ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGU4YjdkMzY2Li4yNTIwYmE2IDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTQ5NSw2ICs0OTUsMTEgQEAKIFM6IDQxMSAxMyAgR290ZWJvcmcKIFM6IFN3ZWRlbgogCitOOiBQYXVsIEJyaXN0b3cKK0U6IHBhdWxAcGF1bGJyaXN0b3cubmV0CitXOiBodHRwOi8vcGF1bGJyaXN0b3cubmV0L2xpbnV4L2lkZWZsb3BweS5odG1sCitEOiBNYWludGFpbmVyIG9mIElERS9BVEFQSSBmbG9wcHkgZHJpdmVyCisKIE46IERvbWluaWsgQnJvZG93c2tpCiBFOiBsaW51eEBicm9kby5kZQogVzogaHR0cDovL3d3dy5icm9kby5kZS8KQEAgLTE0MDcsOCArMTQxMiw4IEBACiBEOiBOYXRpb25hbCBMYW5ndWFnZSBTdXBwb3J0CiBEOiBMaW51eCBJbnRlcm5hdGlvbmFsaXphdGlvbiBQcm9qZWN0CiBEOiBHZXJtYW4gTG9jYWxpemF0aW9uIGZvciBMaW51eCBhbmQgR05VIHNvZnR3YXJlCi1TOiBLcmllbWhpbGRyaW5nIDEyYQotUzogNjU3OTUgSGF0dGVyc2hlaW0gYW0gTWFpbgorUzogQXVmIGRlciBGaXR0ZWwgMTgKK1M6IDUzMzQ3IEFsZnRlcgogUzogR2VybWFueQogCiBOOiBDaHJpc3RvcGggSGVsbHdpZwpAQCAtMjY0Miw2ICsyNjQ3LDEwIEBACiBTOiBWYWxsYWRvbGlkIDQ3MDA5CiBTOiBTcGFpbgogCitOOiBHYWRpIE94bWFuCitFOiBnYWRpb0BuZXR2aXNpb24ubmV0LmlsCitEOiBPcmlnaW5hbCBhdXRob3IgYW5kIG1haW50YWluZXIgb2YgSURFL0FUQVBJIGZsb3BweS90YXBlIGRyaXZlcnMKKwogTjogR3JlZyBQYWdlCiBFOiBncGFnZUBzb3ZlcmVpZ24ub3JnCiBEOiBJUFggZGV2ZWxvcG1lbnQgYW5kIHN1cHBvcnQKQEAgLTM1NzEsNiArMzU4MCwxMiBAQAogRDogQ28tYXV0aG9yIG9mIEdlcm1hbiBib29rIGBgTGludXgtS2VybmVsLVByb2dyYW1taWVydW5nJycKIEQ6IENvLWZvdW5kZXIgb2YgQmVybGluIExpbnV4IFVzZXIgR3JvdXAKIAorTjogUmlrdSBWb2lwaW8KK0U6IHJpa3Uudm9pcGlvQGlraS5maQorRDogQXV0aG9yIG9mIFBDQTk1MzIgTEVEIGFuZCBGaW50ZWsgZjc1Mzc1cyBod21vbiBkcml2ZXIKK0Q6IFNvbWUgcmFuZG9tIEFSTSBib2FyZCBwYXRjaGVzCitTOiBGaW5sYW5kCisKIE46IFBhdHJpY2sgVm9sa2VyZGluZwogRTogdm9sa2VyZGlAZnRwLmNkcm9tLmNvbQogRDogUHJvZHVjZWQgdGhlIFNsYWNrd2FyZSBkaXN0cmlidXRpb24sIHVwZGF0ZWQgdGhlIFNWR0FsaWIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCmluZGV4IDJhMzlhZWIuLmQwNTczN2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWApAQCAtODYsNiArODYsOCBAQAogCS0gZGVzY3JpYmVzIHRoZSBjYWNoZS9UTEIgZmx1c2hpbmcgaW50ZXJmYWNlcyBMaW51eCB1c2VzLgogY2Ryb20vCiAJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvcm1hdGlvbiBvbiB0aGUgQ0QtUk9NIGRyaXZlcnMgdGhhdCBMaW51eCBoYXMuCitjZ3JvdXBzLworCS0gY2dyb3VwcyBmZWF0dXJlcywgaW5jbHVkaW5nIGNwdXNldHMgYW5kIG1lbW9yeSBjb250cm9sbGVyLgogY29ubmVjdG9yLwogCS0gZG9jcyBvbiB0aGUgbmV0bGluayBiYXNlZCB1c2Vyc3BhY2U8LT5rZXJuZWwgc3BhY2UgY29tbXVuaWNhdGlvbiBtb2QuCiBjb25zb2xlLwpAQCAtOTgsOCArMTAwLDYgQEAKIAktIGRvY3VtZW50IGRlc2NyaWJpbmcgaG93IENQVSBsb2FkIHN0YXRpc3RpY3MgYXJlIGNvbGxlY3RlZC4KIGNwdWlkbGUvCiAJLSBpbmZvIG9uIENQVV9JRExFLCBDUFUgaWRsZSBzdGF0ZSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4KLWNwdXNldHMudHh0Ci0JLSBkb2N1bWVudHMgdGhlIGNwdXNldHMgZmVhdHVyZTsgYXNzaWduIENQVXMgYW5kIE1lbSB0byBhIHNldCBvZiB0YXNrcy4KIGNwdXRvcG9sb2d5LnR4dAogCS0gZG9jdW1lbnRhdGlvbiBvbiBob3cgQ1BVIHRvcG9sb2d5IGluZm8gaXMgZXhwb3J0ZWQgdmlhIHN5c2ZzLgogY3Jpcy8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvZGVidWdmcy1rbWVtdHJhY2UgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMta21lbXRyYWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNmE5MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL2RlYnVnZnMta21lbXRyYWNlCkBAIC0wLDAgKzEsNzEgQEAKK1doYXQ6CQkvc3lzL2tlcm5lbC9kZWJ1Zy9rbWVtdHJhY2UvCitEYXRlOgkJSnVseSAyMDA4CitDb250YWN0OglFZHVhcmQgLSBHYWJyaWVsIE11bnRlYW51IDxlZHVhcmQubXVudGVhbnVAbGludXgzNjAucm8+CitEZXNjcmlwdGlvbjoKKworSW4ga21lbXRyYWNlLWVuYWJsZWQga2VybmVscywgdGhlIGZvbGxvd2luZyBmaWxlcyBhcmUgY3JlYXRlZDoKKworL3N5cy9rZXJuZWwvZGVidWcva21lbXRyYWNlLworCWNwdTxuPgkJKDA0MDApCVBlci1DUFUgdHJhY2luZyBkYXRhLCBzZWUgYmVsb3cuIChiaW5hcnkpCisJdG90YWxfb3ZlcnJ1bnMJKDA0MDApCVRvdGFsIG51bWJlciBvZiBieXRlcyB3aGljaCB3ZXJlIGRyb3BwZWQgZnJvbQorCQkJCWNwdTxuPiBmaWxlcyBiZWNhdXNlIG9mIGZ1bGwgYnVmZmVyIGNvbmRpdGlvbiwKKwkJCQlub24tYmluYXJ5LiAodGV4dCkKKwlhYmlfdmVyc2lvbgkoMDQwMCkJS2VybmVsJ3Mga21lbXRyYWNlIEFCSSB2ZXJzaW9uLiAodGV4dCkKKworRWFjaCBwZXItQ1BVIGZpbGUgc2hvdWxkIGJlIHJlYWQgYWNjb3JkaW5nIHRvIHRoZSByZWxheSBpbnRlcmZhY2UuIFRoYXQgaXMsCit0aGUgcmVhZGVyIHNob3VsZCBzZXQgYWZmaW5pdHkgdG8gdGhhdCBzcGVjaWZpYyBDUFUgYW5kLCBhcyBjdXJyZW50bHkgZG9uZSBieQordGhlIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiAodGhvdWdoIHRoZXJlIGFyZSBvdGhlciBtZXRob2RzKSwgdXNlIHBvbGwoKSB3aXRoCithbiBpbmZpbml0ZSB0aW1lb3V0IGJlZm9yZSBldmVyeSByZWFkKCkuIE90aGVyd2lzZSwgZXJyb25lb3VzIGRhdGEgbWF5IGJlCityZWFkLiBUaGUgYmluYXJ5IGRhdGEgaGFzIHRoZSBmb2xsb3dpbmcgX2NvcmVfIGZvcm1hdDoKKworCUV2ZW50IElECSgxIGJ5dGUpCVVuc2lnbmVkIGludGVnZXIsIG9uZSBvZjoKKwkJMCAtIHJlcHJlc2VudHMgYW4gYWxsb2NhdGlvbiAoS01FTVRSQUNFX0VWRU5UX0FMTE9DKQorCQkxIC0gcmVwcmVzZW50cyBhIGZyZWVpbmcgb2YgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5CisJCSAgICAoS01FTVRSQUNFX0VWRU5UX0ZSRUUpCisJVHlwZSBJRAkJKDEgYnl0ZSkJVW5zaWduZWQgaW50ZWdlciwgb25lIG9mOgorCQkwIC0gdGhpcyBpcyBhIGttYWxsb2MoKSAvIGtmcmVlKCkKKwkJMSAtIHRoaXMgaXMgYSBrbWVtX2NhY2hlX2FsbG9jKCkgLyBrbWVtX2NhY2hlX2ZyZWUoKQorCQkyIC0gdGhpcyBpcyBhIF9fZ2V0X2ZyZWVfcGFnZXMoKSBldCBhbC4KKwlFdmVudCBzaXplCSgyIGJ5dGVzKQlVbnNpZ25lZCBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUKKwkJCQkJc2l6ZSBvZiB0aGlzIGV2ZW50LiBVc2VkIHRvIGV4dGVuZAorCQkJCQlrbWVtdHJhY2UuIERpc2NhcmQgdGhlIGJ5dGVzIHlvdQorCQkJCQlkb24ndCBrbm93IGFib3V0LgorCVNlcXVlbmNlIG51bWJlcgkoNCBieXRlcykJU2lnbmVkIGludGVnZXIgdXNlZCB0byByZW9yZGVyIGRhdGEKKwkJCQkJbG9nZ2VkIG9uIFNNUCBtYWNoaW5lcy4gV3JhcGFyb3VuZAorCQkJCQltdXN0IGJlIHRha2VuIGludG8gYWNjb3VudCwgYWx0aG91Z2gKKwkJCQkJaXQgaXMgdW5saWtlbHkuCisJQ2FsbGVyIGFkZHJlc3MJKDggYnl0ZXMpCVJldHVybiBhZGRyZXNzIHRvIHRoZSBjYWxsZXIuCisJUG9pbnRlciB0byBtZW0JKDggYnl0ZXMpCVBvaW50ZXIgdG8gdGFyZ2V0IG1lbW9yeSBhcmVhLiBDYW4gYmUKKwkJCQkJTlVMTCwgYnV0IG5vdCBhbGwgc3VjaCBjYWxscyBtaWdodCBiZQorCQkJCQlyZWNvcmRlZC4KKworSW4gY2FzZSBvZiBLTUVNVFJBQ0VfRVZFTlRfQUxMT0MgZXZlbnRzLCB0aGUgbmV4dCBmaWVsZHMgZm9sbG93OgorCisJUmVxdWVzdGVkIGJ5dGVzCSg4IGJ5dGVzKQlUb3RhbCBudW1iZXIgb2YgcmVxdWVzdGVkIGJ5dGVzLAorCQkJCQl1bnNpZ25lZCwgbXVzdCBub3QgYmUgemVyby4KKwlBbGxvY2F0ZWQgYnl0ZXMgKDggYnl0ZXMpCVRvdGFsIG51bWJlciBvZiBhY3R1YWxseSBhbGxvY2F0ZWQKKwkJCQkJYnl0ZXMsIHVuc2lnbmVkLCBtdXN0IG5vdCBiZSBsb3dlcgorCQkJCQl0aGFuIHJlcXVlc3RlZCBieXRlcy4KKwlSZXF1ZXN0ZWQgZmxhZ3MJKDQgYnl0ZXMpCUdGUCBmbGFncyBzdXBwbGllZCBieSB0aGUgY2FsbGVyLgorCVRhcmdldCBDUFUJKDQgYnl0ZXMpCVNpZ25lZCBpbnRlZ2VyLCB2YWxpZCBmb3IgZXZlbnQgaWQgMS4KKwkJCQkJSWYgZXF1YWwgdG8gLTEsIHRhcmdldCBDUFUgaXMgdGhlIHNhbWUKKwkJCQkJYXMgb3JpZ2luIENQVSwgYnV0IHRoZSByZXZlcnNlIG1pZ2h0CisJCQkJCW5vdCBiZSB0cnVlLgorCitUaGUgZGF0YSBpcyBtYWRlIGF2YWlsYWJsZSBpbiB0aGUgc2FtZSBlbmRpYW5uZXNzIHRoZSBtYWNoaW5lIGhhcy4KKworT3RoZXIgZXZlbnQgaWRzIGFuZCB0eXBlIGlkcyBtYXkgYmUgZGVmaW5lZCBhbmQgYWRkZWQuIE90aGVyIGZpZWxkcyBtYXkgYmUKK2FkZGVkIGJ5IGluY3JlYXNpbmcgZXZlbnQgc2l6ZSwgYnV0IHNlZSBiZWxvdyBmb3IgZGV0YWlscy4KK0V2ZXJ5IG1vZGlmaWNhdGlvbiB0byB0aGUgQUJJLCBpbmNsdWRpbmcgbmV3IGlkIGRlZmluaXRpb25zLCBhcmUgZm9sbG93ZWQKK2J5IGJ1bXBpbmcgdGhlIEFCSSB2ZXJzaW9uIGJ5IG9uZS4KKworQWRkaW5nIG5ldyBkYXRhIHRvIHRoZSBwYWNrZXQgKGZlYXR1cmVzKSBpcyBkb25lIGF0IHRoZSBlbmQgb2YgdGhlIG1hbmRhdG9yeQorZGF0YToKKwlGZWF0dXJlIHNpemUJKDIgYnl0ZSkKKwlGZWF0dXJlIElECSgxIGJ5dGUpCisJRmVhdHVyZSBkYXRhCShGZWF0dXJlIHNpemUgLSAzIGJ5dGVzKQorCisKK1VzZXJzOgorCWttZW10cmFjZS11c2VyIC0gZ2l0Oi8vcmVwby5vci5jei9rbWVtdHJhY2UtdXNlci5naXQKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtcGNpCmluZGV4IGU2MzhlMTUuLjk3YWQxOTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXBjaQorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1wY2kKQEAgLTQxLDYgKzQxLDQ5IEBACiAJCWZvciB0aGUgZGV2aWNlIGFuZCBhdHRlbXB0IHRvIGJpbmQgdG8gaXQuICBGb3IgZXhhbXBsZToKIAkJIyBlY2hvICI4MDg2IDEwZjUiID4gL3N5cy9idXMvcGNpL2RyaXZlcnMvZm9vL25ld19pZAogCitXaGF0OgkJL3N5cy9idXMvcGNpL2RyaXZlcnMvLi4uL3JlbW92ZV9pZAorRGF0ZToJCUZlYnJ1YXJ5IDIwMDkKK0NvbnRhY3Q6CUNocmlzIFdyaWdodCA8Y2hyaXN3QHNvdXMtc29sLm9yZz4KK0Rlc2NyaXB0aW9uOgorCQlXcml0aW5nIGEgZGV2aWNlIElEIHRvIHRoaXMgZmlsZSB3aWxsIHJlbW92ZSBhbiBJRAorCQl0aGF0IHdhcyBkeW5hbWljYWxseSBhZGRlZCB2aWEgdGhlIG5ld19pZCBzeXNmcyBlbnRyeS4KKwkJVGhlIGZvcm1hdCBmb3IgdGhlIGRldmljZSBJRCBpczoKKwkJVlZWViBEREREIFNWVlYgU0RERCBDQ0NDIE1NTU0uCVRoYXQgaXMgVmVuZG9yIElELCBEZXZpY2UKKwkJSUQsIFN1YnN5c3RlbSBWZW5kb3IgSUQsIFN1YnN5c3RlbSBEZXZpY2UgSUQsIENsYXNzLAorCQlhbmQgQ2xhc3MgTWFzay4gIFRoZSBWZW5kb3IgSUQgYW5kIERldmljZSBJRCBmaWVsZHMgYXJlCisJCXJlcXVpcmVkLCB0aGUgcmVzdCBhcmUgb3B0aW9uYWwuICBBZnRlciBzdWNjZXNzZnVsbHkKKwkJcmVtb3ZpbmcgYW4gSUQsIHRoZSBkcml2ZXIgd2lsbCBubyBsb25nZXIgc3VwcG9ydCB0aGUKKwkJZGV2aWNlLiAgVGhpcyBpcyB1c2VmdWwgdG8gZW5zdXJlIGF1dG8gcHJvYmluZyB3b24ndAorCQltYXRjaCB0aGUgZHJpdmVyIHRvIHRoZSBkZXZpY2UuICBGb3IgZXhhbXBsZToKKwkJIyBlY2hvICI4MDg2IDEwZjUiID4gL3N5cy9idXMvcGNpL2RyaXZlcnMvZm9vL3JlbW92ZV9pZAorCitXaGF0OgkJL3N5cy9idXMvcGNpL3Jlc2NhbgorRGF0ZToJCUphbnVhcnkgMjAwOQorQ29udGFjdDoJTGludXggUENJIGRldmVsb3BlcnMgPGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc+CitEZXNjcmlwdGlvbjoKKwkJV3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlIHRvIHRoaXMgYXR0cmlidXRlIHdpbGwKKwkJZm9yY2UgYSByZXNjYW4gb2YgYWxsIFBDSSBidXNlcyBpbiB0aGUgc3lzdGVtLCBhbmQKKwkJcmUtZGlzY292ZXIgcHJldmlvdXNseSByZW1vdmVkIGRldmljZXMuCisJCURlcGVuZHMgb24gQ09ORklHX0hPVFBMVUcuCisKK1doYXQ6CQkvc3lzL2J1cy9wY2kvZGV2aWNlcy8uLi4vcmVtb3ZlCitEYXRlOgkJSmFudWFyeSAyMDA5CitDb250YWN0OglMaW51eCBQQ0kgZGV2ZWxvcGVycyA8bGludXgtcGNpQHZnZXIua2VybmVsLm9yZz4KK0Rlc2NyaXB0aW9uOgorCQlXcml0aW5nIGEgbm9uLXplcm8gdmFsdWUgdG8gdGhpcyBhdHRyaWJ1dGUgd2lsbAorCQlob3QtcmVtb3ZlIHRoZSBQQ0kgZGV2aWNlIGFuZCBhbnkgb2YgaXRzIGNoaWxkcmVuLgorCQlEZXBlbmRzIG9uIENPTkZJR19IT1RQTFVHLgorCitXaGF0OgkJL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3Jlc2NhbgorRGF0ZToJCUphbnVhcnkgMjAwOQorQ29udGFjdDoJTGludXggUENJIGRldmVsb3BlcnMgPGxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmc+CitEZXNjcmlwdGlvbjoKKwkJV3JpdGluZyBhIG5vbi16ZXJvIHZhbHVlIHRvIHRoaXMgYXR0cmlidXRlIHdpbGwKKwkJZm9yY2UgYSByZXNjYW4gb2YgdGhlIGRldmljZSdzIHBhcmVudCBidXMgYW5kIGFsbAorCQljaGlsZCBidXNlcywgYW5kIHJlLWRpc2NvdmVyIGRldmljZXMgcmVtb3ZlZCBlYXJsaWVyCisJCWZyb20gdGhpcyBwYXJ0IG9mIHRoZSBkZXZpY2UgdHJlZS4KKwkJRGVwZW5kcyBvbiBDT05GSUdfSE9UUExVRy4KKwogV2hhdDoJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi92cGQKIERhdGU6CQlGZWJydWFyeSAyMDA4CiBDb250YWN0OglCZW4gSHV0Y2hpbmdzIDxiaHV0Y2hpbmdzQHNvbGFyZmxhcmUuY29tPgpAQCAtNTIsMyArOTUsMzAgQEAKIAkJdGhhdCBzb21lIGRldmljZXMgbWF5IGhhdmUgbWFsZm9ybWF0dGVkIGRhdGEuICBJZiB0aGUKIAkJdW5kZXJseWluZyBWUEQgaGFzIGEgd3JpdGFibGUgc2VjdGlvbiB0aGVuIHRoZQogCQljb3JyZXNwb25kaW5nIHNlY3Rpb24gb2YgdGhpcyBmaWxlIHdpbGwgYmUgd3JpdGFibGUuCisKK1doYXQ6CQkvc3lzL2J1cy9wY2kvZGV2aWNlcy8uLi4vdmlydGZuTgorRGF0ZToJCU1hcmNoIDIwMDkKK0NvbnRhY3Q6CVl1IFpoYW8gPHl1LnpoYW9AaW50ZWwuY29tPgorRGVzY3JpcHRpb246CisJCVRoaXMgc3ltYm9saWMgbGluayBhcHBlYXJzIHdoZW4gaGFyZHdhcmUgc3VwcG9ydHMgdGhlIFNSLUlPVgorCQljYXBhYmlsaXR5IGFuZCB0aGUgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyIGhhcyBlbmFibGVkIGl0LgorCQlUaGUgc3ltYm9saWMgbGluayBwb2ludHMgdG8gdGhlIFBDSSBkZXZpY2Ugc3lzZnMgZW50cnkgb2YgdGhlCisJCVZpcnR1YWwgRnVuY3Rpb24gd2hvc2UgaW5kZXggaXMgTiAoMC4uLk1heFZGcy0xKS4KKworV2hhdDoJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi9kZXBfbGluaworRGF0ZToJCU1hcmNoIDIwMDkKK0NvbnRhY3Q6CVl1IFpoYW8gPHl1LnpoYW9AaW50ZWwuY29tPgorRGVzY3JpcHRpb246CisJCVRoaXMgc3ltYm9saWMgbGluayBhcHBlYXJzIHdoZW4gaGFyZHdhcmUgc3VwcG9ydHMgdGhlIFNSLUlPVgorCQljYXBhYmlsaXR5IGFuZCB0aGUgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyIGhhcyBlbmFibGVkIGl0LAorCQlhbmQgdGhpcyBkZXZpY2UgaGFzIHZlbmRvciBzcGVjaWZpYyBkZXBlbmRlbmNpZXMgd2l0aCBvdGhlcnMuCisJCVRoZSBzeW1ib2xpYyBsaW5rIHBvaW50cyB0byB0aGUgUENJIGRldmljZSBzeXNmcyBlbnRyeSBvZgorCQlQaHlzaWNhbCBGdW5jdGlvbiB0aGlzIGRldmljZSBkZXBlbmRzIG9uLgorCitXaGF0OgkJL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3BoeXNmbgorRGF0ZToJCU1hcmNoIDIwMDkKK0NvbnRhY3Q6CVl1IFpoYW8gPHl1LnpoYW9AaW50ZWwuY29tPgorRGVzY3JpcHRpb246CisJCVRoaXMgc3ltYm9saWMgbGluayBhcHBlYXJzIHdoZW4gYSBkZXZpY2UgaXMgYSBWaXJ0dWFsIEZ1bmN0aW9uLgorCQlUaGUgc3ltYm9saWMgbGluayBwb2ludHMgdG8gdGhlIFBDSSBkZXZpY2Ugc3lzZnMgZW50cnkgb2YgdGhlCisJCVBoeXNpY2FsIEZ1bmN0aW9uIHRoaXMgZGV2aWNlIGFzc29jaWF0ZXMgd2l0aC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtcmVndWxhdG9yIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1yZWd1bGF0b3IKaW5kZXggODczZWYxZi4uZTA5MWZhOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1yZWd1bGF0b3IKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1yZWd1bGF0b3IKQEAgLTQsOCArNCw4IEBACiBDb250YWN0OglMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogRGVzY3JpcHRpb246CiAJCVNvbWUgcmVndWxhdG9yIGRpcmVjdG9yaWVzIHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAotCQlzdGF0ZS4gVGhpcyByZXBvcnRzIHRoZSByZWd1bGF0b3IgZW5hYmxlIHN0YXR1cywgZm9yCi0JCXJlZ3VsYXRvcnMgd2hpY2ggY2FuIHJlcG9ydCB0aGF0IHZhbHVlLgorCQlzdGF0ZS4gVGhpcyByZXBvcnRzIHRoZSByZWd1bGF0b3IgZW5hYmxlIGNvbnRyb2wsIGZvcgorCQlyZWd1bGF0b3JzIHdoaWNoIGNhbiByZXBvcnQgdGhhdCBpbnB1dCB2YWx1ZS4KIAogCQlUaGlzIHdpbGwgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKIApAQCAtMTQsMTYgKzE0LDU0IEBACiAJCSd1bmtub3duJwogCiAJCSdlbmFibGVkJyBtZWFucyB0aGUgcmVndWxhdG9yIG91dHB1dCBpcyBPTiBhbmQgaXMgc3VwcGx5aW5nCi0JCXBvd2VyIHRvIHRoZSBzeXN0ZW0uCisJCXBvd2VyIHRvIHRoZSBzeXN0ZW0gKGFzc3VtaW5nIG5vIGVycm9yIHByZXZlbnRzIGl0KS4KIAogCQknZGlzYWJsZWQnIG1lYW5zIHRoZSByZWd1bGF0b3Igb3V0cHV0IGlzIE9GRiBhbmQgaXMgbm90Ci0JCXN1cHBseWluZyBwb3dlciB0byB0aGUgc3lzdGVtLi4KKwkJc3VwcGx5aW5nIHBvd2VyIHRvIHRoZSBzeXN0ZW0gKHVubGVzcyBzb21lIG5vbi1MaW51eAorCQljb250cm9sIGhhcyBlbmFibGVkIGl0KS4KIAogCQkndW5rbm93bicgbWVhbnMgc29mdHdhcmUgY2Fubm90IGRldGVybWluZSB0aGUgc3RhdGUsIG9yCiAJCXRoZSByZXBvcnRlZCBzdGF0ZSBpcyBpbnZhbGlkLgogCiAJCU5PVEU6IHRoaXMgZmllbGQgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBtaWNyb3ZvbHRzCi0JCWFuZCBtaWNyb2FtcHMgdG8gZGV0ZXJtaW5lIHJlZ3VsYXRvciBvdXRwdXQgbGV2ZWxzLgorCQlvciBtaWNyb2FtcHMgdG8gZGV0ZXJtaW5lIGNvbmZpZ3VyZWQgcmVndWxhdG9yIG91dHB1dCBsZXZlbHMuCisKKworV2hhdDoJCS9zeXMvY2xhc3MvcmVndWxhdG9yLy4uLi9zdGF0dXMKK0Rlc2NyaXB0aW9uOgorCQlTb21lIHJlZ3VsYXRvciBkaXJlY3RvcmllcyB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKKwkJInN0YXR1cyIuIFRoaXMgcmVwb3J0cyB0aGUgY3VycmVudCByZWd1bGF0b3Igc3RhdHVzLCBmb3IKKwkJcmVndWxhdG9ycyB3aGljaCBjYW4gcmVwb3J0IHRoYXQgb3V0cHV0IHZhbHVlLgorCisJCVRoaXMgd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzOgorCisJCQlvZmYKKwkJCW9uCisJCQllcnJvcgorCQkJZmFzdAorCQkJbm9ybWFsCisJCQlpZGxlCisJCQlzdGFuZGJ5CisKKwkJIm9mZiIgbWVhbnMgdGhlIHJlZ3VsYXRvciBpcyBub3Qgc3VwcGx5aW5nIHBvd2VyIHRvIHRoZQorCQlzeXN0ZW0uCisKKwkJIm9uIiBtZWFucyB0aGUgcmVndWxhdG9yIGlzIHN1cHBseWluZyBwb3dlciB0byB0aGUgc3lzdGVtLAorCQlhbmQgdGhlIHJlZ3VsYXRvciBjYW4ndCByZXBvcnQgYSBkZXRhaWxlZCBvcGVyYXRpb24gbW9kZS4KKworCQkiZXJyb3IiIGluZGljYXRlcyBhbiBvdXQtb2YtcmVndWxhdGlvbiBzdGF0dXMgc3VjaCBhcyBiZWluZworCQlkaXNhYmxlZCBkdWUgdG8gdGhlcm1hbCBzaHV0ZG93biwgb3Igdm9sdGFnZSBiZWluZyB1bnN0YWJsZQorCQliZWNhdXNlIG9mIHByb2JsZW1zIHdpdGggdGhlIGlucHV0IHBvd2VyIHN1cHBseS4KKworCQkiZmFzdCIsICJub3JtYWwiLCAiaWRsZSIsIGFuZCAic3RhbmRieSIgYXJlIGFsbCBkZXRhaWxlZAorCQlyZWd1bGF0b3Igb3BlcmF0aW9uIG1vZGVzIChkZXNjcmliZWQgZWxzZXdoZXJlKS4gIFRoZXkKKwkJaW1wbHkgIm9uIiwgYnV0IHByb3ZpZGUgbW9yZSBkZXRhaWwuCisKKwkJTm90ZSB0aGF0IHJlZ3VsYXRvciBzdGF0dXMgaXMgYSBmdW5jdGlvbiBvZiBtYW55IGlucHV0cywKKwkJbm90IGxpbWl0ZWQgdG8gY29udHJvbCBpbnB1dHMgZnJvbSBMaW51eC4gIEZvciBleGFtcGxlLAorCQl0aGUgYWN0dWFsIGxvYWQgcHJlc2VudGVkIG1heSB0cmlnZ2VyICJlcnJvciIgc3RhdHVzOyBvcgorCQlhIHJlZ3VsYXRvciBtYXkgYmUgZW5hYmxlZCBieSBhbm90aGVyIHVzZXIsIGV2ZW4gdGhvdWdoCisJCUxpbnV4IGRpZCBub3QgZW5hYmxlIGl0LgogCiAKIFdoYXQ6CQkvc3lzL2NsYXNzL3JlZ3VsYXRvci8uLi4vdHlwZQpAQCAtNTgsNyArOTYsNyBAQAogCQlTb21lIHJlZ3VsYXRvciBkaXJlY3RvcmllcyB3aWxsIGNvbnRhaW4gYSBmaWVsZCBjYWxsZWQKIAkJbWljcm92b2x0cy4gVGhpcyBob2xkcyB0aGUgcmVndWxhdG9yIG91dHB1dCB2b2x0YWdlIHNldHRpbmcKIAkJbWVhc3VyZWQgaW4gbWljcm92b2x0cyAoaS5lLiBFLTYgVm9sdHMpLCBmb3IgcmVndWxhdG9ycwotCQl3aGljaCBjYW4gcmVwb3J0IHRoYXQgdm9sdGFnZS4KKwkJd2hpY2ggY2FuIHJlcG9ydCB0aGUgY29udHJvbCBpbnB1dCBmb3Igdm9sdGFnZS4KIAogCQlOT1RFOiBUaGlzIHZhbHVlIHNob3VsZCBub3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlZ3VsYXRvcgogCQlvdXRwdXQgdm9sdGFnZSBsZXZlbCBhcyB0aGlzIHZhbHVlIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2YKQEAgLTczLDcgKzExMSw3IEBACiAJCVNvbWUgcmVndWxhdG9yIGRpcmVjdG9yaWVzIHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQltaWNyb2FtcHMuIFRoaXMgaG9sZHMgdGhlIHJlZ3VsYXRvciBvdXRwdXQgY3VycmVudCBsaW1pdAogCQlzZXR0aW5nIG1lYXN1cmVkIGluIG1pY3JvYW1wcyAoaS5lLiBFLTYgQW1wcyksIGZvciByZWd1bGF0b3JzCi0JCXdoaWNoIGNhbiByZXBvcnQgdGhhdCBjdXJyZW50LgorCQl3aGljaCBjYW4gcmVwb3J0IHRoZSBjb250cm9sIGlucHV0IGZvciBhIGN1cnJlbnQgbGltaXQuCiAKIAkJTk9URTogVGhpcyB2YWx1ZSBzaG91bGQgbm90IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWd1bGF0b3IKIAkJb3V0cHV0IGN1cnJlbnQgbGV2ZWwgYXMgdGhpcyB2YWx1ZSBpcyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mCkBAIC04Nyw3ICsxMjUsNyBAQAogRGVzY3JpcHRpb246CiAJCVNvbWUgcmVndWxhdG9yIGRpcmVjdG9yaWVzIHdpbGwgY29udGFpbiBhIGZpZWxkIGNhbGxlZAogCQlvcG1vZGUuIFRoaXMgaG9sZHMgdGhlIGN1cnJlbnQgcmVndWxhdG9yIG9wZXJhdGluZyBtb2RlLAotCQlmb3IgcmVndWxhdG9ycyB3aGljaCBjYW4gcmVwb3J0IGl0LgorCQlmb3IgcmVndWxhdG9ycyB3aGljaCBjYW4gcmVwb3J0IHRoYXQgY29udHJvbCBpbnB1dCB2YWx1ZS4KIAogCQlUaGUgb3Btb2RlIHZhbHVlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdHJpbmdzOgogCkBAIC0xMDEsNyArMTM5LDggQEAKIAogCQlOT1RFOiBUaGlzIHZhbHVlIHNob3VsZCBub3QgYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHJlZ3VsYXRvcgogCQlvdXRwdXQgb3BlcmF0aW5nIG1vZGUgYXMgdGhpcyB2YWx1ZSBpcyB0aGUgc2FtZSByZWdhcmRsZXNzIG9mCi0JCXdoZXRoZXIgdGhlIHJlZ3VsYXRvciBpcyBlbmFibGVkIG9yIGRpc2FibGVkLgorCQl3aGV0aGVyIHRoZSByZWd1bGF0b3IgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gIEEgInN0YXR1cyIKKwkJYXR0cmlidXRlIG1heSBiZSBhdmFpbGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBhY3R1YWwgbW9kZS4KIAogCiBXaGF0OgkJL3N5cy9jbGFzcy9yZWd1bGF0b3IvLi4uL21pbl9taWNyb3ZvbHRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWZzLWV4dDQgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWZzLWV4dDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3OTA3NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZnMtZXh0NApAQCAtMCwwICsxLDgxIEBACitXaGF0OgkJL3N5cy9mcy9leHQ0LzxkaXNrPi9tYl9zdGF0cworRGF0ZToJCU1hcmNoIDIwMDgKK0NvbnRhY3Q6CSJUaGVvZG9yZSBUcydvIiA8dHl0c29AbWl0LmVkdT4KK0Rlc2NyaXB0aW9uOgorCQkgQ29udHJvbHMgd2hldGhlciB0aGUgbXVsdGlibG9jayBhbGxvY2F0b3Igc2hvdWxkCisJCSBjb2xsZWN0IHN0YXRpc3RpY3MsIHdoaWNoIGFyZSBzaG93biBkdXJpbmcgdGhlIHVubW91bnQuCisJCSAxIG1lYW5zIHRvIGNvbGxlY3Qgc3RhdGlzdGljcywgMCBtZWFucyBub3QgdG8gY29sbGVjdAorCQkgc3RhdGlzdGljcworCitXaGF0OgkJL3N5cy9mcy9leHQ0LzxkaXNrPi9tYl9ncm91cF9wcmVhbGxvYworRGF0ZToJCU1hcmNoIDIwMDgKK0NvbnRhY3Q6CSJUaGVvZG9yZSBUcydvIiA8dHl0c29AbWl0LmVkdT4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgbXVsdGlibG9jayBhbGxvY2F0b3Igd2lsbCByb3VuZCB1cCBhbGxvY2F0aW9uCisJCXJlcXVlc3RzIHRvIGEgbXVsdGlwbGUgb2YgdGhpcyB0dW5pbmcgcGFyYW1ldGVyIGlmIHRoZQorCQlzdHJpcGUgc2l6ZSBpcyBub3Qgc2V0IGluIHRoZSBleHQ0IHN1cGVyYmxvY2sKKworV2hhdDoJCS9zeXMvZnMvZXh0NC88ZGlzaz4vbWJfbWF4X3RvX3NjYW4KK0RhdGU6CQlNYXJjaCAyMDA4CitDb250YWN0OgkiVGhlb2RvcmUgVHMnbyIgPHR5dHNvQG1pdC5lZHU+CitEZXNjcmlwdGlvbjoKKwkJVGhlIG1heGltdW0gbnVtYmVyIG9mIGV4dGVudHMgdGhlIG11bHRpYmxvY2sgYWxsb2NhdG9yCisJCXdpbGwgc2VhcmNoIHRvIGZpbmQgdGhlIGJlc3QgZXh0ZW50CisKK1doYXQ6CQkvc3lzL2ZzL2V4dDQvPGRpc2s+L21iX21pbl90b19zY2FuCitEYXRlOgkJTWFyY2ggMjAwOAorQ29udGFjdDoJIlRoZW9kb3JlIFRzJ28iIDx0eXRzb0BtaXQuZWR1PgorRGVzY3JpcHRpb246CisJCVRoZSBtaW5pbXVtIG51bWJlciBvZiBleHRlbnRzIHRoZSBtdWx0aWJsb2NrIGFsbG9jYXRvcgorCQl3aWxsIHNlYXJjaCB0byBmaW5kIHRoZSBiZXN0IGV4dGVudAorCitXaGF0OgkJL3N5cy9mcy9leHQ0LzxkaXNrPi9tYl9vcmRlcjJfcmVxCitEYXRlOgkJTWFyY2ggMjAwOAorQ29udGFjdDoJIlRoZW9kb3JlIFRzJ28iIDx0eXRzb0BtaXQuZWR1PgorRGVzY3JpcHRpb246CisJCVR1bmluZyBwYXJhbWV0ZXIgd2hpY2ggY29udHJvbHMgdGhlIG1pbmltdW0gc2l6ZSBmb3IgCisJCXJlcXVlc3RzIChhcyBhIHBvd2VyIG9mIDIpIHdoZXJlIHRoZSBidWRkeSBjYWNoZSBpcworCQl1c2VkCisKK1doYXQ6CQkvc3lzL2ZzL2V4dDQvPGRpc2s+L21iX3N0cmVhbV9yZXEKK0RhdGU6CQlNYXJjaCAyMDA4CitDb250YWN0OgkiVGhlb2RvcmUgVHMnbyIgPHR5dHNvQG1pdC5lZHU+CitEZXNjcmlwdGlvbjoKKwkJRmlsZXMgd2hpY2ggaGF2ZSBmZXdlciBibG9ja3MgdGhhbiB0aGlzIHR1bmFibGUKKwkJcGFyYW1ldGVyIHdpbGwgaGF2ZSB0aGVpciBibG9ja3MgYWxsb2NhdGVkIG91dCBvZiBhCisJCWJsb2NrIGdyb3VwIHNwZWNpZmljIHByZWFsbG9jYXRpb24gcG9vbCwgc28gdGhhdCBzbWFsbAorCQlmaWxlcyBhcmUgcGFja2VkIGNsb3NlbHkgdG9nZXRoZXIuICBFYWNoIGxhcmdlIGZpbGUKKwkJIHdpbGwgaGF2ZSBpdHMgYmxvY2tzIGFsbG9jYXRlZCBvdXQgb2YgaXRzIG93biB1bmlxdWUKKwkJIHByZWFsbG9jYXRpb24gcG9vbC4KKworV2hhdDoJCS9zeXMvZnMvZXh0NC88ZGlzaz4vaW5vZGVfcmVhZGFoZWFkCitEYXRlOgkJTWFyY2ggMjAwOAorQ29udGFjdDoJIlRoZW9kb3JlIFRzJ28iIDx0eXRzb0BtaXQuZWR1PgorRGVzY3JpcHRpb246CisJCVR1bmluZyBwYXJhbWV0ZXIgd2hpY2ggY29udHJvbHMgdGhlIG1heGltdW0gbnVtYmVyIG9mCisJCWlub2RlIHRhYmxlIGJsb2NrcyB0aGF0IGV4dDQncyBpbm9kZSB0YWJsZSByZWFkYWhlYWQKKwkJYWxnb3JpdGhtIHdpbGwgcHJlLXJlYWQgaW50byB0aGUgYnVmZmVyIGNhY2hlCisKK1doYXQ6CQkvc3lzL2ZzL2V4dDQvPGRpc2s+L2RlbGF5ZWRfYWxsb2NhdGlvbl9ibG9ja3MKK0RhdGU6CQlNYXJjaCAyMDA4CitDb250YWN0OgkiVGhlb2RvcmUgVHMnbyIgPHR5dHNvQG1pdC5lZHU+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGlzIHJlYWQtb25seSBhbmQgc2hvd3MgdGhlIG51bWJlciBvZiBibG9ja3MKKwkJdGhhdCBhcmUgZGlydHkgaW4gdGhlIHBhZ2UgY2FjaGUsIGJ1dCB3aGljaCBkbyBub3QKKwkJaGF2ZSB0aGVpciBsb2NhdGlvbiBpbiB0aGUgZmlsZXN5c3RlbSBhbGxvY2F0ZWQgeWV0LgorCitXaGF0OgkJL3N5cy9mcy9leHQ0LzxkaXNrPi9saWZldGltZV93cml0ZV9rYnl0ZXMKK0RhdGU6CQlNYXJjaCAyMDA4CitDb250YWN0OgkiVGhlb2RvcmUgVHMnbyIgPHR5dHNvQG1pdC5lZHU+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGlzIHJlYWQtb25seSBhbmQgc2hvd3MgdGhlIG51bWJlciBvZiBraWxvYnl0ZXMKKwkJb2YgZGF0YSB0aGF0IGhhdmUgYmVlbiB3cml0dGVuIHRvIHRoaXMgZmlsZXN5c3RlbSBzaW5jZSBpdCB3YXMKKwkJY3JlYXRlZC4KKworV2hhdDoJCS9zeXMvZnMvZXh0NC88ZGlzaz4vc2Vzc2lvbl93cml0ZV9rYnl0ZXMKK0RhdGU6CQlNYXJjaCAyMDA4CitDb250YWN0OgkiVGhlb2RvcmUgVHMnbyIgPHR5dHNvQG1pdC5lZHU+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGlzIHJlYWQtb25seSBhbmQgc2hvd3MgdGhlIG51bWJlciBvZgorCQlraWxvYnl0ZXMgb2YgZGF0YSB0aGF0IGhhdmUgYmVlbiB3cml0dGVuIHRvIHRoaXMKKwkJZmlsZXN5c3RlbSBzaW5jZSBpdCB3YXMgbW91bnRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay8uZ2l0aWdub3JlIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rLy5naXRpZ25vcmUKaW5kZXggYzEwMmMwMi4uYzZkZWYzNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rLy5naXRpZ25vcmUKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rLy5naXRpZ25vcmUKQEAgLTQsMyArNCw3IEBACiAqLmh0bWwKICouOS5negogKi45CisqLmF1eAorKi5kdmkKKyoubG9nCisqLm91dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKaW5kZXggYmM5NjJjZC4uNThjMTk0NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCkBAIC0xOTksNiArMTk5LDcgQEAKIC0tPgogIUVkcml2ZXJzL3BjaS9wcm9iZS5jCiAhRWRyaXZlcnMvcGNpL3JvbS5jCishRWRyaXZlcnMvcGNpL2lvdi5jCiAgICAgIDwvc2VjdDE+CiAgICAgIDxzZWN0MT48dGl0bGU+UENJIEhvdHBsdWcgU3VwcG9ydCBMaWJyYXJ5PC90aXRsZT4KICFFZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Z19jb3JlLmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUENJL01TSS1IT1dUTy50eHQgYi9Eb2N1bWVudGF0aW9uL1BDSS9NU0ktSE9XVE8udHh0CmluZGV4IDI1NmRlZmQ3Li5kY2Y3YWNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1BDSS9NU0ktSE9XVE8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vUENJL01TSS1IT1dUTy50eHQKQEAgLTQsNTA2ICs0LDM1NiBAQAogCVJldmlzZWQgRmViIDEyLCAyMDA0IGJ5IE1hcnRpbmUgU2lsYmVybWFubgogCQllbWFpbDogTWFydGluZS5TaWxiZXJtYW5uQGhwLmNvbQogCVJldmlzZWQgSnVuIDI1LCAyMDA0IGJ5IFRvbSBMIE5ndXllbgorCVJldmlzZWQgSnVsICA5LCAyMDA4IGJ5IE1hdHRoZXcgV2lsY294IDx3aWxseUBsaW51eC5pbnRlbC5jb20+CisJCUNvcHlyaWdodCAyMDAzLCAyMDA4IEludGVsIENvcnBvcmF0aW9uCiAKIDEuIEFib3V0IHRoaXMgZ3VpZGUKIAotVGhpcyBndWlkZSBkZXNjcmliZXMgdGhlIGJhc2ljcyBvZiBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKE1TSSksCi10aGUgYWR2YW50YWdlcyBvZiB1c2luZyBNU0kgb3ZlciB0cmFkaXRpb25hbCBpbnRlcnJ1cHQgbWVjaGFuaXNtcywKLWFuZCBob3cgdG8gZW5hYmxlIHlvdXIgZHJpdmVyIHRvIHVzZSBNU0kgb3IgTVNJLVguIEFsc28gaW5jbHVkZWQgaXMKLWEgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgKEZBUSkgc2VjdGlvbi4KK1RoaXMgZ3VpZGUgZGVzY3JpYmVzIHRoZSBiYXNpY3Mgb2YgTWVzc2FnZSBTaWduYWxlZCBJbnRlcnJ1cHRzIChNU0lzKSwKK3RoZSBhZHZhbnRhZ2VzIG9mIHVzaW5nIE1TSSBvdmVyIHRyYWRpdGlvbmFsIGludGVycnVwdCBtZWNoYW5pc21zLCBob3cKK3RvIGNoYW5nZSB5b3VyIGRyaXZlciB0byB1c2UgTVNJIG9yIE1TSS1YIGFuZCBzb21lIGJhc2ljIGRpYWdub3N0aWNzIHRvCit0cnkgaWYgYSBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IE1TSXMuCiAKLTEuMSBUZXJtaW5vbG9neQogCi1QQ0kgZGV2aWNlcyBjYW4gYmUgc2luZ2xlLWZ1bmN0aW9uIG9yIG11bHRpLWZ1bmN0aW9uLiAgSW4gZWl0aGVyIGNhc2UsCi13aGVuIHRoaXMgdGV4dCB0YWxrcyBhYm91dCBlbmFibGluZyBvciBkaXNhYmxpbmcgTVNJIG9uIGEgImRldmljZQotZnVuY3Rpb24sIiBpdCBpcyByZWZlcnJpbmcgdG8gb25lIHNwZWNpZmljIFBDSSBkZXZpY2UgYW5kIGZ1bmN0aW9uIGFuZAotbm90IHRvIGFsbCBmdW5jdGlvbnMgb24gYSBQQ0kgZGV2aWNlICh1bmxlc3MgdGhlIFBDSSBkZXZpY2UgaGFzIG9ubHkKLW9uZSBmdW5jdGlvbikuCisyLiBXaGF0IGFyZSBNU0lzPwogCi0yLiBDb3B5cmlnaHQgMjAwMyBJbnRlbCBDb3Jwb3JhdGlvbgorQSBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdCBpcyBhIHdyaXRlIGZyb20gdGhlIGRldmljZSB0byBhIHNwZWNpYWwKK2FkZHJlc3Mgd2hpY2ggY2F1c2VzIGFuIGludGVycnVwdCB0byBiZSByZWNlaXZlZCBieSB0aGUgQ1BVLgogCi0zLiBXaGF0IGlzIE1TSS9NU0ktWD8KK1RoZSBNU0kgY2FwYWJpbGl0eSB3YXMgZmlyc3Qgc3BlY2lmaWVkIGluIFBDSSAyLjIgYW5kIHdhcyBsYXRlciBlbmhhbmNlZAoraW4gUENJIDMuMCB0byBhbGxvdyBlYWNoIGludGVycnVwdCB0byBiZSBtYXNrZWQgaW5kaXZpZHVhbGx5LiAgVGhlIE1TSS1YCitjYXBhYmlsaXR5IHdhcyBhbHNvIGludHJvZHVjZWQgd2l0aCBQQ0kgMy4wLiAgSXQgc3VwcG9ydHMgbW9yZSBpbnRlcnJ1cHRzCitwZXIgZGV2aWNlIHRoYW4gTVNJIGFuZCBhbGxvd3MgaW50ZXJydXB0cyB0byBiZSBpbmRlcGVuZGVudGx5IGNvbmZpZ3VyZWQuCiAKLU1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0IChNU0kpLCBhcyBkZXNjcmliZWQgaW4gdGhlIFBDSSBMb2NhbCBCdXMKLVNwZWNpZmljYXRpb24gUmV2aXNpb24gMi4zIG9yIGxhdGVyLCBpcyBhbiBvcHRpb25hbCBmZWF0dXJlLCBhbmQgYQotcmVxdWlyZWQgZmVhdHVyZSBmb3IgUENJIEV4cHJlc3MgZGV2aWNlcy4gTVNJIGVuYWJsZXMgYSBkZXZpY2UgZnVuY3Rpb24KLXRvIHJlcXVlc3Qgc2VydmljZSBieSBzZW5kaW5nIGFuIEluYm91bmQgTWVtb3J5IFdyaXRlIG9uIGl0cyBQQ0kgYnVzIHRvCi10aGUgRlNCIGFzIGEgTWVzc2FnZSBTaWduYWwgSW50ZXJydXB0IHRyYW5zYWN0aW9uLiBCZWNhdXNlIE1TSSBpcwotZ2VuZXJhdGVkIGluIHRoZSBmb3JtIG9mIGEgTWVtb3J5IFdyaXRlLCBhbGwgdHJhbnNhY3Rpb24gY29uZGl0aW9ucywKLXN1Y2ggYXMgYSBSZXRyeSwgTWFzdGVyLUFib3J0LCBUYXJnZXQtQWJvcnQgb3Igbm9ybWFsIGNvbXBsZXRpb24sIGFyZQotc3VwcG9ydGVkLgorRGV2aWNlcyBtYXkgc3VwcG9ydCBib3RoIE1TSSBhbmQgTVNJLVgsIGJ1dCBvbmx5IG9uZSBjYW4gYmUgZW5hYmxlZCBhdAorYSB0aW1lLgogCi1BIFBDSSBkZXZpY2UgdGhhdCBzdXBwb3J0cyBNU0kgbXVzdCBhbHNvIHN1cHBvcnQgcGluIElSUSBhc3NlcnRpb24KLWludGVycnVwdCBtZWNoYW5pc20gdG8gcHJvdmlkZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBzeXN0ZW1zIHRoYXQKLWRvIG5vdCBzdXBwb3J0IE1TSS4gSW4gc3lzdGVtcyB3aGljaCBzdXBwb3J0IE1TSSwgdGhlIGJ1cyBkcml2ZXIgaXMKLXJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIG1lc3NhZ2UgYWRkcmVzcyBhbmQgbWVzc2FnZSBkYXRhIG9mCi10aGUgZGV2aWNlIGZ1bmN0aW9uJ3MgTVNJL01TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlIGR1cmluZyBkZXZpY2UKLWluaXRpYWwgY29uZmlndXJhdGlvbi4KIAotQW4gTVNJIGNhcGFibGUgZGV2aWNlIGZ1bmN0aW9uIGluZGljYXRlcyBNU0kgc3VwcG9ydCBieSBpbXBsZW1lbnRpbmcKLXRoZSBNU0kvTVNJLVggY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgaW4gaXRzIFBDSSBjYXBhYmlsaXR5IGxpc3QuIFRoZQotZGV2aWNlIGZ1bmN0aW9uIG1heSBpbXBsZW1lbnQgYm90aCB0aGUgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlIGFuZAotdGhlIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlOyBob3dldmVyLCB0aGUgYnVzIGRyaXZlciBzaG91bGQgbm90Ci1lbmFibGUgYm90aC4KKzMuIFdoeSB1c2UgTVNJcz8KIAotVGhlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSBjb250YWlucyBNZXNzYWdlIENvbnRyb2wgcmVnaXN0ZXIsCi1NZXNzYWdlIEFkZHJlc3MgcmVnaXN0ZXIgYW5kIE1lc3NhZ2UgRGF0YSByZWdpc3Rlci4gVGhlc2UgcmVnaXN0ZXJzCi1wcm92aWRlIHRoZSBidXMgZHJpdmVyIGNvbnRyb2wgb3ZlciBNU0kuIFRoZSBNZXNzYWdlIENvbnRyb2wgcmVnaXN0ZXIKLWluZGljYXRlcyB0aGUgTVNJIGNhcGFiaWxpdHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UuIFRoZSBNZXNzYWdlCi1BZGRyZXNzIHJlZ2lzdGVyIHNwZWNpZmllcyB0aGUgdGFyZ2V0IGFkZHJlc3MgYW5kIHRoZSBNZXNzYWdlIERhdGEKLXJlZ2lzdGVyIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBtZXNzYWdlLiBUbyByZXF1ZXN0Ci1zZXJ2aWNlLCB0aGUgZGV2aWNlIGZ1bmN0aW9uIHdyaXRlcyB0aGUgY29udGVudCBvZiB0aGUgTWVzc2FnZSBEYXRhCi1yZWdpc3RlciB0byB0aGUgdGFyZ2V0IGFkZHJlc3MuIFRoZSBkZXZpY2UgYW5kIGl0cyBzb2Z0d2FyZSBkcml2ZXIKLWFyZSBwcm9oaWJpdGVkIGZyb20gd3JpdGluZyB0byB0aGVzZSByZWdpc3RlcnMuCitUaGVyZSBhcmUgdGhyZWUgcmVhc29ucyB3aHkgdXNpbmcgTVNJcyBjYW4gZ2l2ZSBhbiBhZHZhbnRhZ2Ugb3ZlcgordHJhZGl0aW9uYWwgcGluLWJhc2VkIGludGVycnVwdHMuCiAKLVRoZSBNU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gdG8gTVNJLiBJdAotdXNlcyBhbiBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUuIFRoZXJlIGFyZQotc29tZSBrZXkgYWR2YW50YWdlcyB0byBpbXBsZW1lbnRpbmcgdGhlIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlCi1vdmVyIHRoZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgYXMgZGVzY3JpYmVkIGJlbG93LgorUGluLWJhc2VkIFBDSSBpbnRlcnJ1cHRzIGFyZSBvZnRlbiBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIGRldmljZXMuCitUbyBzdXBwb3J0IHRoaXMsIHRoZSBrZXJuZWwgbXVzdCBjYWxsIGVhY2ggaW50ZXJydXB0IGhhbmRsZXIgYXNzb2NpYXRlZAord2l0aCBhbiBpbnRlcnJ1cHQsIHdoaWNoIGxlYWRzIHRvIHJlZHVjZWQgcGVyZm9ybWFuY2UgZm9yIHRoZSBzeXN0ZW0gYXMKK2Egd2hvbGUuICBNU0lzIGFyZSBuZXZlciBzaGFyZWQsIHNvIHRoaXMgcHJvYmxlbSBjYW5ub3QgYXJpc2UuCiAKLQktIFN1cHBvcnQgYSBsYXJnZXIgbWF4aW11bSBudW1iZXIgb2YgdmVjdG9ycyBwZXIgZnVuY3Rpb24uCitXaGVuIGEgZGV2aWNlIHdyaXRlcyBkYXRhIHRvIG1lbW9yeSwgdGhlbiByYWlzZXMgYSBwaW4tYmFzZWQgaW50ZXJydXB0LAoraXQgaXMgcG9zc2libGUgdGhhdCB0aGUgaW50ZXJydXB0IG1heSBhcnJpdmUgYmVmb3JlIGFsbCB0aGUgZGF0YSBoYXMKK2Fycml2ZWQgaW4gbWVtb3J5ICh0aGlzIGJlY29tZXMgbW9yZSBsaWtlbHkgd2l0aCBkZXZpY2VzIGJlaGluZCBQQ0ktUENJCiticmlkZ2VzKS4gIEluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGFsbCB0aGUgZGF0YSBoYXMgYXJyaXZlZCBpbiBtZW1vcnksCit0aGUgaW50ZXJydXB0IGhhbmRsZXIgbXVzdCByZWFkIGEgcmVnaXN0ZXIgb24gdGhlIGRldmljZSB3aGljaCByYWlzZWQKK3RoZSBpbnRlcnJ1cHQuICBQQ0kgdHJhbnNhY3Rpb24gb3JkZXJpbmcgcnVsZXMgcmVxdWlyZSB0aGF0IGFsbCB0aGUgZGF0YQorYXJyaXZlcyBpbiBtZW1vcnkgYmVmb3JlIHRoZSB2YWx1ZSBjYW4gYmUgcmV0dXJuZWQgZnJvbSB0aGUgcmVnaXN0ZXIuCitVc2luZyBNU0lzIGF2b2lkcyB0aGlzIHByb2JsZW0gYXMgdGhlIGludGVycnVwdC1nZW5lcmF0aW5nIHdyaXRlIGNhbm5vdAorcGFzcyB0aGUgZGF0YSB3cml0ZXMsIHNvIGJ5IHRoZSB0aW1lIHRoZSBpbnRlcnJ1cHQgaXMgcmFpc2VkLCB0aGUgZHJpdmVyCitrbm93cyB0aGF0IGFsbCB0aGUgZGF0YSBoYXMgYXJyaXZlZCBpbiBtZW1vcnkuCiAKLQktIFByb3ZpZGUgdGhlIGFiaWxpdHkgZm9yIHN5c3RlbSBzb2Z0d2FyZSB0byBjb25maWd1cmUKLQllYWNoIHZlY3RvciB3aXRoIGFuIGluZGVwZW5kZW50IG1lc3NhZ2UgYWRkcmVzcyBhbmQgbWVzc2FnZQotCWRhdGEsIHNwZWNpZmllZCBieSBhIHRhYmxlIHRoYXQgcmVzaWRlcyBpbiBNZW1vcnkgU3BhY2UuCitQQ0kgZGV2aWNlcyBjYW4gb25seSBzdXBwb3J0IGEgc2luZ2xlIHBpbi1iYXNlZCBpbnRlcnJ1cHQgcGVyIGZ1bmN0aW9uLgorT2Z0ZW4gZHJpdmVycyBoYXZlIHRvIHF1ZXJ5IHRoZSBkZXZpY2UgdG8gZmluZCBvdXQgd2hhdCBldmVudCBoYXMKK29jY3VycmVkLCBzbG93aW5nIGRvd24gaW50ZXJydXB0IGhhbmRsaW5nIGZvciB0aGUgY29tbW9uIGNhc2UuICBXaXRoCitNU0lzLCBhIGRldmljZSBjYW4gc3VwcG9ydCBtb3JlIGludGVycnVwdHMsIGFsbG93aW5nIGVhY2ggaW50ZXJydXB0Cit0byBiZSBzcGVjaWFsaXNlZCB0byBhIGRpZmZlcmVudCBwdXJwb3NlLiAgT25lIHBvc3NpYmxlIGRlc2lnbiBnaXZlcworaW5mcmVxdWVudCBjb25kaXRpb25zIChzdWNoIGFzIGVycm9ycykgdGhlaXIgb3duIGludGVycnVwdCB3aGljaCBhbGxvd3MKK3RoZSBkcml2ZXIgdG8gaGFuZGxlIHRoZSBub3JtYWwgaW50ZXJydXB0IGhhbmRsaW5nIHBhdGggbW9yZSBlZmZpY2llbnRseS4KK090aGVyIHBvc3NpYmxlIGRlc2lnbnMgaW5jbHVkZSBnaXZpbmcgb25lIGludGVycnVwdCB0byBlYWNoIHBhY2tldCBxdWV1ZQoraW4gYSBuZXR3b3JrIGNhcmQgb3IgZWFjaCBwb3J0IGluIGEgc3RvcmFnZSBjb250cm9sbGVyLgogCi0gICAgICAgIC0gTVNJIGFuZCBNU0ktWCBib3RoIHN1cHBvcnQgcGVyLXZlY3RvciBtYXNraW5nLiBQZXItdmVjdG9yCi0JbWFza2luZyBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gb2YgTVNJIGJ1dCBhIHJlcXVpcmVkCi0JZmVhdHVyZSBmb3IgTVNJLVguIFBlci12ZWN0b3IgbWFza2luZyBwcm92aWRlcyB0aGUga2VybmVsIHRoZQotCWFiaWxpdHkgdG8gbWFzay91bm1hc2sgYSBzaW5nbGUgTVNJIHdoaWxlIHJ1bm5pbmcgaXRzCi0JaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4gSWYgcGVyLXZlY3RvciBtYXNraW5nIGlzCi0Jbm90IHN1cHBvcnRlZCwgdGhlbiB0aGUgZGV2aWNlIGRyaXZlciBzaG91bGQgcHJvdmlkZSB0aGUKLQloYXJkd2FyZS9zb2Z0d2FyZSBzeW5jaHJvbml6YXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIGRldmljZQotCWdlbmVyYXRlcyBNU0kgd2hlbiB0aGUgZHJpdmVyIHdhbnRzIGl0IHRvIGRvIHNvLgogCi00LiBXaHkgdXNlIE1TST8KKzQuIEhvdyB0byB1c2UgTVNJcwogCi1BcyBhIGJlbmVmaXQgdG8gdGhlIHNpbXBsaWZpY2F0aW9uIG9mIGJvYXJkIGRlc2lnbiwgTVNJIGFsbG93cyBib2FyZAotZGVzaWduZXJzIHRvIHJlbW92ZSBvdXQtb2YtYmFuZCBpbnRlcnJ1cHQgcm91dGluZy4gTVNJIGlzIGFub3RoZXIKLXN0ZXAgdG93YXJkcyBhIGxlZ2FjeS1mcmVlIGVudmlyb25tZW50LgorUENJIGRldmljZXMgYXJlIGluaXRpYWxpc2VkIHRvIHVzZSBwaW4tYmFzZWQgaW50ZXJydXB0cy4gIFRoZSBkZXZpY2UKK2RyaXZlciBoYXMgdG8gc2V0IHVwIHRoZSBkZXZpY2UgdG8gdXNlIE1TSSBvciBNU0ktWC4gIE5vdCBhbGwgbWFjaGluZXMKK3N1cHBvcnQgTVNJcyBjb3JyZWN0bHksIGFuZCBmb3IgdGhvc2UgbWFjaGluZXMsIHRoZSBBUElzIGRlc2NyaWJlZCBiZWxvdword2lsbCBzaW1wbHkgZmFpbCBhbmQgdGhlIGRldmljZSB3aWxsIGNvbnRpbnVlIHRvIHVzZSBwaW4tYmFzZWQgaW50ZXJydXB0cy4KIAotRHVlIHRvIGluY3JlYXNpbmcgcHJlc3N1cmUgb24gY2hpcHNldCBhbmQgcHJvY2Vzc29yIHBhY2thZ2VzIHRvCi1yZWR1Y2UgcGluIGNvdW50LCB0aGUgbmVlZCBmb3IgaW50ZXJydXB0IHBpbnMgaXMgZXhwZWN0ZWQgdG8KLWRpbWluaXNoIG92ZXIgdGltZS4gRGV2aWNlcywgZHVlIHRvIHBpbiBjb25zdHJhaW50cywgbWF5IGltcGxlbWVudAotbWVzc2FnZXMgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UuCis0LjEgSW5jbHVkZSBrZXJuZWwgc3VwcG9ydCBmb3IgTVNJcwogCi1QQ0kgRXhwcmVzcyBlbmRwb2ludHMgdXNlcyBJTlR4IGVtdWxhdGlvbiAoaW4tYmFuZCBtZXNzYWdlcykgaW5zdGVhZAotb2YgSVJRIHBpbiBhc3NlcnRpb24uIFVzaW5nIElOVHggZW11bGF0aW9uIHJlcXVpcmVzIGludGVycnVwdAotc2hhcmluZyBhbW9uZyBkZXZpY2VzIGNvbm5lY3RlZCB0byB0aGUgc2FtZSBub2RlIChQQ0kgYnJpZGdlKSB3aGlsZQotTVNJIGlzIHVuaXF1ZSAobm9uLXNoYXJlZCkgYW5kIGRvZXMgbm90IHJlcXVpcmUgQklPUyBjb25maWd1cmF0aW9uCi1zdXBwb3J0LiBBcyBhIHJlc3VsdCwgdGhlIFBDSSBFeHByZXNzIHRlY2hub2xvZ3kgcmVxdWlyZXMgTVNJCi1zdXBwb3J0IGZvciBiZXR0ZXIgaW50ZXJydXB0IHBlcmZvcm1hbmNlLgorVG8gc3VwcG9ydCBNU0kgb3IgTVNJLVgsIHRoZSBrZXJuZWwgbXVzdCBiZSBidWlsdCB3aXRoIHRoZSBDT05GSUdfUENJX01TSQorb3B0aW9uIGVuYWJsZWQuICBUaGlzIG9wdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBvbiBzb21lIGFyY2hpdGVjdHVyZXMsCithbmQgaXQgbWF5IGRlcGVuZCBvbiBzb21lIG90aGVyIG9wdGlvbnMgYWxzbyBiZWluZyBzZXQuICBGb3IgZXhhbXBsZSwKK29uIHg4NiwgeW91IG11c3QgYWxzbyBlbmFibGUgWDg2X1VQX0FQSUMgb3IgU01QIGluIG9yZGVyIHRvIHNlZSB0aGUKK0NPTkZJR19QQ0lfTVNJIG9wdGlvbi4KIAotVXNpbmcgTVNJIGVuYWJsZXMgdGhlIGRldmljZSBmdW5jdGlvbnMgdG8gc3VwcG9ydCB0d28gb3IgbW9yZQotdmVjdG9ycywgd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdGFyZ2V0IGRpZmZlcmVudCBDUFVzIHRvCi1pbmNyZWFzZSBzY2FsYWJpbGl0eS4KKzQuMiBVc2luZyBNU0kKIAotNS4gQ29uZmlndXJpbmcgYSBkcml2ZXIgdG8gdXNlIE1TSS9NU0ktWAorTW9zdCBvZiB0aGUgaGFyZCB3b3JrIGlzIGRvbmUgZm9yIHRoZSBkcml2ZXIgaW4gdGhlIFBDSSBsYXllci4gIEl0IHNpbXBseQoraGFzIHRvIHJlcXVlc3QgdGhhdCB0aGUgUENJIGxheWVyIHNldCB1cCB0aGUgTVNJIGNhcGFiaWxpdHkgZm9yIHRoaXMKK2RldmljZS4KIAotQnkgZGVmYXVsdCwgdGhlIGtlcm5lbCB3aWxsIG5vdCBlbmFibGUgTVNJL01TSS1YIG9uIGFsbCBkZXZpY2VzIHRoYXQKLXN1cHBvcnQgdGhpcyBjYXBhYmlsaXR5LiBUaGUgQ09ORklHX1BDSV9NU0kga2VybmVsIG9wdGlvbgotbXVzdCBiZSBzZWxlY3RlZCB0byBlbmFibGUgTVNJL01TSS1YIHN1cHBvcnQuCi0KLTUuMSBJbmNsdWRpbmcgTVNJL01TSS1YIHN1cHBvcnQgaW50byB0aGUga2VybmVsCi0KLVRvIGFsbG93IE1TSS9NU0ktWCBjYXBhYmxlIGRldmljZSBkcml2ZXJzIHRvIHNlbGVjdGl2ZWx5IGVuYWJsZQotTVNJL01TSS1YICh1c2luZyBwY2lfZW5hYmxlX21zaSgpL3BjaV9lbmFibGVfbXNpeCgpIGFzIGRlc2NyaWJlZAotYmVsb3cpLCB0aGUgVkVDVE9SIGJhc2VkIHNjaGVtZSBuZWVkcyB0byBiZSBlbmFibGVkIGJ5IHNldHRpbmcKLUNPTkZJR19QQ0lfTVNJIGR1cmluZyBrZXJuZWwgY29uZmlnLgotCi1TaW5jZSB0aGUgdGFyZ2V0IG9mIHRoZSBpbmJvdW5kIG1lc3NhZ2UgaXMgdGhlIGxvY2FsIEFQSUMsIHByb3ZpZGluZwotQ09ORklHX1g4Nl9MT0NBTF9BUElDIG11c3QgYmUgZW5hYmxlZCBhcyB3ZWxsIGFzIENPTkZJR19QQ0lfTVNJLgotCi01LjIgQ29uZmlndXJpbmcgZm9yIE1TSSBzdXBwb3J0Ci0KLUR1ZSB0byB0aGUgbm9uLWNvbnRpZ3VvdXMgZmFzaGlvbiBpbiB2ZWN0b3IgYXNzaWdubWVudCBvZiB0aGUKLWV4aXN0aW5nIExpbnV4IGtlcm5lbCwgdGhpcyB2ZXJzaW9uIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUKLW1lc3NhZ2VzIHJlZ2FyZGxlc3Mgb2YgYSBkZXZpY2UgZnVuY3Rpb24gaXMgY2FwYWJsZSBvZiBzdXBwb3J0aW5nCi1tb3JlIHRoYW4gb25lIHZlY3Rvci4gVG8gZW5hYmxlIE1TSSBvbiBhIGRldmljZSBmdW5jdGlvbidzIE1TSQotY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgcmVxdWlyZXMgYSBkZXZpY2UgZHJpdmVyIHRvIGNhbGwgdGhlIGZ1bmN0aW9uCi1wY2lfZW5hYmxlX21zaSgpIGV4cGxpY2l0bHkuCi0KLTUuMi4xIEFQSSBwY2lfZW5hYmxlX21zaQorNC4yLjEgcGNpX2VuYWJsZV9tc2kKIAogaW50IHBjaV9lbmFibGVfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiAKLVdpdGggdGhpcyBuZXcgQVBJLCBhIGRldmljZSBkcml2ZXIgdGhhdCB3YW50cyB0byBoYXZlIE1TSQotZW5hYmxlZCBvbiBpdHMgZGV2aWNlIGZ1bmN0aW9uIG11c3QgY2FsbCB0aGlzIEFQSSB0byBlbmFibGUgTVNJLgotQSBzdWNjZXNzZnVsIGNhbGwgd2lsbCBpbml0aWFsaXplIHRoZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKLXdpdGggT05FIHZlY3RvciwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgZGV2aWNlIGZ1bmN0aW9uIGlzCi1jYXBhYmxlIG9mIHN1cHBvcnRpbmcgbXVsdGlwbGUgbWVzc2FnZXMuIFRoaXMgdmVjdG9yIHJlcGxhY2VzIHRoZQotcHJlLWFzc2lnbmVkIGRldi0+aXJxIHdpdGggYSBuZXcgTVNJIHZlY3Rvci4gVG8gYXZvaWQgYSBjb25mbGljdAotb2YgdGhlIG5ldyBhc3NpZ25lZCB2ZWN0b3Igd2l0aCBleGlzdGluZyBwcmUtYXNzaWduZWQgdmVjdG9yIHJlcXVpcmVzCi1hIGRldmljZSBkcml2ZXIgdG8gY2FsbCB0aGlzIEFQSSBiZWZvcmUgY2FsbGluZyByZXF1ZXN0X2lycSgpLgorQSBzdWNjZXNzZnVsIGNhbGwgd2lsbCBhbGxvY2F0ZSBPTkUgaW50ZXJydXB0IHRvIHRoZSBkZXZpY2UsIHJlZ2FyZGxlc3MKK29mIGhvdyBtYW55IE1TSXMgdGhlIGRldmljZSBzdXBwb3J0cy4gIFRoZSBkZXZpY2Ugd2lsbCBiZSBzd2l0Y2hlZCBmcm9tCitwaW4tYmFzZWQgaW50ZXJydXB0IG1vZGUgdG8gTVNJIG1vZGUuICBUaGUgZGV2LT5pcnEgbnVtYmVyIGlzIGNoYW5nZWQKK3RvIGEgbmV3IG51bWJlciB3aGljaCByZXByZXNlbnRzIHRoZSBtZXNzYWdlIHNpZ25hbGVkIGludGVycnVwdC4KK1RoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGRyaXZlciBjYWxscyByZXF1ZXN0X2lycSgpCitzaW5jZSBlbmFibGluZyBNU0lzIGRpc2FibGVzIHRoZSBwaW4tYmFzZWQgSVJRIGFuZCB0aGUgZHJpdmVyIHdpbGwgbm90CityZWNlaXZlIGludGVycnVwdHMgb24gdGhlIG9sZCBpbnRlcnJ1cHQuCiAKLTUuMi4yIEFQSSBwY2lfZGlzYWJsZV9tc2kKKzQuMi4yIHBjaV9lbmFibGVfbXNpX2Jsb2NrCisKK2ludCBwY2lfZW5hYmxlX21zaV9ibG9jayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY291bnQpCisKK1RoaXMgdmFyaWF0aW9uIG9uIHRoZSBhYm92ZSBjYWxsIGFsbG93cyBhIGRldmljZSBkcml2ZXIgdG8gcmVxdWVzdCBtdWx0aXBsZQorTVNJcy4gIFRoZSBNU0kgc3BlY2lmaWNhdGlvbiBvbmx5IGFsbG93cyBpbnRlcnJ1cHRzIHRvIGJlIGFsbG9jYXRlZCBpbgorcG93ZXJzIG9mIHR3bywgdXAgdG8gYSBtYXhpbXVtIG9mIDJeNSAoMzIpLgorCitJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgMCwgaXQgaGFzIHN1Y2NlZWRlZCBpbiBhbGxvY2F0aW5nIGF0IGxlYXN0IGFzIG1hbnkKK2ludGVycnVwdHMgYXMgdGhlIGRyaXZlciByZXF1ZXN0ZWQgKGl0IG1heSBoYXZlIGFsbG9jYXRlZCBtb3JlIGluIG9yZGVyCit0byBzYXRpc2Z5IHRoZSBwb3dlci1vZi10d28gcmVxdWlyZW1lbnQpLiAgSW4gdGhpcyBjYXNlLCB0aGUgZnVuY3Rpb24KK2VuYWJsZXMgTVNJIG9uIHRoaXMgZGV2aWNlIGFuZCB1cGRhdGVzIGRldi0+aXJxIHRvIGJlIHRoZSBsb3dlc3Qgb2YKK3RoZSBuZXcgaW50ZXJydXB0cyBhc3NpZ25lZCB0byBpdC4gIFRoZSBvdGhlciBpbnRlcnJ1cHRzIGFzc2lnbmVkIHRvCit0aGUgZGV2aWNlIGFyZSBpbiB0aGUgcmFuZ2UgZGV2LT5pcnEgdG8gZGV2LT5pcnEgKyBjb3VudCAtIDEuCisKK0lmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciwgaXQgaW5kaWNhdGVzIGFuIGVycm9yIGFuZAordGhlIGRyaXZlciBzaG91bGQgbm90IGF0dGVtcHQgdG8gcmVxdWVzdCBhbnkgbW9yZSBNU0kgaW50ZXJydXB0cyBmb3IKK3RoaXMgZGV2aWNlLiAgSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9zaXRpdmUgbnVtYmVyLCBpdCB3aWxsIGJlCitsZXNzIHRoYW4gJ2NvdW50JyBhbmQgaW5kaWNhdGUgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIHRoYXQgY291bGQgaGF2ZQorYmVlbiBhbGxvY2F0ZWQuICBJbiBuZWl0aGVyIGNhc2Ugd2lsbCB0aGUgaXJxIHZhbHVlIGhhdmUgYmVlbgordXBkYXRlZCwgbm9yIHdpbGwgdGhlIGRldmljZSBoYXZlIGJlZW4gc3dpdGNoZWQgaW50byBNU0kgbW9kZS4KKworVGhlIGRldmljZSBkcml2ZXIgbXVzdCBkZWNpZGUgd2hhdCBhY3Rpb24gdG8gdGFrZSBpZgorcGNpX2VuYWJsZV9tc2lfYmxvY2soKSByZXR1cm5zIGEgdmFsdWUgbGVzcyB0aGFuIHRoZSBudW1iZXIgYXNrZWQgZm9yLgorU29tZSBkZXZpY2VzIGNhbiBtYWtlIHVzZSBvZiBmZXdlciBpbnRlcnJ1cHRzIHRoYW4gdGhlIG1heGltdW0gdGhleQorcmVxdWVzdDsgaW4gdGhpcyBjYXNlIHRoZSBkcml2ZXIgc2hvdWxkIGNhbGwgcGNpX2VuYWJsZV9tc2lfYmxvY2soKQorYWdhaW4uICBOb3RlIHRoYXQgaXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gc3VjY2VlZCwgZXZlbiB3aGVuIHRoZQorJ2NvdW50JyBoYXMgYmVlbiByZWR1Y2VkIHRvIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGEgcHJldmlvdXMgY2FsbCB0bworcGNpX2VuYWJsZV9tc2lfYmxvY2soKS4gIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBhcmUgbXVsdGlwbGUgY29uc3RyYWludHMKK29uIHRoZSBudW1iZXIgb2YgdmVjdG9ycyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQ7IHBjaV9lbmFibGVfbXNpX2Jsb2NrKCkKK3dpbGwgcmV0dXJuIGFzIHNvb24gYXMgaXQgZmluZHMgYW55IGNvbnN0cmFpbnQgdGhhdCBkb2Vzbid0IGFsbG93IHRoZQorY2FsbCB0byBzdWNjZWVkLgorCis0LjIuMyBwY2lfZGlzYWJsZV9tc2kKIAogdm9pZCBwY2lfZGlzYWJsZV9tc2koc3RydWN0IHBjaV9kZXYgKmRldikKIAotVGhpcyBBUEkgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIHRvIHVuZG8gdGhlIGVmZmVjdCBvZiBwY2lfZW5hYmxlX21zaSgpCi13aGVuIGEgZGV2aWNlIGRyaXZlciBpcyB1bmxvYWRpbmcuIFRoaXMgQVBJIHJlc3RvcmVzIGRldi0+aXJxIHdpdGgKLXRoZSBwcmUtYXNzaWduZWQgSU9BUElDIHZlY3RvciBhbmQgc3dpdGNoZXMgYSBkZXZpY2UncyBpbnRlcnJ1cHQKLW1vZGUgdG8gUENJIHBpbi1pcnEgYXNzZXJ0aW9uL0lOVHggZW11bGF0aW9uIG1vZGUuCitUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIHRvIHVuZG8gdGhlIGVmZmVjdCBvZiBwY2lfZW5hYmxlX21zaSgpIG9yCitwY2lfZW5hYmxlX21zaV9ibG9jaygpLiAgQ2FsbGluZyBpdCByZXN0b3JlcyBkZXYtPmlycSB0byB0aGUgcGluLWJhc2VkCitpbnRlcnJ1cHQgbnVtYmVyIGFuZCBmcmVlcyB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVzc2FnZSBzaWduYWxlZAoraW50ZXJydXB0KHMpLiAgVGhlIGludGVycnVwdCBtYXkgc3Vic2VxdWVudGx5IGJlIGFzc2lnbmVkIHRvIGFub3RoZXIKK2RldmljZSwgc28gZHJpdmVycyBzaG91bGQgbm90IGNhY2hlIHRoZSB2YWx1ZSBvZiBkZXYtPmlycS4KIAotTm90ZSB0aGF0IGEgZGV2aWNlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGwgZnJlZV9pcnEoKSBvbiB0aGUgTVNJIHZlY3RvcgotdGhhdCBpdCBoYXMgZG9uZSByZXF1ZXN0X2lycSgpIG9uIGJlZm9yZSBjYWxsaW5nIHRoaXMgQVBJLiBGYWlsdXJlIHRvIGRvCi1zbyByZXN1bHRzIGluIGEgQlVHX09OKCkgYW5kIGEgZGV2aWNlIHdpbGwgYmUgbGVmdCB3aXRoIE1TSSBlbmFibGVkIGFuZAotbGVha3MgaXRzIHZlY3Rvci4KK0EgZGV2aWNlIGRyaXZlciBtdXN0IGFsd2F5cyBjYWxsIGZyZWVfaXJxKCkgb24gdGhlIGludGVycnVwdChzKQorZm9yIHdoaWNoIGl0IGhhcyBjYWxsZWQgcmVxdWVzdF9pcnEoKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorRmFpbHVyZSB0byBkbyBzbyB3aWxsIHJlc3VsdCBpbiBhIEJVR19PTigpLCB0aGUgZGV2aWNlIHdpbGwgYmUgbGVmdCB3aXRoCitNU0kgZW5hYmxlZCBhbmQgd2lsbCBsZWFrIGl0cyB2ZWN0b3IuCiAKLTUuMi4zIE1TSSBtb2RlIHZzLiBsZWdhY3kgbW9kZSBkaWFncmFtCis0LjMgVXNpbmcgTVNJLVgKIAotVGhlIGJlbG93IGRpYWdyYW0gc2hvd3MgdGhlIGV2ZW50cyB3aGljaCBzd2l0Y2ggdGhlIGludGVycnVwdAotbW9kZSBvbiB0aGUgTVNJLWNhcGFibGUgZGV2aWNlIGZ1bmN0aW9uIGJldHdlZW4gTVNJIG1vZGUgYW5kCi1QSU4tSVJRIGFzc2VydGlvbiBtb2RlLgotCi0JIC0tLS0tLS0tLS0tLSAgIHBjaV9lbmFibGVfbXNpIAkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JfAkgICAgIHwgPD09PT09PT09PT09PT09PQl8IAkJCSB8Ci0JfCBNU0kgTU9ERSAgIHwJICAJICAgICAJfCBQSU4tSVJRIEFTU0VSVElPTiBNT0RFIHwKLQl8IAkgICAgIHwgPT09PT09PT09PT09PT09Pgl8CQkJIHwKLSAJIC0tLS0tLS0tLS0tLQlwY2lfZGlzYWJsZV9tc2kgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLUZpZ3VyZSAxLiBNU0kgTW9kZSB2cy4gTGVnYWN5IE1vZGUKLQotSW4gRmlndXJlIDEsIGEgZGV2aWNlIG9wZXJhdGVzIGJ5IGRlZmF1bHQgaW4gbGVnYWN5IG1vZGUuIExlZ2FjeQotaW4gdGhpcyBjb250ZXh0IG1lYW5zIFBDSSBwaW4taXJxIGFzc2VydGlvbiBvciBQQ0ktRXhwcmVzcyBJTlR4Ci1lbXVsYXRpb24uIEEgc3VjY2Vzc2Z1bCBNU0kgcmVxdWVzdCAodXNpbmcgcGNpX2VuYWJsZV9tc2koKSkgc3dpdGNoZXMKLWEgZGV2aWNlJ3MgaW50ZXJydXB0IG1vZGUgdG8gTVNJIG1vZGUuIEEgcHJlLWFzc2lnbmVkIElPQVBJQyB2ZWN0b3IKLXN0b3JlZCBpbiBkZXYtPmlycSB3aWxsIGJlIHNhdmVkIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBhIG5ldwotYXNzaWduZWQgTVNJIHZlY3RvciB3aWxsIHJlcGxhY2UgZGV2LT5pcnEuCi0KLVRvIHJldHVybiBiYWNrIHRvIGl0cyBkZWZhdWx0IG1vZGUsIGEgZGV2aWNlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGwKLXBjaV9kaXNhYmxlX21zaSgpIHRvIHVuZG8gdGhlIGVmZmVjdCBvZiBwY2lfZW5hYmxlX21zaSgpLiBOb3RlIHRoYXQgYQotZGV2aWNlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGwgZnJlZV9pcnEoKSBvbiB0aGUgTVNJIHZlY3RvciBpdCBoYXMKLWRvbmUgcmVxdWVzdF9pcnEoKSBvbiBiZWZvcmUgY2FsbGluZyBwY2lfZGlzYWJsZV9tc2koKS4gRmFpbHVyZSB0byBkbwotc28gcmVzdWx0cyBpbiBhIEJVR19PTigpIGFuZCBhIGRldmljZSB3aWxsIGJlIGxlZnQgd2l0aCBNU0kgZW5hYmxlZCBhbmQKLWxlYWtzIGl0cyB2ZWN0b3IuIE90aGVyd2lzZSwgdGhlIFBDSSBzdWJzeXN0ZW0gcmVzdG9yZXMgYSBkZXZpY2UncwotZGV2LT5pcnEgd2l0aCBhIHByZS1hc3NpZ25lZCBJT0FQSUMgdmVjdG9yIGFuZCBtYXJrcyB0aGUgcmVsZWFzZWQKLU1TSSB2ZWN0b3IgYXMgdW51c2VkLgotCi1PbmNlIGJlaW5nIG1hcmtlZCBhcyB1bnVzZWQsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBQQ0kKLXN1YnN5c3RlbSB3aWxsIHJlc2VydmUgdGhpcyBNU0kgdmVjdG9yIGZvciBhIGRldmljZS4gRGVwZW5kaW5nIG9uCi10aGUgYXZhaWxhYmlsaXR5IG9mIGN1cnJlbnQgUENJIHZlY3RvciByZXNvdXJjZXMgYW5kIHRoZSBudW1iZXIgb2YKLU1TSS9NU0ktWCByZXF1ZXN0cyBmcm9tIG90aGVyIGRyaXZlcnMsIHRoaXMgTVNJIG1heSBiZSByZS1hc3NpZ25lZC4KLQotRm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBQQ0kgc3Vic3lzdGVtIHJlLWFzc2lnbnMgdGhpcyBNU0kgdmVjdG9yIHRvCi1hbm90aGVyIGRyaXZlciwgYSByZXF1ZXN0IHRvIHN3aXRjaCBiYWNrIHRvIE1TSSBtb2RlIG1heSByZXN1bHQKLWluIGJlaW5nIGFzc2lnbmVkIGEgZGlmZmVyZW50IE1TSSB2ZWN0b3Igb3IgYSBmYWlsdXJlIGlmIG5vIG1vcmUKLXZlY3RvcnMgYXJlIGF2YWlsYWJsZS4KLQotNS4zIENvbmZpZ3VyaW5nIGZvciBNU0ktWCBzdXBwb3J0Ci0KLUR1ZSB0byB0aGUgYWJpbGl0eSBvZiB0aGUgc3lzdGVtIHNvZnR3YXJlIHRvIGNvbmZpZ3VyZSBlYWNoIHZlY3RvciBvZgotdGhlIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlIHdpdGggYW4gaW5kZXBlbmRlbnQgbWVzc2FnZSBhZGRyZXNzCi1hbmQgbWVzc2FnZSBkYXRhLCB0aGUgbm9uLWNvbnRpZ3VvdXMgZmFzaGlvbiBpbiB2ZWN0b3IgYXNzaWdubWVudCBvZgotdGhlIGV4aXN0aW5nIExpbnV4IGtlcm5lbCBoYXMgbm8gaW1wYWN0IG9uIHN1cHBvcnRpbmcgbXVsdGlwbGUKLW1lc3NhZ2VzIG9uIGFuIE1TSS1YIGNhcGFibGUgZGV2aWNlIGZ1bmN0aW9ucy4gVG8gZW5hYmxlIE1TSS1YIG9uCi1hIGRldmljZSBmdW5jdGlvbidzIE1TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlIHJlcXVpcmVzIGl0cyBkZXZpY2UKLWRyaXZlciB0byBjYWxsIHRoZSBmdW5jdGlvbiBwY2lfZW5hYmxlX21zaXgoKSBleHBsaWNpdGx5LgotCi1UaGUgZnVuY3Rpb24gcGNpX2VuYWJsZV9tc2l4KCksIG9uY2UgaW52b2tlZCwgZW5hYmxlcyBlaXRoZXIKLWFsbCBvciBub3RoaW5nLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgYXZhaWxhYmlsaXR5IG9mIFBDSSB2ZWN0b3IKLXJlc291cmNlcy4gSWYgdGhlIFBDSSB2ZWN0b3IgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBudW1iZXIKLW9mIHZlY3RvcnMgcmVxdWVzdGVkIGJ5IGEgZGV2aWNlIGRyaXZlciwgdGhpcyBmdW5jdGlvbiB3aWxsIGNvbmZpZ3VyZQotdGhlIE1TSS1YIHRhYmxlIG9mIHRoZSBNU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSBvZiBhIGRldmljZSB3aXRoCi1yZXF1ZXN0ZWQgbWVzc2FnZXMuIFRvIGVtcGhhc2l6ZSB0aGlzIHJlYXNvbiwgZm9yIGV4YW1wbGUsIGEgZGV2aWNlCi1tYXkgYmUgY2FwYWJsZSBmb3Igc3VwcG9ydGluZyB0aGUgbWF4aW11bSBvZiAzMiB2ZWN0b3JzIHdoaWxlIGl0cwotc29mdHdhcmUgZHJpdmVyIHVzdWFsbHkgbWF5IHJlcXVlc3QgNCB2ZWN0b3JzLiBJdCBpcyByZWNvbW1lbmRlZAotdGhhdCB0aGUgZGV2aWNlIGRyaXZlciBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIG9uY2UgZHVyaW5nIHRoZQotaW5pdGlhbGl6YXRpb24gcGhhc2Ugb2YgdGhlIGRldmljZSBkcml2ZXIuCi0KLVVubGlrZSB0aGUgZnVuY3Rpb24gcGNpX2VuYWJsZV9tc2koKSwgdGhlIGZ1bmN0aW9uIHBjaV9lbmFibGVfbXNpeCgpCi1kb2VzIG5vdCByZXBsYWNlIHRoZSBwcmUtYXNzaWduZWQgSU9BUElDIGRldi0+aXJxIHdpdGggYSBuZXcgTVNJCi12ZWN0b3IgYmVjYXVzZSB0aGUgUENJIHN1YnN5c3RlbSB3cml0ZXMgdGhlIDE6MSB2ZWN0b3ItdG8tZW50cnkgbWFwcGluZwotaW50byB0aGUgZmllbGQgdmVjdG9yIG9mIGVhY2ggZWxlbWVudCBjb250YWluZWQgaW4gYSBzZWNvbmQgYXJndW1lbnQuCi1Ob3RlIHRoYXQgdGhlIHByZS1hc3NpZ25lZCBJT0FQSUMgZGV2LT5pcnEgaXMgdmFsaWQgb25seSBpZiB0aGUgZGV2aWNlCi1vcGVyYXRlcyBpbiBQSU4tSVJRIGFzc2VydGlvbiBtb2RlLiBJbiBNU0ktWCBtb2RlLCBhbnkgYXR0ZW1wdCBhdAotdXNpbmcgZGV2LT5pcnEgYnkgdGhlIGRldmljZSBkcml2ZXIgdG8gcmVxdWVzdCBmb3IgaW50ZXJydXB0IHNlcnZpY2UKLW1heSByZXN1bHQgaW4gdW5wcmVkaWN0YWJsZSBiZWhhdmlvci4KLQotRm9yIGVhY2ggTVNJLVggdmVjdG9yIGdyYW50ZWQsIGEgZGV2aWNlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZwotb3RoZXIgZnVuY3Rpb25zIGxpa2UgcmVxdWVzdF9pcnEoKSwgZW5hYmxlX2lycSgpLCBldGMuIHRvIGVuYWJsZQotdGhpcyB2ZWN0b3Igd2l0aCBpdHMgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgc2VydmljZSBoYW5kbGVyLiBJdCBpcwotYSBkZXZpY2UgZHJpdmVyJ3MgY2hvaWNlIHRvIGFzc2lnbiBhbGwgdmVjdG9ycyB3aXRoIHRoZSBzYW1lCi1pbnRlcnJ1cHQgc2VydmljZSBoYW5kbGVyIG9yIGVhY2ggdmVjdG9yIHdpdGggYSB1bmlxdWUgaW50ZXJydXB0Ci1zZXJ2aWNlIGhhbmRsZXIuCi0KLTUuMy4xIEhhbmRsaW5nIE1NSU8gYWRkcmVzcyBzcGFjZSBvZiBNU0ktWCBUYWJsZQotCi1UaGUgUENJIDMuMCBzcGVjaWZpY2F0aW9uIGhhcyBpbXBsZW1lbnRhdGlvbiBub3RlcyB0aGF0IE1NSU8gYWRkcmVzcwotc3BhY2UgZm9yIGEgZGV2aWNlJ3MgTVNJLVggc3RydWN0dXJlIHNob3VsZCBiZSBpc29sYXRlZCBzbyB0aGF0IHRoZQotc29mdHdhcmUgc3lzdGVtIGNhbiBzZXQgZGlmZmVyZW50IHBhZ2VzIGZvciBjb250cm9sbGluZyBhY2Nlc3NlcyB0byB0aGUKLU1TSS1YIHN0cnVjdHVyZS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIE1TSSBzdXBwb3J0IHJlcXVpcmVzIHRoZSBQQ0kKLXN1YnN5c3RlbSwgbm90IGEgZGV2aWNlIGRyaXZlciwgdG8gbWFpbnRhaW4gZnVsbCBjb250cm9sIG9mIHRoZSBNU0ktWAotdGFibGUvTVNJLVggUEJBIChQZW5kaW5nIEJpdCBBcnJheSkgYW5kIE1NSU8gYWRkcmVzcyBzcGFjZSBvZiB0aGUgTVNJLVgKLXRhYmxlL01TSS1YIFBCQS4gIEEgZGV2aWNlIGRyaXZlciBzaG91bGQgbm90IGFjY2VzcyB0aGUgTU1JTyBhZGRyZXNzCi1zcGFjZSBvZiB0aGUgTVNJLVggdGFibGUvTVNJLVggUEJBLgotCi01LjMuMiBBUEkgcGNpX2VuYWJsZV9tc2l4Ci0KLWludCBwY2lfZW5hYmxlX21zaXgoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IG1zaXhfZW50cnkgKmVudHJpZXMsIGludCBudmVjKQotCi1UaGlzIEFQSSBlbmFibGVzIGEgZGV2aWNlIGRyaXZlciB0byByZXF1ZXN0IHRoZSBQQ0kgc3Vic3lzdGVtCi10byBlbmFibGUgTVNJLVggbWVzc2FnZXMgb24gaXRzIGhhcmR3YXJlIGRldmljZS4gRGVwZW5kaW5nIG9uCi10aGUgYXZhaWxhYmlsaXR5IG9mIFBDSSB2ZWN0b3JzIHJlc291cmNlcywgdGhlIFBDSSBzdWJzeXN0ZW0gZW5hYmxlcwotZWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSByZXF1ZXN0ZWQgdmVjdG9ycy4KLQotQXJndW1lbnQgJ2RldicgcG9pbnRzIHRvIHRoZSBkZXZpY2UgKHBjaV9kZXYpIHN0cnVjdHVyZS4KLQotQXJndW1lbnQgJ2VudHJpZXMnIGlzIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBtc2l4X2VudHJ5IHN0cnVjdHMuCi1UaGUgbnVtYmVyIG9mIGVudHJpZXMgaXMgaW5kaWNhdGVkIGluIGFyZ3VtZW50ICdudmVjJy4KLXN0cnVjdCBtc2l4X2VudHJ5IGlzIGRlZmluZWQgaW4gL2RyaXZlci9wY2kvbXNpLmg6CitUaGUgTVNJLVggY2FwYWJpbGl0eSBpcyBtdWNoIG1vcmUgZmxleGlibGUgdGhhbiB0aGUgTVNJIGNhcGFiaWxpdHkuCitJdCBzdXBwb3J0cyB1cCB0byAyMDQ4IGludGVycnVwdHMsIGVhY2ggb2Ygd2hpY2ggY2FuIGJlIGNvbnRyb2xsZWQKK2luZGVwZW5kZW50bHkuICBUbyBzdXBwb3J0IHRoaXMgZmxleGliaWxpdHksIGRyaXZlcnMgbXVzdCB1c2UgYW4gYXJyYXkgb2YKK2BzdHJ1Y3QgbXNpeF9lbnRyeSc6CiAKIHN0cnVjdCBtc2l4X2VudHJ5IHsKIAl1MTYgCXZlY3RvcjsgLyoga2VybmVsIHVzZXMgdG8gd3JpdGUgYWxsb2MgdmVjdG9yICovCiAJdTE2CWVudHJ5OyAvKiBkcml2ZXIgdXNlcyB0byBzcGVjaWZ5IGVudHJ5ICovCiB9OwogCi1BIGRldmljZSBkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgZmllbGQgJ2VudHJ5JyBvZgotZWFjaCBlbGVtZW50IHdpdGggYSB1bmlxdWUgZW50cnkgc3VwcG9ydGVkIGJ5IE1TSS1YIHRhYmxlLiBPdGhlcndpc2UsCi0tRUlOVkFMIHdpbGwgYmUgcmV0dXJuZWQgYXMgYSByZXN1bHQuIEEgc3VjY2Vzc2Z1bCByZXR1cm4gb2YgemVybwotaW5kaWNhdGVzIHRoZSBQQ0kgc3Vic3lzdGVtIGNvbXBsZXRlZCBpbml0aWFsaXppbmcgZWFjaCBvZiB0aGUgcmVxdWVzdGVkCi1lbnRyaWVzIG9mIHRoZSBNU0ktWCB0YWJsZSB3aXRoIG1lc3NhZ2UgYWRkcmVzcyBhbmQgbWVzc2FnZSBkYXRhLgotTGFzdCBidXQgbm90IGxlYXN0LCB0aGUgUENJIHN1YnN5c3RlbSB3aWxsIHdyaXRlIHRoZSAxOjEKLXZlY3Rvci10by1lbnRyeSBtYXBwaW5nIGludG8gdGhlIGZpZWxkICd2ZWN0b3InIG9mIGVhY2ggZWxlbWVudC4gQQotZGV2aWNlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyB0cmFjayBvZiBhbGxvY2F0ZWQgTVNJLVgKLXZlY3RvcnMgaW4gaXRzIGludGVybmFsIGRhdGEgc3RydWN0dXJlLgorVGhpcyBhbGxvd3MgZm9yIHRoZSBkZXZpY2UgdG8gdXNlIHRoZXNlIGludGVycnVwdHMgaW4gYSBzcGFyc2UgZmFzaGlvbjsKK2ZvciBleGFtcGxlIGl0IGNvdWxkIHVzZSBpbnRlcnJ1cHRzIDMgYW5kIDEwMjcgYW5kIGFsbG9jYXRlIG9ubHkgYQordHdvLWVsZW1lbnQgYXJyYXkuICBUaGUgZHJpdmVyIGlzIGV4cGVjdGVkIHRvIGZpbGwgaW4gdGhlICdlbnRyeScgdmFsdWUKK2luIGVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgdG8gaW5kaWNhdGUgd2hpY2ggZW50cmllcyBpdCB3YW50cyB0aGUga2VybmVsCit0byBhc3NpZ24gaW50ZXJydXB0cyBmb3IuICBJdCBpcyBpbnZhbGlkIHRvIGZpbGwgaW4gdHdvIGVudHJpZXMgd2l0aCB0aGUKK3NhbWUgbnVtYmVyLgogCi1BIHJldHVybiBvZiB6ZXJvIGluZGljYXRlcyB0aGF0IHRoZSBudW1iZXIgb2YgTVNJLVggdmVjdG9ycyB3YXMKLXN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQuIEEgcmV0dXJuIG9mIGdyZWF0ZXIgdGhhbiB6ZXJvIGluZGljYXRlcwotTVNJLVggdmVjdG9yIHNob3J0YWdlLiBPciBhIHJldHVybiBvZiBsZXNzIHRoYW4gemVybyBpbmRpY2F0ZXMKLWEgZmFpbHVyZS4gVGhpcyBmYWlsdXJlIG1heSBiZSBhIHJlc3VsdCBvZiBkdXBsaWNhdGUgZW50cmllcwotc3BlY2lmaWVkIGluIHNlY29uZCBhcmd1bWVudCwgb3IgYSByZXN1bHQgb2Ygbm8gYXZhaWxhYmxlIHZlY3RvciwKLW9yIGEgcmVzdWx0IG9mIGZhaWxpbmcgdG8gaW5pdGlhbGl6ZSBNU0ktWCB0YWJsZSBlbnRyaWVzLgorNC4zLjEgcGNpX2VuYWJsZV9tc2l4CiAKLTUuMy4zIEFQSSBwY2lfZGlzYWJsZV9tc2l4CitpbnQgcGNpX2VuYWJsZV9tc2l4KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2l4X2VudHJ5ICplbnRyaWVzLCBpbnQgbnZlYykKKworQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFza3MgdGhlIFBDSSBzdWJzeXN0ZW0gdG8gYWxsb2NhdGUgJ252ZWMnIE1TSXMuCitUaGUgJ2VudHJpZXMnIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBtc2l4X2VudHJ5IHN0cnVjdHMKK3doaWNoIHNob3VsZCBiZSBhdCBsZWFzdCAnbnZlYycgZW50cmllcyBpbiBzaXplLiAgT24gc3VjY2VzcywgdGhlCitmdW5jdGlvbiB3aWxsIHJldHVybiAwIGFuZCB0aGUgZGV2aWNlIHdpbGwgaGF2ZSBiZWVuIHN3aXRjaGVkIGludG8KK01TSS1YIGludGVycnVwdCBtb2RlLiAgVGhlICd2ZWN0b3InIGVsZW1lbnRzIGluIGVhY2ggZW50cnkgd2lsbCBoYXZlCitiZWVuIGZpbGxlZCBpbiB3aXRoIHRoZSBpbnRlcnJ1cHQgbnVtYmVyLiAgVGhlIGRyaXZlciBzaG91bGQgdGhlbiBjYWxsCityZXF1ZXN0X2lycSgpIGZvciBlYWNoICd2ZWN0b3InIHRoYXQgaXQgZGVjaWRlcyB0byB1c2UuCisKK0lmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciwgaXQgaW5kaWNhdGVzIGFuIGVycm9yIGFuZAordGhlIGRyaXZlciBzaG91bGQgbm90IGF0dGVtcHQgdG8gYWxsb2NhdGUgYW55IG1vcmUgTVNJLVggaW50ZXJydXB0cyBmb3IKK3RoaXMgZGV2aWNlLiAgSWYgaXQgcmV0dXJucyBhIHBvc2l0aXZlIG51bWJlciwgaXQgaW5kaWNhdGVzIHRoZSBtYXhpbXVtCitudW1iZXIgb2YgaW50ZXJydXB0IHZlY3RvcnMgdGhhdCBjb3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkLiBTZWUgZXhhbXBsZQorYmVsb3cuCisKK1RoaXMgZnVuY3Rpb24sIGluIGNvbnRyYXN0IHdpdGggcGNpX2VuYWJsZV9tc2koKSwgZG9lcyBub3QgYWRqdXN0CitkZXYtPmlycS4gIFRoZSBkZXZpY2Ugd2lsbCBub3QgZ2VuZXJhdGUgaW50ZXJydXB0cyBmb3IgdGhpcyBpbnRlcnJ1cHQKK251bWJlciBvbmNlIE1TSS1YIGlzIGVuYWJsZWQuICBUaGUgZGV2aWNlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IKK2tlZXBpbmcgdHJhY2sgb2YgdGhlIGludGVycnVwdHMgYXNzaWduZWQgdG8gdGhlIE1TSS1YIHZlY3RvcnMgc28gaXQgY2FuCitmcmVlIHRoZW0gYWdhaW4gbGF0ZXIuCisKK0RldmljZSBkcml2ZXJzIHNob3VsZCBub3JtYWxseSBjYWxsIHRoaXMgZnVuY3Rpb24gb25jZSBwZXIgZGV2aWNlCitkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHBoYXNlLgorCitJdCBpcyBpZGVhbCBpZiBkcml2ZXJzIGNhbiBjb3BlIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YgTVNJLVggaW50ZXJydXB0cywKK3RoZXJlIGFyZSBtYW55IHJlYXNvbnMgd2h5IHRoZSBwbGF0Zm9ybSBtYXkgbm90IGJlIGFibGUgdG8gcHJvdmlkZSB0aGUKK2V4YWN0IG51bWJlciBhIGRyaXZlciBhc2tzIGZvci4KKworQSByZXF1ZXN0IGxvb3AgdG8gYWNoaWV2ZSB0aGF0IG1pZ2h0IGxvb2sgbGlrZToKKworc3RhdGljIGludCBmb29fZHJpdmVyX2VuYWJsZV9tc2l4KHN0cnVjdCBmb29fYWRhcHRlciAqYWRhcHRlciwgaW50IG52ZWMpCit7CisJd2hpbGUgKG52ZWMgPj0gRk9PX0RSSVZFUl9NSU5JTVVNX05WRUMpIHsKKwkJcmMgPSBwY2lfZW5hYmxlX21zaXgoYWRhcHRlci0+cGRldiwKKwkJCQkgICAgIGFkYXB0ZXItPm1zaXhfZW50cmllcywgbnZlYyk7CisJCWlmIChyYyA+IDApCisJCQludmVjID0gcmM7CisJCWVsc2UKKwkJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gLUVOT1NQQzsKK30KKworNC4zLjIgcGNpX2Rpc2FibGVfbXNpeAogCiB2b2lkIHBjaV9kaXNhYmxlX21zaXgoc3RydWN0IHBjaV9kZXYgKmRldikKIAotVGhpcyBBUEkgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIHRvIHVuZG8gdGhlIGVmZmVjdCBvZiBwY2lfZW5hYmxlX21zaXgoKQotd2hlbiBhIGRldmljZSBkcml2ZXIgaXMgdW5sb2FkaW5nLiBOb3RlIHRoYXQgYSBkZXZpY2UgZHJpdmVyIHNob3VsZAotYWx3YXlzIGNhbGwgZnJlZV9pcnEoKSBvbiBhbGwgTVNJLVggdmVjdG9ycyBpdCBoYXMgZG9uZSByZXF1ZXN0X2lycSgpCi1vbiBiZWZvcmUgY2FsbGluZyB0aGlzIEFQSS4gRmFpbHVyZSB0byBkbyBzbyByZXN1bHRzIGluIGEgQlVHX09OKCkgYW5kCi1hIGRldmljZSB3aWxsIGJlIGxlZnQgd2l0aCBNU0ktWCBlbmFibGVkIGFuZCBsZWFrcyBpdHMgdmVjdG9ycy4KK1RoaXMgQVBJIHNob3VsZCBiZSB1c2VkIHRvIHVuZG8gdGhlIGVmZmVjdCBvZiBwY2lfZW5hYmxlX21zaXgoKS4gIEl0IGZyZWVzCit0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVzc2FnZSBzaWduYWxlZCBpbnRlcnJ1cHRzLiAgVGhlIGludGVycnVwdHMgbWF5CitzdWJzZXF1ZW50bHkgYmUgYXNzaWduZWQgdG8gYW5vdGhlciBkZXZpY2UsIHNvIGRyaXZlcnMgc2hvdWxkIG5vdCBjYWNoZQordGhlIHZhbHVlIG9mIHRoZSAndmVjdG9yJyBlbGVtZW50cyBvdmVyIGEgY2FsbCB0byBwY2lfZGlzYWJsZV9tc2l4KCkuCiAKLTUuMy40IE1TSS1YIG1vZGUgdnMuIGxlZ2FjeSBtb2RlIGRpYWdyYW0KK0EgZGV2aWNlIGRyaXZlciBtdXN0IGFsd2F5cyBjYWxsIGZyZWVfaXJxKCkgb24gdGhlIGludGVycnVwdChzKQorZm9yIHdoaWNoIGl0IGhhcyBjYWxsZWQgcmVxdWVzdF9pcnEoKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorRmFpbHVyZSB0byBkbyBzbyB3aWxsIHJlc3VsdCBpbiBhIEJVR19PTigpLCB0aGUgZGV2aWNlIHdpbGwgYmUgbGVmdCB3aXRoCitNU0kgZW5hYmxlZCBhbmQgd2lsbCBsZWFrIGl0cyB2ZWN0b3IuCiAKLVRoZSBiZWxvdyBkaWFncmFtIHNob3dzIHRoZSBldmVudHMgd2hpY2ggc3dpdGNoIHRoZSBpbnRlcnJ1cHQKLW1vZGUgb24gdGhlIE1TSS1YIGNhcGFibGUgZGV2aWNlIGZ1bmN0aW9uIGJldHdlZW4gTVNJLVggbW9kZSBhbmQKLVBJTi1JUlEgYXNzZXJ0aW9uIG1vZGUgKGxlZ2FjeSkuCis0LjMuMyBUaGUgTVNJLVggVGFibGUKIAotCSAtLS0tLS0tLS0tLS0gICBwY2lfZW5hYmxlX21zaXgoLCxuKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQl8CSAgICAgfCA8PT09PT09PT09PT09PT09CSAgICB8IAkJCSAgICAgfAotCXwgTVNJLVggTU9ERSB8CSAgCSAgICAgCSAgICB8IFBJTi1JUlEgQVNTRVJUSU9OIE1PREUgfAotCXwgCSAgICAgfCA9PT09PT09PT09PT09PT0+CSAgICB8CQkJICAgICB8Ci0gCSAtLS0tLS0tLS0tLS0JcGNpX2Rpc2FibGVfbXNpeCAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgTVNJLVggY2FwYWJpbGl0eSBzcGVjaWZpZXMgYSBCQVIgYW5kIG9mZnNldCB3aXRoaW4gdGhhdCBCQVIgZm9yIHRoZQorTVNJLVggVGFibGUuICBUaGlzIGFkZHJlc3MgaXMgbWFwcGVkIGJ5IHRoZSBQQ0kgc3Vic3lzdGVtLCBhbmQgc2hvdWxkIG5vdAorYmUgYWNjZXNzZWQgZGlyZWN0bHkgYnkgdGhlIGRldmljZSBkcml2ZXIuICBJZiB0aGUgZHJpdmVyIHdpc2hlcyB0bworbWFzayBvciB1bm1hc2sgYW4gaW50ZXJydXB0LCBpdCBzaG91bGQgY2FsbCBkaXNhYmxlX2lycSgpIC8gZW5hYmxlX2lycSgpLgogCi1GaWd1cmUgMi4gTVNJLVggTW9kZSB2cy4gTGVnYWN5IE1vZGUKKzQuNCBIYW5kbGluZyBkZXZpY2VzIGltcGxlbWVudGluZyBib3RoIE1TSSBhbmQgTVNJLVggY2FwYWJpbGl0aWVzCiAKLUluIEZpZ3VyZSAyLCBhIGRldmljZSBvcGVyYXRlcyBieSBkZWZhdWx0IGluIGxlZ2FjeSBtb2RlLiBBCi1zdWNjZXNzZnVsIE1TSS1YIHJlcXVlc3QgKHVzaW5nIHBjaV9lbmFibGVfbXNpeCgpKSBzd2l0Y2hlcyBhCi1kZXZpY2UncyBpbnRlcnJ1cHQgbW9kZSB0byBNU0ktWCBtb2RlLiBBIHByZS1hc3NpZ25lZCBJT0FQSUMgdmVjdG9yCi1zdG9yZWQgaW4gZGV2LT5pcnEgd2lsbCBiZSBzYXZlZCBieSB0aGUgUENJIHN1YnN5c3RlbTsgaG93ZXZlciwKLXVubGlrZSBNU0kgbW9kZSwgdGhlIFBDSSBzdWJzeXN0ZW0gd2lsbCBub3QgcmVwbGFjZSBkZXYtPmlycSB3aXRoCi1hc3NpZ25lZCBNU0ktWCB2ZWN0b3IgYmVjYXVzZSB0aGUgUENJIHN1YnN5c3RlbSBhbHJlYWR5IHdyaXRlcyB0aGUgMToxCi12ZWN0b3ItdG8tZW50cnkgbWFwcGluZyBpbnRvIHRoZSBmaWVsZCAndmVjdG9yJyBvZiBlYWNoIGVsZW1lbnQKLXNwZWNpZmllZCBpbiBzZWNvbmQgYXJndW1lbnQuCitJZiBhIGRldmljZSBpbXBsZW1lbnRzIGJvdGggTVNJIGFuZCBNU0ktWCBjYXBhYmlsaXRpZXMsIGl0IGNhbgorcnVuIGluIGVpdGhlciBNU0kgbW9kZSBvciBNU0ktWCBtb2RlIGJ1dCBub3QgYm90aCBzaW11bHRhbmVvdXNseS4KK1RoaXMgaXMgYSByZXF1aXJlbWVudCBvZiB0aGUgUENJIHNwZWMsIGFuZCBpdCBpcyBlbmZvcmNlZCBieSB0aGUKK1BDSSBsYXllci4gIENhbGxpbmcgcGNpX2VuYWJsZV9tc2koKSB3aGVuIE1TSS1YIGlzIGFscmVhZHkgZW5hYmxlZCBvcgorcGNpX2VuYWJsZV9tc2l4KCkgd2hlbiBNU0kgaXMgYWxyZWFkeSBlbmFibGVkIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLgorSWYgYSBkZXZpY2UgZHJpdmVyIHdpc2hlcyB0byBzd2l0Y2ggYmV0d2VlbiBNU0kgYW5kIE1TSS1YIGF0IHJ1bnRpbWUsCitpdCBtdXN0IGZpcnN0IHF1aWVzY2UgdGhlIGRldmljZSwgdGhlbiBzd2l0Y2ggaXQgYmFjayB0byBwaW4taW50ZXJydXB0Cittb2RlLCBiZWZvcmUgY2FsbGluZyBwY2lfZW5hYmxlX21zaSgpIG9yIHBjaV9lbmFibGVfbXNpeCgpIGFuZCByZXN1bWluZworb3BlcmF0aW9uLiAgVGhpcyBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgYSBjb21tb24gb3BlcmF0aW9uIGJ1dCBtYXkgYmUKK3VzZWZ1bCBmb3IgZGVidWdnaW5nIG9yIHRlc3RpbmcgZHVyaW5nIGRldmVsb3BtZW50LgogCi1UbyByZXR1cm4gYmFjayB0byBpdHMgZGVmYXVsdCBtb2RlLCBhIGRldmljZSBkcml2ZXIgc2hvdWxkIGFsd2F5cyBjYWxsCi1wY2lfZGlzYWJsZV9tc2l4KCkgdG8gdW5kbyB0aGUgZWZmZWN0IG9mIHBjaV9lbmFibGVfbXNpeCgpLiBOb3RlIHRoYXQKLWEgZGV2aWNlIGRyaXZlciBzaG91bGQgYWx3YXlzIGNhbGwgZnJlZV9pcnEoKSBvbiBhbGwgTVNJLVggdmVjdG9ycyBpdAotaGFzIGRvbmUgcmVxdWVzdF9pcnEoKSBvbiBiZWZvcmUgY2FsbGluZyBwY2lfZGlzYWJsZV9tc2l4KCkuIEZhaWx1cmUKLXRvIGRvIHNvIHJlc3VsdHMgaW4gYSBCVUdfT04oKSBhbmQgYSBkZXZpY2Ugd2lsbCBiZSBsZWZ0IHdpdGggTVNJLVgKLWVuYWJsZWQgYW5kIGxlYWtzIGl0cyB2ZWN0b3JzLiBPdGhlcndpc2UsIHRoZSBQQ0kgc3Vic3lzdGVtIHN3aXRjaGVzIGEKLWRldmljZSBmdW5jdGlvbidzIGludGVycnVwdCBtb2RlIGZyb20gTVNJLVggbW9kZSB0byBsZWdhY3kgbW9kZSBhbmQKLW1hcmtzIGFsbCBhbGxvY2F0ZWQgTVNJLVggdmVjdG9ycyBhcyB1bnVzZWQuCis0LjUgQ29uc2lkZXJhdGlvbnMgd2hlbiB1c2luZyBNU0lzCiAKLU9uY2UgYmVpbmcgbWFya2VkIGFzIHVudXNlZCwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIFBDSQotc3Vic3lzdGVtIHdpbGwgcmVzZXJ2ZSB0aGVzZSBNU0ktWCB2ZWN0b3JzIGZvciBhIGRldmljZS4gRGVwZW5kaW5nIG9uCi10aGUgYXZhaWxhYmlsaXR5IG9mIGN1cnJlbnQgUENJIHZlY3RvciByZXNvdXJjZXMgYW5kIHRoZSBudW1iZXIgb2YKLU1TSS9NU0ktWCByZXF1ZXN0cyBmcm9tIG90aGVyIGRyaXZlcnMsIHRoZXNlIE1TSS1YIHZlY3RvcnMgbWF5IGJlCi1yZS1hc3NpZ25lZC4KKzQuNS4xIENob29zaW5nIGJldHdlZW4gTVNJLVggYW5kIE1TSQogCi1Gb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIFBDSSBzdWJzeXN0ZW0gcmUtYXNzaWduZWQgdGhlc2UgTVNJLVggdmVjdG9ycwotdG8gb3RoZXIgZHJpdmVycywgYSByZXF1ZXN0IHRvIHN3aXRjaCBiYWNrIHRvIE1TSS1YIG1vZGUgbWF5IHJlc3VsdAotYmVpbmcgYXNzaWduZWQgd2l0aCBhbm90aGVyIHNldCBvZiBNU0ktWCB2ZWN0b3JzIG9yIGEgZmFpbHVyZSBpZiBubwotbW9yZSB2ZWN0b3JzIGFyZSBhdmFpbGFibGUuCitJZiB5b3VyIGRldmljZSBzdXBwb3J0cyBib3RoIE1TSS1YIGFuZCBNU0kgY2FwYWJpbGl0aWVzLCB5b3Ugc2hvdWxkIHVzZQordGhlIE1TSS1YIGZhY2lsaXRpZXMgaW4gcHJlZmVyZW5jZSB0byB0aGUgTVNJIGZhY2lsaXRpZXMuICBBcyBtZW50aW9uZWQKK2Fib3ZlLCBNU0ktWCBzdXBwb3J0cyBhbnkgbnVtYmVyIG9mIGludGVycnVwdHMgYmV0d2VlbiAxIGFuZCAyMDQ4LgorSW4gY29uc3RyYXN0LCBNU0kgaXMgcmVzdHJpY3RlZCB0byBhIG1heGltdW0gb2YgMzIgaW50ZXJydXB0cyAoYW5kCittdXN0IGJlIGEgcG93ZXIgb2YgdHdvKS4gIEluIGFkZGl0aW9uLCB0aGUgTVNJIGludGVycnVwdCB2ZWN0b3JzIG11c3QKK2JlIGFsbG9jYXRlZCBjb25zZWN1dGl2ZWx5LCBzbyB0aGUgc3lzdGVtIG1heSBub3QgYmUgYWJsZSB0byBhbGxvY2F0ZQorYXMgbWFueSB2ZWN0b3JzIGZvciBNU0kgYXMgaXQgY291bGQgZm9yIE1TSS1YLiAgT24gc29tZSBwbGF0Zm9ybXMsIE1TSQoraW50ZXJydXB0cyBtdXN0IGFsbCBiZSB0YXJnZXR0ZWQgYXQgdGhlIHNhbWUgc2V0IG9mIENQVXMgd2hlcmVhcyBNU0ktWAoraW50ZXJydXB0cyBjYW4gYWxsIGJlIHRhcmdldHRlZCBhdCBkaWZmZXJlbnQgQ1BVcy4KIAotNS40IEhhbmRsaW5nIGZ1bmN0aW9uIGltcGxlbWVudGluZyBib3RoIE1TSSBhbmQgTVNJLVggY2FwYWJpbGl0aWVzCis0LjUuMiBTcGlubG9ja3MKIAotRm9yIHRoZSBjYXNlIHdoZXJlIGEgZnVuY3Rpb24gaW1wbGVtZW50cyBib3RoIE1TSSBhbmQgTVNJLVgKLWNhcGFiaWxpdGllcywgdGhlIFBDSSBzdWJzeXN0ZW0gZW5hYmxlcyBhIGRldmljZSB0byBydW4gZWl0aGVyIGluIE1TSQotbW9kZSBvciBNU0ktWCBtb2RlIGJ1dCBub3QgYm90aC4gQSBkZXZpY2UgZHJpdmVyIGRldGVybWluZXMgd2hldGhlciBpdAotd2FudHMgTVNJIG9yIE1TSS1YIGVuYWJsZWQgb24gaXRzIGhhcmR3YXJlIGRldmljZS4gT25jZSBhIGRldmljZQotZHJpdmVyIHJlcXVlc3RzIGZvciBNU0ksIGZvciBleGFtcGxlLCBpdCBpcyBwcm9oaWJpdGVkIGZyb20gcmVxdWVzdGluZwotTVNJLVg7IGluIG90aGVyIHdvcmRzLCBhIGRldmljZSBkcml2ZXIgaXMgbm90IHBlcm1pdHRlZCB0byBwaW5nLXBvbmcKLWJldHdlZW4gTVNJIG1vZCBNU0ktWCBtb2RlIGR1cmluZyBhIHJ1bi10aW1lLgorTW9zdCBkZXZpY2UgZHJpdmVycyBoYXZlIGEgcGVyLWRldmljZSBzcGlubG9jayB3aGljaCBpcyB0YWtlbiBpbiB0aGUKK2ludGVycnVwdCBoYW5kbGVyLiAgV2l0aCBwaW4tYmFzZWQgaW50ZXJydXB0cyBvciBhIHNpbmdsZSBNU0ksIGl0IGlzIG5vdAorbmVjZXNzYXJ5IHRvIGRpc2FibGUgaW50ZXJydXB0cyAoTGludXggZ3VhcmFudGVlcyB0aGUgc2FtZSBpbnRlcnJ1cHQgd2lsbAorbm90IGJlIHJlLWVudGVyZWQpLiAgSWYgYSBkZXZpY2UgdXNlcyBtdWx0aXBsZSBpbnRlcnJ1cHRzLCB0aGUgZHJpdmVyCittdXN0IGRpc2FibGUgaW50ZXJydXB0cyB3aGlsZSB0aGUgbG9jayBpcyBoZWxkLiAgSWYgdGhlIGRldmljZSBzZW5kcworYSBkaWZmZXJlbnQgaW50ZXJydXB0LCB0aGUgZHJpdmVyIHdpbGwgZGVhZGxvY2sgdHJ5aW5nIHRvIHJlY3Vyc2l2ZWx5CithY3F1aXJlIHRoZSBzcGlubG9jay4KIAotNS41IEhhcmR3YXJlIHJlcXVpcmVtZW50cyBmb3IgTVNJL01TSS1YIHN1cHBvcnQKK1RoZXJlIGFyZSB0d28gc29sdXRpb25zLiAgVGhlIGZpcnN0IGlzIHRvIHRha2UgdGhlIGxvY2sgd2l0aAorc3Bpbl9sb2NrX2lycXNhdmUoKSBvciBzcGluX2xvY2tfaXJxKCkgKHNlZQorRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1sb2NraW5nKS4gIFRoZSBzZWNvbmQgaXMgdG8gc3BlY2lmeQorSVJRRl9ESVNBQkxFRCB0byByZXF1ZXN0X2lycSgpIHNvIHRoYXQgdGhlIGtlcm5lbCBydW5zIHRoZSBlbnRpcmUKK2ludGVycnVwdCByb3V0aW5lIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KIAotTVNJL01TSS1YIHN1cHBvcnQgcmVxdWlyZXMgc3VwcG9ydCBmcm9tIGJvdGggc3lzdGVtIGhhcmR3YXJlIGFuZAotaW5kaXZpZHVhbCBoYXJkd2FyZSBkZXZpY2UgZnVuY3Rpb25zLgorSWYgeW91ciBNU0kgaW50ZXJydXB0IHJvdXRpbmUgZG9lcyBub3QgaG9sZCB0aGUgbG9jayBmb3IgdGhlIHdob2xlIHRpbWUKK2l0IGlzIHJ1bm5pbmcsIHRoZSBmaXJzdCBzb2x1dGlvbiBtYXkgYmUgYmVzdC4gIFRoZSBzZWNvbmQgc29sdXRpb24gaXMKK25vcm1hbGx5IHByZWZlcnJlZCBhcyBpdCBhdm9pZHMgbWFraW5nIHR3byB0cmFuc2l0aW9ucyBmcm9tIGludGVycnVwdAorZGlzYWJsZWQgdG8gZW5hYmxlZCBhbmQgYmFjayBhZ2Fpbi4KIAotNS41LjEgUmVxdWlyZWQgeDg2IGhhcmR3YXJlIHN1cHBvcnQKKzQuNiBIb3cgdG8gdGVsbCB3aGV0aGVyIE1TSS9NU0ktWCBpcyBlbmFibGVkIG9uIGEgZGV2aWNlCiAKLVNpbmNlIHRoZSB0YXJnZXQgb2YgTVNJIGFkZHJlc3MgaXMgdGhlIGxvY2FsIEFQSUMgQ1BVLCBlbmFibGluZwotTVNJL01TSS1YIHN1cHBvcnQgaW4gdGhlIExpbnV4IGtlcm5lbCBpcyBkZXBlbmRlbnQgb24gd2hldGhlciBleGlzdGluZwotc3lzdGVtIGhhcmR3YXJlIHN1cHBvcnRzIGxvY2FsIEFQSUMuIFVzZXJzIHNob3VsZCB2ZXJpZnkgdGhhdCB0aGVpcgotc3lzdGVtIHN1cHBvcnRzIGxvY2FsIEFQSUMgb3BlcmF0aW9uIGJ5IHRlc3RpbmcgdGhhdCBpdCBydW5zIHdoZW4KLUNPTkZJR19YODZfTE9DQUxfQVBJQz15LgorVXNpbmcgJ2xzcGNpIC12JyAoYXMgcm9vdCkgbWF5IHNob3cgc29tZSBkZXZpY2VzIHdpdGggIk1TSSIsICJNZXNzYWdlCitTaWduYWxsZWQgSW50ZXJydXB0cyIgb3IgIk1TSS1YIiBjYXBhYmlsaXRpZXMuICBFYWNoIG9mIHRoZXNlIGNhcGFiaWxpdGllcworaGFzIGFuICdFbmFibGUnIGZsYWcgd2hpY2ggd2lsbCBiZSBmb2xsb3dlZCB3aXRoIGVpdGhlciAiKyIgKGVuYWJsZWQpCitvciAiLSIgKGRpc2FibGVkKS4KIAotSW4gU01QIGVudmlyb25tZW50LCBDT05GSUdfWDg2X0xPQ0FMX0FQSUMgaXMgYXV0b21hdGljYWxseSBzZXQ7Ci1ob3dldmVyLCBpbiBVUCBlbnZpcm9ubWVudCwgdXNlcnMgbXVzdCBtYW51YWxseSBzZXQKLUNPTkZJR19YODZfTE9DQUxfQVBJQy4gT25jZSBDT05GSUdfWDg2X0xPQ0FMX0FQSUM9eSwgc2V0dGluZwotQ09ORklHX1BDSV9NU0kgZW5hYmxlcyB0aGUgVkVDVE9SIGJhc2VkIHNjaGVtZSBhbmQgdGhlIG9wdGlvbiBmb3IKLU1TSS1jYXBhYmxlIGRldmljZSBkcml2ZXJzIHRvIHNlbGVjdGl2ZWx5IGVuYWJsZSBNU0kvTVNJLVguCiAKLU5vdGUgdGhhdCBDT05GSUdfWDg2X0lPX0FQSUMgc2V0dGluZyBpcyBpcnJlbGV2YW50IGJlY2F1c2UgTVNJL01TSS1YCi12ZWN0b3IgaXMgYWxsb2NhdGVkIG5ldyBkdXJpbmcgcnVudGltZSBhbmQgTVNJL01TSS1YIHN1cHBvcnQgZG9lcyBub3QKLWRlcGVuZCBvbiBCSU9TIHN1cHBvcnQuIFRoaXMga2V5IGluZGVwZW5kZW5jeSBlbmFibGVzIE1TSS9NU0ktWAotc3VwcG9ydCBvbiBmdXR1cmUgSU94QVBJQyBmcmVlIHBsYXRmb3Jtcy4KKzUuIE1TSSBxdWlya3MKIAotNS41LjIgRGV2aWNlIGhhcmR3YXJlIHN1cHBvcnQKK1NldmVyYWwgUENJIGNoaXBzZXRzIG9yIGRldmljZXMgYXJlIGtub3duIG5vdCB0byBzdXBwb3J0IE1TSXMuCitUaGUgUENJIHN0YWNrIHByb3ZpZGVzIHRocmVlIHdheXMgdG8gZGlzYWJsZSBNU0lzOgogCi1UaGUgaGFyZHdhcmUgZGV2aWNlIGZ1bmN0aW9uIHN1cHBvcnRzIE1TSSBieSBpbmRpY2F0aW5nIHRoZQotTVNJL01TSS1YIGNhcGFiaWxpdHkgc3RydWN0dXJlIG9uIGl0cyBQQ0kgY2FwYWJpbGl0eSBsaXN0LiBCeQotZGVmYXVsdCwgdGhpcyBjYXBhYmlsaXR5IHN0cnVjdHVyZSB3aWxsIG5vdCBiZSBpbml0aWFsaXplZCBieQotdGhlIGtlcm5lbCB0byBlbmFibGUgTVNJIGR1cmluZyB0aGUgc3lzdGVtIGJvb3QuIEluIG90aGVyIHdvcmRzLAotdGhlIGRldmljZSBmdW5jdGlvbiBpcyBydW5uaW5nIG9uIGl0cyBkZWZhdWx0IHBpbiBhc3NlcnRpb24gbW9kZS4KLU5vdGUgdGhhdCBpbiBtYW55IGNhc2VzIHRoZSBoYXJkd2FyZSBzdXBwb3J0aW5nIE1TSSBoYXZlIGJ1Z3MsCi13aGljaCBtYXkgcmVzdWx0IGluIHN5c3RlbSBoYW5ncy4gVGhlIHNvZnR3YXJlIGRyaXZlciBvZiBzcGVjaWZpYwotTVNJLWNhcGFibGUgaGFyZHdhcmUgaXMgcmVzcG9uc2libGUgZm9yIGRlY2lkaW5nIHdoZXRoZXIgdG8gY2FsbAotcGNpX2VuYWJsZV9tc2kgb3Igbm90LiBBIHJldHVybiBvZiB6ZXJvIGluZGljYXRlcyB0aGUga2VybmVsCi1zdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgdGhlIE1TSS9NU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZSBvZiB0aGUKLWRldmljZSBmdW5jdGlvbi4gVGhlIGRldmljZSBmdW5jdGlvbiBpcyBub3cgcnVubmluZyBvbiBNU0kvTVNJLVggbW9kZS4KKzEuIGdsb2JhbGx5CisyLiBvbiBhbGwgZGV2aWNlcyBiZWhpbmQgYSBzcGVjaWZpYyBicmlkZ2UKKzMuIG9uIGEgc2luZ2xlIGRldmljZQogCi01LjYgSG93IHRvIHRlbGwgd2hldGhlciBNU0kvTVNJLVggaXMgZW5hYmxlZCBvbiBkZXZpY2UgZnVuY3Rpb24KKzUuMS4gRGlzYWJsaW5nIE1TSXMgZ2xvYmFsbHkKIAotQXQgdGhlIGRyaXZlciBsZXZlbCwgYSByZXR1cm4gb2YgemVybyBmcm9tIHRoZSBmdW5jdGlvbiBjYWxsIG9mCi1wY2lfZW5hYmxlX21zaSgpL3BjaV9lbmFibGVfbXNpeCgpIGluZGljYXRlcyB0byBhIGRldmljZSBkcml2ZXIgdGhhdAotaXRzIGRldmljZSBmdW5jdGlvbiBpcyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkgYW5kIHJlYWR5IHRvIHJ1biBpbgotTVNJL01TSS1YIG1vZGUuCitTb21lIGhvc3QgY2hpcHNldHMgc2ltcGx5IGRvbid0IHN1cHBvcnQgTVNJcyBwcm9wZXJseS4gIElmIHdlJ3JlCitsdWNreSwgdGhlIG1hbnVmYWN0dXJlciBrbm93cyB0aGlzIGFuZCBoYXMgaW5kaWNhdGVkIGl0IGluIHRoZSBBQ1BJCitGQURUIHRhYmxlLiAgSW4gdGhpcyBjYXNlLCBMaW51eCB3aWxsIGF1dG9tYXRpY2FsbHkgZGlzYWJsZSBNU0lzLgorU29tZSBib2FyZHMgZG9uJ3QgaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSB0YWJsZSBhbmQgc28gd2UgaGF2ZQordG8gZGV0ZWN0IHRoZW0gb3Vyc2VsdmVzLiAgVGhlIGNvbXBsZXRlIGxpc3Qgb2YgdGhlc2UgaXMgZm91bmQgbmVhciB0aGUKK3F1aXJrX2Rpc2FibGVfYWxsX21zaSgpIGZ1bmN0aW9uIGluIGRyaXZlcnMvcGNpL3F1aXJrcy5jLgogCi1BdCB0aGUgdXNlciBsZXZlbCwgdXNlcnMgY2FuIHVzZSB0aGUgY29tbWFuZCAnY2F0IC9wcm9jL2ludGVycnVwdHMnCi10byBkaXNwbGF5IHRoZSB2ZWN0b3JzIGFsbG9jYXRlZCBmb3IgZGV2aWNlcyBhbmQgdGhlaXIgaW50ZXJydXB0Ci1NU0kvTVNJLVggbW9kZXMgKCJQQ0ktTVNJIi8iUENJLU1TSS1YIikuIEJlbG93IHNob3dzIE1TSSBtb2RlIGlzCi1lbmFibGVkIG9uIGEgU0NTSSBBZGFwdGVjIDM5MzIwRCBVbHRyYTMyMCBjb250cm9sbGVyLgorSWYgeW91IGhhdmUgYSBib2FyZCB3aGljaCBoYXMgcHJvYmxlbXMgd2l0aCBNU0lzLCB5b3UgY2FuIHBhc3MgcGNpPW5vbXNpCitvbiB0aGUga2VybmVsIGNvbW1hbmQgbGluZSB0byBkaXNhYmxlIE1TSXMgb24gYWxsIGRldmljZXMuICBJdCB3b3VsZCBiZQoraW4geW91ciBiZXN0IGludGVyZXN0cyB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8gbGludXgtcGNpQHZnZXIua2VybmVsLm9yZworaW5jbHVkaW5nIGEgZnVsbCAnbHNwY2kgLXYnIHNvIHdlIGNhbiBhZGQgdGhlIHF1aXJrcyB0byB0aGUga2VybmVsLgogCi0gICAgICAgICAgIENQVTAgICAgICAgQ1BVMQotICAwOiAgICAgMzI0NjM5ICAgICAgICAgIDAgICAgSU8tQVBJQy1lZGdlICB0aW1lcgotICAxOiAgICAgICAxMTg2ICAgICAgICAgIDAgICAgSU8tQVBJQy1lZGdlICBpODA0MgotICAyOiAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgICAgWFQtUElDICBjYXNjYWRlCi0gMTI6ICAgICAgIDI3OTcgICAgICAgICAgMCAgICBJTy1BUElDLWVkZ2UgIGk4MDQyCi0gMTQ6ICAgICAgIDY1NDMgICAgICAgICAgMCAgICBJTy1BUElDLWVkZ2UgIGlkZTAKLSAxNTogICAgICAgICAgMSAgICAgICAgICAwICAgIElPLUFQSUMtZWRnZSAgaWRlMQotMTY5OiAgICAgICAgICAwICAgICAgICAgIDAgICBJTy1BUElDLWxldmVsICB1aGNpLWhjZAotMTg1OiAgICAgICAgICAwICAgICAgICAgIDAgICBJTy1BUElDLWxldmVsICB1aGNpLWhjZAotMTkzOiAgICAgICAgMTM4ICAgICAgICAgMTAgICAgICAgICBQQ0ktTVNJICBhaWM3OXh4Ci0yMDE6ICAgICAgICAgMzAgICAgICAgICAgMCAgICAgICAgIFBDSS1NU0kgIGFpYzc5eHgKLTIyNTogICAgICAgICAzMCAgICAgICAgICAwICAgSU8tQVBJQy1sZXZlbCAgYWljN3h4eAotMjMzOiAgICAgICAgIDMwICAgICAgICAgIDAgICBJTy1BUElDLWxldmVsICBhaWM3eHh4Ci1OTUk6ICAgICAgICAgIDAgICAgICAgICAgMAotTE9DOiAgICAgMzI0NTUzICAgICAzMjUwNjgKLUVSUjogICAgICAgICAgMAotTUlTOiAgICAgICAgICAwCis1LjIuIERpc2FibGluZyBNU0lzIGJlbG93IGEgYnJpZGdlCiAKLTYuIE1TSSBxdWlya3MKK1NvbWUgUENJIGJyaWRnZXMgYXJlIG5vdCBhYmxlIHRvIHJvdXRlIE1TSXMgYmV0d2VlbiBidXNzZXMgcHJvcGVybHkuCitJbiB0aGlzIGNhc2UsIE1TSXMgbXVzdCBiZSBkaXNhYmxlZCBvbiBhbGwgZGV2aWNlcyBiZWhpbmQgdGhlIGJyaWRnZS4KIAotU2V2ZXJhbCBQQ0kgY2hpcHNldHMgb3IgZGV2aWNlcyBhcmUga25vd24gdG8gbm90IHN1cHBvcnQgTVNJLgotVGhlIFBDSSBzdGFjayBwcm92aWRlcyAzIHBvc3NpYmxlIGxldmVscyBvZiBNU0kgZGlzYWJsaW5nOgotKiBvbiBhIHNpbmdsZSBkZXZpY2UKLSogb24gYWxsIGRldmljZXMgYmVoaW5kIGEgc3BlY2lmaWMgYnJpZGdlCi0qIGdsb2JhbGx5CitTb21lIGJyaWRnZXMgYWxsb3cgeW91IHRvIGVuYWJsZSBNU0lzIGJ5IGNoYW5naW5nIHNvbWUgYml0cyBpbiB0aGVpcgorUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKGVzcGVjaWFsbHkgdGhlIEh5cGVydHJhbnNwb3J0IGNoaXBzZXRzIHN1Y2gKK2FzIHRoZSBuVmlkaWEgbkZvcmNlIGFuZCBTZXJ2ZXJ3b3JrcyBIVDIwMDApLiAgQXMgd2l0aCBob3N0IGNoaXBzZXRzLAorTGludXggbW9zdGx5IGtub3dzIGFib3V0IHRoZW0gYW5kIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBNU0lzIGlmIGl0IGNhbi4KK0lmIHlvdSBoYXZlIGEgYnJpZGdlIHdoaWNoIExpbnV4IGRvZXNuJ3QgeWV0IGtub3cgYWJvdXQsIHlvdSBjYW4gZW5hYmxlCitNU0lzIGluIGNvbmZpZ3VyYXRpb24gc3BhY2UgdXNpbmcgd2hhdGV2ZXIgbWV0aG9kIHlvdSBrbm93IHdvcmtzLCB0aGVuCitlbmFibGUgTVNJcyBvbiB0aGF0IGJyaWRnZSBieSBkb2luZzoKIAotNi4xLiBEaXNhYmxpbmcgTVNJIG9uIGEgc2luZ2xlIGRldmljZQorICAgICAgIGVjaG8gMSA+IC9zeXMvYnVzL3BjaS9kZXZpY2VzLyRicmlkZ2UvbXNpX2J1cwogCi1VbmRlciBzb21lIGNpcmN1bXN0YW5jZXMgaXQgbWlnaHQgYmUgcmVxdWlyZWQgdG8gZGlzYWJsZSBNU0kgb24gYQotc2luZ2xlIGRldmljZS4gIFRoaXMgbWF5IGJlIGFjaGlldmVkIGJ5IGVpdGhlciBub3QgY2FsbGluZyBwY2lfZW5hYmxlX21zaSgpCi1vciBhbGwsIG9yIHNldHRpbmcgdGhlIHBjaV9kZXYtPm5vX21zaSBmbGFnIGJlZm9yZSAobW9zdCBvZiB0aGUgdGltZQotaW4gYSBxdWlyaykuCit3aGVyZSAkYnJpZGdlIGlzIHRoZSBQQ0kgYWRkcmVzcyBvZiB0aGUgYnJpZGdlIHlvdSd2ZSBlbmFibGVkIChlZworMDAwMDowMDowZS4wKS4KIAotNi4yLiBEaXNhYmxpbmcgTVNJIGJlbG93IGEgYnJpZGdlCitUbyBkaXNhYmxlIE1TSXMsIGVjaG8gMCBpbnN0ZWFkIG9mIDEuICBDaGFuZ2luZyB0aGlzIHZhbHVlIHNob3VsZCBiZQorZG9uZSB3aXRoIGNhdXRpb24gYXMgaXQgY2FuIGJyZWFrIGludGVycnVwdCBoYW5kbGluZyBmb3IgYWxsIGRldmljZXMKK2JlbG93IHRoaXMgYnJpZGdlLgogCi1UaGUgdmFzdCBtYWpvcml0eSBvZiBNU0kgcXVpcmtzIGFyZSByZXF1aXJlZCBieSBQQ0kgYnJpZGdlcyBub3QKLWJlaW5nIGFibGUgdG8gcm91dGUgTVNJIGJldHdlZW4gYnVzc2VzLiBJbiB0aGlzIGNhc2UsIE1TSSBoYXZlIHRvIGJlCi1kaXNhYmxlZCBvbiBhbGwgZGV2aWNlcyBiZWhpbmQgdGhpcyBicmlkZ2UuIEl0IGlzIGFjaGlldmVzIGJ5IHNldHRpbmcKLXRoZSBQQ0lfQlVTX0ZMQUdTX05PX01TSSBmbGFnIGluIHRoZSBwY2lfYnVzLT5idXNfZmxhZ3Mgb2YgdGhlIGJyaWRnZQotc3Vib3JkaW5hdGUgYnVzLiBUaGVyZSBpcyBubyBuZWVkIHRvIHNldCB0aGUgc2FtZSBmbGFnIG9uIGJyaWRnZXMgdGhhdAotYXJlIGJlbG93IHRoZSBicm9rZW4gYnJpZGdlLiBXaGVuIHBjaV9lbmFibGVfbXNpKCkgaXMgY2FsbGVkIHRvIGVuYWJsZQotTVNJIG9uIGEgZGV2aWNlLCBwY2lfbXNpX3N1cHBvcnRlZCgpIHRha2VzIGNhcmUgb2YgY2hlY2tpbmcgdGhlIE5PX01TSQotZmxhZyBpbiBhbGwgcGFyZW50IGJ1c3NlcyBvZiB0aGUgZGV2aWNlLgorQWdhaW4sIHBsZWFzZSBub3RpZnkgbGludXgtcGNpQHZnZXIua2VybmVsLm9yZyBvZiBhbnkgYnJpZGdlcyB0aGF0IG5lZWQKK3NwZWNpYWwgaGFuZGxpbmcuCiAKLVNvbWUgYnJpZGdlcyBhY3R1YWxseSBzdXBwb3J0IGR5bmFtaWMgTVNJIHN1cHBvcnQgZW5hYmxpbmcvZGlzYWJsaW5nCi1ieSBjaGFuZ2luZyBzb21lIGJpdHMgaW4gdGhlaXIgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKGVzcGVjaWFsbHkKLXRoZSBIeXBlcnRyYW5zcG9ydCBjaGlwc2V0cyBzdWNoIGFzIHRoZSBuVmlkaWEgbkZvcmNlIGFuZCBTZXJ2ZXJ3b3JrcwotSFQyMDAwKS4gSXQgbWF5IHRoZW4gYmUgcmVxdWlyZWQgdG8gdXBkYXRlIHRoZSBOT19NU0kgZmxhZyBvbiB0aGUKLWNvcnJlc3BvbmRpbmcgZGV2aWNlcyBpbiB0aGUgc3lzZnMgaGllcmFyY2h5LiBUbyBlbmFibGUgTVNJIHN1cHBvcnQKLW9uIGRldmljZSAiMDAwMDowMDowZSIsIGRvOgorNS4zLiBEaXNhYmxpbmcgTVNJcyBvbiBhIHNpbmdsZSBkZXZpY2UKIAotCWVjaG8gMSA+IC9zeXMvYnVzL3BjaS9kZXZpY2VzLzAwMDA6MDA6MGUvbXNpX2J1cworU29tZSBkZXZpY2VzIGFyZSBrbm93biB0byBoYXZlIGZhdWx0eSBNU0kgaW1wbGVtZW50YXRpb25zLiAgVXN1YWxseSB0aGlzCitpcyBoYW5kbGVkIGluIHRoZSBpbmRpdmlkdWFsIGRldmljZSBkcml2ZXIgYnV0IG9jY2FzaW9uYWxseSBpdCdzIG5lY2Vzc2FyeQordG8gaGFuZGxlIHRoaXMgd2l0aCBhIHF1aXJrLiAgU29tZSBkcml2ZXJzIGhhdmUgYW4gb3B0aW9uIHRvIGRpc2FibGUgdXNlCitvZiBNU0kuICBXaGlsZSB0aGlzIGlzIGEgY29udmVuaWVudCB3b3JrYXJvdW5kIGZvciB0aGUgZHJpdmVyIGF1dGhvciwKK2l0IGlzIG5vdCBnb29kIHByYWN0aXNlLCBhbmQgc2hvdWxkIG5vdCBiZSBlbXVsYXRlZC4KIAotVG8gZGlzYWJsZSBNU0kgc3VwcG9ydCwgZWNobyAwIGluc3RlYWQgb2YgMS4gTm90ZSB0aGF0IGl0IHNob3VsZCBiZQotdXNlZCB3aXRoIGNhdXRpb24gc2luY2UgY2hhbmdpbmcgdGhpcyB2YWx1ZSBtaWdodCBicmVhayBpbnRlcnJ1cHRzLgorNS40LiBGaW5kaW5nIHdoeSBNU0lzIGFyZSBkaXNhYmxlZCBvbiBhIGRldmljZQogCi02LjMuIERpc2FibGluZyBNU0kgZ2xvYmFsbHkKK0Zyb20gdGhlIGFib3ZlIHRocmVlIHNlY3Rpb25zLCB5b3UgY2FuIHNlZSB0aGF0IHRoZXJlIGFyZSBtYW55IHJlYXNvbnMKK3doeSBNU0lzIG1heSBub3QgYmUgZW5hYmxlZCBmb3IgYSBnaXZlbiBkZXZpY2UuICBZb3VyIGZpcnN0IHN0ZXAgc2hvdWxkCitiZSB0byBleGFtaW5lIHlvdXIgZG1lc2cgY2FyZWZ1bGx5IHRvIGRldGVybWluZSB3aGV0aGVyIE1TSXMgYXJlIGVuYWJsZWQKK2ZvciB5b3VyIG1hY2hpbmUuICBZb3Ugc2hvdWxkIGFsc28gY2hlY2sgeW91ciAuY29uZmlnIHRvIGJlIHN1cmUgeW91CitoYXZlIGVuYWJsZWQgQ09ORklHX1BDSV9NU0kuCiAKLVNvbWUgZXh0cmVtZSBjYXNlcyBtYXkgcmVxdWlyZSB0byBkaXNhYmxlIE1TSSBnbG9iYWxseSBvbiB0aGUgc3lzdGVtLgotRm9yIG5vdywgdGhlIG9ubHkga25vd24gY2FzZSBpcyBhIFNlcnZlcndvcmtzIFBDSS1YIGNoaXBzZXRzIChNU0kgYXJlCi1ub3Qgc3VwcG9ydGVkIG9uIHNldmVyYWwgYnVzc2VzIHRoYXQgYXJlIG5vdCBhbGwgY29ubmVjdGVkIHRvIHRoZQotY2hpcHNldCBpbiB0aGUgTGludXggUENJIGhpZXJhcmNoeSkuIEluIHRoZSB2YXN0IG1ham9yaXR5IG9mIG90aGVyCi1jYXNlcywgZGlzYWJsaW5nIG9ubHkgYmVoaW5kIGEgc3BlY2lmaWMgYnJpZGdlIGlzIGVub3VnaC4KK1RoZW4sICdsc3BjaSAtdCcgZ2l2ZXMgdGhlIGxpc3Qgb2YgYnJpZGdlcyBhYm92ZSBhIGRldmljZS4gIFJlYWRpbmcKKy9zeXMvYnVzL3BjaS9kZXZpY2VzLyovbXNpX2J1cyB3aWxsIHRlbGwgeW91IHdoZXRoZXIgTVNJIGFyZSBlbmFibGVkICgxKQorb3IgZGlzYWJsZWQgKDApLiAgSWYgMCBpcyBmb3VuZCBpbiBhbnkgb2YgdGhlIG1zaV9idXMgZmlsZXMgYmVsb25naW5nCit0byBicmlkZ2VzIGJldHdlZW4gdGhlIFBDSSByb290IGFuZCB0aGUgZGV2aWNlLCBNU0lzIGFyZSBkaXNhYmxlZC4KIAotRm9yIGRlYnVnZ2luZyBwdXJwb3NlLCB0aGUgdXNlciBtYXkgYWxzbyBwYXNzIHBjaT1ub21zaSBvbiB0aGUga2VybmVsCi1jb21tYW5kLWxpbmUgdG8gZXhwbGljaXRseSBkaXNhYmxlIE1TSSBnbG9iYWxseS4gQnV0LCBvbmNlIHRoZSBhcHByby0KLXByaWF0ZSBxdWlya3MgYXJlIGFkZGVkIHRvIHRoZSBrZXJuZWwsIHRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUKLXJlcXVpcmVkIGFueW1vcmUuCi0KLTYuNC4gRmluZGluZyB3aHkgTVNJIGNhbm5vdCBiZSBlbmFibGVkIG9uIGEgZGV2aWNlCi0KLUFzc3VtaW5nIHRoYXQgTVNJIGFyZSBub3QgZW5hYmxlZCBvbiBhIGRldmljZSwgeW91IHNob3VsZCBsb29rIGF0Ci1kbWVzZyB0byBmaW5kIG1lc3NhZ2VzIHRoYXQgcXVpcmtzIG1heSBvdXRwdXQgd2hlbiBkaXNhYmxpbmcgTVNJCi1vbiBzb21lIGRldmljZXMsIHNvbWUgYnJpZGdlcyBvciBldmVuIGdsb2JhbGx5LgotVGhlbiwgbHNwY2kgLXQgZ2l2ZXMgdGhlIGxpc3Qgb2YgYnJpZGdlcyBhYm92ZSBhIGRldmljZS4gUmVhZGluZwotL3N5cy9idXMvcGNpL2RldmljZXMvMDAwMDowMDowZS9tc2lfYnVzIHdpbGwgdGVsbCB5b3Ugd2hldGhlciBNU0kKLWFyZSBlbmFibGVkICgxKSBvciBkaXNhYmxlZCAoMCkuIEluIDAgaXMgZm91bmQgaW4gYSBzaW5nbGUgYnJpZGdlCi1tc2lfYnVzIGZpbGUgYWJvdmUgdGhlIGRldmljZSwgTVNJIGNhbm5vdCBiZSBlbmFibGVkLgotCi03LiBGQVEKLQotUTEuIEFyZSB0aGVyZSBhbnkgbGltaXRhdGlvbnMgb24gdXNpbmcgdGhlIE1TST8KLQotQTEuIElmIHRoZSBQQ0kgZGV2aWNlIHN1cHBvcnRzIE1TSSBhbmQgY29uZm9ybXMgdG8gdGhlCi1zcGVjaWZpY2F0aW9uIGFuZCB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgdGhlIEFQSUMgbG9jYWwgYnVzLAotdGhlbiB1c2luZyBNU0kgc2hvdWxkIHdvcmsuCi0KLVEyLiBXaWxsIGl0IHdvcmsgb24gYWxsIHRoZSBQZW50aXVtIHByb2Nlc3NvcnMgKFAzLCBQNCwgWGVvbiwKLUFNRCBwcm9jZXNzb3JzKT8gSW4gUDMgSVBJJ3MgYXJlIHRyYW5zbWl0dGVkIG9uIHRoZSBBUElDIGxvY2FsCi1idXMgYW5kIGluIFA0IGFuZCBYZW9uIHRoZXkgYXJlIHRyYW5zbWl0dGVkIG9uIHRoZSBzeXN0ZW0KLWJ1cy4gQXJlIHRoZXJlIGFueSBpbXBsaWNhdGlvbnMgd2l0aCB0aGlzPwotCi1BMi4gTVNJIHN1cHBvcnQgZW5hYmxlcyBhIFBDSSBkZXZpY2Ugc2VuZGluZyBhbiBpbmJvdW5kCi1tZW1vcnkgd3JpdGUgKDB4ZmVleHh4eHggYXMgdGFyZ2V0IGFkZHJlc3MpIG9uIGl0cyBQQ0kgYnVzCi1kaXJlY3RseSB0byB0aGUgRlNCLiBTaW5jZSB0aGUgbWVzc2FnZSBhZGRyZXNzIGhhcyBhCi1yZWRpcmVjdGlvbiBoaW50IGJpdCBjbGVhcmVkLCBpdCBzaG91bGQgd29yay4KLQotUTMuIFRoZSB0YXJnZXQgYWRkcmVzcyAweGZlZXh4eHh4IHdpbGwgYmUgdHJhbnNsYXRlZCBieSB0aGUKLUhvc3QgQnJpZGdlIGludG8gYW4gaW50ZXJydXB0IG1lc3NhZ2UuIEFyZSB0aGVyZSBhbnkKLWxpbWl0YXRpb25zIG9uIHRoZSBjaGlwc2V0cyBzdWNoIGFzIEludGVsIDh4eCwgSW50ZWwgZTd4eHgsCi1vciBWSUE/Ci0KLUEzLiBJZiB0aGVzZSBjaGlwc2V0cyBzdXBwb3J0IGFuIGluYm91bmQgbWVtb3J5IHdyaXRlIHdpdGgKLXRhcmdldCBhZGRyZXNzIHNldCBhcyAweGZlZXh4eHh4LCBhcyBjb25mb3JtZWQgdG8gUENJCi1zcGVjaWZpY2F0aW9uIDIuMyBvciBsYXRlc3QsIHRoZW4gaXQgc2hvdWxkIHdvcmsuCi0KLVE0LiBGcm9tIHRoZSBkcml2ZXIgcG9pbnQgb2YgdmlldywgaWYgdGhlIE1TSSBpcyBsb3N0IGJlY2F1c2UKLW9mIGVycm9ycyBvY2N1cnJpbmcgZHVyaW5nIGluYm91bmQgbWVtb3J5IHdyaXRlLCB0aGVuIGl0IG1heQotd2FpdCBmb3JldmVyLiBJcyB0aGVyZSBhIG1lY2hhbmlzbSBmb3IgaXQgdG8gcmVjb3Zlcj8KLQotQTQuIFNpbmNlIHRoZSB0YXJnZXQgb2YgdGhlIHRyYW5zYWN0aW9uIGlzIGFuIGluYm91bmQgbWVtb3J5Ci13cml0ZSwgYWxsIHRyYW5zYWN0aW9uIHRlcm1pbmF0aW9uIGNvbmRpdGlvbnMgKFJldHJ5LAotTWFzdGVyLUFib3J0LCBUYXJnZXQtQWJvcnQsIG9yIG5vcm1hbCBjb21wbGV0aW9uKSBhcmUKLXN1cHBvcnRlZC4gQSBkZXZpY2Ugc2VuZGluZyBhbiBNU0kgbXVzdCBhYmlkZSBieSBhbGwgdGhlIFBDSQotcnVsZXMgYW5kIGNvbmRpdGlvbnMgcmVnYXJkaW5nIHRoYXQgaW5ib3VuZCBtZW1vcnkgd3JpdGUuIFNvLAotaWYgYSByZXRyeSBpcyBzaWduYWxlZCBpdCBtdXN0IHJldHJ5LCBldGMuLi4gV2UgYmVsaWV2ZSB0aGF0Ci10aGUgcmVjb21tZW5kYXRpb24gZm9yIEFib3J0IGlzIGFsc28gYSByZXRyeSAocmVmZXIgdG8gUENJCi1zcGVjaWZpY2F0aW9uIDIuMyBvciBsYXRlc3QpLgorSXQgaXMgYWxzbyB3b3J0aCBjaGVja2luZyB0aGUgZGV2aWNlIGRyaXZlciB0byBzZWUgd2hldGhlciBpdCBzdXBwb3J0cyBNU0lzLgorRm9yIGV4YW1wbGUsIGl0IG1heSBjb250YWluIGNhbGxzIHRvIHBjaV9lbmFibGVfbXNpKCksIHBjaV9lbmFibGVfbXNpeCgpIG9yCitwY2lfZW5hYmxlX21zaV9ibG9jaygpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpLWlvdi1ob3d0by50eHQgYi9Eb2N1bWVudGF0aW9uL1BDSS9wY2ktaW92LWhvd3RvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzczZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvcGNpLWlvdi1ob3d0by50eHQKQEAgLTAsMCArMSw5OSBAQAorCQlQQ0kgRXhwcmVzcyBJL08gVmlydHVhbGl6YXRpb24gSG93dG8KKwkJQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIENvcnBvcmF0aW9uCisJCSAgICBZdSBaaGFvIDx5dS56aGFvQGludGVsLmNvbT4KKworCisxLiBPdmVydmlldworCisxLjEgV2hhdCBpcyBTUi1JT1YKKworU2luZ2xlIFJvb3QgSS9PIFZpcnR1YWxpemF0aW9uIChTUi1JT1YpIGlzIGEgUENJIEV4cHJlc3MgRXh0ZW5kZWQKK2NhcGFiaWxpdHkgd2hpY2ggbWFrZXMgb25lIHBoeXNpY2FsIGRldmljZSBhcHBlYXIgYXMgbXVsdGlwbGUgdmlydHVhbAorZGV2aWNlcy4gVGhlIHBoeXNpY2FsIGRldmljZSBpcyByZWZlcnJlZCB0byBhcyBQaHlzaWNhbCBGdW5jdGlvbiAoUEYpCit3aGlsZSB0aGUgdmlydHVhbCBkZXZpY2VzIGFyZSByZWZlcnJlZCB0byBhcyBWaXJ0dWFsIEZ1bmN0aW9ucyAoVkYpLgorQWxsb2NhdGlvbiBvZiB0aGUgVkYgY2FuIGJlIGR5bmFtaWNhbGx5IGNvbnRyb2xsZWQgYnkgdGhlIFBGIHZpYQorcmVnaXN0ZXJzIGVuY2Fwc3VsYXRlZCBpbiB0aGUgY2FwYWJpbGl0eS4gQnkgZGVmYXVsdCwgdGhpcyBmZWF0dXJlIGlzCitub3QgZW5hYmxlZCBhbmQgdGhlIFBGIGJlaGF2ZXMgYXMgdHJhZGl0aW9uYWwgUENJZSBkZXZpY2UuIE9uY2UgaXQncwordHVybmVkIG9uLCBlYWNoIFZGJ3MgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgY2FuIGJlIGFjY2Vzc2VkIGJ5IGl0cyBvd24KK0J1cywgRGV2aWNlIGFuZCBGdW5jdGlvbiBOdW1iZXIgKFJvdXRpbmcgSUQpLiBBbmQgZWFjaCBWRiBhbHNvIGhhcyBQQ0kKK01lbW9yeSBTcGFjZSwgd2hpY2ggaXMgdXNlZCB0byBtYXAgaXRzIHJlZ2lzdGVyIHNldC4gVkYgZGV2aWNlIGRyaXZlcgorb3BlcmF0ZXMgb24gdGhlIHJlZ2lzdGVyIHNldCBzbyBpdCBjYW4gYmUgZnVuY3Rpb25hbCBhbmQgYXBwZWFyIGFzIGEKK3JlYWwgZXhpc3RpbmcgUENJIGRldmljZS4KKworMi4gVXNlciBHdWlkZQorCisyLjEgSG93IGNhbiBJIGVuYWJsZSBTUi1JT1YgY2FwYWJpbGl0eQorCitUaGUgZGV2aWNlIGRyaXZlciAoUEYgZHJpdmVyKSB3aWxsIGNvbnRyb2wgdGhlIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcKK29mIHRoZSBjYXBhYmlsaXR5IHZpYSBBUEkgcHJvdmlkZWQgYnkgU1ItSU9WIGNvcmUuIElmIHRoZSBoYXJkd2FyZQoraGFzIFNSLUlPViBjYXBhYmlsaXR5LCBsb2FkaW5nIGl0cyBQRiBkcml2ZXIgd291bGQgZW5hYmxlIGl0IGFuZCBhbGwKK1ZGcyBhc3NvY2lhdGVkIHdpdGggdGhlIFBGLgorCisyLjIgSG93IGNhbiBJIHVzZSB0aGUgVmlydHVhbCBGdW5jdGlvbnMKKworVGhlIFZGIGlzIHRyZWF0ZWQgYXMgaG90LXBsdWdnZWQgUENJIGRldmljZXMgaW4gdGhlIGtlcm5lbCwgc28gdGhleQorc2hvdWxkIGJlIGFibGUgdG8gd29yayBpbiB0aGUgc2FtZSB3YXkgYXMgcmVhbCBQQ0kgZGV2aWNlcy4gVGhlIFZGCityZXF1aXJlcyBkZXZpY2UgZHJpdmVyIHRoYXQgaXMgc2FtZSBhcyBhIG5vcm1hbCBQQ0kgZGV2aWNlJ3MuCisKKzMuIERldmVsb3BlciBHdWlkZQorCiszLjEgU1ItSU9WIEFQSQorCitUbyBlbmFibGUgU1ItSU9WIGNhcGFiaWxpdHk6CisJaW50IHBjaV9lbmFibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG5yX3ZpcnRmbik7CisJJ25yX3ZpcnRmbicgaXMgbnVtYmVyIG9mIFZGcyB0byBiZSBlbmFibGVkLgorCitUbyBkaXNhYmxlIFNSLUlPViBjYXBhYmlsaXR5OgorCXZvaWQgcGNpX2Rpc2FibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldik7CisKK1RvIG5vdGlmeSBTUi1JT1YgY29yZSBvZiBWaXJ0dWFsIEZ1bmN0aW9uIE1pZ3JhdGlvbjoKKwlpcnFyZXR1cm5fdCBwY2lfc3Jpb3ZfbWlncmF0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCiszLjIgVXNhZ2UgZXhhbXBsZQorCitGb2xsb3dpbmcgcGllY2Ugb2YgY29kZSBpbGx1c3RyYXRlcyB0aGUgdXNhZ2Ugb2YgdGhlIFNSLUlPViBBUEkuCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRldl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJcGNpX2VuYWJsZV9zcmlvdihkZXYsIE5SX1ZJUlRGTik7CisKKwkuLi4KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZGV2X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXBjaV9kaXNhYmxlX3NyaW92KGRldik7CisKKwkuLi4KK30KKworc3RhdGljIGludCBkZXZfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJLi4uCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZXZfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLi4uCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGV2X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLi4uCit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkZXZfZHJpdmVyID0geworCS5uYW1lID0JCSJTUi1JT1YgUGh5c2ljYWwgRnVuY3Rpb24gZHJpdmVyIiwKKwkuaWRfdGFibGUgPQlkZXZfaWRfdGFibGUsCisJLnByb2JlID0JZGV2X3Byb2JlLAorCS5yZW1vdmUgPQlfX2RldmV4aXRfcChkZXZfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9CWRldl9zdXNwZW5kLAorCS5yZXN1bWUgPQlkZXZfcmVzdW1lLAorCS5zaHV0ZG93biA9CWRldl9zaHV0ZG93biwKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UudHh0CmluZGV4IDFmZDE3NTMuLjQzNDljMTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UudHh0CkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBsaXN0LCBsaXN0KSB7CiAJCQlpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZShydWxlLCAmZS0+cnVsZSkpIHsKIAkJCQlsaXN0X2RlbF9yY3UoJmUtPmxpc3QpOwotCQkJCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZSwgZSk7CisJCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpAQCAtMjA2LDcgKzIwNiw3IEBACiAJCQkJbmUtPnJ1bGUuYWN0aW9uID0gbmV3YWN0aW9uOwogCQkJCW5lLT5ydWxlLmZpbGVfY291bnQgPSBuZXdmaWVsZF9jb3VudDsKIAkJCQlsaXN0X3JlcGxhY2VfcmN1KGUsIG5lKTsKLQkJCQljYWxsX3JjdSgmZS0+cmN1LCBhdWRpdF9mcmVlX3J1bGUsIGUpOworCQkJCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZSk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0KQEAgLTI4Myw3ICsyODMsNyBAQAogCQkJCWxpc3RfZGVsX3JjdSgmZS0+bGlzdCk7CiAJCQkJZS0+ZGVsZXRlZCA9IDE7CiAJCQkJc3Bpbl91bmxvY2soJmUtPmxvY2spOwotCQkJCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZSwgZSk7CisJCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3JjdS50eHQKaW5kZXggOTU4MjFhMi4uN2FhMjAwMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1UvcmN1LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9yY3UudHh0CkBAIC04MSw3ICs4MSw3IEBACiAJVGhpcyB3b3JrIGlzIGxhcmdlbHkgY29tcGxldGVkLiAgUmVhbHRpbWUtZnJpZW5kbHkgUkNVIGNhbiBiZQogCWVuYWJsZWQgdmlhIHRoZSBDT05GSUdfUFJFRU1QVF9SQ1Uga2VybmVsIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLgogCUhvd2V2ZXIsIHdvcmsgaXMgaW4gcHJvZ3Jlc3MgZm9yIGVuYWJsaW5nIHByaW9yaXR5IGJvb3N0aW5nIG9mCi0JcHJlZW1wdGVkIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuVGhpcyBpcyBuZWVkZWQgaWYgeW91CisJcHJlZW1wdGVkIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMuICBUaGlzIGlzIG5lZWRlZCBpZiB5b3UKIAloYXZlIENQVS1ib3VuZCByZWFsdGltZSB0aHJlYWRzLgogCiBvCVdoZXJlIGNhbiBJIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBvbiBSQ1U/CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JDVS9yY3VsaXN0X251bGxzLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3JjdWxpc3RfbnVsbHMudHh0CmluZGV4IDIzOWY1NDIuLjYzODlkZWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUkNVL3JjdWxpc3RfbnVsbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vUkNVL3JjdWxpc3RfbnVsbHMudHh0CkBAIC0yMSw3ICsyMSw3IEBACiAgIC8qCiAgICAqIEJlY2F1c2UgYSB3cml0ZXIgY291bGQgZGVsZXRlIG9iamVjdCwgYW5kIGEgd3JpdGVyIGNvdWxkCiAgICAqIHJldXNlIHRoZXNlIG9iamVjdCBiZWZvcmUgdGhlIFJDVSBncmFjZSBwZXJpb2QsIHdlCi0gICAqIG11c3QgY2hlY2sga2V5IGFmdGVyIGdldGluZyB0aGUgcmVmZXJlbmNlIG9uIG9iamVjdAorICAgKiBtdXN0IGNoZWNrIGtleSBhZnRlciBnZXR0aW5nIHRoZSByZWZlcmVuY2Ugb24gb2JqZWN0CiAgICAqLwogICBpZiAob2JqLT5rZXkgIT0ga2V5KSB7IC8vIG5vdCB0aGUgb2JqZWN0IHdlIGV4cGVjdGVkCiAgICAgIHB1dF9yZWYob2JqKTsKQEAgLTExNyw3ICsxMTcsNyBAQAogdG8gYW5vdGhlciBjaGFpbikgY2hlY2tpbmcgdGhlIGZpbmFsICdudWxscycgdmFsdWUgaWYKIHRoZSBsb29rdXAgbWV0IHRoZSBlbmQgb2YgY2hhaW4uIElmIGZpbmFsICdudWxscycgdmFsdWUKIGlzIG5vdCB0aGUgc2xvdCBudW1iZXIsIHRoZW4gd2UgbXVzdCByZXN0YXJ0IHRoZSBsb29rdXAgYXQKLXRoZSBiZWdpbmluZy4gSWYgdGhlIG9iamVjdCB3YXMgbW92ZWQgdG8gc2FtZSBjaGFpbiwKK3RoZSBiZWdpbm5pbmcuIElmIHRoZSBvYmplY3Qgd2FzIG1vdmVkIHRvIHRoZSBzYW1lIGNoYWluLAogdGhlbiB0aGUgcmVhZGVyIGRvZXNudCBjYXJlIDogSXQgbWlnaHQgZXZlbnR1YWxseQogc2NhbiB0aGUgbGlzdCBhZ2FpbiB3aXRob3V0IGhhcm0uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjU4ZmEzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLzAwLUlOREVYCkBAIC0wLDAgKzEsMTggQEAKKzAwLUlOREVYCisJLSB0aGlzIGZpbGUKK2Nncm91cHMudHh0CisJLSBDb250cm9sIEdyb3VwcyBkZWZpbml0aW9uLCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBleGFtcGxlcyBhbmQgQVBJLgorY3B1YWNjdC50eHQKKwktIENQVSBBY2NvdW50aW5nIENvbnRyb2xsZXI7IGFjY291bnQgQ1BVIHVzYWdlIGZvciBncm91cHMgb2YgdGFza3MuCitjcHVzZXRzLnR4dAorCS0gZG9jdW1lbnRzIHRoZSBjcHVzZXRzIGZlYXR1cmU7IGFzc2lnbiBDUFVzIGFuZCBNZW0gdG8gYSBzZXQgb2YgdGFza3MuCitkZXZpY2VzLnR4dAorCS0gRGV2aWNlIFdoaXRlbGlzdCBDb250cm9sbGVyOyBkZXNjcmlwdGlvbiwgaW50ZXJmYWNlIGFuZCBzZWN1cml0eS4KK2ZyZWV6ZXItc3Vic3lzdGVtLnR4dAorCS0gY2hlY2twb2ludGluZzsgcmF0aW9uYWxlIHRvIG5vdCB1c2Ugc2lnbmFscywgaW50ZXJmYWNlLgorbWVtY2dfdGVzdC50eHQKKwktIE1lbW9yeSBSZXNvdXJjZSBDb250cm9sbGVyOyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgorbWVtb3J5LnR4dAorCS0gTWVtb3J5IFJlc291cmNlIENvbnRyb2xsZXI7IGRlc2lnbiwgYWNjb3VudGluZywgaW50ZXJmYWNlLCB0ZXN0aW5nLgorcmVzb3VyY2VfY291bnRlci50eHQKKwktIFJlc291cmNlIENvdW50ZXIgQVBJLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0CmluZGV4IDkzZmViODQuLjZlYjFhOTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKQEAgLTU2LDcgKzU2LDcgQEAKIHN0YXRlIGF0dGFjaGVkIHRvIGVhY2ggY2dyb3VwIGluIHRoZSBoaWVyYXJjaHkuICBFYWNoIGhpZXJhcmNoeSBoYXMKIGFuIGluc3RhbmNlIG9mIHRoZSBjZ3JvdXAgdmlydHVhbCBmaWxlc3lzdGVtIGFzc29jaWF0ZWQgd2l0aCBpdC4KIAotQXQgYW55IG9uZSB0aW1lIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBhY3RpdmUgaGllcmFjaGllcyBvZiB0YXNrCitBdCBhbnkgb25lIHRpbWUgdGhlcmUgbWF5IGJlIG11bHRpcGxlIGFjdGl2ZSBoaWVyYXJjaGllcyBvZiB0YXNrCiBjZ3JvdXBzLiBFYWNoIGhpZXJhcmNoeSBpcyBhIHBhcnRpdGlvbiBvZiBhbGwgdGFza3MgaW4gdGhlIHN5c3RlbS4KIAogVXNlciBsZXZlbCBjb2RlIG1heSBjcmVhdGUgYW5kIGRlc3Ryb3kgY2dyb3VwcyBieSBuYW1lIGluIGFuCkBAIC0xMjQsMTAgKzEyNCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gXAogICAgICAgICAgICAgICAgICAgICAgICBQcm9mICgxNSUpIHN0dWRlbnRzICg1JSkKIAotQnJvd3NlcnMgbGlrZSBmaXJlZm94L2x5bnggZ28gaW50byB0aGUgV1dXIG5ldHdvcmsgY2xhc3MsIHdoaWxlIChrKW5mc2QgZ28KK0Jyb3dzZXJzIGxpa2UgRmlyZWZveC9MeW54IGdvIGludG8gdGhlIFdXVyBuZXR3b3JrIGNsYXNzLCB3aGlsZSAoayluZnNkIGdvCiBpbnRvIE5GUyBuZXR3b3JrIGNsYXNzLgogCi1BdCB0aGUgc2FtZSB0aW1lIGZpcmVmb3gvbHlueCB3aWxsIHNoYXJlIGFuIGFwcHJvcHJpYXRlIENQVS9NZW1vcnkgY2xhc3MKK0F0IHRoZSBzYW1lIHRpbWUgRmlyZWZveC9MeW54IHdpbGwgc2hhcmUgYW4gYXBwcm9wcmlhdGUgQ1BVL01lbW9yeSBjbGFzcwogZGVwZW5kaW5nIG9uIHdobyBsYXVuY2hlZCBpdCAocHJvZi9zdHVkZW50KS4KIAogV2l0aCB0aGUgYWJpbGl0eSB0byBjbGFzc2lmeSB0YXNrcyBkaWZmZXJlbnRseSBmb3IgZGlmZmVyZW50IHJlc291cmNlcwpAQCAtMzI1LDcgKzMyNSw3IEBACiBDcmVhdGluZywgbW9kaWZ5aW5nLCB1c2luZyB0aGUgY2dyb3VwcyBjYW4gYmUgZG9uZSB0aHJvdWdoIHRoZSBjZ3JvdXAKIHZpcnR1YWwgZmlsZXN5c3RlbS4KIAotVG8gbW91bnQgYSBjZ3JvdXAgaGllcmFyY2h5IHdpbGwgYWxsIGF2YWlsYWJsZSBzdWJzeXN0ZW1zLCB0eXBlOgorVG8gbW91bnQgYSBjZ3JvdXAgaGllcmFyY2h5IHdpdGggYWxsIGF2YWlsYWJsZSBzdWJzeXN0ZW1zLCB0eXBlOgogIyBtb3VudCAtdCBjZ3JvdXAgeHh4IC9kZXYvY2dyb3VwCiAKIFRoZSAieHh4IiBpcyBub3QgaW50ZXJwcmV0ZWQgYnkgdGhlIGNncm91cCBjb2RlLCBidXQgd2lsbCBhcHBlYXIgaW4KQEAgLTMzMywxMiArMzMzLDIzIEBACiAKIFRvIG1vdW50IGEgY2dyb3VwIGhpZXJhcmNoeSB3aXRoIGp1c3QgdGhlIGNwdXNldCBhbmQgbnVtdGFza3MKIHN1YnN5c3RlbXMsIHR5cGU6Ci0jIG1vdW50IC10IGNncm91cCAtbyBjcHVzZXQsbnVtdGFza3MgaGllcjEgL2Rldi9jZ3JvdXAKKyMgbW91bnQgLXQgY2dyb3VwIC1vIGNwdXNldCxtZW1vcnkgaGllcjEgL2Rldi9jZ3JvdXAKIAogVG8gY2hhbmdlIHRoZSBzZXQgb2Ygc3Vic3lzdGVtcyBib3VuZCB0byBhIG1vdW50ZWQgaGllcmFyY2h5LCBqdXN0CiByZW1vdW50IHdpdGggZGlmZmVyZW50IG9wdGlvbnM6CisjIG1vdW50IC1vIHJlbW91bnQsY3B1c2V0LG5zIGhpZXIxIC9kZXYvY2dyb3VwCiAKLSMgbW91bnQgLW8gcmVtb3VudCxjcHVzZXQsbnMgIC9kZXYvY2dyb3VwCitOb3cgbWVtb3J5IGlzIHJlbW92ZWQgZnJvbSB0aGUgaGllcmFyY2h5IGFuZCBucyBpcyBhZGRlZC4KKworTm90ZSB0aGlzIHdpbGwgYWRkIG5zIHRvIHRoZSBoaWVyYXJjaHkgYnV0IHdvbid0IHJlbW92ZSBtZW1vcnkgb3IKK2NwdXNldCwgYmVjYXVzZSB0aGUgbmV3IG9wdGlvbnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBvbGQgb25lczoKKyMgbW91bnQgLW8gcmVtb3VudCxucyAvZGV2L2Nncm91cAorCitUbyBTcGVjaWZ5IGEgaGllcmFyY2h5J3MgcmVsZWFzZV9hZ2VudDoKKyMgbW91bnQgLXQgY2dyb3VwIC1vIGNwdXNldCxyZWxlYXNlX2FnZW50PSIvc2Jpbi9jcHVzZXRfcmVsZWFzZV9hZ2VudCIgXAorICB4eHggL2Rldi9jZ3JvdXAKKworTm90ZSB0aGF0IHNwZWNpZnlpbmcgJ3JlbGVhc2VfYWdlbnQnIG1vcmUgdGhhbiBvbmNlIHdpbGwgcmV0dXJuIGZhaWx1cmUuCiAKIE5vdGUgdGhhdCBjaGFuZ2luZyB0aGUgc2V0IG9mIHN1YnN5c3RlbXMgaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkCiB3aGVuIHRoZSBoaWVyYXJjaHkgY29uc2lzdHMgb2YgYSBzaW5nbGUgKHJvb3QpIGNncm91cC4gU3VwcG9ydGluZwpAQCAtMzQ5LDYgKzM2MCwxMSBAQAogdHJlZSBvZiB0aGUgY2dyb3VwcyBpbiB0aGUgc3lzdGVtLiBGb3IgaW5zdGFuY2UsIC9kZXYvY2dyb3VwCiBpcyB0aGUgY2dyb3VwIHRoYXQgaG9sZHMgdGhlIHdob2xlIHN5c3RlbS4KIAorSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSB2YWx1ZSBvZiByZWxlYXNlX2FnZW50OgorIyBlY2hvICIvc2Jpbi9uZXdfcmVsZWFzZV9hZ2VudCIgPiAvZGV2L2Nncm91cC9yZWxlYXNlX2FnZW50CisKK0l0IGNhbiBhbHNvIGJlIGNoYW5nZWQgdmlhIHJlbW91bnQuCisKIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBjZ3JvdXAgdW5kZXIgL2Rldi9jZ3JvdXA6CiAjIGNkIC9kZXYvY2dyb3VwCiAjIG1rZGlyIG15X2Nncm91cApAQCAtNDc2LDExICs0OTIsMTMgQEAKIG5ld2x5LWNyZWF0ZWQgY2dyb3VwIGlmIGFuIGVycm9yIG9jY3VycyBhZnRlciB0aGlzIHN1YnN5c3RlbSdzCiBjcmVhdGUoKSBtZXRob2QgaGFzIGJlZW4gY2FsbGVkIGZvciB0aGUgbmV3IGNncm91cCkuCiAKLXZvaWQgcHJlX2Rlc3Ryb3koc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKK2ludCBwcmVfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnApOwogCiBDYWxsZWQgYmVmb3JlIGNoZWNraW5nIHRoZSByZWZlcmVuY2UgY291bnQgb24gZWFjaCBzdWJzeXN0ZW0uIFRoaXMgbWF5CiBiZSB1c2VmdWwgZm9yIHN1YnN5c3RlbXMgd2hpY2ggaGF2ZSBzb21lIGV4dHJhIHJlZmVyZW5jZXMgZXZlbiBpZgotdGhlcmUgYXJlIG5vdCB0YXNrcyBpbiB0aGUgY2dyb3VwLgordGhlcmUgYXJlIG5vdCB0YXNrcyBpbiB0aGUgY2dyb3VwLiBJZiBwcmVfZGVzdHJveSgpIHJldHVybnMgZXJyb3IgY29kZSwKK3JtZGlyKCkgd2lsbCBmYWlsIHdpdGggaXQuIEZyb20gdGhpcyBiZWhhdmlvciwgcHJlX2Rlc3Ryb3koKSBjYW4gYmUKK2NhbGxlZCBtdWx0aXBsZSB0aW1lcyBhZ2FpbnN0IGEgY2dyb3VwLgogCiBpbnQgY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKQEAgLTUyMSw3ICs1MzksNyBAQAogdm9pZCBwb3N0X2Nsb25lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCkKIChjZ3JvdXBfbXV0ZXggaGVsZCBieSBjYWxsZXIpCiAKLUNhbGxlZCBhdCB0aGUgZW5kIG9mIGNncm91cF9jbG9uZSgpIHRvIGRvIGFueSBwYXJhbWF0ZXIKK0NhbGxlZCBhdCB0aGUgZW5kIG9mIGNncm91cF9jbG9uZSgpIHRvIGRvIGFueSBwYXJhbWV0ZXIKIGluaXRpYWxpemF0aW9uIHdoaWNoIG1pZ2h0IGJlIHJlcXVpcmVkIGJlZm9yZSBhIHRhc2sgY291bGQgYXR0YWNoLiAgRm9yCiBleGFtcGxlIGluIGNwdXNldHMsIG5vIHRhc2sgbWF5IGF0dGFjaCBiZWZvcmUgJ2NwdXMnIGFuZCAnbWVtcycgYXJlIHNldAogdXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1c2V0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1c2V0cy50eHQKaW5kZXggMDYxMWU5NS4uZjljYTM4OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dApAQCAtMTMxLDcgKzEzMSw3IEBACiAgLSBUaGUgaGllcmFyY2h5IG9mIGNwdXNldHMgY2FuIGJlIG1vdW50ZWQgYXQgL2Rldi9jcHVzZXQsIGZvcgogICAgYnJvd3NpbmcgYW5kIG1hbmlwdWxhdGlvbiBmcm9tIHVzZXIgc3BhY2UuCiAgLSBBIGNwdXNldCBtYXkgYmUgbWFya2VkIGV4Y2x1c2l2ZSwgd2hpY2ggZW5zdXJlcyB0aGF0IG5vIG90aGVyCi0gICBjcHVzZXQgKGV4Y2VwdCBkaXJlY3QgYW5jZXN0b3JzIGFuZCBkZXNjZW5kZW50cykgbWF5IGNvbnRhaW4KKyAgIGNwdXNldCAoZXhjZXB0IGRpcmVjdCBhbmNlc3RvcnMgYW5kIGRlc2NlbmRhbnRzKSBtYXkgY29udGFpbgogICAgYW55IG92ZXJsYXBwaW5nIENQVXMgb3IgTWVtb3J5IE5vZGVzLgogIC0gWW91IGNhbiBsaXN0IGFsbCB0aGUgdGFza3MgKGJ5IHBpZCkgYXR0YWNoZWQgdG8gYW55IGNwdXNldC4KIApAQCAtMjI2LDcgKzIyNiw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJZiBhIGNwdXNldCBpcyBjcHUgb3IgbWVtIGV4Y2x1c2l2ZSwgbm8gb3RoZXIgY3B1c2V0LCBvdGhlciB0aGFuCi1hIGRpcmVjdCBhbmNlc3RvciBvciBkZXNjZW5kZW50LCBtYXkgc2hhcmUgYW55IG9mIHRoZSBzYW1lIENQVXMgb3IKK2EgZGlyZWN0IGFuY2VzdG9yIG9yIGRlc2NlbmRhbnQsIG1heSBzaGFyZSBhbnkgb2YgdGhlIHNhbWUgQ1BVcyBvcgogTWVtb3J5IE5vZGVzLgogCiBBIGNwdXNldCB0aGF0IGlzIG1lbV9leGNsdXNpdmUgKm9yKiBtZW1faGFyZHdhbGwgaXMgImhhcmR3YWxsZWQiLApAQCAtNDI3LDcgKzQyNyw3IEBACiBXaGVuIGRvaW5nIHRoaXMsIHlvdSBkb24ndCB1c3VhbGx5IHdhbnQgdG8gbGVhdmUgYW55IHVucGlubmVkIHRhc2tzIGluCiB0aGUgdG9wIGNwdXNldCB0aGF0IG1pZ2h0IHVzZSBub24tdHJpdmlhbCBhbW91bnRzIG9mIENQVSwgYXMgc3VjaCB0YXNrcwogbWF5IGJlIGFydGlmaWNpYWxseSBjb25zdHJhaW5lZCB0byBzb21lIHN1YnNldCBvZiBDUFVzLCBkZXBlbmRpbmcgb24KLXRoZSBwYXJ0aWN1bGFycyBvZiB0aGlzIGZsYWcgc2V0dGluZyBpbiBkZXNjZW5kZW50IGNwdXNldHMuICBFdmVuIGlmCit0aGUgcGFydGljdWxhcnMgb2YgdGhpcyBmbGFnIHNldHRpbmcgaW4gZGVzY2VuZGFudCBjcHVzZXRzLiAgRXZlbiBpZgogc3VjaCBhIHRhc2sgY291bGQgdXNlIHNwYXJlIENQVSBjeWNsZXMgaW4gc29tZSBvdGhlciBDUFVzLCB0aGUga2VybmVsCiBzY2hlZHVsZXIgbWlnaHQgbm90IGNvbnNpZGVyIHRoZSBwb3NzaWJpbGl0eSBvZiBsb2FkIGJhbGFuY2luZyB0aGF0CiB0YXNrIHRvIHRoYXQgdW5kZXJ1c2VkIENQVS4KQEAgLTUzMSw5ICs1MzEsOSBAQAogCiBPZiBjb3Vyc2UgaXQgdGFrZXMgc29tZSBzZWFyY2hpbmcgY29zdCB0byBmaW5kIG1vdmFibGUgdGFza3MgYW5kL29yCiBpZGxlIENQVXMsIHRoZSBzY2hlZHVsZXIgbWlnaHQgbm90IHNlYXJjaCBhbGwgQ1BVcyBpbiB0aGUgZG9tYWluCi1ldmVyeXRpbWUuICBJbiBmYWN0LCBpbiBzb21lIGFyY2hpdGVjdHVyZXMsIHRoZSBzZWFyY2hpbmcgcmFuZ2VzIG9uCitldmVyeSB0aW1lLiAgSW4gZmFjdCwgaW4gc29tZSBhcmNoaXRlY3R1cmVzLCB0aGUgc2VhcmNoaW5nIHJhbmdlcyBvbgogZXZlbnRzIGFyZSBsaW1pdGVkIGluIHRoZSBzYW1lIHNvY2tldCBvciBub2RlIHdoZXJlIHRoZSBDUFUgbG9jYXRlcywKLXdoaWxlIHRoZSBsb2FkIGJhbGFuY2Ugb24gdGljayBzZWFyY2hzIGFsbC4KK3doaWxlIHRoZSBsb2FkIGJhbGFuY2Ugb24gdGljayBzZWFyY2hlcyBhbGwuCiAKIEZvciBleGFtcGxlLCBhc3N1bWUgQ1BVIFogaXMgcmVsYXRpdmVseSBmYXIgZnJvbSBDUFUgWC4gIEV2ZW4gaWYgQ1BVIFoKIGlzIGlkbGUgd2hpbGUgQ1BVIFggYW5kIHRoZSBzaWJsaW5ncyBhcmUgYnVzeSwgc2NoZWR1bGVyIGNhbid0IG1pZ3JhdGUKQEAgLTYwMSw3ICs2MDEsNyBAQAogb2YgTVBPTF9CSU5EIG5vZGVzIGFyZSBzdGlsbCBhbGxvd2VkIGluIHRoZSBuZXcgY3B1c2V0LiAgSWYgdGhlIHRhc2sKIHdhcyB1c2luZyBNUE9MX0JJTkQgYW5kIG5vdyBub25lIG9mIGl0cyBNUE9MX0JJTkQgbm9kZXMgYXJlIGFsbG93ZWQKIGluIHRoZSBuZXcgY3B1c2V0LCB0aGVuIHRoZSB0YXNrIHdpbGwgYmUgZXNzZW50aWFsbHkgdHJlYXRlZCBhcyBpZiBpdAotd2FzIE1QT0xfQklORCBib3VuZCB0byB0aGUgbmV3IGNwdXNldCAoZXZlbiB0aG91Z2ggaXRzIG51bWEgcGxhY2VtZW50LAord2FzIE1QT0xfQklORCBib3VuZCB0byB0aGUgbmV3IGNwdXNldCAoZXZlbiB0aG91Z2ggaXRzIE5VTUEgcGxhY2VtZW50LAogYXMgcXVlcmllZCBieSBnZXRfbWVtcG9saWN5KCksIGRvZXNuJ3QgY2hhbmdlKS4gIElmIGEgdGFzayBpcyBtb3ZlZAogZnJvbSBvbmUgY3B1c2V0IHRvIGFub3RoZXIsIHRoZW4gdGhlIGtlcm5lbCB3aWxsIGFkanVzdCB0aGUgdGFza3MKIG1lbW9yeSBwbGFjZW1lbnQsIGFzIGFib3ZlLCB0aGUgbmV4dCB0aW1lIHRoYXQgdGhlIGtlcm5lbCBhdHRlbXB0cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2RldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2RldmljZXMudHh0CmluZGV4IDdjYzZlNmEuLjU3Y2E0YzggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9kZXZpY2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvZGV2aWNlcy50eHQKQEAgLTQyLDcgKzQyLDcgQEAKIG1vdmVtZW50IGFzIHBlb3BsZSBnZXQgc29tZSBleHBlcmllbmNlIHdpdGggdGhpcy4gIFdlIG1heSBqdXN0IHdhbnQKIHRvIHJlcXVpcmUgQ0FQX1NZU19BRE1JTiwgd2hpY2ggYXQgbGVhc3QgaXMgYSBzZXBhcmF0ZSBiaXQgZnJvbQogQ0FQX01LTk9ELiAgV2UgbWF5IHdhbnQgdG8ganVzdCByZWZ1c2UgbW92aW5nIHRvIGEgY2dyb3VwIHdoaWNoCi1pc24ndCBhIGRlc2NlbmRlbnQgb2YgdGhlIGN1cnJlbnQgb25lLiAgT3Igd2UgbWF5IHdhbnQgdG8gdXNlCitpc24ndCBhIGRlc2NlbmRhbnQgb2YgdGhlIGN1cnJlbnQgb25lLiAgT3Igd2UgbWF5IHdhbnQgdG8gdXNlCiBDQVBfTUFDX0FETUlOLCBzaW5jZSB3ZSByZWFsbHkgYXJlIHRyeWluZyB0byBsb2NrIGRvd24gcm9vdC4KIAogQ0FQX1NZU19BRE1JTiBpcyBuZWVkZWQgdG8gbW9kaWZ5IHRoZSB3aGl0ZWxpc3Qgb3IgbW92ZSBhbm90aGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtY2dfdGVzdC50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtY2dfdGVzdC50eHQKaW5kZXggNTIzYTljMS4uNzJkYjg5ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbWNnX3Rlc3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1jZ190ZXN0LnR4dApAQCAtMSw1ICsxLDUgQEAKIE1lbW9yeSBSZXNvdXJjZSBDb250cm9sbGVyKE1lbWNnKSAgSW1wbGVtZW50YXRpb24gTWVtby4KLUxhc3QgVXBkYXRlZDogMjAwOS8xLzE5CitMYXN0IFVwZGF0ZWQ6IDIwMDkvMS8yMAogQmFzZSBLZXJuZWwgVmVyc2lvbjogYmFzZWQgb24gMi42LjI5LXJjMi4KIAogQmVjYXVzZSBWTSBpcyBnZXR0aW5nIGNvbXBsZXggKG9uZSBvZiByZWFzb25zIGlzIG1lbWNnLi4uKSwgbWVtY2cncyBiZWhhdmlvcgpAQCAtMzU2LDcgKzM1NiwyNSBAQAogCShTaGVsbC1CKQogCSMgbW92ZSBhbGwgdGFza3MgaW4gL2Nncm91cC90ZXN0IHRvIC9jZ3JvdXAKIAkjIC9zYmluL3N3YXBvZmYgLWEKLQkjIHJtZGlyIC90ZXN0L2Nncm91cAorCSMgcm1kaXIgL2Nncm91cC90ZXN0CiAJIyBraWxsIG1hbGxvYyB0YXNrLgogCiAJT2YgY291cnNlLCB0bXBmcyB2LnMuIHN3YXBvZmYgdGVzdCBzaG91bGQgYmUgdGVzdGVkLCB0b28uCisKKyA5LjggT09NLUtpbGxlcgorCU91dC1vZi1tZW1vcnkgY2F1c2VkIGJ5IG1lbWNnJ3MgbGltaXQgd2lsbCBraWxsIHRhc2tzIHVuZGVyCisJdGhlIG1lbWNnLiBXaGVuIGhpZXJhcmNoeSBpcyB1c2VkLCBhIHRhc2sgdW5kZXIgaGllcmFyY2h5CisJd2lsbCBiZSBraWxsZWQgYnkgdGhlIGtlcm5lbC4KKwlJbiB0aGlzIGNhc2UsIHBhbmljX29uX29vbSBzaG91bGRuJ3QgYmUgaW52b2tlZCBhbmQgdGFza3MKKwlpbiBvdGhlciBncm91cHMgc2hvdWxkbid0IGJlIGtpbGxlZC4KKworCUl0J3Mgbm90IGRpZmZpY3VsdCB0byBjYXVzZSBPT00gdW5kZXIgbWVtY2cgYXMgZm9sbG93aW5nLgorCUNhc2UgQSkgd2hlbiB5b3UgY2FuIHN3YXBvZmYKKwkjc3dhcG9mZiAtYQorCSNlY2hvIDUwTSA+IC9tZW1vcnkubGltaXRfaW5fYnl0ZXMKKwlydW4gNTFNIG9mIG1hbGxvYworCisJQ2FzZSBCKSB3aGVuIHlvdSB1c2UgbWVtK3N3YXAgbGltaXRhdGlvbi4KKwkjZWNobyA1ME0gPiBtZW1vcnkubGltaXRfaW5fYnl0ZXMKKwkjZWNobyA1ME0gPiBtZW1vcnkubWVtc3cubGltaXRfaW5fYnl0ZXMKKwlydW4gNTFNIG9mIG1hbGxvYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dAppbmRleCBlMTUwMTk2Li5hOThhN2ZlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dApAQCAtMzAyLDcgKzMwMiw3IEBACiAJdW5ldmljdGFibGUJCS0gIyBvZiBwYWdlcyBjYW5ub3QgYmUgcmVjbGFpbWVkLihtbG9ja2VkIGV0YykKIAogCUJlbG93IGlzIGRlcGVuZCBvbiBDT05GSUdfREVCVUdfVk0uCi0JaW5hY3RpdmVfcmF0aW8JCS0gVk0gaW5lcm5hbCBwYXJhbWV0ZXIuIChzZWUgbW0vcGFnZV9hbGxvYy5jKQorCWluYWN0aXZlX3JhdGlvCQktIFZNIGludGVybmFsIHBhcmFtZXRlci4gKHNlZSBtbS9wYWdlX2FsbG9jLmMpCiAJcmVjZW50X3JvdGF0ZWRfYW5vbgktIFZNIGludGVybmFsIHBhcmFtZXRlci4gKHNlZSBtbS92bXNjYW4uYykKIAlyZWNlbnRfcm90YXRlZF9maWxlCS0gVk0gaW50ZXJuYWwgcGFyYW1ldGVyLiAoc2VlIG1tL3Ztc2Nhbi5jKQogCXJlY2VudF9zY2FubmVkX2Fub24gCS0gVk0gaW50ZXJuYWwgcGFyYW1ldGVyLiAoc2VlIG1tL3Ztc2Nhbi5jKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKaW5kZXggNjIyNTRkNC4uMzI3ZGUxNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CkBAIC0xLDcgKzEsNyBAQAogCiAJCSAgICBMSU5VWCBBTExPQ0FURUQgREVWSUNFUyAoMi42KyB2ZXJzaW9uKQogCi0JICAgICBNYWludGFpbmVkIGJ5IFRvcmJlbiBNYXRoaWFzZW4gPGRldmljZUBsYW5hbmEub3JnPgorCSAgICAgTWFpbnRhaW5lZCBieSBBbGFuIENveCA8ZGV2aWNlQGxhbmFuYS5vcmc+CiAKIAkJICAgICAgTGFzdCByZXZpc2VkOiAyOSBOb3ZlbWJlciAyMDA2CiAKQEAgLTY3LDYgKzY3LDExIEBACiBpbiAiYmF0Y2ggbW9kZSIsIHNvIHRoZXJlIGlzIGxpa2VseSBhZGRpdGlvbmFsIHJlZ2lzdHJhdGlvbnMgdGhhdAogaGF2ZW4ndCBiZWVuIGxpc3RlZCB5ZXQuCiAKK0ZvdXJ0aCwgcmVtZW1iZXIgdGhhdCBMaW51eCBub3cgaGFzIGV4dGVuc2l2ZSBzdXBwb3J0IGZvciBkeW5hbWljIGFsbG9jYXRpb24KK29mIGRldmljZSBudW1iZXJpbmcgYW5kIGNhbiB1c2Ugc3lzZnMgYW5kIHVkZXYgdG8gaGFuZGxlIHRoZSBuYW1pbmcgbmVlZHMuCitUaGVyZSBhcmUgc3RpbGwgc29tZSBleGNlcHRpb25zIGluIHRoZSBzZXJpYWwgYW5kIGJvb3QgZGV2aWNlIGFyZWEuIEJlZm9yZQorYXNraW5nIGZvciBhIGRldmljZSBudW1iZXIgbWFrZSBzdXJlIHlvdSBhY3R1YWxseSBuZWVkIG9uZS4KKwogRmluYWxseSwgc29tZXRpbWVzIEkgaGF2ZSB0byBwbGF5ICJuYW1lc3BhY2UgcG9saWNlLiIgIFBsZWFzZSBkb24ndCBiZQogb2ZmZW5kZWQuICBJIG9mdGVuIGdldCBzdWJtaXNzaW9ucyBmb3IgL2RldiBuYW1lcyB0aGF0IHdvdWxkIGJlIGJvdW5kCiB0byBjYXVzZSBjb25mbGljdHMgZG93biB0aGUgcm9hZC4gIEkgYW0gdHJ5aW5nIHRvIGF2b2lkIGdldHRpbmcgaW4gYQpAQCAtMTAxLDcgKzEwNiw3IEBACiAJCSAgMCA9IC9kZXYvcmFtMAkJRmlyc3QgUkFNIGRpc2sKIAkJICAxID0gL2Rldi9yYW0xCQlTZWNvbmQgUkFNIGRpc2sKIAkJICAgIC4uLgotCQkyNTAgPSAvZGV2L2luaXRyZAlJbml0aWFsIFJBTSBkaXNrIHsyLjZ9CisJCTI1MCA9IC9kZXYvaW5pdHJkCUluaXRpYWwgUkFNIGRpc2sKIAogCQlPbGRlciBrZXJuZWxzIGhhZCAvZGV2L3JhbWRpc2sgKDEsIDEpIGhlcmUuCiAJCS9kZXYvaW5pdHJkIHJlZmVycyB0byBhIFJBTSBkaXNrIHdoaWNoIHdhcyBwcmVsb2FkZWQKQEAgLTM0MCw3ICszNDUsNyBAQAogCQkgMTQgPSAvZGV2L3RvdWNoc2NyZWVuL3VjYjF4MDAgIFVDQiAxeDAwIHRvdWNoc2NyZWVuCiAJCSAxNSA9IC9kZXYvdG91Y2hzY3JlZW4vbWs3MTIJTUs3MTIgdG91Y2hzY3JlZW4KIAkJMTI4ID0gL2Rldi9iZWVwCQlGYW5jeSBiZWVwIGRldmljZQotCQkxMjkgPSAvZGV2L21vZHJlcQlLZXJuZWwgbW9kdWxlIGxvYWQgcmVxdWVzdCB7Mi42fQorCQkxMjkgPQogCQkxMzAgPSAvZGV2L3dhdGNoZG9nCVdhdGNoZG9nIHRpbWVyIHBvcnQKIAkJMTMxID0gL2Rldi90ZW1wZXJhdHVyZQlNYWNoaW5lIGludGVybmFsIHRlbXBlcmF0dXJlCiAJCTEzMiA9IC9kZXYvaHd0cmFwCUhhcmR3YXJlIGZhdWx0IHRyYXAKQEAgLTM1MCwxMCArMzU1LDEwIEBACiAJCTEzOSA9IC9kZXYvb3BlbnByb20JU1BBUkMgT3BlbkJvb3QgUFJPTQogCQkxNDAgPSAvZGV2L3JlbGF5OAlCZXJrc2hpcmUgUHJvZHVjdHMgT2N0YWwgcmVsYXkgY2FyZAogCQkxNDEgPSAvZGV2L3JlbGF5MTYJQmVya3NoaXJlIFByb2R1Y3RzIElTTy0xNiByZWxheSBjYXJkCi0JCTE0MiA9IC9kZXYvbXNyCQl4ODYgbW9kZWwtc3BlY2lmaWMgcmVnaXN0ZXJzIHsyLjZ9CisJCTE0MiA9CiAJCTE0MyA9IC9kZXYvcGNpY29uZglQQ0kgY29uZmlndXJhdGlvbiBzcGFjZQogCQkxNDQgPSAvZGV2L252cmFtCU5vbi12b2xhdGlsZSBjb25maWd1cmF0aW9uIFJBTQotCQkxNDUgPSAvZGV2L2hmbW9kZW0JU291bmRjYXJkIHNob3J0d2F2ZSBtb2RlbSBjb250cm9sIHsyLjZ9CisJCTE0NSA9IC9kZXYvaGZtb2RlbQlTb3VuZGNhcmQgc2hvcnR3YXZlIG1vZGVtIGNvbnRyb2wKIAkJMTQ2ID0gL2Rldi9ncmFwaGljcwlMaW51eC9TR0kgZ3JhcGhpY3MgZGV2aWNlCiAJCTE0NyA9IC9kZXYvb3BlbmdsCUxpbnV4L1NHSSBPcGVuR0wgcGlwZQogCQkxNDggPSAvZGV2L2dmeAkJTGludXgvU0dJIGdyYXBoaWNzIGVmZmVjdHMgZGV2aWNlCkBAIC00MzUsNiArNDQwLDkgQEAKIAkJMjI4ID0gL2Rldi9ocGV0CQlIUEVUIGRyaXZlcgogCQkyMjkgPSAvZGV2L2Z1c2UJCUZ1c2UgKHZpcnR1YWwgZmlsZXN5c3RlbSBpbiB1c2VyLXNwYWNlKQogCQkyMzAgPSAvZGV2L21pZGlzaGFyZQlNaWRpU2hhcmUgZHJpdmVyCisJCTIzMSA9IC9kZXYvc25hcHNob3QJU3lzdGVtIG1lbW9yeSBzbmFwc2hvdCBkZXZpY2UKKwkJMjMyID0gL2Rldi9rdm0JCUtlcm5lbC1iYXNlZCB2aXJ0dWFsIG1hY2hpbmUgKGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uIGV4dGVuc2lvbnMpCisJCTIzMyA9IC9kZXYva212aWV3CVZpZXctT1MgQSBwcm9jZXNzIHdpdGggYSB2aWV3CiAJCTI0MC0yNTQJCQlSZXNlcnZlZCBmb3IgbG9jYWwgdXNlCiAJCTI1NQkJCVJlc2VydmVkIGZvciBNSVNDX0RZTkFNSUNfTUlOT1IKIApAQCAtNDY2LDEwICs0NzQsNyBAQAogCQlUaGUgZGV2aWNlIG5hbWVzIHNwZWNpZmllZCBhcmUgcHJvcG9zZWQgLS0gaWYgdGhlcmUKIAkJYXJlICJzdGFuZGFyZCIgbmFtZXMgZm9yIHRoZXNlIGRldmljZXMsIHBsZWFzZSBsZXQgbWUga25vdy4KIAotIDEyIGJsb2NrCU1TQ0RFWCBDRC1ST00gY2FsbGJhY2sgc3VwcG9ydCB7Mi42fQotCQkgIDAgPSAvZGV2L2Rvc19jZDAJRmlyc3QgTVNDREVYIENELVJPTQotCQkgIDEgPSAvZGV2L2Rvc19jZDEJU2Vjb25kIE1TQ0RFWCBDRC1ST00KLQkJICAgIC4uLgorIDEyIGJsb2NrCiAKICAxMyBjaGFyCUlucHV0IGNvcmUKIAkJICAwID0gL2Rldi9pbnB1dC9qczAJRmlyc3Qgam95c3RpY2sKQEAgLTQ5OCw3ICs1MDMsNyBAQAogCQkgIDIgPSAvZGV2L21pZGkwMAlGaXJzdCBNSURJIHBvcnQKIAkJICAzID0gL2Rldi9kc3AJCURpZ2l0YWwgYXVkaW8KIAkJICA0ID0gL2Rldi9hdWRpbwlTdW4tY29tcGF0aWJsZSBkaWdpdGFsIGF1ZGlvCi0JCSAgNiA9IC9kZXYvc25kc3RhdAlTb3VuZCBjYXJkIHN0YXR1cyBpbmZvcm1hdGlvbiB7Mi42fQorCQkgIDYgPQogCQkgIDcgPSAvZGV2L2F1ZGlvY3RsCVNQQVJDIGF1ZGlvIGNvbnRyb2wgZGV2aWNlCiAJCSAgOCA9IC9kZXYvc2VxdWVuY2VyMglTZXF1ZW5jZXIgLS0gYWx0ZXJuYXRlIGRldmljZQogCQkgMTYgPSAvZGV2L21peGVyMQlTZWNvbmQgc291bmRjYXJkIG1peGVyIGNvbnRyb2wKQEAgLTUxMCwxNCArNTE1LDcgQEAKIAkJIDM0ID0gL2Rldi9taWRpMDIJVGhpcmQgTUlESSBwb3J0CiAJCSA1MCA9IC9kZXYvbWlkaTAzCUZvdXJ0aCBNSURJIHBvcnQKIAotIDE0IGJsb2NrCUJJT1MgaGFyZGRyaXZlIGNhbGxiYWNrIHN1cHBvcnQgezIuNn0KLQkJICAwID0gL2Rldi9kb3NfaGRhCUZpcnN0IEJJT1MgaGFyZGRyaXZlIHdob2xlIGRpc2sKLQkJIDY0ID0gL2Rldi9kb3NfaGRiCVNlY29uZCBCSU9TIGhhcmRkcml2ZSB3aG9sZSBkaXNrCi0JCTEyOCA9IC9kZXYvZG9zX2hkYwlUaGlyZCBCSU9TIGhhcmRkcml2ZSB3aG9sZSBkaXNrCi0JCTE5MiA9IC9kZXYvZG9zX2hkZAlGb3VydGggQklPUyBoYXJkZHJpdmUgd2hvbGUgZGlzawotCi0JCVBhcnRpdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIElERSBkaXNrcwotCQkoc2VlIG1ham9yIG51bWJlciAzKS4KKyAxNCBibG9jawogCiAgMTUgY2hhcglKb3lzdGljawogCQkgIDAgPSAvZGV2L2pzMAkJRmlyc3QgYW5hbG9nIGpveXN0aWNrCkBAIC01MzUsMTQgKzUzMywxNCBAQAogIDE2IGJsb2NrCUdvbGRTdGFyIENELVJPTQogCQkgIDAgPSAvZGV2L2dzY2QJCUdvbGRTdGFyIENELVJPTQogCi0gMTcgY2hhcglDaGFzZSBzZXJpYWwgY2FyZAorIDE3IGNoYXIJT0JTT0xFVEUgKHdhcyBDaGFzZSBzZXJpYWwgY2FyZCkKIAkJICAwID0gL2Rldi90dHlIMAlGaXJzdCBDaGFzZSBwb3J0CiAJCSAgMSA9IC9kZXYvdHR5SDEJU2Vjb25kIENoYXNlIHBvcnQKIAkJICAgIC4uLgogIDE3IGJsb2NrCU9wdGljcyBTdG9yYWdlIENELVJPTQogCQkgIDAgPSAvZGV2L29wdGNkCU9wdGljcyBTdG9yYWdlIENELVJPTQogCi0gMTggY2hhcglDaGFzZSBzZXJpYWwgY2FyZCAtIGFsdGVybmF0ZSBkZXZpY2VzCisgMTggY2hhcglPQlNPTEVURSAod2FzIENoYXNlIHNlcmlhbCBjYXJkIC0gYWx0ZXJuYXRlIGRldmljZXMpCiAJCSAgMCA9IC9kZXYvY3VoMAkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUgwCiAJCSAgMSA9IC9kZXYvY3VoMQkJQ2FsbG91dCBkZXZpY2UgZm9yIHR0eUgxCiAJCSAgICAuLi4KQEAgLTY0NCw4ICs2NDIsNyBAQAogCQkgIDIgPSAvZGV2L3NicGNkMglQYW5hc29uaWMgQ0QtUk9NIGNvbnRyb2xsZXIgMCB1bml0IDIKIAkJICAzID0gL2Rldi9zYnBjZDMJUGFuYXNvbmljIENELVJPTSBjb250cm9sbGVyIDAgdW5pdCAzCiAKLSAyNiBjaGFyCVF1YW50YSBXaW5WaXNpb24gZnJhbWUgZ3JhYmJlciB7Mi42fQotCQkgIDAgPSAvZGV2L3d2aXNmZ3JhYglRdWFudGEgV2luVmlzaW9uIGZyYW1lIGdyYWJiZXIKKyAyNiBjaGFyCiAKICAyNiBibG9jawlTZWNvbmQgTWF0c3VzaGl0YSAoUGFuYXNvbmljL1NvdW5kQmxhc3RlcikgQ0QtUk9NCiAJCSAgMCA9IC9kZXYvc2JwY2Q0CVBhbmFzb25pYyBDRC1ST00gY29udHJvbGxlciAxIHVuaXQgMApAQCAtODcyLDcgKzg2OSw3IEBACiAJCWFuZCAidXNlciBsZXZlbCBwYWNrZXQgSS9PLiIgIFRoaXMgYm9hcmQgaXMgYWxzbwogCQlhY2Nlc3NpYmxlIGFzIGEgc3RhbmRhcmQgbmV0d29ya2luZyAiZXRoIiBkZXZpY2UuCiAKLSAzOCBibG9jawlSZXNlcnZlZCBmb3IgTGludXgvQVArCisgMzggYmxvY2sJT0JTT0xFVEUgKHdhcyBMaW51eC9BUCspCiAKICAzOSBjaGFyCU1MLTE2UCBleHBlcmltZW50YWwgSS9PIGJvYXJkCiAJCSAgMCA9IC9kZXYvbWwxNnBhLWEwCUZpcnN0IGNhcmQsIGZpcnN0IGFuYWxvZyBjaGFubmVsCkBAIC04OTIsMjkgKzg4OSwxNiBAQAogCQkgNTAgPSAvZGV2L21sMTZwYi1jMQlTZWNvbmQgY2FyZCwgc2Vjb25kIGNvdW50ZXIvdGltZXIKIAkJIDUxID0gL2Rldi9tbDE2cGItYzIJU2Vjb25kIGNhcmQsIHRoaXJkIGNvdW50ZXIvdGltZXIKIAkJICAgICAgLi4uCi0gMzkgYmxvY2sJUmVzZXJ2ZWQgZm9yIExpbnV4L0FQKworIDM5IGJsb2NrCiAKLSA0MCBjaGFyCU1hdHJveCBNZXRlb3IgZnJhbWUgZ3JhYmJlciB7Mi42fQotCQkgIDAgPSAvZGV2L21tZXRmZ3JhYglNYXRyb3ggTWV0ZW9yIGZyYW1lIGdyYWJiZXIKKyA0MCBjaGFyCiAKLSA0MCBibG9jawlTeXF1ZXN0IEVaMTM1IHBhcmFsbGVsIHBvcnQgcmVtb3ZhYmxlIGRyaXZlCi0JCSAgMCA9IC9kZXYvZXphCQlQYXJhbGxlbCBFWjEzNSBkcml2ZSwgd2hvbGUgZGlzawotCi0JCVRoaXMgZGV2aWNlIGlzIG9ic29sZXRlIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYQotCQlmdXR1cmUgdmVyc2lvbiBvZiBMaW51eC4gIEl0IGhhcyBiZWVuIHJlcGxhY2VkIHdpdGgKLQkJdGhlIHBhcmFsbGVsIHBvcnQgSURFIGRpc2sgZHJpdmVyIGF0IG1ham9yIG51bWJlciA0NS4KLQkJUGFydGl0aW9ucyBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgSURFIGRpc2tzCi0JCShzZWUgbWFqb3IgbnVtYmVyIDMpLgorIDQwIGJsb2NrCiAKICA0MSBjaGFyCVlldCBBbm90aGVyIE1pY3JvIE1vbml0b3IKIAkJICAwID0gL2Rldi95YW1tCQlZZXQgQW5vdGhlciBNaWNybyBNb25pdG9yCiAKLSA0MSBibG9jawlNaWNyb1NvbHV0aW9ucyBCYWNrUGFjayBwYXJhbGxlbCBwb3J0IENELVJPTQotCQkgIDAgPSAvZGV2L2JwY2QJCUJhY2tQYWNrIENELVJPTQotCi0JCVRoaXMgZGV2aWNlIGlzIG9ic29sZXRlIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYQotCQlmdXR1cmUgdmVyc2lvbiBvZiBMaW51eC4gIEl0IGhhcyBiZWVuIHJlcGxhY2VkIHdpdGgKLQkJdGhlIHBhcmFsbGVsIHBvcnQgQVRBUEkgQ0QtUk9NIGRyaXZlciBhdCBtYWpvciBudW1iZXIgNDYuCisgNDEgYmxvY2sKIAogIDQyIGNoYXIJRGVtby9zYW1wbGUgdXNlCiAKQEAgLTE2ODEsMTMgKzE2NjUsNyBAQAogCQlkaXNrcyAoc2VlIG1ham9yIG51bWJlciAzKSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KIAkJcGFydGl0aW9ucyBpcyAxNS4KIAotIDkzIGNoYXIJSUJNIFNtYXJ0IENhcHR1cmUgQ2FyZCBmcmFtZSBncmFiYmVyIHsyLjZ9Ci0JCSAgMCA9IC9kZXYvaXNjYzAJRmlyc3QgU21hcnQgQ2FwdHVyZSBDYXJkCi0JCSAgMSA9IC9kZXYvaXNjYzEJU2Vjb25kIFNtYXJ0IENhcHR1cmUgQ2FyZAotCQkgICAgLi4uCi0JCTEyOCA9IC9kZXYvaXNjY2N0bDAJRmlyc3QgU21hcnQgQ2FwdHVyZSBDYXJkIGNvbnRyb2wKLQkJMTI5ID0gL2Rldi9pc2NjY3RsMQlTZWNvbmQgU21hcnQgQ2FwdHVyZSBDYXJkIGNvbnRyb2wKLQkJICAgIC4uLgorIDkzIGNoYXIKIAogIDkzIGJsb2NrCU5BTkQgRmxhc2ggVHJhbnNsYXRpb24gTGF5ZXIgZmlsZXN5c3RlbQogCQkgIDAgPSAvZGV2L25mdGxhCUZpcnN0IE5GVEwgbGF5ZXIKQEAgLTE2OTUsMTAgKzE2NzMsNyBAQAogCQkgICAgLi4uCiAJCTI0MCA9IC9kZXYvbmZ0bHAJMTZ0aCBOVEZMIGxheWVyCiAKLSA5NCBjaGFyCW1pcm9WSURFTyBEQzEwLzMwIGNhcHR1cmUvcGxheWJhY2sgZGV2aWNlIHsyLjZ9Ci0JCSAgMCA9IC9kZXYvZGN4eDAJRmlyc3QgY2FwdHVyZSBjYXJkCi0JCSAgMSA9IC9kZXYvZGN4eDEJU2Vjb25kIGNhcHR1cmUgY2FyZAotCQkgICAgLi4uCisgOTQgY2hhcgogCiAgOTQgYmxvY2sJSUJNIFMvMzkwIERBU0QgYmxvY2sgc3RvcmFnZQogICAgIAkJICAwID0gL2Rldi9kYXNkYSBGaXJzdCBEQVNEIGRldmljZSwgbWFqb3IKQEAgLTE3OTEsMTEgKzE3NjYsNyBAQAogCQkgICAgLi4uCiAJCSAxNSA9IC9kZXYvYW1pcmFpZC9hcj9wMTUgMTV0aCBwYXJ0aXRpb24KIAotMTAyIGNoYXIJUGhpbGlwcyBTQUE1MjQ5IFRlbGV0ZXh0IHNpZ25hbCBkZWNvZGVyIHsyLjZ9Ci0JCSAgMCA9IC9kZXYvdGxrMAkJRmlyc3QgVGVsZXRleHQgZGVjb2RlcgotCQkgIDEgPSAvZGV2L3RsazEJCVNlY29uZCBUZWxldGV4dCBkZWNvZGVyCi0JCSAgMiA9IC9kZXYvdGxrMgkJVGhpcmQgVGVsZXRleHQgZGVjb2RlcgotCQkgIDMgPSAvZGV2L3RsazMJCUZvdXJ0aCBUZWxldGV4dCBkZWNvZGVyCisxMDIgY2hhcgogCiAxMDIgYmxvY2sJQ29tcHJlc3NlZCBibG9jayBkZXZpY2UKIAkJICAwID0gL2Rldi9jYmQvYQlGaXJzdCBjb21wcmVzc2VkIGJsb2NrIGRldmljZSwgd2hvbGUgZGV2aWNlCkBAIC0xOTE2LDEwICsxODg3LDcgQEAKIAkJREFDOTYwIChzZWUgbWFqb3IgbnVtYmVyIDQ4KSBleGNlcHQgdGhhdCB0aGUgbGltaXQgb24KIAkJcGFydGl0aW9ucyBpcyAxNS4KIAotMTExIGNoYXIJUGhpbGlwcyBTQUE3MTQ2LWJhc2VkIGF1ZGlvL3ZpZGVvIGNhcmQgezIuNn0KLQkJICAwID0gL2Rldi9hdjAJCUZpcnN0IEEvViBjYXJkCi0JCSAgMSA9IC9kZXYvYXYxCQlTZWNvbmQgQS9WIGNhcmQKLQkJICAgIC4uLgorMTExIGNoYXIKIAogMTExIGJsb2NrCUNvbXBhcSBOZXh0IEdlbmVyYXRpb24gRHJpdmUgQXJyYXksIGVpZ2h0aCBjb250cm9sbGVyCiAJCSAgMCA9IC9kZXYvY2Npc3MvYzdkMAlGaXJzdCBsb2dpY2FsIGRyaXZlLCB3aG9sZSBkaXNrCkBAIC0yMDc5LDggKzIwNDcsOCBAQAogCQkgICAgLi4uCiAKIDExOSBjaGFyCVZNd2FyZSB2aXJ0dWFsIG5ldHdvcmsgY29udHJvbAotCQkgIDAgPSAvZGV2L3ZtbmV0MAkxc3QgdmlydHVhbCBuZXR3b3JrCi0JCSAgMSA9IC9kZXYvdm1uZXQxCTJuZCB2aXJ0dWFsIG5ldHdvcmsKKwkJICAwID0gL2Rldi92bmV0MAkxc3QgdmlydHVhbCBuZXR3b3JrCisJCSAgMSA9IC9kZXYvdm5ldDEJMm5kIHZpcnR1YWwgbmV0d29yawogCQkgICAgLi4uCiAKIDEyMC0xMjcgY2hhcglMT0NBTC9FWFBFUklNRU5UQUwgVVNFCkBAIC0yNDUwLDcgKzI0MTgsNyBAQAogCQkgIDIgPSAvZGV2L3Jhdy9yYXcyCVNlY29uZCByYXcgSS9PIGRldmljZQogCQkgICAgLi4uCiAKLTE2MyBjaGFyCVVOQVNTSUdORUQgKHdhcyBSYWRpbyBUZWNoIEJJTS1YWFgtUlMyMzIgcmFkaW8gbW9kZW0gLSBzZWUgNTEpCisxNjMgY2hhcgogCiAxNjQgY2hhcglDaGFzZSBSZXNlYXJjaCBBVC9QQ0ktRmFzdCBzZXJpYWwgY2FyZAogCQkgIDAgPSAvZGV2L3R0eUNIMAlBVC9QQ0ktRmFzdCBib2FyZCAwLCBwb3J0IDAKQEAgLTI1NDIsNiArMjUxMCwxMiBAQAogCQkgIDEgPSAvZGV2L2NsYW52aTEJU2Vjb25kIGNMQU4gYWRhcHRlcgogCQkgICAgLi4uCiAKKzE3OSBibG9jayAgICAgICBNTUMgYmxvY2sgZGV2aWNlcworCQkgIDAgPSAvZGV2L21tY2JsazAgICAgICBGaXJzdCBTRC9NTUMgY2FyZAorCQkgIDEgPSAvZGV2L21tY2JsazBwMSAgICBGaXJzdCBwYXJ0aXRpb24gb24gZmlyc3QgTU1DIGNhcmQKKwkJICA4ID0gL2Rldi9tbWNibGsxICAgICAgU2Vjb25kIFNEL01NQyBjYXJkCisJCSAgICAuLi4KKwogMTc5IGNoYXIJQ0N1YmUgRFZYQ2hpcC1iYXNlZCBQQ0kgcHJvZHVjdHMKIAkJICAwID0gL2Rldi9kdnhpcnEwCUZpcnN0IERWWCBkZXZpY2UKIAkJICAxID0gL2Rldi9kdnhpcnExCVNlY29uZCBEVlggZGV2aWNlCkBAIC0yNTYwLDYgKzI1MzQsOSBAQAogCQkgOTYgPSAvZGV2L3VzYi9oaWRkZXYwCTFzdCBVU0IgSElEIGRldmljZQogCQkgICAgLi4uCiAJCTExMSA9IC9kZXYvdXNiL2hpZGRldjE1CTE2dGggVVNCIEhJRCBkZXZpY2UKKwkJMTEyID0gL2Rldi91c2IvYXVlcjAJMXN0IGF1ZXJzd2FsZCBJU0ROIGRldmljZQorCQkgICAgLi4uCisJCTEyNyA9IC9kZXYvdXNiL2F1ZXIxNQkxNnRoIGF1ZXJzd2FsZCBJU0ROIGRldmljZQogCQkxMjggPSAvZGV2L3VzYi9icmx2Z3IwCUZpcnN0IEJyYWlsbGUgVm95YWdlciBkZXZpY2UKIAkJICAgIC4uLgogCQkxMzEgPSAvZGV2L3VzYi9icmx2Z3IzCUZvdXJ0aCBCcmFpbGxlIFZveWFnZXIgZGV2aWNlCkBAIC0yODEwLDYgKzI3ODcsMTYgQEAKIAkJICAgIC4uLgogCQkgMTkwID0gL2Rldi90dHlVTDMJCVhpbGlueCB1YXJ0bGl0ZSAtIHBvcnQgMwogCQkgMTkxID0gL2Rldi94dmMwCQlYZW4gdmlydHVhbCBjb25zb2xlIC0gcG9ydCAwCisJCSAxOTIgPSAvZGV2L3R0eVBaMAkJcG1hY196aWxvZyAtIHBvcnQgMAorCQkgICAgLi4uCisJCSAxOTUgPSAvZGV2L3R0eVBaMwkJcG1hY196aWxvZyAtIHBvcnQgMworCQkgMTk2ID0gL2Rldi90dHlUWDAJCVRYMzkvNDkgc2VyaWFsIHBvcnQgMAorCQkgICAgLi4uCisJCSAyMDQgPSAvZGV2L3R0eVRYNwkJVFgzOS80OSBzZXJpYWwgcG9ydCA3CisJCSAyMDUgPSAvZGV2L3R0eVNDMAkJU0MyNnh4IHNlcmlhbCBwb3J0IDAKKwkJIDIwNiA9IC9kZXYvdHR5U0MxCQlTQzI2eHggc2VyaWFsIHBvcnQgMQorCQkgMjA3ID0gL2Rldi90dHlTQzIJCVNDMjZ4eCBzZXJpYWwgcG9ydCAyCisJCSAyMDggPSAvZGV2L3R0eVNDMwkJU0MyNnh4IHNlcmlhbCBwb3J0IDMKIAogMjA1IGNoYXIJTG93LWRlbnNpdHkgc2VyaWFsIHBvcnRzIChhbHRlcm5hdGUgZGV2aWNlKQogCQkgIDAgPSAvZGV2L2N1bHUwCQlDYWxsb3V0IGRldmljZSBmb3IgdHR5TFUwCkBAIC0zMTQ1LDYgKzMxMzIsMTQgQEAKIAkJICAxID0gL2Rldi9ibG9ja3JvbTEJU2Vjb25kIFJPTSBjYXJkJ3MgdHJhbnNsYXRpb24gbGF5ZXIgaW50ZXJmYWNlCiAJCSAgLi4uCiAKKzI1OSBibG9jawlCbG9jayBFeHRlbmRlZCBNYWpvcgorCQkgIFVzZWQgZHluYW1pY2FsbHkgdG8gaG9sZCBhZGRpdGlvbmFsIHBhcnRpdGlvbiBtaW5vcgorCQkgIG51bWJlcnMgYW5kIGFsbG93IGxhcmdlIG51bWJlcnMgb2YgcGFydGl0aW9ucyBwZXIgZGV2aWNlCisKKzI1OSBjaGFyCUZQR0EgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzCisJCSAgMCA9IC9kZXYvaWNhcDAJRmlyc3QgWGlsaW54IGludGVybmFsIGNvbmZpZ3VyYXRpb24KKwkJICAxID0gL2Rldi9pY2FwMQlTZWNvbmQgWGlsaW54IGludGVybmFsIGNvbmZpZ3VyYXRpb24KKwogMjYwIGNoYXIJT1NEIChPYmplY3QtYmFzZWQtZGV2aWNlKSBTQ1NJIERldmljZQogCQkgIDAgPSAvZGV2L29zZDAJCUZpcnN0IE9TRCBEZXZpY2UKIAkJICAxID0gL2Rldi9vc2QxCQlTZWNvbmQgT1NEIERldmljZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vZmIvMDAtSU5ERVgKaW5kZXggY2FhYmJkMy4uYTYxOGZkOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiLzAwLUlOREVYCkBAIC0xMSw4ICsxMSw2IEBACiAJLSBpbmZvIG9uIHRoZSBBVEkgUmFnZTEyOCBmcmFtZSBidWZmZXIgZHJpdmVyLgogY2lycnVzZmIudHh0CiAJLSBpbmZvIG9uIHRoZSBkcml2ZXIgZm9yIENpcnJ1cyBMb2dpYyBjaGlwc2V0cy4KLWN5YmxhZmIvCi0JLSBkaXJlY3Rvcnkgd2l0aCBkb2N1bWVudGF0aW9uIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIGN5YmxhZmIgZHJpdmVyLgogZGVmZXJyZWRfaW8udHh0CiAJLSBhbiBpbnRyb2R1Y3Rpb24gdG8gZGVmZXJyZWQgSU8uCiBmYmNvbi50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi9idWdzIGIvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL2J1Z3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0NDNhNmQuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL2J1Z3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1CdWdzCi09PT09Ci0KLUkgY3VycmVudGx5IGRvbid0IGtub3cgb2YgYW55IGJ1Zy4gUGxlYXNlIGRvIHNlbmQgcmVwb3J0cyB0bzoKLSAtIGxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotIC0gS251dF9QZXRlcnNlbkB0LW9ubGluZS5kZS4KLQotCi1VbnRlc3RlZCBmZWF0dXJlcwotPT09PT09PT09PT09PT09PT0KLQotQWxsIExDRCBzdHVmZiBpcyB1bnRlc3RlZC4gSWYgaXQgd29ya2VkIGluIHRyaWRlbnRmYiwgaXQgc2hvdWxkIHdvcmsgaW4KLWN5YmxhZmIuIFBsZWFzZSB0ZXN0IGFuZCByZXBvcnQgdGhlIHJlc3VsdHMgdG8gS251dF9QZXRlcnNlbkB0LW9ubGluZS5kZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi9jcmVkaXRzIGIvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL2NyZWRpdHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYjNiNDQuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL2NyZWRpdHMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLVRoYW5rcyB0bwotPT09PT09PT09Ci0gICAqIAlBbGFuIEhvdXJpaGFuZSwgZm9yIHdyaXRpbmcgdGhlIFggdHJpZGVudCBkcml2ZXIKLSAgICoJSmFuaSBNb25vc2VzLCBmb3Igd3JpdGluZyB0aGUgdHJpZGVudGZiIGRyaXZlcgotICAgKglBbnRvbmlubyBBLiBEYXBsYXMsIGZvciByZXZpZXcgb2YgdGhlIGZpcnN0IHB1Ymxpc2hlZAotCXZlcnNpb24gb2YgY3libGFmYiBhbmQgc29tZSBjb2RlCi0gICAqCUpvY2hlbiBIZWluLCBmb3IgdGVzdGluZyBhbmQgYSBoZWxwZnVsbCBidWcgcmVwb3J0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvZG9jdW1lbnRhdGlvbiBiL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi9kb2N1bWVudGF0aW9uCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjFhYWMwLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi9kb2N1bWVudGF0aW9uCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotQXZhaWxhYmxlIERvY3VtZW50YXRpb24KLT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUFwb2xsbyBQTEUgMTMzIENoaXBzZXQgVlQ4NjAxQSBOb3J0aCBCcmlkZ2UgRGF0YXNoZWV0LCBSZXYuIDEuODIsIE9jdG9iZXIgMjIsCi0yMDAxLCBhdmFpbGFibGUgZnJvbSBWSUE6Ci0KLQlodHRwOi8vd3d3LnZpYXZwc2QuY29tL3Byb2R1Y3QvNi8xNS9EUzg2MDFBMTgyLnBkZgotCi1UaGUgZGF0YXNoZWV0IGlzIGluY29tcGxldGUsIHNvbWUgcmVnaXN0ZXJzIHRoYXQgbmVlZCB0byBiZSBwcm9ncmFtbWVkIGFyZSBub3QKLWV4cGxhaW5lZCBhdCBhbGwgYW5kIGltcG9ydGFudCBiaXRzIGFyZSBsaXN0ZWQgYXMgInJlc2VydmVkIi4gQnV0IHlvdSByZWFsbHkKLW5lZWQgdGhlIGRhdGFzaGVldCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlLiAgInAuIHh4eCIgY29tbWVudHMgcmVmZXIgdG8gcGFnZQotbnVtYmVycyBvZiB0aGlzIGRvY3VtZW50LgotCi1YRnJlZS9YT3JnIGRyaXZlcnMgYXJlIGF2YWlsYWJsZSBhbmQgb2YgZ29vZCBxdWFsaXR5LCBsb29raW5nIGF0IHRoZSBjb2RlCi10aGVyZSBpcyBhIGdvb2QgaWRlYSBpZiB0aGUgZGF0YXNoZWV0IGRvZXMgbm90IHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uCi1vciBpZiB0aGUgZGF0YXNoZWV0IHNlZW1zIHRvIGJlIHdyb25nLgotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvZmIubW9kZXMgYi9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvZmIubW9kZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlMGU1MjIuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL2ZiLm1vZGVzCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLSMKLSMgICBTYW1wbGUgZmIubW9kZXMgZmlsZQotIwotIwlQcm92aWRlcyBhbiBpbmNvbXBsZXRlIGxpc3Qgb2Ygd29ya2luZyBtb2RlcyBmb3IKLSMJdGhlIGN5YmVyYmxhZGUvaTEgZ3JhcGhpY3MgY29yZS4KLSMKLSMJVGhlIHZhbHVlIDQyOTQ5NjcyNTYgaXMgdXNlZCBpbnN0ZWFkIG9mIC00MC4gT2YgY291cnNlLCAtNDAgaXMgbm90Ci0jCWEgcmVhbGx5IHJlYXNvbmFibGUgdmFsdWUsIGJ1dCBjaGlwIGRlc2lnbiBkb2VzIG5vdCBhbHdheXMgZm9sbG93Ci0jCWxvZ2ljLiBCZWxpZXZlIG1lLCBpdCdzIG9rLCBhbmQgaXQncyB0aGUgd2F5IHRoZSBCSU9TIGRvZXMgaXQuCi0jCi0jCWZic2V0IHJlcXVpcmVzIDQyOTQ5NjcyNTYgaW4gZmIubW9kZXMgYW5kIC00MCBhcyBhbiBhcmd1bWVudCB0bwotIwl0aGUgLXQgcGFyYW1ldGVyLiBUaGF0J3MgYWxzbyBub3QgdG9vIHJlYXNvbmFibGUsIGFuZCBpdCBtaWdodCBjaGFuZ2UKLSMJaW4gdGhlIGZ1dHVyZSBvciBtaWdodCBldmVuIGJlIGRpZmZlcnQgZm9yIHlvdXIgY3VycmVudCB2ZXJzaW9uLgotIwotCi1tb2RlICI2NDB4NDgwLTUwIgotICAgIGdlb21ldHJ5IDY0MCA0ODAgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDQ3NjE5IDQyOTQ5NjcyNTYgMjQgMTcgMCAyMTYgMwotZW5kbW9kZQotCi1tb2RlICI2NDB4NDgwLTYwIgotICAgIGdlb21ldHJ5IDY0MCA0ODAgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDM5NjgyIDQyOTQ5NjcyNTYgMjQgMTcgMCAyMTYgMwotZW5kbW9kZQotCi1tb2RlICI2NDB4NDgwLTcwIgotICAgIGdlb21ldHJ5IDY0MCA0ODAgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDM0MDEzIDQyOTQ5NjcyNTYgMjQgMTcgMCAyMTYgMwotZW5kbW9kZQotCi1tb2RlICI2NDB4NDgwLTcyIgotICAgIGdlb21ldHJ5IDY0MCA0ODAgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDMzMDY4IDQyOTQ5NjcyNTYgMjQgMTcgMCAyMTYgMwotZW5kbW9kZQotCi1tb2RlICI2NDB4NDgwLTc1IgotICAgIGdlb21ldHJ5IDY0MCA0ODAgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDMxNzQ2IDQyOTQ5NjcyNTYgMjQgMTcgMCAyMTYgMwotZW5kbW9kZQotCi1tb2RlICI2NDB4NDgwLTgwIgotICAgIGdlb21ldHJ5IDY0MCA0ODAgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDI5NzYxIDQyOTQ5NjcyNTYgMjQgMTcgMCAyMTYgMwotZW5kbW9kZQotCi1tb2RlICI2NDB4NDgwLTg1IgotICAgIGdlb21ldHJ5IDY0MCA0ODAgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDI4MDExIDQyOTQ5NjcyNTYgMjQgMTcgMCAyMTYgMwotZW5kbW9kZQotCi1tb2RlICI4MDB4NjAwLTUwIgotICAgIGdlb21ldHJ5IDgwMCA2MDAgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDMwMzAzIDk2IDI0IDE0IDAgMTM2IDExCi1lbmRtb2RlCi0KLW1vZGUgIjgwMHg2MDAtNjAiCi0gICAgZ2VvbWV0cnkgODAwIDYwMCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgMjUyNTIgOTYgMjQgMTQgMCAxMzYgMTEKLWVuZG1vZGUKLQotbW9kZSAiODAweDYwMC03MCIKLSAgICBnZW9tZXRyeSA4MDAgNjAwIDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAyMTY0NSA5NiAyNCAxNCAwIDEzNiAxMQotZW5kbW9kZQotCi1tb2RlICI4MDB4NjAwLTcyIgotICAgIGdlb21ldHJ5IDgwMCA2MDAgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDIxMDQzIDk2IDI0IDE0IDAgMTM2IDExCi1lbmRtb2RlCi0KLW1vZGUgIjgwMHg2MDAtNzUiCi0gICAgZ2VvbWV0cnkgODAwIDYwMCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgMjAyMDIgOTYgMjQgMTQgMCAxMzYgMTEKLWVuZG1vZGUKLQotbW9kZSAiODAweDYwMC04MCIKLSAgICBnZW9tZXRyeSA4MDAgNjAwIDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAxODkzOSA5NiAyNCAxNCAwIDEzNiAxMQotZW5kbW9kZQotCi1tb2RlICI4MDB4NjAwLTg1IgotICAgIGdlb21ldHJ5IDgwMCA2MDAgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDE3ODI1IDk2IDI0IDE0IDAgMTM2IDExCi1lbmRtb2RlCi0KLW1vZGUgIjEwMjR4NzY4LTUwIgotICAgIGdlb21ldHJ5IDEwMjQgNzY4IDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAxOTA1NCAxNDQgMjQgMjkgMCAxMjAgMwotZW5kbW9kZQotCi1tb2RlICIxMDI0eDc2OC02MCIKLSAgICBnZW9tZXRyeSAxMDI0IDc2OCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgMTU4ODAgMTQ0IDI0IDI5IDAgMTIwIDMKLWVuZG1vZGUKLQotbW9kZSAiMTAyNHg3NjgtNzAiCi0gICAgZ2VvbWV0cnkgMTAyNCA3NjggMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDEzNjEwIDE0NCAyNCAyOSAwIDEyMCAzCi1lbmRtb2RlCi0KLW1vZGUgIjEwMjR4NzY4LTcyIgotICAgIGdlb21ldHJ5IDEwMjQgNzY4IDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAxMzIzMiAxNDQgMjQgMjkgMCAxMjAgMwotZW5kbW9kZQotCi1tb2RlICIxMDI0eDc2OC03NSIKLSAgICBnZW9tZXRyeSAxMDI0IDc2OCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgMTI3MDMgMTQ0IDI0IDI5IDAgMTIwIDMKLWVuZG1vZGUKLQotbW9kZSAiMTAyNHg3NjgtODAiCi0gICAgZ2VvbWV0cnkgMTAyNCA3NjggMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDExOTEwIDE0NCAyNCAyOSAwIDEyMCAzCi1lbmRtb2RlCi0KLW1vZGUgIjEwMjR4NzY4LTg1IgotICAgIGdlb21ldHJ5IDEwMjQgNzY4IDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAxMTIwOSAxNDQgMjQgMjkgMCAxMjAgMwotZW5kbW9kZQotCi1tb2RlICIxMjgweDEwMjQtNTAiCi0gICAgZ2VvbWV0cnkgMTI4MCAxMDI0IDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyAxMTExNCAyMzIgMTYgMzkgMCAxNjAgMwotZW5kbW9kZQotCi1tb2RlICIxMjgweDEwMjQtNjAiCi0gICAgZ2VvbWV0cnkgMTI4MCAxMDI0IDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyA5MjYyIDIzMiAxNiAzOSAwIDE2MCAzCi1lbmRtb2RlCi0KLW1vZGUgIjEyODB4MTAyNC03MCIKLSAgICBnZW9tZXRyeSAxMjgwIDEwMjQgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDc5MzkgMjMyIDE2IDM5IDAgMTYwIDMKLWVuZG1vZGUKLQotbW9kZSAiMTI4MHgxMDI0LTcyIgotICAgIGdlb21ldHJ5IDEyODAgMTAyNCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgNzcxOSAyMzIgMTYgMzkgMCAxNjAgMwotZW5kbW9kZQotCi1tb2RlICIxMjgweDEwMjQtNzUiCi0gICAgZ2VvbWV0cnkgMTI4MCAxMDI0IDIwNDggNDA5NiA4Ci0gICAgdGltaW5ncyA3NDEwIDIzMiAxNiAzOSAwIDE2MCAzCi1lbmRtb2RlCi0KLW1vZGUgIjEyODB4MTAyNC04MCIKLSAgICBnZW9tZXRyeSAxMjgwIDEwMjQgMjA0OCA0MDk2IDgKLSAgICB0aW1pbmdzIDY5NDYgMjMyIDE2IDM5IDAgMTYwIDMKLWVuZG1vZGUKLQotbW9kZSAiMTI4MHgxMDI0LTg1IgotICAgIGdlb21ldHJ5IDEyODAgMTAyNCAyMDQ4IDQwOTYgOAotICAgIHRpbWluZ3MgNjUzOCAyMzIgMTYgMzkgMCAxNjAgMwotZW5kbW9kZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL3BlcmZvcm1hbmNlIGIvRG9jdW1lbnRhdGlvbi9mYi9jeWJsYWZiL3BlcmZvcm1hbmNlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDE1ZDVkLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi9wZXJmb3JtYW5jZQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLVNwZWVkCi09PT09PQotCi1DeUJsYUZCIGlzIG11Y2ggZmFzdGVyIHRoYW4gdHJpZGVudGZiIGFuZCB2ZXNhZmIuIENvbXBhcmUgdGhlIHBlcmZvcm1hbmNlIGRhdGEKLWZvciBtb2RlIDEyODB4MTAyNC1bOCwxNiwzMl1ANjEgSHouCi0KLVRlc3QgMTogQ2F0IGEgZmlsZSB3aXRoIDIwMDAgbGluZXMgb2YgMCBjaGFyYWN0ZXJzLgotVGVzdCAyOiBDYXQgYSBmaWxlIHdpdGggMjAwMCBsaW5lcyBvZiA4MCBjaGFyYWN0ZXJzLgotVGVzdCAzOiBDYXQgYSBmaWxlIHdpdGggMjAwMCBsaW5lcyBvZiAxNjAgY2hhcmFjdGVycy4KLQotQWxsIHZhbHVlcyBzaG93IHN5c3RlbSB0aW1lIHVzZSBpbiBzZWNvbmRzLCBrZXJuZWwgMi42LjEyIHdhcyB1c2VkIGZvcgotdGhlIG1lYXN1cmVtZW50cy4gMi42LjEzIGlzIGEgYml0IHNsb3dlciwgMi42LjE0IGhvcGVmdWxseSB3aWxsIGluY2x1ZGUgYQotcGF0Y2ggdGhhdCBzcGVlZHMgdXAga2VybmVsIGJpdGJsaXR0aW5nIGEgbG90ICggPiAyMCUpLgotCi0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18CSAgICB8CQkJbm90IGFjY2VsZXJhdGVkIAkJICB8Ci18IFRSSURFTlRGQiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi18IG9mIDIuNi4xMiB8CSAgIDggYnBwICAgICAgfCAgICAgMTYgYnBwCXwgICAgIDMyIGJwcAkgIHwKLXwJICAgIHwgbm95cGFuIHwJIHlwYW4gfCBub3lwYW4gfCAgIHlwYW4gfCBub3lwYW4gfCAgIHlwYW4gfAotKy0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKwotfCAgICBUZXN0IDEgfAk0LjMxIHwJIDQuMzMgfCAgIDYuMDUgfCAgMTIuODEgfCAgLS0tLSAgfCAgLS0tLSAgfAotfCAgICBUZXN0IDIgfCAgNjcuOTQgfAkgNS40NCB8IDEyMy4xNiB8ICAxNC43OSB8ICAtLS0tICB8ICAtLS0tICB8Ci18ICAgIFRlc3QgMyB8IDEzMS4zNiB8CSA2LjU1IHwgMjQwLjEyIHwgIDE2Ljc2IHwgIC0tLS0gIHwgIC0tLS0gIHwKLSstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSsKLXwgIENvbW1lbnRzIHwJCSAgICAgIHwgCQl8IGNvbXBsZXRlbHkgYnJvLSB8Ci18CSAgICB8CQkgICAgICB8IAkJfCBrZW4sIG1vbml0b3IJICB8Ci18CSAgICB8CQkgICAgICB8IAkJfCBzd2l0Y2hlcyBvZmYJICB8Ci0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0KLQotKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfAkgICAgfAkJCSAgYWNjZWxlcmF0ZWQJCQkgIHwKLXwgVFJJREVOVEZCICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLXwgb2YgMi42LjEyIHwJICAgOCBicHAgICAgICB8ICAgICAxNiBicHAJfCAgICAgMzIgYnBwCSAgfAotfAkgICAgfCBub3lwYW4gfAkgeXBhbiB8IG5veXBhbiB8ICAgeXBhbiB8IG5veXBhbiB8ICAgeXBhbiB8Ci0rLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi18ICAgIFRlc3QgMSB8ICAtLS0tICB8CS0tLS0gIHwgIDIwLjYyIHwgICAxLjIyIHwgIC0tLS0gIHwgIC0tLS0gIHwKLXwgICAgVGVzdCAyIHwgIC0tLS0gIHwJLS0tLSAgfCAgMjIuNjEgfCAgIDMuMTkgfCAgLS0tLSAgfCAgLS0tLSAgfAotfCAgICBUZXN0IDMgfCAgLS0tLSAgfAktLS0tICB8ICAyNC41OSB8ICAgNS4xNiB8ICAtLS0tICB8ICAtLS0tICB8Ci0rLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi18ICBDb21tZW50cyB8IGJyb2tlbiwgd3JpdGluZyB8IGJyb2tlbiwgb2sgb25seSB8IGNvbXBsZXRlbHkgYnJvLSB8Ci18CSAgICB8IHRvIHdyb25nIHBsYWNlcyB8IGlmIGJnY29sb3IgaXMJfCBrZW4sIG1vbml0b3IJICB8Ci18CSAgICB8IG9uIHNjcmVlbiArIGJ1ZyB8IGJsYWNrLCBidWcgaW4JfCBzd2l0Y2hlcyBvZmYJICB8Ci18CSAgICB8IGluIGZpbGxyZWN0KCkgICB8IGZpbGxyZWN0KCkJfAkJICB8Ci0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0KLQotKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfAkgICAgfAkJCW5vdCBhY2NlbGVyYXRlZCAJCSAgfAotfCAgIFZFU0FGQiAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwotfCBvZiAyLjYuMTIgfAkgICA4IGJwcCAgICAgIHwgICAgIDE2IGJwcAl8ICAgICAzMiBicHAJICB8Ci18CSAgICB8IG5veXBhbiB8CSB5cGFuIHwgbm95cGFuIHwgICB5cGFuIHwgbm95cGFuIHwgICB5cGFuIHwKLSstLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSsKLXwgICAgVGVzdCAxIHwJNC4yNiB8CSAzLjc2IHwgICA1Ljk5IHwgICA3LjIzIHwgIC0tLS0gIHwgIC0tLS0gIHwKLXwgICAgVGVzdCAyIHwgIDY1LjY1IHwJIDQuODkgfCAxMjAuODggfCAgIDkuMDggfCAgLS0tLSAgfCAgLS0tLSAgfAotfCAgICBUZXN0IDMgfCAxMjYuOTEgfAkgNS45NCB8IDIzNS43NyB8ICAxMS4wMyB8ICAtLS0tICB8ICAtLS0tICB8Ci0rLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi18ICBDb21tZW50cyB8IHZnYT0weDMwNyAgICAgICB8IHZnYT0weDMxYQl8IHZnYT0weDMxYiBub3QgICB8Ci18CSAgICB8IGZoPTgwa0h6CSAgICAgIHwgZmg9ODBrSHoJfCBzdXBwb3J0ZWQgYnkJICB8Ci18CSAgICB8IGZ2PTc1a0h6CSAgICAgIHwgZnY9NzVrSHoJfCB2aWRlbyBCSU9TIGFuZCAgfAotfAkgICAgfAkJICAgICAgfCAJCXwgaGFyZHdhcmUJICB8Ci0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0KLQotKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfAkgICAgfAkJCSAgYWNjZWxlcmF0ZWQJCQkgIHwKLXwgIENZQkxBRkIgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSsKLXwJICAgIHwJICAgOCBicHAgICAgICB8ICAgICAxNiBicHAJfCAgICAgMzIgYnBwCSAgfAotfAkgICAgfCBub3lwYW4gfAkgeXBhbiB8IG5veXBhbiB8ICAgeXBhbiB8IG5veXBhbiB8ICAgeXBhbiB8Ci0rLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi18ICAgIFRlc3QgMSB8CTguMDIgfAkgMC4yMyB8ICAxOS4wNCB8ICAgMC42MSB8ICA1Ny4xMiB8ICAgMi43NCB8Ci18ICAgIFRlc3QgMiB8CTguMzggfAkgMC41NSB8ICAxOS4zOSB8ICAgMC45MiB8ICA1Ny41NCB8ICAgMy4xMyB8Ci18ICAgIFRlc3QgMyB8CTguNzMgfAkgMC44NiB8ICAxOS43NCB8ICAgMS4yNCB8ICA1Ny45NSB8ICAgMy41MSB8Ci0rLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rCi18ICBDb21tZW50cyB8CQkgICAgICB8IAkJfAkJICB8Ci18CSAgICB8CQkgICAgICB8IAkJfAkJICB8Ci18CSAgICB8CQkgICAgICB8IAkJfAkJICB8Ci18CSAgICB8CQkgICAgICB8IAkJfAkJICB8Ci0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvdG9kbyBiL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi90b2RvCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWY2ZDBlLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi90b2RvCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotVE9ETyAvIE1pc3NpbmcgZmVhdHVyZXMKLT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVZlcmlmeSBMQ0Qgc3R1ZmYJCSJzdHJldGNoIiBhbmQgImNlbnRlciIgb3B0aW9ucyBhcmUKLQkJCQljb21wbGV0ZWx5IHVudGVzdGVkIC4uLiB0aGlzIGNvZGUgbmVlZHMgdG8gYmUKLQkJCQl2ZXJpZmllZC4gQXMgSSBkb24ndCBoYXZlIGFjY2VzcyB0byBzdWNoCi0JCQkJaGFyZHdhcmUsIHBsZWFzZSBjb250YWN0IG1lIGlmIHlvdSBhcmUKLQkJCQl3aWxsaW5nIHJ1biBzb21lIHRlc3RzLgotCi1JbnRlcmxhY2VkIHZpZGVvIG1vZGVzCQlUaGUgcmVhc29uIHRoYXQgaW50ZXJsZWF2ZWQKLQkJCQltb2RlcyBhcmUgZGlzYWJsZWQgaXMgdGhhdCBJIGRvIG5vdCBrbm93Ci0JCQkJdGhlIG1lYW5pbmcgb2YgdGhlIHZlcnRpY2FsIGludGVybGFjZQotCQkJCXBhcmFtZXRlci4gQWxzbyB0aGUgZGF0YXNoZWV0IG1lbnRpb25zIGEKLQkJCQliaXQgZDggb2YgYSBob3Jpem9udGFsIGludGVybGFjZSBwYXJhbWV0ZXIsCi0JCQkJYnV0IG5vd2hlcmUgdGhlIGxvd2VyIDggYml0cy4gUGxlYXNlIGhlbHAKLQkJCQlpZiB5b3UgY2FuLgotCi1sb3ctcmVzIGRvdWJsZSBzY2FuIG1vZGVzCVdobyBuZWVkcyBpdD8KLQotYWNjZWxlcmF0ZWQgY29sb3IgYmxpdHRpbmcJV2hvIG5lZWRzIGl0PyBUaGUgY29uc29sZSBkcml2ZXIgZG9lcyB1c2UgY29sb3IKLQkJCQlibGl0dGluZyBmb3Igbm90aGluZyBidXQgZHJhd2luZyB0aGUgcGVuZ3VpbmUsCi0JCQkJZXZlcnl0aGluZyBlbHNlIGlzIGRvbmUgdXNpbmcgY29sb3IgZXhwYW5kaW5nCi0JCQkJYmxpdHRpbmcgb2YgMWJwcCBjaGFyYWN0ZXIgYml0bWFwcy4KLQotaW9jdGxzCQkJCVdobyBuZWVkcyBpdD8KLQotVFYtb3V0CQkJCVdpbGwgYmUgZG9uZSBsYXRlci4gVXNlICJ2Z2E9ICIgYXQgYm9vdCB0aW1lCi0JCQkJdG8gc2V0IGEgc3VpdGFibGUgdmlkZW8gbW9kZS4KLQotPz8/CQkJCUZlZWwgZnJlZSB0byBjb250YWN0IG1lIGlmIHlvdSBoYXZlIGFueQotCQkJCWZlYXR1cmUgcmVxdWVzdHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi91c2FnZSBiL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi91c2FnZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM5YmIzZC4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvdXNhZ2UKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotQ3lCbGFGQiBpcyBhIGZyYW1lYnVmZmVyIGRyaXZlciBmb3IgdGhlIEN5YmVyYmxhZGUvaTEgZ3JhcGhpY3MgY29yZSBpbnRlZ3JhdGVkCi1pbnRvIHRoZSBWSUEgQXBvbGxvIFBMRTEzMyAoYWthIHZ0ODYwMSkgc291dGggYnJpZGdlLiBJdCBpcyBkZXZlbG9wZWQgYW5kCi10ZXN0ZWQgdXNpbmcgYSBWSUEgRVBJQSA1MDAwIGJvYXJkLgotCi1DeWJsYWZiIC0gY29tcGlsZWQgaW50byB0aGUga2VybmVsIG9yIGFzIGEgbW9kdWxlPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotWW91IG1pZ2h0IGNvbXBpbGUgY3libGFmYiBlaXRoZXIgYXMgYSBtb2R1bGUgb3IgY29tcGlsZSBpdCBwZXJtYW5lbnRseSBpbnRvIHRoZQota2VybmVsLgotCi1Vbmxlc3MgeW91IGhhdmUgYSByZWFsIHJlYXNvbiB0byBkbyBzbyB5b3Ugc2hvdWxkIG5vdCBjb21waWxlIGJvdGggdmVzYWZiIGFuZAotY3libGFmYiBwZXJtYW5lbnRseSBpbnRvIHRoZSBrZXJuZWwuIEl0J3MgcG9zc2libGUgYW5kIGl0IGhlbHBzIGR1cmluZyB0aGUKLWRldmVsb3BlbWVudCBjeWNsZSwgYnV0IGl0J3MgdXNlbGVzcyBhbmQgd2lsbCBhdCBsZWFzdCBibG9jayBzb21lIG90aGVyd2lzZQotdXNlZnVsbCBtZW1vcnkgZm9yIG9yZGluYXJ5IHVzZXJzLgotCi1TZWxlY3RpbmcgTW9kZXMKLT09PT09PT09PT09PT09PQotCi0JU3RhcnR1cCBNb2RlCi0JPT09PT09PT09PT09Ci0KLQlGaXJzdCBvZiBhbGwsIHlvdSBtaWdodCB1c2UgdGhlICJ2Z2E9Pz8/IiBib290IHBhcmFtZXRlciBhcyBpdCBpcwotCWRvY3VtZW50ZWQgaW4gdmVzYWZiLnR4dCBhbmQgc3ZnYS50eHQuIEN5YmxhZmIgd2lsbCBkZXRlY3QgdGhlIHZpZGVvCi0JbW9kZSBzZWxlY3RlZCBhbmQgd2lsbCB1c2UgdGhlIGdlb21ldHJ5IGFuZCB0aW1pbmdzIGZvdW5kIGJ5Ci0JaW5zcGVjdGluZyB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzLgotCi0JCXZpZGVvPWN5YmxhZmIgdmdhPTB4MzE3Ci0KLQlBbHRlcm5hdGl2ZWx5IHlvdSBtaWdodCB1c2UgYSBjb21iaW5hdGlvbiBvZiB0aGUgbW9kZSwgcmVmIGFuZCBicHAKLQlwYXJhbWV0ZXJzLiBJZiB5b3UgY29tcGlsZWQgdGhlIGRyaXZlciBpbnRvIHRoZSBrZXJuZWwsIGFkZCBzb21ldGhpbmcKLQlsaWtlIHRoaXMgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmU6Ci0KLQkJdmlkZW89Y3libGFmYjoxMjgweDEwMjQsYnBwPTE2LHJlZj01MCAuLi4KLQotCUlmIHlvdSBjb21waWxlZCB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCB0aGUgc2FtZSBtb2RlIHdvdWxkIGJlCi0Jc2VsZWN0ZWQgYnkgdGhlIGZvbGxvd2luZyBjb21tYW5kOgotCi0JCW1vZHByb2JlIGN5YmxhZmIgbW9kZT0xMjgweDEwMjQgYnBwPTE2IHJlZj01MCAuLi4KLQotCU5vbmUgb2YgdGhlIG1vZGVzIHBvc3NpYmxlIHRvIHNlbGVjdCBhcyBzdGFydHVwIG1vZGVzIGFyZSBhZmZlY3RlZCBieQotCXRoZSBwcm9ibGVtcyBkZXNjcmliZWQgYXQgdGhlIGVuZCBvZiB0aGUgbmV4dCBzdWJzZWN0aW9uLgotCi0JRm9yIGFsbCBzdGFydHVwIG1vZGVzIGN5YmxhZmIgY2hvb3NlcyBhIHZpcnR1YWwgeCByZXNvbHV0aW9uIG9mIDIwNDgsCi0JdGhlIG9ubHkgZXhjZXB0aW9uIGlzIG1vZGUgMTI4MHgxMDI0IGluIGNvbWJpbmF0aW9uIHdpdGggMzIgYnBwLiBUaGlzCi0JYWxsb3dzIHl3cmFwIHNjcm9sbGluZyBmb3IgYWxsIHRob3NlIG1vZGVzIGlmIHJvdGF0aW9uIGlzIDAgb3IgMiwgYW5kCi0JYWxzbyBmYXN0IHNjcm9sbGluZyBpZiByb3RhdGlvbiBpcyAxIG9yIDMuIFRoZSBkZWZhdWx0IHZpcnR1YWwgeSByZXNvLQotCWx1dGlvbiBpcyA0MDk2IGZvciBicHAgPT0gOCwgMjA0OCBmb3IgYnBwPT0xNiBhbmQgMTAyNCBmb3IgYnBwID09IDMyLAotCWFnYWluIHdpdGggdGhlIG9ubHkgZXhjZXB0aW9uIG9mIDEyODB4MTAyNCBhdCAzMiBicHAuCi0KLQlQbGVhc2UgZG8gc2V0IHlvdXIgdmlkZW8gbWVtb3J5IHNpemUgdG8gOCBNYiBpbiB0aGUgQmlvcyBzZXR1cC4gT3RoZXIKLQl2YWx1ZXMgd2lsbCB3b3JrLCBidXQgcGVyZm9ybWFjZSBpcyBkZWNyZWFzZWQgZm9yIGEgbG90IG9mIG1vZGVzLgotCi0JTW9kZSBjaGFuZ2VzIHVzaW5nIGZic2V0Ci0JPT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQlZb3UgbWlnaHQgdXNlIGZic2V0IHRvIGNoYW5nZSB0aGUgdmlkZW8gbW9kZSwgc2VlICJtYW4gZmJzZXQiLiBDeWJsYWZiCi0JZ2VuZXJhbGx5IGRvZXMgYXNzdW1lIHRoYXQgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLiBCdXQgaXQgZG9lcwotCXNvbWUgY2hlY2tzLCBlc3BlY2lhbGx5IHRob3NlIHRoYXQgYXJlIG5lZWRlZCB0byBwcmV2ZW50IHlvdSBmcm9tCi0JZGFtYWdpbmcgeW91ciBoYXJkd2FyZS4KLQotCQktIG9ubHkgOCwgMTYsIDI0IGFuZCAzMiBicHAgdmlkZW8gbW9kZXMgYXJlIGFjY2VwdGVkCi0JCS0gaW50ZXJsYWNlZCB2aWRlbyBtb2RlcyBhcmUgbm90IGFjY2VwdGVkCi0JCS0gZG91YmxlIHNjYW4gdmlkZW8gbW9kZXMgYXJlIG5vdCBhY2NlcHRlZAotCQktIGlmIGEgZmxhdCBwYW5lbCBpcyBmb3VuZCwgY3libGFmYiBkb2VzIG5vdCBhbGxvdyB5b3UKLQkJICB0byBwcm9ncmFtIGEgcmVzb2x1dGlvbiBoaWdoZXIgdGhhbiB0aGUgcGh5c2ljYWwKLQkJICByZXNvbHV0aW9uIG9mIHRoZSBmbGF0IHBhbmVsIG1vbml0b3IKLQkJLSBjeWJsYWZiIGRvZXMgbm90IGFsbG93IHZjbGsgdG8gZXhjZWVkIDIzMCBNSHouIEFzIDMyIGJwcAotCQkgIGFuZCAoY3VycmVudGx5KSAyNCBiaXQgbW9kZXMgdXNlIGEgZG91YmxlZCB2Y2xrIGludGVybmFsbHksCi0JCSAgdGhlIGRvdGNsb2NrIGxpbWl0IGFzIHNlZW4gYnkgZmJzZXQgaXMgMTE1IE1IeiBmb3IgdGhvc2UKLQkJICBtb2RlcyBhbmQgMjMwIE1IeiBmb3IgOCBhbmQgMTYgYnBwIG1vZGVzLgotCQktIGN5YmxhZmIgd2lsbCBhbGxvdyB5b3UgdG8gc2VsZWN0IHZlcnkgaGlnaCByZXNvbHV0aW9ucyBhcwotCQkgIGxvbmcgYXMgdGhlIGhhcmR3YXJlIGNhbiBiZSBwcm9ncmFtbWVkIHRvIHRoZXNlIG1vZGVzLiBUaGUKLQkJICBkb2N1bWVudGVkIGxpbWl0IDE2MDB4MTIwMCBpcyBub3QgZW5mb3JjZWQsIGJ1dCBkb24ndCBleHBlY3QKLQkJICBwZXJmZWN0IHNpZ25hbCBxdWFsaXR5LgotCi0JQW55IHJlcXVlc3QgdGhhdCB2aW9sYXRlcyB0aGUgcnVsZXMgZ2l2ZW4gYWJvdmUgd2lsbCBiZSBlaXRoZXIgY2hhbmdlZAotCXRvIHNvbWV0aGluZyB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgb3IgYW4gZXJyb3IgdmFsdWUgd2lsbCBiZSByZXR1cm5lZC4KLQotCUlmIHlvdSBwcm9ncmFtIGEgdmlydHVhbCB5IHJlc29sdXRpb24gaGlnaGVyIHRoYW4gdGhlIGhhcmR3YXJlIGxpbWl0LAotCWN5YmxhZmIgd2lsbCBzaWxlbnRseSBkZWNyZWFzZSB0aGF0IHZhbHVlIHRvIHRoZSBoaWdoZXN0IHBvc3NpYmxlCi0JdmFsdWUuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGEgdmlydHVhbCB4IHJlc29sdXRpb24gdGhhdCBpcyBub3QKLQlzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiBDeWJsYWZiIHRyaWVzIHRvIGFkYXB0IHZ5cmVzIGZpcnN0IGJlY2F1c2UKLQl2eHJlcyBkZWNpZGVzIGlmIHl3cmFwIHNjcm9sbGluZyBpcyBwb3NzaWJsZSBvciBub3QuCi0KLQlBdHRlbXB0cyB0byBkaXNhYmxlIGFjY2VsZXJhdGlvbiBhcmUgaWdub3JlZCwgSSBiZWxpZXZlIHRoYXQgdGhpcyBpcwotCXNhZmUuCi0KLQlTb21lIHZpZGVvIG1vZGVzIHRoYXQgc2hvdWxkIHdvcmsgZG8gbm90IHdvcmsgYXMgZXhwZWN0ZWQuIElmIHlvdSB1c2UKLQl0aGUgc3RhbmRhcmQgZmIubW9kZXMsIGZic2V0IDY0MHg0ODAtNjAgd2lsbCBwcm9ncmFtIHRoYXQgbW9kZSwgYnV0Ci0JeW91IHdpbGwgc2VlIGEgdmVydGljYWwgYXJlYSwgYWJvdXQgdHdvIGNoYXJhY3RlcnMgd2lkZSwgd2l0aCBvbmx5Ci0JbXVjaCBkYXJrZXIgY2hhcmFjdGVycyB0aGFuIHRoZSBvdGhlciBjaGFyYWN0ZXJzIG9uIHRoZSBzY3JlZW4uCi0JQ3libGFmYiBkb2VzIGFsbG93IHRoYXQgbW9kZSB0byBiZSBzZXQsIGFzIGl0IGRvZXMgbm90IHZpb2xhdGUgdGhlCi0Jb2ZmaWNpYWwgc3BlY2lmaWNhdGlvbnMuIEl0IHdvdWxkIG5lZWQgYSBsb3Qgb2YgY29kZSB0byByZWxpYWJseSBzb3J0Ci0Jb3V0IGFsbCBpbnZhbGlkIG1vZGVzLCBwbGF5aW5nIGFyb3VuZCB3aXRoIHRoZSBtYXJnaW4gdmFsdWVzIHdpbGwKLQlnaXZlIGEgdmFsaWQgbW9kZSBxdWlja2x5LiBBbmQgaWYgY3libGFmYiB3b3VsZCBkZXRlY3Qgc3VjaCBhbiBpbnZhbGlkCi0JbW9kZSwgc2hvdWxkIGl0IHNpbGVudGx5IGFsdGVyIHRoZSByZXF1ZXN0ZWQgdmFsdWVzIG9yIHNob3VsZCBpdAotCXJlcG9ydCBhbiBlcnJvcj8gQm90aCBvcHRpb25zIGhhdmUgc29tZSBwcm9zIGFuZCBjb25zLiBBcyBzdGF0ZWQKLQlhYm92ZSwgbm9uZSBvZiB0aGUgc3RhcnR1cCBtb2RlcyBhcmUgYWZmZWN0ZWQsIGFuZCBpZiB5b3Ugc2V0Ci0JdmVyYm9zaXR5IHRvIDEgb3IgaGlnaGVyLCBjeWJsYWZiIHdpbGwgcHJpbnQgdGhlIGZic2V0IGNvbW1hbmQgdGhhdAotCXdvdWxkIGJlIG5lZWRlZCB0byBwcm9ncmFtIHRoYXQgbW9kZSB1c2luZyBmYnNldC4KLQotCi1PdGhlciBQYXJhbWV0ZXJzCi09PT09PT09PT09PT09PT09Ci0KLQotY3J0CQlkb24ndCBhdXRvZGV0ZWN0LCBhc3N1bWUgbW9uaXRvciBjb25uZWN0ZWQgdG8KLQkJc3RhbmRhcmQgVkdBIGNvbm5lY3RvcgotCi1mcAkJZG9uJ3QgYXV0b2RldGVjdCwgYXNzdW1lIGZsYXQgcGFuZWwgZGlzcGxheQotCQljb25uZWN0ZWQgdG8gZmxhdCBwYW5lbCBtb25pdG9yIGludGVyZmFjZQotCi1uYXRpdmV4IAlpbmZvcm0gZHJpdmVyIGFib3V0IG5hdGl2ZSB4IHJlc29sdXRpb24gb2YKLQkJZmxhdCBwYW5lbCBtb25pdG9yIGNvbm5lY3RlZCB0byBzcGVjaWFsCi0JCWludGVyZmFjZSAoc2hvdWxkIGJlIGF1dG9kZXRlY3RlZCkKLQotc3RyZXRjaCAJc3RyZXRjaCBpbWFnZSB0byBhZGFwdCBsb3cgcmVzb2x1dGlvbiBtb2RlcyB0bwotCQloaWdlciByZXNvbHV0aW9ucyBvZiBmbGF0IHBhbmVsIG1vbml0b3JzCi0JCWNvbm5lY3RlZCB0byBzcGVjaWFsIGludGVyZmFjZQotCi1jZW50ZXIJCWNlbnRlciBpbWFnZSB0byBhZGFwdCBsb3cgcmVzb2x1dGlvbiBtb2RlcyB0bwotCQloaWdlciByZXNvbHV0aW9ucyBvZiBmbGF0IHBhbmVsIG1vbml0b3JzCi0JCWNvbm5lY3RlZCB0byBzcGVjaWFsIGludGVyZmFjZQotCi1tZW1zaXplIAl1c2UgaWYgYXV0b2RldGVjdGVkIG1lbXNpemUgaXMgd3JvbmcgLi4uCi0JCXNob3VsZCBuZXZlciBiZSBuZWNlc3NhcnkKLQotbm9wY2lyciAJZGlzYWJsZSBQQ0kgcmVhZCByZXRyeQotbm9wY2l3ciAJZGlzYWJsZSBQQ0kgd3JpdGUgcmV0cnkKLW5vcGNpcmIgCWRpc2FibGUgUENJIHJlYWQgYnVyc3RzCi1ub3BjaXdiIAlkaXNhYmxlIFBDSSB3cml0ZSBidXJzdHMKLQotYnBwCQlicHAgZm9yIHNwZWNpZmllZCBtb2RlcwotCQl2YWxpZCB2YWx1ZXM6IDggfHwgMTYgfHwgMjQgfHwgMzIKLQotcmVmCQlyZWZyZXNoIHJhdGUgZm9yIHNwZWNpZmllZCBtb2RlCi0JCXZhbGlkIHZhbHVlczogNTAgPD0gcmVmIDw9IDg1Ci0KLW1vZGUJCTY0MHg0ODAgb3IgODAweDYwMCBvciAxMDI0eDc2OCBvciAxMjgweDEwMjQKLQkJaWYgbm90IHNwZWNpZmllZCwgdGhlIHN0YXJ0dXAgbW9kZSB3aWxsIGJlIGRldGVjdGVkCi0JCWFuZCB1c2VkLCBzbyB5b3UgbWlnaHQgYWxzbyB1c2UgdGhlIHZnYT0/Pz8gcGFyYW1ldGVyCi0JCWRlc2NyaWJlZCBpbiB2ZXNhZmIudHh0LiBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSBtb2RlLAotCQlicHAgYW5kIHJlZiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkLgotCi12ZXJib3NpdHkJMCBpcyB0aGUgZGVmYXVsdCwgaW5jcmVhc2UgdG8gYXQgbGVhc3QgMiBmb3IgZXZlcnkKLQkJYnVnIHJlcG9ydCEKLQotRGV2ZWxvcG1lbnQgaGludHMKLT09PT09PT09PT09PT09PT09Ci0KLUl0J3MgbXVjaCBmYXN0ZXIgZG8gY29tcGlsZSBhIG1vZHVsZSBhbmQgdG8gbG9hZCB0aGUgbmV3IHZlcnNpb24gYWZ0ZXIKLXVubG9hZGluZyB0aGUgb2xkIG1vZHVsZSB0aGFuIHRvIGNvbXBpbGUgYSBuZXcga2VybmVsIGFuZCB0byByZWJvb3QuIFNvIGlmIHlvdQotdHJ5IHRvIHdvcmsgb24gY3libGFmYiwgaXQgbWlnaHQgYmUgYSBnb29kIGlkZWEgdG8gdXNlIGN5YmxhZmIgYXMgYSBtb2R1bGUuCi1JbiByZWFsIGxpZmUsIGZhc3Qgb2Z0ZW4gbWVhbnMgZGFuZ2Vyb3VzLCBhbmQgdGhhdCdzIGFsc28gdGhlIGNhc2UgaGVyZS4gSWYKLXlvdSBpbnRyb2R1Y2UgYSBzZXJpb3VzIGJ1ZyB3aGVuIGN5YmxhZmIgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB0aGUKLWtlcm5lbCB3aWxsIGxvY2sgb3Igb29wcyB3aXRoIGEgaGlnaCBwcm9iYWJpbGl0eSBiZWZvcmUgdGhlIGZpbGUgc3lzdGVtIGlzCi1tb3VudGVkLCBhbmQgdGhlIGRhbmdlciBmb3IgeW91ciBkYXRhIGlzIGxvdy4gSWYgeW91IGxvYWQgYSBicm9rZW4gb3duIHZlcnNpb24KLW9mIGN5YmxhZmIgb24gYSBydW5uaW5nIHN5c3RlbSwgdGhlIGRhbmdlciBmb3IgdGhlIGludGVncml0eSBvZiB0aGUgZmlsZQotc3lzdGVtIGlzIG11Y2ggaGlnaGVyIGFzIHlvdSBtaWdodCBuZWVkIGEgaGFyZCByZXNldCBhZnRlcndhcmRzLiBEZWNpZGUKLXlvdXJzZWxmLgotCi1Nb2R1bGUgdW5sb2FkaW5nLCB0aGUgdmZiIG1ldGhvZAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSWYgeW91IHdhbnQgdG8gdW5sb2FkL3JlbG9hZCBjeWJsYWZiIHVzaW5nIHRoZSB2aXJ0dWFsIGZyYW1lYnVmZmVyLCB5b3UgbmVlZAotdG8gZW5hYmxlIHZmYiBzdXBwb3J0IGluIHRoZSBrZXJuZWwgZmlyc3QuIEFmdGVyIHRoYXQsIGxvYWQgdGhlIG1vZHVsZXMgYXMKLXNob3duIGJlbG93OgotCi0JbW9kcHJvYmUgdmZiIHZmYl9lbmFibGU9MQotCW1vZHByb2JlIGZiY29uCi0JbW9kcHJvYmUgY3libGFmYgotCWZic2V0IC1mYiAvZGV2L2ZiMSAxMjgweDEwMjQtNjAgLXZ5cmVzIDI2NjIKLQljb24yZmIgL2Rldi9mYjEgL2Rldi90dHkxCi0JLi4uCi0KLUlmIHlvdSBub3cgbWFkZSBzb21lIGNoYW5nZXMgdG8gY3libGFmYiBhbmQgd2FudCB0byByZWxvYWQgaXQsIHlvdSBtaWdodCBkbyBpdAotYXMgc2hvdyBiZWxvdzoKLQotCWNvbjJmYiAvZGV2L2ZiMCAvZGV2L3R0eTEKLQkuLi4KLQlybW1vZCBjeWJsYWZiCi0JbW9kcHJvYmUgY3libGFmYgotCWNvbjJmYiAvZGV2L2ZiMSAvZGV2L3R0eTEKLQkuLi4KLQotT2YgY291cnNlLCB5b3UgbWlnaHQgY2hvb3NlIGFub3RoZXIgbW9kZSwgYW5kIG1vc3QgY2VydGFpbmx5IHlvdSBhbHNvIHdhbnQgdG8KLW1hcCBzb21lIG90aGVyIC9kZXYvdHR5KiB0byB0aGUgcmVhbCBmcmFtZWJ1ZmZlciBkZXZpY2UuIFlvdSBtaWdodCBhbHNvIGNob29zZQotdG8gY29tcGlsZSBmYmNvbiBhcyBhIGtlcm5lbCBtb2R1bGUgb3IgcGxhY2UgaXQgcGVybWFuZW50bHkgaW4gdGhlIGtlcm5lbC4KLQotSSBkbyBub3Qga25vdyBvZiBhbnkgd2F5IHRvIHVubG9hZCBmYmNvbiwgYW5kIGZiY29uIHdpbGwgcHJldmVudCB0aGUKLWZyYW1lYnVmZmVyIGRldmljZSBsb2FkZWQgZmlyc3QgZnJvbSB1bmxvYWRpbmcuIFtJZiB0aGVyZSBpcyBhIHdheSwgdGhlbgotcGxlYXNlIGFkZCBhIGRlc2NyaXB0aW9uIGhlcmUhXQotCi1Nb2R1bGUgdW5sb2FkaW5nLCB0aGUgdmVzYWZiIG1ldGhvZAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotQ29uZmlndXJlIHRoZSBrZXJuZWw6Ci0KLQk8Kj4gU3VwcG9ydCBmb3IgZnJhbWUgYnVmZmVyIGRldmljZXMKLQlbKl0gICBWRVNBIFZHQSBncmFwaGljcyBzdXBwb3J0Ci0JPE0+ICAgQ3liZXJibGFkZS9pMSBzdXBwb3J0Ci0KLUFkZCBlLmcuICJ2aWRlbz12ZXNhZmI6eXBhbiB2Z2E9MHgzMDciIHRvIHRoZSBrZXJuZWwgcGFyYW1ldGVycy4gVGhlIHlwYW4KLXBhcmFtZXRlciBpcyBpbXBvcnRhbnQsIGNob29zZSBhbnkgdmdhIHBhcmFtZXRlciB5b3UgbGlrZSBhcyBsb25nIGFzIGl0IGlzCi1hIGdyYXBoaWNzIG1vZGUuCi0KLUFmdGVyIGJvb3RpbmcsIGxvYWQgY3libGFmYiB3aXRob3V0IGFueSBtb2RlIGFuZCBicHAgcGFyYW1ldGVyIGFuZCBhc3NpZ24KLWN5YmxhZmIgdG8gaW5kaXZpZHVhbCB0dHlzIHVzaW5nIGNvbjJmYiwgZS5nLjoKLQotCW1vZHByb2JlIGN5YmxhZmIKLQljb24yZmIgL2Rldi9mYjEgL2Rldi90dHkxCi0KLVVubG9hZGluZyBjeWJsYWZiIHdvcmtzIHdpdGhvdXQgcHJvYmxlbXMgYWZ0ZXIgeW91IGFzc2lnbiB2ZXNhZmIgdG8gYWxsCi10dHlzIGFnYWluLCBlLmcuOgotCi0JY29uMmZiIC9kZXYvZmIwIC9kZXYvdHR5MQotCXJtbW9kIGN5YmxhZmIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi93aGF0c25ldyBiL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi93aGF0c25ldwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZjMDdhMi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvd2hhdHNuZXcKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0wLjYyCi09PT09Ci0KLSAgICAgIC0gdGhlIHZlc2FmYiBwYXJhbWV0ZXIgaGFzIGJlZW4gcmVtb3ZlZCBhcyBJIGRlY2lkZWQgdG8gYWxsb3cgdGhlCi0gICAgICAJZmVhdHVyZSB3aXRob3V0IGFueSBzcGVjaWFsIHBhcmFtZXRlci4KLQotICAgICAgLSBDeWJsYWZiIGRvZXMgbm90IHVzZSB0aGUgdmdhIHN0eWxlIG9mIHBhbm5pbmcgYW55IGxvbmdlciwgbm93IHRoZQotICAgICAgCSJyaWdodCB2aWV3IiByZWdpc3RlciBpbiB0aGUgZ3JhcGhpY3MgZW5naW5lIElPIHNwYWNlIGlzIHVzZWQuIFdpdGhvdXQKLQl0aGF0IGNoYW5nZSBpdCB3YXMgaW1wb3NzaWJsZSB0byB1c2UgYWxsIGF2YWlsYWJsZSBtZW1vcnksIGFuZCB3aXRob3V0Ci0JYWNjZXNzIHRvIGFsbCBhdmFpbGFibGUgbWVtb3J5IGl0IGlzIGltcG9zc2libGUgdG8geXdyYXAuCi0KLSAgICAgIC0gVGhlIGltYWdlYmxpdCBmdW5jdGlvbiBub3cgdXNlcyBoYXJkd2FyZSBhY2NlbGVyYXRpb24gZm9yIGFsbCBmb250Ci0gICAgICAgIHdpZHRocy4gSGFyZHdhcmUgYmxpdHRpbmcgYWNyb3NzIHBpeGVsIGNvbHVtbiAyMDQ4IGlzIGJyb2tlbiBpbiB0aGUKLQljeWJlcmJsYWRlL2kxIGdyYXBoaWNzIGNvcmUsIGJ1dCB3ZSB3b3JrIGFyb3VuZCB0aGF0IGhhcmR3YXJlIGJ1Zy4KLQotICAgICAgLSBtb2RlcyB3aXRoIHZ4cmVzICE9IHhyZXMgYXJlIHN1cHBvcnRlZCBub3cuCi0KLSAgICAgIC0geXdyYXAgc2Nyb2xsaW5nIGlzIHN1cHBvcnRlZCBub3cgYW5kIHRoZSBkZWZhdWx0LiBUaGlzIGlzIGEgYmlnCi0gICAgICAgIHBlcmZvcm1hbmNlIGdhaW4uCi0KLSAgICAgIC0gZGVmYXVsdCB2aWRlbyBtb2RlcyB1c2UgdnlyZXMgPiB5cmVzIGFuZCB2eHJlcyA+IHhyZXMgdG8gYWxsb3cKLSAgICAgICAgYWxtb3N0IG9wdGltYWwgc2Nyb2xsaW5nIHNwZWVkIGZvciBub3JtYWwgYW5kIHJvdGF0ZWQgc2NyZWVucwotCi0gICAgICAtIHNvbWUgZmVhdHVyZXMgbWFpbmx5IHVzZWZ1bGwgZm9yIGRlYnVnZ2luZyB0aGUgdXBwZXIgbGF5ZXJzIG9mIHRoZQotICAgICAgICBmcmFtZWJ1ZmZlciBzeXN0ZW0gaGF2ZSBiZWVuIGFkZGVkLCBoYXZlIGEgbG9vayBhdCB0aGUgY29kZQotCi0gICAgICAtIGZpeGVkOiBPb3BzIGFmdGVyIHVubG9hZGluZyBjeWJsYWZiIHdoZW4gcmVhZGluZyAvcHJvYy9pbyoKLQotICAgICAgLSB3ZSB3b3JrIGFyb3VuZCBzb21lIGJ1Z3Mgb2YgdGhlIGhpZ2hlciBmcmFtZWJ1ZmZlciBsYXllcnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2N5YmxhZmIvd2h5Y3libGFmYiBiL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi93aHljeWJsYWZiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTIzYmMxLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZmIvY3libGFmYi93aHljeWJsYWZiCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotSSB0cmllZCB0aGUgZm9sbG93aW5nIGZyYW1lYnVmZmVyIGRyaXZlcnM6Ci0KLQktIFRSSURFTlRGQiBpcyBmdWxsIG9mIGJ1Z3MuIEFjY2VsZXJhdGlvbiBpcyBicm9rZW4gZm9yIEJsYWRlM0QKLQkgIGdyYXBoaWNzIGNvcmVzIGxpa2UgdGhlIGN5YmVyYmxhZGUvaTEuIEl0IGNsYWltcyB0byBzdXBwb3J0IGEgZ3JlYXQKLQkgIG51bWJlciBvZiBkZXZpY2VzLCBidXQgZG9jdW1lbnRhdGlvbiBmb3IgbW9zdCBvZiB0aGVzZSBkZXZpY2VzIGlzCi0JICB1bmZvcnR1bmF0ZWx5IG5vdCBhdmFpbGFibGUuIFRoZXJlIGlzIF9ub18gcmVhc29uIHRvIHVzZSB0cmlkZW50ZmIKLQkgIGZvciBjeWJlcmJsYWRlL2kxICsgQ1JUIHVzZXJzLiBWRVNBRkIgaXMgZmFzdGVyLCBhbmQgdGhlIG9uZQotCSAgYWR2YW50YWdlLCBtb2RlIHN3aXRjaGluZywgaXMgYnJva2VuIGluIHRyaWRlbnRmYi4KLQotCS0gVkVTQUZCIGlzIHVzZWQgYnkgbWFueSBkaXN0cmlidXRpb25zIGFzIGEgc3RhbmRhcmQuIFZlc2FmYiBkb2VzCi0JICBub3Qgc3VwcG9ydCBtb2RlIHN3aXRjaGluZy4gVkVTQUZCIGlzIGEgYml0IGZhc3RlciB0aGFuIHRoZSB3b3JraW5nCi0JICBjb25maWd1cmF0aW9ucyBvZiBUUklERU5URkIsIGJ1dCBpdCBpcyBzdGlsbCB0b28gc2xvdywgZXZlbiBpZiB5b3UKLQkgIHVzZSB5cGFuLgotCi0JLSBFUElBRkIgKHlvdSdsbCBmaW5kIGl0IG9uIHNvdXJjZWZvcmdlKSBzdXBwb3J0cyB0aGUgQ3liZXJibGFkZS9pMQotCSAgZ3JhcGhpY3MgY29yZSwgYnV0IGl0IHN0aWxsIGhhcyBzZXJpb3VzIGJ1Z3MgYW5kIGRldmVsb3BlbWVudCBzZWVtcwotCSAgdG8gaGF2ZSBzdG9wcGVkLiBUaGlzIGlzIHRoZSBvbmUgZHJpdmVyIHdpdGggVFYtb3V0IHN1cHBvcnQuIElmIHlvdQotCSAgZG8gbmVlZCB0aGlzIGZlYXR1cmUsIHRyeSBlcGlhZmIuCi0KLU5vbmUgb2YgdGhlc2UgZHJpdmVycyB3YXMgYSByZWFsIG9wdGlvbiBmb3IgbWUuCi0KLUkgYmVsaWV2ZSB0aGF0IGlzIHVucmVhc29uYWJsZSB0byBjaGFuZ2UgY29kZSB0aGF0IGFubm91bmNlcyB0byBzdXBwb3J0IDIwCi1kZXZpY2VzIGlmIEkgb25seSBoYXZlIG1vcmUgb3IgbGVzcyBzdWZmaWNpZW50IGRvY3VtZW50YXRpb24gZm9yIGV4YWN0bHkgb25lCi1vZiB0aGVzZS4gVGhlIHJpc2sgb2YgYnJlYWtpbmcgZGV2aWNlIGZvbyB3aGlsZSBmaXhpbmcgZGV2aWNlIGJhciBpcyB0b28gaGlnaC4KLQotU28gSSBkZWNpZGVkIHRvIHN0YXJ0IEN5QmxhRkIgYXMgYSBzdHJpcHBlZCBkb3duIHRyaWRlbnRmYi4KLQotQWxsIGNvZGUgc3BlY2lmaWMgdG8gb3RoZXIgVHJpZGVudCBjaGlwcyBoYXMgYmVlbiByZW1vdmVkLiBBZnRlciB0aGF0IHRoZXJlCi13ZXJlIGEgbG90IG9mIGNvc21ldGljIGNoYW5nZXMgdG8gaW5jcmVhc2UgdGhlIHJlYWRhYmlsaXR5IG9mIHRoZSBjb2RlLiBBbGwKLXJlZ2lzdGVyIG5hbWVzIHdlcmUgY2hhbmdlZCB0byB0aG9zZSBtbmVtb25pY3MgdXNlZCBpbiB0aGUgZGF0YXNoZWV0LiBGdW5jdGlvbgotYW5kIG1hY3JvIG5hbWVzIHdlcmUgY2hhbmdlZCBpZiB0aGV5IGhpbmRlcmVkIGVhc3kgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZS4KLQotQWZ0ZXIgdGhhdCBJIGRlYnVnZ2VkIHRoZSBjb2RlIGFuZCBpbXBsZW1lbnRlZCBzb21lIG5ldyBmZWF0dXJlcy4gSSdsbCB0cnkgdG8KLWdpdmUgYSBsaXR0bGUgc3VtbWFyeSBvZiB0aGUgbWFpbiBjaGFuZ2VzOgotCi0JLSBjYWxjdWxhdGlvbiBvZiB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCB0aW1pbmdzIHdhcyBmaXhlZAotCi0JLSB2aWRlbyBzaWduYWwgcXVhbGl0eSBoYXMgYmVlbiBpbXByb3ZlZCBkcmFtYXRpY2FsbHkKLQotCS0gYWNjZWxlcmF0aW9uOgotCi0JCS0gZmlsbHJlY3QgYW5kIGNvcHlhcmVhIHdlcmUgZml4ZWQgYW5kIHJlZW5hYmxlZAotCi0JCS0gY29sb3IgZXhwYW5kaW5nIGltYWdlYmxpdCB3YXMgbmV3bHkgaW1wbGVtZW50ZWQsIGNvbG9yCi0JCSAgaW1hZ2VibGl0IChvbmx5IHVzZWQgdG8gZHJhdyB0aGUgcGVuZ3VpbmUpIHN0aWxsIHVzZXMgdGhlCi0JCSAgZ2VuZXJpYyBjb2RlLgotCi0JCS0gaW5pdCBvZiB0aGUgYWNjZWxlcmF0aW9uIGVuZ2luZSB3YXMgaW1wcm92ZWQgYW5kIG1vdmVkIHRvIGEKLQkJICBwbGFjZSB3aGVyZSBpdCByZWFsbHkgd29ya3MgLi4uCi0KLQkJLSBzeW5jIGZ1bmN0aW9uIGhhcyBhIHRpbWVvdXQgbm93IGFuZCB0cmllcyB0byByZXNldCBhbmQKLQkJICByZWluaXQgdGhlIGFjY2VsIGVuZ2luZSBpZiBuZWNlc3NhcnkKLQotCQktIGZld2VyIHNsb3cgY29weWFyZWEgY2FsbHMgd2hlbiBkb2luZyB5cGFuIHNjcm9sbGluZyBieSB1c2luZwotCQkgIHVuZG9jdW1lbnRlZCBiaXQgZDIxIG9mIHNjcmVlbiBzdGFydCBhZGRyZXNzIHN0b3JlZCBpbgotCQkgIENSMkJbNV0uIEJJT1MgZG9lcyB1c2UgaXQgYWxzbywgc28gdGhpcyBzaG91bGQgYmUgc2FmZS4KLQotCS0gY3libGFmYiByZWplY3RzIGFueSBhdHRlbXB0IHRvIHNldCBtb2RlcyB0aGF0IHdvdWxkIGNhdXNlIHZjbGsKLQkgIHZhbHVlcyBhYm92ZSByZWFzb25hYmxlIDIzMCBNSHouIDMyYml0IG1vZGVzIHVzZSBhIGNsb2NrCi0JICBtdWx0aXBsaWNhdG9yIG9mIDIsIHNvIGZic2V0IGRvZXMgc2hvdyB0aGUgY29ycmVjdCB2YWx1ZXMgZm9yCi0JICBwaXhjbG9jayBidXQgbm90IGZvciB2Y2xrIGluIHRoaXMgY2FzZS4gVGhlIGZic2V0IGxpbWl0IGlzIDExNSBNSHoKLQkgIGZvciAzMiBicHAgbW9kZXMuCi0KLQktIGN5YmxhZmIgcmVqZWN0cyBtb2RlcyBrbm93biB0byBiZSBicm9rZW4gb3IgdW5pbXBsZW1lbnRlZCAoYWxsCi0JICBpbnRlcmxhY2VkIG1vZGVzLCBhbGwgZG91Ymxlc2NhbiBtb2RlcyBmb3Igbm93KQotCi0JLSBjeWJsYWZiIG5vdyB3b3JrcyBpbmRlcGVuZGFudCBvZiB0aGUgdmlkZW8gbW9kZSBpbiBlZmZlY3QgYXQgc3RhcnR1cAotCSAgdGltZSAodHJpZGVudGZiIGRvZXMgbm90IGluaXQgYWxsIG5lZWRlZCByZWdpc3RlcnMgdG8gcmVhc29uYWJsZQotCSAgdmFsdWVzKQotCi0JLSBzd2l0Y2hpbmcgYmV0d2VlbiB2aWRlbyBtb2RlcyBkb2VzIHdvcmsgcmVsaWFibHkgbm93Ci0KLQktIHRoZSBmaXJzdCB2aWRlbyBtb2RlIG5vdyBpcyB0aGUgb25lIHNlbGVjdGVkIG9uIHN0YXJ0dXAgdXNpbmcgdGhlCi0JICB2Z2E9Pz8/PyBtZWNoYW5pc20gb3IgYW55IG9mCi0JCS0gNjQweDQ4MCwgODAweDYwMCwgMTAyNHg3NjgsIDEyODB4MTAyNAotCQktIDgsIDE2LCAyNCBvciAzMiBicHAKLQkJLSByZWZyZXNoIGJldHdlZW4gNTAgSHogYW5kIDg1IEh6LCAxIEh6IHN0ZXBzICgxMjgweDEwMjQtMzIKLQkJICBpcyBsaW1pdGVkIHRvIDYzSHopCi0KLQktIHBjaSByZXRyeSBhbmQgcGNpIGJ1cnN0IG1vZGUgYXJlIHNldHRhYmxlICh0cnkgdG8gZGlzYWJsZSBpZiB5b3UKLQkgIGV4cGVyaWVuY2UgbGF0ZW5jeSBwcm9ibGVtcykKLQotCS0gYnVpbHQgYXMgYSBtb2R1bGUgY3libGFmYiBtaWdodCBiZSB1bmxvYWRlZCBhbmQgcmVsb2FkZWQgdXNpbmcKLQkgIHRoZSB2ZmIgbW9kdWxlIGFuZCBjb24ydnQgb3IgbWlnaHQgYmUgdXNlZCB0b2dldGhlciB3aXRoIHZlc2FmYgotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKaW5kZXggNWUwMmI4My4uMzkyNDZmYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dApAQCAtMjU1LDYgKzI1NSwxNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2hhdDoJR1BJTyBhdXRvcmVxdWVzdCBvbiBncGlvX2RpcmVjdGlvbl97aW5wdXQsb3V0cHV0fSgpIGluIGdwaW9saWIKK1doZW46CUZlYnJ1YXJ5IDIwMTAKK1doeToJQWxsIGNhbGxlcnMgc2hvdWxkIHVzZSBleHBsaWNpdCBncGlvX3JlcXVlc3QoKS9ncGlvX2ZyZWUoKS4KKwlUaGUgYXV0b3JlcXVlc3QgbWVjaGFuaXNtIGluIGdwaW9saWIgd2FzIHByb3ZpZGVkIG1vc3RseSBhcyBhCisJbWlncmF0aW9uIGFpZCBmb3IgbGVnYWN5IEdQSU8gaW50ZXJmYWNlcyAoZm9yIFNPQyBiYXNlZCBHUElPcykuCisJVGhvc2UgdXNlcnMgaGF2ZSBub3cgbGFyZ2VseSBtaWdyYXRlZC4gIFBsYXRmb3JtcyBpbXBsZW1lbnRpbmcKKwl0aGUgR1BJTyBpbnRlcmZhY2VzIHdpdGhvdXQgdXNpbmcgZ3Bpb2xpYiB3aWxsIHNlZSBubyBjaGFuZ2VzLgorV2hvOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGF0OgliNDMgc3VwcG9ydCBmb3IgZmlybXdhcmUgcmV2aXNpb24gPCA0MTAKIFdoZW46CVRoZSBzY2hlZHVsZSB3YXMgSnVseSAyMDA4LCBidXQgaXQgd2FzIGRlY2lkZWQgdGhhdCB3ZSBhcmUgZ29pbmcgdG8ga2VlcCB0aGUKICAgICAgICAgY29kZSBhcyBsb25nIGFzIHRoZXJlIGFyZSBubyBtYWpvciBtYWludGFuYW5jZSBoZWFkYWNoZXMuCkBAIC0yNzMsMTMgKzI4Myw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglyZW1vdmUgSElEIGNvbXBhdCBzdXBwb3J0Ci1XaGVuOgkyLjYuMjkKLVdoeToJbmVlZGVkIG9ubHkgYXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdW50aWwgZGlzdHJvcyBmaXggdGhlbXNlbHZlcyB1cAotV2hvOglKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDogcHJpbnRfZm5fZGVzY3JpcHRvcl9zeW1ib2woKQogV2hlbjogT2N0b2JlciAyMDA5CiBXaHk6ICBUaGUgJXBGIHZzcHJpbnRmIGZvcm1hdCBwcm92aWRlcyB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGluIGEKQEAgLTMxMSw2ICszMTQsMTggQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1doYXQ6CUFiaWxpdHkgZm9yIG5vbiByb290IHVzZXJzIHRvIHNobV9nZXQgaHVnZXRsYiBwYWdlcyBiYXNlZCBvbiBtbG9jaworCXJlc291cmNlIGxpbWl0cworV2hlbjoJMi42LjMxCitXaHk6CU5vbiByb290IHVzZXJzIG5lZWQgdG8gYmUgcGFydCBvZiAvcHJvYy9zeXMvdm0vaHVnZXRsYl9zaG1fZ3JvdXAgb3IKKwloYXZlIENBUF9JUENfTE9DSyB0byBiZSBhYmxlIHRvIGFsbG9jYXRlIHNobSBzZWdtZW50cyBiYWNrZWQgYnkKKwlodWdlIHBhZ2VzLiAgVGhlIG1sb2NrIGJhc2VkIHJsaW1pdCBjaGVjayB0byBhbGxvdyBzaG0gaHVnZXRsYiBpcworCWluY29uc2lzdGVudCB3aXRoIG1tYXAgYmFzZWQgYWxsb2NhdGlvbnMuICBIZW5jZSBpdCBpcyBiZWluZworCWRlcHJlY2F0ZWQuCitXaG86CVJhdmlraXJhbiBUaGlydW1hbGFpIDxraXJhbkBzY2FsZXg4Ni5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGF0OglDT05GSUdfVEhFUk1BTF9IV01PTgogV2hlbjoJSmFudWFyeSAyMDA5CiBXaHk6CVRoaXMgb3B0aW9uIHdhcyBpbnRyb2R1Y2VkIGp1c3QgdG8gYWxsb3cgb2xkZXIgbG0tc2Vuc29ycyB1c2Vyc3BhY2UKQEAgLTM4MCwzICszOTUsMzUgQEAKIAloYXZlIGJlZW4ga2VwdCBhcm91bmQgZm9yIG1pZ3JhdGlvbiByZWFzb25zLiBBZnRlciBtb3JlIHRoYW4gdHdvIHllYXJzCiAJaXQncyB0aW1lIHRvIHJlbW92ZSB0aGVtIGZpbmFsbHkKIFdobzoJVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglmYWtlcGhwIGFuZCBhc3NvY2lhdGVkIHN5c2ZzIGZpbGVzIGluIC9zeXMvYnVzL3BjaS9zbG90cy8KK1doZW46CTIwMTEKK1doeToJSW4gMi42LjI3LCB0aGUgc2VtYW50aWNzIG9mIC9zeXMvYnVzL3BjaS9zbG90cyB3YXMgcmVkZWZpbmVkIHRvCisJcmVwcmVzZW50IGEgbWFjaGluZSdzIHBoeXNpY2FsIFBDSSBzbG90cy4gVGhlIGNoYW5nZSBpbiBzZW1hbnRpY3MKKwloYWQgdXNlcnNwYWNlIGltcGxpY2F0aW9ucywgYXMgdGhlIGhvdHBsdWcgY29yZSBubyBsb25nZXIgYWxsb3dlZAorCWRyaXZlcnMgdG8gY3JlYXRlIG11bHRpcGxlIHN5c2ZzIGZpbGVzIHBlciBwaHlzaWNhbCBzbG90IChyZXF1aXJlZAorCWZvciBtdWx0aS1mdW5jdGlvbiBkZXZpY2VzLCBlLmcuKS4gZmFrZXBocCB3YXMgc2VlbiBhcyBhIGRldmVsb3BlcidzCisJdG9vbCBvbmx5LCBhbmQgaXRzIGludGVyZmFjZSBjaGFuZ2VkLiBUb28gbGF0ZSwgd2UgbGVhcm5lZCB0aGF0CisJdGhlcmUgd2VyZSBzb21lIHVzZXJzIG9mIHRoZSBmYWtlcGhwIGludGVyZmFjZS4KKworCUluIDIuNi4zMCwgdGhlIG9yaWdpbmFsIGZha2VwaHAgaW50ZXJmYWNlIHdhcyByZXN0b3JlZC4gQXQgdGhlIHNhbWUKKwl0aW1lLCB0aGUgUENJIGNvcmUgZ2FpbmVkIHRoZSBhYmlsaXR5IHRoYXQgZmFrZXBocCBwcm92aWRlZCwgbmFtZWx5CisJZnVuY3Rpb24tbGV2ZWwgaG90LXJlbW92ZSBhbmQgaG90LWFkZC4KKworCVNpbmNlIHRoZSBQQ0kgY29yZSBub3cgcHJvdmlkZXMgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgZXhwb3NlZCBpbjoKKworCQkvc3lzL2J1cy9wY2kvcmVzY2FuCisJCS9zeXMvYnVzL3BjaS9kZXZpY2VzLy4uLi9yZW1vdmUKKwkJL3N5cy9idXMvcGNpL2RldmljZXMvLi4uL3Jlc2NhbgorCisJdGhlcmUgaXMgbm8gZnVuY3Rpb25hbCByZWFzb24gdG8gbWFpbnRhaW4gZmFrZXBocCBhcyB3ZWxsLgorCisJV2Ugd2lsbCBrZWVwIHRoZSBleGlzdGluZyBtb2R1bGUgc28gdGhhdCAnbW9kcHJvYmUgZmFrZXBocCcgd2lsbAorCXByZXNlbnQgdGhlIG9sZCAvc3lzL2J1cy9wY2kvc2xvdHMvLi4uIGludGVyZmFjZSBmb3IgY29tcGF0aWJpbGl0eSwKKwlidXQgdXNlcnMgYXJlIHVyZ2VkIHRvIG1pZ3JhdGUgdGhlaXIgYXBwbGljYXRpb25zIHRvIHRoZSBBUEkgYWJvdmUuCisKKwlBZnRlciBhIHJlYXNvbmFibGUgdHJhbnNpdGlvbiBwZXJpb2QsIHdlIHdpbGwgcmVtb3ZlIHRoZSBsZWdhY3kKKwlmYWtlcGhwIGludGVyZmFjZS4KK1dobzoJQWxleCBDaGlhbmcgPGFjaGlhbmdAaHAuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCmluZGV4IDRlNzhjZTYuLjc2ZWZlNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZworKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKQEAgLTUwNSw3ICs1MDUsNyBAQAogCXZvaWQgKCpvcGVuKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqKTsKIAl2b2lkICgqY2xvc2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCopOwogCWludCAoKmZhdWx0KShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QqLCBzdHJ1Y3Qgdm1fZmF1bHQgKik7Ci0JaW50ICgqcGFnZV9ta3dyaXRlKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgc3RydWN0IHBhZ2UgKik7CisJaW50ICgqcGFnZV9ta3dyaXRlKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgc3RydWN0IHZtX2ZhdWx0ICopOwogCWludCAoKmFjY2Vzcykoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHZvaWQqLCBpbnQsIGludCk7CiAKIGxvY2tpbmcgcnVsZXM6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvYmFja2VuZC1hcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODJkNTJjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dApAQCAtMCwwICsxLDY1OCBAQAorCQkJICA9PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJICBGUy1DQUNIRSBDQUNIRSBCQUNLRU5EIEFQSQorCQkJICA9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgRlMtQ2FjaGUgc3lzdGVtIHByb3ZpZGVzIGFuIEFQSSBieSB3aGljaCBhY3R1YWwgY2FjaGVzIGNhbiBiZSBzdXBwbGllZCB0bworRlMtQ2FjaGUgZm9yIGl0IHRvIHRoZW4gc2VydmUgb3V0IHRvIG5ldHdvcmsgZmlsZXN5c3RlbXMgYW5kIG90aGVyIGludGVyZXN0ZWQKK3BhcnRpZXMuCisKK1RoaXMgQVBJIGlzIGRlY2xhcmVkIGluIDxsaW51eC9mc2NhY2hlLWNhY2hlLmg+LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSU5JVElBTElTSU5HIEFORCBSRUdJU1RFUklORyBBIENBQ0hFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVG8gc3RhcnQgb2ZmLCBhIGNhY2hlIGRlZmluaXRpb24gbXVzdCBiZSBpbml0aWFsaXNlZCBhbmQgcmVnaXN0ZXJlZCBmb3IgZWFjaAorY2FjaGUgdGhlIGJhY2tlbmQgd2FudHMgdG8gbWFrZSBhdmFpbGFibGUuICBGb3IgaW5zdGFuY2UsIENhY2hlRlMgZG9lcyB0aGlzIGluCit0aGUgZmlsbF9zdXBlcigpIG9wZXJhdGlvbiBvbiBtb3VudGluZy4KKworVGhlIGNhY2hlIGRlZmluaXRpb24gKHN0cnVjdCBmc2NhY2hlX2NhY2hlKSBzaG91bGQgYmUgaW5pdGlhbGlzZWQgYnkgY2FsbGluZzoKKworCXZvaWQgZnNjYWNoZV9pbml0X2NhY2hlKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSwKKwkJCQlzdHJ1Y3QgZnNjYWNoZV9jYWNoZV9vcHMgKm9wcywKKwkJCQljb25zdCBjaGFyICppZGZtdCwKKwkJCQkuLi4pOworCitXaGVyZToKKworICgqKSAiY2FjaGUiIGlzIGEgcG9pbnRlciB0byB0aGUgY2FjaGUgZGVmaW5pdGlvbjsKKworICgqKSAib3BzIiBpcyBhIHBvaW50ZXIgdG8gdGhlIHRhYmxlIG9mIG9wZXJhdGlvbnMgdGhhdCB0aGUgYmFja2VuZCBzdXBwb3J0cyBvbgorICAgICB0aGlzIGNhY2hlOyBhbmQKKworICgqKSAiaWRmbXQiIGlzIGEgZm9ybWF0IGFuZCBwcmludGYtc3R5bGUgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RpbmcgYSBsYWJlbAorICAgICBmb3IgdGhlIGNhY2hlLgorCisKK1RoZSBjYWNoZSBzaG91bGQgdGhlbiBiZSByZWdpc3RlcmVkIHdpdGggRlMtQ2FjaGUgYnkgcGFzc2luZyBhIHBvaW50ZXIgdG8gdGhlCitwcmV2aW91c2x5IGluaXRpYWxpc2VkIGNhY2hlIGRlZmluaXRpb24gdG86CisKKwlpbnQgZnNjYWNoZV9hZGRfY2FjaGUoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlLAorCQkJICAgICAgc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpmc2RlZiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnRhZ25hbWUpOworCitUd28gZXh0cmEgYXJndW1lbnRzIHNob3VsZCBhbHNvIGJlIHN1cHBsaWVkOgorCisgKCopICJmc2RlZiIgd2hpY2ggc2hvdWxkIHBvaW50IHRvIHRoZSBvYmplY3QgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBGUy1DYWNoZQorICAgICBtYXN0ZXIgaW5kZXggaW4gdGhpcyBjYWNoZS4gIE5ldGZzIHByaW1hcnkgaW5kZXggZW50cmllcyB3aWxsIGJlIGNyZWF0ZWQKKyAgICAgaGVyZS4gIEZTLUNhY2hlIGtlZXBzIHRoZSBjYWxsZXIncyByZWZlcmVuY2UgdG8gdGhlIGluZGV4IG9iamVjdCBpZgorICAgICBzdWNjZXNzZnVsIGFuZCB3aWxsIHJlbGVhc2UgaXQgdXBvbiB3aXRoZHJhd2FsIG9mIHRoZSBjYWNoZS4KKworICgqKSAidGFnbmFtZSIgd2hpY2gsIGlmIGdpdmVuLCBzaG91bGQgYmUgYSB0ZXh0IHN0cmluZyBuYW1pbmcgdGhpcyBjYWNoZS4gIElmCisgICAgIHRoaXMgaXMgTlVMTCwgdGhlIGlkZW50aWZpZXIgd2lsbCBiZSB1c2VkIGluc3RlYWQuICBGb3IgQ2FjaGVGUywgdGhlCisgICAgIGlkZW50aWZpZXIgaXMgc2V0IHRvIG5hbWUgdGhlIHVuZGVybHlpbmcgYmxvY2sgZGV2aWNlIGFuZCB0aGUgdGFnIGNhbiBiZQorICAgICBzdXBwbGllZCBieSBtb3VudC4KKworVGhpcyBmdW5jdGlvbiBtYXkgcmV0dXJuIC1FTk9NRU0gaWYgaXQgcmFuIG91dCBvZiBtZW1vcnkgb3IgLUVFWElTVCBpZiB0aGUgdGFnCitpcyBhbHJlYWR5IGluIHVzZS4gIDAgd2lsbCBiZSByZXR1cm5lZCBvbiBzdWNjZXNzLgorCisKKz09PT09PT09PT09PT09PT09PT09PQorVU5SRUdJU1RFUklORyBBIENBQ0hFCis9PT09PT09PT09PT09PT09PT09PT0KKworQSBjYWNoZSBjYW4gYmUgd2l0aGRyYXduIGZyb20gdGhlIHN5c3RlbSBieSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBhCitwb2ludGVyIHRvIHRoZSBjYWNoZSBkZWZpbml0aW9uOgorCisJdm9pZCBmc2NhY2hlX3dpdGhkcmF3X2NhY2hlKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSk7CisKK0luIENhY2hlRlMncyBjYXNlLCB0aGlzIGlzIGNhbGxlZCBieSBwdXRfc3VwZXIoKS4KKworCis9PT09PT09PQorU0VDVVJJVFkKKz09PT09PT09CisKK1RoZSBjYWNoZSBtZXRob2RzIGFyZSBleGVjdXRlZCBvbmUgb2YgdHdvIGNvbnRleHRzOgorCisgKDEpIHRoYXQgb2YgdGhlIHVzZXJzcGFjZSBwcm9jZXNzIHRoYXQgaXNzdWVkIHRoZSBuZXRmcyBvcGVyYXRpb24gdGhhdCBjYXVzZWQKKyAgICAgdGhlIGNhY2hlIG1ldGhvZCB0byBiZSBpbnZva2VkLCBvcgorCisgKDIpIHRoYXQgb2Ygb25lIG9mIHRoZSBwcm9jZXNzZXMgaW4gdGhlIEZTLUNhY2hlIHRocmVhZCBwb29sLgorCitJbiBlaXRoZXIgY2FzZSwgdGhpcyBtYXkgbm90IGJlIGFuIGFwcHJvcHJpYXRlIGNvbnRleHQgaW4gd2hpY2ggdG8gYWNjZXNzIHRoZQorY2FjaGUuCisKK1RoZSBjYWxsaW5nIHByb2Nlc3MncyBmc3VpZCwgZnNnaWQgYW5kIFNFTGludXggc2VjdXJpdHkgaWRlbnRpdGllcyBtYXkgbmVlZCB0bworYmUgbWFzcXVlcmFkZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FjaGUgZHJpdmVyJ3MgYWNjZXNzIHRvIHRoZSBjYWNoZS4KK1RoaXMgaXMgbGVmdCB0byB0aGUgY2FjaGUgdG8gaGFuZGxlOyBGUy1DYWNoZSBtYWtlcyBubyBlZmZvcnQgaW4gdGhpcyByZWdhcmQuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NPTlRST0wgQU5EIFNUQVRJU1RJQ1MgUFJFU0VOVEFUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgY2FjaGUgbWF5IHByZXNlbnQgZGF0YSB0byB0aGUgb3V0c2lkZSB3b3JsZCB0aHJvdWdoIEZTLUNhY2hlJ3MgaW50ZXJmYWNlcworaW4gc3lzZnMgYW5kIHByb2NmcyAtIHRoZSBmb3JtZXIgZm9yIGNvbnRyb2wgYW5kIHRoZSBsYXR0ZXIgZm9yIHN0YXRpc3RpY3MuCisKK0Egc3lzZnMgZGlyZWN0b3J5IGNhbGxlZCAvc3lzL2ZzL2ZzY2FjaGUvPGNhY2hldGFnPi8gaXMgY3JlYXRlZCBpZiBDT05GSUdfU1lTRlMKK2lzIGVuYWJsZWQuICBUaGlzIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUga29iamVjdCBzdHJ1Y3QgZnNjYWNoZV9jYWNoZTo6a29iagorYW5kIGlzIGZvciB1c2UgYnkgdGhlIGNhY2hlIGFzIGl0IHNlZXMgZml0LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PQorUkVMRVZBTlQgREFUQSBTVFJVQ1RVUkVTCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworICgqKSBJbmRleC9EYXRhIGZpbGUgRlMtQ2FjaGUgcmVwcmVzZW50YXRpb24gY29va2llOgorCisJc3RydWN0IGZzY2FjaGVfY29va2llIHsKKwkJc3RydWN0IGZzY2FjaGVfb2JqZWN0X2RlZgkqZGVmOworCQlzdHJ1Y3QgZnNjYWNoZV9uZXRmcwkJKm5ldGZzOworCQl2b2lkCQkJCSpuZXRmc19kYXRhOworCQkuLi4KKwl9OworCisgICAgIFRoZSBmaWVsZHMgdGhhdCBtaWdodCBiZSBvZiB1c2UgdG8gdGhlIGJhY2tlbmQgZGVzY3JpYmUgdGhlIG9iamVjdAorICAgICBkZWZpbml0aW9uLCB0aGUgbmV0ZnMgZGVmaW5pdGlvbiBhbmQgdGhlIG5ldGZzJ3MgZGF0YSBmb3IgdGhpcyBjb29raWUuCisgICAgIFRoZSBvYmplY3QgZGVmaW5pdGlvbiBjb250YWluIGZ1bmN0aW9ucyBzdXBwbGllZCBieSB0aGUgbmV0ZnMgZm9yIGxvYWRpbmcKKyAgICAgYW5kIG1hdGNoaW5nIGluZGV4IGVudHJpZXM7IHRoZXNlIGFyZSByZXF1aXJlZCB0byBwcm92aWRlIHNvbWUgb2YgdGhlCisgICAgIGNhY2hlIG9wZXJhdGlvbnMuCisKKworICgqKSBJbi1jYWNoZSBvYmplY3QgcmVwcmVzZW50YXRpb246CisKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgeworCQlpbnQJCQkJZGVidWdfaWQ7CisJCWVudW0geworCQkJRlNDQUNIRV9PQkpFQ1RfUkVDWUNMSU5HLAorCQkJLi4uCisJCX0JCQkJc3RhdGU7CisJCXNwaW5sb2NrX3QJCQlsb2NrCisJCXN0cnVjdCBmc2NhY2hlX2NhY2hlCQkqY2FjaGU7CisJCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZQkJKmNvb2tpZTsKKwkJLi4uCisJfTsKKworICAgICBTdHJ1Y3R1cmVzIG9mIHRoaXMgdHlwZSBzaG91bGQgYmUgYWxsb2NhdGVkIGJ5IHRoZSBjYWNoZSBiYWNrZW5kIGFuZAorICAgICBwYXNzZWQgdG8gRlMtQ2FjaGUgd2hlbiByZXF1ZXN0ZWQgYnkgdGhlIGFwcHJvcHJpYXRlIGNhY2hlIG9wZXJhdGlvbi4gIEluCisgICAgIHRoZSBjYXNlIG9mIENhY2hlRlMsIHRoZXkncmUgZW1iZWRkZWQgaW4gQ2FjaGVGUydzIGludGVybmFsIG9iamVjdAorICAgICBzdHJ1Y3R1cmVzLgorCisgICAgIFRoZSBkZWJ1Z19pZCBpcyBhIHNpbXBsZSBpbnRlZ2VyIHRoYXQgY2FuIGJlIHVzZWQgaW4gZGVidWdnaW5nIG1lc3NhZ2VzCisgICAgIHRoYXQgcmVmZXIgdG8gYSBwYXJ0aWN1bGFyIG9iamVjdC4gIEluIHN1Y2ggYSBjYXNlIGl0IHNob3VsZCBiZSBwcmludGVkCisgICAgIHVzaW5nICJPQkoleCIgdG8gYmUgY29uc2lzdGVudCB3aXRoIEZTLUNhY2hlLgorCisgICAgIEVhY2ggb2JqZWN0IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgY29va2llIHRoYXQgcmVwcmVzZW50cyB0aGUgb2JqZWN0IGl0CisgICAgIGlzIGJhY2tpbmcuICBBbiBvYmplY3Qgc2hvdWxkIHJldGlyZWQgd2hlbiBwdXRfb2JqZWN0KCkgaXMgY2FsbGVkIGlmIGl0IGlzCisgICAgIGluIHN0YXRlIEZTQ0FDSEVfT0JKRUNUX1JFQ1lDTElORy4gIFRoZSBmc2NhY2hlX29iamVjdCBzdHJ1Y3Qgc2hvdWxkIGJlCisgICAgIGluaXRpYWxpc2VkIGJ5IGNhbGxpbmcgZnNjYWNoZV9vYmplY3RfaW5pdChvYmplY3QpLgorCisKKyAoKikgRlMtQ2FjaGUgb3BlcmF0aW9uIHJlY29yZDoKKworCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiB7CisJCWF0b21pY190CQl1c2FnZTsKKwkJc3RydWN0IGZzY2FjaGVfb2JqZWN0CSpvYmplY3Q7CisJCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCSNkZWZpbmUgRlNDQUNIRV9PUF9FWENMVVNJVkUKKwkJdm9pZCAoKnByb2Nlc3Nvcikoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCk7CisJCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKTsKKwkJLi4uCisJfTsKKworICAgICBGUy1DYWNoZSBoYXMgYSBwb29sIG9mIHRocmVhZHMgdGhhdCBpdCB1c2VzIHRvIGdpdmUgQ1BVIHRpbWUgdG8gdGhlCisgICAgIHZhcmlvdXMgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGRvbmUgYXMgcGFydCBvZiBkcml2aW5nCisgICAgIHRoZSBjYWNoZS4gIFRoZXNlIGFyZSByZXByZXNlbnRlZCBieSB0aGUgYWJvdmUgc3RydWN0dXJlLiAgVGhlIHByb2Nlc3NvcgorICAgICBtZXRob2QgaXMgY2FsbGVkIHRvIGdpdmUgdGhlIG9wIENQVSB0aW1lLCBhbmQgdGhlIHJlbGVhc2UgbWV0aG9kIHRvIGdldAorICAgICByaWQgb2YgaXQgd2hlbiBpdHMgdXNhZ2UgY291bnQgcmVhY2hlcyAwLgorCisgICAgIEFuIG9wZXJhdGlvbiBjYW4gYmUgbWFkZSBleGNsdXNpdmUgdXBvbiBhbiBvYmplY3QgYnkgc2V0dGluZyB0aGUKKyAgICAgYXBwcm9wcmlhdGUgZmxhZyBiZWZvcmUgZW5xdWV1aW5nIGl0IHdpdGggZnNjYWNoZV9lbnF1ZXVlX29wZXJhdGlvbigpLiAgSWYKKyAgICAgYW4gb3BlcmF0aW9uIG5lZWRzIG1vcmUgcHJvY2Vzc2luZyB0aW1lLCBpdCBzaG91bGQgYmUgZW5xdWV1ZWQgYWdhaW4uCisKKworICgqKSBGUy1DYWNoZSByZXRyaWV2YWwgb3BlcmF0aW9uIHJlY29yZDoKKworCXN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCB7CisJCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiBvcDsKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UJKm1hcHBpbmc7CisJCXN0cnVjdCBsaXN0X2hlYWQJKnRvX2RvOworCQkuLi4KKwl9OworCisgICAgIEEgc3RydWN0dXJlIG9mIHRoaXMgdHlwZSBpcyBhbGxvY2F0ZWQgYnkgRlMtQ2FjaGUgdG8gcmVjb3JkIHJldHJpZXZhbCBhbmQKKyAgICAgYWxsb2NhdGlvbiByZXF1ZXN0cyBtYWRlIGJ5IHRoZSBuZXRmcy4gIFRoaXMgc3RydWN0IGlzIHRoZW4gcGFzc2VkIHRvIHRoZQorICAgICBiYWNrZW5kIHRvIGRvIHRoZSBvcGVyYXRpb24uICBUaGUgYmFja2VuZCBtYXkgZ2V0IGV4dHJhIHJlZnMgdG8gaXQgYnkKKyAgICAgY2FsbGluZyBmc2NhY2hlX2dldF9yZXRyaWV2YWwoKSBhbmQgcmVmcyBtYXkgYmUgZGlzY2FyZGVkIGJ5IGNhbGxpbmcKKyAgICAgZnNjYWNoZV9wdXRfcmV0cmlldmFsKCkuCisKKyAgICAgQSByZXRyaWV2YWwgb3BlcmF0aW9uIGNhbiBiZSB1c2VkIGJ5IHRoZSBiYWNrZW5kIHRvIGRvIHJldHJpZXZhbCB3b3JrLiAgVG8KKyAgICAgZG8gdGhpcywgdGhlIHJldHJpZXZhbC0+b3AucHJvY2Vzc29yIG1ldGhvZCBwb2ludGVyIHNob3VsZCBiZSBzZXQKKyAgICAgYXBwcm9wcmlhdGVseSBieSB0aGUgYmFja2VuZCBhbmQgZnNjYWNoZV9lbnF1ZXVlX3JldHJpZXZhbCgpIGNhbGxlZCB0bworICAgICBzdWJtaXQgaXQgdG8gdGhlIHRocmVhZCBwb29sLiAgQ2FjaGVGaWxlcywgZm9yIGV4YW1wbGUsIHVzZXMgdGhpcyB0byBxdWV1ZQorICAgICBwYWdlIGV4YW1pbmF0aW9uIHdoZW4gaXQgZGV0ZWN0cyBQR19sb2NrIGJlaW5nIGNsZWFyZWQuCisKKyAgICAgVGhlIHRvX2RvIGZpZWxkIGlzIGFuIGVtcHR5IGxpc3QgYXZhaWxhYmxlIGZvciB0aGUgY2FjaGUgYmFja2VuZCB0byB1c2UgYXMKKyAgICAgaXQgc2VlcyBmaXQuCisKKworICgqKSBGUy1DYWNoZSBzdG9yYWdlIG9wZXJhdGlvbiByZWNvcmQ6CisKKwlzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlIHsKKwkJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uIG9wOworCQlwZ29mZl90CQkJc3RvcmVfbGltaXQ7CisJCS4uLgorCX07CisKKyAgICAgQSBzdHJ1Y3R1cmUgb2YgdGhpcyB0eXBlIGlzIGFsbG9jYXRlZCBieSBGUy1DYWNoZSB0byByZWNvcmQgb3V0c3RhbmRpbmcKKyAgICAgd3JpdGVzIHRvIGJlIG1hZGUuICBGUy1DYWNoZSBpdHNlbGYgZW5xdWV1ZXMgdGhpcyBvcGVyYXRpb24gYW5kIGludm9rZXMKKyAgICAgdGhlIHdyaXRlX3BhZ2UoKSBtZXRob2Qgb24gdGhlIG9iamVjdCBhdCBhcHByb3ByaWF0ZSB0aW1lcyB0byBlZmZlY3QKKyAgICAgc3RvcmFnZS4KKworCis9PT09PT09PT09PT09PT09CitDQUNIRSBPUEVSQVRJT05TCis9PT09PT09PT09PT09PT09CisKK1RoZSBjYWNoZSBiYWNrZW5kIHByb3ZpZGVzIEZTLUNhY2hlIHdpdGggYSB0YWJsZSBvZiBvcGVyYXRpb25zIHRoYXQgY2FuIGJlCitwZXJmb3JtZWQgb24gdGhlIGRlbml6ZW5zIG9mIHRoZSBjYWNoZS4gIFRoZXNlIGFyZSBoZWxkIGluIGEgc3RydWN0dXJlIG9mIHR5cGU6CisKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZV9vcHMKKworICgqKSBOYW1lIG9mIGNhY2hlIHByb3ZpZGVyIFttYW5kYXRvcnldOgorCisJY29uc3QgY2hhciAqbmFtZQorCisgICAgIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgYW4gb3BlcmF0aW9uLCBidXQgc2hvdWxkIGJlIHBvaW50ZWQgYXQgYSBzdHJpbmcgbmFtaW5nCisgICAgIHRoZSBiYWNrZW5kLgorCisKKyAoKikgQWxsb2NhdGUgYSBuZXcgb2JqZWN0IFttYW5kYXRvcnldOgorCisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICooKmFsbG9jX29iamVjdCkoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlLAorCQkJCQkgICAgICAgc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCisKKyAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhbGxvY2F0ZSBhIGNhY2hlIG9iamVjdCByZXByZXNlbnRhdGlvbiB0byBiYWNrIGEKKyAgICAgY29va2llIGluIGEgcGFydGljdWxhciBjYWNoZS4gIGZzY2FjaGVfb2JqZWN0X2luaXQoKSBzaG91bGQgYmUgY2FsbGVkIG9uCisgICAgIHRoZSBvYmplY3QgdG8gaW5pdGlhbGlzZSBpdCBwcmlvciB0byByZXR1cm5pbmcuCisKKyAgICAgVGhpcyBmdW5jdGlvbiBtYXkgYWxzbyBiZSB1c2VkIHRvIHBhcnNlIHRoZSBpbmRleCBrZXkgdG8gYmUgdXNlZCBmb3IKKyAgICAgbXVsdGlwbGUgbG9va3VwIGNhbGxzIHRvIHR1cm4gaXQgaW50byBhIG1vcmUgY29udmVuaWVudCBmb3JtLiAgRlMtQ2FjaGUKKyAgICAgd2lsbCBjYWxsIHRoZSBsb29rdXBfY29tcGxldGUoKSBtZXRob2QgdG8gYWxsb3cgdGhlIGNhY2hlIHRvIHJlbGVhc2UgdGhlCisgICAgIGZvcm0gb25jZSBsb29rdXAgaXMgY29tcGxldGUgb3IgYWJvcnRlZC4KKworCisgKCopIExvb2sgdXAgYW5kIGNyZWF0ZSBvYmplY3QgW21hbmRhdG9yeV06CisKKwl2b2lkICgqbG9va3VwX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCisKKyAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCB0byBsb29rIHVwIGFuIG9iamVjdCwgZ2l2ZW4gdGhhdCB0aGUgb2JqZWN0IGlzIGFscmVhZHkKKyAgICAgYWxsb2NhdGVkIGFuZCBhdHRhY2hlZCB0byB0aGUgY29va2llLiAgVGhpcyBzaG91bGQgaW5zdGFudGlhdGUgdGhhdCBvYmplY3QKKyAgICAgaW4gdGhlIGNhY2hlIGlmIGl0IGNhbi4KKworICAgICBUaGUgbWV0aG9kIHNob3VsZCBjYWxsIGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9uZWdhdGl2ZSgpIGFzIHNvb24gYXMKKyAgICAgcG9zc2libGUgaWYgaXQgZGV0ZXJtaW5lcyB0aGUgb2JqZWN0IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGNhY2hlLiAgSWYgdGhlCisgICAgIG9iamVjdCBpcyBmb3VuZCB0byBleGlzdCBhbmQgdGhlIG5ldGZzIGluZGljYXRlcyB0aGF0IGl0IGlzIHZhbGlkIHRoZW4KKyAgICAgZnNjYWNoZV9vYnRhaW5lZF9vYmplY3QoKSBzaG91bGQgYmUgY2FsbGVkIG9uY2UgdGhlIG9iamVjdCBpcyBpbiBhCisgICAgIHBvc2l0aW9uIHRvIGhhdmUgZGF0YSBzdG9yZWQgaW4gaXQuICBTaW1pbGFybHksIGZzY2FjaGVfb2J0YWluZWRfb2JqZWN0KCkKKyAgICAgc2hvdWxkIGFsc28gYmUgY2FsbGVkIG9uY2UgYSBub24tcHJlc2VudCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZC4KKworICAgICBJZiBhIGxvb2t1cCBlcnJvciBvY2N1cnMsIGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9lcnJvcigpIHNob3VsZCBiZSBjYWxsZWQKKyAgICAgdG8gYWJvcnQgdGhlIGxvb2t1cCBvZiB0aGF0IG9iamVjdC4KKworCisgKCopIFJlbGVhc2UgbG9va3VwIGRhdGEgW21hbmRhdG9yeV06CisKKwl2b2lkICgqbG9va3VwX2NvbXBsZXRlKShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKKworICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gYXNrIHRoZSBjYWNoZSB0byByZWxlYXNlIGFueSByZXNvdXJjZXMgaXQgd2FzCisgICAgIHVzaW5nIHRvIHBlcmZvcm0gYSBsb29rdXAuCisKKworICgqKSBJbmNyZW1lbnQgb2JqZWN0IHJlZmNvdW50IFttYW5kYXRvcnldOgorCisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICooKmdyYWJfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKKworICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb24gYW4gb2JqZWN0LiAgSXQKKyAgICAgbWF5IGZhaWwgKGZvciBpbnN0YW5jZSBpZiB0aGUgY2FjaGUgaXMgYmVpbmcgd2l0aGRyYXduKSBieSByZXR1cm5pbmcgTlVMTC4KKyAgICAgSXQgc2hvdWxkIHJldHVybiB0aGUgb2JqZWN0IHBvaW50ZXIgaWYgc3VjY2Vzc2Z1bC4KKworCisgKCopIExvY2svVW5sb2NrIG9iamVjdCBbbWFuZGF0b3J5XToKKworCXZvaWQgKCpsb2NrX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCisJdm9pZCAoKnVubG9ja19vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQorCisgICAgIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgdG8gZXhjbHVzaXZlbHkgbG9jayBhbiBvYmplY3QuICBJdCBtdXN0IGJlIHBvc3NpYmxlCisgICAgIHRvIHNjaGVkdWxlIHdpdGggdGhlIGxvY2sgaGVsZCwgc28gYSBzcGlubG9jayBpc24ndCBzdWZmaWNpZW50LgorCisKKyAoKikgUGluL1VucGluIG9iamVjdCBbb3B0aW9uYWxdOgorCisJaW50ICgqcGluX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCisJdm9pZCAoKnVucGluX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCisKKyAgICAgVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBwaW4gYW4gb2JqZWN0IGludG8gdGhlIGNhY2hlLiAgT25jZSBwaW5uZWQgYW4KKyAgICAgb2JqZWN0IGNhbm5vdCBiZSByZWNsYWltZWQgdG8gbWFrZSBzcGFjZS4gIFJldHVybiAtRU5PU1BDIGlmIHRoZXJlJ3Mgbm90CisgICAgIGVub3VnaCBzcGFjZSBpbiB0aGUgY2FjaGUgdG8gcGVybWl0IHRoaXMuCisKKworICgqKSBVcGRhdGUgb2JqZWN0IFttYW5kYXRvcnldOgorCisJaW50ICgqdXBkYXRlX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCisKKyAgICAgVGhpcyBpcyBjYWxsZWQgdG8gdXBkYXRlIHRoZSBpbmRleCBlbnRyeSBmb3IgdGhlIHNwZWNpZmllZCBvYmplY3QuICBUaGUKKyAgICAgbmV3IGluZm9ybWF0aW9uIHNob3VsZCBiZSBpbiBvYmplY3QtPmNvb2tpZS0+bmV0ZnNfZGF0YS4gIFRoaXMgY2FuIGJlCisgICAgIG9idGFpbmVkIGJ5IGNhbGxpbmcgb2JqZWN0LT5jb29raWUtPmRlZi0+Z2V0X2F1eCgpL2dldF9hdHRyKCkuCisKKworICgqKSBEaXNjYXJkIG9iamVjdCBbbWFuZGF0b3J5XToKKworCXZvaWQgKCpkcm9wX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCisKKyAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGluZGljYXRlIHRoYXQgYW4gb2JqZWN0IGhhcyBiZWVuIHVuYm91bmQgZnJvbSBpdHMKKyAgICAgY29va2llLCBhbmQgdGhhdCB0aGUgY2FjaGUgc2hvdWxkIHJlbGVhc2UgdGhlIG9iamVjdCdzIHJlc291cmNlcyBhbmQKKyAgICAgcmV0aXJlIGl0IGlmIGl0J3MgaW4gc3RhdGUgRlNDQUNIRV9PQkpFQ1RfUkVDWUNMSU5HLgorCisgICAgIFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYXR0ZW1wdCB0byByZWxlYXNlIGFueSByZWZlcmVuY2VzIGhlbGQgYnkgdGhlCisgICAgIGNhbGxlci4gIFRoZSBjYWxsZXIgd2lsbCBpbnZva2UgdGhlIHB1dF9vYmplY3QoKSBtZXRob2QgYXMgYXBwcm9wcmlhdGUuCisKKworICgqKSBSZWxlYXNlIG9iamVjdCByZWZlcmVuY2UgW21hbmRhdG9yeV06CisKKwl2b2lkICgqcHV0X29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCisKKyAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCB0byBkaXNjYXJkIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdC4gIFRoZSBvYmplY3QgbWF5CisgICAgIGJlIGZyZWVkIHdoZW4gYWxsIHRoZSByZWZlcmVuY2VzIHRvIGl0IGFyZSByZWxlYXNlZC4KKworCisgKCopIFN5bmNocm9uaXNlIGEgY2FjaGUgW21hbmRhdG9yeV06CisKKwl2b2lkICgqc3luYykoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlKQorCisgICAgIFRoaXMgaXMgY2FsbGVkIHRvIGFzayB0aGUgYmFja2VuZCB0byBzeW5jaHJvbmlzZSBhIGNhY2hlIHdpdGggaXRzIGJhY2tpbmcKKyAgICAgZGV2aWNlLgorCisKKyAoKikgRGlzc29jaWF0ZSBhIGNhY2hlIFttYW5kYXRvcnldOgorCisJdm9pZCAoKmRpc3NvY2lhdGVfcGFnZXMpKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSkKKworICAgICBUaGlzIGlzIGNhbGxlZCB0byBhc2sgYSBjYWNoZSB0byBwZXJmb3JtIGFueSBwYWdlIGRpc3NvY2lhdGlvbnMgYXMgcGFydCBvZgorICAgICBjYWNoZSB3aXRoZHJhd2FsLgorCisKKyAoKikgTm90aWZpY2F0aW9uIHRoYXQgdGhlIGF0dHJpYnV0ZXMgb24gYSBuZXRmcyBmaWxlIGNoYW5nZWQgW21hbmRhdG9yeV06CisKKwlpbnQgKCphdHRyX2NoYW5nZWQpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworICAgICBUaGlzIGlzIGNhbGxlZCB0byBpbmRpY2F0ZSB0byB0aGUgY2FjaGUgdGhhdCBjZXJ0YWluIGF0dHJpYnV0ZXMgb24gYSBuZXRmcworICAgICBmaWxlIGhhdmUgY2hhbmdlZCAoZm9yIGV4YW1wbGUgdGhlIG1heGltdW0gc2l6ZSBhIGZpbGUgbWF5IHJlYWNoKS4gIFRoZQorICAgICBjYWNoZSBjYW4gcmVhZCB0aGVzZSBmcm9tIHRoZSBuZXRmcyBieSBjYWxsaW5nIHRoZSBjb29raWUncyBnZXRfYXR0cigpCisgICAgIG1ldGhvZC4KKworICAgICBUaGUgY2FjaGUgbWF5IHVzZSB0aGUgZmlsZSBzaXplIGluZm9ybWF0aW9uIHRvIHJlc2VydmUgc3BhY2Ugb24gdGhlIGNhY2hlLgorICAgICBJdCBzaG91bGQgYWxzbyBjYWxsIGZzY2FjaGVfc2V0X3N0b3JlX2xpbWl0KCkgdG8gaW5kaWNhdGUgdG8gRlMtQ2FjaGUgdGhlCisgICAgIGhpZ2hlc3QgYnl0ZSBpdCdzIHdpbGxpbmcgdG8gc3RvcmUgZm9yIGFuIG9iamVjdC4KKworICAgICBUaGlzIG1ldGhvZCBtYXkgcmV0dXJuIC12ZSBpZiBhbiBlcnJvciBvY2N1cnJlZCBvciB0aGUgY2FjaGUgb2JqZWN0IGNhbm5vdAorICAgICBiZSBleHBhbmRlZC4gIEluIHN1Y2ggYSBjYXNlLCB0aGUgb2JqZWN0IHdpbGwgYmUgd2l0aGRyYXduIGZyb20gc2VydmljZS4KKworICAgICBUaGlzIG9wZXJhdGlvbiBpcyBydW4gYXN5bmNocm9ub3VzbHkgZnJvbSBGUy1DYWNoZSdzIHRocmVhZCBwb29sLCBhbmQKKyAgICAgc3RvcmFnZSBhbmQgcmV0cmlldmFsIG9wZXJhdGlvbnMgZnJvbSB0aGUgbmV0ZnMgYXJlIGV4Y2x1ZGVkIGR1cmluZyB0aGUKKyAgICAgZXhlY3V0aW9uIG9mIHRoaXMgb3BlcmF0aW9uLgorCisKKyAoKikgUmVzZXJ2ZSBjYWNoZSBzcGFjZSBmb3IgYW4gb2JqZWN0J3MgZGF0YSBbb3B0aW9uYWxdOgorCisJaW50ICgqcmVzZXJ2ZV9zcGFjZSkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsIGxvZmZfdCBzaXplKTsKKworICAgICBUaGlzIGlzIGNhbGxlZCB0byByZXF1ZXN0IHRoYXQgY2FjaGUgc3BhY2UgYmUgcmVzZXJ2ZWQgdG8gaG9sZCB0aGUgZGF0YQorICAgICBmb3IgYW4gb2JqZWN0IGFuZCB0aGUgbWV0YWRhdGEgdXNlZCB0byB0cmFjayBpdC4gIFplcm8gc2l6ZSBzaG91bGQgYmUKKyAgICAgdGFrZW4gYXMgcmVxdWVzdCB0byBjYW5jZWwgYSByZXNlcnZhdGlvbi4KKworICAgICBUaGlzIHNob3VsZCByZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAtRU5PU1BDIGlmIHRoZXJlIGlzbid0IGVub3VnaCBzcGFjZQorICAgICBhdmFpbGFibGUsIG9yIC1FTk9NRU0gb3IgLUVJTyBvbiBvdGhlciBlcnJvcnMuCisKKyAgICAgVGhlIHJlc2VydmF0aW9uIG1heSBleGNlZWQgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgb2JqZWN0LCB0aHVzIHBlcm1pdHRpbmcKKyAgICAgZnV0dXJlIGV4cGFuc2lvbi4gIElmIHRoZSBhbW91bnQgb2Ygc3BhY2UgY29uc3VtZWQgYnkgYW4gb2JqZWN0IHdvdWxkCisgICAgIGV4Y2VlZCB0aGUgcmVzZXJ2YXRpb24sIGl0J3MgcGVybWl0dGVkIHRvIHJlZnVzZSByZXF1ZXN0cyB0byBhbGxvY2F0ZQorICAgICBwYWdlcywgYnV0IG5vdCByZXF1aXJlZC4gIEFuIG9iamVjdCBtYXkgYmUgcHJ1bmVkIGRvd24gdG8gaXRzIHJlc2VydmF0aW9uCisgICAgIHNpemUgaWYgbGFyZ2VyIHRoYW4gdGhhdCBhbHJlYWR5LgorCisKKyAoKikgUmVxdWVzdCBwYWdlIGJlIHJlYWQgZnJvbSBjYWNoZSBbbWFuZGF0b3J5XToKKworCWludCAoKnJlYWRfb3JfYWxsb2NfcGFnZSkoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgZ2ZwX3QgZ2ZwKQorCisgICAgIFRoaXMgaXMgY2FsbGVkIHRvIGF0dGVtcHQgdG8gcmVhZCBhIG5ldGZzIHBhZ2UgZnJvbSB0aGUgY2FjaGUsIG9yIHRvCisgICAgIHJlc2VydmUgYSBiYWNraW5nIGJsb2NrIGlmIG5vdC4gIEZTLUNhY2hlIHdpbGwgaGF2ZSBkb25lIGFzIG11Y2ggY2hlY2tpbmcKKyAgICAgYXMgaXQgY2FuIGJlZm9yZSBjYWxsaW5nLCBidXQgbW9zdCBvZiB0aGUgd29yayBiZWxvbmdzIHRvIHRoZSBiYWNrZW5kLgorCisgICAgIElmIHRoZXJlJ3Mgbm8gcGFnZSBpbiB0aGUgY2FjaGUsIHRoZW4gLUVOT0RBVEEgc2hvdWxkIGJlIHJldHVybmVkIGlmIHRoZQorICAgICBiYWNrZW5kIG1hbmFnZWQgdG8gcmVzZXJ2ZSBhIGJhY2tpbmcgYmxvY2s7IC1FTk9CVUZTIG9yIC1FTk9NRU0gaWYgaXQKKyAgICAgZGlkbid0LgorCisgICAgIElmIHRoZXJlIGlzIHN1aXRhYmxlIGRhdGEgaW4gdGhlIGNhY2hlLCB0aGVuIGEgcmVhZCBvcGVyYXRpb24gc2hvdWxkIGJlCisgICAgIHF1ZXVlZCBhbmQgMCByZXR1cm5lZC4gIFdoZW4gdGhlIHJlYWQgZmluaXNoZXMsIGZzY2FjaGVfZW5kX2lvKCkgc2hvdWxkIGJlCisgICAgIGNhbGxlZC4KKworICAgICBUaGUgZnNjYWNoZV9tYXJrX3BhZ2VzX2NhY2hlZCgpIHNob3VsZCBiZSBjYWxsZWQgZm9yIHRoZSBwYWdlIGlmIGFueSBjYWNoZQorICAgICBtZXRhZGF0YSBpcyByZXRhaW5lZC4gIFRoaXMgd2lsbCBpbmRpY2F0ZSB0byB0aGUgbmV0ZnMgdGhhdCB0aGUgcGFnZSBuZWVkcworICAgICBleHBsaWNpdCB1bmNhY2hpbmcuICBUaGlzIG9wZXJhdGlvbiB0YWtlcyBhIHBhZ2V2ZWMsIHRodXMgYWxsb3dpbmcgc2V2ZXJhbAorICAgICBwYWdlcyB0byBiZSBtYXJrZWQgYXQgb25jZS4KKworICAgICBUaGUgcmV0cmlldmFsIHJlY29yZCBwb2ludGVkIHRvIGJ5IG9wIHNob3VsZCBiZSByZXRhaW5lZCBmb3IgZWFjaCBwYWdlCisgICAgIHF1ZXVlZCBhbmQgcmVsZWFzZWQgd2hlbiBJL08gb24gdGhlIHBhZ2UgaGFzIGJlZW4gZm9ybWFsbHkgZW5kZWQuCisgICAgIGZzY2FjaGVfZ2V0L3B1dF9yZXRyaWV2YWwoKSBhcmUgYXZhaWxhYmxlIGZvciB0aGlzIHB1cnBvc2UuCisKKyAgICAgVGhlIHJldHJpZXZhbCByZWNvcmQgbWF5IGJlIHVzZWQgdG8gZ2V0IENQVSB0aW1lIHZpYSB0aGUgRlMtQ2FjaGUgdGhyZWFkCisgICAgIHBvb2wuICBJZiB0aGlzIGlzIGRlc2lyZWQsIHRoZSBvcC0+b3AucHJvY2Vzc29yIHNob3VsZCBiZSBzZXQgdG8gcG9pbnQgdG8KKyAgICAgdGhlIGFwcHJvcHJpYXRlIHByb2Nlc3Npbmcgcm91dGluZSwgYW5kIGZzY2FjaGVfZW5xdWV1ZV9yZXRyaWV2YWwoKSBzaG91bGQKKyAgICAgYmUgY2FsbGVkIGF0IGFuIGFwcHJvcHJpYXRlIHBvaW50IHRvIHJlcXVlc3QgQ1BVIHRpbWUuICBGb3IgaW5zdGFuY2UsIHRoZQorICAgICByZXRyaWV2YWwgcm91dGluZSBjb3VsZCBiZSBlbnF1ZXVlZCB1cG9uIHRoZSBjb21wbGV0aW9uIG9mIGEgZGlzayByZWFkLgorICAgICBUaGUgdG9fZG8gZmllbGQgaW4gdGhlIHJldHJpZXZhbCByZWNvcmQgaXMgcHJvdmlkZWQgdG8gYWlkIGluIHRoaXMuCisKKyAgICAgSWYgYW4gSS9PIGVycm9yIG9jY3VycywgZnNjYWNoZV9pb19lcnJvcigpIHNob3VsZCBiZSBjYWxsZWQgYW5kIC1FTk9CVUZTCisgICAgIHJldHVybmVkIGlmIHBvc3NpYmxlIG9yIGZzY2FjaGVfZW5kX2lvKCkgY2FsbGVkIHdpdGggYSBzdWl0YWJsZSBlcnJvcgorICAgICBjb2RlLi4KKworCisgKCopIFJlcXVlc3QgcGFnZXMgYmUgcmVhZCBmcm9tIGNhY2hlIFttYW5kYXRvcnldOgorCisJaW50ICgqcmVhZF9vcl9hbGxvY19wYWdlcykoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQkgICB1bnNpZ25lZCAqbnJfcGFnZXMsCisJCQkJICAgZ2ZwX3QgZ2ZwKQorCisgICAgIFRoaXMgaXMgbGlrZSB0aGUgcmVhZF9vcl9hbGxvY19wYWdlKCkgbWV0aG9kLCBleGNlcHQgaXQgaXMgaGFuZGVkIGEgbGlzdAorICAgICBvZiBwYWdlcyBpbnN0ZWFkIG9mIG9uZSBwYWdlLiAgQW55IHBhZ2VzIG9uIHdoaWNoIGEgcmVhZCBvcGVyYXRpb24gaXMKKyAgICAgc3RhcnRlZCBtdXN0IGJlIGFkZGVkIHRvIHRoZSBwYWdlIGNhY2hlIGZvciB0aGUgc3BlY2lmaWVkIG1hcHBpbmcgYW5kIGFsc28KKyAgICAgdG8gdGhlIExSVS4gIFN1Y2ggcGFnZXMgbXVzdCBhbHNvIGJlIHJlbW92ZWQgZnJvbSB0aGUgcGFnZXMgbGlzdCBhbmQKKyAgICAgKm5yX3BhZ2VzIGRlY3JlbWVudGVkIHBlciBwYWdlLgorCisgICAgIElmIHRoZXJlIHdhcyBhbiBlcnJvciBzdWNoIGFzIC1FTk9NRU0sIHRoZW4gdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQ7IGVsc2UKKyAgICAgaWYgb25lIG9yIG1vcmUgcGFnZXMgY291bGRuJ3QgYmUgcmVhZCBvciBhbGxvY2F0ZWQsIHRoZW4gLUVOT0JVRlMgc2hvdWxkCisgICAgIGJlIHJldHVybmVkOyBlbHNlIGlmIG9uZSBvciBtb3JlIHBhZ2VzIGNvdWxkbid0IGJlIHJlYWQsIHRoZW4gLUVOT0RBVEEKKyAgICAgc2hvdWxkIGJlIHJldHVybmVkLiAgSWYgYWxsIHRoZSBwYWdlcyBhcmUgZGlzcGF0Y2hlZCB0aGVuIDAgc2hvdWxkIGJlCisgICAgIHJldHVybmVkLgorCisKKyAoKikgUmVxdWVzdCBwYWdlIGJlIGFsbG9jYXRlZCBpbiB0aGUgY2FjaGUgW21hbmRhdG9yeV06CisKKwlpbnQgKCphbGxvY2F0ZV9wYWdlKShzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgZ2ZwX3QgZ2ZwKQorCisgICAgIFRoaXMgaXMgbGlrZSB0aGUgcmVhZF9vcl9hbGxvY19wYWdlKCkgbWV0aG9kLCBleGNlcHQgdGhhdCBpdCBzaG91bGRuJ3QKKyAgICAgcmVhZCBmcm9tIHRoZSBjYWNoZSwgZXZlbiBpZiB0aGVyZSdzIGRhdGEgdGhlcmUgdGhhdCBjb3VsZCBiZSByZXRyaWV2ZWQuCisgICAgIEl0IHNob3VsZCwgaG93ZXZlciwgc2V0IHVwIGFueSBpbnRlcm5hbCBtZXRhZGF0YSByZXF1aXJlZCBzdWNoIHRoYXQKKyAgICAgdGhlIHdyaXRlX3BhZ2UoKSBtZXRob2QgY2FuIHdyaXRlIHRvIHRoZSBjYWNoZS4KKworICAgICBJZiB0aGVyZSdzIG5vIGJhY2tpbmcgYmxvY2sgYXZhaWxhYmxlLCB0aGVuIC1FTk9CVUZTIHNob3VsZCBiZSByZXR1cm5lZAorICAgICAob3IgLUVOT01FTSBpZiB0aGVyZSB3ZXJlIG90aGVyIHByb2JsZW1zKS4gIElmIGEgYmxvY2sgaXMgc3VjY2Vzc2Z1bGx5CisgICAgIGFsbG9jYXRlZCwgdGhlbiB0aGUgbmV0ZnMgcGFnZSBzaG91bGQgYmUgbWFya2VkIGFuZCAwIHJldHVybmVkLgorCisKKyAoKikgUmVxdWVzdCBwYWdlcyBiZSBhbGxvY2F0ZWQgaW4gdGhlIGNhY2hlIFttYW5kYXRvcnldOgorCisJaW50ICgqYWxsb2NhdGVfcGFnZXMpKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsCisJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCSAgICAgIHVuc2lnbmVkICpucl9wYWdlcywKKwkJCSAgICAgIGdmcF90IGdmcCkKKworICAgICBUaGlzIGlzIGFuIG11bHRpcGxlIHBhZ2UgdmVyc2lvbiBvZiB0aGUgYWxsb2NhdGVfcGFnZSgpIG1ldGhvZC4gIHBhZ2VzIGFuZAorICAgICBucl9wYWdlcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBmb3IgdGhlIHJlYWRfb3JfYWxsb2NfcGFnZXMoKSBtZXRob2QuCisKKworICgqKSBSZXF1ZXN0IHBhZ2UgYmUgd3JpdHRlbiB0byBjYWNoZSBbbWFuZGF0b3J5XToKKworCWludCAoKndyaXRlX3BhZ2UpKHN0cnVjdCBmc2NhY2hlX3N0b3JhZ2UgKm9wLAorCQkJICBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKyAgICAgVGhpcyBpcyBjYWxsZWQgdG8gd3JpdGUgZnJvbSBhIHBhZ2Ugb24gd2hpY2ggdGhlcmUgd2FzIGEgcHJldmlvdXNseQorICAgICBzdWNjZXNzZnVsIHJlYWRfb3JfYWxsb2NfcGFnZSgpIGNhbGwgb3Igc2ltaWxhci4gIEZTLUNhY2hlIGZpbHRlcnMgb3V0CisgICAgIHBhZ2VzIHRoYXQgZG9uJ3QgaGF2ZSBtYXBwaW5ncy4KKworICAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXN5bmNocm9ub3VzbHkgZnJvbSB0aGUgRlMtQ2FjaGUgdGhyZWFkIHBvb2wuICBJdCBpcworICAgICBub3QgcmVxdWlyZWQgdG8gYWN0dWFsbHkgc3RvcmUgYW55dGhpbmcsIHByb3ZpZGVkIC1FTk9EQVRBIGlzIHRoZW4KKyAgICAgcmV0dXJuZWQgdG8gdGhlIG5leHQgcmVhZCBvZiB0aGlzIHBhZ2UuCisKKyAgICAgSWYgYW4gZXJyb3Igb2NjdXJyZWQsIHRoZW4gYSBuZWdhdGl2ZSBlcnJvciBjb2RlIHNob3VsZCBiZSByZXR1cm5lZCwKKyAgICAgb3RoZXJ3aXNlIHplcm8gc2hvdWxkIGJlIHJldHVybmVkLiAgRlMtQ2FjaGUgd2lsbCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbgorICAgICBpbiByZXNwb25zZSB0byBhbiBlcnJvciwgc3VjaCBhcyB3aXRoZHJhd2luZyB0aGlzIG9iamVjdC4KKworICAgICBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIHN1Y2Nlc3MgdGhlbiBGUy1DYWNoZSB3aWxsIGluZm9ybSB0aGUgbmV0ZnMKKyAgICAgYXBwcm9wcmlhdGVseS4KKworCisgKCopIERpc2NhcmQgcmV0YWluZWQgcGVyLXBhZ2UgbWV0YWRhdGEgW21hbmRhdG9yeV06CisKKwl2b2lkICgqdW5jYWNoZV9wYWdlKShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwgc3RydWN0IHBhZ2UgKnBhZ2UpCisKKyAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbiBhIG5ldGZzIHBhZ2UgaXMgYmVpbmcgZXZpY3RlZCBmcm9tIHRoZSBwYWdlY2FjaGUuICBUaGUKKyAgICAgY2FjaGUgYmFja2VuZCBzaG91bGQgdGVhciBkb3duIGFueSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvciB0cmFja2luZyBpdAorICAgICBtYWludGFpbnMgZm9yIHRoaXMgcGFnZS4KKworCis9PT09PT09PT09PT09PT09PT0KK0ZTLUNBQ0hFIFVUSUxJVElFUworPT09PT09PT09PT09PT09PT09CisKK0ZTLUNhY2hlIHByb3ZpZGVzIHNvbWUgdXRpbGl0aWVzIHRoYXQgYSBjYWNoZSBiYWNrZW5kIG1heSBtYWtlIHVzZSBvZjoKKworICgqKSBOb3RlIG9jY3VycmVuY2Ugb2YgYW4gSS9PIGVycm9yIGluIGEgY2FjaGU6CisKKwl2b2lkIGZzY2FjaGVfaW9fZXJyb3Ioc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlKQorCisgICAgIFRoaXMgdGVsbHMgRlMtQ2FjaGUgdGhhdCBhbiBJL08gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIGNhY2hlLiAgQWZ0ZXIgdGhpcworICAgICBoYXMgYmVlbiBjYWxsZWQsIG9ubHkgcmVzb3VyY2UgZGlzc29jaWF0aW9uIG9wZXJhdGlvbnMgKG9iamVjdCBhbmQgcGFnZQorICAgICByZWxlYXNlKSB3aWxsIGJlIHBhc3NlZCBmcm9tIHRoZSBuZXRmcyB0byB0aGUgY2FjaGUgYmFja2VuZCBmb3IgdGhlCisgICAgIHNwZWNpZmllZCBjYWNoZS4KKworICAgICBUaGlzIGRvZXMgbm90IGFjdHVhbGx5IHdpdGhkcmF3IHRoZSBjYWNoZS4gIFRoYXQgbXVzdCBiZSBkb25lIHNlcGFyYXRlbHkuCisKKworICgqKSBJbnZva2UgdGhlIHJldHJpZXZhbCBJL08gY29tcGxldGlvbiBmdW5jdGlvbjoKKworCXZvaWQgZnNjYWNoZV9lbmRfaW8oc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgaW50IGVycm9yKTsKKworICAgICBUaGlzIGlzIGNhbGxlZCB0byBub3RlIHRoZSBlbmQgb2YgYW4gYXR0ZW1wdCB0byByZXRyaWV2ZSBhIHBhZ2UuICBUaGUKKyAgICAgZXJyb3IgdmFsdWUgc2hvdWxkIGJlIDAgaWYgc3VjY2Vzc2Z1bCBhbmQgYW4gZXJyb3Igb3RoZXJ3aXNlLgorCisKKyAoKikgU2V0IGhpZ2hlc3Qgc3RvcmUgbGltaXQ6CisKKwl2b2lkIGZzY2FjaGVfc2V0X3N0b3JlX2xpbWl0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJCSAgICAgbG9mZl90IGlfc2l6ZSk7CisKKyAgICAgVGhpcyBzZXRzIHRoZSBsaW1pdCBGUy1DYWNoZSBpbXBvc2VzIG9uIHRoZSBoaWdoZXN0IGJ5dGUgaXQncyB3aWxsaW5nIHRvCisgICAgIHRyeSBhbmQgc3RvcmUgZm9yIGEgbmV0ZnMuICBBbnkgcGFnZSBvdmVyIHRoaXMgbGltaXQgaXMgYXV0b21hdGljYWxseQorICAgICByZWplY3RlZCBieSBmc2NhY2hlX3JlYWRfYWxsb2NfcGFnZSgpIGFuZCBjbyB3aXRoIC1FTk9CVUZTLgorCisKKyAoKikgTWFyayBwYWdlcyBhcyBiZWluZyBjYWNoZWQ6CisKKwl2b2lkIGZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkgICAgICAgc3RydWN0IHBhZ2V2ZWMgKnBhZ2V2ZWMpOworCisgICAgIFRoaXMgbWFya3MgYSBzZXQgb2YgcGFnZXMgYXMgYmVpbmcgY2FjaGVkLiAgQWZ0ZXIgdGhpcyBoYXMgYmVlbiBjYWxsZWQsCisgICAgIHRoZSBuZXRmcyBtdXN0IGNhbGwgZnNjYWNoZV91bmNhY2hlX3BhZ2UoKSB0byB1bm1hcmsgdGhlIHBhZ2VzLgorCisKKyAoKikgUGVyZm9ybSBjb2hlcmVuY3kgY2hlY2sgb24gYW4gb2JqZWN0OgorCisJZW51bSBmc2NhY2hlX2NoZWNrYXV4IGZzY2FjaGVfY2hlY2tfYXV4KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJCQkJY29uc3Qgdm9pZCAqZGF0YSwKKwkJCQkJCXVpbnQxNl90IGRhdGFsZW4pOworCisgICAgIFRoaXMgYXNrcyB0aGUgbmV0ZnMgdG8gcGVyZm9ybSBhIGNvaGVyZW5jeSBjaGVjayBvbiBhbiBvYmplY3QgdGhhdCBoYXMKKyAgICAganVzdCBiZWVuIGxvb2tlZCB1cC4gIFRoZSBjb29raWUgYXR0YWNoZWQgdG8gdGhlIG9iamVjdCB3aWxsIGRldGVybWluZSB0aGUKKyAgICAgbmV0ZnMgdG8gdXNlLiAgZGF0YSBhbmQgZGF0YWxlbiBzaG91bGQgc3BlY2lmeSB3aGVyZSB0aGUgYXV4aWxpYXJ5IGRhdGEKKyAgICAgcmV0cmlldmVkIGZyb20gdGhlIGNhY2hlIGNhbiBiZSBmb3VuZC4KKworICAgICBPbmUgb2YgdGhyZWUgdmFsdWVzIHdpbGwgYmUgcmV0dXJuZWQ6CisKKwkoKikgRlNDQUNIRV9DSEVDS0FVWF9PS0FZCisKKwkgICAgVGhlIGNvaGVyZW5jeSBkYXRhIGluZGljYXRlcyB0aGUgb2JqZWN0IGlzIHZhbGlkIGFzIGlzLgorCisJKCopIEZTQ0FDSEVfQ0hFQ0tBVVhfTkVFRFNfVVBEQVRFCisKKwkgICAgVGhlIGNvaGVyZW5jeSBkYXRhIG5lZWRzIHVwZGF0aW5nLCBidXQgb3RoZXJ3aXNlIHRoZSBvYmplY3QgaXMKKwkgICAgdmFsaWQuCisKKwkoKikgRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURQorCisJICAgIFRoZSBjb2hlcmVuY3kgZGF0YSBpbmRpY2F0ZXMgdGhhdCB0aGUgb2JqZWN0IGlzIG9ic29sZXRlIGFuZCBzaG91bGQKKwkgICAgYmUgZGlzY2FyZGVkLgorCisKKyAoKikgSW5pdGlhbGlzZSBhIGZyZXNobHkgYWxsb2NhdGVkIG9iamVjdDoKKworCXZvaWQgZnNjYWNoZV9vYmplY3RfaW5pdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKyAgICAgVGhpcyBpbml0aWFsaXNlcyBhbGwgdGhlIGZpZWxkcyBpbiBhbiBvYmplY3QgcmVwcmVzZW50YXRpb24uCisKKworICgqKSBJbmRpY2F0ZSB0aGUgZGVzdHJ1Y3Rpb24gb2YgYW4gb2JqZWN0OgorCisJdm9pZCBmc2NhY2hlX29iamVjdF9kZXN0cm95ZWQoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlKTsKKworICAgICBUaGlzIG11c3QgYmUgY2FsbGVkIHRvIGluZm9ybSBGUy1DYWNoZSB0aGF0IGFuIG9iamVjdCB0aGF0IGJlbG9uZ2VkIHRvIGEKKyAgICAgY2FjaGUgaGFzIGJlZW4gZGVzdHJveWVkIGFuZCBkZWFsbG9jYXRlZC4gIFRoaXMgd2lsbCBhbGxvdyBjb250aW51YXRpb24KKyAgICAgb2YgdGhlIGNhY2hlIHdpdGhkcmF3YWwgcHJvY2VzcyB3aGVuIGl0IGlzIHN0b3BwZWQgcGVuZGluZyBkZXN0cnVjdGlvbiBvZgorICAgICBhbGwgdGhlIG9iamVjdHMuCisKKworICgqKSBJbmRpY2F0ZSBuZWdhdGl2ZSBsb29rdXAgb24gYW4gb2JqZWN0OgorCisJdm9pZCBmc2NhY2hlX29iamVjdF9sb29rdXBfbmVnYXRpdmUoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisgICAgIFRoaXMgaXMgY2FsbGVkIHRvIGluZGljYXRlIHRvIEZTLUNhY2hlIHRoYXQgYSBsb29rdXAgcHJvY2VzcyBmb3IgYW4gb2JqZWN0CisgICAgIGZvdW5kIGEgbmVnYXRpdmUgcmVzdWx0LgorCisgICAgIFRoaXMgY2hhbmdlcyB0aGUgc3RhdGUgb2YgYW4gb2JqZWN0IHRvIHBlcm1pdCByZWFkcyBwZW5kaW5nIG9uIGxvb2t1cAorICAgICBjb21wbGV0aW9uIHRvIGdvIG9mZiBhbmQgc3RhcnQgZmV0Y2hpbmcgZGF0YSBmcm9tIHRoZSBuZXRmcyBzZXJ2ZXIgYXMgaXQncworICAgICBrbm93biBhdCB0aGlzIHBvaW50IHRoYXQgdGhlcmUgY2FuJ3QgYmUgYW55IGRhdGEgaW4gdGhlIGNhY2hlLgorCisgICAgIFRoaXMgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBvbiBhbiBvYmplY3QuICBPbmx5IHRoZSBmaXJzdCBjYWxsIGlzCisgICAgIHNpZ25pZmljYW50IC0gYWxsIHN1YnNlcXVlbnQgY2FsbHMgYXJlIGlnbm9yZWQuCisKKworICgqKSBJbmRpY2F0ZSBhbiBvYmplY3QgaGFzIGJlZW4gb2J0YWluZWQ6CisKKwl2b2lkIGZzY2FjaGVfb2J0YWluZWRfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworICAgICBUaGlzIGlzIGNhbGxlZCB0byBpbmRpY2F0ZSB0byBGUy1DYWNoZSB0aGF0IGEgbG9va3VwIHByb2Nlc3MgZm9yIGFuIG9iamVjdAorICAgICBwcm9kdWNlZCBhIHBvc2l0aXZlIHJlc3VsdCwgb3IgdGhhdCBhbiBvYmplY3Qgd2FzIGNyZWF0ZWQuICBUaGlzIHNob3VsZAorICAgICBvbmx5IGJlIGNhbGxlZCBvbmNlIGZvciBhbnkgcGFydGljdWxhciBvYmplY3QuCisKKyAgICAgVGhpcyBjaGFuZ2VzIHRoZSBzdGF0ZSBvZiBhbiBvYmplY3QgdG8gaW5kaWNhdGU6CisKKwkoMSkgaWYgbm8gY2FsbCB0byBmc2NhY2hlX29iamVjdF9sb29rdXBfbmVnYXRpdmUoKSBoYXMgYmVlbiBtYWRlIG9uCisJICAgIHRoaXMgb2JqZWN0LCB0aGF0IHRoZXJlIG1heSBiZSBkYXRhIGF2YWlsYWJsZSwgYW5kIHRoYXQgcmVhZHMgY2FuCisJICAgIG5vdyBnbyBhbmQgbG9vayBmb3IgaXQ7IGFuZAorCisgICAgICAgICgyKSB0aGF0IHdyaXRlcyBtYXkgbm93IHByb2NlZWQgYWdhaW5zdCB0aGlzIG9iamVjdC4KKworCisgKCopIEluZGljYXRlIHRoYXQgb2JqZWN0IGxvb2t1cCBmYWlsZWQ6CisKKwl2b2lkIGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9lcnJvcihzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKyAgICAgVGhpcyBtYXJrcyBhbiBvYmplY3QgYXMgaGF2aW5nIGVuY291bnRlcmVkIGEgZmF0YWwgZXJyb3IgKHVzdWFsbHkgRUlPKQorICAgICBhbmQgY2F1c2VzIGl0IHRvIG1vdmUgaW50byBhIHN0YXRlIHdoZXJlYnkgaXQgd2lsbCBiZSB3aXRoZHJhd24gYXMgc29vbgorICAgICBhcyBwb3NzaWJsZS4KKworCisgKCopIEdldCBhbmQgcmVsZWFzZSByZWZlcmVuY2VzIG9uIGEgcmV0cmlldmFsIHJlY29yZDoKKworCXZvaWQgZnNjYWNoZV9nZXRfcmV0cmlldmFsKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3ApOworCXZvaWQgZnNjYWNoZV9wdXRfcmV0cmlldmFsKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3ApOworCisgICAgIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gcmV0YWluIGEgcmV0cmlldmFsIHJlY29yZCB3aGlsc3QgZG9pbmcKKyAgICAgYXN5bmNocm9ub3VzIGRhdGEgcmV0cmlldmFsIGFuZCBibG9jayBhbGxvY2F0aW9uLgorCisKKyAoKikgRW5xdWV1ZSBhIHJldHJpZXZhbCByZWNvcmQgZm9yIHByb2Nlc3NpbmcuCisKKwl2b2lkIGZzY2FjaGVfZW5xdWV1ZV9yZXRyaWV2YWwoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCk7CisKKyAgICAgVGhpcyBlbnF1ZXVlcyBhIHJldHJpZXZhbCByZWNvcmQgZm9yIHByb2Nlc3NpbmcgYnkgdGhlIEZTLUNhY2hlIHRocmVhZAorICAgICBwb29sLiAgT25lIG9mIHRoZSB0aHJlYWRzIGluIHRoZSBwb29sIHdpbGwgaW52b2tlIHRoZSByZXRyaWV2YWwgcmVjb3JkJ3MKKyAgICAgb3AtPm9wLnByb2Nlc3NvciBjYWxsYmFjayBmdW5jdGlvbi4gIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tCisgICAgIHdpdGhpbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uCisKKworICgqKSBMaXN0IG9mIG9iamVjdCBzdGF0ZSBuYW1lczoKKworCWNvbnN0IGNoYXIgKmZzY2FjaGVfb2JqZWN0X3N0YXRlc1tdOworCisgICAgIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHRoaXMgbWF5IGJlIHVzZWQgdG8gdHVybiB0aGUgc3RhdGUgdGhhdCBhbiBvYmplY3QKKyAgICAgaXMgaW4gaW50byBhIHRleHQgc3RyaW5nIGZvciBkaXNwbGF5IHB1cnBvc2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2NhY2hlZmlsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2NhY2hlZmlsZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OGE0OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvY2FjaGVmaWxlcy50eHQKQEAgLTAsMCArMSw1MDEgQEAKKwkgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgICAgICAgQ2FjaGVGaWxlczogQ0FDSEUgT04gQUxSRUFEWSBNT1VOVEVEIEZJTEVTWVNURU0KKwkgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ29udGVudHM6CisKKyAoKikgT3ZlcnZpZXcuCisKKyAoKikgUmVxdWlyZW1lbnRzLgorCisgKCopIENvbmZpZ3VyYXRpb24uCisKKyAoKikgU3RhcnRpbmcgdGhlIGNhY2hlLgorCisgKCopIFRoaW5ncyB0byBhdm9pZC4KKworICgqKSBDYWNoZSBjdWxsaW5nLgorCisgKCopIENhY2hlIHN0cnVjdHVyZS4KKworICgqKSBTZWN1cml0eSBtb2RlbCBhbmQgU0VMaW51eC4KKworICgqKSBBIG5vdGUgb24gc2VjdXJpdHkuCisKKyAoKikgU3RhdGlzdGljYWwgaW5mb3JtYXRpb24uCisKKyAoKikgRGVidWdnaW5nLgorCisKKz09PT09PT09CitPVkVSVklFVworPT09PT09PT0KKworQ2FjaGVGaWxlcyBpcyBhIGNhY2hpbmcgYmFja2VuZCB0aGF0J3MgbWVhbnQgdG8gdXNlIGFzIGEgY2FjaGUgYSBkaXJlY3Rvcnkgb24KK2FuIGFscmVhZHkgbW91bnRlZCBmaWxlc3lzdGVtIG9mIGEgbG9jYWwgdHlwZSAoc3VjaCBhcyBFeHQzKS4KKworQ2FjaGVGaWxlcyB1c2VzIGEgdXNlcnNwYWNlIGRhZW1vbiB0byBkbyBzb21lIG9mIHRoZSBjYWNoZSBtYW5hZ2VtZW50IC0gc3VjaCBhcworcmVhcGluZyBzdGFsZSBub2RlcyBhbmQgY3VsbGluZy4gIFRoaXMgaXMgY2FsbGVkIGNhY2hlZmlsZXNkIGFuZCBsaXZlcyBpbgorL3NiaW4uCisKK1RoZSBmaWxlc3lzdGVtIGFuZCBkYXRhIGludGVncml0eSBvZiB0aGUgY2FjaGUgYXJlIG9ubHkgYXMgZ29vZCBhcyB0aG9zZSBvZiB0aGUKK2ZpbGVzeXN0ZW0gcHJvdmlkaW5nIHRoZSBiYWNraW5nIHNlcnZpY2VzLiAgTm90ZSB0aGF0IENhY2hlRmlsZXMgZG9lcyBub3QKK2F0dGVtcHQgdG8gam91cm5hbCBhbnl0aGluZyBzaW5jZSB0aGUgam91cm5hbGxpbmcgaW50ZXJmYWNlcyBvZiB0aGUgdmFyaW91cworZmlsZXN5c3RlbXMgYXJlIHZlcnkgc3BlY2lmaWMgaW4gbmF0dXJlLgorCitDYWNoZUZpbGVzIGNyZWF0ZXMgYSBtaXNjIGNoYXJhY3RlciBkZXZpY2UgLSAiL2Rldi9jYWNoZWZpbGVzIiAtIHRoYXQgaXMgdXNlZAordG8gY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBkYWVtb24uICBPbmx5IG9uZSB0aGluZyBtYXkgaGF2ZSB0aGlzIG9wZW4gYXQgb25jZSwKK2FuZCB3aGlsc3QgaXQgaXMgb3BlbiwgYSBjYWNoZSBpcyBhdCBsZWFzdCBwYXJ0aWFsbHkgaW4gZXhpc3RlbmNlLiAgVGhlIGRhZW1vbgorb3BlbnMgdGhpcyBhbmQgc2VuZHMgY29tbWFuZHMgZG93biBpdCB0byBjb250cm9sIHRoZSBjYWNoZS4KKworQ2FjaGVGaWxlcyBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBhIHNpbmdsZSBjYWNoZS4KKworQ2FjaGVGaWxlcyBhdHRlbXB0cyB0byBtYWludGFpbiBhdCBsZWFzdCBhIGNlcnRhaW4gcGVyY2VudGFnZSBvZiBmcmVlIHNwYWNlIG9uCit0aGUgZmlsZXN5c3RlbSwgc2hyaW5raW5nIHRoZSBjYWNoZSBieSBjdWxsaW5nIHRoZSBvYmplY3RzIGl0IGNvbnRhaW5zIHRvIG1ha2UKK3NwYWNlIGlmIG5lY2Vzc2FyeSAtIHNlZSB0aGUgIkNhY2hlIEN1bGxpbmciIHNlY3Rpb24uICBUaGlzIG1lYW5zIGl0IGNhbiBiZQorcGxhY2VkIG9uIHRoZSBzYW1lIG1lZGl1bSBhcyBhIGxpdmUgc2V0IG9mIGRhdGEsIGFuZCB3aWxsIGV4cGFuZCB0byBtYWtlIHVzZSBvZgorc3BhcmUgc3BhY2UgYW5kIGF1dG9tYXRpY2FsbHkgY29udHJhY3Qgd2hlbiB0aGUgc2V0IG9mIGRhdGEgcmVxdWlyZXMgbW9yZQorc3BhY2UuCisKKworPT09PT09PT09PT09CitSRVFVSVJFTUVOVFMKKz09PT09PT09PT09PQorCitUaGUgdXNlIG9mIENhY2hlRmlsZXMgYW5kIGl0cyBkYWVtb24gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlcyB0byBiZQorYXZhaWxhYmxlIGluIHRoZSBzeXN0ZW0gYW5kIGluIHRoZSBjYWNoZSBmaWxlc3lzdGVtOgorCisJLSBkbm90aWZ5LgorCisJLSBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpLgorCisJLSBvcGVuYXQoKSBhbmQgZnJpZW5kcy4KKworCS0gYm1hcCgpIHN1cHBvcnQgb24gZmlsZXMgaW4gdGhlIGZpbGVzeXN0ZW0gKEZJQk1BUCBpb2N0bCkuCisKKwktIFRoZSB1c2Ugb2YgYm1hcCgpIHRvIGRldGVjdCBhIHBhcnRpYWwgcGFnZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCitJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHRoZSAiZGlyX2luZGV4IiBvcHRpb24gaXMgZW5hYmxlZCBvbiBFeHQzCitmaWxlc3lzdGVtcyBiZWluZyB1c2VkIGFzIGEgY2FjaGUuCisKKworPT09PT09PT09PT09PQorQ09ORklHVVJBVElPTgorPT09PT09PT09PT09PQorCitUaGUgY2FjaGUgaXMgY29uZmlndXJlZCBieSBhIHNjcmlwdCBpbiAvZXRjL2NhY2hlZmlsZXNkLmNvbmYuICBUaGVzZSBjb21tYW5kcworc2V0IHVwIGNhY2hlIHJlYWR5IGZvciB1c2UuICBUaGUgZm9sbG93aW5nIHNjcmlwdCBjb21tYW5kcyBhcmUgYXZhaWxhYmxlOgorCisgKCopIGJydW4gPE4+JQorICgqKSBiY3VsbCA8Tj4lCisgKCopIGJzdG9wIDxOPiUKKyAoKikgZnJ1biA8Tj4lCisgKCopIGZjdWxsIDxOPiUKKyAoKikgZnN0b3AgPE4+JQorCisJQ29uZmlndXJlIHRoZSBjdWxsaW5nIGxpbWl0cy4gIE9wdGlvbmFsLiAgU2VlIHRoZSBzZWN0aW9uIG9uIGN1bGxpbmcKKwlUaGUgZGVmYXVsdHMgYXJlIDclIChydW4pLCA1JSAoY3VsbCkgYW5kIDElIChzdG9wKSByZXNwZWN0aXZlbHkuCisKKwlUaGUgY29tbWFuZHMgYmVnaW5uaW5nIHdpdGggYSAnYicgYXJlIGZpbGUgc3BhY2UgKGJsb2NrKSBsaW1pdHMsIHRob3NlCisJYmVnaW5uaW5nIHdpdGggYW4gJ2YnIGFyZSBmaWxlIGNvdW50IGxpbWl0cy4KKworICgqKSBkaXIgPHBhdGg+CisKKwlTcGVjaWZ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcm9vdCBvZiB0aGUgY2FjaGUuICBNYW5kYXRvcnkuCisKKyAoKikgdGFnIDxuYW1lPgorCisJU3BlY2lmeSBhIHRhZyB0byBGUy1DYWNoZSB0byB1c2UgaW4gZGlzdGluZ3Vpc2hpbmcgbXVsdGlwbGUgY2FjaGVzLgorCU9wdGlvbmFsLiAgVGhlIGRlZmF1bHQgaXMgIkNhY2hlRmlsZXMiLgorCisgKCopIGRlYnVnIDxtYXNrPgorCisJU3BlY2lmeSBhIG51bWVyaWMgYml0bWFzayB0byBjb250cm9sIGRlYnVnZ2luZyBpbiB0aGUga2VybmVsIG1vZHVsZS4KKwlPcHRpb25hbC4gIFRoZSBkZWZhdWx0IGlzIHplcm8gKGFsbCBvZmYpLiAgVGhlIGZvbGxvd2luZyB2YWx1ZXMgY2FuIGJlCisJT1InZCBpbnRvIHRoZSBtYXNrIHRvIGNvbGxlY3QgdmFyaW91cyBpbmZvcm1hdGlvbjoKKworCQkxCVR1cm4gb24gdHJhY2Ugb2YgZnVuY3Rpb24gZW50cnkgKF9lbnRlcigpIG1hY3JvcykKKwkJMglUdXJuIG9uIHRyYWNlIG9mIGZ1bmN0aW9uIGV4aXQgKF9sZWF2ZSgpIG1hY3JvcykKKwkJNAlUdXJuIG9uIHRyYWNlIG9mIGludGVybmFsIGRlYnVnIHBvaW50cyAoX2RlYnVnKCkpCisKKwlUaGlzIG1hc2sgY2FuIGFsc28gYmUgc2V0IHRocm91Z2ggc3lzZnMsIGVnOgorCisJCWVjaG8gNSA+L3N5cy9tb2R1bGVzL2NhY2hlZmlsZXMvcGFyYW1ldGVycy9kZWJ1ZworCisKKz09PT09PT09PT09PT09PT09PQorU1RBUlRJTkcgVEhFIENBQ0hFCis9PT09PT09PT09PT09PT09PT0KKworVGhlIGNhY2hlIGlzIHN0YXJ0ZWQgYnkgcnVubmluZyB0aGUgZGFlbW9uLiAgVGhlIGRhZW1vbiBvcGVucyB0aGUgY2FjaGUgZGV2aWNlLAorY29uZmlndXJlcyB0aGUgY2FjaGUgYW5kIHRlbGxzIGl0IHRvIGJlZ2luIGNhY2hpbmcuICBBdCB0aGF0IHBvaW50IHRoZSBjYWNoZQorYmluZHMgdG8gZnNjYWNoZSBhbmQgdGhlIGNhY2hlIGJlY29tZXMgbGl2ZS4KKworVGhlIGRhZW1vbiBpcyBydW4gYXMgZm9sbG93czoKKworCS9zYmluL2NhY2hlZmlsZXNkIFstZF0qIFstc10gWy1uXSBbLWYgPGNvbmZpZ2ZpbGU+XQorCitUaGUgZmxhZ3MgYXJlOgorCisgKCopIC1kCisKKwlJbmNyZWFzZSB0aGUgZGVidWdnaW5nIGxldmVsLiAgVGhpcyBjYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzIGFuZAorCWlzIGN1bXVsYXRpdmUgd2l0aCBpdHNlbGYuCisKKyAoKikgLXMKKworCVNlbmQgbWVzc2FnZXMgdG8gc3RkZXJyIGluc3RlYWQgb2Ygc3lzbG9nLgorCisgKCopIC1uCisKKwlEb24ndCBkYWVtb25pc2UgYW5kIGdvIGludG8gYmFja2dyb3VuZC4KKworICgqKSAtZiA8Y29uZmlnZmlsZT4KKworCVVzZSBhbiBhbHRlcm5hdGl2ZSBjb25maWd1cmF0aW9uIGZpbGUgcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgb25lLgorCisKKz09PT09PT09PT09PT09PQorVEhJTkdTIFRPIEFWT0lECis9PT09PT09PT09PT09PT0KKworRG8gbm90IG1vdW50IG90aGVyIHRoaW5ncyB3aXRoaW4gdGhlIGNhY2hlIGFzIHRoaXMgd2lsbCBjYXVzZSBwcm9ibGVtcy4gIFRoZQora2VybmVsIG1vZHVsZSBjb250YWlucyBpdHMgb3duIHZlcnkgY3V0LWRvd24gcGF0aCB3YWxraW5nIGZhY2lsaXR5IHRoYXQgaWdub3JlcworbW91bnRwb2ludHMsIGJ1dCB0aGUgZGFlbW9uIGNhbid0IGF2b2lkIHRoZW0uCisKK0RvIG5vdCBjcmVhdGUsIHJlbmFtZSBvciB1bmxpbmsgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGluIHRoZSBjYWNoZSB3aGlsc3QgdGhlCitjYWNoZSBpcyBhY3RpdmUsIGFzIHRoaXMgbWF5IGNhdXNlIHRoZSBzdGF0ZSB0byBiZWNvbWUgdW5jZXJ0YWluLgorCitSZW5hbWluZyBmaWxlcyBpbiB0aGUgY2FjaGUgbWlnaHQgbWFrZSBvYmplY3RzIGFwcGVhciB0byBiZSBvdGhlciBvYmplY3RzICh0aGUKK2ZpbGVuYW1lIGlzIHBhcnQgb2YgdGhlIGxvb2t1cCBrZXkpLgorCitEbyBub3QgY2hhbmdlIG9yIHJlbW92ZSB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlcyBhdHRhY2hlZCB0byBjYWNoZSBmaWxlcyBieSB0aGUKK2NhY2hlIGFzIHRoaXMgd2lsbCBjYXVzZSB0aGUgY2FjaGUgc3RhdGUgbWFuYWdlbWVudCB0byBnZXQgY29uZnVzZWQuCisKK0RvIG5vdCBjcmVhdGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMgaW4gdGhlIGNhY2hlLCBsZXN0IHRoZSBjYWNoZSBnZXQgY29uZnVzZWQgb3IKK3NlcnZlIGluY29ycmVjdCBkYXRhLgorCitEbyBub3QgY2htb2QgZmlsZXMgaW4gdGhlIGNhY2hlLiAgVGhlIG1vZHVsZSBjcmVhdGVzIHRoaW5ncyB3aXRoIG1pbmltYWwKK3Blcm1pc3Npb25zIHRvIHByZXZlbnQgcmFuZG9tIHVzZXJzIGJlaW5nIGFibGUgdG8gYWNjZXNzIHRoZW0gZGlyZWN0bHkuCisKKworPT09PT09PT09PT09PQorQ0FDSEUgQ1VMTElORworPT09PT09PT09PT09PQorCitUaGUgY2FjaGUgbWF5IG5lZWQgY3VsbGluZyBvY2Nhc2lvbmFsbHkgdG8gbWFrZSBzcGFjZS4gIFRoaXMgaW52b2x2ZXMKK2Rpc2NhcmRpbmcgb2JqZWN0cyBmcm9tIHRoZSBjYWNoZSB0aGF0IGhhdmUgYmVlbiB1c2VkIGxlc3MgcmVjZW50bHkgdGhhbgorYW55dGhpbmcgZWxzZS4gIEN1bGxpbmcgaXMgYmFzZWQgb24gdGhlIGFjY2VzcyB0aW1lIG9mIGRhdGEgb2JqZWN0cy4gIEVtcHR5CitkaXJlY3RvcmllcyBhcmUgY3VsbGVkIGlmIG5vdCBpbiB1c2UuCisKK0NhY2hlIGN1bGxpbmcgaXMgZG9uZSBvbiB0aGUgYmFzaXMgb2YgdGhlIHBlcmNlbnRhZ2Ugb2YgYmxvY2tzIGFuZCB0aGUKK3BlcmNlbnRhZ2Ugb2YgZmlsZXMgYXZhaWxhYmxlIGluIHRoZSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0uICBUaGVyZSBhcmUgc2l4CisibGltaXRzIjoKKworICgqKSBicnVuCisgKCopIGZydW4KKworICAgICBJZiB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2UgYW5kIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGZpbGVzIGluIHRoZSBjYWNoZQorICAgICByaXNlcyBhYm92ZSBib3RoIHRoZXNlIGxpbWl0cywgdGhlbiBjdWxsaW5nIGlzIHR1cm5lZCBvZmYuCisKKyAoKikgYmN1bGwKKyAoKikgZmN1bGwKKworICAgICBJZiB0aGUgYW1vdW50IG9mIGF2YWlsYWJsZSBzcGFjZSBvciB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBmaWxlcyBpbiB0aGUKKyAgICAgY2FjaGUgZmFsbHMgYmVsb3cgZWl0aGVyIG9mIHRoZXNlIGxpbWl0cywgdGhlbiBjdWxsaW5nIGlzIHN0YXJ0ZWQuCisKKyAoKikgYnN0b3AKKyAoKikgZnN0b3AKKworICAgICBJZiB0aGUgYW1vdW50IG9mIGF2YWlsYWJsZSBzcGFjZSBvciB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBmaWxlcyBpbiB0aGUKKyAgICAgY2FjaGUgZmFsbHMgYmVsb3cgZWl0aGVyIG9mIHRoZXNlIGxpbWl0cywgdGhlbiBubyBmdXJ0aGVyIGFsbG9jYXRpb24gb2YKKyAgICAgZGlzayBzcGFjZSBvciBmaWxlcyBpcyBwZXJtaXR0ZWQgdW50aWwgY3VsbGluZyBoYXMgcmFpc2VkIHRoaW5ncyBhYm92ZQorICAgICB0aGVzZSBsaW1pdHMgYWdhaW4uCisKK1RoZXNlIG11c3QgYmUgY29uZmlndXJlZCB0aHVzbHk6CisKKwkwIDw9IGJzdG9wIDwgYmN1bGwgPCBicnVuIDwgMTAwCisJMCA8PSBmc3RvcCA8IGZjdWxsIDwgZnJ1biA8IDEwMAorCitOb3RlIHRoYXQgdGhlc2UgYXJlIHBlcmNlbnRhZ2VzIG9mIGF2YWlsYWJsZSBzcGFjZSBhbmQgYXZhaWxhYmxlIGZpbGVzLCBhbmQgZG8KK19ub3RfIGFwcGVhciBhcyAxMDAgbWludXMgdGhlIHBlcmNlbnRhZ2UgZGlzcGxheWVkIGJ5IHRoZSAiZGYiIHByb2dyYW0uCisKK1RoZSB1c2Vyc3BhY2UgZGFlbW9uIHNjYW5zIHRoZSBjYWNoZSB0byBidWlsZCB1cCBhIHRhYmxlIG9mIGN1bGxhYmxlIG9iamVjdHMuCitUaGVzZSBhcmUgdGhlbiBjdWxsZWQgaW4gbGVhc3QgcmVjZW50bHkgdXNlZCBvcmRlci4gIEEgbmV3IHNjYW4gb2YgdGhlIGNhY2hlIGlzCitzdGFydGVkIGFzIHNvb24gYXMgc3BhY2UgaXMgbWFkZSBpbiB0aGUgdGFibGUuICBPYmplY3RzIHdpbGwgYmUgc2tpcHBlZCBpZgordGhlaXIgYXRpbWVzIGhhdmUgY2hhbmdlZCBvciBpZiB0aGUga2VybmVsIG1vZHVsZSBzYXlzIGl0IGlzIHN0aWxsIHVzaW5nIHRoZW0uCisKKworPT09PT09PT09PT09PT09CitDQUNIRSBTVFJVQ1RVUkUKKz09PT09PT09PT09PT09PQorCitUaGUgQ2FjaGVGaWxlcyBtb2R1bGUgd2lsbCBjcmVhdGUgdHdvIGRpcmVjdG9yaWVzIGluIHRoZSBkaXJlY3RvcnkgaXQgd2FzCitnaXZlbjoKKworICgqKSBjYWNoZS8KKworICgqKSBncmF2ZXlhcmQvCisKK1RoZSBhY3RpdmUgY2FjaGUgb2JqZWN0cyBhbGwgcmVzaWRlIGluIHRoZSBmaXJzdCBkaXJlY3RvcnkuICBUaGUgQ2FjaGVGaWxlcwora2VybmVsIG1vZHVsZSBtb3ZlcyBhbnkgcmV0aXJlZCBvciBjdWxsZWQgb2JqZWN0cyB0aGF0IGl0IGNhbid0IHNpbXBseSB1bmxpbmsKK3RvIHRoZSBncmF2ZXlhcmQgZnJvbSB3aGljaCB0aGUgZGFlbW9uIHdpbGwgYWN0dWFsbHkgZGVsZXRlIHRoZW0uCisKK1RoZSBkYWVtb24gdXNlcyBkbm90aWZ5IHRvIG1vbml0b3IgdGhlIGdyYXZleWFyZCBkaXJlY3RvcnksIGFuZCB3aWxsIGRlbGV0ZQorYW55dGhpbmcgdGhhdCBhcHBlYXJzIHRoZXJlaW4uCisKKworVGhlIG1vZHVsZSByZXByZXNlbnRzIGluZGV4IG9iamVjdHMgYXMgZGlyZWN0b3JpZXMgd2l0aCB0aGUgZmlsZW5hbWUgIkkuLi4iIG9yCisiSi4uLiIuICBOb3RlIHRoYXQgdGhlICJjYWNoZS8iIGRpcmVjdG9yeSBpcyBpdHNlbGYgYSBzcGVjaWFsIGluZGV4LgorCitEYXRhIG9iamVjdHMgYXJlIHJlcHJlc2VudGVkIGFzIGZpbGVzIGlmIHRoZXkgaGF2ZSBubyBjaGlsZHJlbiwgb3IgZGlyZWN0b3JpZXMKK2lmIHRoZXkgZG8uICBUaGVpciBmaWxlbmFtZXMgYWxsIGJlZ2luICJELi4uIiBvciAiRS4uLiIuICBJZiByZXByZXNlbnRlZCBhcyBhCitkaXJlY3RvcnksIGRhdGEgb2JqZWN0cyB3aWxsIGhhdmUgYSBmaWxlIGluIHRoZSBkaXJlY3RvcnkgY2FsbGVkICJkYXRhIiB0aGF0CithY3R1YWxseSBob2xkcyB0aGUgZGF0YS4KKworU3BlY2lhbCBvYmplY3RzIGFyZSBzaW1pbGFyIHRvIGRhdGEgb2JqZWN0cywgZXhjZXB0IHRoZWlyIGZpbGVuYW1lcyBiZWdpbgorIlMuLi4iIG9yICJULi4uIi4KKworCitJZiBhbiBvYmplY3QgaGFzIGNoaWxkcmVuLCB0aGVuIGl0IHdpbGwgYmUgcmVwcmVzZW50ZWQgYXMgYSBkaXJlY3RvcnkuCitJbW1lZGlhdGVseSBpbiB0aGUgcmVwcmVzZW50YXRpdmUgZGlyZWN0b3J5IGFyZSBhIGNvbGxlY3Rpb24gb2YgZGlyZWN0b3JpZXMKK25hbWVkIGZvciBoYXNoIHZhbHVlcyBvZiB0aGUgY2hpbGQgb2JqZWN0IGtleXMgd2l0aCBhbiAnQCcgcHJlcGVuZGVkLiAgSW50bwordGhpcyBkaXJlY3RvcnksIGlmIHBvc3NpYmxlLCB3aWxsIGJlIHBsYWNlZCB0aGUgcmVwcmVzZW50YXRpb25zIG9mIHRoZSBjaGlsZAorb2JqZWN0czoKKworCUlOREVYICAgICBJTkRFWCAgICAgIElOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQVRBIEZJTEVTCisJPT09PT09PT09ID09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT0KKwljYWNoZS9ANGEvSTAzbmZzL0AzMC9KaTAwMDAwMDAwMDAwMDAwMC0tZkhnOGhpODQwMAorCWNhY2hlL0A0YS9JMDNuZnMvQDMwL0ppMDAwMDAwMDAwMDAwMDAwLS1mSGc4aGk4NDAwL0A3NS9FczBnMDAwdy4uLkRCMXJ5CisJY2FjaGUvQDRhL0kwM25mcy9AMzAvSmkwMDAwMDAwMDAwMDAwMDAtLWZIZzhoaTg0MDAvQDc1L0VzMGcwMDB3Li4uTjIycnkKKwljYWNoZS9ANGEvSTAzbmZzL0AzMC9KaTAwMDAwMDAwMDAwMDAwMC0tZkhnOGhpODQwMC9ANzUvRXMwZzAwMHcuLi5GUDFyeQorCisKK0lmIHRoZSBrZXkgaXMgc28gbG9uZyB0aGF0IGl0IGV4Y2VlZHMgTkFNRV9NQVggd2l0aCB0aGUgZGVjb3JhdGlvbnMgYWRkZWQgb24gdG8KK2l0LCB0aGVuIGl0IHdpbGwgYmUgY3V0IGludG8gcGllY2VzLCB0aGUgZmlyc3QgZmV3IG9mIHdoaWNoIHdpbGwgYmUgdXNlZCB0bworbWFrZSBhIG5lc3Qgb2YgZGlyZWN0b3JpZXMsIGFuZCB0aGUgbGFzdCBvbmUgb2Ygd2hpY2ggd2lsbCBiZSB0aGUgb2JqZWN0cworaW5zaWRlIHRoZSBsYXN0IGRpcmVjdG9yeS4gIFRoZSBuYW1lcyBvZiB0aGUgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzIHdpbGwgaGF2ZQorJysnIHByZXBlbmRlZDoKKworCUoxMjIzL0AyMy8reHkuLi56LytrbC4uLm0vRXBxcgorCisKK05vdGUgdGhhdCBrZXlzIGFyZSByYXcgZGF0YSwgYW5kIG5vdCBvbmx5IG1heSB0aGV5IGV4Y2VlZCBOQU1FX01BWCBpbiBzaXplLAordGhleSBtYXkgYWxzbyBjb250YWluIHRoaW5ncyBsaWtlICcvJyBhbmQgTlVMIGNoYXJhY3RlcnMsIGFuZCBzbyB0aGV5IG1heSBub3QKK2JlIHN1aXRhYmxlIGZvciB0dXJuaW5nIGRpcmVjdGx5IGludG8gYSBmaWxlbmFtZS4KKworVG8gaGFuZGxlIHRoaXMsIENhY2hlRmlsZXMgd2lsbCB1c2UgYSBzdWl0YWJseSBwcmludGFibGUgZmlsZW5hbWUgZGlyZWN0bHkgYW5kCisiYmFzZS02NCIgZW5jb2RlIG9uZXMgdGhhdCBhcmVuJ3QgZGlyZWN0bHkgc3VpdGFibGUuICBUaGUgdHdvIHZlcnNpb25zIG9mCitvYmplY3QgZmlsZW5hbWVzIGluZGljYXRlIHRoZSBlbmNvZGluZzoKKworCU9CSkVDVCBUWVBFCVBSSU5UQUJMRQlFTkNPREVECisJPT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PQk9PT09PT09PT09PT09PT0KKwlJbmRleAkJIkkuLi4iCQkiSi4uLiIKKwlEYXRhCQkiRC4uLiIJCSJFLi4uIgorCVNwZWNpYWwJCSJTLi4uIgkJIlQuLi4iCisKK0ludGVybWVkaWF0ZSBkaXJlY3RvcmllcyBhcmUgYWx3YXlzICJAIiBvciAiKyIgYXMgYXBwcm9wcmlhdGUuCisKKworRWFjaCBvYmplY3QgaW4gdGhlIGNhY2hlIGhhcyBhbiBleHRlbmRlZCBhdHRyaWJ1dGUgbGFiZWwgdGhhdCBob2xkcyB0aGUgb2JqZWN0Cit0eXBlIElEIChyZXF1aXJlZCB0byBkaXN0aW5ndWlzaCBzcGVjaWFsIG9iamVjdHMpIGFuZCB0aGUgYXV4aWxpYXJ5IGRhdGEgZnJvbQordGhlIG5ldGZzLiAgVGhlIGxhdHRlciBpcyB1c2VkIHRvIGRldGVjdCBzdGFsZSBvYmplY3RzIGluIHRoZSBjYWNoZSBhbmQgdXBkYXRlCitvciByZXRpcmUgdGhlbS4KKworCitOb3RlIHRoYXQgQ2FjaGVGaWxlcyB3aWxsIGVyYXNlIGZyb20gdGhlIGNhY2hlIGFueSBmaWxlIGl0IGRvZXNuJ3QgcmVjb2duaXNlIG9yCithbnkgZmlsZSBvZiBhbiBpbmNvcnJlY3QgdHlwZSAoc3VjaCBhcyBhIEZJRk8gZmlsZSBvciBhIGRldmljZSBmaWxlKS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorU0VDVVJJVFkgTU9ERUwgQU5EIFNFTElOVVgKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NhY2hlRmlsZXMgaXMgaW1wbGVtZW50ZWQgdG8gZGVhbCBwcm9wZXJseSB3aXRoIHRoZSBMU00gc2VjdXJpdHkgZmVhdHVyZXMgb2YKK3RoZSBMaW51eCBrZXJuZWwgYW5kIHRoZSBTRUxpbnV4IGZhY2lsaXR5LgorCitPbmUgb2YgdGhlIHByb2JsZW1zIHRoYXQgQ2FjaGVGaWxlcyBmYWNlcyBpcyB0aGF0IGl0IGlzIGdlbmVyYWxseSBhY3Rpbmcgb24KK2JlaGFsZiBvZiBhIHByb2Nlc3MsIGFuZCBydW5uaW5nIGluIHRoYXQgcHJvY2VzcydzIGNvbnRleHQsIGFuZCB0aGF0IGluY2x1ZGVzIGEKK3NlY3VyaXR5IGNvbnRleHQgdGhhdCBpcyBub3QgYXBwcm9wcmlhdGUgZm9yIGFjY2Vzc2luZyB0aGUgY2FjaGUgLSBlaXRoZXIKK2JlY2F1c2UgdGhlIGZpbGVzIGluIHRoZSBjYWNoZSBhcmUgaW5hY2Nlc3NpYmxlIHRvIHRoYXQgcHJvY2Vzcywgb3IgYmVjYXVzZSBpZgordGhlIHByb2Nlc3MgY3JlYXRlcyBhIGZpbGUgaW4gdGhlIGNhY2hlLCB0aGF0IGZpbGUgbWF5IGJlIGluYWNjZXNzaWJsZSB0byBvdGhlcgorcHJvY2Vzc2VzLgorCitUaGUgd2F5IENhY2hlRmlsZXMgd29ya3MgaXMgdG8gdGVtcG9yYXJpbHkgY2hhbmdlIHRoZSBzZWN1cml0eSBjb250ZXh0IChmc3VpZCwKK2ZzZ2lkIGFuZCBhY3RvciBzZWN1cml0eSBsYWJlbCkgdGhhdCB0aGUgcHJvY2VzcyBhY3RzIGFzIC0gd2l0aG91dCBjaGFuZ2luZyB0aGUKK3NlY3VyaXR5IGNvbnRleHQgb2YgdGhlIHByb2Nlc3Mgd2hlbiBpdCB0aGUgdGFyZ2V0IG9mIGFuIG9wZXJhdGlvbiBwZXJmb3JtZWQgYnkKK3NvbWUgb3RoZXIgcHJvY2VzcyAoc28gc2lnbmFsbGluZyBhbmQgc3VjaGxpa2Ugc3RpbGwgd29yayBjb3JyZWN0bHkpLgorCisKK1doZW4gdGhlIENhY2hlRmlsZXMgbW9kdWxlIGlzIGFza2VkIHRvIGJpbmQgdG8gaXRzIGNhY2hlLCBpdDoKKworICgxKSBGaW5kcyB0aGUgc2VjdXJpdHkgbGFiZWwgYXR0YWNoZWQgdG8gdGhlIHJvb3QgY2FjaGUgZGlyZWN0b3J5IGFuZCB1c2VzCisgICAgIHRoYXQgYXMgdGhlIHNlY3VyaXR5IGxhYmVsIHdpdGggd2hpY2ggaXQgd2lsbCBjcmVhdGUgZmlsZXMuICBCeSBkZWZhdWx0LAorICAgICB0aGlzIGlzOgorCisJY2FjaGVmaWxlc192YXJfdAorCisgKDIpIEZpbmRzIHRoZSBzZWN1cml0eSBsYWJlbCBvZiB0aGUgcHJvY2VzcyB3aGljaCBpc3N1ZWQgdGhlIGJpbmQgcmVxdWVzdAorICAgICAocHJlc3VtZWQgdG8gYmUgdGhlIGNhY2hlZmlsZXNkIGRhZW1vbiksIHdoaWNoIGJ5IGRlZmF1bHQgd2lsbCBiZToKKworCWNhY2hlZmlsZXNkX3QKKworICAgICBhbmQgYXNrcyBMU00gdG8gc3VwcGx5IGEgc2VjdXJpdHkgSUQgYXMgd2hpY2ggaXQgc2hvdWxkIGFjdCBnaXZlbiB0aGUKKyAgICAgZGFlbW9uJ3MgbGFiZWwuICBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgYmU6CisKKwljYWNoZWZpbGVzX2tlcm5lbF90CisKKyAgICAgU0VMaW51eCB0cmFuc2l0aW9ucyB0aGUgZGFlbW9uJ3Mgc2VjdXJpdHkgSUQgdG8gdGhlIG1vZHVsZSdzIHNlY3VyaXR5IElECisgICAgIGJhc2VkIG9uIGEgcnVsZSBvZiB0aGlzIGZvcm0gaW4gdGhlIHBvbGljeS4KKworCXR5cGVfdHJhbnNpdGlvbiA8ZGFlbW9uJ3MtSUQ+IGtlcm5lbF90IDogcHJvY2VzcyA8bW9kdWxlJ3MtSUQ+OworCisgICAgIEZvciBpbnN0YW5jZToKKworCXR5cGVfdHJhbnNpdGlvbiBjYWNoZWZpbGVzZF90IGtlcm5lbF90IDogcHJvY2VzcyBjYWNoZWZpbGVzX2tlcm5lbF90OworCisKK1RoZSBtb2R1bGUncyBzZWN1cml0eSBJRCBnaXZlcyBpdCBwZXJtaXNzaW9uIHRvIGNyZWF0ZSwgbW92ZSBhbmQgcmVtb3ZlIGZpbGVzCithbmQgZGlyZWN0b3JpZXMgaW4gdGhlIGNhY2hlLCB0byBmaW5kIGFuZCBhY2Nlc3MgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIHRoZQorY2FjaGUsIHRvIHNldCBhbmQgYWNjZXNzIGV4dGVuZGVkIGF0dHJpYnV0ZXMgb24gY2FjaGUgb2JqZWN0cywgYW5kIHRvIHJlYWQgYW5kCit3cml0ZSBmaWxlcyBpbiB0aGUgY2FjaGUuCisKK1RoZSBkYWVtb24ncyBzZWN1cml0eSBJRCBnaXZlcyBpdCBvbmx5IGEgdmVyeSByZXN0cmljdGVkIHNldCBvZiBwZXJtaXNzaW9uczogaXQKK21heSBzY2FuIGRpcmVjdG9yaWVzLCBzdGF0IGZpbGVzIGFuZCBlcmFzZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuICBJdCBtYXkKK25vdCByZWFkIG9yIHdyaXRlIGZpbGVzIGluIHRoZSBjYWNoZSwgYW5kIHNvIGl0IGlzIHByZWNsdWRlZCBmcm9tIGFjY2Vzc2luZyB0aGUKK2RhdGEgY2FjaGVkIHRoZXJlaW47IG5vciBpcyBpdCBwZXJtaXR0ZWQgdG8gY3JlYXRlIG5ldyBmaWxlcyBpbiB0aGUgY2FjaGUuCisKKworVGhlcmUgYXJlIHBvbGljeSBzb3VyY2UgZmlsZXMgYXZhaWxhYmxlIGluOgorCisJaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL35kaG93ZWxscy9mc2NhY2hlL2NhY2hlZmlsZXNkLTAuOC50YXIuYnoyCisKK2FuZCBsYXRlciB2ZXJzaW9ucy4gIEluIHRoYXQgdGFyYmFsbCwgc2VlIHRoZSBmaWxlczoKKworCWNhY2hlZmlsZXNkLnRlCisJY2FjaGVmaWxlc2QuZmMKKwljYWNoZWZpbGVzZC5pZgorCitUaGV5IGFyZSBidWlsdCBhbmQgaW5zdGFsbGVkIGRpcmVjdGx5IGJ5IHRoZSBSUE0uCisKK0lmIGEgbm9uLVJQTSBiYXNlZCBzeXN0ZW0gaXMgYmVpbmcgdXNlZCwgdGhlbiBjb3B5IHRoZSBhYm92ZSBmaWxlcyB0byB0aGVpciBvd24KK2RpcmVjdG9yeSBhbmQgcnVuOgorCisJbWFrZSAtZiAvdXNyL3NoYXJlL3NlbGludXgvZGV2ZWwvTWFrZWZpbGUKKwlzZW1vZHVsZSAtaSBjYWNoZWZpbGVzZC5wcAorCitZb3Ugd2lsbCBuZWVkIGNoZWNrcG9saWN5IGFuZCBzZWxpbnV4LXBvbGljeS1kZXZlbCBpbnN0YWxsZWQgcHJpb3IgdG8gdGhlCitidWlsZC4KKworCitCeSBkZWZhdWx0LCB0aGUgY2FjaGUgaXMgbG9jYXRlZCBpbiAvdmFyL2ZzY2FjaGUsIGJ1dCBpZiBpdCBpcyBkZXNpcmFibGUgdGhhdAoraXQgc2hvdWxkIGJlIGVsc2V3aGVyZSwgdGhhbiBlaXRoZXIgdGhlIGFib3ZlIHBvbGljeSBmaWxlcyBtdXN0IGJlIGFsdGVyZWQsIG9yCithbiBhdXhpbGlhcnkgcG9saWN5IG11c3QgYmUgaW5zdGFsbGVkIHRvIGxhYmVsIHRoZSBhbHRlcm5hdGUgbG9jYXRpb24gb2YgdGhlCitjYWNoZS4KKworRm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gYWRkIGFuIGF1eGlsaWFyeSBwb2xpY3kgdG8gZW5hYmxlIHRoZSBjYWNoZSB0byBiZQorbG9jYXRlZCBlbHNld2hlcmUgd2hlbiBTRUxpbnV4IGlzIGluIGVuZm9yY2luZyBtb2RlLCBwbGVhc2Ugc2VlOgorCisJL3Vzci9zaGFyZS9kb2MvY2FjaGVmaWxlc2QtKi9tb3ZlLWNhY2hlLnR4dAorCitXaGVuIHRoZSBjYWNoZWZpbGVzZCBycG0gaXMgaW5zdGFsbGVkOyBhbHRlcm5hdGl2ZWx5LCB0aGUgZG9jdW1lbnQgY2FuIGJlIGZvdW5kCitpbiB0aGUgc291cmNlcy4KKworCis9PT09PT09PT09PT09PT09PT0KK0EgTk9URSBPTiBTRUNVUklUWQorPT09PT09PT09PT09PT09PT09CisKK0NhY2hlRmlsZXMgbWFrZXMgdXNlIG9mIHRoZSBzcGxpdCBzZWN1cml0eSBpbiB0aGUgdGFza19zdHJ1Y3QuICBJdCBhbGxvY2F0ZXMKK2l0cyBvd24gdGFza19zZWN1cml0eSBzdHJ1Y3R1cmUsIGFuZCByZWRpcmVjdHMgY3VycmVudC0+YWN0X2FzIHRvIHBvaW50IHRvIGl0Cit3aGVuIGl0IGFjdHMgb24gYmVoYWxmIG9mIGFub3RoZXIgcHJvY2VzcywgaW4gdGhhdCBwcm9jZXNzJ3MgY29udGV4dC4KKworVGhlIHJlYXNvbiBpdCBkb2VzIHRoaXMgaXMgdGhhdCBpdCBjYWxscyB2ZnNfbWtkaXIoKSBhbmQgc3VjaGxpa2UgcmF0aGVyIHRoYW4KK2J5cGFzc2luZyBzZWN1cml0eSBhbmQgY2FsbGluZyBpbm9kZSBvcHMgZGlyZWN0bHkuICBUaGVyZWZvcmUgdGhlIFZGUyBhbmQgTFNNCittYXkgZGVueSB0aGUgQ2FjaGVGaWxlcyBhY2Nlc3MgdG8gdGhlIGNhY2hlIGRhdGEgYmVjYXVzZSB1bmRlciBzb21lCitjaXJjdW1zdGFuY2VzIHRoZSBjYWNoaW5nIGNvZGUgaXMgcnVubmluZyBpbiB0aGUgc2VjdXJpdHkgY29udGV4dCBvZiB3aGF0ZXZlcgorcHJvY2VzcyBpc3N1ZWQgdGhlIG9yaWdpbmFsIHN5c2NhbGwgb24gdGhlIG5ldGZzLgorCitGdXJ0aGVybW9yZSwgc2hvdWxkIENhY2hlRmlsZXMgY3JlYXRlIGEgZmlsZSBvciBkaXJlY3RvcnksIHRoZSBzZWN1cml0eQorcGFyYW1ldGVycyB3aXRoIHRoYXQgb2JqZWN0IGlzIGNyZWF0ZWQgKFVJRCwgR0lELCBzZWN1cml0eSBsYWJlbCkgd291bGQgYmUKK2Rlcml2ZWQgZnJvbSB0aGF0IHByb2Nlc3MgdGhhdCBpc3N1ZWQgdGhlIHN5c3RlbSBjYWxsLCB0aHVzIHBvdGVudGlhbGx5CitwcmV2ZW50aW5nIG90aGVyIHByb2Nlc3NlcyBmcm9tIGFjY2Vzc2luZyB0aGUgY2FjaGUgLSBpbmNsdWRpbmcgQ2FjaGVGaWxlcydzCitjYWNoZSBtYW5hZ2VtZW50IGRhZW1vbiAoY2FjaGVmaWxlc2QpLgorCitXaGF0IGlzIHJlcXVpcmVkIGlzIHRvIHRlbXBvcmFyaWx5IG92ZXJyaWRlIHRoZSBzZWN1cml0eSBvZiB0aGUgcHJvY2VzcyB0aGF0Citpc3N1ZWQgdGhlIHN5c3RlbSBjYWxsLiAgV2UgY2FuJ3QsIGhvd2V2ZXIsIGp1c3QgZG8gYW4gaW4tcGxhY2UgY2hhbmdlIG9mIHRoZQorc2VjdXJpdHkgZGF0YSBhcyB0aGF0IGFmZmVjdHMgdGhlIHByb2Nlc3MgYXMgYW4gb2JqZWN0LCBub3QganVzdCBhcyBhIHN1YmplY3QuCitUaGlzIG1lYW5zIGl0IG1heSBsb3NlIHNpZ25hbHMgb3IgcHRyYWNlIGV2ZW50cyBmb3IgZXhhbXBsZSwgYW5kIGFmZmVjdHMgd2hhdAordGhlIHByb2Nlc3MgbG9va3MgbGlrZSBpbiAvcHJvYy4KKworU28gQ2FjaGVGaWxlcyBtYWtlcyB1c2Ugb2YgYSBsb2dpY2FsIHNwbGl0IGluIHRoZSBzZWN1cml0eSBiZXR3ZWVuIHRoZQorb2JqZWN0aXZlIHNlY3VyaXR5ICh0YXNrLT5zZWMpIGFuZCB0aGUgc3ViamVjdGl2ZSBzZWN1cml0eSAodGFzay0+YWN0X2FzKS4gIFRoZQorb2JqZWN0aXZlIHNlY3VyaXR5IGhvbGRzIHRoZSBpbnRyaW5zaWMgc2VjdXJpdHkgcHJvcGVydGllcyBvZiBhIHByb2Nlc3MgYW5kIGlzCituZXZlciBvdmVycmlkZGVuLiAgVGhpcyBpcyB3aGF0IGFwcGVhcnMgaW4gL3Byb2MsIGFuZCBpcyB3aGF0IGlzIHVzZWQgd2hlbiBhCitwcm9jZXNzIGlzIHRoZSB0YXJnZXQgb2YgYW4gb3BlcmF0aW9uIGJ5IHNvbWUgb3RoZXIgcHJvY2VzcyAoU0lHS0lMTCBmb3IKK2V4YW1wbGUpLgorCitUaGUgc3ViamVjdGl2ZSBzZWN1cml0eSBob2xkcyB0aGUgYWN0aXZlIHNlY3VyaXR5IHByb3BlcnRpZXMgb2YgYSBwcm9jZXNzLCBhbmQKK21heSBiZSBvdmVycmlkZGVuLiAgVGhpcyBpcyBub3Qgc2VlbiBleHRlcm5hbGx5LCBhbmQgaXMgdXNlZCB3aGFuIGEgcHJvY2VzcworYWN0cyB1cG9uIGFub3RoZXIgb2JqZWN0LCBmb3IgZXhhbXBsZSBTSUdLSUxMaW5nIGFub3RoZXIgcHJvY2VzcyBvciBvcGVuaW5nIGEKK2ZpbGUuCisKK0xTTSBob29rcyBleGlzdCB0aGF0IGFsbG93IFNFTGludXggKG9yIFNtYWNrIG9yIHdoYXRldmVyKSB0byByZWplY3QgYSByZXF1ZXN0Citmb3IgQ2FjaGVGaWxlcyB0byBydW4gaW4gYSBjb250ZXh0IG9mIGEgc3BlY2lmaWMgc2VjdXJpdHkgbGFiZWwsIG9yIHRvIGNyZWF0ZQorZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpdGggYW5vdGhlciBzZWN1cml0eSBsYWJlbC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PQorU1RBVElTVElDQUwgSU5GT1JNQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIEZTLUNhY2hlIGlzIGNvbXBpbGVkIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb24gZW5hYmxlZDoKKworCUNPTkZJR19DQUNIRUZJTEVTX0hJU1RPR1JBTT15CisKK3RoZW4gaXQgd2lsbCBnYXRoZXIgY2VydGFpbiBzdGF0aXN0aWNzIGFuZCBkaXNwbGF5IHRoZW0gdGhyb3VnaCBhIHByb2MgZmlsZS4KKworICgqKSAvcHJvYy9mcy9jYWNoZWZpbGVzL2hpc3RvZ3JhbQorCisJY2F0IC9wcm9jL2ZzL2NhY2hlZmlsZXMvaGlzdG9ncmFtCisJSklGUyAgU0VDUyAgTE9PS1VQUyAgIE1LRElSUyAgICBDUkVBVEVTCisJPT09PT0gPT09PT0gPT09PT09PT09ID09PT09PT09PSA9PT09PT09PT0KKworICAgICBUaGlzIHNob3dzIHRoZSBicmVha2Rvd24gb2YgdGhlIG51bWJlciBvZiB0aW1lcyBlYWNoIGFtb3VudCBvZiB0aW1lCisgICAgIGJldHdlZW4gMCBqaWZmaWVzIGFuZCBIWi0xIGppZmZpZXMgYSB2YXJpZXR5IG9mIHRhc2tzIHRvb2sgdG8gcnVuLiAgVGhlCisgICAgIGNvbHVtbnMgYXJlIGFzIGZvbGxvd3M6CisKKwlDT0xVTU4JCVRJTUUgTUVBU1VSRU1FTlQKKwk9PT09PT09CQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJTE9PS1VQUwkJTGVuZ3RoIG9mIHRpbWUgdG8gcGVyZm9ybSBhIGxvb2t1cCBvbiB0aGUgYmFja2luZyBmcworCU1LRElSUwkJTGVuZ3RoIG9mIHRpbWUgdG8gcGVyZm9ybSBhIG1rZGlyIG9uIHRoZSBiYWNraW5nIGZzCisJQ1JFQVRFUwkJTGVuZ3RoIG9mIHRpbWUgdG8gcGVyZm9ybSBhIGNyZWF0ZSBvbiB0aGUgYmFja2luZyBmcworCisgICAgIEVhY2ggcm93IHNob3dzIHRoZSBudW1iZXIgb2YgZXZlbnRzIHRoYXQgdG9vayBhIHBhcnRpY3VsYXIgcmFuZ2Ugb2YgdGltZXMuCisgICAgIEVhY2ggc3RlcCBpcyAxIGppZmZ5IGluIHNpemUuICBUaGUgSklGUyBjb2x1bW4gaW5kaWNhdGVzIHRoZSBwYXJ0aWN1bGFyCisgICAgIGppZmZ5IHJhbmdlIGNvdmVyZWQsIGFuZCB0aGUgU0VDUyBmaWVsZCB0aGUgZXF1aXZhbGVudCBudW1iZXIgb2Ygc2Vjb25kcy4KKworCis9PT09PT09PT0KK0RFQlVHR0lORworPT09PT09PT09CisKK0lmIENPTkZJR19DQUNIRUZJTEVTX0RFQlVHIGlzIGVuYWJsZWQsIHRoZSBDYWNoZUZpbGVzIGZhY2lsaXR5IGNhbiBoYXZlIHJ1bnRpbWUKK2RlYnVnZ2luZyBlbmFibGVkIGJ5IGFkanVzdGluZyB0aGUgdmFsdWUgaW46CisKKwkvc3lzL21vZHVsZS9jYWNoZWZpbGVzL3BhcmFtZXRlcnMvZGVidWcKKworVGhpcyBpcyBhIGJpdG1hc2sgb2YgZGVidWdnaW5nIHN0cmVhbXMgdG8gZW5hYmxlOgorCisJQklUCVZBTFVFCVNUUkVBTQkJCQlQT0lOVAorCT09PT09PT0JPT09PT09PQk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09CisJMAkxCUdlbmVyYWwJCQkJRnVuY3Rpb24gZW50cnkgdHJhY2UKKwkxCTIJCQkJCUZ1bmN0aW9uIGV4aXQgdHJhY2UKKwkyCTQJCQkJCUdlbmVyYWwKKworVGhlIGFwcHJvcHJpYXRlIHNldCBvZiB2YWx1ZXMgc2hvdWxkIGJlIE9SJ2QgdG9nZXRoZXIgYW5kIHRoZSByZXN1bHQgd3JpdHRlbiB0bwordGhlIGNvbnRyb2wgZmlsZS4gIEZvciBleGFtcGxlOgorCisJZWNobyAkKCgxfDR8OCkpID4vc3lzL21vZHVsZS9jYWNoZWZpbGVzL3BhcmFtZXRlcnMvZGVidWcKKword2lsbCB0dXJuIG9uIGFsbCBmdW5jdGlvbiBlbnRyeSBkZWJ1Z2dpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvZnNjYWNoZS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvZnNjYWNoZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5NGI5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnR4dApAQCAtMCwwICsxLDMzMyBAQAorCQkJICA9PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJICBHZW5lcmFsIEZpbGVzeXN0ZW0gQ2FjaGluZworCQkJICA9PT09PT09PT09PT09PT09PT09PT09PT09PQorCis9PT09PT09PQorT1ZFUlZJRVcKKz09PT09PT09CisKK1RoaXMgZmFjaWxpdHkgaXMgYSBnZW5lcmFsIHB1cnBvc2UgY2FjaGUgZm9yIG5ldHdvcmsgZmlsZXN5c3RlbXMsIHRob3VnaCBpdAorY291bGQgYmUgdXNlZCBmb3IgY2FjaGluZyBvdGhlciB0aGluZ3Mgc3VjaCBhcyBJU085NjYwIGZpbGVzeXN0ZW1zIHRvby4KKworRlMtQ2FjaGUgbWVkaWF0ZXMgYmV0d2VlbiBjYWNoZSBiYWNrZW5kcyAoc3VjaCBhcyBDYWNoZUZTKSBhbmQgbmV0d29yaworZmlsZXN5c3RlbXM6CisKKwkrLS0tLS0tLS0tKworCXwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKworCXwgICBORlMgICB8LS0rICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorCXwgICAgICAgICB8ICB8ICAgICAgICAgICAgICAgICArLS0+fCAgIENhY2hlRlMgICAgfAorCSstLS0tLS0tLS0rICB8ICAgKy0tLS0tLS0tLS0rICB8ICAgfCAgL2Rldi9oZGE1ICAgfAorCSAgICAgICAgICAgICB8ICAgfCAgICAgICAgICB8ICB8ICAgKy0tLS0tLS0tLS0tLS0tKworCSstLS0tLS0tLS0rICArLS0+fCAgICAgICAgICB8ICB8CisJfCAgICAgICAgIHwgICAgICB8ICAgICAgICAgIHwtLSsKKwl8ICAgQUZTICAgfC0tLS0tPnwgRlMtQ2FjaGUgfAorCXwgICAgICAgICB8ICAgICAgfCAgICAgICAgICB8LS0rCisJKy0tLS0tLS0tLSsgICstLT58ICAgICAgICAgIHwgIHwKKwkgICAgICAgICAgICAgfCAgIHwgICAgICAgICAgfCAgfCAgICstLS0tLS0tLS0tLS0tLSsKKwkrLS0tLS0tLS0tKyAgfCAgICstLS0tLS0tLS0tKyAgfCAgIHwgICAgICAgICAgICAgIHwKKwl8ICAgICAgICAgfCAgfCAgICAgICAgICAgICAgICAgKy0tPnwgIENhY2hlRmlsZXMgIHwKKwl8ICBJU09GUyAgfC0tKyAgICAgICAgICAgICAgICAgICAgIHwgIC92YXIvY2FjaGUgIHwKKwl8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsKKwkrLS0tLS0tLS0tKworCitPciB0byBsb29rIGF0IGl0IGFub3RoZXIgd2F5LCBGUy1DYWNoZSBpcyBhIG1vZHVsZSB0aGF0IHByb3ZpZGVzIGEgY2FjaGluZworZmFjaWxpdHkgdG8gYSBuZXR3b3JrIGZpbGVzeXN0ZW0gc3VjaCB0aGF0IHRoZSBjYWNoZSBpcyB0cmFuc3BhcmVudCB0byB0aGUKK3VzZXI6CisKKwkrLS0tLS0tLS0tKworCXwgICAgICAgICB8CisJfCBTZXJ2ZXIgIHwKKwl8ICAgICAgICAgfAorCSstLS0tLS0tLS0rCisJICAgICB8ICAgICAgICAgICAgICAgICAgTkVUV09SSworCX5+fn5+fH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKwkgICAgIHwKKwkgICAgIHwgICAgICAgICAgICstLS0tLS0tLS0tKworCSAgICAgViAgICAgICAgICAgfCAgICAgICAgICB8CisJKy0tLS0tLS0tLSsgICAgICB8ICAgICAgICAgIHwKKwl8ICAgICAgICAgfCAgICAgIHwgICAgICAgICAgfAorCXwgICBORlMgICB8LS0tLS0+fCBGUy1DYWNoZSB8CisJfCAgICAgICAgIHwgICAgICB8ICAgICAgICAgIHwtLSsKKwkrLS0tLS0tLS0tKyAgICAgIHwgICAgICAgICAgfCAgfCAgICstLS0tLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLS0tLS0rCisJICAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgIHwgICB8ICAgICAgICAgICAgICB8ICAgfCAgICAgICAgICAgICAgfAorCSAgICAgViAgICAgICAgICAgKy0tLS0tLS0tLS0rICArLS0+fCAgQ2FjaGVGaWxlcyAgfC0tPnwgIEV4dDMgICAgICAgIHwKKwkrLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgIHwgIC92YXIvY2FjaGUgIHwgICB8ICAvZGV2L3NkYTYgICB8CisJfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgKy0tLS0tLS0tLS0tLS0tKworCXwgICBWRlMgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgXgorCXwgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorCSstLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgfAorCSAgICAgfCAgICAgICAgICAgICAgICAgIEtFUk5FTCBTUEFDRSAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgfAorCX5+fn5+fH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn58fn5+fn5+fH5+fn4KKwkgICAgIHwgICAgICAgICAgICAgICAgICBVU0VSIFNQQUNFICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIHwKKwkgICAgIFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIHwKKwkrLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rCisJfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorCXwgUHJvY2VzcyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FjaGVmaWxlc2QgIHwKKwl8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisJKy0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKworCisKK0ZTLUNhY2hlIGRvZXMgbm90IGZvbGxvdyB0aGUgaWRlYSBvZiBjb21wbGV0ZWx5IGxvYWRpbmcgZXZlcnkgbmV0ZnMgZmlsZQorb3BlbmVkIGluIGl0cyBlbnRpcmV0eSBpbnRvIGEgY2FjaGUgYmVmb3JlIHBlcm1pdHRpbmcgaXQgdG8gYmUgYWNjZXNzZWQgYW5kCit0aGVuIHNlcnZpbmcgdGhlIHBhZ2VzIG91dCBvZiB0aGF0IGNhY2hlIHJhdGhlciB0aGFuIHRoZSBuZXRmcyBpbm9kZSBiZWNhdXNlOgorCisgKDEpIEl0IG11c3QgYmUgcHJhY3RpY2FsIHRvIG9wZXJhdGUgd2l0aG91dCBhIGNhY2hlLgorCisgKDIpIFRoZSBzaXplIG9mIGFueSBhY2Nlc3NpYmxlIGZpbGUgbXVzdCBub3QgYmUgbGltaXRlZCB0byB0aGUgc2l6ZSBvZiB0aGUKKyAgICAgY2FjaGUuCisKKyAoMykgVGhlIGNvbWJpbmVkIHNpemUgb2YgYWxsIG9wZW5lZCBmaWxlcyAodGhpcyBpbmNsdWRlcyBtYXBwZWQgbGlicmFyaWVzKQorICAgICBtdXN0IG5vdCBiZSBsaW1pdGVkIHRvIHRoZSBzaXplIG9mIHRoZSBjYWNoZS4KKworICg0KSBUaGUgdXNlciBzaG91bGQgbm90IGJlIGZvcmNlZCB0byBkb3dubG9hZCBhbiBlbnRpcmUgZmlsZSBqdXN0IHRvIGRvIGEKKyAgICAgb25lLW9mZiBhY2Nlc3Mgb2YgYSBzbWFsbCBwb3J0aW9uIG9mIGl0IChzdWNoIGFzIG1pZ2h0IGJlIGRvbmUgd2l0aCB0aGUKKyAgICAgImZpbGUiIHByb2dyYW0pLgorCitJdCBpbnN0ZWFkIHNlcnZlcyB0aGUgY2FjaGUgb3V0IGluIFBBR0VfU0laRSBjaHVua3MgYXMgYW5kIHdoZW4gcmVxdWVzdGVkIGJ5Cit0aGUgbmV0ZnMoJ3MpIHVzaW5nIGl0LgorCisKK0ZTLUNhY2hlIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZmFjaWxpdGllczoKKworICgxKSBNb3JlIHRoYW4gb25lIGNhY2hlIGNhbiBiZSB1c2VkIGF0IG9uY2UuICBDYWNoZXMgY2FuIGJlIHNlbGVjdGVkCisgICAgIGV4cGxpY2l0bHkgYnkgdXNlIG9mIHRhZ3MuCisKKyAoMikgQ2FjaGVzIGNhbiBiZSBhZGRlZCAvIHJlbW92ZWQgYXQgYW55IHRpbWUuCisKKyAoMykgVGhlIG5ldGZzIGlzIHByb3ZpZGVkIHdpdGggYW4gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGVpdGhlciBwYXJ0eSB0bworICAgICB3aXRoZHJhdyBjYWNoaW5nIGZhY2lsaXRpZXMgZnJvbSBhIGZpbGUgKHJlcXVpcmVkIGZvciAoMikpLgorCisgKDQpIFRoZSBpbnRlcmZhY2UgdG8gdGhlIG5ldGZzIHJldHVybnMgYXMgZmV3IGVycm9ycyBhcyBwb3NzaWJsZSwgcHJlZmVycmluZworICAgICByYXRoZXIgdG8gbGV0IHRoZSBuZXRmcyByZW1haW4gb2JsaXZpb3VzLgorCisgKDUpIENvb2tpZXMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IGluZGljZXMsIGZpbGVzIGFuZCBvdGhlciBvYmplY3RzIHRvIHRoZQorICAgICBuZXRmcy4gIFRoZSBzaW1wbGVzdCBjb29raWUgaXMganVzdCBhIE5VTEwgcG9pbnRlciAtIGluZGljYXRpbmcgbm90aGluZworICAgICBjYWNoZWQgdGhlcmUuCisKKyAoNikgVGhlIG5ldGZzIGlzIGFsbG93ZWQgdG8gcHJvcG9zZSAtIGR5bmFtaWNhbGx5IC0gYW55IGluZGV4IGhpZXJhcmNoeSBpdAorICAgICBkZXNpcmVzLCB0aG91Z2ggaXQgbXVzdCBiZSBhd2FyZSB0aGF0IHRoZSBpbmRleCBzZWFyY2ggZnVuY3Rpb24gaXMKKyAgICAgcmVjdXJzaXZlLCBzdGFjayBzcGFjZSBpcyBsaW1pdGVkLCBhbmQgaW5kaWNlcyBjYW4gb25seSBiZSBjaGlsZHJlbiBvZgorICAgICBpbmRpY2VzLgorCisgKDcpIERhdGEgSS9PIGlzIGRvbmUgZGlyZWN0IHRvIGFuZCBmcm9tIHRoZSBuZXRmcydzIHBhZ2VzLiAgVGhlIG5ldGZzCisgICAgIGluZGljYXRlcyB0aGF0IHBhZ2UgQSBpcyBhdCBpbmRleCBCIG9mIHRoZSBkYXRhLWZpbGUgcmVwcmVzZW50ZWQgYnkgY29va2llCisgICAgIEMsIGFuZCB0aGF0IGl0IHNob3VsZCBiZSByZWFkIG9yIHdyaXR0ZW4uICBUaGUgY2FjaGUgYmFja2VuZCBtYXkgb3IgbWF5CisgICAgIG5vdCBzdGFydCBJL08gb24gdGhhdCBwYWdlLCBidXQgaWYgaXQgZG9lcywgYSBuZXRmcyBjYWxsYmFjayB3aWxsIGJlCisgICAgIGludm9rZWQgdG8gaW5kaWNhdGUgY29tcGxldGlvbi4gIFRoZSBJL08gbWF5IGJlIGVpdGhlciBzeW5jaHJvbm91cyBvcgorICAgICBhc3luY2hyb25vdXMuCisKKyAoOCkgQ29va2llcyBjYW4gYmUgInJldGlyZWQiIHVwb24gcmVsZWFzZS4gIEF0IHRoaXMgcG9pbnQgRlMtQ2FjaGUgd2lsbCBtYXJrCisgICAgIHRoZW0gYXMgb2Jzb2xldGUgYW5kIHRoZSBpbmRleCBoaWVyYXJjaHkgcm9vdGVkIGF0IHRoYXQgcG9pbnQgd2lsbCBnZXQKKyAgICAgcmVjeWNsZWQuCisKKyAoOSkgVGhlIG5ldGZzIHByb3ZpZGVzIGEgIm1hdGNoIiBmdW5jdGlvbiBmb3IgaW5kZXggc2VhcmNoZXMuICBJbiBhZGRpdGlvbiB0bworICAgICBzYXlpbmcgd2hldGhlciBhIG1hdGNoIHdhcyBtYWRlIG9yIG5vdCwgdGhpcyBjYW4gYWxzbyBzcGVjaWZ5IHRoYXQgYW4KKyAgICAgZW50cnkgc2hvdWxkIGJlIHVwZGF0ZWQgb3IgZGVsZXRlZC4KKworKDEwKSBBcyBtdWNoIGFzIHBvc3NpYmxlIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkuCisKKworRlMtQ2FjaGUgbWFpbnRhaW5zIGEgdmlydHVhbCBpbmRleGluZyB0cmVlIGluIHdoaWNoIGFsbCBpbmRpY2VzLCBmaWxlcywgb2JqZWN0cworYW5kIHBhZ2VzIGFyZSBrZXB0LiAgQml0cyBvZiB0aGlzIHRyZWUgbWF5IGFjdHVhbGx5IHJlc2lkZSBpbiBvbmUgb3IgbW9yZQorY2FjaGVzLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlNERUYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICBORlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUZTCisgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8CisgICAgICAgIGhvbWVkaXIgICAgICAgICAgICAgICAgICAgICBtaXJyb3IgICAgICAgICAgYWZzLm9yZyAgIHJlZGhhdC5jb20KKyAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICstLS0tLS0tLS0tLS0rICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgKy0tLS0tLS0tLS0rCisgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICB8CisgICAwMDAwMSAgICAgICAgMDAwMDIgICAgICAgMDAwMDcgICAgICAgICAgIDAwMTI1ICAgICAgICB2b2wwMDAwMSAgIHZvbDAwMDAyCisgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKy0tLSstLS0rICAgICArLS0tLS0rICAgICAgKy0tLSsgICAgICArLS0tLS0tKy0tLS0tLSsgICAgICAgICAgICArLS0tLS0rLS0tLSsKKyB8ICAgfCAgIHwgICAgIHwgICAgIHwgICAgICB8ICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgIHwgICAgIHwgICAgfAorUEcwIFBHMSBQRzIgICBQRzAgIFhBVFRSICAgUEcwIFBHMSAgIERJUkVOVCBESVJFTlQgRElSRU5UICAgICAgICBSL1cgICBSL08gIEJhaworICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICBQRzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMSAgIDAwMDAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tKy0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHMCBQRzEgUEcyCisKK0luIHRoZSBleGFtcGxlIGFib3ZlLCB5b3UgY2FuIHNlZSB0d28gbmV0ZnMncyBiZWluZyBiYWNrZWQ6IE5GUyBhbmQgQUZTLiAgVGhlc2UKK2hhdmUgZGlmZmVyZW50IGluZGV4IGhpZXJhcmNoaWVzOgorCisgKCopIFRoZSBORlMgcHJpbWFyeSBpbmRleCBjb250YWlucyBwZXItc2VydmVyIGluZGljZXMuICBFYWNoIHNlcnZlciBpbmRleCBpcworICAgICBpbmRleGVkIGJ5IE5GUyBmaWxlIGhhbmRsZXMgdG8gZ2V0IGRhdGEgZmlsZSBvYmplY3RzLiAgRWFjaCBkYXRhIGZpbGUKKyAgICAgb2JqZWN0cyBjYW4gaGF2ZSBhbiBhcnJheSBvZiBwYWdlcywgYnV0IG1heSBhbHNvIGhhdmUgZnVydGhlciBjaGlsZAorICAgICBvYmplY3RzLCBzdWNoIGFzIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIGRpcmVjdG9yeSBlbnRyaWVzLiAgRXh0ZW5kZWQKKyAgICAgYXR0cmlidXRlIG9iamVjdHMgdGhlbXNlbHZlcyBoYXZlIHBhZ2UtYXJyYXkgY29udGVudHMuCisKKyAoKikgVGhlIEFGUyBwcmltYXJ5IGluZGV4IGNvbnRhaW5zIHBlci1jZWxsIGluZGljZXMuICBFYWNoIGNlbGwgaW5kZXggY29udGFpbnMKKyAgICAgcGVyLWxvZ2ljYWwtdm9sdW1lIGluZGljZXMuICBFYWNoIG9mIHZvbHVtZSBpbmRleCBjb250YWlucyB1cCB0byB0aHJlZQorICAgICBpbmRpY2VzIGZvciB0aGUgcmVhZC13cml0ZSwgcmVhZC1vbmx5IGFuZCBiYWNrdXAgbWlycm9ycyBvZiB0aG9zZSB2b2x1bWVzLgorICAgICBFYWNoIG9mIHRoZXNlIGNvbnRhaW5zIHZub2RlIGRhdGEgZmlsZSBvYmplY3RzLCBlYWNoIG9mIHdoaWNoIGNvbnRhaW5zIGFuCisgICAgIGFycmF5IG9mIHBhZ2VzLgorCitUaGUgdmVyeSB0b3AgaW5kZXggaXMgdGhlIEZTLUNhY2hlIG1hc3RlciBpbmRleCBpbiB3aGljaCBpbmRpdmlkdWFsIG5ldGZzJ3MKK2hhdmUgZW50cmllcy4KKworQW55IGluZGV4IG9iamVjdCBtYXkgcmVzaWRlIGluIG1vcmUgdGhhbiBvbmUgY2FjaGUsIHByb3ZpZGVkIGl0IG9ubHkgaGFzIGluZGV4CitjaGlsZHJlbi4gIEFueSBpbmRleCB3aXRoIG5vbi1pbmRleCBvYmplY3QgY2hpbGRyZW4gd2lsbCBiZSBhc3N1bWVkIHRvIG9ubHkKK3Jlc2lkZSBpbiBvbmUgY2FjaGUuCisKKworVGhlIG5ldGZzIEFQSSB0byBGUy1DYWNoZSBjYW4gYmUgZm91bmQgaW46CisKKwlEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dAorCitUaGUgY2FjaGUgYmFja2VuZCBBUEkgdG8gRlMtQ2FjaGUgY2FuIGJlIGZvdW5kIGluOgorCisJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dAorCitBIGRlc2NyaXB0aW9uIG9mIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbnMgYW5kIG9iamVjdCBzdGF0ZSBtYWNoaW5lIGNhbiBiZQorZm91bmQgaW46CisKKwlEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvb2JqZWN0LnR4dAorCisKKz09PT09PT09PT09PT09PT09PT09PT09CitTVEFUSVNUSUNBTCBJTkZPUk1BVElPTgorPT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgRlMtQ2FjaGUgaXMgY29tcGlsZWQgd2l0aCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZW5hYmxlZDoKKworCUNPTkZJR19GU0NBQ0hFX1NUQVRTPXkKKwlDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU09eQorCit0aGVuIGl0IHdpbGwgZ2F0aGVyIGNlcnRhaW4gc3RhdGlzdGljcyBhbmQgZGlzcGxheSB0aGVtIHRocm91Z2ggYSBudW1iZXIgb2YKK3Byb2MgZmlsZXMuCisKKyAoKikgL3Byb2MvZnMvZnNjYWNoZS9zdGF0cworCisgICAgIFRoaXMgc2hvd3MgY291bnRzIG9mIGEgbnVtYmVyIG9mIGV2ZW50cyB0aGF0IGNhbiBoYXBwZW4gaW4gRlMtQ2FjaGU6CisKKwlDTEFTUwlFVkVOVAlNRUFOSU5HCisJPT09PT09PQk9PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlDb29raWVzCWlkeD1OCU51bWJlciBvZiBpbmRleCBjb29raWVzIGFsbG9jYXRlZAorCQlkYXQ9TglOdW1iZXIgb2YgZGF0YSBzdG9yYWdlIGNvb2tpZXMgYWxsb2NhdGVkCisJCXNwYz1OCU51bWJlciBvZiBzcGVjaWFsIGNvb2tpZXMgYWxsb2NhdGVkCisJT2JqZWN0cwlhbGM9TglOdW1iZXIgb2Ygb2JqZWN0cyBhbGxvY2F0ZWQKKwkJbmFsPU4JTnVtYmVyIG9mIG9iamVjdCBhbGxvY2F0aW9uIGZhaWx1cmVzCisJCWF2bD1OCU51bWJlciBvZiBvYmplY3RzIHRoYXQgcmVhY2hlZCB0aGUgYXZhaWxhYmxlIHN0YXRlCisJCWRlZD1OCU51bWJlciBvZiBvYmplY3RzIHRoYXQgcmVhY2hlZCB0aGUgZGVhZCBzdGF0ZQorCUNoa0F1eAlub249TglOdW1iZXIgb2Ygb2JqZWN0cyB0aGF0IGRpZG4ndCBoYXZlIGEgY29oZXJlbmN5IGNoZWNrCisJCW9rPU4JTnVtYmVyIG9mIG9iamVjdHMgdGhhdCBwYXNzZWQgYSBjb2hlcmVuY3kgY2hlY2sKKwkJdXBkPU4JTnVtYmVyIG9mIG9iamVjdHMgdGhhdCBuZWVkZWQgYSBjb2hlcmVuY3kgZGF0YSB1cGRhdGUKKwkJb2JzPU4JTnVtYmVyIG9mIG9iamVjdHMgdGhhdCB3ZXJlIGRlY2xhcmVkIG9ic29sZXRlCisJUGFnZXMJbXJrPU4JTnVtYmVyIG9mIHBhZ2VzIG1hcmtlZCBhcyBiZWluZyBjYWNoZWQKKwkJdW5jPU4JTnVtYmVyIG9mIHVuY2FjaGUgcGFnZSByZXF1ZXN0cyBzZWVuCisJQWNxdWlyZQluPU4JTnVtYmVyIG9mIGFjcXVpcmUgY29va2llIHJlcXVlc3RzIHNlZW4KKwkJbnVsPU4JTnVtYmVyIG9mIGFjcSByZXFzIGdpdmVuIGEgTlVMTCBwYXJlbnQKKwkJbm9jPU4JTnVtYmVyIG9mIGFjcSByZXFzIHJlamVjdGVkIGR1ZSB0byBubyBjYWNoZSBhdmFpbGFibGUKKwkJb2s9TglOdW1iZXIgb2YgYWNxIHJlcXMgc3VjY2VlZGVkCisJCW5iZj1OCU51bWJlciBvZiBhY3EgcmVxcyByZWplY3RlZCBkdWUgdG8gZXJyb3IKKwkJb29tPU4JTnVtYmVyIG9mIGFjcSByZXFzIGZhaWxlZCBvbiBFTk9NRU0KKwlMb29rdXBzCW49TglOdW1iZXIgb2YgbG9va3VwIGNhbGxzIG1hZGUgb24gY2FjaGUgYmFja2VuZHMKKwkJbmVnPU4JTnVtYmVyIG9mIG5lZ2F0aXZlIGxvb2t1cHMgbWFkZQorCQlwb3M9TglOdW1iZXIgb2YgcG9zaXRpdmUgbG9va3VwcyBtYWRlCisJCWNydD1OCU51bWJlciBvZiBvYmplY3RzIGNyZWF0ZWQgYnkgbG9va3VwCisJVXBkYXRlcwluPU4JTnVtYmVyIG9mIHVwZGF0ZSBjb29raWUgcmVxdWVzdHMgc2VlbgorCQludWw9TglOdW1iZXIgb2YgdXBkIHJlcXMgZ2l2ZW4gYSBOVUxMIHBhcmVudAorCQlydW49TglOdW1iZXIgb2YgdXBkIHJlcXMgZ3JhbnRlZCBDUFUgdGltZQorCVJlbGlucXMJbj1OCU51bWJlciBvZiByZWxpbnF1aXNoIGNvb2tpZSByZXF1ZXN0cyBzZWVuCisJCW51bD1OCU51bWJlciBvZiBybHEgcmVxcyBnaXZlbiBhIE5VTEwgcGFyZW50CisJCXdjcj1OCU51bWJlciBvZiBybHEgcmVxcyB3YWl0ZWQgb24gY29tcGxldGlvbiBvZiBjcmVhdGlvbgorCUF0dHJDaGcJbj1OCU51bWJlciBvZiBhdHRyaWJ1dGUgY2hhbmdlZCByZXF1ZXN0cyBzZWVuCisJCW9rPU4JTnVtYmVyIG9mIGF0dHIgY2hhbmdlZCByZXF1ZXN0cyBxdWV1ZWQKKwkJbmJmPU4JTnVtYmVyIG9mIGF0dHIgY2hhbmdlZCByZWplY3RlZCAtRU5PQlVGUworCQlvb209TglOdW1iZXIgb2YgYXR0ciBjaGFuZ2VkIGZhaWxlZCAtRU5PTUVNCisJCXJ1bj1OCU51bWJlciBvZiBhdHRyIGNoYW5nZWQgb3BzIGdpdmVuIENQVSB0aW1lCisJQWxsb2NzCW49TglOdW1iZXIgb2YgYWxsb2NhdGlvbiByZXF1ZXN0cyBzZWVuCisJCW9rPU4JTnVtYmVyIG9mIHN1Y2Nlc3NmdWwgYWxsb2MgcmVxcworCQl3dD1OCU51bWJlciBvZiBhbGxvYyByZXFzIHRoYXQgd2FpdGVkIG9uIGxvb2t1cCBjb21wbGV0aW9uCisJCW5iZj1OCU51bWJlciBvZiBhbGxvYyByZXFzIHJlamVjdGVkIC1FTk9CVUZTCisJCW9wcz1OCU51bWJlciBvZiBhbGxvYyByZXFzIHN1Ym1pdHRlZAorCQlvd3Q9TglOdW1iZXIgb2YgYWxsb2MgcmVxcyB3YWl0ZWQgZm9yIENQVSB0aW1lCisJUmV0cnZscwluPU4JTnVtYmVyIG9mIHJldHJpZXZhbCAocmVhZCkgcmVxdWVzdHMgc2VlbgorCQlvaz1OCU51bWJlciBvZiBzdWNjZXNzZnVsIHJldHIgcmVxcworCQl3dD1OCU51bWJlciBvZiByZXRyIHJlcXMgdGhhdCB3YWl0ZWQgb24gbG9va3VwIGNvbXBsZXRpb24KKwkJbm9kPU4JTnVtYmVyIG9mIHJldHIgcmVxcyByZXR1cm5lZCAtRU5PREFUQQorCQluYmY9TglOdW1iZXIgb2YgcmV0ciByZXFzIHJlamVjdGVkIC1FTk9CVUZTCisJCWludD1OCU51bWJlciBvZiByZXRyIHJlcXMgYWJvcnRlZCAtRVJFU1RBUlRTWVMKKwkJb29tPU4JTnVtYmVyIG9mIHJldHIgcmVxcyBmYWlsZWQgLUVOT01FTQorCQlvcHM9TglOdW1iZXIgb2YgcmV0ciByZXFzIHN1Ym1pdHRlZAorCQlvd3Q9TglOdW1iZXIgb2YgcmV0ciByZXFzIHdhaXRlZCBmb3IgQ1BVIHRpbWUKKwlTdG9yZXMJbj1OCU51bWJlciBvZiBzdG9yYWdlICh3cml0ZSkgcmVxdWVzdHMgc2VlbgorCQlvaz1OCU51bWJlciBvZiBzdWNjZXNzZnVsIHN0b3JlIHJlcXMKKwkJYWduPU4JTnVtYmVyIG9mIHN0b3JlIHJlcXMgb24gYSBwYWdlIGFscmVhZHkgcGVuZGluZyBzdG9yYWdlCisJCW5iZj1OCU51bWJlciBvZiBzdG9yZSByZXFzIHJlamVjdGVkIC1FTk9CVUZTCisJCW9vbT1OCU51bWJlciBvZiBzdG9yZSByZXFzIGZhaWxlZCAtRU5PTUVNCisJCW9wcz1OCU51bWJlciBvZiBzdG9yZSByZXFzIHN1Ym1pdHRlZAorCQlydW49TglOdW1iZXIgb2Ygc3RvcmUgcmVxcyBncmFudGVkIENQVSB0aW1lCisJT3BzCXBlbmQ9TglOdW1iZXIgb2YgdGltZXMgYXN5bmMgb3BzIGFkZGVkIHRvIHBlbmRpbmcgcXVldWVzCisJCXJ1bj1OCU51bWJlciBvZiB0aW1lcyBhc3luYyBvcHMgZ2l2ZW4gQ1BVIHRpbWUKKwkJZW5xPU4JTnVtYmVyIG9mIHRpbWVzIGFzeW5jIG9wcyBxdWV1ZWQgZm9yIHByb2Nlc3NpbmcKKwkJZGZyPU4JTnVtYmVyIG9mIGFzeW5jIG9wcyBxdWV1ZWQgZm9yIGRlZmVycmVkIHJlbGVhc2UKKwkJcmVsPU4JTnVtYmVyIG9mIGFzeW5jIG9wcyByZWxlYXNlZAorCQlnYz1OCU51bWJlciBvZiBkZWZlcnJlZC1yZWxlYXNlIGFzeW5jIG9wcyBnYXJiYWdlIGNvbGxlY3RlZAorCisKKyAoKikgL3Byb2MvZnMvZnNjYWNoZS9oaXN0b2dyYW0KKworCWNhdCAvcHJvYy9mcy9mc2NhY2hlL2hpc3RvZ3JhbQorCUpJRlMgIFNFQ1MgIE9CSiBJTlNUICBPUCBSVU5TICAgT0JKIFJVTlMgIFJFVFJWIERMWSBSRVRSSUVWTFMKKwk9PT09PSA9PT09PSA9PT09PT09PT0gPT09PT09PT09ID09PT09PT09PSA9PT09PT09PT0gPT09PT09PT09CisKKyAgICAgVGhpcyBzaG93cyB0aGUgYnJlYWtkb3duIG9mIHRoZSBudW1iZXIgb2YgdGltZXMgZWFjaCBhbW91bnQgb2YgdGltZQorICAgICBiZXR3ZWVuIDAgamlmZmllcyBhbmQgSFotMSBqaWZmaWVzIGEgdmFyaWV0eSBvZiB0YXNrcyB0b29rIHRvIHJ1bi4gIFRoZQorICAgICBjb2x1bW5zIGFyZSBhcyBmb2xsb3dzOgorCisJQ09MVU1OCQlUSU1FIE1FQVNVUkVNRU5UCisJPT09PT09PQkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCU9CSiBJTlNUCUxlbmd0aCBvZiB0aW1lIHRvIGluc3RhbnRpYXRlIGFuIG9iamVjdAorCU9QIFJVTlMJCUxlbmd0aCBvZiB0aW1lIGEgY2FsbCB0byBwcm9jZXNzIGFuIG9wZXJhdGlvbiB0b29rCisJT0JKIFJVTlMJTGVuZ3RoIG9mIHRpbWUgYSBjYWxsIHRvIHByb2Nlc3MgYW4gb2JqZWN0IGV2ZW50IHRvb2sKKwlSRVRSViBETFkJVGltZSBiZXR3ZWVuIGFuIHJlcXVlc3RpbmcgYSByZWFkIGFuZCBsb29rdXAgY29tcGxldGluZworCVJFVFJJRVZMUwlUaW1lIGJldHdlZW4gYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSByZXRyaWV2YWwKKworICAgICBFYWNoIHJvdyBzaG93cyB0aGUgbnVtYmVyIG9mIGV2ZW50cyB0aGF0IHRvb2sgYSBwYXJ0aWN1bGFyIHJhbmdlIG9mIHRpbWVzLgorICAgICBFYWNoIHN0ZXAgaXMgMSBqaWZmeSBpbiBzaXplLiAgVGhlIEpJRlMgY29sdW1uIGluZGljYXRlcyB0aGUgcGFydGljdWxhcgorICAgICBqaWZmeSByYW5nZSBjb3ZlcmVkLCBhbmQgdGhlIFNFQ1MgZmllbGQgdGhlIGVxdWl2YWxlbnQgbnVtYmVyIG9mIHNlY29uZHMuCisKKworPT09PT09PT09CitERUJVR0dJTkcKKz09PT09PT09PQorCitJZiBDT05GSUdfRlNDQUNIRV9ERUJVRyBpcyBlbmFibGVkLCB0aGUgRlMtQ2FjaGUgZmFjaWxpdHkgY2FuIGhhdmUgcnVudGltZQorZGVidWdnaW5nIGVuYWJsZWQgYnkgYWRqdXN0aW5nIHRoZSB2YWx1ZSBpbjoKKworCS9zeXMvbW9kdWxlL2ZzY2FjaGUvcGFyYW1ldGVycy9kZWJ1ZworCitUaGlzIGlzIGEgYml0bWFzayBvZiBkZWJ1Z2dpbmcgc3RyZWFtcyB0byBlbmFibGU6CisKKwlCSVQJVkFMVUUJU1RSRUFNCQkJCVBPSU5UCisJPT09PT09PQk9PT09PT09CT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JPT09PT09PT09PT09PT09PT09PT09PT0KKwkwCTEJQ2FjaGUgbWFuYWdlbWVudAkJRnVuY3Rpb24gZW50cnkgdHJhY2UKKwkxCTIJCQkJCUZ1bmN0aW9uIGV4aXQgdHJhY2UKKwkyCTQJCQkJCUdlbmVyYWwKKwkzCTgJQ29va2llIG1hbmFnZW1lbnQJCUZ1bmN0aW9uIGVudHJ5IHRyYWNlCisJNAkxNgkJCQkJRnVuY3Rpb24gZXhpdCB0cmFjZQorCTUJMzIJCQkJCUdlbmVyYWwKKwk2CTY0CVBhZ2UgaGFuZGxpbmcJCQlGdW5jdGlvbiBlbnRyeSB0cmFjZQorCTcJMTI4CQkJCQlGdW5jdGlvbiBleGl0IHRyYWNlCisJOAkyNTYJCQkJCUdlbmVyYWwKKwk5CTUxMglPcGVyYXRpb24gbWFuYWdlbWVudAkJRnVuY3Rpb24gZW50cnkgdHJhY2UKKwkxMAkxMDI0CQkJCQlGdW5jdGlvbiBleGl0IHRyYWNlCisJMTEJMjA0OAkJCQkJR2VuZXJhbAorCitUaGUgYXBwcm9wcmlhdGUgc2V0IG9mIHZhbHVlcyBzaG91bGQgYmUgT1InZCB0b2dldGhlciBhbmQgdGhlIHJlc3VsdCB3cml0dGVuIHRvCit0aGUgY29udHJvbCBmaWxlLiAgRm9yIGV4YW1wbGU6CisKKwllY2hvICQoKDF8OHw2NCkpID4vc3lzL21vZHVsZS9mc2NhY2hlL3BhcmFtZXRlcnMvZGVidWcKKword2lsbCB0dXJuIG9uIGFsbCBmdW5jdGlvbiBlbnRyeSBkZWJ1Z2dpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYjEyNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dApAQCAtMCwwICsxLDc3OCBAQAorCQkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkJRlMtQ0FDSEUgTkVUV09SSyBGSUxFU1lTVEVNIEFQSQorCQkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSdzIGFuIEFQSSBieSB3aGljaCBhIG5ldHdvcmsgZmlsZXN5c3RlbSBjYW4gbWFrZSB1c2Ugb2YgdGhlIEZTLUNhY2hlCitmYWNpbGl0aWVzLiAgVGhpcyBpcyBiYXNlZCBhcm91bmQgYSBudW1iZXIgb2YgcHJpbmNpcGxlczoKKworICgxKSBDYWNoZXMgY2FuIHN0b3JlIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBvYmplY3QgdHlwZXMuICBUaGVyZSBhcmUgdHdvIG1haW4KKyAgICAgb2JqZWN0IHR5cGVzOiBpbmRpY2VzIGFuZCBmaWxlcy4gIFRoZSBmaXJzdCBpcyBhIHNwZWNpYWwgdHlwZSB1c2VkIGJ5CisgICAgIEZTLUNhY2hlIHRvIG1ha2UgZmluZGluZyBvYmplY3RzIGZhc3RlciBhbmQgdG8gbWFrZSByZXRpcmluZyBvZiBncm91cHMgb2YKKyAgICAgb2JqZWN0cyBlYXNpZXIuCisKKyAoMikgRXZlcnkgaW5kZXgsIGZpbGUgb3Igb3RoZXIgb2JqZWN0IGlzIHJlcHJlc2VudGVkIGJ5IGEgY29va2llLiAgVGhpcyBjb29raWUKKyAgICAgbWF5IG9yIG1heSBub3QgaGF2ZSBhbnl0aGluZyBhc3NvY2lhdGVkIHdpdGggaXQsIGJ1dCB0aGUgbmV0ZnMgZG9lc24ndAorICAgICBuZWVkIHRvIGNhcmUuCisKKyAoMykgQmFycmluZyB0aGUgdG9wLWxldmVsIGluZGV4IChvbmUgZW50cnkgcGVyIGNhY2hlZCBuZXRmcyksIHRoZSBpbmRleAorICAgICBoaWVyYXJjaHkgZm9yIGVhY2ggbmV0ZnMgaXMgc3RydWN0dXJlZCBhY2NvcmRpbmcgdGhlIHdoaW0gb2YgdGhlIG5ldGZzLgorCitUaGlzIEFQSSBpcyBkZWNsYXJlZCBpbiA8bGludXgvZnNjYWNoZS5oPi4KKworVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisJICgxKSBOZXR3b3JrIGZpbGVzeXN0ZW0gZGVmaW5pdGlvbgorCSAoMikgSW5kZXggZGVmaW5pdGlvbgorCSAoMykgT2JqZWN0IGRlZmluaXRpb24KKwkgKDQpIE5ldHdvcmsgZmlsZXN5c3RlbSAodW4pcmVnaXN0cmF0aW9uCisJICg1KSBDYWNoZSB0YWcgbG9va3VwCisJICg2KSBJbmRleCByZWdpc3RyYXRpb24KKwkgKDcpIERhdGEgZmlsZSByZWdpc3RyYXRpb24KKwkgKDgpIE1pc2NlbGxhbmVvdXMgb2JqZWN0IHJlZ2lzdHJhdGlvbgorCSAoOSkgU2V0dGluZyB0aGUgZGF0YSBmaWxlIHNpemUKKwkoMTApIFBhZ2UgYWxsb2MvcmVhZC93cml0ZQorCSgxMSkgUGFnZSB1bmNhY2hpbmcKKwkoMTIpIEluZGV4IGFuZCBkYXRhIGZpbGUgdXBkYXRlCisJKDEzKSBNaXNjZWxsYW5lb3VzIGNvb2tpZSBvcGVyYXRpb25zCisJKDE0KSBDb29raWUgdW5yZWdpc3RyYXRpb24KKwkoMTUpIEluZGV4IGFuZCBkYXRhIGZpbGUgaW52YWxpZGF0aW9uCisJKDE2KSBGUy1DYWNoZSBzcGVjaWZpYyBwYWdlIGZsYWdzLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitORVRXT1JLIEZJTEVTWVNURU0gREVGSU5JVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRlMtQ2FjaGUgbmVlZHMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgbmV0d29yayBmaWxlc3lzdGVtLiAgVGhpcyBpcyBzcGVjaWZpZWQKK3VzaW5nIGEgcmVjb3JkIG9mIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorCisJc3RydWN0IGZzY2FjaGVfbmV0ZnMgeworCQl1aW50MzJfdAkJCXZlcnNpb247CisJCWNvbnN0IGNoYXIJCQkqbmFtZTsKKwkJc3RydWN0IGZzY2FjaGVfY29va2llCQkqcHJpbWFyeV9pbmRleDsKKwkJLi4uCisJfTsKKworVGhpcyBmaXJzdCB0d28gZmllbGRzIHNob3VsZCBiZSBmaWxsZWQgaW4gYmVmb3JlIHJlZ2lzdHJhdGlvbiwgYW5kIHRoZSB0aGlyZAord2lsbCBiZSBmaWxsZWQgaW4gYnkgdGhlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbjsgYW55IG90aGVyIGZpZWxkcyBzaG91bGQganVzdCBiZQoraWdub3JlZCBhbmQgYXJlIGZvciBpbnRlcm5hbCB1c2Ugb25seS4KKworVGhlIGZpZWxkcyBhcmU6CisKKyAoMSkgVGhlIG5hbWUgb2YgdGhlIG5ldGZzICh1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHRvcGxldmVsIGluZGV4KS4KKworICgyKSBUaGUgdmVyc2lvbiBvZiB0aGUgbmV0ZnMgKGlmIHRoZSBuYW1lIG1hdGNoZXMgYnV0IHRoZSB2ZXJzaW9uIGRvZXNuJ3QsIHRoZQorICAgICBlbnRpcmUgaW4tY2FjaGUgaGllcmFyY2h5IGZvciB0aGlzIG5ldGZzIHdpbGwgYmUgc2NyYXBwZWQgYW5kIGJlZ3VuCisgICAgIGFmcmVzaCkuCisKKyAoMykgVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIHByaW1hcnkgaW5kZXggd2lsbCBiZSBhbGxvY2F0ZWQgYWNjb3JkaW5nIHRvCisgICAgIGFub3RoZXIgcGFyYW1ldGVyIHBhc3NlZCBpbnRvIHRoZSByZWdpc3RyYXRpb24gZnVuY3Rpb24uCisKK0ZvciBleGFtcGxlLCBrQUZTIChsaW51eC9mcy9hZnMvKSB1c2VzIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgdG8gZGVzY3JpYmUKK2l0c2VsZjoKKworCXN0cnVjdCBmc2NhY2hlX25ldGZzIGFmc19jYWNoZV9uZXRmcyA9IHsKKwkJLnZlcnNpb24JPSAwLAorCQkubmFtZQkJPSAiYWZzIiwKKwl9OworCisKKz09PT09PT09PT09PT09PT0KK0lOREVYIERFRklOSVRJT04KKz09PT09PT09PT09PT09PT0KKworSW5kaWNlcyBhcmUgdXNlZCBmb3IgdHdvIHB1cnBvc2VzOgorCisgKDEpIFRvIGFpZCB0aGUgZmluZGluZyBvZiBhIGZpbGUgYmFzZWQgb24gYSBzZXJpZXMgb2Yga2V5cyAoc3VjaCBhcyBBRlMncworICAgICAiY2VsbCIsICJ2b2x1bWUgSUQiLCAidm5vZGUgSUQiKS4KKworICgyKSBUbyBtYWtlIGl0IGVhc2llciB0byBkaXNjYXJkIGEgc3Vic2V0IG9mIGFsbCB0aGUgZmlsZXMgY2FjaGVkIGJhc2VkIGFyb3VuZAorICAgICBhIHBhcnRpY3VsYXIga2V5IC0gZm9yIGluc3RhbmNlIHRvIG1pcnJvciB0aGUgcmVtb3ZhbCBvZiBhbiBBRlMgdm9sdW1lLgorCitIb3dldmVyLCBzaW5jZSBpdCdzIHVubGlrZWx5IHRoYXQgYW55IHR3byBuZXRmcydzIGFyZSBnb2luZyB0byB3YW50IHRvIGRlZmluZQordGhlaXIgaW5kZXggaGllcmFyY2hpZXMgaW4gcXVpdGUgdGhlIHNhbWUgd2F5LCBGUy1DYWNoZSB0cmllcyB0byBpbXBvc2UgYXMgZmV3CityZXN0cmFpbnRzIGFzIHBvc3NpYmxlIG9uIGhvdyBhbiBpbmRleCBpcyBzdHJ1Y3R1cmVkIGFuZCB3aGVyZSBpdCBpcyBwbGFjZWQgaW4KK3RoZSB0cmVlLiAgVGhlIG5ldGZzIGNhbiBldmVuIG1peCBpbmRpY2VzIGFuZCBkYXRhIGZpbGVzIGF0IHRoZSBzYW1lIGxldmVsLCBidXQKK2l0J3Mgbm90IHJlY29tbWVuZGVkLgorCitFYWNoIGluZGV4IGVudHJ5IGNvbnNpc3RzIG9mIGEga2V5IG9mIGluZGV0ZXJtaW5hdGUgbGVuZ3RoIHBsdXMgc29tZSBhdXhpbGxpYXJ5CitkYXRhLCBhbHNvIG9mIGluZGV0ZXJtaW5hdGUgbGVuZ3RoLgorCitUaGVyZSBhcmUgc29tZSBsaW1pdHMgb24gaW5kaWNlczoKKworICgxKSBBbnkgaW5kZXggY29udGFpbmluZyBub24taW5kZXggb2JqZWN0cyBzaG91bGQgYmUgcmVzdHJpY3RlZCB0byBhIHNpbmdsZQorICAgICBjYWNoZS4gIEFueSBzdWNoIG9iamVjdHMgY3JlYXRlZCB3aXRoaW4gYW4gaW5kZXggd2lsbCBiZSBjcmVhdGVkIGluIHRoZQorICAgICBmaXJzdCBjYWNoZSBvbmx5LiAgVGhlIGNhY2hlIGluIHdoaWNoIGFuIGluZGV4IGlzIGNyZWF0ZWQgY2FuIGJlCisgICAgIGNvbnRyb2xsZWQgYnkgY2FjaGUgdGFncyAoc2VlIGJlbG93KS4KKworICgyKSBUaGUgZW50cnkgZGF0YSBtdXN0IGJlIGF0b21pY2FsbHkgam91cm5hbGxhYmxlLCBzbyBpdCBpcyBsaW1pdGVkIHRvIGFib3V0CisgICAgIDQwMCBieXRlcyBhdCBwcmVzZW50LiAgQXQgbGVhc3QgNDAwIGJ5dGVzIHdpbGwgYmUgYXZhaWxhYmxlLgorCisgKDMpIFRoZSBkZXB0aCBvZiB0aGUgaW5kZXggdHJlZSBzaG91bGQgYmUganVkZ2VkIHdpdGggY2FyZSBhcyB0aGUgc2VhcmNoCisgICAgIGZ1bmN0aW9uIGlzIHJlY3Vyc2l2ZS4gIFRvbyBtYW55IGxheWVycyB3aWxsIHJ1biB0aGUga2VybmVsIG91dCBvZiBzdGFjay4KKworCis9PT09PT09PT09PT09PT09PQorT0JKRUNUIERFRklOSVRJT04KKz09PT09PT09PT09PT09PT09CisKK1RvIGRlZmluZSBhbiBvYmplY3QsIGEgc3RydWN0dXJlIG9mIHRoZSBmb2xsb3dpbmcgdHlwZSBzaG91bGQgYmUgZmlsbGVkIG91dDoKKworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYKKwl7CisJCXVpbnQ4X3QgbmFtZVsxNl07CisJCXVpbnQ4X3QgdHlwZTsKKworCQlzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKigqc2VsZWN0X2NhY2hlKSgKKwkJCWNvbnN0IHZvaWQgKnBhcmVudF9uZXRmc19kYXRhLAorCQkJY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEpOworCisJCXVpbnQxNl90ICgqZ2V0X2tleSkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICAgIHZvaWQgKmJ1ZmZlciwKKwkJCQkgICAgdWludDE2X3QgYnVmbWF4KTsKKworCQl2b2lkICgqZ2V0X2F0dHIpKGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSB1aW50NjRfdCAqc2l6ZSk7CisKKwkJdWludDE2X3QgKCpnZXRfYXV4KShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgICAgdm9pZCAqYnVmZmVyLAorCQkJCSAgICB1aW50MTZfdCBidWZtYXgpOworCisJCWVudW0gZnNjYWNoZV9jaGVja2F1eCAoKmNoZWNrX2F1eCkodm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCQkgICBjb25zdCB2b2lkICpkYXRhLAorCQkJCQkJICAgdWludDE2X3QgZGF0YWxlbik7CisKKwkJdm9pZCAoKmdldF9jb250ZXh0KSh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwgdm9pZCAqY29udGV4dCk7CisKKwkJdm9pZCAoKnB1dF9jb250ZXh0KSh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwgdm9pZCAqY29udGV4dCk7CisKKwkJdm9pZCAoKm1hcmtfcGFnZXNfY2FjaGVkKSh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQkJICBzdHJ1Y3QgcGFnZXZlYyAqY2FjaGVkX3B2ZWMpOworCisJCXZvaWQgKCpub3dfdW5jYWNoZWQpKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhKTsKKwl9OworCitUaGlzIGhhcyB0aGUgZm9sbG93aW5nIGZpZWxkczoKKworICgxKSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0IFttYW5kYXRvcnldLgorCisgICAgIFRoaXMgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisJKCopIEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgKKworCSAgICBUaGlzIGRlZmluZXMgYW4gaW5kZXgsIHdoaWNoIGlzIGEgc3BlY2lhbCBGUy1DYWNoZSB0eXBlLgorCisJKCopIEZTQ0FDSEVfQ09PS0lFX1RZUEVfREFUQUZJTEUKKworCSAgICBUaGlzIGRlZmluZXMgYW4gb3JkaW5hcnkgZGF0YSBmaWxlLgorCisJKCopIEFueSBvdGhlciB2YWx1ZSBiZXR3ZWVuIDIgYW5kIDI1NQorCisJICAgIFRoaXMgZGVmaW5lcyBhbiBleHRyYW9yZGluYXJ5IG9iamVjdCBzdWNoIGFzIGFuIFhBVFRSLgorCisgKDIpIFRoZSBuYW1lIG9mIHRoZSBvYmplY3QgdHlwZSAoTlVMIHRlcm1pbmF0ZWQgdW5sZXNzIGFsbCAxNiBjaGFycyBhcmUgdXNlZCkKKyAgICAgW29wdGlvbmFsXS4KKworICgzKSBBIGZ1bmN0aW9uIHRvIHNlbGVjdCB0aGUgY2FjaGUgaW4gd2hpY2ggdG8gc3RvcmUgYW4gaW5kZXggW29wdGlvbmFsXS4KKworICAgICBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2hlbiBhbiBpbmRleCBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgaW4gYSBjYWNoZQorICAgICBkdXJpbmcgdGhlIGluc3RhbnRpYXRpb24gb2YgYSBub24taW5kZXggb2JqZWN0LiAgT25seSB0aGUgaW1tZWRpYXRlIGluZGV4CisgICAgIHBhcmVudCBmb3IgdGhlIG5vbi1pbmRleCBvYmplY3Qgd2lsbCBiZSBxdWVyaWVkLiAgQW55IGluZGljZXMgYWJvdmUgdGhhdAorICAgICBpbiB0aGUgaGllcmFyY2h5IG1heSBiZSBzdG9yZWQgaW4gbXVsdGlwbGUgY2FjaGVzLiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdAorICAgICBuZWVkIHRvIGJlIHN1cHBsaWVkIGZvciBhbnkgbm9uLWluZGV4IG9iamVjdCBvciBhbnkgaW5kZXggdGhhdCB3aWxsIG9ubHkKKyAgICAgaGF2ZSBpbmRleCBjaGlsZHJlbi4KKworICAgICBJZiB0aGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwbGllZCBvciBpZiBpdCByZXR1cm5zIE5VTEwgdGhlbiB0aGUgZmlyc3QKKyAgICAgY2FjaGUgaW4gdGhlIHBhcmVudCdzIGxpc3Qgd2lsbCBiZSBjaG9zZWQsIG9yIGZhaWxpbmcgdGhhdCwgdGhlIGZpcnN0CisgICAgIGNhY2hlIGluIHRoZSBtYXN0ZXIgbGlzdC4KKworICg0KSBBIGZ1bmN0aW9uIHRvIHJldHJpZXZlIGFuIG9iamVjdCdzIGtleSBmcm9tIHRoZSBuZXRmcyBbbWFuZGF0b3J5XS4KKworICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIG5ldGZzIGRhdGEgdGhhdCB3YXMgcGFzc2VkIHRvIHRoZQorICAgICBjb29raWUgYWNxdWlzaXRpb24gZnVuY3Rpb24gYW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBrZXkgZGF0YSB0aGF0IGl0IG1heQorICAgICBwcm92aWRlLiAgSXQgc2hvdWxkIHdyaXRlIHRoZSByZXF1aXJlZCBrZXkgZGF0YSBpbnRvIHRoZSBnaXZlbiBidWZmZXIgYW5kCisgICAgIHJldHVybiB0aGUgcXVhbnRpdHkgaXQgd3JvdGUuCisKKyAoNSkgQSBmdW5jdGlvbiB0byByZXRyaWV2ZSBhdHRyaWJ1dGUgZGF0YSBmcm9tIHRoZSBuZXRmcyBbb3B0aW9uYWxdLgorCisgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV0ZnMgZGF0YSB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlCisgICAgIGNvb2tpZSBhY3F1aXNpdGlvbiBmdW5jdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gdGhlIHNpemUgb2YgdGhlIGZpbGUgaWYKKyAgICAgdGhpcyBpcyBhIGRhdGEgZmlsZS4gIFRoZSBzaXplIG1heSBiZSB1c2VkIHRvIGdvdmVybiBob3cgbXVjaCBjYWNoZSBtdXN0CisgICAgIGJlIHJlc2VydmVkIGZvciB0aGlzIGZpbGUgaW4gdGhlIGNhY2hlLgorCisgICAgIElmIHRoZSBmdW5jdGlvbiBpcyBhYnNlbnQsIGEgZmlsZSBzaXplIG9mIDAgaXMgYXNzdW1lZC4KKworICg2KSBBIGZ1bmN0aW9uIHRvIHJldHJpZXZlIGF1eGlsbGlhcnkgZGF0YSBmcm9tIHRoZSBuZXRmcyBbb3B0aW9uYWxdLgorCisgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV0ZnMgZGF0YSB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlCisgICAgIGNvb2tpZSBhY3F1aXNpdGlvbiBmdW5jdGlvbiBhbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGF1eGlsbGlhcnkgZGF0YSB0aGF0CisgICAgIGl0IG1heSBwcm92aWRlLiAgSXQgc2hvdWxkIHdyaXRlIHRoZSBhdXhpbGxpYXJ5IGRhdGEgaW50byB0aGUgZ2l2ZW4gYnVmZmVyCisgICAgIGFuZCByZXR1cm4gdGhlIHF1YW50aXR5IGl0IHdyb3RlLgorCisgICAgIElmIHRoaXMgZnVuY3Rpb24gaXMgYWJzZW50LCB0aGUgYXV4aWxsaWFyeSBkYXRhIGxlbmd0aCB3aWxsIGJlIHNldCB0byAwLgorCisgICAgIFRoZSBsZW5ndGggb2YgdGhlIGF1eGlsbGlhcnkgZGF0YSBidWZmZXIgbWF5IGJlIGRlcGVuZGVudCBvbiB0aGUga2V5CisgICAgIGxlbmd0aC4gIEEgbmV0ZnMgbXVzdG4ndCByZWx5IG9uIGJlaW5nIGFibGUgdG8gcHJvdmlkZSBtb3JlIHRoYW4gNDAwIGJ5dGVzCisgICAgIGZvciBib3RoLgorCisgKDcpIEEgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIGF1eGlsbGlhcnkgZGF0YSBbb3B0aW9uYWxdLgorCisgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gY2hlY2sgdGhhdCBhIG1hdGNoIGZvdW5kIGluIHRoZSBjYWNoZSBmb3IKKyAgICAgdGhpcyBvYmplY3QgaXMgdmFsaWQuICBGb3IgaW5zdGFuY2Ugd2l0aCBBRlMgaXQgY291bGQgY2hlY2sgdGhlIGF1eGlsbGlhcnkKKyAgICAgZGF0YSBhZ2FpbnN0IHRoZSBkYXRhIHZlcnNpb24gbnVtYmVyIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIgdG8gZGV0ZXJtaW5lCisgICAgIHdoZXRoZXIgdGhlIGluZGV4IGVudHJ5IGluIGEgY2FjaGUgaXMgc3RpbGwgdmFsaWQuCisKKyAgICAgSWYgdGhpcyBmdW5jdGlvbiBpcyBhYnNlbnQsIGl0IHdpbGwgYmUgYXNzdW1lZCB0aGF0IG1hdGNoaW5nIG9iamVjdHMgaW4gYQorICAgICBjYWNoZSBhcmUgYWx3YXlzIHZhbGlkLgorCisgICAgIElmIHByZXNlbnQsIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKworCSgqKSBGU0NBQ0hFX0NIRUNLQVVYX09LQVkJCS0gdGhlIGVudHJ5IGlzIG9rYXkgYXMgaXMKKwkoKikgRlNDQUNIRV9DSEVDS0FVWF9ORUVEU19VUERBVEUJLSB0aGUgZW50cnkgcmVxdWlyZXMgdXBkYXRlCisJKCopIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEUJCS0gdGhlIGVudHJ5IHNob3VsZCBiZSBkZWxldGVkCisKKyAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSB1c2VkIHRvIGV4dHJhY3QgZGF0YSBmcm9tIHRoZSBhdXhpbGxpYXJ5IGRhdGEgaW4KKyAgICAgdGhlIGNhY2hlIGFuZCBjb3B5IGl0IGludG8gdGhlIG5ldGZzJ3Mgc3RydWN0dXJlcy4KKworICg4KSBBIHBhaXIgb2YgZnVuY3Rpb25zIHRvIG1hbmFnZSBjb250ZXh0cyBmb3IgdGhlIGNvbXBsZXRpb24gY2FsbGJhY2sKKyAgICAgW29wdGlvbmFsXS4KKworICAgICBUaGUgY2FjaGUgcmVhZC93cml0ZSBmdW5jdGlvbnMgYXJlIHBhc3NlZCBhIGNvbnRleHQgd2hpY2ggaXMgdGhlbiBwYXNzZWQKKyAgICAgdG8gdGhlIEkvTyBjb21wbGV0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uLiAgVG8gZW5zdXJlIHRoaXMgY29udGV4dCByZW1haW5zCisgICAgIHZhbGlkIHVudGlsIGFmdGVyIHRoZSBJL08gY29tcGxldGlvbiBpcyBjYWxsZWQsIHR3byBmdW5jdGlvbnMgbWF5IGJlCisgICAgIHByb3ZpZGVkOiBvbmUgdG8gZ2V0IGFuIGV4dHJhIHJlZmVyZW5jZSBvbiB0aGUgY29udGV4dCwgYW5kIG9uZSB0byBkcm9wIGEKKyAgICAgcmVmZXJlbmNlIHRvIGl0LgorCisgICAgIElmIHRoZSBjb250ZXh0IGlzIG5vdCB1c2VkIG9yIGlzIGEgdHlwZSBvZiBvYmplY3QgdGhhdCB3b24ndCBnbyBvdXQgb2YKKyAgICAgc2NvcGUsIHRoZW4gdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcmVxdWlyZWQuICBUaGVzZSBmdW5jdGlvbnMgYXJlIG5vdAorICAgICByZXF1aXJlZCBmb3IgaW5kaWNlcyBhcyBpbmRpY2VzIG1heSBub3QgY29udGFpbiBkYXRhLiAgVGhlc2UgZnVuY3Rpb25zIG1heQorICAgICBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQgYW5kIHNvIG1heSBub3Qgc2xlZXAuCisKKyAoOSkgQSBmdW5jdGlvbiB0byBtYXJrIGEgcGFnZSBhcyByZXRhaW5pbmcgY2FjaGUgbWV0YWRhdGEgW29wdGlvbmFsXS4KKworICAgICBUaGlzIGlzIGNhbGxlZCBieSB0aGUgY2FjaGUgdG8gaW5kaWNhdGUgdGhhdCBpdCBpcyByZXRhaW5pbmcgaW4tbWVtb3J5CisgICAgIGluZm9ybWF0aW9uIGZvciB0aGlzIHBhZ2UgYW5kIHRoYXQgdGhlIG5ldGZzIHNob3VsZCB1bmNhY2hlIHRoZSBwYWdlIHdoZW4KKyAgICAgaXQgaGFzIGZpbmlzaGVkLiAgVGhpcyBkb2VzIG5vdCBpbmRpY2F0ZSB3aGV0aGVyIHRoZXJlJ3MgZGF0YSBvbiB0aGUgZGlzaworICAgICBvciBub3QuICBOb3RlIHRoYXQgc2V2ZXJhbCBwYWdlcyBhdCBvbmNlIG1heSBiZSBwcmVzZW50ZWQgZm9yIG1hcmtpbmcuCisKKyAgICAgVGhlIFBHX2ZzY2FjaGUgYml0IGlzIHNldCBvbiB0aGUgcGFnZXMgYmVmb3JlIHRoaXMgZnVuY3Rpb24gd291bGQgYmUKKyAgICAgY2FsbGVkLCBzbyB0aGUgZnVuY3Rpb24gbmVlZCBub3QgYmUgcHJvdmlkZWQgaWYgdGhpcyBpcyBzdWZmaWNpZW50LgorCisgICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IHJlcXVpcmVkIGZvciBpbmRpY2VzIGFzIHRoZXkncmUgbm90IHBlcm1pdHRlZCBkYXRhLgorCisoMTApIEEgZnVuY3Rpb24gdG8gdW5tYXJrIGFsbCB0aGUgcGFnZXMgcmV0YWluaW5nIGNhY2hlIG1ldGFkYXRhIFttYW5kYXRvcnldLgorCisgICAgIFRoaXMgaXMgY2FsbGVkIGJ5IEZTLUNhY2hlIHRvIGluZGljYXRlIHRoYXQgYSBiYWNraW5nIHN0b3JlIGlzIGJlaW5nCisgICAgIHVuYm91bmQgZnJvbSBhIGNvb2tpZSBhbmQgdGhhdCBhbGwgdGhlIG1hcmtzIG9uIHRoZSBwYWdlcyBzaG91bGQgYmUKKyAgICAgY2xlYXJlZCB0byBwcmV2ZW50IGNvbmZ1c2lvbi4gIE5vdGUgdGhhdCB0aGUgY2FjaGUgd2lsbCBoYXZlIHRvcm4gZG93biBhbGwKKyAgICAgaXRzIHRyYWNraW5nIGluZm9ybWF0aW9uIHNvIHRoYXQgdGhlIHBhZ2VzIGRvbid0IG5lZWQgdG8gYmUgZXhwbGljaXRseQorICAgICB1bmNhY2hlZC4KKworICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZXF1aXJlZCBmb3IgaW5kaWNlcyBhcyB0aGV5J3JlIG5vdCBwZXJtaXR0ZWQgZGF0YS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTkVUV09SSyBGSUxFU1lTVEVNIChVTilSRUdJU1RSQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmaXJzdCBzdGVwIGlzIHRvIGRlY2xhcmUgdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSB0byB0aGUgY2FjaGUuICBUaGlzIGFsc28KK2ludm9sdmVzIHNwZWNpZnlpbmcgdGhlIGxheW91dCBvZiB0aGUgcHJpbWFyeSBpbmRleCAoZm9yIEFGUywgdGhpcyB3b3VsZCBiZSB0aGUKKyJjZWxsIiBsZXZlbCkuCisKK1RoZSByZWdpc3RyYXRpb24gZnVuY3Rpb24gaXM6CisKKwlpbnQgZnNjYWNoZV9yZWdpc3Rlcl9uZXRmcyhzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqbmV0ZnMpOworCitJdCBqdXN0IHRha2VzIGEgcG9pbnRlciB0byB0aGUgbmV0ZnMgZGVmaW5pdGlvbi4gIEl0IHJldHVybnMgMCBvciBhbiBlcnJvciBhcworYXBwcm9wcmlhdGUuCisKK0ZvciBrQUZTLCByZWdpc3RyYXRpb24gaXMgZG9uZSBhcyBmb2xsb3dzOgorCisJcmV0ID0gZnNjYWNoZV9yZWdpc3Rlcl9uZXRmcygmYWZzX2NhY2hlX25ldGZzKTsKKworVGhlIGxhc3Qgc3RlcCBpcywgb2YgY291cnNlLCB1bnJlZ2lzdHJhdGlvbjoKKworCXZvaWQgZnNjYWNoZV91bnJlZ2lzdGVyX25ldGZzKHN0cnVjdCBmc2NhY2hlX25ldGZzICpuZXRmcyk7CisKKworPT09PT09PT09PT09PT09PQorQ0FDSEUgVEFHIExPT0tVUAorPT09PT09PT09PT09PT09PQorCitGUy1DYWNoZSBwZXJtaXRzIHRoZSB1c2Ugb2YgbW9yZSB0aGFuIG9uZSBjYWNoZS4gIFRvIHBlcm1pdCBwYXJ0aWN1bGFyIGluZGV4CitzdWJ0cmVlcyB0byBiZSBib3VuZCB0byBwYXJ0aWN1bGFyIGNhY2hlcywgdGhlIHNlY29uZCBzdGVwIGlzIHRvIGxvb2sgdXAgY2FjaGUKK3JlcHJlc2VudGF0aW9uIHRhZ3MuICBUaGlzIHN0ZXAgaXMgb3B0aW9uYWw7IGl0IGNhbiBiZSBsZWZ0IGVudGlyZWx5IHVwIHRvCitGUy1DYWNoZSBhcyB0byB3aGljaCBjYWNoZSBzaG91bGQgYmUgdXNlZC4gIFRoZSBwcm9ibGVtIHdpdGggZG9pbmcgdGhhdCBpcyB0aGF0CitGUy1DYWNoZSB3aWxsIGFsd2F5cyBwaWNrIHRoZSBmaXJzdCBjYWNoZSB0aGF0IHdhcyByZWdpc3RlcmVkLgorCitUbyBnZXQgdGhlIHJlcHJlc2VudGF0aW9uIGZvciBhIG5hbWVkIHRhZzoKKworCXN0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqZnNjYWNoZV9sb29rdXBfY2FjaGVfdGFnKGNvbnN0IGNoYXIgKm5hbWUpOworCitUaGlzIHRha2VzIGEgdGV4dCBzdHJpbmcgYXMgdGhlIG5hbWUgYW5kIHJldHVybnMgYSByZXByZXNlbnRhdGlvbiBvZiBhIHRhZy4gIEl0Cit3aWxsIG5ldmVyIHJldHVybiBhbiBlcnJvci4gIEl0IG1heSByZXR1cm4gYSBkdW1teSB0YWcsIGhvd2V2ZXIsIGlmIGl0IHJ1bnMgb3V0CitvZiBtZW1vcnk7IHRoaXMgd2lsbCBpbmhpYml0IGNhY2hpbmcgd2l0aCB0aGlzIHRhZy4KKworQW55IHJlcHJlc2VudGF0aW9uIHNvIG9idGFpbmVkIG11c3QgYmUgcmVsZWFzZWQgYnkgcGFzc2luZyBpdCB0byB0aGlzIGZ1bmN0aW9uOgorCisJdm9pZCBmc2NhY2hlX3JlbGVhc2VfY2FjaGVfdGFnKHN0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqdGFnKTsKKworVGhlIHRhZyB3aWxsIGJlIHJldHJpZXZlZCBieSBGUy1DYWNoZSB3aGVuIGl0IGNhbGxzIHRoZSBvYmplY3QgZGVmaW5pdGlvbgorb3BlcmF0aW9uIHNlbGVjdF9jYWNoZSgpLgorCisKKz09PT09PT09PT09PT09PT09PQorSU5ERVggUkVHSVNUUkFUSU9OCis9PT09PT09PT09PT09PT09PT0KKworVGhlIHRoaXJkIHN0ZXAgaXMgdG8gaW5mb3JtIEZTLUNhY2hlIGFib3V0IHBhcnQgb2YgYW4gaW5kZXggaGllcmFyY2h5IHRoYXQgY2FuCitiZSB1c2VkIHRvIGxvY2F0ZSBmaWxlcy4gIFRoaXMgaXMgZG9uZSBieSByZXF1ZXN0aW5nIGEgY29va2llIGZvciBlYWNoIGluZGV4IGluCit0aGUgcGF0aCB0byB0aGUgZmlsZToKKworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqCisJZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKnBhcmVudCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZnNjYWNoZV9vYmplY3RfZGVmICpkZWYsCisJCQkgICAgICAgdm9pZCAqbmV0ZnNfZGF0YSk7CisKK1RoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBpbmRleCBlbnRyeSBpbiB0aGUgaW5kZXggcmVwcmVzZW50ZWQgYnkgcGFyZW50LAorZmlsbGluZyBpbiB0aGUgaW5kZXggZW50cnkgYnkgY2FsbGluZyB0aGUgb3BlcmF0aW9ucyBwb2ludGVkIHRvIGJ5IGRlZi4KKworTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbmV2ZXIgcmV0dXJucyBhbiBlcnJvciAtIGFsbCBlcnJvcnMgYXJlIGhhbmRsZWQKK2ludGVybmFsbHkuICBJdCBtYXksIGhvd2V2ZXIsIHJldHVybiBOVUxMIHRvIGluZGljYXRlIG5vIGNvb2tpZS4gIEl0IGlzIHF1aXRlCithY2NlcHRhYmxlIHRvIHBhc3MgdGhpcyB0b2tlbiBiYWNrIHRvIHRoaXMgZnVuY3Rpb24gYXMgdGhlIHBhcmVudCB0byBhbm90aGVyCithY3F1aXNpdGlvbiAob3IgZXZlbiB0byB0aGUgcmVsaW5xdWlzaCBjb29raWUsIHJlYWQgcGFnZSBhbmQgd3JpdGUgcGFnZQorZnVuY3Rpb25zIC0gc2VlIGJlbG93KS4KKworTm90ZSBhbHNvIHRoYXQgbm8gaW5kaWNlcyBhcmUgYWN0dWFsbHkgY3JlYXRlZCBpbiBhIGNhY2hlIHVudGlsIGEgbm9uLWluZGV4CitvYmplY3QgbmVlZHMgdG8gYmUgY3JlYXRlZCBzb21ld2hlcmUgZG93biB0aGUgaGllcmFyY2h5LiAgRnVydGhlcm1vcmUsIGFuIGluZGV4CittYXkgYmUgY3JlYXRlZCBpbiBzZXZlcmFsIGRpZmZlcmVudCBjYWNoZXMgaW5kZXBlbmRlbnRseSBhdCBkaWZmZXJlbnQgdGltZXMuCitUaGlzIGlzIGFsbCBoYW5kbGVkIHRyYW5zcGFyZW50bHksIGFuZCB0aGUgbmV0ZnMgZG9lc24ndCBzZWUgYW55IG9mIGl0LgorCitGb3IgZXhhbXBsZSwgd2l0aCBBRlMsIGEgY2VsbCB3b3VsZCBiZSBhZGRlZCB0byB0aGUgcHJpbWFyeSBpbmRleC4gIFRoaXMgaW5kZXgKK2VudHJ5IHdvdWxkIGhhdmUgYSBkZXBlbmRlbnQgaW5vZGUgY29udGFpbmluZyBhIHZvbHVtZSBsb2NhdGlvbiBpbmRleCBmb3IgdGhlCit2b2x1bWUgbWFwcGluZ3Mgd2l0aGluIHRoaXMgY2VsbDoKKworCWNlbGwtPmNhY2hlID0KKwkJZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZShhZnNfY2FjaGVfbmV0ZnMucHJpbWFyeV9pbmRleCwKKwkJCQkgICAgICAgJmFmc19jZWxsX2NhY2hlX2luZGV4X2RlZiwKKwkJCQkgICAgICAgY2VsbCk7CisKK1RoZW4gd2hlbiBhIHZvbHVtZSBsb2NhdGlvbiB3YXMgYWNjZXNzZWQsIGl0IHdvdWxkIGJlIGVudGVyZWQgaW50byB0aGUgY2VsbCdzCitpbmRleCBhbmQgYW4gaW5vZGUgd291bGQgYmUgYWxsb2NhdGVkIHRoYXQgYWN0cyBhcyBhIHZvbHVtZSB0eXBlIGFuZCBoYXNoIGNoYWluCitjb21iaW5hdGlvbjoKKworCXZsb2NhdGlvbi0+Y2FjaGUgPQorCQlmc2NhY2hlX2FjcXVpcmVfY29va2llKGNlbGwtPmNhY2hlLAorCQkJCSAgICAgICAmYWZzX3Zsb2NhdGlvbl9jYWNoZV9pbmRleF9kZWYsCisJCQkJICAgICAgIHZsb2NhdGlvbik7CisKK0FuZCB0aGVuIGEgcGFydGljdWxhciBmbGF2b3VyIG9mIHZvbHVtZSAoUi9PIGZvciBleGFtcGxlKSBjb3VsZCBiZSBhZGRlZCB0bwordGhhdCBpbmRleCwgY3JlYXRpbmcgYW5vdGhlciBpbmRleCBmb3Igdm5vZGVzIChBRlMgaW5vZGUgZXF1aXZhbGVudHMpOgorCisJdm9sdW1lLT5jYWNoZSA9CisJCWZzY2FjaGVfYWNxdWlyZV9jb29raWUodmxvY2F0aW9uLT5jYWNoZSwKKwkJCQkgICAgICAgJmFmc192b2x1bWVfY2FjaGVfaW5kZXhfZGVmLAorCQkJCSAgICAgICB2b2x1bWUpOworCisKKz09PT09PT09PT09PT09PT09PT09PT0KK0RBVEEgRklMRSBSRUdJU1RSQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvdXJ0aCBzdGVwIGlzIHRvIHJlcXVlc3QgYSBkYXRhIGZpbGUgYmUgY3JlYXRlZCBpbiB0aGUgY2FjaGUuICBUaGlzIGlzCitpZGVudGljYWwgdG8gaW5kZXggY29va2llIGFjcXVpc2l0aW9uLiAgVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSB0eXBlIGluCit0aGUgb2JqZWN0IGRlZmluaXRpb24gc2hvdWxkIGJlIHNvbWV0aGluZyBvdGhlciB0aGFuIGluZGV4IHR5cGUuCisKKwl2bm9kZS0+Y2FjaGUgPQorCQlmc2NhY2hlX2FjcXVpcmVfY29va2llKHZvbHVtZS0+Y2FjaGUsCisJCQkJICAgICAgICZhZnNfdm5vZGVfY2FjaGVfb2JqZWN0X2RlZiwKKwkJCQkgICAgICAgdm5vZGUpOworCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTUlTQ0VMTEFORU9VUyBPQkpFQ1QgUkVHSVNUUkFUSU9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQW4gb3B0aW9uYWwgc3RlcCBpcyB0byByZXF1ZXN0IGFuIG9iamVjdCBvZiBtaXNjZWxsYW5lb3VzIHR5cGUgYmUgY3JlYXRlZCBpbgordGhlIGNhY2hlLiAgVGhpcyBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIGluZGV4IGNvb2tpZSBhY3F1aXNpdGlvbi4gIFRoZSBvbmx5CitkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIHR5cGUgaW4gdGhlIG9iamVjdCBkZWZpbml0aW9uIHNob3VsZCBiZSBzb21ldGhpbmcgb3RoZXIKK3RoYW4gaW5kZXggdHlwZS4gIFdoaWxzdCB0aGUgcGFyZW50IG9iamVjdCBjb3VsZCBiZSBhbiBpbmRleCwgaXQncyBtb3JlIGxpa2VseQoraXQgd291bGQgYmUgc29tZSBvdGhlciB0eXBlIG9mIG9iamVjdCBzdWNoIGFzIGEgZGF0YSBmaWxlLgorCisJeGF0dHItPmNhY2hlID0KKwkJZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSh2bm9kZS0+Y2FjaGUsCisJCQkJICAgICAgICZhZnNfeGF0dHJfY2FjaGVfb2JqZWN0X2RlZiwKKwkJCQkgICAgICAgeGF0dHIpOworCitNaXNjZWxsYW5lb3VzIG9iamVjdHMgbWlnaHQgYmUgdXNlZCB0byBzdG9yZSBleHRlbmRlZCBhdHRyaWJ1dGVzIG9yIGRpcmVjdG9yeQorZW50cmllcyBmb3IgZXhhbXBsZS4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorU0VUVElORyBUSEUgREFUQSBGSUxFIFNJWkUKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmaWZ0aCBzdGVwIGlzIHRvIHNldCB0aGUgcGh5c2ljYWwgYXR0cmlidXRlcyBvZiB0aGUgZmlsZSwgc3VjaCBhcyBpdHMgc2l6ZS4KK1RoaXMgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHJlc2VydmUgYW55IHNwYWNlIGluIHRoZSBjYWNoZSwgYnV0IHBlcm1pdHMgdGhlCitjYWNoZSB0byBhZGp1c3QgaXRzIG1ldGFkYXRhIGZvciBkYXRhIHRyYWNraW5nIGFwcHJvcHJpYXRlbHk6CisKKwlpbnQgZnNjYWNoZV9hdHRyX2NoYW5nZWQoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpOworCitUaGUgY2FjaGUgd2lsbCByZXR1cm4gLUVOT0JVRlMgaWYgdGhlcmUgaXMgbm8gYmFja2luZyBjYWNoZSBvciBpZiB0aGVyZSBpcyBubworc3BhY2UgdG8gYWxsb2NhdGUgYW55IGV4dHJhIG1ldGFkYXRhIHJlcXVpcmVkIGluIHRoZSBjYWNoZS4gIFRoZSBhdHRyaWJ1dGVzCit3aWxsIGJlIGFjY2Vzc2VkIHdpdGggdGhlIGdldF9hdHRyKCkgY29va2llIGRlZmluaXRpb24gb3BlcmF0aW9uLgorCitOb3RlIHRoYXQgYXR0ZW1wdHMgdG8gcmVhZCBvciB3cml0ZSBkYXRhIHBhZ2VzIGluIHRoZSBjYWNoZSBvdmVyIHRoaXMgc2l6ZSBtYXkKK2JlIHJlYnVmZmVkIHdpdGggLUVOT0JVRlMuCisKK1RoaXMgb3BlcmF0aW9uIHNjaGVkdWxlcyBhbiBhdHRyaWJ1dGUgYWRqdXN0bWVudCB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkgYXQKK3NvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgYW5kIGFzIHN1Y2gsIGl0IG1heSBoYXBwZW4gYWZ0ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMKK3RvIHRoZSBjYWxsZXIuICBUaGUgYXR0cmlidXRlIGFkanVzdG1lbnQgZXhjbHVkZXMgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucy4KKworCis9PT09PT09PT09PT09PT09PT09PT0KK1BBR0UgUkVBRC9BTExPQy9XUklURQorPT09PT09PT09PT09PT09PT09PT09CisKK0FuZCB0aGUgc2l4dGggc3RlcCBpcyB0byBzdG9yZSBhbmQgcmV0cmlldmUgcGFnZXMgaW4gdGhlIGNhY2hlLiAgVGhlcmUgYXJlCit0aHJlZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCB0byBkbyB0aGlzLgorCitOb3RlOgorCisgKDEpIEEgcGFnZSBzaG91bGQgbm90IGJlIHJlLXJlYWQgb3IgcmUtYWxsb2NhdGVkIHdpdGhvdXQgdW5jYWNoaW5nIGl0IGZpcnN0LgorCisgKDIpIEEgcmVhZCBvciBhbGxvY2F0ZWQgcGFnZSBtdXN0IGJlIHVuY2FjaGVkIHdoZW4gdGhlIG5ldGZzIHBhZ2UgaXMgcmVsZWFzZWQKKyAgICAgZnJvbSB0aGUgcGFnZWNhY2hlLgorCisgKDMpIEEgcGFnZSBzaG91bGQgb25seSBiZSB3cml0dGVuIHRvIHRoZSBjYWNoZSBpZiBwcmV2aW91cyByZWFkIG9yIGFsbG9jYXRlZC4KKworVGhpcyBwZXJtaXRzIHRoZSBjYWNoZSB0byBtYWludGFpbiBpdHMgcGFnZSB0cmFja2luZyBpbiBwcm9wZXIgb3JkZXIuCisKKworUEFHRSBSRUFECistLS0tLS0tLS0KKworRmlyc3RseSwgdGhlIG5ldGZzIHNob3VsZCBhc2sgRlMtQ2FjaGUgdG8gZXhhbWluZSB0aGUgY2FjaGVzIGFuZCByZWFkIHRoZQorY29udGVudHMgY2FjaGVkIGZvciBhIHBhcnRpY3VsYXIgcGFnZSBvZiBhIHBhcnRpY3VsYXIgZmlsZSBpZiBwcmVzZW50LCBvciBlbHNlCithbGxvY2F0ZSBzcGFjZSB0byBzdG9yZSB0aGUgY29udGVudHMgaWYgbm90OgorCisJdHlwZWRlZgorCXZvaWQgKCpmc2NhY2hlX3J3X2NvbXBsZXRlX3QpKHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgIHZvaWQgKmNvbnRleHQsCisJCQkJICAgICAgaW50IGVycm9yKTsKKworCWludCBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCQkgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICAgICAgIGZzY2FjaGVfcndfY29tcGxldGVfdCBlbmRfaW9fZnVuYywKKwkJCQkgICAgICAgdm9pZCAqY29udGV4dCwKKwkJCQkgICAgICAgZ2ZwX3QgZ2ZwKTsKKworVGhlIGNvb2tpZSBhcmd1bWVudCBtdXN0IHNwZWNpZnkgYSBjb29raWUgZm9yIGFuIG9iamVjdCB0aGF0IGlzbid0IGFuIGluZGV4LAordGhlIHBhZ2Ugc3BlY2lmaWVkIHdpbGwgaGF2ZSB0aGUgZGF0YSBsb2FkZWQgaW50byBpdCAoYW5kIGlzIGFsc28gdXNlZCB0bworc3BlY2lmeSB0aGUgcGFnZSBudW1iZXIpLCBhbmQgdGhlIGdmcCBhcmd1bWVudCBpcyB1c2VkIHRvIGNvbnRyb2wgaG93IGFueQorbWVtb3J5IGFsbG9jYXRpb25zIG1hZGUgYXJlIHNhdGlzZmllZC4KKworSWYgdGhlIGNvb2tpZSBpbmRpY2F0ZXMgdGhlIGlub2RlIGlzIG5vdCBjYWNoZWQ6CisKKyAoMSkgVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC1FTk9CVUZTLgorCitFbHNlIGlmIHRoZXJlJ3MgYSBjb3B5IG9mIHRoZSBwYWdlIHJlc2lkZW50IGluIHRoZSBjYWNoZToKKworICgxKSBUaGUgbWFya19wYWdlc19jYWNoZWQoKSBjb29raWUgb3BlcmF0aW9uIHdpbGwgYmUgY2FsbGVkIG9uIHRoYXQgcGFnZS4KKworICgyKSBUaGUgZnVuY3Rpb24gd2lsbCBzdWJtaXQgYSByZXF1ZXN0IHRvIHJlYWQgdGhlIGRhdGEgZnJvbSB0aGUgY2FjaGUncworICAgICBiYWNraW5nIGRldmljZSBkaXJlY3RseSBpbnRvIHRoZSBwYWdlIHNwZWNpZmllZC4KKworICgzKSBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMC4KKworICg0KSBXaGVuIHRoZSByZWFkIGlzIGNvbXBsZXRlLCBlbmRfaW9fZnVuYygpIHdpbGwgYmUgaW52b2tlZCB3aXRoOgorCisgICAgICgqKSBUaGUgbmV0ZnMgZGF0YSBzdXBwbGllZCB3aGVuIHRoZSBjb29raWUgd2FzIGNyZWF0ZWQuCisKKyAgICAgKCopIFRoZSBwYWdlIGRlc2NyaXB0b3IuCisKKyAgICAgKCopIFRoZSBjb250ZXh0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgYWJvdmUgZnVuY3Rpb24uICBUaGlzIHdpbGwgYmUKKyAgICAgICAgIG1haW50YWluZWQgd2l0aCB0aGUgZ2V0X2NvbnRleHQvcHV0X2NvbnRleHQgZnVuY3Rpb25zIG1lbnRpb25lZCBhYm92ZS4KKworICAgICAoKikgQW4gYXJndW1lbnQgdGhhdCdzIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBmb3IgYW4gZXJyb3IgY29kZS4KKworICAgICBJZiBhbiBlcnJvciBvY2N1cnMsIGl0IHNob3VsZCBiZSBhc3N1bWVkIHRoYXQgdGhlIHBhZ2UgY29udGFpbnMgbm8gdXNhYmxlCisgICAgIGRhdGEuCisKKyAgICAgZW5kX2lvX2Z1bmMoKSB3aWxsIGJlIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQgaWYgdGhlIHJlYWQgaXMgcmVzdWx0cyBpbgorICAgICBhbiBlcnJvciwgYnV0IGl0IG1pZ2h0IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCBpZiB0aGUgcmVhZCBpcworICAgICBzdWNjZXNzZnVsLgorCitPdGhlcndpc2UsIGlmIHRoZXJlJ3Mgbm90IGEgY29weSBhdmFpbGFibGUgaW4gY2FjaGUsIGJ1dCB0aGUgY2FjaGUgbWF5IGJlIGFibGUKK3RvIHN0b3JlIHRoZSBwYWdlOgorCisgKDEpIFRoZSBtYXJrX3BhZ2VzX2NhY2hlZCgpIGNvb2tpZSBvcGVyYXRpb24gd2lsbCBiZSBjYWxsZWQgb24gdGhhdCBwYWdlLgorCisgKDIpIEEgYmxvY2sgbWF5IGJlIHJlc2VydmVkIGluIHRoZSBjYWNoZSBhbmQgYXR0YWNoZWQgdG8gdGhlIG9iamVjdCBhdCB0aGUKKyAgICAgYXBwcm9wcmlhdGUgcGxhY2UuCisKKyAoMykgVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC1FTk9EQVRBLgorCitUaGlzIGZ1bmN0aW9uIG1heSBhbHNvIHJldHVybiAtRU5PTUVNIG9yIC1FSU5UUiwgaW4gd2hpY2ggY2FzZSBpdCB3b24ndCBoYXZlCityZWFkIGFueSBkYXRhIGZyb20gdGhlIGNhY2hlLgorCisKK1BBR0UgQUxMT0NBVEUKKy0tLS0tLS0tLS0tLS0KKworQWx0ZXJuYXRpdmVseSwgaWYgdGhlcmUncyBub3QgZXhwZWN0ZWQgdG8gYmUgYW55IGRhdGEgaW4gdGhlIGNhY2hlIGZvciBhIHBhZ2UKK2JlY2F1c2UgdGhlIGZpbGUgaGFzIGJlZW4gZXh0ZW5kZWQsIGEgYmxvY2sgY2FuIHNpbXBseSBiZSBhbGxvY2F0ZWQgaW5zdGVhZDoKKworCWludCBmc2NhY2hlX2FsbG9jX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgICAgZ2ZwX3QgZ2ZwKTsKKworVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZSgpIGZ1bmN0aW9uLCBleGNlcHQgdGhhdCBpdAorbmV2ZXIgcmVhZHMgZnJvbSB0aGUgY2FjaGUuICBJdCB3aWxsIHJldHVybiAwIGlmIGEgYmxvY2sgaGFzIGJlZW4gYWxsb2NhdGVkLAorcmF0aGVyIHRoYW4gLUVOT0RBVEEgYXMgdGhlIG90aGVyIHdvdWxkLiAgT25lIG9yIHRoZSBvdGhlciBtdXN0IGJlIHBlcmZvcm1lZAorYmVmb3JlIHdyaXRpbmcgdG8gdGhlIGNhY2hlLgorCitUaGUgbWFya19wYWdlc19jYWNoZWQoKSBjb29raWUgb3BlcmF0aW9uIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBwYWdlIGlmCitzdWNjZXNzZnVsLgorCisKK1BBR0UgV1JJVEUKKy0tLS0tLS0tLS0KKworU2Vjb25kbHksIGlmIHRoZSBuZXRmcyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiB0aGUgcGFnZSAoZWl0aGVyIGR1ZSB0byBhbgoraW5pdGlhbCBkb3dubG9hZCBvciBpZiBhIHVzZXIgcGVyZm9ybXMgYSB3cml0ZSksIHRoZW4gdGhlIHBhZ2Ugc2hvdWxkIGJlCit3cml0dGVuIGJhY2sgdG8gdGhlIGNhY2hlOgorCisJaW50IGZzY2FjaGVfd3JpdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCSAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgICBnZnBfdCBnZnApOworCitUaGUgY29va2llIGFyZ3VtZW50IG11c3Qgc3BlY2lmeSBhIGRhdGEgZmlsZSBjb29raWUsIHRoZSBwYWdlIHNwZWNpZmllZCBzaG91bGQKK2NvbnRhaW4gdGhlIGRhdGEgdG8gYmUgd3JpdHRlbiAoYW5kIGlzIGFsc28gdXNlZCB0byBzcGVjaWZ5IHRoZSBwYWdlIG51bWJlciksCithbmQgdGhlIGdmcCBhcmd1bWVudCBpcyB1c2VkIHRvIGNvbnRyb2wgaG93IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMgbWFkZSBhcmUKK3NhdGlzZmllZC4KKworVGhlIHBhZ2UgbXVzdCBoYXZlIGZpcnN0IGJlZW4gcmVhZCBvciBhbGxvY2F0ZWQgc3VjY2Vzc2Z1bGx5IGFuZCBtdXN0IG5vdCBoYXZlCitiZWVuIHVuY2FjaGVkIGJlZm9yZSB3cml0aW5nIGlzIHBlcmZvcm1lZC4KKworSWYgdGhlIGNvb2tpZSBpbmRpY2F0ZXMgdGhlIGlub2RlIGlzIG5vdCBjYWNoZWQgdGhlbjoKKworICgxKSBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gLUVOT0JVRlMuCisKK0Vsc2UgaWYgc3BhY2UgY2FuIGJlIGFsbG9jYXRlZCBpbiB0aGUgY2FjaGUgdG8gaG9sZCB0aGlzIHBhZ2U6CisKKyAoMSkgUEdfZnNjYWNoZV93cml0ZSB3aWxsIGJlIHNldCBvbiB0aGUgcGFnZS4KKworICgyKSBUaGUgZnVuY3Rpb24gd2lsbCBzdWJtaXQgYSByZXF1ZXN0IHRvIHdyaXRlIHRoZSBkYXRhIHRvIGNhY2hlJ3MgYmFja2luZworICAgICBkZXZpY2UgZGlyZWN0bHkgZnJvbSB0aGUgcGFnZSBzcGVjaWZpZWQuCisKKyAoMykgVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDAuCisKKyAoNCkgV2hlbiB0aGUgd3JpdGUgaXMgY29tcGxldGUgUEdfZnNjYWNoZV93cml0ZSBpcyBjbGVhcmVkIG9uIHRoZSBwYWdlIGFuZAorICAgICBhbnlvbmUgd2FpdGluZyBmb3IgdGhhdCBiaXQgd2lsbCBiZSB3b2tlbiB1cC4KKworRWxzZSBpZiB0aGVyZSdzIG5vIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgY2FjaGUsIC1FTk9CVUZTIHdpbGwgYmUgcmV0dXJuZWQuICBJdAoraXMgYWxzbyBwb3NzaWJsZSBmb3IgdGhlIFBHX2ZzY2FjaGVfd3JpdGUgYml0IHRvIGJlIGNsZWFyZWQgd2hlbiBubyB3cml0ZSB0b29rCitwbGFjZSBpZiB1bmZvcmVzZWVuIGNpcmN1bXN0YW5jZXMgYXJvc2UgKHN1Y2ggYXMgYSBkaXNrIGVycm9yKS4KKworV3JpdGluZyB0YWtlcyBwbGFjZSBhc3luY2hyb25vdXNseS4KKworCitNVUxUSVBMRSBQQUdFIFJFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBIGZhY2lsaXR5IGlzIHByb3ZpZGVkIHRvIHJlYWQgc2V2ZXJhbCBwYWdlcyBhdCBvbmNlLCBhcyByZXF1ZXN0ZWQgYnkgdGhlCityZWFkcGFnZXMoKSBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbjoKKworCWludCBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZXMoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQkJaW50ICpucl9wYWdlcywKKwkJCQkJZnNjYWNoZV9yd19jb21wbGV0ZV90IGVuZF9pb19mdW5jLAorCQkJCQl2b2lkICpjb250ZXh0LAorCQkJCQlnZnBfdCBnZnApOworCitUaGlzIHdvcmtzIGluIGEgc2ltaWxhciB3YXkgdG8gZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2UoKSwgZXhjZXB0OgorCisgKDEpIEFueSBwYWdlIGl0IGNhbiByZXRyaWV2ZSBkYXRhIGZvciBpcyByZW1vdmVkIGZyb20gcGFnZXMgYW5kIG5yX3BhZ2VzIGFuZAorICAgICBkaXNwYXRjaGVkIGZvciByZWFkaW5nIHRvIHRoZSBkaXNrLiAgUmVhZHMgb2YgYWRqYWNlbnQgcGFnZXMgb24gZGlzayBtYXkKKyAgICAgYmUgbWVyZ2VkIGZvciBncmVhdGVyIGVmZmljaWVuY3kuCisKKyAoMikgVGhlIG1hcmtfcGFnZXNfY2FjaGVkKCkgY29va2llIG9wZXJhdGlvbiB3aWxsIGJlIGNhbGxlZCBvbiBzZXZlcmFsIHBhZ2VzCisgICAgIGF0IG9uY2UgaWYgdGhleSdyZSBiZWluZyByZWFkIG9yIGFsbG9jYXRlZC4KKworICgzKSBJZiB0aGVyZSB3YXMgYW4gZ2VuZXJhbCBlcnJvciwgdGhlbiB0aGF0IGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCisKKyAgICAgRWxzZSBpZiBzb21lIHBhZ2VzIGNvdWxkbid0IGJlIGFsbG9jYXRlZCBvciByZWFkLCB0aGVuIC1FTk9CVUZTIHdpbGwgYmUKKyAgICAgcmV0dXJuZWQuCisKKyAgICAgRWxzZSBpZiBzb21lIHBhZ2VzIGNvdWxkbid0IGJlIHJlYWQgYnV0IHdlcmUgYWxsb2NhdGVkLCB0aGVuIC1FTk9EQVRBIHdpbGwKKyAgICAgYmUgcmV0dXJuZWQuCisKKyAgICAgT3RoZXJ3aXNlLCBpZiBhbGwgcGFnZXMgaGFkIHJlYWRzIGRpc3BhdGNoZWQsIHRoZW4gMCB3aWxsIGJlIHJldHVybmVkLCB0aGUKKyAgICAgbGlzdCB3aWxsIGJlIGVtcHR5IGFuZCAqbnJfcGFnZXMgd2lsbCBiZSAwLgorCisgKDQpIGVuZF9pb19mdW5jIHdpbGwgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggcGFnZSBiZWluZyByZWFkIGFzIHRoZSByZWFkcworICAgICBjb21wbGV0ZS4gIEl0IHdpbGwgYmUgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dCBpZiBlcnJvciAhPSAwLCBidXQgaXQgbWF5CisgICAgIGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCBpZiB0aGVyZSBpcyBubyBlcnJvci4KKworTm90ZSB0aGF0IGEgcmV0dXJuIG9mIC1FTk9EQVRBLCAtRU5PQlVGUyBvciBhbnkgb3RoZXIgZXJyb3IgZG9lcyBub3QgcHJlY2x1ZGUKK3NvbWUgb2YgdGhlIHBhZ2VzIGJlaW5nIHJlYWQgYW5kIHNvbWUgYmVpbmcgYWxsb2NhdGVkLiAgVGhvc2UgcGFnZXMgd2lsbCBoYXZlCitiZWVuIG1hcmtlZCBhcHByb3ByaWF0ZWx5IGFuZCB3aWxsIG5lZWQgdW5jYWNoaW5nLgorCisKKz09PT09PT09PT09PT09CitQQUdFIFVOQ0FDSElORworPT09PT09PT09PT09PT0KKworVG8gdW5jYWNoZSBhIHBhZ2UsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZDoKKworCXZvaWQgZnNjYWNoZV91bmNhY2hlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJICBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKK1RoaXMgZnVuY3Rpb24gcGVybWl0cyB0aGUgY2FjaGUgdG8gcmVsZWFzZSBhbnkgaW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIGl0CittaWdodCBiZSBob2xkaW5nIGZvciB0aGlzIG5ldGZzIHBhZ2UuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIG9uY2UgZm9yCitlYWNoIHBhZ2Ugb24gd2hpY2ggdGhlIHJlYWQgb3Igd3JpdGUgcGFnZSBmdW5jdGlvbnMgYWJvdmUgaGF2ZSBiZWVuIGNhbGxlZCB0bworbWFrZSBzdXJlIHRoZSBjYWNoZSdzIGluLW1lbW9yeSB0cmFja2luZyBpbmZvcm1hdGlvbiBnZXRzIHRvcm4gZG93bi4KKworTm90ZSB0aGF0IHBhZ2VzIGNhbid0IGJlIGV4cGxpY2l0bHkgZGVsZXRlZCBmcm9tIHRoZSBhIGRhdGEgZmlsZS4gIFRoZSB3aG9sZQorZGF0YSBmaWxlIG11c3QgYmUgcmV0aXJlZCAoc2VlIHRoZSByZWxpbnF1aXNoIGNvb2tpZSBmdW5jdGlvbiBiZWxvdykuCisKK0Z1cnRoZXJtb3JlLCBub3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjYW5jZWwgdGhlIGFzeW5jaHJvbm91cyByZWFkIG9yIHdyaXRlCitvcGVyYXRpb24gc3RhcnRlZCBieSB0aGUgcmVhZC9hbGxvYyBhbmQgd3JpdGUgZnVuY3Rpb25zLCBzbyB0aGUgcGFnZQoraW52YWxpZGF0aW9uIGFuZCByZWxlYXNlIGZ1bmN0aW9ucyBtdXN0IHVzZToKKworCWJvb2wgZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCSAgICAgIHN0cnVjdCBwYWdlICpwYWdlKTsKKwordG8gc2VlIGlmIGEgcGFnZSBpcyBiZWluZyB3cml0dGVuIHRvIHRoZSBjYWNoZSwgYW5kOgorCisJdm9pZCBmc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCQkJc3RydWN0IHBhZ2UgKnBhZ2UpOworCit0byB3YWl0IGZvciBpdCB0byBmaW5pc2ggaWYgaXQgaXMuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT0KK0lOREVYIEFORCBEQVRBIEZJTEUgVVBEQVRFCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyByZXF1ZXN0IGFuIHVwZGF0ZSBvZiB0aGUgaW5kZXggZGF0YSBmb3IgYW4gaW5kZXggb3Igb3RoZXIgb2JqZWN0LCB0aGUKK2ZvbGxvd2luZyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkOgorCisJdm9pZCBmc2NhY2hlX3VwZGF0ZV9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpOworCitUaGlzIGZ1bmN0aW9uIHdpbGwgcmVmZXIgYmFjayB0byB0aGUgbmV0ZnNfZGF0YSBwb2ludGVyIHN0b3JlZCBpbiB0aGUgY29va2llIGJ5Cit0aGUgYWNxdWlzaXRpb24gZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBkYXRhIHRvIHdyaXRlIGludG8gZWFjaCByZXZpc2VkIGluZGV4CitlbnRyeS4gIFRoZSB1cGRhdGUgbWV0aG9kIGluIHRoZSBwYXJlbnQgaW5kZXggZGVmaW5pdGlvbiB3aWxsIGJlIGNhbGxlZCB0bwordHJhbnNmZXIgdGhlIGRhdGEuCisKK05vdGUgdGhhdCBwYXJ0aWFsIHVwZGF0ZXMgbWF5IGhhcHBlbiBhdXRvbWF0aWNhbGx5IGF0IG90aGVyIHRpbWVzLCBzdWNoIGFzIHdoZW4KK2RhdGEgYmxvY2tzIGFyZSBhZGRlZCB0byBhIGRhdGEgZmlsZSBvYmplY3QuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTUlTQ0VMTEFORU9VUyBDT09LSUUgT1BFUkFUSU9OUworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGVyZSBhcmUgYSBudW1iZXIgb2Ygb3BlcmF0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgY29va2llczoKKworICgqKSBDb29raWUgcGlubmluZzoKKworCWludCBmc2NhY2hlX3Bpbl9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpOworCXZvaWQgZnNjYWNoZV91bnBpbl9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpOworCisgICAgIFRoZXNlIG9wZXJhdGlvbnMgcGVybWl0IGRhdGEgY29va2llcyB0byBiZSBwaW5uZWQgaW50byB0aGUgY2FjaGUgYW5kIHRvCisgICAgIGhhdmUgdGhlIHBpbm5pbmcgcmVtb3ZlZC4gIFRoZXkgYXJlIG5vdCBwZXJtaXR0ZWQgb24gaW5kZXggY29va2llcy4KKworICAgICBUaGUgcGlubmluZyBmdW5jdGlvbiB3aWxsIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIC1FTk9CVUZTIGluIHRoZSBjb29raWUKKyAgICAgaXNuJ3QgYmFja2VkIGJ5IGEgY2FjaGUsIC1FT1BOT1RTVVBQIGlmIHRoZSBjYWNoZSBkb2Vzbid0IHN1cHBvcnQgcGlubmluZywKKyAgICAgLUVOT1NQQyBpZiB0aGVyZSBpc24ndCBlbm91Z2ggc3BhY2UgdG8gaG9ub3VyIHRoZSBvcGVyYXRpb24sIC1FTk9NRU0gb3IKKyAgICAgLUVJTyBpZiB0aGVyZSdzIGFueSBvdGhlciBwcm9ibGVtLgorCisgKCopIERhdGEgc3BhY2UgcmVzZXJ2YXRpb246CisKKwlpbnQgZnNjYWNoZV9yZXNlcnZlX3NwYWNlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLCBsb2ZmX3Qgc2l6ZSk7CisKKyAgICAgVGhpcyBwZXJtaXRzIGEgbmV0ZnMgdG8gcmVxdWVzdCBjYWNoZSBzcGFjZSBiZSByZXNlcnZlZCB0byBzdG9yZSB1cCB0byB0aGUKKyAgICAgZ2l2ZW4gYW1vdW50IG9mIGEgZmlsZS4gIEl0IGlzIHBlcm1pdHRlZCB0byBhc2sgZm9yIG1vcmUgdGhhbiB0aGUgY3VycmVudAorICAgICBzaXplIG9mIHRoZSBmaWxlIHRvIGFsbG93IGZvciBmdXR1cmUgZmlsZSBleHBhbnNpb24uCisKKyAgICAgSWYgc2l6ZSBpcyBnaXZlbiBhcyB6ZXJvIHRoZW4gdGhlIHJlc2VydmF0aW9uIHdpbGwgYmUgY2FuY2VsbGVkLgorCisgICAgIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIC1FTk9CVUZTIGluIHRoZSBjb29raWUgaXNuJ3QKKyAgICAgYmFja2VkIGJ5IGEgY2FjaGUsIC1FT1BOT1RTVVBQIGlmIHRoZSBjYWNoZSBkb2Vzbid0IHN1cHBvcnQgcmVzZXJ2YXRpb25zLAorICAgICAtRU5PU1BDIGlmIHRoZXJlIGlzbid0IGVub3VnaCBzcGFjZSB0byBob25vdXIgdGhlIG9wZXJhdGlvbiwgLUVOT01FTSBvcgorICAgICAtRUlPIGlmIHRoZXJlJ3MgYW55IG90aGVyIHByb2JsZW0uCisKKyAgICAgTm90ZSB0aGF0IHRoaXMgZG9lc24ndCBwaW4gYW4gb2JqZWN0IGluIGEgY2FjaGU7IGl0IGNhbiBzdGlsbCBiZSBjdWxsZWQgdG8KKyAgICAgbWFrZSBzcGFjZSBpZiBpdCdzIG5vdCBpbiB1c2UuCisKKworPT09PT09PT09PT09PT09PT09PT09CitDT09LSUUgVU5SRUdJU1RSQVRJT04KKz09PT09PT09PT09PT09PT09PT09PQorCitUbyBnZXQgcmlkIG9mIGEgY29va2llLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQuCisKKwl2b2lkIGZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJICAgICAgIGludCByZXRpcmUpOworCitJZiByZXRpcmUgaXMgbm9uLXplcm8sIHRoZW4gdGhlIG9iamVjdCB3aWxsIGJlIG1hcmtlZCBmb3IgcmVjeWNsaW5nLCBhbmQgYWxsCitjb3BpZXMgb2YgaXQgd2lsbCBiZSByZW1vdmVkIGZyb20gYWxsIGFjdGl2ZSBjYWNoZXMgaW4gd2hpY2ggaXQgaXMgcHJlc2VudC4KK05vdCBvbmx5IHRoYXQgYnV0IGFsbCBjaGlsZCBvYmplY3RzIHdpbGwgYWxzbyBiZSByZXRpcmVkLgorCitJZiByZXRpcmUgaXMgemVybywgdGhlbiB0aGUgb2JqZWN0IG1heSBiZSBhdmFpbGFibGUgYWdhaW4gd2hlbiBuZXh0IHRoZQorYWNxdWlzaXRpb24gZnVuY3Rpb24gaXMgY2FsbGVkLiAgUmV0aXJlbWVudCBoZXJlIHdpbGwgb3ZlcnJ1bGUgdGhlIHBpbm5pbmcgb24gYQorY29va2llLgorCitPbmUgdmVyeSBpbXBvcnRhbnQgbm90ZSAtIHJlbGlucXVpc2ggbXVzdCBOT1QgYmUgY2FsbGVkIGZvciBhIGNvb2tpZSB1bmxlc3MgYWxsCit0aGUgY29va2llcyBmb3IgImNoaWxkIiBpbmRpY2VzLCBvYmplY3RzIGFuZCBwYWdlcyBoYXZlIGJlZW4gcmVsaW5xdWlzaGVkCitmaXJzdC4KKworCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSU5ERVggQU5EIERBVEEgRklMRSBJTlZBTElEQVRJT04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGlzIG5vIGRpcmVjdCB3YXkgdG8gaW52YWxpZGF0ZSBhbiBpbmRleCBzdWJ0cmVlIG9yIGEgZGF0YSBmaWxlLiAgVG8gZG8KK3RoaXMsIHRoZSBjYWxsZXIgc2hvdWxkIHJlbGlucXVpc2ggYW5kIHJldGlyZSB0aGUgY29va2llIHRoZXkgaGF2ZSwgYW5kIHRoZW4KK2FjcXVpcmUgYSBuZXcgb25lLgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorRlMtQ0FDSEUgU1BFQ0lGSUMgUEFHRSBGTEFHCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRlMtQ2FjaGUgbWFrZXMgdXNlIG9mIGEgcGFnZSBmbGFnLCBQR19wcml2YXRlXzIsIGZvciBpdHMgb3duIHB1cnBvc2UuICBUaGlzIGlzCitnaXZlbiB0aGUgYWx0ZXJuYXRpdmUgbmFtZSBQR19mc2NhY2hlLgorCitQR19mc2NhY2hlIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcGFnZSBpcyBrbm93biBieSB0aGUgY2FjaGUsIGFuZCB0aGF0Cit0aGUgY2FjaGUgbXVzdCBiZSBpbmZvcm1lZCBpZiB0aGUgcGFnZSBpcyBnb2luZyB0byBnbyBhd2F5LiAgSXQncyBhbiBpbmRpY2F0aW9uCit0byB0aGUgbmV0ZnMgdGhhdCB0aGUgY2FjaGUgaGFzIGFuIGludGVyZXN0IGluIHRoaXMgcGFnZSwgd2hlcmUgYW4gaW50ZXJlc3QgbWF5CitiZSBhIHBvaW50ZXIgdG8gaXQsIHJlc291cmNlcyBhbGxvY2F0ZWQgb3IgcmVzZXJ2ZWQgZm9yIGl0LCBvciBJL08gaW4gcHJvZ3Jlc3MKK3Vwb24gaXQuCisKK1RoZSBuZXRmcyBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gaW4gbWV0aG9kcyBzdWNoIGFzIHJlbGVhc2VwYWdlKCkgdG8KK2RldGVybWluZSB3aGV0aGVyIGl0IG5lZWRzIHRvIHVuY2FjaGUgYSBwYWdlIG9yIHVwZGF0ZSBpdC4KKworRnVydGhlcm1vcmUsIGlmIHRoaXMgYml0IGlzIHNldCwgcmVsZWFzZXBhZ2UoKSBhbmQgaW52YWxpZGF0ZXBhZ2UoKSBvcGVyYXRpb25zCit3aWxsIGJlIGNhbGxlZCBvbiBhIHBhZ2UgdG8gZ2V0IHJpZCBvZiBpdCwgZXZlbiBpZiBQR19wcml2YXRlIGlzIG5vdCBzZXQuICBUaGlzCithbGxvd3MgY2FjaGluZyB0byBhdHRlbXB0ZWQgb24gYSBwYWdlIGJlZm9yZSByZWFkX2NhY2hlX3BhZ2VzKCkgdG8gYmUgY2FsbGVkCithZnRlciBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZXMoKSBhcyB0aGUgZm9ybWVyIHdpbGwgdHJ5IGFuZCByZWxlYXNlIHBhZ2VzIGl0Cit3YXMgZ2l2ZW4gdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLgorCitUaGlzIGJpdCBkb2VzIG5vdCBvdmVybGFwIHdpdGggc3VjaCBhcyBQR19wcml2YXRlLiAgVGhpcyBtZWFucyB0aGF0IEZTLUNhY2hlCitjYW4gYmUgdXNlZCB3aXRoIGEgZmlsZXN5c3RlbSB0aGF0IHVzZXMgdGhlIGJsb2NrIGJ1ZmZlcmluZyBjb2RlLgorCitUaGVyZSBhcmUgYSBudW1iZXIgb2Ygb3BlcmF0aW9ucyBkZWZpbmVkIG9uIHRoaXMgZmxhZzoKKworCWludCBQYWdlRnNDYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CisJdm9pZCBTZXRQYWdlRnNDYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKKwl2b2lkIENsZWFyUGFnZUZzQ2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpCisJaW50IFRlc3RTZXRQYWdlRnNDYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKKwlpbnQgVGVzdENsZWFyUGFnZUZzQ2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpCisKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgYml0IHRlc3QsIGJpdCBzZXQsIGJpdCBjbGVhciwgYml0IHRlc3QgYW5kIHNldCBhbmQgYml0Cit0ZXN0IGFuZCBjbGVhciBvcGVyYXRpb25zIG9uIFBHX2ZzY2FjaGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvb2JqZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9vYmplY3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjBhMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvb2JqZWN0LnR4dApAQCAtMCwwICsxLDMxMyBAQAorCSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCSAgICAgSU4tS0VSTkVMIENBQ0hFIE9CSkVDVCBSRVBSRVNFTlRBVElPTiBBTkQgTUFOQUdFTUVOVAorCSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitCeTogRGF2aWQgSG93ZWxscyA8ZGhvd2VsbHNAcmVkaGF0LmNvbT4KKworQ29udGVudHM6CisKKyAoKikgUmVwcmVzZW50YXRpb24KKworICgqKSBPYmplY3QgbWFuYWdlbWVudCBzdGF0ZSBtYWNoaW5lLgorCisgICAgIC0gUHJvdmlzaW9uIG9mIGNwdSB0aW1lLgorICAgICAtIExvY2tpbmcgc2ltcGxpZmljYXRpb24uCisKKyAoKikgVGhlIHNldCBvZiBzdGF0ZXMuCisKKyAoKikgVGhlIHNldCBvZiBldmVudHMuCisKKworPT09PT09PT09PT09PT0KK1JFUFJFU0VOVEFUSU9OCis9PT09PT09PT09PT09PQorCitGUy1DYWNoZSBtYWludGFpbnMgYW4gaW4ta2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggb2JqZWN0IHRoYXQgYSBuZXRmcyBpcworY3VycmVudGx5IGludGVyZXN0ZWQgaW4uICBTdWNoIG9iamVjdHMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZSBmc2NhY2hlX2Nvb2tpZQorc3RydWN0IGFuZCBhcmUgcmVmZXJyZWQgdG8gYXMgY29va2llcy4KKworRlMtQ2FjaGUgYWxzbyBtYWludGFpbnMgYSBzZXBhcmF0ZSBpbi1rZXJuZWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdHMgdGhhdAorYSBjYWNoZSBiYWNrZW5kIGlzIGN1cnJlbnRseSBhY3RpdmVseSBjYWNoaW5nLiAgU3VjaCBvYmplY3RzIGFyZSByZXByZXNlbnRlZCBieQordGhlIGZzY2FjaGVfb2JqZWN0IHN0cnVjdC4gIFRoZSBjYWNoZSBiYWNrZW5kcyBhbGxvY2F0ZSB0aGVzZSB1cG9uIHJlcXVlc3QsIGFuZAorYXJlIGV4cGVjdGVkIHRvIGVtYmVkIHRoZW0gaW4gdGhlaXIgb3duIHJlcHJlc2VudGF0aW9ucy4gIFRoZXNlIGFyZSByZWZlcnJlZCB0bworYXMgb2JqZWN0cy4KKworVGhlcmUgaXMgYSAxOk4gcmVsYXRpb25zaGlwIGJldHdlZW4gY29va2llcyBhbmQgb2JqZWN0cy4gIEEgY29va2llIG1heSBiZQorcmVwcmVzZW50ZWQgYnkgbXVsdGlwbGUgb2JqZWN0cyAtIGFuIGluZGV4IG1heSBleGlzdCBpbiBtb3JlIHRoYW4gb25lIGNhY2hlIC0KK29yIGV2ZW4gYnkgbm8gb2JqZWN0cyAoaXQgbWF5IG5vdCBiZSBjYWNoZWQpLgorCitGdXJ0aGVybW9yZSwgYm90aCBjb29raWVzIGFuZCBvYmplY3RzIGFyZSBoaWVyYXJjaGljYWwuICBUaGUgdHdvIGhpZXJhcmNoaWVzCitjb3JyZXNwb25kLCBidXQgdGhlIGNvb2tpZXMgdHJlZSBpcyBhIHN1cGVyc2V0IG9mIHRoZSB1bmlvbiBvZiB0aGUgb2JqZWN0IHRyZWVzCitvZiBtdWx0aXBsZSBjYWNoZXM6CisKKwkgICAgTkVURlMgSU5ERVggVFJFRSAgICAgICAgICAgICAgIDogICAgICBDQUNIRSAxICAgICA6ICAgICAgQ0FDSEUgMgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgICAgICAgICAgIDoKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICArLS0tLS0tLS0tLS0rICA6CisJICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0+fCAgSU9iamVjdCAgfCAgOgorCSAgICAgICstLS0tLS0tLS0tLSsgICAgICAgfCAgICAgICAgOiAgICstLS0tLS0tLS0tLSsgIDoKKwkgICAgICB8ICBJQ29va2llICB8LS0tLS0tLSsgICAgICAgIDogICAgICAgICB8ICAgICAgICA6CisJICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICB8ICAgICAgICA6ICAgICAgICAgfCAgICAgICAgOiAgICstLS0tLS0tLS0tLSsKKwkgICAgICAgICAgICB8ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fCAgSU9iamVjdCAgfAorCSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgOiAgICAgICAgIHwgICAgICAgIDogICArLS0tLS0tLS0tLS0rCisJICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICA6ICAgICAgICAgViAgICAgICAgOiAgICAgICAgIHwKKwkgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIDogICArLS0tLS0tLS0tLS0rICA6ICAgICAgICAgfAorCSAgICAgICAgICAgIFYgICAgICAgICAgICAgKy0tLS0tLS0tLS0tPnwgIElPYmplY3QgIHwgIDogICAgICAgICB8CisJICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICB8ICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKyAgOiAgICAgICAgIHwKKwkgICAgICB8ICBJQ29va2llICB8LS0tLS0tLSsgICAgICAgIDogICAgICAgICB8ICAgICAgICA6ICAgICAgICAgVgorCSAgICAgICstLS0tLS0tLS0tLSsgICAgICAgfCAgICAgICAgOiAgICAgICAgIHwgICAgICAgIDogICArLS0tLS0tLS0tLS0rCisJICAgICAgICAgICAgfCAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwgIElPYmplY3QgIHwKKwkgICAgICArLS0tLS0rLS0tLS0rICAgICAgICAgICAgICAgIDogICAgICAgICB8ICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKworCSAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgOiAgICAgICAgIHwgICAgICAgIDogICAgICAgICB8CisJICAgICAgViAgICAgICAgICAgfCAgICAgICAgICAgICAgICA6ICAgICAgICAgViAgICAgICAgOiAgICAgICAgIHwKKwkrLS0tLS0tLS0tLS0rICAgICB8ICAgICAgICAgICAgICAgIDogICArLS0tLS0tLS0tLS0rICA6ICAgICAgICAgfAorCXwgIElDb29raWUgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwgIElPYmplY3QgIHwgIDogICAgICAgICB8CisJKy0tLS0tLS0tLS0tKyAgICAgfCAgICAgICAgICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKyAgOiAgICAgICAgIHwKKwkgICAgICB8ICAgICAgICAgICBWICAgICAgICAgICAgICAgIDogICAgICAgICB8ICAgICAgICA6ICAgICAgICAgVgorCSAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgOiAgICAgICAgIHwgICAgICAgIDogICArLS0tLS0tLS0tLS0rCisJICAgICAgfCAgICAgfCAgSUNvb2tpZSAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwgIElPYmplY3QgIHwKKwkgICAgICB8ICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgIDogICAgICAgICB8ICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKworCSAgICAgIFYgICAgICAgICAgIHwgICAgICAgICAgICAgICAgOiAgICAgICAgIFYgICAgICAgIDogICAgICAgICB8CisJKy0tLS0tLS0tLS0tKyAgICAgfCAgICAgICAgICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKyAgOiAgICAgICAgIHwKKwl8ICBEQ29va2llICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT58ICBET2JqZWN0ICB8ICA6ICAgICAgICAgfAorCSstLS0tLS0tLS0tLSsgICAgIHwgICAgICAgICAgICAgICAgOiAgICstLS0tLS0tLS0tLSsgIDogICAgICAgICB8CisJICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICA6ICAgICAgICAgICAgICAgICAgOiAgICAgICAgIHwKKwkgICAgICAgICAgKy0tLS0tLS0rLS0tLS0tLSsgICAgICAgIDogICAgICAgICAgICAgICAgICA6ICAgICAgICAgfAorCSAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgOiAgICAgICAgICAgICAgICAgIDogICAgICAgICB8CisJICAgICAgICAgIFYgICAgICAgICAgICAgICBWICAgICAgICA6ICAgICAgICAgICAgICAgICAgOiAgICAgICAgIFYKKwkgICAgKy0tLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tLSsgIDogICAgICAgICAgICAgICAgICA6ICAgKy0tLS0tLS0tLS0tKworCSAgICB8ICBEQ29va2llICB8ICAgfCAgRENvb2tpZSAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT58ICBET2JqZWN0ICB8CisJICAgICstLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLS0rICA6ICAgICAgICAgICAgICAgICAgOiAgICstLS0tLS0tLS0tLSsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICA6CisKK0luIHRoZSBhYm92ZSBpbGx1c3RyYXRpb24sIElDb29raWUgYW5kIElPYmplY3QgcmVwcmVzZW50IGluZGljZXMgYW5kIERDb29raWUKK2FuZCBET2JqZWN0IHJlcHJlc2VudCBkYXRhIHN0b3JhZ2Ugb2JqZWN0cy4gIEluZGljZXMgbWF5IGhhdmUgcmVwcmVzZW50YXRpb24gaW4KK211bHRpcGxlIGNhY2hlcywgYnV0IGN1cnJlbnRseSwgbm9uLWluZGV4IG9iamVjdHMgbWF5IG5vdC4gIE9iamVjdHMgb2YgYW55IHR5cGUKK21heSBhbHNvIGJlIGVudGlyZWx5IHVucmVwcmVzZW50ZWQuCisKK0FzIGZhciBhcyB0aGUgbmV0ZnMgQVBJIGdvZXMsIHRoZSBuZXRmcyBpcyBvbmx5IGFjdHVhbGx5IHBlcm1pdHRlZCB0byBzZWUKK3BvaW50ZXJzIHRvIHRoZSBjb29raWVzLiAgVGhlIGNvb2tpZXMgdGhlbXNlbHZlcyBhbmQgYW55IG9iamVjdHMgYXR0YWNoZWQgdG8KK3Rob3NlIGNvb2tpZXMgYXJlIGhpZGRlbiBmcm9tIGl0LgorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK09CSkVDVCBNQU5BR0VNRU5UIFNUQVRFIE1BQ0hJTkUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2l0aGluIEZTLUNhY2hlLCBlYWNoIGFjdGl2ZSBvYmplY3QgaXMgbWFuYWdlZCBieSBpdHMgb3duIGluZGl2aWR1YWwgc3RhdGUKK21hY2hpbmUuICBUaGUgc3RhdGUgZm9yIGFuIG9iamVjdCBpcyBrZXB0IGluIHRoZSBmc2NhY2hlX29iamVjdCBzdHJ1Y3QsIGluCitvYmplY3QtPnN0YXRlLiAgQSBjb29raWUgbWF5IHBvaW50IHRvIGEgc2V0IG9mIG9iamVjdHMgdGhhdCBhcmUgaW4gZGlmZmVyZW50CitzdGF0ZXMuCisKK0VhY2ggc3RhdGUgaGFzIGFuIGFjdGlvbiBhc3NvY2lhdGVkIHdpdGggaXQgdGhhdCBpcyBpbnZva2VkIHdoZW4gdGhlIG1hY2hpbmUKK3dha2VzIHVwIGluIHRoYXQgc3RhdGUuICBUaGVyZSBhcmUgZm91ciBsb2dpY2FsIHNldHMgb2Ygc3RhdGVzOgorCisgKDEpIFByZXBhcmF0aW9uOiBzdGF0ZXMgdGhhdCB3YWl0IGZvciB0aGUgcGFyZW50IG9iamVjdHMgdG8gYmVjb21lIHJlYWR5LiAgVGhlCisgICAgIHJlcHJlc2VudGF0aW9ucyBhcmUgaGllcmFyY2hpY2FsLCBhbmQgaXQgaXMgZXhwZWN0ZWQgdGhhdCBhbiBvYmplY3QgbXVzdAorICAgICBiZSBjcmVhdGVkIG9yIGFjY2Vzc2VkIHdpdGggcmVzcGVjdCB0byBpdHMgcGFyZW50IG9iamVjdC4KKworICgyKSBJbml0aWFsaXNhdGlvbjogc3RhdGVzIHRoYXQgcGVyZm9ybSBsb29rdXBzIGluIHRoZSBjYWNoZSBhbmQgdmFsaWRhdGUKKyAgICAgd2hhdCdzIGZvdW5kIGFuZCB0aGF0IGNyZWF0ZSBvbiBkaXNrIGFueSBtaXNzaW5nIG1ldGFkYXRhLgorCisgKDMpIE5vcm1hbCBydW5uaW5nOiBzdGF0ZXMgdGhhdCBhbGxvdyBuZXRmcyBvcGVyYXRpb25zIG9uIG9iamVjdHMgdG8gcHJvY2VlZAorICAgICBhbmQgdGhhdCB1cGRhdGUgdGhlIHN0YXRlIG9mIG9iamVjdHMuCisKKyAoNCkgVGVybWluYXRpb246IHN0YXRlcyB0aGF0IGRldGFjaCBvYmplY3RzIGZyb20gdGhlaXIgbmV0ZnMgY29va2llcywgdGhhdAorICAgICBkZWxldGUgb2JqZWN0cyBmcm9tIGRpc2ssIHRoYXQgaGFuZGxlIGRpc2sgYW5kIHN5c3RlbSBlcnJvcnMgYW5kIHRoYXQgZnJlZQorICAgICB1cCBpbi1tZW1vcnkgcmVzb3VyY2VzLgorCisKK0luIG1vc3QgY2FzZXMsIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBzdGF0ZXMgaXMgaW4gcmVzcG9uc2UgdG8gc2lnbmFsbGVkIGV2ZW50cy4KK1doZW4gYSBzdGF0ZSBoYXMgZmluaXNoZWQgcHJvY2Vzc2luZywgaXQgd2lsbCB1c3VhbGx5IHNldCB0aGUgbWFzayBvZiBldmVudHMgaW4KK3doaWNoIGl0IGlzIGludGVyZXN0ZWQgKG9iamVjdC0+ZXZlbnRfbWFzaykgYW5kIHJlbGlucXVpc2ggdGhlIHdvcmtlciB0aHJlYWQuCitUaGVuIHdoZW4gYW4gZXZlbnQgaXMgcmFpc2VkIChieSBjYWxsaW5nIGZzY2FjaGVfcmFpc2VfZXZlbnQoKSksIGlmIHRoZSBldmVudAoraXMgbm90IG1hc2tlZCwgdGhlIG9iamVjdCB3aWxsIGJlIHF1ZXVlZCBmb3IgcHJvY2Vzc2luZyAoYnkgY2FsbGluZworZnNjYWNoZV9lbnF1ZXVlX29iamVjdCgpKS4KKworCitQUk9WSVNJT04gT0YgQ1BVIFRJTUUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgd29yayB0byBiZSBkb25lIGJ5IHRoZSB2YXJpb3VzIHN0YXRlcyBpcyBnaXZlbiBDUFUgdGltZSBieSB0aGUgdGhyZWFkcyBvZgordGhlIHNsb3cgd29yayBmYWNpbGl0eSAoc2VlIERvY3VtZW50YXRpb24vc2xvdy13b3JrLnR4dCkuICBUaGlzIGlzIHVzZWQgaW4KK3ByZWZlcmVuY2UgdG8gdGhlIHdvcmtxdWV1ZSBmYWNpbGl0eSBiZWNhdXNlOgorCisgKDEpIFRocmVhZHMgbWF5IGJlIGNvbXBsZXRlbHkgb2NjdXBpZWQgZm9yIHZlcnkgbG9uZyBwZXJpb2RzIG9mIHRpbWUgYnkgYQorICAgICBwYXJ0aWN1bGFyIHdvcmsgaXRlbS4gIFRoZXNlIHN0YXRlIGFjdGlvbnMgbWF5IGJlIGRvaW5nIHNlcXVlbmNlcyBvZgorICAgICBzeW5jaHJvbm91cywgam91cm5hbGxlZCBkaXNrIGFjY2Vzc2VzIChsb29rdXAsIG1rZGlyLCBjcmVhdGUsIHNldHhhdHRyLAorICAgICBnZXR4YXR0ciwgdHJ1bmNhdGUsIHVubGluaywgcm1kaXIsIHJlbmFtZSkuCisKKyAoMikgVGhyZWFkcyBtYXkgZG8gbGl0dGxlIGFjdHVhbCB3b3JrLCBidXQgbWF5IHJhdGhlciBzcGVuZCBhIGxvdCBvZiB0aW1lCisgICAgIHNsZWVwaW5nIG9uIEkvTy4gIFRoaXMgbWVhbnMgdGhhdCBzaW5nbGUtdGhyZWFkZWQgYW5kIDEtcGVyLUNQVS10aHJlYWRlZAorICAgICB3b3JrcXVldWVzIGRvbid0IG5lY2Vzc2FyaWx5IGhhdmUgdGhlIHJpZ2h0IG51bWJlcnMgb2YgdGhyZWFkcy4KKworCitMT0NLSU5HIFNJTVBMSUZJQ0FUSU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlY2F1c2Ugb25seSBvbmUgd29ya2VyIHRocmVhZCBtYXkgYmUgb3BlcmF0aW5nIG9uIGFueSBwYXJ0aWN1bGFyIG9iamVjdCdzCitzdGF0ZSBtYWNoaW5lIGF0IG9uY2UsIHRoaXMgc2ltcGxpZmllcyB0aGUgbG9ja2luZywgcGFydGljdWxhcmx5IHdpdGggcmVzcGVjdAordG8gZGlzY29ubmVjdGluZyB0aGUgbmV0ZnMncyByZXByZXNlbnRhdGlvbiBvZiBhIGNhY2hlIG9iamVjdCAoZnNjYWNoZV9jb29raWUpCitmcm9tIHRoZSBjYWNoZSBiYWNrZW5kJ3MgcmVwcmVzZW50YXRpb24gKGZzY2FjaGVfb2JqZWN0KSAtIHdoaWNoIG1heSBiZQorcmVxdWVzdGVkIGZyb20gZWl0aGVyIGVuZC4KKworCis9PT09PT09PT09PT09PT09PQorVEhFIFNFVCBPRiBTVEFURVMKKz09PT09PT09PT09PT09PT09CisKK1RoZSBvYmplY3Qgc3RhdGUgbWFjaGluZSBoYXMgYSBzZXQgb2Ygc3RhdGVzIHRoYXQgaXQgY2FuIGJlIGluLiAgVGhlcmUgYXJlCitwcmVwYXJhdGlvbiBzdGF0ZXMgaW4gd2hpY2ggdGhlIG9iamVjdCBzZXRzIGl0c2VsZiB1cCBhbmQgd2FpdHMgZm9yIGl0cyBwYXJlbnQKK29iamVjdCB0byB0cmFuc2l0IHRvIGEgc3RhdGUgdGhhdCBhbGxvd3MgYWNjZXNzIHRvIGl0cyBjaGlsZHJlbjoKKworICgxKSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9JTklULgorCisgICAgIEluaXRpYWxpc2UgdGhlIG9iamVjdCBhbmQgd2FpdCBmb3IgdGhlIHBhcmVudCBvYmplY3QgdG8gYmVjb21lIGFjdGl2ZS4gIEluCisgICAgIHRoZSBjYWNoZSwgaXQgaXMgZXhwZWN0ZWQgdGhhdCBpdCB3aWxsIG5vdCBiZSBwb3NzaWJsZSB0byBsb29rIGFuIG9iamVjdAorICAgICB1cCBmcm9tIHRoZSBwYXJlbnQgb2JqZWN0LCB1bnRpbCB0aGF0IHBhcmVudCBvYmplY3QgaXRzZWxmIGhhcyBiZWVuIGxvb2tlZAorICAgICB1cC4KKworVGhlcmUgYXJlIGluaXRpYWxpc2F0aW9uIHN0YXRlcyBpbiB3aGljaCB0aGUgb2JqZWN0IHNldHMgaXRzZWxmIHVwIGFuZCBhY2Nlc3NlcworZGlzayBmb3IgdGhlIG9iamVjdCBtZXRhZGF0YToKKworICgyKSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9MT09LSU5HX1VQLgorCisgICAgIExvb2sgdXAgdGhlIG9iamVjdCBvbiBkaXNrLCB1c2luZyB0aGUgcGFyZW50IGFzIGEgc3RhcnRpbmcgcG9pbnQuCisgICAgIEZTLUNhY2hlIGV4cGVjdHMgdGhlIGNhY2hlIGJhY2tlbmQgdG8gcHJvYmUgdGhlIGNhY2hlIHRvIHNlZSB3aGV0aGVyIHRoaXMKKyAgICAgb2JqZWN0IGlzIHJlcHJlc2VudGVkIHRoZXJlLCBhbmQgaWYgaXQgaXMsIHRvIHNlZSBpZiBpdCdzIHZhbGlkIChjb2hlcmVuY3kKKyAgICAgbWFuYWdlbWVudCkuCisKKyAgICAgVGhlIGNhY2hlIHNob3VsZCBjYWxsIGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9uZWdhdGl2ZSgpIHRvIGluZGljYXRlIGxvb2t1cAorICAgICBmYWlsdXJlIGZvciB3aGF0ZXZlciByZWFzb24sIGFuZCBzaG91bGQgY2FsbCBmc2NhY2hlX29idGFpbmVkX29iamVjdCgpIHRvCisgICAgIGluZGljYXRlIHN1Y2Nlc3MuCisKKyAgICAgQXQgdGhlIGNvbXBsZXRpb24gb2YgbG9va3VwLCBGUy1DYWNoZSB3aWxsIGxldCB0aGUgbmV0ZnMgZ28gYWhlYWQgd2l0aAorICAgICByZWFkIG9wZXJhdGlvbnMsIG5vIG1hdHRlciB3aGV0aGVyIHRoZSBmaWxlIGlzIHlldCBjYWNoZWQuICBJZiBub3QgeWV0CisgICAgIGNhY2hlZCwgcmVhZCBvcGVyYXRpb25zIHdpbGwgYmUgaW1tZWRpYXRlbHkgcmVqZWN0ZWQgd2l0aCBFTk9EQVRBIHVudGlsCisgICAgIHRoZSBmaXJzdCBrbm93biBwYWdlIGlzIHVuY2FjaGVkIC0gYXMgdG8gdGhhdCBwb2ludCB0aGVyZSBjYW4gYmUgbm8gZGF0YQorICAgICB0byBiZSByZWFkIG91dCBvZiB0aGUgY2FjaGUgZm9yIHRoYXQgZmlsZSB0aGF0IGlzbid0IGN1cnJlbnRseSBhbHNvIGhlbGQKKyAgICAgaW4gdGhlIHBhZ2VjYWNoZS4KKworICgzKSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9DUkVBVElORy4KKworICAgICBDcmVhdGUgYW4gb2JqZWN0IG9uIGRpc2ssIHVzaW5nIHRoZSBwYXJlbnQgYXMgYSBzdGFydGluZyBwb2ludC4gIFRoaXMKKyAgICAgaGFwcGVucyBpZiB0aGUgbG9va3VwIGZhaWxlZCB0byBmaW5kIHRoZSBvYmplY3QsIG9yIGlmIHRoZSBvYmplY3QncworICAgICBjb2hlcmVuY3kgZGF0YSBpbmRpY2F0ZWQgd2hhdCdzIG9uIGRpc2sgaXMgb3V0IG9mIGRhdGUuICBJbiB0aGlzIHN0YXRlLAorICAgICBGUy1DYWNoZSBleHBlY3RzIHRoZSBjYWNoZSB0byBjcmVhdGUKKworICAgICBUaGUgY2FjaGUgc2hvdWxkIGNhbGwgZnNjYWNoZV9vYnRhaW5lZF9vYmplY3QoKSBpZiBjcmVhdGlvbiBjb21wbGV0ZXMKKyAgICAgc3VjY2Vzc2Z1bGx5LCBmc2NhY2hlX29iamVjdF9sb29rdXBfbmVnYXRpdmUoKSBvdGhlcndpc2UuCisKKyAgICAgQXQgdGhlIGNvbXBsZXRpb24gb2YgY3JlYXRpb24sIEZTLUNhY2hlIHdpbGwgc3RhcnQgcHJvY2Vzc2luZyB3cml0ZQorICAgICBvcGVyYXRpb25zIHRoZSBuZXRmcyBoYXMgcXVldWVkIGZvciBhbiBvYmplY3QuICBJZiBjcmVhdGlvbiBmYWlsZWQsIHRoZQorICAgICB3cml0ZSBvcHMgd2lsbCBiZSB0cmFuc3BhcmVudGx5IGRpc2NhcmRlZCwgYW5kIG5vdGhpbmcgcmVjb3JkZWQgaW4gdGhlCisgICAgIGNhY2hlLgorCitUaGVyZSBhcmUgc29tZSBub3JtYWwgcnVubmluZyBzdGF0ZXMgaW4gd2hpY2ggdGhlIG9iamVjdCBzcGVuZHMgaXRzIHRpbWUKK3NlcnZpY2luZyBuZXRmcyByZXF1ZXN0czoKKworICg0KSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9BVkFJTEFCTEUuCisKKyAgICAgQSB0cmFuc2llbnQgc3RhdGUgaW4gd2hpY2ggcGVuZGluZyBvcGVyYXRpb25zIGFyZSBzdGFydGVkLCBjaGlsZCBvYmplY3RzCisgICAgIGFyZSBwZXJtaXR0ZWQgdG8gYWR2YW5jZSBmcm9tIEZTQ0FDSEVfT0JKRUNUX0lOSVQgc3RhdGUsIGFuZCB0ZW1wb3JhcnkKKyAgICAgbG9va3VwIGRhdGEgaXMgZnJlZWQuCisKKyAoNSkgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfQUNUSVZFLgorCisgICAgIFRoZSBub3JtYWwgcnVubmluZyBzdGF0ZS4gIEluIHRoaXMgc3RhdGUsIHJlcXVlc3RzIHRoZSBuZXRmcyBtYWtlcyB3aWxsIGJlCisgICAgIHBhc3NlZCBvbiB0byB0aGUgY2FjaGUuCisKKyAoNikgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfVVBEQVRJTkcuCisKKyAgICAgVGhlIHN0YXRlIG1hY2hpbmUgY29tZXMgaGVyZSB0byB1cGRhdGUgdGhlIG9iamVjdCBpbiB0aGUgY2FjaGUgZnJvbSB0aGUKKyAgICAgbmV0ZnMncyByZWNvcmRzLiAgVGhpcyBpbnZvbHZlcyB1cGRhdGluZyB0aGUgYXV4aWxpYXJ5IGRhdGEgdGhhdCBpcyB1c2VkCisgICAgIHRvIG1haW50YWluIGNvaGVyZW5jeS4KKworQW5kIHRoZXJlIGFyZSB0ZXJtaW5hbCBzdGF0ZXMgaW4gd2hpY2ggYW4gb2JqZWN0IGNsZWFucyBpdHNlbGYgdXAsIGRlYWxsb2NhdGVzCittZW1vcnkgYW5kIHBvdGVudGlhbGx5IGRlbGV0ZXMgc3R1ZmYgZnJvbSBkaXNrOgorCisgKDcpIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX0xDX0RZSU5HLgorCisgICAgIFRoZSBvYmplY3QgY29tZXMgaGVyZSBpZiBpdCBpcyBkeWluZyBiZWNhdXNlIG9mIGEgbG9va3VwIG9yIGNyZWF0aW9uCisgICAgIGVycm9yLiAgVGhpcyB3b3VsZCBiZSBkdWUgdG8gYSBkaXNrIGVycm9yIG9yIHN5c3RlbSBlcnJvciBvZiBzb21lIHNvcnQuCisgICAgIFRlbXBvcmFyeSBkYXRhIGlzIGNsZWFuZWQgdXAsIGFuZCB0aGUgcGFyZW50IGlzIHJlbGVhc2VkLgorCisgKDgpIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX0RZSU5HLgorCisgICAgIFRoZSBvYmplY3QgY29tZXMgaGVyZSBpZiBpdCBpcyBkeWluZyBkdWUgdG8gYW4gZXJyb3IsIGJlY2F1c2UgaXRzIHBhcmVudAorICAgICBjb29raWUgaGFzIGJlZW4gcmVsaW5xdWlzaGVkIGJ5IHRoZSBuZXRmcyBvciBiZWNhdXNlIHRoZSBjYWNoZSBpcyBiZWluZworICAgICB3aXRoZHJhd24uCisKKyAgICAgQW55IGNoaWxkIG9iamVjdHMgd2FpdGluZyBvbiB0aGlzIG9uZSBhcmUgZ2l2ZW4gQ1BVIHRpbWUgc28gdGhhdCB0aGV5IHRvbworICAgICBjYW4gZGVzdHJveSB0aGVtc2VsdmVzLiAgVGhpcyBvYmplY3Qgd2FpdHMgZm9yIGFsbCBpdHMgY2hpbGRyZW4gdG8gZ28gYXdheQorICAgICBiZWZvcmUgYWR2YW5jaW5nIHRvIHRoZSBuZXh0IHN0YXRlLgorCisgKDkpIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX0FCT1JUX0lOSVQuCisKKyAgICAgVGhlIG9iamVjdCBjb21lcyB0byB0aGlzIHN0YXRlIGlmIGl0IHdhcyB3YWl0aW5nIG9uIGl0cyBwYXJlbnQgaW4KKyAgICAgRlNDQUNIRV9PQkpFQ1RfSU5JVCwgYnV0IGl0cyBwYXJlbnQgZGllZC4gIFRoZSBvYmplY3Qgd2lsbCBkZXN0cm95IGl0c2VsZgorICAgICBzbyB0aGF0IHRoZSBwYXJlbnQgbWF5IHByb2NlZWQgZnJvbSB0aGUgRlNDQUNIRV9PQkpFQ1RfRFlJTkcgc3RhdGUuCisKKygxMCkgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfUkVMRUFTSU5HLgorKDExKSBTdGF0ZSBGU0NBQ0hFX09CSkVDVF9SRUNZQ0xJTkcuCisKKyAgICAgVGhlIG9iamVjdCBjb21lcyB0byBvbmUgb2YgdGhlc2UgdHdvIHN0YXRlcyB3aGVuIGR5aW5nIG9uY2UgaXQgaXMgcmlkIG9mCisgICAgIGFsbCBpdHMgY2hpbGRyZW4sIGlmIGl0IGlzIGR5aW5nIGJlY2F1c2UgdGhlIG5ldGZzIHJlbGlucXVpc2hlZCBpdHMKKyAgICAgY29va2llLiAgSW4gdGhlIGZpcnN0IHN0YXRlLCB0aGUgY2FjaGVkIGRhdGEgaXMgZXhwZWN0ZWQgdG8gcGVyc2lzdCwgYW5kCisgICAgIGluIHRoZSBzZWNvbmQgaXQgd2lsbCBiZSBkZWxldGVkLgorCisoMTIpIFN0YXRlIEZTQ0FDSEVfT0JKRUNUX1dJVEhEUkFXSU5HLgorCisgICAgIFRoZSBvYmplY3QgdHJhbnNpdHMgdG8gdGhpcyBzdGF0ZSBpZiB0aGUgY2FjaGUgZGVjaWRlcyBpdCB3YW50cyB0bworICAgICB3aXRoZHJhdyB0aGUgb2JqZWN0IGZyb20gc2VydmljZSwgcGVyaGFwcyB0byBtYWtlIHNwYWNlLCBidXQgYWxzbyBkdWUgdG8KKyAgICAgZXJyb3Igb3IganVzdCBiZWNhdXNlIHRoZSB3aG9sZSBjYWNoZSBpcyBiZWluZyB3aXRoZHJhd24uCisKKygxMykgU3RhdGUgRlNDQUNIRV9PQkpFQ1RfREVBRC4KKworICAgICBUaGUgb2JqZWN0IHRyYW5zaXRzIHRvIHRoaXMgc3RhdGUgd2hlbiB0aGUgaW4tbWVtb3J5IG9iamVjdCByZWNvcmQgaXMKKyAgICAgcmVhZHkgdG8gYmUgZGVsZXRlZC4gIFRoZSBvYmplY3QgcHJvY2Vzc29yIHNob3VsZG4ndCBldmVyIHNlZSBhbiBvYmplY3QgaW4KKyAgICAgdGhpcyBzdGF0ZS4KKworCitUSEUgU0VUIE9GIEVWRU5UUworLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGV2ZW50cyB0aGF0IGNhbiBiZSByYWlzZWQgdG8gYW4gb2JqZWN0IHN0YXRlIG1hY2hpbmU6CisKKyAoKikgRlNDQUNIRV9PQkpFQ1RfRVZfVVBEQVRFCisKKyAgICAgVGhlIG5ldGZzIHJlcXVlc3RlZCB0aGF0IGFuIG9iamVjdCBiZSB1cGRhdGVkLiAgVGhlIHN0YXRlIG1hY2hpbmUgd2lsbCBhc2sKKyAgICAgdGhlIGNhY2hlIGJhY2tlbmQgdG8gdXBkYXRlIHRoZSBvYmplY3QsIGFuZCB0aGUgY2FjaGUgYmFja2VuZCB3aWxsIGFzayB0aGUKKyAgICAgbmV0ZnMgZm9yIGRldGFpbHMgb2YgdGhlIGNoYW5nZSB0aHJvdWdoIGl0cyBjb29raWUgZGVmaW5pdGlvbiBvcHMuCisKKyAoKikgRlNDQUNIRV9PQkpFQ1RfRVZfQ0xFQVJFRAorCisgICAgIFRoaXMgaXMgc2lnbmFsbGVkIGluIHR3byBjaXJjdW1zdGFuY2VzOgorCisgICAgIChhKSB3aGVuIGFuIG9iamVjdCdzIGxhc3QgY2hpbGQgb2JqZWN0IGlzIGRyb3BwZWQgYW5kCisKKyAgICAgKGIpIHdoZW4gdGhlIGxhc3Qgb3BlcmF0aW9uIG91dHN0YW5kaW5nIG9uIGFuIG9iamVjdCBpcyBjb21wbGV0ZWQuCisKKyAgICAgVGhpcyBpcyB1c2VkIHRvIHByb2NlZWQgZnJvbSB0aGUgZHlpbmcgc3RhdGUuCisKKyAoKikgRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1IKKworICAgICBUaGlzIGlzIHNpZ25hbGxlZCB3aGVuIGFuIEkvTyBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBwcm9jZXNzaW5nIG9mIHNvbWUKKyAgICAgb2JqZWN0LgorCisgKCopIEZTQ0FDSEVfT0JKRUNUX0VWX1JFTEVBU0UKKyAoKikgRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFCisKKyAgICAgVGhlc2UgYXJlIHNpZ25hbGxlZCB3aGVuIHRoZSBuZXRmcyByZWxpbnF1aXNoZXMgYSBjb29raWUgaXQgd2FzIHVzaW5nLgorICAgICBUaGUgZXZlbnQgc2VsZWN0ZWQgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBuZXRmcyBhc2tzIGZvciB0aGUgYmFja2luZworICAgICBvYmplY3QgdG8gYmUgcmV0aXJlZCAoZGVsZXRlZCkgb3IgcmV0YWluZWQuCisKKyAoKikgRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVcKKworICAgICBUaGlzIGlzIHNpZ25hbGxlZCB3aGVuIHRoZSBjYWNoZSBiYWNrZW5kIHdhbnRzIHRvIHdpdGhkcmF3IGFuIG9iamVjdC4KKyAgICAgVGhpcyBtZWFucyB0aGF0IHRoZSBvYmplY3Qgd2lsbCBoYXZlIHRvIGJlIGRldGFjaGVkIGZyb20gdGhlIG5ldGZzJ3MKKyAgICAgY29va2llLgorCitCZWNhdXNlIHRoZSB3aXRoZHJhd2luZyByZWxlYXNpbmcvcmV0aXJpbmcgZXZlbnRzIGFyZSBhbGwgaGFuZGxlZCBieSB0aGUgb2JqZWN0CitzdGF0ZSBtYWNoaW5lLCBpdCBkb2Vzbid0IG1hdHRlciBpZiB0aGVyZSdzIGEgY29sbGlzaW9uIHdpdGggYm90aCBlbmRzIHRyeWluZwordG8gc2V2ZXIgdGhlIGNvbm5lY3Rpb24gYXQgdGhlIHNhbWUgdGltZS4gIFRoZSBzdGF0ZSBtYWNoaW5lIGNhbiBqdXN0IHBpY2sKK3doaWNoIG9uZSBpdCB3YW50cyB0byBob25vdXIsIGFuZCB0aGF0IGVmZmVjdHMgdGhlIG90aGVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL29wZXJhdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL29wZXJhdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YjA3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvb3BlcmF0aW9ucy50eHQKQEAgLTAsMCArMSwyMTMgQEAKKwkJICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCSAgICAgICBBU1lOQ0hST05PVVMgT1BFUkFUSU9OUyBIQU5ETElORworCQkgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQnk6IERhdmlkIEhvd2VsbHMgPGRob3dlbGxzQHJlZGhhdC5jb20+CisKK0NvbnRlbnRzOgorCisgKCopIE92ZXJ2aWV3LgorCisgKCopIE9wZXJhdGlvbiByZWNvcmQgaW5pdGlhbGlzYXRpb24uCisKKyAoKikgUGFyYW1ldGVycy4KKworICgqKSBQcm9jZWR1cmUuCisKKyAoKikgQXN5bmNocm9ub3VzIGNhbGxiYWNrLgorCisKKz09PT09PT09CitPVkVSVklFVworPT09PT09PT0KKworRlMtQ2FjaGUgaGFzIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGhhbmRsaW5nIGZhY2lsaXR5IHRoYXQgaXQgdXNlcyBmb3IgaXRzCitkYXRhIHN0b3JhZ2UgYW5kIHJldHJpZXZhbCByb3V0aW5lcy4gIEl0cyBvcGVyYXRpb25zIGFyZSByZXByZXNlbnRlZCBieQorZnNjYWNoZV9vcGVyYXRpb24gc3RydWN0cywgdGhvdWdoIHRoZXNlIGFyZSB1c3VhbGx5IGVtYmVkZGVkIGludG8gc29tZSBvdGhlcgorc3RydWN0dXJlLgorCitUaGlzIGZhY2lsaXR5IGlzIGF2YWlsYWJsZSB0byBhbmQgZXhwZWN0ZWQgdG8gYmUgYmUgdXNlZCBieSB0aGUgY2FjaGUgYmFja2VuZHMsCithbmQgRlMtQ2FjaGUgd2lsbCBjcmVhdGUgb3BlcmF0aW9ucyBhbmQgcGFzcyB0aGVtIG9mZiB0byB0aGUgYXBwcm9wcmlhdGUgY2FjaGUKK2JhY2tlbmQgZm9yIGNvbXBsZXRpb24uCisKK1RvIG1ha2UgdXNlIG9mIHRoaXMgZmFjaWxpdHksIDxsaW51eC9mc2NhY2hlLWNhY2hlLmg+IHNob3VsZCBiZSAjaW5jbHVkZWQuCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorT1BFUkFUSU9OIFJFQ09SRCBJTklUSUFMSVNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBbiBvcGVyYXRpb24gaXMgcmVjb3JkZWQgaW4gYW4gZnNjYWNoZV9vcGVyYXRpb24gc3RydWN0OgorCisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uIHsKKwkJdW5pb24geworCQkJc3RydWN0IHdvcmtfc3RydWN0IGZhc3Rfd29yazsKKwkJCXN0cnVjdCBzbG93X3dvcmsgc2xvd193b3JrOworCQl9OworCQl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwkJZnNjYWNoZV9vcGVyYXRpb25fcHJvY2Vzc29yX3QgcHJvY2Vzc29yOworCQkuLi4KKwl9OworCitTb21lb25lIHdhbnRpbmcgdG8gaXNzdWUgYW4gb3BlcmF0aW9uIHNob3VsZCBhbGxvY2F0ZSBzb21ldGhpbmcgd2l0aCB0aGlzCitzdHJ1Y3QgZW1iZWRkZWQgaW4gaXQuICBUaGV5IHNob3VsZCBpbml0aWFsaXNlIGl0IGJ5IGNhbGxpbmc6CisKKwl2b2lkIGZzY2FjaGVfb3BlcmF0aW9uX2luaXQoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCwKKwkJCQkgICAgZnNjYWNoZV9vcGVyYXRpb25fcmVsZWFzZV90IHJlbGVhc2UpOworCit3aXRoIHRoZSBvcGVyYXRpb24gdG8gYmUgaW5pdGlhbGlzZWQgYW5kIHRoZSByZWxlYXNlIGZ1bmN0aW9uIHRvIHVzZS4KKworVGhlIG9wLT5mbGFncyBwYXJhbWV0ZXIgc2hvdWxkIGJlIHNldCB0byBpbmRpY2F0ZSB0aGUgQ1BVIHRpbWUgcHJvdmlzaW9uIGFuZAordGhlIGV4Y2x1c2l2aXR5IChzZWUgdGhlIFBhcmFtZXRlcnMgc2VjdGlvbikuCisKK1RoZSBvcC0+ZmFzdF93b3JrLCBvcC0+c2xvd193b3JrIGFuZCBvcC0+cHJvY2Vzc29yIGZsYWdzIHNob3VsZCBiZSBzZXQgYXMKK2FwcHJvcHJpYXRlIGZvciB0aGUgQ1BVIHRpbWUgcHJvdmlzaW9uIChzZWUgdGhlIFBhcmFtZXRlcnMgc2VjdGlvbikuCisKK0ZTQ0FDSEVfT1BfV0FJVElORyBtYXkgYmUgc2V0IGluIG9wLT5mbGFncyBwcmlvciB0byBlYWNoIHN1Ym1pc3Npb24gb2YgdGhlCitvcGVyYXRpb24gYW5kIHdhaXRlZCBmb3IgYWZ0ZXJ3YXJkcy4KKworCis9PT09PT09PT09CitQQVJBTUVURVJTCis9PT09PT09PT09CisKK1RoZXJlIGFyZSBhIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHNldCBpbiB0aGUgb3BlcmF0aW9uIHJlY29yZCdzIGZsYWcKK3BhcmFtZXRlci4gIFRoZXJlIGFyZSB0aHJlZSBvcHRpb25zIGZvciB0aGUgcHJvdmlzaW9uIG9mIENQVSB0aW1lIGluIHRoZXNlCitvcGVyYXRpb25zOgorCisgKDEpIFRoZSBvcGVyYXRpb24gbWF5IGJlIGRvbmUgc3luY2hyb25vdXNseSAoRlNDQUNIRV9PUF9NWVRIUkVBRCkuICBBIHRocmVhZAorICAgICBtYXkgZGVjaWRlIGl0IHdhbnRzIHRvIGhhbmRsZSBhbiBvcGVyYXRpb24gaXRzZWxmIHdpdGhvdXQgZGVmZXJyaW5nIGl0IHRvCisgICAgIGFub3RoZXIgdGhyZWFkLgorCisgICAgIFRoaXMgaXMsIGZvciBleGFtcGxlLCB1c2VkIGluIHJlYWQgb3BlcmF0aW9ucyBmb3IgY2FsbGluZyByZWFkcGFnZXMoKSBvbgorICAgICB0aGUgYmFja2luZyBmaWxlc3lzdGVtIGluIENhY2hlRmlsZXMuICBBbHRob3VnaCByZWFkcGFnZXMoKSBkb2VzIGFuCisgICAgIGFzeW5jaHJvbm91cyBkYXRhIGZldGNoLCB0aGUgZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIHBhZ2VzIGV4aXN0IGlzIGRvbmUKKyAgICAgc3luY2hyb25vdXNseSAtIGFuZCB0aGUgbmV0ZnMgZG9lcyBub3QgcHJvY2VlZCB1bnRpbCB0aGlzIGhhcyBiZWVuCisgICAgIGRldGVybWluZWQuCisKKyAgICAgSWYgdGhpcyBvcHRpb24gaXMgdG8gYmUgdXNlZCwgRlNDQUNIRV9PUF9XQUlUSU5HIG11c3QgYmUgc2V0IGluIG9wLT5mbGFncworICAgICBiZWZvcmUgc3VibWl0dGluZyB0aGUgb3BlcmF0aW9uLCBhbmQgdGhlIG9wZXJhdGluZyB0aHJlYWQgbXVzdCB3YWl0IGZvciBpdAorICAgICB0byBiZSBjbGVhcmVkIGJlZm9yZSBwcm9jZWVkaW5nOgorCisJCXdhaXRfb25fYml0KCZvcC0+ZmxhZ3MsIEZTQ0FDSEVfT1BfV0FJVElORywKKwkJCSAgICBmc2NhY2hlX3dhaXRfYml0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisKKworICgyKSBUaGUgb3BlcmF0aW9uIG1heSBiZSBmYXN0IGFzeW5jaHJvbm91cyAoRlNDQUNIRV9PUF9GQVNUKSwgaW4gd2hpY2ggY2FzZSBpdAorICAgICB3aWxsIGJlIGdpdmVuIHRvIGtldmVudGQgdG8gcHJvY2Vzcy4gIFN1Y2ggYW4gb3BlcmF0aW9uIGlzIG5vdCBwZXJtaXR0ZWQKKyAgICAgdG8gc2xlZXAgb24gSS9PLgorCisgICAgIFRoaXMgaXMsIGZvciBleGFtcGxlLCB1c2VkIGJ5IENhY2hlRmlsZXMgdG8gY29weSBkYXRhIGZyb20gYSBiYWNraW5nIGZzCisgICAgIHBhZ2UgdG8gYSBuZXRmcyBwYWdlIGFmdGVyIHRoZSBiYWNraW5nIGZzIGhhcyByZWFkIHRoZSBwYWdlIGluLgorCisgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQsIG9wLT5mYXN0X3dvcmsgYW5kIG9wLT5wcm9jZXNzb3IgbXVzdCBiZQorICAgICBpbml0aWFsaXNlZCBiZWZvcmUgc3VibWl0dGluZyB0aGUgb3BlcmF0aW9uOgorCisJCUlOSVRfV09SSygmb3AtPmZhc3Rfd29yaywgZG9fc29tZV93b3JrKTsKKworCisgKDMpIFRoZSBvcGVyYXRpb24gbWF5IGJlIHNsb3cgYXN5bmNocm9ub3VzIChGU0NBQ0hFX09QX1NMT1cpLCBpbiB3aGljaCBjYXNlIGl0CisgICAgIHdpbGwgYmUgZ2l2ZW4gdG8gdGhlIHNsb3cgd29yayBmYWNpbGl0eSB0byBwcm9jZXNzLiAgU3VjaCBhbiBvcGVyYXRpb24gaXMKKyAgICAgcGVybWl0dGVkIHRvIHNsZWVwIG9uIEkvTy4KKworICAgICBUaGlzIGlzLCBmb3IgZXhhbXBsZSwgdXNlZCBieSBGUy1DYWNoZSB0byBoYW5kbGUgYmFja2dyb3VuZCB3cml0ZXMgb2YKKyAgICAgcGFnZXMgdGhhdCBoYXZlIGp1c3QgYmVlbiBmZXRjaGVkIGZyb20gYSByZW1vdGUgc2VydmVyLgorCisgICAgIElmIHRoaXMgb3B0aW9uIGlzIHVzZWQsIG9wLT5zbG93X3dvcmsgYW5kIG9wLT5wcm9jZXNzb3IgbXVzdCBiZQorICAgICBpbml0aWFsaXNlZCBiZWZvcmUgc3VibWl0dGluZyB0aGUgb3BlcmF0aW9uOgorCisJCWZzY2FjaGVfb3BlcmF0aW9uX2luaXRfc2xvdyhvcCwgcHJvY2Vzc29yKQorCisKK0Z1cnRoZXJtb3JlLCBvcGVyYXRpb25zIG1heSBiZSBvbmUgb2YgdHdvIHR5cGVzOgorCisgKDEpIEV4Y2x1c2l2ZSAoRlNDQUNIRV9PUF9FWENMVVNJVkUpLiAgT3BlcmF0aW9ucyBvZiB0aGlzIHR5cGUgbWF5IG5vdCBydW4gaW4KKyAgICAgY29uanVuY3Rpb24gd2l0aCBhbnkgb3RoZXIgb3BlcmF0aW9uIG9uIHRoZSBvYmplY3QgYmVpbmcgb3BlcmF0ZWQgdXBvbi4KKworICAgICBBbiBleGFtcGxlIG9mIHRoaXMgaXMgdGhlIGF0dHJpYnV0ZSBjaGFuZ2Ugb3BlcmF0aW9uLCBpbiB3aGljaCB0aGUgZmlsZQorICAgICBiZWluZyB3cml0dGVuIHRvIG1heSBuZWVkIHRydW5jYXRpb24uCisKKyAoMikgU2hhcmVhYmxlLiAgT3BlcmF0aW9ucyBvZiB0aGlzIHR5cGUgbWF5IGJlIHJ1bm5pbmcgc2ltdWx0YW5lb3VzbHkuICBJdCdzCisgICAgIHVwIHRvIHRoZSBvcGVyYXRpb24gaW1wbGVtZW50YXRpb24gdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgYmV0d2VlbiBvdGhlcgorICAgICBvcGVyYXRpb25zIHJ1bm5pbmcgYXQgdGhlIHNhbWUgdGltZS4KKworCis9PT09PT09PT0KK1BST0NFRFVSRQorPT09PT09PT09CisKK09wZXJhdGlvbnMgYXJlIHVzZWQgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHByb2NlZHVyZToKKworICgxKSBUaGUgc3VibWl0dGluZyB0aHJlYWQgbXVzdCBhbGxvY2F0ZSB0aGUgb3BlcmF0aW9uIGFuZCBpbml0aWFsaXNlIGl0CisgICAgIGl0c2VsZi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgcGFydCBvZiBhIG1vcmUgc3BlY2lmaWMgc3RydWN0dXJlIHdpdGggdGhlCisgICAgIGdlbmVyaWMgb3AgZW1iZWRkZWQgd2l0aGluLgorCisgKDIpIFRoZSBzdWJtaXR0aW5nIHRocmVhZCBtdXN0IHRoZW4gc3VibWl0IHRoZSBvcGVyYXRpb24gZm9yIHByb2Nlc3NpbmcgdXNpbmcKKyAgICAgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9uczoKKworCWludCBmc2NhY2hlX3N1Ym1pdF9vcChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCSAgICAgIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApOworCisJaW50IGZzY2FjaGVfc3VibWl0X2V4Y2x1c2l2ZV9vcChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCQkJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCk7CisKKyAgICAgVGhlIGZpcnN0IGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIHRvIHN1Ym1pdCBub24tZXhjbHVzaXZlIG9wcyBhbmQgdGhlCisgICAgIHNlY29uZCB0byBzdWJtaXQgZXhjbHVzaXZlIG9uZXMuICBUaGUgY2FsbGVyIG11c3Qgc3RpbGwgc2V0IHRoZQorICAgICBGU0NBQ0hFX09QX0VYQ0xVU0lWRSBmbGFnLgorCisgICAgIElmIHN1Y2Nlc3NmdWwsIGJvdGggZnVuY3Rpb25zIHdpbGwgYXNzaWduIHRoZSBvcGVyYXRpb24gdG8gdGhlIHNwZWNpZmllZAorICAgICBvYmplY3QgYW5kIHJldHVybiAwLiAgLUVOT0JVRlMgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUgb2JqZWN0IHNwZWNpZmllZCBpcworICAgICBwZXJtYW5lbnRseSB1bmF2YWlsYWJsZS4KKworICAgICBUaGUgb3BlcmF0aW9uIG1hbmFnZXIgd2lsbCBkZWZlciBvcGVyYXRpb25zIG9uIGFuIG9iamVjdCB0aGF0IGlzIHN0aWxsCisgICAgIHVuZGVyZ29pbmcgbG9va3VwIG9yIGNyZWF0aW9uLiAgVGhlIG9wZXJhdGlvbiB3aWxsIGFsc28gYmUgZGVmZXJyZWQgaWYgYW4KKyAgICAgb3BlcmF0aW9uIG9mIGNvbmZsaWN0aW5nIGV4Y2x1c2l2aXR5IGlzIGluIHByb2dyZXNzIG9uIHRoZSBvYmplY3QuCisKKyAgICAgSWYgdGhlIG9wZXJhdGlvbiBpcyBhc3luY2hyb25vdXMsIHRoZSBtYW5hZ2VyIHdpbGwgcmV0YWluIGEgcmVmZXJlbmNlIHRvCisgICAgIGl0LCBzbyB0aGUgY2FsbGVyIHNob3VsZCBwdXQgdGhlaXIgcmVmZXJlbmNlIHRvIGl0IGJ5IHBhc3NpbmcgaXQgdG86CisKKwl2b2lkIGZzY2FjaGVfcHV0X29wZXJhdGlvbihzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKTsKKworICgzKSBJZiB0aGUgc3VibWl0dGluZyB0aHJlYWQgd2FudHMgdG8gZG8gdGhlIHdvcmsgaXRzZWxmLCBhbmQgaGFzIG1hcmtlZCB0aGUKKyAgICAgb3BlcmF0aW9uIHdpdGggRlNDQUNIRV9PUF9NWVRIUkVBRCwgdGhlbiBpdCBzaG91bGQgbW9uaXRvcgorICAgICBGU0NBQ0hFX09QX1dBSVRJTkcgYXMgZGVzY3JpYmVkIGFib3ZlIGFuZCBjaGVjayB0aGUgc3RhdGUgb2YgdGhlIG9iamVjdCBpZgorICAgICBuZWNlc3NhcnkgKHRoZSBvYmplY3QgbWlnaHQgaGF2ZSBkaWVkIHdoaWxzdCB0aGUgdGhyZWFkIHdhcyB3YWl0aW5nKS4KKworICAgICBXaGVuIGl0IGhhcyBmaW5pc2hlZCBkb2luZyBpdHMgcHJvY2Vzc2luZywgaXQgc2hvdWxkIGNhbGwKKyAgICAgZnNjYWNoZV9wdXRfb3BlcmF0aW9uKCkgb24gaXQuCisKKyAoNCkgVGhlIG9wZXJhdGlvbiBob2xkcyBhbiBlZmZlY3RpdmUgbG9jayB1cG9uIHRoZSBvYmplY3QsIHByZXZlbnRpbmcgb3RoZXIKKyAgICAgZXhjbHVzaXZlIG9wcyBjb25mbGljdGluZyB1bnRpbCBpdCBpcyByZWxlYXNlZC4gIFRoZSBvcGVyYXRpb24gY2FuIGJlCisgICAgIGVucXVldWVkIGZvciBmdXJ0aGVyIGltbWVkaWF0ZSBhc3luY2hyb25vdXMgcHJvY2Vzc2luZyBieSBhZGp1c3RpbmcgdGhlCisgICAgIENQVSB0aW1lIHByb3Zpc2lvbmluZyBvcHRpb24gaWYgbmVjZXNzYXJ5LCBlZzoKKworCW9wLT5mbGFncyAmPSB+RlNDQUNIRV9PUF9UWVBFOworCW9wLT5mbGFncyB8PSB+RlNDQUNIRV9PUF9GQVNUOworCisgICAgIGFuZCBjYWxsaW5nOgorCisJdm9pZCBmc2NhY2hlX2VucXVldWVfb3BlcmF0aW9uKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApCisKKyAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBhbGxvdyBvdGhlciB0aGluZ3MgdG8gaGF2ZSB1c2Ugb2YgdGhlIHdvcmtlciB0aHJlYWQKKyAgICAgcG9vbHMuCisKKworPT09PT09PT09PT09PT09PT09PT09CitBU1lOQ0hST05PVVMgQ0FMTEJBQ0sKKz09PT09PT09PT09PT09PT09PT09PQorCitXaGVuIHVzZWQgaW4gYXN5bmNocm9ub3VzIG1vZGUsIHRoZSB3b3JrZXIgdGhyZWFkIHBvb2wgd2lsbCBpbnZva2UgdGhlCitwcm9jZXNzb3IgbWV0aG9kIHdpdGggYSBwb2ludGVyIHRvIHRoZSBvcGVyYXRpb24uICBUaGlzIHNob3VsZCB0aGVuIGdldCBhdCB0aGUKK2NvbnRhaW5lciBzdHJ1Y3QgYnkgdXNpbmcgY29udGFpbmVyX29mKCk6CisKKwlzdGF0aWMgdm9pZCBmc2NhY2hlX3dyaXRlX29wKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqX29wKQorCXsKKwkJc3RydWN0IGZzY2FjaGVfc3RvcmFnZSAqb3AgPQorCQkJY29udGFpbmVyX29mKF9vcCwgc3RydWN0IGZzY2FjaGVfc3RvcmFnZSwgb3ApOworCS4uLgorCX0KKworVGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSBvbiB0aGUgb3BlcmF0aW9uLCBhbmQgd2lsbCBpbnZva2UKK2ZzY2FjaGVfcHV0X29wZXJhdGlvbigpIHdoZW4gdGhlIHByb2Nlc3NvciBmdW5jdGlvbiByZXR1cm5zLiAgVGhlIHByb2Nlc3NvcgorZnVuY3Rpb24gaXMgYXQgbGliZXJ0eSB0byBjYWxsIGZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24oKSBvciB0byB0YWtlIGV4dHJhCityZWZlcmVuY2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leG9mcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4b2ZzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2VkNzRjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leG9mcy50eHQKQEAgLTAsMCArMSwxNzYgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1dIQVQgSVMgRVhPRlM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2V4b2ZzIGlzIGEgZmlsZSBzeXN0ZW0gdGhhdCB1c2VzIGFuIE9TRCBhbmQgZXhwb3J0cyB0aGUgQVBJIG9mIGEgbm9ybWFsIExpbnV4CitmaWxlIHN5c3RlbS4gVXNlcnMgYWNjZXNzIGV4b2ZzIGxpa2UgYW55IG90aGVyIGxvY2FsIGZpbGUgc3lzdGVtLCBhbmQgZXhvZnMKK3dpbGwgaW4gdHVybiBpc3N1ZSBjb21tYW5kcyB0byB0aGUgbG9jYWwgT1NEIGluaXRpYXRvci4KKworT1NEIGlzIGEgbmV3IFQxMCBjb21tYW5kIHNldCB0aGF0IHZpZXdzIHN0b3JhZ2UgZGV2aWNlcyBub3QgYXMgYSBsYXJnZS9mbGF0CithcnJheSBvZiBzZWN0b3JzIGJ1dCBhcyBhIGNvbnRhaW5lciBvZiBvYmplY3RzLCBlYWNoIGhhdmluZyBhIGxlbmd0aCwgcXVvdGEsCit0aW1lIGF0dHJpYnV0ZXMgYW5kIG1vcmUuIEVhY2ggb2JqZWN0IGlzIGFkZHJlc3NlZCBieSBhIDY0Yml0IElELCBhbmQgaXMKK2NvbnRhaW5lZCBpbiBhIDY0Yml0IElEIHBhcnRpdGlvbi4gRWFjaCBvYmplY3QgaGFzIGFzc29jaWF0ZWQgYXR0cmlidXRlcworYXR0YWNoZWQgdG8gaXQsIHdoaWNoIGFyZSBpbnRlZ3JhbCBwYXJ0IG9mIHRoZSBvYmplY3QgYW5kIHByb3ZpZGUgbWV0YWRhdGEgYWJvdXQKK3RoZSBvYmplY3QuIFRoZSBzdGFuZGFyZCBkZWZpbmVzIHNvbWUgY29tbW9uIG9ibGlnYXRvcnkgYXR0cmlidXRlcywgYnV0IHVzZXIKK2F0dHJpYnV0ZXMgY2FuIGJlIGFkZGVkIGFzIG5lZWRlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRU5WSVJPTk1FTlQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVG8gdXNlIHRoaXMgZmlsZSBzeXN0ZW0sIHlvdSBuZWVkIHRvIGhhdmUgYW4gb2JqZWN0IHN0b3JlIHRvIHJ1biBpdCBvbi4gIFlvdQorbWF5IGRvd25sb2FkIGEgdGFyZ2V0IGZyb206CitodHRwOi8vb3Blbi1vc2Qub3JnCisKK1NlZSBEb2N1bWVudGF0aW9uL3Njc2kvb3NkLnR4dCBmb3IgaG93IHRvIHNldHVwIGEgd29ya2luZyBvc2QgZW52aXJvbm1lbnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1VTQUdFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuIERvd25sb2FkIGFuZCBjb21waWxlIGV4b2ZzIGFuZCBvcGVuLW9zZCBpbml0aWF0b3I6CisgIFlvdSBuZWVkIGFuIGV4dGVybmFsIEtlcm5lbCBzb3VyY2UgdHJlZSBvciBrZXJuZWwgaGVhZGVycyBmcm9tIHlvdXIKKyAgZGlzdHJpYnV0aW9uLiAoYW55dGhpbmcgYmFzZWQgb24gMi42LjI2IG9yIGxhdGVyKS4KKworICBhLiBkb3dubG9hZCBvcGVuLW9zZCBpbmNsdWRpbmcgZXhvZnMgc291cmNlIHVzaW5nOgorICAgICBbcGFyZW50LWRpcmVjdG9yeV0kIGdpdCBjbG9uZSBnaXQ6Ly9naXQub3Blbi1vc2Qub3JnL29wZW4tb3NkLmdpdAorCisgIGIuIEJ1aWxkIHRoZSBsaWJyYXJ5IG1vZHVsZSBsaWtlIHRoaXM6CisgICAgIFtwYXJlbnQtZGlyZWN0b3J5XSQgbWFrZSAtQyBLU1JDPSQoS0VSX0RJUikgb3Blbi1vc2QKKworICAgICBUaGlzIHdpbGwgYnVpbGQgYm90aCB0aGUgb3Blbi1vc2QgaW5pdGlhdG9yIGFzIHdlbGwgYXMgdGhlIGV4b2ZzIGtlcm5lbAorICAgICBtb2R1bGUuIFVzZSB3aGF0ZXZlciBwYXJhbWV0ZXJzIHlvdSBjb21waWxlZCB5b3VyIEtlcm5lbCB3aXRoIGFuZAorICAgICAkKEtFUl9ESVIpIGFib3ZlIHBvaW50aW5nIHRvIHRoZSBLZXJuZWwgeW91IGNvbXBpbGUgYWdhaW5zdC4gU2VlIHRoZSBmaWxlCisgICAgIG9wZW4tb3NkL3RvcC1sZXZlbC1NYWtlZmlsZSBmb3IgYW4gZXhhbXBsZS4KKworMi4gR2V0IHRoZSBPU0QgaW5pdGlhdG9yIGFuZCB0YXJnZXQgc2V0IHVwIHByb3Blcmx5LCBhbmQgbG9naW4gdG8gdGhlIHRhcmdldC4KKyAgU2VlIERvY3VtZW50YXRpb24vc2NzaS9vc2QudHh0IGZvciBmYXJ0aGVyIGluc3RydWN0aW9ucy4gQWxzbyBzZWUgLi9kby1vc2QKKyAgZm9yIGV4YW1wbGUgc2NyaXB0IHRoYXQgZG9lcyBhbGwgdGhlc2Ugc3RlcHMuCisKKzMuIEluc21vZCB0aGUgZXhvZnMua28gbW9kdWxlOgorICAgW2V4b2ZzXSQgaW5zbW9kIGV4b2ZzLmtvCisKKzQuIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSB3YW50IHRvIG1vdW50IGV4aXN0cy4gSWYgbm90LCBjcmVhdGUgaXQuCisgICAoRm9yIGV4YW1wbGUsIG1rZGlyIC9tbnQvZXhvZnMpCisKKzUuIEF0IGZpcnN0IHJ1biB5b3Ugd2lsbCBuZWVkIHRvIGludm9rZSB0aGUgbWtmcy5leG9mcyBhcHBsaWNhdGlvbgorCisgICBBcyBhbiBleGFtcGxlLCB0aGlzIHdpbGwgY3JlYXRlIHRoZSBmaWxlIHN5c3RlbSBvbjoKKyAgIC9kZXYvb3NkMCBwYXJ0aXRpb24gSUQgNjU1MzYKKworICAgbWtmcy5leG9mcyAtLXBpZD02NTUzNiAtLWZvcm1hdCAvZGV2L29zZDAKKworICAgVGhlIC0tZm9ybWF0IGlzIG9wdGlvbmFsIGlmIG5vdCBzcGVjaWZpZWQgbm8gT1NEX0ZPUk1BVCB3aWxsIGJlCisgICBwcmVmb3JtZWQgYW5kIGEgY2xlYW4gZmlsZSBzeXN0ZW0gd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBzcGVjaWZpZWQgcGlkLAorICAgaW4gdGhlIGF2YWlsYWJsZSBzcGFjZSBvZiB0aGUgdGFyZ2V0LiAoVXNlIC0tZm9ybWF0PXNpemVfaW5fbWVnIHRvIGxpbWl0CisgICB0aGUgdG90YWwgTFVOIHNwYWNlIGF2YWlsYWJsZSkKKworICAgSWYgcGlkIGFscmVhZHkgZXhpc3QgaXQgd2lsbCBiZSBkZWxldGVkIGFuZCBhIG5ldyBvbmUgd2lsbCBiZSBjcmVhdGVkIGluIGl0J3MKKyAgIHBsYWNlLiBCZSBjYXJlZnVsLgorCisgICBBbiBleG9mcyBsaXZlcyBpbnNpZGUgYSBzaW5nbGUgT1NEIHBhcnRpdGlvbi4gWW91IGNhbiBjcmVhdGUgbXVsdGlwbGUgZXhvZnMKKyAgIGZpbGVzeXN0ZW1zIG9uIHRoZSBzYW1lIGRldmljZSB1c2luZyBtdWx0aXBsZSBwaWRzLgorCisgICAocnVuIG1rZnMuZXhvZnMgd2l0aG91dCBhbnkgcGFyYW1ldGVycyBmb3IgdXNhZ2UgaGVscCBtZXNzYWdlKQorCis2LiBNb3VudCB0aGUgZmlsZSBzeXN0ZW0uCisKKyAgIEZvciBleGFtcGxlLCB0byBtb3VudCAvZGV2L29zZDAsIHBhcnRpdGlvbiBJRCAweDEwMDAwIG9uIC9tbnQvZXhvZnM6CisKKwltb3VudCAtdCBleG9mcyAtbyBwaWQ9NjU1MzYgL2Rldi9vc2QwIC9tbnQvZXhvZnMvCisKKzcuIEZvciByZWZlcmVuY2UgKFNlZSBkby1leG9mcyBleGFtcGxlIHNjcmlwdCk6CisJZG8tZXhvZnMgc3RhcnQgLSBhbiBleGFtcGxlIG9mIGhvdyB0byBwZXJmb3JtIHRoZSBhYm92ZSBzdGVwcy4KKwlkby1leG9mcyBzdG9wIC0gIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVubW91bnQgdGhlIGZpbGUgc3lzdGVtLgorCWRvLWV4b2ZzIGZvcm1hdCAtIGFuIGV4YW1wbGUgb2YgaG93IHRvIGZvcm1hdCBhbmQgbWtmcyBhIG5ldyBleG9mcy4KKworOC4gRXh0cmEgY29tcGlsYXRpb24gZmxhZ3MgKHVuY29tbWVudCBpbiBmcy9leG9mcy9LYnVpbGQpOgorCUNPTkZJR19FWE9GU19ERUJVRyAtIGZvciBkZWJ1ZyBtZXNzYWdlcyBhbmQgZXh0cmEgY2hlY2tzLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitleG9mcyBtb3VudCBvcHRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitTaW1pbGFyIHRvIGFueSBtb3VudCBjb21tYW5kOgorCW1vdW50IC10IGV4b2ZzIC1vIGV4b2ZzX29wdGlvbnMgL2Rldi9vc2RYIG1vdW50X2V4b2ZzX2RpcmVjdG9yeQorCitXaGVyZToKKyAgICAtdCBleG9mczogc3BlY2lmaWVzIHRoZSBleG9mcyBmaWxlIHN5c3RlbQorCisgICAgL2Rldi9vc2RYOiBYIGlzIGEgZGVjaW1hbCBudW1iZXIuIC9kZXYvb3NkWCB3YXMgY3JlYXRlZCBhZnRlciBhIHN1Y2Nlc3NmdWwKKyAgICAgICAgICAgICAgIGxvZ2luIGludG8gYW4gT1NEIHRhcmdldC4KKworICAgIG1vdW50X2V4b2ZzX2RpcmVjdG9yeTogVGhlIGRpcmVjdG9yeSB0byBtb3VudCB0aGUgZmlsZSBzeXN0ZW0gb24KKworICAgIGV4b2ZzIHNwZWNpZmljIG9wdGlvbnM6IE9wdGlvbnMgYXJlIHNlcGFyYXRlZCBieSBjb21tYXMgKCwpCisJCXBpZD08aW50ZWdlcj4gLSBUaGUgcGFydGl0aW9uIG51bWJlciB0byBtb3VudC9jcmVhdGUgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyIG9mIHRoZSBmaWxlc3lzdGVtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBpcyBtYW5kYXRvcnkKKyAgICAgICAgICAgICAgICB0bz08aW50ZWdlcj4gIC0gVGltZW91dCBpbiB0aWNrcyBmb3IgYSBzaW5nbGUgY29tbWFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0IGlzICg2MCAqIEhaKSBbZm9yIGRlYnVnZ2luZyBvbmx5XQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitERVNJR04KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBUaGUgZmlsZSBzeXN0ZW0gY29udHJvbCBibG9jayAoQUtBIG9uLWRpc2sgc3VwZXJibG9jaykgcmVzaWRlcyBpbiBhbiBvYmplY3QKKyAgd2l0aCBhIHNwZWNpYWwgSUQgKGRlZmluZWQgaW4gY29tbW9uLmgpLgorICBJbmZvcm1hdGlvbiBpbmNsdWRlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gY29udHJvbCBibG9jayBpcyB1c2VkIHRvIGZpbGwgdGhlCisgIGluLW1lbW9yeSBzdXBlcmJsb2NrIHN0cnVjdHVyZSBhdCBtb3VudCB0aW1lLiBUaGlzIG9iamVjdCBpcyBjcmVhdGVkIGJlZm9yZQorICB0aGUgZmlsZSBzeXN0ZW0gaXMgdXNlZCBieSBta2V4b2ZzLmMgSXQgY29udGFpbnMgaW5mb3JtYXRpb24gc3VjaCBhczoKKwktIFRoZSBmaWxlIHN5c3RlbSdzIG1hZ2ljIG51bWJlcgorCS0gVGhlIG5leHQgaW5vZGUgbnVtYmVyIHRvIGJlIGFsbG9jYXRlZAorCisqIEVhY2ggZmlsZSByZXNpZGVzIGluIGl0cyBvd24gb2JqZWN0IGFuZCBjb250YWlucyB0aGUgZGF0YSAoYW5kIGl0IHdpbGwgYmUKKyAgcG9zc2libGUgdG8gZXh0ZW5kIHRoZSBmaWxlIG92ZXIgbXVsdGlwbGUgb2JqZWN0cywgdGhvdWdoIHRoaXMgaGFzIG5vdCBiZWVuCisgIGltcGxlbWVudGVkIHlldCkuCisKKyogQSBkaXJlY3RvcnkgaXMgdHJlYXRlZCBhcyBhIGZpbGUsIGFuZCBlc3NlbnRpYWxseSBjb250YWlucyBhIGxpc3Qgb2YgPGZpbGUKKyAgbmFtZSwgaW5vZGUgIz4gcGFpcnMgZm9yIGZpbGVzIHRoYXQgYXJlIGZvdW5kIGluIHRoYXQgZGlyZWN0b3J5LiBUaGUgb2JqZWN0CisgIElEcyBjb3JyZXNwb25kIHRvIHRoZSBmaWxlcycgaW5vZGUgbnVtYmVycyBhbmQgd2lsbCBiZSBhbGxvY2F0ZWQgYWNjb3JkaW5nIHRvCisgIGEgYml0bWFwIChzdG9yZWQgaW4gYSBzZXBhcmF0ZSBvYmplY3QpLiBOb3cgdGhleSBhcmUgYWxsb2NhdGVkIHVzaW5nIGEKKyAgY291bnRlci4KKworKiBFYWNoIGZpbGUncyBjb250cm9sIGJsb2NrIChBS0Egb24tZGlzayBpbm9kZSkgaXMgc3RvcmVkIGluIGl0cyBvYmplY3QncworICBhdHRyaWJ1dGVzLiBUaGlzIGFwcGxpZXMgdG8gYm90aCByZWd1bGFyIGZpbGVzIGFuZCBvdGhlciB0eXBlcyAoZGlyZWN0b3JpZXMsCisgIGRldmljZSBmaWxlcywgc3ltbGlua3MsIGV0Yy4pLgorCisqIENyZWRlbnRpYWxzIGFyZSBnZW5lcmF0ZWQgcGVyIG9iamVjdCAoaW5vZGUgYW5kIHN1cGVyYmxvY2spIHdoZW4gdGhleSBpcworICBjcmVhdGVkIGluIG1lbW9yeSAocmVhZCBvZmYgZGlzayBvciBjcmVhdGVkKS4gVGhlIGNyZWRlbnRpYWwgd29ya3MgZm9yIGFsbAorICBvcGVyYXRpb25zIGFuZCBpcyB1c2VkIGFzIGxvbmcgYXMgdGhlIG9iamVjdCByZW1haW5zIGluIG1lbW9yeS4KKworKiBBc3luYyBPU0Qgb3BlcmF0aW9ucyBhcmUgdXNlZCB3aGVuZXZlciBwb3NzaWJsZSwgYnV0IHRoZSB0YXJnZXQgbWF5IGV4ZWN1dGUKKyAgdGhlbSBvdXQgb2Ygb3JkZXIuIFRoZSBvcGVyYXRpb25zIHRoYXQgY29uY2VybiB1cyBhcmUgY3JlYXRlLCBkZWxldGUsCisgIHJlYWRwYWdlLCB3cml0ZXBhZ2UsIHVwZGF0ZV9pbm9kZSwgYW5kIHRydW5jYXRlLiBUaGUgZm9sbG93aW5nIHBhaXJzIG9mCisgIG9wZXJhdGlvbnMgc2hvdWxkIGV4ZWN1dGUgaW4gdGhlIG9yZGVyIHdyaXR0ZW4sIGFuZCB3ZSBuZWVkIHRvIHByZXZlbnQgdGhlbQorICBmcm9tIGV4ZWN1dGluZyBpbiByZXZlcnNlIG9yZGVyOgorCS0gVGhlIGZvbGxvd2luZyBhcmUgaGFuZGxlZCB3aXRoIHRoZSBPQkpfQ1JFQVRFRCBhbmQgT0JKXzJCQ1JFQVRFRAorCSAgZmxhZ3MuIE9CSl9DUkVBVEVEIGlzIHNldCB3aGVuIHdlIGtub3cgdGhlIG9iamVjdCBleGlzdHMgb24gdGhlIE9TRCAtCisJICBpbiBjcmVhdGUncyBjYWxsYmFjayBmdW5jdGlvbiwgYW5kIHdoZW4gd2Ugc3VjY2Vzc2Z1bGx5IGRvIGEgcmVhZF9pbm9kZS4KKwkgIE9CSl8yQkNSRUFURUQgaXMgc2V0IGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNyZWF0ZSBmdW5jdGlvbiwgc28gd2UKKwkgIGtub3cgdGhhdCB3ZSBzaG91bGQgd2FpdC4KKwkJLSBjcmVhdGUvZGVsZXRlOiBkZWxldGUgc2hvdWxkIHdhaXQgdW50aWwgdGhlIG9iamVjdCBpcyBjcmVhdGVkCisJCSAgb24gdGhlIE9TRC4KKwkJLSBjcmVhdGUvcmVhZHBhZ2U6IHJlYWRwYWdlIHNob3VsZCBiZSBhYmxlIHRvIHJldHVybiBhIHBhZ2UKKwkJICBmdWxsIG9mIHplcm9lcyBpbiB0aGlzIGNhc2UuIElmIHRoZXJlIHdhcyBhIHdyaXRlIGFscmVhZHkKKwkJICBlbi1yb3V0ZSAoaS5lLiBjcmVhdGUsIHdyaXRlcGFnZSwgcmVhZHBhZ2UpIHRoZW4gdGhlIHBhZ2UKKwkJICB3b3VsZCBiZSBsb2NrZWQsIGFuZCBzbyBpdCB3b3VsZCByZWFsbHkgYmUgdGhlIHNhbWUgYXMKKwkJICBjcmVhdGUvd3JpdGVwYWdlLgorCQktIGNyZWF0ZS93cml0ZXBhZ2U6IGlmIHdyaXRlcGFnZSBpcyBjYWxsZWQgZm9yIGEgc3luYyB3cml0ZSwgaXQKKwkJICBzaG91bGQgd2FpdCB1bnRpbCB0aGUgb2JqZWN0IGlzIGNyZWF0ZWQgb24gdGhlIE9TRC4KKwkJICBPdGhlcndpc2UsIGl0IHNob3VsZCBqdXN0IHJldHVybi4KKwkJLSBjcmVhdGUvdHJ1bmNhdGU6IHRydW5jYXRlIHNob3VsZCB3YWl0IHVudGlsIHRoZSBvYmplY3QgaXMKKwkJICBjcmVhdGVkIG9uIHRoZSBPU0QuCisJCS0gY3JlYXRlL3VwZGF0ZV9pbm9kZTogdXBkYXRlX2lub2RlIHNob3VsZCB3YWl0IHVudGlsIHRoZQorCQkgIG9iamVjdCBpcyBjcmVhdGVkIG9uIHRoZSBPU0QuCisJLSBIYW5kbGVkIGJ5IFZGUyBsb2NrczoKKwkJLSByZWFkcGFnZS9kZWxldGU6IHNob3VsZG4ndCBoYXBwZW4gYmVjYXVzZSBvZiBwYWdlIGxvY2suCisJCS0gd3JpdGVwYWdlL2RlbGV0ZTogc2hvdWxkbid0IGhhcHBlbiBiZWNhdXNlIG9mIHBhZ2UgbG9jay4KKwkJLSByZWFkcGFnZS93cml0ZXBhZ2U6IHNob3VsZG4ndCBoYXBwZW4gYmVjYXVzZSBvZiBwYWdlIGxvY2suCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0xJQ0VOU0UvQ09QWVJJR0hUCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgZXhvZnMgZmlsZSBzeXN0ZW0gaXMgYmFzZWQgb24gZXh0MiB2MC41YiAoZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGludXgga2VybmVsCit2ZXJzaW9uIDIuNi4xMCkuICBBbGwgZmlsZXMgaW5jbHVkZSB0aGUgb3JpZ2luYWwgY29weXJpZ2h0cywgYW5kIHRoZSBsaWNlbnNlCitpcyBHUEwgdmVyc2lvbiAyIChvbmx5IHZlcnNpb24gMiwgYXMgaXMgdHJ1ZSBmb3IgdGhlIExpbnV4IGtlcm5lbCkuICBUaGUKK0xpbnV4IGtlcm5lbCBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIHd3dy5rZXJuZWwub3JnLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKaW5kZXggZTVmMzgzMy4uNTcwZjliZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CkBAIC0xNCw2ICsxNCwxMSBAQAogV2hlbiBtb3VudGluZyBhbiBleHQzIGZpbGVzeXN0ZW0sIHRoZSBmb2xsb3dpbmcgb3B0aW9uIGFyZSBhY2NlcHRlZDoKICgqKSA9PSBkZWZhdWx0CiAKK3JvCQkJTW91bnQgZmlsZXN5c3RlbSByZWFkIG9ubHkuIE5vdGUgdGhhdCBleHQzIHdpbGwgcmVwbGF5CisJCQl0aGUgam91cm5hbCAoYW5kIHRodXMgd3JpdGUgdG8gdGhlIHBhcnRpdGlvbikgZXZlbiB3aGVuCisJCQltb3VudGVkICJyZWFkIG9ubHkiLiBNb3VudCBvcHRpb25zICJybyxub2xvYWQiIGNhbiBiZQorCQkJdXNlZCB0byBwcmV2ZW50IHdyaXRlcyB0byB0aGUgZmlsZXN5c3RlbS4KKwogam91cm5hbD11cGRhdGUJCVVwZGF0ZSB0aGUgZXh0MyBmaWxlIHN5c3RlbSdzIGpvdXJuYWwgdG8gdGhlIGN1cnJlbnQKIAkJCWZvcm1hdC4KIApAQCAtMjcsNyArMzIsOSBAQAogCQkJaWRlbnRpZmllZCB0aHJvdWdoIGl0cyBuZXcgbWFqb3IvbWlub3IgbnVtYmVycyBlbmNvZGVkCiAJCQlpbiBkZXZudW0uCiAKLW5vbG9hZAkJCURvbid0IGxvYWQgdGhlIGpvdXJuYWwgb24gbW91bnRpbmcuCitub2xvYWQJCQlEb24ndCBsb2FkIHRoZSBqb3VybmFsIG9uIG1vdW50aW5nLiBOb3RlIHRoYXQgdGhpcyBmb3JjZXMKKwkJCW1vdW50IG9mIGluY29uc2lzdGVudCBmaWxlc3lzdGVtLCB3aGljaCBjYW4gbGVhZCB0bworCQkJdmFyaW91cyBwcm9ibGVtcy4KIAogZGF0YT1qb3VybmFsCQlBbGwgZGF0YSBhcmUgY29tbWl0dGVkIGludG8gdGhlIGpvdXJuYWwgcHJpb3IgdG8gYmVpbmcKIAkJCXdyaXR0ZW4gaW50byB0aGUgbWFpbiBmaWxlIHN5c3RlbS4KQEAgLTkyLDkgKzk5LDEyIEBACiAKIGRlYnVnCQkJRXh0cmEgZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIHNlbnQgdG8gc3lzbG9nLgogCi1lcnJvcnM9cmVtb3VudC1ybygqKQlSZW1vdW50IHRoZSBmaWxlc3lzdGVtIHJlYWQtb25seSBvbiBhbiBlcnJvci4KK2Vycm9ycz1yZW1vdW50LXJvCVJlbW91bnQgdGhlIGZpbGVzeXN0ZW0gcmVhZC1vbmx5IG9uIGFuIGVycm9yLgogZXJyb3JzPWNvbnRpbnVlCQlLZWVwIGdvaW5nIG9uIGEgZmlsZXN5c3RlbSBlcnJvci4KIGVycm9ycz1wYW5pYwkJUGFuaWMgYW5kIGhhbHQgdGhlIG1hY2hpbmUgaWYgYW4gZXJyb3Igb2NjdXJzLgorCQkJKFRoZXNlIG1vdW50IG9wdGlvbnMgb3ZlcnJpZGUgdGhlIGVycm9ycyBiZWhhdmlvcgorCQkJc3BlY2lmaWVkIGluIHRoZSBzdXBlcmJsb2NrLCB3aGljaCBjYW4gYmUKKwkJCWNvbmZpZ3VyZWQgdXNpbmcgdHVuZTJmcy4pCiAKIGRhdGFfZXJyPWlnbm9yZSgqKQlKdXN0IHByaW50IGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzCiAJCQlpbiBhIGZpbGUgZGF0YSBidWZmZXIgaW4gb3JkZXJlZCBtb2RlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0NC50eHQKaW5kZXggY2VjODI5Yi4uOTc4ODJkZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQ0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CkBAIC04NSw3ICs4NSw3IEBACiAqIGV4dGVudCBmb3JtYXQgbW9yZSByb2J1c3QgaW4gZmFjZSBvZiBvbi1kaXNrIGNvcnJ1cHRpb24gZHVlIHRvIG1hZ2ljcywKICogaW50ZXJuYWwgcmVkdW5kYW5jeSBpbiB0cmVlCiAqIGltcHJvdmVkIGZpbGUgYWxsb2NhdGlvbiAobXVsdGktYmxvY2sgYWxsb2MpCi0qIGZpeCAzMjAwMCBzdWJkaXJlY3RvcnkgbGltaXQKKyogbGlmdCAzMjAwMCBzdWJkaXJlY3RvcnkgbGltaXQgaW1wb3NlZCBieSBpX2xpbmtzX2NvdW50WzFdCiAqIG5zZWMgdGltZXN0YW1wcyBmb3IgbXRpbWUsIGF0aW1lLCBjdGltZSwgY3JlYXRlIHRpbWUKICogaW5vZGUgdmVyc2lvbiBmaWVsZCBvbiBkaXNrIChORlN2NCwgTHVzdHJlKQogKiByZWR1Y2VkIGUyZnNjayB0aW1lIHZpYSB1bmluaXRfYmcgZmVhdHVyZQpAQCAtMTAwLDYgKzEwMCw5IEBACiAqIGVmZmljZW50IG5ldyBvcmRlcmVkIG1vZGUgaW4gSkJEMiBhbmQgZXh0NChhdm9pZCB1c2luZyBidWZmZXIgaGVhZCB0byBmb3JjZQogICB0aGUgb3JkZXJpbmcpCiAKK1sxXSBGaWxlc3lzdGVtcyB3aXRoIGEgYmxvY2sgc2l6ZSBvZiAxayBtYXkgc2VlIGEgbGltaXQgaW1wb3NlZCBieSB0aGUKK2RpcmVjdG9yeSBoYXNoIHRyZWUgaGF2aW5nIGEgbWF4aW11bSBkZXB0aCBvZiB0d28uCisKIDIuMiBDYW5kaWRhdGUgZmVhdHVyZXMgZm9yIGZ1dHVyZSBpbmNsdXNpb24KIAogKiBPbmxpbmUgZGVmcmFnIChwYXRjaGVzIGF2YWlsYWJsZSBidXQgbm90IHdlbGwgdGVzdGVkKQpAQCAtMTgwLDggKzE4Myw4IEBACiAJCQlwZXJmb3JtYW5jZS4KIAogYmFycmllcj08MHwxKCopPglUaGlzIGVuYWJsZXMvZGlzYWJsZXMgdGhlIHVzZSBvZiB3cml0ZSBiYXJyaWVycyBpbgotCQkJdGhlIGpiZCBjb2RlLiAgYmFycmllcj0wIGRpc2FibGVzLCBiYXJyaWVyPTEgZW5hYmxlcy4KLQkJCVRoaXMgYWxzbyByZXF1aXJlcyBhbiBJTyBzdGFjayB3aGljaCBjYW4gc3VwcG9ydAorYmFycmllcigqKQkJdGhlIGpiZCBjb2RlLiAgYmFycmllcj0wIGRpc2FibGVzLCBiYXJyaWVyPTEgZW5hYmxlcy4KK25vYmFycmllcgkJVGhpcyBhbHNvIHJlcXVpcmVzIGFuIElPIHN0YWNrIHdoaWNoIGNhbiBzdXBwb3J0CiAJCQliYXJyaWVycywgYW5kIGlmIGpiZCBnZXRzIGFuIGVycm9yIG9uIGEgYmFycmllcgogCQkJd3JpdGUsIGl0IHdpbGwgZGlzYWJsZSBhZ2FpbiB3aXRoIGEgd2FybmluZy4KIAkJCVdyaXRlIGJhcnJpZXJzIGVuZm9yY2UgcHJvcGVyIG9uLWRpc2sgb3JkZXJpbmcKQEAgLTE4OSw2ICsxOTIsOSBAQAogCQkJc2FmZSB0byB1c2UsIGF0IHNvbWUgcGVyZm9ybWFuY2UgcGVuYWx0eS4gIElmCiAJCQl5b3VyIGRpc2tzIGFyZSBiYXR0ZXJ5LWJhY2tlZCBpbiBvbmUgd2F5IG9yIGFub3RoZXIsCiAJCQlkaXNhYmxpbmcgYmFycmllcnMgbWF5IHNhZmVseSBpbXByb3ZlIHBlcmZvcm1hbmNlLgorCQkJVGhlIG1vdW50IG9wdGlvbnMgImJhcnJpZXIiIGFuZCAibm9iYXJyaWVyIiBjYW4KKwkJCWFsc28gYmUgdXNlZCB0byBlbmFibGUgb3IgZGlzYWJsZSBiYXJyaWVycywgZm9yCisJCQljb25zaXN0ZW5jeSB3aXRoIG90aGVyIGV4dDQgbW91bnQgb3B0aW9ucy4KIAogaW5vZGVfcmVhZGFoZWFkPW4JVGhpcyB0dW5pbmcgcGFyYW1ldGVyIGNvbnRyb2xzIHRoZSBtYXhpbXVtCiAJCQludW1iZXIgb2YgaW5vZGUgdGFibGUgYmxvY2tzIHRoYXQgZXh0NCdzIGlub2RlCkBAIC0zMTAsNiArMzE2LDI0IEBACiAJCQlhIHNsaWdodGx5IGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoZSBkZWZhdWx0IEkvTwogCQkJcHJpb3JpdHkuCiAKK2F1dG9fZGFfYWxsb2MoKikJTWFueSBicm9rZW4gYXBwbGljYXRpb25zIGRvbid0IHVzZSBmc3luYygpIHdoZW4gCitub2F1dG9fZGFfYWxsb2MJCXJlcGxhY2luZyBleGlzdGluZyBmaWxlcyB2aWEgcGF0dGVybnMgc3VjaCBhcworCQkJZmQgPSBvcGVuKCJmb28ubmV3Iikvd3JpdGUoZmQsLi4pL2Nsb3NlKGZkKS8KKwkJCXJlbmFtZSgiZm9vLm5ldyIsICJmb28iKSwgb3Igd29yc2UgeWV0LAorCQkJZmQgPSBvcGVuKCJmb28iLCBPX1RSVU5DKS93cml0ZShmZCwuLikvY2xvc2UoZmQpLgorCQkJSWYgYXV0b19kYV9hbGxvYyBpcyBlbmFibGVkLCBleHQ0IHdpbGwgZGV0ZWN0CisJCQl0aGUgcmVwbGFjZS12aWEtcmVuYW1lIGFuZCByZXBsYWNlLXZpYS10cnVuY2F0ZQorCQkJcGF0dGVybnMgYW5kIGZvcmNlIHRoYXQgYW55IGRlbGF5ZWQgYWxsb2NhdGlvbgorCQkJYmxvY2tzIGFyZSBhbGxvY2F0ZWQgc3VjaCB0aGF0IGF0IHRoZSBuZXh0CisJCQlqb3VybmFsIGNvbW1pdCwgaW4gdGhlIGRlZmF1bHQgZGF0YT1vcmRlcmVkCisJCQltb2RlLCB0aGUgZGF0YSBibG9ja3Mgb2YgdGhlIG5ldyBmaWxlIGFyZSBmb3JjZWQKKwkJCXRvIGRpc2sgYmVmb3JlIHRoZSByZW5hbWUoKSBvcGVyYXRpb24gaXMKKwkJCWNvbW1pdGVkLiAgVGhpcyBwcm92aWRlcyByb3VnaGx5IHRoZSBzYW1lIGxldmVsCisJCQlvZiBndWFyYW50ZWVzIGFzIGV4dDMsIGFuZCBhdm9pZHMgdGhlCisJCQkiemVyby1sZW5ndGgiIHByb2JsZW0gdGhhdCBjYW4gaGFwcGVuIHdoZW4gYQorCQkJc3lzdGVtIGNyYXNoZXMgYmVmb3JlIHRoZSBkZWxheWVkIGFsbG9jYXRpb24KKwkJCWJsb2NrcyBhcmUgZm9yY2VkIHRvIGRpc2suCisKIERhdGEgTW9kZQogPT09PT09PT09CiBUaGVyZSBhcmUgMyBkaWZmZXJlbnQgZGF0YSBtb2RlczoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9obWVsZnMvZGVzaWduX25vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9obWVsZnMvZGVzaWduX25vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDZkYjYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wb2htZWxmcy9kZXNpZ25fbm90ZXMudHh0CkBAIC0wLDAgKzEsNzAgQEAKK1BPSE1FTEZTOiBQYXJhbGxlbCBPcHRpbWl6ZWQgSG9zdCBNZXNzYWdlIEV4Y2hhbmdlIExheWVyZWQgRmlsZSBTeXN0ZW0uCisKKwkJRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorCitIb21lcGFnZTogaHR0cDovL3d3dy5pb3JlbWFwLm5ldC9wcm9qZWN0cy9wb2htZWxmcworCitQT0hNRUxGUyBmaXJzdCBiZWdhbiBhcyBhIG5ldHdvcmsgZmlsZXN5c3RlbSB3aXRoIGNvaGVyZW50IGxvY2FsIGRhdGEgYW5kCittZXRhZGF0YSBjYWNoZXMgYnV0IGlzIG5vdyBldm9sdmluZyBpbnRvIGEgcGFyYWxsZWwgZGlzdHJpYnV0ZWQgZmlsZXN5c3RlbS4KKworTWFpbiBmZWF0dXJlcyBvZiB0aGlzIEZTIGluY2x1ZGU6CisgKiBMb2NhbGx5IGNvaGVyZW50IGNhY2hlIGZvciBkYXRhIGFuZCBtZXRhZGF0YSB3aXRoIChwb3RlbnRpYWxseSkgYnl0ZS1yYW5nZSBsb2Nrcy4KKwlTaW5jZSBhbGwgTGludXggZmlsZXN5c3RlbXMgbG9jayB0aGUgd2hvbGUgaW5vZGUgZHVyaW5nIHdyaXRpbmcsIGFsZ29yaXRobQorCWlzIHZlcnkgc2ltcGxlIGFuZCBkb2VzIG5vdCB1c2UgYnl0ZS1yYW5nZXMsIGFsdGhvdWdoIHRoZXkgYXJlIHNlbnQgaW4KKwlsb2NraW5nIG1lc3NhZ2VzLgorICogQ29tcGxldGVseSBhc3luYyBwcm9jZXNzaW5nIG9mIGFsbCBldmVudHMgZXhjZXB0IGNyZWF0aW9uIG9mIGhhcmQgYW5kIHN5bWJvbGljCisJbGlua3MsIGFuZCByZW5hbWUgZXZlbnRzLgorCU9iamVjdCBjcmVhdGlvbiBhbmQgZGF0YSByZWFkaW5nIGFuZCB3cml0aW5nIGFyZSBwcm9jZXNzZWQgYXN5bmNocm9ub3VzbHkuCisgKiBGbGV4aWJsZSBvYmplY3QgYXJjaGl0ZWN0dXJlIG9wdGltaXplZCBmb3IgbmV0d29yayBwcm9jZXNzaW5nLgorCUFiaWxpdHkgdG8gY3JlYXRlIGxvbmcgcGF0aHMgdG8gb2JqZWN0cyBhbmQgcmVtb3ZlIGFyYml0cmFyaWx5IGh1Z2UKKwlkaXJlY3RvcmllcyB3aXRoIGEgc2luZ2xlIG5ldHdvcmsgY29tbWFuZC4KKwkobGlrZSByZW1vdmluZyB0aGUgd2hvbGUga2VybmVsIHRyZWUgdmlhIGEgc2luZ2xlIG5ldHdvcmsgY29tbWFuZCkuCisgKiBWZXJ5IGhpZ2ggcGVyZm9ybWFuY2UuCisgKiBGYXN0IGFuZCBzY2FsYWJsZSBtdWx0aXRocmVhZGVkIHVzZXJzcGFjZSBzZXJ2ZXIuIEJlaW5nIGluIHVzZXJzcGFjZSBpdCB3b3JrcworCXdpdGggYW55IHVuZGVybHlpbmcgZmlsZXN5c3RlbSBhbmQgc3RpbGwgaXMgbXVjaCBmYXN0ZXIgdGhhbiBhc3luYyBpbi1rZXJuZWwgTkZTIG9uZS4KKyAqIENsaWVudCBpcyBhYmxlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBzZXJ2ZXJzIChpZiBvbmUgZ29lcyBkb3duLCBjbGllbnQKKwlhdXRvbWF0aWNhbGx5IHJlY29ubmVjdHMgdG8gc2Vjb25kIGFuZCBzbyBvbikuCisgKiBUcmFuc2FjdGlvbnMgc3VwcG9ydC4gRnVsbCBmYWlsb3ZlciBmb3IgYWxsIG9wZXJhdGlvbnMuCisJUmVzZW5kaW5nIHRyYW5zYWN0aW9ucyB0byBkaWZmZXJlbnQgc2VydmVycyBvbiB0aW1lb3V0IG9yIGVycm9yLgorICogUmVhZCByZXF1ZXN0IChkYXRhIHJlYWQsIGRpcmVjdG9yeSBsaXN0aW5nLCBsb29rdXAgcmVxdWVzdHMpIGJhbGFuY2luZyBiZXR3ZWVuIG11bHRpcGxlIHNlcnZlcnMuCisgKiBXcml0ZSByZXF1ZXN0cyBhcmUgcmVwbGljYXRlZCB0byBtdWx0aXBsZSBzZXJ2ZXJzIGFuZCBjb21wbGV0ZWQgb25seSB3aGVuIGFsbCBvZiB0aGVtIGFyZSBhY2tlZC4KKyAqIEFiaWxpdHkgdG8gYWRkIGFuZC9vciByZW1vdmUgc2VydmVycyBmcm9tIHRoZSB3b3JraW5nIHNldCBhdCBydW4tdGltZS4KKyAqIFN0cm9uZyBhdXRoZW50aWZpY2F0aW9uIGFuZCBwb3NzaWJsZSBkYXRhIGVuY3J5cHRpb24gaW4gbmV0d29yayBjaGFubmVsLgorICogRXh0ZW5kZWQgYXR0cmlidXRlcyBzdXBwb3J0LgorCitQT0hNRUxGUyBpcyBiYXNlZCBvbiB0cmFuc2FjdGlvbnMsIHdoaWNoIGFyZSBwb3RlbnRpYWxseSBsb25nLXN0YW5kaW5nIG9iamVjdHMgdGhhdCBsaXZlCitpbiB0aGUgY2xpZW50J3MgbWVtb3J5LiBFYWNoIHRyYW5zYWN0aW9uIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHByb2Nlc3MgYSBnaXZlbgorY29tbWFuZCAob3Igc2V0IG9mIGNvbW1hbmRzLCB3aGljaCBpcyBmcmVxdWVudGx5IHVzZWQgZHVyaW5nIGRhdGEgd3JpdGluZzogc2luZ2xlIHRyYW5zYWN0aW9ucworY2FuIGNvbnRhaW4gY3JlYXRpb24gYW5kIGRhdGEgd3JpdGluZyBjb21tYW5kcykuIFRyYW5zYWN0aW9ucyBhcmUgY29tbWl0dGVkIGJ5IGFsbCB0aGUgc2VydmVycwordG8gd2hpY2ggdGhleSBhcmUgc2VudCBhbmQsIGluIGNhc2Ugb2YgZmFpbHVyZXMsIGFyZSBldmVudHVhbGx5IHJlc2VudCBvciBkcm9wcGVkIHdpdGggYW4gZXJyb3IuCitGb3IgZXhhbXBsZSwgcmVhZGluZyB3aWxsIHJldHVybiBhbiBlcnJvciBpZiBubyBzZXJ2ZXJzIGFyZSBhdmFpbGFibGUuCisKK1BPSE1FTEZTIHVzZXMgYSBhc3luY2hyb25vdXMgYXBwcm9hY2ggdG8gZGF0YSBwcm9jZXNzaW5nLiBDb3VydGVzeSBvZiB0cmFuc2FjdGlvbnMsIGl0IGlzCitwb3NzaWJsZSB0byBkZXRhY2ggcmVwbGllcyBmcm9tIHJlcXVlc3RzIGFuZCwgaWYgdGhlIGNvbW1hbmQgcmVxdWlyZXMgZGF0YSB0byBiZSByZWNlaXZlZCwgdGhlCitjYWxsZXIgc2xlZXBzIHdhaXRpbmcgZm9yIGl0LiBUaHVzLCBpdCBpcyBwb3NzaWJsZSB0byBpc3N1ZSBtdWx0aXBsZSByZWFkIGNvbW1hbmRzIHRvIGRpZmZlcmVudAorc2VydmVycyBhbmQgYXN5bmMgdGhyZWFkcyB3aWxsIHBpY2sgdXAgcmVwbGllcyBpbiBwYXJhbGxlbCwgZmluZCBhcHByb3ByaWF0ZSB0cmFuc2FjdGlvbnMgaW4gdGhlCitzeXN0ZW0gYW5kIHB1dCB0aGUgZGF0YSB3aGVyZSBpdCBiZWxvbmdzIChsaWtlIHRoZSBwYWdlIG9yIGlub2RlIGNhY2hlKS4KKworVGhlIG1haW4gZmVhdHVyZSBvZiBQT0hNRUxGUyBpcyB3cml0ZWJhY2sgZGF0YSBhbmQgdGhlIG1ldGFkYXRhIGNhY2hlLgorT25seSBhIGZldyBub24tcGVyZm9ybWFuY2UgY3JpdGljYWwgb3BlcmF0aW9ucyB1c2UgdGhlIHdyaXRlLXRocm91Z2ggY2FjaGUgYW5kCithcmUgc3luY2hyb25vdXM6IGhhcmQgYW5kIHN5bWJvbGljIGxpbmsgY3JlYXRpb24sIGFuZCBvYmplY3QgcmVuYW1lLiBDcmVhdGlvbiwKK3JlbW92YWwgb2Ygb2JqZWN0cyBhbmQgZGF0YSB3cml0aW5nIGFyZSBhc3luY2hyb25vdXMgYW5kIGFyZSBzZW50IHRvCit0aGUgc2VydmVyIGR1cmluZyBzeXN0ZW0gd3JpdGViYWNrLiBPbmx5IG9uZSB3cml0ZXIgYXQgYSB0aW1lIGlzIGFsbG93ZWQgZm9yIGFueQorZ2l2ZW4gaW5vZGUsIHdoaWNoIGlzIGd1YXJkZWQgYnkgYW4gYXBwcm9wcmlhdGUgbG9ja2luZyBwcm90b2NvbC4KK0JlY2F1c2Ugb2YgdGhpcyBmZWF0dXJlLCBQT0hNRUxGUyBpcyBleHRyZW1lbHkgZmFzdCBhdCBtZXRhZGF0YSBpbnRlbnNpdmUKK3dvcmtsb2FkcyBhbmQgY2FuIGZ1bGx5IHV0aWxpemUgdGhlIGJhbmR3aWR0aCB0byB0aGUgc2VydmVycyB3aGVuIGRvaW5nIGJ1bGsKK2RhdGEgdHJhbnNmZXJzLgorCitQT0hNRUxGUyBjbGllbnRzIG9wZXJhdGUgd2l0aCBhIHdvcmtpbmcgc2V0IG9mIHNlcnZlcnMgYW5kIGFyZSBjYXBhYmxlIG9mIGJhbGFuY2luZyByZWFkLW9ubHkKK29wZXJhdGlvbnMgKGxpa2UgbG9va3VwcyBvciBkaXJlY3RvcnkgbGlzdGluZ3MpIGJldHdlZW4gdGhlbS4KK0FkbWluaXN0cmF0b3JzIGNhbiBhZGQgb3IgcmVtb3ZlIHNlcnZlcnMgZnJvbSB0aGUgc2V0IGF0IHJ1bi10aW1lIHZpYSBzcGVjaWFsIGNvbW1hbmRzIChkZXNjcmliZWQKK2luIERvY3VtZW50YXRpb24vcG9obWVsZnMvaW5mby50eHQgZmlsZSkuIFdyaXRlcyBhcmUgcmVwbGljYXRlZCB0byBhbGwgc2VydmVycy4KKworUE9ITUVMRlMgaXMgY2FwYWJsZSBvZiBmdWxsIGRhdGEgY2hhbm5lbCBlbmNyeXB0aW9uIGFuZC9vciBzdHJvbmcgY3J5cHRvIGhhc2hpbmcuCitPbmUgY2FuIHNlbGVjdCBhbnkga2VybmVsIHN1cHBvcnRlZCBjaXBoZXIsIGVuY3J5cHRpb24gbW9kZSwgaGFzaCB0eXBlIGFuZCBvcGVyYXRpb24gbW9kZQorKGhtYWMgb3IgZGlnZXN0KS4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgYm90aCBvciBuZWl0aGVyIChkZWZhdWx0KS4gQ3J5cHRvIGNvbmZpZ3VyYXRpb24KK2lzIGNoZWNrZWQgZHVyaW5nIG1vdW50IHRpbWUgYW5kLCBpZiB0aGUgc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgaXQsIGFwcHJvcHJpYXRlIGNhcGFiaWxpdGllcword2lsbCBiZSBkaXNhYmxlZCBvciBtb3VudCB3aWxsIGZhaWwgKGlmICdjcnlwdG9fZmFpbF91bnN1cHBvcnRlZCcgbW91bnQgb3B0aW9uIGlzIHNwZWNpZmllZCkuCitDcnlwdG8gcGVyZm9ybWFuY2UgaGVhdmlseSBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgY3J5cHRvIHRocmVhZHMsIHdoaWNoIGFzeW5jaHJvbm91c2x5IHBlcmZvcm0KK2NyeXB0byBvcGVyYXRpb25zIGFuZCBzZW5kIHRoZSByZXN1bHRpbmcgZGF0YSB0byBzZXJ2ZXIgb3Igc3VibWl0IGl0IHVwIHRoZSBzdGFjay4gVGhpcyBudW1iZXIKK2NhbiBiZSBjb250cm9sbGVkIHZpYSBhIG1vdW50IG9wdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9obWVsZnMvaW5mby50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvaG1lbGZzL2luZm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlM2Q1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvaG1lbGZzL2luZm8udHh0CkBAIC0wLDAgKzEsODYgQEAKK1BPSE1FTEZTIHVzYWdlIGluZm9ybWF0aW9uLgorCitNb3VudCBvcHRpb25zOgoraWR4PSV1CisgRWFjaCBtb3VudHBvaW50IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpYWwgaW5kZXggdmlhIHRoaXMgb3B0aW9uLgorIEFkbWluaXN0cmF0b3IgY2FuIGFkZCBvciByZW1vdmUgc2VydmVycyBmcm9tIHRoZSBnaXZlbiBpbmRleCwgc28gYWxsIG1vdW50cywKKyB3aGljaCB3ZXJlIGF0dGFjaGVkIHRvIGl0LCBhcmUgdXBkYXRlZC4KKyBEZWZhdWx0IGl0IGlzIDAuCisKK3RyYW5zX3NjYW5fdGltZW91dD0ldQorIFRoaXMgdGltZW91dCwgZXhwcmVzc2VkIGluIG1pbGxpc2Vjb25kcywgc3BlY2lmaWVzIHRpbWUgdG8gc2NhbiB0cmFuc2FjdGlvbgorIHRyZWVzIGxvb2tpbmcgZm9yIHN0YWxlIHJlcXVlc3RzLCB3aGljaCBoYXZlIHRvIGJlIHJlc2VudCwgb3IgaWYgbnVtYmVyIG9mCisgcmV0cmllcyBleGNlZWQgc3BlY2lmaWVkIGxpbWl0LCBkcm9wcGVkIHdpdGggZXJyb3IuCisgRGVmYXVsdCBpcyA1IHNlY29uZHMuCisKK2Ryb3Bfc2Nhbl90aW1lb3V0PSV1CisgSW50ZXJuYWwgdGltZW91dCwgZXhwcmVzc2VkIGluIG1pbGxpc2Vjb25kcywgd2hpY2ggc3BlY2lmaWVzIGhvdyBmcmVxdWVudGx5CisgaW5vZGVzIG1hcmtlZCB0byBiZSBkcm9wcGVkIGFyZSBmcmVlZC4gSXQgYWxzbyBzcGVjaWZpZXMgaG93IGZyZXF1ZW50bHkKKyB0aGUgc3lzdGVtIGNoZWNrcyB0aGF0IHNlcnZlcnMgaGF2ZSB0byBiZSBhZGRlZCBvciByZW1vdmVkIGZyb20gY3VycmVudCB3b3JraW5nIHNldC4KKyBEZWZhdWx0IGlzIDEgc2Vjb25kLgorCit3YWl0X29uX3BhZ2VfdGltZW91dD0ldQorIE51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCBmb3IgcmVwbHkgZnJvbSByZW1vdGUgc2VydmVyIGZvciBkYXRhIHJlYWRpbmcgY29tbWFuZC4KKyBJZiB0aGlzIHRpbWVvdXQgaXMgZXhjZWVkZWQsIHJlYWRpbmcgcmV0dXJucyBhbiBlcnJvci4KKyBEZWZhdWx0IGlzIDUgc2Vjb25kcy4KKwordHJhbnNfcmV0cmllcz0ldQorIFRoaXMgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IGEgdHJhbnNhY3Rpb24gd2lsbCBiZSByZXNlbnQgdG8gYSBzZXJ2ZXIgdGhhdCBkaWQKKyBub3QgYW5zd2VyIGZvciB0aGUgbGFzdCBAdHJhbnNfc2Nhbl90aW1lb3V0IG1pbGxpc2Vjb25kcy4KKyBXaGVuIHRoZSBudW1iZXIgb2YgcmVzZW5kcyBleGNlZWRzIHRoaXMgbGltaXQsIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQgd2l0aCBlcnJvci4KKyBEZWZhdWx0IGlzIDUgcmVzZW5kcy4KKworY3J5cHRvX3RocmVhZF9udW09JXUKKyBOdW1iZXIgb2YgY3J5cHRvIHByb2Nlc3NpbmcgdGhyZWFkcy4gVGhyZWFkcyBhcmUgdXNlZCBib3RoIGZvciBSWCBhbmQgVFggdHJhZmZpYy4KKyBEZWZhdWx0IGlzIDIsIG9yIG5vIHRocmVhZHMgaWYgY3J5cHRvIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuCisKK3RyYW5zX21heF9wYWdlcz0ldQorIE1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLiBUaGlzIHBhcmFtZXRlciBhbHNvIGNvbnRyb2xzCisgdGhlIG51bWJlciBvZiBwYWdlcywgIGFsbG9jYXRlZCBmb3IgY3J5cHRvIHByb2Nlc3NpbmcgKGVhY2ggY3J5cHRvIHRocmVhZCBoYXMKKyBwb29sIG9mIHBhZ2VzLCB0aGUgbnVtYmVyIG9mIHdoaWNoIGlzIGVxdWFsIHRvICd0cmFuc19tYXhfcGFnZXMnLgorIERlZmF1bHQgaXMgMTAwIHBhZ2VzLgorCitjcnlwdG9fZmFpbF91bnN1cHBvcnRlZAorIElmIHNwZWNpZmllZCwgbW91bnQgd2lsbCBmYWlsIGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3VwcG9ydCByZXF1ZXN0ZWQgY3J5cHRvIG9wZXJhdGlvbnMuCisgQnkgZGVmYXVsdCBtb3VudCB3aWxsIGRpc2FibGUgbm9uLW1hdGNoaW5nIGNyeXB0byBvcGVyYXRpb25zLgorCittY2FjaGVfdGltZW91dD0ldQorIE1heGltdW0gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGZvciB0aGUgbWNhY2hlIG9iamVjdHMgdG8gYmUgcHJvY2Vzc2VkLgorIE1jYWNoZSBpbmNsdWRlcyBsb2NrcyAoZ2l2ZW4gbG9jayBzaG91bGQgYmUgZ3JhbnRlZCBieSBzZXJ2ZXIpLCBhdHRyaWJ1dGVzICh0aGV5IHNob3VsZCBiZQorIGZ1bGx5IHJlY2VpdmVkIGluIHRoZSBnaXZlbiB0aW1lZnJhbWUpLgorIERlZmF1bHQgaXMgNSBzZWNvbmRzLgorCitVc2FnZSBleGFtcGxlcy4KKworQWRkIChvciByZW1vdmUgaWYgaXQgYWxyZWFkeSBleGlzdHMpIHNlcnZlciBzZXJ2ZXIxLm5ldDoxMDI1IGludG8gdGhlIHdvcmtpbmcgc2V0IHdpdGggaW5kZXggJGlkeAord2l0aCBhcHByb3ByaWF0ZSBoYXNoIGFsZ29yaXRobSBhbmQga2V5IGZpbGUgYW5kIGNpcGhlciBhbGdvcml0aG0sIG1vZGUgYW5kIGtleSBmaWxlOgorJGNmZyAtYSBzZXJ2ZXIxLm5ldCAtcCAxMDI1IC1pICRpZHggLUsgJGhhc2hfa2V5IC1rICRjaXBoZXJfa2V5CisKK01vdW50IGZpbGVzeXN0ZW0gd2l0aCBnaXZlbiBpbmRleCAkaWR4IHRvIC9tbnQgbW91bnRwb2ludC4KK0NsaWVudCB3aWxsIGNvbm5lY3QgdG8gYWxsIHNlcnZlcnMgc3BlY2lmaWVkIGluIHRoZSB3b3JraW5nIHNldCB2aWEgcHJldmlvdXMgY29tbWFuZDoKK21vdW50IC10IHBvaG1lbCAtbyBpZHg9JGlkeCBxIC9tbnQKKworT25lIGNhbiBhZGQgb3IgcmVtb3ZlIHNlcnZlcnMgZnJvbSB3b3JraW5nIHNldCBhZnRlciBtb3VudGluZyB0b28uCisKKworU2VydmVyIGluc3RhbGxhdGlvbi4KKworQ3JlYXRpbmcgYSBzZXJ2ZXIsIHdoaWNoIGxpc3RlbnMgYXQgcG9ydCAxMDI1IGFuZCAwLjAuMC4wIGFkZHJlc3MuCitXb3JraW5nIHJvb3QgZGlyZWN0b3J5IChub3RlLCB0aGF0IHNlcnZlciBjaHJvb3RzIHRoZXJlLCBzbyB5b3UgaGF2ZSB0byBoYXZlIGFwcHJvcHJpYXRlIHBlcm1pc3Npb25zKQoraXMgc2V0IHRvIC9tbnQsIHNlcnZlciB3aWxsIG5lZ290aWF0ZSBoYXNoL2NpcGhlciB3aXRoIGNsaWVudCwgaW4gY2FzZSBjbGllbnQgcmVxdWVzdGVkIGl0LCB0aGVyZQorYXJlIGFwcHJvcHJpYXRlIGtleSBmaWxlcy4KK051bWJlciBvZiB3b3JraW5nIHRocmVhZHMgaXMgc2V0IHRvIDEwLgorCisjIC4vZnNlcnZlciAtYSAwLjAuMC4wIC1wIDEwMjUgLXIgL21udCAtdyAxMCAtSyBoYXNoX2tleSAtayBjaXBoZXJfa2V5CisKKyAtQSA2CQkJIC0gbGlzdGVuIG9uIGlwdjYgYWRkcmVzcy4gRGVmYXVsdDogRGlzYWJsZWQuCisgLXIgcm9vdCAgICAgICAgICAgICAgICAgLSBwYXRoIHRvIHJvb3QgZGlyZWN0b3J5LiBEZWZhdWx0OiAvdG1wLgorIC1hIGFkZHIgICAgICAgICAgICAgICAgIC0gbGlzdGVuIGFkZHJlc3MuIERlZmF1bHQ6IDAuMC4wLjAuCisgLXAgcG9ydCAgICAgICAgICAgICAgICAgLSBsaXN0ZW4gcG9ydC4gRGVmYXVsdDogMTAyNS4KKyAtdyB3b3JrZXJzICAgICAgICAgICAgICAtIG51bWJlciBvZiB3b3JrZXJzIHBlciBjb25uZWN0ZWQgY2xpZW50LiBEZWZhdWx0OiAxLgorIC1LIGZpbGUJCSAtIGhhc2gga2V5IHNpemUuIERlZmF1bHQ6IG5vbmUuCisgLWsgZmlsZQkJIC0gY2lwaGVyIGtleSBzaXplLiBEZWZhdWx0OiBub25lLgorIC1oICAgICAgICAgICAgICAgICAgICAgIC0gdGhpcyBoZWxwLgorCitOdW1iZXIgb2Ygd29ya2VyIHRocmVhZHMgc3BlY2lmaWVzIGhvdyBtYW55IHdvcmtlcnMgd2lsbCBiZSBjcmVhdGVkIGZvciBlYWNoIGNsaWVudC4KK0J1bGsgc2luZ2xlLWNsaWVudCB0cmFuc2FmZXJzIHVzdWFsbHkgYXJlIGJldHRlciBoYW5kbGVkIHdpdGggc21hbGxlciBudW1iZXIgKGxpa2UgMS0zKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcG9obWVsZnMvbmV0d29ya19wcm90b2NvbC50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvaG1lbGZzL25ldHdvcmtfcHJvdG9jb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZWE2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3BvaG1lbGZzL25ldHdvcmtfcHJvdG9jb2wudHh0CkBAIC0wLDAgKzEsMjI3IEBACitQT0hNRUxGUyBuZXR3b3JrIHByb3RvY29sLgorCitCYXNpYyBzdHJ1Y3R1cmUgdXNlZCBpbiBuZXR3b3JrIGNvbW11bmljYXRpb24gaXMgZm9sbG93aW5nIGNvbW1hbmQ6CisKK3N0cnVjdCBuZXRmc19jbWQKK3sKKwlfX3UxNgkJCWNtZDsJLyogQ29tbWFuZCBudW1iZXIgKi8KKwlfX3UxNgkJCWNzaXplOwkvKiBBdHRhY2hlZCBjcnlwdG8gaW5mb3JtYXRpb24gc2l6ZSAqLworCV9fdTE2CQkJY3BhZDsJLyogQXR0YWNoZWQgcGFkZGluZyBzaXplICovCisJX191MTYJCQlleHQ7CS8qIEV4dGVybmFsIGZsYWdzICovCisJX191MzIJCQlzaXplOwkvKiBTaXplIG9mIHRoZSBhdHRhY2hlZCBkYXRhICovCisJX191MzIJCQl0cmFuczsJLyogVHJhbnNhY3Rpb24gaWQgKi8KKwlfX3U2NAkJCWlkOwkvKiBPYmplY3QgSUQgdG8gb3BlcmF0ZSBvbi4gVXNlZCBmb3IgZmVlZGJhY2suKi8KKwlfX3U2NAkJCXN0YXJ0OwkvKiBTdGFydCBvZiB0aGUgb2JqZWN0LiAqLworCV9fdTY0CQkJaXY7CS8qIElWIHNlcXVlbmNlICovCisJX191OAkJCWRhdGFbMF07Cit9OworCitDb21tYW5kcyBjYW4gYmUgZW1iZWRkZWQgaW50byB0cmFuc2FjdGlvbiBjb21tYW5kICh3aGljaCBpbiB0dXJuIGhhcyBvd24gY29tbWFuZCksCitzbyBvbmUgY2FuIGV4dGVuZCBwcm90b2NvbCBhcyBuZWVkZWQgd2l0aG91dCBicmVha2luZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIGxvbmcKK2FzIG9sZCBjb21tYW5kcyBhcmUgc3VwcG9ydGVkLiBBbGwgc3RyaW5nIGxlbmd0aHMgaW5jbHVkZSB0YWlsIDAgYnl0ZS4KKworQWxsIGNvbW1hbnMgYXJlIHRyYW5zZmVyZWQgb3ZlciB0aGUgbmV0d29yayBpbiBiaWctZW5kaWFuLiBDUFUgZW5kaWFuZXNzIGlzIHVzZWQgYXQgdGhlIGVuZCBwZWVycy4KKworQGNtZCAtIGNvbW1hbmQgbnVtYmVyLCB3aGljaCBzcGVjaWZpZXMgY29tbWFuZCB0byBiZSBwcm9jZXNzZWQuIEZvbGxvd2luZworCWNvbW1hbmRzIGFyZSB1c2VkIGN1cnJlbnRseToKKworCU5FVEZTX1JFQURESVIJPSAxLAkvKiBSZWFkIGRpcmVjdG9yeSBmb3IgZ2l2ZW4gaW5vZGUgbnVtYmVyICovCisJTkVURlNfUkVBRF9QQUdFLAkvKiBSZWFkIGRhdGEgcGFnZSBmcm9tIHRoZSBzZXJ2ZXIgKi8KKwlORVRGU19XUklURV9QQUdFLAkvKiBXcml0ZSBkYXRhIHBhZ2UgdG8gdGhlIHNlcnZlciAqLworCU5FVEZTX0NSRUFURSwJCS8qIENyZWF0ZSBkaXJlY3RvcnkgZW50cnkgKi8KKwlORVRGU19SRU1PVkUsCQkvKiBSZW1vdmUgZGlyZWN0b3J5IGVudHJ5ICovCisJTkVURlNfTE9PS1VQLAkJLyogTG9va3VwIHNpbmdsZSBvYmplY3QgKi8KKwlORVRGU19MSU5LLAkJLyogQ3JlYXRlIGEgbGluayAqLworCU5FVEZTX1RSQU5TLAkJLyogVHJhbnNhY3Rpb24gKi8KKwlORVRGU19PUEVOLAkJLyogT3BlbiBpbnRlbnQgKi8KKwlORVRGU19JTk9ERV9JTkZPLAkvKiBNZXRhZGF0YSBjYWNoZSBjb2hlcmVuY3kgc3luY2hyb25pemF0aW9uIG1lc3NhZ2UgKi8KKwlORVRGU19QQUdFX0NBQ0hFLAkvKiBQYWdlIGNhY2hlIGludmFsaWRhdGlvbiBtZXNzYWdlICovCisJTkVURlNfUkVBRF9QQUdFUywJLyogUmVhZCBtdWx0aXBsZSBjb250aWd1b3VzIHBhZ2VzIGluIG9uZSBnbyAqLworCU5FVEZTX1JFTkFNRSwJCS8qIFJlbmFtZSBvYmplY3QgKi8KKwlORVRGU19DQVBBQklMSVRJRVMsCS8qIENhcGFiaWxpdGllcyBvZiB0aGUgY2xpZW50LCBmb3IgZXhhbXBsZSBzdXBwb3J0ZWQgY3J5cHRvICovCisJTkVURlNfTE9DSywJCS8qIERpc3RyaWJ1dGVkIGxvY2sgbWVzc2FnZSAqLworCU5FVEZTX1hBVFRSX1NFVCwJLyogU2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSAqLworCU5FVEZTX1hBVFRSX0dFVCwJLyogR2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSAqLworCitAZXh0IC0gZXh0ZXJuYWwgZmxhZ3MuIFVzZWQgYnkgZGlmZmVyZW50IGNvbW1hbmRzIHRvIHNwZWNpZnkgc29tZSBleHRyYSBhcmd1bWVudHMKKwlsaWtlIHBhcnRpYWwgc2l6ZSBvZiB0aGUgZW1iZWRkZWQgb2JqZWN0cyBvciBjcmVhdGlvbiBmbGFncy4KKworQHNpemUgLSBzaXplIG9mIHRoZSBhdHRhY2hlZCBkYXRhLiBGb3IgTkVURlNfUkVBRF9QQUdFIGFuZCBORVRGU19SRUFEX1BBR0VTIG5vIGRhdGEgaXMgYXR0YWNoZWQsCisJYnV0IHNpemUgb2YgdGhlIHJlcXVlc3RlZCBkYXRhIGlzIGluY29ycG9yYXRlZCBoZXJlLiBJdCBkb2VzIG5vdCBpbmNsdWRlIHNpemUgb2YgdGhlIGNvbW1hbmQKKwloZWFkZXIgKHN0cnVjdCBuZXRmc19jbWQpIGl0c2VsZi4KKworQGlkIC0gaWQgb2YgdGhlIG9iamVjdCB0aGlzIGNvbW1hbmQgb3BlcmF0ZXMgb24uIEVhY2ggY29tbWFuZCBjYW4gdXNlIGl0IGZvciBvd24gcHVycG9zZS4KKworQHN0YXJ0IC0gc3RhcnQgb2YgdGhlIG9iamVjdCB0aGlzIGNvbW1hbmQgb3BlcmF0ZXMgb24uIEVhY2ggY29tbWFuZCBjYW4gdXNlIGl0IGZvciBvd24gcHVycG9zZS4KKworQGNzaXplLCBAY3BhZCAtIHNpemUgYW5kIHBhZGRpbmcgc2l6ZSBvZiB0aGUgKGF0dGFjaGVkIGlmIG5lZWRlZCkgY3J5cHRvIGluZm9ybWF0aW9uLgorCitDb21tYW5kIHNwZWNpZmljYXRpb25zLgorCitATkVURlNfUkVBRERJUgorVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gc3luYyBjb250ZW50IG9mIHRoZSByZW1vdGUgZGlyIHRvIHRoZSBjbGllbnQuCisKK0BleHQgLSBsZW5ndGggb2YgdGhlIHBhdGggdG8gb2JqZWN0LgorQHNpemUgLSB0aGUgc2FtZS4KK0BpZCAtIGxvY2FsIGlub2RlIG51bWJlciBvZiB0aGUgZGlyZWN0b3J5IHRvIHJlYWQuCitAc3RhcnQgLSB6ZXJvLgorCisKK0BORVRGU19SRUFEX1BBR0UKK1RoaXMgY29tbWFuZCBpcyB1c2VkIHRvIHJlYWQgZGF0YSBmcm9tIHJlbW90ZSBzZXJ2ZXIuCitEYXRhIHNpemUgZG9lcyBub3QgZXhjZWVkIGxvY2FsIHBhZ2UgY2FjaGUgc2l6ZS4KKworQGlkIC0gaW5vZGUgbnVtYmVyLgorQHN0YXJ0IC0gZmlyc3QgYnl0ZSBvZmZzZXQuCitAc2l6ZSAtIG51bWJlciBvZiBieXRlcyB0byByZWFkIHBsdXMgbGVuZ3RoIG9mIHRoZSBwYXRoIHRvIG9iamVjdC4KK0BleHQgLSBvYmplY3QgcGF0aCBsZW5ndGguCisKKworQE5FVEZTX0NSRUFURQorVXNlZCB0byBjcmVhdGUgb2JqZWN0LgorSXQgZG9lcyBub3QgcmVxdWlyZSB0aGF0IGFsbCBkaXJlY3RvcmllcyBvbiB0b3Agb2YgdGhlIG9iamVjdCB3ZXJlCithbHJlYWR5IGNyZWF0ZWQsIGl0IHdpbGwgY3JlYXRlIHRoZW0gYXV0b21hdGljYWxseS4gRWFjaCBvYmplY3QgaGFzCithc3NvY2lhdGVkIEBuZXRmc19wYXRoX2VudHJ5IGRhdGEgc3RydWN0dXJlLCB3aGljaCBjb250YWlucyBjcmVhdGlvbgorbW9kZSAocGVybWlzc2lvbnMgYW5kIHR5cGUpIGFuZCBsZW5ndGggb2YgdGhlIG5hbWUgYXMgbG9uZyBhcyBuYW1lIGl0c2VsZi4KKworQHN0YXJ0IC0gMAorQHNpemUgLSBzaXplIG9mIHRoZSBhbGwgZGF0YSBzdHJ1Y3R1cmVzIG5lZWRlZCB0byBjcmVhdGUgYSBwYXRoCitAaWQgLSBsb2NhbCBpbm9kZSBudW1iZXIKK0BleHQgLSAwCisKKworQE5FVEZTX1JFTU9WRQorVXNlZCB0byByZW1vdmUgb2JqZWN0LgorCitAZXh0IC0gbGVuZ3RoIG9mIHRoZSBwYXRoIHRvIG9iamVjdC4KK0BzaXplIC0gdGhlIHNhbWUuCitAaWQgLSBsb2NhbCBpbm9kZSBudW1iZXIuCitAc3RhcnQgLSB6ZXJvLgorCisKK0BORVRGU19MT09LVVAKK0xvb2t1cCBpbmZvcm1hdGlvbiBhYm91dCBvYmplY3Qgb24gc2VydmVyLgorCitAZXh0IC0gbGVuZ3RoIG9mIHRoZSBwYXRoIHRvIG9iamVjdC4KK0BzaXplIC0gdGhlIHNhbWUuCitAaWQgLSBsb2NhbCBpbm9kZSBudW1iZXIgb2YgdGhlIGRpcmVjdG9yeSB0byBsb29rIG9iamVjdCBpbi4KK0BzdGFydCAtIGxvY2FsIGlub2RlIG51bWJlciBvZiB0aGUgb2JqZWN0IHRvIGxvb2sgYXQuCisKKworQE5FVEZTX0xJTksKK0NyZWF0ZSBoYXJkIG9mIHN5bWxpbmsuCitDb21tYW5kIGlzIHNlbnQgYXMgIm9iamVjdF9wYXRofHRhcmdldF9wYXRoIi4KKworQHNpemUgLSBzaXplIG9mIHRoZSBhYm92ZSBzdHJpbmcuCitAaWQgLSBwYXJlbnQgbG9jYWwgaW5vZGUgbnVtYmVyLgorQHN0YXJ0IC0gMSBmb3Igc3ltbGluaywgMCBmb3IgaGFyZGxpbmsuCitAZXh0IC0gc2l6ZSBvZiB0aGUgIm9iamVjdF9wYXRoIiBhYm92ZS4KKworCitATkVURlNfVFJBTlMKK1RyYW5zYWN0aW9uIGhlYWRlci4KKworQHNpemUgLSBpbmNvcnBvcmF0ZXMgYWxsIGVtYmVkZGVkIGNvbW1hbmQgc2l6ZXMgaW5jbHVkaW5nIHRoZWlycyBoZWFkZXIgc2l6ZXMuCitAc3RhcnQgLSB0cmFuc2FjdGlvbiBnZW5lcmF0aW9uIG51bWJlciAtIHVuaXF1ZSBpZCB1c2VkIHRvIGZpbmQgdHJhbnNhY3Rpb24uCitAZXh0IC0gdHJhbnNhY3Rpb24gZmxhZ3MuIFVudXNlZCBhdCB0aGUgbW9tZW50LgorQGlkIC0gMC4KKworCitATkVURlNfT1BFTgorT3BlbiBpbnRlbnQgZm9yIGdpdmVuIHRyYW5zYWN0aW9uLgorCitAaWQgLSBsb2NhbCBpbm9kZSBudW1iZXIuCitAc3RhcnQgLSAwLgorQHNpemUgLSBwYXRoIGxlbmd0aCB0byB0aGUgb2JqZWN0LgorQGV4dCAtIG9wZW4gZmxhZ3MgKE9fUkRXUiBhbmQgc28gb24pLgorCisKK0BORVRGU19JTk9ERV9JTkZPCitNZXRhZGF0YSB1cGRhdGUgY29tbWFuZC4KK0l0IGlzIHNlbnQgdG8gc2VydmVycyB3aGVuIGF0dHJpYnV0ZXMgb2YgdGhlIG9iamVjdCBhcmUgY2hhbmdlZCBhbmQgcmVjZWl2ZWQKK3doZW4gZGF0YSBvciBtZXRhZGF0YSB3ZXJlIHVwZGF0ZWQuIEl0IG9wZXJhdGVzIHdpdGggdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CisKK3N0cnVjdCBuZXRmc19pbm9kZV9pbmZvCit7CisJdW5zaWduZWQgaW50CQltb2RlOworCXVuc2lnbmVkIGludAkJbmxpbms7CisJdW5zaWduZWQgaW50CQl1aWQ7CisJdW5zaWduZWQgaW50CQlnaWQ7CisJdW5zaWduZWQgaW50CQlibG9ja3NpemU7CisJdW5zaWduZWQgaW50CQlwYWRkaW5nOworCV9fdTY0CQkJaW5vOworCV9fdTY0CQkJYmxvY2tzOworCV9fdTY0CQkJcmRldjsKKwlfX3U2NAkJCXNpemU7CisJX191NjQJCQl2ZXJzaW9uOworfTsKKworSXQgZWZmZWN0aXZlbHkgbWlycm9ycyBzdGF0KDIpIHJldHVybmVkIGRhdGEuCisKKworQGV4dCAtIHBhdGggbGVuZ3RoIHRvIHRoZSBvYmplY3QuCitAc2l6ZSAtIHRoZSBzYW1lIHBsdXMgc2l6ZSBvZiB0aGUgbmV0ZnNfaW5vZGVfaW5mbyBzdHJ1Y3R1cmUuCitAaWQgLSBsb2NhbCBpbm9kZSBudW1iZXIuCitAc3RhcnQgLSAwLgorCisKK0BORVRGU19QQUdFX0NBQ0hFCitDb21tYW5kIGlzIG9ubHkgcmVjZWl2ZWQgYnkgY2xpZW50cy4gSXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQKK3BhZ2UgdG8gYmUgbWFya2VkIGFzIG5vdCB1cC10by1kYXRlLgorCitAaWQgLSBjbGllbnQncyBpbm9kZSBudW1iZXIuCitAc3RhcnQgLSBsYXN0IGJ5dGUgb2YgdGhlIHBhZ2UgdG8gYmUgaW52YWxpZGF0ZWQuIElmIGl0IGlzIG5vdCBlcXVhbCB0bworCWN1cnJlbnQgaW5vZGUgc2l6ZSwgaXQgd2lsbCBiZSB2bXRydW5jYXRlZCgpLgorQHNpemUgLSAwCitAZXh0IC0gMAorCisKK0BORVRGU19SRUFEX1BBR0VTCitVc2VkIHRvIHJlYWQgbXVsdGlwbGUgY29udGlndW91cyBwYWdlcyBpbiBvbmUgZ28uCisKK0BzdGFydCAtIGZpcnN0IGJ5dGUgb2YgdGhlIGNvbnRpZ3VvdXMgcmVnaW9uIHRvIHJlYWQuCitAc2l6ZSAtIGNvbnRhaW5zIG9mIHR3byBmaWVsZHM6IGxvd2VyIDggYml0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgcGFnZSBjYWNoZSBzaGlmdAorCXVzZWQgYnkgY2xpZW50LCBhbm90aGVyIDMgYnl0ZXMgYXJlIHVzZWQgdG8gZ2V0IG51bWJlciBvZiBwYWdlcy4KK0BpZCAtIGxvY2FsIGlub2RlIG51bWJlci4KK0BleHQgLSBwYXRoIGxlbmd0aCB0byB0aGUgb2JqZWN0LgorCisKK0BORVRGU19SRU5BTUUKK1VzZWQgdG8gcmVuYW1lIG9iamVjdC4KK0F0dGFjaGVkIGRhdGEgaXMgZm9ybWVkIGludG8gZm9sbG93aW5nIHN0cmluZzogIm9sZF9wYXRofG5ld19wYXRoIi4KKworQGlkIC0gbG9jYWwgaW5vZGUgbnVtYmVyLgorQHN0YXJ0IC0gcGFyZW50IGlub2RlIG51bWJlci4KK0BzaXplIC0gbGVuZ3RoIG9mIHRoZSBhYm92ZSBzdHJpbmcuCitAZXh0IC0gbGVuZ3RoIG9mIHRoZSBvbGQgcGF0aCBwYXJ0LgorCisKK0BORVRGU19DQVBBQklMSVRJRVMKK1VzZWQgdG8gZXhjaGFuZ2UgY3J5cHRvIGNhcGFiaWxpdGllcyB3aXRoIHNlcnZlci4KK0lmIGNyeXB0byBjYXBhYmlsaXRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyLCB0aGVuIGNsaWVudCB3aWxsIGRpc2FibGUgaXQKK29yIGZhaWwgKGlmICdjcnlwdG9fZmFpbF91bnN1cHBvcnRlZCcgbW91bnQgb3B0aW9ucyB3YXMgc3BlY2lmaWVkKS4KKworQGlkIC0gc3VwZXJibG9jayBpbmRleC4gVXNlZCB0byBzcGVjaWZ5IGNyeXB0byBpbmZvcm1hdGlvbiBmb3IgZ3JvdXAgb2Ygc2VydmVycy4KK0BzaXplIC0gc2l6ZSBvZiB0aGUgYXR0YWNoZWQgY2FwYWJpbGl0aWVzIHN0cnVjdHVyZS4KK0BzdGFydCAtIDAuCitAc2l6ZSAtIDAuCitAc2NzaXplIC0gMC4KKworQE5FVEZTX0xPQ0sKK1VzZWQgdG8gc2VuZCBsb2NrIHJlcXVlc3QvcmVsZWFzZSBtZXNzYWdlcy4gQWx0aG91Z2ggaXQgc2VuZHMgYnl0ZSByYW5nZSByZXF1ZXN0CithbmQgaXMgY2FwYWJsZSBvZiBmbHVzaGluZyBwYWdlcyBiYXNlZCBvbiB0aGF0LCBpdCBpcyBub3QgdXNlZCwgc2luY2UgYWxsIExpbnV4CitmaWxlc3lzdGVtcyBsb2NrIHRoZSB3aG9sZSBpbm9kZS4KKworQGlkIC0gbG9jayBnZW5lcmF0aW9uIG51bWJlci4KK0BzdGFydCAtIHN0YXJ0IG9mIHRoZSBsb2NrZWQgcmFuZ2UuCitAc2l6ZSAtIHNpemUgb2YgdGhlIGxvY2tlZCByYW5nZS4KK0BleHQgLSBsb2NrIHR5cGU6IHJlYWQvd3JpdGUuIE5vdCB1c2VkIGFjdHVhbGx5LiAxNSd0aCBiaXQgaXMgdXNlZCB0byBkZXRlcm1pbmUsCisJaWYgaXQgaXMgbG9jayByZXF1ZXN0ICgxKSBvciByZWxlYXNlICgwKS4KKworQE5FVEZTX1hBVFRSX1NFVAorQE5FVEZTX1hBVFRSX0dFVAorVXNlZCB0byBzZXQvZ2V0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgZm9yIGdpdmVuIGlub2RlLgorQGlkIC0gYXR0cmlidXRlIGdlbmVyYXRpb24gbnVtYmVyIG9yIHhhdHRyIHNldHRpbmcgdHlwZQorQHN0YXJ0IC0gc2l6ZSBvZiB0aGUgYXR0cmlidXRlIChyZXF1ZXN0IG9yIGF0dGFjaGVkKQorQHNpemUgLSBuYW1lIGxlbmd0aCwgcGF0aCBsZW4gYW5kIGRhdGEgc2l6ZSBmb3IgZ2l2ZW4gYXR0cmlidXRlCitAZXh0IC0gcGF0aCBsZW5ndGggZm9yIGdpdmVuIG9iamVjdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKaW5kZXggODMwYmFkNy4uY2U4NGNmYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CkBAIC01LDYgKzUsNyBAQAogICAgICAgICAgICAgICAgICAgQm9kbyBCYXVlciA8YmJAcmljb2NoZXQubmV0PgogCiAyLjQueCB1cGRhdGUJICBKb3JnZSBOZXJpbiA8Y29tYW5kYW50ZUB6YXJhbGludXguY29tPiAgICAgIE5vdmVtYmVyIDE0IDIwMDAKK21vdmUgL3Byb2Mvc3lzCSAgU2hlbiBGZW5nIDxzaGVuQGNuLmZ1aml0c3UuY29tPgkJICAgIEFwcmlsIDEgMjAwOQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBWZXJzaW9uIDEuMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXJuZWwgdmVyc2lvbiAyLjIuMTIKIAkJCQkJICAgICAgS2VybmVsIHZlcnNpb24gMi40LjAtdGVzdDExLXByZTQKQEAgLTI2LDI1ICsyNywxNyBAQAogICAxLjYJUGFyYWxsZWwgcG9ydCBpbmZvIGluIC9wcm9jL3BhcnBvcnQKICAgMS43CVRUWSBpbmZvIGluIC9wcm9jL3R0eQogICAxLjgJTWlzY2VsbGFuZW91cyBrZXJuZWwgc3RhdGlzdGljcyBpbiAvcHJvYy9zdGF0CisgIDEuOSBFeHQ0IGZpbGUgc3lzdGVtIHBhcmFtZXRlcnMKIAogICAyCU1vZGlmeWluZyBTeXN0ZW0gUGFyYW1ldGVycwotICAyLjEJL3Byb2Mvc3lzL2ZzIC0gRmlsZSBzeXN0ZW0gZGF0YQotICAyLjIJL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjIC0gTWlzY2VsbGFuZW91cyBiaW5hcnkgZm9ybWF0cwotICAyLjMJL3Byb2Mvc3lzL2tlcm5lbCAtIGdlbmVyYWwga2VybmVsIHBhcmFtZXRlcnMKLSAgMi40CS9wcm9jL3N5cy92bSAtIFRoZSB2aXJ0dWFsIG1lbW9yeSBzdWJzeXN0ZW0KLSAgMi41CS9wcm9jL3N5cy9kZXYgLSBEZXZpY2Ugc3BlY2lmaWMgcGFyYW1ldGVycwotICAyLjYJL3Byb2Mvc3lzL3N1bnJwYyAtIFJlbW90ZSBwcm9jZWR1cmUgY2FsbHMKLSAgMi43CS9wcm9jL3N5cy9uZXQgLSBOZXR3b3JraW5nIHN0dWZmCi0gIDIuOAkvcHJvYy9zeXMvbmV0L2lwdjQgLSBJUFY0IHNldHRpbmdzCi0gIDIuOQlBcHBsZXRhbGsKLSAgMi4xMAlJUFgKLSAgMi4xMQkvcHJvYy9zeXMvZnMvbXF1ZXVlIC0gUE9TSVggbWVzc2FnZSBxdWV1ZXMgZmlsZXN5c3RlbQotICAyLjEyCS9wcm9jLzxwaWQ+L29vbV9hZGogLSBBZGp1c3QgdGhlIG9vbS1raWxsZXIgc2NvcmUKLSAgMi4xMwkvcHJvYy88cGlkPi9vb21fc2NvcmUgLSBEaXNwbGF5IGN1cnJlbnQgb29tLWtpbGxlciBzY29yZQotICAyLjE0CS9wcm9jLzxwaWQ+L2lvIC0gRGlzcGxheSB0aGUgSU8gYWNjb3VudGluZyBmaWVsZHMKLSAgMi4xNQkvcHJvYy88cGlkPi9jb3JlZHVtcF9maWx0ZXIgLSBDb3JlIGR1bXAgZmlsdGVyaW5nIHNldHRpbmdzCi0gIDIuMTYJL3Byb2MvPHBpZD4vbW91bnRpbmZvIC0gSW5mb3JtYXRpb24gYWJvdXQgbW91bnRzCi0gIDIuMTcJL3Byb2Mvc3lzL2ZzL2Vwb2xsIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXBvbGwgaW50ZXJmYWNlCisKKyAgMwlQZXItUHJvY2VzcyBQYXJhbWV0ZXJzCisgIDMuMQkvcHJvYy88cGlkPi9vb21fYWRqIC0gQWRqdXN0IHRoZSBvb20ta2lsbGVyIHNjb3JlCisgIDMuMgkvcHJvYy88cGlkPi9vb21fc2NvcmUgLSBEaXNwbGF5IGN1cnJlbnQgb29tLWtpbGxlciBzY29yZQorICAzLjMJL3Byb2MvPHBpZD4vaW8gLSBEaXNwbGF5IHRoZSBJTyBhY2NvdW50aW5nIGZpZWxkcworICAzLjQJL3Byb2MvPHBpZD4vY29yZWR1bXBfZmlsdGVyIC0gQ29yZSBkdW1wIGZpbHRlcmluZyBzZXR0aW5ncworICAzLjUJL3Byb2MvPHBpZD4vbW91bnRpbmZvIC0gSW5mb3JtYXRpb24gYWJvdXQgbW91bnRzCisKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBQcmVmYWNlCkBAIC05NDAsMjcgKzkzMyw2IEBACiAgRmlsZSAgICAgICAgICAgIENvbnRlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgbWJfZ3JvdXBzICAgICAgIGRldGFpbHMgb2YgbXVsdGlibG9jayBhbGxvY2F0b3IgYnVkZHkgY2FjaGUgb2YgZnJlZSBibG9ja3MKICBtYl9oaXN0b3J5ICAgICAgbXVsdGlibG9jayBhbGxvY2F0aW9uIGhpc3RvcnkKLSBzdGF0cyAgICAgICAgICAgY29udHJvbHMgd2hldGhlciB0aGUgbXVsdGlibG9jayBhbGxvY2F0b3Igc2hvdWxkIHN0YXJ0Ci0gICAgICAgICAgICAgICAgIGNvbGxlY3Rpbmcgc3RhdGlzdGljcywgd2hpY2ggYXJlIHNob3duIGR1cmluZyB0aGUgdW5tb3VudAotIGdyb3VwX3ByZWFsbG9jICB0aGUgbXVsdGlibG9jayBhbGxvY2F0b3Igd2lsbCByb3VuZCB1cCBhbGxvY2F0aW9uCi0gICAgICAgICAgICAgICAgIHJlcXVlc3RzIHRvIGEgbXVsdGlwbGUgb2YgdGhpcyB0dW5pbmcgcGFyYW1ldGVyIGlmIHRoZQotICAgICAgICAgICAgICAgICBzdHJpcGUgc2l6ZSBpcyBub3Qgc2V0IGluIHRoZSBleHQ0IHN1cGVyYmxvY2sKLSBtYXhfdG9fc2NhbiAgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGV4dGVudHMgdGhlIG11bHRpYmxvY2sgYWxsb2NhdG9yCi0gICAgICAgICAgICAgICAgIHdpbGwgc2VhcmNoIHRvIGZpbmQgdGhlIGJlc3QgZXh0ZW50Ci0gbWluX3RvX3NjYW4gICAgIFRoZSBtaW5pbXVtIG51bWJlciBvZiBleHRlbnRzIHRoZSBtdWx0aWJsb2NrIGFsbG9jYXRvcgotICAgICAgICAgICAgICAgICB3aWxsIHNlYXJjaCB0byBmaW5kIHRoZSBiZXN0IGV4dGVudAotIG9yZGVyMl9yZXEgICAgICBUdW5pbmcgcGFyYW1ldGVyIHdoaWNoIGNvbnRyb2xzIHRoZSBtaW5pbXVtIHNpemUgZm9yIAotICAgICAgICAgICAgICAgICByZXF1ZXN0cyAoYXMgYSBwb3dlciBvZiAyKSB3aGVyZSB0aGUgYnVkZHkgY2FjaGUgaXMKLSAgICAgICAgICAgICAgICAgdXNlZAotIHN0cmVhbV9yZXEgICAgICBGaWxlcyB3aGljaCBoYXZlIGZld2VyIGJsb2NrcyB0aGFuIHRoaXMgdHVuYWJsZQotICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgd2lsbCBoYXZlIHRoZWlyIGJsb2NrcyBhbGxvY2F0ZWQgb3V0IG9mIGEKLSAgICAgICAgICAgICAgICAgYmxvY2sgZ3JvdXAgc3BlY2lmaWMgcHJlYWxsb2NhdGlvbiBwb29sLCBzbyB0aGF0IHNtYWxsCi0gICAgICAgICAgICAgICAgIGZpbGVzIGFyZSBwYWNrZWQgY2xvc2VseSB0b2dldGhlci4gIEVhY2ggbGFyZ2UgZmlsZQotICAgICAgICAgICAgICAgICB3aWxsIGhhdmUgaXRzIGJsb2NrcyBhbGxvY2F0ZWQgb3V0IG9mIGl0cyBvd24gdW5pcXVlCi0gICAgICAgICAgICAgICAgIHByZWFsbG9jYXRpb24gcG9vbC4KLWlub2RlX3JlYWRhaGVhZCAgVHVuaW5nIHBhcmFtZXRlciB3aGljaCBjb250cm9scyB0aGUgbWF4aW11bSBudW1iZXIgb2YKLSAgICAgICAgICAgICAgICAgaW5vZGUgdGFibGUgYmxvY2tzIHRoYXQgZXh0NCdzIGlub2RlIHRhYmxlIHJlYWRhaGVhZAotICAgICAgICAgICAgICAgICBhbGdvcml0aG0gd2lsbCBwcmUtcmVhZCBpbnRvIHRoZSBidWZmZXIgY2FjaGUKIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCiAKQEAgLTEwMTEsMTAyMSArOTgzLDI0IEBACiBUaGlzIGNoYXB0ZXIgIGlzICBoZWF2aWx5ICBiYXNlZCAgb24gdGhlIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgaW4gdGhlIHByZSAyLjIKIGtlcm5lbHMsIGFuZCBiZWNhbWUgcGFydCBvZiBpdCBpbiB2ZXJzaW9uIDIuMi4xIG9mIHRoZSBMaW51eCBrZXJuZWwuCiAKLTIuMSAvcHJvYy9zeXMvZnMgLSBGaWxlIHN5c3RlbSBkYXRhCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIHN1YmRpcmVjdG9yeSAgY29udGFpbnMgIHNwZWNpZmljICBmaWxlIHN5c3RlbSwgZmlsZSBoYW5kbGUsIGlub2RlLCBkZW50cnkKLWFuZCBxdW90YSBpbmZvcm1hdGlvbi4KLQotQ3VycmVudGx5LCB0aGVzZSBmaWxlcyBhcmUgaW4gL3Byb2Mvc3lzL2ZzOgotCi1kZW50cnktc3RhdGUKLS0tLS0tLS0tLS0tLQotCi1TdGF0dXMgb2YgIHRoZSAgZGlyZWN0b3J5ICBjYWNoZS4gIFNpbmNlICBkaXJlY3RvcnkgIGVudHJpZXMgIGFyZSAgZHluYW1pY2FsbHkKLWFsbG9jYXRlZCBhbmQgIGRlYWxsb2NhdGVkLCAgdGhpcyAgZmlsZSBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgc3RhdHVzLiBJdCBob2xkcwotc2l4IHZhbHVlcywgaW4gd2hpY2ggdGhlIGxhc3QgdHdvIGFyZSBub3QgdXNlZCBhbmQgYXJlIGFsd2F5cyB6ZXJvLiBUaGUgb3RoZXJzCi1hcmUgbGlzdGVkIGluIHRhYmxlIDItMS4KLQotCi1UYWJsZSAyLTE6IFN0YXR1cyBmaWxlcyBvZiB0aGUgZGlyZWN0b3J5IGNhY2hlIAotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0gRmlsZSAgICAgICBDb250ZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gbnJfZGVudHJ5ICBBbG1vc3QgYWx3YXlzIHplcm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gbnJfdW51c2VkICBOdW1iZXIgb2YgdW51c2VkIGNhY2hlIGVudHJpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gYWdlX2xpbWl0ICAKLSAgICAgICAgICAgIGluIHNlY29uZHMgYWZ0ZXIgdGhlIGVudHJ5IG1heSBiZSByZWNsYWltZWQsIHdoZW4gbWVtb3J5IGlzIHNob3J0IAotIHdhbnRfcGFnZXMgaW50ZXJuYWxseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLWRxdW90LW5yIGFuZCBkcXVvdC1tYXgKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGZpbGUgZHF1b3QtbWF4IHNob3dzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjYWNoZWQgZGlzayBxdW90YSBlbnRyaWVzLgotCi1UaGUgZmlsZSAgZHF1b3QtbnIgIHNob3dzICB0aGUgIG51bWJlciBvZiBhbGxvY2F0ZWQgZGlzayBxdW90YSBlbnRyaWVzIGFuZCB0aGUKLW51bWJlciBvZiBmcmVlIGRpc2sgcXVvdGEgZW50cmllcy4KLQotSWYgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgY2FjaGVkIGRpc2sgcXVvdGFzIGlzIHZlcnkgbG93IGFuZCB5b3UgaGF2ZSBhIGxhcmdlCi1udW1iZXIgb2Ygc2ltdWx0YW5lb3VzIHN5c3RlbSB1c2VycywgeW91IG1pZ2h0IHdhbnQgdG8gcmFpc2UgdGhlIGxpbWl0LgotCi1maWxlLW5yIGFuZCBmaWxlLW1heAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGtlcm5lbCAgYWxsb2NhdGVzIGZpbGUgaGFuZGxlcyBkeW5hbWljYWxseSwgYnV0IGRvZXNuJ3QgZnJlZSB0aGVtIGFnYWluIGF0Ci10aGlzIHRpbWUuCi0KLVRoZSB2YWx1ZSAgaW4gIGZpbGUtbWF4ICBkZW5vdGVzICB0aGUgIG1heGltdW0gbnVtYmVyIG9mIGZpbGUgaGFuZGxlcyB0aGF0IHRoZQotTGludXgga2VybmVsIHdpbGwgYWxsb2NhdGUuIFdoZW4geW91IGdldCBhIGxvdCBvZiBlcnJvciBtZXNzYWdlcyBhYm91dCBydW5uaW5nCi1vdXQgb2YgIGZpbGUgaGFuZGxlcywgeW91IG1pZ2h0IHdhbnQgdG8gcmFpc2UgdGhpcyBsaW1pdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMKLTEwJSBvZiAgUkFNIGluIGtpbG9ieXRlcy4gIFRvICBjaGFuZ2UgaXQsIGp1c3QgIHdyaXRlIHRoZSBuZXcgbnVtYmVyICBpbnRvIHRoZQotZmlsZToKLQotICAjIGNhdCAvcHJvYy9zeXMvZnMvZmlsZS1tYXggCi0gIDQwOTYgCi0gICMgZWNobyA4MTkyID4gL3Byb2Mvc3lzL2ZzL2ZpbGUtbWF4IAotICAjIGNhdCAvcHJvYy9zeXMvZnMvZmlsZS1tYXggCi0gIDgxOTIgCi0KLQotVGhpcyBtZXRob2QgIG9mICByZXZpc2lvbiAgaXMgIHVzZWZ1bCAgZm9yICBhbGwgY3VzdG9taXphYmxlIHBhcmFtZXRlcnMgb2YgdGhlCi1rZXJuZWwgLSBzaW1wbHkgZWNobyB0aGUgbmV3IHZhbHVlIHRvIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUuCi0KLUhpc3RvcmljYWxseSwgdGhlIHRocmVlIHZhbHVlcyBpbiBmaWxlLW5yIGRlbm90ZWQgdGhlIG51bWJlciBvZiBhbGxvY2F0ZWQgZmlsZQotaGFuZGxlcywgIHRoZSBudW1iZXIgb2YgIGFsbG9jYXRlZCBidXQgIHVudXNlZCBmaWxlICBoYW5kbGVzLCBhbmQgIHRoZSBtYXhpbXVtCi1udW1iZXIgb2YgZmlsZSBoYW5kbGVzLiBMaW51eCAyLjYgYWx3YXlzICByZXBvcnRzIDAgYXMgdGhlIG51bWJlciBvZiBmcmVlIGZpbGUKLWhhbmRsZXMgLS0gdGhpcyAgaXMgbm90IGFuIGVycm9yLCAgaXQganVzdCBtZWFucyB0aGF0IHRoZSAgbnVtYmVyIG9mIGFsbG9jYXRlZAotZmlsZSBoYW5kbGVzIGV4YWN0bHkgbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIHVzZWQgZmlsZSBoYW5kbGVzLgotCi1BdHRlbXB0cyB0byAgYWxsb2NhdGUgbW9yZSAgZmlsZSBkZXNjcmlwdG9ycyB0aGFuICBmaWxlLW1heCBhcmUgIHJlcG9ydGVkIHdpdGgKLXByaW50aywgbG9vayBmb3IgIlZGUzogZmlsZS1tYXggbGltaXQgPG51bWJlcj4gcmVhY2hlZCIuCi0KLWlub2RlLXN0YXRlIGFuZCBpbm9kZS1ucgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBmaWxlIGlub2RlLW5yIGNvbnRhaW5zIHRoZSBmaXJzdCB0d28gaXRlbXMgZnJvbSBpbm9kZS1zdGF0ZSwgc28gd2UnbGwgc2tpcAotdG8gdGhhdCBmaWxlLi4uCi0KLWlub2RlLXN0YXRlIGNvbnRhaW5zICB0d28gIGFjdHVhbCBudW1iZXJzIGFuZCBmaXZlIGR1bW15IHZhbHVlcy4gVGhlIG51bWJlcnMKLWFyZSBucl9pbm9kZXMgYW5kIG5yX2ZyZWVfaW5vZGVzIChpbiBvcmRlciBvZiBhcHBlYXJhbmNlKS4KLQotbnJfaW5vZGVzCi1+fn5+fn5+fn4KLQotRGVub3RlcyB0aGUgIG51bWJlciAgb2YgIGlub2RlcyB0aGUgc3lzdGVtIGhhcyBhbGxvY2F0ZWQuIFRoaXMgbnVtYmVyIHdpbGwKLWdyb3cgYW5kIHNocmluayBkeW5hbWljYWxseS4KLQotbnJfb3BlbgotLS0tLS0tLQotCi1EZW5vdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlLWhhbmRsZXMgYSBwcm9jZXNzIGNhbgotYWxsb2NhdGUuIERlZmF1bHQgdmFsdWUgaXMgMTAyNCoxMDI0ICgxMDQ4NTc2KSB3aGljaCBzaG91bGQgYmUKLWVub3VnaCBmb3IgbW9zdCBtYWNoaW5lcy4gQWN0dWFsIGxpbWl0IGRlcGVuZHMgb24gUkxJTUlUX05PRklMRQotcmVzb3VyY2UgbGltaXQuCi0KLW5yX2ZyZWVfaW5vZGVzCi0tLS0tLS0tLS0tLS0tLQotCi1SZXByZXNlbnRzIHRoZSAgbnVtYmVyIG9mIGZyZWUgaW5vZGVzLiBJZS4gVGhlIG51bWJlciBvZiBpbnVzZSBpbm9kZXMgaXMKLShucl9pbm9kZXMgLSBucl9mcmVlX2lub2RlcykuCi0KLWFpby1uciBhbmQgYWlvLW1heC1ucgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWFpby1uciBpcyB0aGUgcnVubmluZyB0b3RhbCBvZiB0aGUgbnVtYmVyIG9mIGV2ZW50cyBzcGVjaWZpZWQgb24gdGhlCi1pb19zZXR1cCBzeXN0ZW0gY2FsbCBmb3IgYWxsIGN1cnJlbnRseSBhY3RpdmUgYWlvIGNvbnRleHRzLiAgSWYgYWlvLW5yCi1yZWFjaGVzIGFpby1tYXgtbnIgdGhlbiBpb19zZXR1cCB3aWxsIGZhaWwgd2l0aCBFQUdBSU4uICBOb3RlIHRoYXQKLXJhaXNpbmcgYWlvLW1heC1uciBkb2VzIG5vdCByZXN1bHQgaW4gdGhlIHByZS1hbGxvY2F0aW9uIG9yIHJlLXNpemluZwotb2YgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMuCi0KLTIuMiAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MgLSBNaXNjZWxsYW5lb3VzIGJpbmFyeSBmb3JtYXRzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1CZXNpZGVzIHRoZXNlICBmaWxlcywgdGhlcmUgaXMgdGhlIHN1YmRpcmVjdG9yeSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MuIFRoaXMKLWhhbmRsZXMgdGhlIGtlcm5lbCBzdXBwb3J0IGZvciBtaXNjZWxsYW5lb3VzIGJpbmFyeSBmb3JtYXRzLgotCi1CaW5mbXRfbWlzYyBwcm92aWRlcyAgdGhlIGFiaWxpdHkgdG8gcmVnaXN0ZXIgYWRkaXRpb25hbCBiaW5hcnkgZm9ybWF0cyB0byB0aGUKLUtlcm5lbCB3aXRob3V0ICBjb21waWxpbmcgIGFuIGFkZGl0aW9uYWwgbW9kdWxlL2tlcm5lbC4gVGhlcmVmb3JlLCBiaW5mbXRfbWlzYwotbmVlZHMgdG8gIGtub3cgbWFnaWMgbnVtYmVycyBhdCB0aGUgYmVnaW5uaW5nIG9yIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gb2YgdGhlCi1iaW5hcnkuCi0KLUl0IHdvcmtzIGJ5IG1haW50YWluaW5nIGEgbGlua2VkIGxpc3Qgb2Ygc3RydWN0cyB0aGF0IGNvbnRhaW4gYSBkZXNjcmlwdGlvbiBvZgotYSBiaW5hcnkgIGZvcm1hdCwgIGluY2x1ZGluZyAgYSAgbWFnaWMgIHdpdGggc2l6ZSAob3IgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiksCi1vZmZzZXQgYW5kICBtYXNrLCAgYW5kICB0aGUgIGludGVycHJldGVyIG5hbWUuIE9uIHJlcXVlc3QgaXQgaW52b2tlcyB0aGUgZ2l2ZW4KLWludGVycHJldGVyIHdpdGggIHRoZSAgb3JpZ2luYWwgIHByb2dyYW0gIGFzICBhcmd1bWVudCwgIGFzICBiaW5mbXRfamF2YSAgYW5kCi1iaW5mbXRfZW04NiBhbmQgIGJpbmZtdF9teiAgZG8uICBTaW5jZSBiaW5mbXRfbWlzYyBkb2VzIG5vdCBkZWZpbmUgYW55IGRlZmF1bHQKLWJpbmFyeS1mb3JtYXRzLCB5b3UgaGF2ZSB0byByZWdpc3RlciBhbiBhZGRpdGlvbmFsIGJpbmFyeS1mb3JtYXQuCi0KLVRoZXJlIGFyZSB0d28gZ2VuZXJhbCBmaWxlcyBpbiBiaW5mbXRfbWlzYyBhbmQgb25lIGZpbGUgcGVyIHJlZ2lzdGVyZWQgZm9ybWF0LgotVGhlIHR3byBnZW5lcmFsIGZpbGVzIGFyZSByZWdpc3RlciBhbmQgc3RhdHVzLgotCi1SZWdpc3RlcmluZyBhIG5ldyBiaW5hcnkgZm9ybWF0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRvIHJlZ2lzdGVyIGEgbmV3IGJpbmFyeSBmb3JtYXQgeW91IGhhdmUgdG8gaXNzdWUgdGhlIGNvbW1hbmQKLQotICBlY2hvIDpuYW1lOnR5cGU6b2Zmc2V0Om1hZ2ljOm1hc2s6aW50ZXJwcmV0ZXI6ID4gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyIAotCi0KLQotd2l0aCBhcHByb3ByaWF0ZSAgbmFtZSAodGhlIG5hbWUgZm9yIHRoZSAvcHJvYy1kaXIgZW50cnkpLCBvZmZzZXQgKGRlZmF1bHRzIHRvCi0wLCBpZiAgb21pdHRlZCksICBtYWdpYywgbWFzayAod2hpY2ggY2FuIGJlIG9taXR0ZWQsIGRlZmF1bHRzIHRvIGFsbCAweGZmKSBhbmQKLWxhc3QgYnV0ICBub3QgIGxlYXN0LCAgdGhlICBpbnRlcnByZXRlciB0aGF0IGlzIHRvIGJlIGludm9rZWQgKGZvciBleGFtcGxlIGFuZAotdGVzdGluZyAvYmluL2VjaG8pLiAgVHlwZSAgY2FuIGJlIE0gZm9yIHVzdWFsIG1hZ2ljIG1hdGNoaW5nIG9yIEUgZm9yIGZpbGVuYW1lCi1leHRlbnNpb24gbWF0Y2hpbmcgKGdpdmUgZXh0ZW5zaW9uIGluIHBsYWNlIG9mIG1hZ2ljKS4KLQotQ2hlY2sgb3IgcmVzZXQgdGhlIHN0YXR1cyBvZiB0aGUgYmluYXJ5IGZvcm1hdCBoYW5kbGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSWYgeW91ICBkbyBhIGNhdCBvbiB0aGUgZmlsZSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2Mvc3RhdHVzLCB5b3Ugd2lsbCBnZXQgdGhlCi1jdXJyZW50IHN0YXR1cyAoZW5hYmxlZC9kaXNhYmxlZCkgb2YgYmluZm10X21pc2MuIENoYW5nZSB0aGUgc3RhdHVzIGJ5IGVjaG9pbmcKLTAgKGRpc2FibGVzKSAgb3IgIDEgIChlbmFibGVzKSAgb3IgIC0xICAoY2F1dGlvbjogIHRoaXMgIGNsZWFycyBhbGwgcHJldmlvdXNseQotcmVnaXN0ZXJlZCBiaW5hcnkgIGZvcm1hdHMpICB0byBzdGF0dXMuIEZvciBleGFtcGxlIGVjaG8gMCA+IHN0YXR1cyB0byBkaXNhYmxlCi1iaW5mbXRfbWlzYyAodGVtcG9yYXJpbHkpLgotCi1TdGF0dXMgb2YgYSBzaW5nbGUgaGFuZGxlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRWFjaCByZWdpc3RlcmVkICBoYW5kbGVyIGhhcyBhbiBlbnRyeSBpbiAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MuIFRoZXNlIGZpbGVzCi1wZXJmb3JtIHRoZSAgc2FtZSBmdW5jdGlvbiBhcyBzdGF0dXMsIGJ1dCB0aGVpciBzY29wZSBpcyBsaW1pdGVkIHRvIHRoZSBhY3R1YWwKLWJpbmFyeSBmb3JtYXQuICBCeSAgY2F0aW5nIHRoaXMgZmlsZSwgeW91IGFsc28gcmVjZWl2ZSBhbGwgcmVsYXRlZCBpbmZvcm1hdGlvbgotYWJvdXQgdGhlIGludGVycHJldGVyL21hZ2ljIG9mIHRoZSBiaW5mbXQuCi0KLUV4YW1wbGUgdXNhZ2Ugb2YgYmluZm10X21pc2MgKGVtdWxhdGUgYmluZm10X2phdmEpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIGNkIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyAgCi0gIGVjaG8gJzpKYXZhOk06Olx4Y2FceGZlXHhiYVx4YmU6Oi91c3IvbG9jYWwvamF2YS9iaW4vamF2YXdyYXBwZXI6JyA+IHJlZ2lzdGVyICAKLSAgZWNobyAnOkhUTUw6RTo6aHRtbDo6L3Vzci9sb2NhbC9qYXZhL2Jpbi9hcHBsZXR2aWV3ZXI6JyA+IHJlZ2lzdGVyICAKLSAgZWNobyAnOkFwcGxldDpNOjo8IS0tYXBwbGV0OjovdXNyL2xvY2FsL2phdmEvYmluL2FwcGxldHZpZXdlcjonID4gcmVnaXN0ZXIgCi0gIGVjaG8gJzpERVhFOk06Olx4MGVERVg6Oi91c3IvYmluL2Rvc2V4ZWM6JyA+IHJlZ2lzdGVyIAotCi0KLVRoZXNlIGZvdXIgIGxpbmVzICBhZGQgIHN1cHBvcnQgIGZvciAgSmF2YSAgZXhlY3V0YWJsZXMgYW5kIEphdmEgYXBwbGV0cyAobGlrZQotYmluZm10X2phdmEsIGFkZGl0aW9uYWxseSAgcmVjb2duaXppbmcgdGhlIC5odG1sIGV4dGVuc2lvbiB3aXRoIG5vIG5lZWQgdG8gcHV0Ci08IS0tYXBwbGV0PiB0byAgZXZlcnkgIGFwcGxldCAgZmlsZSkuICBZb3UgIGhhdmUgIHRvICBpbnN0YWxsICB0aGUgSkRLIGFuZCB0aGUKLXNoZWxsLXNjcmlwdCAvdXNyL2xvY2FsL2phdmEvYmluL2phdmF3cmFwcGVyICB0b28uICBJdCAgd29ya3MgIGFyb3VuZCAgdGhlCi1icm9rZW5uZXNzIG9mICB0aGUgSmF2YSBmaWxlbmFtZSBoYW5kbGluZy4gVG8gYWRkIGEgSmF2YSBiaW5hcnksIGp1c3QgY3JlYXRlIGEKLWxpbmsgdG8gdGhlIGNsYXNzLWZpbGUgc29tZXdoZXJlIGluIHRoZSBwYXRoLgotCi0yLjMgL3Byb2Mvc3lzL2tlcm5lbCAtIGdlbmVyYWwga2VybmVsIHBhcmFtZXRlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIGRpcmVjdG9yeSAgcmVmbGVjdHMgIGdlbmVyYWwgIGtlcm5lbCAgYmVoYXZpb3JzLiBBcyBJJ3ZlIHNhaWQgYmVmb3JlLCB0aGUKLWNvbnRlbnRzIGRlcGVuZCAgb24gIHlvdXIgIGNvbmZpZ3VyYXRpb24uICBIZXJlIHlvdSdsbCBmaW5kIHRoZSBtb3N0IGltcG9ydGFudAotZmlsZXMsIGFsb25nIHdpdGggZGVzY3JpcHRpb25zIG9mIHdoYXQgdGhleSBtZWFuIGFuZCBob3cgdG8gdXNlIHRoZW0uCi0KLWFjY3QKLS0tLS0KLQotVGhlIGZpbGUgY29udGFpbnMgdGhyZWUgdmFsdWVzOyBoaWdod2F0ZXIsIGxvd3dhdGVyLCBhbmQgZnJlcXVlbmN5LgotCi1JdCBleGlzdHMgIG9ubHkgIHdoZW4gIEJTRC1zdHlsZSAgcHJvY2VzcyAgYWNjb3VudGluZyBpcyBlbmFibGVkLiBUaGVzZSB2YWx1ZXMKLWNvbnRyb2wgaXRzIGJlaGF2aW9yLiBJZiB0aGUgZnJlZSBzcGFjZSBvbiB0aGUgZmlsZSBzeXN0ZW0gd2hlcmUgdGhlIGxvZyBsaXZlcwotZ29lcyBiZWxvdyAgbG93d2F0ZXIgIHBlcmNlbnRhZ2UsICBhY2NvdW50aW5nICBzdXNwZW5kcy4gIElmICBpdCAgZ29lcyAgYWJvdmUKLWhpZ2h3YXRlciBwZXJjZW50YWdlLCAgYWNjb3VudGluZyAgcmVzdW1lcy4gRnJlcXVlbmN5IGRldGVybWluZXMgaG93IG9mdGVuIHlvdQotY2hlY2sgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlICh2YWx1ZSBpcyBpbiBzZWNvbmRzKS4gRGVmYXVsdCBzZXR0aW5ncyBhcmU6IDQsCi0yLCBhbmQgIDMwLiAgVGhhdCBpcywgc3VzcGVuZCBhY2NvdW50aW5nIGlmIHRoZXJlIGlzIGxlc3MgdGhhbiAyIHBlcmNlbnQgZnJlZTsKLXJlc3VtZSBpdCAgaWYgd2UgaGF2ZSBhIHZhbHVlIG9mIDMgb3IgbW9yZSBwZXJjZW50OyBjb25zaWRlciBpbmZvcm1hdGlvbiBhYm91dAotdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIHZhbGlkIGZvciAzMCBzZWNvbmRzCi0KLWN0cmwtYWx0LWRlbAotLS0tLS0tLS0tLS0tCi0KLVdoZW4gdGhlIHZhbHVlIGluIHRoaXMgZmlsZSBpcyAwLCBjdHJsLWFsdC1kZWwgaXMgdHJhcHBlZCBhbmQgc2VudCB0byB0aGUgaW5pdAotcHJvZ3JhbSB0byAgaGFuZGxlIGEgZ3JhY2VmdWwgcmVzdGFydC4gSG93ZXZlciwgd2hlbiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGF0Ci16ZXJvLCBMaW51eCdzICByZWFjdGlvbiAgdG8gIHRoaXMga2V5IGNvbWJpbmF0aW9uIHdpbGwgYmUgYW4gaW1tZWRpYXRlIHJlYm9vdCwKLXdpdGhvdXQgc3luY2luZyBpdHMgZGlydHkgYnVmZmVycy4KLQotW05PVEVdCi0gICAgV2hlbiBhICBwcm9ncmFtICAobGlrZSAgZG9zZW11KSAgaGFzICB0aGUgIGtleWJvYXJkICBpbiAgcmF3ICBtb2RlLCAgdGhlCi0gICAgY3RybC1hbHQtZGVsIGlzICBpbnRlcmNlcHRlZCAgYnkgIHRoZSAgcHJvZ3JhbSAgYmVmb3JlIGl0IGV2ZXIgcmVhY2hlcyB0aGUKLSAgICBrZXJuZWwgdHR5ICBsYXllciwgIGFuZCAgaXQgaXMgdXAgdG8gdGhlIHByb2dyYW0gdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aAotICAgIGl0LgotCi1kb21haW5uYW1lIGFuZCBob3N0bmFtZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlc2UgZmlsZXMgIGNhbiAgYmUgY29udHJvbGxlZCB0byBzZXQgdGhlIE5JUyBkb21haW5uYW1lIGFuZCBob3N0bmFtZSBvZiB5b3VyCi1ib3guIEZvciB0aGUgY2xhc3NpYyBkYXJrc3Rhci5mcm9wLm9yZyBhIHNpbXBsZToKLQotICAjIGVjaG8gImRhcmtzdGFyIiA+IC9wcm9jL3N5cy9rZXJuZWwvaG9zdG5hbWUgCi0gICMgZWNobyAiZnJvcC5vcmciID4gL3Byb2Mvc3lzL2tlcm5lbC9kb21haW5uYW1lIAotCi0KLXdvdWxkIHN1ZmZpY2UgdG8gc2V0IHlvdXIgaG9zdG5hbWUgYW5kIE5JUyBkb21haW5uYW1lLgotCi1vc3JlbGVhc2UsIG9zdHlwZSBhbmQgdmVyc2lvbgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIG5hbWVzIG1ha2UgaXQgcHJldHR5IG9idmlvdXMgd2hhdCB0aGVzZSBmaWVsZHMgY29udGFpbjoKLQotICA+IGNhdCAvcHJvYy9zeXMva2VybmVsL29zcmVsZWFzZSAKLSAgMi4yLjEyIAotICAgCi0gID4gY2F0IC9wcm9jL3N5cy9rZXJuZWwvb3N0eXBlIAotICBMaW51eCAKLSAgIAotICA+IGNhdCAvcHJvYy9zeXMva2VybmVsL3ZlcnNpb24gCi0gICM0IEZyaSBPY3QgMSAxMjo0MToxNCBQRFQgMTk5OSAKLQotCi1UaGUgZmlsZXMgIG9zcmVsZWFzZSBhbmQgb3N0eXBlIHNob3VsZCBiZSBjbGVhciBlbm91Z2guIFZlcnNpb24gbmVlZHMgYSBsaXR0bGUKLW1vcmUgY2xhcmlmaWNhdGlvbi4gIFRoZSAgIzQgbWVhbnMgdGhhdCB0aGlzIGlzIHRoZSA0dGgga2VybmVsIGJ1aWx0IGZyb20gdGhpcwotc291cmNlIGJhc2UgYW5kIHRoZSBkYXRlIGFmdGVyIGl0IGluZGljYXRlcyB0aGUgdGltZSB0aGUga2VybmVsIHdhcyBidWlsdC4gVGhlCi1vbmx5IHdheSB0byB0dW5lIHRoZXNlIHZhbHVlcyBpcyB0byByZWJ1aWxkIHRoZSBrZXJuZWwuCi0KLXBhbmljCi0tLS0tLQotCi1UaGUgdmFsdWUgIGluICB0aGlzICBmaWxlICByZXByZXNlbnRzICB0aGUgIG51bWJlciBvZiBzZWNvbmRzIHRoZSBrZXJuZWwgd2FpdHMKLWJlZm9yZSByZWJvb3RpbmcgIG9uICBhICBwYW5pYy4gIFdoZW4gIHlvdSAgdXNlICB0aGUgIHNvZnR3YXJlICB3YXRjaGRvZywgIHRoZQotcmVjb21tZW5kZWQgc2V0dGluZyAgaXMgIDYwLiBJZiBzZXQgdG8gMCwgdGhlIGF1dG8gcmVib290IGFmdGVyIGEga2VybmVsIHBhbmljCi1pcyBkaXNhYmxlZCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgc2V0dGluZy4KLQotcHJpbnRrCi0tLS0tLS0KLQotVGhlIGZvdXIgdmFsdWVzIGluIHByaW50ayBkZW5vdGUKLSogY29uc29sZV9sb2dsZXZlbCwKLSogZGVmYXVsdF9tZXNzYWdlX2xvZ2xldmVsLAotKiBtaW5pbXVtX2NvbnNvbGVfbG9nbGV2ZWwgYW5kCi0qIGRlZmF1bHRfY29uc29sZV9sb2dsZXZlbAotcmVzcGVjdGl2ZWx5LgotCi1UaGVzZSB2YWx1ZXMgIGluZmx1ZW5jZSAgcHJpbnRrKCkgIGJlaGF2aW9yICB3aGVuICBwcmludGluZyAgb3IgIGxvZ2dpbmcgZXJyb3IKLW1lc3NhZ2VzLCB3aGljaCAgY29tZSAgZnJvbSAgaW5zaWRlICB0aGUgIGtlcm5lbC4gIFNlZSAgc3lzbG9nKDIpICBmb3IgIG1vcmUKLWluZm9ybWF0aW9uIG9uIHRoZSBkaWZmZXJlbnQgbG9nIGxldmVscy4KLQotY29uc29sZV9sb2dsZXZlbAotLS0tLS0tLS0tLS0tLS0tLQotCi1NZXNzYWdlcyB3aXRoIGEgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhpcyB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuCi0KLWRlZmF1bHRfbWVzc2FnZV9sZXZlbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU1lc3NhZ2VzIHdpdGhvdXQgYW4gZXhwbGljaXQgcHJpb3JpdHkgd2lsbCBiZSBwcmludGVkIHdpdGggdGhpcyBwcmlvcml0eS4KLQotbWluaW11bV9jb25zb2xlX2xvZ2xldmVsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWluaW11bSAoaGlnaGVzdCkgdmFsdWUgdG8gd2hpY2ggdGhlIGNvbnNvbGVfbG9nbGV2ZWwgY2FuIGJlIHNldC4KLQotZGVmYXVsdF9jb25zb2xlX2xvZ2xldmVsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRGVmYXVsdCB2YWx1ZSBmb3IgY29uc29sZV9sb2dsZXZlbC4KLQotc2ctYmlnLWJ1ZmYKLS0tLS0tLS0tLS0tCi0KLVRoaXMgZmlsZSAgc2hvd3MgIHRoZSBzaXplIG9mIHRoZSBnZW5lcmljIFNDU0kgKHNnKSBidWZmZXIuIEF0IHRoaXMgcG9pbnQsIHlvdQotY2FuJ3QgdHVuZSAgaXQgIHlldCwgIGJ1dCAgeW91ICBjYW4gIGNoYW5nZSAgaXQgIGF0ICBjb21waWxlICB0aW1lICBieSBlZGl0aW5nCi1pbmNsdWRlL3Njc2kvc2cuaCBhbmQgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIFNHX0JJR19CVUZGLgotCi1JZiB5b3UgdXNlIGEgc2Nhbm5lciB3aXRoIFNBTkUgKFNjYW5uZXIgQWNjZXNzIE5vdyBFYXN5KSB5b3UgbWlnaHQgd2FudCB0byBzZXQKLXRoaXMgdG8gYSBoaWdoZXIgdmFsdWUuIFJlZmVyIHRvIHRoZSBTQU5FIGRvY3VtZW50YXRpb24gb24gdGhpcyBpc3N1ZS4KLQotbW9kcHJvYmUKLS0tLS0tLS0tCi0KLVRoZSBsb2NhdGlvbiAgd2hlcmUgIHRoZSAgbW9kcHJvYmUgIGJpbmFyeSAgaXMgIGxvY2F0ZWQuICBUaGUga2VybmVsIHVzZXMgdGhpcwotcHJvZ3JhbSB0byBsb2FkIG1vZHVsZXMgb24gZGVtYW5kLgotCi11bmtub3duX25taV9wYW5pYwotLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIHZhbHVlIGluIHRoaXMgZmlsZSBhZmZlY3RzIGJlaGF2aW9yIG9mIGhhbmRsaW5nIE5NSS4gV2hlbiB0aGUgdmFsdWUgaXMKLW5vbi16ZXJvLCB1bmtub3duIE5NSSBpcyB0cmFwcGVkIGFuZCB0aGVuIHBhbmljIG9jY3Vycy4gQXQgdGhhdCB0aW1lLCBrZXJuZWwKLWRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpcyBkaXNwbGF5ZWQgb24gY29uc29sZS4KLQotTk1JIHN3aXRjaCB0aGF0IG1vc3QgSUEzMiBzZXJ2ZXJzIGhhdmUgZmlyZXMgdW5rbm93biBOTUkgdXAsIGZvciBleGFtcGxlLgotSWYgYSBzeXN0ZW0gaGFuZ3MgdXAsIHRyeSBwcmVzc2luZyB0aGUgTk1JIHN3aXRjaC4KLQotcGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGRlZmF1bHQgTGludXggYmVoYXZpb3VyIG9uIGFuIE5NSSBvZiBlaXRoZXIgbWVtb3J5IG9yIHVua25vd24gaXMgdG8gY29udGludWUKLW9wZXJhdGlvbi4gRm9yIG1hbnkgZW52aXJvbm1lbnRzIHN1Y2ggYXMgc2NpZW50aWZpYyBjb21wdXRpbmcgaXQgaXMgcHJlZmVyYWJsZQotdGhhdCB0aGUgYm94IGlzIHRha2VuIG91dCBhbmQgdGhlIGVycm9yIGRlYWx0IHdpdGggdGhhbiBhbiB1bmNvcnJlY3RlZAotcGFyaXR5L0VDQyBlcnJvciBnZXQgcHJvcG9nYXRlZC4KLQotQSBzbWFsbCBudW1iZXIgb2Ygc3lzdGVtcyBkbyBnZW5lcmF0ZSBOTUkncyBmb3IgYml6YXJyZSByYW5kb20gcmVhc29ucyBzdWNoIGFzCi1wb3dlciBtYW5hZ2VtZW50IHNvIHRoZSBkZWZhdWx0IGlzIG9mZi4gVGhhdCBzeXNjdGwgd29ya3MgbGlrZSB0aGUgZXhpc3RpbmcKLXBhbmljIGNvbnRyb2xzIGFscmVhZHkgaW4gdGhhdCBkaXJlY3RvcnkuCi0KLW5taV93YXRjaGRvZwotLS0tLS0tLS0tLS0tCi0KLUVuYWJsZXMvRGlzYWJsZXMgdGhlIE5NSSB3YXRjaGRvZyBvbiB4ODYgc3lzdGVtcy4gIFdoZW4gdGhlIHZhbHVlIGlzIG5vbi16ZXJvCi10aGUgTk1JIHdhdGNoZG9nIGlzIGVuYWJsZWQgYW5kIHdpbGwgY29udGludW91c2x5IHRlc3QgYWxsIG9ubGluZSBjcHVzIHRvCi1kZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhleSBhcmUgc3RpbGwgZnVuY3Rpb25pbmcgcHJvcGVybHkuIEN1cnJlbnRseSwKLXBhc3NpbmcgIm5taV93YXRjaGRvZz0iIHBhcmFtZXRlciBhdCBib290IHRpbWUgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb24KLXRvIHdvcmsuCi0KLUlmIExBUElDIE5NSSB3YXRjaGRvZyBtZXRob2QgaXMgaW4gdXNlIChubWlfd2F0Y2hkb2c9MiBrZXJuZWwgcGFyYW1ldGVyKSwgdGhlCi1OTUkgd2F0Y2hkb2cgc2hhcmVzIHJlZ2lzdGVycyB3aXRoIG9wcm9maWxlLiBCeSBkaXNhYmxpbmcgdGhlIE5NSSB3YXRjaGRvZywKLW9wcm9maWxlIG1heSBoYXZlIG1vcmUgcmVnaXN0ZXJzIHRvIHV0aWxpemUuCi0KLW1zZ21uaQotLS0tLS0tCi0KLU1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2UgcXVldWUgaWRzIG9uIHRoZSBzeXN0ZW0uCi1UaGlzIHZhbHVlIHNjYWxlcyB0byB0aGUgYW1vdW50IG9mIGxvd21lbS4gSXQgaXMgYXV0b21hdGljYWxseSByZWNvbXB1dGVkCi11cG9uIG1lbW9yeSBhZGQvcmVtb3ZlIG9yIGlwYyBuYW1lc3BhY2UgY3JlYXRpb24vcmVtb3ZhbC4KLVdoZW4gYSB2YWx1ZSBpcyB3cml0dGVuIGludG8gdGhpcyBmaWxlLCBtc2dtbmkncyB2YWx1ZSBiZWNvbWVzIGZpeGVkLCBpLmUuIGl0Ci1pcyBub3QgcmVjb21wdXRlZCBhbnltb3JlIHdoZW4gb25lIG9mIHRoZSBhYm92ZSBldmVudHMgb2NjdXJzLgotVXNlIGF1dG9fbXNnbW5pIHRvIGNoYW5nZSB0aGlzIGJlaGF2aW9yLgotCi1hdXRvX21zZ21uaQotLS0tLS0tLS0tLS0KLQotRW5hYmxlcy9EaXNhYmxlcyBhdXRvbWF0aWMgcmVjb21wdXRpbmcgb2YgbXNnbW5pIHVwb24gbWVtb3J5IGFkZC9yZW1vdmUgb3IKLXVwb24gaXBjIG5hbWVzcGFjZSBjcmVhdGlvbi9yZW1vdmFsIChzZWUgdGhlIG1zZ21uaSBkZXNjcmlwdGlvbiBhYm92ZSkuCi1FY2hvaW5nICIxIiBpbnRvIHRoaXMgZmlsZSBlbmFibGVzIG1zZ21uaSBhdXRvbWF0aWMgcmVjb21wdXRpbmcuCi1FY2hvaW5nICIwIiB0dXJucyBpdCBvZmYuCi1hdXRvX21zZ21uaSBkZWZhdWx0IHZhbHVlIGlzIDEuCi0KLQotMi40IC9wcm9jL3N5cy92bSAtIFRoZSB2aXJ0dWFsIG1lbW9yeSBzdWJzeXN0ZW0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVBsZWFzZSBzZWU6IERvY3VtZW50YXRpb24vc3lzY3Rscy92bS50eHQgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlc2UKK1BsZWFzZSBzZWU6IERvY3VtZW50YXRpb24vc3lzY3Rscy8gZGlyZWN0b3J5IGZvciBkZXNjcmlwdGlvbnMgb2YgdGhlc2UKIGVudHJpZXMuCiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3VtbWFyeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0YWluIGFzcGVjdHMgIG9mICBrZXJuZWwgIGJlaGF2aW9yICBjYW4gYmUgbW9kaWZpZWQgYXQgcnVudGltZSwgd2l0aG91dCB0aGUKK25lZWQgdG8gIHJlY29tcGlsZSAgdGhlIGtlcm5lbCwgb3IgZXZlbiB0byByZWJvb3QgdGhlIHN5c3RlbS4gVGhlIGZpbGVzIGluIHRoZQorL3Byb2Mvc3lzIHRyZWUgIGNhbiAgbm90IG9ubHkgYmUgcmVhZCwgYnV0IGFsc28gbW9kaWZpZWQuIFlvdSBjYW4gdXNlIHRoZSBlY2hvCitjb21tYW5kIHRvIHdyaXRlIHZhbHVlIGludG8gdGhlc2UgZmlsZXMsIHRoZXJlYnkgY2hhbmdpbmcgdGhlIGRlZmF1bHQgc2V0dGluZ3MKK29mIHRoZSBrZXJuZWwuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotMi41IC9wcm9jL3N5cy9kZXYgLSBEZXZpY2Ugc3BlY2lmaWMgcGFyYW1ldGVycwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDSEFQVEVSIDM6IFBFUi1QUk9DRVNTIFBBUkFNRVRFUlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1DdXJyZW50bHkgdGhlcmUgaXMgb25seSBzdXBwb3J0IGZvciBDRFJPTSBkcml2ZXMsIGFuZCBmb3IgdGhvc2UsIHRoZXJlIGlzIG9ubHkKLW9uZSByZWFkLW9ubHkgIGZpbGUgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQ0QtUk9NIGRyaXZlcyBhdHRhY2hlZCB0bwotdGhlIHN5c3RlbToKLQotICA+Y2F0IC9wcm9jL3N5cy9kZXYvY2Ryb20vaW5mbyAKLSAgQ0QtUk9NIGluZm9ybWF0aW9uLCBJZDogY2Ryb20uYyAyLjU1IDE5OTkvMDQvMjUgCi0gICAKLSAgZHJpdmUgbmFtZTogICAgICAgICAgICAgc3IwICAgICBoZGIgCi0gIGRyaXZlIHNwZWVkOiAgICAgICAgICAgIDMyICAgICAgNDAgCi0gIGRyaXZlICMgb2Ygc2xvdHM6ICAgICAgIDEgICAgICAgMCAKLSAgQ2FuIGNsb3NlIHRyYXk6ICAgICAgICAgMSAgICAgICAxIAotICBDYW4gb3BlbiB0cmF5OiAgICAgICAgICAxICAgICAgIDEgCi0gIENhbiBsb2NrIHRyYXk6ICAgICAgICAgIDEgICAgICAgMSAKLSAgQ2FuIGNoYW5nZSBzcGVlZDogICAgICAgMSAgICAgICAxIAotICBDYW4gc2VsZWN0IGRpc2s6ICAgICAgICAwICAgICAgIDEgCi0gIENhbiByZWFkIG11bHRpc2Vzc2lvbjogIDEgICAgICAgMSAKLSAgQ2FuIHJlYWQgTUNOOiAgICAgICAgICAgMSAgICAgICAxIAotICBSZXBvcnRzIG1lZGlhIGNoYW5nZWQ6ICAxICAgICAgIDEgCi0gIENhbiBwbGF5IGF1ZGlvOiAgICAgICAgIDEgICAgICAgMSAKLQotCi1Zb3Ugc2VlIHR3byBkcml2ZXMsIHNyMCBhbmQgaGRiLCBhbG9uZyB3aXRoIGEgbGlzdCBvZiB0aGVpciBmZWF0dXJlcy4KLQotMi42IC9wcm9jL3N5cy9zdW5ycGMgLSBSZW1vdGUgcHJvY2VkdXJlIGNhbGxzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBkaXJlY3RvcnkgIGNvbnRhaW5zIGZvdXIgZmlsZXMsIHdoaWNoIGVuYWJsZSBvciBkaXNhYmxlIGRlYnVnZ2luZyBmb3IgdGhlCi1SUEMgZnVuY3Rpb25zIE5GUywgTkZTLWRhZW1vbiwgUlBDIGFuZCBOTE0uIFRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgMC4gVGhleSBjYW4KLWJlIHNldCB0byBvbmUgdG8gdHVybiBkZWJ1Z2dpbmcgb24uIChUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwIGZvciBlYWNoKQotCi0yLjcgL3Byb2Mvc3lzL25ldCAtIE5ldHdvcmtpbmcgc3R1ZmYKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgaW50ZXJmYWNlICB0byAgdGhlICBuZXR3b3JraW5nICBwYXJ0cyAgb2YgIHRoZSAga2VybmVsICBpcyAgbG9jYXRlZCAgaW4KLS9wcm9jL3N5cy9uZXQuIFRhYmxlICAyLTMgIHNob3dzIGFsbCBwb3NzaWJsZSBzdWJkaXJlY3Rvcmllcy4gWW91IG1heSBzZWUgb25seQotc29tZSBvZiB0aGVtLCBkZXBlbmRpbmcgb24geW91ciBrZXJuZWwncyBjb25maWd1cmF0aW9uLgotCi0KLVRhYmxlIDItMzogU3ViZGlyZWN0b3JpZXMgaW4gL3Byb2Mvc3lzL25ldCAKLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotIERpcmVjdG9yeSBDb250ZW50ICAgICAgICAgICAgIERpcmVjdG9yeSAgQ29udGVudCAgICAgICAgICAgIAotIGNvcmUgICAgICBHZW5lcmFsIHBhcmFtZXRlciAgIGFwcGxldGFsayAgQXBwbGV0YWxrIHByb3RvY29sIAotIHVuaXggICAgICBVbml4IGRvbWFpbiBzb2NrZXRzIG5ldHJvbSAgICAgTkVUL1JPTSAgICAgICAgICAgIAotIDgwMiAgICAgICBFODAyIHByb3RvY29sICAgICAgIGF4MjUgICAgICAgQVgyNSAgICAgICAgICAgICAgIAotIGV0aGVybmV0ICBFdGhlcm5ldCBwcm90b2NvbCAgIHJvc2UgICAgICAgWC4yNSBQTFAgbGF5ZXIgICAgIAotIGlwdjQgICAgICBJUCB2ZXJzaW9uIDQgICAgICAgIHgyNSAgICAgICAgWC4yNSBwcm90b2NvbCAgICAgIAotIGlweCAgICAgICBJUFggICAgICAgICAgICAgICAgIHRva2VuLXJpbmcgSUJNIHRva2VuIHJpbmcgICAgIAotIGJyaWRnZSAgICBCcmlkZ2luZyAgICAgICAgICAgIGRlY25ldCAgICAgREVDIG5ldCAgICAgICAgICAgIAotIGlwdjYgICAgICBJUCB2ZXJzaW9uIDYgICAgICAgICAgICAgICAgICAgCi0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotV2Ugd2lsbCAgY29uY2VudHJhdGUgIG9uIElQIG5ldHdvcmtpbmcgaGVyZS4gU2luY2UgQVgxNSwgWC4yNSwgYW5kIERFQyBOZXQgYXJlCi1vbmx5IG1pbm9yIHBsYXllcnMgaW4gdGhlIExpbnV4IHdvcmxkLCB3ZSdsbCBza2lwIHRoZW0gaW4gdGhpcyBjaGFwdGVyLiBZb3UnbGwKLWZpbmQgc29tZSAgc2hvcnQgIGluZm8gb24gQXBwbGV0YWxrIGFuZCBJUFggZnVydGhlciBvbiBpbiB0aGlzIGNoYXB0ZXIuIFJldmlldwotdGhlIG9ubGluZSAgZG9jdW1lbnRhdGlvbiAgYW5kIHRoZSBrZXJuZWwgc291cmNlIHRvIGdldCBhIGRldGFpbGVkIHZpZXcgb2YgdGhlCi1wYXJhbWV0ZXJzIGZvciAgdGhvc2UgIHByb3RvY29scy4gIEluICB0aGlzICBzZWN0aW9uICB3ZSdsbCAgZGlzY3VzcyAgdGhlCi1zdWJkaXJlY3RvcmllcyBwcmludGVkICBpbiAgYm9sZCBsZXR0ZXJzIGluIHRoZSB0YWJsZSBhYm92ZS4gQXMgZGVmYXVsdCB2YWx1ZXMKLWFyZSBzdWl0YWJsZSBmb3IgbW9zdCBuZWVkcywgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGFuZ2UgdGhlc2UgdmFsdWVzLgotCi0vcHJvYy9zeXMvbmV0L2NvcmUgLSBOZXR3b3JrIGNvcmUgb3B0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotcm1lbV9kZWZhdWx0Ci0tLS0tLS0tLS0tLS0KLQotVGhlIGRlZmF1bHQgc2V0dGluZyBvZiB0aGUgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGluIGJ5dGVzLgotCi1ybWVtX21heAotLS0tLS0tLS0KLQotVGhlIG1heGltdW0gcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemUgaW4gYnl0ZXMuCi0KLXdtZW1fZGVmYXVsdAotLS0tLS0tLS0tLS0tCi0KLVRoZSBkZWZhdWx0IHNldHRpbmcgKGluIGJ5dGVzKSBvZiB0aGUgc29ja2V0IHNlbmQgYnVmZmVyLgotCi13bWVtX21heAotLS0tLS0tLS0KLQotVGhlIG1heGltdW0gc2VuZCBzb2NrZXQgYnVmZmVyIHNpemUgaW4gYnl0ZXMuCi0KLW1lc3NhZ2VfYnVyc3QgYW5kIG1lc3NhZ2VfY29zdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZXNlIHBhcmFtZXRlcnMgIGFyZSB1c2VkIHRvIGxpbWl0IHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHdyaXR0ZW4gdG8gdGhlIGtlcm5lbAotbG9nIGZyb20gIHRoZSAgbmV0d29ya2luZyAgY29kZS4gIFRoZXkgIGVuZm9yY2UgIGEgIHJhdGUgIGxpbWl0ICB0byAgbWFrZSAgYQotZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrICBpbXBvc3NpYmxlLiBBIGhpZ2hlciBtZXNzYWdlX2Nvc3QgZmFjdG9yLCByZXN1bHRzIGluCi1mZXdlciBtZXNzYWdlcyB0aGF0IHdpbGwgYmUgd3JpdHRlbi4gTWVzc2FnZV9idXJzdCBjb250cm9scyB3aGVuIG1lc3NhZ2VzIHdpbGwKLWJlIGRyb3BwZWQuICBUaGUgIGRlZmF1bHQgIHNldHRpbmdzICBsaW1pdCAgd2FybmluZyBtZXNzYWdlcyB0byBvbmUgZXZlcnkgZml2ZQotc2Vjb25kcy4KLQotd2FybmluZ3MKLS0tLS0tLS0tCi0KLVRoaXMgY29udHJvbHMgY29uc29sZSBtZXNzYWdlcyBmcm9tIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgY2FuIG9jY3VyIGJlY2F1c2UKLW9mIHByb2JsZW1zIG9uIHRoZSBuZXR3b3JrIGxpa2UgZHVwbGljYXRlIGFkZHJlc3Mgb3IgYmFkIGNoZWNrc3Vtcy4gTm9ybWFsbHksCi10aGlzIHNob3VsZCBiZSBlbmFibGVkLCBidXQgaWYgdGhlIHByb2JsZW0gcGVyc2lzdHMgdGhlIG1lc3NhZ2VzIGNhbiBiZQotZGlzYWJsZWQuCi0KLW5ldGRldl9idWRnZXQKLS0tLS0tLS0tLS0tLS0KLQotTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0YWtlbiBmcm9tIGFsbCBpbnRlcmZhY2VzIGluIG9uZSBwb2xsaW5nIGN5Y2xlIChOQVBJCi1wb2xsKS4gSW4gb25lIHBvbGxpbmcgY3ljbGUgaW50ZXJmYWNlcyB3aGljaCBhcmUgcmVnaXN0ZXJlZCB0byBwb2xsaW5nIGFyZQotcHJvYmVkIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLiBUaGUgbGltaXQgb2YgcGFja2V0cyBpbiBvbmUgc3VjaCBwcm9iZSBjYW4gYmUKLXNldCBwZXItZGV2aWNlIHZpYSBzeXNmcyBjbGFzcy9uZXQvPGRldmljZT4vd2VpZ2h0IC4KLQotbmV0ZGV2X21heF9iYWNrbG9nCi0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTWF4aW11bSBudW1iZXIgIG9mICBwYWNrZXRzLCAgcXVldWVkICBvbiAgdGhlICBJTlBVVCAgc2lkZSwgd2hlbiB0aGUgaW50ZXJmYWNlCi1yZWNlaXZlcyBwYWNrZXRzIGZhc3RlciB0aGFuIGtlcm5lbCBjYW4gcHJvY2VzcyB0aGVtLgotCi1vcHRtZW1fbWF4Ci0tLS0tLS0tLS0tCi0KLU1heGltdW0gYW5jaWxsYXJ5IGJ1ZmZlciBzaXplIGFsbG93ZWQgcGVyIHNvY2tldC4gQW5jaWxsYXJ5IGRhdGEgaXMgYSBzZXF1ZW5jZQotb2Ygc3RydWN0IGNtc2doZHIgc3RydWN0dXJlcyB3aXRoIGFwcGVuZGVkIGRhdGEuCi0KLS9wcm9jL3N5cy9uZXQvdW5peCAtIFBhcmFtZXRlcnMgZm9yIFVuaXggZG9tYWluIHNvY2tldHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlcmUgYXJlICBvbmx5ICB0d28gIGZpbGVzICBpbiB0aGlzIHN1YmRpcmVjdG9yeS4gVGhleSBjb250cm9sIHRoZSBkZWxheXMgZm9yCi1kZWxldGluZyBhbmQgZGVzdHJveWluZyBzb2NrZXQgZGVzY3JpcHRvcnMuCi0KLTIuOCAvcHJvYy9zeXMvbmV0L2lwdjQgLSBJUFY0IHNldHRpbmdzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JUCB2ZXJzaW9uICA0ICBpcyAgc3RpbGwgdGhlIG1vc3QgdXNlZCBwcm90b2NvbCBpbiBVbml4IG5ldHdvcmtpbmcuIEl0IHdpbGwgYmUKLXJlcGxhY2VkIGJ5ICBJUCB2ZXJzaW9uIDYgaW4gdGhlIG5leHQgY291cGxlIG9mIHllYXJzLCBidXQgZm9yIHRoZSBtb21lbnQgaXQncwotdGhlIGRlICBmYWN0byAgc3RhbmRhcmQgIGZvciAgdGhlICBpbnRlcm5ldCAgYW5kICBpcyAgdXNlZCAgaW4gbW9zdCBuZXR3b3JraW5nCi1lbnZpcm9ubWVudHMgYXJvdW5kICB0aGUgIHdvcmxkLiAgQmVjYXVzZSAgb2YgdGhlIGltcG9ydGFuY2Ugb2YgdGhpcyBwcm90b2NvbCwKLXdlJ2xsIGhhdmUgYSBkZWVwZXIgbG9vayBpbnRvIHRoZSBzdWJ0cmVlIGNvbnRyb2xsaW5nIHRoZSBiZWhhdmlvciBvZiB0aGUgSVB2NAotc3Vic3lzdGVtIG9mIHRoZSBMaW51eCBrZXJuZWwuCi0KLUxldCdzIHN0YXJ0IHdpdGggdGhlIGVudHJpZXMgaW4gL3Byb2Mvc3lzL25ldC9pcHY0LgotCi1JQ01QIHNldHRpbmdzCi0tLS0tLS0tLS0tLS0tCi0KLWljbXBfZWNob19pZ25vcmVfYWxsIGFuZCBpY21wX2VjaG9faWdub3JlX2Jyb2FkY2FzdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVHVybiBvbiAoMSkgb3Igb2ZmICgwKSwgaWYgdGhlIGtlcm5lbCBzaG91bGQgaWdub3JlIGFsbCBJQ01QIEVDSE8gcmVxdWVzdHMsIG9yCi1qdXN0IHRob3NlIHRvIGJyb2FkY2FzdCBhbmQgbXVsdGljYXN0IGFkZHJlc3Nlcy4KLQotUGxlYXNlIG5vdGUgdGhhdCBpZiB5b3UgYWNjZXB0IElDTVAgZWNobyByZXF1ZXN0cyB3aXRoIGEgYnJvYWRjYXN0L211bHRpXC1jYXN0Ci1kZXN0aW5hdGlvbiBhZGRyZXNzICB5b3VyICBuZXR3b3JrICBtYXkgIGJlICB1c2VkIGFzIGFuIGV4cGxvZGVyIGZvciBkZW5pYWwgb2YKLXNlcnZpY2UgcGFja2V0IGZsb29kaW5nIGF0dGFja3MgdG8gb3RoZXIgaG9zdHMuCi0KLWljbXBfZGVzdHVucmVhY2hfcmF0ZSwgaWNtcF9lY2hvcmVwbHlfcmF0ZSwgaWNtcF9wYXJhbXByb2JfcmF0ZSBhbmQgaWNtcF90aW1lZXhlZWRfcmF0ZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVNldHMgbGltaXRzICBmb3IgIHNlbmRpbmcgIElDTVAgIHBhY2tldHMgIHRvIHNwZWNpZmljIHRhcmdldHMuIEEgdmFsdWUgb2YgemVybwotZGlzYWJsZXMgYWxsICBsaW1pdGluZy4gIEFueSAgcG9zaXRpdmUgIHZhbHVlIHNldHMgdGhlIG1heGltdW0gcGFja2FnZSByYXRlIGluCi1odW5kcmVkdGggb2YgYSBzZWNvbmQgKG9uIEludGVsIHN5c3RlbXMpLgotCi1JUCBzZXR0aW5ncwotLS0tLS0tLS0tLS0KLQotaXBfYXV0b2NvbmZpZwotLS0tLS0tLS0tLS0tLQotCi1UaGlzIGZpbGUgY29udGFpbnMgdGhlIG51bWJlciBvbmUgaWYgdGhlIGhvc3QgcmVjZWl2ZWQgaXRzIElQIGNvbmZpZ3VyYXRpb24gYnkKLVJBUlAsIEJPT1RQLCBESENQIG9yIGEgc2ltaWxhciBtZWNoYW5pc20uIE90aGVyd2lzZSBpdCBpcyB6ZXJvLgotCi1pcF9kZWZhdWx0X3R0bAotLS0tLS0tLS0tLS0tLS0KLQotVFRMIChUaW1lICBUbyAgTGl2ZSkgZm9yIElQdjQgaW50ZXJmYWNlcy4gVGhpcyBpcyBzaW1wbHkgdGhlIG1heGltdW0gbnVtYmVyIG9mCi1ob3BzIGEgcGFja2V0IG1heSB0cmF2ZWwuCi0KLWlwX2R5bmFkZHIKLS0tLS0tLS0tLS0KLQotRW5hYmxlIGR5bmFtaWMgIHNvY2tldCAgYWRkcmVzcyByZXdyaXRpbmcgb24gaW50ZXJmYWNlIGFkZHJlc3MgY2hhbmdlLiBUaGlzIGlzCi11c2VmdWwgZm9yIGRpYWx1cCBpbnRlcmZhY2Ugd2l0aCBjaGFuZ2luZyBJUCBhZGRyZXNzZXMuCi0KLWlwX2ZvcndhcmQKLS0tLS0tLS0tLS0KLQotRW5hYmxlIG9yICBkaXNhYmxlIGZvcndhcmRpbmcgb2YgSVAgcGFja2FnZXMgYmV0d2VlbiBpbnRlcmZhY2VzLiBDaGFuZ2luZyB0aGlzCi12YWx1ZSByZXNldHMgIGFsbCBvdGhlciBwYXJhbWV0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLiBUaGV5IGRpZmZlciBpZiB0aGUKLWtlcm5lbCBpcyBjb25maWd1cmVkIGFzIGhvc3Qgb3Igcm91dGVyLgotCi1pcF9sb2NhbF9wb3J0X3JhbmdlCi0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVJhbmdlIG9mICBwb3J0cyAgdXNlZCAgYnkgIFRDUCAgYW5kIFVEUCB0byBjaG9vc2UgdGhlIGxvY2FsIHBvcnQuIENvbnRhaW5zIHR3bwotbnVtYmVycywgdGhlICBmaXJzdCAgbnVtYmVyICBpcyB0aGUgbG93ZXN0IHBvcnQsIHRoZSBzZWNvbmQgbnVtYmVyIHRoZSBoaWdoZXN0Ci1sb2NhbCBwb3J0LiAgRGVmYXVsdCAgaXMgIDEwMjQtNDk5OS4gIFNob3VsZCAgYmUgIGNoYW5nZWQgIHRvICAzMjc2OC02MTAwMCBmb3IKLWhpZ2gtdXNhZ2Ugc3lzdGVtcy4KLQotaXBfbm9fcG10dV9kaXNjCi0tLS0tLS0tLS0tLS0tLS0KLQotR2xvYmFsIHN3aXRjaCAgdG8gIHR1cm4gIHBhdGggIE1UVSAgZGlzY292ZXJ5IG9mZi4gSXQgY2FuIGFsc28gYmUgc2V0IG9uIGEgcGVyCi1zb2NrZXQgYmFzaXMgYnkgdGhlIGFwcGxpY2F0aW9ucyBvciBvbiBhIHBlciByb3V0ZSBiYXNpcy4KLQotaXBfbWFzcV9kZWJ1ZwotLS0tLS0tLS0tLS0tLQotCi1FbmFibGUvZGlzYWJsZSBkZWJ1Z2dpbmcgb2YgSVAgbWFzcXVlcmFkaW5nLgotCi1JUCBmcmFnbWVudGF0aW9uIHNldHRpbmdzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWlwZnJhZ19oaWdoX3RyYXNoIGFuZCBpcGZyYWdfbG93X3RyYXNoCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NYXhpbXVtIG1lbW9yeSAgdXNlZCB0byByZWFzc2VtYmxlIElQIGZyYWdtZW50cy4gV2hlbiBpcGZyYWdfaGlnaF90aHJlc2ggYnl0ZXMKLW9mIG1lbW9yeSAgaXMgIGFsbG9jYXRlZCAgZm9yICB0aGlzICBwdXJwb3NlLCAgdGhlICBmcmFnbWVudCBoYW5kbGVyIHdpbGwgdG9zcwotcGFja2V0cyB1bnRpbCBpcGZyYWdfbG93X3RocmVzaCBpcyByZWFjaGVkLgotCi1pcGZyYWdfdGltZQotLS0tLS0tLS0tLS0KLQotVGltZSBpbiBzZWNvbmRzIHRvIGtlZXAgYW4gSVAgZnJhZ21lbnQgaW4gbWVtb3J5LgotCi1UQ1Agc2V0dGluZ3MKLS0tLS0tLS0tLS0tLQotCi10Y3BfZWNuCi0tLS0tLS0tCi0KLVRoaXMgZmlsZSBjb250cm9scyB0aGUgdXNlIG9mIHRoZSBFQ04gYml0IGluIHRoZSBJUHY0IGhlYWRlcnMuIFRoaXMgaXMgYSBuZXcKLWZlYXR1cmUgYWJvdXQgRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24sIGJ1dCBzb21lIHJvdXRlcnMgYW5kIGZpcmV3YWxscwotYmxvY2sgdHJhZmZpYyB0aGF0IGhhcyB0aGlzIGJpdCBzZXQsIHNvIGl0IGNvdWxkIGJlIG5lY2Vzc2FyeSB0byBlY2hvIDAgdG8KLS9wcm9jL3N5cy9uZXQvaXB2NC90Y3BfZWNuIGlmIHlvdSB3YW50IHRvIHRhbGsgdG8gdGhlc2Ugc2l0ZXMuIEZvciBtb3JlIGluZm8KLXlvdSBjb3VsZCByZWFkIFJGQzI0ODEuCi0KLXRjcF9yZXRyYW5zX2NvbGxhcHNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1CdWctdG8tYnVnIGNvbXBhdGliaWxpdHkgd2l0aCBzb21lIGJyb2tlbiBwcmludGVycy4gT24gcmV0cmFuc21pdCwgdHJ5IHRvIHNlbmQKLWxhcmdlciBwYWNrZXRzIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gY2VydGFpbiBUQ1Agc3RhY2tzLiBDYW4gYmUgdHVybmVkIG9mZiBieQotc2V0dGluZyBpdCB0byB6ZXJvLgotCi10Y3Bfa2VlcGFsaXZlX3Byb2JlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTnVtYmVyIG9mICBrZWVwICBhbGl2ZSAgcHJvYmVzICBUQ1AgIHNlbmRzICBvdXQsICB1bnRpbCAgaXQgIGRlY2lkZXMgIHRoYXQgdGhlCi1jb25uZWN0aW9uIGlzIGJyb2tlbi4KLQotdGNwX2tlZXBhbGl2ZV90aW1lCi0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSG93IG9mdGVuICBUQ1AgIHNlbmRzIG91dCBrZWVwIGFsaXZlIG1lc3NhZ2VzLCB3aGVuIGtlZXAgYWxpdmUgaXMgZW5hYmxlZC4gVGhlCi1kZWZhdWx0IGlzIDIgaG91cnMuCi0KLXRjcF9zeW5fcmV0cmllcwotLS0tLS0tLS0tLS0tLS0tCi0KLU51bWJlciBvZiAgdGltZXMgIGluaXRpYWwgIFNZTnMgIGZvciAgYSAgVENQICBjb25uZWN0aW9uICBhdHRlbXB0ICB3aWxsICBiZQotcmV0cmFuc21pdHRlZC4gU2hvdWxkICBub3QgIGJlICBoaWdoZXIgIHRoYW4gMjU1LiBUaGlzIGlzIG9ubHkgdGhlIHRpbWVvdXQgZm9yCi1vdXRnb2luZyBjb25uZWN0aW9ucywgIGZvciAgaW5jb21pbmcgIGNvbm5lY3Rpb25zIHRoZSBudW1iZXIgb2YgcmV0cmFuc21pdHMgaXMKLWRlZmluZWQgYnkgdGNwX3JldHJpZXMxLgotCi10Y3Bfc2FjawotLS0tLS0tLS0KLQotRW5hYmxlIHNlbGVjdCBhY2tub3dsZWRnbWVudHMgYWZ0ZXIgUkZDMjAxOC4KLQotdGNwX3RpbWVzdGFtcHMKLS0tLS0tLS0tLS0tLS0tCi0KLUVuYWJsZSB0aW1lc3RhbXBzIGFzIGRlZmluZWQgaW4gUkZDMTMyMy4KLQotdGNwX3N0ZHVyZwotLS0tLS0tLS0tLQotCi1FbmFibGUgdGhlICBzdHJpY3QgIFJGQzc5MyBpbnRlcnByZXRhdGlvbiBvZiB0aGUgVENQIHVyZ2VudCBwb2ludGVyIGZpZWxkLiBUaGUKLWRlZmF1bHQgaXMgIHRvICB1c2UgIHRoZSAgQlNEICBjb21wYXRpYmxlIGludGVycHJldGF0aW9uIG9mIHRoZSB1cmdlbnQgcG9pbnRlcgotcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGJ5dGUgYWZ0ZXIgdGhlIHVyZ2VudCBkYXRhLiBUaGUgUkZDNzkzIGludGVycHJldGF0aW9uIGlzCi10byBoYXZlICBpdCAgcG9pbnQgIHRvICB0aGUgbGFzdCBieXRlIG9mIHVyZ2VudCBkYXRhLiBFbmFibGluZyB0aGlzIG9wdGlvbiBtYXkKLWxlYWQgdG8gaW50ZXJvcGVyYWJpbGl0eSBwcm9ibGVtcy4gRGlzYWJsZWQgYnkgZGVmYXVsdC4KLQotdGNwX3N5bmNvb2tpZXMKLS0tLS0tLS0tLS0tLS0tCi0KLU9ubHkgdmFsaWQgIHdoZW4gIHRoZSAga2VybmVsICB3YXMgIGNvbXBpbGVkICB3aXRoIENPTkZJR19TWU5DT09LSUVTLiBTZW5kIG91dAotc3luY29va2llcyB3aGVuICB0aGUgIHN5biBiYWNrbG9nIHF1ZXVlIG9mIGEgc29ja2V0IG92ZXJmbG93cy4gVGhpcyBpcyB0byB3YXJkCi1vZmYgdGhlIGNvbW1vbiAnc3luIGZsb29kIGF0dGFjaycuIERpc2FibGVkIGJ5IGRlZmF1bHQuCi0KLU5vdGUgdGhhdCAgdGhlICBjb25jZXB0ICBvZiBhIHNvY2tldCBiYWNrbG9nIGlzIGFiYW5kb25lZC4gVGhpcyBtZWFucyB0aGUgcGVlcgotbWF5IG5vdCAgcmVjZWl2ZSAgcmVsaWFibGUgIGVycm9yICBtZXNzYWdlcyAgZnJvbSAgYW4gIG92ZXIgbG9hZGVkIHNlcnZlciB3aXRoCi1zeW5jb29raWVzIGVuYWJsZWQuCi0KLXRjcF93aW5kb3dfc2NhbGluZwotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUVuYWJsZSB3aW5kb3cgc2NhbGluZyBhcyBkZWZpbmVkIGluIFJGQzEzMjMuCi0KLXRjcF9maW5fdGltZW91dAotLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBsZW5ndGggIG9mICB0aW1lICBpbiAgc2Vjb25kcyAgaXQgIHRha2VzIHRvIHJlY2VpdmUgYSBmaW5hbCBGSU4gYmVmb3JlIHRoZQotc29ja2V0IGlzICBhbHdheXMgIGNsb3NlZC4gIFRoaXMgIGlzICBzdHJpY3RseSAgYSAgdmlvbGF0aW9uICBvZiAgdGhlICBUQ1AKLXNwZWNpZmljYXRpb24sIGJ1dCByZXF1aXJlZCB0byBwcmV2ZW50IGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MuCi0KLXRjcF9tYXhfa2FfcHJvYmVzCi0tLS0tLS0tLS0tLS0tLS0tLQotCi1JbmRpY2F0ZXMgaG93ICBtYW55ICBrZWVwIGFsaXZlIHByb2JlcyBhcmUgc2VudCBwZXIgc2xvdyB0aW1lciBydW4uIFNob3VsZCBub3QKLWJlIHNldCB0b28gaGlnaCB0byBwcmV2ZW50IGJ1cnN0cy4KLQotdGNwX21heF9zeW5fYmFja2xvZwotLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1MZW5ndGggb2YgIHRoZSBwZXIgc29ja2V0IGJhY2tsb2cgcXVldWUuIFNpbmNlIExpbnV4IDIuMiB0aGUgYmFja2xvZyBzcGVjaWZpZWQKLWluIGxpc3RlbigyKSAgb25seSAgc3BlY2lmaWVzICB0aGUgIGxlbmd0aCAgb2YgIHRoZSAgYmFja2xvZyAgcXVldWUgb2YgYWxyZWFkeQotZXN0YWJsaXNoZWQgc29ja2V0cy4gV2hlbiBtb3JlIGNvbm5lY3Rpb24gcmVxdWVzdHMgYXJyaXZlIExpbnV4IHN0YXJ0cyB0byBkcm9wCi1wYWNrZXRzLiBXaGVuICBzeW5jb29raWVzICBhcmUgIGVuYWJsZWQgdGhlIHBhY2tldHMgYXJlIHN0aWxsIGFuc3dlcmVkIGFuZCB0aGUKLW1heGltdW0gcXVldWUgaXMgZWZmZWN0aXZlbHkgaWdub3JlZC4KLQotdGNwX3JldHJpZXMxCi0tLS0tLS0tLS0tLS0KLQotRGVmaW5lcyBob3cgIG9mdGVuICBhbiAgYW5zd2VyICB0byAgYSAgVENQIGNvbm5lY3Rpb24gcmVxdWVzdCBpcyByZXRyYW5zbWl0dGVkCi1iZWZvcmUgZ2l2aW5nIHVwLgotCi10Y3BfcmV0cmllczIKLS0tLS0tLS0tLS0tLQotCi1EZWZpbmVzIGhvdyBvZnRlbiBhIFRDUCBwYWNrZXQgaXMgcmV0cmFuc21pdHRlZCBiZWZvcmUgZ2l2aW5nIHVwLgotCi1JbnRlcmZhY2Ugc3BlY2lmaWMgc2V0dGluZ3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JbiB0aGUgZGlyZWN0b3J5IC9wcm9jL3N5cy9uZXQvaXB2NC9jb25mIHlvdSdsbCBmaW5kIG9uZSBzdWJkaXJlY3RvcnkgZm9yIGVhY2gKLWludGVyZmFjZSB0aGUgIHN5c3RlbSAga25vd3MgYWJvdXQgYW5kIG9uZSBkaXJlY3RvcnkgY2FsbHMgYWxsLiBDaGFuZ2VzIGluIHRoZQotYWxsIHN1YmRpcmVjdG9yeSAgYWZmZWN0ICBhbGwgIGludGVyZmFjZXMsICB3aGVyZWFzICBjaGFuZ2VzICBpbiAgdGhlICBvdGhlcgotc3ViZGlyZWN0b3JpZXMgYWZmZWN0ICBvbmx5ICBvbmUgIGludGVyZmFjZS4gIEFsbCAgZGlyZWN0b3JpZXMgIGhhdmUgIHRoZSBzYW1lCi1lbnRyaWVzOgotCi1hY2NlcHRfcmVkaXJlY3RzCi0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgc3dpdGNoICBkZWNpZGVzICBpZiB0aGUga2VybmVsIGFjY2VwdHMgSUNNUCByZWRpcmVjdCBtZXNzYWdlcyBvciBub3QuIFRoZQotZGVmYXVsdCBpcyAneWVzJyBpZiB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgZm9yIGEgcmVndWxhciBob3N0IGFuZCAnbm8nIGZvciBhCi1yb3V0ZXIgY29uZmlndXJhdGlvbi4KLQotYWNjZXB0X3NvdXJjZV9yb3V0ZQotLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TaG91bGQgc291cmNlICByb3V0ZWQgIHBhY2thZ2VzICBiZSAgYWNjZXB0ZWQgIG9yICBkZWNsaW5lZC4gIFRoZSAgZGVmYXVsdCAgaXMKLWRlcGVuZGVudCBvbiAgdGhlICBrZXJuZWwgIGNvbmZpZ3VyYXRpb24uICBJdCdzICd5ZXMnIGZvciByb3V0ZXJzIGFuZCAnbm8nIGZvcgotaG9zdHMuCi0KLWJvb3RwX3JlbGF5Ci1+fn5+fn5+fn5+fgotCi1BY2NlcHQgcGFja2V0cyAgd2l0aCBzb3VyY2UgYWRkcmVzcyAwLmIuYy5kIHdpdGggZGVzdGluYXRpb25zIG5vdCB0byB0aGlzIGhvc3QKLWFzIGxvY2FsIG9uZXMuIEl0IGlzIHN1cHBvc2VkIHRoYXQgYSBCT09UUCByZWxheSBkYWVtb24gd2lsbCBjYXRjaCBhbmQgZm9yd2FyZAotc3VjaCBwYWNrZXRzLgotCi1UaGUgZGVmYXVsdCAgaXMgIDAsICBzaW5jZSB0aGlzIGZlYXR1cmUgaXMgbm90IGltcGxlbWVudGVkIHlldCAoa2VybmVsIHZlcnNpb24KLTIuMi4xMikuCi0KLWZvcndhcmRpbmcKLS0tLS0tLS0tLS0KLQotRW5hYmxlIG9yIGRpc2FibGUgSVAgZm9yd2FyZGluZyBvbiB0aGlzIGludGVyZmFjZS4KLQotbG9nX21hcnRpYW5zCi0tLS0tLS0tLS0tLS0KLQotTG9nIHBhY2tldHMgd2l0aCBzb3VyY2UgYWRkcmVzc2VzIHdpdGggbm8ga25vd24gcm91dGUgdG8ga2VybmVsIGxvZy4KLQotbWNfZm9yd2FyZGluZwotLS0tLS0tLS0tLS0tLQotCi1EbyBtdWx0aWNhc3Qgcm91dGluZy4gVGhlIGtlcm5lbCBuZWVkcyB0byBiZSBjb21waWxlZCB3aXRoIENPTkZJR19NUk9VVEUgYW5kIGEKLW11bHRpY2FzdCByb3V0aW5nIGRhZW1vbiBpcyByZXF1aXJlZC4KLQotcHJveHlfYXJwCi0tLS0tLS0tLS0KLQotRG9lcyAoMSkgb3IgZG9lcyBub3QgKDApIHBlcmZvcm0gcHJveHkgQVJQLgotCi1ycF9maWx0ZXIKLS0tLS0tLS0tLQotCi1JbnRlZ2VyIHZhbHVlIGRldGVybWluZXMgaWYgYSBzb3VyY2UgdmFsaWRhdGlvbiBzaG91bGQgYmUgbWFkZS4gMSBtZWFucyB5ZXMsIDAKLW1lYW5zIG5vLiAgRGlzYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGxvY2FsL2Jyb2FkY2FzdCBhZGRyZXNzIHNwb29maW5nIGlzIGFsd2F5cwotb24uCi0KLUlmIHlvdSAgc2V0IHRoaXMgdG8gMSBvbiBhIHJvdXRlciB0aGF0IGlzIHRoZSBvbmx5IGNvbm5lY3Rpb24gZm9yIGEgbmV0d29yayB0bwotdGhlIG5ldCwgIGl0ICB3aWxsICBwcmV2ZW50ICBzcG9vZmluZyAgYXR0YWNrcyAgYWdhaW5zdCB5b3VyIGludGVybmFsIG5ldHdvcmtzCi0oZXh0ZXJuYWwgYWRkcmVzc2VzICBjYW4gIHN0aWxsICBiZSAgc3Bvb2ZlZCksIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGFkZGl0aW9uYWwKLWZpcmV3YWxsIHJ1bGVzLgotCi1zZWN1cmVfcmVkaXJlY3RzCi0tLS0tLS0tLS0tLS0tLS0tCi0KLUFjY2VwdCBJQ01QICByZWRpcmVjdCAgbWVzc2FnZXMgIG9ubHkgIGZvciBnYXRld2F5cywgbGlzdGVkIGluIGRlZmF1bHQgZ2F0ZXdheQotbGlzdC4gRW5hYmxlZCBieSBkZWZhdWx0LgotCi1zaGFyZWRfbWVkaWEKLS0tLS0tLS0tLS0tLQotCi1JZiBpdCAgaXMgIG5vdCAgc2V0ICB0aGUga2VybmVsIGRvZXMgbm90IGFzc3VtZSB0aGF0IGRpZmZlcmVudCBzdWJuZXRzIG9uIHRoaXMKLWRldmljZSBjYW4gY29tbXVuaWNhdGUgZGlyZWN0bHkuIERlZmF1bHQgc2V0dGluZyBpcyAneWVzJy4KLQotc2VuZF9yZWRpcmVjdHMKLS0tLS0tLS0tLS0tLS0tCi0KLURldGVybWluZXMgd2hldGhlciB0byBzZW5kIElDTVAgcmVkaXJlY3RzIHRvIG90aGVyIGhvc3RzLgotCi1Sb3V0aW5nIHNldHRpbmdzCi0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBkaXJlY3RvcnkgIC9wcm9jL3N5cy9uZXQvaXB2NC9yb3V0ZSAgY29udGFpbnMgIHNldmVyYWwgIGZpbGUgIHRvICBjb250cm9sCi1yb3V0aW5nIGlzc3Vlcy4KLQotZXJyb3JfYnVyc3QgYW5kIGVycm9yX2Nvc3QKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZXNlICBwYXJhbWV0ZXJzICBhcmUgdXNlZCB0byBsaW1pdCBob3cgbWFueSBJQ01QIGRlc3RpbmF0aW9uIHVucmVhY2hhYmxlIHRvIAotc2VuZCAgZnJvbSAgdGhlICBob3N0ICBpbiBxdWVzdGlvbi4gSUNNUCBkZXN0aW5hdGlvbiB1bnJlYWNoYWJsZSBtZXNzYWdlcyBhcmUgCi1zZW50ICB3aGVuICB3ZSAgY2Fubm90IHJlYWNoICB0aGUgbmV4dCBob3Agd2hpbGUgdHJ5aW5nIHRvIHRyYW5zbWl0IGEgcGFja2V0LiAKLUl0ICB3aWxsIGFsc28gcHJpbnQgc29tZSBlcnJvciBtZXNzYWdlcyB0byBrZXJuZWwgbG9ncyBpZiBzb21lb25lIGlzIGlnbm9yaW5nIAotb3VyICAgSUNNUCAgcmVkaXJlY3RzLiAgVGhlICBoaWdoZXIgIHRoZSAgZXJyb3JfY29zdCAgZmFjdG9yICBpcywgIHRoZSAgZmV3ZXIgCi1kZXN0aW5hdGlvbiAgdW5yZWFjaGFibGUgIGFuZCBlcnJvciBtZXNzYWdlcyB3aWxsIGJlIGxldCB0aHJvdWdoLiBFcnJvcl9idXJzdCAKLWNvbnRyb2xzICB3aGVuICBkZXN0aW5hdGlvbiAgdW5yZWFjaGFibGUgIG1lc3NhZ2VzIGFuZCBlcnJvciBtZXNzYWdlcyB3aWxsIGJlCi1kcm9wcGVkLiBUaGUgZGVmYXVsdCBzZXR0aW5ncyBsaW1pdCB3YXJuaW5nIG1lc3NhZ2VzIHRvIGZpdmUgZXZlcnkgc2Vjb25kLgotCi1mbHVzaAotLS0tLS0KLQotV3JpdGluZyB0byB0aGlzIGZpbGUgcmVzdWx0cyBpbiBhIGZsdXNoIG9mIHRoZSByb3V0aW5nIGNhY2hlLgotCi1nY19lbGFzdGljaXR5LCBnY19pbnRlcnZhbCwgZ2NfbWluX2ludGVydmFsX21zLCBnY190aW1lb3V0LCBnY190aHJlc2gKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1WYWx1ZXMgdG8gIGNvbnRyb2wgIHRoZSAgZnJlcXVlbmN5ICBhbmQgIGJlaGF2aW9yICBvZiAgdGhlICBnYXJiYWdlIGNvbGxlY3Rpb24KLWFsZ29yaXRobSBmb3IgdGhlIHJvdXRpbmcgY2FjaGUuIGdjX21pbl9pbnRlcnZhbCBpcyBkZXByZWNhdGVkIGFuZCByZXBsYWNlZAotYnkgZ2NfbWluX2ludGVydmFsX21zLgotCi0KLW1heF9zaXplCi0tLS0tLS0tLQotCi1NYXhpbXVtIHNpemUgIG9mICB0aGUgcm91dGluZyBjYWNoZS4gT2xkIGVudHJpZXMgd2lsbCBiZSBwdXJnZWQgb25jZSB0aGUgY2FjaGUKLXJlYWNoZWQgaGFzIHRoaXMgc2l6ZS4KLQotcmVkaXJlY3RfbG9hZCwgcmVkaXJlY3RfbnVtYmVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRmFjdG9ycyB3aGljaCAgZGV0ZXJtaW5lICBpZiAgbW9yZSBJQ1BNIHJlZGlyZWN0cyBzaG91bGQgYmUgc2VudCB0byBhIHNwZWNpZmljCi1ob3N0LiBObyAgcmVkaXJlY3RzICB3aWxsIGJlIHNlbnQgb25jZSB0aGUgbG9hZCBsaW1pdCBvciB0aGUgbWF4aW11bSBudW1iZXIgb2YKLXJlZGlyZWN0cyBoYXMgYmVlbiByZWFjaGVkLgotCi1yZWRpcmVjdF9zaWxlbmNlCi0tLS0tLS0tLS0tLS0tLS0tCi0KLVRpbWVvdXQgZm9yIHJlZGlyZWN0cy4gQWZ0ZXIgdGhpcyBwZXJpb2QgcmVkaXJlY3RzIHdpbGwgYmUgc2VudCBhZ2FpbiwgZXZlbiBpZgotdGhpcyBoYXMgYmVlbiBzdG9wcGVkLCBiZWNhdXNlIHRoZSBsb2FkIG9yIG51bWJlciBsaW1pdCBoYXMgYmVlbiByZWFjaGVkLgotCi1OZXR3b3JrIE5laWdoYm9yIGhhbmRsaW5nCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVNldHRpbmdzIGFib3V0IGhvdyB0byBoYW5kbGUgY29ubmVjdGlvbnMgd2l0aCBkaXJlY3QgbmVpZ2hib3JzIChub2RlcyBhdHRhY2hlZAotdG8gdGhlIHNhbWUgbGluaykgY2FuIGJlIGZvdW5kIGluIHRoZSBkaXJlY3RvcnkgL3Byb2Mvc3lzL25ldC9pcHY0L25laWdoLgotCi1BcyB3ZSAgc2F3ICBpdCAgaW4gIHRoZSAgY29uZiBkaXJlY3RvcnksIHRoZXJlIGlzIGEgZGVmYXVsdCBzdWJkaXJlY3Rvcnkgd2hpY2gKLWhvbGRzIHRoZSAgZGVmYXVsdCAgdmFsdWVzLCBhbmQgb25lIGRpcmVjdG9yeSBmb3IgZWFjaCBpbnRlcmZhY2UuIFRoZSBjb250ZW50cwotb2YgdGhlICBkaXJlY3RvcmllcyAgYXJlIGlkZW50aWNhbCwgd2l0aCB0aGUgc2luZ2xlIGV4Y2VwdGlvbiB0aGF0IHRoZSBkZWZhdWx0Ci1zZXR0aW5ncyBjb250YWluIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBzZXQgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhcmFtZXRlcnMuCi0KLUluIHRoZSBpbnRlcmZhY2UgZGlyZWN0b3JpZXMgeW91J2xsIGZpbmQgdGhlIGZvbGxvd2luZyBlbnRyaWVzOgotCi1iYXNlX3JlYWNoYWJsZV90aW1lLCBiYXNlX3JlYWNoYWJsZV90aW1lX21zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUEgYmFzZSAgdmFsdWUgIHVzZWQgZm9yIGNvbXB1dGluZyB0aGUgcmFuZG9tIHJlYWNoYWJsZSB0aW1lIHZhbHVlIGFzIHNwZWNpZmllZAotaW4gUkZDMjQ2MS4KLQotRXhwcmVzc2lvbiBvZiBiYXNlX3JlYWNoYWJsZV90aW1lLCB3aGljaCBpcyBkZXByZWNhdGVkLCBpcyBpbiBzZWNvbmRzLgotRXhwcmVzc2lvbiBvZiBiYXNlX3JlYWNoYWJsZV90aW1lX21zIGlzIGluIG1pbGxpc2Vjb25kcy4KLQotcmV0cmFuc190aW1lLCByZXRyYW5zX3RpbWVfbXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSB0aW1lIGJldHdlZW4gcmV0cmFuc21pdHRlZCBOZWlnaGJvciBTb2xpY2l0YXRpb24gbWVzc2FnZXMuCi1Vc2VkIGZvciBhZGRyZXNzIHJlc29sdXRpb24gYW5kIHRvIGRldGVybWluZSBpZiBhIG5laWdoYm9yIGlzCi11bnJlYWNoYWJsZS4KLQotRXhwcmVzc2lvbiBvZiByZXRyYW5zX3RpbWUsIHdoaWNoIGlzIGRlcHJlY2F0ZWQsIGlzIGluIDEvMTAwIHNlY29uZHMgKGZvcgotSVB2NCkgb3IgaW4gamlmZmllcyAoZm9yIElQdjYpLgotRXhwcmVzc2lvbiBvZiByZXRyYW5zX3RpbWVfbXMgaXMgaW4gbWlsbGlzZWNvbmRzLgotCi11bnJlc19xbGVuCi0tLS0tLS0tLS0tCi0KLU1heGltdW0gcXVldWUgIGxlbmd0aCAgZm9yIGEgcGVuZGluZyBhcnAgcmVxdWVzdCAtIHRoZSBudW1iZXIgb2YgcGFja2V0cyB3aGljaAotYXJlIGFjY2VwdGVkIGZyb20gb3RoZXIgbGF5ZXJzIHdoaWxlIHRoZSBBUlAgYWRkcmVzcyBpcyBzdGlsbCByZXNvbHZlZC4KLQotYW55Y2FzdF9kZWxheQotLS0tLS0tLS0tLS0tLQotCi1NYXhpbXVtIGZvciAgcmFuZG9tICBkZWxheSAgb2YgIGFuc3dlcnMgIHRvICBuZWlnaGJvciBzb2xpY2l0YXRpb24gbWVzc2FnZXMgaW4KLWppZmZpZXMgKDEvMTAwICBzZWMpLiBOb3QgeWV0IGltcGxlbWVudGVkIChMaW51eCBkb2VzIG5vdCBoYXZlIGFueWNhc3Qgc3VwcG9ydAoteWV0KS4KLQotdWNhc3Rfc29saWNpdAotLS0tLS0tLS0tLS0tLQotCi1NYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIGZvciB1bmljYXN0IHNvbGljaXRhdGlvbi4KLQotbWNhc3Rfc29saWNpdAotLS0tLS0tLS0tLS0tLQotCi1NYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIGZvciBtdWx0aWNhc3Qgc29saWNpdGF0aW9uLgotCi1kZWxheV9maXJzdF9wcm9iZV90aW1lCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLURlbGF5IGZvciAgdGhlICBmaXJzdCAgdGltZSAgcHJvYmUgIGlmICB0aGUgIG5laWdoYm9yICBpcyAgcmVhY2hhYmxlLiAgKHNlZQotZ2Nfc3RhbGVfdGltZSkKLQotbG9ja3RpbWUKLS0tLS0tLS0tCi0KLUFuIEFSUC9uZWlnaGJvciAgZW50cnkgIGlzIG9ubHkgcmVwbGFjZWQgd2l0aCBhIG5ldyBvbmUgaWYgdGhlIG9sZCBpcyBhdCBsZWFzdAotbG9ja3RpbWUgb2xkLiBUaGlzIHByZXZlbnRzIEFSUCBjYWNoZSB0aHJhc2hpbmcuCi0KLXByb3h5X2RlbGF5Ci0tLS0tLS0tLS0tLQotCi1NYXhpbXVtIHRpbWUgIChyZWFsICB0aW1lIGlzIHJhbmRvbSBbMC4ucHJveHl0aW1lXSkgYmVmb3JlIGFuc3dlcmluZyB0byBhbiBBUlAKLXJlcXVlc3QgZm9yICB3aGljaCAgd2UgaGF2ZSBhbiBwcm94eSBBUlAgZW50cnkuIEluIHNvbWUgY2FzZXMsIHRoaXMgaXMgdXNlZCB0bwotcHJldmVudCBuZXR3b3JrIGZsb29kaW5nLgotCi1wcm94eV9xbGVuCi0tLS0tLS0tLS0tCi0KLU1heGltdW0gcXVldWUgbGVuZ3RoIG9mIHRoZSBkZWxheWVkIHByb3h5IGFycCB0aW1lci4gKHNlZSBwcm94eV9kZWxheSkuCi0KLWFwcF9zb2xpY2l0Ci0tLS0tLS0tLS0tCi0KLURldGVybWluZXMgdGhlICBudW1iZXIgb2YgcmVxdWVzdHMgdG8gc2VuZCB0byB0aGUgdXNlciBsZXZlbCBBUlAgZGFlbW9uLiBVc2UgMAotdG8gdHVybiBvZmYuCi0KLWdjX3N0YWxlX3RpbWUKLS0tLS0tLS0tLS0tLS0KLQotRGV0ZXJtaW5lcyBob3cgIG9mdGVuICB0byAgY2hlY2sgIGZvciBzdGFsZSBBUlAgZW50cmllcy4gQWZ0ZXIgYW4gQVJQIGVudHJ5IGlzCi1zdGFsZSBpdCAgd2lsbCAgYmUgcmVzb2x2ZWQgYWdhaW4gKHdoaWNoIGlzIHVzZWZ1bCB3aGVuIGFuIElQIGFkZHJlc3MgbWlncmF0ZXMKLXRvIGFub3RoZXIgIG1hY2hpbmUpLiAgV2hlbiAgdWNhc3Rfc29saWNpdCBpcyBncmVhdGVyIHRoYW4gMCBpdCBmaXJzdCB0cmllcyB0bwotc2VuZCBhbiAgQVJQICBwYWNrZXQgIGRpcmVjdGx5ICB0byAgdGhlICBrbm93biAgaG9zdCAgV2hlbiAgdGhhdCAgZmFpbHMgIGFuZAotbWNhc3Rfc29saWNpdCBpcyBncmVhdGVyIHRoYW4gMCwgYW4gQVJQIHJlcXVlc3QgaXMgYnJvYWRjYXN0ZWQuCi0KLTIuOSBBcHBsZXRhbGsKLS0tLS0tLS0tLS0tLS0KLQotVGhlIC9wcm9jL3N5cy9uZXQvYXBwbGV0YWxrICBkaXJlY3RvcnkgIGhvbGRzIHRoZSBBcHBsZXRhbGsgY29uZmlndXJhdGlvbiBkYXRhCi13aGVuIEFwcGxldGFsayBpcyBsb2FkZWQuIFRoZSBjb25maWd1cmFibGUgcGFyYW1ldGVycyBhcmU6Ci0KLWFhcnAtZXhwaXJ5LXRpbWUKLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGFtb3VudCAgb2YgIHRpbWUgIHdlIGtlZXAgYW4gQVJQIGVudHJ5IGJlZm9yZSBleHBpcmluZyBpdC4gVXNlZCB0byBhZ2Ugb3V0Ci1vbGQgaG9zdHMuCi0KLWFhcnAtcmVzb2x2ZS10aW1lCi0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgYW1vdW50IG9mIHRpbWUgd2Ugd2lsbCBzcGVuZCB0cnlpbmcgdG8gcmVzb2x2ZSBhbiBBcHBsZXRhbGsgYWRkcmVzcy4KLQotYWFycC1yZXRyYW5zbWl0LWxpbWl0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIG51bWJlciBvZiB0aW1lcyB3ZSB3aWxsIHJldHJhbnNtaXQgYSBxdWVyeSBiZWZvcmUgZ2l2aW5nIHVwLgotCi1hYXJwLXRpY2stdGltZQotLS0tLS0tLS0tLS0tLS0KLQotQ29udHJvbHMgdGhlIHJhdGUgYXQgd2hpY2ggZXhwaXJlcyBhcmUgY2hlY2tlZC4KLQotVGhlIGRpcmVjdG9yeSAgL3Byb2MvbmV0L2FwcGxldGFsayAgaG9sZHMgdGhlIGxpc3Qgb2YgYWN0aXZlIEFwcGxldGFsayBzb2NrZXRzCi1vbiBhIG1hY2hpbmUuCi0KLVRoZSBmaWVsZHMgIGluZGljYXRlICB0aGUgRERQIHR5cGUsIHRoZSBsb2NhbCBhZGRyZXNzIChpbiBuZXR3b3JrOm5vZGUgZm9ybWF0KQotdGhlIHJlbW90ZSAgYWRkcmVzcywgIHRoZSAgc2l6ZSBvZiB0aGUgdHJhbnNtaXQgcGVuZGluZyBxdWV1ZSwgdGhlIHNpemUgb2YgdGhlCi1yZWNlaXZlZCBxdWV1ZSAgKGJ5dGVzIHdhaXRpbmcgZm9yIGFwcGxpY2F0aW9ucyB0byByZWFkKSB0aGUgc3RhdGUgYW5kIHRoZSB1aWQKLW93bmluZyB0aGUgc29ja2V0LgotCi0vcHJvYy9uZXQvYXRhbGtfaWZhY2UgbGlzdHMgIGFsbCAgdGhlICBpbnRlcmZhY2VzICBjb25maWd1cmVkIGZvciBhcHBsZXRhbGsuSXQKLXNob3dzIHRoZSAgbmFtZSAgb2YgdGhlIGludGVyZmFjZSwgaXRzIEFwcGxldGFsayBhZGRyZXNzLCB0aGUgbmV0d29yayByYW5nZSBvbgotdGhhdCBhZGRyZXNzICAob3IgIG5ldHdvcmsgbnVtYmVyIGZvciBwaGFzZSAxIG5ldHdvcmtzKSwgYW5kIHRoZSBzdGF0dXMgb2YgdGhlCi1pbnRlcmZhY2UuCi0KLS9wcm9jL25ldC9hdGFsa19yb3V0ZSBsaXN0cyAgZWFjaCAga25vd24gIG5ldHdvcmsgIHJvdXRlLiAgSXQgbGlzdHMgdGhlIHRhcmdldAotKG5ldHdvcmspIHRoYXQgdGhlIHJvdXRlIGxlYWRzIHRvLCB0aGUgcm91dGVyIChtYXkgYmUgZGlyZWN0bHkgY29ubmVjdGVkKSwgdGhlCi1yb3V0ZSBmbGFncywgYW5kIHRoZSBkZXZpY2UgdGhlIHJvdXRlIGlzIHVzaW5nLgotCi0yLjEwIElQWAotLS0tLS0tLS0KLQotVGhlIElQWCBwcm90b2NvbCBoYXMgbm8gdHVuYWJsZSB2YWx1ZXMgaW4gcHJvYy9zeXMvbmV0LgotCi1UaGUgSVBYICBwcm90b2NvbCAgZG9lcywgIGhvd2V2ZXIsICBwcm92aWRlICBwcm9jL25ldC9pcHguIFRoaXMgbGlzdHMgZWFjaCBJUFgKLXNvY2tldCBnaXZpbmcgIHRoZSAgbG9jYWwgIGFuZCAgcmVtb3RlICBhZGRyZXNzZXMgIGluICBOb3ZlbGwgIGZvcm1hdCAodGhhdCBpcwotbmV0d29yazpub2RlOnBvcnQpLiBJbiAgYWNjb3JkYW5jZSAgd2l0aCAgdGhlICBzdHJhbmdlICBOb3ZlbGwgIHRyYWRpdGlvbiwKLWV2ZXJ5dGhpbmcgYnV0IHRoZSBwb3J0IGlzIGluIGhleC4gTm90X0Nvbm5lY3RlZCBpcyBkaXNwbGF5ZWQgZm9yIHNvY2tldHMgdGhhdAotYXJlIG5vdCAgdGllZCB0byBhIHNwZWNpZmljIHJlbW90ZSBhZGRyZXNzLiBUaGUgVHggYW5kIFJ4IHF1ZXVlIHNpemVzIGluZGljYXRlCi10aGUgbnVtYmVyICBvZiAgYnl0ZXMgIHBlbmRpbmcgIGZvciAgdHJhbnNtaXNzaW9uICBhbmQgIHJlY2VwdGlvbi4gIFRoZSAgc3RhdGUKLWluZGljYXRlcyB0aGUgIHN0YXRlICB0aGUgIHNvY2tldCAgaXMgIGluIGFuZCB0aGUgdWlkIGlzIHRoZSBvd25pbmcgdWlkIG9mIHRoZQotc29ja2V0LgotCi1UaGUgL3Byb2MvbmV0L2lweF9pbnRlcmZhY2UgIGZpbGUgbGlzdHMgYWxsIElQWCBpbnRlcmZhY2VzLiBGb3IgZWFjaCBpbnRlcmZhY2UKLWl0IGdpdmVzICB0aGUgbmV0d29yayBudW1iZXIsIHRoZSBub2RlIG51bWJlciwgYW5kIGluZGljYXRlcyBpZiB0aGUgbmV0d29yayBpcwotdGhlIHByaW1hcnkgIG5ldHdvcmsuICBJdCAgYWxzbyAgaW5kaWNhdGVzICB3aGljaCAgZGV2aWNlICBpdCAgaXMgYm91bmQgdG8gKG9yCi1JbnRlcm5hbCBmb3IgIGludGVybmFsICBuZXR3b3JrcykgIGFuZCAgdGhlICBGcmFtZSAgVHlwZSBpZiBhcHByb3ByaWF0ZS4gTGludXgKLXN1cHBvcnRzIDgwMi4zLCAgODAyLjIsICA4MDIuMiAgU05BUCAgYW5kIERJWCAoQmx1ZSBCb29rKSBldGhlcm5ldCBmcmFtaW5nIGZvcgotSVBYLgotCi1UaGUgL3Byb2MvbmV0L2lweF9yb3V0ZSAgdGFibGUgIGhvbGRzICBhIGxpc3Qgb2YgSVBYIHJvdXRlcy4gRm9yIGVhY2ggcm91dGUgaXQKLWdpdmVzIHRoZSAgZGVzdGluYXRpb24gIG5ldHdvcmssIHRoZSByb3V0ZXIgbm9kZSAob3IgRGlyZWN0bHkpIGFuZCB0aGUgbmV0d29yawotYWRkcmVzcyBvZiB0aGUgcm91dGVyIChvciBDb25uZWN0ZWQpIGZvciBpbnRlcm5hbCBuZXR3b3Jrcy4KLQotMi4xMSAvcHJvYy9zeXMvZnMvbXF1ZXVlIC0gUE9TSVggbWVzc2FnZSBxdWV1ZXMgZmlsZXN5c3RlbQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgIm1xdWV1ZSIgIGZpbGVzeXN0ZW0gcHJvdmlkZXMgIHRoZSBuZWNlc3Nhcnkga2VybmVsIGZlYXR1cmVzIHRvIGVuYWJsZSB0aGUKLWNyZWF0aW9uIG9mIGEgIHVzZXIgc3BhY2UgIGxpYnJhcnkgdGhhdCAgaW1wbGVtZW50cyAgdGhlICBQT1NJWCBtZXNzYWdlIHF1ZXVlcwotQVBJIChhcyBub3RlZCBieSB0aGUgIE1TRyB0YWcgaW4gdGhlICBQT1NJWCAxMDAzLjEtMjAwMSB2ZXJzaW9uICBvZiB0aGUgU3lzdGVtCi1JbnRlcmZhY2VzIHNwZWNpZmljYXRpb24uKQotCi1UaGUgIm1xdWV1ZSIgZmlsZXN5c3RlbSBjb250YWlucyB2YWx1ZXMgZm9yIGRldGVybWluaW5nL3NldHRpbmcgIHRoZSBhbW91bnQgb2YKLXJlc291cmNlcyB1c2VkIGJ5IHRoZSBmaWxlIHN5c3RlbS4KLQotL3Byb2Mvc3lzL2ZzL21xdWV1ZS9xdWV1ZXNfbWF4IGlzIGEgcmVhZC93cml0ZSAgZmlsZSBmb3IgIHNldHRpbmcvZ2V0dGluZyAgdGhlCi1tYXhpbXVtIG51bWJlciBvZiBtZXNzYWdlIHF1ZXVlcyBhbGxvd2VkIG9uIHRoZSBzeXN0ZW0uCi0KLS9wcm9jL3N5cy9mcy9tcXVldWUvbXNnX21heCAgaXMgIGEgIHJlYWQvd3JpdGUgZmlsZSAgZm9yICBzZXR0aW5nL2dldHRpbmcgIHRoZQotbWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZXMgaW4gYSBxdWV1ZSB2YWx1ZS4gIEluIGZhY3QgaXQgaXMgdGhlIGxpbWl0aW5nIHZhbHVlCi1mb3IgYW5vdGhlciAodXNlcikgbGltaXQgd2hpY2ggaXMgc2V0IGluIG1xX29wZW4gaW52b2NhdGlvbi4gVGhpcyBhdHRyaWJ1dGUgb2YKLWEgcXVldWUgbXVzdCBiZSBsZXNzIG9yIGVxdWFsIHRoZW4gbXNnX21heC4KLQotL3Byb2Mvc3lzL2ZzL21xdWV1ZS9tc2dzaXplX21heCBpcyAgYSByZWFkL3dyaXRlICBmaWxlIGZvciBzZXR0aW5nL2dldHRpbmcgdGhlCi1tYXhpbXVtICBtZXNzYWdlIHNpemUgdmFsdWUgKGl0IGlzIGV2ZXJ5ICBtZXNzYWdlIHF1ZXVlJ3MgYXR0cmlidXRlIHNldCBkdXJpbmcKLWl0cyBjcmVhdGlvbikuCi0KLTIuMTIgL3Byb2MvPHBpZD4vb29tX2FkaiAtIEFkanVzdCB0aGUgb29tLWtpbGxlciBzY29yZQorMy4xIC9wcm9jLzxwaWQ+L29vbV9hZGogLSBBZGp1c3QgdGhlIG9vbS1raWxsZXIgc2NvcmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGlzIGZpbGUgY2FuIGJlIHVzZWQgdG8gYWRqdXN0IHRoZSBzY29yZSB1c2VkIHRvIHNlbGVjdCB3aGljaCBwcm9jZXNzZXMKQEAgLTIwNjIsMjUgKzEwMzcsMTUgQEAKIGFyZSBraWxsZWQsIHByb2Nlc3MgaXRzZWxmIHdpbGwgYmUga2lsbGVkIGluIGFuIE9PTSBzaXR1YXRpb24gd2hlbiBpdCBkb2VzCiBub3QgaGF2ZSBjaGlsZHJlbiBvciBzb21lIG9mIHRoZW0gZGlzYWJsZWQgb29tIGxpa2UgZGVzY3JpYmVkIGFib3ZlLgogCi0yLjEzIC9wcm9jLzxwaWQ+L29vbV9zY29yZSAtIERpc3BsYXkgY3VycmVudCBvb20ta2lsbGVyIHNjb3JlCiszLjIgL3Byb2MvPHBpZD4vb29tX3Njb3JlIC0gRGlzcGxheSBjdXJyZW50IG9vbS1raWxsZXIgc2NvcmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUaGlzIGZpbGUgY2FuIGJlIHVzZWQgdG8gY2hlY2sgdGhlIGN1cnJlbnQgc2NvcmUgdXNlZCBieSB0aGUgb29tLWtpbGxlciBpcyBmb3IKIGFueSBnaXZlbiA8cGlkPi4gVXNlIGl0IHRvZ2V0aGVyIHdpdGggL3Byb2MvPHBpZD4vb29tX2FkaiB0byB0dW5lIHdoaWNoCiBwcm9jZXNzIHNob3VsZCBiZSBraWxsZWQgaW4gYW4gb3V0LW9mLW1lbW9yeSBzaXR1YXRpb24uCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU3VtbWFyeQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DZXJ0YWluIGFzcGVjdHMgIG9mICBrZXJuZWwgIGJlaGF2aW9yICBjYW4gYmUgbW9kaWZpZWQgYXQgcnVudGltZSwgd2l0aG91dCB0aGUKLW5lZWQgdG8gIHJlY29tcGlsZSAgdGhlIGtlcm5lbCwgb3IgZXZlbiB0byByZWJvb3QgdGhlIHN5c3RlbS4gVGhlIGZpbGVzIGluIHRoZQotL3Byb2Mvc3lzIHRyZWUgIGNhbiAgbm90IG9ubHkgYmUgcmVhZCwgYnV0IGFsc28gbW9kaWZpZWQuIFlvdSBjYW4gdXNlIHRoZSBlY2hvCi1jb21tYW5kIHRvIHdyaXRlIHZhbHVlIGludG8gdGhlc2UgZmlsZXMsIHRoZXJlYnkgY2hhbmdpbmcgdGhlIGRlZmF1bHQgc2V0dGluZ3MKLW9mIHRoZSBrZXJuZWwuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotMi4xNCAgL3Byb2MvPHBpZD4vaW8gLSBEaXNwbGF5IHRoZSBJTyBhY2NvdW50aW5nIGZpZWxkcworMy4zICAvcHJvYy88cGlkPi9pbyAtIERpc3BsYXkgdGhlIElPIGFjY291bnRpbmcgZmllbGRzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgZmlsZSBjb250YWlucyBJTyBzdGF0aXN0aWNzIGZvciBlYWNoIHJ1bm5pbmcgcHJvY2VzcwpAQCAtMjE4Miw3ICsxMTQ3LDcgQEAKIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBjYW4gYmUgZm91bmQgd2l0aGluIHRoZSB0YXNrc3RhdHMgZG9jdW1lbnRhdGlvbiBpbgogRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nLgogCi0yLjE1IC9wcm9jLzxwaWQ+L2NvcmVkdW1wX2ZpbHRlciAtIENvcmUgZHVtcCBmaWx0ZXJpbmcgc2V0dGluZ3MKKzMuNCAvcHJvYy88cGlkPi9jb3JlZHVtcF9maWx0ZXIgLSBDb3JlIGR1bXAgZmlsdGVyaW5nIHNldHRpbmdzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFdoZW4gYSBwcm9jZXNzIGlzIGR1bXBlZCwgYWxsIGFub255bW91cyBtZW1vcnkgaXMgd3JpdHRlbiB0byBhIGNvcmUgZmlsZSBhcwogbG9uZyBhcyB0aGUgc2l6ZSBvZiB0aGUgY29yZSBmaWxlIGlzbid0IGxpbWl0ZWQuIEJ1dCBzb21ldGltZXMgd2UgZG9uJ3Qgd2FudApAQCAtMjIyNiw3ICsxMTkxLDcgQEAKICAgJCBlY2hvIDB4NyA+IC9wcm9jL3NlbGYvY29yZWR1bXBfZmlsdGVyCiAgICQgLi9zb21lX3Byb2dyYW0KIAotMi4xNgkvcHJvYy88cGlkPi9tb3VudGluZm8gLSBJbmZvcm1hdGlvbiBhYm91dCBtb3VudHMKKzMuNQkvcHJvYy88cGlkPi9tb3VudGluZm8gLSBJbmZvcm1hdGlvbiBhYm91dCBtb3VudHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgZmlsZSBjb250YWlucyBsaW5lcyBvZiB0aGUgZm9ybToKQEAgLTIyNjMsMzAgKzEyMjgsMyBAQAogCiAgIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2hhcmVkc3VidHJlZS50eHQKIAotMi4xNwkvcHJvYy9zeXMvZnMvZXBvbGwgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBlcG9sbCBpbnRlcmZhY2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGVwb2xsKDcpIGludGVyZmFjZS4KLQotbWF4X3VzZXJfaW5zdGFuY2VzCi0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZXBvbGwgZmlsZSBkZXNjcmlwdG9ycyB0aGF0IGEgc2luZ2xlIHVzZXIgY2FuCi1oYXZlIG9wZW4gYXQgYSBnaXZlbiB0aW1lLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMjgsIGFuZCBzaG91bGQgYmUgZW5vdWdoCi1mb3Igbm9ybWFsIHVzZXJzLgotCi1tYXhfdXNlcl93YXRjaGVzCi0tLS0tLS0tLS0tLS0tLS0tCi0KLUV2ZXJ5IGVwb2xsIGZpbGUgZGVzY3JpcHRvciBjYW4gc3RvcmUgYSBudW1iZXIgb2YgZmlsZXMgdG8gYmUgbW9uaXRvcmVkCi1mb3IgZXZlbnQgcmVhZGluZXNzLiBFYWNoIG9uZSBvZiB0aGVzZSBtb25pdG9yZWQgZmlsZXMgY29uc3RpdHV0ZXMgYSAid2F0Y2giLgotVGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiAid2F0Y2hlcyIgdGhhdCBhcmUKLWFsbG93ZWQgZm9yIGVhY2ggdXNlci4KLUVhY2ggIndhdGNoIiBjb3N0cyByb3VnaGx5IDkwIGJ5dGVzIG9uIGEgMzJiaXQga2VybmVsLCBhbmQgcm91Z2hseSAxNjAgYnl0ZXMKLW9uIGEgNjRiaXQgb25lLgotVGhlIGN1cnJlbnQgZGVmYXVsdCB2YWx1ZSBmb3IgIG1heF91c2VyX3dhdGNoZXMgIGlzIHRoZSAxLzMyIG9mIHRoZSBhdmFpbGFibGUKLWxvdyBtZW1vcnksIGRpdmlkZWQgZm9yIHRoZSAid2F0Y2giIGNvc3QgaW4gYnl0ZXMuCi0KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMtcGNpLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc3lzZnMtcGNpLnR4dAppbmRleCA5Zjg3NDBjLi4yNmU0YjhiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLXBjaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy1wY2kudHh0CkBAIC0xMiw2ICsxMiw3IEBACiAgICAgIHwgICB8LS0gZW5hYmxlCiAgICAgIHwgICB8LS0gaXJxCiAgICAgIHwgICB8LS0gbG9jYWxfY3B1cworICAgICB8ICAgfC0tIHJlbW92ZQogICAgICB8ICAgfC0tIHJlc291cmNlCiAgICAgIHwgICB8LS0gcmVzb3VyY2UwCiAgICAgIHwgICB8LS0gcmVzb3VyY2UxCkBAIC0zNiw2ICszNyw3IEBACiAgICAgICAgZW5hYmxlCSAgICAgICAgICAgV2hldGhlciB0aGUgZGV2aWNlIGlzIGVuYWJsZWQgKGFzY2lpLCBydykKICAgICAgICBpcnEJCSAgIElSUSBudW1iZXIgKGFzY2lpLCBybykKICAgICAgICBsb2NhbF9jcHVzCSAgIG5lYXJieSBDUFUgbWFzayAoY3B1bWFzaywgcm8pCisgICAgICAgcmVtb3ZlCQkgICByZW1vdmUgZGV2aWNlIGZyb20ga2VybmVsJ3MgbGlzdCAoYXNjaWksIHdvKQogICAgICAgIHJlc291cmNlCQkgICBQQ0kgcmVzb3VyY2UgaG9zdCBhZGRyZXNzZXMgKGFzY2lpLCBybykKICAgICAgICByZXNvdXJjZTAuLk4JICAgUENJIHJlc291cmNlIE4sIGlmIHByZXNlbnQgKGJpbmFyeSwgbW1hcCkKICAgICAgICByZXNvdXJjZTBfd2MuLk5fd2MgIFBDSSBXQyBtYXAgcmVzb3VyY2UgTiwgaWYgcHJlZmV0Y2hhYmxlIChiaW5hcnksIG1tYXApCkBAIC00Niw2ICs0OCw3IEBACiAKICAgcm8gLSByZWFkIG9ubHkgZmlsZQogICBydyAtIGZpbGUgaXMgcmVhZGFibGUgYW5kIHdyaXRhYmxlCisgIHdvIC0gd3JpdGUgb25seSBmaWxlCiAgIG1tYXAgLSBmaWxlIGlzIG1tYXBhYmxlCiAgIGFzY2lpIC0gZmlsZSBjb250YWlucyBhc2NpaSB0ZXh0CiAgIGJpbmFyeSAtIGZpbGUgY29udGFpbnMgYmluYXJ5IGRhdGEKQEAgLTczLDYgKzc2LDEzIEBACiBJbiB0aGUgZXZlbnQgYSBkcml2ZXIgaXMgbm90IGJvdW5kIHRvIHRoZSBkZXZpY2UsIGl0IGNhbiBiZSBlbmFibGVkIHVzaW5nIHRoZQogJ2VuYWJsZScgZmlsZSwgZG9jdW1lbnRlZCBhYm92ZS4KIAorVGhlICdyZW1vdmUnIGZpbGUgaXMgdXNlZCB0byByZW1vdmUgdGhlIFBDSSBkZXZpY2UsIGJ5IHdyaXRpbmcgYSBub24temVybworaW50ZWdlciB0byB0aGUgZmlsZS4gIFRoaXMgZG9lcyBub3QgaW52b2x2ZSBhbnkga2luZCBvZiBob3QtcGx1ZyBmdW5jdGlvbmFsaXR5LAorZS5nLiBwb3dlcmluZyBvZmYgdGhlIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwncyBsaXN0IG9mCitQQ0kgZGV2aWNlcywgdGhlIHN5c2ZzIGRpcmVjdG9yeSBmb3IgaXQgaXMgcmVtb3ZlZCwgYW5kIHRoZSBkZXZpY2Ugd2lsbCBiZQorcmVtb3ZlZCBmcm9tIGFueSBkcml2ZXJzIGF0dGFjaGVkIHRvIGl0LiBSZW1vdmFsIG9mIFBDSSByb290IGJ1c2VzIGlzCitkaXNhbGxvd2VkLgorCiBBY2Nlc3NpbmcgbGVnYWN5IHJlc291cmNlcyB0aHJvdWdoIHN5c2ZzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWRmLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdWRmLnR4dAppbmRleCBmZGU4MjlhLi45MDJiOTVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91ZGYudHh0CkBAIC0yNCw2ICsyNCw4IEBACiAKIAlnaWQ9CQlTZXQgdGhlIGRlZmF1bHQgZ3JvdXAuCiAJdW1hc2s9CQlTZXQgdGhlIGRlZmF1bHQgdW1hc2suCisJbW9kZT0JCVNldCB0aGUgZGVmYXVsdCBmaWxlIHBlcm1pc3Npb25zLgorCWRtb2RlPQkJU2V0IHRoZSBkZWZhdWx0IGRpcmVjdG9yeSBwZXJtaXNzaW9ucy4KIAl1aWQ9CQlTZXQgdGhlIGRlZmF1bHQgdXNlci4KIAlicz0JCVNldCB0aGUgYmxvY2sgc2l6ZS4KIAl1bmhpZGUJCVNob3cgb3RoZXJ3aXNlIGhpZGRlbiBmaWxlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZnRyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vZnRyYWNlLnR4dAppbmRleCA4MDNiMTMxLi5mZDlhM2U2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Z0cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mdHJhY2UudHh0CkBAIC0xNSwzMSArMTUsMzEgQEAKIAogRnRyYWNlIGlzIGFuIGludGVybmFsIHRyYWNlciBkZXNpZ25lZCB0byBoZWxwIG91dCBkZXZlbG9wZXJzIGFuZAogZGVzaWduZXJzIG9mIHN5c3RlbXMgdG8gZmluZCB3aGF0IGlzIGdvaW5nIG9uIGluc2lkZSB0aGUga2VybmVsLgotSXQgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvciBhbmFseXppbmcgbGF0ZW5jaWVzIGFuZCBwZXJmb3JtYW5jZQotaXNzdWVzIHRoYXQgdGFrZSBwbGFjZSBvdXRzaWRlIG9mIHVzZXItc3BhY2UuCitJdCBjYW4gYmUgdXNlZCBmb3IgZGVidWdnaW5nIG9yIGFuYWx5emluZyBsYXRlbmNpZXMgYW5kCitwZXJmb3JtYW5jZSBpc3N1ZXMgdGhhdCB0YWtlIHBsYWNlIG91dHNpZGUgb2YgdXNlci1zcGFjZS4KIAogQWx0aG91Z2ggZnRyYWNlIGlzIHRoZSBmdW5jdGlvbiB0cmFjZXIsIGl0IGFsc28gaW5jbHVkZXMgYW4KLWluZnJhc3RydWN0dXJlIHRoYXQgYWxsb3dzIGZvciBvdGhlciB0eXBlcyBvZiB0cmFjaW5nLiBTb21lIG9mIHRoZQotdHJhY2VycyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gZnRyYWNlIGluY2x1ZGUgYSB0cmFjZXIgdG8gdHJhY2UKLWNvbnRleHQgc3dpdGNoZXMsIHRoZSB0aW1lIGl0IHRha2VzIGZvciBhIGhpZ2ggcHJpb3JpdHkgdGFzayB0bwotcnVuIGFmdGVyIGl0IHdhcyB3b2tlbiB1cCwgdGhlIHRpbWUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIGFuZAotbW9yZSAoZnRyYWNlIGFsbG93cyBmb3IgdHJhY2VyIHBsdWdpbnMsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIGxpc3Qgb2YKLXRyYWNlcnMgY2FuIGFsd2F5cyBncm93KS4KK2luZnJhc3RydWN0dXJlIHRoYXQgYWxsb3dzIGZvciBvdGhlciB0eXBlcyBvZiB0cmFjaW5nLiBTb21lIG9mCit0aGUgdHJhY2VycyB0aGF0IGFyZSBjdXJyZW50bHkgaW4gZnRyYWNlIGluY2x1ZGUgYSB0cmFjZXIgdG8KK3RyYWNlIGNvbnRleHQgc3dpdGNoZXMsIHRoZSB0aW1lIGl0IHRha2VzIGZvciBhIGhpZ2ggcHJpb3JpdHkKK3Rhc2sgdG8gcnVuIGFmdGVyIGl0IHdhcyB3b2tlbiB1cCwgdGhlIHRpbWUgaW50ZXJydXB0cyBhcmUKK2Rpc2FibGVkLCBhbmQgbW9yZSAoZnRyYWNlIGFsbG93cyBmb3IgdHJhY2VyIHBsdWdpbnMsIHdoaWNoCittZWFucyB0aGF0IHRoZSBsaXN0IG9mIHRyYWNlcnMgY2FuIGFsd2F5cyBncm93KS4KIAogCiBUaGUgRmlsZSBTeXN0ZW0KIC0tLS0tLS0tLS0tLS0tLQogCi1GdHJhY2UgdXNlcyB0aGUgZGVidWdmcyBmaWxlIHN5c3RlbSB0byBob2xkIHRoZSBjb250cm9sIGZpbGVzIGFzIHdlbGwKLWFzIHRoZSBmaWxlcyB0byBkaXNwbGF5IG91dHB1dC4KK0Z0cmFjZSB1c2VzIHRoZSBkZWJ1Z2ZzIGZpbGUgc3lzdGVtIHRvIGhvbGQgdGhlIGNvbnRyb2wgZmlsZXMgYXMKK3dlbGwgYXMgdGhlIGZpbGVzIHRvIGRpc3BsYXkgb3V0cHV0LgogCiBUbyBtb3VudCB0aGUgZGVidWdmcyBzeXN0ZW06CiAKICAgIyBta2RpciAvZGVidWcKICAgIyBtb3VudCAtdCBkZWJ1Z2ZzIG5vZGV2IC9kZWJ1ZwogCi0oTm90ZTogaXQgaXMgbW9yZSBjb21tb24gdG8gbW91bnQgYXQgL3N5cy9rZXJuZWwvZGVidWcsIGJ1dCBmb3Igc2ltcGxpY2l0eQotIHRoaXMgZG9jdW1lbnQgd2lsbCB1c2UgL2RlYnVnKQorKCBOb3RlOiBpdCBpcyBtb3JlIGNvbW1vbiB0byBtb3VudCBhdCAvc3lzL2tlcm5lbC9kZWJ1ZywgYnV0IGZvcgorICBzaW1wbGljaXR5IHRoaXMgZG9jdW1lbnQgd2lsbCB1c2UgL2RlYnVnKQogCiBUaGF0J3MgaXQhIChhc3N1bWluZyB0aGF0IHlvdSBoYXZlIGZ0cmFjZSBjb25maWd1cmVkIGludG8geW91ciBrZXJuZWwpCiAKQEAgLTUwLDkwICs1MCwxMjQgQEAKIAogIE5vdGU6IGFsbCB0aW1lIHZhbHVlcyBhcmUgaW4gbWljcm9zZWNvbmRzLgogCi0gIGN1cnJlbnRfdHJhY2VyOiBUaGlzIGlzIHVzZWQgdG8gc2V0IG9yIGRpc3BsYXkgdGhlIGN1cnJlbnQgdHJhY2VyCi0JCXRoYXQgaXMgY29uZmlndXJlZC4KKyAgY3VycmVudF90cmFjZXI6CiAKLSAgYXZhaWxhYmxlX3RyYWNlcnM6IFRoaXMgaG9sZHMgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiB0cmFjZXJzIHRoYXQKLQkJaGF2ZSBiZWVuIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gVGhlIHRyYWNlcnMKLQkJbGlzdGVkIGhlcmUgY2FuIGJlIGNvbmZpZ3VyZWQgYnkgZWNob2luZyB0aGVpciBuYW1lCi0JCWludG8gY3VycmVudF90cmFjZXIuCisJVGhpcyBpcyB1c2VkIHRvIHNldCBvciBkaXNwbGF5IHRoZSBjdXJyZW50IHRyYWNlcgorCXRoYXQgaXMgY29uZmlndXJlZC4KIAotICB0cmFjaW5nX2VuYWJsZWQ6IFRoaXMgc2V0cyBvciBkaXNwbGF5cyB3aGV0aGVyIHRoZSBjdXJyZW50X3RyYWNlcgotCQlpcyBhY3RpdmF0ZWQgYW5kIHRyYWNpbmcgb3Igbm90LiBFY2hvIDAgaW50byB0aGlzCi0JCWZpbGUgdG8gZGlzYWJsZSB0aGUgdHJhY2VyIG9yIDEgdG8gZW5hYmxlIGl0LgorICBhdmFpbGFibGVfdHJhY2VyczoKIAotICB0cmFjZTogVGhpcyBmaWxlIGhvbGRzIHRoZSBvdXRwdXQgb2YgdGhlIHRyYWNlIGluIGEgaHVtYW4gcmVhZGFibGUKLQkJZm9ybWF0IChkZXNjcmliZWQgYmVsb3cpLgorCVRoaXMgaG9sZHMgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiB0cmFjZXJzIHRoYXQKKwloYXZlIGJlZW4gY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBUaGUKKwl0cmFjZXJzIGxpc3RlZCBoZXJlIGNhbiBiZSBjb25maWd1cmVkIGJ5CisJZWNob2luZyB0aGVpciBuYW1lIGludG8gY3VycmVudF90cmFjZXIuCiAKLSAgbGF0ZW5jeV90cmFjZTogVGhpcyBmaWxlIHNob3dzIHRoZSBzYW1lIHRyYWNlIGJ1dCB0aGUgaW5mb3JtYXRpb24KLQkJaXMgb3JnYW5pemVkIG1vcmUgdG8gZGlzcGxheSBwb3NzaWJsZSBsYXRlbmNpZXMKLQkJaW4gdGhlIHN5c3RlbSAoZGVzY3JpYmVkIGJlbG93KS4KKyAgdHJhY2luZ19lbmFibGVkOgogCi0gIHRyYWNlX3BpcGU6IFRoZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgdGhlICJ0cmFjZSIgZmlsZSBidXQgdGhpcwotCQlmaWxlIGlzIG1lYW50IHRvIGJlIHN0cmVhbWVkIHdpdGggbGl2ZSB0cmFjaW5nLgotCQlSZWFkcyBmcm9tIHRoaXMgZmlsZSB3aWxsIGJsb2NrIHVudGlsIG5ldyBkYXRhCi0JCWlzIHJldHJpZXZlZC4gVW5saWtlIHRoZSAidHJhY2UiIGFuZCAibGF0ZW5jeV90cmFjZSIKLQkJZmlsZXMsIHRoaXMgZmlsZSBpcyBhIGNvbnN1bWVyLiBUaGlzIG1lYW5zIHJlYWRpbmcKLQkJZnJvbSB0aGlzIGZpbGUgY2F1c2VzIHNlcXVlbnRpYWwgcmVhZHMgdG8gZGlzcGxheQotCQltb3JlIGN1cnJlbnQgZGF0YS4gT25jZSBkYXRhIGlzIHJlYWQgZnJvbSB0aGlzCi0JCWZpbGUsIGl0IGlzIGNvbnN1bWVkLCBhbmQgd2lsbCBub3QgYmUgcmVhZAotCQlhZ2FpbiB3aXRoIGEgc2VxdWVudGlhbCByZWFkLiBUaGUgInRyYWNlIiBhbmQKLQkJImxhdGVuY3lfdHJhY2UiIGZpbGVzIGFyZSBzdGF0aWMsIGFuZCBpZiB0aGUKLQkJdHJhY2VyIGlzIG5vdCBhZGRpbmcgbW9yZSBkYXRhLCB0aGV5IHdpbGwgZGlzcGxheQotCQl0aGUgc2FtZSBpbmZvcm1hdGlvbiBldmVyeSB0aW1lIHRoZXkgYXJlIHJlYWQuCisJVGhpcyBzZXRzIG9yIGRpc3BsYXlzIHdoZXRoZXIgdGhlIGN1cnJlbnRfdHJhY2VyCisJaXMgYWN0aXZhdGVkIGFuZCB0cmFjaW5nIG9yIG5vdC4gRWNobyAwIGludG8gdGhpcworCWZpbGUgdG8gZGlzYWJsZSB0aGUgdHJhY2VyIG9yIDEgdG8gZW5hYmxlIGl0LgogCi0gIHRyYWNlX29wdGlvbnM6IFRoaXMgZmlsZSBsZXRzIHRoZSB1c2VyIGNvbnRyb2wgdGhlIGFtb3VudCBvZiBkYXRhCi0JCXRoYXQgaXMgZGlzcGxheWVkIGluIG9uZSBvZiB0aGUgYWJvdmUgb3V0cHV0Ci0JCWZpbGVzLgorICB0cmFjZToKIAotICB0cmFjZV9tYXhfbGF0ZW5jeTogU29tZSBvZiB0aGUgdHJhY2VycyByZWNvcmQgdGhlIG1heCBsYXRlbmN5LgotCQlGb3IgZXhhbXBsZSwgdGhlIHRpbWUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCi0JCVRoaXMgdGltZSBpcyBzYXZlZCBpbiB0aGlzIGZpbGUuIFRoZSBtYXggdHJhY2UKLQkJd2lsbCBhbHNvIGJlIHN0b3JlZCwgYW5kIGRpc3BsYXllZCBieSBlaXRoZXIKLQkJInRyYWNlIiBvciAibGF0ZW5jeV90cmFjZSIuICBBIG5ldyBtYXggdHJhY2Ugd2lsbAotCQlvbmx5IGJlIHJlY29yZGVkIGlmIHRoZSBsYXRlbmN5IGlzIGdyZWF0ZXIgdGhhbgotCQl0aGUgdmFsdWUgaW4gdGhpcyBmaWxlLiAoaW4gbWljcm9zZWNvbmRzKQorCVRoaXMgZmlsZSBob2xkcyB0aGUgb3V0cHV0IG9mIHRoZSB0cmFjZSBpbiBhIGh1bWFuCisJcmVhZGFibGUgZm9ybWF0IChkZXNjcmliZWQgYmVsb3cpLgogCi0gIGJ1ZmZlcl9zaXplX2tiOiBUaGlzIHNldHMgb3IgZGlzcGxheXMgdGhlIG51bWJlciBvZiBraWxvYnl0ZXMgZWFjaCBDUFUKLQkJYnVmZmVyIGNhbiBob2xkLiBUaGUgdHJhY2VyIGJ1ZmZlcnMgYXJlIHRoZSBzYW1lIHNpemUKLQkJZm9yIGVhY2ggQ1BVLiBUaGUgZGlzcGxheWVkIG51bWJlciBpcyB0aGUgc2l6ZSBvZiB0aGUKLQkJQ1BVIGJ1ZmZlciBhbmQgbm90IHRvdGFsIHNpemUgb2YgYWxsIGJ1ZmZlcnMuIFRoZQotCQl0cmFjZSBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgaW4gcGFnZXMgKGJsb2NrcyBvZiBtZW1vcnkKLQkJdGhhdCB0aGUga2VybmVsIHVzZXMgZm9yIGFsbG9jYXRpb24sIHVzdWFsbHkgNCBLQiBpbiBzaXplKS4KLQkJSWYgdGhlIGxhc3QgcGFnZSBhbGxvY2F0ZWQgaGFzIHJvb20gZm9yIG1vcmUgYnl0ZXMKLQkJdGhhbiByZXF1ZXN0ZWQsIHRoZSByZXN0IG9mIHRoZSBwYWdlIHdpbGwgYmUgdXNlZCwKLQkJbWFraW5nIHRoZSBhY3R1YWwgYWxsb2NhdGlvbiBiaWdnZXIgdGhhbiByZXF1ZXN0ZWQuCi0JCShOb3RlLCB0aGUgc2l6ZSBtYXkgbm90IGJlIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2Ugc2l6ZSBkdWUKLQkJdG8gYnVmZmVyIG1hbmFnbWVudCBvdmVyaGVhZC4pCisgIGxhdGVuY3lfdHJhY2U6CiAKLQkJVGhpcyBjYW4gb25seSBiZSB1cGRhdGVkIHdoZW4gdGhlIGN1cnJlbnRfdHJhY2VyCi0JCWlzIHNldCB0byAibm9wIi4KKwlUaGlzIGZpbGUgc2hvd3MgdGhlIHNhbWUgdHJhY2UgYnV0IHRoZSBpbmZvcm1hdGlvbgorCWlzIG9yZ2FuaXplZCBtb3JlIHRvIGRpc3BsYXkgcG9zc2libGUgbGF0ZW5jaWVzCisJaW4gdGhlIHN5c3RlbSAoZGVzY3JpYmVkIGJlbG93KS4KIAotICB0cmFjaW5nX2NwdW1hc2s6IFRoaXMgaXMgYSBtYXNrIHRoYXQgbGV0cyB0aGUgdXNlciBvbmx5IHRyYWNlCi0JCW9uIHNwZWNpZmllZCBDUFVTLiBUaGUgZm9ybWF0IGlzIGEgaGV4IHN0cmluZwotCQlyZXByZXNlbnRpbmcgdGhlIENQVVMuCisgIHRyYWNlX3BpcGU6CiAKLSAgc2V0X2Z0cmFjZV9maWx0ZXI6IFdoZW4gZHluYW1pYyBmdHJhY2UgaXMgY29uZmlndXJlZCBpbiAoc2VlIHRoZQotCQlzZWN0aW9uIGJlbG93ICJkeW5hbWljIGZ0cmFjZSIpLCB0aGUgY29kZSBpcyBkeW5hbWljYWxseQotCQltb2RpZmllZCAoY29kZSB0ZXh0IHJld3JpdGUpIHRvIGRpc2FibGUgY2FsbGluZyBvZiB0aGUKLQkJZnVuY3Rpb24gcHJvZmlsZXIgKG1jb3VudCkuIFRoaXMgbGV0cyB0cmFjaW5nIGJlIGNvbmZpZ3VyZWQKLQkJaW4gd2l0aCBwcmFjdGljYWxseSBubyBvdmVyaGVhZCBpbiBwZXJmb3JtYW5jZS4gIFRoaXMgYWxzbwotCQloYXMgYSBzaWRlIGVmZmVjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgc3BlY2lmaWMgZnVuY3Rpb25zCi0JCXRvIGJlIHRyYWNlZC4gRWNob2luZyBuYW1lcyBvZiBmdW5jdGlvbnMgaW50byB0aGlzIGZpbGUKLQkJd2lsbCBsaW1pdCB0aGUgdHJhY2UgdG8gb25seSB0aG9zZSBmdW5jdGlvbnMuCisJVGhlIG91dHB1dCBpcyB0aGUgc2FtZSBhcyB0aGUgInRyYWNlIiBmaWxlIGJ1dCB0aGlzCisJZmlsZSBpcyBtZWFudCB0byBiZSBzdHJlYW1lZCB3aXRoIGxpdmUgdHJhY2luZy4KKwlSZWFkcyBmcm9tIHRoaXMgZmlsZSB3aWxsIGJsb2NrIHVudGlsIG5ldyBkYXRhCisJaXMgcmV0cmlldmVkLiBVbmxpa2UgdGhlICJ0cmFjZSIgYW5kICJsYXRlbmN5X3RyYWNlIgorCWZpbGVzLCB0aGlzIGZpbGUgaXMgYSBjb25zdW1lci4gVGhpcyBtZWFucyByZWFkaW5nCisJZnJvbSB0aGlzIGZpbGUgY2F1c2VzIHNlcXVlbnRpYWwgcmVhZHMgdG8gZGlzcGxheQorCW1vcmUgY3VycmVudCBkYXRhLiBPbmNlIGRhdGEgaXMgcmVhZCBmcm9tIHRoaXMKKwlmaWxlLCBpdCBpcyBjb25zdW1lZCwgYW5kIHdpbGwgbm90IGJlIHJlYWQKKwlhZ2FpbiB3aXRoIGEgc2VxdWVudGlhbCByZWFkLiBUaGUgInRyYWNlIiBhbmQKKwkibGF0ZW5jeV90cmFjZSIgZmlsZXMgYXJlIHN0YXRpYywgYW5kIGlmIHRoZQorCXRyYWNlciBpcyBub3QgYWRkaW5nIG1vcmUgZGF0YSwgdGhleSB3aWxsIGRpc3BsYXkKKwl0aGUgc2FtZSBpbmZvcm1hdGlvbiBldmVyeSB0aW1lIHRoZXkgYXJlIHJlYWQuCiAKLSAgc2V0X2Z0cmFjZV9ub3RyYWNlOiBUaGlzIGhhcyBhbiBlZmZlY3Qgb3Bwb3NpdGUgdG8gdGhhdCBvZgotCQlzZXRfZnRyYWNlX2ZpbHRlci4gQW55IGZ1bmN0aW9uIHRoYXQgaXMgYWRkZWQgaGVyZSB3aWxsIG5vdAotCQliZSB0cmFjZWQuIElmIGEgZnVuY3Rpb24gZXhpc3RzIGluIGJvdGggc2V0X2Z0cmFjZV9maWx0ZXIKLQkJYW5kIHNldF9mdHJhY2Vfbm90cmFjZSwJdGhlIGZ1bmN0aW9uIHdpbGwgX25vdF8gYmUgdHJhY2VkLgorICB0cmFjZV9vcHRpb25zOgogCi0gIHNldF9mdHJhY2VfcGlkOiBIYXZlIHRoZSBmdW5jdGlvbiB0cmFjZXIgb25seSB0cmFjZSBhIHNpbmdsZSB0aHJlYWQuCisJVGhpcyBmaWxlIGxldHMgdGhlIHVzZXIgY29udHJvbCB0aGUgYW1vdW50IG9mIGRhdGEKKwl0aGF0IGlzIGRpc3BsYXllZCBpbiBvbmUgb2YgdGhlIGFib3ZlIG91dHB1dAorCWZpbGVzLgogCi0gIGF2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zOiBUaGlzIGxpc3RzIHRoZSBmdW5jdGlvbnMgdGhhdCBmdHJhY2UKLQkJaGFzIHByb2Nlc3NlZCBhbmQgY2FuIHRyYWNlLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9uCi0JCW5hbWVzIHRoYXQgeW91IGNhbiBwYXNzIHRvICJzZXRfZnRyYWNlX2ZpbHRlciIgb3IKLQkJInNldF9mdHJhY2Vfbm90cmFjZSIuIChTZWUgdGhlIHNlY3Rpb24gImR5bmFtaWMgZnRyYWNlIgotCQliZWxvdyBmb3IgbW9yZSBkZXRhaWxzLikKKyAgdHJhY2luZ19tYXhfbGF0ZW5jeToKKworCVNvbWUgb2YgdGhlIHRyYWNlcnMgcmVjb3JkIHRoZSBtYXggbGF0ZW5jeS4KKwlGb3IgZXhhbXBsZSwgdGhlIHRpbWUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuCisJVGhpcyB0aW1lIGlzIHNhdmVkIGluIHRoaXMgZmlsZS4gVGhlIG1heCB0cmFjZQorCXdpbGwgYWxzbyBiZSBzdG9yZWQsIGFuZCBkaXNwbGF5ZWQgYnkgZWl0aGVyCisJInRyYWNlIiBvciAibGF0ZW5jeV90cmFjZSIuICBBIG5ldyBtYXggdHJhY2Ugd2lsbAorCW9ubHkgYmUgcmVjb3JkZWQgaWYgdGhlIGxhdGVuY3kgaXMgZ3JlYXRlciB0aGFuCisJdGhlIHZhbHVlIGluIHRoaXMgZmlsZS4gKGluIG1pY3Jvc2Vjb25kcykKKworICBidWZmZXJfc2l6ZV9rYjoKKworCVRoaXMgc2V0cyBvciBkaXNwbGF5cyB0aGUgbnVtYmVyIG9mIGtpbG9ieXRlcyBlYWNoIENQVQorCWJ1ZmZlciBjYW4gaG9sZC4gVGhlIHRyYWNlciBidWZmZXJzIGFyZSB0aGUgc2FtZSBzaXplCisJZm9yIGVhY2ggQ1BVLiBUaGUgZGlzcGxheWVkIG51bWJlciBpcyB0aGUgc2l6ZSBvZiB0aGUKKwlDUFUgYnVmZmVyIGFuZCBub3QgdG90YWwgc2l6ZSBvZiBhbGwgYnVmZmVycy4gVGhlCisJdHJhY2UgYnVmZmVycyBhcmUgYWxsb2NhdGVkIGluIHBhZ2VzIChibG9ja3Mgb2YgbWVtb3J5CisJdGhhdCB0aGUga2VybmVsIHVzZXMgZm9yIGFsbG9jYXRpb24sIHVzdWFsbHkgNCBLQiBpbiBzaXplKS4KKwlJZiB0aGUgbGFzdCBwYWdlIGFsbG9jYXRlZCBoYXMgcm9vbSBmb3IgbW9yZSBieXRlcworCXRoYW4gcmVxdWVzdGVkLCB0aGUgcmVzdCBvZiB0aGUgcGFnZSB3aWxsIGJlIHVzZWQsCisJbWFraW5nIHRoZSBhY3R1YWwgYWxsb2NhdGlvbiBiaWdnZXIgdGhhbiByZXF1ZXN0ZWQuCisJKCBOb3RlLCB0aGUgc2l6ZSBtYXkgbm90IGJlIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2Ugc2l6ZQorCSAgZHVlIHRvIGJ1ZmZlciBtYW5hZ21lbnQgb3ZlcmhlYWQuICkKKworCVRoaXMgY2FuIG9ubHkgYmUgdXBkYXRlZCB3aGVuIHRoZSBjdXJyZW50X3RyYWNlcgorCWlzIHNldCB0byAibm9wIi4KKworICB0cmFjaW5nX2NwdW1hc2s6CisKKwlUaGlzIGlzIGEgbWFzayB0aGF0IGxldHMgdGhlIHVzZXIgb25seSB0cmFjZQorCW9uIHNwZWNpZmllZCBDUFVTLiBUaGUgZm9ybWF0IGlzIGEgaGV4IHN0cmluZworCXJlcHJlc2VudGluZyB0aGUgQ1BVUy4KKworICBzZXRfZnRyYWNlX2ZpbHRlcjoKKworCVdoZW4gZHluYW1pYyBmdHJhY2UgaXMgY29uZmlndXJlZCBpbiAoc2VlIHRoZQorCXNlY3Rpb24gYmVsb3cgImR5bmFtaWMgZnRyYWNlIiksIHRoZSBjb2RlIGlzIGR5bmFtaWNhbGx5CisJbW9kaWZpZWQgKGNvZGUgdGV4dCByZXdyaXRlKSB0byBkaXNhYmxlIGNhbGxpbmcgb2YgdGhlCisJZnVuY3Rpb24gcHJvZmlsZXIgKG1jb3VudCkuIFRoaXMgbGV0cyB0cmFjaW5nIGJlIGNvbmZpZ3VyZWQKKwlpbiB3aXRoIHByYWN0aWNhbGx5IG5vIG92ZXJoZWFkIGluIHBlcmZvcm1hbmNlLiAgVGhpcyBhbHNvCisJaGFzIGEgc2lkZSBlZmZlY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHNwZWNpZmljIGZ1bmN0aW9ucworCXRvIGJlIHRyYWNlZC4gRWNob2luZyBuYW1lcyBvZiBmdW5jdGlvbnMgaW50byB0aGlzIGZpbGUKKwl3aWxsIGxpbWl0IHRoZSB0cmFjZSB0byBvbmx5IHRob3NlIGZ1bmN0aW9ucy4KKworICBzZXRfZnRyYWNlX25vdHJhY2U6CisKKwlUaGlzIGhhcyBhbiBlZmZlY3Qgb3Bwb3NpdGUgdG8gdGhhdCBvZgorCXNldF9mdHJhY2VfZmlsdGVyLiBBbnkgZnVuY3Rpb24gdGhhdCBpcyBhZGRlZCBoZXJlIHdpbGwgbm90CisJYmUgdHJhY2VkLiBJZiBhIGZ1bmN0aW9uIGV4aXN0cyBpbiBib3RoIHNldF9mdHJhY2VfZmlsdGVyCisJYW5kIHNldF9mdHJhY2Vfbm90cmFjZSwJdGhlIGZ1bmN0aW9uIHdpbGwgX25vdF8gYmUgdHJhY2VkLgorCisgIHNldF9mdHJhY2VfcGlkOgorCisJSGF2ZSB0aGUgZnVuY3Rpb24gdHJhY2VyIG9ubHkgdHJhY2UgYSBzaW5nbGUgdGhyZWFkLgorCisgIHNldF9ncmFwaF9mdW5jdGlvbjoKKworCVNldCBhICJ0cmlnZ2VyIiBmdW5jdGlvbiB3aGVyZSB0cmFjaW5nIHNob3VsZCBzdGFydAorCXdpdGggdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciAoU2VlIHRoZSBzZWN0aW9uCisJImR5bmFtaWMgZnRyYWNlIiBmb3IgbW9yZSBkZXRhaWxzKS4KKworICBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9uczoKKworCVRoaXMgbGlzdHMgdGhlIGZ1bmN0aW9ucyB0aGF0IGZ0cmFjZQorCWhhcyBwcm9jZXNzZWQgYW5kIGNhbiB0cmFjZS4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbgorCW5hbWVzIHRoYXQgeW91IGNhbiBwYXNzIHRvICJzZXRfZnRyYWNlX2ZpbHRlciIgb3IKKwkic2V0X2Z0cmFjZV9ub3RyYWNlIi4gKFNlZSB0aGUgc2VjdGlvbiAiZHluYW1pYyBmdHJhY2UiCisJYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4pCiAKIAogVGhlIFRyYWNlcnMKQEAgLTE0MSwzNiArMTc1LDY2IEBACiAKIEhlcmUgaXMgdGhlIGxpc3Qgb2YgY3VycmVudCB0cmFjZXJzIHRoYXQgbWF5IGJlIGNvbmZpZ3VyZWQuCiAKLSAgZnVuY3Rpb24gLSBmdW5jdGlvbiB0cmFjZXIgdGhhdCB1c2VzIG1jb3VudCB0byB0cmFjZSBhbGwgZnVuY3Rpb25zLgorICAiZnVuY3Rpb24iCiAKLSAgc2NoZWRfc3dpdGNoIC0gdHJhY2VzIHRoZSBjb250ZXh0IHN3aXRjaGVzIGJldHdlZW4gdGFza3MuCisJRnVuY3Rpb24gY2FsbCB0cmFjZXIgdG8gdHJhY2UgYWxsIGtlcm5lbCBmdW5jdGlvbnMuCiAKLSAgaXJxc29mZiAtIHRyYWNlcyB0aGUgYXJlYXMgdGhhdCBkaXNhYmxlIGludGVycnVwdHMgYW5kIHNhdmVzCi0gIAkJdGhlIHRyYWNlIHdpdGggdGhlIGxvbmdlc3QgbWF4IGxhdGVuY3kuCi0JCVNlZSB0cmFjaW5nX21heF9sYXRlbmN5LiAgV2hlbiBhIG5ldyBtYXggaXMgcmVjb3JkZWQsCi0JCWl0IHJlcGxhY2VzIHRoZSBvbGQgdHJhY2UuIEl0IGlzIGJlc3QgdG8gdmlldyB0aGlzCi0JCXRyYWNlIHZpYSB0aGUgbGF0ZW5jeV90cmFjZSBmaWxlLgorICAiZnVuY3Rpb25fZ3JhcGhfdHJhY2VyIgogCi0gIHByZWVtcHRvZmYgLSBTaW1pbGFyIHRvIGlycXNvZmYgYnV0IHRyYWNlcyBhbmQgcmVjb3JkcyB0aGUgYW1vdW50IG9mCi0JCXRpbWUgZm9yIHdoaWNoIHByZWVtcHRpb24gaXMgZGlzYWJsZWQuCisJU2ltaWxhciB0byB0aGUgZnVuY3Rpb24gdHJhY2VyIGV4Y2VwdCB0aGF0IHRoZQorCWZ1bmN0aW9uIHRyYWNlciBwcm9iZXMgdGhlIGZ1bmN0aW9ucyBvbiB0aGVpciBlbnRyeQorCXdoZXJlYXMgdGhlIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciB0cmFjZXMgb24gYm90aCBlbnRyeQorCWFuZCBleGl0IG9mIHRoZSBmdW5jdGlvbnMuIEl0IHRoZW4gcHJvdmlkZXMgdGhlIGFiaWxpdHkKKwl0byBkcmF3IGEgZ3JhcGggb2YgZnVuY3Rpb24gY2FsbHMgc2ltaWxhciB0byBDIGNvZGUKKwlzb3VyY2UuCiAKLSAgcHJlZW1wdGlycXNvZmYgLSBTaW1pbGFyIHRvIGlycXNvZmYgYW5kIHByZWVtcHRvZmYsIGJ1dCB0cmFjZXMgYW5kCi0JCSByZWNvcmRzIHRoZSBsYXJnZXN0IHRpbWUgZm9yIHdoaWNoIGlycXMgYW5kL29yIHByZWVtcHRpb24KLQkJIGlzIGRpc2FibGVkLgorICAic2NoZWRfc3dpdGNoIgogCi0gIHdha2V1cCAtIFRyYWNlcyBhbmQgcmVjb3JkcyB0aGUgbWF4IGxhdGVuY3kgdGhhdCBpdCB0YWtlcyBmb3IKLQkJdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0byBnZXQgc2NoZWR1bGVkIGFmdGVyCi0JCWl0IGhhcyBiZWVuIHdva2VuIHVwLgorCVRyYWNlcyB0aGUgY29udGV4dCBzd2l0Y2hlcyBhbmQgd2FrZXVwcyBiZXR3ZWVuIHRhc2tzLgogCi0gIG5vcCAtIFRoaXMgaXMgbm90IGEgdHJhY2VyLiBUbyByZW1vdmUgYWxsIHRyYWNlcnMgZnJvbSB0cmFjaW5nCi0JCXNpbXBseSBlY2hvICJub3AiIGludG8gY3VycmVudF90cmFjZXIuCisgICJpcnFzb2ZmIgorCisJVHJhY2VzIHRoZSBhcmVhcyB0aGF0IGRpc2FibGUgaW50ZXJydXB0cyBhbmQgc2F2ZXMKKwl0aGUgdHJhY2Ugd2l0aCB0aGUgbG9uZ2VzdCBtYXggbGF0ZW5jeS4KKwlTZWUgdHJhY2luZ19tYXhfbGF0ZW5jeS4gV2hlbiBhIG5ldyBtYXggaXMgcmVjb3JkZWQsCisJaXQgcmVwbGFjZXMgdGhlIG9sZCB0cmFjZS4gSXQgaXMgYmVzdCB0byB2aWV3IHRoaXMKKwl0cmFjZSB2aWEgdGhlIGxhdGVuY3lfdHJhY2UgZmlsZS4KKworICAicHJlZW1wdG9mZiIKKworCVNpbWlsYXIgdG8gaXJxc29mZiBidXQgdHJhY2VzIGFuZCByZWNvcmRzIHRoZSBhbW91bnQgb2YKKwl0aW1lIGZvciB3aGljaCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLgorCisgICJwcmVlbXB0aXJxc29mZiIKKworCVNpbWlsYXIgdG8gaXJxc29mZiBhbmQgcHJlZW1wdG9mZiwgYnV0IHRyYWNlcyBhbmQKKwlyZWNvcmRzIHRoZSBsYXJnZXN0IHRpbWUgZm9yIHdoaWNoIGlycXMgYW5kL29yIHByZWVtcHRpb24KKwlpcyBkaXNhYmxlZC4KKworICAid2FrZXVwIgorCisJVHJhY2VzIGFuZCByZWNvcmRzIHRoZSBtYXggbGF0ZW5jeSB0aGF0IGl0IHRha2VzIGZvcgorCXRoZSBoaWdoZXN0IHByaW9yaXR5IHRhc2sgdG8gZ2V0IHNjaGVkdWxlZCBhZnRlcgorCWl0IGhhcyBiZWVuIHdva2VuIHVwLgorCisgICJody1icmFuY2gtdHJhY2VyIgorCisJVXNlcyB0aGUgQlRTIENQVSBmZWF0dXJlIG9uIHg4NiBDUFVzIHRvIHRyYWNlcyBhbGwKKwlicmFuY2hlcyBleGVjdXRlZC4KKworICAibm9wIgorCisJVGhpcyBpcyB0aGUgInRyYWNlIG5vdGhpbmciIHRyYWNlci4gVG8gcmVtb3ZlIGFsbAorCXRyYWNlcnMgZnJvbSB0cmFjaW5nIHNpbXBseSBlY2hvICJub3AiIGludG8KKwljdXJyZW50X3RyYWNlci4KIAogCiBFeGFtcGxlcyBvZiB1c2luZyB0aGUgdHJhY2VyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhlcmUgYXJlIHR5cGljYWwgZXhhbXBsZXMgb2YgdXNpbmcgdGhlIHRyYWNlcnMgd2hlbiBjb250cm9sbGluZyB0aGVtIG9ubHkKLXdpdGggdGhlIGRlYnVnZnMgaW50ZXJmYWNlICh3aXRob3V0IHVzaW5nIGFueSB1c2VyLWxhbmQgdXRpbGl0aWVzKS4KK0hlcmUgYXJlIHR5cGljYWwgZXhhbXBsZXMgb2YgdXNpbmcgdGhlIHRyYWNlcnMgd2hlbiBjb250cm9sbGluZwordGhlbSBvbmx5IHdpdGggdGhlIGRlYnVnZnMgaW50ZXJmYWNlICh3aXRob3V0IHVzaW5nIGFueQordXNlci1sYW5kIHV0aWxpdGllcykuCiAKIE91dHB1dCBmb3JtYXQ6CiAtLS0tLS0tLS0tLS0tLQpAQCAtMTg3LDE2ICsyNTEsMTYgQEAKICAgICAgICAgICAgIGJhc2gtNDI1MSAgWzAxXSAxMDE1Mi41ODM4NTU6IF9hdG9taWNfZGVjX2FuZF9sb2NrIDwtZHB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLQogCi1BIGhlYWRlciBpcyBwcmludGVkIHdpdGggdGhlIHRyYWNlciBuYW1lIHRoYXQgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHRyYWNlLgotSW4gdGhpcyBjYXNlIHRoZSB0cmFjZXIgaXMgImZ1bmN0aW9uIi4gVGhlbiBhIGhlYWRlciBzaG93aW5nIHRoZSBmb3JtYXQuIFRhc2sKLW5hbWUgImJhc2giLCB0aGUgdGFzayBQSUQgIjQyNTEiLCB0aGUgQ1BVIHRoYXQgaXQgd2FzIHJ1bm5pbmcgb24KLSIwMSIsIHRoZSB0aW1lc3RhbXAgaW4gPHNlY3M+Ljx1c2Vjcz4gZm9ybWF0LCB0aGUgZnVuY3Rpb24gbmFtZSB0aGF0IHdhcwotdHJhY2VkICJwYXRoX3B1dCIgYW5kIHRoZSBwYXJlbnQgZnVuY3Rpb24gdGhhdCBjYWxsZWQgdGhpcyBmdW5jdGlvbgotInBhdGhfd2FsayIuIFRoZSB0aW1lc3RhbXAgaXMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIGZ1bmN0aW9uIHdhcwotZW50ZXJlZC4KK0EgaGVhZGVyIGlzIHByaW50ZWQgd2l0aCB0aGUgdHJhY2VyIG5hbWUgdGhhdCBpcyByZXByZXNlbnRlZCBieQordGhlIHRyYWNlLiBJbiB0aGlzIGNhc2UgdGhlIHRyYWNlciBpcyAiZnVuY3Rpb24iLiBUaGVuIGEgaGVhZGVyCitzaG93aW5nIHRoZSBmb3JtYXQuIFRhc2sgbmFtZSAiYmFzaCIsIHRoZSB0YXNrIFBJRCAiNDI1MSIsIHRoZQorQ1BVIHRoYXQgaXQgd2FzIHJ1bm5pbmcgb24gIjAxIiwgdGhlIHRpbWVzdGFtcCBpbiA8c2Vjcz4uPHVzZWNzPgorZm9ybWF0LCB0aGUgZnVuY3Rpb24gbmFtZSB0aGF0IHdhcyB0cmFjZWQgInBhdGhfcHV0IiBhbmQgdGhlCitwYXJlbnQgZnVuY3Rpb24gdGhhdCBjYWxsZWQgdGhpcyBmdW5jdGlvbiAicGF0aF93YWxrIi4gVGhlCit0aW1lc3RhbXAgaXMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIGZ1bmN0aW9uIHdhcyBlbnRlcmVkLgogCi1UaGUgc2NoZWRfc3dpdGNoIHRyYWNlciBhbHNvIGluY2x1ZGVzIHRyYWNpbmcgb2YgdGFzayB3YWtldXBzIGFuZAotY29udGV4dCBzd2l0Y2hlcy4KK1RoZSBzY2hlZF9zd2l0Y2ggdHJhY2VyIGFsc28gaW5jbHVkZXMgdHJhY2luZyBvZiB0YXNrIHdha2V1cHMKK2FuZCBjb250ZXh0IHN3aXRjaGVzLgogCiAgICAgIGtzb2Z0aXJxZC8xLTcgICAgIFswMV0gIDE0NTMuMDcwMDEzOiAgICAgIDc6MTE1OlIgICArICAyOTE2OjExNTpTCiAgICAgIGtzb2Z0aXJxZC8xLTcgICAgIFswMV0gIDE0NTMuMDcwMDEzOiAgICAgIDc6MTE1OlIgICArICAgIDEwOjExNTpTCkBAIC0yMDUsOCArMjY5LDggQEAKICAgICAga29uZGVtYW5kLzEtMjkxNiAgWzAxXSAgMTQ1My4wNzAwMTM6ICAgMjkxNjoxMTU6UyA9PT4gICAgIDc6MTE1OlIKICAgICAga3NvZnRpcnFkLzEtNyAgICAgWzAxXSAgMTQ1My4wNzAwMTM6ICAgICAgNzoxMTU6UyA9PT4gICAgIDA6MTQwOlIKIAotV2FrZSB1cHMgYXJlIHJlcHJlc2VudGVkIGJ5IGEgIisiIGFuZCB0aGUgY29udGV4dCBzd2l0Y2hlcyBhcmUgc2hvd24gYXMKLSI9PT4iLiAgVGhlIGZvcm1hdCBpczoKK1dha2UgdXBzIGFyZSByZXByZXNlbnRlZCBieSBhICIrIiBhbmQgdGhlIGNvbnRleHQgc3dpdGNoZXMgYXJlCitzaG93biBhcyAiPT0+Ii4gIFRoZSBmb3JtYXQgaXM6CiAKICBDb250ZXh0IHN3aXRjaGVzOgogCkBAIC0yMjAsMTkgKzI4NCwyMCBAQAogCiAgIDxwaWQ+OjxwcmlvPjo8c3RhdGU+ICAgICsgIDxwaWQ+OjxwcmlvPjo8c3RhdGU+CiAKLVRoZSBwcmlvIGlzIHRoZSBpbnRlcm5hbCBrZXJuZWwgcHJpb3JpdHksIHdoaWNoIGlzIHRoZSBpbnZlcnNlIG9mIHRoZQotcHJpb3JpdHkgdGhhdCBpcyB1c3VhbGx5IGRpc3BsYXllZCBieSB1c2VyLXNwYWNlIHRvb2xzLiBaZXJvIHJlcHJlc2VudHMKLXRoZSBoaWdoZXN0IHByaW9yaXR5ICg5OSkuIFByaW8gMTAwIHN0YXJ0cyB0aGUgIm5pY2UiIHByaW9yaXRpZXMgd2l0aAotMTAwIGJlaW5nIGVxdWFsIHRvIG5pY2UgLTIwIGFuZCAxMzkgYmVpbmcgbmljZSAxOS4gVGhlIHByaW8gIjE0MCIgaXMKLXJlc2VydmVkIGZvciB0aGUgaWRsZSB0YXNrIHdoaWNoIGlzIHRoZSBsb3dlc3QgcHJpb3JpdHkgdGhyZWFkIChwaWQgMCkuCitUaGUgcHJpbyBpcyB0aGUgaW50ZXJuYWwga2VybmVsIHByaW9yaXR5LCB3aGljaCBpcyB0aGUgaW52ZXJzZQorb2YgdGhlIHByaW9yaXR5IHRoYXQgaXMgdXN1YWxseSBkaXNwbGF5ZWQgYnkgdXNlci1zcGFjZSB0b29scy4KK1plcm8gcmVwcmVzZW50cyB0aGUgaGlnaGVzdCBwcmlvcml0eSAoOTkpLiBQcmlvIDEwMCBzdGFydHMgdGhlCisibmljZSIgcHJpb3JpdGllcyB3aXRoIDEwMCBiZWluZyBlcXVhbCB0byBuaWNlIC0yMCBhbmQgMTM5IGJlaW5nCituaWNlIDE5LiBUaGUgcHJpbyAiMTQwIiBpcyByZXNlcnZlZCBmb3IgdGhlIGlkbGUgdGFzayB3aGljaCBpcwordGhlIGxvd2VzdCBwcmlvcml0eSB0aHJlYWQgKHBpZCAwKS4KIAogCiBMYXRlbmN5IHRyYWNlIGZvcm1hdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRm9yIHRyYWNlcyB0aGF0IGRpc3BsYXkgbGF0ZW5jeSB0aW1lcywgdGhlIGxhdGVuY3lfdHJhY2UgZmlsZSBnaXZlcwotc29tZXdoYXQgbW9yZSBpbmZvcm1hdGlvbiB0byBzZWUgd2h5IGEgbGF0ZW5jeSBoYXBwZW5lZC4gSGVyZSBpcyBhIHR5cGljYWwKLXRyYWNlLgorRm9yIHRyYWNlcyB0aGF0IGRpc3BsYXkgbGF0ZW5jeSB0aW1lcywgdGhlIGxhdGVuY3lfdHJhY2UgZmlsZQorZ2l2ZXMgc29tZXdoYXQgbW9yZSBpbmZvcm1hdGlvbiB0byBzZWUgd2h5IGEgbGF0ZW5jeSBoYXBwZW5lZC4KK0hlcmUgaXMgYSB0eXBpY2FsIHRyYWNlLgogCiAjIHRyYWNlcjogaXJxc29mZgogIwpAQCAtMjU5LDIwICszMjQsMjAgQEAKICAgPGlkbGU+LTAgICAgIDBkLnMxICAgOTh1cyA6IHRyYWNlX2hhcmRpcnFzX29uIChkb19zb2Z0aXJxKQogCiAKK1RoaXMgc2hvd3MgdGhhdCB0aGUgY3VycmVudCB0cmFjZXIgaXMgImlycXNvZmYiIHRyYWNpbmcgdGhlIHRpbWUKK2ZvciB3aGljaCBpbnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQuIEl0IGdpdmVzIHRoZSB0cmFjZSB2ZXJzaW9uCithbmQgdGhlIHZlcnNpb24gb2YgdGhlIGtlcm5lbCB1cG9uIHdoaWNoIHRoaXMgd2FzIGV4ZWN1dGVkIG9uCisoMi42LjI2LXJjOCkuIFRoZW4gaXQgZGlzcGxheXMgdGhlIG1heCBsYXRlbmN5IGluIG1pY3Jvc2VjcyAoOTcKK3VzKS4gVGhlIG51bWJlciBvZiB0cmFjZSBlbnRyaWVzIGRpc3BsYXllZCBhbmQgdGhlIHRvdGFsIG51bWJlcgorcmVjb3JkZWQgKGJvdGggYXJlIHRocmVlOiAjMy8zKS4gVGhlIHR5cGUgb2YgcHJlZW1wdGlvbiB0aGF0IHdhcwordXNlZCAoUFJFRU1QVCkuIFZQLCBLUCwgU1AsIGFuZCBIUCBhcmUgYWx3YXlzIHplcm8gYW5kIGFyZQorcmVzZXJ2ZWQgZm9yIGxhdGVyIHVzZS4gI1AgaXMgdGhlIG51bWJlciBvZiBvbmxpbmUgQ1BVUyAoI1A6MikuCiAKLVRoaXMgc2hvd3MgdGhhdCB0aGUgY3VycmVudCB0cmFjZXIgaXMgImlycXNvZmYiIHRyYWNpbmcgdGhlIHRpbWUgZm9yIHdoaWNoCi1pbnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQuIEl0IGdpdmVzIHRoZSB0cmFjZSB2ZXJzaW9uIGFuZCB0aGUgdmVyc2lvbgotb2YgdGhlIGtlcm5lbCB1cG9uIHdoaWNoIHRoaXMgd2FzIGV4ZWN1dGVkIG9uICgyLjYuMjYtcmM4KS4gVGhlbiBpdCBkaXNwbGF5cwotdGhlIG1heCBsYXRlbmN5IGluIG1pY3Jvc2VjcyAoOTcgdXMpLiBUaGUgbnVtYmVyIG9mIHRyYWNlIGVudHJpZXMgZGlzcGxheWVkCi1hbmQgdGhlIHRvdGFsIG51bWJlciByZWNvcmRlZCAoYm90aCBhcmUgdGhyZWU6ICMzLzMpLiBUaGUgdHlwZSBvZgotcHJlZW1wdGlvbiB0aGF0IHdhcyB1c2VkIChQUkVFTVBUKS4gVlAsIEtQLCBTUCwgYW5kIEhQIGFyZSBhbHdheXMgemVybwotYW5kIGFyZSByZXNlcnZlZCBmb3IgbGF0ZXIgdXNlLiAjUCBpcyB0aGUgbnVtYmVyIG9mIG9ubGluZSBDUFVTICgjUDoyKS4KK1RoZSB0YXNrIGlzIHRoZSBwcm9jZXNzIHRoYXQgd2FzIHJ1bm5pbmcgd2hlbiB0aGUgbGF0ZW5jeQorb2NjdXJyZWQuIChzd2FwcGVyIHBpZDogMCkuCiAKLVRoZSB0YXNrIGlzIHRoZSBwcm9jZXNzIHRoYXQgd2FzIHJ1bm5pbmcgd2hlbiB0aGUgbGF0ZW5jeSBvY2N1cnJlZC4KLShzd2FwcGVyIHBpZDogMCkuCi0KLVRoZSBzdGFydCBhbmQgc3RvcCAodGhlIGZ1bmN0aW9ucyBpbiB3aGljaCB0aGUgaW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkIGFuZAotZW5hYmxlZCByZXNwZWN0aXZlbHkpIHRoYXQgY2F1c2VkIHRoZSBsYXRlbmNpZXM6CitUaGUgc3RhcnQgYW5kIHN0b3AgKHRoZSBmdW5jdGlvbnMgaW4gd2hpY2ggdGhlIGludGVycnVwdHMgd2VyZQorZGlzYWJsZWQgYW5kIGVuYWJsZWQgcmVzcGVjdGl2ZWx5KSB0aGF0IGNhdXNlZCB0aGUgbGF0ZW5jaWVzOgogCiAgIGFwaWNfdGltZXJfaW50ZXJydXB0IGlzIHdoZXJlIHRoZSBpbnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQuCiAgIGRvX3NvZnRpcnEgaXMgd2hlcmUgdGhleSB3ZXJlIGVuYWJsZWQgYWdhaW4uCkBAIC0zMDgsMTIgKzM3MywxMiBAQAogCWxhdGVuY3lfdHJhY2UgZmlsZSBpcyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHRyYWNlLgogCiAgIGRlbGF5OiBUaGlzIGlzIGp1c3QgdG8gaGVscCBjYXRjaCB5b3VyIGV5ZSBhIGJpdCBiZXR0ZXIuIEFuZAotCW5lZWRzIHRvIGJlIGZpeGVkIHRvIGJlIG9ubHkgcmVsYXRpdmUgdG8gdGhlIHNhbWUgQ1BVLgotCVRoZSBtYXJrcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMKLQljdXJyZW50IHRyYWNlIGFuZCB0aGUgbmV4dCB0cmFjZS4KLQkgJyEnIC0gZ3JlYXRlciB0aGFuIHByZWVtcHRfbWFya190aHJlc2ggKGRlZmF1bHQgMTAwKQotCSAnKycgLSBncmVhdGVyIHRoYW4gMSBtaWNyb3NlY29uZAotCSAnICcgLSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMSBtaWNyb3NlY29uZC4KKwkgbmVlZHMgdG8gYmUgZml4ZWQgdG8gYmUgb25seSByZWxhdGl2ZSB0byB0aGUgc2FtZSBDUFUuCisJIFRoZSBtYXJrcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoaXMKKwkgY3VycmVudCB0cmFjZSBhbmQgdGhlIG5leHQgdHJhY2UuCisJICAnIScgLSBncmVhdGVyIHRoYW4gcHJlZW1wdF9tYXJrX3RocmVzaCAoZGVmYXVsdCAxMDApCisJICAnKycgLSBncmVhdGVyIHRoYW4gMSBtaWNyb3NlY29uZAorCSAgJyAnIC0gbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEgbWljcm9zZWNvbmQuCiAKICAgVGhlIHJlc3QgaXMgdGhlIHNhbWUgYXMgdGhlICd0cmFjZScgZmlsZS4KIApAQCAtMzIxLDE0ICszODYsMTUgQEAKIHRyYWNlX29wdGlvbnMKIC0tLS0tLS0tLS0tLS0KIAotVGhlIHRyYWNlX29wdGlvbnMgZmlsZSBpcyB1c2VkIHRvIGNvbnRyb2wgd2hhdCBnZXRzIHByaW50ZWQgaW4gdGhlIHRyYWNlCi1vdXRwdXQuIFRvIHNlZSB3aGF0IGlzIGF2YWlsYWJsZSwgc2ltcGx5IGNhdCB0aGUgZmlsZToKK1RoZSB0cmFjZV9vcHRpb25zIGZpbGUgaXMgdXNlZCB0byBjb250cm9sIHdoYXQgZ2V0cyBwcmludGVkIGluCit0aGUgdHJhY2Ugb3V0cHV0LiBUbyBzZWUgd2hhdCBpcyBhdmFpbGFibGUsIHNpbXBseSBjYXQgdGhlIGZpbGU6CiAKICAgY2F0IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX29wdGlvbnMKICAgcHJpbnQtcGFyZW50IG5vc3ltLW9mZnNldCBub3N5bS1hZGRyIG5vdmVyYm9zZSBub3JhdyBub2hleCBub2JpbiBcCi0gbm9ibG9jayBub3N0YWNrdHJhY2Ugbm9zY2hlZC10cmVlIG5vdXNlcnN0YWNrdHJhY2Ugbm9zeW0tdXNlcm9iagorICBub2Jsb2NrIG5vc3RhY2t0cmFjZSBub3NjaGVkLXRyZWUgbm91c2Vyc3RhY2t0cmFjZSBub3N5bS11c2Vyb2JqCiAKLVRvIGRpc2FibGUgb25lIG9mIHRoZSBvcHRpb25zLCBlY2hvIGluIHRoZSBvcHRpb24gcHJlcGVuZGVkIHdpdGggIm5vIi4KK1RvIGRpc2FibGUgb25lIG9mIHRoZSBvcHRpb25zLCBlY2hvIGluIHRoZSBvcHRpb24gcHJlcGVuZGVkIHdpdGgKKyJubyIuCiAKICAgZWNobyBub3ByaW50LXBhcmVudCA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX29wdGlvbnMKIApAQCAtMzM4LDggKzQwNCw4IEBACiAKIEhlcmUgYXJlIHRoZSBhdmFpbGFibGUgb3B0aW9uczoKIAotICBwcmludC1wYXJlbnQgLSBPbiBmdW5jdGlvbiB0cmFjZXMsIGRpc3BsYXkgdGhlIGNhbGxpbmcgZnVuY3Rpb24KLQkJYXMgd2VsbCBhcyB0aGUgZnVuY3Rpb24gYmVpbmcgdHJhY2VkLgorICBwcmludC1wYXJlbnQgLSBPbiBmdW5jdGlvbiB0cmFjZXMsIGRpc3BsYXkgdGhlIGNhbGxpbmcgKHBhcmVudCkKKwkJIGZ1bmN0aW9uIGFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9uIGJlaW5nIHRyYWNlZC4KIAogICBwcmludC1wYXJlbnQ6CiAgICBiYXNoLTQwMDAgIFswMV0gIDE0NzcuNjA2Njk0OiBzaW1wbGVfc3RydG91bCA8LXN0cmljdF9zdHJ0b3VsCkBAIC0zNDgsMTUgKzQxNCwxNiBAQAogICAgYmFzaC00MDAwICBbMDFdICAxNDc3LjYwNjY5NDogc2ltcGxlX3N0cnRvdWwKIAogCi0gIHN5bS1vZmZzZXQgLSBEaXNwbGF5IG5vdCBvbmx5IHRoZSBmdW5jdGlvbiBuYW1lLCBidXQgYWxzbyB0aGUgb2Zmc2V0Ci0JCWluIHRoZSBmdW5jdGlvbi4gRm9yIGV4YW1wbGUsIGluc3RlYWQgb2Ygc2VlaW5nIGp1c3QKLQkJImt0aW1lX2dldCIsIHlvdSB3aWxsIHNlZSAia3RpbWVfZ2V0KzB4Yi8weDIwIi4KKyAgc3ltLW9mZnNldCAtIERpc3BsYXkgbm90IG9ubHkgdGhlIGZ1bmN0aW9uIG5hbWUsIGJ1dCBhbHNvIHRoZQorCSAgICAgICBvZmZzZXQgaW4gdGhlIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSwgaW5zdGVhZCBvZgorCSAgICAgICBzZWVpbmcganVzdCAia3RpbWVfZ2V0IiwgeW91IHdpbGwgc2VlCisJICAgICAgICJrdGltZV9nZXQrMHhiLzB4MjAiLgogCiAgIHN5bS1vZmZzZXQ6CiAgICBiYXNoLTQwMDAgIFswMV0gIDE0NzcuNjA2Njk0OiBzaW1wbGVfc3RydG91bCsweDYvMHhhMAogCi0gIHN5bS1hZGRyIC0gdGhpcyB3aWxsIGFsc28gZGlzcGxheSB0aGUgZnVuY3Rpb24gYWRkcmVzcyBhcyB3ZWxsIGFzCi0JCXRoZSBmdW5jdGlvbiBuYW1lLgorICBzeW0tYWRkciAtIHRoaXMgd2lsbCBhbHNvIGRpc3BsYXkgdGhlIGZ1bmN0aW9uIGFkZHJlc3MgYXMgd2VsbAorCSAgICAgYXMgdGhlIGZ1bmN0aW9uIG5hbWUuCiAKICAgc3ltLWFkZHI6CiAgICBiYXNoLTQwMDAgIFswMV0gIDE0NzcuNjA2Njk0OiBzaW1wbGVfc3RydG91bCA8YzAzMzkzNDY+CkBAIC0zNjYsMzUgKzQzMyw0MSBAQAogICAgIGJhc2ggIDQwMDAgMSAwIDAwMDAwMDAwIDAwMDEwYTk1IFs1ODEyN2QyNl0gMTcyMC40MTVtcyBcCiAgICAgKCswLjAwMG1zKTogc2ltcGxlX3N0cnRvdWwgKHN0cmljdF9zdHJ0b3VsKQogCi0gIHJhdyAtIFRoaXMgd2lsbCBkaXNwbGF5IHJhdyBudW1iZXJzLiBUaGlzIG9wdGlvbiBpcyBiZXN0IGZvciB1c2Ugd2l0aAotCXVzZXIgYXBwbGljYXRpb25zIHRoYXQgY2FuIHRyYW5zbGF0ZSB0aGUgcmF3IG51bWJlcnMgYmV0dGVyIHRoYW4KLQloYXZpbmcgaXQgZG9uZSBpbiB0aGUga2VybmVsLgorICByYXcgLSBUaGlzIHdpbGwgZGlzcGxheSByYXcgbnVtYmVycy4gVGhpcyBvcHRpb24gaXMgYmVzdCBmb3IKKwl1c2Ugd2l0aCB1c2VyIGFwcGxpY2F0aW9ucyB0aGF0IGNhbiB0cmFuc2xhdGUgdGhlIHJhdworCW51bWJlcnMgYmV0dGVyIHRoYW4gaGF2aW5nIGl0IGRvbmUgaW4gdGhlIGtlcm5lbC4KIAotICBoZXggLSBTaW1pbGFyIHRvIHJhdywgYnV0IHRoZSBudW1iZXJzIHdpbGwgYmUgaW4gYSBoZXhhZGVjaW1hbCBmb3JtYXQuCisgIGhleCAtIFNpbWlsYXIgdG8gcmF3LCBidXQgdGhlIG51bWJlcnMgd2lsbCBiZSBpbiBhIGhleGFkZWNpbWFsCisJZm9ybWF0LgogCiAgIGJpbiAtIFRoaXMgd2lsbCBwcmludCBvdXQgdGhlIGZvcm1hdHMgaW4gcmF3IGJpbmFyeS4KIAogICBibG9jayAtIFRCRCAobmVlZHMgdXBkYXRlKQogCi0gIHN0YWNrdHJhY2UgLSBUaGlzIGlzIG9uZSBvZiB0aGUgb3B0aW9ucyB0aGF0IGNoYW5nZXMgdGhlIHRyYWNlIGl0c2VsZi4KLQkJV2hlbiBhIHRyYWNlIGlzIHJlY29yZGVkLCBzbyBpcyB0aGUgc3RhY2sgb2YgZnVuY3Rpb25zLgotCQlUaGlzIGFsbG93cyBmb3IgYmFjayB0cmFjZXMgb2YgdHJhY2Ugc2l0ZXMuCisgIHN0YWNrdHJhY2UgLSBUaGlzIGlzIG9uZSBvZiB0aGUgb3B0aW9ucyB0aGF0IGNoYW5nZXMgdGhlIHRyYWNlCisJICAgICAgIGl0c2VsZi4gV2hlbiBhIHRyYWNlIGlzIHJlY29yZGVkLCBzbyBpcyB0aGUgc3RhY2sKKwkgICAgICAgb2YgZnVuY3Rpb25zLiBUaGlzIGFsbG93cyBmb3IgYmFjayB0cmFjZXMgb2YKKwkgICAgICAgdHJhY2Ugc2l0ZXMuCiAKLSAgdXNlcnN0YWNrdHJhY2UgLSBUaGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSB0cmFjZS4KLQkJICAgSXQgcmVjb3JkcyBhIHN0YWNrdHJhY2Ugb2YgdGhlIGN1cnJlbnQgdXNlcnNwYWNlIHRocmVhZC4KKyAgdXNlcnN0YWNrdHJhY2UgLSBUaGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSB0cmFjZS4gSXQgcmVjb3JkcyBhCisJCSAgIHN0YWNrdHJhY2Ugb2YgdGhlIGN1cnJlbnQgdXNlcnNwYWNlIHRocmVhZC4KIAotICBzeW0tdXNlcm9iaiAtIHdoZW4gdXNlciBzdGFja3RyYWNlIGFyZSBlbmFibGVkLCBsb29rIHVwIHdoaWNoIG9iamVjdCB0aGUKLQkJYWRkcmVzcyBiZWxvbmdzIHRvLCBhbmQgcHJpbnQgYSByZWxhdGl2ZSBhZGRyZXNzCi0JCVRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgd2hlbiBBU0xSIGlzIG9uLCBvdGhlcndpc2UgeW91IGRvbid0Ci0JCWdldCBhIGNoYW5jZSB0byByZXNvbHZlIHRoZSBhZGRyZXNzIHRvIG9iamVjdC9maWxlL2xpbmUgYWZ0ZXIgdGhlIGFwcCBpcyBubwotCQlsb25nZXIgcnVubmluZworICBzeW0tdXNlcm9iaiAtIHdoZW4gdXNlciBzdGFja3RyYWNlIGFyZSBlbmFibGVkLCBsb29rIHVwIHdoaWNoCisJCW9iamVjdCB0aGUgYWRkcmVzcyBiZWxvbmdzIHRvLCBhbmQgcHJpbnQgYQorCQlyZWxhdGl2ZSBhZGRyZXNzLiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4KKwkJQVNMUiBpcyBvbiwgb3RoZXJ3aXNlIHlvdSBkb24ndCBnZXQgYSBjaGFuY2UgdG8KKwkJcmVzb2x2ZSB0aGUgYWRkcmVzcyB0byBvYmplY3QvZmlsZS9saW5lIGFmdGVyCisJCXRoZSBhcHAgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcKIAotCQlUaGUgbG9va3VwIGlzIHBlcmZvcm1lZCB3aGVuIHlvdSByZWFkIHRyYWNlLHRyYWNlX3BpcGUsbGF0ZW5jeV90cmFjZS4gRXhhbXBsZToKKwkJVGhlIGxvb2t1cCBpcyBwZXJmb3JtZWQgd2hlbiB5b3UgcmVhZAorCQl0cmFjZSx0cmFjZV9waXBlLGxhdGVuY3lfdHJhY2UuIEV4YW1wbGU6CiAKIAkJYS5vdXQtMTYyMyAgWzAwMF0gNDA4NzQuNDY1MDY4OiAvcm9vdC9hLm91dFsrMHg0ODBdIDwtL3Jvb3QvYS5vdXRbKzAKIHg0OTRdIDwtIC9yb290L2Eub3V0WysweDRhOF0gPC0gL2xpYi9saWJjLTIuNy5zb1srMHgxZTFhNl0KIAotICBzY2hlZC10cmVlIC0gVEJEIChhbnkgdXNlcnM/PykKKyAgc2NoZWQtdHJlZSAtIHRyYWNlIGFsbCB0YXNrcyB0aGF0IGFyZSBvbiB0aGUgcnVucXVldWUsIGF0CisJICAgICAgIGV2ZXJ5IHNjaGVkdWxpbmcgZXZlbnQuIFdpbGwgYWRkIG92ZXJoZWFkIGlmCisJICAgICAgIHRoZXJlJ3MgYSBsb3Qgb2YgdGFza3MgcnVubmluZyBhdCBvbmNlLgogCiAKIHNjaGVkX3N3aXRjaApAQCAtNDMxLDE4ICs1MDQsMTkgQEAKICBbLi4uXQogCiAKLUFzIHdlIGhhdmUgZGlzY3Vzc2VkIHByZXZpb3VzbHkgYWJvdXQgdGhpcyBmb3JtYXQsIHRoZSBoZWFkZXIgc2hvd3MKLXRoZSBuYW1lIG9mIHRoZSB0cmFjZSBhbmQgcG9pbnRzIHRvIHRoZSBvcHRpb25zLiBUaGUgIkZVTkNUSU9OIgotaXMgYSBtaXNub21lciBzaW5jZSBoZXJlIGl0IHJlcHJlc2VudHMgdGhlIHdha2UgdXBzIGFuZCBjb250ZXh0Ci1zd2l0Y2hlcy4KK0FzIHdlIGhhdmUgZGlzY3Vzc2VkIHByZXZpb3VzbHkgYWJvdXQgdGhpcyBmb3JtYXQsIHRoZSBoZWFkZXIKK3Nob3dzIHRoZSBuYW1lIG9mIHRoZSB0cmFjZSBhbmQgcG9pbnRzIHRvIHRoZSBvcHRpb25zLiBUaGUKKyJGVU5DVElPTiIgaXMgYSBtaXNub21lciBzaW5jZSBoZXJlIGl0IHJlcHJlc2VudHMgdGhlIHdha2UgdXBzCithbmQgY29udGV4dCBzd2l0Y2hlcy4KIAotVGhlIHNjaGVkX3N3aXRjaCBmaWxlIG9ubHkgbGlzdHMgdGhlIHdha2UgdXBzIChyZXByZXNlbnRlZCB3aXRoICcrJykKLWFuZCBjb250ZXh0IHN3aXRjaGVzICgnPT0+Jykgd2l0aCB0aGUgcHJldmlvdXMgdGFzayBvciBjdXJyZW50IHRhc2sKLWZpcnN0IGZvbGxvd2VkIGJ5IHRoZSBuZXh0IHRhc2sgb3IgdGFzayB3YWtpbmcgdXAuIFRoZSBmb3JtYXQgZm9yIGJvdGgKLW9mIHRoZXNlIGlzIFBJRDpLRVJORUwtUFJJTzpUQVNLLVNUQVRFLiBSZW1lbWJlciB0aGF0IHRoZSBLRVJORUwtUFJJTwotaXMgdGhlIGludmVyc2Ugb2YgdGhlIGFjdHVhbCBwcmlvcml0eSB3aXRoIHplcm8gKDApIGJlaW5nIHRoZSBoaWdoZXN0Ci1wcmlvcml0eSBhbmQgdGhlIG5pY2UgdmFsdWVzIHN0YXJ0aW5nIGF0IDEwMCAobmljZSAtMjApLiBCZWxvdyBpcwotYSBxdWljayBjaGFydCB0byBtYXAgdGhlIGtlcm5lbCBwcmlvcml0eSB0byB1c2VyIGxhbmQgcHJpb3JpdGllcy4KK1RoZSBzY2hlZF9zd2l0Y2ggZmlsZSBvbmx5IGxpc3RzIHRoZSB3YWtlIHVwcyAocmVwcmVzZW50ZWQgd2l0aAorJysnKSBhbmQgY29udGV4dCBzd2l0Y2hlcyAoJz09PicpIHdpdGggdGhlIHByZXZpb3VzIHRhc2sgb3IKK2N1cnJlbnQgdGFzayBmaXJzdCBmb2xsb3dlZCBieSB0aGUgbmV4dCB0YXNrIG9yIHRhc2sgd2FraW5nIHVwLgorVGhlIGZvcm1hdCBmb3IgYm90aCBvZiB0aGVzZSBpcyBQSUQ6S0VSTkVMLVBSSU86VEFTSy1TVEFURS4KK1JlbWVtYmVyIHRoYXQgdGhlIEtFUk5FTC1QUklPIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBhY3R1YWwKK3ByaW9yaXR5IHdpdGggemVybyAoMCkgYmVpbmcgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgYW5kIHRoZSBuaWNlCit2YWx1ZXMgc3RhcnRpbmcgYXQgMTAwIChuaWNlIC0yMCkuIEJlbG93IGlzIGEgcXVpY2sgY2hhcnQgdG8gbWFwCit0aGUga2VybmVsIHByaW9yaXR5IHRvIHVzZXIgbGFuZCBwcmlvcml0aWVzLgogCiAgIEtlcm5lbCBwcmlvcml0eTogMCB0byA5OSAgICA9PT4gdXNlciBSVCBwcmlvcml0eSA5OSB0byAwCiAgIEtlcm5lbCBwcmlvcml0eTogMTAwIHRvIDEzOSA9PT4gdXNlciBuaWNlIC0yMCB0byAxOQpAQCAtNDYzLDEwICs1MzcsMTAgQEAKIGZ0cmFjZV9lbmFibGVkCiAtLS0tLS0tLS0tLS0tLQogCi1UaGUgZm9sbG93aW5nIHRyYWNlcnMgKGxpc3RlZCBiZWxvdykgZ2l2ZSBkaWZmZXJlbnQgb3V0cHV0IGRlcGVuZGluZwotb24gd2hldGhlciBvciBub3QgdGhlIHN5c2N0bCBmdHJhY2VfZW5hYmxlZCBpcyBzZXQuIFRvIHNldCBmdHJhY2VfZW5hYmxlZCwKLW9uZSBjYW4gZWl0aGVyIHVzZSB0aGUgc3lzY3RsIGZ1bmN0aW9uIG9yIHNldCBpdCB2aWEgdGhlIHByb2MKLWZpbGUgc3lzdGVtIGludGVyZmFjZS4KK1RoZSBmb2xsb3dpbmcgdHJhY2VycyAobGlzdGVkIGJlbG93KSBnaXZlIGRpZmZlcmVudCBvdXRwdXQKK2RlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgc3lzY3RsIGZ0cmFjZV9lbmFibGVkIGlzIHNldC4gVG8KK3NldCBmdHJhY2VfZW5hYmxlZCwgb25lIGNhbiBlaXRoZXIgdXNlIHRoZSBzeXNjdGwgZnVuY3Rpb24gb3IKK3NldCBpdCB2aWEgdGhlIHByb2MgZmlsZSBzeXN0ZW0gaW50ZXJmYWNlLgogCiAgIHN5c2N0bCBrZXJuZWwuZnRyYWNlX2VuYWJsZWQ9MQogCkBAIC00NzQsMTIgKzU0OCwxMiBAQAogCiAgIGVjaG8gMSA+IC9wcm9jL3N5cy9rZXJuZWwvZnRyYWNlX2VuYWJsZWQKIAotVG8gZGlzYWJsZSBmdHJhY2VfZW5hYmxlZCBzaW1wbHkgcmVwbGFjZSB0aGUgJzEnIHdpdGggJzAnIGluCi10aGUgYWJvdmUgY29tbWFuZHMuCitUbyBkaXNhYmxlIGZ0cmFjZV9lbmFibGVkIHNpbXBseSByZXBsYWNlIHRoZSAnMScgd2l0aCAnMCcgaW4gdGhlCithYm92ZSBjb21tYW5kcy4KIAotV2hlbiBmdHJhY2VfZW5hYmxlZCBpcyBzZXQgdGhlIHRyYWNlcnMgd2lsbCBhbHNvIHJlY29yZCB0aGUgZnVuY3Rpb25zCi10aGF0IGFyZSB3aXRoaW4gdGhlIHRyYWNlLiBUaGUgZGVzY3JpcHRpb25zIG9mIHRoZSB0cmFjZXJzCi13aWxsIGFsc28gc2hvdyBhbiBleGFtcGxlIHdpdGggZnRyYWNlIGVuYWJsZWQuCitXaGVuIGZ0cmFjZV9lbmFibGVkIGlzIHNldCB0aGUgdHJhY2VycyB3aWxsIGFsc28gcmVjb3JkIHRoZQorZnVuY3Rpb25zIHRoYXQgYXJlIHdpdGhpbiB0aGUgdHJhY2UuIFRoZSBkZXNjcmlwdGlvbnMgb2YgdGhlCit0cmFjZXJzIHdpbGwgYWxzbyBzaG93IGFuIGV4YW1wbGUgd2l0aCBmdHJhY2UgZW5hYmxlZC4KIAogCiBpcnFzb2ZmCkBAIC00ODcsMTcgKzU2MSwxOCBAQAogCiBXaGVuIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCB0aGUgQ1BVIGNhbiBub3QgcmVhY3QgdG8gYW55IG90aGVyCiBleHRlcm5hbCBldmVudCAoYmVzaWRlcyBOTUlzIGFuZCBTTUlzKS4gVGhpcyBwcmV2ZW50cyB0aGUgdGltZXIKLWludGVycnVwdCBmcm9tIHRyaWdnZXJpbmcgb3IgdGhlIG1vdXNlIGludGVycnVwdCBmcm9tIGxldHRpbmcgdGhlCi1rZXJuZWwga25vdyBvZiBhIG5ldyBtb3VzZSBldmVudC4gVGhlIHJlc3VsdCBpcyBhIGxhdGVuY3kgd2l0aCB0aGUKLXJlYWN0aW9uIHRpbWUuCitpbnRlcnJ1cHQgZnJvbSB0cmlnZ2VyaW5nIG9yIHRoZSBtb3VzZSBpbnRlcnJ1cHQgZnJvbSBsZXR0aW5nCit0aGUga2VybmVsIGtub3cgb2YgYSBuZXcgbW91c2UgZXZlbnQuIFRoZSByZXN1bHQgaXMgYSBsYXRlbmN5Cit3aXRoIHRoZSByZWFjdGlvbiB0aW1lLgogCi1UaGUgaXJxc29mZiB0cmFjZXIgdHJhY2tzIHRoZSB0aW1lIGZvciB3aGljaCBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KLVdoZW4gYSBuZXcgbWF4aW11bSBsYXRlbmN5IGlzIGhpdCwgdGhlIHRyYWNlciBzYXZlcyB0aGUgdHJhY2UgbGVhZGluZyB1cAotdG8gdGhhdCBsYXRlbmN5IHBvaW50IHNvIHRoYXQgZXZlcnkgdGltZSBhIG5ldyBtYXhpbXVtIGlzIHJlYWNoZWQsIHRoZSBvbGQKLXNhdmVkIHRyYWNlIGlzIGRpc2NhcmRlZCBhbmQgdGhlIG5ldyB0cmFjZSBpcyBzYXZlZC4KK1RoZSBpcnFzb2ZmIHRyYWNlciB0cmFja3MgdGhlIHRpbWUgZm9yIHdoaWNoIGludGVycnVwdHMgYXJlCitkaXNhYmxlZC4gV2hlbiBhIG5ldyBtYXhpbXVtIGxhdGVuY3kgaXMgaGl0LCB0aGUgdHJhY2VyIHNhdmVzCit0aGUgdHJhY2UgbGVhZGluZyB1cCB0byB0aGF0IGxhdGVuY3kgcG9pbnQgc28gdGhhdCBldmVyeSB0aW1lIGEKK25ldyBtYXhpbXVtIGlzIHJlYWNoZWQsIHRoZSBvbGQgc2F2ZWQgdHJhY2UgaXMgZGlzY2FyZGVkIGFuZCB0aGUKK25ldyB0cmFjZSBpcyBzYXZlZC4KIAotVG8gcmVzZXQgdGhlIG1heGltdW0sIGVjaG8gMCBpbnRvIHRyYWNpbmdfbWF4X2xhdGVuY3kuIEhlcmUgaXMgYW4KLWV4YW1wbGU6CitUbyByZXNldCB0aGUgbWF4aW11bSwgZWNobyAwIGludG8gdHJhY2luZ19tYXhfbGF0ZW5jeS4gSGVyZSBpcworYW4gZXhhbXBsZToKIAogICMgZWNobyBpcnFzb2ZmID4gL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKICAjIGVjaG8gMCA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfbWF4X2xhdGVuY3kKQEAgLTUzMiwxMCArNjA3LDExIEBACiAKIAogSGVyZSB3ZSBzZWUgdGhhdCB0aGF0IHdlIGhhZCBhIGxhdGVuY3kgb2YgMTIgbWljcm9zZWNzICh3aGljaCBpcwotdmVyeSBnb29kKS4gVGhlIF93cml0ZV9sb2NrX2lycSBpbiBzeXNfc2V0cGdpZCBkaXNhYmxlZCBpbnRlcnJ1cHRzLgotVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgMTIgYW5kIHRoZSBkaXNwbGF5ZWQgdGltZXN0YW1wIDE0dXMgb2NjdXJyZWQKLWJlY2F1c2UgdGhlIGNsb2NrIHdhcyBpbmNyZW1lbnRlZCBiZXR3ZWVuIHRoZSB0aW1lIG9mIHJlY29yZGluZyB0aGUgbWF4Ci1sYXRlbmN5IGFuZCB0aGUgdGltZSBvZiByZWNvcmRpbmcgdGhlIGZ1bmN0aW9uIHRoYXQgaGFkIHRoYXQgbGF0ZW5jeS4KK3ZlcnkgZ29vZCkuIFRoZSBfd3JpdGVfbG9ja19pcnEgaW4gc3lzX3NldHBnaWQgZGlzYWJsZWQKK2ludGVycnVwdHMuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIDEyIGFuZCB0aGUgZGlzcGxheWVkCit0aW1lc3RhbXAgMTR1cyBvY2N1cnJlZCBiZWNhdXNlIHRoZSBjbG9jayB3YXMgaW5jcmVtZW50ZWQKK2JldHdlZW4gdGhlIHRpbWUgb2YgcmVjb3JkaW5nIHRoZSBtYXggbGF0ZW5jeSBhbmQgdGhlIHRpbWUgb2YKK3JlY29yZGluZyB0aGUgZnVuY3Rpb24gdGhhdCBoYWQgdGhhdCBsYXRlbmN5LgogCiBOb3RlIHRoZSBhYm92ZSBleGFtcGxlIGhhZCBmdHJhY2VfZW5hYmxlZCBub3Qgc2V0LiBJZiB3ZSBzZXQgdGhlCiBmdHJhY2VfZW5hYmxlZCwgd2UgZ2V0IGEgbXVjaCBsYXJnZXIgb3V0cHV0OgpAQCAtNTg2LDI0ICs2NjIsMjQgQEAKIAogCiBIZXJlIHdlIHRyYWNlZCBhIDUwIG1pY3Jvc2Vjb25kIGxhdGVuY3kuIEJ1dCB3ZSBhbHNvIHNlZSBhbGwgdGhlCi1mdW5jdGlvbnMgdGhhdCB3ZXJlIGNhbGxlZCBkdXJpbmcgdGhhdCB0aW1lLiBOb3RlIHRoYXQgYnkgZW5hYmxpbmcKLWZ1bmN0aW9uIHRyYWNpbmcsIHdlIGluY3VyIGFuIGFkZGVkIG92ZXJoZWFkLiBUaGlzIG92ZXJoZWFkIG1heQotZXh0ZW5kIHRoZSBsYXRlbmN5IHRpbWVzLiBCdXQgbmV2ZXJ0aGVsZXNzLCB0aGlzIHRyYWNlIGhhcyBwcm92aWRlZAotc29tZSB2ZXJ5IGhlbHBmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uLgorZnVuY3Rpb25zIHRoYXQgd2VyZSBjYWxsZWQgZHVyaW5nIHRoYXQgdGltZS4gTm90ZSB0aGF0IGJ5CitlbmFibGluZyBmdW5jdGlvbiB0cmFjaW5nLCB3ZSBpbmN1ciBhbiBhZGRlZCBvdmVyaGVhZC4gVGhpcworb3ZlcmhlYWQgbWF5IGV4dGVuZCB0aGUgbGF0ZW5jeSB0aW1lcy4gQnV0IG5ldmVydGhlbGVzcywgdGhpcwordHJhY2UgaGFzIHByb3ZpZGVkIHNvbWUgdmVyeSBoZWxwZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4KIAogCiBwcmVlbXB0b2ZmCiAtLS0tLS0tLS0tCiAKLVdoZW4gcHJlZW1wdGlvbiBpcyBkaXNhYmxlZCwgd2UgbWF5IGJlIGFibGUgdG8gcmVjZWl2ZSBpbnRlcnJ1cHRzIGJ1dAotdGhlIHRhc2sgY2Fubm90IGJlIHByZWVtcHRlZCBhbmQgYSBoaWdoZXIgcHJpb3JpdHkgdGFzayBtdXN0IHdhaXQKLWZvciBwcmVlbXB0aW9uIHRvIGJlIGVuYWJsZWQgYWdhaW4gYmVmb3JlIGl0IGNhbiBwcmVlbXB0IGEgbG93ZXIKLXByaW9yaXR5IHRhc2suCitXaGVuIHByZWVtcHRpb24gaXMgZGlzYWJsZWQsIHdlIG1heSBiZSBhYmxlIHRvIHJlY2VpdmUKK2ludGVycnVwdHMgYnV0IHRoZSB0YXNrIGNhbm5vdCBiZSBwcmVlbXB0ZWQgYW5kIGEgaGlnaGVyCitwcmlvcml0eSB0YXNrIG11c3Qgd2FpdCBmb3IgcHJlZW1wdGlvbiB0byBiZSBlbmFibGVkIGFnYWluCitiZWZvcmUgaXQgY2FuIHByZWVtcHQgYSBsb3dlciBwcmlvcml0eSB0YXNrLgogCiBUaGUgcHJlZW1wdG9mZiB0cmFjZXIgdHJhY2VzIHRoZSBwbGFjZXMgdGhhdCBkaXNhYmxlIHByZWVtcHRpb24uCi1MaWtlIHRoZSBpcnFzb2ZmIHRyYWNlciwgaXQgcmVjb3JkcyB0aGUgbWF4aW11bSBsYXRlbmN5IGZvciB3aGljaCBwcmVlbXB0aW9uCi13YXMgZGlzYWJsZWQuIFRoZSBjb250cm9sIG9mIHByZWVtcHRvZmYgdHJhY2VyIGlzIG11Y2ggbGlrZSB0aGUgaXJxc29mZgotdHJhY2VyLgorTGlrZSB0aGUgaXJxc29mZiB0cmFjZXIsIGl0IHJlY29yZHMgdGhlIG1heGltdW0gbGF0ZW5jeSBmb3IKK3doaWNoIHByZWVtcHRpb24gd2FzIGRpc2FibGVkLiBUaGUgY29udHJvbCBvZiBwcmVlbXB0b2ZmIHRyYWNlcgoraXMgbXVjaCBsaWtlIHRoZSBpcnFzb2ZmIHRyYWNlci4KIAogICMgZWNobyBwcmVlbXB0b2ZmID4gL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKICAjIGVjaG8gMCA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfbWF4X2xhdGVuY3kKQEAgLTYzNywxMSArNzEzLDEyIEBACiAgICAgc3NoZC00MjYxICAwZC5zMSAgIDMwdXMgOiB0cmFjZV9wcmVlbXB0X29uIChfX2RvX3NvZnRpcnEpCiAKIAotVGhpcyBoYXMgc29tZSBtb3JlIGNoYW5nZXMuIFByZWVtcHRpb24gd2FzIGRpc2FibGVkIHdoZW4gYW4gaW50ZXJydXB0Ci1jYW1lIGluIChub3RpY2UgdGhlICdoJyksIGFuZCB3YXMgZW5hYmxlZCB3aGlsZSBkb2luZyBhIHNvZnRpcnEuCi0obm90aWNlIHRoZSAncycpLiBCdXQgd2UgYWxzbyBzZWUgdGhhdCBpbnRlcnJ1cHRzIGhhdmUgYmVlbiBkaXNhYmxlZAotd2hlbiBlbnRlcmluZyB0aGUgcHJlZW1wdCBvZmYgc2VjdGlvbiBhbmQgbGVhdmluZyBpdCAodGhlICdkJykuCi1XZSBkbyBub3Qga25vdyBpZiBpbnRlcnJ1cHRzIHdlcmUgZW5hYmxlZCBpbiB0aGUgbWVhbiB0aW1lLgorVGhpcyBoYXMgc29tZSBtb3JlIGNoYW5nZXMuIFByZWVtcHRpb24gd2FzIGRpc2FibGVkIHdoZW4gYW4KK2ludGVycnVwdCBjYW1lIGluIChub3RpY2UgdGhlICdoJyksIGFuZCB3YXMgZW5hYmxlZCB3aGlsZSBkb2luZworYSBzb2Z0aXJxLiAobm90aWNlIHRoZSAncycpLiBCdXQgd2UgYWxzbyBzZWUgdGhhdCBpbnRlcnJ1cHRzCitoYXZlIGJlZW4gZGlzYWJsZWQgd2hlbiBlbnRlcmluZyB0aGUgcHJlZW1wdCBvZmYgc2VjdGlvbiBhbmQKK2xlYXZpbmcgaXQgKHRoZSAnZCcpLiBXZSBkbyBub3Qga25vdyBpZiBpbnRlcnJ1cHRzIHdlcmUgZW5hYmxlZAoraW4gdGhlIG1lYW4gdGltZS4KIAogIyB0cmFjZXI6IHByZWVtcHRvZmYKICMKQEAgLTcwMCwyOCArNzc3LDMwIEBACiAgICAgc3NoZC00MjYxICAwZC5zMSAgIDY0dXMgOiB0cmFjZV9wcmVlbXB0X29uIChfX2RvX3NvZnRpcnEpCiAKIAotVGhlIGFib3ZlIGlzIGFuIGV4YW1wbGUgb2YgdGhlIHByZWVtcHRvZmYgdHJhY2Ugd2l0aCBmdHJhY2VfZW5hYmxlZAotc2V0LiBIZXJlIHdlIHNlZSB0aGF0IGludGVycnVwdHMgd2VyZSBkaXNhYmxlZCB0aGUgZW50aXJlIHRpbWUuCi1UaGUgaXJxX2VudGVyIGNvZGUgbGV0cyB1cyBrbm93IHRoYXQgd2UgZW50ZXJlZCBhbiBpbnRlcnJ1cHQgJ2gnLgotQmVmb3JlIHRoYXQsIHRoZSBmdW5jdGlvbnMgYmVpbmcgdHJhY2VkIHN0aWxsIHNob3cgdGhhdCBpdCBpcyBub3QKLWluIGFuIGludGVycnVwdCwgYnV0IHdlIGNhbiBzZWUgZnJvbSB0aGUgZnVuY3Rpb25zIHRoZW1zZWx2ZXMgdGhhdAotdGhpcyBpcyBub3QgdGhlIGNhc2UuCitUaGUgYWJvdmUgaXMgYW4gZXhhbXBsZSBvZiB0aGUgcHJlZW1wdG9mZiB0cmFjZSB3aXRoCitmdHJhY2VfZW5hYmxlZCBzZXQuIEhlcmUgd2Ugc2VlIHRoYXQgaW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkCit0aGUgZW50aXJlIHRpbWUuIFRoZSBpcnFfZW50ZXIgY29kZSBsZXRzIHVzIGtub3cgdGhhdCB3ZSBlbnRlcmVkCithbiBpbnRlcnJ1cHQgJ2gnLiBCZWZvcmUgdGhhdCwgdGhlIGZ1bmN0aW9ucyBiZWluZyB0cmFjZWQgc3RpbGwKK3Nob3cgdGhhdCBpdCBpcyBub3QgaW4gYW4gaW50ZXJydXB0LCBidXQgd2UgY2FuIHNlZSBmcm9tIHRoZQorZnVuY3Rpb25zIHRoZW1zZWx2ZXMgdGhhdCB0aGlzIGlzIG5vdCB0aGUgY2FzZS4KIAotTm90aWNlIHRoYXQgX19kb19zb2Z0aXJxIHdoZW4gY2FsbGVkIGRvZXMgbm90IGhhdmUgYSBwcmVlbXB0X2NvdW50LgotSXQgbWF5IHNlZW0gdGhhdCB3ZSBtaXNzZWQgYSBwcmVlbXB0IGVuYWJsaW5nLiBXaGF0IHJlYWxseSBoYXBwZW5lZAotaXMgdGhhdCB0aGUgcHJlZW1wdCBjb3VudCBpcyBoZWxkIG9uIHRoZSB0aHJlYWQncyBzdGFjayBhbmQgd2UKLXN3aXRjaGVkIHRvIHRoZSBzb2Z0aXJxIHN0YWNrICg0SyBzdGFja3MgaW4gZWZmZWN0KS4gVGhlIGNvZGUKLWRvZXMgbm90IGNvcHkgdGhlIHByZWVtcHQgY291bnQsIGJ1dCBiZWNhdXNlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLAotd2UgZG8gbm90IG5lZWQgdG8gd29ycnkgYWJvdXQgaXQuIEhhdmluZyBhIHRyYWNlciBsaWtlIHRoaXMgaXMgZ29vZAotZm9yIGxldHRpbmcgcGVvcGxlIGtub3cgd2hhdCByZWFsbHkgaGFwcGVucyBpbnNpZGUgdGhlIGtlcm5lbC4KK05vdGljZSB0aGF0IF9fZG9fc29mdGlycSB3aGVuIGNhbGxlZCBkb2VzIG5vdCBoYXZlIGEKK3ByZWVtcHRfY291bnQuIEl0IG1heSBzZWVtIHRoYXQgd2UgbWlzc2VkIGEgcHJlZW1wdCBlbmFibGluZy4KK1doYXQgcmVhbGx5IGhhcHBlbmVkIGlzIHRoYXQgdGhlIHByZWVtcHQgY291bnQgaXMgaGVsZCBvbiB0aGUKK3RocmVhZCdzIHN0YWNrIGFuZCB3ZSBzd2l0Y2hlZCB0byB0aGUgc29mdGlycSBzdGFjayAoNEsgc3RhY2tzCitpbiBlZmZlY3QpLiBUaGUgY29kZSBkb2VzIG5vdCBjb3B5IHRoZSBwcmVlbXB0IGNvdW50LCBidXQKK2JlY2F1c2UgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsIHdlIGRvIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0CitpdC4gSGF2aW5nIGEgdHJhY2VyIGxpa2UgdGhpcyBpcyBnb29kIGZvciBsZXR0aW5nIHBlb3BsZSBrbm93Cit3aGF0IHJlYWxseSBoYXBwZW5zIGluc2lkZSB0aGUga2VybmVsLgogCiAKIHByZWVtcHRpcnFzb2ZmCiAtLS0tLS0tLS0tLS0tLQogCi1Lbm93aW5nIHRoZSBsb2NhdGlvbnMgdGhhdCBoYXZlIGludGVycnVwdHMgZGlzYWJsZWQgb3IgcHJlZW1wdGlvbgotZGlzYWJsZWQgZm9yIHRoZSBsb25nZXN0IHRpbWVzIGlzIGhlbHBmdWwuIEJ1dCBzb21ldGltZXMgd2Ugd291bGQKLWxpa2UgdG8ga25vdyB3aGVuIGVpdGhlciBwcmVlbXB0aW9uIGFuZC9vciBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KK0tub3dpbmcgdGhlIGxvY2F0aW9ucyB0aGF0IGhhdmUgaW50ZXJydXB0cyBkaXNhYmxlZCBvcgorcHJlZW1wdGlvbiBkaXNhYmxlZCBmb3IgdGhlIGxvbmdlc3QgdGltZXMgaXMgaGVscGZ1bC4gQnV0Citzb21ldGltZXMgd2Ugd291bGQgbGlrZSB0byBrbm93IHdoZW4gZWl0aGVyIHByZWVtcHRpb24gYW5kL29yCitpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KIAogQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBjb2RlOgogCkBAIC03NDEsMTEgKzgyMCwxMyBAQAogY2FsbF9mdW5jdGlvbl93aXRoX2lycXNfYW5kX3ByZWVtcHRpb25fb2ZmKCkgYW5kCiBjYWxsX2Z1bmN0aW9uX3dpdGhfcHJlZW1wdGlvbl9vZmYoKS4KIAotQnV0IG5laXRoZXIgd2lsbCB0cmFjZSB0aGUgdGltZSB0aGF0IGludGVycnVwdHMgYW5kL29yIHByZWVtcHRpb24KLWlzIGRpc2FibGVkLiBUaGlzIHRvdGFsIHRpbWUgaXMgdGhlIHRpbWUgdGhhdCB3ZSBjYW4gbm90IHNjaGVkdWxlLgotVG8gcmVjb3JkIHRoaXMgdGltZSwgdXNlIHRoZSBwcmVlbXB0aXJxc29mZiB0cmFjZXIuCitCdXQgbmVpdGhlciB3aWxsIHRyYWNlIHRoZSB0aW1lIHRoYXQgaW50ZXJydXB0cyBhbmQvb3IKK3ByZWVtcHRpb24gaXMgZGlzYWJsZWQuIFRoaXMgdG90YWwgdGltZSBpcyB0aGUgdGltZSB0aGF0IHdlIGNhbgorbm90IHNjaGVkdWxlLiBUbyByZWNvcmQgdGhpcyB0aW1lLCB1c2UgdGhlIHByZWVtcHRpcnFzb2ZmCit0cmFjZXIuCiAKLUFnYWluLCB1c2luZyB0aGlzIHRyYWNlIGlzIG11Y2ggbGlrZSB0aGUgaXJxc29mZiBhbmQgcHJlZW1wdG9mZiB0cmFjZXJzLgorQWdhaW4sIHVzaW5nIHRoaXMgdHJhY2UgaXMgbXVjaCBsaWtlIHRoZSBpcnFzb2ZmIGFuZCBwcmVlbXB0b2ZmCit0cmFjZXJzLgogCiAgIyBlY2hvIHByZWVtcHRpcnFzb2ZmID4gL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKICAjIGVjaG8gMCA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfbWF4X2xhdGVuY3kKQEAgLTc4MSw5ICs4NjIsMTAgQEAKIAogCiBUaGUgdHJhY2VfaGFyZGlycXNfb2ZmX3RodW5rIGlzIGNhbGxlZCBmcm9tIGFzc2VtYmx5IG9uIHg4NiB3aGVuCi1pbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBpbiB0aGUgYXNzZW1ibHkgY29kZS4gV2l0aG91dCB0aGUgZnVuY3Rpb24KLXRyYWNpbmcsIHdlIGRvIG5vdCBrbm93IGlmIGludGVycnVwdHMgd2VyZSBlbmFibGVkIHdpdGhpbiB0aGUgcHJlZW1wdGlvbgotcG9pbnRzLiBXZSBkbyBzZWUgdGhhdCBpdCBzdGFydGVkIHdpdGggcHJlZW1wdGlvbiBlbmFibGVkLgoraW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgaW4gdGhlIGFzc2VtYmx5IGNvZGUuIFdpdGhvdXQgdGhlCitmdW5jdGlvbiB0cmFjaW5nLCB3ZSBkbyBub3Qga25vdyBpZiBpbnRlcnJ1cHRzIHdlcmUgZW5hYmxlZAord2l0aGluIHRoZSBwcmVlbXB0aW9uIHBvaW50cy4gV2UgZG8gc2VlIHRoYXQgaXQgc3RhcnRlZCB3aXRoCitwcmVlbXB0aW9uIGVuYWJsZWQuCiAKIEhlcmUgaXMgYSB0cmFjZSB3aXRoIGZ0cmFjZV9lbmFibGVkIHNldDoKIApAQCAtODcxLDQwICs5NTMsNDIgQEAKICAgICBzc2hkLTQyNjEgIDBkLnMxICAxMDV1cyA6IHRyYWNlX3ByZWVtcHRfb24gKF9fZG9fc29mdGlycSkKIAogCi1UaGlzIGlzIGEgdmVyeSBpbnRlcmVzdGluZyB0cmFjZS4gSXQgc3RhcnRlZCB3aXRoIHRoZSBwcmVlbXB0aW9uIG9mCi10aGUgbHMgdGFzay4gV2Ugc2VlIHRoYXQgdGhlIHRhc2sgaGFkIHRoZSAibmVlZF9yZXNjaGVkIiBiaXQgc2V0Ci12aWEgdGhlICdOJyBpbiB0aGUgdHJhY2UuICBJbnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQgYmVmb3JlIHRoZSBzcGluX2xvY2sKLWF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRyYWNlLiBXZSBzZWUgdGhhdCBhIHNjaGVkdWxlIHRvb2sgcGxhY2UgdG8gcnVuCi1zc2hkLiAgV2hlbiB0aGUgaW50ZXJydXB0cyB3ZXJlIGVuYWJsZWQsIHdlIHRvb2sgYW4gaW50ZXJydXB0LgotT24gcmV0dXJuIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyLCB0aGUgc29mdGlycSByYW4uIFdlIHRvb2sgYW5vdGhlcgotaW50ZXJydXB0IHdoaWxlIHJ1bm5pbmcgdGhlIHNvZnRpcnEgYXMgd2Ugc2VlIGZyb20gdGhlIGNhcGl0YWwgJ0gnLgorVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3RpbmcgdHJhY2UuIEl0IHN0YXJ0ZWQgd2l0aCB0aGUgcHJlZW1wdGlvbgorb2YgdGhlIGxzIHRhc2suIFdlIHNlZSB0aGF0IHRoZSB0YXNrIGhhZCB0aGUgIm5lZWRfcmVzY2hlZCIgYml0CitzZXQgdmlhIHRoZSAnTicgaW4gdGhlIHRyYWNlLiAgSW50ZXJydXB0cyB3ZXJlIGRpc2FibGVkIGJlZm9yZQordGhlIHNwaW5fbG9jayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cmFjZS4gV2Ugc2VlIHRoYXQgYQorc2NoZWR1bGUgdG9vayBwbGFjZSB0byBydW4gc3NoZC4gIFdoZW4gdGhlIGludGVycnVwdHMgd2VyZQorZW5hYmxlZCwgd2UgdG9vayBhbiBpbnRlcnJ1cHQuIE9uIHJldHVybiBmcm9tIHRoZSBpbnRlcnJ1cHQKK2hhbmRsZXIsIHRoZSBzb2Z0aXJxIHJhbi4gV2UgdG9vayBhbm90aGVyIGludGVycnVwdCB3aGlsZQorcnVubmluZyB0aGUgc29mdGlycSBhcyB3ZSBzZWUgZnJvbSB0aGUgY2FwaXRhbCAnSCcuCiAKIAogd2FrZXVwCiAtLS0tLS0KIAotSW4gYSBSZWFsLVRpbWUgZW52aXJvbm1lbnQgaXQgaXMgdmVyeSBpbXBvcnRhbnQgdG8ga25vdyB0aGUgd2FrZXVwCi10aW1lIGl0IHRha2VzIGZvciB0aGUgaGlnaGVzdCBwcmlvcml0eSB0YXNrIHRoYXQgaXMgd29rZW4gdXAgdG8gdGhlCi10aW1lIHRoYXQgaXQgZXhlY3V0ZXMuIFRoaXMgaXMgYWxzbyBrbm93biBhcyAic2NoZWR1bGUgbGF0ZW5jeSIuCi1JIHN0cmVzcyB0aGUgcG9pbnQgdGhhdCB0aGlzIGlzIGFib3V0IFJUIHRhc2tzLiBJdCBpcyBhbHNvIGltcG9ydGFudAotdG8ga25vdyB0aGUgc2NoZWR1bGluZyBsYXRlbmN5IG9mIG5vbi1SVCB0YXNrcywgYnV0IHRoZSBhdmVyYWdlCi1zY2hlZHVsZSBsYXRlbmN5IGlzIGJldHRlciBmb3Igbm9uLVJUIHRhc2tzLiBUb29scyBsaWtlCi1MYXRlbmN5VG9wIGFyZSBtb3JlIGFwcHJvcHJpYXRlIGZvciBzdWNoIG1lYXN1cmVtZW50cy4KK0luIGEgUmVhbC1UaW1lIGVudmlyb25tZW50IGl0IGlzIHZlcnkgaW1wb3J0YW50IHRvIGtub3cgdGhlCit3YWtldXAgdGltZSBpdCB0YWtlcyBmb3IgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayB0aGF0IGlzIHdva2VuCit1cCB0byB0aGUgdGltZSB0aGF0IGl0IGV4ZWN1dGVzLiBUaGlzIGlzIGFsc28ga25vd24gYXMgInNjaGVkdWxlCitsYXRlbmN5Ii4gSSBzdHJlc3MgdGhlIHBvaW50IHRoYXQgdGhpcyBpcyBhYm91dCBSVCB0YXNrcy4gSXQgaXMKK2Fsc28gaW1wb3J0YW50IHRvIGtub3cgdGhlIHNjaGVkdWxpbmcgbGF0ZW5jeSBvZiBub24tUlQgdGFza3MsCitidXQgdGhlIGF2ZXJhZ2Ugc2NoZWR1bGUgbGF0ZW5jeSBpcyBiZXR0ZXIgZm9yIG5vbi1SVCB0YXNrcy4KK1Rvb2xzIGxpa2UgTGF0ZW5jeVRvcCBhcmUgbW9yZSBhcHByb3ByaWF0ZSBmb3Igc3VjaAorbWVhc3VyZW1lbnRzLgogCiBSZWFsLVRpbWUgZW52aXJvbm1lbnRzIGFyZSBpbnRlcmVzdGVkIGluIHRoZSB3b3JzdCBjYXNlIGxhdGVuY3kuCi1UaGF0IGlzIHRoZSBsb25nZXN0IGxhdGVuY3kgaXQgdGFrZXMgZm9yIHNvbWV0aGluZyB0byBoYXBwZW4sIGFuZAotbm90IHRoZSBhdmVyYWdlLiBXZSBjYW4gaGF2ZSBhIHZlcnkgZmFzdCBzY2hlZHVsZXIgdGhhdCBtYXkgb25seQotaGF2ZSBhIGxhcmdlIGxhdGVuY3kgb25jZSBpbiBhIHdoaWxlLCBidXQgdGhhdCB3b3VsZCBub3Qgd29yayB3ZWxsCi13aXRoIFJlYWwtVGltZSB0YXNrcy4gIFRoZSB3YWtldXAgdHJhY2VyIHdhcyBkZXNpZ25lZCB0byByZWNvcmQKLXRoZSB3b3JzdCBjYXNlIHdha2V1cHMgb2YgUlQgdGFza3MuIE5vbi1SVCB0YXNrcyBhcmUgbm90IHJlY29yZGVkCi1iZWNhdXNlIHRoZSB0cmFjZXIgb25seSByZWNvcmRzIG9uZSB3b3JzdCBjYXNlIGFuZCB0cmFjaW5nIG5vbi1SVAotdGFza3MgdGhhdCBhcmUgdW5wcmVkaWN0YWJsZSB3aWxsIG92ZXJ3cml0ZSB0aGUgd29yc3QgY2FzZSBsYXRlbmN5Ci1vZiBSVCB0YXNrcy4KK1RoYXQgaXMgdGhlIGxvbmdlc3QgbGF0ZW5jeSBpdCB0YWtlcyBmb3Igc29tZXRoaW5nIHRvIGhhcHBlbiwKK2FuZCBub3QgdGhlIGF2ZXJhZ2UuIFdlIGNhbiBoYXZlIGEgdmVyeSBmYXN0IHNjaGVkdWxlciB0aGF0IG1heQorb25seSBoYXZlIGEgbGFyZ2UgbGF0ZW5jeSBvbmNlIGluIGEgd2hpbGUsIGJ1dCB0aGF0IHdvdWxkIG5vdAord29yayB3ZWxsIHdpdGggUmVhbC1UaW1lIHRhc2tzLiAgVGhlIHdha2V1cCB0cmFjZXIgd2FzIGRlc2lnbmVkCit0byByZWNvcmQgdGhlIHdvcnN0IGNhc2Ugd2FrZXVwcyBvZiBSVCB0YXNrcy4gTm9uLVJUIHRhc2tzIGFyZQorbm90IHJlY29yZGVkIGJlY2F1c2UgdGhlIHRyYWNlciBvbmx5IHJlY29yZHMgb25lIHdvcnN0IGNhc2UgYW5kCit0cmFjaW5nIG5vbi1SVCB0YXNrcyB0aGF0IGFyZSB1bnByZWRpY3RhYmxlIHdpbGwgb3ZlcndyaXRlIHRoZQord29yc3QgY2FzZSBsYXRlbmN5IG9mIFJUIHRhc2tzLgogCi1TaW5jZSB0aGlzIHRyYWNlciBvbmx5IGRlYWxzIHdpdGggUlQgdGFza3MsIHdlIHdpbGwgcnVuIHRoaXMgc2xpZ2h0bHkKLWRpZmZlcmVudGx5IHRoYW4gd2UgZGlkIHdpdGggdGhlIHByZXZpb3VzIHRyYWNlcnMuIEluc3RlYWQgb2YgcGVyZm9ybWluZwotYW4gJ2xzJywgd2Ugd2lsbCBydW4gJ3NsZWVwIDEnIHVuZGVyICdjaHJ0JyB3aGljaCBjaGFuZ2VzIHRoZQotcHJpb3JpdHkgb2YgdGhlIHRhc2suCitTaW5jZSB0aGlzIHRyYWNlciBvbmx5IGRlYWxzIHdpdGggUlQgdGFza3MsIHdlIHdpbGwgcnVuIHRoaXMKK3NsaWdodGx5IGRpZmZlcmVudGx5IHRoYW4gd2UgZGlkIHdpdGggdGhlIHByZXZpb3VzIHRyYWNlcnMuCitJbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYW4gJ2xzJywgd2Ugd2lsbCBydW4gJ3NsZWVwIDEnIHVuZGVyCisnY2hydCcgd2hpY2ggY2hhbmdlcyB0aGUgcHJpb3JpdHkgb2YgdGhlIHRhc2suCiAKICAjIGVjaG8gd2FrZXVwID4gL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKICAjIGVjaG8gMCA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNpbmdfbWF4X2xhdGVuY3kKQEAgLTkzNCwxNyArMTAxOCwxNiBAQAogICA8aWRsZT4tMCAgICAgMWQuLjQgICAgNHVzIDogc2NoZWR1bGUgKGNwdV9pZGxlKQogCiAKK1J1bm5pbmcgdGhpcyBvbiBhbiBpZGxlIHN5c3RlbSwgd2Ugc2VlIHRoYXQgaXQgb25seSB0b29rIDQKK21pY3Jvc2Vjb25kcyB0byBwZXJmb3JtIHRoZSB0YXNrIHN3aXRjaC4gIE5vdGUsIHNpbmNlIHRoZSB0cmFjZQorbWFya2VyIGluIHRoZSBzY2hlZHVsZSBpcyBiZWZvcmUgdGhlIGFjdHVhbCAic3dpdGNoIiwgd2Ugc3RvcAordGhlIHRyYWNpbmcgd2hlbiB0aGUgcmVjb3JkZWQgdGFzayBpcyBhYm91dCB0byBzY2hlZHVsZSBpbi4gVGhpcworbWF5IGNoYW5nZSBpZiB3ZSBhZGQgYSBuZXcgbWFya2VyIGF0IHRoZSBlbmQgb2YgdGhlIHNjaGVkdWxlci4KIAotUnVubmluZyB0aGlzIG9uIGFuIGlkbGUgc3lzdGVtLCB3ZSBzZWUgdGhhdCBpdCBvbmx5IHRvb2sgNCBtaWNyb3NlY29uZHMKLXRvIHBlcmZvcm0gdGhlIHRhc2sgc3dpdGNoLiAgTm90ZSwgc2luY2UgdGhlIHRyYWNlIG1hcmtlciBpbiB0aGUKLXNjaGVkdWxlIGlzIGJlZm9yZSB0aGUgYWN0dWFsICJzd2l0Y2giLCB3ZSBzdG9wIHRoZSB0cmFjaW5nIHdoZW4KLXRoZSByZWNvcmRlZCB0YXNrIGlzIGFib3V0IHRvIHNjaGVkdWxlIGluLiBUaGlzIG1heSBjaGFuZ2UgaWYKLXdlIGFkZCBhIG5ldyBtYXJrZXIgYXQgdGhlIGVuZCBvZiB0aGUgc2NoZWR1bGVyLgotCi1Ob3RpY2UgdGhhdCB0aGUgcmVjb3JkZWQgdGFzayBpcyAnc2xlZXAnIHdpdGggdGhlIFBJRCBvZiA0OTAxIGFuZCBpdAotaGFzIGFuIHJ0X3ByaW8gb2YgNS4gVGhpcyBwcmlvcml0eSBpcyB1c2VyLXNwYWNlIHByaW9yaXR5IGFuZCBub3QKLXRoZSBpbnRlcm5hbCBrZXJuZWwgcHJpb3JpdHkuIFRoZSBwb2xpY3kgaXMgMSBmb3IgU0NIRURfRklGTyBhbmQgMgotZm9yIFNDSEVEX1JSLgorTm90aWNlIHRoYXQgdGhlIHJlY29yZGVkIHRhc2sgaXMgJ3NsZWVwJyB3aXRoIHRoZSBQSUQgb2YgNDkwMQorYW5kIGl0IGhhcyBhbiBydF9wcmlvIG9mIDUuIFRoaXMgcHJpb3JpdHkgaXMgdXNlci1zcGFjZSBwcmlvcml0eQorYW5kIG5vdCB0aGUgaW50ZXJuYWwga2VybmVsIHByaW9yaXR5LiBUaGUgcG9saWN5IGlzIDEgZm9yCitTQ0hFRF9GSUZPIGFuZCAyIGZvciBTQ0hFRF9SUi4KIAogRG9pbmcgdGhlIHNhbWUgd2l0aCBjaHJ0IC1yIDUgYW5kIGZ0cmFjZV9lbmFibGVkIHNldC4KIApAQCAtMTAwMSwyNCArMTA4NCwyNSBAQAoga3NvZnRpcnEtNyAgICAgMWQuLjYgICA0OXVzIDogc3ViX3ByZWVtcHRfY291bnQgKF9zcGluX3VubG9jaykKIGtzb2Z0aXJxLTcgICAgIDFkLi40ICAgNTB1cyA6IHNjaGVkdWxlIChfX2NvbmRfcmVzY2hlZCkKIAotVGhlIGludGVycnVwdCB3ZW50IG9mZiB3aGlsZSBydW5uaW5nIGtzb2Z0aXJxZC4gVGhpcyB0YXNrIHJ1bnMgYXQKLVNDSEVEX09USEVSLiBXaHkgZGlkIG5vdCB3ZSBzZWUgdGhlICdOJyBzZXQgZWFybHk/IFRoaXMgbWF5IGJlCi1hIGhhcm1sZXNzIGJ1ZyB3aXRoIHg4Nl8zMiBhbmQgNEsgc3RhY2tzLiBPbiB4ODZfMzIgd2l0aCA0SyBzdGFja3MKLWNvbmZpZ3VyZWQsIHRoZSBpbnRlcnJ1cHQgYW5kIHNvZnRpcnEgcnVuIHdpdGggdGhlaXIgb3duIHN0YWNrLgotU29tZSBpbmZvcm1hdGlvbiBpcyBoZWxkIG9uIHRoZSB0b3Agb2YgdGhlIHRhc2sncyBzdGFjayAobmVlZF9yZXNjaGVkCi1hbmQgcHJlZW1wdF9jb3VudCBhcmUgYm90aCBzdG9yZWQgdGhlcmUpLiBUaGUgc2V0dGluZyBvZiB0aGUgTkVFRF9SRVNDSEVECi1iaXQgaXMgZG9uZSBkaXJlY3RseSB0byB0aGUgdGFzaydzIHN0YWNrLCBidXQgdGhlIHJlYWRpbmcgb2YgdGhlCi1ORUVEX1JFU0NIRUQgaXMgZG9uZSBieSBsb29raW5nIGF0IHRoZSBjdXJyZW50IHN0YWNrLCB3aGljaCBpbiB0aGlzIGNhc2UKLWlzIHRoZSBzdGFjayBmb3IgdGhlIGhhcmQgaW50ZXJydXB0LiBUaGlzIGhpZGVzIHRoZSBmYWN0IHRoYXQgTkVFRF9SRVNDSEVECi1oYXMgYmVlbiBzZXQuIFdlIGRvIG5vdCBzZWUgdGhlICdOJyB1bnRpbCB3ZSBzd2l0Y2ggYmFjayB0byB0aGUgdGFzaydzCitUaGUgaW50ZXJydXB0IHdlbnQgb2ZmIHdoaWxlIHJ1bm5pbmcga3NvZnRpcnFkLiBUaGlzIHRhc2sgcnVucworYXQgU0NIRURfT1RIRVIuIFdoeSBkaWQgbm90IHdlIHNlZSB0aGUgJ04nIHNldCBlYXJseT8gVGhpcyBtYXkKK2JlIGEgaGFybWxlc3MgYnVnIHdpdGggeDg2XzMyIGFuZCA0SyBzdGFja3MuIE9uIHg4Nl8zMiB3aXRoIDRLCitzdGFja3MgY29uZmlndXJlZCwgdGhlIGludGVycnVwdCBhbmQgc29mdGlycSBydW4gd2l0aCB0aGVpciBvd24KK3N0YWNrLiBTb21lIGluZm9ybWF0aW9uIGlzIGhlbGQgb24gdGhlIHRvcCBvZiB0aGUgdGFzaydzIHN0YWNrCisobmVlZF9yZXNjaGVkIGFuZCBwcmVlbXB0X2NvdW50IGFyZSBib3RoIHN0b3JlZCB0aGVyZSkuIFRoZQorc2V0dGluZyBvZiB0aGUgTkVFRF9SRVNDSEVEIGJpdCBpcyBkb25lIGRpcmVjdGx5IHRvIHRoZSB0YXNrJ3MKK3N0YWNrLCBidXQgdGhlIHJlYWRpbmcgb2YgdGhlIE5FRURfUkVTQ0hFRCBpcyBkb25lIGJ5IGxvb2tpbmcgYXQKK3RoZSBjdXJyZW50IHN0YWNrLCB3aGljaCBpbiB0aGlzIGNhc2UgaXMgdGhlIHN0YWNrIGZvciB0aGUgaGFyZAoraW50ZXJydXB0LiBUaGlzIGhpZGVzIHRoZSBmYWN0IHRoYXQgTkVFRF9SRVNDSEVEIGhhcyBiZWVuIHNldC4KK1dlIGRvIG5vdCBzZWUgdGhlICdOJyB1bnRpbCB3ZSBzd2l0Y2ggYmFjayB0byB0aGUgdGFzaydzCiBhc3NpZ25lZCBzdGFjay4KIAogZnVuY3Rpb24KIC0tLS0tLS0tCiAKIFRoaXMgdHJhY2VyIGlzIHRoZSBmdW5jdGlvbiB0cmFjZXIuIEVuYWJsaW5nIHRoZSBmdW5jdGlvbiB0cmFjZXIKLWNhbiBiZSBkb25lIGZyb20gdGhlIGRlYnVnIGZpbGUgc3lzdGVtLiBNYWtlIHN1cmUgdGhlIGZ0cmFjZV9lbmFibGVkIGlzCi1zZXQ7IG90aGVyd2lzZSB0aGlzIHRyYWNlciBpcyBhIG5vcC4KK2NhbiBiZSBkb25lIGZyb20gdGhlIGRlYnVnIGZpbGUgc3lzdGVtLiBNYWtlIHN1cmUgdGhlCitmdHJhY2VfZW5hYmxlZCBpcyBzZXQ7IG90aGVyd2lzZSB0aGlzIHRyYWNlciBpcyBhIG5vcC4KIAogICMgc3lzY3RsIGtlcm5lbC5mdHJhY2VfZW5hYmxlZD0xCiAgIyBlY2hvIGZ1bmN0aW9uID4gL2RlYnVnL3RyYWNpbmcvY3VycmVudF90cmFjZXIKQEAgLTEwNDgsMTQgKzExMzIsMTUgQEAKIFsuLi5dCiAKIAotTm90ZTogZnVuY3Rpb24gdHJhY2VyIHVzZXMgcmluZyBidWZmZXJzIHRvIHN0b3JlIHRoZSBhYm92ZSBlbnRyaWVzLgotVGhlIG5ld2VzdCBkYXRhIG1heSBvdmVyd3JpdGUgdGhlIG9sZGVzdCBkYXRhLiBTb21ldGltZXMgdXNpbmcgZWNobyB0bwotc3RvcCB0aGUgdHJhY2UgaXMgbm90IHN1ZmZpY2llbnQgYmVjYXVzZSB0aGUgdHJhY2luZyBjb3VsZCBoYXZlIG92ZXJ3cml0dGVuCi10aGUgZGF0YSB0aGF0IHlvdSB3YW50ZWQgdG8gcmVjb3JkLiBGb3IgdGhpcyByZWFzb24sIGl0IGlzIHNvbWV0aW1lcyBiZXR0ZXIgdG8KLWRpc2FibGUgdHJhY2luZyBkaXJlY3RseSBmcm9tIGEgcHJvZ3JhbS4gVGhpcyBhbGxvd3MgeW91IHRvIHN0b3AgdGhlCi10cmFjaW5nIGF0IHRoZSBwb2ludCB0aGF0IHlvdSBoaXQgdGhlIHBhcnQgdGhhdCB5b3UgYXJlIGludGVyZXN0ZWQgaW4uCi1UbyBkaXNhYmxlIHRoZSB0cmFjaW5nIGRpcmVjdGx5IGZyb20gYSBDIHByb2dyYW0sIHNvbWV0aGluZyBsaWtlIGZvbGxvd2luZwotY29kZSBzbmlwcGV0IGNhbiBiZSB1c2VkOgorTm90ZTogZnVuY3Rpb24gdHJhY2VyIHVzZXMgcmluZyBidWZmZXJzIHRvIHN0b3JlIHRoZSBhYm92ZQorZW50cmllcy4gVGhlIG5ld2VzdCBkYXRhIG1heSBvdmVyd3JpdGUgdGhlIG9sZGVzdCBkYXRhLgorU29tZXRpbWVzIHVzaW5nIGVjaG8gdG8gc3RvcCB0aGUgdHJhY2UgaXMgbm90IHN1ZmZpY2llbnQgYmVjYXVzZQordGhlIHRyYWNpbmcgY291bGQgaGF2ZSBvdmVyd3JpdHRlbiB0aGUgZGF0YSB0aGF0IHlvdSB3YW50ZWQgdG8KK3JlY29yZC4gRm9yIHRoaXMgcmVhc29uLCBpdCBpcyBzb21ldGltZXMgYmV0dGVyIHRvIGRpc2FibGUKK3RyYWNpbmcgZGlyZWN0bHkgZnJvbSBhIHByb2dyYW0uIFRoaXMgYWxsb3dzIHlvdSB0byBzdG9wIHRoZQordHJhY2luZyBhdCB0aGUgcG9pbnQgdGhhdCB5b3UgaGl0IHRoZSBwYXJ0IHRoYXQgeW91IGFyZQoraW50ZXJlc3RlZCBpbi4gVG8gZGlzYWJsZSB0aGUgdHJhY2luZyBkaXJlY3RseSBmcm9tIGEgQyBwcm9ncmFtLAorc29tZXRoaW5nIGxpa2UgZm9sbG93aW5nIGNvZGUgc25pcHBldCBjYW4gYmUgdXNlZDoKIAogaW50IHRyYWNlX2ZkOwogWy4uLl0KQEAgLTEwNzAsMTAgKzExNTUsMTAgQEAKIH0KIAogTm90ZTogSGVyZSB3ZSBoYXJkIGNvZGVkIHRoZSBwYXRoIG5hbWUuIFRoZSBkZWJ1Z2ZzIG1vdW50IGlzIG5vdAotZ3VhcmFudGVlZCB0byBiZSBhdCAvZGVidWcgKGFuZCBpcyBtb3JlIGNvbW1vbmx5IGF0IC9zeXMva2VybmVsL2RlYnVnKS4KLUZvciBzaW1wbGUgb25lIHRpbWUgdHJhY2VzLCB0aGUgYWJvdmUgaXMgc3VmZmljZW50LiBGb3IgYW55dGhpbmcgZWxzZSwKLWEgc2VhcmNoIHRocm91Z2ggL3Byb2MvbW91bnRzIG1heSBiZSBuZWVkZWQgdG8gZmluZCB3aGVyZSB0aGUgZGVidWdmcwotZmlsZS1zeXN0ZW0gaXMgbW91bnRlZC4KK2d1YXJhbnRlZWQgdG8gYmUgYXQgL2RlYnVnIChhbmQgaXMgbW9yZSBjb21tb25seSBhdAorL3N5cy9rZXJuZWwvZGVidWcpLiBGb3Igc2ltcGxlIG9uZSB0aW1lIHRyYWNlcywgdGhlIGFib3ZlIGlzCitzdWZmaWNlbnQuIEZvciBhbnl0aGluZyBlbHNlLCBhIHNlYXJjaCB0aHJvdWdoIC9wcm9jL21vdW50cyBtYXkKK2JlIG5lZWRlZCB0byBmaW5kIHdoZXJlIHRoZSBkZWJ1Z2ZzIGZpbGUtc3lzdGVtIGlzIG1vdW50ZWQuCiAKIAogU2luZ2xlIHRocmVhZCB0cmFjaW5nCkBAIC0xMTUyLDQ5ICsxMjM3LDI5NyBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAorCitody1icmFuY2gtdHJhY2VyICh4ODYgb25seSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHRyYWNlciB1c2VzIHRoZSB4ODYgbGFzdCBicmFuY2ggdHJhY2luZyBoYXJkd2FyZSBmZWF0dXJlIHRvCitjb2xsZWN0IGEgYnJhbmNoIHRyYWNlIG9uIGFsbCBjcHVzIHdpdGggcmVsYXRpdmVseSBsb3cgb3ZlcmhlYWQuCisKK1RoZSB0cmFjZXIgdXNlcyBhIGZpeGVkLXNpemUgY2lyY3VsYXIgYnVmZmVyIHBlciBjcHUgYW5kIG9ubHkKK3RyYWNlcyByaW5nIDAgYnJhbmNoZXMuIFRoZSB0cmFjZSBmaWxlIGR1bXBzIHRoYXQgYnVmZmVyIGluIHRoZQorZm9sbG93aW5nIGZvcm1hdDoKKworIyB0cmFjZXI6IGh3LWJyYW5jaC10cmFjZXIKKyMKKyMgQ1BVIyAgICAgICAgVE8gIDwtICBGUk9NCisgICAwICBzY2hlZHVsZXJfdGljaysweGI1LzB4MWJmCSAgPC0gIHRhc2tfdGlja19pZGxlKzB4NS8weDYKKyAgIDIgIHJ1bl9wb3NpeF9jcHVfdGltZXJzKzB4MmIvMHg3MmEJICA8LSAgcnVuX3Bvc2l4X2NwdV90aW1lcnMrMHgyNS8weDcyYQorICAgMCAgc2NoZWR1bGVyX3RpY2srMHgxMzkvMHgxYmYJICA8LSAgc2NoZWR1bGVyX3RpY2srMHhlZC8weDFiZgorICAgMCAgc2NoZWR1bGVyX3RpY2srMHgxN2MvMHgxYmYJICA8LSAgc2NoZWR1bGVyX3RpY2srMHgxNDgvMHgxYmYKKyAgIDIgIHJ1bl9wb3NpeF9jcHVfdGltZXJzKzB4OWUvMHg3MmEJICA8LSAgcnVuX3Bvc2l4X2NwdV90aW1lcnMrMHg1ZS8weDcyYQorICAgMCAgc2NoZWR1bGVyX3RpY2srMHgxYjYvMHgxYmYJICA8LSAgc2NoZWR1bGVyX3RpY2srMHgxYWEvMHgxYmYKKworCitUaGUgdHJhY2VyIG1heSBiZSB1c2VkIHRvIGR1bXAgdGhlIHRyYWNlIGZvciB0aGUgb29wcydpbmcgY3B1IG9uCithIGtlcm5lbCBvb3BzIGludG8gdGhlIHN5c3RlbSBsb2cuIFRvIGVuYWJsZSB0aGlzLAorZnRyYWNlX2R1bXBfb25fb29wcyBtdXN0IGJlIHNldC4gVG8gc2V0IGZ0cmFjZV9kdW1wX29uX29vcHMsIG9uZQorY2FuIGVpdGhlciB1c2UgdGhlIHN5c2N0bCBmdW5jdGlvbiBvciBzZXQgaXQgdmlhIHRoZSBwcm9jIHN5c3RlbQoraW50ZXJmYWNlLgorCisgIHN5c2N0bCBrZXJuZWwuZnRyYWNlX2R1bXBfb25fb29wcz0xCisKK29yCisKKyAgZWNobyAxID4gL3Byb2Mvc3lzL2tlcm5lbC9mdHJhY2VfZHVtcF9vbl9vb3BzCisKKworSGVyZSdzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIGR1bXAgYWZ0ZXIgYSBudWxsIHBvaW50ZXIKK2RlcmVmZXJlbmNlIGluIGEga2VybmVsIG1vZHVsZToKKworWzU3ODQ4LjEwNTkyMV0gQlVHOiB1bmFibGUgdG8gaGFuZGxlIGtlcm5lbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgYXQgMDAwMDAwMDAwMDAwMDAwMAorWzU3ODQ4LjEwNjAxOV0gSVA6IFs8ZmZmZmZmZmZhMDAwMDAwNj5dIG9wZW4rMHg2LzB4MTQgW29vcHNdCitbNTc4NDguMTA2MDE5XSBQR0QgMjM1NGU5MDY3IFBVRCAyMzc1ZTcwNjcgUE1EIDAKK1s1Nzg0OC4xMDYwMTldIE9vcHM6IDAwMDIgWyMxXSBTTVAKK1s1Nzg0OC4xMDYwMTldIGxhc3Qgc3lzZnMgZmlsZTogL3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDowMDoxZS4wLzAwMDA6MjA6MDUuMC9sb2NhbF9jcHVzCitbNTc4NDguMTA2MDE5XSBEdW1waW5nIGZ0cmFjZSBidWZmZXI6CitbNTc4NDguMTA2MDE5XSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1suLi5dCitbNTc4NDguMTA2MDE5XSAgICAwICBjaHJkZXZfb3BlbisweGU2LzB4MTY1CSAgPC0gIGNkZXZfcHV0KzB4MjMvMHgyNAorWzU3ODQ4LjEwNjAxOV0gICAgMCAgY2hyZGV2X29wZW4rMHgxMTcvMHgxNjUJICA8LSAgY2hyZGV2X29wZW4rMHhmYS8weDE2NQorWzU3ODQ4LjEwNjAxOV0gICAgMCAgY2hyZGV2X29wZW4rMHgxMjAvMHgxNjUJICA8LSAgY2hyZGV2X29wZW4rMHgxMWMvMHgxNjUKK1s1Nzg0OC4xMDYwMTldICAgIDAgIGNocmRldl9vcGVuKzB4MTM0LzB4MTY1CSAgPC0gIGNocmRldl9vcGVuKzB4MTJiLzB4MTY1CitbNTc4NDguMTA2MDE5XSAgICAwICBvcGVuKzB4MC8weDE0IFtvb3BzXQkgIDwtICBjaHJkZXZfb3BlbisweDE0NC8weDE2NQorWzU3ODQ4LjEwNjAxOV0gICAgMCAgcGFnZV9mYXVsdCsweDAvMHgzMAkgIDwtICBvcGVuKzB4Ni8weDE0IFtvb3BzXQorWzU3ODQ4LjEwNjAxOV0gICAgMCAgZXJyb3JfZW50cnkrMHgwLzB4NWIJICA8LSAgcGFnZV9mYXVsdCsweDQvMHgzMAorWzU3ODQ4LjEwNjAxOV0gICAgMCAgZXJyb3Jfa2VybmVsc3BhY2UrMHgwLzB4MzEJICA8LSAgZXJyb3JfZW50cnkrMHg1OS8weDViCitbNTc4NDguMTA2MDE5XSAgICAwICBlcnJvcl9zdGkrMHgwLzB4MQkgIDwtICBlcnJvcl9rZXJuZWxzcGFjZSsweDJkLzB4MzEKK1s1Nzg0OC4xMDYwMTldICAgIDAgIHBhZ2VfZmF1bHQrMHg5LzB4MzAJICA8LSAgZXJyb3Jfc3RpKzB4MC8weDEKK1s1Nzg0OC4xMDYwMTldICAgIDAgIGRvX3BhZ2VfZmF1bHQrMHgwLzB4ODgxCSAgPC0gIHBhZ2VfZmF1bHQrMHgxYS8weDMwCitbLi4uXQorWzU3ODQ4LjEwNjAxOV0gICAgMCAgZG9fcGFnZV9mYXVsdCsweDY2Yi8weDg4MQkgIDwtICBpc19wcmVmZXRjaCsweDFlZS8weDFmMgorWzU3ODQ4LjEwNjAxOV0gICAgMCAgZG9fcGFnZV9mYXVsdCsweDZlMC8weDg4MQkgIDwtICBkb19wYWdlX2ZhdWx0KzB4NjdhLzB4ODgxCitbNTc4NDguMTA2MDE5XSAgICAwICBvb3BzX2JlZ2luKzB4MC8weDk2CSAgPC0gIGRvX3BhZ2VfZmF1bHQrMHg2ZTAvMHg4ODEKK1s1Nzg0OC4xMDYwMTldICAgIDAgIHRyYWNlX2h3X2JyYW5jaF9vb3BzKzB4MC8weDJkCSAgPC0gIG9vcHNfYmVnaW4rMHg5LzB4OTYKK1suLi5dCitbNTc4NDguMTA2MDE5XSAgICAwICBkc19zdXNwZW5kX2J0cysweDJhLzB4ZTMJICA8LSAgZHNfc3VzcGVuZF9idHMrMHgxYS8weGUzCitbNTc4NDguMTA2MDE5XSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1s1Nzg0OC4xMDYwMTldIENQVSAwCitbNTc4NDguMTA2MDE5XSBNb2R1bGVzIGxpbmtlZCBpbjogb29wcworWzU3ODQ4LjEwNjAxOV0gUGlkOiA1NTQyLCBjb21tOiBjYXQgVGFpbnRlZDogRyAgICAgICAgVyAgMi42LjI4ICMyMworWzU3ODQ4LjEwNjAxOV0gUklQOiAwMDEwOls8ZmZmZmZmZmZhMDAwMDAwNj5dICBbPGZmZmZmZmZmYTAwMDAwMDY+XSBvcGVuKzB4Ni8weDE0IFtvb3BzXQorWzU3ODQ4LjEwNjAxOV0gUlNQOiAwMDE4OmZmZmY4ODAyMzU0NTdkNDggIEVGTEFHUzogMDAwMTAyNDYKK1suLi5dCisKKworZnVuY3Rpb24gZ3JhcGggdHJhY2VyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB0cmFjZXIgaXMgc2ltaWxhciB0byB0aGUgZnVuY3Rpb24gdHJhY2VyIGV4Y2VwdCB0aGF0IGl0Citwcm9iZXMgYSBmdW5jdGlvbiBvbiBpdHMgZW50cnkgYW5kIGl0cyBleGl0LiBUaGlzIGlzIGRvbmUgYnkKK3VzaW5nIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0YWNrIG9mIHJldHVybiBhZGRyZXNzZXMgaW4gZWFjaAordGFza19zdHJ1Y3QuIE9uIGZ1bmN0aW9uIGVudHJ5IHRoZSB0cmFjZXIgb3ZlcndyaXRlcyB0aGUgcmV0dXJuCithZGRyZXNzIG9mIGVhY2ggZnVuY3Rpb24gdHJhY2VkIHRvIHNldCBhIGN1c3RvbSBwcm9iZS4gVGh1cyB0aGUKK29yaWdpbmFsIHJldHVybiBhZGRyZXNzIGlzIHN0b3JlZCBvbiB0aGUgc3RhY2sgb2YgcmV0dXJuIGFkZHJlc3MKK2luIHRoZSB0YXNrX3N0cnVjdC4KKworUHJvYmluZyBvbiBib3RoIGVuZHMgb2YgYSBmdW5jdGlvbiBsZWFkcyB0byBzcGVjaWFsIGZlYXR1cmVzCitzdWNoIGFzOgorCistIG1lYXN1cmUgb2YgYSBmdW5jdGlvbidzIHRpbWUgZXhlY3V0aW9uCistIGhhdmluZyBhIHJlbGlhYmxlIGNhbGwgc3RhY2sgdG8gZHJhdyBmdW5jdGlvbiBjYWxscyBncmFwaAorCitUaGlzIHRyYWNlciBpcyB1c2VmdWwgaW4gc2V2ZXJhbCBzaXR1YXRpb25zOgorCistIHlvdSB3YW50IHRvIGZpbmQgdGhlIHJlYXNvbiBvZiBhIHN0cmFuZ2Uga2VybmVsIGJlaGF2aW9yIGFuZAorICBuZWVkIHRvIHNlZSB3aGF0IGhhcHBlbnMgaW4gZGV0YWlsIG9uIGFueSBhcmVhcyAob3Igc3BlY2lmaWMKKyAgb25lcykuCisKKy0geW91IGFyZSBleHBlcmllbmNpbmcgd2VpcmQgbGF0ZW5jaWVzIGJ1dCBpdCdzIGRpZmZpY3VsdCB0bworICBmaW5kIGl0cyBvcmlnaW4uCisKKy0geW91IHdhbnQgdG8gZmluZCBxdWlja2x5IHdoaWNoIHBhdGggaXMgdGFrZW4gYnkgYSBzcGVjaWZpYworICBmdW5jdGlvbgorCistIHlvdSBqdXN0IHdhbnQgdG8gcGVlayBpbnNpZGUgYSB3b3JraW5nIGtlcm5lbCBhbmQgd2FudCB0byBzZWUKKyAgd2hhdCBoYXBwZW5zIHRoZXJlLgorCisjIHRyYWNlcjogZnVuY3Rpb25fZ3JhcGgKKyMKKyMgQ1BVICBEVVJBVElPTiAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIENBTExTCisjIHwgICAgIHwgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfAorCisgMCkgICAgICAgICAgICAgICB8ICBzeXNfb3BlbigpIHsKKyAwKSAgICAgICAgICAgICAgIHwgICAgZG9fc3lzX29wZW4oKSB7CisgMCkgICAgICAgICAgICAgICB8ICAgICAgZ2V0bmFtZSgpIHsKKyAwKSAgICAgICAgICAgICAgIHwgICAgICAgIGttZW1fY2FjaGVfYWxsb2MoKSB7CisgMCkgICAxLjM4MiB1cyAgICB8ICAgICAgICAgIF9fbWlnaHRfc2xlZXAoKTsKKyAwKSAgIDIuNDc4IHVzICAgIHwgICAgICAgIH0KKyAwKSAgICAgICAgICAgICAgIHwgICAgICAgIHN0cm5jcHlfZnJvbV91c2VyKCkgeworIDApICAgICAgICAgICAgICAgfCAgICAgICAgICBtaWdodF9mYXVsdCgpIHsKKyAwKSAgIDEuMzg5IHVzICAgIHwgICAgICAgICAgICBfX21pZ2h0X3NsZWVwKCk7CisgMCkgICAyLjU1MyB1cyAgICB8ICAgICAgICAgIH0KKyAwKSAgIDMuODA3IHVzICAgIHwgICAgICAgIH0KKyAwKSAgIDcuODc2IHVzICAgIHwgICAgICB9CisgMCkgICAgICAgICAgICAgICB8ICAgICAgYWxsb2NfZmQoKSB7CisgMCkgICAwLjY2OCB1cyAgICB8ICAgICAgICBfc3Bpbl9sb2NrKCk7CisgMCkgICAwLjU3MCB1cyAgICB8ICAgICAgICBleHBhbmRfZmlsZXMoKTsKKyAwKSAgIDAuNTg2IHVzICAgIHwgICAgICAgIF9zcGluX3VubG9jaygpOworCisKK1RoZXJlIGFyZSBzZXZlcmFsIGNvbHVtbnMgdGhhdCBjYW4gYmUgZHluYW1pY2FsbHkKK2VuYWJsZWQvZGlzYWJsZWQuIFlvdSBjYW4gdXNlIGV2ZXJ5IGNvbWJpbmF0aW9uIG9mIG9wdGlvbnMgeW91Cit3YW50LCBkZXBlbmRpbmcgb24geW91ciBuZWVkcy4KKworLSBUaGUgY3B1IG51bWJlciBvbiB3aGljaCB0aGUgZnVuY3Rpb24gZXhlY3V0ZWQgaXMgZGVmYXVsdAorICBlbmFibGVkLiAgSXQgaXMgc29tZXRpbWVzIGJldHRlciB0byBvbmx5IHRyYWNlIG9uZSBjcHUgKHNlZQorICB0cmFjaW5nX2NwdV9tYXNrIGZpbGUpIG9yIHlvdSBtaWdodCBzb21ldGltZXMgc2VlIHVub3JkZXJlZAorICBmdW5jdGlvbiBjYWxscyB3aGlsZSBjcHUgdHJhY2luZyBzd2l0Y2guCisKKwloaWRlOiBlY2hvIG5vZnVuY2dyYXBoLWNwdSA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX29wdGlvbnMKKwlzaG93OiBlY2hvIGZ1bmNncmFwaC1jcHUgPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisKKy0gVGhlIGR1cmF0aW9uIChmdW5jdGlvbidzIHRpbWUgb2YgZXhlY3V0aW9uKSBpcyBkaXNwbGF5ZWQgb24KKyAgdGhlIGNsb3NpbmcgYnJhY2tldCBsaW5lIG9mIGEgZnVuY3Rpb24gb3Igb24gdGhlIHNhbWUgbGluZQorICB0aGFuIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGluIGNhc2Ugb2YgYSBsZWFmIG9uZS4gSXQgaXMgZGVmYXVsdAorICBlbmFibGVkLgorCisJaGlkZTogZWNobyBub2Z1bmNncmFwaC1kdXJhdGlvbiA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX29wdGlvbnMKKwlzaG93OiBlY2hvIGZ1bmNncmFwaC1kdXJhdGlvbiA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX29wdGlvbnMKKworLSBUaGUgb3ZlcmhlYWQgZmllbGQgcHJlY2VkZXMgdGhlIGR1cmF0aW9uIGZpZWxkIGluIGNhc2Ugb2YKKyAgcmVhY2hlZCBkdXJhdGlvbiB0aHJlc2hvbGRzLgorCisJaGlkZTogZWNobyBub2Z1bmNncmFwaC1vdmVyaGVhZCA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX29wdGlvbnMKKwlzaG93OiBlY2hvIGZ1bmNncmFwaC1vdmVyaGVhZCA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX29wdGlvbnMKKwlkZXBlbmRzIG9uOiBmdW5jZ3JhcGgtZHVyYXRpb24KKworICBpZToKKworICAwKSAgICAgICAgICAgICAgIHwgICAgdXBfd3JpdGUoKSB7CisgIDApICAgMC42NDYgdXMgICAgfCAgICAgIF9zcGluX2xvY2tfaXJxc2F2ZSgpOworICAwKSAgIDAuNjg0IHVzICAgIHwgICAgICBfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgpOworICAwKSAgIDMuMTIzIHVzICAgIHwgICAgfQorICAwKSAgIDAuNTQ4IHVzICAgIHwgICAgZnB1dCgpOworICAwKSArIDU4LjYyOCB1cyAgIHwgIH0KKworICBbLi4uXQorCisgIDApICAgICAgICAgICAgICAgfCAgICAgIHB1dG5hbWUoKSB7CisgIDApICAgICAgICAgICAgICAgfCAgICAgICAga21lbV9jYWNoZV9mcmVlKCkgeworICAwKSAgIDAuNTE4IHVzICAgIHwgICAgICAgICAgX19waHlzX2FkZHIoKTsKKyAgMCkgICAxLjc1NyB1cyAgICB8ICAgICAgICB9CisgIDApICAgMi44NjEgdXMgICAgfCAgICAgIH0KKyAgMCkgISAxMTUuMzA1IHVzICB8ICAgIH0KKyAgMCkgISAxMTYuNDAyIHVzICB8ICB9CisKKyAgKyBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBleGNlZWRlZCAxMCB1c2Vjcy4KKyAgISBtZWFucyB0aGF0IHRoZSBmdW5jdGlvbiBleGNlZWRlZCAxMDAgdXNlY3MuCisKKworLSBUaGUgdGFzay9waWQgZmllbGQgZGlzcGxheXMgdGhlIHRocmVhZCBjbWRsaW5lIGFuZCBwaWQgd2hpY2gKKyAgZXhlY3V0ZWQgdGhlIGZ1bmN0aW9uLiBJdCBpcyBkZWZhdWx0IGRpc2FibGVkLgorCisJaGlkZTogZWNobyBub2Z1bmNncmFwaC1wcm9jID4gL2RlYnVnL3RyYWNpbmcvdHJhY2Vfb3B0aW9ucworCXNob3c6IGVjaG8gZnVuY2dyYXBoLXByb2MgPiAvZGVidWcvdHJhY2luZy90cmFjZV9vcHRpb25zCisKKyAgaWU6CisKKyAgIyB0cmFjZXI6IGZ1bmN0aW9uX2dyYXBoCisgICMKKyAgIyBDUFUgIFRBU0svUElEICAgICAgICBEVVJBVElPTiAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIENBTExTCisgICMgfCAgICB8ICAgIHwgICAgICAgICAgIHwgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfAorICAwKSAgICBzaC00ODAyICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIGRfZnJlZSgpIHsKKyAgMCkgICAgc2gtNDgwMiAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIGNhbGxfcmN1KCkgeworICAwKSAgICBzaC00ODAyICAgICB8ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICBfX2NhbGxfcmN1KCkgeworICAwKSAgICBzaC00ODAyICAgICB8ICAgMC42MTYgdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHJjdV9wcm9jZXNzX2dwX2VuZCgpOworICAwKSAgICBzaC00ODAyICAgICB8ICAgMC41ODYgdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2Zvcl9uZXdfZ3JhY2VfcGVyaW9kKCk7CisgIDApICAgIHNoLTQ4MDIgICAgIHwgICAyLjg5OSB1cyAgICB8ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgMCkgICAgc2gtNDgwMiAgICAgfCAgIDQuMDQwIHVzICAgIHwgICAgICAgICAgICAgICAgICAgIH0KKyAgMCkgICAgc2gtNDgwMiAgICAgfCAgIDUuMTUxIHVzICAgIHwgICAgICAgICAgICAgICAgICB9CisgIDApICAgIHNoLTQ4MDIgICAgIHwgKyA0OS4zNzAgdXMgICB8ICAgICAgICAgICAgICAgIH0KKworCistIFRoZSBhYnNvbHV0ZSB0aW1lIGZpZWxkIGlzIGFuIGFic29sdXRlIHRpbWVzdGFtcCBnaXZlbiBieSB0aGUKKyAgc3lzdGVtIGNsb2NrIHNpbmNlIGl0IHN0YXJ0ZWQuIEEgc25hcHNob3Qgb2YgdGhpcyB0aW1lIGlzCisgIGdpdmVuIG9uIGVhY2ggZW50cnkvZXhpdCBvZiBmdW5jdGlvbnMKKworCWhpZGU6IGVjaG8gbm9mdW5jZ3JhcGgtYWJzdGltZSA+IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX29wdGlvbnMKKwlzaG93OiBlY2hvIGZ1bmNncmFwaC1hYnN0aW1lID4gL2RlYnVnL3RyYWNpbmcvdHJhY2Vfb3B0aW9ucworCisgIGllOgorCisgICMKKyAgIyAgICAgIFRJTUUgICAgICAgQ1BVICBEVVJBVElPTiAgICAgICAgICAgICAgICAgIEZVTkNUSU9OIENBTExTCisgICMgICAgICAgfCAgICAgICAgIHwgICAgIHwgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfAorICAzNjAuNzc0NTIyIHwgICAxKSAgIDAuNTQxIHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgIDM2MC43NzQ1MjIgfCAgIDEpICAgNC42NjMgdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgIDM2MC43NzQ1MjMgfCAgIDEpICAgMC41NDEgdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dha2VfdXBfYml0KCk7CisgIDM2MC43NzQ1MjQgfCAgIDEpICAgNi43OTYgdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAzNjAuNzc0NTI0IHwgICAxKSAgIDcuOTUyIHVzICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgIDM2MC43NzQ1MjUgfCAgIDEpICAgOS4wNjMgdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgIDM2MC43NzQ1MjUgfCAgIDEpICAgMC42MTUgdXMgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb3VybmFsX21hcmtfZGlydHkoKTsKKyAgMzYwLjc3NDUyNyB8ICAgMSkgICAwLjU3OCB1cyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnJlbHNlKCk7CisgIDM2MC43NzQ1MjggfCAgIDEpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKCkgeworICAzNjAuNzc0NTI4IHwgICAxKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxvY2tfYnVmZmVyKCkgeworICAzNjAuNzc0NTI5IHwgICAxKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdha2VfdXBfYml0KCkgeworICAzNjAuNzc0NTI5IHwgICAxKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0X3dhaXRxdWV1ZSgpIHsKKyAgMzYwLjc3NDUzMCB8ICAgMSkgICAwLjU5NCB1cyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19waHlzX2FkZHIoKTsKKworCitZb3UgY2FuIHB1dCBzb21lIGNvbW1lbnRzIG9uIHNwZWNpZmljIGZ1bmN0aW9ucyBieSB1c2luZwordHJhY2VfcHJpbnRrKCkgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHB1dCBhIGNvbW1lbnQgaW5zaWRlCit0aGUgX19taWdodF9zbGVlcCgpIGZ1bmN0aW9uLCB5b3UganVzdCBoYXZlIHRvIGluY2x1ZGUKKzxsaW51eC9mdHJhY2UuaD4gYW5kIGNhbGwgdHJhY2VfcHJpbnRrKCkgaW5zaWRlIF9fbWlnaHRfc2xlZXAoKQorCit0cmFjZV9wcmludGsoIkknbSBhIGNvbW1lbnQhXG4iKQorCit3aWxsIHByb2R1Y2U6CisKKyAxKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgX19taWdodF9zbGVlcCgpIHsKKyAxKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgLyogSSdtIGEgY29tbWVudCEgKi8KKyAxKSAgIDEuNDQ5IHVzICAgIHwgICAgICAgICAgICAgfQorCisKK1lvdSBtaWdodCBmaW5kIG90aGVyIHVzZWZ1bCBmZWF0dXJlcyBmb3IgdGhpcyB0cmFjZXIgaW4gdGhlCitmb2xsb3dpbmcgImR5bmFtaWMgZnRyYWNlIiBzZWN0aW9uIHN1Y2ggYXMgdHJhY2luZyBvbmx5IHNwZWNpZmljCitmdW5jdGlvbnMgb3IgdGFza3MuCisKIGR5bmFtaWMgZnRyYWNlCiAtLS0tLS0tLS0tLS0tLQogCiBJZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgaXMgc2V0LCB0aGUgc3lzdGVtIHdpbGwgcnVuIHdpdGgKIHZpcnR1YWxseSBubyBvdmVyaGVhZCB3aGVuIGZ1bmN0aW9uIHRyYWNpbmcgaXMgZGlzYWJsZWQuIFRoZSB3YXkKIHRoaXMgd29ya3MgaXMgdGhlIG1jb3VudCBmdW5jdGlvbiBjYWxsIChwbGFjZWQgYXQgdGhlIHN0YXJ0IG9mCi1ldmVyeSBrZXJuZWwgZnVuY3Rpb24sIHByb2R1Y2VkIGJ5IHRoZSAtcGcgc3dpdGNoIGluIGdjYyksIHN0YXJ0cwotb2YgcG9pbnRpbmcgdG8gYSBzaW1wbGUgcmV0dXJuLiAoRW5hYmxpbmcgRlRSQUNFIHdpbGwgaW5jbHVkZSB0aGUKLS1wZyBzd2l0Y2ggaW4gdGhlIGNvbXBpbGluZyBvZiB0aGUga2VybmVsLikKK2V2ZXJ5IGtlcm5lbCBmdW5jdGlvbiwgcHJvZHVjZWQgYnkgdGhlIC1wZyBzd2l0Y2ggaW4gZ2NjKSwKK3N0YXJ0cyBvZiBwb2ludGluZyB0byBhIHNpbXBsZSByZXR1cm4uIChFbmFibGluZyBGVFJBQ0Ugd2lsbAoraW5jbHVkZSB0aGUgLXBnIHN3aXRjaCBpbiB0aGUgY29tcGlsaW5nIG9mIHRoZSBrZXJuZWwuKQogCiBBdCBjb21waWxlIHRpbWUgZXZlcnkgQyBmaWxlIG9iamVjdCBpcyBydW4gdGhyb3VnaCB0aGUKIHJlY29yZG1jb3VudC5wbCBzY3JpcHQgKGxvY2F0ZWQgaW4gdGhlIHNjcmlwdHMgZGlyZWN0b3J5KS4gVGhpcwogc2NyaXB0IHdpbGwgcHJvY2VzcyB0aGUgQyBvYmplY3QgdXNpbmcgb2JqZHVtcCB0byBmaW5kIGFsbCB0aGUKLWxvY2F0aW9ucyBpbiB0aGUgLnRleHQgc2VjdGlvbiB0aGF0IGNhbGwgbWNvdW50LiAoTm90ZSwgb25seQotdGhlIC50ZXh0IHNlY3Rpb24gaXMgcHJvY2Vzc2VkLCBzaW5jZSBwcm9jZXNzaW5nIG90aGVyIHNlY3Rpb25zCi1saWtlIC5pbml0LnRleHQgbWF5IGNhdXNlIHJhY2VzIGR1ZSB0byB0aG9zZSBzZWN0aW9ucyBiZWluZyBmcmVlZCkuCitsb2NhdGlvbnMgaW4gdGhlIC50ZXh0IHNlY3Rpb24gdGhhdCBjYWxsIG1jb3VudC4gKE5vdGUsIG9ubHkgdGhlCisudGV4dCBzZWN0aW9uIGlzIHByb2Nlc3NlZCwgc2luY2UgcHJvY2Vzc2luZyBvdGhlciBzZWN0aW9ucyBsaWtlCisuaW5pdC50ZXh0IG1heSBjYXVzZSByYWNlcyBkdWUgdG8gdGhvc2Ugc2VjdGlvbnMgYmVpbmcgZnJlZWQpLgogCi1BIG5ldyBzZWN0aW9uIGNhbGxlZCAiX19tY291bnRfbG9jIiBpcyBjcmVhdGVkIHRoYXQgaG9sZHMgcmVmZXJlbmNlcwotdG8gYWxsIHRoZSBtY291bnQgY2FsbCBzaXRlcyBpbiB0aGUgLnRleHQgc2VjdGlvbi4gVGhpcyBzZWN0aW9uIGlzCi1jb21waWxlZCBiYWNrIGludG8gdGhlIG9yaWdpbmFsIG9iamVjdC4gVGhlIGZpbmFsIGxpbmtlciB3aWxsIGFkZAotYWxsIHRoZXNlIHJlZmVyZW5jZXMgaW50byBhIHNpbmdsZSB0YWJsZS4KK0EgbmV3IHNlY3Rpb24gY2FsbGVkICJfX21jb3VudF9sb2MiIGlzIGNyZWF0ZWQgdGhhdCBob2xkcworcmVmZXJlbmNlcyB0byBhbGwgdGhlIG1jb3VudCBjYWxsIHNpdGVzIGluIHRoZSAudGV4dCBzZWN0aW9uLgorVGhpcyBzZWN0aW9uIGlzIGNvbXBpbGVkIGJhY2sgaW50byB0aGUgb3JpZ2luYWwgb2JqZWN0LiBUaGUKK2ZpbmFsIGxpbmtlciB3aWxsIGFkZCBhbGwgdGhlc2UgcmVmZXJlbmNlcyBpbnRvIGEgc2luZ2xlIHRhYmxlLgogCiBPbiBib290IHVwLCBiZWZvcmUgU01QIGlzIGluaXRpYWxpemVkLCB0aGUgZHluYW1pYyBmdHJhY2UgY29kZQotc2NhbnMgdGhpcyB0YWJsZSBhbmQgdXBkYXRlcyBhbGwgdGhlIGxvY2F0aW9ucyBpbnRvIG5vcHMuIEl0IGFsc28KLXJlY29yZHMgdGhlIGxvY2F0aW9ucywgd2hpY2ggYXJlIGFkZGVkIHRvIHRoZSBhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucwotbGlzdC4gIE1vZHVsZXMgYXJlIHByb2Nlc3NlZCBhcyB0aGV5IGFyZSBsb2FkZWQgYW5kIGJlZm9yZSB0aGV5IGFyZQotZXhlY3V0ZWQuICBXaGVuIGEgbW9kdWxlIGlzIHVubG9hZGVkLCBpdCBhbHNvIHJlbW92ZXMgaXRzIGZ1bmN0aW9ucyBmcm9tCi10aGUgZnRyYWNlIGZ1bmN0aW9uIGxpc3QuIFRoaXMgaXMgYXV0b21hdGljIGluIHRoZSBtb2R1bGUgdW5sb2FkCi1jb2RlLCBhbmQgdGhlIG1vZHVsZSBhdXRob3IgZG9lcyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBpdC4KK3NjYW5zIHRoaXMgdGFibGUgYW5kIHVwZGF0ZXMgYWxsIHRoZSBsb2NhdGlvbnMgaW50byBub3BzLiBJdAorYWxzbyByZWNvcmRzIHRoZSBsb2NhdGlvbnMsIHdoaWNoIGFyZSBhZGRlZCB0byB0aGUKK2F2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zIGxpc3QuICBNb2R1bGVzIGFyZSBwcm9jZXNzZWQgYXMgdGhleQorYXJlIGxvYWRlZCBhbmQgYmVmb3JlIHRoZXkgYXJlIGV4ZWN1dGVkLiAgV2hlbiBhIG1vZHVsZSBpcwordW5sb2FkZWQsIGl0IGFsc28gcmVtb3ZlcyBpdHMgZnVuY3Rpb25zIGZyb20gdGhlIGZ0cmFjZSBmdW5jdGlvbgorbGlzdC4gVGhpcyBpcyBhdXRvbWF0aWMgaW4gdGhlIG1vZHVsZSB1bmxvYWQgY29kZSwgYW5kIHRoZQorbW9kdWxlIGF1dGhvciBkb2VzIG5vdCBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0LgogCi1XaGVuIHRyYWNpbmcgaXMgZW5hYmxlZCwga3N0b3BfbWFjaGluZSBpcyBjYWxsZWQgdG8gcHJldmVudCByYWNlcwotd2l0aCB0aGUgQ1BVUyBleGVjdXRpbmcgY29kZSBiZWluZyBtb2RpZmllZCAod2hpY2ggY2FuIGNhdXNlIHRoZQotQ1BVIHRvIGRvIHVuZGVzaXJlYWJsZSB0aGluZ3MpLCBhbmQgdGhlIG5vcHMgYXJlIHBhdGNoZWQgYmFjawotdG8gY2FsbHMuIEJ1dCB0aGlzIHRpbWUsIHRoZXkgZG8gbm90IGNhbGwgbWNvdW50ICh3aGljaCBpcyBqdXN0Ci1hIGZ1bmN0aW9uIHN0dWIpLiBUaGV5IG5vdyBjYWxsIGludG8gdGhlIGZ0cmFjZSBpbmZyYXN0cnVjdHVyZS4KK1doZW4gdHJhY2luZyBpcyBlbmFibGVkLCBrc3RvcF9tYWNoaW5lIGlzIGNhbGxlZCB0byBwcmV2ZW50CityYWNlcyB3aXRoIHRoZSBDUFVTIGV4ZWN1dGluZyBjb2RlIGJlaW5nIG1vZGlmaWVkICh3aGljaCBjYW4KK2NhdXNlIHRoZSBDUFUgdG8gZG8gdW5kZXNpcmVhYmxlIHRoaW5ncyksIGFuZCB0aGUgbm9wcyBhcmUKK3BhdGNoZWQgYmFjayB0byBjYWxscy4gQnV0IHRoaXMgdGltZSwgdGhleSBkbyBub3QgY2FsbCBtY291bnQKKyh3aGljaCBpcyBqdXN0IGEgZnVuY3Rpb24gc3R1YikuIFRoZXkgbm93IGNhbGwgaW50byB0aGUgZnRyYWNlCitpbmZyYXN0cnVjdHVyZS4KIAogT25lIHNwZWNpYWwgc2lkZS1lZmZlY3QgdG8gdGhlIHJlY29yZGluZyBvZiB0aGUgZnVuY3Rpb25zIGJlaW5nCiB0cmFjZWQgaXMgdGhhdCB3ZSBjYW4gbm93IHNlbGVjdGl2ZWx5IGNob29zZSB3aGljaCBmdW5jdGlvbnMgd2UKLXdpc2ggdG8gdHJhY2UgYW5kIHdoaWNoIG9uZXMgd2Ugd2FudCB0aGUgbWNvdW50IGNhbGxzIHRvIHJlbWFpbiBhcwotbm9wcy4KK3dpc2ggdG8gdHJhY2UgYW5kIHdoaWNoIG9uZXMgd2Ugd2FudCB0aGUgbWNvdW50IGNhbGxzIHRvIHJlbWFpbgorYXMgbm9wcy4KIAotVHdvIGZpbGVzIGFyZSB1c2VkLCBvbmUgZm9yIGVuYWJsaW5nIGFuZCBvbmUgZm9yIGRpc2FibGluZyB0aGUgdHJhY2luZwotb2Ygc3BlY2lmaWVkIGZ1bmN0aW9ucy4gVGhleSBhcmU6CitUd28gZmlsZXMgYXJlIHVzZWQsIG9uZSBmb3IgZW5hYmxpbmcgYW5kIG9uZSBmb3IgZGlzYWJsaW5nIHRoZQordHJhY2luZyBvZiBzcGVjaWZpZWQgZnVuY3Rpb25zLiBUaGV5IGFyZToKIAogICBzZXRfZnRyYWNlX2ZpbHRlcgogCkBAIC0xMjAyLDggKzE1MzUsOCBAQAogCiAgIHNldF9mdHJhY2Vfbm90cmFjZQogCi1BIGxpc3Qgb2YgYXZhaWxhYmxlIGZ1bmN0aW9ucyB0aGF0IHlvdSBjYW4gYWRkIHRvIHRoZXNlIGZpbGVzIGlzIGxpc3RlZAotaW46CitBIGxpc3Qgb2YgYXZhaWxhYmxlIGZ1bmN0aW9ucyB0aGF0IHlvdSBjYW4gYWRkIHRvIHRoZXNlIGZpbGVzIGlzCitsaXN0ZWQgaW46CiAKICAgIGF2YWlsYWJsZV9maWx0ZXJfZnVuY3Rpb25zCiAKQEAgLTEyNDAsOCArMTU3Myw4IEBACiBzeXNfbmFub3NsZWVwCiAKIAotUGVyaGFwcyB0aGlzIGlzIG5vdCBlbm91Z2guIFRoZSBmaWx0ZXJzIGFsc28gYWxsb3cgc2ltcGxlIHdpbGQgY2FyZHMuCi1Pbmx5IHRoZSBmb2xsb3dpbmcgYXJlIGN1cnJlbnRseSBhdmFpbGFibGUKK1BlcmhhcHMgdGhpcyBpcyBub3QgZW5vdWdoLiBUaGUgZmlsdGVycyBhbHNvIGFsbG93IHNpbXBsZSB3aWxkCitjYXJkcy4gT25seSB0aGUgZm9sbG93aW5nIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlCiAKICAgPG1hdGNoPiogIC0gd2lsbCBtYXRjaCBmdW5jdGlvbnMgdGhhdCBiZWdpbiB3aXRoIDxtYXRjaD4KICAgKjxtYXRjaD4gIC0gd2lsbCBtYXRjaCBmdW5jdGlvbnMgdGhhdCBlbmQgd2l0aCA8bWF0Y2g+CkBAIC0xMjUxLDkgKzE1ODQsOSBAQAogCiAgIDxtYXRjaD4qPG1hdGNoPiB3aWxsIG5vdCB3b3JrLgogCi1Ob3RlOiBJdCBpcyBiZXR0ZXIgdG8gdXNlIHF1b3RlcyB0byBlbmNsb3NlIHRoZSB3aWxkIGNhcmRzLCBvdGhlcndpc2UKLSAgdGhlIHNoZWxsIG1heSBleHBhbmQgdGhlIHBhcmFtZXRlcnMgaW50byBuYW1lcyBvZiBmaWxlcyBpbiB0aGUgbG9jYWwKLSAgZGlyZWN0b3J5LgorTm90ZTogSXQgaXMgYmV0dGVyIHRvIHVzZSBxdW90ZXMgdG8gZW5jbG9zZSB0aGUgd2lsZCBjYXJkcywKKyAgICAgIG90aGVyd2lzZSB0aGUgc2hlbGwgbWF5IGV4cGFuZCB0aGUgcGFyYW1ldGVycyBpbnRvIG5hbWVzCisgICAgICBvZiBmaWxlcyBpbiB0aGUgbG9jYWwgZGlyZWN0b3J5LgogCiAgIyBlY2hvICdocnRpbWVyXyonID4gL2RlYnVnL3RyYWNpbmcvc2V0X2Z0cmFjZV9maWx0ZXIKIApAQCAtMTI5OSw3ICsxNjMyLDggQEAKIFRvIHJld3JpdGUgdGhlIGZpbHRlcnMsIHVzZSAnPicKIFRvIGFwcGVuZCB0byB0aGUgZmlsdGVycywgdXNlICc+PicKIAotVG8gY2xlYXIgb3V0IGEgZmlsdGVyIHNvIHRoYXQgYWxsIGZ1bmN0aW9ucyB3aWxsIGJlIHJlY29yZGVkIGFnYWluOgorVG8gY2xlYXIgb3V0IGEgZmlsdGVyIHNvIHRoYXQgYWxsIGZ1bmN0aW9ucyB3aWxsIGJlIHJlY29yZGVkCithZ2FpbjoKIAogICMgZWNobyA+IC9kZWJ1Zy90cmFjaW5nL3NldF9mdHJhY2VfZmlsdGVyCiAgIyBjYXQgL2RlYnVnL3RyYWNpbmcvc2V0X2Z0cmFjZV9maWx0ZXIKQEAgLTEzMzEsNyArMTY2NSw4IEBACiBocnRpbWVyX2luaXRfc2xlZXBlcgogCiAKLVRoZSBzZXRfZnRyYWNlX25vdHJhY2UgcHJldmVudHMgdGhvc2UgZnVuY3Rpb25zIGZyb20gYmVpbmcgdHJhY2VkLgorVGhlIHNldF9mdHJhY2Vfbm90cmFjZSBwcmV2ZW50cyB0aG9zZSBmdW5jdGlvbnMgZnJvbSBiZWluZwordHJhY2VkLgogCiAgIyBlY2hvICcqcHJlZW1wdConICcqbG9jayonID4gL2RlYnVnL3RyYWNpbmcvc2V0X2Z0cmFjZV9ub3RyYWNlCiAKQEAgLTEzNTMsMTMgKzE2ODgsNzUgQEAKIAogV2UgY2FuIHNlZSB0aGF0IHRoZXJlJ3Mgbm8gbW9yZSBsb2NrIG9yIHByZWVtcHQgdHJhY2luZy4KIAorCitEeW5hbWljIGZ0cmFjZSB3aXRoIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbHRob3VnaCB3aGF0IGhhcyBiZWVuIGV4cGxhaW5lZCBhYm92ZSBjb25jZXJucyBib3RoIHRoZQorZnVuY3Rpb24gdHJhY2VyIGFuZCB0aGUgZnVuY3Rpb24tZ3JhcGgtdHJhY2VyLCB0aGVyZSBhcmUgc29tZQorc3BlY2lhbCBmZWF0dXJlcyBvbmx5IGF2YWlsYWJsZSBpbiB0aGUgZnVuY3Rpb24tZ3JhcGggdHJhY2VyLgorCitJZiB5b3Ugd2FudCB0byB0cmFjZSBvbmx5IG9uZSBmdW5jdGlvbiBhbmQgYWxsIG9mIGl0cyBjaGlsZHJlbiwKK3lvdSBqdXN0IGhhdmUgdG8gZWNobyBpdHMgbmFtZSBpbnRvIHNldF9ncmFwaF9mdW5jdGlvbjoKKworIGVjaG8gX19kb19mYXVsdCA+IHNldF9ncmFwaF9mdW5jdGlvbgorCit3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyAiZXhwYW5kZWQiIHRyYWNlIG9mIHRoZSBfX2RvX2ZhdWx0KCkKK2Z1bmN0aW9uOgorCisgMCkgICAgICAgICAgICAgICB8ICBfX2RvX2ZhdWx0KCkgeworIDApICAgICAgICAgICAgICAgfCAgICBmaWxlbWFwX2ZhdWx0KCkgeworIDApICAgICAgICAgICAgICAgfCAgICAgIGZpbmRfbG9ja19wYWdlKCkgeworIDApICAgMC44MDQgdXMgICAgfCAgICAgICAgZmluZF9nZXRfcGFnZSgpOworIDApICAgICAgICAgICAgICAgfCAgICAgICAgX19taWdodF9zbGVlcCgpIHsKKyAwKSAgIDEuMzI5IHVzICAgIHwgICAgICAgIH0KKyAwKSAgIDMuOTA0IHVzICAgIHwgICAgICB9CisgMCkgICA0Ljk3OSB1cyAgICB8ICAgIH0KKyAwKSAgIDAuNjUzIHVzICAgIHwgICAgX3NwaW5fbG9jaygpOworIDApICAgMC41NzggdXMgICAgfCAgICBwYWdlX2FkZF9maWxlX3JtYXAoKTsKKyAwKSAgIDAuNTI1IHVzICAgIHwgICAgbmF0aXZlX3NldF9wdGVfYXQoKTsKKyAwKSAgIDAuNTg1IHVzICAgIHwgICAgX3NwaW5fdW5sb2NrKCk7CisgMCkgICAgICAgICAgICAgICB8ICAgIHVubG9ja19wYWdlKCkgeworIDApICAgMC41NDEgdXMgICAgfCAgICAgIHBhZ2Vfd2FpdHF1ZXVlKCk7CisgMCkgICAwLjYzOSB1cyAgICB8ICAgICAgX193YWtlX3VwX2JpdCgpOworIDApICAgMi43ODYgdXMgICAgfCAgICB9CisgMCkgKyAxNC4yMzcgdXMgICB8ICB9CisgMCkgICAgICAgICAgICAgICB8ICBfX2RvX2ZhdWx0KCkgeworIDApICAgICAgICAgICAgICAgfCAgICBmaWxlbWFwX2ZhdWx0KCkgeworIDApICAgICAgICAgICAgICAgfCAgICAgIGZpbmRfbG9ja19wYWdlKCkgeworIDApICAgMC42OTggdXMgICAgfCAgICAgICAgZmluZF9nZXRfcGFnZSgpOworIDApICAgICAgICAgICAgICAgfCAgICAgICAgX19taWdodF9zbGVlcCgpIHsKKyAwKSAgIDEuNDEyIHVzICAgIHwgICAgICAgIH0KKyAwKSAgIDMuOTUwIHVzICAgIHwgICAgICB9CisgMCkgICA1LjA5OCB1cyAgICB8ICAgIH0KKyAwKSAgIDAuNjMxIHVzICAgIHwgICAgX3NwaW5fbG9jaygpOworIDApICAgMC41NzEgdXMgICAgfCAgICBwYWdlX2FkZF9maWxlX3JtYXAoKTsKKyAwKSAgIDAuNTI2IHVzICAgIHwgICAgbmF0aXZlX3NldF9wdGVfYXQoKTsKKyAwKSAgIDAuNTg2IHVzICAgIHwgICAgX3NwaW5fdW5sb2NrKCk7CisgMCkgICAgICAgICAgICAgICB8ICAgIHVubG9ja19wYWdlKCkgeworIDApICAgMC41MzMgdXMgICAgfCAgICAgIHBhZ2Vfd2FpdHF1ZXVlKCk7CisgMCkgICAwLjYzOCB1cyAgICB8ICAgICAgX193YWtlX3VwX2JpdCgpOworIDApICAgMi43OTMgdXMgICAgfCAgICB9CisgMCkgKyAxNC4wMTIgdXMgICB8ICB9CisKK1lvdSBjYW4gYWxzbyBleHBhbmQgc2V2ZXJhbCBmdW5jdGlvbnMgYXQgb25jZToKKworIGVjaG8gc3lzX29wZW4gPiBzZXRfZ3JhcGhfZnVuY3Rpb24KKyBlY2hvIHN5c19jbG9zZSA+PiBzZXRfZ3JhcGhfZnVuY3Rpb24KKworTm93IGlmIHlvdSB3YW50IHRvIGdvIGJhY2sgdG8gdHJhY2UgYWxsIGZ1bmN0aW9ucyB5b3UgY2FuIGNsZWFyCit0aGlzIHNwZWNpYWwgZmlsdGVyIHZpYToKKworIGVjaG8gPiBzZXRfZ3JhcGhfZnVuY3Rpb24KKworCiB0cmFjZV9waXBlCiAtLS0tLS0tLS0tCiAKLVRoZSB0cmFjZV9waXBlIG91dHB1dHMgdGhlIHNhbWUgY29udGVudCBhcyB0aGUgdHJhY2UgZmlsZSwgYnV0IHRoZSBlZmZlY3QKLW9uIHRoZSB0cmFjaW5nIGlzIGRpZmZlcmVudC4gRXZlcnkgcmVhZCBmcm9tIHRyYWNlX3BpcGUgaXMgY29uc3VtZWQuCi1UaGlzIG1lYW5zIHRoYXQgc3Vic2VxdWVudCByZWFkcyB3aWxsIGJlIGRpZmZlcmVudC4gVGhlIHRyYWNlCi1pcyBsaXZlLgorVGhlIHRyYWNlX3BpcGUgb3V0cHV0cyB0aGUgc2FtZSBjb250ZW50IGFzIHRoZSB0cmFjZSBmaWxlLCBidXQKK3RoZSBlZmZlY3Qgb24gdGhlIHRyYWNpbmcgaXMgZGlmZmVyZW50LiBFdmVyeSByZWFkIGZyb20KK3RyYWNlX3BpcGUgaXMgY29uc3VtZWQuIFRoaXMgbWVhbnMgdGhhdCBzdWJzZXF1ZW50IHJlYWRzIHdpbGwgYmUKK2RpZmZlcmVudC4gVGhlIHRyYWNlIGlzIGxpdmUuCiAKICAjIGVjaG8gZnVuY3Rpb24gPiAvZGVidWcvdHJhY2luZy9jdXJyZW50X3RyYWNlcgogICMgY2F0IC9kZWJ1Zy90cmFjaW5nL3RyYWNlX3BpcGUgPiAvdG1wL3RyYWNlLm91dCAmCkBAIC0xMzg3LDM4ICsxNzg0LDQ1IEBACiAgICAgICAgICAgICBiYXNoLTQwNDMgIFswMF0gNDEuMjY3MTExOiBzZWxlY3RfdGFza19ycV9ydCA8LXRyeV90b193YWtlX3VwCiAKIAotTm90ZSwgcmVhZGluZyB0aGUgdHJhY2VfcGlwZSBmaWxlIHdpbGwgYmxvY2sgdW50aWwgbW9yZSBpbnB1dCBpcyBhZGRlZC4KLUJ5IGNoYW5naW5nIHRoZSB0cmFjZXIsIHRyYWNlX3BpcGUgd2lsbCBpc3N1ZSBhbiBFT0YuIFdlIG5lZWRlZAotdG8gc2V0IHRoZSBmdW5jdGlvbiB0cmFjZXIgX2JlZm9yZV8gd2UgImNhdCIgdGhlIHRyYWNlX3BpcGUgZmlsZS4KK05vdGUsIHJlYWRpbmcgdGhlIHRyYWNlX3BpcGUgZmlsZSB3aWxsIGJsb2NrIHVudGlsIG1vcmUgaW5wdXQgaXMKK2FkZGVkLiBCeSBjaGFuZ2luZyB0aGUgdHJhY2VyLCB0cmFjZV9waXBlIHdpbGwgaXNzdWUgYW4gRU9GLiBXZQorbmVlZGVkIHRvIHNldCB0aGUgZnVuY3Rpb24gdHJhY2VyIF9iZWZvcmVfIHdlICJjYXQiIHRoZQordHJhY2VfcGlwZSBmaWxlLgogCiAKIHRyYWNlIGVudHJpZXMKIC0tLS0tLS0tLS0tLS0KIAotSGF2aW5nIHRvbyBtdWNoIG9yIG5vdCBlbm91Z2ggZGF0YSBjYW4gYmUgdHJvdWJsZXNvbWUgaW4gZGlhZ25vc2luZwotYW4gaXNzdWUgaW4gdGhlIGtlcm5lbC4gVGhlIGZpbGUgYnVmZmVyX3NpemVfa2IgaXMgdXNlZCB0byBtb2RpZnkKLXRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCB0cmFjZSBidWZmZXJzLiBUaGUgbnVtYmVyIGxpc3RlZAotaXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoYXQgY2FuIGJlIHJlY29yZGVkIHBlciBDUFUuIFRvIGtub3cKLXRoZSBmdWxsIHNpemUsIG11bHRpcGx5IHRoZSBudW1iZXIgb2YgcG9zc2libGUgQ1BVUyB3aXRoIHRoZQotbnVtYmVyIG9mIGVudHJpZXMuCitIYXZpbmcgdG9vIG11Y2ggb3Igbm90IGVub3VnaCBkYXRhIGNhbiBiZSB0cm91Ymxlc29tZSBpbgorZGlhZ25vc2luZyBhbiBpc3N1ZSBpbiB0aGUga2VybmVsLiBUaGUgZmlsZSBidWZmZXJfc2l6ZV9rYiBpcwordXNlZCB0byBtb2RpZnkgdGhlIHNpemUgb2YgdGhlIGludGVybmFsIHRyYWNlIGJ1ZmZlcnMuIFRoZQorbnVtYmVyIGxpc3RlZCBpcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgcmVjb3JkZWQgcGVyCitDUFUuIFRvIGtub3cgdGhlIGZ1bGwgc2l6ZSwgbXVsdGlwbHkgdGhlIG51bWJlciBvZiBwb3NzaWJsZSBDUFVTCit3aXRoIHRoZSBudW1iZXIgb2YgZW50cmllcy4KIAogICMgY2F0IC9kZWJ1Zy90cmFjaW5nL2J1ZmZlcl9zaXplX2tiCiAxNDA4ICh1bml0cyBraWxvYnl0ZXMpCiAKLU5vdGUsIHRvIG1vZGlmeSB0aGlzLCB5b3UgbXVzdCBoYXZlIHRyYWNpbmcgY29tcGxldGVseSBkaXNhYmxlZC4gVG8gZG8gdGhhdCwKLWVjaG8gIm5vcCIgaW50byB0aGUgY3VycmVudF90cmFjZXIuIElmIHRoZSBjdXJyZW50X3RyYWNlciBpcyBub3Qgc2V0Ci10byAibm9wIiwgYW4gRUlOVkFMIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCitOb3RlLCB0byBtb2RpZnkgdGhpcywgeW91IG11c3QgaGF2ZSB0cmFjaW5nIGNvbXBsZXRlbHkgZGlzYWJsZWQuCitUbyBkbyB0aGF0LCBlY2hvICJub3AiIGludG8gdGhlIGN1cnJlbnRfdHJhY2VyLiBJZiB0aGUKK2N1cnJlbnRfdHJhY2VyIGlzIG5vdCBzZXQgdG8gIm5vcCIsIGFuIEVJTlZBTCBlcnJvciB3aWxsIGJlCityZXR1cm5lZC4KIAogICMgZWNobyBub3AgPiAvZGVidWcvdHJhY2luZy9jdXJyZW50X3RyYWNlcgogICMgZWNobyAxMDAwMCA+IC9kZWJ1Zy90cmFjaW5nL2J1ZmZlcl9zaXplX2tiCiAgIyBjYXQgL2RlYnVnL3RyYWNpbmcvYnVmZmVyX3NpemVfa2IKIDEwMDAwICh1bml0cyBraWxvYnl0ZXMpCiAKLVRoZSBudW1iZXIgb2YgcGFnZXMgd2hpY2ggd2lsbCBiZSBhbGxvY2F0ZWQgaXMgbGltaXRlZCB0byBhIHBlcmNlbnRhZ2UKLW9mIGF2YWlsYWJsZSBtZW1vcnkuIEFsbG9jYXRpbmcgdG9vIG11Y2ggd2lsbCBwcm9kdWNlIGFuIGVycm9yLgorVGhlIG51bWJlciBvZiBwYWdlcyB3aGljaCB3aWxsIGJlIGFsbG9jYXRlZCBpcyBsaW1pdGVkIHRvIGEKK3BlcmNlbnRhZ2Ugb2YgYXZhaWxhYmxlIG1lbW9yeS4gQWxsb2NhdGluZyB0b28gbXVjaCB3aWxsIHByb2R1Y2UKK2FuIGVycm9yLgogCiAgIyBlY2hvIDEwMDAwMDAwMDAwMDAgPiAvZGVidWcvdHJhY2luZy9idWZmZXJfc2l6ZV9rYgogLWJhc2g6IGVjaG86IHdyaXRlIGVycm9yOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5CiAgIyBjYXQgL2RlYnVnL3RyYWNpbmcvYnVmZmVyX3NpemVfa2IKIDg1CiAKKy0tLS0tLS0tLS0tCisKK01vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlIHNvdXJjZSBjb2RlLCBpbiB0aGUKK2tlcm5lbC90cmFjaW5nLyouYyBmaWxlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQgYi9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CmluZGV4IGIxYjk4ODcuLjE0NWMyNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dApAQCAtMTIzLDcgKzEyMywxMCBAQAogCiBVc2luZyBHUElPcwogLS0tLS0tLS0tLS0KLU9uZSBvZiB0aGUgZmlyc3QgdGhpbmdzIHRvIGRvIHdpdGggYSBHUElPLCBvZnRlbiBpbiBib2FyZCBzZXR1cCBjb2RlIHdoZW4KK1RoZSBmaXJzdCB0aGluZyBhIHN5c3RlbSBzaG91bGQgZG8gd2l0aCBhIEdQSU8gaXMgYWxsb2NhdGUgaXQsIHVzaW5nCit0aGUgZ3Bpb19yZXF1ZXN0KCkgY2FsbDsgc2VlIGxhdGVyLgorCitPbmUgb2YgdGhlIG5leHQgdGhpbmdzIHRvIGRvIHdpdGggYSBHUElPLCBvZnRlbiBpbiBib2FyZCBzZXR1cCBjb2RlIHdoZW4KIHNldHRpbmcgdXAgYSBwbGF0Zm9ybV9kZXZpY2UgdXNpbmcgdGhlIEdQSU8sIGlzIG1hcmsgaXRzIGRpcmVjdGlvbjoKIAogCS8qIHNldCBhcyBpbnB1dCBvciBvdXRwdXQsIHJldHVybmluZyAwIG9yIG5lZ2F0aXZlIGVycm5vICovCkBAIC0xNDEsOCArMTQ0LDggQEAKIAogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgaW50ZXJmYWNlcyB0byBHUElPcywgc2V0dGluZyB0aGUgZGlyZWN0aW9uCiBvZiBhIEdQSU8gaW1wbGljaXRseSByZXF1ZXN0cyB0aGF0IEdQSU8gKHNlZSBiZWxvdykgaWYgaXQgaGFzIG5vdCBiZWVuCi1yZXF1ZXN0ZWQgYWxyZWFkeS4gIFRoYXQgY29tcGF0aWJpbGl0eSBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlOwotZXhwbGljaXRseSByZXF1ZXN0aW5nIEdQSU9zIGlzIHN0cm9uZ2x5IHByZWZlcnJlZC4KK3JlcXVlc3RlZCBhbHJlYWR5LiAgVGhhdCBjb21wYXRpYmlsaXR5IGlzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgb3B0aW9uYWwKK2dwaW9saWIgZnJhbWV3b3JrLgogCiBTZXR0aW5nIHRoZSBkaXJlY3Rpb24gY2FuIGZhaWwgaWYgdGhlIEdQSU8gbnVtYmVyIGlzIGludmFsaWQsIG9yIHdoZW4KIHRoYXQgcGFydGljdWxhciBHUElPIGNhbid0IGJlIHVzZWQgaW4gdGhhdCBtb2RlLiAgSXQncyBnZW5lcmFsbHkgYSBiYWQKQEAgLTE5NSw3ICsxOTgsNyBAQAogCiBQbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IHRoaXMgdHlwZSBvZiBHUElPIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBvdGhlciBHUElPcwogYnkgcmV0dXJuaW5nIG5vbnplcm8gZnJvbSB0aGlzIGNhbGwgKHdoaWNoIHJlcXVpcmVzIGEgdmFsaWQgR1BJTyBudW1iZXIsCi1laXRoZXIgZXhwbGljaXRseSBvciBpbXBsaWNpdGx5IHJlcXVlc3RlZCk6Cit3aGljaCBzaG91bGQgaGF2ZSBiZWVuIHByZXZpb3VzbHkgYWxsb2NhdGVkIHdpdGggZ3Bpb19yZXF1ZXN0KToKIAogCWludCBncGlvX2NhbnNsZWVwKHVuc2lnbmVkIGdwaW8pOwogCkBAIC0yMTIsMTAgKzIxNSw5IEBACiBzYW1lIGFzIHRoZSBzcGlubG9jay1zYWZlIGNhbGxzLgogCiAKLUNsYWltaW5nIGFuZCBSZWxlYXNpbmcgR1BJT3MgKE9QVElPTkFMKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDbGFpbWluZyBhbmQgUmVsZWFzaW5nIEdQSU9zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUbyBoZWxwIGNhdGNoIHN5c3RlbSBjb25maWd1cmF0aW9uIGVycm9ycywgdHdvIGNhbGxzIGFyZSBkZWZpbmVkLgotSG93ZXZlciwgbWFueSBwbGF0Zm9ybXMgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgdGhpcyBtZWNoYW5pc20uCiAKIAkvKiByZXF1ZXN0IEdQSU8sIHJldHVybmluZyAwIG9yIG5lZ2F0aXZlIGVycm5vLgogCSAqIG5vbi1udWxsIGxhYmVscyBtYXkgYmUgdXNlZnVsIGZvciBkaWFnbm9zdGljcy4KQEAgLTI0NCwxMyArMjQ2LDYgQEAKIHBvd2VyIG1hbmFnZW1lbnQsIHN1Y2ggYXMgYnkgcG93ZXJpbmcgZG93biB1bnVzZWQgY2hpcCBzZWN0b3JzIGFuZCwgbW9yZQogZWFzaWx5LCBnYXRpbmcgb2ZmIHVudXNlZCBjbG9ja3MuCiAKLVRoZXNlIHR3byBjYWxscyBhcmUgb3B0aW9uYWwgYmVjYXVzZSBub3Qgbm90IGFsbCBjdXJyZW50IExpbnV4IHBsYXRmb3Jtcwotb2ZmZXIgc3VjaCBmdW5jdGlvbmFsaXR5IGluIHRoZWlyIEdQSU8gc3VwcG9ydDsgYSB2YWxpZCBpbXBsZW1lbnRhdGlvbgotY291bGQgcmV0dXJuIHN1Y2Nlc3MgZm9yIGFsbCBncGlvX3JlcXVlc3QoKSBjYWxscy4gIFVubGlrZSB0aGUgb3RoZXIgY2FsbHMsCi10aGUgc3RhdGUgdGhleSByZXByZXNlbnQgZG9lc24ndCBub3JtYWxseSBtYXRjaCBhbnl0aGluZyBmcm9tIGEgaGFyZHdhcmUKLXJlZ2lzdGVyOyBpdCdzIGp1c3QgYSBzb2Z0d2FyZSBiaXRtYXAgd2hpY2ggY2xlYXJseSBpcyBub3QgbmVjZXNzYXJ5IGZvcgotY29ycmVjdCBvcGVyYXRpb24gb2YgaGFyZHdhcmUgb3IgKGJ1ZyBmcmVlKSBkcml2ZXJzLgotCiBOb3RlIHRoYXQgcmVxdWVzdGluZyBhIEdQSU8gZG9lcyBOT1QgY2F1c2UgaXQgdG8gYmUgY29uZmlndXJlZCBpbiBhbnkKIHdheTsgaXQganVzdCBtYXJrcyB0aGF0IEdQSU8gYXMgaW4gdXNlLiAgU2VwYXJhdGUgY29kZSBtdXN0IGhhbmRsZSBhbnkKIHBpbiBzZXR1cCAoZS5nLiBjb250cm9sbGluZyB3aGljaCBwaW4gdGhlIEdQSU8gdXNlcywgcHVsbHVwL3B1bGxkb3duKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbGlzM2x2MDJkIGIvRG9jdW1lbnRhdGlvbi9od21vbi9saXMzbHYwMmQKaW5kZXggMjg3ZjhjOS4uZWZmZTk0OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9saXMzbHYwMmQKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9saXMzbHYwMmQKQEAgLTEsMTEgKzEsMTEgQEAKIEtlcm5lbCBkcml2ZXIgbGlzM2x2MDJkCi09PT09PT09PT09PT09PT09PT0KKz09PT09PT09PT09PT09PT09PT09PT09CiAKIFN1cHBvcnRlZCBjaGlwczoKIAogICAqIFNUTWljcm9lbGVjdHJvbmljcyBMSVMzTFYwMkRMIGFuZCBMSVMzTFYwMkRRCiAKLUF1dGhvcjoKK0F1dGhvcnM6CiAgICAgICAgIFlhbiBCdXJtYW4gPGJ1cm1hbi55YW5AZ21haWwuY29tPgogCUVyaWMgUGllbCA8ZXJpYy5waWVsQHRyZW1wbGluLXV0Yy5uZXQ+CiAKQEAgLTE1LDcgKzE1LDcgQEAKIAogVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIGFjY2VsZXJvbWV0ZXIgZm91bmQgaW4gdmFyaW91cyBIUAogbGFwdG9wcyBzcG9ydGluZyB0aGUgZmVhdHVyZSBvZmZpY2lhbGx5IGNhbGxlZCAiSFAgTW9iaWxlIERhdGEKLVByb3RlY3Rpb24gU3lzdGVtIDNEIiBvciAiSFAgM0QgRHJpdmVHdWFyZCIuIEl0IGRldGVjdCBhdXRvbWF0aWNhbGx5CitQcm90ZWN0aW9uIFN5c3RlbSAzRCIgb3IgIkhQIDNEIERyaXZlR3VhcmQiLiBJdCBkZXRlY3RzIGF1dG9tYXRpY2FsbHkKIGxhcHRvcHMgd2l0aCB0aGlzIHNlbnNvci4gS25vd24gbW9kZWxzIChmb3Igbm93IHRoZSBIUCAyMTMzLCBuYzY0MjAsCiBuYzI1MTAsIG5jODUxMCwgbmM4NHgwLCBudzk0NDAgYW5kIG54OTQyMCkgd2lsbCBoYXZlIHRoZWlyIGF4aXMKIGF1dG9tYXRpY2FsbHkgb3JpZW50ZWQgb24gc3RhbmRhcmQgd2F5IChlZzogeW91IGNhbiBkaXJlY3RseSBwbGF5CkBAIC0yNyw3ICsyNyw3IEBACiBjYWxpYnJhdGUgLSByZWFkOiB2YWx1ZXMgKHgsIHksIHopIHRoYXQgYXJlIHVzZWQgYXMgdGhlIGJhc2UgZm9yIGlucHV0CiAJCSAgY2xhc3MgZGV2aWNlIG9wZXJhdGlvbi4KICAgICAgICAgICAgIHdyaXRlOiBmb3JjZXMgdGhlIGJhc2UgdG8gYmUgcmVjYWxpYnJhdGVkIHdpdGggdGhlIGN1cnJlbnQKLQkJICBwb3NpdGlvbi4KKwkJICAgcG9zaXRpb24uCiByYXRlIC0gcmVwb3J0cyB0aGUgc2FtcGxpbmcgcmF0ZSBvZiB0aGUgYWNjZWxlcm9tZXRlciBkZXZpY2UgaW4gSFoKIAogVGhpcyBkcml2ZXIgYWxzbyBwcm92aWRlcyBhbiBhYnNvbHV0ZSBpbnB1dCBjbGFzcyBkZXZpY2UsIGFsbG93aW5nCkBAIC00OCw3ICs0OCw3IEBACiB0aGUgYWNjZWxlcm9tZXRlciBhcmUgY29udmVydGVkIGludG8gYSAic3RhbmRhcmQiIG9yZ2FuaXNhdGlvbiBvZiB0aGUgYXhlcwogKGFrYSAiY2FuIHBsYXkgbmV2ZXJiYWxsIG91dCBvZiB0aGUgYm94Iik6CiAgKiBXaGVuIHRoZSBsYXB0b3AgaXMgaG9yaXpvbnRhbCB0aGUgcG9zaXRpb24gcmVwb3J0ZWQgaXMgYWJvdXQgMCBmb3IgWCBhbmQgWQotYW5kIGEgcG9zaXRpdmUgdmFsdWUgZm9yIFoKKwlhbmQgYSBwb3NpdGl2ZSB2YWx1ZSBmb3IgWgogICogSWYgdGhlIGxlZnQgc2lkZSBpcyBlbGV2YXRlZCwgWCBpbmNyZWFzZXMgKGJlY29tZXMgcG9zaXRpdmUpCiAgKiBJZiB0aGUgZnJvbnQgc2lkZSAod2hlcmUgdGhlIHRvdWNocGFkIGlzKSBpcyBlbGV2YXRlZCwgWSBkZWNyZWFzZXMKIAkoYmVjb21lcyBuZWdhdGl2ZSkKQEAgLTU5LDMgKzU5LDEzIEBACiBsYXB0b3AsIHBsZWFzZSBpbmNsdWRlIHRoZSBvdXRwdXQgb2YgImRtaWRlY29kZSIgcGx1cyB0aGUgdmFsdWUgb2YKIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9saXMzbHYwMmQvcG9zaXRpb24gaW4gdGhlc2UgZm91ciBjYXNlcy4KIAorUSZBCistLS0KKworUTogSG93IGRvIEkgc2FmZWx5IHNpbXVsYXRlIGZyZWVmYWxsPyBJIGhhdmUgYW4gSFAgInBvcnRhYmxlCit3b3Jrc3RhdGlvbiIgd2hpY2ggaGFzIGFib3V0IDMuNWtnIGFuZCBhIHBsYXN0aWMgY2FzZSwgc28gbGV0dGluZyBpdAorZmFsbCB0byB0aGUgZ3JvdW5kIGlzIG91dCBvZiBxdWVzdGlvbi4uLgorCitBOiBUaGUgc2Vuc29yIGlzIHByZXR0eSBzZW5zaXRpdmUsIHNvIHlvdXIgaGFuZHMgY2FuIGRvIGl0LiBMaWZ0IGl0CitpbnRvIGZyZWUgc3BhY2UsIGZvbGxvdyB0aGUgZmFsbCB3aXRoIHlvdXIgaGFuZHMgZm9yIGxpa2UgMTAKK2NlbnRpbWV0ZXJzLiBUaGF0IHNob3VsZCBiZSBlbm91Z2ggdG8gdHJpZ2dlciB0aGUgZGV0ZWN0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjE1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9sdGM0MjE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNmEyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2x0YzQyMTUKQEAgLTAsMCArMSw1MCBAQAorS2VybmVsIGRyaXZlciBsdGM0MjE1Cis9PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIExpbmVhciBUZWNobm9sb2d5IExUQzQyMTUKKyAgICBQcmVmaXg6ICdsdGM0MjE1JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAweDQ0CisgICAgRGF0YXNoZWV0OgorICAgICAgICBodHRwOi8vd3d3LmxpbmVhci5jb20vcGMvZG93bmxvYWREb2N1bWVudC5kbz9uYXZJZD1IMCxDMSxDMTAwMyxDMTAwNixDMTE2MyxQMTc1NzIsRDEyNjk3CisKK0F1dGhvcjogSXJhIFcuIFNueWRlciA8aXdzQG92cm8uY2FsdGVjaC5lZHU+CisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoZSBMVEM0MjE1IGNvbnRyb2xsZXIgYWxsb3dzIGEgYm9hcmQgdG8gYmUgc2FmZWx5IGluc2VydGVkIGFuZCByZW1vdmVkCitmcm9tIGEgbGl2ZSBiYWNrcGxhbmUuCisKKworVXNhZ2UgTm90ZXMKKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGRvZXMgbm90IHByb2JlIGZvciBMVEM0MjE1IGRldmljZXMsIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHNvbWUKK29mIHRoZSBwb3NzaWJsZSBhZGRyZXNzZXMgYXJlIHVuZnJpZW5kbHkgdG8gcHJvYmluZy4gWW91IHdpbGwgbmVlZCB0byB1c2UKK3RoZSAiZm9yY2UiIHBhcmFtZXRlciB0byB0ZWxsIHRoZSBkcml2ZXIgd2hlcmUgdG8gZmluZCB0aGUgZGV2aWNlLgorCitFeGFtcGxlOiB0aGUgZm9sbG93aW5nIHdpbGwgbG9hZCB0aGUgZHJpdmVyIGZvciBhbiBMVEM0MjE1IGF0IGFkZHJlc3MgMHg0NAorb24gSTJDIGJ1cyAjMDoKKyQgbW9kcHJvYmUgbHRjNDIxNSBmb3JjZT0wLDB4NDQKKworCitTeXNmcyBlbnRyaWVzCistLS0tLS0tLS0tLS0tCisKK1RoZSBMVEM0MjE1IGhhcyBidWlsdC1pbiBsaW1pdHMgZm9yIG92ZXJ2b2x0YWdlLCB1bmRlcnZvbHRhZ2UsIGFuZAordW5kZXJjdXJyZW50IHdhcm5pbmdzLiBUaGlzIG1ha2VzIGl0IHZlcnkgbGlrZWx5IHRoYXQgdGhlIHJlZmVyZW5jZQorY2lyY3VpdCB3aWxsIGJlIHVzZWQuCisKK2luMV9pbnB1dAkJaW5wdXQgdm9sdGFnZQoraW4yX2lucHV0CQlvdXRwdXQgdm9sdGFnZQorCitpbjFfbWluX2FsYXJtCQlpbnB1dCB1bmRlcnZvbHRhZ2UgYWxhcm0KK2luMV9tYXhfYWxhcm0JCWlucHV0IG92ZXJ2b2x0YWdlIGFsYXJtCisKK2N1cnIxX2lucHV0CQljdXJyZW50CitjdXJyMV9tYXhfYWxhcm0JCW92ZXJjdXJyZW50IGFsYXJtCisKK3Bvd2VyMV9pbnB1dAkJcG93ZXIgdXNhZ2UKK3Bvd2VyMV9hbGFybQkJcG93ZXIgYmFkIGFsYXJtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lhNjQva3ZtLnR4dCBiL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0CmluZGV4IDg0ZjdjYjMuLmZmYjVjODAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vaWE2NC9rdm0udHh0CkBAIC00Miw3ICs0Miw3IEBACiAJCWhnIGNsb25lIGh0dHA6Ly94ZW5iaXRzLnhlbnNvdXJjZS5jb20vZXh0L2VmaS12ZmlybXdhcmUuaGcKIAkgICAgeW91IGNhbiBnZXQgdGhlIGZpcm13YXJlJ3MgYmluYXJ5IGluIHRoZSBkaXJlY3Rvcnkgb2YgZWZpLXZmaXJtd2FyZS5oZy9iaW5hcmllcy4KIAotCSgzKSBSZW5hbWUgdGhlIGZpcndhcmUgeW91IG93bmVkIHRvIEZsYXNoLmZkLCBhbmQgY29weSBpdCB0byAvdXNyL2xvY2FsL3NoYXJlL3FlbXUKKwkoMykgUmVuYW1lIHRoZSBmaXJtd2FyZSB5b3Ugb3duZWQgdG8gRmxhc2guZmQsIGFuZCBjb3B5IGl0IHRvIC91c3IvbG9jYWwvc2hhcmUvcWVtdQogCiA0LiBCb290IHVwIExpbnV4IG9yIFdpbmRvd3MgZ3Vlc3RzOgogCTQuMSBDcmVhdGUgb3IgaW5zdGFsbCBhIGltYWdlIGZvciBndWVzdCBib290LiBJZiB5b3UgaGF2ZSB4ZW4gZXhwZXJpZW5jZSwgaXQgc2hvdWxkIGJlIGVhc3kuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGFlZWRiODkuLjI4OTVjZTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC01MCw2ICs1MCw3IEBACiAJSVNBUE5QCUlTQSBQblAgY29kZSBpcyBlbmFibGVkLgogCUlTRE4JQXBwcm9wcmlhdGUgSVNETiBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJSk9ZCUFwcHJvcHJpYXRlIGpveXN0aWNrIHN1cHBvcnQgaXMgZW5hYmxlZC4KKwlLTUVNVFJBQ0Uga21lbXRyYWNlIGlzIGVuYWJsZWQuCiAJTElCQVRBICBMaWJhdGEgZHJpdmVyIGlzIGVuYWJsZWQKIAlMUAlQcmludGVyIHN1cHBvcnQgaXMgZW5hYmxlZC4KIAlMT09QCUxvb3BiYWNrIGRldmljZSBzdXBwb3J0IGlzIGVuYWJsZWQuCkBAIC0yNTksNiArMjYwLDIyIEBACiAJCQl0byBhc3N1bWUgdGhhdCB0aGlzIG1hY2hpbmUncyBwbXRpbWVyIGxhdGNoZXMgaXRzIHZhbHVlCiAJCQlhbmQgYWx3YXlzIHJldHVybnMgZ29vZCB2YWx1ZXMuCiAKKwlhY3BpX2VuZm9yY2VfcmVzb3VyY2VzPQlbQUNQSV0KKwkJCXsgc3RyaWN0IHwgbGF4IHwgbm8gfQorCQkJQ2hlY2sgZm9yIHJlc291cmNlIGNvbmZsaWN0cyBiZXR3ZWVuIG5hdGl2ZSBkcml2ZXJzCisJCQlhbmQgQUNQSSBPcGVyYXRpb25SZWdpb25zIChTeXN0ZW1JTyBhbmQgU3lzdGVtTWVtb3J5CisJCQlvbmx5KS4gSU8gcG9ydHMgYW5kIG1lbW9yeSBkZWNsYXJlZCBpbiBBQ1BJIG1pZ2h0IGJlCisJCQl1c2VkIGJ5IHRoZSBBQ1BJIHN1YnN5c3RlbSBpbiBhcmJpdHJhcnkgQU1MIGNvZGUgYW5kCisJCQljYW4gaW50ZXJmZXJlIHdpdGggbGVnYWN5IGRyaXZlcnMuCisJCQlzdHJpY3QgKGRlZmF1bHQpOiBhY2Nlc3MgdG8gcmVzb3VyY2VzIGNsYWltZWQgYnkgQUNQSQorCQkJaXMgZGVuaWVkOyBsZWdhY3kgZHJpdmVycyB0cnlpbmcgdG8gYWNjZXNzIHJlc2VydmVkCisJCQlyZXNvdXJjZXMgd2lsbCBmYWlsIHRvIGJpbmQgdG8gZGV2aWNlIHVzaW5nIHRoZW0uCisJCQlsYXg6IGFjY2VzcyB0byByZXNvdXJjZXMgY2xhaW1lZCBieSBBQ1BJIGlzIGFsbG93ZWQ7CisJCQlsZWdhY3kgZHJpdmVycyB0cnlpbmcgdG8gYWNjZXNzIHJlc2VydmVkIHJlc291cmNlcworCQkJd2lsbCBiaW5kIHN1Y2Nlc3NmdWxseSBidXQgYSB3YXJuaW5nIG1lc3NhZ2UgaXMgbG9nZ2VkLgorCQkJbm86IEFDUEkgT3BlcmF0aW9uUmVnaW9ucyBhcmUgbm90IG1hcmtlZCBhcyByZXNlcnZlZCwKKwkJCW5vIGZ1cnRoZXIgY2hlY2tzIGFyZSBwZXJmb3JtZWQuCisKIAlhZ3A9CQlbQUdQXQogCQkJeyBvZmYgfCB0cnlfdW5zdXBwb3J0ZWQgfQogCQkJb2ZmOiBkaXNhYmxlIEFHUCBzdXBwb3J0CkBAIC02MTcsNiArNjM0LDkgQEAKIAogCWRlYnVnX29iamVjdHMJW0tOTF0gRW5hYmxlIG9iamVjdCBkZWJ1Z2dpbmcKIAorCW5vX2RlYnVnX29iamVjdHMKKwkJCVtLTkxdIERpc2FibGUgb2JqZWN0IGRlYnVnZ2luZworCiAJZGVidWdwYXQJW1g4Nl0gRW5hYmxlIFBBVCBkZWJ1Z2dpbmcKIAogCWRlY25ldC5hZGRyPQlbSFcsTkVUXQpAQCAtMTA3OCw2ICsxMDk4LDE1IEBACiAJCQl1c2UgdGhlIEhpZ2hNZW0gem9uZSBpZiBpdCBleGlzdHMsIGFuZCB0aGUgTm9ybWFsCiAJCQl6b25lIGlmIGl0IGRvZXMgbm90LgogCisJa21lbXRyYWNlLmVuYWJsZT0JW0tOTCxLTUVNVFJBQ0VdIEZvcm1hdDogeyB5ZXMgfCBubyB9CisJCQkJQ29udHJvbHMgd2hldGhlciBrbWVtdHJhY2UgaXMgZW5hYmxlZAorCQkJCWF0IGJvb3QtdGltZS4KKworCWttZW10cmFjZS5zdWJidWZzPW4JW0tOTCxLTUVNVFJBQ0VdIE92ZXJyaWRlcyB0aGUgbnVtYmVyIG9mCisJCQlzdWJidWZzIGttZW10cmFjZSdzIHJlbGF5IGNoYW5uZWwgaGFzLiBTZXQgdGhpcworCQkJaGlnaGVyIHRoYW4gZGVmYXVsdCAoS01FTVRSQUNFX05fU1VCQlVGUyBpbiBjb2RlKSBpZgorCQkJeW91IGV4cGVyaWVuY2UgYnVmZmVyIG92ZXJydW5zLgorCiAJbW92YWJsZWNvcmU9bm5bS01HXQlbS05MLFg4Ni0zMixJQS02NCxQUEMsWDg2LTY0XSBUaGlzIHBhcmFtZXRlcgogCQkJaXMgc2ltaWxhciB0byBrZXJuZWxjb3JlIGV4Y2VwdCBpdCBzcGVjaWZpZXMgdGhlCiAJCQlhbW91bnQgb2YgbWVtb3J5IHVzZWQgZm9yIG1pZ3JhdGFibGUgYWxsb2NhdGlvbnMuCkBAIC0xNTIzLDcgKzE1NTIsOSBAQAogCiAJbm9jbGZsdXNoCVtCVUdTPVg4Nl0gRG9uJ3QgdXNlIHRoZSBDTEZMVVNIIGluc3RydWN0aW9uCiAKLQlub2hsdAkJW0JVR1M9QVJNLFNIXQorCW5vaGx0CQlbQlVHUz1BUk0sU0hdIFRlbGxzIHRoZSBrZXJuZWwgdGhhdCB0aGUgc2xlZXAoU0gpIG9yCisJCQl3ZmkoQVJNKSBpbnN0cnVjdGlvbiBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IGFuZCBub3QgdG8KKwkJCXVzZSBpdC4gVGhpcyBpcyBhbHNvIHVzZWZ1bCB3aGVuIHVzaW5nIEpUQUcgZGVidWdnZXIuCiAKIAluby1obHQJCVtCVUdTPVg4Ni0zMl0gVGVsbHMgdGhlIGtlcm5lbCB0aGF0IHRoZSBobHQKIAkJCWluc3RydWN0aW9uIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgYW5kIG5vdCB0bwpAQCAtMTU0NCw2ICsxNTc1LDggQEAKIAkJCVZhbGlkIGFyZ3VtZW50czogb24sIG9mZgogCQkJRGVmYXVsdDogb24KIAorCW5vaW90cmFwCVtTSF0gRGlzYWJsZXMgdHJhcHBlZCBJL08gcG9ydCBhY2Nlc3Nlcy4KKwogCW5vaXJxZGVidWcJW1g4Ni0zMl0gRGlzYWJsZXMgdGhlIGNvZGUgd2hpY2ggYXR0ZW1wdHMgdG8gZGV0ZWN0IGFuZAogCQkJZGlzYWJsZSB1bmhhbmRsZWQgaW50ZXJydXB0IHNvdXJjZXMuCiAKQEAgLTE2MDMsNyArMTYzNiw3IEBACiAJbm9zb2Z0bG9ja3VwCVtLTkxdIERpc2FibGUgdGhlIHNvZnQtbG9ja3VwIGRldGVjdG9yLgogCiAJbm9zd2FwYWNjb3VudAlbS05MXSBEaXNhYmxlIGFjY291bnRpbmcgb2Ygc3dhcCBpbiBtZW1vcnkgcmVzb3VyY2UKLQkJCWNvbnRyb2xsZXIuIChTZWUgRG9jdW1lbnRhdGlvbi9jb250cm9sbGVycy9tZW1vcnkudHh0KQorCQkJY29udHJvbGxlci4gKFNlZSBEb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtb3J5LnR4dCkKIAogCW5vc3luYwkJW0hXLE02OEtdIERpc2FibGVzIHN5bmMgbmVnb3RpYXRpb24gZm9yIGFsbCBkZXZpY2VzLgogCkBAIC0xNjk1LDYgKzE3MjgsOCBAQAogCQkJU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9ibG9ja2Rldi9wYXJpZGUudHh0LgogCiAJcGNpPW9wdGlvblssb3B0aW9uLi4uXQlbUENJXSB2YXJpb3VzIFBDSSBzdWJzeXN0ZW0gb3B0aW9uczoKKwkJZWFybHlkdW1wCVtYODZdIGR1bXAgUENJIGNvbmZpZyBzcGFjZSBiZWZvcmUgdGhlIGtlcm5lbAorCQkJICAgICAgICBjaGFuZ2VzIGFueXRoaW5nCiAJCW9mZgkJW1g4Nl0gZG9uJ3QgcHJvYmUgZm9yIHRoZSBQQ0kgYnVzCiAJCWJpb3MJCVtYODYtMzJdIGZvcmNlIHVzZSBvZiBQQ0kgQklPUywgZG9uJ3QgYWNjZXNzCiAJCQkJdGhlIGhhcmR3YXJlIGRpcmVjdGx5LiBVc2UgdGhpcyBpZiB5b3VyIG1hY2hpbmUKQEAgLTE3OTQsNiArMTgyOSwxNSBAQAogCQljYm1lbXNpemU9bm5bS01HXQlUaGUgZml4ZWQgYW1vdW50IG9mIGJ1cyBzcGFjZSB3aGljaCBpcwogCQkJCXJlc2VydmVkIGZvciB0aGUgQ2FyZEJ1cyBicmlkZ2UncyBtZW1vcnkKIAkJCQl3aW5kb3cuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDY0IG1lZ2FieXRlcy4KKwkJcmVzb3VyY2VfYWxpZ25tZW50PQorCQkJCUZvcm1hdDoKKwkJCQlbPG9yZGVyIG9mIGFsaWduPkBdWzxkb21haW4+Ol08YnVzPjo8c2xvdD4uPGZ1bmM+WzsgLi4uXQorCQkJCVNwZWNpZmllcyBhbGlnbm1lbnQgYW5kIGRldmljZSB0byByZWFzc2lnbgorCQkJCWFsaWduZWQgbWVtb3J5IHJlc291cmNlcy4KKwkJCQlJZiA8b3JkZXIgb2YgYWxpZ24+IGlzIG5vdCBzcGVjaWZpZWQsCisJCQkJUEFHRV9TSVpFIGlzIHVzZWQgYXMgYWxpZ25tZW50LgorCQkJCVBDSS1QQ0kgYnJpZGdlIGNhbiBiZSBzcGVjaWZpZWQsIGlmIHJlc291cmNlCisJCQkJd2luZG93cyBuZWVkIHRvIGJlIGV4cGFuZGVkLgogCiAJcGNpZV9hc3BtPQlbUENJRV0gRm9yY2libHkgZW5hYmxlIG9yIGRpc2FibGUgUENJZSBBY3RpdmUgU3RhdGUgUG93ZXIKIAkJCU1hbmFnZW1lbnQuCkBAIC0xOTQyLDcgKzE5ODYsNyBAQAogCiAJcmVsYXhfZG9tYWluX2xldmVsPQogCQkJW0tOTCwgU01QXSBTZXQgc2NoZWR1bGVyJ3MgZGVmYXVsdCByZWxheF9kb21haW5fbGV2ZWwuCi0JCQlTZWUgRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dC4KKwkJCVNlZSBEb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1c2V0cy50eHQuCiAKIAlyZXNlcnZlPQlbS05MLEJVR1NdIEZvcmNlIHRoZSBrZXJuZWwgdG8gaWdub3JlIHNvbWUgaW9tZW0gYXJlYQogCkBAIC0yMzUxLDYgKzIzOTUsOCBAQAogCiAJdHA3MjA9CQlbSFcsUFMyXQogCisJdHJhY2VfYnVmX3NpemU9bm5bS01HXSBbZnRyYWNlXSB3aWxsIHNldCB0cmFjaW5nIGJ1ZmZlciBzaXplLgorCiAJdHJpeD0JCVtIVyxPU1NdIE1lZGlhVHJpeCBBdWRpb1RyaXggUHJvCiAJCQlGb3JtYXQ6CiAJCQk8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8c2JfaW8+LDxzYl9pcnE+LDxzYl9kbWE+LDxtcHVfaW8+LDxtcHVfaXJxPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FjZXItd21pLnR4dCBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy9hY2VyLXdtaS50eHQKaW5kZXggMmIzYTZiNS4uNWVlMmEwMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2FjZXItd21pLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvYWNlci13bWkudHh0CkBAIC0xLDkgKzEsOSBAQAogQWNlciBMYXB0b3AgV01JIEV4dHJhcyBEcml2ZXIKIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hY2VyYWNwaQotVmVyc2lvbiAwLjIKLTE4dGggQXVndXN0IDIwMDgKK1ZlcnNpb24gMC4zCis0dGggQXByaWwgMjAwOQogCi1Db3B5cmlnaHQgMjAwNy0yMDA4IENhcmxvcyBDb3JiYWNobyA8Y2FybG9zQHN0cmFuZ2V3b3JsZHMuY28udWs+CitDb3B5cmlnaHQgMjAwNy0yMDA5IENhcmxvcyBDb3JiYWNobyA8Y2FybG9zQHN0cmFuZ2V3b3JsZHMuY28udWs+CiAKIGFjZXItd21pIGlzIGEgZHJpdmVyIHRvIGFsbG93IHlvdSB0byBjb250cm9sIHZhcmlvdXMgcGFydHMgb2YgeW91ciBBY2VyIGxhcHRvcAogaGFyZHdhcmUgdW5kZXIgTGludXggd2hpY2ggYXJlIGV4cG9zZWQgdmlhIEFDUEktV01JLgpAQCAtMzYsNiArMzYsMTAgQEAKIFN1cHBvcnRlZCBIYXJkd2FyZQogKioqKioqKioqKioqKioqKioqCiAKK05PVEU6IFRoZSBBY2VyIEFzcGlyZSBPbmUgaXMgbm90IHN1cHBvcnRlZCBoYXJkd2FyZS4gSXQgY2Fubm90IHdvcmsgd2l0aAorYWNlci13bWkgdW50aWwgQWNlciBmaXggdGhlaXIgQUNQSS1XTUkgaW1wbGVtZW50YXRpb24gb24gdGhlbSwgc28gaGFzIGJlZW4KK2JsYWNrbGlzdGVkIHVudGlsIHRoYXQgaGFwcGVucy4KKwogUGxlYXNlIHNlZSB0aGUgd2Vic2l0ZSBmb3IgdGhlIGN1cnJlbnQgbGlzdCBvZiBrbm93biB3b3JraW5nIGhhcmRhcmU6CiAKIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hY2VyYWNwaS93aWtpL1N1cHBvcnRlZEhhcmR3YXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKaW5kZXggNDFiYzk5Zi4uM2Q3NjUwNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dApAQCAtMjAsNyArMjAsOCBAQAoga2VybmVsIDIuNi4yOSBhbmQgcmVsZWFzZSAwLjIyLgogCiBUaGUgZHJpdmVyIGlzIG5hbWVkICJ0aGlua3BhZC1hY3BpIi4gIEluIHNvbWUgcGxhY2VzLCBsaWtlIG1vZHVsZQotbmFtZXMsICJ0aGlua3BhZF9hY3BpIiBpcyB1c2VkIGJlY2F1c2Ugb2YgdXNlcnNwYWNlIGlzc3Vlcy4KK25hbWVzIGFuZCBsb2cgbWVzc2FnZXMsICJ0aGlua3BhZF9hY3BpIiBpcyB1c2VkIGJlY2F1c2Ugb2YgdXNlcnNwYWNlCitpc3N1ZXMuCiAKICJ0cGFjcGkiIGlzIHVzZWQgYXMgYSBzaG9ydGhhbmQgd2hlcmUgInRoaW5rcGFkLWFjcGkiIHdvdWxkIGJlIHRvbwogbG9uZyBkdWUgdG8gbGVuZ3RoIGxpbWl0YXRpb25zIG9uIHNvbWUgTGludXgga2VybmVsIHZlcnNpb25zLgpAQCAtMzcsNyArMzgsNyBAQAogCS0gVGhpbmtMaWdodCBvbiBhbmQgb2ZmCiAJLSBsaW1pdGVkIGRvY2tpbmcgYW5kIHVuZG9ja2luZwogCS0gVWx0cmFCYXkgZWplY3QKLQktIENNT1MgY29udHJvbAorCS0gQ01PUy9VQ01TIGNvbnRyb2wKIAktIExFRCBjb250cm9sCiAJLSBBQ1BJIHNvdW5kcwogCS0gdGVtcGVyYXR1cmUgc2Vuc29ycwpAQCAtNDYsNiArNDcsNyBAQAogCS0gVm9sdW1lIGNvbnRyb2wKIAktIEZhbiBjb250cm9sIGFuZCBtb25pdG9yaW5nOiBmYW4gc3BlZWQsIGZhbiBlbmFibGUvZGlzYWJsZQogCS0gV0FOIGVuYWJsZSBhbmQgZGlzYWJsZQorCS0gVVdCIGVuYWJsZSBhbmQgZGlzYWJsZQogCiBBIGNvbXBhdGliaWxpdHkgdGFibGUgYnkgbW9kZWwgYW5kIGZlYXR1cmUgaXMgbWFpbnRhaW5lZCBvbiB0aGUgd2ViCiBzaXRlLCBodHRwOi8vaWJtLWFjcGkuc2YubmV0Ly4gSSBhcHByZWNpYXRlIGFueSBzdWNjZXNzIG9yIGZhaWx1cmUKQEAgLTUzLDcgKzU1LDcgQEAKIFBsZWFzZSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaW4geW91ciByZXBvcnQ6CiAKIAktIFRoaW5rUGFkIG1vZGVsIG5hbWUKLQktIGEgY29weSBvZiB5b3VyIERTRFQsIGZyb20gL3Byb2MvYWNwaS9kc2R0CisJLSBhIGNvcHkgb2YgeW91ciBBQ1BJIHRhYmxlcywgdXNpbmcgdGhlICJhY3BpZHVtcCIgdXRpbGl0eQogCS0gYSBjb3B5IG9mIHRoZSBvdXRwdXQgb2YgZG1pZGVjb2RlLCB3aXRoIHNlcmlhbCBudW1iZXJzCiAJICBhbmQgVVVJRHMgbWFza2VkIG9mZgogCS0gd2hpY2ggZHJpdmVyIGZlYXR1cmVzIHdvcmsgYW5kIHdoaWNoIGRvbid0CkBAIC02NiwxNyArNjgsMTggQEAKIC0tLS0tLS0tLS0tLQogCiBJZiB5b3UgYXJlIGNvbXBpbGluZyB0aGlzIGRyaXZlciBhcyBpbmNsdWRlZCBpbiB0aGUgTGludXgga2VybmVsCi1zb3VyY2VzLCBzaW1wbHkgZW5hYmxlIHRoZSBDT05GSUdfVEhJTktQQURfQUNQSSBvcHRpb24sIGFuZCBvcHRpb25hbGx5Ci1lbmFibGUgdGhlIENPTkZJR19USElOS1BBRF9BQ1BJX0JBWSBvcHRpb24gaWYgeW91IHdhbnQgdGhlCi10aGlua3BhZC1zcGVjaWZpYyBiYXkgZnVuY3Rpb25hbGl0eS4KK3NvdXJjZXMsIGxvb2sgZm9yIHRoZSBDT05GSUdfVEhJTktQQURfQUNQSSBLY29uZmlnIG9wdGlvbi4KK0l0IGlzIGxvY2F0ZWQgb24gdGhlIG1lbnUgcGF0aDogIkRldmljZSBEcml2ZXJzIiAtPiAiWDg2IFBsYXRmb3JtCitTcGVjaWZpYyBEZXZpY2UgRHJpdmVycyIgLT4gIlRoaW5rUGFkIEFDUEkgTGFwdG9wIEV4dHJhcyIuCisKIAogRmVhdHVyZXMKIC0tLS0tLS0tCiAKIFRoZSBkcml2ZXIgZXhwb3J0cyB0d28gZGlmZmVyZW50IGludGVyZmFjZXMgdG8gdXNlcnNwYWNlLCB3aGljaCBjYW4gYmUKIHVzZWQgdG8gYWNjZXNzIHRoZSBmZWF0dXJlcyBpdCBwcm92aWRlcy4gIE9uZSBpcyBhIGxlZ2FjeSBwcm9jZnMtYmFzZWQKLWludGVyZmFjZSwgd2hpY2ggd2lsbCBiZSByZW1vdmVkIGF0IHNvbWUgdGltZSBpbiB0aGUgZGlzdGFudCBmdXR1cmUuCi1UaGUgb3RoZXIgaXMgYSBuZXcgc3lzZnMtYmFzZWQgaW50ZXJmYWNlIHdoaWNoIGlzIG5vdCBjb21wbGV0ZSB5ZXQuCitpbnRlcmZhY2UsIHdoaWNoIHdpbGwgYmUgcmVtb3ZlZCBhdCBzb21lIHRpbWUgaW4gdGhlIGZ1dHVyZS4gIFRoZSBvdGhlcgoraXMgYSBuZXcgc3lzZnMtYmFzZWQgaW50ZXJmYWNlIHdoaWNoIGlzIG5vdCBjb21wbGV0ZSB5ZXQuCiAKIFRoZSBwcm9jZnMgaW50ZXJmYWNlIGNyZWF0ZXMgdGhlIC9wcm9jL2FjcGkvaWJtIGRpcmVjdG9yeS4gIFRoZXJlIGlzIGEKIGZpbGUgdW5kZXIgdGhhdCBkaXJlY3RvcnkgZm9yIGVhY2ggZmVhdHVyZSBpdCBzdXBwb3J0cy4gIFRoZSBwcm9jZnMKQEAgLTExMSwxNSArMTE0LDE3IEBACiBhcyBhIGRyaXZlciBhdHRyaWJ1dGUgKHNlZSBiZWxvdykuCiAKIFN5c2ZzIGRyaXZlciBhdHRyaWJ1dGVzIGFyZSBvbiB0aGUgZHJpdmVyJ3Mgc3lzZnMgYXR0cmlidXRlIHNwYWNlLAotZm9yIDIuNi4yMyB0aGlzIGlzIC9zeXMvYnVzL3BsYXRmb3JtL2RyaXZlcnMvdGhpbmtwYWRfYWNwaS8gYW5kCitmb3IgMi42LjIzKyB0aGlzIGlzIC9zeXMvYnVzL3BsYXRmb3JtL2RyaXZlcnMvdGhpbmtwYWRfYWNwaS8gYW5kCiAvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzL3RoaW5rcGFkX2h3bW9uLwogCiBTeXNmcyBkZXZpY2UgYXR0cmlidXRlcyBhcmUgb24gdGhlIHRoaW5rcGFkX2FjcGkgZGV2aWNlIHN5c2ZzIGF0dHJpYnV0ZQotc3BhY2UsIGZvciAyLjYuMjMgdGhpcyBpcyAvc3lzL2RldmljZXMvcGxhdGZvcm0vdGhpbmtwYWRfYWNwaS8uCitzcGFjZSwgZm9yIDIuNi4yMysgdGhpcyBpcyAvc3lzL2RldmljZXMvcGxhdGZvcm0vdGhpbmtwYWRfYWNwaS8uCiAKIFN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzIGZvciB0aGUgc2Vuc29ycyBhbmQgZmFuIGFyZSBvbiB0aGUKIHRoaW5rcGFkX2h3bW9uIGRldmljZSdzIHN5c2ZzIGF0dHJpYnV0ZSBzcGFjZSwgYnV0IHlvdSBzaG91bGQgbG9jYXRlIGl0Ci1sb29raW5nIGZvciBhIGh3bW9uIGRldmljZSB3aXRoIHRoZSBuYW1lIGF0dHJpYnV0ZSBvZiAidGhpbmtwYWQiLgorbG9va2luZyBmb3IgYSBod21vbiBkZXZpY2Ugd2l0aCB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgInRoaW5rcGFkIiwgb3IKK2JldHRlciB5ZXQsIHRocm91Z2ggbGlic2Vuc29ycy4KKwogCiBEcml2ZXIgdmVyc2lvbgogLS0tLS0tLS0tLS0tLS0KQEAgLTEyOSw2ICsxMzQsNyBAQAogCiBUaGUgZHJpdmVyIG5hbWUgYW5kIHZlcnNpb24uIE5vIGNvbW1hbmRzIGNhbiBiZSB3cml0dGVuIHRvIHRoaXMgZmlsZS4KIAorCiBTeXNmcyBpbnRlcmZhY2UgdmVyc2lvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTYwLDYgKzE2Niw3IEBACiAoYW4gYXR0cmlidXRlIG5vdCBiZWluZyB0aGVyZSAqaXMqIGEgdmFsaWQgd2F5IHRvIG1ha2UgaXQgY2xlYXIgdGhhdCBhCiBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgaW4gc3lzZnMpLgogCisKIEhvdCBrZXlzCiAtLS0tLS0tLQogCkBAIC0xNzIsMTcgKzE3OSwxNCBAQAogZmlybXdhcmUgdGhhdCBzdWNoIGEgZHJpdmVyIGlzIHByZXNlbnQsIGFuZCBtb2RpZmllcyBob3cgdGhlIFRoaW5rUGFkCiBmaXJtd2FyZSB3aWxsIGJlaGF2ZSBpbiBtYW55IHNpdHVhdGlvbnMuCiAKLVRoZSBkcml2ZXIgZW5hYmxlcyB0aGUgaG90IGtleSBmZWF0dXJlIGF1dG9tYXRpY2FsbHkgd2hlbiBsb2FkZWQuICBUaGUKLWZlYXR1cmUgY2FuIGxhdGVyIGJlIGRpc2FibGVkIGFuZCBlbmFibGVkIGJhY2sgYXQgcnVudGltZS4gIFRoZSBkcml2ZXIKLXdpbGwgYWxzbyByZXN0b3JlIHRoZSBob3Qga2V5IGZlYXR1cmUgdG8gaXRzIHByZXZpb3VzIHN0YXRlIGFuZCBtYXNrCi13aGVuIGl0IGlzIHVubG9hZGVkLgorVGhlIGRyaXZlciBlbmFibGVzIHRoZSBIS0VZICgiaG90IGtleSIpIGV2ZW50IHJlcG9ydGluZyBhdXRvbWF0aWNhbGx5Cit3aGVuIGxvYWRlZCwgYW5kIGRpc2FibGVzIGl0IHdoZW4gaXQgaXMgcmVtb3ZlZC4KIAotV2hlbiB0aGUgaG90a2V5IGZlYXR1cmUgaXMgZW5hYmxlZCBhbmQgdGhlIGhvdCBrZXkgbWFzayBpcyBzZXQgKHNlZQotYmVsb3cpLCB0aGUgZHJpdmVyIHdpbGwgcmVwb3J0IEhLRVkgZXZlbnRzIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorVGhlIGRyaXZlciB3aWxsIHJlcG9ydCBIS0VZIGV2ZW50cyBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKIAogCWlibS9ob3RrZXkgSEtFWSAwMDAwMDA4MCAwMDAweHh4eAogCi1Tb21lIG9mIHRoZXNlIGV2ZW50cyByZWZlciB0byBob3Qga2V5IHByZXNzZXMsIGJ1dCBub3QgYWxsLgorU29tZSBvZiB0aGVzZSBldmVudHMgcmVmZXIgdG8gaG90IGtleSBwcmVzc2VzLCBidXQgbm90IGFsbCBvZiB0aGVtLgogCiBUaGUgZHJpdmVyIHdpbGwgZ2VuZXJhdGUgZXZlbnRzIG92ZXIgdGhlIGlucHV0IGxheWVyIGZvciBob3Qga2V5cyBhbmQKIHJhZGlvIHN3aXRjaGVzLCBhbmQgb3ZlciB0aGUgQUNQSSBuZXRsaW5rIGxheWVyIGZvciBvdGhlciBldmVudHMuICBUaGUKQEAgLTIxNCwxMyArMjE4LDE3IEBACiAKIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIC9wcm9jL2FjcGkvaWJtL2hvdGtleSBmaWxlOgogCi0JZWNobyBlbmFibGUgPiAvcHJvYy9hY3BpL2libS9ob3RrZXkgLS0gZW5hYmxlIHRoZSBob3Qga2V5cyBmZWF0dXJlCi0JZWNobyBkaXNhYmxlID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIGRpc2FibGUgdGhlIGhvdCBrZXlzIGZlYXR1cmUKIAllY2hvIDB4ZmZmZmZmZmYgPiAvcHJvYy9hY3BpL2libS9ob3RrZXkgLS0gZW5hYmxlIGFsbCBob3Qga2V5cwogCWVjaG8gMCA+IC9wcm9jL2FjcGkvaWJtL2hvdGtleSAtLSBkaXNhYmxlIGFsbCBwb3NzaWJsZSBob3Qga2V5cwogCS4uLiBhbnkgb3RoZXIgOC1oZXgtZGlnaXQgbWFzayAuLi4KIAllY2hvIHJlc2V0ID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIHJlc3RvcmUgdGhlIG9yaWdpbmFsIG1hc2sKIAorVGhlIGZvbGxvd2luZyBjb21tYW5kcyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBjYXVzZSB0aGUga2VybmVsCit0byBsb2cgYSB3YXJuaW5nOgorCisJZWNobyBlbmFibGUgPiAvcHJvYy9hY3BpL2libS9ob3RrZXkgLS0gZG9lcyBub3RoaW5nCisJZWNobyBkaXNhYmxlID4gL3Byb2MvYWNwaS9pYm0vaG90a2V5IC0tIHJldHVybnMgYW4gZXJyb3IKKwogVGhlIHByb2NmcyBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBOVlJBTSBwb2xsaW5nIGNvbnRyb2wuICBTbyBhcyB0bwogbWFpbnRhaW4gbWF4aW11bSBidWctdG8tYnVnIGNvbXBhdGliaWxpdHksIGl0IGRvZXMgbm90IHJlcG9ydCBhbnkgbWFza3MsCiBub3IgZG9lcyBpdCBhbGxvdyBvbmUgdG8gbWFuaXB1bGF0ZSB0aGUgaG90IGtleSBtYXNrIHdoZW4gdGhlIGZpcm13YXJlCkBAIC0yMjksMTIgKzIzNyw5IEBACiBzeXNmcyBub3RlczoKIAogCWhvdGtleV9iaW9zX2VuYWJsZWQ6Ci0JCVJldHVybnMgdGhlIHN0YXR1cyBvZiB0aGUgaG90IGtleXMgZmVhdHVyZSB3aGVuCi0JCXRoaW5rcGFkLWFjcGkgd2FzIGxvYWRlZC4gIFVwb24gbW9kdWxlIHVubG9hZCwgdGhlIGhvdAotCQlrZXkgZmVhdHVyZSBzdGF0dXMgd2lsbCBiZSByZXN0b3JlZCB0byB0aGlzIHZhbHVlLgorCQlERVBSRUNBVEVELCBXSUxMIEJFIFJFTU9WRUQgU09PTi4KIAotCQkwOiBob3Qga2V5cyB3ZXJlIGRpc2FibGVkCi0JCTE6IGhvdCBrZXlzIHdlcmUgZW5hYmxlZCAodW51c3VhbCkKKwkJUmV0dXJucyAwLgogCiAJaG90a2V5X2Jpb3NfbWFzazoKIAkJUmV0dXJucyB0aGUgaG90IGtleXMgbWFzayB3aGVuIHRoaW5rcGFkLWFjcGkgd2FzIGxvYWRlZC4KQEAgLTI0MiwxMyArMjQ3LDEwIEBACiAJCXRvIHRoaXMgdmFsdWUuCiAKIAlob3RrZXlfZW5hYmxlOgotCQlFbmFibGVzL2Rpc2FibGVzIHRoZSBob3Qga2V5cyBmZWF0dXJlIGluIHRoZSBBQ1BJCi0JCWZpcm13YXJlLCBhbmQgcmVwb3J0cyBjdXJyZW50IHN0YXR1cyBvZiB0aGUgaG90IGtleXMKLQkJZmVhdHVyZS4gIEhhcyBubyBlZmZlY3Qgb24gdGhlIE5WUkFNIGhvdCBrZXkgcG9sbGluZwotCQlmdW5jdGlvbmFsaXR5LgorCQlERVBSRUNBVEVELCBXSUxMIEJFIFJFTU9WRUQgU09PTi4KIAotCQkwOiBkaXNhYmxlcyB0aGUgaG90IGtleXMgZmVhdHVyZSAvIGZlYXR1cmUgZGlzYWJsZWQKLQkJMTogZW5hYmxlcyB0aGUgaG90IGtleXMgZmVhdHVyZSAvIGZlYXR1cmUgZW5hYmxlZAorCQkwOiByZXR1cm5zIC1FUEVSTQorCQkxOiBkb2VzIG5vdGhpbmcKIAogCWhvdGtleV9tYXNrOgogCQliaXQgbWFzayB0byBlbmFibGUgZHJpdmVyLWhhbmRsaW5nIChhbmQgZGVwZW5kaW5nIG9uCkBAIC02MTgsNiArNjIwLDcgQEAKICAgIGFuZCBtYXAgdGhlbSB0byBLRVlfQlJJR0hUTkVTU19VUCBhbmQgS0VZX0JSSUdIVE5FU1NfRE9XTi4gIFByb2Nlc3MKICAgIHRoZXNlIGtleXMgb24gdXNlcnNwYWNlIHNvbWVob3cgKGUuZy4gYnkgY2FsbGluZyB4YmFja2xpZ2h0KS4KIAorCiBCbHVldG9vdGgKIC0tLS0tLS0tLQogCkBAIC02MjgsNiArNjMxLDkgQEAKIFRoaXMgZmVhdHVyZSBzaG93cyB0aGUgcHJlc2VuY2UgYW5kIGN1cnJlbnQgc3RhdGUgb2YgYSBUaGlua1BhZAogQmx1ZXRvb3RoIGRldmljZSBpbiB0aGUgaW50ZXJuYWwgVGhpbmtQYWQgQ0RDIHNsb3QuCiAKK0lmIHRoZSBUaGlua1BhZCBzdXBwb3J0cyBpdCwgdGhlIEJsdWV0b290aCBzdGF0ZSBpcyBzdG9yZWQgaW4gTlZSQU0sCitzbyBpdCBpcyBrZXB0IGFjcm9zcyByZWJvb3RzIGFuZCBwb3dlci1vZmYuCisKIFByb2NmcyBub3RlczoKIAogSWYgQmx1ZXRvb3RoIGlzIGluc3RhbGxlZCwgdGhlIGZvbGxvd2luZyBjb21tYW5kcyBjYW4gYmUgdXNlZDoKQEAgLTY1Miw2ICs2NTgsNyBAQAogCXJma2lsbCBjb250cm9sbGVyIHN3aXRjaCAidHBhY3BpX2JsdWV0b290aF9zdyI6IHJlZmVyIHRvCiAJRG9jdW1lbnRhdGlvbi9yZmtpbGwudHh0IGZvciBkZXRhaWxzLgogCisKIFZpZGVvIG91dHB1dCBjb250cm9sIC0tIC9wcm9jL2FjcGkvaWJtL3ZpZGVvCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC02OTMsMTEgKzcwMCw4IEBACiBmZWF0dXJlcyBvZiB0aGlzIGRyaXZlciwgYXMgaXQgdXNlcyB0aGUgc2FtZSBBQ1BJIG1ldGhvZHMgYXMKIEZuLUY3LiBWaWRlbyBzd2l0Y2hpbmcgb24gdGhlIGNvbnNvbGUgc2hvdWxkIHN0aWxsIHdvcmsuCiAKLVVQREFURTogVGhlcmUncyBub3cgYSBwYXRjaCBmb3IgdGhlIFgub3JnIFJhZGVvbiBkcml2ZXIgd2hpY2gKLWFkZHJlc3NlcyB0aGlzIGlzc3VlLiBTb21lIHBlb3BsZSBhcmUgcmVwb3J0aW5nIHN1Y2Nlc3Mgd2l0aCB0aGUgcGF0Y2gKLXdoaWxlIG90aGVycyBhcmUgc3RpbGwgaGF2aW5nIHByb2JsZW1zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbjoKK1VQREFURTogcmVmZXIgdG8gaHR0cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwMAogCi1odHRwczovL2J1Z3MuZnJlZWRlc2t0b3Aub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDAwCiAKIFRoaW5rTGlnaHQgY29udHJvbAogLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03MjAsMTAgKzcyNCwxMSBAQAogZG9jdW1lbnRhdGlvbiwgaW4gRG9jdW1lbnRhdGlvbi9sZWRzLWNsYXNzLnR4dC4gIFRoZSBUaGlua0xpZ2h0IExFRCBuYW1lCiBpcyAidHBhY3BpOjp0aGlua2xpZ2h0Ii4KIAotRHVlIHRvIGxpbWl0YXRpb25zIGluIHRoZSBzeXNmcyBMRUQgY2xhc3MsIGlmIHRoZSBzdGF0dXMgb2YgdGhlIHRoaW5rbGlnaHQKK0R1ZSB0byBsaW1pdGF0aW9ucyBpbiB0aGUgc3lzZnMgTEVEIGNsYXNzLCBpZiB0aGUgc3RhdHVzIG9mIHRoZSBUaGlua0xpZ2h0CiBjYW5ub3QgYmUgcmVhZCBvciBpZiBpdCBpcyB1bmtub3duLCB0aGlua3BhZC1hY3BpIHdpbGwgcmVwb3J0IGl0IGFzICJvZmYiLgogSXQgaXMgaW1wb3NzaWJsZSB0byBrbm93IGlmIHRoZSBzdGF0dXMgcmV0dXJuZWQgdGhyb3VnaCBzeXNmcyBpcyB2YWxpZC4KIAorCiBEb2NraW5nIC8gdW5kb2NraW5nIC0tIC9wcm9jL2FjcGkvaWJtL2RvY2sKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC03ODQsNiArNzg5LDcgQEAKIFVsdHJhQmFzZSBkb2NrcyBhbmQgImR1bWIiIHBvcnQgcmVwbGljYXRvcnMgbGlrZSB0aGUgTWluaSBEb2NrICh0aGUKIGxhdHRlciBkb24ndCBuZWVkIGFueSBBQ1BJIHN1cHBvcnQsIGFjdHVhbGx5KS4KIAorCiBVbHRyYUJheSBlamVjdCAtLSAvcHJvYy9hY3BpL2libS9iYXkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC04NDcsOCArODUzLDkgQEAKIE5vdGU6IHRoZSBVbHRyYUJheSBlamVjdCBzdXBwb3J0IG9uIHRoZSA2MDBlL3gsIEEyMnAgYW5kIEEzeCBpcwogRVhQRVJJTUVOVEFMIGFuZCBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIFVTRSBXSVRIIENBVVRJT04hCiAKLUNNT1MgY29udHJvbAotLS0tLS0tLS0tLS0tCisKK0NNT1MvVUNNUyBjb250cm9sCistLS0tLS0tLS0tLS0tLS0tLQogCiBwcm9jZnM6IC9wcm9jL2FjcGkvaWJtL2Ntb3MKIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGU6IGNtb3NfY29tbWFuZApAQCAtODgyLDYgKzg4OSw3IEBACiBpbiBuZXdlciBUaGlua1BhZHMgaXQgaXMganVzdCBhIGNvbXBhdGliaWxpdHkgbGF5ZXIuICBEbyBub3QgdXNlIGl0LCBpdCBpcwogZXhwb3J0ZWQganVzdCBhcyBhIGRlYnVnIHRvb2wuCiAKKwogTEVEIGNvbnRyb2wKIC0tLS0tLS0tLS0tCiAKQEAgLTg5Myw2ICs5MDEsMTcgQEAKIExFRCBpbmRpY2F0b3JzIGFzIHdlbGwuICBOZXdlciBUaGlua1BhZHMgY2Fubm90IHF1ZXJ5IHRoZSByZWFsIHN0YXR1cwogb2YgdGhlIExFRCBpbmRpY2F0b3JzLgogCitCZWNhdXNlIG1pc3VzZSBvZiB0aGUgTEVEcyBjb3VsZCBpbmR1Y2UgYW4gdW5hd2FyZSB1c2VyIHRvIHBlcmZvcm0KK2Rhbmdlcm91cyBhY3Rpb25zIChsaWtlIHVuZG9ja2luZyBvciBlamVjdGluZyBhIGJheSBkZXZpY2Ugd2hpbGUgdGhlCitidXNlcyBhcmUgc3RpbGwgYWN0aXZlKSwgb3IgbWFzayBhbiBpbXBvcnRhbnQgYWxhcm0gKHN1Y2ggYXMgYSBuZWFybHkKK2VtcHR5IGJhdHRlcnksIG9yIGEgYnJva2VuIGJhdHRlcnkpLCBhY2Nlc3MgdG8gbW9zdCBMRURzIGlzCityZXN0cmljdGVkLgorCitVbnJlc3RyaWN0ZWQgYWNjZXNzIHRvIGFsbCBMRURzIHJlcXVpcmVzIHRoYXQgdGhpbmtwYWQtYWNwaSBiZQorY29tcGlsZWQgd2l0aCB0aGUgQ09ORklHX1RISU5LUEFEX0FDUElfVU5TQUZFX0xFRFMgb3B0aW9uIGVuYWJsZWQuCitEaXN0cmlidXRpb25zIG11c3QgbmV2ZXIgZW5hYmxlIHRoaXMgb3B0aW9uLiAgSW5kaXZpZHVhbCB1c2VycyB0aGF0CithcmUgYXdhcmUgb2YgdGhlIGNvbnNlcXVlbmNlcyBhcmUgd2VsY29tZSB0byBlbmFibGluZyBpdC4KKwogcHJvY2ZzIG5vdGVzOgogCiBUaGUgYXZhaWxhYmxlIGNvbW1hbmRzIGFyZToKQEAgLTkzOSw2ICs5NTgsNyBAQAogInRpbWVyIiB0cmlnZ2VyLCBhbmQgbGVhdmUgdGhlIGRlbGF5X29uIGFuZCBkZWxheV9vZmYgcGFyYW1ldGVycyBzZXQgdG8KIHplcm8gKHRvIHJlcXVlc3QgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIGF1dG9kZXRlY3Rpb24pLgogCisKIEFDUEkgc291bmRzIC0tIC9wcm9jL2FjcGkvaWJtL2JlZXAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtOTY4LDYgKzk4OCw3IEBACiAJMTYgLSBvbmUgbWVkaXVtLXBpdGNoZWQgYmVlcCByZXBlYXRpbmcgY29uc3RhbnRseSwgc3RvcCB3aXRoIDE3CiAJMTcgLSBzdG9wIDE2CiAKKwogVGVtcGVyYXR1cmUgc2Vuc29ycwogLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTE1LDYgKzExMzYsNyBAQAogd2l0aCB0aGlzLCBkbyBzZW5kIG1lIHlvdXIgcmVzdWx0cyAoaW5jbHVkaW5nIHNvbWUgY29tcGxldGUgZHVtcHMgd2l0aAogYSBkZXNjcmlwdGlvbiBvZiB0aGUgY29uZGl0aW9ucyB3aGVuIHRoZXkgd2VyZSB0YWtlbi4pCiAKKwogTENEIGJyaWdodG5lc3MgY29udHJvbAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTI0LDEwICsxMTQ2LDkgQEAKIFRoaXMgZmVhdHVyZSBhbGxvd3Mgc29mdHdhcmUgY29udHJvbCBvZiB0aGUgTENEIGJyaWdodG5lc3Mgb24gVGhpbmtQYWQKIG1vZGVscyB3aGljaCBkb24ndCBoYXZlIGEgaGFyZHdhcmUgYnJpZ2h0bmVzcyBzbGlkZXIuCiAKLUl0IGhhcyBzb21lIGxpbWl0YXRpb25zOiB0aGUgTENEIGJhY2tsaWdodCBjYW5ub3QgYmUgYWN0dWFsbHkgdHVybmVkIG9uIG9yCi1vZmYgYnkgdGhpcyBpbnRlcmZhY2UsIGFuZCBpbiBtYW55IFRoaW5rUGFkIG1vZGVscywgdGhlICJkaW0gd2hpbGUgb24KLWJhdHRlcnkiIGZ1bmN0aW9uYWxpdHkgd2lsbCBiZSBlbmFibGVkIGJ5IHRoZSBCSU9TIHdoZW4gdGhpcyBpbnRlcmZhY2UgaXMKLXVzZWQsIGFuZCBjYW5ub3QgYmUgY29udHJvbGxlZC4KK0l0IGhhcyBzb21lIGxpbWl0YXRpb25zOiB0aGUgTENEIGJhY2tsaWdodCBjYW5ub3QgYmUgYWN0dWFsbHkgdHVybmVkCitvbiBvciBvZmYgYnkgdGhpcyBpbnRlcmZhY2UsIGl0IGp1c3QgY29udHJvbHMgdGhlIGJhY2tsaWdodCBicmlnaHRuZXNzCitsZXZlbC4KIAogT24gSUJNIChhbmQgc29tZSBvZiB0aGUgZWFybGllciBMZW5vdm8pIFRoaW5rUGFkcywgdGhlIGJhY2tsaWdodCBjb250cm9sCiBoYXMgZWlnaHQgYnJpZ2h0bmVzcyBsZXZlbHMsIHJhbmdpbmcgZnJvbSAwIHRvIDcuICBTb21lIG9mIHRoZSBsZXZlbHMKQEAgLTExMzYsMTAgKzExNTcsMTUgQEAKIGZyb20gMCB0byAxNS4KIAogVGhlcmUgYXJlIHR3byBpbnRlcmZhY2VzIHRvIHRoZSBmaXJtd2FyZSBmb3IgZGlyZWN0IGJyaWdodG5lc3MgY29udHJvbCwKLUVDIGFuZCBDTU9TLiAgVG8gc2VsZWN0IHdoaWNoIG9uZSBzaG91bGQgYmUgdXNlZCwgdXNlIHRoZQorRUMgYW5kIFVDTVMgKG9yIENNT1MpLiAgVG8gc2VsZWN0IHdoaWNoIG9uZSBzaG91bGQgYmUgdXNlZCwgdXNlIHRoZQogYnJpZ2h0bmVzc19tb2RlIG1vZHVsZSBwYXJhbWV0ZXI6IGJyaWdodG5lc3NfbW9kZT0xIHNlbGVjdHMgRUMgbW9kZSwKLWJyaWdodG5lc3NfbW9kZT0yIHNlbGVjdHMgQ01PUyBtb2RlLCBicmlnaHRuZXNzX21vZGU9MyBzZWxlY3RzIGJvdGggRUMKLWFuZCBDTU9TLiAgVGhlIGRyaXZlciB0cmllcyB0byBhdXRvLWRldGVjdCB3aGljaCBpbnRlcmZhY2UgdG8gdXNlLgorYnJpZ2h0bmVzc19tb2RlPTIgc2VsZWN0cyBVQ01TIG1vZGUsIGJyaWdodG5lc3NfbW9kZT0zIHNlbGVjdHMgRUMKK21vZGUgd2l0aCBOVlJBTSBiYWNraW5nIChzbyB0aGF0IGJyaWdodG5lc3MgY2hhbmdlcyBhcmUgcmVtZW1iZXJlZAorYWNyb3NzIHNodXRkb3duL3JlYm9vdCkuCisKK1RoZSBkcml2ZXIgdHJpZXMgdG8gc2VsZWN0IHdoaWNoIGludGVyZmFjZSB0byB1c2UgZnJvbSBhIHRhYmxlIG9mCitkZWZhdWx0cyBmb3IgZWFjaCBUaGlua1BhZCBtb2RlbC4gIElmIGl0IG1ha2VzIGEgd3JvbmcgY2hvaWNlLCBwbGVhc2UKK3JlcG9ydCB0aGlzIGFzIGEgYnVnLCBzbyB0aGF0IHdlIGNhbiBmaXggaXQuCiAKIFdoZW4gZGlzcGxheSBiYWNrbGlnaHQgYnJpZ2h0bmVzcyBjb250cm9scyBhcmUgYXZhaWxhYmxlIHRocm91Z2ggdGhlCiBzdGFuZGFyZCBBQ1BJIGludGVyZmFjZSwgaXQgaXMgYmVzdCB0byB1c2UgaXQgaW5zdGVhZCBvZiB0aGlzIGRpcmVjdApAQCAtMTIwMSw2ICsxMjI3LDcgQEAKICAgICBhbmQgbWF5YmUgcmVkdWNlIHRoZSBsaWZlIG9mIHRoZSBiYWNrbGlnaHQgbGFtcHMgYnkgbmVlZGxlc3NseSBraWNraW5nCiAgICAgaXRzIGxldmVsIHVwIGFuZCBkb3duIGF0IGV2ZXJ5IGNoYW5nZS4KIAorCiBWb2x1bWUgY29udHJvbCAtLSAvcHJvYy9hY3BpL2libS92b2x1bWUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMjE3LDYgKzEyNDQsMTEgQEAKIHVwIG9yIGRvd24gY29tbWFuZCAodGhlIGxldmVsIGNvbW1hbmQgd2lsbCBub3QgdW5tdXRlIHRoZSB2b2x1bWUpLgogVGhlIGN1cnJlbnQgdm9sdW1lIGxldmVsIGFuZCBtdXRlIHN0YXRlIGlzIHNob3duIGluIHRoZSBmaWxlLgogCitUaGUgQUxTQSBtaXhlciBpbnRlcmZhY2UgdG8gdGhpcyBmZWF0dXJlIGlzIHN0aWxsIG1pc3NpbmcsIGJ1dCBwYXRjaGVzCit0byBhZGQgaXQgZXhpc3QuICBUaGF0IHByb2JsZW0gc2hvdWxkIGJlIGFkZHJlc3NlZCBpbiB0aGUgbm90IHNvCitkaXN0YW50IGZ1dHVyZS4KKworCiBGYW4gY29udHJvbCBhbmQgbW9uaXRvcmluZzogZmFuIHNwZWVkLCBmYW4gZW5hYmxlL2Rpc2FibGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMzgzLDggKzE0MTUsMTEgQEAKIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGU6IHd3YW5fZW5hYmxlIChkZXByZWNhdGVkKQogc3lzZnMgcmZraWxsIGNsYXNzOiBzd2l0Y2ggInRwYWNwaV93d2FuX3N3IgogCi1UaGlzIGZlYXR1cmUgc2hvd3MgdGhlIHByZXNlbmNlIGFuZCBjdXJyZW50IHN0YXRlIG9mIGEgVy1XQU4gKFNpZXJyYQotV2lyZWxlc3MgRVYtRE8pIGRldmljZS4KK1RoaXMgZmVhdHVyZSBzaG93cyB0aGUgcHJlc2VuY2UgYW5kIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1aWx0LWluCitXaXJlbGVzcyBXQU4gZGV2aWNlLgorCitJZiB0aGUgVGhpbmtQYWQgc3VwcG9ydHMgaXQsIHRoZSBXV0FOIHN0YXRlIGlzIHN0b3JlZCBpbiBOVlJBTSwKK3NvIGl0IGlzIGtlcHQgYWNyb3NzIHJlYm9vdHMgYW5kIHBvd2VyLW9mZi4KIAogSXQgd2FzIHRlc3RlZCBvbiBhIExlbm92byBUaGlua1BhZCBYNjAuIEl0IHNob3VsZCBwcm9iYWJseSB3b3JrIG9uIG90aGVyCiBUaGlua1BhZCBtb2RlbHMgd2hpY2ggY29tZSB3aXRoIHRoaXMgbW9kdWxlIGluc3RhbGxlZC4KQEAgLTE0MTMsNiArMTQ0OCw3IEBACiAJcmZraWxsIGNvbnRyb2xsZXIgc3dpdGNoICJ0cGFjcGlfd3dhbl9zdyI6IHJlZmVyIHRvCiAJRG9jdW1lbnRhdGlvbi9yZmtpbGwudHh0IGZvciBkZXRhaWxzLgogCisKIEVYUEVSSU1FTlRBTDogVVdCCiAtLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xNDMxLDYgKzE0NjcsNyBAQAogCXJma2lsbCBjb250cm9sbGVyIHN3aXRjaCAidHBhY3BpX3V3Yl9zdyI6IHJlZmVyIHRvCiAJRG9jdW1lbnRhdGlvbi9yZmtpbGwudHh0IGZvciBkZXRhaWxzLgogCisKIE11bHRpcGxlIENvbW1hbmRzLCBNb2R1bGUgUGFyYW1ldGVycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE0NDUsNiArMTQ4Miw3IEBACiAKIAltb2Rwcm9iZSB0aGlua3BhZF9hY3BpIGhvdGtleT1lbmFibGUsMHhmZmZmIHZpZGVvPWF1dG9fZGlzYWJsZQogCisKIEVuYWJsaW5nIGRlYnVnZ2luZyBvdXRwdXQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTQ1Nyw4ICsxNDk1LDE1IEBACiB0byBlbmFibGUgbW9yZSB0aGFuIG9uZSBvdXRwdXQgY2xhc3MsIGp1c3QgYWRkIHRoZWlyIHZhbHVlcy4KIAogCURlYnVnIGJpdG1hc2sJCURlc2NyaXB0aW9uCisJMHg4MDAwCQkJRGlzY2xvc2UgUElEIG9mIHVzZXJzcGFjZSBwcm9ncmFtcworCQkJCWFjY2Vzc2luZyBzb21lIGZ1bmN0aW9ucyBvZiB0aGUgZHJpdmVyCiAJMHgwMDAxCQkJSW5pdGlhbGl6YXRpb24gYW5kIHByb2JpbmcKIAkweDAwMDIJCQlSZW1vdmFsCisJMHgwMDA0CQkJUkYgVHJhbnNtaXR0ZXIgY29udHJvbCAoUkZLSUxMKQorCQkJCShibHVldG9vdGgsIFdXQU4sIFVXQi4uLikKKwkweDAwMDgJCQlIS0VZIGV2ZW50IGludGVyZmFjZSwgaG90a2V5cworCTB4MDAxMAkJCUZhbiBjb250cm9sCisJMHgwMDIwCQkJQmFja2xpZ2h0IGJyaWdodG5lc3MKIAogVGhlcmUgaXMgYWxzbyBhIGtlcm5lbCBidWlsZCBvcHRpb24gdG8gZW5hYmxlIG1vcmUgZGVidWdnaW5nCiBpbmZvcm1hdGlvbiwgd2hpY2ggbWF5IGJlIG5lY2Vzc2FyeSB0byBkZWJ1ZyBkcml2ZXIgcHJvYmxlbXMuCkBAIC0xNDY3LDYgKzE1MTIsNyBAQAogYXQgcnVudGltZSB0aHJvdWdoIHN5c2ZzLCB1c2luZyB0aGUgZHJpdmVyIGF0dHJpYnV0ZSBkZWJ1Z19sZXZlbC4gIFRoZQogYXR0cmlidXRlIHRha2VzIHRoZSBzYW1lIGJpdG1hc2sgYXMgdGhlIGRlYnVnIG1vZHVsZSBwYXJhbWV0ZXIgYWJvdmUuCiAKKwogRm9yY2UgbG9hZGluZyBvZiBtb2R1bGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE1MDUsMyArMTU1MSw3IEBACiAKIDB4MDIwMjAwOglBZGQgcG9sbCgpL3NlbGVjdCgpIHN1cHBvcnQgdG8gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgogCQlob3RrZXlfcmFkaW9fc3csIHdha2V1cF9ob3R1bnBsdWdfY29tcGxldGUsIHdha2V1cF9yZWFzb24KKworMHgwMjAzMDA6CWhvdGtleSBlbmFibGUvZGlzYWJsZSBzdXBwb3J0IHJlbW92ZWQsIGF0dHJpYnV0ZXMKKwkJaG90a2V5X2Jpb3NfZW5hYmxlZCBhbmQgaG90a2V5X2VuYWJsZSBkZXByZWNhdGVkIGFuZAorCQltYXJrZWQgZm9yIHJlbW92YWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21kLnR4dCBiL0RvY3VtZW50YXRpb24vbWQudHh0CmluZGV4IDFkYTlkMWIuLjRlZGQzOWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbWQudHh0CkBAIC0xNjQsMTUgKzE2NCwxOSBAQAogICByYWlkX2Rpc2tzCiAgICAgIGEgdGV4dCBmaWxlIHdpdGggYSBzaW1wbGUgbnVtYmVyIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBkZXZpY2VzCiAgICAgIGluIGEgZnVsbHkgZnVuY3Rpb25hbCBhcnJheS4gIElmIHRoaXMgaXMgbm90IHlldCBrbm93biwgdGhlIGZpbGUKLSAgICAgd2lsbCBiZSBlbXB0eS4gIElmIGFuIGFycmF5IGlzIGJlaW5nIHJlc2l6ZWQgKG5vdCBjdXJyZW50bHkKLSAgICAgcG9zc2libGUpIHRoaXMgd2lsbCBjb250YWluIHRoZSBsYXJnZXIgb2YgdGhlIG9sZCBhbmQgbmV3IHNpemVzLgotICAgICBTb21lIHJhaWQgbGV2ZWwgKFJBSUQxKSBhbGxvdyB0aGlzIHZhbHVlIHRvIGJlIHNldCB3aGlsZSB0aGUKLSAgICAgYXJyYXkgaXMgYWN0aXZlLiAgVGhpcyB3aWxsIHJlY29uZmlndXJlIHRoZSBhcnJheS4gICBPdGhlcndpc2UKLSAgICAgaXQgY2FuIG9ubHkgYmUgc2V0IHdoaWxlIGFzc2VtYmxpbmcgYW4gYXJyYXkuCisgICAgIHdpbGwgYmUgZW1wdHkuICBJZiBhbiBhcnJheSBpcyBiZWluZyByZXNpemVkIHRoaXMgd2lsbCBjb250YWluCisgICAgIHRoZSBuZXcgbnVtYmVyIG9mIGRldmljZXMuCisgICAgIFNvbWUgcmFpZCBsZXZlbHMgYWxsb3cgdGhpcyB2YWx1ZSB0byBiZSBzZXQgd2hpbGUgdGhlIGFycmF5IGlzCisgICAgIGFjdGl2ZS4gIFRoaXMgd2lsbCByZWNvbmZpZ3VyZSB0aGUgYXJyYXkuICAgT3RoZXJ3aXNlIGl0IGNhbiBvbmx5CisgICAgIGJlIHNldCB3aGlsZSBhc3NlbWJsaW5nIGFuIGFycmF5LgorICAgICBBIGNoYW5nZSB0byB0aGlzIGF0dHJpYnV0ZSB3aWxsIG5vdCBiZSBwZXJtaXR0ZWQgaWYgaXQgd291bGQKKyAgICAgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBhcnJheS4gIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGRyaXZlcworICAgICBpbiBhbiBlLmcuIHJhaWQ1LCB0aGUgYXJyYXkgc2l6ZSBtdXN0IGZpcnN0IGJlIHJlZHVjZWQgYnkKKyAgICAgc2V0dGluZyB0aGUgJ2FycmF5X3NpemUnIGF0dHJpYnV0ZS4KIAogICBjaHVua19zaXplCi0gICAgIFRoaXMgaXMgdGhlIHNpemUgaWYgYnl0ZXMgZm9yICdjaHVua3MnIGFuZCBpcyBvbmx5IHJlbGV2YW50IHRvCi0gICAgIHJhaWQgbGV2ZWxzIHRoYXQgaW52b2x2ZSBzdHJpcGluZyAoMSw0LDUsNiwxMCkuIFRoZSBhZGRyZXNzIHNwYWNlCisgICAgIFRoaXMgaXMgdGhlIHNpemUgaW4gYnl0ZXMgZm9yICdjaHVua3MnIGFuZCBpcyBvbmx5IHJlbGV2YW50IHRvCisgICAgIHJhaWQgbGV2ZWxzIHRoYXQgaW52b2x2ZSBzdHJpcGluZyAoMCw0LDUsNiwxMCkuIFRoZSBhZGRyZXNzIHNwYWNlCiAgICAgIG9mIHRoZSBhcnJheSBpcyBjb25jZXB0dWFsbHkgZGl2aWRlZCBpbnRvIGNodW5rcyBhbmQgY29uc2VjdXRpdmUKICAgICAgY2h1bmtzIGFyZSBzdHJpcGVkIG9udG8gbmVpZ2hib3VyaW5nIGRldmljZXMuCiAgICAgIFRoZSBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCBQQUdFX1NJWkUgKDRrKSBhbmQgc2hvdWxkIGJlIGEgcG93ZXIKQEAgLTE4Myw2ICsxODcsMjAgQEAKICAgICAgc2ltcGx5IGEgbnVtYmVyIHRoYXQgaXMgaW50ZXJwcmV0dGVkIGRpZmZlcmVudGx5IGJ5IGRpZmZlcmVudAogICAgICBsZXZlbHMuICBJdCBjYW4gYmUgd3JpdHRlbiB3aGlsZSBhc3NlbWJsaW5nIGFuIGFycmF5LgogCisgIGFycmF5X3NpemUKKyAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBhcnRpZmljaWFsbHkgY29uc3RyYWluIHRoZSBhdmFpbGFibGUgc3BhY2UgaW4KKyAgICAgdGhlIGFycmF5IHRvIGJlIGxlc3MgdGhhbiBpcyBhY3R1YWxseSBhdmFpbGFibGUgb24gdGhlIGNvbWJpbmVkCisgICAgIGRldmljZXMuICBXcml0aW5nIGEgbnVtYmVyIChpbiBLaWxvYnl0ZXMpIHdoaWNoIGlzIGxlc3MgdGhhbgorICAgICB0aGUgYXZhaWxhYmxlIHNpemUgd2lsbCBzZXQgdGhlIHNpemUuICBBbnkgcmVjb25maWd1cmF0aW9uIG9mIHRoZQorICAgICBhcnJheSAoZS5nLiBhZGRpbmcgZGV2aWNlcykgd2lsbCBub3QgY2F1c2UgdGhlIHNpemUgdG8gY2hhbmdlLgorICAgICBXcml0aW5nIHRoZSB3b3JkICdkZWZhdWx0JyB3aWxsIGNhdXNlIHRoZSBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUKKyAgICAgYXJyYXkgdG8gYmUgd2hhdGV2ZXIgc2l6ZSBpcyBhY3R1YWxseSBhdmFpbGFibGUgYmFzZWQgb24KKyAgICAgJ2xldmVsJywgJ2NodW5rX3NpemUnIGFuZCAnY29tcG9uZW50X3NpemUnLgorCisgICAgIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBhcnJheSBiZWZvcmUgcmVkdWNpbmcKKyAgICAgdGhlIG51bWJlciBvZiBkZXZpY2VzIGluIGEgcmFpZDQvNS82LCBvciB0byBzdXBwb3J0IGV4dGVybmFsCisgICAgIG1ldGFkYXRhIGZvcm1hdHMgd2hpY2ggbWFuZGF0ZSBzdWNoIGNsaXBwaW5nLgorCiAgIHJlc2hhcGVfcG9zaXRpb24KICAgICAgVGhpcyBpcyBlaXRoZXIgIm5vbmUiIG9yIGEgc2VjdG9yIG51bWJlciB3aXRoaW4gdGhlIGRldmljZXMgb2YKICAgICAgdGhlIGFycmF5IHdoZXJlICJyZXNoYXBlIiBpcyB1cCB0by4gIElmIHRoaXMgaXMgc2V0LCB0aGUgdGhyZWUKQEAgLTIwNyw2ICsyMjUsMTEgQEAKICAgICAgYWJvdXQgdGhlIGFycmF5LiAgSXQgY2FuIGJlIDAuOTAgKHRyYWRpdGlvbmFsIGZvcm1hdCksIDEuMCwgMS4xLAogICAgICAxLjIgKG5ld2VyIGZvcm1hdCBpbiB2YXJ5aW5nIGxvY2F0aW9ucykgb3IgIm5vbmUiIGluZGljYXRpbmcgdGhhdAogICAgICB0aGUga2VybmVsIGlzbid0IG1hbmFnaW5nIG1ldGFkYXRhIGF0IGFsbC4KKyAgICAgQWx0ZXJuYXRlbHkgaXQgY2FuIGJlICJleHRlcm5hbDoiIGZvbGxvd2VkIGJ5IGEgc3RyaW5nIHdoaWNoCisgICAgIGlzIHNldCBieSB1c2VyLXNwYWNlLiAgVGhpcyBpbmRpY2F0ZXMgdGhhdCBtZXRhZGF0YSBpcyBtYW5hZ2VkCisgICAgIGJ5IGEgdXNlci1zcGFjZSBwcm9ncmFtLiAgQW55IGRldmljZSBmYWlsdXJlIG9yIG90aGVyIGV2ZW50IHRoYXQKKyAgICAgcmVxdWlyZXMgYSBtZXRhZGF0YSB1cGRhdGUgd2lsbCBjYXVzZSBhcnJheSBhY3Rpdml0eSB0byBiZQorICAgICBzdXNwZW5kZWQgdW50aWwgdGhlIGV2ZW50IGlzIGFja25vd2xlZGdlZC4KIAogICByZXN5bmNfc3RhcnQKICAgICAgVGhlIHBvaW50IGF0IHdoaWNoIHJlc3luYyBzaG91bGQgc3RhcnQuICBJZiBubyByZXN5bmMgaXMgbmVlZGVkLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvaXNsMjkwMDMgYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9pc2wyOTAwMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGZmNWYzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvaXNsMjkwMDMKQEAgLTAsMCArMSw2MiBAQAorS2VybmVsIGRyaXZlciBpc2wyOTAwMworPT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyogSW50ZXJzaWwgSVNMMjkwMDMKK1ByZWZpeDogJ2lzbDI5MDAzJworQWRkcmVzc2VzIHNjYW5uZWQ6IG5vbmUKK0RhdGFzaGVldDoKK2h0dHA6Ly93d3cuaW50ZXJzaWwuY29tL2RhdGEvZm4vZm43NDY0LnBkZgorCitBdXRob3I6IERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCitUaGUgSVNMMjkwMDMgaXMgYW4gaW50ZWdyYXRlZCBsaWdodCBzZW5zb3Igd2l0aCBhIDE2LWJpdCBpbnRlZ3JhdGluZyB0eXBlCitBREMsIEkyQyB1c2VyIHByb2dyYW1tYWJsZSBsdXggcmFuZ2Ugc2VsZWN0IGZvciBvcHRpbWl6ZWQgY291bnRzL2x1eCwgYW5kCitJMkMgbXVsdGktZnVuY3Rpb24gY29udHJvbCBhbmQgbW9uaXRvcmluZyBjYXBhYmlsaXRpZXMuIFRoZSBpbnRlcm5hbCBBREMKK3Byb3ZpZGVzIDE2LWJpdCByZXNvbHV0aW9uIHdoaWxlIHJlamVjdGluZyA1MEh6IGFuZCA2MEh6IGZsaWNrZXIgY2F1c2VkIGJ5CithcnRpZmljaWFsIGxpZ2h0IHNvdXJjZXMuCisKK1RoZSBkcml2ZXIgYWxsb3dzIHRvIHNldCB0aGUgbHV4IHJhbmdlLCB0aGUgYml0IHJlc29sdXRpb24sIHRoZSBvcGVyYXRpb25hbAorbW9kZSAoc2VlIGJlbG93KSBhbmQgdGhlIHBvd2VyIHN0YXRlIG9mIGRldmljZSBhbmQgY2FuIHJlYWQgdGhlIGN1cnJlbnQgbHV4Cit2YWx1ZSwgb2YgY291cnNlLgorCisKK0RldGVjdGlvbgorLS0tLS0tLS0tCisKK1RoZSBJU0wyOTAwMyBkb2VzIG5vdCBoYXZlIGFuIElEIHJlZ2lzdGVyIHdoaWNoIGNvdWxkIGJlIHVzZWQgdG8gaWRlbnRpZnkKK2l0LCBzbyB0aGUgZGV0ZWN0aW9uIHJvdXRpbmUgd2lsbCBqdXN0IHRyeSB0byByZWFkIGZyb20gdGhlIGNvbmZpZ3VyZWQgSTJDCithZGRlc3MgYW5kIGNvbnNpZGVyIHRoZSBkZXZpY2UgdG8gYmUgcHJlc2VudCBhcyBzb29uIGFzIGl0IEFDS3MgdGhlCit0cmFuc2Zlci4KKworCitTeXNmcyBlbnRyaWVzCistLS0tLS0tLS0tLS0tCisKK3JhbmdlOgorCTA6IDAgbHV4IHRvIDEwMDAgbHV4IChkZWZhdWx0KQorCTE6IDAgbHV4IHRvIDQwMDAgbHV4CisJMjogMCBsdXggdG8gMTYsMDAwIGx1eAorCTM6IDAgbHV4IHRvIDY0LDAwMCBsdXgKKworcmVzb2x1dGlvbjoKKwkwOiAyXjE2IGN5Y2xlcyAoZGVmYXVsdCkKKwkxOiAyXjEyIGN5Y2xlcworCTI6IDJeOCBjeWNsZXMKKwkzOiAyXjQgY3ljbGVzCisKK21vZGU6CisJMDogZGlvZGUxJ3MgY3VycmVudCAodW5zaWduZWQgMTZiaXQpIChkZWZhdWx0KQorCTE6IGRpb2RlMSdzIGN1cnJlbnQgKHVuc2lnbmVkIDE2Yml0KQorCTI6IGRpZmZlcmVuY2UgYmV0d2VlbiBkaW9kZXMgKGwxIC0gbDIsIHNpZ25lZCAxNWJpdCkKKworcG93ZXJfc3RhdGU6CisJMDogZGV2aWNlIGlzIGRpc2FibGVkIChkZWZhdWx0KQorCTE6IGRldmljZSBpcyBlbmFibGVkCisKK2x1eCAocmVhZCBvbmx5KToKKwlyZXR1cm5zIHRoZSB2YWx1ZSBmcm9tIHRoZSBsYXN0IHNlbnNvciByZWFkaW5nCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92eGdlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy92eGdlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmUyOTk3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Z4Z2UudHh0CkBAIC0wLDAgKzEsMTAwIEBACitOZXRlcmlvbidzIChGb3JtZXJseSBTMmlvKSBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBTZXJ2ZXIgQWRhcHRlciBMaW51eCBkcml2ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb250ZW50cworLS0tLS0tLS0KKworMSkgSW50cm9kdWN0aW9uCisyKSBGZWF0dXJlcyBzdXBwb3J0ZWQKKzMpIENvbmZpZ3VyYWJsZSBkcml2ZXIgcGFyYW1ldGVycworNCkgVHJvdWJsZXNob290aW5nCisKKzEpIEludHJvZHVjdGlvbjoKKy0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgTGludXggZHJpdmVyIHN1cHBvcnRzIGFsbCBOZXRlcmlvbidzIFgzMTAwIHNlcmllcyAxMCBHYkUgUENJZSBJL08KK1ZpcnR1YWxpemVkIFNlcnZlciBhZGFwdGVycy4KK1RoZSBYMzEwMCBzZXJpZXMgc3VwcG9ydHMgZm91ciBtb2RlcyBvZiBvcGVyYXRpb24sIGNvbmZpZ3VyYWJsZSB2aWEKK2Zpcm13YXJlIC0KKwlTaW5nbGUgZnVuY3Rpb24gbW9kZQorCU11bHRpIGZ1bmN0aW9uIG1vZGUKKwlTUklPViBtb2RlCisJTVJJT1YgbW9kZQorVGhlIGZ1bmN0aW9ucyBzaGFyZSBhIDEwR2JFIGxpbmsgYW5kIHRoZSBwY2ktZSBidXMsIGJ1dCBoYXJkbHkgYW55dGhpbmcgZWxzZQoraW5zaWRlIHRoZSBBU0lDLiBGZWF0dXJlcyBsaWtlIGluZGVwZW5kZW50IGh3IHJlc2V0LCBzdGF0aXN0aWNzLCBiYW5kd2lkdGgvCitwcmlvcml0eSBhbGxvY2F0aW9uIGFuZCBndWFyYW50ZWVzLCBHUk8sIFRTTywgaW50ZXJydXB0IG1vZGVyYXRpb24gZXRjIGFyZQorc3VwcG9ydGVkIGluZGVwZW5kZW50bHkgb24gZWFjaCBmdW5jdGlvbi4KKworKFNlZSBiZWxvdyBmb3IgYSBjb21wbGV0ZSBsaXN0IG9mIGZlYXR1cmVzIHN1cHBvcnRlZCBmb3IgYm90aCBJUHY0IGFuZCBJUHY2KQorCisyKSBGZWF0dXJlcyBzdXBwb3J0ZWQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2kpICAgU2luZ2xlIGZ1bmN0aW9uIG1vZGUgKHVwIHRvIDE3IHF1ZXVlcykKKworaWkpICBNdWx0aSBmdW5jdGlvbiBtb2RlICh1cCB0byAxNyBmdW5jdGlvbnMpCisKK2lpaSkgUENJLVNJRydzIEkvTyBWaXJ0dWFsaXphdGlvbgorICAgICAgIC0gU2luZ2xlIFJvb3QgbW9kZTogdjEuMCAodXAgdG8gMTcgZnVuY3Rpb25zKQorICAgICAgIC0gTXVsdGktUm9vdCBtb2RlOiB2MS4wICh1cCB0byAxNyBmdW5jdGlvbnMpCisKK2l2KSAgSnVtYm8gZnJhbWVzCisgICAgICAgWDMxMDAgU2VyaWVzIHN1cHBvcnRzIE1UVSB1cCB0byA5NjAwIGJ5dGVzLCBtb2RpZmlhYmxlIHVzaW5nCisgICAgICAgaWZjb25maWcgY29tbWFuZC4KKwordikgICBPZmZsb2FkcyBzdXBwb3J0ZWQ6IChFbmFibGVkIGJ5IGRlZmF1bHQpCisgICAgICAgQ2hlY2tzdW0gb2ZmbG9hZCAoVENQL1VEUC9JUCkgb24gdHJhbnNtaXQgYW5kIHJlY2VpdmUgcGF0aHMKKyAgICAgICBUQ1AgU2VnbWVudGF0aW9uIE9mZmxvYWQgKFRTTykgb24gdHJhbnNtaXQgcGF0aAorICAgICAgIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIG9uIHJlY2VpdmUgcGF0aAorCit2aSkgIE1TSS1YOiAoRW5hYmxlZCBieSBkZWZhdWx0KQorICAgICAgIFJlc3VsdGluZyBpbiBub3RpY2VhYmxlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50ICh1cCB0byA3JSBvbiBjZXJ0YWluCisgICAgICAgcGxhdGZvcm1zKS4KKwordmlpKSBOQVBJOiAoRW5hYmxlZCBieSBkZWZhdWx0KQorICAgICAgIEZvciBiZXR0ZXIgUnggaW50ZXJydXB0IG1vZGVyYXRpb24uCisKK3ZpaWkpUlRIIChSZWNlaXZlIFRyYWZmaWMgSGFzaCk6IChFbmFibGVkIGJ5IGRlZmF1bHQpCisgICAgICAgUmVjZWl2ZSBzaWRlIHN0ZWVyaW5nIGZvciBiZXR0ZXIgc2NhbGluZy4KKworaXgpICBTdGF0aXN0aWNzCisgICAgICAgQ29tcHJlaGVuc2l2ZSBNQUMtbGV2ZWwgYW5kIHNvZnR3YXJlIHN0YXRpc3RpY3MgZGlzcGxheWVkIHVzaW5nCisgICAgICAgImV0aHRvb2wgLVMiIG9wdGlvbi4KKworeCkgICBNdWx0aXBsZSBoYXJkd2FyZSBxdWV1ZXM6IChFbmFibGVkIGJ5IGRlZmF1bHQpCisgICAgICAgVXAgdG8gMTcgaGFyZHdhcmUgYmFzZWQgdHJhbnNtaXQgYW5kIHJlY2VpdmUgZGF0YSBjaGFubmVscywgd2l0aAorICAgICAgIG11bHRpcGxlIHN0ZWVyaW5nIG9wdGlvbnMgKHRyYW5zbWl0IG11bHRpcXVldWUgZW5hYmxlZCBieSBkZWZhdWx0KS4KKworMykgQ29uZmlndXJhYmxlIGRyaXZlciBwYXJhbWV0ZXJzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpKSAgbWF4X2NvbmZpZ19kZXYKKyAgICAgICBTcGVjaWZpZXMgbWF4aW11bSBkZXZpY2UgZnVuY3Rpb25zIHRvIGJlIGVuYWJsZWQuCisgICAgICAgVmFsaWQgcmFuZ2U6IDEtOAorCitpaSkgbWF4X2NvbmZpZ19wb3J0CisgICAgICAgU3BlY2lmaWVzIG51bWJlciBvZiBwb3J0cyB0byBiZSBlbmFibGVkLgorICAgICAgIFZhbGlkIHJhbmdlOiAxLDIKKyAgICAgICBEZWZhdWx0OiAxCisKK2lpaSltYXhfY29uZmlnX3ZwYXRoCisgICAgICAgU3BlY2lmaWVzIG1heGltdW0gVlBBVEgocykgY29uZmlndXJlZCBmb3IgZWFjaCBkZXZpY2UgZnVuY3Rpb24uCisgICAgICAgVmFsaWQgcmFuZ2U6IDEtMTcKKworaXYpIHZsYW5fdGFnX3N0cmlwCisgICAgICAgRW5hYmxlcy9kaXNhYmxlcyB2bGFuIHRhZyBzdHJpcHBpbmcgZnJvbSBhbGwgcmVjZWl2ZWQgdGFnZ2VkIGZyYW1lcyB0aGF0CisgICAgICAgYXJlIG5vdCByZXBsaWNhdGVkIGF0IHRoZSBpbnRlcm5hbCBMMiBzd2l0Y2guCisgICAgICAgVmFsaWQgcmFuZ2U6IDAsMSAoZGlzYWJsZWQsIGVuYWJsZWQgcmVzcGVjdGl2ZWx5KQorICAgICAgIERlZmF1bHQ6IDEKKwordikgIGFkZHJfbGVhcm5fZW4KKyAgICAgICBFbmFibGUgbGVhcm5pbmcgdGhlIG1hYyBhZGRyZXNzIG9mIHRoZSBndWVzdCBPUyBpbnRlcmZhY2UgaW4KKyAgICAgICB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4KKyAgICAgICBWYWxpZCByYW5nZTogMCwxIChkaXNhYmxlZCwgZW5hYmxlZCByZXNwZWN0aXZlbHkpCisgICAgICAgRGVmYXVsdDogMAorCis0KSBUcm91Ymxlc2hvb3Rpbmc6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHJlc29sdmUgYW4gaXNzdWUgd2l0aCB0aGUgc291cmNlIGNvZGUgb3IgWDMxMDAgc2VyaWVzIGFkYXB0ZXIsIHBsZWFzZSBjb2xsZWN0Cit0aGUgc3RhdGlzdGljcywgcmVnaXN0ZXIgZHVtcHMgdXNpbmcgZXRob29sLCByZWxldmFudCBsb2dzIGFuZCBlbWFpbCB0aGVtIHRvCitzdXBwb3J0QG5ldGVyaW9uLmNvbS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS9maXJtd2FyZS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvZmlybXdhcmUudHh0CmluZGV4IDZjMjM4ZjUuLjI0OWRiM2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS9maXJtd2FyZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL2Zpcm13YXJlLnR4dApAQCAtMSw2ICsxLDYgQEAKICogVXBsb2FkZWQgUUUgZmlybXdhcmUKIAotICAgICAgSWYgYSBuZXcgZmlyd21hcmUgaGFzIGJlZW4gdXBsb2FkZWQgdG8gdGhlIFFFICh1c3VhbGx5IGJ5IHRoZQorICAgICAgSWYgYSBuZXcgZmlybXdhcmUgaGFzIGJlZW4gdXBsb2FkZWQgdG8gdGhlIFFFICh1c3VhbGx5IGJ5IHRoZQogICAgICAgYm9vdCBsb2FkZXIpLCB0aGVuIGEgJ2Zpcm13YXJlJyBjaGlsZCBub2RlIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgUUUKICAgICAgIG5vZGUuICBUaGlzIG5vZGUgcHJvdmlkZXMgaW5mb3JtYXRpb24gb24gdGhlIHVwbG9hZGVkIGZpcm13YXJlIHRoYXQKICAgICAgIGRldmljZSBkcml2ZXJzIG1heSBuZWVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tbWMtc3BpLXNsb3QudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tbWMtc3BpLXNsb3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOWFjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL21tYy1zcGktc2xvdC50eHQKQEAgLTAsMCArMSwyMyBAQAorTU1DL1NEL1NESU8gc2xvdCBkaXJlY3RseSBjb25uZWN0ZWQgdG8gYSBTUEkgYnVzCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgIm1tYy1zcGktc2xvdCIuCistIHJlZyA6IHNob3VsZCBzcGVjaWZ5IFNQSSBhZGRyZXNzIChjaGlwLXNlbGVjdCBudW1iZXIpLgorLSBzcGktbWF4LWZyZXF1ZW5jeSA6IG1heGltdW0gZnJlcXVlbmN5IGZvciB0aGlzIGRldmljZSAoSHopLgorLSB2b2x0YWdlLXJhbmdlcyA6IHR3byBjZWxscyBhcmUgcmVxdWlyZWQsIGZpcnN0IGNlbGwgc3BlY2lmaWVzIG1pbmltdW0KKyAgc2xvdCB2b2x0YWdlIChtViksIHNlY29uZCBjZWxsIHNwZWNpZmllcyBtYXhpbXVtIHNsb3Qgdm9sdGFnZSAobVYpLgorICBTZXZlcmFsIHJhbmdlcyBjb3VsZCBiZSBzcGVjaWZpZWQuCistIGdwaW9zIDogKG9wdGlvbmFsKSBtYXkgc3BlY2lmeSBHUElPcyBpbiB0aGlzIG9yZGVyOiBDYXJkLURldGVjdCBHUElPLAorICBXcml0ZS1Qcm90ZWN0IEdQSU8uCisKK0V4YW1wbGU6CisKKwltbWMtc2xvdEAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMyM3JkYi1tbWMtc2xvdCIsCisJCQkgICAgICJtbWMtc3BpLXNsb3QiOworCQlyZWcgPSA8MD47CisJCWdwaW9zID0gPCZxZV9waW9fZCAxNCAxCisJCQkgJnFlX3Bpb19kIDE1IDA+OworCQl2b2x0YWdlLXJhbmdlcyA9IDwzMzAwIDMzMDA+OworCQlzcGktbWF4LWZyZXF1ZW5jeSA9IDw1MDAwMDAwMD47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXJ0LWdyb3VwLnR4dCBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXJ0LWdyb3VwLnR4dAppbmRleCAzZWYzMzlmLi41YmE0ZDNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1ydC1ncm91cC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtcnQtZ3JvdXAudHh0CkBAIC0xMjYsNyArMTI2LDcgQEAKIHRvIGNvbnRyb2wgdGhlIENQVSB0aW1lIHJlc2VydmVkIGZvciBlYWNoIGNvbnRyb2wgZ3JvdXAgaW5zdGVhZC4KIAogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gd29ya2luZyB3aXRoIGNvbnRyb2wgZ3JvdXBzLCB5b3Ugc2hvdWxkIHJlYWQKLURvY3VtZW50YXRpb24vY2dyb3Vwcy50eHQgYXMgd2VsbC4KK0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dCBhcyB3ZWxsLgogCiBHcm91cCBzZXR0aW5ncyBhcmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBmb2xsb3dpbmcgbGltaXRzIGluIG9yZGVyIHRvIGtlZXAgdGhlIGNvbmZpZ3VyYXRpb24KIHNjaGVkdWxhYmxlOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zbG93LXdvcmsudHh0IGIvRG9jdW1lbnRhdGlvbi9zbG93LXdvcmsudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYzUwZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Nsb3ctd29yay50eHQKQEAgLTAsMCArMSwxNzQgQEAKKwkJICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJICAgICBTTE9XIFdPUksgSVRFTSBFWEVDVVRJT04gVEhSRUFEIFBPT0wKKwkJICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQnk6IERhdmlkIEhvd2VsbHMgPGRob3dlbGxzQHJlZGhhdC5jb20+CisKK1RoZSBzbG93IHdvcmsgaXRlbSBleGVjdXRpb24gdGhyZWFkIHBvb2wgaXMgYSBwb29sIG9mIHRocmVhZHMgZm9yIHBlcmZvcm1pbmcKK3RoaW5ncyB0aGF0IHRha2UgYSByZWxhdGl2ZWx5IGxvbmcgdGltZSwgc3VjaCBhcyBtYWtpbmcgbWtkaXIgY2FsbHMuCitUeXBpY2FsbHksIHdoZW4gcHJvY2Vzc2luZyBzb21ldGhpbmcsIHRoZXNlIGl0ZW1zIHdpbGwgc3BlbmQgYSBsb3Qgb2YgdGltZQorYmxvY2tpbmcgYSB0aHJlYWQgb24gSS9PLCB0aHVzIG1ha2luZyB0aGF0IHRocmVhZCB1bmF2YWlsYWJsZSBmb3IgZG9pbmcgb3RoZXIKK3dvcmsuCisKK1RoZSBzdGFuZGFyZCB3b3JrcXVldWUgbW9kZWwgaXMgdW5zdWl0YWJsZSBmb3IgdGhpcyBjbGFzcyBvZiB3b3JrIGl0ZW0gYXMgdGhhdAorbGltaXRzIHRoZSBvd25lciB0byBhIHNpbmdsZSB0aHJlYWQgb3IgYSBzaW5nbGUgdGhyZWFkIHBlciBDUFUuICBGb3Igc29tZQordGFza3MsIGhvd2V2ZXIsIG1vcmUgdGhyZWFkcyAtIG9yIGZld2VyIC0gYXJlIHJlcXVpcmVkLgorCitUaGVyZSBpcyBqdXN0IG9uZSBwb29sIHBlciBzeXN0ZW0uICBJdCBjb250YWlucyBubyB0aHJlYWRzIHVubGVzcyBzb21ldGhpbmcKK3dhbnRzIHRvIHVzZSBpdCAtIGFuZCB0aGF0IHNvbWV0aGluZyBtdXN0IHJlZ2lzdGVyIGl0cyBpbnRlcmVzdCBmaXJzdC4gIFdoZW4KK3RoZSBwb29sIGlzIGFjdGl2ZSwgdGhlIG51bWJlciBvZiB0aHJlYWRzIGl0IGNvbnRhaW5zIGlzIGR5bmFtaWMsIHZhcnlpbmcKK2JldHdlZW4gYSBtYXhpbXVtIGFuZCBtaW5pbXVtIHNldHRpbmcsIGRlcGVuZGluZyBvbiB0aGUgbG9hZC4KKworCis9PT09PT09PT09PT09PT09PT09PQorQ0xBU1NFUyBPRiBXT1JLIElURU0KKz09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgcG9vbCBzdXBwb3J0IHR3byBjbGFzc2VzIG9mIHdvcmsgaXRlbXM6CisKKyAoKikgU2xvdyB3b3JrIGl0ZW1zLgorCisgKCopIFZlcnkgc2xvdyB3b3JrIGl0ZW1zLgorCitUaGUgZm9ybWVyIGFyZSBleHBlY3RlZCB0byBmaW5pc2ggbXVjaCBxdWlja2VyIHRoYW4gdGhlIGxhdHRlci4KKworQW4gb3BlcmF0aW9uIG9mIHRoZSB2ZXJ5IHNsb3cgY2xhc3MgbWF5IGRvIGEgYmF0Y2ggY29tYmluYXRpb24gb2Ygc2V2ZXJhbAorbG9va3VwcywgbWtkaXJzLCBhbmQgYSBjcmVhdGUgZm9yIGluc3RhbmNlLgorCitBbiBvcGVyYXRpb24gb2YgdGhlIG9yZGluYXJpbHkgc2xvdyBjbGFzcyBtYXksIGZvciBleGFtcGxlLCB3cml0ZSBzdHVmZiBvcgorZXhwYW5kIGZpbGVzLCBwcm92aWRlZCB0aGUgdGltZSB0YWtlbiB0byBkbyBzbyBpc24ndCB0b28gbG9uZy4KKworT3BlcmF0aW9ucyBvZiBib3RoIHR5cGVzIG1heSBzbGVlcCBkdXJpbmcgZXhlY3V0aW9uLCB0aHVzIHR5aW5nIHVwIHRoZSB0aHJlYWQKK2xvYW5lZCB0byBpdC4KKworCitUSFJFQUQtVE8tQ0xBU1MgQUxMT0NBVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90IGFsbCB0aGUgdGhyZWFkcyBpbiB0aGUgcG9vbCBhcmUgYXZhaWxhYmxlIHRvIHdvcmsgb24gdmVyeSBzbG93IHdvcmsgaXRlbXMuCitUaGUgbnVtYmVyIHdpbGwgYmUgYmV0d2VlbiBvbmUgYW5kIG9uZSBmZXdlciB0aGFuIHRoZSBudW1iZXIgb2YgYWN0aXZlIHRocmVhZHMuCitUaGlzIGlzIGNvbmZpZ3VyYWJsZSAoc2VlIHRoZSAiUG9vbCBDb25maWd1cmF0aW9uIiBzZWN0aW9uKS4KKworQWxsIHRoZSB0aHJlYWRzIGFyZSBhdmFpbGFibGUgdG8gd29yayBvbiBvcmRpbmFyaWx5IHNsb3cgd29yayBpdGVtcywgYnV0IGEKK3BlcmNlbnRhZ2Ugb2YgdGhlIHRocmVhZHMgd2lsbCBwcmVmZXIgdG8gd29yayBvbiB2ZXJ5IHNsb3cgd29yayBpdGVtcy4KKworVGhlIGNvbmZpZ3VyYXRpb24gZW5zdXJlcyB0aGF0IGF0IGxlYXN0IG9uZSB0aHJlYWQgd2lsbCBiZSBhdmFpbGFibGUgdG8gd29yayBvbgordmVyeSBzbG93IHdvcmsgaXRlbXMsIGFuZCBhdCBsZWFzdCBvbmUgdGhyZWFkIHdpbGwgYmUgYXZhaWxhYmxlIHRoYXQgd29uJ3Qgd29yaworb24gdmVyeSBzbG93IHdvcmsgaXRlbXMgYXQgYWxsLgorCisKKz09PT09PT09PT09PT09PT09PT09PQorVVNJTkcgU0xPVyBXT1JLIElURU1TCis9PT09PT09PT09PT09PT09PT09PT0KKworRmlyc3RseSwgYSBtb2R1bGUgb3Igc3Vic3lzdGVtIHdhbnRpbmcgdG8gbWFrZSB1c2Ugb2Ygc2xvdyB3b3JrIGl0ZW1zIG11c3QKK3JlZ2lzdGVyIGl0cyBpbnRlcmVzdDoKKworCSBpbnQgcmV0ID0gc2xvd193b3JrX3JlZ2lzdGVyX3VzZXIoKTsKKworVGhpcyB3aWxsIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgLXZlIGVycm9yIHVwb24gZmFpbHVyZS4KKworCitTbG93IHdvcmsgaXRlbXMgbWF5IHRoZW4gYmUgc2V0IHVwIGJ5OgorCisgKDEpIERlY2xhcmluZyBhIHNsb3dfd29yayBzdHJ1Y3QgdHlwZSB2YXJpYWJsZToKKworCSNpbmNsdWRlIDxsaW51eC9zbG93LXdvcmsuaD4KKworCXN0cnVjdCBzbG93X3dvcmsgbXlpdGVtOworCisgKDIpIERlY2xhcmluZyB0aGUgb3BlcmF0aW9ucyB0byBiZSB1c2VkIGZvciB0aGlzIGl0ZW06CisKKwlzdHJ1Y3Qgc2xvd193b3JrX29wcyBteWl0ZW1fb3BzID0geworCQkuZ2V0X3JlZiA9IG15aXRlbV9nZXRfcmVmLAorCQkucHV0X3JlZiA9IG15aXRlbV9wdXRfcmVmLAorCQkuZXhlY3V0ZSA9IG15aXRlbV9leGVjdXRlLAorCX07CisKKyAgICAgWypdIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHMsIHNlZSBzZWN0aW9uICJJdGVtIE9wZXJhdGlvbnMiLgorCisgKDMpIEluaXRpYWxpc2luZyB0aGUgaXRlbToKKworCXNsb3dfd29ya19pbml0KCZteWl0ZW0sICZteWl0ZW1fb3BzKTsKKworICAgICBvcjoKKworCXZzbG93X3dvcmtfaW5pdCgmbXlpdGVtLCAmbXlpdGVtX29wcyk7CisKKyAgICAgZGVwZW5kaW5nIG9uIGl0cyBjbGFzcy4KKworQSBzdWl0YWJseSBzZXQgdXAgd29yayBpdGVtIGNhbiB0aGVuIGJlIGVucXVldWVkIGZvciBwcm9jZXNzaW5nOgorCisJaW50IHJldCA9IHNsb3dfd29ya19lbnF1ZXVlKCZteWl0ZW0pOworCitUaGlzIHdpbGwgcmV0dXJuIGEgLXZlIGVycm9yIGlmIHRoZSB0aHJlYWQgcG9vbCBpcyB1bmFibGUgdG8gZ2FpbiBhIHJlZmVyZW5jZQorb24gdGhlIGl0ZW0sIDAgb3RoZXJ3aXNlLgorCisKK1RoZSBpdGVtcyBhcmUgcmVmZXJlbmNlIGNvdW50ZWQsIHNvIHRoZXJlIG91Z2h0IHRvIGJlIG5vIG5lZWQgZm9yIGEgZmx1c2gKK29wZXJhdGlvbi4gIFdoZW4gYWxsIGEgbW9kdWxlJ3Mgc2xvdyB3b3JrIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQsIGFuZCB0aGUKK21vZHVsZSBoYXMgbm8gZnVydGhlciBpbnRlcmVzdCBpbiB0aGUgZmFjaWxpdHksIGl0IHNob3VsZCB1bnJlZ2lzdGVyIGl0cworaW50ZXJlc3Q6CisKKwlzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKCk7CisKKworPT09PT09PT09PT09PT09CitJVEVNIE9QRVJBVElPTlMKKz09PT09PT09PT09PT09PQorCitFYWNoIHdvcmsgaXRlbSByZXF1aXJlcyBhIHRhYmxlIG9mIG9wZXJhdGlvbnMgb2YgdHlwZSBzdHJ1Y3Qgc2xvd193b3JrX29wcy4KK0FsbCBtZW1iZXJzIGFyZSByZXF1aXJlZDoKKworICgqKSBHZXQgYSByZWZlcmVuY2Ugb24gYW4gaXRlbToKKworCWludCAoKmdldF9yZWYpKHN0cnVjdCBzbG93X3dvcmsgKndvcmspOworCisgICAgIFRoaXMgYWxsb3dzIHRoZSB0aHJlYWQgcG9vbCB0byBhdHRlbXB0IHRvIHBpbiBhbiBpdGVtIGJ5IGdldHRpbmcgYQorICAgICByZWZlcmVuY2Ugb24gaXQuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gMCBpZiB0aGUgcmVmZXJlbmNlIHdhcworICAgICBncmFudGVkLCBvciBhIC12ZSBlcnJvciBvdGhlcndpc2UuICBJZiBhbiBlcnJvciBpcyByZXR1cm5lZCwKKyAgICAgc2xvd193b3JrX2VucXVldWUoKSB3aWxsIGZhaWwuCisKKyAgICAgVGhlIHJlZmVyZW5jZSBpcyBoZWxkIHdoaWxzdCB0aGUgaXRlbSBpcyBxdWV1ZWQgYW5kIHdoaWxzdCBpdCBpcyBiZWluZworICAgICBleGVjdXRlZC4gIFRoZSBpdGVtIG1heSB0aGVuIGJlIHJlcXVldWVkIHdpdGggdGhlIHNhbWUgcmVmZXJlbmNlIGhlbGQsIG9yCisgICAgIHRoZSByZWZlcmVuY2Ugd2lsbCBiZSByZWxlYXNlZC4KKworICgqKSBSZWxlYXNlIGEgcmVmZXJlbmNlIG9uIGFuIGl0ZW06CisKKwl2b2lkICgqcHV0X3JlZikoc3RydWN0IHNsb3dfd29yayAqd29yayk7CisKKyAgICAgVGhpcyBhbGxvd3MgdGhlIHRocmVhZCBwb29sIHRvIHVucGluIGFuIGl0ZW0gYnkgcmVsZWFzaW5nIHRoZSByZWZlcmVuY2Ugb24KKyAgICAgaXQuICBUaGUgdGhyZWFkIHBvb2wgd2lsbCBub3QgdG91Y2ggdGhlIGl0ZW0gYWdhaW4gb25jZSB0aGlzIGhhcyBiZWVuCisgICAgIGNhbGxlZC4KKworICgqKSBFeGVjdXRlIGFuIGl0ZW06CisKKwl2b2lkICgqZXhlY3V0ZSkoc3RydWN0IHNsb3dfd29yayAqd29yayk7CisKKyAgICAgVGhpcyBzaG91bGQgcGVyZm9ybSB0aGUgd29yayByZXF1aXJlZCBvZiB0aGUgaXRlbS4gIEl0IG1heSBzbGVlcCwgaXQgbWF5CisgICAgIHBlcmZvcm0gZGlzayBJL08gYW5kIGl0IG1heSB3YWl0IGZvciBsb2Nrcy4KKworCis9PT09PT09PT09PT09PT09PT0KK1BPT0wgQ09ORklHVVJBVElPTgorPT09PT09PT09PT09PT09PT09CisKK1RoZSBzbG93LXdvcmsgdGhyZWFkIHBvb2wgaGFzIGEgbnVtYmVyIG9mIGNvbmZpZ3VyYWJsZXM6CisKKyAoKikgL3Byb2Mvc3lzL2tlcm5lbC9zbG93LXdvcmsvbWluLXRocmVhZHMKKworICAgICBUaGUgbWluaW11bSBudW1iZXIgb2YgdGhyZWFkcyB0aGF0IHNob3VsZCBiZSBpbiB0aGUgcG9vbCB3aGlsc3QgaXQgaXMgaW4KKyAgICAgdXNlLiAgVGhpcyBtYXkgYmUgYW55d2hlcmUgYmV0d2VlbiAyIGFuZCBtYXgtdGhyZWFkcy4KKworICgqKSAvcHJvYy9zeXMva2VybmVsL3Nsb3ctd29yay9tYXgtdGhyZWFkcworCisgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzIHRoYXQgc2hvdWxkIGluIHRoZSBwb29sLiAgVGhpcyBtYXkgYmUKKyAgICAgYW55d2hlcmUgYmV0d2VlbiBtaW4tdGhyZWFkcyBhbmQgMjU1IG9yIE5SX0NQVVMgKiAyLCB3aGljaGV2ZXIgaXMgZ3JlYXRlci4KKworICgqKSAvcHJvYy9zeXMva2VybmVsL3Nsb3ctd29yay92c2xvdy1wZXJjZW50YWdlCisKKyAgICAgVGhlIHBlcmNlbnRhZ2Ugb2YgYWN0aXZlIHRocmVhZHMgaW4gdGhlIHBvb2wgdGhhdCBtYXkgYmUgdXNlZCB0byBleGVjdXRlCisgICAgIHZlcnkgc2xvdyB3b3JrIGl0ZW1zLiAgVGhpcyBtYXkgYmUgYmV0d2VlbiAxIGFuZCA5OS4gIFRoZSByZXN1bHRhbnQgbnVtYmVyCisgICAgIGlzIGJvdW5kZWQgdG8gYmV0d2VlbiAxIGFuZCBvbmUgZmV3ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSB0aHJlYWRzLgorICAgICBUaGlzIGVuc3VyZXMgdGhlcmUgaXMgYWx3YXlzIGF0IGxlYXN0IG9uZSB0aHJlYWQgdGhhdCBjYW4gcHJvY2VzcyB2ZXJ5CisgICAgIHNsb3cgd29yayBpdGVtcywgYW5kIGFsd2F5cyBhdCBsZWFzdCBvbmUgdGhyZWFkIHRoYXQgd29uJ3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vc3lzY3RsLzAwLUlOREVYCmluZGV4IGEyMGE5MDYuLjEyODZmNDUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsLzAwLUlOREVYCkBAIC0xMCw2ICsxMCw4IEBACiAJLSBkb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMvZnMvKi4KIGtlcm5lbC50eHQKIAktIGRvY3VtZW50YXRpb24gZm9yIC9wcm9jL3N5cy9rZXJuZWwvKi4KK25ldC50eHQKKwktIGRvY3VtZW50YXRpb24gZm9yIC9wcm9jL3N5cy9uZXQvKi4KIHN1bnJwYy50eHQKIAktIGRvY3VtZW50YXRpb24gZm9yIC9wcm9jL3N5cy9zdW5ycGMvKi4KIHZtLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwvZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvZnMudHh0CmluZGV4IGY5OTI1NDMuLjE0NTg0NDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2ZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9mcy50eHQKQEAgLTEsNSArMSw2IEBACiBEb2N1bWVudGF0aW9uIGZvciAvcHJvYy9zeXMvZnMvKglrZXJuZWwgdmVyc2lvbiAyLjIuMTAKIAkoYykgMTk5OCwgMTk5OSwgIFJpayB2YW4gUmllbCA8cmllbEBubC5saW51eC5vcmc+CisJKGMpIDIwMDksICAgICAgICBTaGVuIEZlbmc8c2hlbkBjbi5mdWppdHN1LmNvbT4KIAogRm9yIGdlbmVyYWwgaW5mbyBhbmQgbGVnYWwgYmx1cmIsIHBsZWFzZSBsb29rIGluIFJFQURNRS4KIApAQCAtMTQsNyArMTUsMTIgQEAKIHN5c3RlbSwgaXQgaXMgYWR2aXNhYmxlIHRvIHJlYWQgYm90aCBkb2N1bWVudGF0aW9uIGFuZCBzb3VyY2UKIGJlZm9yZSBhY3R1YWxseSBtYWtpbmcgYWRqdXN0bWVudHMuCiAKKzEuIC9wcm9jL3N5cy9mcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBDdXJyZW50bHksIHRoZXNlIGZpbGVzIGFyZSBpbiAvcHJvYy9zeXMvZnM6CistIGFpby1tYXgtbnIKKy0gYWlvLW5yCiAtIGRlbnRyeS1zdGF0ZQogLSBkcXVvdC1tYXgKIC0gZHF1b3QtbnIKQEAgLTMwLDggKzM2LDE1IEBACiAtIHN1cGVyLW1heAogLSBzdXBlci1ucgogCi1Eb2N1bWVudGF0aW9uIGZvciB0aGUgZmlsZXMgaW4gL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjIGlzCi1pbiBEb2N1bWVudGF0aW9uL2JpbmZtdF9taXNjLnR4dC4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2Fpby1uciAmIGFpby1tYXgtbnI6CisKK2Fpby1uciBpcyB0aGUgcnVubmluZyB0b3RhbCBvZiB0aGUgbnVtYmVyIG9mIGV2ZW50cyBzcGVjaWZpZWQgb24gdGhlCitpb19zZXR1cCBzeXN0ZW0gY2FsbCBmb3IgYWxsIGN1cnJlbnRseSBhY3RpdmUgYWlvIGNvbnRleHRzLiAgSWYgYWlvLW5yCityZWFjaGVzIGFpby1tYXgtbnIgdGhlbiBpb19zZXR1cCB3aWxsIGZhaWwgd2l0aCBFQUdBSU4uICBOb3RlIHRoYXQKK3JhaXNpbmcgYWlvLW1heC1uciBkb2VzIG5vdCByZXN1bHQgaW4gdGhlIHByZS1hbGxvY2F0aW9uIG9yIHJlLXNpemluZworb2YgYW55IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMuCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTE3OCwzICsxOTEsNjAgQEAKIGFpby1uciBjYW4gZ3JvdyB0by4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisyLiAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZpbGVzIGluIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyBpcworaW4gRG9jdW1lbnRhdGlvbi9iaW5mbXRfbWlzYy50eHQuCisKKworMy4gL3Byb2Mvc3lzL2ZzL21xdWV1ZSAtIFBPU0lYIG1lc3NhZ2UgcXVldWVzIGZpbGVzeXN0ZW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICJtcXVldWUiICBmaWxlc3lzdGVtIHByb3ZpZGVzICB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBmZWF0dXJlcyB0byBlbmFibGUgdGhlCitjcmVhdGlvbiBvZiBhICB1c2VyIHNwYWNlICBsaWJyYXJ5IHRoYXQgIGltcGxlbWVudHMgIHRoZSAgUE9TSVggbWVzc2FnZSBxdWV1ZXMKK0FQSSAoYXMgbm90ZWQgYnkgdGhlICBNU0cgdGFnIGluIHRoZSAgUE9TSVggMTAwMy4xLTIwMDEgdmVyc2lvbiAgb2YgdGhlIFN5c3RlbQorSW50ZXJmYWNlcyBzcGVjaWZpY2F0aW9uLikKKworVGhlICJtcXVldWUiIGZpbGVzeXN0ZW0gY29udGFpbnMgdmFsdWVzIGZvciBkZXRlcm1pbmluZy9zZXR0aW5nICB0aGUgYW1vdW50IG9mCityZXNvdXJjZXMgdXNlZCBieSB0aGUgZmlsZSBzeXN0ZW0uCisKKy9wcm9jL3N5cy9mcy9tcXVldWUvcXVldWVzX21heCBpcyBhIHJlYWQvd3JpdGUgIGZpbGUgZm9yICBzZXR0aW5nL2dldHRpbmcgIHRoZQorbWF4aW11bSBudW1iZXIgb2YgbWVzc2FnZSBxdWV1ZXMgYWxsb3dlZCBvbiB0aGUgc3lzdGVtLgorCisvcHJvYy9zeXMvZnMvbXF1ZXVlL21zZ19tYXggIGlzICBhICByZWFkL3dyaXRlIGZpbGUgIGZvciAgc2V0dGluZy9nZXR0aW5nICB0aGUKK21heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIGluIGEgcXVldWUgdmFsdWUuICBJbiBmYWN0IGl0IGlzIHRoZSBsaW1pdGluZyB2YWx1ZQorZm9yIGFub3RoZXIgKHVzZXIpIGxpbWl0IHdoaWNoIGlzIHNldCBpbiBtcV9vcGVuIGludm9jYXRpb24uIFRoaXMgYXR0cmlidXRlIG9mCithIHF1ZXVlIG11c3QgYmUgbGVzcyBvciBlcXVhbCB0aGVuIG1zZ19tYXguCisKKy9wcm9jL3N5cy9mcy9tcXVldWUvbXNnc2l6ZV9tYXggaXMgIGEgcmVhZC93cml0ZSAgZmlsZSBmb3Igc2V0dGluZy9nZXR0aW5nIHRoZQorbWF4aW11bSAgbWVzc2FnZSBzaXplIHZhbHVlIChpdCBpcyBldmVyeSAgbWVzc2FnZSBxdWV1ZSdzIGF0dHJpYnV0ZSBzZXQgZHVyaW5nCitpdHMgY3JlYXRpb24pLgorCisKKzQuIC9wcm9jL3N5cy9mcy9lcG9sbCAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGVwb2xsIGludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgZXBvbGwoNykgaW50ZXJmYWNlLgorCittYXhfdXNlcl9pbnN0YW5jZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlcG9sbCBmaWxlIGRlc2NyaXB0b3JzIHRoYXQgYSBzaW5nbGUgdXNlciBjYW4KK2hhdmUgb3BlbiBhdCBhIGdpdmVuIHRpbWUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEyOCwgYW5kIHNob3VsZCBiZSBlbm91Z2gKK2ZvciBub3JtYWwgdXNlcnMuCisKK21heF91c2VyX3dhdGNoZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworRXZlcnkgZXBvbGwgZmlsZSBkZXNjcmlwdG9yIGNhbiBzdG9yZSBhIG51bWJlciBvZiBmaWxlcyB0byBiZSBtb25pdG9yZWQKK2ZvciBldmVudCByZWFkaW5lc3MuIEVhY2ggb25lIG9mIHRoZXNlIG1vbml0b3JlZCBmaWxlcyBjb25zdGl0dXRlcyBhICJ3YXRjaCIuCitUaGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mICJ3YXRjaGVzIiB0aGF0IGFyZQorYWxsb3dlZCBmb3IgZWFjaCB1c2VyLgorRWFjaCAid2F0Y2giIGNvc3RzIHJvdWdobHkgOTAgYnl0ZXMgb24gYSAzMmJpdCBrZXJuZWwsIGFuZCByb3VnaGx5IDE2MCBieXRlcworb24gYSA2NGJpdCBvbmUuCitUaGUgY3VycmVudCBkZWZhdWx0IHZhbHVlIGZvciAgbWF4X3VzZXJfd2F0Y2hlcyAgaXMgdGhlIDEvMzIgb2YgdGhlIGF2YWlsYWJsZQorbG93IG1lbW9yeSwgZGl2aWRlZCBmb3IgdGhlICJ3YXRjaCIgY29zdCBpbiBieXRlcy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKaW5kZXggYTRjY2RkMS4uZjExY2E3OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CkBAIC0xLDUgKzEsNiBAQAogRG9jdW1lbnRhdGlvbiBmb3IgL3Byb2Mvc3lzL2tlcm5lbC8qCWtlcm5lbCB2ZXJzaW9uIDIuMi4xMAogCShjKSAxOTk4LCAxOTk5LCAgUmlrIHZhbiBSaWVsIDxyaWVsQG5sLmxpbnV4Lm9yZz4KKwkoYykgMjAwOSwgICAgICAgIFNoZW4gRmVuZzxzaGVuQGNuLmZ1aml0c3UuY29tPgogCiBGb3IgZ2VuZXJhbCBpbmZvIGFuZCBsZWdhbCBibHVyYiwgcGxlYXNlIGxvb2sgaW4gUkVBRE1FLgogCkBAIC0xOCw2ICsxOSw3IEBACiBzaG93IHVwIGluIC9wcm9jL3N5cy9rZXJuZWw6CiAtIGFjcGlfdmlkZW9fZmxhZ3MKIC0gYWNjdAorLSBhdXRvX21zZ21uaQogLSBjb3JlX3BhdHRlcm4KIC0gY29yZV91c2VzX3BpZAogLSBjdHJsLWFsdC1kZWwKQEAgLTMzLDYgKzM1LDcgQEAKIC0gbXNnbWF4CiAtIG1zZ21uYgogLSBtc2dtbmkKKy0gbm1pX3dhdGNoZG9nCiAtIG9zcmVsZWFzZQogLSBvc3R5cGUKIC0gb3ZlcmZsb3dnaWQKQEAgLTQwLDYgKzQzLDcgQEAKIC0gcGFuaWMKIC0gcGlkX21heAogLSBwb3dlcnNhdmUtbmFwICAgICAgICAgICAgICAgWyBQUEMgb25seSBdCistIHBhbmljX29uX3VucmVjb3ZlcmVkX25taQogLSBwcmludGsKIC0gcmFuZG9taXplX3ZhX3NwYWNlCiAtIHJlYWwtcm9vdC1kZXYgICAgICAgICAgICAgICA9PT4gRG9jdW1lbnRhdGlvbi9pbml0cmQudHh0CkBAIC01NSw2ICs1OSw3IEBACiAtIHN5c3JxICAgICAgICAgICAgICAgICAgICAgICA9PT4gRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKIC0gdGFpbnRlZAogLSB0aHJlYWRzLW1heAorLSB1bmtub3duX25taV9wYW5pYwogLSB2ZXJzaW9uCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zODEsMyArMzg2LDUxIEBACiAgNTEyIC0gQSBrZXJuZWwgd2FybmluZyBoYXMgb2NjdXJyZWQuCiAxMDI0IC0gQSBtb2R1bGUgZnJvbSBkcml2ZXJzL3N0YWdpbmcgd2FzIGxvYWRlZC4KIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworYXV0b19tc2dtbmk6CisKK0VuYWJsZXMvRGlzYWJsZXMgYXV0b21hdGljIHJlY29tcHV0aW5nIG9mIG1zZ21uaSB1cG9uIG1lbW9yeSBhZGQvcmVtb3ZlIG9yCit1cG9uIGlwYyBuYW1lc3BhY2UgY3JlYXRpb24vcmVtb3ZhbCAoc2VlIHRoZSBtc2dtbmkgZGVzY3JpcHRpb24gYWJvdmUpLgorRWNob2luZyAiMSIgaW50byB0aGlzIGZpbGUgZW5hYmxlcyBtc2dtbmkgYXV0b21hdGljIHJlY29tcHV0aW5nLgorRWNob2luZyAiMCIgdHVybnMgaXQgb2ZmLgorYXV0b19tc2dtbmkgZGVmYXVsdCB2YWx1ZSBpcyAxLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitubWlfd2F0Y2hkb2c6CisKK0VuYWJsZXMvRGlzYWJsZXMgdGhlIE5NSSB3YXRjaGRvZyBvbiB4ODYgc3lzdGVtcy4gIFdoZW4gdGhlIHZhbHVlIGlzIG5vbi16ZXJvCit0aGUgTk1JIHdhdGNoZG9nIGlzIGVuYWJsZWQgYW5kIHdpbGwgY29udGludW91c2x5IHRlc3QgYWxsIG9ubGluZSBjcHVzIHRvCitkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhleSBhcmUgc3RpbGwgZnVuY3Rpb25pbmcgcHJvcGVybHkuIEN1cnJlbnRseSwKK3Bhc3NpbmcgIm5taV93YXRjaGRvZz0iIHBhcmFtZXRlciBhdCBib290IHRpbWUgaXMgcmVxdWlyZWQgZm9yIHRoaXMgZnVuY3Rpb24KK3RvIHdvcmsuCisKK0lmIExBUElDIE5NSSB3YXRjaGRvZyBtZXRob2QgaXMgaW4gdXNlIChubWlfd2F0Y2hkb2c9MiBrZXJuZWwgcGFyYW1ldGVyKSwgdGhlCitOTUkgd2F0Y2hkb2cgc2hhcmVzIHJlZ2lzdGVycyB3aXRoIG9wcm9maWxlLiBCeSBkaXNhYmxpbmcgdGhlIE5NSSB3YXRjaGRvZywKK29wcm9maWxlIG1heSBoYXZlIG1vcmUgcmVnaXN0ZXJzIHRvIHV0aWxpemUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3Vua25vd25fbm1pX3BhbmljOgorCitUaGUgdmFsdWUgaW4gdGhpcyBmaWxlIGFmZmVjdHMgYmVoYXZpb3Igb2YgaGFuZGxpbmcgTk1JLiBXaGVuIHRoZSB2YWx1ZSBpcworbm9uLXplcm8sIHVua25vd24gTk1JIGlzIHRyYXBwZWQgYW5kIHRoZW4gcGFuaWMgb2NjdXJzLiBBdCB0aGF0IHRpbWUsIGtlcm5lbAorZGVidWdnaW5nIGluZm9ybWF0aW9uIGlzIGRpc3BsYXllZCBvbiBjb25zb2xlLgorCitOTUkgc3dpdGNoIHRoYXQgbW9zdCBJQTMyIHNlcnZlcnMgaGF2ZSBmaXJlcyB1bmtub3duIE5NSSB1cCwgZm9yIGV4YW1wbGUuCitJZiBhIHN5c3RlbSBoYW5ncyB1cCwgdHJ5IHByZXNzaW5nIHRoZSBOTUkgc3dpdGNoLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitwYW5pY19vbl91bnJlY292ZXJlZF9ubWk6CisKK1RoZSBkZWZhdWx0IExpbnV4IGJlaGF2aW91ciBvbiBhbiBOTUkgb2YgZWl0aGVyIG1lbW9yeSBvciB1bmtub3duIGlzIHRvIGNvbnRpbnVlCitvcGVyYXRpb24uIEZvciBtYW55IGVudmlyb25tZW50cyBzdWNoIGFzIHNjaWVudGlmaWMgY29tcHV0aW5nIGl0IGlzIHByZWZlcmFibGUKK3RoYXQgdGhlIGJveCBpcyB0YWtlbiBvdXQgYW5kIHRoZSBlcnJvciBkZWFsdCB3aXRoIHRoYW4gYW4gdW5jb3JyZWN0ZWQKK3Bhcml0eS9FQ0MgZXJyb3IgZ2V0IHByb3BvZ2F0ZWQuCisKK0Egc21hbGwgbnVtYmVyIG9mIHN5c3RlbXMgZG8gZ2VuZXJhdGUgTk1JJ3MgZm9yIGJpemFycmUgcmFuZG9tIHJlYXNvbnMgc3VjaCBhcworcG93ZXIgbWFuYWdlbWVudCBzbyB0aGUgZGVmYXVsdCBpcyBvZmYuIFRoYXQgc3lzY3RsIHdvcmtzIGxpa2UgdGhlIGV4aXN0aW5nCitwYW5pYyBjb250cm9scyBhbHJlYWR5IGluIHRoYXQgZGlyZWN0b3J5LgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC9uZXQudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvbmV0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzRkNTViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvbmV0LnR4dApAQCAtMCwwICsxLDE3NSBAQAorRG9jdW1lbnRhdGlvbiBmb3IgL3Byb2Mvc3lzL25ldC8qCWtlcm5lbCB2ZXJzaW9uIDIuNC4wLXRlc3QxMS1wcmU0CisJKGMpIDE5OTkJCVRlcnJlaG9uIEJvd2RlbiA8dGVycmVob25AcGFjYmVsbC5uZXQ+CisJCQkJQm9kbyBCYXVlciA8YmJAcmljb2NoZXQubmV0PgorCShjKSAyMDAwCQlKb3JnZSBOZXJpbiA8Y29tYW5kYW50ZUB6YXJhbGludXguY29tPgorCShjKSAyMDA5CQlTaGVuIEZlbmcgPHNoZW5AY24uZnVqaXRzdS5jb20+CisKK0ZvciBnZW5lcmFsIGluZm8gYW5kIGxlZ2FsIGJsdXJiLCBwbGVhc2UgbG9vayBpbiBSRUFETUUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHN5c2N0bCBmaWxlcyBpbgorL3Byb2Mvc3lzL25ldCBhbmQgaXMgdmFsaWQgZm9yIExpbnV4IGtlcm5lbCB2ZXJzaW9uIDIuNC4wLXRlc3QxMS1wcmU0LgorCitUaGUgaW50ZXJmYWNlICB0byAgdGhlICBuZXR3b3JraW5nICBwYXJ0cyAgb2YgIHRoZSAga2VybmVsICBpcyAgbG9jYXRlZCAgaW4KKy9wcm9jL3N5cy9uZXQuIFRoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgYWxsIHBvc3NpYmxlIHN1YmRpcmVjdG9yaWVzLllvdSBtYXkKK3NlZSBvbmx5IHNvbWUgb2YgdGhlbSwgZGVwZW5kaW5nIG9uIHlvdXIga2VybmVsJ3MgY29uZmlndXJhdGlvbi4KKworCitUYWJsZSA6IFN1YmRpcmVjdG9yaWVzIGluIC9wcm9jL3N5cy9uZXQKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIERpcmVjdG9yeSBDb250ZW50ICAgICAgICAgICAgIERpcmVjdG9yeSAgQ29udGVudAorIGNvcmUgICAgICBHZW5lcmFsIHBhcmFtZXRlciAgIGFwcGxldGFsayAgQXBwbGV0YWxrIHByb3RvY29sCisgdW5peCAgICAgIFVuaXggZG9tYWluIHNvY2tldHMgbmV0cm9tICAgICBORVQvUk9NCisgODAyICAgICAgIEU4MDIgcHJvdG9jb2wgICAgICAgYXgyNSAgICAgICBBWDI1CisgZXRoZXJuZXQgIEV0aGVybmV0IHByb3RvY29sICAgcm9zZSAgICAgICBYLjI1IFBMUCBsYXllcgorIGlwdjQgICAgICBJUCB2ZXJzaW9uIDQgICAgICAgIHgyNSAgICAgICAgWC4yNSBwcm90b2NvbAorIGlweCAgICAgICBJUFggICAgICAgICAgICAgICAgIHRva2VuLXJpbmcgSUJNIHRva2VuIHJpbmcKKyBicmlkZ2UgICAgQnJpZGdpbmcgICAgICAgICAgICBkZWNuZXQgICAgIERFQyBuZXQKKyBpcHY2ICAgICAgSVAgdmVyc2lvbiA2CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworMS4gL3Byb2Mvc3lzL25ldC9jb3JlIC0gTmV0d29yayBjb3JlIG9wdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcm1lbV9kZWZhdWx0CistLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgc2V0dGluZyBvZiB0aGUgc29ja2V0IHJlY2VpdmUgYnVmZmVyIGluIGJ5dGVzLgorCitybWVtX21heAorLS0tLS0tLS0KKworVGhlIG1heGltdW0gcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemUgaW4gYnl0ZXMuCisKK3dtZW1fZGVmYXVsdAorLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IHNldHRpbmcgKGluIGJ5dGVzKSBvZiB0aGUgc29ja2V0IHNlbmQgYnVmZmVyLgorCit3bWVtX21heAorLS0tLS0tLS0KKworVGhlIG1heGltdW0gc2VuZCBzb2NrZXQgYnVmZmVyIHNpemUgaW4gYnl0ZXMuCisKK21lc3NhZ2VfYnVyc3QgYW5kIG1lc3NhZ2VfY29zdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIHBhcmFtZXRlcnMgIGFyZSB1c2VkIHRvIGxpbWl0IHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHdyaXR0ZW4gdG8gdGhlIGtlcm5lbAorbG9nIGZyb20gIHRoZSAgbmV0d29ya2luZyAgY29kZS4gIFRoZXkgIGVuZm9yY2UgIGEgIHJhdGUgIGxpbWl0ICB0byAgbWFrZSAgYQorZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrICBpbXBvc3NpYmxlLiBBIGhpZ2hlciBtZXNzYWdlX2Nvc3QgZmFjdG9yLCByZXN1bHRzIGluCitmZXdlciBtZXNzYWdlcyB0aGF0IHdpbGwgYmUgd3JpdHRlbi4gTWVzc2FnZV9idXJzdCBjb250cm9scyB3aGVuIG1lc3NhZ2VzIHdpbGwKK2JlIGRyb3BwZWQuICBUaGUgIGRlZmF1bHQgIHNldHRpbmdzICBsaW1pdCAgd2FybmluZyBtZXNzYWdlcyB0byBvbmUgZXZlcnkgZml2ZQorc2Vjb25kcy4KKword2FybmluZ3MKKy0tLS0tLS0tCisKK1RoaXMgY29udHJvbHMgY29uc29sZSBtZXNzYWdlcyBmcm9tIHRoZSBuZXR3b3JraW5nIHN0YWNrIHRoYXQgY2FuIG9jY3VyIGJlY2F1c2UKK29mIHByb2JsZW1zIG9uIHRoZSBuZXR3b3JrIGxpa2UgZHVwbGljYXRlIGFkZHJlc3Mgb3IgYmFkIGNoZWNrc3Vtcy4gTm9ybWFsbHksCit0aGlzIHNob3VsZCBiZSBlbmFibGVkLCBidXQgaWYgdGhlIHByb2JsZW0gcGVyc2lzdHMgdGhlIG1lc3NhZ2VzIGNhbiBiZQorZGlzYWJsZWQuCisKK25ldGRldl9idWRnZXQKKy0tLS0tLS0tLS0tLS0KKworTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0YWtlbiBmcm9tIGFsbCBpbnRlcmZhY2VzIGluIG9uZSBwb2xsaW5nIGN5Y2xlIChOQVBJCitwb2xsKS4gSW4gb25lIHBvbGxpbmcgY3ljbGUgaW50ZXJmYWNlcyB3aGljaCBhcmUgcmVnaXN0ZXJlZCB0byBwb2xsaW5nIGFyZQorcHJvYmVkIGluIGEgcm91bmQtcm9iaW4gbWFubmVyLiBUaGUgbGltaXQgb2YgcGFja2V0cyBpbiBvbmUgc3VjaCBwcm9iZSBjYW4gYmUKK3NldCBwZXItZGV2aWNlIHZpYSBzeXNmcyBjbGFzcy9uZXQvPGRldmljZT4vd2VpZ2h0IC4KKworbmV0ZGV2X21heF9iYWNrbG9nCistLS0tLS0tLS0tLS0tLS0tLS0KKworTWF4aW11bSBudW1iZXIgIG9mICBwYWNrZXRzLCAgcXVldWVkICBvbiAgdGhlICBJTlBVVCAgc2lkZSwgd2hlbiB0aGUgaW50ZXJmYWNlCityZWNlaXZlcyBwYWNrZXRzIGZhc3RlciB0aGFuIGtlcm5lbCBjYW4gcHJvY2VzcyB0aGVtLgorCitvcHRtZW1fbWF4CistLS0tLS0tLS0tCisKK01heGltdW0gYW5jaWxsYXJ5IGJ1ZmZlciBzaXplIGFsbG93ZWQgcGVyIHNvY2tldC4gQW5jaWxsYXJ5IGRhdGEgaXMgYSBzZXF1ZW5jZQorb2Ygc3RydWN0IGNtc2doZHIgc3RydWN0dXJlcyB3aXRoIGFwcGVuZGVkIGRhdGEuCisKKzIuIC9wcm9jL3N5cy9uZXQvdW5peCAtIFBhcmFtZXRlcnMgZm9yIFVuaXggZG9tYWluIHNvY2tldHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgaXMgb25seSBvbmUgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeS4KK3VuaXhfZGdyYW1fcWxlbiBsaW1pdHMgdGhlIG1heCBudW1iZXIgb2YgZGF0YWdyYW1zIHF1ZXVlZCBpbiBVbml4IGRvbWFpbgorc29ja2V0J3MgYnVmZmVyLiBJdCB3aWxsIG5vdCB0YWtlIGVmZmVjdCB1bmxlc3MgUEZfVU5JWCBmbGFnIGlzIHNwaWNpZmllZC4KKworCiszLiAvcHJvYy9zeXMvbmV0L2lwdjQgLSBJUFY0IHNldHRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQbGVhc2Ugc2VlOiBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBhbmQgaXB2cy1zeXNjdGwudHh0IGZvcgorZGVzY3JpcHRpb25zIG9mIHRoZXNlIGVudHJpZXMuCisKKworNC4gQXBwbGV0YWxrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAvcHJvYy9zeXMvbmV0L2FwcGxldGFsayAgZGlyZWN0b3J5ICBob2xkcyB0aGUgQXBwbGV0YWxrIGNvbmZpZ3VyYXRpb24gZGF0YQord2hlbiBBcHBsZXRhbGsgaXMgbG9hZGVkLiBUaGUgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMgYXJlOgorCithYXJwLWV4cGlyeS10aW1lCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhbW91bnQgIG9mICB0aW1lICB3ZSBrZWVwIGFuIEFSUCBlbnRyeSBiZWZvcmUgZXhwaXJpbmcgaXQuIFVzZWQgdG8gYWdlIG91dAorb2xkIGhvc3RzLgorCithYXJwLXJlc29sdmUtdGltZQorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGFtb3VudCBvZiB0aW1lIHdlIHdpbGwgc3BlbmQgdHJ5aW5nIHRvIHJlc29sdmUgYW4gQXBwbGV0YWxrIGFkZHJlc3MuCisKK2FhcnAtcmV0cmFuc21pdC1saW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBudW1iZXIgb2YgdGltZXMgd2Ugd2lsbCByZXRyYW5zbWl0IGEgcXVlcnkgYmVmb3JlIGdpdmluZyB1cC4KKworYWFycC10aWNrLXRpbWUKKy0tLS0tLS0tLS0tLS0tCisKK0NvbnRyb2xzIHRoZSByYXRlIGF0IHdoaWNoIGV4cGlyZXMgYXJlIGNoZWNrZWQuCisKK1RoZSBkaXJlY3RvcnkgIC9wcm9jL25ldC9hcHBsZXRhbGsgIGhvbGRzIHRoZSBsaXN0IG9mIGFjdGl2ZSBBcHBsZXRhbGsgc29ja2V0cworb24gYSBtYWNoaW5lLgorCitUaGUgZmllbGRzICBpbmRpY2F0ZSAgdGhlIEREUCB0eXBlLCB0aGUgbG9jYWwgYWRkcmVzcyAoaW4gbmV0d29yazpub2RlIGZvcm1hdCkKK3RoZSByZW1vdGUgIGFkZHJlc3MsICB0aGUgIHNpemUgb2YgdGhlIHRyYW5zbWl0IHBlbmRpbmcgcXVldWUsIHRoZSBzaXplIG9mIHRoZQorcmVjZWl2ZWQgcXVldWUgIChieXRlcyB3YWl0aW5nIGZvciBhcHBsaWNhdGlvbnMgdG8gcmVhZCkgdGhlIHN0YXRlIGFuZCB0aGUgdWlkCitvd25pbmcgdGhlIHNvY2tldC4KKworL3Byb2MvbmV0L2F0YWxrX2lmYWNlIGxpc3RzICBhbGwgIHRoZSAgaW50ZXJmYWNlcyAgY29uZmlndXJlZCBmb3IgYXBwbGV0YWxrLkl0CitzaG93cyB0aGUgIG5hbWUgIG9mIHRoZSBpbnRlcmZhY2UsIGl0cyBBcHBsZXRhbGsgYWRkcmVzcywgdGhlIG5ldHdvcmsgcmFuZ2Ugb24KK3RoYXQgYWRkcmVzcyAgKG9yICBuZXR3b3JrIG51bWJlciBmb3IgcGhhc2UgMSBuZXR3b3JrcyksIGFuZCB0aGUgc3RhdHVzIG9mIHRoZQoraW50ZXJmYWNlLgorCisvcHJvYy9uZXQvYXRhbGtfcm91dGUgbGlzdHMgIGVhY2ggIGtub3duICBuZXR3b3JrICByb3V0ZS4gIEl0IGxpc3RzIHRoZSB0YXJnZXQKKyhuZXR3b3JrKSB0aGF0IHRoZSByb3V0ZSBsZWFkcyB0bywgdGhlIHJvdXRlciAobWF5IGJlIGRpcmVjdGx5IGNvbm5lY3RlZCksIHRoZQorcm91dGUgZmxhZ3MsIGFuZCB0aGUgZGV2aWNlIHRoZSByb3V0ZSBpcyB1c2luZy4KKworCis1LiBJUFgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIElQWCBwcm90b2NvbCBoYXMgbm8gdHVuYWJsZSB2YWx1ZXMgaW4gcHJvYy9zeXMvbmV0LgorCitUaGUgSVBYICBwcm90b2NvbCAgZG9lcywgIGhvd2V2ZXIsICBwcm92aWRlICBwcm9jL25ldC9pcHguIFRoaXMgbGlzdHMgZWFjaCBJUFgKK3NvY2tldCBnaXZpbmcgIHRoZSAgbG9jYWwgIGFuZCAgcmVtb3RlICBhZGRyZXNzZXMgIGluICBOb3ZlbGwgIGZvcm1hdCAodGhhdCBpcworbmV0d29yazpub2RlOnBvcnQpLiBJbiAgYWNjb3JkYW5jZSAgd2l0aCAgdGhlICBzdHJhbmdlICBOb3ZlbGwgIHRyYWRpdGlvbiwKK2V2ZXJ5dGhpbmcgYnV0IHRoZSBwb3J0IGlzIGluIGhleC4gTm90X0Nvbm5lY3RlZCBpcyBkaXNwbGF5ZWQgZm9yIHNvY2tldHMgdGhhdAorYXJlIG5vdCAgdGllZCB0byBhIHNwZWNpZmljIHJlbW90ZSBhZGRyZXNzLiBUaGUgVHggYW5kIFJ4IHF1ZXVlIHNpemVzIGluZGljYXRlCit0aGUgbnVtYmVyICBvZiAgYnl0ZXMgIHBlbmRpbmcgIGZvciAgdHJhbnNtaXNzaW9uICBhbmQgIHJlY2VwdGlvbi4gIFRoZSAgc3RhdGUKK2luZGljYXRlcyB0aGUgIHN0YXRlICB0aGUgIHNvY2tldCAgaXMgIGluIGFuZCB0aGUgdWlkIGlzIHRoZSBvd25pbmcgdWlkIG9mIHRoZQorc29ja2V0LgorCitUaGUgL3Byb2MvbmV0L2lweF9pbnRlcmZhY2UgIGZpbGUgbGlzdHMgYWxsIElQWCBpbnRlcmZhY2VzLiBGb3IgZWFjaCBpbnRlcmZhY2UKK2l0IGdpdmVzICB0aGUgbmV0d29yayBudW1iZXIsIHRoZSBub2RlIG51bWJlciwgYW5kIGluZGljYXRlcyBpZiB0aGUgbmV0d29yayBpcwordGhlIHByaW1hcnkgIG5ldHdvcmsuICBJdCAgYWxzbyAgaW5kaWNhdGVzICB3aGljaCAgZGV2aWNlICBpdCAgaXMgYm91bmQgdG8gKG9yCitJbnRlcm5hbCBmb3IgIGludGVybmFsICBuZXR3b3JrcykgIGFuZCAgdGhlICBGcmFtZSAgVHlwZSBpZiBhcHByb3ByaWF0ZS4gTGludXgKK3N1cHBvcnRzIDgwMi4zLCAgODAyLjIsICA4MDIuMiAgU05BUCAgYW5kIERJWCAoQmx1ZSBCb29rKSBldGhlcm5ldCBmcmFtaW5nIGZvcgorSVBYLgorCitUaGUgL3Byb2MvbmV0L2lweF9yb3V0ZSAgdGFibGUgIGhvbGRzICBhIGxpc3Qgb2YgSVBYIHJvdXRlcy4gRm9yIGVhY2ggcm91dGUgaXQKK2dpdmVzIHRoZSAgZGVzdGluYXRpb24gIG5ldHdvcmssIHRoZSByb3V0ZXIgbm9kZSAob3IgRGlyZWN0bHkpIGFuZCB0aGUgbmV0d29yaworYWRkcmVzcyBvZiB0aGUgcm91dGVyIChvciBDb25uZWN0ZWQpIGZvciBpbnRlcm5hbCBuZXR3b3Jrcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzcnEudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKaW5kZXggOWU1OTJjNy4uY2Y0MmI4MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNycS50eHQKQEAgLTgxLDYgKzgxLDggQEAKIAogJ2knICAgICAtIFNlbmQgYSBTSUdLSUxMIHRvIGFsbCBwcm9jZXNzZXMsIGV4Y2VwdCBmb3IgaW5pdC4KIAorJ2onICAgICAtIEZvcmNpYmx5ICJKdXN0IHRoYXcgaXQiIC0gZmlsZXN5c3RlbXMgZnJvemVuIGJ5IHRoZSBGSUZSRUVaRSBpb2N0bC4KKwogJ2snICAgICAtIFNlY3VyZSBBY2Nlc3MgS2V5IChTQUspIEtpbGxzIGFsbCBwcm9ncmFtcyBvbiB0aGUgY3VycmVudCB2aXJ0dWFsCiAgICAgICAgICAgY29uc29sZS4gTk9URTogU2VlIGltcG9ydGFudCBjb21tZW50cyBiZWxvdyBpbiBTQUsgc2VjdGlvbi4KIApAQCAtMTEzLDYgKzExNSw4IEBACiAKICd4JwktIFVzZWQgYnkgeG1vbiBpbnRlcmZhY2Ugb24gcHBjL3Bvd2VycGMgcGxhdGZvcm1zLgogCisneicJLSBEdW1wIHRoZSBmdHJhY2UgYnVmZmVyCisKICcwJy0nOScgLSBTZXRzIHRoZSBjb25zb2xlIGxvZyBsZXZlbCwgY29udHJvbGxpbmcgd2hpY2gga2VybmVsIG1lc3NhZ2VzCiAgICAgICAgICAgd2lsbCBiZSBwcmludGVkIHRvIHlvdXIgY29uc29sZS4gKCcwJywgZm9yIGV4YW1wbGUgd291bGQgbWFrZQogICAgICAgICAgIGl0IHNvIHRoYXQgb25seSBlbWVyZ2VuY3kgbWVzc2FnZXMgbGlrZSBQQU5JQ3Mgb3IgT09QU2VzIHdvdWxkCkBAIC0xNjAsNiArMTY0LDkgQEAKIGFyZSB1bmFibGUgdG8ga2lsbCBhbnkgb3RoZXIgd2F5LCBlc3BlY2lhbGx5IGlmIGl0J3Mgc3Bhd25pbmcgb3RoZXIKIHByb2Nlc3Nlcy4KIAorIidKJ3VzdCB0aGF3IGl0IiBpcyB1c2VmdWwgaWYgeW91ciBzeXN0ZW0gYmVjb21lcyB1bnJlc3BvbnNpdmUgZHVlIHRvIGEgZnJvemVuCisocHJvYmFibHkgcm9vdCkgZmlsZXN5c3RlbSB2aWEgdGhlIEZJRlJFRVpFIGlvY3RsLgorCiAqICBTb21ldGltZXMgU3lzUnEgc2VlbXMgdG8gZ2V0ICdzdHVjaycgYWZ0ZXIgdXNpbmcgaXQsIHdoYXQgY2FuIEkgZG8/CiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiBUaGF0IGhhcHBlbnMgdG8gbWUsIGFsc28uIEkndmUgZm91bmQgdGhhdCB0YXBwaW5nIHNoaWZ0LCBhbHQsIGFuZCBjb250cm9sCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYWNlcG9pbnRzLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2Vwb2ludHMudHh0CmluZGV4IDZmMGEwNDQuLmMwZTFjZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhY2Vwb2ludHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdHJhY2Vwb2ludHMudHh0CkBAIC00NSw4ICs0NSw4IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgogCiBERUNMQVJFX1RSQUNFKHN1YnN5c19ldmVudG5hbWUsCi0JVFBQUk9UTyhpbnQgZmlyc3RhcmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCi0JVFBBUkdTKGZpcnN0YXJnLCBwKSk7CisJVFBfUFJPVE8oaW50IGZpcnN0YXJnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAorCVRQX0FSR1MoZmlyc3RhcmcsIHApKTsKIAogSW4gc3Vic3lzL2ZpbGUuYyAod2hlcmUgdGhlIHRyYWNpbmcgc3RhdGVtZW50IG11c3QgYmUgYWRkZWQpIDoKIApAQCAtNjYsMTAgKzY2LDEwIEBACiAgICAgLSBzdWJzeXMgaXMgdGhlIG5hbWUgb2YgeW91ciBzdWJzeXN0ZW0uCiAgICAgLSBldmVudG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIHRyYWNlLgogCi0tIFRQUFJPVE8oaW50IGZpcnN0YXJnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIGlzIHRoZSBwcm90b3R5cGUgb2YgdGhlCistIFRQX1BST1RPKGludCBmaXJzdGFyZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKSBpcyB0aGUgcHJvdG90eXBlIG9mIHRoZQogICBmdW5jdGlvbiBjYWxsZWQgYnkgdGhpcyB0cmFjZXBvaW50LgogCi0tIFRQQVJHUyhmaXJzdGFyZywgcCkgYXJlIHRoZSBwYXJhbWV0ZXJzIG5hbWVzLCBzYW1lIGFzIGZvdW5kIGluIHRoZQorLSBUUF9BUkdTKGZpcnN0YXJnLCBwKSBhcmUgdGhlIHBhcmFtZXRlcnMgbmFtZXMsIHNhbWUgYXMgZm91bmQgaW4gdGhlCiAgIHByb3RvdHlwZS4KIAogQ29ubmVjdGluZyBhIGZ1bmN0aW9uIChwcm9iZSkgdG8gYSB0cmFjZXBvaW50IGlzIGRvbmUgYnkgcHJvdmlkaW5nIGEKQEAgLTEwMywxMyArMTAzLDE0IEBACiAKICogUHJvYmUgLyB0cmFjZXBvaW50IGV4YW1wbGUKIAotU2VlIHRoZSBleGFtcGxlIHByb3ZpZGVkIGluIHNhbXBsZXMvdHJhY2Vwb2ludHMvc3JjCitTZWUgdGhlIGV4YW1wbGUgcHJvdmlkZWQgaW4gc2FtcGxlcy90cmFjZXBvaW50cwogCi1Db21waWxlIHRoZW0gd2l0aCB5b3VyIGtlcm5lbC4KK0NvbXBpbGUgdGhlbSB3aXRoIHlvdXIga2VybmVsLiAgVGhleSBhcmUgYnVpbHQgZHVyaW5nICdtYWtlJyAobm90CisnbWFrZSBtb2R1bGVzJykgd2hlbiBDT05GSUdfU0FNUExFX1RSQUNFUE9JTlRTPW0uCiAKIFJ1biwgYXMgcm9vdCA6Ci1tb2Rwcm9iZSB0cmFjZXBvaW50LWV4YW1wbGUgKGluc21vZCBvcmRlciBpcyBub3QgaW1wb3J0YW50KQotbW9kcHJvYmUgdHJhY2Vwb2ludC1wcm9iZS1leGFtcGxlCi1jYXQgL3Byb2MvdHJhY2Vwb2ludC1leGFtcGxlIChyZXR1cm5zIGFuIGV4cGVjdGVkIGVycm9yKQotcm1tb2QgdHJhY2Vwb2ludC1leGFtcGxlIHRyYWNlcG9pbnQtcHJvYmUtZXhhbXBsZQorbW9kcHJvYmUgdHJhY2Vwb2ludC1zYW1wbGUgKGluc21vZCBvcmRlciBpcyBub3QgaW1wb3J0YW50KQorbW9kcHJvYmUgdHJhY2Vwb2ludC1wcm9iZS1zYW1wbGUKK2NhdCAvcHJvYy90cmFjZXBvaW50LXNhbXBsZSAocmV0dXJucyBhbiBleHBlY3RlZCBlcnJvcikKK3JtbW9kIHRyYWNlcG9pbnQtc2FtcGxlIHRyYWNlcG9pbnQtcHJvYmUtc2FtcGxlCiBkbWVzZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9rbWVtdHJhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi92bS9rbWVtdHJhY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTZkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL2ttZW10cmFjZS50eHQKQEAgLTAsMCArMSwxMjYgQEAKKwkJCWttZW10cmFjZSAtIEtlcm5lbCBNZW1vcnkgVHJhY2VyCisKKwkJCSAgYnkgRWR1YXJkIC0gR2FicmllbCBNdW50ZWFudQorCQkJICAgICA8ZWR1YXJkLm11bnRlYW51QGxpbnV4MzYwLnJvPgorCitJLiBJbnRyb2R1Y3Rpb24KKz09PT09PT09PT09PT09PQorCitrbWVtdHJhY2UgaGVscHMga2VybmVsIGRldmVsb3BlcnMgZmlndXJlIG91dCB0d28gdGhpbmdzOgorMSkgaG93IGRpZmZlcmVudCBhbGxvY2F0b3JzIChTTEFCLCBTTFVCIGV0Yy4pIHBlcmZvcm0KKzIpIGhvdyBrZXJuZWwgY29kZSBhbGxvY2F0ZXMgbWVtb3J5IGFuZCBob3cgbXVjaAorCitUbyBkbyB0aGlzLCB3ZSB0cmFjZSBldmVyeSBhbGxvY2F0aW9uIGFuZCBleHBvcnQgaW5mb3JtYXRpb24gdG8gdGhlIHVzZXJzcGFjZQordGhyb3VnaCB0aGUgcmVsYXkgaW50ZXJmYWNlLiBXZSBleHBvcnQgdGhpbmdzIHN1Y2ggYXMgdGhlIG51bWJlciBvZiByZXF1ZXN0ZWQKK2J5dGVzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IGFsbG9jYXRlZCAoaS5lLiBpbmNsdWRpbmcgaW50ZXJuYWwKK2ZyYWdtZW50YXRpb24pLCB3aGV0aGVyIHRoaXMgaXMgYSBzbGFiIGFsbG9jYXRpb24gb3IgYSBwbGFpbiBrbWFsbG9jKCkgYW5kIHNvCitvbi4KKworVGhlIGFjdHVhbCBhbmFseXNpcyBpcyBwZXJmb3JtZWQgYnkgYSB1c2Vyc3BhY2UgdG9vbCAoc2VlIHNlY3Rpb24gSUlJIGZvcgorZGV0YWlscyBvbiB3aGVyZSB0byBnZXQgaXQgZnJvbSkuIEl0IGxvZ3MgdGhlIGRhdGEgZXhwb3J0ZWQgYnkgdGhlIGtlcm5lbCwKK3Byb2Nlc3NlcyBpdCBhbmQgKGFzIG9mIHdyaXRpbmcgdGhpcykgY2FuIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKy0gdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGFuZCBmcmFnbWVudGF0aW9uIHBlciBjYWxsLXNpdGUKKy0gdGhlIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGFuZCBmcmFnbWVudGF0aW9uIHBlciBhbGxvY2F0aW9uCistIHRvdGFsIG1lbW9yeSBhbGxvY2F0ZWQgYW5kIGZyYWdtZW50YXRpb24gaW4gdGhlIGNvbGxlY3RlZCBkYXRhc2V0CistIG51bWJlciBvZiBjcm9zcy1DUFUgYWxsb2NhdGlvbiBhbmQgZnJlZXMgKG1ha2VzIHNlbnNlIGluIE5VTUEgZW52aXJvbm1lbnRzKQorCitNb3Jlb3ZlciwgaXQgY2FuIHBvdGVudGlhbGx5IGZpbmQgaW5jb25zaXN0ZW50IGFuZCBlcnJvbmVvdXMgYmVoYXZpb3IgaW4KK2tlcm5lbCBjb2RlLCBzdWNoIGFzIHVzaW5nIHNsYWIgZnJlZSBmdW5jdGlvbnMgb24ga21hbGxvYydlZCBtZW1vcnkgb3IKK2FsbG9jYXRpbmcgbGVzcyBtZW1vcnkgdGhhbiByZXF1ZXN0ZWQgKGJ1dCBub3QgdHJ1bHkgZmFpbGVkIGFsbG9jYXRpb25zKS4KKwora21lbXRyYWNlIGFsc28gbWFrZXMgcHJvdmlzaW9ucyBmb3IgdHJhY2luZyBvbiBzb21lIGFyY2ggYW5kIGFuYWx5c2luZyB0aGUKK2RhdGEgb24gYW5vdGhlci4KKworSUkuIERlc2lnbiBhbmQgZ29hbHMKKz09PT09PT09PT09PT09PT09PT09CisKK2ttZW10cmFjZSB3YXMgZGVzaWduZWQgdG8gaGFuZGxlIHJhdGhlciBsYXJnZSBhbW91bnRzIG9mIGRhdGEuIFRodXMsIGl0IHVzZXMKK3RoZSByZWxheSBpbnRlcmZhY2UgdG8gZXhwb3J0IHdoYXRldmVyIGlzIGxvZ2dlZCB0byB1c2Vyc3BhY2UsIHdoaWNoIHRoZW4KK3N0b3JlcyBpdC4gQW5hbHlzaXMgYW5kIHJlcG9ydGluZyBpcyBkb25lIGFzeW5jaHJvbm91c2x5LCB0aGF0IGlzLCBhZnRlciB0aGUKK2RhdGEgaXMgY29sbGVjdGVkIGFuZCBzdG9yZWQuIEJ5IGRlc2lnbiwgaXQgYWxsb3dzIG9uZSB0byBsb2cgYW5kIGFuYWx5c2UKK29uIGRpZmZlcmVudCBtYWNoaW5lcyBhbmQgZGlmZmVyZW50IGFyY2hlcy4KKworQXMgb2Ygd3JpdGluZyB0aGlzLCB0aGUgQUJJIGlzIG5vdCBjb25zaWRlcmVkIHN0YWJsZSwgdGhvdWdoIGl0IG1pZ2h0IG5vdAorY2hhbmdlIG11Y2guIEhvd2V2ZXIsIG5vIGd1YXJhbnRlZXMgYXJlIG1hZGUgYWJvdXQgY29tcGF0aWJpbGl0eSB5ZXQuIFdoZW4KK2RlZW1lZCBzdGFibGUsIHRoZSBBQkkgc2hvdWxkIHN0aWxsIGFsbG93IGVhc3kgZXh0ZW5zaW9uIHdoaWxlIG1haW50YWluaW5nCitiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiBUaGlzIGlzIGRlc2NyaWJlZCBmdXJ0aGVyIGluIERvY3VtZW50YXRpb24vQUJJLgorCitTdW1tYXJ5IG9mIGRlc2lnbiBnb2FsczoKKwktIGFsbG93IGxvZ2dpbmcgYW5kIGFuYWx5c2lzIHRvIGJlIGRvbmUgYWNyb3NzIGRpZmZlcmVudCBtYWNoaW5lcworCS0gYmUgZmFzdCBhbmQgYW50aWNpcGF0ZSB1c2FnZSBpbiBoaWdoLWxvYWQgZW52aXJvbm1lbnRzICgqKQorCS0gYmUgcmVhc29uYWJseSBleHRlbnNpYmxlCisJLSBtYWtlIGl0IHBvc3NpYmxlIGZvciBHTlUvTGludXggZGlzdHJpYnV0aW9ucyB0byBoYXZlIGttZW10cmFjZQorCWluY2x1ZGVkIGluIHRoZWlyIHJlcG9zaXRvcmllcworCisoKikgLSBvbmUgb2YgdGhlIHJlYXNvbnMgUGVra2EgRW5iZXJnJ3Mgb3JpZ2luYWwgdXNlcnNwYWNlIGRhdGEgYW5hbHlzaXMKKyAgICB0b29sJ3MgY29kZSB3YXMgcmV3cml0dGVuIGZyb20gUGVybCB0byBDIChhbHRob3VnaCB0aGlzIGlzIG1vcmUgdGhhbiBhCisgICAgc2ltcGxlIGNvbnZlcnNpb24pCisKKworSUlJLiBRdWljayB1c2FnZSBndWlkZQorPT09PT09PT09PT09PT09PT09PT09PQorCisxKSBHZXQgYSBrZXJuZWwgdGhhdCBzdXBwb3J0cyBrbWVtdHJhY2UgYW5kIGJ1aWxkIGl0IGFjY29yZGluZ2x5IChpLmUuIGVuYWJsZQorQ09ORklHX0tNRU1UUkFDRSkuCisKKzIpIEdldCB0aGUgdXNlcnNwYWNlIHRvb2wgYW5kIGJ1aWxkIGl0OgorJCBnaXQtY2xvbmUgZ2l0Oi8vcmVwby5vci5jei9rbWVtdHJhY2UtdXNlci5naXQJCSMgY3VycmVudCByZXBvc2l0b3J5CiskIGNkIGttZW10cmFjZS11c2VyLworJCAuL2F1dG9nZW4uc2gKKyQgLi9jb25maWd1cmUKKyQgbWFrZQorCiszKSBCb290IHRoZSBrbWVtdHJhY2UtZW5hYmxlZCBrZXJuZWwgaWYgeW91IGhhdmVuJ3QsIHByZWZlcmFibHkgaW4gdGhlCisnc2luZ2xlJyBydW5sZXZlbCAoc28gdGhhdCByZWxheSBidWZmZXJzIGRvbid0IGZpbGwgdXAgZWFzaWx5KSwgYW5kIHJ1bgora21lbXRyYWNlOgorIyAnJCcgZG9lcyBub3QgbWVhbiB1c2VyLCBidXQgcm9vdCBoZXJlLgorJCBtb3VudCAtdCBkZWJ1Z2ZzIG5vbmUgL3N5cy9rZXJuZWwvZGVidWcKKyQgbW91bnQgLXQgcHJvYyBub25lIC9wcm9jCiskIGNkIHBhdGgvdG8va21lbXRyYWNlLXVzZXIvCiskIC4va21lbXRyYWNlZAorV2FpdCBhIGJpdCwgdGhlbiBzdG9wIGl0IHdpdGggQ1RSTCtDLgorJCBjYXQgL3N5cy9rZXJuZWwvZGVidWcva21lbXRyYWNlL3RvdGFsX292ZXJydW5zCSMgQ2hlY2sgaWYgd2UgZGlkbid0CisJCQkJCQkJIyBvdmVycnVuLCBzaG91bGQKKwkJCQkJCQkjIGJlIHplcm8uCiskIChPcHRpb25hbGx5KSBbUnVuIGttZW10cmFjZV9jaGVjayBzZXBhcmF0ZWx5IG9uIGVhY2ggY3B1WzAtOV0qLm91dCBmaWxlIHRvCisJCWNoZWNrIGl0cyBjb3JyZWN0bmVzc10KKyQgLi9rbWVtdHJhY2UtcmVwb3J0CisKK05vdyB5b3Ugc2hvdWxkIGhhdmUgYSBuaWNlIGFuZCBzaG9ydCBzdW1tYXJ5IG9mIGhvdyB0aGUgYWxsb2NhdG9yIHBlcmZvcm1zLgorCitJVi4gRkFRIGFuZCBrbm93biBpc3N1ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitROiAnY2F0IC9zeXMva2VybmVsL2RlYnVnL2ttZW10cmFjZS90b3RhbF9vdmVycnVucycgaXMgbm9uLXplcm8sIGhvdyBkbyBJIGZpeAordGhpcz8gU2hvdWxkIEkgd29ycnk/CitBOiBJZiBpdCdzIG5vbi16ZXJvLCB0aGlzIGFmZmVjdHMga21lbXRyYWNlJ3MgYWNjdXJhY3ksIGRlcGVuZGluZyBvbiBob3cKK2xhcmdlIHRoZSBudW1iZXIgaXMuIFlvdSBjYW4gZml4IGl0IGJ5IHN1cHBseWluZyBhIGhpZ2hlcgorJ2ttZW10cmFjZS5zdWJidWZzPU4nIGtlcm5lbCBwYXJhbWV0ZXIuCistLS0KKworUToga21lbXRyYWNlX2NoZWNrIHJlcG9ydHMgZXJyb3JzLCBob3cgZG8gSSBmaXggdGhpcz8gU2hvdWxkIEkgd29ycnk/CitBOiBUaGlzIGlzIGEgYnVnIGFuZCBzaG91bGQgYmUgcmVwb3J0ZWQuIEl0IGNhbiBvY2N1ciBmb3IgYSB2YXJpZXR5IG9mCityZWFzb25zOgorCS0gcG9zc2libGUgYnVncyBpbiByZWxheSBjb2RlCisJLSBwb3NzaWJsZSBtaXN1c2Ugb2YgcmVsYXkgYnkga21lbXRyYWNlCisJLSB0aW1lc3RhbXBzIGJlaW5nIGNvbGxlY3RlZCB1bm9yZGVybHkKK09yIHlvdSBtYXkgZml4IGl0IHlvdXJzZWxmIGFuZCBzZW5kIHVzIGEgcGF0Y2guCistLS0KKworUToga21lbXRyYWNlX3JlcG9ydCBzaG93cyBtYW55IGVycm9ycywgaG93IGRvIEkgZml4IHRoaXM/IFNob3VsZCBJIHdvcnJ5PworQTogVGhpcyBpcyBhIGtub3duIGlzc3VlIGFuZCBJJ20gd29ya2luZyBvbiBpdC4gVGhlc2UgbWlnaHQgYmUgdHJ1ZSBlcnJvcnMKK2luIGtlcm5lbCBjb2RlLCB3aGljaCBtYXkgaGF2ZSBpbmNvbnNpc3RlbnQgYmVoYXZpb3IgKGUuZy4gYWxsb2NhdGluZyBtZW1vcnkKK3dpdGgga21lbV9jYWNoZV9hbGxvYygpIGFuZCBmcmVlaW5nIGl0IHdpdGgga2ZyZWUoKSkuIFBla2thIEVuYmVyZyBwb2ludGVkCitvdXQgdGhpcyBiZWhhdmlvciBtYXkgd29yayB3aXRoIFNMQUIsIGJ1dCBtYXkgZmFpbCB3aXRoIG90aGVyIGFsbG9jYXRvcnMuCisKK0l0IG1heSBhbHNvIGJlIGR1ZSB0byBsYWNrIG9mIHRyYWNpbmcgaW4gc29tZSB1bnVzdWFsIGFsbG9jYXRvciBmdW5jdGlvbnMuCisKK1dlIGRvbid0IHdhbnQgYnVnIHJlcG9ydHMgcmVnYXJkaW5nIHRoaXMgaXNzdWUgeWV0LgorLS0tCisKK1YuIFNlZSBhbHNvCis9PT09PT09PT09PQorCitEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9kZWJ1Z2ZzLWttZW10cmFjZQorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL251bWFfbWVtb3J5X3BvbGljeS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL251bWFfbWVtb3J5X3BvbGljeS50eHQKaW5kZXggNmFhYWViMy4uYmU0NWRiYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9udW1hX21lbW9yeV9wb2xpY3kudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdm0vbnVtYV9tZW1vcnlfcG9saWN5LnR4dApAQCAtOCw3ICs4LDggQEAKIGRvY3VtZW50IGF0dGVtcHRzIHRvIGRlc2NyaWJlIHRoZSBjb25jZXB0cyBhbmQgQVBJcyBvZiB0aGUgMi42IG1lbW9yeSBwb2xpY3kKIHN1cHBvcnQuCiAKLU1lbW9yeSBwb2xpY2llcyBzaG91bGQgbm90IGJlIGNvbmZ1c2VkIHdpdGggY3B1c2V0cyAoRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dCkKK01lbW9yeSBwb2xpY2llcyBzaG91bGQgbm90IGJlIGNvbmZ1c2VkIHdpdGggY3B1c2V0cworKERvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dCkKIHdoaWNoIGlzIGFuIGFkbWluaXN0cmF0aXZlIG1lY2hhbmlzbSBmb3IgcmVzdHJpY3RpbmcgdGhlIG5vZGVzIGZyb20gd2hpY2gKIG1lbW9yeSBtYXkgYmUgYWxsb2NhdGVkIGJ5IGEgc2V0IG9mIHByb2Nlc3Nlcy4gTWVtb3J5IHBvbGljaWVzIGFyZSBhCiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgdGhhdCBhIE5VTUEtYXdhcmUgYXBwbGljYXRpb24gY2FuIHRha2UgYWR2YW50YWdlIG9mLiAgV2hlbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlX21pZ3JhdGlvbiBiL0RvY3VtZW50YXRpb24vdm0vcGFnZV9taWdyYXRpb24KaW5kZXggZDVmZGZkMy4uNjUxM2ZlMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlX21pZ3JhdGlvbgorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2VfbWlncmF0aW9uCkBAIC0zNyw3ICszNyw4IEBACiAKIExhcmdlciBpbnN0YWxsYXRpb25zIHVzdWFsbHkgcGFydGl0aW9uIHRoZSBzeXN0ZW0gdXNpbmcgY3B1c2V0cyBpbnRvCiBzZWN0aW9ucyBvZiBub2Rlcy4gUGF1bCBKYWNrc29uIGhhcyBlcXVpcHBlZCBjcHVzZXRzIHdpdGggdGhlIGFiaWxpdHkgdG8KLW1vdmUgcGFnZXMgd2hlbiBhIHRhc2sgaXMgbW92ZWQgdG8gYW5vdGhlciBjcHVzZXQgKFNlZSAuLi9jcHVzZXRzLnR4dCkuCittb3ZlIHBhZ2VzIHdoZW4gYSB0YXNrIGlzIG1vdmVkIHRvIGFub3RoZXIgY3B1c2V0IChTZWUKK0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dCkuCiBDcHVzZXRzIGFsbG93cyB0aGUgYXV0b21hdGlvbiBvZiBwcm9jZXNzIGxvY2FsaXR5LiBJZiBhIHRhc2sgaXMgbW92ZWQgdG8KIGEgbmV3IGNwdXNldCB0aGVuIGFsc28gYWxsIGl0cyBwYWdlcyBhcmUgbW92ZWQgd2l0aCBpdCBzbyB0aGF0IHRoZQogcGVyZm9ybWFuY2Ugb2YgdGhlIHByb2Nlc3MgZG9lcyBub3Qgc2luayBkcmFtYXRpY2FsbHkuIEFsc28gdGhlIHBhZ2VzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvZmFrZS1udW1hLWZvci1jcHVzZXRzIGIvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Zha2UtbnVtYS1mb3ItY3B1c2V0cwppbmRleCAzM2JiNTY2Li4wZjExZDliIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvZmFrZS1udW1hLWZvci1jcHVzZXRzCisrKyBiL0RvY3VtZW50YXRpb24veDg2L3g4Nl82NC9mYWtlLW51bWEtZm9yLWNwdXNldHMKQEAgLTcsNyArNyw4IEBACiBhc3NpZ24gdGhlbSB0byBjcHVzZXRzIGFuZCB0aGVpciBhdHRhY2hlZCB0YXNrcy4gIFRoaXMgaXMgYSB3YXkgb2YgbGltaXRpbmcgdGhlCiBhbW91bnQgb2Ygc3lzdGVtIG1lbW9yeSB0aGF0IGFyZSBhdmFpbGFibGUgdG8gYSBjZXJ0YWluIGNsYXNzIG9mIHRhc2tzLgogCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmVhdHVyZXMgb2YgY3B1c2V0cywgc2VlIERvY3VtZW50YXRpb24vY3B1c2V0cy50eHQuCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmVhdHVyZXMgb2YgY3B1c2V0cywgc2VlCitEb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1c2V0cy50eHQuCiBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIHlvdSBjYW4gdXNlIGZvciB5b3VyIG5lZWRzLiAgRm9yCiBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBudW1hPWZha2UgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmQgaXRzIHZhcmlvdXMgd2F5cyBvZgogY29uZmlndXJpbmcgZmFrZSBub2Rlcywgc2VlIERvY3VtZW50YXRpb24veDg2L3g4Nl82NC9ib290LW9wdGlvbnMudHh0LgpAQCAtMzIsNyArMzMsNyBAQAogCU9uIG5vZGUgMyB0b3RhbHBhZ2VzOiAxMzEwNzIKIAogTm93IGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGZvciBtb3VudGluZyB0aGUgY3B1c2V0cyBmaWxlc3lzdGVtIGZyb20KLURvY3VtZW50YXRpb24vY3B1c2V0cy50eHQsIHlvdSBjYW4gYXNzaWduIGZha2Ugbm9kZXMgKGkuZS4gY29udGlndW91cyBtZW1vcnkKK0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dCwgeW91IGNhbiBhc3NpZ24gZmFrZSBub2RlcyAoaS5lLiBjb250aWd1b3VzIG1lbW9yeQogYWRkcmVzcyBzcGFjZXMpIHRvIGluZGl2aWR1YWwgY3B1c2V0czoKIAogCVtyb290QHhyb2FkcyAvXSMgbWtkaXIgZXhhbXBsZXNldApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBjNWY0ZTlkLi45NjczY2QyIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMzU3LDYgKzM1Nyw3IEBACiBQOglJdmFuIEtva3NoYXlza3kKIE06CWlua0BqdXJhc3NpYy5wYXJrLm1zdS5ydQogUzoJTWFpbnRhaW5lZCBmb3IgMi40OyBQQ0kgc3VwcG9ydCBmb3IgMi42LgorTDoJbGludXgtYWxwaGFAdmdlci5rZXJuZWwub3JnCiAKIEFNRCBHRU9ERSBDUzU1MzYgVVNCIERFVklDRSBDT05UUk9MTEVSIERSSVZFUgogUDoJVGhvbWFzIERhaGxtYW5uCkBAIC0xNDIxLDYgKzE0MjIsMTEgQEAKIE06CURvdWdsYXNfV2FyemVjaGFAZGVsbC5jb20KIFM6CU1haW50YWluZWQKIAorREVMTCBXTUkgRVhUUkFTIERSSVZFUgorUDoJTWF0dGhldyBHYXJyZXR0CitNOgltamc1OUBzcmNmLnVjYW0ub3JnCitTOglNYWludGFpbmVkCisKIERFVklDRSBOVU1CRVIgUkVHSVNUUlkKIFA6CVRvcmJlbiBNYXRoaWFzZW4KIE06CWRldmljZUBsYW5hbmEub3JnCkBAIC0xNzYyLDYgKzE3NjgsMTIgQEAKIEw6CWxpbnV4LWZzZGV2ZWxAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKK0ZJTlRFSyBGNzUzNzVTIEhBUkRXQVJFIE1PTklUT1IgQU5EIEZBTiBDT05UUk9MTEVSIERSSVZFUgorUDoJUmlrdSBWb2lwaW8KK006CXJpa3UudmlwaW9AaWtpLmZpCitMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCitTOglNYWludGFpbmVkCisKIEZJUkVXSVJFIFNVQlNZU1RFTSAoZHJpdmVycy9maXJld2lyZSwgPGxpbnV4L2ZpcmV3aXJlKi5oPikKIFA6CUtyaXN0aWFuIEhvZWdzYmVyZywgU3RlZmFuIFJpY2h0ZXIKIE06CWtyaEByZWRoYXQuY29tLCBzdGVmYW5yQHM1cjYuaW4tYmVybGluLmRlCkBAIC0xOTQ0LDYgKzE5NTYsMTIgQEAKIFc6CWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9mc2VpZGVsL2hkYXBzLwogUzoJTWFpbnRhaW5lZAogCitIWVBFUlZJU09SIFZJUlRVQUwgQ09OU09MRSBEUklWRVIKK0w6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitTOglPZGQgRml4ZXMKK0Y6CWRyaXZlcnMvY2hhci9odmNfKgorCiBHU1BDQSBGSU5FUElYIFNVQkRSSVZFUgogUDoJRnJhbmsgWmFnbwogTToJZnJhbmtAemFnby5uZXQKQEAgLTIyMDEsMjUgKzIyMTksMTIgQEAKIFQ6CXF1aWx0IGtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvYmFydC9wYXRhLTIuNi8KIFM6CU1haW50YWluZWQKIAotSURFL0FUQVBJIENEUk9NIERSSVZFUgorSURFL0FUQVBJIERSSVZFUlMKIFA6CUJvcmlzbGF2IFBldGtvdgogTToJcGV0a292YmJAZ21haWwuY29tCiBMOglsaW51eC1pZGVAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKLUlERS9BVEFQSSBGTE9QUFkgRFJJVkVSUwotUDoJUGF1bCBCcmlzdG93Ci1NOglQYXVsIEJyaXN0b3cgPHBhdWxAcGF1bGJyaXN0b3cubmV0PgotVzoJaHR0cDovL3BhdWxicmlzdG93Lm5ldC9saW51eC9pZGVmbG9wcHkuaHRtbAotTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAotCi1JREUvQVRBUEkgVEFQRSBEUklWRVJTCi1QOglHYWRpIE94bWFuCi1NOglHYWRpIE94bWFuIDxnYWRpb0BuZXR2aXNpb24ubmV0LmlsPgotTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAotCiBJRExFLUk3MzAwCiBQOglBbmR5IEhlbnJvaWQKIE06CWFuZHJldy5kLmhlbnJvaWRAaW50ZWwuY29tCkBAIC0yNjU0LDYgKzI2NTksMTIgQEAKIEw6CWtnZGItYnVncmVwb3J0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogCitLTUVNVFJBQ0UKK1A6CUVkdWFyZCAtIEdhYnJpZWwgTXVudGVhbnUKK006CWVkdWFyZC5tdW50ZWFudUBsaW51eDM2MC5ybworTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorCiBLUFJPQkVTCiBQOglBbmFudGggTiBNYXZpbmFrYXlhbmFoYWxsaQogTToJYW5hbnRoQGluLmlibS5jb20KQEAgLTI5MjQsNiArMjkzNSwxMiBAQAogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJU3VwcG9ydGVkCiAKK01BUlZFTEwgU09DIE1NQy9TRC9TRElPIENPTlRST0xMRVIgRFJJVkVSCitQOglOaWNvbGFzIFBpdHJlCitNOgluaWNvQGNhbS5vcmcKK0w6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKwogTUFSVkVMTCBZVUtPTiAvIFNZU0tPTk5FQ1QgRFJJVkVSCiBQOglNaXJrbyBMaW5kbmVyCiBNOgltbGluZG5lckBzeXNrb25uZWN0LmRlCkBAIC0zMDM0LDggKzMwNTEsOSBAQAogCiBNVUxUSUZVTkNUSU9OIERFVklDRVMgKE1GRCkKIFA6CVNhbXVlbCBPcnRpegotTToJc2FtZW9Ab3BlbmVkaGFuZC5jb20KK006CXNhbWVvQGxpbnV4LmludGVsLmNvbQogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9zYW1lby9tZmQtMi42LmdpdAogUzoJU3VwcG9ydGVkCiAKIE1VTFRJTUVESUEgQ0FSRCAoTU1DKSwgU0VDVVJFIERJR0lUQUwgKFNEKSBBTkQgU0RJTyBTVUJTWVNURU0KQEAgLTMxMTAsNyArMzEyOCw3IEBACiBMOgluZXRlbUBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwogUzoJTWFpbnRhaW5lZAogCi1ORVRFUklPTiAoUzJJTykgWGZyYW1lIDEwR2JFIERSSVZFUgorTkVURVJJT04gKFMySU8pIDEwR2JFIERSSVZFUiAoeGZyYW1lL3Z4Z2UpCiBQOglSYW1rcmlzaG5hIFZlcGEKIE06CXJhbS52ZXBhQG5ldGVyaW9uLmNvbQogUDoJUmFzdGFwdXIgU2FudG9zaApAQCAtMzExOSw4ICszMTM3LDExIEBACiBNOglzaXZha3VtYXIuc3VicmFtYW5pQG5ldGVyaW9uLmNvbQogUDoJU3JlZW5pdmFzYSBIb25udXIKIE06CXNyZWVuaXZhc2EuaG9ubnVyQG5ldGVyaW9uLmNvbQorUDoJQW5pbCBNdXJ0aHkKK006CWFuaWwubXVydGh5QG5ldGVyaW9uLmNvbQogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL3RyYWMubmV0ZXJpb24uY29tL2NnaS1iaW4vdHJhYy5jZ2kvd2lraS9UaXRsZUluZGV4P2Fub255bW91cworVzoJaHR0cDovL3RyYWMubmV0ZXJpb24uY29tL2NnaS1iaW4vdHJhYy5jZ2kvd2lraS9MaW51eD9Bbm9ueW1vdXMKK1c6CWh0dHA6Ly90cmFjLm5ldGVyaW9uLmNvbS9jZ2ktYmluL3RyYWMuY2dpL3dpa2kvWDMxMDBMaW51eD9Bbm9ueW1vdXMKIFM6CVN1cHBvcnRlZAogCiBORVRGSUxURVIvSVBUQUJMRVMvSVBDSEFJTlMKQEAgLTM0MTEsNiArMzQzMiwxMSBAQAogTToJamltLmNyb21pZUBnbWFpbC5jb20KIFM6CU1haW50YWluZWQKIAorUENBOTUzMiBMRUQgRFJJVkVSCitQOglSaWt1IFZvaXBpbworTToJcmlrdS52b2lwaW9AaWtpLmZpCitTOglNYWludGFpbmVkCisKIFBDSSBFUlJPUiBSRUNPVkVSWQogUDoJTGluYXMgVmVwc3RhcwogTToJbGluYXNAYXVzdGluLmlibS5jb20KQEAgLTM5MDgsNyArMzkzNCwxNCBAQAogU0VDVVJFIERJR0lUQUwgSE9TVCBDT05UUk9MTEVSIElOVEVSRkFDRSAoU0RIQ0kpIERSSVZFUgogUDoJUGllcnJlIE9zc21hbgogTToJZHJ6ZXVzLXNkaGNpQGRyemV1cy5jeAotTDoJc2RoY2ktZGV2ZWxAbGlzdC5kcnpldXMuY3gKK0w6CXNkaGNpLWRldmVsQGxpc3RzLm9zc21hbi5ldQorUzoJTWFpbnRhaW5lZAorCitTRUNVUkUgRElHSVRBTCBIT1NUIENPTlRST0xMRVIgSU5URVJGQUNFLCBPUEVOIEZJUk1XQVJFIEJJTkRJTkdTIChTREhDSS1PRikKK1A6CUFudG9uIFZvcm9udHNvdgorTToJYXZvcm9udHNvdkBydS5tdmlzdGEuY29tCitMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZworTDoJc2RoY2ktZGV2ZWxAbGlzdHMub3NzbWFuLmV1CiBTOglNYWludGFpbmVkCiAKIFNFQ1VSSVRZIFNVQlNZU1RFTQpAQCAtNDM3NCwxMCArNDQwNyw3IEBACiBTOglNYWludGFpbmVkCiAKIFRPU0hJQkEgQUNQSSBFWFRSQVMgRFJJVkVSCi1QOglKb2huIEJlbG1vbnRlCi1NOgl0b3NoaWJhX2FjcGlAbWVtZWJlYW0ub3JnCi1XOglodHRwOi8vbWVtZWJlYW0ub3JnL3RveXMvVG9zaGliYUFjcGlEcml2ZXIKLVM6CU1haW50YWluZWQKK1M6CU9ycGhhbgogCiBUT1NISUJBIFNNTSBEUklWRVIKIFA6CUpvbmF0aGFuIEJ1enphcmQKQEAgLTQzODYsNiArNDQxNiwxMSBAQAogVzoJaHR0cDovL3d3dy5idXp6YXJkLm9yZy51ay90b3NoaWJhLwogUzoJTWFpbnRhaW5lZAogCitUTUlPIE1NQyBEUklWRVIKK1A6CUlhbiBNb2x0b24KK006CWlhbkBtbmVtZW50aC5jby51aworUzoJTWFpbnRhaW5lZAorCiBUUE0gREVWSUNFIERSSVZFUgogUDoJRGVib3JhIFZlbGFyZGUKIE06CWRlYm9yYUBsaW51eC52bmV0LmlibS5jb20KQEAgLTQ4NTAsNyArNDg4NSw3IEBACiBQOglNYXJrIEJyb3duCiBNOglicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbQogVzoJaHR0cDovL29wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbS9ub2RlLzE1Ci1XOglodHRwOi8vd3d3LnNsaW1sb2dpYy5jby51ay8/cGFnZV9pZD01CitXOglodHRwOi8vd3d3LnNsaW1sb2dpYy5jby51ay8/cD00OAogVDoJZ2l0IGtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xyZy92b2x0YWdlLTIuNi5naXQKIFM6CVN1cHBvcnRlZAogCkBAIC00OTcyLDcgKzUwMDcsOCBAQAogCiBYRlMgRklMRVNZU1RFTQogUDoJU2lsaWNvbiBHcmFwaGljcyBJbmMKLVA6CUJpbGwgTydEb25uZWxsCitQOglGZWxpeCBCbHlha2hlcgorTToJZmVsaXhiQHNnaS5jb20KIE06CXhmcy1tYXN0ZXJzQG9zcy5zZ2kuY29tCiBMOgl4ZnNAb3NzLnNnaS5jb20KIFc6CWh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy94ZnMKZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZwppbmRleCA4MzBjMTZhLi5kYzgxYjM0IDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC02LDYgKzYsNyBAQAogCXRyaXN0YXRlICJPUHJvZmlsZSBzeXN0ZW0gcHJvZmlsaW5nIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gUFJPRklMSU5HCiAJZGVwZW5kcyBvbiBIQVZFX09QUk9GSUxFCisJZGVwZW5kcyBvbiBUUkFDSU5HX1NVUFBPUlQKIAlzZWxlY3QgVFJBQ0lORwogCXNlbGVjdCBSSU5HX0JVRkZFUgogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IGQ5NTNlMjMuLjg4OTcxNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0xNCwxNyArMTQsNCBAQAogCiB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOwogCi0jZGVmaW5lIEhBUkRJUlFfQklUUwkxMgotCi0vKgotICogVGhlIGhhcmRpcnEgbWFzayBoYXMgdG8gYmUgbGFyZ2UgZW5vdWdoIHRvIGhhdmUKLSAqIHNwYWNlIGZvciBwb3RlbnRpYWxseSBuZXN0YWJsZSBJUlEgc291cmNlcyBpbiB0aGUgc3lzdGVtCi0gKiB0byBuZXN0IG9uIGEgc2luZ2xlIENQVS4gT24gQWxwaGEsIGludGVycnVwdHMgYXJlIG1hc2tlZCBhdCB0aGUgQ1BVCi0gKiBieSBJUEwgYXMgd2VsbCBhcyBhdCB0aGUgc3lzdGVtIGxldmVsLiBXZSBvbmx5IGhhdmUgOCBJUExzIChVTklYIFBBTGNvZGUpCi0gKiBzbyB3ZSByZWFsbHkgb25seSBoYXZlIDggbmVzdGFibGUgSVJRcywgYnV0IGFsbG93IHNvbWUgb3ZlcmhlYWQKLSAqLwotI2lmICgxIDw8IEhBUkRJUlFfQklUUykgPCAxNgotI2Vycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQotI2VuZGlmCi0KICNlbmRpZiAvKiBfQUxQSEFfSEFSRElSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL21hY2h2ZWMuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbWFjaHZlYy5oCmluZGV4IGZlYTRlYTcuLjEzY2Q0MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbWFjaHZlYy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbWFjaHZlYy5oCkBAIC04MCw3ICs4MCw3IEBACiAJdm9pZCAoKnVwZGF0ZV9pcnFfaHcpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCk7CiAJdm9pZCAoKmFja19pcnEpKHVuc2lnbmVkIGxvbmcpOwogCXZvaWQgKCpkZXZpY2VfaW50ZXJydXB0KSh1bnNpZ25lZCBsb25nIHZlY3Rvcik7Ci0Jdm9pZCAoKm1hY2hpbmVfY2hlY2spKHU2NCB2ZWN0b3IsIHU2NCBsYSk7CisJdm9pZCAoKm1hY2hpbmVfY2hlY2spKHVuc2lnbmVkIGxvbmcgdmVjdG9yLCB1bnNpZ25lZCBsb25nIGxhKTsKIAogCXZvaWQgKCpzbXBfY2FsbGluKSh2b2lkKTsKIAl2b2lkICgqaW5pdF9hcmNoKSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDJhMTQzMDIuLmNiMDRlYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wY2kuaApAQCAtMjczLDQgKzI3MywxOCBAQAogCiBleHRlcm4gc3RydWN0IHBjaV9kZXYgKmlzYV9icmlkZ2U7CiAKK2V4dGVybiBpbnQgcGNpX2xlZ2FjeV9yZWFkKHN0cnVjdCBwY2lfYnVzICpidXMsIGxvZmZfdCBwb3J0LCB1MzIgKnZhbCwKKwkJCSAgIHNpemVfdCBjb3VudCk7CitleHRlcm4gaW50IHBjaV9sZWdhY3lfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgbG9mZl90IHBvcnQsIHUzMiB2YWwsCisJCQkgICAgc2l6ZV90IGNvdW50KTsKK2V4dGVybiBpbnQgcGNpX21tYXBfbGVnYWN5X3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgICBlbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUpOworZXh0ZXJuIHZvaWQgcGNpX2FkanVzdF9sZWdhY3lfYXR0cihzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCSAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF90eXBlKTsKKyNkZWZpbmUgSEFWRV9QQ0lfTEVHQUNZCTEKKworZXh0ZXJuIGludCBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKwogI2VuZGlmIC8qIF9fQUxQSEFfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBhZWViMTI1Li5lMzhmYjk1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0xNjYsNiArMTY2LDkgQEAKIAlsb2NrLT5sb2NrID0gMDsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCBhZmUyMGZhLi41YWE0MGNjIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTMwOSw1MTkgKzMwOSw3MiBAQAogI2RlZmluZSB0YmlhKCkJCV9fdGJpKC0yLCAvKiBubyBzZWNvbmQgYXJndW1lbnQgKi8pCiAKIC8qCi0gKiBBdG9taWMgZXhjaGFuZ2UuCi0gKiBTaW5jZSBpdCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgY3JpdGljYWwgc2VjdGlvbnMKLSAqIGl0IG11c3QgY2xvYmJlciAibWVtb3J5IiAoYWxzbyBmb3IgaW50ZXJydXB0cyBpbiBVUCkuCisgKiBBdG9taWMgZXhjaGFuZ2Ugcm91dGluZXMuCiAgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX3hjaGdfdTgodm9sYXRpbGUgY2hhciAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyByZXQsIHRtcCwgYWRkcjY0OworI2RlZmluZSBfX0FTTV9fTUIKKyNkZWZpbmUgX19fX3hjaGcodHlwZSwgYXJncy4uLikJCV9feGNoZyAjIyB0eXBlICMjIF9sb2NhbChhcmdzKQorI2RlZmluZSBfX19fY21weGNoZyh0eXBlLCBhcmdzLi4uKQlfX2NtcHhjaGcgIyMgdHlwZSAjIyBfbG9jYWwoYXJncykKKyNpbmNsdWRlIDxhc20veGNoZy5oPgogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIglhbmRub3QJJTQsNywlM1xuIgotCSIJaW5zYmwJJTEsJTQsJTFcbiIKLQkiMToJbGRxX2wJJTIsMCglMylcbiIKLQkiCWV4dGJsCSUyLCU0LCUwXG4iCi0JIgltc2tibAklMiwlNCwlMlxuIgotCSIJb3IJJTEsJTIsJTJcbiIKLQkiCXN0cV9jCSUyLDAoJTMpXG4iCi0JIgliZXEJJTIsMmZcbiIKLSNpZmRlZiBDT05GSUdfU01QCi0JIgltYlxuIgotI2VuZGlmCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMjoJYnIJMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIgKHJldCksICI9JnIiICh2YWwpLCAiPSZyIiAodG1wKSwgIj0mciIgKGFkZHI2NCkKLQk6ICJyIiAoKGxvbmcpbSksICIxIiAodmFsKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX194Y2hnX3UxNih2b2xhdGlsZSBzaG9ydCAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyByZXQsIHRtcCwgYWRkcjY0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIglhbmRub3QJJTQsNywlM1xuIgotCSIJaW5zd2wJJTEsJTQsJTFcbiIKLQkiMToJbGRxX2wJJTIsMCglMylcbiIKLQkiCWV4dHdsCSUyLCU0LCUwXG4iCi0JIgltc2t3bAklMiwlNCwlMlxuIgotCSIJb3IJJTEsJTIsJTJcbiIKLQkiCXN0cV9jCSUyLDAoJTMpXG4iCi0JIgliZXEJJTIsMmZcbiIKLSNpZmRlZiBDT05GSUdfU01QCi0JIgltYlxuIgotI2VuZGlmCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMjoJYnIJMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIgKHJldCksICI9JnIiICh2YWwpLCAiPSZyIiAodG1wKSwgIj0mciIgKGFkZHI2NCkKLQk6ICJyIiAoKGxvbmcpbSksICIxIiAodmFsKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX194Y2hnX3UzMih2b2xhdGlsZSBpbnQgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZHVtbXk7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiMToJbGRsX2wgJTAsJTRcbiIKLQkiCWJpcyAkMzEsJTMsJTFcbiIKLQkiCXN0bF9jICUxLCUyXG4iCi0JIgliZXEgJTEsMmZcbiIKLSNpZmRlZiBDT05GSUdfU01QCi0JIgltYlxuIgotI2VuZGlmCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMjoJYnIgMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIgKHZhbCksICI9JnIiIChkdW1teSksICI9bSIgKCptKQotCTogInJJIiAodmFsKSwgIm0iICgqbSkgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9feGNoZ191NjQodm9sYXRpbGUgbG9uZyAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JdW5zaWduZWQgbG9uZyBkdW1teTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIxOglsZHFfbCAlMCwlNFxuIgotCSIJYmlzICQzMSwlMywlMVxuIgotCSIJc3RxX2MgJTEsJTJcbiIKLQkiCWJlcSAlMSwyZlxuIgotI2lmZGVmIENPTkZJR19TTVAKLQkiCW1iXG4iCi0jZW5kaWYKLQkiLnN1YnNlY3Rpb24gMlxuIgotCSIyOgliciAxYlxuIgotCSIucHJldmlvdXMiCi0JOiAiPSZyIiAodmFsKSwgIj0mciIgKGR1bW15KSwgIj1tIiAoKm0pCi0JOiAickkiICh2YWwpLCAibSIgKCptKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBleGlzdCwgc28geW91J2xsIGdldCBhIGxpbmtlciBlcnJvcgotICAgaWYgc29tZXRoaW5nIHRyaWVzIHRvIGRvIGFuIGludmFsaWQgeGNoZygpLiAgKi8KLWV4dGVybiB2b2lkIF9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKLQotI2RlZmluZSBfX3hjaGcocHRyLCB4LCBzaXplKSBcCi0oeyBcCi0JdW5zaWduZWQgbG9uZyBfX3hjaGdfX3JlczsgXAotCXZvbGF0aWxlIHZvaWQgKl9feGNoZ19fcHRyID0gKHB0cik7IFwKLQlzd2l0Y2ggKHNpemUpIHsgXAotCQljYXNlIDE6IF9feGNoZ19fcmVzID0gX194Y2hnX3U4KF9feGNoZ19fcHRyLCB4KTsgYnJlYWs7IFwKLQkJY2FzZSAyOiBfX3hjaGdfX3JlcyA9IF9feGNoZ191MTYoX194Y2hnX19wdHIsIHgpOyBicmVhazsgXAotCQljYXNlIDQ6IF9feGNoZ19fcmVzID0gX194Y2hnX3UzMihfX3hjaGdfX3B0ciwgeCk7IGJyZWFrOyBcCi0JCWNhc2UgODogX194Y2hnX19yZXMgPSBfX3hjaGdfdTY0KF9feGNoZ19fcHRyLCB4KTsgYnJlYWs7IFwKLQkJZGVmYXVsdDogX194Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKCk7IF9feGNoZ19fcmVzID0geDsgXAotCX0gXAotCV9feGNoZ19fcmVzOyBcCi19KQotCi0jZGVmaW5lIHhjaGcocHRyLHgpCQkJCQkJCSAgICAgXAotICAoewkJCQkJCQkJCSAgICAgXAotICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX3hfID0gKHgpOwkJCQkJICAgICBcCi0gICAgIChfX3R5cGVvZl9fKCoocHRyKSkpIF9feGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpX3hfLCBzaXplb2YoKihwdHIpKSk7IFwKKyNkZWZpbmUgeGNoZ19sb2NhbChwdHIseCkJCQkJCQlcCisgICh7CQkJCQkJCQkJXAorICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX3hfID0gKHgpOwkJCQkJXAorICAgICAoX190eXBlb2ZfXygqKHB0cikpKSBfX3hjaGdfbG9jYWwoKHB0ciksICh1bnNpZ25lZCBsb25nKV94XywJXAorCQkJCSAgICAgICBzaXplb2YoKihwdHIpKSk7CQkJXAogICB9KQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9feGNoZ191OF9sb2NhbCh2b2xhdGlsZSBjaGFyICptLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIHJldCwgdG1wLCBhZGRyNjQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiCWFuZG5vdAklNCw3LCUzXG4iCi0JIglpbnNibAklMSwlNCwlMVxuIgotCSIxOglsZHFfbAklMiwwKCUzKVxuIgotCSIJZXh0YmwJJTIsJTQsJTBcbiIKLQkiCW1za2JsCSUyLCU0LCUyXG4iCi0JIglvcgklMSwlMiwlMlxuIgotCSIJc3RxX2MJJTIsMCglMylcbiIKLQkiCWJlcQklMiwyZlxuIgotCSIuc3Vic2VjdGlvbiAyXG4iCi0JIjI6CWJyCTFiXG4iCi0JIi5wcmV2aW91cyIKLQk6ICI9JnIiIChyZXQpLCAiPSZyIiAodmFsKSwgIj0mciIgKHRtcCksICI9JnIiIChhZGRyNjQpCi0JOiAiciIgKChsb25nKW0pLCAiMSIgKHZhbCkgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9feGNoZ191MTZfbG9jYWwodm9sYXRpbGUgc2hvcnQgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgcmV0LCB0bXAsIGFkZHI2NDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIJYW5kbm90CSU0LDcsJTNcbiIKLQkiCWluc3dsCSUxLCU0LCUxXG4iCi0JIjE6CWxkcV9sCSUyLDAoJTMpXG4iCi0JIglleHR3bAklMiwlNCwlMFxuIgotCSIJbXNrd2wJJTIsJTQsJTJcbiIKLQkiCW9yCSUxLCUyLCUyXG4iCi0JIglzdHFfYwklMiwwKCUzKVxuIgotCSIJYmVxCSUyLDJmXG4iCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMjoJYnIJMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIgKHJldCksICI9JnIiICh2YWwpLCAiPSZyIiAodG1wKSwgIj0mciIgKGFkZHI2NCkKLQk6ICJyIiAoKGxvbmcpbSksICIxIiAodmFsKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX194Y2hnX3UzMl9sb2NhbCh2b2xhdGlsZSBpbnQgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZHVtbXk7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiMToJbGRsX2wgJTAsJTRcbiIKLQkiCWJpcyAkMzEsJTMsJTFcbiIKLQkiCXN0bF9jICUxLCUyXG4iCi0JIgliZXEgJTEsMmZcbiIKLQkiLnN1YnNlY3Rpb24gMlxuIgotCSIyOgliciAxYlxuIgotCSIucHJldmlvdXMiCi0JOiAiPSZyIiAodmFsKSwgIj0mciIgKGR1bW15KSwgIj1tIiAoKm0pCi0JOiAickkiICh2YWwpLCAibSIgKCptKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX194Y2hnX3U2NF9sb2NhbCh2b2xhdGlsZSBsb25nICptLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGR1bW15OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIjE6CWxkcV9sICUwLCU0XG4iCi0JIgliaXMgJDMxLCUzLCUxXG4iCi0JIglzdHFfYyAlMSwlMlxuIgotCSIJYmVxICUxLDJmXG4iCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMjoJYnIgMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIgKHZhbCksICI9JnIiIChkdW1teSksICI9bSIgKCptKQotCTogInJJIiAodmFsKSwgIm0iICgqbSkgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi0jZGVmaW5lIF9feGNoZ19sb2NhbChwdHIsIHgsIHNpemUpIFwKLSh7IFwKLQl1bnNpZ25lZCBsb25nIF9feGNoZ19fcmVzOyBcCi0Jdm9sYXRpbGUgdm9pZCAqX194Y2hnX19wdHIgPSAocHRyKTsgXAotCXN3aXRjaCAoc2l6ZSkgeyBcCi0JCWNhc2UgMTogX194Y2hnX19yZXMgPSBfX3hjaGdfdThfbG9jYWwoX194Y2hnX19wdHIsIHgpOyBicmVhazsgXAotCQljYXNlIDI6IF9feGNoZ19fcmVzID0gX194Y2hnX3UxNl9sb2NhbChfX3hjaGdfX3B0ciwgeCk7IGJyZWFrOyBcCi0JCWNhc2UgNDogX194Y2hnX19yZXMgPSBfX3hjaGdfdTMyX2xvY2FsKF9feGNoZ19fcHRyLCB4KTsgYnJlYWs7IFwKLQkJY2FzZSA4OiBfX3hjaGdfX3JlcyA9IF9feGNoZ191NjRfbG9jYWwoX194Y2hnX19wdHIsIHgpOyBicmVhazsgXAotCQlkZWZhdWx0OiBfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsgX194Y2hnX19yZXMgPSB4OyBcCi0JfSBcCi0JX194Y2hnX19yZXM7IFwKLX0pCi0KLSNkZWZpbmUgeGNoZ19sb2NhbChwdHIseCkJCQkJCQkgICAgIFwKLSAgKHsJCQkJCQkJCQkgICAgIFwKLSAgICAgX190eXBlb2ZfXygqKHB0cikpIF94XyA9ICh4KTsJCQkJCSAgICAgXAotICAgICAoX190eXBlb2ZfXygqKHB0cikpKSBfX3hjaGdfbG9jYWwoKHB0ciksICh1bnNpZ25lZCBsb25nKV94XywJICAgICBcCi0gICAgIAkJc2l6ZW9mKCoocHRyKSkpOyBcCisjZGVmaW5lIGNtcHhjaGdfbG9jYWwocHRyLCBvLCBuKQkJCQkJXAorICAoewkJCQkJCQkJCVwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9vXyA9IChvKTsJCQkJCVwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9uXyA9IChuKTsJCQkJCVwKKyAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZylfb18sCVwKKwkJCQkJICAodW5zaWduZWQgbG9uZylfbl8sCQlcCisJCQkJCSAgc2l6ZW9mKCoocHRyKSkpOwkJXAogICB9KQogCi0vKiAKLSAqIEF0b21pYyBjb21wYXJlIGFuZCBleGNoYW5nZS4gIENvbXBhcmUgT0xEIHdpdGggTUVNLCBpZiBpZGVudGljYWwsCi0gKiBzdG9yZSBORVcgaW4gTUVNLiAgUmV0dXJuIHRoZSBpbml0aWFsIHZhbHVlIGluIE1FTS4gIFN1Y2Nlc3MgaXMKLSAqIGluZGljYXRlZCBieSBjb21wYXJpbmcgUkVUVVJOIHdpdGggT0xELgotICoKLSAqIFRoZSBtZW1vcnkgYmFycmllciBzaG91bGQgYmUgcGxhY2VkIGluIFNNUCBvbmx5IHdoZW4gd2UgYWN0dWFsbHkKLSAqIG1ha2UgdGhlIGNoYW5nZS4gSWYgd2UgZG9uJ3QgY2hhbmdlIGFueXRoaW5nIChzbyBpZiB0aGUgcmV0dXJuZWQKLSAqIHByZXYgaXMgZXF1YWwgdG8gb2xkKSB0aGVuIHdlIGFyZW4ndCBhY3F1aXJpbmcgYW55dGhpbmcgbmV3IGFuZAotICogd2UgZG9uJ3QgbmVlZCBhbnkgbWVtb3J5IGJhcnJpZXIgYXMgZmFyIEkgY2FuIHRlbGwuCi0gKi8KKyNkZWZpbmUgY21weGNoZzY0X2xvY2FsKHB0ciwgbywgbikJCQkJCVwKKyAgKHsJCQkJCQkJCQlcCisJQlVJTERfQlVHX09OKHNpemVvZigqKHB0cikpICE9IDgpOwkJCQlcCisJY21weGNoZ19sb2NhbCgocHRyKSwgKG8pLCAobikpOwkJCQkJXAorICB9KQorCisjaWZkZWYgQ09ORklHX1NNUAorI3VuZGVmIF9fQVNNX19NQgorI2RlZmluZSBfX0FTTV9fTUIJIlx0bWJcbiIKKyNlbmRpZgorI3VuZGVmIF9fX194Y2hnCisjdW5kZWYgX19fX2NtcHhjaGcKKyNkZWZpbmUgX19fX3hjaGcodHlwZSwgYXJncy4uLikJCV9feGNoZyAjI3R5cGUoYXJncykKKyNkZWZpbmUgX19fX2NtcHhjaGcodHlwZSwgYXJncy4uLikJX19jbXB4Y2hnICMjdHlwZShhcmdzKQorI2luY2x1ZGUgPGFzbS94Y2hnLmg+CisKKyNkZWZpbmUgeGNoZyhwdHIseCkJCQkJCQkJXAorICAoewkJCQkJCQkJCVwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF94XyA9ICh4KTsJCQkJCVwKKyAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX194Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZylfeF8sCQlcCisJCQkJIHNpemVvZigqKHB0cikpKTsJCQlcCisgIH0pCisKKyNkZWZpbmUgY21weGNoZyhwdHIsIG8sIG4pCQkJCQkJXAorICAoewkJCQkJCQkJCVwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9vXyA9IChvKTsJCQkJCVwKKyAgICAgX190eXBlb2ZfXygqKHB0cikpIF9uXyA9IChuKTsJCQkJCVwKKyAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZylfb18sCQlcCisJCQkJICAgICh1bnNpZ25lZCBsb25nKV9uXywJc2l6ZW9mKCoocHRyKSkpO1wKKyAgfSkKKworI2RlZmluZSBjbXB4Y2hnNjQocHRyLCBvLCBuKQkJCQkJCVwKKyAgKHsJCQkJCQkJCQlcCisJQlVJTERfQlVHX09OKHNpemVvZigqKHB0cikpICE9IDgpOwkJCQlcCisJY21weGNoZygocHRyKSwgKG8pLCAobikpOwkJCQkJXAorICB9KQorCisjdW5kZWYgX19BU01fX01CCisjdW5kZWYgX19fX2NtcHhjaGcKIAogI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHIDEKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX2NtcHhjaGdfdTgodm9sYXRpbGUgY2hhciAqbSwgbG9uZyBvbGQsIGxvbmcgbmV3KQotewotCXVuc2lnbmVkIGxvbmcgcHJldiwgdG1wLCBjbXAsIGFkZHI2NDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIJYW5kbm90CSU1LDcsJTRcbiIKLQkiCWluc2JsCSUxLCU1LCUxXG4iCi0JIjE6CWxkcV9sCSUyLDAoJTQpXG4iCi0JIglleHRibAklMiwlNSwlMFxuIgotCSIJY21wZXEJJTAsJTYsJTNcbiIKLQkiCWJlcQklMywyZlxuIgotCSIJbXNrYmwJJTIsJTUsJTJcbiIKLQkiCW9yCSUxLCUyLCUyXG4iCi0JIglzdHFfYwklMiwwKCU0KVxuIgotCSIJYmVxCSUyLDNmXG4iCi0jaWZkZWYgQ09ORklHX1NNUAotCSIJbWJcbiIKLSNlbmRpZgotCSIyOlxuIgotCSIuc3Vic2VjdGlvbiAyXG4iCi0JIjM6CWJyCTFiXG4iCi0JIi5wcmV2aW91cyIKLQk6ICI9JnIiIChwcmV2KSwgIj0mciIgKG5ldyksICI9JnIiICh0bXApLCAiPSZyIiAoY21wKSwgIj0mciIgKGFkZHI2NCkKLQk6ICJyIiAoKGxvbmcpbSksICJJciIgKG9sZCksICIxIiAobmV3KSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiBwcmV2OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9fY21weGNoZ191MTYodm9sYXRpbGUgc2hvcnQgKm0sIGxvbmcgb2xkLCBsb25nIG5ldykKLXsKLQl1bnNpZ25lZCBsb25nIHByZXYsIHRtcCwgY21wLCBhZGRyNjQ7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiCWFuZG5vdAklNSw3LCU0XG4iCi0JIglpbnN3bAklMSwlNSwlMVxuIgotCSIxOglsZHFfbAklMiwwKCU0KVxuIgotCSIJZXh0d2wJJTIsJTUsJTBcbiIKLQkiCWNtcGVxCSUwLCU2LCUzXG4iCi0JIgliZXEJJTMsMmZcbiIKLQkiCW1za3dsCSUyLCU1LCUyXG4iCi0JIglvcgklMSwlMiwlMlxuIgotCSIJc3RxX2MJJTIsMCglNClcbiIKLQkiCWJlcQklMiwzZlxuIgotI2lmZGVmIENPTkZJR19TTVAKLQkiCW1iXG4iCi0jZW5kaWYKLQkiMjpcbiIKLQkiLnN1YnNlY3Rpb24gMlxuIgotCSIzOglicgkxYlxuIgotCSIucHJldmlvdXMiCi0JOiAiPSZyIiAocHJldiksICI9JnIiIChuZXcpLCAiPSZyIiAodG1wKSwgIj0mciIgKGNtcCksICI9JnIiIChhZGRyNjQpCi0JOiAiciIgKChsb25nKW0pLCAiSXIiIChvbGQpLCAiMSIgKG5ldykgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gcHJldjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX2NtcHhjaGdfdTMyKHZvbGF0aWxlIGludCAqbSwgaW50IG9sZCwgaW50IG5ldykKLXsKLQl1bnNpZ25lZCBsb25nIHByZXYsIGNtcDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIxOglsZGxfbCAlMCwlNVxuIgotCSIJY21wZXEgJTAsJTMsJTFcbiIKLQkiCWJlcSAlMSwyZlxuIgotCSIJbW92ICU0LCUxXG4iCi0JIglzdGxfYyAlMSwlMlxuIgotCSIJYmVxICUxLDNmXG4iCi0jaWZkZWYgQ09ORklHX1NNUAotCSIJbWJcbiIKLSNlbmRpZgotCSIyOlxuIgotCSIuc3Vic2VjdGlvbiAyXG4iCi0JIjM6CWJyIDFiXG4iCi0JIi5wcmV2aW91cyIKLQk6ICI9JnIiKHByZXYpLCAiPSZyIihjbXApLCAiPW0iKCptKQotCTogInIiKChsb25nKSBvbGQpLCAiciIobmV3KSwgIm0iKCptKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiBwcmV2OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9fY21weGNoZ191NjQodm9sYXRpbGUgbG9uZyAqbSwgdW5zaWduZWQgbG9uZyBvbGQsIHVuc2lnbmVkIGxvbmcgbmV3KQotewotCXVuc2lnbmVkIGxvbmcgcHJldiwgY21wOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIjE6CWxkcV9sICUwLCU1XG4iCi0JIgljbXBlcSAlMCwlMywlMVxuIgotCSIJYmVxICUxLDJmXG4iCi0JIgltb3YgJTQsJTFcbiIKLQkiCXN0cV9jICUxLCUyXG4iCi0JIgliZXEgJTEsM2ZcbiIKLSNpZmRlZiBDT05GSUdfU01QCi0JIgltYlxuIgotI2VuZGlmCi0JIjI6XG4iCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMzoJYnIgMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIocHJldiksICI9JnIiKGNtcCksICI9bSIoKm0pCi0JOiAiciIoKGxvbmcpIG9sZCksICJyIihuZXcpLCAibSIoKm0pIDogIm1lbW9yeSIpOwotCi0JcmV0dXJuIHByZXY7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBleGlzdCwgc28geW91J2xsIGdldCBhIGxpbmtlciBlcnJvcgotICAgaWYgc29tZXRoaW5nIHRyaWVzIHRvIGRvIGFuIGludmFsaWQgY21weGNoZygpLiAgKi8KLWV4dGVybiB2b2lkIF9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKLQotc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nCi1fX2NtcHhjaGcodm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQotewotCXN3aXRjaCAoc2l6ZSkgewotCQljYXNlIDE6Ci0JCQlyZXR1cm4gX19jbXB4Y2hnX3U4KHB0ciwgb2xkLCBuZXcpOwotCQljYXNlIDI6Ci0JCQlyZXR1cm4gX19jbXB4Y2hnX3UxNihwdHIsIG9sZCwgbmV3KTsKLQkJY2FzZSA0OgotCQkJcmV0dXJuIF9fY21weGNoZ191MzIocHRyLCBvbGQsIG5ldyk7Ci0JCWNhc2UgODoKLQkJCXJldHVybiBfX2NtcHhjaGdfdTY0KHB0ciwgb2xkLCBuZXcpOwotCX0KLQlfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKLQlyZXR1cm4gb2xkOwotfQotCi0jZGVmaW5lIGNtcHhjaGcocHRyLCBvLCBuKQkJCQkJCSBcCi0gICh7CQkJCQkJCQkJIFwKLSAgICAgX190eXBlb2ZfXygqKHB0cikpIF9vXyA9IChvKTsJCQkJCSBcCi0gICAgIF9fdHlwZW9mX18oKihwdHIpKSBfbl8gPSAobik7CQkJCQkgXAotICAgICAoX190eXBlb2ZfXygqKHB0cikpKSBfX2NtcHhjaGcoKHB0ciksICh1bnNpZ25lZCBsb25nKV9vXywJCSBcCi0JCQkJICAgICh1bnNpZ25lZCBsb25nKV9uXywgc2l6ZW9mKCoocHRyKSkpOyBcCi0gIH0pCi0jZGVmaW5lIGNtcHhjaGc2NChwdHIsIG8sIG4pCQkJCQkJIFwKLSAgKHsJCQkJCQkJCQkgXAotCUJVSUxEX0JVR19PTihzaXplb2YoKihwdHIpKSAhPSA4KTsJCQkJIFwKLQljbXB4Y2hnKChwdHIpLCAobyksIChuKSk7CQkJCQkgXAotICB9KQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9fY21weGNoZ191OF9sb2NhbCh2b2xhdGlsZSBjaGFyICptLCBsb25nIG9sZCwgbG9uZyBuZXcpCi17Ci0JdW5zaWduZWQgbG9uZyBwcmV2LCB0bXAsIGNtcCwgYWRkcjY0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIglhbmRub3QJJTUsNywlNFxuIgotCSIJaW5zYmwJJTEsJTUsJTFcbiIKLQkiMToJbGRxX2wJJTIsMCglNClcbiIKLQkiCWV4dGJsCSUyLCU1LCUwXG4iCi0JIgljbXBlcQklMCwlNiwlM1xuIgotCSIJYmVxCSUzLDJmXG4iCi0JIgltc2tibAklMiwlNSwlMlxuIgotCSIJb3IJJTEsJTIsJTJcbiIKLQkiCXN0cV9jCSUyLDAoJTQpXG4iCi0JIgliZXEJJTIsM2ZcbiIKLQkiMjpcbiIKLQkiLnN1YnNlY3Rpb24gMlxuIgotCSIzOglicgkxYlxuIgotCSIucHJldmlvdXMiCi0JOiAiPSZyIiAocHJldiksICI9JnIiIChuZXcpLCAiPSZyIiAodG1wKSwgIj0mciIgKGNtcCksICI9JnIiIChhZGRyNjQpCi0JOiAiciIgKChsb25nKW0pLCAiSXIiIChvbGQpLCAiMSIgKG5ldykgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gcHJldjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX2NtcHhjaGdfdTE2X2xvY2FsKHZvbGF0aWxlIHNob3J0ICptLCBsb25nIG9sZCwgbG9uZyBuZXcpCi17Ci0JdW5zaWduZWQgbG9uZyBwcmV2LCB0bXAsIGNtcCwgYWRkcjY0OwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JIglhbmRub3QJJTUsNywlNFxuIgotCSIJaW5zd2wJJTEsJTUsJTFcbiIKLQkiMToJbGRxX2wJJTIsMCglNClcbiIKLQkiCWV4dHdsCSUyLCU1LCUwXG4iCi0JIgljbXBlcQklMCwlNiwlM1xuIgotCSIJYmVxCSUzLDJmXG4iCi0JIgltc2t3bAklMiwlNSwlMlxuIgotCSIJb3IJJTEsJTIsJTJcbiIKLQkiCXN0cV9jCSUyLDAoJTQpXG4iCi0JIgliZXEJJTIsM2ZcbiIKLQkiMjpcbiIKLQkiLnN1YnNlY3Rpb24gMlxuIgotCSIzOglicgkxYlxuIgotCSIucHJldmlvdXMiCi0JOiAiPSZyIiAocHJldiksICI9JnIiIChuZXcpLCAiPSZyIiAodG1wKSwgIj0mciIgKGNtcCksICI9JnIiIChhZGRyNjQpCi0JOiAiciIgKChsb25nKW0pLCAiSXIiIChvbGQpLCAiMSIgKG5ldykgOiAibWVtb3J5Iik7Ci0KLQlyZXR1cm4gcHJldjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCi1fX2NtcHhjaGdfdTMyX2xvY2FsKHZvbGF0aWxlIGludCAqbSwgaW50IG9sZCwgaW50IG5ldykKLXsKLQl1bnNpZ25lZCBsb25nIHByZXYsIGNtcDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSIxOglsZGxfbCAlMCwlNVxuIgotCSIJY21wZXEgJTAsJTMsJTFcbiIKLQkiCWJlcSAlMSwyZlxuIgotCSIJbW92ICU0LCUxXG4iCi0JIglzdGxfYyAlMSwlMlxuIgotCSIJYmVxICUxLDNmXG4iCi0JIjI6XG4iCi0JIi5zdWJzZWN0aW9uIDJcbiIKLQkiMzoJYnIgMWJcbiIKLQkiLnByZXZpb3VzIgotCTogIj0mciIocHJldiksICI9JnIiKGNtcCksICI9bSIoKm0pCi0JOiAiciIoKGxvbmcpIG9sZCksICJyIihuZXcpLCAibSIoKm0pIDogIm1lbW9yeSIpOwotCi0JcmV0dXJuIHByZXY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwotX19jbXB4Y2hnX3U2NF9sb2NhbCh2b2xhdGlsZSBsb25nICptLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCi17Ci0JdW5zaWduZWQgbG9uZyBwcmV2LCBjbXA7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkiMToJbGRxX2wgJTAsJTVcbiIKLQkiCWNtcGVxICUwLCUzLCUxXG4iCi0JIgliZXEgJTEsMmZcbiIKLQkiCW1vdiAlNCwlMVxuIgotCSIJc3RxX2MgJTEsJTJcbiIKLQkiCWJlcSAlMSwzZlxuIgotCSIyOlxuIgotCSIuc3Vic2VjdGlvbiAyXG4iCi0JIjM6CWJyIDFiXG4iCi0JIi5wcmV2aW91cyIKLQk6ICI9JnIiKHByZXYpLCAiPSZyIihjbXApLCAiPW0iKCptKQotCTogInIiKChsb25nKSBvbGQpLCAiciIobmV3KSwgIm0iKCptKSA6ICJtZW1vcnkiKTsKLQotCXJldHVybiBwcmV2OwotfQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcKLV9fY21weGNoZ19sb2NhbCh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgb2xkLCB1bnNpZ25lZCBsb25nIG5ldywKLQkJaW50IHNpemUpCi17Ci0Jc3dpdGNoIChzaXplKSB7Ci0JCWNhc2UgMToKLQkJCXJldHVybiBfX2NtcHhjaGdfdThfbG9jYWwocHRyLCBvbGQsIG5ldyk7Ci0JCWNhc2UgMjoKLQkJCXJldHVybiBfX2NtcHhjaGdfdTE2X2xvY2FsKHB0ciwgb2xkLCBuZXcpOwotCQljYXNlIDQ6Ci0JCQlyZXR1cm4gX19jbXB4Y2hnX3UzMl9sb2NhbChwdHIsIG9sZCwgbmV3KTsKLQkJY2FzZSA4OgotCQkJcmV0dXJuIF9fY21weGNoZ191NjRfbG9jYWwocHRyLCBvbGQsIG5ldyk7Ci0JfQotCV9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOwotCXJldHVybiBvbGQ7Ci19Ci0KLSNkZWZpbmUgY21weGNoZ19sb2NhbChwdHIsIG8sIG4pCQkJCQkgXAotICAoewkJCQkJCQkJCSBcCi0gICAgIF9fdHlwZW9mX18oKihwdHIpKSBfb18gPSAobyk7CQkJCQkgXAotICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX25fID0gKG4pOwkJCQkJIFwKLSAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX19jbXB4Y2hnX2xvY2FsKChwdHIpLCAodW5zaWduZWQgbG9uZylfb18sCSBcCi0JCQkJICAgICh1bnNpZ25lZCBsb25nKV9uXywgc2l6ZW9mKCoocHRyKSkpOyBcCi0gIH0pCi0jZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsIG8sIG4pCQkJCQkgXAotICAoewkJCQkJCQkJCSBcCi0JQlVJTERfQlVHX09OKHNpemVvZigqKHB0cikpICE9IDgpOwkJCQkgXAotCWNtcHhjaGdfbG9jYWwoKHB0ciksIChvKSwgKG4pKTsJCQkJCSBcCi0gIH0pCi0KLQogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3R5cGVzLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3R5cGVzLmgKaW5kZXggYzE1NDEzNS4uZjA3MmYzNCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdHlwZXMuaApAQCAtOCw3ICs4LDEyIEBACiAgKiBub3QgYSBtYWpvciBpc3N1ZS4gIEhvd2V2ZXIsIGZvciBpbnRlcm9wZXJhYmlsaXR5LCBsaWJyYXJpZXMgc3RpbGwKICAqIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBhdm9pZCBhIG5hbWUgY2xhc2hlcy4KICAqLworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+CisjZWxzZQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sNjQuaD4KKyNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IDIyZGUzYjQuLjE2M2YzMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC00OTgsMTMgKzQ5OCwxMyBAQAogfTsKIAogLyogUmV0dXJucyB0aGUgbmV3IHBjICovCi0jZGVmaW5lIGZpeHVwX2V4Y2VwdGlvbihtYXBfcmVnLCBmaXh1cCwgcGMpCQkJXAorI2RlZmluZSBmaXh1cF9leGNlcHRpb24obWFwX3JlZywgX2ZpeHVwLCBwYykJCQlcCiAoewkJCQkJCQkJXAotCWlmICgoZml4dXApLT5maXh1cC5iaXRzLnZhbHJlZyAhPSAzMSkJCQlcCi0JCW1hcF9yZWcoKGZpeHVwKS0+Zml4dXAuYml0cy52YWxyZWcpID0gMDsJXAotCWlmICgoZml4dXApLT5maXh1cC5iaXRzLmVycnJlZyAhPSAzMSkJCQlcCi0JCW1hcF9yZWcoKGZpeHVwKS0+Zml4dXAuYml0cy5lcnJyZWcpID0gLUVGQVVMVDsJXAotCShwYykgKyAoZml4dXApLT5maXh1cC5iaXRzLm5leHRpbnNuOwkJCVwKKwlpZiAoKF9maXh1cCktPmZpeHVwLmJpdHMudmFscmVnICE9IDMxKQkJCVwKKwkJbWFwX3JlZygoX2ZpeHVwKS0+Zml4dXAuYml0cy52YWxyZWcpID0gMDsJXAorCWlmICgoX2ZpeHVwKS0+Zml4dXAuYml0cy5lcnJyZWcgIT0gMzEpCQkJXAorCQltYXBfcmVnKChfZml4dXApLT5maXh1cC5iaXRzLmVycnJlZykgPSAtRUZBVUxUOwlcCisJKHBjKSArIChfZml4dXApLT5maXh1cC5iaXRzLm5leHRpbnNuOwkJCVwKIH0pCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS94Y2hnLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3hjaGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWJhMWI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS94Y2hnLmgKQEAgLTAsMCArMSwyNTggQEAKKyNpZm5kZWYgX19BTFBIQV9TWVNURU1fSAorI2Vycm9yIERvIG5vdCBpbmNsdWRlIHhjaGcuaCBkaXJlY3RseSEKKyNlbHNlCisvKgorICogeGNoZy94Y2hnX2xvY2FsIGFuZCBjbXB4Y2hnL2NtcHhjaGdfbG9jYWwgc2hhcmUgdGhlIHNhbWUgY29kZQorICogZXhjZXB0IHRoYXQgbG9jYWwgdmVyc2lvbiBkbyBub3QgaGF2ZSB0aGUgZXhwZW5zaXZlIG1lbW9yeSBiYXJyaWVyLgorICogU28gdGhpcyBmaWxlIGlzIGluY2x1ZGVkIHR3aWNlIGZyb20gYXNtL3N5c3RlbS5oLgorICovCisKKy8qCisgKiBBdG9taWMgZXhjaGFuZ2UuCisgKiBTaW5jZSBpdCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgY3JpdGljYWwgc2VjdGlvbnMKKyAqIGl0IG11c3QgY2xvYmJlciAibWVtb3J5IiAoYWxzbyBmb3IgaW50ZXJydXB0cyBpbiBVUCkuCisgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX19feGNoZyhfdTgsIHZvbGF0aWxlIGNoYXIgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgcmV0LCB0bXAsIGFkZHI2NDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIJYW5kbm90CSU0LDcsJTNcbiIKKwkiCWluc2JsCSUxLCU0LCUxXG4iCisJIjE6CWxkcV9sCSUyLDAoJTMpXG4iCisJIglleHRibAklMiwlNCwlMFxuIgorCSIJbXNrYmwJJTIsJTQsJTJcbiIKKwkiCW9yCSUxLCUyLCUyXG4iCisJIglzdHFfYwklMiwwKCUzKVxuIgorCSIJYmVxCSUyLDJmXG4iCisJCV9fQVNNX19NQgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjI6CWJyCTFiXG4iCisJIi5wcmV2aW91cyIKKwk6ICI9JnIiIChyZXQpLCAiPSZyIiAodmFsKSwgIj0mciIgKHRtcCksICI9JnIiIChhZGRyNjQpCisJOiAiciIgKChsb25nKW0pLCAiMSIgKHZhbCkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fX194Y2hnKF91MTYsIHZvbGF0aWxlIHNob3J0ICptLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCwgdG1wLCBhZGRyNjQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCWFuZG5vdAklNCw3LCUzXG4iCisJIglpbnN3bAklMSwlNCwlMVxuIgorCSIxOglsZHFfbAklMiwwKCUzKVxuIgorCSIJZXh0d2wJJTIsJTQsJTBcbiIKKwkiCW1za3dsCSUyLCU0LCUyXG4iCisJIglvcgklMSwlMiwlMlxuIgorCSIJc3RxX2MJJTIsMCglMylcbiIKKwkiCWJlcQklMiwyZlxuIgorCQlfX0FTTV9fTUIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIyOglicgkxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIiAocmV0KSwgIj0mciIgKHZhbCksICI9JnIiICh0bXApLCAiPSZyIiAoYWRkcjY0KQorCTogInIiICgobG9uZyltKSwgIjEiICh2YWwpIDogIm1lbW9yeSIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX19feGNoZyhfdTMyLCB2b2xhdGlsZSBpbnQgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRsX2wgJTAsJTRcbiIKKwkiCWJpcyAkMzEsJTMsJTFcbiIKKwkiCXN0bF9jICUxLCUyXG4iCisJIgliZXEgJTEsMmZcbiIKKwkJX19BU01fX01CCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCTogIj0mciIgKHZhbCksICI9JnIiIChkdW1teSksICI9bSIgKCptKQorCTogInJJIiAodmFsKSwgIm0iICgqbSkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fX194Y2hnKF91NjQsIHZvbGF0aWxlIGxvbmcgKm0sIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZHVtbXk7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRxX2wgJTAsJTRcbiIKKwkiCWJpcyAkMzEsJTMsJTFcbiIKKwkiCXN0cV9jICUxLCUyXG4iCisJIgliZXEgJTEsMmZcbiIKKwkJX19BU01fX01CCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMjoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCTogIj0mciIgKHZhbCksICI9JnIiIChkdW1teSksICI9bSIgKCptKQorCTogInJJIiAodmFsKSwgIm0iICgqbSkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gdmFsOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QsIHNvIHlvdSdsbCBnZXQgYSBsaW5rZXIgZXJyb3IKKyAgIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIHhjaGcoKS4gICovCitleHRlcm4gdm9pZCBfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZworX19fX3hjaGcoLCB2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVkIGxvbmcgeCwgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgMToKKwkJCXJldHVybiBfX19feGNoZyhfdTgsIHB0ciwgeCk7CisJCWNhc2UgMjoKKwkJCXJldHVybiBfX19feGNoZyhfdTE2LCBwdHIsIHgpOworCQljYXNlIDQ6CisJCQlyZXR1cm4gX19fX3hjaGcoX3UzMiwgcHRyLCB4KTsKKwkJY2FzZSA4OgorCQkJcmV0dXJuIF9fX194Y2hnKF91NjQsIHB0ciwgeCk7CisJfQorCV9feGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcigpOworCXJldHVybiB4OworfQorCisvKgorICogQXRvbWljIGNvbXBhcmUgYW5kIGV4Y2hhbmdlLiAgQ29tcGFyZSBPTEQgd2l0aCBNRU0sIGlmIGlkZW50aWNhbCwKKyAqIHN0b3JlIE5FVyBpbiBNRU0uICBSZXR1cm4gdGhlIGluaXRpYWwgdmFsdWUgaW4gTUVNLiAgU3VjY2VzcyBpcworICogaW5kaWNhdGVkIGJ5IGNvbXBhcmluZyBSRVRVUk4gd2l0aCBPTEQuCisgKgorICogVGhlIG1lbW9yeSBiYXJyaWVyIHNob3VsZCBiZSBwbGFjZWQgaW4gU01QIG9ubHkgd2hlbiB3ZSBhY3R1YWxseQorICogbWFrZSB0aGUgY2hhbmdlLiBJZiB3ZSBkb24ndCBjaGFuZ2UgYW55dGhpbmcgKHNvIGlmIHRoZSByZXR1cm5lZAorICogcHJldiBpcyBlcXVhbCB0byBvbGQpIHRoZW4gd2UgYXJlbid0IGFjcXVpcmluZyBhbnl0aGluZyBuZXcgYW5kCisgKiB3ZSBkb24ndCBuZWVkIGFueSBtZW1vcnkgYmFycmllciBhcyBmYXIgSSBjYW4gdGVsbC4KKyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fX19jbXB4Y2hnKF91OCwgdm9sYXRpbGUgY2hhciAqbSwgdW5zaWduZWQgY2hhciBvbGQsIHVuc2lnbmVkIGNoYXIgbmV3KQoreworCXVuc2lnbmVkIGxvbmcgcHJldiwgdG1wLCBjbXAsIGFkZHI2NDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCSIJYW5kbm90CSU1LDcsJTRcbiIKKwkiCWluc2JsCSUxLCU1LCUxXG4iCisJIjE6CWxkcV9sCSUyLDAoJTQpXG4iCisJIglleHRibAklMiwlNSwlMFxuIgorCSIJY21wZXEJJTAsJTYsJTNcbiIKKwkiCWJlcQklMywyZlxuIgorCSIJbXNrYmwJJTIsJTUsJTJcbiIKKwkiCW9yCSUxLCUyLCUyXG4iCisJIglzdHFfYwklMiwwKCU0KVxuIgorCSIJYmVxCSUyLDNmXG4iCisJCV9fQVNNX19NQgorCSIyOlxuIgorCSIuc3Vic2VjdGlvbiAyXG4iCisJIjM6CWJyCTFiXG4iCisJIi5wcmV2aW91cyIKKwk6ICI9JnIiIChwcmV2KSwgIj0mciIgKG5ldyksICI9JnIiICh0bXApLCAiPSZyIiAoY21wKSwgIj0mciIgKGFkZHI2NCkKKwk6ICJyIiAoKGxvbmcpbSksICJJciIgKG9sZCksICIxIiAobmV3KSA6ICJtZW1vcnkiKTsKKworCXJldHVybiBwcmV2OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fX19jbXB4Y2hnKF91MTYsIHZvbGF0aWxlIHNob3J0ICptLCB1bnNpZ25lZCBzaG9ydCBvbGQsIHVuc2lnbmVkIHNob3J0IG5ldykKK3sKKwl1bnNpZ25lZCBsb25nIHByZXYsIHRtcCwgY21wLCBhZGRyNjQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiCWFuZG5vdAklNSw3LCU0XG4iCisJIglpbnN3bAklMSwlNSwlMVxuIgorCSIxOglsZHFfbAklMiwwKCU0KVxuIgorCSIJZXh0d2wJJTIsJTUsJTBcbiIKKwkiCWNtcGVxCSUwLCU2LCUzXG4iCisJIgliZXEJJTMsMmZcbiIKKwkiCW1za3dsCSUyLCU1LCUyXG4iCisJIglvcgklMSwlMiwlMlxuIgorCSIJc3RxX2MJJTIsMCglNClcbiIKKwkiCWJlcQklMiwzZlxuIgorCQlfX0FTTV9fTUIKKwkiMjpcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIzOglicgkxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIiAocHJldiksICI9JnIiIChuZXcpLCAiPSZyIiAodG1wKSwgIj0mciIgKGNtcCksICI9JnIiIChhZGRyNjQpCisJOiAiciIgKChsb25nKW0pLCAiSXIiIChvbGQpLCAiMSIgKG5ldykgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX19fY21weGNoZyhfdTMyLCB2b2xhdGlsZSBpbnQgKm0sIGludCBvbGQsIGludCBuZXcpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2LCBjbXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRsX2wgJTAsJTVcbiIKKwkiCWNtcGVxICUwLCUzLCUxXG4iCisJIgliZXEgJTEsMmZcbiIKKwkiCW1vdiAlNCwlMVxuIgorCSIJc3RsX2MgJTEsJTJcbiIKKwkiCWJlcSAlMSwzZlxuIgorCQlfX0FTTV9fTUIKKwkiMjpcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIzOgliciAxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIihwcmV2KSwgIj0mciIoY21wKSwgIj1tIigqbSkKKwk6ICJyIigobG9uZykgb2xkKSwgInIiKG5ldyksICJtIigqbSkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitfX19fY21weGNoZyhfdTY0LCB2b2xhdGlsZSBsb25nICptLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcpCit7CisJdW5zaWduZWQgbG9uZyBwcmV2LCBjbXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkiMToJbGRxX2wgJTAsJTVcbiIKKwkiCWNtcGVxICUwLCUzLCUxXG4iCisJIgliZXEgJTEsMmZcbiIKKwkiCW1vdiAlNCwlMVxuIgorCSIJc3RxX2MgJTEsJTJcbiIKKwkiCWJlcSAlMSwzZlxuIgorCQlfX0FTTV9fTUIKKwkiMjpcbiIKKwkiLnN1YnNlY3Rpb24gMlxuIgorCSIzOgliciAxYlxuIgorCSIucHJldmlvdXMiCisJOiAiPSZyIihwcmV2KSwgIj0mciIoY21wKSwgIj1tIigqbSkKKwk6ICJyIigobG9uZykgb2xkKSwgInIiKG5ldyksICJtIigqbSkgOiAibWVtb3J5Iik7CisKKwlyZXR1cm4gcHJldjsKK30KKworLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGV4aXN0LCBzbyB5b3UnbGwgZ2V0IGEgbGlua2VyIGVycm9yCisgICBpZiBzb21ldGhpbmcgdHJpZXMgdG8gZG8gYW4gaW52YWxpZCBjbXB4Y2hnKCkuICAqLworZXh0ZXJuIHZvaWQgX19jbXB4Y2hnX2NhbGxlZF93aXRoX2JhZF9wb2ludGVyKHZvaWQpOworCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcKK19fX19jbXB4Y2hnKCwgdm9sYXRpbGUgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwgdW5zaWduZWQgbG9uZyBuZXcsCisJICAgICAgaW50IHNpemUpCit7CisJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgMToKKwkJCXJldHVybiBfX19fY21weGNoZyhfdTgsIHB0ciwgb2xkLCBuZXcpOworCQljYXNlIDI6CisJCQlyZXR1cm4gX19fX2NtcHhjaGcoX3UxNiwgcHRyLCBvbGQsIG5ldyk7CisJCWNhc2UgNDoKKwkJCXJldHVybiBfX19fY21weGNoZyhfdTMyLCBwdHIsIG9sZCwgbmV3KTsKKwkJY2FzZSA4OgorCQkJcmV0dXJuIF9fX19jbXB4Y2hnKF91NjQsIHB0ciwgb2xkLCBuZXcpOworCX0KKwlfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKKwlyZXR1cm4gb2xkOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL01ha2VmaWxlIGIvYXJjaC9hbHBoYS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYjQ2OTc3NS4uYTQyNzUzOCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDcgQEAKIAogb2JqLSQoQ09ORklHX1ZHQV9IT1NFKQkrPSBjb25zb2xlLm8KIG9iai0kKENPTkZJR19TTVApCSs9IHNtcC5vCi1vYmotJChDT05GSUdfUENJKQkrPSBwY2kubyBwY2lfaW9tbXUubworb2JqLSQoQ09ORklHX1BDSSkJKz0gcGNpLm8gcGNpX2lvbW11Lm8gcGNpLXN5c2ZzLm8KIG9iai0kKENPTkZJR19TUk1fRU5WKQkrPSBzcm1fZW52Lm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkrPSBtb2R1bGUubwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9lcnJfZXY2LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfZXY2LmMKaW5kZXggMTFhZWUwMS4uOTg1ZTVjMSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX2V2Ni5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2Vycl9ldjYuYwpAQCAtMTU3LDggKzE1Nyw4IEBACiAJCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LAogCQkgICAgICAgc3RyZWFtbmFtZVtzdHJlYW1dLCBiaXRzbmFtZVtiaXRzXSwgc291cmNlbmFtZVtzb3VyY2VdKTsKIAotCXByaW50aygiJXMgICAgQWRkcmVzczogMHglMDE2bHhcbiIKLQkgICAgICAgICAiICAgIFN5bmRyb21lW3VwcGVyLmxvd2VyXTogJTAybHguJTAybHhcbiIsIAorCXByaW50aygiJXMgICAgQWRkcmVzczogMHglMDE2bGx4XG4iCisJICAgICAgICAgIiAgICBTeW5kcm9tZVt1cHBlci5sb3dlcl06ICUwMmxseC4lMDJsbHhcbiIsCiAJICAgICAgIGVycl9wcmludF9wcmVmaXgsCiAJICAgICAgIGNfYWRkciwKIAkgICAgICAgYzJfc3luLCBjMV9zeW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX2V2Ny5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX2V2Ny5jCmluZGV4IDY4Y2Q0OTMuLjczNzcwYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2Vycl9ldjcuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfZXY3LmMKQEAgLTI0NiwxMyArMjQ2LDEzIEBACiAKIAlzd2l0Y2goaGVhZGVyLT50eXBlKSB7CiAJY2FzZSBFTF9UWVBFX19QQUxfX0xPR09VVF9GUkFNRToKLQkJcHJpbnRrKCIlcyoqKiBNQ0hLIG9jY3VycmVkIG9uIExQSUQgJWxkIChSQk9YICVseClcbiIsCisJCXByaW50aygiJXMqKiogTUNISyBvY2N1cnJlZCBvbiBMUElEICVsZCAoUkJPWCAlbGx4KVxuIiwKIAkJICAgICAgIGVycl9wcmludF9wcmVmaXgsCiAJCSAgICAgICBwYWNrZXQtPmJ5X3R5cGUubG9nb3V0LndoYW1pLCAKIAkJICAgICAgIHBhY2tldC0+YnlfdHlwZS5sb2dvdXQucmJveF93aGFtaSk7CiAJCWVsX3ByaW50X3RpbWVzdGFtcCgmcGFja2V0LT5ieV90eXBlLmxvZ291dC50aW1lc3RhbXApOwotCQlwcmludGsoIiVzICBFWENfQUREUjogJTAxNmx4XG4iCi0JCSAgICAgICAgICIgIEhBTFRfQ09ERTogJWx4XG4iLCAKKwkJcHJpbnRrKCIlcyAgRVhDX0FERFI6ICUwMTZsbHhcbiIKKwkJICAgICAgICAgIiAgSEFMVF9DT0RFOiAlbGx4XG4iLAogCQkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwKIAkJICAgICAgIHBhY2tldC0+YnlfdHlwZS5sb2dvdXQuZXhjX2FkZHIsCiAJCSAgICAgICBwYWNrZXQtPmJ5X3R5cGUubG9nb3V0LmhhbHRfY29kZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9lcnJfbWFydmVsLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfbWFydmVsLmMKaW5kZXggNDEzYmYzNy4uNmJmZDI0MyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX21hcnZlbC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2Vycl9tYXJ2ZWwuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAKIAogCXByaW50aygiJXMgICAgICBDb3JyZWN0YWJsZSBFcnJvciBTeW1wdG9tczpcbiIKLQkgICAgICAgIiVzICAgICAgICBTeW5kcm9tZTogMHglbHhcbiIsCisJICAgICAgICIlcyAgICAgICAgU3luZHJvbWU6IDB4JWxseFxuIiwKIAkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwKIAkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwgRVhUUkFDVChjcnJjdF9zeW0sIElPN19fUE83X0NSUkNUX1NZTV9fU1lOKSk7CiAJbWFydmVsX3ByaW50X2Vycl9jeWMoRVhUUkFDVChjcnJjdF9zeW0sIElPN19fUE83X0NSUkNUX1NZTV9fRVJSX0NZQykpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJdW5jcnJfc3ltICY9IHZhbGlkX21hc2s7CiAKIAlpZiAoRVhUUkFDVCh2YWxpZF9tYXNrLCBJTzdfX1BPN19VTkNSUl9TWU1fX1NZTikpCi0JCXByaW50aygiJXMgICAgICAgIFN5bmRyb21lOiAweCVseFxuIiwKKwkJcHJpbnRrKCIlcyAgICAgICAgU3luZHJvbWU6IDB4JWxseFxuIiwKIAkJICAgICAgIGVycl9wcmludF9wcmVmaXgsIAogCQkgICAgICAgRVhUUkFDVCh1bmNycl9zeW0sIElPN19fUE83X1VOQ1JSX1NZTV9fU1lOKSk7CiAKQEAgLTMwNyw3ICszMDcsNyBAQAogCQlzcHJpbnRmKG9wY29kZV9zdHIsICJCbGtJTyIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzcHJpbnRmKG9wY29kZV9zdHIsICIweCVseFxuIiwgCisJCXNwcmludGYob3Bjb2RlX3N0ciwgIjB4JWxseFxuIiwKIAkJCUVYVFJBQ1QodWdiZ2Vfc3ltLCBJTzdfX1BPN19VR0JHRV9TWU1fX1VQSF9PUENPREUpKTsKIAkJYnJlYWs7CiAJfQpAQCAtMzIxLDcgKzMyMSw3IEBACiAJICAgICAgIG9wY29kZV9zdHIpOwogCiAJaWYgKDB4QzUgIT0gRVhUUkFDVCh1Z2JnZV9zeW0sIElPN19fUE83X1VHQkdFX1NZTV9fVVBIX09QQ09ERSkpCi0JCXByaW50aygiJXMgICAgICAgIFBhY2tldCBPZmZzZXQgMHglMDhseFxuIiwKKwkJcHJpbnRrKCIlcyAgICAgICAgUGFja2V0IE9mZnNldCAweCUwOGxseFxuIiwKIAkJICAgICAgIGVycl9wcmludF9wcmVmaXgsCiAJCSAgICAgICBFWFRSQUNUKHVnYmdlX3N5bSwgSU83X19QTzdfVUdCR0VfU1lNX19VUEhfUEtUX09GRikpOwogfQpAQCAtNDgwLDggKzQ4MCw4IEBACiAJCXByaW50aygiJXMgICAgTG9zdCBFcnJvclxuIiwgZXJyX3ByaW50X3ByZWZpeCk7CiAKIAlwcmludGsoIiVzICAgIEZhaWxpbmcgUGFja2V0OlxuIgotCSAgICAgICAiJXMgICAgICBDeWNsZSAxOiAlMDE2bHhcbiIKLQkgICAgICAgIiVzICAgICAgQ3ljbGUgMjogJTAxNmx4XG4iLAorCSAgICAgICAiJXMgICAgICBDeWNsZSAxOiAlMDE2bGx4XG4iCisJICAgICAgICIlcyAgICAgIEN5Y2xlIDI6ICUwMTZsbHhcbiIsCiAJICAgICAgIGVycl9wcmludF9wcmVmaXgsCiAJICAgICAgIGVycl9wcmludF9wcmVmaXgsIGlvLT5wbzdfZXJyX3BrdDAsCiAJICAgICAgIGVycl9wcmludF9wcmVmaXgsIGlvLT5wbzdfZXJyX3BrdDEpOwpAQCAtNTE1LDkgKzUxNSw5IEBACiAJaWYgKCEodGxiX2VyciAmIElPN19fUE9YX1RMQkVSUl9fRVJSX1ZBTElEKSkKIAkJcmV0dXJuOwogCi0JcHJpbnRrKCIlcyAgICAgIFRMQiBFcnJvciBvbiBpbmRleCAweCVseDpcbiIKKwlwcmludGsoIiVzICAgICAgVExCIEVycm9yIG9uIGluZGV4IDB4JWxseDpcbiIKIAkgICAgICAgIiVzICAgICAgICAtICVzXG4iCi0JICAgICAgICIlcyAgICAgICAgLSBBZGRyOiAweCUwMTZseFxuIiwKKwkgICAgICAgIiVzICAgICAgICAtIEFkZHI6IDB4JTAxNmxseFxuIiwKIAkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwKIAkgICAgICAgRVhUUkFDVCh0bGJfZXJyLCBJTzdfX1BPWF9UTEJFUlJfX0VSUl9UTEJfUFRSKSwKIAkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwKQEAgLTU3OSw3ICs1NzksNyBAQAogCQlzcHJpbnRmKG1lc3NhZ2UsICJVbmNvcnJlY3RhYmxlIFNwbGl0IFdyaXRlIERhdGEgRXJyb3IiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc3ByaW50ZihtZXNzYWdlLCAiJTA4bHhcbiIsIAorCQlzcHJpbnRmKG1lc3NhZ2UsICIlMDhsbHhcbiIsCiAJCQlFWFRSQUNUKHNwbF9jbXBsdCwgSU83X19QT1hfU1BMQ01QTFRfX01FU1NBR0UpKTsKIAkJYnJlYWs7CiAJfQpAQCAtNjIwLDkgKzYyMCw5IEBACiAJCXJldHVybjsKIAogCXByaW50aygiJXMgICAgICBUcmFuc2FjdGlvbiBTdW1tYXJ5OlxuIgotCSAgICAgICAiJXMgICAgICAgIENvbW1hbmQ6IDB4JWx4IC0gJXNcbiIKLQkgICAgICAgIiVzICAgICAgICBBZGRyZXNzOiAweCUwMTZseCVzXG4iCi0JICAgICAgICIlcyAgICAgICAgUENJLVggTWFzdGVyIFNsb3Q6IDB4JWx4XG4iLAorCSAgICAgICAiJXMgICAgICAgIENvbW1hbmQ6IDB4JWxseCAtICVzXG4iCisJICAgICAgICIlcyAgICAgICAgQWRkcmVzczogMHglMDE2bGx4JXNcbiIKKwkgICAgICAgIiVzICAgICAgICBQQ0ktWCBNYXN0ZXIgU2xvdDogMHglbGx4XG4iLAogCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LCAKIAkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwgCiAJICAgICAgIEVYVFJBQ1QodHJhbnNfc3VtLCBJTzdfX1BPWF9UUkFOU1VNX19QQ0lYX0NNRCksCkBAIC05NjQsMTIgKzk2NCwxMiBAQAogCiAjaWYgMAogCQlwcmludGsoIiVzICBQT1JUIDcgRVJST1I6XG4iCi0JCSAgICAgICAiJXMgICAgUE83X0VSUk9SX1NVTTogJTAxNmx4XG4iCi0JCSAgICAgICAiJXMgICAgUE83X1VOQ1JSX1NZTTogJTAxNmx4XG4iCi0JCSAgICAgICAiJXMgICAgUE83X0NSUkNUX1NZTTogJTAxNmx4XG4iCi0JCSAgICAgICAiJXMgICAgUE83X1VHQkdFX1NZTTogJTAxNmx4XG4iCi0JCSAgICAgICAiJXMgICAgUE83X0VSUl9QS1QwOiAgJTAxNmx4XG4iCi0JCSAgICAgICAiJXMgICAgUE83X0VSUl9QS1QxOiAgJTAxNmx4XG4iLAorCQkgICAgICAgIiVzICAgIFBPN19FUlJPUl9TVU06ICUwMTZsbHhcbiIKKwkJICAgICAgICIlcyAgICBQTzdfVU5DUlJfU1lNOiAlMDE2bGx4XG4iCisJCSAgICAgICAiJXMgICAgUE83X0NSUkNUX1NZTTogJTAxNmxseFxuIgorCQkgICAgICAgIiVzICAgIFBPN19VR0JHRV9TWU06ICUwMTZsbHhcbiIKKwkJICAgICAgICIlcyAgICBQTzdfRVJSX1BLVDA6ICAlMDE2bGx4XG4iCisJCSAgICAgICAiJXMgICAgUE83X0VSUl9QS1QxOiAgJTAxNmxseFxuIiwKIAkJICAgICAgIGVycl9wcmludF9wcmVmaXgsCiAJCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LCBpby0+cG83X2Vycm9yX3N1bSwKIAkJICAgICAgIGVycl9wcmludF9wcmVmaXgsIGlvLT5wbzdfdW5jcnJfc3ltLApAQCAtOTg3LDEyICs5ODcsMTIgQEAKIAkJaWYgKCFNQVJWRUxfSU9fRVJSX1ZBTElEKGlvLT5wb3J0c1tpXS5wb3hfZXJyX3N1bSkpCiAJCQljb250aW51ZTsKIAotCQlwcmludGsoIiVzICBQSUQgJXUgUE9SVCAlZCBQT3hfRVJSX1NVTTogJTAxNmx4XG4iLCAKKwkJcHJpbnRrKCIlcyAgUElEICV1IFBPUlQgJWQgUE94X0VSUl9TVU06ICUwMTZsbHhcbiIsCiAJCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LCAKIAkJICAgICAgIGxmX3N1YnBhY2tldHMtPmlvX3BpZCwgaSwgaW8tPnBvcnRzW2ldLnBveF9lcnJfc3VtKTsKIAkJbWFydmVsX3ByaW50X3BveF9lcnIoaW8tPnBvcnRzW2ldLnBveF9lcnJfc3VtLCAmaW8tPnBvcnRzW2ldKTsKIAotCQlwcmludGsoIiVzICBbIFBPeF9GSVJTVF9FUlI6ICUwMTZseCBdXG4iLCAKKwkJcHJpbnRrKCIlcyAgWyBQT3hfRklSU1RfRVJSOiAlMDE2bGx4IF1cbiIsCiAJCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LCBpby0+cG9ydHNbaV0ucG94X2ZpcnN0X2Vycik7CiAJCW1hcnZlbF9wcmludF9wb3hfZXJyKGlvLT5wb3J0c1tpXS5wb3hfZmlyc3RfZXJyLCAKIAkJCQkgICAgICZpby0+cG9ydHNbaV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX3RpdGFuLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfdGl0YW4uYwppbmRleCAyNTc0NDllLi5jN2UyOGE4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9lcnJfdGl0YW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfdGl0YW4uYwpAQCAtMTA3LDEyICsxMDcsMTIgQEAKIAlpZiAoIXByaW50KQogCQlyZXR1cm4gc3RhdHVzOwogCi0JcHJpbnRrKCIlcyAgUENoaXAgJWQgU0VSUk9SOiAlMDE2bHhcbiIsIAorCXByaW50aygiJXMgIFBDaGlwICVkIFNFUlJPUjogJTAxNmxseFxuIiwKIAkgICAgICAgZXJyX3ByaW50X3ByZWZpeCwgd2hpY2gsIHNlcnJvcik7CiAJaWYgKHNlcnJvciAmIFRJVEFOX19QQ0hJUF9TRVJST1JfX0VDQ01BU0spIHsKIAkJcHJpbnRrKCIlcyAgICAlc29ycmVjdGFibGUgRUNDIEVycm9yOlxuIgogCQkgICAgICAgIiAgICAgIFNvdXJjZTogJS02cyAgQ29tbWFuZDogJS04cyAgU3luZHJvbWU6IDB4JTA4eFxuIgotCQkgICAgICAgIiAgICAgIEFkZHJlc3M6IDB4JWx4XG4iLCAKKwkJICAgICAgICIgICAgICBBZGRyZXNzOiAweCVsbHhcbiIsCiAJCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LAogCQkgICAgICAgKHNlcnJvciAmIFRJVEFOX19QQ0hJUF9TRVJST1JfX1VFQ0MpID8gIlVuYyIgOiAiQyIsCiAJCSAgICAgICBzZXJyb3Jfc3JjW0VYVFJBQ1Qoc2Vycm9yLCBUSVRBTl9fUENISVBfU0VSUk9SX19TUkMpXSwKQEAgLTIyMyw3ICsyMjMsNyBAQAogCWlmICghcHJpbnQpIAogCQlyZXR1cm4gc3RhdHVzOwogCi0JcHJpbnRrKCIlcyAgUENoaXAgJWQgJWNQRVJST1I6ICUwMTZseFxuIiwgCisJcHJpbnRrKCIlcyAgUENoaXAgJWQgJWNQRVJST1I6ICUwMTZsbHhcbiIsCiAJICAgICAgIGVycl9wcmludF9wcmVmaXgsIHdoaWNoLCAKIAkgICAgICAgcG9ydCA/ICdBJyA6ICdHJywgcGVycm9yKTsKIAlpZiAocGVycm9yICYgVElUQU5fX1BDSElQX1BFUlJPUl9fSVBUUFcpCkBAIC0zMTYsNyArMzE2LDcgQEAKIAlhZGRyID0gRVhUUkFDVChhZ3BlcnJvciwgVElUQU5fX1BDSElQX0FHUEVSUk9SX19BRERSKSA8PCAzOwogCWxlbiA9IEVYVFJBQ1QoYWdwZXJyb3IsIFRJVEFOX19QQ0hJUF9BR1BFUlJPUl9fTEVOKTsKIAotCXByaW50aygiJXMgIFBDaGlwICVkIEFHUEVSUk9SOiAlMDE2bHhcbiIsIGVycl9wcmludF9wcmVmaXgsCisJcHJpbnRrKCIlcyAgUENoaXAgJWQgQUdQRVJST1I6ICUwMTZsbHhcbiIsIGVycl9wcmludF9wcmVmaXgsCiAJICAgICAgIHdoaWNoLCBhZ3BlcnJvcik7CiAJaWYgKGFncGVycm9yICYgVElUQU5fX1BDSElQX0FHUEVSUk9SX19OT1dJTkRPVykKIAkJcHJpbnRrKCIlcyAgICBObyBXaW5kb3dcbiIsIGVycl9wcmludF9wcmVmaXgpOwpAQCAtNTk3LDE2ICs1OTcsMTYgQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCS8qIFRPRE8gLSBkZWNvZGUgaW5zdGVhZCBvZiBqdXN0IGR1bXBpbmcuLi4gKi8KLQlwcmludGsoIiVzICBTdW1tYXJ5IEZsYWdzOiAgICAgICAgICUwMTZseFxuIgotIAkgICAgICAgICAiICBDQ2hpcCBESVJ4OiAgICAgICAgICAgICUwMTZseFxuIgotCQkgIiAgU3lzdGVtIE1hbmFnZW1lbnQgSVI6ICAlMDE2bHhcbiIKLQkJICIgIENQVSBJUjogICAgICAgICAgICAgICAgJTAxNmx4XG4iCi0JCSAiICBQb3dlciBTdXBwbHkgSVI6ICAgICAgICUwMTZseFxuIgotCQkgIiAgTE03OCBGYXVsdCBTdGF0dXM6ICAgICAlMDE2bHhcbiIKLQkJICIgIFN5c3RlbSBEb29yczogICAgICAgICAgJTAxNmx4XG4iCi0JCSAiICBUZW1wZXJhdHVyZSBXYXJuaW5nOiAgICUwMTZseFxuIgotCQkgIiAgRmFuIENvbnRyb2w6ICAgICAgICAgICAlMDE2bHhcbiIKLQkJICIgIEZhdGFsIFBvd2VyIERvd24gQ29kZTogJTAxNmx4XG4iLAorCXByaW50aygiJXMgIFN1bW1hcnkgRmxhZ3M6ICAgICAgICAgJTAxNmxseFxuIgorIAkgICAgICAgICAiICBDQ2hpcCBESVJ4OiAgICAgICAgICAgICUwMTZsbHhcbiIKKwkJICIgIFN5c3RlbSBNYW5hZ2VtZW50IElSOiAgJTAxNmxseFxuIgorCQkgIiAgQ1BVIElSOiAgICAgICAgICAgICAgICAlMDE2bGx4XG4iCisJCSAiICBQb3dlciBTdXBwbHkgSVI6ICAgICAgICUwMTZsbHhcbiIKKwkJICIgIExNNzggRmF1bHQgU3RhdHVzOiAgICAgJTAxNmxseFxuIgorCQkgIiAgU3lzdGVtIERvb3JzOiAgICAgICAgICAlMDE2bGx4XG4iCisJCSAiICBUZW1wZXJhdHVyZSBXYXJuaW5nOiAgICUwMTZsbHhcbiIKKwkJICIgIEZhbiBDb250cm9sOiAgICAgICAgICAgJTAxNmxseFxuIgorCQkgIiAgRmF0YWwgUG93ZXIgRG93biBDb2RlOiAlMDE2bGx4XG4iLAogCSAgICAgICBlcnJfcHJpbnRfcHJlZml4LAogCSAgICAgICBlbWNoay0+c3VtbWFyeSwKIAkgICAgICAgZW1jaGstPmNfZGlyeCwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaS1zeXNmcy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLXN5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhODIyZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3BjaS1zeXNmcy5jCkBAIC0wLDAgKzEsMzY2IEBACisvKgorICogYXJjaC9hbHBoYS9rZXJuZWwvcGNpLXN5c2ZzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSXZhbiBLb2tzaGF5c2t5CisgKgorICogQWxwaGEgUENJIHJlc291cmNlIGZpbGVzLgorICoKKyAqIExvb3NlbHkgYmFzZWQgb24gZ2VuZXJpYyBIQVZFX1BDSV9NTUFQIGltcGxlbWVudGF0aW9uIGluCisgKiBkcml2ZXJzL3BjaS9wY2ktc3lzZnMuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorCitzdGF0aWMgaW50IGhvc2VfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKKwkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQllbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfdHlwZSwgaW50IHNwYXJzZSkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2U7CisKKwlpZiAobW1hcF90eXBlID09IHBjaV9tbWFwX21lbSkKKwkJYmFzZSA9IHNwYXJzZSA/IGhvc2UtPnNwYXJzZV9tZW1fYmFzZSA6IGhvc2UtPmRlbnNlX21lbV9iYXNlOworCWVsc2UKKwkJYmFzZSA9IHNwYXJzZSA/IGhvc2UtPnNwYXJzZV9pb19iYXNlIDogaG9zZS0+ZGVuc2VfaW9fYmFzZTsKKworCXZtYS0+dm1fcGdvZmYgKz0gYmFzZSA+PiBQQUdFX1NISUZUOworCXZtYS0+dm1fZmxhZ3MgfD0gKFZNX0lPIHwgVk1fUkVTRVJWRUQpOworCisJcmV0dXJuIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGdvZmYsCisJCQkJICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCQkJICB2bWEtPnZtX3BhZ2VfcHJvdCk7Cit9CisKK3N0YXRpYyBpbnQgX19wY2lfbW1hcF9maXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtLAorCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIGludCBzcGFyc2UpCit7CisJdW5zaWduZWQgbG9uZyBuciwgc3RhcnQsIHNpemU7CisJaW50IHNoaWZ0ID0gc3BhcnNlID8gNSA6IDA7CisKKwluciA9ICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJc3RhcnQgPSB2bWEtPnZtX3Bnb2ZmOworCXNpemUgPSAoKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgbnVtKSAtIDEpID4+IChQQUdFX1NISUZUIC0gc2hpZnQpKSArIDE7CisKKwlpZiAoc3RhcnQgPCBzaXplICYmIHNpemUgLSBzdGFydCA+PSBucikKKwkJcmV0dXJuIDE7CisJV0FSTigxLCAicHJvY2VzcyBcIiVzXCIgdHJpZWQgdG8gbWFwJXMgMHglMDhseC0weCUwOGx4IG9uICVzIEJBUiAlZCAiCisJCSIoc2l6ZSAweCUwOGx4KVxuIiwKKwkJY3VycmVudC0+Y29tbSwgc3BhcnNlID8gIiBzcGFyc2UiIDogIiIsIHN0YXJ0LCBzdGFydCArIG5yLAorCQlwY2lfbmFtZShwZGV2KSwgbnVtLCBzaXplKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwY2lfbW1hcF9yZXNvdXJjZSAtIG1hcCBhIFBDSSByZXNvdXJjZSBpbnRvIHVzZXIgbWVtb3J5IHNwYWNlCisgKiBAa29iajoga29iamVjdCBmb3IgbWFwcGluZworICogQGF0dHI6IHN0cnVjdCBiaW5fYXR0cmlidXRlIGZvciB0aGUgZmlsZSBiZWluZyBtYXBwZWQKKyAqIEB2bWE6IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCBwYXNzZWQgaW50byB0aGUgbW1hcAorICogQHNwYXJzZTogYWRkcmVzcyBzcGFjZSB0eXBlCisgKgorICogVXNlIHRoZSBidXMgbWFwcGluZyByb3V0aW5lcyB0byBtYXAgYSBQQ0kgcmVzb3VyY2UgaW50byB1c2Vyc3BhY2UuCisgKi8KK3N0YXRpYyBpbnQgcGNpX21tYXBfcmVzb3VyY2Uoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAorCQkJICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgaW50IHNwYXJzZSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoY29udGFpbmVyX29mKGtvYmosCisJCQkJCQkgICAgICAgc3RydWN0IGRldmljZSwga29iaikpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gKHN0cnVjdCByZXNvdXJjZSAqKWF0dHItPnByaXZhdGU7CisJZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3R5cGU7CisJc3RydWN0IHBjaV9idXNfcmVnaW9uIGJhcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBQQ0lfUk9NX1JFU09VUkNFOyBpKyspCisJCWlmIChyZXMgPT0gJnBkZXYtPnJlc291cmNlW2ldKQorCQkJYnJlYWs7CisJaWYgKGkgPj0gUENJX1JPTV9SRVNPVVJDRSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIV9fcGNpX21tYXBfZml0cyhwZGV2LCBpLCB2bWEsIHNwYXJzZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlvbWVtX2lzX2V4Y2x1c2l2ZShyZXMtPnN0YXJ0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhwZGV2LCAmYmFyLCByZXMpOworCXZtYS0+dm1fcGdvZmYgKz0gYmFyLnN0YXJ0ID4+IChQQUdFX1NISUZUIC0gKHNwYXJzZSA/IDUgOiAwKSk7CisJbW1hcF90eXBlID0gcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNID8gcGNpX21tYXBfbWVtIDogcGNpX21tYXBfaW87CisKKwlyZXR1cm4gaG9zZV9tbWFwX3BhZ2VfcmFuZ2UocGRldi0+c3lzZGF0YSwgdm1hLCBtbWFwX3R5cGUsIHNwYXJzZSk7Cit9CisKK3N0YXRpYyBpbnQgcGNpX21tYXBfcmVzb3VyY2Vfc3BhcnNlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIHBjaV9tbWFwX3Jlc291cmNlKGtvYmosIGF0dHIsIHZtYSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgcGNpX21tYXBfcmVzb3VyY2VfZGVuc2Uoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICAgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIHBjaV9tbWFwX3Jlc291cmNlKGtvYmosIGF0dHIsIHZtYSwgMCk7Cit9CisKKy8qKgorICogcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyAtIGNsZWFudXAgcmVzb3VyY2UgZmlsZXMKKyAqIEBkZXY6IGRldiB0byBjbGVhbnVwCisgKgorICogSWYgd2UgY3JlYXRlZCByZXNvdXJjZSBmaWxlcyBmb3IgQGRldiwgcmVtb3ZlIHRoZW0gZnJvbSBzeXNmcyBhbmQKKyAqIGZyZWUgdGhlaXIgcmVzb3VyY2VzLgorICovCit2b2lkIHBjaV9yZW1vdmVfcmVzb3VyY2VfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJX1JPTV9SRVNPVVJDRTsgaSsrKSB7CisJCXN0cnVjdCBiaW5fYXR0cmlidXRlICpyZXNfYXR0cjsKKworCQlyZXNfYXR0ciA9IHBkZXYtPnJlc19hdHRyW2ldOworCQlpZiAocmVzX2F0dHIpIHsKKwkJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIHJlc19hdHRyKTsKKwkJCWtmcmVlKHJlc19hdHRyKTsKKwkJfQorCisJCXJlc19hdHRyID0gcGRldi0+cmVzX2F0dHJfd2NbaV07CisJCWlmIChyZXNfYXR0cikgeworCQkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgcmVzX2F0dHIpOworCQkJa2ZyZWUocmVzX2F0dHIpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHNwYXJzZV9tZW1fbW1hcF9maXRzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtKQoreworCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiBiYXI7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGRldi0+c3lzZGF0YTsKKwlsb25nIGRlbnNlX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHNwYXJzZV9zaXplOworCisJcGNpYmlvc19yZXNvdXJjZV90b19idXMocGRldiwgJmJhciwgJnBkZXYtPnJlc291cmNlW251bV0pOworCisJLyogQWxsIGNvcmUgbG9naWMgY2hpcHMgaGF2ZSA0RyBzcGFyc2UgYWRkcmVzcyBzcGFjZSwgZXhjZXB0CisJICAgQ0lBIHdoaWNoIGhhcyAxNkcgKHNlZSB4eHhfU1BBUlNFX01FTSBhbmQgeHh4X0RFTlNFX01FTQorCSAgIGRlZmluaXRpb25zIGluIGFzbS9jb3JlX3h4eC5oIGZpbGVzKS4gVGhpcyBjb3JyZXNwb25kcworCSAgIHRvIDEyOE0gb3IgNTEyTSBvZiB0aGUgYnVzIHNwYWNlLiAqLworCWRlbnNlX29mZnNldCA9IChsb25nKShob3NlLT5kZW5zZV9tZW1fYmFzZSAtIGhvc2UtPnNwYXJzZV9tZW1fYmFzZSk7CisJc3BhcnNlX3NpemUgPSBkZW5zZV9vZmZzZXQgPj0gMHg0MDAwMDAwMDBVTCA/IDB4MjAwMDAwMDAgOiAweDgwMDAwMDA7CisKKwlyZXR1cm4gYmFyLmVuZCA8IHNwYXJzZV9zaXplOworfQorCitzdGF0aWMgaW50IHBjaV9jcmVhdGVfb25lX2F0dHIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudW0sIGNoYXIgKm5hbWUsCisJCQkgICAgICAgY2hhciAqc3VmZml4LCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqcmVzX2F0dHIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzcGFyc2UpCit7CisJc2l6ZV90IHNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIG51bSk7CisKKwlzcHJpbnRmKG5hbWUsICJyZXNvdXJjZSVkJXMiLCBudW0sIHN1ZmZpeCk7CisJcmVzX2F0dHItPm1tYXAgPSBzcGFyc2UgPyBwY2lfbW1hcF9yZXNvdXJjZV9zcGFyc2UgOgorCQkJCSAgcGNpX21tYXBfcmVzb3VyY2VfZGVuc2U7CisJcmVzX2F0dHItPmF0dHIubmFtZSA9IG5hbWU7CisJcmVzX2F0dHItPmF0dHIubW9kZSA9IFNfSVJVU1IgfCBTX0lXVVNSOworCXJlc19hdHRyLT5zaXplID0gc3BhcnNlID8gc2l6ZSA8PCA1IDogc2l6ZTsKKwlyZXNfYXR0ci0+cHJpdmF0ZSA9ICZwZGV2LT5yZXNvdXJjZVtudW1dOworCXJldHVybiBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCByZXNfYXR0cik7Cit9CisKK3N0YXRpYyBpbnQgcGNpX2NyZWF0ZV9hdHRyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnVtKQoreworCS8qIGFsbG9jYXRlIGF0dHJpYnV0ZSBzdHJ1Y3R1cmUsIHBpZ2d5YmFjayBhdHRyaWJ1dGUgbmFtZSAqLworCWludCByZXR2YWwsIG5sZW4xLCBubGVuMiA9IDAsIHJlc19jb3VudCA9IDE7CisJdW5zaWduZWQgbG9uZyBzcGFyc2VfYmFzZSwgZGVuc2VfYmFzZTsKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0cjsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwZGV2LT5zeXNkYXRhOworCWNoYXIgKnN1ZmZpeCwgKmF0dHJfbmFtZTsKKworCXN1ZmZpeCA9ICIiOwkvKiBBc3N1bWUgYnd4IG1hY2hpbmUsIG5vcm1hbCByZXNvdXJjZU4gZmlsZXMuICovCisJbmxlbjEgPSAxMDsKKworCWlmIChwZGV2LT5yZXNvdXJjZVtudW1dLmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKKwkJc3BhcnNlX2Jhc2UgPSBob3NlLT5zcGFyc2VfbWVtX2Jhc2U7CisJCWRlbnNlX2Jhc2UgPSBob3NlLT5kZW5zZV9tZW1fYmFzZTsKKwkJaWYgKHNwYXJzZV9iYXNlICYmICFzcGFyc2VfbWVtX21tYXBfZml0cyhwZGV2LCBudW0pKSB7CisJCQlzcGFyc2VfYmFzZSA9IDA7CisJCQlzdWZmaXggPSAiX2RlbnNlIjsKKwkJCW5sZW4xID0gMTY7CS8qIHJlc291cmNlTl9kZW5zZSAqLworCQl9CisJfSBlbHNlIHsKKwkJc3BhcnNlX2Jhc2UgPSBob3NlLT5zcGFyc2VfaW9fYmFzZTsKKwkJZGVuc2VfYmFzZSA9IGhvc2UtPmRlbnNlX2lvX2Jhc2U7CisJfQorCisJaWYgKHNwYXJzZV9iYXNlKSB7CisJCXN1ZmZpeCA9ICJfc3BhcnNlIjsKKwkJbmxlbjEgPSAxNzsKKwkJaWYgKGRlbnNlX2Jhc2UpIHsKKwkJCW5sZW4yID0gMTY7CS8qIHJlc291cmNlTl9kZW5zZSAqLworCQkJcmVzX2NvdW50ID0gMjsKKwkJfQorCX0KKworCWF0dHIgPSBremFsbG9jKHNpemVvZigqYXR0cikgKiByZXNfY291bnQgKyBubGVuMSArIG5sZW4yLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWF0dHIpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogQ3JlYXRlIGJ3eCwgc3BhcnNlIG9yIHNpbmdsZSBkZW5zZSBmaWxlICovCisJYXR0cl9uYW1lID0gKGNoYXIgKikoYXR0ciArIHJlc19jb3VudCk7CisJcGRldi0+cmVzX2F0dHJbbnVtXSA9IGF0dHI7CisJcmV0dmFsID0gcGNpX2NyZWF0ZV9vbmVfYXR0cihwZGV2LCBudW0sIGF0dHJfbmFtZSwgc3VmZml4LCBhdHRyLAorCQkJCSAgICAgc3BhcnNlX2Jhc2UpOworCWlmIChyZXR2YWwgfHwgcmVzX2NvdW50ID09IDEpCisJCXJldHVybiByZXR2YWw7CisKKwkvKiBDcmVhdGUgZGVuc2UgZmlsZSAqLworCWF0dHJfbmFtZSArPSBubGVuMTsKKwlhdHRyKys7CisJcGRldi0+cmVzX2F0dHJfd2NbbnVtXSA9IGF0dHI7CisJcmV0dXJuIHBjaV9jcmVhdGVfb25lX2F0dHIocGRldiwgbnVtLCBhdHRyX25hbWUsICJfZGVuc2UiLCBhdHRyLCAwKTsKK30KKworLyoqCisgKiBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzIC0gY3JlYXRlIHJlc291cmNlIGZpbGVzIGluIHN5c2ZzIGZvciBAZGV2CisgKiBAZGV2OiBkZXYgaW4gcXVlc3Rpb24KKyAqCisgKiBXYWxrIHRoZSByZXNvdXJjZXMgaW4gQGRldiBjcmVhdGluZyBmaWxlcyBmb3IgZWFjaCByZXNvdXJjZSBhdmFpbGFibGUuCisgKi8KK2ludCBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBpOworCWludCByZXR2YWw7CisKKwkvKiBFeHBvc2UgdGhlIFBDSSByZXNvdXJjZXMgZnJvbSB0aGlzIGRldmljZSBhcyBmaWxlcyAqLworCWZvciAoaSA9IDA7IGkgPCBQQ0lfUk9NX1JFU09VUkNFOyBpKyspIHsKKworCQkvKiBza2lwIGVtcHR5IHJlc291cmNlcyAqLworCQlpZiAoIXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSkpCisJCQljb250aW51ZTsKKworCQlyZXR2YWwgPSBwY2lfY3JlYXRlX2F0dHIocGRldiwgaSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCXBjaV9yZW1vdmVfcmVzb3VyY2VfZmlsZXMocGRldik7CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKiBMZWdhY3kgSS9PIGJ1cyBtYXBwaW5nIHN0dWZmLiAqLworCitzdGF0aWMgaW50IF9fbGVnYWN5X21tYXBfZml0cyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmVzX3NpemUsIGludCBzcGFyc2UpCit7CisJdW5zaWduZWQgbG9uZyBuciwgc3RhcnQsIHNpemU7CisKKwluciA9ICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJc3RhcnQgPSB2bWEtPnZtX3Bnb2ZmOworCXNpemUgPSAoKHJlc19zaXplIC0gMSkgPj4gUEFHRV9TSElGVCkgKyAxOworCisJaWYgKHN0YXJ0IDwgc2l6ZSAmJiBzaXplIC0gc3RhcnQgPj0gbnIpCisJCXJldHVybiAxOworCVdBUk4oMSwgInByb2Nlc3MgXCIlc1wiIHRyaWVkIHRvIG1hcCVzIDB4JTA4bHgtMHglMDhseCBvbiBob3NlICVkICIKKwkJIihzaXplIDB4JTA4bHgpXG4iLAorCQljdXJyZW50LT5jb21tLCBzcGFyc2UgPyAiIHNwYXJzZSIgOiAiIiwgc3RhcnQsIHN0YXJ0ICsgbnIsCisJCWhvc2UtPmluZGV4LCBzaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaGFzX3NwYXJzZShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF90eXBlKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKworCWJhc2UgPSAobW1hcF90eXBlID09IHBjaV9tbWFwX21lbSkgPyBob3NlLT5zcGFyc2VfbWVtX2Jhc2UgOgorCQkJCQkgICAgIGhvc2UtPnNwYXJzZV9pb19iYXNlOworCisJcmV0dXJuIGJhc2UgIT0gMDsKK30KKworaW50IHBjaV9tbWFwX2xlZ2FjeV9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF90eXBlKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKKwlpbnQgc3BhcnNlID0gaGFzX3NwYXJzZShob3NlLCBtbWFwX3R5cGUpOworCXVuc2lnbmVkIGxvbmcgcmVzX3NpemU7CisKKwlyZXNfc2l6ZSA9IChtbWFwX3R5cGUgPT0gcGNpX21tYXBfbWVtKSA/IGJ1cy0+bGVnYWN5X21lbS0+c2l6ZSA6CisJCQkJCQkgYnVzLT5sZWdhY3lfaW8tPnNpemU7CisJaWYgKCFfX2xlZ2FjeV9tbWFwX2ZpdHMoaG9zZSwgdm1hLCByZXNfc2l6ZSwgc3BhcnNlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gaG9zZV9tbWFwX3BhZ2VfcmFuZ2UoaG9zZSwgdm1hLCBtbWFwX3R5cGUsIHNwYXJzZSk7Cit9CisKKy8qKgorICogcGNpX2FkanVzdF9sZWdhY3lfYXR0ciAtIGFkanVzdG1lbnQgb2YgbGVnYWN5IGZpbGUgYXR0cmlidXRlcworICogQGI6IGJ1cyB0byBjcmVhdGUgZmlsZXMgdW5kZXIKKyAqIEBtbWFwX3R5cGU6IEkvTyBwb3J0IG9yIG1lbW9yeQorICoKKyAqIEFkanVzdCBmaWxlIG5hbWUgYW5kIHNpemUgZm9yIHNwYXJzZSBtYXBwaW5ncy4KKyAqLwordm9pZCBwY2lfYWRqdXN0X2xlZ2FjeV9hdHRyKHN0cnVjdCBwY2lfYnVzICpidXMsIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF90eXBlKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKKworCWlmICghaGFzX3NwYXJzZShob3NlLCBtbWFwX3R5cGUpKQorCQlyZXR1cm47CisKKwlpZiAobW1hcF90eXBlID09IHBjaV9tbWFwX21lbSkgeworCQlidXMtPmxlZ2FjeV9tZW0tPmF0dHIubmFtZSA9ICJsZWdhY3lfbWVtX3NwYXJzZSI7CisJCWJ1cy0+bGVnYWN5X21lbS0+c2l6ZSA8PD0gNTsKKwl9IGVsc2UgeworCQlidXMtPmxlZ2FjeV9pby0+YXR0ci5uYW1lID0gImxlZ2FjeV9pb19zcGFyc2UiOworCQlidXMtPmxlZ2FjeV9pby0+c2l6ZSA8PD0gNTsKKwl9CisJcmV0dXJuOworfQorCisvKiBMZWdhY3kgSS9PIGJ1cyByZWFkL3dyaXRlIGZ1bmN0aW9ucyAqLworaW50IHBjaV9sZWdhY3lfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBsb2ZmX3QgcG9ydCwgdTMyICp2YWwsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKKworCXBvcnQgKz0gaG9zZS0+aW9fc3BhY2UtPnN0YXJ0OworCisJc3dpdGNoKHNpemUpIHsKKwljYXNlIDE6CisJCSooKHU4ICopdmFsKSA9IGluYihwb3J0KTsKKwkJcmV0dXJuIDE7CisJY2FzZSAyOgorCQlpZiAocG9ydCAmIDEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJKigodTE2ICopdmFsKSA9IGludyhwb3J0KTsKKwkJcmV0dXJuIDI7CisJY2FzZSA0OgorCQlpZiAocG9ydCAmIDMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJKigodTMyICopdmFsKSA9IGlubChwb3J0KTsKKwkJcmV0dXJuIDQ7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgcGNpX2xlZ2FjeV93cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBsb2ZmX3QgcG9ydCwgdTMyIHZhbCwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gYnVzLT5zeXNkYXRhOworCisJcG9ydCArPSBob3NlLT5pb19zcGFjZS0+c3RhcnQ7CisKKwlzd2l0Y2goc2l6ZSkgeworCWNhc2UgMToKKwkJb3V0Yihwb3J0LCB2YWwpOworCQlyZXR1cm4gMTsKKwljYXNlIDI6CisJCWlmIChwb3J0ICYgMSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlvdXR3KHBvcnQsIHZhbCk7CisJCXJldHVybiAyOworCWNhc2UgNDoKKwkJaWYgKHBvcnQgJiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW91dGwocG9ydCwgdmFsKTsKKwkJcmV0dXJuIDQ7CisJfQorCXJldHVybiAtRUlOVkFMOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYwppbmRleCBhM2I5Mzg4Li5hOTFiYTI4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wY2kuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJCSAqLwogCiAJCS8qIEFsaWduIHRvIG11bHRpcGxlIG9mIHNpemUgb2YgbWluaW11bSBiYXNlLiAgKi8KLQkJYWxpZ250byA9IG1heCgweDEwMDBVTCwgYWxpZ24pOworCQlhbGlnbnRvID0gbWF4X3QocmVzb3VyY2Vfc2l6ZV90LCAweDEwMDAsIGFsaWduKTsKIAkJc3RhcnQgPSBBTElHTihzdGFydCwgYWxpZ250byk7CiAJCWlmIChob3NlLT5zcGFyc2VfbWVtX2Jhc2UgJiYgc2l6ZSA8PSA3ICogMTYqTUIpIHsKIAkJCWlmICgoKHN0YXJ0IC8gKDE2Kk1CKSkgJiAweDcpID09IDApIHsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKaW5kZXggYjkwOTRkYS4uYmZiODgwYSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpX2lvbW11LmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCSAgICAmJiBwYWRkciArIHNpemUgPD0gX19kaXJlY3RfbWFwX3NpemUpIHsKIAkJcmV0ID0gcGFkZHIgKyBfX2RpcmVjdF9tYXBfYmFzZTsKIAotCQlEQkdBMigicGNpX21hcF9zaW5nbGU6IFslcCwlbHhdIC0+IGRpcmVjdCAlbHggZnJvbSAlcFxuIiwKKwkJREJHQTIoInBjaV9tYXBfc2luZ2xlOiBbJXAsJXp4XSAtPiBkaXJlY3QgJWxseCBmcm9tICVwXG4iLAogCQkgICAgICBjcHVfYWRkciwgc2l6ZSwgcmV0LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCiAJCXJldHVybiByZXQ7CkBAIC0yNTgsNyArMjU4LDcgQEAKIAlpZiAoZGFjX2FsbG93ZWQpIHsKIAkJcmV0ID0gcGFkZHIgKyBhbHBoYV9tdi5wY2lfZGFjX29mZnNldDsKIAotCQlEQkdBMigicGNpX21hcF9zaW5nbGU6IFslcCwlbHhdIC0+IERBQyAlbHggZnJvbSAlcFxuIiwKKwkJREJHQTIoInBjaV9tYXBfc2luZ2xlOiBbJXAsJXp4XSAtPiBEQUMgJWxseCBmcm9tICVwXG4iLAogCQkgICAgICBjcHVfYWRkciwgc2l6ZSwgcmV0LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCiAJCXJldHVybiByZXQ7CkBAIC0yOTksNyArMjk5LDcgQEAKIAlyZXQgPSBhcmVuYS0+ZG1hX2Jhc2UgKyBkbWFfb2ZzICogUEFHRV9TSVpFOwogCXJldCArPSAodW5zaWduZWQgbG9uZyljcHVfYWRkciAmIH5QQUdFX01BU0s7CiAKLQlEQkdBMigicGNpX21hcF9zaW5nbGU6IFslcCwlbHhdIG5wICVsZCAtPiBzZyAlbHggZnJvbSAlcFxuIiwKKwlEQkdBMigicGNpX21hcF9zaW5nbGU6IFslcCwlenhdIG5wICVsZCAtPiBzZyAlbGx4IGZyb20gJXBcbiIsCiAJICAgICAgY3B1X2FkZHIsIHNpemUsIG5wYWdlcywgcmV0LCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCiAJcmV0dXJuIHJldDsKQEAgLTM1NSwxNCArMzU1LDE0IEBACiAJICAgICYmIGRtYV9hZGRyIDwgX19kaXJlY3RfbWFwX2Jhc2UgKyBfX2RpcmVjdF9tYXBfc2l6ZSkgewogCQkvKiBOb3RoaW5nIHRvIGRvLiAgKi8KIAotCQlEQkdBMigicGNpX3VubWFwX3NpbmdsZTogZGlyZWN0IFslbHgsJWx4XSBmcm9tICVwXG4iLAorCQlEQkdBMigicGNpX3VubWFwX3NpbmdsZTogZGlyZWN0IFslbGx4LCV6eF0gZnJvbSAlcFxuIiwKIAkJICAgICAgZG1hX2FkZHIsIHNpemUsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAKIAkJcmV0dXJuOwogCX0KIAogCWlmIChkbWFfYWRkciA+IDB4ZmZmZmZmZmYpIHsKLQkJREJHQTIoInBjaTY0X3VubWFwX3NpbmdsZTogREFDIFslbHgsJWx4XSBmcm9tICVwXG4iLAorCQlEQkdBMigicGNpNjRfdW5tYXBfc2luZ2xlOiBEQUMgWyVsbHgsJXp4XSBmcm9tICVwXG4iLAogCQkgICAgICBkbWFfYWRkciwgc2l6ZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM3Myw5ICszNzMsOSBAQAogCiAJZG1hX29mcyA9IChkbWFfYWRkciAtIGFyZW5hLT5kbWFfYmFzZSkgPj4gUEFHRV9TSElGVDsKIAlpZiAoZG1hX29mcyAqIFBBR0VfU0laRSA+PSBhcmVuYS0+c2l6ZSkgewotCQlwcmludGsoS0VSTl9FUlIgIkJvZ3VzIHBjaV91bm1hcF9zaW5nbGU6IGRtYV9hZGRyICVseCAiCi0JCSAgICAgICAiIGJhc2UgJWx4IHNpemUgJXhcbiIsIGRtYV9hZGRyLCBhcmVuYS0+ZG1hX2Jhc2UsCi0JCSAgICAgICBhcmVuYS0+c2l6ZSk7CisJCXByaW50ayhLRVJOX0VSUiAiQm9ndXMgcGNpX3VubWFwX3NpbmdsZTogZG1hX2FkZHIgJWxseCAiCisJCSAgICAgICAiIGJhc2UgJWxseCBzaXplICV4XG4iLAorCQkgICAgICAgZG1hX2FkZHIsIGFyZW5hLT5kbWFfYmFzZSwgYXJlbmEtPnNpemUpOwogCQlyZXR1cm47CiAJCUJVRygpOwogCX0KQEAgLTM5NCw3ICszOTQsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXJlbmEtPmxvY2ssIGZsYWdzKTsKIAotCURCR0EyKCJwY2lfdW5tYXBfc2luZ2xlOiBzZyBbJWx4LCVseF0gbnAgJWxkIGZyb20gJXBcbiIsCisJREJHQTIoInBjaV91bm1hcF9zaW5nbGU6IHNnIFslbGx4LCV6eF0gbnAgJWxkIGZyb20gJXBcbiIsCiAJICAgICAgZG1hX2FkZHIsIHNpemUsIG5wYWdlcywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0wocGNpX3VubWFwX3NpbmdsZSk7CkBAIC00NDQsNyArNDQ0LDcgQEAKIAkJZ290byB0cnlfYWdhaW47CiAJfQogCQkKLQlEQkdBMigicGNpX2FsbG9jX2NvbnNpc3RlbnQ6ICVseCAtPiBbJXAsJXhdIGZyb20gJXBcbiIsCisJREJHQTIoInBjaV9hbGxvY19jb25zaXN0ZW50OiAlenggLT4gWyVwLCVsbHhdIGZyb20gJXBcbiIsCiAJICAgICAgc2l6ZSwgY3B1X2FkZHIsICpkbWFfYWRkcnAsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAKIAlyZXR1cm4gY3B1X2FkZHI7CkBAIC00NjQsNyArNDY0LDcgQEAKIAlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGRtYV9hZGRyLCBzaXplLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpY3B1X2FkZHIsIGdldF9vcmRlcihzaXplKSk7CiAKLQlEQkdBMigicGNpX2ZyZWVfY29uc2lzdGVudDogWyV4LCVseF0gZnJvbSAlcFxuIiwKKwlEQkdBMigicGNpX2ZyZWVfY29uc2lzdGVudDogWyVsbHgsJXp4XSBmcm9tICVwXG4iLAogCSAgICAgIGRtYV9hZGRyLCBzaXplLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTChwY2lfZnJlZV9jb25zaXN0ZW50KTsKQEAgLTU1MSw3ICs1NTEsNyBAQAogCQlvdXQtPmRtYV9hZGRyZXNzID0gcGFkZHIgKyBfX2RpcmVjdF9tYXBfYmFzZTsKIAkJb3V0LT5kbWFfbGVuZ3RoID0gc2l6ZTsKIAotCQlEQkdBKCIgICAgc2dfZmlsbDogWyVwLCVseF0gLT4gZGlyZWN0ICVseFxuIiwKKwkJREJHQSgiICAgIHNnX2ZpbGw6IFslcCwlbHhdIC0+IGRpcmVjdCAlbGx4XG4iLAogCQkgICAgIF9fdmEocGFkZHIpLCBzaXplLCBvdXQtPmRtYV9hZGRyZXNzKTsKIAogCQlyZXR1cm4gMDsKQEAgLTU2Myw3ICs1NjMsNyBAQAogCQlvdXQtPmRtYV9hZGRyZXNzID0gcGFkZHIgKyBhbHBoYV9tdi5wY2lfZGFjX29mZnNldDsKIAkJb3V0LT5kbWFfbGVuZ3RoID0gc2l6ZTsKIAotCQlEQkdBKCIgICAgc2dfZmlsbDogWyVwLCVseF0gLT4gREFDICVseFxuIiwKKwkJREJHQSgiICAgIHNnX2ZpbGw6IFslcCwlbHhdIC0+IERBQyAlbGx4XG4iLAogCQkgICAgIF9fdmEocGFkZHIpLCBzaXplLCBvdXQtPmRtYV9hZGRyZXNzKTsKIAogCQlyZXR1cm4gMDsKQEAgLTU4OSw3ICs1ODksNyBAQAogCW91dC0+ZG1hX2FkZHJlc3MgPSBhcmVuYS0+ZG1hX2Jhc2UgKyBkbWFfb2ZzKlBBR0VfU0laRSArIHBhZGRyOwogCW91dC0+ZG1hX2xlbmd0aCA9IHNpemU7CiAKLQlEQkdBKCIgICAgc2dfZmlsbDogWyVwLCVseF0gLT4gc2cgJWx4IG5wICVsZFxuIiwKKwlEQkdBKCIgICAgc2dfZmlsbDogWyVwLCVseF0gLT4gc2cgJWxseCBucCAlbGRcbiIsCiAJICAgICBfX3ZhKHBhZGRyKSwgc2l6ZSwgb3V0LT5kbWFfYWRkcmVzcywgbnBhZ2VzKTsKIAogCS8qIEFsbCB2aXJ0dWFsbHkgY29udGlndW91cy4gIFdlIG5lZWQgdG8gZmluZCB0aGUgbGVuZ3RoIG9mIGVhY2gKQEAgLTc1Miw3ICs3NTIsNyBAQAogCiAJCWlmIChhZGRyID4gMHhmZmZmZmZmZikgewogCQkJLyogSXQncyBhIERBQyBhZGRyZXNzIC0tIG5vdGhpbmcgdG8gZG8uICAqLwotCQkJREJHQSgiICAgICglbGQpIERBQyBbJWx4LCVseF1cbiIsCisJCQlEQkdBKCIgICAgKCVsZCkgREFDIFslbGx4LCV6eF1cbiIsCiAJCQkgICAgICBzZyAtIGVuZCArIG5lbnRzLCBhZGRyLCBzaXplKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC03NjAsMTIgKzc2MCwxMiBAQAogCQlpZiAoYWRkciA+PSBfX2RpcmVjdF9tYXBfYmFzZQogCQkgICAgJiYgYWRkciA8IF9fZGlyZWN0X21hcF9iYXNlICsgX19kaXJlY3RfbWFwX3NpemUpIHsKIAkJCS8qIE5vdGhpbmcgdG8gZG8uICAqLwotCQkJREJHQSgiICAgICglbGQpIGRpcmVjdCBbJWx4LCVseF1cbiIsCisJCQlEQkdBKCIgICAgKCVsZCkgZGlyZWN0IFslbGx4LCV6eF1cbiIsCiAJCQkgICAgICBzZyAtIGVuZCArIG5lbnRzLCBhZGRyLCBzaXplKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJREJHQSgiICAgICglbGQpIHNnIFslbHgsJWx4XVxuIiwKKwkJREJHQSgiICAgICglbGQpIHNnIFslbGx4LCV6eF1cbiIsCiAJCSAgICAgc2cgLSBlbmQgKyBuZW50cywgYWRkciwgc2l6ZSk7CiAKIAkJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGFkZHIsIHNpemUsIFBBR0VfU0laRSk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggOGQwMDk3Zi4uM2EyZmI3YSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb2Nlc3MuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiAgKi8KIAogaW50Ci1jb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAorY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJICAgIHVuc2lnbmVkIGxvbmcgdW51c2VkLAogCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wcm90by5oIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHJvdG8uaAppbmRleCBmZTE0YzY3Li41NjdmMjU5IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wcm90by5oCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb3RvLmgKQEAgLTIwLDcgKzIwLDcgQEAKIGV4dGVybiBzdHJ1Y3QgcGNpX29wcyBhcGVjc19wY2lfb3BzOwogZXh0ZXJuIHZvaWQgYXBlY3NfaW5pdF9hcmNoKHZvaWQpOwogZXh0ZXJuIHZvaWQgYXBlY3NfcGNpX2Nscl9lcnIodm9pZCk7Ci1leHRlcm4gdm9pZCBhcGVjc19tYWNoaW5lX2NoZWNrKHU2NCwgdTY0KTsKK2V4dGVybiB2b2lkIGFwZWNzX21hY2hpbmVfY2hlY2sodW5zaWduZWQgbG9uZyB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgbGFfcHRyKTsKIGV4dGVybiB2b2lkIGFwZWNzX3BjaV90Ymkoc3RydWN0IHBjaV9jb250cm9sbGVyICosIGRtYV9hZGRyX3QsIGRtYV9hZGRyX3QpOwogCiAvKiBjb3JlX2NpYS5jICovCkBAIC0yOSw3ICsyOSw3IEBACiBleHRlcm4gdm9pZCBjaWFfaW5pdF9hcmNoKHZvaWQpOwogZXh0ZXJuIHZvaWQgcHl4aXNfaW5pdF9hcmNoKHZvaWQpOwogZXh0ZXJuIHZvaWQgY2lhX2tpbGxfYXJjaChpbnQpOwotZXh0ZXJuIHZvaWQgY2lhX21hY2hpbmVfY2hlY2sodTY0LCB1NjQpOworZXh0ZXJuIHZvaWQgY2lhX21hY2hpbmVfY2hlY2sodW5zaWduZWQgbG9uZyB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgbGFfcHRyKTsKIGV4dGVybiB2b2lkIGNpYV9wY2lfdGJpKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBkbWFfYWRkcl90LCBkbWFfYWRkcl90KTsKIAogLyogY29yZV9pcm9uZ2F0ZS5jICovCkBAIC00Miw3ICs0Miw3IEBACiAvKiBjb3JlX2xjYS5jICovCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgbGNhX3BjaV9vcHM7CiBleHRlcm4gdm9pZCBsY2FfaW5pdF9hcmNoKHZvaWQpOwotZXh0ZXJuIHZvaWQgbGNhX21hY2hpbmVfY2hlY2sodTY0LCB1NjQpOworZXh0ZXJuIHZvaWQgbGNhX21hY2hpbmVfY2hlY2sodW5zaWduZWQgbG9uZyB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgbGFfcHRyKTsKIGV4dGVybiB2b2lkIGxjYV9wY2lfdGJpKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBkbWFfYWRkcl90LCBkbWFfYWRkcl90KTsKIAogLyogY29yZV9tYXJ2ZWwuYyAqLwpAQCAtNjQsNyArNjQsNyBAQAogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIG1jcGNpYV9wY2lfb3BzOwogZXh0ZXJuIHZvaWQgbWNwY2lhX2luaXRfYXJjaCh2b2lkKTsKIGV4dGVybiB2b2lkIG1jcGNpYV9pbml0X2hvc2VzKHZvaWQpOwotZXh0ZXJuIHZvaWQgbWNwY2lhX21hY2hpbmVfY2hlY2sodTY0LCB1NjQpOworZXh0ZXJuIHZvaWQgbWNwY2lhX21hY2hpbmVfY2hlY2sodW5zaWduZWQgbG9uZyB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgbGFfcHRyKTsKIGV4dGVybiB2b2lkIG1jcGNpYV9wY2lfdGJpKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBkbWFfYWRkcl90LCBkbWFfYWRkcl90KTsKIAogLyogY29yZV9wb2xhcmlzLmMgKi8KQEAgLTcyLDE0ICs3MiwxNCBAQAogZXh0ZXJuIGludCBwb2xhcmlzX3JlYWRfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICosIGludCwgdTMyICopOwogZXh0ZXJuIGludCBwb2xhcmlzX3dyaXRlX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2RldiAqLCBpbnQsIHUzMik7CiBleHRlcm4gdm9pZCBwb2xhcmlzX2luaXRfYXJjaCh2b2lkKTsKLWV4dGVybiB2b2lkIHBvbGFyaXNfbWFjaGluZV9jaGVjayh1NjQsIHU2NCk7CitleHRlcm4gdm9pZCBwb2xhcmlzX21hY2hpbmVfY2hlY2sodW5zaWduZWQgbG9uZyB2ZWN0b3IsIHVuc2lnbmVkIGxvbmcgbGFfcHRyKTsKICNkZWZpbmUgcG9sYXJpc19wY2lfdGJpICgodm9pZCAqKTApCiAKIC8qIGNvcmVfdDIuYyAqLwogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIHQyX3BjaV9vcHM7CiBleHRlcm4gdm9pZCB0Ml9pbml0X2FyY2godm9pZCk7CiBleHRlcm4gdm9pZCB0Ml9raWxsX2FyY2goaW50KTsKLWV4dGVybiB2b2lkIHQyX21hY2hpbmVfY2hlY2sodTY0LCB1NjQpOworZXh0ZXJuIHZvaWQgdDJfbWFjaGluZV9jaGVjayh1bnNpZ25lZCBsb25nIHZlY3RvciwgdW5zaWduZWQgbG9uZyBsYV9wdHIpOwogZXh0ZXJuIHZvaWQgdDJfcGNpX3RiaShzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiwgZG1hX2FkZHJfdCwgZG1hX2FkZHJfdCk7CiAKIC8qIGNvcmVfdGl0YW4uYyAqLwpAQCAtOTQsMTQgKzk0LDE0IEBACiBleHRlcm4gc3RydWN0IHBjaV9vcHMgdHN1bmFtaV9wY2lfb3BzOwogZXh0ZXJuIHZvaWQgdHN1bmFtaV9pbml0X2FyY2godm9pZCk7CiBleHRlcm4gdm9pZCB0c3VuYW1pX2tpbGxfYXJjaChpbnQpOwotZXh0ZXJuIHZvaWQgdHN1bmFtaV9tYWNoaW5lX2NoZWNrKHU2NCwgdTY0KTsKK2V4dGVybiB2b2lkIHRzdW5hbWlfbWFjaGluZV9jaGVjayh1bnNpZ25lZCBsb25nIHZlY3RvciwgdW5zaWduZWQgbG9uZyBsYV9wdHIpOwogZXh0ZXJuIHZvaWQgdHN1bmFtaV9wY2lfdGJpKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBkbWFfYWRkcl90LCBkbWFfYWRkcl90KTsKIAogLyogY29yZV93aWxkZmlyZS5jICovCiBleHRlcm4gc3RydWN0IHBjaV9vcHMgd2lsZGZpcmVfcGNpX29wczsKIGV4dGVybiB2b2lkIHdpbGRmaXJlX2luaXRfYXJjaCh2b2lkKTsKIGV4dGVybiB2b2lkIHdpbGRmaXJlX2tpbGxfYXJjaChpbnQpOwotZXh0ZXJuIHZvaWQgd2lsZGZpcmVfbWFjaGluZV9jaGVjayh1NjQsIHU2NCk7CitleHRlcm4gdm9pZCB3aWxkZmlyZV9tYWNoaW5lX2NoZWNrKHVuc2lnbmVkIGxvbmcgdmVjdG9yLCB1bnNpZ25lZCBsb25nIGxhX3B0cik7CiBleHRlcm4gdm9pZCB3aWxkZmlyZV9wY2lfdGJpKHN0cnVjdCBwY2lfY29udHJvbGxlciAqLCBkbWFfYWRkcl90LCBkbWFfYWRkcl90KTsKIGV4dGVybiBpbnQgd2lsZGZpcmVfcGFfdG9fbmlkKHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIGludCB3aWxkZmlyZV9jcHVpZF90b19uaWQoaW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jCmluZGV4IDAyYmVlNjkuLjgwZGY4NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYwpAQCAtMTI1NSw3ICsxMjU1LDcgQEAKIAkJICAgICAgIHBsYXRmb3JtX3N0cmluZygpLCBucl9wcm9jZXNzb3JzKTsKIAogI2lmZGVmIENPTkZJR19TTVAKLQlzZXFfcHJpbnRmKGYsICJjcHVzIGFjdGl2ZVx0XHQ6ICVkXG4iCisJc2VxX3ByaW50ZihmLCAiY3B1cyBhY3RpdmVcdFx0OiAldVxuIgogCQkgICAgICAiY3B1IGFjdGl2ZSBtYXNrXHRcdDogJTAxNmx4XG4iLAogCQkgICAgICAgbnVtX29ubGluZV9jcHVzKCksIGNwdXNfYWRkcihjcHVfcG9zc2libGVfbWFwKVswXSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NtYzM3YzY2OS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21jMzdjNjY5LmMKaW5kZXggZmQ0NjdiMi4uYmNhNWJkYSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc21jMzdjNjY5LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21jMzdjNjY5LmMKQEAgLTI1NDIsOCArMjU0Miw4IEBACiAgICAgICAgIFNNQzM3YzY2OV9kaXNwbGF5X2RldmljZV9pbmZvKCApOwogI2VuZGlmCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotICAgICAgICBwcmludGsoICJTTUMzN2M2NjkgU3VwZXIgSS9PIENvbnRyb2xsZXIgZm91bmQgQCAweCVseFxuIiwKLQkJKHVuc2lnbmVkIGxvbmcpIFNNQ19iYXNlICk7CisgICAgICAgIHByaW50ayggIlNNQzM3YzY2OSBTdXBlciBJL08gQ29udHJvbGxlciBmb3VuZCBAIDB4JXBcbiIsCisJCVNNQ19iYXNlICk7CiAgICAgfQogICAgIGVsc2UgewogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19qZW5zZW4uYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19qZW5zZW4uYwppbmRleCBlMjUxNmY5Li4yYjVjYWYzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfamVuc2VuLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2plbnNlbi5jCkBAIC0yNDQsMTIgKzI0NCwxMSBAQAogfQogCiBzdGF0aWMgdm9pZAotamVuc2VuX21hY2hpbmVfY2hlY2sgKHU2NCB2ZWN0b3IsIHU2NCBsYSkKK2plbnNlbl9tYWNoaW5lX2NoZWNrKHVuc2lnbmVkIGxvbmcgdmVjdG9yLCB1bnNpZ25lZCBsb25nIGxhKQogewogCXByaW50ayhLRVJOX0NSSVQgIk1hY2hpbmUgY2hlY2tcbiIpOwogfQogCi0KIC8qCiAgKiBUaGUgU3lzdGVtIFZlY3RvcgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCmluZGV4IGQyMzJlNDIuLjllMjYzMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19zYWJsZS5jCkBAIC00NTMsNyArNDUzLDcgQEAKIAlzYWJsZV9seW54X2lycV9zd2l6emxlLT51cGRhdGVfaXJxX2h3KGJpdCwgbWFzayk7CiAJc3Bpbl91bmxvY2soJnNhYmxlX2x5bnhfaXJxX2xvY2spOwogI2lmIDAKLQlwcmludGsoIiVzOiBtYXNrIDB4JWx4IGJpdCAweCV4IGlycSAweCV4XG4iLAorCXByaW50aygiJXM6IG1hc2sgMHglbHggYml0IDB4JWx4IGlycSAweCV4XG4iLAogCSAgICAgICBfX2Z1bmNfXywgbWFzaywgYml0LCBpcnEpOwogI2VuZGlmCiB9CkBAIC00NjksNyArNDY5LDcgQEAKIAlzYWJsZV9seW54X2lycV9zd2l6emxlLT51cGRhdGVfaXJxX2h3KGJpdCwgbWFzayk7CiAJc3Bpbl91bmxvY2soJnNhYmxlX2x5bnhfaXJxX2xvY2spOwogI2lmIDAKLQlwcmludGsoIiVzOiBtYXNrIDB4JWx4IGJpdCAweCV4IGlycSAweCV4XG4iLAorCXByaW50aygiJXM6IG1hc2sgMHglbHggYml0IDB4JWx4IGlycSAweCV4XG4iLAogCSAgICAgICBfX2Z1bmNfXywgbWFzaywgYml0LCBpcnEpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvdHJhcHMuYwppbmRleCBjZWZjNWEzLi42ZWU3NjU1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3RyYXBzLmMKQEAgLTYyMyw3ICs2MjMsNyBAQAogCX0KIAogCWxvY2tfa2VybmVsKCk7Ci0JcHJpbnRrKCJCYWQgdW5hbGlnbmVkIGtlcm5lbCBhY2Nlc3MgYXQgJTAxNmx4OiAlcCAlbHggJWxkXG4iLAorCXByaW50aygiQmFkIHVuYWxpZ25lZCBrZXJuZWwgYWNjZXNzIGF0ICUwMTZseDogJXAgJWx4ICVsdVxuIiwKIAkJcGMsIHZhLCBvcGNvZGUsIHJlZyk7CiAJZG9fZXhpdChTSUdTRUdWKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggMzkzYzgxNi4uOWU2ZTUxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCkBAIC0xOCw3ICsxOCwxMCBAQAogCiB1bnNpZ25lZCBpbnQgX19tYWNoaW5lX2FyY2hfdHlwZTsKIAotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CS8qIGZvciBpbmxpbmUgKi8KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkvKiBmb3Igc2l6ZV90ICovCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIGZvciBOVUxMICovCisjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgogCiAjaWZkZWYgU1RBTkRBTE9ORV9ERUJVRwogI2RlZmluZSBwdXRzdHIgcHJpbnRmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfbGRwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCmluZGV4IGFhOWQzNGYuLjY3OWE0YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9sZHBfZGVmY29uZmlnCkBAIC00NzQsMTQgKzQ3NCwzNCBAQAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKLUNPTkZJR19TTUM5MTFYPXkKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorQ09ORklHX1NNU0M5MTFYPXkKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDM3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGNtMDM3X2RlZmNvbmZpZwppbmRleCA2Mjc0NzQ1Li42ZTM3Yzc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BjbTAzN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wY20wMzdfZGVmY29uZmlnCkBAIC00NjUsMTIgKzQ2NSwzMyBAQAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDOTExWD15CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3LXNtcF9kZWZjb25maWcKaW5kZXggY2QyOTgyNC4uMjFkYjRiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlldy1zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcmVhbHZpZXctc21wX2RlZmNvbmZpZwpAQCAtNDk2LDEzICs0OTYsMzMgQEAKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfU01TQ19QSFk9eQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotQ09ORklHX1NNQzkxMVg9eQorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CitDT05GSUdfU01TQzkxMVg9eQogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yZWFsdmlld19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZwppbmRleCA3ZTI1M2Y1Li45YTc1YzMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3JlYWx2aWV3X2RlZmNvbmZpZwpAQCAtNDkwLDEzICs0OTAsMzMgQEAKICMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UVU4gaXMgbm90IHNldAogIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfU01TQ19QSFk9eQorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotQ09ORklHX1NNQzkxMVg9eQorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CitDT05GSUdfU01TQzkxMVg9eQogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggMmI0MWViYi4uYzEzNjgxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0yMTcsNiArMjE3LDkgQEAKIC8qIHJlYWRfY2FuX2xvY2sgLSB3b3VsZCByZWFkX3RyeWxvY2soKSBzdWNjZWVkPyAqLwogI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKHgpCQkoKHgpLT5sb2NrIDwgMHg4MDAwMDAwMCkKIAorI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwppbmRleCAyZGUxNGUyLi5jMzI2NWEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTMwMSw3ICszMDEsNyBAQAogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCkgX19hc21fXygicmV0X2Zyb21fZm9yayIpOwogCiBpbnQKLWNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzdGFja19zdGFydCwKK2NvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3RhY2tfc3RhcnQsCiAJICAgIHVuc2lnbmVkIGxvbmcgc3RrX3N6LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gdGFza190aHJlYWRfaW5mbyhwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKaW5kZXggN2FjODEyZC4uZTI2YzRmZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL3BtLmMKQEAgLTE5OCwxNyArMTk4LDE3IEBACiAJLyogVVNCIG11c3Qgbm90IGJlIHVzaW5nIFBMTEIgKi8KIAlpZiAoY3B1X2lzX2F0OTFybTkyMDAoKSkgewogCQlpZiAoKHNjc3IgJiAoQVQ5MVJNOTIwMF9QTUNfVUhQIHwgQVQ5MVJNOTIwMF9QTUNfVURQKSkgIT0gMCkgewotCQkJcHJfZGVidWcoIkFUOTE6IFBNIC0gU3VzcGVuZC10by1SQU0gd2l0aCBVU0Igc3RpbGwgYWN0aXZlXG4iKTsKKwkJCXByX2VycigiQVQ5MTogUE0gLSBTdXNwZW5kLXRvLVJBTSB3aXRoIFVTQiBzdGlsbCBhY3RpdmVcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9IGVsc2UgaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MSgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MygpIHx8IGNwdV9pc19hdDkxc2FtOWcyMCgpKSB7CiAJCWlmICgoc2NzciAmIChBVDkxU0FNOTI2eF9QTUNfVUhQIHwgQVQ5MVNBTTkyNnhfUE1DX1VEUCkpICE9IDApIHsKLQkJCXByX2RlYnVnKCJBVDkxOiBQTSAtIFN1c3BlbmQtdG8tUkFNIHdpdGggVVNCIHN0aWxsIGFjdGl2ZVxuIik7CisJCQlwcl9lcnIoIkFUOTE6IFBNIC0gU3VzcGVuZC10by1SQU0gd2l0aCBVU0Igc3RpbGwgYWN0aXZlXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfSBlbHNlIGlmIChjcHVfaXNfYXQ5MWNhcDkoKSkgewogCQlpZiAoKHNjc3IgJiBBVDkxQ0FQOV9QTUNfVUhQKSAhPSAwKSB7Ci0JCQlwcl9kZWJ1ZygiQVQ5MTogUE0gLSBTdXNwZW5kLXRvLVJBTSB3aXRoIFVTQiBzdGlsbCBhY3RpdmVcbiIpOworCQkJcHJfZXJyKCJBVDkxOiBQTSAtIFN1c3BlbmQtdG8tUkFNIHdpdGggVVNCIHN0aWxsIGFjdGl2ZVxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJCWNzcyA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfUENLUihpKSkgJiBBVDkxX1BNQ19DU1M7CiAJCWlmIChjc3MgIT0gQVQ5MV9QTUNfQ1NTX1NMT1cpIHsKLQkJCXByX2RlYnVnKCJBVDkxOiBQTSAtIFN1c3BlbmQtdG8tUkFNIHdpdGggUENLJWQgc3JjICVkXG4iLCBpLCBjc3MpOworCQkJcHJfZXJyKCJBVDkxOiBQTSAtIFN1c3BlbmQtdG8tUkFNIHdpdGggUENLJWQgc3JjICVkXG4iLCBpLCBjc3MpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggYmJiZDcyNy4uNGQ5YzFmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjgsNyArMjgsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCV9fcmF3X3dyaXRlbChSRVNFVF9HTE9CQUwgfCBSRVNFVF9DUFUxLAogCQkgICAgIElPX0FERFJFU1MoR0VNSU5JX0dMT0JBTF9CQVNFKSArIEdMT0JBTF9SRVNFVCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMDAxZWRmZS4uNGY1YjBlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTQsNyArMTQsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWNwdV9yZXNldCgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL3BjbTAzNy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMKaW5kZXggNWZjZTAyMi4uYzM2NDhlZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvcGxhdC1yYW0uaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvc21jOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KQEAgLTcwLDcgKzcwLDcgQEAKIAkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MTF4X3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAkJPSBDUzFfQkFTRV9BRERSICsgMHgzMDAsCiAJCS5lbmQJCT0gQ1MxX0JBU0VfQUREUiArIDB4MzAwICsgU1pfNjRLIC0gMSwKQEAgLTc5LDIyICs3OSwyNSBAQAogCVsxXSA9IHsKIAkJLnN0YXJ0CQk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPM18xKSwKIAkJLmVuZAkJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzNfMSksCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwsCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc21jOTExeF9wbGF0ZGF0YSBzbWM5MTF4X2luZm8gPSB7Ci0JLmZsYWdzCQk9IFNNQzkxMVhfVVNFXzMyQklULAotCS5pcnFfZmxhZ3MJPSBJUlFGX1NIQVJFRCB8IElSUUZfVFJJR0dFUl9MT1csCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBzbXNjOTExeF9pbmZvID0geworCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMzJCSVQgfCBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFkgfAorCQkJICBTTVNDOTExWF9TQVZFX01BQ19BRERSRVNTLAorCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9PUEVOX0RSQUlOLAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzN19ldGggPSB7Ci0JLm5hbWUJCT0gInNtYzkxMXgiLAorCS5uYW1lCQk9ICJzbXNjOTExeCIsCiAJLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MTF4X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gc21jOTExeF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtc2M5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21zYzkxMXhfcmVzb3VyY2VzLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzbWM5MTF4X2luZm8sCisJCS5wbGF0Zm9ybV9kYXRhID0gJnNtc2M5MTF4X2luZm8sCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvbmV0eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL25ldHgtcmVncy5oCmluZGV4IDA4YzYwZmYuLjVhMDNlN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvbmV0eC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9uZXR4LXJlZ3MuaApAQCAtODAsNyArODAsNyBAQAogI2RlZmluZSBORVRYX1BBX1hQRUMobm8pIChORVRYX0lPX1BIWVMgKyBORVRYX09GU19YUEVDKG5vKSkKICNkZWZpbmUgTkVUWF9QQV9WSUMgICAgICAoTkVUWF9JT19QSFlTICsgTkVUWF9PRlNfVklDKQogCi0vKiB2aXJ1YWwgYWRkcmVzc2VzICovCisvKiB2aXJ0dWFsIGFkZHJlc3NlcyAqLwogI2RlZmluZSBORVRYX1ZBX1NZU1RFTSAgIChORVRYX0lPX1ZJUlQgKyBORVRYX09GU19TWVNURU0pCiAjZGVmaW5lIE5FVFhfVkFfTUVNQ1IgICAgKE5FVFhfSU9fVklSVCArIE5FVFhfT0ZTX01FTUNSKQogI2RlZmluZSBORVRYX1ZBX0RQTUFTICAgIChORVRYX0lPX1ZJUlQgKyBORVRYX09GU19EUE1BUykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwppbmRleCAzZjMyNWQzLi5jZDhkZTg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCkBAIC0xMDksNyArMTA5LDcgQEAKIAloZWxwCiAJIFN1cHBvcnQgZm9yIHRoZSBQYWxtIFppcmU3MSBQREEuIFRvIGJvb3QgdGhlIGtlcm5lbCwKIAkgeW91J2xsIG5lZWQgYSBQYWxtT1MgY29tcGF0aWJsZSBib290bG9hZGVyOyBjaGVjayBvdXQKLQkgaHR0cDovL2hhY2tuZGV2LmNvbS9wYWxtL3o3MSBmb3IgbW9yZSBpbmZvcm1hdGlvbnMuCisJIGh0dHA6Ly9oYWNrbmRldi5jb20vcGFsbS96NzEgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAJIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaCBhIFBEQSwgc2F5IE4gb3RoZXJ3aXNlLgogCiBjb25maWcgTUFDSF9PTUFQX1BBTE1UVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKaW5kZXggYTJjM2ZjYy4uYzQ5ZDliZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCkBAIC00Nyw2ICs0Nyw4IEBACiAKIG9iai0kKENPTkZJR19NQUNIX05PS0lBX1JYNTEpCQkrPSBib2FyZC1yeDUxLm8gXAogCQkJCQkgICBib2FyZC1yeDUxLXBlcmlwaGVyYWxzLm8gXAorCQkJCQkgICBtbWMtdHdsNDAzMC5vCisKICMgUGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIGluaXQgY29kZQogaWZlcSAoJChDT05GSUdfVVNCX01VU0JfU09DKSx5KQogb2JqLXkJCQkJCSs9IHVzYi1tdXNiLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCmluZGV4IGUwOTZmNzcuLmRhNTdiMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTQxLDEyICs0MiwxMiBAQAogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKIAotI2RlZmluZSBMRFBfU01DOTExWF9DUwkJMQotI2RlZmluZSBMRFBfU01DOTExWF9HUElPCTE1MgorI2RlZmluZSBMRFBfU01TQzkxMVhfQ1MJCTEKKyNkZWZpbmUgTERQX1NNU0M5MTFYX0dQSU8JMTUyCiAjZGVmaW5lIERFQlVHX0JBU0UJCTB4MDgwMDAwMDAKICNkZWZpbmUgTERQX0VUSFJfU1RBUlQJCURFQlVHX0JBU0UKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsZHBfc21jOTExeF9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGRwX3Ntc2M5MTF4X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CT0gTERQX0VUSFJfU1RBUlQsCiAJCS5lbmQJPSBMRFBfRVRIUl9TVEFSVCArIFNaXzRLLApAQCAtNTksNDAgKzYwLDUwIEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxkcF9zbWM5MTF4X2RldmljZSA9IHsKLQkubmFtZQkJPSAic21jOTExeCIsCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBsZHBfc21zYzkxMXhfY29uZmlnID0geworCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9PUEVOX0RSQUlOLAorCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMzJCSVQsCisJLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGRwX3Ntc2M5MTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21zYzkxMXgiLAogCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobGRwX3NtYzkxMXhfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBsZHBfc21jOTExeF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGxkcF9zbXNjOTExeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGxkcF9zbXNjOTExeF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmxkcF9zbXNjOTExeF9jb25maWcsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpsZHBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmxkcF9zbWM5MTF4X2RldmljZSwKKwkmbGRwX3Ntc2M5MTF4X2RldmljZSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgbGRwX2luaXRfc21jOTExeCh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBsZHBfaW5pdF9zbXNjOTExeCh2b2lkKQogewogCWludCBldGhfY3M7CiAJdW5zaWduZWQgbG9uZyBjc19tZW1fYmFzZTsKIAlpbnQgZXRoX2dwaW8gPSAwOwogCi0JZXRoX2NzID0gTERQX1NNQzkxMVhfQ1M7CisJZXRoX2NzID0gTERQX1NNU0M5MTFYX0NTOwogCiAJaWYgKGdwbWNfY3NfcmVxdWVzdChldGhfY3MsIFNaXzE2TSwgJmNzX21lbV9iYXNlKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUE1DIG1lbSBmb3Igc21jOTExeFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BNQyBtZW0gZm9yIHNtc2M5MTF4XG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWxkcF9zbWM5MTF4X3Jlc291cmNlc1swXS5zdGFydCA9IGNzX21lbV9iYXNlICsgMHgwOwotCWxkcF9zbWM5MTF4X3Jlc291cmNlc1swXS5lbmQgICA9IGNzX21lbV9iYXNlICsgMHhmZjsKKwlsZHBfc21zYzkxMXhfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gY3NfbWVtX2Jhc2UgKyAweDA7CisJbGRwX3Ntc2M5MTF4X3Jlc291cmNlc1swXS5lbmQgICA9IGNzX21lbV9iYXNlICsgMHhmZjsKIAl1ZGVsYXkoMTAwKTsKIAotCWV0aF9ncGlvID0gTERQX1NNQzkxMVhfR1BJTzsKKwlldGhfZ3BpbyA9IExEUF9TTVNDOTExWF9HUElPOwogCi0JbGRwX3NtYzkxMXhfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gT01BUF9HUElPX0lSUShldGhfZ3Bpbyk7CisJbGRwX3Ntc2M5MTF4X3Jlc291cmNlc1sxXS5zdGFydCA9IE9NQVBfR1BJT19JUlEoZXRoX2dwaW8pOwogCi0JaWYgKGdwaW9fcmVxdWVzdChldGhfZ3BpbywgInNtYzkxMXggaXJxIikgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyVkIGZvciBzbWM5MTF4IElSUVxuIiwKKwlpZiAoZ3Bpb19yZXF1ZXN0KGV0aF9ncGlvLCAic21zYzkxMXggaXJxIikgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyVkIGZvciBzbXNjOTExeCBJUlFcbiIsCiAJCQkJZXRoX2dwaW8pOwogCQlyZXR1cm47CiAJfQpAQCAtMTA0LDcgKzExNSw3IEBACiAJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwogCW9tYXBfZ3Bpb19pbml0KCk7Ci0JbGRwX2luaXRfc21jOTExeCgpOworCWxkcF9pbml0X3Ntc2M5MTF4KCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBsZHBfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYwppbmRleCBiM2Y2ZTlkLi5iMWYyM2JlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCkBAIC01Nyw2ICs1Nyw5IEBACiAjZGVmaW5lIEdQTUNfQ1MwX0JBU0UgIDB4NjAKICNkZWZpbmUgR1BNQ19DU19TSVpFICAgMHgzMAogCisjZGVmaW5lIE9WRVJPX1NNU0M5MTFYX0NTICAgICAgNQorI2RlZmluZSBPVkVST19TTVNDOTExWF9HUElPICAgIDE3NgorCiAjaWYgZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikgfHwgXAogCWRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDZfTU9EVUxFKQogCkBAIC0xMTYsNiArMTE5LDY3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG92ZXJvX2Fkczc4NDZfaW5pdCh2b2lkKSB7IHJldHVybjsgfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TTVNDOTExWCkgfHwgZGVmaW5lZChDT05GSUdfU01TQzkxMVhfTU9EVUxFKQorCisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvdmVyb19zbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gInNtc2M5MTF4LW1lbW9yeSIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBvdmVyb19zbXNjOTExeF9jb25maWcgPSB7CisJLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCisJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCAsCisJLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3Zlcm9fc21zYzkxMXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbXNjOTExeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvdmVyb19zbXNjOTExeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9ICZvdmVyb19zbXNjOTExeF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm92ZXJvX3Ntc2M5MTF4X2NvbmZpZywKKwl9LAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBvdmVyb19pbml0X3Ntc2M5MTF4KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBjc19tZW1fYmFzZTsKKworCWlmIChncG1jX2NzX3JlcXVlc3QoT1ZFUk9fU01TQzkxMVhfQ1MsIFNaXzE2TSwgJmNzX21lbV9iYXNlKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgcmVxdWVzdCBmb3IgR1BNQyBtZW0gZm9yIHNtc2M5MTF4XG4iKTsKKwkJcmV0dXJuOworCX0KKworCW92ZXJvX3Ntc2M5MTF4X3Jlc291cmNlc1swXS5zdGFydCA9IGNzX21lbV9iYXNlICsgMHgwOworCW92ZXJvX3Ntc2M5MTF4X3Jlc291cmNlc1swXS5lbmQgICA9IGNzX21lbV9iYXNlICsgMHhmZjsKKworCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX1NNU0M5MTFYX0dQSU8sICJTTVNDOTExWCBJUlEiKSA9PSAwKSAmJgorCSAgICAoZ3Bpb19kaXJlY3Rpb25faW5wdXQoT1ZFUk9fU01TQzkxMVhfR1BJTykgPT0gMCkpIHsKKwkJZ3Bpb19leHBvcnQoT1ZFUk9fU01TQzkxMVhfR1BJTywgMCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yIFNNU0M5MTFYIElSUVxuIik7CisJCXJldHVybjsKKwl9CisKKwlvdmVyb19zbXNjOTExeF9yZXNvdXJjZXNbMV0uc3RhcnQgPSBPTUFQX0dQSU9fSVJRKE9WRVJPX1NNU0M5MTFYX0dQSU8pOworCW92ZXJvX3Ntc2M5MTF4X3Jlc291cmNlc1sxXS5lbmQJICA9IDA7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm92ZXJvX3Ntc2M5MTF4X2RldmljZSk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG92ZXJvX2luaXRfc21zYzkxMXgodm9pZCkgeyByZXR1cm47IH0KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb3Zlcm9fbmFuZF9wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZSAgICAgICAgICAgPSAieGxvYWRlciIsCkBAIC0yOTAsNiArMzU0LDcgQEAKIAlvdmVyb19mbGFzaF9pbml0KCk7CiAJdXNiX211c2JfaW5pdCgpOwogCW92ZXJvX2Fkczc4NDZfaW5pdCgpOworCW92ZXJvX2luaXRfc21zYzkxMXgoKTsKIAogCWlmICgoZ3Bpb19yZXF1ZXN0KE9WRVJPX0dQSU9fVzJXX05SRVNFVCwKIAkJCSAgIk9WRVJPX0dQSU9fVzJXX05SRVNFVCIpID09IDApICYmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwppbmRleCBkNDZiMzY3Li5kZWVlYTFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKQEAgLTUwNyw3ICs1MDcsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwYXNpYzNfcGxhdGZvcm1fZGF0YSBwYXNpYzNfcGxhdGZvcm1fZGF0YSA9IHsKLQkuYnVzX3NoaWZ0ICA9IDIsCiAJLmxlZF9wZGF0YSAgPSAmcGFzaWMzX2xlZHNfaW5mbywKIAkuY2xvY2tfcmF0ZSA9IDQwMDAwMDAsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCBkNjc2NjY4Li45YWI5NDdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc21jOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAKICNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CkBAIC0xMjgsMTQgKzEyOCwxNSBAQAogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2ZsYXNoX2RldmljZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc21jOTExeF9wbGF0ZGF0YSByZWFsdmlld19zbWM5MTF4X3BsYXRkYXRhID0gewotCS5mbGFncwkJPSBTTUM5MTFYX1VTRV8zMkJJVCwKLQkuaXJxX2ZsYWdzCT0gSVJRRl9TSEFSRUQsCi0JLmlycV9wb2xhcml0eQk9IDEsCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBzbXNjOTExeF9jb25maWcgPSB7CisJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCwKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9ISUdILAorCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX1BVU0hfUFVMTCwKKwkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19ldGhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzbWM5MTF4IiwKKwkubmFtZQkJPSAic21zYzkxMXgiLAogCS5pZAkJPSAwLAogCS5udW1fcmVzb3VyY2VzCT0gMiwKIH07CkBAIC0xNDUsOCArMTQ2LDggQEAKIAlpZiAobmFtZSkKIAkJcmVhbHZpZXdfZXRoX2RldmljZS5uYW1lID0gbmFtZTsKIAlyZWFsdmlld19ldGhfZGV2aWNlLnJlc291cmNlID0gcmVzOwotCWlmIChzdHJjbXAocmVhbHZpZXdfZXRoX2RldmljZS5uYW1lLCAic21jOTExeCIpID09IDApCi0JCXJlYWx2aWV3X2V0aF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSAmcmVhbHZpZXdfc21jOTExeF9wbGF0ZGF0YTsKKwlpZiAoc3RyY21wKHJlYWx2aWV3X2V0aF9kZXZpY2UubmFtZSwgInNtc2M5MTF4IikgPT0gMCkKKwkJcmVhbHZpZXdfZXRoX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9jb25maWc7CiAKIAlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19ldGhfZGV2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvbG9jYWx0aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9sb2NhbHRpbWVyLmMKaW5kZXggNjdkNmQ5Yy4uZDBkMzlhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9sb2NhbHRpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9sb2NhbHRpbWVyLmMKQEAgLTE5MSw2ICsxOTEsNyBAQAogCWNsay0+bmFtZQkJPSAiZHVtbXlfdGltZXIiOwogCWNsay0+ZmVhdHVyZXMJCT0gQ0xPQ0tfRVZUX0ZFQVRfRFVNTVk7CiAJY2xrLT5yYXRpbmcJCT0gMjAwOworCWNsay0+bXVsdCAgICAgICAgICAgICAgID0gMTsKIAljbGstPnNldF9tb2RlCQk9IGR1bW15X3RpbWVyX3NldF9tb2RlOwogCWNsay0+YnJvYWRjYXN0CQk9IHNtcF90aW1lcl9icm9hZGNhc3Q7CiAJY2xrLT5jcHVtYXNrCQk9IGNwdW1hc2tfb2YoY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2Fib3J0LWV2Ni5TIGIvYXJjaC9hcm0vbW0vYWJvcnQtZXY2LlMKaW5kZXggOTQwNzdmYi4uNmY3ZTcwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vYWJvcnQtZXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vYWJvcnQtZXY2LlMKQEAgLTI5LDEwICsyOSwxMCBAQAogCW1yYwlwMTUsIDAsIHIxLCBjNSwgYzAsIDAJCUAgZ2V0IEZTUgogCW1yYwlwMTUsIDAsIHIwLCBjNiwgYzAsIDAJCUAgZ2V0IEZBUgogLyoKLSAqIEZhdWx0eSBTV1AgaW5zdHJ1Y3Rpb24gb24gMTEzNiBkb2Vzbid0IHNldCBiaXQgMTEgaW4gREZTUi4KKyAqIEZhdWx0eSBTV1AgaW5zdHJ1Y3Rpb24gb24gMTEzNiBkb2Vzbid0IHNldCBiaXQgMTEgaW4gREZTUiAoZXJyYXR1bSAzMjYxMDMpLgogICogVGhlIHRlc3QgYmVsb3cgY292ZXJzIGFsbCB0aGUgd3JpdGUgc2l0dWF0aW9ucywgaW5jbHVkaW5nIEphdmEgYnl0ZWNvZGVzCiAgKi8KLQliaWMJcjEsIHIxLCAjMSA8PCAxMSB8IDEgPDwgMTAJQCBjbGVhciBiaXRzIDExIGFuZCAxMCBvZiBGU1IKKwliaWMJcjEsIHIxLCAjMSA8PCAxMQkJQCBjbGVhciBiaXQgMTEgb2YgRlNSCiAJdHN0CXIzLCAjUFNSX0pfQklUCQkJQCBKYXZhPwogCW1vdm5lCXBjLCBscgogCWRvX3RodW1iX2Fib3J0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jYWNoZS1mZXJvY2Vvbi1sMi5jIGIvYXJjaC9hcm0vbW0vY2FjaGUtZmVyb2Nlb24tbDIuYwppbmRleCBkNmRkODM4Li42ZTc3YzA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS1mZXJvY2Vvbi1sMi5jCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLWZlcm9jZW9uLWwyLmMKQEAgLTExNSw2ICsxMTUsMTAgQEAKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgbDJfaW52X2FsbCh2b2lkKQoreworCV9fYXNtX18oIm1jciBwMTUsIDEsICUwLCBjMTUsIGMxMSwgMCIgOiA6ICJyIiAoMCkpOworfQogCiAvKgogICogTGludXggcHJpbWl0aXZlcy4KQEAgLTI1NCw5ICsyNTgsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgX19pbnZhbGlkYXRlX2ljYWNoZSh2b2lkKQogewotCWludCBkdW1teTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCAwIiA6ICI9ciIgKGR1bW15KSk7CisJX19hc21fXygibWNyIHAxNSwgMCwgJTAsIGM3LCBjNSwgMCIgOiA6ICJyIiAoMCkpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBpbnZhbGlkYXRlX2FuZF9kaXNhYmxlX2ljYWNoZSh2b2lkKQpAQCAtMzIxLDYgKzMyMyw3IEBACiAKIAkJZCA9IGZsdXNoX2FuZF9kaXNhYmxlX2RjYWNoZSgpOwogCQlpID0gaW52YWxpZGF0ZV9hbmRfZGlzYWJsZV9pY2FjaGUoKTsKKwkJbDJfaW52X2FsbCgpOwogCQl3cml0ZV9leHRyYV9mZWF0dXJlcyh1IHwgMHgwMDQwMDAwMCk7CiAJCWlmIChpKQogCQkJZW5hYmxlX2ljYWNoZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL2VudHJ5LlMgYi9hcmNoL2FybS92ZnAvZW50cnkuUwppbmRleCBiYTU5MmE5Li5hMmJlZDYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvZW50cnkuUworKysgYi9hcmNoL2FybS92ZnAvZW50cnkuUwpAQCAtMTUsMTMgKzE1LDE2IEBACiAgKiAgcjEwID0gdGhyZWFkX2luZm8gc3RydWN0dXJlCiAgKiAgbHIgID0gZmFpbHVyZSByZXR1cm4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+Ci0jaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS92ZnBtYWNyb3MuaD4KKyNpbmNsdWRlICIuLi9rZXJuZWwvZW50cnktaGVhZGVyLlMiCiAKIEVOVFJZKGRvX3ZmcCkKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCWxkcglyNCwgW3IxMCwgI1RJX1BSRUVNUFRdCUAgZ2V0IHByZWVtcHQgY291bnQKKwlhZGQJcjExLCByNCwgIzEJCUAgaW5jcmVtZW50IGl0CisJc3RyCXIxMSwgW3IxMCwgI1RJX1BSRUVNUFRdCisjZW5kaWYKIAllbmFibGVfaXJxCiAgCWxkcglyNCwgLkxDdmZwCiAJbGRyCXIxMSwgW3IxMCwgI1RJX0NQVV0JQCBDUFUgbnVtYmVyCkBAIC0zMCw2ICszMywxMiBAQAogRU5EUFJPQyhkb192ZnApCiAKIEVOVFJZKHZmcF9udWxsX2VudHJ5KQorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJZ2V0X3RocmVhZF9pbmZvCXIxMAorCWxkcglyNCwgW3IxMCwgI1RJX1BSRUVNUFRdCUAgZ2V0IHByZWVtcHQgY291bnQKKwlzdWIJcjExLCByNCwgIzEJCUAgZGVjcmVtZW50IGl0CisJc3RyCXIxMSwgW3IxMCwgI1RJX1BSRUVNUFRdCisjZW5kaWYKIAltb3YJcGMsIGxyCiBFTkRQUk9DKHZmcF9udWxsX2VudHJ5KQogCkBAIC00MSw2ICs1MCwxMiBAQAogCiAJX19JTklUCiBFTlRSWSh2ZnBfdGVzdGluZ19lbnRyeSkKKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCWdldF90aHJlYWRfaW5mbwlyMTAKKwlsZHIJcjQsIFtyMTAsICNUSV9QUkVFTVBUXQlAIGdldCBwcmVlbXB0IGNvdW50CisJc3ViCXIxMSwgcjQsICMxCQlAIGRlY3JlbWVudCBpdAorCXN0cglyMTEsIFtyMTAsICNUSV9QUkVFTVBUXQorI2VuZGlmCiAJbGRyCXIwLCBWRlBfYXJjaF9hZGRyZXNzCiAJc3RyCXI1LCBbcjBdCQlAIGtub3duIG5vbi16ZXJvIHZhbHVlCiAJbW92CXBjLCByOQkJCUAgd2UgaGF2ZSBoYW5kbGVkIHRoZSBmYXVsdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcGh3LlMgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwppbmRleCBhNWE0ZTU3Li44M2M0ZTM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwaHcuUworKysgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwpAQCAtMTM3LDYgKzEzNywxMiBAQAogCVZGUEZNWFIJRlBFWEMsIHIxCQlAIHJlc3RvcmUgRlBFWEMgbGFzdAogCXN1YglyMiwgcjIsICM0CiAJc3RyCXIyLCBbc3AsICNTX1BDXQkJQCByZXRyeSB0aGUgaW5zdHJ1Y3Rpb24KKyNpZmRlZiBDT05GSUdfUFJFRU1QVAorCWdldF90aHJlYWRfaW5mbwlyMTAKKwlsZHIJcjQsIFtyMTAsICNUSV9QUkVFTVBUXQlAIGdldCBwcmVlbXB0IGNvdW50CisJc3ViCXIxMSwgcjQsICMxCQlAIGRlY3JlbWVudCBpdAorCXN0cglyMTEsIFtyMTAsICNUSV9QUkVFTVBUXQorI2VuZGlmCiAJbW92CXBjLCByOQkJCUAgd2UgdGhpbmsgd2UgaGF2ZSBoYW5kbGVkIHRoaW5ncwogCiAKQEAgLTE1NSw2ICsxNjEsMTIgQEAKIAlAIG5vdCByZWNvZ25pc2VkIGJ5IFZGUAogCiAJREJHU1RSCSJub3QgVkZQIgorI2lmZGVmIENPTkZJR19QUkVFTVBUCisJZ2V0X3RocmVhZF9pbmZvCXIxMAorCWxkcglyNCwgW3IxMCwgI1RJX1BSRUVNUFRdCUAgZ2V0IHByZWVtcHQgY291bnQKKwlzdWIJcjExLCByNCwgIzEJCUAgZGVjcmVtZW50IGl0CisJc3RyCXIxMSwgW3IxMCwgI1RJX1BSRUVNUFRdCisjZW5kaWYKIAltb3YJcGMsIGxyCiAKIHByb2Nlc3NfZXhjZXB0aW9uOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jIGIvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCmluZGV4IDc1NDU3YjMuLjAxNTk5YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYworKysgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKQEAgLTI2Niw3ICsyNjYsNyBAQAogCQkgKiBvbiBWRlAgc3ViYXJjaCAxLgogCQkgKi8KIAkJIHZmcF9yYWlzZV9leGNlcHRpb25zKFZGUF9FWENFUFRJT05fRVJST1IsIHRyaWdnZXIsIGZwc2NyLCByZWdzKTsKLQkJIHJldHVybjsKKwkJZ290byBleGl0OwogCX0KIAogCS8qCkBAIC0yOTcsNyArMjk3LDcgQEAKIAkgKiB0aGUgRlBFWEMuRlAyViBiaXQgaXMgdmFsaWQgb25seSBpZiBGUEVYQy5FWCBpcyAxLgogCSAqLwogCWlmIChmcGV4YyBeIChGUEVYQ19FWCB8IEZQRVhDX0ZQMlYpKQotCQlyZXR1cm47CisJCWdvdG8gZXhpdDsKIAogCS8qCiAJICogVGhlIGJhcnJpZXIoKSBoZXJlIHByZXZlbnRzIGZwaW5zdDIgYmVpbmcgcmVhZApAQCAtMzEwLDYgKzMxMCw4IEBACiAJZXhjZXB0aW9ucyA9IHZmcF9lbXVsYXRlX2luc3RydWN0aW9uKHRyaWdnZXIsIG9yaWdfZnBzY3IsIHJlZ3MpOwogCWlmIChleGNlcHRpb25zKQogCQl2ZnBfcmFpc2VfZXhjZXB0aW9ucyhleGNlcHRpb25zLCB0cmlnZ2VyLCBvcmlnX2Zwc2NyLCByZWdzKTsKKyBleGl0OgorCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHZmcF9lbmFibGUodm9pZCAqdW51c2VkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9LY29uZmlnIGIvYXJjaC9hdnIzMi9LY29uZmlnCmluZGV4IDA1ZmUzMDUuLjM1ZTNiZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvS2NvbmZpZworKysgYi9hcmNoL2F2cjMyL0tjb25maWcKQEAgLTEyNywxMyArMTI3LDEzIEBACiAJc2VsZWN0IENQVV9BVDMyQVA3MDAwCiAJc2VsZWN0IFVTQl9BUkNIX0hBU19IQ0QKIAloZWxwCi0JICBUaGUgSGFtbWVyaGVhZCBwbGF0Zm9ybSBpcyBidWlsdCBhcm91bmQgYSBBVlIzMiAzMi1iaXQgbWljcm9jb250cm9sbGVyIGZyb20gQXRtZWwuCisJICBUaGUgSGFtbWVyaGVhZCBwbGF0Zm9ybSBpcyBidWlsdCBhcm91bmQgYW4gQVZSMzIgMzItYml0IG1pY3JvY29udHJvbGxlciBmcm9tIEF0bWVsLgogCSAgSXQgb2ZmZXJzIHZlcnNhdGlsZSBwZXJpcGhlcmFscywgc3VjaCBhcyBldGhlcm5ldCwgdXNiIGRldmljZSwgdXNiIGhvc3QgZXRjLgogCi0JICBUaGUgYm9hcmQgYWxzbyBpbmNvb3BlcmF0ZXMgYSBwb3dlciBzdXBwbHkgYW5kIGlzIGEgUG93ZXIgb3ZlciBFdGhlcm5ldCAoUG9FKSBQb3dlcmVkCisJICBUaGUgYm9hcmQgYWxzbyBpbmNvcnBvcmF0ZXMgYSBwb3dlciBzdXBwbHkgYW5kIGlzIGEgUG93ZXIgb3ZlciBFdGhlcm5ldCAoUG9FKSBQb3dlcmVkCiAJICBEZXZpY2UgKFBEKS4KIAotCSAgQWRkaXRvbmFsbHksIGEgQ3ljbG9uZSBJSUkgRlBHQSBmcm9tIEFsdGVyYSBpcyBpbnRlZ3JhdGVkIG9uIHRoZSBib2FyZC4gVGhlIEZQR0EgaXMKKwkgIEFkZGl0aW9uYWxseSwgYSBDeWNsb25lIElJSSBGUEdBIGZyb20gQWx0ZXJhIGlzIGludGVncmF0ZWQgb24gdGhlIGJvYXJkLiBUaGUgRlBHQSBpcwogCSAgbWFwcGVkIGludG8gdGhlIDMyLWJpdCBBVlIgbWVtb3J5IGJ1cy4gVGhlIEZQR0Egb2ZmZXJzIHR3byBERFIyIFNEUkFNIGludGVyZmFjZXMsIHdoaWNoCiAJICB3aWxsIGNvdmVyIGV2ZW4gdGhlIG1vc3QgZXhjZXB0aW9uYWwgbmVlZCBvZiBtZW1vcnkgYmFuZHdpZHRoLiBUb2dldGhlciB3aXRoIHRoZSBvbmJvYXJkCiAJICB2aWRlbyBkZWNvZGVyIHRoZSBib2FyZCBpcyByZWFkeSBmb3IgdmlkZW8gcHJvY2Vzc2luZy4KQEAgLTE0NCw2ICsxNDQsMTkgQEAKIAlib29sICJGYXZyLTMyIExDRC1ib2FyZCIKIAlzZWxlY3QgQ1BVX0FUMzJBUDcwMDAKIAorY29uZmlnIEJPQVJEX01FUklTQworCWJvb2wgIk1lcmlzYyBib2FyZCIKKwlzZWxlY3QgQ1BVX0FUMzJBUDcwMDAKKwloZWxwCisJICBNZXJpc2MgaXMgdGhlIGZhbWlseSBuYW1lIGZvciBhIHJhbmdlIG9mIEFWUjMyLWJhc2VkIGJvYXJkcy4KKworCSAgVGhlIGJvYXJkcyBhcmUgZGVzaWduZWQgdG8gYmUgdXNlZCBpbiBhIG1hbi1tYWNoaW5lCisJICBpbnRlcmZhY2luZyBlbnZpcm9ubWVudCwgdXRpbGl6aW5nIGEgdG91Y2gtYmFzZWQgZ3JhcGhpY2FsCisJICB1c2VyIGludGVyZmFjZS4gVGhleSBob3N0IGEgdmFzdCByYW5nZSBvZiBJL08gcGVyaXBoZXJhbHMgYXMKKwkgIHdlbGwgYXMgYSBsYXJnZSBTRFJBTSAmIEZsYXNoIG1lbW9yeSBiYW5rLgorCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6IGh0dHA6Ly93d3cubWFydGluc3Nvbi5zZS9tZXJpc2MKKwogY29uZmlnIEJPQVJEX01JTUMyMDAKIAlib29sICJNSU1DMjAwIENQVSBib2FyZCIKIAlzZWxlY3QgQ1BVX0FUMzJBUDcwMDAKQEAgLTE1Myw2ICsxNjYsNyBAQAogc291cmNlICJhcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9LY29uZmlnIgogc291cmNlICJhcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkL0tjb25maWciCiBzb3VyY2UgImFyY2gvYXZyMzIvYm9hcmRzL2ZhdnItMzIvS2NvbmZpZyIKK3NvdXJjZSAiYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL0tjb25maWciCiAKIGNob2ljZQogCXByb21wdCAiQm9vdCBsb2FkZXIgdHlwZSIKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvTWFrZWZpbGUgYi9hcmNoL2F2cjMyL01ha2VmaWxlCmluZGV4IGYzZWYzYmIuLjBiOTdlMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvTWFrZWZpbGUKKysrIGIvYXJjaC9hdnIzMi9NYWtlZmlsZQpAQCAtMzUsNiArMzUsNyBAQAogY29yZS0kKENPTkZJR19CT0FSRF9BVE5HVzEwMCkJCSs9IGFyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwLwogY29yZS0kKENPTkZJR19CT0FSRF9IQU1NRVJIRUFEKQkJKz0gYXJjaC9hdnIzMi9ib2FyZHMvaGFtbWVyaGVhZC8KIGNvcmUtJChDT05GSUdfQk9BUkRfRkFWUl8zMikJCSs9IGFyY2gvYXZyMzIvYm9hcmRzL2ZhdnItMzIvCitjb3JlLSQoQ09ORklHX0JPQVJEX01FUklTQykJCSs9IGFyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy8KIGNvcmUtJChDT05GSUdfQk9BUkRfTUlNQzIwMCkJCSs9IGFyY2gvYXZyMzIvYm9hcmRzL21pbWMyMDAvCiBjb3JlLSQoQ09ORklHX0xPQURFUl9VX0JPT1QpCQkrPSBhcmNoL2F2cjMyL2Jvb3QvdS1ib290LwogY29yZS15CQkJCQkrPSBhcmNoL2F2cjMyL2tlcm5lbC8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL2V2a2xjZDEweC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvZXZrbGNkMTB4LmMKaW5kZXggODE0MGIyMi4uMDAzMzcxMSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvZXZrbGNkMTB4LmMKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvZXZrbGNkMTB4LmMKQEAgLTExLDYgKzExLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKQEAgLTE5LDI2ICsyMCwyNiBAQAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCiAjaW5jbHVkZSA8bWFjaC9hdDMyYXA3MDB4Lmg+CisjaW5jbHVkZSA8bWFjaC9wb3J0bXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogCisjaW5jbHVkZSA8c291bmQvYXRtZWwtYWM5N2MuaD4KKwogc3RhdGljIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgYWM5N2MwX2RhdGEgPSB7Ci0JLmRtYV9yeF9wZXJpcGhfaWQJPSAzLAotCS5kbWFfdHhfcGVyaXBoX2lkCT0gNCwKLQkuZG1hX2NvbnRyb2xsZXJfaWQJPSAwLAotCS5yZXNldF9waW4JCT0gR1BJT19QSU5fUEIoMTkpLAorCS5yZXNldF9waW4gPSBHUElPX1BJTl9QQigxOSksCiB9OwogCiAjaWZkZWYgQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9WR0EKIHN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIF9faW5pdGRhdGEgdGNnMDU3dmdsYWRfbW9kZXNbXSA9IHsKIAl7Ci0JCS5uYW1lCQk9ICI2NDB4NDgwIEAgNjAiLAotCQkucmVmcmVzaAk9IDYwLAorCQkubmFtZQkJPSAiNjQweDQ4MCBAIDUwIiwKKwkJLnJlZnJlc2gJPSA1MCwKIAkJLnhyZXMJCT0gNjQwLAkJLnlyZXMJCT0gNDgwLAogCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoMjUxODApLAogCi0JCS5sZWZ0X21hcmdpbgk9IDY0LAkJLnJpZ2h0X21hcmdpbgk9IDMxLAotCQkudXBwZXJfbWFyZ2luCT0gMzQsCQkubG93ZXJfbWFyZ2luCT0gMiwKLQkJLmhzeW5jX2xlbgk9IDk2LAkJLnZzeW5jX2xlbgk9IDQsCisJCS5sZWZ0X21hcmdpbgk9IDY0LAkJLnJpZ2h0X21hcmdpbgk9IDk2LAorCQkudXBwZXJfbWFyZ2luCT0gMzQsCQkubG93ZXJfbWFyZ2luCT0gMTEsCisJCS5oc3luY19sZW4JPSA2NCwJCS52c3luY19sZW4JPSAxNSwKIAogCQkuc3luYwkJPSAwLAogCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKQEAgLTY5LDE0ICs3MCwxNCBAQAogI2VsaWYgQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWF9RVkdBCiBzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBfX2luaXRkYXRhIHRjZzA1N3F2bGFkX21vZGVzW10gPSB7CiAJewotCQkubmFtZQkJPSAiMzIweDI0MCBAIDYwIiwKLQkJLnJlZnJlc2gJPSA2MCwKKwkJLm5hbWUJCT0gIjMyMHgyNDAgQCA1MCIsCisJCS5yZWZyZXNoCT0gNTAsCiAJCS54cmVzCQk9IDMyMCwJCS55cmVzCQk9IDI0MCwKIAkJLnBpeGNsb2NrCT0gS0haMlBJQ09TKDYzMDApLAogCi0JCS5sZWZ0X21hcmdpbgk9IDUyLAkJLnJpZ2h0X21hcmdpbgk9IDI4LAotCQkudXBwZXJfbWFyZ2luCT0gNywJCS5sb3dlcl9tYXJnaW4JPSAyLAotCQkuaHN5bmNfbGVuCT0gOTYsCQkudnN5bmNfbGVuCT0gNCwKKwkJLmxlZnRfbWFyZ2luCT0gMzQsCQkucmlnaHRfbWFyZ2luCT0gNDYsCisJCS51cHBlcl9tYXJnaW4JPSA3LAkJLmxvd2VyX21hcmdpbgk9IDE1LAorCQkuaHN5bmNfbGVuCT0gNjQsCQkudnN5bmNfbGVuCT0gMTIsCiAKIAkJLnN5bmMJCT0gMCwKIAkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCkBAIC0xNDQsMTIgKzE0NSwyOSBAQAogfTsKICNlbmRpZgogCitzdGF0aWMgdm9pZCBhdGV2a2xjZDEweF9sY2RjX3Bvd2VyX2NvbnRyb2woaW50IG9uKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUElOX1BCKDE1KSwgb24pOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBhdGV2a2xjZDEweF9pbml0KHZvaWQpCiB7Ci0JYXQzMl9hZGRfZGV2aWNlX2FjOTdjKDAsICZhYzk3YzBfZGF0YSk7CisJLyogUEIxNSBpcyBjb25uZWN0ZWQgdG8gdGhlIGVuYWJsZSBsaW5lIG9uIHRoZSBib29zdCByZWd1bGF0b3IKKwkgKiBjb250cm9sbGluZyB0aGUgYmFja2xpZ2h0IGZvciB0aGUgTENEIHBhbmVsLgorCSAqLworCWF0MzJfc2VsZWN0X2dwaW8oR1BJT19QSU5fUEIoMTUpLCBBVDMyX0dQSU9GX09VVFBVVCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUElOX1BCKDE1KSwgImJhY2tsaWdodCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BJTl9QQigxNSksIDApOworCisJYXRldmtsY2QxMHhfbGNkY19kYXRhLmF0bWVsX2xjZGZiX3Bvd2VyX2NvbnRyb2wgPQorCQlhdGV2a2xjZDEweF9sY2RjX3Bvd2VyX2NvbnRyb2w7CiAKIAlhdDMyX2FkZF9kZXZpY2VfbGNkYygwLCAmYXRldmtsY2QxMHhfbGNkY19kYXRhLAotCQkJZmJtZW1fc3RhcnQsIGZibWVtX3NpemUsIDEpOworCQkJZmJtZW1fc3RhcnQsIGZibWVtX3NpemUsCisJCQlBVE1FTF9MQ0RDX0FMVF8xOEJJVCB8IEFUTUVMX0xDRENfUEVfRFZBTCk7CisKKwlhdDMyX2FkZF9kZXZpY2VfYWM5N2MoMCwgJmFjOTdjMF9kYXRhLCBBQzk3Q19CT1RIKTsKKwogCXJldHVybiAwOwogfQogcG9zdGNvcmVfaW5pdGNhbGwoYXRldmtsY2QxMHhfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9zZXR1cC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRuZ3cxMDAvc2V0dXAuYwppbmRleCAwNWQzNzIyLi41YjAyMmFhIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9hdG5ndzEwMC9zZXR1cC5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0bmd3MTAwL3NldHVwLmMKQEAgLTU2LDEzICs1Niw4IEBACiBzdGF0aWMgc3RydWN0IG1jaV9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbWNpMF9kYXRhID0gewogCS5zbG90WzBdID0gewogCQkuYnVzX3dpZHRoCT0gNCwKLSNpZm5kZWYgQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWAogCQkuZGV0ZWN0X3Bpbgk9IEdQSU9fUElOX1BDKDI1KSwKIAkJLndwX3BpbgkJPSBHUElPX1BJTl9QRSgwKSwKLSNlbHNlCi0JCS5kZXRlY3RfcGluCT0gR1BJT19QSU5fTk9ORSwKLQkJLndwX3BpbgkJPSBHUElPX1BJTl9OT05FLAotI2VuZGlmCiAJfSwKIH07CiAKQEAgLTEyMyw3ICsxMTgsNyBAQAogCiB2b2lkIF9faW5pdCBzZXR1cF9ib2FyZCh2b2lkKQogewotCWF0MzJfbWFwX3VzYXJ0KDEsIDApOwkvKiBVU0FSVCAxOiAvZGV2L3R0eVMwLCBEQjkgKi8KKwlhdDMyX21hcF91c2FydCgxLCAwLCAwKTsJLyogVVNBUlQgMTogL2Rldi90dHlTMCwgREI5ICovCiAJYXQzMl9zZXR1cF9zZXJpYWxfY29uc29sZSgwKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMi5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMi5jCmluZGV4IDFmMzNhMTAuLjJhZGMyNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDIuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAyLmMKQEAgLTI1MiwxMiArMjUyLDEyIEBACiB2b2lkIF9faW5pdCBzZXR1cF9ib2FyZCh2b2lkKQogewogI2lmZGVmCUNPTkZJR19CT0FSRF9BVFNUSzEwMFhfU1cyX0NVU1RPTQotCWF0MzJfbWFwX3VzYXJ0KDAsIDEpOwkvKiBVU0FSVCAwL0I6IC9kZXYvdHR5UzEsIElSREEgKi8KKwlhdDMyX21hcF91c2FydCgwLCAxLCAwKTsJLyogVVNBUlQgMC9COiAvZGV2L3R0eVMxLCBJUkRBICovCiAjZWxzZQotCWF0MzJfbWFwX3VzYXJ0KDEsIDApOwkvKiBVU0FSVCAxL0E6IC9kZXYvdHR5UzAsIERCOSAqLworCWF0MzJfbWFwX3VzYXJ0KDEsIDAsIDApOwkvKiBVU0FSVCAxL0E6IC9kZXYvdHR5UzAsIERCOSAqLwogI2VuZGlmCiAJLyogVVNBUlQgMi91bnVzZWQ6IGV4cGFuc2lvbiBjb25uZWN0b3IgKi8KLQlhdDMyX21hcF91c2FydCgzLCAyKTsJLyogVVNBUlQgMy9DOiAvZGV2L3R0eVMyLCBEQjkgKi8KKwlhdDMyX21hcF91c2FydCgzLCAyLCAwKTsJLyogVVNBUlQgMy9DOiAvZGV2L3R0eVMyLCBEQjkgKi8KIAogCWF0MzJfc2V0dXBfc2VyaWFsX2NvbnNvbGUoMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAzLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDAzLmMKaW5kZXggYjNhMjNjOC4uZmY3ZTIzMiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwMy5jCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDMuYwpAQCAtMTE1LDEyICsxMTUsMTIgQEAKIHZvaWQgX19pbml0IHNldHVwX2JvYXJkKHZvaWQpCiB7CiAjaWZkZWYJQ09ORklHX0JPQVJEX0FUU1RLMTAwWF9TVzJfQ1VTVE9NCi0JYXQzMl9tYXBfdXNhcnQoMCwgMSk7CS8qIFVTQVJUIDAvQjogL2Rldi90dHlTMSwgSVJEQSAqLworCWF0MzJfbWFwX3VzYXJ0KDAsIDEsIDApOwkvKiBVU0FSVCAwL0I6IC9kZXYvdHR5UzEsIElSREEgKi8KICNlbHNlCi0JYXQzMl9tYXBfdXNhcnQoMSwgMCk7CS8qIFVTQVJUIDEvQTogL2Rldi90dHlTMCwgREI5ICovCisJYXQzMl9tYXBfdXNhcnQoMSwgMCwgMCk7CS8qIFVTQVJUIDEvQTogL2Rldi90dHlTMCwgREI5ICovCiAjZW5kaWYKIAkvKiBVU0FSVCAyL3VudXNlZDogZXhwYW5zaW9uIGNvbm5lY3RvciAqLwotCWF0MzJfbWFwX3VzYXJ0KDMsIDIpOwkvKiBVU0FSVCAzL0M6IC9kZXYvdHR5UzIsIERCOSAqLworCWF0MzJfbWFwX3VzYXJ0KDMsIDIsIDApOwkvKiBVU0FSVCAzL0M6IC9kZXYvdHR5UzIsIERCOSAqLwogCiAJYXQzMl9zZXR1cF9zZXJpYWxfY29uc29sZSgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDQuYyBiL2FyY2gvYXZyMzIvYm9hcmRzL2F0c3RrMTAwMC9hdHN0azEwMDQuYwppbmRleCAyOWIzNWFjLi42OWE5ZjBmIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9hdHN0azEwMDAvYXRzdGsxMDA0LmMKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvYXRzdGsxMDAwL2F0c3RrMTAwNC5jCkBAIC0xMjAsMTIgKzEyMCwxMiBAQAogdm9pZCBfX2luaXQgc2V0dXBfYm9hcmQodm9pZCkKIHsKICNpZmRlZglDT05GSUdfQk9BUkRfQVRTVEsxMDBYX1NXMl9DVVNUT00KLQlhdDMyX21hcF91c2FydCgwLCAxKTsJLyogVVNBUlQgMC9COiAvZGV2L3R0eVMxLCBJUkRBICovCisJYXQzMl9tYXBfdXNhcnQoMCwgMSwgMCk7CS8qIFVTQVJUIDAvQjogL2Rldi90dHlTMSwgSVJEQSAqLwogI2Vsc2UKLQlhdDMyX21hcF91c2FydCgxLCAwKTsJLyogVVNBUlQgMS9BOiAvZGV2L3R0eVMwLCBEQjkgKi8KKwlhdDMyX21hcF91c2FydCgxLCAwLCAwKTsJLyogVVNBUlQgMS9BOiAvZGV2L3R0eVMwLCBEQjkgKi8KICNlbmRpZgogCS8qIFVTQVJUIDIvdW51c2VkOiBleHBhbnNpb24gY29ubmVjdG9yICovCi0JYXQzMl9tYXBfdXNhcnQoMywgMik7CS8qIFVTQVJUIDMvQzogL2Rldi90dHlTMiwgREI5ICovCisJYXQzMl9tYXBfdXNhcnQoMywgMiwgMCk7CS8qIFVTQVJUIDMvQzogL2Rldi90dHlTMiwgREI5ICovCiAKIAlhdDMyX3NldHVwX3NlcmlhbF9jb25zb2xlKDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9zZXR1cC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvZmF2ci0zMi9zZXR1cC5jCmluZGV4IDc0NWM0MDguLjQ2YzliMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2ZhdnItMzIvc2V0dXAuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9mYXZyLTMyL3NldHVwLmMKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KIAorI2luY2x1ZGUgPHNvdW5kL2F0bWVsLWFiZGFjLmg+CisKICNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTQxLDYgKzQzLDkgQEAKIC8qIEluaXRpYWxpemVkIGJ5IGJvb3Rsb2FkZXItc3BlY2lmaWMgc3RhcnR1cCBjb2RlLiAqLwogc3RydWN0IHRhZyAqYm9vdGxvYWRlcl90YWdzIF9faW5pdGRhdGE7CiAKK3N0YXRpYyBzdHJ1Y3QgYXRtZWxfYWJkYWNfcGRhdGEgX19pbml0ZGF0YSBhYmRhYzBfZGF0YSA9IHsKK307CisKIHN0cnVjdCBldGhfYWRkciB7CiAJdTggYWRkcls2XTsKIH07CkBAIC0yNDUsNyArMjUwLDcgQEAKIAogdm9pZCBfX2luaXQgc2V0dXBfYm9hcmQodm9pZCkKIHsKLQlhdDMyX21hcF91c2FydCgzLCAwKTsJLyogVVNBUlQgMyA9PiAvZGV2L3R0eVMwICovCisJYXQzMl9tYXBfdXNhcnQoMywgMCwgMCk7CS8qIFVTQVJUIDMgPT4gL2Rldi90dHlTMCAqLwogCWF0MzJfc2V0dXBfc2VyaWFsX2NvbnNvbGUoMCk7CiB9CiAKQEAgLTMyNiw3ICszMzEsNyBAQAogCiAJc3BpMV9ib2FyZF9pbmZvWzBdLmlycSA9IGdwaW9fdG9faXJxKEdQSU9fUElOX1BCKDMpKTsKIAotCXNldF9hYmRhY19yYXRlKGF0MzJfYWRkX2RldmljZV9hYmRhYygwKSk7CisJc2V0X2FiZGFjX3JhdGUoYXQzMl9hZGRfZGV2aWNlX2FiZGFjKDAsICZhYmRhYzBfZGF0YSkpOwogCiAJYXQzMl9hZGRfZGV2aWNlX3B3bSgxIDw8IGF0bWVsX3B3bV9ibF9wZGF0YS5wd21fY2hhbm5lbCk7CiAJYXQzMl9hZGRfZGV2aWNlX3NwaSgxLCBzcGkxX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoc3BpMV9ib2FyZF9pbmZvKSk7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkL3NldHVwLmMgYi9hcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkL3NldHVwLmMKaW5kZXggNGQyZmU4Mi4uZGQwMDk4NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvYm9hcmRzL2hhbW1lcmhlYWQvc2V0dXAuYworKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkL3NldHVwLmMKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlIDxtYWNoL2luaXQuaD4KICNpbmNsdWRlIDxtYWNoL3BvcnRtdXguaD4KIAorI2luY2x1ZGUgPHNvdW5kL2F0bWVsLWFjOTdjLmg+CisKICNpbmNsdWRlICIuLi8uLi9tYWNoLWF0MzJhcC9jbG9jay5oIgogI2luY2x1ZGUgImZsYXNoLmgiCiAKQEAgLTE2Myw3ICsxNjUsNyBAQAogCiB2b2lkIF9faW5pdCBzZXR1cF9ib2FyZCh2b2lkKQogewotCWF0MzJfbWFwX3VzYXJ0KDEsIDApOwkvKiBVU0FSVCAxOiAvZGV2L3R0eVMwLCBEQjkgKi8KKwlhdDMyX21hcF91c2FydCgxLCAwLCAwKTsJLyogVVNBUlQgMTogL2Rldi90dHlTMCwgREI5ICovCiAJYXQzMl9zZXR1cF9zZXJpYWxfY29uc29sZSgwKTsKIH0KIApAQCAtMjMzLDcgKzIzNSw3IEBACiAJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaTJjX2luZm8sIEFSUkFZX1NJWkUoaTJjX2luZm8pKTsKIAogI2lmZGVmIENPTkZJR19CT0FSRF9IQU1NRVJIRUFEX1NORAotCWF0MzJfYWRkX2RldmljZV9hYzk3YygwLCAmYWM5N2NfZGF0YSk7CisJYXQzMl9hZGRfZGV2aWNlX2FjOTdjKDAsICZhYzk3Y19kYXRhLCBBQzk3Q19CT1RIKTsKICNlbmRpZgogCiAJLyogU2VsZWN0IHRoZSBUb3VjaHNjcmVlbiBpbnRlcnJ1cHQgcGluIG1vZGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9LY29uZmlnIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwNDMyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9LY29uZmlnCkBAIC0wLDAgKzEsNSBAQAorIyBNZXJpc2MgY3VzdG9taXphdGlvbgorCitpZiBCT0FSRF9NRVJJU0MKKworZW5kaWYJIyBCT0FSRF9NRVJJU0MKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9NYWtlZmlsZSBiL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjRjNzg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai15CQkJCQkrPSBzZXR1cC5vIGZsYXNoLm8gZGlzcGxheS5vIG1lcmlzY19zeXNmcy5vCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvZGlzcGxheS5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL2Rpc3BsYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWE1NDNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL2Rpc3BsYXkuYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogRGlzcGxheSBzZXR1cCBjb2RlIGZvciB0aGUgTWVyaXNjIGJvYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbnNzb24gRWxla3Ryb25payBBQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDx2aWRlby9hdG1lbF9sY2RjLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgIm1lcmlzYy5oIgorCitzdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBtZXJpc2NfZmJfdmlkZW9tb2RlW10gPSB7CisJeworCQkucmVmcmVzaAk9IDQ0LAorCQkueHJlcwkJPSA2NDAsCisJCS55cmVzCQk9IDQ4MCwKKwkJLmxlZnRfbWFyZ2luCT0gOTYsCisJCS5yaWdodF9tYXJnaW4JPSA5NiwKKwkJLnVwcGVyX21hcmdpbgk9IDM0LAorCQkubG93ZXJfbWFyZ2luCT0gOCwKKwkJLmhzeW5jX2xlbgk9IDY0LAorCQkudnN5bmNfbGVuCT0gNjQsCisJCS5uYW1lCQk9ICI2NDB4NDgwIEAgNDQiLAorCQkucGl4Y2xvY2sJPSBLSFoyUElDT1MoMjUxODApLAorCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBmYl9tb25zcGVjcyBtZXJpc2NfZmJfbW9uc3BlY3MgPSB7CisJLm1hbnVmYWN0dXJlcgk9ICJLeW8iLAorCS5tb25pdG9yCT0gIlRDRzA3NVZHMkFEIiwKKwkubW9kZWRiCQk9IG1lcmlzY19mYl92aWRlb21vZGUsCisJLm1vZGVkYl9sZW4JPSBBUlJBWV9TSVpFKG1lcmlzY19mYl92aWRlb21vZGUpLAorCS5oZm1pbgkJPSAzMDAwMCwKKwkuaGZtYXgJCT0gMzMzMzMsCisJLnZmbWluCQk9IDYwLAorCS52Zm1heAkJPSA5MCwKKwkuZGNsa21heAk9IDMwMDAwMDAwLAorfTsKKworc3RydWN0IGF0bWVsX2xjZGZiX2luZm8gbWVyaXNjX2xjZGNfZGF0YSA9IHsKKwkuZGVmYXVsdF9icHAJCT0gMjQsCisJLmRlZmF1bHRfZG1hY29uCQk9IEFUTUVMX0xDRENfRE1BRU4gfCBBVE1FTF9MQ0RDX0RNQTJERU4sCisJLmRlZmF1bHRfbGNkY29uMgk9IChBVE1FTF9MQ0RDX0RJU1RZUEVfVEZUCisJCQkJICAgfCBBVE1FTF9MQ0RDX0NMS01PRF9BTFdBWVNBQ1RJVkUKKwkJCQkgICB8IEFUTUVMX0xDRENfTUVNT1JfQklHKSwKKwkuZGVmYXVsdF9tb25zcGVjcwk9ICZtZXJpc2NfZmJfbW9uc3BlY3MsCisJLmd1YXJkX3RpbWUJCT0gMiwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1lcmlzY19kaXNwbGF5X2luaXQodm9pZCkKK3sKKwlhdDMyX2FkZF9kZXZpY2VfbGNkYygwLCAmbWVyaXNjX2xjZGNfZGF0YSwgZmJtZW1fc3RhcnQsCisJCQkgICAgIGZibWVtX3NpemUsIDApOworCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwobWVyaXNjX2Rpc3BsYXlfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvZmxhc2guYyBiL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODU2ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvZmxhc2guYwpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIE1lcmlzYyBib2FyZC1zcGVjaWZpYyBmbGFzaCBpbml0aWFsaXphdGlvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0aW5zc29uIEVsZWt0cm9uaWsgQUIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9zbWMuaD4KKworLyogV2lsbCBiZSB0cmFuc2xhdGVkIHRvIHVuaXRzIG9mIDE0LjMgbnMsIHJvdW5kZWQgdXAgKi8KK3N0YXRpYyBzdHJ1Y3Qgc21jX3RpbWluZyBmbGFzaF90aW1pbmcgX19pbml0ZGF0YSA9IHsKKwkubmNzX3JlYWRfc2V0dXAJCT0gMSAqIDE0LAorCS5ucmRfc2V0dXAJCT0gNSAqIDE0LAorCS5uY3Nfd3JpdGVfc2V0dXAJPSAxICogMTQsCisJLm53ZV9zZXR1cAkJPSAyICogMTQsCisKKwkubmNzX3JlYWRfcHVsc2UJCT0gMTIgKiAxNCwKKwkubnJkX3B1bHNlCQk9IDcgKiAxNCwKKwkubmNzX3dyaXRlX3B1bHNlCT0gOCAqIDE0LAorCS5ud2VfcHVsc2UJCT0gNCAqIDE0LAorCisJLnJlYWRfY3ljbGUJCT0gMTQgKiAxNCwKKwkud3JpdGVfY3ljbGUJCT0gMTAgKiAxNCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21jX2NvbmZpZyBmbGFzaF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuYnVzX3dpZHRoCT0gMiwKKwkubnJkX2NvbnRyb2xsZWQJPSAxLAorCS5ud2VfY29udHJvbGxlZAk9IDEsCisJLmJ5dGVfd3JpdGUJPSAxLAorCS50ZGZfY3ljbGVzCT0gMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBmbGFzaF8wX3BhcnRzW10gPSB7CisJeworCQkubmFtZQkJPSAiYm9vdCIsCisJCS5vZmZzZXQJCT0gMHgwMDAwMDAwMCwKKwkJLnNpemUJCT0gMHgwMDA2MDAwMCwKKwkJLm1hc2tfZmxhZ3MJPSAwLAorCX0sCisJeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSAweDAwMDYwMDAwLAorCQkuc2l6ZQkJPSAweDAwMjAwMDAwLAorCQkubWFza19mbGFncwk9IDAsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJyb290IiwKKwkJLm9mZnNldAkJPSAweDAwMjYwMDAwLAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCQkubWFza19mbGFncwk9IDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBmbGFzaF8xX3BhcnRzW10gPSB7CisJeworCQkubmFtZQkJPSAiMm5kZmxhc2giLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5tYXNrX2ZsYWdzCT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZmxhc2hfZGF0YVtdID0geworCXsKKwkJLndpZHRoCQk9IDIsCisJCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZmxhc2hfMF9wYXJ0cyksCisJCS5wYXJ0cwkJPSBmbGFzaF8wX3BhcnRzLAorCX0sCisJeworCQkud2lkdGgJCT0gMiwKKwkJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShmbGFzaF8xX3BhcnRzKSwKKwkJLnBhcnRzCQk9IGZsYXNoXzFfcGFydHMsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmbGFzaF9yZXNvdXJjZVtdID0geworCXsKKwkJLnN0YXJ0CQk9IDB4MDAwMDAwMDAsCisJCS5lbmQJCT0gMHgwM2ZmZmZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gMHgwNDAwMDAwMCwKKwkJLmVuZAkJPSAweDA3ZmZmZmZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGZsYXNoX2RldmljZVtdID0geworCXsKKwkJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCQkuaWQJCT0gMCwKKwkJLnJlc291cmNlCT0gJmZsYXNoX3Jlc291cmNlWzBdLAorCQkubnVtX3Jlc291cmNlcwk9IDEsCisJCS5kZXYJCT0geworCQkJLnBsYXRmb3JtX2RhdGEJPSAmZmxhc2hfZGF0YVswXSwKKwkJfSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCQkuaWQJCT0gMSwKKwkJLnJlc291cmNlCT0gJmZsYXNoX3Jlc291cmNlWzFdLAorCQkubnVtX3Jlc291cmNlcwk9IDEsCisJCS5kZXYJCT0geworCQkJLnBsYXRmb3JtX2RhdGEJPSAmZmxhc2hfZGF0YVsxXSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWVyaXNjX2ZsYXNoX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXNtY19zZXRfdGltaW5nKCZmbGFzaF9jb25maWcsICZmbGFzaF90aW1pbmcpOworCisJcmV0ID0gc21jX3NldF9jb25maWd1cmF0aW9uKDAsICZmbGFzaF9jb25maWcpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTWVyaXNjOiBmYWlsZWQgdG8gc2V0IE5PUiBmbGFzaCB0aW1pbmcgIzBcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNtY19zZXRfY29uZmlndXJhdGlvbig0LCAmZmxhc2hfY29uZmlnKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIk1lcmlzYzogZmFpbGVkIHRvIHNldCBOT1IgZmxhc2ggdGltaW5nICMxXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmZsYXNoX2RldmljZVswXSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZmbGFzaF9kZXZpY2VbMV0pOworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKG1lcmlzY19mbGFzaF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9tZXJpc2MuaCBiL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9tZXJpc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGZmYjJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL21lcmlzYy5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBNZXJpc2MgZXhwb3J0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0aW5zc29uIEVsZWt0cm9uaWsgQUIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fQVJDSF9BVlIzMl9CT0FSRFNfTUVSSVNDX01FUklTQ19ICisjZGVmaW5lIF9fQVJDSF9BVlIzMl9CT0FSRFNfTUVSSVNDX01FUklTQ19ICisKK2NvbnN0IGNoYXIgKm1lcmlzY19yZXZpc2lvbih2b2lkKTsKK2NvbnN0IGNoYXIgKm1lcmlzY19tb2RlbCh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCBjbGFzcyBtZXJpc2NfY2xhc3M7CisKKyNlbmRpZiAvKiBfX0FSQ0hfQVZSMzJfQk9BUkRTX01FUklTQ19NRVJJU0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL21lcmlzY19zeXNmcy5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL21lcmlzY19zeXNmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNDMxZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2JvYXJkcy9tZXJpc2MvbWVyaXNjX3N5c2ZzLmMKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIE1lcmlzYyBzeXNmcyBleHBvcnRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE1hcnRpbnNzb24gRWxla3Ryb25payBBQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgIm1lcmlzYy5oIgorCitzdGF0aWMgc3NpemVfdCBtZXJpc2NfbW9kZWxfc2hvdyhzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCit7CisJc3NpemVfdCByZXQgPSAwOworCisJc3ByaW50ZihidWYsICIlc1xuIiwgbWVyaXNjX21vZGVsKCkpOworCXJldCA9IHN0cmxlbihidWYpICsgMTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1lcmlzY19yZXZpc2lvbl9zaG93KHN0cnVjdCBjbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3sKKwlzc2l6ZV90IHJldCA9IDA7CisKKwlzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBtZXJpc2NfcmV2aXNpb24oKSk7CisJcmV0ID0gc3RybGVuKGJ1ZikgKyAxOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgbWVyaXNjX2NsYXNzX2F0dHJzW10gPSB7CisJX19BVFRSKG1vZGVsLCBTX0lSVUdPLCBtZXJpc2NfbW9kZWxfc2hvdywgTlVMTCksCisJX19BVFRSKHJldmlzaW9uLCBTX0lSVUdPLCBtZXJpc2NfcmV2aXNpb25fc2hvdywgTlVMTCksCisJX19BVFRSX05VTEwsCit9OworCitzdHJ1Y3QgY2xhc3MgbWVyaXNjX2NsYXNzID0geworCS5uYW1lID0JCSJtZXJpc2MiLAorCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5jbGFzc19hdHRycyA9CW1lcmlzY19jbGFzc19hdHRycywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1lcmlzY19zeXNmc19pbml0KHZvaWQpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IGNsYXNzX3JlZ2lzdGVyKCZtZXJpc2NfY2xhc3MpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmV0dXJuIDA7Cit9CisKK3Bvc3Rjb3JlX2luaXRjYWxsKG1lcmlzY19zeXNmc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9zZXR1cC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWVyaXNjL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBiMzAwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvYm9hcmRzL21lcmlzYy9zZXR1cC5jCkBAIC0wLDAgKzEsMjk3IEBACisvKgorICogQm9hcmQtc3BlY2lmaWMgc2V0dXAgY29kZSBmb3IgdGhlIE1lcmlzYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXJ0aW5zc29uIEVsZWt0cm9uaWsgQUIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvYXRtZWwtbWNpLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9hdDMyYXA3MDB4Lmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1hY2gvaW5pdC5oPgorI2luY2x1ZGUgPG1hY2gvcG9ydG11eC5oPgorCisjaW5jbHVkZSAibWVyaXNjLmgiCisKKy8qIEhvbGRzIHRoZSBhdXRvZGV0ZWN0ZWQgYm9hcmQgbW9kZWwgYW5kIHJldmlzaW9uICovCitzdGF0aWMgaW50IG1lcmlzY19ib2FyZF9pZDsKKworLyogSW5pdGlhbGl6ZWQgYnkgYm9vdGxvYWRlci1zcGVjaWZpYyBzdGFydHVwIGNvZGUuICovCitzdHJ1Y3QgdGFnICpib290bG9hZGVyX3RhZ3MgX19pbml0ZGF0YTsKKworLyogT3NjaWxsYXRvciBmcmVxdWVuY2llcy4gVGhlc2UgYXJlIGJvYXJkIHNwZWNpZmljICovCit1bnNpZ25lZCBsb25nIGF0MzJfYm9hcmRfb3NjX3JhdGVzWzNdID0geworCVswXQk9IDMyNzY4LAkvKiAzMi43Njgga0h6IG9uIFJUQyBvc2MgKi8KKwlbMV0JPSAyMDAwMDAwMCwJLyogMjAgTUh6IG9uIG9zYzAgKi8KKwlbMl0JPSAxMjAwMDAwMCwJLyogMTIgTUh6IG9uIG9zYzEgKi8KK307CisKK3N0cnVjdCBldGhfYWRkciB7CisJdTggYWRkcls2XTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXRoX2FkZHIgX19pbml0ZGF0YSBod19hZGRyWzJdOworc3RhdGljIHN0cnVjdCBldGhfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIGV0aF9kYXRhWzJdOworCitzdGF0aWMgaW50IGFkczc4NDZfZ2V0X3BlbmRvd25fc3RhdGVfUEIyNih2b2lkKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoR1BJT19QSU5fUEIoMjYpKTsKK30KKworc3RhdGljIGludCBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlX1BCMjgodm9pZCkKK3sKKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fUElOX1BCKDI4KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgYWRzNzg0Nl9kYXRhID0geworCS5tb2RlbAkJCQk9IDc4NDYsCisJLnZyZWZfZGVsYXlfdXNlY3MJCT0gMTAwLAorCS52cmVmX212CQkJPSAwLAorCS5rZWVwX3ZyZWZfb24JCQk9IDAsCisJLnNldHRsZV9kZWxheV91c2VjcwkJPSAxNTAsCisJLnBlbmlycV9yZWNoZWNrX2RlbGF5X3VzZWNzCT0gMSwKKwkueF9wbGF0ZV9vaG1zCQkJPSA4MDAsCisJLmRlYm91bmNlX3JlcAkJCT0gNCwKKwkuZGVib3VuY2VfbWF4CQkJPSAxMCwKKwkuZGVib3VuY2VfdG9sCQkJPSA1MCwKKwkuZ2V0X3BlbmRvd25fc3RhdGUJCT0gYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZV9QQjI2LAorCS5maWx0ZXJfaW5pdAkJCT0gTlVMTCwKKwkuZmlsdGVyCQkJCT0gTlVMTCwKKwkuZmlsdGVyX2NsZWFudXAJCQk9IE5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIF9faW5pdGRhdGEgc3BpMF9ib2FyZF9pbmZvW10gPSB7CisJeworCQkubW9kYWxpYXMJPSAiYWRzNzg0NiIsCisJCS5tYXhfc3BlZWRfaHoJPSAzMjUwMDAwLAorCQkuY2hpcF9zZWxlY3QJPSAwLAorCQkuYnVzX251bQk9IDAsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmFkczc4NDZfZGF0YSwKKwkJLm1vZGUJCT0gU1BJX01PREVfMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG1jaTBfZGF0YSA9IHsKKwkuc2xvdFswXSA9IHsKKwkJLmJ1c193aWR0aAk9IDQsCisJCS5kZXRlY3RfcGluCT0gR1BJT19QSU5fUEUoMTkpLAorCQkud3BfcGluCQk9IEdQSU9fUElOX1BFKDIwKSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGFyc2VfdGFnX2V0aGVybmV0KHN0cnVjdCB0YWcgKnRhZykKK3sKKwlpbnQgaTsKKworCWkgPSB0YWctPnUuZXRoZXJuZXQubWFjX2luZGV4OworCWlmIChpIDwgQVJSQVlfU0laRShod19hZGRyKSkgeworCQltZW1jcHkoaHdfYWRkcltpXS5hZGRyLCB0YWctPnUuZXRoZXJuZXQuaHdfYWRkcmVzcywKKwkJICAgICAgIHNpemVvZihod19hZGRyW2ldLmFkZHIpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK19fdGFndGFibGUoQVRBR19FVEhFUk5FVCwgcGFyc2VfdGFnX2V0aGVybmV0KTsKKworc3RhdGljIHZvaWQgX19pbml0IHNldF9od19hZGRyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWNvbnN0IHU4ICphZGRyOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgY2xrICpwY2xrOworCisJaWYgKCFyZXMpCisJCXJldHVybjsKKworCWlmIChwZGV2LT5pZCA+PSBBUlJBWV9TSVpFKGh3X2FkZHIpKQorCQlyZXR1cm47CisKKwlhZGRyID0gaHdfYWRkcltwZGV2LT5pZF0uYWRkcjsKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcikpCisJCXJldHVybjsKKworCXJlZ3MgPSAodm9pZCBfX2lvbWVtIF9fZm9yY2UgKilyZXMtPnN0YXJ0OworCXBjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwY2xrIik7CisJaWYgKCFwY2xrKQorCQlyZXR1cm47CisKKwljbGtfZW5hYmxlKHBjbGspOworCV9fcmF3X3dyaXRlbCgoYWRkclszXSA8PCAyNCkgfCAoYWRkclsyXSA8PCAxNikKKwkJICAgICB8IChhZGRyWzFdIDw8IDgpIHwgYWRkclswXSwgcmVncyArIDB4OTgpOworCV9fcmF3X3dyaXRlbCgoYWRkcls1XSA8PCA4KSB8IGFkZHJbNF0sIHJlZ3MgKyAweDljKTsKKwljbGtfZGlzYWJsZShwY2xrKTsKKwljbGtfcHV0KHBjbGspOworfQorCitzdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgaTJjX2dwaW9fZGF0YSA9IHsKKwkuc2RhX3BpbgkJPSBHUElPX1BJTl9QQSg2KSwKKwkuc2NsX3BpbgkJPSBHUElPX1BJTl9QQSg3KSwKKwkuc2RhX2lzX29wZW5fZHJhaW4JPSAxLAorCS5zY2xfaXNfb3Blbl9kcmFpbgk9IDEsCisJLnVkZWxheQkJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGkyY19ncGlvX2RldmljZSA9IHsKKwkubmFtZQk9ICJpMmMtZ3BpbyIsCisJLmlkCT0gMCwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZpMmNfZ3Bpb19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgaTJjX2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTYzIiwgMHg1MSkKKwl9LAorfTsKKworI2lmZGVmIENPTkZJR19MRURTX0FUTUVMX1BXTQorc3RhdGljIHN0cnVjdCBncGlvX2xlZCBzdGtfcHdtX2xlZFtdID0geworCXsKKwkJLm5hbWUJPSAiYmFja2xpZ2h0IiwKKwkJLmdwaW8JPSAwLAkJLyogUFdNIGNoYW5uZWwgMCAoTENEIGJhY2tsaWdodCkgKi8KKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHN0a19wd21fbGVkX2RhdGEgPSB7CisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShzdGtfcHdtX2xlZCksCisJLmxlZHMJCT0gc3RrX3B3bV9sZWQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzdGtfcHdtX2xlZF9kZXYgPSB7CisJLm5hbWUJPSAibGVkcy1hdG1lbC1wd20iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnN0a19wd21fbGVkX2RhdGEsCisJfSwKK307CisjZW5kaWYKKworY29uc3QgY2hhciAqbWVyaXNjX21vZGVsKHZvaWQpCit7CisJc3dpdGNoIChtZXJpc2NfYm9hcmRfaWQpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQlyZXR1cm4gIjUwMC0wMSI7CisJY2FzZSAyOgorCQlyZXR1cm4gIkJUIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVua25vd24iOworCX0KK30KKworY29uc3QgY2hhciAqbWVyaXNjX3JldmlzaW9uKHZvaWQpCit7CisJc3dpdGNoIChtZXJpc2NfYm9hcmRfaWQpIHsKKwljYXNlIDA6CisJCXJldHVybiAiQiI7CisJY2FzZSAxOgorCQlyZXR1cm4gIkQiOworCWNhc2UgMjoKKwkJcmV0dXJuICJBIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVua25vd24iOworCX0KK30KKworc3RhdGljIHZvaWQgZGV0ZWN0X21lcmlzY19ib2FyZF9pZCh2b2lkKQoreworCS8qIEJvYXJkIElEIHBpbnMgTVVTVCBiZSBzZXQgYXMgaW5wdXQgb3IgdGhlIGJvYXJkIG1heSBiZSBkYW1hZ2VkICovCisJYXQzMl9zZWxlY3RfZ3BpbyhHUElPX1BJTl9QQSgyNCksIEFUMzJfR1BJT0ZfUFVMTFVQKTsKKwlhdDMyX3NlbGVjdF9ncGlvKEdQSU9fUElOX1BBKDI1KSwgQVQzMl9HUElPRl9QVUxMVVApOworCWF0MzJfc2VsZWN0X2dwaW8oR1BJT19QSU5fUEEoMjYpLCBBVDMyX0dQSU9GX1BVTExVUCk7CisJYXQzMl9zZWxlY3RfZ3BpbyhHUElPX1BJTl9QQSgyNyksIEFUMzJfR1BJT0ZfUFVMTFVQKTsKKworCW1lcmlzY19ib2FyZF9pZCA9ICFncGlvX2dldF92YWx1ZShHUElPX1BJTl9QQSgyNCkpICsKKwkJIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fUElOX1BBKDI1KSkgKiAyICsKKwkJIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fUElOX1BBKDI2KSkgKiA0ICsKKwkJIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fUElOX1BBKDI3KSkgKiA4OworfQorCit2b2lkIF9faW5pdCBzZXR1cF9ib2FyZCh2b2lkKQoreworCWF0MzJfbWFwX3VzYXJ0KDAsIDAsIDApOworCWF0MzJfbWFwX3VzYXJ0KDEsIDEsIDApOworCWF0MzJfbWFwX3VzYXJ0KDMsIDMsIDApOworCWF0MzJfc2V0dXBfc2VyaWFsX2NvbnNvbGUoMSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG1lcmlzY19pbml0KHZvaWQpCit7CisJZGV0ZWN0X21lcmlzY19ib2FyZF9pZCgpOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJCT0FSRDogTWVyaXNjICVzIHJldmlzaW9uICVzXG4iLCBtZXJpc2NfbW9kZWwoKSwKKwkgICAgICAgbWVyaXNjX3JldmlzaW9uKCkpOworCisJLyogUmVzZXJ2ZSBwaW5zIGZvciBTRFJBTSAqLworCWF0MzJfcmVzZXJ2ZV9waW4oR1BJT19QSU9FX0JBU0UsIEFUTUVMX0VCSV9QRV9EQVRBX0FMTCB8ICgxIDw8IDI2KSk7CisKKwlpZiAobWVyaXNjX2JvYXJkX2lkID49IDEpCisJCWF0MzJfbWFwX3VzYXJ0KDIsIDIsIDApOworCisJYXQzMl9hZGRfZGV2aWNlX3VzYXJ0KDApOworCWF0MzJfYWRkX2RldmljZV91c2FydCgxKTsKKwlpZiAobWVyaXNjX2JvYXJkX2lkID49IDEpCisJCWF0MzJfYWRkX2RldmljZV91c2FydCgyKTsKKwlhdDMyX2FkZF9kZXZpY2VfdXNhcnQoMyk7CisJc2V0X2h3X2FkZHIoYXQzMl9hZGRfZGV2aWNlX2V0aCgwLCAmZXRoX2RhdGFbMF0pKTsKKworCS8qIEFEUzc4NDYgUEVOSVJRICovCisJaWYgKG1lcmlzY19ib2FyZF9pZCA9PSAwKSB7CisJCWFkczc4NDZfZGF0YS5nZXRfcGVuZG93bl9zdGF0ZSA9IGFkczc4NDZfZ2V0X3BlbmRvd25fc3RhdGVfUEIyNjsKKwkJYXQzMl9zZWxlY3RfcGVyaXBoKEdQSU9fUElPQl9CQVNFLCAxIDw8IDI2LAorCQkJCSAgIEdQSU9fUEVSSVBIX0EsIEFUMzJfR1BJT0ZfUFVMTFVQKTsKKwkJc3BpMF9ib2FyZF9pbmZvWzBdLmlycSA9IEFUMzJfRVhUSU5UKDEpOworCX0gZWxzZSB7CisJCWFkczc4NDZfZGF0YS5nZXRfcGVuZG93bl9zdGF0ZSA9IGFkczc4NDZfZ2V0X3BlbmRvd25fc3RhdGVfUEIyODsKKwkJYXQzMl9zZWxlY3RfcGVyaXBoKEdQSU9fUElPQl9CQVNFLCAxIDw8IDI4LCBHUElPX1BFUklQSF9BLAorCQkJCSAgIEFUMzJfR1BJT0ZfUFVMTFVQKTsKKwkJc3BpMF9ib2FyZF9pbmZvWzBdLmlycSA9IEFUMzJfRVhUSU5UKDMpOworCX0KKworCS8qIEFEUzc4NDYgYnVzeSBwaW4gKi8KKwlhdDMyX3NlbGVjdF9ncGlvKEdQSU9fUElOX1BBKDQpLCBBVDMyX0dQSU9GX1BVTExVUCk7CisKKwlhdDMyX2FkZF9kZXZpY2Vfc3BpKDAsIHNwaTBfYm9hcmRfaW5mbywgQVJSQVlfU0laRShzcGkwX2JvYXJkX2luZm8pKTsKKworCWF0MzJfYWRkX2RldmljZV9tY2koMCwgJm1jaTBfZGF0YSk7CisKKyNpZmRlZiBDT05GSUdfTEVEU19BVE1FTF9QV00KKwlhdDMyX2FkZF9kZXZpY2VfcHdtKCgxIDw8IDApIHwgKDEgPDwgMikpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc3RrX3B3bV9sZWRfZGV2KTsKKyNlbHNlCisJYXQzMl9hZGRfZGV2aWNlX3B3bSgoMSA8PCAyKSk7CisjZW5kaWYKKworCWF0MzJfc2VsZWN0X2dwaW8oaTJjX2dwaW9fZGF0YS5zZGFfcGluLAorCQlBVDMyX0dQSU9GX01VTFRJRFJWIHwgQVQzMl9HUElPRl9PVVRQVVQgfCBBVDMyX0dQSU9GX0hJR0gpOworCWF0MzJfc2VsZWN0X2dwaW8oaTJjX2dwaW9fZGF0YS5zY2xfcGluLAorCQlBVDMyX0dQSU9GX01VTFRJRFJWIHwgQVQzMl9HUElPRl9PVVRQVVQgfCBBVDMyX0dQSU9GX0hJR0gpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaTJjX2dwaW9fZGV2aWNlKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGkyY19pbmZvLCBBUlJBWV9TSVpFKGkyY19pbmZvKSk7CisKKwlyZXR1cm4gMDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKG1lcmlzY19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvYm9hcmRzL21pbWMyMDAvc2V0dXAuYyBiL2FyY2gvYXZyMzIvYm9hcmRzL21pbWMyMDAvc2V0dXAuYwppbmRleCAyYjU4ZDYxLi5jMWIyMTc1IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9taW1jMjAwL3NldHVwLmMKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvbWltYzIwMC9zZXR1cC5jCkBAIC0xNzUsMTAgKzE3NSwxMCBAQAogCiB2b2lkIF9faW5pdCBzZXR1cF9ib2FyZCh2b2lkKQogewotCWF0MzJfbWFwX3VzYXJ0KDAsIDApOwkvKiBVU0FSVCAwOiAvZGV2L3R0eVMwIChUVEwgLS0+IEFsdGVyYSkgKi8KLQlhdDMyX21hcF91c2FydCgxLCAxKTsJLyogVVNBUlQgMTogL2Rldi90dHlTMSAoUlMyMzIpICovCi0JYXQzMl9tYXBfdXNhcnQoMiwgMik7CS8qIFVTQVJUIDI6IC9kZXYvdHR5UzIgKFJTNDg1KSAqLwotCWF0MzJfbWFwX3VzYXJ0KDMsIDMpOwkvKiBVU0FSVCAzOiAvZGV2L3R0eVMzIChSUzQyMiBNdWx0aWRyb3ApICovCisJYXQzMl9tYXBfdXNhcnQoMCwgMCwgMCk7CS8qIFVTQVJUIDA6IC9kZXYvdHR5UzAgKFRUTCAtLT4gQWx0ZXJhKSAqLworCWF0MzJfbWFwX3VzYXJ0KDEsIDEsIDApOwkvKiBVU0FSVCAxOiAvZGV2L3R0eVMxIChSUzIzMikgKi8KKwlhdDMyX21hcF91c2FydCgyLCAyLCAwKTsJLyogVVNBUlQgMjogL2Rldi90dHlTMiAoUlM0ODUpICovCisJYXQzMl9tYXBfdXNhcnQoMywgMywgMCk7CS8qIFVTQVJUIDM6IC9kZXYvdHR5UzMgKFJTNDIyIE11bHRpZHJvcCkgKi8KIH0KIAogc3RhdGljIHN0cnVjdCBpMmNfZ3Bpb19wbGF0Zm9ybV9kYXRhIGkyY19ncGlvX2RhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvbWVyaXNjX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9tZXJpc2NfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNTU0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvbWVyaXNjX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEyMzcgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzEKKyMgV2VkIE1hciAyNSAxNDowNjoxNSAyMDA5CisjCitDT05GSUdfQVZSMzI9eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CisjIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKKyMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0xCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKKyMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlIGFuZCBmZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfU1VCQVJDSF9BVlIzMkI9eQorQ09ORklHX01NVT15CitDT05GSUdfUEVSRk9STUFOQ0VfQ09VTlRFUlM9eQorQ09ORklHX1BMQVRGT1JNX0FUMzJBUD15CitDT05GSUdfQ1BVX0FUMzJBUDcwMFg9eQorQ09ORklHX0NQVV9BVDMyQVA3MDAwPXkKKyMgQ09ORklHX0JPQVJEX0FUU1RLMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9BVE5HVzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CT0FSRF9IQU1NRVJIRUFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPQVJEX0ZBVlJfMzIgaXMgbm90IHNldAorIyBDT05GSUdfQk9BUkRfTUlNQzIwMCBpcyBub3Qgc2V0CitDT05GSUdfQk9BUkRfTUVSSVNDPXkKK0NPTkZJR19MT0FERVJfVV9CT09UPXkKKworIworIyBBdG1lbCBBVlIzMiBBUCBvcHRpb25zCisjCitDT05GSUdfQVA3MDBYXzMyX0JJVF9TTUM9eQorIyBDT05GSUdfQVA3MDBYXzE2X0JJVF9TTUMgaXMgbm90IHNldAorIyBDT05GSUdfQVA3MDBYXzhfQklUX1NNQyBpcyBub3Qgc2V0CitDT05GSUdfTE9BRF9BRERSRVNTPTB4MTAwMDAwMDAKK0NPTkZJR19FTlRSWV9BRERSRVNTPTB4OTAwMDAwMDAKK0NPTkZJR19QSFlTX09GRlNFVD0weDEwMDAwMDAwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX1FVSUNLTElTVD15CisjIENPTkZJR19IQVZFX0FSQ0hfQk9PVE1FTV9OT0RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFWRV9NRU1PUllfUFJFU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORUVEX05PREVfTUVNTUFQX1NJWkUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0VOQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorIyBDT05GSUdfT1dORVJTSElQX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05NSV9ERUJVR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorQ09ORklHX1NDSEVEX0hSVElDSz15CitDT05GSUdfQ01ETElORT0iIgorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CisKKyMKKyMgQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nCisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj15CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9eQorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTVJPVVRFPXkKK0NPTkZJR19JUF9QSU1TTV9WMT15CisjIENPTkZJR19JUF9QSU1TTV9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD15CitDT05GSUdfSU5FVF9FU1A9eQorQ09ORklHX0lORVRfSVBDT01QPXkKK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPXkKK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CitDT05GSUdfQ0FOPXkKK0NPTkZJR19DQU5fUkFXPXkKK0NPTkZJR19DQU5fQkNNPXkKKworIworIyBDQU4gRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0NBTl9WQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9ERUJVR19ERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0FCU0VOVD15CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQkxPQ0syTVREPXkKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKK0NPTkZJR19BVE1FTF9QV009eQorIyBDT05GSUdfQVRNRUxfVENMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorQ09ORklHX0FUTUVMX1NTQz15CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNCPXkKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CitDT05GSUdfSU5QVVRfVUlOUFVUPXkKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKKyMgQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKK0NPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9BVE1FTD15CitDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9BVE1FTF9QREM9eQorIyBDT05GSUdfU0VSSUFMX0FUTUVMX1RUWUFUIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0dQSU89eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9BVE1FTD15CisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKK0NPTkZJR19TUElfU1BJREVWPXkKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CitDT05GSUdfR1BJT19TWVNGUz15CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorQ09ORklHX1dBVENIRE9HPXkKKyMgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19BVDMyQVA3MDBYX1dEVCBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQVRNRUw9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKKyMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX1VTQl9TVVBQT1JUPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgSG9zdCBvciBHYWRnZXQgc3VwcG9ydCB0byBzZWUgSW52ZW50cmEgb3B0aW9ucworIworCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfQVRNRUxNQ0k9eQorQ09ORklHX01NQ19BVE1FTE1DSV9ETUE9eQorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCitDT05GSUdfTEVEU19BVE1FTF9QV009eQorIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworIyBDT05GSUdfTEVEU19UUklHR0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1BDRjg1NjM9eQorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX000MVQ5NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTMwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM5MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9BVDMyQVA3MDBYIGlzIG5vdCBzZXQKK0NPTkZJR19ETUFERVZJQ0VTPXkKKworIworIyBETUEgRGV2aWNlcworIworQ09ORklHX0RXX0RNQUM9eQorQ09ORklHX0RNQV9FTkdJTkU9eQorCisjCisjIERNQSBDbGllbnRzCisjCisjIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAorQ09ORklHX1VJTz15CisjIENPTkZJR19VSU9fUERSViBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fUERSVl9HRU5JUlEgaXMgbm90IHNldAorIyBDT05GSUdfVUlPX1NNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fU0VSQ09TMyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GVVNFX0ZTPXkKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz15CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKK0NPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWT15CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRD15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPXkKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT15CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfR0VORVJJQ19BTExPQ0FUT1I9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhOGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTAsMCArMSBAQAorLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggMjY3MzU0My4uMDE1YmM3NSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTIwLDE1ICsyMCw0IEBACiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAotI2RlZmluZSBIQVJESVJRX0JJVFMJMTIKLQotLyoKLSAqIFRoZSBoYXJkaXJxIG1hc2sgaGFzIHRvIGJlIGxhcmdlIGVub3VnaCB0byBoYXZlCi0gKiBzcGFjZSBmb3IgcG90ZW50aWFsbHkgYWxsIElSUSBzb3VyY2VzIGluIHRoZSBzeXN0ZW0KLSAqIG5lc3Rpbmcgb24gYSBzaW5nbGUgQ1BVOgotICovCi0jaWYgKDEgPDwgSEFSRElSUV9CSVRTKSA8IE5SX0lSUVMKLSMgZXJyb3IgSEFSRElSUV9CSVRTIGlzIHRvbyBsb3chCi0jZW5kaWYKLQogI2VuZGlmIC8qIF9fQVNNX0FWUjMyX0hBUkRJUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDQzYWU1NTUuLjFiYmUxZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKIAotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJCXVuc2lnbmVkIGxvbmcgdW51c2VkLAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwppbmRleCAzZmJmZDFlLi43Y2M2NTM3IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgPG1hY2gvcG9ydG11eC5oPgogI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgogCisjaW5jbHVkZSA8c291bmQvYXRtZWwtYWJkYWMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hdG1lbC1hYzk3Yy5oPgorCiAjaW5jbHVkZSA8dmlkZW8vYXRtZWxfbGNkYy5oPgogCiAjaW5jbHVkZSAiY2xvY2suaCIKQEAgLTk2Myw1NiArOTY2LDY4IEBACiBERUZJTkVfREVWX0RBVEEoYXRtZWxfdXNhcnQsIDMpOwogREVWX0NMSyh1c2FydCwgYXRtZWxfdXNhcnQzLCBwYmEsIDYpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MF9waW5zKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0MF9waW5zKGludCBmbGFncykKIHsKIAl1MzIgcGluX21hc2sgPSAoMSA8PCA4KSB8ICgxIDw8IDkpOyAvKiBSWEQgJiBUWEQgKi8KKwlpZiAoZmxhZ3MgJiBBVE1FTF9VU0FSVF9SVFMpCXBpbl9tYXNrIHw9ICgxIDw8IDYpOworCWlmIChmbGFncyAmIEFUTUVMX1VTQVJUX0NUUykJcGluX21hc2sgfD0gKDEgPDwgNyk7CisJaWYgKGZsYWdzICYgQVRNRUxfVVNBUlRfQ0xLKQlwaW5fbWFzayB8PSAoMSA8PCAxMCk7CiAKIAlzZWxlY3RfcGVyaXBoZXJhbChQSU9BLCBwaW5fbWFzaywgUEVSSVBIX0IsIEFUMzJfR1BJT0ZfUFVMTFVQKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDFfcGlucyh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ3VyZV91c2FydDFfcGlucyhpbnQgZmxhZ3MpCiB7CiAJdTMyIHBpbl9tYXNrID0gKDEgPDwgMTcpIHwgKDEgPDwgMTgpOyAvKiBSWEQgJiBUWEQgKi8KKwlpZiAoZmxhZ3MgJiBBVE1FTF9VU0FSVF9SVFMpCXBpbl9tYXNrIHw9ICgxIDw8IDE5KTsKKwlpZiAoZmxhZ3MgJiBBVE1FTF9VU0FSVF9DVFMpCXBpbl9tYXNrIHw9ICgxIDw8IDIwKTsKKwlpZiAoZmxhZ3MgJiBBVE1FTF9VU0FSVF9DTEspCXBpbl9tYXNrIHw9ICgxIDw8IDE2KTsKIAogCXNlbGVjdF9wZXJpcGhlcmFsKFBJT0EsIHBpbl9tYXNrLCBQRVJJUEhfQSwgQVQzMl9HUElPRl9QVUxMVVApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0Ml9waW5zKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX3VzYXJ0Ml9waW5zKGludCBmbGFncykKIHsKIAl1MzIgcGluX21hc2sgPSAoMSA8PCAyNikgfCAoMSA8PCAyNyk7IC8qIFJYRCAmIFRYRCAqLworCWlmIChmbGFncyAmIEFUTUVMX1VTQVJUX1JUUykJcGluX21hc2sgfD0gKDEgPDwgMzApOworCWlmIChmbGFncyAmIEFUTUVMX1VTQVJUX0NUUykJcGluX21hc2sgfD0gKDEgPDwgMjkpOworCWlmIChmbGFncyAmIEFUTUVMX1VTQVJUX0NMSykJcGluX21hc2sgfD0gKDEgPDwgMjgpOwogCiAJc2VsZWN0X3BlcmlwaGVyYWwoUElPQiwgcGluX21hc2ssIFBFUklQSF9CLCBBVDMyX0dQSU9GX1BVTExVUCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQzX3BpbnModm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQzX3BpbnMoaW50IGZsYWdzKQogewogCXUzMiBwaW5fbWFzayA9ICgxIDw8IDE4KSB8ICgxIDw8IDE3KTsgLyogUlhEICYgVFhEICovCisJaWYgKGZsYWdzICYgQVRNRUxfVVNBUlRfUlRTKQlwaW5fbWFzayB8PSAoMSA8PCAxNik7CisJaWYgKGZsYWdzICYgQVRNRUxfVVNBUlRfQ1RTKQlwaW5fbWFzayB8PSAoMSA8PCAxNSk7CisJaWYgKGZsYWdzICYgQVRNRUxfVVNBUlRfQ0xLKQlwaW5fbWFzayB8PSAoMSA8PCAxOSk7CiAKIAlzZWxlY3RfcGVyaXBoZXJhbChQSU9CLCBwaW5fbWFzaywgUEVSSVBIX0IsIEFUMzJfR1BJT0ZfUFVMTFVQKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdGRhdGEgYXQzMl91c2FydHNbNF07CiAKLXZvaWQgX19pbml0IGF0MzJfbWFwX3VzYXJ0KHVuc2lnbmVkIGludCBod19pZCwgdW5zaWduZWQgaW50IGxpbmUpCit2b2lkIF9faW5pdCBhdDMyX21hcF91c2FydCh1bnNpZ25lZCBpbnQgaHdfaWQsIHVuc2lnbmVkIGludCBsaW5lLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAogCXN3aXRjaCAoaHdfaWQpIHsKIAljYXNlIDA6CiAJCXBkZXYgPSAmYXRtZWxfdXNhcnQwX2RldmljZTsKLQkJY29uZmlndXJlX3VzYXJ0MF9waW5zKCk7CisJCWNvbmZpZ3VyZV91c2FydDBfcGlucyhmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgMToKIAkJcGRldiA9ICZhdG1lbF91c2FydDFfZGV2aWNlOwotCQljb25maWd1cmVfdXNhcnQxX3BpbnMoKTsKKwkJY29uZmlndXJlX3VzYXJ0MV9waW5zKGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgogCQlwZGV2ID0gJmF0bWVsX3VzYXJ0Ml9kZXZpY2U7Ci0JCWNvbmZpZ3VyZV91c2FydDJfcGlucygpOworCQljb25maWd1cmVfdXNhcnQyX3BpbnMoZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIDM6CiAJCXBkZXYgPSAmYXRtZWxfdXNhcnQzX2RldmljZTsKLQkJY29uZmlndXJlX3VzYXJ0M19waW5zKCk7CisJCWNvbmZpZ3VyZV91c2FydDNfcGlucyhmbGFncyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybjsKQEAgLTE3NTMsNyArMTc2OCw3IEBACiAJaWYgKHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBkYXRhLCBzaXplb2YodXNiYV9kYXRhKSkpCiAJCWdvdG8gb3V0X2ZyZWVfcGRldjsKIAotCWlmIChkYXRhLT52YnVzX3BpbiA+PSAwKQorCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnZidXNfcGluKSkKIAkJYXQzMl9zZWxlY3RfZ3BpbyhkYXRhLT52YnVzX3BpbiwgMCk7CiAKIAl1c2JhMF9wY2xrLmRldiA9ICZwZGV2LT5kZXY7CkBAIC0xOTgwLDExICsxOTk1LDE0IEBACiB9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQKLWF0MzJfYWRkX2RldmljZV9hYzk3Yyh1bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKQorYXQzMl9hZGRfZGV2aWNlX2FjOTdjKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmRhdGEsCisJCSAgICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhIF9kYXRhOwotCXUzMiBwaW5fbWFzazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlCQkqcnhfZHdzOworCXN0cnVjdCBkd19kbWFfc2xhdmUJCSp0eF9kd3M7CisJc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEJX2RhdGE7CisJdTMyCQkJCXBpbl9tYXNrOwogCiAJaWYgKGlkICE9IDApCiAJCXJldHVybiBOVUxMOwpAQCAtMTk5NSwzNyArMjAxMyw1MiBAQAogCiAJaWYgKHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIGF0bWVsX2FjOTdjMF9yZXNvdXJjZSwKIAkJCQlBUlJBWV9TSVpFKGF0bWVsX2FjOTdjMF9yZXNvdXJjZSkpKQotCQlnb3RvIGZhaWw7CisJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOwogCiAJaWYgKCFkYXRhKSB7CiAJCWRhdGEgPSAmX2RhdGE7CiAJCW1lbXNldChkYXRhLCAwLCBzaXplb2Yoc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEpKTsKLQkJZGF0YS0+cmVzZXRfcGluID0gR1BJT19QSU5fTk9ORTsKKwkJZGF0YS0+cmVzZXRfcGluID0gLUVOT0RFVjsKIAl9CiAKLQlkYXRhLT5kbWFfcnhfcGVyaXBoX2lkID0gMzsKLQlkYXRhLT5kbWFfdHhfcGVyaXBoX2lkID0gNDsKLQlkYXRhLT5kbWFfY29udHJvbGxlcl9pZCA9IDA7CisJcnhfZHdzID0gJmRhdGEtPnJ4X2R3czsKKwl0eF9kd3MgPSAmZGF0YS0+dHhfZHdzOworCisJLyogQ2hlY2sgaWYgRE1BIHNsYXZlIGludGVyZmFjZSBmb3IgY2FwdHVyZSBzaG91bGQgYmUgY29uZmlndXJlZC4gKi8KKwlpZiAoZmxhZ3MgJiBBQzk3Q19DQVBUVVJFKSB7CisJCXJ4X2R3cy0+ZG1hX2RldiA9ICZkd19kbWFjMF9kZXZpY2UuZGV2OworCQlyeF9kd3MtPnJlZ193aWR0aCA9IERXX0RNQV9TTEFWRV9XSURUSF8xNkJJVDsKKwkJcnhfZHdzLT5jZmdfaGkgPSBEV0NfQ0ZHSF9TUkNfUEVSKDMpOworCQlyeF9kd3MtPmNmZ19sbyAmPSB+KERXQ19DRkdMX0hTX0RTVF9QT0wgfCBEV0NfQ0ZHTF9IU19TUkNfUE9MKTsKKwl9CisKKwkvKiBDaGVjayBpZiBETUEgc2xhdmUgaW50ZXJmYWNlIGZvciBwbGF5YmFjayBzaG91bGQgYmUgY29uZmlndXJlZC4gKi8KKwlpZiAoZmxhZ3MgJiBBQzk3Q19QTEFZQkFDSykgeworCQl0eF9kd3MtPmRtYV9kZXYgPSAmZHdfZG1hYzBfZGV2aWNlLmRldjsKKwkJdHhfZHdzLT5yZWdfd2lkdGggPSBEV19ETUFfU0xBVkVfV0lEVEhfMTZCSVQ7CisJCXR4X2R3cy0+Y2ZnX2hpID0gRFdDX0NGR0hfRFNUX1BFUig0KTsKKwkJdHhfZHdzLT5jZmdfbG8gJj0gfihEV0NfQ0ZHTF9IU19EU1RfUE9MIHwgRFdDX0NGR0xfSFNfU1JDX1BPTCk7CisJfQogCiAJaWYgKHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBkYXRhLAogCQkJCXNpemVvZihzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSkpKQotCQlnb3RvIGZhaWw7CisJCWdvdG8gb3V0X2ZyZWVfcmVzb3VyY2VzOwogCi0JcGluX21hc2sgID0gKDEgPDwgMjApIHwgKDEgPDwgMjEpOwkvKiBTRE8gJiBTWU5DICovCi0JcGluX21hc2sgfD0gKDEgPDwgMjIpIHwgKDEgPDwgMjMpOwkvKiBTQ0xLICYgU0RJICovCisJLyogU0RPIHwgU1lOQyB8IFNDTEsgfCBTREkgKi8KKwlwaW5fbWFzayA9ICgxIDw8IDIwKSB8ICgxIDw8IDIxKSB8ICgxIDw8IDIyKSB8ICgxIDw8IDIzKTsKIAogCXNlbGVjdF9wZXJpcGhlcmFsKFBJT0IsIHBpbl9tYXNrLCBQRVJJUEhfQiwgMCk7CiAKLQkvKiBUT0RPOiBncGlvX2lzX3ZhbGlkKGRhdGEtPnJlc2V0X3Bpbikgd2l0aCBrZXJuZWwgMi42LjI2LiAqLwotCWlmIChkYXRhLT5yZXNldF9waW4gIT0gR1BJT19QSU5fTk9ORSkKLQkJYXQzMl9zZWxlY3RfZ3BpbyhkYXRhLT5yZXNldF9waW4sIDApOworCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPnJlc2V0X3BpbikpCisJCWF0MzJfc2VsZWN0X2dwaW8oZGF0YS0+cmVzZXRfcGluLCBBVDMyX0dQSU9GX09VVFBVVAorCQkJCXwgQVQzMl9HUElPRl9ISUdIKTsKIAogCWF0bWVsX2FjOTdjMF9wY2xrLmRldiA9ICZwZGV2LT5kZXY7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwogCXJldHVybiBwZGV2OwogCi1mYWlsOgorb3V0X2ZyZWVfcmVzb3VyY2VzOgogCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yMDUzLDIxICsyMDg2LDM0IEBACiAJLmluZGV4CQk9IDYsCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfX2luaXQgYXQzMl9hZGRfZGV2aWNlX2FiZGFjKHVuc2lnbmVkIGludCBpZCkKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9faW5pdAorYXQzMl9hZGRfZGV2aWNlX2FiZGFjKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IGF0bWVsX2FiZGFjX3BkYXRhICpkYXRhKQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0JdTMyIHBpbl9tYXNrOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CisJc3RydWN0IGR3X2RtYV9zbGF2ZQkqZHdzOworCXUzMgkJCXBpbl9tYXNrOwogCi0JaWYgKGlkICE9IDApCisJaWYgKGlkICE9IDAgfHwgIWRhdGEpCiAJCXJldHVybiBOVUxMOwogCi0JcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiYWJkYWMiLCBpZCk7CisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiYXRtZWxfYWJkYWMiLCBpZCk7CiAJaWYgKCFwZGV2KQogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCBhYmRhYzBfcmVzb3VyY2UsCiAJCQkJQVJSQVlfU0laRShhYmRhYzBfcmVzb3VyY2UpKSkKLQkJZ290byBlcnJfYWRkX3Jlc291cmNlczsKKwkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CisKKwlkd3MgPSAmZGF0YS0+ZHdzOworCisJZHdzLT5kbWFfZGV2ID0gJmR3X2RtYWMwX2RldmljZS5kZXY7CisJZHdzLT5yZWdfd2lkdGggPSBEV19ETUFfU0xBVkVfV0lEVEhfMzJCSVQ7CisJZHdzLT5jZmdfaGkgPSBEV0NfQ0ZHSF9EU1RfUEVSKDIpOworCWR3cy0+Y2ZnX2xvICY9IH4oRFdDX0NGR0xfSFNfRFNUX1BPTCB8IERXQ19DRkdMX0hTX1NSQ19QT0wpOworCisJaWYgKHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBkYXRhLAorCQkJCXNpemVvZihzdHJ1Y3QgYXRtZWxfYWJkYWNfcGRhdGEpKSkKKwkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CiAKIAlwaW5fbWFzayAgPSAoMSA8PCAyMCkgfCAoMSA8PCAyMik7CS8qIERBVEExICYgREFUQU4xICovCiAJcGluX21hc2sgfD0gKDEgPDwgMjEpIHwgKDEgPDwgMjMpOwkvKiBEQVRBMCAmIERBVEFOMCAqLwpAQCAtMjA4MCw3ICsyMTI2LDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwogCXJldHVybiBwZGV2OwogCi1lcnJfYWRkX3Jlc291cmNlczoKK291dF9mcmVlX3Jlc291cmNlczoKIAlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYXQzMmFwNzAweC5oIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvYXQzMmFwNzAweC5oCmluZGV4IDVjNGM5NzEuLmI5MjIyYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2F0MzJhcDcwMHguaAorKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9hdDMyYXA3MDB4LmgKQEAgLTE3MSwyNSArMTcxLDQ5IEBACiAJCUFUTUVMX0xDREMoUEUsIERBVEEyMCkgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBMjEpIHwJXAogCQlBVE1FTF9MQ0RDKFBELCBEQVRBMjIpIHwgQVRNRUxfTENEQyhQRCwgREFUQTIzKSkKIAotI2RlZmluZSBBVE1FTF9MQ0RDX1BSSV8xNUJfREFUQSAoCQkJCQlcCi0JCUFUTUVMX0xDREMoUEMsIERBVEEwKSAgfCBBVE1FTF9MQ0RDKFBDLCBEQVRBMSkgIHwJXAorI2RlZmluZSBBVE1FTF9MQ0RDX1BSSV8xOEJfREFUQSAoCQkJCQlcCiAJCUFUTUVMX0xDREMoUEMsIERBVEEyKSAgfCBBVE1FTF9MQ0RDKFBDLCBEQVRBMykgIHwJXAogCQlBVE1FTF9MQ0RDKFBDLCBEQVRBNCkgIHwgQVRNRUxfTENEQyhQQywgREFUQTUpICB8CVwKLQkJQVRNRUxfTENEQyhQRCwgREFUQTgpICB8IEFUTUVMX0xDREMoUEQsIERBVEE5KSAgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEE2KSAgfCBBVE1FTF9MQ0RDKFBELCBEQVRBNykgIHwJXAogCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTApIHwgQVRNRUxfTENEQyhQRCwgREFUQTExKSB8CVwKLQkJQVRNRUxfTENEQyhQRCwgREFUQTEyKSB8IEFUTUVMX0xDREMoUEQsIERBVEExNikgfAlcCi0JCUFUTUVMX0xDREMoUEQsIERBVEExNykgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMTgpIHwJXAotCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTkpIHwgQVRNRUxfTENEQyhQRCwgREFUQTIwKSkKKwkJQVRNRUxfTENEQyhQRCwgREFUQTEyKSB8IEFUTUVMX0xDREMoUEQsIERBVEExMykgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEExNCkgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMTUpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTgpIHwgQVRNRUxfTENEQyhQRCwgREFUQTE5KSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTIwKSB8IEFUTUVMX0xDREMoUEQsIERBVEEyMSkgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEEyMikgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMjMpKQogCi0jZGVmaW5lIEFUTUVMX0xDRENfQUxUXzE1Ql9EQVRBCSgJCQkJCVwKLQkJQVRNRUxfTENEQyhQRSwgREFUQTApICB8IEFUTUVMX0xDREMoUEUsIERBVEExKSAgfAlcCisjZGVmaW5lIEFUTUVMX0xDRENfQUxUXzE4Ql9EQVRBCSgJCQkJCVwKIAkJQVRNRUxfTENEQyhQRSwgREFUQTIpICB8IEFUTUVMX0xDREMoUEUsIERBVEEzKSAgfAlcCiAJCUFUTUVMX0xDREMoUEUsIERBVEE0KSAgfCBBVE1FTF9MQ0RDKFBDLCBEQVRBNSkgIHwJXAotCQlBVE1FTF9MQ0RDKFBFLCBEQVRBOCkgIHwgQVRNRUxfTENEQyhQRSwgREFUQTkpICB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTYpICB8IEFUTUVMX0xDREMoUEQsIERBVEE3KSAgfAlcCiAJCUFUTUVMX0xDREMoUEUsIERBVEExMCkgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBMTEpIHwJXAotCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMTIpIHwgQVRNRUxfTENEQyhQRSwgREFUQTE2KSB8CVwKLQkJQVRNRUxfTENEQyhQRSwgREFUQTE3KSB8IEFUTUVMX0xDREMoUEUsIERBVEExOCkgfAlcCi0JCUFUTUVMX0xDREMoUEUsIERBVEExOSkgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBMjApKQorCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMTIpIHwgQVRNRUxfTENEQyhQRCwgREFUQTEzKSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTE0KSB8IEFUTUVMX0xDREMoUEQsIERBVEExNSkgfAlcCisJCUFUTUVMX0xDREMoUEUsIERBVEExOCkgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBMTkpIHwJXAorCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMjApIHwgQVRNRUxfTENEQyhQRSwgREFUQTIxKSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTIyKSB8IEFUTUVMX0xDREMoUEQsIERBVEEyMykpCisKKyNkZWZpbmUgQVRNRUxfTENEQ19QUklfMTVCX0RBVEEgKAkJCQkJXAorCQlBVE1FTF9MQ0RDKFBDLCBEQVRBMykgIHwgQVRNRUxfTENEQyhQQywgREFUQTQpICB8CVwKKwkJQVRNRUxfTENEQyhQQywgREFUQTUpICB8IEFUTUVMX0xDREMoUEQsIERBVEE2KSAgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEE3KSAgfAkJCQlcCisJCUFUTUVMX0xDREMoUEQsIERBVEExMSkgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMTIpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMTMpIHwgQVRNRUxfTENEQyhQRCwgREFUQTE0KSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTE1KSB8CQkJCVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTE5KSB8IEFUTUVMX0xDREMoUEQsIERBVEEyMCkgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEEyMSkgfCBBVE1FTF9MQ0RDKFBELCBEQVRBMjIpIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBMjMpKQorCisjZGVmaW5lIEFUTUVMX0xDRENfQUxUXzE1Ql9EQVRBCSgJCQkJCVwKKwkJQVRNRUxfTENEQyhQRSwgREFUQTMpICB8IEFUTUVMX0xDREMoUEUsIERBVEE0KSAgfAlcCisJCUFUTUVMX0xDREMoUEMsIERBVEE1KSAgfCBBVE1FTF9MQ0RDKFBELCBEQVRBNikgIHwJXAorCQlBVE1FTF9MQ0RDKFBELCBEQVRBNykgIHwJCQkJXAorCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMTEpIHwgQVRNRUxfTENEQyhQRSwgREFUQTEyKSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTEzKSB8IEFUTUVMX0xDREMoUEQsIERBVEExNCkgfAlcCisJCUFUTUVMX0xDREMoUEQsIERBVEExNSkgfAkJCQlcCisJCUFUTUVMX0xDREMoUEUsIERBVEExOSkgfCBBVE1FTF9MQ0RDKFBFLCBEQVRBMjApIHwJXAorCQlBVE1FTF9MQ0RDKFBFLCBEQVRBMjEpIHwgQVRNRUxfTENEQyhQRCwgREFUQTIyKSB8CVwKKwkJQVRNRUxfTENEQyhQRCwgREFUQTIzKSkKIAogI2RlZmluZSBBVE1FTF9MQ0RDX1BSSV9DT05UUk9MICgJCQkJCVwKIAkJQVRNRUxfTENEQyhQQywgQ0MpICAgfCBBVE1FTF9MQ0RDKFBDLCBEVkFMKSB8CQlcCkBAIC0yMDcsNiArMjMxLDEwIEBACiAKICNkZWZpbmUgQVRNRUxfTENEQ19BTFRfMjRCSVQJKEFUTUVMX0xDRENfQ09OVFJPTCB8IEFUTUVMX0xDRENfQUxUXzI0Ql9EQVRBKQogCisjZGVmaW5lIEFUTUVMX0xDRENfUFJJXzE4QklUCShBVE1FTF9MQ0RDX0NPTlRST0wgfCBBVE1FTF9MQ0RDX1BSSV8xOEJfREFUQSkKKworI2RlZmluZSBBVE1FTF9MQ0RDX0FMVF8xOEJJVAkoQVRNRUxfTENEQ19DT05UUk9MIHwgQVRNRUxfTENEQ19BTFRfMThCX0RBVEEpCisKICNkZWZpbmUgQVRNRUxfTENEQ19QUklfMTVCSVQJKEFUTUVMX0xDRENfQ09OVFJPTCB8IEFUTUVMX0xDRENfUFJJXzE1Ql9EQVRBKQogCiAjZGVmaW5lIEFUTUVMX0xDRENfQUxUXzE1QklUCShBVE1FTF9MQ0RDX0NPTlRST0wgfCBBVE1FTF9MQ0RDX0FMVF8xNUJfREFUQSkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmggYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCmluZGV4IGNmZjhlODRmLi4wYjgxNjQyIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCisrKyBiL2FyY2gvYXZyMzIvbWFjaC1hdDMyYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKQEAgLTEzLDcgKzEzLDcgQEAKICAqIGluIHRoaXMgYXJyYXkgaXMgY2hpcC1kZXBlbmRlbnQuCiAgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIGF0MzJfYm9hcmRfb3NjX3JhdGVzW107Ci0gIAorCiAvKgogICogVGhpcyB1c2VkIHRvIGFkZCBlc3NlbnRpYWwgc3lzdGVtIGRldmljZXMsIGJ1dCB0aGlzIGlzIG5vdyBkb25lCiAgKiBhdXRvbWF0aWNhbGx5LiBQbGVhc2UgZG9uJ3QgdXNlIGl0IGluIG5ldyBib2FyZCBjb2RlLgpAQCAtMjYsMTIgKzI2LDE3IEBACiAjZGVmaW5lIEFUTUVMX01BWF9VQVJUCTQKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdG1lbF9kZWZhdWx0X2NvbnNvbGVfZGV2aWNlOwogCisvKiBGbGFncyBmb3Igc2VsZWN0aW5nIFVTQVJUIGV4dHJhIHBpbnMgKi8KKyNkZWZpbmUJQVRNRUxfVVNBUlRfUlRTCQkweDAxCisjZGVmaW5lCUFUTUVMX1VTQVJUX0NUUwkJMHgwMgorI2RlZmluZQlBVE1FTF9VU0FSVF9DTEsJCTB4MDMKKwogc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB7CiAJc2hvcnQJCXVzZV9kbWFfdHg7CS8qIHVzZSB0cmFuc21pdCBETUE/ICovCiAJc2hvcnQJCXVzZV9kbWFfcng7CS8qIHVzZSByZWNlaXZlIERNQT8gKi8KIAl2b2lkIF9faW9tZW0JKnJlZ3M7CQkvKiB2aXJ0dWFsIGJhc2UgYWRkcmVzcywgaWYgYW55ICovCiB9Owotdm9pZCBhdDMyX21hcF91c2FydCh1bnNpZ25lZCBpbnQgaHdfaWQsIHVuc2lnbmVkIGludCBsaW5lKTsKK3ZvaWQgYXQzMl9tYXBfdXNhcnQodW5zaWduZWQgaW50IGh3X2lkLCB1bnNpZ25lZCBpbnQgbGluZSwgaW50IGZsYWdzKTsKIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmF0MzJfYWRkX2RldmljZV91c2FydCh1bnNpZ25lZCBpbnQgaWQpOwogCiBzdHJ1Y3QgZXRoX3BsYXRmb3JtX2RhdGEgewpAQCAtODgsMTYgKzkzLDE1IEBACiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKIGF0MzJfYWRkX2RldmljZV9tY2kodW5zaWduZWQgaW50IGlkLCBzdHJ1Y3QgbWNpX3BsYXRmb3JtX2RhdGEgKmRhdGEpOwogCi1zdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSB7Ci0JdW5zaWduZWQgc2hvcnQgZG1hX3J4X3BlcmlwaF9pZDsKLQl1bnNpZ25lZCBzaG9ydCBkbWFfdHhfcGVyaXBoX2lkOwotCXVuc2lnbmVkIHNob3J0IGRtYV9jb250cm9sbGVyX2lkOwotCWludCByZXNldF9waW47Ci19Oworc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGE7CiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoKLWF0MzJfYWRkX2RldmljZV9hYzk3Yyh1bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhKTsKK2F0MzJfYWRkX2RldmljZV9hYzk3Yyh1bnNpZ25lZCBpbnQgaWQsIHN0cnVjdCBhYzk3Y19wbGF0Zm9ybV9kYXRhICpkYXRhLAorCQkgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphdDMyX2FkZF9kZXZpY2VfYWJkYWModW5zaWduZWQgaW50IGlkKTsKK3N0cnVjdCBhdG1lbF9hYmRhY19wZGF0YTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKgorYXQzMl9hZGRfZGV2aWNlX2FiZGFjKHVuc2lnbmVkIGludCBpZCwgc3RydWN0IGF0bWVsX2FiZGFjX3BkYXRhICpkYXRhKTsKKwogc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQzMl9hZGRfZGV2aWNlX3BzaWYodW5zaWduZWQgaW50IGlkKTsKIAogc3RydWN0IGNmX3BsYXRmb3JtX2RhdGEgewpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tbS9mYXVsdC5jIGIvYXJjaC9hdnIzMi9tbS9mYXVsdC5jCmluZGV4IGNlNGU0MjkuLjYyZDRhYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbW0vZmF1bHQuYworKysgYi9hcmNoL2F2cjMyL21tL2ZhdWx0LmMKQEAgLTI1MCwyMSArMjUwLDMgQEAKIAlkdW1wX2R0bGIoKTsKIAlkaWUoIkJ1cyBFcnJvciIsIHJlZ3MsIFNJR0tJTEwpOwogfQotCi0vKgotICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGN1cnJlbnRseSBub3QgcG9zc2libGUgdG8gaW1wbGVtZW50IGJlY2F1c2UKLSAqIHdlJ3JlIHVzaW5nIHNlZ21lbnRhdGlvbiB0byBlbnN1cmUgYSBmaXhlZCBtYXBwaW5nIG9mIHRoZSBrZXJuZWwKLSAqIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4KLSAqCi0gKiBJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcywgYnV0IGl0IHdvdWxkIHJlcXVpcmUgdXMgdG8KLSAqIGRpc2FibGUgc2VnbWVudGF0aW9uIGF0IHN0YXJ0dXAgYW5kIGxvYWQgdGhlIGtlcm5lbCBtYXBwaW5ncyBpbnRvCi0gKiB0aGUgVExCIGxpa2UgYW55IG90aGVyIHBhZ2VzLiBUaGVyZSB3aWxsIGJlIGxvdHMgb2YgdHJpY2tlcnkgdG8KLSAqIGF2b2lkIHJlY3Vyc2l2ZSBpbnZvY2F0aW9uIG9mIHRoZSBUTEIgbWlzcyBoYW5kbGVyLCB0aG91Z2guLi4KLSAqLwotI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKLXZvaWQga2VybmVsX21hcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKQotewotCi19Ci1FWFBPUlRfU1lNQk9MKGtlcm5lbF9tYXBfcGFnZXMpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL0tjb25maWcgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKaW5kZXggMGMxZjg2ZS4uMzY0MGNkYyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwpAQCAtNzc3LDcgKzc3Nyw3IEBACiAJZGVmYXVsdCBuIGlmIEJGNTR4CiAJZGVwZW5kcyBvbiAhQkY1MzEKIAloZWxwCi0JICBJZiBlbmFibGVkLCBjYWNoZWxpbmVfYW5saWduZWQgZGF0YSBpcyBsaW5rZWQKKwkgIElmIGVuYWJsZWQsIGNhY2hlbGluZV9hbGlnbmVkIGRhdGEgaXMgbGlua2VkCiAJICBpbnRvIEwxIGRhdGEgbWVtb3J5LiAobGVzcyBsYXRlbmN5KQogCiBjb25maWcgU1lTQ0FMTF9UQUJfTDEKQEAgLTk1Nyw3ICs5NTcsNyBAQAogCSAgbWVtb3J5IHRoZXkgZG8gbm90IG93bi4gIFRoaXMgY29tZXMgYXQgYSBwZXJmb3JtYW5jZSBwZW5hbHR5CiAJICBhbmQgaXMgcmVjb21tZW5kZWQgb25seSBmb3IgZGVidWdnaW5nLgogCi1jb21tZW50ICJBc3luY2hvbm91cyBNZW1vcnkgQ29uZmlndXJhdGlvbiIKK2NvbW1lbnQgIkFzeW5jaHJvbm91cyBNZW1vcnkgQ29uZmlndXJhdGlvbiIKIAogbWVudSAiRUJJVV9BTUdDVEwgR2xvYmFsIENvbnRyb2wiCiBjb25maWcgQ19BTUNLRU4KQEAgLTk4OSw3ICs5ODksNyBAQAogCWRlZmF1bHQgbgogCiBjaG9pY2UKLQlwcm9tcHQiRW5hYmxlIEFzeW5jaG9ub3VzIE1lbW9yeSBCYW5rcyIKKwlwcm9tcHQgIkVuYWJsZSBBc3luY2hyb25vdXMgTWVtb3J5IEJhbmtzIgogCWRlZmF1bHQgQ19BTUJFTl9BTEwKIAogY29uZmlnIENfQU1CRU4KZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2JsYWNrZmluL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMzNlMmU4OS4uZjQ5NDI3MiAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3Byb2Nlc3MuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiB9CiAKIGludAotY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAorY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKIAkgICAgdW5zaWduZWQgbG9uZyB1c3AsIHVuc2lnbmVkIGxvbmcgdG9wc3RrLAogCSAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL0tjb25maWcgYi9hcmNoL2NyaXMvS2NvbmZpZwppbmRleCAzNDYyMjQ1Li43YWRhYzM4IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvS2NvbmZpZworKysgYi9hcmNoL2NyaXMvS2NvbmZpZwpAQCAtNDM4LDcgKzQzOCw3IEBACiAJaGVscAogCSAgRW5hYmxlcyB0aGUgRE1BMSBpbnB1dCBjaGFubmVsIGZvciBzZXIwICh0dHlTMCkuCiAJICBJZiB5b3UgZG8gbm90IGVuYWJsZSBETUEsIGFuIGludGVycnVwdCBmb3IgZWFjaCBjaGFyYWN0ZXIgd2lsbCBiZQotCSAgdXNlZCB3aGVuIHJlY2VpdmVpbmcgZGF0YS4KKwkgIHVzZWQgd2hlbiByZWNlaXZpbmcgZGF0YS4KIAkgIE5vcm1hbGx5IHlvdSB3YW50IHRvIHVzZSBETUEsIHVubGVzcyB5b3UgdXNlIHRoZSBETUEgY2hhbm5lbCBmb3IKIAkgIHNvbWV0aGluZyBlbHNlLgogCkBAIC01NjUsNyArNTY1LDcgQEAKIAloZWxwCiAJICBFbmFibGVzIHRoZSBETUE3IGlucHV0IGNoYW5uZWwgZm9yIHNlcjIgKHR0eVMyKS4KIAkgIElmIHlvdSBkbyBub3QgZW5hYmxlIERNQSwgYW4gaW50ZXJydXB0IGZvciBlYWNoIGNoYXJhY3RlciB3aWxsIGJlCi0JICB1c2VkIHdoZW4gcmVjZWl2ZWluZyBkYXRhLgorCSAgdXNlZCB3aGVuIHJlY2VpdmluZyBkYXRhLgogCSAgTm9ybWFsbHkgeW91IHdhbnQgdG8gdXNlIERNQSwgdW5sZXNzIHlvdSB1c2UgdGhlIERNQSBjaGFubmVsIGZvcgogCSAgc29tZXRoaW5nIGVsc2UuCiAKQEAgLTYwNCw3ICs2MDQsNyBAQAogCWhlbHAKIAkgIEVuYWJsZXMgdGhlIERNQTMgaW5wdXQgY2hhbm5lbCBmb3Igc2VyMyAodHR5UzMpLgogCSAgSWYgeW91IGRvIG5vdCBlbmFibGUgRE1BLCBhbiBpbnRlcnJ1cHQgZm9yIGVhY2ggY2hhcmFjdGVyIHdpbGwgYmUKLQkgIHVzZWQgd2hlbiByZWNlaXZlaW5nIGRhdGEuCisJICB1c2VkIHdoZW4gcmVjZWl2aW5nIGRhdGEuCiAJICBOb3JtYWxseSB5b3Ugd2FudCB0byB1c2UgRE1BLCB1bmxlc3MgeW91IHVzZSB0aGUgRE1BIGNoYW5uZWwgZm9yCiAJICBzb21ldGhpbmcgZWxzZS4KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMKaW5kZXggNjVlZDgwMy4uNWQ3NWY3NyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2lycS5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIHsKIH0KIAotc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBjcmlzdjEwX2lycV90eXBlID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjcmlzdjEwX2lycV90eXBlID0gewogCS50eXBlbmFtZSA9ICAgICJDUklTdjEwIiwKIAkuc3RhcnR1cCA9ICAgICBzdGFydHVwX2NyaXN2MTBfaXJxLAogCS5zaHV0ZG93biA9ICAgIHNodXRkb3duX2NyaXN2MTBfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3Byb2Nlc3MuYwppbmRleCBiZDliM2ZmLi5jNGM2OWNmIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAgKi8KIGFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpOwogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvS2NvbmZpZyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9LY29uZmlnCmluZGV4IDAwNWVkMmIuLjIxYmJkOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9LY29uZmlnCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9LY29uZmlnCkBAIC0yOCw3ICsyOCw3IEBACiAJaGVscAogCSAgU2VsZWN0IHRoaXMgaWYgeW91IHdhbnQgb25lIEV0aGVybmV0IExFRCBncm91cC4gVGhpcyBMRUQgZ3JvdXAKIAkgIGNhbiBiZSB1c2VkIGZvciBvbmUgb3IgbW9yZSBFdGhlcm5ldCBpbnRlcmZhY2VzLiBIb3dldmVyLCBpdCBpcwotCSAgcmVjb21lbmRlZCB0aGF0IGVhY2ggRXRoZXJuZXQgaW50ZXJmYWNlIHVzZSBhIGRlZGljYXRlZCBMRUQgZ3JvdXAuCisJICByZWNvbW1lbmRlZCB0aGF0IGVhY2ggRXRoZXJuZXQgaW50ZXJmYWNlIHVzZSBhIGRlZGljYXRlZCBMRUQgZ3JvdXAuCiAKIGNvbmZpZwlFVFJBWF9OQlJfTEVEX0dSUF9UV08KIAlib29sICJVc2UgdHdvIExFRCBncm91cHMiCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA1YTFiMzFjLi5lMTc2YjhiIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTIsOSArMiw5IEBACiAjIGFyY2gvY3Jpcy9hcmNoLXYzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKICMKIAotYXNmbGFncy15ICs9IC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vbWFjaC8gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCi1jY2ZsYWdzLXkgKz0gLU8yIC1JICQoc3JjdHJlZSkvaW5jbHVkZS9hc20vbWFjaC8gLUkgJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCi1sZGZsYWdzLXkgKz0gLVQgJChzcmN0cmVlKS8kKHNyYykvZGVjb21wcmVzcy5sZHMKK2FzZmxhZ3MteSArPSAtSSQoc3JjdHJlZSkvaW5jbHVkZS9hc20vbWFjaC8gLUkkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL2FyY2gKK2NjZmxhZ3MteSArPSAtTzIgLUkkKHNyY3RyZWUpL2luY2x1ZGUvYXNtL21hY2gvIC1JJChzcmN0cmVlKS9pbmNsdWRlL2FzbS9hcmNoCitsZGZsYWdzLXkgKz0gLVQkKHNyY3RyZWUpLyQoc3JjKS9kZWNvbXByZXNzLmxkcwogT0JKRUNUUyA9ICQob2JqKS9oZWFkLm8gJChvYmopL21pc2MubwogT0JKQ09QWUZMQUdTID0gLU8gYmluYXJ5IC0tcmVtb3ZlLXNlY3Rpb249LmJzcwogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9LY29uZmlnIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvS2NvbmZpZwppbmRleCA3YTY0ZmNlLi5iOWUzMjhlIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9LY29uZmlnCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL0tjb25maWcKQEAgLTM0Miw3ICszNDIsNyBAQAogCWhlbHAKIAkgIEVuYWJsZXMgdGhlIERNQTkgaW5wdXQgY2hhbm5lbCBmb3Igc2VyNCAodHR5UzQpLgogCSAgSWYgeW91IGRvIG5vdCBlbmFibGUgRE1BLCBhbiBpbnRlcnJ1cHQgZm9yIGVhY2ggY2hhcmFjdGVyIHdpbGwgYmUKLQkgIHVzZWQgd2hlbiByZWNlaXZlaW5nIGRhdGEuCisJICB1c2VkIHdoZW4gcmVjZWl2aW5nIGRhdGEuCiAJICBOb3JtYWxseSB5b3Ugd2FudCB0byB1c2UgRE1BLCB1bmxlc3MgeW91IHVzZSB0aGUgRE1BIGNoYW5uZWwgZm9yCiAJICBzb21ldGhpbmcgZWxzZS4KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKaW5kZXggMjk1MTMxZi4uZGYzOTI1YyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jCkBAIC0zMzMsNyArMzMzLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGNyaXN2MzJfaXJxX3R5cGUgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNyaXN2MzJfaXJxX3R5cGUgPSB7CiAJLnR5cGVuYW1lID0gICAgIkNSSVN2MzIiLAogCS5zdGFydHVwID0gICAgIHN0YXJ0dXBfY3Jpc3YzMl9pcnEsCiAJLnNodXRkb3duID0gICAgc2h1dGRvd25fY3Jpc3YzMl9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGNlZDViNzIuLjEyMGU3ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgcmV0X2Zyb21fZm9yayh2b2lkKTsKIAogaW50Ci1jb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAorY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCmluZGV4IGY1OWE5NzMuLmQyYTNmZjggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYwpAQCAtOTcsOSArOTcsOSBAQAogCVNVUFBfQkFOS19TRUwoMik7CiAJU1VQUF9SRUdfV1IoUldfTU1fVExCX1BHRCwgcGdkKTsKIAotCWNwdV9zZXQoMCwgY3B1X29ubGluZV9tYXApOworCXNldF9jcHVfb25saW5lKDAsIHRydWUpOwogCWNwdV9zZXQoMCwgcGh5c19jcHVfcHJlc2VudF9tYXApOwotCWNwdV9zZXQoMCwgY3B1X3Bvc3NpYmxlX21hcCk7CisJc2V0X2NwdV9wb3NzaWJsZSgwLCB0cnVlKTsKIH0KIAogdm9pZCBfX2luaXQgc21wX2NwdXNfZG9uZSh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCkBAIC0yMzEsNyArMjMxLDcgQEAKIAljcHVtYXNrX3QgY3B1X21hc2s7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGxic3RhdGVfbG9jaywgZmxhZ3MpOwotCWNwdV9tYXNrID0gKG1tID09IEZMVVNIX0FMTCA/IENQVV9NQVNLX0FMTCA6IG1tLT5jcHVfdm1fbWFzayk7CisJY3B1X21hc2sgPSAobW0gPT0gRkxVU0hfQUxMID8gY3B1X2FsbF9tYXNrIDogKm1tX2NwdW1hc2sobW0pKTsKIAljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7CiAJZmx1c2hfbW0gPSBtbTsKIAlmbHVzaF92bWEgPSB2bWE7CkBAIC0yNTEsOCArMjUxLDggQEAKIAlfX2ZsdXNoX3RsYl9tbShtbSk7CiAJZmx1c2hfdGxiX2NvbW1vbihtbSwgRkxVU0hfQUxMLCAwKTsKIAkvKiBObyBtb3JlIG1hcHBpbmdzIGluIG90aGVyIENQVXMgKi8KLQljcHVzX2NsZWFyKG1tLT5jcHVfdm1fbWFzayk7Ci0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG1tLT5jcHVfdm1fbWFzayk7CisJY3B1bWFza19jbGVhcihtbV9jcHVtYXNrKG1tKSk7CisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhtbSkpOwogfQogCiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvS2NvbmZpZyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL0tjb25maWcKaW5kZXggZjZkNzQ0Ny4uNzc0ZGU4MiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvS2NvbmZpZworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9LY29uZmlnCkBAIC01OSw3ICs1OSw3IEBACiAJZGVwZW5kcyBvbiBFVFJBWF9BUkNIX1YzMgogCWRlZmF1bHQgIjAiCiAJaGVscAotCSAgU0RSQU0gY29uZmlndXJhdGlvbiBmb3IgZ3JvdXAgMS4gVGhlIGRlZnVsdCB2YWx1ZSBpcyAwCisJICBTRFJBTSBjb25maWd1cmF0aW9uIGZvciBncm91cCAxLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwCiAJICBiZWNhdXNlIGdyb3VwIDEgaXMgbm90IHVzZWQgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwKIAkgIGRlc2NyaWJlZCBpbiB0aGUgaGVscCBmb3IgU0RSQU1fR1JQMF9DT05GSUcuCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS90bGIuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS90bGIuYwppbmRleCA1NWFkZTM2Li42Nzc5YmNiIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvbW0vdGxiLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21tL3RsYi5jCkBAIC0xODUsNyArMTg1LDcgQEAKIAkJLyogTWFrZSBzdXJlIHRoZXJlIGlzIGEgTU1VIGNvbnRleHQuICovCiAJCXNwaW5fbG9jaygmbW11X2NvbnRleHRfbG9jayk7CiAJCWdldF9tbXVfY29udGV4dChuZXh0KTsKLQkJY3B1X3NldChjcHUsIG5leHQtPmNwdV92bV9tYXNrKTsKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgbW1fY3B1bWFzayhuZXh0KSk7CiAJCXNwaW5fdW5sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9zcGlubG9jay5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9zcGlubG9jay5oCmluZGV4IDBkNTcwOWIuLjEyOTc1NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvc3BpbmxvY2suaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL3NwaW5sb2NrLmgKQEAgLTEyMSw2ICsxMjEsOCBAQAogCXJldHVybiAxOwogfQogCisjZGVmaW5lIF9yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfcmF3X3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBfcmF3X3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9yYXdfd3JpdGVfbG9jayhsb2NrKQogCiAjZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9mdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDYwODE2ZTguLjRkZjBiMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdF90YXNrLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9jcmlzL2tlcm5lbC9zZXR1cC5jCmluZGV4IDA0ZDQ4ZGQuLmI3MTJmNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2NyaXMva2VybmVsL3NldHVwLmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCiBzdGF0aWMgdm9pZCAqY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogewotCXJldHVybiAqcG9zIDwgTlJfQ1BVUyA/ICh2b2lkICopKGludCkoKnBvcyArIDEpOiBOVUxMOworCXJldHVybiAqcG9zIDwgbnJfY3B1X2lkcyA/ICh2b2lkICopKGludCkoKnBvcyArIDEpIDogTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgKmNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL21tL2luaXQuYyBiL2FyY2gvY3Jpcy9tbS9pbml0LmMKaW5kZXggMmZkZDIxMi4uNTE0ZjQ2YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL21tL2luaXQuYworKysgYi9hcmNoL2NyaXMvbW0vaW5pdC5jCkBAIC0yNSw4ICsyNSw3IEBACiAJaW50IGNvZGVzaXplLCByZXNlcnZlZHBhZ2VzLCBkYXRhc2l6ZSwgaW5pdHNpemU7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKLQlpZighbWVtX21hcCkKLQkJQlVHKCk7CisJQlVHX09OKCFtZW1fbWFwKTsKIAogCS8qIG1heC9taW5fbG93X3BmbiB3YXMgc2V0IGJ5IHNldHVwLmMKIAkgKiBub3cgd2UganVzdCBjb3B5IGl0IHRvIHNvbWUgb3RoZXIgbmVjZXNzYXJ5IHBsYWNlcy4uLgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvZnJ2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggOTU4M2EzMy4uMGRlNTBkZiAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yMDQsNyArMjA0LDcgQEAKIC8qCiAgKiBzZXQgdXAgdGhlIGtlcm5lbCBzdGFjayBhbmQgZXhjZXB0aW9uIGZyYW1lcyBmb3IgYSBuZXcgcHJvY2VzcwogICovCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCiAJCXVuc2lnbmVkIGxvbmcgdXNwLCB1bnNpZ25lZCBsb25nIHRvcHN0aywKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYThlZjY1NC4uZTJmMzNkMCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTkxLDcgKzE5MSw3IEBACiAKIH0KIAotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdXNwLCB1bnNpZ25lZCBsb25nIHRvcHN0aywKIAkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWVyL3RwdS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdHB1LmMKaW5kZXggYWQzODNjYS4uZTdjNmU2MSAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdHB1LmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZXIvdHB1LmMKQEAgLTY3LDcgKzY3LDcgQEAKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCiB9OwogCi1jb25zdCBzdGF0aWMgaW50IF9faW5pdGRhdGEgZGl2aWRlX3JhdGVbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBkaXZpZGVfcmF0ZVtdID0gewogI2lmIENPTkZJR19IODMwMF9UUFVfQ0ggPT0gMAogCTEsNCwxNiw2NCwwLDAsMCwwLAogI2VsaWYgKENPTkZJR19IODMwMF9UUFVfQ0ggPT0gMSkgfHwgKENPTkZJR19IODMwMF9UUFVfQ0ggPT0gNSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggMTUzZTcyNy4uMjk0YTNiMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTIyLDYgKzIyLDkgQEAKIAlzZWxlY3QgSEFWRV9PUFJPRklMRQogCXNlbGVjdCBIQVZFX0tQUk9CRVMKIAlzZWxlY3QgSEFWRV9LUkVUUFJPQkVTCisJc2VsZWN0IEhBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQKKwlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRSBpZiAoIUlUQU5JVU0pCisJc2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSCiAJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCiAJc2VsZWN0IEhBVkVfS1ZNCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0sKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL2dlbmVyaWNfZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKaW5kZXggYTEwOWRiMy4uNzU2NDU0OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKQEAgLTE5Myw3ICsxOTMsNiBAQAogQ09ORklHX05SX1FVSUNLPTEKIENPTkZJR19WSVJUX1RPX0JVUz15CiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKLUNPTkZJR19NTVVfTk9USUZJRVI9eQogQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKQEAgLTQxNiw4ICs0MTUsNiBAQAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19TR0lfWFA9bQogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKLUNPTkZJR19TR0lfR1JVPW0KLSMgQ09ORklHX1NHSV9HUlVfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2VyaWFsLmMgYi9hcmNoL2lhNjQvaHAvc2ltL3NpbXNlcmlhbC5jCmluZGV4IDI0YjFhZDUuLjJiZWY1MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2VyaWFsLmMKKysrIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1zZXJpYWwuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CkBAIC04NDgsMzggKzg0OSwzNiBAQAogICogL3Byb2MgZnMgcm91dGluZXMuLi4uCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgbGluZV9pbmZvKGNoYXIgKmJ1Ziwgc3RydWN0IHNlcmlhbF9zdGF0ZSAqc3RhdGUpCitzdGF0aWMgaW5saW5lIHZvaWQgbGluZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHNlcmlhbF9zdGF0ZSAqc3RhdGUpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQ6IHVhcnQ6JXMgcG9ydDolbFggaXJxOiVkXG4iLAorCXNlcV9wcmludGYobSwgIiVkOiB1YXJ0OiVzIHBvcnQ6JWxYIGlycTolZFxuIiwKIAkJICAgICAgIHN0YXRlLT5saW5lLCB1YXJ0X2NvbmZpZ1tzdGF0ZS0+dHlwZV0ubmFtZSwKIAkJICAgICAgIHN0YXRlLT5wb3J0LCBzdGF0ZS0+aXJxKTsKIH0KIAotc3RhdGljIGludCByc19yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCByc19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBpLCBsZW4gPSAwLCBsOwotCW9mZl90CWJlZ2luID0gMDsKKwlpbnQgaTsKIAotCWxlbiArPSBzcHJpbnRmKHBhZ2UsICJzaW1zZXJpbmZvOjEuMCBkcml2ZXI6JXNcbiIsIHNlcmlhbF92ZXJzaW9uKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlJfUE9SVFMgJiYgbGVuIDwgNDAwMDsgaSsrKSB7Ci0JCWwgPSBsaW5lX2luZm8ocGFnZSArIGxlbiwgJnJzX3RhYmxlW2ldKTsKLQkJbGVuICs9IGw7Ci0JCWlmIChsZW4rYmVnaW4gPiBvZmYrY291bnQpCi0JCQlnb3RvIGRvbmU7Ci0JCWlmIChsZW4rYmVnaW4gPCBvZmYpIHsKLQkJCWJlZ2luICs9IGxlbjsKLQkJCWxlbiA9IDA7Ci0JCX0KLQl9Ci0JKmVvZiA9IDE7Ci1kb25lOgotCWlmIChvZmYgPj0gbGVuK2JlZ2luKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgKGJlZ2luLW9mZik7Ci0JcmV0dXJuICgoY291bnQgPCBiZWdpbitsZW4tb2ZmKSA/IGNvdW50IDogYmVnaW4rbGVuLW9mZik7CisJc2VxX3ByaW50ZihtLCAic2ltc2VyaW5mbzoxLjAgZHJpdmVyOiVzXG4iLCBzZXJpYWxfdmVyc2lvbik7CisJZm9yIChpID0gMDsgaSA8IE5SX1BPUlRTOyBpKyspCisJCWxpbmVfaW5mbyhtLCAmcnNfdGFibGVbaV0pOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnNfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSByc19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHJzX2luaXQoKSBhbmQgZnJpZW5kcwpAQCAtOTE3LDcgKzkxNiw3IEBACiAJLnN0YXJ0ID0gcnNfc3RhcnQsCiAJLmhhbmd1cCA9IHJzX2hhbmd1cCwKIAkud2FpdF91bnRpbF9zZW50ID0gcnNfd2FpdF91bnRpbF9zZW50LAotCS5yZWFkX3Byb2MgPSByc19yZWFkX3Byb2MsCisJLnByb2NfZm9wcyA9ICZyc19wcm9jX2ZvcHMsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMGRiM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfQVNNX0lBNjRfRlRSQUNFX0gKKyNkZWZpbmUgX0FTTV9JQTY0X0ZUUkFDRV9ICisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCisjZGVmaW5lIE1DT1VOVF9JTlNOX1NJWkUgICAgICAgIDMyIC8qIHNpemVvZiBtY291bnQgY2FsbCAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHZvaWQgX21jb3VudCh1bnNpZ25lZCBsb25nIHBmcywgdW5zaWduZWQgbG9uZyByMSwgdW5zaWduZWQgbG9uZyBiMCwgdW5zaWduZWQgbG9uZyByMCk7CisjZGVmaW5lIG1jb3VudCBfbWNvdW50CisKKyNpbmNsdWRlIDxhc20va3Byb2Jlcy5oPgorLyogSW4gSUE2NCwgTUNPVU5UX0FERFIgaXMgc2V0IGluIGxpbmsgdGltZSwgc28gaXQncyBub3QgYSBjb25zdGFudCBhdCBjb21waWxlIHRpbWUgKi8KKyNkZWZpbmUgTUNPVU5UX0FERFIgKCgoc3RydWN0IGZucHRyICopbWNvdW50KS0+aXApCisjZGVmaW5lIEZUUkFDRV9BRERSICgoKHN0cnVjdCBmbnB0ciAqKWZ0cmFjZV9jYWxsZXIpLT5pcCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZ0cmFjZV9jYWxsX2FkanVzdCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJLyogc2Vjb25kIGJ1bmRsZSwgaW5zbiAyICovCisJcmV0dXJuIGFkZHIgLSAweDEyOworfQorCitzdHJ1Y3QgZHluX2FyY2hfZnRyYWNlIHsKK307CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9UUkFDRVIgKi8KKworI2VuZGlmIC8qIF9BU01fSUE2NF9GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKaW5kZXggMTQwZTQ5NS4uZDUxNGNkOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0yMCwxNiArMjAsNiBAQAogCiAjZGVmaW5lIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpCQkobG9jYWxfY3B1X2RhdGEtPnNvZnRpcnFfcGVuZGluZykKIAotI2RlZmluZSBIQVJESVJRX0JJVFMJMTQKLQotLyoKLSAqIFRoZSBoYXJkaXJxIG1hc2sgaGFzIHRvIGJlIGxhcmdlIGVub3VnaCB0byBoYXZlIHNwYWNlIGZvciBwb3RlbnRpYWxseSBhbGwgSVJRIHNvdXJjZXMKLSAqIGluIHRoZSBzeXN0ZW0gbmVzdGluZyBvbiBhIHNpbmdsZSBDUFU6Ci0gKi8KLSNpZiAoMSA8PCBIQVJESVJRX0JJVFMpIDwgTlJfSVJRUwotIyBlcnJvciBIQVJESVJRX0JJVFMgaXMgdG9vIGxvdyEKLSNlbmRpZgotCiBleHRlcm4gdm9pZCBfX2lvbWVtICppcGlfYmFzZV9hZGRyOwogCiB2b2lkIGFja19iYWRfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ludHJpbnNpY3MuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pbnRyaW5zaWNzLmgKaW5kZXggYzQ3ODMwZS4uMTExZWQ1MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ludHJpbnNpY3MuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW50cmluc2ljcy5oCkBAIC0yMDIsNyArMjAyLDExIEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaWYgZGVmaW5lZChDT05GSUdfUEFSQVZJUlQpICYmIGRlZmluZWQoX19LRVJORUxfXykKLSNkZWZpbmUgSUE2NF9JTlRSSU5TSUNfQVBJKG5hbWUpCXB2X2NwdV9vcHMubmFtZQorI2lmZGVmIEFTTV9TVVBQT1JURUQKKyMgZGVmaW5lIElBNjRfSU5UUklOU0lDX0FQSShuYW1lKQlwYXJhdmlydF8gIyMgbmFtZQorI2Vsc2UKKyMgZGVmaW5lIElBNjRfSU5UUklOU0lDX0FQSShuYW1lKQlwdl9jcHVfb3BzLm5hbWUKKyNlbmRpZgogI2RlZmluZSBJQTY0X0lOVFJJTlNJQ19NQUNSTyhuYW1lKQlwYXJhdmlydF8gIyMgbmFtZQogI2Vsc2UKICNkZWZpbmUgSUE2NF9JTlRSSU5TSUNfQVBJKG5hbWUpCWlhNjRfbmF0aXZlXyAjIyBuYW1lCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCmluZGV4IDA0MGJjODcuLjdmMmE0NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCkBAIC04Nyw3ICs4Nyw3IEBACiAJLyogcmUtY2hlY2ssIG5vdyB0aGF0IHdlJ3ZlIGdvdCB0aGUgbG9jazogKi8KIAljb250ZXh0ID0gbW0tPmNvbnRleHQ7CiAJaWYgKGNvbnRleHQgPT0gMCkgewotCQljcHVzX2NsZWFyKG1tLT5jcHVfdm1fbWFzayk7CisJCWNwdW1hc2tfY2xlYXIobW1fY3B1bWFzayhtbSkpOwogCQlpZiAoaWE2NF9jdHgubmV4dCA+PSBpYTY0X2N0eC5saW1pdCkgewogCQkJaWE2NF9jdHgubmV4dCA9IGZpbmRfbmV4dF96ZXJvX2JpdChpYTY0X2N0eC5iaXRtYXAsCiAJCQkJCWlhNjRfY3R4Lm1heF9jdHgsIGlhNjRfY3R4Lm5leHQpOwpAQCAtMTY2LDggKzE2Niw4IEBACiAKIAlkbyB7CiAJCWNvbnRleHQgPSBnZXRfbW11X2NvbnRleHQobW0pOwotCQlpZiAoIWNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG1tLT5jcHVfdm1fbWFzaykpCi0JCQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW0tPmNwdV92bV9tYXNrKTsKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhtbSkpKQorCQkJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhtbSkpOwogCQlyZWxvYWRfY29udGV4dChjb250ZXh0KTsKIAkJLyoKIAkJICogaW4gdGhlIHVubGlrZWx5IGV2ZW50IG9mIGEgVExCLWZsdXNoIGJ5IGFub3RoZXIgdGhyZWFkLApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oCmluZGV4IGQyZGE2MWUuLjkwOGVhZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tb2R1bGUuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgKQEAgLTE2LDYgKzE2LDEyIEBACiAJc3RydWN0IGVsZjY0X3NoZHIgKmdvdDsJCS8qIGdsb2JhbCBvZmZzZXQgdGFibGUgKi8KIAlzdHJ1Y3QgZWxmNjRfc2hkciAqb3BkOwkJLyogb2ZmaWNpYWwgcHJvY2VkdXJlIGRlc2NyaXB0b3JzICovCiAJc3RydWN0IGVsZjY0X3NoZHIgKnVud2luZDsJLyogdW53aW5kLXRhYmxlIHNlY3Rpb24gKi8KKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKKwlzdHJ1Y3QgZWxmNjRfc2hkciAqcGFyYXZpcnRfYnVuZGxlczsKKwkJCQkJLyogcGFyYXZpcnRfYWx0X2J1bmRsZV9wYXRjaCB0YWJsZSAqLworCXN0cnVjdCBlbGY2NF9zaGRyICpwYXJhdmlydF9pbnN0czsKKwkJCQkJLyogcGFyYXZpcnRfYWx0X2luc3RfcGF0Y2ggdGFibGUgKi8KKyNlbmRpZgogCXVuc2lnbmVkIGxvbmcgZ3A7CQkvKiBnbG9iYWwtcG9pbnRlciBmb3IgbW9kdWxlICovCiAKIAl2b2lkICpjb3JlX3Vud190YWJsZTsJCS8qIGNvcmUgdW53aW5kLXRhYmxlIGNvb2tpZSByZXR1cm5lZCBieSB1bndpbmRlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9pbnN0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbmF0aXZlL2luc3QuaAppbmRleCAwYTEwMjZjLi5kMmQ0NmVmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbmF0aXZlL2luc3QuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbmF0aXZlL2luc3QuaApAQCAtMzAsNiArMzAsOSBAQAogI2RlZmluZSBfX3BhcmF2aXJ0X3dvcmtfcHJvY2Vzc2VkX3N5c2NhbGxfdGFyZ2V0IFwKIAkJCQkJCWlhNjRfd29ya19wcm9jZXNzZWRfc3lzY2FsbAogCisjZGVmaW5lIHBhcmF2aXJ0X2ZzeXNjYWxsX3RhYmxlCQkJaWE2NF9uYXRpdmVfZnN5c2NhbGxfdGFibGUKKyNkZWZpbmUgcGFyYXZpcnRfZnN5c19idWJibGVfZG93bgkJaWE2NF9uYXRpdmVfZnN5c19idWJibGVfZG93bgorCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX0dVRVNUX0FTTV9DTE9CQkVSX0NIRUNLCiAjIGRlZmluZSBQQVJBVklSVF9QT0lTT04JMHhkZWFkYmVlZmJhYWRmMDBkCiAjIGRlZmluZSBDTE9CQkVSKGNsb2IpCQkJCVwKQEAgLTc0LDYgKzc3LDExIEBACiAocHJlZCkJbW92IHJlZyA9IHBzcgkJCVwKIAlDTE9CQkVSKGNsb2IpCiAKKyNkZWZpbmUgTU9WX0ZST01fSVRDKHByZWQsIHByZWRfY2xvYiwgcmVnLCBjbG9iKQlcCisocHJlZCkJbW92IHJlZyA9IGFyLml0YwkJCQlcCisJQ0xPQkJFUihjbG9iKQkJCQkJXAorCUNMT0JCRVJfUFJFRChwcmVkX2Nsb2IpCisKICNkZWZpbmUgTU9WX1RPX0lGQShyZWcsIGNsb2IpCVwKIAltb3YgY3IuaWZhID0gcmVnCVwKIAlDTE9CQkVSKGNsb2IpCkBAIC0xNTgsNiArMTY2LDExIEBACiAjZGVmaW5lIFJTTV9QU1JfRFQJCVwKIAlyc20gcHNyLmR0CiAKKyNkZWZpbmUgUlNNX1BTUl9CRV9JKGNsb2IwLCBjbG9iMSkJXAorCXJzbSBwc3IuYmUgfCBwc3IuaQkJXAorCUNMT0JCRVIoY2xvYjApCQkJXAorCUNMT0JCRVIoY2xvYjEpCisKICNkZWZpbmUgU1NNX1BTUl9EVF9BTkRfU1JMWl9JCVwKIAlzc20gcHNyLmR0CQlcCiAJOzsJCQlcCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbmF0aXZlL3BhdGNobGlzdC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9wYXRjaGxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTE2Y2E5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9wYXRjaGxpc3QuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhcmNoL2lhNjQvaW5jbHVkZS9hc20vbmF0aXZlL2luc3QuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNkZWZpbmUgX19wYXJhdmlydF9zdGFydF9nYXRlX2ZzeXNjYWxsX3BhdGNobGlzdAkJXAorCV9faWE2NF9uYXRpdmVfc3RhcnRfZ2F0ZV9mc3lzY2FsbF9wYXRjaGxpc3QKKyNkZWZpbmUgX19wYXJhdmlydF9lbmRfZ2F0ZV9mc3lzY2FsbF9wYXRjaGxpc3QJCQlcCisJX19pYTY0X25hdGl2ZV9lbmRfZ2F0ZV9mc3lzY2FsbF9wYXRjaGxpc3QKKyNkZWZpbmUgX19wYXJhdmlydF9zdGFydF9nYXRlX2JybF9mc3lzX2J1YmJsZV9kb3duX3BhdGNobGlzdAlcCisJX19pYTY0X25hdGl2ZV9zdGFydF9nYXRlX2JybF9mc3lzX2J1YmJsZV9kb3duX3BhdGNobGlzdAorI2RlZmluZSBfX3BhcmF2aXJ0X2VuZF9nYXRlX2JybF9mc3lzX2J1YmJsZV9kb3duX3BhdGNobGlzdAlcCisJX19pYTY0X25hdGl2ZV9lbmRfZ2F0ZV9icmxfZnN5c19idWJibGVfZG93bl9wYXRjaGxpc3QKKyNkZWZpbmUgX19wYXJhdmlydF9zdGFydF9nYXRlX3Z0b3BfcGF0Y2hsaXN0CQkJXAorCV9faWE2NF9uYXRpdmVfc3RhcnRfZ2F0ZV92dG9wX3BhdGNobGlzdAorI2RlZmluZSBfX3BhcmF2aXJ0X2VuZF9nYXRlX3Z0b3BfcGF0Y2hsaXN0CQkJXAorCV9faWE2NF9uYXRpdmVfZW5kX2dhdGVfdnRvcF9wYXRjaGxpc3QKKyNkZWZpbmUgX19wYXJhdmlydF9zdGFydF9nYXRlX21ja2lubGV5X2U5X3BhdGNobGlzdAkJXAorCV9faWE2NF9uYXRpdmVfc3RhcnRfZ2F0ZV9tY2tpbmxleV9lOV9wYXRjaGxpc3QKKyNkZWZpbmUgX19wYXJhdmlydF9lbmRfZ2F0ZV9tY2tpbmxleV9lOV9wYXRjaGxpc3QJCVwKKwlfX2lhNjRfbmF0aXZlX2VuZF9nYXRlX21ja2lubGV5X2U5X3BhdGNobGlzdApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL25hdGl2ZS9wdmNoa19pbnN0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbmF0aXZlL3B2Y2hrX2luc3QuaAppbmRleCBiOGU2ZWIxLi44ZDcyOTYyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbmF0aXZlL3B2Y2hrX2luc3QuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbmF0aXZlL3B2Y2hrX2luc3QuaApAQCAtMTgwLDYgKzE4MCwxMSBAQAogCUlTX1BSRURfSU4ocHJlZCkJCQlcCiAJSVNfUlJFR19PVVQocmVnKQkJCVwKIAlJU19SUkVHX0NMT0IoY2xvYikKKyNkZWZpbmUgTU9WX0ZST01fSVRDKHByZWQsIHByZWRfY2xvYiwgcmVnLCBjbG9iKQlcCisJSVNfUFJFRF9JTihwcmVkKQkJCQlcCisJSVNfUFJFRF9DTE9CKHByZWRfY2xvYikJCQkJXAorCUlTX1JSRUdfT1VUKHJlZykJCQkJXAorCUlTX1JSRUdfQ0xPQihjbG9iKQogI2RlZmluZSBNT1ZfVE9fSUZBKHJlZywgY2xvYikJCQlcCiAJSVNfUlJFR19JTihyZWcpCQkJCVwKIAlJU19SUkVHX0NMT0IoY2xvYikKQEAgLTI0Niw2ICsyNTEsOSBAQAogCUlTX1JSRUdfQ0xPQihjbG9iMikKICNkZWZpbmUgUlNNX1BTUl9EVAkJCQlcCiAJbm9wIDAKKyNkZWZpbmUgUlNNX1BTUl9CRV9JKGNsb2IwLCBjbG9iMSkJCVwKKwlJU19SUkVHX0NMT0IoY2xvYjApCQkJXAorCUlTX1JSRUdfQ0xPQihjbG9iMSkKICNkZWZpbmUgU1NNX1BTUl9EVF9BTkRfU1JMWl9JCQkJXAogCW5vcCAwCiAjZGVmaW5lIEJTV18wKGNsb2IwLCBjbG9iMSwgY2xvYjIpCQlcCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGFyYXZpcnQuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCmluZGV4IDJiZjM2MzYuLjJlYjBhOTggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCkBAIC0yMiw2ICsyMiw1NiBAQAogI2lmbmRlZiBfX0FTTV9QQVJBVklSVF9ICiAjZGVmaW5lIF9fQVNNX1BBUkFWSVJUX0gKIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGZzeXMgcmVsYXRlZCBhZGRyZXNzZXMKKyAqLworc3RydWN0IHB2X2ZzeXNfZGF0YSB7CisJdW5zaWduZWQgbG9uZyAqZnN5c2NhbGxfdGFibGU7CisJdm9pZCAqZnN5c19idWJibGVfZG93bjsKK307CisKK2V4dGVybiBzdHJ1Y3QgcHZfZnN5c19kYXRhIHB2X2ZzeXNfZGF0YTsKKwordW5zaWduZWQgbG9uZyAqcGFyYXZpcnRfZ2V0X2ZzeXNjYWxsX3RhYmxlKHZvaWQpOworY2hhciAqcGFyYXZpcnRfZ2V0X2ZzeXNfYnViYmxlX2Rvd24odm9pZCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHBhdGNobGlzdCBhZGRyZXNzZXMgZm9yIGdhdGUgcGFnZQorICovCitlbnVtIHB2X2dhdGVfcGF0Y2hsaXN0IHsKKwlQVl9HQVRFX1NUQVJUX0ZTWVNDQUxMLAorCVBWX0dBVEVfRU5EX0ZTWVNDQUxMLAorCisJUFZfR0FURV9TVEFSVF9CUkxfRlNZU19CVUJCTEVfRE9XTiwKKwlQVl9HQVRFX0VORF9CUkxfRlNZU19CVUJCTEVfRE9XTiwKKworCVBWX0dBVEVfU1RBUlRfVlRPUCwKKwlQVl9HQVRFX0VORF9WVE9QLAorCisJUFZfR0FURV9TVEFSVF9NQ0tJTkxFWV9FOSwKKwlQVl9HQVRFX0VORF9NQ0tJTkxFWV9FOSwKK307CisKK3N0cnVjdCBwdl9wYXRjaGRhdGEgeworCXVuc2lnbmVkIGxvbmcgc3RhcnRfZnN5c2NhbGxfcGF0Y2hsaXN0OworCXVuc2lnbmVkIGxvbmcgZW5kX2ZzeXNjYWxsX3BhdGNobGlzdDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2JybF9mc3lzX2J1YmJsZV9kb3duX3BhdGNobGlzdDsKKwl1bnNpZ25lZCBsb25nIGVuZF9icmxfZnN5c19idWJibGVfZG93bl9wYXRjaGxpc3Q7CisJdW5zaWduZWQgbG9uZyBzdGFydF92dG9wX3BhdGNobGlzdDsKKwl1bnNpZ25lZCBsb25nIGVuZF92dG9wX3BhdGNobGlzdDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X21ja2lubGV5X2U5X3BhdGNobGlzdDsKKwl1bnNpZ25lZCBsb25nIGVuZF9tY2tpbmxleV9lOV9wYXRjaGxpc3Q7CisKKwl2b2lkICpnYXRlX3NlY3Rpb247Cit9OworCitleHRlcm4gc3RydWN0IHB2X3BhdGNoZGF0YSBwdl9wYXRjaGRhdGE7CisKK3Vuc2lnbmVkIGxvbmcgcGFyYXZpcnRfZ2V0X2dhdGVfcGF0Y2hsaXN0KGVudW0gcHZfZ2F0ZV9wYXRjaGxpc3QgdHlwZSk7Cit2b2lkICpwYXJhdmlydF9nZXRfZ2F0ZV9zZWN0aW9uKHZvaWQpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUEFSQVZJUlRfR1VFU1QKIAogI2RlZmluZSBQQVJBVklSVF9IWVBFUlZJU09SX1RZUEVfREVGQVVMVAkwCkBAIC02OCw2ICsxMTgsMTQgQEAKIAlpbnQgKCphcmNoX3NldHVwX25vbWNhKSh2b2lkKTsKIAogCXZvaWQgKCpwb3N0X3NtcF9wcmVwYXJlX2Jvb3RfY3B1KSh2b2lkKTsKKworI2lmZGVmIEFTTV9TVVBQT1JURUQKKwl1bnNpZ25lZCBsb25nICgqcGF0Y2hfYnVuZGxlKSh2b2lkICpzYnVuZGxlLCB2b2lkICplYnVuZGxlLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdHlwZSk7CisJdW5zaWduZWQgbG9uZyAoKnBhdGNoX2luc3QpKHVuc2lnbmVkIGxvbmcgc3RhZywgdW5zaWduZWQgbG9uZyBldGFnLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHR5cGUpOworI2VuZGlmCisJdm9pZCAoKnBhdGNoX2JyYW5jaCkodW5zaWduZWQgbG9uZyB0YWcsIHVuc2lnbmVkIGxvbmcgdHlwZSk7CiB9OwogCiBleHRlcm4gc3RydWN0IHB2X2luaXRfb3BzIHB2X2luaXRfb3BzOwpAQCAtMjEwLDYgKzI2OCw4IEBACiAJaW50ICgqZG9fc3RlYWxfYWNjb3VudGluZykodW5zaWduZWQgbG9uZyAqbmV3X2l0bSk7CiAKIAl2b2lkICgqY2xvY2tzb3VyY2VfcmVzdW1lKSh2b2lkKTsKKworCXVuc2lnbmVkIGxvbmcgbG9uZyAoKnNjaGVkX2Nsb2NrKSh2b2lkKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgcHZfdGltZV9vcHMgcHZfdGltZV9vcHM7CkBAIC0yMjcsNiArMjg3LDExIEBACiAJcmV0dXJuIHB2X3RpbWVfb3BzLmRvX3N0ZWFsX2FjY291bnRpbmcobmV3X2l0bSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIHBhcmF2aXJ0X3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJcmV0dXJuIHB2X3RpbWVfb3BzLnNjaGVkX2Nsb2NrKCk7Cit9CisKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGFyYXZpcnRfcGF0Y2guaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYXJhdmlydF9wYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOGZmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGFyYXZpcnRfcGF0Y2guaApAQCAtMCwwICsxLDE0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElzYWt1IFlhbWFoYXRhIDx5YW1haGF0YSBhdCB2YWxpbnV4IGNvIGpwPgorICogICAgICAgICAgICAgICAgICAgIFZBIExpbnV4IFN5c3RlbXMgSmFwYW4gSy5LLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX0FTTV9QQVJBVklSVF9QQVRDSF9ICisjZGVmaW5lIF9fQVNNX1BBUkFWSVJUX1BBVENIX0gKKworI2lmZGVmIF9fQVNTRU1CTFlfXworCisJLnNlY3Rpb24gLnBhcmF2aXJ0X2JyYW5jaGVzLCAiYSIKKwkucHJldmlvdXMKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfU0lURV9CUih0eXBlKQkJXAorCXsJCQkJCVwKKwlbMTpdIDsJCQkJCVwKKwlici5jb25kLnNwdGsubWFueSAyZiA7CQkJXAorCW5vcC5iIDAgOwkJCQlcCisJbm9wLmIgMDs7IDsJCQkJXAorCX0gOwkJCQkJXAorCTI6CQkJCQlcCisJLnhkYXRhOCAiLnBhcmF2aXJ0X2JyYW5jaGVzIiwgMWIsIHR5cGUKKworI2Vsc2UKKworI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CisKKy8qIGZvciBiaW5hcnkgcGF0Y2ggKi8KK3N0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2J1bmRsZSB7CisJdm9pZAkJKnNidW5kbGU7CisJdm9pZAkJKmVidW5kbGU7CisJdW5zaWduZWQgbG9uZwl0eXBlOworfTsKKworLyogbGFiZWwgbWVhbnMgdGhlIGJlZ2lubmluZyBvZiBuZXcgYnVuZGxlICovCisjZGVmaW5lIHBhcmF2aXJ0X2FsdF9idW5kbGUoaW5zdHIsIHByaXZvcCkJCQkJXAorCSJcdDk5ODpcbiIJCQkJCQkJXAorCSJcdCIgaW5zdHIgIlxuIgkJCQkJCQlcCisJIlx0OTk5OlxuIgkJCQkJCQlcCisJIlx0LnB1c2hzZWN0aW9uIC5wYXJhdmlydF9idW5kbGVzLCBcImFcIlxuIgkJCVwKKwkiXHQucG9wc2VjdGlvblxuIgkJCQkJCVwKKwkiXHQueGRhdGE4IFwiLnBhcmF2aXJ0X2J1bmRsZXNcIiwgOTk4YiwgOTk5YiwgIgkJCVwKKwlfX3N0cmluZ2lmeShwcml2b3ApICJcbiIKKworCitzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfYnVuZGxlX2VsZW0geworCWNvbnN0IHZvaWQJKnNidW5kbGU7CisJY29uc3Qgdm9pZAkqZWJ1bmRsZTsKKwl1bnNpZ25lZCBsb25nCXR5cGU7Cit9OworCisKK3N0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2luc3QgeworCXVuc2lnbmVkIGxvbmcJc3RhZzsKKwl1bnNpZ25lZCBsb25nCWV0YWc7CisJdW5zaWduZWQgbG9uZwl0eXBlOworfTsKKworI2RlZmluZSBwYXJhdmlydF9hbHRfaW5zdChpbnN0ciwgcHJpdm9wKQkJCQlcCisJIlx0Wzk5ODpdXG4iCQkJCQkJCVwKKwkiXHQiIGluc3RyICJcbiIJCQkJCQkJXAorCSJcdFs5OTk6XVxuIgkJCQkJCQlcCisJIlx0LnB1c2hzZWN0aW9uIC5wYXJhdmlydF9pbnN0cywgXCJhXCJcbiIJCQlcCisJIlx0LnBvcHNlY3Rpb25cbiIJCQkJCQlcCisJIlx0LnhkYXRhOCBcIi5wYXJhdmlydF9pbnN0c1wiLCA5OThiLCA5OTliLCAiCQkJXAorCV9fc3RyaW5naWZ5KHByaXZvcCkgIlxuIgorCitzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9icmFuY2ggeworCXVuc2lnbmVkIGxvbmcJdGFnOworCXVuc2lnbmVkIGxvbmcJdHlwZTsKK307CisKK3N0cnVjdCBwYXJhdmlydF9wYXRjaF9icmFuY2hfdGFyZ2V0IHsKKwljb25zdCB2b2lkCSplbnRyeTsKKwl1bnNpZ25lZCBsb25nCXR5cGU7Cit9OworCit2b2lkCitfX3BhcmF2aXJ0X3BhdGNoX2FwcGx5X2JyYW5jaCgKKwl1bnNpZ25lZCBsb25nIHRhZywgdW5zaWduZWQgbG9uZyB0eXBlLAorCWNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9icmFuY2hfdGFyZ2V0ICplbnRyaWVzLAorCXVuc2lnbmVkIGludCBucl9lbnRyaWVzKTsKKwordm9pZAorcGFyYXZpcnRfcGF0Y2hfcmVsb2NfYnIodW5zaWduZWQgbG9uZyB0YWcsIGNvbnN0IHZvaWQgKnRhcmdldCk7CisKK3ZvaWQKK3BhcmF2aXJ0X3BhdGNoX3JlbG9jX2JybCh1bnNpZ25lZCBsb25nIHRhZywgY29uc3Qgdm9pZCAqdGFyZ2V0KTsKKworCisjaWYgZGVmaW5lZChBU01fU1VQUE9SVEVEKSAmJiBkZWZpbmVkKENPTkZJR19QQVJBVklSVCkKK3Vuc2lnbmVkIGxvbmcKK2lhNjRfbmF0aXZlX3BhdGNoX2J1bmRsZSh2b2lkICpzYnVuZGxlLCB2b2lkICplYnVuZGxlLCB1bnNpZ25lZCBsb25nIHR5cGUpOworCit1bnNpZ25lZCBsb25nCitfX3BhcmF2aXJ0X3BhdGNoX2FwcGx5X2J1bmRsZSh2b2lkICpzYnVuZGxlLCB2b2lkICplYnVuZGxlLCB1bnNpZ25lZCBsb25nIHR5cGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfYnVuZGxlX2VsZW0gKmVsZW1zLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBuZWxlbXMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfYnVuZGxlX2VsZW0gKipmb3VuZCk7CisKK3ZvaWQKK3BhcmF2aXJ0X3BhdGNoX2FwcGx5X2J1bmRsZShjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9idW5kbGUgKnN0YXJ0LAorCQkJICAgIGNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2J1bmRsZSAqZW5kKTsKKwordm9pZAorcGFyYXZpcnRfcGF0Y2hfYXBwbHlfaW5zdChjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9pbnN0ICpzdGFydCwKKwkJCSAgY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfaW5zdCAqZW5kKTsKKwordm9pZCBwYXJhdmlydF9wYXRjaF9hcHBseSh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIHBhcmF2aXJ0X3BhdGNoX2FwcGx5X2J1bmRsZShzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBhcmF2aXJ0X3BhdGNoX2FwcGx5X2luc3Qoc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwYXJhdmlydF9wYXRjaF9hcHBseSgpCQkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhX19BU1NFTUJMRVlfXyAqLworCisjZW5kaWYgLyogX19BU01fUEFSQVZJUlRfUEFUQ0hfSCAqLworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1zZXQtc3R5bGU6ICJsaW51eCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiB0YWItd2lkdGg6IDgKKyAqIGluZGVudC10YWJzLW1vZGU6IHQKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3ByaXZvcC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3ByaXZvcC5oCmluZGV4IDMzYzhlNTUuLjNkMjk1MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wYXJhdmlydF9wcml2b3AuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGFyYXZpcnRfcHJpdm9wLmgKQEAgLTMzLDcgKzMzLDcgQEAKICAqLwogCiBzdHJ1Y3QgcHZfY3B1X29wcyB7Ci0Jdm9pZCAoKmZjKSh1bnNpZ25lZCBsb25nIGFkZHIpOworCXZvaWQgKCpmYykodm9pZCAqYWRkcik7CiAJdW5zaWduZWQgbG9uZyAoKnRoYXNoKSh1bnNpZ25lZCBsb25nIGFkZHIpOwogCXVuc2lnbmVkIGxvbmcgKCpnZXRfY3B1aWQpKGludCBpbmRleCk7CiAJdW5zaWduZWQgbG9uZyAoKmdldF9wbWQpKGludCBpbmRleCk7CkBAIC02MCwxMiArNjAsMTggQEAKIC8qIEluc3RydWN0aW9ucyBwYXJhdmlydHVhbGl6ZWQgZm9yIHBlcmZvcm1hbmNlICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWZuZGVmIEFTTV9TVVBQT1JURUQKKyNkZWZpbmUgcGFyYXZpcnRfc3NtX2koKQlwdl9jcHVfb3BzLnNzbV9pKCkKKyNkZWZpbmUgcGFyYXZpcnRfcnNtX2koKQlwdl9jcHVfb3BzLnJzbV9pKCkKKyNkZWZpbmUgX19wYXJhdmlydF9nZXRyZWcoKQlwdl9jcHVfb3BzLmdldHJlZygpCisjZW5kaWYKKwogLyogbWFzayBmb3IgaWE2NF9uYXRpdmVfc3NtL3JzbSgpIG11c3QgYmUgY29uc3RhbnQuKCJpIiBjb25zdHJhaW5nKS4KICAqIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gZG9lc24ndCBzYXRpc2Z5IGl0LiAqLwogI2RlZmluZSBwYXJhdmlydF9zc20obWFzaykJCQlcCiAJZG8gewkJCQkJXAogCQlpZiAoKG1hc2spID09IElBNjRfUFNSX0kpCVwKLQkJCXB2X2NwdV9vcHMuc3NtX2koKTsJXAorCQkJcGFyYXZpcnRfc3NtX2koKTsJXAogCQllbHNlCQkJCVwKIAkJCWlhNjRfbmF0aXZlX3NzbShtYXNrKTsJXAogCX0gd2hpbGUgKDApCkBAIC03Myw3ICs3OSw3IEBACiAjZGVmaW5lIHBhcmF2aXJ0X3JzbShtYXNrKQkJCVwKIAlkbyB7CQkJCQlcCiAJCWlmICgobWFzaykgPT0gSUE2NF9QU1JfSSkJXAotCQkJcHZfY3B1X29wcy5yc21faSgpOwlcCisJCQlwYXJhdmlydF9yc21faSgpOwlcCiAJCWVsc2UJCQkJXAogCQkJaWE2NF9uYXRpdmVfcnNtKG1hc2spOwlcCiAJfSB3aGlsZSAoMCkKQEAgLTg2LDcgKzkyLDcgQEAKIAkJaWYgKChyZWcpID09IF9JQTY0X1JFR19JUCkJCQlcCiAJCQlyZXMgPSBpYTY0X25hdGl2ZV9nZXRyZWcoX0lBNjRfUkVHX0lQKTsgXAogCQllbHNlCQkJCQkJXAotCQkJcmVzID0gcHZfY3B1X29wcy5nZXRyZWcocmVnKTsJCVwKKwkJCXJlcyA9IF9fcGFyYXZpcnRfZ2V0cmVnKHJlZyk7CQlcCiAJCXJlczsJCQkJCQlcCiAJfSkKIApAQCAtMTEyLDYgKzExOCwxMiBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BBUkFWSVJUICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19QQVJBVklSVCkgJiYgZGVmaW5lZChBU01fU1VQUE9SVEVEKQorI2RlZmluZSBwYXJhdmlydF9kdl9zZXJpYWxpemVfZGF0YSgpCWlhNjRfZHZfc2VyaWFsaXplX2RhdGEoKQorI2Vsc2UKKyNkZWZpbmUgcGFyYXZpcnRfZHZfc2VyaWFsaXplX2RhdGEoKQkvKiBub3RoaW5nICovCisjZW5kaWYKKwogLyogdGhlc2Ugcm91dGluZXMgdXRpbGl6ZSBwcml2aWxlZ2Utc2Vuc2l0aXZlIG9yIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZQogICogcHJpdmlsZWdlZCBpbnN0cnVjdGlvbnMgc28gdGhlIGNvZGUgbXVzdCBiZSByZXBsYWNlZCB3aXRoCiAgKiBwYXJhdmlydHVhbGl6ZWQgdmVyc2lvbnMgKi8KQEAgLTEyMSw0ICsxMzMsMzQ5IEBACiAJSUE2NF9QQVJBVklSVF9BU01fRlVOQyh3b3JrX3Byb2Nlc3NlZF9zeXNjYWxsKQogI2RlZmluZSBpYTY0X2xlYXZlX2tlcm5lbAkJSUE2NF9QQVJBVklSVF9BU01fRlVOQyhsZWF2ZV9rZXJuZWwpCiAKKworI2lmIGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYmluYXJ5IHBhdGNoaW5nIGluZnJhc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9GQwkJCQkxCisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfVEhBU0gJCQkyCisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfR0VUX0NQVUlECQkJMworI2RlZmluZSBQQVJBVklSVF9QQVRDSF9UWVBFX0dFVF9QTUQJCQk0CisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfUFRDR0EJCQk1CisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfR0VUX1JSCQkJNgorI2RlZmluZSBQQVJBVklSVF9QQVRDSF9UWVBFX1NFVF9SUgkJCTcKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9TRVRfUlIwX1RPX1JSNAkJOAorI2RlZmluZSBQQVJBVklSVF9QQVRDSF9UWVBFX1NTTV9JCQkJOQorI2RlZmluZSBQQVJBVklSVF9QQVRDSF9UWVBFX1JTTV9JCQkJMTAKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9HRVRfUFNSX0kJCQkxMQorI2RlZmluZSBQQVJBVklSVF9QQVRDSF9UWVBFX0lOVFJJTl9MT0NBTF9JUlFfUkVTVE9SRQkxMgorCisvKiBQQVJBVklSVF9QQVRZX1RZUEVfW0dTXUVUUkVHICsgX0lBNjRfUkVHX3h4eCAqLworI2RlZmluZSBQQVJBVklSVF9QQVRDSF9UWVBFX0dFVFJFRwkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9TRVRSRUcJCQkweDIwMDAwMDAwCisKKy8qCisgKiBzdHJ1Y3QgdGFza19zdHJ1Y3QqICgqaWE2NF9zd2l0Y2hfdG8pKHZvaWQqIG5leHRfdGFzayk7CisgKiB2b2lkICppYTY0X2xlYXZlX3N5c2NhbGw7CisgKiB2b2lkICppYTY0X3dvcmtfcHJvY2Vzc2VkX3N5c2NhbGwKKyAqIHZvaWQgKmlhNjRfbGVhdmVfa2VybmVsOworICovCisKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9CUl9TVEFSVAkJCTB4MzAwMDAwMDAKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9CUl9TV0lUQ0hfVE8JCVwKKwkoUEFSQVZJUlRfUEFUQ0hfVFlQRV9CUl9TVEFSVCArIDApCisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfQlJfTEVBVkVfU1lTQ0FMTAkJXAorCShQQVJBVklSVF9QQVRDSF9UWVBFX0JSX1NUQVJUICsgMSkKKyNkZWZpbmUgUEFSQVZJUlRfUEFUQ0hfVFlQRV9CUl9XT1JLX1BST0NFU1NFRF9TWVNDQUxMCVwKKwkoUEFSQVZJUlRfUEFUQ0hfVFlQRV9CUl9TVEFSVCArIDIpCisjZGVmaW5lIFBBUkFWSVJUX1BBVENIX1RZUEVfQlJfTEVBVkVfS0VSTkVMCQlcCisJKFBBUkFWSVJUX1BBVENIX1RZUEVfQlJfU1RBUlQgKyAzKQorCisjaWZkZWYgQVNNX1NVUFBPUlRFRAorI2luY2x1ZGUgPGFzbS9wYXJhdmlydF9wYXRjaC5oPgorCisvKgorICogcHZfY3B1X29wcyBjYWxsaW5nIHN0dWIuCisgKiBub3JtYWwgZnVuY3Rpb24gY2FsbCBjb252ZW5zaW9uIGNhbid0IGJlIHdyaXR0ZW4gYnkgZ2NjCisgKiBpbmxpbmUgYXNzZW1ibHkuCisgKgorICogZnJvbSB0aGUgY2FsbGVyJ3MgcG9pbnQgb2YgdmlldywKKyAqIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIHdpbGwgYmUgY2xvYmJlcmVkLgorICogcjIsIHIzCisgKiByOC1yMTUKKyAqIHIxNiwgcjE3CisgKiBiNiwgYjcKKyAqIHA2LXAxNQorICogYXIuY2N2CisgKgorICogZnJvbSB0aGUgY2FsbGVlJ3MgcG9pbnQgb2YgdmlldyAsCisgKiB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBjYW4gYmUgdXNlZC4KKyAqIHIyLCByMzogc2NyYXRjaAorICogcjg6IHNjcmF0Y2gsIGlucHV0IGFyZ3VtZW50MCBhbmQgcmV0dXJuIHZhbHVlCisgKiByMC1yMTU6IHNjcmF0Y2gsIGlucHV0IGFyZ3VtZW50MS01CisgKiBiNjogcmV0dXJuIHBvaW50ZXIKKyAqIGI3OiBzY3JhdGNoCisgKiBwNi1wMTU6IHNjcmF0Y2gKKyAqIGFyLmNjdjogc2NyYXRjaAorICoKKyAqIG90aGVyIHJlZ2lzdGVycyBtdXN0IG5vdCBiZSBjaGFuZ2VkLiBlc3BlY2lhbGx5CisgKiBiMDogcnA6IHByZXNlcnZlZC4gZ2NjIGlnbm9yZXMgYjAgaW4gY2xvYmJlcmVkIHJlZ2lzdGVyLgorICogcjE2OiBzYXZlZCBncAorICovCisvKiA1IGJ1bmRsZXMgKi8KKyNkZWZpbmUgX19QQVJBVklSVF9CUgkJCQkJCQlcCisJIjs7XG4iCQkJCQkJCQlcCisJInsgLm1seFxuIgkJCQkJCQlcCisJIm5vcCAwXG4iCQkJCQkJCVwKKwkibW92bCByMiA9ICVbb3BfYWRkcl1cbiIvKiBnZXQgZnVuY3Rpb24gcG9pbnRlciBhZGRyZXNzICovCVwKKwkiOztcbiIJCQkJCQkJCVwKKwkifVxuIgkJCQkJCQkJXAorCSIxOlxuIgkJCQkJCQkJXAorCSJ7IC5taWlcbiIJCQkJCQkJXAorCSJsZDggcjIgPSBbcjJdXG4iCS8qIGxvYWQgZnVuY3Rpb24gZGVzY3JpcHRvciBhZGRyZXNzICovCVwKKwkibW92IHIxNyA9IGlwXG4iCS8qIGdldCBpcCB0byBjYWxjIHJldHVybiBhZGRyZXNzICovCVwKKwkibW92IHIxNiA9IGdwXG4iCS8qIHNhdmUgZ3AgKi8JCQkJXAorCSI7O1xuIgkJCQkJCQkJXAorCSJ9XG4iCQkJCQkJCQlcCisJInsgLm1paVxuIgkJCQkJCQlcCisJImxkOCByMyA9IFtyMl0sIDhcbiIJLyogbG9hZCBlbnRyeSBhZGRyZXNzICovCQlcCisJImFkZHMgcjE3ID0gIDFmIC0gMWIsIHIxN1xuIgkvKiBjYWxjdWxhdGUgcmV0dXJuIGFkZHJlc3MgKi8JXAorCSI7O1xuIgkJCQkJCQkJXAorCSJtb3YgYjcgPSByM1xuIgkJLyogc2V0IGVudHJ5IGFkZHJlc3MgKi8JCQlcCisJIn1cbiIJCQkJCQkJCVwKKwkieyAubWliXG4iCQkJCQkJCVwKKwkibGQ4IGdwID0gW3IyXVxuIgkvKiBsb2FkIGdwIHZhbHVlICovCQkJXAorCSJtb3YgYjYgPSByMTdcbiIJLyogc2V0IHJldHVybiBhZGRyZXNzICovCQlcCisJImJyLmNvbmQuc3B0ay5mZXcgYjdcbiIJLyogaW50cmluc2ljcyBhcmUgdmVyeSBzaG9ydCBpc25zICovCVwKKwkifVxuIgkJCQkJCQkJXAorCSIxOlxuIgkJCQkJCQkJXAorCSJ7IC5taWlcbiIJCQkJCQkJXAorCSJtb3YgZ3AgPSByMTZcbiIJLyogcmVzdG9yZSBncCB2YWx1ZSAqLwkJCVwKKwkibm9wIDBcbiIJCQkJCQkJXAorCSJub3AgMFxuIgkJCQkJCQlcCisJIjs7XG4iCQkJCQkJCQlcCisJIn1cbiIKKworI2RlZmluZSBQQVJBVklSVF9PUChvcCkJCQkJXAorCVtvcF9hZGRyXSAiaSIoJnB2X2NwdV9vcHMub3ApCisKKyNkZWZpbmUgUEFSQVZJUlRfVFlQRSh0eXBlKQkJCVwKKwlQQVJBVklSVF9QQVRDSF9UWVBFXyAjIyB0eXBlCisKKyNkZWZpbmUgUEFSQVZJUlRfUkVHX0NMT0JCRVJTMAkJCQkJXAorCSJyMiIsICJyMyIsIC8qInI4IiwqLyAicjkiLCAicjEwIiwgInIxMSIsICJyMTQiLAlcCisJCSJyMTUiLCAicjE2IiwgInIxNyIKKworI2RlZmluZSBQQVJBVklSVF9SRUdfQ0xPQkJFUlMxCQkJCQlcCisJInIyIiwicjMiLCAvKiJyOCIsKi8gInI5IiwgInIxMCIsICJyMTEiLCAicjE0IiwJCVwKKwkJInIxNSIsICJyMTYiLCAicjE3IgorCisjZGVmaW5lIFBBUkFWSVJUX1JFR19DTE9CQkVSUzIJCQkJCVwKKwkicjIiLCAicjMiLCAvKiJyOCIsICJyOSIsKi8gInIxMCIsICJyMTEiLCAicjE0IiwJXAorCQkicjE1IiwgInIxNiIsICJyMTciCisKKyNkZWZpbmUgUEFSQVZJUlRfUkVHX0NMT0JCRVJTNQkJCQkJXAorCSJyMiIsICJyMyIsIC8qInI4IiwgInI5IiwgInIxMCIsICJyMTEiLCAicjE0IiwqLwlcCisJCSJyMTUiLCAicjE2IiwgInIxNyIKKworI2RlZmluZSBQQVJBVklSVF9CUl9DTE9CQkVSUwkJCVwKKwkiYjYiLCAiYjciCisKKyNkZWZpbmUgUEFSQVZJUlRfUFJfQ0xPQkJFUlMJCQkJCQlcCisJInA2IiwgInA3IiwgInA4IiwgInA5IiwgInAxMCIsICJwMTEiLCAicDEyIiwgInAxMyIsICJwMTQiLCAicDE1IgorCisjZGVmaW5lIFBBUkFWSVJUX0FSX0NMT0JCRVJTCQkJXAorCSJhci5jY3YiCisKKyNkZWZpbmUgUEFSQVZJUlRfQ0xPQkJFUlMwCQkJXAorCQlQQVJBVklSVF9SRUdfQ0xPQkJFUlMwLAkJXAorCQlQQVJBVklSVF9CUl9DTE9CQkVSUywJCVwKKwkJUEFSQVZJUlRfUFJfQ0xPQkJFUlMsCQlcCisJCVBBUkFWSVJUX0FSX0NMT0JCRVJTLAkJXAorCQkibWVtb3J5IgorCisjZGVmaW5lIFBBUkFWSVJUX0NMT0JCRVJTMQkJCVwKKwkJUEFSQVZJUlRfUkVHX0NMT0JCRVJTMSwJCVwKKwkJUEFSQVZJUlRfQlJfQ0xPQkJFUlMsCQlcCisJCVBBUkFWSVJUX1BSX0NMT0JCRVJTLAkJXAorCQlQQVJBVklSVF9BUl9DTE9CQkVSUywJCVwKKwkJIm1lbW9yeSIKKworI2RlZmluZSBQQVJBVklSVF9DTE9CQkVSUzIJCQlcCisJCVBBUkFWSVJUX1JFR19DTE9CQkVSUzIsCQlcCisJCVBBUkFWSVJUX0JSX0NMT0JCRVJTLAkJXAorCQlQQVJBVklSVF9QUl9DTE9CQkVSUywJCVwKKwkJUEFSQVZJUlRfQVJfQ0xPQkJFUlMsCQlcCisJCSJtZW1vcnkiCisKKyNkZWZpbmUgUEFSQVZJUlRfQ0xPQkJFUlM1CQkJXAorCQlQQVJBVklSVF9SRUdfQ0xPQkJFUlM1LAkJXAorCQlQQVJBVklSVF9CUl9DTE9CQkVSUywJCVwKKwkJUEFSQVZJUlRfUFJfQ0xPQkJFUlMsCQlcCisJCVBBUkFWSVJUX0FSX0NMT0JCRVJTLAkJXAorCQkibWVtb3J5IgorCisjZGVmaW5lIFBBUkFWSVJUX0JSMChvcCwgdHlwZSkJCQkJCVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGlhNjRfY2xvYmJlciBhc20gKCJyOCIpOwkJXAorCWFzbSB2b2xhdGlsZSAocGFyYXZpcnRfYWx0X2J1bmRsZShfX1BBUkFWSVJUX0JSLAlcCisJCQkJCSAgUEFSQVZJUlRfVFlQRSh0eXBlKSkJXAorCQkgICAgICA6CSI9ciIoaWE2NF9jbG9iYmVyKQkJCVwKKwkJICAgICAgOiBQQVJBVklSVF9PUChvcCkJCQkJXAorCQkgICAgICA6IFBBUkFWSVJUX0NMT0JCRVJTMCkKKworI2RlZmluZSBQQVJBVklSVF9CUjBfUkVUKG9wLCB0eXBlKQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpYTY0X2ludHJpX3JlcyBhc20gKCJyOCIpOwlcCisJYXNtIHZvbGF0aWxlIChwYXJhdmlydF9hbHRfYnVuZGxlKF9fUEFSQVZJUlRfQlIsCVwKKwkJCQkJICBQQVJBVklSVF9UWVBFKHR5cGUpKQlcCisJCSAgICAgIDogIj1yIihpYTY0X2ludHJpX3JlcykJCQlcCisJCSAgICAgIDogUEFSQVZJUlRfT1Aob3ApCQkJCVwKKwkJICAgICAgOiBQQVJBVklSVF9DTE9CQkVSUzApCisKKyNkZWZpbmUgUEFSQVZJUlRfQlIxKG9wLCB0eXBlLCBhcmcxKQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfXyMjYXJnMSBhc20gKCJyOCIpID0gYXJnMTsJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaWE2NF9jbG9iYmVyIGFzbSAoInI4Iik7CQlcCisJYXNtIHZvbGF0aWxlIChwYXJhdmlydF9hbHRfYnVuZGxlKF9fUEFSQVZJUlRfQlIsCVwKKwkJCQkJICBQQVJBVklSVF9UWVBFKHR5cGUpKQlcCisJCSAgICAgIDoJIj1yIihpYTY0X2Nsb2JiZXIpCQkJXAorCQkgICAgICA6IFBBUkFWSVJUX09QKG9wKSwgIjAiKF9fIyNhcmcxKQkJXAorCQkgICAgICA6IFBBUkFWSVJUX0NMT0JCRVJTMSkKKworI2RlZmluZSBQQVJBVklSVF9CUjFfUkVUKG9wLCB0eXBlLCBhcmcxKQkJCVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGlhNjRfaW50cmlfcmVzIGFzbSAoInI4Iik7CVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fIyNhcmcxIGFzbSAoInI4IikgPSBhcmcxOwlcCisJYXNtIHZvbGF0aWxlIChwYXJhdmlydF9hbHRfYnVuZGxlKF9fUEFSQVZJUlRfQlIsCVwKKwkJCQkJICBQQVJBVklSVF9UWVBFKHR5cGUpKQlcCisJCSAgICAgIDogIj1yIihpYTY0X2ludHJpX3JlcykJCQlcCisJCSAgICAgIDogUEFSQVZJUlRfT1Aob3ApLCAiMCIoX18jI2FyZzEpCQlcCisJCSAgICAgIDogUEFSQVZJUlRfQ0xPQkJFUlMxKQorCisjZGVmaW5lIFBBUkFWSVJUX0JSMV9WT0lEKG9wLCB0eXBlLCBhcmcxKQkJCVwKKwlyZWdpc3RlciB2b2lkICpfXyMjYXJnMSBhc20gKCJyOCIpID0gYXJnMTsJCVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGlhNjRfY2xvYmJlciBhc20gKCJyOCIpOwkJXAorCWFzbSB2b2xhdGlsZSAocGFyYXZpcnRfYWx0X2J1bmRsZShfX1BBUkFWSVJUX0JSLAlcCisJCQkJCSAgUEFSQVZJUlRfVFlQRSh0eXBlKSkJXAorCQkgICAgICA6CSI9ciIoaWE2NF9jbG9iYmVyKQkJCVwKKwkJICAgICAgOiBQQVJBVklSVF9PUChvcCksICIwIihfXyMjYXJnMSkJCVwKKwkJICAgICAgOiBQQVJBVklSVF9DTE9CQkVSUzEpCisKKyNkZWZpbmUgUEFSQVZJUlRfQlIyKG9wLCB0eXBlLCBhcmcxLCBhcmcyKQkJCQlcCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfXyMjYXJnMSBhc20gKCJyOCIpID0gYXJnMTsJCVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fIyNhcmcyIGFzbSAoInI5IikgPSBhcmcyOwkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaWE2NF9jbG9iYmVyMSBhc20gKCJyOCIpOwkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaWE2NF9jbG9iYmVyMiBhc20gKCJyOSIpOwkJXAorCWFzbSB2b2xhdGlsZSAocGFyYXZpcnRfYWx0X2J1bmRsZShfX1BBUkFWSVJUX0JSLAkJXAorCQkJCQkgIFBBUkFWSVJUX1RZUEUodHlwZSkpCQlcCisJCSAgICAgIDogIj1yIihpYTY0X2Nsb2JiZXIxKSwgIj1yIihpYTY0X2Nsb2JiZXIyKQlcCisJCSAgICAgIDogUEFSQVZJUlRfT1Aob3ApLCAiMCIoX18jI2FyZzEpLCAiMSIoX18jI2FyZzIpCVwKKwkJICAgICAgOiBQQVJBVklSVF9DTE9CQkVSUzIpCisKKworI2RlZmluZSBQQVJBVklSVF9ERUZJTkVfQ1BVX09QMChvcCwgdHlwZSkJCVwKKwlzdGF0aWMgaW5saW5lIHZvaWQJCQkJXAorCXBhcmF2aXJ0XyAjIyBvcCAodm9pZCkJCQkJXAorCXsJCQkJCQlcCisJCVBBUkFWSVJUX0JSMChvcCwgdHlwZSk7CQkJXAorCX0KKworI2RlZmluZSBQQVJBVklSVF9ERUZJTkVfQ1BVX09QMF9SRVQob3AsIHR5cGUpCQlcCisJc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCQkJXAorCXBhcmF2aXJ0XyAjIyBvcCAodm9pZCkJCQkJXAorCXsJCQkJCQlcCisJCVBBUkFWSVJUX0JSMF9SRVQob3AsIHR5cGUpOwkJXAorCQlyZXR1cm4gaWE2NF9pbnRyaV9yZXM7CQkJXAorCX0KKworI2RlZmluZSBQQVJBVklSVF9ERUZJTkVfQ1BVX09QMV9WT0lEKG9wLCB0eXBlKQkJXAorCXN0YXRpYyBpbmxpbmUgdm9pZAkJCQlcCisJcGFyYXZpcnRfICMjIG9wICh2b2lkICphcmcxKQkJCVwKKwl7CQkJCQkJXAorCQlQQVJBVklSVF9CUjFfVk9JRChvcCwgdHlwZSwgYXJnMSk7CVwKKwl9CisKKyNkZWZpbmUgUEFSQVZJUlRfREVGSU5FX0NQVV9PUDEob3AsIHR5cGUpCQlcCisJc3RhdGljIGlubGluZSB2b2lkCQkJCVwKKwlwYXJhdmlydF8gIyMgb3AgKHVuc2lnbmVkIGxvbmcgYXJnMSkJCVwKKwl7CQkJCQkJXAorCQlQQVJBVklSVF9CUjEob3AsIHR5cGUsIGFyZzEpOwkJXAorCX0KKworI2RlZmluZSBQQVJBVklSVF9ERUZJTkVfQ1BVX09QMV9SRVQob3AsIHR5cGUpCQlcCisJc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCQkJXAorCXBhcmF2aXJ0XyAjIyBvcCAodW5zaWduZWQgbG9uZyBhcmcxKQkJXAorCXsJCQkJCQlcCisJCVBBUkFWSVJUX0JSMV9SRVQob3AsIHR5cGUsIGFyZzEpOwlcCisJCXJldHVybiBpYTY0X2ludHJpX3JlczsJCQlcCisJfQorCisjZGVmaW5lIFBBUkFWSVJUX0RFRklORV9DUFVfT1AyKG9wLCB0eXBlKQkJXAorCXN0YXRpYyBpbmxpbmUgdm9pZAkJCQlcCisJcGFyYXZpcnRfICMjIG9wICh1bnNpZ25lZCBsb25nIGFyZzEsCQlcCisJCQkgdW5zaWduZWQgbG9uZyBhcmcyKQkJXAorCXsJCQkJCQlcCisJCVBBUkFWSVJUX0JSMihvcCwgdHlwZSwgYXJnMSwgYXJnMik7CVwKKwl9CisKKworUEFSQVZJUlRfREVGSU5FX0NQVV9PUDFfVk9JRChmYywgRkMpOworUEFSQVZJUlRfREVGSU5FX0NQVV9PUDFfUkVUKHRoYXNoLCBUSEFTSCkKK1BBUkFWSVJUX0RFRklORV9DUFVfT1AxX1JFVChnZXRfY3B1aWQsIEdFVF9DUFVJRCkKK1BBUkFWSVJUX0RFRklORV9DUFVfT1AxX1JFVChnZXRfcG1kLCBHRVRfUE1EKQorUEFSQVZJUlRfREVGSU5FX0NQVV9PUDIocHRjZ2EsIFBUQ0dBKQorUEFSQVZJUlRfREVGSU5FX0NQVV9PUDFfUkVUKGdldF9yciwgR0VUX1JSKQorUEFSQVZJUlRfREVGSU5FX0NQVV9PUDIoc2V0X3JyLCBTRVRfUlIpCitQQVJBVklSVF9ERUZJTkVfQ1BVX09QMChzc21faSwgU1NNX0kpCitQQVJBVklSVF9ERUZJTkVfQ1BVX09QMChyc21faSwgUlNNX0kpCitQQVJBVklSVF9ERUZJTkVfQ1BVX09QMF9SRVQoZ2V0X3Bzcl9pLCBHRVRfUFNSX0kpCitQQVJBVklSVF9ERUZJTkVfQ1BVX09QMShpbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmUsIElOVFJJTl9MT0NBTF9JUlFfUkVTVE9SRSkKKworc3RhdGljIGlubGluZSB2b2lkCitwYXJhdmlydF9zZXRfcnIwX3RvX3JyNCh1bnNpZ25lZCBsb25nIHZhbDAsIHVuc2lnbmVkIGxvbmcgdmFsMSwKKwkJCXVuc2lnbmVkIGxvbmcgdmFsMiwgdW5zaWduZWQgbG9uZyB2YWwzLAorCQkJdW5zaWduZWQgbG9uZyB2YWw0KQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX192YWwwIGFzbSAoInI4IikgPSB2YWwwOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX192YWwxIGFzbSAoInI5IikgPSB2YWwxOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX192YWwyIGFzbSAoInIxMCIpID0gdmFsMjsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fdmFsMyBhc20gKCJyMTEiKSA9IHZhbDM7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3ZhbDQgYXNtICgicjE0IikgPSB2YWw0OworCisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpYTY0X2Nsb2JiZXIwIGFzbSAoInI4Iik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpYTY0X2Nsb2JiZXIxIGFzbSAoInI5Iik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpYTY0X2Nsb2JiZXIyIGFzbSAoInIxMCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaWE2NF9jbG9iYmVyMyBhc20gKCJyMTEiKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGlhNjRfY2xvYmJlcjQgYXNtICgicjE0Iik7CisKKwlhc20gdm9sYXRpbGUgKHBhcmF2aXJ0X2FsdF9idW5kbGUoX19QQVJBVklSVF9CUiwKKwkJCQkJICBQQVJBVklSVF9UWVBFKFNFVF9SUjBfVE9fUlI0KSkKKwkJICAgICAgOiAiPXIiKGlhNjRfY2xvYmJlcjApLAorCQkJIj1yIihpYTY0X2Nsb2JiZXIxKSwKKwkJCSI9ciIoaWE2NF9jbG9iYmVyMiksCisJCQkiPXIiKGlhNjRfY2xvYmJlcjMpLAorCQkJIj1yIihpYTY0X2Nsb2JiZXI0KQorCQkgICAgICA6IFBBUkFWSVJUX09QKHNldF9ycjBfdG9fcnI0KSwKKwkJCSIwIihfX3ZhbDApLCAiMSIoX192YWwxKSwgIjIiKF9fdmFsMiksCisJCQkiMyIoX192YWwzKSwgIjQiKF9fdmFsNCkKKwkJICAgICAgOiBQQVJBVklSVF9DTE9CQkVSUzUpOworfQorCisvKiB1bnNpZ25lZCBsb25nIHBhcmF2aXJ0X2dldHJlZyhpbnQgcmVnKSAqLworI2RlZmluZSBfX3BhcmF2aXJ0X2dldHJlZyhyZWcpCQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaWE2NF9pbnRyaV9yZXMgYXNtICgicjgiKTsJXAorCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fcmVnIGFzbSAoInI4IikgPSAocmVnKTsJXAorCQkJCQkJCQkJXAorCQlCVUlMRF9CVUdfT04oIV9fYnVpbHRpbl9jb25zdGFudF9wKHJlZykpOwkJXAorCQlhc20gdm9sYXRpbGUgKHBhcmF2aXJ0X2FsdF9idW5kbGUoX19QQVJBVklSVF9CUiwJXAorCQkJCQkJICBQQVJBVklSVF9UWVBFKEdFVFJFRykgXAorCQkJCQkJICArIChyZWcpKQkJXAorCQkJICAgICAgOiAiPXIiKGlhNjRfaW50cmlfcmVzKQkJCVwKKwkJCSAgICAgIDogUEFSQVZJUlRfT1AoZ2V0cmVnKSwgIjAiKF9fcmVnKQkJXAorCQkJICAgICAgOiBQQVJBVklSVF9DTE9CQkVSUzEpOwkJCVwKKwkJCQkJCQkJCVwKKwkJaWE2NF9pbnRyaV9yZXM7CQkJCQkJXAorCX0pCisKKy8qIHZvaWQgcGFyYXZpcnRfc2V0cmVnKGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsKSAqLworI2RlZmluZSBwYXJhdmlydF9zZXRyZWcocmVnLCB2YWwpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fdmFsIGFzbSAoInI4IikgPSB2YWw7CQlcCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19yZWcgYXNtICgicjkiKSA9IHJlZzsJCVwKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpYTY0X2Nsb2JiZXIxIGFzbSAoInI4Iik7CVwKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpYTY0X2Nsb2JiZXIyIGFzbSAoInI5Iik7CVwKKwkJCQkJCQkJCVwKKwkJQlVJTERfQlVHX09OKCFfX2J1aWx0aW5fY29uc3RhbnRfcChyZWcpKTsJCVwKKwkJYXNtIHZvbGF0aWxlIChwYXJhdmlydF9hbHRfYnVuZGxlKF9fUEFSQVZJUlRfQlIsCVwKKwkJCQkJCSAgUEFSQVZJUlRfVFlQRShTRVRSRUcpIFwKKwkJCQkJCSAgKyAocmVnKSkJCVwKKwkJCSAgICAgIDogIj1yIihpYTY0X2Nsb2JiZXIxKSwJCQlcCisJCQkJIj1yIihpYTY0X2Nsb2JiZXIyKQkJCVwKKwkJCSAgICAgIDogUEFSQVZJUlRfT1Aoc2V0cmVnKSwJCQlcCisJCQkJIjEiKF9fcmVnKSwgIjAiKF9fdmFsKQkJCVwKKwkJCSAgICAgIDogUEFSQVZJUlRfQ0xPQkJFUlMyKTsJCQlcCisJfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIEFTTV9TVVBQT1JURUQgKi8KKyNlbmRpZiAvKiBDT05GSUdfUEFSQVZJUlQgJiYgQVNNX1NVUFBPVEVEICovCisKICNlbmRpZiAvKiBfQVNNX0lBNjRfUEFSQVZJUlRfUFJJVk9QX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCAyMWM0MDIzLi41OTg0MDgzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NtcC5oCkBAIC0xMjYsNyArMTI2LDggQEAKIGV4dGVybiBpbnQgaXNfbXVsdGl0aHJlYWRpbmdfZW5hYmxlZCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShpbnQgY3B1KTsKLWV4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaShjcHVtYXNrX3QgbWFzayk7CitleHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayk7CisjZGVmaW5lIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrCiAKICNlbHNlIC8qIENPTkZJR19TTVAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCAwMjI5ZmI5Li4xM2FiNzE1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMTIwLDYgKzEyMCwzOCBAQAogI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKHJ3KQkJKCoodm9sYXRpbGUgaW50ICopKHJ3KSA+PSAwKQogI2RlZmluZSBfX3Jhd193cml0ZV9jYW5fbG9jayhydykJKCoodm9sYXRpbGUgaW50ICopKHJ3KSA9PSAwKQogCisjaWZkZWYgQVNNX1NVUFBPUlRFRAorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKK19fcmF3X3JlYWRfbG9ja19mbGFncyhyYXdfcndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkidGJpdC5ueiBwNiwgcDAgPSAlMSwlMlxuIgorCQkiYnIuZmV3IDNmXG4iCisJCSIxOlxuIgorCQkiZmV0Y2hhZGQ0LnJlbCByMiA9IFslMF0sIC0xOztcbiIKKwkJIihwNikgc3NtIHBzci5pXG4iCisJCSIyOlxuIgorCQkiaGludCBAcGF1c2VcbiIKKwkJImxkNCByMiA9IFslMF07O1xuIgorCQkiY21wNC5sdCBwNyxwMCA9IHIyLCByMFxuIgorCQkiKHA3KSBici5jb25kLnNwbnQuZmV3IDJiXG4iCisJCSIocDYpIHJzbSBwc3IuaVxuIgorCQkiOztcbiIKKwkJIjM6XG4iCisJCSJmZXRjaGFkZDQuYWNxIHIyID0gWyUwXSwgMTs7XG4iCisJCSJjbXA0Lmx0IHA3LHAwID0gcjIsIHIwXG4iCisJCSIocDcpIGJyLmNvbmQuc3BudC5mZXcgMWJcbiIKKwkJOiA6ICJyIihsb2NrKSwgInIiKGZsYWdzKSwgImkiKElBNjRfUFNSX0lfQklUKQorCQk6ICJwNiIsICJwNyIsICJyMiIsICJtZW1vcnkiKTsKK30KKworI2RlZmluZSBfX3Jhd19yZWFkX2xvY2sobG9jaykgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIDApCisKKyNlbHNlIC8qICFBU01fU1VQUE9SVEVEICovCisKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKHJ3LCBmbGFncykgX19yYXdfcmVhZF9sb2NrKHJ3KQorCiAjZGVmaW5lIF9fcmF3X3JlYWRfbG9jayhydykJCQkJCQkJCVwKIGRvIHsJCQkJCQkJCQkJCVwKIAlyYXdfcndsb2NrX3QgKl9fcmVhZF9sb2NrX3B0ciA9IChydyk7CQkJCQkJXApAQCAtMTMxLDYgKzE2Myw4IEBACiAJfQkJCQkJCQkJCQlcCiB9IHdoaWxlICgwKQogCisjZW5kaWYgLyogIUFTTV9TVVBQT1JURUQgKi8KKwogI2RlZmluZSBfX3Jhd19yZWFkX3VubG9jayhydykJCQkJCVwKIGRvIHsJCQkJCQkJCVwKIAlyYXdfcndsb2NrX3QgKl9fcmVhZF9sb2NrX3B0ciA9IChydyk7CQkJXApAQCAtMTM4LDIwICsxNzIsMzMgQEAKIH0gd2hpbGUgKDApCiAKICNpZmRlZiBBU01fU1VQUE9SVEVECi0jZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2socncpCQkJCQkJCVwKLWRvIHsJCQkJCQkJCQkJXAotIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJCVwKLQkJIm1vdiBhci5jY3YgPSByMFxuIgkJCQkJCVwKLQkJImRlcCByMjkgPSAtMSwgcjAsIDMxLCAxOztcbiIJCQkJCVwKLQkJIjE6XG4iCQkJCQkJCQlcCi0JCSJsZDQgcjIgPSBbJTBdOztcbiIJCQkJCQlcCi0JCSJjbXA0LmVxIHAwLHA3ID0gcjAscjJcbiIJCQkJCVwKLQkJIihwNykgYnIuY29uZC5zcG50LmZldyAxYiBcbiIJCQkJCVwKLQkJImNtcHhjaGc0LmFjcSByMiA9IFslMF0sIHIyOSwgYXIuY2N2OztcbiIJCQlcCi0JCSJjbXA0LmVxIHAwLHA3ID0gcjAsIHIyXG4iCQkJCQlcCi0JCSIocDcpIGJyLmNvbmQuc3BudC5mZXcgMWI7O1xuIgkJCQkJXAotCQk6OiAiciIocncpIDogImFyLmNjdiIsICJwNyIsICJyMiIsICJyMjkiLCAibWVtb3J5Iik7CQlcCi19IHdoaWxlKDApCisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAorX19yYXdfd3JpdGVfbG9ja19mbGFncyhyYXdfcndsb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkidGJpdC5ueiBwNiwgcDAgPSAlMSwgJTJcbiIKKwkJIm1vdiBhci5jY3YgPSByMFxuIgorCQkiZGVwIHIyOSA9IC0xLCByMCwgMzEsIDFcbiIKKwkJImJyLmZldyAzZjs7XG4iCisJCSIxOlxuIgorCQkiKHA2KSBzc20gcHNyLmlcbiIKKwkJIjI6XG4iCisJCSJoaW50IEBwYXVzZVxuIgorCQkibGQ0IHIyID0gWyUwXTs7XG4iCisJCSJjbXA0LmVxIHAwLHA3ID0gcjAsIHIyXG4iCisJCSIocDcpIGJyLmNvbmQuc3BudC5mZXcgMmJcbiIKKwkJIihwNikgcnNtIHBzci5pXG4iCisJCSI7O1xuIgorCQkiMzpcbiIKKwkJImNtcHhjaGc0LmFjcSByMiA9IFslMF0sIHIyOSwgYXIuY2N2OztcbiIKKwkJImNtcDQuZXEgcDAscDcgPSByMCwgcjJcbiIKKwkJIihwNykgYnIuY29uZC5zcG50LmZldyAxYjs7XG4iCisJCTogOiAiciIobG9jayksICJyIihmbGFncyksICJpIihJQTY0X1BTUl9JX0JJVCkKKwkJOiAiYXIuY2N2IiwgInA2IiwgInA3IiwgInIyIiwgInIyOSIsICJtZW1vcnkiKTsKK30KKworI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrKHJ3KSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKHJ3LCAwKQogCiAjZGVmaW5lIF9fcmF3X3dyaXRlX3RyeWxvY2socncpCQkJCQkJCVwKICh7CQkJCQkJCQkJCVwKQEAgLTE3NCw2ICsyMjEsOCBAQAogCiAjZWxzZSAvKiAhQVNNX1NVUFBPUlRFRCAqLwogCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MobCwgZmxhZ3MpIF9fcmF3X3dyaXRlX2xvY2sobCkKKwogI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrKGwpCQkJCQkJCQlcCiAoewkJCQkJCQkJCQkJXAogCV9fdTY0IGlhNjRfdmFsLCBpYTY0X3NldF92YWwgPSBpYTY0X2RlcF9taSgtMSwgMCwgMzEsIDEpOwkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90aW1leC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RpbWV4LmgKaW5kZXggNGUwM2NmZS4uODZjN2RiOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RpbWV4LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3RpbWV4LmgKQEAgLTQwLDUgKzQwLDYgQEAKIH0KIAogZXh0ZXJuIHZvaWQgaWE2NF9jcHVfbG9jYWxfdGljayAodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlhNjRfbmF0aXZlX3NjaGVkX2Nsb2NrICh2b2lkKTsKIAogI2VuZGlmIC8qIF9BU01fSUE2NF9USU1FWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IGYyNjBkY2YuLjdiNGM4YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC0xMTIsMTEgKzExMiw2IEBACiAKIGV4dGVybiB2b2lkIGFyY2hfZml4X3BoeXNfcGFja2FnZV9pZChpbnQgbnVtLCB1MzIgc2xvdCk7CiAKLSNkZWZpbmUgcGNpYnVzX3RvX2NwdW1hc2soYnVzKQkocGNpYnVzX3RvX25vZGUoYnVzKSA9PSAtMSA/IFwKLQkJCQkJQ1BVX01BU0tfQUxMIDogXAotCQkJCQlub2RlX3RvX2NwdW1hc2socGNpYnVzX3RvX25vZGUoYnVzKSkgXAotCQkJCSkKLQogI2RlZmluZSBjcHVtYXNrX29mX3BjaWJ1cyhidXMpCShwY2lidXNfdG9fbm9kZShidXMpID09IC0xID8JCVwKIAkJCQkgY3B1X2FsbF9tYXNrIDoJCQkJXAogCQkJCSBjcHVtYXNrX29mX25vZGUocGNpYnVzX3RvX25vZGUoYnVzKSkpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdXYvdXZfaHViLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKaW5kZXggZjYwNzAxOC4uNTNlOWRmYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91di91dl9odWIuaApAQCAtMzA1LDUgKzMwNSwxMSBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgdXZfaHViX3NlbmRfaXBpKGludCBwbm9kZSwgaW50IGFwaWNpZCwgaW50IHZlY3RvcikKK3sKKwkvKiBub3QgY3VycmVudGx5IG5lZWRlZCBvbiBpYTY0ICovCit9CisKKwogI2VuZGlmIC8qIF9fQVNNX0lBNjRfVVZfSFVCX18gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS91di91dl9tbXJzLmgKaW5kZXggYzE0OWVmMC4uZmUwYjhmMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oCkBAIC04LDggKzgsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICovCiAKLSNpZm5kZWYgX19BU01fSUE2NF9VVl9NTVJTX18KLSNkZWZpbmUgX19BU01fSUE2NF9VVl9NTVJTX18KKyNpZm5kZWYgX0FTTV9JQTY0X1VWX1VWX01NUlNfSAorI2RlZmluZSBfQVNNX0lBNjRfVVZfVVZfTU1SU19ICiAKICNkZWZpbmUgVVZfTU1SX0VOQUJMRQkJKDFVTCA8PCA2MykKIApAQCAtMjQzLDYgKzI0MywxNTggQEAKICNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9BTElBU18zMiAweDAwNWYwCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUcgMHg2MWIwMFVMCisKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfVkVDVE9SX1NIRlQgMAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19ETV9TSEZUIDgKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfRE1fTUFTSyAweDAwMDAwMDAwMDAwMDA3MDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfU1RBVFVTX1NIRlQgMTIKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfUF9TSEZUIDEzCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1BfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19UX1NIRlQgMTUKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX01fU0hGVCAxNgorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX0FQSUNfSURfTUFTSyAweGZmZmZmZmZmMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfZ3IwX3RsYl9pbnQwX2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ncjBfdGxiX2ludDBfY29uZmlnX3MgeworCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUcgMHg2MWI0MFVMCisKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfVkVDVE9SX1NIRlQgMAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19ETV9TSEZUIDgKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfRE1fTUFTSyAweDAwMDAwMDAwMDAwMDA3MDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfU1RBVFVTX1NIRlQgMTIKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfUF9TSEZUIDEzCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1BfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19UX1NIRlQgMTUKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX01fU0hGVCAxNgorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX0FQSUNfSURfTUFTSyAweGZmZmZmZmZmMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfZ3IwX3RsYl9pbnQxX2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ncjBfdGxiX2ludDFfY29uZmlnX3MgeworCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUcgMHg2MWYwMFVMCisKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfVkVDVE9SX1NIRlQgMAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19ETV9TSEZUIDgKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfRE1fTUFTSyAweDAwMDAwMDAwMDAwMDA3MDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfU1RBVFVTX1NIRlQgMTIKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfUF9TSEZUIDEzCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1BfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19UX1NIRlQgMTUKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX01fU0hGVCAxNgorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX0FQSUNfSURfTUFTSyAweGZmZmZmZmZmMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfZ3IxX3RsYl9pbnQwX2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ncjFfdGxiX2ludDBfY29uZmlnX3MgeworCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUcgMHg2MWY0MFVMCisKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfVkVDVE9SX1NIRlQgMAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19ETV9TSEZUIDgKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfRE1fTUFTSyAweDAwMDAwMDAwMDAwMDA3MDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfU1RBVFVTX1NIRlQgMTIKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfUF9TSEZUIDEzCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1BfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19UX1NIRlQgMTUKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX01fU0hGVCAxNgorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX0FQSUNfSURfTUFTSyAweGZmZmZmZmZmMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfZ3IxX3RsYl9pbnQxX2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ncjFfdGxiX2ludDFfY29uZmlnX3MgeworCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9JTlRfQ01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICNkZWZpbmUgVVZIX0lOVF9DTVBCIDB4MjIwODBVTApAQCAtNjcwLDQgKzgyMiw0IEBACiB9OwogCiAKLSNlbmRpZiAvKiBfX0FTTV9JQTY0X1VWX01NUlNfXyAqLworI2VuZGlmIC8qIF9BU01fSUE2NF9VVl9VVl9NTVJTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaHlwZXJ2aXNvci5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9oeXBlcnZpc29yLmgKaW5kZXggN2E4MDRlOC4uZTQyNTIyNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9oeXBlcnZpc29yLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9oeXBlcnZpc29yLmgKQEAgLTMzLDkgKzMzLDYgQEAKICNpZm5kZWYgX0FTTV9JQTY0X1hFTl9IWVBFUlZJU09SX0gKICNkZWZpbmUgX0FTTV9JQTY0X1hFTl9IWVBFUlZJU09SX0gKIAotI2lmZGVmIENPTkZJR19YRU4KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvdmVyc2lvbi5oPgkvKiB0byBjb21waWxlIGZlYXR1cmUuYyAqLwogI2luY2x1ZGUgPHhlbi9mZWF0dXJlcy5oPgkJLyogdG8gY29taXBsZSB4ZW4tbmV0ZnJvbnQuYyAqLwpAQCAtNDMsMjIgKzQwLDMyIEBACiAKIC8qIHhlbl9kb21haW5fdHlwZSBpcyBzZXQgYmVmb3JlIGV4ZWN1dGluZyBhbnkgQyBjb2RlIGJ5IGVhcmx5X3hlbl9zZXR1cCAqLwogZW51bSB4ZW5fZG9tYWluX3R5cGUgewotCVhFTl9OQVRJVkUsCi0JWEVOX1BWX0RPTUFJTiwKLQlYRU5fSFZNX0RPTUFJTiwKKwlYRU5fTkFUSVZFLAkvKiBydW5uaW5nIG9uIGJhcmUgaGFyZHdhcmUgKi8KKwlYRU5fUFZfRE9NQUlOLAkvKiBydW5uaW5nIGluIGEgUFYgZG9tYWluICovCisJWEVOX0hWTV9ET01BSU4sCS8qIHJ1bm5pbmcgaW4gYSBYZW4gaHZtIGRvbWFpbiovCiB9OwogCisjaWZkZWYgQ09ORklHX1hFTgogZXh0ZXJuIGVudW0geGVuX2RvbWFpbl90eXBlIHhlbl9kb21haW5fdHlwZTsKKyNlbHNlCisjZGVmaW5lIHhlbl9kb21haW5fdHlwZQkJWEVOX05BVElWRQorI2VuZGlmCiAKICNkZWZpbmUgeGVuX2RvbWFpbigpCQkoeGVuX2RvbWFpbl90eXBlICE9IFhFTl9OQVRJVkUpCi0jZGVmaW5lIHhlbl9wdl9kb21haW4oKQkJKHhlbl9kb21haW5fdHlwZSA9PSBYRU5fUFZfRE9NQUlOKQotI2RlZmluZSB4ZW5faW5pdGlhbF9kb21haW4oKQkoeGVuX3B2X2RvbWFpbigpICYmIFwKKyNkZWZpbmUgeGVuX3B2X2RvbWFpbigpCQkoeGVuX2RvbWFpbigpICYmCQkJXAorCQkJCSB4ZW5fZG9tYWluX3R5cGUgPT0gWEVOX1BWX0RPTUFJTikKKyNkZWZpbmUgeGVuX2h2bV9kb21haW4oKQkoeGVuX2RvbWFpbigpICYmCQkJXAorCQkJCSB4ZW5fZG9tYWluX3R5cGUgPT0gWEVOX0hWTV9ET01BSU4pCisKKyNpZmRlZiBDT05GSUdfWEVOX0RPTTAKKyNkZWZpbmUgeGVuX2luaXRpYWxfZG9tYWluKCkJKHhlbl9wdl9kb21haW4oKSAmJgkJCVwKIAkJCQkgKHhlbl9zdGFydF9pbmZvLT5mbGFncyAmIFNJRl9JTklURE9NQUlOKSkKLSNkZWZpbmUgeGVuX2h2bV9kb21haW4oKQkoeGVuX2RvbWFpbl90eXBlID09IFhFTl9IVk1fRE9NQUlOKQorI2Vsc2UKKyNkZWZpbmUgeGVuX2luaXRpYWxfZG9tYWluKCkJKDApCisjZW5kaWYKIAotLyogZGVwcmVjYXRlZC4gcmVtb3ZlIHRoaXMgKi8KLSNkZWZpbmUgaXNfcnVubmluZ19vbl94ZW4oKQkoeGVuX2RvbWFpbl90eXBlID09IFhFTl9QVl9ET01BSU4pCiAKKyNpZmRlZiBDT05GSUdfWEVOCiBleHRlcm4gc3RydWN0IHNoYXJlZF9pbmZvICpIWVBFUlZJU09SX3NoYXJlZF9pbmZvOwogZXh0ZXJuIHN0cnVjdCBzdGFydF9pbmZvICp4ZW5fc3RhcnRfaW5mbzsKIApAQCAtNzQsMTYgKzgxLDYgQEAKIAogLyogRm9yIHNldHVwX2FyY2goKSBpbiBhcmNoL2lhNjQva2VybmVsL3NldHVwLmMgKi8KIHZvaWQgeGVuX2lhNjRfZW5hYmxlX29wdF9mZWF0dXJlKHZvaWQpOwotCi0jZWxzZSAvKiBDT05GSUdfWEVOICovCi0KLSNkZWZpbmUgeGVuX2RvbWFpbigpCQkoMCkKLSNkZWZpbmUgeGVuX3B2X2RvbWFpbigpCQkoMCkKLSNkZWZpbmUgeGVuX2luaXRpYWxfZG9tYWluKCkJKDApCi0jZGVmaW5lIHhlbl9odm1fZG9tYWluKCkJKDApCi0jZGVmaW5lIGlzX3J1bm5pbmdfb25feGVuKCkJKDApCS8qIGRlcHJlY2F0ZWQuIHJlbW92ZSB0aGlzICovCiAjZW5kaWYKIAotI2RlZmluZSBpc19pbml0aWFsX3hlbmRvbWFpbigpCSgwKQkvKiBkZXByZWNhdGVkLiByZW1vdmUgdGhpcyAqLwotCiAjZW5kaWYgLyogX0FTTV9JQTY0X1hFTl9IWVBFUlZJU09SX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vaW5zdC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9pbnN0LmgKaW5kZXggMTljMmFlMS4uYzUzYTQ3NiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9pbnN0LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9pbnN0LmgKQEAgLTMzLDYgKzMzLDkgQEAKICNkZWZpbmUgX19wYXJhdmlydF93b3JrX3Byb2Nlc3NlZF9zeXNjYWxsX3RhcmdldCBcCiAJCQkJCQl4ZW5fd29ya19wcm9jZXNzZWRfc3lzY2FsbAogCisjZGVmaW5lIHBhcmF2aXJ0X2ZzeXNjYWxsX3RhYmxlCQkJeGVuX2ZzeXNjYWxsX3RhYmxlCisjZGVmaW5lIHBhcmF2aXJ0X2ZzeXNfYnViYmxlX2Rvd24JCXhlbl9mc3lzX2J1YmJsZV9kb3duCisKICNkZWZpbmUgTU9WX0ZST01fSUZBKHJlZykJXAogCW1vdmwgcmVnID0gWFNJX0lGQTsJXAogCTs7CQkJXApAQCAtMTEwLDYgKzExMywyNyBAQAogLmVuZG0KICNkZWZpbmUgTU9WX0ZST01fUFNSKHByZWQsIHJlZywgY2xvYikJX19NT1ZfRlJPTV9QU1IgcHJlZCwgcmVnLCBjbG9iCiAKKy8qIGFzc3VtaW5nIGFyLml0YyBpcyByZWFkIHdpdGggaW50ZXJydXB0IGRpc2FibGVkLiAqLworI2RlZmluZSBNT1ZfRlJPTV9JVEMocHJlZCwgcHJlZF9jbG9iLCByZWcsIGNsb2IpCQlcCisocHJlZCkJbW92bCBjbG9iID0gWFNJX0lUQ19PRkZTRVQ7CQkJCVwKKwk7OwkJCQkJCQlcCisocHJlZCkJbGQ4IGNsb2IgPSBbY2xvYl07CQkJCQlcCisocHJlZCkJbW92IHJlZyA9IGFyLml0YzsJCQkJCVwKKwk7OwkJCQkJCQlcCisocHJlZCkJYWRkIHJlZyA9IHJlZywgY2xvYjsJCQkJCVwKKwk7OwkJCQkJCQlcCisocHJlZCkJbW92bCBjbG9iID0gWFNJX0lUQ19MQVNUOwkJCQlcCisJOzsJCQkJCQkJXAorKHByZWQpCWxkOCBjbG9iID0gW2Nsb2JdOwkJCQkJXAorCTs7CQkJCQkJCVwKKyhwcmVkKQljbXAuZ2V1LnVuYyBwcmVkX2Nsb2IsIHAwID0gY2xvYiwgcmVnOwkJCVwKKwk7OwkJCQkJCQlcCisocHJlZF9jbG9iKQlhZGQgcmVnID0gMSwgY2xvYjsJCQkJXAorCTs7CQkJCQkJCVwKKyhwcmVkKQltb3ZsIGNsb2IgPSBYU0lfSVRDX0xBU1Q7CQkJCVwKKwk7OwkJCQkJCQlcCisocHJlZCkJc3Q4IFtjbG9iXSA9IHJlZworCiAKICNkZWZpbmUgTU9WX1RPX0lGQShyZWcsIGNsb2IpCVwKIAltb3ZsIGNsb2IgPSBYU0lfSUZBOwlcCkBAIC0zNjIsNiArMzg2LDEwIEBACiAjZGVmaW5lIFJTTV9QU1JfRFQJCVwKIAlYRU5fSFlQRVJfUlNNX1BTUl9EVAogCisjZGVmaW5lIFJTTV9QU1JfQkVfSShjbG9iMCwgY2xvYjEpCVwKKwlSU01fUFNSX0kocDAsIGNsb2IwLCBjbG9iMSk7CVwKKwlydW0gcHNyLmJlCisKICNkZWZpbmUgU1NNX1BTUl9EVF9BTkRfU1JMWl9JCVwKIAlYRU5fSFlQRVJfU1NNX1BTUl9EVAogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaAppbmRleCBmMDBmYWI0MC4uZTk1MWU3NCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9pbnRlcmZhY2UuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2ludGVyZmFjZS5oCkBAIC0yMDksNiArMjA5LDE1IEBACiAJCQl1bnNpZ25lZCBsb25nIGtyc1s4XTsJLyoga2VybmVsIHJlZ2lzdGVycyAqLwogCQkJdW5zaWduZWQgbG9uZyB0bXBbMTZdOwkvKiB0ZW1wIHJlZ2lzdGVycwogCQkJCQkJICAgKGUuZy4gZm9yIGh5cGVycHJpdm9wcykgKi8KKworCQkJLyogaXRjIHBhcmF2aXJ0dWFsaXphdGlvbgorCQkJICogdkFSLklUQyA9IG1BUi5JVEMgKyBpdGNfb2Zmc2V0CisJCQkgKiBpdGNfbGFzdCBpcyBvbmUgd2hpY2ggd2FzIGxhc3RseSBwYXNzZWQgdG8KKwkJCSAqIHRoZSBndWVzdCBPUyBpbiBvcmRlciB0byBwcmV2ZW50IGl0IGZyb20KKwkJCSAqIGdvaW5nIGJhY2t3b3Jkcy4KKwkJCSAqLworCQkJdW5zaWduZWQgbG9uZyBpdGNfb2Zmc2V0OworCQkJdW5zaWduZWQgbG9uZyBpdGNfbGFzdDsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vbWluc3RhdGUuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vbWluc3RhdGUuaAppbmRleCA0ZDkyZDliLi5jNTdmYTkxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL21pbnN0YXRlLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9taW5zdGF0ZS5oCkBAIC0xLDMgKzEsMTIgQEAKKworI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCisvKiByZWFkIGFyLml0YyBpbiBhZHZhbmNlLCBhbmQgdXNlIGl0IGJlZm9yZSBsZWF2aW5nIGJhbmsgMCAqLworI2RlZmluZSBYRU5fQUNDT1VOVF9HRVRfU1RBTVAJCVwKKwlNT1ZfRlJPTV9JVEMocFVTdGssIHA2LCByMjAsIHIyKTsKKyNlbHNlCisjZGVmaW5lIFhFTl9BQ0NPVU5UX0dFVF9TVEFNUAorI2VuZGlmCisKIC8qCiAgKiBET19TQVZFX01JTiBzd2l0Y2hlcyB0byB0aGUga2VybmVsIHN0YWNrcyAoaWYgbmVjZXNzYXJ5KSBhbmQgc2F2ZXMKICAqIHRoZSBtaW5pbXVtIHN0YXRlIG5lY2Vzc2FyeSB0aGF0IGFsbG93cyB1cyB0byB0dXJuIHBzci5pYyBiYWNrCkBAIC0xMjMsNyArMTMyLDcgQEAKIAk7OwkJCQkJCQkJCQkJXAogLm1lbS5vZmZzZXQgMCwwOyBzdDguc3BpbGwgW3IxNl09cjIsMTY7CQkJCQkJCQlcCiAubWVtLm9mZnNldCA4LDA7IHN0OC5zcGlsbCBbcjE3XT1yMywxNjsJCQkJCQkJCVwKLQlBQ0NPVU5UX0dFVF9TVEFNUAkJCQkJCQkJCVwKKwlYRU5fQUNDT1VOVF9HRVRfU1RBTVAJCQkJCQkJCQlcCiAJYWRkcyByMj1JQTY0X1BUX1JFR1NfUjE2X09GRlNFVCxyMTsJCQkJCQkJXAogCTs7CQkJCQkJCQkJCQlcCiAJRVhUUkE7CQkJCQkJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL3BhdGNobGlzdC5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9wYXRjaGxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWU5NDRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9wYXRjaGxpc3QuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL3BhdGNobGlzdC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElzYWt1IFlhbWFoYXRhIDx5YW1haGF0YSBhdCB2YWxpbnV4IGNvIGpwPgorICogICAgICAgICAgICAgICAgICAgIFZBIExpbnV4IFN5c3RlbXMgSmFwYW4gSy5LLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2RlZmluZSBfX3BhcmF2aXJ0X3N0YXJ0X2dhdGVfZnN5c2NhbGxfcGF0Y2hsaXN0CQlcCisJX194ZW5fc3RhcnRfZ2F0ZV9mc3lzY2FsbF9wYXRjaGxpc3QKKyNkZWZpbmUgX19wYXJhdmlydF9lbmRfZ2F0ZV9mc3lzY2FsbF9wYXRjaGxpc3QJCQlcCisJX194ZW5fZW5kX2dhdGVfZnN5c2NhbGxfcGF0Y2hsaXN0CisjZGVmaW5lIF9fcGFyYXZpcnRfc3RhcnRfZ2F0ZV9icmxfZnN5c19idWJibGVfZG93bl9wYXRjaGxpc3QJXAorCV9feGVuX3N0YXJ0X2dhdGVfYnJsX2ZzeXNfYnViYmxlX2Rvd25fcGF0Y2hsaXN0CisjZGVmaW5lIF9fcGFyYXZpcnRfZW5kX2dhdGVfYnJsX2ZzeXNfYnViYmxlX2Rvd25fcGF0Y2hsaXN0CVwKKwlfX3hlbl9lbmRfZ2F0ZV9icmxfZnN5c19idWJibGVfZG93bl9wYXRjaGxpc3QKKyNkZWZpbmUgX19wYXJhdmlydF9zdGFydF9nYXRlX3Z0b3BfcGF0Y2hsaXN0CQkJXAorCV9feGVuX3N0YXJ0X2dhdGVfdnRvcF9wYXRjaGxpc3QKKyNkZWZpbmUgX19wYXJhdmlydF9lbmRfZ2F0ZV92dG9wX3BhdGNobGlzdAkJCVwKKwlfX3hlbl9lbmRfZ2F0ZV92dG9wX3BhdGNobGlzdAorI2RlZmluZSBfX3BhcmF2aXJ0X3N0YXJ0X2dhdGVfbWNraW5sZXlfZTlfcGF0Y2hsaXN0CQlcCisJX194ZW5fc3RhcnRfZ2F0ZV9tY2tpbmxleV9lOV9wYXRjaGxpc3QKKyNkZWZpbmUgX19wYXJhdmlydF9lbmRfZ2F0ZV9tY2tpbmxleV9lOV9wYXRjaGxpc3QJCVwKKwlfX3hlbl9lbmRfZ2F0ZV9tY2tpbmxleV9lOV9wYXRjaGxpc3QKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vcHJpdm9wLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL3ByaXZvcC5oCmluZGV4IDcxZWM3NTQuLmZiNGVjNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vcHJpdm9wLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9wcml2b3AuaApAQCAtNTUsNiArNTUsOCBAQAogI2RlZmluZSBYU0lfQkFOSzFfUjE2CQkJKFhTSV9CQVNFICsgWFNJX0JBTksxX1IxNl9PRlMpCiAjZGVmaW5lIFhTSV9CQU5LTlVNCQkJKFhTSV9CQVNFICsgWFNJX0JBTktOVU1fT0ZTKQogI2RlZmluZSBYU0lfSUhBCQkJCShYU0lfQkFTRSArIFhTSV9JSEFfT0ZTKQorI2RlZmluZSBYU0lfSVRDX09GRlNFVAkJCShYU0lfQkFTRSArIFhTSV9JVENfT0ZGU0VUX09GUykKKyNkZWZpbmUgWFNJX0lUQ19MQVNUCQkJKFhTSV9CQVNFICsgWFNJX0lUQ19MQVNUX09GUykKICNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtNjcsNyArNjksNyBAQAogICogIG1heSBoYXZlIGRpZmZlcmVudCBzZW1hbnRpY3MgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhleSBhcmUgZXhlY3V0ZWQKICAqICBhdCBQTDAgdnMgUEwhPTAuICBXaGVuIHBhcmF2aXJ0dWFsaXplZCwgdGhlc2UgaW5zdHJ1Y3Rpb25zIG11c3RuJ3QKICAqICBiZSBhbGxvd2VkIHRvIGV4ZWN1dGUgZGlyZWN0bHksIGxlc3QgaW5jb3JyZWN0IHNlbWFudGljcyByZXN1bHQuICovCi1leHRlcm4gdm9pZCB4ZW5fZmModW5zaWduZWQgbG9uZyBhZGRyKTsKK2V4dGVybiB2b2lkIHhlbl9mYyh2b2lkICphZGRyKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHhlbl90aGFzaCh1bnNpZ25lZCBsb25nIGFkZHIpOwogCiAvKiBOb3RlIHRoYXQgInR0YWciIGFuZCAiY292ZXIiIGFyZSBhbHNvIHByaXZpbGVnZS1zZW5zaXRpdmU7ICJ0dGFnIgpAQCAtODAsOCArODIsMTAgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHhlbl9nZXRfY3B1aWQoaW50IGluZGV4KTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHhlbl9nZXRfcG1kKGludCBpbmRleCk7CiAKKyNpZm5kZWYgQVNNX1NVUFBPUlRFRAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGVuX2dldF9lZmxhZyh2b2lkKTsJLyogc2VlIHhlbl9pYTY0X2dldHJlZyAqLwogZXh0ZXJuIHZvaWQgeGVuX3NldF9lZmxhZyh1bnNpZ25lZCBsb25nKTsJLyogc2VlIHhlbl9pYTY0X3NldHJlZyAqLworI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBJbnN0cnVjdGlvbnMgcGFyYXZpcnR1YWxpemVkIGZvciBwZXJmb3JtYW5jZSAqLwpAQCAtMTA2LDYgKzExMCw3IEBACiAjZGVmaW5lIHhlbl9nZXRfdmlydHVhbF9wZW5kKCkJCVwKIAkoKigoKHVpbnQ4X3QgKilYRU5fTUFQUEVEUkVHUy0+aW50ZXJydXB0X21hc2tfYWRkcikgLSAxKSkKIAorI2lmbmRlZiBBU01fU1VQUE9SVEVECiAvKiBBbHRob3VnaCBhbGwgcHJpdmlsZWdlZCBvcGVyYXRpb25zIGNhbiBiZSBsZWZ0IHRvIHRyYXAgYW5kIHdpbGwKICAqIGJlIHByb3Blcmx5IGhhbmRsZWQgYnkgWGVuLCBzb21lIGFyZSBmcmVxdWVudCBlbm91Z2ggdGhhdCB3ZSB1c2UKICAqIGh5cGVycHJpdm9wcyBmb3IgcGVyZm9ybWFuY2UuICovCkBAIC0xMjMsNiArMTI4LDcgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZhbDQpOwogZXh0ZXJuIHZvaWQgeGVuX3NldF9rcih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHZhbCk7CiBleHRlcm4gdm9pZCB4ZW5fcHRjZ2EodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworI2VuZGlmIC8qICFBU01fU1VQUE9SVEVEICovCiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCmluZGV4IGYyNzc4ZjIuLjZiN2VkY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQpAQCAtMiwxMCArMiwxNCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KICMKIAoraWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCitDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnCitlbmRpZgorCiBleHRyYS15CTo9IGhlYWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwogCiBvYmoteSA6PSBhY3BpLm8gZW50cnkubyBlZmkubyBlZmlfc3R1Yi5vIGdhdGUtZGF0YS5vIGZzeXMubyBpYTY0X2tzeW1zLm8gaXJxLm8gaXJxX2lhNjQubwlcCi0JIGlycV9sc2FwaWMubyBpdnQubyBtYWNodmVjLm8gcGFsLm8gcGF0Y2gubyBwcm9jZXNzLm8gcGVyZm1vbi5vIHB0cmFjZS5vIHNhbC5vCQlcCisJIGlycV9sc2FwaWMubyBpdnQubyBtYWNodmVjLm8gcGFsLm8gcGFyYXZpcnRfcGF0Y2hsaXN0Lm8gcGF0Y2gubyBwcm9jZXNzLm8gcGVyZm1vbi5vIHB0cmFjZS5vIHNhbC5vCQlcCiAJIHNhbGluZm8ubyBzZXR1cC5vIHNpZ25hbC5vIHN5c19pYTY0Lm8gdGltZS5vIHRyYXBzLm8gdW5hbGlnbmVkLm8gXAogCSB1bndpbmQubyBtY2EubyBtY2FfYXNtLm8gdG9wb2xvZ3kubyBkbWEtbWFwcGluZy5vCiAKQEAgLTI4LDYgKzMyLDcgQEAKIG9iai0kKENPTkZJR19DUFVfRlJFUSkJCSs9IGNwdWZyZXEvCiBvYmotJChDT05GSUdfSUE2NF9NQ0FfUkVDT1ZFUlkpCSs9IG1jYV9yZWNvdmVyeS5vCiBvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMubyBqcHJvYmVzLm8KK29iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkJKz0gZnRyYWNlLm8KIG9iai0kKENPTkZJR19LRVhFQykJCSs9IG1hY2hpbmVfa2V4ZWMubyByZWxvY2F0ZV9rZXJuZWwubyBjcmFzaC5vCiBvYmotJChDT05GSUdfQ1JBU0hfRFVNUCkJKz0gY3Jhc2hfZHVtcC5vCiBvYmotJChDT05GSUdfSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1IpCSs9IHVuY2FjaGVkLm8KQEAgLTM2LDcgKzQxLDggQEAKIG1jYV9yZWNvdmVyeS15CQkJKz0gbWNhX2Rydi5vIG1jYV9kcnZfYXNtLm8KIG9iai0kKENPTkZJR19JQTY0X01DX0VSUl9JTkpFQ1QpKz0gZXJyX2luamVjdC5vCiAKLW9iai0kKENPTkZJR19QQVJBVklSVCkJCSs9IHBhcmF2aXJ0Lm8gcGFyYXZpcnRlbnRyeS5vCitvYmotJChDT05GSUdfUEFSQVZJUlQpCQkrPSBwYXJhdmlydC5vIHBhcmF2aXJ0ZW50cnkubyBcCisJCQkJICAgcGFyYXZpcnRfcGF0Y2gubwogCiBvYmotJChDT05GSUdfSUE2NF9FU0kpCQkrPSBlc2kubwogaWZuZXEgKCQoQ09ORklHX0lBNjRfRVNJKSwpCkBAIC00NSwzNSArNTEsMTMgQEAKIG9iai0kKENPTkZJR19ETUFSKQkJKz0gcGNpLWRtYS5vCiBvYmotJChDT05GSUdfU1dJT1RMQikJCSs9IHBjaS1zd2lvdGxiLm8KIAotIyBUaGUgZ2F0ZSBEU08gaW1hZ2UgaXMgYnVpbHQgdXNpbmcgYSBzcGVjaWFsIGxpbmtlciBzY3JpcHQuCi10YXJnZXRzICs9IGdhdGUuc28gZ2F0ZS1zeW1zLm8KLQotZXh0cmEteSArPSBnYXRlLnNvIGdhdGUtc3ltcy5vIGdhdGUubGRzIGdhdGUubwotCiAjIGZwX2VtdWxhdGUoKSBleHBlY3RzIGYyLWY1LGYxNi1mMzEgdG8gY29udGFpbiB0aGUgdXNlci1sZXZlbCBzdGF0ZS4KIENGTEFHU190cmFwcy5vICArPSAtbWZpeGVkLXJhbmdlPWYyLWY1LGYxNi1mMzEKIAotQ1BQRkxBR1NfZ2F0ZS5sZHMgOj0gLVAgLUMgLVUkKEFSQ0gpCi0KLXF1aWV0X2NtZF9nYXRlID0gR0FURSAkQAotICAgICAgY21kX2dhdGUgPSAkKENDKSAtbm9zdGRsaWIgJChHQVRFQ0ZMQUdTXyQoQEYpKSAtV2wsLVQsJChmaWx0ZXItb3V0IEZPUkNFLCReKSAtbyAkQAotCi1HQVRFQ0ZMQUdTX2dhdGUuc28gPSAtc2hhcmVkIC1zIC1XbCwtc29uYW1lPWxpbnV4LWdhdGUuc28uMSBcCi0JCSAgICAgJChjYWxsIGxkLW9wdGlvbiwgLVdsJChjb21tYSktLWhhc2gtc3R5bGU9c3lzdikKLSQob2JqKS9nYXRlLnNvOiAkKG9iaikvZ2F0ZS5sZHMgJChvYmopL2dhdGUubyBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLGdhdGUpCi0KLSQob2JqKS9idWlsdC1pbi5vOiAkKG9iaikvZ2F0ZS1zeW1zLm8KLSQob2JqKS9idWlsdC1pbi5vOiBsZF9mbGFncyArPSAtUiAkKG9iaikvZ2F0ZS1zeW1zLm8KLQotR0FURUNGTEFHU19nYXRlLXN5bXMubyA9IC1yCi0kKG9iaikvZ2F0ZS1zeW1zLm86ICQob2JqKS9nYXRlLmxkcyAkKG9iaikvZ2F0ZS5vIEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsZ2F0ZSkKLQotIyBnYXRlLWRhdGEubyBjb250YWlucyB0aGUgZ2F0ZSBEU08gaW1hZ2UgYXMgZGF0YSBpbiBzZWN0aW9uIC5kYXRhLmdhdGUuCi0jIFdlIG11c3QgYnVpbGQgZ2F0ZS5zbyBiZWZvcmUgd2UgY2FuIGFzc2VtYmxlIGl0LgotIyBOb3RlOiBrYnVpbGQgZG9lcyBub3QgdHJhY2sgdGhpcyBkZXBlbmRlbmN5IGR1ZSB0byB1c2FnZSBvZiAuaW5jYmluCi0kKG9iaikvZ2F0ZS1kYXRhLm86ICQob2JqKS9nYXRlLnNvCisjIFRoZSBnYXRlIERTTyBpbWFnZSBpcyBidWlsdCB1c2luZyBhIHNwZWNpYWwgbGlua2VyIHNjcmlwdC4KK2luY2x1ZGUgJChzcmN0cmVlKS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlLmdhdGUKKyMgdGVsbCBjb21waWxlZCBmb3IgbmF0aXZlCitDUFBGTEFHU19nYXRlLmxkcyArPSAtRF9fSUE2NF9HQVRFX1BBUkFWSVJUVUFMSVpFRF9OQVRJVkUKIAogIyBDYWxjdWxhdGUgTlJfSVJRID0gbWF4KElBNjRfTkFUSVZFX05SX0lSUVMsIFhFTl9OUl9JUlFTLCAuLi4pIGJhc2VkIG9uIGNvbmZpZwogZGVmaW5lIHNlZC15CkBAIC0xMDksOSArOTMsOSBAQAogY2xlYW4tZmlsZXMgKz0gJChvYmp0cmVlKS9pbmNsdWRlL2FzbS1pYTY0L25yLWlycXMuaAogCiAjCi0jIG5hdGl2ZSBpdnQuUyBhbmQgZW50cnkuUworIyBuYXRpdmUgaXZ0LlMsIGVudHJ5LlMgYW5kIGZzeXMuUwogIwotQVNNX1BBUkFWSVJUX09CSlMgPSBpdnQubyBlbnRyeS5vCitBU01fUEFSQVZJUlRfT0JKUyA9IGl2dC5vIGVudHJ5Lm8gZnN5cy5vCiBkZWZpbmUgcGFyYXZpcnR1YWxpemVkX25hdGl2ZQogQUZMQUdTXyQoMSkgKz0gLURfX0lBNjRfQVNNX1BBUkFWSVJUVUFMSVpFRF9OQVRJVkUKIEFGTEFHU19wdmNoay1zZWQtJCgxKSArPSAtRF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX1BWQ0hFQ0sKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUuZ2F0ZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUuZ2F0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDg3Zjg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZS5nYXRlCkBAIC0wLDAgKzEsMjcgQEAKKyMgVGhlIGdhdGUgRFNPIGltYWdlIGlzIGJ1aWx0IHVzaW5nIGEgc3BlY2lhbCBsaW5rZXIgc2NyaXB0LgorCit0YXJnZXRzICs9IGdhdGUuc28gZ2F0ZS1zeW1zLm8KKworZXh0cmEteSArPSBnYXRlLnNvIGdhdGUtc3ltcy5vIGdhdGUubGRzIGdhdGUubworCitDUFBGTEFHU19nYXRlLmxkcyA6PSAtUCAtQyAtVSQoQVJDSCkKKworcXVpZXRfY21kX2dhdGUgPSBHQVRFICRACisgICAgICBjbWRfZ2F0ZSA9ICQoQ0MpIC1ub3N0ZGxpYiAkKEdBVEVDRkxBR1NfJChARikpIC1XbCwtVCwkKGZpbHRlci1vdXQgRk9SQ0UsJF4pIC1vICRACisKK0dBVEVDRkxBR1NfZ2F0ZS5zbyA9IC1zaGFyZWQgLXMgLVdsLC1zb25hbWU9bGludXgtZ2F0ZS5zby4xIFwKKwkJICAgICAkKGNhbGwgbGQtb3B0aW9uLCAtV2wkKGNvbW1hKS0taGFzaC1zdHlsZT1zeXN2KQorJChvYmopL2dhdGUuc286ICQob2JqKS9nYXRlLmxkcyAkKG9iaikvZ2F0ZS5vIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsZ2F0ZSkKKworJChvYmopL2J1aWx0LWluLm86ICQob2JqKS9nYXRlLXN5bXMubworJChvYmopL2J1aWx0LWluLm86IGxkX2ZsYWdzICs9IC1SICQob2JqKS9nYXRlLXN5bXMubworCitHQVRFQ0ZMQUdTX2dhdGUtc3ltcy5vID0gLXIKKyQob2JqKS9nYXRlLXN5bXMubzogJChvYmopL2dhdGUubGRzICQob2JqKS9nYXRlLm8gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxnYXRlKQorCisjIGdhdGUtZGF0YS5vIGNvbnRhaW5zIHRoZSBnYXRlIERTTyBpbWFnZSBhcyBkYXRhIGluIHNlY3Rpb24gLmRhdGEuZ2F0ZS4KKyMgV2UgbXVzdCBidWlsZCBnYXRlLnNvIGJlZm9yZSB3ZSBjYW4gYXNzZW1ibGUgaXQuCisjIE5vdGU6IGtidWlsZCBkb2VzIG5vdCB0cmFjayB0aGlzIGRlcGVuZGVuY3kgZHVlIHRvIHVzYWdlIG9mIC5pbmNiaW4KKyQob2JqKS9nYXRlLWRhdGEubzogJChvYmopL2dhdGUuc28KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKaW5kZXggYmRlZjJjZS4uNTUxMDMxNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKQEAgLTg5MCw3ICs4OTAsNyBAQAogCQlwb3NzaWJsZSwgbWF4KChwb3NzaWJsZSAtIGF2YWlsYWJsZV9jcHVzKSwgMCkpOwogCiAJZm9yIChpID0gMDsgaSA8IHBvc3NpYmxlOyBpKyspCi0JCWNwdV9zZXQoaSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCXNldF9jcHVfcG9zc2libGUoaSwgdHJ1ZSk7CiB9CiAKIGludCBhY3BpX21hcF9sc2FwaWMoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgKnBjcHUpCkBAIC05MjgsOSArOTI4LDkgQEAKIAlidWZmZXIubGVuZ3RoID0gQUNQSV9BTExPQ0FURV9CVUZGRVI7CiAJYnVmZmVyLnBvaW50ZXIgPSBOVUxMOwogCi0JY3B1c19jb21wbGVtZW50KHRtcF9tYXAsIGNwdV9wcmVzZW50X21hcCk7Ci0JY3B1ID0gZmlyc3RfY3B1KHRtcF9tYXApOwotCWlmIChjcHUgPj0gTlJfQ1BVUykKKwljcHVtYXNrX2NvbXBsZW1lbnQoJnRtcF9tYXAsIGNwdV9wcmVzZW50X21hc2spOworCWNwdSA9IGNwdW1hc2tfZmlyc3QoJnRtcF9tYXApOworCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhY3BpX21hcF9jcHUybm9kZShoYW5kbGUsIGNwdSwgcGh5c2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA3NDJkYmIxLi5hZjU2NTAxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jCkBAIC0zMTYsNSArMzE2LDcgQEAKIAlERUZJTkVfTUFQUEVEX1JFR19PRlMoWFNJX0JBTksxX1IxNl9PRlMsIGJhbmsxX3JlZ3NbMF0pOwogCURFRklORV9NQVBQRURfUkVHX09GUyhYU0lfQjBOQVRTX09GUywgdmJuYXQpOwogCURFRklORV9NQVBQRURfUkVHX09GUyhYU0lfQjFOQVRTX09GUywgdm5hdCk7CisJREVGSU5FX01BUFBFRF9SRUdfT0ZTKFhTSV9JVENfT0ZGU0VUX09GUywgaXRjX29mZnNldCk7CisJREVGSU5FX01BUFBFRF9SRUdfT0ZTKFhTSV9JVENfTEFTVF9PRlMsIGl0Y19sYXN0KTsKICNlbmRpZiAvKiBDT05GSUdfWEVOICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwppbmRleCBlZmFmZjE1Li43ZWY4MGU4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKQEAgLTQ1Niw2ICs0NTYsNyBAQAogCQkgR1JBTlVMRVJPVU5ERE9XTigodW5zaWduZWQgbG9uZykgcGFsX3ZhZGRyKSwKIAkJIHB0ZV92YWwocGZuX3B0ZShfX3BhKHBhbF92YWRkcikgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUwpKSwKIAkJIElBNjRfR1JBTlVMRV9TSElGVCk7CisJcGFyYXZpcnRfZHZfc2VyaWFsaXplX2RhdGEoKTsKIAlpYTY0X3NldF9wc3IocHNyKTsJCS8qIHJlc3RvcmUgcHNyICovCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwppbmRleCBlNTM0MWUyLi44ZGM2OTY2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vZnRyYWNlLmg+CiAKICNpbmNsdWRlICJtaW5zdGF0ZS5oIgogCkBAIC03MzUsNyArNzM2LDcgQEAKIF9fcGFyYXZpcnRfd29ya19wcm9jZXNzZWRfc3lzY2FsbDoKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogCWFkZHMgcjI9UFQoTE9BRFJTKSsxNixyMTIKLShwVVN0aykJbW92Lm0gcjIyPWFyLml0YwkJCS8vIGZldGNoIHRpbWUgYXQgbGVhdmUKKwlNT1ZfRlJPTV9JVEMocFVTdGssIHA5LCByMjIsIHIxOSkJLy8gZmV0Y2ggdGltZSBhdCBsZWF2ZQogCWFkZHMgcjE4PVRJX0ZMQUdTK0lBNjRfVEFTS19TSVpFLHIxMwogCTs7CiAocDYpCWxkNCByMzE9W3IxOF0JCQkJLy8gbG9hZCBjdXJyZW50X3RocmVhZF9pbmZvKCktPmZsYWdzCkBAIC05ODQsNyArOTg1LDcgQEAKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogCS5wcmVkLnJlbC5tdXRleCBwVVN0ayxwS1N0awogCU1PVl9GUk9NX1BTUihwS1N0aywgcjIyLCByMjkpCS8vIE0yIHJlYWQgUFNSIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIGRpc2FibGVkCi0ocFVTdGspCW1vdi5tIHIyMj1hci5pdGMJLy8gTSAgZmV0Y2ggdGltZSBhdCBsZWF2ZQorCU1PVl9GUk9NX0lUQyhwVVN0aywgcDksIHIyMiwgcjI5KQkvLyBNICBmZXRjaCB0aW1lIGF0IGxlYXZlCiAJbm9wLmkgMAogCTs7CiAjZWxzZQpAQCAtMTQwNCw2ICsxNDA1LDEwNSBAQAogCWJyLnJldC5zcHRrLm1hbnkgcnAKIEVORCh1bndfaW5pdF9ydW5uaW5nKQogCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgorI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorR0xPQkFMX0VOVFJZKF9tY291bnQpCisJYnIgZnRyYWNlX3N0dWIKK0VORChfbWNvdW50KQorCisuaGVyZToKKwlici5yZXQuc3B0ay5tYW55IGIwCisKK0dMT0JBTF9FTlRSWShmdHJhY2VfY2FsbGVyKQorCWFsbG9jIG91dDAgPSBhci5wZnMsIDgsIDAsIDQsIDAKKwltb3Ygb3V0MyA9IHIwCisJOzsKKwltb3Ygb3V0MiA9IGIwCisJYWRkIHIzID0gMHgyMCwgcjMKKwltb3Ygb3V0MSA9IHIxOworCWJyLmNhbGwuc3B0ay5tYW55IGIwID0gZnRyYWNlX3BhdGNoX2dwCisJLy90aGlzIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIG1vZHVsZSwgc28gd2UgbXVzdCBwYXRjaCBncAorZnRyYWNlX3BhdGNoX2dwOgorCW1vdmwgZ3A9X19ncAorCW1vdiBiMCA9IHIzCisJOzsKKy5nbG9iYWwgZnRyYWNlX2NhbGw7CitmdHJhY2VfY2FsbDoKK3sKKwkubWx4CisJbm9wLm0gMHgwCisJbW92bCByMyA9IC5oZXJlOzsKK30KKwlhbGxvYyBsb2MwID0gYXIucGZzLCA0LCA0LCAyLCAwCisJOzsKKwltb3YgbG9jMSA9IGIwCisJbW92IG91dDAgPSBiMAorCW1vdiBsb2MyID0gcjgKKwltb3YgbG9jMyA9IHIxNQorCTs7CisJYWRkcyBvdXQwID0gLU1DT1VOVF9JTlNOX1NJWkUsIG91dDAKKwltb3Ygb3V0MSA9IGluMgorCW1vdiBiNiA9IHIzCisKKwlici5jYWxsLnNwdGsubWFueSBiMCA9IGI2CisJOzsKKwltb3YgYXIucGZzID0gbG9jMAorCW1vdiBiMCA9IGxvYzEKKwltb3YgcjggPSBsb2MyCisJbW92IHIxNSA9IGxvYzMKKwliciBmdHJhY2Vfc3R1YgorCTs7CitFTkQoZnRyYWNlX2NhbGxlcikKKworI2Vsc2UKK0dMT0JBTF9FTlRSWShfbWNvdW50KQorCW1vdmwgcjIgPSBmdHJhY2Vfc3R1YgorCW1vdmwgcjMgPSBmdHJhY2VfdHJhY2VfZnVuY3Rpb247OworCWxkOCByMyA9IFtyM107OworCWxkOCByMyA9IFtyM107OworCWNtcC5lcSBwNyxwMCA9IHIyLCByMworKHA3KQlici5zcHRrLm1hbnkgZnRyYWNlX3N0dWIKKwk7OworCisJYWxsb2MgbG9jMCA9IGFyLnBmcywgNCwgNCwgMiwgMAorCTs7CisJbW92IGxvYzEgPSBiMAorCW1vdiBvdXQwID0gYjAKKwltb3YgbG9jMiA9IHI4CisJbW92IGxvYzMgPSByMTUKKwk7OworCWFkZHMgb3V0MCA9IC1NQ09VTlRfSU5TTl9TSVpFLCBvdXQwCisJbW92IG91dDEgPSBpbjIKKwltb3YgYjYgPSByMworCisJYnIuY2FsbC5zcHRrLm1hbnkgYjAgPSBiNgorCTs7CisJbW92IGFyLnBmcyA9IGxvYzAKKwltb3YgYjAgPSBsb2MxCisJbW92IHI4ID0gbG9jMgorCW1vdiByMTUgPSBsb2MzCisJYnIgZnRyYWNlX3N0dWIKKwk7OworRU5EKF9tY291bnQpCisjZW5kaWYKKworR0xPQkFMX0VOVFJZKGZ0cmFjZV9zdHViKQorCW1vdiByMyA9IGIwCisJbW92bCByMiA9IF9tY291bnRfcmV0X2hlbHBlcgorCTs7CisJbW92IGI2ID0gcjIKKwltb3YgYjcgPSByMworCWJyLnJldC5zcHRrLm1hbnkgYjYKKworX21jb3VudF9yZXRfaGVscGVyOgorCW1vdiBiMCA9IHI0MgorCW1vdiByMSA9IHI0MQorCW1vdiBhci5wZnMgPSByNDAKKwliciBiNworRU5EKGZ0cmFjZV9zdHViKQorCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiAqLworCiAJLnJvZGF0YQogCS5hbGlnbiA4CiAJLmdsb2JsIHN5c19jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2ZzeXMuUyBiL2FyY2gvaWE2NC9rZXJuZWwvZnN5cy5TCmluZGV4IGMxNjI1YzcuLjM1NjdkNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZnN5cy5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZnN5cy5TCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCiAjaW5jbHVkZSAiZW50cnkuaCIKKyNpbmNsdWRlICJwYXJhdmlydF9pbnN0LmgiCiAKIC8qCiAgKiBTZWUgRG9jdW1lbnRhdGlvbi9pYTY0L2ZzeXMudHh0IGZvciBkZXRhaWxzIG9uIGZzeXNjYWxscy4KQEAgLTI3OSw3ICsyODAsNyBAQAogKHA5KQljbXAuZXEgcDEzLHAwID0gMCxyMzAJLy8gaWYgbW1pb19wdHIsIGNsZWFyIHAxMyBqaXR0ZXIgY29udHJvbAogCTs7CiAJLnByZWQucmVsLm11dGV4IHA4LHA5Ci0ocDgpCW1vdiByMiA9IGFyLml0YwkJLy8gQ1BVX1RJTUVSLiAzNiBjbG9ja3MgbGF0ZW5jeSEhIQorCU1PVl9GUk9NX0lUQyhwOCwgcDYsIHIyLCByMTApCS8vIENQVV9USU1FUi4gMzYgY2xvY2tzIGxhdGVuY3khISEKIChwOSkJbGQ4IHIyID0gW3IzMF0JCS8vIE1NSU9fVElNRVIuIENvdWxkIGFsc28gaGF2ZSBsYXRlbmN5IGlzc3Vlcy4uCiAocDEzKQlsZDggcjI1ID0gW3IxOV0JCS8vIGdldCBpdGNfbGFzdGN5Y2xlIHZhbHVlCiAJbGQ4IHI5ID0gW3IyMl0sSUE2NF9USU1FU1BFQ19UVl9OU0VDX09GRlNFVAkvLyB0dl9zZWMKQEAgLTQxOCw3ICs0MTksNyBAQAogCW1vdiByMTc9KDEgPDwgKFNJR0tJTEwgLSAxKSkgfCAoMSA8PCAoU0lHU1RPUCAtIDEpKQogCTs7CiAKLQlyc20gcHNyLmkJCQkJLy8gbWFzayBpbnRlcnJ1cHQgZGVsaXZlcnkKKwlSU01fUFNSX0kocDAsIHIxOCwgcjE5KQkJCS8vIG1hc2sgaW50ZXJydXB0IGRlbGl2ZXJ5CiAJbW92IGFyLmNjdj0wCiAJYW5kY20gcjE0PXIxNCxyMTcJCQkvLyBmaWx0ZXIgb3V0IFNJR0tJTEwgJiBTSUdTVE9QCiAKQEAgLTQ5MSw3ICs0OTIsNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIAlzdDQucmVsIFtyMzFdPXIwCQkJLy8gcmVsZWFzZSB0aGUgbG9jawogI2VuZGlmCi0Jc3NtIHBzci5pCisJU1NNX1BTUl9JKHAwLCBwOSwgcjMxKQogCTs7CiAKIAlzcmx6LmQJCQkJCS8vIGVuc3VyZSBwc3IuaSBpcyBzZXQgYWdhaW4KQEAgLTUxMyw3ICs1MTQsNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIAlzdDQucmVsIFtyMzFdPXIwCQkJLy8gcmVsZWFzZSB0aGUgbG9jawogI2VuZGlmCi0Jc3NtIHBzci5pCisJU1NNX1BTUl9JKHAwLCBwOSwgcjE3KQogCTs7CiAJc3Jsei5kCiAJYnIuc3B0ay5tYW55IGZzeXNfZmFsbGJhY2tfc3lzY2FsbAkvLyB3aXRoIHNpZ25hbCBwZW5kaW5nLCBkbyB0aGUgaGVhdnktd2VpZ2h0IHN5c2NhbGwKQEAgLTUyMSw3ICs1MjIsNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIC5sb2NrX2NvbnRlbnRpb246CiAJLyogUmF0aGVyIHRoYW4gc3Bpbm5pbmcgaGVyZSwgZmFsbCBiYWNrIG9uIGRvaW5nIGEgaGVhdnktd2VpZ2h0IHN5c2NhbGwuICAqLwotCXNzbSBwc3IuaQorCVNTTV9QU1JfSShwMCwgcDksIHIxNykKIAk7OwogCXNybHouZAogCWJyLnNwdGsubWFueSBmc3lzX2ZhbGxiYWNrX3N5c2NhbGwKQEAgLTU5MiwxNyArNTkzLDE3IEBACiAJYWRkcyByMTc9LTEwMjQscjE1CiAJbW92bCByMTQ9c3lzX2NhbGxfdGFibGUKIAk7OwotCXJzbSBwc3IuaQorCVJTTV9QU1JfSShwMCwgcjI2LCByMjcpCiAJc2hsYWRkIHIxOD1yMTcsMyxyMTQKIAk7OwogCWxkOCByMTg9W3IxOF0JCQkJLy8gbG9hZCBub3JtYWwgKGhlYXZ5LXdlaWdodCkgc3lzY2FsbCBlbnRyeS1wb2ludAotCW1vdiByMjk9cHNyCQkJCS8vIHJlYWQgcHNyICgxMiBjeWMgbG9hZCBsYXRlbmN5KQorCU1PVl9GUk9NX1BTUihwMCwgcjI5LCByMjYpCQkvLyByZWFkIHBzciAoMTIgY3ljIGxvYWQgbGF0ZW5jeSkKIAltb3YgcjI3PWFyLnJzYwogCW1vdiByMjE9YXIuZnBzcgogCW1vdiByMjY9YXIucGZzCiBFTkQoZnN5c19mYWxsYmFja19zeXNjYWxsKQogCS8qIEZBTEwgVEhST1VHSCAqLwotR0xPQkFMX0VOVFJZKGZzeXNfYnViYmxlX2Rvd24pCitHTE9CQUxfRU5UUlkocGFyYXZpcnRfZnN5c19idWJibGVfZG93bikKIAkucHJvbG9ndWUKIAkuYWx0cnAgYjYKIAkuYm9keQpAQCAtNjQwLDcgKzY0MSw3IEBACiAJICoKIAkgKiBQU1IuQkUgOiBhbHJlYWR5IGlzIHR1cm5lZCBvZmYgaW4gX19rZXJuZWxfc3lzY2FsbF92aWFfZXBjKCkKIAkgKiBQU1IuQUMgOiBkb24ndCBjYXJlIChrZXJuZWwgbm9ybWFsbHkgdHVybnMgUFNSLkFDIG9uKQotCSAqIFBTUi5JICA6IGFscmVhZHkgdHVybmVkIG9mZiBieSB0aGUgdGltZSBmc3lzX2J1YmJsZV9kb3duIGdldHMKKwkgKiBQU1IuSSAgOiBhbHJlYWR5IHR1cm5lZCBvZmYgYnkgdGhlIHRpbWUgcGFyYXZpcnRfZnN5c19idWJibGVfZG93biBnZXRzCiAJICoJICAgIGludm9rZWQKIAkgKiBQU1IuREZMOiBhbHdheXMgMCAoa2VybmVsIG5ldmVyIHR1cm5zIGl0IG9uKQogCSAqIFBTUi5ERkg6IGRvbid0IGNhcmUgLS0tIGtlcm5lbCBuZXZlciB0b3VjaGVzIGYzMi1mMTI3IG9uIGl0cyBvd24KQEAgLTY1MCw3ICs2NTEsNyBAQAogCSAqIFBTUi5EQiA6IGRvbid0IGNhcmUgLS0tIGtlcm5lbCBuZXZlciBlbmFibGVzIGtlcm5lbC1sZXZlbAogCSAqCSAgICBicmVha3BvaW50cwogCSAqIFBTUi5UQiA6IG11c3QgYmUgMCBhbHJlYWR5OyBpZiBpdCB3YXNuJ3QgemVybyBvbiBlbnRyeSB0bwotCSAqICAgICAgICAgIF9fa2VybmVsX3N5c2NhbGxfdmlhX2VwYywgdGhlIGJyYW5jaCB0byBmc3lzX2J1YmJsZV9kb3duCisJICogICAgICAgICAgX19rZXJuZWxfc3lzY2FsbF92aWFfZXBjLCB0aGUgYnJhbmNoIHRvIHBhcmF2aXJ0X2ZzeXNfYnViYmxlX2Rvd24KIAkgKiAgICAgICAgICB3aWxsIHRyaWdnZXIgYSB0YWtlbiBicmFuY2g7IHRoZSB0YWtlbi10cmFwLWhhbmRsZXIgdGhlbgogCSAqICAgICAgICAgIGNvbnZlcnRzIHRoZSBzeXNjYWxsIGludG8gYSBicmVhay1iYXNlZCBzeXN0ZW0tY2FsbC4KIAkgKi8KQEAgLTY4Myw3ICs2ODQsNyBAQAogCTs7CiAJbW92IGFyLnJzYz0wCQkJCS8vIE0yICAgc2V0IGVuZm9yY2VkIGxhenkgbW9kZSwgcGwgMCwgTEUsIGxvYWRycz0wCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKLQltb3YubSByMzA9YXIuaXRjCQkJLy8gTSAgICBnZXQgY3ljbGUgZm9yIGFjY291bnRpbmcKKwlNT1ZfRlJPTV9JVEMocDAsIHA2LCByMzAsIHIyMykJCS8vIE0gICAgZ2V0IGN5Y2xlIGZvciBhY2NvdW50aW5nCiAjZWxzZQogCW5vcC5tIDAKICNlbmRpZgpAQCAtNzM0LDIxICs3MzUsMjEgQEAKIAltb3YgcnA9cjE0CQkJCS8vIEkwICAgc2V0IHRoZSByZWFsIHJldHVybiBhZGRyCiAJYW5kIHIzPV9USUZfU1lTQ0FMTF9UUkFDRUFVRElULHIzCS8vIEEKIAk7OwotCXNzbSBwc3IuaQkJCQkvLyBNMiAgIHdlJ3JlIG9uIGtlcm5lbCBzdGFja3Mgbm93LCByZWVuYWJsZSBpcnFzCisJU1NNX1BTUl9JKHAwLCBwNiwgcjIyKQkJCS8vIE0yICAgd2UncmUgb24ga2VybmVsIHN0YWNrcyBub3csIHJlZW5hYmxlIGlycXMKIAljbXAuZXEgcDgscDA9cjMscjAJCQkvLyBBCiAocDEwKQlici5jb25kLnNwbnQubWFueSBpYTY0X3JldF9mcm9tX3N5c2NhbGwJLy8gQiAgICByZXR1cm4gaWYgYmFkIGNhbGwtZnJhbWUgb3IgcjE1IGlzIGEgTmFUCiAKIAlub3AubSAwCiAocDgpCWJyLmNhbGwuc3B0ay5tYW55IGI2PWI2CQkJLy8gQiAgICAoaWdub3JlIHJldHVybiBhZGRyZXNzKQogCWJyLmNvbmQuc3BudCBpYTY0X3RyYWNlX3N5c2NhbGwJCS8vIEIKLUVORChmc3lzX2J1YmJsZV9kb3duKQorRU5EKHBhcmF2aXJ0X2ZzeXNfYnViYmxlX2Rvd24pCiAKIAkucm9kYXRhCiAJLmFsaWduIDgKLQkuZ2xvYmwgZnN5c2NhbGxfdGFibGUKKwkuZ2xvYmwgcGFyYXZpcnRfZnN5c2NhbGxfdGFibGUKIAotCWRhdGE4IGZzeXNfYnViYmxlX2Rvd24KLWZzeXNjYWxsX3RhYmxlOgorCWRhdGE4IHBhcmF2aXJ0X2ZzeXNfYnViYmxlX2Rvd24KK3BhcmF2aXJ0X2ZzeXNjYWxsX3RhYmxlOgogCWRhdGE4IGZzeXNfbmlfc3lzY2FsbAogCWRhdGE4IDAJCQkJLy8gZXhpdAkJCS8vIDEwMjUKIAlkYXRhOCAwCQkJCS8vIHJlYWQKQEAgLTEwMzMsNCArMTAzNCw0IEBACiAKIAkvLyBmaWxsIGluIHplcm9zIGZvciB0aGUgcmVtYWluaW5nIGVudHJpZXMKIAkuemVybzoKLQkuc3BhY2UgZnN5c2NhbGxfdGFibGUgKyA4Kk5SX3N5c2NhbGxzIC0gLnplcm8sIDAKKwkuc3BhY2UgcGFyYXZpcnRfZnN5c2NhbGxfdGFibGUgKyA4Kk5SX3N5c2NhbGxzIC0gLnplcm8sIDAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL2lhNjQva2VybmVsL2Z0cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYzhjOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL2Z0cmFjZS5jCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogRHluYW1pYyBmdW5jdGlvbiB0cmFjaW5nIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNoYW9odWEgTGkgPHNoYW9odWEubGlAaW50ZWwuY29tPgorICoKKyAqIEZvciBsaWNlbmNpbmcgZGV0YWlscywgc2VlIENPUFlJTkcuCisgKgorICogRGVmaW5lcyBsb3ctbGV2ZWwgaGFuZGxpbmcgb2YgbWNvdW50IGNhbGxzIHdoZW4gdGhlIGtlcm5lbAorICogaXMgY29tcGlsZWQgd2l0aCB0aGUgLXBnIGZsYWcuIFdoZW4gdXNpbmcgZHluYW1pYyBmdHJhY2UsIHRoZQorICogbWNvdW50IGNhbGwtc2l0ZXMgZ2V0IHBhdGNoZWQgbGF6aWx5IHdpdGggTk9QIHRpbGwgdGhleSBhcmUKKyAqIGVuYWJsZWQuIEFsbCBjb2RlIG11dGF0aW9uIHJvdXRpbmVzIGhlcmUgdGFrZSBlZmZlY3QgYXRvbWljYWxseS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vcGF0Y2guaD4KKworLyogSW4gSUE2NCwgZWFjaCBmdW5jdGlvbiB3aWxsIGJlIGFkZGVkIGJlbG93IHR3byBidW5kbGVzIHdpdGggLXBnIG9wdGlvbiAqLworc3RhdGljIHVuc2lnbmVkIGNoYXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCitmdHJhY2Vfb3JpZ19jb2RlW01DT1VOVF9JTlNOX1NJWkVdID0geworCTB4MDIsIDB4NDAsIDB4MzEsIDB4MTAsIDB4ODAsIDB4MDUsIC8qIGFsbG9jIHI0MD1hci5wZnMsMTIsOCwwICovCisJMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgLyogbW92IHI0Mz1yMDs7ICovCisJMHgwNSwgMHgwMCwgMHhjNCwgMHgwMCwgICAgICAgICAgICAgLyogbW92IHI0Mj1iMCAqLworCTB4MTEsIDB4NDgsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MjEsIC8qIG1vdiByNDE9cjEgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAvKiBub3AuaSAweDAgKi8KKwkweDA4LCAweDAwLCAweDAwLCAweDUwICAgICAgICAgICAgICAvKiBici5jYWxsLnNwdGsubWFueSBiMCA9IF9tY291bnQ7OyAqLworfTsKKworc3RydWN0IGZ0cmFjZV9vcmlnX2luc24geworCXU2NCBkdW1teTEsIGR1bW15MiwgZHVtbXkzOworCXU2NCBkdW1teTQ6NjQtNDErMTM7CisJdTY0IGltbTIwOjIwOworCXU2NCBkdW1teTU6MzsKKwl1NjQgc2lnbjoxOworCXU2NCBkdW1teTY6NDsKK307CisKKy8qIG1jb3VudCBzdHViIHdpbGwgYmUgY29udmVydGVkIGJlbG93IGZvciBub3AgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGZ0cmFjZV9ub3BfY29kZVtNQ09VTlRfSU5TTl9TSVpFXSA9IHsKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAvKiBbTUlJXSBub3AubSAweDAgKi8KKwkweDMwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAvKiBtb3YgcjM9aXAgKi8KKwkweDAwLCAweDAwLCAweDA0LCAweDAwLCAgICAgICAgICAgICAvKiBub3AuaSAweDAgKi8KKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAvKiBbTUxYXSBub3AubSAweDAgKi8KKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvKiBub3AueCAweDA7OyAqLworCTB4MDAsIDB4MDAsIDB4MDQsIDB4MDAKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpmdHJhY2Vfbm9wX3JlcGxhY2Uodm9pZCkKK3sKKwlyZXR1cm4gZnRyYWNlX25vcF9jb2RlOworfQorCisvKgorICogbWNvdW50IHN0dWIgd2lsbCBiZSBjb252ZXJ0ZWQgYmVsb3cgZm9yIGNhbGwKKyAqIE5vdGU6IEp1c3QgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaXMgY2hhbmdlZCBhZ2FpbnN0IG5vcAorICogKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQorZnRyYWNlX2NhbGxfY29kZVtNQ09VTlRfSU5TTl9TSVpFXSA9IHsKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAvKiBbTUlJXSBub3AubSAweDAgKi8KKwkweDMwLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAvKiBtb3YgcjM9aXAgKi8KKwkweDAwLCAweDAwLCAweDA0LCAweDAwLCAgICAgICAgICAgICAvKiBub3AuaSAweDAgKi8KKwkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAvKiBbTUxYXSBub3AubSAweDAgKi8KKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDdmLCAweDAwLCAvKiBicmwubWFueSAuOzsqLworCTB4ZjgsIDB4ZmYsIDB4ZmYsIDB4YzgKK307CisKK3N0cnVjdCBmdHJhY2VfY2FsbF9pbnNuIHsKKwl1NjQgZHVtbXkxLCBkdW1teTI7CisJdTY0IGR1bW15Mzo0ODsKKwl1NjQgaW1tMzlfbDoxNjsKKwl1NjQgaW1tMzlfaDoyMzsKKwl1NjQgZHVtbXk0OjEzOworCXU2NCBpbW0yMDoyMDsKKwl1NjQgZHVtbXk1OjM7CisJdTY0IGk6MTsKKwl1NjQgZHVtbXk2OjQ7Cit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciAqZnRyYWNlX2NhbGxfcmVwbGFjZSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IGZ0cmFjZV9jYWxsX2luc24gKmNvZGUgPSAodm9pZCAqKWZ0cmFjZV9jYWxsX2NvZGU7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBhZGRyIC0gKGlwICsgMHgxMCk7CisKKwljb2RlLT5pbW0zOV9sID0gb2Zmc2V0ID4+IDI0OworCWNvZGUtPmltbTM5X2ggPSBvZmZzZXQgPj4gNDA7CisJY29kZS0+aW1tMjAgPSBvZmZzZXQgPj4gNDsKKwljb2RlLT5pID0gb2Zmc2V0ID4+IDYzOworCXJldHVybiBmdHJhY2VfY2FsbF9jb2RlOworfQorCitzdGF0aWMgaW50CitmdHJhY2VfbW9kaWZ5X2NvZGUodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgY2hhciAqb2xkX2NvZGUsCisJCSAgIHVuc2lnbmVkIGNoYXIgKm5ld19jb2RlLCBpbnQgZG9fY2hlY2spCit7CisJdW5zaWduZWQgY2hhciByZXBsYWNlZFtNQ09VTlRfSU5TTl9TSVpFXTsKKworCS8qCisJICogTm90ZTogRHVlIHRvIG1vZHVsZXMgYW5kIF9faW5pdCwgY29kZSBjYW4KKwkgKiAgZGlzYXBwZWFyIGFuZCBjaGFuZ2UsIHdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGZhdWx0aW5nCisJICogIGFzIHdlbGwgYXMgY29kZSBjaGFuZ2luZy4gV2UgZG8gdGhpcyBieSB1c2luZyB0aGUKKwkgKiAgcHJvYmVfa2VybmVsXyogZnVuY3Rpb25zLgorCSAqCisJICogTm8gcmVhbCBsb2NraW5nIG5lZWRlZCwgdGhpcyBjb2RlIGlzIHJ1biB0aHJvdWdoCisJICoga3N0b3BfbWFjaGluZSwgb3IgYmVmb3JlIFNNUCBzdGFydHMuCisJICovCisKKwlpZiAoIWRvX2NoZWNrKQorCQlnb3RvIHNraXBfY2hlY2s7CisKKwkvKiByZWFkIHRoZSB0ZXh0IHdlIHdhbnQgdG8gbW9kaWZ5ICovCisJaWYgKHByb2JlX2tlcm5lbF9yZWFkKHJlcGxhY2VkLCAodm9pZCAqKWlwLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiBNYWtlIHN1cmUgaXQgaXMgd2hhdCB3ZSBleHBlY3QgaXQgdG8gYmUgKi8KKwlpZiAobWVtY21wKHJlcGxhY2VkLCBvbGRfY29kZSwgTUNPVU5UX0lOU05fU0laRSkgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKK3NraXBfY2hlY2s6CisJLyogcmVwbGFjZSB0aGUgdGV4dCB3aXRoIHRoZSBuZXcgdGV4dCAqLworCWlmIChwcm9iZV9rZXJuZWxfd3JpdGUoKCh2b2lkICopaXApLCBuZXdfY29kZSwgTUNPVU5UX0lOU05fU0laRSkpCisJCXJldHVybiAtRVBFUk07CisJZmx1c2hfaWNhY2hlX3JhbmdlKGlwLCBpcCArIE1DT1VOVF9JTlNOX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnRyYWNlX21ha2Vfbm9wX2NoZWNrKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBjaGFyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKSByZXBsYWNlZFtNQ09VTlRfSU5TTl9TSVpFXTsKKwl1bnNpZ25lZCBsb25nIGlwID0gcmVjLT5pcDsKKworCWlmIChwcm9iZV9rZXJuZWxfcmVhZChyZXBsYWNlZCwgKHZvaWQgKilpcCwgTUNPVU5UX0lOU05fU0laRSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0NPTlZFUlRFRCkgeworCQlzdHJ1Y3QgZnRyYWNlX2NhbGxfaW5zbiAqY2FsbF9pbnNuLCAqdG1wX2NhbGw7CisKKwkJY2FsbF9pbnNuID0gKHZvaWQgKilmdHJhY2VfY2FsbF9jb2RlOworCQl0bXBfY2FsbCA9ICh2b2lkICopcmVwbGFjZWQ7CisJCWNhbGxfaW5zbi0+aW1tMzlfbCA9IHRtcF9jYWxsLT5pbW0zOV9sOworCQljYWxsX2luc24tPmltbTM5X2ggPSB0bXBfY2FsbC0+aW1tMzlfaDsKKwkJY2FsbF9pbnNuLT5pbW0yMCA9IHRtcF9jYWxsLT5pbW0yMDsKKwkJY2FsbF9pbnNuLT5pID0gdG1wX2NhbGwtPmk7CisJCWlmIChtZW1jbXAocmVwbGFjZWQsIGZ0cmFjZV9jYWxsX2NvZGUsIE1DT1VOVF9JTlNOX1NJWkUpICE9IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJc3RydWN0IGZ0cmFjZV9vcmlnX2luc24gKmNhbGxfaW5zbiwgKnRtcF9jYWxsOworCisJCWNhbGxfaW5zbiA9ICh2b2lkICopZnRyYWNlX29yaWdfY29kZTsKKwkJdG1wX2NhbGwgPSAodm9pZCAqKXJlcGxhY2VkOworCQljYWxsX2luc24tPnNpZ24gPSB0bXBfY2FsbC0+c2lnbjsKKwkJY2FsbF9pbnNuLT5pbW0yMCA9IHRtcF9jYWxsLT5pbW0yMDsKKwkJaWYgKG1lbWNtcChyZXBsYWNlZCwgZnRyYWNlX29yaWdfY29kZSwgTUNPVU5UX0lOU05fU0laRSkgIT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK2ludCBmdHJhY2VfbWFrZV9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLAorCQkgICAgc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCWludCByZXQ7CisJY2hhciAqbmV3OworCisJcmV0ID0gZnRyYWNlX21ha2Vfbm9wX2NoZWNrKHJlYywgYWRkcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwluZXcgPSBmdHJhY2Vfbm9wX3JlcGxhY2UoKTsKKwlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKHJlYy0+aXAsIE5VTEwsIG5ldywgMCk7Cit9CisKK2ludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGlwID0gcmVjLT5pcDsKKwl1bnNpZ25lZCBjaGFyICpvbGQsICpuZXc7CisKKwlvbGQ9ICBmdHJhY2Vfbm9wX3JlcGxhY2UoKTsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyKTsKKwlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKGlwLCBvbGQsIG5ldywgMSk7Cit9CisKKy8qIGluIElBNjQsIF9tY291bnQgY2FuJ3QgZGlyZWN0bHkgY2FsbCBmdHJhY2Vfc3R1Yi4gT25seSBqdW1wIGlzIG9rICovCitpbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpCit7CisJdW5zaWduZWQgbG9uZyBpcDsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAoKHN0cnVjdCBmbnB0ciAqKWZ0cmFjZV9jYWxsKS0+aXA7CisKKwlpZiAoZnVuYyA9PSBmdHJhY2Vfc3R1YikKKwkJcmV0dXJuIDA7CisJaXAgPSAoKHN0cnVjdCBmbnB0ciAqKWZ1bmMpLT5pcDsKKworCWlhNjRfcGF0Y2hfaW1tNjQoYWRkciArIDIsIGlwKTsKKworCWZsdXNoX2ljYWNoZV9yYW5nZShhZGRyLCBhZGRyICsgMTYpOworCXJldHVybiAwOworfQorCisvKiBydW4gZnJvbSBrc3RvcF9tYWNoaW5lICovCitpbnQgX19pbml0IGZ0cmFjZV9keW5fYXJjaF9pbml0KHZvaWQgKmRhdGEpCit7CisJKih1bnNpZ25lZCBsb25nICopZGF0YSA9IDA7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZ2F0ZS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9nYXRlLlMKaW5kZXggNzRiMWNjYy4uY2Y1ZTBhMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9nYXRlLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9nYXRlLlMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSAicGFyYXZpcnRfaW5zdC5oIgogCiAvKgogICogV2UgY2FuJ3QgZWFzaWx5IHJlZmVyIHRvIHN5bWJvbHMgaW5zaWRlIHRoZSBrZXJuZWwuICBUbyBhdm9pZCBmdWxsIHJ1bnRpbWUgcmVsb2NhdGlvbiwKQEAgLTQ4LDg3ICs0OSw2IEBACiB9CiBFTkQoX19rZXJuZWxfc3lzY2FsbF92aWFfYnJlYWspCiAKLS8qCi0gKiBPbiBlbnRyeToKLSAqCXIxMSA9IHNhdmVkIGFyLnBmcwotICoJcjE1ID0gc3lzdGVtIGNhbGwgIwotICoJYjAgID0gc2F2ZWQgcmV0dXJuIGFkZHJlc3MKLSAqCWI2ICA9IHJldHVybiBhZGRyZXNzCi0gKiBPbiBleGl0OgotICoJcjExID0gc2F2ZWQgYXIucGZzCi0gKglyMTUgPSBzeXN0ZW0gY2FsbCAjCi0gKgliMCAgPSBzYXZlZCByZXR1cm4gYWRkcmVzcwotICoJYWxsIG90aGVyICJzY3JhdGNoIiByZWdpc3RlcnM6CXVuZGVmaW5lZAotICoJYWxsICJwcmVzZXJ2ZWQiIHJlZ2lzdGVyczoJc2FtZSBhcyBvbiBlbnRyeQotICovCi0KLUdMT0JBTF9FTlRSWShfX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGMpCi0JLnByb2xvZ3VlCi0JLmFsdHJwIGI2Ci0JLmJvZHkKLXsKLQkvKgotCSAqIE5vdGU6IHRoZSBrZXJuZWwgY2Fubm90IGFzc3VtZSB0aGF0IHRoZSBmaXJzdCB0d28gaW5zdHJ1Y3Rpb25zIGluIHRoaXMKLQkgKiBidW5kbGUgZ2V0IGV4ZWN1dGVkLiAgVGhlIHJlbWFpbmluZyBjb2RlIG11c3QgYmUgc2FmZSBldmVuIGlmCi0JICogdGhleSBkbyBub3QgZ2V0IGV4ZWN1dGVkLgotCSAqLwotCWFkZHMgcjE3PS0xMDI0LHIxNQkJCS8vIEEKLQltb3YgcjEwPTAJCQkJLy8gQSAgICBkZWZhdWx0IHRvIHN1Y2Nlc3NmdWwgc3lzY2FsbCBleGVjdXRpb24KLQllcGMJCQkJCS8vIEIJY2F1c2VzIHNwbGl0LWlzc3VlCi19Ci0JOzsKLQlyc20gcHNyLmJlIHwgcHNyLmkJCQkvLyBNMiAoNSBjeWMgdG8gc3Jsei5kKQotCUxPQURfRlNZU0NBTExfVEFCTEUocjE0KQkJLy8gWAotCTs7Ci0JbW92IHIxNj1JQTY0X0tSKENVUlJFTlQpCQkvLyBNMiAoMTIgY3ljKQotCXNobGFkZCByMTg9cjE3LDMscjE0CQkJLy8gQQotCW1vdiByMTk9TlJfc3lzY2FsbHMtMQkJCS8vIEEKLQk7OwotCWxmZXRjaCBbcjE4XQkJCQkvLyBNMHwxCi0JbW92IHIyOT1wc3IJCQkJLy8gTTIgKDEyIGN5YykKLQkvLyBJZiByMTcgaXMgYSBOYVQsIHA2IHdpbGwgYmUgemVybwotCWNtcC5nZXUgcDYscDc9cjE5LHIxNwkJCS8vIEEgICAgKHN5c25yID4gMCAmJiBzeXNuciA8IDEwMjQrTlJfc3lzY2FsbHMpPwotCTs7Ci0JbW92IHIyMT1hci5mcHNyCQkJCS8vIE0yICgxMiBjeWMpCi0JdG5hdC5ueiBwMTAscDk9cjE1CQkJLy8gSTAKLQltb3YuaSByMjY9YXIucGZzCQkJLy8gSTAgKHdvdWxkIHN0YWxsIGFueWhvdyBkdWUgdG8gc3Jsei5kLi4uKQotCTs7Ci0Jc3Jsei5kCQkJCQkvLyBNMCAoZm9yY2VzIHNwbGl0LWlzc3VlKSBlbnN1cmUgUFNSLkJFPT0wCi0ocDYpCWxkOCByMTg9W3IxOF0JCQkJLy8gTTB8MQotCW5vcC5pIDAKLQk7OwotCW5vcC5tIDAKLShwNikJdGJpdC56LnVuYyBwOCxwMD1yMTgsMAkJCS8vIEkwIChkdWFsLWlzc3VlcyB3aXRoICJtb3YgYjc9cjE4IiEpCi0Jbm9wLmkgMAotCTs7Ci0ocDgpCXNzbSBwc3IuaQotKHA2KQltb3YgYjc9cjE4CQkJCS8vIEkwCi0ocDgpCWJyLmRwdGsubWFueSBiNwkJCQkvLyBCCi0KLQltb3YgcjI3PWFyLnJzYwkJCQkvLyBNMiAoMTIgY3ljKQotLyoKLSAqIGJybC5jb25kIGRvZXNuJ3Qgd29yayBhcyBpbnRlbmRlZCBiZWNhdXNlIHRoZSBsaW5rZXIgd291bGQgY29udmVydCB0aGlzIGJyYW5jaAotICogaW50byBhIGJyYW5jaCB0byBhIFBMVC4gIFBlcmhhcHMgdGhlcmUgd2lsbCBiZSBhIHdheSB0byBhdm9pZCB0aGlzIHdpdGggc29tZQotICogZnV0dXJlIHZlcnNpb24gb2YgdGhlIGxpbmtlci4gIEluIHRoZSBtZWFudGltZSwgd2UganVzdCB1c2UgYW4gaW5kaXJlY3QgYnJhbmNoCi0gKiBpbnN0ZWFkLgotICovCi0jaWZkZWYgQ09ORklHX0lUQU5JVU0KLShwNikJYWRkIHIxND0tOCxyMTQJCQkJLy8gcjE0IDwtIGFkZHIgb2YgZnN5c19idWJibGVfZG93biBlbnRyeQotCTs7Ci0ocDYpCWxkOCByMTQ9W3IxNF0JCQkJLy8gcjE0IDwtIGZzeXNfYnViYmxlX2Rvd24KLQk7OwotKHA2KQltb3YgYjc9cjE0Ci0ocDYpCWJyLnNwdGsubWFueSBiNwotI2Vsc2UKLQlCUkxfQ09ORF9GU1lTX0JVQkJMRV9ET1dOKHA2KQotI2VuZGlmCi0Jc3NtIHBzci5pCi0JbW92IHIxMD0tMQotKHAxMCkJbW92IHI4PUVJTlZBTAotKHA5KQltb3Ygcjg9RU5PU1lTCi0JRlNZU19SRVRVUk4KLUVORChfX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGMpCi0KICMJZGVmaW5lIEFSRzBfT0ZGCQkoMTYgKyBJQTY0X1NJR0ZSQU1FX0FSRzBfT0ZGU0VUKQogIwlkZWZpbmUgQVJHMV9PRkYJCSgxNiArIElBNjRfU0lHRlJBTUVfQVJHMV9PRkZTRVQpCiAjCWRlZmluZSBBUkcyX09GRgkJKDE2ICsgSUE2NF9TSUdGUkFNRV9BUkcyX09GRlNFVCkKQEAgLTM3NCwzICsyOTQsOTIgQEAKIAkvLyBpbnZhbGEgbm90IG5lY2Vzc2FyeSBhcyB0aGF0IHdpbGwgaGFwcGVuIHdoZW4gcmV0dXJuaW5nIHRvIHVzZXItbW9kZQogCWJyLmNvbmQuc3B0ayBiYWNrX2Zyb21fcmVzdG9yZV9yYnMKIEVORChfX2tlcm5lbF9zaWd0cmFtcCkKKworLyoKKyAqIE9uIGVudHJ5OgorICoJcjExID0gc2F2ZWQgYXIucGZzCisgKglyMTUgPSBzeXN0ZW0gY2FsbCAjCisgKgliMCAgPSBzYXZlZCByZXR1cm4gYWRkcmVzcworICoJYjYgID0gcmV0dXJuIGFkZHJlc3MKKyAqIE9uIGV4aXQ6CisgKglyMTEgPSBzYXZlZCBhci5wZnMKKyAqCXIxNSA9IHN5c3RlbSBjYWxsICMKKyAqCWIwICA9IHNhdmVkIHJldHVybiBhZGRyZXNzCisgKglhbGwgb3RoZXIgInNjcmF0Y2giIHJlZ2lzdGVyczoJdW5kZWZpbmVkCisgKglhbGwgInByZXNlcnZlZCIgcmVnaXN0ZXJzOglzYW1lIGFzIG9uIGVudHJ5CisgKi8KKworR0xPQkFMX0VOVFJZKF9fa2VybmVsX3N5c2NhbGxfdmlhX2VwYykKKwkucHJvbG9ndWUKKwkuYWx0cnAgYjYKKwkuYm9keQoreworCS8qCisJICogTm90ZTogdGhlIGtlcm5lbCBjYW5ub3QgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IHR3byBpbnN0cnVjdGlvbnMgaW4gdGhpcworCSAqIGJ1bmRsZSBnZXQgZXhlY3V0ZWQuICBUaGUgcmVtYWluaW5nIGNvZGUgbXVzdCBiZSBzYWZlIGV2ZW4gaWYKKwkgKiB0aGV5IGRvIG5vdCBnZXQgZXhlY3V0ZWQuCisJICovCisJYWRkcyByMTc9LTEwMjQscjE1CQkJLy8gQQorCW1vdiByMTA9MAkJCQkvLyBBICAgIGRlZmF1bHQgdG8gc3VjY2Vzc2Z1bCBzeXNjYWxsIGV4ZWN1dGlvbgorCWVwYwkJCQkJLy8gQgljYXVzZXMgc3BsaXQtaXNzdWUKK30KKwk7OworCVJTTV9QU1JfQkVfSShyMjAsIHIyMikJCQkvLyBNMiAoNSBjeWMgdG8gc3Jsei5kKQorCUxPQURfRlNZU0NBTExfVEFCTEUocjE0KQkJLy8gWAorCTs7CisJbW92IHIxNj1JQTY0X0tSKENVUlJFTlQpCQkvLyBNMiAoMTIgY3ljKQorCXNobGFkZCByMTg9cjE3LDMscjE0CQkJLy8gQQorCW1vdiByMTk9TlJfc3lzY2FsbHMtMQkJCS8vIEEKKwk7OworCWxmZXRjaCBbcjE4XQkJCQkvLyBNMHwxCisJTU9WX0ZST01fUFNSKHAwLCByMjksIHI4KQkJLy8gTTIgKDEyIGN5YykKKwkvLyBJZiByMTcgaXMgYSBOYVQsIHA2IHdpbGwgYmUgemVybworCWNtcC5nZXUgcDYscDc9cjE5LHIxNwkJCS8vIEEgICAgKHN5c25yID4gMCAmJiBzeXNuciA8IDEwMjQrTlJfc3lzY2FsbHMpPworCTs7CisJbW92IHIyMT1hci5mcHNyCQkJCS8vIE0yICgxMiBjeWMpCisJdG5hdC5ueiBwMTAscDk9cjE1CQkJLy8gSTAKKwltb3YuaSByMjY9YXIucGZzCQkJLy8gSTAgKHdvdWxkIHN0YWxsIGFueWhvdyBkdWUgdG8gc3Jsei5kLi4uKQorCTs7CisJc3Jsei5kCQkJCQkvLyBNMCAoZm9yY2VzIHNwbGl0LWlzc3VlKSBlbnN1cmUgUFNSLkJFPT0wCisocDYpCWxkOCByMTg9W3IxOF0JCQkJLy8gTTB8MQorCW5vcC5pIDAKKwk7OworCW5vcC5tIDAKKyhwNikJdGJpdC56LnVuYyBwOCxwMD1yMTgsMAkJCS8vIEkwIChkdWFsLWlzc3VlcyB3aXRoICJtb3YgYjc9cjE4IiEpCisJbm9wLmkgMAorCTs7CisJU1NNX1BTUl9JKHA4LCBwMTQsIHIyNSkKKyhwNikJbW92IGI3PXIxOAkJCQkvLyBJMAorKHA4KQlici5kcHRrLm1hbnkgYjcJCQkJLy8gQgorCisJbW92IHIyNz1hci5yc2MJCQkJLy8gTTIgKDEyIGN5YykKKy8qCisgKiBicmwuY29uZCBkb2Vzbid0IHdvcmsgYXMgaW50ZW5kZWQgYmVjYXVzZSB0aGUgbGlua2VyIHdvdWxkIGNvbnZlcnQgdGhpcyBicmFuY2gKKyAqIGludG8gYSBicmFuY2ggdG8gYSBQTFQuICBQZXJoYXBzIHRoZXJlIHdpbGwgYmUgYSB3YXkgdG8gYXZvaWQgdGhpcyB3aXRoIHNvbWUKKyAqIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoZSBsaW5rZXIuICBJbiB0aGUgbWVhbnRpbWUsIHdlIGp1c3QgdXNlIGFuIGluZGlyZWN0IGJyYW5jaAorICogaW5zdGVhZC4KKyAqLworI2lmZGVmIENPTkZJR19JVEFOSVVNCisocDYpCWFkZCByMTQ9LTgscjE0CQkJCS8vIHIxNCA8LSBhZGRyIG9mIGZzeXNfYnViYmxlX2Rvd24gZW50cnkKKwk7OworKHA2KQlsZDggcjE0PVtyMTRdCQkJCS8vIHIxNCA8LSBmc3lzX2J1YmJsZV9kb3duCisJOzsKKyhwNikJbW92IGI3PXIxNAorKHA2KQlici5zcHRrLm1hbnkgYjcKKyNlbHNlCisJQlJMX0NPTkRfRlNZU19CVUJCTEVfRE9XTihwNikKKyNlbmRpZgorCVNTTV9QU1JfSShwMCwgcDE0LCByMTApCisJbW92IHIxMD0tMQorKHAxMCkJbW92IHI4PUVJTlZBTAorKHA5KQltb3Ygcjg9RU5PU1lTCisJRlNZU19SRVRVUk4KKworI2lmZGVmIENPTkZJR19QQVJBVklSVAorCS8qCisJICogcGFkZCB0byBtYWtlIHRoZSBzaXplIG9mIHRoaXMgc3ltYm9sIGNvbnN0YW50CisJICogaW5kZXBlbmRlbnQgb2YgcGFyYXZpcnR1YWxpemF0aW9uLgorCSAqLworCS5hbGlnbiBQQUdFX1NJWkUgLyA4CisjZW5kaWYKK0VORChfX2tlcm5lbF9zeXNjYWxsX3ZpYV9lcGMpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2dhdGUubGRzLlMgYi9hcmNoL2lhNjQva2VybmVsL2dhdGUubGRzLlMKaW5kZXggM2NiMWFiYy4uODhjNjRlZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9nYXRlLmxkcy5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZ2F0ZS5sZHMuUwpAQCAtNyw2ICs3LDcgQEAKIAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgInBhcmF2aXJ0X3BhdGNobGlzdC5oIgogCiBTRUNUSU9OUwogewpAQCAtMzMsMjEgKzM0LDIxIEBACiAJLiA9IEdBVEVfQUREUiArIDB4NjAwOwogCiAJLmRhdGEucGF0Y2gJCTogewotCQlfX3N0YXJ0X2dhdGVfbWNraW5sZXlfZTlfcGF0Y2hsaXN0ID0gLjsKKwkJX19wYXJhdmlydF9zdGFydF9nYXRlX21ja2lubGV5X2U5X3BhdGNobGlzdCA9IC47CiAJCSooLmRhdGEucGF0Y2gubWNraW5sZXlfZTkpCi0JCV9fZW5kX2dhdGVfbWNraW5sZXlfZTlfcGF0Y2hsaXN0ID0gLjsKKwkJX19wYXJhdmlydF9lbmRfZ2F0ZV9tY2tpbmxleV9lOV9wYXRjaGxpc3QgPSAuOwogCi0JCV9fc3RhcnRfZ2F0ZV92dG9wX3BhdGNobGlzdCA9IC47CisJCV9fcGFyYXZpcnRfc3RhcnRfZ2F0ZV92dG9wX3BhdGNobGlzdCA9IC47CiAJCSooLmRhdGEucGF0Y2gudnRvcCkKLQkJX19lbmRfZ2F0ZV92dG9wX3BhdGNobGlzdCA9IC47CisJCV9fcGFyYXZpcnRfZW5kX2dhdGVfdnRvcF9wYXRjaGxpc3QgPSAuOwogCi0JCV9fc3RhcnRfZ2F0ZV9mc3lzY2FsbF9wYXRjaGxpc3QgPSAuOworCQlfX3BhcmF2aXJ0X3N0YXJ0X2dhdGVfZnN5c2NhbGxfcGF0Y2hsaXN0ID0gLjsKIAkJKiguZGF0YS5wYXRjaC5mc3lzY2FsbF90YWJsZSkKLQkJX19lbmRfZ2F0ZV9mc3lzY2FsbF9wYXRjaGxpc3QgPSAuOworCQlfX3BhcmF2aXJ0X2VuZF9nYXRlX2ZzeXNjYWxsX3BhdGNobGlzdCA9IC47CiAKLQkJX19zdGFydF9nYXRlX2JybF9mc3lzX2J1YmJsZV9kb3duX3BhdGNobGlzdCA9IC47CisJCV9fcGFyYXZpcnRfc3RhcnRfZ2F0ZV9icmxfZnN5c19idWJibGVfZG93bl9wYXRjaGxpc3QgPSAuOwogCQkqKC5kYXRhLnBhdGNoLmJybF9mc3lzX2J1YmJsZV9kb3duKQotCQlfX2VuZF9nYXRlX2JybF9mc3lzX2J1YmJsZV9kb3duX3BhdGNobGlzdCA9IC47CisJCV9fcGFyYXZpcnRfZW5kX2dhdGVfYnJsX2ZzeXNfYnViYmxlX2Rvd25fcGF0Y2hsaXN0ID0gLjsKIAl9CQkJCQkJOnJlYWRhYmxlCiAKIAkuSUFfNjQudW53aW5kX2luZm8JOiB7ICooLklBXzY0LnVud2luZF9pbmZvKikgfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwppbmRleCA1OTMwMWM0Li4yM2Y4NDZkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2hlYWQuUworKysgYi9hcmNoL2lhNjQva2VybmVsL2hlYWQuUwpAQCAtMTA1MCw3ICsxMDUwLDcgQEAKICAqIGV4Y2VwdCB0aGF0IHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQgdGhlIHNoaWZ0IGFyZSBkb25lIHdpdGggMTI4LWJpdAogICogaW50ZXJtZWRpYXRlIHByZWNpc2lvbiBzbyB0aGF0IHdlIGNhbiBwcm9kdWNlIGEgZnVsbCA2NC1iaXQgcmVzdWx0LgogICovCi1HTE9CQUxfRU5UUlkoc2NoZWRfY2xvY2spCitHTE9CQUxfRU5UUlkoaWE2NF9uYXRpdmVfc2NoZWRfY2xvY2spCiAJYWRkbCByOD1USElTX0NQVShjcHVfaW5mbykgKyBJQTY0X0NQVUlORk9fTlNFQ19QRVJfQ1lDX09GRlNFVCxyMAogCW1vdi5tIHI5PWFyLml0YwkJLy8gZmV0Y2ggY3ljbGUtY291bnRlcgkJCQkoMzUgY3ljKQogCTs7CkBAIC0xMDY2LDcgKzEwNjYsMTMgQEAKIAk7OwogCXNocnAgcjg9cjkscjgsSUE2NF9OU0VDX1BFUl9DWUNfU0hJRlQKIAlici5yZXQuc3B0ay5tYW55IHJwCi1FTkQoc2NoZWRfY2xvY2spCitFTkQoaWE2NF9uYXRpdmVfc2NoZWRfY2xvY2spCisjaWZuZGVmIENPTkZJR19QQVJBVklSVAorCS8vdW5zaWduZWQgbG9uZyBsb25nCisJLy9zY2hlZF9jbG9jayh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbGlhcygiaWE2NF9uYXRpdmVfc2NoZWRfY2xvY2siKSkpOworCS5nbG9iYWwgc2NoZWRfY2xvY2sKK3NjaGVkX2Nsb2NrID0gaWE2NF9uYXRpdmVfc2NoZWRfY2xvY2sKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIEdMT0JBTF9FTlRSWShjeWNsZV90b19jcHV0aW1lKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwppbmRleCA2ZGExZjIwLi4yZDMxMTg2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwpAQCAtMTEyLDMgKzExMiw5IEBACiAjZW5kaWYKIGV4dGVybiBjaGFyIGlhNjRfaXZ0W107CiBFWFBPUlRfU1lNQk9MKGlhNjRfaXZ0KTsKKworI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCisvKiBtY291bnQgaXMgZGVmaW5lZCBpbiBhc3NlbWJseSAqLworRVhQT1JUX1NZTUJPTChfbWNvdW50KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUyBiL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMKaW5kZXggZjY3NWQ4ZTMuLmVjOWE1ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaXZ0LlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9pdnQuUwpAQCAtODA0LDcgKzgwNCw3IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCXN0MSBbcjE2XT1yMAkJCQkvLyBNMnwzIGNsZWFyIGN1cnJlbnQtPnRocmVhZC5vbl91c3RhY2sgZmxhZwogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCi0JbW92Lm0gcjMwPWFyLml0YwkJCS8vIE0gICAgZ2V0IGN5Y2xlIGZvciBhY2NvdW50aW5nCisJTU9WX0ZST01fSVRDKHAwLCBwMTQsIHIzMCwgcjE4KQkJLy8gTSAgICBnZXQgY3ljbGUgZm9yIGFjY291bnRpbmcKICNlbHNlCiAJbW92IGI2PXIzMAkJCQkvLyBJMCAgIHNldHVwIHN5c2NhbGwgaGFuZGxlciBicmFuY2ggcmVnIGVhcmx5CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCmluZGV4IGJhYjFkZTIuLjhmMzNhODggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwpAQCAtMTQ1Niw5ICsxNDU2LDkgQEAKIAogCWlhNjRfbWNhX2NtY19pbnRfaGFuZGxlcihjbWNfaXJxLCBhcmcpOwogCi0JZm9yICgrK2NwdWlkIDsgY3B1aWQgPCBOUl9DUFVTICYmICFjcHVfb25saW5lKGNwdWlkKSA7IGNwdWlkKyspOworCWNwdWlkID0gY3B1bWFza19uZXh0KGNwdWlkKzEsIGNwdV9vbmxpbmVfbWFzayk7CiAKLQlpZiAoY3B1aWQgPCBOUl9DUFVTKSB7CisJaWYgKGNwdWlkIDwgbnJfY3B1X2lkcykgewogCQlwbGF0Zm9ybV9zZW5kX2lwaShjcHVpZCwgSUE2NF9DTUNQX1ZFQ1RPUiwgSUE2NF9JUElfRE1fSU5ULCAwKTsKIAl9IGVsc2UgewogCQkvKiBJZiBubyBsb2cgcmVjb3JkLCBzd2l0Y2ggb3V0IG9mIHBvbGxpbmcgbW9kZSAqLwpAQCAtMTUyNSw3ICsxNTI1LDcgQEAKIAogCWlhNjRfbWNhX2NwZV9pbnRfaGFuZGxlcihjcGVfaXJxLCBhcmcpOwogCi0JZm9yICgrK2NwdWlkIDsgY3B1aWQgPCBOUl9DUFVTICYmICFjcHVfb25saW5lKGNwdWlkKSA7IGNwdWlkKyspOworCWNwdWlkID0gY3B1bWFza19uZXh0KGNwdWlkKzEsIGNwdV9vbmxpbmVfbWFzayk7CiAKIAlpZiAoY3B1aWQgPCBOUl9DUFVTKSB7CiAJCXBsYXRmb3JtX3NlbmRfaXBpKGNwdWlkLCBJQTY0X0NQRVBfVkVDVE9SLCBJQTY0X0lQSV9ETV9JTlQsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYWFhN2Q5MC4uZGEzYjBjZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21vZHVsZS5jCkBAIC00NDYsNiArNDQ2LDE0IEBACiAJCQltb2QtPmFyY2gub3BkID0gczsKIAkJZWxzZSBpZiAoc3RyY21wKCIuSUFfNjQudW53aW5kIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpID09IDApCiAJCQltb2QtPmFyY2gudW53aW5kID0gczsKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKKwkJZWxzZSBpZiAoc3RyY21wKCIucGFyYXZpcnRfYnVuZGxlcyIsCisJCQkJc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpID09IDApCisJCQltb2QtPmFyY2gucGFyYXZpcnRfYnVuZGxlcyA9IHM7CisJCWVsc2UgaWYgKHN0cmNtcCgiLnBhcmF2aXJ0X2luc3RzIiwKKwkJCQlzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkgPT0gMCkKKwkJCW1vZC0+YXJjaC5wYXJhdmlydF9pbnN0cyA9IHM7CisjZW5kaWYKIAogCWlmICghbW9kLT5hcmNoLmNvcmVfcGx0IHx8ICFtb2QtPmFyY2guaW5pdF9wbHQgfHwgIW1vZC0+YXJjaC5nb3QgfHwgIW1vZC0+YXJjaC5vcGQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogc2VjdGlvbnMgbWlzc2luZ1xuIiwgbW9kLT5uYW1lKTsKQEAgLTUyNSw4ICs1MzMsNyBAQAogCQkJZ290byBmb3VuZDsKIAogCS8qIE5vdCBlbm91Z2ggR09UIGVudHJpZXM/ICovCi0JaWYgKGUgPj0gKHN0cnVjdCBnb3RfZW50cnkgKikgKG1vZC0+YXJjaC5nb3QtPnNoX2FkZHIgKyBtb2QtPmFyY2guZ290LT5zaF9zaXplKSkKLQkJQlVHKCk7CisJQlVHX09OKGUgPj0gKHN0cnVjdCBnb3RfZW50cnkgKikgKG1vZC0+YXJjaC5nb3QtPnNoX2FkZHIgKyBtb2QtPmFyY2guZ290LT5zaF9zaXplKSk7CiAKIAllLT52YWwgPSB2YWx1ZTsKIAkrK21vZC0+YXJjaC5uZXh0X2dvdF9lbnRyeTsKQEAgLTkyMSw2ICs5MjgsMzAgQEAKIAlERUJVR1AoIiVzOiBpbml0OiBlbnRyeT0lcFxuIiwgX19mdW5jX18sIG1vZC0+aW5pdCk7CiAJaWYgKG1vZC0+YXJjaC51bndpbmQpCiAJCXJlZ2lzdGVyX3Vud2luZF90YWJsZShtb2QpOworI2lmZGVmIENPTkZJR19QQVJBVklSVAorICAgICAgICBpZiAobW9kLT5hcmNoLnBhcmF2aXJ0X2J1bmRsZXMpIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9idW5kbGUgKnN0YXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9idW5kbGUgKikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZC0+YXJjaC5wYXJhdmlydF9idW5kbGVzLT5zaF9hZGRyOworICAgICAgICAgICAgICAgIHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2J1bmRsZSAqZW5kID0KKyAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9idW5kbGUgKikKKyAgICAgICAgICAgICAgICAgICAgICAgIChtb2QtPmFyY2gucGFyYXZpcnRfYnVuZGxlcy0+c2hfYWRkciArCisgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLT5hcmNoLnBhcmF2aXJ0X2J1bmRsZXMtPnNoX3NpemUpOworCisgICAgICAgICAgICAgICAgcGFyYXZpcnRfcGF0Y2hfYXBwbHlfYnVuZGxlKHN0YXJ0LCBlbmQpOworICAgICAgICB9CisgICAgICAgIGlmIChtb2QtPmFyY2gucGFyYXZpcnRfaW5zdHMpIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9pbnN0ICpzdGFydCA9CisgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfaW5zdCAqKQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kLT5hcmNoLnBhcmF2aXJ0X2luc3RzLT5zaF9hZGRyOworICAgICAgICAgICAgICAgIHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2luc3QgKmVuZCA9CisgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfaW5zdCAqKQorICAgICAgICAgICAgICAgICAgICAgICAgKG1vZC0+YXJjaC5wYXJhdmlydF9pbnN0cy0+c2hfYWRkciArCisgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLT5hcmNoLnBhcmF2aXJ0X2luc3RzLT5zaF9zaXplKTsKKworICAgICAgICAgICAgICAgIHBhcmF2aXJ0X3BhdGNoX2FwcGx5X2luc3Qoc3RhcnQsIGVuZCk7CisgICAgICAgIH0KKyNlbmRpZgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0LmMgYi9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0LmMKaW5kZXggOWYxNGMxNi4uYTIxZDdiYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnQuYwpAQCAtNDYsMTMgKzQ2LDIzIEBACiAgKiBpbml0aWFsaXphdGlvbiBob29rcy4KICAqLwogCi1zdHJ1Y3QgcHZfaW5pdF9vcHMgcHZfaW5pdF9vcHM7CitzdGF0aWMgdm9pZCBfX2luaXQKK2lhNjRfbmF0aXZlX3BhdGNoX2JyYW5jaCh1bnNpZ25lZCBsb25nIHRhZywgdW5zaWduZWQgbG9uZyB0eXBlKTsKKworc3RydWN0IHB2X2luaXRfb3BzIHB2X2luaXRfb3BzID0KK3sKKyNpZmRlZiBBU01fU1VQUE9SVEVECisJLnBhdGNoX2J1bmRsZSA9IGlhNjRfbmF0aXZlX3BhdGNoX2J1bmRsZSwKKyNlbmRpZgorCS5wYXRjaF9icmFuY2ggPSBpYTY0X25hdGl2ZV9wYXRjaF9icmFuY2gsCit9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBwdl9jcHVfb3BzCiAgKiBpbnRyaW5zaWNzIGhvb2tzLgogICovCiAKKyNpZm5kZWYgQVNNX1NVUFBPUlRFRAogLyogaWE2NF9uYXRpdmVfeHh4IGFyZSBtYWNyb3Mgc28gdGhhdCB3ZSBoYXZlIHRvIG1ha2UgdGhlbSByZWFsIGZ1bmN0aW9ucyAqLwogCiAjZGVmaW5lIERFRklORV9WT0lEX0ZVTkMxKG5hbWUpCQkJCQlcCkBAIC02MCw3ICs3MCwxNCBAQAogCWlhNjRfbmF0aXZlXyAjIyBuYW1lICMjIF9mdW5jKHVuc2lnbmVkIGxvbmcgYXJnKQlcCiAJewkJCQkJCQlcCiAJCWlhNjRfbmF0aXZlXyAjIyBuYW1lKGFyZyk7CQkJXAotCX0JCQkJCQkJXAorCX0KKworI2RlZmluZSBERUZJTkVfVk9JRF9GVU5DMV9WT0lEKG5hbWUpCQkJCVwKKwlzdGF0aWMgdm9pZAkJCQkJCVwKKwlpYTY0X25hdGl2ZV8gIyMgbmFtZSAjIyBfZnVuYyh2b2lkICphcmcpCQlcCisJewkJCQkJCQlcCisJCWlhNjRfbmF0aXZlXyAjIyBuYW1lKGFyZyk7CQkJXAorCX0KIAogI2RlZmluZSBERUZJTkVfVk9JRF9GVU5DMihuYW1lKQkJCQkJXAogCXN0YXRpYyB2b2lkCQkJCQkJXApAQCAtNjgsNyArODUsNyBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMSkJXAogCXsJCQkJCQkJXAogCQlpYTY0X25hdGl2ZV8gIyMgbmFtZShhcmcwLCBhcmcxKTsJCVwKLQl9CQkJCQkJCVwKKwl9CiAKICNkZWZpbmUgREVGSU5FX0ZVTkMwKG5hbWUpCQkJXAogCXN0YXRpYyB1bnNpZ25lZCBsb25nCQkJXApAQCAtODQsNyArMTAxLDcgQEAKIAkJcmV0dXJuIGlhNjRfbmF0aXZlXyAjIyBuYW1lKGFyZyk7CVwKIAl9CQkJCQkJXAogCi1ERUZJTkVfVk9JRF9GVU5DMShmYyk7CitERUZJTkVfVk9JRF9GVU5DMV9WT0lEKGZjKTsKIERFRklORV9WT0lEX0ZVTkMxKGludHJpbl9sb2NhbF9pcnFfcmVzdG9yZSk7CiAKIERFRklORV9WT0lEX0ZVTkMyKHB0Y2dhKTsKQEAgLTI3NCw2ICsyOTEsMjY2IEBACiAJCWJyZWFrOwogCX0KIH0KKyNlbHNlCisKKyNkZWZpbmUgX19ERUZJTkVfRlVOQyhuYW1lLCBjb2RlKQkJCQkJXAorCWV4dGVybiBjb25zdCBjaGFyIGlhNjRfbmF0aXZlXyAjIyBuYW1lICMjIF9kaXJlY3Rfc3RhcnRbXTsJXAorCWV4dGVybiBjb25zdCBjaGFyIGlhNjRfbmF0aXZlXyAjIyBuYW1lICMjIF9kaXJlY3RfZW5kW107CVwKKwlhc20gKCIuYWxpZ24gMzJcbiIJCQkJCQlcCisJICAgICAiLnByb2MgaWE2NF9uYXRpdmVfIiAjbmFtZSAiX2Z1bmNcbiIJCQlcCisJICAgICAiaWE2NF9uYXRpdmVfIiAjbmFtZSAiX2Z1bmM6XG4iCQkJCVwKKwkgICAgICJpYTY0X25hdGl2ZV8iICNuYW1lICJfZGlyZWN0X3N0YXJ0OlxuIgkJCVwKKwkgICAgIGNvZGUJCQkJCQkJXAorCSAgICAgImlhNjRfbmF0aXZlXyIgI25hbWUgIl9kaXJlY3RfZW5kOlxuIgkJCVwKKwkgICAgICJici5jb25kLnNwdGsubWFueSBiNlxuIgkJCQkJXAorCSAgICAgIi5lbmRwIGlhNjRfbmF0aXZlXyIgI25hbWUgIl9mdW5jXG4iKQorCisjZGVmaW5lIERFRklORV9WT0lEX0ZVTkMwKG5hbWUsIGNvZGUpCQkJCVwKKwlleHRlcm4gdm9pZAkJCQkJCVwKKwlpYTY0X25hdGl2ZV8gIyMgbmFtZSAjIyBfZnVuYyh2b2lkKTsJCQlcCisJX19ERUZJTkVfRlVOQyhuYW1lLCBjb2RlKQorCisjZGVmaW5lIERFRklORV9WT0lEX0ZVTkMxKG5hbWUsIGNvZGUpCQkJCVwKKwlleHRlcm4gdm9pZAkJCQkJCVwKKwlpYTY0X25hdGl2ZV8gIyMgbmFtZSAjIyBfZnVuYyh1bnNpZ25lZCBsb25nIGFyZyk7CVwKKwlfX0RFRklORV9GVU5DKG5hbWUsIGNvZGUpCisKKyNkZWZpbmUgREVGSU5FX1ZPSURfRlVOQzFfVk9JRChuYW1lLCBjb2RlKQkJCVwKKwlleHRlcm4gdm9pZAkJCQkJCVwKKwlpYTY0X25hdGl2ZV8gIyMgbmFtZSAjIyBfZnVuYyh2b2lkICphcmcpOwkJXAorCV9fREVGSU5FX0ZVTkMobmFtZSwgY29kZSkKKworI2RlZmluZSBERUZJTkVfVk9JRF9GVU5DMihuYW1lLCBjb2RlKQkJCQlcCisJZXh0ZXJuIHZvaWQJCQkJCQlcCisJaWE2NF9uYXRpdmVfICMjIG5hbWUgIyMgX2Z1bmModW5zaWduZWQgbG9uZyBhcmcwLAlcCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcxKTsJXAorCV9fREVGSU5FX0ZVTkMobmFtZSwgY29kZSkKKworI2RlZmluZSBERUZJTkVfRlVOQzAobmFtZSwgY29kZSkJCVwKKwlleHRlcm4gdW5zaWduZWQgbG9uZwkJCVwKKwlpYTY0X25hdGl2ZV8gIyMgbmFtZSAjIyBfZnVuYyh2b2lkKTsJXAorCV9fREVGSU5FX0ZVTkMobmFtZSwgY29kZSkKKworI2RlZmluZSBERUZJTkVfRlVOQzEobmFtZSwgdHlwZSwgY29kZSkJCQlcCisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCQkJXAorCWlhNjRfbmF0aXZlXyAjIyBuYW1lICMjIF9mdW5jKHR5cGUgYXJnKTsJXAorCV9fREVGSU5FX0ZVTkMobmFtZSwgY29kZSkKKworREVGSU5FX1ZPSURfRlVOQzFfVk9JRChmYywKKwkJICAgICAgICJmYyByOFxuIik7CitERUZJTkVfVk9JRF9GVU5DMShpbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmUsCisJCSAgIjs7XG4iCisJCSAgIiAgICAgY21wLm5lIHA2LCBwNyA9IHI4LCByMFxuIgorCQkgICI7O1xuIgorCQkgICIocDYpIHNzbSBwc3IuaVxuIgorCQkgICIocDcpIHJzbSBwc3IuaVxuIgorCQkgICI7O1xuIgorCQkgICIocDYpIHNybHouZFxuIik7CisKK0RFRklORV9WT0lEX0ZVTkMyKHB0Y2dhLAorCQkgICJwdGMuZ2EgcjgsIHI5XG4iKTsKK0RFRklORV9WT0lEX0ZVTkMyKHNldF9yciwKKwkJICAibW92IHJyW3I4XSA9IHI5XG4iKTsKKworLyogaWE2NF9uYXRpdmVfZ2V0cmVnKF9JQTY0X1JFR19QU1IpICYgSUE2NF9QU1JfSSAqLworREVGSU5FX0ZVTkMwKGdldF9wc3JfaSwKKwkgICAgICJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KDEgPDwgSUE2NF9QU1JfSV9CSVQpICJcbiIKKwkgICAgICJtb3YgcjggPSBwc3JcbiIKKwkgICAgICI7O1xuIgorCSAgICAgImFuZCByOCA9IHIyLCByOFxuIik7CisKK0RFRklORV9GVU5DMSh0aGFzaCwgdW5zaWduZWQgbG9uZywKKwkgICAgICJ0aGFzaCByOCA9IHI4XG4iKTsKK0RFRklORV9GVU5DMShnZXRfY3B1aWQsIGludCwKKwkgICAgICJtb3YgcjggPSBjcHVpZFtyOF1cbiIpOworREVGSU5FX0ZVTkMxKGdldF9wbWQsIGludCwKKwkgICAgICJtb3YgcjggPSBwbWRbcjhdXG4iKTsKK0RFRklORV9GVU5DMShnZXRfcnIsIHVuc2lnbmVkIGxvbmcsCisJICAgICAibW92IHI4ID0gcnJbcjhdXG4iKTsKKworREVGSU5FX1ZPSURfRlVOQzAoc3NtX2ksCisJCSAgInNzbSBwc3IuaVxuIik7CitERUZJTkVfVk9JRF9GVU5DMChyc21faSwKKwkJICAicnNtIHBzci5pXG4iKTsKKworZXh0ZXJuIHZvaWQKK2lhNjRfbmF0aXZlX3NldF9ycjBfdG9fcnI0X2Z1bmModW5zaWduZWQgbG9uZyB2YWwwLCB1bnNpZ25lZCBsb25nIHZhbDEsCisJCQkJdW5zaWduZWQgbG9uZyB2YWwyLCB1bnNpZ25lZCBsb25nIHZhbDMsCisJCQkJdW5zaWduZWQgbG9uZyB2YWw0KTsKK19fREVGSU5FX0ZVTkMoc2V0X3JyMF90b19ycjQsCisJICAgICAgIm1vdiBycltyMF0gPSByOFxuIgorCSAgICAgICJtb3ZsIHIyID0gMHgyMDAwMDAwMDAwMDAwMDAwXG4iCisJICAgICAgIjs7XG4iCisJICAgICAgIm1vdiBycltyMl0gPSByOVxuIgorCSAgICAgICJzaGwgcjMgPSByMiwgMVxuIgkvKiBtb3ZsIHIzID0gMHg0MDAwMDAwMDAwMDAwMDAwICovCisJICAgICAgIjs7XG4iCisJICAgICAgImFkZCByMiA9IHIyLCByM1xuIgkvKiBtb3ZsIHIyID0gMHg2MDAwMDAwMDAwMDAwMDAwICovCisJICAgICAgIm1vdiBycltyM10gPSByMTBcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAibW92IHJyW3IyXSA9IHIxMVxuIgorCSAgICAgICJzaGwgcjMgPSByMywgMVxuIgkvKiBtb3ZsIHIzID0gMHg4MDAwMDAwMDAwMDAwMDAwICovCisJICAgICAgIjs7XG4iCisJICAgICAgIm1vdiBycltyM10gPSByMTRcbiIpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBpYTY0X25hdGl2ZV9nZXRyZWdfZnVuYyhpbnQgcmVnbnVtKTsKK2FzbSgiLmdsb2JhbCBpYTY0X25hdGl2ZV9nZXRyZWdfZnVuY1xuIik7CisjZGVmaW5lIF9fREVGSU5FX0dFVF9SRUcoaWQsIHJlZykJCQlcCisJIm1vdiByMiA9ICIgX19zdHJpbmdpZnkoX0lBNjRfUkVHXyAjIyBpZCkgIlxuIglcCisJIjs7XG4iCQkJCQkJXAorCSJjbXAuZXEgcDYsIHAwID0gcjIsIHI4XG4iCQkJXAorCSI7O1xuIgkJCQkJCVwKKwkiKHA2KSBtb3YgcjggPSAiICNyZWcgIlxuIgkJCVwKKwkiKHA2KSBici5jb25kLnNwdGsubWFueSBiNlxuIgkJCVwKKwkiOztcbiIKKyNkZWZpbmUgX19ERUZJTkVfR0VUX0FSKGlkLCByZWcpCV9fREVGSU5FX0dFVF9SRUcoQVJfICMjIGlkLCBhci5yZWcpCisjZGVmaW5lIF9fREVGSU5FX0dFVF9DUihpZCwgcmVnKQlfX0RFRklORV9HRVRfUkVHKENSXyAjIyBpZCwgY3IucmVnKQorCitfX0RFRklORV9GVU5DKGdldHJlZywKKwkgICAgICBfX0RFRklORV9HRVRfUkVHKEdQLCBncCkKKwkgICAgICAvKl9fREVGSU5FX0dFVF9SRUcoSVAsIGlwKSovIC8qIHJldHVybmVkIGlwIHZhbHVlIHNob3VsZG4ndCBiZSBjb25zdGFudCAqLworCSAgICAgIF9fREVGSU5FX0dFVF9SRUcoUFNSLCBwc3IpCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhUUCwgdHApCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhTUCwgc3ApCisKKwkgICAgICBfX0RFRklORV9HRVRfUkVHKEFSX0tSMCwgYXIwKQorCSAgICAgIF9fREVGSU5FX0dFVF9SRUcoQVJfS1IxLCBhcjEpCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhBUl9LUjIsIGFyMikKKwkgICAgICBfX0RFRklORV9HRVRfUkVHKEFSX0tSMywgYXIzKQorCSAgICAgIF9fREVGSU5FX0dFVF9SRUcoQVJfS1I0LCBhcjQpCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhBUl9LUjUsIGFyNSkKKwkgICAgICBfX0RFRklORV9HRVRfUkVHKEFSX0tSNiwgYXI2KQorCSAgICAgIF9fREVGSU5FX0dFVF9SRUcoQVJfS1I3LCBhcjcpCisJICAgICAgX19ERUZJTkVfR0VUX0FSKFJTQywgcnNjKQorCSAgICAgIF9fREVGSU5FX0dFVF9BUihCU1AsIGJzcCkKKwkgICAgICBfX0RFRklORV9HRVRfQVIoQlNQU1RPUkUsIGJzcHN0b3JlKQorCSAgICAgIF9fREVGSU5FX0dFVF9BUihSTkFULCBybmF0KQorCSAgICAgIF9fREVGSU5FX0dFVF9BUihGQ1IsIGZjcikKKwkgICAgICBfX0RFRklORV9HRVRfQVIoRUZMQUcsIGVmbGFnKQorCSAgICAgIF9fREVGSU5FX0dFVF9BUihDU0QsIGNzZCkKKwkgICAgICBfX0RFRklORV9HRVRfQVIoU1NELCBzc2QpCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhBUl9DRkxBRywgYXIyNykKKwkgICAgICBfX0RFRklORV9HRVRfQVIoRlNSLCBmc3IpCisJICAgICAgX19ERUZJTkVfR0VUX0FSKEZJUiwgZmlyKQorCSAgICAgIF9fREVGSU5FX0dFVF9BUihGRFIsIGZkcikKKwkgICAgICBfX0RFRklORV9HRVRfQVIoQ0NWLCBjY3YpCisJICAgICAgX19ERUZJTkVfR0VUX0FSKFVOQVQsIHVuYXQpCisJICAgICAgX19ERUZJTkVfR0VUX0FSKEZQU1IsIGZwc3IpCisJICAgICAgX19ERUZJTkVfR0VUX0FSKElUQywgaXRjKQorCSAgICAgIF9fREVGSU5FX0dFVF9BUihQRlMsIHBmcykKKwkgICAgICBfX0RFRklORV9HRVRfQVIoTEMsIGxjKQorCSAgICAgIF9fREVGSU5FX0dFVF9BUihFQywgZWMpCisKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoRENSLCBkY3IpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKElUTSwgaXRtKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJVkEsIGl2YSkKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoUFRBLCBwdGEpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKElQU1IsIGlwc3IpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKElTUiwgaXNyKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJSVAsIGlpcCkKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoSUZBLCBpZmEpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKElUSVIsIGl0aXIpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKElJUEEsIGlpcGEpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKElGUywgaWZzKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJSU0sIGlpbSkKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoSUhBLCBpaGEpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKExJRCwgbGlkKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJVlIsIGl2cikKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoVFBSLCB0cHIpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKEVPSSwgZW9pKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJUlIwLCBpcnIwKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJUlIxLCBpcnIxKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJUlIyLCBpcnIyKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJUlIzLCBpcnIzKQorCSAgICAgIF9fREVGSU5FX0dFVF9DUihJVFYsIGl0dikKKwkgICAgICBfX0RFRklORV9HRVRfQ1IoUE1WLCBwbXYpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKENNQ1YsIGNtY3YpCisJICAgICAgX19ERUZJTkVfR0VUX0NSKExSUjAsIGxycjApCisJICAgICAgX19ERUZJTkVfR0VUX0NSKExSUjEsIGxycjEpCisKKwkgICAgICAibW92IHI4ID0gLTFcbiIJLyogdW5zdXBwb3J0ZWQgY2FzZSAqLworCSk7CisKK2V4dGVybiB2b2lkIGlhNjRfbmF0aXZlX3NldHJlZ19mdW5jKGludCByZWdudW0sIHVuc2lnbmVkIGxvbmcgdmFsKTsKK2FzbSgiLmdsb2JhbCBpYTY0X25hdGl2ZV9zZXRyZWdfZnVuY1xuIik7CisjZGVmaW5lIF9fREVGSU5FX1NFVF9SRUcoaWQsIHJlZykJCQlcCisJIm1vdiByMiA9ICIgX19zdHJpbmdpZnkoX0lBNjRfUkVHXyAjIyBpZCkgIlxuIglcCisJIjs7XG4iCQkJCQkJXAorCSJjbXAuZXEgcDYsIHAwID0gcjIsIHI5XG4iCQkJXAorCSI7O1xuIgkJCQkJCVwKKwkiKHA2KSBtb3YgIiAjcmVnICIgPSByOFxuIgkJCVwKKwkiKHA2KSBici5jb25kLnNwdGsubWFueSBiNlxuIgkJCVwKKwkiOztcbiIKKyNkZWZpbmUgX19ERUZJTkVfU0VUX0FSKGlkLCByZWcpCV9fREVGSU5FX1NFVF9SRUcoQVJfICMjIGlkLCBhci5yZWcpCisjZGVmaW5lIF9fREVGSU5FX1NFVF9DUihpZCwgcmVnKQlfX0RFRklORV9TRVRfUkVHKENSXyAjIyBpZCwgY3IucmVnKQorX19ERUZJTkVfRlVOQyhzZXRyZWcsCisJICAgICAgIm1vdiByMiA9ICIgX19zdHJpbmdpZnkoX0lBNjRfUkVHX1BTUl9MKSAiXG4iCisJICAgICAgIjs7XG4iCisJICAgICAgImNtcC5lcSBwNiwgcDAgPSByMiwgcjlcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAiKHA2KSBtb3YgcHNyLmwgPSByOFxuIgorI2lmZGVmIEhBVkVfU0VSSUFMSVpFX0RJUkVDVElWRQorCSAgICAgICIuc2VyaWFsaXplLmRhdGFcbiIKKyNlbmRpZgorCSAgICAgICIocDYpIGJyLmNvbmQuc3B0ay5tYW55IGI2XG4iCisJICAgICAgX19ERUZJTkVfU0VUX1JFRyhHUCwgZ3ApCisJICAgICAgX19ERUZJTkVfU0VUX1JFRyhTUCwgc3ApCisKKwkgICAgICBfX0RFRklORV9TRVRfUkVHKEFSX0tSMCwgYXIwKQorCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoQVJfS1IxLCBhcjEpCisJICAgICAgX19ERUZJTkVfU0VUX1JFRyhBUl9LUjIsIGFyMikKKwkgICAgICBfX0RFRklORV9TRVRfUkVHKEFSX0tSMywgYXIzKQorCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoQVJfS1I0LCBhcjQpCisJICAgICAgX19ERUZJTkVfU0VUX1JFRyhBUl9LUjUsIGFyNSkKKwkgICAgICBfX0RFRklORV9TRVRfUkVHKEFSX0tSNiwgYXI2KQorCSAgICAgIF9fREVGSU5FX1NFVF9SRUcoQVJfS1I3LCBhcjcpCisJICAgICAgX19ERUZJTkVfU0VUX0FSKFJTQywgcnNjKQorCSAgICAgIF9fREVGSU5FX1NFVF9BUihCU1AsIGJzcCkKKwkgICAgICBfX0RFRklORV9TRVRfQVIoQlNQU1RPUkUsIGJzcHN0b3JlKQorCSAgICAgIF9fREVGSU5FX1NFVF9BUihSTkFULCBybmF0KQorCSAgICAgIF9fREVGSU5FX1NFVF9BUihGQ1IsIGZjcikKKwkgICAgICBfX0RFRklORV9TRVRfQVIoRUZMQUcsIGVmbGFnKQorCSAgICAgIF9fREVGSU5FX1NFVF9BUihDU0QsIGNzZCkKKwkgICAgICBfX0RFRklORV9TRVRfQVIoU1NELCBzc2QpCisJICAgICAgX19ERUZJTkVfU0VUX1JFRyhBUl9DRkxBRywgYXIyNykKKwkgICAgICBfX0RFRklORV9TRVRfQVIoRlNSLCBmc3IpCisJICAgICAgX19ERUZJTkVfU0VUX0FSKEZJUiwgZmlyKQorCSAgICAgIF9fREVGSU5FX1NFVF9BUihGRFIsIGZkcikKKwkgICAgICBfX0RFRklORV9TRVRfQVIoQ0NWLCBjY3YpCisJICAgICAgX19ERUZJTkVfU0VUX0FSKFVOQVQsIHVuYXQpCisJICAgICAgX19ERUZJTkVfU0VUX0FSKEZQU1IsIGZwc3IpCisJICAgICAgX19ERUZJTkVfU0VUX0FSKElUQywgaXRjKQorCSAgICAgIF9fREVGSU5FX1NFVF9BUihQRlMsIHBmcykKKwkgICAgICBfX0RFRklORV9TRVRfQVIoTEMsIGxjKQorCSAgICAgIF9fREVGSU5FX1NFVF9BUihFQywgZWMpCisKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoRENSLCBkY3IpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKElUTSwgaXRtKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJVkEsIGl2YSkKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoUFRBLCBwdGEpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKElQU1IsIGlwc3IpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKElTUiwgaXNyKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJSVAsIGlpcCkKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoSUZBLCBpZmEpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKElUSVIsIGl0aXIpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKElJUEEsIGlpcGEpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKElGUywgaWZzKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJSU0sIGlpbSkKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoSUhBLCBpaGEpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKExJRCwgbGlkKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJVlIsIGl2cikKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoVFBSLCB0cHIpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKEVPSSwgZW9pKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJUlIwLCBpcnIwKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJUlIxLCBpcnIxKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJUlIyLCBpcnIyKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJUlIzLCBpcnIzKQorCSAgICAgIF9fREVGSU5FX1NFVF9DUihJVFYsIGl0dikKKwkgICAgICBfX0RFRklORV9TRVRfQ1IoUE1WLCBwbXYpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKENNQ1YsIGNtY3YpCisJICAgICAgX19ERUZJTkVfU0VUX0NSKExSUjAsIGxycjApCisJICAgICAgX19ERUZJTkVfU0VUX0NSKExSUjEsIGxycjEpCisJKTsKKyNlbmRpZgogCiBzdHJ1Y3QgcHZfY3B1X29wcyBwdl9jcHVfb3BzID0gewogCS5mYwkJPSBpYTY0X25hdGl2ZV9mY19mdW5jLApAQCAtMzY2LDQgKzY0MywyNTggQEAKIAogc3RydWN0IHB2X3RpbWVfb3BzIHB2X3RpbWVfb3BzID0gewogCS5kb19zdGVhbF9hY2NvdW50aW5nID0gaWE2NF9uYXRpdmVfZG9fc3RlYWxfYWNjb3VudGluZywKKwkuc2NoZWRfY2xvY2sgPSBpYTY0X25hdGl2ZV9zY2hlZF9jbG9jaywKIH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGJpbmFyeSBwYWN0aGluZworICogcHZfaW5pdF9vcHMucGF0Y2hfYnVuZGxlCisgKi8KKworI2lmZGVmIEFTTV9TVVBQT1JURUQKKyNkZWZpbmUgSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0dFVF9SRUcobmFtZSwgcmVnKQlcCisJX19ERUZJTkVfRlVOQyhnZXRfICMjIG5hbWUsCQkJXAorCQkgICAgICAiOztcbiIJCQkJXAorCQkgICAgICAibW92IHI4ID0gIiAjcmVnICJcbiIJCVwKKwkJICAgICAgIjs7XG4iKQorCisjZGVmaW5lIElBNjRfTkFUSVZFX1BBVENIX0RFRklORV9TRVRfUkVHKG5hbWUsIHJlZykJXAorCV9fREVGSU5FX0ZVTkMoc2V0XyAjIyBuYW1lLAkJCVwKKwkJICAgICAgIjs7XG4iCQkJCVwKKwkJICAgICAgIm1vdiAiICNyZWcgIiA9IHI4XG4iCQlcCisJCSAgICAgICI7O1xuIikKKworI2RlZmluZSBJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfUkVHKG5hbWUsIHJlZykJCVwKKwlJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfR0VUX1JFRyhuYW1lLCByZWcpOwlcCisJSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX1NFVF9SRUcobmFtZSwgcmVnKQlcCisKKyNkZWZpbmUgSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0FSKG5hbWUsIHJlZykJCQlcCisJSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX1JFRyhhcl8gIyMgbmFtZSwgYXIucmVnKQorCisjZGVmaW5lIElBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihuYW1lLCByZWcpCQkJXAorCUlBNjRfTkFUSVZFX1BBVENIX0RFRklORV9SRUcoY3JfICMjIG5hbWUsIGNyLnJlZykKKworCitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfR0VUX1JFRyhwc3IsIHBzcik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfR0VUX1JFRyh0cCwgdHApOworCisvKiBJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfU0VUX1JFRyhwc3JfbCwgcHNyLmwpOyAqLworX19ERUZJTkVfRlVOQyhzZXRfcHNyX2wsCisJICAgICAgIjs7XG4iCisJICAgICAgIm1vdiBwc3IubCA9IHI4XG4iCisjaWZkZWYgSEFWRV9TRVJJQUxJWkVfRElSRUNUSVZFCisJICAgICAgIi5zZXJpYWxpemUuZGF0YVxuIgorI2VuZGlmCisJICAgICAgIjs7XG4iKTsKKworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX1JFRyhncCwgZ3ApOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX1JFRyhzcCwgc3ApOworCitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfUkVHKGtyMCwgYXIwKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9SRUcoa3IxLCBhcjEpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX1JFRyhrcjIsIGFyMik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfUkVHKGtyMywgYXIzKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9SRUcoa3I0LCBhcjQpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX1JFRyhrcjUsIGFyNSk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfUkVHKGtyNiwgYXI2KTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9SRUcoa3I3LCBhcjcpOworCitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQVIocnNjLCByc2MpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0FSKGJzcCwgYnNwKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihic3BzdG9yZSwgYnNwc3RvcmUpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0FSKHJuYXQsIHJuYXQpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0FSKGZjciwgZmNyKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihlZmxhZywgZWZsYWcpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0FSKGNzZCwgY3NkKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihzc2QsIHNzZCk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfUkVHKGFyMjcsIGFyMjcpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0FSKGZzciwgZnNyKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihmaXIsIGZpcik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQVIoZmRyLCBmZHIpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0FSKGNjdiwgY2N2KTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUih1bmF0LCB1bmF0KTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihmcHNyLCBmcHNyKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9BUihpdGMsIGl0Yyk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQVIocGZzLCBwZnMpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0FSKGxjLCBsYyk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQVIoZWMsIGVjKTsKKworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKGRjciwgZGNyKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihpdG0sIGl0bSk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaXZhLCBpdmEpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKHB0YSwgcHRhKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihpcHNyLCBpcHNyKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihpc3IsIGlzcik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaWlwLCBpaXApOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKGlmYSwgaWZhKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihpdGlyLCBpdGlyKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihpaXBhLCBpaXBhKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihpZnMsIGlmcyk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaWltLCBpaW0pOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKGloYSwgaWhhKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihsaWQsIGxpZCk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaXZyLCBpdnIpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKHRwciwgdHByKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihlb2ksIGVvaSk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaXJyMCwgaXJyMCk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaXJyMSwgaXJyMSk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaXJyMiwgaXJyMik7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaXJyMywgaXJyMyk7CitJQTY0X05BVElWRV9QQVRDSF9ERUZJTkVfQ1IoaXR2LCBpdHYpOworSUE2NF9OQVRJVkVfUEFUQ0hfREVGSU5FX0NSKHBtdiwgcG12KTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihjbWN2LCBjbWN2KTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihscnIwLCBscnIwKTsKK0lBNjRfTkFUSVZFX1BBVENIX0RFRklORV9DUihscnIxLCBscnIxKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9idW5kbGVfZWxlbSBpYTY0X25hdGl2ZV9wYXRjaF9idW5kbGVfZWxlbXNbXQorX19pbml0ZGF0YV9vcl9tb2R1bGUgPQoreworI2RlZmluZSBJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTShuYW1lLCB0eXBlKQkJXAorCXsJCQkJCQkJXAorCQkodm9pZCopaWE2NF9uYXRpdmVfICMjIG5hbWUgIyMgX2RpcmVjdF9zdGFydCwJXAorCQkodm9pZCopaWE2NF9uYXRpdmVfICMjIG5hbWUgIyMgX2RpcmVjdF9lbmQsCVwKKwkJUEFSQVZJUlRfUEFUQ0hfVFlQRV8gIyMgdHlwZSwJCQlcCisJfQorCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU0oZmMsIEZDKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTSh0aGFzaCwgVEhBU0gpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNKGdldF9jcHVpZCwgR0VUX0NQVUlEKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTShnZXRfcG1kLCBHRVRfUE1EKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTShwdGNnYSwgUFRDR0EpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNKGdldF9yciwgR0VUX1JSKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTShzZXRfcnIsIFNFVF9SUiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU0oc2V0X3JyMF90b19ycjQsIFNFVF9SUjBfVE9fUlI0KSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTShzc21faSwgU1NNX0kpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNKHJzbV9pLCBSU01fSSksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU0oZ2V0X3Bzcl9pLCBHRVRfUFNSX0kpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNKGludHJpbl9sb2NhbF9pcnFfcmVzdG9yZSwKKwkJCQkgICAgICBJTlRSSU5fTE9DQUxfSVJRX1JFU1RPUkUpLAorCisjZGVmaW5lIElBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0dFVFJFRyhuYW1lLCByZWcpCQkJXAorCXsJCQkJCQkJCVwKKwkJKHZvaWQqKWlhNjRfbmF0aXZlX2dldF8gIyMgbmFtZSAjIyBfZGlyZWN0X3N0YXJ0LAlcCisJCSh2b2lkKilpYTY0X25hdGl2ZV9nZXRfICMjIG5hbWUgIyMgX2RpcmVjdF9lbmQsCQlcCisJCVBBUkFWSVJUX1BBVENIX1RZUEVfR0VUUkVHICsgX0lBNjRfUkVHXyAjIyByZWcsCQlcCisJfQorCisjZGVmaW5lIElBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhuYW1lLCByZWcpCQkJXAorCXsJCQkJCQkJCVwKKwkJKHZvaWQqKWlhNjRfbmF0aXZlX3NldF8gIyMgbmFtZSAjIyBfZGlyZWN0X3N0YXJ0LAlcCisJCSh2b2lkKilpYTY0X25hdGl2ZV9zZXRfICMjIG5hbWUgIyMgX2RpcmVjdF9lbmQsCQlcCisJCVBBUkFWSVJUX1BBVENIX1RZUEVfU0VUUkVHICsgX0lBNjRfUkVHXyAjIyByZWcsCQlcCisJfQorCisjZGVmaW5lIElBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX1JFRyhuYW1lLCByZWcpCQlcCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fR0VUUkVHKG5hbWUsIHJlZyksCVwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcobmFtZSwgcmVnKQkJXAorCisjZGVmaW5lIElBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKG5hbWUsIHJlZykJCVwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9SRUcoYXJfICMjIG5hbWUsIEFSXyAjIyByZWcpCisKKyNkZWZpbmUgSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IobmFtZSwgcmVnKQkJXAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX1JFRyhjcl8gIyMgbmFtZSwgQ1JfICMjIHJlZykKKworCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0dFVFJFRyhwc3IsIFBTUiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fR0VUUkVHKHRwLCBUUCksCisKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcocHNyX2wsIFBTUl9MKSwKKworCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX1JFRyhncCwgR1ApLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX1JFRyhzcCwgU1ApLAorCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fUkVHKGtyMCwgQVJfS1IwKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9SRUcoa3IxLCBBUl9LUjEpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX1JFRyhrcjIsIEFSX0tSMiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fUkVHKGtyMywgQVJfS1IzKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9SRUcoa3I0LCBBUl9LUjQpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX1JFRyhrcjUsIEFSX0tSNSksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fUkVHKGtyNiwgQVJfS1I2KSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9SRUcoa3I3LCBBUl9LUjcpLAorCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQVIocnNjLCBSU0MpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKGJzcCwgQlNQKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihic3BzdG9yZSwgQlNQU1RPUkUpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKHJuYXQsIFJOQVQpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKGZjciwgRkNSKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihlZmxhZywgRUZMQUcpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKGNzZCwgQ1NEKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihzc2QsIFNTRCksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fUkVHKGFyMjcsIEFSX0NGTEFHKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihmc3IsIEZTUiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQVIoZmlyLCBGSVIpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKGZkciwgRkRSKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihjY3YsIENDViksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQVIodW5hdCwgVU5BVCksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQVIoZnBzciwgRlBTUiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQVIoaXRjLCBJVEMpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKHBmcywgUEZTKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9BUihsYywgTEMpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0FSKGVjLCBFQyksCisKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihkY3IsIERDUiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IoaXRtLCBJVE0pLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGl2YSwgSVZBKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihwdGEsIFBUQSksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IoaXBzciwgSVBTUiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IoaXNyLCBJU1IpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGlpcCwgSUlQKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihpZmEsIElGQSksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IoaXRpciwgSVRJUiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IoaWlwYSwgSUlQQSksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IoaWZzLCBJRlMpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGlpbSwgSUlNKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihpaGEsIElIQSksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IobGlkLCBMSUQpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGl2ciwgSVZSKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUih0cHIsIFRQUiksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IoZW9pLCBFT0kpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGlycjAsIElSUjApLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGlycjEsIElSUjEpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGlycjIsIElSUjIpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGlycjMsIElSUjMpLAorCUlBNjRfTkFUSVZFX1BBVENIX0JVTkRMRV9FTEVNX0NSKGl0diwgSVRWKSwKKwlJQTY0X05BVElWRV9QQVRDSF9CVU5ETEVfRUxFTV9DUihwbXYsIFBNViksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IoY21jdiwgQ01DViksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IobHJyMCwgTFJSMCksCisJSUE2NF9OQVRJVkVfUEFUQ0hfQlVORExFX0VMRU1fQ1IobHJyMSwgTFJSMSksCit9OworCit1bnNpZ25lZCBsb25nIF9faW5pdF9vcl9tb2R1bGUKK2lhNjRfbmF0aXZlX3BhdGNoX2J1bmRsZSh2b2lkICpzYnVuZGxlLCB2b2lkICplYnVuZGxlLCB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyBuZWxlbXMgPSBzaXplb2YoaWE2NF9uYXRpdmVfcGF0Y2hfYnVuZGxlX2VsZW1zKSAvCisJCXNpemVvZihpYTY0X25hdGl2ZV9wYXRjaF9idW5kbGVfZWxlbXNbMF0pOworCisJcmV0dXJuIF9fcGFyYXZpcnRfcGF0Y2hfYXBwbHlfYnVuZGxlKHNidW5kbGUsIGVidW5kbGUsIHR5cGUsCisJCQkJCSAgICAgIGlhNjRfbmF0aXZlX3BhdGNoX2J1bmRsZV9lbGVtcywKKwkJCQkJICAgICAgbmVsZW1zLCBOVUxMKTsKK30KKyNlbmRpZiAvKiBBU01fU1VQUE9URUQgKi8KKworZXh0ZXJuIGNvbnN0IGNoYXIgaWE2NF9uYXRpdmVfc3dpdGNoX3RvW107CitleHRlcm4gY29uc3QgY2hhciBpYTY0X25hdGl2ZV9sZWF2ZV9zeXNjYWxsW107CitleHRlcm4gY29uc3QgY2hhciBpYTY0X25hdGl2ZV93b3JrX3Byb2Nlc3NlZF9zeXNjYWxsW107CitleHRlcm4gY29uc3QgY2hhciBpYTY0X25hdGl2ZV9sZWF2ZV9rZXJuZWxbXTsKKworY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX2JyYW5jaF90YXJnZXQgaWE2NF9uYXRpdmVfYnJhbmNoX3RhcmdldFtdCitfX2luaXRjb25zdCA9IHsKKyNkZWZpbmUgUEFSQVZJUlRfQlJfVEFSR0VUKG5hbWUsIHR5cGUpCQkJXAorCXsJCQkJCQlcCisJCWlhNjRfbmF0aXZlXyAjIyBuYW1lLAkJCVwKKwkJUEFSQVZJUlRfUEFUQ0hfVFlQRV9CUl8gIyMgdHlwZSwJXAorCX0KKwlQQVJBVklSVF9CUl9UQVJHRVQoc3dpdGNoX3RvLCBTV0lUQ0hfVE8pLAorCVBBUkFWSVJUX0JSX1RBUkdFVChsZWF2ZV9zeXNjYWxsLCBMRUFWRV9TWVNDQUxMKSwKKwlQQVJBVklSVF9CUl9UQVJHRVQod29ya19wcm9jZXNzZWRfc3lzY2FsbCwgV09SS19QUk9DRVNTRURfU1lTQ0FMTCksCisJUEFSQVZJUlRfQlJfVEFSR0VUKGxlYXZlX2tlcm5lbCwgTEVBVkVfS0VSTkVMKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdAoraWE2NF9uYXRpdmVfcGF0Y2hfYnJhbmNoKHVuc2lnbmVkIGxvbmcgdGFnLCB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyBuZWxlbSA9CisJCXNpemVvZihpYTY0X25hdGl2ZV9icmFuY2hfdGFyZ2V0KSAvCisJCXNpemVvZihpYTY0X25hdGl2ZV9icmFuY2hfdGFyZ2V0WzBdKTsKKwlfX3BhcmF2aXJ0X3BhdGNoX2FwcGx5X2JyYW5jaCh0YWcsIHR5cGUsCisJCQkJICAgICAgaWE2NF9uYXRpdmVfYnJhbmNoX3RhcmdldCwgbmVsZW0pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9wYXRjaC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9wYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZGZlZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0X3BhdGNoLmMKQEAgLTAsMCArMSw1MTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGxpbnV4L2FyY2gvaWE2NC94ZW4vcGFyYXZpcnRfcGF0Y2guYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KKyNpbmNsdWRlIDxhc20va3Byb2Jlcy5oPgorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2luY2x1ZGUgPGFzbS9wYXJhdmlydF9wYXRjaC5oPgorCit0eXBlZGVmIHVuaW9uIGlhNjRfaW5zdCB7CisgICAgICAgIHN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBxcCA6IDY7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyA6IDMxOworCQl1bnNpZ25lZCBsb25nIGxvbmcgb3Bjb2RlIDogNDsKKwkJdW5zaWduZWQgbG9uZyBsb25nIHJlc2VydmVkIDogMjM7CisgICAgICAgIH0gZ2VuZXJpYzsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGw7Cit9IGlhNjRfaW5zdF90OworCisvKgorICogZmx1c2hfaWNhY2hlX3JhbmdlKCkgY2FuJ3QgYmUgdXNlZCBoZXJlLgorICogd2UgYXJlIGhlcmUgYmVmb3JlIGNwdV9pbml0KCkgd2hpY2ggaW5pdGlhbGl6ZXMKKyAqIGlhNjRfaV9jYWNoZV9zdHJpZGVfc2hpZnQuIGZsdXNoX2ljYWNoZV9yYW5nZSgpIHVzZXMgaXQuCisgKi8KK3ZvaWQgX19pbml0X29yX21vZHVsZQorcGFyYXZpcnRfZmx1c2hfaV9jYWNoZV9yYW5nZShjb25zdCB2b2lkICppbnN0ciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWV4dGVybiB2b2lkIHBhcmF2aXJ0X2ZjX2koY29uc3Qgdm9pZCAqYWRkcik7CisJdW5zaWduZWQgbG9uZyBpOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gc2l6ZW9mKGJ1bmRsZV90KSkKKwkJcGFyYXZpcnRfZmNfaShpbnN0ciArIGkpOworfQorCitidW5kbGVfdCogX19pbml0X29yX21vZHVsZQorcGFyYXZpcnRfZ2V0X2J1bmRsZSh1bnNpZ25lZCBsb25nIHRhZykKK3sKKwlyZXR1cm4gKGJ1bmRsZV90ICopKHRhZyAmIH4zVUwpOworfQorCit1bnNpZ25lZCBsb25nIF9faW5pdF9vcl9tb2R1bGUKK3BhcmF2aXJ0X2dldF9zbG90KHVuc2lnbmVkIGxvbmcgdGFnKQoreworCXJldHVybiB0YWcgJiAzVUw7Cit9CisKK3Vuc2lnbmVkIGxvbmcgX19pbml0X29yX21vZHVsZQorcGFyYXZpcnRfZ2V0X251bV9pbnN0KHVuc2lnbmVkIGxvbmcgc3RhZywgdW5zaWduZWQgbG9uZyBldGFnKQoreworCWJ1bmRsZV90ICpzYnVuZGxlID0gcGFyYXZpcnRfZ2V0X2J1bmRsZShzdGFnKTsKKwl1bnNpZ25lZCBsb25nIHNzbG90ID0gcGFyYXZpcnRfZ2V0X3Nsb3Qoc3RhZyk7CisJYnVuZGxlX3QgKmVidW5kbGUgPSBwYXJhdmlydF9nZXRfYnVuZGxlKGV0YWcpOworCXVuc2lnbmVkIGxvbmcgZXNsb3QgPSBwYXJhdmlydF9nZXRfc2xvdChldGFnKTsKKworCXJldHVybiAoZWJ1bmRsZSAtIHNidW5kbGUpICogMyArIGVzbG90IC0gc3Nsb3QgKyAxOworfQorCit1bnNpZ25lZCBsb25nIF9faW5pdF9vcl9tb2R1bGUKK3BhcmF2aXJ0X2dldF9uZXh0X3RhZyh1bnNpZ25lZCBsb25nIHRhZykKK3sKKwl1bnNpZ25lZCBsb25nIHNsb3QgPSBwYXJhdmlydF9nZXRfc2xvdCh0YWcpOworCisJc3dpdGNoIChzbG90KSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJcmV0dXJuIHRhZyArIDE7CisJY2FzZSAyOiB7CisJCWJ1bmRsZV90ICpidW5kbGUgPSBwYXJhdmlydF9nZXRfYnVuZGxlKHRhZyk7CisJCXJldHVybiAodW5zaWduZWQgbG9uZykoYnVuZGxlICsgMSk7CisJfQorCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwkvKiBOT1RSRUFDSEVEICovCit9CisKK2lhNjRfaW5zdF90IF9faW5pdF9vcl9tb2R1bGUKK3BhcmF2aXJ0X3JlYWRfc2xvdDAoY29uc3QgYnVuZGxlX3QgKmJ1bmRsZSkKK3sKKwlpYTY0X2luc3RfdCBpbnN0OworCWluc3QubCA9IGJ1bmRsZS0+cXVhZDAuc2xvdDA7CisJcmV0dXJuIGluc3Q7Cit9CisKK2lhNjRfaW5zdF90IF9faW5pdF9vcl9tb2R1bGUKK3BhcmF2aXJ0X3JlYWRfc2xvdDEoY29uc3QgYnVuZGxlX3QgKmJ1bmRsZSkKK3sKKwlpYTY0X2luc3RfdCBpbnN0OworCWluc3QubCA9IGJ1bmRsZS0+cXVhZDAuc2xvdDFfcDAgfAorCQkoKHVuc2lnbmVkIGxvbmcgbG9uZylidW5kbGUtPnF1YWQxLnNsb3QxX3AxIDw8IDE4VUwpOworCXJldHVybiBpbnN0OworfQorCitpYTY0X2luc3RfdCBfX2luaXRfb3JfbW9kdWxlCitwYXJhdmlydF9yZWFkX3Nsb3QyKGNvbnN0IGJ1bmRsZV90ICpidW5kbGUpCit7CisJaWE2NF9pbnN0X3QgaW5zdDsKKwlpbnN0LmwgPSBidW5kbGUtPnF1YWQxLnNsb3QyOworCXJldHVybiBpbnN0OworfQorCitpYTY0X2luc3RfdCBfX2luaXRfb3JfbW9kdWxlCitwYXJhdmlydF9yZWFkX2luc3QodW5zaWduZWQgbG9uZyB0YWcpCit7CisJYnVuZGxlX3QgKmJ1bmRsZSA9IHBhcmF2aXJ0X2dldF9idW5kbGUodGFnKTsKKwl1bnNpZ25lZCBsb25nIHNsb3QgPSBwYXJhdmlydF9nZXRfc2xvdCh0YWcpOworCisJc3dpdGNoIChzbG90KSB7CisJY2FzZSAwOgorCQlyZXR1cm4gcGFyYXZpcnRfcmVhZF9zbG90MChidW5kbGUpOworCWNhc2UgMToKKwkJcmV0dXJuIHBhcmF2aXJ0X3JlYWRfc2xvdDEoYnVuZGxlKTsKKwljYXNlIDI6CisJCXJldHVybiBwYXJhdmlydF9yZWFkX3Nsb3QyKGJ1bmRsZSk7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KKwordm9pZCBfX2luaXRfb3JfbW9kdWxlCitwYXJhdmlydF93cml0ZV9zbG90MChidW5kbGVfdCAqYnVuZGxlLCBpYTY0X2luc3RfdCBpbnN0KQoreworCWJ1bmRsZS0+cXVhZDAuc2xvdDAgPSBpbnN0Lmw7Cit9CisKK3ZvaWQgX19pbml0X29yX21vZHVsZQorcGFyYXZpcnRfd3JpdGVfc2xvdDEoYnVuZGxlX3QgKmJ1bmRsZSwgaWE2NF9pbnN0X3QgaW5zdCkKK3sKKwlidW5kbGUtPnF1YWQwLnNsb3QxX3AwID0gaW5zdC5sOworCWJ1bmRsZS0+cXVhZDEuc2xvdDFfcDEgPSBpbnN0LmwgPj4gMThVTDsKK30KKwordm9pZCBfX2luaXRfb3JfbW9kdWxlCitwYXJhdmlydF93cml0ZV9zbG90MihidW5kbGVfdCAqYnVuZGxlLCBpYTY0X2luc3RfdCBpbnN0KQoreworCWJ1bmRsZS0+cXVhZDEuc2xvdDIgPSBpbnN0Lmw7Cit9CisKK3ZvaWQgX19pbml0X29yX21vZHVsZQorcGFyYXZpcnRfd3JpdGVfaW5zdCh1bnNpZ25lZCBsb25nIHRhZywgaWE2NF9pbnN0X3QgaW5zdCkKK3sKKwlidW5kbGVfdCAqYnVuZGxlID0gcGFyYXZpcnRfZ2V0X2J1bmRsZSh0YWcpOworCXVuc2lnbmVkIGxvbmcgc2xvdCA9IHBhcmF2aXJ0X2dldF9zbG90KHRhZyk7CisKKwlzd2l0Y2ggKHNsb3QpIHsKKwljYXNlIDA6CisJCXBhcmF2aXJ0X3dyaXRlX3Nsb3QwKGJ1bmRsZSwgaW5zdCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcGFyYXZpcnRfd3JpdGVfc2xvdDEoYnVuZGxlLCBpbnN0KTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwYXJhdmlydF93cml0ZV9zbG90MihidW5kbGUsIGluc3QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXBhcmF2aXJ0X2ZsdXNoX2lfY2FjaGVfcmFuZ2UoYnVuZGxlLCBzaXplb2YoKmJ1bmRsZSkpOworfQorCisvKiBmb3IgZGVidWcgKi8KK3ZvaWQKK3BhcmF2aXJ0X3ByaW50X2J1bmRsZShjb25zdCBidW5kbGVfdCAqYnVuZGxlKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnF1YWQgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKWJ1bmRsZTsKKwlpYTY0X2luc3RfdCBzbG90MCA9IHBhcmF2aXJ0X3JlYWRfc2xvdDAoYnVuZGxlKTsKKwlpYTY0X2luc3RfdCBzbG90MSA9IHBhcmF2aXJ0X3JlYWRfc2xvdDEoYnVuZGxlKTsKKwlpYTY0X2luc3RfdCBzbG90MiA9IHBhcmF2aXJ0X3JlYWRfc2xvdDIoYnVuZGxlKTsKKworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJidW5kbGUgMHglcCAweCUwMTZseCAweCUwMTZseFxuIiwgYnVuZGxlLCBxdWFkWzBdLCBxdWFkWzFdKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiYnVuZGxlIHRlbXBsYXRlIDB4JXhcbiIsCisJICAgICAgIGJ1bmRsZS0+cXVhZDAudGVtcGxhdGUpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJzbG90MCAweCVseCBzbG90MV9wMCAweCVseCBzbG90MV9wMSAweCVseCBzbG90MiAweCVseFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpYnVuZGxlLT5xdWFkMC5zbG90MCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpYnVuZGxlLT5xdWFkMC5zbG90MV9wMCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpYnVuZGxlLT5xdWFkMS5zbG90MV9wMSwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpYnVuZGxlLT5xdWFkMS5zbG90Mik7CisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgInNsb3QwIDB4JTAxNmxseCBzbG90MSAweCUwMTZsbHggc2xvdDIgMHglMDE2bGx4XG4iLAorCSAgICAgICBzbG90MC5sLCBzbG90MS5sLCBzbG90Mi5sKTsKK30KKworc3RhdGljIGludCBub3JlcGxhY2VfcGFyYXZpcnQgX19pbml0X29yX21vZHVsZSA9IDA7CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX25vcmVwbGFjZV9wYXJhdmlydChjaGFyICpzdHIpCit7CisJbm9yZXBsYWNlX3BhcmF2aXJ0ID0gMTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm5vcmVwbGFjZS1wYXJhdmlydCIsIHNldHVwX25vcmVwbGFjZV9wYXJhdmlydCk7CisKKyNpZmRlZiBBU01fU1VQUE9SVEVECitzdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlCitmaWxsX25vcF9idW5kbGUodm9pZCAqc2J1bmRsZSwgdm9pZCAqZWJ1bmRsZSkKK3sKKwlleHRlcm4gY29uc3QgY2hhciBwYXJhdmlydF9ub3BfYnVuZGxlW107CisJZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGxvbmcgcGFyYXZpcnRfbm9wX2J1bmRsZV9zaXplOworCisJdm9pZCAqYnVuZGxlID0gc2J1bmRsZTsKKworCUJVR19PTigoKCh1bnNpZ25lZCBsb25nKXNidW5kbGUpICUgc2l6ZW9mKGJ1bmRsZV90KSkgIT0gMCk7CisJQlVHX09OKCgoKHVuc2lnbmVkIGxvbmcpZWJ1bmRsZSkgJSBzaXplb2YoYnVuZGxlX3QpKSAhPSAwKTsKKworCXdoaWxlIChidW5kbGUgPCBlYnVuZGxlKSB7CisJCW1lbWNweShidW5kbGUsIHBhcmF2aXJ0X25vcF9idW5kbGUsIHBhcmF2aXJ0X25vcF9idW5kbGVfc2l6ZSk7CisKKwkJYnVuZGxlICs9IHBhcmF2aXJ0X25vcF9idW5kbGVfc2l6ZTsKKwl9Cit9CisKKy8qIGhlbHBlciBmdW5jdGlvbiAqLwordW5zaWduZWQgbG9uZyBfX2luaXRfb3JfbW9kdWxlCitfX3BhcmF2aXJ0X3BhdGNoX2FwcGx5X2J1bmRsZSh2b2lkICpzYnVuZGxlLCB2b2lkICplYnVuZGxlLCB1bnNpZ25lZCBsb25nIHR5cGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfYnVuZGxlX2VsZW0gKmVsZW1zLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBuZWxlbXMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfYnVuZGxlX2VsZW0gKipmb3VuZCkKK3sKKwl1bnNpZ25lZCBsb25nIHVzZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgaTsKKworCUJVR19PTigoKCh1bnNpZ25lZCBsb25nKXNidW5kbGUpICUgc2l6ZW9mKGJ1bmRsZV90KSkgIT0gMCk7CisJQlVHX09OKCgoKHVuc2lnbmVkIGxvbmcpZWJ1bmRsZSkgJSBzaXplb2YoYnVuZGxlX3QpKSAhPSAwKTsKKworCWZvdW5kID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX2J1bmRsZV9lbGVtICpwID0gJmVsZW1zW2ldOworCQlpZiAocC0+dHlwZSA9PSB0eXBlKSB7CisJCQl1bnNpZ25lZCBsb25nIG5lZWQgPSBwLT5lYnVuZGxlIC0gcC0+c2J1bmRsZTsKKwkJCXVuc2lnbmVkIGxvbmcgcm9vbSA9IGVidW5kbGUgLSBzYnVuZGxlOworCisJCQlpZiAoZm91bmQgIT0gTlVMTCkKKwkJCQkqZm91bmQgPSBwOworCisJCQlpZiAocm9vbSA8IG5lZWQpIHsKKwkJCQkvKiBubyByb29tIHRvIHJlcGxhY2UuIHNraXAgaXQgKi8KKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAidGhlIHNwYWNlIGlzIHRvbyBzbWFsbCB0byBwdXQgIgorCQkJCSAgICAgICAiYnVuZGxlcy4gdHlwZSAlbGQgbmVlZCAlbGQgcm9vbSAlbGRcbiIsCisJCQkJICAgICAgIHR5cGUsIG5lZWQsIHJvb20pOworCQkJCWJyZWFrOworCQkJfQorCisJCQl1c2VkID0gbmVlZDsKKwkJCW1lbWNweShzYnVuZGxlLCBwLT5zYnVuZGxlLCB1c2VkKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHVzZWQ7Cit9CisKK3ZvaWQgX19pbml0X29yX21vZHVsZQorcGFyYXZpcnRfcGF0Y2hfYXBwbHlfYnVuZGxlKGNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2J1bmRsZSAqc3RhcnQsCisJCQkgICAgY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfYnVuZGxlICplbmQpCit7CisJY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfYnVuZGxlICpwOworCisJaWYgKG5vcmVwbGFjZV9wYXJhdmlydCkKKwkJcmV0dXJuOworCWlmIChwdl9pbml0X29wcy5wYXRjaF9idW5kbGUgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChwID0gc3RhcnQ7IHAgPCBlbmQ7IHArKykgeworCQl1bnNpZ25lZCBsb25nIHVzZWQ7CisKKwkJdXNlZCA9ICgqcHZfaW5pdF9vcHMucGF0Y2hfYnVuZGxlKShwLT5zYnVuZGxlLCBwLT5lYnVuZGxlLAorCQkJCQkJICAgcC0+dHlwZSk7CisJCWlmICh1c2VkID09IDApCisJCQljb250aW51ZTsKKworCQlmaWxsX25vcF9idW5kbGUocC0+c2J1bmRsZSArIHVzZWQsIHAtPmVidW5kbGUpOworCQlwYXJhdmlydF9mbHVzaF9pX2NhY2hlX3JhbmdlKHAtPnNidW5kbGUsCisJCQkJCSAgICAgcC0+ZWJ1bmRsZSAtIHAtPnNidW5kbGUpOworCX0KKwlpYTY0X3N5bmNfaSgpOworCWlhNjRfc3Jsel9pKCk7Cit9CisKKy8qCisgKiBub3AuaSwgbm9wLm0sIG5vcC5mIGluc3RydWN0aW9uIGFyZSBzYW1lIGZvcm1hdC4KKyAqIGJ1dCBub3AuYiBoYXMgZGlmZmVyZW5udCBmb3JtYXQuCisgKiBUaGlzIGRvZXNuJ3Qgc3VwcG9ydCBub3AuYiBmb3Igbm93LgorICovCitzdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlCitmaWxsX25vcF9pbnN0KHVuc2lnbmVkIGxvbmcgc3RhZywgdW5zaWduZWQgbG9uZyBldGFnKQoreworCWV4dGVybiBjb25zdCBidW5kbGVfdCBwYXJhdmlydF9ub3BfbWZpX2luc3RfYnVuZGxlW107CisJdW5zaWduZWQgbG9uZyB0YWc7CisJY29uc3QgaWE2NF9pbnN0X3Qgbm9wX2luc3QgPQorCQlwYXJhdmlydF9yZWFkX3Nsb3QwKHBhcmF2aXJ0X25vcF9tZmlfaW5zdF9idW5kbGUpOworCisJZm9yICh0YWcgPSBzdGFnOyB0YWcgPCBldGFnOyB0YWcgPSBwYXJhdmlydF9nZXRfbmV4dF90YWcodGFnKSkKKwkJcGFyYXZpcnRfd3JpdGVfaW5zdCh0YWcsIG5vcF9pbnN0KTsKK30KKwordm9pZCBfX2luaXRfb3JfbW9kdWxlCitwYXJhdmlydF9wYXRjaF9hcHBseV9pbnN0KGNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2luc3QgKnN0YXJ0LAorCQkJICBjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9pbnN0ICplbmQpCit7CisJY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfaW5zdCAqcDsKKworCWlmIChub3JlcGxhY2VfcGFyYXZpcnQpCisJCXJldHVybjsKKwlpZiAocHZfaW5pdF9vcHMucGF0Y2hfaW5zdCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKHAgPSBzdGFydDsgcCA8IGVuZDsgcCsrKSB7CisJCXVuc2lnbmVkIGxvbmcgdGFnOworCQlidW5kbGVfdCAqc2J1bmRsZTsKKwkJYnVuZGxlX3QgKmVidW5kbGU7CisKKwkJdGFnID0gKCpwdl9pbml0X29wcy5wYXRjaF9pbnN0KShwLT5zdGFnLCBwLT5ldGFnLCBwLT50eXBlKTsKKwkJaWYgKHRhZyA9PSBwLT5zdGFnKQorCQkJY29udGludWU7CisKKwkJZmlsbF9ub3BfaW5zdCh0YWcsIHAtPmV0YWcpOworCQlzYnVuZGxlID0gcGFyYXZpcnRfZ2V0X2J1bmRsZShwLT5zdGFnKTsKKwkJZWJ1bmRsZSA9IHBhcmF2aXJ0X2dldF9idW5kbGUocC0+ZXRhZykgKyAxOworCQlwYXJhdmlydF9mbHVzaF9pX2NhY2hlX3JhbmdlKHNidW5kbGUsIChlYnVuZGxlIC0gc2J1bmRsZSkgKgorCQkJCQkgICAgIHNpemVvZihidW5kbGVfdCkpOworCX0KKwlpYTY0X3N5bmNfaSgpOworCWlhNjRfc3Jsel9pKCk7Cit9CisjZW5kaWYgLyogQVNNX1NVUFBPVEVEICovCisKKy8qIGJybC5jb25kLnNwdGsubWFueSA8dGFyZ2V0NjQ+IFgzICovCit0eXBlZGVmIHVuaW9uIGluc3RfeDNfb3AgeworCWlhNjRfaW5zdF90IGluc3Q7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBxcDogNjsKKwkJdW5zaWduZWQgbG9uZyBidHlwOiAzOworCQl1bnNpZ25lZCBsb25nIHVudXNlZDogMzsKKwkJdW5zaWduZWQgbG9uZyBwOiAxOworCQl1bnNpZ25lZCBsb25nIGltbTIwYjogMjA7CisJCXVuc2lnbmVkIGxvbmcgd2g6IDI7CisJCXVuc2lnbmVkIGxvbmcgZDogMTsKKwkJdW5zaWduZWQgbG9uZyBpOiAxOworCQl1bnNpZ25lZCBsb25nIG9wY29kZTogNDsKKwl9OworCXVuc2lnbmVkIGxvbmcgbDsKK30gaW5zdF94M19vcF90OworCit0eXBlZGVmIHVuaW9uIGluc3RfeDNfaW1tIHsKKwlpYTY0X2luc3RfdCBpbnN0OworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgdW51c2VkOiAyOworCQl1bnNpZ25lZCBsb25nIGltbTM5OiAzOTsKKwl9OworCXVuc2lnbmVkIGxvbmcgbDsKK30gaW5zdF94M19pbW1fdDsKKwordm9pZCBfX2luaXRfb3JfbW9kdWxlCitwYXJhdmlydF9wYXRjaF9yZWxvY19icmwodW5zaWduZWQgbG9uZyB0YWcsIGNvbnN0IHZvaWQgKnRhcmdldCkKK3sKKwl1bnNpZ25lZCBsb25nIHRhZ19vcCA9IHBhcmF2aXJ0X2dldF9uZXh0X3RhZyh0YWcpOworCXVuc2lnbmVkIGxvbmcgdGFnX2ltbSA9IHRhZzsKKwlidW5kbGVfdCAqYnVuZGxlID0gcGFyYXZpcnRfZ2V0X2J1bmRsZSh0YWcpOworCisJaWE2NF9pbnN0X3QgaW5zdF9vcCA9IHBhcmF2aXJ0X3JlYWRfaW5zdCh0YWdfb3ApOworCWlhNjRfaW5zdF90IGluc3RfaW1tID0gcGFyYXZpcnRfcmVhZF9pbnN0KHRhZ19pbW0pOworCisJaW5zdF94M19vcF90IGluc3RfeDNfb3AgPSB7IC5sID0gaW5zdF9vcC5sIH07CisJaW5zdF94M19pbW1fdCBpbnN0X3gzX2ltbSA9IHsgLmwgPSBpbnN0X2ltbS5sIH07CisKKwl1bnNpZ25lZCBsb25nIGltbTYwID0KKwkJKCh1bnNpZ25lZCBsb25nKXRhcmdldCAtICh1bnNpZ25lZCBsb25nKWJ1bmRsZSkgPj4gNDsKKworCUJVR19PTihwYXJhdmlydF9nZXRfc2xvdCh0YWcpICE9IDEpOyAvKiBNTFggKi8KKwlCVUdfT04oKCh1bnNpZ25lZCBsb25nKXRhcmdldCAmIChzaXplb2YoYnVuZGxlX3QpIC0gMSkpICE9IDApOworCisJLyogaW1tNjBbNTldIDFiaXQgKi8KKwlpbnN0X3gzX29wLmkgPSAoaW1tNjAgPj4gNTkpICYgMTsKKwkvKiBpbW02MFsxOTowXSAyMGJpdCAqLworCWluc3RfeDNfb3AuaW1tMjBiID0gaW1tNjAgJiAoKDFVTCA8PCAyMCkgLSAxKTsKKwkvKiBpbW02MFs1ODoyMF0gMzliaXQgKi8KKwlpbnN0X3gzX2ltbS5pbW0zOSA9IChpbW02MCA+PiAyMCkgJiAoKDFVTCA8PCAzOSkgLSAxKTsKKworCWluc3Rfb3AubCA9IGluc3RfeDNfb3AubDsKKwlpbnN0X2ltbS5sID0gaW5zdF94M19pbW0ubDsKKworCXBhcmF2aXJ0X3dyaXRlX2luc3QodGFnX29wLCBpbnN0X29wKTsKKwlwYXJhdmlydF93cml0ZV9pbnN0KHRhZ19pbW0sIGluc3RfaW1tKTsKK30KKworLyogYnIuY29uZC5zcHRrLm1hbnkgPHRhcmdldDI1PglCMSAqLwordHlwZWRlZiB1bmlvbiBpbnN0X2IxIHsKKwlpYTY0X2luc3RfdCBpbnN0OworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgcXA6IDY7CisJCXVuc2lnbmVkIGxvbmcgYnR5cGU6IDM7CisJCXVuc2lnbmVkIGxvbmcgdW51c2VkOiAzOworCQl1bnNpZ25lZCBsb25nIHA6IDE7CisJCXVuc2lnbmVkIGxvbmcgaW1tMjBiOiAyMDsKKwkJdW5zaWduZWQgbG9uZyB3aDogMjsKKwkJdW5zaWduZWQgbG9uZyBkOiAxOworCQl1bnNpZ25lZCBsb25nIHM6IDE7CisJCXVuc2lnbmVkIGxvbmcgb3Bjb2RlOiA0OworCX07CisJdW5zaWduZWQgbG9uZyBsOworfSBpbnN0X2IxX3Q7CisKK3ZvaWQgX19pbml0CitwYXJhdmlydF9wYXRjaF9yZWxvY19icih1bnNpZ25lZCBsb25nIHRhZywgY29uc3Qgdm9pZCAqdGFyZ2V0KQoreworCWJ1bmRsZV90ICpidW5kbGUgPSBwYXJhdmlydF9nZXRfYnVuZGxlKHRhZyk7CisJaWE2NF9pbnN0X3QgaW5zdCA9IHBhcmF2aXJ0X3JlYWRfaW5zdCh0YWcpOworCXVuc2lnbmVkIGxvbmcgdGFyZ2V0MjUgPSAodW5zaWduZWQgbG9uZyl0YXJnZXQgLSAodW5zaWduZWQgbG9uZylidW5kbGU7CisJaW5zdF9iMV90IGluc3RfYjE7CisKKwlCVUdfT04oKCh1bnNpZ25lZCBsb25nKXRhcmdldCAmIChzaXplb2YoYnVuZGxlX3QpIC0gMSkpICE9IDApOworCisJaW5zdF9iMS5sID0gaW5zdC5sOworCWlmICh0YXJnZXQyNSAmICgxVUwgPDwgNjMpKQorCQlpbnN0X2IxLnMgPSAxOworCWVsc2UKKwkJaW5zdF9iMS5zID0gMDsKKworCWluc3RfYjEuaW1tMjBiID0gdGFyZ2V0MjUgPj4gNDsKKwlpbnN0LmwgPSBpbnN0X2IxLmw7CisKKwlwYXJhdmlydF93cml0ZV9pbnN0KHRhZywgaW5zdCk7Cit9CisKK3ZvaWQgX19pbml0CitfX3BhcmF2aXJ0X3BhdGNoX2FwcGx5X2JyYW5jaCgKKwl1bnNpZ25lZCBsb25nIHRhZywgdW5zaWduZWQgbG9uZyB0eXBlLAorCWNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9icmFuY2hfdGFyZ2V0ICplbnRyaWVzLAorCXVuc2lnbmVkIGludCBucl9lbnRyaWVzKQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCBucl9lbnRyaWVzOyBpKyspIHsKKwkJaWYgKGVudHJpZXNbaV0udHlwZSA9PSB0eXBlKSB7CisJCQlwYXJhdmlydF9wYXRjaF9yZWxvY19icih0YWcsIGVudHJpZXNbaV0uZW50cnkpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorcGFyYXZpcnRfcGF0Y2hfYXBwbHlfYnJhbmNoKGNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2JyYW5jaCAqc3RhcnQsCisJCQkgICAgY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfYnJhbmNoICplbmQpCit7CisJY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfYnJhbmNoICpwOworCisJaWYgKG5vcmVwbGFjZV9wYXJhdmlydCkKKwkJcmV0dXJuOworCWlmIChwdl9pbml0X29wcy5wYXRjaF9icmFuY2ggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChwID0gc3RhcnQ7IHAgPCBlbmQ7IHArKykKKwkJKCpwdl9pbml0X29wcy5wYXRjaF9icmFuY2gpKHAtPnRhZywgcC0+dHlwZSk7CisKKwlpYTY0X3N5bmNfaSgpOworCWlhNjRfc3Jsel9pKCk7Cit9CisKK3ZvaWQgX19pbml0CitwYXJhdmlydF9wYXRjaF9hcHBseSh2b2lkKQoreworCWV4dGVybiBjb25zdCBjaGFyIF9fc3RhcnRfcGFyYXZpcnRfYnVuZGxlc1tdOworCWV4dGVybiBjb25zdCBjaGFyIF9fc3RvcF9wYXJhdmlydF9idW5kbGVzW107CisJZXh0ZXJuIGNvbnN0IGNoYXIgX19zdGFydF9wYXJhdmlydF9pbnN0c1tdOworCWV4dGVybiBjb25zdCBjaGFyIF9fc3RvcF9wYXJhdmlydF9pbnN0c1tdOworCWV4dGVybiBjb25zdCBjaGFyIF9fc3RhcnRfcGFyYXZpcnRfYnJhbmNoZXNbXTsKKwlleHRlcm4gY29uc3QgY2hhciBfX3N0b3BfcGFyYXZpcnRfYnJhbmNoZXNbXTsKKworCXBhcmF2aXJ0X3BhdGNoX2FwcGx5X2J1bmRsZSgoY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfYnVuZGxlICopCisJCQkJICAgIF9fc3RhcnRfcGFyYXZpcnRfYnVuZGxlcywKKwkJCQkgICAgKGNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9zaXRlX2J1bmRsZSAqKQorCQkJCSAgICBfX3N0b3BfcGFyYXZpcnRfYnVuZGxlcyk7CisJcGFyYXZpcnRfcGF0Y2hfYXBwbHlfaW5zdCgoY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfaW5zdCAqKQorCQkJCSAgX19zdGFydF9wYXJhdmlydF9pbnN0cywKKwkJCQkgIChjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9pbnN0ICopCisJCQkJICBfX3N0b3BfcGFyYXZpcnRfaW5zdHMpOworCXBhcmF2aXJ0X3BhdGNoX2FwcGx5X2JyYW5jaCgoY29uc3Qgc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGVfYnJhbmNoICopCisJCQkJICAgIF9fc3RhcnRfcGFyYXZpcnRfYnJhbmNoZXMsCisJCQkJICAgIChjb25zdCBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfc2l0ZV9icmFuY2ggKikKKwkJCQkgICAgX19zdG9wX3BhcmF2aXJ0X2JyYW5jaGVzKTsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtc2V0LXN0eWxlOiAibGludXgiCisgKiBjLWJhc2ljLW9mZnNldDogOAorICogdGFiLXdpZHRoOiA4CisgKiBpbmRlbnQtdGFicy1tb2RlOiB0CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnRfcGF0Y2hsaXN0LmMgYi9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0X3BhdGNobGlzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODA4MmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0X3BhdGNobGlzdC5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwOCBJc2FrdSBZYW1haGF0YSA8eWFtYWhhdGEgYXQgdmFsaW51eCBjbyBqcD4KKyAqICAgICAgICAgICAgICAgICAgICBWQSBMaW51eCBTeXN0ZW1zIEphcGFuIEsuSy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9idWcuaD4KKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KKworI2RlZmluZSBERUNMQVJFKG5hbWUpCQkJCQkJXAorCWV4dGVybiB1bnNpZ25lZCBsb25nCQkJCQlcCisJCV9faWE2NF9uYXRpdmVfc3RhcnRfZ2F0ZV8jI25hbWUjI19wYXRjaGxpc3RbXTsJXAorCWV4dGVybiB1bnNpZ25lZCBsb25nCQkJCQlcCisJCV9faWE2NF9uYXRpdmVfZW5kX2dhdGVfIyNuYW1lIyNfcGF0Y2hsaXN0W10KKworREVDTEFSRShmc3lzY2FsbCk7CitERUNMQVJFKGJybF9mc3lzX2J1YmJsZV9kb3duKTsKK0RFQ0xBUkUodnRvcCk7CitERUNMQVJFKG1ja2lubGV5X2U5KTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFydF9nYXRlX3NlY3Rpb25bXTsKKworI2RlZmluZSBBU1NJR04obmFtZSkJCQkJCQkJICAgIFwKKwkuc3RhcnRfIyNuYW1lIyNfcGF0Y2hsaXN0ID0JCQkJCSAgICBcCisJCSh1bnNpZ25lZCBsb25nKV9faWE2NF9uYXRpdmVfc3RhcnRfZ2F0ZV8jI25hbWUjI19wYXRjaGxpc3QsIFwKKwkuZW5kXyMjbmFtZSMjX3BhdGNobGlzdCA9CQkJCQkgICAgXAorCQkodW5zaWduZWQgbG9uZylfX2lhNjRfbmF0aXZlX2VuZF9nYXRlXyMjbmFtZSMjX3BhdGNobGlzdAorCitzdHJ1Y3QgcHZfcGF0Y2hkYXRhIHB2X3BhdGNoZGF0YSBfX2luaXRkYXRhID0geworCUFTU0lHTihmc3lzY2FsbCksCisJQVNTSUdOKGJybF9mc3lzX2J1YmJsZV9kb3duKSwKKwlBU1NJR04odnRvcCksCisJQVNTSUdOKG1ja2lubGV5X2U5KSwKKworCS5nYXRlX3NlY3Rpb24gPSAodm9pZCopX19zdGFydF9nYXRlX3NlY3Rpb24sCit9OworCisKK3Vuc2lnbmVkIGxvbmcgX19pbml0CitwYXJhdmlydF9nZXRfZ2F0ZV9wYXRjaGxpc3QoZW51bSBwdl9nYXRlX3BhdGNobGlzdCB0eXBlKQoreworCisjZGVmaW5lIENBU0UoTkFNRSwgbmFtZSkJCQkJCVwKKwljYXNlIFBWX0dBVEVfU1RBUlRfIyNOQU1FOgkJCQlcCisJCXJldHVybiBwdl9wYXRjaGRhdGEuc3RhcnRfIyNuYW1lIyNfcGF0Y2hsaXN0OwlcCisJY2FzZSBQVl9HQVRFX0VORF8jI05BTUU6CQkJCVwKKwkJcmV0dXJuIHB2X3BhdGNoZGF0YS5lbmRfIyNuYW1lIyNfcGF0Y2hsaXN0OwlcCisKKwlzd2l0Y2ggKHR5cGUpIHsKKwkJQ0FTRShGU1lTQ0FMTCwgZnN5c2NhbGwpOworCQlDQVNFKEJSTF9GU1lTX0JVQkJMRV9ET1dOLCBicmxfZnN5c19idWJibGVfZG93bik7CisJCUNBU0UoVlRPUCwgdnRvcCk7CisJCUNBU0UoTUNLSU5MRVlfRTksIG1ja2lubGV5X2U5KTsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCit2b2lkICogX19pbml0CitwYXJhdmlydF9nZXRfZ2F0ZV9zZWN0aW9uKHZvaWQpCit7CisJcmV0dXJuIHB2X3BhdGNoZGF0YS5nYXRlX3NlY3Rpb247Cit9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BhcmF2aXJ0X3BhdGNobGlzdC5oIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9wYXRjaGxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjg0YWE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydF9wYXRjaGxpc3QuaApAQCAtMCwwICsxLDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBsaW51eC9hcmNoL2lhNjQveGVuL3BhcmF2aXJ0X3BhdGNobGlzdC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IElzYWt1IFlhbWFoYXRhIDx5YW1haGF0YSBhdCB2YWxpbnV4IGNvIGpwPgorICogICAgICAgICAgICAgICAgICAgIFZBIExpbnV4IFN5c3RlbXMgSmFwYW4gSy5LLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2lmIGRlZmluZWQoX19JQTY0X0dBVEVfUEFSQVZJUlRVQUxJWkVEX1hFTikKKyNpbmNsdWRlIDxhc20veGVuL3BhdGNobGlzdC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vbmF0aXZlL3BhdGNobGlzdC5oPgorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGFyYXZpcnRlbnRyeS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydGVudHJ5LlMKaW5kZXggMmY0MmZjYi4uNjE1ODU2MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydGVudHJ5LlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXJhdmlydGVudHJ5LlMKQEAgLTIwLDggKzIwLDExIEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0X3ByaXZvcC5oPgorI2luY2x1ZGUgPGFzbS9wYXJhdmlydF9wYXRjaC5oPgogI2luY2x1ZGUgImVudHJ5LmgiCiAKICNkZWZpbmUgREFUQTgoc3ltLCBpbml0X3ZhbHVlKQkJCVwKQEAgLTMyLDI5ICszNSw4NyBAQAogCWRhdGE4IGluaXRfdmFsdWUgOwkJCVwKIAkucG9wc2VjdGlvbgogCi0jZGVmaW5lIEJSQU5DSCh0YXJnLCByZWcsIGJyZWcpCQlcCi0JbW92bCByZWc9dGFyZyA7CQkJXAotCTs7CQkJCVwKLQlsZDggcmVnPVtyZWddIDsJCQlcCi0JOzsJCQkJXAotCW1vdiBicmVnPXJlZyA7CQkJXAorI2RlZmluZSBCUkFOQ0godGFyZywgcmVnLCBicmVnLCB0eXBlKQkJCQkJXAorCVBBUkFWSVJUX1BBVENIX1NJVEVfQlIoUEFSQVZJUlRfUEFUQ0hfVFlQRV9CUl8gIyMgdHlwZSkgOwlcCisJOzsJCQkJCQkJCVwKKwltb3ZsIHJlZz10YXJnIDsJCQkJCQkJXAorCTs7CQkJCQkJCQlcCisJbGQ4IHJlZz1bcmVnXSA7CQkJCQkJCVwKKwk7OwkJCQkJCQkJXAorCW1vdiBicmVnPXJlZyA7CQkJCQkJCVwKIAlici5jb25kLnNwdGsubWFueSBicmVnCiAKLSNkZWZpbmUgQlJBTkNIX1BST0Moc3ltLCByZWcsIGJyZWcpCQkJCVwKLQlEQVRBOChwYXJhdmlydF8gIyMgc3ltICMjIF90YXJnLCBpYTY0X25hdGl2ZV8gIyMgc3ltKSA7IFwKLQlHTE9CQUxfRU5UUlkocGFyYXZpcnRfICMjIHN5bSkgOwkJCVwKLQkJQlJBTkNIKHBhcmF2aXJ0XyAjIyBzeW0gIyMgX3RhcmcsIHJlZywgYnJlZykgOwlcCisjZGVmaW5lIEJSQU5DSF9QUk9DKHN5bSwgcmVnLCBicmVnLCB0eXBlKQkJCQlcCisJREFUQTgocGFyYXZpcnRfICMjIHN5bSAjIyBfdGFyZywgaWE2NF9uYXRpdmVfICMjIHN5bSkgOwkJXAorCUdMT0JBTF9FTlRSWShwYXJhdmlydF8gIyMgc3ltKSA7CQkJCVwKKwkJQlJBTkNIKHBhcmF2aXJ0XyAjIyBzeW0gIyMgX3RhcmcsIHJlZywgYnJlZywgdHlwZSkgOwlcCiAJRU5EKHBhcmF2aXJ0XyAjIyBzeW0pCiAKLSNkZWZpbmUgQlJBTkNIX1BST0NfVU5XSU5GTyhzeW0sIHJlZywgYnJlZykJCQlcCi0JREFUQTgocGFyYXZpcnRfICMjIHN5bSAjIyBfdGFyZywgaWE2NF9uYXRpdmVfICMjIHN5bSkgOyBcCi0JR0xPQkFMX0VOVFJZKHBhcmF2aXJ0XyAjIyBzeW0pIDsJCQlcCi0JCVBUX1JFR1NfVU5XSU5EX0lORk8oMCkgOwkJCVwKLQkJQlJBTkNIKHBhcmF2aXJ0XyAjIyBzeW0gIyMgX3RhcmcsIHJlZywgYnJlZykgOwlcCisjZGVmaW5lIEJSQU5DSF9QUk9DX1VOV0lORk8oc3ltLCByZWcsIGJyZWcsIHR5cGUpCQkJXAorCURBVEE4KHBhcmF2aXJ0XyAjIyBzeW0gIyMgX3RhcmcsIGlhNjRfbmF0aXZlXyAjIyBzeW0pIDsJCVwKKwlHTE9CQUxfRU5UUlkocGFyYXZpcnRfICMjIHN5bSkgOwkJCQlcCisJCVBUX1JFR1NfVU5XSU5EX0lORk8oMCkgOwkJCQlcCisJCUJSQU5DSChwYXJhdmlydF8gIyMgc3ltICMjIF90YXJnLCByZWcsIGJyZWcsIHR5cGUpIDsJXAogCUVORChwYXJhdmlydF8gIyMgc3ltKQogCiAKLUJSQU5DSF9QUk9DKHN3aXRjaF90bywgcjIyLCBiNykKLUJSQU5DSF9QUk9DX1VOV0lORk8obGVhdmVfc3lzY2FsbCwgcjIyLCBiNykKLUJSQU5DSF9QUk9DKHdvcmtfcHJvY2Vzc2VkX3N5c2NhbGwsIHIyLCBiNykKLUJSQU5DSF9QUk9DX1VOV0lORk8obGVhdmVfa2VybmVsLCByMjIsIGI3KQorQlJBTkNIX1BST0Moc3dpdGNoX3RvLCByMjIsIGI3LCBTV0lUQ0hfVE8pCitCUkFOQ0hfUFJPQ19VTldJTkZPKGxlYXZlX3N5c2NhbGwsIHIyMiwgYjcsIExFQVZFX1NZU0NBTEwpCitCUkFOQ0hfUFJPQyh3b3JrX3Byb2Nlc3NlZF9zeXNjYWxsLCByMiwgYjcsIFdPUktfUFJPQ0VTU0VEX1NZU0NBTEwpCitCUkFOQ0hfUFJPQ19VTldJTkZPKGxlYXZlX2tlcm5lbCwgcjIyLCBiNywgTEVBVkVfS0VSTkVMKQorCisKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworI2RlZmluZSBfX0lOSVRfT1JfTU9EVUxFCS50ZXh0CisjZGVmaW5lIF9fSU5JVERBVEFfT1JfTU9EVUxFCS5kYXRhCisjZWxzZQorI2RlZmluZSBfX0lOSVRfT1JfTU9EVUxFCV9fSU5JVAorI2RlZmluZSBfX0lOSVREQVRBX09SX01PRFVMRQlfX0lOSVREQVRBCisjZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KKworCV9fSU5JVF9PUl9NT0RVTEUKKwlHTE9CQUxfRU5UUlkocGFyYXZpcnRfZmNfaSkKKwlmYy5pIHIzMgorCWJyLnJldC5zcHRrLm1hbnkgcnAKKwlFTkQocGFyYXZpcnRfZmNfaSkKKwlfX0ZJTklUCisKKwlfX0lOSVRfT1JfTU9EVUxFCisJLmFsaWduIDMyCisJR0xPQkFMX0VOVFJZKHBhcmF2aXJ0X25vcF9iX2luc3RfYnVuZGxlKQorCXsKKwkJbm9wLmIgMAorCQlub3AuYiAwCisJCW5vcC5iIDAKKwl9CisJRU5EKHBhcmF2aXJ0X25vcF9iX2luc3RfYnVuZGxlKQorCV9fRklOSVQKKworCS8qIE5PVEU6IG5vcC5bbWZpXSBoYXMgc2FtZSBmb3JtYXQgKi8KKwlfX0lOSVRfT1JfTU9EVUxFCisJR0xPQkFMX0VOVFJZKHBhcmF2aXJ0X25vcF9tZmlfaW5zdF9idW5kbGUpCisJeworCQlub3AubSAwCisJCW5vcC5mIDAKKwkJbm9wLmkgMAorCX0KKwlFTkQocGFyYXZpcnRfbm9wX21maV9pbnN0X2J1bmRsZSkKKwlfX0ZJTklUCisKKwlfX0lOSVRfT1JfTU9EVUxFCisJR0xPQkFMX0VOVFJZKHBhcmF2aXJ0X25vcF9idW5kbGUpCitwYXJhdmlydF9ub3BfYnVuZGxlX3N0YXJ0OgorCXsKKwkJbm9wIDAKKwkJbm9wIDAKKwkJbm9wIDAKKwl9CitwYXJhdmlydF9ub3BfYnVuZGxlX2VuZDoKKwlFTkQocGFyYXZpcnRfbm9wX2J1bmRsZSkKKwlfX0ZJTklUCisKKwlfX0lOSVREQVRBX09SX01PRFVMRQorCS5hbGlnbiA4CisJLmdsb2JhbCBwYXJhdmlydF9ub3BfYnVuZGxlX3NpemUKK3BhcmF2aXJ0X25vcF9idW5kbGVfc2l6ZToKKwlkYXRhOAlwYXJhdmlydF9ub3BfYnVuZGxlX2VuZCAtIHBhcmF2aXJ0X25vcF9idW5kbGVfc3RhcnQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGF0Y2guYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGF0Y2guYwppbmRleCBiODNiMmM1Li42OGExMzExIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BhdGNoLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wYXRjaC5jCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAorI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2luY2x1ZGUgPGFzbS9wYXRjaC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KQEAgLTE2OSwxNiArMTcwLDM1IEBACiAJaWE2NF9zcmx6X2koKTsKIH0KIAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaWE2NF9uYXRpdmVfZnN5c2NhbGxfdGFibGVbTlJfc3lzY2FsbHNdOworZXh0ZXJuIGNoYXIgaWE2NF9uYXRpdmVfZnN5c19idWJibGVfZG93bltdOworc3RydWN0IHB2X2ZzeXNfZGF0YSBwdl9mc3lzX2RhdGEgX19pbml0ZGF0YSA9IHsKKwkuZnN5c2NhbGxfdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKWlhNjRfbmF0aXZlX2ZzeXNjYWxsX3RhYmxlLAorCS5mc3lzX2J1YmJsZV9kb3duID0gKHZvaWQgKilpYTY0X25hdGl2ZV9mc3lzX2J1YmJsZV9kb3duLAorfTsKKwordW5zaWduZWQgbG9uZyAqIF9faW5pdAorcGFyYXZpcnRfZ2V0X2ZzeXNjYWxsX3RhYmxlKHZvaWQpCit7CisJcmV0dXJuIHB2X2ZzeXNfZGF0YS5mc3lzY2FsbF90YWJsZTsKK30KKworY2hhciAqIF9faW5pdAorcGFyYXZpcnRfZ2V0X2ZzeXNfYnViYmxlX2Rvd24odm9pZCkKK3sKKwlyZXR1cm4gcHZfZnN5c19kYXRhLmZzeXNfYnViYmxlX2Rvd247Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdAogcGF0Y2hfZnN5c2NhbGxfdGFibGUgKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCWV4dGVybiB1bnNpZ25lZCBsb25nIGZzeXNjYWxsX3RhYmxlW05SX3N5c2NhbGxzXTsKKwl1NjQgZnN5c2NhbGxfdGFibGUgPSAodTY0KXBhcmF2aXJ0X2dldF9mc3lzY2FsbF90YWJsZSgpOwogCXMzMiAqb2ZmcCA9IChzMzIgKikgc3RhcnQ7CiAJdTY0IGlwOwogCiAJd2hpbGUgKG9mZnAgPCAoczMyICopIGVuZCkgewogCQlpcCA9ICh1NjQpIGlhNjRfaW12YSgoY2hhciAqKSBvZmZwICsgKm9mZnApOwotCQlpYTY0X3BhdGNoX2ltbTY0KGlwLCAodTY0KSBmc3lzY2FsbF90YWJsZSk7CisJCWlhNjRfcGF0Y2hfaW1tNjQoaXAsIGZzeXNjYWxsX3RhYmxlKTsKIAkJaWE2NF9mYygodm9pZCAqKSBpcCk7CiAJCSsrb2ZmcDsKIAl9CkBAIC0xODksNyArMjA5LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdAogcGF0Y2hfYnJsX2ZzeXNfYnViYmxlX2Rvd24gKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCWV4dGVybiBjaGFyIGZzeXNfYnViYmxlX2Rvd25bXTsKKwl1NjQgZnN5c19idWJibGVfZG93biA9ICh1NjQpcGFyYXZpcnRfZ2V0X2ZzeXNfYnViYmxlX2Rvd24oKTsKIAlzMzIgKm9mZnAgPSAoczMyICopIHN0YXJ0OwogCXU2NCBpcDsKIApAQCAtMjA3LDEzICsyMjcsMTMgQEAKIHZvaWQgX19pbml0CiBpYTY0X3BhdGNoX2dhdGUgKHZvaWQpCiB7Ci0jCWRlZmluZSBTVEFSVChuYW1lKQkoKHVuc2lnbmVkIGxvbmcpIF9fc3RhcnRfZ2F0ZV8jI25hbWUjI19wYXRjaGxpc3QpCi0jCWRlZmluZSBFTkQobmFtZSkJKCh1bnNpZ25lZCBsb25nKV9fZW5kX2dhdGVfIyNuYW1lIyNfcGF0Y2hsaXN0KQorIwlkZWZpbmUgU1RBUlQobmFtZSkJcGFyYXZpcnRfZ2V0X2dhdGVfcGF0Y2hsaXN0KFBWX0dBVEVfU1RBUlRfIyNuYW1lKQorIwlkZWZpbmUgRU5EKG5hbWUpCXBhcmF2aXJ0X2dldF9nYXRlX3BhdGNobGlzdChQVl9HQVRFX0VORF8jI25hbWUpCiAKLQlwYXRjaF9mc3lzY2FsbF90YWJsZShTVEFSVChmc3lzY2FsbCksIEVORChmc3lzY2FsbCkpOwotCXBhdGNoX2JybF9mc3lzX2J1YmJsZV9kb3duKFNUQVJUKGJybF9mc3lzX2J1YmJsZV9kb3duKSwgRU5EKGJybF9mc3lzX2J1YmJsZV9kb3duKSk7Ci0JaWE2NF9wYXRjaF92dG9wKFNUQVJUKHZ0b3ApLCBFTkQodnRvcCkpOwotCWlhNjRfcGF0Y2hfbWNraW5sZXlfZTkoU1RBUlQobWNraW5sZXlfZTkpLCBFTkQobWNraW5sZXlfZTkpKTsKKwlwYXRjaF9mc3lzY2FsbF90YWJsZShTVEFSVChGU1lTQ0FMTCksIEVORChGU1lTQ0FMTCkpOworCXBhdGNoX2JybF9mc3lzX2J1YmJsZV9kb3duKFNUQVJUKEJSTF9GU1lTX0JVQkJMRV9ET1dOKSwgRU5EKEJSTF9GU1lTX0JVQkJMRV9ET1dOKSk7CisJaWE2NF9wYXRjaF92dG9wKFNUQVJUKFZUT1ApLCBFTkQoVlRPUCkpOworCWlhNjRfcGF0Y2hfbWNraW5sZXlfZTkoU1RBUlQoTUNLSU5MRVlfRTkpLCBFTkQoTUNLSU5MRVlfRTkpKTsKIH0KIAogdm9pZCBpYTY0X3BhdGNoX3BoeXNfc3RhY2tfcmVnKHVuc2lnbmVkIGxvbmcgdmFsKQpAQCAtMjI5LDcgKzI0OSw3IEBACiAJd2hpbGUgKG9mZnAgPCBlbmQpIHsKIAkJaXAgPSAodTY0KSBvZmZwICsgKm9mZnA7CiAJCWlhNjRfcGF0Y2goaXAsIG1hc2ssIGltbSk7Ci0JCWlhNjRfZmMoaXApOworCQlpYTY0X2ZjKCh2b2lkICopaXApOwogCQkrK29mZnA7CiAJfQogCWlhNjRfc3luY19pKCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IDVjMGY0MDguLjhhMDZkYzQ4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwpAQCAtNTYwMyw3ICs1NjAzLDcgQEAKICAqIC9wcm9jL3BlcmZtb24gaW50ZXJmYWNlLCBmb3IgZGVidWcgb25seQogICovCiAKLSNkZWZpbmUgUEZNX1BST0NfU0hPV19IRUFERVIJKCh2b2lkICopTlJfQ1BVUysxKQorI2RlZmluZSBQRk1fUFJPQ19TSE9XX0hFQURFUgkoKHZvaWQgKilucl9jcHVfaWRzKzEpCiAKIHN0YXRpYyB2b2lkICoKIHBmbV9wcm9jX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCkBAIC01NjEyLDcgKzU2MTIsNyBAQAogCQlyZXR1cm4gUEZNX1BST0NfU0hPV19IRUFERVI7CiAJfQogCi0Jd2hpbGUgKCpwb3MgPD0gTlJfQ1BVUykgeworCXdoaWxlICgqcG9zIDw9IG5yX2NwdV9pZHMpIHsKIAkJaWYgKGNwdV9vbmxpbmUoKnBvcyAtIDEpKSB7CiAJCQlyZXR1cm4gKHZvaWQgKikqcG9zOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGM1NzE2MjcuLjVkN2MwZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC00MTMsNyArNDEzLDcgQEAKICAqIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gd29ycnkgYWJvdXQuCiAgKi8KIGludAotY29weV90aHJlYWQgKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKK2NvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCiAJICAgICB1bnNpZ25lZCBsb25nIHVzZXJfc3RhY2tfYmFzZSwgdW5zaWduZWQgbG9uZyB1c2VyX3N0YWNrX3NpemUsCiAJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zYWxpbmZvLmMgYi9hcmNoL2lhNjQva2VybmVsL3NhbGluZm8uYwppbmRleCBlY2I5ZWI3Li43MDUzYzU1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NhbGluZm8uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NhbGluZm8uYwpAQCAtMzE3LDcgKzMxNyw3IEBACiAJfQogCiAJbiA9IGRhdGEtPmNwdV9jaGVjazsKLQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5yX2NwdV9pZHM7IGkrKykgewogCQlpZiAoY3B1X2lzc2V0KG4sIGRhdGEtPmNwdV9ldmVudCkpIHsKIAkJCWlmICghY3B1X29ubGluZShuKSkgewogCQkJCWNwdV9jbGVhcihuLCBkYXRhLT5jcHVfZXZlbnQpOwpAQCAtMzI2LDcgKzMyNiw3IEBACiAJCQljcHUgPSBuOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCsrbiA9PSBOUl9DUFVTKQorCQlpZiAoKytuID09IG5yX2NwdV9pZHMpCiAJCQluID0gMDsKIAl9CiAKQEAgLTMzNyw3ICszMzcsNyBAQAogCiAJLyogZm9yIG5leHQgcmVhZCwgc3RhcnQgY2hlY2tpbmcgYXQgbmV4dCBDUFUgKi8KIAlkYXRhLT5jcHVfY2hlY2sgPSBjcHU7Ci0JaWYgKCsrZGF0YS0+Y3B1X2NoZWNrID09IE5SX0NQVVMpCisJaWYgKCsrZGF0YS0+Y3B1X2NoZWNrID09IG5yX2NwdV9pZHMpCiAJCWRhdGEtPmNwdV9jaGVjayA9IDA7CiAKIAlzbnByaW50ZihjbWQsIHNpemVvZihjbWQpLCAicmVhZCAlZFxuIiwgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwppbmRleCA4NjVhZjI3Li43MTQwNjZhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSA8YXNtL21lbWluaXQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgorI2luY2x1ZGUgPGFzbS9wYXJhdmlydF9wYXRjaC5oPgogI2luY2x1ZGUgPGFzbS9wYXRjaC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtNTM3LDYgKzUzOCw3IEBACiAJcGFyYXZpcnRfYXJjaF9zZXR1cF9lYXJseSgpOwogCiAJaWE2NF9wYXRjaF92dG9wKCh1NjQpIF9fc3RhcnRfX192dG9wX3BhdGNobGlzdCwgKHU2NCkgX19lbmRfX192dG9wX3BhdGNobGlzdCk7CisJcGFyYXZpcnRfcGF0Y2hfYXBwbHkoKTsKIAogCSpjbWRsaW5lX3AgPSBfX3ZhKGlhNjRfYm9vdF9wYXJhbS0+Y29tbWFuZF9saW5lKTsKIAlzdHJsY3B5KGJvb3RfY29tbWFuZF9saW5lLCAqY21kbGluZV9wLCBDT01NQU5EX0xJTkVfU0laRSk7CkBAIC03MzAsMTAgKzczMiwxMCBAQAogY19zdGFydCAoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKICNpZmRlZiBDT05GSUdfU01QCi0Jd2hpbGUgKCpwb3MgPCBOUl9DUFVTICYmICFjcHVfaXNzZXQoKnBvcywgY3B1X29ubGluZV9tYXApKQorCXdoaWxlICgqcG9zIDwgbnJfY3B1X2lkcyAmJiAhY3B1X29ubGluZSgqcG9zKSkKIAkJKysqcG9zOwogI2VuZGlmCi0JcmV0dXJuICpwb3MgPCBOUl9DUFVTID8gY3B1X2RhdGEoKnBvcykgOiBOVUxMOworCXJldHVybiAqcG9zIDwgbnJfY3B1X2lkcyA/IGNwdV9kYXRhKCpwb3MpIDogTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgKgpAQCAtMTAxNiw4ICsxMDE4LDcgQEAKIAkJCQkJfCBJQTY0X0RDUl9EQSB8IElBNjRfRENSX0REIHwgSUE2NF9EQ1JfTEMpKTsKIAlhdG9taWNfaW5jKCZpbml0X21tLm1tX2NvdW50KTsKIAljdXJyZW50LT5hY3RpdmVfbW0gPSAmaW5pdF9tbTsKLQlpZiAoY3VycmVudC0+bW0pCi0JCUJVRygpOworCUJVR19PTihjdXJyZW50LT5tbSk7CiAKIAlpYTY0X21tdV9pbml0KGlhNjRfaW12YShjcHVfZGF0YSkpOwogCWlhNjRfbWNhX2NwdV9pbml0KGlhNjRfaW12YShjcHVfZGF0YSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc21wLmMKaW5kZXggZGE4ZjAyMC4uMmVhNDE5OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcC5jCkBAIC0xNjYsMTEgKzE2NiwxMSBAQAogICogQ2FsbGVkIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZC4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1zZW5kX0lQSV9tYXNrKGNwdW1hc2tfdCBtYXNrLCBpbnQgb3ApCitzZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgb3ApCiB7CiAJdW5zaWduZWQgaW50IGNwdTsKIAotCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgeworCWZvcl9lYWNoX2NwdShjcHUsIG1hc2spIHsKIAkJCXNlbmRfSVBJX3NpbmdsZShjcHUsIG9wKTsKIAl9CiB9CkBAIC0zMTYsNyArMzE2LDcgQEAKIAlzZW5kX0lQSV9zaW5nbGUoY3B1LCBJUElfQ0FMTF9GVU5DX1NJTkdMRSk7CiB9CiAKLXZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKQordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKIAlzZW5kX0lQSV9tYXNrKG1hc2ssIElQSV9DQUxMX0ZVTkMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCA1MjI5MDU0Li43NzAwZTIzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtNTgxLDE0ICs1ODEsMTQgQEAKIAogCWlhNjRfY3B1X3RvX3NhcGljaWRbMF0gPSBib290X2NwdV9pZDsKIAljcHVzX2NsZWFyKGNwdV9wcmVzZW50X21hcCk7Ci0JY3B1X3NldCgwLCBjcHVfcHJlc2VudF9tYXApOwotCWNwdV9zZXQoMCwgY3B1X3Bvc3NpYmxlX21hcCk7CisJc2V0X2NwdV9wcmVzZW50KDAsIHRydWUpOworCXNldF9jcHVfcG9zc2libGUoMCwgdHJ1ZSk7CiAJZm9yIChjcHUgPSAxLCBpID0gMDsgaSA8IHNtcF9ib290X2RhdGEuY3B1X2NvdW50OyBpKyspIHsKIAkJc2FwaWNpZCA9IHNtcF9ib290X2RhdGEuY3B1X3BoeXNfaWRbaV07CiAJCWlmIChzYXBpY2lkID09IGJvb3RfY3B1X2lkKQogCQkJY29udGludWU7Ci0JCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOwotCQljcHVfc2V0KGNwdSwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCXNldF9jcHVfcHJlc2VudChjcHUsIHRydWUpOworCQlzZXRfY3B1X3Bvc3NpYmxlKGNwdSwgdHJ1ZSk7CiAJCWlhNjRfY3B1X3RvX3NhcGljaWRbY3B1XSA9IHNhcGljaWQ7CiAJCWNwdSsrOwogCX0KQEAgLTYyNiwxMiArNjI2LDkgQEAKIAkgKi8KIAlpZiAoIW1heF9jcHVzKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIlNNUCBtb2RlIGRlYWN0aXZhdGVkLlxuIik7Ci0JCWNwdXNfY2xlYXIoY3B1X29ubGluZV9tYXApOwotCQljcHVzX2NsZWFyKGNwdV9wcmVzZW50X21hcCk7Ci0JCWNwdXNfY2xlYXIoY3B1X3Bvc3NpYmxlX21hcCk7Ci0JCWNwdV9zZXQoMCwgY3B1X29ubGluZV9tYXApOwotCQljcHVfc2V0KDAsIGNwdV9wcmVzZW50X21hcCk7Ci0JCWNwdV9zZXQoMCwgY3B1X3Bvc3NpYmxlX21hcCk7CisJCWluaXRfY3B1X29ubGluZShjcHVtYXNrX29mKDApKTsKKwkJaW5pdF9jcHVfcHJlc2VudChjcHVtYXNrX29mKDApKTsKKwkJaW5pdF9jcHVfcG9zc2libGUoY3B1bWFza19vZigwKSk7CiAJCXJldHVybjsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCmluZGV4IGYwZWJiMzQuLjY0MWM4YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KQEAgLTUwLDYgKzUxLDE1IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQVJBVklSVAorLyogV2UgbmVlZCB0byBkZWZpbmUgYSByZWFsIGZ1bmN0aW9uIGZvciBzY2hlZF9jbG9jaywgdG8gb3ZlcnJpZGUgdGhlCisgICB3ZWFrIGRlZmF1bHQgdmVyc2lvbiAqLwordW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCit7CisgICAgICAgIHJldHVybiBwYXJhdmlydF9zY2hlZF9jbG9jaygpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUEFSQVZJUlQKIHN0YXRpYyB2b2lkCiBwYXJhdmlydF9jbG9ja3NvdXJjZV9yZXN1bWUodm9pZCkKIHsKQEAgLTQwNSw2ICs0MTUsMjEgQEAKIAkubmFtZSA9CQkidGltZXIiCiB9OwogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBydGNfZWZpX2RldiA9IHsKKwkubmFtZSA9ICJydGMtZWZpIiwKKwkuaWQgPSAtMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJ0Y19pbml0KHZvaWQpCit7CisJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnRjX2VmaV9kZXYpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVnaXN0ZXIgcnRjIGRldmljZS4uLlxuIik7CisKKwkvKiBub3QgbmVjZXNzYXJpbHkgYW4gZXJyb3IgKi8KKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHJ0Y19pbml0KTsKKwogdm9pZCBfX2luaXQKIHRpbWVfaW5pdCAodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAzNzY1ZWZjLi40YTk1ZTg2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xNjksNiArMTY5LDMwIEBACiAJICBfX2VuZF9fX21ja2lubGV5X2U5X2J1bmRsZXMgPSAuOwogCX0KIAorI2lmIGRlZmluZWQoQ09ORklHX1BBUkFWSVJUKQorICAuID0gQUxJR04oMTYpOworICAucGFyYXZpcnRfYnVuZGxlcyA6IEFUKEFERFIoLnBhcmF2aXJ0X2J1bmRsZXMpIC0gTE9BRF9PRkZTRVQpCisJeworCSAgX19zdGFydF9wYXJhdmlydF9idW5kbGVzID0gLjsKKyAgICAgICAgICAqKC5wYXJhdmlydF9idW5kbGVzKQorCSAgX19zdG9wX3BhcmF2aXJ0X2J1bmRsZXMgPSAuOworCX0KKyAgLiA9IEFMSUdOKDE2KTsKKyAgLnBhcmF2aXJ0X2luc3RzIDogQVQoQUREUigucGFyYXZpcnRfaW5zdHMpIC0gTE9BRF9PRkZTRVQpCisJeworCSAgX19zdGFydF9wYXJhdmlydF9pbnN0cyA9IC47CisgICAgICAgICAgKigucGFyYXZpcnRfaW5zdHMpCisJICBfX3N0b3BfcGFyYXZpcnRfaW5zdHMgPSAuOworCX0KKyAgLiA9IEFMSUdOKDE2KTsKKyAgLnBhcmF2aXJ0X2JyYW5jaGVzIDogQVQoQUREUigucGFyYXZpcnRfYnJhbmNoZXMpIC0gTE9BRF9PRkZTRVQpCisJeworCSAgX19zdGFydF9wYXJhdmlydF9icmFuY2hlcyA9IC47CisJICAqKC5wYXJhdmlydF9icmFuY2hlcykKKwkgIF9fc3RvcF9wYXJhdmlydF9icmFuY2hlcyA9IC47CisJfQorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19JQTY0X0dFTkVSSUMpCiAgIC8qIE1hY2hpbmUgVmVjdG9yICovCiAgIC4gPSBBTElHTigxNik7CkBAIC0yMDEsNiArMjI1LDEyIEBACiAJICBfX3N0YXJ0X2dhdGVfc2VjdGlvbiA9IC47CiAJICAqKC5kYXRhLmdhdGUpCiAJICBfX3N0b3BfZ2F0ZV9zZWN0aW9uID0gLjsKKyNpZmRlZiBDT05GSUdfWEVOCisJICAuID0gQUxJR04oUEFHRV9TSVpFKTsKKwkgIF9feGVuX3N0YXJ0X2dhdGVfc2VjdGlvbiA9IC47CisJICAqKC5kYXRhLmdhdGUueGVuKQorCSAgX194ZW5fc3RvcF9nYXRlX3NlY3Rpb24gPSAuOworI2VuZGlmCiAJfQogICAuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIG1ha2Ugc3VyZSB0aGUgZ2F0ZSBwYWdlIGRvZXNuJ3QgZXhwb3NlCiAgIAkJCQkgKiBrZXJuZWwgZGF0YQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jIGIvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCmluZGV4IDA3NmIwMGQuLjI4YWY2YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYworKysgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKQEAgLTcwLDcgKzcwLDcgQEAKIAlpbnQgbDsKIAogCWZvciAobCA9IDA7IGwgPCAobGVuICsgMzIpOyBsICs9IDMyKQotCQlpYTY0X2ZjKHN0YXJ0ICsgbCk7CisJCWlhNjRfZmMoKHZvaWQgKikoc3RhcnQgKyBsKSk7CiAKIAlpYTY0X3N5bmNfaSgpOwogCWlhNjRfc3Jsel9pKCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3ZjcHUuYyBiL2FyY2gvaWE2NC9rdm0vdmNwdS5jCmluZGV4IGQ0ZDI4MDUuLmExOGVlMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdmNwdS5jCisrKyBiL2FyY2gvaWE2NC9rdm0vdmNwdS5jCkBAIC0zODYsNyArMzg2LDcgQEAKIAkJZWxzZQogCQkJKnJuYXRfYWRkciA9ICgqcm5hdF9hZGRyKSAmICh+bmF0X21hc2spOwogCi0JCWlhNjRfc2V0cmVnKF9JQTY0X1JFR19BUl9CU1BTVE9SRSwgYnNwc3RvcmUpOworCQlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfQlNQU1RPUkUsICh1bnNpZ25lZCBsb25nKWJzcHN0b3JlKTsKIAkJaWE2NF9zZXRyZWcoX0lBNjRfUkVHX0FSX1JOQVQsIHJuYXQpOwogCX0KIAlsb2NhbF9pcnFfcmVzdG9yZShwc3IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92dGxiLmMgYi9hcmNoL2lhNjQva3ZtL3Z0bGIuYwppbmRleCAzODIzMmIzLi4yYzI1MDFmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3Z0bGIuYworKysgYi9hcmNoL2lhNjQva3ZtL3Z0bGIuYwpAQCAtMjEwLDYgKzIxMCw3IEBACiAJCXBoeV9wdGUgICY9IH5QQUdFX0ZMQUdTX1JWX01BU0s7CiAJCXBzciA9IGlhNjRfY2xlYXJfaWMoKTsKIAkJaWE2NF9pdGModHlwZSwgdmEsIHBoeV9wdGUsIGl0aXJfcHMoaXRpcikpOworCQlwYXJhdmlydF9kdl9zZXJpYWxpemVfZGF0YSgpOwogCQlpYTY0X3NldF9wc3IocHNyKTsKIAl9CiAKQEAgLTQ1Niw2ICs0NTcsNyBAQAogCQlwaHlfcHRlICAmPSB+UEFHRV9GTEFHU19SVl9NQVNLOwogCQlwc3IgPSBpYTY0X2NsZWFyX2ljKCk7CiAJCWlhNjRfaXRjKHR5cGUsIGlmYSwgcGh5X3B0ZSwgcHMpOworCQlwYXJhdmlydF9kdl9zZXJpYWxpemVfZGF0YSgpOwogCQlpYTY0X3NldF9wc3IocHNyKTsKIAl9CiAJaWYgKCEocHRlJlZUTEJfUFRFX0lPKSkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IDU2ZTEyOTAuLmMwZjNiZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9tY2EuaD4KKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIApAQCAtMjU5LDYgKzI2MCw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQKIHNldHVwX2dhdGUgKHZvaWQpCiB7CisJdm9pZCAqZ2F0ZV9zZWN0aW9uOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCiAJLyoKQEAgLTI2NiwxMCArMjY4LDExIEBACiAJICogaGVhZGVycyBldGMuIGFuZCBvbmNlIGV4ZWN1dGUtb25seSBwYWdlIHRvIGVuYWJsZQogCSAqIHByaXZpbGVnZS1wcm9tb3Rpb24gdmlhICJlcGMiOgogCSAqLwotCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoaWE2NF9pbXZhKF9fc3RhcnRfZ2F0ZV9zZWN0aW9uKSk7CisJZ2F0ZV9zZWN0aW9uID0gcGFyYXZpcnRfZ2V0X2dhdGVfc2VjdGlvbigpOworCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UoaWE2NF9pbXZhKGdhdGVfc2VjdGlvbikpOwogCXB1dF9rZXJuZWxfcGFnZShwYWdlLCBHQVRFX0FERFIsIFBBR0VfUkVBRE9OTFkpOwogI2lmZGVmIEhBVkVfQlVHR1lfU0VHUkVMCi0JcGFnZSA9IHZpcnRfdG9fcGFnZShpYTY0X2ltdmEoX19zdGFydF9nYXRlX3NlY3Rpb24gKyBQQUdFX1NJWkUpKTsKKwlwYWdlID0gdmlydF90b19wYWdlKGlhNjRfaW12YShnYXRlX3NlY3Rpb24gKyBQQUdFX1NJWkUpKTsKIAlwdXRfa2VybmVsX3BhZ2UocGFnZSwgR0FURV9BRERSICsgUEFHRV9TSVpFLCBQQUdFX0dBVEUpOwogI2Vsc2UKIAlwdXRfa2VybmVsX3BhZ2UocGFnZSwgR0FURV9BRERSICsgUEVSQ1BVX1BBR0VfU0laRSwgUEFHRV9HQVRFKTsKQEAgLTYzMyw4ICs2MzYsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkxBVE1FTQotCWlmICghbWVtX21hcCkKLQkJQlVHKCk7CisJQlVHX09OKCFtZW1fbWFwKTsKIAltYXhfbWFwbnIgPSBtYXhfbG93X3BmbjsKICNlbmRpZgogCkBAIC02NjcsOCArNjY5LDggQEAKIAkgKiBjb2RlIGNhbiB0ZWxsIHRoZW0gYXBhcnQuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IE5SX3N5c2NhbGxzOyArK2kpIHsKLQkJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZnN5c2NhbGxfdGFibGVbTlJfc3lzY2FsbHNdOwogCQlleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNfY2FsbF90YWJsZVtOUl9zeXNjYWxsc107CisJCXVuc2lnbmVkIGxvbmcgKmZzeXNjYWxsX3RhYmxlID0gcGFyYXZpcnRfZ2V0X2ZzeXNjYWxsX3RhYmxlKCk7CiAKIAkJaWYgKCFmc3lzY2FsbF90YWJsZVtpXSB8fCBub2x3c3lzKQogCQkJZnN5c2NhbGxfdGFibGVbaV0gPSBzeXNfY2FsbF90YWJsZVtpXSB8IDE7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vdGxiLmMgYi9hcmNoL2lhNjQvbW0vdGxiLmMKaW5kZXggYmQ5ODE4YS4uYjlmM2Q3YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL3RsYi5jCisrKyBiL2FyY2gvaWE2NC9tbS90bGIuYwpAQCAtMzA5LDcgKzMwOSw3IEBACiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKICNpZmRlZiBDT05GSUdfU01QCi0JaWYgKG1tICE9IGN1cnJlbnQtPmFjdGl2ZV9tbSB8fCBjcHVzX3dlaWdodChtbS0+Y3B1X3ZtX21hc2spICE9IDEpIHsKKwlpZiAobW0gIT0gY3VycmVudC0+YWN0aXZlX21tIHx8IGNwdW1hc2tfd2VpZ2h0KG1tX2NwdW1hc2sobW0pKSAhPSAxKSB7CiAJCXBsYXRmb3JtX2dsb2JhbF90bGJfcHVyZ2UobW0sIHN0YXJ0LCBlbmQsIG5iaXRzKTsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NjcmlwdHMvcHZjaGVjay5zZWQgYi9hcmNoL2lhNjQvc2NyaXB0cy9wdmNoZWNrLnNlZAppbmRleCBiYTY2YWMyLi5lNTk4MDlhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc2NyaXB0cy9wdmNoZWNrLnNlZAorKysgYi9hcmNoL2lhNjQvc2NyaXB0cy9wdmNoZWNrLnNlZApAQCAtMTcsNiArMTcsNyBAQAogcy9tb3YuKj0uKmNyXC5pdnIvLndhcm5pbmcgXCJjci5pdnIgc2hvdWxkIG5vdCB1c2VkIGRpcmVjdGx5XCIvZwogcy9tb3YuKj1bXlwuXSpwc3IvLndhcm5pbmcgXCJwc3Igc2hvdWxkIG5vdCB1c2VkIGRpcmVjdGx5XCIvZwkjIGF2b2lkIGFyLmZwc3IKIHMvbW92Lio9LiphclwuZWZsYWdzLy53YXJuaW5nIFwiYXIuZWZsYWdzIHNob3VsZCBub3QgdXNlZCBkaXJlY3RseVwiL2cKK3MvbW92Lio9LiphclwuaXRjLiovLndhcm5pbmcgXCJhci5pdGMgc2hvdWxkIG5vdCB1c2VkIGRpcmVjdGx5XCIvZwogcy9tb3YuKmNyXC5pZmEuKj0uKi8ud2FybmluZyBcImNyLmlmYSBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCiBzL21vdi4qY3JcLml0aXIuKj0uKi8ud2FybmluZyBcImNyLml0aXIgc2hvdWxkIG5vdCB1c2VkIGRpcmVjdGx5XCIvZwogcy9tb3YuKmNyXC5paGEuKj0uKi8ud2FybmluZyBcImNyLmloYSBzaG91bGQgbm90IHVzZWQgZGlyZWN0bHlcIi9nCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19jb21tb24uYwppbmRleCAwZDRmZmE0Li41N2YyODBkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2NvbW1vbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9fY29tbW9uLmMKQEAgLTEzNSw4ICsxMzUsNyBAQAogCX0KIAogCXdhcl9saXN0ID0ga3phbGxvYyhERVZfUEVSX1dJREdFVCAqIHNpemVvZigqd2FyX2xpc3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdhcl9saXN0KQotCQlCVUcoKTsKKwlCVUdfT04oIXdhcl9saXN0KTsKIAogCVNBTF9DQUxMX05PTE9DSyhpc3J2LCBTTl9TQUxfSU9JRl9HRVRfV0lER0VUX0RNQUZMVVNIX0xJU1QsCiAJCQluYXNpZCwgd2lkZ2V0LCBfX3BhKHdhcl9saXN0KSwgMCwgMCwgMCAsMCk7CkBAIC0xODAsMjMgKzE3OSwyMCBAQAogCQlzaXplb2Yoc3RydWN0IHNuX2ZsdXNoX2RldmljZV9rZXJuZWwgKik7CiAJaHViZGV2LT5oZGlfZmx1c2hfbmFzaWRfbGlzdC53aWRnZXRfcCA9CiAJCWt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFodWJkZXYtPmhkaV9mbHVzaF9uYXNpZF9saXN0LndpZGdldF9wKQotCQlCVUcoKTsKKwlCVUdfT04oIWh1YmRldi0+aGRpX2ZsdXNoX25hc2lkX2xpc3Qud2lkZ2V0X3ApOwogCiAJZm9yICh3aWRnZXQgPSAwOyB3aWRnZXQgPD0gSFVCX1dJREdFVF9JRF9NQVg7IHdpZGdldCsrKSB7CiAJCXNpemUgPSBERVZfUEVSX1dJREdFVCAqCiAJCQlzaXplb2Yoc3RydWN0IHNuX2ZsdXNoX2RldmljZV9rZXJuZWwpOwogCQlzbl9mbHVzaF9kZXZpY2Vfa2VybmVsID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzbl9mbHVzaF9kZXZpY2Vfa2VybmVsKQotCQkJQlVHKCk7CisJCUJVR19PTighc25fZmx1c2hfZGV2aWNlX2tlcm5lbCk7CiAKIAkJZGV2X2VudHJ5ID0gc25fZmx1c2hfZGV2aWNlX2tlcm5lbDsKIAkJZm9yIChkZXZpY2UgPSAwOyBkZXZpY2UgPCBERVZfUEVSX1dJREdFVDsKIAkJICAgICBkZXZpY2UrKywgZGV2X2VudHJ5KyspIHsKIAkJCXNpemUgPSBzaXplb2Yoc3RydWN0IHNuX2ZsdXNoX2RldmljZV9jb21tb24pOwogCQkJZGV2X2VudHJ5LT5jb21tb24gPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCQkJaWYgKCFkZXZfZW50cnktPmNvbW1vbikKLQkJCQlCVUcoKTsKKwkJCUJVR19PTighZGV2X2VudHJ5LT5jb21tb24pOwogCQkJaWYgKHNuX3Byb21fZmVhdHVyZV9hdmFpbGFibGUoUFJGX0RFVklDRV9GTFVTSF9MSVNUKSkKIAkJCQlzdGF0dXMgPSBzYWxfZ2V0X2RldmljZV9kbWFmbHVzaF9saXN0KAogCQkJCQkgICAgIGh1YmRldi0+aGRpX25hc2lkLCB3aWRnZXQsIGRldmljZSwKQEAgLTMyNiw4ICszMjIsNyBAQAogCSAqLwogCWNvbnRyb2xsZXItPnBsYXRmb3JtX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25fcGxhdGZvcm1fZGF0YSksCiAJCQkJCSAgICBHRlBfS0VSTkVMKTsKLQlpZiAoY29udHJvbGxlci0+cGxhdGZvcm1fZGF0YSA9PSBOVUxMKQotCQlCVUcoKTsKKwlCVUdfT04oY29udHJvbGxlci0+cGxhdGZvcm1fZGF0YSA9PSBOVUxMKTsKIAlzbl9wbGF0Zm9ybV9kYXRhID0KIAkJCShzdHJ1Y3Qgc25fcGxhdGZvcm1fZGF0YSAqKSBjb250cm9sbGVyLT5wbGF0Zm9ybV9kYXRhOwogCXNuX3BsYXRmb3JtX2RhdGEtPnByb3ZpZGVyX3NvZnQgPSBwcm92aWRlcl9zb2Z0OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19pbml0LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwppbmRleCBlMmViMmRhLi5lZTc3NGMzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwpAQCAtMTI4LDggKzEyOCw3IEBACiB7CiAJCWNvbnRyb2xsZXItPndpbmRvdyA9IGtjYWxsb2MoMiwgc2l6ZW9mKHN0cnVjdCBwY2lfd2luZG93KSwKIAkJCQkJICAgICBHRlBfS0VSTkVMKTsKLQkJaWYgKGNvbnRyb2xsZXItPndpbmRvdyA9PSBOVUxMKQotCQkJQlVHKCk7CisJCUJVR19PTihjb250cm9sbGVyLT53aW5kb3cgPT0gTlVMTCk7CiAJCWNvbnRyb2xsZXItPndpbmRvd1swXS5vZmZzZXQgPSBsZWdhY3lfaW87CiAJCWNvbnRyb2xsZXItPndpbmRvd1swXS5yZXNvdXJjZS5uYW1lID0gImxlZ2FjeV9pbyI7CiAJCWNvbnRyb2xsZXItPndpbmRvd1swXS5yZXNvdXJjZS5mbGFncyA9IElPUkVTT1VSQ0VfSU87CkBAIC0xNjgsOCArMTY3LDcgQEAKIAlpZHggPSBjb250cm9sbGVyLT53aW5kb3dzOwogCW5ld19jb3VudCA9IGNvbnRyb2xsZXItPndpbmRvd3MgKyBjb3VudDsKIAluZXdfd2luZG93ID0ga2NhbGxvYyhuZXdfY291bnQsIHNpemVvZihzdHJ1Y3QgcGNpX3dpbmRvdyksIEdGUF9LRVJORUwpOwotCWlmIChuZXdfd2luZG93ID09IE5VTEwpCi0JCUJVRygpOworCUJVR19PTihuZXdfd2luZG93ID09IE5VTEwpOwogCWlmIChjb250cm9sbGVyLT53aW5kb3cpIHsKIAkJbWVtY3B5KG5ld193aW5kb3csIGNvbnRyb2xsZXItPndpbmRvdywKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgcGNpX3dpbmRvdykgKiBjb250cm9sbGVyLT53aW5kb3dzKTsKQEAgLTIyMiw4ICsyMjAsNyBAQAogCQkodTY0KSBfX3BhKHBjaWRldl9pbmZvKSwKIAkJKHU2NCkgX19wYShzbl9pcnFfaW5mbykpOwogCi0JaWYgKHN0YXR1cykKLQkJQlVHKCk7IC8qIENhbm5vdCBnZXQgcGxhdGZvcm0gcGNpIGRldmljZSBpbmZvcm1hdGlvbiAqLworCUJVR19PTihzdGF0dXMpOyAvKiBDYW5ub3QgZ2V0IHBsYXRmb3JtIHBjaSBkZXZpY2UgaW5mb3JtYXRpb24gKi8KIAogCiAJLyogQ29weSBvdmVyIFBJTyBNYXBwZWQgQWRkcmVzc2VzICovCkBAIC0zMDcsOCArMzA0LDcgQEAKIAlwcm9tX2J1c3NvZnRfcHRyID0gX192YShwcm9tX2J1c3NvZnRfcHRyKTsKIAogCWNvbnRyb2xsZXIgPSBremFsbG9jKHNpemVvZigqY29udHJvbGxlciksIEdGUF9LRVJORUwpOwotCWlmICghY29udHJvbGxlcikKLQkJQlVHKCk7CisJQlVHX09OKCFjb250cm9sbGVyKTsKIAljb250cm9sbGVyLT5zZWdtZW50ID0gc2VnbWVudDsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKaW5kZXggMDJjNWI4YS4uZTQ1NmYwNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYwpAQCAtNzMyLDggKzczMiw3IEBACiAJCWtsX2NvbmZpZ19oZHJfdCAqa2xncmFwaF9oZWFkZXI7CiAJCW5hc2lkID0gY25vZGVpZF90b19uYXNpZChub2RlKTsKIAkJa2xncmFwaF9oZWFkZXIgPSBpYTY0X3NuX2dldF9rbGNvbmZpZ19hZGRyKG5hc2lkKTsKLQkJaWYgKGtsZ3JhcGhfaGVhZGVyID09IE5VTEwpCi0JCQlCVUcoKTsKKwkJQlVHX09OKGtsZ3JhcGhfaGVhZGVyID09IE5VTEwpOwogCQlicmQgPSBOT0RFX09GRlNFVF9UT19MQk9BUkQobmFzaWQsIGtsZ3JhcGhfaGVhZGVyLT5jaF9ib2FyZF9pbmZvKTsKIAkJd2hpbGUgKGJyZCkgewogCQkJaWYgKGJvYXJkX25lZWRzX2Nub2RlKGJyZC0+YnJkX3R5cGUpICYmIHBoeXNpY2FsX25vZGVfbWFwW2JyZC0+YnJkX25hc2lkXSA8IDApIHsKQEAgLTc1MCw3ICs3NDksNyBAQAogewogCWxvbmcgY3B1OwogCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IG5yX2NwdV9pZHM7IGNwdSsrKQogCQlpZiAoY3B1aWRfdG9fbmFzaWQoY3B1KSA9PSBuYXNpZCAmJgogCQkJCQljcHVpZF90b19zbGljZShjcHUpID09IHNsaWNlKQogCQkJcmV0dXJuIGNwdTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuMl9zbXAuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuMl9zbXAuYwppbmRleCBlNTg1ZjlhLi4xMTc2NTA2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9zbjJfc21wLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc24yX3NtcC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAl1bnNpZ25lZCBsb25nIGl0YzsKIAogCWl0YyA9IGlhNjRfZ2V0X2l0YygpOwotCXNtcF9mbHVzaF90bGJfY3B1bWFzayhtbS0+Y3B1X3ZtX21hc2spOworCXNtcF9mbHVzaF90bGJfY3B1bWFzaygqbW1fY3B1bWFzayhtbSkpOwogCWl0YyA9IGlhNjRfZ2V0X2l0YygpIC0gaXRjOwogCV9fZ2V0X2NwdV92YXIocHRjc3RhdHMpLnNodWJfaXBpX2ZsdXNoZXNfaXRjX2Nsb2NrcyArPSBpdGM7CiAJX19nZXRfY3B1X3ZhcihwdGNzdGF0cykuc2h1Yl9pcGlfZmx1c2hlcysrOwpAQCAtMTgyLDcgKzE4Miw3IEBACiAJbm9kZXNfY2xlYXIobm9kZXNfZmx1c2hlZCk7CiAJaSA9IDA7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIG1tLT5jcHVfdm1fbWFzaykgeworCWZvcl9lYWNoX2NwdShjcHUsIG1tX2NwdW1hc2sobW0pKSB7CiAJCWNub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKIAkJbm9kZV9zZXQoY25vZGUsIG5vZGVzX2ZsdXNoZWQpOwogCQlsY3B1ID0gY3B1OwpAQCAtNDYxLDcgKzQ2MSw3IEBACiAKIHN0YXRpYyB2b2lkICpzbjJfcHRjX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIGxvZmZfdCAqIG9mZnNldCkKIHsKLQlpZiAoKm9mZnNldCA8IE5SX0NQVVMpCisJaWYgKCpvZmZzZXQgPCBucl9jcHVfaWRzKQogCQlyZXR1cm4gb2Zmc2V0OwogCXJldHVybiBOVUxMOwogfQpAQCAtNDY5LDcgKzQ2OSw3IEBACiBzdGF0aWMgdm9pZCAqc24yX3B0Y19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKmRhdGEsIGxvZmZfdCAqIG9mZnNldCkKIHsKIAkoKm9mZnNldCkrKzsKLQlpZiAoKm9mZnNldCA8IE5SX0NQVVMpCisJaWYgKCpvZmZzZXQgPCBucl9jcHVfaWRzKQogCQlyZXR1cm4gb2Zmc2V0OwogCXJldHVybiBOVUxMOwogfQpAQCAtNDkxLDcgKzQ5MSw3IEBACiAJCXNlcV9wcmludGYoZmlsZSwgIiMgcHRjdGVzdCAlZCwgZmx1c2hvcHQgJWRcbiIsIHNuMl9wdGN0ZXN0LCBzbjJfZmx1c2hfb3B0KTsKIAl9CiAKLQlpZiAoY3B1IDwgTlJfQ1BVUyAmJiBjcHVfb25saW5lKGNwdSkpIHsKKwlpZiAoY3B1IDwgbnJfY3B1X2lkcyAmJiBjcHVfb25saW5lKGNwdSkpIHsKIAkJc3RhdCA9ICZwZXJfY3B1KHB0Y3N0YXRzLCBjcHUpOwogCQlzZXFfcHJpbnRmKGZpbGUsICJjcHUgJWQgJWxkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkICVsZCAlbGQgJWxkICVsZCAlbGRcbiIsIGNwdSwgc3RhdC0+cHRjX2wsCiAJCQkJc3RhdC0+Y2hhbmdlX3JpZCwgc3RhdC0+c2h1Yl9wdGNfZmx1c2hlcywgc3RhdC0+bm9kZXNfZmx1c2hlZCwKQEAgLTU1NCw3ICs1NTQsNyBAQAogCiAJcHJvY19zbjJfcHRjID0gcHJvY19jcmVhdGUoUFRDX0JBU0VOQU1FLCAwNDQ0LAogCQkJCSAgIE5VTEwsICZwcm9jX3NuMl9wdGNfb3BlcmF0aW9ucyk7Ci0JaWYgKCEmcHJvY19zbjJfcHRjX29wZXJhdGlvbnMpIHsKKwlpZiAoIXByb2Nfc24yX3B0YykgewogCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBjcmVhdGUgJXMgcHJvYyBlbnRyeSIsIFBUQ19CQVNFTkFNRSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3NuX2h3cGVyZi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMKaW5kZXggYmUzMzk0Ny4uOWU2NDkxYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvc25faHdwZXJmLmMKQEAgLTI3NSw4ICsyNzUsNyBAQAogCiAJLyogZ2V0IGl0J3MgaW50ZXJjb25uZWN0IHRvcG9sb2d5ICovCiAJc3ogPSBvcC0+cG9ydHMgKiBzaXplb2Yoc3RydWN0IHNuX2h3cGVyZl9wb3J0X2luZm8pOwotCWlmIChzeiA+IHNpemVvZihwdGRhdGEpKQotCQlCVUcoKTsKKwlCVUdfT04oc3ogPiBzaXplb2YocHRkYXRhKSk7CiAJZSA9IGlhNjRfc25faHdwZXJmX29wKHNuX2h3cGVyZl9tYXN0ZXJfbmFzaWQsCiAJCQkgICAgICBTTl9IV1BFUkZfRU5VTV9QT1JUUywgbm9kZW9iai0+aWQsIHN6LAogCQkJICAgICAgKHU2NCkmcHRkYXRhLCAwLCAwLCBOVUxMKTsKQEAgLTMxMCw4ICszMDksNyBAQAogCWlmIChyb3V0ZXIgJiYgKCFmb3VuZF9jcHUgfHwgIWZvdW5kX21lbSkpIHsKIAkJLyogc2VhcmNoIGZvciBhIG5vZGUgY29ubmVjdGVkIHRvIHRoZSBzYW1lIHJvdXRlciAqLwogCQlzeiA9IHJvdXRlci0+cG9ydHMgKiBzaXplb2Yoc3RydWN0IHNuX2h3cGVyZl9wb3J0X2luZm8pOwotCQlpZiAoc3ogPiBzaXplb2YocHRkYXRhKSkKLQkJCUJVRygpOworCQlCVUdfT04oc3ogPiBzaXplb2YocHRkYXRhKSk7CiAJCWUgPSBpYTY0X3NuX2h3cGVyZl9vcChzbl9od3BlcmZfbWFzdGVyX25hc2lkLAogCQkJCSAgICAgIFNOX0hXUEVSRl9FTlVNX1BPUlRTLCByb3V0ZXItPmlkLCBzeiwKIAkJCQkgICAgICAodTY0KSZwdGRhdGEsIDAsIDAsIE5VTEwpOwpAQCAtNjEyLDcgKzYxMCw3IEBACiAJb3BfaW5mby0+YS0+YXJnICY9IFNOX0hXUEVSRl9BUkdfT0JKSURfTUFTSzsKIAogCWlmIChjcHUgIT0gU05fSFdQRVJGX0FSR19BTllfQ1BVKSB7Ci0JCWlmIChjcHUgPj0gTlJfQ1BVUyB8fCAhY3B1X29ubGluZShjcHUpKSB7CisJCWlmIChjcHUgPj0gbnJfY3B1X2lkcyB8fCAhY3B1X29ubGluZShjcHUpKSB7CiAJCQlyID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYwppbmRleCAwNjBkZjRhLi5jNjU5YWQ1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfZG1hLmMKQEAgLTI1Niw5ICsyNTYsNyBAQAogCiAJaHViaW5mbyA9IChOT0RFUERBKG5hc2lkX3RvX2Nub2RlaWQobmFzaWQpKSktPnBkaW5mbzsKIAotCWlmICghaHViaW5mbykgewotCQlCVUcoKTsKLQl9CisJQlVHX09OKCFodWJpbmZvKTsKIAogCWZsdXNoX25hc2lkX2xpc3QgPSAmaHViaW5mby0+aGRpX2ZsdXNoX25hc2lkX2xpc3Q7CiAJaWYgKGZsdXNoX25hc2lkX2xpc3QtPndpZGdldF9wID09IE5VTEwpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQveGVuL01ha2VmaWxlIGIvYXJjaC9pYTY0L3hlbi9NYWtlZmlsZQppbmRleCAwYWQwMjI0Li5lNmY0YTBhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQveGVuL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC94ZW4vTWFrZWZpbGUKQEAgLTMsMTQgKzMsMjkgQEAKICMKIAogb2JqLXkgOj0gaHlwZXJjYWxsLm8geGVuaXZ0Lm8geGVuc2V0dXAubyB4ZW5fcHZfb3BzLm8gaXJxX3hlbi5vIFwKLQkgaHlwZXJ2aXNvci5vIHhlbmNvbW0ubyB4Y29tX2hjYWxsLm8gZ3JhbnQtdGFibGUubyB0aW1lLm8gc3VzcGVuZC5vCisJIGh5cGVydmlzb3IubyB4ZW5jb21tLm8geGNvbV9oY2FsbC5vIGdyYW50LXRhYmxlLm8gdGltZS5vIHN1c3BlbmQubyBcCisJIGdhdGUtZGF0YS5vCiAKIG9iai0kKENPTkZJR19JQTY0X0dFTkVSSUMpICs9IG1hY2h2ZWMubwogCisjIFRoZSBnYXRlIERTTyBpbWFnZSBpcyBidWlsdCB1c2luZyBhIHNwZWNpYWwgbGlua2VyIHNjcmlwdC4KK2luY2x1ZGUgJChzcmN0cmVlKS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlLmdhdGUKKworIyB0ZWxsIGNvbXBpbGVkIGZvciB4ZW4KK0NQUEZMQUdTX2dhdGUubGRzICs9IC1EX19JQTY0X0dBVEVfUEFSQVZJUlRVQUxJWkVEX1hFTgorQUZMQUdTX2dhdGUubyArPSAtRF9fSUE2NF9BU01fUEFSQVZJUlRVQUxJWkVEX1hFTiAtRF9fSUE2NF9HQVRFX1BBUkFWSVJUVUFMSVpFRF9YRU4KKworIyB1c2Ugc2FtZSBmaWxlIG9mIG5hdGl2ZS4KKyQob2JqKS9nYXRlLm86ICQoc3JjKS8uLi9rZXJuZWwvZ2F0ZS5TIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGFzX29fUykKKyQob2JqKS9nYXRlLmxkczogJChzcmMpLy4uL2tlcm5lbC9nYXRlLmxkcy5TIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGNwcF9sZHNfUykKKworCiBBRkxBR1NfeGVuaXZ0Lm8gKz0gLURfX0lBNjRfQVNNX1BBUkFWSVJUVUFMSVpFRF9YRU4KIAogIyB4ZW4gbXVsdGkgY29tcGlsZQotQVNNX1BBUkFWSVJUX01VTFRJX0NPTVBJTEVfU1JDUyA9IGl2dC5TIGVudHJ5LlMKK0FTTV9QQVJBVklSVF9NVUxUSV9DT01QSUxFX1NSQ1MgPSBpdnQuUyBlbnRyeS5TIGZzeXMuUwogQVNNX1BBUkFWSVJUX09CSlMgPSAkKGFkZHByZWZpeCB4ZW4tLCQoQVNNX1BBUkFWSVJUX01VTFRJX0NPTVBJTEVfU1JDUzouUz0ubykpCiBvYmoteSArPSAkKEFTTV9QQVJBVklSVF9PQkpTKQogZGVmaW5lIHBhcmF2aXJ0dWFsaXplZF94ZW4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4vZ2F0ZS1kYXRhLlMgYi9hcmNoL2lhNjQveGVuL2dhdGUtZGF0YS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNDgzMGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQveGVuL2dhdGUtZGF0YS5TCkBAIC0wLDAgKzEsMyBAQAorCS5zZWN0aW9uIC5kYXRhLmdhdGUueGVuLCAiYXciCisKKwkuaW5jYmluICJhcmNoL2lhNjQveGVuL2dhdGUuc28iCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQveGVuL2h5cGVyY2FsbC5TIGIvYXJjaC9pYTY0L3hlbi9oeXBlcmNhbGwuUwppbmRleCA0NWUwMmJiLi5lMzJkYWU0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQveGVuL2h5cGVyY2FsbC5TCisrKyBiL2FyY2gvaWE2NC94ZW4vaHlwZXJjYWxsLlMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KICNpbmNsdWRlIDxhc20veGVuL3ByaXZvcC5oPgogCisjaWZkZWYgX19JTlRFTF9DT01QSUxFUgogLyoKICAqIEh5cGVyY2FsbHMgd2l0aG91dCBwYXJhbWV0ZXIuCiAgKi8KQEAgLTcyLDYgKzczLDcgQEAKIAlici5yZXQuc3B0ay5tYW55IHJwCiAJOzsKIEVORCh4ZW5fc2V0X3JyMF90b19ycjQpCisjZW5kaWYKIAogR0xPQkFMX0VOVFJZKHhlbl9zZW5kX2lwaSkKIAltb3YgcjE0PXIzMgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3hlbi90aW1lLmMgYi9hcmNoL2lhNjQveGVuL3RpbWUuYwppbmRleCA2OGQ2MjA0Li5mYjgzMzI2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQveGVuL3RpbWUuYworKysgYi9hcmNoL2lhNjQveGVuL3RpbWUuYwpAQCAtMTc1LDEwICsxNzUsNTggQEAKIAl9IHdoaWxlICh1bmxpa2VseShyZXQgIT0gbGN5Y2xlKSk7CiB9CiAKKy8qIGJhc2VkIG9uIHhlbl9zY2hlZF9jbG9jaygpIGluIGFyY2gveDg2L3hlbi90aW1lLmMuICovCisvKgorICogVGhpcyByZWxpZXMgb24gSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSy4gSWYgaXQgY2FuJ3QgYmUgZGVmaW5lZCwKKyAqIHNvbWV0aGluZyBzaW1pbGFyIGxvZ2ljIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBoZXJlLgorICovCisvKgorICogWGVuIHNjaGVkX2Nsb2NrIGltcGxlbWVudGF0aW9uLiAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuc3RvbGVuCisgKiBuYW5vc2Vjb25kcywgd2hpY2ggaXMgbmFub3NlY29uZHMgdGhlIFZDUFUgc3BlbnQgaW4gUlVOTklORytCTE9DS0VECisgKiBzdGF0ZXMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgeGVuX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJc3RydWN0IHZjcHVfcnVuc3RhdGVfaW5mbyBydW5zdGF0ZTsKKworCXVuc2lnbmVkIGxvbmcgbG9uZyBub3c7CisJdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcmV0OworCisJLyoKKwkgKiBJZGVhbGx5IHNjaGVkX2Nsb2NrIHNob3VsZCBiZSBjYWxsZWQgb24gYSBwZXItY3B1IGJhc2lzCisJICogYW55d2F5LCBzbyBwcmVlbXB0IHNob3VsZCBhbHJlYWR5IGJlIGRpc2FibGVkLCBidXQgdGhhdCdzCisJICogbm90IGN1cnJlbnQgcHJhY3RpY2UgYXQgdGhlIG1vbWVudC4KKwkgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKKworCS8qCisJICogYm90aCBpYTY0X25hdGl2ZV9zY2hlZF9jbG9jaygpIGFuZCB4ZW4ncyBydW5zdGF0ZSBhcmUKKwkgKiBiYXNlZCBvbiBtQVIuSVRDLiBTbyBkaWZmZXJlbmNlIG9mIHRoZW0gbWFrZXMgc2Vuc2UuCisJICovCisJbm93ID0gaWE2NF9uYXRpdmVfc2NoZWRfY2xvY2soKTsKKworCWdldF9ydW5zdGF0ZV9zbmFwc2hvdCgmcnVuc3RhdGUpOworCisJV0FSTl9PTihydW5zdGF0ZS5zdGF0ZSAhPSBSVU5TVEFURV9ydW5uaW5nKTsKKworCW9mZnNldCA9IDA7CisJaWYgKG5vdyA+IHJ1bnN0YXRlLnN0YXRlX2VudHJ5X3RpbWUpCisJCW9mZnNldCA9IG5vdyAtIHJ1bnN0YXRlLnN0YXRlX2VudHJ5X3RpbWU7CisJcmV0ID0gcnVuc3RhdGUudGltZVtSVU5TVEFURV9ibG9ja2VkXSArCisJCXJ1bnN0YXRlLnRpbWVbUlVOU1RBVEVfcnVubmluZ10gKworCQlvZmZzZXQ7CisKKwlwcmVlbXB0X2VuYWJsZSgpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RydWN0IHB2X3RpbWVfb3BzIHhlbl90aW1lX29wcyBfX2luaXRkYXRhID0gewogCS5pbml0X21pc3NpbmdfdGlja3NfYWNjb3VudGluZwk9IHhlbl9pbml0X21pc3NpbmdfdGlja3NfYWNjb3VudGluZywKIAkuZG9fc3RlYWxfYWNjb3VudGluZwkJPSB4ZW5fZG9fc3RlYWxfYWNjb3VudGluZywKIAkuY2xvY2tzb3VyY2VfcmVzdW1lCQk9IHhlbl9pdGNfaml0dGVyX2RhdGFfcmVzZXQsCisJLnNjaGVkX2Nsb2NrCQkJPSB4ZW5fc2NoZWRfY2xvY2ssCiB9OwogCiAvKiBDYWxsZWQgYWZ0ZXIgc3VzcGVuZCwgdG8gcmVzdW1lIHRpbWUuICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3hlbi94ZW5fcHZfb3BzLmMgYi9hcmNoL2lhNjQveGVuL3hlbl9wdl9vcHMuYwppbmRleCA5MzZjZmYzLi41ZTIyNzBhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQveGVuL3hlbl9wdl9vcHMuYworKysgYi9hcmNoL2lhNjQveGVuL3hlbl9wdl9vcHMuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAKICNpbmNsdWRlIDxhc20veGVuL2h5cGVydmlzb3IuaD4KICNpbmNsdWRlIDxhc20veGVuL3hlbmNvbW0uaD4KQEAgLTE1Myw2ICsxNTQsMTMgQEAKIAl4ZW5fc2V0dXBfdmNwdV9pbmZvX3BsYWNlbWVudCgpOwogfQogCisjaWZkZWYgQVNNX1NVUFBPUlRFRAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0X29yX21vZHVsZQoreGVuX3BhdGNoX2J1bmRsZSh2b2lkICpzYnVuZGxlLCB2b2lkICplYnVuZGxlLCB1bnNpZ25lZCBsb25nIHR5cGUpOworI2VuZGlmCitzdGF0aWMgdm9pZCBfX2luaXQKK3hlbl9wYXRjaF9icmFuY2godW5zaWduZWQgbG9uZyB0YWcsIHVuc2lnbmVkIGxvbmcgdHlwZSk7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfaW5pdF9vcHMgeGVuX2luaXRfb3BzIF9faW5pdGNvbnN0ID0gewogCS5iYW5uZXIgPSB4ZW5fYmFubmVyLAogCkBAIC0xNjMsNiArMTcxLDUzIEBACiAJLmFyY2hfc2V0dXBfbm9tY2EgPSB4ZW5fYXJjaF9zZXR1cF9ub21jYSwKIAogCS5wb3N0X3NtcF9wcmVwYXJlX2Jvb3RfY3B1ID0geGVuX3Bvc3Rfc21wX3ByZXBhcmVfYm9vdF9jcHUsCisjaWZkZWYgQVNNX1NVUFBPUlRFRAorCS5wYXRjaF9idW5kbGUgPSB4ZW5fcGF0Y2hfYnVuZGxlLAorI2VuZGlmCisJLnBhdGNoX2JyYW5jaCA9IHhlbl9wYXRjaF9icmFuY2gsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwdl9mc3lzX2RhdGEKKyAqIGFkZHJlc3NlcyBmb3IgZnN5cworICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHhlbl9mc3lzY2FsbF90YWJsZVtOUl9zeXNjYWxsc107CitleHRlcm4gY2hhciB4ZW5fZnN5c19idWJibGVfZG93bltdOworc3RydWN0IHB2X2ZzeXNfZGF0YSB4ZW5fZnN5c19kYXRhIF9faW5pdGRhdGEgPSB7CisJLmZzeXNjYWxsX3RhYmxlID0gKHVuc2lnbmVkIGxvbmcgKil4ZW5fZnN5c2NhbGxfdGFibGUsCisJLmZzeXNfYnViYmxlX2Rvd24gPSAodm9pZCAqKXhlbl9mc3lzX2J1YmJsZV9kb3duLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHZfcGF0Y2hkYXRhCisgKiBwYXRjaGRhdGEgYWRkcmVzc2VzCisgKi8KKworI2RlZmluZSBERUNMQVJFKG5hbWUpCQkJCQkJCVwKKwlleHRlcm4gdW5zaWduZWQgbG9uZyBfX3hlbl9zdGFydF9nYXRlXyMjbmFtZSMjX3BhdGNobGlzdFtdOwlcCisJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX194ZW5fZW5kX2dhdGVfIyNuYW1lIyNfcGF0Y2hsaXN0W10KKworREVDTEFSRShmc3lzY2FsbCk7CitERUNMQVJFKGJybF9mc3lzX2J1YmJsZV9kb3duKTsKK0RFQ0xBUkUodnRvcCk7CitERUNMQVJFKG1ja2lubGV5X2U5KTsKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX194ZW5fc3RhcnRfZ2F0ZV9zZWN0aW9uW107CisKKyNkZWZpbmUgQVNTSUdOKG5hbWUpCQkJCQkJCVwKKwkuc3RhcnRfIyNuYW1lIyNfcGF0Y2hsaXN0ID0JCQkJCVwKKwkJKHVuc2lnbmVkIGxvbmcpX194ZW5fc3RhcnRfZ2F0ZV8jI25hbWUjI19wYXRjaGxpc3QsCVwKKwkuZW5kXyMjbmFtZSMjX3BhdGNobGlzdCA9CQkJCQlcCisJCSh1bnNpZ25lZCBsb25nKV9feGVuX2VuZF9nYXRlXyMjbmFtZSMjX3BhdGNobGlzdAorCitzdGF0aWMgc3RydWN0IHB2X3BhdGNoZGF0YSB4ZW5fcGF0Y2hkYXRhIF9faW5pdGRhdGEgPSB7CisJQVNTSUdOKGZzeXNjYWxsKSwKKwlBU1NJR04oYnJsX2ZzeXNfYnViYmxlX2Rvd24pLAorCUFTU0lHTih2dG9wKSwKKwlBU1NJR04obWNraW5sZXlfZTkpLAorCisJLmdhdGVfc2VjdGlvbiA9ICh2b2lkKilfX3hlbl9zdGFydF9nYXRlX3NlY3Rpb24sCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNzAsNiArMjI1LDc2IEBACiAgKiBpbnRyaW5zaWNzIGhvb2tzLgogICovCiAKKyNpZm5kZWYgQVNNX1NVUFBPUlRFRAorc3RhdGljIHZvaWQKK3hlbl9zZXRfaXRtX3dpdGhfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgdmFsKQoreworCS8qIGlhNjRfY3B1X2xvY2FsX3RpY2soKSBjYWxscyB0aGlzIHdpdGggaW50ZXJydXB0IGVuYWJsZWQuICovCisJLyogV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsgKi8KKwl4ZW5fc2V0X2l0bSh2YWwgLSBYRU5fTUFQUEVEUkVHUy0+aXRjX29mZnNldCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCit4ZW5fZ2V0X2l0bV93aXRoX29mZnNldCh2b2lkKQoreworCS8qIHVudXNlZCBhdCB0aGlzIG1vbWVudCAqLworCXByaW50ayhLRVJOX0RFQlVHICIlcyBpcyBjYWxsZWQuXG4iLCBfX2Z1bmNfXyk7CisKKwlXQVJOX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCXJldHVybiBpYTY0X25hdGl2ZV9nZXRyZWcoX0lBNjRfUkVHX0NSX0lUTSkgKworCQlYRU5fTUFQUEVEUkVHUy0+aXRjX29mZnNldDsKK30KKworLyogaWE2NF9zZXRfaXRjKCkgaXMgb25seSBjYWxsZWQgYnkKKyAqIGNwdV9pbml0KCkgd2l0aCBpYTY0X3NldF9pdGMoMCkgYW5kIGlhNjRfc3luY19pdGMoKS4KKyAqIFNvIFhFTl9NQVBQRURSRVNHLT5pdGNfb2Zmc2V0IGNhbCBiZSBjb25zaWRlcmVkIGFzIGFsbW9zdCBjb25zdGFudC4KKyAqLworc3RhdGljIHZvaWQKK3hlbl9zZXRfaXRjKHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgbWl0YzsKKworCVdBUk5fT04oIWlycXNfZGlzYWJsZWQoKSk7CisJbWl0YyA9IGlhNjRfbmF0aXZlX2dldHJlZyhfSUE2NF9SRUdfQVJfSVRDKTsKKwlYRU5fTUFQUEVEUkVHUy0+aXRjX29mZnNldCA9IHZhbCAtIG1pdGM7CisJWEVOX01BUFBFRFJFR1MtPml0Y19sYXN0ID0gdmFsOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZworeGVuX2dldF9pdGModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJlczsKKwl1bnNpZ25lZCBsb25nIGl0Y19vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBpdGNfbGFzdDsKKwl1bnNpZ25lZCBsb25nIHJldF9pdGNfbGFzdDsKKworCWl0Y19vZmZzZXQgPSBYRU5fTUFQUEVEUkVHUy0+aXRjX29mZnNldDsKKwlkbyB7CisJCWl0Y19sYXN0ID0gWEVOX01BUFBFRFJFR1MtPml0Y19sYXN0OworCQlyZXMgPSBpYTY0X25hdGl2ZV9nZXRyZWcoX0lBNjRfUkVHX0FSX0lUQyk7CisJCXJlcyArPSBpdGNfb2Zmc2V0OworCQlpZiAoaXRjX2xhc3QgPj0gcmVzKQorCQkJcmVzID0gaXRjX2xhc3QgKyAxOworCQlyZXRfaXRjX2xhc3QgPSBjbXB4Y2hnKCZYRU5fTUFQUEVEUkVHUy0+aXRjX2xhc3QsCisJCQkJICAgICAgIGl0Y19sYXN0LCByZXMpOworCX0gd2hpbGUgKHVubGlrZWx5KHJldF9pdGNfbGFzdCAhPSBpdGNfbGFzdCkpOworCXJldHVybiByZXM7CisKKyNpZiAwCisJLyogaWE2NF9pdGNfdWRlbGF5KCkgY2FsbHMgaWE2NF9nZXRfaXRjKCkgd2l0aCBpbnRlcnJ1cHQgZW5hYmxlZC4KKwkgICBTaG91bGQgaXQgYmUgcGFyYXZpcnR1YWxpemVkIGluc3RlYWQ/ICovCisJV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKKwlpdGNfb2Zmc2V0ID0gWEVOX01BUFBFRFJFR1MtPml0Y19vZmZzZXQ7CisJaXRjX2xhc3QgPSBYRU5fTUFQUEVEUkVHUy0+aXRjX2xhc3Q7CisJcmVzID0gaWE2NF9uYXRpdmVfZ2V0cmVnKF9JQTY0X1JFR19BUl9JVEMpOworCXJlcyArPSBpdGNfb2Zmc2V0OworCWlmIChpdGNfbGFzdCA+PSByZXMpCisJCXJlcyA9IGl0Y19sYXN0ICsgMTsKKwlYRU5fTUFQUEVEUkVHUy0+aXRjX2xhc3QgPSByZXM7CisJcmV0dXJuIHJlczsKKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCB4ZW5fc2V0cmVnKGludCByZWdudW0sIHVuc2lnbmVkIGxvbmcgdmFsKQogewogCXN3aXRjaCAocmVnbnVtKSB7CkBAIC0xODEsMTEgKzMwNiwxNCBAQAogCQl4ZW5fc2V0X2VmbGFnKHZhbCk7CiAJCWJyZWFrOwogI2VuZGlmCisJY2FzZSBfSUE2NF9SRUdfQVJfSVRDOgorCQl4ZW5fc2V0X2l0Yyh2YWwpOworCQlicmVhazsKIAljYXNlIF9JQTY0X1JFR19DUl9UUFI6CiAJCXhlbl9zZXRfdHByKHZhbCk7CiAJCWJyZWFrOwogCWNhc2UgX0lBNjRfUkVHX0NSX0lUTToKLQkJeGVuX3NldF9pdG0odmFsKTsKKwkJeGVuX3NldF9pdG1fd2l0aF9vZmZzZXQodmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBfSUE2NF9SRUdfQ1JfRU9JOgogCQl4ZW5fZW9pKHZhbCk7CkBAIC0yMDksNiArMzM3LDEyIEBACiAJCXJlcyA9IHhlbl9nZXRfZWZsYWcoKTsKIAkJYnJlYWs7CiAjZW5kaWYKKwljYXNlIF9JQTY0X1JFR19BUl9JVEM6CisJCXJlcyA9IHhlbl9nZXRfaXRjKCk7CisJCWJyZWFrOworCWNhc2UgX0lBNjRfUkVHX0NSX0lUTToKKwkJcmVzID0geGVuX2dldF9pdG1fd2l0aF9vZmZzZXQoKTsKKwkJYnJlYWs7CiAJY2FzZSBfSUE2NF9SRUdfQ1JfSVZSOgogCQlyZXMgPSB4ZW5fZ2V0X2l2cigpOwogCQlicmVhazsKQEAgLTI1OSw4ICszOTMsNDE3IEBACiAJZWxzZQogCQl4ZW5fcnNtX2koKTsKIH0KKyNlbHNlCisjZGVmaW5lIF9fREVGSU5FX0ZVTkMobmFtZSwgY29kZSkJCQkJCVwKKwlleHRlcm4gY29uc3QgY2hhciB4ZW5fICMjIG5hbWUgIyMgX2RpcmVjdF9zdGFydFtdOwkJXAorCWV4dGVybiBjb25zdCBjaGFyIHhlbl8gIyMgbmFtZSAjIyBfZGlyZWN0X2VuZFtdOwkJXAorCWFzbSAoIi5hbGlnbiAzMlxuIgkJCQkJCVwKKwkgICAgICIucHJvYyB4ZW5fIiAjbmFtZSAiXG4iCQkJCQlcCisJICAgICAieGVuXyIgI25hbWUgIjpcbiIJCQkJCQlcCisJICAgICAieGVuXyIgI25hbWUgIl9kaXJlY3Rfc3RhcnQ6XG4iCQkJCVwKKwkgICAgIGNvZGUJCQkJCQkJXAorCSAgICAgInhlbl8iICNuYW1lICJfZGlyZWN0X2VuZDpcbiIJCQkJXAorCSAgICAgImJyLmNvbmQuc3B0ay5tYW55IGI2XG4iCQkJCQlcCisJICAgICAiLmVuZHAgeGVuXyIgI25hbWUgIlxuIikKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9jcHVfb3BzIHhlbl9jcHVfb3BzIF9faW5pdGRhdGEgPSB7CisjZGVmaW5lIERFRklORV9WT0lEX0ZVTkMwKG5hbWUsIGNvZGUpCQlcCisJZXh0ZXJuIHZvaWQJCQkJXAorCXhlbl8gIyMgbmFtZSAodm9pZCk7CQkJXAorCV9fREVGSU5FX0ZVTkMobmFtZSwgY29kZSkKKworI2RlZmluZSBERUZJTkVfVk9JRF9GVU5DMShuYW1lLCBjb2RlKQkJXAorCWV4dGVybiB2b2lkCQkJCVwKKwl4ZW5fICMjIG5hbWUgKHVuc2lnbmVkIGxvbmcgYXJnKTsJXAorCV9fREVGSU5FX0ZVTkMobmFtZSwgY29kZSkKKworI2RlZmluZSBERUZJTkVfVk9JRF9GVU5DMV9WT0lEKG5hbWUsIGNvZGUpCVwKKwlleHRlcm4gdm9pZAkJCQlcCisJeGVuXyAjIyBuYW1lICh2b2lkICphcmcpOwkJXAorCV9fREVGSU5FX0ZVTkMobmFtZSwgY29kZSkKKworI2RlZmluZSBERUZJTkVfVk9JRF9GVU5DMihuYW1lLCBjb2RlKQkJXAorCWV4dGVybiB2b2lkCQkJCVwKKwl4ZW5fICMjIG5hbWUgKHVuc2lnbmVkIGxvbmcgYXJnMCwJXAorCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzEpOwlcCisJX19ERUZJTkVfRlVOQyhuYW1lLCBjb2RlKQorCisjZGVmaW5lIERFRklORV9GVU5DMChuYW1lLCBjb2RlKQkJXAorCWV4dGVybiB1bnNpZ25lZCBsb25nCQkJXAorCXhlbl8gIyMgbmFtZSAodm9pZCk7CQkJXAorCV9fREVGSU5FX0ZVTkMobmFtZSwgY29kZSkKKworI2RlZmluZSBERUZJTkVfRlVOQzEobmFtZSwgdHlwZSwgY29kZSkJCVwKKwlleHRlcm4gdW5zaWduZWQgbG9uZwkJCVwKKwl4ZW5fICMjIG5hbWUgKHR5cGUgYXJnKTsJCVwKKwlfX0RFRklORV9GVU5DKG5hbWUsIGNvZGUpCisKKyNkZWZpbmUgWEVOX1BTUl9JX0FERFJfQUREUiAgICAgKFhTSV9CQVNFICsgWFNJX1BTUl9JX0FERFJfT0ZTKQorCisvKgorICogc3RhdGljIHZvaWQgeGVuX3NldF9pdG1fd2l0aF9vZmZzZXQodW5zaWduZWQgbG9uZyB2YWwpCisgKiAgICAgICAgeGVuX3NldF9pdG0odmFsIC0gWEVOX01BUFBFRFJFR1MtPml0Y19vZmZzZXQpOworICovCisvKiAyIGJ1bmRsZXMgKi8KK0RFRklORV9WT0lEX0ZVTkMxKHNldF9pdG1fd2l0aF9vZmZzZXQsCisJCSAgIm1vdiByMiA9ICIgX19zdHJpbmdpZnkoWFNJX0JBU0UpICIgKyAiCisJCSAgX19zdHJpbmdpZnkoWFNJX0lUQ19PRkZTRVRfT0ZTKSAiXG4iCisJCSAgIjs7XG4iCisJCSAgImxkOCByMyA9IFtyMl1cbiIKKwkJICAiOztcbiIKKwkJICAic3ViIHI4ID0gcjgsIHIzXG4iCisJCSAgImJyZWFrICIgX19zdHJpbmdpZnkoSFlQRVJQUklWT1BfU0VUX0lUTSkgIlxuIik7CisKKy8qCisgKiBzdGF0aWMgdW5zaWduZWQgbG9uZyB4ZW5fZ2V0X2l0bV93aXRoX29mZnNldCh2b2lkKQorICogICAgcmV0dXJuIGlhNjRfbmF0aXZlX2dldHJlZyhfSUE2NF9SRUdfQ1JfSVRNKSArIFhFTl9NQVBQRURSRUdTLT5pdGNfb2Zmc2V0OworICovCisvKiAyIGJ1bmRsZXMgKi8KK0RFRklORV9GVU5DMChnZXRfaXRtX3dpdGhfb2Zmc2V0LAorCSAgICAgIm1vdiByMiA9ICIgX19zdHJpbmdpZnkoWFNJX0JBU0UpICIgKyAiCisJICAgICBfX3N0cmluZ2lmeShYU0lfSVRDX09GRlNFVF9PRlMpICJcbiIKKwkgICAgICI7O1xuIgorCSAgICAgImxkOCByMyA9IFtyMl1cbiIKKwkgICAgICJtb3YgcjggPSBjci5pdG1cbiIKKwkgICAgICI7O1xuIgorCSAgICAgImFkZCByOCA9IHI4LCByMlxuIik7CisKKy8qCisgKiBzdGF0aWMgdm9pZCB4ZW5fc2V0X2l0Yyh1bnNpZ25lZCBsb25nIHZhbCkKKyAqCXVuc2lnbmVkIGxvbmcgbWl0YzsKKyAqCisgKglXQVJOX09OKCFpcnFzX2Rpc2FibGVkKCkpOworICoJbWl0YyA9IGlhNjRfbmF0aXZlX2dldHJlZyhfSUE2NF9SRUdfQVJfSVRDKTsKKyAqCVhFTl9NQVBQRURSRUdTLT5pdGNfb2Zmc2V0ID0gdmFsIC0gbWl0YzsKKyAqCVhFTl9NQVBQRURSRUdTLT5pdGNfbGFzdCA9IHZhbDsKKyAqLworLyogMiBidW5kbGVzICovCitERUZJTkVfVk9JRF9GVU5DMShzZXRfaXRjLAorCQkgICJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KFhTSV9CQVNFKSAiICsgIgorCQkgIF9fc3RyaW5naWZ5KFhTSV9JVENfTEFTVF9PRlMpICJcbiIKKwkJICAibW92IHIzID0gYXIuaXRjXG4iCisJCSAgIjs7XG4iCisJCSAgInN1YiByMyA9IHI4LCByM1xuIgorCQkgICJzdDggW3IyXSA9IHI4LCAiCisJCSAgX19zdHJpbmdpZnkoWFNJX0lUQ19MQVNUX09GUykgIiAtICIKKwkJICBfX3N0cmluZ2lmeShYU0lfSVRDX09GRlNFVF9PRlMpICJcbiIKKwkJICAiOztcbiIKKwkJICAic3Q4IFtyMl0gPSByM1xuIik7CisKKy8qCisgKiBzdGF0aWMgdW5zaWduZWQgbG9uZyB4ZW5fZ2V0X2l0Yyh2b2lkKQorICoJdW5zaWduZWQgbG9uZyByZXM7CisgKgl1bnNpZ25lZCBsb25nIGl0Y19vZmZzZXQ7CisgKgl1bnNpZ25lZCBsb25nIGl0Y19sYXN0OworICoJdW5zaWduZWQgbG9uZyByZXRfaXRjX2xhc3Q7CisgKgorICoJaXRjX29mZnNldCA9IFhFTl9NQVBQRURSRUdTLT5pdGNfb2Zmc2V0OworICoJZG8geworICoJCWl0Y19sYXN0ID0gWEVOX01BUFBFRFJFR1MtPml0Y19sYXN0OworICoJCXJlcyA9IGlhNjRfbmF0aXZlX2dldHJlZyhfSUE2NF9SRUdfQVJfSVRDKTsKKyAqCQlyZXMgKz0gaXRjX29mZnNldDsKKyAqCQlpZiAoaXRjX2xhc3QgPj0gcmVzKQorICoJCQlyZXMgPSBpdGNfbGFzdCArIDE7CisgKgkJcmV0X2l0Y19sYXN0ID0gY21weGNoZygmWEVOX01BUFBFRFJFR1MtPml0Y19sYXN0LAorICoJCQkJICAgICAgIGl0Y19sYXN0LCByZXMpOworICoJfSB3aGlsZSAodW5saWtlbHkocmV0X2l0Y19sYXN0ICE9IGl0Y19sYXN0KSk7CisgKglyZXR1cm4gcmVzOworICovCisvKiA1IGJ1bmRsZXMgKi8KK0RFRklORV9GVU5DMChnZXRfaXRjLAorCSAgICAgIm1vdiByMiA9ICIgX19zdHJpbmdpZnkoWFNJX0JBU0UpICIgKyAiCisJICAgICBfX3N0cmluZ2lmeShYU0lfSVRDX09GRlNFVF9PRlMpICJcbiIKKwkgICAgICI7O1xuIgorCSAgICAgImxkOCByOSA9IFtyMl0sICIgX19zdHJpbmdpZnkoWFNJX0lUQ19MQVNUX09GUykgIiAtICIKKwkgICAgIF9fc3RyaW5naWZ5KFhTSV9JVENfT0ZGU0VUX09GUykgIlxuIgorCQkJCQkvKiByOSA9IGl0Y19vZmZzZXQgKi8KKwkJCQkJLyogcjIgPSBYU0lfSVRDX09GRlNFVCAqLworCSAgICAgIjg4ODpcbiIKKwkgICAgICJtb3YgcjggPSBhci5pdGNcbiIJLyogcmVzID0gYXIuaXRjICovCisJICAgICAiOztcbiIKKwkgICAgICJsZDggcjMgPSBbcjJdXG4iCQkvKiByMyA9IGl0Y19sYXN0ICovCisJICAgICAiYWRkIHI4ID0gcjgsIHI5XG4iCS8qIHJlcyA9IGFyLml0YyArIGl0Y19vZmZzZXQgKi8KKwkgICAgICI7O1xuIgorCSAgICAgImNtcC5ndHUgcDYsIHAwID0gcjMsIHI4XG4iCisJICAgICAiOztcbiIKKwkgICAgICIocDYpIGFkZCByOCA9IDEsIHIzXG4iCS8qIGlmIChpdGNfbGFzdCA+IHJlcykgaXRjX2xhc3QgKyAxICovCisJICAgICAiOztcbiIKKwkgICAgICJtb3YgYXIuY2N2ID0gcjhcbiIKKwkgICAgICI7O1xuIgorCSAgICAgImNtcHhjaGc4LmFjcSByMTAgPSBbcjJdLCByOCwgYXIuY2N2XG4iCisJICAgICAiOztcbiIKKwkgICAgICJjbXAubmUgcDYsIHAwID0gcjEwLCByM1xuIgorCSAgICAgIihwNikgaGludCBAcGF1c2VcbiIKKwkgICAgICIocDYpIGJyLmNvbmQuc3BudCA4ODhiXG4iKTsKKworREVGSU5FX1ZPSURfRlVOQzFfVk9JRChmYywKKwkJICAgICAgICJicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX0ZDKSAiXG4iKTsKKworLyoKKyAqIHBzcl9pX2FkZHJfYWRkciA9IFhFTl9QU1JfSV9BRERSX0FERFIKKyAqIG1hc2tlZF9hZGRyID0gKnBzcl9pX2FkZHJfYWRkcgorICogcGVuZGluZ19pbnRyX2FkZHIgPSBtYXNrZWRfYWRkciAtIDEKKyAqIGlmICh2YWwgJiBJQTY0X1BTUl9JKSB7CisgKiAgIG1hc2tlZCA9ICptYXNrZWRfYWRkcgorICogICAqbWFza2VkX2FkZHIgPSAwOnhlbl9zZXRfdmlydHVhbF9wc3JfaSgxKQorICogICBjb21waWxlciBiYXJyaWVyCisgKiAgIGlmIChtYXNrZWQpIHsKKyAqICAgICAgdWludDhfdCBwZW5kaW5nID0gKnBlbmRpbmdfaW50cl9hZGRyOworICogICAgICBpZiAocGVuZGluZykKKyAqICAgICAgICAgICAgICBYRU5fSFlQRVJfU1NNX0kKKyAqICAgfQorICogfSBlbHNlIHsKKyAqICAgKm1hc2tlZF9hZGRyID0gMTp4ZW5fc2V0X3ZpcnR1YWxfcHNyX2koMCkKKyAqIH0KKyAqLworLyogNiBidW5kbGVzICovCitERUZJTkVfVk9JRF9GVU5DMShpbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmUsCisJCSAgLyogcjggPSBpbnB1dCB2YWx1ZTogMCBvciBJQTY0X1BTUl9JCisJCSAgICogcDYgPSAgKGZsYWdzICYgSUE2NF9QU1JfSSkKKwkJICAgKiAgICA9IGlmIGNsYXVzZQorCQkgICAqIHA3ID0gIShmbGFncyAmIElBNjRfUFNSX0kpCisJCSAgICogICAgPSBlbHNlIGNsYXVzZQorCQkgICAqLworCQkgICJjbXAubmUgcDYsIHA3ID0gcjgsIHIwXG4iCisJCSAgIm1vdiByOSA9ICIgX19zdHJpbmdpZnkoWEVOX1BTUl9JX0FERFJfQUREUikgIlxuIgorCQkgICI7O1xuIgorCQkgIC8qIHI5ID0gWEVOX1BTUl9JX0FERFIgKi8KKwkJICAibGQ4IHI5ID0gW3I5XVxuIgorCQkgICI7O1xuIgorCisJCSAgLyogcjEwID0gbWFza2VkIHByZXZpb3VzIHZhbHVlICovCisJCSAgIihwNikJbGQxLmFjcSByMTAgPSBbcjldXG4iCisJCSAgIjs7XG4iCisKKwkJICAvKiBwOCA9ICFtYXNrZWQgaW50ZXJydXB0IG1hc2tlZCBwcmV2aW91c2x5PyAqLworCQkgICIocDYpCWNtcC5uZS51bmMgcDgsIHAwID0gcjEwLCByMFxuIgorCisJCSAgLyogcDcgPSBlbHNlIGNsYXVzZSAqLworCQkgICIocDcpCW1vdiByMTEgPSAxXG4iCisJCSAgIjs7XG4iCisJCSAgLyogbWFza2VkID0gMSAqLworCQkgICIocDcpCXN0MS5yZWwgW3I5XSA9IHIxMVxuIgorCisJCSAgLyogcDYgPSBpZiBjbGF1c2UgKi8KKwkJICAvKiBtYXNrZWQgPSAwCisJCSAgICogcjkgPSBtYXNrZWRfYWRkciAtIDEKKwkJICAgKiAgICA9IHBlbmRpbmdfaW50cl9hZGRyCisJCSAgICovCisJCSAgIihwOCkJc3QxLnJlbCBbcjldID0gcjAsIC0xXG4iCisJCSAgIjs7XG4iCisJCSAgLyogcjggPSBwZW5kaW5nX2ludHIgKi8KKwkJICAiKHA4KQlsZDEuYWNxIHIxMSA9IFtyOV1cbiIKKwkJICAiOztcbiIKKwkJICAvKiBwOSA9IGludGVycnVwdCBwZW5kaW5nPyAqLworCQkgICIocDgpCWNtcC5uZS51bmMgcDksIHAxMCA9IHIxMSwgcjBcbiIKKwkJICAiOztcbiIKKwkJICAiKHAxMCkgbWZcbiIKKwkJICAvKiBpc3N1ZSBoeXBlcmNhbGwgdG8gdHJpZ2dlciBpbnRlcnJ1cHQgKi8KKwkJICAiKHA5KQlicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX1NTTV9JKSAiXG4iKTsKKworREVGSU5FX1ZPSURfRlVOQzIocHRjZ2EsCisJCSAgImJyZWFrICIgX19zdHJpbmdpZnkoSFlQRVJQUklWT1BfUFRDX0dBKSAiXG4iKTsKK0RFRklORV9WT0lEX0ZVTkMyKHNldF9yciwKKwkJICAiYnJlYWsgIiBfX3N0cmluZ2lmeShIWVBFUlBSSVZPUF9TRVRfUlIpICJcbiIpOworCisvKgorICogdG1wID0gWEVOX01BUFBFRFJFR1MtPmludGVycnVwdF9tYXNrX2FkZHIgPSBYRU5fUFNSX0lfQUREUl9BRERSOworICogdG1wID0gKnRtcAorICogdG1wID0gKnRtcDsKKyAqIHBzcl9pID0gdG1wPyAwOiBJQTY0X1BTUl9JOworICovCisvKiA0IGJ1bmRsZXMgKi8KK0RFRklORV9GVU5DMChnZXRfcHNyX2ksCisJICAgICAibW92IHI5ID0gIiBfX3N0cmluZ2lmeShYRU5fUFNSX0lfQUREUl9BRERSKSAiXG4iCisJICAgICAiOztcbiIKKwkgICAgICJsZDggcjkgPSBbcjldXG4iCQkJLyogcjkgPSBYRU5fUFNSX0lfQUREUiAqLworCSAgICAgIm1vdiByOCA9IDBcbiIJCQkvKiBwc3JfaSA9IDAgKi8KKwkgICAgICI7O1xuIgorCSAgICAgImxkMS5hY3EgcjkgPSBbcjldXG4iCQkvKiByOSA9IFhFTl9QU1JfSSAqLworCSAgICAgIjs7XG4iCisJICAgICAiY21wLmVxLnVuYyBwNiwgcDAgPSByOSwgcjBcbiIJLyogcDYgPSAoWEVOX1BTUl9JICE9IDApICovCisJICAgICAiOztcbiIKKwkgICAgICIocDYpIG1vdiByOCA9ICIgX19zdHJpbmdpZnkoMSA8PCBJQTY0X1BTUl9JX0JJVCkgIlxuIik7CisKK0RFRklORV9GVU5DMSh0aGFzaCwgdW5zaWduZWQgbG9uZywKKwkgICAgICJicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX1RIQVNIKSAiXG4iKTsKK0RFRklORV9GVU5DMShnZXRfY3B1aWQsIGludCwKKwkgICAgICJicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX0dFVF9DUFVJRCkgIlxuIik7CitERUZJTkVfRlVOQzEoZ2V0X3BtZCwgaW50LAorCSAgICAgImJyZWFrICIgX19zdHJpbmdpZnkoSFlQRVJQUklWT1BfR0VUX1BNRCkgIlxuIik7CitERUZJTkVfRlVOQzEoZ2V0X3JyLCB1bnNpZ25lZCBsb25nLAorCSAgICAgImJyZWFrICIgX19zdHJpbmdpZnkoSFlQRVJQUklWT1BfR0VUX1JSKSAiXG4iKTsKKworLyoKKyAqIHZvaWQgeGVuX3ByaXZvcF9zc21faSh2b2lkKQorICoKKyAqIGludCBtYXNrZWQgPSAheGVuX2dldF92aXJ0dWFsX3Bzcl9pKCk7CisgKgkvLyBtYXNrZWQgPSAqKCpYRU5fTUFQUEVEUkVHUy0+aW50ZXJydXB0X21hc2tfYWRkcikKKyAqIHhlbl9zZXRfdmlydHVhbF9wc3JfaSgxKQorICoJLy8gKigqWEVOX01BUFBFRFJFR1MtPmludGVycnVwdF9tYXNrX2FkZHIpID0gMAorICogLy8gY29tcGlsZXIgYmFycmllcgorICogaWYgKG1hc2tlZCkgeworICoJdWludDhfdCogcGVuZF9pbnRfYWRkciA9CisgKgkJKHVpbnQ4X3QqKSgqWEVOX01BUFBFRFJFR1MtPmludGVycnVwdF9tYXNrX2FkZHIpIC0gMTsKKyAqCXVpbnQ4X3QgcGVuZGluZyA9ICpwZW5kX2ludF9hZGRyOworICoJaWYgKHBlbmRpbmcpCisgKgkJWEVOX0hZUEVSX1NTTV9JCisgKiB9CisgKi8KKy8qIDQgYnVuZGxlcyAqLworREVGSU5FX1ZPSURfRlVOQzAoc3NtX2ksCisJCSAgIm1vdiByOCA9ICIgX19zdHJpbmdpZnkoWEVOX1BTUl9JX0FERFJfQUREUikgIlxuIgorCQkgICI7O1xuIgorCQkgICJsZDggcjggPSBbcjhdXG4iCQkvKiByOCA9IFhFTl9QU1JfSV9BRERSICovCisJCSAgIjs7XG4iCisJCSAgImxkMS5hY3EgcjkgPSBbcjhdXG4iCQkvKiByOSA9IFhFTl9QU1JfSSAqLworCQkgICI7O1xuIgorCQkgICJzdDEucmVsIFtyOF0gPSByMCwgLTFcbiIJLyogcHNyX2kgPSAwLiBlbmFibGUgaW50ZXJydXB0CisJCQkJCQkgKiByOCA9IFhFTl9QU1JfSV9BRERSIC0gMQorCQkJCQkJICogICAgPSBwZW5kX2ludF9hZGRyCisJCQkJCQkgKi8KKwkJICAiY21wLmVxLnVuYyBwMCwgcDYgPSByOSwgcjBcbiIvKiBwNiA9ICFYRU5fUFNSX0kKKwkJCQkJCSAqIHByZXZpb3VzbHkgaW50ZXJydXB0CisJCQkJCQkgKiBtYXNrZWQ/CisJCQkJCQkgKi8KKwkJICAiOztcbiIKKwkJICAiKHA2KSBsZDEuYWNxIHI4ID0gW3I4XVxuIgkvKiByOCA9IHhlbl9wZW5kX2ludCAqLworCQkgICI7O1xuIgorCQkgICIocDYpIGNtcC5lcS51bmMgcDYsIHA3ID0gcjgsIHIwXG4iCS8qaW50ZXJydXB0IHBlbmRpbmc/Ki8KKwkJICAiOztcbiIKKwkJICAvKiBpc3N1ZSBoeXBlcmNhbGwgdG8gZ2V0IGludGVycnVwdCAqLworCQkgICIocDcpIGJyZWFrICIgX19zdHJpbmdpZnkoSFlQRVJQUklWT1BfU1NNX0kpICJcbiIKKwkJICAiOztcbiIpOworCisvKgorICogcHNyX2lfYWRkcl9hZGRyID0gWEVOX01BUFBFRFJFR1MtPmludGVycnVwdF9tYXNrX2FkZHIKKyAqCQkgICA9IFhFTl9QU1JfSV9BRERSX0FERFI7CisgKiBwc3JfaV9hZGRyID0gKnBzcl9pX2FkZHJfYWRkcjsKKyAqICpwc3JfaV9hZGRyID0gMTsKKyAqLworLyogMiBidW5kbGVzICovCitERUZJTkVfVk9JRF9GVU5DMChyc21faSwKKwkJICAibW92IHI4ID0gIiBfX3N0cmluZ2lmeShYRU5fUFNSX0lfQUREUl9BRERSKSAiXG4iCisJCQkJCQkvKiByOCA9IFhFTl9QU1JfSV9BRERSICovCisJCSAgIm1vdiByOSA9IDFcbiIKKwkJICAiOztcbiIKKwkJICAibGQ4IHI4ID0gW3I4XVxuIgkJLyogcjggPSBYRU5fUFNSX0kgKi8KKwkJICAiOztcbiIKKwkJICAic3QxLnJlbCBbcjhdID0gcjlcbiIpOwkvKiBYRU5fUFNSX0kgPSAxICovCisKK2V4dGVybiB2b2lkCit4ZW5fc2V0X3JyMF90b19ycjQodW5zaWduZWQgbG9uZyB2YWwwLCB1bnNpZ25lZCBsb25nIHZhbDEsCisJCSAgIHVuc2lnbmVkIGxvbmcgdmFsMiwgdW5zaWduZWQgbG9uZyB2YWwzLAorCQkgICB1bnNpZ25lZCBsb25nIHZhbDQpOworX19ERUZJTkVfRlVOQyhzZXRfcnIwX3RvX3JyNCwKKwkgICAgICAiYnJlYWsgIiBfX3N0cmluZ2lmeShIWVBFUlBSSVZPUF9TRVRfUlIwX1RPX1JSNCkgIlxuIik7CisKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgeGVuX2dldHJlZyhpbnQgcmVnbnVtKTsKKyNkZWZpbmUgX19ERUZJTkVfR0VUX1JFRyhpZCwgcHJpdm9wKQkJCQkJXAorCSJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KF9JQTY0X1JFR18gIyMgaWQpICJcbiIJCQlcCisJIjs7XG4iCQkJCQkJCQlcCisJImNtcC5lcSBwNiwgcDAgPSByMiwgcjhcbiIJCQkJCVwKKwkiOztcbiIJCQkJCQkJCVwKKwkiKHA2KSBicmVhayAiIF9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX0dFVF8gIyMgcHJpdm9wKSAiXG4iCVwKKwkiKHA2KSBici5jb25kLnNwdGsubWFueSBiNlxuIgkJCQkJXAorCSI7O1xuIgorCitfX0RFRklORV9GVU5DKGdldHJlZywKKwkgICAgICBfX0RFRklORV9HRVRfUkVHKFBTUiwgUFNSKQorI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKKwkgICAgICBfX0RFRklORV9HRVRfUkVHKEFSX0VGTEFHLCBFRkxBRykKKyNlbmRpZgorCisJICAgICAgLyogZ2V0X2l0YyAqLworCSAgICAgICJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KF9JQTY0X1JFR19BUl9JVEMpICJcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAiY21wLmVxIHA2LCBwMCA9IHIyLCByOFxuIgorCSAgICAgICI7O1xuIgorCSAgICAgICIocDYpIGJyLmNvbmQuc3BudCB4ZW5fZ2V0X2l0Y1xuIgorCSAgICAgICI7O1xuIgorCisJICAgICAgLyogZ2V0IGl0bSAqLworCSAgICAgICJtb3YgcjIgPSAiIF9fc3RyaW5naWZ5KF9JQTY0X1JFR19DUl9JVE0pICJcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAiY21wLmVxIHA2LCBwMCA9IHIyLCByOFxuIgorCSAgICAgICI7O1xuIgorCSAgICAgICIocDYpIGJyLmNvbmQuc3BudCB4ZW5fZ2V0X2l0bV93aXRoX29mZnNldFxuIgorCSAgICAgICI7O1xuIgorCisJICAgICAgX19ERUZJTkVfR0VUX1JFRyhDUl9JVlIsIElWUikKKwkgICAgICBfX0RFRklORV9HRVRfUkVHKENSX1RQUiwgVFBSKQorCisJICAgICAgLyogZmFsbCBiYWNrICovCisJICAgICAgIm1vdmwgcjIgPSBpYTY0X25hdGl2ZV9nZXRyZWdfZnVuY1xuIgorCSAgICAgICI7O1xuIgorCSAgICAgICJtb3YgYjcgPSByMlxuIgorCSAgICAgICI7O1xuIgorCSAgICAgICJici5jb25kLnNwdGsubWFueSBiN1xuIik7CisKK2V4dGVybiB2b2lkIHhlbl9zZXRyZWcoaW50IHJlZ251bSwgdW5zaWduZWQgbG9uZyB2YWwpOworI2RlZmluZSBfX0RFRklORV9TRVRfUkVHKGlkLCBwcml2b3ApCQkJCQlcCisJIm1vdiByMiA9ICIgX19zdHJpbmdpZnkoX0lBNjRfUkVHXyAjIyBpZCkgIlxuIgkJCVwKKwkiOztcbiIJCQkJCQkJCVwKKwkiY21wLmVxIHA2LCBwMCA9IHIyLCByOVxuIgkJCQkJXAorCSI7O1xuIgkJCQkJCQkJXAorCSIocDYpIGJyZWFrICIgX19zdHJpbmdpZnkoSFlQRVJQUklWT1BfICMjIHByaXZvcCkgIlxuIgkJXAorCSIocDYpIGJyLmNvbmQuc3B0ay5tYW55IGI2XG4iCQkJCQlcCisJIjs7XG4iCisKK19fREVGSU5FX0ZVTkMoc2V0cmVnLAorCSAgICAgIC8qIGtyMCAuLiBrciA3Ki8KKwkgICAgICAvKgorCSAgICAgICAqIGlmIChfSUE2NF9SRUdfQVJfS1IwIDw9IHJlZ251bSAmJgorCSAgICAgICAqICAgICByZWdudW0gPD0gX0lBNjRfUkVHX0FSX0tSNykgeworCSAgICAgICAqICAgICByZWdpc3RlciBfX2luZGV4IGFzbSAoInI4IikgPSByZWdudW0gLSBfSUE2NF9SRUdfQVJfS1IwCisJICAgICAgICogICAgIHJlZ2lzdGVyIF9fdmFsIGFzbSAoInI5IikgPSB2YWwKKwkgICAgICAgKiAgICAiYnJlYWsgSFlQRVJQUklWT1BfU0VUX0tSIgorCSAgICAgICAqIH0KKwkgICAgICAgKi8KKwkgICAgICAibW92IHIxNyA9IHI5XG4iCisJICAgICAgIm1vdiByMiA9ICIgX19zdHJpbmdpZnkoX0lBNjRfUkVHX0FSX0tSMCkgIlxuIgorCSAgICAgICI7O1xuIgorCSAgICAgICJjbXAuZ2UgcDYsIHAwID0gcjksIHIyXG4iCisJICAgICAgInN1YiByMTcgPSByMTcsIHIyXG4iCisJICAgICAgIjs7XG4iCisJICAgICAgIihwNikgY21wLmdlLnVuYyBwNywgcDAgPSAiCisJICAgICAgX19zdHJpbmdpZnkoX0lBNjRfUkVHX0FSX0tSNykgIiAtICIgX19zdHJpbmdpZnkoX0lBNjRfUkVHX0FSX0tSMCkKKwkgICAgICAiLCByMTdcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAiKHA3KSBtb3YgcjkgPSByOFxuIgorCSAgICAgICI7O1xuIgorCSAgICAgICIocDcpIG1vdiByOCA9IHIxN1xuIgorCSAgICAgICIocDcpIGJyZWFrICIgX19zdHJpbmdpZnkoSFlQRVJQUklWT1BfU0VUX0tSKSAiXG4iCisKKwkgICAgICAvKiBzZXQgaXRtICovCisJICAgICAgIm1vdiByMiA9ICIgX19zdHJpbmdpZnkoX0lBNjRfUkVHX0NSX0lUTSkgIlxuIgorCSAgICAgICI7O1xuIgorCSAgICAgICJjbXAuZXEgcDYsIHAwID0gcjIsIHI4XG4iCisJICAgICAgIjs7XG4iCisJICAgICAgIihwNikgYnIuY29uZC5zcG50IHhlbl9zZXRfaXRtX3dpdGhfb2Zmc2V0XG4iCisKKwkgICAgICAvKiBzZXQgaXRjICovCisJICAgICAgIm1vdiByMiA9ICIgX19zdHJpbmdpZnkoX0lBNjRfUkVHX0FSX0lUQykgIlxuIgorCSAgICAgICI7O1xuIgorCSAgICAgICJjbXAuZXEgcDYsIHAwID0gcjIsIHI4XG4iCisJICAgICAgIjs7XG4iCisJICAgICAgIihwNikgYnIuY29uZC5zcG50IHhlbl9zZXRfaXRjXG4iCisKKyNpZmRlZiBDT05GSUdfSUEzMl9TVVBQT1JUCisJICAgICAgX19ERUZJTkVfU0VUX1JFRyhBUl9FRkxBRywgU0VUX0VGTEFHKQorI2VuZGlmCisJICAgICAgX19ERUZJTkVfU0VUX1JFRyhDUl9UUFIsIFNFVF9UUFIpCisJICAgICAgX19ERUZJTkVfU0VUX1JFRyhDUl9FT0ksIEVPSSkKKworCSAgICAgIC8qIGZhbGwgYmFjayAqLworCSAgICAgICJtb3ZsIHIyID0gaWE2NF9uYXRpdmVfc2V0cmVnX2Z1bmNcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAibW92IGI3ID0gcjJcbiIKKwkgICAgICAiOztcbiIKKwkgICAgICAiYnIuY29uZC5zcHRrLm1hbnkgYjdcbiIpOworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfY3B1X29wcyB4ZW5fY3B1X29wcyBfX2luaXRjb25zdCA9IHsKIAkuZmMJCT0geGVuX2ZjLAogCS50aGFzaAkJPSB4ZW5fdGhhc2gsCiAJLmdldF9jcHVpZAk9IHhlbl9nZXRfY3B1aWQsCkBAIC0zMzcsNyArODgwLDcgQEAKIAlIWVBFUlZJU09SX3BoeXNkZXZfb3AoUEhZU0RFVk9QX2FwaWNfd3JpdGUsICZhcGljX29wKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9pb3NhcGljX29wcyB4ZW5faW9zYXBpY19vcHMgX19pbml0Y29uc3QgPSB7CitzdGF0aWMgc3RydWN0IHB2X2lvc2FwaWNfb3BzIHhlbl9pb3NhcGljX29wcyBfX2luaXRkYXRhID0gewogCS5wY2F0X2NvbXBhdF9pbml0ID0geGVuX3BjYXRfY29tcGF0X2luaXQsCiAJLl9fZ2V0X2lycV9jaGlwID0geGVuX2lvc2FwaWNfZ2V0X2lycV9jaGlwLAogCkBAIC0zNTUsNiArODk4LDggQEAKIAl4ZW5faW5mb19pbml0KCk7CiAJcHZfaW5mbyA9IHhlbl9pbmZvOwogCXB2X2luaXRfb3BzID0geGVuX2luaXRfb3BzOworCXB2X2ZzeXNfZGF0YSA9IHhlbl9mc3lzX2RhdGE7CisJcHZfcGF0Y2hkYXRhID0geGVuX3BhdGNoZGF0YTsKIAlwdl9jcHVfb3BzID0geGVuX2NwdV9vcHM7CiAJcHZfaW9zYXBpY19vcHMgPSB4ZW5faW9zYXBpY19vcHM7CiAJcHZfaXJxX29wcyA9IHhlbl9pcnFfb3BzOwpAQCAtMzYyLDMgKzkwNywyNTIgQEAKIAogCXBhcmF2aXJ0X2NwdV9hc21faW5pdCgmeGVuX2NwdV9hc21fc3dpdGNoKTsKIH0KKworI2lmZGVmIEFTTV9TVVBQT1JURUQKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGJpbmFyeSBwYWN0aGluZworICogcHZfaW5pdF9vcHMucGF0Y2hfYnVuZGxlCisgKi8KKworI2RlZmluZSBERUZJTkVfRlVOQ19HRVRSRUcobmFtZSwgcHJpdm9wKQkJCQlcCisJREVGSU5FX0ZVTkMwKGdldF8gIyMgbmFtZSwJCQkJCVwKKwkJICAgICAiYnJlYWsgIl9fc3RyaW5naWZ5KEhZUEVSUFJJVk9QX0dFVF8gIyMgcHJpdm9wKSAiXG4iKQorCitERUZJTkVfRlVOQ19HRVRSRUcocHNyLCBQU1IpOworREVGSU5FX0ZVTkNfR0VUUkVHKGVmbGFnLCBFRkxBRyk7CitERUZJTkVfRlVOQ19HRVRSRUcoaXZyLCBJVlIpOworREVGSU5FX0ZVTkNfR0VUUkVHKHRwciwgVFBSKTsKKworI2RlZmluZSBERUZJTkVfRlVOQ19TRVRfS1IobikJCQkJCQlcCisJREVGSU5FX1ZPSURfRlVOQzAoc2V0X2tyICMjIG4sCQkJCQlcCisJCQkgICI7O1xuIgkJCQkJXAorCQkJICAibW92IHI5ID0gcjhcbiIJCQkJXAorCQkJICAibW92IHI4ID0gIiAjbiAiXG4iCQkJCVwKKwkJCSAgImJyZWFrICIgX19zdHJpbmdpZnkoSFlQRVJQUklWT1BfU0VUX0tSKSAiXG4iKQorCitERUZJTkVfRlVOQ19TRVRfS1IoMCk7CitERUZJTkVfRlVOQ19TRVRfS1IoMSk7CitERUZJTkVfRlVOQ19TRVRfS1IoMik7CitERUZJTkVfRlVOQ19TRVRfS1IoMyk7CitERUZJTkVfRlVOQ19TRVRfS1IoNCk7CitERUZJTkVfRlVOQ19TRVRfS1IoNSk7CitERUZJTkVfRlVOQ19TRVRfS1IoNik7CitERUZJTkVfRlVOQ19TRVRfS1IoNyk7CisKKyNkZWZpbmUgX19ERUZJTkVfRlVOQ19TRVRSRUcobmFtZSwgcHJpdm9wKQkJCQlcCisJREVGSU5FX1ZPSURfRlVOQzAobmFtZSwJCQkJCQlcCisJCQkgICJicmVhayAiX19zdHJpbmdpZnkoSFlQRVJQUklWT1BfICMjIHByaXZvcCkgIlxuIikKKworI2RlZmluZSBERUZJTkVfRlVOQ19TRVRSRUcobmFtZSwgcHJpdm9wKQkJCVwKKwlfX0RFRklORV9GVU5DX1NFVFJFRyhzZXRfICMjIG5hbWUsIFNFVF8gIyMgcHJpdm9wKQorCitERUZJTkVfRlVOQ19TRVRSRUcoZWZsYWcsIEVGTEFHKTsKK0RFRklORV9GVU5DX1NFVFJFRyh0cHIsIFRQUik7CitfX0RFRklORV9GVU5DX1NFVFJFRyhlb2ksIEVPSSk7CisKK2V4dGVybiBjb25zdCBjaGFyIHhlbl9jaGVja19ldmVudHNbXTsKK2V4dGVybiBjb25zdCBjaGFyIF9feGVuX2ludHJpbl9sb2NhbF9pcnFfcmVzdG9yZV9kaXJlY3Rfc3RhcnRbXTsKK2V4dGVybiBjb25zdCBjaGFyIF9feGVuX2ludHJpbl9sb2NhbF9pcnFfcmVzdG9yZV9kaXJlY3RfZW5kW107CitleHRlcm4gY29uc3QgdW5zaWduZWQgbG9uZyBfX3hlbl9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmVfZGlyZWN0X3JlbG9jOworCithc20gKAorCSIuYWxpZ24gMzJcbiIKKwkiLnByb2MgeGVuX2NoZWNrX2V2ZW50c1xuIgorCSJ4ZW5fY2hlY2tfZXZlbnRzOlxuIgorCS8qIG1hc2tlZCA9IDAKKwkgKiByOSA9IG1hc2tlZF9hZGRyIC0gMQorCSAqICAgID0gcGVuZGluZ19pbnRyX2FkZHIKKwkgKi8KKwkic3QxLnJlbCBbcjldID0gcjAsIC0xXG4iCisJIjs7XG4iCisJLyogcjggPSBwZW5kaW5nX2ludHIgKi8KKwkibGQxLmFjcSByMTEgPSBbcjldXG4iCisJIjs7XG4iCisJLyogcDkgPSBpbnRlcnJ1cHQgcGVuZGluZz8gKi8KKwkiY21wLm5lIHA5LCBwMTAgPSByMTEsIHIwXG4iCisJIjs7XG4iCisJIihwMTApIG1mXG4iCisJLyogaXNzdWUgaHlwZXJjYWxsIHRvIHRyaWdnZXIgaW50ZXJydXB0ICovCisJIihwOSkgYnJlYWsgIiBfX3N0cmluZ2lmeShIWVBFUlBSSVZPUF9TU01fSSkgIlxuIgorCSJici5jb25kLnNwdGsubWFueSBiNlxuIgorCSIuZW5kcCB4ZW5fY2hlY2tfZXZlbnRzXG4iCisJIlxuIgorCSIuYWxpZ24gMzJcbiIKKwkiLnByb2MgX194ZW5faW50cmluX2xvY2FsX2lycV9yZXN0b3JlX2RpcmVjdFxuIgorCSJfX3hlbl9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmVfZGlyZWN0OlxuIgorCSJfX3hlbl9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmVfZGlyZWN0X3N0YXJ0OlxuIgorCSIxOlxuIgorCSJ7XG4iCisJImNtcC5uZSBwNiwgcDcgPSByOCwgcjBcbiIKKwkibW92IHIxNyA9IGlwXG4iIC8qIGdldCBpcCB0byBjYWxjIHJldHVybiBhZGRyZXNzICovCisJIm1vdiByOSA9ICJfX3N0cmluZ2lmeShYRU5fUFNSX0lfQUREUl9BRERSKSAiXG4iCisJIjs7XG4iCisJIn1cbiIKKwkie1xuIgorCS8qIHI5ID0gWEVOX1BTUl9JX0FERFIgKi8KKwkibGQ4IHI5ID0gW3I5XVxuIgorCSI7O1xuIgorCS8qIHIxMCA9IG1hc2tlZCBwcmV2aW91cyB2YWx1ZSAqLworCSIocDYpIGxkMS5hY3EgcjEwID0gW3I5XVxuIgorCSJhZGRzIHIxNyA9ICAxZiAtIDFiLCByMTdcbiIgLyogY2FsY3VsYXRlIHJldHVybiBhZGRyZXNzICovCisJIjs7XG4iCisJIn1cbiIKKwkie1xuIgorCS8qIHA4ID0gIW1hc2tlZCBpbnRlcnJ1cHQgbWFza2VkIHByZXZpb3VzbHk/ICovCisJIihwNikgY21wLm5lLnVuYyBwOCwgcDAgPSByMTAsIHIwXG4iCisJIlxuIgorCS8qIHA3ID0gZWxzZSBjbGF1c2UgKi8KKwkiKHA3KSBtb3YgcjExID0gMVxuIgorCSI7O1xuIgorCSIocDgpIG1vdiBiNiA9IHIxN1xuIiAvKiBzZXQgcmV0dXJuIGFkZHJlc3MgKi8KKwkifVxuIgorCSJ7XG4iCisJLyogbWFza2VkID0gMSAqLworCSIocDcpIHN0MS5yZWwgW3I5XSA9IHIxMVxuIgorCSJcbiIKKwkiWzk5Ol1cbiIKKwkiKHA4KSBicmwuY29uZC5kcHRrLmZldyB4ZW5fY2hlY2tfZXZlbnRzXG4iCisJIn1cbiIKKwkvKiBwdiBjYWxsaW5nIHN0dWIgaXMgNSBidW5kbGVzLiBmaWxsIG5vcCB0byBhZGp1c3QgcmV0dXJuIGFkZHJlc3MgKi8KKwkie1xuIgorCSJub3AgMFxuIgorCSJub3AgMFxuIgorCSJub3AgMFxuIgorCSJ9XG4iCisJIjE6XG4iCisJIl9feGVuX2ludHJpbl9sb2NhbF9pcnFfcmVzdG9yZV9kaXJlY3RfZW5kOlxuIgorCSIuZW5kcCBfX3hlbl9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmVfZGlyZWN0XG4iCisJIlxuIgorCSIuYWxpZ24gOFxuIgorCSJfX3hlbl9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmVfZGlyZWN0X3JlbG9jOlxuIgorCSJkYXRhOCA5OWJcbiIKKyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGFyYXZpcnRfcGF0Y2hfYnVuZGxlX2VsZW0geGVuX3BhdGNoX2J1bmRsZV9lbGVtc1tdCitfX2luaXRkYXRhX29yX21vZHVsZSA9Cit7CisjZGVmaW5lIFhFTl9QQVRDSF9CVU5ETEVfRUxFTShuYW1lLCB0eXBlKQkJXAorCXsJCQkJCQlcCisJCSh2b2lkKil4ZW5fICMjIG5hbWUgIyMgX2RpcmVjdF9zdGFydCwJXAorCQkodm9pZCopeGVuXyAjIyBuYW1lICMjIF9kaXJlY3RfZW5kLAlcCisJCVBBUkFWSVJUX1BBVENIX1RZUEVfICMjIHR5cGUsCQlcCisJfQorCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNKGZjLCBGQyksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNKHRoYXNoLCBUSEFTSCksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNKGdldF9jcHVpZCwgR0VUX0NQVUlEKSwKKwlYRU5fUEFUQ0hfQlVORExFX0VMRU0oZ2V0X3BtZCwgR0VUX1BNRCksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNKHB0Y2dhLCBQVENHQSksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNKGdldF9yciwgR0VUX1JSKSwKKwlYRU5fUEFUQ0hfQlVORExFX0VMRU0oc2V0X3JyLCBTRVRfUlIpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTShzZXRfcnIwX3RvX3JyNCwgU0VUX1JSMF9UT19SUjQpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTShzc21faSwgU1NNX0kpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTShyc21faSwgUlNNX0kpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTShnZXRfcHNyX2ksIEdFVF9QU1JfSSksCisJeworCQkodm9pZCopX194ZW5faW50cmluX2xvY2FsX2lycV9yZXN0b3JlX2RpcmVjdF9zdGFydCwKKwkJKHZvaWQqKV9feGVuX2ludHJpbl9sb2NhbF9pcnFfcmVzdG9yZV9kaXJlY3RfZW5kLAorCQlQQVJBVklSVF9QQVRDSF9UWVBFX0lOVFJJTl9MT0NBTF9JUlFfUkVTVE9SRSwKKwl9LAorCisjZGVmaW5lIFhFTl9QQVRDSF9CVU5ETEVfRUxFTV9HRVRSRUcobmFtZSwgcmVnKQkJCVwKKwl7CQkJCQkJCVwKKwkJeGVuX2dldF8gIyMgbmFtZSAjIyBfZGlyZWN0X3N0YXJ0LAkJXAorCQl4ZW5fZ2V0XyAjIyBuYW1lICMjIF9kaXJlY3RfZW5kLAkJXAorCQlQQVJBVklSVF9QQVRDSF9UWVBFX0dFVFJFRyArIF9JQTY0X1JFR18gIyMgcmVnLCBcCisJfQorCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX0dFVFJFRyhwc3IsIFBTUiksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX0dFVFJFRyhlZmxhZywgQVJfRUZMQUcpLAorCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX0dFVFJFRyhpdnIsIENSX0lWUiksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX0dFVFJFRyh0cHIsIENSX1RQUiksCisKKwlYRU5fUEFUQ0hfQlVORExFX0VMRU1fR0VUUkVHKGl0YywgQVJfSVRDKSwKKwlYRU5fUEFUQ0hfQlVORExFX0VMRU1fR0VUUkVHKGl0bV93aXRoX29mZnNldCwgQ1JfSVRNKSwKKworCisjZGVmaW5lIF9fWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhuYW1lLCByZWcpCQlcCisJewkJCQkJCQlcCisJCXhlbl8gIyMgbmFtZSAjIyBfZGlyZWN0X3N0YXJ0LAkJCVwKKwkJeGVuXyAjIyBuYW1lICMjIF9kaXJlY3RfZW5kLAkJCVwKKwkJUEFSQVZJUlRfUEFUQ0hfVFlQRV9TRVRSRUcgKyBfSUE2NF9SRUdfICMjIHJlZywgXAorCX0KKworI2RlZmluZSBYRU5fUEFUQ0hfQlVORExFX0VMRU1fU0VUUkVHKG5hbWUsIHJlZykJCQlcCisJX19YRU5fUEFUQ0hfQlVORExFX0VMRU1fU0VUUkVHKHNldF8gIyMgbmFtZSwgcmVnKQorCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhrcjAsIEFSX0tSMCksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhrcjEsIEFSX0tSMSksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhrcjIsIEFSX0tSMiksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhrcjMsIEFSX0tSMyksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhrcjQsIEFSX0tSNCksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhrcjUsIEFSX0tSNSksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhrcjYsIEFSX0tSNiksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyhrcjcsIEFSX0tSNyksCisKKwlYRU5fUEFUQ0hfQlVORExFX0VMRU1fU0VUUkVHKGVmbGFnLCBBUl9FRkxBRyksCisJWEVOX1BBVENIX0JVTkRMRV9FTEVNX1NFVFJFRyh0cHIsIENSX1RQUiksCisJX19YRU5fUEFUQ0hfQlVORExFX0VMRU1fU0VUUkVHKGVvaSwgQ1JfRU9JKSwKKworCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcoaXRjLCBBUl9JVEMpLAorCVhFTl9QQVRDSF9CVU5ETEVfRUxFTV9TRVRSRUcoaXRtX3dpdGhfb2Zmc2V0LCBDUl9JVE0pLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0X29yX21vZHVsZQoreGVuX3BhdGNoX2J1bmRsZSh2b2lkICpzYnVuZGxlLCB2b2lkICplYnVuZGxlLCB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyBuZWxlbXMgPSBzaXplb2YoeGVuX3BhdGNoX2J1bmRsZV9lbGVtcykgLworCQlzaXplb2YoeGVuX3BhdGNoX2J1bmRsZV9lbGVtc1swXSk7CisJdW5zaWduZWQgbG9uZyB1c2VkOworCWNvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9idW5kbGVfZWxlbSAqZm91bmQ7CisKKwl1c2VkID0gX19wYXJhdmlydF9wYXRjaF9hcHBseV9idW5kbGUoc2J1bmRsZSwgZWJ1bmRsZSwgdHlwZSwKKwkJCQkJICAgICB4ZW5fcGF0Y2hfYnVuZGxlX2VsZW1zLCBuZWxlbXMsCisJCQkJCSAgICAgJmZvdW5kKTsKKworCWlmIChmb3VuZCA9PSBOVUxMKQorCQkvKiBmYWxsYmFjayAqLworCQlyZXR1cm4gaWE2NF9uYXRpdmVfcGF0Y2hfYnVuZGxlKHNidW5kbGUsIGVidW5kbGUsIHR5cGUpOworCWlmICh1c2VkID09IDApCisJCXJldHVybiB1c2VkOworCisJLyogcmVsb2NhdGlvbiAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUEFSQVZJUlRfUEFUQ0hfVFlQRV9JTlRSSU5fTE9DQUxfSVJRX1JFU1RPUkU6IHsKKwkJdW5zaWduZWQgbG9uZyByZWxvYyA9CisJCQlfX3hlbl9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmVfZGlyZWN0X3JlbG9jOworCQl1bnNpZ25lZCBsb25nIHJlbG9jX29mZnNldCA9IHJlbG9jIC0gKHVuc2lnbmVkIGxvbmcpCisJCQlfX3hlbl9pbnRyaW5fbG9jYWxfaXJxX3Jlc3RvcmVfZGlyZWN0X3N0YXJ0OworCQl1bnNpZ25lZCBsb25nIHRhZyA9ICh1bnNpZ25lZCBsb25nKXNidW5kbGUgKyByZWxvY19vZmZzZXQ7CisJCXBhcmF2aXJ0X3BhdGNoX3JlbG9jX2JybCh0YWcsIHhlbl9jaGVja19ldmVudHMpOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJLyogbm90aGluZyAqLworCQlicmVhazsKKwl9CisJcmV0dXJuIHVzZWQ7Cit9CisjZW5kaWYgLyogQVNNX1NVUFBPVEVEICovCisKK2NvbnN0IHN0cnVjdCBwYXJhdmlydF9wYXRjaF9icmFuY2hfdGFyZ2V0IHhlbl9icmFuY2hfdGFyZ2V0W10KK19faW5pdGNvbnN0ID0geworI2RlZmluZSBQQVJBVklSVF9CUl9UQVJHRVQobmFtZSwgdHlwZSkJCQlcCisJewkJCQkJCVwKKwkJJnhlbl8gIyMgbmFtZSwJCQkJXAorCQlQQVJBVklSVF9QQVRDSF9UWVBFX0JSXyAjIyB0eXBlLAlcCisJfQorCVBBUkFWSVJUX0JSX1RBUkdFVChzd2l0Y2hfdG8sIFNXSVRDSF9UTyksCisJUEFSQVZJUlRfQlJfVEFSR0VUKGxlYXZlX3N5c2NhbGwsIExFQVZFX1NZU0NBTEwpLAorCVBBUkFWSVJUX0JSX1RBUkdFVCh3b3JrX3Byb2Nlc3NlZF9zeXNjYWxsLCBXT1JLX1BST0NFU1NFRF9TWVNDQUxMKSwKKwlQQVJBVklSVF9CUl9UQVJHRVQobGVhdmVfa2VybmVsLCBMRUFWRV9LRVJORUwpLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0Cit4ZW5fcGF0Y2hfYnJhbmNoKHVuc2lnbmVkIGxvbmcgdGFnLCB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisJY29uc3QgdW5zaWduZWQgbG9uZyBuZWxlbSA9CisJCXNpemVvZih4ZW5fYnJhbmNoX3RhcmdldCkgLyBzaXplb2YoeGVuX2JyYW5jaF90YXJnZXRbMF0pOworCV9fcGFyYXZpcnRfcGF0Y2hfYXBwbHlfYnJhbmNoKHRhZywgdHlwZSwgeGVuX2JyYW5jaF90YXJnZXQsIG5lbGVtKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNzEwM2Q5MS4uM2U4NzZmMCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogCXJldHVybiAwOyAvKiBUYXNrIGRpZG4ndCB1c2UgdGhlIGZwdSBhdCBhbGwuICovCiB9CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3B1LAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3B1LAogCXVuc2lnbmVkIGxvbmcgdW51c2VkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHB0X3JlZ3MgKmNoaWxkcmVncyA9IHRhc2tfcHRfcmVncyh0c2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdGluZm8uaAppbmRleCBmZWRmM2UzLi5mYjhhMDZiIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdGluZm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdGluZm8uaApAQCAtMSw1ICsxLDM3OCBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAiYm9vdGluZm9fbm8uaCIKLSNlbHNlCi0jaW5jbHVkZSAiYm9vdGluZm9fbW0uaCIKKy8qCisqKiBhc20vYm9vdGluZm8uaCAtLSBEZWZpbml0aW9uIG9mIHRoZSBMaW51eC9tNjhrIGJvb3QgaW5mb3JtYXRpb24gc3RydWN0dXJlCisqKgorKiogQ29weXJpZ2h0IDE5OTIgYnkgR3JlZyBIYXJwCisqKgorKiogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyoqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisqKiBmb3IgbW9yZSBkZXRhaWxzLgorKioKKyoqIENyZWF0ZWQgMDkvMjkvOTIgYnkgR3JlZyBIYXJwCisqKgorKiogNS8yLzk0IFJvbWFuIEhvZGVrOgorKiogICBBZGRlZCBiaV9hdGFyaSBwYXJ0IG9mIHRoZSBtYWNoaW5lIGRlcGVuZGVudCB1bmlvbiBiaV91bjsgZm9yIG5vdyBpdAorKiogICBjb250YWlucyBqdXN0IGEgbW9kZWwgZmllbGQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBUVCBhbmQgRmFsY29uLgorKiogMjYvNy85NiBSb21hbiBaaXBwZWw6CisqKiAgIFJlbmFtZWQgdG8gc2V0dXAuaDsgYWRkZWQgc29tZSB1c2VmdWwgbWFjcm9zIHRvIGFsbG93IGdjYyBzb21lCisqKiAgIG9wdGltaXphdGlvbnMgaWYgcG9zc2libGUuCisqKiA1LzEwLzk2IEdlZXJ0IFV5dHRlcmhvZXZlbjoKKyoqICAgUmVkZXNpZ24gb2YgdGhlIGJvb3QgaW5mb3JtYXRpb24gc3RydWN0dXJlOyByZW5hbWVkIHRvIGJvb3RpbmZvLmggYWdhaW4KKyoqIDI3LzExLzk2IEdlZXJ0IFV5dHRlcmhvZXZlbjoKKyoqICAgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBib290aW5mbyBpbnRlcmZhY2UgdmVyc2lvbiAxLjAKKyovCisKKyNpZm5kZWYgX002OEtfQk9PVElORk9fSAorI2RlZmluZSBfTTY4S19CT09USU5GT19ICisKKworICAgIC8qCisgICAgICogIEJvb3RpbmZvIGRlZmluaXRpb25zCisgICAgICoKKyAgICAgKiAgVGhpcyBpcyBhbiBlYXNpbHkgcGFyc2FibGUgYW5kIGV4dGVuZGFibGUgc3RydWN0dXJlIGNvbnRhaW5pbmcgYWxsCisgICAgICogIGluZm9ybWF0aW9uIHRvIGJlIHBhc3NlZCBmcm9tIHRoZSBib290c3RyYXAgdG8gdGhlIGtlcm5lbC4KKyAgICAgKgorICAgICAqICBUaGlzIHdheSBJIGhvcGUgdG8ga2VlcCBhbGwgZnV0dXJlIGNoYW5nZXMgYmFjay9mb3Jld2FyZHMgY29tcGF0aWJsZS4KKyAgICAgKiAgVGh1cywga2VlcCB5b3VyIGZpbmdlcnMgY3Jvc3NlZC4uLgorICAgICAqCisgICAgICogIFRoaXMgc3RydWN0dXJlIGlzIGNvcGllZCByaWdodCBhZnRlciB0aGUga2VybmVsIGJzcyBieSB0aGUgYm9vdHN0cmFwCisgICAgICogIHJvdXRpbmUuCisgICAgICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3N0cnVjdCBiaV9yZWNvcmQgeworICAgIHVuc2lnbmVkIHNob3J0IHRhZzsJCQkvKiB0YWcgSUQgKi8KKyAgICB1bnNpZ25lZCBzaG9ydCBzaXplOwkJLyogc2l6ZSBvZiByZWNvcmQgKGluIGJ5dGVzKSAqLworICAgIHVuc2lnbmVkIGxvbmcgZGF0YVswXTsJCS8qIGRhdGEgKi8KK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworCisgICAgLyoKKyAgICAgKiAgVGFnIERlZmluaXRpb25zCisgICAgICoKKyAgICAgKiAgTWFjaGluZSBpbmRlcGVuZGVudCB0YWdzIHN0YXJ0IGNvdW50aW5nIGZyb20gMHgwMDAwCisgICAgICogIE1hY2hpbmUgZGVwZW5kZW50IHRhZ3Mgc3RhcnQgY291bnRpbmcgZnJvbSAweDgwMDAKKyAgICAgKi8KKworI2RlZmluZSBCSV9MQVNUCQkJMHgwMDAwCS8qIGxhc3QgcmVjb3JkIChzZW50aW5lbCkgKi8KKyNkZWZpbmUgQklfTUFDSFRZUEUJCTB4MDAwMQkvKiBtYWNoaW5lIHR5cGUgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfQ1BVVFlQRQkJMHgwMDAyCS8qIGNwdSB0eXBlICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0ZQVVRZUEUJCTB4MDAwMwkvKiBmcHUgdHlwZSAodV9sb25nKSAqLworI2RlZmluZSBCSV9NTVVUWVBFCQkweDAwMDQJLyogbW11IHR5cGUgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfTUVNQ0hVTksJCTB4MDAwNQkvKiBtZW1vcnkgY2h1bmsgYWRkcmVzcyBhbmQgc2l6ZSAqLworCQkJCQkvKiAoc3RydWN0IG1lbV9pbmZvKSAqLworI2RlZmluZSBCSV9SQU1ESVNLCQkweDAwMDYJLyogcmFtZGlzayBhZGRyZXNzIGFuZCBzaXplICovCisJCQkJCS8qIChzdHJ1Y3QgbWVtX2luZm8pICovCisjZGVmaW5lIEJJX0NPTU1BTkRfTElORQkJMHgwMDA3CS8qIGtlcm5lbCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyAqLworCQkJCQkvKiAoc3RyaW5nKSAqLworCisgICAgLyoKKyAgICAgKiAgQW1pZ2Etc3BlY2lmaWMgdGFncworICAgICAqLworCisjZGVmaW5lIEJJX0FNSUdBX01PREVMCQkweDgwMDAJLyogbW9kZWwgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfQU1JR0FfQVVUT0NPTgkweDgwMDEJLyogQXV0b0NvbmZpZyBkZXZpY2UgKi8KKwkJCQkJLyogKHN0cnVjdCBDb25maWdEZXYpICovCisjZGVmaW5lIEJJX0FNSUdBX0NISVBfU0laRQkweDgwMDIJLyogc2l6ZSBvZiBDaGlwIFJBTSAodV9sb25nKSAqLworI2RlZmluZSBCSV9BTUlHQV9WQkxBTksJCTB4ODAwMwkvKiBWQkxBTksgZnJlcXVlbmN5ICh1X2NoYXIpICovCisjZGVmaW5lIEJJX0FNSUdBX1BTRlJFUQkJMHg4MDA0CS8qIHBvd2VyIHN1cHBseSBmcmVxdWVuY3kgKHVfY2hhcikgKi8KKyNkZWZpbmUgQklfQU1JR0FfRUNMT0NLCQkweDgwMDUJLyogRUNsb2NrIGZyZXF1ZW5jeSAodV9sb25nKSAqLworI2RlZmluZSBCSV9BTUlHQV9DSElQU0VUCTB4ODAwNgkvKiBuYXRpdmUgY2hpcHNldCBwcmVzZW50ICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0FNSUdBX1NFUlBFUgkJMHg4MDA3CS8qIHNlcmlhbCBwb3J0IHBlcmlvZCAodV9zaG9ydCkgKi8KKworICAgIC8qCisgICAgICogIEF0YXJpLXNwZWNpZmljIHRhZ3MKKyAgICAgKi8KKworI2RlZmluZSBCSV9BVEFSSV9NQ0hfQ09PS0lFCTB4ODAwMAkvKiBfTUNIIGNvb2tpZSBmcm9tIFRPUyAodV9sb25nKSAqLworI2RlZmluZSBCSV9BVEFSSV9NQ0hfVFlQRQkweDgwMDEJLyogc3BlY2lhbCBtYWNoaW5lIHR5cGUgKHVfbG9uZykgKi8KKwkJCQkJLyogKHZhbHVlcyBhcmUgQVRBUklfTUFDSF8qIGRlZmluZXMgKi8KKworLyogbWNoX2Nvb2tpZSB2YWx1ZXMgKHVwcGVyIHdvcmQpICovCisjZGVmaW5lIEFUQVJJX01DSF9TVAkJMAorI2RlZmluZSBBVEFSSV9NQ0hfU1RFCQkxCisjZGVmaW5lIEFUQVJJX01DSF9UVAkJMgorI2RlZmluZSBBVEFSSV9NQ0hfRkFMQ09OCTMKKworLyogbWNoX3R5cGUgdmFsdWVzICovCisjZGVmaW5lIEFUQVJJX01BQ0hfTk9STUFMCTAJLyogbm8gc3BlY2lhbCBtYWNoaW5lIHR5cGUgKi8KKyNkZWZpbmUgQVRBUklfTUFDSF9NRURVU0EJMQkvKiBNZWR1c2EgMDQwICovCisjZGVmaW5lIEFUQVJJX01BQ0hfSEFERVMJMgkvKiBIYWRlcyAwNDAgb3IgMDYwICovCisjZGVmaW5lIEFUQVJJX01BQ0hfQUI0MAkJMwkvKiBBZnRlcmJ1cm5lcjA0MCBvbiBGYWxjb24gKi8KKworICAgIC8qCisgICAgICogIFZNRS1zcGVjaWZpYyB0YWdzCisgICAgICovCisKKyNkZWZpbmUgQklfVk1FX1RZUEUJCTB4ODAwMAkvKiBWTUUgc3ViLWFyY2hpdGVjdHVyZSAodV9sb25nKSAqLworI2RlZmluZSBCSV9WTUVfQlJESU5GTwkJMHg4MDAxCS8qIFZNRSBib2FyZCBpbmZvcm1hdGlvbiAoc3RydWN0KSAqLworCisvKiBCSV9WTUVfVFlQRSBjb2RlcyAqLworI2RlZmluZQlWTUVfVFlQRV9UUDM0VgkJMHgwMDM0CS8qIFRhZHBvbGUgVFAzNFYgKi8KKyNkZWZpbmUgVk1FX1RZUEVfTVZNRTE0NwkweDAxNDcJLyogTW90b3JvbGEgTVZNRTE0NyAqLworI2RlZmluZSBWTUVfVFlQRV9NVk1FMTYyCTB4MDE2MgkvKiBNb3Rvcm9sYSBNVk1FMTYyICovCisjZGVmaW5lIFZNRV9UWVBFX01WTUUxNjYJMHgwMTY2CS8qIE1vdG9yb2xhIE1WTUUxNjYgKi8KKyNkZWZpbmUgVk1FX1RZUEVfTVZNRTE2NwkweDAxNjcJLyogTW90b3JvbGEgTVZNRTE2NyAqLworI2RlZmluZSBWTUVfVFlQRV9NVk1FMTcyCTB4MDE3MgkvKiBNb3Rvcm9sYSBNVk1FMTcyICovCisjZGVmaW5lIFZNRV9UWVBFX01WTUUxNzcJMHgwMTc3CS8qIE1vdG9yb2xhIE1WTUUxNzcgKi8KKyNkZWZpbmUgVk1FX1RZUEVfQlZNRTQwMDAJMHg0MDAwCS8qIEJWTSBMdGQuIEJWTUU0MDAwICovCisjZGVmaW5lIFZNRV9UWVBFX0JWTUU2MDAwCTB4NjAwMAkvKiBCVk0gTHRkLiBCVk1FNjAwMCAqLworCisvKiBCSV9WTUVfQlJESU5GTyBpcyBhIDMyIGJ5dGUgc3RydWN0IGFzIHJldHVybmVkIGJ5IHRoZSBCdWcgY29kZSBvbgorICogTW90b3JvbGEgVk1FIGJvYXJkcy4gIENvbnRhaW5zIGJvYXJkIG51bWJlciwgQnVnIHZlcnNpb24sIGJvYXJkCisgKiBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGV0Yy4gIFNlZSBpbmNsdWRlL2FzbS9tdm1lMTZ4aHcuaCBmb3IgZGV0YWlscy4KKyAqLworCisKKyAgICAvKgorICAgICAqICBNYWNpbnRvc2gtc3BlY2lmaWMgdGFncyAoYWxsIHVfbG9uZykKKyAgICAgKi8KKworI2RlZmluZSBCSV9NQUNfTU9ERUwJCTB4ODAwMAkvKiBNYWMgR2VzdGFsdCBJRCAobW9kZWwgdHlwZSkgKi8KKyNkZWZpbmUgQklfTUFDX1ZBRERSCQkweDgwMDEJLyogTWFjIHZpZGVvIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBCSV9NQUNfVkRFUFRICQkweDgwMDIJLyogTWFjIHZpZGVvIGRlcHRoICovCisjZGVmaW5lIEJJX01BQ19WUk9XCQkweDgwMDMJLyogTWFjIHZpZGVvIHJvd2J5dGVzICovCisjZGVmaW5lIEJJX01BQ19WRElNCQkweDgwMDQJLyogTWFjIHZpZGVvIGRpbWVuc2lvbnMgKi8KKyNkZWZpbmUgQklfTUFDX1ZMT0dJQ0FMCQkweDgwMDUJLyogTWFjIHZpZGVvIGxvZ2ljYWwgYmFzZSAqLworI2RlZmluZSBCSV9NQUNfU0NDQkFTRQkJMHg4MDA2CS8qIE1hYyBTQ0MgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEJJX01BQ19CVElNRQkJMHg4MDA3CS8qIE1hYyBib290IHRpbWUgKi8KKyNkZWZpbmUgQklfTUFDX0dNVEJJQVMJCTB4ODAwOAkvKiBNYWMgR01UIHRpbWV6b25lIG9mZnNldCAqLworI2RlZmluZSBCSV9NQUNfTUVNU0laRQkJMHg4MDA5CS8qIE1hYyBSQU0gc2l6ZSAoc2FuaXR5IGNoZWNrKSAqLworI2RlZmluZSBCSV9NQUNfQ1BVSUQJCTB4ODAwYQkvKiBNYWMgQ1BVIHR5cGUgKHNhbml0eSBjaGVjaykgKi8KKyNkZWZpbmUgQklfTUFDX1JPTUJBU0UJCTB4ODAwYgkvKiBNYWMgc3lzdGVtIFJPTSBiYXNlIGFkZHJlc3MgKi8KKworICAgIC8qCisgICAgICogIE1hY2ludG9zaCBoYXJkd2FyZSBwcm9maWxlIGRhdGEgLSB1bnVzZWQsIHNlZSBtYWNpbnRvc2guaCBmb3IKKyAgICAgKiAgcmVzb25hYmxlIHR5cGUgdmFsdWVzCisgICAgICovCisKKyNkZWZpbmUgQklfTUFDX1ZJQTFCQVNFCQkweDgwMTAJLyogTWFjIFZJQTEgYmFzZSBhZGRyZXNzIChhbHdheXMgcHJlc2VudCkgKi8KKyNkZWZpbmUgQklfTUFDX1ZJQTJCQVNFCQkweDgwMTEJLyogTWFjIFZJQTIgYmFzZSBhZGRyZXNzICh0eXBlIHZhcmllcykgKi8KKyNkZWZpbmUgQklfTUFDX1ZJQTJUWVBFCQkweDgwMTIJLyogTWFjIFZJQTIgdHlwZSAoVklBLCBSQlYsIE9TUykgKi8KKyNkZWZpbmUgQklfTUFDX0FEQlRZUEUJCTB4ODAxMwkvKiBNYWMgQURCIGludGVyZmFjZSB0eXBlICovCisjZGVmaW5lIEJJX01BQ19BU0NCQVNFCQkweDgwMTQJLyogTWFjIEFwcGxlIFNvdW5kIENoaXAgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEJJX01BQ19TQ1NJNTM4MAkJMHg4MDE1CS8qIE1hYyBOQ1IgNTM4MCBTQ1NJIChiYXNlIGFkZHJlc3MsIG11bHRpKSAqLworI2RlZmluZSBCSV9NQUNfU0NTSURNQQkJMHg4MDE2CS8qIE1hYyBTQ1NJIERNQSAoYmFzZSBhZGRyZXNzKSAqLworI2RlZmluZSBCSV9NQUNfU0NTSTUzOTYJCTB4ODAxNwkvKiBNYWMgTkNSIDUzQzk2IFNDU0kgKGJhc2UgYWRkcmVzcywgbXVsdGkpICovCisjZGVmaW5lIEJJX01BQ19JREVUWVBFCQkweDgwMTgJLyogTWFjIElERSBpbnRlcmZhY2UgdHlwZSAqLworI2RlZmluZSBCSV9NQUNfSURFQkFTRQkJMHg4MDE5CS8qIE1hYyBJREUgaW50ZXJmYWNlIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBCSV9NQUNfTlVCVVMJCTB4ODAxYQkvKiBNYWMgTnVidXMgdHlwZSAobm9uZSwgcmVndWxhciwgcHNldWRvKSAqLworI2RlZmluZSBCSV9NQUNfU0xPVE1BU0sJCTB4ODAxYgkvKiBNYWMgTnVidXMgc2xvdHMgcHJlc2VudCAqLworI2RlZmluZSBCSV9NQUNfU0NDVFlQRQkJMHg4MDFjCS8qIE1hYyBTQ0Mgc2VyaWFsIHR5cGUgKG5vcm1hbCwgSU9QKSAqLworI2RlZmluZSBCSV9NQUNfRVRIVFlQRQkJMHg4MDFkCS8qIE1hYyBidWlsdGluIGV0aGVybmV0IHR5cGUgKFNvbmljLCBNQUNFICovCisjZGVmaW5lIEJJX01BQ19FVEhCQVNFCQkweDgwMWUJLyogTWFjIGJ1aWx0aW4gZXRoZXJuZXQgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIEJJX01BQ19QTVUJCTB4ODAxZgkvKiBNYWMgcG93ZXIgbWFuYWdlbWVudCAvIHBvd2Vyb2ZmIGhhcmR3YXJlICovCisjZGVmaW5lIEJJX01BQ19JT1BfU1dJTQkJMHg4MDIwCS8qIE1hYyBTV0lNIGZsb3BweSBJT1AgKi8KKyNkZWZpbmUgQklfTUFDX0lPUF9BREIJCTB4ODAyMQkvKiBNYWMgQURCIElPUCAqLworCisgICAgLyoKKyAgICAgKiBNYWM6IGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgYm9vdGVyIGRhdGEgZm9ybWF0ICh0ZW1wb3JhcmlseSkKKyAgICAgKiBGaWVsZHMgdW51c2VkIHdpdGggdGhlIG5ldyBib290aW5mbyBjYW4gYmUgZGVsZXRlZCBub3c7IGluc3RlYWQgb2YKKyAgICAgKiBhZGRpbmcgbmV3IGZpZWxkcyB0aGUgc3RydWN0IG1pZ2h0IGJlIHNwbGl0dGVkIGludG8gYSBoYXJkd2FyZSBhZGRyZXNzCisgICAgICogcGFydCBhbmQgYSBoYXJkd2FyZSB0eXBlIHBhcnQKKyAgICAgKi8KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IG1hY19ib290ZXJfZGF0YQoreworCXVuc2lnbmVkIGxvbmcgdmlkZW9hZGRyOworCXVuc2lnbmVkIGxvbmcgdmlkZW9yb3c7CisJdW5zaWduZWQgbG9uZyB2aWRlb2RlcHRoOworCXVuc2lnbmVkIGxvbmcgZGltZW5zaW9uczsKKwl1bnNpZ25lZCBsb25nIGFyZ3M7CisJdW5zaWduZWQgbG9uZyBib290dGltZTsKKwl1bnNpZ25lZCBsb25nIGdtdGJpYXM7CisJdW5zaWduZWQgbG9uZyBib290dmVyOworCXVuc2lnbmVkIGxvbmcgdmlkZW9sb2dpY2FsOworCXVuc2lnbmVkIGxvbmcgc2NjYmFzZTsKKwl1bnNpZ25lZCBsb25nIGlkOworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHNlcmlhbG1mOworCXVuc2lnbmVkIGxvbmcgc2VyaWFsaHNrOworCXVuc2lnbmVkIGxvbmcgc2VyaWFsZ3BpOworCXVuc2lnbmVkIGxvbmcgcHJpbnRtZjsKKwl1bnNpZ25lZCBsb25nIHByaW50aHNrOworCXVuc2lnbmVkIGxvbmcgcHJpbnRncGk7CisJdW5zaWduZWQgbG9uZyBjcHVpZDsKKwl1bnNpZ25lZCBsb25nIHJvbWJhc2U7CisJdW5zaWduZWQgbG9uZyBhZGJkZWxheTsKKwl1bnNpZ25lZCBsb25nIHRpbWVkYnJhOworfTsKKworZXh0ZXJuIHN0cnVjdCBtYWNfYm9vdGVyX2RhdGEKKwltYWNfYmlfZGF0YTsKKwogI2VuZGlmCisKKyAgICAvKgorICAgICAqICBBcG9sbG8tc3BlY2lmaWMgdGFncworICAgICAqLworCisjZGVmaW5lIEJJX0FQT0xMT19NT0RFTCAgICAgICAgIDB4ODAwMCAgLyogbW9kZWwgKHVfbG9uZykgKi8KKworICAgIC8qCisgICAgICogIEhQMzAwLXNwZWNpZmljIHRhZ3MKKyAgICAgKi8KKworI2RlZmluZSBCSV9IUDMwMF9NT0RFTAkJMHg4MDAwCS8qIG1vZGVsICh1X2xvbmcpICovCisjZGVmaW5lIEJJX0hQMzAwX1VBUlRfU0NPREUJMHg4MDAxCS8qIFVBUlQgc2VsZWN0IGNvZGUgKHVfbG9uZykgKi8KKyNkZWZpbmUgQklfSFAzMDBfVUFSVF9BRERSCTB4ODAwMgkvKiBwaHlzLiBhZGRyIG9mIFVBUlQgKHVfbG9uZykgKi8KKworICAgIC8qCisgICAgICogU3R1ZmYgZm9yIGJvb3RpbmZvIGludGVyZmFjZSB2ZXJzaW9uaW5nCisgICAgICoKKyAgICAgKiBBdCB0aGUgc3RhcnQgb2Yga2VybmVsIGNvZGUsIGEgJ3N0cnVjdCBib290dmVyc2lvbicgaXMgbG9jYXRlZC4KKyAgICAgKiBib290c3RyYXAgY2hlY2tzIGZvciBhIG1hdGNoaW5nIHZlcnNpb24gb2YgdGhlIGludGVyZmFjZSBiZWZvcmUgYm9vdGluZworICAgICAqIGEga2VybmVsLCB0byBhdm9pZCB1c2VyIGNvbmZ1c2lvbiBpZiBrZXJuZWwgYW5kIGJvb3RzdHJhcCBkb24ndCB3b3JrCisgICAgICogdG9nZXRoZXIgOi0pCisgICAgICoKKyAgICAgKiBJZiBpbmNvbXBhdGlibGUgY2hhbmdlcyBhcmUgbWFkZSB0byB0aGUgYm9vdGluZm8gaW50ZXJmYWNlLCB0aGUgbWFqb3IKKyAgICAgKiBudW1iZXIgYmVsb3cgc2hvdWxkIGJlIHN0ZXBwZWQgKGFuZCB0aGUgbWlub3IgcmVzZXQgdG8gMCkgZm9yIHRoZQorICAgICAqIGFwcHJvcHJpYXRlIG1hY2hpbmUuIElmIGEgY2hhbmdlIGlzIGJhY2t3YXJkLWNvbXBhdGlibGUsIHRoZSBtaW5vcgorICAgICAqIHNob3VsZCBiZSBzdGVwcGVkLiAiQmFja3dhcmRzLWNvbXBhdGlibGUiIG1lYW5zIHRoYXQgYm9vdGluZyB3aWxsIHdvcmssCisgICAgICogYnV0IGNlcnRhaW4gZmVhdHVyZXMgbWF5IG5vdC4KKyAgICAgKi8KKworI2RlZmluZSBCT09USU5GT1ZfTUFHSUMJCQkweDQyNDk1NjFBCS8qICdCSVZeWicgKi8KKyNkZWZpbmUgTUtfQklfVkVSU0lPTihtYWpvcixtaW5vcikJKCgobWFqb3IpPDwxNikrKG1pbm9yKSkKKyNkZWZpbmUgQklfVkVSU0lPTl9NQUpPUih2KQkJKCgodikgPj4gMTYpICYgMHhmZmZmKQorI2RlZmluZSBCSV9WRVJTSU9OX01JTk9SKHYpCQkoKHYpICYgMHhmZmZmKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgYm9vdHZlcnNpb24geworICAgIHVuc2lnbmVkIHNob3J0IGJyYW5jaDsKKyAgICB1bnNpZ25lZCBsb25nIG1hZ2ljOworICAgIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBtYWNodHlwZTsKKwl1bnNpZ25lZCBsb25nIHZlcnNpb247CisgICAgfSBtYWNodmVyc2lvbnNbMF07Cit9OworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgQU1JR0FfQk9PVElfVkVSU0lPTiAgICBNS19CSV9WRVJTSU9OKCAyLCAwICkKKyNkZWZpbmUgQVRBUklfQk9PVElfVkVSU0lPTiAgICBNS19CSV9WRVJTSU9OKCAyLCAxICkKKyNkZWZpbmUgTUFDX0JPT1RJX1ZFUlNJT04gICAgICBNS19CSV9WRVJTSU9OKCAyLCAwICkKKyNkZWZpbmUgTVZNRTE0N19CT09USV9WRVJTSU9OICBNS19CSV9WRVJTSU9OKCAyLCAwICkKKyNkZWZpbmUgTVZNRTE2eF9CT09USV9WRVJTSU9OICBNS19CSV9WRVJTSU9OKCAyLCAwICkKKyNkZWZpbmUgQlZNRTYwMDBfQk9PVElfVkVSU0lPTiBNS19CSV9WRVJTSU9OKCAyLCAwICkKKyNkZWZpbmUgUTQwX0JPT1RJX1ZFUlNJT04gICAgICBNS19CSV9WRVJTSU9OKCAyLCAwICkKKyNkZWZpbmUgSFAzMDBfQk9PVElfVkVSU0lPTiAgICBNS19CSV9WRVJTSU9OKCAyLCAwICkKKworI2lmZGVmIEJPT1RJTkZPX0NPTVBBVF8xXzAKKworICAgIC8qCisgICAgICogIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggYm9vdGluZm8gaW50ZXJmYWNlIHZlcnNpb24gMS4wCisgICAgICovCisKKyNkZWZpbmUgQ09NUEFUX0FNSUdBX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMSwgMCApCisjZGVmaW5lIENPTVBBVF9BVEFSSV9CT09USV9WRVJTSU9OICAgIE1LX0JJX1ZFUlNJT04oIDEsIDAgKQorI2RlZmluZSBDT01QQVRfTUFDX0JPT1RJX1ZFUlNJT04gICAgICBNS19CSV9WRVJTSU9OKCAxLCAwICkKKworI2luY2x1ZGUgPGxpbnV4L3pvcnJvLmg+CisKKyNkZWZpbmUgQ09NUEFUX05VTV9BVVRPICAgIDE2CisKK3N0cnVjdCBjb21wYXRfYmlfQW1pZ2EgeworICAgIGludCBtb2RlbDsKKyAgICBpbnQgbnVtX2F1dG9jb247CisgICAgc3RydWN0IENvbmZpZ0RldiBhdXRvY29uW0NPTVBBVF9OVU1fQVVUT107CisgICAgdW5zaWduZWQgbG9uZyBjaGlwX3NpemU7CisgICAgdW5zaWduZWQgY2hhciB2Ymxhbms7CisgICAgdW5zaWduZWQgY2hhciBwc2ZyZXE7CisgICAgdW5zaWduZWQgbG9uZyBlY2xvY2s7CisgICAgdW5zaWduZWQgbG9uZyBjaGlwc2V0OworICAgIHVuc2lnbmVkIGxvbmcgaHdfcHJlc2VudDsKK307CisKK3N0cnVjdCBjb21wYXRfYmlfQXRhcmkgeworICAgIHVuc2lnbmVkIGxvbmcgaHdfcHJlc2VudDsKKyAgICB1bnNpZ25lZCBsb25nIG1jaF9jb29raWU7Cit9OworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCitzdHJ1Y3QgY29tcGF0X2JpX01hY2ludG9zaAoreworCXVuc2lnbmVkIGxvbmcgdmlkZW9hZGRyOworCXVuc2lnbmVkIGxvbmcgdmlkZW9yb3c7CisJdW5zaWduZWQgbG9uZyB2aWRlb2RlcHRoOworCXVuc2lnbmVkIGxvbmcgZGltZW5zaW9uczsKKwl1bnNpZ25lZCBsb25nIGFyZ3M7CisJdW5zaWduZWQgbG9uZyBib290dGltZTsKKwl1bnNpZ25lZCBsb25nIGdtdGJpYXM7CisJdW5zaWduZWQgbG9uZyBib290dmVyOworCXVuc2lnbmVkIGxvbmcgdmlkZW9sb2dpY2FsOworCXVuc2lnbmVkIGxvbmcgc2NjYmFzZTsKKwl1bnNpZ25lZCBsb25nIGlkOworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHNlcmlhbG1mOworCXVuc2lnbmVkIGxvbmcgc2VyaWFsaHNrOworCXVuc2lnbmVkIGxvbmcgc2VyaWFsZ3BpOworCXVuc2lnbmVkIGxvbmcgcHJpbnRtZjsKKwl1bnNpZ25lZCBsb25nIHByaW50aHNrOworCXVuc2lnbmVkIGxvbmcgcHJpbnRncGk7CisJdW5zaWduZWQgbG9uZyBjcHVpZDsKKwl1bnNpZ25lZCBsb25nIHJvbWJhc2U7CisJdW5zaWduZWQgbG9uZyBhZGJkZWxheTsKKwl1bnNpZ25lZCBsb25nIHRpbWVkYnJhOworfTsKKworI2VuZGlmCisKK3N0cnVjdCBjb21wYXRfbWVtX2luZm8geworICAgIHVuc2lnbmVkIGxvbmcgYWRkcjsKKyAgICB1bnNpZ25lZCBsb25nIHNpemU7Cit9OworCisjZGVmaW5lIENPTVBBVF9OVU1fTUVNSU5GTyAgNAorCisjZGVmaW5lIENPTVBBVF9DUFVCXzY4MDIwIDAKKyNkZWZpbmUgQ09NUEFUX0NQVUJfNjgwMzAgMQorI2RlZmluZSBDT01QQVRfQ1BVQl82ODA0MCAyCisjZGVmaW5lIENPTVBBVF9DUFVCXzY4MDYwIDMKKyNkZWZpbmUgQ09NUEFUX0ZQVUJfNjg4ODEgNQorI2RlZmluZSBDT01QQVRfRlBVQl82ODg4MiA2CisjZGVmaW5lIENPTVBBVF9GUFVCXzY4MDQwIDcKKyNkZWZpbmUgQ09NUEFUX0ZQVUJfNjgwNjAgOAorCisjZGVmaW5lIENPTVBBVF9DUFVfNjgwMjAgICAgKDE8PENPTVBBVF9DUFVCXzY4MDIwKQorI2RlZmluZSBDT01QQVRfQ1BVXzY4MDMwICAgICgxPDxDT01QQVRfQ1BVQl82ODAzMCkKKyNkZWZpbmUgQ09NUEFUX0NQVV82ODA0MCAgICAoMTw8Q09NUEFUX0NQVUJfNjgwNDApCisjZGVmaW5lIENPTVBBVF9DUFVfNjgwNjAgICAgKDE8PENPTVBBVF9DUFVCXzY4MDYwKQorI2RlZmluZSBDT01QQVRfQ1BVX01BU0sgICAgICgzMSkKKyNkZWZpbmUgQ09NUEFUX0ZQVV82ODg4MSAgICAoMTw8Q09NUEFUX0ZQVUJfNjg4ODEpCisjZGVmaW5lIENPTVBBVF9GUFVfNjg4ODIgICAgKDE8PENPTVBBVF9GUFVCXzY4ODgyKQorI2RlZmluZSBDT01QQVRfRlBVXzY4MDQwICAgICgxPDxDT01QQVRfRlBVQl82ODA0MCkKKyNkZWZpbmUgQ09NUEFUX0ZQVV82ODA2MCAgICAoMTw8Q09NUEFUX0ZQVUJfNjgwNjApCisjZGVmaW5lIENPTVBBVF9GUFVfTUFTSyAgICAgKDB4ZmUwKQorCisjZGVmaW5lIENPTVBBVF9DTF9TSVpFICAgICAgKDI1NikKKworc3RydWN0IGNvbXBhdF9ib290aW5mbyB7CisgICAgdW5zaWduZWQgbG9uZyBtYWNodHlwZTsKKyAgICB1bnNpZ25lZCBsb25nIGNwdXR5cGU7CisgICAgc3RydWN0IGNvbXBhdF9tZW1faW5mbyBtZW1vcnlbQ09NUEFUX05VTV9NRU1JTkZPXTsKKyAgICBpbnQgbnVtX21lbW9yeTsKKyAgICB1bnNpZ25lZCBsb25nIHJhbWRpc2tfc2l6ZTsKKyAgICB1bnNpZ25lZCBsb25nIHJhbWRpc2tfYWRkcjsKKyAgICBjaGFyIGNvbW1hbmRfbGluZVtDT01QQVRfQ0xfU0laRV07CisgICAgdW5pb24geworCXN0cnVjdCBjb21wYXRfYmlfQW1pZ2EgICAgIGJpX2FtaTsKKwlzdHJ1Y3QgY29tcGF0X2JpX0F0YXJpICAgICBiaV9hdGE7CisJc3RydWN0IGNvbXBhdF9iaV9NYWNpbnRvc2ggYmlfbWFjOworICAgIH0gYmlfdW47Cit9OworCisjZGVmaW5lIGJpX2FtaWdhCWJpX3VuLmJpX2FtaQorI2RlZmluZSBiaV9hdGFyaQliaV91bi5iaV9hdGEKKyNkZWZpbmUgYmlfbWFjCQliaV91bi5iaV9tYWMKKworI2VuZGlmIC8qIEJPT1RJTkZPX0NPTVBBVF8xXzAgKi8KKworCisjZW5kaWYgLyogX002OEtfQk9PVElORk9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdGluZm9fbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI4YTA2Yi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYm9vdGluZm9fbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vKgotKiogYXNtL2Jvb3RpbmZvLmggLS0gRGVmaW5pdGlvbiBvZiB0aGUgTGludXgvbTY4ayBib290IGluZm9ybWF0aW9uIHN0cnVjdHVyZQotKioKLSoqIENvcHlyaWdodCAxOTkyIGJ5IEdyZWcgSGFycAotKioKLSoqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0qKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotKiogZm9yIG1vcmUgZGV0YWlscy4KLSoqCi0qKiBDcmVhdGVkIDA5LzI5LzkyIGJ5IEdyZWcgSGFycAotKioKLSoqIDUvMi85NCBSb21hbiBIb2RlazoKLSoqICAgQWRkZWQgYmlfYXRhcmkgcGFydCBvZiB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdW5pb24gYmlfdW47IGZvciBub3cgaXQKLSoqICAgY29udGFpbnMganVzdCBhIG1vZGVsIGZpZWxkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gVFQgYW5kIEZhbGNvbi4KLSoqIDI2LzcvOTYgUm9tYW4gWmlwcGVsOgotKiogICBSZW5hbWVkIHRvIHNldHVwLmg7IGFkZGVkIHNvbWUgdXNlZnVsIG1hY3JvcyB0byBhbGxvdyBnY2Mgc29tZQotKiogICBvcHRpbWl6YXRpb25zIGlmIHBvc3NpYmxlLgotKiogNS8xMC85NiBHZWVydCBVeXR0ZXJob2V2ZW46Ci0qKiAgIFJlZGVzaWduIG9mIHRoZSBib290IGluZm9ybWF0aW9uIHN0cnVjdHVyZTsgcmVuYW1lZCB0byBib290aW5mby5oIGFnYWluCi0qKiAyNy8xMS85NiBHZWVydCBVeXR0ZXJob2V2ZW46Ci0qKiAgIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggYm9vdGluZm8gaW50ZXJmYWNlIHZlcnNpb24gMS4wCi0qLwotCi0jaWZuZGVmIF9NNjhLX0JPT1RJTkZPX0gKLSNkZWZpbmUgX002OEtfQk9PVElORk9fSAotCi0KLSAgICAvKgotICAgICAqICBCb290aW5mbyBkZWZpbml0aW9ucwotICAgICAqCi0gICAgICogIFRoaXMgaXMgYW4gZWFzaWx5IHBhcnNhYmxlIGFuZCBleHRlbmRhYmxlIHN0cnVjdHVyZSBjb250YWluaW5nIGFsbAotICAgICAqICBpbmZvcm1hdGlvbiB0byBiZSBwYXNzZWQgZnJvbSB0aGUgYm9vdHN0cmFwIHRvIHRoZSBrZXJuZWwuCi0gICAgICoKLSAgICAgKiAgVGhpcyB3YXkgSSBob3BlIHRvIGtlZXAgYWxsIGZ1dHVyZSBjaGFuZ2VzIGJhY2svZm9yZXdhcmRzIGNvbXBhdGlibGUuCi0gICAgICogIFRodXMsIGtlZXAgeW91ciBmaW5nZXJzIGNyb3NzZWQuLi4KLSAgICAgKgotICAgICAqICBUaGlzIHN0cnVjdHVyZSBpcyBjb3BpZWQgcmlnaHQgYWZ0ZXIgdGhlIGtlcm5lbCBic3MgYnkgdGhlIGJvb3RzdHJhcAotICAgICAqICByb3V0aW5lLgotICAgICAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1zdHJ1Y3QgYmlfcmVjb3JkIHsKLSAgICB1bnNpZ25lZCBzaG9ydCB0YWc7CQkJLyogdGFnIElEICovCi0gICAgdW5zaWduZWQgc2hvcnQgc2l6ZTsJCS8qIHNpemUgb2YgcmVjb3JkIChpbiBieXRlcykgKi8KLSAgICB1bnNpZ25lZCBsb25nIGRhdGFbMF07CQkvKiBkYXRhICovCi19OwotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLQotICAgIC8qCi0gICAgICogIFRhZyBEZWZpbml0aW9ucwotICAgICAqCi0gICAgICogIE1hY2hpbmUgaW5kZXBlbmRlbnQgdGFncyBzdGFydCBjb3VudGluZyBmcm9tIDB4MDAwMAotICAgICAqICBNYWNoaW5lIGRlcGVuZGVudCB0YWdzIHN0YXJ0IGNvdW50aW5nIGZyb20gMHg4MDAwCi0gICAgICovCi0KLSNkZWZpbmUgQklfTEFTVAkJCTB4MDAwMAkvKiBsYXN0IHJlY29yZCAoc2VudGluZWwpICovCi0jZGVmaW5lIEJJX01BQ0hUWVBFCQkweDAwMDEJLyogbWFjaGluZSB0eXBlICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX0NQVVRZUEUJCTB4MDAwMgkvKiBjcHUgdHlwZSAodV9sb25nKSAqLwotI2RlZmluZSBCSV9GUFVUWVBFCQkweDAwMDMJLyogZnB1IHR5cGUgKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfTU1VVFlQRQkJMHgwMDA0CS8qIG1tdSB0eXBlICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX01FTUNIVU5LCQkweDAwMDUJLyogbWVtb3J5IGNodW5rIGFkZHJlc3MgYW5kIHNpemUgKi8KLQkJCQkJLyogKHN0cnVjdCBtZW1faW5mbykgKi8KLSNkZWZpbmUgQklfUkFNRElTSwkJMHgwMDA2CS8qIHJhbWRpc2sgYWRkcmVzcyBhbmQgc2l6ZSAqLwotCQkJCQkvKiAoc3RydWN0IG1lbV9pbmZvKSAqLwotI2RlZmluZSBCSV9DT01NQU5EX0xJTkUJCTB4MDAwNwkvKiBrZXJuZWwgY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgKi8KLQkJCQkJLyogKHN0cmluZykgKi8KLQotICAgIC8qCi0gICAgICogIEFtaWdhLXNwZWNpZmljIHRhZ3MKLSAgICAgKi8KLQotI2RlZmluZSBCSV9BTUlHQV9NT0RFTAkJMHg4MDAwCS8qIG1vZGVsICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX0FNSUdBX0FVVE9DT04JMHg4MDAxCS8qIEF1dG9Db25maWcgZGV2aWNlICovCi0JCQkJCS8qIChzdHJ1Y3QgQ29uZmlnRGV2KSAqLwotI2RlZmluZSBCSV9BTUlHQV9DSElQX1NJWkUJMHg4MDAyCS8qIHNpemUgb2YgQ2hpcCBSQU0gKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfQU1JR0FfVkJMQU5LCQkweDgwMDMJLyogVkJMQU5LIGZyZXF1ZW5jeSAodV9jaGFyKSAqLwotI2RlZmluZSBCSV9BTUlHQV9QU0ZSRVEJCTB4ODAwNAkvKiBwb3dlciBzdXBwbHkgZnJlcXVlbmN5ICh1X2NoYXIpICovCi0jZGVmaW5lIEJJX0FNSUdBX0VDTE9DSwkJMHg4MDA1CS8qIEVDbG9jayBmcmVxdWVuY3kgKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfQU1JR0FfQ0hJUFNFVAkweDgwMDYJLyogbmF0aXZlIGNoaXBzZXQgcHJlc2VudCAodV9sb25nKSAqLwotI2RlZmluZSBCSV9BTUlHQV9TRVJQRVIJCTB4ODAwNwkvKiBzZXJpYWwgcG9ydCBwZXJpb2QgKHVfc2hvcnQpICovCi0KLSAgICAvKgotICAgICAqICBBdGFyaS1zcGVjaWZpYyB0YWdzCi0gICAgICovCi0KLSNkZWZpbmUgQklfQVRBUklfTUNIX0NPT0tJRQkweDgwMDAJLyogX01DSCBjb29raWUgZnJvbSBUT1MgKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfQVRBUklfTUNIX1RZUEUJMHg4MDAxCS8qIHNwZWNpYWwgbWFjaGluZSB0eXBlICh1X2xvbmcpICovCi0JCQkJCS8qICh2YWx1ZXMgYXJlIEFUQVJJX01BQ0hfKiBkZWZpbmVzICovCi0KLS8qIG1jaF9jb29raWUgdmFsdWVzICh1cHBlciB3b3JkKSAqLwotI2RlZmluZSBBVEFSSV9NQ0hfU1QJCTAKLSNkZWZpbmUgQVRBUklfTUNIX1NURQkJMQotI2RlZmluZSBBVEFSSV9NQ0hfVFQJCTIKLSNkZWZpbmUgQVRBUklfTUNIX0ZBTENPTgkzCi0KLS8qIG1jaF90eXBlIHZhbHVlcyAqLwotI2RlZmluZSBBVEFSSV9NQUNIX05PUk1BTAkwCS8qIG5vIHNwZWNpYWwgbWFjaGluZSB0eXBlICovCi0jZGVmaW5lIEFUQVJJX01BQ0hfTUVEVVNBCTEJLyogTWVkdXNhIDA0MCAqLwotI2RlZmluZSBBVEFSSV9NQUNIX0hBREVTCTIJLyogSGFkZXMgMDQwIG9yIDA2MCAqLwotI2RlZmluZSBBVEFSSV9NQUNIX0FCNDAJCTMJLyogQWZ0ZXJidXJuZXIwNDAgb24gRmFsY29uICovCi0KLSAgICAvKgotICAgICAqICBWTUUtc3BlY2lmaWMgdGFncwotICAgICAqLwotCi0jZGVmaW5lIEJJX1ZNRV9UWVBFCQkweDgwMDAJLyogVk1FIHN1Yi1hcmNoaXRlY3R1cmUgKHVfbG9uZykgKi8KLSNkZWZpbmUgQklfVk1FX0JSRElORk8JCTB4ODAwMQkvKiBWTUUgYm9hcmQgaW5mb3JtYXRpb24gKHN0cnVjdCkgKi8KLQotLyogQklfVk1FX1RZUEUgY29kZXMgKi8KLSNkZWZpbmUJVk1FX1RZUEVfVFAzNFYJCTB4MDAzNAkvKiBUYWRwb2xlIFRQMzRWICovCi0jZGVmaW5lIFZNRV9UWVBFX01WTUUxNDcJMHgwMTQ3CS8qIE1vdG9yb2xhIE1WTUUxNDcgKi8KLSNkZWZpbmUgVk1FX1RZUEVfTVZNRTE2MgkweDAxNjIJLyogTW90b3JvbGEgTVZNRTE2MiAqLwotI2RlZmluZSBWTUVfVFlQRV9NVk1FMTY2CTB4MDE2NgkvKiBNb3Rvcm9sYSBNVk1FMTY2ICovCi0jZGVmaW5lIFZNRV9UWVBFX01WTUUxNjcJMHgwMTY3CS8qIE1vdG9yb2xhIE1WTUUxNjcgKi8KLSNkZWZpbmUgVk1FX1RZUEVfTVZNRTE3MgkweDAxNzIJLyogTW90b3JvbGEgTVZNRTE3MiAqLwotI2RlZmluZSBWTUVfVFlQRV9NVk1FMTc3CTB4MDE3NwkvKiBNb3Rvcm9sYSBNVk1FMTc3ICovCi0jZGVmaW5lIFZNRV9UWVBFX0JWTUU0MDAwCTB4NDAwMAkvKiBCVk0gTHRkLiBCVk1FNDAwMCAqLwotI2RlZmluZSBWTUVfVFlQRV9CVk1FNjAwMAkweDYwMDAJLyogQlZNIEx0ZC4gQlZNRTYwMDAgKi8KLQotLyogQklfVk1FX0JSRElORk8gaXMgYSAzMiBieXRlIHN0cnVjdCBhcyByZXR1cm5lZCBieSB0aGUgQnVnIGNvZGUgb24KLSAqIE1vdG9yb2xhIFZNRSBib2FyZHMuICBDb250YWlucyBib2FyZCBudW1iZXIsIEJ1ZyB2ZXJzaW9uLCBib2FyZAotICogY29uZmlndXJhdGlvbiBvcHRpb25zLCBldGMuICBTZWUgaW5jbHVkZS9hc20vbXZtZTE2eGh3LmggZm9yIGRldGFpbHMuCi0gKi8KLQotCi0gICAgLyoKLSAgICAgKiAgTWFjaW50b3NoLXNwZWNpZmljIHRhZ3MgKGFsbCB1X2xvbmcpCi0gICAgICovCi0KLSNkZWZpbmUgQklfTUFDX01PREVMCQkweDgwMDAJLyogTWFjIEdlc3RhbHQgSUQgKG1vZGVsIHR5cGUpICovCi0jZGVmaW5lIEJJX01BQ19WQUREUgkJMHg4MDAxCS8qIE1hYyB2aWRlbyBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgQklfTUFDX1ZERVBUSAkJMHg4MDAyCS8qIE1hYyB2aWRlbyBkZXB0aCAqLwotI2RlZmluZSBCSV9NQUNfVlJPVwkJMHg4MDAzCS8qIE1hYyB2aWRlbyByb3dieXRlcyAqLwotI2RlZmluZSBCSV9NQUNfVkRJTQkJMHg4MDA0CS8qIE1hYyB2aWRlbyBkaW1lbnNpb25zICovCi0jZGVmaW5lIEJJX01BQ19WTE9HSUNBTAkJMHg4MDA1CS8qIE1hYyB2aWRlbyBsb2dpY2FsIGJhc2UgKi8KLSNkZWZpbmUgQklfTUFDX1NDQ0JBU0UJCTB4ODAwNgkvKiBNYWMgU0NDIGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBCSV9NQUNfQlRJTUUJCTB4ODAwNwkvKiBNYWMgYm9vdCB0aW1lICovCi0jZGVmaW5lIEJJX01BQ19HTVRCSUFTCQkweDgwMDgJLyogTWFjIEdNVCB0aW1lem9uZSBvZmZzZXQgKi8KLSNkZWZpbmUgQklfTUFDX01FTVNJWkUJCTB4ODAwOQkvKiBNYWMgUkFNIHNpemUgKHNhbml0eSBjaGVjaykgKi8KLSNkZWZpbmUgQklfTUFDX0NQVUlECQkweDgwMGEJLyogTWFjIENQVSB0eXBlIChzYW5pdHkgY2hlY2spICovCi0jZGVmaW5lIEJJX01BQ19ST01CQVNFCQkweDgwMGIJLyogTWFjIHN5c3RlbSBST00gYmFzZSBhZGRyZXNzICovCi0KLSAgICAvKgotICAgICAqICBNYWNpbnRvc2ggaGFyZHdhcmUgcHJvZmlsZSBkYXRhIC0gdW51c2VkLCBzZWUgbWFjaW50b3NoLmggZm9yCi0gICAgICogIHJlc29uYWJsZSB0eXBlIHZhbHVlcwotICAgICAqLwotCi0jZGVmaW5lIEJJX01BQ19WSUExQkFTRQkJMHg4MDEwCS8qIE1hYyBWSUExIGJhc2UgYWRkcmVzcyAoYWx3YXlzIHByZXNlbnQpICovCi0jZGVmaW5lIEJJX01BQ19WSUEyQkFTRQkJMHg4MDExCS8qIE1hYyBWSUEyIGJhc2UgYWRkcmVzcyAodHlwZSB2YXJpZXMpICovCi0jZGVmaW5lIEJJX01BQ19WSUEyVFlQRQkJMHg4MDEyCS8qIE1hYyBWSUEyIHR5cGUgKFZJQSwgUkJWLCBPU1MpICovCi0jZGVmaW5lIEJJX01BQ19BREJUWVBFCQkweDgwMTMJLyogTWFjIEFEQiBpbnRlcmZhY2UgdHlwZSAqLwotI2RlZmluZSBCSV9NQUNfQVNDQkFTRQkJMHg4MDE0CS8qIE1hYyBBcHBsZSBTb3VuZCBDaGlwIGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBCSV9NQUNfU0NTSTUzODAJCTB4ODAxNQkvKiBNYWMgTkNSIDUzODAgU0NTSSAoYmFzZSBhZGRyZXNzLCBtdWx0aSkgKi8KLSNkZWZpbmUgQklfTUFDX1NDU0lETUEJCTB4ODAxNgkvKiBNYWMgU0NTSSBETUEgKGJhc2UgYWRkcmVzcykgKi8KLSNkZWZpbmUgQklfTUFDX1NDU0k1Mzk2CQkweDgwMTcJLyogTWFjIE5DUiA1M0M5NiBTQ1NJIChiYXNlIGFkZHJlc3MsIG11bHRpKSAqLwotI2RlZmluZSBCSV9NQUNfSURFVFlQRQkJMHg4MDE4CS8qIE1hYyBJREUgaW50ZXJmYWNlIHR5cGUgKi8KLSNkZWZpbmUgQklfTUFDX0lERUJBU0UJCTB4ODAxOQkvKiBNYWMgSURFIGludGVyZmFjZSBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgQklfTUFDX05VQlVTCQkweDgwMWEJLyogTWFjIE51YnVzIHR5cGUgKG5vbmUsIHJlZ3VsYXIsIHBzZXVkbykgKi8KLSNkZWZpbmUgQklfTUFDX1NMT1RNQVNLCQkweDgwMWIJLyogTWFjIE51YnVzIHNsb3RzIHByZXNlbnQgKi8KLSNkZWZpbmUgQklfTUFDX1NDQ1RZUEUJCTB4ODAxYwkvKiBNYWMgU0NDIHNlcmlhbCB0eXBlIChub3JtYWwsIElPUCkgKi8KLSNkZWZpbmUgQklfTUFDX0VUSFRZUEUJCTB4ODAxZAkvKiBNYWMgYnVpbHRpbiBldGhlcm5ldCB0eXBlIChTb25pYywgTUFDRSAqLwotI2RlZmluZSBCSV9NQUNfRVRIQkFTRQkJMHg4MDFlCS8qIE1hYyBidWlsdGluIGV0aGVybmV0IGJhc2UgYWRkcmVzcyAqLwotI2RlZmluZSBCSV9NQUNfUE1VCQkweDgwMWYJLyogTWFjIHBvd2VyIG1hbmFnZW1lbnQgLyBwb3dlcm9mZiBoYXJkd2FyZSAqLwotI2RlZmluZSBCSV9NQUNfSU9QX1NXSU0JCTB4ODAyMAkvKiBNYWMgU1dJTSBmbG9wcHkgSU9QICovCi0jZGVmaW5lIEJJX01BQ19JT1BfQURCCQkweDgwMjEJLyogTWFjIEFEQiBJT1AgKi8KLQotICAgIC8qCi0gICAgICogTWFjOiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGJvb3RlciBkYXRhIGZvcm1hdCAodGVtcG9yYXJpbHkpCi0gICAgICogRmllbGRzIHVudXNlZCB3aXRoIHRoZSBuZXcgYm9vdGluZm8gY2FuIGJlIGRlbGV0ZWQgbm93OyBpbnN0ZWFkIG9mCi0gICAgICogYWRkaW5nIG5ldyBmaWVsZHMgdGhlIHN0cnVjdCBtaWdodCBiZSBzcGxpdHRlZCBpbnRvIGEgaGFyZHdhcmUgYWRkcmVzcwotICAgICAqIHBhcnQgYW5kIGEgaGFyZHdhcmUgdHlwZSBwYXJ0Ci0gICAgICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXN0cnVjdCBtYWNfYm9vdGVyX2RhdGEKLXsKLQl1bnNpZ25lZCBsb25nIHZpZGVvYWRkcjsKLQl1bnNpZ25lZCBsb25nIHZpZGVvcm93OwotCXVuc2lnbmVkIGxvbmcgdmlkZW9kZXB0aDsKLQl1bnNpZ25lZCBsb25nIGRpbWVuc2lvbnM7Ci0JdW5zaWduZWQgbG9uZyBhcmdzOwotCXVuc2lnbmVkIGxvbmcgYm9vdHRpbWU7Ci0JdW5zaWduZWQgbG9uZyBnbXRiaWFzOwotCXVuc2lnbmVkIGxvbmcgYm9vdHZlcjsKLQl1bnNpZ25lZCBsb25nIHZpZGVvbG9naWNhbDsKLQl1bnNpZ25lZCBsb25nIHNjY2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBpZDsKLQl1bnNpZ25lZCBsb25nIG1lbXNpemU7Ci0JdW5zaWduZWQgbG9uZyBzZXJpYWxtZjsKLQl1bnNpZ25lZCBsb25nIHNlcmlhbGhzazsKLQl1bnNpZ25lZCBsb25nIHNlcmlhbGdwaTsKLQl1bnNpZ25lZCBsb25nIHByaW50bWY7Ci0JdW5zaWduZWQgbG9uZyBwcmludGhzazsKLQl1bnNpZ25lZCBsb25nIHByaW50Z3BpOwotCXVuc2lnbmVkIGxvbmcgY3B1aWQ7Ci0JdW5zaWduZWQgbG9uZyByb21iYXNlOwotCXVuc2lnbmVkIGxvbmcgYWRiZGVsYXk7Ci0JdW5zaWduZWQgbG9uZyB0aW1lZGJyYTsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgbWFjX2Jvb3Rlcl9kYXRhCi0JbWFjX2JpX2RhdGE7Ci0KLSNlbmRpZgotCi0gICAgLyoKLSAgICAgKiAgQXBvbGxvLXNwZWNpZmljIHRhZ3MKLSAgICAgKi8KLQotI2RlZmluZSBCSV9BUE9MTE9fTU9ERUwgICAgICAgICAweDgwMDAgIC8qIG1vZGVsICh1X2xvbmcpICovCi0KLSAgICAvKgotICAgICAqICBIUDMwMC1zcGVjaWZpYyB0YWdzCi0gICAgICovCi0KLSNkZWZpbmUgQklfSFAzMDBfTU9ERUwJCTB4ODAwMAkvKiBtb2RlbCAodV9sb25nKSAqLwotI2RlZmluZSBCSV9IUDMwMF9VQVJUX1NDT0RFCTB4ODAwMQkvKiBVQVJUIHNlbGVjdCBjb2RlICh1X2xvbmcpICovCi0jZGVmaW5lIEJJX0hQMzAwX1VBUlRfQUREUgkweDgwMDIJLyogcGh5cy4gYWRkciBvZiBVQVJUICh1X2xvbmcpICovCi0KLSAgICAvKgotICAgICAqIFN0dWZmIGZvciBib290aW5mbyBpbnRlcmZhY2UgdmVyc2lvbmluZwotICAgICAqCi0gICAgICogQXQgdGhlIHN0YXJ0IG9mIGtlcm5lbCBjb2RlLCBhICdzdHJ1Y3QgYm9vdHZlcnNpb24nIGlzIGxvY2F0ZWQuCi0gICAgICogYm9vdHN0cmFwIGNoZWNrcyBmb3IgYSBtYXRjaGluZyB2ZXJzaW9uIG9mIHRoZSBpbnRlcmZhY2UgYmVmb3JlIGJvb3RpbmcKLSAgICAgKiBhIGtlcm5lbCwgdG8gYXZvaWQgdXNlciBjb25mdXNpb24gaWYga2VybmVsIGFuZCBib290c3RyYXAgZG9uJ3Qgd29yawotICAgICAqIHRvZ2V0aGVyIDotKQotICAgICAqCi0gICAgICogSWYgaW5jb21wYXRpYmxlIGNoYW5nZXMgYXJlIG1hZGUgdG8gdGhlIGJvb3RpbmZvIGludGVyZmFjZSwgdGhlIG1ham9yCi0gICAgICogbnVtYmVyIGJlbG93IHNob3VsZCBiZSBzdGVwcGVkIChhbmQgdGhlIG1pbm9yIHJlc2V0IHRvIDApIGZvciB0aGUKLSAgICAgKiBhcHByb3ByaWF0ZSBtYWNoaW5lLiBJZiBhIGNoYW5nZSBpcyBiYWNrd2FyZC1jb21wYXRpYmxlLCB0aGUgbWlub3IKLSAgICAgKiBzaG91bGQgYmUgc3RlcHBlZC4gIkJhY2t3YXJkcy1jb21wYXRpYmxlIiBtZWFucyB0aGF0IGJvb3Rpbmcgd2lsbCB3b3JrLAotICAgICAqIGJ1dCBjZXJ0YWluIGZlYXR1cmVzIG1heSBub3QuCi0gICAgICovCi0KLSNkZWZpbmUgQk9PVElORk9WX01BR0lDCQkJMHg0MjQ5NTYxQQkvKiAnQklWXlonICovCi0jZGVmaW5lIE1LX0JJX1ZFUlNJT04obWFqb3IsbWlub3IpCSgoKG1ham9yKTw8MTYpKyhtaW5vcikpCi0jZGVmaW5lIEJJX1ZFUlNJT05fTUFKT1IodikJCSgoKHYpID4+IDE2KSAmIDB4ZmZmZikKLSNkZWZpbmUgQklfVkVSU0lPTl9NSU5PUih2KQkJKCh2KSAmIDB4ZmZmZikKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotc3RydWN0IGJvb3R2ZXJzaW9uIHsKLSAgICB1bnNpZ25lZCBzaG9ydCBicmFuY2g7Ci0gICAgdW5zaWduZWQgbG9uZyBtYWdpYzsKLSAgICBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgbWFjaHR5cGU7Ci0JdW5zaWduZWQgbG9uZyB2ZXJzaW9uOwotICAgIH0gbWFjaHZlcnNpb25zWzBdOwotfTsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIEFNSUdBX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMiwgMCApCi0jZGVmaW5lIEFUQVJJX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMiwgMSApCi0jZGVmaW5lIE1BQ19CT09USV9WRVJTSU9OICAgICAgTUtfQklfVkVSU0lPTiggMiwgMCApCi0jZGVmaW5lIE1WTUUxNDdfQk9PVElfVkVSU0lPTiAgTUtfQklfVkVSU0lPTiggMiwgMCApCi0jZGVmaW5lIE1WTUUxNnhfQk9PVElfVkVSU0lPTiAgTUtfQklfVkVSU0lPTiggMiwgMCApCi0jZGVmaW5lIEJWTUU2MDAwX0JPT1RJX1ZFUlNJT04gTUtfQklfVkVSU0lPTiggMiwgMCApCi0jZGVmaW5lIFE0MF9CT09USV9WRVJTSU9OICAgICAgTUtfQklfVkVSU0lPTiggMiwgMCApCi0jZGVmaW5lIEhQMzAwX0JPT1RJX1ZFUlNJT04gICAgTUtfQklfVkVSU0lPTiggMiwgMCApCi0KLSNpZmRlZiBCT09USU5GT19DT01QQVRfMV8wCi0KLSAgICAvKgotICAgICAqICBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGJvb3RpbmZvIGludGVyZmFjZSB2ZXJzaW9uIDEuMAotICAgICAqLwotCi0jZGVmaW5lIENPTVBBVF9BTUlHQV9CT09USV9WRVJTSU9OICAgIE1LX0JJX1ZFUlNJT04oIDEsIDAgKQotI2RlZmluZSBDT01QQVRfQVRBUklfQk9PVElfVkVSU0lPTiAgICBNS19CSV9WRVJTSU9OKCAxLCAwICkKLSNkZWZpbmUgQ09NUEFUX01BQ19CT09USV9WRVJTSU9OICAgICAgTUtfQklfVkVSU0lPTiggMSwgMCApCi0KLSNpbmNsdWRlIDxsaW51eC96b3Jyby5oPgotCi0jZGVmaW5lIENPTVBBVF9OVU1fQVVUTyAgICAxNgotCi1zdHJ1Y3QgY29tcGF0X2JpX0FtaWdhIHsKLSAgICBpbnQgbW9kZWw7Ci0gICAgaW50IG51bV9hdXRvY29uOwotICAgIHN0cnVjdCBDb25maWdEZXYgYXV0b2NvbltDT01QQVRfTlVNX0FVVE9dOwotICAgIHVuc2lnbmVkIGxvbmcgY2hpcF9zaXplOwotICAgIHVuc2lnbmVkIGNoYXIgdmJsYW5rOwotICAgIHVuc2lnbmVkIGNoYXIgcHNmcmVxOwotICAgIHVuc2lnbmVkIGxvbmcgZWNsb2NrOwotICAgIHVuc2lnbmVkIGxvbmcgY2hpcHNldDsKLSAgICB1bnNpZ25lZCBsb25nIGh3X3ByZXNlbnQ7Ci19OwotCi1zdHJ1Y3QgY29tcGF0X2JpX0F0YXJpIHsKLSAgICB1bnNpZ25lZCBsb25nIGh3X3ByZXNlbnQ7Ci0gICAgdW5zaWduZWQgbG9uZyBtY2hfY29va2llOwotfTsKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotc3RydWN0IGNvbXBhdF9iaV9NYWNpbnRvc2gKLXsKLQl1bnNpZ25lZCBsb25nIHZpZGVvYWRkcjsKLQl1bnNpZ25lZCBsb25nIHZpZGVvcm93OwotCXVuc2lnbmVkIGxvbmcgdmlkZW9kZXB0aDsKLQl1bnNpZ25lZCBsb25nIGRpbWVuc2lvbnM7Ci0JdW5zaWduZWQgbG9uZyBhcmdzOwotCXVuc2lnbmVkIGxvbmcgYm9vdHRpbWU7Ci0JdW5zaWduZWQgbG9uZyBnbXRiaWFzOwotCXVuc2lnbmVkIGxvbmcgYm9vdHZlcjsKLQl1bnNpZ25lZCBsb25nIHZpZGVvbG9naWNhbDsKLQl1bnNpZ25lZCBsb25nIHNjY2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBpZDsKLQl1bnNpZ25lZCBsb25nIG1lbXNpemU7Ci0JdW5zaWduZWQgbG9uZyBzZXJpYWxtZjsKLQl1bnNpZ25lZCBsb25nIHNlcmlhbGhzazsKLQl1bnNpZ25lZCBsb25nIHNlcmlhbGdwaTsKLQl1bnNpZ25lZCBsb25nIHByaW50bWY7Ci0JdW5zaWduZWQgbG9uZyBwcmludGhzazsKLQl1bnNpZ25lZCBsb25nIHByaW50Z3BpOwotCXVuc2lnbmVkIGxvbmcgY3B1aWQ7Ci0JdW5zaWduZWQgbG9uZyByb21iYXNlOwotCXVuc2lnbmVkIGxvbmcgYWRiZGVsYXk7Ci0JdW5zaWduZWQgbG9uZyB0aW1lZGJyYTsKLX07Ci0KLSNlbmRpZgotCi1zdHJ1Y3QgY29tcGF0X21lbV9pbmZvIHsKLSAgICB1bnNpZ25lZCBsb25nIGFkZHI7Ci0gICAgdW5zaWduZWQgbG9uZyBzaXplOwotfTsKLQotI2RlZmluZSBDT01QQVRfTlVNX01FTUlORk8gIDQKLQotI2RlZmluZSBDT01QQVRfQ1BVQl82ODAyMCAwCi0jZGVmaW5lIENPTVBBVF9DUFVCXzY4MDMwIDEKLSNkZWZpbmUgQ09NUEFUX0NQVUJfNjgwNDAgMgotI2RlZmluZSBDT01QQVRfQ1BVQl82ODA2MCAzCi0jZGVmaW5lIENPTVBBVF9GUFVCXzY4ODgxIDUKLSNkZWZpbmUgQ09NUEFUX0ZQVUJfNjg4ODIgNgotI2RlZmluZSBDT01QQVRfRlBVQl82ODA0MCA3Ci0jZGVmaW5lIENPTVBBVF9GUFVCXzY4MDYwIDgKLQotI2RlZmluZSBDT01QQVRfQ1BVXzY4MDIwICAgICgxPDxDT01QQVRfQ1BVQl82ODAyMCkKLSNkZWZpbmUgQ09NUEFUX0NQVV82ODAzMCAgICAoMTw8Q09NUEFUX0NQVUJfNjgwMzApCi0jZGVmaW5lIENPTVBBVF9DUFVfNjgwNDAgICAgKDE8PENPTVBBVF9DUFVCXzY4MDQwKQotI2RlZmluZSBDT01QQVRfQ1BVXzY4MDYwICAgICgxPDxDT01QQVRfQ1BVQl82ODA2MCkKLSNkZWZpbmUgQ09NUEFUX0NQVV9NQVNLICAgICAoMzEpCi0jZGVmaW5lIENPTVBBVF9GUFVfNjg4ODEgICAgKDE8PENPTVBBVF9GUFVCXzY4ODgxKQotI2RlZmluZSBDT01QQVRfRlBVXzY4ODgyICAgICgxPDxDT01QQVRfRlBVQl82ODg4MikKLSNkZWZpbmUgQ09NUEFUX0ZQVV82ODA0MCAgICAoMTw8Q09NUEFUX0ZQVUJfNjgwNDApCi0jZGVmaW5lIENPTVBBVF9GUFVfNjgwNjAgICAgKDE8PENPTVBBVF9GUFVCXzY4MDYwKQotI2RlZmluZSBDT01QQVRfRlBVX01BU0sgICAgICgweGZlMCkKLQotI2RlZmluZSBDT01QQVRfQ0xfU0laRSAgICAgICgyNTYpCi0KLXN0cnVjdCBjb21wYXRfYm9vdGluZm8gewotICAgIHVuc2lnbmVkIGxvbmcgbWFjaHR5cGU7Ci0gICAgdW5zaWduZWQgbG9uZyBjcHV0eXBlOwotICAgIHN0cnVjdCBjb21wYXRfbWVtX2luZm8gbWVtb3J5W0NPTVBBVF9OVU1fTUVNSU5GT107Ci0gICAgaW50IG51bV9tZW1vcnk7Ci0gICAgdW5zaWduZWQgbG9uZyByYW1kaXNrX3NpemU7Ci0gICAgdW5zaWduZWQgbG9uZyByYW1kaXNrX2FkZHI7Ci0gICAgY2hhciBjb21tYW5kX2xpbmVbQ09NUEFUX0NMX1NJWkVdOwotICAgIHVuaW9uIHsKLQlzdHJ1Y3QgY29tcGF0X2JpX0FtaWdhICAgICBiaV9hbWk7Ci0Jc3RydWN0IGNvbXBhdF9iaV9BdGFyaSAgICAgYmlfYXRhOwotCXN0cnVjdCBjb21wYXRfYmlfTWFjaW50b3NoIGJpX21hYzsKLSAgICB9IGJpX3VuOwotfTsKLQotI2RlZmluZSBiaV9hbWlnYQliaV91bi5iaV9hbWkKLSNkZWZpbmUgYmlfYXRhcmkJYmlfdW4uYmlfYXRhCi0jZGVmaW5lIGJpX21hYwkJYmlfdW4uYmlfbWFjCi0KLSNlbmRpZiAvKiBCT09USU5GT19DT01QQVRfMV8wICovCi0KLQotI2VuZGlmIC8qIF9NNjhLX0JPT1RJTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ib290aW5mb19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMmU1MjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Jvb3RpbmZvX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLQotLyogTm90aGluZyBmb3IgbTY4a25vbW11ICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnLmgKaW5kZXggOTk3ZTA5NC4uZWY5YTJlNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Zy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWcuaApAQCAtMSw1ICsxLDMwIEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJidWdfbm8uaCIKKyNpZm5kZWYgX002OEtfQlVHX0gKKyNkZWZpbmUgX002OEtfQlVHX0gKKworI2lmZGVmIENPTkZJR19NTVUKKyNpZmRlZiBDT05GSUdfQlVHCisjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKKyNpZm5kZWYgQ09ORklHX1NVTjMKKyNkZWZpbmUgQlVHKCkgZG8geyBcCisJcHJpbnRrKCJrZXJuZWwgQlVHIGF0ICVzOiVkIVxuIiwgX19GSUxFX18sIF9fTElORV9fKTsgXAorCV9fYnVpbHRpbl90cmFwKCk7IFwKK30gd2hpbGUgKDApCiAjZWxzZQotI2luY2x1ZGUgImJ1Z19tbS5oIgorI2RlZmluZSBCVUcoKSBkbyB7IFwKKwlwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCisJcGFuaWMoIkJVRyEiKTsgXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgQlVHKCkgZG8geyBcCisJX19idWlsdGluX3RyYXAoKTsgXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTViNTI4ZC4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jaWZuZGVmIF9NNjhLX0JVR19ICi0jZGVmaW5lIF9NNjhLX0JVR19ICi0KLQotI2lmZGVmIENPTkZJR19CVUcKLSNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQotI2lmbmRlZiBDT05GSUdfU1VOMwotI2RlZmluZSBCVUcoKSBkbyB7IFwKLQlwcmludGsoImtlcm5lbCBCVUcgYXQgJXM6JWQhXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyBcCi0JX19idWlsdGluX3RyYXAoKTsgXAotfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIEJVRygpIGRvIHsgXAotCXByaW50aygia2VybmVsIEJVRyBhdCAlczolZCFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKLQlwYW5pYygiQlVHISIpOyBcCi19IHdoaWxlICgwKQotI2VuZGlmCi0jZWxzZQotI2RlZmluZSBCVUcoKSBkbyB7IFwKLQlfX2J1aWx0aW5fdHJhcCgpOyBcCi19IHdoaWxlICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgSEFWRV9BUkNIX0JVRwotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9idWcuaD4KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZTdkYzAuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z19uby5oCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jaWZuZGVmIF9NNjhLTk9NTVVfQlVHX0gKLSNkZWZpbmUgX002OEtOT01NVV9CVUdfSAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVncy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z3MuaAppbmRleCAwMWYwNDdkLi5kMDYyMDdiIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVncy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdzLmgKQEAgLTEsNSArMSwyMCBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAiYnVnc19uby5oIgorLyoKKyAqICBpbmNsdWRlL2FzbS1tNjhrL2J1Z3MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTQgIExpbnVzIFRvcnZhbGRzCisgKi8KKworLyoKKyAqIFRoaXMgaXMgaW5jbHVkZWQgYnkgaW5pdC9tYWluLmMgdG8gY2hlY2sgZm9yIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgYnVncy4KKyAqCisgKiBOZWVkczoKKyAqCXZvaWQgY2hlY2tfYnVncyh2b2lkKTsKKyAqLworCisjaWZkZWYgQ09ORklHX01NVQorZXh0ZXJuIHZvaWQgY2hlY2tfYnVncyh2b2lkKTsJLyogaW4gYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jICovCiAjZWxzZQotI2luY2x1ZGUgImJ1Z3NfbW0uaCIKK3N0YXRpYyB2b2lkIGNoZWNrX2J1Z3Modm9pZCkKK3sKK30KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z3NfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9idWdzX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMTkzNTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z3NfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLS8qCi0gKiAgaW5jbHVkZS9hc20tbTY4ay9idWdzLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk0ICBMaW51cyBUb3J2YWxkcwotICovCi0KLS8qCi0gKiBUaGlzIGlzIGluY2x1ZGVkIGJ5IGluaXQvbWFpbi5jIHRvIGNoZWNrIGZvciBhcmNoaXRlY3R1cmUtZGVwZW5kZW50IGJ1Z3MuCi0gKgotICogTmVlZHM6Ci0gKgl2b2lkIGNoZWNrX2J1Z3Modm9pZCk7Ci0gKi8KLQotZXh0ZXJuIHZvaWQgY2hlY2tfYnVncyh2b2lkKTsJLyogaW4gYXJjaC9tNjhrL2tlcm5lbC9zZXR1cC5jICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnc19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2J1Z3Nfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYzODJkYS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYnVnc19uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoKLSAqICBpbmNsdWRlL2FzbS1tNjhrL2J1Z3MuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTQgIExpbnVzIFRvcnZhbGRzCi0gKi8KLQotLyoKLSAqIFRoaXMgaXMgaW5jbHVkZWQgYnkgaW5pdC9tYWluLmMgdG8gY2hlY2sgZm9yIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgYnVncy4KLSAqCi0gKiBOZWVkczoKLSAqCXZvaWQgY2hlY2tfYnVncyh2b2lkKTsKLSAqLwotCi1zdGF0aWMgdm9pZCBjaGVja19idWdzKHZvaWQpCi17Ci19CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jYWNoZS5oCmluZGV4IDU5OWMyOWIuLmZlZDNmZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jYWNoZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC0xLDUgKzEsMTEgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImNhY2hlX25vLmgiCi0jZWxzZQotI2luY2x1ZGUgImNhY2hlX21tLmgiCisvKgorICogaW5jbHVkZS9hc20tbTY4ay9jYWNoZS5oCisgKi8KKyNpZm5kZWYgX19BUkNIX002OEtfQ0FDSEVfSAorI2RlZmluZSBfX0FSQ0hfTTY4S19DQUNIRV9ICisKKy8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCisjZGVmaW5lICAgICAgICBMMV9DQUNIRV9TSElGVCAgNAorI2RlZmluZSAgICAgICAgTDFfQ0FDSEVfQllURVMgICgxPDwgTDFfQ0FDSEVfU0hJRlQpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2NhY2hlX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGVfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVkM2ZkMy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGVfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1tNjhrL2NhY2hlLmgKLSAqLwotI2lmbmRlZiBfX0FSQ0hfTTY4S19DQUNIRV9ICi0jZGVmaW5lIF9fQVJDSF9NNjhLX0NBQ0hFX0gKLQotLyogYnl0ZXMgcGVyIEwxIGNhY2hlIGxpbmUgKi8KLSNkZWZpbmUgICAgICAgIEwxX0NBQ0hFX1NISUZUICA0Ci0jZGVmaW5lICAgICAgICBMMV9DQUNIRV9CWVRFUyAgKDE8PCBMMV9DQUNIRV9TSElGVCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY2FjaGVfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jYWNoZV9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGU5ZWFjLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jYWNoZV9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotI2lmbmRlZiBfX0FSQ0hfTTY4S05PTU1VX0NBQ0hFX0gKLSNkZWZpbmUgX19BUkNIX002OEtOT01NVV9DQUNIRV9ICi0KLS8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCi0jZGVmaW5lICAgICAgICBMMV9DQUNIRV9CWVRFUyAgMTYJLyogdGhpcyBuZWVkIHRvIGJlIGF0IGxlYXN0IDEgKi8KLQotLyogbTY4ay1lbGYtZ2NjICAyLjk1LjIgZG9lc24ndCBsaWtlIHRoZXNlICovCi0KLSNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZAotI2RlZmluZSBfX19fY2FjaGVsaW5lX2FsaWduZWQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2N1cnJlbnQuaAppbmRleCA1MWIwNTZkLi45MWZjYzUzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9jdXJyZW50LmgKQEAgLTEsNSArMSwyOCBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAiY3VycmVudF9uby5oIgorI2lmbmRlZiBfTTY4S19DVVJSRU5UX0gKKyNkZWZpbmUgX002OEtfQ1VSUkVOVF9ICisKKyNpZmRlZiBDT05GSUdfTU1VCisKK3JlZ2lzdGVyIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudCBfX2FzbV9fKCIlYTIiKTsKKwogI2Vsc2UKLSNpbmNsdWRlICJjdXJyZW50X21tLmgiCi0jZW5kaWYKKworLyoKKyAqCVJhdGhlciB0aGFuIGRlZGljYXRlIGEgcmVnaXN0ZXIgKGFzIHRoZSBtNjhrIHNvdXJjZSBkb2VzKSwgd2UKKyAqCWp1c3Qga2VlcCBhIGdsb2JhbCwgIHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNoYW5nZSBpdCBhbGwgdG8gYmUKKyAqCWN1cnJlbnQgYW5kIGxvc2UgX2N1cnJlbnRfdGFzay4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmdldF9jdXJyZW50KHZvaWQpCit7CisJcmV0dXJuKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dGFzayk7Cit9CisKKyNkZWZpbmUJY3VycmVudAlnZXRfY3VycmVudCgpCisKKyNlbmRpZiAvKiBDT05GTklHX01NVSAqLworCisjZW5kaWYgLyogIShfTTY4S19DVVJSRU5UX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2N1cnJlbnRfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRlOGY4Yy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaWZuZGVmIF9NNjhLX0NVUlJFTlRfSAotI2RlZmluZSBfTTY4S19DVVJSRU5UX0gKLQotcmVnaXN0ZXIgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50IF9fYXNtX18oIiVhMiIpOwotCi0jZW5kaWYgLyogIShfTTY4S19DVVJSRU5UX0gpICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2N1cnJlbnRfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNlZTBmOS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vY3VycmVudF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotI2lmbmRlZiBfTTY4S05PTU1VX0NVUlJFTlRfSAotI2RlZmluZSBfTTY4S05PTU1VX0NVUlJFTlRfSAotLyoKLSAqCWN1cnJlbnQuaAotICoJKEMpIENvcHlyaWdodCAyMDAwLCBMaW5lbywgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHVjbGludXgub3JnPgotICoJKEMpIENvcHlyaWdodCAyMDAyLCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQotICoKLSAqCXJhdGhlciB0aGFuIGRlZGljYXRlIGEgcmVnaXN0ZXIgKGFzIHRoZSBtNjhrIHNvdXJjZSBkb2VzKSwgd2UKLSAqCWp1c3Qga2VlcCBhIGdsb2JhbCwgIHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IGNoYW5nZSBpdCBhbGwgdG8gYmUKLSAqCWN1cnJlbnQgYW5kIGxvc2UgX2N1cnJlbnRfdGFzay4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLQotc3RydWN0IHRhc2tfc3RydWN0OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X2N1cnJlbnQodm9pZCkKLXsKLQlyZXR1cm4oY3VycmVudF90aHJlYWRfaW5mbygpLT50YXNrKTsKLX0KLQotI2RlZmluZQljdXJyZW50CWdldF9jdXJyZW50KCkKLQotI2VuZGlmIC8qIF9NNjhLTk9NTVVfQ1VSUkVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZGl2NjQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kaXY2NC5oCmluZGV4IGQyMTFkOWY1Li5lZGI2NjE0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZGl2NjQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZGl2NjQuaApAQCAtMSw1ICsxLDM0IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJkaXY2NF9uby5oIgorI2lmbmRlZiBfTTY4S19ESVY2NF9ICisjZGVmaW5lIF9NNjhLX0RJVjY0X0gKKworI2lmZGVmIENPTkZJR19NTVUKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIG4gPSBuIC8gYmFzZTsgcmV0dXJuIHJlbTsgKi8KKworI2RlZmluZSBkb19kaXYobiwgYmFzZSkgKHsJCQkJCVwKKwl1bmlvbiB7CQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyBuMzJbMl07CQkJCVwKKwkJdW5zaWduZWQgbG9uZyBsb25nIG42NDsJCQkJXAorCX0gX19uOwkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3JlbSwgX191cHBlcjsJCQkJXAorCQkJCQkJCQlcCisJX19uLm42NCA9IChuKTsJCQkJCQlcCisJaWYgKChfX3VwcGVyID0gX19uLm4zMlswXSkpIHsJCQkJXAorCQlhc20gKCJkaXZ1bC5sICUyLCUxOiUwIgkJCQlcCisJCQk6ICI9ZCIgKF9fbi5uMzJbMF0pLCAiPWQiIChfX3VwcGVyKQlcCisJCQk6ICJkIiAoYmFzZSksICIwIiAoX19uLm4zMlswXSkpOwlcCisJfQkJCQkJCQlcCisJYXNtICgiZGl2dS5sICUyLCUxOiUwIgkJCQkJXAorCQk6ICI9ZCIgKF9fbi5uMzJbMV0pLCAiPWQiIChfX3JlbSkJCVwKKwkJOiAiZCIgKGJhc2UpLCAiMSIgKF9fdXBwZXIpLCAiMCIgKF9fbi5uMzJbMV0pKTsJXAorCShuKSA9IF9fbi5uNjQ7CQkJCQkJXAorCV9fcmVtOwkJCQkJCQlcCit9KQorCiAjZWxzZQotI2luY2x1ZGUgImRpdjY0X21tLmgiCi0jZW5kaWYKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kaXY2NC5oPgorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworI2VuZGlmIC8qIF9NNjhLX0RJVjY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kaXY2NF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RpdjY0X21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNDNjOTMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RpdjY0X21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jaWZuZGVmIF9NNjhLX0RJVjY0X0gKLSNkZWZpbmUgX002OEtfRElWNjRfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLyogbiA9IG4gLyBiYXNlOyByZXR1cm4gcmVtOyAqLwotCi0jZGVmaW5lIGRvX2RpdihuLCBiYXNlKSAoewkJCQkJXAotCXVuaW9uIHsJCQkJCQkJXAotCQl1bnNpZ25lZCBsb25nIG4zMlsyXTsJCQkJXAotCQl1bnNpZ25lZCBsb25nIGxvbmcgbjY0OwkJCQlcCi0JfSBfX247CQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIF9fcmVtLCBfX3VwcGVyOwkJCQlcCi0JCQkJCQkJCVwKLQlfX24ubjY0ID0gKG4pOwkJCQkJCVwKLQlpZiAoKF9fdXBwZXIgPSBfX24ubjMyWzBdKSkgewkJCQlcCi0JCWFzbSAoImRpdnVsLmwgJTIsJTE6JTAiCQkJCVwKLQkJCTogIj1kIiAoX19uLm4zMlswXSksICI9ZCIgKF9fdXBwZXIpCVwKLQkJCTogImQiIChiYXNlKSwgIjAiIChfX24ubjMyWzBdKSk7CVwKLQl9CQkJCQkJCVwKLQlhc20gKCJkaXZ1LmwgJTIsJTE6JTAiCQkJCQlcCi0JCTogIj1kIiAoX19uLm4zMlsxXSksICI9ZCIgKF9fcmVtKQkJXAotCQk6ICJkIiAoYmFzZSksICIxIiAoX191cHBlciksICIwIiAoX19uLm4zMlsxXSkpOwlcCi0JKG4pID0gX19uLm42NDsJCQkJCQlcCi0JX19yZW07CQkJCQkJCVwKLX0pCi0KLSNlbmRpZiAvKiBfTTY4S19ESVY2NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZGl2NjRfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kaXY2NF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2Q5NzhjLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kaXY2NF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IGY0YTRjNzYuLjI2ZjUwNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xLDUgKzEsMTEyIEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJkbWEtbWFwcGluZ19uby5oIgorI2lmbmRlZiBfTTY4S19ETUFfTUFQUElOR19ICisjZGVmaW5lIF9NNjhLX0RNQV9NQVBQSU5HX0gKKworI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorCitzdHJ1Y3Qgc2NhdHRlcmxpc3Q7CisKKyNpZm5kZWYgQ09ORklHX01NVV9TVU4zCitzdGF0aWMgaW5saW5lIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQoreworCXJldHVybiAxIDw8IEwxX0NBQ0hFX1NISUZUOworfQorCitzdGF0aWMgaW5saW5lIGludCBkbWFfaXNfY29uc2lzdGVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKK2V4dGVybiB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqLCBzaXplX3QsCisJCQkJZG1hX2FkZHJfdCAqLCBnZnBfdCk7CitleHRlcm4gdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICosIHNpemVfdCwKKwkJCSAgICAgIHZvaWQgKiwgZG1hX2FkZHJfdCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJCSAgZG1hX2FkZHJfdCAqaGFuZGxlLCBnZnBfdCBmbGFnKQoreworCXJldHVybiBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBoYW5kbGUsIGZsYWcpOworfQorc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJCXZvaWQgKmFkZHIsIGRtYV9hZGRyX3QgaGFuZGxlKQoreworCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgYWRkciwgaGFuZGxlKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwkvKiB3ZSB1c2UgY29oZXJlbnQgYWxsb2NhdGlvbiwgc28gbm90IG11Y2ggdG8gZG8gaGVyZS4gKi8KK30KKworZXh0ZXJuIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqLCB2b2lkICosIHNpemVfdCwKKwkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCisJCQkJICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7Cit9CisKK2V4dGVybiBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBwYWdlICosCisJCQkgICAgICAgdW5zaWduZWQgbG9uZywgc2l6ZV90IHNpemUsCisJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyZXNzLAorCQkJCSAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKworZXh0ZXJuIGludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwKKwkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24pOworc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJaW50IG5od2VudHJpZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKworZXh0ZXJuIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsCisJCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKK2V4dGVybiB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LAorCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkvKiBqdXN0IHN5bmMgZXZlcnl0aGluZyBmb3Igbm93ICovCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQgKyBzaXplLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwKKwkJCQkJICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgICAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwkvKiBqdXN0IHN5bmMgZXZlcnl0aGluZyBmb3Igbm93ICovCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQgKyBzaXplLCBkaXJlY3Rpb24pOworfQorCitzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaGFuZGxlKQoreworCXJldHVybiAwOworfQorCiAjZWxzZQotI2luY2x1ZGUgImRtYS1tYXBwaW5nX21tLmgiCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmctYnJva2VuLmg+CiAjZW5kaWYKKworI2VuZGlmICAvKiBfTTY4S19ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmdfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZ19tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmY1MDU0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZ19tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLSNpZm5kZWYgX002OEtfRE1BX01BUFBJTkdfSAotI2RlZmluZSBfTTY4S19ETUFfTUFQUElOR19ICi0KLSNpbmNsdWRlIDxhc20vY2FjaGUuaD4KLQotc3RydWN0IHNjYXR0ZXJsaXN0OwotCi0jaWZuZGVmIENPTkZJR19NTVVfU1VOMwotc3RhdGljIGlubGluZSBpbnQgZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQotewotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKLXsKLQlyZXR1cm4gMSA8PCBMMV9DQUNIRV9TSElGVDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG1hX2lzX2NvbnNpc3RlbnQoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQotewotCXJldHVybiAwOwotfQotCi1leHRlcm4gdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LAotCQkJCWRtYV9hZGRyX3QgKiwgZ2ZwX3QpOwotZXh0ZXJuIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqLCBzaXplX3QsCi0JCQkgICAgICB2b2lkICosIGRtYV9hZGRyX3QpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19ub25jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCQkgIGRtYV9hZGRyX3QgKmhhbmRsZSwgZ2ZwX3QgZmxhZykKLXsKLQlyZXR1cm4gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgaGFuZGxlLCBmbGFnKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9ub25jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCQl2b2lkICphZGRyLCBkbWFfYWRkcl90IGhhbmRsZSkKLXsKLQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIGFkZHIsIGhhbmRsZSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgZG1hX2NhY2hlX3N5bmMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCi0JCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci0JLyogd2UgdXNlIGNvaGVyZW50IGFsbG9jYXRpb24sIHNvIG5vdCBtdWNoIHRvIGRvIGhlcmUuICovCi19Ci0KLWV4dGVybiBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqLCBzaXplX3QsCi0JCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAotCQkJCSAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotewotfQotCi1leHRlcm4gZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgcGFnZSAqLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcsIHNpemVfdCBzaXplLAotCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkcmVzcywKLQkJCQkgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci19Ci0KLWV4dGVybiBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsCi0JCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCWludCBuaHdlbnRyaWVzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci19Ci0KLWV4dGVybiB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LAotCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7Ci1leHRlcm4gdm9pZCBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwKLQkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JLyoganVzdCBzeW5jIGV2ZXJ5dGhpbmcgZm9yIG5vdyAqLwotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgZG1hX2hhbmRsZSwgb2Zmc2V0ICsgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBoYW5kbGUsCi0JCQkJCSAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCQkgICAgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JLyoganVzdCBzeW5jIGV2ZXJ5dGhpbmcgZm9yIG5vdyAqLwotCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2hhbmRsZSwgb2Zmc2V0ICsgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1icm9rZW4uaD4KLSNlbmRpZgotCi0jZW5kaWYgIC8qIF9NNjhLX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZ19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NDhmMmIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9ETUFfTUFQUElOR19ICi0jZGVmaW5lIF9NNjhLTk9NTVVfRE1BX01BUFBJTkdfSAotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmctYnJva2VuLmg+Ci0KLSNlbmRpZiAgLyogX002OEtOT01NVV9ETUFfTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggMDRjZTQ4OC4uMGIwZjQ5ZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9lbGYuaApAQCAtMSw1ICsxLDExOSBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAiZWxmX25vLmgiCisjaWZuZGVmIF9fQVNNbTY4a19FTEZfSAorI2RlZmluZSBfX0FTTW02OGtfRUxGX0gKKworLyoKKyAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCisgKi8KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vdXNlci5oPgorCisvKgorICogNjhrIEVMRiByZWxvY2F0aW9uIHR5cGVzCisgKi8KKyNkZWZpbmUgUl82OEtfTk9ORQkwCisjZGVmaW5lIFJfNjhLXzMyCTEKKyNkZWZpbmUgUl82OEtfMTYJMgorI2RlZmluZSBSXzY4S184CQkzCisjZGVmaW5lIFJfNjhLX1BDMzIJNAorI2RlZmluZSBSXzY4S19QQzE2CTUKKyNkZWZpbmUgUl82OEtfUEM4CTYKKyNkZWZpbmUgUl82OEtfR09UMzIJNworI2RlZmluZSBSXzY4S19HT1QxNgk4CisjZGVmaW5lIFJfNjhLX0dPVDgJOQorI2RlZmluZSBSXzY4S19HT1QzMk8JMTAKKyNkZWZpbmUgUl82OEtfR09UMTZPCTExCisjZGVmaW5lIFJfNjhLX0dPVDhPCTEyCisjZGVmaW5lIFJfNjhLX1BMVDMyCTEzCisjZGVmaW5lIFJfNjhLX1BMVDE2CTE0CisjZGVmaW5lIFJfNjhLX1BMVDgJMTUKKyNkZWZpbmUgUl82OEtfUExUMzJPCTE2CisjZGVmaW5lIFJfNjhLX1BMVDE2TwkxNworI2RlZmluZSBSXzY4S19QTFQ4TwkxOAorI2RlZmluZSBSXzY4S19DT1BZCTE5CisjZGVmaW5lIFJfNjhLX0dMT0JfREFUCTIwCisjZGVmaW5lIFJfNjhLX0pNUF9TTE9UCTIxCisjZGVmaW5lIFJfNjhLX1JFTEFUSVZFCTIyCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OworCisjZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IHVzZXJfbTY4a2ZwX3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKKworLyoKKyAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCisgKi8KKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVNXzY4SykKKworLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgorICovCisjZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCisjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTVNCCisjZGVmaW5lIEVMRl9BUkNICUVNXzY4SworCisvKiBGb3IgU1ZSNC9tNjhrIHRoZSBmdW5jdGlvbiBwb2ludGVyIHRvIGJlIHJlZ2lzdGVyZWQgd2l0aCBgYXRleGl0JyBpcworICAgcGFzc2VkIGluICVhMS4gIEFsdGhvdWdoIG15IGNvcHkgb2YgdGhlIEFCSSBoYXMgbm8gc3VjaCBzdGF0ZW1lbnQsIGl0CisgICBpcyBhY3R1YWxseSB1c2VkIG9uIEFTVi4gICovCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJX3ItPmExID0gMAorCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjaWZuZGVmIENPTkZJR19TVU4zCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKICNlbHNlCi0jaW5jbHVkZSAiZWxmX21tLmgiCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTgxOTIKKyNlbmRpZgorCisvKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAorICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCisgICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQorICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KKworI2lmbmRlZiBDT05GSUdfU1VOMworI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgICAgICAgICAweEQwMDAwMDAwVUwKKyNlbHNlCisjZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIDB4MEQ4MDAwMDBVTAorI2VuZGlmCisKKyNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykJCQkJXAorCS8qIEJsZWVjaC4gKi8JCQkJCQkJXAorCXByX3JlZ1swXSA9IHJlZ3MtPmQxOwkJCQkJCVwKKwlwcl9yZWdbMV0gPSByZWdzLT5kMjsJCQkJCQlcCisJcHJfcmVnWzJdID0gcmVncy0+ZDM7CQkJCQkJXAorCXByX3JlZ1szXSA9IHJlZ3MtPmQ0OwkJCQkJCVwKKwlwcl9yZWdbNF0gPSByZWdzLT5kNTsJCQkJCQlcCisJcHJfcmVnWzddID0gcmVncy0+YTA7CQkJCQkJXAorCXByX3JlZ1s4XSA9IHJlZ3MtPmExOwkJCQkJCVwKKwlwcl9yZWdbOV0gPSByZWdzLT5hMjsJCQkJCQlcCisJcHJfcmVnWzE0XSA9IHJlZ3MtPmQwOwkJCQkJCVwKKwlwcl9yZWdbMTVdID0gcmR1c3AoKTsJCQkJCQlcCisJcHJfcmVnWzE2XSA9IHJlZ3MtPm9yaWdfZDA7CQkJCQlcCisJcHJfcmVnWzE3XSA9IHJlZ3MtPnNyOwkJCQkJCVwKKwlwcl9yZWdbMThdID0gcmVncy0+cGM7CQkJCQkJXAorCXByX3JlZ1sxOV0gPSAocmVncy0+Zm9ybWF0IDw8IDEyKSB8IHJlZ3MtPnZlY3RvcjsJCVwKKwl7CQkJCQkJCQlcCisJICBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9ICgoc3RydWN0IHN3aXRjaF9zdGFjayAqKXJlZ3MpIC0gMTsJXAorCSAgcHJfcmVnWzVdID0gc3ctPmQ2OwkJCQkJCVwKKwkgIHByX3JlZ1s2XSA9IHN3LT5kNzsJCQkJCQlcCisJICBwcl9yZWdbMTBdID0gc3ctPmEzOwkJCQkJCVwKKwkgIHByX3JlZ1sxMV0gPSBzdy0+YTQ7CQkJCQkJXAorCSAgcHJfcmVnWzEyXSA9IHN3LT5hNTsJCQkJCQlcCisJICBwcl9yZWdbMTNdID0gc3ctPmE2OwkJCQkJCVwKKwl9CisKKy8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKKyAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gICovCisKKyNkZWZpbmUgRUxGX0hXQ0FQCSgwKQorCisvKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KKyAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCisgICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gICovCisKKyNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKKworI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZl9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZl9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjBmNDllLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9lbGZfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0jaWZuZGVmIF9fQVNNbTY4a19FTEZfSAotI2RlZmluZSBfX0FTTW02OGtfRUxGX0gKLQotLyoKLSAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vdXNlci5oPgotCi0vKgotICogNjhrIEVMRiByZWxvY2F0aW9uIHR5cGVzCi0gKi8KLSNkZWZpbmUgUl82OEtfTk9ORQkwCi0jZGVmaW5lIFJfNjhLXzMyCTEKLSNkZWZpbmUgUl82OEtfMTYJMgotI2RlZmluZSBSXzY4S184CQkzCi0jZGVmaW5lIFJfNjhLX1BDMzIJNAotI2RlZmluZSBSXzY4S19QQzE2CTUKLSNkZWZpbmUgUl82OEtfUEM4CTYKLSNkZWZpbmUgUl82OEtfR09UMzIJNwotI2RlZmluZSBSXzY4S19HT1QxNgk4Ci0jZGVmaW5lIFJfNjhLX0dPVDgJOQotI2RlZmluZSBSXzY4S19HT1QzMk8JMTAKLSNkZWZpbmUgUl82OEtfR09UMTZPCTExCi0jZGVmaW5lIFJfNjhLX0dPVDhPCTEyCi0jZGVmaW5lIFJfNjhLX1BMVDMyCTEzCi0jZGVmaW5lIFJfNjhLX1BMVDE2CTE0Ci0jZGVmaW5lIFJfNjhLX1BMVDgJMTUKLSNkZWZpbmUgUl82OEtfUExUMzJPCTE2Ci0jZGVmaW5lIFJfNjhLX1BMVDE2TwkxNwotI2RlZmluZSBSXzY4S19QTFQ4TwkxOAotI2RlZmluZSBSXzY4S19DT1BZCTE5Ci0jZGVmaW5lIFJfNjhLX0dMT0JfREFUCTIwCi0jZGVmaW5lIFJfNjhLX0pNUF9TTE9UCTIxCi0jZGVmaW5lIFJfNjhLX1JFTEFUSVZFCTIyCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZ3JlZ190OwotCi0jZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mKHN0cnVjdCB1c2VyX3JlZ3Nfc3RydWN0KSAvIHNpemVvZihlbGZfZ3JlZ190KSkKLXR5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107Ci0KLXR5cGVkZWYgc3RydWN0IHVzZXJfbTY4a2ZwX3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKLQotLyoKLSAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCi0gKi8KLSNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCh4KS0+ZV9tYWNoaW5lID09IEVNXzY4SykKLQotLyoKLSAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgotICovCi0jZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzMyCi0jZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTVNCCi0jZGVmaW5lIEVMRl9BUkNICUVNXzY4SwotCi0vKiBGb3IgU1ZSNC9tNjhrIHRoZSBmdW5jdGlvbiBwb2ludGVyIHRvIGJlIHJlZ2lzdGVyZWQgd2l0aCBgYXRleGl0JyBpcwotICAgcGFzc2VkIGluICVhMS4gIEFsdGhvdWdoIG15IGNvcHkgb2YgdGhlIEFCSSBoYXMgbm8gc3VjaCBzdGF0ZW1lbnQsIGl0Ci0gICBpcyBhY3R1YWxseSB1c2VkIG9uIEFTVi4gICovCi0jZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikJX3ItPmExID0gMAotCi0jZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCi0jaWZuZGVmIENPTkZJR19TVU4zCi0jZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTQwOTYKLSNlbHNlCi0jZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFCTgxOTIKLSNlbmRpZgotCi0vKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAotICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCi0gICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQotICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KLQotI2lmbmRlZiBDT05GSUdfU1VOMwotI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgICAgICAgICAweEQwMDAwMDAwVUwKLSNlbHNlCi0jZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgIDB4MEQ4MDAwMDBVTAotI2VuZGlmCi0KLSNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKHByX3JlZywgcmVncykJCQkJXAotCS8qIEJsZWVjaC4gKi8JCQkJCQkJXAotCXByX3JlZ1swXSA9IHJlZ3MtPmQxOwkJCQkJCVwKLQlwcl9yZWdbMV0gPSByZWdzLT5kMjsJCQkJCQlcCi0JcHJfcmVnWzJdID0gcmVncy0+ZDM7CQkJCQkJXAotCXByX3JlZ1szXSA9IHJlZ3MtPmQ0OwkJCQkJCVwKLQlwcl9yZWdbNF0gPSByZWdzLT5kNTsJCQkJCQlcCi0JcHJfcmVnWzddID0gcmVncy0+YTA7CQkJCQkJXAotCXByX3JlZ1s4XSA9IHJlZ3MtPmExOwkJCQkJCVwKLQlwcl9yZWdbOV0gPSByZWdzLT5hMjsJCQkJCQlcCi0JcHJfcmVnWzE0XSA9IHJlZ3MtPmQwOwkJCQkJCVwKLQlwcl9yZWdbMTVdID0gcmR1c3AoKTsJCQkJCQlcCi0JcHJfcmVnWzE2XSA9IHJlZ3MtPm9yaWdfZDA7CQkJCQlcCi0JcHJfcmVnWzE3XSA9IHJlZ3MtPnNyOwkJCQkJCVwKLQlwcl9yZWdbMThdID0gcmVncy0+cGM7CQkJCQkJXAotCXByX3JlZ1sxOV0gPSAocmVncy0+Zm9ybWF0IDw8IDEyKSB8IHJlZ3MtPnZlY3RvcjsJCVwKLQl7CQkJCQkJCQlcCi0JICBzdHJ1Y3Qgc3dpdGNoX3N0YWNrICpzdyA9ICgoc3RydWN0IHN3aXRjaF9zdGFjayAqKXJlZ3MpIC0gMTsJXAotCSAgcHJfcmVnWzVdID0gc3ctPmQ2OwkJCQkJCVwKLQkgIHByX3JlZ1s2XSA9IHN3LT5kNzsJCQkJCQlcCi0JICBwcl9yZWdbMTBdID0gc3ctPmEzOwkJCQkJCVwKLQkgIHByX3JlZ1sxMV0gPSBzdy0+YTQ7CQkJCQkJXAotCSAgcHJfcmVnWzEyXSA9IHN3LT5hNTsJCQkJCQlcCi0JICBwcl9yZWdbMTNdID0gc3ctPmE2OwkJCQkJCVwKLQl9Ci0KLS8qIFRoaXMgeWllbGRzIGEgbWFzayB0aGF0IHVzZXIgcHJvZ3JhbXMgY2FuIHVzZSB0byBmaWd1cmUgb3V0IHdoYXQKLSAgIGluc3RydWN0aW9uIHNldCB0aGlzIGNwdSBzdXBwb3J0cy4gICovCi0KLSNkZWZpbmUgRUxGX0hXQ0FQCSgwKQotCi0vKiBUaGlzIHlpZWxkcyBhIHN0cmluZyB0aGF0IGxkLnNvIHdpbGwgdXNlIHRvIGxvYWQgaW1wbGVtZW50YXRpb24KLSAgIHNwZWNpZmljIGxpYnJhcmllcyBmb3Igb3B0aW1pemF0aW9uLiAgVGhpcyBpcyBtb3JlIHNwZWNpZmljIGluCi0gICBpbnRlbnQgdGhhbiBwb2tpbmcgYXQgdW5hbWUgb3IgL3Byb2MvY3B1aW5mby4gICovCi0KLSNkZWZpbmUgRUxGX1BMQVRGT1JNICAoTlVMTCkKLQotI2RlZmluZSBTRVRfUEVSU09OQUxJVFkoZXgpIHNldF9wZXJzb25hbGl0eShQRVJfTElOVVgpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZl9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2VsZl9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODA0NjgzLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9lbGZfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0jaWZuZGVmIF9fQVNNbTY4a19FTEZfSAotI2RlZmluZSBfX0FTTW02OGtfRUxGX0gKLQotLyoKLSAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vdXNlci5oPgotCi0vKgotICogNjhrIEVMRiByZWxvY2F0aW9uIHR5cGVzCi0gKi8KLSNkZWZpbmUgUl82OEtfTk9ORSAgMAotI2RlZmluZSBSXzY4S18zMiAgICAxCi0jZGVmaW5lIFJfNjhLXzE2ICAgIDIKLSNkZWZpbmUgUl82OEtfOCAgICAgMwotI2RlZmluZSBSXzY4S19QQzMyICA0Ci0jZGVmaW5lIFJfNjhLX1BDMTYgIDUKLSNkZWZpbmUgUl82OEtfUEM4ICAgNgotI2RlZmluZSBSXzY4S19HT1QzMiA3Ci0jZGVmaW5lIFJfNjhLX0dPVDE2IDgKLSNkZWZpbmUgUl82OEtfR09UOCAgOQotI2RlZmluZSBSXzY4S19HT1QzMk8gICAgMTAKLSNkZWZpbmUgUl82OEtfR09UMTZPICAgIDExCi0jZGVmaW5lIFJfNjhLX0dPVDhPIDEyCi0jZGVmaW5lIFJfNjhLX1BMVDMyIDEzCi0jZGVmaW5lIFJfNjhLX1BMVDE2IDE0Ci0jZGVmaW5lIFJfNjhLX1BMVDggIDE1Ci0jZGVmaW5lIFJfNjhLX1BMVDMyTyAgICAxNgotI2RlZmluZSBSXzY4S19QTFQxNk8gICAgMTcKLSNkZWZpbmUgUl82OEtfUExUOE8gMTgKLSNkZWZpbmUgUl82OEtfQ09QWSAgMTkKLSNkZWZpbmUgUl82OEtfR0xPQl9EQVQgIDIwCi0jZGVmaW5lIFJfNjhLX0pNUF9TTE9UICAyMQotI2RlZmluZSBSXzY4S19SRUxBVElWRSAgMjIKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7Ci0KLSNkZWZpbmUgRUxGX05HUkVHIChzaXplb2Yoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQotdHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKLQotdHlwZWRlZiBzdHJ1Y3QgdXNlcl9tNjhrZnBfc3RydWN0IGVsZl9mcHJlZ3NldF90OwotCi0vKgotICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KLSAqLwotI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoKHgpLT5lX21hY2hpbmUgPT0gRU1fNjhLKQotCi0vKgotICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCi0gKi8KLSNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKLSNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJNU0IKLSNkZWZpbmUgRUxGX0FSQ0gJRU1fNjhLCi0KLS8qIEZvciBTVlI0L202OGsgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgcmVnaXN0ZXJlZCB3aXRoIGBhdGV4aXQnIGlzCi0gICBwYXNzZWQgaW4gJWExLiAgQWx0aG91Z2ggbXkgY29weSBvZiB0aGUgQUJJIGhhcyBubyBzdWNoIHN0YXRlbWVudCwgaXQKLSAgIGlzIGFjdHVhbGx5IHVzZWQgb24gQVNWLiAgKi8KLSNkZWZpbmUgRUxGX1BMQVRfSU5JVChfciwgbG9hZF9hZGRyKQlfci0+YTEgPSAwCi0KLSNkZWZpbmUgVVNFX0VMRl9DT1JFX0RVTVAKLSNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUJNDA5NgotCi0vKiBUaGlzIGlzIHRoZSBsb2NhdGlvbiB0aGF0IGFuIEVUX0RZTiBwcm9ncmFtIGlzIGxvYWRlZCBpZiBleGVjJ2VkLiAgVHlwaWNhbAotICAgdXNlIG9mIHRoaXMgaXMgdG8gaW52b2tlICIuL2xkLnNvIHNvbWVwcm9nIiB0byB0ZXN0IG91dCBhIG5ldyB2ZXJzaW9uIG9mCi0gICB0aGUgbG9hZGVyLiAgV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgcHJvZ3JhbQotICAgdGhhdCBpdCB3aWxsICJleGVjIiwgYW5kIHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudCByb29tIGZvciB0aGUgYnJrLiAgKi8KLQotI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgICAgICAgICAweEQwMDAwMDAwVUwKLQotI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKQkJCQlcCi0JLyogQmxlZWNoLiAqLwkJCQkJCQlcCi0JcHJfcmVnWzBdID0gcmVncy0+ZDE7CQkJCQkJXAotCXByX3JlZ1sxXSA9IHJlZ3MtPmQyOwkJCQkJCVwKLQlwcl9yZWdbMl0gPSByZWdzLT5kMzsJCQkJCQlcCi0JcHJfcmVnWzNdID0gcmVncy0+ZDQ7CQkJCQkJXAotCXByX3JlZ1s0XSA9IHJlZ3MtPmQ1OwkJCQkJCVwKLQlwcl9yZWdbN10gPSByZWdzLT5hMDsJCQkJCQlcCi0JcHJfcmVnWzhdID0gcmVncy0+YTE7CQkJCQkJXAotCXByX3JlZ1sxNF0gPSByZWdzLT5kMDsJCQkJCQlcCi0JcHJfcmVnWzE1XSA9IHJkdXNwKCk7CQkJCQkJXAotCXByX3JlZ1sxNl0gPSAwIC8qIHJlZ3MtPm9yaWdfZDAgKi87CQkJCVwKLQlwcl9yZWdbMTddID0gcmVncy0+c3I7CQkJCQkJXAotCXByX3JlZ1sxOF0gPSByZWdzLT5wYzsJCQkJCQlcCi0JLyogcHJfcmVnWzE5XSA9IChyZWdzLT5mb3JtYXQgPDwgMTIpIHwgcmVncy0+dmVjdG9yOyAqLwkJXAotCXsJCQkJCQkJCVwKLQkgIHN0cnVjdCBzd2l0Y2hfc3RhY2sgKnN3ID0gKChzdHJ1Y3Qgc3dpdGNoX3N0YWNrICopcmVncykgLSAxOwlcCi0JICBwcl9yZWdbNV0gPSBzdy0+ZDY7CQkJCQkJXAotCSAgcHJfcmVnWzZdID0gc3ctPmQ3OwkJCQkJCVwKLQkgIHByX3JlZ1sxMF0gPSBzdy0+YTM7CQkJCQkJXAotCSAgcHJfcmVnWzExXSA9IHN3LT5hNDsJCQkJCQlcCi0JICBwcl9yZWdbMTJdID0gc3ctPmE1OwkJCQkJCVwKLQkgIHByX3JlZ1sxM10gPSBzdy0+YTY7CQkJCQkJXAotCX0KLQotLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAotICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgY3B1IHN1cHBvcnRzLiAgKi8KLQotI2RlZmluZSBFTEZfSFdDQVAJKDApCi0KLS8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgotICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KLSAgIGludGVudCB0aGFuIHBva2luZyBhdCB1bmFtZSBvciAvcHJvYy9jcHVpbmZvLiAgKi8KLQotI2RlZmluZSBFTEZfUExBVEZPUk0gIChOVUxMKQotCi0jZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCkgc2V0X3BlcnNvbmFsaXR5KFBFUl9MSU5VWCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZmIuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYi5oCmluZGV4IDk3YmNhZWYuLmJlNGU0YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYi5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYi5oCkBAIC0xLDUgKzEsMzggQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgImZiX25vLmgiCisjaWZuZGVmIF9BU01fRkJfSF8KKyNkZWZpbmUgX0FTTV9GQl9IXworCisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpZmRlZiBDT05GSUdfTU1VCisjaWZkZWYgQ09ORklHX1NVTjMKK3N0YXRpYyBpbmxpbmUgdm9pZCBmYl9wZ3Byb3RlY3Qoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCXVuc2lnbmVkIGxvbmcgb2ZmKQoreworCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IFNVTjNfUEFHRV9OT0NBQ0hFOworfQogI2Vsc2UKLSNpbmNsdWRlICJmYl9tbS5oIgotI2VuZGlmCitzdGF0aWMgaW5saW5lIHZvaWQgZmJfcGdwcm90ZWN0KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQl1bnNpZ25lZCBsb25nIG9mZikKK3sKKwlpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCisJCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IF9QQUdFX05PQ0FDSEUwMzA7CisJaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisJCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpICY9IF9DQUNIRU1BU0swNDA7CisJCS8qIFVzZSBuby1jYWNoZSBtb2RlLCBzZXJpYWxpemVkICovCisJCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IF9QQUdFX05PQ0FDSEVfUzsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX1NVTjMgKi8KKyNlbHNlCisjZGVmaW5lIGZiX3BncHJvdGVjdCguLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworc3RhdGljIGlubGluZSBpbnQgZmJfaXNfcHJpbWFyeV9kZXZpY2Uoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBfQVNNX0ZCX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZmJfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYl9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODBiOTdhLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYl9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotI2lmbmRlZiBfQVNNX0ZCX0hfCi0jZGVmaW5lIF9BU01fRkJfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotCi0jaWZkZWYgQ09ORklHX1NVTjMKLXN0YXRpYyBpbmxpbmUgdm9pZCBmYl9wZ3Byb3RlY3Qoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCXVuc2lnbmVkIGxvbmcgb2ZmKQotewotCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpIHw9IFNVTjNfUEFHRV9OT0NBQ0hFOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBmYl9wZ3Byb3RlY3Qoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCXVuc2lnbmVkIGxvbmcgb2ZmKQotewotCWlmIChDUFVfSVNfMDIwX09SXzAzMCkKLQkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfTk9DQUNIRTAzMDsKLQlpZiAoQ1BVX0lTXzA0MF9PUl8wNjApIHsKLQkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJj0gX0NBQ0hFTUFTSzA0MDsKLQkJLyogVXNlIG5vLWNhY2hlIG1vZGUsIHNlcmlhbGl6ZWQgKi8KLQkJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfTk9DQUNIRV9TOwotCX0KLX0KLSNlbmRpZiAvKiBDT05GSUdfU1VOMyAqLwotCi1zdGF0aWMgaW5saW5lIGludCBmYl9pc19wcmltYXJ5X2RldmljZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIF9BU01fRkJfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYl9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZiX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3ZGYzODAuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZiX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jaWZuZGVmIF9BU01fRkJfSF8KLSNkZWZpbmUgX0FTTV9GQl9IXwotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0KLSNkZWZpbmUgZmJfcGdwcm90ZWN0KC4uLikgZG8ge30gd2hpbGUgKDApCi0KLXN0YXRpYyBpbmxpbmUgaW50IGZiX2lzX3ByaW1hcnlfZGV2aWNlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogX0FTTV9GQl9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZwdS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZwdS5oCmluZGV4IGUxOWJjNWUuLmZmYjZiOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mcHUuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZnB1LmgKQEAgLTEsNSArMSwyMSBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAiZnB1X25vLmgiCisjaWZuZGVmIF9fTTY4S19GUFVfSAorI2RlZmluZSBfX002OEtfRlBVX0gKKworCisvKgorICogTUFYIGZsb2F0aW5nIHBvaW50IHVuaXQgc3RhdGUgc2l6ZSAoRlNBVkUvRlJFU1RPUkUpCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX002ODAyMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDMwKQorI2RlZmluZSBGUFNUQVRFU0laRSAoMjE2KQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDQwKQorI2RlZmluZSBGUFNUQVRFU0laRSAoOTYpCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjhLRlBVX0VNVSkKKyNkZWZpbmUgRlBTVEFURVNJWkUgKDI4KQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorI2RlZmluZSBGUFNUQVRFU0laRSAoMTIpCiAjZWxzZQotI2luY2x1ZGUgImZwdV9tbS5oIgorI2RlZmluZSBGUFNUQVRFU0laRSAoMCkKICNlbmRpZgorCisjZW5kaWYgLyogX19NNjhLX0ZQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZnB1X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZnB1X21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYjZiOGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZwdV9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotI2lmbmRlZiBfX002OEtfRlBVX0gKLSNkZWZpbmUgX19NNjhLX0ZQVV9ICi0KLQotLyoKLSAqIE1BWCBmbG9hdGluZyBwb2ludCB1bml0IHN0YXRlIHNpemUgKEZTQVZFL0ZSRVNUT1JFKQotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDIxNikKLSNlbGlmIGRlZmluZWQoQ09ORklHX002ODA0MCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDk2KQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4S0ZQVV9FTVUpCi0jZGVmaW5lIEZQU1RBVEVTSVpFICgyOCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX002ODA2MCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDEyKQotI2Vsc2UKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDApCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fTTY4S19GUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZwdV9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZwdV9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTZiMmU0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mcHVfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSNpZm5kZWYgX19NNjhLTk9NTVVfRlBVX0gKLSNkZWZpbmUgX19NNjhLTk9NTVVfRlBVX0gKLQotCi0vKgotICogTUFYIGZsb2F0aW5nIHBvaW50IHVuaXQgc3RhdGUgc2l6ZSAoRlNBVkUvRlJFU1RPUkUpCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDIxNi9zaXplb2YodW5zaWduZWQgY2hhcikpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwNDApCi0jZGVmaW5lIEZQU1RBVEVTSVpFICg5Ni9zaXplb2YodW5zaWduZWQgY2hhcikpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNjhLRlBVX0VNVSkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDI4L3NpemVvZih1bnNpZ25lZCBjaGFyKSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX002ODA2MCkKLSNkZWZpbmUgRlBTVEFURVNJWkUgKDEyL3NpemVvZih1bnNpZ25lZCBjaGFyKSkKLSNlbHNlCi0vKiBBc3N1bWUgbm8gRlAgdW5pdCBwcmVzZW50IHRoZW4uLi4gKi8KLSNkZWZpbmUgRlBTVEFURVNJWkUgKDIpIC8qIGR1bW15IHNpemUgKi8KLSNlbmRpZgotCi0jZW5kaWYgLyogX19NNjhLX0ZQVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhOGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2h3X2lycS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2h3X2lycS5oCmluZGV4IGUxOTUyNjAuLmVhY2VmMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaHdfaXJxLmgKQEAgLTEsNSArMSw2IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJod19pcnFfbm8uaCIKLSNlbHNlCi0jaW5jbHVkZSAiaHdfaXJxX21tLmgiCisjaWZuZGVmIF9fQVNNX002OEtfSFdfSVJRX0gKKyNkZWZpbmUgX19BU01fTTY4S19IV19JUlFfSAorCisvKiBEdW1teSBpbmNsdWRlLiAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9od19pcnFfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9od19pcnFfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFjZWYwOS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaHdfaXJxX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX19BU01fTTY4S19IV19JUlFfSAotI2RlZmluZSBfX0FTTV9NNjhLX0hXX0lSUV9ICi0KLS8qIER1bW15IGluY2x1ZGUuICovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2h3X2lycV9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2h3X2lycV9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2VjOWU1Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9od19pcnFfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI2lmbmRlZiBfX002OEtOT01NVV9IV19JUlFfSF9fCi0jZGVmaW5lIF9fTTY4S05PTU1VX0hXX0lSUV9IX18KLQotI2VuZGlmIC8qIF9fTTY4S05PTU1VX0hXX0lSUV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20va21hcF90eXBlcy5oCmluZGV4IDA0NWQ5ZmQuLmM4NDNjNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaApAQCAtMSw1ICsxLDIxIEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJrbWFwX3R5cGVzX25vLmgiCi0jZWxzZQotI2luY2x1ZGUgImttYXBfdHlwZXNfbW0uaCIKLSNlbmRpZgorI2lmbmRlZiBfX0FTTV9NNjhLX0tNQVBfVFlQRVNfSAorI2RlZmluZSBfX0FTTV9NNjhLX0tNQVBfVFlQRVNfSAorCitlbnVtIGttX3R5cGUgeworCUtNX0JPVU5DRV9SRUFELAorCUtNX1NLQl9TVU5SUENfREFUQSwKKwlLTV9TS0JfREFUQV9TT0ZUSVJRLAorCUtNX1VTRVIwLAorCUtNX1VTRVIxLAorCUtNX0JJT19TUkNfSVJRLAorCUtNX0JJT19EU1RfSVJRLAorCUtNX1BURTAsCisJS01fUFRFMSwKKwlLTV9JUlEwLAorCUtNX0lSUTEsCisJS01fU09GVElSUTAsCisJS01fU09GVElSUTEsCisJS01fVFlQRV9OUgorfTsKKworI2VuZGlmCS8qIF9fQVNNX002OEtfS01BUF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20va21hcF90eXBlc19tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXNfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg0M2M2My4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20va21hcF90eXBlc19tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9NNjhLX0tNQVBfVFlQRVNfSAotI2RlZmluZSBfX0FTTV9NNjhLX0tNQVBfVFlQRVNfSAotCi1lbnVtIGttX3R5cGUgewotCUtNX0JPVU5DRV9SRUFELAotCUtNX1NLQl9TVU5SUENfREFUQSwKLQlLTV9TS0JfREFUQV9TT0ZUSVJRLAotCUtNX1VTRVIwLAotCUtNX1VTRVIxLAotCUtNX0JJT19TUkNfSVJRLAotCUtNX0JJT19EU1RfSVJRLAotCUtNX1BURTAsCi0JS01fUFRFMSwKLQlLTV9JUlEwLAotCUtNX0lSUTEsCi0JS01fU09GVElSUTAsCi0JS01fU09GVElSUTEsCi0JS01fVFlQRV9OUgotfTsKLQotI2VuZGlmCS8qIF9fQVNNX002OEtfS01BUF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20va21hcF90eXBlc19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXNfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZiNjcwNy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20va21hcF90eXBlc19uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9NNjhLX0tNQVBfVFlQRVNfSAotI2RlZmluZSBfX0FTTV9NNjhLX0tNQVBfVFlQRVNfSAotCi1lbnVtIGttX3R5cGUgewotCUtNX0JPVU5DRV9SRUFELAotCUtNX1NLQl9TVU5SUENfREFUQSwKLQlLTV9TS0JfREFUQV9TT0ZUSVJRLAotCUtNX1VTRVIwLAotCUtNX1VTRVIxLAotCUtNX0JJT19TUkNfSVJRLAotCUtNX0JJT19EU1RfSVJRLAotCUtNX1BURTAsCi0JS01fUFRFMSwKLQlLTV9JUlEwLAotCUtNX0lSUTEsCi0JS01fU09GVElSUTAsCi0JS01fU09GVElSUTEsCi0JS01fVFlQRV9OUgotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbTUzMnhzaW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTMyeHNpbS5oCmluZGV4IDE4MzVmZDIuLmNlNjAzNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTMyeHNpbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tNTMyeHNpbS5oCkBAIC0xNiw2ICsxNiw3IEBACiAjZGVmaW5lIE1DRklOVF9WRUNCQVNFICAgICAgNjQKICNkZWZpbmUgTUNGSU5UX1VBUlQwICAgICAgICAyNiAgICAgICAgICAvKiBJbnRlcnJ1cHQgbnVtYmVyIGZvciBVQVJUMCAqLwogI2RlZmluZSBNQ0ZJTlRfVUFSVDEgICAgICAgIDI3ICAgICAgICAgIC8qIEludGVycnVwdCBudW1iZXIgZm9yIFVBUlQxICovCisjZGVmaW5lIE1DRklOVF9VQVJUMiAgICAgICAgMjggICAgICAgICAgLyogSW50ZXJydXB0IG51bWJlciBmb3IgVUFSVDIgKi8KIAogI2RlZmluZSBNQ0ZfV1RNX1dDUglNQ0ZfUkVHMTYoMHhGQzA5ODAwMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jMTQ2ODE4cnRjLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWMxNDY4MThydGMuaAppbmRleCBmYjkwZGNmLi45ZjcwYTAxIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWMxNDY4MThydGMuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWMxNDY4MThydGMuaApAQCAtMSw1ICsxLDI2IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJtYzE0NjgxOHJ0Y19uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJtYzE0NjgxOHJ0Y19tbS5oIgotI2VuZGlmCisvKgorICogTWFjaGluZSBkZXBlbmRlbnQgYWNjZXNzIGZ1bmN0aW9ucyBmb3IgUlRDIHJlZ2lzdGVycy4KKyAqLworI2lmbmRlZiBfQVNNX01DMTQ2ODE4UlRDX0gKKyNkZWZpbmUgX0FTTV9NQzE0NjgxOFJUQ19ICisKKworI2lmZGVmIENPTkZJR19BVEFSSQorLyogUlRDIGluIEF0YXJpIG1hY2hpbmVzICovCisKKyNpbmNsdWRlIDxhc20vYXRhcmlody5oPgorCisjZGVmaW5lIFJUQ19QT1JUKHgpCShUVF9SVENfQkFTICsgMiooeCkpCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNECTAKKworI2RlZmluZSBDTU9TX1JFQUQoYWRkcikgKHsgXAorYXRhcmlfb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7IFwKK2F0YXJpX2luYl9wKFJUQ19QT1JUKDEpKTsgXAorfSkKKyNkZWZpbmUgQ01PU19XUklURSh2YWwsIGFkZHIpICh7IFwKK2F0YXJpX291dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyBcCithdGFyaV9vdXRiX3AoKHZhbCksUlRDX1BPUlQoMSkpOyBcCit9KQorI2VuZGlmIC8qIENPTkZJR19BVEFSSSAqLworCisjZW5kaWYgLyogX0FTTV9NQzE0NjgxOFJUQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWMxNDY4MThydGNfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Y19tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjcwYTAxLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYzE0NjgxOHJ0Y19tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqIE1hY2hpbmUgZGVwZW5kZW50IGFjY2VzcyBmdW5jdGlvbnMgZm9yIFJUQyByZWdpc3RlcnMuCi0gKi8KLSNpZm5kZWYgX0FTTV9NQzE0NjgxOFJUQ19ICi0jZGVmaW5lIF9BU01fTUMxNDY4MThSVENfSAotCi0KLSNpZmRlZiBDT05GSUdfQVRBUkkKLS8qIFJUQyBpbiBBdGFyaSBtYWNoaW5lcyAqLwotCi0jaW5jbHVkZSA8YXNtL2F0YXJpaHcuaD4KLQotI2RlZmluZSBSVENfUE9SVCh4KQkoVFRfUlRDX0JBUyArIDIqKHgpKQotI2RlZmluZSBSVENfQUxXQVlTX0JDRAkwCi0KLSNkZWZpbmUgQ01PU19SRUFEKGFkZHIpICh7IFwKLWF0YXJpX291dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyBcCi1hdGFyaV9pbmJfcChSVENfUE9SVCgxKSk7IFwKLX0pCi0jZGVmaW5lIENNT1NfV1JJVEUodmFsLCBhZGRyKSAoeyBcCi1hdGFyaV9vdXRiX3AoKGFkZHIpLFJUQ19QT1JUKDApKTsgXAotYXRhcmlfb3V0Yl9wKCh2YWwpLFJUQ19QT1JUKDEpKTsgXAotfSkKLSNlbmRpZiAvKiBDT05GSUdfQVRBUkkgKi8KLQotI2VuZGlmIC8qIF9BU01fTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jMTQ2ODE4cnRjX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWMxNDY4MThydGNfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA3YTA0ODEuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jMTQ2ODE4cnRjX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLS8qCi0gKiBNYWNoaW5lIGRlcGVuZGVudCBhY2Nlc3MgZnVuY3Rpb25zIGZvciBSVEMgcmVnaXN0ZXJzLgotICovCi0jaWZuZGVmIF9NNjhLTk9NTVVfTUMxNDY4MThSVENfSAotI2RlZmluZSBfTTY4S05PTU1VX01DMTQ2ODE4UlRDX0gKLQotLyogZW1wdHkgaW5jbHVkZSBmaWxlIHRvIHNhdGlzZnkgdGhlIGluY2x1ZGUgaW4gZ2VucnRjLmMvaWRlLWdlb21ldHJ5LmMgKi8KLQotI2VuZGlmIC8qIF9NNjhLTk9NTVVfTUMxNDY4MThSVENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZnBjaS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21jZnBjaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTUwN2RkLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZwY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqCW1jZnBjaS5oIC0tIFBDSSBicmlkZ2Ugb24gQ29sZEZpcmUgZXZhbCBib2FyZHMuCi0gKgotICoJKEMpIENvcHlyaWdodCAyMDAwLCBHcmVnIFVuZ2VyZXIgKGdlcmdAc25hcGdlYXIuY29tKQotICoJKEMpIENvcHlyaWdodCAyMDAwLCBMaW5lbyBJbmMuICh3d3cubGluZW8uY29tKQotICovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZgltY2ZwY2lfaAotI2RlZmluZQltY2ZwY2lfaAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2lmZGVmIENPTkZJR19QQ0kKLQotLyoKLSAqCUFkZHJlc3MgcmVnaW9ucyBpbiB0aGUgUENJIGFkZHJlc3Mgc3BhY2UgYXJlIG5vdCBtYXBwZWQgaW50byB0aGUKLSAqCW5vcm1hbCBtZW1vcnkgc3BhY2Ugb2YgdGhlIENvbGRGaXJlLiBUaGV5IG11c3QgYmUgYWNjZXNzZWQgdmlhCi0gKgloYW5kbGVyIHJvdXRpbmVzLiBUaGlzIGlzIGVhc3kgZm9yIEkvTyBzcGFjZSAoaW5iL291dGIvZXRjKSBidXQKLSAqCW5lZWRzIHNvbWUgY29kZSBjaGFuZ2VzIHRvIHN1cHBvcnQgb3JkaW5hcnkgbWVtb3J5LiBJbnRlcnJ1cHRzCi0gKglhbHNvIG5lZWQgdG8gYmUgdmVjdG9yZWQgdGhyb3VnaCB0aGUgUENJIGhhbmRsZXIgZmlyc3QsIHRoZW4gaXQKLSAqCXdpbGwgY2FsbCB0aGUgYWN0dWFsIGRyaXZlciBzdWItaGFuZGxlcnMuCi0gKi8KLQotLyoKLSAqCVVuLWRlZmluZSBhbGwgdGhlIHN0YW5kYXJkIEkvTyBhY2Nlc3Mgcm91dGluZXMuCi0gKi8KLSN1bmRlZglpbmIKLSN1bmRlZglpbncKLSN1bmRlZglpbmwKLSN1bmRlZglpbmJfcAotI3VuZGVmCWlud19wCi0jdW5kZWYJaW5zYgotI3VuZGVmCWluc3cKLSN1bmRlZglpbnNsCi0jdW5kZWYJb3V0YgotI3VuZGVmCW91dHcKLSN1bmRlZglvdXRsCi0jdW5kZWYJb3V0Yl9wCi0jdW5kZWYJb3V0d19wCi0jdW5kZWYJb3V0c2IKLSN1bmRlZglvdXRzdwotI3VuZGVmCW91dHNsCi0KLSN1bmRlZglyZXF1ZXN0X2lycQotI3VuZGVmCWZyZWVfaXJxCi0KLSN1bmRlZglidXNfdG9fdmlydAotI3VuZGVmCXZpcnRfdG9fYnVzCi0KLQotLyoKLSAqCVJlLWRpcmVjdCBhbGwgSS9PIG1lbW9yeSBhY2Nlc3NlcyBmdW5jdGlvbnMgdG8gUENJIHNwZWNpZmljIG9uZXMuCi0gKi8KLSNkZWZpbmUJaW5iCXBjaV9pbmIKLSNkZWZpbmUJaW53CXBjaV9pbncKLSNkZWZpbmUJaW5sCXBjaV9pbmwKLSNkZWZpbmUJaW5iX3AJcGNpX2luYgotI2RlZmluZQlpbndfcAlwY2lfaW53Ci0jZGVmaW5lCWluc2IJcGNpX2luc2IKLSNkZWZpbmUJaW5zdwlwY2lfaW5zdwotI2RlZmluZQlpbnNsCXBjaV9pbnNsCi0KLSNkZWZpbmUJb3V0YglwY2lfb3V0YgotI2RlZmluZQlvdXR3CXBjaV9vdXR3Ci0jZGVmaW5lCW91dGwJcGNpX291dGwKLSNkZWZpbmUJb3V0Yl9wCXBjaV9vdXRiCi0jZGVmaW5lCW91dHdfcAlwY2lfb3V0dwotI2RlZmluZQlvdXRzYglwY2lfb3V0c2IKLSNkZWZpbmUJb3V0c3cJcGNpX291dHN3Ci0jZGVmaW5lCW91dHNsCXBjaV9vdXRzbAotCi0jZGVmaW5lCXJlcXVlc3RfaXJxCXBjaV9yZXF1ZXN0X2lycQotI2RlZmluZQlmcmVlX2lycQlwY2lfZnJlZV9pcnEKLQotI2RlZmluZQl2aXJ0X3RvX2J1cwlwY2lfdmlydF90b19idXMKLSNkZWZpbmUJYnVzX3RvX3ZpcnQJcGNpX2J1c190b192aXJ0Ci0KLSNkZWZpbmUJQ09ORklHX0NPTUVNUENJCTEKLQotCi0vKgotICoJUHJvdG90eXBlcyBvZiB0aGUgcmVhbCBQQ0kgZnVuY3Rpb25zIChkZWZpbmVkIGluIGJpb3MzMi5jKS4KLSAqLwotdW5zaWduZWQgY2hhcglwY2lfaW5iKHVuc2lnbmVkIGludCBhZGRyKTsKLXVuc2lnbmVkIHNob3J0CXBjaV9pbncodW5zaWduZWQgaW50IGFkZHIpOwotdW5zaWduZWQgaW50CXBjaV9pbmwodW5zaWduZWQgaW50IGFkZHIpOwotdm9pZAkJcGNpX2luc2Iodm9pZCAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKTsKLXZvaWQJCXBjaV9pbnN3KHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbik7Ci12b2lkCQlwY2lfaW5zbCh2b2lkICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pOwotCi12b2lkCQlwY2lfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbCwgdW5zaWduZWQgaW50IGFkZHIpOwotdm9pZAkJcGNpX291dHcodW5zaWduZWQgc2hvcnQgdmFsLCB1bnNpZ25lZCBpbnQgYWRkcik7Ci12b2lkCQlwY2lfb3V0bCh1bnNpZ25lZCBpbnQgdmFsLCB1bnNpZ25lZCBpbnQgYWRkcik7Ci12b2lkCQlwY2lfb3V0c2Iodm9pZCAqYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuKTsKLXZvaWQJCXBjaV9vdXRzdyh2b2lkICphZGRyLCB2b2lkICpidWYsIGludCBsZW4pOwotdm9pZAkJcGNpX291dHNsKHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbik7Ci0KLWludAkJcGNpX3JlcXVlc3RfaXJxKHVuc2lnbmVkIGludCBpcnEsCi0JCQl2b2lkICgqaGFuZGxlcikoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopLAotCQkJdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCWNvbnN0IGNoYXIgKmRldmljZSwKLQkJCXZvaWQgKmRldl9pZCk7Ci12b2lkCQlwY2lfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLQotdm9pZAkJKnBjaV9ibWFsbG9jKGludCBzaXplKTsKLXZvaWQJCXBjaV9ibWZyZWUodm9pZCAqYm1wLCBpbnQgbGVuKTsKLXZvaWQJCXBjaV9jb3B5dG9zaG1lbSh1bnNpZ25lZCBsb25nIGJtcCwgdm9pZCAqc3JjLCBpbnQgc2l6ZSk7Ci12b2lkCQlwY2lfY29weWZyb21zaG1lbSh2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgYm1wLCBpbnQgc2l6ZSk7Ci11bnNpZ25lZCBsb25nCXBjaV92aXJ0X3RvX2J1cyh2b2xhdGlsZSB2b2lkICphZGRyZXNzKTsKLXZvaWQJCSpwY2lfYnVzX3RvX3ZpcnQodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKLXZvaWQJCXBjaV9ibWNweXRvKHZvaWQgKmRzdCwgdm9pZCAqc3JjLCBpbnQgbGVuKTsKLXZvaWQJCXBjaV9ibWNweWZyb20odm9pZCAqZHN0LCB2b2lkICpzcmMsIGludCBsZW4pOwotCi0jZW5kaWYgLyogQ09ORklHX1BDSSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZW5kaWYJLyogbWNmcGNpX2ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXUuaAppbmRleCBhODFkMzk0Li44YTExYTYzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdS5oCkBAIC0xLDUgKzEsMTMgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgIm1tdV9uby5oIgorI2lmbmRlZiBfX01NVV9ICisjZGVmaW5lIF9fTU1VX0gKKworI2lmZGVmIENPTkZJR19NTVUKKy8qIERlZmF1bHQgInVuc2lnbmVkIGxvbmciIGNvbnRleHQgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X3Q7CiAjZWxzZQotI2luY2x1ZGUgIm1tdV9tbS5oIgordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcJCWVuZF9icms7Cit9IG1tX2NvbnRleHRfdDsKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggYjQ0MDkyOC4uN2Q0MzQxZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTEsNSArMSwxNzUgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgIm1tdV9jb250ZXh0X25vLmgiCisjaWZuZGVmIF9fTTY4S19NTVVfQ09OVEVYVF9ICisjZGVmaW5lIF9fTTY4S19NTVVfQ09OVEVYVF9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbV9ob29rcy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworfQorCisjaWZkZWYgQ09ORklHX01NVQorI2lmbmRlZiBDT05GSUdfU1VOMworCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorCitzdGF0aWMgaW5saW5lIGludCBpbml0X25ld19jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCW1tLT5jb250ZXh0ID0gdmlydF90b19waHlzKG1tLT5wZ2QpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkJCWRvIHsgfSB3aGlsZSgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tXzAyMzAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyBjcnBbMl0gPSB7CisJCTB4ODAwMDAwMDAgfCBfUEFHRV9UQUJMRSwgbW0tPmNvbnRleHQKKwl9OworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJYXNtIHZvbGF0aWxlICgiLmNoaXAgNjgwMzAiKTsKKworCS8qIGZsdXNoIE1DNjgwMzAvTUM2ODAyMCBjYWNoZXMgKHRoZXkgYXJlIHZpcnR1YWxseSBhZGRyZXNzZWQpICovCisJYXNtIHZvbGF0aWxlICgKKwkJIm1vdmVjICUlY2FjciwlMDsiCisJCSJvcncgJTEsJTA7ICIKKwkJIm1vdmVjICUwLCUlY2FjciIKKwkJOiAiPWQiICh0bXApIDogImRpIiAoRkxVU0hfSV9BTkRfRCkpOworCisJLyogU3dpdGNoIHRoZSByb290IHBvaW50ZXIuIEZvciBhIDAzMC1vbmx5IGtlcm5lbCwKKwkgKiBhdm9pZCBmbHVzaGluZyB0aGUgd2hvbGUgQVRDLCB3ZSBvbmx5IG5lZWQgdG8KKwkgKiBmbHVzaCB0aGUgdXNlciBlbnRyaWVzLiBUaGUgNjg4NTEgZG9lcyB0aGlzIGJ5CisJICogaXRzZWxmLiBBdm9pZCBhIHJ1bnRpbWUgY2hlY2sgaGVyZS4KKwkgKi8KKwlhc20gdm9sYXRpbGUgKAorI2lmZGVmIENQVV9NNjgwMzBfT05MWQorCQkicG1vdmVmZCAlMCwlJWNycDsgIgorCQkicGZsdXNoICMwLCM0IgogI2Vsc2UKLSNpbmNsdWRlICJtbXVfY29udGV4dF9tbS5oIgorCQkicG1vdmUgJTAsJSVjcnAiCiAjZW5kaWYKKwkJOiA6ICJtIiAoY3JwWzBdKSk7CisKKwlhc20gdm9sYXRpbGUgKCIuY2hpcCA2OGsiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbV8wNDYwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4MDQwIik7CisKKwkvKiBmbHVzaCBhZGRyZXNzIHRyYW5zbGF0aW9uIGNhY2hlICh1c2VyIGVudHJpZXMpICovCisJYXNtIHZvbGF0aWxlICgicGZsdXNoYW4iKTsKKworCS8qIHN3aXRjaCB0aGUgcm9vdCBwb2ludGVyICovCisJYXNtIHZvbGF0aWxlICgibW92ZWMgJTAsJSV1cnAiIDogOiAiciIgKG1tLT5jb250ZXh0KSk7CisKKwlpZiAoQ1BVX0lTXzA2MCkgeworCQl1bnNpZ25lZCBsb25nIHRtcDsKKworCQkvKiBjbGVhciB1c2VyIGVudHJpZXMgaW4gdGhlIGJyYW5jaCBjYWNoZSAqLworCQlhc20gdm9sYXRpbGUgKAorCQkJIm1vdmVjICUlY2FjciwlMDsgIgorCQkgICAgICAgICJvcmwgJTEsJTA7ICIKKwkJICAgICAgICAibW92ZWMgJTAsJSVjYWNyIgorCQkJOiAiPWQiICh0bXApOiAiZGkiICgweDAwMjAwMDAwKSk7CisJfQorCisJYXNtIHZvbGF0aWxlICgiLmNoaXAgNjhrIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKHByZXYgIT0gbmV4dCkgeworCQlpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCisJCQlzd2l0Y2hfbW1fMDIzMChuZXh0KTsKKwkJZWxzZQorCQkJc3dpdGNoX21tXzA0NjAobmV4dCk7CisJfQorfQorCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tLAorCQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHRfbW0pCit7CisJbmV4dF9tbS0+Y29udGV4dCA9IHZpcnRfdG9fcGh5cyhuZXh0X21tLT5wZ2QpOworCisJaWYgKENQVV9JU18wMjBfT1JfMDMwKQorCQlzd2l0Y2hfbW1fMDIzMChuZXh0X21tKTsKKwllbHNlCisJCXN3aXRjaF9tbV8wNDYwKG5leHRfbW0pOworfQorCisjZWxzZSAgLyogQ09ORklHX1NVTjMgKi8KKyNpbmNsdWRlIDxhc20vc3VuM21tdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF9mcmVlX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgY2xlYXJfY29udGV4dCh1bnNpZ25lZCBsb25nIGNvbnRleHQpOworCisvKiBzZXQgdGhlIGNvbnRleHQgZm9yIGEgbmV3IHRhc2sgdG8gdW5tYXBwZWQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCW1tLT5jb250ZXh0ID0gU1VOM19JTlZBTElEX0NPTlRFWFQ7CisJcmV0dXJuIDA7Cit9CisKKy8qIGZpbmQgdGhlIGNvbnRleHQgZ2l2ZW4gdG8gdGhpcyBwcm9jZXNzLCBhbmQgaWYgaXQgaGFzbid0IGFscmVhZHkKKyAgIGdvdCBvbmUsIGdvIGdldCBvbmUgZm9yIGl0LiAqLworc3RhdGljIGlubGluZSB2b2lkIGdldF9tbXVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZihtbS0+Y29udGV4dCA9PSBTVU4zX0lOVkFMSURfQ09OVEVYVCkKKwkJbW0tPmNvbnRleHQgPSBnZXRfZnJlZV9jb250ZXh0KG1tKTsKK30KKworLyogZmx1c2ggY29udGV4dCBpZiBhbGxvY2F0ZWQuLi4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJaWYobW0tPmNvbnRleHQgIT0gU1VOM19JTlZBTElEX0NPTlRFWFQpCisJCWNsZWFyX2NvbnRleHQobW0tPmNvbnRleHQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlnZXRfbW11X2NvbnRleHQobW0pOworCXN1bjNfcHV0X2NvbnRleHQobW0tPmNvbnRleHQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWFjdGl2YXRlX2NvbnRleHQodHNrLT5tbSk7Cit9CisKKyNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW0sCisJCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dF9tbSkKK3sKKwlhY3RpdmF0ZV9jb250ZXh0KG5leHRfbW0pOworfQorCisjZW5kaWYKKyNlbHNlIC8qICFDT05GSUdfTU1VICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKKyNkZWZpbmUgZGVzdHJveV9jb250ZXh0KG1tKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0X21tKQoreworfQorCisjZW5kaWYgLyogQ09ORklHX01NVSAqLworI2VuZGlmIC8qIF9fTTY4S19NTVVfQ09OVEVYVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTRkYWNiLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLSNpZm5kZWYgX19NNjhLX01NVV9DT05URVhUX0gKLSNkZWZpbmUgX19NNjhLX01NVV9DT05URVhUX0gKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tX2hvb2tzLmg+Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci19Ci0KLSNpZm5kZWYgQ09ORklHX1NVTjMKLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLQotc3RhdGljIGlubGluZSBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKLQkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQltbS0+Y29udGV4dCA9IHZpcnRfdG9fcGh5cyhtbS0+cGdkKTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBkZXN0cm95X2NvbnRleHQobW0pCQlkbyB7IH0gd2hpbGUoMCkKLQotc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbV8wMjMwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXVuc2lnbmVkIGxvbmcgY3JwWzJdID0gewotCQkweDgwMDAwMDAwIHwgX1BBR0VfVEFCTEUsIG1tLT5jb250ZXh0Ci0JfTsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4MDMwIik7Ci0KLQkvKiBmbHVzaCBNQzY4MDMwL01DNjgwMjAgY2FjaGVzICh0aGV5IGFyZSB2aXJ0dWFsbHkgYWRkcmVzc2VkKSAqLwotCWFzbSB2b2xhdGlsZSAoCi0JCSJtb3ZlYyAlJWNhY3IsJTA7IgotCQkib3J3ICUxLCUwOyAiCi0JCSJtb3ZlYyAlMCwlJWNhY3IiCi0JCTogIj1kIiAodG1wKSA6ICJkaSIgKEZMVVNIX0lfQU5EX0QpKTsKLQotCS8qIFN3aXRjaCB0aGUgcm9vdCBwb2ludGVyLiBGb3IgYSAwMzAtb25seSBrZXJuZWwsCi0JICogYXZvaWQgZmx1c2hpbmcgdGhlIHdob2xlIEFUQywgd2Ugb25seSBuZWVkIHRvCi0JICogZmx1c2ggdGhlIHVzZXIgZW50cmllcy4gVGhlIDY4ODUxIGRvZXMgdGhpcyBieQotCSAqIGl0c2VsZi4gQXZvaWQgYSBydW50aW1lIGNoZWNrIGhlcmUuCi0JICovCi0JYXNtIHZvbGF0aWxlICgKLSNpZmRlZiBDUFVfTTY4MDMwX09OTFkKLQkJInBtb3ZlZmQgJTAsJSVjcnA7ICIKLQkJInBmbHVzaCAjMCwjNCIKLSNlbHNlCi0JCSJwbW92ZSAlMCwlJWNycCIKLSNlbmRpZgotCQk6IDogIm0iIChjcnBbMF0pKTsKLQotCWFzbSB2b2xhdGlsZSAoIi5jaGlwIDY4ayIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tXzA0NjAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JYXNtIHZvbGF0aWxlICgiLmNoaXAgNjgwNDAiKTsKLQotCS8qIGZsdXNoIGFkZHJlc3MgdHJhbnNsYXRpb24gY2FjaGUgKHVzZXIgZW50cmllcykgKi8KLQlhc20gdm9sYXRpbGUgKCJwZmx1c2hhbiIpOwotCi0JLyogc3dpdGNoIHRoZSByb290IHBvaW50ZXIgKi8KLQlhc20gdm9sYXRpbGUgKCJtb3ZlYyAlMCwlJXVycCIgOiA6ICJyIiAobW0tPmNvbnRleHQpKTsKLQotCWlmIChDUFVfSVNfMDYwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JCS8qIGNsZWFyIHVzZXIgZW50cmllcyBpbiB0aGUgYnJhbmNoIGNhY2hlICovCi0JCWFzbSB2b2xhdGlsZSAoCi0JCQkibW92ZWMgJSVjYWNyLCUwOyAiCi0JCSAgICAgICAgIm9ybCAlMSwlMDsgIgotCQkgICAgICAgICJtb3ZlYyAlMCwlJWNhY3IiCi0JCQk6ICI9ZCIgKHRtcCk6ICJkaSIgKDB4MDAyMDAwMDApKTsKLQl9Ci0KLQlhc20gdm9sYXRpbGUgKCIuY2hpcCA2OGsiKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlpZiAocHJldiAhPSBuZXh0KSB7Ci0JCWlmIChDUFVfSVNfMDIwX09SXzAzMCkKLQkJCXN3aXRjaF9tbV8wMjMwKG5leHQpOwotCQllbHNlCi0JCQlzd2l0Y2hfbW1fMDQ2MChuZXh0KTsKLQl9Ci19Ci0KLSNkZWZpbmUgZGVhY3RpdmF0ZV9tbSh0c2ssbW0pCWRvIHsgfSB3aGlsZSAoMCkKLQotc3RhdGljIGlubGluZSB2b2lkIGFjdGl2YXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW0sCi0JCQkgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbmV4dF9tbSkKLXsKLQluZXh0X21tLT5jb250ZXh0ID0gdmlydF90b19waHlzKG5leHRfbW0tPnBnZCk7Ci0KLQlpZiAoQ1BVX0lTXzAyMF9PUl8wMzApCi0JCXN3aXRjaF9tbV8wMjMwKG5leHRfbW0pOwotCWVsc2UKLQkJc3dpdGNoX21tXzA0NjAobmV4dF9tbSk7Ci19Ci0KLSNlbHNlICAvKiBDT05GSUdfU1VOMyAqLwotI2luY2x1ZGUgPGFzbS9zdW4zbW11Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X2ZyZWVfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSk7Ci1leHRlcm4gdm9pZCBjbGVhcl9jb250ZXh0KHVuc2lnbmVkIGxvbmcgY29udGV4dCk7Ci0KLS8qIHNldCB0aGUgY29udGV4dCBmb3IgYSBuZXcgdGFzayB0byB1bm1hcHBlZCAqLwotc3RhdGljIGlubGluZSBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JbW0tPmNvbnRleHQgPSBTVU4zX0lOVkFMSURfQ09OVEVYVDsKLQlyZXR1cm4gMDsKLX0KLQotLyogZmluZCB0aGUgY29udGV4dCBnaXZlbiB0byB0aGlzIHByb2Nlc3MsIGFuZCBpZiBpdCBoYXNuJ3QgYWxyZWFkeQotICAgZ290IG9uZSwgZ28gZ2V0IG9uZSBmb3IgaXQuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X21tdV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCWlmKG1tLT5jb250ZXh0ID09IFNVTjNfSU5WQUxJRF9DT05URVhUKQotCQltbS0+Y29udGV4dCA9IGdldF9mcmVlX2NvbnRleHQobW0pOwotfQotCi0vKiBmbHVzaCBjb250ZXh0IGlmIGFsbG9jYXRlZC4uLiAqLwotc3RhdGljIGlubGluZSB2b2lkIGRlc3Ryb3lfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlpZihtbS0+Y29udGV4dCAhPSBTVU4zX0lOVkFMSURfQ09OVEVYVCkKLQkJY2xlYXJfY29udGV4dChtbS0+Y29udGV4dCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCWdldF9tbXVfY29udGV4dChtbSk7Ci0Jc3VuM19wdXRfY29udGV4dChtbS0+Y29udGV4dCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JYWN0aXZhdGVfY29udGV4dCh0c2stPm1tKTsKLX0KLQotI2RlZmluZSBkZWFjdGl2YXRlX21tKHRzayxtbSkJZG8geyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWN0aXZhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldl9tbSwKLQkJCSAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0X21tKQotewotCWFjdGl2YXRlX2NvbnRleHQobmV4dF9tbSk7Ci19Ci0KLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X2NvbnRleHRfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2NlZTQyLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfY29udGV4dF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotI2lmbmRlZiBfX002OEtOT01NVV9NTVVfQ09OVEVYVF9ICi0jZGVmaW5lIF9fTTY4S05PTU1VX01NVV9DT05URVhUX0gKLQotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbV9ob29rcy5oPgotCi1zdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludAotaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JLy8gbW0tPmNvbnRleHQgPSB2aXJ0X3RvX3BoeXMobW0tPnBnZCk7Ci0JcmV0dXJuKDApOwotfQotCi0jZGVmaW5lIGRlc3Ryb3lfY29udGV4dChtbSkJCWRvIHsgfSB3aGlsZSgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotfQotCi0jZGVmaW5lIGRlYWN0aXZhdGVfbW0odHNrLG1tKQlkbyB7IH0gd2hpbGUgKDApCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2X21tLAotCQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHRfbW0pCi17Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2QzNmQyLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tbXVfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI2lmbmRlZiBfX01NVV9ICi0jZGVmaW5lIF9fTU1VX0gKLQotLyogRGVmYXVsdCAidW5zaWduZWQgbG9uZyIgY29udGV4dCAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfdDsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW11X25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZGExZTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21tdV9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotI2lmbmRlZiBfX002OEtOT01NVV9NTVVfSAotI2RlZmluZSBfX002OEtOT01NVV9NTVVfSAotCi0vKiBDb3B5cmlnaHQgKEMpIDIwMDIsIERhdmlkIE1jQ3VsbG91Z2ggPGRhdmlkbUBzbmFwZ2Vhci5jb20+ICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nCQllbmRfYnJrOwotfSBtbV9jb250ZXh0X3Q7Ci0KLSNlbmRpZiAvKiBfX002OEtOT01NVV9NTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vZHVsZS5oCmluZGV4IDc5YjU5ZDEuLjVmMjFlMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb2R1bGUuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlLmgKQEAgLTEsNSArMSw0OCBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAibW9kdWxlX25vLmgiCisjaWZuZGVmIF9BU01fTTY4S19NT0RVTEVfSAorI2RlZmluZSBfQVNNX002OEtfTU9EVUxFX0gKKworI2lmZGVmIENPTkZJR19NTVUKKworc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKKwlzdHJ1Y3QgbTY4a19maXh1cF9pbmZvICpmaXh1cF9zdGFydCwgKmZpeHVwX2VuZDsKK307CisKKyNkZWZpbmUgTU9EVUxFX0FSQ0hfSU5JVCB7CQkJCVwKKwkuZml4dXBfc3RhcnQJCT0gX19zdGFydF9maXh1cCwJXAorCS5maXh1cF9lbmQJCT0gX19zdG9wX2ZpeHVwLAkJXAorfQorCisKK2VudW0gbTY4a19maXh1cF90eXBlIHsKKwltNjhrX2ZpeHVwX21lbW9mZnNldCwKKwltNjhrX2ZpeHVwX3Zub2RlX3NoaWZ0LAorfTsKKworc3RydWN0IG02OGtfZml4dXBfaW5mbyB7CisJZW51bSBtNjhrX2ZpeHVwX3R5cGUgdHlwZTsKKwl2b2lkICphZGRyOworfTsKKworI2RlZmluZSBtNjhrX2ZpeHVwKHR5cGUsIGFkZHIpCQkJXAorCSIJLnNlY3Rpb24gXCIubTY4a19maXh1cFwiLFwiYXdcIlxuIglcCisJIgkubG9uZyAiICN0eXBlICIsIiAjYWRkciAiXG4iCVwKKwkiCS5wcmV2aW91c1xuIgorCitleHRlcm4gc3RydWN0IG02OGtfZml4dXBfaW5mbyBfX3N0YXJ0X2ZpeHVwW10sIF9fc3RvcF9maXh1cFtdOworCitzdHJ1Y3QgbW9kdWxlOworZXh0ZXJuIHZvaWQgbW9kdWxlX2ZpeHVwKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG02OGtfZml4dXBfaW5mbyAqc3RhcnQsCisJCQkgc3RydWN0IG02OGtfZml4dXBfaW5mbyAqZW5kKTsKKwogI2Vsc2UKLSNpbmNsdWRlICJtb2R1bGVfbW0uaCIKLSNlbmRpZgorCitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgeworfTsKKworI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKKworI2VuZGlmIC8qIF9BU01fTTY4S19NT0RVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vZHVsZV9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vZHVsZV9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODJkMjBhLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb2R1bGVfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9NNjhLX01PRFVMRV9ICi0jZGVmaW5lIF9BU01fTTY4S19NT0RVTEVfSAotCi1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMgewotCXN0cnVjdCBtNjhrX2ZpeHVwX2luZm8gKmZpeHVwX3N0YXJ0LCAqZml4dXBfZW5kOwotfTsKLQotI2RlZmluZSBNT0RVTEVfQVJDSF9JTklUIHsJCQkJXAotCS5maXh1cF9zdGFydAkJPSBfX3N0YXJ0X2ZpeHVwLAlcCi0JLmZpeHVwX2VuZAkJPSBfX3N0b3BfZml4dXAsCQlcCi19Ci0KLSNkZWZpbmUgRWxmX1NoZHIgRWxmMzJfU2hkcgotI2RlZmluZSBFbGZfU3ltIEVsZjMyX1N5bQotI2RlZmluZSBFbGZfRWhkciBFbGYzMl9FaGRyCi0KLQotZW51bSBtNjhrX2ZpeHVwX3R5cGUgewotCW02OGtfZml4dXBfbWVtb2Zmc2V0LAotCW02OGtfZml4dXBfdm5vZGVfc2hpZnQsCi19OwotCi1zdHJ1Y3QgbTY4a19maXh1cF9pbmZvIHsKLQllbnVtIG02OGtfZml4dXBfdHlwZSB0eXBlOwotCXZvaWQgKmFkZHI7Ci19OwotCi0jZGVmaW5lIG02OGtfZml4dXAodHlwZSwgYWRkcikJCQlcCi0JIgkuc2VjdGlvbiBcIi5tNjhrX2ZpeHVwXCIsXCJhd1wiXG4iCVwKLQkiCS5sb25nICIgI3R5cGUgIiwiICNhZGRyICJcbiIJXAotCSIJLnByZXZpb3VzXG4iCi0KLWV4dGVybiBzdHJ1Y3QgbTY4a19maXh1cF9pbmZvIF9fc3RhcnRfZml4dXBbXSwgX19zdG9wX2ZpeHVwW107Ci0KLXN0cnVjdCBtb2R1bGU7Ci1leHRlcm4gdm9pZCBtb2R1bGVfZml4dXAoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbTY4a19maXh1cF9pbmZvICpzdGFydCwKLQkJCSBzdHJ1Y3QgbTY4a19maXh1cF9pbmZvICplbmQpOwotCi0jZW5kaWYgLyogX0FTTV9NNjhLX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW9kdWxlX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNDVhYjUuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vZHVsZV9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotI2lmbmRlZiBBU01fTTY4S05PTU1VX01PRFVMRV9ICi0jZGVmaW5lIEFTTV9NNjhLTk9NTVVfTU9EVUxFX0gKLQotc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKLX07Ci0KLSNkZWZpbmUgRWxmX1NoZHIgRWxmMzJfU2hkcgotI2RlZmluZSBFbGZfU3ltIEVsZjMyX1N5bQotI2RlZmluZSBFbGZfRWhkciBFbGYzMl9FaGRyCi0KLSNlbmRpZiAvKiBBU01fTTY4S05PTU1VX01PRFVMRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9vZmZzZXQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX29mZnNldC5oCmluZGV4IDY2NDU1YzguLjE3ODAxNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX29mZnNldC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX29mZnNldC5oCkBAIC0xLDUgKzEsMTEgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInBhZ2Vfb2Zmc2V0X25vLmgiCisvKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuLiAqLworCisjaWZkZWYgQ09ORklHX01NVQorI2lmbmRlZiBDT05GSUdfU1VOMworI2RlZmluZSBQQUdFX09GRlNFVF9SQVcJCTB4MDAwMDAwMDAKICNlbHNlCi0jaW5jbHVkZSAicGFnZV9vZmZzZXRfbW0uaCIKKyNkZWZpbmUgUEFHRV9PRkZTRVRfUkFXCQkweDBFMDAwMDAwCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lCVBBR0VfT0ZGU0VUX1JBVwkJQ09ORklHX1JBTUJBU0UKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9vZmZzZXRfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNiZGI3Zi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFnZV9vZmZzZXRfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotCi0vKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuLiAqLwotI2lmbmRlZiBDT05GSUdfU1VOMwotI2RlZmluZSBQQUdFX09GRlNFVF9SQVcJCTB4MDAwMDAwMDAKLSNlbHNlCi0jZGVmaW5lIFBBR0VfT0ZGU0VUX1JBVwkJMHgwRTAwMDAwMAotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYWdlX29mZnNldF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0X25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZTczZTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhZ2Vfb2Zmc2V0X25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLQotCi0vKiBUaGlzIGhhbmRsZXMgdGhlIG1lbW9yeSBtYXAuLiAqLwotI2RlZmluZQlQQUdFX09GRlNFVF9SQVcJCUNPTkZJR19SQU1CQVNFCi0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCBkYmVhOTUzLi40YWQwYWVhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC0xLDUgKzEsMTIgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInBjaV9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJwY2lfbW0uaCIKLSNlbmRpZgorI2lmbmRlZiBfQVNNX002OEtfUENJX0gKKyNkZWZpbmUgX0FTTV9NNjhLX1BDSV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgorCisvKiBUaGUgUENJIGFkZHJlc3Mgc3BhY2UgZG9lcyBlcXVhbCB0aGUgcGh5c2ljYWwgbWVtb3J5CisgKiBhZGRyZXNzIHNwYWNlLiAgVGhlIG5ldHdvcmtpbmcgYW5kIGJsb2NrIGRldmljZSBsYXllcnMgdXNlCisgKiB0aGlzIGJvb2xlYW4gZm9yIGJvdW5jZSBidWZmZXIgZGVjaXNpb25zLgorICovCisjZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMJKDEpCisKKyNlbmRpZiAvKiBfQVNNX002OEtfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wY2lfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wY2lfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkMGFlYS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGNpX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0jaWZuZGVmIF9BU01fTTY4S19QQ0lfSAotI2RlZmluZSBfQVNNX002OEtfUENJX0gKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0Lmg+Ci0KLS8qIFRoZSBQQ0kgYWRkcmVzcyBzcGFjZSBkb2VzIGVxdWFsIHRoZSBwaHlzaWNhbCBtZW1vcnkKLSAqIGFkZHJlc3Mgc3BhY2UuICBUaGUgbmV0d29ya2luZyBhbmQgYmxvY2sgZGV2aWNlIGxheWVycyB1c2UKLSAqIHRoaXMgYm9vbGVhbiBmb3IgYm91bmNlIGJ1ZmZlciBkZWNpc2lvbnMuCi0gKi8KLSNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMSkKLQotI2VuZGlmIC8qIF9BU01fTTY4S19QQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaV9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BjaV9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWJiYzAzLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wY2lfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLSNpZm5kZWYgTTY4S05PTU1VX1BDSV9ICi0jZGVmaW5lCU02OEtOT01NVV9QQ0lfSAotCi0jaW5jbHVkZSA8YXNtL3BjaV9tbS5oPgotCi0jaWZkZWYgQ09ORklHX0NPTUVNUENJCi0vKgotICoJVGhlc2UgYXJlIHByZXR0eSBtdWNoIGFyYml0YXJ5IHdpdGggdGhlIENvTUVNIGltcGxlbWVudGF0aW9uLgotICoJV2UgaGF2ZSB0aGUgd2hvbGUgYWRkcmVzcyBzcGFjZSB0byBvdXJzZWx2ZXMuCi0gKi8KLSNkZWZpbmUgUENJQklPU19NSU5fSU8JCTB4MTAwCi0jZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJMHgwMDAxMDAwMAotCi0jZGVmaW5lIHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGEsIGIpCTAKLQotLyoKLSAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBQQ0kgZGV2aWNlIERNQSBhZGRyZXNzIG1hc2sgY2FuCi0gKiBiZSBzdXBwb3J0ZWQgcHJvcGVybHkuICBGb3IgZXhhbXBsZSwgaWYgeW91ciBkZXZpY2UgY2FuCi0gKiBvbmx5IGRyaXZlIHRoZSBsb3cgMjQtYml0cyBkdXJpbmcgUENJIGJ1cyBtYXN0ZXJpbmcsIHRoZW4KLSAqIHlvdSB3b3VsZCBwYXNzIDB4MDBmZmZmZmYgYXMgdGhlIG1hc2sgdG8gdGhpcyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgcGNpX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB1NjQgbWFzaykKLXsKLQlyZXR1cm4gMTsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19DT01FTVBDSSAqLwotCi0jZW5kaWYgLyogTTY4S05PTU1VX1BDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCAwNTljYjczLi5jMjk0YWFkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTEsNSArMSwxOSBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAicGdhbGxvY19uby5oIgorI2lmbmRlZiBNNjhLX1BHQUxMT0NfSAorI2RlZmluZSBNNjhLX1BHQUxMT0NfSAorCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpZmRlZiBDT05GSUdfTU1VCisjaW5jbHVkZSA8YXNtL3ZpcnRjb252ZXJ0Lmg+CisjaWZkZWYgQ09ORklHX1NVTjMKKyNpbmNsdWRlIDxhc20vc3VuM19wZ2FsbG9jLmg+CiAjZWxzZQotI2luY2x1ZGUgInBnYWxsb2NfbW0uaCIKKyNpbmNsdWRlIDxhc20vbW90b3JvbGFfcGdhbGxvYy5oPgogI2VuZGlmCisKK2V4dGVybiB2b2lkIG02OGtfc2V0dXBfbm9kZShpbnQgbm9kZSk7CisjZW5kaWYKKworI2VuZGlmIC8qIE02OEtfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGdhbGxvY19tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BnYWxsb2NfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNiMWE1Ny4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGdhbGxvY19tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotCi0jaWZuZGVmIE02OEtfUEdBTExPQ19ICi0jZGVmaW5lIE02OEtfUEdBTExPQ19ICi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vdmlydGNvbnZlcnQuaD4KLQotCi0jaWZkZWYgQ09ORklHX1NVTjMKLSNpbmNsdWRlIDxhc20vc3VuM19wZ2FsbG9jLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGFzbS9tb3Rvcm9sYV9wZ2FsbG9jLmg+Ci0jZW5kaWYKLQotZXh0ZXJuIHZvaWQgbTY4a19zZXR1cF9ub2RlKGludCBub2RlKTsKLQotI2VuZGlmIC8qIE02OEtfUEdBTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGdhbGxvY19uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BnYWxsb2Nfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYzNTJmNi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGdhbGxvY19uby5oCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jaWZuZGVmIF9NNjhLTk9NTVVfUEdBTExPQ19ICi0jZGVmaW5lIF9NNjhLTk9NTVVfUEdBTExPQ19ICi0KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLQotI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKQlkbyB7IH0gd2hpbGUgKDApCi0KLSNlbmRpZiAvKiBfTTY4S05PTU1VX1BHQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BndGFibGVfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ3RhYmxlX25vLmgKaW5kZXggNDYyNTEwMS4uYmY4NmIyOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BndGFibGVfbm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGd0YWJsZV9uby5oCkBAIC02Nyw0ICs2Nyw2IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CiAKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8geyB9IHdoaWxlICgwKQorCiAjZW5kaWYgLyogX002OEtOT01NVV9QR1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ydGMuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9ydGMuaAppbmRleCA1ZDNlMDM4Li5hNGQwOGVhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcnRjLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3J0Yy5oCkBAIC0zNiwxMyArMzYsMTYgQEAKIAkgKiBSVEMgaGFzIFJUQ19EQVlfT0ZfV0VFSywgd2UgaWdub3JlIGl0LCBhcyBpdCBpcyBvbmx5IHVwZGF0ZWQKIAkgKiBieSB0aGUgUlRDIHdoZW4gaW5pdGlhbGx5IHNldCB0byBhIG5vbi16ZXJvIHZhbHVlLgogCSAqLwotCW1hY2hfaHdjbGsoMCwgdGltZSk7CisJaWYgKG1hY2hfaHdjbGspCisJCW1hY2hfaHdjbGsoMCwgdGltZSk7CiAJcmV0dXJuIFJUQ18yNEg7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRpbWUpCiB7Ci0JcmV0dXJuIG1hY2hfaHdjbGsoMSwgdGltZSk7CisJaWYgKG1hY2hfaHdjbGspCisJCXJldHVybiBtYWNoX2h3Y2xrKDEsIHRpbWUpOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfcnRjX3NzKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCmluZGV4IGI3ZTUyODYuLmUyN2FkOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCkBAIC0xLDUgKzEsMjMgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInNjYXR0ZXJsaXN0X25vLmgiCi0jZWxzZQotI2luY2x1ZGUgInNjYXR0ZXJsaXN0X21tLmgiCisjaWZuZGVmIF9NNjhLX1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX002OEtfU0NBVFRFUkxJU1RfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHNjYXR0ZXJsaXN0IHsKKyNpZmRlZiBDT05GSUdfREVCVUdfU0cKKwl1bnNpZ25lZCBsb25nIHNnX21hZ2ljOwogI2VuZGlmCisJdW5zaWduZWQgbG9uZyBwYWdlX2xpbms7CisJdW5zaWduZWQgaW50IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoOworCisJZG1hX2FkZHJfdCBkbWFfYWRkcmVzczsJLyogQSBwbGFjZSB0byBoYW5nIGhvc3Qtc3BlY2lmaWMgYWRkcmVzc2VzIGF0LiAqLworfTsKKworLyogVGhpcyBpcyBib2d1cyBhbmQgc2hvdWxkIGdvIGF3YXkuICovCisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICgweDAwZmZmZmZmKQorCisjZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKQkoKHNnKS0+ZG1hX2FkZHJlc3MpCisjZGVmaW5lIHNnX2RtYV9sZW4oc2cpCQkoKHNnKS0+bGVuZ3RoKQorCisjZW5kaWYgLyogIShfTTY4S19TQ0FUVEVSTElTVF9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3RfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNhN2EwZS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3RfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNpZm5kZWYgX002OEtfU0NBVFRFUkxJU1RfSAotI2RlZmluZSBfTTY4S19TQ0FUVEVSTElTVF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi1zdHJ1Y3Qgc2NhdHRlcmxpc3QgewotI2lmZGVmIENPTkZJR19ERUJVR19TRwotCXVuc2lnbmVkIGxvbmcgc2dfbWFnaWM7Ci0jZW5kaWYKLQl1bnNpZ25lZCBsb25nIHBhZ2VfbGluazsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCXVuc2lnbmVkIGludCBsZW5ndGg7Ci0KLQlfX3UzMiBkbWFfYWRkcmVzczsJLyogQSBwbGFjZSB0byBoYW5nIGhvc3Qtc3BlY2lmaWMgYWRkcmVzc2VzIGF0LiAqLwotfTsKLQotLyogVGhpcyBpcyBib2d1cyBhbmQgc2hvdWxkIGdvIGF3YXkuICovCi0jZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICgweDAwZmZmZmZmKQotCi0jZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKQkoKHNnKS0+ZG1hX2FkZHJlc3MpCi0jZGVmaW5lIHNnX2RtYV9sZW4oc2cpCQkoKHNnKS0+bGVuZ3RoKQotCi0jZW5kaWYgLyogIShfTTY4S19TQ0FUVEVSTElTVF9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0X25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3Rfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZjNDc4OC4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3Rfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9TQ0FUVEVSTElTVF9ICi0jZGVmaW5lIF9NNjhLTk9NTVVfU0NBVFRFUkxJU1RfSAotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQotc3RydWN0IHNjYXR0ZXJsaXN0IHsKLSNpZmRlZiBDT05GSUdfREVCVUdfU0cKLQl1bnNpZ25lZCBsb25nCXNnX21hZ2ljOwotI2VuZGlmCi0JdW5zaWduZWQgbG9uZwlwYWdlX2xpbms7Ci0JdW5zaWduZWQgaW50CW9mZnNldDsKLQlkbWFfYWRkcl90CWRtYV9hZGRyZXNzOwotCXVuc2lnbmVkIGludAlsZW5ndGg7Ci19OwotCi0jZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKSAgICAgICgoc2cpLT5kbWFfYWRkcmVzcykKLSNkZWZpbmUgc2dfZG1hX2xlbihzZykgICAgICAgICAgKChzZyktPmxlbmd0aCkKLQotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkoMHhmZmZmZmZmZikKLQotI2VuZGlmIC8qICEoX002OEtOT01NVV9TQ0FUVEVSTElTVF9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NlZ21lbnQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZWdtZW50LmgKaW5kZXggODI1ODNiYy4uZWU5NTkyMSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NlZ21lbnQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2VnbWVudC5oCkBAIC0xLDUgKzEsNjMgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInNlZ21lbnRfbm8uaCIKLSNlbHNlCi0jaW5jbHVkZSAic2VnbWVudF9tbS5oIgorI2lmbmRlZiBfTTY4S19TRUdNRU5UX0gKKyNkZWZpbmUgX002OEtfU0VHTUVOVF9ICisKKy8qIGRlZmluZSBjb25zdGFudHMgKi8KKy8qIEFkZHJlc3Mgc3BhY2VzIChGQzAtRkMyKSAqLworI2RlZmluZSBVU0VSX0RBVEEgICAgICgxKQorI2lmbmRlZiBfX1VTRVJfRFMKKyNkZWZpbmUgX19VU0VSX0RTICAgICAoVVNFUl9EQVRBKQogI2VuZGlmCisjZGVmaW5lIFVTRVJfUFJPR1JBTSAgKDIpCisjZGVmaW5lIFNVUEVSX0RBVEEgICAgKDUpCisjaWZuZGVmIF9fS0VSTkVMX0RTCisjZGVmaW5lIF9fS0VSTkVMX0RTICAgKFNVUEVSX0RBVEEpCisjZW5kaWYKKyNkZWZpbmUgU1VQRVJfUFJPR1JBTSAoNikKKyNkZWZpbmUgQ1BVX1NQQUNFICAgICAoNykKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKKyNkZWZpbmUgTUFLRV9NTV9TRUcocykJKChtbV9zZWdtZW50X3QpIHsgKHMpIH0pCisjZGVmaW5lIFVTRVJfRFMJCU1BS0VfTU1fU0VHKF9fVVNFUl9EUykKKyNkZWZpbmUgS0VSTkVMX0RTCU1BS0VfTU1fU0VHKF9fS0VSTkVMX0RTKQorCisvKgorICogR2V0L3NldCB0aGUgU0ZDL0RGQyByZWdpc3RlcnMgZm9yIE1PVkVTIGluc3RydWN0aW9ucworICovCisKK3N0YXRpYyBpbmxpbmUgbW1fc2VnbWVudF90IGdldF9mcyh2b2lkKQoreworI2lmZGVmIENPTkZJR19NTVUKKwltbV9zZWdtZW50X3QgX3Y7CisJX19hc21fXyAoIm1vdmVjICUvZGZjLCUwIjoiPXIiIChfdi5zZWcpOik7CisKKwlyZXR1cm4gX3Y7CisjZWxzZQorCXJldHVybiBVU0VSX0RTOworI2VuZGlmCit9CisKK3N0YXRpYyBpbmxpbmUgbW1fc2VnbWVudF90IGdldF9kcyh2b2lkKQoreworICAgIC8qIHJldHVybiB0aGUgc3VwZXJ2aXNvciBkYXRhIHNwYWNlIGNvZGUgKi8KKyAgICByZXR1cm4gS0VSTkVMX0RTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzKG1tX3NlZ21lbnRfdCB2YWwpCit7CisjaWZkZWYgQ09ORklHX01NVQorCV9fYXNtX18gX192b2xhdGlsZV9fICgibW92ZWMgJTAsJS9zZmNcblx0IgorCQkJICAgICAgIm1vdmVjICUwLCUvZGZjXG5cdCIKKwkJCSAgICAgIDogLyogbm8gb3V0cHV0cyAqLyA6ICJyIiAodmFsLnNlZykgOiAibWVtb3J5Iik7CisjZW5kaWYKK30KKworI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX002OEtfU0VHTUVOVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2VnbWVudF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NlZ21lbnRfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IwYjJkMy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2VnbWVudF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19TRUdNRU5UX0gKLSNkZWZpbmUgX002OEtfU0VHTUVOVF9ICi0KLS8qIGRlZmluZSBjb25zdGFudHMgKi8KLS8qIEFkZHJlc3Mgc3BhY2VzIChGQzAtRkMyKSAqLwotI2RlZmluZSBVU0VSX0RBVEEgICAgICgxKQotI2lmbmRlZiBfX1VTRVJfRFMKLSNkZWZpbmUgX19VU0VSX0RTICAgICAoVVNFUl9EQVRBKQotI2VuZGlmCi0jZGVmaW5lIFVTRVJfUFJPR1JBTSAgKDIpCi0jZGVmaW5lIFNVUEVSX0RBVEEgICAgKDUpCi0jaWZuZGVmIF9fS0VSTkVMX0RTCi0jZGVmaW5lIF9fS0VSTkVMX0RTICAgKFNVUEVSX0RBVEEpCi0jZW5kaWYKLSNkZWZpbmUgU1VQRVJfUFJPR1JBTSAoNikKLSNkZWZpbmUgQ1BVX1NQQUNFICAgICAoNykKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgc2VnOwotfSBtbV9zZWdtZW50X3Q7Ci0KLSNkZWZpbmUgTUFLRV9NTV9TRUcocykJKChtbV9zZWdtZW50X3QpIHsgKHMpIH0pCi0jZGVmaW5lIFVTRVJfRFMJCU1BS0VfTU1fU0VHKF9fVVNFUl9EUykKLSNkZWZpbmUgS0VSTkVMX0RTCU1BS0VfTU1fU0VHKF9fS0VSTkVMX0RTKQotCi0vKgotICogR2V0L3NldCB0aGUgU0ZDL0RGQyByZWdpc3RlcnMgZm9yIE1PVkVTIGluc3RydWN0aW9ucwotICovCi0KLXN0YXRpYyBpbmxpbmUgbW1fc2VnbWVudF90IGdldF9mcyh2b2lkKQotewotCW1tX3NlZ21lbnRfdCBfdjsKLQlfX2FzbV9fICgibW92ZWMgJS9kZmMsJTAiOiI9ciIgKF92LnNlZyk6KTsKLQotCXJldHVybiBfdjsKLX0KLQotc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2RzKHZvaWQpCi17Ci0gICAgLyogcmV0dXJuIHRoZSBzdXBlcnZpc29yIGRhdGEgc3BhY2UgY29kZSAqLwotICAgIHJldHVybiBLRVJORUxfRFM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnMobW1fc2VnbWVudF90IHZhbCkKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdmVjICUwLCUvc2ZjXG5cdCIKLQkJCSAgICAgICJtb3ZlYyAlMCwlL2RmY1xuXHQiCi0JCQkgICAgICA6IC8qIG5vIG91dHB1dHMgKi8gOiAiciIgKHZhbC5zZWcpIDogIm1lbW9yeSIpOwotfQotCi0jZGVmaW5lIHNlZ21lbnRfZXEoYSxiKQkoKGEpLnNlZyA9PSAoYikuc2VnKQotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLSNlbmRpZiAvKiBfTTY4S19TRUdNRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZWdtZW50X25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2VnbWVudF9uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjMxOGViLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZWdtZW50X25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1NFR01FTlRfSAotI2RlZmluZSBfTTY4S19TRUdNRU5UX0gKLQotLyogZGVmaW5lIGNvbnN0YW50cyAqLwotLyogQWRkcmVzcyBzcGFjZXMgKEZDMC1GQzIpICovCi0jZGVmaW5lIFVTRVJfREFUQSAgICAgKDEpCi0jaWZuZGVmIF9fVVNFUl9EUwotI2RlZmluZSBfX1VTRVJfRFMgICAgIChVU0VSX0RBVEEpCi0jZW5kaWYKLSNkZWZpbmUgVVNFUl9QUk9HUkFNICAoMikKLSNkZWZpbmUgU1VQRVJfREFUQSAgICAoNSkKLSNpZm5kZWYgX19LRVJORUxfRFMKLSNkZWZpbmUgX19LRVJORUxfRFMgICAoU1VQRVJfREFUQSkKLSNlbmRpZgotI2RlZmluZSBTVVBFUl9QUk9HUkFNICg2KQotI2RlZmluZSBDUFVfU1BBQ0UgICAgICg3KQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBzZWc7Ci19IG1tX3NlZ21lbnRfdDsKLQotI2RlZmluZSBNQUtFX01NX1NFRyhzKQkoKG1tX3NlZ21lbnRfdCkgeyAocykgfSkKLSNkZWZpbmUgVVNFUl9EUwkJTUFLRV9NTV9TRUcoX19VU0VSX0RTKQotI2RlZmluZSBLRVJORUxfRFMJTUFLRV9NTV9TRUcoX19LRVJORUxfRFMpCi0KLS8qCi0gKiBHZXQvc2V0IHRoZSBTRkMvREZDIHJlZ2lzdGVycyBmb3IgTU9WRVMgaW5zdHJ1Y3Rpb25zCi0gKi8KLQotc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2ZzKHZvaWQpCi17Ci0gICAgcmV0dXJuIFVTRVJfRFM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgbW1fc2VnbWVudF90IGdldF9kcyh2b2lkKQotewotICAgIC8qIHJldHVybiB0aGUgc3VwZXJ2aXNvciBkYXRhIHNwYWNlIGNvZGUgKi8KLSAgICByZXR1cm4gS0VSTkVMX0RTOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzKG1tX3NlZ21lbnRfdCB2YWwpCi17Ci19Ci0KLSNkZWZpbmUgc2VnbWVudF9lcShhLGIpCSgoYSkuc2VnID09IChiKS5zZWcpCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9NNjhLX1NFR01FTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RpbWV4LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXguaAppbmRleCA3MTk3NjI5Li5iODdmMmYyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXguaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXguaApAQCAtMSw1ICsxLDE4IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJ0aW1leF9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJ0aW1leF9tbS5oIgorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLW02OGsvdGltZXguaAorICoKKyAqIG02OGsgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKi8KKyNpZm5kZWYgX0FTTW02OGtfVElNRVhfSAorI2RlZmluZSBfQVNNbTY4a19USU1FWF9ICisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTExOTMxODAgLyogVW5kZXJseWluZyBIWiAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CisKK3N0YXRpYyBpbmxpbmUgY3ljbGVzX3QgZ2V0X2N5Y2xlcyh2b2lkKQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90aW1leF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RpbWV4X21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4N2YyZjIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RpbWV4X21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0vKgotICogbGludXgvaW5jbHVkZS9hc20tbTY4ay90aW1leC5oCi0gKgotICogbTY4ayBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKLSAqLwotI2lmbmRlZiBfQVNNbTY4a19USU1FWF9ICi0jZGVmaW5lIF9BU01tNjhrX1RJTUVYX0gKLQotI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKLQotc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RpbWV4X25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXhfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA5MDUwZi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGltZXhfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGltZXguaAotICoKLSAqIG02OGtub21tdSBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKLSAqLwotI2lmbmRlZiBfQVNNX002OEtOT01NVV9USU1FWF9ICi0jZGVmaW5lIF9BU01fTTY4S05PTU1VX1RJTUVYX0gKLQotI2lmZGVmIENPTkZJR19DT0xERklSRQotI2luY2x1ZGUgPGFzbS9jb2xkZmlyZS5oPgotI2RlZmluZSBDTE9DS19USUNLX1JBVEUJTUNGX0NMSwotI2Vsc2UKLSNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCTExOTMxODAgLyogVW5kZXJseWluZyBIWiAqLwotI2VuZGlmCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKLQotc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2guaAppbmRleCBiNmY5M2IzLi5hNmI0ZWQ0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMSw1ICsxLDI2NyBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAidGxiZmx1c2hfbm8uaCIKKyNpZm5kZWYgX002OEtfVExCRkxVU0hfSAorI2RlZmluZSBfTTY4S19UTEJGTFVTSF9ICisKKyNpZmRlZiBDT05GSUdfTU1VCisjaWZuZGVmIENPTkZJR19TVU4zCisKKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHZvaWQgKmFkZHIpCit7CisJaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7CisJCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCisJCQkJICAgICAicGZsdXNoICglMClcblx0IgorCQkJCSAgICAgIi5jaGlwIDY4ayIKKwkJCQkgICAgIDogOiAiYSIgKGFkZHIpKTsKKwkJc2V0X2ZzKG9sZF9mcyk7CisJfSBlbHNlIGlmIChDUFVfSVNfMDIwX09SXzAzMCkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oInBmbHVzaCAjNCwjNCwoJTApIiA6IDogImEiIChhZGRyKSk7Cit9CisKKy8qCisgKiBmbHVzaCBhbGwgdXNlci1zcGFjZSBhdGMgZW50cmllcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiKHZvaWQpCit7CisJaWYgKENQVV9JU18wNDBfT1JfMDYwKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmNoaXAgNjgwNDBcblx0IgorCQkJCSAgICAgInBmbHVzaGFuXG5cdCIKKwkJCQkgICAgICIuY2hpcCA2OGsiKTsKKwllbHNlIGlmIChDUFVfSVNfMDIwX09SXzAzMCkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oInBmbHVzaCAjMCwjNCIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIwNDBfb25lKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmNoaXAgNjgwNDBcblx0IgorCQkJICAgICAicGZsdXNoICglMClcblx0IgorCQkJICAgICAiLmNoaXAgNjhrIgorCQkJICAgICA6IDogImEiIChhZGRyKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCWlmIChDUFVfSVNfMDQwX09SXzA2MCkKKwkJX19mbHVzaF90bGIwNDBfb25lKGFkZHIpOworCWVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQorCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICMwLCM0LCglMCkiIDogOiAiYSIgKGFkZHIpKTsKK30KKworI2RlZmluZSBmbHVzaF90bGIoKSBfX2ZsdXNoX3RsYigpCisKKy8qCisgKiBmbHVzaCBhbGwgYXRjIGVudHJpZXMgKGJvdGgga2VybmVsIGFuZCB1c2VyLXNwYWNlIGVudHJpZXMpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQoreworCWlmIChDUFVfSVNfMDQwX09SXzA2MCkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIi5jaGlwIDY4MDQwXG5cdCIKKwkJCQkgICAgICJwZmx1c2hhXG5cdCIKKwkJCQkgICAgICIuY2hpcCA2OGsiKTsKKwllbHNlIGlmIChDUFVfSVNfMDIwX09SXzAzMCkKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oInBmbHVzaGEiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlpZiAobW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQorCQlfX2ZsdXNoX3RsYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pIHsKKwkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOworCQlzZXRfZnMoVVNFUl9EUyk7CisJCV9fZmx1c2hfdGxiX29uZShhZGRyKTsKKwkJc2V0X2ZzKG9sZF9mcyk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmICh2bWEtPnZtX21tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkKKwkJX19mbHVzaF90bGIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJZmx1c2hfdGxiX2FsbCgpOworfQorCiAjZWxzZQotI2luY2x1ZGUgInRsYmZsdXNoX21tLmgiCisKKworLyogUmVzZXJ2ZWQgUE1FR3MuICovCitleHRlcm4gY2hhciBzdW4zX3Jlc2VydmVkX3BtZWdbU1VOM19QTUVHU19OVU1dOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcG1lZ192YWRkcltTVU4zX1BNRUdTX05VTV07CitleHRlcm4gdW5zaWduZWQgY2hhciBwbWVnX2FsbG9jW1NVTjNfUE1FR1NfTlVNXTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHBtZWdfY3R4W1NVTjNfUE1FR1NfTlVNXTsKKworLyogRmx1c2ggYWxsIHVzZXJzcGFjZSBtYXBwaW5ncyBvbmUgYnkgb25lLi4uICAod2h5IG5vIGZsdXNoIGNvbW1hbmQsCisgICBzdW4/KSAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCkKK3sKKyAgICAgICB1bnNpZ25lZCBsb25nIGFkZHI7CisgICAgICAgdW5zaWduZWQgY2hhciBjdHgsIG9sZGN0eDsKKworICAgICAgIG9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKKyAgICAgICBmb3IoYWRkciA9IDB4MDAwMDAwMDA7IGFkZHIgPCBUQVNLX1NJWkU7IGFkZHIgKz0gU1VOM19QTUVHX1NJWkUpIHsKKwkgICAgICAgZm9yKGN0eCA9IDA7IGN0eCA8IDg7IGN0eCsrKSB7CisJCSAgICAgICBzdW4zX3B1dF9jb250ZXh0KGN0eCk7CisJCSAgICAgICBzdW4zX3B1dF9zZWdtYXAoYWRkciwgU1VOM19JTlZBTElEX1BNRUcpOworCSAgICAgICB9CisgICAgICAgfQorCisgICAgICAgc3VuM19wdXRfY29udGV4dChvbGRjdHgpOworICAgICAgIC8qIGVyYXNlIGFsbCBvZiB0aGUgdXNlcnNwYWNlIHBtZWcgbWFwcywgd2UndmUgY2xvYmJlcmVkIHRoZW0KKwkgIGFsbCBhbnl3YXkgKi8KKyAgICAgICBmb3IoYWRkciA9IDA7IGFkZHIgPCBTVU4zX0lOVkFMSURfUE1FRzsgYWRkcisrKSB7CisJICAgICAgIGlmKHBtZWdfYWxsb2NbYWRkcl0gPT0gMSkgeworCQkgICAgICAgcG1lZ19hbGxvY1thZGRyXSA9IDA7CisJCSAgICAgICBwbWVnX2N0eFthZGRyXSA9IDA7CisJCSAgICAgICBwbWVnX3ZhZGRyW2FkZHJdID0gMDsKKwkgICAgICAgfQorICAgICAgIH0KKworfQorCisvKiBDbGVhciB1c2VyIFRMQiBlbnRyaWVzIHdpdGhpbiB0aGUgY29udGV4dCBuYW1lZCBpbiBtbSAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbSAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisgICAgIHVuc2lnbmVkIGNoYXIgb2xkY3R4OworICAgICB1bnNpZ25lZCBjaGFyIHNlZzsKKyAgICAgdW5zaWduZWQgbG9uZyBpOworCisgICAgIG9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKKyAgICAgc3VuM19wdXRfY29udGV4dChtbS0+Y29udGV4dCk7CisKKyAgICAgZm9yKGkgPSAwOyBpIDwgVEFTS19TSVpFOyBpICs9IFNVTjNfUE1FR19TSVpFKSB7CisJICAgICBzZWcgPSBzdW4zX2dldF9zZWdtYXAoaSk7CisJICAgICBpZihzZWcgPT0gU1VOM19JTlZBTElEX1BNRUcpCisJCSAgICAgY29udGludWU7CisKKwkgICAgIHN1bjNfcHV0X3NlZ21hcChpLCBTVU4zX0lOVkFMSURfUE1FRyk7CisJICAgICBwbWVnX2FsbG9jW3NlZ10gPSAwOworCSAgICAgcG1lZ19jdHhbc2VnXSA9IDA7CisJICAgICBwbWVnX3ZhZGRyW3NlZ10gPSAwOworICAgICB9CisKKyAgICAgc3VuM19wdXRfY29udGV4dChvbGRjdHgpOworCit9CisKKy8qIEZsdXNoIGEgc2luZ2xlIFRMQiBwYWdlLiBJbiB0aGlzIGNhc2UsIHdlJ3JlIGxpbWl0ZWQgdG8gZmx1c2hpbmcgYQorICAgc2luZ2xlIFBNRUcgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGNoYXIgb2xkY3R4OworCXVuc2lnbmVkIGNoYXIgaTsKKworCW9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKKwlzdW4zX3B1dF9jb250ZXh0KHZtYS0+dm1fbW0tPmNvbnRleHQpOworCWFkZHIgJj0gflNVTjNfUE1FR19NQVNLOworCWlmKChpID0gc3VuM19nZXRfc2VnbWFwKGFkZHIpKSAhPSBTVU4zX0lOVkFMSURfUE1FRykKKwl7CisJCXBtZWdfYWxsb2NbaV0gPSAwOworCQlwbWVnX2N0eFtpXSA9IDA7CisJCXBtZWdfdmFkZHJbaV0gPSAwOworCQlzdW4zX3B1dF9zZWdtYXAgKGFkZHIsICBTVU4zX0lOVkFMSURfUE1FRyk7CisJfQorCXN1bjNfcHV0X2NvbnRleHQob2xkY3R4KTsKKworfQorLyogRmx1c2ggYSByYW5nZSBvZiBwYWdlcyBmcm9tIFRMQi4gKi8KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKKwl1bnNpZ25lZCBjaGFyIHNlZywgb2xkY3R4OworCisJc3RhcnQgJj0gflNVTjNfUE1FR19NQVNLOworCisJb2xkY3R4ID0gc3VuM19nZXRfY29udGV4dCgpOworCXN1bjNfcHV0X2NvbnRleHQobW0tPmNvbnRleHQpOworCisJd2hpbGUoc3RhcnQgPCBlbmQpCisJeworCQlpZigoc2VnID0gc3VuM19nZXRfc2VnbWFwKHN0YXJ0KSkgPT0gU1VOM19JTlZBTElEX1BNRUcpCisJCSAgICAgZ290byBuZXh0OworCQlpZihwbWVnX2N0eFtzZWddID09IG1tLT5jb250ZXh0KSB7CisJCQlwbWVnX2FsbG9jW3NlZ10gPSAwOworCQkJcG1lZ19jdHhbc2VnXSA9IDA7CisJCQlwbWVnX3ZhZGRyW3NlZ10gPSAwOworCQl9CisJCXN1bjNfcHV0X3NlZ21hcChzdGFydCwgU1VOM19JTlZBTElEX1BNRUcpOworCW5leHQ6CisJCXN0YXJ0ICs9IFNVTjNfUE1FR19TSVpFOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJZmx1c2hfdGxiX2FsbCgpOworfQorCisvKiBGbHVzaCBrZXJuZWwgcGFnZSBmcm9tIFRMQi4gKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3BhZ2UgKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdW4zX3B1dF9zZWdtYXAgKGFkZHIgJiB+KFNVTjNfUE1FR19TSVpFIC0gMSksIFNVTjNfSU5WQUxJRF9QTUVHKTsKK30KKwogI2VuZGlmCisKKyNlbHNlIC8qICFDT05GSUdfTU1VICovCisKKy8qCisgKiBmbHVzaCBhbGwgdXNlci1zcGFjZSBhdGMgZW50cmllcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiKHZvaWQpCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQoreworCUJVRygpOworfQorCisjZGVmaW5lIGZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKKworLyoKKyAqIGZsdXNoIGFsbCBhdGMgZW50cmllcyAoYm90aCBrZXJuZWwgYW5kIHVzZXItc3BhY2UgZW50cmllcykuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJQlVHKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCUJVRygpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlCVUcoKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KKworI2VuZGlmIC8qIF9NNjhLX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS90bGJmbHVzaF9tbS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RsYmZsdXNoX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYjZiZjIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RsYmZsdXNoX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19UTEJGTFVTSF9ICi0jZGVmaW5lIF9NNjhLX1RMQkZMVVNIX0gKLQotCi0jaWZuZGVmIENPTkZJR19TVU4zCi0KLSNpbmNsdWRlIDxhc20vY3VycmVudC5oPgotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHZvaWQgKmFkZHIpCi17Ci0JaWYgKENQVV9JU18wNDBfT1JfMDYwKSB7Ci0JCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQkJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKCIuY2hpcCA2ODA0MFxuXHQiCi0JCQkJICAgICAicGZsdXNoICglMClcblx0IgotCQkJCSAgICAgIi5jaGlwIDY4ayIKLQkJCQkgICAgIDogOiAiYSIgKGFkZHIpKTsKLQkJc2V0X2ZzKG9sZF9mcyk7Ci0JfSBlbHNlIGlmIChDUFVfSVNfMDIwX09SXzAzMCkKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInBmbHVzaCAjNCwjNCwoJTApIiA6IDogImEiIChhZGRyKSk7Ci19Ci0KLS8qCi0gKiBmbHVzaCBhbGwgdXNlci1zcGFjZSBhdGMgZW50cmllcy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiKHZvaWQpCi17Ci0JaWYgKENQVV9JU18wNDBfT1JfMDYwKQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmNoaXAgNjgwNDBcblx0IgotCQkJCSAgICAgInBmbHVzaGFuXG5cdCIKLQkJCQkgICAgICIuY2hpcCA2OGsiKTsKLQllbHNlIGlmIChDUFVfSVNfMDIwX09SXzAzMCkKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInBmbHVzaCAjMCwjNCIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19mbHVzaF90bGIwNDBfb25lKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmNoaXAgNjgwNDBcblx0IgotCQkJICAgICAicGZsdXNoICglMClcblx0IgotCQkJICAgICAiLmNoaXAgNjhrIgotCQkJICAgICA6IDogImEiIChhZGRyKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQotewotCWlmIChDUFVfSVNfMDQwX09SXzA2MCkKLQkJX19mbHVzaF90bGIwNDBfb25lKGFkZHIpOwotCWVsc2UgaWYgKENQVV9JU18wMjBfT1JfMDMwKQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygicGZsdXNoICMwLCM0LCglMCkiIDogOiAiYSIgKGFkZHIpKTsKLX0KLQotI2RlZmluZSBmbHVzaF90bGIoKSBfX2ZsdXNoX3RsYigpCi0KLS8qCi0gKiBmbHVzaCBhbGwgYXRjIGVudHJpZXMgKGJvdGgga2VybmVsIGFuZCB1c2VyLXNwYWNlIGVudHJpZXMpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQotewotCWlmIChDUFVfSVNfMDQwX09SXzA2MCkKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oIi5jaGlwIDY4MDQwXG5cdCIKLQkJCQkgICAgICJwZmx1c2hhXG5cdCIKLQkJCQkgICAgICIuY2hpcCA2OGsiKTsKLQllbHNlIGlmIChDUFVfSVNfMDIwX09SXzAzMCkKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInBmbHVzaGEiKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlpZiAobW0gPT0gY3VycmVudC0+YWN0aXZlX21tKQotCQlfX2ZsdXNoX3RsYigpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pIHsKLQkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCQlzZXRfZnMoVVNFUl9EUyk7Ci0JCV9fZmx1c2hfdGxiX29uZShhZGRyKTsKLQkJc2V0X2ZzKG9sZF9mcyk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWlmICh2bWEtPnZtX21tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkKLQkJX19mbHVzaF90bGIoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JZmx1c2hfdGxiX2FsbCgpOwotfQotCi0jZWxzZQotCi0KLS8qIFJlc2VydmVkIFBNRUdzLiAqLwotZXh0ZXJuIGNoYXIgc3VuM19yZXNlcnZlZF9wbWVnW1NVTjNfUE1FR1NfTlVNXTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHBtZWdfdmFkZHJbU1VOM19QTUVHU19OVU1dOwotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgcG1lZ19hbGxvY1tTVU4zX1BNRUdTX05VTV07Ci1leHRlcm4gdW5zaWduZWQgY2hhciBwbWVnX2N0eFtTVU4zX1BNRUdTX05VTV07Ci0KLS8qIEZsdXNoIGFsbCB1c2Vyc3BhY2UgbWFwcGluZ3Mgb25lIGJ5IG9uZS4uLiAgKHdoeSBubyBmbHVzaCBjb21tYW5kLAotICAgc3VuPykgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCi17Ci0gICAgICAgdW5zaWduZWQgbG9uZyBhZGRyOwotICAgICAgIHVuc2lnbmVkIGNoYXIgY3R4LCBvbGRjdHg7Ci0KLSAgICAgICBvbGRjdHggPSBzdW4zX2dldF9jb250ZXh0KCk7Ci0gICAgICAgZm9yKGFkZHIgPSAweDAwMDAwMDAwOyBhZGRyIDwgVEFTS19TSVpFOyBhZGRyICs9IFNVTjNfUE1FR19TSVpFKSB7Ci0JICAgICAgIGZvcihjdHggPSAwOyBjdHggPCA4OyBjdHgrKykgewotCQkgICAgICAgc3VuM19wdXRfY29udGV4dChjdHgpOwotCQkgICAgICAgc3VuM19wdXRfc2VnbWFwKGFkZHIsIFNVTjNfSU5WQUxJRF9QTUVHKTsKLQkgICAgICAgfQotICAgICAgIH0KLQotICAgICAgIHN1bjNfcHV0X2NvbnRleHQob2xkY3R4KTsKLSAgICAgICAvKiBlcmFzZSBhbGwgb2YgdGhlIHVzZXJzcGFjZSBwbWVnIG1hcHMsIHdlJ3ZlIGNsb2JiZXJlZCB0aGVtCi0JICBhbGwgYW55d2F5ICovCi0gICAgICAgZm9yKGFkZHIgPSAwOyBhZGRyIDwgU1VOM19JTlZBTElEX1BNRUc7IGFkZHIrKykgewotCSAgICAgICBpZihwbWVnX2FsbG9jW2FkZHJdID09IDEpIHsKLQkJICAgICAgIHBtZWdfYWxsb2NbYWRkcl0gPSAwOwotCQkgICAgICAgcG1lZ19jdHhbYWRkcl0gPSAwOwotCQkgICAgICAgcG1lZ192YWRkclthZGRyXSA9IDA7Ci0JICAgICAgIH0KLSAgICAgICB9Ci0KLX0KLQotLyogQ2xlYXIgdXNlciBUTEIgZW50cmllcyB3aXRoaW4gdGhlIGNvbnRleHQgbmFtZWQgaW4gbW0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW0gKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotICAgICB1bnNpZ25lZCBjaGFyIG9sZGN0eDsKLSAgICAgdW5zaWduZWQgY2hhciBzZWc7Ci0gICAgIHVuc2lnbmVkIGxvbmcgaTsKLQotICAgICBvbGRjdHggPSBzdW4zX2dldF9jb250ZXh0KCk7Ci0gICAgIHN1bjNfcHV0X2NvbnRleHQobW0tPmNvbnRleHQpOwotCi0gICAgIGZvcihpID0gMDsgaSA8IFRBU0tfU0laRTsgaSArPSBTVU4zX1BNRUdfU0laRSkgewotCSAgICAgc2VnID0gc3VuM19nZXRfc2VnbWFwKGkpOwotCSAgICAgaWYoc2VnID09IFNVTjNfSU5WQUxJRF9QTUVHKQotCQkgICAgIGNvbnRpbnVlOwotCi0JICAgICBzdW4zX3B1dF9zZWdtYXAoaSwgU1VOM19JTlZBTElEX1BNRUcpOwotCSAgICAgcG1lZ19hbGxvY1tzZWddID0gMDsKLQkgICAgIHBtZWdfY3R4W3NlZ10gPSAwOwotCSAgICAgcG1lZ192YWRkcltzZWddID0gMDsKLSAgICAgfQotCi0gICAgIHN1bjNfcHV0X2NvbnRleHQob2xkY3R4KTsKLQotfQotCi0vKiBGbHVzaCBhIHNpbmdsZSBUTEIgcGFnZS4gSW4gdGhpcyBjYXNlLCB3ZSdyZSBsaW1pdGVkIHRvIGZsdXNoaW5nIGEKLSAgIHNpbmdsZSBQTUVHICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BhZ2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl1bnNpZ25lZCBjaGFyIG9sZGN0eDsKLQl1bnNpZ25lZCBjaGFyIGk7Ci0KLQlvbGRjdHggPSBzdW4zX2dldF9jb250ZXh0KCk7Ci0Jc3VuM19wdXRfY29udGV4dCh2bWEtPnZtX21tLT5jb250ZXh0KTsKLQlhZGRyICY9IH5TVU4zX1BNRUdfTUFTSzsKLQlpZigoaSA9IHN1bjNfZ2V0X3NlZ21hcChhZGRyKSkgIT0gU1VOM19JTlZBTElEX1BNRUcpCi0JewotCQlwbWVnX2FsbG9jW2ldID0gMDsKLQkJcG1lZ19jdHhbaV0gPSAwOwotCQlwbWVnX3ZhZGRyW2ldID0gMDsKLQkJc3VuM19wdXRfc2VnbWFwIChhZGRyLCAgU1VOM19JTlZBTElEX1BNRUcpOwotCX0KLQlzdW4zX3B1dF9jb250ZXh0KG9sZGN0eCk7Ci0KLX0KLS8qIEZsdXNoIGEgcmFuZ2Ugb2YgcGFnZXMgZnJvbSBUTEIuICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcmFuZ2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07Ci0JdW5zaWduZWQgY2hhciBzZWcsIG9sZGN0eDsKLQotCXN0YXJ0ICY9IH5TVU4zX1BNRUdfTUFTSzsKLQotCW9sZGN0eCA9IHN1bjNfZ2V0X2NvbnRleHQoKTsKLQlzdW4zX3B1dF9jb250ZXh0KG1tLT5jb250ZXh0KTsKLQotCXdoaWxlKHN0YXJ0IDwgZW5kKQotCXsKLQkJaWYoKHNlZyA9IHN1bjNfZ2V0X3NlZ21hcChzdGFydCkpID09IFNVTjNfSU5WQUxJRF9QTUVHKQotCQkgICAgIGdvdG8gbmV4dDsKLQkJaWYocG1lZ19jdHhbc2VnXSA9PSBtbS0+Y29udGV4dCkgewotCQkJcG1lZ19hbGxvY1tzZWddID0gMDsKLQkJCXBtZWdfY3R4W3NlZ10gPSAwOwotCQkJcG1lZ192YWRkcltzZWddID0gMDsKLQkJfQotCQlzdW4zX3B1dF9zZWdtYXAoc3RhcnQsIFNVTjNfSU5WQUxJRF9QTUVHKTsKLQluZXh0OgotCQlzdGFydCArPSBTVU4zX1BNRUdfU0laRTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWZsdXNoX3RsYl9hbGwoKTsKLX0KLQotLyogRmx1c2gga2VybmVsIHBhZ2UgZnJvbSBUTEIuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9wYWdlICh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jc3VuM19wdXRfc2VnbWFwIChhZGRyICYgfihTVU4zX1BNRUdfU0laRSAtIDEpLCBTVU4zX0lOVkFMSURfUE1FRyk7Ci19Ci0KLSNlbmRpZgotCi0jZW5kaWYgLyogX002OEtfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3RsYmZsdXNoX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2hfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ3MGNmYi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdGxiZmx1c2hfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9UTEJGTFVTSF9ICi0jZGVmaW5lIF9NNjhLTk9NTVVfVExCRkxVU0hfSAotCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAwIExpbmVvLCBEYXZpZCBNY0N1bGxvdWdoIDxkYXZpZG1AdWNsaW51eC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiwgR3JlZyBVbmdlcmVyIDxnZXJnQHNuYXBnZWFyLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0KLS8qCi0gKiBmbHVzaCBhbGwgdXNlci1zcGFjZSBhdGMgZW50cmllcy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fZmx1c2hfdGxiKHZvaWQpCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhZGRyKQotewotCUJVRygpOwotfQotCi0jZGVmaW5lIGZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKLQotLyoKLSAqIGZsdXNoIGFsbCBhdGMgZW50cmllcyAoYm90aCBrZXJuZWwgYW5kIHVzZXItc3BhY2UgZW50cmllcykuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCUJVRygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCUJVRygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlCVUcoKTsKLX0KLQotI2VuZGlmIC8qIF9NNjhLTk9NTVVfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0LmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaAppbmRleCBiNTNjZDE2Li5lNGUyMjY2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHQuaApAQCAtMSw1ICsxLDMwIEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJ1Y29udGV4dF9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJ1Y29udGV4dF9tbS5oIgorI2lmbmRlZiBfTTY4S19VQ09OVEVYVF9ICisjZGVmaW5lIF9NNjhLX1VDT05URVhUX0gKKwordHlwZWRlZiBpbnQgZ3JlZ190OworI2RlZmluZSBOR1JFRyAxOAordHlwZWRlZiBncmVnX3QgZ3JlZ3NldF90W05HUkVHXTsKKwordHlwZWRlZiBzdHJ1Y3QgZnByZWdzZXQgeworCWludCBmX2ZwY250bFszXTsKKwlpbnQgZl9mcHJlZ3NbOCozXTsKK30gZnByZWdzZXRfdDsKKworc3RydWN0IG1jb250ZXh0IHsKKwlpbnQgdmVyc2lvbjsKKwlncmVnc2V0X3QgZ3JlZ3M7CisJZnByZWdzZXRfdCBmcHJlZ3M7Cit9OworCisjZGVmaW5lIE1DT05URVhUX1ZFUlNJT04gMgorCitzdHJ1Y3QgdWNvbnRleHQgeworCXVuc2lnbmVkIGxvbmcJICB1Y19mbGFnczsKKwlzdHJ1Y3QgdWNvbnRleHQgICp1Y19saW5rOworCXN0YWNrX3QJCSAgdWNfc3RhY2s7CisJc3RydWN0IG1jb250ZXh0CSAgdWNfbWNvbnRleHQ7CisJdW5zaWduZWQgbG9uZwkgIHVjX2ZpbGxlcls4MF07CisJc2lnc2V0X3QJICB1Y19zaWdtYXNrOwkvKiBtYXNrIGxhc3QgZm9yIGV4dGVuc2liaWxpdHkgKi8KK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHRfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRlMjI2Ni4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdWNvbnRleHRfbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSNpZm5kZWYgX002OEtfVUNPTlRFWFRfSAotI2RlZmluZSBfTTY4S19VQ09OVEVYVF9ICi0KLXR5cGVkZWYgaW50IGdyZWdfdDsKLSNkZWZpbmUgTkdSRUcgMTgKLXR5cGVkZWYgZ3JlZ190IGdyZWdzZXRfdFtOR1JFR107Ci0KLXR5cGVkZWYgc3RydWN0IGZwcmVnc2V0IHsKLQlpbnQgZl9mcGNudGxbM107Ci0JaW50IGZfZnByZWdzWzgqM107Ci19IGZwcmVnc2V0X3Q7Ci0KLXN0cnVjdCBtY29udGV4dCB7Ci0JaW50IHZlcnNpb247Ci0JZ3JlZ3NldF90IGdyZWdzOwotCWZwcmVnc2V0X3QgZnByZWdzOwotfTsKLQotI2RlZmluZSBNQ09OVEVYVF9WRVJTSU9OIDIKLQotc3RydWN0IHVjb250ZXh0IHsKLQl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7Ci0Jc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKLQlzdGFja190CQkgIHVjX3N0YWNrOwotCXN0cnVjdCBtY29udGV4dAkgIHVjX21jb250ZXh0OwotCXVuc2lnbmVkIGxvbmcJICB1Y19maWxsZXJbODBdOwotCXNpZ3NldF90CSAgdWNfc2lnbWFzazsJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91Y29udGV4dF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0X25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxM2EyN2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3Vjb250ZXh0X25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jaWZuZGVmIF9NNjhLTk9NTVVfVUNPTlRFWFRfSAotI2RlZmluZSBfTTY4S05PTU1VX1VDT05URVhUX0gKLQotdHlwZWRlZiBpbnQgZ3JlZ190OwotI2RlZmluZSBOR1JFRyAxOAotdHlwZWRlZiBncmVnX3QgZ3JlZ3NldF90W05HUkVHXTsKLQotdHlwZWRlZiBzdHJ1Y3QgZnByZWdzZXQgewotCWludCBmX3BjcjsKLQlpbnQgZl9wc3I7Ci0JaW50IGZfZnBpYWRkcjsKLQlpbnQgZl9mcHJlZ3NbOF1bM107Ci19IGZwcmVnc2V0X3Q7Ci0KLXN0cnVjdCBtY29udGV4dCB7Ci0JaW50IHZlcnNpb247Ci0JZ3JlZ3NldF90IGdyZWdzOwotCWZwcmVnc2V0X3QgZnByZWdzOwotfTsKLQotI2RlZmluZSBNQ09OVEVYVF9WRVJTSU9OIDIKLQotc3RydWN0IHVjb250ZXh0IHsKLQl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7Ci0Jc3RydWN0IHVjb250ZXh0ICAqdWNfbGluazsKLQlzdGFja190CQkgIHVjX3N0YWNrOwotCXN0cnVjdCBtY29udGV4dAkgIHVjX21jb250ZXh0OwotCXVuc2lnbmVkIGxvbmcJICB1Y19maWxsZXJbODBdOwotCXNpZ3NldF90CSAgdWNfc2lnbWFzazsJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCi19OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmFsaWduZWQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmFsaWduZWQuaAppbmRleCBjNjQwYmJhLi4wMTljYWE3IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5hbGlnbmVkLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oCkBAIC0xLDUgKzEsMjUgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInVuYWxpZ25lZF9uby5oIgorI2lmbmRlZiBfQVNNX002OEtfVU5BTElHTkVEX0gKKyNkZWZpbmUgX0FTTV9NNjhLX1VOQUxJR05FRF9ICisKKworI2lmZGVmIENPTkZJR19DT0xERklSRQorI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9iZV9zdHJ1Y3QuaD4KKyNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvbGVfYnl0ZXNoaWZ0Lmg+CisjaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2dlbmVyaWMuaD4KKworI2RlZmluZSBnZXRfdW5hbGlnbmVkCV9fZ2V0X3VuYWxpZ25lZF9iZQorI2RlZmluZSBwdXRfdW5hbGlnbmVkCV9fcHV0X3VuYWxpZ25lZF9iZQorCiAjZWxzZQotI2luY2x1ZGUgInVuYWxpZ25lZF9tbS5oIgorLyoKKyAqIFRoZSBtNjhrIGNhbiBkbyB1bmFsaWduZWQgYWNjZXNzZXMgaXRzZWxmLiAKKyAqLworI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9hY2Nlc3Nfb2suaD4KKyNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgorCisjZGVmaW5lIGdldF91bmFsaWduZWQJX19nZXRfdW5hbGlnbmVkX2JlCisjZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2JlCisKICNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9NNjhLX1VOQUxJR05FRF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5hbGlnbmVkX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5hbGlnbmVkX21tLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3Njk4ZjIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuYWxpZ25lZF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotI2lmbmRlZiBfQVNNX002OEtfVU5BTElHTkVEX0gKLSNkZWZpbmUgX0FTTV9NNjhLX1VOQUxJR05FRF9ICi0KLS8qCi0gKiBUaGUgbTY4ayBjYW4gZG8gdW5hbGlnbmVkIGFjY2Vzc2VzIGl0c2VsZi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9hY2Nlc3Nfb2suaD4KLSNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgotCi0jZGVmaW5lIGdldF91bmFsaWduZWQJX19nZXRfdW5hbGlnbmVkX2JlCi0jZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2JlCi0KLSNlbmRpZiAvKiBfQVNNX002OEtfVU5BTElHTkVEX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmFsaWduZWRfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmFsaWduZWRfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWIxZWE0Yy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5hbGlnbmVkX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jaWZuZGVmIF9BU01fTTY4S05PTU1VX1VOQUxJR05FRF9ICi0jZGVmaW5lIF9BU01fTTY4S05PTU1VX1VOQUxJR05FRF9ICi0KLQotI2lmZGVmIENPTkZJR19DT0xERklSRQotI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9iZV9zdHJ1Y3QuaD4KLSNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvbGVfYnl0ZXNoaWZ0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdW5hbGlnbmVkL2dlbmVyaWMuaD4KLQotI2RlZmluZSBnZXRfdW5hbGlnbmVkCV9fZ2V0X3VuYWxpZ25lZF9iZQotI2RlZmluZSBwdXRfdW5hbGlnbmVkCV9fcHV0X3VuYWxpZ25lZF9iZQotCi0jZWxzZQotLyoKLSAqIFRoZSBtNjhrIGNhbiBkbyB1bmFsaWduZWQgYWNjZXNzZXMgaXRzZWxmLiAKLSAqLwotI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9hY2Nlc3Nfb2suaD4KLSNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQvZ2VuZXJpYy5oPgotCi0jZGVmaW5lIGdldF91bmFsaWduZWQJX19nZXRfdW5hbGlnbmVkX2JlCi0jZGVmaW5lIHB1dF91bmFsaWduZWQJX19wdXRfdW5hbGlnbmVkX2JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLyogX0FTTV9NNjhLTk9NTVVfVU5BTElHTkVEX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNjMyY2UwMS4uZWMzN2ZiNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAkJICAgICAgIHBhcmVudF90aWRwdHIsIGNoaWxkX3RpZHB0cik7CiB9CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAogCQkgdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3RpbWUuYyBiL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jCmluZGV4IDdkYjQxNTkuLjU0ZDk4MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0xNTksMyArMTYwLDIwIEBACiB9CiAKIEVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKKworCitzdGF0aWMgaW50IF9faW5pdCBydGNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwlpZiAoIW1hY2hfaHdjbGspCisJCXJldHVybiAtRU5PREVWOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoInJ0Yy1nZW5lcmljIiwgLTEsIE5VTEwsIDApOworCWlmIChJU19FUlIocGRldikpCisJCXJldHVybiBQVFJfRVJSKHBkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KHJ0Y19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L01ha2VmaWxlIGIvYXJjaC9tNjhrbm9tbXUvTWFrZWZpbGUKaW5kZXggZmQwZmIzMC4uY2U0MDRiYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrbm9tbXUvTWFrZWZpbGUKQEAgLTg4LDE4ICs4OCwxOCBAQAogIwogIyBTb21lIENGTEFHIGFkZGl0aW9ucyBiYXNlZCBvbiBzcGVjaWZpYyBDUFUgdHlwZS4KICMKLWNmbGFncy0kKENPTkZJR19NNTIwNikJCTo9IC1tNTIwMAotY2ZsYWdzLSQoQ09ORklHX001MjA2ZSkJCTo9IC1tNTIwMAotY2ZsYWdzLSQoQ09ORklHX001MjB4KQkJOj0gLW01MzA3CitjZmxhZ3MtJChDT05GSUdfTTUyMDYpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tY3B1PTUyMDYsLW01MjAwKQorY2ZsYWdzLSQoQ09ORklHX001MjA2ZSkJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW01MjA2ZSwtbTUyMDApCitjZmxhZ3MtJChDT05GSUdfTTUyMHgpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tY3B1PTUyMDgsLW01MjAwKQogY2ZsYWdzLSQoQ09ORklHX001MjN4KQkJOj0gJChjYWxsIGNjLW9wdGlvbiwtbWNwdT01MjN4LC1tNTMwNykKLWNmbGFncy0kKENPTkZJR19NNTI0OSkJCTo9IC1tNTIwMAorY2ZsYWdzLSQoQ09ORklHX001MjQ5KQkJOj0gJChjYWxsIGNjLW9wdGlvbiwtbWNwdT01MjQ5LC1tNTIwMCkKIGNmbGFncy0kKENPTkZJR19NNTI3MSkJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW1jcHU9NTI3MSwtbTUzMDcpCi1jZmxhZ3MtJChDT05GSUdfTTUyNzIpCQk6PSAtbTUzMDcKK2NmbGFncy0kKENPTkZJR19NNTI3MikJCTo9ICQoY2FsbCBjYy1vcHRpb24sLW1jcHU9NTI3MSwtbTUyMDApCiBjZmxhZ3MtJChDT05GSUdfTTUyNzUpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tY3B1PTUyNzUsLW01MzA3KQogY2ZsYWdzLSQoQ09ORklHX001Mjh4KQkJOj0gJChjYWxsIGNjLW9wdGlvbiwtbTUyOHgsLW01MzA3KQotY2ZsYWdzLSQoQ09ORklHX001MzA3KQkJOj0gLW01MzA3CitjZmxhZ3MtJChDT05GSUdfTTUzMDcpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tNTMwNywtbTUyMDApCiBjZmxhZ3MtJChDT05GSUdfTTUzMngpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tY3B1PTUzMngsLW01MzA3KQotY2ZsYWdzLSQoQ09ORklHX001NDA3KQkJOj0gLW01MjAwCitjZmxhZ3MtJChDT05GSUdfTTU0MDcpCQk6PSAkKGNhbGwgY2Mtb3B0aW9uLC1tNTQwNywtbTUyMDApCiBjZmxhZ3MtJChDT05GSUdfTTY4MzI4KQkJOj0gLW02ODAwMAogY2ZsYWdzLSQoQ09ORklHX002OEVaMzI4KQk6PSAtbTY4MDAwCiBjZmxhZ3MtJChDT05GSUdfTTY4VlozMjgpCTo9IC1tNjgwMDAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9kbWEuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9kbWEuYwppbmRleCBlMTBlYWZjLi45MzYxMjU4IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvZG1hLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2RtYS5jCkBAIC05LDEwICs5LDExIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGludCBnZnApCisJCQkgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApCiB7CiAJdm9pZCAqcmV0OwogCS8qIGlnbm9yZSByZWdpb24gc3BlY2lmaWVycyAqLwpAQCAtMzQsMyArMzUsOCBAQAogewogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGdldF9vcmRlcihzaXplKSk7CiB9CisKK3ZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGhhbmRsZSwgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL2lycS5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2lycS5jCmluZGV4IGJiYTFiYjQuLjU2ZTBmNGM1IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL2lycS5jCkBAIC0yMyw3ICsyMyw3IEBACiAJc3RydWN0IHB0X3JlZ3MgKm9sZHJlZ3MgPSBzZXRfaXJxX3JlZ3MocmVncyk7CiAKIAlpcnFfZW50ZXIoKTsKLQlfX2RvX0lSUShpcnEpOworCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwogCWlycV9leGl0KCk7CiAKIAlzZXRfaXJxX3JlZ3Mob2xkcmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3Byb2Nlc3MuYwppbmRleCAzZjJkNzc0Li4xZTk2YzZlIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogICAgICAgICByZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgbmV3c3AsIHJlZ3MsIDAsIE5VTEwsIE5VTEwpOwogfQogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCiAJCXVuc2lnbmVkIGxvbmcgdXNwLCB1bnNpZ25lZCBsb25nIHRvcHN0aywKIAkJc3RydWN0IHRhc2tfc3RydWN0ICogcCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jIGIvYXJjaC9tNjhrbm9tbXUvbW0vaW5pdC5jCmluZGV4IDNiZjI0OWMuLjdiZWZjMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L21tL2luaXQuYworKysgYi9hcmNoL202OGtub21tdS9tbS9pbml0LmMKQEAgLTExMSwxMSArMTExLDcgQEAKIAl7CiAJCXVuc2lnbmVkIGxvbmcgem9uZXNfc2l6ZVtNQVhfTlJfWk9ORVNdID0gezAsIH07CiAKLQkJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSAwID4+IFBBR0VfU0hJRlQ7Ci0JCXpvbmVzX3NpemVbWk9ORV9OT1JNQUxdID0gKGVuZF9tZW0gLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVDsKLSNpZmRlZiBDT05GSUdfSElHSE1FTQotCQl6b25lc19zaXplW1pPTkVfSElHSE1FTV0gPSAwOwotI2VuZGlmCisJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gKGVuZF9tZW0gLSBQQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVDsKIAkJZnJlZV9hcmVhX2luaXQoem9uZXNfc2l6ZSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNDkvY29uZmlnLmMKaW5kZXggZDI5OWY3Yi4uOWVhYjE5ZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjQ5L2NvbmZpZy5jCkBAIC0zMiw3ICszMiw4IEBACiAJewogCQkubWFwYmFzZSAJPSBNQ0ZfTUJBUiArIE1DRlVBUlRfQkFTRTIsCiAJCS5pcnEJCT0gNzQsCi0JfQorCX0sCisJeyB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUyNDlfdWFydCA9IHsKQEAgLTUwLDEyICs1MSwxMiBAQAogc3RhdGljIHZvaWQgX19pbml0IG01MjQ5X3VhcnRfaW5pdF9saW5lKGludCBsaW5lLCBpbnQgaXJxKQogewogCWlmIChsaW5lID09IDApIHsKLQkJd3JpdGVsKE1DRlNJTV9JQ1JfTEVWRUw2IHwgTUNGU0lNX0lDUl9QUkkxLCBNQ0ZfTUJBUiArIE1DRlNJTV9VQVJUMUlDUik7Ci0JCXdyaXRlYihpcnEsIE1DRlVBUlRfQkFTRTEgKyBNQ0ZVQVJUX1VJVlIpOworCQl3cml0ZWIoTUNGU0lNX0lDUl9MRVZFTDYgfCBNQ0ZTSU1fSUNSX1BSSTEsIE1DRl9NQkFSICsgTUNGU0lNX1VBUlQxSUNSKTsKKwkJd3JpdGViKGlycSwgTUNGX01CQVIgKyBNQ0ZVQVJUX0JBU0UxICsgTUNGVUFSVF9VSVZSKTsKIAkJbWNmX3NldGltcihtY2ZfZ2V0aW1yKCkgJiB+TUNGU0lNX0lNUl9VQVJUMSk7CiAJfSBlbHNlIGlmIChsaW5lID09IDEpIHsKLQkJd3JpdGVsKE1DRlNJTV9JQ1JfTEVWRUw2IHwgTUNGU0lNX0lDUl9QUkkyLCBNQ0ZfTUJBUiArIE1DRlNJTV9VQVJUMklDUik7Ci0JCXdyaXRlYihpcnEsIE1DRlVBUlRfQkFTRTIgKyBNQ0ZVQVJUX1VJVlIpOworCQl3cml0ZWIoTUNGU0lNX0lDUl9MRVZFTDYgfCBNQ0ZTSU1fSUNSX1BSSTIsIE1DRl9NQkFSICsgTUNGU0lNX1VBUlQySUNSKTsKKwkJd3JpdGViKGlycSwgTUNGX01CQVIgKyBNQ0ZVQVJUX0JBU0UyICsgTUNGVUFSVF9VSVZSKTsKIAkJbWNmX3NldGltcihtY2ZfZ2V0aW1yKCkgJiB+TUNGU0lNX0lNUl9VQVJUMik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvY29uZmlnLmMKaW5kZXggNzI0ZmFmMC4uNDQ4MDNiZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L2NvbmZpZy5jCkBAIC02NSwxMiArNjUsMTIgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBtNTMwN191YXJ0X2luaXRfbGluZShpbnQgbGluZSwgaW50IGlycSkKIHsKIAlpZiAobGluZSA9PSAwKSB7Ci0JCXdyaXRlbChNQ0ZTSU1fSUNSX0xFVkVMNiB8IE1DRlNJTV9JQ1JfUFJJMSwgTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDFJQ1IpOwotCQl3cml0ZWIoaXJxLCBNQ0ZVQVJUX0JBU0UxICsgTUNGVUFSVF9VSVZSKTsKKwkJd3JpdGViKE1DRlNJTV9JQ1JfTEVWRUw2IHwgTUNGU0lNX0lDUl9QUkkxLCBNQ0ZfTUJBUiArIE1DRlNJTV9VQVJUMUlDUik7CisJCXdyaXRlYihpcnEsIE1DRl9NQkFSICsgTUNGVUFSVF9CQVNFMSArIE1DRlVBUlRfVUlWUik7CiAJCW1jZl9zZXRpbXIobWNmX2dldGltcigpICYgfk1DRlNJTV9JTVJfVUFSVDEpOwogCX0gZWxzZSBpZiAobGluZSA9PSAxKSB7Ci0JCXdyaXRlbChNQ0ZTSU1fSUNSX0xFVkVMNiB8IE1DRlNJTV9JQ1JfUFJJMiwgTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDJJQ1IpOwotCQl3cml0ZWIoaXJxLCBNQ0ZVQVJUX0JBU0UyICsgTUNGVUFSVF9VSVZSKTsKKwkJd3JpdGViKE1DRlNJTV9JQ1JfTEVWRUw2IHwgTUNGU0lNX0lDUl9QUkkyLCBNQ0ZfTUJBUiArIE1DRlNJTV9VQVJUMklDUik7CisJCXdyaXRlYihpcnEsIE1DRl9NQkFSICsgTUNGVUFSVF9CQVNFMiArIE1DRlVBUlRfVUlWUik7CiAJCW1jZl9zZXRpbXIobWNmX2dldGltcigpICYgfk1DRlNJTV9JTVJfVUFSVDIpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzU0MDcvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81NDA3L2NvbmZpZy5jCmluZGV4IDY0OGI4YjcuLjBlZThjMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzU0MDcvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTQwNy9jb25maWcuYwpAQCAtNTYsMTIgKzU2LDEyIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgbTU0MDdfdWFydF9pbml0X2xpbmUoaW50IGxpbmUsIGludCBpcnEpCiB7CiAJaWYgKGxpbmUgPT0gMCkgewotCQl3cml0ZWwoTUNGU0lNX0lDUl9MRVZFTDYgfCBNQ0ZTSU1fSUNSX1BSSTEsIE1DRl9NQkFSICsgTUNGU0lNX1VBUlQxSUNSKTsKLQkJd3JpdGViKGlycSwgTUNGVUFSVF9CQVNFMSArIE1DRlVBUlRfVUlWUik7CisJCXdyaXRlYihNQ0ZTSU1fSUNSX0xFVkVMNiB8IE1DRlNJTV9JQ1JfUFJJMSwgTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDFJQ1IpOworCQl3cml0ZWIoaXJxLCBNQ0ZfTUJBUiArIE1DRlVBUlRfQkFTRTEgKyBNQ0ZVQVJUX1VJVlIpOwogCQltY2Zfc2V0aW1yKG1jZl9nZXRpbXIoKSAmIH5NQ0ZTSU1fSU1SX1VBUlQxKTsKIAl9IGVsc2UgaWYgKGxpbmUgPT0gMSkgewotCQl3cml0ZWwoTUNGU0lNX0lDUl9MRVZFTDYgfCBNQ0ZTSU1fSUNSX1BSSTIsIE1DRl9NQkFSICsgTUNGU0lNX1VBUlQySUNSKTsKLQkJd3JpdGViKGlycSwgTUNGVUFSVF9CQVNFMiArIE1DRlVBUlRfVUlWUik7CisJCXdyaXRlYihNQ0ZTSU1fSUNSX0xFVkVMNiB8IE1DRlNJTV9JQ1JfUFJJMiwgTUNGX01CQVIgKyBNQ0ZTSU1fVUFSVDJJQ1IpOworCQl3cml0ZWIoaXJxLCBNQ0ZfTUJBUiArIE1DRlVBUlRfQkFTRTIgKyBNQ0ZVQVJUX1VJVlIpOwogCQltY2Zfc2V0aW1yKG1jZl9nZXRpbXIoKSAmIH5NQ0ZTSU1fSU1SX1VBUlQyKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9NYWtlZmlsZSBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL01ha2VmaWxlCmluZGV4IDRmNDE2YTkuLjFiY2I5MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL01ha2VmaWxlCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw3IEBACiAKIGFzZmxhZ3MtJChDT05GSUdfRlVMTERFQlVHKSA6PSAtRERFQlVHR0VSX0NPTVBBVElCTEVfQ0FDSEU9MQogCi1vYmotJChDT05GSUdfQ09MREZJUkUpCSs9IGRtYS5vIGVudHJ5Lm8gdmVjdG9ycy5vCitvYmotJChDT05GSUdfQ09MREZJUkUpCSs9IGNsay5vIGRtYS5vIGVudHJ5Lm8gdmVjdG9ycy5vCiBvYmotJChDT05GSUdfTTUyMDYpCSs9IHRpbWVycy5vCiBvYmotJChDT05GSUdfTTUyMDZlKQkrPSB0aW1lcnMubwogb2JqLSQoQ09ORklHX001MjB4KQkrPSBwaXQubwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvY2xrLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS9jb2xkZmlyZS9jbGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2RiZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvY2xrLmMKQEAgLTAsMCArMSw0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqCWNsay5jIC0tIGdlbmVyYWwgQ29sZEZpcmUgQ1BVIGtlcm5lbCBjbGsgaGFuZGxpbmcKKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDksIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGFzbS9jb2xkZmlyZS5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7Cit9CisKK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gTUNGX0NMSzsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggZGM3ODcxOS4uOTk4ZTVkYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTEzNCw3ICsxMzQsNyBAQAogCWhlbHAKIAkgVGhpcyBhIGZhbWlseSBvZiBtYWNoaW5lcyBiYXNlZCBvbiB0aGUgTUlQUyBSNDAzMCBjaGlwc2V0IHdoaWNoIHdhcwogCSB1c2VkIGJ5IHNldmVyYWwgdmVuZG9ycyB0byBidWlsZCBSSVNDL29zIGFuZCBXaW5kb3dzIE5UIHdvcmtzdGF0aW9ucy4KLQkgTWVtYmVycyBpbmNsdWRlIHRoZSBBY2VyIFBJQ0EsIE1JUFMgTWFnbnVtIDQwMDAsIE1JUFMgTWlsbGVuaXVtIGFuZAorCSBNZW1iZXJzIGluY2x1ZGUgdGhlIEFjZXIgUElDQSwgTUlQUyBNYWdudW0gNDAwMCwgTUlQUyBNaWxsZW5uaXVtIGFuZAogCSBPbGl2ZXR0aSBNNzAwLTEwIHdvcmtzdGF0aW9ucy4KIAogY29uZmlnIExBU0FUCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhOGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9ncGlvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L2dwaW8uaAppbmRleCBkOGZmNGNkLi4xNzg0ZmRlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L2dwaW8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L2dwaW8uaApAQCAtMzEsMjQgKzMxLDI4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCiB7Ci0JcmV0dXJuIHNzYl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLCAwKTsKKwlzc2JfZ3Bpb19vdXRlbigmc3NiX2JjbTQ3eHgsIDEgPDwgZ3BpbywgMCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCiB7Ci0JcmV0dXJuIHNzYl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLCAxIDw8IGdwaW8pOworCXNzYl9ncGlvX291dGVuKCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLCAxIDw8IGdwaW8pOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdwaW9faW50bWFzayh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBncGlvX2ludG1hc2sodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQogewotCXJldHVybiBzc2JfZ3Bpb19pbnRtYXNrKCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLAotCQkJCXZhbHVlID8gMSA8PCBncGlvIDogMCk7CisJc3NiX2dwaW9faW50bWFzaygmc3NiX2JjbTQ3eHgsIDEgPDwgZ3BpbywKKwkJCSB2YWx1ZSA/IDEgPDwgZ3BpbyA6IDApOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdwaW9fcG9sYXJpdHkodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgZ3Bpb19wb2xhcml0eSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCiB7Ci0JcmV0dXJuIHNzYl9ncGlvX3BvbGFyaXR5KCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLAotCQkJCSB2YWx1ZSA/IDEgPDwgZ3BpbyA6IDApOworCXNzYl9ncGlvX3BvbGFyaXR5KCZzc2JfYmNtNDd4eCwgMSA8PCBncGlvLAorCQkJICB2YWx1ZSA/IDEgPDwgZ3BpbyA6IDApOworCXJldHVybiAwOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggMTBlODI0NC4uNWI2MGEwOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTQ4MCw2ICs0ODAsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9jayhsb2NrKQogCiAjZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCBhNzNlMTUzLi40MDAwNTAxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zNTAsMTYgKzM1MCwxOCBAQAogI2RlZmluZSBfX05SX2R1cDMJCQkoX19OUl9MaW51eCArIDMyNykKICNkZWZpbmUgX19OUl9waXBlMgkJCShfX05SX0xpbnV4ICsgMzI4KQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJCShfX05SX0xpbnV4ICsgMzI5KQorI2RlZmluZSBfX05SX3ByZWFkdgkJCShfX05SX0xpbnV4ICsgMzMwKQorI2RlZmluZSBfX05SX3B3cml0ZXYJCQkoX19OUl9MaW51eCArIDMzMSkKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCBvMzIgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkzMjkKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzMxCiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyICovCiAKICNkZWZpbmUgX19OUl9PMzJfTGludXgJCQk0MDAwCi0jZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzCQkzMjkKKyNkZWZpbmUgX19OUl9PMzJfTGludXhfc3lzY2FsbHMJCTMzMQogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NAogCkBAIC02NTYsMTYgKzY1OCwxOCBAQAogI2RlZmluZSBfX05SX2R1cDMJCQkoX19OUl9MaW51eCArIDI4NikKICNkZWZpbmUgX19OUl9waXBlMgkJCShfX05SX0xpbnV4ICsgMjg3KQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJCShfX05SX0xpbnV4ICsgMjg4KQorI2RlZmluZSBfX05SX3ByZWFkdgkJCShfX05SX0xpbnV4ICsgMjg5KQorI2RlZmluZSBfX05SX3B3cml0ZXYJCQkoX19OUl9MaW51eCArIDI5MCkKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCA2NC1iaXQgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyODgKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjkwCiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0ICovCiAKICNkZWZpbmUgX19OUl82NF9MaW51eAkJCTUwMDAKLSNkZWZpbmUgX19OUl82NF9MaW51eF9zeXNjYWxscwkJMjg4CisjZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMJCTI5MAogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIKIApAQCAtOTY2LDE2ICs5NzAsMTggQEAKICNkZWZpbmUgX19OUl9kdXAzCQkJKF9fTlJfTGludXggKyAyOTApCiAjZGVmaW5lIF9fTlJfcGlwZTIJCQkoX19OUl9MaW51eCArIDI5MSkKICNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxCQkoX19OUl9MaW51eCArIDI5MikKKyNkZWZpbmUgX19OUl9wcmVhZHYJCQkoX19OUl9MaW51eCArIDI5MykKKyNkZWZpbmUgX19OUl9wd3JpdGV2CQkJKF9fTlJfTGludXggKyAyOTQpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTjMyIGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMjkyCisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI5NAogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIgKi8KIAogI2RlZmluZSBfX05SX04zMl9MaW51eAkJCTYwMDAKLSNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMJCTI5MgorI2RlZmluZSBfX05SX04zMl9MaW51eF9zeXNjYWxscwkJMjk0CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggY2EyZTQwMi4uMWVhYWE0NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTk5LDcgKzk5LDcgQEAKIHsKIH0KIAotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJdW5zaWduZWQgbG9uZyB1bnVzZWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8ocCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggOWFiNzBjMy4uMGIzMWI5YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtNjUwLDYgKzY1MCw4IEBACiAJc3lzCXN5c19kdXAzCQkzCiAJc3lzCXN5c19waXBlMgkJMgogCXN5cwlzeXNfaW5vdGlmeV9pbml0MQkxCisJc3lzCXN5c19wcmVhZHYJCTYJLyogNDMzMCAqLworCXN5cwlzeXNfcHdyaXRldgkJNgogCS5lbmRtCiAKIAkvKiBXZSBwcmUtY29tcHV0ZSB0aGUgbnVtYmVyIG9mIF9pbnN0cnVjdGlvbl8gYnl0ZXMgbmVlZGVkIHRvCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCmluZGV4IDliNDY5ODYuLmM2NDdmZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCkBAIC00ODcsNCArNDg3LDYgQEAKIAlQVFIJc3lzX2R1cDMKIAlQVFIJc3lzX3BpcGUyCiAJUFRSCXN5c19pbm90aWZ5X2luaXQxCisJUFRSCXN5c19wcmVhZHYKKwlQVFIJc3lzX3B3cml0ZXYJCQkvKiA1MzkwICovCiAJLnNpemUJc3lzX2NhbGxfdGFibGUsLi1zeXNfY2FsbF90YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCmluZGV4IGY2MWQ2YjAuLmMyYzE2ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKQEAgLTQxMyw0ICs0MTMsNiBAQAogCVBUUglzeXNfZHVwMwkJCS8qIDUyOTAgKi8KIAlQVFIJc3lzX3BpcGUyCiAJUFRSCXN5c19pbm90aWZ5X2luaXQxCisJUFRSCXN5c19wcmVhZHYKKwlQVFIJc3lzX3B3cml0ZXYKIAkuc2l6ZQlzeXNuMzJfY2FsbF90YWJsZSwuLXN5c24zMl9jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggNjA5OTdmMS4uMDAyZmFjMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtNTMzLDQgKzUzMyw2IEBACiAJUFRSCXN5c19kdXAzCiAJUFRSCXN5c19waXBlMgogCVBUUglzeXNfaW5vdGlmeV9pbml0MQorCVBUUgljb21wYXRfc3lzX3ByZWFkdgkJLyogNDMzMCAqLworCVBUUgljb21wYXRfc3lzX3B3cml0ZXYKIAkuc2l6ZQlzeXNfY2FsbF90YWJsZSwuLXN5c19jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaGlnaG1lbS5jIGIvYXJjaC9taXBzL21tL2hpZ2htZW0uYwppbmRleCAwNjBkMjhkLi40NDgxNjU2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCisrKyBiL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKQEAgLTQyLDYgKzQyLDcgQEAKIAlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQogCQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCisJZGVidWdfa21hcF9hdG9taWModHlwZSk7CiAJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIqc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KQEAgLTg4LDYgKzg5LDcgQEAKIAogCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CiAKKwlkZWJ1Z19rbWFwX2F0b21pYyh0eXBlKTsKIAlpZHggPSB0eXBlICsgS01fVFlQRV9OUipzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKIAlzZXRfcHRlKGttYXBfcHRlLWlkeCwgcGZuX3B0ZShwZm4sIGttYXBfcHJvdCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctc21wLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1zbXAuYwppbmRleCA1YjQ3ZDZiLi5jYmNkN2ViIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1zbXAuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1zbXAuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJICogQXNzdW1wdGlvbiB0byBiZSBmaXhlZDogd2UncmUgYWx3YXlzIGJvb3RlZCBvbiBsb2dpY2FsIC8gcGh5c2ljYWwKIAkgKiBwcm9jZXNzb3IgMC4gIFdoaWxlIHdlJ3JlIGFsd2F5cyBydW5uaW5nIG9uIGxvZ2ljYWwgcHJvY2Vzc29yIDAKIAkgKiB0aGlzIHN0aWxsIG1lYW5zIHRoaXMgaXMgcGh5c2ljYWwgcHJvY2Vzc29yIHplcm87IGl0IG1pZ2h0IGZvcgotCSAqIGV4YW1wbGUgYmUgZGlzYWJsZWQgaW4gdGhlIGZpcnd3YXJlLgorCSAqIGV4YW1wbGUgYmUgZGlzYWJsZWQgaW4gdGhlIGZpcm13YXJlLgogCSAqLwogCWFsbG9jX2NwdXBkYSgwLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYjI4YzlhNi4uMjM0Y2YzNCAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogICogc2V0IHVwIHRoZSBrZXJuZWwgc3RhY2sgZm9yIGEgbmV3IHRocmVhZCBhbmQgY29weSBhcmNoLXNwZWNpZmljIHRocmVhZAogICogY29udHJvbCBpbmZvcm1hdGlvbgogICovCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsCiAJCXVuc2lnbmVkIGxvbmcgY191c3AsIHVuc2lnbmVkIGxvbmcgdXN0a19zaXplLAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICprcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IGFhY2YxMWQuLjkwMzhmMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtOSw5ICs5LDEzIEBACiAJZGVmX2Jvb2wgeQogCXNlbGVjdCBIQVZFX0lERQogCXNlbGVjdCBIQVZFX09QUk9GSUxFCisJc2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSIGlmIDY0QklUCisJc2VsZWN0IEhBVkVfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSIGlmIDY0QklUCisJc2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1QgaWYgNjRCSVQKIAlzZWxlY3QgUlRDX0NMQVNTCi0Jc2VsZWN0IFJUQ19EUlZfUEFSSVNDCisJc2VsZWN0IFJUQ19EUlZfR0VORVJJQwogCXNlbGVjdCBJTklUX0FMTF9QT1NTSUJMRQorCXNlbGVjdCBCVUcKIAloZWxwCiAJICBUaGUgUEEtUklTQyBtaWNyb3Byb2Nlc3NvciBpcyBkZXNpZ25lZCBieSBIZXdsZXR0LVBhY2thcmQgYW5kIHVzZWQKIAkgIGluIG1hbnkgb2YgdGhlaXIgd29ya3N0YXRpb25zICYgc2VydmVycyAoSFA5MDAwIDcwMCBhbmQgODAwIHNlcmllcywKQEAgLTc1LDYgKzc5LDkgQEAKIGNvbmZpZyBHRU5FUklDX0lSUV9QUk9CRQogCWRlZl9ib29sIHkKIAorY29uZmlnIEhBVkVfTEFURU5DWVRPUF9TVVBQT1JUCisgICAgICAgIGRlZl9ib29sIHkKKwogY29uZmlnIElSUV9QRVJfQ1BVCiAJYm9vbAogCWRlZmF1bHQgeQpAQCAtODMsNiArOTAsOSBAQAogY29uZmlnIFBNCiAJYm9vbAogCitjb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUCisJZGVmX2Jvb2wgeQorCiBjb25maWcgSVNBX0RNQV9BUEkKIAlib29sCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL01ha2VmaWxlIGIvYXJjaC9wYXJpc2MvTWFrZWZpbGUKaW5kZXggMGQ0MjgyNy4uZGE2ZjY2OSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvTWFrZWZpbGUKKysrIGIvYXJjaC9wYXJpc2MvTWFrZWZpbGUKQEAgLTU2LDcgKzU2LDkgQEAKIAogIyBXaXRob3V0IHRoaXMsICJsZCAtciIgcmVzdWx0cyBpbiAudGV4dCBzZWN0aW9ucyB0aGF0IGFyZSB0b28gYmlnCiAjICg+IDB4NDAwMDApIGZvciBicmFuY2hlcyB0byByZWFjaCBzdHVicy4KLWNmbGFncy15CSs9IC1mZnVuY3Rpb24tc2VjdGlvbnMKK2lmbmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCisgIGNmbGFncy15CSs9IC1mZnVuY3Rpb24tc2VjdGlvbnMKK2VuZGlmCiAKICMgc2VsZWN0IHdoaWNoIHByb2Nlc3NvciB0byBvcHRpbWlzZSBmb3IKIGNmbGFncy0kKENPTkZJR19QQTcxMDApCQkrPSAtbWFyY2g9MS4xIC1tc2NoZWR1bGU9NzEwMApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vYXRvbWljLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hdG9taWMuaAppbmRleCBlZGJmZTI1Li5hZGEzZTUzIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9hdG9taWMuaApAQCAtMjUsNyArMjUsNyBAQAogICogU2luY2UgImEiIGlzIHVzdWFsbHkgYW4gYWRkcmVzcywgdXNlIG9uZSBzcGlubG9jayBwZXIgY2FjaGVsaW5lLgogICovCiAjICBkZWZpbmUgQVRPTUlDX0hBU0hfU0laRSA0Ci0jICBkZWZpbmUgQVRPTUlDX0hBU0goYSkgKCYoX19hdG9taWNfaGFzaFsgKCgodW5zaWduZWQgbG9uZykgYSkvTDFfQ0FDSEVfQllURVMpICYgKEFUT01JQ19IQVNIX1NJWkUtMSkgXSkpCisjICBkZWZpbmUgQVRPTUlDX0hBU0goYSkgKCYoX19hdG9taWNfaGFzaFsgKCgodW5zaWduZWQgbG9uZykgKGEpKS9MMV9DQUNIRV9CWVRFUykgJiAoQVRPTUlDX0hBU0hfU0laRS0xKSBdKSkKIAogZXh0ZXJuIHJhd19zcGlubG9ja190IF9fYXRvbWljX2hhc2hbQVRPTUlDX0hBU0hfU0laRV0gX19sb2NrX2FsaWduZWQ7CiAKQEAgLTIyMiwxMyArMjIyLDEzIEBACiAKICNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCiAKLSNkZWZpbmUgYXRvbWljX2FkZChpLHYpCSgodm9pZCkoX19hdG9taWNfYWRkX3JldHVybiggKChpbnQpaSksKHYpKSkpCi0jZGVmaW5lIGF0b21pY19zdWIoaSx2KQkoKHZvaWQpKF9fYXRvbWljX2FkZF9yZXR1cm4oLSgoaW50KWkpLCh2KSkpKQorI2RlZmluZSBhdG9taWNfYWRkKGksdikJKCh2b2lkKShfX2F0b21pY19hZGRfcmV0dXJuKCAoKGludCkoaSkpLCh2KSkpKQorI2RlZmluZSBhdG9taWNfc3ViKGksdikJKCh2b2lkKShfX2F0b21pY19hZGRfcmV0dXJuKC0oKGludCkoaSkpLCh2KSkpKQogI2RlZmluZSBhdG9taWNfaW5jKHYpCSgodm9pZCkoX19hdG9taWNfYWRkX3JldHVybiggICAxLCh2KSkpKQogI2RlZmluZSBhdG9taWNfZGVjKHYpCSgodm9pZCkoX19hdG9taWNfYWRkX3JldHVybiggIC0xLCh2KSkpKQogCi0jZGVmaW5lIGF0b21pY19hZGRfcmV0dXJuKGksdikJKF9fYXRvbWljX2FkZF9yZXR1cm4oICgoaW50KWkpLCh2KSkpCi0jZGVmaW5lIGF0b21pY19zdWJfcmV0dXJuKGksdikJKF9fYXRvbWljX2FkZF9yZXR1cm4oLSgoaW50KWkpLCh2KSkpCisjZGVmaW5lIGF0b21pY19hZGRfcmV0dXJuKGksdikJKF9fYXRvbWljX2FkZF9yZXR1cm4oICgoaW50KShpKSksKHYpKSkKKyNkZWZpbmUgYXRvbWljX3N1Yl9yZXR1cm4oaSx2KQkoX19hdG9taWNfYWRkX3JldHVybigtKChpbnQpKGkpKSwodikpKQogI2RlZmluZSBhdG9taWNfaW5jX3JldHVybih2KQkoX19hdG9taWNfYWRkX3JldHVybiggICAxLCh2KSkpCiAjZGVmaW5lIGF0b21pY19kZWNfcmV0dXJuKHYpCShfX2F0b21pY19hZGRfcmV0dXJuKCAgLTEsKHYpKSkKIApAQCAtMjg5LDEzICsyODksMTMgQEAKIAlyZXR1cm4gdi0+Y291bnRlcjsKIH0KIAotI2RlZmluZSBhdG9taWM2NF9hZGQoaSx2KQkoKHZvaWQpKF9fYXRvbWljNjRfYWRkX3JldHVybiggKChzNjQpaSksKHYpKSkpCi0jZGVmaW5lIGF0b21pYzY0X3N1YihpLHYpCSgodm9pZCkoX19hdG9taWM2NF9hZGRfcmV0dXJuKC0oKHM2NClpKSwodikpKSkKKyNkZWZpbmUgYXRvbWljNjRfYWRkKGksdikJKCh2b2lkKShfX2F0b21pYzY0X2FkZF9yZXR1cm4oICgoczY0KShpKSksKHYpKSkpCisjZGVmaW5lIGF0b21pYzY0X3N1YihpLHYpCSgodm9pZCkoX19hdG9taWM2NF9hZGRfcmV0dXJuKC0oKHM2NCkoaSkpLCh2KSkpKQogI2RlZmluZSBhdG9taWM2NF9pbmModikJCSgodm9pZCkoX19hdG9taWM2NF9hZGRfcmV0dXJuKCAgIDEsKHYpKSkpCiAjZGVmaW5lIGF0b21pYzY0X2RlYyh2KQkJKCh2b2lkKShfX2F0b21pYzY0X2FkZF9yZXR1cm4oICAtMSwodikpKSkKIAotI2RlZmluZSBhdG9taWM2NF9hZGRfcmV0dXJuKGksdikJKF9fYXRvbWljNjRfYWRkX3JldHVybiggKChzNjQpaSksKHYpKSkKLSNkZWZpbmUgYXRvbWljNjRfc3ViX3JldHVybihpLHYpCShfX2F0b21pYzY0X2FkZF9yZXR1cm4oLSgoczY0KWkpLCh2KSkpCisjZGVmaW5lIGF0b21pYzY0X2FkZF9yZXR1cm4oaSx2KQkoX19hdG9taWM2NF9hZGRfcmV0dXJuKCAoKHM2NCkoaSkpLCh2KSkpCisjZGVmaW5lIGF0b21pYzY0X3N1Yl9yZXR1cm4oaSx2KQkoX19hdG9taWM2NF9hZGRfcmV0dXJuKC0oKHM2NCkoaSkpLCh2KSkpCiAjZGVmaW5lIGF0b21pYzY0X2luY19yZXR1cm4odikJCShfX2F0b21pYzY0X2FkZF9yZXR1cm4oICAgMSwodikpKQogI2RlZmluZSBhdG9taWM2NF9kZWNfcmV0dXJuKHYpCQkoX19hdG9taWM2NF9hZGRfcmV0dXJuKCAgLTEsKHYpKSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IGI3Y2E2ZGMuLjcyNDM5NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTk3LDYgKzk3LDkgQEAKIAogI2lmZGVmIENPTkZJR19QQThYMDAKIC8qIE9ubHkgcGE4ODAwLCBwYTg5MDAgbmVlZHMgdGhpcyAqLworCisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKwogI2RlZmluZSBBUkNIX0hBU19LTUFQCiAKIHZvaWQga3VubWFwX3BhcmlzYyh2b2lkICphZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggN2ZhNjc1Ny4uOWM4MDJlYiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTE2OCw2ICsxNjgsMTYgQEAKIAlfX3U2NAlncDsKIH0gRWxmNjRfRmRlc2M7CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZmRlZiBDT05GSUdfNjRCSVQKKyNkZWZpbmUgRWxmX0ZkZXNjCUVsZjY0X0ZkZXNjCisjZWxzZQorI2RlZmluZSBFbGZfRmRlc2MJRWxmMzJfRmRlc2MKKyNlbmRpZiAvKkNPTkZJR182NEJJVCovCisKKyNlbmRpZiAvKl9fS0VSTkVMX18qLworCiAvKiBMZWdhbCB2YWx1ZXMgZm9yIHBfdHlwZSBmaWVsZCBvZiBFbGYzMl9QaGRyL0VsZjY0X1BoZHIuICAqLwogCiAjZGVmaW5lIFBUX0hQX1RMUwkJKFBUX0xPT1MgKyAweDApCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTA1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIF9BU01fUEFSSVNDX0ZUUkFDRV9ICisjZGVmaW5lIF9BU01fUEFSSVNDX0ZUUkFDRV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBtY291bnQodm9pZCk7CisKKy8qCisgKiBTdGFjayBvZiByZXR1cm4gYWRkcmVzc2VzIGZvciBmdW5jdGlvbnMgb2YgYSB0aHJlYWQuCisgKiBVc2VkIGluIHN0cnVjdCB0aHJlYWRfaW5mbworICovCitzdHJ1Y3QgZnRyYWNlX3JldF9zdGFjayB7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJdW5zaWduZWQgbG9uZyBmdW5jOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxsdGltZTsKK307CisKKy8qCisgKiBQcmltYXJ5IGhhbmRsZXIgb2YgYSBmdW5jdGlvbiByZXR1cm4uCisgKiBJdCByZWxheXMgb24gZnRyYWNlX3JldHVybl90b19oYW5kbGVyLgorICogRGVmaW5lZCBpbiBlbnRyeS5TCisgKi8KK2V4dGVybiB2b2lkIHJldHVybl90b19oYW5kbGVyKHZvaWQpOworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX0FTTV9QQVJJU0NfRlRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCBjMzk0MWYwLi43YmM1MTI1IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0zNiwxNiArMzYsNyBAQAogICovCiAjZGVmaW5lIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCiAjaWZkZWYgU1RSSUNUX01NX1RZUEVDSEVDS1MKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGU7Ci0jaWYgIWRlZmluZWQoQ09ORklHXzY0QklUKQotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZ1dHVyZV9mbGFnczsKLSAvKiBYWFg6IGl0J3MgcG9zc2libGUgdG8gcmVtb3ZlIGZ1dHVyZV9mbGFncyBhbmQgY2hhbmdlIEJJVFNfUEVSX1BURV9FTlRSWQotCSB0byAyLCBidXQgdGhlbiBzdHJhbmdlbHkgdGhlIGlkZW50aWNhbCAzMmJpdCBrZXJuZWwgYm9vdHMgb24gYQotCSBjMzAwMChwYTIwKSwgYnV0IG5vdCBhbnkgbG9uZ2VyIG9uIGEgNzE1KHBhMTEpLgotCSBTdGlsbCBpbnZlc3RpZ2F0aW5nLi4uIEhlbGdlRC4KLSAgKi8KLSNlbmRpZgotfSBwdGVfdDsgLyogZWl0aGVyIDMyIG9yIDY0Yml0ICovCit0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlOyB9IHB0ZV90OyAvKiBlaXRoZXIgMzIgb3IgNjRiaXQgKi8KIAogLyogTk9URTogZXZlbiBvbiA2NCBiaXRzLCB0aGVzZSBlbnRyaWVzIGFyZSBfX3UzMiBiZWNhdXNlIHdlIGFsbG9jYXRlCiAgKiB0aGUgcG1kIGFuZCBwZ2QgaW4gWk9ORV9ETUEgKGkuZS4gdW5kZXIgNEdCKSAqLwpAQCAtMTExLDcgKzEwMiw3IEBACiAjZGVmaW5lIEJJVFNfUEVSX1BNRF9FTlRSWQkyCiAjZGVmaW5lIEJJVFNfUEVSX1BHRF9FTlRSWQkyCiAjZWxzZQotI2RlZmluZSBCSVRTX1BFUl9QVEVfRU5UUlkJMworI2RlZmluZSBCSVRTX1BFUl9QVEVfRU5UUlkJMgogI2RlZmluZSBCSVRTX1BFUl9QTURfRU5UUlkJMgogI2RlZmluZSBCSVRTX1BFUl9QR0RfRU5UUlkJQklUU19QRVJfUE1EX0VOVFJZCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BkYy5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGRjLmgKaW5kZXggNDMwZjFhZS4uNGNhNTEwYiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGRjLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGRjLmgKQEAgLTQ5LDYgKzQ5LDggQEAKICNkZWZpbmUgUERDX01PREVMX0NQVV9JRAk2CS8qIHJldHVybnMgY3B1LWlkIChvbmx5IG5ld2VyIG1hY2hpbmVzISkgKi8KICNkZWZpbmUgUERDX01PREVMX0NBUEFCSUxJVElFUwk3CS8qIHJldHVybnMgT1MzMi9PUzY0LWZsYWdzCSovCiAvKiBWYWx1ZXMgZm9yIFBEQ19NT0RFTF9DQVBBQklMSVRJRVMgbm9uLWVxdWl2YWxlbnQgdmlydHVhbCBhbGlhc2luZyBzdXBwb3J0ICovCisjZGVmaW5lICBQRENfTU9ERUxfT1M2NAkJCSgxIDw8IDApCisjZGVmaW5lICBQRENfTU9ERUxfT1MzMgkJCSgxIDw8IDEpCiAjZGVmaW5lICBQRENfTU9ERUxfSU9QRElSX0ZEQwkJKDEgPDwgMikKICNkZWZpbmUgIFBEQ19NT0RFTF9OVkFfTUFTSwkJKDMgPDwgNCkKICNkZWZpbmUgIFBEQ19NT0RFTF9OVkFfU1VQUE9SVEVECSgwIDw8IDQpCkBAIC0zNDEsNiArMzQzLDggQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2luY2x1ZGUgPGFzbS9wYWdlLmg+IC8qIGZvciBfX1BBR0VfT0ZGU0VUICovCisKIGV4dGVybiBpbnQgcGRjX3R5cGU7CiAKIC8qIFZhbHVlcyBmb3IgcGRjX3R5cGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA0NzBhNGI4Li5hMjdkMmUyIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC01MCwxMSArNTAsNyBAQAogCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1bnNpZ25lZCBsb25nKXBnZF92YWwoZSkpCiAKIC8qIFRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIGluaXRpYWxseSBtYXBwZWQga2VybmVsIG1lbW9yeSAqLwotI2lmZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBLRVJORUxfSU5JVElBTF9PUkRFUgkyNAkvKiAwIHRvIDE8PDI0ID0gMTZNQiAqLwotI2Vsc2UKLSNkZWZpbmUgS0VSTkVMX0lOSVRJQUxfT1JERVIJMjMJLyogMCB0byAxPDwyMyA9IDhNQiAqLwotI2VuZGlmCiAjZGVmaW5lIEtFUk5FTF9JTklUSUFMX1NJWkUJKDEgPDwgS0VSTkVMX0lOSVRJQUxfT1JERVIpCiAKICNpZiBkZWZpbmVkKENPTkZJR182NEJJVCkgJiYgZGVmaW5lZChDT05GSUdfUEFSSVNDX1BBR0VfU0laRV80S0IpCkBAIC05MSwxNiArODcsMjUgQEAKIAogLyogRGVmaW5pdGlvbnMgZm9yIDFzdCBsZXZlbCAqLwogI2RlZmluZSBQR0RJUl9TSElGVAkoUE1EX1NISUZUICsgQklUU19QRVJfUE1EKQorI2lmIChQR0RJUl9TSElGVCArIFBBR0VfU0hJRlQgKyBQR0RfT1JERVIgLSBCSVRTX1BFUl9QR0RfRU5UUlkpID4gQklUU19QRVJfTE9ORworI2RlZmluZSBCSVRTX1BFUl9QR0QJKEJJVFNfUEVSX0xPTkcgLSBQR0RJUl9TSElGVCkKKyNlbHNlCiAjZGVmaW5lIEJJVFNfUEVSX1BHRAkoUEFHRV9TSElGVCArIFBHRF9PUkRFUiAtIEJJVFNfUEVSX1BHRF9FTlRSWSkKKyNlbmRpZgogI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCiAjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKICNkZWZpbmUgUFRSU19QRVJfUEdEICAgICgxVUwgPDwgQklUU19QRVJfUEdEKQogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRCAgICAgICBQVFJTX1BFUl9QR0QKIAorI2lmZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBNQVhfQUREUkJJVFMJKFBHRElSX1NISUZUICsgQklUU19QRVJfUEdEKQogI2RlZmluZSBNQVhfQUREUkVTUwkoMVVMIDw8IE1BWF9BRERSQklUUykKLQogI2RlZmluZSBTUEFDRUlEX1NISUZUCShNQVhfQUREUkJJVFMgLSAzMikKKyNlbHNlCisjZGVmaW5lIE1BWF9BRERSQklUUwkoQklUU19QRVJfTE9ORykKKyNkZWZpbmUgTUFYX0FERFJFU1MJKDFVTCA8PCBNQVhfQUREUkJJVFMpCisjZGVmaW5lIFNQQUNFSURfU0hJRlQJMAorI2VuZGlmCiAKIC8qIFRoaXMgY2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIGluaXRpYWwgcGFnZXMgd2UgbmVlZCBmb3IgdGhlIGluaXRpYWwKICAqIHBhZ2UgdGFibGVzICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NtcC5oCmluZGV4IDZlZjRiNzguLjIxZWI0NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC0yOSw3ICsyOSw4IEBACiBleHRlcm4gdm9pZCBzbXBfc2VuZF9hbGxfbm9wKHZvaWQpOwogCiBleHRlcm4gdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpOwotZXh0ZXJuIHZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKTsKK2V4dGVybiB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKKyNkZWZpbmUgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2sgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2sKIAogI2VuZGlmIC8qICFBU1NFTUJMWSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3BpbmxvY2suaAppbmRleCBmM2QyMDkwLi5mYWUwM2UxIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTE4Nyw2ICsxODcsOSBAQAogCXJldHVybiAhcnctPmNvdW50ZXI7CiB9CiAKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19yZWFkX2xvY2sobG9jaykKKyNkZWZpbmUgX19yYXdfd3JpdGVfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfd3JpdGVfbG9jayhsb2NrKQorCiAjZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKICNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wYXJpc2Mva2VybmVsL01ha2VmaWxlCmluZGV4IDAxNmQzZmMuLjY3ZGIwNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTExLDEwICsxMSwyNSBAQAogCQkgICBwcm9jZXNzLm8gcHJvY2Vzc29yLm8gcGRjX2NvbnMubyBwZGNfY2hhc3Npcy5vIHVud2luZC5vIFwKIAkJICAgdG9wb2xvZ3kubwogCitpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCisjIERvIG5vdCBwcm9maWxlIGRlYnVnIGFuZCBsb3dsZXZlbCB1dGlsaXRpZXMKK0NGTEFHU19SRU1PVkVfZnRyYWNlLm8gPSAtcGcKK0NGTEFHU19SRU1PVkVfY2FjaGUubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV9pcnEubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV9wYWNhY2hlLm8gPSAtcGcKK0NGTEFHU19SRU1PVkVfcGVyZi5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX3RyYXBzLm8gPSAtcGcKK0NGTEFHU19SRU1PVkVfdW5hbGlnbmVkLm8gPSAtcGcKK0NGTEFHU19SRU1PVkVfdW53aW5kLm8gPSAtcGcKK2VuZGlmCisKIG9iai0kKENPTkZJR19TTVApCSs9IHNtcC5vCiBvYmotJChDT05GSUdfUEExMSkJKz0gcGNpLWRtYS5vCiBvYmotJChDT05GSUdfUENJKQkrPSBwY2kubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCSs9IG1vZHVsZS5vCiBvYmotJChDT05GSUdfNjRCSVQpCSs9IGJpbmZtdF9lbGYzMi5vIHN5c19wYXJpc2MzMi5vIHNpZ25hbDMyLm8KK29iai0kKENPTkZJR19TVEFDS1RSQUNFKSs9IHN0YWNrdHJhY2UubwogIyBvbmx5IHN1cHBvcnRlZCBmb3IgUENYLVcvVSBpbiA2NC1iaXQgbW9kZSBhdCB0aGUgbW9tZW50CiBvYmotJChDT05GSUdfNjRCSVQpCSs9IHBlcmYubyBwZXJmX2FzbS5vCitvYmotJChDT05GSUdfRlVOQ1RJT05fVFJBQ0VSKQkJKz0gZnRyYWNlLm8KK29iai0kKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpCSs9IGZ0cmFjZS5vCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDBkYjlmZGMuLmFlM2U3MGNkIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZW50cnkuUwpAQCAtNTA1LDYgKzUwNSwxOCBAQAogCVNUUkVHCQlccHRlLDAoXHB0ZXApCiAJLmVuZG0KIAorCS8qIGJpdHNoaWZ0IGRpZmZlcmVuY2UgYmV0d2VlbiBhIFBGTiAoYmFzZWQgb24ga2VybmVsJ3MgUEFHRV9TSVpFKQorCSAqIHRvIGEgQ1BVIFRMQiA0ayBQRk4gKDRrID0+IDEyIGJpdHMgdG8gc2hpZnQpICovCisJI2RlZmluZSBQQUdFX0FERF9TSElGVCAgKFBBR0VfU0hJRlQtMTIpCisKKwkvKiBEcm9wIHByb3QgYml0cyBhbmQgY29udmVydCB0byBwYWdlIGFkZHIgZm9yIGlpdGxidCBhbmQgaWR0bGJ0ICovCisJLm1hY3JvCQljb252ZXJ0X2Zvcl90bGJfaW5zZXJ0MjAgcHRlCisJZXh0cmQsdQkJXHB0ZSwoNjMtQVNNX1BGTl9QVEVfU0hJRlQpKyg2My01OCkrUEFHRV9BRERfU0hJRlQsXAorCQkJCTY0LVBBR0VfU0hJRlQtUEFHRV9BRERfU0hJRlQsXHB0ZQorCWRlcGRpCQlfUEFHRV9TSVpFX0VOQ09ESU5HX0RFRkFVTFQsNjMsXAorCQkJCSg2My01OCkrUEFHRV9BRERfU0hJRlQsXHB0ZQorCS5lbmRtCisKIAkvKiBDb252ZXJ0IHRoZSBwdGUgYW5kIHByb3QgdG8gdGxiIGluc2VydGlvbiB2YWx1ZXMuICBIb3cKIAkgKiB0aGlzIGhhcHBlbnMgaXMgcXVpdGUgc3VidGxlLCByZWFkIGJlbG93ICovCiAJLm1hY3JvCQltYWtlX2luc2VydF90bGIJc3BjLHB0ZSxwcm90CkBAIC01NDQsOCArNTU2LDcgQEAKIAlkZXBpCQkxLDEyLDEsXHByb3QKIAogCS8qIERyb3AgcHJvdCBiaXRzIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWl0bGJ0IGFuZCBpZHRsYnQgKi8KLQlleHRyZCx1CQlccHRlLCg2My1BU01fUEZOX1BURV9TSElGVCkrKDYzLTU4KSw2NC1QQUdFX1NISUZULFxwdGUKLQlkZXBkaQkJX1BBR0VfU0laRV9FTkNPRElOR19ERUZBVUxULDYzLDYzLTU4LFxwdGUKKwljb252ZXJ0X2Zvcl90bGJfaW5zZXJ0MjAgXHB0ZQogCS5lbmRtCiAKIAkvKiBJZGVudGljYWwgbWFjcm8gdG8gbWFrZV9pbnNlcnRfdGxiIGFib3ZlLCBleGNlcHQgaXQKQEAgLTU2Myw4ICs1NzQsOCBAQAogCiAJLyogR2V0IHJpZCBvZiBwcm90IGJpdHMgYW5kIGNvbnZlcnQgdG8gcGFnZSBhZGRyIGZvciBpaXRsYmEgKi8KIAotCWRlcGkJCV9QQUdFX1NJWkVfRU5DT0RJTkdfREVGQVVMVCwzMSxBU01fUEZOX1BURV9TSElGVCxccHRlCi0JZXh0cnUJCVxwdGUsMjQsMjUsXHB0ZQorCWRlcGkJCTAsMzEsQVNNX1BGTl9QVEVfU0hJRlQsXHB0ZQorCVNIUlJFRwkJXHB0ZSwoQVNNX1BGTl9QVEVfU0hJRlQtKDMxLTI2KSksXHB0ZQogCS5lbmRtCiAKIAkvKiBUaGlzIGlzIGZvciBJTFAzMiBQQTIuMCBvbmx5LiAgVGhlIFRMQiBpbnNlcnRpb24gbmVlZHMKQEAgLTEyNDQsMTAgKzEyNTUsOSBAQAogCWRlcGRpLHogICAgICAgICA3LDcsMyxwcm90CiAJZGVwZGkgICAgICAgICAgIDEsMTAsMSxwcm90CiAKLQkvKiBHZXQgcmlkIG9mIHByb3QgYml0cyBhbmQgY29udmVydCB0byBwYWdlIGFkZHIgZm9yIGlkdGxidCAqLworCS8qIERyb3AgcHJvdCBiaXRzIGZyb20gcHRlIGFuZCBjb252ZXJ0IHRvIHBhZ2UgYWRkciBmb3IgaWR0bGJ0ICovCisJY29udmVydF9mb3JfdGxiX2luc2VydDIwIHB0ZQogCi0JZGVwZGkJCTAsNjMsMTIscHRlCi0JZXh0cmQsdSAgICAgICAgIHB0ZSw1Niw1MixwdGUKIAlpZHRsYnQgICAgICAgICAgcHRlLHByb3QKIAogCXJmaXIKQEAgLTEzMzcsOCArMTM0Nyw4IEBACiAKIAkvKiBHZXQgcmlkIG9mIHByb3QgYml0cyBhbmQgY29udmVydCB0byBwYWdlIGFkZHIgZm9yIGlkdGxiYSAqLwogCi0JZGVwaQkJMCwzMSwxMixwdGUKLQlleHRydQkJcHRlLDI0LDI1LHB0ZQorCWRlcGkJCTAsMzEsQVNNX1BGTl9QVEVfU0hJRlQscHRlCisJU0hSUkVHCQlwdGUsKEFTTV9QRk5fUFRFX1NISUZULSgzMS0yNikpLHB0ZQogCiAJbWZzcAkJJXNyMSx0MCAgLyogU2F2ZSBzcjEgc28gd2UgY2FuIHVzZSBpdCBpbiB0bGIgaW5zZXJ0cyAqLwogCW10c3AJCXNwYywlc3IxCkBAIC0xNDAzLDEwICsxNDEzLDkgQEAKIAlkZXBkaSx6ICAgICAgICAgNyw3LDMscHJvdAogCWRlcGRpICAgICAgICAgICAxLDEwLDEscHJvdAogCi0JLyogR2V0IHJpZCBvZiBwcm90IGJpdHMgYW5kIGNvbnZlcnQgdG8gcGFnZSBhZGRyIGZvciBpZHRsYnQgKi8KKwkvKiBEcm9wIHByb3QgYml0cyBmcm9tIHB0ZSBhbmQgY29udmVydCB0byBwYWdlIGFkZHIgZm9yIGlkdGxidCAqLworCWNvbnZlcnRfZm9yX3RsYl9pbnNlcnQyMCBwdGUKIAotCWRlcGRpCQkwLDYzLDEyLHB0ZQotCWV4dHJkLHUgICAgICAgICBwdGUsNTYsMzIscHRlCiAJaWR0bGJ0ICAgICAgICAgIHB0ZSxwcm90CiAKIAlyZmlyCkBAIC0yMTc2LDYgKzIxODUsMzMgQEAKIEVORFBST0Moc3lzY2FsbF9leGl0KQogCiAKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCisJLmltcG9ydCBmdHJhY2VfZnVuY3Rpb25fdHJhbXBvbGluZSxjb2RlCitFTlRSWShfbWNvdW50KQorCWNvcHkJJXIzLCAlYXJnMgorCWIJZnRyYWNlX2Z1bmN0aW9uX3RyYW1wb2xpbmUKKwlub3AKK0VORFBST0MoX21jb3VudCkKKworRU5UUlkocmV0dXJuX3RvX2hhbmRsZXIpCisJbG9hZDMyCXJldHVybl90cmFtcG9saW5lLCAlcnAKKwljb3B5CSVyZXQwLCAlYXJnMAorCWNvcHkJJXJldDEsICVhcmcxCisJYglmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIKKwlub3AKK3JldHVybl90cmFtcG9saW5lOgorCWNvcHkJJXJldDAsICVycAorCWNvcHkJJXIyMywgJXJldDAKKwljb3B5CSVyMjQsICVyZXQxCisKKy5nbG9ibCBmdHJhY2Vfc3R1YgorZnRyYWNlX3N0dWI6CisJYnYJJXIwKCVycCkKKwlub3AKK0VORFBST0MocmV0dXJuX3RvX2hhbmRsZXIpCisjZW5kaWYJLyogQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiAqLworCisKIGdldF9yZWdpc3RlcjoKIAkvKgogCSAqIGdldF9yZWdpc3RlciBpcyB1c2VkIGJ5IHRoZSBub24gYWNjZXNzIHRsYiBtaXNzIGhhbmRsZXJzIHRvCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jCmluZGV4IGY2ZDI0MTIuLjRjMjQ3ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9maXJtd2FyZS5jCkBAIC01MjcsNyArNTI3LDExIEBACiAgICAgICAgIHBkY19yZXN1bHRbMF0gPSAwOyAvKiBwcmVzZXQgemVybyAoY2FsbCBtYXkgbm90IGJlIGltcGxlbWVudGVkISkgKi8KICAgICAgICAgcmV0dmFsID0gbWVtX3BkY19jYWxsKFBEQ19NT0RFTCwgUERDX01PREVMX0NBUEFCSUxJVElFUywgX19wYShwZGNfcmVzdWx0KSwgMCk7CiAgICAgICAgIGNvbnZlcnRfdG9fd2lkZShwZGNfcmVzdWx0KTsKLSAgICAgICAgKmNhcGFiaWxpdGllcyA9IHBkY19yZXN1bHRbMF07CisgICAgICAgIGlmIChyZXR2YWwgPT0gUERDX09LKSB7CisgICAgICAgICAgICAgICAgKmNhcGFiaWxpdGllcyA9IHBkY19yZXN1bHRbMF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKmNhcGFiaWxpdGllcyA9IFBEQ19NT0RFTF9PUzMyOworICAgICAgICB9CiAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkY19sb2NrLCBmbGFncyk7CiAKICAgICAgICAgcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9mdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODc3MzcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29kZSBmb3IgdHJhY2luZyBjYWxscyBpbiBMaW51eCBrZXJuZWwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSGVsZ2UgRGVsbGVyIDxkZWxsZXJAZ214LmRlPgorICoKKyAqIGJhc2VkIG9uIGNvZGUgZm9yIHg4NiB3aGljaCBpczoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgorICoKKyAqIGZ1dHVyZSBwb3NzaWJsZSBlbmhhbmNlbWVudHM6CisgKiAJLSBhZGQgQ09ORklHX0RZTkFNSUNfRlRSQUNFCisgKgktIGFkZCBDT05GSUdfU1RBQ0tfVFJBQ0VSCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKworI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KKworCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisKKy8qIEFkZCBhIGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHRvIHRoZSB0cmFjZSBzdGFjayBvbiB0aHJlYWQgaW5mby4qLworc3RhdGljIGludCBwdXNoX3JldHVybl90cmFjZSh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBsb25nIHRpbWUsCisJCQkJdW5zaWduZWQgbG9uZyBmdW5jLCBpbnQgKmRlcHRoKQoreworCWludCBpbmRleDsKKworCWlmICghY3VycmVudC0+cmV0X3N0YWNrKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogVGhlIHJldHVybiB0cmFjZSBzdGFjayBpcyBmdWxsICovCisJaWYgKGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrID09IEZUUkFDRV9SRVRGVU5DX0RFUFRIIC0gMSkgeworCQlhdG9taWNfaW5jKCZjdXJyZW50LT50cmFjZV9vdmVycnVuKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpbmRleCA9ICsrY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7CisJYmFycmllcigpOworCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0ID0gcmV0OworCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uZnVuYyA9IGZ1bmM7CisJY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5jYWxsdGltZSA9IHRpbWU7CisJKmRlcHRoID0gaW5kZXg7CisKKwlyZXR1cm4gMDsKK30KKworLyogUmV0cmlldmUgYSBmdW5jdGlvbiByZXR1cm4gYWRkcmVzcyB0byB0aGUgdHJhY2Ugc3RhY2sgb24gdGhyZWFkIGluZm8uKi8KK3N0YXRpYyB2b2lkIHBvcF9yZXR1cm5fdHJhY2Uoc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLCB1bnNpZ25lZCBsb25nICpyZXQpCit7CisJaW50IGluZGV4OworCisJaW5kZXggPSBjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKKworCWlmICh1bmxpa2VseShpbmRleCA8IDApKSB7CisJCWZ0cmFjZV9ncmFwaF9zdG9wKCk7CisJCVdBUk5fT04oMSk7CisJCS8qIE1pZ2h0IGFzIHdlbGwgcGFuaWMsIG90aGVyd2lzZSB3ZSBoYXZlIG5vIHdoZXJlIHRvIGdvICovCisJCSpyZXQgPSAodW5zaWduZWQgbG9uZykKKwkJCWRlcmVmZXJlbmNlX2Z1bmN0aW9uX2Rlc2NyaXB0b3IoJnBhbmljKTsKKwkJcmV0dXJuOworCX0KKworCSpyZXQgPSBjdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldDsKKwl0cmFjZS0+ZnVuYyA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uZnVuYzsKKwl0cmFjZS0+Y2FsbHRpbWUgPSBjdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmNhbGx0aW1lOworCXRyYWNlLT5vdmVycnVuID0gYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNlX292ZXJydW4pOworCXRyYWNlLT5kZXB0aCA9IGluZGV4OworCWJhcnJpZXIoKTsKKwljdXJyZW50LT5jdXJyX3JldF9zdGFjay0tOworCit9CisKKy8qCisgKiBTZW5kIHRoZSB0cmFjZSB0byB0aGUgcmluZy1idWZmZXIuCisgKiBAcmV0dXJuIHRoZSBvcmlnaW5hbCByZXR1cm4gYWRkcmVzcy4KKyAqLwordW5zaWduZWQgbG9uZyBmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIodW5zaWduZWQgbG9uZyByZXR2YWwwLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHJldHZhbDEpCit7CisJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgdHJhY2U7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlwb3BfcmV0dXJuX3RyYWNlKCZ0cmFjZSwgJnJldCk7CisJdHJhY2UucmV0dGltZSA9IGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlmdHJhY2VfZ3JhcGhfcmV0dXJuKCZ0cmFjZSk7CisKKwlpZiAodW5saWtlbHkoIXJldCkpIHsKKwkJZnRyYWNlX2dyYXBoX3N0b3AoKTsKKwkJV0FSTl9PTigxKTsKKwkJLyogTWlnaHQgYXMgd2VsbCBwYW5pYy4gV2hhdCBlbHNlIHRvIGRvPyAqLworCQlyZXQgPSAodW5zaWduZWQgbG9uZykKKwkJCWRlcmVmZXJlbmNlX2Z1bmN0aW9uX2Rlc2NyaXB0b3IoJnBhbmljKTsKKwl9CisKKwkvKiBIQUNLOiB3ZSBoYW5kIG92ZXIgdGhlIG9sZCBmdW5jdGlvbnMnIHJldHVybiB2YWx1ZXMKKwkgICBpbiAlcjIzIGFuZCAlcjI0LiBBc3NlbWJseSBpbiBlbnRyeS5TIHdpbGwgdGFrZSBjYXJlCisJICAgYW5kIG1vdmUgdGhvc2UgdG8gdGhlaXIgZmluYWwgcmVnaXN0ZXJzICVyZXQwIGFuZCAlcmV0MSAqLworCWFzbSggImNvcHkgJTAsICUlcjIzIFxuXHQiCisJICAgICAiY29weSAlMSwgJSVyMjQgXG4iIDogOiAiciIgKHJldHZhbDApLCAiciIgKHJldHZhbDEpICk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSG9vayB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIHB1c2ggaXQgaW4gdGhlIHN0YWNrIG9mIHJldHVybiBhZGRycworICogaW4gY3VycmVudCB0aHJlYWQgaW5mby4KKyAqLwordm9pZCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4odW5zaWduZWQgbG9uZyAqcGFyZW50LCB1bnNpZ25lZCBsb25nIHNlbGZfYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIG9sZDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2FsbHRpbWU7CisJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgdHJhY2U7CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNpbmdfZ3JhcGhfcGF1c2UpKSkKKwkJcmV0dXJuOworCisJb2xkID0gKnBhcmVudDsKKwkqcGFyZW50ID0gKHVuc2lnbmVkIGxvbmcpCisJCSAgZGVyZWZlcmVuY2VfZnVuY3Rpb25fZGVzY3JpcHRvcigmcmV0dXJuX3RvX2hhbmRsZXIpOworCisJaWYgKHVubGlrZWx5KCFfX2tlcm5lbF90ZXh0X2FkZHJlc3Mob2xkKSkpIHsKKwkJZnRyYWNlX2dyYXBoX3N0b3AoKTsKKwkJKnBhcmVudCA9IG9sZDsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuOworCX0KKworCWNhbGx0aW1lID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCisJaWYgKHB1c2hfcmV0dXJuX3RyYWNlKG9sZCwgY2FsbHRpbWUsCisJCQkJc2VsZl9hZGRyLCAmdHJhY2UuZGVwdGgpID09IC1FQlVTWSkgeworCQkqcGFyZW50ID0gb2xkOworCQlyZXR1cm47CisJfQorCisJdHJhY2UuZnVuYyA9IHNlbGZfYWRkcjsKKworCS8qIE9ubHkgdHJhY2UgaWYgdGhlIGNhbGxpbmcgZnVuY3Rpb24gZXhwZWN0cyB0byAqLworCWlmICghZnRyYWNlX2dyYXBoX2VudHJ5KCZ0cmFjZSkpIHsKKwkJY3VycmVudC0+Y3Vycl9yZXRfc3RhY2stLTsKKwkJKnBhcmVudCA9IG9sZDsKKwl9Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCisKKwordm9pZCBmdHJhY2VfZnVuY3Rpb25fdHJhbXBvbGluZSh1bnNpZ25lZCBsb25nIHBhcmVudCwKKwkJCQl1bnNpZ25lZCBsb25nIHNlbGZfYWRkciwKKwkJCQl1bnNpZ25lZCBsb25nIG9yZ19zcF9ncjMpCit7CisJZXh0ZXJuIGZ0cmFjZV9mdW5jX3QgZnRyYWNlX3RyYWNlX2Z1bmN0aW9uOworCisJaWYgKGZ1bmN0aW9uX3RyYWNlX3N0b3ApCisJCXJldHVybjsKKworCWlmIChmdHJhY2VfdHJhY2VfZnVuY3Rpb24gIT0gZnRyYWNlX3N0dWIpIHsKKwkJZnRyYWNlX3RyYWNlX2Z1bmN0aW9uKHBhcmVudCwgc2VsZl9hZGRyKTsKKwkJcmV0dXJuOworCX0KKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJaWYgKGZ0cmFjZV9ncmFwaF9lbnRyeSAmJiBmdHJhY2VfZ3JhcGhfcmV0dXJuKSB7CisJCXVuc2lnbmVkIGxvbmcgc3A7CisJCXVuc2lnbmVkIGxvbmcgKnBhcmVudF9ycDsKKworICAgICAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNvcHkgJSVyMzAsICUwIiA6ICI9ciIoc3ApKTsKKwkJLyogc2FuaXR5IGNoZWNrOiBpcyBzdGFjayBwb2ludGVyIHdoaWNoIHdlIGdvdCBmcm9tCisJCSAgIGFzc2VtYmxlciBmdW5jdGlvbiBpbiBlbnRyeS5TIGluIGEgcmVhc29uYWJsZQorCQkgICByYW5nZSBjb21wYXJlZCB0byBjdXJyZW50IHN0YWNrIHBvaW50ZXI/ICovCisJCWlmICgoc3AgLSBvcmdfc3BfZ3IzKSA+IDB4NDAwKQorCQkJcmV0dXJuOworCisJCS8qIGNhbGN1bGF0ZSBwb2ludGVyIHRvICVycCBpbiBzdGFjayAqLworCQlwYXJlbnRfcnAgPSAodW5zaWduZWQgbG9uZyAqKSBvcmdfc3BfZ3IzIC0gMHgxMDsKKwkJLyogc2FuaXR5IGNoZWNrOiBwYXJlbnRfcnAgc2hvdWxkIGhvbGQgcGFyZW50ICovCisJCWlmICgqcGFyZW50X3JwICE9IHBhcmVudCkKKwkJCXJldHVybjsKKwkJCisJCXByZXBhcmVfZnRyYWNlX3JldHVybihwYXJlbnRfcnAsIHNlbGZfYWRkcik7CisJCXJldHVybjsKKwl9CisjZW5kaWYKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCmluZGV4IDFjNzQwZjUuLjRlYTQyMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKQEAgLTMxMSwxMiArMzExLDEyIEBACiAJbmV4dF9jcHUrKzsgLyogYXNzaWduIHRvICJuZXh0IiBDUFUgd2Ugd2FudCB0aGlzIGJ1Z2dlciBvbiAqLwogCiAJLyogdmFsaWRhdGUgZW50cnkgKi8KLQl3aGlsZSAoKG5leHRfY3B1IDwgTlJfQ1BVUykgJiYKKwl3aGlsZSAoKG5leHRfY3B1IDwgbnJfY3B1X2lkcykgJiYKIAkJKCFwZXJfY3B1KGNwdV9kYXRhLCBuZXh0X2NwdSkudHhuX2FkZHIgfHwKIAkJICFjcHVfb25saW5lKG5leHRfY3B1KSkpCiAJCW5leHRfY3B1Kys7CiAKLQlpZiAobmV4dF9jcHUgPj0gTlJfQ1BVUykgCisJaWYgKG5leHRfY3B1ID49IG5yX2NwdV9pZHMpIAogCQluZXh0X2NwdSA9IDA7CS8qIG5vdGhpbmcgZWxzZSwgYXNzaWduIG1vbmFyY2ggKi8KIAogCXJldHVybiB0eG5fYWZmaW5pdHlfYWRkcih2aXJ0X2lycSwgbmV4dF9jcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCmluZGV4IDkwMTMyNDMuLmVjZDFjNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKQEAgLTYxLDkgKzYxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKLSNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAKICNpZiAwCkBAIC0xMTUsOCArMTEzLDYgQEAKIAlFbGYzMl9BZGRyIGFkZHI7CiB9OwogCi0jZGVmaW5lIEVsZl9GZGVzYwlFbGYzMl9GZGVzYwotCiBzdHJ1Y3Qgc3R1Yl9lbnRyeSB7CiAJRWxmMzJfV29yZCBpbnNuc1syXTsgLyogZWFjaCBzdHViIGVudHJ5IGhhcyB0d28gaW5zbnMgKi8KIH07CkBAIC0xMjUsOCArMTIxLDYgQEAKIAlFbGY2NF9BZGRyIGFkZHI7CiB9OwogCi0jZGVmaW5lIEVsZl9GZGVzYwlFbGY2NF9GZGVzYwotCiBzdHJ1Y3Qgc3R1Yl9lbnRyeSB7CiAJRWxmNjRfV29yZCBpbnNuc1s0XTsgLyogZWFjaCBzdHViIGVudHJ5IGhhcyBmb3VyIGluc25zICovCiB9OwpAQCAtOTE2LDE1ICs5MTAsMyBAQAogCWRlcmVnaXN0ZXJfdW53aW5kX3RhYmxlKG1vZCk7CiAJbW9kdWxlX2J1Z19jbGVhbnVwKG1vZCk7CiB9Ci0KLSNpZmRlZiBDT05GSUdfNjRCSVQKLXZvaWQgKmRlcmVmZXJlbmNlX2Z1bmN0aW9uX2Rlc2NyaXB0b3Iodm9pZCAqcHRyKQotewotCUVsZjY0X0ZkZXNjICpkZXNjID0gcHRyOwotCXZvaWQgKnA7Ci0KLQlpZiAoIXByb2JlX2tlcm5lbF9hZGRyZXNzKCZkZXNjLT5hZGRyLCBwKSkKLQkJcHRyID0gcDsKLQlyZXR1cm4gcHRyOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGFyaXNjX2tzeW1zLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGFyaXNjX2tzeW1zLmMKaW5kZXggMGVlY2ZiYmMuLmRmNjUzNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wYXJpc2Nfa3N5bXMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGFyaXNjX2tzeW1zLmMKQEAgLTE1Myw1ICsxNTMsMTAgQEAKIEVYUE9SVF9TWU1CT0wocGZubmlkX21hcCk7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKK2V4dGVybiB2b2lkIF9tY291bnQodm9pZCk7CitFWFBPUlRfU1lNQk9MKF9tY291bnQpOworI2VuZGlmCisKIC8qIGZyb20gcGFjYWNoZS5TIC0tIG5lZWRlZCBmb3IgY29weV9wYWdlICovCiBFWFBPUlRfU1lNQk9MKGNvcHlfdXNlcl9wYWdlX2FzbSk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3MuYwppbmRleCBiODBlMDJhLi42ZjY5MTAxIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTQ2LDE0ICs0NiwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL3BkYy5oPgogI2luY2x1ZGUgPGFzbS9wZGNfY2hhc3Npcy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW53aW5kLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKIC8qCiAgKiBUaGUgaWRsZSB0aHJlYWQuIFRoZXJlJ3Mgbm8gdXNlZnVsIHdvcmsgdG8gYmUKQEAgLTIzMSw4ICsyMzIsOCBAQAogCSAgIAogCSAgIEhvd2V2ZXIsIHRoZXNlIGxhc3QgMyBhcmdzIGFyZSBvbmx5IGV4YW1pbmVkCiAJICAgaWYgdGhlIHByb3BlciBmbGFncyBhcmUgc2V0LiAqLwotCWludCBfX3VzZXIgKmNoaWxkX3RpZHB0cjsKLQlpbnQgX191c2VyICpwYXJlbnRfdGlkcHRyOworCWludCBfX3VzZXIgKnBhcmVudF90aWRwdHIgPSAoaW50IF9fdXNlciAqKXJlZ3MtPmdyWzI0XTsKKwlpbnQgX191c2VyICpjaGlsZF90aWRwdHIgID0gKGludCBfX3VzZXIgKilyZWdzLT5nclsyMl07CiAKIAkvKiB1c3AgbXVzdCBiZSB3b3JkIGFsaWduZWQuICBUaGlzIGFsc28gcHJldmVudHMgdXNlcnMgZnJvbQogCSAqIHBhc3NpbmcgaW4gdGhlIHZhbHVlIDEgKHdoaWNoIGlzIHRoZSBzaWduYWwgZm9yIGEgc3BlY2lhbApAQCAtMjQzLDE2ICsyNDQsNiBAQAogCWlmICh1c3AgPT0gMCkKIAkgIHVzcCA9IHJlZ3MtPmdyWzMwXTsKIAotCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1BBUkVOVF9TRVRUSUQpCi0JICBwYXJlbnRfdGlkcHRyID0gKGludCBfX3VzZXIgKilyZWdzLT5nclsyNF07Ci0JZWxzZQotCSAgcGFyZW50X3RpZHB0ciA9IE5VTEw7Ci0JCi0JaWYgKGNsb25lX2ZsYWdzICYgKENMT05FX0NISUxEX1NFVFRJRCB8IENMT05FX0NISUxEX0NMRUFSVElEKSkKLQkgIGNoaWxkX3RpZHB0ciA9IChpbnQgX191c2VyICopcmVncy0+Z3JbMjJdOwotCWVsc2UKLQkgIGNoaWxkX3RpZHB0ciA9IE5VTEw7Ci0KIAlyZXR1cm4gZG9fZm9yayhjbG9uZV9mbGFncywgdXNwLCByZWdzLCAwLCBwYXJlbnRfdGlkcHRyLCBjaGlsZF90aWRwdHIpOwogfQogCkBAIC0yNjMsNyArMjU0LDcgQEAKIH0KIAogaW50Ci1jb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAorY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJICAgIHVuc2lnbmVkIGxvbmcgdW51c2VkLAkvKiBpbiBpYTY0IHRoaXMgaXMgInVzZXJfc3RhY2tfc2l6ZSIgKi8KIAkgICAgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgc3RydWN0IHB0X3JlZ3MgKiBwcmVncykKIHsKQEAgLTQwMCwzICszOTEsMTUgQEAKIAl9IHdoaWxlIChjb3VudCsrIDwgMTYpOwogCXJldHVybiAwOwogfQorCisjaWZkZWYgQ09ORklHXzY0QklUCit2b2lkICpkZXJlZmVyZW5jZV9mdW5jdGlvbl9kZXNjcmlwdG9yKHZvaWQgKnB0cikKK3sKKwlFbGY2NF9GZGVzYyAqZGVzYyA9IHB0cjsKKwl2b2lkICpwOworCisJaWYgKCFwcm9iZV9rZXJuZWxfYWRkcmVzcygmZGVzYy0+YWRkciwgcCkpCisJCXB0ciA9IHA7CisJcmV0dXJuIHB0cjsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jCmluZGV4IGVjYjYwOTMuLmUwOWQwZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMKQEAgLTEwMCw4ICsxMDAsOCBAQAogCXN0cnVjdCBjcHVpbmZvX3BhcmlzYyAqcDsKIAogI2lmZGVmIENPTkZJR19TTVAKLQlpZiAobnVtX29ubGluZV9jcHVzKCkgPj0gTlJfQ1BVUykgewotCQlwcmludGsoS0VSTl9JTkZPICJudW1fb25saW5lX2NwdXMoKSA+PSBOUl9DUFVTXG4iKTsKKwlpZiAobnVtX29ubGluZV9jcHVzKCkgPj0gbnJfY3B1X2lkcykgeworCQlwcmludGsoS0VSTl9JTkZPICJudW1fb25saW5lX2NwdXMoKSA+PSBucl9jcHVfaWRzXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogI2Vsc2UKQEAgLTIxNCw3ICsyMTQsNyBAQAogCSAqLwogI2lmZGVmIENPTkZJR19TTVAKIAlpZiAoY3B1aWQpIHsKLQkJY3B1X3NldChjcHVpZCwgY3B1X3ByZXNlbnRfbWFwKTsKKwkJc2V0X2NwdV9wcmVzZW50KGNwdWlkLCB0cnVlKTsKIAkJY3B1X3VwKGNwdWlkKTsKIAl9CiAjZW5kaWYKQEAgLTM2NCw2ICszNjQsMTMgQEAKIAkJCQkgYm9vdF9jcHVfZGF0YS5jcHVfaHogLyAxMDAwMDAwLAogCQkJCSBib290X2NwdV9kYXRhLmNwdV9oeiAlIDEwMDAwMDAgICk7CiAKKwkJc2VxX3ByaW50ZihtLCAiY2FwYWJpbGl0aWVzXHQ6Iik7CisJCWlmIChib290X2NwdV9kYXRhLnBkYy5jYXBhYmlsaXRpZXMgJiBQRENfTU9ERUxfT1MzMikKKwkJCXNlcV9wcmludGYobSwgIiBvczMyIik7CisJCWlmIChib290X2NwdV9kYXRhLnBkYy5jYXBhYmlsaXRpZXMgJiBQRENfTU9ERUxfT1M2NCkKKwkJCXNlcV9wcmludGYobSwgIiBvczY0Iik7CisJCXNlcV9wcmludGYobSwgIlxuIik7CisKIAkJc2VxX3ByaW50ZihtLCAibW9kZWxcdFx0OiAlc1xuIgogCQkJCSJtb2RlbCBuYW1lXHQ6ICVzXG4iLAogCQkJCSBib290X2NwdV9kYXRhLnBkYy5zeXNfbW9kZWxfbmFtZSwKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYwppbmRleCA5OTk1ZDdlLi4xZmQwZjBjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NtcC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC0xMTMsMTQgKzExNCwxNCBAQAogewogCS8qIFJFVklTSVQgOiByZWRpcmVjdCBJL08gSW50ZXJydXB0cyB0byBhbm90aGVyIENQVT8gKi8KIAkvKiBSRVZJU0lUIDogZG9lcyBQTSAqa25vdyogdGhpcyBDUFUgaXNuJ3QgYXZhaWxhYmxlPyAqLwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKKwlzZXRfY3B1X29ubGluZShzbXBfcHJvY2Vzc29yX2lkKCksIGZhbHNlKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWZvciAoOzspCiAJCTsKIH0KIAogCi1pcnFyZXR1cm5fdAoraXJxcmV0dXJuX3QgX19pcnFfZW50cnkKIGlwaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKSAKIHsKIAlpbnQgdGhpc19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0yMTQsMTEgKzIxNSwxMSBAQAogfQogCiBzdGF0aWMgdm9pZAotc2VuZF9JUElfbWFzayhjcHVtYXNrX3QgbWFzaywgZW51bSBpcGlfbWVzc2FnZV90eXBlIG9wKQorc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgZW51bSBpcGlfbWVzc2FnZV90eXBlIG9wKQogewogCWludCBjcHU7CiAKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIG1hc2spCisJZm9yX2VhY2hfY3B1KGNwdSwgbWFzaykKIAkJaXBpX3NlbmQoY3B1LCBvcCk7CiB9CiAKQEAgLTI1Nyw3ICsyNTgsNyBAQAogCXNlbmRfSVBJX2FsbGJ1dHNlbGYoSVBJX05PUCk7CiB9CiAKLXZvaWQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKGNwdW1hc2tfdCBtYXNrKQordm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKIAlzZW5kX0lQSV9tYXNrKG1hc2ssIElQSV9DQUxMX0ZVTkMpOwogfQpAQCAtMjk2LDEzICsyOTcsMTQgQEAKIAltYigpOwogCiAJLyogV2VsbCwgc3VwcG9ydCAyLjQgbGludXggc2NoZW1lIGFzIHdlbGwuICovCi0JaWYgKGNwdV90ZXN0X2FuZF9zZXQoY3B1bnVtLCBjcHVfb25saW5lX21hcCkpCisJaWYgKGNwdV9pc3NldChjcHVudW0sIGNwdV9vbmxpbmVfbWFwKSkKIAl7CiAJCWV4dGVybiB2b2lkIG1hY2hpbmVfaGFsdCh2b2lkKTsgLyogYXJjaC9wYXJpc2MuLi4vcHJvY2Vzcy5jICovCiAKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiQ1BVIyVkIGFscmVhZHkgaW5pdGlhbGl6ZWQhXG4iLCBjcHVudW0pOwogCQltYWNoaW5lX2hhbHQoKTsKIAl9ICAKKwlzZXRfY3B1X29ubGluZShjcHVudW0sIHRydWUpOwogCiAJLyogSW5pdGlhbGlzZSB0aGUgaWRsZSB0YXNrIGZvciB0aGlzIENQVSAqLwogCWF0b21pY19pbmMoJmluaXRfbW0ubW1fY291bnQpOwpAQCAtNDI0LDggKzQyNiw4IEBACiAJLyogU2V0dXAgQlNQIG1hcHBpbmdzICovCiAJcHJpbnRrKEtFUk5fSU5GTyAiU01QOiBib290c3RyYXAgQ1BVIElEIGlzICVkXG4iLCBib290c3RyYXBfcHJvY2Vzc29yKTsKIAotCWNwdV9zZXQoYm9vdHN0cmFwX3Byb2Nlc3NvciwgY3B1X29ubGluZV9tYXApOwotCWNwdV9zZXQoYm9vdHN0cmFwX3Byb2Nlc3NvciwgY3B1X3ByZXNlbnRfbWFwKTsKKwlzZXRfY3B1X29ubGluZShib290c3RyYXBfcHJvY2Vzc29yLCB0cnVlKTsKKwlzZXRfY3B1X3ByZXNlbnQoYm9vdHN0cmFwX3Byb2Nlc3NvciwgdHJ1ZSk7CiB9CiAKIApAQCAtNDM2LDggKzQzOCw3IEBACiAqLwogdm9pZCBfX2luaXQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7Ci0JY3B1c19jbGVhcihjcHVfcHJlc2VudF9tYXApOwotCWNwdV9zZXQoMCwgY3B1X3ByZXNlbnRfbWFwKTsKKwlpbml0X2NwdV9wcmVzZW50KGNwdW1hc2tfb2YoMCkpOwogCiAJcGFyaXNjX21heF9jcHVzID0gbWF4X2NwdXM7CiAJaWYgKCFtYXhfY3B1cykKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3RhY2t0cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTkxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBTdGFjayB0cmFjZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSGVsZ2UgRGVsbGVyIDxkZWxsZXJAZ214LmRlPgorICogIGJhc2VkIG9uIGFyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMgYnkgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CisgKiAgYW5kIHBhcmlzYyB1bndpbmQgZnVuY3Rpb25zIGJ5IFJhbmRvbHBoIENodW5nIDx0YXVzcUBkZWJpYW4ub3JnPgorICoKKyAqICBUT0RPOiBVc2Vyc3BhY2Ugc3RhY2t0cmFjZSAoQ09ORklHX1VTRVJfU1RBQ0tUUkFDRV9TVVBQT1JUKQorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgorCisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgorCitzdGF0aWMgdm9pZCBkdW1wX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKK3sKKwlzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gaW5mbzsKKworCS8qIGluaXRpYWxpemUgdW53aW5kIGluZm8gKi8KKwlpZiAodGFzayA9PSBjdXJyZW50KSB7CisJCXVuc2lnbmVkIGxvbmcgc3A7CisJCXN0cnVjdCBwdF9yZWdzIHI7CitIRVJFOgorCQlhc20gdm9sYXRpbGUgKCJjb3B5ICUlcjMwLCAlMCIgOiAiPXIiKHNwKSk7CisJCW1lbXNldCgmciwgMCwgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSk7CisJCXIuaWFvcVswXSA9ICh1bnNpZ25lZCBsb25nKSYmSEVSRTsKKwkJci5nclsyXSA9ICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKwkJci5nclszMF0gPSBzcDsKKwkJdW53aW5kX2ZyYW1lX2luaXQoJmluZm8sIHRhc2ssICZyKTsKKwl9IGVsc2UgeworCQl1bndpbmRfZnJhbWVfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzaygmaW5mbywgdGFzayk7CisJfQorCisJLyogdW53aW5kIHN0YWNrIGFuZCBzYXZlIGVudHJpZXMgaW4gc3RhY2tfdHJhY2Ugc3RydWN0ICovCisJdHJhY2UtPm5yX2VudHJpZXMgPSAwOworCXdoaWxlICh0cmFjZS0+bnJfZW50cmllcyA8IHRyYWNlLT5tYXhfZW50cmllcykgeworCQlpZiAodW53aW5kX29uY2UoJmluZm8pIDwgMCB8fCBpbmZvLmlwID09IDApCisJCQlicmVhazsKKworCQlpZiAoX19rZXJuZWxfdGV4dF9hZGRyZXNzKGluZm8uaXApKQorCQkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBpbmZvLmlwOworCX0KK30KKworCisvKgorICogU2F2ZSBzdGFjay1iYWNrdHJhY2UgYWRkcmVzc2VzIGludG8gYSBzdGFja190cmFjZSBidWZmZXIuCisgKi8KK3ZvaWQgc2F2ZV9zdGFja190cmFjZShzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlKQoreworCWR1bXBfdHJhY2UoY3VycmVudCwgdHJhY2UpOworCWlmICh0cmFjZS0+bnJfZW50cmllcyA8IHRyYWNlLT5tYXhfZW50cmllcykKKwkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBVTE9OR19NQVg7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYXZlX3N0YWNrX3RyYWNlKTsKKwordm9pZCBzYXZlX3N0YWNrX3RyYWNlX3RzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKK3sKKwlkdW1wX3RyYWNlKHRzaywgdHJhY2UpOworCWlmICh0cmFjZS0+bnJfZW50cmllcyA8IHRyYWNlLT5tYXhfZW50cmllcykKKwkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBVTE9OR19NQVg7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzYXZlX3N0YWNrX3RyYWNlX3Rzayk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUwppbmRleCA2OWI2ZWViLi41OWZjMWE0MyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGwuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbC5TCkBAIC0zNjUsMTcgKzM2NSw1MSBAQAogCiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0JCUxpZ2h0LXdlaWdodC1zeXNjYWxsIGNvZGUKKwkJMzIvNjQtYml0IExpZ2h0LVdlaWdodC1TeXNjYWxsIEFCSQogCi0JCXIyMCAtIGx3cyBudW1iZXIKLQkJcjI2LHIyNSxyMjQscjIzLHIyMiAtIElucHV0IHJlZ2lzdGVycwotCQlyMjggLSBGdW5jdGlvbiByZXR1cm4gcmVnaXN0ZXIKLQkJcjIxIC0gRXJyb3IgY29kZS4KKwkJKiAtIEluZGljYXRlcyBhIGhpbnQgZm9yIHVzZXJzcGFjZSBpbmxpbmUgYXNtCisJCWltcGxlbWVudGF0aW9ucy4KIAotCQlTY3JhY3RoOiBBbnkgb2YgdGhlIGFib3ZlIHRoYXQgYXJlbid0IGJlaW5nCi0JCWN1cnJlbnRseSB1c2VkLCBpbmNsdWRpbmcgcjEuIAorCQlTeXNjYWxsIG51bWJlciAoY2FsbGVyLXNhdmVzKQorCSAgICAgICAgLSAlcjIwCisJICAgICAgICAqIEluIGFzbSBjbG9iYmVyLgogCi0JCVJldHVybiBwb2ludGVyOiByMzEgKE5vdCB1c2FibGUpCisJCUFyZ3VtZW50IHJlZ2lzdGVycyAoY2FsbGVyLXNhdmVzKQorCSAgICAgICAgLSAlcjI2LCAlcjI1LCAlcjI0LCAlcjIzLCAlcjIyCisJICAgICAgICAqIEluIGFzbSBpbnB1dC4KKworCQlSZXR1cm4gcmVnaXN0ZXJzIChjYWxsZXItc2F2ZXMpCisJICAgICAgICAtICVyMjggKHJldHVybiksICVyMjEgKGVycm5vKQorCSAgICAgICAgKiBJbiBhc20gb3V0cHV0LgorCisJCUNhbGxlci1zYXZlcyByZWdpc3RlcnMKKwkgICAgICAgIC0gJXIxLCAlcjI3LCAlcjI5CisJICAgICAgICAtICVyMiAocmV0dXJuIHBvaW50ZXIpCisJICAgICAgICAtICVyMzEgKGJsZSBsaW5rIHJlZ2lzdGVyKQorCSAgICAgICAgKiBJbiBhc20gY2xvYmJlci4KKworCQlDYWxsZWUtc2F2ZXMgcmVnaXN0ZXJzCisJICAgICAgICAtICVyMy0lcjE4CisJICAgICAgICAtICVyMzAgKHN0YWNrIHBvaW50ZXIpCisJICAgICAgICAqIE5vdCBpbiBhc20gY2xvYmJlci4KKworCQlJZiB1c2Vyc3BhY2UgaXMgMzItYml0OgorCQlDYWxsZWUtc2F2ZXMgcmVnaXN0ZXJzCisJICAgICAgICAtICVyMTkgKDMyLWJpdCBQSUMgcmVnaXN0ZXIpCisKKwkJRGlmZmVyZW5jZXMgZnJvbSAzMi1iaXQgY2FsbGluZyBjb252ZW50aW9uOgorCQktIFN5c2NhbGwgbnVtYmVyIGluICVyMjAKKwkJLSBBZGRpdGlvbmFsIGFyZ3VtZW50IHJlZ2lzdGVyICVyMjIgKGFyZzQpCisJCS0gQ2FsbGVlLXNhdmVzICVyMTkuCisKKwkJSWYgdXNlcnNwYWNlIGlzIDY0LWJpdDoKKwkJQ2FsbGVlLXNhdmVzIHJlZ2lzdGVycworCQktICVyMjcgKDY0LWJpdCBQSUMgcmVnaXN0ZXIpCisKKwkJRGlmZmVyZW5jZXMgZnJvbSA2NC1iaXQgY2FsbGluZyBjb252ZW50aW9uOgorCQktIFN5c2NhbGwgbnVtYmVyIGluICVyMjAKKwkJLSBBZGRpdGlvbmFsIGFyZ3VtZW50IHJlZ2lzdGVyICVyMjIgKGFyZzQpCisJCS0gQ2FsbGVlLXNhdmVzICVyMjcuCiAKIAkJRXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgZW50cnkgcGF0aDoKIApAQCAtNDczLDcgKzUwNyw4IEBACiAJYixuCWx3c19jb21wYXJlX2FuZF9zd2FwCiAjZWxzZQogCS8qIElmIHdlIGFyZSBub3QgYSA2NC1iaXQga2VybmVsLCB0aGVuIHdlIGRvbid0Ci0JICogaW1wbGVtZW50IGhhdmluZyA2NC1iaXQgaW5wdXQgcmVnaXN0ZXJzCisJICogaGF2ZSA2NC1iaXQgaW5wdXQgcmVnaXN0ZXJzLCBhbmQgY2FsbGluZworCSAqIHRoZSA2NC1iaXQgTFdTIENBUyByZXR1cm5zIEVOT1NZUy4KIAkgKi8KIAliLG4JbHdzX2V4aXRfbm9zeXMKICNlbmRpZgpAQCAtNjM1LDEyICs2NzAsMTUgQEAKIAkvKgogCQlBbGwgbGlnaHQtd2VpZ2h0LXN5c2NhbGwgYXRvbWljIG9wZXJhdGlvbnMgCiAJCXdpbGwgdXNlIHRoaXMgc2V0IG9mIGxvY2tzIAorCisJCU5PVEU6IFRoZSBsd3NfbG9ja19zdGFydCBzeW1ib2wgbXVzdCBiZQorCQlhdCBsZWFzdCAxNi1ieXRlIGFsaWduZWQgZm9yIHNhZmUgdXNlCisJCXdpdGggbGRjdy4KIAkqLwogCS5zZWN0aW9uIC5kYXRhCiAJLmFsaWduCVBBR0VfU0laRQogRU5UUlkobHdzX2xvY2tfc3RhcnQpCiAJLyogbHdzIGxvY2tzICovCi0JLmFsaWduIDE2CiAJLnJlcHQgMTYKIAkvKiBLZWVwIGxvY2tzIGFsaWduZWQgYXQgMTYtYnl0ZXMgKi8KIAkud29yZCAxCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3RpbWUuYwppbmRleCA5ZDQ2YzQzLi5kNGRkMDU2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC01Myw3ICs1NCw3IEBACiAgKiBoZWxkIG9mZiBmb3IgYW4gYXJiaXRyYXJpbHkgbG9uZyBwZXJpb2Qgb2YgdGltZSBieSBpbnRlcnJ1cHRzIGJlaW5nCiAgKiBkaXNhYmxlZCwgc28gd2UgbWF5IG1pc3Mgb25lIG9yIG1vcmUgdGlja3MuCiAgKi8KLWlycXJldHVybl90IHRpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitpcnFyZXR1cm5fdCBfX2lycV9lbnRyeSB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXVuc2lnbmVkIGxvbmcgbm93OwogCXVuc2lnbmVkIGxvbmcgbmV4dF90aWNrOwpAQCAtMjE2LDE3ICsyMTcsMTQgQEAKIAlwZXJfY3B1KGNwdV9kYXRhLCBjcHUpLml0X3ZhbHVlID0gbmV4dF90aWNrOwogfQogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19wYXJpc2NfZGV2ID0gewotCS5uYW1lID0gInJ0Yy1wYXJpc2MiLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnRjX2dlbmVyaWNfZGV2ID0geworCS5uYW1lID0gInJ0Yy1nZW5lcmljIiwKIAkuaWQgPSAtMSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJ0Y19pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcnRjX3BhcmlzY19kZXYpOwotCWlmIChyZXQgPCAwKQorCWlmIChwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19nZW5lcmljX2RldikgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZWdpc3RlciBydGMgZGV2aWNlLi4uXG4iKTsKIAogCS8qIG5vdCBuZWNlc3NhcmlseSBhbiBlcnJvciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3RyYXBzLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYwppbmRleCBiYTY1OGQyLi5jMzJmNWQ2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYwpAQCAtMjQ3LDYgKzI0Nyw4IEBACiAKIAlvb3BzX2luX3Byb2dyZXNzID0gMTsKIAorCW9vcHNfZW50ZXIoKTsKKwogCS8qIEFtdXNlIHRoZSB1c2VyIGluIGEgU1BBUkMgZmFzaGlvbiAqLwogCWlmIChlcnIpIHByaW50aygKIEtFUk5fQ1JJVCAiICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyBcbiIKQEAgLTI5Myw2ICsyOTUsNyBAQAogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIik7CiAJfQogCisJb29wc19leGl0KCk7CiAJZG9fZXhpdChTSUdTRUdWKTsKIH0KIApAQCAtNDk0LDcgKzQ5Nyw3IEBACiAJcGFuaWMobXNnKTsKIH0KIAotdm9pZCBoYW5kbGVfaW50ZXJydXB0aW9uKGludCBjb2RlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgbm90cmFjZSBoYW5kbGVfaW50ZXJydXB0aW9uKGludCBjb2RlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHJlc3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmF1bHRfc3BhY2UgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCAxYTNiNmNjLi5mZDJjYzRmIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNTQsNiArNTQsOCBAQAogCQlURVhUX1RFWFQKIAkJU0NIRURfVEVYVAogCQlMT0NLX1RFWFQKKwkJS1BST0JFU19URVhUCisJCUlSUUVOVFJZX1RFWFQKIAkJKigudGV4dC5kb19zb2Z0aXJxKQogCQkqKC50ZXh0LnN5c19leGl0KQogCQkqKC50ZXh0LmRvX3NpZ2FsdHN0YWNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbW0vaW5pdC5jIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCmluZGV4IDlkNzA0ZDkuLjQzNTZjZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL21tL2luaXQuYworKysgYi9hcmNoL3BhcmlzYy9tbS9pbml0LmMKQEAgLTQ1Niw2ICs0NTYsMTMgQEAKIHsKIAlpbnQgY29kZXNpemUsIHJlc2VydmVkcGFnZXMsIGRhdGFzaXplLCBpbml0c2l6ZTsKIAorCS8qIERvIHNhbml0eSBjaGVja3Mgb24gcGFnZSB0YWJsZSBjb25zdGFudHMgKi8KKwlCVUlMRF9CVUdfT04oUFRFX0VOVFJZX1NJWkUgIT0gc2l6ZW9mKHB0ZV90KSk7CisJQlVJTERfQlVHX09OKFBNRF9FTlRSWV9TSVpFICE9IHNpemVvZihwbWRfdCkpOworCUJVSUxEX0JVR19PTihQR0RfRU5UUllfU0laRSAhPSBzaXplb2YocGdkX3QpKTsKKwlCVUlMRF9CVUdfT04oUEFHRV9TSElGVCArIEJJVFNfUEVSX1BURSArIEJJVFNfUEVSX1BNRCArIEJJVFNfUEVSX1BHRAorCQkJPiBCSVRTX1BFUl9MT05HKTsKKwogCWhpZ2hfbWVtb3J5ID0gX192YSgobWF4X3BmbiA8PCBQQUdFX1NISUZUKSk7CiAKICNpZm5kZWYgQ09ORklHX0RJU0NPTlRJR01FTQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCA3ZDFhNTM1Li5lMGYwYTRkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMjI4LDYgKzIyOCw5IEBACiAJZGVwZW5kcyBvbiBQUEM2NCAjIG5vdCBzdXBwb3J0ZWQgb24gMzIgYml0cyB5ZXQKIAlkZWZhdWx0IG4KIAorY29uZmlnIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCisJZGVmX2Jvb2wgeQorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogc291cmNlICJrZXJuZWwvS2NvbmZpZy5mcmVlemVyIgpAQCAtMzQzLDcgKzM0Niw3IEBACiAJaGVscAogCSAgSHlwZXJ2aXNvci1hc3Npc3RlZCBkdW1wIGlzIG1lYW50IHRvIGJlIGEga2R1bXAgcmVwbGFjZW1lbnQKIAkgIG9mZmVyaW5nIHJvYnVzdG5lc3MgYW5kIHNwZWVkIG5vdCBwb3NzaWJsZSB3aXRob3V0IHN5c3RlbQotCSAgaHlwZXJ2aXNvciBhc3Npc3RlbmNlLgorCSAgaHlwZXJ2aXNvciBhc3Npc3RhbmNlLgogCiAJICBJZiB1bnN1cmUsIHNheSAiTiIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZwppbmRleCAyMjA5MWJiLi5hMTA5OGUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZwpAQCAtMjcsMTUgKzI3LDYgQEAKIAogCSAgVGhpcyBvcHRpb24gd2lsbCBzbG93IGRvd24gcHJvY2VzcyBjcmVhdGlvbiBzb21ld2hhdC4KIAotY29uZmlnIERFQlVHX1BBR0VBTExPQwotICAgICAgICBib29sICJEZWJ1ZyBwYWdlIG1lbW9yeSBhbGxvY2F0aW9ucyIKLSAgICAgICAgZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgIUhJQkVSTkFUSU9OCi0gICAgICAgIGhlbHAKLSAgICAgICAgICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgotICAgICAgICAgIFRoaXMgcmVzdWx0cyBpbiBhIGxhcmdlIHNsb3dkb3duLCBidXQgaGVscHMgdG8gZmluZCBjZXJ0YWluIHR5cGVzCi0gICAgICAgICAgb2YgbWVtb3J5IGNvcnJ1cHRpb25zLgotCi0KIGNvbmZpZyBIQ0FMTF9TVEFUUwogCWJvb2wgIkh5cGVydmlzb3IgY2FsbCBpbnN0cnVtZW50YXRpb24iCiAJZGVwZW5kcyBvbiBQUENfUFNFUklFUyAmJiBERUJVR19GUwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzJ4X3JkYi5kdHMKaW5kZXggZGVhMzA5MS4uNDMxOWJkNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMnhfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMyeF9yZGIuZHRzCkBAIC0xNTIsMTAgKzE1MiwyMSBAQAogCQl9OwogCiAJCXBhcl9pb0AxNDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQlyZWcgPSA8MHgxNDAwIDB4MTAwPjsKKwkJCXJhbmdlcyA9IDwzIDB4MTQ0OCAweDE4PjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjMtcWUtcGFyaW8iOwogCQkJZGV2aWNlX3R5cGUgPSAicGFyX2lvIjsKIAkJCW51bS1wb3J0cyA9IDw3PjsKIAorCQkJcWVfcGlvX2Q6IGdwaW8tY29udHJvbGxlckAxNDQ4IHsKKwkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzLXFlLXBhcmlvLWJhbmsiOworCQkJCXJlZyA9IDwzIDB4MTg+OworCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCX07CisKIAkJCXVjYzJwaW86dWNjX3BpbkAwMiB7CiAJCQkJcGlvLW1hcCA9IDwKIAkJCS8qIHBvcnQgIHBpbiAgZGlyICBvcGVuX2RyYWluICBhc3NpZ25tZW50ICBoYXNfaXJxICovCkBAIC0yMjUsMTIgKzIzNiwyNSBAQAogCQl9OwogCiAJCXNwaUA0YzAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxzcGkiOwogCQkJcmVnID0gPDB4NGMwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JnFlaWM+OworCQkJZ3Bpb3MgPSA8JnFlX3Bpb19kIDEzIDA+OwogCQkJbW9kZSA9ICJjcHUtcWUiOworCisJCQltbWMtc2xvdEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzIzcmRiLW1tYy1zbG90IiwKKwkJCQkJICAgICAibW1jLXNwaS1zbG90IjsKKwkJCQlyZWcgPSA8MD47CisJCQkJZ3Bpb3MgPSA8JnFlX3Bpb19kIDE0IDEKKwkJCQkJICZxZV9waW9fZCAxNSAwPjsKKwkJCQl2b2x0YWdlLXJhbmdlcyA9IDwzMzAwIDMzMDA+OworCQkJCXNwaS1tYXgtZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKKwkJCX07CiAJCX07CiAKIAkJc3BpQDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaAppbmRleCA1NDUwMjhmLi42ODRhNzNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oaWdobWVtLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtOTQsNiArOTUsNyBAQAogCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCiAJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiAKKwlkZWJ1Z19rbWFwX2F0b21pYyh0eXBlKTsKIAlpZHggPSB0eXBlICsgS01fVFlQRV9OUipzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKICNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tem9uZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tem9uZS5oCmluZGV4IDE5ZjI5OWIuLjM1YWNhYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXpvbmUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW16b25lLmgKQEAgLTgsNiArOCw3IEBACiAjZGVmaW5lIF9BU01fTU1aT05FX0hfCiAjaWZkZWYgX19LRVJORUxfXwogCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogCiAvKgogICogZ2VuZXJpYyBub24tbGluZWFyIG1lbW9yeSBzdXBwb3J0OgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDM1NDgxNTkuLmJhMTdkNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTExNCw2ICsxMTQsMTAgQEAKIC8qIERlY2lkZSB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIGRvbWFpbiBudW1iZXIgaW4gL3Byb2MgKi8KIGV4dGVybiBpbnQgcGNpX3Byb2NfZG9tYWluKHN0cnVjdCBwY2lfYnVzICpidXMpOwogCisvKiBNU0kgYXJjaCBob29rcyAqLworI2RlZmluZSBhcmNoX3NldHVwX21zaV9pcnFzIGFyY2hfc2V0dXBfbXNpX2lycXMKKyNkZWZpbmUgYXJjaF90ZWFyZG93bl9tc2lfaXJxcyBhcmNoX3RlYXJkb3duX21zaV9pcnFzCisjZGVmaW5lIGFyY2hfbXNpX2NoZWNrX2RldmljZSBhcmNoX21zaV9jaGVja19kZXZpY2UKIAogc3RydWN0IHZtX2FyZWFfc3RydWN0OwogLyogTWFwIGEgcmFuZ2Ugb2YgUENJIG1lbW9yeSBvciBJL08gc3BhY2UgZm9yIGEgZGV2aWNlIGludG8gdXNlciBzcGFjZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzMy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzMy5oCmluZGV4IDY3ZjE4MTIuLmNkYjZmZDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzLmgKQEAgLTUwLDYgKzUwLDkgQEAKIAogZW51bSBwczNfcGFyYW1fYXZfbXVsdGlfb3V0IHBzM19vc19hcmVhX2dldF9hdl9tdWx0aV9vdXQodm9pZCk7CiAKK2V4dGVybiB1NjQgcHMzX29zX2FyZWFfZ2V0X3J0Y19kaWZmKHZvaWQpOworZXh0ZXJuIHZvaWQgcHMzX29zX2FyZWFfc2V0X3J0Y19kaWZmKHU2NCBydGNfZGlmZik7CisKIC8qIGRtYSByb3V0aW5lcyAqLwogCiBlbnVtIHBzM19kbWFfcGFnZV9zaXplIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggMzY4NjQzNi4uYzNiMTkzMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTI4Nyw2ICsyODcsOSBAQAogCXJ3LT5sb2NrID0gMDsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCV9fc3Bpbl95aWVsZChsb2NrKQogI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJX19yd195aWVsZChsb2NrKQogI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCV9fcndfeWllbGQobG9jaykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdXNwZW5kLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3VzcGVuZC5oCmluZGV4IGNiZjJjOTQuLmM2ZWZjMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N1c3BlbmQuaApAQCAtMyw3ICszLDQgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYXJjaF9wcmVwYXJlX3N1c3BlbmQodm9pZCkgeyByZXR1cm4gMDsgfQogCi12b2lkIHNhdmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpOwotdm9pZCByZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSh2b2lkKTsKLQogI2VuZGlmIC8qIF9fQVNNX1BPV0VSUENfU1VTUEVORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9mdHJhY2UuYwppbmRleCA1YjVkMTZiLi41NDU1OTQzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMKQEAgLTU1Nyw3ICs1NTcsNiBAQAogdm9pZCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4odW5zaWduZWQgbG9uZyAqcGFyZW50LCB1bnNpZ25lZCBsb25nIHNlbGZfYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIG9sZDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgY2FsbHRpbWU7CiAJaW50IGZhdWx0ZWQ7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgdHJhY2U7CiAJdW5zaWduZWQgbG9uZyByZXR1cm5faG9va2VyID0gKHVuc2lnbmVkIGxvbmcpJnJldHVybl90b19oYW5kbGVyOwpAQCAtNjA2LDEwICs2MDUsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JY2FsbHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQlpZiAoZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKG9sZCwgY2FsbHRpbWUsCi0JCQkJc2VsZl9hZGRyLCAmdHJhY2UuZGVwdGgpID09IC1FQlVTWSkgeworCWlmIChmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2Uob2xkLCBzZWxmX2FkZHIsICZ0cmFjZS5kZXB0aCkgPT0gLUVCVVNZKSB7CiAJCSpwYXJlbnQgPSBvbGQ7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21zaS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tc2kuYwppbmRleCAzYmI3ZDNkLi44YmJjMTJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbXNpLmMKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tc2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAKQEAgLTE5LDYgKzIwLDEwIEBACiAJCXJldHVybiAtRU5PU1lTOwogCX0KIAorCS8qIFBvd2VyUEMgZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIE1TSSB5ZXQgKi8KKwlpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSSAmJiBudmVjID4gMSkKKwkJcmV0dXJuIDE7CisKIAlpZiAocHBjX21kLm1zaV9jaGVja19kZXZpY2UpIHsKIAkJcHJfZGVidWcoIm1zaTogVXNpbmcgcGxhdGZvcm0gY2hlY2sgcm91dGluZS5cbiIpOwogCQlyZXR1cm4gcHBjX21kLm1zaV9jaGVja19kZXZpY2UoZGV2LCBudmVjLCB0eXBlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZWFjMDY0OS4uN2I0NGEzMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTU5OCw3ICs1OTgsNyBAQAogLyoKICAqIENvcHkgYSB0aHJlYWQuLgogICovCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCmluZGV4IGM5NTY0MDMuLjkyNmVhODYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCkBAIC0xMTI3LDMgKzExMjcsMTkgQEAKIAlkci0+cmVzdWx0X2xvdyAgPSAoKHU2NCl5IDw8IDMyKSArIHo7CiAKIH0KKworc3RhdGljIGludCBfX2luaXQgcnRjX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJaWYgKCFwcGNfbWQuZ2V0X3J0Y190aW1lKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJydGMtZ2VuZXJpYyIsIC0xLCBOVUxMLCAwKTsKKwlpZiAoSVNfRVJSKHBkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihwZGV2KTsKKworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChydGNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwppbmRleCBkMzY5NDQ5Li44MTllNTlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKQEAgLTQ4Miw3ICs0ODIsNyBAQAogCWNtby0+ZXhjZXNzLnNpemUgPSBjbW8tPmVudGl0bGVkIC0gY21vLT5yZXNlcnZlLnNpemU7CiAJY21vLT5leGNlc3MuZnJlZSA9IGNtby0+ZXhjZXNzLnNpemUgLSBuZWVkOwogCi0JY2FuY2VsX2RlbGF5ZWRfd29yayhjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yaykpOworCWNhbmNlbF9kZWxheWVkX3dvcmsodG9fZGVsYXllZF93b3JrKHdvcmspKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW9fY21vLmxvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfcmRiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9yZGIuYwppbmRleCAyYTEyOTVmLi41NjdkZWQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9yZGIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9yZGIuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9tbWNfc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CiAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pcGljLmg+CkBAIC0zOSwxNiArNDAsMTE2IEBACiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19RVUlDQ19FTkdJTkUKLXN0YXRpYyB2b2lkIG1wYzgzeHhfc3BpX2FjdGl2YXRlX2NzKHU4IGNzLCB1OCBwb2xhcml0eSkKK3N0YXRpYyBpbnQgX19pbml0IG9mX2ZzbF9zcGlfcHJvYmUoY2hhciAqdHlwZSwgY2hhciAqY29tcGF0aWJsZSwgdTMyIHN5c2NsaywKKwkJCQkgICBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmJvYXJkX2luZm9zLAorCQkJCSAgIHVuc2lnbmVkIGludCBudW1fYm9hcmRfaW5mb3MsCisJCQkJICAgdm9pZCAoKmNzX2NvbnRyb2wpKHN0cnVjdCBzcGlfZGV2aWNlICpkZXYsCisJCQkJCQkgICAgICBib29sIG9uKSkKIHsKLQlwcl9kZWJ1ZygiJXMgJWQgJWRcbiIsIF9fZnVuY19fLCBjcywgcG9sYXJpdHkpOwotCXBhcl9pb19kYXRhX3NldCgzLCAxMywgcG9sYXJpdHkpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJdW5zaWduZWQgaW50IGkgPSAwOworCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCB0eXBlLCBjb21wYXRpYmxlKSB7CisJCWludCByZXQ7CisJCXVuc2lnbmVkIGludCBqOworCQljb25zdCB2b2lkICpwcm9wOworCQlzdHJ1Y3QgcmVzb3VyY2UgcmVzWzJdOworCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCQlzdHJ1Y3QgZnNsX3NwaV9wbGF0Zm9ybV9kYXRhIHBkYXRhID0geworCQkJLmNzX2NvbnRyb2wgPSBjc19jb250cm9sLAorCQl9OworCisJCW1lbXNldChyZXMsIDAsIHNpemVvZihyZXMpKTsKKworCQlwZGF0YS5zeXNjbGsgPSBzeXNjbGs7CisKKwkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOworCQlpZiAoIXByb3ApCisJCQlnb3RvIGVycjsKKwkJcGRhdGEuYnVzX251bSA9ICoodTMyICopcHJvcDsKKworCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiY2VsbC1pbmRleCIsIE5VTEwpOworCQlpZiAocHJvcCkKKwkJCWkgPSAqKHUzMiAqKXByb3A7CisKKwkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1vZGUiLCBOVUxMKTsKKwkJaWYgKHByb3AgJiYgIXN0cmNtcChwcm9wLCAiY3B1LXFlIikpCisJCQlwZGF0YS5xZV9tb2RlID0gMTsKKworCQlmb3IgKGogPSAwOyBqIDwgbnVtX2JvYXJkX2luZm9zOyBqKyspIHsKKwkJCWlmIChib2FyZF9pbmZvc1tqXS5idXNfbnVtID09IHBkYXRhLmJ1c19udW0pCisJCQkJcGRhdGEubWF4X2NoaXBzZWxlY3QrKzsKKwkJfQorCisJCWlmICghcGRhdGEubWF4X2NoaXBzZWxlY3QpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzWzBdKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCisJCXJldCA9IG9mX2lycV90b19yZXNvdXJjZShucCwgMCwgJnJlc1sxXSk7CisJCWlmIChyZXQgPT0gTk9fSVJRKQorCQkJZ290byBlcnI7CisKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygibXBjODN4eF9zcGkiLCBpKTsKKwkJaWYgKCFwZGV2KQorCQkJZ290byBlcnI7CisKKwkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsICZwZGF0YSwgc2l6ZW9mKHBkYXRhKSk7CisJCWlmIChyZXQpCisJCQlnb3RvIHVucmVnOworCisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsIHJlcywKKwkJCQkJCSAgICBBUlJBWV9TSVpFKHJlcykpOworCQlpZiAocmV0KQorCQkJZ290byB1bnJlZzsKKworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOworCQlpZiAocmV0KQorCQkJZ290byB1bnJlZzsKKworCQlnb3RvIG5leHQ7Cit1bnJlZzoKKwkJcGxhdGZvcm1fZGV2aWNlX2RlbChwZGV2KTsKK2VycjoKKwkJcHJfZXJyKCIlczogcmVnaXN0cmF0aW9uIGZhaWxlZFxuIiwgbnAtPmZ1bGxfbmFtZSk7CituZXh0OgorCQlpKys7CisJfQorCisJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyB2b2lkIG1wYzgzeHhfc3BpX2RlYWN0aXZhdGVfY3ModTggY3MsIHU4IHBvbGFyaXR5KQorc3RhdGljIGludCBfX2luaXQgZnNsX3NwaV9pbml0KHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqYm9hcmRfaW5mb3MsCisJCQkgICAgICAgdW5zaWduZWQgaW50IG51bV9ib2FyZF9pbmZvcywKKwkJCSAgICAgICB2b2lkICgqY3NfY29udHJvbCkoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwKKwkJCQkJCSAgYm9vbCBvbikpCiB7Ci0JcHJfZGVidWcoIiVzICVkICVkXG4iLCBfX2Z1bmNfXywgY3MsIHBvbGFyaXR5KTsKLQlwYXJfaW9fZGF0YV9zZXQoMywgMTMsICFwb2xhcml0eSk7CisJdTMyIHN5c2NsayA9IC0xOworCWludCByZXQ7CisKKwkvKiBTUEkgY29udHJvbGxlciBpcyBlaXRoZXIgY2xvY2tlZCBmcm9tIFFFIG9yIFNvQyBjbG9jayAqLworCXN5c2NsayA9IGdldF9icmdmcmVxKCk7CisJaWYgKHN5c2NsayA9PSAtMSkgeworCQlzeXNjbGsgPSBmc2xfZ2V0X3N5c19mcmVxKCk7CisJCWlmIChzeXNjbGsgPT0gLTEpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBvZl9mc2xfc3BpX3Byb2JlKE5VTEwsICJmc2wsc3BpIiwgc3lzY2xrLCBib2FyZF9pbmZvcywKKwkJCSAgICAgICBudW1fYm9hcmRfaW5mb3MsIGNzX2NvbnRyb2wpOworCWlmICghcmV0KQorCQlvZl9mc2xfc3BpX3Byb2JlKCJzcGkiLCAiZnNsX3NwaSIsIHN5c2NsaywgYm9hcmRfaW5mb3MsCisJCQkJIG51bV9ib2FyZF9pbmZvcywgY3NfY29udHJvbCk7CisKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oYm9hcmRfaW5mb3MsIG51bV9ib2FyZF9pbmZvcyk7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzgzeHhfc3BpX2NzX2NvbnRyb2woc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgYm9vbCBvbikKK3sKKwlwcl9kZWJ1ZygiJXMgJWQgJWRcbiIsIF9fZnVuY19fLCBzcGktPmNoaXBfc2VsZWN0LCBvbik7CisJcGFyX2lvX2RhdGFfc2V0KDMsIDEzLCBvbik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbW1jX3NwaV9wbGF0Zm9ybV9kYXRhIG1wYzgzMnhfbW1jX3BkYXRhID0gewpAQCAtNzQsOSArMTc1LDEzIEBACiAJcGFyX2lvX2NvbmZpZ19waW4oMywgMTQsIDIsIDAsIDAsIDApOyAvKiBTRF9JTlNFUlQsIEkgKi8KIAlwYXJfaW9fY29uZmlnX3BpbigzLCAxNSwgMiwgMCwgMCwgMCk7IC8qIFNEX1BST1RFQ1QsSSAqLwogCi0JcmV0dXJuIGZzbF9zcGlfaW5pdCgmbXBjODMyeF9zcGlfYm9hcmRpbmZvLCAxLAotCQkJICAgIG1wYzgzeHhfc3BpX2FjdGl2YXRlX2NzLAotCQkJICAgIG1wYzgzeHhfc3BpX2RlYWN0aXZhdGVfY3MpOworCS8qCisJICogRG9uJ3QgYm90aGVyIHdpdGggbGVnYWN5IHN0dWZmIHdoZW4gZGV2aWNlIHRyZWUgY29udGFpbnMKKwkgKiBtbWMtc3BpLXNsb3Qgbm9kZS4KKwkgKi8KKwlpZiAob2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgIm1tYy1zcGktc2xvdCIpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZnNsX3NwaV9pbml0KCZtcGM4MzJ4X3NwaV9ib2FyZGluZm8sIDEsIG1wYzgzeHhfc3BpX2NzX2NvbnRyb2wpOwogfQogbWFjaGluZV9kZXZpY2VfaW5pdGNhbGwobXBjODMyeF9yZGIsIG1wYzgzMnhfc3BpX2luaXQpOwogI2VuZGlmIC8qIENPTkZJR19RVUlDQ19FTkdJTkUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwppbmRleCBmZmEyYTlmLi5lM2U4NzA3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCkBAIC0yOTMsNyArMjkzLDcgQEAKIGNvbmZpZyBPRl9SVEMKIAlib29sCiAJaGVscAotCSAgVXNlcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBPRiBvciBmbGF0dGVuZWQgZGV2aWNlIHRyZWUgdG8gaW5zdGF0aWF0ZQorCSAgVXNlcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBPRiBvciBmbGF0dGVuZWQgZGV2aWNlIHRyZWUgdG8gaW5zdGFudGlhdGUKIAkgIHBsYXRmb3JtIGRldmljZXMgZm9yIGRpcmVjdCBtYXBwZWQgUlRDIGNoaXBzIGxpa2UgdGhlIERTMTc0MiBvciBEUzE3NDMuCiAKIHNvdXJjZSAiYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2lub2RlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwppbmRleCA2NGYwNjg1Li43MDZlYjVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYwpAQCAtNjM1LDcgKzYzNSw3IEBACiAJaWYgKGRlbnRyeS0+ZF9pbm9kZSkKIAkJZ290byBvdXRfZHB1dDsKIAotCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAKIAlpZiAoZmxhZ3MgJiBTUFVfQ1JFQVRFX0dBTkcpCiAJCXJldCA9IHNwdWZzX2NyZWF0ZV9nYW5nKG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL29zLWFyZWEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL29zLWFyZWEuYwppbmRleCBlMWM4M2MyLi44NmUzOTJiMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvb3MtYXJlYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL29zLWFyZWEuYwpAQCAtODA4LDYgKzgwOCw3IEBACiB7CiAJcmV0dXJuIHNhdmVkX3BhcmFtcy5ydGNfZGlmZjsKIH0KK0VYUE9SVF9TWU1CT0wocHMzX29zX2FyZWFfZ2V0X3J0Y19kaWZmKTsKIAogLyoqCiAgKiBwczNfb3NfYXJlYV9zZXRfcnRjX2RpZmYgLSBTZXQgdGhlIHJ0YyBkaWZmIHZhbHVlLgpAQCAtODIzLDYgKzgyNCw3IEBACiAJCW9zX2FyZWFfcXVldWVfd29yaygpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0wocHMzX29zX2FyZWFfc2V0X3J0Y19kaWZmKTsKIAogLyoqCiAgKiBwczNfb3NfYXJlYV9nZXRfYXZfbXVsdGlfb3V0IC0gUmV0dXJucyB0aGUgZGVmYXVsdCB2aWRlbyBtb2RlLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvcGxhdGZvcm0uaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3BsYXRmb3JtLmgKaW5kZXggMjM1YzEzZS4uMTM2YWEwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvcGxhdGZvcm0uaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9wbGF0Zm9ybS5oCkBAIC02NCw4ICs2NCw2IEBACiAKIHZvaWQgX19pbml0IHBzM19vc19hcmVhX3NhdmVfcGFyYW1zKHZvaWQpOwogdm9pZCBfX2luaXQgcHMzX29zX2FyZWFfaW5pdCh2b2lkKTsKLXU2NCBwczNfb3NfYXJlYV9nZXRfcnRjX2RpZmYodm9pZCk7Ci12b2lkIHBzM19vc19hcmVhX3NldF9ydGNfZGlmZih1NjQgcnRjX2RpZmYpOwogCiAvKiBzcHUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3NldHVwLmMKaW5kZXggMzMzMWNjYi4uNjYxODE4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zZXR1cC5jCkBAIC0yNzAsOCArMjcwLDYgQEAKIAkuaW5pdF9JUlEJCQk9IHBzM19pbml0X0lSUSwKIAkucGFuaWMJCQkJPSBwczNfcGFuaWMsCiAJLmdldF9ib290X3RpbWUJCQk9IHBzM19nZXRfYm9vdF90aW1lLAotCS5zZXRfcnRjX3RpbWUJCQk9IHBzM19zZXRfcnRjX3RpbWUsCi0JLmdldF9ydGNfdGltZQkJCT0gcHMzX2dldF9ydGNfdGltZSwKIAkuc2V0X2RhYnIJCQk9IHBzM19zZXRfZGFiciwKIAkuY2FsaWJyYXRlX2RlY3IJCQk9IHBzM19jYWxpYnJhdGVfZGVjciwKIAkucHJvZ3Jlc3MJCQk9IHBzM19wcm9ncmVzcywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3RpbWUuYwppbmRleCBkMGRhZjdkLi5iMTc4YTFlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvdGltZS5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgogI2luY2x1ZGUgPGFzbS9sdjFjYWxsLmg+CkBAIC03NCwyMyArNzUsMjAgQEAKIAlyZXR1cm4gcnRjX3ZhbDsKIH0KIAotaW50IHBzM19zZXRfcnRjX3RpbWUoc3RydWN0IHJ0Y190aW1lICp0bSkKLXsKLQl1NjQgbm93ID0gbWt0aW1lKHRtLT50bV95ZWFyICsgMTkwMCwgdG0tPnRtX21vbiArIDEsIHRtLT50bV9tZGF5LAotCQl0bS0+dG1faG91ciwgdG0tPnRtX21pbiwgdG0tPnRtX3NlYyk7Ci0KLQlwczNfb3NfYXJlYV9zZXRfcnRjX2RpZmYobm93IC0gcmVhZF9ydGMoKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcHMzX2dldF9ydGNfdGltZShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQotewotCXRvX3RtKHJlYWRfcnRjKCkgKyBwczNfb3NfYXJlYV9nZXRfcnRjX2RpZmYoKSwgdG0pOwotCXRtLT50bV95ZWFyIC09IDE5MDA7Ci0JdG0tPnRtX21vbiAtPSAxOwotfQotCiB1bnNpZ25lZCBsb25nIF9faW5pdCBwczNfZ2V0X2Jvb3RfdGltZSh2b2lkKQogewogCXJldHVybiByZWFkX3J0YygpICsgcHMzX29zX2FyZWFfZ2V0X3J0Y19kaWZmKCk7CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IHBzM19ydGNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicnRjLXBzMyIsIC0xLCBOVUxMLCAwKTsKKwlpZiAoSVNfRVJSKHBkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihwZGV2KTsKKworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChwczNfcnRjX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9iZXN0Y29tbS9LY29uZmlnCmluZGV4IDBiMTkyYTEuLjI5ZTQyNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvYmVzdGNvbW0vS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2Jlc3Rjb21tL0tjb25maWcKQEAgLTksOCArOSw4IEBACiAJc2VsZWN0IFBQQ19MSUJfUkhFQVAKIAloZWxwCiAJICBCZXN0Q29tbSBpcyB0aGUgbmFtZSBvZiB0aGUgY29tbXVuaWNhdGlvbiBjb3Byb2Nlc3NvciBmb3VuZAotCSAgb24gdGhlIEZyZWVzY2FsZSBNUEM1MjAwIGZhbWlseSBvZiBwcm9jZXNzb3IuIEl0J3MgdXNhZ2UgaXMKLQkgIG9wdGlvbm5hbCBmb3Igc29tZSBkcml2ZXJzIChsaWtlIEFUQSksIGJ1dCByZXF1aXJlZCBmb3IKKwkgIG9uIHRoZSBGcmVlc2NhbGUgTVBDNTIwMCBmYW1pbHkgb2YgcHJvY2Vzc29yLiAgSXRzIHVzYWdlIGlzCisJICBvcHRpb25hbCBmb3Igc29tZSBkcml2ZXJzIChsaWtlIEFUQSksIGJ1dCByZXF1aXJlZCBmb3IKIAkgIG90aGVycyAobGlrZSBGRUMpLgogCiAJICBJZiB5b3Ugd2FudCB0byB1c2UgZHJpdmVycyB0aGF0IHJlcXVpcmUgRE1BIG9wZXJhdGlvbnMsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCmluZGV4IGEwMWM4OWQuLmFmZThkYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3NvYy5jCkBAIC00MTcsMTE1ICs0MTcsNiBAQAogCiBhcmNoX2luaXRjYWxsKGZzbF91c2Jfb2ZfaW5pdCk7CiAKLXN0YXRpYyBpbnQgX19pbml0IG9mX2ZzbF9zcGlfcHJvYmUoY2hhciAqdHlwZSwgY2hhciAqY29tcGF0aWJsZSwgdTMyIHN5c2NsaywKLQkJCQkgICBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKmJvYXJkX2luZm9zLAotCQkJCSAgIHVuc2lnbmVkIGludCBudW1fYm9hcmRfaW5mb3MsCi0JCQkJICAgdm9pZCAoKmFjdGl2YXRlX2NzKSh1OCBjcywgdTggcG9sYXJpdHkpLAotCQkJCSAgIHZvaWQgKCpkZWFjdGl2YXRlX2NzKSh1OCBjcywgdTggcG9sYXJpdHkpKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdW5zaWduZWQgaW50IGkgPSAwOwotCi0JZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCB0eXBlLCBjb21wYXRpYmxlKSB7Ci0JCWludCByZXQ7Ci0JCXVuc2lnbmVkIGludCBqOwotCQljb25zdCB2b2lkICpwcm9wOwotCQlzdHJ1Y3QgcmVzb3VyY2UgcmVzWzJdOwotCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCQlzdHJ1Y3QgZnNsX3NwaV9wbGF0Zm9ybV9kYXRhIHBkYXRhID0gewotCQkJLmFjdGl2YXRlX2NzID0gYWN0aXZhdGVfY3MsCi0JCQkuZGVhY3RpdmF0ZV9jcyA9IGRlYWN0aXZhdGVfY3MsCi0JCX07Ci0KLQkJbWVtc2V0KHJlcywgMCwgc2l6ZW9mKHJlcykpOwotCi0JCXBkYXRhLnN5c2NsayA9IHN5c2NsazsKLQotCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7Ci0JCWlmICghcHJvcCkKLQkJCWdvdG8gZXJyOwotCQlwZGF0YS5idXNfbnVtID0gKih1MzIgKilwcm9wOwotCi0JCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjZWxsLWluZGV4IiwgTlVMTCk7Ci0JCWlmIChwcm9wKQotCQkJaSA9ICoodTMyICopcHJvcDsKLQotCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibW9kZSIsIE5VTEwpOwotCQlpZiAocHJvcCAmJiAhc3RyY21wKHByb3AsICJjcHUtcWUiKSkKLQkJCXBkYXRhLnFlX21vZGUgPSAxOwotCi0JCWZvciAoaiA9IDA7IGogPCBudW1fYm9hcmRfaW5mb3M7IGorKykgewotCQkJaWYgKGJvYXJkX2luZm9zW2pdLmJ1c19udW0gPT0gcGRhdGEuYnVzX251bSkKLQkJCQlwZGF0YS5tYXhfY2hpcHNlbGVjdCsrOwotCQl9Ci0KLQkJaWYgKCFwZGF0YS5tYXhfY2hpcHNlbGVjdCkKLQkJCWNvbnRpbnVlOwotCi0JCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXNbMF0pOwotCQlpZiAocmV0KQotCQkJZ290byBlcnI7Ci0KLQkJcmV0ID0gb2ZfaXJxX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzWzFdKTsKLQkJaWYgKHJldCA9PSBOT19JUlEpCi0JCQlnb3RvIGVycjsKLQotCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJtcGM4M3h4X3NwaSIsIGkpOwotCQlpZiAoIXBkZXYpCi0JCQlnb3RvIGVycjsKLQotCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEocGRldiwgJnBkYXRhLCBzaXplb2YocGRhdGEpKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gdW5yZWc7Ci0KLQkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgcmVzLAotCQkJCQkJICAgIEFSUkFZX1NJWkUocmVzKSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIHVucmVnOwotCi0JCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIHVucmVnOwotCi0JCWdvdG8gbmV4dDsKLXVucmVnOgotCQlwbGF0Zm9ybV9kZXZpY2VfZGVsKHBkZXYpOwotZXJyOgotCQlwcl9lcnIoIiVzOiByZWdpc3RyYXRpb24gZmFpbGVkXG4iLCBucC0+ZnVsbF9uYW1lKTsKLW5leHQ6Ci0JCWkrKzsKLQl9Ci0KLQlyZXR1cm4gaTsKLX0KLQotaW50IF9faW5pdCBmc2xfc3BpX2luaXQoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpib2FyZF9pbmZvcywKLQkJCXVuc2lnbmVkIGludCBudW1fYm9hcmRfaW5mb3MsCi0JCQl2b2lkICgqYWN0aXZhdGVfY3MpKHU4IGNzLCB1OCBwb2xhcml0eSksCi0JCQl2b2lkICgqZGVhY3RpdmF0ZV9jcykodTggY3MsIHU4IHBvbGFyaXR5KSkKLXsKLQl1MzIgc3lzY2xrID0gLTE7Ci0JaW50IHJldDsKLQotI2lmZGVmIENPTkZJR19RVUlDQ19FTkdJTkUKLQkvKiBTUEkgY29udHJvbGxlciBpcyBlaXRoZXIgY2xvY2tlZCBmcm9tIFFFIG9yIFNvQyBjbG9jayAqLwotCXN5c2NsayA9IGdldF9icmdmcmVxKCk7Ci0jZW5kaWYKLQlpZiAoc3lzY2xrID09IC0xKSB7Ci0JCXN5c2NsayA9IGZzbF9nZXRfc3lzX2ZyZXEoKTsKLQkJaWYgKHN5c2NsayA9PSAtMSkKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJldCA9IG9mX2ZzbF9zcGlfcHJvYmUoTlVMTCwgImZzbCxzcGkiLCBzeXNjbGssIGJvYXJkX2luZm9zLAotCQkJICAgICAgIG51bV9ib2FyZF9pbmZvcywgYWN0aXZhdGVfY3MsIGRlYWN0aXZhdGVfY3MpOwotCWlmICghcmV0KQotCQlvZl9mc2xfc3BpX3Byb2JlKCJzcGkiLCAiZnNsX3NwaSIsIHN5c2NsaywgYm9hcmRfaW5mb3MsCi0JCQkJIG51bV9ib2FyZF9pbmZvcywgYWN0aXZhdGVfY3MsIGRlYWN0aXZhdGVfY3MpOwotCi0JcmV0dXJuIHNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKGJvYXJkX2luZm9zLCBudW1fYm9hcmRfaW5mb3MpOwotfQotCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDXzg1eHgpIHx8IGRlZmluZWQoQ09ORklHX1BQQ184Nnh4KQogc3RhdGljIF9fYmUzMiBfX2lvbWVtICpyc3RjcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmggYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaAppbmRleCA5Yzc0NGU0Li40MjM4MWJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaApAQCAtNCw2ICs0LDggQEAKIAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAorc3RydWN0IHNwaV9kZXZpY2U7CisKIGV4dGVybiBwaHlzX2FkZHJfdCBnZXRfaW1tcmJhc2Uodm9pZCk7CiAjaWYgZGVmaW5lZChDT05GSUdfQ1BNMikgfHwgZGVmaW5lZChDT05GSUdfUVVJQ0NfRU5HSU5FKSB8fCBkZWZpbmVkKENPTkZJR184eHgpCiBleHRlcm4gdTMyIGdldF9icmdmcmVxKHZvaWQpOwpAQCAtMTcsMTEgKzE5LDYgQEAKIHN0cnVjdCBzcGlfYm9hcmRfaW5mbzsKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKIAotZXh0ZXJuIGludCBmc2xfc3BpX2luaXQoc3RydWN0IHNwaV9ib2FyZF9pbmZvICpib2FyZF9pbmZvcywKLQkJCXVuc2lnbmVkIGludCBudW1fYm9hcmRfaW5mb3MsCi0JCQl2b2lkICgqYWN0aXZhdGVfY3MpKHU4IGNzLCB1OCBwb2xhcml0eSksCi0JCQl2b2lkICgqZGVhY3RpdmF0ZV9jcykodTggY3MsIHU4IHBvbGFyaXR5KSk7Ci0KIGV4dGVybiB2b2lkIGZzbF9yc3Rjcl9yZXN0YXJ0KGNoYXIgKmNtZCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVKSB8fCBkZWZpbmVkKENPTkZJR19GQl9GU0xfRElVX01PRFVMRSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggMmE4YWY1ZS4uZGNiNjY3YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTcyLDYgKzcyLDkgQEAKIGNvbmZpZyBWSVJUX0NQVV9BQ0NPVU5USU5HCiAJZGVmX2Jvb2wgeQogCitjb25maWcgQVJDSF9TVVBQT1JUU19ERUJVR19QQUdFQUxMT0MKKwlkZWZfYm9vbCB5CisKIG1haW5tZW51ICJMaW51eCBLZXJuZWwgQ29uZmlndXJhdGlvbiIKIAogY29uZmlnIFMzOTAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnLmRlYnVnIGIvYXJjaC9zMzkwL0tjb25maWcuZGVidWcKaW5kZXggNDU5OWZhMC4uMjI4MzkzMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcuZGVidWcKQEAgLTYsMTIgKzYsNCBAQAogCiBzb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgogCi1jb25maWcgREVCVUdfUEFHRUFMTE9DCi0JYm9vbCAiRGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnMiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKLQloZWxwCi0JICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgotCSAgVGhpcyByZXN1bHRzIGluIGEgc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMgb2YKLQkgIG1lbW9yeSBjb3JydXB0aW9ucy4KLQogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKaW5kZXggYjFlODkyYS4uNzA0ZGQzOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCkBAIC0xMiw2ICsxMiw4IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2lvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2lvLmgKaW5kZXggNmRjY2IwNy4uNjE5YmY5NCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaApAQCAtNDU2LDYgKzQ1Niw4IEBACiAjZGVmaW5lIENJT19PUEVSICAgICAgIDB4MDAwNAogLyogU2ljayByZXZhbGlkYXRpb24gb2YgZGV2aWNlLiAqLwogI2RlZmluZSBDSU9fUkVWQUxJREFURSAweDAwMDgKKy8qIERldmljZSBkaWQgbm90IHJlc3BvbmQgaW4gdGltZS4gKi8KKyNkZWZpbmUgQ0lPX0JPWEVEICAgICAgMHgwMDEwCiAKIC8qKgogICogc3RydWN0IGNjd19kZXZfaWQgLSB1bmlxdWUgaWRlbnRpZmllciBmb3IgY2N3IGRldmljZXMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCAyMDA5MTU4Li43MjEzN2JjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC05MiwxMiArOTIsNiBAQAogI2VuZGlmCiAKICNpZm5kZWYgQ09ORklHX1NNUAotc3RhdGljIGlubGluZSB2b2lkIHNtcF9zZW5kX3N0b3Aodm9pZCkKLXsKLQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzL21hY2hpbmUgY2hlY2tzICovCi0JX19sb2FkX3Bzd19tYXNrKHBzd19rZXJuZWxfYml0cyAmIH5QU1dfTUFTS19NQ0hFQ0spOwotfQotCiAjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpCQkwCiAjZGVmaW5lIHNtcF9jcHVfbm90X3J1bm5pbmcoY3B1KQkxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggZGY4NGFlOS4uZjM4NjFiMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTE3Miw2ICsxNzIsOSBAQAogCXJldHVybiBfcmF3X3dyaXRlX3RyeWxvY2tfcmV0cnkocncpOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfcmVhZF9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3dyaXRlX2xvY2sobG9jaykKKwogI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKICNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGI0OGU5NjEuLmEzYWNkOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIHsKIH0KIAotaW50IGNvcHlfdGhyZWFkKGludCBuciwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdfc3RhY2twLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3X3N0YWNrcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggOGQ1MGQ1Mi4uNWU0YmFiZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMjgsNiArMjgsNyBAQAogCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlzZWxlY3QgSEFWRV9BUkNIX0tHREIKKwlzZWxlY3QgQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpZiBNTVUKIAogY29uZmlnIFNVUEVSSDY0CiAJZGVmX2Jvb2wgeSBpZiBDUFVfU0g1CkBAIC0xMjksNiArMTMwLDkgQEAKIGNvbmZpZyBBUkNIX05PX1ZJUlRfVE9fQlVTCiAJZGVmX2Jvb2wgeQogCitjb25maWcgQVJDSF9IQVNfREVGQVVMVF9JRExFCisJZGVmX2Jvb2wgeQorCiBjb25maWcgSU9fVFJBUFBFRAogCWJvb2wKIApAQCAtNTMwLDcgKzUzNCw3IEBACiAKIGNvbmZpZyBLRVhFQwogCWJvb2wgImtleGVjIHN5c3RlbSBjYWxsIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gU1VQRVJIMzIgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBTVVBFUkgzMiAmJiBFWFBFUklNRU5UQUwgJiYgTU1VCiAJaGVscAogCSAga2V4ZWMgaXMgYSBzeXN0ZW0gY2FsbCB0aGF0IGltcGxlbWVudHMgdGhlIGFiaWxpdHkgdG8gc2h1dGRvd24geW91cgogCSAgY3VycmVudCBrZXJuZWwsIGFuZCB0byBzdGFydCBhbm90aGVyIGtlcm5lbC4gIEl0IGlzIGxpa2UgYSByZWJvb3QKQEAgLTY0MCwxMCArNjQ0LDEwIEBACiAJZGVwZW5kcyBvbiBHVVNBICYmIENQVV9TSDMgfHwgKENQVV9TSDQgJiYgIUNQVV9TSDRBKQogCWhlbHAKIAkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgYWxsb3cgdGhlIGtlcm5lbCB0byBpbXBsZW1lbnQgc29tZQotCSAgYXRvbWljIG9wZXJhdGlvbnMgdXNpbmcgYSBzb2Z0d2FyZSBpbXBsZW1lbnRpb24gb2YgbG9hZC1sb2NrZWQvCisJICBhdG9taWMgb3BlcmF0aW9ucyB1c2luZyBhIHNvZnR3YXJlIGltcGxlbWVudGF0aW9uIG9mIGxvYWQtbG9ja2VkLwogCSAgc3RvcmUtY29uZGl0aW9uYWwgKExMU0MpLiBPbiBtYWNoaW5lcyB3aGljaCBkbyBub3QgaGF2ZSBoYXJkd2FyZQogCSAgTExTQywgdGhpcyBzaG91bGQgYmUgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb3RoZXIgYWx0ZXJuYXRpdmUgb2YKLQkgIGRpc2FibGluZyBpbnN0ZXJydXB0cyBhcm91bmQgdGhlIGF0b21pYyBzZXF1ZW5jZS4KKwkgIGRpc2FibGluZyBpbnRlcnJ1cHRzIGFyb3VuZCB0aGUgYXRvbWljIHNlcXVlbmNlLgogCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCmluZGV4IGUyNzY1NWIuLjkxMjQ1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaV9ncGlvLmg+CisjaW5jbHVkZSA8bWVkaWEvb3Y3NzJ4Lmg+CiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxtZWRpYS9zaF9tb2JpbGVfY2V1Lmg+CkBAIC0yMzUsNiArMjM2LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19JMkMKKy8qIHN1cHBvcnQgZm9yIHRoZSBvbGQgbmNtMDNqIGNhbWVyYSAqLwogc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FtZXJhX25jbTAzal9tYWdpY1tdID0KIHsKIAkweDg3LCAweDAwLCAweDg4LCAweDA4LCAweDg5LCAweDAxLCAweDhBLCAweEU4LApAQCAtMjU1LDYgKzI1NywyMyBAQAogCTB4NjMsIDB4RDQsIDB4NjQsIDB4RUEsIDB4RDYsIDB4MEYsCiB9OwogCitzdGF0aWMgaW50IGNhbWVyYV9wcm9iZSh2b2lkKQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqYSA9IGkyY19nZXRfYWRhcHRlcigwKTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2c7CisJaW50IHJldDsKKworCWNhbWVyYV9wb3dlcigxKTsKKwltc2cuYWRkciA9IDB4NmU7CisJbXNnLmJ1ZiA9IGNhbWVyYV9uY20wM2pfbWFnaWM7CisJbXNnLmxlbiA9IDI7CisJbXNnLmZsYWdzID0gMDsKKwlyZXQgPSBpMmNfdHJhbnNmZXIoYSwgJm1zZywgMSk7CisJY2FtZXJhX3Bvd2VyKDApOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBjYW1lcmFfc2V0X2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfcGxhdGZvcm1faW5mbyAqaW5mbywKIAkJCSAgICAgIGludCBlbmFibGUpCiB7CkBAIC0zMDYsMTIgKzMyNSwzNyBAQAogCQkucGxhdGZvcm1fZGF0YQk9ICZjYW1lcmFfaW5mbywKIAl9LAogfTsKKworc3RhdGljIGludCBfX2luaXQgY2FtZXJhX3NldHVwKHZvaWQpCit7CisJaWYgKGNhbWVyYV9wcm9iZSgpID4gMCkKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZjYW1lcmFfZGV2aWNlKTsKKworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChjYW1lcmFfc2V0dXApOworCiAjZW5kaWYgLyogQ09ORklHX0kyQyAqLwogCitzdGF0aWMgaW50IG92NzcyNV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQoreworCWNhbWVyYV9wb3dlcigwKTsKKwlpZiAobW9kZSkKKwkJY2FtZXJhX3Bvd2VyKDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3Y3NzJ4X2NhbWVyYV9pbmZvIG92NzcyNV9pbmZvID0geworCS5idXN3aWR0aCAgPSBTT0NBTV9EQVRBV0lEVEhfOCwKKwkuZmxhZ3MgPSBPVjc3MlhfRkxBR19WRkxJUCB8IE9WNzcyWF9GTEFHX0hGTElQLAorCS5saW5rID0geworCQkucG93ZXIgID0gb3Y3NzI1X3Bvd2VyLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyBzaF9tb2JpbGVfY2V1X2luZm8gPSB7Ci0JLmZsYWdzID0gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAotCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fREFUQV9BQ1RJVkVfSElHSCB8IFNPQ0FNX01BU1RFUiB8Ci0JU09DQU1fREFUQVdJRFRIXzgsCisJLmZsYWdzID0gU0hfQ0VVX0ZMQUdfVVNFXzhCSVRfQlVTLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjZXVfcmVzb3VyY2VzW10gPSB7CkBAIC0zNTksOSArNDAzLDYgQEAKIAkmYXAzMjVyeGFfbm9yX2ZsYXNoX2RldmljZSwKIAkmbGNkY19kZXZpY2UsCiAJJmNldV9kZXZpY2UsCi0jaWZkZWYgQ09ORklHX0kyQwotCSZjYW1lcmFfZGV2aWNlLAotI2VuZGlmCiAJJm5hbmRfZmxhc2hfZGV2aWNlLAogCSZzZGNhcmRfY24zX2RldmljZSwKIH07CkBAIC0zNzAsNiArNDExLDEwIEBACiAJewogCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAogCX0sCisJeworCQlJMkNfQk9BUkRfSU5GTygib3Y3NzJ4IiwgMHgyMSksCisJCS5wbGF0Zm9ybV9kYXRhID0gJm92NzcyNV9pbmZvLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGFwMzI1cnhhX3NwaV9kZXZpY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC11cnF1ZWxsLmMKaW5kZXggMTcwMzZjZS4uODM2N2QxZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYm9hcmQtdXJxdWVsbC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLXVycXVlbGwuYwpAQCAtMTI5LDYgKzEyOSwxMCBAQAogCWdwaW9fcmVxdWVzdChHUElPX0ZOX1VTQl9PVkMwLCAgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVVNCX1BFTkMwLCBOVUxMKTsKIAorCS8qIGVuYWJsZSBMQU4gKi8KKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoVUJPQVJEUkVHKElSTDJNU0tSKSkgJiB+MHgwMDAwMDAwMSwKKwkJICBVQk9BUkRSRUcoSVJMMk1TS1IpKTsKKwogCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyh1cnF1ZWxsX2RldmljZXMsCiAJCQkJICAgIEFSUkFZX1NJWkUodXJxdWVsbF9kZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKaW5kZXggNGZkNmE3Mi4uMWVlMWRlMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwpAQCAtMzUyLDkgKzM1Miw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9pbmZvIHNoX21vYmlsZV9jZXVfaW5mbyA9IHsKLQkuZmxhZ3MgPSBTT0NBTV9NQVNURVIgfCBTT0NBTV9EQVRBV0lEVEhfOCB8IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORwotCXwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSAotCXwgU09DQU1fREFUQV9BQ1RJVkVfSElHSCwKKwkuZmxhZ3MgPSBTSF9DRVVfRkxBR19VU0VfOEJJVF9CVVMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG1pZ29yX2NldV9yZXNvdXJjZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvYXAzMjVyeGFfZGVmY29uZmlnCmluZGV4IDM1MmY4N2QuLmM4ZDk4MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9hcDMyNXJ4YV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2FwMzI1cnhhX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgVHVlIEphbiAyNyAxMTo0NTowOCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxNzo0Njo1MyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNiwxNCArMTYsMTYgQEAKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci0jIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQzLDYgKzQ1LDE1IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQpAQCAtNTgsNiArNjksNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTY2LDEwICs3OCw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc3LDYgKzg3LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTE1LDExICsxMjYsNiBAQAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEyOCw2ICsxMzQsNyBAQAogQ09ORklHX0NQVV9TSDQ9eQogQ09ORklHX0NQVV9TSDRBPXkKIENPTkZJR19DUFVfU0hYMj15CitDT05GSUdfQVJDSF9TSE1PQklMRT15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CkBAIC0xNTYsNiArMTYzLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTk4LDExICsyMDYsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTIyOCw2ICsyMzcsNyBAQAogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgogIwogQ09ORklHX1NIX1RNVT15CisjIENPTkZJR19TSF9USU1FUl9DTVQgaXMgbm90IHNldAogQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwogQ09ORklHX1RJQ0tfT05FU0hPVD15CkBAIC0zMDQsNyArMzE0LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzU5LDYgKzM2OCw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzcxLDcgKzM4MSw2IEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldApAQCAtNDgzLDcgKzQ5Miw2IEBACiAjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCiAjCiAjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKIAogIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKQEAgLTUxMCwxMCArNTE4LDE4IEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTU5LDkgKzU3NSwxMSBAQAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTk0LDggKzYxMiwxMCBAQAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogQ09ORklHX1NNU0M5MTFYPXkKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNjEyLDcgKzYzMiw2IEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02ODcsNiArNzA2LDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTcyMywxMiArNzQzLDkgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldApAQCAtNzQ4LDcgKzc2NSw2IEBACiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCiAjCi0jIENPTkZJR19TUElfQVQyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CkBAIC04MjIsNyArODM4LDcgQEAKICMKICMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfVFVORVI9eQotIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRSBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfVFVORVJfU0lNUExFPXkKIENPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPXkKIENPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PXkKQEAgLTgzMSw2ICs4NDcsNyBAQAogQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD15CiBDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PXkKIENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9eQorQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPXkKIENPTkZJR19WSURFT19WNEwyPXkKIENPTkZJR19WSURFT0JVRl9HRU49eQogQ09ORklHX1ZJREVPQlVGX0RNQV9DT05USUc9eQpAQCAtODg2LDYgKzkwMyw3IEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTk1LDYgKzEwMTMsNyBAQAogIwogIyBDT05GSUdfUlRDX0RSVl9TSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogQ09ORklHX1VJTz15CiAjIENPTkZJR19VSU9fUERSViBpcyBub3Qgc2V0CiBDT05GSUdfVUlPX1BEUlZfR0VOSVJRPXkKQEAgLTEwOTYsNyArMTExNSw2IEBACiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTExNzcsNyArMTE5NSw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtMTIwNCwxMCArMTIyMSwxMiBAQAogQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTI3Niw2ICsxMjk1LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMjk2LDcgKzEzMTYsNyBAQAogQ09ORklHX0NSQzMyPXkKIENPTkZJR19DUkM3PXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9jYXltYW5fZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2NheW1hbl9kZWZjb25maWcKaW5kZXggOTI4OTUwMS4uZmE1ZmMxZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2NheW1hbl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2NheW1hbl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjcKLSMgV2VkIE9jdCAyMiAxODowNDo1MiAyMDA4CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxNzo0OToxNCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKICMgQ09ORklHX1NVUEVSSDMyIGlzIG5vdCBzZXQKQEAgLTE2LDYgKzE2LDggQEAKICMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAogIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjMsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQwLDEwICs0MywxOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTUxLDYgKzYzLDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTYxLDEwICs3NCw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTczLDE4ICs4NCwxOCBAQAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRVJTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CiBDT05GSUdfSEFWRV9DTEs9eQogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtOTIsMTEgKzEwMyw5IEBACiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTEyLDcgKzEyMSw2IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIwLDYgKzEyOCw3IEBACiAjCiBDT05GSUdfQ1BVX1NINT15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjYzIGlzIG5vdCBzZXQKQEAgLTE0Niw2ICsxNTUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xODgsMTYgKzE5OCwxNiBAQAogQ09ORklHX1NQQVJTRU1FTV9TVEFUSUM9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX1JFU09VUkNFU182NEJJVD15CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX1dSSVRFQkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX09GRj15CkBAIC0yNTYsNyArMjY2LDYgQEAKICMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVD15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CiAKICMKICMgQm9vdCBvcHRpb25zCkBAIC0yNzIsOSArMjgxLDEyIEBACiBDT05GSUdfU0hfUENJRE1BX05PTkNPSEVSRU5UPXkKIENPTkZJR19QQ0lfQVVUTz15CiBDT05GSUdfUENJX0FVVE9fVVBEQVRFX1JFU09VUkNFUz15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCkBAIC0yODUsNiArMjk3LDEyIEBACiAjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAogQ09ORklHX05FVD15CiAKICMKQEAgLTM0NCw3ICszNjIsOSBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zNTUsMTMgKzM3NSwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQwMCwxMSArNDIwLDIwIEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNDQ3LDYgKzQ3Niw3IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9MT1dMRVZFTD15CiAjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DWEdCM19JU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CkBAIC00NTksNyArNDg5LDEwIEBACiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CkBAIC00NzgsNiArNTExLDcgQEAKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CkBAIC00OTMsNiArNTI3LDcgQEAKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01MTAsNyArNTQ1LDEwIEBACiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CkBAIC01NDMsOSArNTgxLDExIEBACiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CitDT05GSUdfQ0hFTFNJT19UM19ERVBFTkRTPXkKICMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAogIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CkBAIC01NTQsMTEgKzU5NCwxMyBAQAogIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUWEVOX05JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19OSVUgaXMgbm90IHNldAorIyBDT05GSUdfTUxYNF9FTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTFg0X0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfVEVIVVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTU2Niw3ICs2MDgsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKQEAgLTYzNiwxMCArNjgxLDEyIEBACiAjIENPTkZJR19TRVJJQUxfU0hfU0NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC03MDAsMTIgKzc0Nyw5IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKQEAgLTcyNSw4ICs3NjksMTAgQEAKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CkBAIC03NDcsMTAgKzc5MywxNCBAQAogIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldApAQCAtNzg2LDExICs4MzYsMTEgQEAKICMKICMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCkBAIC04MDIsNiArODUyLDggQEAKICMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC04MjIsNyArODc0LDcgQEAKICMKICMgQ09ORklHX01FRElBX0FUVEFDSCBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfVFVORVI9bQotIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlTRSBpcyBub3Qgc2V0CiBDT05GSUdfTUVESUFfVFVORVJfU0lNUExFPW0KIENPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPW0KIENPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PW0KQEAgLTgzMSw2ICs4ODMsNyBAQAogQ09ORklHX01FRElBX1RVTkVSX01UMjBYWD1tCiBDT05GSUdfTUVESUFfVFVORVJfWEMyMDI4PW0KIENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDA9bQorQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzPW0KIENPTkZJR19WSURFT19WNEwyPW0KIENPTkZJR19WSURFT19WNEwxPW0KIENPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQpAQCAtODUzLDYgKzkwNiw3IEBACiAjIENPTkZJR19WSURFT19DQUZFX0NDSUMgaXMgbm90IHNldAogIyBDT05GSUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAogQ09ORklHX0RWQl9DQVBUVVJFX0RSSVZFUlM9eQogCiAjCkBAIC04ODQsODkgKzkzOCw3IEBACiAjCiAjIFN1cHBvcnRlZCBEVkIgRnJvbnRlbmRzCiAjCi0KLSMKLSMgQ3VzdG9taXNlIERWQiBGcm9udGVuZHMKLSMKICMgQ09ORklHX0RWQl9GRV9DVVNUT01JU0UgaXMgbm90IHNldAotCi0jCi0jIERWQi1TIChzYXRlbGxpdGUpIGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX0NYMjQxMTAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NYMjQxMjMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX01UMzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TNUgxNDIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TVFYwMjg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TVEI2MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9TVFYwMjk5IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREE4MDgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREExMDA4NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVkVTMVg5MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFVORVJfSVREMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVERBODI2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfVFVBNjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQ1gyNDExNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfU0kyMVhYIGlzIG5vdCBzZXQKLQotIwotIyBEVkItVCAodGVycmVzdHJpYWwpIGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX1NQODg3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfU1A4ODdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DWDIyNzAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DWDIyNzAyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9EUlgzOTdYRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTDY0NzgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREExMDA0WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTlhUNjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTVQzNTIgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1pMMTAzNTMgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0RJQjMwMDBNQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfRElCMzAwME1DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9ESUI3MDAwTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfRElCNzAwMFAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDQ4IGlzIG5vdCBzZXQKLQotIwotIyBEVkItQyAoY2FibGUpIGZyb250ZW5kcwotIwotIyBDT05GSUdfRFZCX1ZFUzE4MjAgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1REQTEwMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9UREExMDAyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfU1RWMDI5NyBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRlcnJlc3RyaWFsL0NhYmxlIERUVikgZnJvbnRlbmRzCi0jCi0jIENPTkZJR19EVkJfTlhUMjAwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfT1I1MTIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfT1I1MTEzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQkNNMzUxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfTEdEVDMzMFggaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1M1SDE0MDkgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0FVODUyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfUzVIMTQxMSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCB0ZXJyZXN0cmlhbCBvbmx5IHR1bmVycy9QTEwKLSMKLSMgQ09ORklHX0RWQl9QTEwgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX1RVTkVSX0RJQjAwNzAgaXMgbm90IHNldAotCi0jCi0jIFNFQyBjb250cm9sIGRldmljZXMgZm9yIERWQi1TCi0jCi0jIENPTkZJR19EVkJfTE5CUDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9JU0w2NDA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9JU0w2NDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9MR1M4R0w1IGlzIG5vdCBzZXQKLQotIwotIyBUb29scyB0byBkZXZlbG9wIG5ldyBmcm9udGVuZHMKLSMKLSMgQ09ORklHX0RWQl9EVU1NWV9GRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVkJfQUY5MDEzIGlzIG5vdCBzZXQKIENPTkZJR19EQUI9eQogCiAjCkBAIC05NzksMTUgKzk1MSwxNiBAQAogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9bQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT1tCi1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD1tCisjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorQ09ORklHX0ZCX1NZU19GSUxMUkVDVD1tCitDT05GSUdfRkJfU1lTX0NPUFlBUkVBPW0KK0NPTkZJR19GQl9TWVNfSU1BR0VCTElUPW0KICMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9TWVNfRk9QUz1tCitDT05GSUdfRkJfREVGRVJSRURfSU89eQogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldApAQCAtMTAyNSw2ICs5OTgsOCBAQAogQ09ORklHX0ZCX1NIX01PQklMRV9MQ0RDPW0KICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC0xMDgxLDkgKzEwNTYsMTQgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC0xMDkxLDYgKzEwNzEsNyBAQAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtMTExNCw2ICsxMDk1LDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTE0OCwxMCArMTEzMCw3IEBACiBDT05GSUdfSFVHRVRMQkZTPXkKIENPTkZJR19IVUdFVExCX1BBR0U9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKICMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldApAQCAtMTE2MCw2ICsxMTM5LDcgQEAKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPXkKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTE3OSw3ICsxMTU5LDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTI1Miw2ICsxMjMxLDcgQEAKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CkBAIC0xMjYwLDE3ICsxMjQwLDI1IEBACiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfQk9PVE1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiAjIENPTkZJR180S1NUQUNLUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0g2NF9QUk9DX0FTSURTPXkKKyMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PUkVfQ09NUElMRV9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19TSDY0X1NSX1dBVENIPXkKICMgQ09ORklHX1BPT1JfTUFOU19TVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfU0hfQUxQSEFOVU1FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIX05PX0JTU19JTklUIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCkBAIC0xMjg2LDYgKzEyNzQsNyBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKQEAgLTEzNTYsNiArMTM0NSw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM2OSw2ICsxMzU5LDcgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CkBAIC0xMzc2LDcgKzEzNjcsNyBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2RyZWFtY2FzdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZwppbmRleCAyZDg2ZTA0Li41YzExMjM2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvZHJlYW1jYXN0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE2OjU0OjU1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE3OjUxOjQ4IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE3LDcgKzE3LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQEAgLTI1LDYgKzI1LDcgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00NCwxMCArNDUsMTkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC01NSw2ICs2NSw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC02NCwxMCArNzUsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03Niw2ICs4NSw3IEBACiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTE2LDExICsxMjYsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU1LDYgKzE2MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTIwMiwxMSArMjA4LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yNjMsOSArMjcwLDEyIEBACiAjCiBDT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfU0hfRE1BPXkKLUNPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTQKK0NPTkZJR19TSF9ETUFfSVJRX01VTFRJPXkKK0NPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTYKIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTD15CiBDT05GSUdfTlJfRE1BX0NIQU5ORUxTPTkKKyMgQ09ORklHX1BWUjJfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0cyX0RNQSBpcyBub3Qgc2V0CiAKICMKICMgQ29tcGFuaW9uIENoaXBzCkBAIC0zMTQsNiArMzI0LDggQEAKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIApAQCAtMzM1LDcgKzM0Nyw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM4Nyw2ICszOTgsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM5OSwxMyArNDExLDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00MzksMTIgKzQ1MSwxNiBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNDcwLDYgKzQ4Niw3IEBACiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNDg3LDggKzUwNCwxMCBAQAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldApAQCAtNTMyLDcgKzU1MSwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldApAQCAtNjI4LDYgKzY1MCw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtNzQ2LDYgKzc2OSw3IEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtODAyLDkgKzgyNiwxMyBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIwogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC04MTMsNiArODQxLDcgQEAKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTgyOCw2ICs4NTcsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTg3MSw2ICs5MDEsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTkyMCw3ICs5NTEsNiBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKQEAgLTEwMTIsNiArMTA0Miw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAzMyw3ICsxMDY0LDcgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL2Vkb3NrNzcwNV9kZWZjb25maWcKaW5kZXggNDYxYmZiMzUuLmY0YzM0YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3MDVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTY6NTU6MjkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTc6NTQ6MDIgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTYsMTMgKzE2LDE0IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTM1LDYgKzM2LDE1IEBACiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CkBAIC01MCw3ICs2MCw2IEBACiAjIENPTkZJR19QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKQEAgLTYwLDYgKzY5LDcgQEAKIENPTkZJR19TSE1FTT15CiAjIENPTkZJR19BSU8gaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtNzQsMTEgKzg0LDYgQEAKIENPTkZJR19CQVNFX1NNQUxMPTEKICMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAogIyBDT05GSUdfQkxPQ0sgaXMgbm90IHNldAotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xMTMsNiArMTE4LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTU3LDEyICsxNjMsMTMgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKIENPTkZJR19TSDc3MDVfQ0FDSEVfMzJLQj15Ci0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yNDMsNyArMjUwLDYgQEAKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVQgaXMgbm90IHNldApAQCAtMzYxLDYgKzM2Nyw3IEBACiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZWRvc2s3NzYwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCmluZGV4IDE0ZDRiMzUuLjc4MjVjMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lZG9zazc3NjBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTY6NTU6NDggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTc6NTQ6NTcgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsMTMgKzE3LDE0IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQzLDM0ICs0NCw0NSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19TVFJJUF9HRU5FUkFURUQ9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc5LDYgKzkxLDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTgsMTEgKzEzMSw2IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU3LDYgKzE2NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE5OCwxMSArMjA3LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yNDUsNyArMjU1LDcgQEAKICMKIENPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQotQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NAorQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9OAogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfU0hfRE1BQlJHIGlzIG5vdCBzZXQKIApAQCAtMzEwLDcgKzMyMCw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM2MCw2ICszNjksNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM3MiwxMyArMzgyLDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00MDIsNiArNDEyLDcgQEAKIENPTkZJR19NVERfREVCVUdfVkVSQk9TRT0wCiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ1NCw5ICs0NjUsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weGZmZmZmZmZmCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD00CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC00NzcsNiArNDg2LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTUwNiw2ICs1MjAsNyBAQAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTUxOCw4ICs1MzMsMTAgQEAKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNTM2LDcgKzU1MywxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKQEAgLTYwNyw2ICs2MjcsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtNjQzLDEyICs2NjQsOSBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX0RFQlVHX0NPUkU9eQpAQCAtNjgwLDYgKzY5OCw3IEBACiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCkBAIC03MzIsNiArNzUxLDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC03NTAsNiArNzcwLDcgQEAKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9USU1FUj15CiBDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0pBQ0s9eQogIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9QQ01fT1NTIGlzIG5vdCBzZXQKQEAgLTc4MSw2ICs4MDIsNyBAQAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtODA2LDYgKzgyOCw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTg1MSw2ICs4NzQsNyBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtODY4LDcgKzg5Miw2IEBACiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTk3NCw2ICs5OTcsNyBAQAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CkBAIC05ODksNyArMTAxMyw2IEBACiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTEwOTUsNiArMTExOCw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTExNSw3ICsxMTM5LDkgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvZXNwdF9kZWZjb25maWcKaW5kZXggODczZWM0Mi4uZWJiNGMzNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2VzcHRfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9lc3B0X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzcKLSMgVHVlIE1hciAxNyAxMzoyNTo1OCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxNzo1ODoxOCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNywxMyArMTcsMTQgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNzEsNiArNzIsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtODAsMTAgKzgyLDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtOTEsNiArOTEsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0yMTMsMTEgKzIxNCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMzE4LDcgKzMyMCw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM3Myw2ICszNzQsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4MCwxMiArMzgyLDEyIEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldApAQCAtNTQ4LDkgKzU1MCwxMSBAQAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTgzLDggKzU4NywxMCBAQAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogQ09ORklHX1NIX0VUSD15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTYwMSw3ICs2MDcsNiBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNjg1LDYgKzY5MCw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CkBAIC03NjQsNiArNzcwLDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC04MTcsNiArODI0LDcgQEAKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldApAQCAtODM0LDExICs4NDIsMTEgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTg4MCw3ICs4ODgsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTg5NCwxMiArOTAxLDE0IEBACiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtOTg3LDcgKzk5Niw2IEBACiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEwNzEsNyArMTA3OSw3IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC0xMTYzLDYgKzExNzEsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTExODQsNyArMTE5Myw3IEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9ocDZ4eF9kZWZjb25maWcKaW5kZXggODQ3YTI1MS4uODJiMTEzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL2hwNnh4X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvaHA2eHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTY6NTY6NTUgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6MDE6MDUgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CkBAIC0yNSw2ICsyNSw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMzksMTEgKzQwLDIwIEBACiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC01MSw2ICs2MSw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTYwLDEwICs3MSw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTcxLDYgKzgwLDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTA0LDExICsxMTQsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTE0Myw2ICsxNDgsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xODQsMTEgKzE5MCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjA4LDYgKzIxNSw3IEBACiAjCiAjIENPTkZJR19TSF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAogQ09ORklHX1NIX0hQNlhYPXkKKyMgQ09ORklHX1NIX1BPTEFSSVMgaXMgbm90IHNldAogCiAjCiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCkBAIC0yMjksNyArMjM3LDcgQEAKICMKIENPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQotQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NAorQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NgogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCiAjCkBAIC0zMDIsNiArMzEwLDcgQEAKIENPTkZJR19QTV9TTEVFUD15CiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKKyMgQ09ORklHX0hJQkVSTkFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19BUE1fRU1VTEFUSU9OPXkKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVCBpcyBub3Qgc2V0CkBAIC0zMjksOSArMzM4LDEzIEBACiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtMzc1LDYgKzM4OCw3IEBACiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC00NzEsNiArNDg1LDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTY0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAKICMKQEAgLTU1NCwxMiArNTY5LDEzIEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CiAjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotIyBDT05GSUdfQkFDS0xJR0hUX0NPUkdJIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CiBDT05GSUdfQkFDS0xJR0hUX0hQNjgwPXkKIAogIwpAQCAtNjMxLDYgKzY0Nyw3IEBACiAjCiBDT05GSUdfUlRDX0RSVl9TSD15CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC02NDcsNiArNjY0LDcgQEAKICMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTY5Miw2ICs3MTAsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc3MSw3ICs3OTAsNiBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKQEAgLTc5OSwxMCArODE3LDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAKQEAgLTg3MCw2ICs4OTAsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTg5MCw3ICs5MTEsNiBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZwppbmRleCBkM2JiYmIwLi5iNmZhNGE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2xhbmRpc2tfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTY6NTg6NDYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6MDI6NTQgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjUsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQyLDEwICs0MywxOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTUzLDYgKzYzLDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTYyLDEwICs3Myw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc0LDYgKzgzLDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTMsMTEgKzEyMyw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTIsNiArMTU3LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTkzLDExICsxOTksMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI5MCw2ICsyOTcsOCBAQAogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKICMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBPXkKQEAgLTMyOSw3ICszMzgsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC00MTAsNiArNDE4LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC00MjIsMTMgKzQzMSwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDY4LDE4ICs0NzcsMjMgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogCiAjCiAjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfWEZFUl9NT0RFPXkKIENPTkZJR19JREVfQVRBUEk9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CiBDT05GSUdfSURFX0dEPXkKQEAgLTU4NSw2ICs1OTksNyBAQAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZDT0UgaXMgbm90IHNldApAQCAtNjA3LDYgKzYyMiw3IEBACiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMX1BDTUNJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogQ09ORklHX01EPXkKIENPTkZJR19CTEtfREVWX01EPW0KQEAgLTYzMSw2ICs2NDcsNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTY0OCw4ICs2NjUsMTAgQEAKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKQEAgLTcwMCw2ICs3MTksNyBAQAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNzE4LDYgKzczOCw3IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC03MjUsNyArNzQ2LDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAKICMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKQEAgLTgxNCw2ICs4MzgsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAKQEAgLTg5OCw2ICs5MjMsNyBAQAogQ09ORklHX1Y0TF9VU0JfRFJJVkVSUz15CiAjIENPTkZJR19VU0JfVklERU9fQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hEUFZSIGlzIG5vdCBzZXQKIENPTkZJR19WSURFT19VU0JWSURFTz1tCiBDT05GSUdfVVNCX1ZJQ0FNPW0KIENPTkZJR19VU0JfSUJNQ0FNPW0KQEAgLTkxMSw2ICs5MzcsNyBAQAogIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1BXQz1tCiAjIENPTkZJR19VU0JfUFdDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX1VTQl9aUjM2NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVEtXRUJDQU0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1MyMjU1IGlzIG5vdCBzZXQKQEAgLTEwMjAsNiArMTA0Nyw3IEBACiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKQEAgLTEwNDEsMjIgKzEwNjksMjEgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDA9eQotQ09ORklHX1VTQl9TVE9SQUdFX0RQQ009eQorQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9bQorQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009bQorQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD1tCiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKLUNPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQotQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9bQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT1tCitDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9bQogIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKQEAgLTEwODEsNyArMTEwOCw3IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KQEAgLTExMDUsMTUgKzExMzIsMTkgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCiAjIENPTkZJR19VU0JfU0VSSUFMX09USTY4NTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9RVUFMQ09NTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1NQQ1A4WDUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NJRU1FTlNfTVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TWU1CT0wgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJQ09OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xMTMwLDcgKzExNjEsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTExNDMsNiArMTE3MywxMSBAQAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtMTE1MSw2ICsxMTg2LDcgQEAKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTExNzYsNiArMTIxMiw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTEyMjYsNiArMTI2Myw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTI1MCw3ICsxMjg4LDYgQEAKIENPTkZJR19FWFBPUlRGUz1tCiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPW0KLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KQEAgLTEzMzEsNyArMTM2OCw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKIENPTkZJR19TSF9TVEFOREFSRF9CSU9TPXkKQEAgLTE0MjQsNiArMTQ2MCw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ0NSw3ICsxNDgyLDcgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9sYm94cmUyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9sYm94cmUyX2RlZmNvbmZpZwppbmRleCBkNWM1YTFkLi45MmM1MTVjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvbGJveHJlMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL2xib3hyZTJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6MDI6NDYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6MDY6NTEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjUsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQyLDEwICs0MywxOSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTUzLDYgKzYzLDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTYyLDEwICs3Myw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc0LDYgKzgzLDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTMsMTEgKzEyMyw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTIsNiArMTU3LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTkzLDExICsxOTksMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI5MSw2ICsyOTgsOCBAQAogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKIENPTkZJR19QQ01DSUFfREVCVUc9eQogQ09ORklHX1BDTUNJQT15CkBAIC0zMjksNyArMzM4LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtNDA4LDYgKzQxNiw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtNDIwLDEzICs0MjksMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQ2NSwxMiArNDc0LDE2IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01MjYsNiArNTM5LDcgQEAKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKQEAgLTU0OSw2ICs1NjMsNyBAQAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTYyNCw2ICs2MzksNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTY0MSw4ICs2NTcsMTAgQEAKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKQEAgLTY5Nyw2ICs3MTUsNyBAQAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNzE1LDYgKzczNCw3IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC03MjIsNyArNzQyLDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiBDT05GSUdfTkVUX1BDTUNJQT15CiAjIENPTkZJR19QQ01DSUFfM0M1ODkgaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBXzNDNTc0IGlzIG5vdCBzZXQKQEAgLTgxMCw2ICs4MzMsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAKQEAgLTkyMSw5ICs5NDUsMTMgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtOTY4LDYgKzk5Niw3IEBACiAjCiAjIENPTkZJR19SVENfRFJWX1NIIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTk5MCw2ICsxMDE5LDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTAzNiw2ICsxMDY2LDcgQEAKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMTI0LDcgKzExNTUsNiBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CkBAIC0xMjE3LDYgKzEyNDcsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMzgsNyArMTI2OSw3IEBACiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbWFnaWNwYW5lbHIyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCmluZGV4IDEyNWQ4MDEuLjI2NTg2YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9tYWdpY3BhbmVscjJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6MDM6MzcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6MDc6MzkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsMTMgKzE3LDE0IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQzLDMzICs0NCw0NCBAQAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVD15CiAjIENPTkZJR19BVURJVFNZU0NBTEwgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19SRUxBWT15CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzcsNiArODksNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTYsMTEgKzEyOSw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE1NSw2ICsxNjMsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xOTYsMTEgKzIwNSwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMzA5LDcgKzMxOSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0zNTksNiArMzY4LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNzEsMTMgKzM4MSwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDAyLDYgKzQxMiw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CiBDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CkBAIC00NTIsOSArNDYzLDcgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MAorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNDc1LDYgKzQ4NCwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC00OTEsOSArNTA1LDEzIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01MDcsNiArNTI1LDcgQEAKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01MzgsOCArNTU3LDEwIEBACiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKIENPTkZJR19TTVNDOTExWD15CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTU1Niw3ICs1NzcsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CkBAIC03NzgsNiArODAyLDcgQEAKICMKIENPTkZJR19SVENfRFJWX1NIPXkKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTc5Nyw2ICs4MjIsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKQEAgLTg0OSw2ICs4NzUsNyBAQAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtODY4LDcgKzg5NSw2IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTk3MCw2ICs5OTYsNyBAQAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CkBAIC05ODQsNyArMTAxMSw2IEBACiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTEwMjUsNyArMTA1MSw4IEBACiBDT05GSUdfQVVESVRfR0VORVJJQz15CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbWljcm9kZXZfZGVmY29uZmlnCmluZGV4IDVhMWMwNDguLjc1MTc4MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9taWNyb2Rldl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL21pY3JvZGV2X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE3OjA2OjQ3IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE4OjExOjEzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE3LDEzICsxNywxNCBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00MiwxOCArNDMsMzIgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC02MywxMCArNzgsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03NCw2ICs4Nyw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEwNywxMSArMTIxLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE0Niw2ICsxNTUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xOTMsMTEgKzIwMywxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjM5LDcgKzI1MCw3IEBACiAjCiBDT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfU0hfRE1BPXkKLUNPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTQKK0NPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTYKICMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKIAogIwpAQCAtMzA0LDcgKzMxNSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVU5JWCBpcyBub3Qgc2V0CiBDT05GSUdfWEZSTT15CkBAIC0zNTgsNiArMzY4LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNzAsMTMgKzM4MSwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDA3LDkgKzQxOCwxMyBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiAKQEAgLTQ0Myw2ICs0NTgsNyBAQAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTQ1NSw4ICs0NzEsMTAgQEAKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNDczLDcgKzQ5MSwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKQEAgLTUyMCw2ICs1NDEsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtNjAxLDE1ICs2MjMsMjAgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC02MzIsNiArNjU5LDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtNjc4LDYgKzcwNiw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtNjk4LDcgKzcyNyw2IEBACiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTc3OCw3ICs4MDYsNiBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKQEAgLTgwNiwxMCArODMzLDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAKQEAgLTg3Nyw2ICs5MDYsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTg5Nyw3ICs5MjcsOSBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbWlnb3JfZGVmY29uZmlnCmluZGV4IDY3ODU3NjcuLmE4NzIwZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9taWdvcl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL21pZ29yX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzEKLSMgVGh1IEphbiAyMiAwOToxNjoxNiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODoxNDowMyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNiwxNSArMTYsMTcgQEAKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci0jIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00MiwxNCArNDQsMTkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29udHJvbCBHcm91cCBzdXBwb3J0Ci0jCiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKQEAgLTU3LDggKzY0LDEzIEBACiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC02OCwxMCArODAsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03OSw2ICs4OSw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyMCwxMSArMTMxLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEzNCw2ICsxNDAsNyBAQAogQ09ORklHX0NQVV9TSDRBPXkKIENPTkZJR19DUFVfU0g0QUxfRFNQPXkKIENPTkZJR19DUFVfU0hYMj15CitDT05GSUdfQVJDSF9TSE1PQklMRT15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc2MTkgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMyBpcyBub3Qgc2V0CkBAIC0xNjIsNiArMTY5LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyPXkKQEAgLTIwOSwxMSArMjE3LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yNDMsNiArMjUyLDcgQEAKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KICMKIENPTkZJR19TSF9UTVU9eQorIyBDT05GSUdfU0hfVElNRVJfQ01UIGlzIG5vdCBzZXQKIENPTkZJR19TSF9USU1FUl9JUlE9MTYKIENPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKICMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKQEAgLTMxOCw3ICszMjgsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zNzMsNiArMzgyLDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODAsMTIgKzM5MCwxMiBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKQEAgLTQ5NSw3ICs1MDUsNiBAQAogIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIwogIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CiAKICMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCkBAIC01MTQsMTAgKzUyMywxNyBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU2Myw5ICs1NzksMTEgQEAKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU3OCw4ICs1OTYsMTAgQEAKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNTk2LDcgKzYxNiw2IEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02NzksNiArNjk4LDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTcxNSwxMiArNzM1LDkgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldApAQCAtNzk3LDcgKzgxNCw3IEBACiAjCiAjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAogQ09ORklHX01FRElBX1RVTkVSPXkKLSMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlaRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JU0UgaXMgbm90IHNldAogQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT15CiBDT05GSUdfTUVESUFfVFVORVJfVERBODI5MD15CiBDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz15CkBAIC04MDYsNiArODIzLDcgQEAKIENPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9eQogQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD15CiBDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPXkKK0NPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMz15CiBDT05GSUdfVklERU9fVjRMMj15CiBDT05GSUdfVklERU9CVUZfR0VOPXkKIENPTkZJR19WSURFT0JVRl9ETUFfQ09OVElHPXkKQEAgLTg2Niw3ICs4ODQsNyBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIENPTkZJR19VU0JfR0FER0VUPXkKICMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldApAQCAtOTA1LDYgKzkyMyw3IEBACiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIwogIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC05NjQsNiArOTgzLDcgQEAKICMKIENPTkZJR19SVENfRFJWX1NIPXkKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiBDT05GSUdfVUlPPXkKICMgQ09ORklHX1VJT19QRFJWIGlzIG5vdCBzZXQKIENPTkZJR19VSU9fUERSVl9HRU5JUlE9eQpAQCAtMTA0NSw3ICsxMDY1LDYgQEAKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTA5MCw3ICsxMTA5LDcgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKQEAgLTExMTcsMTAgKzExMzYsMTIgQEAKIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTExODksNiArMTIxMCw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIwOSw3ICsxMjMxLDkgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcKaW5kZXggMzIwZGVmMi4uZGYyZDE3N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9wb2xhcmlzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvcG9sYXJpc19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM0Ci0jIFdlZCBGZWIgMTEgMTg6NDE6NTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6MTY6NDggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsMTMgKzE3LDE0IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTY4LDYgKzY5LDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTc4LDEwICs4MCw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTg5LDYgKzg5LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTYyLDYgKzE2Myw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTIwMywxMSArMjA1LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yNTEsNyArMjU0LDcgQEAKICMKIENPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQotQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NAorQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9NgogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCiAjCkBAIC0zMTQsNyArMzE3LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTM2Miw2ICszNjQsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM3NCw3ICszNzcsNiBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKQEAgLTQ4MSw3ICs0ODMsNiBAQAogIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIwogIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CiAKICMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCkBAIC01MTcsNiArNTE4LDcgQEAKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NDgsOCArNTUwLDEwIEBACiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKIENPTkZJR19TTVNDOTExWD15CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTU2Niw3ICs1NzAsNiBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzUwLDYgKzc1Myw3IEBACiAjCiBDT05GSUdfUlRDX0RSVl9TSD15CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC04MzcsNyArODQxLDYgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtOTA3LDYgKzkxMCw3IEBACiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKQEAgLTkyMiw3ICs5MjYsNiBAQAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC05NjMsNyArOTY2LDcgQEAKIENPTkZJR19BVURJVF9HRU5FUklDPXkKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yNzc4MG1wX2RlZmNvbmZpZwppbmRleCA2NWIwMWE5Li43ZGVmNGRmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBtcF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3I3NzgwbXBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6MTA6MTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6MjA6MTcgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjUsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKQEAgLTQ1LDE1ICs0NiwyNCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX0dST1VQX1NDSEVEPXkKIENPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKICMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0VSX1NDSEVEPXkKICMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTYxLDYgKzcxLDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTcxLDEwICs4Miw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAotQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC04Myw2ICs5Miw3IEBACiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTI0LDExICsxMzQsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNjQsNiArMTY5LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE3OSw4ICsxODUsMTEgQEAKIENPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCi1DT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfMjlCSVQgaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKK0NPTkZJR19QTUJfRU5BQkxFPXkKICMgQ09ORklHX1BNQiBpcyBub3Qgc2V0CitDT05GSUdfUE1CX0ZJWEVEPXkKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKQEAgLTIxMiwxMSArMjIxLDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0zMDksNiArMzE5LDggQEAKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKQEAgLTMzMCw3ICszNDIsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zOTIsNiArNDAzLDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zOTksMTIgKzQxMSwxMiBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKQEAgLTQxMiw2ICs0MjQsNyBAQAogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDUxLDEzICs0NjQsMjAgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBST01fOTNDWDY9eQogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19FRVBST01fOTNDWDY9eQogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUxMyw2ICs1MzMsNyBAQAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZDT0UgaXMgbm90IHNldApAQCAtNTM1LDYgKzU1Niw3IEBACiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC02MDksNiArNjMxLDcgQEAKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC02MjcsOCArNjUwLDEwIEBACiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CkBAIC02ODQsNiArNzA5LDcgQEAKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKQEAgLTcwMiw2ICs3MjgsNyBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtNzA5LDcgKzczNiwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldApAQCAtNzk2LDYgKzgyNiw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtODU3LDEyICs4ODgsOSBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC04ODUsNiArOTEzLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CkBAIC05MDUsMTAgKzkzNCwxNCBAQAogIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTUyNDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldApAQCAtOTQ5LDYgKzk4Miw3IEBACiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCkBAIC0xMDA3LDkgKzEwNDEsMTMgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtMTA3MSw2ICsxMTA5LDcgQEAKICMKIENPTkZJR19SVENfRFJWX1NIPXkKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTEwOTQsNiArMTEzMyw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTExNDIsNiArMTE4Miw3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz15CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTExNjYsNyArMTIwNyw2IEBACiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEyNjksNiArMTMwOSw3IEBACiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQpAQCAtMTI4OCw3ICsxMzI5LDcgQEAKICMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTEzMjUsMTAgKzEzNjYsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTEzOTcsNiArMTQ0MCw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQyMSwzICsxNDY1LDQgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODVycF9kZWZjb25maWcKaW5kZXggOGRlZmFhNS4uY2IxMzRmZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3I3Nzg1cnBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9yNzc4NXJwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE3OjE0OjQxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE4OjI0OjM1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE3LDcgKzE3LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NZU19TVVBQT1JUU19OVU1BPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfUENJPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMjYsNiArMjYsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19JT19UUkFQUEVEPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKQEAgLTQ4LDExICs0OSwyMSBAQAogQ09ORklHX0FVRElUPXkKIENPTkZJR19BVURJVFNZU0NBTEw9eQogQ09ORklHX0FVRElUX1RSRUU9eQorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1JDVT15CitDT05GSUdfUkNVX1RSQUNFPXkKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX1JDVV9UUkFDRT15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC02MCwyMSArNzEsMTkgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19TVFJJUF9HRU5FUkFURUQ9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTgzLDYgKzkyLDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMjYsMTIgKzEzNiw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi0jIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1U9eQotQ09ORklHX1JDVV9UUkFDRT15Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0U9eQogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE2OCw2ICsxNzIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTgzLDggKzE4OCwxMSBAQAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKIENPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAwMDAwMAogQ09ORklHX01FTU9SWV9TSVpFPTB4MDgwMDAwMDAKLUNPTkZJR18yOUJJVD15CisjIENPTkZJR18yOUJJVCBpcyBub3Qgc2V0CitDT05GSUdfMzJCSVQ9eQorQ09ORklHX1BNQl9FTkFCTEU9eQogIyBDT05GSUdfUE1CIGlzIG5vdCBzZXQKK0NPTkZJR19QTUJfRklYRUQ9eQogIyBDT05GSUdfWDJUTEIgaXMgbm90IHNldAogQ09ORklHX1ZTWVNDQUxMPXkKICMgQ09ORklHX05VTUEgaXMgbm90IHNldApAQCAtMjIyLDExICsyMzAsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTMzNCw2ICszNDMsOCBAQAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAogCkBAIC0zNTUsNyArMzY2LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtNDE3LDYgKzQyNyw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtNDI1LDEyICs0MzYsMTIgQEAKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CkBAIC00MzgsNiArNDQ5LDcgQEAKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQ3NywxMyArNDg5LDIwIEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci1DT05GSUdfRUVQUk9NXzkzQ1g2PXkKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk9NXzkzQ1g2PXkKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01MzksNiArNTU4LDcgQEAKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKQEAgLTU2MSw2ICs1ODEsNyBAQAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9QTVA9eQpAQCAtNjM1LDYgKzY1Niw3IEBACiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNjUzLDggKzY3NSwxMCBAQAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldApAQCAtNjg3LDYgKzcxMSw3IEBACiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CkBAIC03MDUsNiArNzMwLDcgQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTcxMiw3ICs3MzgsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKQEAgLTgwMCw2ICs4MjksNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTg2MiwxMiArODkyLDkgQEAKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCiAjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldApAQCAtOTE0LDYgKzk0MSw3IEBACiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldApAQCAtOTM0LDEwICs5NjIsMTQgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKQEAgLTk3OSw2ICsxMDExLDcgQEAKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNTUsNiArMTA4OCw3IEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA4OSw5ICsxMTIzLDEzIEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTExNTMsNiArMTE5MSw3IEBACiAjCiBDT05GSUdfUlRDX0RSVl9TSD15CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC0xMTc2LDYgKzEyMTUsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xMjI0LDYgKzEyNjQsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlOSVhfRlM9eQogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMjQ4LDcgKzEyODksNiBAQAogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMzU0LDYgKzEzOTQsNyBAQAogIyBDT05GSUdfTEtEVE0gaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKQEAgLTEzNzMsNyArMTQxNCw3IEBACiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xNDEwLDEwICsxNDUxLDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xNDgyLDYgKzE1MjUsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTE1MDQsNyArMTU0OCw3IEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfR0VORVJJQz15Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAxX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjAxX2RlZmNvbmZpZwppbmRleCA2NGVlNjllLi5hMDM3Yzc0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwMV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6MTk6MDQgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6Mjk6MDggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMjQsNiArMjQsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTM4LDExICszOSwyMCBAQAogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogIyBDT05GSUdfSUtDT05GSUdfUFJPQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX05BTUVTUEFDRVM9eQpAQCAtNTIsOCArNjIsMTMgQEAKIENPTkZJR19QSURfTlM9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNjMsMTYgKzc4LDE1IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKICMgQ09ORklHX0FJTyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKIENPTkZJR19TTE9CPXkKQEAgLTExMiwxMSArMTI2LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUyLDYgKzE2MSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE5MCwxMSArMjAwLDExIEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjE3LDcgKzIyNyw2IEBACiAjCiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9DTVQgaXMgbm90IHNldAogQ09ORklHX1NIX01UVTI9eQogQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT00MDAwMDAwMApAQCAtMjUxLDcgKzI2MCw2IEBACiBDT05GSUdfSFpfMTAwMD15CiBDT05GSUdfSFo9MTAwMAogIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfUFJFRU1QVF9OT05FPXkKQEAgLTMwOCw2ICszMTYsNyBAQAogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKQEAgLTM1OCw5ICszNjcsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTM4MSw2ICszODgsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtMzkyLDkgKzQwNCwxMyBAQAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU2Miw2ICs1NzgsNyBAQAogIwogQ09ORklHX1JUQ19EUlZfU0g9eQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNTc3LDYgKzU5NCw3IEBACiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfRklMRV9MT0NLSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldApAQCAtNjI2LDYgKzY0NCw3IEBACiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC02NzEsNyArNjkwLDcgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKQEAgLTcwMSw3ICs3MjAsNyBAQAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9yc2s3MjAzX2RlZmNvbmZpZwppbmRleCA4ZDdhNTk3Li45YWUyOGU4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvcnNrNzIwM19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3JzazcyMDNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6MjA6MzEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6MzA6MzQgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTgsMTIgKzE4LDE0IEBACiAjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQxLDExICs0MywyMCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogIyBDT05GSUdfSUtDT05GSUdfUFJPQyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX05BTUVTUEFDRVM9eQpAQCAtNTMsMzEgKzY0LDM1IEBACiBDT05GSUdfSVBDX05TPXkKIENPTkZJR19VU0VSX05TPXkKIENPTkZJR19QSURfTlM9eQorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19TVFJJUF9HRU5FUkFURUQ9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CkBAIC0xMTcsMTEgKzEzMiw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9OT09QPXkKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE1Nyw2ICsxNjcsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xOTUsMTEgKzIwNiwxMSBAQAogIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI3MSw3ICsyODIsNiBAQAogQ09ORklHX0haXzEwMDA9eQogQ09ORklHX0haPTEwMDAKICMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CkBAIC0zMTUsOCArMzI1LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi0jIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVU5JWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKQEAgLTM2NCw2ICszNzIsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM3MSwxOCArMzgwLDE5IEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00MDUsNiArNDE1LDcgQEAKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15CiBDT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRCBpcyBub3Qgc2V0CkBAIC00NTUsOSArNDY2LDcgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD00CisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC00NzgsNiArNDg3LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTQ5Miw5ICs1MDYsMTMgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUwOCw2ICs1MjYsNyBAQAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTUzOSw4ICs1NTgsMTAgQEAKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogQ09ORklHX1NNU0M5MTFYPXkKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNTU3LDcgKzU3OCwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC03NzcsNyArODAxLDkgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD15CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CkBAIC03OTEsMTEgKzgxNywxMSBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAogCkBAIC04MjMsNyArODQ5LDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC04MzQsNiArODU5LDEyIEBACiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKQEAgLTg1Miw2ICs4ODMsMTAgQEAKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUPXkKIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CisKKyMKKyMgaXB0YWJsZXMgdHJpZ2dlciBpcyB1bmRlciBOZXRmaWx0ZXIgY29uZmlnIChMRUQgdGFyZ2V0KQorIwogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKQEAgLTg5MSw2ICs5MjYsNyBAQAogIwogQ09ORklHX1JUQ19EUlZfU0g9eQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtOTA2LDYgKzk0Miw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldApAQCAtOTQ1LDYgKzk4Miw3IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC05NjIsNyArMTAwMCw2IEBACiBDT05GSUdfTE9DS0Q9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMTgsNiArMTA1NSw3IEBACiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15CiBDT05GSUdfREVCVUdfVk09eQorIyBDT05GSUdfREVCVUdfTk9NTVVfUkVHSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfV1JJVEVDT1VOVD15CiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTElTVD15CkBAIC0xMDMxLDYgKzEwNjksNyBAQAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19OT1BfVFJBQ0VSPXkKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CkBAIC0xMDQ4LDcgKzEwODcsNyBAQAogIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldApAQCAtMTA4Niw3ICsxMTI1LDggQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZDFfZGVmY29uZmlnCmluZGV4IGQ2NjgwZjQuLmMwZjc0MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkMV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmQxX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE3OjIzOjE1IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE4OjMzOjI1IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE3LDcgKzE3LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQEAgLTI1LDYgKzI1LDcgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfSU9fVFJBUFBFRD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCkBAIC00MywxMCArNDQsMTkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC01NCw2ICs2NCw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTYzLDEwICs3NCw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc1LDYgKzg0LDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTYsMTEgKzEyNiw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTUsNiArMTYwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTk2LDExICsyMDIsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTMwMCw2ICszMDcsOCBAQAogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUdfUENJPXkKICMgQ09ORklHX0hPVFBMVUdfUENJX0ZBS0UgaXMgbm90IHNldApAQCAtMzI0LDcgKzMzMyw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM3Niw2ICszODQsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4MywxMiArMzkyLDEyIEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldApAQCAtMzk2LDYgKzQwNSw3IEBACiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00MzQsMTIgKzQ0NCwxNyBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNDk1LDYgKzUxMCw3IEBACiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CkBAIC01MTcsNiArNTMzLDcgQEAKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTU5MSw2ICs2MDgsNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTYwOSw4ICs2MjcsMTAgQEAKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CkBAIC02NjUsNiArNjg1LDcgQEAKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKQEAgLTY4Myw2ICs3MDQsNyBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjkwLDcgKzcxMiwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC03ODAsNiArODA1LDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC03OTgsNyArODI0LDYgQEAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKICMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtODIyLDYgKzg0Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldApAQCAtOTE4LDYgKzk0NCw3IEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTk2LDYgKzEwMjMsOCBAQAogIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JT1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldApAQCAtMTEwMSw2ICsxMTMwLDcgQEAKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CkBAIC0xMTIyLDE4ICsxMTUyLDE3IEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKIENPTkZJR19VU0JfU1RPUkFHRT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CkBAIC0xMTY5LDcgKzExOTgsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTExNzksNiArMTIwNywxMSBAQAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtMTIzMCw2ICsxMjYzLDcgQEAKICMKICMgQ09ORklHX1JUQ19EUlZfU0ggaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtMTI0Nyw2ICsxMjgxLDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTI5Myw2ICsxMzI4LDcgQEAKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPXkKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTM4NSw3ICsxNDIxLDcgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKQEAgLTE0NzksNiArMTUxNSw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUwMCw3ICsxNTM3LDcgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvcnRzNzc1MXIyZHBsdXNfZGVmY29uZmlnCmluZGV4IDNmY2ExMGUuLjhmZWVmNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9ydHM3NzUxcjJkcGx1c19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3J0czc3NTFyMmRwbHVzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE3OjI2OjEwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE4OjM0OjEyIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE3LDcgKzE3LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQEAgLTI1LDYgKzI1LDcgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfSU9fVFJBUFBFRD15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCkBAIC00MywxMCArNDQsMTkgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC01NCw2ICs2NCw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTYzLDEwICs3NCw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc1LDYgKzg0LDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTYsMTEgKzEyNiw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTUsNiArMTYwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTk2LDExICsyMDIsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTMwMCw2ICszMDcsOCBAQAogIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUdfUENJPXkKICMgQ09ORklHX0hPVFBMVUdfUENJX0ZBS0UgaXMgbm90IHNldApAQCAtMzI0LDcgKzMzMyw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM3Niw2ICszODQsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM4MywxMiArMzkyLDEyIEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFJPUF9NT05JVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldApAQCAtMzk2LDYgKzQwNSw3IEBACiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00MzQsMTIgKzQ0NCwxNyBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNDk1LDYgKzUxMCw3IEBACiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CkBAIC01MTcsNiArNTMzLDcgQEAKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTU5MSw2ICs2MDgsNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTYwOSw4ICs2MjcsMTAgQEAKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAogIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CkBAIC02NjUsNiArNjg1LDcgQEAKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwMD15CiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKQEAgLTY4Myw2ICs3MDQsNyBAQAogIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAorIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIAogIwpAQCAtNjkwLDcgKzcxMiwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC03ODAsNiArODA1LDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC03OTgsNyArODI0LDYgQEAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKICMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtODIyLDYgKzg0Nyw3IEBACiAjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldApAQCAtOTE4LDYgKzk0NCw3IEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTk2LDYgKzEwMjMsOCBAQAogIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JT1ggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU1VMTBLMVggaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldApAQCAtMTEwMSw2ICsxMTMwLDcgQEAKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CkBAIC0xMTIyLDE4ICsxMTUyLDE3IEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKIENPTkZJR19VU0JfU1RPUkFHRT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CkBAIC0xMTY5LDcgKzExOTgsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTExNzksNiArMTIwNywxMSBAQAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldApAQCAtMTIzMCw2ICsxMjYzLDcgQEAKICMKICMgQ09ORklHX1JUQ19EUlZfU0ggaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtMTI0Nyw2ICsxMjgxLDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtMTI5Myw2ICsxMzI4LDcgQEAKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogQ09ORklHX01JTklYX0ZTPXkKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTM4NSw3ICsxNDIxLDcgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKQEAgLTE0NzksNiArMTUxNSw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUwMCw3ICsxNTM3LDcgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZGs3NzgwX2RlZmNvbmZpZwppbmRleCA1ZDZiMDY3Li43MzllMjI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3Nkazc3ODBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6MjY6NDAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6MzQ6NDMgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjUsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQ0LDExICs0NSwyMCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfUkVMQVk9eQpAQCAtNTYsMjEgKzY2LDE5IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtODAsNiArODgsNyBAQAogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTksMTEgKzEyOCw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTksNiArMTYzLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE3NCw4ICsxNzksMTEgQEAKIENPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCiBDT05GSUdfTUVNT1JZX1NUQVJUPTB4MDgwMDAwMDAKIENPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCi1DT05GSUdfMjlCSVQ9eQorIyBDT05GSUdfMjlCSVQgaXMgbm90IHNldAorQ09ORklHXzMyQklUPXkKK0NPTkZJR19QTUJfRU5BQkxFPXkKICMgQ09ORklHX1BNQiBpcyBub3Qgc2V0CitDT05GSUdfUE1CX0ZJWEVEPXkKIENPTkZJR19WU1lTQ0FMTD15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKQEAgLTIwNywxMSArMjE1LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yNTcsNiArMjY2LDcgQEAKICMKIENPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQorQ09ORklHX1NIX0RNQV9JUlFfTVVMVEk9eQogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9MTIKICMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKIApAQCAtMzA2LDYgKzMxNiw4IEBACiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfREVCVUc9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CiBDT05GSUdfUENDQVJEPXkKICMgQ09ORklHX1BDTUNJQV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUENNQ0lBPXkKQEAgLTM0OCw3ICszNjAsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC00MjcsNiArNDM4LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIRUQ9eQogCiAjCkBAIC00NzEsMTMgKzQ4MywxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNjMxLDYgKzY0Myw3IEBACiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01QVDJTQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CkBAIC02NTQsNiArNjY3LDcgQEAKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC03MzksNiArNzUzLDcgQEAKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC03NTYsOCArNzcxLDEwIEBACiAjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiBDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldApAQCAtNzgwLDcgKzc5NywxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogCiAjCiAjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCkBAIC04NDAsNyArODYwLDYgQEAKIENPTkZJR19NT1VTRV9QUzJfQUxQUz15CiBDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKQEAgLTg5OSw2ICs5MTgsNyBAQAogIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogCkBAIC0xMDIzLDYgKzEwNDMsNyBAQAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTExMjMsNiArMTE0NCw3IEBACiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldApAQCAtMTE0MSwxOCArMTE2MywxNyBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldApAQCAtMTE4OSw3ICsxMjEwLDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC0xMjAxLDYgKzEyMjEsMTEgQEAKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTEyNDMsNyArMTI2OCw5IEBACiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xMjk1LDYgKzEzMjIsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTUlOSVhfRlM9eQogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMzE4LDcgKzEzNDYsNiBAQAogQ09ORklHX0VYUE9SVEZTPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xNDI0LDYgKzE0NTEsNyBAQAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CkBAIC0xNDM5LDcgKzE0NjcsNiBAQAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xNTQ0LDYgKzE1NzEsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTE1NjUsNyArMTU5Myw3IEBACiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MjA2X2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnCmluZGV4IGU1YjU1YjYuLmQzMGUwYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTcyMDZfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6MzE6MjcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6Mzk6MzcgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTgsMTIgKzE4LDE0IEBACiAjIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQzLDE4ICs0NSwyOCBAQAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19BVURJVD15CiBDT05GSUdfQVVESVRTWVNDQUxMPXkKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9SQ1U9eQorQ09ORklHX1JDVV9UUkFDRT15CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0U9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19DR1JPVVBTPXkKIENPTkZJR19DR1JPVVBfREVCVUc9eQogQ09ORklHX0NHUk9VUF9OUz15CiAjIENPTkZJR19DR1JPVVBfRlJFRVpFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0dST1VQX0RFVklDRT15Ci0jIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQogQ09ORklHX1JFU09VUkNFX0NPVU5URVJTPXkKLUNPTkZJR19NTV9PV05FUj15CiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUj15CitDT05GSUdfTU1fT1dORVI9eQogIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX05BTUVTUEFDRVM9eQpAQCAtNjIsMzEgKzc0LDM1IEBACiBDT05GSUdfSVBDX05TPXkKIENPTkZJR19VU0VSX05TPXkKIENPTkZJR19QSURfTlM9eQorIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfU1RSSVBfR0VORVJBVEVEPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQpAQCAtMTI3LDEyICsxNDMsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfUkNVPXkKLUNPTkZJR19SQ1VfVFJBQ0U9eQotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFPXkKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNjgsNiArMTc4LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMjA2LDExICsyMTcsMTEgQEAKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yODAsNyArMjkxLDYgQEAKIENPTkZJR19IWl8xMDAwPXkKIENPTkZJR19IWj0xMDAwCiAjIENPTkZJR19TQ0hFRF9IUlRJQ0sgaXMgbm90IHNldAotQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldApAQCAtMzIyLDggKzMzMiw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zNzgsNiArMzg2LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODUsMTggKzM5NCwxOSBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDE5LDYgKzQyOSw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ2Niw5ICs0NzcsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDIwMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDEwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9NAorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwpAQCAtNDg5LDYgKzQ5OCwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC01MDYsOSArNTIwLDEzIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLUNPTkZJR19FRVBST01fOTNDWDY9eQogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKK0NPTkZJR19FRVBST01fOTNDWDY9eQogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUyMiw2ICs1NDAsNyBAQAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTUzNCw4ICs1NTMsMTAgQEAKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNTUyLDcgKzU3MywxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKQEAgLTY5Niw2ICs3MjAsNyBAQAogIwogQ09ORklHX1JUQ19EUlZfU0g9eQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNzEyLDYgKzczNyw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldApAQCAtNzUyLDYgKzc3OCw3IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtNzcxLDcgKzc5OCw2IEBACiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTgyNCw2ICs4NTAsNyBAQAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVk09eQorIyBDT05GSUdfREVCVUdfTk9NTVVfUkVHSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MSVNUPXkKQEAgLTgzNSw2ICs4NjIsNyBAQAogIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKQEAgLTg1Miw3ICs4ODAsNyBAQAogIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldApAQCAtOTU1LDYgKzk4Myw3IEBACiAjIENvbXByZXNzaW9uCiAjCiBDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19MWk89eQogCiAjCkBAIC05ODAsNyArMTAwOSw4IEBACiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKIENPTkZJR19MWk9fQ09NUFJFU1M9eQogQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MzQzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnCmluZGV4IDM5MDA1MjUuLmZiYjcyZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6MzM6NTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6NDI6MDAgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTYsMTQgKzE2LDE2IEBACiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci0jIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQ01UPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQxLDE0ICs0MywyMyBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQogIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1VTRVJfU0NIRUQ9eQogIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtNTYsNiArNjcsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNjUsMTAgKzc3LDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc2LDYgKzg2LDcgQEAKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTQsMTEgKzEyNSw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTEyNyw2ICsxMzMsNyBAQAogQ09ORklHX0NQVV9TSDQ9eQogQ09ORklHX0NQVV9TSDRBPXkKIENPTkZJR19DUFVfU0g0QUxfRFNQPXkKK0NPTkZJR19BUkNIX1NITU9CSUxFPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzIGlzIG5vdCBzZXQKQEAgLTE1NSw2ICsxNjIsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0Mz15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTk2LDExICsyMDQsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTIyNyw2ICsyMzYsNyBAQAogIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgogIwogQ09ORklHX1NIX1RNVT15CisjIENPTkZJR19TSF9USU1FUl9DTVQgaXMgbm90IHNldAogQ09ORklHX1NIX1RJTUVSX0lSUT0xNgogQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMwogIyBDT05GSUdfTk9fSFogaXMgbm90IHNldApAQCAtMzAyLDcgKzMxMiw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0zNTMsNiArMzYyLDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNjUsMTMgKzM3NSwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtMzk0LDYgKzQwNCw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ0MSw5ICs0NTIsNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0wCisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCkBAIC00NjQsNiArNDczLDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTUyMCw5ICs1MzQsMTEgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTUzOSw3ICs1NTUsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNjMzLDYgKzY1Miw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CkBAIC02NjksMTIgKzY4OSw5IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKQEAgLTcwNiw2ICs3MjMsNyBAQAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKIAogIwpAQCAtNzI3LDcgKzc0NSw3IEBACiAjCiAjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAogQ09ORklHX01FRElBX1RVTkVSPXkKLSMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlaRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JU0UgaXMgbm90IHNldAogQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRT15CiBDT05GSUdfTUVESUFfVFVORVJfVERBODI5MD15CiBDT05GSUdfTUVESUFfVFVORVJfVERBOTg4Nz15CkBAIC03MzYsNiArNzU0LDcgQEAKIENPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9eQogQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD15CiBDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPXkKK0NPTkZJR19NRURJQV9UVU5FUl9NQzQ0UzgwMz15CiBDT05GSUdfVklERU9fVjRMMj15CiBDT05GSUdfVklERU9fVjRMMT15CiBDT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKQEAgLTc1Nyw2ICs3NzYsNyBAQAogIyBDT05GSUdfVVNCX0dTUENBX0VUT01TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9GSU5FUElYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9NQVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HU1BDQV9NUjk3MzEwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfT1Y1MTkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dTUENBX09WNTM0IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcgaXMgbm90IHNldApAQCAtNzY5LDYgKzc4OSw4IEBACiAjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfU1BDQTU2MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0FfU1E5MDUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dTUENBX1NROTA1QyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfU1RLMDE0IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HU1BDQV9UNjEzIGlzIG5vdCBzZXQKQEAgLTc3Niw2ICs3OTgsNyBAQAogIyBDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR1NQQ0FfWkMzWFggaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fUFZSVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRFBWUiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19FTTI4WFggaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fVVNCVklTSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WSUNBTSBpcyBub3Qgc2V0CkBAIC04MzMsNiArODU2LDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05NDAsNyArOTY0LDkgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSVNQMTE2WF9IQ0Q9eQorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CkBAIC05NTQsMTEgKzk4MCwxMSBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiAjIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldApAQCAtOTg4LDcgKzEwMTQsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTk5OSwxMiArMTAyNCwxOCBAQAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogQ09ORklHX1VJTz15CiAjIENPTkZJR19VSU9fUERSViBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU9fUERSVl9HRU5JUlEgaXMgbm90IHNldApAQCAtMTAzMSw2ICsxMDYyLDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CkBAIC0xMDg0LDYgKzExMTYsNyBAQAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTExMDUsNyArMTEzOCw2IEBACiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTExNDYsNyArMTE3OCw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtMTI0MCw2ICsxMjcxLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMjY1LDMgKzEyOTcsNCBAQAogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc2MTlfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKaW5kZXggOTMyYjAyMy4uMTI1MzA0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzYxOV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzozNjo0NiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODo0NDo1MyAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xOCwxMiArMTgsMTQgQEAKICMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX1NZU19TVVBQT1JUU19DTVQ9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtMzYsMTUgKzM4LDI1IEBACiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiAjIENPTkZJR19VSUQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC01MywxNiArNjUsMTUgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiAjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAotQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CiBDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfQUlPPXkKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC05MywxMSArMTA0LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMyLDYgKzEzOCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE3MCwxMSArMTc3LDExIEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9XUklURUJBQ0sgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSD15CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjI4LDcgKzIzNSw2IEBACiAjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKIENPTkZJR19IWj0xMDAKICMgQ09ORklHX1NDSEVEX0hSVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFRfTk9ORT15CkBAIC0zMjksOSArMzM1LDcgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHhhMDAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAxMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU09MVVRJT05FTkdJTkUgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCkBAIC0zNTMsNiArMzU3LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTM2NCw5ICszNzMsMTMgQEAKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01MTQsMTUgKzUyNywyMCBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTUzNyw2ICs1NTUsNyBAQAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CkBAIC01NzUsNiArNTk0LDcgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTYxNCw3ICs2MzQsNiBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MDVfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcwNV9kZWZjb25maWcKaW5kZXggODU3NGQ2ZS4uMDMwOGFiZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcwNV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcwNV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzozNzo1MCAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODo0NTo1NiAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNywxMyArMTcsMTQgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDEsMTYgKzQyLDMwIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNTksMTAgKzc0LDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzAsNiArODMsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMDYsMTEgKzEyMCw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNDUsNiArMTU0LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTg2LDEyICsxOTYsMTMgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKIENPTkZJR19TSDc3MDVfQ0FDSEVfMzJLQj15Ci0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yOTIsNyArMzAzLDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzQ3LDYgKzM1Nyw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzU5LDEzICszNzAsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTM4NCw2ICszOTUsNyBAQAogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ1MSw2ICs0NjMsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNDY3LDkgKzQ4NCwxMyBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNDgzLDYgKzUwNCw3IEBACiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNDk1LDggKzUxNywxMCBAQAogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiBDT05GSUdfU1ROSUM9eQogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CkBAIC01MTMsNyArNTM3LDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogQ09ORklHX1BQUD15CiAjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKQEAgLTU5Myw2ICs2MjAsNyBAQAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTY4NCwxNSArNzEyLDIwIEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNzA5LDYgKzc0Miw3IEBACiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC03NjEsNiArNzk1LDcgQEAKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTc3OCw3ICs4MTMsNiBAQAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC04MTcsNyArODUxLDYgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC05MDgsNiArOTQxLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC05MzAsNyArOTY0LDggQEAKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MTJfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWcKaW5kZXggZTMxZWE4NC4uYThjMjRiNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcxMl9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzo0MDoxMiAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODo0ODoxOCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNiwxMyArMTYsMTQgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDEsMTAgKzQyLDE5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtNTIsMjEgKzYyLDE5IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CiBDT05GSUdfS0FMTFNZTVM9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfU1RSSVBfR0VORVJBVEVEPXkKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAogQ09ORklHX0hPVFBMVUc9eQogQ09ORklHX1BSSU5USz15CiAjIENPTkZJR19CVUcgaXMgbm90IHNldAogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzQsNiArODIsNyBAQAogIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTExMiwxMSArMTIxLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUxLDYgKzE1NSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE5MiwxMSArMTk3LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0zMDAsNyArMzA2LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTM2NCw2ICszNjksNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX05FVF9TQ0hFRD15CiAKICMKQEAgLTQxMSw3ICs0MTcsNiBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX0ZJQl9SVUxFUz15CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldApAQCAtNDE5LDYgKzQyNCw3IEBACiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQ0Myw2ICs0NDksNyBAQAogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01MTAsNiArNTE3LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTUyMyw5ICs1MzUsMTMgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTU3MSw2ICs1ODcsNyBAQAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9QTVA9eQpAQCAtNTc5LDYgKzU5Niw3IEBACiBDT05GSUdfUEFUQV9QTEFURk9STT15CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC02MTEsOCArNjI5LDEwIEBACiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiBDT05GSUdfU0hfRVRIPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNjI5LDcgKzY0OSwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKQEAgLTY3NSw2ICs2OTgsNyBAQAogIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009bQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTc0NCw5ICs3NjgsMTMgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQpAQCAtNzY0LDkgKzc5MiwxNCBAQAogIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC03OTEsNiArODI0LDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CkBAIC04NDQsNiArODc4LDcgQEAKIENPTkZJR19KRkZTMl9SVElNRT15CiAjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC04NjEsNyArODk2LDYgQEAKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtOTIzLDYgKzk1Nyw3IEBACiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKQEAgLTkzNyw3ICs5NzIsNiBAQAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC05NzQsMTAgKzEwMDgsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQVVUSEVOQz15CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xMDQ2LDYgKzEwODIsNyBAQAogIyBDb21wcmVzc2lvbgogIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMDY4LDcgKzExMDUsNyBAQAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWcKaW5kZXggYWQxYmFjZS4uNGI3OWMyNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzcyMV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxNzo0MzozMyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxODo1MTo0NCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xNiwxMyArMTYsMTQgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwpAQCAtNDEsMTQgKzQyLDIzIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19HUk9VUF9TQ0hFRD15CiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CiAjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNFUl9TQ0hFRD15CiAjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC01NiwyMSArNjYsMTkgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19TVFJJUF9HRU5FUkFURUQ9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKICMgQ09ORklHX0JVRyBpcyBub3Qgc2V0CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03OCw2ICs4Niw3IEBACiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTE2LDExICsxMjUsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTUsNiArMTU5LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTk2LDExICsyMDEsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTMwMyw3ICszMDksNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMzY3LDYgKzM3Miw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1NDSEVEPXkKIAogIwpAQCAtNDE0LDcgKzQyMCw2IEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfRklCX1JVTEVTPXkKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CkBAIC00MjIsNiArNDI3LDcgQEAKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDQ2LDYgKzQ1Miw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTUxMyw2ICs1MjAsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNTI3LDkgKzUzOSwxMyBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTcyLDYgKzU4OCw3IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC01ODAsNiArNTk3LDcgQEAKIENPTkZJR19QQVRBX1BMQVRGT1JNPXkKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU5NSw3ICs2MTMsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtODA1LDcgKzgyNiw5IEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTyBpcyBub3Qgc2V0CkBAIC04MjMsMTggKzg0NiwxNyBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldApAQCAtODcwLDcgKzg5Miw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtODgwLDYgKzkwMSwxMSBAQAogIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVXX0xFRFM9eQpAQCAtODk3LDkgKzkyMywxNCBAQAogIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC05MjQsNiArOTU1LDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CkBAIC05ODAsNiArMTAxMiw3IEBACiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTA4Miw2ICsxMTE1LDcgQEAKICMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CkBAIC0xMDk2LDcgKzExMzAsNiBAQAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xMTMzLDEwICsxMTY2LDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTIwNSw2ICsxMjQwLDcgQEAKICMgQ29tcHJlc3Npb24KICMKIENPTkZJR19DUllQVE9fREVGTEFURT15CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTIyNyw3ICsxMjYzLDcgQEAKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzIyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjJfZGVmY29uZmlnCmluZGV4IGFiYjE4OWEuLjgyYmRhYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3MjJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3MjJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6NDY6NTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6NTU6MTAgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTYsMTUgKzE2LDE3IEBACiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci0jIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00NCwxOSArNDYsMzMgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC02NiwxMCArODIsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03OCw2ICs5Miw3IEBACiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTE4LDExICsxMzMsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xMzIsNiArMTQyLDcgQEAKIENPTkZJR19DUFVfU0g0QT15CiBDT05GSUdfQ1BVX1NINEFMX0RTUD15CiBDT05GSUdfQ1BVX1NIWDI9eQorQ09ORklHX0FSQ0hfU0hNT0JJTEU9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldApAQCAtMTYwLDYgKzE3MSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMj15CkBAIC0yMTMsMTEgKzIyNSwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjQ2LDYgKzI1OSw3IEBACiAjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCiAjCiBDT05GSUdfU0hfVE1VPXkKKyMgQ09ORklHX1NIX1RJTUVSX0NNVCBpcyBub3Qgc2V0CiBDT05GSUdfU0hfVElNRVJfSVJRPTE2CiBDT05GSUdfU0hfUENMS19GUkVRPTMzMzMzMzMzCiBDT05GSUdfVElDS19PTkVTSE9UPXkKQEAgLTMyMSw3ICszMzUsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQpAQCAtMzczLDYgKzM4Niw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzg1LDEzICszOTksMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQyMiw5ICs0MzYsMTMgQEAKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTQ3MCw2ICs0ODgsNyBAQAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfQVRBPXkKICMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9QTVA9eQpAQCAtNDc4LDYgKzQ5Nyw3IEBACiBDT05GSUdfUEFUQV9QTEFURk9STT15CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC00OTAsOCArNTEwLDEwIEBACiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTUwOCw3ICs1MzAsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CkBAIC01ODksNiArNjE0LDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTY4MCw5ICs3MDYsMTMgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CkBAIC03MjUsNiArNzU1LDcgQEAKICMKIENPTkZJR19SVENfRFJWX1NIPXkKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTc0OCw2ICs3NzksNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC03OTEsNiArODIzLDcgQEAKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC04NDMsNyArODc2LDcgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CkBAIC05MzYsNiArOTY5LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC05NTYsNyArOTkwLDkgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzUwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnCmluZGV4IGFjODc0ZjYuLmNlZWY2ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3NTBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6NDk6MjIgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6NTc6MzEgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsMTMgKzE3LDE0IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQyLDExICs0MywyMCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC01NCw2ICs2NCw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTYzLDEwICs3NCw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc0LDYgKzgzLDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTEyLDExICsxMjIsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUxLDYgKzE1Niw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE5MiwxMSArMTk4LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yOTksNyArMzA2LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzU1LDYgKzM2MSw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzY3LDEzICszNzQsMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTM5Miw2ICszOTksNyBAQAogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ1OSw2ICs0NjcsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNDcyLDkgKzQ4NSwxMyBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogQ09ORklHX0lERT15CiAKQEAgLTUzOCw5ICs1NTUsMTEgQEAKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU1Myw4ICs1NzIsMTAgQEAKICMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1NUTklDPXkKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldApAQCAtNTcxLDcgKzU5MiwxMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIwogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKQEAgLTYyMiw2ICs2NDYsNyBAQAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtNzExLDE1ICs3MzYsMjAgQEAKICMKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC03MzUsNiArNzY1LDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtNzg5LDYgKzgyMCw3IEBACiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC04MDYsNyArODM4LDYgQEAKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODU5LDcgKzg5MCw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtOTUxLDYgKzk4MSw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtOTczLDcgKzEwMDQsNyBAQAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTFfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzc1MV9kZWZjb25maWcKaW5kZXggZjU0YWUwNS4uNjdmYzI2YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3NTFfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3NTFfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6NTE6NDcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTg6NTk6NTkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsMTMgKzE3LDE0IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQyLDE4ICs0MywzMiBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15CiAjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTYzLDEwICs3OCw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTc0LDYgKzg3LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTEyLDExICsxMjYsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUxLDYgKzE2MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE5MiwxMSArMjAyLDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0zMDEsNyArMzEyLDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzc2LDYgKzM4Niw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzg4LDEzICszOTksMTMgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQxMyw2ICs0MjQsNyBAQAogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ4MCw2ICs0OTIsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNDk2LDkgKzUxMywxMyBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTEyLDYgKzUzMyw3IEBACiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTI0LDggKzU0NiwxMCBAQAogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTU0Miw3ICs1NjYsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CkBAIC01ODUsNiArNjEyLDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTY3MywxNSArNzAxLDIwIEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNjk5LDYgKzczMiw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTc1Myw2ICs3ODcsNyBAQAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtODAyLDcgKzgzNyw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtODk0LDYgKzkyOCw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtOTE2LDcgKzk1MSw4IEBACiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3NzgwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTc3ODBfZGVmY29uZmlnCmluZGV4IDc1MDQ5NzguLmViY2UyM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZTc3ODBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTc3ODBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6NTM6NTAgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTk6MDI6MDUgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjUsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQxLDYgKzQyLDE1IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtNTIsNiArNjIsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTYwLDEwICs3MSw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzIsNiArODEsNyBAQAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEwOCwxMSArMTE4LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTQ4LDYgKzE1Myw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MD15CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xOTIsMTEgKzE5OCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjgzLDYgKzI5MCw4IEBACiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwpAQCAtMjk2LDcgKzMwNSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM1MSw2ICszNTksNyBAQAogIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFggaXMgbm90IHNldAogIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zNjIsMTMgKzM3MSwxMyBAQAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKIAogIwpAQCAtMzg2LDYgKzM5NSw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDYwLDYgKzQ3MCwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC00NzksMTAgKzQ5NCwxNCBAQAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUzNiw2ICs1NTUsNyBAQAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NUFQyU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZDT0UgaXMgbm90IHNldApAQCAtNTU3LDYgKzU3Nyw3IEBACiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC01NjUsNiArNTg2LDcgQEAKIENPTkZJR19BVEFfU0ZGPXkKICMgQ09ORklHX1NBVEFfU1ZXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAogIyBDT05GSUdfU0FUQV9OViBpcyBub3Qgc2V0CiAjIENPTkZJR19QRENfQURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQVRBX1FTVE9SIGlzIG5vdCBzZXQKQEAgLTYxOSw2ICs2NDEsNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldApAQCAtNjU0LDggKzY3NywxMCBAQAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKQEAgLTY5Myw3ICs3MTgsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtODg1LDYgKzkxMyw3IEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtOTc4LDYgKzEwMDcsNyBAQAogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CkBAIC05OTYsMTggKzEwMjYsMTcgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTEwNDMsNyArMTA3Miw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtMTA1NSw2ICsxMDgzLDExIEBACiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTEwNjIsNiArMTA5NSw3IEBACiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC0xMTIwLDYgKzExNTQsNyBAQAogIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC0xMjE0LDcgKzEyNDksNyBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtMTMwMSw2ICsxMzM2LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMzIzLDcgKzEzNTksNyBAQAogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaDAzX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDAzX2RlZmNvbmZpZwppbmRleCAwNGJkZTFlLi42ZmNkYjA5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2gwM19kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoMDNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTc6NTY6NDYgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTk6MDQ6NTkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjUsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQ0LDE4ICs0NSwzMiBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORT15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC02NSwxMCArODAsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03Nyw2ICs5MCw3IEBACiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTE5LDExICsxMzMsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU4LDYgKzE2Nyw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE5OSwxMSArMjA5LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yOTQsNiArMzA1LDggQEAKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHX1BDST1tCiAjIENPTkZJR19IT1RQTFVHX1BDSV9GQUtFIGlzIG5vdCBzZXQKQEAgLTMxOCw3ICszMzEsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zNzUsNiArMzg3LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODIsMTggKzM5NSwxOSBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKICMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DQU4gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDMwLDEyICs0NDQsMTYgQEAKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15CiAjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CiAjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKIENPTkZJR19JREU9eQogCkBAIC01NDEsNiArNTU5LDcgQEAKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKQEAgLTU2Miw2ICs1ODEsNyBAQAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKQEAgLTU3Nyw2ICs1OTcsNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU5NCw4ICs2MTUsMTAgQEAKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKQEAgLTY0Niw2ICs2NjksNyBAQAogIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKICMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWXzEwMDAwPXkKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldApAQCAtNjY0LDYgKzY4OCw3IEBACiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19RTEdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NGQyBpcyBub3Qgc2V0CisjIENPTkZJR19CRTJORVQgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCkBAIC02NzEsNyArNjk2LDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0CkBAIC03NTQsNiArNzgyLDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC04NzIsOSArOTAxLDEzIEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKQEAgLTg4Myw2ICs5MTYsNyBAQAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtOTA4LDYgKzk0Miw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTk1Nyw2ICs5OTIsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTk4MSw3ICsxMDE3LDYgQEAKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTA4MSw3ICsxMTE2LDcgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUz15CkBAIC0xMTEwLDEwICsxMTQ1LDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xMTgyLDYgKzEyMTksNyBAQAogIyBDb21wcmVzc2lvbgogIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMjA1LDcgKzEyNDMsOCBAQAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzcxMHZvaXBnd19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwppbmRleCAxYjg2OWY0Li4xYWIzN2MwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE4OjAwOjMxIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE5OjA5OjAxIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE3LDEzICsxNywxNCBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00MSwxNCArNDIsMjMgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX0dST1VQX1NDSEVEPXkKIENPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKICMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0VSX1NDSEVEPXkKICMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTU2LDYgKzY2LDcgQEAKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKICMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTY1LDEwICs3Niw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogIyBDT05GSUdfRlVURVggaXMgbm90IHNldAotQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03Niw2ICs4NSw3IEBACiAjIENPTkZJR19TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTE0LDExICsxMjQsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNTMsNiArMTU4LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTk0LDExICsyMDAsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTI5OSw3ICszMDYsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zNjksNiArMzc1LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIRUQ9eQogCiAjCkBAIC00MTgsMTMgKzQyNSwxMyBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDQ3LDYgKzQ1NCw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNTE0LDYgKzUyMiwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC01MjcsOSArNTQwLDEzIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01NDMsNiArNTYwLDcgQEAKICMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01NTYsOCArNTc0LDEwIEBACiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9FVEggaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CkBAIC01NzQsNyArNTk0LDEwIEBACiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCiAjIENPTkZJR19XQU4gaXMgbm90IHNldAogIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMSVAgaXMgbm90IHNldApAQCAtNjQwLDYgKzY2Myw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CkBAIC03MTgsMTUgKzc0MiwyMCBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIwogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTc0Miw2ICs3NzEsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKQEAgLTc5NSw2ICs4MjUsNyBAQAogQ09ORklHX0pGRlMyX1JUSU1FPXkKICMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtODQ0LDcgKzg3NSw3IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC05MzYsNiArOTY3LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC05NjEsMyArOTkzLDQgQEAKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzYzcmRwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCmluZGV4IGJhMzNhY2EuLmM3OWJiODQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3NjNyZHBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTg6MDI6MjggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTk6MTA6NTcgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsMTMgKzE3LDE0IEBACiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQxLDE1ICs0MiwyNCBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX0dST1VQX1NDSEVEPXkKIENPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKICMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19VU0VSX1NDSEVEPXkKICMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKQEAgLTU4LDkgKzY4LDExIEBACiBDT05GSUdfSVBDX05TPXkKICMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAogIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC03MCwxMCArODIsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC04MSw2ICs5MSw3IEBACiBDT05GSUdfU0hNRU09eQogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyMiwxMSArMTMzLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE2Miw2ICsxNjgsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0yMDcsMTEgKzIxNCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjMxLDYgKzIzOSw3IEBACiAjIEJvYXJkIHN1cHBvcnQKICMKIENPTkZJR19TSF9TSDc3NjNSRFA9eQorIyBDT05GSUdfU0hfRVNQVCBpcyBub3Qgc2V0CiAKICMKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KQEAgLTMxMSw4ICszMjAsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQpAQCAtMzY3LDYgKzM3NCw3IEBACiAjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKIApAQCAtMzc0LDEyICszODIsMTIgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EUk9QX01PTklUT1IgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CkBAIC0zODcsNiArMzk1LDcgQEAKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQwOSw2ICs0MTgsNyBAQAogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC00NjIsOSArNDcyLDcgQEAKICMKIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ODAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0wCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ4NSw2ICs0OTMsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNTQ0LDkgKzU1NywxMSBAQAogIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTc5LDggKzU5NCwxMCBAQAogIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAogQ09ORklHX1NIX0VUSD15CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTU5Nyw3ICs2MTQsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNjc3LDYgKzY5Nyw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CkBAIC03NTYsNiArNzc3LDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC04MDcsNyArODI5LDkgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKQEAgLTgyNSwxOCArODQ5LDE3IEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKIENPTkZJR19VU0JfU1RPUkFHRT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CkBAIC04NzIsNyArODk1LDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC04ODIsNiArOTA0LDExIEBACiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogQ09ORklHX01NQz15CiAjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldApAQCAtOTAzLDYgKzkzMCw3IEBACiAjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC05MjYsNiArOTU0LDcgQEAKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtOTc0LDYgKzEwMDMsNyBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtOTkxLDcgKzEwMjEsNiBAQAogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xMDc1LDcgKzExMDQsNyBAQAogIwogIyBUcmFjZXJzCiAjCi0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtMTE2Nyw2ICsxMTk2LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMTg3LDcgKzEyMTcsNyBAQAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyXzMyYml0X2RlZmNvbmZpZwppbmRleCA1NGUxZGVlLi5hNmNmNDUwNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NoNzc4NWxjcl8zMmJpdF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM0Ci0jIEZyaSBGZWIgMjAgMTg6MjU6MjkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTk6MTI6MTggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0yNiw2ICsyNiw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIApAQCAtNzEsNiArNzIsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTgxLDEwICs4Myw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTkzLDYgKzkzLDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xNjksNiArMTcwLDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NT15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTIyMCwxMSArMjIyLDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0zMTQsNiArMzE3LDcgQEAKIENPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1RQTFVHX1BDSSBpcyBub3Qgc2V0CiAKQEAgLTMzNSw3ICszMzksNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zOTUsNiArMzk4LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC00MDcsNyArNDExLDYgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0CkBAIC01MTIsNyArNTE1LDYgQEAKICMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKICMKICMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAogCiAjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwpAQCAtNTc4LDYgKzU4MCw3IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC02NTIsNiArNjU1LDcgQEAKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC02ODEsNiArNjg1LDcgQEAKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKQEAgLTY5MCw3ICs2OTUsNiBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzg5LDYgKzc5Myw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtODU0LDcgKzg1OSw2IEBACiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldApAQCAtOTY0LDYgKzk2OCw3IEBACiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA3OSwxMSArMTA4NCwxMSBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldApAQCAtMTEyNSw3ICsxMTMwLDYgQEAKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CkBAIC0xMTQxLDYgKzExNDUsNyBAQAogIwogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC0xMjAyLDYgKzEyMDcsNyBAQAogIwogIyBDT05GSUdfUlRDX0RSVl9TSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC0xMjk5LDcgKzEzMDUsNiBAQAogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC0xNDA0LDYgKzE0MDksNyBAQAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CiBDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CiBDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CkBAIC0xNDE5LDcgKzE0MjUsNiBAQAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAogIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xNDU1LDEwICsxNDYwLDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xNTI3LDYgKzE1MzQsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTE1NDcsNyArMTU1NSw3IEBACiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc2g3Nzg1bGNyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfZGVmY29uZmlnCmluZGV4IDFkNjM2MjguLjhhNDJiYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3ODVsY3JfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTg6MDU6MTggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTk6MTU6NTggMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CkBAIC0yNiw2ICsyNiw3IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19BUkNIX0hBU19ERUZBVUxUX0lETEU9eQogQ09ORklHX0lPX1RSQVBQRUQ9eQogQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIApAQCAtNDYsMTUgKzQ3LDI0IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfR1JPVVBfU0NIRUQ9eQogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQogIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAogQ09ORklHX1VTRVJfU0NIRUQ9eQogIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApAQCAtNjIsNiArNzIsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKQEAgLTcyLDEwICs4Myw4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTg0LDYgKzkzLDcgQEAKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMjQsMTEgKzEzNCw2IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTY1LDYgKzE3MCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODU9eQorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xODAsOCArMTg2LDExIEBACiBDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAogQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCiBDT05GSUdfTUVNT1JZX1NJWkU9MHgwODAwMDAwMAotQ09ORklHXzI5QklUPXkKKyMgQ09ORklHXzI5QklUIGlzIG5vdCBzZXQKK0NPTkZJR18zMkJJVD15CitDT05GSUdfUE1CX0VOQUJMRT15CiAjIENPTkZJR19QTUIgaXMgbm90IHNldAorQ09ORklHX1BNQl9GSVhFRD15CiAjIENPTkZJR19YMlRMQiBpcyBub3Qgc2V0CiBDT05GSUdfVlNZU0NBTEw9eQogIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CkBAIC0yMTMsMTEgKzIyMiwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjM5LDcgKzI0OSw2IEBACiAjCiAjIENPTkZJR19TSF9ISUdITEFOREVSIGlzIG5vdCBzZXQKIENPTkZJR19TSF9TSDc3ODVMQ1I9eQotQ09ORklHX1NIX1NINzc4NUxDUl8yOUJJVF9QSFlTTUFQUz15CiAKICMKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KQEAgLTMwNyw2ICszMTYsOCBAQAogIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAogQ09ORklHX1BDSV9MRUdBQ1k9eQogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKIApAQCAtMzI4LDcgKzMzOSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM4OCw2ICszOTgsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTQwMCw3ICs0MTEsNiBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKQEAgLTQwOCw2ICs0MTgsNyBAQAogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDMwLDYgKzQ0MSw3IEBACiAjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKQEAgLTQ3Nyw5ICs0ODksNyBAQAogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAwMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0wCisjIENPTkZJR19NVERfUEhZU01BUF9DT01QQVQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKQEAgLTUwMiw2ICs1MTIsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNTY1LDYgKzU4MCw3IEBACiAjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC02MzksNiArNjU1LDcgQEAKICMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC02NjgsNiArNjg1LDcgQEAKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxQyBpcyBub3Qgc2V0CiAjIENPTkZJR19KTUUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKQEAgLTY3Nyw3ICs2OTUsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNzcyLDYgKzc5Myw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldApAQCAtODM0LDEyICs4NTYsOSBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC04NzEsNiArODkwLDcgQEAKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAKICMKQEAgLTk0OCw2ICs5NjgsNyBAQAogIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNDEsNiArMTA2Miw3IEBACiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KQEAgLTEwNjIsMTggKzEwODQsMTcgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTExMDksNyArMTEzMCw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtMTEyMSw2ICsxMTQxLDExIEBACiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC0xMTgyLDYgKzEyMDcsNyBAQAogIwogIyBDT05GSUdfUlRDX0RSVl9TSCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCkBAIC0xMjA0LDYgKzEyMzAsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xMjUzLDYgKzEyODAsNyBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19NSU5JWF9GUz15CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEyNzcsNyArMTMwNSw2IEBACiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKIENPTkZJR19TVU5SUENfR1NTPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiBDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEzODIsNiArMTQwOSw3IEBACiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKIENPTkZJR19IQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JEPXkKQEAgLTEzOTcsNyArMTQyNSw2IEBACiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKQEAgLTE0MzMsMTAgKzE0NjAsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTE1MDUsNiArMTUzNCw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtMTUyNSw3ICsxNTU1LDcgQEAKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnCmluZGV4IDhiYTEwZTEuLmQ2OTVlOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NobWluX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE4OjA5OjAwIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE5OjE5OjAzIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE2LDEzICsxNiwxNCBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC0zOSwxNSArNDAsMjUgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfVUlEMTYgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNTYsMTAgKzY3LDggQEAKIENPTkZJR19QUklOVEs9eQogIyBDT05GSUdfQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKQEAgLTY3LDYgKzc2LDcgQEAKICMgQ09ORklHX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiBDT05GSUdfU0xPQj15CkBAIC05NywxMSArMTA3LDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM2LDYgKzE0MSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE3NywxMSArMTgzLDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yNjcsNyArMjc0LDYgQEAKICMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKICMKIENPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAKQEAgLTI4MSw3ICsyODcsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfUEFDS0VUIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKQEAgLTMzNSw2ICszNDAsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM0NywxMyArMzUzLDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00MTksOSArNDI1LDcgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHhhMDAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDgwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTEKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKQEAgLTQ0Miw2ICs0NDYsMTEgQEAKICMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKIAogIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNDU2LDkgKzQ2NSwxMyBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNDcyLDYgKzQ4NSw3IEBACiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNDg0LDggKzQ5OCwxMCBAQAogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTUwMiw3ICs1MTgsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CkBAIC01NDksNiArNTY4LDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTYxOCwxNSArNjM4LDIwIEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNjQxLDYgKzY2Niw3IEBACiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKQEAgLTY4Myw2ICs3MDksNyBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTcwMiw3ICs3MjksNiBAQAogQ09ORklHX0xPQ0tEX1Y0PXkKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC03NDAsNyArNzY2LDYgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQpAQCAtODMxLDYgKzg1Niw3IEBACiAjIENvbXByZXNzaW9uCiAjCiAjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWkxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKIAogIwpAQCAtODU1LDMgKzg4MSw0IEBACiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NoeDNfZGVmY29uZmlnCmluZGV4IGVkOTBhN2UuLmUzNjUxZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zaHgzX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2h4M19kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgKLSMgRnJpIEphbiAgOSAxODoxMDo1NyAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjkKKyMgVGh1IEFwciAgMiAxOToyMDo1NCAyMDA5CiAjCiBDT05GSUdfU1VQRVJIPXkKIENPTkZJR19TVVBFUkgzMj15CkBAIC0xOSw3ICsxOSw3IEBACiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CUk9BRENBU1Q9eQogQ09ORklHX0dFTkVSSUNfTE9DS0JSRUFLPXkKICMgQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfU01QPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKQEAgLTI3LDYgKzI3LDcgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00NywyNCArNDgsMzUgQEAKIENPTkZJR19BVURJVD15CiBDT05GSUdfQVVESVRTWVNDQUxMPXkKIENPTkZJR19BVURJVF9UUkVFPXkKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCisjIENPTkZJR19DTEFTU0lDX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9SQ1U9eQorQ09ORklHX1JDVV9UUkFDRT15CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0U9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorQ09ORklHX1JUX0dST1VQX1NDSEVEPXkKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0dST1VQUz15CiAjIENPTkZJR19DR1JPVVBfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0NHUk9VUF9OUz15CiBDT05GSUdfQ0dST1VQX0ZSRUVaRVI9eQogQ09ORklHX0NHUk9VUF9ERVZJQ0U9eQogIyBDT05GSUdfQ1BVU0VUUyBpcyBub3Qgc2V0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX1JUX0dST1VQX1NDSEVEPXkKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQogQ09ORklHX1JFU09VUkNFX0NPVU5URVJTPXkKLUNPTkZJR19NTV9PV05FUj15CiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUj15CisjIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAgaXMgbm90IHNldAorQ09ORklHX01NX09XTkVSPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19SRUxBWT15CkBAIC03MywyNCArODUsMjMgQEAKIENPTkZJR19JUENfTlM9eQogQ09ORklHX1VTRVJfTlM9eQogQ09ORklHX1BJRF9OUz15CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQogQ09ORklHX0tBTExTWU1TPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQotQ09ORklHX0tBTExTWU1TX1NUUklQX0dFTkVSQVRFRD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKIENPTkZJR19IT1RQTFVHPXkKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtOTgsNiArMTA5LDcgQEAKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogQ09ORklHX1NMT0I9eQpAQCAtMTQyLDEyICsxNTQsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLSMgQ09ORklHX0NMQVNTSUNfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVT15Ci1DT05GSUdfUkNVX1RSQUNFPXkKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLUNPTkZJR19QUkVFTVBUX1JDVV9UUkFDRT15CiBDT05GSUdfRlJFRVpFUj15CiAKICMKQEAgLTE4NCw2ICsxOTAsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzPXkKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMjQwLDExICsyNDcsMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTM2MSw4ICszNjksNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VTklYIGlzIG5vdCBzZXQKIENPTkZJR19YRlJNPXkKQEAgLTQzNCw2ICs0NDAsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTQ0Miw2ICs0NDksNyBAQAogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RST1BfTU9OSVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiBDT05GSUdfQ0FOPW0KIENPTkZJR19DQU5fUkFXPW0KQEAgLTQ1NSw4ICs0NjMsOCBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAogIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CiAKQEAgLTQ5MCwxMCArNDk4LDE4IEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIApAQCAtNTM5LDYgKzU1NSw3IEBACiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKIENPTkZJR19BVEE9eQogIyBDT05GSUdfQVRBX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIENPTkZJR19TQVRBX1BNUD15CkBAIC01NDcsNiArNTY0LDcgQEAKIENPTkZJR19QQVRBX1BMQVRGT1JNPXkKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTU2MCw4ICs1NzgsMTAgQEAKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQogIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTU3OCw3ICs1OTgsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNjcwLDEyICs2OTMsOSBAQAogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC02OTUsNyArNzE1LDYgQEAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKICMKLSMgQ09ORklHX0VFUFJPTV9BVDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAogIyBDT05GSUdfVzEgaXMgbm90IHNldApAQCAtNzMyLDYgKzc1MSw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCkBAIC03ODgsNyArODA4LDkgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRD1tCiAjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CkBAIC04MDMsMTEgKzgyNSwxMSBAQAogIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogCiAjCi0jIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvCiAjCiAjIENPTkZJR19VU0JfU1RPUkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldApAQCAtODM3LDcgKzg1OSw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtODYwLDEwICs4ODEsMTIgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTI9eQogQ09ORklHX1VTQl9NNjY1OTI9eQogIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKQEAgLTg3Niw2ICs4OTksMTEgQEAKICMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKQEAgLTk0Miw2ICs5NzAsNyBAQAogIwogQ09ORklHX1JUQ19EUlZfU0g9eQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKIENPTkZJR19VSU89bQogIyBDT05GSUdfVUlPX1BEUlYgaXMgbm90IHNldAogIyBDT05GSUdfVUlPX1BEUlZfR0VOSVJRIGlzIG5vdCBzZXQKQEAgLTk2OSw2ICs5OTgsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xMDEyLDYgKzEwNDIsNyBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwODYsNiArMTExNyw3IEBACiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKIENPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKQEAgLTExMDUsNyArMTEzNyw3IEBACiAjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CkBAIC0xMjA1LDYgKzEyMzcsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyMjYsNyArMTI1OSw3IEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfQVVESVRfR0VORVJJQz15Ci1DT05GSUdfUExJU1Q9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc25hcGdlYXJfZGVmY29uZmlnCmluZGV4IDk4Mzc3ZTUuLjY5NjBmNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zbmFwZ2Vhcl9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NuYXBnZWFyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE4OjE0OjA4IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE5OjIxOjM5IDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE3LDcgKzE3LDcgQEAKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQogIyBDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fUE9TU0lCTEU9eQogQ09ORklHX1NZU19TVVBQT1JUU19QQ0k9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQEAgLTI1LDYgKzI1LDcgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00MSwxOCArNDIsMzIgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNjIsMTAgKzc3LDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzQsNiArODcsNyBAQAogQ09ORklHX0FJTz15CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEwNywxMSArMTIxLDYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQotIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAotIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE0Niw2ICsxNTUsNyBAQAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMiBpcyBub3Qgc2V0CkBAIC0xODcsMTEgKzE5NywxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjM5LDYgKzI1MCw3IEBACiAjCiBDT05GSUdfU0hfRE1BX0FQST15CiBDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19TSF9ETUFfSVJRX01VTFRJPXkKIENPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTgKICMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKIApAQCAtMjg4LDYgKzMwMCw4IEBACiAjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKIAogIwogIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cwpAQCAtMzA3LDcgKzMyMSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAogIyBDT05GSUdfVU5JWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKQEAgLTM1Miw2ICszNjUsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM2NCwxMyArMzc4LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00NjQsNiArNDc4LDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTUwOSw2ICs1MjgsNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKQEAgLTUyNiw4ICs1NDYsMTAgQEAKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKQEAgLTU3MSw3ICs1OTMsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKQEAgLTcxMSw2ICs3MzYsNyBAQAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNzI4LDYgKzc1NCw3IEBACiBDT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldApAQCAtNzcxLDYgKzc5OCw3IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtODIwLDcgKzg0OCw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtODQ5LDcgKzg3Niw4IEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvc3lzdGVtaF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc3lzdGVtaF9kZWZjb25maWcKaW5kZXggNzI3MDNiZi4uN2VhNjM5YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3N5c3RlbWhfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy9zeXN0ZW1oX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOAotIyBGcmkgSmFuICA5IDE4OjE1OjU2IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOQorIyBUaHUgQXByICAyIDE5OjIzOjMxIDIwMDkKICMKIENPTkZJR19TVVBFUkg9eQogQ09ORklHX1NVUEVSSDMyPXkKQEAgLTE3LDEzICsxNywxNCBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC0zOCwxOCArMzksMzIgQEAKIENPTkZJR19TV0FQPXkKICMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FPXkKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfVUlEMTY9eQogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldApAQCAtNTksMTAgKzc0LDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtNzAsNiArODMsNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMDksMTEgKzEyMyw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNDgsNiArMTU3LDcgQEAKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIgaXMgbm90IHNldApAQCAtMTg5LDExICsxOTksMTIgQEAKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19OUl9RVUlDSz0yCiBDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19IQVZFX01MT0NLPXkKK0NPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQ9eQogCiAjCiAjIENhY2hlIGNvbmZpZ3VyYXRpb24KICMKLSMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAogQ09ORklHX0NBQ0hFX1dSSVRFQkFDSz15CiAjIENPTkZJR19DQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAogIyBDT05GSUdfQ0FDSEVfT0ZGIGlzIG5vdCBzZXQKQEAgLTMxOCw5ICszMjksMTMgQEAKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC0zNzIsNiArMzg3LDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKQEAgLTQ1MiwxNSArNDY4LDIwIEBACiAjCiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtNDc1LDYgKzQ5Niw3IEBACiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC01MTgsNiArNTQwLDcgQEAKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtNTU4LDcgKzU4MSw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtNTg3LDcgKzYwOSw3IEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcKaW5kZXggMDFmYzFkZS4uYmJlYjRjNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jb25maWdzL3RpdGFuX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTg6MTc6MTkgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTk6MjQ6NTUgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX1BDST15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQpAQCAtMjUsNiArMjUsNyBAQAogIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUz15CitDT05GSUdfQVJDSF9IQVNfREVGQVVMVF9JRExFPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKQEAgLTQyLDE5ICs0MywzMyBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorIyBDT05GSUdfUkRfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpNQSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX0NPTVBSRVNTSU9OX05PTkU9eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC02NSwxMCArODAsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03Nyw2ICs5MCw3IEBACiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTE2LDExICsxMzAsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU1LDYgKzE2NCw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTE5NiwxMSArMjA2LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yNDgsNiArMjU5LDcgQEAKICMKIENPTkZJR19TSF9ETUFfQVBJPXkKIENPTkZJR19TSF9ETUE9eQorQ09ORklHX1NIX0RNQV9JUlFfTVVMVEk9eQogQ09ORklHX05SX09OQ0hJUF9ETUFfQ0hBTk5FTFM9OAogIyBDT05GSUdfTlJfRE1BX0NIQU5ORUxTX0JPT0wgaXMgbm90IHNldAogCkBAIC0yOTksNiArMzExLDggQEAKICMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSU9WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfSE9UUExVR19QQ0k9eQogIyBDT05GSUdfSE9UUExVR19QQ0lfRkFLRSBpcyBub3Qgc2V0CkBAIC0zMjMsNyArMzM3LDYgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCi1DT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTQwNiw2ICs0MTksNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfRFNDUCBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITD1tCiBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCkBAIC00MTgsNiArNDMyLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9ITD1tCiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRSBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KQEAgLTQ3NSwxMSArNDkwLDExIEBACiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQogIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKIENPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfSEw9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KIENPTkZJR19JUDZfTkZfRklMVEVSPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCiBDT05GSUdfSVA2X05GX1JBVz1tCiAjIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAogIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CkBAIC01MDAsNiArNTE1LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfU0NIRUQ9eQogCiAjCkBAIC01NjUsNyArNTgxLDYgQEAKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19GSUJfUlVMRVM9eQogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKQEAgLTU3NCw2ICs1ODksNyBAQAogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNTk5LDYgKzYxNSw3IEBACiBDT05GSUdfTVREX0RFQlVHX1ZFUkJPU0U9MAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEFSVElUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogCiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCkBAIC02NzUsNiArNjkyLDExIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCiAjCiAjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKQEAgLTY5OCwxMiArNzIwLDE2IEBACiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKIENPTkZJR19NSVNDX0RFVklDRVM9eQogIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC03NjAsNiArNzg2LDcgQEAKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVBUMlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKQEAgLTc4MSw2ICs4MDgsNyBAQAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKQEAgLTc5Niw2ICs4MjQsNyBAQAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAogIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogIyBDT05GSUdfSUZCIGlzIG5vdCBzZXQKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldApAQCAtODMyLDggKzg2MSwxMCBAQAogIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldApAQCAtODg4LDYgKzkxOSw3IEBACiAjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDEgaXMgbm90IHNldAogIyBDT05GSUdfQVRMMUUgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMUMgaXMgbm90IHNldAogIyBDT05GSUdfSk1FIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZfMTAwMDA9eQogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CkBAIC05MDYsNiArOTM4LDcgQEAKICMgQ09ORklHX0JOWDJYIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMR0UgaXMgbm90IHNldAogIyBDT05GSUdfU0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFMk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUiBpcyBub3Qgc2V0CiAKICMKQEAgLTkxMyw3ICs5NDYsMTAgQEAKICMKICMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtMTAyNSw2ICsxMDYxLDcgQEAKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC0xMTc0LDYgKzEyMTEsNyBAQAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQogQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKQEAgLTExOTUsMTggKzEyMzMsMTcgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTEyMzUsNyArMTI3Miw3IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX0NIMzQxIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTBYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8gaXMgbm90IHNldApAQCAtMTI1OSwxNSArMTI5NiwxOSBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KICMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1FVQUxDT01NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NZTUJPTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTEyODQsNyArMTMyNSw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtMTI5Niw2ICsxMzM2LDExIEBACiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CkBAIC0xMzM3LDYgKzEzODIsNyBAQAogIwogQ09ORklHX1JUQ19EUlZfU0g9bQogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtMTM2Myw2ICsxNDA5LDcgQEAKICMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC0xNDEzLDYgKzE0NjAsNyBAQAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTQzNiw3ICsxNDg0LDYgQEAKIENPTkZJR19FWFBPUlRGUz15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiBDT05GSUdfU01CX0ZTPW0KQEAgLTE1NTksNiArMTYwNiw3IEBACiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQogQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQpAQCAtMTU3Myw3ICsxNjIxLDYgQEAKICMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldApAQCAtMTYxMCwxMCArMTY1NywxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQVVUSEVOQz15CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xNjgzLDYgKzE3MzIsNyBAQAogIyBDb21wcmVzc2lvbgogIwogQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xNzA2LDExICsxNzU2LDEyIEBACiBDT05GSUdfTElCQ1JDMzJDPW0KIENPTkZJR19aTElCX0lORkxBVEU9eQogQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19URVhUU0VBUkNIPXkKIENPTkZJR19URVhUU0VBUkNIX0tNUD1tCiBDT05GSUdfVEVYVFNFQVJDSF9CTT1tCiBDT05GSUdfVEVYVFNFQVJDSF9GU009bQotQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvdWwyX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy91bDJfZGVmY29uZmlnCmluZGV4IDI3Zjk2OGEuLjM0ZjUxOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy91bDJfZGVmY29uZmlnCisrKyBiL2FyY2gvc2gvY29uZmlncy91bDJfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4Ci0jIEZyaSBKYW4gIDkgMTg6MjI6NTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTk6MzA6MjcgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTYsMTUgKzE2LDE3IEBACiAjIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci0jIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19BUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfTlVNQT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0NNVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC00NCwxOSArNDYsMzMgQEAKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKKyMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC02NiwxMCArODIsOCBAQAogQ09ORklHX1BSSU5USz15CiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSUdOQUxGRD15CiBDT05GSUdfVElNRVJGRD15CkBAIC03OCw2ICs5Miw3IEBACiBDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CiAjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKIENPTkZJR19TTFVCPXkKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTE4LDExICsxMzMsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTk9PUD15CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xMzIsNiArMTQyLDcgQEAKIENPTkZJR19DUFVfU0g0QT15CiBDT05GSUdfQ1BVX1NINEFMX0RTUD15CiBDT05GSUdfQ1BVX1NIWDI9eQorQ09ORklHX0FSQ0hfU0hNT0JJTEU9eQogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjE5IGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzIwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDMgaXMgbm90IHNldApAQCAtMTYwLDYgKzE3MSw3IEBACiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyIGlzIG5vdCBzZXQKQEAgLTIxMywxMSArMjI1LDEyIEBACiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfTlJfUVVJQ0s9MgogQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKIAogIwogIyBDYWNoZSBjb25maWd1cmF0aW9uCiAjCi0jIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKIENPTkZJR19DQUNIRV9XUklURUJBQ0s9eQogIyBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBQ0hFX09GRiBpcyBub3Qgc2V0CkBAIC0yNDMsNiArMjU2LDcgQEAKICMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KICMKIENPTkZJR19TSF9UTVU9eQorIyBDT05GSUdfU0hfVElNRVJfQ01UIGlzIG5vdCBzZXQKIENPTkZJR19TSF9USU1FUl9JUlE9MTYKIENPTkZJR19TSF9QQ0xLX0ZSRVE9MzMzMzMzMzMKIENPTkZJR19USUNLX09ORVNIT1Q9eQpAQCAtMzE5LDcgKzMzMyw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19QQUNLRVRfTU1BUD15CiBDT05GSUdfVU5JWD15CkBAIC0zNzQsNiArMzg3LDcgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19EQ0IgaXMgbm90IHNldAogCkBAIC0zODYsMTUgKzQwMCwxNCBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKIENPTkZJR19DRkc4MDIxMT15CiAjIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAotQ09ORklHX05MODAyMTE9eQogIyBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX0VYVD15CiBDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKIENPTkZJR19MSUI4MDIxMT1tCisjIENPTkZJR19MSUI4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTUFDODAyMTE9eQogCiAjCkBAIC00MDgsNiArNDIxLDcgQEAKICMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfTEVEUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00MzAsNiArNDQ0LDcgQEAKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldApAQCAtNDk3LDYgKzUxMiwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC01MTQsOSArNTM0LDEzIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC01NjIsNiArNTg2LDcgQEAKICMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTU3MCw2ICs1OTUsNyBAQAogQ09ORklHX1BBVEFfUExBVEZPUk09eQogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTgyLDggKzYwOCwxMCBAQAogIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTYwNSwxMiArNjMzLDEzIEBACiBDT05GSUdfTElCRVJUQVNfU0RJTz1tCiBDT05GSUdfTElCRVJUQVNfREVCVUc9eQogIyBDT05GSUdfTElCRVJUQVNfVEhJTkZJUk0gaXMgbm90IHNldAorIyBDT05GSUdfQVQ3NkM1MFhfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAogIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQVI5MTcwX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CkBAIC02MTgsNiArNjQ3LDEwIEBACiAjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAogCiAjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldApAQCAtNzk0LDcgKzgyNyw5IEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9SOEE2NjU5N19IQ0Q9eQogIyBDT05GSUdfU1VQRVJIX09OX0NISVBfUjhBNjY1OTcgaXMgbm90IHNldApAQCAtODA5LDE4ICs4NDQsMTcgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKQEAgLTg1Niw3ICs4OTAsNiBAQAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKQEAgLTg2Niw2ICs4OTksMTEgQEAKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CkBAIC04ODcsNiArOTI1LDcgQEAKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKQEAgLTkwOSw2ICs5NDgsNyBAQAogQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CkBAIC05NTYsNiArOTk2LDcgQEAKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CkBAIC05NzYsNyArMTAxNyw2IEBACiBDT05GSUdfRVhQT1JURlM9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTEwNTksNyArMTA5OSw2IEBACiAjCiAjIFRyYWNlcnMKICMKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldApAQCAtMTA4NywxMCArMTEyNiwxMiBAQAogQ09ORklHX0NSWVBUT19IQVNIPXkKIENPTkZJR19DUllQVE9fSEFTSDI9eQogQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUjI9eQogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldApAQCAtMTE1OSw2ICsxMjAwLDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC0xMTgwLDcgKzEyMjIsOCBAQAogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfUExJU1Q9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3VycXVlbGxfZGVmY29uZmlnCmluZGV4IGJlNzI2YzcuLmQxNzRiMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy91cnF1ZWxsX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvdXJxdWVsbF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM0Ci0jIFRodSBNYXIgIDUgMTc6Mjg6MTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5CisjIFRodSBBcHIgIDIgMTk6MzM6MzkgMjAwOQogIwogQ09ORklHX1NVUEVSSD15CiBDT05GSUdfU1VQRVJIMzI9eQpAQCAtMTcsNyArMTcsNyBAQAogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiAjIENPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRT15CiBDT05GSUdfU1lTX1NVUFBPUlRTX05VTUE9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKQEAgLTI1LDYgKzI1LDcgQEAKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTk9fVklSVF9UT19CVVM9eQorQ09ORklHX0FSQ0hfSEFTX0RFRkFVTFRfSURMRT15CiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCkBAIC02OSw2ICs3MCw3IEBACiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNzgsMTAgKzgwLDggQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQpAQCAtODksNiArODksNyBAQAogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19TTEFCPXkKICMgQ09ORklHX1NMVUIgaXMgbm90IHNldAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0yMTMsMTEgKzIxNCwxMiBAQAogQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAogQ09ORklHX05SX1FVSUNLPTIKIENPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0hBVkVfTUxPQ0s9eQorQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAKICMKICMgQ2FjaGUgY29uZmlndXJhdGlvbgogIwotIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0FDSEVfV1JJVEVCQUNLPXkKICMgQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DQUNIRV9PRkYgaXMgbm90IHNldApAQCAtMjMxLDYgKzIzMyw3IEBACiBDT05GSUdfU0hfU1RPUkVfUVVFVUVTPXkKIENPTkZJR19DUFVfSEFTX0lOVEVWVD15CiBDT05GSUdfQ1BVX0hBU19TUl9SQj15CitDT05GSUdfQ1BVX0hBU19QVEVBRVg9eQogQ09ORklHX0NQVV9IQVNfRlBVPXkKIAogIwpAQCAtMzE4LDcgKzMyMSw2IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwotQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKQEAgLTM3OCw2ICszODAsNyBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM5MCw3ICszOTMsNiBAQAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKICMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIGlzIG5vdCBzZXQKQEAgLTQ5MSw3ICs0OTMsNiBAQAogIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycwogIwogIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9RSU5GT19QUk9CRSBpcyBub3Qgc2V0CiAKICMKICMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCkBAIC01NTMsNiArNTU0LDcgQEAKICMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAogQ09ORklHX0FUQT15CiAjIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogQ09ORklHX1NBVEFfUE1QPXkKQEAgLTU2MSw2ICs1NjMsNyBAQAogIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CkBAIC01OTIsOCArNTk1LDEwIEBACiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRVRIT0MgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKQEAgLTYxMCw3ICs2MTUsNiBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtNzA1LDYgKzcwOSw3IEBACiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CkBAIC03NDYsNyArNzUxLDYgQEAKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CkBAIC04NTUsNiArODU5LDcgQEAKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCkBAIC05MjIsNyArOTI3LDcgQEAKIENPTkZJR19aRVJPUExVU19GRj1tCiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTk0Nyw2ICs5NTIsOCBAQAogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldApAQCAtOTYwLDExICs5NjcsMTEgQEAKICMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKICMKIAogIwotIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbwogIwogQ09ORklHX1VTQl9TVE9SQUdFPXkKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEwMDYsNyArMTAxMyw2IEBACiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldApAQCAtMTAyMiwxMiArMTAyOCwxNCBAQAogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKICMKICMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIApAQCAtMTEyNSw3ICsxMTMzLDYgQEAKIENPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKIENPTkZJR19SUENTRUNfR1NTX0tSQjU9eQogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTIwNiw3ICsxMjEzLDYgQEAKICMKICMgVHJhY2VycwogIwotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CkBAIC0xMjM0LDEwICsxMjQwLDEyIEBACiBDT05GSUdfQ1JZUFRPX0hBU0g9eQogQ09ORklHX0NSWVBUT19IQVNIMj15CiBDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CkBAIC0xMzA2LDYgKzEzMTQsNyBAQAogIyBDb21wcmVzc2lvbgogIwogIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CiAKICMKQEAgLTEzMjYsNyArMTMzNSw3IEBACiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1BMSVNUPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcKaW5kZXggZjEzYTA1Mi4uNjY2NzEzYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZwpAQCAtMTIsMjEgKzEyLDI1IEBACiBjb25maWcgU0hfRE1BX0lSUV9NVUxUSQogCWJvb2wKIAlkZXBlbmRzIG9uIFNIX0RNQQotCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3NTAgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxIHx8IFwKLQkJQ1BVX1NVQlRZUEVfU0g3NzUwUyB8fCBDUFVfU1VCVFlQRV9TSDc3NTBSIHx8IENQVV9TVUJUWVBFX1NINzc1MVIgfHwgXAotCQlDUFVfU1VCVFlQRV9TSDcwOTEgfHwgQ1BVX1NVQlRZUEVfU0g3NzYzIHx8IENQVV9TVUJUWVBFX1NINzc2NCB8fCBcCi0JCUNQVV9TVUJUWVBFX1NINzc4MCB8fCBDUFVfU1VCVFlQRV9TSDc3ODUKKwlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwICB8fCBDUFVfU1VCVFlQRV9TSDc3NTEgIHx8IFwKKwkJICAgICBDUFVfU1VCVFlQRV9TSDc3NTBTIHx8IENQVV9TVUJUWVBFX1NINzc1MFIgfHwgXAorCQkgICAgIENQVV9TVUJUWVBFX1NINzc1MVIgfHwgQ1BVX1NVQlRZUEVfU0g3MDkxICB8fCBcCisJCSAgICAgQ1BVX1NVQlRZUEVfU0g3NzYzICB8fCBDUFVfU1VCVFlQRV9TSDc3NjQgIHx8IFwKKwkJICAgICBDUFVfU1VCVFlQRV9TSDc3ODAgIHx8IENQVV9TVUJUWVBFX1NINzc4NQogCiBjb25maWcgTlJfT05DSElQX0RNQV9DSEFOTkVMUwogCWludAogCWRlcGVuZHMgb24gU0hfRE1BCi0JZGVmYXVsdCAiNCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwIHx8IENQVV9TVUJUWVBFX1NINzc1MSB8fCBDUFVfU1VCVFlQRV9TSDc3NTBTCi0JZGVmYXVsdCAiOCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUwUiB8fCBDUFVfU1VCVFlQRV9TSDc3NTFSIHx8IENQVV9TVUJUWVBFX1NINzc2MAotCWRlZmF1bHQgIjEyIiBpZiBDUFVfU1VCVFlQRV9TSDc3MjMgfHwgQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IENQVV9TVUJUWVBFX1NINzc4NQorCWRlZmF1bHQgIjQiIGlmIENQVV9TVUJUWVBFX1NINzc1MCAgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxICB8fCBcCisJCSAgICAgICBDUFVfU1VCVFlQRV9TSDc3NTBTIHx8IENQVV9TVUJUWVBFX1NINzA5MQorCWRlZmF1bHQgIjgiIGlmIENQVV9TVUJUWVBFX1NINzc1MFIgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUiB8fCBcCisJCSAgICAgICBDUFVfU1VCVFlQRV9TSDc3NjAKKwlkZWZhdWx0ICIxMiIgaWYgQ1BVX1NVQlRZUEVfU0g3NzIzIHx8IENQVV9TVUJUWVBFX1NINzc4MCAgfHwgXAorCQkJQ1BVX1NVQlRZUEVfU0g3Nzg1CiAJZGVmYXVsdCAiNiIKIAloZWxwCiAJICBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIHRoYXQgdGhlIG9uLWNoaXAKLQkgIERNQUMgc3VwcG9ydHMuIFRoaXMgd2lsbCBiZSA0IGZvciBTSDc3NTAvU0g3NzUxIGFuZCA4IGZvciB0aGUKKwkgIERNQUMgc3VwcG9ydHMuIFRoaXMgd2lsbCBiZSA0IGZvciBTSDcwOTEvU0g3NzUwL1NINzc1MSBhbmQgOCBmb3IgdGhlCiAJICBTSDc3NTBSL1NINzc1MVIuCiAKIGNvbmZpZyBOUl9ETUFfQ0hBTk5FTFNfQk9PTApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2g3Nzg1bGNyLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zaDc3ODVsY3IuYwppbmRleCBiM2JkNjg3Li5lOGI3NDQ2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zaDc3ODVsY3IuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zaDc3ODVsY3IuYwpAQCAtNDgsMTMgKzQ4LDggQEAKIAogc3RhdGljIHN0cnVjdCBzaDRfcGNpX2FkZHJlc3NfbWFwIHNoNzc4NV9wY2lfbWFwID0gewogCS53aW5kb3cwCT0gewotCQkuYmFzZQk9IFNINzc4MF9DUzJfQkFTRV9BRERSLAotCQkuc2l6ZQk9IDB4MDQwMDAwMDAsCi0JfSwKLQotCS53aW5kb3cxCT0gewotCQkuYmFzZQk9IFNINzc4MF9DUzNfQkFTRV9BRERSLAotCQkuc2l6ZQk9IDB4MDQwMDAwMDAsCisJCS5iYXNlCT0gU0g3NzgwX0NTMF9CQVNFX0FERFIsCisJCS5zaXplCT0gMHgyMDAwMDAwMCwKIAl9LAogCiAJLmZsYWdzCT0gU0g0X1BDSUNfTk9fUkVTRVQsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCmluZGV4IDc3M2Q1NzUuLmJhZTZhMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCkBAIC0xMjAsMTkgKzEyMCwxNSBAQAogCiAJLyogU2V0IElPIGFuZCBNZW0gd2luZG93cyB0byBsb2NhbCBhZGRyZXNzCiAJICogTWFrZSBQQ0kgYW5kIGxvY2FsIGFkZHJlc3MgdGhlIHNhbWUgZm9yIGVhc3kgMSB0byAxIG1hcHBpbmcKLQkgKiBXaW5kb3cwID0gbWFwLT53aW5kb3cwLnNpemUgQCBub24tY2FjaGVkIGFyZWEgYmFzZSA9IFNEUkFNCi0JICogV2luZG93MSA9IG1hcC0+d2luZG93MS5zaXplIEAgY2FjaGVkIGFyZWEgYmFzZSA9IFNEUkFNCiAJICovCi0Jd29yZCA9IChDT05GSUdfTUVNT1JZX1NJWkUgLSAweDAwMTAwMDAwKSB8IDB4MDAwMDAwMDE7Ci0JcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJTFNSMCk7Ci0JcGNpX3dyaXRlX3JlZygweDAwMDAwMDAxLCBTSDRfUENJTFNSMSk7CisJcGNpX3dyaXRlX3JlZyhtYXAtPndpbmRvdzAuc2l6ZSAtIDB4ZmZmZmYsIFNINF9QQ0lMU1IwKTsKKwlwY2lfd3JpdGVfcmVnKG1hcC0+d2luZG93MS5zaXplIC0gMHhmZmZmZiwgU0g0X1BDSUxTUjEpOwogCS8qIFNldCB0aGUgdmFsdWVzIG9uIHdpbmRvdyAwIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCi0Jd29yZCA9IENPTkZJR19NRU1PUllfU1RBUlQgfCAoQ09ORklHX01FTU9SWV9TSVpFIC0gMHgwMTAwMDAwMCk7Ci0JcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJTEFSMCk7Ci0JcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDc3ODBfUENJTUJBUjApOworCXBjaV93cml0ZV9yZWcobWFwLT53aW5kb3cwLmJhc2UsIFNINF9QQ0lMQVIwKTsKKwlwY2lfd3JpdGVfcmVnKG1hcC0+d2luZG93MC5iYXNlLCBTSDc3ODBfUENJTUJBUjApOwogCS8qIFNldCB0aGUgdmFsdWVzIG9uIHdpbmRvdyAxIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCi0JcGNpX3dyaXRlX3JlZygweDAwMDAwMDAwLCBTSDRfUENJTEFSMSk7Ci0JcGNpX3dyaXRlX3JlZygweDAwMDAwMDAwLCBTSDc3ODBfUENJTUJBUjEpOworCXBjaV93cml0ZV9yZWcobWFwLT53aW5kb3cxLmJhc2UsIFNINF9QQ0lMQVIxKTsKKwlwY2lfd3JpdGVfcmVnKG1hcC0+d2luZG93MS5iYXNlLCBTSDc3ODBfUENJTUJBUjEpOwogCiAJLyogTWFwIElPIHNwYWNlIGludG8gUENJIElPIHdpbmRvdwogCSAqIFRoZSBJTyB3aW5kb3cgaXMgNjRLLVBDSUJJT1NfTUlOX0lPIGluIHNpemUKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IDZjNDM2MjUuLmY1OTYzMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaApAQCAtMSwyMiArMSw2IEBACiAjaWZuZGVmIF9fTU1VX0gKICNkZWZpbmUgX19NTVVfSAogCi0vKiBEZWZhdWx0ICJ1bnNpZ25lZCBsb25nIiBjb250ZXh0ICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF9pZF90W05SX0NQVVNdOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0jaWZkZWYgQ09ORklHX01NVQotCW1tX2NvbnRleHRfaWRfdAkJaWQ7Ci0Jdm9pZAkJCSp2ZHNvOwotI2Vsc2UKLQl1bnNpZ25lZCBsb25nCQllbmRfYnJrOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0JJTkZNVF9FTEZfRkRQSUMKLQl1bnNpZ25lZCBsb25nCQlleGVjX2ZkcGljX2xvYWRtYXA7Ci0JdW5zaWduZWQgbG9uZwkJaW50ZXJwX2ZkcGljX2xvYWRtYXA7Ci0jZW5kaWYKLX0gbW1fY29udGV4dF90OwotCiAvKgogICogUHJpdmlsZWdlZCBTcGFjZSBNYXBwaW5nIEJ1ZmZlciAoUE1CKSBkZWZpbml0aW9ucwogICovCkBAIC00MSw2ICsyNSwyNCBAQAogCiAjZGVmaW5lIFBNQl9OT19FTlRSWQkJKC0xKQogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBEZWZhdWx0ICJ1bnNpZ25lZCBsb25nIiBjb250ZXh0ICovCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbW1fY29udGV4dF9pZF90W05SX0NQVVNdOworCit0eXBlZGVmIHN0cnVjdCB7CisjaWZkZWYgQ09ORklHX01NVQorCW1tX2NvbnRleHRfaWRfdAkJaWQ7CisJdm9pZAkJCSp2ZHNvOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nCQllbmRfYnJrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0JJTkZNVF9FTEZfRkRQSUMKKwl1bnNpZ25lZCBsb25nCQlleGVjX2ZkcGljX2xvYWRtYXA7CisJdW5zaWduZWQgbG9uZwkJaW50ZXJwX2ZkcGljX2xvYWRtYXA7CisjZW5kaWYKK30gbW1fY29udGV4dF90OworCiBzdHJ1Y3QgcG1iX2VudHJ5OwogCiBzdHJ1Y3QgcG1iX2VudHJ5IHsKQEAgLTcwLDYgKzcyLDcgQEAKIGxvbmcgcG1iX3JlbWFwKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLAogCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogdm9pZCBwbWJfdW5tYXAodW5zaWduZWQgbG9uZyBhZGRyKTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fTU1VX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHJvY2Vzc29yXzMyLmgKaW5kZXggZWZkZDc4YS4uOWE4NzE0OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wcm9jZXNzb3JfMzIuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvcl8zMi5oCkBAIC01OCw2ICs1OCwxNCBAQAogI2RlZmluZSBTUl9GRAkJMHgwMDAwODAwMAogCiAvKgorICogRFNQIHN0cnVjdHVyZSBhbmQgZGF0YQorICovCitzdHJ1Y3Qgc2hfZHNwX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBkc3BfcmVnc1sxNF07CisJbG9uZyBzdGF0dXM7Cit9OworCisvKgogICogRlBVIHN0cnVjdHVyZSBhbmQgZGF0YQogICovCiAKQEAgLTk2LDYgKzEwNCwxMSBAQAogCiAJLyogZmxvYXRpbmcgcG9pbnQgaW5mbyAqLwogCXVuaW9uIHNoX2ZwdV91bmlvbiBmcHU7CisKKyNpZmRlZiBDT05GSUdfU0hfRFNQCisJLyogRHNwIHN0YXR1cyBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBzaF9kc3Bfc3RydWN0IGRzcF9zdGF0dXM7CisjZW5kaWYKIH07CiAKIC8qIENvdW50IG9mIGFjdGl2ZSB0YXNrcyB3aXRoIFVCQyBzZXR0aW5ncyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggODFjNjU2OC4uZDNmNmNhYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xMTksMTYgKzExOSw4IEBACiBleHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogCi0jaWZkZWYgQ09ORklHX1NIX0RTUAotI2RlZmluZSB0YXNrX3B0X3JlZ3ModGFzaykgXAotCSgoc3RydWN0IHB0X3JlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFIFwKLQkJIC0gc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSkgLSAxKQotI2RlZmluZSB0YXNrX3B0X2RzcHJlZ3ModGFzaykgXAotCSgoc3RydWN0IHB0X2RzcHJlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFKSAtIDEpCi0jZWxzZQogI2RlZmluZSB0YXNrX3B0X3JlZ3ModGFzaykgXAogCSgoc3RydWN0IHB0X3JlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFKSAtIDEpCi0jZW5kaWYKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHByb2ZpbGVfcGMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggZTc5MzE4MS4uNjAyODM1NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zcGlubG9jay5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3BpbmxvY2suaApAQCAtMjE2LDYgKzIxNiw5IEBACiAJcmV0dXJuIChvbGR2YWwgPiAoUldfTE9DS19CSUFTIC0gMSkpOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfcmVhZF9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3dyaXRlX2xvY2sobG9jaykKKwogI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKICNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IGM5ZWM2YWYuLmE4ODg5NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMTUzLDYgKzE1Myw3IEBACiBleHRlcm4gc3RydWN0IGRlbnRyeSAqc2hfZGVidWdmc19yb290OwogCiB2b2lkIHBlcl9jcHVfdHJhcF9pbml0KHZvaWQpOwordm9pZCBkZWZhdWx0X2lkbGUodm9pZCk7CiAKIGFzbWxpbmthZ2Ugdm9pZCBicmVha19wb2ludF90cmFwKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaAppbmRleCBhNzI2ZDVkLi4yNDBiMzFlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKQEAgLTMsNTkgKzMsMTM1IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCisjaWZkZWYgQ09ORklHX1NIX0RTUAorCisjZGVmaW5lIGlzX2RzcF9lbmFibGVkKHRzaykJCQkJCQlcCisJKCEhKHRzay0+dGhyZWFkLmRzcF9zdGF0dXMuc3RhdHVzICYgU1JfRFNQKSkKKworI2RlZmluZSBfX3Jlc3RvcmVfZHNwKHRzaykJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXJlZ2lzdGVyIHUzMiAqX190czIgX19hc21fXyAoInIyIikgPQkJCQlcCisJCQkodTMyICopJnRzay0+dGhyZWFkLmRzcF9zdGF0dXM7CQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJCQlcCisJCSIuYmFsaWduIDRcblx0IgkJCQkJCVwKKwkJIm1vdnMubAlAcjIrLCBhMVxuXHQiCQkJCQlcCisJCSJtb3ZzLmwJQHIyKywgYTBnXG5cdCIJCQkJCVwKKwkJIm1vdnMubAlAcjIrLCBhMWdcblx0IgkJCQkJXAorCQkibW92cy5sCUByMissIG0wXG5cdCIJCQkJCVwKKwkJIm1vdnMubAlAcjIrLCBtMVxuXHQiCQkJCQlcCisJCSJtb3ZzLmwJQHIyKywgYTBcblx0IgkJCQkJXAorCQkibW92cy5sCUByMissIHgwXG5cdCIJCQkJCVwKKwkJIm1vdnMubAlAcjIrLCB4MVxuXHQiCQkJCQlcCisJCSJtb3ZzLmwJQHIyKywgeTBcblx0IgkJCQkJXAorCQkibW92cy5sCUByMissIHkxXG5cdCIJCQkJCVwKKwkJImxkcy5sCUByMissIGRzclxuXHQiCQkJCQlcCisJCSJsZGMubAlAcjIrLCByc1xuXHQiCQkJCQlcCisJCSJsZGMubAlAcjIrLCByZVxuXHQiCQkJCQlcCisJCSJsZGMubAlAcjIrLCBtb2Rcblx0IgkJCQkJXAorCQk6IDogInIiIChfX3RzMikpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIF9fc2F2ZV9kc3AodHNrKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXJlZ2lzdGVyIHUzMiAqX190czIgX19hc21fXyAoInIyIikgPQkJCQlcCisJCQkodTMyICopJnRzay0+dGhyZWFkLmRzcF9zdGF0dXMgKyAxNDsJCVwKKwkJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQkJXAorCQkiLmJhbGlnbiA0XG5cdCIJCQkJCQlcCisJCSJzdGMubAltb2QsIEAtcjJcblx0IgkJCQlcCisJCSJzdGMubAlyZSwgQC1yMlxuXHQiCQkJCQlcCisJCSJzdGMubAlycywgQC1yMlxuXHQiCQkJCQlcCisJCSJzdHMubAlkc3IsIEAtcjJcblx0IgkJCQlcCisJCSJzdHMubAl5MSwgQC1yMlxuXHQiCQkJCQlcCisJCSJzdHMubAl5MCwgQC1yMlxuXHQiCQkJCQlcCisJCSJzdHMubAl4MSwgQC1yMlxuXHQiCQkJCQlcCisJCSJzdHMubAl4MCwgQC1yMlxuXHQiCQkJCQlcCisJCSJzdHMubAlhMCwgQC1yMlxuXHQiCQkJCQlcCisJCSIud29yZAkweGY2NTMJCSEgbW92cy5sCWExLCBALXIyXG5cdCIJXAorCQkiLndvcmQJMHhmNmYzCQkhIG1vdnMubAlhMGcsIEAtcjJcblx0IglcCisJCSIud29yZAkweGY2ZDMJCSEgbW92cy5sCWExZywgQC1yMlxuXHQiCVwKKwkJIi53b3JkCTB4ZjZjMwkJISBtb3ZzLmwgICAgICAgIG0wLCBALXIyXG5cdCIJXAorCQkiLndvcmQJMHhmNmUzCQkhIG1vdnMubCAgICAgICAgbTEsIEAtcjJcblx0IglcCisJCTogOiAiciIgKF9fdHMyKSk7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIGlzX2RzcF9lbmFibGVkKHRzaykJKDApCisjZGVmaW5lIF9fc2F2ZV9kc3AodHNrKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3Jlc3RvcmVfZHNwKHRzaykJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKIHN0cnVjdCB0YXNrX3N0cnVjdCAqX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCk7CiAKIC8qCiAgKglzd2l0Y2hfdG8oKSBzaG91bGQgc3dpdGNoIHRhc2tzIHRvIHRhc2sgbnIgbiwgZmlyc3QKICAqLwotI2RlZmluZSBzd2l0Y2hfdG8ocHJldiwgbmV4dCwgbGFzdCkJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JcmVnaXN0ZXIgdTMyICpfX3RzMSBfX2FzbV9fICgicjEiKSA9ICh1MzIgKikmcHJldi0+dGhyZWFkLnNwOwlcCi0JcmVnaXN0ZXIgdTMyICpfX3RzMiBfX2FzbV9fICgicjIiKSA9ICh1MzIgKikmcHJldi0+dGhyZWFkLnBjOwlcCi0JcmVnaXN0ZXIgdTMyICpfX3RzNCBfX2FzbV9fICgicjQiKSA9ICh1MzIgKilwcmV2OwkJXAotCXJlZ2lzdGVyIHUzMiAqX190czUgX19hc21fXyAoInI1IikgPSAodTMyICopbmV4dDsJCVwKLQlyZWdpc3RlciB1MzIgKl9fdHM2IF9fYXNtX18gKCJyNiIpID0gKHUzMiAqKSZuZXh0LT50aHJlYWQuc3A7CVwKLQlyZWdpc3RlciB1MzIgX190czcgX19hc21fXyAoInI3IikgPSBuZXh0LT50aHJlYWQucGM7CQlcCi0Jc3RydWN0IHRhc2tfc3RydWN0ICpfX2xhc3Q7CQkJCQlcCi0JCQkJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAkJCQkJCVwKLQkJIi5iYWxpZ24gNFxuXHQiCQkJCQkJXAotCQkic3RjLmwJZ2JyLCBALXIxNVxuXHQiCQkJCQlcCi0JCSJzdHMubAlwciwgQC1yMTVcblx0IgkJCQkJXAotCQkibW92LmwJcjgsIEAtcjE1XG5cdCIJCQkJCVwKLQkJIm1vdi5sCXI5LCBALXIxNVxuXHQiCQkJCQlcCi0JCSJtb3YubAlyMTAsIEAtcjE1XG5cdCIJCQkJCVwKLQkJIm1vdi5sCXIxMSwgQC1yMTVcblx0IgkJCQkJXAotCQkibW92LmwJcjEyLCBALXIxNVxuXHQiCQkJCQlcCi0JCSJtb3YubAlyMTMsIEAtcjE1XG5cdCIJCQkJCVwKLQkJIm1vdi5sCXIxNCwgQC1yMTVcblx0IgkJCQkJXAotCQkibW92LmwJcjE1LCBAcjFcdCEgc2F2ZSBTUFxuXHQiCQkJXAotCQkibW92LmwJQHI2LCByMTVcdCEgY2hhbmdlIHRvIG5ldyBzdGFja1xuXHQiCQlcCi0JCSJtb3ZhCTFmLCAlMFxuXHQiCQkJCQlcCi0JCSJtb3YubAklMCwgQHIyXHQhIHNhdmUgUENcblx0IgkJCQlcCi0JCSJtb3YubAkyZiwgJTBcblx0IgkJCQkJXAotCQkiam1wCUAlMFx0ISBjYWxsIF9fc3dpdGNoX3RvXG5cdCIJCQlcCi0JCSIgbGRzCXI3LCBwclx0ISAgd2l0aCByZXR1cm4gdG8gbmV3IFBDXG5cdCIJCVwKLQkJIi5iYWxpZ24JNFxuIgkJCQkJXAotCQkiMjpcblx0IgkJCQkJCVwKLQkJIi5sb25nCV9fc3dpdGNoX3RvXG4iCQkJCQlcCi0JCSIxOlxuXHQiCQkJCQkJXAotCQkibW92LmwJQHIxNSssIHIxNFxuXHQiCQkJCQlcCi0JCSJtb3YubAlAcjE1KywgcjEzXG5cdCIJCQkJCVwKLQkJIm1vdi5sCUByMTUrLCByMTJcblx0IgkJCQkJXAotCQkibW92LmwJQHIxNSssIHIxMVxuXHQiCQkJCQlcCi0JCSJtb3YubAlAcjE1KywgcjEwXG5cdCIJCQkJCVwKLQkJIm1vdi5sCUByMTUrLCByOVxuXHQiCQkJCQlcCi0JCSJtb3YubAlAcjE1Kywgcjhcblx0IgkJCQkJXAotCQkibGRzLmwJQHIxNSssIHByXG5cdCIJCQkJCVwKLQkJImxkYy5sCUByMTUrLCBnYnJcblx0IgkJCQkJXAotCQk6ICI9eiIgKF9fbGFzdCkJCQkJCQlcCi0JCTogInIiIChfX3RzMSksICJyIiAoX190czIpLCAiciIgKF9fdHM0KSwJCVwKLQkJICAiciIgKF9fdHM1KSwgInIiIChfX3RzNiksICJyIiAoX190czcpCQkJXAotCQk6ICJyMyIsICJ0Iik7CQkJCQkJXAotCQkJCQkJCQkJXAotCWxhc3QgPSBfX2xhc3Q7CQkJCQkJCVwKKyNkZWZpbmUgc3dpdGNoX3RvKHByZXYsIG5leHQsIGxhc3QpCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlyZWdpc3RlciB1MzIgKl9fdHMxIF9fYXNtX18gKCJyMSIpOwkJCVwKKwlyZWdpc3RlciB1MzIgKl9fdHMyIF9fYXNtX18gKCJyMiIpOwkJCVwKKwlyZWdpc3RlciB1MzIgKl9fdHM0IF9fYXNtX18gKCJyNCIpOwkJCVwKKwlyZWdpc3RlciB1MzIgKl9fdHM1IF9fYXNtX18gKCJyNSIpOwkJCVwKKwlyZWdpc3RlciB1MzIgKl9fdHM2IF9fYXNtX18gKCJyNiIpOwkJCVwKKwlyZWdpc3RlciB1MzIgX190czcgX19hc21fXyAoInI3Iik7CQkJXAorCXN0cnVjdCB0YXNrX3N0cnVjdCAqX19sYXN0OwkJCQlcCisJCQkJCQkJCVwKKwlpZiAoaXNfZHNwX2VuYWJsZWQocHJldikpCQkJCVwKKwkJX19zYXZlX2RzcChwcmV2KTsJCQkJXAorCQkJCQkJCQlcCisJX190czEgPSAodTMyICopJnByZXYtPnRocmVhZC5zcDsJCQlcCisJX190czIgPSAodTMyICopJnByZXYtPnRocmVhZC5wYzsJCQlcCisJX190czQgPSAodTMyICopcHJldjsJCQkJCVwKKwlfX3RzNSA9ICh1MzIgKiluZXh0OwkJCQkJXAorCV9fdHM2ID0gKHUzMiAqKSZuZXh0LT50aHJlYWQuc3A7CQkJXAorCV9fdHM3ID0gbmV4dC0+dGhyZWFkLnBjOwkJCQlcCisJCQkJCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQlcCisJCSIuYmFsaWduIDRcblx0IgkJCQkJXAorCQkic3RjLmwJZ2JyLCBALXIxNVxuXHQiCQkJCVwKKwkJInN0cy5sCXByLCBALXIxNVxuXHQiCQkJCVwKKwkJIm1vdi5sCXI4LCBALXIxNVxuXHQiCQkJCVwKKwkJIm1vdi5sCXI5LCBALXIxNVxuXHQiCQkJCVwKKwkJIm1vdi5sCXIxMCwgQC1yMTVcblx0IgkJCQlcCisJCSJtb3YubAlyMTEsIEAtcjE1XG5cdCIJCQkJXAorCQkibW92LmwJcjEyLCBALXIxNVxuXHQiCQkJCVwKKwkJIm1vdi5sCXIxMywgQC1yMTVcblx0IgkJCQlcCisJCSJtb3YubAlyMTQsIEAtcjE1XG5cdCIJCQkJXAorCQkibW92LmwJcjE1LCBAcjFcdCEgc2F2ZSBTUFxuXHQiCQlcCisJCSJtb3YubAlAcjYsIHIxNVx0ISBjaGFuZ2UgdG8gbmV3IHN0YWNrXG5cdCIJXAorCQkibW92YQkxZiwgJTBcblx0IgkJCQlcCisJCSJtb3YubAklMCwgQHIyXHQhIHNhdmUgUENcblx0IgkJCVwKKwkJIm1vdi5sCTJmLCAlMFxuXHQiCQkJCVwKKwkJImptcAlAJTBcdCEgY2FsbCBfX3N3aXRjaF90b1xuXHQiCQlcCisJCSIgbGRzCXI3LCBwclx0ISAgd2l0aCByZXR1cm4gdG8gbmV3IFBDXG5cdCIJXAorCQkiLmJhbGlnbgk0XG4iCQkJCVwKKwkJIjI6XG5cdCIJCQkJCVwKKwkJIi5sb25nCV9fc3dpdGNoX3RvXG4iCQkJCVwKKwkJIjE6XG5cdCIJCQkJCVwKKwkJIm1vdi5sCUByMTUrLCByMTRcblx0IgkJCQlcCisJCSJtb3YubAlAcjE1KywgcjEzXG5cdCIJCQkJXAorCQkibW92LmwJQHIxNSssIHIxMlxuXHQiCQkJCVwKKwkJIm1vdi5sCUByMTUrLCByMTFcblx0IgkJCQlcCisJCSJtb3YubAlAcjE1KywgcjEwXG5cdCIJCQkJXAorCQkibW92LmwJQHIxNSssIHI5XG5cdCIJCQkJXAorCQkibW92LmwJQHIxNSssIHI4XG5cdCIJCQkJXAorCQkibGRzLmwJQHIxNSssIHByXG5cdCIJCQkJXAorCQkibGRjLmwJQHIxNSssIGdiclxuXHQiCQkJCVwKKwkJOiAiPXoiIChfX2xhc3QpCQkJCQlcCisJCTogInIiIChfX3RzMSksICJyIiAoX190czIpLCAiciIgKF9fdHM0KSwJXAorCQkgICJyIiAoX190czUpLCAiciIgKF9fdHM2KSwgInIiIChfX3RzNykJCVwKKwkJOiAicjMiLCAidCIpOwkJCQkJXAorCQkJCQkJCQlcCisJbGFzdCA9IF9fbGFzdDsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGZpbmlzaF9hcmNoX3N3aXRjaChwcmV2KQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKGlzX2RzcF9lbmFibGVkKHByZXYpKQkJCQlcCisJCV9fcmVzdG9yZV9kc3AocHJldik7CQkJCVwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgX191c2VzX2p1bXBfdG9fdW5jYWNoZWQgXApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc4Ni5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc4Ni5oCmluZGV4IDQ4Njg4YWQuLjk3Nzg2MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9zaDc3ODYuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3Nzg2LmgKQEAgLTUxLDE0MiArNTEsODYgQEAKIAlHUElPX1BKNywgR1BJT19QSjYsIEdQSU9fUEo1LCBHUElPX1BKNCwKIAlHUElPX1BKMywgR1BJT19QSjIsIEdQSU9fUEoxLCBHUElPX1BKMCwKIAotCUdQSU9fRk5fQ0RFLAotCUdQSU9fRk5fRVRIX01BR0lDLAotCUdQSU9fRk5fRElTUCwKLQlHUElPX0ZOX0VUSF9MSU5LLAotCUdQSU9fRk5fRFI1LAotCUdQSU9fRk5fRVRIX1RYX0VSLAotCUdQSU9fRk5fRFI0LAotCUdQSU9fRk5fRVRIX1RYX0VOLAotCUdQSU9fRk5fRFIzLAotCUdQSU9fRk5fRVRIX1RYRDMsCi0JR1BJT19GTl9EUjIsCi0JR1BJT19GTl9FVEhfVFhEMiwKLQlHUElPX0ZOX0RSMSwKLQlHUElPX0ZOX0VUSF9UWEQxLAotCUdQSU9fRk5fRFIwLAotCUdQSU9fRk5fRVRIX1RYRDAsCi0JR1BJT19GTl9WU1lOQywKLQlHUElPX0ZOX0hTUElfQ0xLLAotCUdQSU9fRk5fT0RERiwKLQlHUElPX0ZOX0hTUElfQ1MsCi0JR1BJT19GTl9ERzUsCi0JR1BJT19GTl9FVEhfTURJTywKLQlHUElPX0ZOX0RHNCwKLQlHUElPX0ZOX0VUSF9SWF9DTEssCi0JR1BJT19GTl9ERzMsCi0JR1BJT19GTl9FVEhfTURDLAotCUdQSU9fRk5fREcyLAotCUdQSU9fRk5fRVRIX0NPTCwKLQlHUElPX0ZOX0RHMSwKLQlHUElPX0ZOX0VUSF9UWF9DTEssCi0JR1BJT19GTl9ERzAsCi0JR1BJT19GTl9FVEhfQ1JTLAotCUdQSU9fRk5fRENMS0lOLAotCUdQSU9fRk5fSFNQSV9SWCwKLQlHUElPX0ZOX0hTWU5DLAotCUdQSU9fRk5fSFNQSV9UWCwKLQlHUElPX0ZOX0RCNSwKLQlHUElPX0ZOX0VUSF9SWEQzLAotCUdQSU9fRk5fREI0LAotCUdQSU9fRk5fRVRIX1JYRDIsCi0JR1BJT19GTl9EQjMsCi0JR1BJT19GTl9FVEhfUlhEMSwKLQlHUElPX0ZOX0RCMiwKLQlHUElPX0ZOX0VUSF9SWEQwLAotCUdQSU9fRk5fREIxLAotCUdQSU9fRk5fRVRIX1JYX0RWLAotCUdQSU9fRk5fREIwLAotCUdQSU9fRk5fRVRIX1JYX0VSLAotCUdQSU9fRk5fRENMS09VVCwKLQlHUElPX0ZOX1NDSUYxX1NMSywKLQlHUElPX0ZOX1NDSUYxX1JYRCwKLQlHUElPX0ZOX1NDSUYxX1RYRCwKLQlHUElPX0ZOX0RBQ0sxLAotCUdQSU9fRk5fQkFDSywKLQlHUElPX0ZOX0ZBTEUsCi0JR1BJT19GTl9EQUNLMCwKLQlHUElPX0ZOX0ZDTEUsCi0JR1BJT19GTl9EUkVRMSwKLQlHUElPX0ZOX0JSRVEsCi0JR1BJT19GTl9VU0JfT1ZDMSwKLQlHUElPX0ZOX0RSRVEwLAotCUdQSU9fRk5fVVNCX09WQzAsCi0JR1BJT19GTl9VU0JfUEVOQzEsCi0JR1BJT19GTl9VU0JfUEVOQzAsCi0JR1BJT19GTl9IQUMxX1NET1VULAotCUdQSU9fRk5fU1NJMV9TREFUQSwKLQlHUElPX0ZOX1NESUYxQ01ELAotCUdQSU9fRk5fSEFDMV9TRElOLAotCUdQSU9fRk5fU1NJMV9TQ0ssCi0JR1BJT19GTl9TRElGMUNELAotCUdQSU9fRk5fSEFDMV9TWU5DLAotCUdQSU9fRk5fU1NJMV9XUywKLQlHUElPX0ZOX1NESUYxV1AsCi0JR1BJT19GTl9IQUMxX0JJVENMSywKLQlHUElPX0ZOX1NTSTFfQ0xLLAotCUdQSU9fRk5fU0RJRjFDTEssCi0JR1BJT19GTl9IQUMwX1NET1VULAotCUdQSU9fRk5fU1NJMF9TREFUQSwKLQlHUElPX0ZOX1NESUYxRDMsCi0JR1BJT19GTl9IQUMwX1NESU4sCi0JR1BJT19GTl9TU0kwX1NDSywKLQlHUElPX0ZOX1NESUYxRDIsCi0JR1BJT19GTl9IQUMwX1NZTkMsCi0JR1BJT19GTl9TU0kwX1dTLAotCUdQSU9fRk5fU0RJRjFEMSwKLQlHUElPX0ZOX0hBQzBfQklUQ0xLLAotCUdQSU9fRk5fU1NJMF9DTEssCi0JR1BJT19GTl9TRElGMUQwLAotCUdQSU9fRk5fU0NJRjNfU0NLLAotCUdQSU9fRk5fU1NJMl9TREFUQSwKLQlHUElPX0ZOX1NDSUYzX1JYRCwKLQlHUElPX0ZOX1RDTEssCi0JR1BJT19GTl9TU0kyX1NDSywKLQlHUElPX0ZOX1NDSUYzX1RYRCwKKwkvKiBEVSAqLworCUdQSU9fRk5fRENMS0lOLCBHUElPX0ZOX0RDTEtPVVQsIEdQSU9fRk5fT0RERiwKKwlHUElPX0ZOX1ZTWU5DLCBHUElPX0ZOX0hTWU5DLCBHUElPX0ZOX0NERSwgR1BJT19GTl9ESVNQLAorCUdQSU9fRk5fRFIwLCBHUElPX0ZOX0RHMCwgR1BJT19GTl9EQjAsCisJR1BJT19GTl9EUjEsIEdQSU9fRk5fREcxLCBHUElPX0ZOX0RCMSwKKwlHUElPX0ZOX0RSMiwgR1BJT19GTl9ERzIsIEdQSU9fRk5fREIyLAorCUdQSU9fRk5fRFIzLCBHUElPX0ZOX0RHMywgR1BJT19GTl9EQjMsCisJR1BJT19GTl9EUjQsIEdQSU9fRk5fREc0LCBHUElPX0ZOX0RCNCwKKwlHUElPX0ZOX0RSNSwgR1BJT19GTl9ERzUsIEdQSU9fRk5fREI1LAorCisJLyogRXRoICovCisJR1BJT19GTl9FVEhfTUFHSUMsIEdQSU9fRk5fRVRIX0xJTkssIEdQSU9fRk5fRVRIX1RYX0VSLAorCUdQSU9fRk5fRVRIX1RYX0VOLCBHUElPX0ZOX0VUSF9NRElPLCBHUElPX0ZOX0VUSF9SWF9DTEssCisJR1BJT19GTl9FVEhfTURDLCBHUElPX0ZOX0VUSF9DT0wsIEdQSU9fRk5fRVRIX1RYX0NMSywKKwlHUElPX0ZOX0VUSF9DUlMsIEdQSU9fRk5fRVRIX1JYX0RWLCBHUElPX0ZOX0VUSF9SWF9FUiwKKwlHUElPX0ZOX0VUSF9UWEQzLCBHUElPX0ZOX0VUSF9UWEQyLCBHUElPX0ZOX0VUSF9UWEQxLCBHUElPX0ZOX0VUSF9UWEQwLAorCUdQSU9fRk5fRVRIX1JYRDMsIEdQSU9fRk5fRVRIX1JYRDIsIEdQSU9fRk5fRVRIX1JYRDEsIEdQSU9fRk5fRVRIX1JYRDAsCisKKwkvKiBIU1BJICovCisJR1BJT19GTl9IU1BJX0NMSywgR1BJT19GTl9IU1BJX0NTLCBHUElPX0ZOX0hTUElfUlgsIEdQSU9fRk5fSFNQSV9UWCwKKworCS8qIFNDSUYwICovCisJR1BJT19GTl9TQ0lGMF9DVFMsIEdQSU9fRk5fU0NJRjBfUlRTLCBHUElPX0ZOX1NDSUYwX1NDSywKKwlHUElPX0ZOX1NDSUYwX1JYRCwgR1BJT19GTl9TQ0lGMF9UWEQsCisKKwkvKiBTQ0lGMSAqLworCUdQSU9fRk5fU0NJRjFfU0NLLCBHUElPX0ZOX1NDSUYxX1JYRCwgR1BJT19GTl9TQ0lGMV9UWEQsCisKKwkvKiBTQ0lGMyAqLworCUdQSU9fRk5fU0NJRjNfU0NLLCBHUElPX0ZOX1NDSUYzX1JYRCwgR1BJT19GTl9TQ0lGM19UWEQsCisKKwkvKiBTQ0lGNCAqLworCUdQSU9fRk5fU0NJRjRfU0NLLCBHUElPX0ZOX1NDSUY0X1JYRCwgR1BJT19GTl9TQ0lGNF9UWEQsCisKKwkvKiBTQ0lGNSAqLworCUdQSU9fRk5fU0NJRjVfU0NLLCBHUElPX0ZOX1NDSUY1X1JYRCwgR1BJT19GTl9TQ0lGNV9UWEQsCisKKwkvKiBMQlNDICovCisJR1BJT19GTl9CUkVRLCBHUElPX0ZOX0lPSVMxNiwgR1BJT19GTl9DRTJCLCBHUElPX0ZOX0NFMkEsIEdQSU9fRk5fQkFDSywKKworCS8qIEZMQ1RMICovCisJR1BJT19GTl9GQUxFLCBHUElPX0ZOX0ZSQiwgR1BJT19GTl9GU1RBVFVTLAorCUdQSU9fRk5fRlNFLCBHUElPX0ZOX0ZDTEUsCisKKwkvKiBETUFDICovCisJR1BJT19GTl9EQUNLMCwgR1BJT19GTl9EUkVRMCwgR1BJT19GTl9EUkFLMCwKKwlHUElPX0ZOX0RBQ0sxLCBHUElPX0ZOX0RSRVExLCBHUElPX0ZOX0RSQUsxLAorCUdQSU9fRk5fREFDSzIsIEdQSU9fRk5fRFJFUTIsIEdQSU9fRk5fRFJBSzIsCisJR1BJT19GTl9EQUNLMywgR1BJT19GTl9EUkVRMywgR1BJT19GTl9EUkFLMywKKworCS8qIFVTQiAqLworCUdQSU9fRk5fVVNCX09WQzAsIEdQSU9fRk5fVVNCX1BFTkMwLAorCUdQSU9fRk5fVVNCX09WQzEsIEdQSU9fRk5fVVNCX1BFTkMxLAorCisJLyogSEFDICovCiAJR1BJT19GTl9IQUNfUkVTLAotCUdQSU9fRk5fU1NJMl9XUywKLQlHUElPX0ZOX0RBQ0szLAotCUdQSU9fRk5fU0RJRjBDTUQsCi0JR1BJT19GTl9EQUNLMiwKLQlHUElPX0ZOX1NESUYwQ0QsCi0JR1BJT19GTl9EUkVRMywKLQlHUElPX0ZOX1NESUYwV1AsCi0JR1BJT19GTl9TQ0lGMF9DVFMsCi0JR1BJT19GTl9EUkVRMiwKLQlHUElPX0ZOX1NESUYwQ0xLLAotCUdQSU9fRk5fU0NJRjBfUlRTLAotCUdQSU9fRk5fSVJMNywKLQlHUElPX0ZOX1NESUYwRDMsCi0JR1BJT19GTl9TQ0lGMF9TQ0ssCi0JR1BJT19GTl9JUkw2LAotCUdQSU9fRk5fU0RJRjBEMiwKLQlHUElPX0ZOX1NDSUYwX1JYRCwKLQlHUElPX0ZOX0lSTDUsCi0JR1BJT19GTl9TRElGMEQxLAotCUdQSU9fRk5fU0NJRjBfVFhELAotCUdQSU9fRk5fSVJMNCwKLQlHUElPX0ZOX1NESUYwRDAsCi0JR1BJT19GTl9TQ0lGNV9TQ0ssCi0JR1BJT19GTl9GUkIsCi0JR1BJT19GTl9TQ0lGNV9SWEQsCi0JR1BJT19GTl9JT0lTMTYsCi0JR1BJT19GTl9TQ0lGNV9UWEQsCi0JR1BJT19GTl9DRTJCLAotCUdQSU9fRk5fRFJBSzMsCi0JR1BJT19GTl9DRTJBLAotCUdQSU9fRk5fU0NJRjRfU0NLLAotCUdQSU9fRk5fRFJBSzIsCi0JR1BJT19GTl9TU0kzX1dTLAotCUdQSU9fRk5fU0NJRjRfUlhELAotCUdQSU9fRk5fRFJBSzEsCi0JR1BJT19GTl9TU0kzX1NEQVRBLAotCUdQSU9fRk5fRlNUQVRVUywKLQlHUElPX0ZOX1NDSUY0X1RYRCwKLQlHUElPX0ZOX0RSQUswLAotCUdQSU9fRk5fU1NJM19TQ0ssCi0JR1BJT19GTl9GU0UsCisJR1BJT19GTl9IQUMwX1NET1VULCBHUElPX0ZOX0hBQzBfU0RJTiwKKwlHUElPX0ZOX0hBQzBfU1lOQywgR1BJT19GTl9IQUMwX0JJVENMSywKKwlHUElPX0ZOX0hBQzFfU0RPVVQsIEdQSU9fRk5fSEFDMV9TRElOLAorCUdQSU9fRk5fSEFDMV9TWU5DLCBHUElPX0ZOX0hBQzFfQklUQ0xLLAorCisJLyogU1NJICovCisJR1BJT19GTl9TU0kwX1NEQVRBLCBHUElPX0ZOX1NTSTBfU0NLLCBHUElPX0ZOX1NTSTBfV1MsIEdQSU9fRk5fU1NJMF9DTEssCisJR1BJT19GTl9TU0kxX1NEQVRBLCBHUElPX0ZOX1NTSTFfU0NLLCBHUElPX0ZOX1NTSTFfV1MsIEdQSU9fRk5fU1NJMV9DTEssCisJR1BJT19GTl9TU0kyX1NEQVRBLCBHUElPX0ZOX1NTSTJfU0NLLCBHUElPX0ZOX1NTSTJfV1MsCisJR1BJT19GTl9TU0kzX1NEQVRBLCBHUElPX0ZOX1NTSTNfU0NLLCBHUElPX0ZOX1NTSTNfV1MsCisKKwkvKiBTRElGMSAqLworCUdQSU9fRk5fU0RJRjFDTUQsIEdQSU9fRk5fU0RJRjFDRCwgR1BJT19GTl9TRElGMVdQLCBHUElPX0ZOX1NESUYxQ0xLLAorCUdQSU9fRk5fU0RJRjFEMywgR1BJT19GTl9TRElGMUQyLCBHUElPX0ZOX1NESUYxRDEsIEdQSU9fRk5fU0RJRjFEMCwKKworCS8qIFNESUYwICovCisJR1BJT19GTl9TRElGMENNRCwgR1BJT19GTl9TRElGMENELCBHUElPX0ZOX1NESUYwV1AsIEdQSU9fRk5fU0RJRjBDTEssCisJR1BJT19GTl9TRElGMEQzLCBHUElPX0ZOX1NESUYwRDIsIEdQSU9fRk5fU0RJRjBEMSwgR1BJT19GTl9TRElGMEQwLAorCisJLyogVE1VICovCisJR1BJT19GTl9UQ0xLLAorCisJLyogSU5UQyAqLworCUdQSU9fRk5fSVJMNywgR1BJT19GTl9JUkw2LCBHUElPX0ZOX0lSTDUsIEdQSU9fRk5fSVJMNCwKIH07CiAKICNlbmRpZiAvKiBfX0NQVV9TSDc3ODZfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKaW5kZXggNTVkYTBmZi4uM2NiNTMxZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwpAQCAtMjU0LDQwICsyNTQsNiBAQAogCiAJbGRzCWsyLCBwcgkJCSEgcmVzdG9yZSBwcgogCSEKLSNpZmRlZiBDT05GSUdfU0hfRFNQCi0JbW92LmwJQHIxNSssIGswCQkhIERTUCBtb2RlIG1hcmtlcgotCW1vdi5sCTVmLCBrMQotCWNtcC9lcQlrMCwgazEJCQkhIERvIHdlIGhhdmUgYSBEU1Agc3RhY2sgZnJhbWU/Ci0JYmYJc2tpcF9yZXN0b3JlCi0KLQlzdGMJc3IsIGswCQkJISBFbmFibGUgQ1BVIERTUCBtb2RlCi0Jb3IJazEsIGswCQkJISAod2l0aGluIGtlcm5lbCBpdCBtYXkgYmUgZGlzYWJsZWQpCi0JbGRjCWswLCBzcgotCW1vdglyMiwgazAJCQkhIEJhY2t1cCByMgotCi0JISBSZXN0b3JlIERTUCByZWdpc3RlcnMgZnJvbSBzdGFjawotCW1vdglyMTUsIHIyCi0JbW92cy5sCUByMissIGExCi0JbW92cy5sCUByMissIGEwZwotCW1vdnMubAlAcjIrLCBhMWcKLQltb3ZzLmwJQHIyKywgbTAKLQltb3ZzLmwJQHIyKywgbTEKLQltb3YJcjIsIHIxNQotCi0JbGRzLmwJQHIxNSssIGEwCi0JbGRzLmwJQHIxNSssIHgwCi0JbGRzLmwJQHIxNSssIHgxCi0JbGRzLmwJQHIxNSssIHkwCi0JbGRzLmwJQHIxNSssIHkxCi0JbGRzLmwJQHIxNSssIGRzcgotCWxkYy5sCUByMTUrLCBycwotCWxkYy5sCUByMTUrLCByZQotCWxkYy5sCUByMTUrLCBtb2QKLQotCW1vdglrMCwgcjIJCQkhIFJlc3RvcmUgcjIKLXNraXBfcmVzdG9yZToKLSNlbmRpZgotCSEKIAkhIENhbGN1bGF0ZSBuZXcgU1IgdmFsdWUKIAltb3YJazMsIGsyCQkJISBvcmlnaW5hbCBTUiB2YWx1ZQogCW1vdgkjMHhmMCwgazEKQEAgLTM1OCw3ICszMjQsNyBAQAogCWFkZAlrMCwgazQKIDA6CiAJISBTZXR1cCBzdGFjayBhbmQgc2F2ZSBEU1AgY29udGV4dCAoazAgY29udGFpbnMgb3JpZ2luYWwgcjE1IG9uIHJldHVybikKLQlic3IJcHJlcGFyZV9zdGFja19zYXZlX2RzcAorCWJzcglwcmVwYXJlX3N0YWNrCiAJIG5vcAogCiAJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKQEAgLTM3NCwxNSArMzQwLDE0IEBACiAxOgkubG9uZwlFWFBFVlQKICNlbmRpZgogCi0hIHByZXBhcmVfc3RhY2tfc2F2ZV9kc3AoKQorISBwcmVwYXJlX3N0YWNrKCkKICEgLSByb2xsIGJhY2sgZ1JCCiAhIC0gc3dpdGNoIHRvIGtlcm5lbCBzdGFjawotISAtIHNhdmUgRFNQCiAhIGswIHJldHVybnMgb3JpZ2luYWwgc3AgKGFmdGVyIHJvbGwgYmFjaykKICEgazEgdHJhc2hlZAogISBrMiB0cmFzaGVkCiAKLXByZXBhcmVfc3RhY2tfc2F2ZV9kc3A6CitwcmVwYXJlX3N0YWNrOgogI2lmZGVmIENPTkZJR19HVVNBCiAJISBDaGVjayBmb3Igcm9sbCBiYWNrIGdSQiAoVXNlciBhbmQgS2VybmVsKQogCW1vdglyMTUsIGswCkBAIC00MTYsNDcgKzM4MSw5IEBACiAJbW92CWsxLCByMTUJCSEgY2hhbmdlIHRvIGtlcm5lbCBzdGFjawogCSEKIDE6Ci0jaWZkZWYgQ09ORklHX1NIX0RTUAotCSEgU2F2ZSBEU1AgY29udGV4dCBpZiBuZWVkZWQKLQlzdGMJc3IsIGsxCi0JbW92CSMweDEwLCBrMgotCXNobGw4ICAgazIJCQkhIERTUD0xICgweDAwMDAxMDAwKQotCXRzdAlrMiwgazEJCQkhIENoZWNrIGlmIGluIERTUCBtb2RlIChwYXNzZWQgaW4gazIpCi0JYnQvcwlza2lwX3NhdmUKLQkgbW92CSMwLCBrMQkJCSEgU2V0IG1hcmtlciBmb3Igbm8gc3RhY2sgZnJhbWUKLQotCW1vdglrMiwgazEJCQkhIFNhdmUgaGFzLWZyYW1lIG1hcmtlcgotCi0JISBTYXZlIERTUCByZWdpc3RlcnMgb24gc3RhY2sKLQlzdGMubAltb2QsIEAtcjE1Ci0Jc3RjLmwJcmUsIEAtcjE1Ci0Jc3RjLmwJcnMsIEAtcjE1Ci0Jc3RzLmwJZHNyLCBALXIxNQotCXN0cy5sCXkxLCBALXIxNQotCXN0cy5sCXkwLCBALXIxNQotCXN0cy5sCXgxLCBALXIxNQotCXN0cy5sCXgwLCBALXIxNQotCXN0cy5sCWEwLCBALXIxNQotCi0JISBHQVMgaXMgYnJva2VuLCBkb2VzIG5vdCBnZW5lcmF0ZSBjb3JyZWN0ICJtb3ZzLmwgRHMsQC1BcyIgaW5zdHIuCi0KLQkhIEZJWE1FOiBNYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHN0aWxsIHRoZSBjYXNlIHdpdGggbmV3ZXIgdG9vbGNoYWlucywKLQkhIGFzIHdlJ3JlIG5vdCBhdCBhbGwgaW50ZXJlc3RlZCBpbiBzdXBwb3J0aW5nIGFuY2llbnQgdG9vbGNoYWlucyBhdAotCSEgdGhpcyBwb2ludC4gLS0gUEZNLgotCi0JbW92CXIxNSwgazIKLQkud29yZAkweGY2NTMJCQkhIG1vdnMubAlhMSwgQC1yMgotCS53b3JkCTB4ZjZmMwkJCSEgbW92cy5sCWEwZywgQC1yMgotCS53b3JkCTB4ZjZkMwkJCSEgbW92cy5sCWExZywgQC1yMgotCS53b3JkCTB4ZjZjMwkJCSEgbW92cy5sCW0wLCBALXIyCi0JLndvcmQJMHhmNmUzCQkJISBtb3ZzLmwJbTEsIEAtcjIKLQltb3YJazIsIHIxNQotCi1za2lwX3NhdmU6Ci0JbW92LmwJazEsIEAtcjE1CQkhIFB1c2ggRFNQIG1vZGUgbWFya2VyIG9udG8gc3RhY2sKLSNlbmRpZgogCXJ0cwogCSBub3AKKwogIQogISAweDQwMDogSW5zdHJ1Y3Rpb24gYW5kIERhdGEgVExCIG1pc3MgZXhjZXB0aW9uIHZlY3RvcgogIQpAQCAtNDY4LDcgKzM5NSw3IEBACiAJbW92YQlleGNlcHRpb25fZGF0YSwgazAKIAogCSEgU2V0dXAgc3RhY2sgYW5kIHNhdmUgRFNQIGNvbnRleHQgKGswIGNvbnRhaW5zIG9yaWdpbmFsIHIxNSBvbiByZXR1cm4pCi0JYnNyCXByZXBhcmVfc3RhY2tfc2F2ZV9kc3AKKwlic3IJcHJlcGFyZV9zdGFjawogCSBQUkVGKGswKQogCiAJISBTYXZlIHJlZ2lzdGVycyAvIFN3aXRjaCB0byBiYW5rIDAKQEAgLTU3Miw3ICs0OTksNyBAQAogCW1vdmEJZXhjZXB0aW9uX2RhdGEsIGswCiAKIAkhIFNldHVwIHN0YWNrIGFuZCBzYXZlIERTUCBjb250ZXh0IChrMCBjb250YWlucyBvcmlnaW5hbCByMTUgb24gcmV0dXJuKQotCWJzcglwcmVwYXJlX3N0YWNrX3NhdmVfZHNwCisJYnNyCXByZXBhcmVfc3RhY2sKIAkgUFJFRihrMCkKIAogCSEgU2F2ZSByZWdpc3RlcnMgLyBTd2l0Y2ggdG8gYmFuayAwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKaW5kZXggM2QzYTNjNC4uOTFlMzY3NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwpAQCAtMTk5LDExICsxOTksNiBAQAogCQlicmVhazsKIAl9CiAKLSNpZmRlZiBDT05GSUdfU0hfRElSRUNUX01BUFBFRAotCWJvb3RfY3B1X2RhdGEuaWNhY2hlLndheXMgPSAxOwotCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSAxOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfQ1BVX0hBU19QVEVBCiAJYm9vdF9jcHVfZGF0YS5mbGFncyB8PSBDUFVfSEFTX1BURUE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYwppbmRleCAzNzNiMzQ0Li40MjI5ZTA3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9waW5tdXgtc2g3Nzg2LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzc4Ni5jCkBAIC0xNDksMTUwICsxNDksNDQgQEAKIAlQSU5NVVhfRlVOQ1RJT05fRU5ELAogCiAJUElOTVVYX01BUktfQkVHSU4sCi0JQ0RFX01BUkssCi0JRVRIX01BR0lDX01BUkssCi0JRElTUF9NQVJLLAotCUVUSF9MSU5LX01BUkssCi0JRFI1X01BUkssCi0JRVRIX1RYX0VSX01BUkssCi0JRFI0X01BUkssCi0JRVRIX1RYX0VOX01BUkssCi0JRFIzX01BUkssCi0JRVRIX1RYRDNfTUFSSywKLQlEUjJfTUFSSywKLQlFVEhfVFhEMl9NQVJLLAotCURSMV9NQVJLLAotCUVUSF9UWEQxX01BUkssCi0JRFIwX01BUkssCi0JRVRIX1RYRDBfTUFSSywKLQotCVZTWU5DX01BUkssCi0JSFNQSV9DTEtfTUFSSywKLQlPRERGX01BUkssCi0JSFNQSV9DU19NQVJLLAotCURHNV9NQVJLLAotCUVUSF9NRElPX01BUkssCi0JREc0X01BUkssCi0JRVRIX1JYX0NMS19NQVJLLAotCURHM19NQVJLLAotCUVUSF9NRENfTUFSSywKLQlERzJfTUFSSywKLQlFVEhfQ09MX01BUkssCi0JREcxX01BUkssCi0JRVRIX1RYX0NMS19NQVJLLAotCURHMF9NQVJLLAotCUVUSF9DUlNfTUFSSywKLQotCURDTEtJTl9NQVJLLAotCUhTUElfUlhfTUFSSywKLQlIU1lOQ19NQVJLLAotCUhTUElfVFhfTUFSSywKLQlEQjVfTUFSSywKLQlFVEhfUlhEM19NQVJLLAotCURCNF9NQVJLLAotCUVUSF9SWEQyX01BUkssCi0JREIzX01BUkssCi0JRVRIX1JYRDFfTUFSSywKLQlEQjJfTUFSSywKLQlFVEhfUlhEMF9NQVJLLAotCURCMV9NQVJLLAotCUVUSF9SWF9EVl9NQVJLLAotCURCMF9NQVJLLAotCUVUSF9SWF9FUl9NQVJLLAotCi0JRENMS09VVF9NQVJLLAotCVNDSUYxX1NMS19NQVJLLAotCVNDSUYxX1JYRF9NQVJLLAotCVNDSUYxX1RYRF9NQVJLLAotCURBQ0sxX01BUkssCi0JQkFDS19NQVJLLAotCUZBTEVfTUFSSywKLQlEQUNLMF9NQVJLLAotCUZDTEVfTUFSSywKLQlEUkVRMV9NQVJLLAotCUJSRVFfTUFSSywKLQlVU0JfT1ZDMV9NQVJLLAotCURSRVEwX01BUkssCi0JVVNCX09WQzBfTUFSSywKLQotCVVTQl9QRU5DMV9NQVJLLAotCVVTQl9QRU5DMF9NQVJLLAotCi0JSEFDMV9TRE9VVF9NQVJLLAotCVNTSTFfU0RBVEFfTUFSSywKLQlTRElGMUNNRF9NQVJLLAotCUhBQzFfU0RJTl9NQVJLLAotCVNTSTFfU0NLX01BUkssCi0JU0RJRjFDRF9NQVJLLAotCUhBQzFfU1lOQ19NQVJLLAotCVNTSTFfV1NfTUFSSywKLQlTRElGMVdQX01BUkssCi0JSEFDMV9CSVRDTEtfTUFSSywKLQlTU0kxX0NMS19NQVJLLAotCVNESUYxQ0xLX01BUkssCi0JSEFDMF9TRE9VVF9NQVJLLAotCVNTSTBfU0RBVEFfTUFSSywKLQlTRElGMUQzX01BUkssCi0JSEFDMF9TRElOX01BUkssCi0JU1NJMF9TQ0tfTUFSSywKLQlTRElGMUQyX01BUkssCi0JSEFDMF9TWU5DX01BUkssCi0JU1NJMF9XU19NQVJLLAotCVNESUYxRDFfTUFSSywKLQlIQUMwX0JJVENMS19NQVJLLAotCVNTSTBfQ0xLX01BUkssCi0JU0RJRjFEMF9NQVJLLAotCi0JU0NJRjNfU0NLX01BUkssCi0JU1NJMl9TREFUQV9NQVJLLAotCVNDSUYzX1JYRF9NQVJLLAotCVRDTEtfTUFSSywKLQlTU0kyX1NDS19NQVJLLAotCVNDSUYzX1RYRF9NQVJLLAorCURDTEtJTl9NQVJLLCBEQ0xLT1VUX01BUkssIE9EREZfTUFSSywKKwlWU1lOQ19NQVJLLCBIU1lOQ19NQVJLLCBDREVfTUFSSywgRElTUF9NQVJLLAorCURSMF9NQVJLLCBEUjFfTUFSSywgRFIyX01BUkssIERSM19NQVJLLCBEUjRfTUFSSywgRFI1X01BUkssCisJREcwX01BUkssIERHMV9NQVJLLCBERzJfTUFSSywgREczX01BUkssIERHNF9NQVJLLCBERzVfTUFSSywKKwlEQjBfTUFSSywgREIxX01BUkssIERCMl9NQVJLLCBEQjNfTUFSSywgREI0X01BUkssIERCNV9NQVJLLAorCUVUSF9NQUdJQ19NQVJLLCBFVEhfTElOS19NQVJLLCBFVEhfVFhfRVJfTUFSSywgRVRIX1RYX0VOX01BUkssCisJRVRIX01ESU9fTUFSSywgRVRIX1JYX0NMS19NQVJLLCBFVEhfTURDX01BUkssIEVUSF9DT0xfTUFSSywKKwlFVEhfVFhfQ0xLX01BUkssIEVUSF9DUlNfTUFSSywgRVRIX1JYX0RWX01BUkssIEVUSF9SWF9FUl9NQVJLLAorCUVUSF9UWEQzX01BUkssIEVUSF9UWEQyX01BUkssIEVUSF9UWEQxX01BUkssIEVUSF9UWEQwX01BUkssCisJRVRIX1JYRDNfTUFSSywgRVRIX1JYRDJfTUFSSywgRVRIX1JYRDFfTUFSSywgRVRIX1JYRDBfTUFSSywKKwlIU1BJX0NMS19NQVJLLCBIU1BJX0NTX01BUkssIEhTUElfUlhfTUFSSywgSFNQSV9UWF9NQVJLLAorCVNDSUYwX0NUU19NQVJLLCBTQ0lGMF9SVFNfTUFSSywKKwlTQ0lGMF9TQ0tfTUFSSywgU0NJRjBfUlhEX01BUkssIFNDSUYwX1RYRF9NQVJLLAorCVNDSUYxX1NDS19NQVJLLCBTQ0lGMV9SWERfTUFSSywgU0NJRjFfVFhEX01BUkssCisJU0NJRjNfU0NLX01BUkssIFNDSUYzX1JYRF9NQVJLLCBTQ0lGM19UWERfTUFSSywKKwlTQ0lGNF9TQ0tfTUFSSywgU0NJRjRfUlhEX01BUkssIFNDSUY0X1RYRF9NQVJLLAorCVNDSUY1X1NDS19NQVJLLCBTQ0lGNV9SWERfTUFSSywgU0NJRjVfVFhEX01BUkssCisJQlJFUV9NQVJLLCBJT0lTMTZfTUFSSywgQ0UyQl9NQVJLLCBDRTJBX01BUkssIEJBQ0tfTUFSSywKKwlGQUxFX01BUkssIEZSQl9NQVJLLCBGU1RBVFVTX01BUkssCisJRlNFX01BUkssIEZDTEVfTUFSSywKKwlEQUNLMF9NQVJLLCBEQUNLMV9NQVJLLCBEQUNLMl9NQVJLLCBEQUNLM19NQVJLLAorCURSRVEwX01BUkssIERSRVExX01BUkssIERSRVEyX01BUkssIERSRVEzX01BUkssCisJRFJBSzBfTUFSSywgRFJBSzFfTUFSSywgRFJBSzJfTUFSSywgRFJBSzNfTUFSSywKKwlVU0JfT1ZDMV9NQVJLLCBVU0JfT1ZDMF9NQVJLLAorCVVTQl9QRU5DMV9NQVJLLCBVU0JfUEVOQzBfTUFSSywKIAlIQUNfUkVTX01BUkssCi0JU1NJMl9XU19NQVJLLAotCi0JREFDSzNfTUFSSywKLQlTRElGMENNRF9NQVJLLAotCURBQ0syX01BUkssCi0JU0RJRjBDRF9NQVJLLAotCURSRVEzX01BUkssCi0JU0RJRjBXUF9NQVJLLAotCVNDSUYwX0NUU19NQVJLLAotCURSRVEyX01BUkssCi0JU0RJRjBDTEtfTUFSSywKLQlTQ0lGMF9SVFNfTUFSSywKLQlJUkw3X01BUkssCi0JU0RJRjBEM19NQVJLLAotCVNDSUYwX1NDS19NQVJLLAotCUlSTDZfTUFSSywKLQlTRElGMEQyX01BUkssCi0JU0NJRjBfUlhEX01BUkssCi0JSVJMNV9NQVJLLAotCVNESUYwRDFfTUFSSywKLQlTQ0lGMF9UWERfTUFSSywKLQlJUkw0X01BUkssCi0JU0RJRjBEMF9NQVJLLAotCi0JU0NJRjVfU0NLX01BUkssCi0JRlJCX01BUkssCi0JU0NJRjVfUlhEX01BUkssCi0JSU9JUzE2X01BUkssCi0JU0NJRjVfVFhEX01BUkssCi0JQ0UyQl9NQVJLLAotCURSQUszX01BUkssCi0JQ0UyQV9NQVJLLAotCVNDSUY0X1NDS19NQVJLLAotCURSQUsyX01BUkssCi0JU1NJM19XU19NQVJLLAotCVNDSUY0X1JYRF9NQVJLLAotCURSQUsxX01BUkssCi0JU1NJM19TREFUQV9NQVJLLAotCUZTVEFUVVNfTUFSSywKLQlTQ0lGNF9UWERfTUFSSywKLQlEUkFLMF9NQVJLLAotCVNTSTNfU0NLX01BUkssCi0JRlNFX01BUkssCisJSEFDMV9TRE9VVF9NQVJLLCBIQUMxX1NESU5fTUFSSywgSEFDMV9TWU5DX01BUkssIEhBQzFfQklUQ0xLX01BUkssCisJSEFDMF9TRE9VVF9NQVJLLCBIQUMwX1NESU5fTUFSSywgSEFDMF9TWU5DX01BUkssIEhBQzBfQklUQ0xLX01BUkssCisJU1NJMF9TREFUQV9NQVJLLCBTU0kwX1NDS19NQVJLLCBTU0kwX1dTX01BUkssIFNTSTBfQ0xLX01BUkssCisJU1NJMV9TREFUQV9NQVJLLCBTU0kxX1NDS19NQVJLLCBTU0kxX1dTX01BUkssIFNTSTFfQ0xLX01BUkssCisJU1NJMl9TREFUQV9NQVJLLCBTU0kyX1NDS19NQVJLLCBTU0kyX1dTX01BUkssCisJU1NJM19TREFUQV9NQVJLLCBTU0kzX1NDS19NQVJLLCBTU0kzX1dTX01BUkssCisJU0RJRjFDTURfTUFSSywgU0RJRjFDRF9NQVJLLCBTRElGMVdQX01BUkssIFNESUYxQ0xLX01BUkssCisJU0RJRjFEM19NQVJLLCBTRElGMUQyX01BUkssIFNESUYxRDFfTUFSSywgU0RJRjFEMF9NQVJLLAorCVNESUYwQ01EX01BUkssIFNESUYwQ0RfTUFSSywgU0RJRjBXUF9NQVJLLCBTRElGMENMS19NQVJLLAorCVNESUYwRDNfTUFSSywgU0RJRjBEMl9NQVJLLCBTRElGMEQxX01BUkssIFNESUYwRDBfTUFSSywKKwlUQ0xLX01BUkssCisJSVJMN19NQVJLLCBJUkw2X01BUkssIElSTDVfTUFSSywgSVJMNF9NQVJLLAogCVBJTk1VWF9NQVJLX0VORCwKIH07CiAKQEAgLTM3Nyw3ICsyNzEsNiBAQAogCVBJTk1VWF9EQVRBKFBKMV9EQVRBLCBQSjFfSU4sIFBKMV9PVVQsIFBKMV9JTl9QVSksCiAKIAkvKiBQQSBGTiAqLwotCVBJTk1VWF9NQVJLX0JFR0lOLAogCVBJTk1VWF9EQVRBKENERV9NQVJLLAkJUDFNU0VMMl8wLCBQQTdfRk4pLAogCVBJTk1VWF9EQVRBKERJU1BfTUFSSywJCVAxTVNFTDJfMCwgUEE2X0ZOKSwKIAlQSU5NVVhfREFUQShEUjVfTUFSSywJCVAxTVNFTDJfMCwgUEE1X0ZOKSwKQEAgLTQzNCw3ICszMjcsNyBAQAogCiAJLyogUEQgRk4gKi8KIAlQSU5NVVhfREFUQShEQ0xLT1VUX01BUkssCVBEN19GTiksCi0JUElOTVVYX0RBVEEoU0NJRjFfU0xLX01BUkssCVBENl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjFfU0NLX01BUkssCVBENl9GTiksCiAJUElOTVVYX0RBVEEoU0NJRjFfUlhEX01BUkssCVBENV9GTiksCiAJUElOTVVYX0RBVEEoU0NJRjFfVFhEX01BUkssCVBENF9GTiksCiAJUElOTVVYX0RBVEEoREFDSzFfTUFSSywJCVAxTVNFTDEzXzEsIFAxTVNFTDEyXzAsIFBEM19GTiksCkBAIC02NjIsNyArNTU1LDcgQEAKIAlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCMCwJCURCMF9NQVJLKSwKIAlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWF9FUiwJCUVUSF9SWF9FUl9NQVJLKSwKIAlQSU5NVVhfR1BJTyhHUElPX0ZOX0RDTEtPVVQsCQlEQ0xLT1VUX01BUkspLAotCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfU0xLLAkJU0NJRjFfU0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfU0NLLAkJU0NJRjFfU0NLX01BUkspLAogCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfUlhELAkJU0NJRjFfUlhEX01BUkspLAogCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjFfVFhELAkJU0NJRjFfVFhEX01BUkspLAogCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzEsCQlEQUNLMV9NQVJLKSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lkbGUuYyBiL2FyY2gvc2gva2VybmVsL2lkbGUuYwppbmRleCBmZTU5Y2NmLi5mMzVlZDAzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9pZGxlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaWRsZS5jCkBAIC0zOCw3ICszOCw3IEBACiB9CiBfX3NldHVwKCJobHQiLCBobHRfc2V0dXApOwogCi1zdGF0aWMgdm9pZCBkZWZhdWx0X2lkbGUodm9pZCkKK3ZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpCiB7CiAJaWYgKCFobHRfY291bnRlcikgewogCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW9fdHJhcHBlZC5jIGIvYXJjaC9zaC9rZXJuZWwvaW9fdHJhcHBlZC5jCmluZGV4IDM5Y2Q3ZjMuLmMyMjg1M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2lvX3RyYXBwZWQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9pb190cmFwcGVkLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMzIsNiArMzMsMTUgQEAKICNlbmRpZgogc3RhdGljIERFRklORV9TUElOTE9DSyh0cmFwcGVkX2xvY2spOwogCitzdGF0aWMgaW50IHRyYXBwZWRfaW9fZGlzYWJsZSBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgaW50IF9faW5pdCB0cmFwcGVkX2lvX3NldHVwKGNoYXIgKl9fdW51c2VkKQoreworCXRyYXBwZWRfaW9fZGlzYWJsZSA9IDE7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJub2lvdHJhcCIsIHRyYXBwZWRfaW9fc2V0dXApOworCiBpbnQgcmVnaXN0ZXJfdHJhcHBlZF9pbyhzdHJ1Y3QgdHJhcHBlZF9pbyAqdGlvcCkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTM5LDYgKzQ5LDkgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZXNbVFJBUFBFRF9QQUdFU19NQVhdOwogCWludCBrLCBuOwogCisJaWYgKHVubGlrZWx5KHRyYXBwZWRfaW9fZGlzYWJsZSkpCisJCXJldHVybiAwOworCiAJLyogc3RydWN0dXJlIG11c3QgYmUgcGFnZSBhbGlnbmVkICovCiAJaWYgKCh1bnNpZ25lZCBsb25nKXRpb3AgJiAoUEFHRV9TSVpFIC0gMSkpCiAJCWdvdG8gYmFkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IGRkYWZiYmIuLjZkOTQ3MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTE3MCwyMCArMTcwLDMyIEBACiAKIGFzbWxpbmthZ2Ugdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpOwogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKK2ludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHVzcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8ocCk7CiAJc3RydWN0IHB0X3JlZ3MgKmNoaWxkcmVnczsKLSNpZiBkZWZpbmVkKENPTkZJR19TSF9GUFUpCisjaWYgZGVmaW5lZChDT05GSUdfU0hfRlBVKSB8fCBkZWZpbmVkKENPTkZJR19TSF9EU1ApCiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TSF9GUFUpCiAJdW5sYXp5X2ZwdSh0c2ssIHJlZ3MpOwogCXAtPnRocmVhZC5mcHUgPSB0c2stPnRocmVhZC5mcHU7CiAJY29weV90b19zdG9wcGVkX2NoaWxkX3VzZWRfbWF0aChwKTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfU0hfRFNQKQorCWlmIChpc19kc3BfZW5hYmxlZCh0c2spKSB7CisJCS8qIFdlIGNhbiB1c2UgdGhlIF9fc2F2ZV9kc3Agb3IganVzdCBjb3B5IHRoZSBzdHJ1Y3Q6CisJCSAqIF9fc2F2ZV9kc3AocCk7CisJCSAqIHAtPnRocmVhZC5kc3Bfc3RhdHVzLnN0YXR1cyB8PSBTUl9EU1AKKwkJICovCisJCXAtPnRocmVhZC5kc3Bfc3RhdHVzID0gdHNrLT50aHJlYWQuZHNwX3N0YXR1czsKKwl9CisjZW5kaWYKKwogCWNoaWxkcmVncyA9IHRhc2tfcHRfcmVncyhwKTsKIAkqY2hpbGRyZWdzID0gKnJlZ3M7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3NfNjQuYwppbmRleCBjOTBjN2U1Li45NmJlODM5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC00MjUsNyArNDI1LDcgQEAKIAogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCk7CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKaW5kZXggMjljYTA5ZC4uZjdiMjJkZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlXzMyLmMKQEAgLTIwMCw3ICsyMDAsOCBAQAogCQkgICAgICAgdW5zaWduZWQgaW50IHBvcywgdW5zaWduZWQgaW50IGNvdW50LAogCQkgICAgICAgdm9pZCAqa2J1Ziwgdm9pZCBfX3VzZXIgKnVidWYpCiB7Ci0JY29uc3Qgc3RydWN0IHB0X2RzcHJlZ3MgKnJlZ3MgPSB0YXNrX3B0X2RzcHJlZ3ModGFyZ2V0KTsKKwljb25zdCBzdHJ1Y3QgcHRfZHNwcmVncyAqcmVncyA9CisJCShzdHJ1Y3QgcHRfZHNwcmVncyAqKSZ0YXJnZXQtPnRocmVhZC5kc3Bfc3RhdHVzLmRzcF9yZWdzOwogCWludCByZXQ7CiAKIAlyZXQgPSB1c2VyX3JlZ3NldF9jb3B5b3V0KCZwb3MsICZjb3VudCwgJmtidWYsICZ1YnVmLCByZWdzLApAQCAtMjE3LDcgKzIxOCw4IEBACiAJCSAgICAgICB1bnNpZ25lZCBpbnQgcG9zLCB1bnNpZ25lZCBpbnQgY291bnQsCiAJCSAgICAgICBjb25zdCB2b2lkICprYnVmLCBjb25zdCB2b2lkIF9fdXNlciAqdWJ1ZikKIHsKLQlzdHJ1Y3QgcHRfZHNwcmVncyAqcmVncyA9IHRhc2tfcHRfZHNwcmVncyh0YXJnZXQpOworCXN0cnVjdCBwdF9kc3ByZWdzICpyZWdzID0KKwkJKHN0cnVjdCBwdF9kc3ByZWdzICopJnRhcmdldC0+dGhyZWFkLmRzcF9zdGF0dXMuZHNwX3JlZ3M7CiAJaW50IHJldDsKIAogCXJldCA9IHVzZXJfcmVnc2V0X2NvcHlpbigmcG9zLCAmY291bnQsICZrYnVmLCAmdWJ1ZiwgcmVncywKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IDI0YzYwMjUuLjA0YTYwMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtMTAzLDEyICsxMDMsMTEgQEAKIAlzaXplID0gbWVtcGFyc2UocCwgJnApOwogCiAJaWYgKHNpemUgPiBfX01FTU9SWV9TSVpFKSB7Ci0JCXN0YXRpYyBjaGFyIG1zZ1tdIF9faW5pdGRhdGEgPSBLRVJOX0VSUgorCQlwcmludGsoS0VSTl9FUlIKIAkJCSJVc2luZyBtZW09IHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIGtlcm5lbCBtZW1vcnkgIgogCQkJImlzIG5vdCBhbGxvd2VkLlxuIgogCQkJIiAgUmVjb21waWxlIHRoZSBrZXJuZWwgd2l0aCB0aGUgY29ycmVjdCB2YWx1ZSBmb3IgIgotCQkJIkNPTkZJR19NRU1PUllfU0laRS5cbiI7Ci0JCXByaW50ayhtc2cpOworCQkJIkNPTkZJR19NRU1PUllfU0laRS5cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwc18zMi5jCmluZGV4IDYwZGNmODcuLjMwY2E5YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzXzMyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHNfMzIuYwpAQCAtNjY0LDYgKzY2NCw4IEBACiAJaWYgKGlzX2RzcF9pbnN0KHJlZ3MpKSB7CiAJCS8qIEVuYWJsZSBEU1AgbW9kZSwgYW5kIHJlc3RhcnQgaW5zdHJ1Y3Rpb24uICovCiAJCXJlZ3MtPnNyIHw9IFNSX0RTUDsKKwkJLyogU2F2ZSBEU1AgbW9kZSAqLworCQl0c2stPnRocmVhZC5kc3Bfc3RhdHVzLnN0YXR1cyB8PSBTUl9EU1A7CiAJCXJldHVybjsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vS2NvbmZpZyBiL2FyY2gvc2gvbW0vS2NvbmZpZwppbmRleCAxMGMyNDM1Li5kNDA3OWNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL0tjb25maWcKKysrIGIvYXJjaC9zaC9tbS9LY29uZmlnCkBAIC0yNTEsMTggKzI1MSw2IEBACiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MDUKIAlkZWZhdWx0IHkKIAotY29uZmlnIFNIX0RJUkVDVF9NQVBQRUQKLQlib29sICJVc2UgZGlyZWN0LW1hcHBlZCBjYWNoaW5nIgotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIGNvbmZpZ3VyZSB0aGUgY2FjaGVzIHRvIGJlIGRpcmVjdC1tYXBwZWQsCi0JICBldmVuIGlmIHRoZSBjYWNoZSBzdXBwb3J0cyBhIDIgb3IgNC13YXkgbW9kZS4gVGhpcyBpcyB1c2VmdWwgcHJpbWFyaWx5Ci0JICBmb3IgZGVidWdnaW5nIG9uIHBsYXRmb3JtcyB3aXRoIDIgYW5kIDQtd2F5IGNhY2hlcyAoU0g3NzUwUi9TSDc3NTFSLAotCSAgU0g0LTIwMiwgU0g0LTUwMSwgZXRjLikKLQotCSAgVHVybiB0aGlzIG9wdGlvbiBvZmYgZm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBoYXZlIGEgZGlyZWN0LW1hcHBlZAotCSAgY2FjaGUsIGFuZCB5b3UgaGF2ZSBubyBuZWVkIHRvIHJ1biB0aGUgY2FjaGVzIGluIHN1Y2ggYSBjb25maWd1cmF0aW9uLgotCiBjaG9pY2UKIAlwcm9tcHQgIkNhY2hlIG1vZGUiCiAJZGVmYXVsdCBDQUNIRV9XUklURUJBQ0sgaWYgQ1BVX1NIMkEgfHwgQ1BVX1NIMyB8fCBDUFVfU0g0IHx8IENQVV9TSDUKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZwppbmRleCBjM2VhMjE1Li5jYzEyY2Q0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnCkBAIC0xMjQsNiArMTI0LDkgQEAKIGNvbmZpZyBPRgogCWRlZl9ib29sIHkKIAorY29uZmlnIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCisJZGVmX2Jvb2wgeSBpZiBTUEFSQzY0CisKIHNvdXJjZSAiaW5pdC9LY29uZmlnIgogCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL0tjb25maWcuZGVidWcgYi9hcmNoL3NwYXJjL0tjb25maWcuZGVidWcKaW5kZXggYjhhMTVlMi4uOTBkNWZlMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvc3BhcmMvS2NvbmZpZy5kZWJ1ZwpAQCAtMjIsMTQgKzIyLDYgQEAKIGNvbmZpZyBTVEFDS19ERUJVRwogCWJvb2wgIlN0YWNrIE92ZXJmbG93IERldGVjdGlvbiBTdXBwb3J0IgogCi1jb25maWcgREVCVUdfUEFHRUFMTE9DCi0JYm9vbCAiRGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnMiCi0JZGVwZW5kcyBvbiBTUEFSQzY0ICYmIERFQlVHX0tFUk5FTCAmJiAhSElCRVJOQVRJT04KLQloZWxwCi0JICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgotCSAgVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMKLQkgIG9mIG1lbW9yeSBjb3JydXB0aW9ucy4KLQogY29uZmlnIE1DT1VOVAogCWJvb2wKIAlkZXBlbmRzIG9uIFNQQVJDNjQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW16b25lLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL21tem9uZS5oCmluZGV4IGViZjU5ODYuLmU4YzY0ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbW16b25lLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9tbXpvbmUuaApAQCAtMyw2ICszLDggQEAKIAogI2lmZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAKKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisKIGV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOwogCiAjZGVmaW5lIE5PREVfREFUQShuaWQpCQkobm9kZV9kYXRhW25pZF0pCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzMyLmgKaW5kZXggYmYyZDUzMi4uNDZmOTFhYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja18zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfMzIuaApAQCAtMTc3LDYgKzE3Nyw4IEBACiAjZGVmaW5lIF9fcmF3X3dyaXRlX3VubG9jayhydykJZG8geyAocncpLT5sb2NrID0gMDsgfSB3aGlsZSgwKQogCiAjZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfc3Bpbl9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhydywgZmxhZ3MpICAgX19yYXdfcmVhZF9sb2NrKHJ3KQorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKHJ3LCBmbGFncykgIF9fcmF3X3dyaXRlX2xvY2socncpCiAKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zcGlubG9ja182NC5oCmluZGV4IGM0ZDI3NGQuLmY2YjJiOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3BpbmxvY2tfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NwaW5sb2NrXzY0LmgKQEAgLTIxMSw5ICsyMTEsMTEgQEAKIH0KIAogI2RlZmluZSBfX3Jhd19yZWFkX2xvY2socCkJX19yZWFkX2xvY2socCkKKyNkZWZpbmUgX19yYXdfcmVhZF9sb2NrX2ZsYWdzKHAsIGYpIF9fcmVhZF9sb2NrKHApCiAjZGVmaW5lIF9fcmF3X3JlYWRfdHJ5bG9jayhwKQlfX3JlYWRfdHJ5bG9jayhwKQogI2RlZmluZSBfX3Jhd19yZWFkX3VubG9jayhwKQlfX3JlYWRfdW5sb2NrKHApCiAjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2socCkJX193cml0ZV9sb2NrKHApCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MocCwgZikgX193cml0ZV9sb2NrKHApCiAjZGVmaW5lIF9fcmF3X3dyaXRlX3VubG9jayhwKQlfX3dyaXRlX3VubG9jayhwKQogI2RlZmluZSBfX3Jhd193cml0ZV90cnlsb2NrKHApCV9fd3JpdGVfdHJ5bG9jayhwKQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggYTQ2YzNhMi4uM2ExYjdiZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2hlYWRfNjQuUwpAQCAtNjg2LDcgKzY4Niw3IEBACiAJICogcG9pbnQuCiAJICoKIAkgKiBUaGVyZSB1c2VkIHRvIGJlIGVub3Jtb3VzIGNvbXBsZXhpdHkgd3J0LiB0cmFuc2ZlcnJpbmcKLQkgKiBvdmVyIGZyb20gdGhlIGZpcndtYXJlJ3MgdHJhcCB0YWJsZSB0byB0aGUgTGludXgga2VybmVsJ3MuCisJICogb3ZlciBmcm9tIHRoZSBmaXJtd2FyZSdzIHRyYXAgdGFibGUgdG8gdGhlIExpbnV4IGtlcm5lbCdzLgogCSAqIEZvciBleGFtcGxlLCB0aGVyZSB3YXMgYSBjaGlja2VuICYgZWdnIHByb2JsZW0gd3J0LiBidWlsZGluZwogCSAqIHRoZSBPQlAgcGFnZSB0YWJsZXMsIHlldCBuZWVkaW5nIHRvIGJlIG9uIHRoZSBMaW51eCBrZXJuZWwKIAkgKiB0cmFwIHRhYmxlICh0byB0cmFuc2xhdGUgUEFHRV9PRkZTRVQgYWRkcmVzc2VzKSBpbiBvcmRlciB0bwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc18zMi5jCmluZGV4IGY0YmVlMzUuLjI4MzBiNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzMyLmMKQEAgLTQ1NSw3ICs0NTUsNyBAQAogICovCiBleHRlcm4gdm9pZCByZXRfZnJvbV9mb3JrKHZvaWQpOwogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCiAJCXVuc2lnbmVkIGxvbmcgdW51c2VkLAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGE3Mzk1NGIuLjQwNDFmOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTU2MSw3ICs1NjEsNyBAQAogICogUGFyZW50IC0tPiAgJW8wID09IGNoaWxkcyAgcGlkLCAlbzEgPT0gMAogICogQ2hpbGQgIC0tPiAgJW8wID09IHBhcmVudHMgcGlkLCAlbzEgPT0gMQogICovCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCiAJCXVuc2lnbmVkIGxvbmcgdW51c2VkLAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9oaWdobWVtLmMgYi9hcmNoL3NwYXJjL21tL2hpZ2htZW0uYwppbmRleCA3NTJkMGM5Li43OTE2ZmViIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2hpZ2htZW0uYworKysgYi9hcmNoL3NwYXJjL21tL2hpZ2htZW0uYwpAQCAtMzksNiArMzksNyBAQAogCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCiAJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiAKKwlkZWJ1Z19rbWFwX2F0b21pYyh0eXBlKTsKIAlpZHggPSB0eXBlICsgS01fVFlQRV9OUipzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwppbmRleCA0MzQyMjRlLi40MzRiYTEyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwpAQCAtNzU3LDcgKzc1Nyw3IEBACiAJdm9pZCAoKnByb2MpKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB2b2lkICopOwogCXVuc2lnbmVkIGNoYXIgYWRkcl9idWZbNF0sIG5ldG1hc2tfYnVmWzRdOwogCi0JaWYgKGRldi0+b3BlbiAhPSB1bWxfbmV0X29wZW4pCisJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX29wZW4gIT0gdW1sX25ldF9vcGVuKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKIAlscCA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvcGNhcF91c2VyLmggYi9hcmNoL3VtL2RyaXZlcnMvcGNhcF91c2VyLmgKaW5kZXggOTZiODBiNS4uZDhiYTYxNSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3BjYXBfdXNlci5oCisrKyBiL2FyY2gvdW0vZHJpdmVycy9wY2FwX3VzZXIuaApAQCAtMTksMTMgKzE5LDMgQEAKIAogZXh0ZXJuIGludCBwY2FwX3VzZXJfcmVhZChpbnQgZmQsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHBjYXBfZGF0YSAqcHJpKTsKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9wb3J0LmggYi9hcmNoL3VtL2RyaXZlcnMvcG9ydC5oCmluZGV4IDkxMTc2MDkuLjM3MmE4MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9wb3J0LmgKKysrIGIvYXJjaC91bS9kcml2ZXJzL3BvcnQuaApAQCAtMTgsMTMgKzE4LDMgQEAKIAogI2VuZGlmCiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvc3NsLmggYi9hcmNoL3VtL2RyaXZlcnMvc3NsLmgKaW5kZXggOTg0MTJhYS4uMzE0ZDE3NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3NzbC5oCisrKyBiL2FyY2gvdW0vZHJpdmVycy9zc2wuaApAQCAtMTEsMTMgKzExLDMgQEAKIAogI2VuZGlmCiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvc3RkaW9fY29uc29sZS5oIGIvYXJjaC91bS9kcml2ZXJzL3N0ZGlvX2NvbnNvbGUuaAppbmRleCA1MDVhM2Q1Li42ZDgyNzVmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvc3RkaW9fY29uc29sZS5oCisrKyBiL2FyY2gvdW0vZHJpdmVycy9zdGRpb19jb25zb2xlLmgKQEAgLTksMTMgKzksMyBAQAogZXh0ZXJuIHZvaWQgc2F2ZV9jb25zb2xlX2ZsYWdzKHZvaWQpOwogI2VuZGlmCiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCmluZGV4IDBhODY4MTEuLmY5MzQyMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCkBAIC0xNywxMiArMTcsMTIgQEAKICAqIEphbWVzIE1jTWVjaGFuCiAgKi8KIAotI2RlZmluZSBNQUpPUl9OUiBVQkRfTUFKT1IKICNkZWZpbmUgVUJEX1NISUZUIDQKIAogI2luY2x1ZGUgImxpbnV4L2tlcm5lbC5oIgogI2luY2x1ZGUgImxpbnV4L21vZHVsZS5oIgogI2luY2x1ZGUgImxpbnV4L2Jsa2Rldi5oIgorI2luY2x1ZGUgImxpbnV4L2F0YS5oIgogI2luY2x1ZGUgImxpbnV4L2hkcmVnLmgiCiAjaW5jbHVkZSAibGludXgvaW5pdC5oIgogI2luY2x1ZGUgImxpbnV4L2Nkcm9tLmgiCkBAIC0xMTUsNyArMTE1LDcgQEAKIH07CiAKIC8qIFByb3RlY3RlZCBieSB1YmRfbG9jayAqLwotc3RhdGljIGludCBmYWtlX21ham9yID0gTUFKT1JfTlI7CitzdGF0aWMgaW50IGZha2VfbWFqb3IgPSBVQkRfTUFKT1I7CiBzdGF0aWMgc3RydWN0IGdlbmRpc2sgKnViZF9nZW5kaXNrW01BWF9ERVZdOwogc3RhdGljIHN0cnVjdCBnZW5kaXNrICpmYWtlX2dlbmRpc2tbTUFYX0RFVl07CiAKQEAgLTI5OSw3ICsyOTksNyBAQAogCQl9CiAKIAkJbXV0ZXhfbG9jaygmdWJkX2xvY2spOwotCQlpZihmYWtlX21ham9yICE9IE1BSk9SX05SKXsKKwkJaWYgKGZha2VfbWFqb3IgIT0gVUJEX01BSk9SKSB7CiAJCQkqZXJyb3Jfb3V0ID0gIkNhbid0IGFzc2lnbiBhIGZha2UgbWFqb3IgdHdpY2UiOwogCQkJZ290byBvdXQxOwogCQl9CkBAIC04MTgsMTMgKzgxOCwxMyBAQAogCWRpc2stPmZpcnN0X21pbm9yID0gdW5pdCA8PCBVQkRfU0hJRlQ7CiAJZGlzay0+Zm9wcyA9ICZ1YmRfYmxvcHM7CiAJc2V0X2NhcGFjaXR5KGRpc2ssIHNpemUgLyA1MTIpOwotCWlmKG1ham9yID09IE1BSk9SX05SKQorCWlmIChtYWpvciA9PSBVQkRfTUFKT1IpCiAJCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAidWJkJWMiLCAnYScgKyB1bml0KTsKIAllbHNlCiAJCXNwcmludGYoZGlzay0+ZGlza19uYW1lLCAidWJkX2Zha2UlZCIsIHVuaXQpOwogCiAJLyogc3lzZnMgcmVnaXN0ZXIgKG5vdCBmb3IgaWRlIGZha2UgZGV2aWNlcykgKi8KLQlpZiAobWFqb3IgPT0gTUFKT1JfTlIpIHsKKwlpZiAobWFqb3IgPT0gVUJEX01BSk9SKSB7CiAJCXViZF9kZXZzW3VuaXRdLnBkZXYuaWQgICA9IHVuaXQ7CiAJCXViZF9kZXZzW3VuaXRdLnBkZXYubmFtZSA9IERSSVZFUl9OQU1FOwogCQl1YmRfZGV2c1t1bml0XS5wZGV2LmRldi5yZWxlYXNlID0gdWJkX2RldmljZV9yZWxlYXNlOwpAQCAtODcxLDEzICs4NzEsMTMgQEAKIAl1YmRfZGV2LT5xdWV1ZS0+cXVldWVkYXRhID0gdWJkX2RldjsKIAogCWJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHModWJkX2Rldi0+cXVldWUsIE1BWF9TRyk7Ci0JZXJyID0gdWJkX2Rpc2tfcmVnaXN0ZXIoTUFKT1JfTlIsIHViZF9kZXYtPnNpemUsIG4sICZ1YmRfZ2VuZGlza1tuXSk7CisJZXJyID0gdWJkX2Rpc2tfcmVnaXN0ZXIoVUJEX01BSk9SLCB1YmRfZGV2LT5zaXplLCBuLCAmdWJkX2dlbmRpc2tbbl0pOwogCWlmKGVycil7CiAJCSplcnJvcl9vdXQgPSAiRmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZSI7CiAJCWdvdG8gb3V0X2NsZWFudXA7CiAJfQogCi0JaWYoZmFrZV9tYWpvciAhPSBNQUpPUl9OUikKKwlpZiAoZmFrZV9tYWpvciAhPSBVQkRfTUFKT1IpCiAJCXViZF9kaXNrX3JlZ2lzdGVyKGZha2VfbWFqb3IsIHViZF9kZXYtPnNpemUsIG4sCiAJCQkJICAmZmFrZV9nZW5kaXNrW25dKTsKIApAQCAtMTA1OSwxMCArMTA1OSwxMCBAQAogCWNoYXIgKmVycm9yOwogCWludCBpLCBlcnI7CiAKLQlpZiAocmVnaXN0ZXJfYmxrZGV2KE1BSk9SX05SLCAidWJkIikpCisJaWYgKHJlZ2lzdGVyX2Jsa2RldihVQkRfTUFKT1IsICJ1YmQiKSkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKGZha2VfbWFqb3IgIT0gTUFKT1JfTlIpIHsKKwlpZiAoZmFrZV9tYWpvciAhPSBVQkRfTUFKT1IpIHsKIAkJY2hhciBuYW1lW3NpemVvZigidWJkX25ublwwIildOwogCiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInViZF8lZCIsIGZha2VfbWFqb3IpOwpAQCAtMTMwOSwxNiArMTMwOSwxNSBAQAogCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCB1YmQgKnViZF9kZXYgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGhkX2RyaXZlaWQgdWJkX2lkID0gewotCQkuY3lscwkJPSAwLAotCQkuaGVhZHMJCT0gMTI4LAotCQkuc2VjdG9ycwk9IDMyLAotCX07CisJdTE2IHViZF9pZFtBVEFfSURfV09SRFNdOwogCiAJc3dpdGNoIChjbWQpIHsKIAkJc3RydWN0IGNkcm9tX3ZvbGN0cmwgdm9sdW1lOwogCWNhc2UgSERJT19HRVRfSURFTlRJVFk6Ci0JCXViZF9pZC5jeWxzID0gdWJkX2Rldi0+c2l6ZSAvICgxMjggKiAzMiAqIDUxMik7CisJCW1lbXNldCgmdWJkX2lkLCAwLCBBVEFfSURfV09SRFMgKiAyKTsKKwkJdWJkX2lkW0FUQV9JRF9DWUxTXQk9IHViZF9kZXYtPnNpemUgLyAoMTI4ICogMzIgKiA1MTIpOworCQl1YmRfaWRbQVRBX0lEX0hFQURTXQk9IDEyODsKKwkJdWJkX2lkW0FUQV9JRF9TRUNUT1JTXQk9IDMyOwogCQlpZihjb3B5X3RvX3VzZXIoKGNoYXIgX191c2VyICopIGFyZywgKGNoYXIgKikgJnViZF9pZCwKIAkJCQkgc2l6ZW9mKHViZF9pZCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMveHRlcm0uaCBiL2FyY2gvdW0vZHJpdmVycy94dGVybS5oCmluZGV4IGYzM2E2ZTcuLjU2YjljNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy94dGVybS5oCisrKyBiL2FyY2gvdW0vZHJpdmVycy94dGVybS5oCkBAIC0xMCwxMyArMTAsMyBAQAogCiAjZW5kaWYKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKaW5kZXggNjJkZGJhNi4uMjcyYTgxZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaApAQCAtOCwxMyArOCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vbW11LmgKaW5kZXggMmNmMzVjMi4uY2YyNTlkZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL21tdS5oCkBAIC0xMCwxMyArMTAsMyBAQAogCiAjZW5kaWYKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGRhLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3BkYS5oCmluZGV4IDBkOGJmMzMuLmRkY2Q3NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGRhLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wZGEuaApAQCAtMTksMTMgKzE5LDMgQEAKIAogI2VuZGlmCiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDkwNjJhNmUuLjcxODk4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC02MCwxMyArNjAsMyBAQAogCiAjZW5kaWYKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaAppbmRleCAwNDQ2ZjQ1Li4wODRkZTRhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCkBAIC0xMzQsMTMgKzEzNCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9mcmFtZV9rZXJuLmggYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2ZyYW1lX2tlcm4uaAppbmRleCBjZTk1MTRmLi43NjA3ODQ5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2ZyYW1lX2tlcm4uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2ZyYW1lX2tlcm4uaApAQCAtMjAsMTMgKzIwLDMgQEAKIAogI2VuZGlmCiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2luaXRyZC5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9pbml0cmQuaAppbmRleCA0MzliOWE4Li4yMjY3M2JjIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2luaXRyZC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvaW5pdHJkLmgKQEAgLTEwLDEzICsxMCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9pcnFfa2Vybi5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9pcnFfa2Vybi5oCmluZGV4IGZiYTM4OTUuLmIwNWQyMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvaXJxX2tlcm4uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL2lycV9rZXJuLmgKQEAgLTE2LDEzICsxNiwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9tZW1fa2Vybi5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9tZW1fa2Vybi5oCmluZGV4IGNiN2UxOTYuLjY5YmUwZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbWVtX2tlcm4uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL21lbV9rZXJuLmgKQEAgLTE4LDEzICsxOCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC91YmRfdXNlci5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC91YmRfdXNlci5oCmluZGV4IGJiNjY1MTcuLjM4NDUwNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvdWJkX3VzZXIuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL3ViZF91c2VyLmgKQEAgLTE0LDEzICsxNCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3VtL2tlcm5lbC9NYWtlZmlsZQppbmRleCA0OTllNWU5Li4zODhlYzBhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3VtL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjgsNyArMjgsNyBAQAogCSQoY2FsbCBpZl9jaGFuZ2VkLHF1b3RlMSkKIAogcXVpZXRfY21kX3F1b3RlMSA9IFFVT1RFICAgJEAKLSAgICAgIGNtZF9xdW90ZTEgPSBzZWQgLWUgJ3MvIi9cXCIvZycgLWUgJ3MvXi8iLycgLWUgJ3MvJCQvXFxuIi8nIFwKKyAgICAgIGNtZF9xdW90ZTEgPSBzZWQgLWUgJ3MvIi9cXCIvZycgLWUgJ3MvXi8iLycgLWUgJ3MvJCQvXFxuIiwvJyBcCiAJCSAgICQ8ID4gJEAKIAogJChvYmopL2NvbmZpZy5jOiAkKHNyYykvY29uZmlnLmMuaW4gJChvYmopL2NvbmZpZy50bXAgRk9SQ0UKQEAgLTM2LDkgKzM2LDkgQEAKIAogcXVpZXRfY21kX3F1b3RlMiA9IFFVT1RFICAgJEAKICAgICAgIGNtZF9xdW90ZTIgPSBzZWQgLWUgJy9DT05GSUcveycgICAgICAgICAgXAotCQkgIC1lICdzLyJDT05GSUciXDsvIiIvJyAgICAgICAgXAorCQkgIC1lICdzLyJDT05GSUciLy8nICAgICAgICAgICAgXAogCQkgIC1lICdyICQob2JqKS9jb25maWcudG1wJyAgICAgXAogCQkgIC1lICdhIFwnICAgICAgICAgICAgICAgICAgICAgXAotCQkgIC1lICciIlw7JyAgICAgICAgICAgICAgICAgICAgXAorCQkgIC1lICciIicgICAgICAgICAgICAgICAgICAgICAgXAogCQkgIC1lICd9JyAgICAgICAgICAgICAgICAgICAgICAgXAogCQkgICQ8ID4gJEAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2NvbmZpZy5jLmluIGIvYXJjaC91bS9rZXJuZWwvY29uZmlnLmMuaW4KaW5kZXggYzA2MmNiZi4uYjdhNDNmZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvY29uZmlnLmMuaW4KKysrIGIvYXJjaC91bS9rZXJuZWwvY29uZmlnLmMuaW4KQEAgLTcsMTEgKzcsMTUgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlICJpbml0LmgiCiAKLXN0YXRpYyBfX2luaXRkYXRhIGNoYXIgKmNvbmZpZyA9ICJDT05GSUciOworc3RhdGljIF9faW5pdGRhdGEgY29uc3QgY2hhciAqY29uZmlnW10gPSB7CisiQ09ORklHIgorfTsKIAogc3RhdGljIGludCBfX2luaXQgcHJpbnRfY29uZmlnKGNoYXIgKmxpbmUsIGludCAqYWRkKQogewotCXByaW50ZigiJXMiLCBjb25maWcpOworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoY29uZmlnKS9zaXplb2YoY29uZmlnWzBdKTsgaSsrKQorCQlwcmludGYoIiVzIiwgY29uZmlnW2ldKTsKIAlleGl0KDApOwogfQogCkBAIC0yMCwxMyArMjQsMyBAQAogIiAgICBQcmludHMgdGhlIGNvbmZpZyBmaWxlIHRoYXQgdGhpcyBVTUwgYmluYXJ5IHdhcyBnZW5lcmF0ZWQgZnJvbS5cblxuIgogKTsKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvdW0va2VybmVsL3Byb2Nlc3MuYwppbmRleCBhMWM2ZDA3Li40YTI4YTE1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAl1c2Vyc3BhY2UoJmN1cnJlbnQtPnRocmVhZC5yZWdzLnJlZ3MpOwogfQogCi1pbnQgY29weV90aHJlYWQoaW50IG5yLCB1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCiAJCXVuc2lnbmVkIGxvbmcgc3RhY2tfdG9wLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLAogCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3N5c2NhbGwuYyBiL2FyY2gvdW0va2VybmVsL3N5c2NhbGwuYwppbmRleCBjNGRmNzA1Li5hNDYyNWM3IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvc3lzY2FsbC5jCkBAIC0xMjcsNyArMTI3LDggQEAKIAogCWZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JcmV0ID0gdW1fZXhlY3ZlKGZpbGVuYW1lLCBhcmd2LCBlbnZwKTsKKwlyZXQgPSB1bV9leGVjdmUoKGNoYXIgKilmaWxlbmFtZSwgKGNoYXIgX191c2VyICpfX3VzZXIgKilhcmd2LAorCQkJKGNoYXIgX191c2VyICpfX3VzZXIgKikgZW52cCk7CiAJc2V0X2ZzKGZzKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3N0YXJ0X3VwLmMgYi9hcmNoL3VtL29zLUxpbnV4L3N0YXJ0X3VwLmMKaW5kZXggMTgzZGIyNi4uMDJlZTlhZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9zdGFydF91cC5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvc3RhcnRfdXAuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIAlpZiAoKHB0cmFjZShQVFJBQ0VfT0xEU0VUT1BUSU9OUywgcGlkLCAwLAogCQkgICAodm9pZCAqKSBQVFJBQ0VfT19UUkFDRVNZU0dPT0QpIDwgMCkpCi0JCWZhdGFsX3BlcnJvcigiY2hlY2tfcHRyYWNlOiBQVFJBQ0VfT0xEU0VUT1BUSU9OUyBmYWlsZWQiKTsKKwkJZmF0YWxfcGVycm9yKCJjaGVja19zeXNlbXU6IFBUUkFDRV9PTERTRVRPUFRJT05TIGZhaWxlZCIpOwogCiAJd2hpbGUgKDEpIHsKIAkJY291bnQrKzsKQEAgLTI1MiwxMiArMjUyLDEyIEBACiAJCQlnb3RvIGZhaWw7CiAJCUNBVENIX0VJTlRSKG4gPSB3YWl0cGlkKHBpZCwgJnN0YXR1cywgV1VOVFJBQ0VEKSk7CiAJCWlmIChuIDwgMCkKLQkJCWZhdGFsX3BlcnJvcigiY2hlY2tfcHRyYWNlIDogd2FpdCBmYWlsZWQiKTsKKwkJCWZhdGFsX3BlcnJvcigiY2hlY2tfc3lzZW11OiB3YWl0IGZhaWxlZCIpOwogCiAJCWlmIChXSUZTVE9QUEVEKHN0YXR1cykgJiYKIAkJICAgIChXU1RPUFNJRyhzdGF0dXMpID09IChTSUdUUkFQfDB4ODApKSkgewogCQkJaWYgKCFjb3VudCkgewotCQkJCW5vbl9mYXRhbCgiY2hlY2tfcHRyYWNlIDogU1lTRU1VX1NJTkdMRVNURVAgIgorCQkJCW5vbl9mYXRhbCgiY2hlY2tfc3lzZW11OiBTWVNFTVVfU0lOR0xFU1RFUCAiCiAJCQkJCSAgImRvZXNuJ3Qgc2luZ2xlc3RlcCIpOwogCQkJCWdvdG8gZmFpbDsKIAkJCX0KQEAgLTI3MSw3ICsyNzEsNyBAQAogCQllbHNlIGlmIChXSUZTVE9QUEVEKHN0YXR1cykgJiYgKFdTVE9QU0lHKHN0YXR1cykgPT0gU0lHVFJBUCkpCiAJCQljb3VudCsrOwogCQllbHNlIHsKLQkJCW5vbl9mYXRhbCgiY2hlY2tfcHRyYWNlIDogZXhwZWN0ZWQgU0lHVFJBUCBvciAiCisJCQlub25fZmF0YWwoImNoZWNrX3N5c2VtdTogZXhwZWN0ZWQgU0lHVFJBUCBvciAiCiAJCQkJICAiKFNJR1RSQVAgfCAweDgwKSwgZ290IHN0YXR1cyA9ICVkXG4iLAogCQkJCSAgc3RhdHVzKTsKIAkJCWdvdG8gZmFpbDsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvYXNtL2FyY2hwYXJhbS5oIGIvYXJjaC91bS9zeXMtaTM4Ni9hc20vYXJjaHBhcmFtLmgKaW5kZXggOTNmZDcyMy4uMmExOGE4OCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9hc20vYXJjaHBhcmFtLmgKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9hc20vYXJjaHBhcmFtLmgKQEAgLTE0LDEzICsxNCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL2NoZWNrc3VtLmggYi9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvY2hlY2tzdW0uaAppbmRleCAwY2I0NjQ1Li5lZDQ3NDQ1IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvY2hlY2tzdW0uaAorKysgYi9hcmNoL3VtL3N5cy1pMzg2L3NoYXJlZC9zeXNkZXAvY2hlY2tzdW0uaApAQCAtMTk5LDEzICsxOTksMyBAQAogCiAjZW5kaWYKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc3lzX2NhbGxfdGFibGUuUyBiL2FyY2gvdW0vc3lzLWkzODYvc3lzX2NhbGxfdGFibGUuUwppbmRleCAwMGU1ZjUyMC4uYzYyNjBkZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9zeXNfY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc3lzX2NhbGxfdGFibGUuUwpAQCAtOSw2ICs5LDE3IEBACiAKICNkZWZpbmUgb2xkX21tYXAgb2xkX21tYXBfaTM4NgogCisjZGVmaW5lIHB0cmVnc19mb3JrIHN5c19mb3JrCisjZGVmaW5lIHB0cmVnc19leGVjdmUgc3lzX2V4ZWN2ZQorI2RlZmluZSBwdHJlZ3NfaW9wbCBzeXNfaW9wbAorI2RlZmluZSBwdHJlZ3Nfdm04Nm9sZCBzeXNfdm04Nm9sZAorI2RlZmluZSBwdHJlZ3Nfc2lncmV0dXJuIHN5c19zaWdyZXR1cm4KKyNkZWZpbmUgcHRyZWdzX2Nsb25lIHN5c19jbG9uZQorI2RlZmluZSBwdHJlZ3Nfdm04NiBzeXNfdm04NgorI2RlZmluZSBwdHJlZ3NfcnRfc2lncmV0dXJuIHN5c19ydF9zaWdyZXR1cm4KKyNkZWZpbmUgcHRyZWdzX3NpZ2FsdHN0YWNrIHN5c19zaWdhbHRzdGFjaworI2RlZmluZSBwdHJlZ3NfdmZvcmsgc3lzX3Zmb3JrCisKIC5zZWN0aW9uIC5yb2RhdGEsImEiCiAKICNpbmNsdWRlICIuLi8uLi94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUyIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWlhNjQvc3lzZGVwL3B0cmFjZS5oIGIvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvcHRyYWNlLmgKaW5kZXggNDJkZDhmYi4uMGYwZjRlNiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvcHRyYWNlLmgKKysrIGIvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvcHRyYWNlLmgKQEAgLTE0LDEzICsxNCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvc2lnY29udGV4dC5oIGIvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvc2lnY29udGV4dC5oCmluZGV4IGYxNWZiMjUuLjc2YjQzMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWlhNjQvc3lzZGVwL3NpZ2NvbnRleHQuaAorKysgYi9hcmNoL3VtL3N5cy1pYTY0L3N5c2RlcC9zaWdjb250ZXh0LmgKQEAgLTgsMTMgKzgsMyBAQAogCiAjZW5kaWYKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWlhNjQvc3lzZGVwL3N5c2NhbGxzLmggYi9hcmNoL3VtL3N5cy1pYTY0L3N5c2RlcC9zeXNjYWxscy5oCmluZGV4IDRhMWY0NmUuLjVmNjcwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWlhNjQvc3lzZGVwL3N5c2NhbGxzLmgKKysrIGIvYXJjaC91bS9zeXMtaWE2NC9zeXNkZXAvc3lzY2FsbHMuaApAQCAtOCwxMyArOCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtcHBjL21pc2N0aGluZ3MuYyBiL2FyY2gvdW0vc3lzLXBwYy9taXNjdGhpbmdzLmMKaW5kZXggMzczMDYxYy4uMWMxMWFlZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtcHBjL21pc2N0aGluZ3MuYworKysgYi9hcmNoL3VtL3N5cy1wcGMvbWlzY3RoaW5ncy5jCkBAIC00MCwxNCArNDAsMyBAQAogfQogLyogRU5EIHN0dWZmIHRha2VuIGZyb20gYXJjaC9wcGMva2VybmVsL3Byb2Nlc3MuYyAqLwogCi0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1wcGMvcHRyYWNlLmMgYi9hcmNoL3VtL3N5cy1wcGMvcHRyYWNlLmMKaW5kZXggOGU3MWI0Ny4uNjZlZjE1NSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtcHBjL3B0cmFjZS5jCisrKyBiL2FyY2gvdW0vc3lzLXBwYy9wdHJhY2UuYwpAQCAtNTYsMTMgKzU2LDMgQEAKIAlyZXR1cm4gcHV0X3VzZXIodG1wLCAodW5zaWduZWQgbG9uZyAqKSBkYXRhKTsKIH0KIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXBwYy9wdHJhY2VfdXNlci5jIGIvYXJjaC91bS9zeXMtcHBjL3B0cmFjZV91c2VyLmMKaW5kZXggZmYwYjljMC4uMjI0ZDI0MCAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtcHBjL3B0cmFjZV91c2VyLmMKKysrIGIvYXJjaC91bS9zeXMtcHBjL3B0cmFjZV91c2VyLmMKQEAgLTI3LDEzICsyNywzIEBACiAgICAgfQogICAgIHJldHVybiAwOwogfQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXBwYy9zaGFyZWQvc3lzZGVwL3B0cmFjZS5oIGIvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvcHRyYWNlLmgKaW5kZXggZGYyMzk3ZC4uMGUzMjMwZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvcHRyYWNlLmgKKysrIGIvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvcHRyYWNlLmgKQEAgLTkxLDEzICs5MSwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvc2lnY29udGV4dC5oIGIvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvc2lnY29udGV4dC5oCmluZGV4IGYyMGQ5NjUuLmI3Mjg2ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXBwYy9zaGFyZWQvc3lzZGVwL3NpZ2NvbnRleHQuaAorKysgYi9hcmNoL3VtL3N5cy1wcGMvc2hhcmVkL3N5c2RlcC9zaWdjb250ZXh0LmgKQEAgLTUwLDEzICs1MCwzIEBACiAKICNlbmRpZgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvc3lzY2FsbHMuaCBiL2FyY2gvdW0vc3lzLXBwYy9zaGFyZWQvc3lzZGVwL3N5c2NhbGxzLmgKaW5kZXggNjc5ZGYzNS4uMWZmODE1NSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtcHBjL3NoYXJlZC9zeXNkZXAvc3lzY2FsbHMuaAorKysgYi9hcmNoL3VtL3N5cy1wcGMvc2hhcmVkL3N5c2RlcC9zeXNjYWxscy5oCkBAIC00MSwxMyArNDEsMyBAQAogCiAjZGVmaW5lIExBU1RfQVJDSF9TWVNDQUxMIF9fTlJfZmFkdmlzZTY0CiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1wcGMvc2lnY29udGV4dC5jIGIvYXJjaC91bS9zeXMtcHBjL3NpZ2NvbnRleHQuYwppbmRleCA0YmRjMTVjLi40MDY5NGQwIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1wcGMvc2lnY29udGV4dC5jCisrKyBiL2FyY2gvdW0vc3lzLXBwYy9zaWdjb250ZXh0LmMKQEAgLTIsMTMgKzIsMyBAQAogI2luY2x1ZGUgImFzbS9zaWdjb250ZXh0LmgiCiAjaW5jbHVkZSAic3lzZGVwL3B0cmFjZS5oIgogCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9hcmNocGFyYW0uaCBiL2FyY2gvdW0vc3lzLXg4Nl82NC9hc20vYXJjaHBhcmFtLmgKaW5kZXggMjcwZWQ5NS4uNmMwODM2NiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9hcmNocGFyYW0uaAorKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvYXNtL2FyY2hwYXJhbS5oCkBAIC0xNCwxMyArMTQsMyBAQAogCiAjZW5kaWYKIAotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLXg4Nl82NC9hc20vbW9kdWxlLmggYi9hcmNoL3VtL3N5cy14ODZfNjQvYXNtL21vZHVsZS5oCmluZGV4IDM1YjU0OTEuLjhlYjc5YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9hc20vbW9kdWxlLmgKKysrIGIvYXJjaC91bS9zeXMteDg2XzY0L2FzbS9tb2R1bGUuaApAQCAtMTgsMTMgKzE4LDMgQEAKIAogI2VuZGlmCiAKLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvbWVtLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvbWVtLmMKaW5kZXggM2Y1OWEwYS4uM2Y4ZGY4YSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L21lbS5jCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9tZW0uYwpAQCAtMTQsMTIgKzE0LDMgQEAKIHVuc2lnbmVkIGxvbmcgdm1fZGF0YV9kZWZhdWx0X2ZsYWdzMzIgPSBfX1ZNX0RBVEFfREVGQVVMVF9GTEFHUzsKIHVuc2lnbmVkIGxvbmcgdm1fZm9yY2VfZXhlYzMyID0gUFJPVF9FWEVDOwogCi0vKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIEVtYWNzIHdpbGwgbm90aWNlIHRoaXMgc3R1ZmYgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBhbmQgYXV0b21hdGljYWxseQotICogYWRqdXN0IHRoZSBzZXR0aW5ncyBmb3IgdGhpcyBidWZmZXIgb25seS4gIFRoaXMgbXVzdCByZW1haW4gYXQgdGhlIGVuZAotICogb2YgdGhlIGZpbGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtZmlsZS1zdHlsZTogImxpbnV4IgotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCA0NTE2MWI4Li41YjIxOTZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTM0LDYgKzM0LDggQEAKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAorCXNlbGVjdCBIQVZFX0ZUUkFDRV9OTUlfRU5URVIgaWYgRFlOQU1JQ19GVFJBQ0UKKwlzZWxlY3QgSEFWRV9GVFJBQ0VfU1lTQ0FMTFMKIAlzZWxlY3QgSEFWRV9LVk0KIAlzZWxlY3QgSEFWRV9BUkNIX0tHREIKIAlzZWxlY3QgSEFWRV9BUkNIX1RSQUNFSE9PSwpAQCAtMTY1LDYgKzE2Nyw5IEBACiBjb25maWcgQVJDSF9TVVBQT1JUU19PUFRJTUlaRURfSU5MSU5JTkcKIAlkZWZfYm9vbCB5CiAKK2NvbmZpZyBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQworCWRlZl9ib29sIHkKKwogIyBVc2UgdGhlIGdlbmVyaWMgaW50ZXJydXB0IGhhbmRsaW5nIGNvZGUgaW4ga2VybmVsL2lycS86CiBjb25maWcgR0VORVJJQ19IQVJESVJRUwogCWJvb2wKQEAgLTExNDEsNyArMTE0Niw3IEBACiAJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCiAJLS0taGVscC0tLQogCSAgU3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgTlVNQSBOb2RlcyBhdmFpbGFibGUgb24gdGhlIHRhcmdldAotCSAgc3lzdGVtLiAgSW5jcmVhc2VzIG1lbW9yeSByZXNlcnZlZCB0byBhY2NvbW9kYXRlIHZhcmlvdXMgdGFibGVzLgorCSAgc3lzdGVtLiAgSW5jcmVhc2VzIG1lbW9yeSByZXNlcnZlZCB0byBhY2NvbW1vZGF0ZSB2YXJpb3VzIHRhYmxlcy4KIAogY29uZmlnIEhBVkVfQVJDSF9CT09UTUVNCiAJZGVmX2Jvb2wgeQpAQCAtMTMxOSw3ICsxMzI0LDcgQEAKIAkgIGFkZCB3cml0ZWJhY2sgZW50cmllcy4KIAogCSAgQ2FuIGJlIGRpc2FibGVkIHdpdGggZGlzYWJsZV9tdHJyX2NsZWFudXAgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCi0JICBUaGUgbGFyZ2VzdCBtdHJyIGVudHJ5IHNpemUgZm9yIGEgY29udGlub3VzIGJsb2NrIGNhbiBiZSBzZXQgd2l0aAorCSAgVGhlIGxhcmdlc3QgbXRyciBlbnRyeSBzaXplIGZvciBhIGNvbnRpbnVvdXMgYmxvY2sgY2FuIGJlIHNldCB3aXRoCiAJICBtdHJyX2NodW5rX3NpemUuCiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCkBAIC0xODM0LDggKzE4MzksOCBAQAogCiBjb25maWcgRE1BUgogCWJvb2wgIlN1cHBvcnQgZm9yIERNQSBSZW1hcHBpbmcgRGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFg4Nl82NCAmJiBQQ0lfTVNJICYmIEFDUEkgJiYgRVhQRVJJTUVOVEFMCi0JLS0taGVscC0tLQorCWRlcGVuZHMgb24gUENJX01TSSAmJiBBQ1BJICYmIEVYUEVSSU1FTlRBTAorCWhlbHAKIAkgIERNQSByZW1hcHBpbmcgKERNQVIpIGRldmljZXMgc3VwcG9ydCBlbmFibGVzIGluZGVwZW5kZW50IGFkZHJlc3MKIAkgIHRyYW5zbGF0aW9ucyBmb3IgRGlyZWN0IE1lbW9yeSBBY2Nlc3MgKERNQSkgZnJvbSBkZXZpY2VzLgogCSAgVGhlc2UgRE1BIHJlbWFwcGluZyBkZXZpY2VzIGFyZSByZXBvcnRlZCB2aWEgQUNQSSB0YWJsZXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcuZGVidWcgYi9hcmNoL3g4Ni9LY29uZmlnLmRlYnVnCmluZGV4IGZkYjQ1ZGYuLmQ4MzU5ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuZGVidWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZy5kZWJ1ZwpAQCAtNzIsMTQgKzcyLDYgQEAKIAogCSAgVGhpcyBvcHRpb24gd2lsbCBzbG93IGRvd24gcHJvY2VzcyBjcmVhdGlvbiBzb21ld2hhdC4KIAotY29uZmlnIERFQlVHX1BBR0VBTExPQwotCWJvb2wgIkRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCi0JLS0taGVscC0tLQotCSAgVW5tYXAgcGFnZXMgZnJvbSB0aGUga2VybmVsIGxpbmVhciBtYXBwaW5nIGFmdGVyIGZyZWVfcGFnZXMoKS4KLQkgIFRoaXMgcmVzdWx0cyBpbiBhIGxhcmdlIHNsb3dkb3duLCBidXQgaGVscHMgdG8gZmluZCBjZXJ0YWluIHR5cGVzCi0JICBvZiBtZW1vcnkgY29ycnVwdGlvbnMuCi0KIGNvbmZpZyBERUJVR19QRVJfQ1BVX01BUFMKIAlib29sICJEZWJ1ZyBhY2Nlc3MgdG8gcGVyX2NwdSBtYXBzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L01ha2VmaWxlIGIvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQppbmRleCBmYjczN2NlLi42NjMzYjZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKQEAgLTU3LDYgKzU3LDcgQEAKICMgSG93IHRvIGNvbXBpbGUgdGhlIDE2LWJpdCBjb2RlLiAgTm90ZSB3ZSBhbHdheXMgY29tcGlsZSBmb3IgLW1hcmNoPWkzODYsCiAjIHRoYXQgd2F5IHdlIGNhbiBjb21wbGFpbiB0byB0aGUgdXNlciBpZiB0aGUgQ1BVIGlzIGluc3VmZmljaWVudC4KIEtCVUlMRF9DRkxBR1MJOj0gJChMSU5VWElOQ0xVREUpIC1nIC1PcyAtRF9TRVRVUCAtRF9fS0VSTkVMX18gXAorCQkgICAtRERJU0FCTEVfQlJBTkNIX1BST0ZJTElORyBcCiAJCSAgIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgXAogCQkgICAtbWFyY2g9aTM4NiAtbXJlZ3Bhcm09MyBcCiAJCSAgIC1pbmNsdWRlICQoc3JjdHJlZSkvJChzcmMpL2NvZGUxNmdjYy5oIFwKQEAgLTY2LDcgKzY3LDcgQEAKIAkJCSQoY2FsbCBjYy1vcHRpb24sIC1mbm8tdW5pdC1hdC1hLXRpbWUpKSBcCiAJCSAgICQoY2FsbCBjYy1vcHRpb24sIC1mbm8tc3RhY2stcHJvdGVjdG9yKSBcCiAJCSAgICQoY2FsbCBjYy1vcHRpb24sIC1tcHJlZmVycmVkLXN0YWNrLWJvdW5kYXJ5PTIpCi1LQlVJTERfQ0ZMQUdTICs9ICAgJChjYWxsIGNjLW9wdGlvbiwtbTMyKQorS0JVSUxEX0NGTEFHUwkrPSAkKGNhbGwgY2Mtb3B0aW9uLCAtbTMyKQogS0JVSUxEX0FGTEFHUwk6PSAkKEtCVUlMRF9DRkxBR1MpIC1EX19BU1NFTUJMWV9fCiAKICQob2JqKS9iekltYWdlOiBhc2ZsYWdzLXkgIDo9ICQoU1ZHQV9NT0RFKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDNjYTRjMTkuLjY1NTUxYzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTgsNiArOCw3IEBACiAKIEtCVUlMRF9DRkxBR1MgOj0gLW0kKEJJVFMpIC1EX19LRVJORUxfXyAkKExJTlVYX0lOQ0xVREUpIC1PMgogS0JVSUxEX0NGTEFHUyArPSAtZm5vLXN0cmljdC1hbGlhc2luZyAtZlBJQworS0JVSUxEX0NGTEFHUyArPSAtRERJU0FCTEVfQlJBTkNIX1BST0ZJTElORwogY2ZsYWdzLSQoQ09ORklHX1g4Nl82NCkgOj0gLW1jbW9kZWw9c21hbGwKIEtCVUlMRF9DRkxBR1MgKz0gJChjZmxhZ3MteSkKIEtCVUlMRF9DRkxBR1MgKz0gJChjYWxsIGNjLW9wdGlvbiwtZmZyZWVzdGFuZGluZykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvbWVtb3J5LmMgYi9hcmNoL3g4Ni9ib290L21lbW9yeS5jCmluZGV4IDhjM2MyNWYuLjUwNTRjMmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvbWVtb3J5LmMKKysrIGIvYXJjaC94ODYvYm9vdC9tZW1vcnkuYwpAQCAtMiw2ICsyLDcgQEAKICAqCiAgKiAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiBMaW51cyBUb3J2YWxkcwogICogICBDb3B5cmlnaHQgMjAwNyByUGF0aCwgSW5jLiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyAqICAgQ29weXJpZ2h0IDIwMDkgSW50ZWwgQ29ycG9yYXRpb247IGF1dGhvciBILiBQZXRlciBBbnZpbgogICoKICAqICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExpbnV4IGtlcm5lbCwgYW5kIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyCiAgKiAgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLgpAQCAtMTYsMjQgKzE3LDM4IEBACiAKICNkZWZpbmUgU01BUAkweDUzNGQ0MTUwCS8qIEFTQ0lJICJTTUFQIiAqLwogCitzdHJ1Y3QgZTgyMF9leHRfZW50cnkgeworCXN0cnVjdCBlODIwZW50cnkgc3RkOworCXUzMiBleHRfZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiBzdGF0aWMgaW50IGRldGVjdF9tZW1vcnlfZTgyMCh2b2lkKQogewogCWludCBjb3VudCA9IDA7CiAJdTMyIG5leHQgPSAwOwotCXUzMiBzaXplLCBpZDsKKwl1MzIgc2l6ZSwgaWQsIGVkaTsKIAl1OCBlcnI7CiAJc3RydWN0IGU4MjBlbnRyeSAqZGVzYyA9IGJvb3RfcGFyYW1zLmU4MjBfbWFwOworCXN0YXRpYyBzdHJ1Y3QgZTgyMF9leHRfZW50cnkgYnVmOyAvKiBzdGF0aWMgc28gaXQgaXMgemVyb2VkICovCisKKwkvKgorCSAqIFNldCB0aGlzIGhlcmUgc28gdGhhdCBpZiB0aGUgQklPUyBkb2Vzbid0IGNoYW5nZSB0aGlzIGZpZWxkCisJICogYnV0IHN0aWxsIGRvZXNuJ3QgY2hhbmdlICVlY3gsIHdlJ3JlIHN0aWxsIG9rYXkuLi4KKwkgKi8KKwlidWYuZXh0X2ZsYWdzID0gMTsKIAogCWRvIHsKLQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZTgyMGVudHJ5KTsKKwkJc2l6ZSA9IHNpemVvZiBidWY7CiAKLQkJLyogSW1wb3J0YW50OiAlZWR4IGlzIGNsb2JiZXJlZCBieSBzb21lIEJJT1NlcywKLQkJICAgc28gaXQgbXVzdCBiZSBlaXRoZXIgdXNlZCBmb3IgdGhlIGVycm9yIG91dHB1dAotCQkgICBvciBleHBsaWNpdGx5IG1hcmtlZCBjbG9iYmVyZWQuICovCi0JCWFzbSgiaW50ICQweDE1OyBzZXRjICUwIgorCQkvKiBJbXBvcnRhbnQ6ICVlZHggYW5kICVlc2kgYXJlIGNsb2JiZXJlZCBieSBzb21lIEJJT1NlcywKKwkJICAgc28gdGhleSBtdXN0IGJlIGVpdGhlciB1c2VkIGZvciB0aGUgZXJyb3Igb3V0cHV0CisJCSAgIG9yIGV4cGxpY2l0bHkgbWFya2VkIGNsb2JiZXJlZC4gIEdpdmVuIHRoYXQsIGFzc3VtZSB0aGVyZQorCQkgICBpcyBzb21ldGhpbmcgb3V0IHRoZXJlIGNsb2JiZXJpbmcgJWVicCBhbmQgJWVkaSwgdG9vLiAqLworCQlhc20oInB1c2hsICUlZWJwOyBpbnQgJDB4MTU7IHBvcGwgJSVlYnA7IHNldGMgJTAiCiAJCSAgICA6ICI9ZCIgKGVyciksICIrYiIgKG5leHQpLCAiPWEiIChpZCksICIrYyIgKHNpemUpLAotCQkgICAgICAiPW0iICgqZGVzYykKLQkJICAgIDogIkQiIChkZXNjKSwgImQiIChTTUFQKSwgImEiICgweGU4MjApKTsKKwkJICAgICAgIj1EIiAoZWRpKSwgIittIiAoYnVmKQorCQkgICAgOiAiRCIgKCZidWYpLCAiZCIgKFNNQVApLCAiYSIgKDB4ZTgyMCkKKwkJICAgIDogImVzaSIpOwogCiAJCS8qIEJJT1NlcyB3aGljaCB0ZXJtaW5hdGUgdGhlIGNoYWluIHdpdGggQ0YgPSAxIGFzIG9wcG9zZWQKIAkJICAgdG8gJWVieCA9IDAgZG9uJ3QgYWx3YXlzIHJlcG9ydCB0aGUgU01BUCBzaWduYXR1cmUgb24KQEAgLTUxLDggKzY2LDE0IEBACiAJCQlicmVhazsKIAkJfQogCisJCS8qIEFDUEkgMy4wIGFkZGVkIHRoZSBleHRlbmRlZCBmbGFncyBzdXBwb3J0LiAgSWYgYml0IDAKKwkJICAgaW4gdGhlIGV4dGVuZGVkIGZsYWdzIGlzIHplcm8sIHdlJ3JlIHN1cHBvc2VkIHRvIHNpbXBseQorCQkgICBpZ25vcmUgdGhlIGVudHJ5IC0tIGEgYmFja3dhcmRzIGluY29tcGF0aWJsZSBjaGFuZ2UhICovCisJCWlmIChzaXplID4gMjAgJiYgIShidWYuZXh0X2ZsYWdzICYgMSkpCisJCQljb250aW51ZTsKKworCQkqZGVzYysrID0gYnVmLnN0ZDsKIAkJY291bnQrKzsKLQkJZGVzYysrOwogCX0gd2hpbGUgKG5leHQgJiYgY291bnQgPCBBUlJBWV9TSVpFKGJvb3RfcGFyYW1zLmU4MjBfbWFwKSk7CiAKIAlyZXR1cm4gYm9vdF9wYXJhbXMuZTgyMF9lbnRyaWVzID0gY291bnQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwppbmRleCBkYjBjODAzLi5hNTA1MjAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCisrKyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKQEAgLTgyOCw0ICs4MjgsNiBAQAogCS5xdWFkIHN5c19kdXAzCQkJLyogMzMwICovCiAJLnF1YWQgc3lzX3BpcGUyCiAJLnF1YWQgc3lzX2lub3RpZnlfaW5pdDEKKwkucXVhZCBjb21wYXRfc3lzX3ByZWFkdgorCS5xdWFkIGNvbXBhdF9zeXNfcHdyaXRldgogaWEzMl9zeXNjYWxsX2VuZDoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCBiMzg5NGJmLi5lNTVkZmMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0xMjYsNiArMTI2LDExIEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQogdm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKTsKIGV4dGVybiBjb25zdCBpbnQgcm9kYXRhX3Rlc3RfZGF0YTsKK3ZvaWQgc2V0X2tlcm5lbF90ZXh0X3J3KHZvaWQpOwordm9pZCBzZXRfa2VybmVsX3RleHRfcm8odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNldF9rZXJuZWxfdGV4dF9ydyh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfa2VybmVsX3RleHRfcm8odm9pZCkgeyB9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ERUJVR19ST0RBVEFfVEVTVApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1bWFzay5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1bWFzay5oCmluZGV4IGE3ZjNjNzUuLjYxYzg1MmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdW1hc2suaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVtYXNrLmgKQEAgLTMsOCArMyw2IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQogZXh0ZXJuIGNwdW1hc2tfdmFyX3QgY3B1X2NhbGxpbl9tYXNrOwogZXh0ZXJuIGNwdW1hc2tfdmFyX3QgY3B1X2NhbGxvdXRfbWFzazsKIGV4dGVybiBjcHVtYXNrX3Zhcl90IGNwdV9pbml0aWFsaXplZF9tYXNrOwpAQCAtMTIsMjEgKzEwLDUgQEAKIAogZXh0ZXJuIHZvaWQgc2V0dXBfY3B1X2xvY2FsX21hc2tzKHZvaWQpOwogCi0jZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCi0KLWV4dGVybiBjcHVtYXNrX3QgY3B1X2NhbGxpbl9tYXA7Ci1leHRlcm4gY3B1bWFza190IGNwdV9jYWxsb3V0X21hcDsKLWV4dGVybiBjcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkOwotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfc2libGluZ19zZXR1cF9tYXA7Ci0KLSNkZWZpbmUgY3B1X2NhbGxpbl9tYXNrCQkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9jYWxsaW5fbWFwKQotI2RlZmluZSBjcHVfY2FsbG91dF9tYXNrCSgoc3RydWN0IGNwdW1hc2sgKikmY3B1X2NhbGxvdXRfbWFwKQotI2RlZmluZSBjcHVfaW5pdGlhbGl6ZWRfbWFzawkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9pbml0aWFsaXplZCkKLSNkZWZpbmUgY3B1X3NpYmxpbmdfc2V0dXBfbWFzawkoKHN0cnVjdCBjcHVtYXNrICopJmNwdV9zaWJsaW5nX3NldHVwX21hcCkKLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2NwdV9sb2NhbF9tYXNrcyh2b2lkKSB7IH0KLQotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KLQogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9BU01fWDg2X0NQVU1BU0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZml4bWFwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaAppbmRleCA2M2E3OWM3Li44MTkzN2E1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtMTExLDYgKzExMSw4IEBACiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUCiAJRklYX1BBUkFWSVJUX0JPT1RNQVAsCiAjZW5kaWYKKwlGSVhfVEVYVF9QT0tFMCwJLyogcmVzZXJ2ZSAyIHBhZ2VzIGZvciB0ZXh0X3Bva2UoKSAqLworCUZJWF9URVhUX1BPS0UxLAogCV9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCiAjaWZkZWYgQ09ORklHX1BST1ZJREVfT0hDSTEzOTRfRE1BX0lOSVQKIAlGSVhfT0hDSTEzOTRfQkFTRSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggZGIyNGMyMi4uYmQyYzY1MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTI4LDYgKzI4LDEzIEBACiAKICNlbmRpZgogCisvKiBGSVhNRTogSSBkb24ndCB3YW50IHRvIHN0YXkgaGFyZGNvZGVkICovCisjaWZkZWYgQ09ORklHX1g4Nl82NAorIyBkZWZpbmUgRlRSQUNFX1NZU0NBTExfTUFYICAgICAyOTYKKyNlbHNlCisjIGRlZmluZSBGVFJBQ0VfU1lTQ0FMTF9NQVggICAgIDMzMworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCiAjZGVmaW5lIE1DT1VOVF9BRERSCQkoKGxvbmcpKG1jb3VudCkpCiAjZGVmaW5lIE1DT1VOVF9JTlNOX1NJWkUJNSAvKiBzaXplb2YgbWNvdW50IGNhbGwgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggYTk3N2RlMi4uYjUxYTFlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTg2LDEyICs4Niw0MyBAQAogCiBleHRlcm4gdm9pZCBwY2lfaW9tbXVfYWxsb2Modm9pZCk7CiAKKy8qIE1TSSBhcmNoIGhvb2sgKi8KKyNkZWZpbmUgYXJjaF9zZXR1cF9tc2lfaXJxcyBhcmNoX3NldHVwX21zaV9pcnFzCisKKyNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUyAoZG1hX29wcy0+aXNfcGh5cykKKworI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfRE1BX0FQSV9ERUJVRykKKworI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkgICAgICAgXAorCSAgICAgICAgZG1hX2FkZHJfdCBBRERSX05BTUU7CisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkgICAgICAgICBcCisJICAgICAgICBfX3UzMiBMRU5fTkFNRTsKKyNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAgKChQVFIpLT5BRERSX05BTUUpCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKSAgICAgICAgIFwKKwkgICAgICAgICgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKSAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAgKChQVFIpLT5MRU5fTkFNRSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKSAgICAgICAgICAgXAorCSAgICAgICAgKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCisKKyNlbHNlCisKKyNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpICAgICAgIGRtYV9hZGRyX3QgQUREUl9OQU1FWzBdOworI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpIHVuc2lnbmVkIExFTl9OQU1FWzBdOworI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkgIHNpemVvZigoUFRSKS0+QUREUl9OQU1FKQorI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkgXAorCSAgICAgICAgZG8geyBicmVhazsgfSB3aGlsZSAocGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpKQorI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpICAgICAgICAgICAgc2l6ZW9mKChQVFIpLT5MRU5fTkFNRSkKKyNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKSBcCisJICAgICAgICBkbyB7IGJyZWFrOyB9IHdoaWxlIChwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpKQorCisjZW5kaWYKKwogI2VuZGlmICAvKiBfX0tFUk5FTF9fICovCiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0jIGluY2x1ZGUgInBjaV8zMi5oIgotI2Vsc2UKLSMgaW5jbHVkZSAicGNpXzY0LmgiCisjaWZkZWYgQ09ORklHX1g4Nl82NAorI2luY2x1ZGUgInBjaV82NC5oIgogI2VuZGlmCiAKIC8qIGltcGxlbWVudCB0aGUgcGNpXyBETUEgQVBJIGluIHRlcm1zIG9mIHRoZSBnZW5lcmljIGRldmljZSBkbWFfIG9uZSAqLwpAQCAtMTA5LDExICsxNDAsNiBAQAogCXJldHVybiBzZC0+bm9kZTsKIH0KIAotc3RhdGljIGlubGluZSBjcHVtYXNrX3QgX19wY2lidXNfdG9fY3B1bWFzayhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotCXJldHVybiBub2RlX3RvX2NwdW1hc2soX19wY2lidXNfdG9fbm9kZShidXMpKTsKLX0KLQogc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqCiBjcHVtYXNrX29mX3BjaWJ1cyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmYxMjEzYS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfMzIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9YODZfUENJXzMyX0gKLSNkZWZpbmUgX0FTTV9YODZfUENJXzMyX0gKLQotCi0jaWZkZWYgX19LRVJORUxfXwotCi0KLS8qIER5bmFtaWMgRE1BIG1hcHBpbmcgc3R1ZmYuCi0gKiBpMzg2IGhhcyBldmVyeXRoaW5nIG1hcHBlZCBzdGF0aWNhbGx5LgotICovCi0KLXN0cnVjdCBwY2lfZGV2OwotCi0vKiBUaGUgUENJIGFkZHJlc3Mgc3BhY2UgZG9lcyBlcXVhbCB0aGUgcGh5c2ljYWwgbWVtb3J5Ci0gKiBhZGRyZXNzIHNwYWNlLiAgVGhlIG5ldHdvcmtpbmcgYW5kIGJsb2NrIGRldmljZSBsYXllcnMgdXNlCi0gKiB0aGlzIGJvb2xlYW4gZm9yIGJvdW5jZSBidWZmZXIgZGVjaXNpb25zLgotICovCi0jZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMJKDEpCi0KLS8qIHBjaV91bm1hcF97cGFnZSxzaW5nbGV9IGlzIGEgbm9wIHNvLi4uICovCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQlkbWFfYWRkcl90IEFERFJfTkFNRVswXTsKLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQl1bnNpZ25lZCBMRU5fTkFNRVswXTsKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCXNpemVvZigoUFRSKS0+QUREUl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkgXAotCWRvIHsgYnJlYWs7IH0gd2hpbGUgKHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKSkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJc2l6ZW9mKChQVFIpLT5MRU5fTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKSBcCi0JZG8geyBicmVhazsgfSB3aGlsZSAocGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKSkKLQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0KLSNlbmRpZiAvKiBfQVNNX1g4Nl9QQ0lfMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfNjQuaAppbmRleCA0ZGEyMDc5Li5hZTVlNDBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfNjQuaApAQCAtMjQsMjggKzI0LDYgQEAKIAogZXh0ZXJuIHZvaWQgZG1hMzJfcmVzZXJ2ZV9ib290bWVtKHZvaWQpOwogCi0vKiBUaGUgUENJIGFkZHJlc3Mgc3BhY2UgZG9lcyBlcXVhbCB0aGUgcGh5c2ljYWwgbWVtb3J5Ci0gKiBhZGRyZXNzIHNwYWNlLiAgVGhlIG5ldHdvcmtpbmcgYW5kIGJsb2NrIGRldmljZSBsYXllcnMgdXNlCi0gKiB0aGlzIGJvb2xlYW4gZm9yIGJvdW5jZSBidWZmZXIgZGVjaXNpb25zCi0gKgotICogT24gQU1ENjQgaXQgbW9zdGx5IGVxdWFscywgYnV0IHdlIHNldCBpdCB0byB6ZXJvIGlmIGEgaGFyZHdhcmUKLSAqIElPTU1VIChnYXJ0KSBvZiBzb3R3YXJlIElPTU1VIChzd2lvdGxiKSBpcyBhdmFpbGFibGUuCi0gKi8KLSNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUyAoZG1hX29wcy0+aXNfcGh5cykKLQotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkJXAotCWRtYV9hZGRyX3QgQUREUl9OQU1FOwotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCQlcCi0JX191MzIgTEVOX05BTUU7Ci0jZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKQkJCVwKLQkoKFBUUiktPkFERFJfTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCQlcCi0JKCgoUFRSKS0+QUREUl9OQU1FKSA9IChWQUwpKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQkJXAotCSgoUFRSKS0+TEVOX05BTUUpCi0jZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJCVwKLQkoKChQVFIpLT5MRU5fTkFNRSkgPSAoVkFMKSkKLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9BU01fWDg2X1BDSV82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGFlODVhOGQuLjM0YzUyMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC05NCw3ICs5NCw3IEBACiAJdW5zaWduZWQgbG9uZwkJbG9vcHNfcGVyX2ppZmZ5OwogI2lmZGVmIENPTkZJR19TTVAKIAkvKiBjcHVzIHNoYXJpbmcgdGhlIGxhc3QgbGV2ZWwgY2FjaGU6ICovCi0JY3B1bWFza190CQlsbGNfc2hhcmVkX21hcDsKKwljcHVtYXNrX3Zhcl90CQlsbGNfc2hhcmVkX21hcDsKICNlbmRpZgogCS8qIGNwdWlkIHJldHVybmVkIG1heCBjb3JlcyB2YWx1ZTogKi8KIAl1MTYJCQkgeDg2X21heF9jb3JlczsKQEAgLTczNiw2ICs3MzYsNyBAQAogZXh0ZXJuIHZvaWQgbXdhaXRfaWRsZV93aXRoX2hpbnRzKHVuc2lnbmVkIGxvbmcgZWF4LCB1bnNpZ25lZCBsb25nIGVjeCk7CiAKIGV4dGVybiB2b2lkIHNlbGVjdF9pZGxlX3JvdXRpbmUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKTsKK2V4dGVybiB2b2lkIGluaXRfYzFlX21hc2sodm9pZCk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nCQlib290X29wdGlvbl9pZGxlX292ZXJyaWRlOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcJCWlkbGVfaGFsdDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS1hYmkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS1hYmkuaAppbmRleCA4ZTBmOGQxLi44NjcyMzAzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wdHJhY2UtYWJpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLWFiaS5oCkBAIC04MCw4ICs4MCw2IEBACiAKICNkZWZpbmUgUFRSQUNFX1NJTkdMRUJMT0NLCTMzCS8qIHJlc3VtZSBleGVjdXRpb24gdW50aWwgbmV4dCBicmFuY2ggKi8KIAotI2lmZGVmIENPTkZJR19YODZfUFRSQUNFX0JUUwotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKQEAgLTE0MCw2ICsxMzgsNSBAQAogICAgQlRTIHJlY29yZHMgYXJlIHJlYWQgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0LgogICAgUmV0dXJucyBudW1iZXIgb2YgQlRTIHJlY29yZHMgZHJhaW5lZC4KICovCi0jZW5kaWYgLyogQ09ORklHX1g4Nl9QVFJBQ0VfQlRTICovCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9QVFJBQ0VfQUJJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggNDdkMGUyMS4uMTllMGQ4OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmgKQEAgLTIxLDE5ICsyMSwxOSBAQAogZXh0ZXJuIGludCBzbXBfbnVtX3NpYmxpbmdzOwogZXh0ZXJuIHVuc2lnbmVkIGludCBudW1fcHJvY2Vzc29yczsKIAotREVDTEFSRV9QRVJfQ1BVKGNwdW1hc2tfdCwgY3B1X3NpYmxpbmdfbWFwKTsKLURFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9jb3JlX21hcCk7CitERUNMQVJFX1BFUl9DUFUoY3B1bWFza192YXJfdCwgY3B1X3NpYmxpbmdfbWFwKTsKK0RFQ0xBUkVfUEVSX0NQVShjcHVtYXNrX3Zhcl90LCBjcHVfY29yZV9tYXApOwogREVDTEFSRV9QRVJfQ1BVKHUxNiwgY3B1X2xsY19pZCk7CiBERUNMQVJFX1BFUl9DUFUoaW50LCBjcHVfbnVtYmVyKTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY3B1bWFzayAqY3B1X3NpYmxpbmdfbWFzayhpbnQgY3B1KQogewotCXJldHVybiAmcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSk7CisJcmV0dXJuIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjcHVtYXNrICpjcHVfY29yZV9tYXNrKGludCBjcHUpCiB7Ci0JcmV0dXJuICZwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KTsKKwlyZXR1cm4gcGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSk7CiB9CiAKIERFQ0xBUkVfRUFSTFlfUEVSX0NQVSh1MTYsIHg4Nl9jcHVfdG9fYXBpY2lkKTsKQEAgLTEyMSw5ICsxMjEsMTAgQEAKIAlzbXBfb3BzLnNlbmRfY2FsbF9mdW5jX3NpbmdsZV9pcGkoY3B1KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaShjcHVtYXNrX3QgbWFzaykKKyNkZWZpbmUgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2sgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2sKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKLQlzbXBfb3BzLnNlbmRfY2FsbF9mdW5jX2lwaSgmbWFzayk7CisJc21wX29wcy5zZW5kX2NhbGxfZnVuY19pcGkobWFzayk7CiB9CiAKIHZvaWQgY3B1X2Rpc2FibGVfY29tbW9uKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggM2E1Njk2Ni4uZTVlNmNhZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3BpbmxvY2suaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zcGlubG9jay5oCkBAIC0yOTUsNiArMjk1LDkgQEAKIAkJICAgICA6ICIrbSIgKHJ3LT5sb2NrKSA6ICJpIiAoUldfTE9DS19CSUFTKSA6ICJtZW1vcnkiKTsKIH0KIAorI2RlZmluZSBfX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3JlYWRfbG9jayhsb2NrKQorI2RlZmluZSBfX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd193cml0ZV9sb2NrKGxvY2spCisKICNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdXNwZW5kXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdXNwZW5kXzMyLmgKaW5kZXggYTUwNzRiZC4uNDhkY2ZhNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3VzcGVuZF8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N1c3BlbmRfMzIuaApAQCAtMjQsMjggKzI0LDQgQEAKIAl1bnNpZ25lZCBsb25nIHJldHVybl9hZGRyZXNzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotI2lmZGVmIENPTkZJR19BQ1BJCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9laXA7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lc3A7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lYnA7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lYng7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lc2k7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF9lZGk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3NhdmVfcmVnaXN0ZXJfc3RhdGUodW5zaWduZWQgbG9uZyByZXR1cm5fcG9pbnQpCi17Ci0Jc2F2ZWRfZWlwID0gcmV0dXJuX3BvaW50OwotCWFzbSB2b2xhdGlsZSgibW92bCAlJWVzcCwlMCIgOiAiPW0iIChzYXZlZF9lc3ApKTsKLQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlYnAsJTAiIDogIj1tIiAoc2F2ZWRfZWJwKSk7Ci0JYXNtIHZvbGF0aWxlKCJtb3ZsICUlZWJ4LCUwIiA6ICI9bSIgKHNhdmVkX2VieCkpOwotCWFzbSB2b2xhdGlsZSgibW92bCAlJWVkaSwlMCIgOiAiPW0iIChzYXZlZF9lZGkpKTsKLQlhc20gdm9sYXRpbGUoIm1vdmwgJSVlc2ksJTAiIDogIj1tIiAoc2F2ZWRfZXNpKSk7Ci19Ci0KLSNkZWZpbmUgYWNwaV9yZXN0b3JlX3JlZ2lzdGVyX3N0YXRlKCkgIGRvIHt9IHdoaWxlICgwKQotCi0vKiByb3V0aW5lcyBmb3Igc2F2aW5nL3Jlc3RvcmluZyBrZXJuZWwgc3RhdGUgKi8KLWV4dGVybiBpbnQgYWNwaV9zYXZlX3N0YXRlX21lbSh2b2lkKTsKLSNlbmRpZgotCiAjZW5kaWYgLyogX0FTTV9YODZfU1VTUEVORF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBkZjlkNWY3Li44ODIwYTczIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTk0LDYgKzk0LDcgQEAKICNkZWZpbmUgVElGX0ZPUkNFRF9URgkJMjQJLyogdHJ1ZSBpZiBURiBpbiBlZmxhZ3MgYXJ0aWZpY2lhbGx5ICovCiAjZGVmaW5lIFRJRl9ERUJVR0NUTE1TUgkJMjUJLyogdXNlcyB0aHJlYWRfc3RydWN0LmRlYnVnY3RsbXNyICovCiAjZGVmaW5lIFRJRl9EU19BUkVBX01TUgkJMjYgICAgICAvKiB1c2VzIHRocmVhZF9zdHJ1Y3QuZHNfYXJlYV9tc3IgKi8KKyNkZWZpbmUgVElGX1NZU0NBTExfRlRSQUNFCTI3CS8qIGZvciBmdHJhY2Ugc3lzY2FsbCBpbnN0cnVtZW50YXRpb24gKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfVFJBQ0UpCiAjZGVmaW5lIF9USUZfTk9USUZZX1JFU1VNRQkoMSA8PCBUSUZfTk9USUZZX1JFU1VNRSkKQEAgLTExNSwxNSArMTE2LDE3IEBACiAjZGVmaW5lIF9USUZfRk9SQ0VEX1RGCQkoMSA8PCBUSUZfRk9SQ0VEX1RGKQogI2RlZmluZSBfVElGX0RFQlVHQ1RMTVNSCSgxIDw8IFRJRl9ERUJVR0NUTE1TUikKICNkZWZpbmUgX1RJRl9EU19BUkVBX01TUgkoMSA8PCBUSUZfRFNfQVJFQV9NU1IpCisjZGVmaW5lIF9USUZfU1lTQ0FMTF9GVFJBQ0UJKDEgPDwgVElGX1NZU0NBTExfRlRSQUNFKQogCiAvKiB3b3JrIHRvIGRvIGluIHN5c2NhbGxfdHJhY2VfZW50ZXIoKSAqLwogI2RlZmluZSBfVElGX1dPUktfU1lTQ0FMTF9FTlRSWQlcCi0JKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9FTVUgfCBcCisJKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9FTVUgfCBfVElGX1NZU0NBTExfRlRSQUNFIHwJXAogCSBfVElGX1NZU0NBTExfQVVESVQgfCBfVElGX1NFQ0NPTVAgfCBfVElGX1NJTkdMRVNURVApCiAKIC8qIHdvcmsgdG8gZG8gaW4gc3lzY2FsbF90cmFjZV9sZWF2ZSgpICovCiAjZGVmaW5lIF9USUZfV09SS19TWVNDQUxMX0VYSVQJXAotCShfVElGX1NZU0NBTExfVFJBQ0UgfCBfVElGX1NZU0NBTExfQVVESVQgfCBfVElGX1NJTkdMRVNURVApCisJKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IF9USUZfU0lOR0xFU1RFUCB8CVwKKwkgX1RJRl9TWVNDQUxMX0ZUUkFDRSkKIAogLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogI2RlZmluZSBfVElGX1dPUktfTUFTSwkJCQkJCQlcCkBAIC0xMzIsNyArMTM1LDcgQEAKIAkgICBfVElGX1NJTkdMRVNURVB8X1RJRl9TRUNDT01QfF9USUZfU1lTQ0FMTF9FTVUpKQogCiAvKiB3b3JrIHRvIGRvIG9uIGFueSByZXR1cm4gdG8gdXNlciBzcGFjZSAqLwotI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSyAoMHgwMDAwRkZGRiAmIH5fVElGX1NFQ0NPTVApCisjZGVmaW5lIF9USUZfQUxMV09SS19NQVNLICgoMHgwMDAwRkZGRiAmIH5fVElGX1NFQ0NPTVApIHwgX1RJRl9TWVNDQUxMX0ZUUkFDRSkKIAogLyogT25seSB1c2VkIGZvciA2NCBiaXQgKi8KICNkZWZpbmUgX1RJRl9ET19OT1RJRllfTUFTSwkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDc0NDI5OWMuLjg5MmIxMTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtNDQsOSArNDQsNiBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCi0vKiBNYXBwaW5ncyBiZXR3ZWVuIG5vZGUgbnVtYmVyIGFuZCBjcHVzIG9uIHRoYXQgbm9kZS4gKi8KLWV4dGVybiBjcHVtYXNrX3Qgbm9kZV90b19jcHVtYXNrX21hcFtdOwotCiAvKiBNYXBwaW5ncyBiZXR3ZWVuIGxvZ2ljYWwgY3B1IG51bWJlciBhbmQgbm9kZSBudW1iZXIgKi8KIGV4dGVybiBpbnQgY3B1X3RvX25vZGVfbWFwW107CiAKQEAgLTU3LDMwICs1NCw4IEBACiB9CiAjZGVmaW5lIGVhcmx5X2NwdV90b19ub2RlKGNwdSkJY3B1X3RvX25vZGUoY3B1KQogCi0vKiBSZXR1cm5zIGEgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLgotICoKLSAqIFNpZGUgbm90ZTogdGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSByZXR1cm5lZCBjcHVtYXNrIG9uIHRoZSBzdGFjawotICogc28gd2l0aCBhIGhpZ2ggTlJfQ1BVUyBjb3VudCwgZXhjZXNzaXZlIHN0YWNrIHNwYWNlIGlzIHVzZWQuICBUaGUKLSAqIGNwdW1hc2tfb2Zfbm9kZSBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciBwb3NzaWJsZS4KLSAqLwotc3RhdGljIGlubGluZSBjcHVtYXNrX3Qgbm9kZV90b19jcHVtYXNrKGludCBub2RlKQotewotCXJldHVybiBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotfQotCi0vKiBSZXR1cm5zIGEgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLiAqLwotc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFza19vZl9ub2RlKGludCBub2RlKQotewotCXJldHVybiAmbm9kZV90b19jcHVtYXNrX21hcFtub2RlXTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCkgeyB9Ci0KICNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KIAotLyogTWFwcGluZ3MgYmV0d2VlbiBub2RlIG51bWJlciBhbmQgY3B1cyBvbiB0aGF0IG5vZGUuICovCi1leHRlcm4gY3B1bWFza190ICpub2RlX3RvX2NwdW1hc2tfbWFwOwotCiAvKiBNYXBwaW5ncyBiZXR3ZWVuIGxvZ2ljYWwgY3B1IG51bWJlciBhbmQgbm9kZSBudW1iZXIgKi8KIERFQ0xBUkVfRUFSTFlfUEVSX0NQVShpbnQsIHg4Nl9jcHVfdG9fbm9kZV9tYXApOwogCkBAIC05MSw4ICs2Niw2IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUwogZXh0ZXJuIGludCBjcHVfdG9fbm9kZShpbnQgY3B1KTsKIGV4dGVybiBpbnQgZWFybHlfY3B1X3RvX25vZGUoaW50IGNwdSk7Ci1leHRlcm4gY29uc3QgY3B1bWFza190ICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpOwotZXh0ZXJuIGNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2soaW50IG5vZGUpOwogCiAjZWxzZQkvKiAhQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyAqLwogCkBAIC0xMDgsNDIgKzgxLDMyIEBACiAJcmV0dXJuIGVhcmx5X3Blcl9jcHUoeDg2X2NwdV90b19ub2RlX21hcCwgY3B1KTsKIH0KIAotLyogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNwdW1hc2sgb2YgQ1BVcyBvbiBOb2RlICdub2RlJy4gKi8KLXN0YXRpYyBpbmxpbmUgY29uc3QgY3B1bWFza190ICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCi17Ci0JcmV0dXJuICZub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotfQorI2VuZGlmIC8qICFDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTICovCiAKLS8qIFJldHVybnMgYSBiaXRtYXNrIG9mIENQVXMgb24gTm9kZSAnbm9kZScuICovCi1zdGF0aWMgaW5saW5lIGNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2soaW50IG5vZGUpCisjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLworCisvKiBNYXBwaW5ncyBiZXR3ZWVuIG5vZGUgbnVtYmVyIGFuZCBjcHVzIG9uIHRoYXQgbm9kZS4gKi8KK2V4dGVybiBjcHVtYXNrX3Zhcl90IG5vZGVfdG9fY3B1bWFza19tYXBbTUFYX05VTU5PREVTXTsKKworI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFza19vZl9ub2RlKGludCBub2RlKTsKKyNlbHNlCisvKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY3B1bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLiAqLworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFza19vZl9ub2RlKGludCBub2RlKQogewogCXJldHVybiBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwogfQotCi0jZW5kaWYgLyogIUNPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KKyNlbmRpZgogCiBleHRlcm4gdm9pZCBzZXR1cF9ub2RlX3RvX2NwdW1hc2tfbWFwKHZvaWQpOwogCiAvKgotICogUmVwbGFjZSBkZWZhdWx0IG5vZGVfdG9fY3B1bWFza19wdHIgd2l0aCBvcHRpbWl6ZWQgdmVyc2lvbgotICogRGVwcmVjYXRlZDogdXNlICJjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9IGNwdW1hc2tfb2Zfbm9kZShub2RlKSIKLSAqLwotI2RlZmluZSBub2RlX3RvX2NwdW1hc2tfcHRyKHYsIG5vZGUpCQlcCi0JCWNvbnN0IGNwdW1hc2tfdCAqdiA9IGNwdW1hc2tfb2Zfbm9kZShub2RlKQotCi0jZGVmaW5lIG5vZGVfdG9fY3B1bWFza19wdHJfbmV4dCh2LCBub2RlKQlcCi0JCQkgICB2ID0gY3B1bWFza19vZl9ub2RlKG5vZGUpCi0KLSNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCi0KLS8qCiAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIG5vZGUgY29udGFpbmluZyBOb2RlICdub2RlJy4gVGhpcwogICogYXJjaGl0ZWN0dXJlIGlzIGZsYXQsIHNvIGl0IGlzIGEgcHJldHR5IHNpbXBsZSBmdW5jdGlvbiEKICAqLwogI2RlZmluZSBwYXJlbnRfbm9kZShub2RlKSAobm9kZSkKIAogI2RlZmluZSBwY2lidXNfdG9fbm9kZShidXMpIF9fcGNpYnVzX3RvX25vZGUoYnVzKQotI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpIF9fcGNpYnVzX3RvX2NwdW1hc2soYnVzKQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbm9kZV9zdGFydF9wZm5bXTsKQEAgLTIwOSw0MCArMTcyLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29uc3QgY3B1bWFza190ICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCiB7Ci0JcmV0dXJuICZjcHVfb25saW5lX21hcDsKLX0KLXN0YXRpYyBpbmxpbmUgY3B1bWFza190IG5vZGVfdG9fY3B1bWFzayhpbnQgbm9kZSkKLXsKLQlyZXR1cm4gY3B1X29ubGluZV9tYXA7CisJcmV0dXJuIGNwdV9vbmxpbmVfbWFzazsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25vZGVfdG9fY3B1bWFza19tYXAodm9pZCkgeyB9CiAKLS8qCi0gKiBSZXBsYWNlIGRlZmF1bHQgbm9kZV90b19jcHVtYXNrX3B0ciB3aXRoIG9wdGltaXplZCB2ZXJzaW9uCi0gKiBEZXByZWNhdGVkOiB1c2UgImNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrID0gY3B1bWFza19vZl9ub2RlKG5vZGUpIgotICovCi0jZGVmaW5lIG5vZGVfdG9fY3B1bWFza19wdHIodiwgbm9kZSkJCVwKLQkJY29uc3QgY3B1bWFza190ICp2ID0gY3B1bWFza19vZl9ub2RlKG5vZGUpCi0KLSNkZWZpbmUgbm9kZV90b19jcHVtYXNrX3B0cl9uZXh0KHYsIG5vZGUpCVwKLQkJCSAgIHYgPSBjcHVtYXNrX29mX25vZGUobm9kZSkKICNlbmRpZgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdG9wb2xvZ3kuaD4KIAotZXh0ZXJuIGNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcChpbnQgY3B1KTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NvcmVncm91cF9tYXNrKGludCBjcHUpOwogCiAjaWZkZWYgRU5BQkxFX1RPUE9fREVGSU5FUwogI2RlZmluZSB0b3BvbG9neV9waHlzaWNhbF9wYWNrYWdlX2lkKGNwdSkJKGNwdV9kYXRhKGNwdSkucGh5c19wcm9jX2lkKQogI2RlZmluZSB0b3BvbG9neV9jb3JlX2lkKGNwdSkJCQkoY3B1X2RhdGEoY3B1KS5jcHVfY29yZV9pZCkKLSNkZWZpbmUgdG9wb2xvZ3lfY29yZV9zaWJsaW5ncyhjcHUpCQkocGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpCi0jZGVmaW5lIHRvcG9sb2d5X3RocmVhZF9zaWJsaW5ncyhjcHUpCQkocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpCi0jZGVmaW5lIHRvcG9sb2d5X2NvcmVfY3B1bWFzayhjcHUpCQkoJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKQotI2RlZmluZSB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpCQkoJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKQorI2RlZmluZSB0b3BvbG9neV9jb3JlX2NwdW1hc2soY3B1KQkJKHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKQorI2RlZmluZSB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpCQkocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpCiAKIC8qIGluZGljYXRlcyB0aGF0IHBvaW50ZXJzIHRvIHRoZSB0b3BvbG9neSBjcHVtYXNrX3QgbWFwcyBhcmUgdmFsaWQgKi8KICNkZWZpbmUgYXJjaF9wcm92aWRlc190b3BvbG9neV9wb2ludGVycwkJeWVzCkBAIC0yNTYsNyArMjAzLDcgQEAKIHZvaWQgc2V0X3BjaV9idXNfcmVzb3VyY2VzX2FyY2hfZGVmYXVsdChzdHJ1Y3QgcGNpX2J1cyAqYik7CiAKICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIG1jX2NhcGFibGUoKQkoY3B1c193ZWlnaHQocGVyX2NwdShjcHVfY29yZV9tYXAsIDApKSAhPSBucl9jcHVfaWRzKQorI2RlZmluZSBtY19jYXBhYmxlKCkJKGNwdW1hc2tfd2VpZ2h0KGNwdV9jb3JlX21hc2soMCkpICE9IG5yX2NwdV9pZHMpCiAjZGVmaW5lIHNtdF9jYXBhYmxlKCkJCQkoc21wX251bV9zaWJsaW5ncyA+IDEpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaAppbmRleCBmMmJiYTc4Li42ZTcyZDc0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaApAQCAtMzM4LDYgKzMzOCw4IEBACiAjZGVmaW5lIF9fTlJfZHVwMwkJMzMwCiAjZGVmaW5lIF9fTlJfcGlwZTIJCTMzMQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJMzMyCisjZGVmaW5lIF9fTlJfcHJlYWR2CQkzMzMKKyNkZWZpbmUgX19OUl9wd3JpdGV2CQkzMzQKIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaAppbmRleCBkMmU0MTVlLi5mODE4Mjk0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaApAQCAtNjUzLDYgKzY1MywxMCBAQAogX19TWVNDQUxMKF9fTlJfcGlwZTIsIHN5c19waXBlMikKICNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxCQkJMjk0CiBfX1NZU0NBTEwoX19OUl9pbm90aWZ5X2luaXQxLCBzeXNfaW5vdGlmeV9pbml0MSkKKyNkZWZpbmUgX19OUl9wcmVhZHYJCQkJMjk1CitfX1NZU0NBTEwoX19OUl9wcmVhZHYsIHN5c19wcmVhZHYpCisjZGVmaW5lIF9fTlJfcHdyaXRldgkJCQkyOTYKK19fU1lTQ0FMTChfX05SX3B3cml0ZXYsIHN5c19wd3JpdGV2KQogCiAKICNpZm5kZWYgX19OT19TVFVCUwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAppbmRleCA5ZjRkZmJhLi5kM2E5OGVhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaApAQCAtMTEsMTEgKzExLDEzIEBACiAjaWZuZGVmIF9BU01fWDg2X1VWX1VWX0hVQl9ICiAjZGVmaW5lIF9BU01fWDg2X1VWX1VWX0hVQl9ICiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CiAjaW5jbHVkZSA8bGludXgvbnVtYS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgorI2luY2x1ZGUgPGFzbS91di91dl9tbXJzLmg+CiAKIAogLyoKQEAgLTM5Nyw2ICszOTksNyBAQAogCQl1dl93cml0ZV9sb2NhbF9tbXI4KHV2X2h1Yl9pbmZvLT5zY2lyLm9mZnNldCwgdmFsdWUpOwogCX0KIH0KKwogc3RhdGljIGlubGluZSB2b2lkIHV2X3NldF9jcHVfc2Npcl9iaXRzKGludCBjcHUsIHVuc2lnbmVkIGNoYXIgdmFsdWUpCiB7CiAJaWYgKHV2X2NwdV9odWJfaW5mbyhjcHUpLT5zY2lyLnN0YXRlICE9IHZhbHVlKSB7CkBAIC00MDUsNCArNDA4LDE1IEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgdXZfaHViX3NlbmRfaXBpKGludCBwbm9kZSwgaW50IGFwaWNpZCwgaW50IHZlY3RvcikKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXZhbCA9ICgxVUwgPDwgVVZIX0lQSV9JTlRfU0VORF9TSEZUKSB8CisJCQkoKGFwaWNpZCAmIDB4M2YpIDw8IFVWSF9JUElfSU5UX0FQSUNfSURfU0hGVCkgfAorCQkJKHZlY3RvciA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCk7CisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfSVBJX0lOVCwgdmFsKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KICNlbmRpZiAvKiBfQVNNX1g4Nl9VVl9VVl9IVUJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oCmluZGV4IGRkNjI3NzkuLmRiNjhhYzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9tbXJzLmgKQEAgLTEsMyArMSw0IEBACisKIC8qCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMjQzLDYgKzI0NCwxNTggQEAKICNkZWZpbmUgVVZIX0VWRU5UX09DQ1VSUkVEMF9BTElBU18zMiAweDAwNWYwCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUcgMHg2MWIwMFVMCisKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfVkVDVE9SX1NIRlQgMAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19ETV9TSEZUIDgKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfRE1fTUFTSyAweDAwMDAwMDAwMDAwMDA3MDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfU1RBVFVTX1NIRlQgMTIKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfUF9TSEZUIDEzCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX1BfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19UX1NIRlQgMTUKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX01fU0hGVCAxNgorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQwX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMF9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDBfQ09ORklHX0FQSUNfSURfTUFTSyAweGZmZmZmZmZmMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfZ3IwX3RsYl9pbnQwX2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ncjBfdGxiX2ludDBfY29uZmlnX3MgeworCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUcgMHg2MWI0MFVMCisKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfVkVDVE9SX1NIRlQgMAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19ETV9TSEZUIDgKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfRE1fTUFTSyAweDAwMDAwMDAwMDAwMDA3MDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfU1RBVFVTX1NIRlQgMTIKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfUF9TSEZUIDEzCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX1BfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19UX1NIRlQgMTUKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX01fU0hGVCAxNgorI2RlZmluZSBVVkhfR1IwX1RMQl9JTlQxX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX0dSMF9UTEJfSU5UMV9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCisjZGVmaW5lIFVWSF9HUjBfVExCX0lOVDFfQ09ORklHX0FQSUNfSURfTUFTSyAweGZmZmZmZmZmMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfZ3IwX3RsYl9pbnQxX2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ncjBfdGxiX2ludDFfY29uZmlnX3MgeworCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUcgMHg2MWYwMFVMCisKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfVkVDVE9SX1NIRlQgMAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19ETV9TSEZUIDgKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfRE1fTUFTSyAweDAwMDAwMDAwMDAwMDA3MDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfU1RBVFVTX1NIRlQgMTIKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfUF9TSEZUIDEzCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX1BfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19UX1NIRlQgMTUKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX01fU0hGVCAxNgorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQwX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMF9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDBfQ09ORklHX0FQSUNfSURfTUFTSyAweGZmZmZmZmZmMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfZ3IxX3RsYl9pbnQwX2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ncjFfdGxiX2ludDBfY29uZmlnX3MgeworCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUcgMHg2MWY0MFVMCisKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfVkVDVE9SX1NIRlQgMAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19WRUNUT1JfTUFTSyAweDAwMDAwMDAwMDAwMDAwZmZVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19ETV9TSEZUIDgKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfRE1fTUFTSyAweDAwMDAwMDAwMDAwMDA3MDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19ERVNUTU9ERV9TSEZUIDExCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX0RFU1RNT0RFX01BU0sgMHgwMDAwMDAwMDAwMDAwODAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfU1RBVFVTX1NIRlQgMTIKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfU1RBVFVTX01BU0sgMHgwMDAwMDAwMDAwMDAxMDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfUF9TSEZUIDEzCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX1BfTUFTSyAweDAwMDAwMDAwMDAwMDIwMDBVTAorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19UX1NIRlQgMTUKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfVF9NQVNLIDB4MDAwMDAwMDAwMDAwODAwMFVMCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX01fU0hGVCAxNgorI2RlZmluZSBVVkhfR1IxX1RMQl9JTlQxX0NPTkZJR19NX01BU0sgMHgwMDAwMDAwMDAwMDEwMDAwVUwKKyNkZWZpbmUgVVZIX0dSMV9UTEJfSU5UMV9DT05GSUdfQVBJQ19JRF9TSEZUIDMyCisjZGVmaW5lIFVWSF9HUjFfVExCX0lOVDFfQ09ORklHX0FQSUNfSURfTUFTSyAweGZmZmZmZmZmMDAwMDAwMDBVTAorCit1bmlvbiB1dmhfZ3IxX3RsYl9pbnQxX2NvbmZpZ191IHsKKyAgICB1bnNpZ25lZCBsb25nCXY7CisgICAgc3RydWN0IHV2aF9ncjFfdGxiX2ludDFfY29uZmlnX3MgeworCXVuc2lnbmVkIGxvbmcJdmVjdG9yXyAgOiAgODsgIC8qIFJXICovCisJdW5zaWduZWQgbG9uZwlkbSAgICAgICA6ICAzOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCWRlc3Rtb2RlIDogIDE7ICAvKiBSVyAqLworCXVuc2lnbmVkIGxvbmcJc3RhdHVzICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwlwICAgICAgICA6ICAxOyAgLyogUk8gKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTQgIDogIDE7ICAvKiAgICAqLworCXVuc2lnbmVkIGxvbmcJdCAgICAgICAgOiAgMTsgIC8qIFJPICovCisJdW5zaWduZWQgbG9uZwltICAgICAgICA6ICAxOyAgLyogUlcgKi8KKwl1bnNpZ25lZCBsb25nCXJzdmRfMTdfMzE6IDE1OyAgLyogICAgKi8KKwl1bnNpZ25lZCBsb25nCWFwaWNfaWQgIDogMzI7ICAvKiBSVyAqLworICAgIH0gczsKK307CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVWSF9JTlRfQ01QQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KICNkZWZpbmUgVVZIX0lOVF9DTVBCIDB4MjIwODBVTApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCmluZGV4IGM2MTFhZDYuLjE0NWNjZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKQEAgLTY2LDcgKzY2LDggQEAKIG9iai15CQkJCSs9IGFwaWMvCiBvYmotJChDT05GSUdfWDg2X1JFQk9PVEZJWFVQUykJKz0gcmVib290X2ZpeHVwc18zMi5vCiBvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCSs9IGZ0cmFjZS5vCi1vYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKQkrPSBmdHJhY2Uubworb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikgKz0gZnRyYWNlLm8KK29iai0kKENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjXyQoQklUUykubwogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gcmVsb2NhdGVfa2VybmVsXyQoQklUUykubyBjcmFzaC5vCiBvYmotJChDT05GSUdfQ1JBU0hfRFVNUCkJKz0gY3Jhc2hfZHVtcF8kKEJJVFMpLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCBhMThlYjdjLi43MjM5ODlkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC0yMzAsNiArMjMwLDM1IEBACiB9CiAKIHN0YXRpYyBpbnQgX19pbml0CithY3BpX3BhcnNlX3gyYXBpYyhzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhlYWRlciwgY29uc3QgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IGFjcGlfbWFkdF9sb2NhbF94MmFwaWMgKnByb2Nlc3NvciA9IE5VTEw7CisKKwlwcm9jZXNzb3IgPSAoc3RydWN0IGFjcGlfbWFkdF9sb2NhbF94MmFwaWMgKiloZWFkZXI7CisKKwlpZiAoQkFEX01BRFRfRU5UUlkocHJvY2Vzc29yLCBlbmQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFjcGlfdGFibGVfcHJpbnRfbWFkdF9lbnRyeShoZWFkZXIpOworCisjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKKwkvKgorCSAqIFdlIG5lZWQgdG8gcmVnaXN0ZXIgZGlzYWJsZWQgQ1BVIGFzIHdlbGwgdG8gcGVybWl0CisJICogY291bnRpbmcgZGlzYWJsZWQgQ1BVcy4gVGhpcyBhbGxvd3MgdXMgdG8gc2l6ZQorCSAqIGNwdXNfcG9zc2libGVfbWFwIG1vcmUgYWNjdXJhdGVseSwgdG8gcGVybWl0CisJICogdG8gbm90IHByZWFsbG9jYXRpbmcgbWVtb3J5IGZvciBhbGwgTlJfQ1BVUworCSAqIHdoZW4gd2UgdXNlIENQVSBob3RwbHVnLgorCSAqLworCWFjcGlfcmVnaXN0ZXJfbGFwaWMocHJvY2Vzc29yLT5sb2NhbF9hcGljX2lkLAkvKiBBUElDIElEICovCisJCQkgICAgcHJvY2Vzc29yLT5sYXBpY19mbGFncyAmIEFDUElfTUFEVF9FTkFCTEVEKTsKKyNlbHNlCisJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIngyYXBpYyBlbnRyeSBpZ25vcmVkXG4iKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CiBhY3BpX3BhcnNlX2xhcGljKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqIGhlYWRlciwgY29uc3QgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJc3RydWN0IGFjcGlfbWFkdF9sb2NhbF9hcGljICpwcm9jZXNzb3IgPSBOVUxMOwpAQCAtMjg5LDYgKzMxOCwyNSBAQAogfQogCiBzdGF0aWMgaW50IF9faW5pdAorYWNwaV9wYXJzZV94MmFwaWNfbm1pKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyLAorCQkgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgKngyYXBpY19ubWkgPSBOVUxMOworCisJeDJhcGljX25taSA9IChzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgKiloZWFkZXI7CisKKwlpZiAoQkFEX01BRFRfRU5UUlkoeDJhcGljX25taSwgZW5kKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhY3BpX3RhYmxlX3ByaW50X21hZHRfZW50cnkoaGVhZGVyKTsKKworCWlmICh4MmFwaWNfbm1pLT5saW50ICE9IDEpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJOTUkgbm90IGNvbm5lY3RlZCB0byBMSU5UIDEhXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdAogYWNwaV9wYXJzZV9sYXBpY19ubWkoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICogaGVhZGVyLCBjb25zdCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX2FwaWNfbm1pICpsYXBpY19ubWkgPSBOVUxMOwpAQCAtNzkzLDYgKzg0MSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3BhcnNlX21hZHRfbGFwaWNfZW50cmllcyh2b2lkKQogewogCWludCBjb3VudDsKKwlpbnQgeDJjb3VudCA9IDA7CiAKIAlpZiAoIWNwdV9oYXNfYXBpYykKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC04MTYsMjIgKzg2NSwyOCBAQAogCWNvdW50ID0gYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX0xPQ0FMX1NBUElDLAogCQkJCSAgICAgIGFjcGlfcGFyc2Vfc2FwaWMsIE1BWF9BUElDUyk7CiAKLQlpZiAoIWNvdW50KQorCWlmICghY291bnQpIHsKKwkJeDJjb3VudCA9IGFjcGlfdGFibGVfcGFyc2VfbWFkdChBQ1BJX01BRFRfVFlQRV9MT0NBTF9YMkFQSUMsCisJCQkJCQlhY3BpX3BhcnNlX3gyYXBpYywgTUFYX0FQSUNTKTsKIAkJY291bnQgPSBhY3BpX3RhYmxlX3BhcnNlX21hZHQoQUNQSV9NQURUX1RZUEVfTE9DQUxfQVBJQywKIAkJCQkJICAgICAgYWNwaV9wYXJzZV9sYXBpYywgTUFYX0FQSUNTKTsKLQlpZiAoIWNvdW50KSB7CisJfQorCWlmICghY291bnQgJiYgIXgyY291bnQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiTm8gTEFQSUMgZW50cmllcyBwcmVzZW50XG4iKTsKIAkJLyogVEJEOiBDbGVhbnVwIHRvIGFsbG93IGZhbGxiYWNrIHRvIE1QUyAqLwogCQlyZXR1cm4gLUVOT0RFVjsKLQl9IGVsc2UgaWYgKGNvdW50IDwgMCkgeworCX0gZWxzZSBpZiAoY291bnQgPCAwIHx8IHgyY291bnQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkVycm9yIHBhcnNpbmcgTEFQSUMgZW50cnlcbiIpOwogCQkvKiBUQkQ6IENsZWFudXAgdG8gYWxsb3cgZmFsbGJhY2sgdG8gTVBTICovCiAJCXJldHVybiBjb3VudDsKIAl9CiAKKwl4MmNvdW50ID0KKwkgICAgYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX0xPQ0FMX1gyQVBJQ19OTUksCisJCQkJICBhY3BpX3BhcnNlX3gyYXBpY19ubWksIDApOwogCWNvdW50ID0KIAkgICAgYWNwaV90YWJsZV9wYXJzZV9tYWR0KEFDUElfTUFEVF9UWVBFX0xPQ0FMX0FQSUNfTk1JLCBhY3BpX3BhcnNlX2xhcGljX25taSwgMCk7Ci0JaWYgKGNvdW50IDwgMCkgeworCWlmIChjb3VudCA8IDAgfHwgeDJjb3VudCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRXJyb3IgcGFyc2luZyBMQVBJQyBOTUkgZW50cnlcbiIpOwogCQkvKiBUQkQ6IENsZWFudXAgdG8gYWxsb3cgZmFsbGJhY2sgdG8gTVBTICovCiAJCXJldHVybiBjb3VudDsKQEAgLTE0NzAsNyArMTUyNSw3IEBACiAKIC8qCiAgKiBJZiB5b3VyIHN5c3RlbSBpcyBibGFja2xpc3RlZCBoZXJlLCBidXQgeW91IGZpbmQgdGhhdCBhY3BpPWZvcmNlCi0gKiB3b3JrcyBmb3IgeW91LCBwbGVhc2UgY29udGFjdCBhY3BpLWRldmVsQHNvdXJjZWZvcmdlLm5ldAorICogd29ya3MgZm9yIHlvdSwgcGxlYXNlIGNvbnRhY3QgbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKICAqLwogc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9faW5pdGRhdGEgYWNwaV9kbWlfdGFibGVbXSA9IHsKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwppbmRleCA0YzgwZjE1Li5mNTc2NTg3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwpAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTEyLDcgKzEzLDkgQEAKICNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSA8YXNtL3ZzeXNjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAKICNkZWZpbmUgTUFYX1BBVENIX0xFTiAoMjU1LTEpCiAKQEAgLTIyNiw2ICsyMjksNyBAQAogewogCXU4ICoqcHRyOwogCisJbXV0ZXhfbG9jaygmdGV4dF9tdXRleCk7CiAJZm9yIChwdHIgPSBzdGFydDsgcHRyIDwgZW5kOyBwdHIrKykgewogCQlpZiAoKnB0ciA8IHRleHQpCiAJCQljb250aW51ZTsKQEAgLTIzNCw2ICsyMzgsNyBAQAogCQkvKiB0dXJuIERTIHNlZ21lbnQgb3ZlcnJpZGUgcHJlZml4IGludG8gbG9jayBwcmVmaXggKi8KIAkJdGV4dF9wb2tlKCpwdHIsICgodW5zaWduZWQgY2hhciBbXSl7MHhmMH0pLCAxKTsKIAl9OworCW11dGV4X3VubG9jaygmdGV4dF9tdXRleCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFsdGVybmF0aXZlc19zbXBfdW5sb2NrKHU4ICoqc3RhcnQsIHU4ICoqZW5kLCB1OCAqdGV4dCwgdTggKnRleHRfZW5kKQpAQCAtMjQzLDYgKzI0OCw3IEBACiAJaWYgKG5vcmVwbGFjZV9zbXApCiAJCXJldHVybjsKIAorCW11dGV4X2xvY2soJnRleHRfbXV0ZXgpOwogCWZvciAocHRyID0gc3RhcnQ7IHB0ciA8IGVuZDsgcHRyKyspIHsKIAkJaWYgKCpwdHIgPCB0ZXh0KQogCQkJY29udGludWU7CkBAIC0yNTEsNiArMjU3LDcgQEAKIAkJLyogdHVybiBsb2NrIHByZWZpeCBpbnRvIERTIHNlZ21lbnQgb3ZlcnJpZGUgcHJlZml4ICovCiAJCXRleHRfcG9rZSgqcHRyLCAoKHVuc2lnbmVkIGNoYXIgW10pezB4M0V9KSwgMSk7CiAJfTsKKwltdXRleF91bmxvY2soJnRleHRfbXV0ZXgpOwogfQogCiBzdHJ1Y3Qgc21wX2FsdF9tb2R1bGUgewpAQCAtNTAwLDE1ICs1MDcsMTYgQEAKICAqIEl0IG1lYW5zIHRoZSBzaXplIG11c3QgYmUgd3JpdGFibGUgYXRvbWljYWxseSBhbmQgdGhlIGFkZHJlc3MgbXVzdCBiZSBhbGlnbmVkCiAgKiBpbiBhIHdheSB0aGF0IHBlcm1pdHMgYW4gYXRvbWljIHdyaXRlLiBJdCBhbHNvIG1ha2VzIHN1cmUgd2UgZml0IG9uIGEgc2luZ2xlCiAgKiBwYWdlLgorICoKKyAqIE5vdGU6IE11c3QgYmUgY2FsbGVkIHVuZGVyIHRleHRfbXV0ZXguCiAgKi8KIHZvaWQgKl9fa3Byb2JlcyB0ZXh0X3Bva2Uodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY2hhciAqdmFkZHI7Ci0JaW50IG5yX3BhZ2VzID0gMjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZXNbMl07CiAJaW50IGk7CiAKLQltaWdodF9zbGVlcCgpOwogCWlmICghY29yZV9rZXJuZWxfdGV4dCgodW5zaWduZWQgbG9uZylhZGRyKSkgewogCQlwYWdlc1swXSA9IHZtYWxsb2NfdG9fcGFnZShhZGRyKTsKIAkJcGFnZXNbMV0gPSB2bWFsbG9jX3RvX3BhZ2UoYWRkciArIFBBR0VfU0laRSk7CkBAIC01MTgsMTggKzUyNiwyMSBAQAogCQlwYWdlc1sxXSA9IHZpcnRfdG9fcGFnZShhZGRyICsgUEFHRV9TSVpFKTsKIAl9CiAJQlVHX09OKCFwYWdlc1swXSk7Ci0JaWYgKCFwYWdlc1sxXSkKLQkJbnJfcGFnZXMgPSAxOwotCXZhZGRyID0gdm1hcChwYWdlcywgbnJfcGFnZXMsIFZNX01BUCwgUEFHRV9LRVJORUwpOwotCUJVR19PTighdmFkZHIpOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXNldF9maXhtYXAoRklYX1RFWFRfUE9LRTAsIHBhZ2VfdG9fcGh5cyhwYWdlc1swXSkpOworCWlmIChwYWdlc1sxXSkKKwkJc2V0X2ZpeG1hcChGSVhfVEVYVF9QT0tFMSwgcGFnZV90b19waHlzKHBhZ2VzWzFdKSk7CisJdmFkZHIgPSAoY2hhciAqKWZpeF90b192aXJ0KEZJWF9URVhUX1BPS0UwKTsKIAltZW1jcHkoJnZhZGRyWyh1bnNpZ25lZCBsb25nKWFkZHIgJiB+UEFHRV9NQVNLXSwgb3Bjb2RlLCBsZW4pOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLQl2dW5tYXAodmFkZHIpOworCWNsZWFyX2ZpeG1hcChGSVhfVEVYVF9QT0tFMCk7CisJaWYgKHBhZ2VzWzFdKQorCQljbGVhcl9maXhtYXAoRklYX1RFWFRfUE9LRTEpOworCWxvY2FsX2ZsdXNoX3RsYigpOwogCXN5bmNfY29yZSgpOwogCS8qIENvdWxkIGFsc28gZG8gYSBDTEZMVVNIIGhlcmUgdG8gc3BlZWQgdXAgQ1BVIHJlY292ZXJ5OyBidXQKIAkgICB0aGF0IGNhdXNlcyBoYW5ncyBvbiBzb21lIFZJQSBDUFVzLiAqLwogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKIAkJQlVHX09OKCgoY2hhciAqKWFkZHIpW2ldICE9ICgoY2hhciAqKW9wY29kZSlbaV0pOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gYWRkcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwppbmRleCBjNTk2MmZlLi5hOTdkYjk5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCkBAIC0xOTI4LDYgKzE5MjgsMTIgQEAKIAlyZXR1cm4gcGFkZHI7CiB9CiAKK3N0YXRpYyBpbnQgYW1kX2lvbW11X2RvbWFpbl9oYXNfY2FwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBjYXApCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfb3BzIGFtZF9pb21tdV9vcHMgPSB7CiAJLmRvbWFpbl9pbml0ID0gYW1kX2lvbW11X2RvbWFpbl9pbml0LAogCS5kb21haW5fZGVzdHJveSA9IGFtZF9pb21tdV9kb21haW5fZGVzdHJveSwKQEAgLTE5MzYsNSArMTk0Miw2IEBACiAJLm1hcCA9IGFtZF9pb21tdV9tYXBfcmFuZ2UsCiAJLnVubWFwID0gYW1kX2lvbW11X3VubWFwX3JhbmdlLAogCS5pb3ZhX3RvX3BoeXMgPSBhbWRfaW9tbXVfaW92YV90b19waHlzLAorCS5kb21haW5faGFzX2NhcCA9IGFtZF9pb21tdV9kb21haW5faGFzX2NhcCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2JpZ3NtcF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMKaW5kZXggZDgwNmVjYS4uNjc2Y2RhYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYmlnc21wXzMyLmMKQEAgLTI2LDEyICsyNiwxMiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgY29uc3QgY3B1bWFza190ICpiaWdzbXBfdGFyZ2V0X2NwdXModm9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYmlnc21wX3RhcmdldF9jcHVzKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAotCXJldHVybiAmY3B1X29ubGluZV9tYXA7CisJcmV0dXJuIGNwdV9vbmxpbmVfbWFzazsKICNlbHNlCi0JcmV0dXJuICZjcHVtYXNrX29mX2NwdSgwKTsKKwlyZXR1cm4gY3B1bWFza19vZigwKTsKICNlbmRpZgogfQogCkBAIC0xMTgsOSArMTE4LDkgQEAKIH0KIAogLyogQXMgd2UgYXJlIHVzaW5nIHNpbmdsZSBDUFUgYXMgZGVzdGluYXRpb24sIHBpY2sgb25seSBvbmUgQ1BVIGhlcmUgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYmlnc21wX2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2spCitzdGF0aWMgdW5zaWduZWQgaW50IGJpZ3NtcF9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCiB7Ci0JcmV0dXJuIGJpZ3NtcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoZmlyc3RfY3B1KCpjcHVtYXNrKSk7CisJcmV0dXJuIGJpZ3NtcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoY3B1bWFza19maXJzdChjcHVtYXNrKSk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYmlnc21wX2NwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2ssCkBAIC0xODgsMTAgKzE4OCwxMCBAQAogCXsgfSAvKiBOVUxMIGVudHJ5IHN0b3BzIERNSSBzY2FubmluZyAqLwogfTsKIAotc3RhdGljIHZvaWQgYmlnc21wX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBjcHVtYXNrX3QgKnJldG1hc2spCitzdGF0aWMgdm9pZCBiaWdzbXBfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIHN0cnVjdCBjcHVtYXNrICpyZXRtYXNrKQogewotCWNwdXNfY2xlYXIoKnJldG1hc2spOwotCWNwdV9zZXQoY3B1LCAqcmV0bWFzayk7CisJY3B1bWFza19jbGVhcihyZXRtYXNrKTsKKwljcHVtYXNrX3NldF9jcHUoY3B1LCByZXRtYXNrKTsKIH0KIAogc3RhdGljIGludCBwcm9iZV9iaWdzbXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2VzNzAwMF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvZXM3MDAwXzMyLmMKaW5kZXggMTk1ODhmMi4uMWMxMWI4MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvZXM3MDAwXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvZXM3MDAwXzMyLmMKQEAgLTQxMCw3ICs0MTAsNyBAQAogCQlXQVJOKDEsICJDb21tYW5kIGZhaWxlZCwgc3RhdHVzID0gJXhcbiIsIG1pcF9zdGF0dXMpOwogfQogCi1zdGF0aWMgdm9pZCBlczcwMDBfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIGNwdW1hc2tfdCAqcmV0bWFzaykKK3N0YXRpYyB2b2lkIGVzNzAwMF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgc3RydWN0IGNwdW1hc2sgKnJldG1hc2spCiB7CiAJLyogQ2FyZWZ1bC4gU29tZSBjcHVzIGRvIG5vdCBzdHJpY3RseSBob25vciB0aGUgc2V0IG9mIGNwdXMKIAkgKiBzcGVjaWZpZWQgaW4gdGhlIGludGVycnVwdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGxvd2VzdApAQCAtNDIwLDcgKzQyMCw4IEBACiAJICogZGVsaXZlciBpbnRlcnJ1cHRzIHRvIHRoZSB3cm9uZyBoeXBlcnRocmVhZCB3aGVuIG9ubHkgb25lCiAJICogaHlwZXJ0aHJlYWQgd2FzIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc2l0aW5hdGlvbi4KIAkgKi8KLQkqcmV0bWFzayA9IChjcHVtYXNrX3QpeyB7IFswXSA9IEFQSUNfQUxMX0NQVVMsIH0gfTsKKwljcHVtYXNrX2NsZWFyKHJldG1hc2spOworCWNwdW1hc2tfYml0cyhyZXRtYXNrKVswXSA9IEFQSUNfQUxMX0NQVVM7CiB9CiAKIApAQCAtNDU1LDE0ICs0NTYsMTQgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGNvbnN0IGNwdW1hc2tfdCAqdGFyZ2V0X2NwdXNfY2x1c3Rlcih2b2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICp0YXJnZXRfY3B1c19jbHVzdGVyKHZvaWQpCiB7Ci0JcmV0dXJuICZDUFVfTUFTS19BTEw7CisJcmV0dXJuIGNwdV9hbGxfbWFzazsKIH0KIAotc3RhdGljIGNvbnN0IGNwdW1hc2tfdCAqZXM3MDAwX3RhcmdldF9jcHVzKHZvaWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmVzNzAwMF90YXJnZXRfY3B1cyh2b2lkKQogewotCXJldHVybiAmY3B1bWFza19vZl9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlyZXR1cm4gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZwpAQCAtNTE3LDcgKzUxOCw3IEBACiAJICAiRW5hYmxpbmcgQVBJQyBtb2RlOiAgJXMuIFVzaW5nICVkIEkvTyBBUElDcywgdGFyZ2V0IGNwdXMgJWx4XG4iLAogCQkoYXBpY192ZXJzaW9uW2FwaWNdID09IDB4MTQpID8KIAkJCSJQaHlzaWNhbCBDbHVzdGVyIiA6ICJMb2dpY2FsIENsdXN0ZXIiLAotCQlucl9pb2FwaWNzLCBjcHVzX2FkZHIoKmVzNzAwMF90YXJnZXRfY3B1cygpKVswXSk7CisJCW5yX2lvYXBpY3MsIGNwdW1hc2tfYml0cyhlczcwMDBfdGFyZ2V0X2NwdXMoKSlbMF0pOwogfQogCiBzdGF0aWMgaW50IGVzNzAwMF9hcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpCkBAIC01NzIsNyArNTczLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBlczcwMDBfY3B1X21hc2tfdG9fYXBpY2lkKGNvbnN0IGNwdW1hc2tfdCAqY3B1bWFzaykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXM3MDAwX2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKIHsKIAl1bnNpZ25lZCBpbnQgcm91bmQgPSAwOwogCWludCBjcHUsIHVuaW5pdGlhbGl6ZWRfdmFyKGFwaWNpZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggZGE5OWZmYy4uMWJiNWM2YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMzQ2OCw2ICszNDY4LDEwIEBACiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IE5VTEw7CiAJaW50IGluZGV4ID0gMDsKIAorCS8qIHg4NiBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgTVNJIHlldCAqLworCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJICYmIG52ZWMgPiAxKQorCQlyZXR1cm4gMTsKKwogCWlycV93YW50ID0gbnJfaXJxc19nc2k7CiAJc3ViX2hhbmRsZSA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtc2lkZXNjLCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvbm1pLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYwppbmRleCBiZGZhZDgwLi5kNmJkNjI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYwpAQCAtMzksNyArMzksNyBAQAogaW50IHVua25vd25fbm1pX3BhbmljOwogaW50IG5taV93YXRjaGRvZ19lbmFibGVkOwogCi1zdGF0aWMgY3B1bWFza190IGJhY2t0cmFjZV9tYXNrID0gQ1BVX01BU0tfTk9ORTsKK3N0YXRpYyBjcHVtYXNrX3Zhcl90IGJhY2t0cmFjZV9tYXNrOwogCiAvKiBubWlfYWN0aXZlOgogICogPjA6IHRoZSBsYXBpYyBOTUkgd2F0Y2hkb2cgaXMgYWN0aXZlLCBidXQgY2FuIGJlIGRpc2FibGVkCkBAIC0xMzgsNiArMTM4LDcgQEAKIAlpZiAoIXByZXZfbm1pX2NvdW50KQogCQlnb3RvIGVycm9yOwogCisJYWxsb2NfY3B1bWFza192YXIoJmJhY2t0cmFjZV9tYXNrLCBHRlBfS0VSTkVMKTsKIAlwcmludGsoS0VSTl9JTkZPICJUZXN0aW5nIE5NSSB3YXRjaGRvZyAuLi4gIik7CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC00MTMsMTQgKzQxNCwxNCBAQAogCQl0b3VjaGVkID0gMTsKIAl9CiAKLQlpZiAoY3B1X2lzc2V0KGNwdSwgYmFja3RyYWNlX21hc2spKSB7CisJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBiYWNrdHJhY2VfbWFzaykpIHsKIAkJc3RhdGljIERFRklORV9TUElOTE9DSyhsb2NrKTsJLyogU2VyaWFsaXNlIHRoZSBwcmludGtzICovCiAKIAkJc3Bpbl9sb2NrKCZsb2NrKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTk1JIGJhY2t0cmFjZSBmb3IgY3B1ICVkXG4iLCBjcHUpOwogCQlkdW1wX3N0YWNrKCk7CiAJCXNwaW5fdW5sb2NrKCZsb2NrKTsKLQkJY3B1X2NsZWFyKGNwdSwgYmFja3RyYWNlX21hc2spOworCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIGJhY2t0cmFjZV9tYXNrKTsKIAl9CiAKIAkvKiBDb3VsZCBjaGVjayBvb3BzX2luX3Byb2dyZXNzIGhlcmUgdG9vLCBidXQgaXQncyBzYWZlciBub3QgdG8gKi8KQEAgLTU1NCwxMCArNTU1LDEwIEBACiB7CiAJaW50IGk7CiAKLQliYWNrdHJhY2VfbWFzayA9IGNwdV9vbmxpbmVfbWFwOworCWNwdW1hc2tfY29weShiYWNrdHJhY2VfbWFzaywgY3B1X29ubGluZV9tYXNrKTsKIAkvKiBXYWl0IGZvciB1cCB0byAxMCBzZWNvbmRzIGZvciBhbGwgQ1BVcyB0byBkbyB0aGUgYmFja3RyYWNlICovCiAJZm9yIChpID0gMDsgaSA8IDEwICogMTAwMDsgaSsrKSB7Ci0JCWlmIChjcHVzX2VtcHR5KGJhY2t0cmFjZV9tYXNrKSkKKwkJaWYgKGNwdW1hc2tfZW1wdHkoYmFja3RyYWNlX21hc2spKQogCQkJYnJlYWs7CiAJCW1kZWxheSgxKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYwppbmRleCBiYTJmYzY0Li41MzNlNTljIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKQEAgLTMzNCw5ICszMzQsOSBAQAogCWNsZWFyX2xvY2FsX0FQSUMoKTsKIH0KIAotc3RhdGljIGlubGluZSBjb25zdCBjcHVtYXNrX3QgKm51bWFxX3RhcmdldF9jcHVzKHZvaWQpCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpudW1hcV90YXJnZXRfY3B1cyh2b2lkKQogewotCXJldHVybiAmQ1BVX01BU0tfQUxMOworCXJldHVybiBjcHVfYWxsX21hc2s7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpAQCAtNDI3LDcgKzQyNyw3IEBACiAgKiBXZSB1c2UgcGh5c2ljYWwgYXBpY2lkcyBoZXJlLCBub3QgbG9naWNhbCwgc28ganVzdCByZXR1cm4gdGhlIGRlZmF1bHQKICAqIHBoeXNpY2FsIGJyb2FkY2FzdCB0byBzdG9wIHBlb3BsZSBmcm9tIGJyZWFraW5nIHVzCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG51bWFxX2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2spCitzdGF0aWMgdW5zaWduZWQgaW50IG51bWFxX2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFzaykKIHsKIAlyZXR1cm4gMHgwRjsKIH0KQEAgLTQ2Miw3ICs0NjIsNyBAQAogCXJldHVybiBmb3VuZF9udW1hcTsKIH0KIAotc3RhdGljIHZvaWQgbnVtYXFfdmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKGludCBjcHUsIGNwdW1hc2tfdCAqcmV0bWFzaykKK3N0YXRpYyB2b2lkIG51bWFxX3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaykKIHsKIAkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cwogCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0CkBAIC00NzIsNyArNDcyLDggQEAKIAkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKIAkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgogCSAqLwotCSpyZXRtYXNrID0gKGNwdW1hc2tfdCl7IHsgWzBdID0gQVBJQ19BTExfQ1BVUywgfSB9OworCWNwdW1hc2tfY2xlYXIocmV0bWFzayk7CisJY3B1bWFza19iaXRzKHJldG1hc2spWzBdID0gQVBJQ19BTExfQ1BVUzsKIH0KIAogc3RhdGljIHZvaWQgbnVtYXFfc2V0dXBfcG9ydGlvX3JlbWFwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfMzIuYwppbmRleCAxNDFjOTlhLi4wMWVkYTJhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzMyLmMKQEAgLTgzLDcgKzgzLDggQEAKIAkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKIAkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgogCSAqLwotCSpyZXRtYXNrID0gKGNwdW1hc2tfdCkgeyB7IFswXSA9IEFQSUNfQUxMX0NQVVMgfSB9OworCWNwdW1hc2tfY2xlYXIocmV0bWFzayk7CisJY3B1bWFza19iaXRzKHJldG1hc2spWzBdID0gQVBJQ19BTExfQ1BVUzsKIH0KIAogLyogc2hvdWxkIGJlIGNhbGxlZCBsYXN0LiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvc3VtbWl0XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYwppbmRleCBhYWM1MmZhLi45Y2ZlMWY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9zdW1taXRfMzIuYwpAQCAtNTMsMjMgKzUzLDE5IEBACiAJcmV0dXJuICh4ID4+IDI0KSAmIDB4RkY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzdW1taXRfc2VuZF9JUElfbWFzayhjb25zdCBjcHVtYXNrX3QgKm1hc2ssIGludCB2ZWN0b3IpCitzdGF0aWMgaW5saW5lIHZvaWQgc3VtbWl0X3NlbmRfSVBJX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIGludCB2ZWN0b3IpCiB7CiAJZGVmYXVsdF9zZW5kX0lQSV9tYXNrX3NlcXVlbmNlX2xvZ2ljYWwobWFzaywgdmVjdG9yKTsKIH0KIAogc3RhdGljIHZvaWQgc3VtbWl0X3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3RvcikKIHsKLQljcHVtYXNrX3QgbWFzayA9IGNwdV9vbmxpbmVfbWFwOwotCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIG1hc2spOwotCi0JaWYgKCFjcHVzX2VtcHR5KG1hc2spKQotCQlzdW1taXRfc2VuZF9JUElfbWFzaygmbWFzaywgdmVjdG9yKTsKKwlkZWZhdWx0X3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZl9sb2dpY2FsKGNwdV9vbmxpbmVfbWFzaywgdmVjdG9yKTsKIH0KIAogc3RhdGljIHZvaWQgc3VtbWl0X3NlbmRfSVBJX2FsbChpbnQgdmVjdG9yKQogewotCXN1bW1pdF9zZW5kX0lQSV9tYXNrKCZjcHVfb25saW5lX21hcCwgdmVjdG9yKTsKKwlzdW1taXRfc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7CiB9CiAKICNpbmNsdWRlIDxhc20vdHNjLmg+CkBAIC0xODYsMTMgKzE4MiwxMyBAQAogCiAjZGVmaW5lIFNVTU1JVF9BUElDX0RGUl9WQUxVRQkoQVBJQ19ERlJfQ0xVU1RFUikKIAotc3RhdGljIGNvbnN0IGNwdW1hc2tfdCAqc3VtbWl0X3RhcmdldF9jcHVzKHZvaWQpCitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKnN1bW1pdF90YXJnZXRfY3B1cyh2b2lkKQogewogCS8qIENQVV9NQVNLX0FMTCAoMHhmZikgaGFzIHVuZGVmaW5lZCBiZWhhdmlvdXIgd2l0aAogCSAqIGRlc3RfTG93ZXN0UHJpbyBtb2RlIGxvZ2ljYWwgY2x1c3RlcmVkIGFwaWMgaW50ZXJydXB0IHJvdXRpbmcKIAkgKiBKdXN0IHN0YXJ0IG9uIGNwdSAwLiAgSVJRIGJhbGFuY2luZyB3aWxsIHNwcmVhZCBsb2FkCiAJICovCi0JcmV0dXJuICZjcHVtYXNrX29mX2NwdSgwKTsKKwlyZXR1cm4gY3B1bWFza19vZigwKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VtbWl0X2NoZWNrX2FwaWNpZF91c2VkKHBoeXNpZF9tYXNrX3QgYml0bWFwLCBpbnQgYXBpY2lkKQpAQCAtMjg5LDcgKzI4NSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3VtbWl0X2NwdV9tYXNrX3RvX2FwaWNpZChjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2spCitzdGF0aWMgdW5zaWduZWQgaW50IHN1bW1pdF9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCiB7CiAJdW5zaWduZWQgaW50IHJvdW5kID0gMDsKIAlpbnQgY3B1LCBhcGljaWQgPSAwOwpAQCAtMzQ2LDcgKzM0Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHN1bW1pdF92ZWN0b3JfYWxsb2NhdGlvbl9kb21haW4oaW50IGNwdSwgY3B1bWFza190ICpyZXRtYXNrKQorc3RhdGljIHZvaWQgc3VtbWl0X3ZlY3Rvcl9hbGxvY2F0aW9uX2RvbWFpbihpbnQgY3B1LCBzdHJ1Y3QgY3B1bWFzayAqcmV0bWFzaykKIHsKIAkvKiBDYXJlZnVsLiBTb21lIGNwdXMgZG8gbm90IHN0cmljdGx5IGhvbm9yIHRoZSBzZXQgb2YgY3B1cwogCSAqIHNwZWNpZmllZCBpbiB0aGUgaW50ZXJydXB0IGRlc3RpbmF0aW9uIHdoZW4gdXNpbmcgbG93ZXN0CkBAIC0zNTYsNyArMzUyLDggQEAKIAkgKiBkZWxpdmVyIGludGVycnVwdHMgdG8gdGhlIHdyb25nIGh5cGVydGhyZWFkIHdoZW4gb25seSBvbmUKIAkgKiBoeXBlcnRocmVhZCB3YXMgc3BlY2lmaWVkIGluIHRoZSBpbnRlcnJ1cHQgZGVzaXRpbmF0aW9uLgogCSAqLwotCSpyZXRtYXNrID0gKGNwdW1hc2tfdCl7IHsgWzBdID0gQVBJQ19BTExfQ1BVUywgfSB9OworCWNwdW1hc2tfY2xlYXIocmV0bWFzayk7CisJY3B1bWFza19iaXRzKHJldG1hc2spWzBdID0gQVBJQ19BTExfQ1BVUzsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfU1VNTUlUX05VTUEKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCmluZGV4IDFiZDZkYTEuLjEyNDgzMTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYwpAQCAtMTE4LDE3ICsxMTgsMTIgQEAKIAogc3RhdGljIHZvaWQgdXZfc2VuZF9JUElfb25lKGludCBjcHUsIGludCB2ZWN0b3IpCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWwsIGFwaWNpZDsKKwl1bnNpZ25lZCBsb25nIGFwaWNpZDsKIAlpbnQgcG5vZGU7CiAKIAlhcGljaWQgPSBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwogCXBub2RlID0gdXZfYXBpY2lkX3RvX3Bub2RlKGFwaWNpZCk7Ci0KLQl2YWwgPSAoMVVMIDw8IFVWSF9JUElfSU5UX1NFTkRfU0hGVCkgfAotCSAgICAgIChhcGljaWQgPDwgVVZIX0lQSV9JTlRfQVBJQ19JRF9TSEZUKSB8Ci0JICAgICAgKHZlY3RvciA8PCBVVkhfSVBJX0lOVF9WRUNUT1JfU0hGVCk7Ci0KLQl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9JUElfSU5ULCB2YWwpOworCXV2X2h1Yl9zZW5kX2lwaShwbm9kZSwgYXBpY2lkLCB2ZWN0b3IpOwogfQogCiBzdGF0aWMgdm9pZCB1dl9zZW5kX0lQSV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgdmVjdG9yKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCmluZGV4IGFjNzc4M2EuLjQ5ZTA5MzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKQEAgLTQ2Niw3ICs0NjYsNyBAQAogICoJQGVycjogQVBNIEJJT1MgcmV0dXJuIGNvZGUKICAqCiAgKglXcml0ZSBhIG1lYW5pbmdmdWwgbG9nIGVudHJ5IHRvIHRoZSBrZXJuZWwgbG9nIGluIHRoZSBldmVudCBvZgotICoJYW4gQVBNIGVycm9yLgorICoJYW4gQVBNIGVycm9yLiAgTm90ZSB0aGF0IHRoaXMgYWxzbyBoYW5kbGVzIChuZWdhdGl2ZSkga2VybmVsIGVycm9ycy4KICAqLwogCiBzdGF0aWMgdm9pZCBhcG1fZXJyb3IoY2hhciAqc3RyLCBpbnQgZXJyKQpAQCAtNDc4LDQzICs0NzgsMTQgQEAKIAkJCWJyZWFrOwogCWlmIChpIDwgRVJST1JfQ09VTlQpCiAJCXByaW50ayhLRVJOX05PVElDRSAiYXBtOiAlczogJXNcbiIsIHN0ciwgZXJyb3JfdGFibGVbaV0ubXNnKTsKKwllbHNlIGlmIChlcnIgPCAwKQorCQlwcmludGsoS0VSTl9OT1RJQ0UgImFwbTogJXM6IGxpbnV4IGVycm9yIGNvZGUgJWlcbiIsIHN0ciwgZXJyKTsKIAllbHNlCiAJCXByaW50ayhLRVJOX05PVElDRSAiYXBtOiAlczogdW5rbm93biBlcnJvciBjb2RlICUjMi4yeFxuIiwKIAkJICAgICAgIHN0ciwgZXJyKTsKIH0KIAogLyoKLSAqIExvY2sgQVBNIGZ1bmN0aW9uYWxpdHkgdG8gcGh5c2ljYWwgQ1BVIDAKLSAqLwotCi0jaWZkZWYgQ09ORklHX1NNUAotCi1zdGF0aWMgY3B1bWFza190IGFwbV9zYXZlX2NwdXModm9pZCkKLXsKLQljcHVtYXNrX3QgeCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQkvKiBTb21lIGJpb3NlcyBkb24ndCBsaWtlIGJlaW5nIGNhbGxlZCBmcm9tIENQVSAhPSAwICovCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdSgwKSk7Ci0JQlVHX09OKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSAwKTsKLQlyZXR1cm4geDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFwbV9yZXN0b3JlX2NwdXMoY3B1bWFza190IG1hc2spCi17Ci0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBtYXNrKTsKLX0KLQotI2Vsc2UKLQotLyoKLSAqCU5vIENQVSBsb2NrZG93biBuZWVkZWQgb24gYSB1bmlwcm9jZXNzb3IKLSAqLwotCi0jZGVmaW5lIGFwbV9zYXZlX2NwdXMoKQkJKGN1cnJlbnQtPmNwdXNfYWxsb3dlZCkKLSNkZWZpbmUgYXBtX3Jlc3RvcmVfY3B1cyh4KQkodm9pZCkoeCkKLQotI2VuZGlmCi0KLS8qCiAgKiBUaGVzZSBhcmUgdGhlIGFjdHVhbCBCSU9TIGNhbGxzLiAgRGVwZW5kaW5nIG9uIEFQTV9aRVJPX1NFR1MgYW5kCiAgKiBhcG1faW5mby5hbGxvd19pbnRzLCB3ZSBhcmUgYmVpbmcgcmVhbGx5IHBhcmFub2lkIGhlcmUhICBOb3Qgb25seQogICogYXJlIGludGVycnVwdHMgZGlzYWJsZWQsIGJ1dCBhbGwgdGhlIHNlZ21lbnQgcmVnaXN0ZXJzIChleGNlcHQgU1MpCkBAIC01NjgsMTYgKzUzOSwyMyBAQAogIwlkZWZpbmUgQVBNX0RPX1JFU1RPUkVfU0VHUwogI2VuZGlmCiAKK3N0cnVjdCBhcG1fYmlvc19jYWxsIHsKKwl1MzIgZnVuYzsKKwkvKiBJbiBhbmQgb3V0ICovCisJdTMyIGVieDsKKwl1MzIgZWN4OworCS8qIE91dCBvbmx5ICovCisJdTMyIGVheDsKKwl1MzIgZWR4OworCXUzMiBlc2k7CisKKwkvKiBFcnJvcjogLUVOT01FTSwgb3IgYml0cyA4LTE1IG9mIGVheCAqLworCWludCBlcnI7Cit9OworCiAvKioKLSAqCWFwbV9iaW9zX2NhbGwJLQlNYWtlIGFuIEFQTSBCSU9TIDMyYml0IGNhbGwKLSAqCUBmdW5jOiBBUE0gZnVuY3Rpb24gdG8gZXhlY3V0ZQotICoJQGVieF9pbjogRUJYIHJlZ2lzdGVyIGZvciBjYWxsIGVudHJ5Ci0gKglAZWN4X2luOiBFQ1ggcmVnaXN0ZXIgZm9yIGNhbGwgZW50cnkKLSAqCUBlYXg6IEVBWCByZWdpc3RlciByZXR1cm4KLSAqCUBlYng6IEVCWCByZWdpc3RlciByZXR1cm4KLSAqCUBlY3g6IEVDWCByZWdpc3RlciByZXR1cm4KLSAqCUBlZHg6IEVEWCByZWdpc3RlciByZXR1cm4KLSAqCUBlc2k6IEVTSSByZWdpc3RlciByZXR1cm4KKyAqCV9fYXBtX2Jpb3NfY2FsbCAtIE1ha2UgYW4gQVBNIEJJT1MgMzJiaXQgY2FsbAorICoJQF9jYWxsOiBwb2ludGVyIHRvIHN0cnVjdCBhcG1fYmlvc19jYWxsLgogICoKICAqCU1ha2UgYW4gQVBNIGNhbGwgdXNpbmcgdGhlIDMyYml0IHByb3RlY3RlZCBtb2RlIGludGVyZmFjZS4gVGhlCiAgKgljYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGtub3dpbmcgaWYgQVBNIEJJT1MgaXMgY29uZmlndXJlZCBhbmQKQEAgLTU4NiwzNSArNTY0LDEwOSBAQAogICoJZmxhZyBpcyBsb2FkZWQgaW50byBBTC4gIElmIHRoZXJlIGlzIGFuIGVycm9yLCB0aGVuIHRoZSBlcnJvcgogICoJY29kZSBpcyByZXR1cm5lZCBpbiBBSCAoYml0cyA4LTE1IG9mIGVheCkgYW5kIHRoaXMgZnVuY3Rpb24KICAqCXJldHVybnMgbm9uLXplcm8uCisgKgorICoJTm90ZTogdGhpcyBtYWtlcyB0aGUgY2FsbCBvbiB0aGUgY3VycmVudCBDUFUuCiAgKi8KLQotc3RhdGljIHU4IGFwbV9iaW9zX2NhbGwodTMyIGZ1bmMsIHUzMiBlYnhfaW4sIHUzMiBlY3hfaW4sCi0JdTMyICplYXgsIHUzMiAqZWJ4LCB1MzIgKmVjeCwgdTMyICplZHgsIHUzMiAqZXNpKQorc3RhdGljIGxvbmcgX19hcG1fYmlvc19jYWxsKHZvaWQgKl9jYWxsKQogewogCUFQTV9ERUNMX1NFR1MKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQljcHVtYXNrX3QJCWNwdXM7CiAJaW50CQkJY3B1OwogCXN0cnVjdCBkZXNjX3N0cnVjdAlzYXZlX2Rlc2NfNDA7CiAJc3RydWN0IGRlc2Nfc3RydWN0CSpnZHQ7Ci0KLQljcHVzID0gYXBtX3NhdmVfY3B1cygpOworCXN0cnVjdCBhcG1fYmlvc19jYWxsCSpjYWxsID0gX2NhbGw7CiAKIAljcHUgPSBnZXRfY3B1KCk7CisJQlVHX09OKGNwdSAhPSAwKTsKIAlnZHQgPSBnZXRfY3B1X2dkdF90YWJsZShjcHUpOwogCXNhdmVfZGVzY180MCA9IGdkdFsweDQwIC8gOF07CiAJZ2R0WzB4NDAgLyA4XSA9IGJhZF9iaW9zX2Rlc2M7CiAKIAlhcG1faXJxX3NhdmUoZmxhZ3MpOwogCUFQTV9ET19TQVZFX1NFR1M7Ci0JYXBtX2Jpb3NfY2FsbF9hc20oZnVuYywgZWJ4X2luLCBlY3hfaW4sIGVheCwgZWJ4LCBlY3gsIGVkeCwgZXNpKTsKKwlhcG1fYmlvc19jYWxsX2FzbShjYWxsLT5mdW5jLCBjYWxsLT5lYngsIGNhbGwtPmVjeCwKKwkJCSAgJmNhbGwtPmVheCwgJmNhbGwtPmVieCwgJmNhbGwtPmVjeCwgJmNhbGwtPmVkeCwKKwkJCSAgJmNhbGwtPmVzaSk7CiAJQVBNX0RPX1JFU1RPUkVfU0VHUzsKIAlhcG1faXJxX3Jlc3RvcmUoZmxhZ3MpOwogCWdkdFsweDQwIC8gOF0gPSBzYXZlX2Rlc2NfNDA7CiAJcHV0X2NwdSgpOwotCWFwbV9yZXN0b3JlX2NwdXMoY3B1cyk7CiAKLQlyZXR1cm4gKmVheCAmIDB4ZmY7CisJcmV0dXJuIGNhbGwtPmVheCAmIDB4ZmY7Cit9CisKKy8qIFJ1biBfX2FwbV9iaW9zX2NhbGwgb3IgX19hcG1fYmlvc19jYWxsX3NpbXBsZSBvbiBDUFUgMCAqLworc3RhdGljIGludCBvbl9jcHUwKGxvbmcgKCpmbikodm9pZCAqKSwgc3RydWN0IGFwbV9iaW9zX2NhbGwgKmNhbGwpCit7CisJaW50IHJldDsKKworCS8qIERvbid0IGJvdGhlciB3aXRoIHdvcmtfb25fY3B1IGluIHRoZSBjb21tb24gY2FzZSwgc28gd2UgZG9uJ3QKKwkgKiBoYXZlIHRvIHdvcnJ5IGFib3V0IE9PTSBvciBvdmVyaGVhZC4gKi8KKwlpZiAoZ2V0X2NwdSgpID09IDApIHsKKwkJcmV0ID0gZm4oY2FsbCk7CisJCXB1dF9jcHUoKTsKKwl9IGVsc2UgeworCQlwdXRfY3B1KCk7CisJCXJldCA9IHdvcmtfb25fY3B1KDAsIGZuLCBjYWxsKTsKKwl9CisKKwkvKiB3b3JrX29uX2NwdSBjYW4gZmFpbCB3aXRoIC1FTk9NRU0gKi8KKwlpZiAocmV0IDwgMCkKKwkJY2FsbC0+ZXJyID0gcmV0OworCWVsc2UKKwkJY2FsbC0+ZXJyID0gKGNhbGwtPmVheCA+PiA4KSAmIDB4ZmY7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCWFwbV9iaW9zX2NhbGwJLQlNYWtlIGFuIEFQTSBCSU9TIDMyYml0IGNhbGwgKG9uIENQVSAwKQorICoJQGNhbGw6IHRoZSBhcG1fYmlvc19jYWxsIHJlZ2lzdGVycy4KKyAqCisgKglJZiB0aGVyZSBpcyBhbiBlcnJvciwgaXQgaXMgcmV0dXJuZWQgaW4gQGNhbGwuZXJyLgorICovCitzdGF0aWMgaW50IGFwbV9iaW9zX2NhbGwoc3RydWN0IGFwbV9iaW9zX2NhbGwgKmNhbGwpCit7CisJcmV0dXJuIG9uX2NwdTAoX19hcG1fYmlvc19jYWxsLCBjYWxsKTsKK30KKworLyoqCisgKglfX2FwbV9iaW9zX2NhbGxfc2ltcGxlIC0gTWFrZSBhbiBBUE0gQklPUyAzMmJpdCBjYWxsIChvbiBDUFUgMCkKKyAqCUBfY2FsbDogcG9pbnRlciB0byBzdHJ1Y3QgYXBtX2Jpb3NfY2FsbC4KKyAqCisgKglNYWtlIGEgQklPUyBjYWxsIHRoYXQgcmV0dXJucyBvbmUgdmFsdWUgb25seSwgb3IganVzdCBzdGF0dXMuCisgKglJZiB0aGVyZSBpcyBhbiBlcnJvciwgdGhlbiB0aGUgZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpbiBBSAorICoJKGJpdHMgOC0xNSBvZiBlYXgpIGFuZCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgbm9uLXplcm8gKGl0IGNhbgorICoJYWxzbyByZXR1cm4gLUVOT01FTSkuIFRoaXMgaXMgdXNlZCBmb3Igc2ltcGxlciBCSU9TIG9wZXJhdGlvbnMuCisgKglUaGlzIGNhbGwgbWF5IGhvbGQgaW50ZXJydXB0cyBvZmYgZm9yIGEgbG9uZyB0aW1lIG9uIHNvbWUgbGFwdG9wcy4KKyAqCisgKglOb3RlOiB0aGlzIG1ha2VzIHRoZSBjYWxsIG9uIHRoZSBjdXJyZW50IENQVS4KKyAqLworc3RhdGljIGxvbmcgX19hcG1fYmlvc19jYWxsX3NpbXBsZSh2b2lkICpfY2FsbCkKK3sKKwl1OAkJCWVycm9yOworCUFQTV9ERUNMX1NFR1MKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwlpbnQJCQljcHU7CisJc3RydWN0IGRlc2Nfc3RydWN0CXNhdmVfZGVzY180MDsKKwlzdHJ1Y3QgZGVzY19zdHJ1Y3QJKmdkdDsKKwlzdHJ1Y3QgYXBtX2Jpb3NfY2FsbAkqY2FsbCA9IF9jYWxsOworCisJY3B1ID0gZ2V0X2NwdSgpOworCUJVR19PTihjcHUgIT0gMCk7CisJZ2R0ID0gZ2V0X2NwdV9nZHRfdGFibGUoY3B1KTsKKwlzYXZlX2Rlc2NfNDAgPSBnZHRbMHg0MCAvIDhdOworCWdkdFsweDQwIC8gOF0gPSBiYWRfYmlvc19kZXNjOworCisJYXBtX2lycV9zYXZlKGZsYWdzKTsKKwlBUE1fRE9fU0FWRV9TRUdTOworCWVycm9yID0gYXBtX2Jpb3NfY2FsbF9zaW1wbGVfYXNtKGNhbGwtPmZ1bmMsIGNhbGwtPmVieCwgY2FsbC0+ZWN4LAorCQkJCQkgJmNhbGwtPmVheCk7CisJQVBNX0RPX1JFU1RPUkVfU0VHUzsKKwlhcG1faXJxX3Jlc3RvcmUoZmxhZ3MpOworCWdkdFsweDQwIC8gOF0gPSBzYXZlX2Rlc2NfNDA7CisJcHV0X2NwdSgpOworCXJldHVybiBlcnJvcjsKIH0KIAogLyoqCkBAIC02MjMsNDAgKzY3NSwyOCBAQAogICoJQGVieF9pbjogRUJYIHJlZ2lzdGVyIHZhbHVlIGZvciBCSU9TIGNhbGwKICAqCUBlY3hfaW46IEVDWCByZWdpc3RlciB2YWx1ZSBmb3IgQklPUyBjYWxsCiAgKglAZWF4OiBFQVggcmVnaXN0ZXIgb24gcmV0dXJuIGZyb20gdGhlIEJJT1MgY2FsbAorICoJQGVycjogYml0cwogICoKICAqCU1ha2UgYSBCSU9TIGNhbGwgdGhhdCByZXR1cm5zIG9uZSB2YWx1ZSBvbmx5LCBvciBqdXN0IHN0YXR1cy4KLSAqCUlmIHRoZXJlIGlzIGFuIGVycm9yLCB0aGVuIHRoZSBlcnJvciBjb2RlIGlzIHJldHVybmVkIGluIEFICi0gKgkoYml0cyA4LTE1IG9mIGVheCkgYW5kIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBub24temVyby4gVGhpcyBpcwotICoJdXNlZCBmb3Igc2ltcGxlciBCSU9TIG9wZXJhdGlvbnMuIFRoaXMgY2FsbCBtYXkgaG9sZCBpbnRlcnJ1cHRzCi0gKglvZmYgZm9yIGEgbG9uZyB0aW1lIG9uIHNvbWUgbGFwdG9wcy4KKyAqCUlmIHRoZXJlIGlzIGFuIGVycm9yLCB0aGVuIHRoZSBlcnJvciBjb2RlIGlzIHJldHVybmVkIGluIEBlcnIKKyAqCWFuZCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgbm9uLXplcm8uIFRoaXMgaXMgdXNlZCBmb3Igc2ltcGxlcgorICoJQklPUyBvcGVyYXRpb25zLiAgVGhpcyBjYWxsIG1heSBob2xkIGludGVycnVwdHMgb2ZmIGZvciBhIGxvbmcKKyAqCXRpbWUgb24gc29tZSBsYXB0b3BzLgogICovCi0KLXN0YXRpYyB1OCBhcG1fYmlvc19jYWxsX3NpbXBsZSh1MzIgZnVuYywgdTMyIGVieF9pbiwgdTMyIGVjeF9pbiwgdTMyICplYXgpCitzdGF0aWMgaW50IGFwbV9iaW9zX2NhbGxfc2ltcGxlKHUzMiBmdW5jLCB1MzIgZWJ4X2luLCB1MzIgZWN4X2luLCB1MzIgKmVheCwKKwkJCQlpbnQgKmVycikKIHsKLQl1OAkJCWVycm9yOwotCUFQTV9ERUNMX1NFR1MKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQljcHVtYXNrX3QJCWNwdXM7Ci0JaW50CQkJY3B1OwotCXN0cnVjdCBkZXNjX3N0cnVjdAlzYXZlX2Rlc2NfNDA7Ci0Jc3RydWN0IGRlc2Nfc3RydWN0CSpnZHQ7CisJc3RydWN0IGFwbV9iaW9zX2NhbGwgY2FsbDsKKwlpbnQgcmV0OwogCi0JY3B1cyA9IGFwbV9zYXZlX2NwdXMoKTsKKwljYWxsLmZ1bmMgPSBmdW5jOworCWNhbGwuZWJ4ID0gZWJ4X2luOworCWNhbGwuZWN4ID0gZWN4X2luOwogCi0JY3B1ID0gZ2V0X2NwdSgpOwotCWdkdCA9IGdldF9jcHVfZ2R0X3RhYmxlKGNwdSk7Ci0Jc2F2ZV9kZXNjXzQwID0gZ2R0WzB4NDAgLyA4XTsKLQlnZHRbMHg0MCAvIDhdID0gYmFkX2Jpb3NfZGVzYzsKLQotCWFwbV9pcnFfc2F2ZShmbGFncyk7Ci0JQVBNX0RPX1NBVkVfU0VHUzsKLQllcnJvciA9IGFwbV9iaW9zX2NhbGxfc2ltcGxlX2FzbShmdW5jLCBlYnhfaW4sIGVjeF9pbiwgZWF4KTsKLQlBUE1fRE9fUkVTVE9SRV9TRUdTOwotCWFwbV9pcnFfcmVzdG9yZShmbGFncyk7Ci0JZ2R0WzB4NDAgLyA4XSA9IHNhdmVfZGVzY180MDsKLQlwdXRfY3B1KCk7Ci0JYXBtX3Jlc3RvcmVfY3B1cyhjcHVzKTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0ID0gb25fY3B1MChfX2FwbV9iaW9zX2NhbGxfc2ltcGxlLCAmY2FsbCk7CisJKmVheCA9IGNhbGwuZWF4OworCSplcnIgPSBjYWxsLmVycjsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTY3OCw5ICs3MTgsMTAgQEAKIHN0YXRpYyBpbnQgYXBtX2RyaXZlcl92ZXJzaW9uKHVfc2hvcnQgKnZhbCkKIHsKIAl1MzIgZWF4OworCWludCBlcnI7CiAKLQlpZiAoYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfVkVSU0lPTiwgMCwgKnZhbCwgJmVheCkpCi0JCXJldHVybiAoZWF4ID4+IDgpICYgMHhmZjsKKwlpZiAoYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfVkVSU0lPTiwgMCwgKnZhbCwgJmVheCwgJmVycikpCisJCXJldHVybiBlcnI7CiAJKnZhbCA9IGVheDsKIAlyZXR1cm4gQVBNX1NVQ0NFU1M7CiB9CkBAIC03MDEsMjIgKzc0MiwyMSBAQAogICoJdGhhdCBBUE0gMS4yIGlzIGluIHVzZS4gSWYgbm8gbWVzc2dlcyBhcmUgcGVuZGluZyB0aGUgdmFsdWUgMHg4MAogICoJaXMgcmV0dXJuZWQgKE5vIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnRzIHBlbmRpbmcpLgogICovCi0KIHN0YXRpYyBpbnQgYXBtX2dldF9ldmVudChhcG1fZXZlbnRfdCAqZXZlbnQsIGFwbV9ldmVudGluZm9fdCAqaW5mbykKIHsKLQl1MzIgZWF4OwotCXUzMiBlYng7Ci0JdTMyIGVjeDsKLQl1MzIgZHVtbXk7CisJc3RydWN0IGFwbV9iaW9zX2NhbGwgY2FsbDsKIAotCWlmIChhcG1fYmlvc19jYWxsKEFQTV9GVU5DX0dFVF9FVkVOVCwgMCwgMCwgJmVheCwgJmVieCwgJmVjeCwKLQkJCSAgJmR1bW15LCAmZHVtbXkpKQotCQlyZXR1cm4gKGVheCA+PiA4KSAmIDB4ZmY7Ci0JKmV2ZW50ID0gZWJ4OworCWNhbGwuZnVuYyA9IEFQTV9GVU5DX0dFVF9FVkVOVDsKKwljYWxsLmVieCA9IGNhbGwuZWN4ID0gMDsKKworCWlmIChhcG1fYmlvc19jYWxsKCZjYWxsKSkKKwkJcmV0dXJuIGNhbGwuZXJyOworCisJKmV2ZW50ID0gY2FsbC5lYng7CiAJaWYgKGFwbV9pbmZvLmNvbm5lY3Rpb25fdmVyc2lvbiA8IDB4MDEwMikKIAkJKmluZm8gPSB+MDsgLyogaW5kaWNhdGUgaW5mbyBub3QgdmFsaWQgKi8KIAllbHNlCi0JCSppbmZvID0gZWN4OworCQkqaW5mbyA9IGNhbGwuZWN4OwogCXJldHVybiBBUE1fU1VDQ0VTUzsKIH0KIApAQCAtNzM3LDkgKzc3NywxMCBAQAogc3RhdGljIGludCBzZXRfcG93ZXJfc3RhdGUodV9zaG9ydCB3aGF0LCB1X3Nob3J0IHN0YXRlKQogewogCXUzMiBlYXg7CisJaW50IGVycjsKIAotCWlmIChhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19TRVRfU1RBVEUsIHdoYXQsIHN0YXRlLCAmZWF4KSkKLQkJcmV0dXJuIChlYXggPj4gOCkgJiAweGZmOworCWlmIChhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19TRVRfU1RBVEUsIHdoYXQsIHN0YXRlLCAmZWF4LCAmZXJyKSkKKwkJcmV0dXJuIGVycjsKIAlyZXR1cm4gQVBNX1NVQ0NFU1M7CiB9CiAKQEAgLTc3MCw2ICs4MTEsNyBAQAogCXU4IHJldCA9IDA7CiAJaW50IGlkbGVkID0gMDsKIAlpbnQgcG9sbGluZzsKKwlpbnQgZXJyOwogCiAJcG9sbGluZyA9ICEhKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICYgVFNfUE9MTElORyk7CiAJaWYgKHBvbGxpbmcpIHsKQEAgLTc4Miw3ICs4MjQsNyBAQAogCX0KIAlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CiAJCWlkbGVkID0gMTsKLQkJcmV0ID0gYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfSURMRSwgMCwgMCwgJmVheCk7CisJCXJldCA9IGFwbV9iaW9zX2NhbGxfc2ltcGxlKEFQTV9GVU5DX0lETEUsIDAsIDAsICZlYXgsICZlcnIpOwogCX0KIAlpZiAocG9sbGluZykKIAkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfUE9MTElORzsKQEAgLTc5Nyw4ICs4MzksNyBAQAogCQkgKiBPbmx5IHJlcG9ydCB0aGUgZmFpbHVyZSB0aGUgZmlyc3QgNSB0aW1lcy4KIAkJICovCiAJCWlmICgrK3QgPCA1KSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiYXBtX2RvX2lkbGUgZmFpbGVkICglZClcbiIsCi0JCQkgICAgICAgKGVheCA+PiA4KSAmIDB4ZmYpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgImFwbV9kb19pZGxlIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwogCQkJdCA9IGppZmZpZXM7CiAJCX0KIAkJcmV0dXJuIC0xOwpAQCAtODE2LDkgKzg1NywxMCBAQAogc3RhdGljIHZvaWQgYXBtX2RvX2J1c3kodm9pZCkKIHsKIAl1MzIgZHVtbXk7CisJaW50IGVycjsKIAogCWlmIChjbG9ja19zbG93ZWQgfHwgQUxXQVlTX0NBTExfQlVTWSkgewotCQkodm9pZClhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19CVVNZLCAwLCAwLCAmZHVtbXkpOworCQkodm9pZClhcG1fYmlvc19jYWxsX3NpbXBsZShBUE1fRlVOQ19CVVNZLCAwLCAwLCAmZHVtbXksICZlcnIpOwogCQljbG9ja19zbG93ZWQgPSAwOwogCX0KIH0KQEAgLTkzNyw3ICs5NzksNyBAQAogCiAJLyogU29tZSBiaW9zZXMgZG9uJ3QgbGlrZSBiZWluZyBjYWxsZWQgZnJvbSBDUFUgIT0gMCAqLwogCWlmIChhcG1faW5mby5yZWFsbW9kZV9wb3dlcl9vZmYpIHsKLQkJKHZvaWQpYXBtX3NhdmVfY3B1cygpOworCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKDApKTsKIAkJbWFjaGluZV9yZWFsX3Jlc3RhcnQocG9fYmlvc19jYWxsLCBzaXplb2YocG9fYmlvc19jYWxsKSk7CiAJfSBlbHNlIHsKIAkJKHZvaWQpc2V0X3N5c3RlbV9wb3dlcl9zdGF0ZShBUE1fU1RBVEVfT0ZGKTsKQEAgLTk1NiwxMiArOTk4LDEzIEBACiBzdGF0aWMgaW50IGFwbV9lbmFibGVfcG93ZXJfbWFuYWdlbWVudChpbnQgZW5hYmxlKQogewogCXUzMiBlYXg7CisJaW50IGVycjsKIAogCWlmICgoZW5hYmxlID09IDApICYmIChhcG1faW5mby5iaW9zLmZsYWdzICYgQVBNX0JJT1NfRElTRU5HQUdFRCkpCiAJCXJldHVybiBBUE1fTk9UX0VOR0FHRUQ7CiAJaWYgKGFwbV9iaW9zX2NhbGxfc2ltcGxlKEFQTV9GVU5DX0VOQUJMRV9QTSwgQVBNX0RFVklDRV9CQUxMLAotCQkJCSBlbmFibGUsICZlYXgpKQotCQlyZXR1cm4gKGVheCA+PiA4KSAmIDB4ZmY7CisJCQkJIGVuYWJsZSwgJmVheCwgJmVycikpCisJCXJldHVybiBlcnI7CiAJaWYgKGVuYWJsZSkKIAkJYXBtX2luZm8uYmlvcy5mbGFncyAmPSB+QVBNX0JJT1NfRElTQUJMRUQ7CiAJZWxzZQpAQCAtOTg2LDI0ICsxMDI5LDIzIEBACiAKIHN0YXRpYyBpbnQgYXBtX2dldF9wb3dlcl9zdGF0dXModV9zaG9ydCAqc3RhdHVzLCB1X3Nob3J0ICpiYXQsIHVfc2hvcnQgKmxpZmUpCiB7Ci0JdTMyIGVheDsKLQl1MzIgZWJ4OwotCXUzMiBlY3g7Ci0JdTMyIGVkeDsKLQl1MzIgZHVtbXk7CisJc3RydWN0IGFwbV9iaW9zX2NhbGwgY2FsbDsKKworCWNhbGwuZnVuYyA9IEFQTV9GVU5DX0dFVF9TVEFUVVM7CisJY2FsbC5lYnggPSBBUE1fREVWSUNFX0FMTDsKKwljYWxsLmVjeCA9IDA7CiAKIAlpZiAoYXBtX2luZm8uZ2V0X3Bvd2VyX3N0YXR1c19icm9rZW4pCiAJCXJldHVybiBBUE1fMzJfVU5TVVBQT1JURUQ7Ci0JaWYgKGFwbV9iaW9zX2NhbGwoQVBNX0ZVTkNfR0VUX1NUQVRVUywgQVBNX0RFVklDRV9BTEwsIDAsCi0JCQkgICZlYXgsICZlYngsICZlY3gsICZlZHgsICZkdW1teSkpCi0JCXJldHVybiAoZWF4ID4+IDgpICYgMHhmZjsKLQkqc3RhdHVzID0gZWJ4OwotCSpiYXQgPSBlY3g7CisJaWYgKGFwbV9iaW9zX2NhbGwoJmNhbGwpKQorCQlyZXR1cm4gY2FsbC5lcnI7CisJKnN0YXR1cyA9IGNhbGwuZWJ4OworCSpiYXQgPSBjYWxsLmVjeDsKIAlpZiAoYXBtX2luZm8uZ2V0X3Bvd2VyX3N0YXR1c19zd2FiaW5taW51dGVzKSB7Ci0JCSpsaWZlID0gc3dhYjE2KCh1MTYpZWR4KTsKKwkJKmxpZmUgPSBzd2FiMTYoKHUxNiljYWxsLmVkeCk7CiAJCSpsaWZlIHw9IDB4ODAwMDsKIAl9IGVsc2UKLQkJKmxpZmUgPSBlZHg7CisJCSpsaWZlID0gY2FsbC5lZHg7CiAJcmV0dXJuIEFQTV9TVUNDRVNTOwogfQogCkBAIC0xMDQ4LDEyICsxMDkwLDE0IEBACiBzdGF0aWMgaW50IGFwbV9lbmdhZ2VfcG93ZXJfbWFuYWdlbWVudCh1X3Nob3J0IGRldmljZSwgaW50IGVuYWJsZSkKIHsKIAl1MzIgZWF4OworCWludCBlcnI7CiAKIAlpZiAoKGVuYWJsZSA9PSAwKSAmJiAoZGV2aWNlID09IEFQTV9ERVZJQ0VfQUxMKQogCSAgICAmJiAoYXBtX2luZm8uYmlvcy5mbGFncyAmIEFQTV9CSU9TX0RJU0FCTEVEKSkKIAkJcmV0dXJuIEFQTV9ESVNBQkxFRDsKLQlpZiAoYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfRU5HQUdFX1BNLCBkZXZpY2UsIGVuYWJsZSwgJmVheCkpCi0JCXJldHVybiAoZWF4ID4+IDgpICYgMHhmZjsKKwlpZiAoYXBtX2Jpb3NfY2FsbF9zaW1wbGUoQVBNX0ZVTkNfRU5HQUdFX1BNLCBkZXZpY2UsIGVuYWJsZSwKKwkJCQkgJmVheCwgJmVycikpCisJCXJldHVybiBlcnI7CiAJaWYgKGRldmljZSA9PSBBUE1fREVWSUNFX0FMTCkgewogCQlpZiAoZW5hYmxlKQogCQkJYXBtX2luZm8uYmlvcy5mbGFncyAmPSB+QVBNX0JJT1NfRElTRU5HQUdFRDsKQEAgLTE2ODksMTYgKzE3MzMsMTQgQEAKIAljaGFyIAkJKnBvd2VyX3N0YXQ7CiAJY2hhciAJCSpiYXRfc3RhdDsKIAotI2lmZGVmIENPTkZJR19TTVAKIAkvKiAyMDAyLzA4LzAxIC0gV1QKIAkgKiBUaGlzIGlzIHRvIGF2b2lkIHJhbmRvbSBjcmFzaGVzIGF0IGJvb3QgdGltZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24KIAkgKiBvbiBTTVAgc3lzdGVtcyBpbiBjYXNlIG9mICJhcG09cG93ZXItb2ZmIiBtb2RlLiBTZWVuIG9uIEFTVVMgQTdNMjY2RC4KIAkgKiBTb21lIGJpb3NlcyBkb24ndCBsaWtlIGJlaW5nIGNhbGxlZCBmcm9tIENQVSAhPSAwLgogCSAqIE1ldGhvZCBzdWdnZXN0ZWQgYnkgSW5nbyBNb2xuYXIuCiAJICovCi0Jc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdSgwKSk7CisJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1bWFza19vZigwKSk7CiAJQlVHX09OKHNtcF9wcm9jZXNzb3JfaWQoKSAhPSAwKTsKLSNlbmRpZgogCiAJaWYgKGFwbV9pbmZvLmNvbm5lY3Rpb25fdmVyc2lvbiA9PSAwKSB7CiAJCWFwbV9pbmZvLmNvbm5lY3Rpb25fdmVyc2lvbiA9IGFwbV9pbmZvLmJpb3MudmVyc2lvbjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c18zMi5jIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzMyLmMKaW5kZXggZmJmMmYzMy4uNWE2YWExYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FzbS1vZmZzZXRzXzMyLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL2VsZi5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAKICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXNtLW9mZnNldHNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCmluZGV4IDg3OTNhYjMuLmU3MmYwNjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hc20tb2Zmc2V0c182NC5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2lhMzIuaD4KICNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCmluZGV4IGUyOTYyY2MuLmM0ZjY2NzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtNDEsOCArNDEsNiBAQAogCiAjaW5jbHVkZSAiY3B1LmgiCiAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0KIC8qIGFsbCBvZiB0aGVzZSBtYXNrcyBhcmUgaW5pdGlhbGl6ZWQgaW4gc2V0dXBfY3B1X2xvY2FsX21hc2tzKCkgKi8KIGNwdW1hc2tfdmFyX3QgY3B1X2luaXRpYWxpemVkX21hc2s7CiBjcHVtYXNrX3Zhcl90IGNwdV9jYWxsb3V0X21hc2s7CkBAIC02MCwxNiArNTgsNiBAQAogCWFsbG9jX2Jvb3RtZW1fY3B1bWFza192YXIoJmNwdV9zaWJsaW5nX3NldHVwX21hc2spOwogfQogCi0jZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCi0KLWNwdW1hc2tfdCBjcHVfc2libGluZ19zZXR1cF9tYXA7Ci1jcHVtYXNrX3QgY3B1X2NhbGxvdXRfbWFwOwotY3B1bWFza190IGNwdV9pbml0aWFsaXplZDsKLWNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKLQotI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KLQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgKnRoaXNfY3B1IF9fY3B1aW5pdGRhdGE7CiAKIERFRklORV9QRVJfQ1BVX1BBR0VfQUxJR05FRChzdHJ1Y3QgZ2R0X3BhZ2UsIGdkdF9wYWdlKSA9IHsgLmdkdCA9IHsKQEAgLTg1OSw2ICs4NDcsNyBAQAogdm9pZCBfX2luaXQgaWRlbnRpZnlfYm9vdF9jcHUodm9pZCkKIHsKIAlpZGVudGlmeV9jcHUoJmJvb3RfY3B1X2RhdGEpOworCWluaXRfYzFlX21hc2soKTsKICNpZmRlZiBDT05GSUdfWDg2XzMyCiAJc3lzZW50ZXJfc2V0dXAoKTsKIAllbmFibGVfc2VwX2NwdSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCmluZGV4IDIzZGE5NmUuLjE5ZjZiOWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KLSNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDx0cmFjZS9wb3dlci5oPgogCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC03Miw2ICs3Miw4IEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYWNwaV9jcHVmcmVxX2RhdGEgKiwgZHJ2X2RhdGEpOwogCitERUZJTkVfVFJBQ0UocG93ZXJfbWFyayk7CisKIC8qIGFjcGlfcGVyZl9kYXRhIGlzIGEgcG9pbnRlciB0byBwZXJjcHUgZGF0YS4gKi8KIHN0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKmFjcGlfcGVyZl9kYXRhOwogCkBAIC02ODAsNiArNjgyLDE4IEBACiAJCQkgICAgcGVyZi0+c3RhdGVzW2ldLnRyYW5zaXRpb25fbGF0ZW5jeSAqIDEwMDA7CiAJfQogCisJLyogQ2hlY2sgZm9yIGhpZ2ggbGF0ZW5jeSAoPjIwdVMpIGZyb20gYnVnZ3kgQklPU2VzLCBsaWtlIG9uIFQ0MiAqLworCWlmIChwZXJmLT5jb250cm9sX3JlZ2lzdGVyLnNwYWNlX2lkID09IEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFICYmCisJICAgIHBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPiAyMCAqIDEwMDApIHsKKwkJc3RhdGljIGludCBwcmludF9vbmNlOworCQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMjAgKiAxMDAwOworCQlpZiAoIXByaW50X29uY2UpIHsKKwkJCXByaW50X29uY2UgPSAxOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2FwcGluZyBvZmYgUC1zdGF0ZSB0cmFuaXNpb24gbGF0ZW5jeSIKKwkJCQkiIGF0IDIwIHVTXG4iKTsKKwkJfQorCX0KKwogCWRhdGEtPm1heF9mcmVxID0gcGVyZi0+c3RhdGVzWzBdLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKIAkvKiB0YWJsZSBpbml0ICovCiAJZm9yIChpID0gMDsgaSA8IHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKaW5kZXggZjFjNTFhZS4uMGJkNDhlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCQlvdXRiKDMsIDB4MjIpOwogCX0gZWxzZSBpZiAoKHByICE9IE5VTEwpICYmIHByLT5mbGFncy5ibV9jb250cm9sKSB7CiAJCS8qIERpc2FibGUgYnVzIG1hc3RlciBhcmJpdHJhdGlvbiAqLwotCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSwgMSk7CisJCWFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAxKTsKIAl9CiAJc3dpdGNoIChsb25naGF1bF92ZXJzaW9uKSB7CiAKQEAgLTMyOCw3ICszMjgsNyBAQAogCWNhc2UgVFlQRV9QT1dFUlNBVkVSOgogCQlpZiAobG9uZ2hhdWxfZmxhZ3MgJiBVU0VfQUNQSV9DMykgewogCQkJLyogRG9uJ3QgYWxsb3cgd2FrZXVwICovCi0JCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19CVVNfTUFTVEVSX1JMRCwgMCk7CisJCQlhY3BpX3dyaXRlX2JpdF9yZWdpc3RlcihBQ1BJX0JJVFJFR19CVVNfTUFTVEVSX1JMRCwgMCk7CiAJCQlkb19wb3dlcnNhdmVyKGN4LT5hZGRyZXNzLCBtdWx0c19pbmRleCwgZGlyKTsKIAkJfSBlbHNlIHsKIAkJCWRvX3Bvd2Vyc2F2ZXIoMCwgbXVsdHNfaW5kZXgsIGRpcik7CkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJb3V0YigwLCAweDIyKTsKIAl9IGVsc2UgaWYgKChwciAhPSBOVUxMKSAmJiBwci0+ZmxhZ3MuYm1fY29udHJvbCkgewogCQkvKiBFbmFibGUgYnVzIG1hc3RlciBhcmJpdHJhdGlvbiAqLwotCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSwgMCk7CisJCWFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAwKTsKIAl9CiAJb3V0YihwaWMyX21hc2ssIDB4QTEpOwkvKiByZXN0b3JlIG1hc2sgKi8KIAlvdXRiKHBpYzFfbWFzaywgMHgyMSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCmluZGV4IDQxZWQ5NDkuLjZhYzU1YmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCkBAIC0yMTEsNyArMjExLDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogI2lmZGVmIENPTkZJR19TTVAKLQljcHVtYXNrX2NvcHkocG9saWN5LT5jcHVzLCAmcGVyX2NwdShjcHVfc2libGluZ19tYXAsIHBvbGljeS0+Y3B1KSk7CisJY3B1bWFza19jb3B5KHBvbGljeS0+Y3B1cywgY3B1X3NpYmxpbmdfbWFzayhwb2xpY3ktPmNwdSkpOwogI2VuZGlmCiAKIAkvKiBFcnJhdGEgd29ya2Fyb3VuZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCBhMTVhYzk0Li40NzA5ZWFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtNTQsNyArNTQsMTAgQEAKIHN0YXRpYyBpbnQgY3B1X2ZhbWlseSA9IENQVV9PUFRFUk9OOwogCiAjaWZuZGVmIENPTkZJR19TTVAKLURFRklORV9QRVJfQ1BVKGNwdW1hc2tfdCwgY3B1X2NvcmVfbWFwKTsKK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9jb3JlX21hc2soaW50IGNwdSkKK3sKKwlyZXR1cm4gY3B1bWFza19vZigwKTsKK30KICNlbmRpZgogCiAvKiBSZXR1cm4gYSBmcmVxdWVuY3kgaW4gTUh6LCBnaXZlbiBhbiBpbnB1dCBmaWQgKi8KQEAgLTY5OSw3ICs3MDIsNyBAQAogCiAJZHByaW50aygiY2ZpZCAweCV4LCBjdmlkIDB4JXhcbiIsIGRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwogCWRhdGEtPnBvd2Vybm93X3RhYmxlID0gcG93ZXJub3dfdGFibGU7Ci0JaWYgKGZpcnN0X2NwdShwZXJfY3B1KGNwdV9jb3JlX21hcCwgZGF0YS0+Y3B1KSkgPT0gZGF0YS0+Y3B1KQorCWlmIChjcHVtYXNrX2ZpcnN0KGNwdV9jb3JlX21hc2soZGF0YS0+Y3B1KSkgPT0gZGF0YS0+Y3B1KQogCQlwcmludF9iYXNpY3MoZGF0YSk7CiAKIAlmb3IgKGogPSAwOyBqIDwgZGF0YS0+bnVtcHM7IGorKykKQEAgLTg2Miw3ICs4NjUsNyBAQAogCiAJLyogZmlsbCBpbiBkYXRhICovCiAJZGF0YS0+bnVtcHMgPSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQ7Ci0JaWYgKGZpcnN0X2NwdShwZXJfY3B1KGNwdV9jb3JlX21hcCwgZGF0YS0+Y3B1KSkgPT0gZGF0YS0+Y3B1KQorCWlmIChjcHVtYXNrX2ZpcnN0KGNwdV9jb3JlX21hc2soZGF0YS0+Y3B1KSkgPT0gZGF0YS0+Y3B1KQogCQlwcmludF9iYXNpY3MoZGF0YSk7CiAJcG93ZXJub3dfazhfYWNwaV9wc3RfdmFsdWVzKGRhdGEsIDApOwogCkBAIC0xMzAwLDcgKzEzMDMsNyBAQAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpCiAJCWNwdW1hc2tfY29weShwb2wtPmNwdXMsIGNwdW1hc2tfb2YocG9sLT5jcHUpKTsKIAllbHNlCi0JCWNwdW1hc2tfY29weShwb2wtPmNwdXMsICZwZXJfY3B1KGNwdV9jb3JlX21hcCwgcG9sLT5jcHUpKTsKKwkJY3B1bWFza19jb3B5KHBvbC0+Y3B1cywgY3B1X2NvcmVfbWFzayhwb2wtPmNwdSkpOwogCWRhdGEtPmF2YWlsYWJsZV9jb3JlcyA9IHBvbC0+Y3B1czsKIAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpCkBAIC0xMzY1LDcgKzEzNjgsNyBAQAogCXVuc2lnbmVkIGludCBraHogPSAwOwogCXVuc2lnbmVkIGludCBmaXJzdDsKIAotCWZpcnN0ID0gZmlyc3RfY3B1KHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKKwlmaXJzdCA9IGNwdW1hc2tfZmlyc3QoY3B1X2NvcmVfbWFzayhjcHUpKTsKIAlkYXRhID0gcGVyX2NwdShwb3dlcm5vd19kYXRhLCBmaXJzdCk7CiAKIAlpZiAoIWRhdGEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwppbmRleCA4YmJiMTFhLi4wMTZjMWE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKQEAgLTMyMSw3ICszMjEsNyBAQAogCiAJLyogb25seSBydW4gb24gQ1BVIHRvIGJlIHNldCwgb3Igb24gaXRzIHNpYmxpbmcgKi8KICNpZmRlZiBDT05GSUdfU01QCi0JY3B1bWFza19jb3B5KHBvbGljeS0+Y3B1cywgJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBwb2xpY3ktPmNwdSkpOworCWNwdW1hc2tfY29weShwb2xpY3ktPmNwdXMsIGNwdV9zaWJsaW5nX21hc2socG9saWN5LT5jcHUpKTsKICNlbmRpZgogCiAJY3B1c19hbGxvd2VkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggYzQ3MWViMS4uNDgzZWRhOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGNhbl9kaXNhYmxlOwogfTsKIAotI2lmZGVmIENPTkZJR19QQ0kKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpICYmIGRlZmluZWQoQ09ORklHX1NZU0ZTKQogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGs4X25iX2lkW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCAweDExMDMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCAweDEyMDMpIH0sCkBAIC0zMjQsMTUgKzMyNCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLV9fY3B1aW5pdCBjcHVpZDRfY2FjaGVfbG9va3VwKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmKQotewotCXN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqbGVhZl9yZWdzID0KLQkJKHN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqKXRoaXNfbGVhZjsKLQotCXJldHVybiBjcHVpZDRfY2FjaGVfbG9va3VwX3JlZ3MoaW5kZXgsIGxlYWZfcmVncyk7Ci19Ci0KIHN0YXRpYyBpbnQgX19jcHVpbml0IGZpbmRfbnVtX2NhY2hlX2xlYXZlcyh2b2lkKQogewogCXVuc2lnbmVkIGludAkJZWF4LCBlYngsIGVjeCwgZWR4OwpAQCAtNTA4LDYgKzQ5OSw4IEBACiAJcmV0dXJuIGwyOwogfQogCisjaWZkZWYgQ09ORklHX1NZU0ZTCisKIC8qIHBvaW50ZXIgdG8gX2NwdWlkNF9pbmZvIGFycmF5IChmb3IgZWFjaCBjYWNoZSBsZWFmKSAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBfY3B1aWQ0X2luZm8gKiwgY3B1aWQ0X2luZm8pOwogI2RlZmluZSBDUFVJRDRfSU5GT19JRFgoeCwgeSkJKCYoKHBlcl9jcHUoY3B1aWQ0X2luZm8sIHgpKVt5XSkpCkBAIC01NzEsNiArNTY0LDE1IEBACiAJcGVyX2NwdShjcHVpZDRfaW5mbywgY3B1KSA9IE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQKK19fY3B1aW5pdCBjcHVpZDRfY2FjaGVfbG9va3VwKGludCBpbmRleCwgc3RydWN0IF9jcHVpZDRfaW5mbyAqdGhpc19sZWFmKQoreworCXN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqbGVhZl9yZWdzID0KKwkJKHN0cnVjdCBfY3B1aWQ0X2luZm9fcmVncyAqKXRoaXNfbGVhZjsKKworCXJldHVybiBjcHVpZDRfY2FjaGVfbG9va3VwX3JlZ3MoaW5kZXgsIGxlYWZfcmVncyk7Cit9CisKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBnZXRfY3B1X2xlYXZlcyh2b2lkICpfcmV0dmFsKQogewogCWludCBqLCAqcmV0dmFsID0gX3JldHZhbCwgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtNjEyLDggKzYxNCw2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotI2lmZGVmIENPTkZJR19TWVNGUwotCiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKaW5kZXggY2ExNDYwNC4uODYzZjg5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKQEAgLTk5MCw3ICs5OTAsNyBAQAogCU5VTEwKIH07CiAKLXN0YXRpYyBjcHVtYXNrX3QgbWNlX2RldmljZV9pbml0aWFsaXplZCA9IENQVV9NQVNLX05PTkU7CitzdGF0aWMgY3B1bWFza192YXJfdCBtY2VfZGV2aWNlX2luaXRpYWxpemVkOwogCiAvKiBQZXIgY3B1IHN5c2RldiBpbml0LiAgQWxsIG9mIHRoZSBjcHVzIHN0aWxsIHNoYXJlIHRoZSBzYW1lIGN0bCBiYW5rICovCiBzdGF0aWMgX19jcHVpbml0IGludCBtY2VfY3JlYXRlX2RldmljZSh1bnNpZ25lZCBpbnQgY3B1KQpAQCAtMTAyMSw3ICsxMDIxLDcgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3IyOwogCX0KLQljcHVfc2V0KGNwdSwgbWNlX2RldmljZV9pbml0aWFsaXplZCk7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgbWNlX2RldmljZV9pbml0aWFsaXplZCk7CiAKIAlyZXR1cm4gMDsKIGVycm9yMjoKQEAgLTEwNDMsNyArMTA0Myw3IEBACiB7CiAJaW50IGk7CiAKLQlpZiAoIWNwdV9pc3NldChjcHUsIG1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQpKQorCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIG1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQpKQogCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBtY2VfYXR0cmlidXRlc1tpXTsgaSsrKQpAQCAtMTA1Myw3ICsxMDUzLDcgQEAKIAkJc3lzZGV2X3JlbW92ZV9maWxlKCZwZXJfY3B1KGRldmljZV9tY2UsIGNwdSksCiAJCQkmYmFua19hdHRyc1tpXSk7CiAJc3lzZGV2X3VucmVnaXN0ZXIoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpKTsKLQljcHVfY2xlYXIoY3B1LCBtY2VfZGV2aWNlX2luaXRpYWxpemVkKTsKKwljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQpOwogfQogCiAvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG1hY2hpbmUgY2hlY2tzIG9uIG9mZmxpbmVkIENQVXMuICovCkBAIC0xMTYyLDYgKzExNjIsOCBAQAogCWlmICghbWNlX2F2YWlsYWJsZSgmYm9vdF9jcHVfZGF0YSkpCiAJCXJldHVybiAtRUlPOwogCisJYWxsb2NfY3B1bWFza192YXIoJm1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQsIEdGUF9LRVJORUwpOworCiAJZXJyID0gbWNlX2luaXRfYmFua3MoKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jCmluZGV4IDdkMDFiZTguLjU2ZGRlOWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMKQEAgLTQ4NSw3ICs0ODUsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChjcHVfZGF0YShjcHUpLmNwdV9jb3JlX2lkICYmIHNoYXJlZF9iYW5rW2JhbmtdKSB7CS8qIHN5bWxpbmsgKi8KLQkJaSA9IGNwdW1hc2tfZmlyc3QoJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKKwkJaSA9IGNwdW1hc2tfZmlyc3QoY3B1X2NvcmVfbWFzayhjcHUpKTsKIAogCQkvKiBmaXJzdCBjb3JlIG5vdCB1cCB5ZXQgKi8KIAkJaWYgKGNwdV9kYXRhKGkpLmNwdV9jb3JlX2lkKQpAQCAtNTA1LDcgKzUwNSw3IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAotCQljcHVtYXNrX2NvcHkoYi0+Y3B1cywgJnBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKKwkJY3B1bWFza19jb3B5KGItPmNwdXMsIGNwdV9jb3JlX21hc2soY3B1KSk7CiAJCXBlcl9jcHUodGhyZXNob2xkX2JhbmtzLCBjcHUpW2JhbmtdID0gYjsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNTI5LDcgKzUyOSw3IEBACiAjaWZuZGVmIENPTkZJR19TTVAKIAljcHVtYXNrX3NldGFsbChiLT5jcHVzKTsKICNlbHNlCi0JY3B1bWFza19jb3B5KGItPmNwdXMsICZwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSk7CisJY3B1bWFza19jb3B5KGItPmNwdXMsIGNwdV9jb3JlX21hc2soY3B1KSk7CiAjZW5kaWYKIAogCXBlcl9jcHUodGhyZXNob2xkX2JhbmtzLCBjcHUpW2JhbmtdID0gYjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbF82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMKaW5kZXggNTdkZjNkMy4uZDZiNzJkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2ludGVsXzY0LmMKQEAgLTI0OSw3ICsyNDksNyBAQAogCWZvcl9lYWNoX29ubGluZV9jcHUgKGNwdSkgewogCQlpZiAoY3B1ID09IGR5aW5nKQogCQkJY29udGludWU7Ci0JCWlmIChzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoY3B1KSkpCisJCWlmIChzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKGNwdSkpKQogCQkJY29udGludWU7CiAJCS8qIFJlY2hlY2sgYmFua3MgaW4gY2FzZSBDUFVzIGRvbid0IGFsbCBoYXZlIHRoZSBzYW1lICovCiAJCWlmIChjbWNpX3N1cHBvcnRlZCgmYmFua3MpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKaW5kZXggMzdmMjhmYy4uMGI3NzZjMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCkBAIC00NjIsOSArNDYyLDYgQEAKIAkqYmFzZSA9IGJhc2VfaGkgPDwgKDMyIC0gUEFHRV9TSElGVCkgfCBiYXNlX2xvID4+IFBBR0VfU0hJRlQ7CiAJKnR5cGUgPSBiYXNlX2xvICYgMHhmZjsKIAotCXByaW50ayhLRVJOX0RFQlVHICIgIGdldF9tdHJyOiBjcHUlZCByZWclMDJkIGJhc2U9JTAxMGx4IHNpemU9JTAxMGx4ICVzXG4iLAotCQkJY3B1LCByZWcsICpiYXNlLCAqc2l6ZSwKLQkJCW10cnJfYXR0cmliX3RvX3N0cigqdHlwZSAmIDB4ZmYpKTsKIG91dF9wdXRfY3B1OgogCXB1dF9jcHUoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMKaW5kZXggZDY3ZTBlNC4uZjkzMDQ3ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMKQEAgLTE0LDcgKzE0LDcgQEAKIAlpZiAoYy0+eDg2X21heF9jb3JlcyAqIHNtcF9udW1fc2libGluZ3MgPiAxKSB7CiAJCXNlcV9wcmludGYobSwgInBoeXNpY2FsIGlkXHQ6ICVkXG4iLCBjLT5waHlzX3Byb2NfaWQpOwogCQlzZXFfcHJpbnRmKG0sICJzaWJsaW5nc1x0OiAlZFxuIiwKLQkJCSAgIGNwdXNfd2VpZ2h0KHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKSk7CisJCQkgICBjcHVtYXNrX3dlaWdodChjcHVfc2libGluZ19tYXNrKGNwdSkpKTsKIAkJc2VxX3ByaW50ZihtLCAiY29yZSBpZFx0XHQ6ICVkXG4iLCBjLT5jcHVfY29yZV9pZCk7CiAJCXNlcV9wcmludGYobSwgImNwdSBjb3Jlc1x0OiAlZFxuIiwgYy0+Ym9vdGVkX2NvcmVzKTsKIAkJc2VxX3ByaW50ZihtLCAiYXBpY2lkXHRcdDogJWRcbiIsIGMtPmFwaWNpZCk7CkBAIC0xNDMsOSArMTQzLDkgQEAKIHN0YXRpYyB2b2lkICpjX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7CiAJaWYgKCpwb3MgPT0gMCkJLyoganVzdCBpbiBjYXNlLCBjcHUgMCBpcyBub3QgdGhlIGZpcnN0ICovCi0JCSpwb3MgPSBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOworCQkqcG9zID0gY3B1bWFza19maXJzdChjcHVfb25saW5lX21hc2spOwogCWVsc2UKLQkJKnBvcyA9IG5leHRfY3B1X25yKCpwb3MgLSAxLCBjcHVfb25saW5lX21hcCk7CisJCSpwb3MgPSBjcHVtYXNrX25leHQoKnBvcyAtIDEsIGNwdV9vbmxpbmVfbWFzayk7CiAJaWYgKCgqcG9zKSA8IG5yX2NwdV9pZHMpCiAJCXJldHVybiAmY3B1X2RhdGEoKnBvcyk7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKaW5kZXggZGQyMTMwYi4uOTVlYTVmYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogCkBAIC0xOTYsNiArMTk3LDExIEBACiAJaW50IGNwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJLyogbm90aWZ5IHRoZSBody1icmFuY2ggdHJhY2VyIHNvIGl0IG1heSBkaXNhYmxlIHRyYWNpbmcgYW5kCisJICAgYWRkIHRoZSBsYXN0IHRyYWNlIHRvIHRoZSB0cmFjZSBidWZmZXIgLQorCSAgIHRoZSBlYXJsaWVyIHRoaXMgaGFwcGVucywgdGhlIG1vcmUgdXNlZnVsIHRoZSB0cmFjZS4gKi8KKwl0cmFjZV9od19icmFuY2hfb29wcygpOworCiAJb29wc19lbnRlcigpOwogCiAJLyogcmFjeSwgYnV0IGJldHRlciB0aGFuIHJpc2tpbmcgZGVhZGxvY2suICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKaW5kZXggNzZmNzE0MS4uNjFkZjc3NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vbm9wcy5oPgpAQCAtMjYsNiArMjcsMTggQEAKIAogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCitpbnQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZSh2b2lkKQoreworCXNldF9rZXJuZWxfdGV4dF9ydygpOworCXJldHVybiAwOworfQorCitpbnQgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcG9zdF9wcm9jZXNzKHZvaWQpCit7CisJc2V0X2tlcm5lbF90ZXh0X3JvKCk7CisJcmV0dXJuIDA7Cit9CisKIHVuaW9uIGZ0cmFjZV9jb2RlX3VuaW9uIHsKIAljaGFyIGNvZGVbTUNPVU5UX0lOU05fU0laRV07CiAJc3RydWN0IHsKQEAgLTY2LDExICs3OSwxMSBAQAogICoKICAqIDEpIFB1dCB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciBpbnRvIHRoZSBJUCBidWZmZXIKICAqICAgIGFuZCB0aGUgbmV3IGNvZGUgaW50byB0aGUgImNvZGUiIGJ1ZmZlci4KLSAqIDIpIFNldCBhIGZsYWcgdGhhdCBzYXlzIHdlIGFyZSBtb2RpZnlpbmcgY29kZQotICogMykgV2FpdCBmb3IgYW55IHJ1bm5pbmcgTk1JcyB0byBmaW5pc2guCi0gKiA0KSBXcml0ZSB0aGUgY29kZQotICogNSkgY2xlYXIgdGhlIGZsYWcuCi0gKiA2KSBXYWl0IGZvciBhbnkgcnVubmluZyBOTUlzIHRvIGZpbmlzaC4KKyAqIDIpIFdhaXQgZm9yIGFueSBydW5uaW5nIE5NSXMgdG8gZmluaXNoIGFuZCBzZXQgYSBmbGFnIHRoYXQgc2F5cworICogICAgd2UgYXJlIG1vZGlmeWluZyBjb2RlLCBpdCBpcyBkb25lIGluIGFuIGF0b21pYyBvcGVyYXRpb24uCisgKiAzKSBXcml0ZSB0aGUgY29kZQorICogNCkgY2xlYXIgdGhlIGZsYWcuCisgKiA1KSBXYWl0IGZvciBhbnkgcnVubmluZyBOTUlzIHRvIGZpbmlzaC4KICAqCiAgKiBJZiBhbiBOTUkgaXMgZXhlY3V0ZWQsIHRoZSBmaXJzdCB0aGluZyBpdCBkb2VzIGlzIHRvIGNhbGwKICAqICJmdHJhY2Vfbm1pX2VudGVyIi4gVGhpcyB3aWxsIGNoZWNrIGlmIHRoZSBmbGFnIGlzIHNldCB0byB3cml0ZQpAQCAtODIsOSArOTUsOSBAQAogICogYXJlIHRoZSBzYW1lIGFzIHdoYXQgZXhpc3RzLgogICovCiAKLXN0YXRpYyBhdG9taWNfdCBpbl9ubWkgPSBBVE9NSUNfSU5JVCgwKTsKKyNkZWZpbmUgTU9EX0NPREVfV1JJVEVfRkxBRyAoMSA8PCAzMSkJLyogc2V0IHdoZW4gTk1JIHNob3VsZCBkbyB0aGUgd3JpdGUgKi8KK3N0YXRpYyBhdG9taWNfdCBubWlfcnVubmluZyA9IEFUT01JQ19JTklUKDApOwogc3RhdGljIGludCBtb2RfY29kZV9zdGF0dXM7CQkvKiBob2xkcyByZXR1cm4gdmFsdWUgb2YgdGV4dCB3cml0ZSAqLwotc3RhdGljIGludCBtb2RfY29kZV93cml0ZTsJCS8qIHNldCB3aGVuIE5NSSBzaG91bGQgZG8gdGhlIHdyaXRlICovCiBzdGF0aWMgdm9pZCAqbW9kX2NvZGVfaXA7CQkvKiBob2xkcyB0aGUgSVAgdG8gd3JpdGUgdG8gKi8KIHN0YXRpYyB2b2lkICptb2RfY29kZV9uZXdjb2RlOwkJLyogaG9sZHMgdGhlIHRleHQgdG8gd3JpdGUgdG8gdGhlIElQICovCiAKQEAgLTEwMSw2ICsxMTQsMjAgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIHZvaWQgY2xlYXJfbW9kX2ZsYWcodm9pZCkKK3sKKwlpbnQgb2xkID0gYXRvbWljX3JlYWQoJm5taV9ydW5uaW5nKTsKKworCWZvciAoOzspIHsKKwkJaW50IG5ldyA9IG9sZCAmIH5NT0RfQ09ERV9XUklURV9GTEFHOworCisJCWlmIChvbGQgPT0gbmV3KQorCQkJYnJlYWs7CisKKwkJb2xkID0gYXRvbWljX2NtcHhjaGcoJm5taV9ydW5uaW5nLCBvbGQsIG5ldyk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBmdHJhY2VfbW9kX2NvZGUodm9pZCkKIHsKIAkvKgpAQCAtMTExLDM3ICsxMzgsNTIgQEAKIAkgKi8KIAltb2RfY29kZV9zdGF0dXMgPSBwcm9iZV9rZXJuZWxfd3JpdGUobW9kX2NvZGVfaXAsIG1vZF9jb2RlX25ld2NvZGUsCiAJCQkJCSAgICAgTUNPVU5UX0lOU05fU0laRSk7CisKKwkvKiBpZiB3ZSBmYWlsLCB0aGVuIGtpbGwgYW55IG5ldyB3cml0ZXJzICovCisJaWYgKG1vZF9jb2RlX3N0YXR1cykKKwkJY2xlYXJfbW9kX2ZsYWcoKTsKIH0KIAogdm9pZCBmdHJhY2Vfbm1pX2VudGVyKHZvaWQpCiB7Ci0JYXRvbWljX2luYygmaW5fbm1pKTsKLQkvKiBNdXN0IGhhdmUgaW5fbm1pIHNlZW4gYmVmb3JlIHJlYWRpbmcgd3JpdGUgZmxhZyAqLwotCXNtcF9tYigpOwotCWlmIChtb2RfY29kZV93cml0ZSkgeworCWlmIChhdG9taWNfaW5jX3JldHVybigmbm1pX3J1bm5pbmcpICYgTU9EX0NPREVfV1JJVEVfRkxBRykgeworCQlzbXBfcm1iKCk7CiAJCWZ0cmFjZV9tb2RfY29kZSgpOwogCQlhdG9taWNfaW5jKCZubWlfdXBkYXRlX2NvdW50KTsKIAl9CisJLyogTXVzdCBoYXZlIHByZXZpb3VzIGNoYW5nZXMgc2VlbiBiZWZvcmUgZXhlY3V0aW9ucyAqLworCXNtcF9tYigpOwogfQogCiB2b2lkIGZ0cmFjZV9ubWlfZXhpdCh2b2lkKQogewotCS8qIEZpbmlzaCBhbGwgZXhlY3V0aW9ucyBiZWZvcmUgY2xlYXJpbmcgaW5fbm1pICovCi0Jc21wX3dtYigpOwotCWF0b21pY19kZWMoJmluX25taSk7CisJLyogRmluaXNoIGFsbCBleGVjdXRpb25zIGJlZm9yZSBjbGVhcmluZyBubWlfcnVubmluZyAqLworCXNtcF9tYigpOworCWF0b21pY19kZWMoJm5taV9ydW5uaW5nKTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9mb3Jfbm1pX2FuZF9zZXRfbW9kX2ZsYWcodm9pZCkKK3sKKwlpZiAoIWF0b21pY19jbXB4Y2hnKCZubWlfcnVubmluZywgMCwgTU9EX0NPREVfV1JJVEVfRkxBRykpCisJCXJldHVybjsKKworCWRvIHsKKwkJY3B1X3JlbGF4KCk7CisJfSB3aGlsZSAoYXRvbWljX2NtcHhjaGcoJm5taV9ydW5uaW5nLCAwLCBNT0RfQ09ERV9XUklURV9GTEFHKSk7CisKKwlubWlfd2FpdF9jb3VudCsrOwogfQogCiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9ubWkodm9pZCkKIHsKLQlpbnQgd2FpdGVkID0gMDsKKwlpZiAoIWF0b21pY19yZWFkKCZubWlfcnVubmluZykpCisJCXJldHVybjsKIAotCXdoaWxlIChhdG9taWNfcmVhZCgmaW5fbm1pKSkgewotCQl3YWl0ZWQgPSAxOworCWRvIHsKIAkJY3B1X3JlbGF4KCk7Ci0JfQorCX0gd2hpbGUgKGF0b21pY19yZWFkKCZubWlfcnVubmluZykpOwogCi0JaWYgKHdhaXRlZCkKLQkJbm1pX3dhaXRfY291bnQrKzsKKwlubWlfd2FpdF9jb3VudCsrOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNTEsMTQgKzE5Myw5IEBACiAJbW9kX2NvZGVfbmV3Y29kZSA9IG5ld19jb2RlOwogCiAJLyogVGhlIGJ1ZmZlcnMgbmVlZCB0byBiZSB2aXNpYmxlIGJlZm9yZSB3ZSBsZXQgTk1JcyB3cml0ZSB0aGVtICovCi0Jc21wX3dtYigpOwotCi0JbW9kX2NvZGVfd3JpdGUgPSAxOwotCi0JLyogTWFrZSBzdXJlIHdyaXRlIGJpdCBpcyB2aXNpYmxlIGJlZm9yZSB3ZSB3YWl0IG9uIE5NSXMgKi8KIAlzbXBfbWIoKTsKIAotCXdhaXRfZm9yX25taSgpOworCXdhaXRfZm9yX25taV9hbmRfc2V0X21vZF9mbGFnKCk7CiAKIAkvKiBNYWtlIHN1cmUgYWxsIHJ1bm5pbmcgTk1JcyBoYXZlIGZpbmlzaGVkIGJlZm9yZSB3ZSB3cml0ZSB0aGUgY29kZSAqLwogCXNtcF9tYigpOwpAQCAtMTY2LDEzICsyMDMsOSBAQAogCWZ0cmFjZV9tb2RfY29kZSgpOwogCiAJLyogTWFrZSBzdXJlIHRoZSB3cml0ZSBoYXBwZW5zIGJlZm9yZSBjbGVhcmluZyB0aGUgYml0ICovCi0Jc21wX3dtYigpOwotCi0JbW9kX2NvZGVfd3JpdGUgPSAwOwotCi0JLyogbWFrZSBzdXJlIE5NSXMgc2VlIHRoZSBjbGVhcmVkIGJpdCAqLwogCXNtcF9tYigpOwogCisJY2xlYXJfbW9kX2ZsYWcoKTsKIAl3YWl0X2Zvcl9ubWkoKTsKIAogCXJldHVybiBtb2RfY29kZV9zdGF0dXM7CkBAIC0zNjgsMjUgKzQwMSw2IEBACiAJcmV0dXJuIGZ0cmFjZV9tb2Rfam1wKGlwLCBvbGRfb2Zmc2V0LCBuZXdfb2Zmc2V0KTsKIH0KIAotI2Vsc2UgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCi0KLS8qCi0gKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHBpY2tlZCBmcm9tIHRob3NlIHVzZWQgb24KLSAqIHRoaXMgcGFnZSBmb3IgZHluYW1pYyBmdHJhY2UuIFRoZXkgaGF2ZSBiZWVuCi0gKiBzaW1wbGlmaWVkIHRvIGlnbm9yZSBhbGwgdHJhY2VzIGluIE5NSSBjb250ZXh0LgotICovCi1zdGF0aWMgYXRvbWljX3QgaW5fbm1pOwotCi12b2lkIGZ0cmFjZV9ubWlfZW50ZXIodm9pZCkKLXsKLQlhdG9taWNfaW5jKCZpbl9ubWkpOwotfQotCi12b2lkIGZ0cmFjZV9ubWlfZXhpdCh2b2lkKQotewotCWF0b21pY19kZWMoJmluX25taSk7Ci19Ci0KICNlbmRpZiAvKiAhQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCiAKIC8qCkBAIC0zOTYsMTQgKzQxMCwxMyBAQAogdm9pZCBwcmVwYXJlX2Z0cmFjZV9yZXR1cm4odW5zaWduZWQgbG9uZyAqcGFyZW50LCB1bnNpZ25lZCBsb25nIHNlbGZfYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIG9sZDsKLQl1bnNpZ25lZCBsb25nIGxvbmcgY2FsbHRpbWU7CiAJaW50IGZhdWx0ZWQ7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgdHJhY2U7CiAJdW5zaWduZWQgbG9uZyByZXR1cm5faG9va2VyID0gKHVuc2lnbmVkIGxvbmcpCiAJCQkJJnJldHVybl90b19oYW5kbGVyOwogCiAJLyogTm1pJ3MgYXJlIGN1cnJlbnRseSB1bnN1cHBvcnRlZCAqLwotCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmaW5fbm1pKSkpCisJaWYgKHVubGlrZWx5KGluX25taSgpKSkKIAkJcmV0dXJuOwogCiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZjdXJyZW50LT50cmFjaW5nX2dyYXBoX3BhdXNlKSkpCkBAIC00MzksMTcgKzQ1Miw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAodW5saWtlbHkoIV9fa2VybmVsX3RleHRfYWRkcmVzcyhvbGQpKSkgewotCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOwotCQkqcGFyZW50ID0gb2xkOwotCQlXQVJOX09OKDEpOwotCQlyZXR1cm47Ci0JfQotCi0JY2FsbHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7Ci0KLQlpZiAoZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKG9sZCwgY2FsbHRpbWUsCi0JCQkJc2VsZl9hZGRyLCAmdHJhY2UuZGVwdGgpID09IC1FQlVTWSkgeworCWlmIChmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2Uob2xkLCBzZWxmX2FkZHIsICZ0cmFjZS5kZXB0aCkgPT0gLUVCVVNZKSB7CiAJCSpwYXJlbnQgPSBvbGQ7CiAJCXJldHVybjsKIAl9CkBAIC00NjMsMyArNDY2LDY2IEBACiAJfQogfQogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KKworI2lmZGVmIENPTkZJR19GVFJBQ0VfU1lTQ0FMTFMKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YVtdOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhW107CitleHRlcm4gdW5zaWduZWQgbG9uZyAqc3lzX2NhbGxfdGFibGU7CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN5c2NhbGxzX21ldGFkYXRhOworCitzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmZpbmRfc3lzY2FsbF9tZXRhKHVuc2lnbmVkIGxvbmcgKnN5c2NhbGwpCit7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN0YXJ0OworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzdG9wOworCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CisKKworCXN0YXJ0ID0gKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YTsKKwlzdG9wID0gKHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICopX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhOworCWthbGxzeW1zX2xvb2t1cCgodW5zaWduZWQgbG9uZykgc3lzY2FsbCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKKworCWZvciAoIDsgc3RhcnQgPCBzdG9wOyBzdGFydCsrKSB7CisJCWlmIChzdGFydC0+bmFtZSAmJiAhc3RyY21wKHN0YXJ0LT5uYW1lLCBzdHIpKQorCQkJcmV0dXJuIHN0YXJ0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN5c2NhbGxfbnJfdG9fbWV0YShpbnQgbnIpCit7CisJaWYgKCFzeXNjYWxsc19tZXRhZGF0YSB8fCBuciA+PSBGVFJBQ0VfU1lTQ0FMTF9NQVggfHwgbnIgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBzeXNjYWxsc19tZXRhZGF0YVtucl07Cit9CisKK3ZvaWQgYXJjaF9pbml0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKQoreworCWludCBpOworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICptZXRhOworCXVuc2lnbmVkIGxvbmcgKipwc3lzX3N5c2NhbGxfdGFibGUgPSAmc3lzX2NhbGxfdGFibGU7CisJc3RhdGljIGF0b21pY190IHJlZnM7CisKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJnJlZnMpICE9IDEpCisJCWdvdG8gZW5kOworCisJc3lzY2FsbHNfbWV0YWRhdGEgPSBremFsbG9jKHNpemVvZigqc3lzY2FsbHNfbWV0YWRhdGEpICoKKwkJCQkJRlRSQUNFX1NZU0NBTExfTUFYLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN5c2NhbGxzX21ldGFkYXRhKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX1NZU0NBTExfTUFYOyBpKyspIHsKKwkJbWV0YSA9IGZpbmRfc3lzY2FsbF9tZXRhKHBzeXNfc3lzY2FsbF90YWJsZVtpXSk7CisJCXN5c2NhbGxzX21ldGFkYXRhW2ldID0gbWV0YTsKKwl9CisJcmV0dXJuOworCisJLyogUGFyYW5vaWQ6IGF2b2lkIG92ZXJmbG93ICovCitlbmQ6CisJYXRvbWljX2RlYygmcmVmcyk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDU1Yjk0NjEuLjdiNTE2OWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwpAQCAtNjM4LDEzICs2MzgsMTMgQEAKICNlbHNlCiAJCQkiCXB1c2hmXG4iCiAJCQkvKgotCQkJICogU2tpcCBjcywgaXAsIG9yaWdfYXguCisJCQkgKiBTa2lwIGNzLCBpcCwgb3JpZ19heCBhbmQgZ3MuCiAJCQkgKiB0cmFtcG9saW5lX2hhbmRsZXIoKSB3aWxsIHBsdWcgaW4gdGhlc2UgdmFsdWVzCiAJCQkgKi8KLQkJCSIJc3VibCAkMTIsICVlc3BcbiIKKwkJCSIJc3VibCAkMTYsICVlc3BcbiIKIAkJCSIJcHVzaGwgJWZzXG4iCi0JCQkiCXB1c2hsICVkc1xuIgogCQkJIglwdXNobCAlZXNcbiIKKwkJCSIJcHVzaGwgJWRzXG4iCiAJCQkiCXB1c2hsICVlYXhcbiIKIAkJCSIJcHVzaGwgJWVicFxuIgogCQkJIglwdXNobCAlZWRpXG4iCkBAIC02NTUsMTAgKzY1NSwxMCBAQAogCQkJIgltb3ZsICVlc3AsICVlYXhcbiIKIAkJCSIJY2FsbCB0cmFtcG9saW5lX2hhbmRsZXJcbiIKIAkJCS8qIE1vdmUgZmxhZ3MgdG8gY3MgKi8KLQkJCSIJbW92bCA1MiglZXNwKSwgJWVkeFxuIgotCQkJIgltb3ZsICVlZHgsIDQ4KCVlc3ApXG4iCisJCQkiCW1vdmwgNTYoJWVzcCksICVlZHhcbiIKKwkJCSIJbW92bCAlZWR4LCA1MiglZXNwKVxuIgogCQkJLyogUmVwbGFjZSBzYXZlZCBmbGFncyB3aXRoIHRydWUgcmV0dXJuIGFkZHJlc3MuICovCi0JCQkiCW1vdmwgJWVheCwgNTIoJWVzcClcbiIKKwkJCSIJbW92bCAlZWF4LCA1NiglZXNwKVxuIgogCQkJIglwb3BsICVlYnhcbiIKIAkJCSIJcG9wbCAlZWN4XG4iCiAJCQkiCXBvcGwgJWVkeFxuIgpAQCAtNjY2LDggKzY2Niw4IEBACiAJCQkiCXBvcGwgJWVkaVxuIgogCQkJIglwb3BsICVlYnBcbiIKIAkJCSIJcG9wbCAlZWF4XG4iCi0JCQkvKiBTa2lwIGlwLCBvcmlnX2F4LCBlcywgZHMsIGZzICovCi0JCQkiCWFkZGwgJDIwLCAlZXNwXG4iCisJCQkvKiBTa2lwIGRzLCBlcywgZnMsIGdzLCBvcmlnX2F4IGFuZCBpcCAqLworCQkJIglhZGRsICQyNCwgJWVzcFxuIgogCQkJIglwb3BmXG4iCiAjZW5kaWYKIAkJCSIJcmV0XG4iKTsKQEAgLTY5MSw2ICs2OTEsNyBAQAogCXJlZ3MtPmNzID0gX19LRVJORUxfQ1M7CiAjZWxzZQogCXJlZ3MtPmNzID0gX19LRVJORUxfQ1MgfCBnZXRfa2VybmVsX3JwbCgpOworCXJlZ3MtPmdzID0gMDsKICNlbmRpZgogCXJlZ3MtPmlwID0gdHJhbXBvbGluZV9hZGRyZXNzOwogCXJlZ3MtPm9yaWdfYXggPSB+MFVMOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfYW1kLmMKaW5kZXggYzI1ZmRiMy4uNDUzYjU3OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2FtZC5jCkBAIC0xMiwzMSArMTIsMzAgQEAKICAqCiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlIHZlcnNpb24gMi4gU2VlIGZpbGUgQ09QWUlORyBmb3IgZGV0YWlscy4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyAqLwogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKLSNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9taWNyb2NvZGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkFNRCBNaWNyb2NvZGUgVXBkYXRlIERyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiUGV0ZXIgT3J1YmEiKTsKQEAgLTcyLDggKzcxLDggQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBtaWNyb2NvZGVfYW1kIHsKLQlzdHJ1Y3QgbWljcm9jb2RlX2hlYWRlcl9hbWQgaGRyOwotCXVuc2lnbmVkIGludCBtcGJbMF07CisJc3RydWN0IG1pY3JvY29kZV9oZWFkZXJfYW1kCWhkcjsKKwl1bnNpZ25lZCBpbnQJCQltcGJbMF07CiB9OwogCiAjZGVmaW5lIFVDT0RFX01BWF9TSVpFCQkJMjA0OApAQCAtMTg0LDggKzE4Myw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkICpnZXRfbmV4dF91Y29kZShjb25zdCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJCSAgICB1bnNpZ25lZCBpbnQgKm1jX3NpemUpCitzdGF0aWMgdm9pZCAqCitnZXRfbmV4dF91Y29kZShjb25zdCB1OCAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50ICptY19zaXplKQogewogCXVuc2lnbmVkIGludCB0b3RhbF9zaXplOwogCXU4IHNlY3Rpb25faGRyW1VDT0RFX0NPTlRBSU5FUl9TRUNUSU9OX0hEUl07CkBAIC0yMjMsNyArMjIyLDYgQEAKIAlyZXR1cm4gbWM7CiB9CiAKLQogc3RhdGljIGludCBpbnN0YWxsX2VxdWl2X2NwdV90YWJsZShjb25zdCB1OCAqYnVmKQogewogCXU4ICpjb250YWluZXJfaGRyW1VDT0RFX0NPTlRBSU5FUl9IRUFERVJfU0laRV07CkBAIC0zNzIsNCArMzcwLDMgQEAKIHsKIAlyZXR1cm4gJm1pY3JvY29kZV9hbWRfb3BzOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2NvcmUuYyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCmluZGV4IGM5YjcyMWIuLmEwZjM4NTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfY29yZS5jCkBAIC03MCw2NyArNzAsNzggQEAKICAqCQlGaXggc2lnbWF0Y2goKSBtYWNybyB0byBoYW5kbGUgb2xkIENQVXMgd2l0aCBwZiA9PSAwLgogICoJCVRoYW5rcyB0byBTdHVhcnQgU3dhbGVzIGZvciBwb2ludGluZyBvdXQgdGhpcyBidWcuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCi0jaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9taWNyb2NvZGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIk1pY3JvY29kZSBVcGRhdGUgRHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJUaWdyYW4gQWl2YXppYW4gPHRpZ3JhbkBhaXZhemlhbi5mc25ldC5jby51az4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZSBNSUNST0NPREVfVkVSU0lPTiAJIjIuMDAiCisjZGVmaW5lIE1JQ1JPQ09ERV9WRVJTSU9OCSIyLjAwIgogCi1zdGF0aWMgc3RydWN0IG1pY3JvY29kZV9vcHMgKm1pY3JvY29kZV9vcHM7CitzdGF0aWMgc3RydWN0IG1pY3JvY29kZV9vcHMJKm1pY3JvY29kZV9vcHM7CiAKIC8qIG5vIGNvbmN1cnJlbnQgLT53cml0ZSgpcyBhcmUgYWxsb3dlZCBvbiAvZGV2L2NwdS9taWNyb2NvZGUgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgobWljcm9jb2RlX211dGV4KTsKIAotc3RydWN0IHVjb2RlX2NwdV9pbmZvIHVjb2RlX2NwdV9pbmZvW05SX0NQVVNdOworc3RydWN0IHVjb2RlX2NwdV9pbmZvCQl1Y29kZV9jcHVfaW5mb1tOUl9DUFVTXTsKIEVYUE9SVF9TWU1CT0xfR1BMKHVjb2RlX2NwdV9pbmZvKTsKIAogI2lmZGVmIENPTkZJR19NSUNST0NPREVfT0xEX0lOVEVSRkFDRQorc3RydWN0IHVwZGF0ZV9mb3JfY3B1IHsKKwljb25zdCB2b2lkIF9fdXNlcgkqYnVmOworCXNpemVfdAkJCXNpemU7Cit9OworCitzdGF0aWMgbG9uZyB1cGRhdGVfZm9yX2NwdSh2b2lkICpfdWZjKQoreworCXN0cnVjdCB1cGRhdGVfZm9yX2NwdSAqdWZjID0gX3VmYzsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IG1pY3JvY29kZV9vcHMtPnJlcXVlc3RfbWljcm9jb2RlX3VzZXIoc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkJCQkJICAgICAgdWZjLT5idWYsIHVmYy0+c2l6ZSk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCWlmICghZXJyb3IpCisJCW1pY3JvY29kZV9vcHMtPmFwcGx5X21pY3JvY29kZShzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJldHVybiBlcnJvcjsKK30KKwogc3RhdGljIGludCBkb19taWNyb2NvZGVfdXBkYXRlKGNvbnN0IHZvaWQgX191c2VyICpidWYsIHNpemVfdCBzaXplKQogewotCWNwdW1hc2tfdCBvbGQ7CiAJaW50IGVycm9yID0gMDsKIAlpbnQgY3B1OwotCi0Jb2xkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOworCXN0cnVjdCB1cGRhdGVfZm9yX2NwdSB1ZmMgPSB7IC5idWYgPSBidWYsIC5zaXplID0gc2l6ZSB9OwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKIAogCQlpZiAoIXVjaS0+dmFsaWQpCiAJCQljb250aW51ZTsKLQotCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1bWFza19vZl9jcHUoY3B1KSk7Ci0JCWVycm9yID0gbWljcm9jb2RlX29wcy0+cmVxdWVzdF9taWNyb2NvZGVfdXNlcihjcHUsIGJ1Ziwgc2l6ZSk7CisJCWVycm9yID0gd29ya19vbl9jcHUoY3B1LCB1cGRhdGVfZm9yX2NwdSwgJnVmYyk7CiAJCWlmIChlcnJvciA8IDApCi0JCQlnb3RvIG91dDsKLQkJaWYgKCFlcnJvcikKLQkJCW1pY3JvY29kZV9vcHMtPmFwcGx5X21pY3JvY29kZShjcHUpOworCQkJYnJlYWs7CiAJfQotb3V0OgotCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZvbGQpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTk4LDE4ICsyMDksMzMgQEAKIAogTU9EVUxFX0FMSUFTX01JU0NERVYoTUlDUk9DT0RFX01JTk9SKTsKICNlbHNlCi0jZGVmaW5lIG1pY3JvY29kZV9kZXZfaW5pdCgpIDAKLSNkZWZpbmUgbWljcm9jb2RlX2Rldl9leGl0KCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBtaWNyb2NvZGVfZGV2X2luaXQoKQkwCisjZGVmaW5lIG1pY3JvY29kZV9kZXZfZXhpdCgpCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKiBmYWtlIGRldmljZSBmb3IgcmVxdWVzdF9maXJtd2FyZSAqLwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1pY3JvY29kZV9wZGV2Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKm1pY3JvY29kZV9wZGV2OworCitzdGF0aWMgbG9uZyByZWxvYWRfZm9yX2NwdSh2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgZXJyID0gMDsKKworCW11dGV4X2xvY2soJm1pY3JvY29kZV9tdXRleCk7CisJaWYgKHVjaS0+dmFsaWQpIHsKKwkJZXJyID0gbWljcm9jb2RlX29wcy0+cmVxdWVzdF9taWNyb2NvZGVfZncoc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkJCQkJCSAgJm1pY3JvY29kZV9wZGV2LT5kZXYpOworCQlpZiAoIWVycikKKwkJCW1pY3JvY29kZV9vcHMtPmFwcGx5X21pY3JvY29kZShzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0KKwltdXRleF91bmxvY2soJm1pY3JvY29kZV9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KIAogc3RhdGljIHNzaXplX3QgcmVsb2FkX3N0b3JlKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc3opCiB7Ci0Jc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGRldi0+aWQ7CiAJY2hhciAqZW5kOwogCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kLCAwKTsKIAlpbnQgZXJyID0gMDsKQEAgLTIxOCwyMSArMjQ0LDkgQEAKIAlpZiAoZW5kID09IGJ1ZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHZhbCA9PSAxKSB7Ci0JCWNwdW1hc2tfdCBvbGQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7Ci0KIAkJZ2V0X29ubGluZV9jcHVzKCk7Ci0JCWlmIChjcHVfb25saW5lKGNwdSkpIHsKLQkJCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKTsKLQkJCW11dGV4X2xvY2soJm1pY3JvY29kZV9tdXRleCk7Ci0JCQlpZiAodWNpLT52YWxpZCkgewotCQkJCWVyciA9IG1pY3JvY29kZV9vcHMtPnJlcXVlc3RfbWljcm9jb2RlX2Z3KGNwdSwKLQkJCQkJCSZtaWNyb2NvZGVfcGRldi0+ZGV2KTsKLQkJCQlpZiAoIWVycikKLQkJCQkJbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKGNwdSk7Ci0JCQl9Ci0JCQltdXRleF91bmxvY2soJm1pY3JvY29kZV9tdXRleCk7Ci0JCQlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmb2xkKTsKLQkJfQorCQlpZiAoY3B1X29ubGluZShjcHUpKQorCQkJZXJyID0gd29ya19vbl9jcHUoY3B1LCByZWxvYWRfZm9yX2NwdSwgTlVMTCk7CiAJCXB1dF9vbmxpbmVfY3B1cygpOwogCX0KIAlpZiAoZXJyKQpAQCAtMjY4LDggKzI4Miw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtY19hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IG1jX2RlZmF1bHRfYXR0cnMsCi0JLm5hbWUgPSAibWljcm9jb2RlIiwKKwkuYXR0cnMJCT0gbWNfZGVmYXVsdF9hdHRycywKKwkubmFtZQkJPSAibWljcm9jb2RlIiwKIH07CiAKIHN0YXRpYyB2b2lkIF9fbWljcm9jb2RlX2ZpbmlfY3B1KGludCBjcHUpCkBAIC0zMjgsOSArMzQyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbWljcm9jb2RlX3VwZGF0ZV9jcHUoaW50IGNwdSkKK3N0YXRpYyBsb25nIG1pY3JvY29kZV91cGRhdGVfY3B1KHZvaWQgKnVudXNlZCkKIHsKLQlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1OworCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpID0gdWNvZGVfY3B1X2luZm8gKyBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGVyciA9IDA7CiAKIAkvKgpAQCAtMzM4LDMwICszNTIsMjcgQEAKIAkgKiBvdGhlcndpc2UganVzdCByZXF1ZXN0IGEgZmlybXdhcmU6CiAJICovCiAJaWYgKHVjaS0+dmFsaWQpIHsKLQkJZXJyID0gbWljcm9jb2RlX3Jlc3VtZV9jcHUoY3B1KTsKLQl9IGVsc2UgewkKLQkJY29sbGVjdF9jcHVfaW5mbyhjcHUpOworCQllcnIgPSBtaWNyb2NvZGVfcmVzdW1lX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOworCX0gZWxzZSB7CisJCWNvbGxlY3RfY3B1X2luZm8oc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJaWYgKHVjaS0+dmFsaWQgJiYgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SVU5OSU5HKQotCQkJZXJyID0gbWljcm9jb2RlX29wcy0+cmVxdWVzdF9taWNyb2NvZGVfZncoY3B1LAorCQkJZXJyID0gbWljcm9jb2RlX29wcy0+cmVxdWVzdF9taWNyb2NvZGVfZncoCisJCQkJCXNtcF9wcm9jZXNzb3JfaWQoKSwKIAkJCQkJJm1pY3JvY29kZV9wZGV2LT5kZXYpOwogCX0KIAlpZiAoIWVycikKLQkJbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKGNwdSk7CisJCW1pY3JvY29kZV9vcHMtPmFwcGx5X21pY3JvY29kZShzbXBfcHJvY2Vzc29yX2lkKCkpOworCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIG1pY3JvY29kZV9pbml0X2NwdShpbnQgY3B1KQorc3RhdGljIGludCBtaWNyb2NvZGVfaW5pdF9jcHUoaW50IGNwdSkKIHsKLQljcHVtYXNrX3Qgb2xkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwotCi0Jc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJmNwdW1hc2tfb2ZfY3B1KGNwdSkpOwotCS8qIFdlIHNob3VsZCBiaW5kIHRoZSB0YXNrIHRvIHRoZSBDUFUgKi8KLQlCVUdfT04ocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAhPSBjcHUpOwotCisJaW50IGVycjsKIAltdXRleF9sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOwotCW1pY3JvY29kZV91cGRhdGVfY3B1KGNwdSk7CisJZXJyID0gd29ya19vbl9jcHUoY3B1LCBtaWNyb2NvZGVfdXBkYXRlX2NwdSwgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOwogCi0Jc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJm9sZCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBtY19zeXNkZXZfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNfZGV2KQpAQCAtMzc5LDggKzM5MCwxMSBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQltaWNyb2NvZGVfaW5pdF9jcHUoY3B1KTsKLQlyZXR1cm4gMDsKKwllcnIgPSBtaWNyb2NvZGVfaW5pdF9jcHUoY3B1KTsKKwlpZiAoZXJyKQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnN5c19kZXYtPmtvYmosICZtY19hdHRyX2dyb3VwKTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgbWNfc3lzZGV2X3JlbW92ZShzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzX2RldikKQEAgLTQwNCwxNCArNDE4LDE0IEBACiAJCXJldHVybiAwOwogCiAJLyogb25seSBDUFUgMCB3aWxsIGFwcGx5IHVjb2RlIGhlcmUgKi8KLQltaWNyb2NvZGVfdXBkYXRlX2NwdSgwKTsKKwltaWNyb2NvZGVfdXBkYXRlX2NwdShOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIG1jX3N5c2Rldl9kcml2ZXIgPSB7Ci0JLmFkZCA9IG1jX3N5c2Rldl9hZGQsCi0JLnJlbW92ZSA9IG1jX3N5c2Rldl9yZW1vdmUsCi0JLnJlc3VtZSA9IG1jX3N5c2Rldl9yZXN1bWUsCisJLmFkZAkJPSBtY19zeXNkZXZfYWRkLAorCS5yZW1vdmUJCT0gbWNfc3lzZGV2X3JlbW92ZSwKKwkucmVzdW1lCQk9IG1jX3N5c2Rldl9yZXN1bWUsCiB9OwogCiBzdGF0aWMgX19jcHVpbml0IGludApAQCAtNDI0LDcgKzQzOCw5IEBACiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIENQVV9PTkxJTkU6CiAJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKLQkJbWljcm9jb2RlX2luaXRfY3B1KGNwdSk7CisJCWlmIChtaWNyb2NvZGVfaW5pdF9jcHUoY3B1KSkKKwkJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBmYWlsZWQgdG8gaW5pdCBDUFUlZFxuIiwKKwkJCSAgICAgICBjcHUpOwogCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgogCWNhc2UgQ1BVX0RPV05fRkFJTEVEX0ZST1pFTjoKIAkJcHJfZGVidWcoIm1pY3JvY29kZTogQ1BVJWQgYWRkZWRcbiIsIGNwdSk7CkBAIC00NDgsNyArNDY0LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX3JlZmRhdGEgbWNfY3B1X25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsID0gbWNfY3B1X2NhbGxiYWNrLAorCS5ub3RpZmllcl9jYWxsCT0gbWNfY3B1X2NhbGxiYWNrLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWljcm9jb2RlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGVfaW50ZWwuYwppbmRleCA1ZTlmNGZjLi4xNDliOWVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlX2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21pY3JvY29kZV9pbnRlbC5jCkBAIC03MCwyOCArNzAsMjggQEAKICAqCQlGaXggc2lnbWF0Y2goKSBtYWNybyB0byBoYW5kbGUgb2xkIENQVXMgd2l0aCBwZiA9PSAwLgogICoJCVRoYW5rcyB0byBTdHVhcnQgU3dhbGVzIGZvciBwb2ludGluZyBvdXQgdGhpcyBidWcuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCi0jaW5jbHVkZSA8YXNtL21zci5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbWljcm9jb2RlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNaWNyb2NvZGUgVXBkYXRlIERyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiVGlncmFuIEFpdmF6aWFuIDx0aWdyYW5AYWl2YXppYW4uZnNuZXQuY28udWs+Iik7CkBAIC0xMjksMTIgKzEyOSwxMyBAQAogCXN0cnVjdCBleHRlbmRlZF9zaWduYXR1cmUgc2lnc1swXTsKIH07CiAKLSNkZWZpbmUgREVGQVVMVF9VQ09ERV9EQVRBU0laRSAJKDIwMDApCisjZGVmaW5lIERFRkFVTFRfVUNPREVfREFUQVNJWkUJKDIwMDApCiAjZGVmaW5lIE1DX0hFQURFUl9TSVpFCQkoc2l6ZW9mKHN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyX2ludGVsKSkKICNkZWZpbmUgREVGQVVMVF9VQ09ERV9UT1RBTFNJWkUgKERFRkFVTFRfVUNPREVfREFUQVNJWkUgKyBNQ19IRUFERVJfU0laRSkKICNkZWZpbmUgRVhUX0hFQURFUl9TSVpFCQkoc2l6ZW9mKHN0cnVjdCBleHRlbmRlZF9zaWd0YWJsZSkpCiAjZGVmaW5lIEVYVF9TSUdOQVRVUkVfU0laRQkoc2l6ZW9mKHN0cnVjdCBleHRlbmRlZF9zaWduYXR1cmUpKQogI2RlZmluZSBEV1NJWkUJCQkoc2l6ZW9mKHUzMikpCisKICNkZWZpbmUgZ2V0X3RvdGFsc2l6ZShtYykgXAogCSgoKHN0cnVjdCBtaWNyb2NvZGVfaW50ZWwgKiltYyktPmhkci50b3RhbHNpemUgPyBcCiAJICgoc3RydWN0IG1pY3JvY29kZV9pbnRlbCAqKW1jKS0+aGRyLnRvdGFsc2l6ZSA6IFwKQEAgLTE5NywzMCArMTk4LDMxIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci11cGRhdGVfbWF0Y2hfcmV2aXNpb24oc3RydWN0IG1pY3JvY29kZV9oZWFkZXJfaW50ZWwgKm1jX2hlYWRlciwJaW50IHJldikKK3VwZGF0ZV9tYXRjaF9yZXZpc2lvbihzdHJ1Y3QgbWljcm9jb2RlX2hlYWRlcl9pbnRlbCAqbWNfaGVhZGVyLCBpbnQgcmV2KQogewogCXJldHVybiAobWNfaGVhZGVyLT5yZXYgPD0gcmV2KSA/IDAgOiAxOwogfQogCiBzdGF0aWMgaW50IG1pY3JvY29kZV9zYW5pdHlfY2hlY2sodm9pZCAqbWMpCiB7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplLCBkYXRhX3NpemUsIGV4dF90YWJsZV9zaXplOwogCXN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyX2ludGVsICptY19oZWFkZXIgPSBtYzsKIAlzdHJ1Y3QgZXh0ZW5kZWRfc2lndGFibGUgKmV4dF9oZWFkZXIgPSBOVUxMOwotCXN0cnVjdCBleHRlbmRlZF9zaWduYXR1cmUgKmV4dF9zaWc7Ci0JdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplLCBkYXRhX3NpemUsIGV4dF90YWJsZV9zaXplOwogCWludCBzdW0sIG9yaWdfc3VtLCBleHRfc2lnY291bnQgPSAwLCBpOworCXN0cnVjdCBleHRlbmRlZF9zaWduYXR1cmUgKmV4dF9zaWc7CiAKIAl0b3RhbF9zaXplID0gZ2V0X3RvdGFsc2l6ZShtY19oZWFkZXIpOwogCWRhdGFfc2l6ZSA9IGdldF9kYXRhc2l6ZShtY19oZWFkZXIpOworCiAJaWYgKGRhdGFfc2l6ZSArIE1DX0hFQURFUl9TSVpFID4gdG90YWxfc2l6ZSkgewogCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogZXJyb3IhICIKLQkJCSJCYWQgZGF0YSBzaXplIGluIG1pY3JvY29kZSBkYXRhIGZpbGVcbiIpOworCQkJCSJCYWQgZGF0YSBzaXplIGluIG1pY3JvY29kZSBkYXRhIGZpbGVcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAobWNfaGVhZGVyLT5sZHJ2ZXIgIT0gMSB8fCBtY19oZWFkZXItPmhkcnZlciAhPSAxKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgIgotCQkJIlVua25vd24gbWljcm9jb2RlIHVwZGF0ZSBmb3JtYXRcbiIpOworCQkJCSJVbmtub3duIG1pY3JvY29kZSB1cGRhdGUgZm9ybWF0XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWV4dF90YWJsZV9zaXplID0gdG90YWxfc2l6ZSAtIChNQ19IRUFERVJfU0laRSArIGRhdGFfc2l6ZSk7CkBAIC0zMTgsMTEgKzMyMCwxNSBAQAogCiBzdGF0aWMgdm9pZCBhcHBseV9taWNyb2NvZGUoaW50IGNwdSkKIHsKKwlzdHJ1Y3QgbWljcm9jb2RlX2ludGVsICptY19pbnRlbDsKKwlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCB2YWxbMl07Ci0JaW50IGNwdV9udW0gPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpID0gdWNvZGVfY3B1X2luZm8gKyBjcHU7Ci0Jc3RydWN0IG1pY3JvY29kZV9pbnRlbCAqbWNfaW50ZWwgPSB1Y2ktPm1jOworCWludCBjcHVfbnVtOworCisJY3B1X251bSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJdWNpID0gdWNvZGVfY3B1X2luZm8gKyBjcHU7CisJbWNfaW50ZWwgPSB1Y2ktPm1jOwogCiAJLyogV2Ugc2hvdWxkIGJpbmQgdGhlIHRhc2sgdG8gdGhlIENQVSAqLwogCUJVR19PTihjcHVfbnVtICE9IGNwdSk7CkBAIC0zNDgsMTUgKzM1NCwxNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1pY3JvY29kZV91cGRhdGVfbG9jaywgZmxhZ3MpOwogCWlmICh2YWxbMV0gIT0gbWNfaW50ZWwtPmhkci5yZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IENQVSVkIHVwZGF0ZSBmcm9tIHJldmlzaW9uICIKLQkJCSIweCV4IHRvIDB4JXggZmFpbGVkXG4iLCBjcHVfbnVtLCB1Y2ktPmNwdV9zaWcucmV2LCB2YWxbMV0pOworCQkJCSIweCV4IHRvIDB4JXggZmFpbGVkXG4iLAorCQkJY3B1X251bSwgdWNpLT5jcHVfc2lnLnJldiwgdmFsWzFdKTsKIAkJcmV0dXJuOwogCX0KIAlwcmludGsoS0VSTl9JTkZPICJtaWNyb2NvZGU6IENQVSVkIHVwZGF0ZWQgZnJvbSByZXZpc2lvbiAiCi0JICAgICAgICIweCV4IHRvIDB4JXgsIGRhdGUgPSAlMDR4LSUwMngtJTAyeCBcbiIsCisJCQkgIjB4JXggdG8gMHgleCwgZGF0ZSA9ICUwNHgtJTAyeC0lMDJ4IFxuIiwKIAkJY3B1X251bSwgdWNpLT5jcHVfc2lnLnJldiwgdmFsWzFdLAogCQltY19pbnRlbC0+aGRyLmRhdGUgJiAweGZmZmYsCiAJCW1jX2ludGVsLT5oZHIuZGF0ZSA+PiAyNCwKIAkJKG1jX2ludGVsLT5oZHIuZGF0ZSA+PiAxNikgJiAweGZmKTsKKwogCXVjaS0+Y3B1X3NpZy5yZXYgPSB2YWxbMV07CiB9CiAKQEAgLTQwNCwxOCArNDEyLDIzIEBACiAJCWxlZnRvdmVyICAtPSBtY19zaXplOwogCX0KIAotCWlmIChuZXdfbWMpIHsKLQkJaWYgKCFsZWZ0b3ZlcikgewotCQkJaWYgKHVjaS0+bWMpCi0JCQkJdmZyZWUodWNpLT5tYyk7Ci0JCQl1Y2ktPm1jID0gKHN0cnVjdCBtaWNyb2NvZGVfaW50ZWwgKiluZXdfbWM7Ci0JCQlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUlZCBmb3VuZCBhIG1hdGNoaW5nIG1pY3JvY29kZSB1cGRhdGUgd2l0aCIKLQkJCQkgIiB2ZXJzaW9uIDB4JXggKGN1cnJlbnQ9MHgleClcbiIsCi0JCQkJY3B1LCBuZXdfcmV2LCB1Y2ktPmNwdV9zaWcucmV2KTsKLQkJfSBlbHNlCi0JCQl2ZnJlZShuZXdfbWMpOworCWlmICghbmV3X21jKQorCQlnb3RvIG91dDsKKworCWlmIChsZWZ0b3ZlcikgeworCQl2ZnJlZShuZXdfbWMpOworCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAodWNpLT5tYykKKwkJdmZyZWUodWNpLT5tYyk7CisJdWNpLT5tYyA9IChzdHJ1Y3QgbWljcm9jb2RlX2ludGVsICopbmV3X21jOworCisJcHJfZGVidWcoIm1pY3JvY29kZTogQ1BVJWQgZm91bmQgYSBtYXRjaGluZyBtaWNyb2NvZGUgdXBkYXRlIHdpdGgiCisJCSAiIHZlcnNpb24gMHgleCAoY3VycmVudD0weCV4KVxuIiwKKwkJCWNwdSwgbmV3X3JldiwgdWNpLT5jcHVfc2lnLnJldik7CisKKyBvdXQ6CiAJcmV0dXJuIChpbnQpbGVmdG92ZXI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IGM3YzQ3NzYuLjkwZjViOWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwpAQCAtMzAwLDggKzMwMCw3IEBACiBzdGF0aWMgX19kZXZpbml0IHZvaWQgdmlhX25vX2RhYyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCWlmICgoZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSAmJiBmb3JiaWRfZGFjID09IDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIlBDSTogVklBIFBDSSBicmlkZ2UgZGV0ZWN0ZWQuIERpc2FibGluZyBEQUMuXG4iKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiZGlzYWJsaW5nIERBQyBvbiBWSUEgUENJIGJyaWRnZVxuIik7CiAJCWZvcmJpZF9kYWMgPSAxOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDE1NmY4NzU4Li5jYTk4OTE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTgsNyArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+Ci0jaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8dHJhY2UvcG93ZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KICNpbmNsdWRlIDxhc20vaWRsZS5oPgpAQCAtMjIsNiArMjIsOSBAQAogCiBzdHJ1Y3Qga21lbV9jYWNoZSAqdGFza194c3RhdGVfY2FjaGVwOwogCitERUZJTkVfVFJBQ0UocG93ZXJfc3RhcnQpOworREVGSU5FX1RSQUNFKHBvd2VyX2VuZCk7CisKIGludCBhcmNoX2R1cF90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRzdCwgc3RydWN0IHRhc2tfc3RydWN0ICpzcmMpCiB7CiAJKmRzdCA9ICpzcmM7CkBAIC0zMjUsNyArMzI4LDcgQEAKIAkvKgogCSAqIFJlbW92ZSB0aGlzIENQVToKIAkgKi8KLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfb25saW5lX21hcCk7CisJc2V0X2NwdV9vbmxpbmUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBmYWxzZSk7CiAJZGlzYWJsZV9sb2NhbF9BUElDKCk7CiAKIAlmb3IgKDs7KSB7CkBAIC00NzUsMTIgKzQ3OCwxMyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgY3B1bWFza190IGMxZV9tYXNrID0gQ1BVX01BU0tfTk9ORTsKK3N0YXRpYyBjcHVtYXNrX3Zhcl90IGMxZV9tYXNrOwogc3RhdGljIGludCBjMWVfZGV0ZWN0ZWQ7CiAKIHZvaWQgYzFlX3JlbW92ZV9jcHUoaW50IGNwdSkKIHsKLQljcHVfY2xlYXIoY3B1LCBjMWVfbWFzayk7CisJaWYgKGMxZV9tYXNrICE9IE5VTEwpCisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgYzFlX21hc2spOwogfQogCiAvKgpAQCAtNTA5LDggKzUxMyw4IEBACiAJaWYgKGMxZV9kZXRlY3RlZCkgewogCQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCi0JCWlmICghY3B1X2lzc2V0KGNwdSwgYzFlX21hc2spKSB7Ci0JCQljcHVfc2V0KGNwdSwgYzFlX21hc2spOworCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjMWVfbWFzaykpIHsKKwkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIGMxZV9tYXNrKTsKIAkJCS8qCiAJCQkgKiBGb3JjZSBicm9hZGNhc3Qgc28gQUNQSSBjYW4gbm90IGludGVyZmVyZS4gTmVlZHMKIAkJCSAqIHRvIHJ1biB3aXRoIGludGVycnVwdHMgZW5hYmxlZCBhcyBpdCB1c2VzCkBAIC01NjIsNiArNTY2LDE1IEBACiAJCXBtX2lkbGUgPSBkZWZhdWx0X2lkbGU7CiB9CiAKK3ZvaWQgX19pbml0IGluaXRfYzFlX21hc2sodm9pZCkKK3sKKwkvKiBJZiB3ZSdyZSB1c2luZyBjMWVfaWRsZSwgd2UgbmVlZCB0byBhbGxvY2F0ZSBjMWVfbWFzay4gKi8KKwlpZiAocG1faWRsZSA9PSBjMWVfaWRsZSkgeworCQlhbGxvY19jcHVtYXNrX3ZhcigmYzFlX21hc2ssIEdGUF9LRVJORUwpOworCQljcHVtYXNrX2NsZWFyKGMxZV9tYXNrKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGlkbGVfc2V0dXAoY2hhciAqc3RyKQogewogCWlmICghc3RyKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggMTQwMTRkNy4uNzZmOGY4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAl1bmxhenlfZnB1KHRzayk7CiB9CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzcCwKIAl1bnNpZ25lZCBsb25nIHVudXNlZCwKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKaW5kZXggYWJiN2U2YS4uYjc1MWE0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCkBAIC0yNzgsNyArMjc4LDcgQEAKIAl1bmxhenlfZnB1KHRzayk7CiB9CiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCitpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBzcCwKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCAxOTM3ODcxLi5mZTkzNDVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZWNjb21wLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0xNDE1LDYgKzE0MTYsOSBAQAogCSAgICB0cmFjZWhvb2tfcmVwb3J0X3N5c2NhbGxfZW50cnkocmVncykpCiAJCXJldCA9IC0xTDsKIAorCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX0ZUUkFDRSkpKQorCQlmdHJhY2Vfc3lzY2FsbF9lbnRlcihyZWdzKTsKKwogCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkgewogCQlpZiAoSVNfSUEzMikKIAkJCWF1ZGl0X3N5c2NhbGxfZW50cnkoQVVESVRfQVJDSF9JMzg2LApAQCAtMTQzOCw2ICsxNDQyLDkgQEAKIAlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCiAJCWF1ZGl0X3N5c2NhbGxfZXhpdChBVURJVFNDX1JFU1VMVChyZWdzLT5heCksIHJlZ3MtPmF4KTsKIAorCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX0ZUUkFDRSkpKQorCQlmdHJhY2Vfc3lzY2FsbF9leGl0KHJlZ3MpOworCiAJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1NZU0NBTExfVFJBQ0UpKQogCQl0cmFjZWhvb2tfcmVwb3J0X3N5c2NhbGxfZXhpdChyZWdzLCAwKTsKIApAQCAtMTQ1NSw2ICsxNDYyLDYgQEAKIAkgKiBzeXN0ZW0gY2FsbCBpbnN0cnVjdGlvbi4KIAkgKi8KIAlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfU0lOR0xFU1RFUCkgJiYKLQkgICAgdHJhY2Vob29rX2NvbnNpZGVyX2ZhdGFsX3NpZ25hbChjdXJyZW50LCBTSUdUUkFQLCBTSUdfREZMKSkKKwkgICAgdHJhY2Vob29rX2NvbnNpZGVyX2ZhdGFsX3NpZ25hbChjdXJyZW50LCBTSUdUUkFQKSkKIAkJc2VuZF9zaWd0cmFwKGN1cnJlbnQsIHJlZ3MsIDAsIFRSQVBfQlJLUFQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCmluZGV4IDQwMDMzMWIuLjNhOTdhNGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKQEAgLTE1Myw3ICsxNTMsNiBAQAogc3RhdGljIHNzaXplX3QgX19pbml0IHNldHVwX3BjcHVfcmVtYXAoc2l6ZV90IHN0YXRpY19zaXplKQogewogCXN0YXRpYyBzdHJ1Y3Qgdm1fc3RydWN0IHZtOwotCXBnX2RhdGFfdCAqbGFzdDsKIAlzaXplX3QgcHRyc19zaXplLCBkeW5fc2l6ZTsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCXNzaXplX3QgcmV0OwpAQCAtMTYyLDIyICsxNjEsOSBAQAogCSAqIElmIGxhcmdlIHBhZ2UgaXNuJ3Qgc3VwcG9ydGVkLCB0aGVyZSdzIG5vIGJlbmVmaXQgaW4gZG9pbmcKIAkgKiB0aGlzLiAgQWxzbywgb24gbm9uLU5VTUEsIGVtYmVkZGluZyBpcyBiZXR0ZXIuCiAJICovCi0JaWYgKCFjcHVfaGFzX3BzZSB8fCBwY3B1X25lZWRfbnVtYSgpKQorCWlmICghY3B1X2hhc19wc2UgfHwgIXBjcHVfbmVlZF9udW1hKCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbGFzdCA9IE5VTEw7Ci0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlpbnQgbm9kZSA9IGVhcmx5X2NwdV90b19ub2RlKGNwdSk7Ci0KLQkJaWYgKG5vZGVfb25saW5lKG5vZGUpICYmIE5PREVfREFUQShub2RlKSAmJgotCQkgICAgbGFzdCAmJiBsYXN0ICE9IE5PREVfREFUQShub2RlKSkKLQkJCWdvdG8gcHJvY2VlZDsKLQotCQlsYXN0ID0gTk9ERV9EQVRBKG5vZGUpOwotCX0KLQlyZXR1cm4gLUVJTlZBTDsKLQotcHJvY2VlZDoKIAkvKgogCSAqIEN1cnJlbnRseSBzdXBwb3J0cyBvbmx5IHNpbmdsZSBwYWdlLiAgU3VwcG9ydGluZyBtdWx0aXBsZQogCSAqIHBhZ2VzIHdvbid0IGJlIHRvbyBkaWZmaWN1bHQgaWYgaXQgZXZlciBiZWNvbWVzIG5lY2Vzc2FyeS4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYyBiL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYwppbmRleCBkZmNjNzRhLi4xNDQyNTE2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAlpZiAoIW9uc2lnc3RhY2spIHsKIAkJLyogVGhpcyBpcyB0aGUgWC9PcGVuIHNhbmN0aW9uZWQgc2lnbmFsIHN0YWNrIHN3aXRjaGluZy4gICovCiAJCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSB7Ci0JCQlpZiAoc2FzX3NzX2ZsYWdzKHNwKSA9PSAwKQorCQkJaWYgKGN1cnJlbnQtPnNhc19zc19zaXplKQogCQkJCXNwID0gY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemU7CiAJCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggZWY3ZDEwMS4uNThkMjRlZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0xMDEsMTEgKzEwMSwxMSBAQAogREVGSU5FX1BFUl9DUFUodTE2LCBjcHVfbGxjX2lkKSA9IEJBRF9BUElDSUQ7CiAKIC8qIHJlcHJlc2VudGluZyBIVCBzaWJsaW5ncyBvZiBlYWNoIGxvZ2ljYWwgQ1BVICovCi1ERUZJTkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9zaWJsaW5nX21hcCk7CitERUZJTkVfUEVSX0NQVShjcHVtYXNrX3Zhcl90LCBjcHVfc2libGluZ19tYXApOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGNwdV9zaWJsaW5nX21hcCk7CiAKIC8qIHJlcHJlc2VudGluZyBIVCBhbmQgY29yZSBzaWJsaW5ncyBvZiBlYWNoIGxvZ2ljYWwgQ1BVICovCi1ERUZJTkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9jb3JlX21hcCk7CitERUZJTkVfUEVSX0NQVShjcHVtYXNrX3Zhcl90LCBjcHVfY29yZV9tYXApOwogRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGNwdV9jb3JlX21hcCk7CiAKIC8qIFBlciBDUFUgYm9nb21pcHMgYW5kIG90aGVyIHBhcmFtZXRlcnMgKi8KQEAgLTExNSwxMSArMTE1LDYgQEAKIGF0b21pY190IGluaXRfZGVhc3NlcnRlZDsKIAogI2lmIGRlZmluZWQoQ09ORklHX05VTUEpICYmIGRlZmluZWQoQ09ORklHX1g4Nl8zMikKLQotLyogd2hpY2ggbG9naWNhbCBDUFVzIGFyZSBvbiB3aGljaCBub2RlcyAqLwotY3B1bWFza190IG5vZGVfdG9fY3B1bWFza19tYXBbTUFYX05VTU5PREVTXSBfX3JlYWRfbW9zdGx5ID0KLQkJCQl7IFswIC4uLiBNQVhfTlVNTk9ERVMtMV0gPSBDUFVfTUFTS19OT05FIH07Ci1FWFBPUlRfU1lNQk9MKG5vZGVfdG9fY3B1bWFza19tYXApOwogLyogd2hpY2ggbm9kZSBlYWNoIGxvZ2ljYWwgQ1BVIGlzIG9uICovCiBpbnQgY3B1X3RvX25vZGVfbWFwW05SX0NQVVNdIF9fcmVhZF9tb3N0bHkgPSB7IFswIC4uLiBOUl9DUFVTLTFdID0gMCB9OwogRVhQT1JUX1NZTUJPTChjcHVfdG9fbm9kZV9tYXApOwpAQCAtMTI4LDcgKzEyMyw3IEBACiBzdGF0aWMgdm9pZCBtYXBfY3B1X3RvX25vZGUoaW50IGNwdSwgaW50IG5vZGUpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiTWFwcGluZyBjcHUgJWQgdG8gbm9kZSAlZFxuIiwgY3B1LCBub2RlKTsKLQljcHVtYXNrX3NldF9jcHUoY3B1LCAmbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CiAJY3B1X3RvX25vZGVfbWFwW2NwdV0gPSBub2RlOwogfQogCkBAIC0xMzksNyArMTM0LDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIlVubWFwcGluZyBjcHUgJWQgZnJvbSBhbGwgbm9kZXNcbiIsIGNwdSk7CiAJZm9yIChub2RlID0gMDsgbm9kZSA8IE1BWF9OVU1OT0RFUzsgbm9kZSsrKQotCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdKTsKKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdKTsKIAljcHVfdG9fbm9kZV9tYXBbY3B1XSA9IDA7CiB9CiAjZWxzZSAvKiAhKENPTkZJR19OVU1BICYmIENPTkZJR19YODZfMzIpICovCkBAIC0zMDEsNyArMjk2LDcgQEAKIAlfX2ZsdXNoX3RsYl9hbGwoKTsKICNlbmRpZgogCi0JLyogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHNldHRpbmcgY3B1X29ubGluZV9tYXAgKi8KKwkvKiBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgc2V0dGluZyBjcHVfb25saW5lX21hc2sgKi8KIAlzZXRfY3B1X3NpYmxpbmdfbWFwKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwogCXdtYigpOwogCkBAIC0zMzQsNiArMzI5LDIzIEBACiAJY3B1X2lkbGUoKTsKIH0KIAorI2lmZGVmIENPTkZJR19DUFVNQVNLX09GRlNUQUNLCisvKiBJbiB0aGlzIGNhc2UsIGxsY19zaGFyZWRfbWFwIGlzIGEgcG9pbnRlciB0byBhIGNwdW1hc2suICovCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9jcHVpbmZvX3g4NihzdHJ1Y3QgY3B1aW5mb194ODYgKmRzdCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpzcmMpCit7CisJc3RydWN0IGNwdW1hc2sgKmxsYyA9IGRzdC0+bGxjX3NoYXJlZF9tYXA7CisJKmRzdCA9ICpzcmM7CisJZHN0LT5sbGNfc2hhcmVkX21hcCA9IGxsYzsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9jcHVpbmZvX3g4NihzdHJ1Y3QgY3B1aW5mb194ODYgKmRzdCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpzcmMpCit7CisJKmRzdCA9ICpzcmM7Cit9CisjZW5kaWYgLyogQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sgKi8KKwogLyoKICAqIFRoZSBib290c3RyYXAga2VybmVsIGVudHJ5IGNvZGUgaGFzIHNldCB0aGVzZSB1cC4gU2F2ZSB0aGVtIGZvcgogICogYSBnaXZlbiBDUFUKQEAgLTM0Myw3ICszNTUsNyBAQAogewogCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShpZCk7CiAKLQkqYyA9IGJvb3RfY3B1X2RhdGE7CisJY29weV9jcHVpbmZvX3g4NihjLCAmYm9vdF9jcHVfZGF0YSk7CiAJYy0+Y3B1X2luZGV4ID0gaWQ7CiAJaWYgKGlkICE9IDApCiAJCWlkZW50aWZ5X3NlY29uZGFyeV9jcHUoYyk7CkBAIC0zNjcsMTUgKzM3OSwxNSBAQAogCQkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIGNwdV9zaWJsaW5nX21hc2soaSkpOwogCQkJCWNwdW1hc2tfc2V0X2NwdShpLCBjcHVfY29yZV9tYXNrKGNwdSkpOwogCQkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIGNwdV9jb3JlX21hc2soaSkpOwotCQkJCWNwdW1hc2tfc2V0X2NwdShpLCAmYy0+bGxjX3NoYXJlZF9tYXApOwotCQkJCWNwdW1hc2tfc2V0X2NwdShjcHUsICZvLT5sbGNfc2hhcmVkX21hcCk7CisJCQkJY3B1bWFza19zZXRfY3B1KGksIGMtPmxsY19zaGFyZWRfbWFwKTsKKwkJCQljcHVtYXNrX3NldF9jcHUoY3B1LCBvLT5sbGNfc2hhcmVkX21hcCk7CiAJCQl9CiAJCX0KIAl9IGVsc2UgewogCQljcHVtYXNrX3NldF9jcHUoY3B1LCBjcHVfc2libGluZ19tYXNrKGNwdSkpOwogCX0KIAotCWNwdW1hc2tfc2V0X2NwdShjcHUsICZjLT5sbGNfc2hhcmVkX21hcCk7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgYy0+bGxjX3NoYXJlZF9tYXApOwogCiAJaWYgKGN1cnJlbnRfY3B1X2RhdGEueDg2X21heF9jb3JlcyA9PSAxKSB7CiAJCWNwdW1hc2tfY29weShjcHVfY29yZV9tYXNrKGNwdSksIGNwdV9zaWJsaW5nX21hc2soY3B1KSk7CkBAIC0zODYsOCArMzk4LDggQEAKIAlmb3JfZWFjaF9jcHUoaSwgY3B1X3NpYmxpbmdfc2V0dXBfbWFzaykgewogCQlpZiAocGVyX2NwdShjcHVfbGxjX2lkLCBjcHUpICE9IEJBRF9BUElDSUQgJiYKIAkJICAgIHBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSA9PSBwZXJfY3B1KGNwdV9sbGNfaWQsIGkpKSB7Ci0JCQljcHVtYXNrX3NldF9jcHUoaSwgJmMtPmxsY19zaGFyZWRfbWFwKTsKLQkJCWNwdW1hc2tfc2V0X2NwdShjcHUsICZjcHVfZGF0YShpKS5sbGNfc2hhcmVkX21hcCk7CisJCQljcHVtYXNrX3NldF9jcHUoaSwgYy0+bGxjX3NoYXJlZF9tYXApOworCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOwogCQl9CiAJCWlmIChjLT5waHlzX3Byb2NfaWQgPT0gY3B1X2RhdGEoaSkucGh5c19wcm9jX2lkKSB7CiAJCQljcHVtYXNrX3NldF9jcHUoaSwgY3B1X2NvcmVfbWFzayhjcHUpKTsKQEAgLTQyNSwxMiArNDM3LDcgQEAKIAlpZiAoc2NoZWRfbWNfcG93ZXJfc2F2aW5ncyB8fCBzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncykKIAkJcmV0dXJuIGNwdV9jb3JlX21hc2soY3B1KTsKIAllbHNlCi0JCXJldHVybiAmYy0+bGxjX3NoYXJlZF9tYXA7Ci19Ci0KLWNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcChpbnQgY3B1KQotewotCXJldHVybiAqY3B1X2NvcmVncm91cF9tYXNrKGNwdSk7CisJCXJldHVybiBjLT5sbGNfc2hhcmVkX21hcDsKIH0KIAogc3RhdGljIHZvaWQgaW1wcmVzc19mcmllbmRzKHZvaWQpCkBAIC04OTcsOSArOTA0LDggQEAKICAqLwogc3RhdGljIF9faW5pdCB2b2lkIGRpc2FibGVfc21wKHZvaWQpCiB7Ci0JLyogdXNlIHRoZSByZWFkL3dyaXRlIHBvaW50ZXJzIHRvIHRoZSBwcmVzZW50IGFuZCBwb3NzaWJsZSBtYXBzICovCi0JY3B1bWFza19jb3B5KCZjcHVfcHJlc2VudF9tYXAsIGNwdW1hc2tfb2YoMCkpOwotCWNwdW1hc2tfY29weSgmY3B1X3Bvc3NpYmxlX21hcCwgY3B1bWFza19vZigwKSk7CisJaW5pdF9jcHVfcHJlc2VudChjcHVtYXNrX29mKDApKTsKKwlpbml0X2NwdV9wb3NzaWJsZShjcHVtYXNrX29mKDApKTsKIAlzbXBib290X2NsZWFyX2lvX2FwaWNfaXJxcygpOwogCiAJaWYgKHNtcF9mb3VuZF9jb25maWcpCkBAIC0xMDMxLDYgKzEwMzcsOCBAQAogICovCiB2b2lkIF9faW5pdCBuYXRpdmVfc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCiB7CisJdW5zaWduZWQgaW50IGk7CisKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzbXBfY3B1X2luZGV4X2RlZmF1bHQoKTsKIAljdXJyZW50X2NwdV9kYXRhID0gYm9vdF9jcHVfZGF0YTsKQEAgLTEwNDQsNiArMTA1MiwxNCBAQAogCWJvb3RfY3B1X2xvZ2ljYWxfYXBpY2lkID0gbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKCk7CiAjZW5kaWYKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IDA7ICAvKiBuZWVkZWQ/ICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJYWxsb2NfY3B1bWFza192YXIoJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBpKSwgR0ZQX0tFUk5FTCk7CisJCWFsbG9jX2NwdW1hc2tfdmFyKCZwZXJfY3B1KGNwdV9jb3JlX21hcCwgaSksIEdGUF9LRVJORUwpOworCQlhbGxvY19jcHVtYXNrX3ZhcigmY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXAsIEdGUF9LRVJORUwpOworCQljcHVtYXNrX2NsZWFyKHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBpKSk7CisJCWNwdW1hc2tfY2xlYXIocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGkpKTsKKwkJY3B1bWFza19jbGVhcihjcHVfZGF0YShpKS5sbGNfc2hhcmVkX21hcCk7CisJfQogCXNldF9jcHVfc2libGluZ19tYXAoMCk7CiAKIAllbmFibGVfSVJfeDJhcGljKCk7CkBAIC0xMTMyLDExICsxMTQ4LDExIEBACiAKIAogLyoKLSAqIGNwdV9wb3NzaWJsZV9tYXAgc2hvdWxkIGJlIHN0YXRpYywgaXQgY2Fubm90IGNoYW5nZSBhcyBjcHUncworICogY3B1X3Bvc3NpYmxlX21hc2sgc2hvdWxkIGJlIHN0YXRpYywgaXQgY2Fubm90IGNoYW5nZSBhcyBjcHUncwogICogYXJlIG9ubGluZWQsIG9yIG9mZmxpbmVkLiBUaGUgcmVhc29uIGlzIHBlci1jcHUgZGF0YS1zdHJ1Y3R1cmVzCiAgKiBhcmUgYWxsb2NhdGVkIGJ5IHNvbWUgbW9kdWxlcyBhdCBpbml0IHRpbWUsIGFuZCBkb250IGV4cGVjdCB0bwogICogZG8gdGhpcyBkeW5hbWljYWxseSBvbiBjcHUgYXJyaXZhbC9kZXBhcnR1cmUuCi0gKiBjcHVfcHJlc2VudF9tYXAgb24gdGhlIG90aGVyIGhhbmQgY2FuIGNoYW5nZSBkeW5hbWljYWxseS4KKyAqIGNwdV9wcmVzZW50X21hc2sgb24gdGhlIG90aGVyIGhhbmQgY2FuIGNoYW5nZSBkeW5hbWljYWxseS4KICAqIEluIGNhc2Ugd2hlbiBjcHVfaG90cGx1ZyBpcyBub3QgY29tcGlsZWQsIHRoZW4gd2UgcmVzb3J0IHRvIGN1cnJlbnQKICAqIGJlaGF2aW91ciwgd2hpY2ggaXMgY3B1X3Bvc3NpYmxlID09IGNwdV9wcmVzZW50LgogICogLSBBc2hvayBSYWoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCmluZGV4IDNiZGI2NDguLmZmNWM4NzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUwpAQCAtMzMyLDMgKzMzMiw1IEBACiAJLmxvbmcgc3lzX2R1cDMJCQkvKiAzMzAgKi8KIAkubG9uZyBzeXNfcGlwZTIKIAkubG9uZyBzeXNfaW5vdGlmeV9pbml0MQorCS5sb25nIHN5c19wcmVhZHYKKwkubG9uZyBzeXNfcHdyaXRldgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RsYl91di5jIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCmluZGV4IDc5YzA3MzIuLmRlYjVlYmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKQEAgLTI3NSw2ICsyNzUsOCBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoY3B1bWFza192YXJfdCwgdXZfZmx1c2hfdGxiX21hc2spOworCiAvKioKICAqIHV2X2ZsdXNoX3RsYl9vdGhlcnMgLSBnbG9iYWxseSBwdXJnZSB0cmFuc2xhdGlvbiBjYWNoZSBvZiBhIHZpcnR1YWwKICAqIGFkZHJlc3Mgb3IgYWxsIFRMQidzCkBAIC0zMDQsOCArMzA2LDcgQEAKIAkJCQkJICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICB1bnNpZ25lZCBsb25nIHZhLCB1bnNpZ25lZCBpbnQgY3B1KQogewotCXN0YXRpYyBERUZJTkVfUEVSX0NQVShjcHVtYXNrX3QsIGZsdXNoX3RsYl9tYXNrKTsKLQlzdHJ1Y3QgY3B1bWFzayAqZmx1c2hfbWFzayA9ICZfX2dldF9jcHVfdmFyKGZsdXNoX3RsYl9tYXNrKTsKKwlzdHJ1Y3QgY3B1bWFzayAqZmx1c2hfbWFzayA9IF9fZ2V0X2NwdV92YXIodXZfZmx1c2hfdGxiX21hc2spOwogCWludCBpOwogCWludCBiaXQ7CiAJaW50IGJsYWRlOwpAQCAtNzU1LDYgKzc1NiwxMCBAQAogCWlmICghaXNfdXZfc3lzdGVtKCkpCiAJCXJldHVybiAwOwogCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGN1cl9jcHUpCisJCWFsbG9jX2NwdW1hc2tfdmFyX25vZGUoJnBlcl9jcHUodXZfZmx1c2hfdGxiX21hc2ssIGN1cl9jcHUpLAorCQkJCSAgICAgICBHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShjdXJfY3B1KSk7CisKIAl1dl9iYXVfcmV0cnlfbGltaXQgPSAxOwogCXV2X25zaGlmdCA9IHV2X2h1Yl9pbmZvLT5uX3ZhbDsKIAl1dl9tbWFzayA9ICgxVUwgPDwgdXZfaHViX2luZm8tPm5fdmFsKSAtIDE7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZyBiL2FyY2gveDg2L2t2bS9LY29uZmlnCmluZGV4IDBhMzAzYzMuLmE1ODUwNGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9LY29uZmlnCisrKyBiL2FyY2gveDg2L2t2bS9LY29uZmlnCkBAIC01OSw3ICs1OSw4IEBACiAKIGNvbmZpZyBLVk1fVFJBQ0UKIAlib29sICJLVk0gdHJhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEtWTSAmJiBNQVJLRVJTICYmIFNZU0ZTCisJZGVwZW5kcyBvbiBLVk0gJiYgU1lTRlMKKwlzZWxlY3QgTUFSS0VSUwogCXNlbGVjdCBSRUxBWQogCXNlbGVjdCBERUJVR19GUwogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQppbmRleCAwODUzNzc0Li5mZGQzMGQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9tbS9NYWtlZmlsZQpAQCAtMTQsNyArMTQsNyBAQAogbW1pb3RyYWNlLXkJCQk6PSBrbW1pby5vIHBmX2luLm8gbW1pby1tb2Qubwogb2JqLSQoQ09ORklHX01NSU9UUkFDRV9URVNUKQkrPSB0ZXN0bW1pb3RyYWNlLm8KIAotb2JqLSQoQ09ORklHX05VTUEpCQkrPSBudW1hXyQoQklUUykubworb2JqLSQoQ09ORklHX05VTUEpCQkrPSBudW1hLm8gbnVtYV8kKEJJVFMpLm8KIG9iai0kKENPTkZJR19LOF9OVU1BKQkJKz0gazh0b3BvbG9neV82NC5vCiBvYmotJChDT05GSUdfQUNQSV9OVU1BKQkJKz0gc3JhdF8kKEJJVFMpLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jIGIvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCmluZGV4IDUyMmRiNWUuLjgxMjZlOGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYworKysgYi9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKQEAgLTE5LDQ5ICsxOSw2IEBACiAJa3VubWFwX2hpZ2gocGFnZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRlYnVnX2ttYXBfYXRvbWljX3Byb3QoZW51bSBrbV90eXBlIHR5cGUpCi17Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KLQlzdGF0aWMgdW5zaWduZWQgd2Fybl9jb3VudCA9IDEwOwotCi0JaWYgKHVubGlrZWx5KHdhcm5fY291bnQgPT0gMCkpCi0JCXJldHVybjsKLQotCWlmICh1bmxpa2VseShpbl9pbnRlcnJ1cHQoKSkpIHsKLQkJaWYgKGluX2lycSgpKSB7Ci0JCQlpZiAodHlwZSAhPSBLTV9JUlEwICYmIHR5cGUgIT0gS01fSVJRMSAmJgotCQkJICAgIHR5cGUgIT0gS01fQklPX1NSQ19JUlEgJiYgdHlwZSAhPSBLTV9CSU9fRFNUX0lSUSAmJgotCQkJICAgIHR5cGUgIT0gS01fQk9VTkNFX1JFQUQpIHsKLQkJCQlXQVJOX09OKDEpOwotCQkJCXdhcm5fY291bnQtLTsKLQkJCX0KLQkJfSBlbHNlIGlmICghaXJxc19kaXNhYmxlZCgpKSB7CS8qIHNvZnRpcnEgKi8KLQkJCWlmICh0eXBlICE9IEtNX0lSUTAgJiYgdHlwZSAhPSBLTV9JUlExICYmCi0JCQkgICAgdHlwZSAhPSBLTV9TT0ZUSVJRMCAmJiB0eXBlICE9IEtNX1NPRlRJUlExICYmCi0JCQkgICAgdHlwZSAhPSBLTV9TS0JfU1VOUlBDX0RBVEEgJiYKLQkJCSAgICB0eXBlICE9IEtNX1NLQl9EQVRBX1NPRlRJUlEgJiYKLQkJCSAgICB0eXBlICE9IEtNX0JPVU5DRV9SRUFEKSB7Ci0JCQkJV0FSTl9PTigxKTsKLQkJCQl3YXJuX2NvdW50LS07Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAodHlwZSA9PSBLTV9JUlEwIHx8IHR5cGUgPT0gS01fSVJRMSB8fCB0eXBlID09IEtNX0JPVU5DRV9SRUFEIHx8Ci0JCQl0eXBlID09IEtNX0JJT19TUkNfSVJRIHx8IHR5cGUgPT0gS01fQklPX0RTVF9JUlEpIHsKLQkJaWYgKCFpcnFzX2Rpc2FibGVkKCkpIHsKLQkJCVdBUk5fT04oMSk7Ci0JCQl3YXJuX2NvdW50LS07Ci0JCX0KLQl9IGVsc2UgaWYgKHR5cGUgPT0gS01fU09GVElSUTAgfHwgdHlwZSA9PSBLTV9TT0ZUSVJRMSkgewotCQlpZiAoaXJxX2NvdW50KCkgPT0gMCAmJiAhaXJxc19kaXNhYmxlZCgpKSB7Ci0JCQlXQVJOX09OKDEpOwotCQkJd2Fybl9jb3VudC0tOwotCQl9Ci0JfQotI2VuZGlmCi19Ci0KIC8qCiAgKiBrbWFwX2F0b21pYy9rdW5tYXBfYXRvbWljIGlzIHNpZ25pZmljYW50bHkgZmFzdGVyIHRoYW4ga21hcC9rdW5tYXAgYmVjYXVzZQogICogbm8gZ2xvYmFsIGxvY2sgaXMgbmVlZGVkIGFuZCBiZWNhdXNlIHRoZSBrbWFwIGNvZGUgbXVzdCBwZXJmb3JtIGEgZ2xvYmFsIFRMQgpAQCAtODEsNyArMzgsNyBAQAogCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCiAJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiAKLQlkZWJ1Z19rbWFwX2F0b21pY19wcm90KHR5cGUpOworCWRlYnVnX2ttYXBfYXRvbWljKHR5cGUpOwogCiAJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIqc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKaW5kZXggZGI4MWU5YS4uNzQ5NTU5ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwpAQCAtMTA1NCwxNyArMTA1NCw0NyBAQAogY29uc3QgaW50IHJvZGF0YV90ZXN0X2RhdGEgPSAweEMzOwogRVhQT1JUX1NZTUJPTF9HUEwocm9kYXRhX3Rlc3RfZGF0YSk7CiAKK3N0YXRpYyBpbnQga2VybmVsX3NldF90b19yZWFkb25seTsKKwordm9pZCBzZXRfa2VybmVsX3RleHRfcncodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEZOX0FMSUdOKF90ZXh0KTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBQRk5fQUxJR04oX2V0ZXh0KSAtIHN0YXJ0OworCisJaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KQorCQlyZXR1cm47CisKKwlwcl9kZWJ1ZygiU2V0IGtlcm5lbCB0ZXh0OiAlbHggLSAlbHggZm9yIHJlYWQgd3JpdGVcbiIsCisJCSBzdGFydCwgc3RhcnQrc2l6ZSk7CisKKwlzZXRfcGFnZXNfcncodmlydF90b19wYWdlKHN0YXJ0KSwgc2l6ZSA+PiBQQUdFX1NISUZUKTsKK30KKwordm9pZCBzZXRfa2VybmVsX3RleHRfcm8odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEZOX0FMSUdOKF90ZXh0KTsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBQRk5fQUxJR04oX2V0ZXh0KSAtIHN0YXJ0OworCisJaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KQorCQlyZXR1cm47CisKKwlwcl9kZWJ1ZygiU2V0IGtlcm5lbCB0ZXh0OiAlbHggLSAlbHggZm9yIHJlYWQgb25seVxuIiwKKwkJIHN0YXJ0LCBzdGFydCtzaXplKTsKKworCXNldF9wYWdlc19ybyh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCBzaXplID4+IFBBR0VfU0hJRlQpOworfQorCiB2b2lkIG1hcmtfcm9kYXRhX3JvKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IFBGTl9BTElHTihfdGV4dCk7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gUEZOX0FMSUdOKF9ldGV4dCkgLSBzdGFydDsKIAotI2lmbmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKLQkvKiBEeW5hbWljIHRyYWNpbmcgbW9kaWZpZXMgdGhlIGtlcm5lbCB0ZXh0IHNlY3Rpb24gKi8KIAlzZXRfcGFnZXNfcm8odmlydF90b19wYWdlKHN0YXJ0KSwgc2l6ZSA+PiBQQUdFX1NISUZUKTsKIAlwcmludGsoS0VSTl9JTkZPICJXcml0ZSBwcm90ZWN0aW5nIHRoZSBrZXJuZWwgdGV4dDogJWx1a1xuIiwKIAkJc2l6ZSA+PiAxMCk7CiAKKwlrZXJuZWxfc2V0X3RvX3JlYWRvbmx5ID0gMTsKKwogI2lmZGVmIENPTkZJR19DUEFfREVCVUcKIAlwcmludGsoS0VSTl9JTkZPICJUZXN0aW5nIENQQTogUmV2ZXJ0aW5nICVseC0lbHhcbiIsCiAJCXN0YXJ0LCBzdGFydCtzaXplKTsKQEAgLTEwNzMsNyArMTEwMyw2IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiVGVzdGluZyBDUEE6IHdyaXRlIHByb3RlY3RpbmcgYWdhaW5cbiIpOwogCXNldF9wYWdlc19ybyh2aXJ0X3RvX3BhZ2Uoc3RhcnQpLCBzaXplPj5QQUdFX1NISUZUKTsKICNlbmRpZgotI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwogCiAJc3RhcnQgKz0gc2l6ZTsKIAlzaXplID0gKHVuc2lnbmVkIGxvbmcpX19lbmRfcm9kYXRhIC0gc3RhcnQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKaW5kZXggNTRlZmE1N2QuLjE3NTNlODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKQEAgLTczNCwyMSArNzM0LDQ4IEBACiBjb25zdCBpbnQgcm9kYXRhX3Rlc3RfZGF0YSA9IDB4QzM7CiBFWFBPUlRfU1lNQk9MX0dQTChyb2RhdGFfdGVzdF9kYXRhKTsKIAorc3RhdGljIGludCBrZXJuZWxfc2V0X3RvX3JlYWRvbmx5OworCit2b2lkIHNldF9rZXJuZWxfdGV4dF9ydyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBQRk5fQUxJR04oX3N0ZXh0KTsKKwl1bnNpZ25lZCBsb25nIGVuZCA9IFBGTl9BTElHTihfX3N0YXJ0X3JvZGF0YSk7CisKKwlpZiAoIWtlcm5lbF9zZXRfdG9fcmVhZG9ubHkpCisJCXJldHVybjsKKworCXByX2RlYnVnKCJTZXQga2VybmVsIHRleHQ6ICVseCAtICVseCBmb3IgcmVhZCB3cml0ZVxuIiwKKwkJIHN0YXJ0LCBlbmQpOworCisJc2V0X21lbW9yeV9ydyhzdGFydCwgKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUKTsKK30KKwordm9pZCBzZXRfa2VybmVsX3RleHRfcm8odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gUEZOX0FMSUdOKF9zdGV4dCk7CisJdW5zaWduZWQgbG9uZyBlbmQgPSBQRk5fQUxJR04oX19zdGFydF9yb2RhdGEpOworCisJaWYgKCFrZXJuZWxfc2V0X3RvX3JlYWRvbmx5KQorCQlyZXR1cm47CisKKwlwcl9kZWJ1ZygiU2V0IGtlcm5lbCB0ZXh0OiAlbHggLSAlbHggZm9yIHJlYWQgb25seVxuIiwKKwkJIHN0YXJ0LCBlbmQpOworCisJc2V0X21lbW9yeV9ybyhzdGFydCwgKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUKTsKK30KKwogdm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBQRk5fQUxJR04oX3N0ZXh0KSwgZW5kID0gUEZOX0FMSUdOKF9fZW5kX3JvZGF0YSk7CiAJdW5zaWduZWQgbG9uZyByb2RhdGFfc3RhcnQgPQogCQkoKHVuc2lnbmVkIGxvbmcpX19zdGFydF9yb2RhdGEgKyBQQUdFX1NJWkUgLSAxKSAmIFBBR0VfTUFTSzsKIAotI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQotCS8qIER5bmFtaWMgdHJhY2luZyBtb2RpZmllcyB0aGUga2VybmVsIHRleHQgc2VjdGlvbiAqLwotCXN0YXJ0ID0gcm9kYXRhX3N0YXJ0OwotI2VuZGlmCi0KIAlwcmludGsoS0VSTl9JTkZPICJXcml0ZSBwcm90ZWN0aW5nIHRoZSBrZXJuZWwgcmVhZC1vbmx5IGRhdGE6ICVsdWtcbiIsCiAJICAgICAgIChlbmQgLSBzdGFydCkgPj4gMTApOwogCXNldF9tZW1vcnlfcm8oc3RhcnQsIChlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCk7CiAKKwlrZXJuZWxfc2V0X3RvX3JlYWRvbmx5ID0gMTsKKwogCS8qCiAJICogVGhlIHJvZGF0YSBzZWN0aW9uIChidXQgbm90IHRoZSBrZXJuZWwgdGV4dCEpIHNob3VsZCBhbHNvIGJlCiAJICogbm90LWV4ZWN1dGFibGUuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jIGIvYXJjaC94ODYvbW0vaW9tYXBfMzIuYwppbmRleCA2OTljOWIyLi44MDU2NTQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2lvbWFwXzMyLmMKQEAgLTE5LDEwICsxOSwxMSBAQAogI2luY2x1ZGUgPGFzbS9pb21hcC5oPgogI2luY2x1ZGUgPGFzbS9wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAKIGludCBpc19pb19tYXBwaW5nX3Bvc3NpYmxlKHJlc291cmNlX3NpemVfdCBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0jaWZuZGVmIENPTkZJR19YODZfUEFFCisjaWYgIWRlZmluZWQoQ09ORklHX1g4Nl9QQUUpICYmIGRlZmluZWQoQ09ORklHX1BIWVNfQUREUl9UXzY0QklUKQogCS8qIFRoZXJlIGlzIG5vIHdheSB0byBtYXAgZ3JlYXRlciB0aGFuIDEgPDwgMzIgYWRkcmVzcyB3aXRob3V0IFBBRSAqLwogCWlmIChiYXNlICsgc2l6ZSA+IDB4MTAwMDAwMDAwVUxMKQogCQlyZXR1cm4gMDsKQEAgLTM4LDYgKzM5LDcgQEAKIAogCXBhZ2VmYXVsdF9kaXNhYmxlKCk7CiAKKwlkZWJ1Z19rbWFwX2F0b21pYyh0eXBlKTsKIAlpZHggPSB0eXBlICsgS01fVFlQRV9OUiAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl2YWRkciA9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpOwogCXNldF9wdGUoa21hcF9wdGUgLSBpZHgsIHBmbl9wdGUocGZuLCBwcm90KSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9tbWlvLW1vZC5jIGIvYXJjaC94ODYvbW0vbW1pby1tb2QuYwppbmRleCAyYzRiYWE4Li5jOTM0MmVkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9tbWlvLW1vZC5jCisrKyBiL2FyY2gveDg2L21tL21taW8tbW9kLmMKQEAgLTM3OCwyNyArMzc4LDM0IEBACiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLXN0YXRpYyBjcHVtYXNrX3QgZG93bmVkX2NwdXM7CitzdGF0aWMgY3B1bWFza192YXJfdCBkb3duZWRfY3B1czsKIAogc3RhdGljIHZvaWQgZW50ZXJfdW5pcHJvY2Vzc29yKHZvaWQpCiB7CiAJaW50IGNwdTsKIAlpbnQgZXJyOwogCisJaWYgKGRvd25lZF9jcHVzID09IE5VTEwgJiYKKwkgICAgIWFsbG9jX2NwdW1hc2tfdmFyKCZkb3duZWRfY3B1cywgR0ZQX0tFUk5FTCkpIHsKKwkJcHJfbm90aWNlKE5BTUUgIkZhaWxlZCB0byBhbGxvY2F0ZSBtYXNrXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCiAJZ2V0X29ubGluZV9jcHVzKCk7Ci0JZG93bmVkX2NwdXMgPSBjcHVfb25saW5lX21hcDsKLQljcHVfY2xlYXIoZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKSwgZG93bmVkX2NwdXMpOworCWNwdW1hc2tfY29weShkb3duZWRfY3B1cywgY3B1X29ubGluZV9tYXNrKTsKKwljcHVtYXNrX2NsZWFyX2NwdShjcHVtYXNrX2ZpcnN0KGNwdV9vbmxpbmVfbWFzayksIGRvd25lZF9jcHVzKTsKIAlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKQogCQlwcl9ub3RpY2UoTkFNRSAiRGlzYWJsaW5nIG5vbi1ib290IENQVXMuLi5cbiIpOwogCXB1dF9vbmxpbmVfY3B1cygpOwogCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCBkb3duZWRfY3B1cykgeworCWZvcl9lYWNoX2NwdShjcHUsIGRvd25lZF9jcHVzKSB7CiAJCWVyciA9IGNwdV9kb3duKGNwdSk7CiAJCWlmICghZXJyKQogCQkJcHJfaW5mbyhOQU1FICJDUFUlZCBpcyBkb3duLlxuIiwgY3B1KTsKIAkJZWxzZQogCQkJcHJfZXJyKE5BTUUgIkVycm9yIHRha2luZyBDUFUlZCBkb3duOiAlZFxuIiwgY3B1LCBlcnIpOwogCX0KK291dDoKIAlpZiAobnVtX29ubGluZV9jcHVzKCkgPiAxKQogCQlwcl93YXJuaW5nKE5BTUUgIm11bHRpcGxlIENQVXMgc3RpbGwgb25saW5lLCAiCiAJCQkJCQkibWF5IG1pc3MgZXZlbnRzLlxuIik7CkBAIC00MTEsMTAgKzQxOCwxMCBAQAogCWludCBjcHU7CiAJaW50IGVycjsKIAotCWlmIChjcHVzX3dlaWdodChkb3duZWRfY3B1cykgPT0gMCkKKwlpZiAoZG93bmVkX2NwdXMgPT0gTlVMTCB8fCBjcHVtYXNrX3dlaWdodChkb3duZWRfY3B1cykgPT0gMCkKIAkJcmV0dXJuOwogCXByX25vdGljZShOQU1FICJSZS1lbmFibGluZyBDUFVzLi4uXG4iKTsKLQlmb3JfZWFjaF9jcHVfbWFzayhjcHUsIGRvd25lZF9jcHVzKSB7CisJZm9yX2VhY2hfY3B1KGNwdSwgZG93bmVkX2NwdXMpIHsKIAkJZXJyID0gY3B1X3VwKGNwdSk7CiAJCWlmICghZXJyKQogCQkJcHJfaW5mbyhOQU1FICJlbmFibGVkIENQVSVkLlxuIiwgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWEuYyBiL2FyY2gveDg2L21tL251bWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTBkZjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvbW0vbnVtYS5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qIENvbW1vbiBjb2RlIGZvciAzMiBhbmQgNjQtYml0IE5VTUEgKi8KKyNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKworI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKKyMgZGVmaW5lIERCRyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyB4KQorI2Vsc2UKKyMgZGVmaW5lIERCRyh4Li4uKQorI2VuZGlmCisKKy8qCisgKiBXaGljaCBsb2dpY2FsIENQVXMgYXJlIG9uIHdoaWNoIG5vZGVzCisgKi8KK2NwdW1hc2tfdmFyX3Qgbm9kZV90b19jcHVtYXNrX21hcFtNQVhfTlVNTk9ERVNdOworRVhQT1JUX1NZTUJPTChub2RlX3RvX2NwdW1hc2tfbWFwKTsKKworLyoKKyAqIEFsbG9jYXRlIG5vZGVfdG9fY3B1bWFza19tYXAgYmFzZWQgb24gbnVtYmVyIG9mIGF2YWlsYWJsZSBub2RlcworICogUmVxdWlyZXMgbm9kZV9wb3NzaWJsZV9tYXAgdG8gYmUgdmFsaWQuCisgKgorICogTm90ZTogbm9kZV90b19jcHVtYXNrKCkgaXMgbm90IHZhbGlkIHVudGlsIGFmdGVyIHRoaXMgaXMgZG9uZS4KKyAqIChVc2UgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyB0byBjaGVjayB0aGlzLikKKyAqLwordm9pZCBfX2luaXQgc2V0dXBfbm9kZV90b19jcHVtYXNrX21hcCh2b2lkKQoreworCXVuc2lnbmVkIGludCBub2RlLCBudW0gPSAwOworCisJLyogc2V0dXAgbnJfbm9kZV9pZHMgaWYgbm90IGRvbmUgeWV0ICovCisJaWYgKG5yX25vZGVfaWRzID09IE1BWF9OVU1OT0RFUykgeworCQlmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgbm9kZV9wb3NzaWJsZV9tYXApCisJCQludW0gPSBub2RlOworCQlucl9ub2RlX2lkcyA9IG51bSArIDE7CisJfQorCisJLyogYWxsb2NhdGUgdGhlIG1hcCAqLworCWZvciAobm9kZSA9IDA7IG5vZGUgPCBucl9ub2RlX2lkczsgbm9kZSsrKQorCQlhbGxvY19ib290bWVtX2NwdW1hc2tfdmFyKCZub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdKTsKKworCS8qIGNwdW1hc2tfb2Zfbm9kZSgpIHdpbGwgbm93IHdvcmsgKi8KKwlwcl9kZWJ1ZygiTm9kZSB0byBjcHVtYXNrIG1hcCBmb3IgJWQgbm9kZXNcbiIsIG5yX25vZGVfaWRzKTsKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMKKy8qCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLgorICovCitjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1bWFza19vZl9ub2RlKGludCBub2RlKQoreworCWlmIChub2RlID49IG5yX25vZGVfaWRzKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJjcHVtYXNrX29mX25vZGUoJWQpOiBub2RlID4gbnJfbm9kZV9pZHMoJWQpXG4iLAorCQkJbm9kZSwgbnJfbm9kZV9pZHMpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiBjcHVfbm9uZV9tYXNrOworCX0KKwlpZiAobm9kZV90b19jcHVtYXNrX21hcFtub2RlXSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJjcHVtYXNrX29mX25vZGUoJWQpOiBubyBub2RlX3RvX2NwdW1hc2tfbWFwIVxuIiwKKwkJCW5vZGUpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiBjcHVfb25saW5lX21hc2s7CisJfQorCXJldHVybiBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOworfQorRVhQT1JUX1NZTUJPTChjcHVtYXNrX29mX25vZGUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKaW5kZXggNjRjOWNmMC4uZDczYWFhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV82NC5jCisrKyBiL2FyY2gveDg2L21tL251bWFfNjQuYwpAQCAtMjAsMTIgKzIwLDYgQEAKICNpbmNsdWRlIDxhc20vYWNwaS5oPgogI2luY2x1ZGUgPGFzbS9rOC5oPgogCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUwotIyBkZWZpbmUgREJHKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIHgpCi0jZWxzZQotIyBkZWZpbmUgREJHKHguLi4pCi0jZW5kaWYKLQogc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbTUFYX05VTU5PREVTXSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChub2RlX2RhdGEpOwogCkBAIC00OSwxMiArNDMsNiBAQAogRVhQT1JUX0VBUkxZX1BFUl9DUFVfU1lNQk9MKHg4Nl9jcHVfdG9fbm9kZV9tYXApOwogCiAvKgotICogV2hpY2ggbG9naWNhbCBDUFVzIGFyZSBvbiB3aGljaCBub2RlcwotICovCi1jcHVtYXNrX3QgKm5vZGVfdG9fY3B1bWFza19tYXA7Ci1FWFBPUlRfU1lNQk9MKG5vZGVfdG9fY3B1bWFza19tYXApOwotCi0vKgogICogR2l2ZW4gYSBzaGlmdCB2YWx1ZSwgdHJ5IHRvIHBvcHVsYXRlIG1lbW5vZGVtYXBbXQogICogUmV0dXJucyA6CiAgKiAxIGlmIE9LCkBAIC02NjEsMzYgKzY0OSw2IEBACiAjZW5kaWYKIAogCi0vKgotICogQWxsb2NhdGUgbm9kZV90b19jcHVtYXNrX21hcCBiYXNlZCBvbiBudW1iZXIgb2YgYXZhaWxhYmxlIG5vZGVzCi0gKiBSZXF1aXJlcyBub2RlX3Bvc3NpYmxlX21hcCB0byBiZSB2YWxpZC4KLSAqCi0gKiBOb3RlOiBub2RlX3RvX2NwdW1hc2soKSBpcyBub3QgdmFsaWQgdW50aWwgYWZ0ZXIgdGhpcyBpcyBkb25lLgotICogKFVzZSBDT05GSUdfREVCVUdfUEVSX0NQVV9NQVBTIHRvIGNoZWNrIHRoaXMuKQotICovCi12b2lkIF9faW5pdCBzZXR1cF9ub2RlX3RvX2NwdW1hc2tfbWFwKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IG5vZGUsIG51bSA9IDA7Ci0JY3B1bWFza190ICptYXA7Ci0KLQkvKiBzZXR1cCBucl9ub2RlX2lkcyBpZiBub3QgZG9uZSB5ZXQgKi8KLQlpZiAobnJfbm9kZV9pZHMgPT0gTUFYX05VTU5PREVTKSB7Ci0JCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBub2RlX3Bvc3NpYmxlX21hcCkKLQkJCW51bSA9IG5vZGU7Ci0JCW5yX25vZGVfaWRzID0gbnVtICsgMTsKLQl9Ci0KLQkvKiBhbGxvY2F0ZSB0aGUgbWFwICovCi0JbWFwID0gYWxsb2NfYm9vdG1lbV9sb3cobnJfbm9kZV9pZHMgKiBzaXplb2YoY3B1bWFza190KSk7Ci0JREJHKCJub2RlX3RvX2NwdW1hc2tfbWFwIGF0ICVwIGZvciAlZCBub2Rlc1xuIiwgbWFwLCBucl9ub2RlX2lkcyk7Ci0KLQlwcl9kZWJ1ZygiTm9kZSB0byBjcHVtYXNrIG1hcCBhdCAlcCBmb3IgJWQgbm9kZXNcbiIsCi0JCSBtYXAsIG5yX25vZGVfaWRzKTsKLQotCS8qIG5vZGVfdG9fY3B1bWFzaygpIHdpbGwgbm93IHdvcmsgKi8KLQlub2RlX3RvX2NwdW1hc2tfbWFwID0gbWFwOwotfQotCiB2b2lkIF9fY3B1aW5pdCBudW1hX3NldF9ub2RlKGludCBjcHUsIGludCBub2RlKQogewogCWludCAqY3B1X3RvX25vZGVfbWFwID0gZWFybHlfcGVyX2NwdV9wdHIoeDg2X2NwdV90b19ub2RlX21hcCk7CkBAIC03MjMsMTIgKzY4MSwxMiBAQAogCiB2b2lkIF9fY3B1aW5pdCBudW1hX2FkZF9jcHUoaW50IGNwdSkKIHsKLQljcHVfc2V0KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtlYXJseV9jcHVfdG9fbm9kZShjcHUpXSk7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtlYXJseV9jcHVfdG9fbm9kZShjcHUpXSk7CiB9CiAKIHZvaWQgX19jcHVpbml0IG51bWFfcmVtb3ZlX2NwdShpbnQgY3B1KQogewotCWNwdV9jbGVhcihjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbZWFybHlfY3B1X3RvX25vZGUoY3B1KV0pOworCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtlYXJseV9jcHVfdG9fbm9kZShjcHUpXSk7CiB9CiAKICNlbHNlIC8qIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KQEAgLTczOSwyMCArNjk3LDIwIEBACiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfY3B1bWFzayhpbnQgY3B1LCBpbnQgZW5hYmxlKQogewogCWludCBub2RlID0gZWFybHlfY3B1X3RvX25vZGUoY3B1KTsKLQljcHVtYXNrX3QgKm1hc2s7CisJc3RydWN0IGNwdW1hc2sgKm1hc2s7CiAJY2hhciBidWZbNjRdOwogCi0JaWYgKG5vZGVfdG9fY3B1bWFza19tYXAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIm5vZGVfdG9fY3B1bWFza19tYXAgTlVMTFxuIik7CisJbWFzayA9IG5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07CisJaWYgKG1hc2sgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIm5vZGVfdG9fY3B1bWFza19tYXBbJWldIE5VTExcbiIsIG5vZGUpOwogCQlkdW1wX3N0YWNrKCk7CiAJCXJldHVybjsKIAl9CiAKLQltYXNrID0gJm5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07CiAJaWYgKGVuYWJsZSkKLQkJY3B1X3NldChjcHUsICptYXNrKTsKKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgbWFzayk7CiAJZWxzZQotCQljcHVfY2xlYXIoY3B1LCAqbWFzayk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbWFzayk7CiAKIAljcHVsaXN0X3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBtYXNrKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiJXMgY3B1ICVkIG5vZGUgJWQ6IG1hc2sgbm93ICVzXG4iLApAQCAtNzk5LDU5ICs3NTcsNiBAQAogCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7CiB9CiAKLQotLyogZW1wdHkgY3B1bWFzayAqLwotc3RhdGljIGNvbnN0IGNwdW1hc2tfdCBjcHVfbWFza19ub25lOwotCi0vKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJpdG1hc2sgb2YgQ1BVcyBvbiBOb2RlICdub2RlJy4KLSAqLwotY29uc3QgY3B1bWFza190ICpjcHVtYXNrX29mX25vZGUoaW50IG5vZGUpCi17Ci0JaWYgKG5vZGVfdG9fY3B1bWFza19tYXAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiY3B1bWFza19vZl9ub2RlKCVkKTogbm8gbm9kZV90b19jcHVtYXNrX21hcCFcbiIsCi0JCQlub2RlKTsKLQkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gKGNvbnN0IGNwdW1hc2tfdCAqKSZjcHVfb25saW5lX21hcDsKLQl9Ci0JaWYgKG5vZGUgPj0gbnJfbm9kZV9pZHMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImNwdW1hc2tfb2Zfbm9kZSglZCk6IG5vZGUgPiBucl9ub2RlX2lkcyglZClcbiIsCi0JCQlub2RlLCBucl9ub2RlX2lkcyk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuICZjcHVfbWFza19ub25lOwotCX0KLQlyZXR1cm4gJm5vZGVfdG9fY3B1bWFza19tYXBbbm9kZV07Ci19Ci1FWFBPUlRfU1lNQk9MKGNwdW1hc2tfb2Zfbm9kZSk7Ci0KLS8qCi0gKiBSZXR1cm5zIGEgYml0bWFzayBvZiBDUFVzIG9uIE5vZGUgJ25vZGUnLgotICoKLSAqIFNpZGUgbm90ZTogdGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSByZXR1cm5lZCBjcHVtYXNrIG9uIHRoZSBzdGFjawotICogc28gd2l0aCBhIGhpZ2ggTlJfQ1BVUyBjb3VudCwgZXhjZXNzaXZlIHN0YWNrIHNwYWNlIGlzIHVzZWQuICBUaGUKLSAqIG5vZGVfdG9fY3B1bWFza19wdHIgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgcG9zc2libGUuCi0gKi8KLWNwdW1hc2tfdCBub2RlX3RvX2NwdW1hc2soaW50IG5vZGUpCi17Ci0JaWYgKG5vZGVfdG9fY3B1bWFza19tYXAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkibm9kZV90b19jcHVtYXNrKCVkKTogbm8gbm9kZV90b19jcHVtYXNrX21hcCFcbiIsIG5vZGUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXJldHVybiBjcHVfb25saW5lX21hcDsKLQl9Ci0JaWYgKG5vZGUgPj0gbnJfbm9kZV9pZHMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJIm5vZGVfdG9fY3B1bWFzayglZCk6IG5vZGUgPiBucl9ub2RlX2lkcyglZClcbiIsCi0JCQlub2RlLCBucl9ub2RlX2lkcyk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuIGNwdV9tYXNrX25vbmU7Ci0JfQotCXJldHVybiBub2RlX3RvX2NwdW1hc2tfbWFwW25vZGVdOwotfQotRVhQT1JUX1NZTUJPTChub2RlX3RvX2NwdW1hc2spOwotCiAvKgogICogLS0tLS0tLS0tIGVuZCBvZiBkZWJ1ZyB2ZXJzaW9ucyBvZiB0aGUgbnVtYSBmdW5jdGlvbnMgLS0tLS0tLS0tCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NyYXRfNjQuYyBiL2FyY2gveDg2L21tL3NyYXRfNjQuYwppbmRleCA1NzRjOGJjLi5jN2QyNzJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vc3JhdF82NC5jCkBAIC0xMTYsNiArMTE2LDM2IEBACiAJcmVzZXJ2ZV9lYXJseShwaHlzLCBwaHlzICsgbGVuZ3RoLCAiQUNQSSBTTElUIik7CiB9CiAKKy8qIENhbGxiYWNrIGZvciBQcm94aW1pdHkgRG9tYWluIC0+IHgyQVBJQyBtYXBwaW5nICovCit2b2lkIF9faW5pdAorYWNwaV9udW1hX3gyYXBpY19hZmZpbml0eV9pbml0KHN0cnVjdCBhY3BpX3NyYXRfeDJhcGljX2NwdV9hZmZpbml0eSAqcGEpCit7CisJaW50IHB4bSwgbm9kZTsKKwlpbnQgYXBpY19pZDsKKworCWlmIChzcmF0X2Rpc2FibGVkKCkpCisJCXJldHVybjsKKwlpZiAocGEtPmhlYWRlci5sZW5ndGggPCBzaXplb2Yoc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5KSkgeworCQliYWRfc3JhdCgpOworCQlyZXR1cm47CisJfQorCWlmICgocGEtPmZsYWdzICYgQUNQSV9TUkFUX0NQVV9FTkFCTEVEKSA9PSAwKQorCQlyZXR1cm47CisJcHhtID0gcGEtPnByb3hpbWl0eV9kb21haW47CisJbm9kZSA9IHNldHVwX25vZGUocHhtKTsKKwlpZiAobm9kZSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTUkFUOiBUb28gbWFueSBwcm94aW1pdHkgZG9tYWlucyAleFxuIiwgcHhtKTsKKwkJYmFkX3NyYXQoKTsKKwkJcmV0dXJuOworCX0KKworCWFwaWNfaWQgPSBwYS0+YXBpY19pZDsKKwlhcGljaWRfdG9fbm9kZVthcGljX2lkXSA9IG5vZGU7CisJYWNwaV9udW1hID0gMTsKKwlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBQWE0gJXUgLT4gQVBJQyAldSAtPiBOb2RlICV1XG4iLAorCSAgICAgICBweG0sIGFwaWNfaWQsIG5vZGUpOworfQorCiAvKiBDYWxsYmFjayBmb3IgUHJveGltaXR5IERvbWFpbiAtPiBMQVBJQyBtYXBwaW5nICovCiB2b2lkIF9faW5pdAogYWNwaV9udW1hX3Byb2Nlc3Nvcl9hZmZpbml0eV9pbml0KHN0cnVjdCBhY3BpX3NyYXRfY3B1X2FmZmluaXR5ICpwYSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wNC5jCmluZGV4IDRjNGE1MWMuLjgxOWIxMzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3A0LmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwpAQCAtMzgwLDcgKzM4MCw3IEBACiB7CiAjaWZkZWYgQ09ORklHX1NNUAogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JcmV0dXJuIChjcHUgIT0gZmlyc3RfY3B1KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKSk7CisJcmV0dXJuIGNwdSAhPSBjcHVtYXNrX2ZpcnN0KF9fZ2V0X2NwdV92YXIoY3B1X3NpYmxpbmdfbWFwKSk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9lYXJseS5jIGIvYXJjaC94ODYvcGNpL2Vhcmx5LmMKaW5kZXggZjZhZGYyYy4uYWFmMjZhZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2Vhcmx5LmMKKysrIGIvYXJjaC94ODYvcGNpL2Vhcmx5LmMKQEAgLTY5LDExICs2OSwxMiBAQAogCWludCBqOwogCXUzMiB2YWw7CiAKLQlwcmludGsoS0VSTl9JTkZPICJQQ0k6ICUwMng6JTAyeDolMDJ4IiwgYnVzLCBzbG90LCBmdW5jKTsKKwlwcmludGsoS0VSTl9JTkZPICJwY2kgMDAwMDolMDJ4OiUwMnguJWQgY29uZmlnIHNwYWNlOiIsCisJICAgICAgIGJ1cywgc2xvdCwgZnVuYyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpICs9IDQpIHsKIAkJaWYgKCEoaSAmIDB4MGYpKQotCQkJcHJpbnRrKCJcbiUwNHg6IixpKTsKKwkJCXByaW50aygiXG4gICUwMng6IixpKTsKIAogCQl2YWwgPSByZWFkX3BjaV9jb25maWcoYnVzLCBzbG90LCBmdW5jLCBpKTsKIAkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykgewpAQCAtOTYsMjAgKzk3LDIyIEBACiAJCQlmb3IgKGZ1bmMgPSAwOyBmdW5jIDwgODsgZnVuYysrKSB7CiAJCQkJdTMyIGNsYXNzOwogCQkJCXU4IHR5cGU7CisKIAkJCQljbGFzcyA9IHJlYWRfcGNpX2NvbmZpZyhidXMsIHNsb3QsIGZ1bmMsCiAJCQkJCQkJUENJX0NMQVNTX1JFVklTSU9OKTsKIAkJCQlpZiAoY2xhc3MgPT0gMHhmZmZmZmZmZikKLQkJCQkJYnJlYWs7CisJCQkJCWNvbnRpbnVlOwogCiAJCQkJZWFybHlfZHVtcF9wY2lfZGV2aWNlKGJ1cywgc2xvdCwgZnVuYyk7CiAKLQkJCQkvKiBObyBtdWx0aS1mdW5jdGlvbiBkZXZpY2U/ICovCi0JCQkJdHlwZSA9IHJlYWRfcGNpX2NvbmZpZ19ieXRlKGJ1cywgc2xvdCwgZnVuYywKKwkJCQlpZiAoZnVuYyA9PSAwKSB7CisJCQkJCXR5cGUgPSByZWFkX3BjaV9jb25maWdfYnl0ZShidXMsIHNsb3QsCisJCQkJCQkJCSAgICBmdW5jLAogCQkJCQkJCSAgICAgICBQQ0lfSEVBREVSX1RZUEUpOwotCQkJCWlmICghKHR5cGUgJiAweDgwKSkKLQkJCQkJYnJlYWs7CisJCQkJCWlmICghKHR5cGUgJiAweDgwKSkKKwkJCQkJCWJyZWFrOworCQkJCX0KIAkJCX0KIAkJfQogCX0KIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2ZpeHVwLmMgYi9hcmNoL3g4Ni9wY2kvZml4dXAuYwppbmRleCA5YzQ5OTE5Li42ZGQ4OTU1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvZml4dXAuYworKysgYi9hcmNoL3g4Ni9wY2kvZml4dXAuYwpAQCAtNDk1LDI2ICs0OTUsNiBAQAogCQkJICBwY2lfc2llbWVuc19pbnRlcnJ1cHRfY29udHJvbGxlcik7CiAKIC8qCi0gKiBSZWd1bGFyIFBDSSBkZXZpY2VzIGhhdmUgMjU2IGJ5dGVzLCBidXQgQU1EIEZhbWlseSAxMGgvMTFoIENQVXMgaGF2ZQotICogNDA5NiBieXRlcyBjb25maWd1cmF0aW9uIHNwYWNlIGZvciBlYWNoIGZ1bmN0aW9uIG9mIHRoZWlyIHByb2Nlc3NvcgotICogY29uZmlndXJhdGlvbiBzcGFjZS4KLSAqLwotc3RhdGljIHZvaWQgYW1kX2NwdV9wY2lfY2ZnX3NwYWNlX3NpemUoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlkZXYtPmNmZ19zaXplID0gcGNpX2NmZ19zcGFjZV9zaXplX2V4dChkZXYpOwotfQotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCAweDEyMDAsIGFtZF9jcHVfcGNpX2NmZ19zcGFjZV9zaXplKTsKLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgMHgxMjAxLCBhbWRfY3B1X3BjaV9jZmdfc3BhY2Vfc2l6ZSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTIwMiwgYW1kX2NwdV9wY2lfY2ZnX3NwYWNlX3NpemUpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCAweDEyMDMsIGFtZF9jcHVfcGNpX2NmZ19zcGFjZV9zaXplKTsKLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgMHgxMjA0LCBhbWRfY3B1X3BjaV9jZmdfc3BhY2Vfc2l6ZSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTMwMCwgYW1kX2NwdV9wY2lfY2ZnX3NwYWNlX3NpemUpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCAweDEzMDEsIGFtZF9jcHVfcGNpX2NmZ19zcGFjZV9zaXplKTsKLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FNRCwgMHgxMzAyLCBhbWRfY3B1X3BjaV9jZmdfc3BhY2Vfc2l6ZSk7Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIDB4MTMwMywgYW1kX2NwdV9wY2lfY2ZnX3NwYWNlX3NpemUpOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQU1ELCAweDEzMDQsIGFtZF9jcHVfcGNpX2NmZ19zcGFjZV9zaXplKTsKLQotLyoKICAqIFNCNjAwOiBEaXNhYmxlIEJBUjEgb24gZGV2aWNlIDE0LjAgdG8gYXZvaWQgSFBFVCByZXNvdXJjZXMgZnJvbQogICogY29uZnVzaW5nIHRoZSBQQ0kgZW5naW5lOgogICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jIGIvYXJjaC94ODYvcGNpL2kzODYuYwppbmRleCBmMjM0YTM3Li5mMTgxN2Y3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaTM4Ni5jCisrKyBiL2FyY2gveDg2L3BjaS9pMzg2LmMKQEAgLTI1OCwyNCArMjU4LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgbGF0KTsKIH0KIAotc3RhdGljIHZvaWQgcGNpX3VubWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JdTY0IGFkZHIgPSAodTY0KXZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKLQlmcmVlX21lbXR5cGUoYWRkciwgYWRkciArIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBjaV90cmFja19tbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JdTY0IGFkZHIgPSAodTY0KXZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkKLQkJCQkJCSYgX1BBR0VfQ0FDSEVfTUFTSzsKLQotCXJlc2VydmVfbWVtdHlwZShhZGRyLCBhZGRyICsgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LCBmbGFncywgTlVMTCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgcGNpX21tYXBfb3BzID0gewotCS5vcGVuICA9IHBjaV90cmFja19tbWFwX3BhZ2VfcmFuZ2UsCi0JLmNsb3NlID0gcGNpX3VubWFwX3BhZ2VfcmFuZ2UsCiAJLmFjY2VzcyA9IGdlbmVyaWNfYWNjZXNzX3BoeXMsCiB9OwogCkBAIC0yODMsMTEgKzI2Niw2IEBACiAJCQllbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUsIGludCB3cml0ZV9jb21iaW5lKQogewogCXVuc2lnbmVkIGxvbmcgcHJvdDsKLQl1NjQgYWRkciA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKLQl1bnNpZ25lZCBsb25nIGxlbiA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzOwotCWludCByZXR2YWw7CiAKIAkvKiBJL08gc3BhY2UgY2Fubm90IGJlIGFjY2Vzc2VkIHZpYSBub3JtYWwgcHJvY2Vzc29yIGxvYWRzIGFuZAogCSAqIHN0b3JlcyBvbiB0aGlzIHBsYXRmb3JtLgpAQCAtMzA4LDMwICsyODYsNiBAQAogCiAJdm1hLT52bV9wYWdlX3Byb3QgPSBfX3BncHJvdChwcm90KTsKIAotCWZsYWdzID0gcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJiBfUEFHRV9DQUNIRV9NQVNLOwotCXJldHZhbCA9IHJlc2VydmVfbWVtdHlwZShhZGRyLCBhZGRyICsgbGVuLCBmbGFncywgJm5ld19mbGFncyk7Ci0JaWYgKHJldHZhbCkKLQkJcmV0dXJuIHJldHZhbDsKLQotCWlmIChmbGFncyAhPSBuZXdfZmxhZ3MpIHsKLQkJaWYgKCFpc19uZXdfbWVtdHlwZV9hbGxvd2VkKGZsYWdzLCBuZXdfZmxhZ3MpKSB7Ci0JCQlmcmVlX21lbXR5cGUoYWRkciwgYWRkcitsZW4pOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZmxhZ3MgPSBuZXdfZmxhZ3M7Ci0JCXZtYS0+dm1fcGFnZV9wcm90ID0gX19wZ3Byb3QoCi0JCQkocGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgJiB+X1BBR0VfQ0FDSEVfTUFTSykgfAotCQkJZmxhZ3MpOwotCX0KLQotCWlmICgoKHZtYS0+dm1fcGdvZmYgPCBtYXhfbG93X3Bmbl9tYXBwZWQpIHx8Ci0JICAgICAodm1hLT52bV9wZ29mZiA+PSAoMVVMPDwoMzIgLSBQQUdFX1NISUZUKSkgJiYKLQkgICAgICB2bWEtPnZtX3Bnb2ZmIDwgbWF4X3Bmbl9tYXBwZWQpKSAmJgotCSAgICBpb3JlbWFwX2NoYW5nZV9hdHRyKCh1bnNpZ25lZCBsb25nKV9fdmEoYWRkciksIGxlbiwgZmxhZ3MpKSB7Ci0JCWZyZWVfbWVtdHlwZShhZGRyLCBhZGRyICsgbGVuKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaWYgKGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGdvZmYsCiAJCQkgICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAogCQkJICAgICAgIHZtYS0+dm1fcGFnZV9wcm90KSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9sZWdhY3kuYyBiL2FyY2gveDg2L3BjaS9sZWdhY3kuYwppbmRleCBmMTA2NWIxLi40MDYxYmIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbGVnYWN5LmMKKysrIGIvYXJjaC94ODYvcGNpL2xlZ2FjeS5jCkBAIC01MCw4ICs1MCw2IEBACiAJaWYgKHBjaV9yb290X2J1cykKIAkJcGNpX2J1c19hZGRfZGV2aWNlcyhwY2lfcm9vdF9idXMpOwogCi0JcGNpYmlvc19maXh1cF9wZWVyX2JyaWRnZXMoKTsKLQogCXJldHVybiAwOwogfQogCkBAIC02Nyw2ICs2NSw3IEBACiAJcGNpX3Zpc3dzX2luaXQoKTsKICNlbmRpZgogCXBjaV9sZWdhY3lfaW5pdCgpOworCXBjaWJpb3NfZml4dXBfcGVlcl9icmlkZ2VzKCk7CiAJcGNpYmlvc19pcnFfaW5pdCgpOwogCXBjaWJpb3NfaW5pdCgpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMgYi9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKaW5kZXggODliZjkyNC4uOTA1YmI1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL21tY29uZmlnLXNoYXJlZC5jCisrKyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5jbHVkZSA8YXNtL3BjaV94ODYuaD4KIApAQCAtMjQsMjQgKzI1LDQ5IEBACiAvKiBJbmRpY2F0ZSBpZiB0aGUgbW1jZmcgcmVzb3VyY2VzIGhhdmUgYmVlbiBwbGFjZWQgaW50byB0aGUgcmVzb3VyY2UgdGFibGUuICovCiBzdGF0aWMgaW50IF9faW5pdGRhdGEgcGNpX21tY2ZnX3Jlc291cmNlc19pbnNlcnRlZDsKIAorc3RhdGljIF9faW5pdCBpbnQgZXh0ZW5kX21tY2ZnKGludCBudW0pCit7CisJc3RydWN0IGFjcGlfbWNmZ19hbGxvY2F0aW9uICpuZXc7CisJaW50IG5ld19udW0gPSBwY2lfbW1jZmdfY29uZmlnX251bSArIG51bTsKKworCW5ldyA9IGt6YWxsb2Moc2l6ZW9mKHBjaV9tbWNmZ19jb25maWdbMF0pICogbmV3X251bSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXcpCisJCXJldHVybiAtMTsKKworCWlmIChwY2lfbW1jZmdfY29uZmlnKSB7CisJCW1lbWNweShuZXcsIHBjaV9tbWNmZ19jb25maWcsCisJCQkgc2l6ZW9mKHBjaV9tbWNmZ19jb25maWdbMF0pICogbmV3X251bSk7CisJCWtmcmVlKHBjaV9tbWNmZ19jb25maWcpOworCX0KKwlwY2lfbW1jZmdfY29uZmlnID0gbmV3OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXQgdm9pZCBmaWxsX29uZV9tbWNmZyh1NjQgYWRkciwgaW50IHNlZ21lbnQsIGludCBzdGFydCwgaW50IGVuZCkKK3sKKwlpbnQgaSA9IHBjaV9tbWNmZ19jb25maWdfbnVtOworCisJcGNpX21tY2ZnX2NvbmZpZ19udW0rKzsKKwlwY2lfbW1jZmdfY29uZmlnW2ldLmFkZHJlc3MgPSBhZGRyOworCXBjaV9tbWNmZ19jb25maWdbaV0ucGNpX3NlZ21lbnQgPSBzZWdtZW50OworCXBjaV9tbWNmZ19jb25maWdbaV0uc3RhcnRfYnVzX251bWJlciA9IHN0YXJ0OworCXBjaV9tbWNmZ19jb25maWdbaV0uZW5kX2J1c19udW1iZXIgPSBlbmQ7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyIF9faW5pdCAqcGNpX21tY2ZnX2U3NTIwKHZvaWQpCiB7CiAJdTMyIHdpbjsKIAlyYXdfcGNpX29wcy0+cmVhZCgwLCAwLCBQQ0lfREVWRk4oMCwgMCksIDB4Y2UsIDIsICZ3aW4pOwogCiAJd2luID0gd2luICYgMHhmMDAwOwotCWlmKHdpbiA9PSAweDAwMDAgfHwgd2luID09IDB4ZjAwMCkKLQkJcGNpX21tY2ZnX2NvbmZpZ19udW0gPSAwOwotCWVsc2UgewotCQlwY2lfbW1jZmdfY29uZmlnX251bSA9IDE7Ci0JCXBjaV9tbWNmZ19jb25maWcgPSBremFsbG9jKHNpemVvZihwY2lfbW1jZmdfY29uZmlnWzBdKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGNpX21tY2ZnX2NvbmZpZykKLQkJCXJldHVybiBOVUxMOwotCQlwY2lfbW1jZmdfY29uZmlnWzBdLmFkZHJlc3MgPSB3aW4gPDwgMTY7Ci0JCXBjaV9tbWNmZ19jb25maWdbMF0ucGNpX3NlZ21lbnQgPSAwOwotCQlwY2lfbW1jZmdfY29uZmlnWzBdLnN0YXJ0X2J1c19udW1iZXIgPSAwOwotCQlwY2lfbW1jZmdfY29uZmlnWzBdLmVuZF9idXNfbnVtYmVyID0gMjU1OwotCX0KKwlpZiAod2luID09IDB4MDAwMCB8fCB3aW4gPT0gMHhmMDAwKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChleHRlbmRfbW1jZmcoMSkgPT0gLTEpCisJCXJldHVybiBOVUxMOworCisJZmlsbF9vbmVfbW1jZmcod2luIDw8IDE2LCAwLCAwLCAyNTUpOwogCiAJcmV0dXJuICJJbnRlbCBDb3Jwb3JhdGlvbiBFNzUyMCBNZW1vcnkgQ29udHJvbGxlciBIdWIiOwogfQpAQCAtNTAsMTMgKzc2LDExIEBACiB7CiAJdTMyIHBjaWV4YmFyLCBtYXNrID0gMCwgbGVuID0gMDsKIAotCXBjaV9tbWNmZ19jb25maWdfbnVtID0gMTsKLQogCXJhd19wY2lfb3BzLT5yZWFkKDAsIDAsIFBDSV9ERVZGTigwLCAwKSwgMHg0OCwgNCwgJnBjaWV4YmFyKTsKIAogCS8qIEVuYWJsZSBiaXQgKi8KIAlpZiAoIShwY2lleGJhciAmIDEpKQotCQlwY2lfbW1jZmdfY29uZmlnX251bSA9IDA7CisJCXJldHVybiBOVUxMOwogCiAJLyogU2l6ZSBiaXRzICovCiAJc3dpdGNoICgocGNpZXhiYXIgPj4gMSkgJiAzKSB7CkBAIC03MywyOCArOTcsMjMgQEAKIAkJbGVuICA9IDB4MDQwMDAwMDBVOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwY2lfbW1jZmdfY29uZmlnX251bSA9IDA7CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qIEVycmF0YSAjMiwgdGhpbmdzIGJyZWFrIHdoZW4gbm90IGFsaWduZWQgb24gYSAyNTZNYiBib3VuZGFyeSAqLwogCS8qIENhbiBvbmx5IGhhcHBlbiBpbiA2NE0vMTI4TSBtb2RlICovCiAKIAlpZiAoKHBjaWV4YmFyICYgbWFzaykgJiAweDBmZmZmZmZmVSkKLQkJcGNpX21tY2ZnX2NvbmZpZ19udW0gPSAwOworCQlyZXR1cm4gTlVMTDsKIAogCS8qIERvbid0IGhpdCB0aGUgQVBJQyByZWdpc3RlcnMgYW5kIHRoZWlyIGZyaWVuZHMgKi8KIAlpZiAoKHBjaWV4YmFyICYgbWFzaykgPj0gMHhmMDAwMDAwMFUpCi0JCXBjaV9tbWNmZ19jb25maWdfbnVtID0gMDsKKwkJcmV0dXJuIE5VTEw7CiAKLQlpZiAocGNpX21tY2ZnX2NvbmZpZ19udW0pIHsKLQkJcGNpX21tY2ZnX2NvbmZpZyA9IGt6YWxsb2Moc2l6ZW9mKHBjaV9tbWNmZ19jb25maWdbMF0pLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwY2lfbW1jZmdfY29uZmlnKQotCQkJcmV0dXJuIE5VTEw7Ci0JCXBjaV9tbWNmZ19jb25maWdbMF0uYWRkcmVzcyA9IHBjaWV4YmFyICYgbWFzazsKLQkJcGNpX21tY2ZnX2NvbmZpZ1swXS5wY2lfc2VnbWVudCA9IDA7Ci0JCXBjaV9tbWNmZ19jb25maWdbMF0uc3RhcnRfYnVzX251bWJlciA9IDA7Ci0JCXBjaV9tbWNmZ19jb25maWdbMF0uZW5kX2J1c19udW1iZXIgPSAobGVuID4+IDIwKSAtIDE7Ci0JfQorCWlmIChleHRlbmRfbW1jZmcoMSkgPT0gLTEpCisJCXJldHVybiBOVUxMOworCisJZmlsbF9vbmVfbW1jZmcocGNpZXhiYXIgJiBtYXNrLCAwLCAwLCAobGVuID4+IDIwKSAtIDEpOwogCiAJcmV0dXJuICJJbnRlbCBDb3Jwb3JhdGlvbiA5NDVHL0daL1AvUEwgRXhwcmVzcyBNZW1vcnkgQ29udHJvbGxlciBIdWIiOwogfQpAQCAtMTM4LDIyICsxNTcsNzcgQEAKIAkJYnVzbmJpdHMgPSA4OwogCX0KIAotCXBjaV9tbWNmZ19jb25maWdfbnVtID0gKDEgPDwgc2VnbmJpdHMpOwotCXBjaV9tbWNmZ19jb25maWcgPSBremFsbG9jKHNpemVvZihwY2lfbW1jZmdfY29uZmlnWzBdKSAqCi0JCQkJICAgcGNpX21tY2ZnX2NvbmZpZ19udW0sIEdGUF9LRVJORUwpOwotCWlmICghcGNpX21tY2ZnX2NvbmZpZykKKwlpZiAoZXh0ZW5kX21tY2ZnKDEgPDwgc2VnbmJpdHMpID09IC0xKQogCQlyZXR1cm4gTlVMTDsKIAotCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBzZWduYml0cyk7IGkrKykgewotCQlwY2lfbW1jZmdfY29uZmlnW2ldLmFkZHJlc3MgPSBiYXNlICsgKDE8PDI4KSAqIGk7Ci0JCXBjaV9tbWNmZ19jb25maWdbaV0ucGNpX3NlZ21lbnQgPSBpOwotCQlwY2lfbW1jZmdfY29uZmlnW2ldLnN0YXJ0X2J1c19udW1iZXIgPSAwOwotCQlwY2lfbW1jZmdfY29uZmlnW2ldLmVuZF9idXNfbnVtYmVyID0gKDEgPDwgYnVzbmJpdHMpIC0gMTsKLQl9CisJZm9yIChpID0gMDsgaSA8ICgxIDw8IHNlZ25iaXRzKTsgaSsrKQorCQlmaWxsX29uZV9tbWNmZyhiYXNlICsgKDE8PDI4KSAqIGksIGksIDAsICgxIDw8IGJ1c25iaXRzKSAtIDEpOwogCiAJcmV0dXJuICJBTUQgRmFtaWx5IDEwaCBOQiI7CiB9CiAKK3N0YXRpYyBib29sIF9faW5pdGRhdGEgbWNwNTVfY2hlY2tlZDsKK3N0YXRpYyBjb25zdCBjaGFyIF9faW5pdCAqcGNpX21tY2ZnX252aWRpYV9tY3A1NSh2b2lkKQoreworCWludCBidXM7CisJaW50IG1jcDU1X21tY29uZl9mb3VuZCA9IDA7CisKKwlzdGF0aWMgY29uc3QgdTMyIGV4dGNmZ19yZWdudW0JCT0gMHg5MDsKKwlzdGF0aWMgY29uc3QgdTMyIGV4dGNmZ19yZWdzaXplCQk9IDQ7CisJc3RhdGljIGNvbnN0IHUzMiBleHRjZmdfZW5hYmxlX21hc2sJPSAxPDwzMTsKKwlzdGF0aWMgY29uc3QgdTMyIGV4dGNmZ19zdGFydF9tYXNrCT0gMHhmZjw8MTY7CisJc3RhdGljIGNvbnN0IGludCBleHRjZmdfc3RhcnRfc2hpZnQJPSAxNjsKKwlzdGF0aWMgY29uc3QgdTMyIGV4dGNmZ19zaXplX21hc2sJPSAweDM8PDI4OworCXN0YXRpYyBjb25zdCBpbnQgZXh0Y2ZnX3NpemVfc2hpZnQJPSAyODsKKwlzdGF0aWMgY29uc3QgaW50IGV4dGNmZ19zaXplYnVzW10JPSB7MHgxMDAsIDB4ODAsIDB4NDAsIDB4MjB9OworCXN0YXRpYyBjb25zdCB1MzIgZXh0Y2ZnX2Jhc2VfbWFza1tdCT0gezB4N2ZmOCwgMHg3ZmZjLCAweDdmZmUsIDB4N2ZmZn07CisJc3RhdGljIGNvbnN0IGludCBleHRjZmdfYmFzZV9sc2hpZnQJPSAyNTsKKworCS8qCisJICogZG8gY2hlY2sgaWYgYW1kIGZhbTEwaCBhbHJlYWR5IHRvb2sgb3ZlcgorCSAqLworCWlmICghYWNwaV9kaXNhYmxlZCB8fCBwY2lfbW1jZmdfY29uZmlnX251bSB8fCBtY3A1NV9jaGVja2VkKQorCQlyZXR1cm4gTlVMTDsKKworCW1jcDU1X2NoZWNrZWQgPSB0cnVlOworCWZvciAoYnVzID0gMDsgYnVzIDwgMjU2OyBidXMrKykgeworCQl1NjQgYmFzZTsKKwkJdTMyIGwsIGV4dGNmZzsKKwkJdTE2IHZlbmRvciwgZGV2aWNlOworCQlpbnQgc3RhcnQsIHNpemVfaW5kZXgsIGVuZDsKKworCQlyYXdfcGNpX29wcy0+cmVhZCgwLCBidXMsIFBDSV9ERVZGTigwLCAwKSwgMCwgNCwgJmwpOworCQl2ZW5kb3IgPSBsICYgMHhmZmZmOworCQlkZXZpY2UgPSAobCA+PiAxNikgJiAweGZmZmY7CisKKwkJaWYgKFBDSV9WRU5ET1JfSURfTlZJRElBICE9IHZlbmRvciB8fCAweDAzNjkgIT0gZGV2aWNlKQorCQkJY29udGludWU7CisKKwkJcmF3X3BjaV9vcHMtPnJlYWQoMCwgYnVzLCBQQ0lfREVWRk4oMCwgMCksIGV4dGNmZ19yZWdudW0sCisJCQkJICBleHRjZmdfcmVnc2l6ZSwgJmV4dGNmZyk7CisKKwkJaWYgKCEoZXh0Y2ZnICYgZXh0Y2ZnX2VuYWJsZV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChleHRlbmRfbW1jZmcoMSkgPT0gLTEpCisJCQljb250aW51ZTsKKworCQlzaXplX2luZGV4ID0gKGV4dGNmZyAmIGV4dGNmZ19zaXplX21hc2spID4+IGV4dGNmZ19zaXplX3NoaWZ0OworCQliYXNlID0gZXh0Y2ZnICYgZXh0Y2ZnX2Jhc2VfbWFza1tzaXplX2luZGV4XTsKKwkJLyogYmFzZSBjb3VsZCA+IDRHICovCisJCWJhc2UgPDw9IGV4dGNmZ19iYXNlX2xzaGlmdDsKKwkJc3RhcnQgPSAoZXh0Y2ZnICYgZXh0Y2ZnX3N0YXJ0X21hc2spID4+IGV4dGNmZ19zdGFydF9zaGlmdDsKKwkJZW5kID0gc3RhcnQgKyBleHRjZmdfc2l6ZWJ1c1tzaXplX2luZGV4XSAtIDE7CisJCWZpbGxfb25lX21tY2ZnKGJhc2UsIDAsIHN0YXJ0LCBlbmQpOworCQltY3A1NV9tbWNvbmZfZm91bmQrKzsKKwl9CisKKwlpZiAoIW1jcDU1X21tY29uZl9mb3VuZCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gIm5WaWRpYSBNQ1A1NSI7Cit9CisKIHN0cnVjdCBwY2lfbW1jZmdfaG9zdGJyaWRnZV9wcm9iZSB7CiAJdTMyIGJ1czsKIAl1MzIgZGV2Zm47CkBAIC0xNzEsOCArMjQ1LDUyIEBACiAJICAweDEyMDAsIHBjaV9tbWNmZ19hbWRfZmFtMTBoIH0sCiAJeyAweGZmLCBQQ0lfREVWRk4oMCwgMCksIFBDSV9WRU5ET1JfSURfQU1ELAogCSAgMHgxMjAwLCBwY2lfbW1jZmdfYW1kX2ZhbTEwaCB9LAorCXsgMCwgUENJX0RFVkZOKDAsIDApLCBQQ0lfVkVORE9SX0lEX05WSURJQSwKKwkgIDB4MDM2OSwgcGNpX21tY2ZnX252aWRpYV9tY3A1NSB9LAogfTsKIAorc3RhdGljIGludCBfX2luaXQgY21wX21tY2ZnKGNvbnN0IHZvaWQgKngxLCBjb25zdCB2b2lkICp4MikKK3sKKwljb25zdCB0eXBlb2YocGNpX21tY2ZnX2NvbmZpZ1swXSkgKm0xID0geDE7CisJY29uc3QgdHlwZW9mKHBjaV9tbWNmZ19jb25maWdbMF0pICptMiA9IHgyOworCWludCBzdGFydDEsIHN0YXJ0MjsKKworCXN0YXJ0MSA9IG0xLT5zdGFydF9idXNfbnVtYmVyOworCXN0YXJ0MiA9IG0yLT5zdGFydF9idXNfbnVtYmVyOworCisJcmV0dXJuIHN0YXJ0MSAtIHN0YXJ0MjsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBjaV9tbWNmZ19jaGVja19lbmRfYnVzX251bWJlcih2b2lkKQoreworCWludCBpOworCXR5cGVvZihwY2lfbW1jZmdfY29uZmlnWzBdKSAqY2ZnLCAqY2ZneDsKKworCS8qIHNvcnQgdGhlbSBhdCBmaXJzdCAqLworCXNvcnQocGNpX21tY2ZnX2NvbmZpZywgcGNpX21tY2ZnX2NvbmZpZ19udW0sCisJCSBzaXplb2YocGNpX21tY2ZnX2NvbmZpZ1swXSksIGNtcF9tbWNmZywgTlVMTCk7CisKKwkvKiBsYXN0IG9uZSovCisJaWYgKHBjaV9tbWNmZ19jb25maWdfbnVtID4gMCkgeworCQlpID0gcGNpX21tY2ZnX2NvbmZpZ19udW0gLSAxOworCQljZmcgPSAmcGNpX21tY2ZnX2NvbmZpZ1tpXTsKKwkJaWYgKGNmZy0+ZW5kX2J1c19udW1iZXIgPCBjZmctPnN0YXJ0X2J1c19udW1iZXIpCisJCQljZmctPmVuZF9idXNfbnVtYmVyID0gMjU1OworCX0KKworCS8qIGRvbid0IG92ZXJsYXAgcGxlYXNlICovCisJZm9yIChpID0gMDsgaSA8IHBjaV9tbWNmZ19jb25maWdfbnVtIC0gMTsgaSsrKSB7CisJCWNmZyA9ICZwY2lfbW1jZmdfY29uZmlnW2ldOworCQljZmd4ID0gJnBjaV9tbWNmZ19jb25maWdbaSsxXTsKKworCQlpZiAoY2ZnLT5lbmRfYnVzX251bWJlciA8IGNmZy0+c3RhcnRfYnVzX251bWJlcikKKwkJCWNmZy0+ZW5kX2J1c19udW1iZXIgPSAyNTU7CisKKwkJaWYgKGNmZy0+ZW5kX2J1c19udW1iZXIgPj0gY2ZneC0+c3RhcnRfYnVzX251bWJlcikKKwkJCWNmZy0+ZW5kX2J1c19udW1iZXIgPSBjZmd4LT5zdGFydF9idXNfbnVtYmVyIC0gMTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHBjaV9tbWNmZ19jaGVja19ob3N0YnJpZGdlKHZvaWQpCiB7CiAJdTMyIGw7CkBAIC0xODYsMzEgKzMwNCwzMyBAQAogCiAJcGNpX21tY2ZnX2NvbmZpZ19udW0gPSAwOwogCXBjaV9tbWNmZ19jb25maWcgPSBOVUxMOwotCW5hbWUgPSBOVUxMOwogCi0JZm9yIChpID0gMDsgIW5hbWUgJiYgaSA8IEFSUkFZX1NJWkUocGNpX21tY2ZnX3Byb2Jlcyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaV9tbWNmZ19wcm9iZXMpOyBpKyspIHsKIAkJYnVzID0gIHBjaV9tbWNmZ19wcm9iZXNbaV0uYnVzOwogCQlkZXZmbiA9IHBjaV9tbWNmZ19wcm9iZXNbaV0uZGV2Zm47CiAJCXJhd19wY2lfb3BzLT5yZWFkKDAsIGJ1cywgZGV2Zm4sIDAsIDQsICZsKTsKIAkJdmVuZG9yID0gbCAmIDB4ZmZmZjsKIAkJZGV2aWNlID0gKGwgPj4gMTYpICYgMHhmZmZmOwogCisJCW5hbWUgPSBOVUxMOwogCQlpZiAocGNpX21tY2ZnX3Byb2Jlc1tpXS52ZW5kb3IgPT0gdmVuZG9yICYmCiAJCSAgICBwY2lfbW1jZmdfcHJvYmVzW2ldLmRldmljZSA9PSBkZXZpY2UpCiAJCQluYW1lID0gcGNpX21tY2ZnX3Byb2Jlc1tpXS5wcm9iZSgpOworCisJCWlmIChuYW1lKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBGb3VuZCAlcyB3aXRoIE1NQ09ORklHIHN1cHBvcnQuXG4iLAorCQkJICAgICAgIG5hbWUpOwogCX0KIAotCWlmIChuYW1lKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlBDSTogRm91bmQgJXMgJXMgTU1DT05GSUcgc3VwcG9ydC5cbiIsCi0JCSAgICAgICBuYW1lLCBwY2lfbW1jZmdfY29uZmlnX251bSA/ICJ3aXRoIiA6ICJ3aXRob3V0Iik7Ci0JfQorCS8qIHNvbWUgZW5kX2J1c19udW1iZXIgaXMgY3JhenksIGZpeCBpdCAqLworCXBjaV9tbWNmZ19jaGVja19lbmRfYnVzX251bWJlcigpOwogCi0JcmV0dXJuIG5hbWUgIT0gTlVMTDsKKwlyZXR1cm4gcGNpX21tY2ZnX2NvbmZpZ19udW0gIT0gMDsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHBjaV9tbWNmZ19pbnNlcnRfcmVzb3VyY2VzKHZvaWQpCiB7Ci0jZGVmaW5lIFBDSV9NTUNGR19SRVNPVVJDRV9OQU1FX0xFTiAxOQorI2RlZmluZSBQQ0lfTU1DRkdfUkVTT1VSQ0VfTkFNRV9MRU4gMjQKIAlpbnQgaTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAljaGFyICpuYW1lczsKQEAgLTIyOCw5ICszNDgsMTAgQEAKIAkJc3RydWN0IGFjcGlfbWNmZ19hbGxvY2F0aW9uICpjZmcgPSAmcGNpX21tY2ZnX2NvbmZpZ1tpXTsKIAkJbnVtX2J1c2VzID0gY2ZnLT5lbmRfYnVzX251bWJlciAtIGNmZy0+c3RhcnRfYnVzX251bWJlciArIDE7CiAJCXJlcy0+bmFtZSA9IG5hbWVzOwotCQlzbnByaW50ZihuYW1lcywgUENJX01NQ0ZHX1JFU09VUkNFX05BTUVfTEVOLCAiUENJIE1NQ09ORklHICV1IiwKLQkJCSBjZmctPnBjaV9zZWdtZW50KTsKLQkJcmVzLT5zdGFydCA9IGNmZy0+YWRkcmVzczsKKwkJc25wcmludGYobmFtZXMsIFBDSV9NTUNGR19SRVNPVVJDRV9OQU1FX0xFTiwKKwkJCSAiUENJIE1NQ09ORklHICV1IFslMDJ4LSUwMnhdIiwgY2ZnLT5wY2lfc2VnbWVudCwKKwkJCSBjZmctPnN0YXJ0X2J1c19udW1iZXIsIGNmZy0+ZW5kX2J1c19udW1iZXIpOworCQlyZXMtPnN0YXJ0ID0gY2ZnLT5hZGRyZXNzICsgKGNmZy0+c3RhcnRfYnVzX251bWJlciA8PCAyMCk7CiAJCXJlcy0+ZW5kID0gcmVzLT5zdGFydCArIChudW1fYnVzZXMgPDwgMjApIC0gMTsKIAkJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOwogCQlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMpOwpAQCAtMzU0LDggKzQ3NSw2IEBACiAJICAgIChwY2lfbW1jZmdfY29uZmlnWzBdLmFkZHJlc3MgPT0gMCkpCiAJCXJldHVybjsKIAotCWNmZyA9ICZwY2lfbW1jZmdfY29uZmlnWzBdOwotCiAJZm9yIChpID0gMDsgaSA8IHBjaV9tbWNmZ19jb25maWdfbnVtOyBpKyspIHsKIAkJaW50IHZhbGlkID0gMDsKIAkJdTY0IGFkZHIsIHNpemU7CkBAIC00MjMsMTAgKzU0MiwxMCBAQAogCQkJa25vd25fYnJpZGdlID0gMTsKIAl9CiAKLQlpZiAoIWtub3duX2JyaWRnZSkgeworCWlmICgha25vd25fYnJpZGdlKQogCQlhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0lHX01DRkcsIGFjcGlfcGFyc2VfbWNmZyk7Ci0JCXBjaV9tbWNmZ19yZWplY3RfYnJva2VuKGVhcmx5KTsKLQl9CisKKwlwY2lfbW1jZmdfcmVqZWN0X2Jyb2tlbihlYXJseSk7CiAKIAlpZiAoKHBjaV9tbWNmZ19jb25maWdfbnVtID09IDApIHx8CiAJICAgIChwY2lfbW1jZmdfY29uZmlnID09IE5VTEwpIHx8CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbW1jb25maWdfNjQuYyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZ182NC5jCmluZGV4IDMwMDA3ZmYuLjk0MzQ5ZjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9tbWNvbmZpZ182NC5jCisrKyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZ182NC5jCkBAIC0xMTIsMTMgKzExMiwxOCBAQAogc3RhdGljIHZvaWQgX19pb21lbSAqIF9faW5pdCBtY2ZnX2lvcmVtYXAoc3RydWN0IGFjcGlfbWNmZ19hbGxvY2F0aW9uICpjZmcpCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyOwotCXUzMiBzaXplOworCXU2NCBzdGFydCwgc2l6ZTsKIAotCXNpemUgPSAoY2ZnLT5lbmRfYnVzX251bWJlciArIDEpIDw8IDIwOwotCWFkZHIgPSBpb3JlbWFwX25vY2FjaGUoY2ZnLT5hZGRyZXNzLCBzaXplKTsKKwlzdGFydCA9IGNmZy0+c3RhcnRfYnVzX251bWJlcjsKKwlzdGFydCA8PD0gMjA7CisJc3RhcnQgKz0gY2ZnLT5hZGRyZXNzOworCXNpemUgPSBjZmctPmVuZF9idXNfbnVtYmVyICsgMSAtIGNmZy0+c3RhcnRfYnVzX251bWJlcjsKKwlzaXplIDw8PSAyMDsKKwlhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHN0YXJ0LCBzaXplKTsKIAlpZiAoYWRkcikgewogCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IFVzaW5nIE1NQ09ORklHIGF0ICVMeCAtICVMeFxuIiwKLQkJICAgICAgIGNmZy0+YWRkcmVzcywgY2ZnLT5hZGRyZXNzICsgc2l6ZSAtIDEpOworCQkgICAgICAgc3RhcnQsIHN0YXJ0ICsgc2l6ZSAtIDEpOworCQlhZGRyIC09IGNmZy0+c3RhcnRfYnVzX251bWJlciA8PCAyMDsKIAl9CiAJcmV0dXJuIGFkZHI7CiB9CkBAIC0xNTcsNyArMTYyLDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBwY2lfbW1jZmdfY29uZmlnX251bTsgKytpKSB7CiAJCWlmIChwY2lfbW1jZmdfdmlydFtpXS52aXJ0KSB7Ci0JCQlpb3VubWFwKHBjaV9tbWNmZ192aXJ0W2ldLnZpcnQpOworCQkJaW91bm1hcChwY2lfbW1jZmdfdmlydFtpXS52aXJ0ICsgKHBjaV9tbWNmZ192aXJ0W2ldLmNmZy0+c3RhcnRfYnVzX251bWJlciA8PCAyMCkpOwogCQkJcGNpX21tY2ZnX3ZpcnRbaV0udmlydCA9IE5VTEw7CiAJCQlwY2lfbW1jZmdfdmlydFtpXS5jZmcgPSBOVUxMOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wb3dlci9NYWtlZmlsZSBiL2FyY2gveDg2L3Bvd2VyL01ha2VmaWxlCmluZGV4IDlmZjRkNWIuLjU4YjMyZGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Bvd2VyL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L3Bvd2VyL01ha2VmaWxlCkBAIC0xLDIgKzEsNyBAQAorIyBfX3Jlc3RvcmVfcHJvY2Vzc29yX3N0YXRlKCkgcmVzdG9yZXMgJWdzIGFmdGVyIFMzIHJlc3VtZSBhbmQgc28gc2hvdWxkIG5vdAorIyBpdHNlbGYgYmUgc3RhY2stcHJvdGVjdGVkCitub3N0YWNrcCA6PSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikKK0NGTEFHU19jcHVfJChCSVRTKS5vCTo9ICQobm9zdGFja3ApCisKIG9iai0kKENPTkZJR19QTV9TTEVFUCkJCSs9IGNwdV8kKEJJVFMpLm8KIG9iai0kKENPTkZJR19ISUJFUk5BVElPTikJKz0gaGliZXJuYXRlXyQoQklUUykubyBoaWJlcm5hdGVfYXNtXyQoQklUUykubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcG93ZXIvY3B1XzMyLmMgYi9hcmNoL3g4Ni9wb3dlci9jcHVfMzIuYwppbmRleCAyNzRkMDYwLi5jZTcwMmM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wb3dlci9jcHVfMzIuYworKysgYi9hcmNoL3g4Ni9wb3dlci9jcHVfMzIuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CiAjaW5jbHVkZSA8YXNtL21jZS5oPgogI2luY2x1ZGUgPGFzbS94Y3IuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogCiBzdGF0aWMgc3RydWN0IHNhdmVkX2NvbnRleHQgc2F2ZWRfY29udGV4dDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcG93ZXIvY3B1XzY0LmMgYi9hcmNoL3g4Ni9wb3dlci9jcHVfNjQuYwppbmRleCBlM2I2Y2Y3Li41MzQzNTQwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wb3dlci9jcHVfNjQuYworKysgYi9hcmNoL3g4Ni9wb3dlci9jcHVfNjQuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KICNpbmNsdWRlIDxhc20veGNyLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KIAogc3RhdGljIHZvaWQgZml4X3Byb2Nlc3Nvcl9jb250ZXh0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wb3dlci9oaWJlcm5hdGVfNjQuYyBiL2FyY2gveDg2L3Bvd2VyL2hpYmVybmF0ZV82NC5jCmluZGV4IDZkZDAwMGQuLjY1ZmRjODYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3Bvd2VyL2hpYmVybmF0ZV82NC5jCisrKyBiL2FyY2gveDg2L3Bvd2VyL2hpYmVybmF0ZV82NC5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KIAogLyogUmVmZXJlbmNlcyB0byBzZWN0aW9uIGJvdW5kYXJpZXMgKi8KIGV4dGVybiBjb25zdCB2b2lkIF9fbm9zYXZlX2JlZ2luLCBfX25vc2F2ZV9lbmQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc21wLmMgYi9hcmNoL3g4Ni94ZW4vc21wLmMKaW5kZXggOGQ0NzA1Ni4uNTg1YTZlMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NtcC5jCisrKyBiL2FyY2gveDg2L3hlbi9zbXAuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiAJCXJjID0gSFlQRVJWSVNPUl92Y3B1X29wKFZDUFVPUF9pc191cCwgaSwgTlVMTCk7CiAJCWlmIChyYyA+PSAwKSB7CiAJCQludW1fcHJvY2Vzc29ycysrOwotCQkJY3B1X3NldChpLCBjcHVfcG9zc2libGVfbWFwKTsKKwkJCXNldF9jcHVfcG9zc2libGUoaSwgdHJ1ZSk7CiAJCX0KIAl9CiB9CkBAIC0xOTcsNyArMTk3LDcgQEAKIAl3aGlsZSAoKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKSAmJiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IG1heF9jcHVzKSkgewogCQlmb3IgKGNwdSA9IG5yX2NwdV9pZHMgLSAxOyAhY3B1X3Bvc3NpYmxlKGNwdSk7IGNwdS0tKQogCQkJY29udGludWU7Ci0JCWNwdV9jbGVhcihjcHUsIGNwdV9wb3NzaWJsZV9tYXApOworCQlzZXRfY3B1X3Bvc3NpYmxlKGNwdSwgZmFsc2UpOwogCX0KIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdSAoY3B1KSB7CkBAIC0yMTAsNyArMjEwLDcgQEAKIAkJaWYgKElTX0VSUihpZGxlKSkKIAkJCXBhbmljKCJmYWlsZWQgZm9yayBmb3IgQ1BVICVkIiwgY3B1KTsKIAotCQljcHVfc2V0KGNwdSwgY3B1X3ByZXNlbnRfbWFwKTsKKwkJc2V0X2NwdV9wcmVzZW50KGNwdSwgdHJ1ZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9LY29uZmlnIGIvYXJjaC94dGVuc2EvS2NvbmZpZwppbmRleCA5ODEyMDA4Li5mYTZkYzRkIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9LY29uZmlnCisrKyBiL2FyY2gveHRlbnNhL0tjb25maWcKQEAgLTQsMTYgKzQsMTMgQEAKIG1haW5tZW51ICJMaW51eC9YdGVuc2EgS2VybmVsIENvbmZpZ3VyYXRpb24iCiAKIGNvbmZpZyBGUkFNRV9QT0lOVEVSCi0JYm9vbAotCWRlZmF1bHQgbgorCWRlZl9ib29sIG4KIAogY29uZmlnIFpPTkVfRE1BCi0JYm9vbAotCWRlZmF1bHQgeQorCWRlZl9ib29sIHkKIAogY29uZmlnIFhURU5TQQotCWJvb2wKLQlkZWZhdWx0IHkKKwlkZWZfYm9vbCB5CiAJc2VsZWN0IEhBVkVfSURFCiAJaGVscAogCSAgWHRlbnNhIHByb2Nlc3NvcnMgYXJlIDMyLWJpdCBSSVNDIG1hY2hpbmVzIGRlc2lnbmVkIGJ5IFRlbnNpbGljYQpAQCAtMjQsMjggKzIxLDI1IEBACiAJICBhIGhvbWUgcGFnZSBhdCA8aHR0cDovL3h0ZW5zYS5zb3VyY2Vmb3JnZS5uZXQvPi4KIAogY29uZmlnIFJXU0VNX1hDSEdBRERfQUxHT1JJVEhNCi0JYm9vbAotCWRlZmF1bHQgeQorCWRlZl9ib29sIHkKIAogY29uZmlnIEdFTkVSSUNfRklORF9ORVhUX0JJVAotCWJvb2wKLQlkZWZhdWx0IHkKKwlkZWZfYm9vbCB5CiAKIGNvbmZpZyBHRU5FUklDX0hXRUlHSFQKLQlib29sCi0JZGVmYXVsdCB5CisJZGVmX2Jvb2wgeQogCiBjb25maWcgR0VORVJJQ19IQVJESVJRUwotCWJvb2wKLQlkZWZhdWx0IHkKKwlkZWZfYm9vbCB5CisKK2NvbmZpZyBHRU5FUklDX0dQSU8KKwlkZWZfYm9vbCB5CiAKIGNvbmZpZyBBUkNIX0hBU19JTE9HMl9VMzIKLQlib29sCi0JZGVmYXVsdCBuCisJZGVmX2Jvb2wgbgogCiBjb25maWcgQVJDSF9IQVNfSUxPRzJfVTY0Ci0JYm9vbAotCWRlZmF1bHQgbgorCWRlZl9ib29sIG4KIAogY29uZmlnIE5PX0lPUE9SVAogCWRlZl9ib29sIHkKQEAgLTU0LDkgKzQ4LDE4IEBACiAJaW50CiAJZGVmYXVsdCAxMDAKIAorY29uZmlnIEdFTkVSSUNfVElNRQorCWRlZl9ib29sIHkKKwogc291cmNlICJpbml0L0tjb25maWciCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLmZyZWV6ZXIiCiAKK2NvbmZpZyBNTVUKKwlkZWZfYm9vbCBuCisKK2NvbmZpZyBWQVJJQU5UX0lSUV9TV0lUQ0gKKwlkZWZfYm9vbCBuCisKIG1lbnUgIlByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcyIKIAogY2hvaWNlCkBAIC02NSwzOCArNjgsNDEgQEAKIAogY29uZmlnIFhURU5TQV9WQVJJQU5UX0ZTRgogCWJvb2wgImZzZiAtIGRlZmF1bHQgKG5vdCBnZW5lcmljKSBjb25maWd1cmF0aW9uIgorCXNlbGVjdCBNTVUKIAogY29uZmlnIFhURU5TQV9WQVJJQU5UX0RDMjMyQgogCWJvb2wgImRjMjMyYiAtIERpYW1vbmQgMjMyTCBTdGFuZGFyZCBDb3JlIFJldi5CIChMRSkiCisJc2VsZWN0IE1NVQogCWhlbHAKLQlUaGlzIHZhcmlhbnQgcmVmZXJzIHRvIFRlbnNpbGljYSdzIERpYW1vbmQgMjMyTCBTdGFuZGFyZCBjb3JlIFJldi5CIChMRSkuCi1lbmRjaG9pY2UKKwkgIFRoaXMgdmFyaWFudCByZWZlcnMgdG8gVGVuc2lsaWNhJ3MgRGlhbW9uZCAyMzJMIFN0YW5kYXJkIGNvcmUgUmV2LkIgKExFKS4KIAotY29uZmlnIE1NVQotCWJvb2wKLQlkZWZhdWx0IHkKK2NvbmZpZyBYVEVOU0FfVkFSSUFOVF9TNjAwMAorCWJvb2wgInM2MDAwIC0gU3RyZXRjaCBzb2Z0d2FyZSBjb25maWd1cmFibGUgcHJvY2Vzc29yIgorCXNlbGVjdCBWQVJJQU5UX0lSUV9TV0lUQ0gKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKK2VuZGNob2ljZQogCiBjb25maWcgWFRFTlNBX1VOQUxJR05FRF9VU0VSCiAJYm9vbCAiVW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaW4gdXNlIHNwYWNlIgotCS0tLWhlbHAtLS0KLQkgICBUaGUgWHRlbnNhIGFyY2hpdGVjdHVyZSBjdXJyZW50bHkgZG9lcyBub3QgaGFuZGxlIHVuYWxpZ25lZAotCSAgIG1lbW9yeSBhY2Nlc3NlcyBpbiBoYXJkd2FyZSBidXQgdGhyb3VnaCBhbiBleGNlcHRpb24gaGFuZGxlci4KLQkgICBQZXIgZGVmYXVsdCwgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcyBhcmUgZGlzYWJsZWQgaW4gdXNlciBzcGFjZS4KKwloZWxwCisJICBUaGUgWHRlbnNhIGFyY2hpdGVjdHVyZSBjdXJyZW50bHkgZG9lcyBub3QgaGFuZGxlIHVuYWxpZ25lZAorCSAgbWVtb3J5IGFjY2Vzc2VzIGluIGhhcmR3YXJlIGJ1dCB0aHJvdWdoIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLgorCSAgUGVyIGRlZmF1bHQsIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMgYXJlIGRpc2FibGVkIGluIHVzZXIgc3BhY2UuCiAKLQkgICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpbiB1c2VyIHNwYWNlLgorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaW4gdXNlciBzcGFjZS4KIAogY29uZmlnIFBSRUVNUFQKIAlib29sICJQcmVlbXB0aWJsZSBLZXJuZWwiCi0JLS0taGVscC0tLQotICAgICAgICAgICBUaGlzIG9wdGlvbiByZWR1Y2VzIHRoZSBsYXRlbmN5IG9mIHRoZSBrZXJuZWwgd2hlbiByZWFjdGluZyB0bwotICAgICAgICAgICByZWFsLXRpbWUgb3IgaW50ZXJhY3RpdmUgZXZlbnRzIGJ5IGFsbG93aW5nIGEgbG93IHByaW9yaXR5IHByb2Nlc3MgdG8KLSAgICAgICAgICAgYmUgcHJlZW1wdGVkIGV2ZW4gaWYgaXQgaXMgaW4ga2VybmVsIG1vZGUgZXhlY3V0aW5nIGEgc3lzdGVtIGNhbGwuCi0gICAgICAgICAgIFVuZm9ydHVuYXRlbHkgdGhlIGtlcm5lbCBjb2RlIGhhcyBzb21lIHJhY2UgY29uZGl0aW9ucyBpZiBib3RoCi0gICAgICAgICAgIENPTkZJR19TTVAgYW5kIENPTkZJR19QUkVFTVBUIGFyZSBlbmFibGVkLCBzbyB0aGlzIG9wdGlvbiBpcwotICAgICAgICAgICBjdXJyZW50bHkgZGlzYWJsZWQgaWYgeW91IGFyZSBidWlsZGluZyBhbiBTTVAga2VybmVsLgorCWhlbHAKKyAgICAgICAgICBUaGlzIG9wdGlvbiByZWR1Y2VzIHRoZSBsYXRlbmN5IG9mIHRoZSBrZXJuZWwgd2hlbiByZWFjdGluZyB0bworICAgICAgICAgIHJlYWwtdGltZSBvciBpbnRlcmFjdGl2ZSBldmVudHMgYnkgYWxsb3dpbmcgYSBsb3cgcHJpb3JpdHkgcHJvY2VzcyB0bworICAgICAgICAgIGJlIHByZWVtcHRlZCBldmVuIGlmIGl0IGlzIGluIGtlcm5lbCBtb2RlIGV4ZWN1dGluZyBhIHN5c3RlbSBjYWxsLgorICAgICAgICAgIFVuZm9ydHVuYXRlbHkgdGhlIGtlcm5lbCBjb2RlIGhhcyBzb21lIHJhY2UgY29uZGl0aW9ucyBpZiBib3RoCisgICAgICAgICAgQ09ORklHX1NNUCBhbmQgQ09ORklHX1BSRUVNUFQgYXJlIGVuYWJsZWQsIHNvIHRoaXMgb3B0aW9uIGlzCisgICAgICAgICAgY3VycmVudGx5IGRpc2FibGVkIGlmIHlvdSBhcmUgYnVpbGRpbmcgYW4gU01QIGtlcm5lbC4KIAotICAgICAgICAgICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIGEgZGVza3RvcCwgZW1iZWRkZWQKLSAgICAgICAgICAgb3IgcmVhbC10aW1lIHN5c3RlbS4gIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgorICAgICAgICAgIFNheSBZIGhlcmUgaWYgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3IgYSBkZXNrdG9wLCBlbWJlZGRlZAorICAgICAgICAgIG9yIHJlYWwtdGltZSBzeXN0ZW0uICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KIAogY29uZmlnIE1BVEhfRU1VTEFUSU9OCiAJYm9vbCAiTWF0aCBlbXVsYXRpb24iCkBAIC0xMDUsNiArMTExLDMyIEBACiAKIGVuZG1lbnUKIAorY29uZmlnIFhURU5TQV9DQUxJQlJBVEVfQ0NPVU5UCisJZGVmX2Jvb2wgbgorCWhlbHAKKwkgIE9uIHNvbWUgcGxhdGZvcm1zIChYVDIwMDAsIGZvciBleGFtcGxlKSwgdGhlIENQVSBjbG9jayByYXRlIGNhbgorCSAgdmFyeS4gIFRoZSBmcmVxdWVuY3kgY2FuIGJlIGRldGVybWluZWQsIGhvd2V2ZXIsIGJ5IG1lYXN1cmluZworCSAgYWdhaW5zdCBhIHdlbGwga25vd24sIGZpeGVkIGZyZXF1ZW5jeSwgc3VjaCBhcyBhbiBVQVJUIG9zY2lsbGF0b3IuCisKK2NvbmZpZyBTRVJJQUxfQ09OU09MRQorCWRlZl9ib29sIG4KKworY29uZmlnIFhURU5TQV9JU1NfTkVUV09SSworCWRlZl9ib29sIG4KKworbWVudSAiQnVzIG9wdGlvbnMiCisKK2NvbmZpZyBQQ0kKKwlib29sICJQQ0kgc3VwcG9ydCIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBGaW5kIG91dCB3aGV0aGVyIHlvdSBoYXZlIGEgUENJIG1vdGhlcmJvYXJkLiBQQ0kgaXMgdGhlIG5hbWUgb2YgYQorCSAgYnVzIHN5c3RlbSwgaS5lLiB0aGUgd2F5IHRoZSBDUFUgdGFsa3MgdG8gdGhlIG90aGVyIHN0dWZmIGluc2lkZQorCSAgeW91ciBib3guIE90aGVyIGJ1cyBzeXN0ZW1zIGFyZSBJU0EsIEVJU0EsIE1pY3JvQ2hhbm5lbCAoTUNBKSBvcgorCSAgVkVTQS4gSWYgeW91IGhhdmUgUENJLCBzYXkgWSwgb3RoZXJ3aXNlIE4uCisKK3NvdXJjZSAiZHJpdmVycy9wY2kvS2NvbmZpZyIKKwogbWVudSAiUGxhdGZvcm0gb3B0aW9ucyIKIAogY2hvaWNlCkBAIC0xMTMsMzMgKzE0NSwzNSBAQAogCiBjb25maWcgWFRFTlNBX1BMQVRGT1JNX0lTUwogCWJvb2wgIklTUyIKKwlzZWxlY3QgWFRFTlNBX0NBTElCUkFURV9DQ09VTlQKKwlzZWxlY3QgU0VSSUFMX0NPTlNPTEUKKwlzZWxlY3QgWFRFTlNBX0lTU19ORVRXT1JLCiAJaGVscAogCSAgSVNTIGlzIGFuIGFjcm9ueW0gZm9yIFRlbnNpbGljYSdzIEluc3RydWN0aW9uIFNldCBTaW11bGF0b3IuCiAKIGNvbmZpZyBYVEVOU0FfUExBVEZPUk1fWFQyMDAwCiAJYm9vbCAiWFQyMDAwIgorCXNlbGVjdCBYVEVOU0FfQ0FMSUJSQVRFX0NDT1VOVAorCXNlbGVjdCBQQ0kKIAloZWxwCiAJICBYVDIwMDAgaXMgdGhlIG5hbWUgb2YgVGVuc2lsaWNhJ3MgZmVhdHVyZS1yaWNoIGVtdWxhdGlvbiBwbGF0Zm9ybS4KIAkgIFRoaXMgaGFyZHdhcmUgaXMgY2FwYWJsZSBvZiBydW5uaW5nIGEgZnVsbCBMaW51eCBkaXN0cmlidXRpb24uCiAKK2NvbmZpZyBYVEVOU0FfUExBVEZPUk1fUzYxMDUKKwlib29sICJTNjEwNSIKKwlzZWxlY3QgU0VSSUFMX0NPTlNPTEUKKwogZW5kY2hvaWNlCiAKIAotY29uZmlnIFhURU5TQV9DQUxJQlJBVEVfQ0NPVU5UCi0JYm9vbCAiQXV0byBjYWxpYnJhdGlvbiBvZiB0aGUgQ1BVIGNsb2NrIHJhdGUiCi0JLS0taGVscC0tLQotCSAgT24gc29tZSBwbGF0Zm9ybXMgKFhUMjAwMCwgZm9yIGV4YW1wbGUpLCB0aGUgQ1BVIGNsb2NrIHJhdGUgY2FuCi0JICB2YXJ5LiAgVGhlIGZyZXF1ZW5jeSBjYW4gYmUgZGV0ZXJtaW5lZCwgaG93ZXZlciwgYnkgbWVhc3VyaW5nCi0JICBhZ2FpbnN0IGEgd2VsbCBrbm93biwgZml4ZWQgZnJlcXVlbmN5LCBzdWNoIGFzIGFuIFVBUlQgb3NjaWxsYXRvci4KLQogY29uZmlnIFhURU5TQV9DUFVfQ0xPQ0sKIAlpbnQgIkNQVSBjbG9jayByYXRlIFtNSHpdIgogCWRlcGVuZHMgb24gIVhURU5TQV9DQUxJQlJBVEVfQ0NPVU5UCi0JZGVmYXVsdCAiMTYiCisJZGVmYXVsdCAxNgogCiBjb25maWcgR0VORVJJQ19DQUxJQlJBVEVfREVMQVkKIAlib29sICJBdXRvIGNhbGlicmF0aW9uIG9mIHRoZSBCb2dvTUlQUyB2YWx1ZSIKLQktLS1oZWxwLS0tCisJaGVscAogCSAgVGhlIEJvZ29NSVBTIHZhbHVlIGNhbiBlYXNpbHkgYmUgZGVyaXZlZCBmcm9tIHRoZSBDUFUgZnJlcXVlbmN5LgogCiBjb25maWcgQ01ETElORV9CT09MCkBAIC0xNTYsNTIgKzE5MCwyNyBAQAogCSAgdGltZSBieSBlbnRlcmluZyB0aGVtIGhlcmUuIEFzIGEgbWluaW11bSwgeW91IHNob3VsZCBzcGVjaWZ5IHRoZQogCSAgbWVtb3J5IHNpemUgYW5kIHRoZSByb290IGRldmljZSAoZS5nLiwgbWVtPTY0TSByb290PS9kZXYvbmZzKS4KIAotY29uZmlnIFNFUklBTF9DT05TT0xFCi0JYm9vbAotCWRlcGVuZHMgb24gWFRFTlNBX1BMQVRGT1JNX0lTUwotCWRlZmF1bHQgeQotCi1jb25maWcgWFRFTlNBX0lTU19ORVRXT1JLCi0JYm9vbAotCWRlcGVuZHMgb24gWFRFTlNBX1BMQVRGT1JNX0lTUwotCWRlZmF1bHQgeQotCiBzb3VyY2UgIm1tL0tjb25maWciCiAKIGVuZG1lbnUKIAotbWVudSAiQnVzIG9wdGlvbnMiCi0KLWNvbmZpZyBQQ0kKLQlib29sICJQQ0kgc3VwcG9ydCIgaWYgIVhURU5TQV9QTEFURk9STV9JU1MKLQlkZXBlbmRzIG9uICFYVEVOU0FfUExBVEZPUk1fSVNTCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgRmluZCBvdXQgd2hldGhlciB5b3UgaGF2ZSBhIFBDSSBtb3RoZXJib2FyZC4gUENJIGlzIHRoZSBuYW1lIG9mIGEKLQkgIGJ1cyBzeXN0ZW0sIGkuZS4gdGhlIHdheSB0aGUgQ1BVIHRhbGtzIHRvIHRoZSBvdGhlciBzdHVmZiBpbnNpZGUKLQkgIHlvdXIgYm94LiBPdGhlciBidXMgc3lzdGVtcyBhcmUgSVNBLCBFSVNBLCBNaWNyb0NoYW5uZWwgKE1DQSkgb3IKLQkgIFZFU0EuIElmIHlvdSBoYXZlIFBDSSwgc2F5IFksIG90aGVyd2lzZSBOLgotCi1zb3VyY2UgImRyaXZlcnMvcGNpL0tjb25maWciCi0KIGNvbmZpZyBIT1RQTFVHCi0KIAlib29sICJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIGRldmljZXMiCi0JLS0taGVscC0tLQotCVNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gcGx1ZyBkZXZpY2VzIGludG8geW91ciBjb21wdXRlciB3aGlsZQotCXRoZSBzeXN0ZW0gaXMgcnVubmluZywgYW5kIGJlIGFibGUgdG8gdXNlIHRoZW0gcXVpY2tseS4gIEluIG1hbnkKLQljYXNlcywgdGhlIGRldmljZXMgY2FuIGxpa2V3aXNlIGJlIHVucGx1Z2dlZCBhdCBhbnkgdGltZSB0b28uCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBwbHVnIGRldmljZXMgaW50byB5b3VyIGNvbXB1dGVyIHdoaWxlCisJICB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcsIGFuZCBiZSBhYmxlIHRvIHVzZSB0aGVtIHF1aWNrbHkuICBJbiBtYW55CisJICBjYXNlcywgdGhlIGRldmljZXMgY2FuIGxpa2V3aXNlIGJlIHVucGx1Z2dlZCBhdCBhbnkgdGltZSB0b28uCiAKLQlPbmUgd2VsbCBrbm93biBleGFtcGxlIG9mIHRoaXMgaXMgUENNQ0lBLSBvciBQQy1jYXJkcywgY3JlZGl0LWNhcmQKLQlzaXplIGRldmljZXMgc3VjaCBhcyBuZXR3b3JrIGNhcmRzLCBtb2RlbXMgb3IgaGFyZCBkcml2ZXMgd2hpY2ggYXJlCi0JcGx1Z2dlZCBpbnRvIHNsb3RzIGZvdW5kIG9uIGFsbCBtb2Rlcm4gbGFwdG9wIGNvbXB1dGVycy4gIEFub3RoZXIKLQlleGFtcGxlLCB1c2VkIG9uIG1vZGVybiBkZXNrdG9wcyBhcyB3ZWxsIGFzIGxhcHRvcHMsIGlzIFVTQi4KKwkgIE9uZSB3ZWxsIGtub3duIGV4YW1wbGUgb2YgdGhpcyBpcyBQQ01DSUEtIG9yIFBDLWNhcmRzLCBjcmVkaXQtY2FyZAorCSAgc2l6ZSBkZXZpY2VzIHN1Y2ggYXMgbmV0d29yayBjYXJkcywgbW9kZW1zIG9yIGhhcmQgZHJpdmVzIHdoaWNoIGFyZQorCSAgcGx1Z2dlZCBpbnRvIHNsb3RzIGZvdW5kIG9uIGFsbCBtb2Rlcm4gbGFwdG9wIGNvbXB1dGVycy4gIEFub3RoZXIKKwkgIGV4YW1wbGUsIHVzZWQgb24gbW9kZXJuIGRlc2t0b3BzIGFzIHdlbGwgYXMgbGFwdG9wcywgaXMgVVNCLgogCi0JRW5hYmxlIEhPVFBMVUcgYW5kIGJ1aWxkIGEgbW9kdWxhciBrZXJuZWwuICBHZXQgYWdlbnQgc29mdHdhcmUKLQkoZnJvbSA8aHR0cDovL2xpbnV4LWhvdHBsdWcuc291cmNlZm9yZ2UubmV0Lz4pIGFuZCBpbnN0YWxsIGl0LgotCVRoZW4geW91ciBrZXJuZWwgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgb3V0IHRvIGEgdXNlciBtb2RlICJwb2xpY3kKLQlhZ2VudCIgKC9zYmluL2hvdHBsdWcpIHRvIGxvYWQgbW9kdWxlcyBhbmQgc2V0IHVwIHNvZnR3YXJlIG5lZWRlZAotCXRvIHVzZSBkZXZpY2VzIGFzIHlvdSBob3RwbHVnIHRoZW0uCisJICBFbmFibGUgSE9UUExVRyBhbmQgYnVpbGQgYSBtb2R1bGFyIGtlcm5lbC4gIEdldCBhZ2VudCBzb2Z0d2FyZQorCSAgKGZyb20gPGh0dHA6Ly9saW51eC1ob3RwbHVnLnNvdXJjZWZvcmdlLm5ldC8+KSBhbmQgaW5zdGFsbCBpdC4KKwkgIFRoZW4geW91ciBrZXJuZWwgd2lsbCBhdXRvbWF0aWNhbGx5IGNhbGwgb3V0IHRvIGEgdXNlciBtb2RlICJwb2xpY3kKKwkgIGFnZW50IiAoL3NiaW4vaG90cGx1ZykgdG8gbG9hZCBtb2R1bGVzIGFuZCBzZXQgdXAgc29mdHdhcmUgbmVlZGVkCisJICB0byB1c2UgZGV2aWNlcyBhcyB5b3UgaG90cGx1ZyB0aGVtLgogCiBzb3VyY2UgImRyaXZlcnMvcGNtY2lhL0tjb25maWciCiAKQEAgLTIxMyw5ICsyMjIsOCBAQAogCiAjIG9ubHkgZWxmIHN1cHBvcnRlZAogY29uZmlnIEtDT1JFX0VMRgotICAgICAgICBib29sCisJZGVmX2Jvb2wgeQogICAgICAgICBkZXBlbmRzIG9uIFBST0NfRlMKLSAgICAgICAgZGVmYXVsdCB5CiAgICAgICAgIGhlbHAKICAgICAgICAgICBJZiB5b3UgZW5hYmxlZCBzdXBwb3J0IGZvciAvcHJvYyBmaWxlIHN5c3RlbSB0aGVuIHRoZSBmaWxlCiAgICAgICAgICAgL3Byb2Mva2NvcmUgd2lsbCBjb250YWluIHRoZSBrZXJuZWwgY29yZSBpbWFnZSBpbiBFTEYgZm9ybWF0LiBUaGlzCkBAIC0yNDAsNyArMjQ4LDcgQEAKIG1lbnUgIlh0ZW5zYSBpbml0cmQgb3B0aW9ucyIKIAlkZXBlbmRzIG9uIEJMS19ERVZfSU5JVFJECiAKLQljb25maWcgRU1CRURERURfUkFNRElTSworY29uZmlnIEVNQkVEREVEX1JBTURJU0sKIAlib29sICJFbWJlZCByb290IGZpbGVzeXN0ZW0gcmFtZGlzayBpbnRvIHRoZSBrZXJuZWwiCiAKIGNvbmZpZyBFTUJFRERFRF9SQU1ESVNLX0lNQUdFCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9NYWtlZmlsZSBiL2FyY2gveHRlbnNhL01ha2VmaWxlCmluZGV4IDFkYTU1ZmUuLjRjYWZmYWMgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL01ha2VmaWxlCisrKyBiL2FyY2gveHRlbnNhL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBACiAKIHZhcmlhbnQtJChDT05GSUdfWFRFTlNBX1ZBUklBTlRfRlNGKQkJOj0gZnNmCiB2YXJpYW50LSQoQ09ORklHX1hURU5TQV9WQVJJQU5UX0RDMjMyQikJCTo9IGRjMjMyYgordmFyaWFudC0kKENPTkZJR19YVEVOU0FfVkFSSUFOVF9TNjAwMCkJCTo9IHM2MDAwCiB2YXJpYW50LSQoQ09ORklHX1hURU5TQV9WQVJJQU5UX0xJTlVYX0NVU1RPTSkJOj0gY3VzdG9tCiAKIFZBUklBTlQgPSAkKHZhcmlhbnQteSkKQEAgLTI0LDYgKzI1LDcgQEAKIAogcGxhdGZvcm0tJChDT05GSUdfWFRFTlNBX1BMQVRGT1JNX1hUMjAwMCkJOj0geHQyMDAwCiBwbGF0Zm9ybS0kKENPTkZJR19YVEVOU0FfUExBVEZPUk1fSVNTKQkJOj0gaXNzCitwbGF0Zm9ybS0kKENPTkZJR19YVEVOU0FfUExBVEZPUk1fUzYxMDUpCTo9IHM2MTA1CiAKIFBMQVRGT1JNID0gJChwbGF0Zm9ybS15KQogZXhwb3J0IFBMQVRGT1JNCkBAIC02MiwyMCArNjQsMjMgQEAKICAgZW5kaWYKIGVuZGlmCiAKLSMKKyMgT25seSBidWlsZCB2YXJpYW50IGFuZC9vciBwbGF0Zm9ybSBpZiBpdCBpbmNsdWRlcyBhIE1ha2VmaWxlCisKK2J1aWxkdmFyIDo9ICQoc2hlbGwgdGVzdCAtYSAkKHNyY3RyZWUpL2FyY2gveHRlbnNhL3ZhcmlhbnRzLyQoVkFSSUFOVCkvTWFrZWZpbGUgJiYgZWNobyBhcmNoL3h0ZW5zYS92YXJpYW50cy8kKFZBUklBTlQpLykKK2J1aWxkcGxmIDo9ICQoc2hlbGwgdGVzdCAtYSAkKHNyY3RyZWUpL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy8kKFBMQVRGT1JNKS9NYWtlZmlsZSAmJiBlY2hvIGFyY2gveHRlbnNhL3BsYXRmb3Jtcy8kKFBMQVRGT1JNKS8pCisKKyMgRmluZCBsaWJnY2MuYQogCiBMSUJHQ0MgOj0gJChzaGVsbCAkKENDKSAkKEtCVUlMRF9DRkxBR1MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lKQogCiBoZWFkLXkJCTo9IGFyY2gveHRlbnNhL2tlcm5lbC9oZWFkLm8KIGNvcmUteQkJKz0gYXJjaC94dGVuc2Eva2VybmVsLyBhcmNoL3h0ZW5zYS9tbS8KLWlmbmVxICgkKFBMQVRGT1JNKSwpCi1jb3JlLXkJCSs9IGFyY2gveHRlbnNhL3BsYXRmb3Jtcy8kKFBMQVRGT1JNKS8KLWVuZGlmCitjb3JlLXkJCSs9ICQoYnVpbGR2YXIpICQoYnVpbGRwbGYpCisKIGxpYnMteQkJKz0gYXJjaC94dGVuc2EvbGliLyAkKExJQkdDQykKIAogYm9vdAkJOj0gYXJjaC94dGVuc2EvYm9vdAogCi0KIGFsbDogekltYWdlCiAKIGJ6SW1hZ2UgOiB6SW1hZ2UKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2NvbmZpZ3MvczYxMDVfZGVmY29uZmlnIGIvYXJjaC94dGVuc2EvY29uZmlncy9zNjEwNV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmUxZGVmZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL2NvbmZpZ3MvczYxMDVfZGVmY29uZmlnCkBAIC0wLDAgKzEsNTMwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM3LXM2CisjIFR1ZSBNYXIgMTAgMTE6MDk6MjYgMjAwOQorIworIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1hURU5TQT15CitDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfTk9fSU9QT1JUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworIyBDT05GSUdfQ0xBU1NJQ19SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfUkNVPXkKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorIyBDT05GSUdfTU1VIGlzIG5vdCBzZXQKK0NPTkZJR19WQVJJQU5UX0lSUV9TV0lUQ0g9eQorCisjCisjIFByb2Nlc3NvciB0eXBlIGFuZCBmZWF0dXJlcworIworIyBDT05GSUdfWFRFTlNBX1ZBUklBTlRfRlNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hURU5TQV9WQVJJQU5UX0RDMjMyQiBpcyBub3Qgc2V0CitDT05GSUdfWFRFTlNBX1ZBUklBTlRfUzYwMDA9eQorIyBDT05GSUdfWFRFTlNBX1VOQUxJR05FRF9VU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX01BVEhfRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfWFRFTlNBX0NBTElCUkFURV9DQ09VTlQgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT05TT0xFPXkKKyMgQ09ORklHX1hURU5TQV9JU1NfTkVUV09SSyBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIG9wdGlvbnMKKyMKKyMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gb3B0aW9ucworIworIyBDT05GSUdfWFRFTlNBX1BMQVRGT1JNX0lTUyBpcyBub3Qgc2V0CisjIENPTkZJR19YVEVOU0FfUExBVEZPUk1fWFQyMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19YVEVOU0FfUExBVEZPUk1fUzYxMDU9eQorQ09ORklHX1hURU5TQV9DUFVfQ0xPQ0s9MzAwCitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMSwzODQwMCBkZWJ1ZyBib290bWVtX2RlYnVnIGxvZ2xldmVsPTciCitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfVklSVF9UT19CVVM9eQorCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfS0NPUkVfRUxGPXkKK0NPTkZJR19CSU5GTVRfRkxBVD15CisjIENPTkZJR19CSU5GTVRfWkZMQVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX1NIQVJFRF9GTEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKKyMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0ZJTEVTWVNURU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgWHRlbnNhIGluaXRyZCBvcHRpb25zCisjCisjIENPTkZJR19FTUJFRERFRF9SQU1ESVNLIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKKyMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TUElOTE9DSz15CitDT05GSUdfREVCVUdfTVVURVhFUz15CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTk9NTVVfUkVHSU9OUz15CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggOTRjNGM1My4uOGZjMWMwYyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNjUsMTMgKzY1LDE3IEBACiAjIGRlZmluZSBfX2ZsdXNoX2ludmFsaWRhdGVfZGNhY2hlX3JhbmdlKHAscykJX19pbnZhbGlkYXRlX2RjYWNoZV9yYW5nZShwLHMpCiAjZW5kaWYKIAotI2lmIChEQ0FDSEVfV0FZX1NJWkUgPiBQQUdFX1NJWkUpCisjaWYgZGVmaW5lZChDT05GSUdfTU1VKSAmJiAoRENBQ0hFX1dBWV9TSVpFID4gUEFHRV9TSVpFKQogZXh0ZXJuIHZvaWQgX19mbHVzaF9pbnZhbGlkYXRlX2RjYWNoZV9wYWdlX2FsaWFzKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX2ludmFsaWRhdGVfZGNhY2hlX3BhZ2VfYWxpYXModW5zaWduZWQgbG9uZyB2aXJ0LAorCQkJCQkJCXVuc2lnbmVkIGxvbmcgcGh5cykgeyB9CiAjZW5kaWYKLSNpZiAoSUNBQ0hFX1dBWV9TSVpFID4gUEFHRV9TSVpFKQorI2lmIGRlZmluZWQoQ09ORklHX01NVSkgJiYgKElDQUNIRV9XQVlfU0laRSA+IFBBR0VfU0laRSkKIGV4dGVybiB2b2lkIF9faW52YWxpZGF0ZV9pY2FjaGVfcGFnZV9hbGlhcyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKICNlbHNlCi0jIGRlZmluZSBfX2ludmFsaWRhdGVfaWNhY2hlX3BhZ2VfYWxpYXModixwKQlkbyB7IH0gd2hpbGUoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2ludmFsaWRhdGVfaWNhY2hlX3BhZ2VfYWxpYXModW5zaWduZWQgbG9uZyB2aXJ0LAorCQkJCQkJdW5zaWduZWQgbG9uZyBwaHlzKSB7IH0KICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZG1hLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9kbWEuaAppbmRleCBlMzBmM2FiLi4xMzdjYTM5IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9kbWEuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9kbWEuaApAQCAtNDQsOCArNDQsOSBAQAogICoJdGhlIHZhbHVlIGRlc2lyZWQpLgogICovCiAKKyNpZm5kZWYgTUFYX0RNQV9BRERSRVNTCiAjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJKFBBR0VfT0ZGU0VUICsgWENIQUxfS0lPX1NJWkUgLSAxKQotCisjZW5kaWYKIAogLyogUmVzZXJ2ZSBhbmQgcmVsZWFzZSBhIERNQSBjaGFubmVsICovCiBleHRlcm4gaW50IHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBkbWFuciwgY29uc3QgY2hhciAqIGRldmljZV9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9mbGF0LmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9mbGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjNDRhYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2ZsYXQuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9fQVNNX1hURU5TQV9GTEFUX0gKKyNkZWZpbmUgX19BU01fWFRFTlNBX0ZMQVRfSAorCisjZGVmaW5lIGZsYXRfYXJndnBfZW52cF9vbl9zdGFjaygpCQkJMAorI2RlZmluZSBmbGF0X29sZF9yYW1fZmxhZyhmbGFncykJCQkoZmxhZ3MpCisjZGVmaW5lIGZsYXRfcmVsb2NfdmFsaWQocmVsb2MsIHNpemUpCQkJKChyZWxvYykgPD0gKHNpemUpKQorI2RlZmluZSBmbGF0X2dldF9hZGRyX2Zyb21fcnAocnAsIHJlbHZhbCwgZmxhZ3MsIHApCWdldF91bmFsaWduZWQocnApCisjZGVmaW5lIGZsYXRfcHV0X2FkZHJfYXRfcnAocnAsIHZhbCwgcmVsdmFsCSkJcHV0X3VuYWxpZ25lZCh2YWwsIHJwKQorI2RlZmluZSBmbGF0X2dldF9yZWxvY2F0ZV9hZGRyKHJlbCkJCQkocmVsKQorI2RlZmluZSBmbGF0X3NldF9wZXJzaXN0ZW50KHJlbHZhbCwgcCkJCQkwCisKKyNlbmRpZiAvKiBfX0FTTV9YVEVOU0FfRkxBVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZ3Bpby5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NjNiMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9ncGlvLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIEdlbmVyaWMgR1BJTyBBUEkgaW1wbGVtZW50YXRpb24gZm9yIHh0ZW5zYS4KKyAqCisgKiBTdG9sZW4gZnJvbSB4ODYsIHdoaWNoIGlzIGRlcml2ZWQgZnJvbSB0aGUgZ2VuZXJpYyBHUElPIEFQSSBmb3IgcG93ZXJwYzoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCAgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcjogQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9BU01fWFRFTlNBX0dQSU9fSAorI2RlZmluZSBfQVNNX1hURU5TQV9HUElPX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KKworI2lmZGVmIENPTkZJR19HUElPTElCCisKKy8qCisgKiBKdXN0IGNhbGwgZ3Bpb2xpYi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgaW50IGdwaW8pCit7CisJcmV0dXJuIF9fZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbHVlKQoreworCV9fZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2NhbnNsZWVwKHVuc2lnbmVkIGludCBncGlvKQoreworCXJldHVybiBfX2dwaW9fY2Fuc2xlZXAoZ3Bpbyk7Cit9CisKKy8qCisgKiBOb3QgaW1wbGVtZW50ZWQsIHlldC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgaW50IGdwaW8pCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfR1BJT0xJQiAqLworCisjZW5kaWYgLyogX0FTTV9YVEVOU0FfR1BJT19IICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaW8uaAppbmRleCAwN2I3Mjk5Li5kMDRjZDNhIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTY5LDIxICs2OSwyOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgKmlvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKKyNpZmRlZiBDT05GSUdfTU1VCiAJaWYgKG9mZnNldCA+PSBYQ0hBTF9LSU9fUEFERFIKIAkgICAgJiYgb2Zmc2V0IDwgWENIQUxfS0lPX1BBRERSICsgWENIQUxfS0lPX1NJWkUpCiAJCXJldHVybiAodm9pZCopKG9mZnNldC1YQ0hBTF9LSU9fUEFERFIrWENIQUxfS0lPX0JZUEFTU19WQUREUik7Ci0KIAllbHNlCiAJCUJVRygpOworI2Vsc2UKKwlyZXR1cm4gKHZvaWQgKilvZmZzZXQ7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB2b2lkICppb3JlbWFwX25vY2FjaGUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKKyNpZmRlZiBDT05GSUdfTU1VCiAJaWYgKG9mZnNldCA+PSBYQ0hBTF9LSU9fUEFERFIKIAkgICAgJiYgb2Zmc2V0IDwgWENIQUxfS0lPX1BBRERSICsgWENIQUxfS0lPX1NJWkUpCiAJCXJldHVybiAodm9pZCopKG9mZnNldC1YQ0hBTF9LSU9fUEFERFIrWENIQUxfS0lPX0NBQ0hFRF9WQUREUik7CiAJZWxzZQogCQlCVUcoKTsKKyNlbHNlCisJcmV0dXJuICh2b2lkICopb2Zmc2V0OworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpb3VubWFwKHZvaWQgKmFkZHIpCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IDE2MjBkMWUuLmRmYWM4MmQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lycS5oCkBAIC0xNCw2ICsxNCwxMyBAQAogI2luY2x1ZGUgPHBsYXRmb3JtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8dmFyaWFudC9jb3JlLmg+CiAKKyNpZmRlZiBDT05GSUdfVkFSSUFOVF9JUlFfU1dJVENICisjaW5jbHVkZSA8dmFyaWFudC9pcnEuaD4KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdmFyaWFudF9pcnFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHZhcmlhbnRfaXJxX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkgeyB9CisjZW5kaWYKKwogI2lmbmRlZiBQTEFURk9STV9OUl9JUlFTCiAjIGRlZmluZSBQTEFURk9STV9OUl9JUlFTIDAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9tbXUuaAppbmRleCA0NGM1YmIwLi4wNDg5MGQ2IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9tbXUuaApAQCAtMTEsNyArMTEsMTIgQEAKICNpZm5kZWYgX1hURU5TQV9NTVVfSAogI2RlZmluZSBfWFRFTlNBX01NVV9ICiAKKyNpZm5kZWYgQ09ORklHX01NVQorI2luY2x1ZGUgPGFzbS9ub21tdS5oPgorI2Vsc2UKKwogLyogRGVmYXVsdCAidW5zaWduZWQgbG9uZyIgY29udGV4dCAqLwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfdDsKIAorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KICNlbmRpZgkvKiBfWFRFTlNBX01NVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBjMGZkOGU1Li5kYmQ4NzMxIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTEzLDE2ICsxMywyMCBAQAogI2lmbmRlZiBfWFRFTlNBX01NVV9DT05URVhUX0gKICNkZWZpbmUgX1hURU5TQV9NTVVfQ09OVEVYVF9ICiAKKyNpZm5kZWYgQ09ORklHX01NVQorI2luY2x1ZGUgPGFzbS9ub21tdV9jb250ZXh0Lmg+CisjZWxzZQorCiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAorI2luY2x1ZGUgPHZhcmlhbnQvY29yZS5oPgorCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tX2hvb2tzLmg+CiAKLSNkZWZpbmUgWENIQUxfTU1VX0FTSURfQklUUwk4Ci0KICNpZiAoWENIQUxfSEFWRV9UTEJTICE9IDEpCiAjIGVycm9yICJMaW51eCBtdXN0IGhhdmUgYW4gTU1VISIKICNlbmRpZgpAQCAtMTMzLDQgKzEzNyw1IEBACiAKIH0KIAorI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KICNlbmRpZiAvKiBfWFRFTlNBX01NVV9DT05URVhUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL25vbW11LmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9ub21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjZTJjNDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9ub21tdS5oCkBAIC0wLDAgKzEsMyBAQAordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgZW5kX2JyazsKK30gbW1fY29udGV4dF90OwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbm9tbXVfY29udGV4dC5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vbm9tbXVfY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5OWU3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9ub21tdV9jb250ZXh0LmgKQEAgLTAsMCArMSwyNSBAQAorc3RhdGljIGlubGluZSB2b2lkIGVudGVyX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgaW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3RpdmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBzdHJ1Y3QgbW1fc3RydWN0ICpuZXh0KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpdGNoX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQsCisJCQkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWFjdGl2YXRlX21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKK30KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BhZ2UuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCAxMWY3ZGMyLi4xN2UwYzUzIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wYWdlLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGFnZS5oCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorI2luY2x1ZGUgPHBsYXRmb3JtL2hhcmR3YXJlLmg+CiAKIC8qCiAgKiBGaXhlZCBUTEIgdHJhbnNsYXRpb25zIGluIHRoZSBwcm9jZXNzb3IuCkBAIC0zMiw4ICszMywxNCBAQAogI2RlZmluZSBQQUdFX1NJWkUJCShfX1hURU5TQV9VTF9DT05TVCgxKSA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBQQUdFX01BU0sJCSh+KFBBR0VfU0laRS0xKSkKIAorI2lmZGVmIENPTkZJR19NTVUKICNkZWZpbmUgUEFHRV9PRkZTRVQJCVhDSEFMX0tTRUdfQ0FDSEVEX1ZBRERSCiAjZGVmaW5lIE1BWF9NRU1fUEZOCQlYQ0hBTF9LU0VHX1NJWkUKKyNlbHNlCisjZGVmaW5lIFBBR0VfT0ZGU0VUCQkwCisjZGVmaW5lIE1BWF9NRU1fUEZOCQkoUExBVEZPUk1fREVGQVVMVF9NRU1fU1RBUlQgKyBQTEFURk9STV9ERUZBVUxUX01FTV9TSVpFKQorI2VuZGlmCisKICNkZWZpbmUgUEdUQUJMRV9TVEFSVAkJMHg4MDAwMDAwMAogCiAvKgpAQCAtMTUwLDkgKzE1NywxMSBAQAogICogYWRkcmVzc2VzLgogICovCiAKKyNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCQkoUExBVEZPUk1fREVGQVVMVF9NRU1fU1RBUlQgPj4gUEFHRV9TSElGVCkKKwogI2RlZmluZSBfX3BhKHgpCQkJKCh1bnNpZ25lZCBsb25nKSAoeCkgLSBQQUdFX09GRlNFVCkKICNkZWZpbmUgX192YSh4KQkJCSgodm9pZCAqKSgodW5zaWduZWQgbG9uZykgKHgpICsgUEFHRV9PRkZTRVQpKQotI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJKCh1bnNpZ25lZCBsb25nKXBmbiA8IG1heF9tYXBucikKKyNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA+PSBBUkNIX1BGTl9PRkZTRVQgJiYgKChwZm4pIC0gQVJDSF9QRk5fT0ZGU0VUKSA8IG1heF9tYXBucikKICNpZmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiAjIGVycm9yIENPTkZJR19ESVNDT05USUdNRU0gbm90IHN1cHBvcnRlZAogI2VuZGlmCkBAIC0xNjIsOCArMTcxLDkgQEAKICNkZWZpbmUgdmlydF9hZGRyX3ZhbGlkKGthZGRyKQlwZm5fdmFsaWQoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgcGFnZV90b19waHlzKHBhZ2UpCShwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUKQogCisjaWZkZWYgQ09ORklHX01NVQogI2RlZmluZSBXQU5UX1BBR0VfVklSVFVBTAotCisjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggODAxNGQ5Ni4uYTEzODc3MCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTgzLDcgKzE4MywxNSBAQAogCiAjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpKQogCisjaWZkZWYgQ09ORklHX01NVQogZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BBR0VfU0laRS9zaXplb2YocGdkX3QpXTsKK2V4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpOworI2Vsc2UKKyMgZGVmaW5lIHN3YXBwZXJfcGdfZGlyIE5VTEwKK3N0YXRpYyBpbmxpbmUgdm9pZCBwYWdpbmdfaW5pdCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCkgeyB9CisjZW5kaWYKIAogLyoKICAqIFRoZSBwbWQgY29udGFpbnMgdGhlIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHB0ZSBwYWdlLgpAQCAtMzgzLDggKzM5MSw2IEBACiAKICNlbHNlCiAKLWV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOwotCiAjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKIAogZXh0ZXJuICB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLApAQCAtMzk4LDkgKzQwNCw2IEBACiAjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsZnJvbSxwZm4sc2l6ZSxwcm90KSBcCiAgICAgICAgICAgICAgICAgcmVtYXBfcGZuX3JhbmdlKHZtYSwgZnJvbSwgcGZuLCBzaXplLCBwcm90KQogCi0KLWV4dGVybiB2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKLQogdHlwZWRlZiBwdGVfdCAqcHRlX2FkZHJfdDsKIAogI2VuZGlmIC8qICFkZWZpbmVkIChfX0FTU0VNQkxZX18pICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wbGF0Zm9ybS5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGxhdGZvcm0uaAppbmRleCBlM2Q1YTQ4Li43ZDkzNmU1IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wbGF0Zm9ybS5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BsYXRmb3JtLmgKQEAgLTc0LDE2ICs3NCw1IEBACiAgKi8KIGV4dGVybiB2b2lkIHBsYXRmb3JtX2NhbGlicmF0ZV9jY291bnQgKHZvaWQpOwogCi0vKgotICogcGxhdGZvcm1fZ2V0X3J0Y190aW1lIHJldHVybnMgUlRDIHNlY29uZHMgKHJldHVybnMgMCBmb3Igbm8gZXJyb3IpCi0gKi8KLWV4dGVybiBpbnQgcGxhdGZvcm1fZ2V0X3J0Y190aW1lKHRpbWVfdCopOwotCi0vKgotICogcGxhdGZvcm1fc2V0X3J0Y190aW1lIHNldCBSVEMgc2Vjb25kcyAocmV0dXJucyAwIGZvciBubyBlcnJvcikKLSAqLwotZXh0ZXJuIGludCBwbGF0Zm9ybV9zZXRfcnRjX3RpbWUodGltZV90KTsKLQotCiAjZW5kaWYJLyogX1hURU5TQV9QTEFURk9STV9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggMDczODdkMy4uMGVhNDkzNyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTEzLDYgKzEzLDcgQEAKIAogI2luY2x1ZGUgPHZhcmlhbnQvY29yZS5oPgogI2luY2x1ZGUgPGFzbS9jb3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHBsYXRmb3JtL2hhcmR3YXJlLmg+CiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KQEAgLTI1LDYgKzI2LDggQEAKICMgZXJyb3IgTGludXggcmVxdWlyZXMgdGhlIFh0ZW5zYSBXaW5kb3dlZCBSZWdpc3RlcnMgT3B0aW9uLgogI2VuZGlmCiAKKyNkZWZpbmUgQVJDSF9TTEFCX01JTkFMSUdOCVhDSEFMX0RBVEFfV0lEVEgKKwogLyoKICAqIFVzZXIgc3BhY2UgcHJvY2VzcyBzaXplOiAxIEdCLgogICogV2luZG93ZWQgY2FsbCBBQkkgcmVxdWlyZXMgY2FsbGVyIGFuZCBjYWxsZWUgdG8gYmUgbG9jYXRlZCB3aXRoaW4gdGhlIHNhbWUKQEAgLTMzLDcgKzM2LDEyIEBACiAgKiB0aGUgMSBHQiByZXF1aXJlbWVudCBhcHBsaWVzIHRvIHRoZSBzdGFjayBhcyB3ZWxsLgogICovCiAKKyNpZmRlZiBDT05GSUdfTU1VCiAjZGVmaW5lIFRBU0tfU0laRQlfX1hURU5TQV9VTF9DT05TVCgweDQwMDAwMDAwKQorI2Vsc2UKKyNkZWZpbmUgVEFTS19TSVpFCShQTEFURk9STV9ERUZBVUxUX01FTV9TVEFSVCArIFBMQVRGT1JNX0RFRkFVTFRfTUVNX1NJWkUpCisjZW5kaWYKKwogI2RlZmluZSBTVEFDS19UT1AJVEFTS19TSVpFCiAjZGVmaW5lIFNUQUNLX1RPUF9NQVgJU1RBQ0tfVE9QCiAKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMKaW5kZXggYTUxZDM2YS4uODBkMjRjNCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL2VudHJ5LlMKQEAgLTE0NjMsNiArMTQ2Myw3IEBACiAJY2FsbHgwCWEwCQkjIHNob3VsZCBub3QgcmV0dXJuCiAxOglqCTFiCiAKKyNpZmRlZiBDT05GSUdfTU1VCiAvKgogICogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLiBCYWlsIG91dCEKICAqLwpAQCAtMTc3NSw3ICsxNzc2LDcgQEAKIAliYnNpLmwJYTIsIFBTX1VNX0JJVCwgMWYKIAlqCV9rZXJuZWxfZXhjZXB0aW9uCiAxOglqCV91c2VyX2V4Y2VwdGlvbgotCisjZW5kaWYgLyogQ09ORklHX01NVSAqLwogCiAvKgogICogU3lzdGVtIENhbGxzLgpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2hlYWQuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC9oZWFkLlMKaW5kZXggNjdlNjkxMy4uMDgxN2Y5ZCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaGVhZC5TCkBAIC01Myw3ICs1Myw3IEBACiAyOglsMzJyCWEwLCAxYgogCWp4CWEwCiAKLQkudGV4dAorCS5zZWN0aW9uIC5pbml0LnRleHQsICJheCIKIAkuYWxpZ24gNAogX3N0YXJ0dXA6CiAKQEAgLTIzNSw4ICsyMzUsOSBAQAogICovCiAJCiAuc2VjdGlvbiAiLmJzcy5wYWdlX2FsaWduZWQiLCAidyIKKyNpZmRlZiBDT05GSUdfTU1VCiBFTlRSWShzd2FwcGVyX3BnX2RpcikKIAkuZmlsbAlQQUdFX1NJWkUsIDEsIDAKKyNlbmRpZgogRU5UUlkoZW1wdHlfemVyb19wYWdlKQogCS5maWxsCVBBR0VfU0laRSwgMSwgMAotCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKaW5kZXggZjNiNjZmYi4uYTM2Yzg1ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKQEAgLTEzMiw2ICsxMzIsMTggQEAKIAlzZXRfc3IgKGNhY2hlZF9pcnFfbWFzaywgSU5URU5BQkxFKTsKIH0KIAorc3RhdGljIHZvaWQgeHRlbnNhX2lycV9lbmFibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwl2YXJpYW50X2lycV9lbmFibGUoaXJxKTsKKwl4dGVuc2FfaXJxX3VubWFzayhpcnEpOworfQorCitzdGF0aWMgdm9pZCB4dGVuc2FfaXJxX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwl4dGVuc2FfaXJxX21hc2soaXJxKTsKKwl2YXJpYW50X2lycV9kaXNhYmxlKGlycSk7Cit9CisKIHN0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc2V0X3NyKDEgPDwgaXJxLCBJTlRDTEVBUik7CkBAIC0xNDYsNiArMTU4LDggQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4dGVuc2FfaXJxX2NoaXAgPSB7CiAJLm5hbWUJCT0gInh0ZW5zYSIsCisJLmVuYWJsZQkJPSB4dGVuc2FfaXJxX2VuYWJsZSwKKwkuZGlzYWJsZQk9IHh0ZW5zYV9pcnFfZGlzYWJsZSwKIAkubWFzawkJPSB4dGVuc2FfaXJxX21hc2ssCiAJLnVubWFzawkJPSB4dGVuc2FfaXJxX3VubWFzaywKIAkuYWNrCQk9IHh0ZW5zYV9pcnFfYWNrLApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3BsYXRmb3JtLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGxhdGZvcm0uYwppbmRleCA2OTY3NWYyLi4xYjkxYTk3IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcGxhdGZvcm0uYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcGxhdGZvcm0uYwpAQCAtMzYsOCArMzYsNiBAQAogX0Yodm9pZCwgaWRsZSwgKHZvaWQpLCB7IF9fYXNtX18gX192b2xhdGlsZV9fICgid2FpdGkgMCIgOjo6ICJtZW1vcnkiKTsgfSk7CiBfRih2b2lkLCBoZWFydGJlYXQsICh2b2lkKSwgeyB9KTsKIF9GKGludCwgIHBjaWJpb3NfZml4dXAsICh2b2lkKSwgeyByZXR1cm4gMDsgfSk7Ci1fRihpbnQsIGdldF9ydGNfdGltZSwgKHRpbWVfdCogdCksIHsgcmV0dXJuIDA7IH0pOwotX0YoaW50LCBzZXRfcnRjX3RpbWUsICh0aW1lX3QgdCksIHsgcmV0dXJuIDA7IH0pOwogCiAjaWZkZWYgQ09ORklHX1hURU5TQV9DQUxJQlJBVEVfQ0NPVU5UCiBfRih2b2lkLCBjYWxpYnJhdGVfY2NvdW50LCAodm9pZCksCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3Byb2Nlc3MuYwppbmRleCA5MTg1NTk3Li4wMzFmMzY2IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogICogICAgICAgY2hpbGRyZWdzLgogICovCiAKLWludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAoraW50IGNvcHlfdGhyZWFkKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgdXNwLAogCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jCmluZGV4IDRlYzE2MzMuLjFlNWEwMzQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9zZXR1cC5jCkBAIC04NCw3ICs4NCwxMyBAQAogaW50IGluaXRyZF9pc19tYXBwZWQ7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NTVUKIGV4dGVybiB2b2lkIGluaXRfbW11KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X21tdSh2b2lkKSB7IH0KKyNlbmRpZgorCitleHRlcm4gdm9pZCB6b25lc19pbml0KHZvaWQpOwogCiAvKgogICogQm9vdCBwYXJhbWV0ZXIgcGFyc2luZy4KQEAgLTI4Niw2ICsyOTIsNyBAQAogCiAKIAlwYWdpbmdfaW5pdCgpOworCXpvbmVzX2luaXQoKTsKIAogI2lmZGVmIENPTkZJR19WVAogIyBpZiBkZWZpbmVkKENPTkZJR19WR0FfQ09OU09MRSkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jCmluZGV4IDhkZjFlODQuLjg4NDgxMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYwpAQCAtMTQsNyArMTQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI1LDI3ICsyNSwzMSBAQAogI2luY2x1ZGUgPGFzbS90aW1leC5oPgogI2luY2x1ZGUgPGFzbS9wbGF0Zm9ybS5oPgogCi0KLURFRklORV9TUElOTE9DSyhydGNfbG9jayk7Ci1FWFBPUlRfU1lNQk9MKHJ0Y19sb2NrKTsKLQotCiAjaWZkZWYgQ09ORklHX1hURU5TQV9DQUxJQlJBVEVfQ0NPVU5UCiB1bnNpZ25lZCBsb25nIGNjb3VudF9wZXJfamlmZnk7CQkvKiBwZXIgMS9IWiAqLwogdW5zaWduZWQgbG9uZyBuc2VjX3Blcl9jY291bnQ7CQkvKiBuc2VjIHBlciBjY291bnQgaW5jcmVtZW50ICovCiAjZW5kaWYKIAotc3RhdGljIGxvbmcgbGFzdF9ydGNfdXBkYXRlID0gMDsKLQotLyoKLSAqIFNjaGVkdWxlciBjbG9jayAtIHJldHVybnMgY3VycmVudCB0aW0gaW4gbmFub3NlYyB1bml0cy4KLSAqLwotCi11bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCkKK3N0YXRpYyBjeWNsZV90IGNjb3VudF9yZWFkKHZvaWQpCiB7Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nIGxvbmcpamlmZmllcyAqICgxMDAwMDAwMDAwIC8gSFopOworCXJldHVybiAoY3ljbGVfdClnZXRfY2NvdW50KCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2NvdW50X2Nsb2Nrc291cmNlID0geworCS5uYW1lID0gImNjb3VudCIsCisJLnJhdGluZyA9IDIwMCwKKwkucmVhZCA9IGNjb3VudF9yZWFkLAorCS5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCisJLyoKKwkgKiBXaXRoIGEgc2hpZnQgb2YgMjIgdGhlIGxvd2VyIGxpbWl0IG9mIHRoZSBjcHUgY2xvY2sgaXMKKwkgKiAxTUh6LCB3aGVyZSBOU0VDX1BFUl9DQ09VTlQgaXMgMTAwMCBvciBhIGJpdCBsZXNzIHRoYW4KKwkgKiAyXjEwOiBTaW5jZSB3ZSBoYXZlIDMyIGJpdHMgYW5kIHRoZSBtdWx0aXBsaWNhdG9yIGNhbgorCSAqIGFscmVhZHkgdGFrZSB1cCBhcyBtdWNoIGFzIDEwIGJpdHMsIHRoaXMgbGVhdmVzIHVzIHdpdGgKKwkgKiByZW1haW5pbmcgdXBwZXIgMjIgYml0cy4KKwkgKi8KKwkuc2hpZnQgPSAyMiwKK307CisKIHN0YXRpYyBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyX2lycWFjdGlvbiA9IHsKIAkuaGFuZGxlciA9CXRpbWVyX2ludGVycnVwdCwKQEAgLTU1LDExICs1OSwxMSBAQAogCiB2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKIHsKLQl0aW1lX3Qgc2VjX28sIHNlY19uID0gMDsKKwl4dGltZS50dl9uc2VjID0gMDsKKwl4dGltZS50dl9zZWMgPSByZWFkX3BlcnNpc3RlbnRfY2xvY2soKTsKIAotCS8qIFRoZSBwbGF0Zm9ybSBtdXN0IHByb3ZpZGUgYSBmdW5jdGlvbiB0byBjYWxpYnJhdGUgdGhlIHByb2Nlc3NvcgotCSAqIHNwZWVkIGZvciB0aGUgQ0FMSUJSQVRFLgotCSAqLworCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKKwkJLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwogCiAjaWZkZWYgQ09ORklHX1hURU5TQV9DQUxJQlJBVEVfQ0NPVU5UCiAJcHJpbnRrKCJDYWxpYnJhdGluZyBDUFUgZnJlcXVlbmN5ICIpOwpAQCAtNjcsMTkgKzcxLDEwIEBACiAJcHJpbnRrKCIlZC4lMDJkIE1IelxuIiwgKGludCljY291bnRfcGVyX2ppZmZ5LygxMDAwMDAwL0haKSwKIAkJCShpbnQpKGNjb3VudF9wZXJfamlmZnkvKDEwMDAwL0haKSklMTAwKTsKICNlbmRpZgotCi0JLyogU2V0IHRpbWUgZnJvbSBSVEMgKGlmIHByb3ZpZGVkKSAqLwotCi0JaWYgKHBsYXRmb3JtX2dldF9ydGNfdGltZSgmc2VjX28pID09IDApCi0JCXdoaWxlIChwbGF0Zm9ybV9nZXRfcnRjX3RpbWUoJnNlY19uKSkKLQkJCWlmIChzZWNfbyAhPSBzZWNfbikKLQkJCQlicmVhazsKLQotCXh0aW1lLnR2X25zZWMgPSAwOwotCWxhc3RfcnRjX3VwZGF0ZSA9IHh0aW1lLnR2X3NlYyA9IHNlY19uOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJndhbGxfdG9fbW9ub3RvbmljLAotCQkteHRpbWUudHZfc2VjLCAteHRpbWUudHZfbnNlYyk7CisJY2NvdW50X2Nsb2Nrc291cmNlLm11bHQgPQorCQljbG9ja3NvdXJjZV9oejJtdWx0KENDT1VOVF9QRVJfSklGRlkgKiBIWiwKKwkJCQljY291bnRfY2xvY2tzb3VyY2Uuc2hpZnQpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjY291bnRfY2xvY2tzb3VyY2UpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgbGludXggdGltZXIgaW50ZXJydXB0LiAqLwogCkBAIC04Nyw2OSArODIsNiBAQAogCXNldF9saW51eF90aW1lcihnZXRfY2NvdW50KCkgKyBDQ09VTlRfUEVSX0pJRkZZKTsKIH0KIAotCi1pbnQgZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCi17Ci0JdGltZV90IHd0bV9zZWMsIHNlYyA9IHR2LT50dl9zZWM7Ci0JbG9uZyB3dG1fbnNlYywgbnNlYyA9IHR2LT50dl9uc2VjOwotCXVuc2lnbmVkIGxvbmcgZGVsdGE7Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpdHYtPnR2X25zZWMgPj0gTlNFQ19QRVJfU0VDKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKLQotCS8qIFRoaXMgaXMgcmV2b2x0aW5nLiBXZSBuZWVkIHRvIHNldCAieHRpbWUiIGNvcnJlY3RseS4gSG93ZXZlciwgdGhlCi0JICogdmFsdWUgaW4gdGhpcyBsb2NhdGlvbiBpcyB0aGUgdmFsdWUgYXQgdGhlIG1vc3QgcmVjZW50IHVwZGF0ZSBvZgotCSAqIHdhbGwgdGltZS4gIERpc2NvdmVyIHdoYXQgY29ycmVjdGlvbiBnZXR0aW1lb2ZkYXkoKSB3b3VsZCBoYXZlCi0JICogbWFkZSwgYW5kIHRoZW4gdW5kbyBpdCEKLQkgKi8KLQotCWRlbHRhID0gQ0NPVU5UX1BFUl9KSUZGWTsKLQlkZWx0YSArPSBnZXRfY2NvdW50KCkgLSBnZXRfbGludXhfdGltZXIoKTsKLQluc2VjIC09IGRlbHRhICogTlNFQ19QRVJfQ0NPVU5UOwotCi0Jd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKLQl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnh0aW1lLCBzZWMsIG5zZWMpOwotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywgd3RtX3NlYywgd3RtX25zZWMpOwotCi0JbnRwX2NsZWFyKCk7Ci0Jd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZG9fc2V0dGltZW9mZGF5KTsKLQotCi12b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHZvbGF0aWxlIHNlYywgdXNlYywgZGVsdGEsIHNlcTsKLQotCWRvIHsKLQkJc2VxID0gcmVhZF9zZXFiZWdpbl9pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0KLQkJc2VjID0geHRpbWUudHZfc2VjOwotCQl1c2VjID0gKHh0aW1lLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDKTsKLQotCQlkZWx0YSA9IGdldF9saW51eF90aW1lcigpIC0gZ2V0X2Njb3VudCgpOwotCi0JfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7Ci0KLQl1c2VjICs9ICgoKHVuc2lnbmVkIGxvbmcpIENDT1VOVF9QRVJfSklGRlkgLSBkZWx0YSkKLQkJICogKHVuc2lnbmVkIGxvbmcpIE5TRUNfUEVSX0NDT1VOVCkgLyBOU0VDX1BFUl9VU0VDOwotCi0JZm9yICg7IHVzZWMgPj0gMTAwMDAwMDsgc2VjKyssIHVzZWMgLT0gMTAwMDAwMCkKLQkJOwotCi0JdHYtPnR2X3NlYyA9IHNlYzsKLQl0di0+dHZfdXNlYyA9IHVzZWM7Ci19Ci0KLUVYUE9SVF9TWU1CT0woZG9fZ2V0dGltZW9mZGF5KTsKLQogLyoKICAqIFRoZSB0aW1lciBpbnRlcnJ1cHQgaXMgY2FsbGVkIEhaIHRpbWVzIHBlciBzZWNvbmQuCiAgKi8KQEAgLTE3OCwxNiArMTEwLDYgQEAKIAkJbmV4dCArPSBDQ09VTlRfUEVSX0pJRkZZOwogCQlzZXRfbGludXhfdGltZXIobmV4dCk7CiAKLQkJaWYgKG50cF9zeW5jZWQoKSAmJgotCQkgICAgeHRpbWUudHZfc2VjIC0gbGFzdF9ydGNfdXBkYXRlID49IDY1OSAmJgotCQkgICAgYWJzKCh4dGltZS50dl9uc2VjLzEwMDApLSgxMDAwMDAwLTEwMDAwMDAvSFopKTw1MDAwMDAwL0haKSB7Ci0KLQkJCWlmIChwbGF0Zm9ybV9zZXRfcnRjX3RpbWUoeHRpbWUudHZfc2VjKzEpID09IDApCi0JCQkJbGFzdF9ydGNfdXBkYXRlID0geHRpbWUudHZfc2VjKzE7Ci0JCQllbHNlCi0JCQkJLyogRG8gaXQgYWdhaW4gaW4gNjAgcyAqLwotCQkJCWxhc3RfcnRjX3VwZGF0ZSArPSA2MDsKLQkJfQogCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwogCX0KIApAQCAtMjEzLDQgKzEzNSwzIEBACiAJICAgICAgIChsb29wc19wZXJfamlmZnkvKDEwMDAwL0haKSkgJSAxMDApOwogfQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMKaW5kZXggYzQ0ZjgzMC4uOWYwYjcxMSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2VuZGlmCiB7IEVYQ0NBVVNFX1VOQUxJR05FRCwJCUtSTkwsCSAgIGZhc3RfdW5hbGlnbmVkIH0sCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTU1VCiB7IEVYQ0NBVVNFX0lUTEJfTUlTUywJCTAsCSAgIGRvX3BhZ2VfZmF1bHQgfSwKIHsgRVhDQ0FVU0VfSVRMQl9NSVNTLAkJVVNFUnxLUk5MLCBmYXN0X3NlY29uZF9sZXZlbF9taXNzfSwKIHsgRVhDQ0FVU0VfSVRMQl9NVUxUSUhJVCwJCTAsCSAgIGRvX211bHRpaGl0IH0sCkBAIC0xMTgsNiArMTE5LDcgQEAKIHsgRVhDQ0FVU0VfU1RPUkVfQ0FDSEVfQVRUUklCVVRFLAlVU0VSfEtSTkwsIGZhc3Rfc3RvcmVfcHJvaGliaXRlZCB9LAogeyBFWENDQVVTRV9TVE9SRV9DQUNIRV9BVFRSSUJVVEUsCTAsCSAgIGRvX3BhZ2VfZmF1bHQgfSwKIHsgRVhDQ0FVU0VfTE9BRF9DQUNIRV9BVFRSSUJVVEUsCTAsCSAgIGRvX3BhZ2VfZmF1bHQgfSwKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAvKiBYQ0NIQUxfRVhDQ0FVU0VfRkxPQVRJTkdfUE9JTlQgdW5oYW5kbGVkICovCiAjaWYgWFRFTlNBX0hBVkVfQ09QUk9DRVNTT1IoMCkKIENPUFJPQ0VTU09SKDApLApAQCAtMzcyLDExICszNzQsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGEwLCBhMSwgcGM7CiAJdW5zaWduZWQgbG9uZyBzcF9zdGFydCwgc3BfZW5kOwogCi0JYTEgPSAodW5zaWduZWQgbG9uZylzcDsKLQotCWlmIChhMSA9PSAwKQotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdiAlMCwgYTFcbiIgOiAiPWEiKGExKSk7Ci0KKwlpZiAoc3ApCisJCWExID0gKHVuc2lnbmVkIGxvbmcpc3A7CisJZWxzZQorCQlhMSA9IHRhc2stPnRocmVhZC5zcDsKIAogCXNwX3N0YXJ0ID0gYTEgJiB+KFRIUkVBRF9TSVpFLTEpOwogCXNwX2VuZCA9IHNwX3N0YXJ0ICsgVEhSRUFEX1NJWkU7CkBAIC00MTgsOSArNDE5LDggQEAKIAlpbnQgaSA9IDA7CiAJdW5zaWduZWQgbG9uZyAqc3RhY2s7CiAKLQlpZiAoc3AgPT0gMCkKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtb3YgJTAsIGExXG4iIDogIj1hIihzcCkpOwotCisJaWYgKCFzcCkKKwkJc3AgPSAodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5zcDsKICAJc3RhY2sgPSBzcDsKIAogCXByaW50aygiXG5TdGFjazogIik7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdmVjdG9ycy5TIGIvYXJjaC94dGVuc2Eva2VybmVsL3ZlY3RvcnMuUwppbmRleCBlYjJkN2JiLi43NGE3NTE4IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdmVjdG9ycy5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC92ZWN0b3JzLlMKQEAgLTMwOSw2ICszMDksNyBAQAogCSAqIEFsbCBvdGhlciBleGNlcHRpb25zIGFyZSB1bmV4cGVjdGVkIGFuZCB0aHVzIHVucmVjb3ZlcmFibGUhCiAJICovCiAKKyNpZmRlZiBDT05GSUdfTU1VCiAJLmV4dGVybiBmYXN0X3NlY29uZF9sZXZlbF9taXNzX2RvdWJsZV9rZXJuZWwKIAogLkxrc3A6CS8qIGEwOiBhMCwgYTE6IGExLCBhMjogYTIsIGEzOiB0cmFzaGVkLCBkZXBjOiBkZXBjLCBleGNzYXZlOiBhMyAqLwpAQCAtMzE5LDYgKzMyMCw5IEBACiAJYm5leglhMywgLkx1bnJlY292ZXJhYmxlCiAxOgltb3ZpCWEzLCBmYXN0X3NlY29uZF9sZXZlbF9taXNzX2RvdWJsZV9rZXJuZWwKIAlqeAlhMworI2Vsc2UKKy5lcXUJLkxrc3AsCS5MdW5yZWNvdmVyYWJsZQorI2VuZGlmCiAKIAkvKiBDcml0aWNhbCEgV2UgY2FuJ3QgaGFuZGxlIHRoaXMgc2l0dWF0aW9uLiBQQU5JQyEgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBkNTA2Nzc0Li5jMWJlOWE0IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAKICNpbmNsdWRlIDx2YXJpYW50L2NvcmUuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9oYXJkd2FyZS5oPgogT1VUUFVUX0FSQ0goeHRlbnNhKQogRU5UUlkoX3N0YXJ0KQogCkBAIC0yNiw3ICsyNyw5IEBACiBqaWZmaWVzID0gamlmZmllc182NDsKICNlbmRpZgogCisjaWZuZGVmIEtFUk5FTE9GRlNFVAogI2RlZmluZSBLRVJORUxPRkZTRVQgMHhkMDAwMTAwMAorI2VuZGlmCiAKIC8qIE5vdGU6IEluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBpdCB3b3VsZCBiZSBuaWNlIHRvIHNwZWNpZnkgb25seSB0aGUKICAgIHZlY3RvciBuYW1lIGFuZCBzZWN0aW9uIGtpbmQgYW5kIGNvbnN0cnVjdCAic3ltIiBhbmQgInNlY3Rpb24iIHVzaW5nCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9tbS9NYWtlZmlsZSBiL2FyY2gveHRlbnNhL21tL01ha2VmaWxlCmluZGV4IDY0ZTMwNGEuLmYwYjY0NmQgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL21tL01ha2VmaWxlCisrKyBiL2FyY2gveHRlbnNhL21tL01ha2VmaWxlCkBAIC0yLDQgKzIsNSBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4L1h0ZW5zYS1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZXIuCiAjCiAKLW9iai15CSA6PSBpbml0Lm8gZmF1bHQubyB0bGIubyBtaXNjLm8gY2FjaGUubworb2JqLXkJCQk6PSBpbml0Lm8gY2FjaGUubyBtaXNjLm8KK29iai0kKENPTkZJR19NTVUpCSs9IGZhdWx0Lm8gbW11Lm8gdGxiLm8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL2luaXQuYyBiL2FyY2gveHRlbnNhL21tL2luaXQuYwppbmRleCAzNDE2M2NmLi40MjdlMTRmIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9pbml0LmMKKysrIGIvYXJjaC94dGVuc2EvbW0vaW5pdC5jCkBAIC0yNCwxNSArMjQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+Ci0jaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KLQotCi1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOwogCiAvKiBSZWZlcmVuY2VzIHRvIHNlY3Rpb24gYm91bmRhcmllcyAqLwogCkBAIC0xMzAsNyArMTIzLDggQEAKIAogCS8qIEZpbmQgYW4gYXJlYSB0byB1c2UgZm9yIHRoZSBib290bWVtIGJpdG1hcC4gKi8KIAotCWJvb3RtYXBfc2l6ZSA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyhtYXhfbG93X3BmbikgPDwgUEFHRV9TSElGVDsKKwlib290bWFwX3NpemUgPSBib290bWVtX2Jvb3RtYXBfcGFnZXMobWF4X2xvd19wZm4gLSBtaW5fbG93X3Bmbik7CisJYm9vdG1hcF9zaXplIDw8PSBQQUdFX1NISUZUOwogCWJvb3RtYXBfc3RhcnQgPSB+MDsKIAogCWZvciAoaT0wOyBpPHN5c21lbS5ucl9iYW5rczsgaSsrKQpAQCAtMTQ1LDggKzEzOSw5IEBACiAJLyogUmVzZXJ2ZSB0aGUgYm9vdG1lbSBiaXRtYXAgYXJlYSAqLwogCiAJbWVtX3Jlc2VydmUoYm9vdG1hcF9zdGFydCwgYm9vdG1hcF9zdGFydCArIGJvb3RtYXBfc2l6ZSwgMSk7Ci0JYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApLCBtaW5fbG93X3BmbiwKKwlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksCiAJCQkJCSBib290bWFwX3N0YXJ0ID4+IFBBR0VfU0hJRlQsCisJCQkJCSBtaW5fbG93X3BmbiwKIAkJCQkJIG1heF9sb3dfcGZuKTsKIAogCS8qIEFkZCBhbGwgcmVtYWluaW5nIG1lbW9yeSBwaWVjZXMgaW50byB0aGUgYm9vdG1lbSBtYXAgKi8KQEAgLTE1OCwxNCArMTUzLDE0IEBACiB9CiAKIAotdm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKK3ZvaWQgX19pbml0IHpvbmVzX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKIAlpbnQgaTsKIAogCS8qIEFsbCBwYWdlcyBhcmUgRE1BLWFibGUsIHNvIHdlIHB1dCB0aGVtIGFsbCBpbiB0aGUgRE1BIHpvbmUuICovCiAKLQl6b25lc19zaXplW1pPTkVfRE1BXSA9IG1heF9sb3dfcGZuOworCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gbWF4X2xvd19wZm4gLSBBUkNIX1BGTl9PRkZTRVQ7CiAJZm9yIChpID0gMTsgaSA8IE1BWF9OUl9aT05FUzsgaSsrKQogCQl6b25lc19zaXplW2ldID0gMDsKIApAQCAtMTczLDQwICsxNjgsNyBAQAogCXpvbmVzX3NpemVbWk9ORV9ISUdITUVNXSA9IG1heF9wZm4gLSBtYXhfbG93X3BmbjsKICNlbmRpZgogCi0JLyogSW5pdGlhbGl6ZSB0aGUga2VybmVsJ3MgcGFnZSB0YWJsZXMuICovCi0KLQltZW1zZXQoc3dhcHBlcl9wZ19kaXIsIDAsIFBBR0VfU0laRSk7Ci0KLQlmcmVlX2FyZWFfaW5pdCh6b25lc19zaXplKTsKLX0KLQotLyoKLSAqIEZsdXNoIHRoZSBtbXUgYW5kIHJlc2V0IGFzc29jaWF0ZWQgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZXMuCi0gKi8KLQotdm9pZCBfX2luaXQgaW5pdF9tbXUgKHZvaWQpCi17Ci0JLyogV3JpdGluZyB6ZXJvcyB0byB0aGUgPHQ+VExCQ0ZHIHNwZWNpYWwgcmVnaXN0ZXJzIGVuc3VyZQotCSAqIHRoYXQgdmFsaWQgdmFsdWVzIGV4aXN0IGluIHRoZSByZWdpc3Rlci4gIEZvciBleGlzdGluZwotCSAqIFBHU1pJRDx3PiBmaWVsZHMsIHplcm8gc2VsZWN0cyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUKLQkgKiBwYWdlLXNpemUgYXJyYXkuICBGb3Igbm9uZXhpc3RlbnQgUEdTWklEPHc+IGZpZWxkcywgemVybyBpcwotCSAqIHRoZSBiZXN0IHZhbHVlIHRvIHdyaXRlLiAgQWxzbywgd2hlbiBjaGFuZ2luZyBQR1NaSUQ8dz4KLQkgKiBmaWVsZHMsIHRoZSBjb3JyZXNwb25kaW5nIFRMQiBtdXN0IGJlIGZsdXNoZWQuCi0JICovCi0Jc2V0X2l0bGJjZmdfcmVnaXN0ZXIgKDApOwotCXNldF9kdGxiY2ZnX3JlZ2lzdGVyICgwKTsKLQlmbHVzaF90bGJfYWxsICgpOwotCi0JLyogU2V0IHJhc2lkIHJlZ2lzdGVyIHRvIGEga25vd24gdmFsdWUuICovCi0KLQlzZXRfcmFzaWRfcmVnaXN0ZXIgKEFTSURfVVNFUl9GSVJTVCk7Ci0KLQkvKiBTZXQgUFRFVkFERFIgc3BlY2lhbCByZWdpc3RlciB0byB0aGUgc3RhcnQgb2YgdGhlIHBhZ2UKLQkgKiB0YWJsZSwgd2hpY2ggaXMgaW4ga2VybmVsIG1hcHBhYmxlIHNwYWNlIChpZS4gbm90Ci0JICogc3RhdGljYWxseSBtYXBwZWQpLiAgVGhpcyByZWdpc3RlcidzIHZhbHVlIGlzIHVuZGVmaW5lZCBvbgotCSAqIHJlc2V0LgotCSAqLwotCXNldF9wdGV2YWRkcl9yZWdpc3RlciAoUEdUQUJMRV9TVEFSVCk7CisJZnJlZV9hcmVhX2luaXRfbm9kZSgwLCB6b25lc19zaXplLCBBUkNIX1BGTl9PRkZTRVQsIE5VTEwpOwogfQogCiAvKgpAQCAtMjE4LDggKzE4MCw4IEBACiAJdW5zaWduZWQgbG9uZyBjb2Rlc2l6ZSwgcmVzZXJ2ZWRwYWdlcywgZGF0YXNpemUsIGluaXRzaXplOwogCXVuc2lnbmVkIGxvbmcgaGlnaG1lbXNpemUsIHRtcCwgcmFtOwogCi0JbWF4X21hcG5yID0gbnVtX3BoeXNwYWdlcyA9IG1heF9sb3dfcGZuOwotCWhpZ2hfbWVtb3J5ID0gKHZvaWQgKikgX192YShtYXhfbWFwbnIgPDwgUEFHRV9TSElGVCk7CisJbWF4X21hcG5yID0gbnVtX3BoeXNwYWdlcyA9IG1heF9sb3dfcGZuIC0gQVJDSF9QRk5fT0ZGU0VUOworCWhpZ2hfbWVtb3J5ID0gKHZvaWQgKikgX192YShtYXhfbG93X3BmbiA8PCBQQUdFX1NISUZUKTsKIAloaWdobWVtc2l6ZSA9IDA7CiAKICNpZmRlZiBDT05GSUdfSElHSE1FTQpAQCAtMjI5LDcgKzE5MSw3IEBACiAJdG90YWxyYW1fcGFnZXMgKz0gZnJlZV9hbGxfYm9vdG1lbSgpOwogCiAJcmVzZXJ2ZWRwYWdlcyA9IHJhbSA9IDA7Ci0JZm9yICh0bXAgPSAwOyB0bXAgPCBtYXhfbG93X3BmbjsgdG1wKyspIHsKKwlmb3IgKHRtcCA9IDA7IHRtcCA8IG1heF9tYXBucjsgdG1wKyspIHsKIAkJcmFtKys7CiAJCWlmIChQYWdlUmVzZXJ2ZWQobWVtX21hcCt0bXApKQogCQkJcmVzZXJ2ZWRwYWdlcysrOwpAQCAtMjc5LDIzICsyNDEsMyBAQAogCXByaW50aygiRnJlZWluZyB1bnVzZWQga2VybmVsIG1lbW9yeTogJWRrIGZyZWVkXG4iLAogCSAgICAgICAoJl9faW5pdF9lbmQgLSAmX19pbml0X2JlZ2luKSA+PiAxMCk7CiB9Ci0KLXN0cnVjdCBrbWVtX2NhY2hlICpwZ3RhYmxlX2NhY2hlIF9fcmVhZF9tb3N0bHk7Ci0KLXN0YXRpYyB2b2lkIHBnZF9jdG9yKHZvaWQqIGFkZHIpCi17Ci0JcHRlX3QqIHB0ZXAgPSAocHRlX3QqKWFkZHI7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTAyNDsgaSsrLCBwdGVwKyspCi0JCXB0ZV9jbGVhcihOVUxMLCAwLCBwdGVwKTsKLQotfQotCi12b2lkIF9faW5pdCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCkKLXsKLQlwZ3RhYmxlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInBnZCIsCi0JCQlQQUdFX1NJWkUsIFBBR0VfU0laRSwKLQkJCVNMQUJfSFdDQUNIRV9BTElHTiwKLQkJCXBnZF9jdG9yKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL21pc2MuUyBiL2FyY2gveHRlbnNhL21tL21pc2MuUwppbmRleCBjODg1NjY0Li5iMDQ4NDA2IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9tbS9taXNjLlMKKysrIGIvYXJjaC94dGVuc2EvbW0vbWlzYy5TCkBAIC04NCw2ICs4NCw3IEBACiAKIAlyZXR3CiAKKyNpZmRlZiBDT05GSUdfTU1VCiAvKgogICogSWYgd2UgaGF2ZSB0byBkZWFsIHdpdGggY2FjaGUgYWxpYXNpbmcsIHdlIHVzZSB0ZW1wb3JhcnkgbWVtb3J5IG1hcHBpbmdzCiAgKiB0byBlbnN1cmUgdGhhdCB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBwYWdlcyBoYXZlIHRoZSBzYW1lIGNvbG9yIGFzCkBAIC0zMTEsNiArMzEyLDcgQEAKIC8qIEVuZCBvZiBzcGVjaWFsIHRyZWF0bWVudCBpbiB0bGIgbWlzcyBleGNlcHRpb24gKi8KIAogRU5UUlkoX190bGJ0ZW1wX21hcHBpbmdfZW5kKQorI2VuZGlmIC8qIENPTkZJR19NTVUKIAogLyoKICAqIHZvaWQgX19pbnZhbGlkYXRlX2ljYWNoZV9wYWdlKHVsb25nIHN0YXJ0KQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbW0vbW11LmMgYi9hcmNoL3h0ZW5zYS9tbS9tbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmI5MWE5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvbW0vbW11LmMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIHh0ZW5zYSBtbXUgc3R1ZmYKKyAqCisgKiBFeHRyYWN0ZWQgZnJvbSBpbml0LmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKworI2luY2x1ZGUgPGFzbS90bGIuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOworCit2b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKQoreworCW1lbXNldChzd2FwcGVyX3BnX2RpciwgMCwgUEFHRV9TSVpFKTsKK30KKworLyoKKyAqIEZsdXNoIHRoZSBtbXUgYW5kIHJlc2V0IGFzc29jaWF0ZWQgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZXMuCisgKi8KK3ZvaWQgX19pbml0IGluaXRfbW11KHZvaWQpCit7CisJLyogV3JpdGluZyB6ZXJvcyB0byB0aGUgPHQ+VExCQ0ZHIHNwZWNpYWwgcmVnaXN0ZXJzIGVuc3VyZQorCSAqIHRoYXQgdmFsaWQgdmFsdWVzIGV4aXN0IGluIHRoZSByZWdpc3Rlci4gIEZvciBleGlzdGluZworCSAqIFBHU1pJRDx3PiBmaWVsZHMsIHplcm8gc2VsZWN0cyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUKKwkgKiBwYWdlLXNpemUgYXJyYXkuICBGb3Igbm9uZXhpc3RlbnQgUEdTWklEPHc+IGZpZWxkcywgemVybyBpcworCSAqIHRoZSBiZXN0IHZhbHVlIHRvIHdyaXRlLiAgQWxzbywgd2hlbiBjaGFuZ2luZyBQR1NaSUQ8dz4KKwkgKiBmaWVsZHMsIHRoZSBjb3JyZXNwb25kaW5nIFRMQiBtdXN0IGJlIGZsdXNoZWQuCisJICovCisJc2V0X2l0bGJjZmdfcmVnaXN0ZXIoMCk7CisJc2V0X2R0bGJjZmdfcmVnaXN0ZXIoMCk7CisJZmx1c2hfdGxiX2FsbCgpOworCisJLyogU2V0IHJhc2lkIHJlZ2lzdGVyIHRvIGEga25vd24gdmFsdWUuICovCisKKwlzZXRfcmFzaWRfcmVnaXN0ZXIoQVNJRF9VU0VSX0ZJUlNUKTsKKworCS8qIFNldCBQVEVWQUREUiBzcGVjaWFsIHJlZ2lzdGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgcGFnZQorCSAqIHRhYmxlLCB3aGljaCBpcyBpbiBrZXJuZWwgbWFwcGFibGUgc3BhY2UgKGllLiBub3QKKwkgKiBzdGF0aWNhbGx5IG1hcHBlZCkuICBUaGlzIHJlZ2lzdGVyJ3MgdmFsdWUgaXMgdW5kZWZpbmVkIG9uCisJICogcmVzZXQuCisJICovCisJc2V0X3B0ZXZhZGRyX3JlZ2lzdGVyKFBHVEFCTEVfU1RBUlQpOworfQorCitzdHJ1Y3Qga21lbV9jYWNoZSAqcGd0YWJsZV9jYWNoZSBfX3JlYWRfbW9zdGx5OworCitzdGF0aWMgdm9pZCBwZ2RfY3Rvcih2b2lkICphZGRyKQoreworCXB0ZV90ICpwdGVwID0gKHB0ZV90ICopYWRkcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyssIHB0ZXArKykKKwkJcHRlX2NsZWFyKE5VTEwsIDAsIHB0ZXApOworCit9CisKK3ZvaWQgX19pbml0IHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKQoreworCXBndGFibGVfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicGdkIiwKKwkJCVBBR0VfU0laRSwgUEFHRV9TSVpFLAorCQkJU0xBQl9IV0NBQ0hFX0FMSUdOLAorCQkJcGdkX2N0b3IpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL2lzcy9jb25zb2xlLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL2NvbnNvbGUuYwppbmRleCAyNWQ0NmM4Li40YzU1OWNmIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL2NvbnNvbGUuYworKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL2NvbnNvbGUuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsUC5oPgogCkBAIC0xNzYsMjIgKzE3NywyNCBAQAogCS8qIFN0dWIsIG9uY2UgYWdhaW4uLiAqLwogfQogCi1zdGF0aWMgaW50IHJzX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAotCQkJaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHJzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7Ci0Jb2ZmX3QgYmVnaW4gPSAwOwotCi0JbGVuICs9IHNwcmludGYocGFnZSwgInNlcmluZm86MS4wIGRyaXZlcjolc1xuIiwgc2VyaWFsX3ZlcnNpb24pOwotCSplb2YgPSAxOwotCi0JaWYgKG9mZiA+PSBsZW4gKyBiZWdpbikKLQkJcmV0dXJuIDA7Ci0KLQkqc3RhcnQgPSBwYWdlICsgKG9mZiAtIGJlZ2luKTsKLQlyZXR1cm4gKChjb3VudCA8IGJlZ2luICsgbGVuIC0gb2ZmKSA/IGNvdW50IDogYmVnaW4gKyBsZW4gLSBvZmYpOworCXNlcV9wcmludGYobSwgInNlcmluZm86MS4wIGRyaXZlcjolc1xuIiwgc2VyaWFsX3ZlcnNpb24pOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJzX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnNfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnNfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSByc19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgdHR5X29wZXJhdGlvbnMgc2VyaWFsX29wcyA9IHsKIAkub3BlbiA9IHJzX29wZW4sCkBAIC0yMDMsNyArMjA2LDcgQEAKIAkuY2hhcnNfaW5fYnVmZmVyID0gcnNfY2hhcnNfaW5fYnVmZmVyLAogCS5oYW5ndXAgPSByc19oYW5ndXAsCiAJLndhaXRfdW50aWxfc2VudCA9IHJzX3dhaXRfdW50aWxfc2VudCwKLQkucmVhZF9wcm9jID0gcnNfcmVhZF9wcm9jCisJLnByb2NfZm9wcyA9ICZyc19wcm9jX2ZvcHMsCiB9OwogCiBpbnQgX19pbml0IHJzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9NYWtlZmlsZSBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmU2MTk0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorIyBNYWtlZmlsZSBmb3IgdGhlIFN0cmV0Y2ggUzYxMDUgZXZhbCBib2FyZAorCitvYmoteQkJOj0gc2V0dXAubyBkZXZpY2UubwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L2RldmljZS5jIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L2RldmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YjA4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvZGV2aWNlLmMKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIHM2MTA1IHBsYXRmb3JtIGRldmljZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgZW1saXggR21iSAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKworI2luY2x1ZGUgPHZhcmlhbnQvaGFyZHdhcmUuaD4KKworI2RlZmluZSBVQVJUX0lOVE5VTQkJNAorCitzdGF0aWMgY29uc3Qgc2lnbmVkIGNoYXIgdWFydF9pcnFfbWFwcGluZ3NbXSA9IHsKKwlTNl9JTlRDX1VBUlQoMCksCisJUzZfSU5UQ19VQVJUKDEpLAorCS0xLAorfTsKKworY29uc3Qgc2lnbmVkIGNoYXIgKnBsYXRmb3JtX2lycV9tYXBwaW5nc1tOUl9JUlFTXSA9IHsKKwlbVUFSVF9JTlROVU1dID0gdWFydF9pcnFfbWFwcGluZ3MsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhW10gPSB7CisJeworCQkubWVtYmFzZSA9ICh2b2lkICopUzZfUkVHX1VBUlQgKyAweDAwMDAsCisJCS5tYXBiYXNlID0gUzZfUkVHX1VBUlQgKyAweDAwMDAsCisJCS5pcnEgPSBVQVJUX0lOVE5VTSwKKwkJLnVhcnRjbGsgPSBTNl9TQ0xLLAorCQkucmVnc2hpZnQgPSAyLAorCQkuaW90eXBlID0gU0VSSUFMX0lPX01FTSwKKwkJLmZsYWdzID0gQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVCwKKwl9LAorCXsKKwkJLm1lbWJhc2UgPSAodm9pZCAqKVM2X1JFR19VQVJUICsgMHgxMDAwLAorCQkubWFwYmFzZSA9IFM2X1JFR19VQVJUICsgMHgxMDAwLAorCQkuaXJxID0gVUFSVF9JTlROVU0sCisJCS51YXJ0Y2xrID0gUzZfU0NMSywKKwkJLnJlZ3NoaWZ0ID0gMiwKKwkJLmlvdHlwZSA9IFNFUklBTF9JT19NRU0sCisJCS5mbGFncyA9IEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBBU1lOQ19TS0lQX1RFU1QsCisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwbGF0Zm9ybV9kZXZpY2VzW10gPSB7CisJeworCQkubmFtZSA9ICJzZXJpYWw4MjUwIiwKKwkJLmlkID0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAorCQkuZGV2ID0geworCQkJLnBsYXRmb3JtX2RhdGEgPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZGV2aWNlX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpOyBpKyspCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGxhdGZvcm1fZGV2aWNlc1tpXSk7CisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsX3N5bmMoZGV2aWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L2luY2x1ZGUvcGxhdGZvcm0vZ3Bpby5oIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L2luY2x1ZGUvcGxhdGZvcm0vZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMTFhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvaW5jbHVkZS9wbGF0Zm9ybS9ncGlvLmgKQEAgLTAsMCArMSwyNyBAQAorI2lmbmRlZiBfX0FTTV9YVEVOU0FfUzYxMDVfR1BJT19ICisjZGVmaW5lIF9fQVNNX1hURU5TQV9TNjEwNV9HUElPX0gKKworI2RlZmluZSBHUElPX0JQX1RFTVBfQUxBUk0JMAorI2RlZmluZSBHUElPX1BCX1JFU0VUX0lOCTEKKyNkZWZpbmUgR1BJT19FWFBfSVJRCQkyCisjZGVmaW5lIEdQSU9fVFJJR0dFUl9JUlEJMworI2RlZmluZSBHUElPX1JUQ19JUlEJCTQKKyNkZWZpbmUgR1BJT19QSFlfSVJRCQk1CisjZGVmaW5lIEdQSU9fSU1BR0VSX1JFU0VUCTYKKyNkZWZpbmUgR1BJT19TRF9JUlEJCTcKKyNkZWZpbmUgR1BJT19NSU5JX0JPT1RfSU5ICTgKKyNkZWZpbmUgR1BJT19CT0FSRF9SRVNFVAk5CisjZGVmaW5lIEdQSU9fRVhQX1BSRVNFTlQJMTAKKyNkZWZpbmUgR1BJT19MRUQxX05HUkVFTgkxMgorI2RlZmluZSBHUElPX0xFRDFfUkVECQkxMworI2RlZmluZSBHUElPX0xFRDBfTkdSRUVOCTE0CisjZGVmaW5lIEdQSU9fTEVEMF9OUkVECQkxNQorI2RlZmluZSBHUElPX1NQSV9DUzAJCTE2CisjZGVmaW5lIEdQSU9fU1BJX0NTMQkJMTcKKyNkZWZpbmUgR1BJT19TUElfQ1MzCQkxOQorI2RlZmluZSBHUElPX1NQSV9DUzQJCTIwCisjZGVmaW5lIEdQSU9fU0RfV1AJCTIxCisjZGVmaW5lIEdQSU9fQlBfUkVTRVQJCTIyCisjZGVmaW5lIEdQSU9fQUxBUk1fT1VUCQkyMworCisjZW5kaWYgLyogX19BU01fWFRFTlNBX1M2MTA1X0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3M2MTA1L2luY2x1ZGUvcGxhdGZvcm0vaGFyZHdhcmUuaCBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9pbmNsdWRlL3BsYXRmb3JtL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYyOGVmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9pbmNsdWRlL3BsYXRmb3JtL2hhcmR3YXJlLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfX1hURU5TQV9TNjEwNV9IQVJEV0FSRV9ICisjZGVmaW5lIF9fWFRFTlNBX1M2MTA1X0hBUkRXQVJFX0gKKworI2RlZmluZSBQTEFURk9STV9ERUZBVUxUX01FTV9TVEFSVAkweDQwMDAwMDAwCisjZGVmaW5lIFBMQVRGT1JNX0RFRkFVTFRfTUVNX1NJWkUJMHgwODAwMDAwMAorCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJCTAKKworI2RlZmluZSBLRVJORUxPRkZTRVQJCQkoUExBVEZPUk1fREVGQVVMVF9NRU1fU1RBUlQgKyAweDEwMDApCisKKyNlbmRpZiAvKiBfX1hURU5TQV9TNjEwNV9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvaW5jbHVkZS9wbGF0Zm9ybS9zZXJpYWwuaCBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9pbmNsdWRlL3BsYXRmb3JtL3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YTc3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvaW5jbHVkZS9wbGF0Zm9ybS9zZXJpYWwuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19BU01fWFRFTlNBX1M2MTA1X1NFUklBTF9ICisjZGVmaW5lIF9fQVNNX1hURU5TQV9TNjEwNV9TRVJJQUxfSAorCisjaW5jbHVkZSA8dmFyaWFudC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIEJBU0VfQkFVRCAoUzZfU0NMSyAvIDE2KQorCisjZW5kaWYgLyogX19BU01fWFRFTlNBX1M2MTA1X1NFUklBTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvc2V0dXAuYyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9zNjEwNS9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDQxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvczYxMDUvc2V0dXAuYwpAQCAtMCwwICsxLDYxIEBACisvKgorICogczYxMDUgY29udHJvbCByb3V0aW5lcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBlbWxpeCBHbWJICisgKi8KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPGFzbS9ib290cGFyYW0uaD4KKworI2luY2x1ZGUgPHZhcmlhbnQvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9ncGlvLmg+CisKK3ZvaWQgcGxhdGZvcm1faGFsdCh2b2lkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJd2hpbGUgKDEpCisJCTsKK30KKwordm9pZCBwbGF0Zm9ybV9wb3dlcl9vZmYodm9pZCkKK3sKKwlwbGF0Zm9ybV9oYWx0KCk7Cit9CisKK3ZvaWQgcGxhdGZvcm1fcmVzdGFydCh2b2lkKQoreworCXBsYXRmb3JtX2hhbHQoKTsKK30KKwordm9pZCBfX2luaXQgcGxhdGZvcm1fc2V0dXAoY2hhciAqKmNtZGxpbmUpCit7CisJdW5zaWduZWQgbG9uZyByZWc7CisKKwlyZWcgPSByZWFkbChTNl9SRUdfR1JFRzEgKyBTNl9HUkVHMV9DTEtHQVRFKTsKKwlyZWcgJj0gfigxIDw8IFM2X0dSRUcxX0JMT0NLX1NCKTsKKwl3cml0ZWwocmVnLCBTNl9SRUdfR1JFRzEgKyBTNl9HUkVHMV9DTEtHQVRFKTsKKworCXJlZyA9IHJlYWRsKFM2X1JFR19HUkVHMSArIFM2X0dSRUcxX0JMT0NLRU5BKTsKKwlyZWcgfD0gMSA8PCBTNl9HUkVHMV9CTE9DS19TQjsKKwl3cml0ZWwocmVnLCBTNl9SRUdfR1JFRzEgKyBTNl9HUkVHMV9CTE9DS0VOQSk7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlM2MTA1IG9uIFN0cmV0Y2ggUzYwMDAgLSAiCisJCSJDb3B5cmlnaHQgKEMpIDIwMDkgZW1saXggR21iSCA8aW5mb0BlbWxpeC5jb20+XG4iKTsKK30KKwordm9pZCBfX2luaXQgcGxhdGZvcm1faW5pdChicF90YWdfdCAqZmlyc3QpCit7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fTEVEMV9OR1JFRU4sICJsZWQxX2dyZWVuIik7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fTEVEMV9SRUQsICJsZWQxX3JlZCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0xFRDFfTkdSRUVOLCAxKTsKK30KKwordm9pZCBwbGF0Zm9ybV9oZWFydGJlYXQodm9pZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IGM7CisKKwlpZiAoISgrK2MgJiAweDRGKSkKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTEVEMV9SRUQsICEoYyAmIDB4MTApKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy94dDIwMDAvaW5jbHVkZS9wbGF0Zm9ybS9oYXJkd2FyZS5oIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3h0MjAwMC9pbmNsdWRlL3BsYXRmb3JtL2hhcmR3YXJlLmgKaW5kZXggNDE0NTlhZC4uODg2ZWYxNSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3h0MjAwMC9pbmNsdWRlL3BsYXRmb3JtL2hhcmR3YXJlLmgKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm1zL3h0MjAwMC9pbmNsdWRlL3BsYXRmb3JtL2hhcmR3YXJlLmgKQEAgLTE2LDcgKzE2LDYgQEAKICNkZWZpbmUgX1hURU5TQV9YVDIwMDBfSEFSRFdBUkVfSAogCiAjaW5jbHVkZSA8dmFyaWFudC9jb3JlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIAogICogTWVtb3J5IGNvbmZpZ3VyYXRpb24uCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9NYWtlZmlsZSBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYjM5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKKyMgczYwMDAgTWFrZWZpbGUKKworb2JqLXkJCSs9IGlycS5vIGdwaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvZ3Bpby5jIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYThkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9ncGlvLmMKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIHM2MDAwIGdwaW8gZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IGVtbGl4IEdtYkgKKyAqIEF1dGhvcnM6CU9za2FyIFNjaGlybWVyIDxvc0BlbWxpeC5jb20+CisgKgkJSm9oYW5uZXMgV2VpbmVyIDxqd0BlbWxpeC5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDx2YXJpYW50L2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgUzZfR1BJT19EQVRBCQkweDAwMAorI2RlZmluZSBTNl9HUElPX0lTCQkweDQwNAorI2RlZmluZSBTNl9HUElPX0lCRQkJMHg0MDgKKyNkZWZpbmUgUzZfR1BJT19JRVYJCTB4NDBDCisjZGVmaW5lIFM2X0dQSU9fSUUJCTB4NDEwCisjZGVmaW5lIFM2X0dQSU9fUklTCQkweDQxNAorI2RlZmluZSBTNl9HUElPX01JUwkJMHg0MTgKKyNkZWZpbmUgUzZfR1BJT19JQwkJMHg0MUMKKyNkZWZpbmUgUzZfR1BJT19BRlNFTAkJMHg0MjAKKyNkZWZpbmUgUzZfR1BJT19ESVIJCTB4ODAwCisjZGVmaW5lIFM2X0dQSU9fQkFOSyhucikJKChucikgKiAweDEwMDApCisjZGVmaW5lIFM2X0dQSU9fTUFTSyhucikJKDQgPDwgKG5yKSkKKyNkZWZpbmUgUzZfR1BJT19PRkZTRVQobnIpIFwKKwkJKFM2X0dQSU9fQkFOSygobnIpID4+IDMpICsgUzZfR1BJT19NQVNLKChucikgJiA3KSkKKworc3RhdGljIGludCBkaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZikKK3sKKwl3cml0ZWIoMCwgUzZfUkVHX0dQSU8gKyBTNl9HUElPX0RJUiArIFM2X0dQSU9fT0ZGU0VUKG9mZikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXJldHVybiByZWFkYihTNl9SRUdfR1BJTyArIFM2X0dQSU9fREFUQSArIFM2X0dQSU9fT0ZGU0VUKG9mZikpOworfQorCitzdGF0aWMgaW50IGRpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZiwgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCByZWwgPSBTNl9HUElPX09GRlNFVChvZmYpOworCXdyaXRlYih+MCwgUzZfUkVHX0dQSU8gKyBTNl9HUElPX0RJUiArIHJlbCk7CisJd3JpdGViKHZhbCA/IH4wIDogMCwgUzZfUkVHX0dQSU8gKyBTNl9HUElPX0RBVEEgKyByZWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZiwgaW50IHZhbCkKK3sKKwl3cml0ZWIodmFsID8gfjAgOiAwLCBTNl9SRUdfR1BJTyArIFM2X0dQSU9fREFUQSArIFM2X0dQSU9fT0ZGU0VUKG9mZikpOworfQorCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCBncGlvY2hpcCA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZGlyZWN0aW9uX2lucHV0ID0gZGlyZWN0aW9uX2lucHV0LAorCS5nZXQgPSBnZXQsCisJLmRpcmVjdGlvbl9vdXRwdXQgPSBkaXJlY3Rpb25fb3V0cHV0LAorCS5zZXQgPSBzZXQsCisJLmJhc2UgPSAwLAorCS5uZ3BpbyA9IDI0LAorCS5jYW5fc2xlZXAgPSAwLCAvKiBubyBibG9ja2luZyBpbyBuZWVkZWQgKi8KKwkuZXhwb3J0ZWQgPSAwLCAvKiBubyBleHBvcnRpbmcgdG8gdXNlcnNwYWNlICovCit9OworCitzdGF0aWMgaW50IGdwaW9faW5pdCh2b2lkKQoreworCXJldHVybiBncGlvY2hpcF9hZGQoJmdwaW9jaGlwKTsKK30KK2RldmljZV9pbml0Y2FsbChncGlvX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L2NvcmUuaCBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYwMDc5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC9jb3JlLmgKQEAgLTAsMCArMSw0MzEgQEAKKy8qCisgKiBYdGVuc2EgcHJvY2Vzc29yIGNvcmUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCBUZW5zaWxpY2EgSW5jLgorICovCisKKyNpZm5kZWYgX1hURU5TQV9DT1JFX0NPTkZJR1VSQVRJT05fSAorI2RlZmluZSBfWFRFTlNBX0NPUkVfQ09ORklHVVJBVElPTl9ICisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwkgICAgUGFyYW1ldGVycyBVc2VmdWwgZm9yIEFueSBDb2RlLCBVU0VSIG9yIFBSSVZJTEVHRUQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogIE5vdGU6ICBNYWNyb3Mgb2YgdGhlIGZvcm0gWENIQUxfSEFWRV8qKiogaGF2ZSBhIHZhbHVlIG9mIDEgaWYgdGhlIG9wdGlvbiBpcworICogIGNvbmZpZ3VyZWQsIGFuZCBhIHZhbHVlIG9mIDAgb3RoZXJ3aXNlLiAgVGhlc2UgbWFjcm9zIGFyZSBhbHdheXMgZGVmaW5lZC4KKyAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCUlTQQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9IQVZFX0JFCQkJMAkvKiBiaWctZW5kaWFuIGJ5dGUgb3JkZXJpbmcgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9XSU5ET1dFRAkJMQkvKiB3aW5kb3dlZCByZWdpc3RlcnMgb3B0aW9uICovCisjZGVmaW5lIFhDSEFMX05VTV9BUkVHUwkJCTY0CS8qIG51bSBvZiBwaHlzaWNhbCBhZGRyIHJlZ3MgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0FSRUdTX0xPRzIJCTYJLyogbG9nMihYQ0hBTF9OVU1fQVJFR1MpICovCisjZGVmaW5lIFhDSEFMX01BWF9JTlNUUlVDVElPTl9TSVpFCTgJLyogbWF4IGluc3RyIGJ5dGVzICgzLi44KSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0RFQlVHCQkxCS8qIGRlYnVnIG9wdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0RFTlNJVFkJCTEJLyogMTYtYml0IGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0xPT1BTCQkxCS8qIHplcm8tb3ZlcmhlYWQgbG9vcHMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9OU0EJCQkxCS8qIE5TQS9OU0FVIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX01JTk1BWAkJMQkvKiBNSU4vTUFYIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1NFWFQJCQkxCS8qIFNFWFQgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9DTEFNUFMJCTEJLyogQ0xBTVBTIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTVVMMTYJCTEJLyogTVVMMTZTL01VTDE2VSBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9NVUwzMgkJMQkvKiBNVUxMIGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfTVVMMzJfSElHSAkJMQkvKiBNVUxVSC9NVUxTSCBpbnN0cnVjdGlvbnMgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9ESVYzMgkJMAkvKiBRVU9TL1FVT1UvUkVNUy9SRU1VIGluc3RydWN0aW9ucyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0wzMlIJCQkxCS8qIEwzMlIgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9BQlNPTFVURV9MSVRFUkFMUwkxCS8qIG5vbi1QQy1yZWwgKGV4dGVuZGVkKSBMMzJSICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQ09OU1QxNgkJMAkvKiBDT05TVDE2IGluc3RydWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQUREWAkJCTEJLyogQUREWCMvU1VCWCMgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFhDSEFMX0hBVkVfV0lERV9CUkFOQ0hFUwkwCS8qIEIqLlcxOCBvciBCKi5XMTUgaW5zdHIncyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1BSRURJQ1RFRF9CUkFOQ0hFUwkwCS8qIEJbRVEvRVFaL05FL05FWl1UIGluc3RyJ3MgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9DQUxMNEFORDEyCQkxCS8qIChvYnNvbGV0ZSBvcHRpb24pICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQUJTCQkJMQkvKiBBQlMgaW5zdHJ1Y3Rpb24gKi8KKy8qI2RlZmluZSBYQ0hBTF9IQVZFX1BPUEMJCTAqLwkvKiBQT1BDIGluc3RydWN0aW9uICovCisvKiNkZWZpbmUgWENIQUxfSEFWRV9DUkMJCTAqLwkvKiBDUkMgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9SRUxFQVNFX1NZTkMJCTAJLyogTDMyQUkvUzMyUkkgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIFhDSEFMX0hBVkVfUzMyQzFJCQkwCS8qIFMzMkMxSSBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1NQRUNVTEFUSU9OCQkwCS8qIHNwZWN1bGF0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfRlVMTF9SRVNFVAkJMAkvKiBhbGwgcmVncy9zdGF0ZSByZXNldCAqLworI2RlZmluZSBYQ0hBTF9OVU1fQ09OVEVYVFMJCTEJLyogKi8KKyNkZWZpbmUgWENIQUxfTlVNX01JU0NfUkVHUwkJNAkvKiBudW0gb2Ygc2NyYXRjaCByZWdzICgwLi40KSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1RBUF9NQVNURVIJCTAJLyogSlRBRyBUQVAgY29udHJvbCBpbnN0cidzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfUFJJRAkJCTAJLyogcHJvY2Vzc29yIElEIHJlZ2lzdGVyICovCisjZGVmaW5lIFhDSEFMX0hBVkVfVEhSRUFEUFRSCQkwCS8qIFRIUkVBRFBUUiByZWdpc3RlciAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0JPT0xFQU5TCQkxCS8qIGJvb2xlYW4gcmVnaXN0ZXJzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfQ1AJCQkxCS8qIENQRU5BQkxFIHJlZyAoY29wcm9jZXNzb3IpICovCisjZGVmaW5lIFhDSEFMX0NQX01BWENGRwkJCTgJLyogbWF4IGFsbG93ZWQgY3AgaWQgcGx1cyBvbmUgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9NQUMxNgkJMAkvKiBNQUMxNiBwYWNrYWdlICovCisjZGVmaW5lIFhDSEFMX0hBVkVfVkVDVE9SRlBVMjAwNQkwCS8qIHZlY3RvciBmbG9hdGluZy1wb2ludCBwa2cgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9GUAkJCTEJLyogZmxvYXRpbmcgcG9pbnQgcGtnICovCisjZGVmaW5lIFhDSEFMX0hBVkVfVkVDVFJBMQkJMAkvKiBWZWN0cmEgSSAgcGtnICovCisjZGVmaW5lIFhDSEFMX0hBVkVfVkVDVFJBTFgJCTAJLyogVmVjdHJhIExYIHBrZyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0hJRkkyCQkwCS8qIEhpRmkyIEF1ZGlvIEVuZ2luZSBwa2cgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlNSVNDCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFhDSEFMX05VTV9XUklURUJVRkZFUl9FTlRSSUVTCTgJLyogc2l6ZSBvZiB3cml0ZSBidWZmZXIgKi8KKyNkZWZpbmUgWENIQUxfSU5TVF9GRVRDSF9XSURUSAkJOAkvKiBpbnN0ci1mZXRjaCB3aWR0aCBpbiBieXRlcyAqLworI2RlZmluZSBYQ0hBTF9EQVRBX1dJRFRICQkxNgkvKiBkYXRhIHdpZHRoIGluIGJ5dGVzICovCisvKiAgSW4gVDEwNTAsIGFwcGxpZXMgdG8gc2VsZWN0ZWQgY29yZSBsb2FkIGFuZCBzdG9yZSBpbnN0cnVjdGlvbnMgKHNlZSBJU0EpOiAqLworI2RlZmluZSBYQ0hBTF9VTkFMSUdORURfTE9BRF9FWENFUFRJT04JMQkvKiB1bmFsaWduZWQgbG9hZHMgY2F1c2UgZXhjLiAqLworI2RlZmluZSBYQ0hBTF9VTkFMSUdORURfU1RPUkVfRVhDRVBUSU9OCTEJLyogdW5hbGlnbmVkIHN0b3JlcyBjYXVzZSBleGMuKi8KKworI2RlZmluZSBYQ0hBTF9TV19WRVJTSU9OCQk3MDEwMDEJLyogc3cgdmVyc2lvbiBvZiB0aGlzIGhlYWRlciAqLworCisjZGVmaW5lIFhDSEFMX0NPUkVfSUQJCQkic3RyZXRjaF9iYWxpIgkvKiBhbHBoYW51bSBjb3JlIG5hbWUKKwkJCQkJCSAgIChDb3JlSUQpIHNldCBpbiB0aGUgWHRlbnNhCisJCQkJCQkgICBQcm9jZXNzb3IgR2VuZXJhdG9yICovCisKKyNkZWZpbmUgWENIQUxfQlVJTERfVU5JUVVFX0lECQkweDAwMDEwNEI5CS8qIDIyLWJpdCBzdyBidWlsZCBJRCAqLworCisvKgorICogIFRoZXNlIGRlZmluaXRpb25zIGRlc2NyaWJlIHRoZSBoYXJkd2FyZSB0YXJnZXRlZCBieSB0aGlzIHNvZnR3YXJlLgorICovCisjZGVmaW5lIFhDSEFMX0hXX0NPTkZJR0lEMAkJMHhDMkYzRjlGRQkvKiBDb25maWdJRCBoaSAzMiBiaXRzKi8KKyNkZWZpbmUgWENIQUxfSFdfQ09ORklHSUQxCQkweDA1NDEwNEI5CS8qIENvbmZpZ0lEIGxvIDMyIGJpdHMqLworI2RlZmluZSBYQ0hBTF9IV19WRVJTSU9OX05BTUUJCSJMWDEuMC4yIgkvKiBmdWxsIHZlcnNpb24gbmFtZSAqLworI2RlZmluZSBYQ0hBTF9IV19WRVJTSU9OX01BSk9SCQkyMTAwCS8qIG1ham9yIHZlciMgb2YgdGFyZ2V0ZWQgaHcgKi8KKyNkZWZpbmUgWENIQUxfSFdfVkVSU0lPTl9NSU5PUgkJMgkvKiBtaW5vciB2ZXIjIG9mIHRhcmdldGVkIGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX1ZFUlNJT04JCTIxMDAwMgkvKiBtYWpvcioxMDArbWlub3IgKi8KKyNkZWZpbmUgWENIQUxfSFdfUkVMX0xYMQkJMQorI2RlZmluZSBYQ0hBTF9IV19SRUxfTFgxXzAJCTEKKyNkZWZpbmUgWENIQUxfSFdfUkVMX0xYMV8wXzIJCTEKKyNkZWZpbmUgWENIQUxfSFdfQ09ORklHSURfUkVMSUFCTEUJMQorLyogIElmIHNvZnR3YXJlIHRhcmdldHMgYSAqcmFuZ2UqIG9mIGhhcmR3YXJlIHZlcnNpb25zLCB0aGVzZSBhcmUgdGhlIGJvdW5kczogKi8KKyNkZWZpbmUgWENIQUxfSFdfTUlOX1ZFUlNJT05fTUFKT1IJMjEwMAkvKiBtYWpvciB2IG9mIGVhcmxpZXN0IHRndCBodyAqLworI2RlZmluZSBYQ0hBTF9IV19NSU5fVkVSU0lPTl9NSU5PUgkyCS8qIG1pbm9yIHYgb2YgZWFybGllc3QgdGd0IGh3ICovCisjZGVmaW5lIFhDSEFMX0hXX01JTl9WRVJTSU9OCQkyMTAwMDIJLyogZWFybGllc3QgdGFyZ2V0ZWQgaHcgKi8KKyNkZWZpbmUgWENIQUxfSFdfTUFYX1ZFUlNJT05fTUFKT1IJMjEwMAkvKiBtYWpvciB2IG9mIGxhdGVzdCB0Z3QgaHcgKi8KKyNkZWZpbmUgWENIQUxfSFdfTUFYX1ZFUlNJT05fTUlOT1IJMgkvKiBtaW5vciB2IG9mIGxhdGVzdCB0Z3QgaHcgKi8KKyNkZWZpbmUgWENIQUxfSFdfTUFYX1ZFUlNJT04JCTIxMDAwMgkvKiBsYXRlc3QgdGFyZ2V0ZWQgaHcgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQlDQUNIRQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9JQ0FDSEVfTElORVNJWkUJCTE2CS8qIEktY2FjaGUgbGluZSBzaXplIGluIGJ5dGVzICovCisjZGVmaW5lIFhDSEFMX0RDQUNIRV9MSU5FU0laRQkJMTYJLyogRC1jYWNoZSBsaW5lIHNpemUgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgWENIQUxfSUNBQ0hFX0xJTkVXSURUSAkJNAkvKiBsb2cyKEkgbGluZSBzaXplIGluIGJ5dGVzKSAqLworI2RlZmluZSBYQ0hBTF9EQ0FDSEVfTElORVdJRFRICQk0CS8qIGxvZzIoRCBsaW5lIHNpemUgaW4gYnl0ZXMpICovCisKKyNkZWZpbmUgWENIQUxfSUNBQ0hFX1NJWkUJCTMyNzY4CS8qIEktY2FjaGUgc2l6ZSBpbiBieXRlcyBvciAwICovCisjZGVmaW5lIFhDSEFMX0RDQUNIRV9TSVpFCQkzMjc2OAkvKiBELWNhY2hlIHNpemUgaW4gYnl0ZXMgb3IgMCAqLworCisjZGVmaW5lIFhDSEFMX0RDQUNIRV9JU19XUklURUJBQ0sJMQkvKiB3cml0ZWJhY2sgZmVhdHVyZSAqLworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIFBhcmFtZXRlcnMgVXNlZnVsIGZvciBQUklWSUxFR0VEIChTdXBlcnZpc29yeSBvciBOb24tVmlydHVhbGl6ZWQpIENvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgWFRFTlNBX0hBTF9OT05fUFJJVklMRUdFRF9PTkxZCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJCUNBQ0hFCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFhDSEFMX0hBVkVfUElGCQkJMQkvKiBhbnkgb3V0Ym91bmQgUElGIHByZXNlbnQgKi8KKworLyogIElmIHByZXNlbnQsIGNhY2hlIHNpemUgaW4gYnl0ZXMgPT0gKHdheXMgKiAyXihsaW5ld2lkdGggKyBzZXR3aWR0aCkpLiAgKi8KKworLyogIE51bWJlciBvZiBjYWNoZSBzZXRzIGluIGxvZzIobGluZXMgcGVyIHdheSk6ICAqLworI2RlZmluZSBYQ0hBTF9JQ0FDSEVfU0VUV0lEVEgJCTkKKyNkZWZpbmUgWENIQUxfRENBQ0hFX1NFVFdJRFRICQkxMAorCisvKiAgQ2FjaGUgc2V0IGFzc29jaWF0aXZpdHkgKG51bWJlciBvZiB3YXlzKTogICovCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9XQVlTCQk0CisjZGVmaW5lIFhDSEFMX0RDQUNIRV9XQVlTCQkyCisKKy8qICBDYWNoZSBmZWF0dXJlczogICovCisjZGVmaW5lIFhDSEFMX0lDQUNIRV9MSU5FX0xPQ0tBQkxFCTEKKyNkZWZpbmUgWENIQUxfRENBQ0hFX0xJTkVfTE9DS0FCTEUJMAorI2RlZmluZSBYQ0hBTF9JQ0FDSEVfRUNDX1BBUklUWQkJMAorI2RlZmluZSBYQ0hBTF9EQ0FDSEVfRUNDX1BBUklUWQkJMAorCisvKiAgTnVtYmVyIG9mIGVuY29kZWQgY2FjaGUgYXR0ciBiaXRzIChzZWUgPHh0ZW5zYS9oYWwuaD4gZm9yIGRlY29kZWQgYml0cyk6ICAqLworI2RlZmluZSBYQ0hBTF9DQV9CSVRTCQkJNAorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJSU5URVJOQUwgSS9EIFJBTS9ST01zIGFuZCBYTE1JCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFhDSEFMX05VTV9JTlNUUk9NCQkwCS8qIG51bWJlciBvZiBjb3JlIGluc3RyLiBST01zICovCisjZGVmaW5lIFhDSEFMX05VTV9JTlNUUkFNCQkwCS8qIG51bWJlciBvZiBjb3JlIGluc3RyLiBSQU1zICovCisjZGVmaW5lIFhDSEFMX05VTV9EQVRBUk9NCQkwCS8qIG51bWJlciBvZiBjb3JlIGRhdGEgUk9NcyAqLworI2RlZmluZSBYQ0hBTF9OVU1fREFUQVJBTQkJMQkvKiBudW1iZXIgb2YgY29yZSBkYXRhIFJBTXMgKi8KKyNkZWZpbmUgWENIQUxfTlVNX1VSQU0JCQkwCS8qIG51bWJlciBvZiBjb3JlIHVuaWZpZWQgUkFNcyovCisjZGVmaW5lIFhDSEFMX05VTV9YTE1JCQkJMQkvKiBudW1iZXIgb2YgY29yZSBYTE1JIHBvcnRzICovCisKKy8qICBEYXRhIFJBTSAwOiAgKi8KKyNkZWZpbmUgWENIQUxfREFUQVJBTTBfVkFERFIJCTB4M0ZGRjAwMDAKKyNkZWZpbmUgWENIQUxfREFUQVJBTTBfUEFERFIJCTB4M0ZGRjAwMDAKKyNkZWZpbmUgWENIQUxfREFUQVJBTTBfU0laRQkJNjU1MzYKKyNkZWZpbmUgWENIQUxfREFUQVJBTTBfRUNDX1BBUklUWQkwCisKKy8qICBYTE1JIFBvcnQgMDogICovCisjZGVmaW5lIFhDSEFMX1hMTUkwX1ZBRERSCQkweDM3RjgwMDAwCisjZGVmaW5lIFhDSEFMX1hMTUkwX1BBRERSCQkweDM3RjgwMDAwCisjZGVmaW5lIFhDSEFMX1hMTUkwX1NJWkUJCTI2MjE0NAorI2RlZmluZSBYQ0hBTF9YTE1JMF9FQ0NfUEFSSVRZCTAKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCUlOVEVSUlVQVFMgYW5kIFRJTUVSUworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBYQ0hBTF9IQVZFX0lOVEVSUlVQVFMJCTEJLyogaW50ZXJydXB0IG9wdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0hJR0hQUklfSU5URVJSVVBUUwkxCS8qIG1lZC9oaWdoLXByaS4gaW50ZXJydXB0cyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX05NSQkJCTEJLyogbm9uLW1hc2thYmxlIGludGVycnVwdCAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0NDT1VOVAkJMQkvKiBDQ09VTlQgcmVnLiAodGltZXIgb3B0aW9uKSAqLworI2RlZmluZSBYQ0hBTF9OVU1fVElNRVJTCQkzCS8qIG51bWJlciBvZiBDQ09NUEFSRW4gcmVncyAqLworI2RlZmluZSBYQ0hBTF9OVU1fSU5URVJSVVBUUwkJMjcJLyogbnVtYmVyIG9mIGludGVycnVwdHMgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0lOVEVSUlVQVFNfTE9HMgk1CS8qIGNlaWwobG9nMihOVU1fSU5URVJSVVBUUykpICovCisjZGVmaW5lIFhDSEFMX05VTV9FWFRJTlRFUlJVUFRTCQkyMAkvKiBudW0gb2YgZXh0ZXJuYWwgaW50ZXJydXB0cyAqLworI2RlZmluZSBYQ0hBTF9OVU1fSU5UTEVWRUxTCQk0CS8qIG51bWJlciBvZiBpbnRlcnJ1cHQgbGV2ZWxzCisJCQkJCQkgICAobm90IGluY2x1ZGluZyBsZXZlbCB6ZXJvKSAqLworI2RlZmluZSBYQ0hBTF9FWENNX0xFVkVMCQkxCS8qIGxldmVsIG1hc2tlZCBieSBQUy5FWENNICovCisJLyogKGFsd2F5cyAxIGluIFhFQTE7IGxldmVscyAyIC4uIEVYQ01fTEVWRUwgYXJlICJtZWRpdW0gcHJpb3JpdHkiKSAqLworCisvKiAgTWFza3Mgb2YgaW50ZXJydXB0cyBhdCBlYWNoIGludGVycnVwdCBsZXZlbDogICovCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMMV9NQVNLCQkweDAxRjA3RkZGCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMMl9NQVNLCQkweDAyMDE4MDAwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMM19NQVNLCQkweDA0MDYwMDAwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNF9NQVNLCQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNV9NQVNLCQkweDAwMDgwMDAwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNl9NQVNLCQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMN19NQVNLCQkweDAwMDAwMDAwCisKKy8qICBNYXNrcyBvZiBpbnRlcnJ1cHRzIGF0IGVhY2ggcmFuZ2UgMS4ubiBvZiBpbnRlcnJ1cHQgbGV2ZWxzOiAgKi8KKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwxX0FOREJFTE9XX01BU0sJMHgwMUYwN0ZGRgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDJfQU5EQkVMT1dfTUFTSwkweDAzRjFGRkZGCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMM19BTkRCRUxPV19NQVNLCTB4MDdGN0ZGRkYKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw0X0FOREJFTE9XX01BU0sJMHgwN0Y3RkZGRgorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDVfQU5EQkVMT1dfTUFTSwkweDA3RkZGRkZGCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNl9BTkRCRUxPV19NQVNLCTB4MDdGRkZGRkYKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw3X0FOREJFTE9XX01BU0sJMHgwN0ZGRkZGRgorCisvKiAgTGV2ZWwgb2YgZWFjaCBpbnRlcnJ1cHQ6ICAqLworI2RlZmluZSBYQ0hBTF9JTlQwX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDFfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UMl9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQzX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDRfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UNV9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQ2X0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDdfTEVWRUwJCTEKKyNkZWZpbmUgWENIQUxfSU5UOF9MRVZFTAkJMQorI2RlZmluZSBYQ0hBTF9JTlQ5X0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDEwX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDExX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDEyX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDEzX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDE0X0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDE1X0xFVkVMCQkyCisjZGVmaW5lIFhDSEFMX0lOVDE2X0xFVkVMCQkyCisjZGVmaW5lIFhDSEFMX0lOVDE3X0xFVkVMCQkzCisjZGVmaW5lIFhDSEFMX0lOVDE4X0xFVkVMCQkzCisjZGVmaW5lIFhDSEFMX0lOVDE5X0xFVkVMCQk1CisjZGVmaW5lIFhDSEFMX0lOVDIwX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDIxX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDIyX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDIzX0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDI0X0xFVkVMCQkxCisjZGVmaW5lIFhDSEFMX0lOVDI1X0xFVkVMCQkyCisjZGVmaW5lIFhDSEFMX0lOVDI2X0xFVkVMCQkzCisjZGVmaW5lIFhDSEFMX0RFQlVHTEVWRUwJCTQJLyogZGVidWcgaW50ZXJydXB0IGxldmVsICovCisjZGVmaW5lIFhDSEFMX0hBVkVfREVCVUdfRVhURVJOX0lOVAkxCS8qIE9DRCBleHRlcm5hbCBkYiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgWENIQUxfTk1JTEVWRUwJCQk1CS8qIE5NSSAibGV2ZWwiIChmb3IgdXNlIHdpdGgKKwkJCQkJCSAgIEVYQ1NBVkUvRVBTL0VQQ19uLCBSRkkgbikgKi8KKworLyogIFR5cGUgb2YgZWFjaCBpbnRlcnJ1cHQ6ICAqLworI2RlZmluZSBYQ0hBTF9JTlQwX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDFfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UMl9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQzX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDRfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UNV9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQ2X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDdfVFlQRSAJWFRIQUxfSU5UVFlQRV9FWFRFUk5fTEVWRUwKKyNkZWZpbmUgWENIQUxfSU5UOF9UWVBFIAlYVEhBTF9JTlRUWVBFX0VYVEVSTl9MRVZFTAorI2RlZmluZSBYQ0hBTF9JTlQ5X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDEwX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDExX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDEyX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDEzX1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDE0X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDE1X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDE2X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDE3X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDE4X1RZUEUgCVhUSEFMX0lOVFRZUEVfRVhURVJOX0xFVkVMCisjZGVmaW5lIFhDSEFMX0lOVDE5X1RZUEUgCVhUSEFMX0lOVFRZUEVfTk1JCisjZGVmaW5lIFhDSEFMX0lOVDIwX1RZUEUgCVhUSEFMX0lOVFRZUEVfU09GVFdBUkUKKyNkZWZpbmUgWENIQUxfSU5UMjFfVFlQRSAJWFRIQUxfSU5UVFlQRV9TT0ZUV0FSRQorI2RlZmluZSBYQ0hBTF9JTlQyMl9UWVBFIAlYVEhBTF9JTlRUWVBFX1NPRlRXQVJFCisjZGVmaW5lIFhDSEFMX0lOVDIzX1RZUEUgCVhUSEFMX0lOVFRZUEVfU09GVFdBUkUKKyNkZWZpbmUgWENIQUxfSU5UMjRfVFlQRSAJWFRIQUxfSU5UVFlQRV9USU1FUgorI2RlZmluZSBYQ0hBTF9JTlQyNV9UWVBFIAlYVEhBTF9JTlRUWVBFX1RJTUVSCisjZGVmaW5lIFhDSEFMX0lOVDI2X1RZUEUgCVhUSEFMX0lOVFRZUEVfVElNRVIKKworLyogIE1hc2tzIG9mIGludGVycnVwdHMgZm9yIGVhY2ggdHlwZSBvZiBpbnRlcnJ1cHQ6ICAqLworI2RlZmluZSBYQ0hBTF9JTlRUWVBFX01BU0tfVU5DT05GSUdVUkVECTB4RjgwMDAwMDAKKyNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLX1NPRlRXQVJFCTB4MDBGMDAwMDAKKyNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLX0VYVEVSTl9FREdFCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLX0VYVEVSTl9MRVZFTAkweDAwMDdGRkZGCisjZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19USU1FUgkweDA3MDAwMDAwCisjZGVmaW5lIFhDSEFMX0lOVFRZUEVfTUFTS19OTUkJCTB4MDAwODAwMDAKKyNkZWZpbmUgWENIQUxfSU5UVFlQRV9NQVNLX1dSSVRFX0VSUk9SCTB4MDAwMDAwMDAKKworLyogIEludGVycnVwdCBudW1iZXJzIGFzc2lnbmVkIHRvIHNwZWNpZmljIGludGVycnVwdCBzb3VyY2VzOiAgKi8KKyNkZWZpbmUgWENIQUxfVElNRVIwX0lOVEVSUlVQVAkJMjQJLyogQ0NPTVBBUkUwICovCisjZGVmaW5lIFhDSEFMX1RJTUVSMV9JTlRFUlJVUFQJCTI1CS8qIENDT01QQVJFMSAqLworI2RlZmluZSBYQ0hBTF9USU1FUjJfSU5URVJSVVBUCQkyNgkvKiBDQ09NUEFSRTIgKi8KKyNkZWZpbmUgWENIQUxfVElNRVIzX0lOVEVSUlVQVAkJWFRIQUxfVElNRVJfVU5DT05GSUdVUkVECisjZGVmaW5lIFhDSEFMX05NSV9JTlRFUlJVUFQJCTE5CS8qIG5vbi1tYXNrYWJsZSBpbnRlcnJ1cHQgKi8KKworLyogIEludGVycnVwdCBudW1iZXJzIGZvciBsZXZlbHMgYXQgd2hpY2ggb25seSBvbmUgaW50ZXJydXB0IGlzIGNvbmZpZ3VyZWQ6ICAqLworI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDVfTlVNCQkxOQorLyogIChUaGVyZSBhcmUgbWFueSBpbnRlcnJ1cHRzIGVhY2ggYXQgbGV2ZWwocykgMSwgMiwgMy4pICAqLworCisKKy8qCisgKiAgRXh0ZXJuYWwgaW50ZXJydXB0IHZlY3RvcnMvbGV2ZWxzLgorICogIFRoZXNlIG1hY3JvcyBkZXNjcmliZSBob3cgWHRlbnNhIHByb2Nlc3NvciBpbnRlcnJ1cHQgbnVtYmVycworICogIChhcyBudW1iZXJlZCBpbnRlcm5hbGx5LCBlZy4gaW4gSU5URVJSVVBUIGFuZCBJTlRFTkFCTEUgcmVnaXN0ZXJzKQorICogIG1hcCB0byBleHRlcm5hbCBCSW50ZXJydXB0PG4+IHBpbnMsIGZvciB0aG9zZSBpbnRlcnJ1cHRzCisgKiAgY29uZmlndXJlZCBhcyBleHRlcm5hbCAobGV2ZWwtdHJpZ2dlcmVkLCBlZGdlLXRyaWdnZXJlZCwgb3IgTk1JKS4KKyAqICBTZWUgdGhlIFh0ZW5zYSBwcm9jZXNzb3IgZGF0YWJvb2sgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiAgQ29yZSBpbnRlcnJ1cHQgbnVtYmVycyBtYXBwZWQgdG8gZWFjaCBFWFRFUk5BTCBpbnRlcnJ1cHQgbnVtYmVyOiAgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UMF9OVU0JCTAJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDFfTlVNCQkxCS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQyX05VTQkJMgkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UM19OVU0JCTMJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDRfTlVNCQk0CS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQ1X05VTQkJNQkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UNl9OVU0JCTYJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDdfTlVNCQk3CS8qIChpbnRsZXZlbCAxKSAqLworI2RlZmluZSBYQ0hBTF9FWFRJTlQ4X05VTQkJOAkvKiAoaW50bGV2ZWwgMSkgKi8KKyNkZWZpbmUgWENIQUxfRVhUSU5UOV9OVU0JCTkJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDEwX05VTQkJMTAJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDExX05VTQkJMTEJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDEyX05VTQkJMTIJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDEzX05VTQkJMTMJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDE0X05VTQkJMTQJLyogKGludGxldmVsIDEpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDE1X05VTQkJMTUJLyogKGludGxldmVsIDIpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDE2X05VTQkJMTYJLyogKGludGxldmVsIDIpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDE3X05VTQkJMTcJLyogKGludGxldmVsIDMpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDE4X05VTQkJMTgJLyogKGludGxldmVsIDMpICovCisjZGVmaW5lIFhDSEFMX0VYVElOVDE5X05VTQkJMTkJLyogKGludGxldmVsIDUpICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQlFWENFUFRJT05TIGFuZCBWRUNUT1JTCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIFhDSEFMX1hFQV9WRVJTSU9OCQkyCS8qIFh0ZW5zYSBFeGNlcHRpb24gQXJjaGl0ZWN0dXJlCisJCQkJCQkgICBudW1iZXI6IDEgPT0gWEVBMSAob2xkKQorCQkJCQkJCSAgIDIgPT0gWEVBMiAobmV3KQorCQkJCQkJCSAgIDAgPT0gWEVBWCAoZXh0ZXJuKSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1hFQTEJCQkwCS8qIEV4Y2VwdGlvbiBBcmNoaXRlY3R1cmUgMSAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1hFQTIJCQkxCS8qIEV4Y2VwdGlvbiBBcmNoaXRlY3R1cmUgMiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1hFQVgJCQkwCS8qIEV4dGVybmFsIEV4Y2VwdGlvbiBBcmNoLiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0VYQ0VQVElPTlMJCTEJLyogZXhjZXB0aW9uIG9wdGlvbiAqLworI2RlZmluZSBYQ0hBTF9IQVZFX01FTV9FQ0NfUEFSSVRZCTAJLyogbG9jYWwgbWVtb3J5IEVDQy9wYXJpdHkgKi8KKyNkZWZpbmUgWENIQUxfSEFWRV9WRUNUT1JfU0VMRUNUCTAJLyogcmVsb2NhdGFibGUgdmVjdG9ycyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX1ZFQ0JBU0UJCTAJLyogcmVsb2NhdGFibGUgdmVjdG9ycyAqLworCisjZGVmaW5lIFhDSEFMX1JFU0VUX1ZFQ09GUwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9SRVNFVF9WRUNUT1JfVkFERFIJMHgzRkZFMDNEMAorI2RlZmluZSBYQ0hBTF9SRVNFVF9WRUNUT1JfUEFERFIJMHgzRkZFMDNEMAorI2RlZmluZSBYQ0hBTF9VU0VSX1ZFQ09GUwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9VU0VSX1ZFQ1RPUl9WQUREUgkJMHg0MDAwMDIyMAorI2RlZmluZSBYQ0hBTF9VU0VSX1ZFQ1RPUl9QQUREUgkJMHg0MDAwMDIyMAorI2RlZmluZSBYQ0hBTF9LRVJORUxfVkVDT0ZTCQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX0tFUk5FTF9WRUNUT1JfVkFERFIJMHg0MDAwMDIwMAorI2RlZmluZSBYQ0hBTF9LRVJORUxfVkVDVE9SX1BBRERSCTB4NDAwMDAyMDAKKyNkZWZpbmUgWENIQUxfRE9VQkxFRVhDX1ZFQ09GUwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9ET1VCTEVFWENfVkVDVE9SX1ZBRERSCTB4NDAwMDAyQTAKKyNkZWZpbmUgWENIQUxfRE9VQkxFRVhDX1ZFQ1RPUl9QQUREUgkweDQwMDAwMkEwCisjZGVmaW5lIFhDSEFMX1dJTkRPV19PRjRfVkVDT0ZTCQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX1dJTkRPV19VRjRfVkVDT0ZTCQkweDAwMDAwMDQwCisjZGVmaW5lIFhDSEFMX1dJTkRPV19PRjhfVkVDT0ZTCQkweDAwMDAwMDgwCisjZGVmaW5lIFhDSEFMX1dJTkRPV19VRjhfVkVDT0ZTCQkweDAwMDAwMEMwCisjZGVmaW5lIFhDSEFMX1dJTkRPV19PRjEyX1ZFQ09GUwkweDAwMDAwMTAwCisjZGVmaW5lIFhDSEFMX1dJTkRPV19VRjEyX1ZFQ09GUwkweDAwMDAwMTQwCisjZGVmaW5lIFhDSEFMX1dJTkRPV19WRUNUT1JTX1ZBRERSCTB4NDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfV0lORE9XX1ZFQ1RPUlNfUEFERFIJMHg0MDAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDJfVkVDT0ZTCQkweDAwMDAwMDAwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMMl9WRUNUT1JfVkFERFIJMHg0MDAwMDI0MAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDJfVkVDVE9SX1BBRERSCTB4NDAwMDAyNDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwzX1ZFQ09GUwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDNfVkVDVE9SX1ZBRERSCTB4NDAwMDAyNjAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUwzX1ZFQ1RPUl9QQUREUgkweDQwMDAwMjYwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNF9WRUNPRlMJCTB4MDAwMDAwMDAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw0X1ZFQ1RPUl9WQUREUgkweDQwMDAwMzkwCisjZGVmaW5lIFhDSEFMX0lOVExFVkVMNF9WRUNUT1JfUEFERFIJMHg0MDAwMDM5MAorI2RlZmluZSBYQ0hBTF9ERUJVR19WRUNPRlMJCVhDSEFMX0lOVExFVkVMNF9WRUNPRlMKKyNkZWZpbmUgWENIQUxfREVCVUdfVkVDVE9SX1ZBRERSCVhDSEFMX0lOVExFVkVMNF9WRUNUT1JfVkFERFIKKyNkZWZpbmUgWENIQUxfREVCVUdfVkVDVE9SX1BBRERSCVhDSEFMX0lOVExFVkVMNF9WRUNUT1JfUEFERFIKKyNkZWZpbmUgWENIQUxfTk1JX1ZFQ09GUwkJMHgwMDAwMDAwMAorI2RlZmluZSBYQ0hBTF9OTUlfVkVDVE9SX1ZBRERSCQkweDQwMDAwM0IwCisjZGVmaW5lIFhDSEFMX05NSV9WRUNUT1JfUEFERFIJCTB4NDAwMDAzQjAKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw1X1ZFQ09GUwkJWENIQUxfTk1JX1ZFQ09GUworI2RlZmluZSBYQ0hBTF9JTlRMRVZFTDVfVkVDVE9SX1ZBRERSCVhDSEFMX05NSV9WRUNUT1JfVkFERFIKKyNkZWZpbmUgWENIQUxfSU5UTEVWRUw1X1ZFQ1RPUl9QQUREUglYQ0hBTF9OTUlfVkVDVE9SX1BBRERSCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJREVCVUcKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgWENIQUxfSEFWRV9PQ0QJCQkxCS8qIE9uQ2hpcERlYnVnIG9wdGlvbiAqLworI2RlZmluZSBYQ0hBTF9OVU1fSUJSRUFLCQkyCS8qIG51bWJlciBvZiBJQlJFQUtuIHJlZ3MgKi8KKyNkZWZpbmUgWENIQUxfTlVNX0RCUkVBSwkJMgkvKiBudW1iZXIgb2YgREJSRUFLbiByZWdzICovCisjZGVmaW5lIFhDSEFMX0hBVkVfT0NEX0RJUl9BUlJBWQkxCS8qIGZhc3RlciBPQ0Qgb3B0aW9uICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJTU1VCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiAgU2VlIGNvcmUtbWF0bWFwLmggaGVhZGVyIGZpbGUgZm9yIG1vcmUgZGV0YWlscy4gICovCisKKyNkZWZpbmUgWENIQUxfSEFWRV9UTEJTCQkJMQkvKiBpbnZlcnNlIG9mIEhBVkVfQ0FDSEVBVFRSICovCisjZGVmaW5lIFhDSEFMX0hBVkVfU1BBTk5JTkdfV0FZCQkxCS8qIG9uZSB3YXkgbWFwcyBJK0QgNEdCIHZhZGRyICovCisjZGVmaW5lIFhDSEFMX0hBVkVfSURFTlRJVFlfTUFQCQkxCS8qIHZhZGRyID09IHBhZGRyIGFsd2F5cyAqLworI2RlZmluZSBYQ0hBTF9IQVZFX0NBQ0hFQVRUUgkJMAkvKiBDQUNIRUFUVFIgcmVnaXN0ZXIgcHJlc2VudCAqLworI2RlZmluZSBYQ0hBTF9IQVZFX01JTUlDX0NBQ0hFQVRUUgkxCS8qIHJlZ2lvbiBwcm90ZWN0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfWExUX0NBQ0hFQVRUUgkwCS8qIHJlZ2lvbiBwcm90LiB3L3RyYW5zbGF0aW9uICovCisjZGVmaW5lIFhDSEFMX0hBVkVfUFRQX01NVQkJMAkvKiBmdWxsIE1NVSAod2l0aCBwYWdlIHRhYmxlCisJCQkJCQkgICBbYXV0b3JlZmlsbF0gYW5kIHByb3RlY3Rpb24pCisJCQkJCQkgICB1c2FibGUgZm9yIGFuIE1NVS1iYXNlZCBPUyAqLworLyogIElmIG5vbmUgb2YgdGhlIGFib3ZlIGxhc3QgNCBhcmUgc2V0LCBpdCdzIGEgY3VzdG9tIFRMQiBjb25maWd1cmF0aW9uLiAgKi8KKworI2RlZmluZSBYQ0hBTF9NTVVfQVNJRF9CSVRTCQkwCS8qIG51bWJlciBvZiBiaXRzIGluIEFTSURzICovCisjZGVmaW5lIFhDSEFMX01NVV9SSU5HUwkJCTEJLyogbnVtYmVyIG9mIHJpbmdzICgxLi40KSAqLworI2RlZmluZSBYQ0hBTF9NTVVfUklOR19CSVRTCQkwCS8qIG51bSBvZiBiaXRzIGluIFJJTkcgZmllbGQgKi8KKworI2VuZGlmIC8qICFYVEVOU0FfSEFMX05PTl9QUklWSUxFR0VEX09OTFkgKi8KKworCisjZW5kaWYgLyogX1hURU5TQV9DT1JFX0NPTkZJR1VSQVRJT05fSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvaGFyZHdhcmUuaCBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOWJhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvaGFyZHdhcmUuaApAQCAtMCwwICsxLDI1OSBAQAorI2lmbmRlZiBfX1hURU5TQV9TNjAwMF9IQVJEV0FSRV9ICisjZGVmaW5lIF9fWFRFTlNBX1M2MDAwX0hBUkRXQVJFX0gKKworI2RlZmluZSBTNl9TQ0xLCQkJMTg0MzIwMAorCisjZGVmaW5lIFM2X01FTV9SRUcgICAgICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgUzZfTUVNX0VGSSAgICAgICAgICAgICAgMHgzM0YwMDAwMAorI2RlZmluZSBTNl9NRU1fUENJRV9EQVRBUkFNMSAgICAweDM0MDAwMDAwCisjZGVmaW5lIFM2X01FTV9YTE1JICAgICAgICAgICAgIDB4MzdGODAwMDAKKyNkZWZpbmUgUzZfTUVNX1BJRl9EQVRBUkFNMSAgICAgMHgzN0ZGQzAwMAorI2RlZmluZSBTNl9NRU1fR01BQyAgICAgICAgICAgICAweDM4MDAwMDAwCisjZGVmaW5lIFM2X01FTV9JMlMgICAgICAgICAgICAgIDB4M0EwMDAwMDAKKyNkZWZpbmUgUzZfTUVNX0VHSUIgICAgICAgICAgICAgMHgzQzAwMDAwMAorI2RlZmluZSBTNl9NRU1fUENJRV9DRkcgICAgICAgICAweDNFMDAwMDAwCisjZGVmaW5lIFM2X01FTV9QSUZfREFUQVJBTSAgICAgIDB4M0ZGRTAwMDAKKyNkZWZpbmUgUzZfTUVNX1hMTUlfREFUQVJBTSAgICAgMHgzRkZGMDAwMAorI2RlZmluZSBTNl9NRU1fRERSICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIFM2X01FTV9QQ0lFX0FQRVIgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgUzZfTUVNX0FVWCAgICAgICAgICAgICAgMHhGMDAwMDAwMAorCisvKiBEZXZpY2UgYWRkcmVzc2VzICovCisKKyNkZWZpbmUgUzZfUkVHX1NDQiAgICAgICAgICAgICAgUzZfTUVNX1JFRworI2RlZmluZSBTNl9SRUdfTkIgICAgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4MTAwMDApCisjZGVmaW5lIFM2X1JFR19MTVNETUEgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHgyMDAwMCkKKyNkZWZpbmUgUzZfUkVHX05JICAgICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweDMwMDAwKQorI2RlZmluZSBTNl9SRUdfTklETUEgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4NDAwMDApCisjZGVmaW5lIFM2X1JFR19OUyAgICAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHg1MDAwMCkKKyNkZWZpbmUgUzZfUkVHX0REUiAgICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweDYwMDAwKQorI2RlZmluZSBTNl9SRUdfR1JFRzEgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4NzAwMDApCisjZGVmaW5lIFM2X1JFR19EUCAgICAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHg4MDAwMCkKKyNkZWZpbmUgUzZfUkVHX0RQRE1BICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweDkwMDAwKQorI2RlZmluZSBTNl9SRUdfRUdJQiAgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4QTAwMDApCisjZGVmaW5lIFM2X1JFR19QQ0lFICAgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHhCMDAwMCkKKyNkZWZpbmUgUzZfUkVHX0kyUyAgICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweEMwMDAwKQorI2RlZmluZSBTNl9SRUdfR01BQyAgICAgICAgICAgICAoUzZfUkVHX1NDQiArIDB4RDAwMDApCisjZGVmaW5lIFM2X1JFR19ISUZETUEgICAgICAgICAgIChTNl9SRUdfU0NCICsgMHhFMDAwMCkKKyNkZWZpbmUgUzZfUkVHX0dSRUcyICAgICAgICAgICAgKFM2X1JFR19TQ0IgKyAweEYwMDAwKQorCisjZGVmaW5lIFM2X1JFR19BUEIgICAgICAgICAgICAgIFM2X1JFR19TQ0IKKyNkZWZpbmUgUzZfUkVHX1VBUlQgICAgICAgICAgICAgKFM2X1JFR19BUEIgKyAweDAwMDApCisjZGVmaW5lIFM2X1JFR19JTlRDICAgICAgICAgICAgIChTNl9SRUdfQVBCICsgMHgyMDAwKQorI2RlZmluZSBTNl9SRUdfU1BJICAgICAgICAgICAgICAoUzZfUkVHX0FQQiArIDB4MzAwMCkKKyNkZWZpbmUgUzZfUkVHX0kyQyAgICAgICAgICAgICAgKFM2X1JFR19BUEIgKyAweDQwMDApCisjZGVmaW5lIFM2X1JFR19HUElPICAgICAgICAgICAgIChTNl9SRUdfQVBCICsgMHg4MDAwKQorCisvKiBHbG9iYWwgcmVnaXN0ZXIgYmxvY2sgKi8KKworI2RlZmluZSBTNl9HUkVHMV9QTExfTE9DS0NMRUFSCTB4MDAwCisjZGVmaW5lIFM2X0dSRUcxX1BMTF9MT0NLX1NZUwkJMAorI2RlZmluZSBTNl9HUkVHMV9QTExfTE9DS19JTwkJMQorI2RlZmluZSBTNl9HUkVHMV9QTExfTE9DS19BSU0JCTIKKyNkZWZpbmUgUzZfR1JFRzFfUExMX0xPQ0tfRFAwCQkzCisjZGVmaW5lIFM2X0dSRUcxX1BMTF9MT0NLX0RQMgkJNAorI2RlZmluZSBTNl9HUkVHMV9QTExfTE9DS19ERFIJCTUKKyNkZWZpbmUgUzZfR1JFRzFfUExMX0xPQ0tTVEFUCTB4MDA0CisjZGVmaW5lIFM2X0dSRUcxX1BMTF9MT0NLU1RBVF9DVVJMT0NLCTAKKyNkZWZpbmUgUzZfR1JFRzFfUExMX0xPQ0tTVEFUX0VWRVJVTkxDSwk4CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTAkJMHgwMTAKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0FJTQkJMAorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfQUlNX0REUjIJCTAKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0FJTV8zMDBNSFoJCTEKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0FJTV8yNDBNSFoJCTIKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0FJTV8yMDBNSFoJCTMKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0FJTV8xNTBNSFoJCTQKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0FJTV8xMjBNSFoJCTUKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0FJTV80ME1IWgkJNgorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfQUlNX1BMTEFJTVJFRgkJNworI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfQUlNX01BU0sJCTcKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0REUgkJOAorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfRERSX0hTCQkJMAorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfRERSXzMzM01IWgkJMQorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfRERSXzI1ME1IWgkJMgorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfRERSXzIwME1IWgkJMworI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfRERSXzE2N01IWgkJNAorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfRERSXzEwME1IWgkJNQorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfRERSXzMzTUhaCQk2CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9ERFJfUExMSU9SRUYJCTcKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0REUl9NQVNLCQk3CisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9HTUFDCQkxNgorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfR01BQ18xMjVNSFoJCTAKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0dNQUNfMjVNSFoJCTEKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0dNQUNfMjUwMEtIWgkJMgorI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfR01BQ19FWFRFUk4JCTMKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0dNQUNfTUFTSwkJMworI2RlZmluZSBTNl9HUkVHMV9QTExTRUxfR01JSQkJMTgKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0dNSUlfMTExTUhaCQkwCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9HTUlJX0lPUkVGCQkxCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9HTUlJX05PTkUJCTIKKyNkZWZpbmUgUzZfR1JFRzFfUExMU0VMX0dNSUlfMTI1TUhaCQkzCisjZGVmaW5lIFM2X0dSRUcxX1BMTFNFTF9HTUlJX01BU0sJCTMKKyNkZWZpbmUgUzZfR1JFRzFfU1lTVU5MT0NLQ05UCTB4MDIwCisjZGVmaW5lIFM2X0dSRUcxX0lPVU5MT0NLQ05UCTB4MDI0CisjZGVmaW5lIFM2X0dSRUcxX0FJTVVOTE9DS0NOVAkweDAyOAorI2RlZmluZSBTNl9HUkVHMV9EUDBVTkxPQ0tDTlQJMHgwMkMKKyNkZWZpbmUgUzZfR1JFRzFfRFAyVU5MT0NLQ05UCTB4MDMwCisjZGVmaW5lIFM2X0dSRUcxX0REUlVOTE9DS0NOVAkweDAzNAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwwCTB4MDQwCisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDBfTFNHQgkJMAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwwX0xTUFgJCTgKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMF9NRU1ETwkJMTYKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMF9IU1hUMQkJMjQKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMQkweDA0NAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwxX0hTSVNFRgkJMAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwxX0hTTkkJCTgKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMV9IU05TCQkxNgorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwxX0hTSVNFRkNGRwkyNAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwyCTB4MDQ4CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDJfTFNOQgkJMAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwyX0xTU0IJCTgKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMMl9MU1JFU1QJCTI0CisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDMJMHgwNEMKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMM19JU0VGWEFECTAKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMM19JU0VGTE1TCTgKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMM19JU0VGSVNFRgkxNgorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUwzX0REUkRECQkyNAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUw0CTB4MDUwCisjZGVmaW5lIFM2X0dSRUcxX0NMS0JBTDRfRERSRFAJCTAKKyNkZWZpbmUgUzZfR1JFRzFfQ0xLQkFMNF9ERFJETwkJOAorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUw0X0REUk5CCQkxNgorI2RlZmluZSBTNl9HUkVHMV9DTEtCQUw0X0REUkxNUwkJMjQKKyNkZWZpbmUgUzZfR1JFRzFfQkxPQ0tFTkEJMHgxMDAKKyNkZWZpbmUgUzZfR1JFRzFfQkxPQ0tfRERSCQkwCisjZGVmaW5lIFM2X0dSRUcxX0JMT0NLX0RQCQkxCisjZGVmaW5lIFM2X0dSRUcxX0JMT0NLX05TTkkJCTIKKyNkZWZpbmUgUzZfR1JFRzFfQkxPQ0tfUENJRQkJMworI2RlZmluZSBTNl9HUkVHMV9CTE9DS19HTUFDCQk0CisjZGVmaW5lIFM2X0dSRUcxX0JMT0NLX0kyUwkJNQorI2RlZmluZSBTNl9HUkVHMV9CTE9DS19FR0lCCQk2CisjZGVmaW5lIFM2X0dSRUcxX0JMT0NLX1NCCQk3CisjZGVmaW5lIFM2X0dSRUcxX0JMT0NLX1hUMQkJOAorI2RlZmluZSBTNl9HUkVHMV9DTEtHQVRFCTB4MTA0CisjZGVmaW5lIFM2X0dSRUcxX0JHQVRFX0FJTU5PUlRICQk5CisjZGVmaW5lIFM2X0dSRUcxX0JHQVRFX0FJTUVBU1QJCTEwCisjZGVmaW5lIFM2X0dSRUcxX0JHQVRFX0FJTVdFU1QJCTExCisjZGVmaW5lIFM2X0dSRUcxX0JHQVRFX0FJTVNPVVRICQkxMgorI2RlZmluZSBTNl9HUkVHMV9DSElQUkVTCTB4MTA4CisjZGVmaW5lIFM2X0dSRUcxX0NISVBSRVNfU09GVFJFUwkwCisjZGVmaW5lIFM2X0dSRUcxX0NISVBSRVNfTE9TVExPQ0sJMQorI2RlZmluZSBTNl9HUkVHMV9SRVNFVENBVVNFCTB4MTBDCisjZGVmaW5lIFM2X0dSRUcxX1JFU0VUQ0FVU0VfUkVTRVROCTAKKyNkZWZpbmUgUzZfR1JFRzFfUkVTRVRDQVVTRV9HTE9CQUwJMQorI2RlZmluZSBTNl9HUkVHMV9SRVNFVENBVVNFX1dET0dUSU1FUgkyCisjZGVmaW5lIFM2X0dSRUcxX1JFU0VUQ0FVU0VfU1dDSElQCTMKKyNkZWZpbmUgUzZfR1JFRzFfUkVTRVRDQVVTRV9QTExTWVNMT1NTCTQKKyNkZWZpbmUgUzZfR1JFRzFfUkVTRVRDQVVTRV9QQ0lFCTUKKyNkZWZpbmUgUzZfR1JFRzFfUkVTRVRDQVVTRV9DUkVBVEVER0xPQgk2CisjZGVmaW5lIFM2X0dSRUcxX1JFRkNMT0NLQ05UCTB4MTEwCisjZGVmaW5lIFM2X0dSRUcxX1JFU0VUVElNRVIJMHgxMTQKKyNkZWZpbmUgUzZfR1JFRzFfTk1JVElNRVIJMHgxMTgKKyNkZWZpbmUgUzZfR1JFRzFfR0xPQkFMX1RJTUVSCTB4MTFDCisjZGVmaW5lIFM2X0dSRUcxX1RJTUVSMAkJMHgxODAKKyNkZWZpbmUgUzZfR1JFRzFfVElNRVIxCQkweDE4NAorI2RlZmluZSBTNl9HUkVHMV9VQVJUQ0xPQ0tTRUwJMHgyMDQKKyNkZWZpbmUgUzZfR1JFRzFfQ0hJUFZFUlNQQUNLRwkweDIwOAorI2RlZmluZSBTNl9HUkVHMV9DSElQVkVSU1BBQ0tHX0NISVBWSUQJMAorI2RlZmluZSBTNl9HUkVHMV9DSElQVkVSU1BBQ0tHX1BBQ0tTRUwJOAorI2RlZmluZSBTNl9HUkVHMV9PTkRJRVRFUk1DVFJMCTB4MjBDCisjZGVmaW5lIFM2X0dSRUcxX09ORElFVEVSTUNUUkxfV0VTVAkwCisjZGVmaW5lIFM2X0dSRUcxX09ORElFVEVSTUNUUkxfTk9SVEgJMgorI2RlZmluZSBTNl9HUkVHMV9PTkRJRVRFUk1DVFJMX0VBU1QJNAorI2RlZmluZSBTNl9HUkVHMV9PTkRJRVRFUk1DVFJMX1NPVVRICTYKKyNkZWZpbmUgUzZfR1JFRzFfT05ESUVURVJNQ1RSTF9OT05FCQkwCisjZGVmaW5lIFM2X0dSRUcxX09ORElFVEVSTUNUUkxfNzVPSE0JCTIKKyNkZWZpbmUgUzZfR1JFRzFfT05ESUVURVJNQ1RSTF9NQVNLCQkzCisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMAkweDIxMAorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfQUlNU1RST05HCTEKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX01JTklCT09UREwJMgorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfT0NER1BJTzhTRVQJNQorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfT0NER1BJT0VOQQk2CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9ET1dOU1RSRUFNCTcKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX1BMTFNZU0RJVgk4CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9QTExTWVNESVZfMzAwTUhaCTEKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX1BMTFNZU0RJVl8yNDBNSFoJMgorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfUExMU1lTRElWXzIwME1IWgkzCisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9QTExTWVNESVZfMTUwTUhaCTQKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX1BMTFNZU0RJVl8xMjBNSFoJNQorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzBfUExMU1lTRElWXzQwTUhaCTYKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX1BMTFNZU0RJVl9NQVNLCTcKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcwX0JBTEhTTE1TCTEyCisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9CQUxIU05CCTE4CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMF9CQUxIU1hBRAkyNAorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzEJMHgyMTQKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcxX1BDSUUxTEFORQkxCisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMV9NUExMUFJFU0NBTEUJMgorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzFfTVBMTE5DWQk0CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMV9NUExMTkNZNQk5CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMV9CQUxIU1JFU1QJMTQKKyNkZWZpbmUgUzZfR1JFRzFfQk9PVF9DRkcxX0JBTEhTUFNNRU1TCTIwCisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMV9CQUxMU0dJCTI2CisjZGVmaW5lIFM2X0dSRUcxX0JPT1RfQ0ZHMgkweDIxOAorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzJfUEVJRAkJMAorI2RlZmluZSBTNl9HUkVHMV9CT09UX0NGRzMJMHgyMUMKKyNkZWZpbmUgUzZfR1JFRzFfRFJBTUJVU1lIT0xET0YJMHgyMjAKKyNkZWZpbmUgUzZfR1JFRzFfRFJBTUJVU1lIT0xET0ZfWFQwCTAKKyNkZWZpbmUgUzZfR1JFRzFfRFJBTUJVU1lIT0xET0ZfWFQxCTQKKyNkZWZpbmUgUzZfR1JFRzFfRFJBTUJVU1lIT0xET0ZfWFRfTUFTSwkJNworI2RlZmluZSBTNl9HUkVHMV9QQ0lFQkFSMVNJWkUJMHgyMjQKKyNkZWZpbmUgUzZfR1JFRzFfUENJRUJBUjJTSVpFCTB4MjI4CisjZGVmaW5lIFM2X0dSRUcxX1BDSUVWRU5ET1IJMHgyMkMKKyNkZWZpbmUgUzZfR1JFRzFfUENJRURFVklDRQkweDIzMAorI2RlZmluZSBTNl9HUkVHMV9QQ0lFUkVWCTB4MjM0CisjZGVmaW5lIFM2X0dSRUcxX1BDSUVDTEFTUwkweDIzOAorI2RlZmluZSBTNl9HUkVHMV9YVDFEQ0FDSEVNSVNTCTB4MjQwCisjZGVmaW5lIFM2X0dSRUcxX1hUMUlDQUNIRU1JU1MJMHgyNDQKKyNkZWZpbmUgUzZfR1JFRzFfSFdTRU1BUEhPUkUobikJKDB4NDAwICsgNCAqIChuKSkKKyNkZWZpbmUgUzZfR1JFRzFfSFdTRU1BUEhPUkVfTkIJCTE2CisKKy8qIHBlcmlwaGVyYWwgaW50ZXJydXB0IG51bWJlcnMgKi8KKworI2RlZmluZSBTNl9JTlRDX0dQSU8obikJCQkobikJCS8qIDAuLjMgKi8KKyNkZWZpbmUgUzZfSU5UQ19JMkMJCQk0CisjZGVmaW5lIFM2X0lOVENfU1BJCQkJNQorI2RlZmluZSBTNl9JTlRDX05CX0VSUgkJCTYKKyNkZWZpbmUgUzZfSU5UQ19ETUFfTE1TRVJSCQk3CisjZGVmaW5lIFM2X0lOVENfRE1BX0xNU0xPV1dNUksobikJKDggKyAobikpCS8qIDAuLjExICovCisjZGVmaW5lIFM2X0lOVENfRE1BX0xNU1BFTkRDTlQobikJKDIwICsgKG4pKQkvKiAwLi4xMSAqLworI2RlZmluZSBTNl9JTlRDX0RNQSBIT1NUTE9XV01SSyhuKQkoMzIgKyAobikpCS8qIDAuLjYgKi8KKyNkZWZpbmUgUzZfSU5UQ19ETUFfSE9TVFBFTkRDTlQobikJKDM5ICsgKG4pKQkvKiAwLi42ICovCisjZGVmaW5lIFM2X0lOVENfRE1BX0hPU1RFUlIJCTQ2CisjZGVmaW5lIFM2X0lOVENfVUFSVChuKQkJCSg0NyArIChuKSkJLyogMC4uMSAqLworI2RlZmluZSBTNl9JTlRDX1hBRAkJCTQ5CisjZGVmaW5lIFM2X0lOVENfTklfRVJSCQkJNTAKKyNkZWZpbmUgUzZfSU5UQ19OSV9JTkZJRk9GVUxMCQk1MQorI2RlZmluZSBTNl9JTlRDX0RNQV9OSUVSUgkJNTIKKyNkZWZpbmUgUzZfSU5UQ19ETUFfTklMT1dXTVJLKG4pCSg1MyArIChuKSkJLyogMC4uMyAqLworI2RlZmluZSBTNl9JTlRDX0RNQV9OSVBFTkRDTlQobikJKDU3ICsgKG4pKQkvKiAwLi4zICovCisjZGVmaW5lIFM2X0lOVENfRERSCQkJNjEKKyNkZWZpbmUgUzZfSU5UQ19OU19FUlIJCQk2MgorI2RlZmluZSBTNl9JTlRDX0VGSV9DRkdFUlIJCTYzCisjZGVmaW5lIFM2X0lOVENfRUZJX0lTRUZURVNUCQk2NAorI2RlZmluZSBTNl9JTlRDX0VGSV9XUklURUVSUgkJNjUKKyNkZWZpbmUgUzZfSU5UQ19OTUlfVElNRVIJCTY2CisjZGVmaW5lIFM2X0lOVENfUExMTE9DS19TWVMJCTY3CisjZGVmaW5lIFM2X0lOVENfUExMTE9DS19JTwkJNjgKKyNkZWZpbmUgUzZfSU5UQ19QTExMT0NLX0FJTQkJNjkKKyNkZWZpbmUgUzZfSU5UQ19QTExMT0NLX0RQMAkJNzAKKyNkZWZpbmUgUzZfSU5UQ19QTExMT0NLX0RQMgkJNzEKKyNkZWZpbmUgUzZfSU5UQ19JMlNfRVJSCQkJNzIKKyNkZWZpbmUgUzZfSU5UQ19HTUFDX1NUQVQJCTczCisjZGVmaW5lIFM2X0lOVENfR01BQ19FUlIJCTc0CisjZGVmaW5lIFM2X0lOVENfR0lCX0VSUgkJCTc1CisjZGVmaW5lIFM2X0lOVENfUENJRV9FUlIJCTc2CisjZGVmaW5lIFM2X0lOVENfUENJRV9NU0kobikJCSg3NyArIChuKSkJLyogMC4uMyAqLworI2RlZmluZSBTNl9JTlRDX1BDSUVfSU5UQQkJODEKKyNkZWZpbmUgUzZfSU5UQ19QQ0lFX0lOVEIJCTgyCisjZGVmaW5lIFM2X0lOVENfUENJRV9JTlRDCQk4MworI2RlZmluZSBTNl9JTlRDX1BDSUVfSU5URAkJODQKKyNkZWZpbmUgUzZfSU5UQ19TVyhuKQkJCSg4NSArIChuKSkJLyogMC4uOSAqLworI2RlZmluZSBTNl9JTlRDX1NXX0VOQUJMRShuKQkJKDg1ICsgMjU2ICsgKG4pKQorI2RlZmluZSBTNl9JTlRDX0RNQV9EUF9FUlIJCTk1CisjZGVmaW5lIFM2X0lOVENfRE1BX0RQTE9XV01SSyhuKQkoOTYgKyAobikpCS8qIDAuLjMgKi8KKyNkZWZpbmUgUzZfSU5UQ19ETUFfRFBQRU5EQ05UKG4pCSgxMDAgKyAobikpCS8qIDAuLjMgKi8KKyNkZWZpbmUgUzZfSU5UQ19ETUFfRFBURVJNQ05UKG4pCSgxMDQgKyAobikpCS8qIDAuLjMgKi8KKyNkZWZpbmUgUzZfSU5UQ19USU1FUjAJCQkxMDgKKyNkZWZpbmUgUzZfSU5UQ19USU1FUjEJCQkxMDkKKyNkZWZpbmUgUzZfSU5UQ19ETUFfSE9TVFRFUk1DTlQobikJKDExMCArIChuKSkJLyogMC4uNiAqLworCisjZW5kaWYgLyogX19YVEVOU0FfUzYwMDBfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L2lycS5oIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMDMxY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pbmNsdWRlL3ZhcmlhbnQvaXJxLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9fWFRFTlNBX1M2MDAwX0lSUV9ICisjZGVmaW5lIF9fWFRFTlNBX1M2MDAwX0lSUV9ICisKKyNkZWZpbmUgTk9fSVJRCQkoLTEpCisKK2V4dGVybiB2b2lkIHZhcmlhbnRfaXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKTsKK2V4dGVybiB2b2lkIHZhcmlhbnRfaXJxX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSk7CisKKyNlbmRpZiAvKiBfX1hURU5TQV9TNjAwMF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L3RpZS1hc20uaCBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC90aWUtYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyZDBhMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC90aWUtYXNtLmgKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKiBUaGlzIGhlYWRlciBmaWxlIGNvbnRhaW5zIGFzc2VtYmx5LWxhbmd1YWdlIGRlZmluaXRpb25zIChhc3NlbWJseQorICogbWFjcm9zLCBldGMuKSBmb3IgdGhpcyBzcGVjaWZpYyBYdGVuc2EgcHJvY2Vzc29yJ3MgVElFIGV4dGVuc2lvbnMKKyAqIGFuZCBvcHRpb25zLiAgSXQgaXMgY3VzdG9taXplZCB0byB0aGlzIFh0ZW5zYSBwcm9jZXNzb3IgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwOCBUZW5zaWxpY2EgSW5jLgorICovCisKKyNpZm5kZWYgX1hURU5TQV9DT1JFX1RJRV9BU01fSAorI2RlZmluZSBfWFRFTlNBX0NPUkVfVElFX0FTTV9ICisKKy8qICBTZWxlY3Rpb24gcGFyYW1ldGVyIHZhbHVlcyBmb3Igc2F2ZS1hcmVhIHNhdmUvcmVzdG9yZSBtYWNyb3M6ICAqLworLyogIE9wdGlvbiB2cy4gVElFOiAgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX1RJRQkweDAwMDEJLyogY3VzdG9tIGV4dGVuc2lvbiBvciBjb3Byb2Nlc3NvciAqLworI2RlZmluZSBYVEhBTF9TQVNfT1BUCTB4MDAwMgkvKiBvcHRpb25hbCAoYW5kIG5vdCBhIGNvcHJvY2Vzc29yKSAqLworLyogIFdoZXRoZXIgdXNlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbXBpbGVyOiAgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX05PQ0MJMHgwMDA0CS8qIG5vdCB1c2VkIGJ5IGNvbXBpbGVyIHcvbyBzcGVjaWFsIG9wdHMvY29kZSAqLworI2RlZmluZSBYVEhBTF9TQVNfQ0MJMHgwMDA4CS8qIHVzZWQgYnkgY29tcGlsZXIgd2l0aG91dCBzcGVjaWFsIG9wdHMvY29kZSAqLworLyogIEFCSSBoYW5kbGluZyBhY3Jvc3MgZnVuY3Rpb24gY2FsbHM6ICAqLworI2RlZmluZSBYVEhBTF9TQVNfQ0FMUgkweDAwMTAJLyogY2FsbGVyLXNhdmVkICovCisjZGVmaW5lIFhUSEFMX1NBU19DQUxFCTB4MDAyMAkvKiBjYWxsZWUtc2F2ZWQgKi8KKyNkZWZpbmUgWFRIQUxfU0FTX0dMT0IJMHgwMDQwCS8qIGdsb2JhbCBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMgKGluIHRocmVhZCkgKi8KKy8qICBNaXNjICAqLworI2RlZmluZSBYVEhBTF9TQVNfQUxMCTB4RkZGRgkvKiBpbmNsdWRlIGFsbCBkZWZhdWx0IE5DUCBjb250ZW50cyAqLworCisKKworLyogTWFjcm8gdG8gc2F2ZSBhbGwgbm9uLWNvcHJvY2Vzc29yIChleHRyYSkgY3VzdG9tIFRJRSBhbmQgb3B0aW9uYWwgc3RhdGUKKyAqIChub3QgaW5jbHVkaW5nIHplcm8tb3ZlcmhlYWQgbG9vcCByZWdpc3RlcnMpLgorICogU2F2ZSBhcmVhIHB0ciAoY2xvYmJlcmVkKTogIHB0ciAgKDE2IGJ5dGUgYWxpZ25lZCkKKyAqIFNjcmF0Y2ggcmVncyAgKGNsb2JiZXJlZCk6ICBhdDEuLmF0NCAgKG9ubHkgZmlyc3QgWENIQUxfTkNQX05VTV9BVE1QUyBuZWVkZWQpCisgKi8KKwkubWFjcm8geGNoYWxfbmNwX3N0b3JlICBwdHIgYXQxIGF0MiBhdDMgYXQ0ICBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9WFRIQUxfU0FTX0FMTAorCXhjaGFsX3NhX3N0YXJ0CVxjb250aW51ZSwgXG9mcworCS5pZmVxIChYVEhBTF9TQVNfT1BUIHwgWFRIQUxfU0FTX05PQ0MgfCBYVEhBTF9TQVNfQ0FMUikgJiB+XHNlbGVjdAorCXhjaGFsX3NhX2FsaWduCVxwdHIsIDAsIDEwMjQtNCwgNCwgNAorCXJzcglcYXQxLCBCUgkJLy8gYm9vbGVhbiBvcHRpb24KKwlzMzJpCVxhdDEsIFxwdHIsIC5MeGNoYWxfb2ZzXyArIDAKKwkuc2V0CS5MeGNoYWxfb2ZzXywgLkx4Y2hhbF9vZnNfICsgNAorCS5lbmRpZgorCS5lbmRtCS8vIHhjaGFsX25jcF9zdG9yZQorCisvKiBNYWNybyB0byBzYXZlIGFsbCBub24tY29wcm9jZXNzb3IgKGV4dHJhKSBjdXN0b20gVElFIGFuZCBvcHRpb25hbCBzdGF0ZQorICogKG5vdCBpbmNsdWRpbmcgemVyby1vdmVyaGVhZCBsb29wIHJlZ2lzdGVycykuCisgKiBTYXZlIGFyZWEgcHRyIChjbG9iYmVyZWQpOiAgcHRyICAoMTYgYnl0ZSBhbGlnbmVkKQorICogU2NyYXRjaCByZWdzICAoY2xvYmJlcmVkKTogIGF0MS4uYXQ0ICAob25seSBmaXJzdCBYQ0hBTF9OQ1BfTlVNX0FUTVBTIG5lZWRlZCkKKyAqLworCS5tYWNybyB4Y2hhbF9uY3BfbG9hZCAgcHRyIGF0MSBhdDIgYXQzIGF0NCAgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PVhUSEFMX1NBU19BTEwKKwl4Y2hhbF9zYV9zdGFydAlcY29udGludWUsIFxvZnMKKwkuaWZlcSAoWFRIQUxfU0FTX09QVCB8IFhUSEFMX1NBU19OT0NDIHwgWFRIQUxfU0FTX0NBTFIpICYgflxzZWxlY3QKKwl4Y2hhbF9zYV9hbGlnbglccHRyLCAwLCAxMDI0LTQsIDQsIDQKKwlsMzJpCVxhdDEsIFxwdHIsIC5MeGNoYWxfb2ZzXyArIDAKKwl3c3IJXGF0MSwgQlIJCS8vIGJvb2xlYW4gb3B0aW9uCisJLnNldAkuTHhjaGFsX29mc18sIC5MeGNoYWxfb2ZzXyArIDQKKwkuZW5kaWYKKwkuZW5kbQkvLyB4Y2hhbF9uY3BfbG9hZAorCisKKworI2RlZmluZSBYQ0hBTF9OQ1BfTlVNX0FUTVBTCTEKKworCisKKy8qIE1hY3JvIHRvIHNhdmUgdGhlIHN0YXRlIG9mIFRJRSBjb3Byb2Nlc3NvciBGUFUuCisgKiBTYXZlIGFyZWEgcHRyIChjbG9iYmVyZWQpOiAgcHRyICAoMTYgYnl0ZSBhbGlnbmVkKQorICogU2NyYXRjaCByZWdzICAoY2xvYmJlcmVkKTogIGF0MS4uYXQ0ICAob25seSBmaXJzdCBYQ0hBTF9DUDBfTlVNX0FUTVBTIG5lZWRlZCkKKyAqLworI2RlZmluZSB4Y2hhbF9jcF9GUFVfc3RvcmUJeGNoYWxfY3AwX3N0b3JlCisvKiAjZGVmaW5lIHhjaGFsX2NwX0ZQVV9zdG9yZV9hMgl4Y2hhbF9jcDBfc3RvcmUgYTIgYTMgYTQgYTUgYTYgKi8KKwkubWFjcm8JeGNoYWxfY3AwX3N0b3JlICBwdHIgYXQxIGF0MiBhdDMgYXQ0ICBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9WFRIQUxfU0FTX0FMTAorCXhjaGFsX3NhX3N0YXJ0IFxjb250aW51ZSwgXG9mcworCS5pZmVxIChYVEhBTF9TQVNfVElFIHwgWFRIQUxfU0FTX05PQ0MgfCBYVEhBTF9TQVNfQ0FMUikgJiB+XHNlbGVjdAorCXhjaGFsX3NhX2FsaWduCVxwdHIsIDAsIDAsIDEsIDE2CisJcnVyMjMyCVxhdDEJCS8vIEZDUgorCXMzMmkJXGF0MSwgXHB0ciwgMAorCXJ1cjIzMwlcYXQxCQkvLyBGU1IKKwlzMzJpCVxhdDEsIFxwdHIsIDQKKwlTU0kgZjAsIFxwdHIsICA4CisJU1NJIGYxLCBccHRyLCAgMTIKKwlTU0kgZjIsIFxwdHIsICAxNgorCVNTSSBmMywgXHB0ciwgIDIwCisJU1NJIGY0LCBccHRyLCAgMjQKKwlTU0kgZjUsIFxwdHIsICAyOAorCVNTSSBmNiwgXHB0ciwgIDMyCisJU1NJIGY3LCBccHRyLCAgMzYKKwlTU0kgZjgsIFxwdHIsICA0MAorCVNTSSBmOSwgXHB0ciwgIDQ0CisJU1NJIGYxMCwgXHB0ciwgIDQ4CisJU1NJIGYxMSwgXHB0ciwgIDUyCisJU1NJIGYxMiwgXHB0ciwgIDU2CisJU1NJIGYxMywgXHB0ciwgIDYwCisJU1NJIGYxNCwgXHB0ciwgIDY0CisJU1NJIGYxNSwgXHB0ciwgIDY4CisJLnNldAkuTHhjaGFsX29mc18sIC5MeGNoYWxfb2ZzXyArIDcyCisJLmVuZGlmCisJLmVuZG0JLy8geGNoYWxfY3AwX3N0b3JlCisKKy8qIE1hY3JvIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mIFRJRSBjb3Byb2Nlc3NvciBGUFUuCisgKiBTYXZlIGFyZWEgcHRyIChjbG9iYmVyZWQpOiAgcHRyICAoMTYgYnl0ZSBhbGlnbmVkKQorICogU2NyYXRjaCByZWdzICAoY2xvYmJlcmVkKTogIGF0MS4uYXQ0ICAob25seSBmaXJzdCBYQ0hBTF9DUDBfTlVNX0FUTVBTIG5lZWRlZCkKKyAqLworI2RlZmluZSB4Y2hhbF9jcF9GUFVfbG9hZAl4Y2hhbF9jcDBfbG9hZAorLyogI2RlZmluZSB4Y2hhbF9jcF9GUFVfbG9hZF9hMgl4Y2hhbF9jcDBfbG9hZCBhMiBhMyBhNCBhNSBhNiAqLworCS5tYWNybwl4Y2hhbF9jcDBfbG9hZCAgcHRyIGF0MSBhdDIgYXQzIGF0NCAgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PVhUSEFMX1NBU19BTEwKKwl4Y2hhbF9zYV9zdGFydCBcY29udGludWUsIFxvZnMKKwkuaWZlcSAoWFRIQUxfU0FTX1RJRSB8IFhUSEFMX1NBU19OT0NDIHwgWFRIQUxfU0FTX0NBTFIpICYgflxzZWxlY3QKKwl4Y2hhbF9zYV9hbGlnbglccHRyLCAwLCAwLCAxLCAxNgorCWwzMmkJXGF0MSwgXHB0ciwgMAorCXd1cjIzMglcYXQxCQkvLyBGQ1IKKwlsMzJpCVxhdDEsIFxwdHIsIDQKKwl3dXIyMzMJXGF0MQkJLy8gRlNSCisJTFNJIGYwLCBccHRyLCAgOAorCUxTSSBmMSwgXHB0ciwgIDEyCisJTFNJIGYyLCBccHRyLCAgMTYKKwlMU0kgZjMsIFxwdHIsICAyMAorCUxTSSBmNCwgXHB0ciwgIDI0CisJTFNJIGY1LCBccHRyLCAgMjgKKwlMU0kgZjYsIFxwdHIsICAzMgorCUxTSSBmNywgXHB0ciwgIDM2CisJTFNJIGY4LCBccHRyLCAgNDAKKwlMU0kgZjksIFxwdHIsICA0NAorCUxTSSBmMTAsIFxwdHIsICA0OAorCUxTSSBmMTEsIFxwdHIsICA1MgorCUxTSSBmMTIsIFxwdHIsICA1NgorCUxTSSBmMTMsIFxwdHIsICA2MAorCUxTSSBmMTQsIFxwdHIsICA2NAorCUxTSSBmMTUsIFxwdHIsICA2OAorCS5zZXQJLkx4Y2hhbF9vZnNfLCAuTHhjaGFsX29mc18gKyA3MgorCS5lbmRpZgorCS5lbmRtCS8vIHhjaGFsX2NwMF9sb2FkCisKKyNkZWZpbmUgWENIQUxfQ1AwX05VTV9BVE1QUwkxCisKKy8qIE1hY3JvIHRvIHNhdmUgdGhlIHN0YXRlIG9mIFRJRSBjb3Byb2Nlc3NvciBYQUQuCisgKiBTYXZlIGFyZWEgcHRyIChjbG9iYmVyZWQpOiAgcHRyICAoMTYgYnl0ZSBhbGlnbmVkKQorICogU2NyYXRjaCByZWdzICAoY2xvYmJlcmVkKTogIGF0MS4uYXQ0ICAob25seSBmaXJzdCBYQ0hBTF9DUDZfTlVNX0FUTVBTIG5lZWRlZCkKKyAqLworI2RlZmluZSB4Y2hhbF9jcF9YQURfc3RvcmUJeGNoYWxfY3A2X3N0b3JlCisvKiAjZGVmaW5lIHhjaGFsX2NwX1hBRF9zdG9yZV9hMgl4Y2hhbF9jcDZfc3RvcmUgYTIgYTMgYTQgYTUgYTYgKi8KKwkubWFjcm8JeGNoYWxfY3A2X3N0b3JlICBwdHIgYXQxIGF0MiBhdDMgYXQ0ICBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9WFRIQUxfU0FTX0FMTAorCXhjaGFsX3NhX3N0YXJ0IFxjb250aW51ZSwgXG9mcworCS5pZmVxIChYVEhBTF9TQVNfVElFIHwgWFRIQUxfU0FTX05PQ0MgfCBYVEhBTF9TQVNfQ0FMUikgJiB+XHNlbGVjdAorCXhjaGFsX3NhX2FsaWduCVxwdHIsIDAsIDAsIDEsIDE2CisJcnVyMAlcYXQxCQkvLyBMRENCSEkKKwlzMzJpCVxhdDEsIFxwdHIsIDAKKwlydXIxCVxhdDEJCS8vIExEQ0JMTworCXMzMmkJXGF0MSwgXHB0ciwgNAorCXJ1cjIJXGF0MQkJLy8gU1RDQkhJCisJczMyaQlcYXQxLCBccHRyLCA4CisJcnVyMwlcYXQxCQkvLyBTVENCTE8KKwlzMzJpCVxhdDEsIFxwdHIsIDEyCisJcnVyOAlcYXQxCQkvLyBMREJSQkFTRQorCXMzMmkJXGF0MSwgXHB0ciwgMTYKKwlydXI5CVxhdDEJCS8vIExEQlJPRkYKKwlzMzJpCVxhdDEsIFxwdHIsIDIwCisJcnVyMTAJXGF0MQkJLy8gTERCUklOQworCXMzMmkJXGF0MSwgXHB0ciwgMjQKKwlydXIxMQlcYXQxCQkvLyBTVEJSQkFTRQorCXMzMmkJXGF0MSwgXHB0ciwgMjgKKwlydXIxMglcYXQxCQkvLyBTVEJST0ZGCisJczMyaQlcYXQxLCBccHRyLCAzMgorCXJ1cjEzCVxhdDEJCS8vIFNUQlJJTkMKKwlzMzJpCVxhdDEsIFxwdHIsIDM2CisJcnVyMjQJXGF0MQkJLy8gU0NSQVRDSDAKKwlzMzJpCVxhdDEsIFxwdHIsIDQwCisJcnVyMjUJXGF0MQkJLy8gU0NSQVRDSDEKKwlzMzJpCVxhdDEsIFxwdHIsIDQ0CisJcnVyMjYJXGF0MQkJLy8gU0NSQVRDSDIKKwlzMzJpCVxhdDEsIFxwdHIsIDQ4CisJcnVyMjcJXGF0MQkJLy8gU0NSQVRDSDMKKwlzMzJpCVxhdDEsIFxwdHIsIDUyCisJV1JBUzEyOEkgd3JhMCwgXHB0ciwgIDY0CisJV1JBUzEyOEkgd3JhMSwgXHB0ciwgIDgwCisJV1JBUzEyOEkgd3JhMiwgXHB0ciwgIDk2CisJV1JBUzEyOEkgd3JhMywgXHB0ciwgIDExMgorCVdSQVMxMjhJIHdyYTQsIFxwdHIsICAxMjgKKwlXUkFTMTI4SSB3cmE1LCBccHRyLCAgMTQ0CisJV1JBUzEyOEkgd3JhNiwgXHB0ciwgIDE2MAorCVdSQVMxMjhJIHdyYTcsIFxwdHIsICAxNzYKKwlXUkFTMTI4SSB3cmE4LCBccHRyLCAgMTkyCisJV1JBUzEyOEkgd3JhOSwgXHB0ciwgIDIwOAorCVdSQVMxMjhJIHdyYTEwLCBccHRyLCAgMjI0CisJV1JBUzEyOEkgd3JhMTEsIFxwdHIsICAyNDAKKwlXUkFTMTI4SSB3cmExMiwgXHB0ciwgIDI1NgorCVdSQVMxMjhJIHdyYTEzLCBccHRyLCAgMjcyCisJV1JBUzEyOEkgd3JhMTQsIFxwdHIsICAyODgKKwlXUkFTMTI4SSB3cmExNSwgXHB0ciwgIDMwNAorCVdSQlMxMjhJIHdyYjAsIFxwdHIsICAzMjAKKwlXUkJTMTI4SSB3cmIxLCBccHRyLCAgMzM2CisJV1JCUzEyOEkgd3JiMiwgXHB0ciwgIDM1MgorCVdSQlMxMjhJIHdyYjMsIFxwdHIsICAzNjgKKwlXUkJTMTI4SSB3cmI0LCBccHRyLCAgMzg0CisJV1JCUzEyOEkgd3JiNSwgXHB0ciwgIDQwMAorCVdSQlMxMjhJIHdyYjYsIFxwdHIsICA0MTYKKwlXUkJTMTI4SSB3cmI3LCBccHRyLCAgNDMyCisJV1JCUzEyOEkgd3JiOCwgXHB0ciwgIDQ0OAorCVdSQlMxMjhJIHdyYjksIFxwdHIsICA0NjQKKwlXUkJTMTI4SSB3cmIxMCwgXHB0ciwgIDQ4MAorCVdSQlMxMjhJIHdyYjExLCBccHRyLCAgNDk2CisJV1JCUzEyOEkgd3JiMTIsIFxwdHIsICA1MTIKKwlXUkJTMTI4SSB3cmIxMywgXHB0ciwgIDUyOAorCVdSQlMxMjhJIHdyYjE0LCBccHRyLCAgNTQ0CisJV1JCUzEyOEkgd3JiMTUsIFxwdHIsICA1NjAKKwkuc2V0CS5MeGNoYWxfb2ZzXywgLkx4Y2hhbF9vZnNfICsgNTc2CisJLmVuZGlmCisJLmVuZG0JLy8geGNoYWxfY3A2X3N0b3JlCisKKy8qIE1hY3JvIHRvIHJlc3RvcmUgdGhlIHN0YXRlIG9mIFRJRSBjb3Byb2Nlc3NvciBYQUQuCisgKiBTYXZlIGFyZWEgcHRyIChjbG9iYmVyZWQpOiAgcHRyICAoMTYgYnl0ZSBhbGlnbmVkKQorICogU2NyYXRjaCByZWdzICAoY2xvYmJlcmVkKTogIGF0MS4uYXQ0ICAob25seSBmaXJzdCBYQ0hBTF9DUDZfTlVNX0FUTVBTIG5lZWRlZCkKKyAqLworI2RlZmluZSB4Y2hhbF9jcF9YQURfbG9hZAl4Y2hhbF9jcDZfbG9hZAorLyogI2RlZmluZSB4Y2hhbF9jcF9YQURfbG9hZF9hMgl4Y2hhbF9jcDZfbG9hZCBhMiBhMyBhNCBhNSBhNiAqLworCS5tYWNybwl4Y2hhbF9jcDZfbG9hZCAgcHRyIGF0MSBhdDIgYXQzIGF0NCAgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PVhUSEFMX1NBU19BTEwKKwl4Y2hhbF9zYV9zdGFydCBcY29udGludWUsIFxvZnMKKwkuaWZlcSAoWFRIQUxfU0FTX1RJRSB8IFhUSEFMX1NBU19OT0NDIHwgWFRIQUxfU0FTX0NBTFIpICYgflxzZWxlY3QKKwl4Y2hhbF9zYV9hbGlnbglccHRyLCAwLCAwLCAxLCAxNgorCWwzMmkJXGF0MSwgXHB0ciwgMAorCXd1cjAJXGF0MQkJLy8gTERDQkhJCisJbDMyaQlcYXQxLCBccHRyLCA0CisJd3VyMQlcYXQxCQkvLyBMRENCTE8KKwlsMzJpCVxhdDEsIFxwdHIsIDgKKwl3dXIyCVxhdDEJCS8vIFNUQ0JISQorCWwzMmkJXGF0MSwgXHB0ciwgMTIKKwl3dXIzCVxhdDEJCS8vIFNUQ0JMTworCWwzMmkJXGF0MSwgXHB0ciwgMTYKKwl3dXI4CVxhdDEJCS8vIExEQlJCQVNFCisJbDMyaQlcYXQxLCBccHRyLCAyMAorCXd1cjkJXGF0MQkJLy8gTERCUk9GRgorCWwzMmkJXGF0MSwgXHB0ciwgMjQKKwl3dXIxMAlcYXQxCQkvLyBMREJSSU5DCisJbDMyaQlcYXQxLCBccHRyLCAyOAorCXd1cjExCVxhdDEJCS8vIFNUQlJCQVNFCisJbDMyaQlcYXQxLCBccHRyLCAzMgorCXd1cjEyCVxhdDEJCS8vIFNUQlJPRkYKKwlsMzJpCVxhdDEsIFxwdHIsIDM2CisJd3VyMTMJXGF0MQkJLy8gU1RCUklOQworCWwzMmkJXGF0MSwgXHB0ciwgNDAKKwl3dXIyNAlcYXQxCQkvLyBTQ1JBVENIMAorCWwzMmkJXGF0MSwgXHB0ciwgNDQKKwl3dXIyNQlcYXQxCQkvLyBTQ1JBVENIMQorCWwzMmkJXGF0MSwgXHB0ciwgNDgKKwl3dXIyNglcYXQxCQkvLyBTQ1JBVENIMgorCWwzMmkJXGF0MSwgXHB0ciwgNTIKKwl3dXIyNwlcYXQxCQkvLyBTQ1JBVENIMworCVdSQkwxMjhJIHdyYjAsIFxwdHIsICAzMjAKKwlXUkJMMTI4SSB3cmIxLCBccHRyLCAgMzM2CisJV1JCTDEyOEkgd3JiMiwgXHB0ciwgIDM1MgorCVdSQkwxMjhJIHdyYjMsIFxwdHIsICAzNjgKKwlXUkJMMTI4SSB3cmI0LCBccHRyLCAgMzg0CisJV1JCTDEyOEkgd3JiNSwgXHB0ciwgIDQwMAorCVdSQkwxMjhJIHdyYjYsIFxwdHIsICA0MTYKKwlXUkJMMTI4SSB3cmI3LCBccHRyLCAgNDMyCisJV1JCTDEyOEkgd3JiOCwgXHB0ciwgIDQ0OAorCVdSQkwxMjhJIHdyYjksIFxwdHIsICA0NjQKKwlXUkJMMTI4SSB3cmIxMCwgXHB0ciwgIDQ4MAorCVdSQkwxMjhJIHdyYjExLCBccHRyLCAgNDk2CisJV1JCTDEyOEkgd3JiMTIsIFxwdHIsICA1MTIKKwlXUkJMMTI4SSB3cmIxMywgXHB0ciwgIDUyOAorCVdSQkwxMjhJIHdyYjE0LCBccHRyLCAgNTQ0CisJV1JCTDEyOEkgd3JiMTUsIFxwdHIsICA1NjAKKwlXUkFMMTI4SSB3cmEwLCBccHRyLCAgNjQKKwlXUkFMMTI4SSB3cmExLCBccHRyLCAgODAKKwlXUkFMMTI4SSB3cmEyLCBccHRyLCAgOTYKKwlXUkFMMTI4SSB3cmEzLCBccHRyLCAgMTEyCisJV1JBTDEyOEkgd3JhNCwgXHB0ciwgIDEyOAorCVdSQUwxMjhJIHdyYTUsIFxwdHIsICAxNDQKKwlXUkFMMTI4SSB3cmE2LCBccHRyLCAgMTYwCisJV1JBTDEyOEkgd3JhNywgXHB0ciwgIDE3NgorCVdSQUwxMjhJIHdyYTgsIFxwdHIsICAxOTIKKwlXUkFMMTI4SSB3cmE5LCBccHRyLCAgMjA4CisJV1JBTDEyOEkgd3JhMTAsIFxwdHIsICAyMjQKKwlXUkFMMTI4SSB3cmExMSwgXHB0ciwgIDI0MAorCVdSQUwxMjhJIHdyYTEyLCBccHRyLCAgMjU2CisJV1JBTDEyOEkgd3JhMTMsIFxwdHIsICAyNzIKKwlXUkFMMTI4SSB3cmExNCwgXHB0ciwgIDI4OAorCVdSQUwxMjhJIHdyYTE1LCBccHRyLCAgMzA0CisJLnNldAkuTHhjaGFsX29mc18sIC5MeGNoYWxfb2ZzXyArIDU3NgorCS5lbmRpZgorCS5lbmRtCS8vIHhjaGFsX2NwNl9sb2FkCisKKyNkZWZpbmUgWENIQUxfQ1A2X05VTV9BVE1QUwkxCisjZGVmaW5lIFhDSEFMX1NBX05VTV9BVE1QUwkxCisKKwkvKiAgRW1wdHkgbWFjcm9zIGZvciB1bmNvbmZpZ3VyZWQgY29wcm9jZXNzb3JzOiAgKi8KKwkubWFjcm8geGNoYWxfY3AxX3N0b3JlCXAgYSBiIGMgZCBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9LTEgOyAuZW5kbQorCS5tYWNybyB4Y2hhbF9jcDFfbG9hZAlwIGEgYiBjIGQgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PS0xIDsgLmVuZG0KKwkubWFjcm8geGNoYWxfY3AyX3N0b3JlCXAgYSBiIGMgZCBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9LTEgOyAuZW5kbQorCS5tYWNybyB4Y2hhbF9jcDJfbG9hZAlwIGEgYiBjIGQgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PS0xIDsgLmVuZG0KKwkubWFjcm8geGNoYWxfY3AzX3N0b3JlCXAgYSBiIGMgZCBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9LTEgOyAuZW5kbQorCS5tYWNybyB4Y2hhbF9jcDNfbG9hZAlwIGEgYiBjIGQgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PS0xIDsgLmVuZG0KKwkubWFjcm8geGNoYWxfY3A0X3N0b3JlCXAgYSBiIGMgZCBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9LTEgOyAuZW5kbQorCS5tYWNybyB4Y2hhbF9jcDRfbG9hZAlwIGEgYiBjIGQgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PS0xIDsgLmVuZG0KKwkubWFjcm8geGNoYWxfY3A1X3N0b3JlCXAgYSBiIGMgZCBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9LTEgOyAuZW5kbQorCS5tYWNybyB4Y2hhbF9jcDVfbG9hZAlwIGEgYiBjIGQgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PS0xIDsgLmVuZG0KKwkubWFjcm8geGNoYWxfY3A3X3N0b3JlCXAgYSBiIGMgZCBjb250aW51ZT0wIG9mcz0tMSBzZWxlY3Q9LTEgOyAuZW5kbQorCS5tYWNybyB4Y2hhbF9jcDdfbG9hZAlwIGEgYiBjIGQgY29udGludWU9MCBvZnM9LTEgc2VsZWN0PS0xIDsgLmVuZG0KKworI2VuZGlmIC8qX1hURU5TQV9DT1JFX1RJRV9BU01fSCovCisKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC90aWUuaCBiL2FyY2gveHRlbnNhL3ZhcmlhbnRzL3M2MDAwL2luY2x1ZGUvdmFyaWFudC90aWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTdlYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaW5jbHVkZS92YXJpYW50L3RpZS5oCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogVGhpcyBoZWFkZXIgZmlsZSBkZXNjcmliZXMgdGhpcyBzcGVjaWZpYyBYdGVuc2EgcHJvY2Vzc29yJ3MgVElFIGV4dGVuc2lvbnMKKyAqIHRoYXQgZXh0ZW5kIGJhc2ljIFh0ZW5zYSBjb3JlIGZ1bmN0aW9uYWxpdHkuICBJdCBpcyBjdXN0b21pemVkIHRvIHRoaXMKKyAqIFh0ZW5zYSBwcm9jZXNzb3IgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwOCBUZW5zaWxpY2EgSW5jLgorICovCisKKyNpZm5kZWYgX1hURU5TQV9DT1JFX1RJRV9ICisjZGVmaW5lIF9YVEVOU0FfQ09SRV9USUVfSAorCisjZGVmaW5lIFhDSEFMX0NQX05VTQkJCTIJLyogbnVtYmVyIG9mIGNvcHJvY2Vzc29ycyAqLworI2RlZmluZSBYQ0hBTF9DUF9NQVgJCQk3CS8qIG1heCBDUCBJRCArIDEgKDAgaWYgbm9uZSkgKi8KKyNkZWZpbmUgWENIQUxfQ1BfTUFTSwkJCTB4NDEJLyogYml0bWFzayBvZiBhbGwgQ1BzIGJ5IElEICovCisjZGVmaW5lIFhDSEFMX0NQX1BPUlRfTUFTSwkJMHgwMAkvKiBiaXRtYXNrIG9mIG9ubHkgcG9ydCBDUHMgKi8KKworLyogIEJhc2ljIHBhcmFtZXRlcnMgb2YgZWFjaCBjb3Byb2Nlc3NvcjogICovCisjZGVmaW5lIFhDSEFMX0NQMF9OQU1FCQkJIkZQVSIKKyNkZWZpbmUgWENIQUxfQ1AwX0lERU5UCQkJRlBVCisjZGVmaW5lIFhDSEFMX0NQMF9TQV9TSVpFCQk3MgkvKiBzaXplIG9mIHN0YXRlIHNhdmUgYXJlYSAqLworI2RlZmluZSBYQ0hBTF9DUDBfU0FfQUxJR04JCTQJLyogbWluIGFsaWdubWVudCBvZiBzYXZlIGFyZWEgKi8KKyNkZWZpbmUgWENIQUxfQ1BfSURfRlBVCQkJMAkvKiBjb3Byb2Nlc3NvciBJRCAoMC4uNykgKi8KKyNkZWZpbmUgWENIQUxfQ1A2X05BTUUJCQkiWEFEIgorI2RlZmluZSBYQ0hBTF9DUDZfSURFTlQJCQlYQUQKKyNkZWZpbmUgWENIQUxfQ1A2X1NBX1NJWkUJCTU3NgkvKiBzaXplIG9mIHN0YXRlIHNhdmUgYXJlYSAqLworI2RlZmluZSBYQ0hBTF9DUDZfU0FfQUxJR04JCTE2CS8qIG1pbiBhbGlnbm1lbnQgb2Ygc2F2ZSBhcmVhICovCisjZGVmaW5lIFhDSEFMX0NQX0lEX1hBRAkJCTYJLyogY29wcm9jZXNzb3IgSUQgKDAuLjcpICovCisKKy8qICBGaWxsZXIgaW5mbyBmb3IgdW5hc3NpZ25lZCBjb3Byb2Nlc3NvcnMsIHRvIHNpbXBsaWZ5IGFycmF5cyBldGM6ICAqLworI2RlZmluZSBYQ0hBTF9DUDFfU0FfU0laRQkJMAorI2RlZmluZSBYQ0hBTF9DUDFfU0FfQUxJR04JCTEKKyNkZWZpbmUgWENIQUxfQ1AyX1NBX1NJWkUJCTAKKyNkZWZpbmUgWENIQUxfQ1AyX1NBX0FMSUdOCQkxCisjZGVmaW5lIFhDSEFMX0NQM19TQV9TSVpFCQkwCisjZGVmaW5lIFhDSEFMX0NQM19TQV9BTElHTgkJMQorI2RlZmluZSBYQ0hBTF9DUDRfU0FfU0laRQkJMAorI2RlZmluZSBYQ0hBTF9DUDRfU0FfQUxJR04JCTEKKyNkZWZpbmUgWENIQUxfQ1A1X1NBX1NJWkUJCTAKKyNkZWZpbmUgWENIQUxfQ1A1X1NBX0FMSUdOCQkxCisjZGVmaW5lIFhDSEFMX0NQN19TQV9TSVpFCQkwCisjZGVmaW5lIFhDSEFMX0NQN19TQV9BTElHTgkJMQorCisvKiAgU2F2ZSBhcmVhIGZvciBub24tY29wcm9jZXNzb3Igb3B0aW9uYWwgYW5kIGN1c3RvbSAoVElFKSBzdGF0ZTogICovCisjZGVmaW5lIFhDSEFMX05DUF9TQV9TSVpFCQk0CisjZGVmaW5lIFhDSEFMX05DUF9TQV9BTElHTgkJNAorCisvKiAgVG90YWwgc2F2ZSBhcmVhIGZvciBvcHRpb25hbCBhbmQgY3VzdG9tIHN0YXRlIChOQ1AgKyBDUG4pOiAgKi8KKyNkZWZpbmUgWENIQUxfVE9UQUxfU0FfU0laRQkJNjcyCS8qIHdpdGggMTYtYnl0ZSBhbGlnbiBwYWRkaW5nICovCisjZGVmaW5lIFhDSEFMX1RPVEFMX1NBX0FMSUdOCQkxNgkvKiBhY3R1YWwgbWluaW11bSBhbGlnbm1lbnQgKi8KKworLyoKKyAqIERldGFpbGVkIGNvbnRlbnRzIG9mIHNhdmUgYXJlYXMuCisgKiBOT1RFOiAgY2FsbGVyIG11c3QgZGVmaW5lIHRoZSBYQ0hBTF9TQV9SRUcgbWFjcm8gKG5vdCBkZWZpbmVkIGhlcmUpCisgKiBiZWZvcmUgZXhwYW5kaW5nIHRoZSBYQ0hBTF94eHhfU0FfTElTVCgpIG1hY3Jvcy4KKyAqCisgKiBYQ0hBTF9TQV9SRUcocyxjY3VzZWQsYWJpa2luZCxraW5kLG9wdCxuYW1lLGdhbGlnbixhbGlnbixhc2l6ZSwKKyAqCQlkYm51bSxiYXNlLHJlZ251bSxiaXRzeixnYXBzeixyZXNldCx4Li4uKQorICoKKyAqCXMgPSBwYXNzZWQgZnJvbSBYQ0hBTF8qX0xJU1QocyksIGVnLiB0byBzZWxlY3QgaG93IHRvIGV4cGFuZAorICoJY2N1c2VkID0gc2V0IGlmIHVzZWQgYnkgY29tcGlsZXIgd2l0aG91dCBzcGVjaWFsIG9wdGlvbnMgb3IgY29kZQorICoJYWJpa2luZCA9IDAgKGNhbGxlci1zYXZlZCksIDEgKGNhbGxlZS1zYXZlZCksIG9yIDIgKHRocmVhZC1nbG9iYWwpCisgKglraW5kID0gMCAoc3BlY2lhbCByZWcpLCAxIChUSUUgdXNlciByZWcpLCBvciAyIChUSUUgcmVnZmlsZSByZWcpCisgKglvcHQgPSAwIChjdXN0b20gVElFIGV4dGVuc2lvbiBvciBjb3Byb2Nlc3NvciksIG9yIDEgKG9wdGlvbmFsIHJlZykKKyAqCW5hbWUgPSBsb3dlcmNhc2UgcmVnIG5hbWUgKG5vIHF1b3RlcykKKyAqCWdhbGlnbiA9IGdyb3VwIGJ5dGUgYWxpZ25tZW50IChwb3dlciBvZiAyKSAoZ2FsaWduID49IGFsaWduKQorICoJYWxpZ24gPSByZWdpc3RlciBieXRlIGFsaWdubWVudCAocG93ZXIgb2YgMikKKyAqCWFzaXplID0gYWxsb2NhdGVkIHNpemUgaW4gYnl0ZXMgKGFzaXplKjggPT0gYml0c3ogKyBnYXBzeiArIHBhZHN6KQorICoJICAobm90IGluY2x1ZGluZyBhbnkgcGFkIGJ5dGVzIHJlcXVpcmVkIHRvIGdhbGlnbiB0aGlzIG9yIG5leHQgcmVnKQorICoJZGJudW0gPSB1bmlxdWUgdGFyZ2V0IG51bWJlciBmL2RlYnVnIChzZWUgPHh0ZW5zYS1saWJkYi1tYWNyb3MuaD4pCisgKgliYXNlID0gcmVnIHNob3J0bmFtZSB3L28gaW5kZXggKG9yIHNyPXNwZWNpYWwsIHVyPVRJRSB1c2VyIHJlZykKKyAqCXJlZ251bSA9IHJlZyBpbmRleCBpbiByZWdmaWxlLCBvciBzcGVjaWFsL1RJRS11c2VyIHJlZyBudW1iZXIKKyAqCWJpdHN6ID0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGJpdHMgKHJlZ2ZpbGUgd2lkdGgsIG9yIHVyL3NyIG1hc2sgYml0cykKKyAqCWdhcHN6ID0gaW50ZXJ2ZW5pbmcgYml0cywgaWYgYml0c3ogYml0cyBub3Qgc3RvcmVkIGNvbnRpZ3VvdXNseQorICoJKHBhZHN6ID0gcGFkIGJpdHMgYXQgZW5kIFtUSUUgcmVnZmlsZV0gb3IgYXQgbXNiaXRzIFt1cixzcl0gb2YgYXNpemUpCisgKglyZXNldCA9IHJlZ2lzdGVyIHJlc2V0IHZhbHVlIChvciAwIGlmIHVuZGVmaW5lZCBhdCByZXNldCkKKyAqCXggPSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAoMCB1bnRpbCB0aGVuKQorICoKKyAqICBUbyBmaWx0ZXIgb3V0IGNlcnRhaW4gcmVnaXN0ZXJzLCBlLmcuIHRvIGV4cGFuZCBvbmx5IHRoZSBub24tZ2xvYmFsCisgKiAgcmVnaXN0ZXJzIHVzZWQgYnkgdGhlIGNvbXBpbGVyLCB5b3UgY2FuIGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6CisgKgorICogICNkZWZpbmUgWENIQUxfU0FfUkVHKHMsY2N1c2VkLHAuLi4pCVNFTENDIyNjY3VzZWQocCkKKyAqICAjZGVmaW5lIFNFTENDMChwLi4uKQorICogICNkZWZpbmUgU0VMQ0MxKGFiaWtpbmQscC4uLikJU0VMQUsjI2FiaWtpbmQocCkKKyAqICAjZGVmaW5lIFNFTEFLMChwLi4uKQkJUkVHKHApCisgKiAgI2RlZmluZSBTRUxBSzEocC4uLikJCVJFRyhwKQorICogICNkZWZpbmUgU0VMQUsyKHAuLi4pCisgKiAgI2RlZmluZSBSRUcoa2luZCx0aWUsbmFtZSxnYWxuLGFsbixhc3osY3N6LGRibnVtLGJhc2Uscm51bSxic3oscnN0LHguLi4pIFwKKyAqCQkuLi53aGF0IHlvdSB3YW50IHRvIGV4cGFuZC4uLgorICovCisKKyNkZWZpbmUgWENIQUxfTkNQX1NBX05VTQkxCisjZGVmaW5lIFhDSEFMX05DUF9TQV9MSVNUKHMpCVwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMCwxLCAgICAgICAgICAgICBiciwgNCwgNCwgNCwweDAyMDQsICBzciw0ICAsIDE2LDAsMCwwKQorCisjZGVmaW5lIFhDSEFMX0NQMF9TQV9OVU0JMTgKKyNkZWZpbmUgWENIQUxfQ1AwX1NBX0xJU1QocykJXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgICAgICAgZmNyLCA0LCA0LCA0LDB4MDNFOCwgIHVyLDIzMiwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICAgICAgIGZzciwgNCwgNCwgNCwweDAzRTksICB1ciwyMzMsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICAgZjAsIDQsIDQsIDQsMHgwMDMwLCAgIGYsMCAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgIGYxLCA0LCA0LCA0LDB4MDAzMSwgICBmLDEgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgICBmMiwgNCwgNCwgNCwweDAwMzIsICAgZiwyICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICAgZjMsIDQsIDQsIDQsMHgwMDMzLCAgIGYsMyAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgIGY0LCA0LCA0LCA0LDB4MDAzNCwgICBmLDQgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgICBmNSwgNCwgNCwgNCwweDAwMzUsICAgZiw1ICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICAgZjYsIDQsIDQsIDQsMHgwMDM2LCAgIGYsNiAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgIGY3LCA0LCA0LCA0LDB4MDAzNywgICBmLDcgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgICBmOCwgNCwgNCwgNCwweDAwMzgsICAgZiw4ICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICAgZjksIDQsIDQsIDQsMHgwMDM5LCAgIGYsOSAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgZjEwLCA0LCA0LCA0LDB4MDAzQSwgICBmLDEwICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgIGYxMSwgNCwgNCwgNCwweDAwM0IsICAgZiwxMSAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICBmMTIsIDQsIDQsIDQsMHgwMDNDLCAgIGYsMTIgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICAgZjEzLCA0LCA0LCA0LDB4MDAzRCwgICBmLDEzICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgIGYxNCwgNCwgNCwgNCwweDAwM0UsICAgZiwxNCAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgICBmMTUsIDQsIDQsIDQsMHgwMDNGLCAgIGYsMTUgLCAzMiwwLDAsMCkKKworI2RlZmluZSBYQ0hBTF9DUDFfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1AxX1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworI2RlZmluZSBYQ0hBTF9DUDJfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1AyX1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworI2RlZmluZSBYQ0hBTF9DUDNfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1AzX1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworI2RlZmluZSBYQ0hBTF9DUDRfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1A0X1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworI2RlZmluZSBYQ0hBTF9DUDVfU0FfTlVNCTAKKyNkZWZpbmUgWENIQUxfQ1A1X1NBX0xJU1QocykJLyogZW1wdHkgKi8KKworI2RlZmluZSBYQ0hBTF9DUDZfU0FfTlVNCTQ2CisjZGVmaW5lIFhDSEFMX0NQNl9TQV9MSVNUKHMpCVwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICAgIGxkY2JoaSwxNiwgNCwgNCwweDAzMDAsICB1ciwwICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgICBsZGNibG8sIDQsIDQsIDQsMHgwMzAxLCAgdXIsMSAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgICAgc3RjYmhpLCA0LCA0LCA0LDB4MDMwMiwgIHVyLDIgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICAgIHN0Y2JsbywgNCwgNCwgNCwweDAzMDMsICB1ciwzICAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgbGRicmJhc2UsIDQsIDQsIDQsMHgwMzA4LCAgdXIsOCAgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgICBsZGJyb2ZmLCA0LCA0LCA0LDB4MDMwOSwgIHVyLDkgICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICAgbGRicmluYywgNCwgNCwgNCwweDAzMEEsICB1ciwxMCAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgc3RicmJhc2UsIDQsIDQsIDQsMHgwMzBCLCAgdXIsMTEgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgICBzdGJyb2ZmLCA0LCA0LCA0LDB4MDMwQywgIHVyLDEyICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICAgc3RicmluYywgNCwgNCwgNCwweDAzMEQsICB1ciwxMyAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgc2NyYXRjaDAsIDQsIDQsIDQsMHgwMzE4LCAgdXIsMjQgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwxLDAsICAgICAgIHNjcmF0Y2gxLCA0LCA0LCA0LDB4MDMxOSwgIHVyLDI1ICwgMzIsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMSwwLCAgICAgICBzY3JhdGNoMiwgNCwgNCwgNCwweDAzMUEsICB1ciwyNiAsIDMyLDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDEsMCwgICAgICAgc2NyYXRjaDMsIDQsIDQsIDQsMHgwMzFCLCAgdXIsMjcgLCAzMiwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmEwLDE2LDE2LDE2LDB4MTAxMCwgd3JhLDAgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JhMSwxNiwxNiwxNiwweDEwMTEsIHdyYSwxICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYTIsMTYsMTYsMTYsMHgxMDEyLCB3cmEsMiAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmEzLDE2LDE2LDE2LDB4MTAxMywgd3JhLDMgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JhNCwxNiwxNiwxNiwweDEwMTQsIHdyYSw0ICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYTUsMTYsMTYsMTYsMHgxMDE1LCB3cmEsNSAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmE2LDE2LDE2LDE2LDB4MTAxNiwgd3JhLDYgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JhNywxNiwxNiwxNiwweDEwMTcsIHdyYSw3ICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYTgsMTYsMTYsMTYsMHgxMDE4LCB3cmEsOCAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmE5LDE2LDE2LDE2LDB4MTAxOSwgd3JhLDkgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICB3cmExMCwxNiwxNiwxNiwweDEwMUEsIHdyYSwxMCAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgd3JhMTEsMTYsMTYsMTYsMHgxMDFCLCB3cmEsMTEgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgIHdyYTEyLDE2LDE2LDE2LDB4MTAxQywgd3JhLDEyICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICB3cmExMywxNiwxNiwxNiwweDEwMUQsIHdyYSwxMyAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgd3JhMTQsMTYsMTYsMTYsMHgxMDFFLCB3cmEsMTQgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgIHdyYTE1LDE2LDE2LDE2LDB4MTAxRiwgd3JhLDE1ICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JiMCwxNiwxNiwxNiwweDEwMjAsIHdyYiwwICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYjEsMTYsMTYsMTYsMHgxMDIxLCB3cmIsMSAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmIyLDE2LDE2LDE2LDB4MTAyMiwgd3JiLDIgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JiMywxNiwxNiwxNiwweDEwMjMsIHdyYiwzICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYjQsMTYsMTYsMTYsMHgxMDI0LCB3cmIsNCAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmI1LDE2LDE2LDE2LDB4MTAyNSwgd3JiLDUgICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JiNiwxNiwxNiwxNiwweDEwMjYsIHdyYiw2ICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgIHdyYjcsMTYsMTYsMTYsMHgxMDI3LCB3cmIsNyAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgICB3cmI4LDE2LDE2LDE2LDB4MTAyOCwgd3JiLDggICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICAgd3JiOSwxNiwxNiwxNiwweDEwMjksIHdyYiw5ICAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgd3JiMTAsMTYsMTYsMTYsMHgxMDJBLCB3cmIsMTAgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgIHdyYjExLDE2LDE2LDE2LDB4MTAyQiwgd3JiLDExICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICB3cmIxMiwxNiwxNiwxNiwweDEwMkMsIHdyYiwxMiAsMTI4LDAsMCwwKSBcCisgWENIQUxfU0FfUkVHKHMsMCwwLDIsMCwgICAgICAgICAgd3JiMTMsMTYsMTYsMTYsMHgxMDJELCB3cmIsMTMgLDEyOCwwLDAsMCkgXAorIFhDSEFMX1NBX1JFRyhzLDAsMCwyLDAsICAgICAgICAgIHdyYjE0LDE2LDE2LDE2LDB4MTAyRSwgd3JiLDE0ICwxMjgsMCwwLDApIFwKKyBYQ0hBTF9TQV9SRUcocywwLDAsMiwwLCAgICAgICAgICB3cmIxNSwxNiwxNiwxNiwweDEwMkYsIHdyYiwxNSAsMTI4LDAsMCwwKQorCisjZGVmaW5lIFhDSEFMX0NQN19TQV9OVU0JMAorI2RlZmluZSBYQ0hBTF9DUDdfU0FfTElTVChzKQkvKiBlbXB0eSAqLworCisvKiBCeXRlIGxlbmd0aCBvZiBpbnN0cnVjdGlvbiBmcm9tIGl0cyBmaXJzdCBuaWJibGUgKG9wMCBmaWVsZCksIHBlciBGTElYLiAgKi8KKyNkZWZpbmUgWENIQUxfT1AwX0ZPUk1BVF9MRU5HVEhTCTMsMywzLDMsMywzLDMsMywyLDIsMiwyLDIsMiw4LDgKKworI2VuZGlmIC8qX1hURU5TQV9DT1JFX1RJRV9IKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaXJxLmMgYi9hcmNoL3h0ZW5zYS92YXJpYW50cy9zNjAwMC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjUxZTMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94dGVuc2EvdmFyaWFudHMvczYwMDAvaXJxLmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIHM2MDAwIGlycSBjcm9zc2JhcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBlbWxpeCBHbWJICisgKiBBdXRob3JzOglKb2hhbm5lcyBXZWluZXIgPGp3QGVtbGl4LmNvbT4KKyAqCQlPc2thciBTY2hpcm1lciA8b3NAZW1saXguY29tPgorICovCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8dmFyaWFudC9oYXJkd2FyZS5oPgorCisvKiBTNl9SRUdfSU5UQyAqLworI2RlZmluZSBJTlRDX1NUQVRVUwkweDAwMAorI2RlZmluZSBJTlRDX1JBVwkweDAxMAorI2RlZmluZSBJTlRDX1NUQVRVU19BRwkweDEwMAorI2RlZmluZSBJTlRDX0NGRyhuKQkoMHgyMDAgKyA0ICogKG4pKQorCisvKgorICogVGhlIHM2MDAwIGhhcyBhIGNyb3NzYmFyIHRoYXQgbXVsdGlwbGV4ZXMgaW50ZXJydXB0IG91dHB1dCBsaW5lcworICogZnJvbSB0aGUgcGVyaXBoZXJhbHMgdG8gaW5wdXQgbGluZXMgb24gdGhlIHh0ZW5zYSBjb3JlLgorICoKKyAqIFdlIGxlYXZlIHRoZSBtYXBwaW5nIGRlY2lzaW9ucyB0byB0aGUgcGxhdGZvcm0gYXMgaXQgZGVwZW5kcyBvbiB0aGUKKyAqIGFjdHVhbGx5IGNvbm5lY3RlZCBwZXJpcGhlcmFscyB3aGljaCBkaXN0cmlidXRpb24gbWFrZXMgc2Vuc2UuCisgKi8KK2V4dGVybiBjb25zdCBzaWduZWQgY2hhciAqcGxhdGZvcm1faXJxX21hcHBpbmdzW05SX0lSUVNdOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzY3BfdG9faW50Y19lbmFibGVbXSA9IHsKKyNkZWZpbmUJVE9fSU5UQ19FTkFCTEUobikJKCgobikgPDwgMSkgKyAxKQorCVRPX0lOVENfRU5BQkxFKDApLAorCVRPX0lOVENfRU5BQkxFKDEpLAorCVRPX0lOVENfRU5BQkxFKDIpLAorCVRPX0lOVENfRU5BQkxFKDMpLAorCVRPX0lOVENfRU5BQkxFKDQpLAorCVRPX0lOVENfRU5BQkxFKDUpLAorCVRPX0lOVENfRU5BQkxFKDYpLAorCVRPX0lOVENfRU5BQkxFKDcpLAorCVRPX0lOVENfRU5BQkxFKDgpLAorCVRPX0lOVENfRU5BQkxFKDkpLAorCVRPX0lOVENfRU5BQkxFKDEwKSwKKwlUT19JTlRDX0VOQUJMRSgxMSksCisJVE9fSU5UQ19FTkFCTEUoMTIpLAorCS0xLAorCS0xLAorCVRPX0lOVENfRU5BQkxFKDEzKSwKKwktMSwKKwlUT19JTlRDX0VOQUJMRSgxNCksCisJLTEsCisJVE9fSU5UQ19FTkFCTEUoMTUpLAorI3VuZGVmCVRPX0lOVENfRU5BQkxFCit9OworCitzdGF0aWMgdm9pZCBpcnFfc2V0KHVuc2lnbmVkIGludCBpcnEsIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgbG9uZyBlbjsKKwljb25zdCBzaWduZWQgY2hhciAqbSA9IHBsYXRmb3JtX2lycV9tYXBwaW5nc1tpcnFdOworCisJaWYgKCFtKQorCQlyZXR1cm47CisJZW4gPSBlbmFibGUgPyBzY3BfdG9faW50Y19lbmFibGVbaXJxXSA6IDA7CisJd2hpbGUgKCptID49IDApIHsKKwkJd3JpdGVsKGVuLCBTNl9SRUdfSU5UQyArIElOVENfQ0ZHKCptKSk7CisJCW0rKzsKKwl9Cit9CisKK3ZvaWQgdmFyaWFudF9pcnFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJaXJxX3NldChpcnEsIDEpOworfQorCit2b2lkIHZhcmlhbnRfaXJxX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnFfc2V0KGlycSwgMCk7Cit9CmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnIGIvYmxvY2svS2NvbmZpZwppbmRleCAwY2JiM2I4Li5lN2QxMjc4IDEwMDY0NAotLS0gYS9ibG9jay9LY29uZmlnCisrKyBiL2Jsb2NrL0tjb25maWcKQEAgLTQ0LDIyICs0NCw2IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBCTEtfREVWX0lPX1RSQUNFCi0JYm9vbCAiU3VwcG9ydCBmb3IgdHJhY2luZyBibG9jayBpbyBhY3Rpb25zIgotCWRlcGVuZHMgb24gU1lTRlMKLQlzZWxlY3QgUkVMQVkKLQlzZWxlY3QgREVCVUdfRlMKLQlzZWxlY3QgVFJBQ0VQT0lOVFMKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gdHJhY2UgdGhlIGJsb2NrIGxheWVyIGFjdGlvbnMKLQkgIG9uIGEgZ2l2ZW4gcXVldWUuIFRyYWNpbmcgYWxsb3dzIHlvdSB0byBzZWUgYW55IHRyYWZmaWMgaGFwcGVuaW5nCi0JICBvbiBhIGJsb2NrIGRldmljZSBxdWV1ZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gKGFuZCB0aGUgdXNlcnNwYWNlCi0JICBzdXBwb3J0IHRvb2xzIG5lZWRlZCksIGZldGNoIHRoZSBibGt0cmFjZSB0b29scyBmcm9tOgotCi0JICBnaXQ6Ly9naXQua2VybmVsLmRrL2Jsa3RyYWNlLmdpdAotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgQkxLX0RFVl9CU0cKIAlib29sICJCbG9jayBsYXllciBTRyBzdXBwb3J0IHY0IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9ibG9jay9NYWtlZmlsZSBiL2Jsb2NrL01ha2VmaWxlCmluZGV4IGJmZTczMDQuLmU5ZmE0ZGQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL01ha2VmaWxlCisrKyBiL2Jsb2NrL01ha2VmaWxlCkBAIC0xMyw2ICsxMyw1IEBACiBvYmotJChDT05GSUdfSU9TQ0hFRF9ERUFETElORSkJKz0gZGVhZGxpbmUtaW9zY2hlZC5vCiBvYmotJChDT05GSUdfSU9TQ0hFRF9DRlEpCSs9IGNmcS1pb3NjaGVkLm8KIAotb2JqLSQoQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UpCSs9IGJsa3RyYWNlLm8KIG9iai0kKENPTkZJR19CTE9DS19DT01QQVQpCSs9IGNvbXBhdF9pb2N0bC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkpCSs9IGJsay1pbnRlZ3JpdHkubwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXNvZnRpcnEuYyBiL2Jsb2NrL2Jsay1zb2Z0aXJxLmMKaW5kZXggY2UwZWZjNi4uZWU5YzIxNiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXNvZnRpcnEuYworKysgYi9ibG9jay9ibGstc29mdGlycS5jCkBAIC02NCw3ICs2NCw3IEBACiAJCWRhdGEtPmluZm8gPSBycTsKIAkJZGF0YS0+ZmxhZ3MgPSAwOwogCi0JCV9fc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZGF0YSk7CisJCV9fc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZGF0YSwgMCk7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLmggYi9ibG9jay9ibGsuaAppbmRleCAwZGNlOTJjLi4zZWU5NDM1IDEwMDY0NAotLS0gYS9ibG9jay9ibGsuaAorKysgYi9ibG9jay9ibGsuaApAQCAtMTAyLDcgKzEwMiw3IEBACiAJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2sgPSBjcHVfY29yZWdyb3VwX21hc2soY3B1KTsKIAlyZXR1cm4gY3B1bWFza19maXJzdChtYXNrKTsKICNlbGlmIGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLQlyZXR1cm4gZmlyc3RfY3B1KHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKKwlyZXR1cm4gY3B1bWFza19maXJzdCh0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpKTsKICNlbHNlCiAJcmV0dXJuIGNwdTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrdHJhY2UuYyBiL2Jsb2NrL2Jsa3RyYWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyODEyMGEuLjAwMDAwMDAKLS0tIGEvYmxvY2svYmxrdHJhY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDg2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8dHJhY2UvYmxvY2suaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi1zdGF0aWMgdW5zaWduZWQgaW50IGJsa3RyYWNlX3NlcSBfX3JlYWRfbW9zdGx5ID0gMTsKLQotLyogR2xvYmFsIHJlZmVyZW5jZSBjb3VudCBvZiBwcm9iZXMgKi8KLXN0YXRpYyBERUZJTkVfTVVURVgoYmxrX3Byb2JlX211dGV4KTsKLXN0YXRpYyBhdG9taWNfdCBibGtfcHJvYmVzX3JlZiA9IEFUT01JQ19JTklUKDApOwotCi1zdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTsKLXN0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpOwotCi0vKgotICogU2VuZCBvdXQgYSBub3RpZnkgbWVzc2FnZS4KLSAqLwotc3RhdGljIHZvaWQgdHJhY2Vfbm90ZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgcGlkX3QgcGlkLCBpbnQgYWN0aW9uLAotCQkgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0OwotCi0JdCA9IHJlbGF5X3Jlc2VydmUoYnQtPnJjaGFuLCBzaXplb2YoKnQpICsgbGVuKTsKLQlpZiAodCkgewotCQljb25zdCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JCXQtPm1hZ2ljID0gQkxLX0lPX1RSQUNFX01BR0lDIHwgQkxLX0lPX1RSQUNFX1ZFUlNJT047Ci0JCXQtPnRpbWUgPSBrdGltZV90b19ucyhrdGltZV9nZXQoKSk7Ci0JCXQtPmRldmljZSA9IGJ0LT5kZXY7Ci0JCXQtPmFjdGlvbiA9IGFjdGlvbjsKLQkJdC0+cGlkID0gcGlkOwotCQl0LT5jcHUgPSBjcHU7Ci0JCXQtPnBkdV9sZW4gPSBsZW47Ci0JCW1lbWNweSgodm9pZCAqKSB0ICsgc2l6ZW9mKCp0KSwgZGF0YSwgbGVuKTsKLQl9Ci19Ci0KLS8qCi0gKiBTZW5kIG91dCBhIG5vdGlmeSBmb3IgdGhpcyBwcm9jZXNzLCBpZiB3ZSBoYXZlbid0IGRvbmUgc28gc2luY2UgYSB0cmFjZQotICogc3RhcnRlZAotICovCi1zdGF0aWMgdm9pZCB0cmFjZV9ub3RlX3RzayhzdHJ1Y3QgYmxrX3RyYWNlICpidCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JdHNrLT5idHJhY2Vfc2VxID0gYmxrdHJhY2Vfc2VxOwotCXRyYWNlX25vdGUoYnQsIHRzay0+cGlkLCBCTEtfVE5fUFJPQ0VTUywgdHNrLT5jb21tLCBzaXplb2YodHNrLT5jb21tKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyYWNlX25vdGVfdGltZShzdHJ1Y3QgYmxrX3RyYWNlICpidCkKLXsKLQlzdHJ1Y3QgdGltZXNwZWMgbm93OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHdvcmRzWzJdOwotCi0JZ2V0bnN0aW1lb2ZkYXkoJm5vdyk7Ci0Jd29yZHNbMF0gPSBub3cudHZfc2VjOwotCXdvcmRzWzFdID0gbm93LnR2X25zZWM7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdHJhY2Vfbm90ZShidCwgMCwgQkxLX1ROX1RJTUVTVEFNUCwgd29yZHMsIHNpemVvZih3b3JkcykpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotdm9pZCBfX3RyYWNlX25vdGVfbWVzc2FnZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JaW50IG47Ci0JdmFfbGlzdCBhcmdzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JY2hhciAqYnVmOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWJ1ZiA9IHBlcl9jcHVfcHRyKGJ0LT5tc2dfZGF0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCW4gPSB2c2NucHJpbnRmKGJ1ZiwgQkxLX1ROX01BWF9NU0csIGZtdCwgYXJncyk7Ci0JdmFfZW5kKGFyZ3MpOwotCi0JdHJhY2Vfbm90ZShidCwgMCwgQkxLX1ROX01FU1NBR0UsIGJ1Ziwgbik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoX190cmFjZV9ub3RlX21lc3NhZ2UpOwotCi1zdGF0aWMgaW50IGFjdF9sb2dfY2hlY2soc3RydWN0IGJsa190cmFjZSAqYnQsIHUzMiB3aGF0LCBzZWN0b3JfdCBzZWN0b3IsCi0JCQkgcGlkX3QgcGlkKQotewotCWlmICgoKGJ0LT5hY3RfbWFzayA8PCBCTEtfVENfU0hJRlQpICYgd2hhdCkgPT0gMCkKLQkJcmV0dXJuIDE7Ci0JaWYgKHNlY3RvciA8IGJ0LT5zdGFydF9sYmEgfHwgc2VjdG9yID4gYnQtPmVuZF9sYmEpCi0JCXJldHVybiAxOwotCWlmIChidC0+cGlkICYmIHBpZCAhPSBidC0+cGlkKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogRGF0YSBkaXJlY3Rpb24gYml0IGxvb2t1cAotICovCi1zdGF0aWMgdTMyIGRkaXJfYWN0WzJdIF9fcmVhZF9tb3N0bHkgPSB7IEJMS19UQ19BQ1QoQkxLX1RDX1JFQUQpLCBCTEtfVENfQUNUKEJMS19UQ19XUklURSkgfTsKLQotLyogVGhlIGlsb2cyKCkgY2FsbHMgZmFsbCBvdXQgYmVjYXVzZSB0aGV5J3JlIGNvbnN0YW50ICovCi0jZGVmaW5lIE1BU0tfVENfQklUKHJ3LCBfX25hbWUpICggKHJ3ICYgKDEgPDwgQklPX1JXXyAjIyBfX25hbWUpKSA8PCBcCi0JICAoaWxvZzIoQkxLX1RDXyAjIyBfX25hbWUpICsgQkxLX1RDX1NISUZUIC0gQklPX1JXXyAjIyBfX25hbWUpICkKLQotLyoKLSAqIFRoZSB3b3JrZXIgZm9yIHRoZSB2YXJpb3VzIGJsa19hZGRfdHJhY2UqKCkgdHlwZXMuIEZpbGxzIG91dCBhCi0gKiBibGtfaW9fdHJhY2Ugc3RydWN0dXJlIGFuZCBwbGFjZXMgaXQgaW4gYSBwZXItY3B1IHN1YmJ1ZmZlci4KLSAqLwotc3RhdGljIHZvaWQgX19ibGtfYWRkX3RyYWNlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzZWN0b3JfdCBzZWN0b3IsIGludCBieXRlcywKLQkJICAgICBpbnQgcncsIHUzMiB3aGF0LCBpbnQgZXJyb3IsIGludCBwZHVfbGVuLCB2b2lkICpwZHVfZGF0YSkKLXsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7Ci0Jc3RydWN0IGJsa19pb190cmFjZSAqdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgKnNlcXVlbmNlOwotCXBpZF90IHBpZDsKLQlpbnQgY3B1OwotCi0JaWYgKHVubGlrZWx5KGJ0LT50cmFjZV9zdGF0ZSAhPSBCbGt0cmFjZV9ydW5uaW5nKSkKLQkJcmV0dXJuOwotCi0Jd2hhdCB8PSBkZGlyX2FjdFtydyAmIFdSSVRFXTsKLQl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBCQVJSSUVSKTsKLQl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBTWU5DSU8pOwotCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIEFIRUFEKTsKLQl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBNRVRBKTsKLQl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBESVNDQVJEKTsKLQotCXBpZCA9IHRzay0+cGlkOwotCWlmICh1bmxpa2VseShhY3RfbG9nX2NoZWNrKGJ0LCB3aGF0LCBzZWN0b3IsIHBpZCkpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIEEgd29yZCBhYm91dCB0aGUgbG9ja2luZyBoZXJlIC0gd2UgZGlzYWJsZSBpbnRlcnJ1cHRzIHRvIHJlc2VydmUKLQkgKiBzb21lIHNwYWNlIGluIHRoZSByZWxheSBwZXItY3B1IGJ1ZmZlciwgdG8gcHJldmVudCBhbiBpcnEKLQkgKiBmcm9tIGNvbWluZyBpbiBhbmQgc3RlcHBpbmcgb24gb3VyIHRvZXMuCi0JICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KHRzay0+YnRyYWNlX3NlcSAhPSBibGt0cmFjZV9zZXEpKQotCQl0cmFjZV9ub3RlX3RzayhidCwgdHNrKTsKLQotCXQgPSByZWxheV9yZXNlcnZlKGJ0LT5yY2hhbiwgc2l6ZW9mKCp0KSArIHBkdV9sZW4pOwotCWlmICh0KSB7Ci0JCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQkJc2VxdWVuY2UgPSBwZXJfY3B1X3B0cihidC0+c2VxdWVuY2UsIGNwdSk7Ci0KLQkJdC0+bWFnaWMgPSBCTEtfSU9fVFJBQ0VfTUFHSUMgfCBCTEtfSU9fVFJBQ0VfVkVSU0lPTjsKLQkJdC0+c2VxdWVuY2UgPSArKygqc2VxdWVuY2UpOwotCQl0LT50aW1lID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOwotCQl0LT5zZWN0b3IgPSBzZWN0b3I7Ci0JCXQtPmJ5dGVzID0gYnl0ZXM7Ci0JCXQtPmFjdGlvbiA9IHdoYXQ7Ci0JCXQtPnBpZCA9IHBpZDsKLQkJdC0+ZGV2aWNlID0gYnQtPmRldjsKLQkJdC0+Y3B1ID0gY3B1OwotCQl0LT5lcnJvciA9IGVycm9yOwotCQl0LT5wZHVfbGVuID0gcGR1X2xlbjsKLQotCQlpZiAocGR1X2xlbikKLQkJCW1lbWNweSgodm9pZCAqKSB0ICsgc2l6ZW9mKCp0KSwgcGR1X2RhdGEsIHBkdV9sZW4pOwotCX0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZW50cnkgKmJsa190cmVlX3Jvb3Q7Ci1zdGF0aWMgREVGSU5FX01VVEVYKGJsa190cmVlX211dGV4KTsKLQotc3RhdGljIHZvaWQgYmxrX3RyYWNlX2NsZWFudXAoc3RydWN0IGJsa190cmFjZSAqYnQpCi17Ci0JZGVidWdmc19yZW1vdmUoYnQtPm1zZ19maWxlKTsKLQlkZWJ1Z2ZzX3JlbW92ZShidC0+ZHJvcHBlZF9maWxlKTsKLQlyZWxheV9jbG9zZShidC0+cmNoYW4pOwotCWZyZWVfcGVyY3B1KGJ0LT5zZXF1ZW5jZSk7Ci0JZnJlZV9wZXJjcHUoYnQtPm1zZ19kYXRhKTsKLQlrZnJlZShidCk7Ci0JbXV0ZXhfbG9jaygmYmxrX3Byb2JlX211dGV4KTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYmxrX3Byb2Jlc19yZWYpKQotCQlibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cygpOwotCW11dGV4X3VubG9jaygmYmxrX3Byb2JlX211dGV4KTsKLX0KLQotaW50IGJsa190cmFjZV9yZW1vdmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQ7Ci0KLQlidCA9IHhjaGcoJnEtPmJsa190cmFjZSwgTlVMTCk7Ci0JaWYgKCFidCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYnQtPnRyYWNlX3N0YXRlID09IEJsa3RyYWNlX3NldHVwIHx8Ci0JICAgIGJ0LT50cmFjZV9zdGF0ZSA9PSBCbGt0cmFjZV9zdG9wcGVkKQotCQlibGtfdHJhY2VfY2xlYW51cChidCk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9yZW1vdmUpOwotCi1zdGF0aWMgaW50IGJsa19kcm9wcGVkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0JZmlscC0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBibGtfZHJvcHBlZF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzE2XTsKLQotCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwgYXRvbWljX3JlYWQoJmJ0LT5kcm9wcGVkKSk7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmZmVyLCBjb3VudCwgcHBvcywgYnVmLCBzdHJsZW4oYnVmKSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJsa19kcm9wcGVkX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLm9wZW4gPQkJYmxrX2Ryb3BwZWRfb3BlbiwKLQkucmVhZCA9CQlibGtfZHJvcHBlZF9yZWFkLAotfTsKLQotc3RhdGljIGludCBibGtfbXNnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0JZmlscC0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBibGtfbXNnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgKm1zZzsKLQlzdHJ1Y3QgYmxrX3RyYWNlICpidDsKLQotCWlmIChjb3VudCA+IEJMS19UTl9NQVhfTVNHKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1zZyA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOwotCWlmIChtc2cgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIobXNnLCBidWZmZXIsIGNvdW50KSkgewotCQlrZnJlZShtc2cpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlidCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlfX3RyYWNlX25vdGVfbWVzc2FnZShidCwgIiVzIiwgbXNnKTsKLQlrZnJlZShtc2cpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibGtfbXNnX2ZvcHMgPSB7Ci0JLm93bmVyID0JVEhJU19NT0RVTEUsCi0JLm9wZW4gPQkJYmxrX21zZ19vcGVuLAotCS53cml0ZSA9CWJsa19tc2dfd3JpdGUsCi19OwotCi0vKgotICogS2VlcCB0cmFjayBvZiBob3cgbWFueSB0aW1lcyB3ZSBlbmNvdW50ZXJlZCBhIGZ1bGwgc3ViYnVmZmVyLCB0byBhaWQKLSAqIHRoZSB1c2VyIHNwYWNlIGFwcCBpbiB0ZWxsaW5nIGhvdyBtYW55IGxvc3QgZXZlbnRzIHRoZXJlIHdlcmUuCi0gKi8KLXN0YXRpYyBpbnQgYmxrX3N1YmJ1Zl9zdGFydF9jYWxsYmFjayhzdHJ1Y3QgcmNoYW5fYnVmICpidWYsIHZvaWQgKnN1YmJ1ZiwKLQkJCQkgICAgIHZvaWQgKnByZXZfc3ViYnVmLCBzaXplX3QgcHJldl9wYWRkaW5nKQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0OwotCi0JaWYgKCFyZWxheV9idWZfZnVsbChidWYpKQotCQlyZXR1cm4gMTsKLQotCWJ0ID0gYnVmLT5jaGFuLT5wcml2YXRlX2RhdGE7Ci0JYXRvbWljX2luYygmYnQtPmRyb3BwZWQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJsa19yZW1vdmVfYnVmX2ZpbGVfY2FsbGJhY2soc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7Ci0JZGVidWdmc19yZW1vdmUoZGVudHJ5KTsKLQotCS8qCi0JKiB0aGlzIHdpbGwgZmFpbCBmb3IgYWxsIGJ1dCB0aGUgbGFzdCBmaWxlLCBidXQgdGhhdCBpcyBvay4gd2hhdCB3ZQotCSogY2FyZSBhYm91dCBpcyB0aGUgdG9wIGxldmVsIGJ1dHMtPm5hbWUgZGlyZWN0b3J5IGdvaW5nIGF3YXksIHdoZW4KLQkqIHRoZSBsYXN0IHRyYWNlIGZpbGUgaXMgZ29uZS4gVGhlbiB3ZSBkb24ndCBoYXZlIHRvIHJtZGlyKCkgdGhhdAotCSogbWFudWFsbHkgb24gdHJhY2Ugc3RvcCwgc28gaXQgbmljZWx5IHNvbHZlcyB0aGUgaXNzdWUgd2l0aAotCSogZm9yY2Uga2lsbGluZyBvZiBydW5uaW5nIHRyYWNlcy4KLQkqLwotCi0JZGVidWdmc19yZW1vdmUocGFyZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBkZW50cnkgKmJsa19jcmVhdGVfYnVmX2ZpbGVfY2FsbGJhY2soY29uc3QgY2hhciAqZmlsZW5hbWUsCi0JCQkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCi0JCQkJCQkgICBpbnQgbW9kZSwKLQkJCQkJCSAgIHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKLQkJCQkJCSAgIGludCAqaXNfZ2xvYmFsKQotewotCXJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZpbGVuYW1lLCBtb2RlLCBwYXJlbnQsIGJ1ZiwKLQkJCQkJJnJlbGF5X2ZpbGVfb3BlcmF0aW9ucyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzIGJsa19yZWxheV9jYWxsYmFja3MgPSB7Ci0JLnN1YmJ1Zl9zdGFydAkJPSBibGtfc3ViYnVmX3N0YXJ0X2NhbGxiYWNrLAotCS5jcmVhdGVfYnVmX2ZpbGUJPSBibGtfY3JlYXRlX2J1Zl9maWxlX2NhbGxiYWNrLAotCS5yZW1vdmVfYnVmX2ZpbGUJPSBibGtfcmVtb3ZlX2J1Zl9maWxlX2NhbGxiYWNrLAotfTsKLQotLyoKLSAqIFNldHVwIGV2ZXJ5dGhpbmcgcmVxdWlyZWQgdG8gc3RhcnQgdHJhY2luZwotICovCi1pbnQgZG9fYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsCi0JCQlzdHJ1Y3QgYmxrX3VzZXJfdHJhY2Vfc2V0dXAgKmJ1dHMpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqb2xkX2J0LCAqYnQgPSBOVUxMOwotCXN0cnVjdCBkZW50cnkgKmRpciA9IE5VTEw7Ci0JaW50IHJldCwgaTsKLQotCWlmICghYnV0cy0+YnVmX3NpemUgfHwgIWJ1dHMtPmJ1Zl9ucikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJuY3B5KGJ1dHMtPm5hbWUsIG5hbWUsIEJMS1RSQUNFX0JERVZfU0laRSk7Ci0JYnV0cy0+bmFtZVtCTEtUUkFDRV9CREVWX1NJWkUgLSAxXSA9ICdcMCc7Ci0KLQkvKgotCSAqIHNvbWUgZGV2aWNlIG5hbWVzIGhhdmUgbGFyZ2VyIHBhdGhzIC0gY29udmVydCB0aGUgc2xhc2hlcwotCSAqIHRvIHVuZGVyc2NvcmVzIGZvciB0aGlzIHRvIHdvcmsgYXMgZXhwZWN0ZWQKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc3RybGVuKGJ1dHMtPm5hbWUpOyBpKyspCi0JCWlmIChidXRzLT5uYW1lW2ldID09ICcvJykKLQkJCWJ1dHMtPm5hbWVbaV0gPSAnXyc7Ci0KLQlyZXQgPSAtRU5PTUVNOwotCWJ0ID0ga3phbGxvYyhzaXplb2YoKmJ0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidCkKLQkJZ290byBlcnI7Ci0KLQlidC0+c2VxdWVuY2UgPSBhbGxvY19wZXJjcHUodW5zaWduZWQgbG9uZyk7Ci0JaWYgKCFidC0+c2VxdWVuY2UpCi0JCWdvdG8gZXJyOwotCi0JYnQtPm1zZ19kYXRhID0gX19hbGxvY19wZXJjcHUoQkxLX1ROX01BWF9NU0csIF9fYWxpZ25vZl9fKGNoYXIpKTsKLQlpZiAoIWJ0LT5tc2dfZGF0YSkKLQkJZ290byBlcnI7Ci0KLQlyZXQgPSAtRU5PRU5UOwotCi0JaWYgKCFibGtfdHJlZV9yb290KSB7Ci0JCWJsa190cmVlX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImJsb2NrIiwgTlVMTCk7Ci0JCWlmICghYmxrX3RyZWVfcm9vdCkKLQkJCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihidXRzLT5uYW1lLCBibGtfdHJlZV9yb290KTsKLQotCWlmICghZGlyKQotCQlnb3RvIGVycjsKLQotCWJ0LT5kaXIgPSBkaXI7Ci0JYnQtPmRldiA9IGRldjsKLQlhdG9taWNfc2V0KCZidC0+ZHJvcHBlZCwgMCk7Ci0KLQlyZXQgPSAtRUlPOwotCWJ0LT5kcm9wcGVkX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkcm9wcGVkIiwgMDQ0NCwgZGlyLCBidCwgJmJsa19kcm9wcGVkX2ZvcHMpOwotCWlmICghYnQtPmRyb3BwZWRfZmlsZSkKLQkJZ290byBlcnI7Ci0KLQlidC0+bXNnX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtc2ciLCAwMjIyLCBkaXIsIGJ0LCAmYmxrX21zZ19mb3BzKTsKLQlpZiAoIWJ0LT5tc2dfZmlsZSkKLQkJZ290byBlcnI7Ci0KLQlidC0+cmNoYW4gPSByZWxheV9vcGVuKCJ0cmFjZSIsIGRpciwgYnV0cy0+YnVmX3NpemUsCi0JCQkJYnV0cy0+YnVmX25yLCAmYmxrX3JlbGF5X2NhbGxiYWNrcywgYnQpOwotCWlmICghYnQtPnJjaGFuKQotCQlnb3RvIGVycjsKLQotCWJ0LT5hY3RfbWFzayA9IGJ1dHMtPmFjdF9tYXNrOwotCWlmICghYnQtPmFjdF9tYXNrKQotCQlidC0+YWN0X21hc2sgPSAodTE2KSAtMTsKLQotCWJ0LT5zdGFydF9sYmEgPSBidXRzLT5zdGFydF9sYmE7Ci0JYnQtPmVuZF9sYmEgPSBidXRzLT5lbmRfbGJhOwotCWlmICghYnQtPmVuZF9sYmEpCi0JCWJ0LT5lbmRfbGJhID0gLTFVTEw7Ci0KLQlidC0+cGlkID0gYnV0cy0+cGlkOwotCWJ0LT50cmFjZV9zdGF0ZSA9IEJsa3RyYWNlX3NldHVwOwotCi0JbXV0ZXhfbG9jaygmYmxrX3Byb2JlX211dGV4KTsKLQlpZiAoYXRvbWljX2FkZF9yZXR1cm4oMSwgJmJsa19wcm9iZXNfcmVmKSA9PSAxKSB7Ci0JCXJldCA9IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpOwotCQlpZiAocmV0KQotCQkJZ290byBwcm9iZV9lcnI7Ci0JfQotCW11dGV4X3VubG9jaygmYmxrX3Byb2JlX211dGV4KTsKLQotCXJldCA9IC1FQlVTWTsKLQlvbGRfYnQgPSB4Y2hnKCZxLT5ibGtfdHJhY2UsIGJ0KTsKLQlpZiAob2xkX2J0KSB7Ci0JCSh2b2lkKSB4Y2hnKCZxLT5ibGtfdHJhY2UsIG9sZF9idCk7Ci0JCWdvdG8gZXJyOwotCX0KLQotCXJldHVybiAwOwotcHJvYmVfZXJyOgotCWF0b21pY19kZWMoJmJsa19wcm9iZXNfcmVmKTsKLQltdXRleF91bmxvY2soJmJsa19wcm9iZV9tdXRleCk7Ci1lcnI6Ci0JaWYgKGJ0KSB7Ci0JCWlmIChidC0+bXNnX2ZpbGUpCi0JCQlkZWJ1Z2ZzX3JlbW92ZShidC0+bXNnX2ZpbGUpOwotCQlpZiAoYnQtPmRyb3BwZWRfZmlsZSkKLQkJCWRlYnVnZnNfcmVtb3ZlKGJ0LT5kcm9wcGVkX2ZpbGUpOwotCQlmcmVlX3BlcmNwdShidC0+c2VxdWVuY2UpOwotCQlmcmVlX3BlcmNwdShidC0+bXNnX2RhdGEpOwotCQlpZiAoYnQtPnJjaGFuKQotCQkJcmVsYXlfY2xvc2UoYnQtPnJjaGFuKTsKLQkJa2ZyZWUoYnQpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgYmxrX3RyYWNlX3NldHVwKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBjaGFyICpuYW1lLCBkZXZfdCBkZXYsCi0JCSAgICBjaGFyIF9fdXNlciAqYXJnKQotewotCXN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cCBidXRzOwotCWludCByZXQ7Ci0KLQlyZXQgPSBjb3B5X2Zyb21fdXNlcigmYnV0cywgYXJnLCBzaXplb2YoYnV0cykpOwotCWlmIChyZXQpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0ID0gZG9fYmxrX3RyYWNlX3NldHVwKHEsIG5hbWUsIGRldiwgJmJ1dHMpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoY29weV90b191c2VyKGFyZywgJmJ1dHMsIHNpemVvZihidXRzKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChibGtfdHJhY2Vfc2V0dXApOwotCi1pbnQgYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0OwotCWludCByZXQ7Ci0KLQlpZiAoKGJ0ID0gcS0+YmxrX3RyYWNlKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qCi0JICogRm9yIHN0YXJ0aW5nIGEgdHJhY2UsIHdlIGNhbiB0cmFuc2l0aW9uIGZyb20gYSBzZXR1cCBvciBzdG9wcGVkCi0JICogdHJhY2UuIEZvciBzdG9wcGluZyBhIHRyYWNlLCB0aGUgc3RhdGUgbXVzdCBiZSBydW5uaW5nCi0JICovCi0JcmV0ID0gLUVJTlZBTDsKLQlpZiAoc3RhcnQpIHsKLQkJaWYgKGJ0LT50cmFjZV9zdGF0ZSA9PSBCbGt0cmFjZV9zZXR1cCB8fAotCQkgICAgYnQtPnRyYWNlX3N0YXRlID09IEJsa3RyYWNlX3N0b3BwZWQpIHsKLQkJCWJsa3RyYWNlX3NlcSsrOwotCQkJc21wX21iKCk7Ci0JCQlidC0+dHJhY2Vfc3RhdGUgPSBCbGt0cmFjZV9ydW5uaW5nOwotCi0JCQl0cmFjZV9ub3RlX3RpbWUoYnQpOwotCQkJcmV0ID0gMDsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChidC0+dHJhY2Vfc3RhdGUgPT0gQmxrdHJhY2VfcnVubmluZykgewotCQkJYnQtPnRyYWNlX3N0YXRlID0gQmxrdHJhY2Vfc3RvcHBlZDsKLQkJCXJlbGF5X2ZsdXNoKGJ0LT5yY2hhbik7Ci0JCQlyZXQgPSAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9zdGFydHN0b3ApOwotCi0vKioKLSAqIGJsa190cmFjZV9pb2N0bDogLSBoYW5kbGUgdGhlIGlvY3RscyBhc3NvY2lhdGVkIHdpdGggdHJhY2luZwotICogQGJkZXY6CXRoZSBibG9jayBkZXZpY2UKLSAqIEBjbWQ6IAl0aGUgaW9jdGwgY21kCi0gKiBAYXJnOgl0aGUgYXJndW1lbnQgZGF0YSwgaWYgYW55Ci0gKgotICoqLwotaW50IGJsa190cmFjZV9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBjbWQsIGNoYXIgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7Ci0JaW50IHJldCwgc3RhcnQgPSAwOwotCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKLQotCXEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKLQlpZiAoIXEpCi0JCXJldHVybiAtRU5YSU87Ci0KLQltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgQkxLVFJBQ0VTRVRVUDoKLQkJYmRldm5hbWUoYmRldiwgYik7Ci0JCXJldCA9IGJsa190cmFjZV9zZXR1cChxLCBiLCBiZGV2LT5iZF9kZXYsIGFyZyk7Ci0JCWJyZWFrOwotCWNhc2UgQkxLVFJBQ0VTVEFSVDoKLQkJc3RhcnQgPSAxOwotCWNhc2UgQkxLVFJBQ0VTVE9QOgotCQlyZXQgPSBibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIHN0YXJ0KTsKLQkJYnJlYWs7Ci0JY2FzZSBCTEtUUkFDRVRFQVJET1dOOgotCQlyZXQgPSBibGtfdHJhY2VfcmVtb3ZlKHEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRU5PVFRZOwotCQlicmVhazsKLQl9Ci0KLQltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGJsa190cmFjZV9zaHV0ZG93bjogLSBzdG9wIGFuZCBjbGVhbnVwIHRyYWNlIHN0cnVjdHVyZXMKLSAqIEBxOiAgICB0aGUgcmVxdWVzdCBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZQotICoKLSAqKi8KLXZvaWQgYmxrX3RyYWNlX3NodXRkb3duKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQotewotCWlmIChxLT5ibGtfdHJhY2UpIHsKLQkJYmxrX3RyYWNlX3N0YXJ0c3RvcChxLCAwKTsKLQkJYmxrX3RyYWNlX3JlbW92ZShxKTsKLQl9Ci19Ci0KLS8qCi0gKiBibGt0cmFjZSBwcm9iZXMKLSAqLwotCi0vKioKLSAqIGJsa19hZGRfdHJhY2VfcnEgLSBBZGQgYSB0cmFjZSBmb3IgYSByZXF1ZXN0IG9yaWVudGVkIGFjdGlvbgotICogQHE6CQlxdWV1ZSB0aGUgaW8gaXMgZm9yCi0gKiBAcnE6CQl0aGUgc291cmNlIHJlcXVlc3QKLSAqIEB3aGF0Ogl0aGUgYWN0aW9uCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICAgUmVjb3JkcyBhbiBhY3Rpb24gYWdhaW5zdCBhIHJlcXVlc3QuIFdpbGwgbG9nIHRoZSBiaW8gb2Zmc2V0ICsgc2l6ZS4KLSAqCi0gKiovCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkJICAgIHUzMiB3aGF0KQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOwotCWludCBydyA9IHJxLT5jbWRfZmxhZ3MgJiAweDAzOwotCi0JaWYgKGxpa2VseSghYnQpKQotCQlyZXR1cm47Ci0KLQlpZiAoYmxrX2Rpc2NhcmRfcnEocnEpKQotCQlydyB8PSAoMSA8PCBCSU9fUldfRElTQ0FSRCk7Ci0KLQlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7Ci0JCXdoYXQgfD0gQkxLX1RDX0FDVChCTEtfVENfUEMpOwotCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIHJxLT5kYXRhX2xlbiwgcncsIHdoYXQsIHJxLT5lcnJvcnMsCi0JCQkJc2l6ZW9mKHJxLT5jbWQpLCBycS0+Y21kKTsKLQl9IGVsc2UgIHsKLQkJd2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19GUyk7Ci0JCV9fYmxrX2FkZF90cmFjZShidCwgcnEtPmhhcmRfc2VjdG9yLCBycS0+aGFyZF9ucl9zZWN0b3JzIDw8IDksCi0JCQkJcncsIHdoYXQsIHJxLT5lcnJvcnMsIDAsIE5VTEwpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9hYm9ydChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCWJsa19hZGRfdHJhY2VfcnEocSwgcnEsIEJMS19UQV9BQk9SVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfaW5zZXJ0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0JYmxrX2FkZF90cmFjZV9ycShxLCBycSwgQkxLX1RBX0lOU0VSVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfaXNzdWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfSVNTVUUpOwotfQotCi1zdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfUkVRVUVVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfQ09NUExFVEUpOwotfQotCi0vKioKLSAqIGJsa19hZGRfdHJhY2VfYmlvIC0gQWRkIGEgdHJhY2UgZm9yIGEgYmlvIG9yaWVudGVkIGFjdGlvbgotICogQHE6CQlxdWV1ZSB0aGUgaW8gaXMgZm9yCi0gKiBAYmlvOgl0aGUgc291cmNlIGJpbwotICogQHdoYXQ6CXRoZSBhY3Rpb24KLSAqCi0gKiBEZXNjcmlwdGlvbjoKLSAqICAgICBSZWNvcmRzIGFuIGFjdGlvbiBhZ2FpbnN0IGEgYmlvLiBXaWxsIGxvZyB0aGUgYmlvIG9mZnNldCArIHNpemUuCi0gKgotICoqLwotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywKLQkJCQkgICAgIHUzMiB3aGF0KQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOwotCi0JaWYgKGxpa2VseSghYnQpKQotCQlyZXR1cm47Ci0KLQlfX2Jsa19hZGRfdHJhY2UoYnQsIGJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsIGJpby0+YmlfcncsIHdoYXQsCi0JCQkhYmlvX2ZsYWdnZWQoYmlvLCBCSU9fVVBUT0RBVEUpLCAwLCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fYm91bmNlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCi17Ci0JYmxrX2FkZF90cmFjZV9iaW8ocSwgYmlvLCBCTEtfVEFfQk9VTkNFKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9DT01QTEVURSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQotewotCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0JBQ0tNRVJHRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9GUk9OVE1FUkdFKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKLXsKLQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9RVUVVRSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfZ2V0cnEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KQotewotCWlmIChiaW8pCi0JCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0dFVFJRKTsKLQllbHNlIHsKLQkJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQkJaWYgKGJ0KQotCQkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCBydywgQkxLX1RBX0dFVFJRLCAwLCAwLCBOVUxMKTsKLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9zbGVlcHJxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sIGludCBydykKLXsKLQlpZiAoYmlvKQotCQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9TTEVFUFJRKTsKLQllbHNlIHsKLQkJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQkJaWYgKGJ0KQotCQkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCBydywgQkxLX1RBX1NMRUVQUlEsIDAsIDAsIE5VTEwpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9wbHVnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOwotCi0JaWYgKGJ0KQotCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIEJMS19UQV9QTFVHLCAwLCAwLCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV91bnBsdWdfaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQlpZiAoYnQpIHsKLQkJdW5zaWduZWQgaW50IHBkdSA9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdOwotCQlfX2JlNjQgcnBkdSA9IGNwdV90b19iZTY0KHBkdSk7Ci0KLQkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfVU5QTFVHX0lPLCAwLAotCQkJCXNpemVvZihycGR1KSwgJnJwZHUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV91bnBsdWdfdGltZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQlpZiAoYnQpIHsKLQkJdW5zaWduZWQgaW50IHBkdSA9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdOwotCQlfX2JlNjQgcnBkdSA9IGNwdV90b19iZTY0KHBkdSk7Ci0KLQkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfVU5QTFVHX1RJTUVSLCAwLAotCQkJCXNpemVvZihycGR1KSwgJnJwZHUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9zcGxpdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLAotCQkJCXVuc2lnbmVkIGludCBwZHUpCi17Ci0Jc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7Ci0KLQlpZiAoYnQpIHsKLQkJX19iZTY0IHJwZHUgPSBjcHVfdG9fYmU2NChwZHUpOwotCi0JCV9fYmxrX2FkZF90cmFjZShidCwgYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwgYmlvLT5iaV9ydywKLQkJCQlCTEtfVEFfU1BMSVQsICFiaW9fZmxhZ2dlZChiaW8sIEJJT19VUFRPREFURSksCi0JCQkJc2l6ZW9mKHJwZHUpLCAmcnBkdSk7Ci0JfQotfQotCi0vKioKLSAqIGJsa19hZGRfdHJhY2VfcmVtYXAgLSBBZGQgYSB0cmFjZSBmb3IgYSByZW1hcCBvcGVyYXRpb24KLSAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgotICogQGJpbzoJdGhlIHNvdXJjZSBiaW8KLSAqIEBkZXY6CXRhcmdldCBkZXZpY2UKLSAqIEBmcm9tOglzb3VyY2Ugc2VjdG9yCi0gKiBAdG86CQl0YXJnZXQgc2VjdG9yCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICAgRGV2aWNlIG1hcHBlciBvciByYWlkIHRhcmdldCBzb21ldGltZXMgbmVlZCB0byBzcGxpdCBhIGJpbyBiZWNhdXNlCi0gKiAgICAgaXQgc3BhbnMgYSBzdHJpcGUgKG9yIHNpbWlsYXIpLiBBZGQgYSB0cmFjZSBmb3IgdGhhdCBhY3Rpb24uCi0gKgotICoqLwotc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9yZW1hcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLAotCQkJCSAgICAgICBkZXZfdCBkZXYsIHNlY3Rvcl90IGZyb20sIHNlY3Rvcl90IHRvKQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOwotCXN0cnVjdCBibGtfaW9fdHJhY2VfcmVtYXAgcjsKLQotCWlmIChsaWtlbHkoIWJ0KSkKLQkJcmV0dXJuOwotCi0Jci5kZXZpY2UgPSBjcHVfdG9fYmUzMihkZXYpOwotCXIuZGV2aWNlX2Zyb20gPSBjcHVfdG9fYmUzMihiaW8tPmJpX2JkZXYtPmJkX2Rldik7Ci0Jci5zZWN0b3IgPSBjcHVfdG9fYmU2NCh0byk7Ci0KLQlfX2Jsa19hZGRfdHJhY2UoYnQsIGZyb20sIGJpby0+Ymlfc2l6ZSwgYmlvLT5iaV9ydywgQkxLX1RBX1JFTUFQLAotCQkJIWJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKSwgc2l6ZW9mKHIpLCAmcik7Ci19Ci0KLS8qKgotICogYmxrX2FkZF9kcml2ZXJfZGF0YSAtIEFkZCBiaW5hcnkgbWVzc2FnZSB3aXRoIGRyaXZlci1zcGVjaWZpYyBkYXRhCi0gKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKLSAqIEBycToJCWlvIHJlcXVlc3QKLSAqIEBkYXRhOglkcml2ZXItc3BlY2lmaWMgZGF0YQotICogQGxlbjoJbGVuZ3RoIG9mIGRyaXZlci1zcGVjaWZpYyBkYXRhCi0gKgotICogRGVzY3JpcHRpb246Ci0gKiAgICAgU29tZSBkcml2ZXJzIG1pZ2h0IHdhbnQgdG8gd3JpdGUgZHJpdmVyLXNwZWNpZmljIGRhdGEgcGVyIHJlcXVlc3QuCi0gKgotICoqLwotdm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCSB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOwotCi0JaWYgKGxpa2VseSghYnQpKQotCQlyZXR1cm47Ci0KLQlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKQotCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIHJxLT5kYXRhX2xlbiwgMCwgQkxLX1RBX0RSVl9EQVRBLAotCQkJCXJxLT5lcnJvcnMsIGxlbiwgZGF0YSk7Ci0JZWxzZQotCQlfX2Jsa19hZGRfdHJhY2UoYnQsIHJxLT5oYXJkX3NlY3RvciwgcnEtPmhhcmRfbnJfc2VjdG9ycyA8PCA5LAotCQkJCTAsIEJMS19UQV9EUlZfREFUQSwgcnEtPmVycm9ycywgbGVuLCBkYXRhKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGJsa19hZGRfZHJpdmVyX2RhdGEpOwotCi1zdGF0aWMgaW50IGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9hYm9ydChibGtfYWRkX3RyYWNlX3JxX2Fib3J0KTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaW5zZXJ0KGJsa19hZGRfdHJhY2VfcnFfaW5zZXJ0KTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaXNzdWUoYmxrX2FkZF90cmFjZV9ycV9pc3N1ZSk7Ci0JV0FSTl9PTihyZXQpOwotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX3JlcXVldWUoYmxrX2FkZF90cmFjZV9ycV9yZXF1ZXVlKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSk7Ci0JV0FSTl9PTihyZXQpOwotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19ib3VuY2UoYmxrX2FkZF90cmFjZV9iaW9fYm91bmNlKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2UpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fZnJvbnRtZXJnZShibGtfYWRkX3RyYWNlX2Jpb19mcm9udG1lcmdlKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSk7Ci0JV0FSTl9PTihyZXQpOwotCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NsZWVwcnEoYmxrX2FkZF90cmFjZV9zbGVlcHJxKTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfdGltZXIoYmxrX2FkZF90cmFjZV91bnBsdWdfdGltZXIpOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfaW8oYmxrX2FkZF90cmFjZV91bnBsdWdfaW8pOwotCVdBUk5fT04ocmV0KTsKLQlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0KTsKLQlXQVJOX09OKHJldCk7Ci0JcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcmVtYXAoYmxrX2FkZF90cmFjZV9yZW1hcCk7Ci0JV0FSTl9PTihyZXQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBibGtfdW5yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKQotewotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcmVtYXAoYmxrX2FkZF90cmFjZV9yZW1hcCk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19zcGxpdChibGtfYWRkX3RyYWNlX3NwbGl0KTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3VucGx1Z19pbyhibGtfYWRkX3RyYWNlX3VucGx1Z19pbyk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfdGltZXIoYmxrX2FkZF90cmFjZV91bnBsdWdfdGltZXIpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcGx1ZyhibGtfYWRkX3RyYWNlX3BsdWcpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfc2xlZXBycShibGtfYWRkX3RyYWNlX3NsZWVwcnEpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfZ2V0cnEoYmxrX2FkZF90cmFjZV9nZXRycSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fcXVldWUoYmxrX2FkZF90cmFjZV9iaW9fcXVldWUpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYmFja21lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2JhY2ttZXJnZSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fY29tcGxldGUoYmxrX2FkZF90cmFjZV9iaW9fY29tcGxldGUpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JvdW5jZShibGtfYWRkX3RyYWNlX2Jpb19ib3VuY2UpOwotCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfY29tcGxldGUoYmxrX2FkZF90cmFjZV9ycV9jb21wbGV0ZSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pc3N1ZShibGtfYWRkX3RyYWNlX3JxX2lzc3VlKTsKLQl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCk7Ci0JdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9hYm9ydChibGtfYWRkX3RyYWNlX3JxX2Fib3J0KTsKLQotCXRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlcigpOwotfQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3R4LmMgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYwppbmRleCBmMjExNDdmLi4wNmViNmNjIDEwMDY0NAotLS0gYS9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfdHguYwpAQCAtMzAsNyArMzAsNyBAQAogI2lmZGVmIENPTkZJR19ETUFfRU5HSU5FCiBzdGF0aWMgaW50IF9faW5pdCBhc3luY190eF9pbml0KHZvaWQpCiB7Ci0JZG1hZW5naW5lX2dldCgpOworCWFzeW5jX2RtYWVuZ2luZV9nZXQoKTsKIAogCXByaW50ayhLRVJOX0lORk8gImFzeW5jX3R4OiBhcGkgaW5pdGlhbGl6ZWQgKGFzeW5jKVxuIik7CiAKQEAgLTM5LDcgKzM5LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGFzeW5jX3R4X2V4aXQodm9pZCkKIHsKLQlkbWFlbmdpbmVfcHV0KCk7CisJYXN5bmNfZG1hZW5naW5lX3B1dCgpOwogfQogCiAvKioKQEAgLTU2LDcgKzU2LDcgQEAKIAlpZiAoZGVwZW5kX3R4ICYmCiAJICAgIGRtYV9oYXNfY2FwKHR4X3R5cGUsIGRlcGVuZF90eC0+Y2hhbi0+ZGV2aWNlLT5jYXBfbWFzaykpCiAJCXJldHVybiBkZXBlbmRfdHgtPmNoYW47Ci0JcmV0dXJuIGRtYV9maW5kX2NoYW5uZWwodHhfdHlwZSk7CisJcmV0dXJuIGFzeW5jX2RtYV9maW5kX2NoYW5uZWwodHhfdHlwZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2FzeW5jX3R4X2ZpbmRfY2hhbm5lbCk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jIGIvY3J5cHRvL2FzeW5jX3R4L2FzeW5jX3hvci5jCmluZGV4IDU5NWI3ODYuLjk1ZmUyYzggMTAwNjQ0Ci0tLSBhL2NyeXB0by9hc3luY190eC9hc3luY194b3IuYworKysgYi9jcnlwdG8vYXN5bmNfdHgvYXN5bmNfeG9yLmMKQEAgLTMwLDExICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvcmFpZC94b3IuaD4KICNpbmNsdWRlIDxsaW51eC9hc3luY190eC5oPgogCi0vKiBkb19hc3luY194b3IgLSBkbWEgbWFwIHRoZSBwYWdlcyBhbmQgcGVyZm9ybSB0aGUgeG9yIHdpdGggYW4gZW5naW5lLgotICogCVRoaXMgcm91dGluZSBpcyBtYXJrZWQgX19hbHdheXNfaW5saW5lIHNvIGl0IGNhbiBiZSBjb21waWxlZCBhd2F5Ci0gKiAJd2hlbiBDT05GSUdfRE1BX0VOR0lORT1uCi0gKi8KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICoKKy8qIGRvX2FzeW5jX3hvciAtIGRtYSBtYXAgdGhlIHBhZ2VzIGFuZCBwZXJmb3JtIHRoZSB4b3Igd2l0aCBhbiBlbmdpbmUgKi8KK3N0YXRpYyBfX2FzeW5jX2lubGluZSBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgogZG9fYXN5bmNfeG9yKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgc3RydWN0IHBhZ2UgKmRlc3QsIHN0cnVjdCBwYWdlICoqc3JjX2xpc3QsCiAJICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgc3JjX2NudCwgc2l6ZV90IGxlbiwKIAkgICAgIGVudW0gYXN5bmNfdHhfZmxhZ3MgZmxhZ3MsCmRpZmYgLS1naXQgYS9jcnlwdG8vc2hhc2guYyBiL2NyeXB0by9zaGFzaC5jCmluZGV4IDdhNjU5NzMuLjJjY2M4YjAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGFzaC5jCisrKyBiL2NyeXB0by9zaGFzaC5jCkBAIC03Nyw2ICs3Nyw5IEBACiAJdTggYnVmW3NoYXNoX2FsaWduX2J1ZmZlcl9zaXplKHVuYWxpZ25lZF9sZW4sIGFsaWdubWFzayldCiAJCV9fYXR0cmlidXRlX18gKChhbGlnbmVkKSk7CiAKKwlpZiAodW5hbGlnbmVkX2xlbiA+IGxlbikKKwkJdW5hbGlnbmVkX2xlbiA9IGxlbjsKKwogCW1lbWNweShidWYsIGRhdGEsIHVuYWxpZ25lZF9sZW4pOwogCiAJcmV0dXJuIHNoYXNoLT51cGRhdGUoZGVzYywgYnVmLCB1bmFsaWduZWRfbGVuKSA/OgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3hvci5jIGIvY3J5cHRvL3hvci5jCmluZGV4IGIyZTZkYjAuLjk5NmI2ZWUgMTAwNjQ0Ci0tLSBhL2NyeXB0by94b3IuYworKysgYi9jcnlwdG8veG9yLmMKQEAgLTE4LDggKzE4LDggQEAKIAogI2RlZmluZSBCSF9UUkFDRSAwCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhaWQveG9yLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGFzbS94b3IuaD4KIAogLyogVGhlIHhvciByb3V0aW5lcyB0byB1c2UuICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL0tjb25maWcgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwppbmRleCA4YTg1MWQwLi40MzFmOGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwpAQCAtMTEsOSArMTEsOSBAQAogCXNlbGVjdCBQTlAKIAlzZWxlY3QgQ1BVX0lETEUKIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgQWR2YW5jZWQgQ29uZmlndXJhdGlvbiBhbmQgUG93ZXIgSW50ZXJmYWNlIChBQ1BJKSBzdXBwb3J0IGZvciAKLQkgIExpbnV4IHJlcXVpcmVzIGFuIEFDUEkgY29tcGxpYW50IHBsYXRmb3JtIChoYXJkd2FyZS9maXJtd2FyZSksCisJICBMaW51eCByZXF1aXJlcyBhbiBBQ1BJLWNvbXBsaWFudCBwbGF0Zm9ybSAoaGFyZHdhcmUvZmlybXdhcmUpLAogCSAgYW5kIGFzc3VtZXMgdGhlIHByZXNlbmNlIG9mIE9TLWRpcmVjdGVkIGNvbmZpZ3VyYXRpb24gYW5kIHBvd2VyCiAJICBtYW5hZ2VtZW50IChPU1BNKSBzb2Z0d2FyZS4gIFRoaXMgb3B0aW9uIHdpbGwgZW5sYXJnZSB5b3VyIAogCSAga2VybmVsIGJ5IGFib3V0IDcwSy4KQEAgLTIzLDIwICsyMywxOSBAQAogCSAgdGhlIFBsdWctYW5kLVBsYXkgQklPUyBzcGVjaWZpY2F0aW9uIChQblAgQklPUyksIHRoZSAKIAkgIE11bHRpUHJvY2Vzc29yIFNwZWNpZmljYXRpb24gKE1QUyksIGFuZCB0aGUgQWR2YW5jZWQgUG93ZXIgCiAJICBNYW5hZ2VtZW50IChBUE0pIHNwZWNpZmljYXRpb24uICBJZiBib3RoIEFDUEkgYW5kIEFQTSBzdXBwb3J0IAotCSAgYXJlIGNvbmZpZ3VyZWQsIHdoaWNoZXZlciBpcyBsb2FkZWQgZmlyc3Qgc2hhbGwgYmUgdXNlZC4KKwkgIGFyZSBjb25maWd1cmVkLCBBQ1BJIGlzIHVzZWQuCiAKLQkgIFRoZSBBQ1BJIFNvdXJjZUZvcmdlIHByb2plY3QgY29udGFpbnMgdGhlIGxhdGVzdCBzb3VyY2UgY29kZSwgCi0JICBkb2N1bWVudGF0aW9uLCB0b29scywgbWFpbGluZyBsaXN0IHN1YnNjcmlwdGlvbiwgYW5kIG90aGVyIAotCSAgaW5mb3JtYXRpb24uICBUaGlzIHByb2plY3QgaXMgYXZhaWxhYmxlIGF0OgotCSAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYWNwaT4KKwkgIFRoZSBwcm9qZWN0IGhvbWUgcGFnZSBmb3IgdGhlIExpbnV4IEFDUEkgc3Vic3lzdGVtIGlzIGhlcmU6CisJICA8aHR0cDovL3d3dy5sZXNzd2F0dHMub3JnL3Byb2plY3RzL2FjcGkvPgogCiAJICBMaW51eCBzdXBwb3J0IGZvciBBQ1BJIGlzIGJhc2VkIG9uIEludGVsIENvcnBvcmF0aW9uJ3MgQUNQSQotCSAgQ29tcG9uZW50IEFyY2hpdGVjdHVyZSAoQUNQSSBDQSkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6Ci0JICA8aHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20vdGVjaG5vbG9neS9pYXBjL2FjcGk+CisJICBDb21wb25lbnQgQXJjaGl0ZWN0dXJlIChBQ1BJIENBKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZQorCSAgQUNQSSBDQSwgc2VlOgorCSAgPGh0dHA6Ly9hY3BpY2Eub3JnLz4KIAotCSAgQUNQSSBpcyBhbiBvcGVuIGluZHVzdHJ5IHNwZWNpZmljYXRpb24gY28tZGV2ZWxvcGVkIGJ5IENvbXBhcSwgCi0JICBJbnRlbCwgTWljcm9zb2Z0LCBQaG9lbml4LCBhbmQgVG9zaGliYS4gIFRoZSBzcGVjaWZpY2F0aW9uIGlzIAotCSAgYXZhaWxhYmxlIGF0OgorCSAgQUNQSSBpcyBhbiBvcGVuIGluZHVzdHJ5IHNwZWNpZmljYXRpb24gY28tZGV2ZWxvcGVkIGJ5CisJICBIZXdsZXR0LVBhY2thcmQsIEludGVsLCBNaWNyb3NvZnQsIFBob2VuaXgsIGFuZCBUb3NoaWJhLgorCSAgVGhlIHNwZWNpZmljYXRpb24gaXMgYXZhaWxhYmxlIGF0OgogCSAgPGh0dHA6Ly93d3cuYWNwaS5pbmZvPgogCiBpZiBBQ1BJCkBAIC00OSwxNCArNDgsMTQgQEAKIGNvbmZpZyBBQ1BJX1BST0NGUwogCWJvb2wgIkRlcHJlY2F0ZWQgL3Byb2MvYWNwaSBmaWxlcyIKIAlkZXBlbmRzIG9uIFBST0NfRlMKLQktLS1oZWxwLS0tCisJaGVscAogCSAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGlzIG9wdGlvbiBhbGxvd3MKIAkgIGRlcHJlY2F0ZWQgL3Byb2MvYWNwaS8gZmlsZXMgdG8gZXhpc3QsIGV2ZW4gd2hlbgogCSAgdGhleSBoYXZlIGJlZW4gcmVwbGFjZWQgYnkgZnVuY3Rpb25zIGluIC9zeXMuCiAJICBUaGUgZGVwcmVjYXRlZCBmaWxlcyAoYW5kIHRoZWlyIHJlcGxhY2VtZW50cykgaW5jbHVkZToKIAogCSAgL3Byb2MvYWNwaS9zbGVlcCAoL3N5cy9wb3dlci9zdGF0ZSkKLQkgIC9wcm9jL2FjcGkvaW5mbyAoL3N5cy9tb2R1bGVzL2FjcGkvcGFyYW1ldGVycy9hY3BpY2FfdmVyc2lvbikKKwkgIC9wcm9jL2FjcGkvaW5mbyAoL3N5cy9tb2R1bGUvYWNwaS9wYXJhbWV0ZXJzL2FjcGljYV92ZXJzaW9uKQogCSAgL3Byb2MvYWNwaS9kc2R0ICgvc3lzL2Zpcm13YXJlL2FjcGkvdGFibGVzL0RTRFQpCiAJICAvcHJvYy9hY3BpL2ZhZHQgKC9zeXMvZmlybXdhcmUvYWNwaS90YWJsZXMvRkFDUCkKIAkgIC9wcm9jL2FjcGkvZGVidWdfbGF5ZXIgKC9zeXMvbW9kdWxlL2FjcGkvcGFyYW1ldGVycy9kZWJ1Z19sYXllcikKQEAgLTY2LDExICs2NSwxMiBAQAogCSAgYW5kIGZ1bmN0aW9ucyB3aGljaCBkbyBub3QgeWV0IGV4aXN0IGluIC9zeXMuCiAKIAkgIFNheSBOIHRvIGRlbGV0ZSAvcHJvYy9hY3BpLyBmaWxlcyB0aGF0IGhhdmUgbW92ZWQgdG8gL3N5cy8KKwogY29uZmlnIEFDUElfUFJPQ0ZTX1BPV0VSCiAJYm9vbCAiRGVwcmVjYXRlZCBwb3dlciAvcHJvYy9hY3BpIGRpcmVjdG9yaWVzIgogCWRlcGVuZHMgb24gUFJPQ19GUwogCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KKwloZWxwCiAJICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoaXMgb3B0aW9uIGFsbG93cwogICAgICAgICAgIGRlcHJlY2F0ZWQgcG93ZXIgL3Byb2MvYWNwaS8gZGlyZWN0b3JpZXMgdG8gZXhpc3QsIGV2ZW4gd2hlbgogICAgICAgICAgIHRoZXkgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGZ1bmN0aW9ucyBpbiAvc3lzLgpAQCAtODYsMTkgKzg2LDE5IEBACiAJYm9vbCAiRnV0dXJlIHBvd2VyIC9zeXMgaW50ZXJmYWNlIgogCXNlbGVjdCBQT1dFUl9TVVBQTFkKIAlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCisJaGVscAogCSAgU2F5IE4gdG8gZGlzYWJsZSBwb3dlciAvc3lzIGludGVyZmFjZQogCiBjb25maWcgQUNQSV9QUk9DX0VWRU5UCiAJYm9vbCAiRGVwcmVjYXRlZCAvcHJvYy9hY3BpL2V2ZW50IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQUk9DX0ZTCiAJZGVmYXVsdCB5Ci0JLS0taGVscC0tLQotCSAgQSB1c2VyLXNwYWNlIGRhZW1vbiwgYWNwaSwgdHlwaWNhbGx5IHJlYWQgL3Byb2MvYWNwaS9ldmVudAotCSAgYW5kIGhhbmRsZWQgYWxsIEFDUEkgc3ViLXN5c3RlbSBnZW5lcmF0ZWQgZXZlbnRzLgorCWhlbHAKKwkgIEEgdXNlci1zcGFjZSBkYWVtb24sIGFjcGlkLCB0eXBpY2FsbHkgcmVhZHMgL3Byb2MvYWNwaS9ldmVudAorCSAgYW5kIGhhbmRsZXMgYWxsIEFDUEktZ2VuZXJhdGVkIGV2ZW50cy4KIAotCSAgVGhlc2UgZXZlbnRzIGFyZSBub3cgZGVsaXZlcmVkIHRvIHVzZXItc3BhY2UgdmlhCi0JICBlaXRoZXIgdGhlIGlucHV0IGxheWVyLCBvciBhcyBuZXRsaW5rIGV2ZW50cy4KKwkgIFRoZXNlIGV2ZW50cyBhcmUgbm93IGRlbGl2ZXJlZCB0byB1c2VyLXNwYWNlIGVpdGhlcgorCSAgdmlhIHRoZSBpbnB1dCBsYXllciBvciBhcyBuZXRsaW5rIGV2ZW50cy4KIAogCSAgVGhpcyBidWlsZCBvcHRpb24gZW5hYmxlcyB0aGUgb2xkIGNvZGUgZm9yIGxlZ2FjeQogCSAgdXNlci1zcGFjZSBpbXBsZW1lbnRhdGlvbi4gIEFmdGVyIHNvbWUgdGltZSwgdGhpcyB3aWxsCkBAIC0xMTIsMTAgKzExMiwxMyBAQAogCWRlcGVuZHMgb24gWDg2CiAJZGVmYXVsdCB5CiAJaGVscAotCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciB0aGUgQUMgQWRhcHRlciBvYmplY3QsIHdoaWNoIGluZGljYXRlcwotCSAgd2hldGhlciBhIHN5c3RlbSBpcyBvbiBBQywgb3Igbm90LiBJZiB5b3UgaGF2ZSBhIHN5c3RlbSB0aGF0IGNhbgorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIEFDIEFkYXB0ZXIgb2JqZWN0LCB3aGljaCBpbmRpY2F0ZXMKKwkgIHdoZXRoZXIgYSBzeXN0ZW0gaXMgb24gQUMgb3Igbm90LiAgSWYgeW91IGhhdmUgYSBzeXN0ZW0gdGhhdCBjYW4KIAkgIHN3aXRjaCBiZXR3ZWVuIEEvQyBhbmQgYmF0dGVyeSwgc2F5IFkuCiAKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6CisJICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjLgorCiBjb25maWcgQUNQSV9CQVRURVJZCiAJdHJpc3RhdGUgIkJhdHRlcnkiCiAJZGVwZW5kcyBvbiBYODYKQEAgLTEyNSwxNSArMTI4LDIxIEBACiAJICAvcHJvYy9hY3BpL2JhdHRlcnkuIElmIHlvdSBoYXZlIGEgbW9iaWxlIHN5c3RlbSB3aXRoIGEgYmF0dGVyeSwgCiAJICBzYXkgWS4KIAorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKwkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmF0dGVyeS4KKwogY29uZmlnIEFDUElfQlVUVE9OCiAJdHJpc3RhdGUgIkJ1dHRvbiIKIAlkZXBlbmRzIG9uIElOUFVUCiAJZGVmYXVsdCB5CiAJaGVscAotCSAgVGhpcyBkcml2ZXIgaGFuZGxlcyBldmVudHMgb24gdGhlIHBvd2VyLCBzbGVlcCBhbmQgbGlkIGJ1dHRvbnMuCisJICBUaGlzIGRyaXZlciBoYW5kbGVzIGV2ZW50cyBvbiB0aGUgcG93ZXIsIHNsZWVwLCBhbmQgbGlkIGJ1dHRvbnMuCiAJICBBIGRhZW1vbiByZWFkcyAvcHJvYy9hY3BpL2V2ZW50IGFuZCBwZXJmb3JtIHVzZXItZGVmaW5lZCBhY3Rpb25zCiAJICBzdWNoIGFzIHNodXR0aW5nIGRvd24gdGhlIHN5c3RlbS4gIFRoaXMgaXMgbmVjZXNzYXJ5IGZvcgotCSAgc29mdHdhcmUgY29udHJvbGxlZCBwb3dlcm9mZi4KKwkgIHNvZnR3YXJlLWNvbnRyb2xsZWQgcG93ZXJvZmYuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6CisJICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJ1dHRvbi4KIAogY29uZmlnIEFDUElfVklERU8KIAl0cmlzdGF0ZSAiVmlkZW8iCkBAIC0xNDEsMzggKzE1MCw0NSBAQAogCWRlcGVuZHMgb24gSU5QVVQKIAlzZWxlY3QgVEhFUk1BTAogCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGltcGxlbWVudCB0aGUgQUNQSSBFeHRlbnNpb25zIEZvciBEaXNwbGF5IEFkYXB0ZXJzCisJICBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBBQ1BJIEV4dGVuc2lvbnMgRm9yIERpc3BsYXkgQWRhcHRlcnMKIAkgIGZvciBpbnRlZ3JhdGVkIGdyYXBoaWNzIGRldmljZXMgb24gbW90aGVyYm9hcmQsIGFzIHNwZWNpZmllZCBpbgotCSAgQUNQSSAyLjAgU3BlY2lmaWNhdGlvbiwgQXBwZW5kaXggQiwgYWxsb3dpbmcgdG8gcGVyZm9ybSBzb21lIGJhc2ljCi0JICBjb250cm9sIGxpa2UgZGVmaW5pbmcgdGhlIHZpZGVvIFBPU1QgZGV2aWNlLCByZXRyaWV2aW5nIEVESUQgaW5mb3JtYXRpb24KLQkgIG9yIHRvIHNldHVwIGEgdmlkZW8gb3V0cHV0LCBldGMuCi0JICBOb3RlIHRoYXQgdGhpcyBpcyBhbiByZWYuIGltcGxlbWVudGF0aW9uIG9ubHkuICBJdCBtYXkgb3IgbWF5IG5vdCB3b3JrCi0JICBmb3IgeW91ciBpbnRlZ3JhdGVkIHZpZGVvIGRldmljZS4KKwkgIEFDUEkgMi4wIFNwZWNpZmljYXRpb24sIEFwcGVuZGl4IEIuICBUaGlzIHN1cHBvcnRzIGJhc2ljIG9wZXJhdGlvbnMKKwkgIHN1Y2ggYXMgZGVmaW5pbmcgdGhlIHZpZGVvIFBPU1QgZGV2aWNlLCByZXRyaWV2aW5nIEVESUQgaW5mb3JtYXRpb24sCisJICBhbmQgc2V0dGluZyB1cCBhIHZpZGVvIG91dHB1dC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKwkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdmlkZW8uCiAKIGNvbmZpZyBBQ1BJX0ZBTgogCXRyaXN0YXRlICJGYW4iCiAJc2VsZWN0IFRIRVJNQUwKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIEFDUEkgZmFuIGRldmljZXMsIGFsbG93aW5nIHVzZXItbW9kZSAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFDUEkgZmFuIGRldmljZXMsIGFsbG93aW5nIHVzZXItbW9kZQogCSAgYXBwbGljYXRpb25zIHRvIHBlcmZvcm0gYmFzaWMgZmFuIGNvbnRyb2wgKG9uLCBvZmYsIHN0YXR1cykuCiAKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6CisJICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGZhbi4KKwogY29uZmlnIEFDUElfRE9DSwogCWJvb2wgIkRvY2siCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAloZWxwCi0JICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIEFDUEkgY29udHJvbGxlZCBkb2NraW5nIHN0YXRpb25zIGFuZCByZW1vdmFibGUKLQkgIGRyaXZlIGJheXMgc3VjaCBhcyB0aGUgSUJNIHVsdHJhYmF5IG9yIHRoZSBEZWxsIE1vZHVsZSBCYXkuCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBQ1BJLWNvbnRyb2xsZWQgZG9ja2luZyBzdGF0aW9ucyBhbmQgcmVtb3ZhYmxlCisJICBkcml2ZSBiYXlzIHN1Y2ggYXMgdGhlIElCTSBVbHRyYWJheSBhbmQgdGhlIERlbGwgTW9kdWxlIEJheS4KIAogY29uZmlnIEFDUElfUFJPQ0VTU09SCiAJdHJpc3RhdGUgIlByb2Nlc3NvciIKIAlzZWxlY3QgVEhFUk1BTAogCWRlZmF1bHQgeQogCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGluc3RhbGxzIEFDUEkgYXMgdGhlIGlkbGUgaGFuZGxlciBmb3IgTGludXgsIGFuZCB1c2VzCi0JICBBQ1BJIEMyIGFuZCBDMyBwcm9jZXNzb3Igc3RhdGVzIHRvIHNhdmUgcG93ZXIsIG9uIHN5c3RlbXMgdGhhdAorCSAgVGhpcyBkcml2ZXIgaW5zdGFsbHMgQUNQSSBhcyB0aGUgaWRsZSBoYW5kbGVyIGZvciBMaW51eCBhbmQgdXNlcworCSAgQUNQSSBDMiBhbmQgQzMgcHJvY2Vzc29yIHN0YXRlcyB0byBzYXZlIHBvd2VyIG9uIHN5c3RlbXMgdGhhdAogCSAgc3VwcG9ydCBpdC4gIEl0IGlzIHJlcXVpcmVkIGJ5IHNldmVyYWwgZmxhdm9ycyBvZiBjcHVmcmVxCi0JICBQZXJmb3JtYW5jZS1zdGF0ZSBkcml2ZXJzLgorCSAgcGVyZm9ybWFuY2Utc3RhdGUgZHJpdmVycy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKwkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcHJvY2Vzc29yLgogCiBjb25maWcgQUNQSV9IT1RQTFVHX0NQVQogCWJvb2wKQEAgLTE4NiwxMSArMjAyLDE0IEBACiAJc2VsZWN0IFRIRVJNQUwKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIEFDUEkgdGhlcm1hbCB6b25lcy4gIE1vc3QgbW9iaWxlIGFuZAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQUNQSSB0aGVybWFsIHpvbmVzLiAgTW9zdCBtb2JpbGUgYW5kCiAJICBzb21lIGRlc2t0b3Agc3lzdGVtcyBzdXBwb3J0IEFDUEkgdGhlcm1hbCB6b25lcy4gIEl0IGlzIEhJR0hMWQogCSAgcmVjb21tZW5kZWQgdGhhdCB0aGlzIG9wdGlvbiBiZSBlbmFibGVkLCBhcyB5b3VyIHByb2Nlc3NvcihzKQogCSAgbWF5IGJlIGRhbWFnZWQgd2l0aG91dCBpdC4KIAorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKwkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGhlcm1hbC4KKwogY29uZmlnIEFDUElfTlVNQQogCWJvb2wgIk5VTUEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE5VTUEKQEAgLTIxOCw3ICsyMzcsNyBAQAogCWludCAiRGlzYWJsZSBBQ1BJIGZvciBzeXN0ZW1zIGJlZm9yZSBKYW4gMXN0IHRoaXMgeWVhciIgaWYgWDg2XzMyCiAJZGVmYXVsdCAwCiAJaGVscAotCSAgZW50ZXIgYSA0LWRpZ2l0IHllYXIsIGVnLiAyMDAxIHRvIGRpc2FibGUgQUNQSSBieSBkZWZhdWx0CisJICBFbnRlciBhIDQtZGlnaXQgeWVhciwgZS5nLiwgMjAwMSwgdG8gZGlzYWJsZSBBQ1BJIGJ5IGRlZmF1bHQKIAkgIG9uIHBsYXRmb3JtcyB3aXRoIERNSSBCSU9TIGRhdGUgYmVmb3JlIEphbnVhcnkgMXN0IHRoYXQgeWVhci4KIAkgICJhY3BpPWZvcmNlIiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGlzIG1lY2hhbmlzbS4KIApAQCAtMjQ5LDEwICsyNjgsMTMgQEAKIAl0cmlzdGF0ZSAiUENJIHNsb3QgZGV0ZWN0aW9uIGRyaXZlciIKIAlkZWZhdWx0IG4KIAloZWxwCi0JICBUaGlzIGRyaXZlciB3aWxsIGF0dGVtcHQgdG8gZGlzY292ZXIgYWxsIFBDSSBzbG90cyBpbiB5b3VyIHN5c3RlbSwKLQkgIGFuZCBjcmVhdGVzIGVudHJpZXMgaW4gL3N5cy9idXMvcGNpL3Nsb3RzLy4gVGhpcyBmZWF0dXJlIGNhbgotCSAgaGVscCB5b3UgY29ycmVsYXRlIFBDSSBidXMgYWRkcmVzc2VzIHdpdGggdGhlIHBoeXNpY2FsIGdlb2dyYXBoeQotCSAgb2YgeW91ciBzbG90cy4gSWYgeW91IGFyZSB1bnN1cmUsIHNheSBOLgorCSAgVGhpcyBkcml2ZXIgY3JlYXRlcyBlbnRyaWVzIGluIC9zeXMvYnVzL3BjaS9zbG90cy8gZm9yIGFsbCBQQ0kKKwkgIHNsb3RzIGluIHRoZSBzeXN0ZW0uICBUaGlzIGNhbiBoZWxwIGNvcnJlbGF0ZSBQQ0kgYnVzIGFkZHJlc3NlcywKKwkgIGkuZS4sIHNlZ21lbnQvYnVzL2RldmljZS9mdW5jdGlvbiB0dXBsZXMsIHdpdGggcGh5c2ljYWwgc2xvdHMgaW4KKwkgIHRoZSBzeXN0ZW0uICBJZiB5b3UgYXJlIHVuc3VyZSwgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6CisJICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBjaV9zbG90LgogCiBjb25maWcgWDg2X1BNX1RJTUVSCiAJYm9vbCAiUG93ZXIgTWFuYWdlbWVudCBUaW1lciBTdXBwb3J0IiBpZiBFTUJFRERFRApAQCAtMjcxLDQzICsyOTMsNDMgQEAKIAkgIHN5c3RlbXMgcmVxdWlyZSB0aGlzIHRpbWVyLiAKIAogY29uZmlnIEFDUElfQ09OVEFJTkVSCi0JdHJpc3RhdGUgIkFDUEkwMDA0LFBOUDBBMDUgYW5kIFBOUDBBMDYgQ29udGFpbmVyIERyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwl0cmlzdGF0ZSAiQ29udGFpbmVyIGFuZCBNb2R1bGUgRGV2aWNlcyAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWRlZmF1bHQgKEFDUElfSE9UUExVR19NRU1PUlkgfHwgQUNQSV9IT1RQTFVHX0NQVSB8fCBBQ1BJX0hPVFBMVUdfSU8pCi0JIC0tLWhlbHAtLS0KLQkgIFRoaXMgYWxsb3dzIF9waHlzaWNhbF8gaW5zZXJ0aW9uIGFuZCByZW1vdmFsIG9mIENQVXMgYW5kIG1lbW9yeS4KLQkgIFRoaXMgY2FuIGJlIHVzZWZ1bCwgZm9yIGV4YW1wbGUsIG9uIE5VTUEgbWFjaGluZXMgdGhhdCBzdXBwb3J0Ci0JICBBQ1BJIGJhc2VkIHBoeXNpY2FsIGhvdHBsdWcgb2Ygbm9kZXMsIG9yIG5vbi1OVU1BIG1hY2hpbmVzIHRoYXQKLQkgIHN1cHBvcnQgcGh5c2ljYWwgY3B1L21lbW9yeSBob3QtcGx1Zy4KKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBBQ1BJIENvbnRhaW5lciBhbmQgTW9kdWxlIGRldmljZXMgKElEcworCSAgQUNQSTAwMDQsIFBOUDBBMDUsIGFuZCBQTlAwQTA2KS4KIAotCSAgSWYgb25lIHNlbGVjdHMgIm0iLCB0aGlzIGRyaXZlciBjYW4gYmUgbG9hZGVkIHdpdGgKLQkgICJtb2Rwcm9iZSBjb250YWluZXIiLgorCSAgVGhpcyBoZWxwcyBzdXBwb3J0IGhvdHBsdWcgb2Ygbm9kZXMsIENQVXMsIGFuZCBtZW1vcnkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6CisJICB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNvbnRhaW5lci4KIAogY29uZmlnIEFDUElfSE9UUExVR19NRU1PUlkKIAl0cmlzdGF0ZSAiTWVtb3J5IEhvdHBsdWciCiAJZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRwogCWRlZmF1bHQgbgogCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydHMgZm9yIEFDUEkgTWVtb3J5IEhvdHBsdWcuICBUaGlzIGRyaXZlcgotCSAgcHJvdmlkZXMgc3VwcG9ydCBmb3IgZmllbGRpbmcgbm90aWZpY2F0aW9ucyBvbiBBQ1BJIG1lbW9yeQotCSAgZGV2aWNlcyAoUE5QMEM4MCkgd2hpY2ggcmVwcmVzZW50IG1lbW9yeSByYW5nZXMgdGhhdCBtYXkgYmUKLQkgIG9ubGluZWQgb3Igb2ZmbGluZWQgZHVyaW5nIHJ1bnRpbWUuICAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFDUEkgbWVtb3J5IGhvdHBsdWcuICBUaGUgZHJpdmVyCisJICBmaWVsZHMgbm90aWZpY2F0aW9ucyBvbiBBQ1BJIG1lbW9yeSBkZXZpY2VzIChQTlAwQzgwKSwKKwkgIHdoaWNoIHJlcHJlc2VudCBtZW1vcnkgcmFuZ2VzIHRoYXQgbWF5IGJlIG9ubGluZWQgb3IKKwkgIG9mZmxpbmVkIGR1cmluZyBydW50aW1lLgogCi0JICBFbmFibGluZyB0aGlzIGRyaXZlciBhc3N1bWVzIHRoYXQgeW91ciBwbGF0Zm9ybSBoYXJkd2FyZQotCSAgYW5kIGZpcm13YXJlIGhhdmUgc3VwcG9ydCBmb3IgaG90LXBsdWdnaW5nIHBoeXNpY2FsIG1lbW9yeS4gSWYKLQkgIHlvdXIgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgcGh5c2ljYWxseSBhZGRpbmcgb3IgcmlwcGluZyBvdXQgCi0JICBtZW1vcnkgRElNTXMgYXQgc29tZSBwbGF0Zm9ybSBkZWZpbmVkIGdyYW51bGFyaXR5IChpbmRpdmlkdWFsbHkgCi0JICBvciBhcyBhIGJhbmspIGF0IHJ1bnRpbWUsIHRoZW4geW91IG5lZWQgbm90IGVuYWJsZSB0aGlzIGRyaXZlci4KKwkgIElmIHlvdXIgaGFyZHdhcmUgYW5kIGZpcm13YXJlIGRvIG5vdCBzdXBwb3J0IGFkZGluZyBvcgorCSAgcmVtb3ZpbmcgbWVtb3J5IGRldmljZXMgYXQgcnVudGltZSwgeW91IG5lZWQgbm90IGVuYWJsZQorCSAgdGhpcyBkcml2ZXIuCiAKLQkgIElmIG9uZSBzZWxlY3RzICJtLCIgdGhpcyBkcml2ZXIgY2FuIGJlIGxvYWRlZCB1c2luZyB0aGUgZm9sbG93aW5nCi0JICBjb21tYW5kOiAKLQkJJD5tb2Rwcm9iZSBhY3BpX21lbWhvdHBsdWcgCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOgorCSAgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3BpX21lbWhvdHBsdWcuCiAKIGNvbmZpZyBBQ1BJX1NCUwogCXRyaXN0YXRlICJTbWFydCBCYXR0ZXJ5IFN5c3RlbSIKIAlkZXBlbmRzIG9uIFg4NgogCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFNtYXJ0IEJhdHRlcnkgU3lzdGVtLCBhbm90aGVyCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgU21hcnQgQmF0dGVyeSBTeXN0ZW0sIGFub3RoZXIKIAkgIHR5cGUgb2YgYWNjZXNzIHRvIGJhdHRlcnkgaW5mb3JtYXRpb24sIGZvdW5kIG9uIHNvbWUgbGFwdG9wcy4KIAorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKKwkgIHRoZSBtb2R1bGVzIHdpbGwgYmUgY2FsbGVkIHNicyBhbmQgc2JzaGMuCisKIGVuZGlmCSMgQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCmluZGV4IGIxMzBlYTAuLjAzYTk4NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTE0LDQ4ICsxNCw1MCBAQAogIwogIyBBQ1BJIENvcmUgU3Vic3lzdGVtIChJbnRlcnByZXRlcikKICMKLW9iai15CQkJCSs9IG9zbC5vIHV0aWxzLm8gcmVib290Lm9cCitvYmoteQkJCQkrPSBhY3BpLm8gXAogCQkJCQlhY3BpY2EvCiAKKyMgQWxsIHRoZSBidWlsdGluIGZpbGVzIGFyZSBpbiB0aGUgImFjcGkuIiBtb2R1bGVfcGFyYW0gbmFtZXNwYWNlLgorYWNwaS15CQkJCSs9IG9zbC5vIHV0aWxzLm8gcmVib290Lm8KKwogIyBzbGVlcCByZWxhdGVkIGZpbGVzCi1vYmoteQkJCQkrPSB3YWtldXAubwotb2JqLXkJCQkJKz0gc2xlZXAubwotb2JqLSQoQ09ORklHX0FDUElfU0xFRVApCSs9IHByb2MubworYWNwaS15CQkJCSs9IHdha2V1cC5vCithY3BpLXkJCQkJKz0gc2xlZXAubworYWNwaS0kKENPTkZJR19BQ1BJX1NMRUVQKQkrPSBwcm9jLm8KIAogCiAjCiAjIEFDUEkgQnVzIGFuZCBEZXZpY2UgRHJpdmVycwogIwotcHJvY2Vzc29yLW9ianMJKz0gcHJvY2Vzc29yX2NvcmUubyBwcm9jZXNzb3JfdGhyb3R0bGluZy5vIFwKLQkJCQlwcm9jZXNzb3JfaWRsZS5vIHByb2Nlc3Nvcl90aGVybWFsLm8KLWlmZGVmIENPTkZJR19DUFVfRlJFUQotcHJvY2Vzc29yLW9ianMJKz0gcHJvY2Vzc29yX3BlcmZsaWIubworYWNwaS15CQkJCSs9IGJ1cy5vIGdsdWUubworYWNwaS15CQkJCSs9IHNjYW4ubworYWNwaS15CQkJCSs9IGVjLm8KK2FjcGktJChDT05GSUdfQUNQSV9ET0NLKQkrPSBkb2NrLm8KK2FjcGkteQkJCQkrPSBwY2lfcm9vdC5vIHBjaV9saW5rLm8gcGNpX2lycS5vIHBjaV9iaW5kLm8KK2FjcGkteQkJCQkrPSBwb3dlci5vCithY3BpLXkJCQkJKz0gc3lzdGVtLm8gZXZlbnQubworYWNwaS0kKENPTkZJR19BQ1BJX0RFQlVHKQkrPSBkZWJ1Zy5vCithY3BpLSQoQ09ORklHX0FDUElfTlVNQSkJKz0gbnVtYS5vCithY3BpLSQoQ09ORklHX0FDUElfUFJPQ0ZTX1BPV0VSKSArPSBjbV9zYnMubworaWZkZWYgQ09ORklHX0FDUElfVklERU8KK2FjcGkteQkJCQkrPSB2aWRlb19kZXRlY3QubwogZW5kaWYKIAotb2JqLXkJCQkJKz0gYnVzLm8gZ2x1ZS5vCi1vYmoteQkJCQkrPSBzY2FuLm8KLSMgS2VlcCBFQyBkcml2ZXIgZmlyc3QuIEluaXRpYWxpemF0aW9uIG9mIG90aGVycyBkZXBlbmQgb24gaXQuCi1vYmoteQkJCQkrPSBlYy5vCisjIFRoZXNlIGFyZSAocG90ZW50aWFsbHkpIHNlcGFyYXRlIG1vZHVsZXMKIG9iai0kKENPTkZJR19BQ1BJX0FDKSAJCSs9IGFjLm8KLW9iai0kKENPTkZJR19BQ1BJX0JBVFRFUlkpCSs9IGJhdHRlcnkubwogb2JqLSQoQ09ORklHX0FDUElfQlVUVE9OKQkrPSBidXR0b24ubwogb2JqLSQoQ09ORklHX0FDUElfRkFOKQkJKz0gZmFuLm8KLW9iai0kKENPTkZJR19BQ1BJX0RPQ0spCQkrPSBkb2NrLm8KIG9iai0kKENPTkZJR19BQ1BJX1ZJREVPKQkrPSB2aWRlby5vCi1pZmRlZiBDT05GSUdfQUNQSV9WSURFTwotb2JqLXkJCQkJKz0gdmlkZW9fZGV0ZWN0Lm8KLWVuZGlmCi0KLW9iai15CQkJCSs9IHBjaV9yb290Lm8gcGNpX2xpbmsubyBwY2lfaXJxLm8gcGNpX2JpbmQubwogb2JqLSQoQ09ORklHX0FDUElfUENJX1NMT1QpCSs9IHBjaV9zbG90Lm8KIG9iai0kKENPTkZJR19BQ1BJX1BST0NFU1NPUikJKz0gcHJvY2Vzc29yLm8KIG9iai0kKENPTkZJR19BQ1BJX0NPTlRBSU5FUikJKz0gY29udGFpbmVyLm8KIG9iai0kKENPTkZJR19BQ1BJX1RIRVJNQUwpCSs9IHRoZXJtYWwubwotb2JqLXkJCQkJKz0gcG93ZXIubwotb2JqLXkJCQkJKz0gc3lzdGVtLm8gZXZlbnQubwotb2JqLSQoQ09ORklHX0FDUElfREVCVUcpCSs9IGRlYnVnLm8KLW9iai0kKENPTkZJR19BQ1BJX05VTUEpCQkrPSBudW1hLm8KLW9iai0kKENPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZKQkrPSBhY3BpX21lbWhvdHBsdWcubwotb2JqLSQoQ09ORklHX0FDUElfUFJPQ0ZTX1BPV0VSKQkrPSBjbV9zYnMubworb2JqLSQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlkpICs9IGFjcGlfbWVtaG90cGx1Zy5vCitvYmotJChDT05GSUdfQUNQSV9CQVRURVJZKQkrPSBiYXR0ZXJ5Lm8KIG9iai0kKENPTkZJR19BQ1BJX1NCUykJCSs9IHNic2hjLm8KIG9iai0kKENPTkZJR19BQ1BJX1NCUykJCSs9IHNicy5vCisKKyMgcHJvY2Vzc29yIGhhcyBpdHMgb3duICJwcm9jZXNzb3IuIiBtb2R1bGVfcGFyYW0gbmFtZXNwYWNlCitwcm9jZXNzb3IteQkJCTo9IHByb2Nlc3Nvcl9jb3JlLm8gcHJvY2Vzc29yX3Rocm90dGxpbmcubworcHJvY2Vzc29yLXkJCQkrPSBwcm9jZXNzb3JfaWRsZS5vIHByb2Nlc3Nvcl90aGVybWFsLm8KK3Byb2Nlc3Nvci0kKENPTkZJR19DUFVfRlJFUSkJKz0gcHJvY2Vzc29yX3BlcmZsaWIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9NYWtlZmlsZSBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvTWFrZWZpbGUKaW5kZXggM2YyMzI5OC4uMTdlNTA4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL01ha2VmaWxlCkBAIC0xOCw3ICsxOCw3IEBACiAJIGV4Y3JlYXRlLm8gIGV4bWlzYy5vICAgZXhvcGFyZzIubyAgZXhyZWdpb24ubyAgZXhzdG9yZS5vICAgZXh1dGlscy5vIFwKIAkgZXhkdW1wLm8gICAgZXhtdXRleC5vICBleG9wYXJnMy5vICBleHJlc250ZS5vICBleHN0b3Jlbi5vCiAKLW9iai15ICs9IGh3YWNwaS5vICBod2dwZS5vICBod3JlZ3MubyAgaHdzbGVlcC5vIGh3eGZhY2Uubworb2JqLXkgKz0gaHdhY3BpLm8gIGh3Z3BlLm8gIGh3cmVncy5vICBod3NsZWVwLm8gaHd4ZmFjZS5vIGh3dmFsaWQubwogCiBvYmotJChBQ1BJX0ZVVFVSRV9VU0FHRSkgKz0gaHd0aW1lci5vCiAKQEAgLTQxLDQgKzQxLDQgQEAKIAogb2JqLXkgKz0gdXRhbGxvYy5vIHV0ZGVidWcubyB1dGV2YWwubyB1dGluaXQubyB1dG1pc2MubyB1dHhmYWNlLm8gXAogCQl1dGNvcHkubyB1dGRlbGV0ZS5vIHV0Z2xvYmFsLm8gdXRtYXRoLm8gdXRvYmplY3QubyBcCi0JCXV0c3RhdGUubyB1dG11dGV4Lm8gdXRvYmplY3QubyB1dHJlc3JjLm8KKwkJdXRzdGF0ZS5vIHV0bXV0ZXgubyB1dG9iamVjdC5vIHV0cmVzcmMubyB1dGxvY2subwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oCmluZGV4IGRkYjQwZjUuLjE2ZTUyMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZ2xvYmFsLmgKQEAgLTE0OCw5ICsxNDgsMTIgQEAKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQgYWNwaV9nYmxfRkFEVDsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX3RhYmxlX2ZhY3MgKmFjcGlfZ2JsX0ZBQ1M7CiAKLS8qIFRoZXNlIGFkZHJlc3NlcyBhcmUgY2FsY3VsYXRlZCBmcm9tIEZBRFQgYWRkcmVzcyB2YWx1ZXMgKi8KKy8qIFRoZXNlIGFkZHJlc3NlcyBhcmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBGQURUIEV2ZW50IEJsb2NrIGFkZHJlc3NlcyAqLwogCitBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgYWNwaV9nYmxfeHBtMWFfc3RhdHVzOwogQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGFjcGlfZ2JsX3hwbTFhX2VuYWJsZTsKKworQUNQSV9FWFRFUk4gc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGFjcGlfZ2JsX3hwbTFiX3N0YXR1czsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyBhY3BpX2dibF94cG0xYl9lbmFibGU7CiAKIC8qCkBAIC0xNjIsNiArMTY1LDEwIEBACiBBQ1BJX0VYVEVSTiB1OCBhY3BpX2dibF9pbnRlZ2VyX2J5dGVfd2lkdGg7CiBBQ1BJX0VYVEVSTiB1OCBhY3BpX2dibF9pbnRlZ2VyX255YmJsZV93aWR0aDsKIAorLyogUmVhZGVyL1dyaXRlciBsb2NrIGlzIHVzZWQgZm9yIG5hbWVzcGFjZSB3YWxrIGFuZCBkeW5hbWljIHRhYmxlIHVubG9hZCAqLworCitBQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV9yd19sb2NrIGFjcGlfZ2JsX25hbWVzcGFjZV9yd19sb2NrOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBNdXR1YWwgZXhsdXNpb24gd2l0aGluIEFDUElDQSBzdWJzeXN0ZW0KQEAgLTI0NSw2ICsyNTIsNyBAQAogQUNQSV9FWFRFUk4gdTggYWNwaV9nYmxfYWNwaV9oYXJkd2FyZV9wcmVzZW50OwogQUNQSV9FWFRFUk4gdTggYWNwaV9nYmxfZXZlbnRzX2luaXRpYWxpemVkOwogQUNQSV9FWFRFUk4gdTggYWNwaV9nYmxfc3lzdGVtX2F3YWtlX2FuZF9ydW5uaW5nOworQUNQSV9FWFRFUk4gdTggYWNwaV9nYmxfb3NpX2RhdGE7CiAKICNpZm5kZWYgREVGSU5FX0FDUElfR0xPQkFMUwogCkBAIC0zNzEsNyArMzc5LDYgQEAKIEFDUElfRVhURVJOIGNoYXIgKmFjcGlfZ2JsX2RiX2ZpbGVuYW1lOwogQUNQSV9FWFRFUk4gdTMyIGFjcGlfZ2JsX2RiX2RlYnVnX2xldmVsOwogQUNQSV9FWFRFUk4gdTMyIGFjcGlfZ2JsX2RiX2NvbnNvbGVfZGVidWdfbGV2ZWw7Ci1BQ1BJX0VYVEVSTiBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmFjcGlfZ2JsX2RiX3RhYmxlX3B0cjsKIEFDUElfRVhURVJOIHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICphY3BpX2dibF9kYl9zY29wZV9ub2RlOwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaAppbmRleCA1OGM2OWRjLi40YWZhM2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaHdhcmUuaApAQCAtNjQsMTQgKzY0LDIyIEBACiAgKi8KIHN0cnVjdCBhY3BpX2JpdF9yZWdpc3Rlcl9pbmZvICphY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyh1MzIgcmVnaXN0ZXJfaWQpOwogCi1hY3BpX3N0YXR1cwotYWNwaV9od19yZWdpc3Rlcl9yZWFkKHUzMiByZWdpc3Rlcl9pZCwgdTMyICogcmV0dXJuX3ZhbHVlKTsKK2FjcGlfc3RhdHVzIGFjcGlfaHdfd3JpdGVfcG0xX2NvbnRyb2wodTMyIHBtMWFfY29udHJvbCwgdTMyIHBtMWJfY29udHJvbCk7CisKK2FjcGlfc3RhdHVzIGFjcGlfaHdfcmVnaXN0ZXJfcmVhZCh1MzIgcmVnaXN0ZXJfaWQsIHUzMiAqcmV0dXJuX3ZhbHVlKTsKIAogYWNwaV9zdGF0dXMgYWNwaV9od19yZWdpc3Rlcl93cml0ZSh1MzIgcmVnaXN0ZXJfaWQsIHUzMiB2YWx1ZSk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfaHdfY2xlYXJfYWNwaV9zdGF0dXModm9pZCk7CiAKIC8qCisgKiBod3ZhbGlkIC0gUG9ydCBJL08gd2l0aCB2YWxpZGF0aW9uCisgKi8KK2FjcGlfc3RhdHVzIGFjcGlfaHdfcmVhZF9wb3J0KGFjcGlfaW9fYWRkcmVzcyBhZGRyZXNzLCB1MzIgKnZhbHVlLCB1MzIgd2lkdGgpOworCithY3BpX3N0YXR1cyBhY3BpX2h3X3dyaXRlX3BvcnQoYWNwaV9pb19hZGRyZXNzIGFkZHJlc3MsIHUzMiB2YWx1ZSwgdTMyIHdpZHRoKTsKKworLyoKICAqIGh3Z3BlIC0gR1BFIHN1cHBvcnQKICAqLwogYWNwaV9zdGF0dXMgYWNwaV9od19sb3dfZGlzYWJsZV9ncGUoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKaW5kZXggNDkyZDAyNy4uNzcyZWU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKQEAgLTEwOCw2ICsxMDgsMTQgQEAKICNlbmRpZgogI2VuZGlmCiAKKy8qIExvY2sgc3RydWN0dXJlIGZvciByZWFkZXIvd3JpdGVyIGludGVyZmFjZXMgKi8KKworc3RydWN0IGFjcGlfcndfbG9jayB7CisJYWNwaV9tdXRleCB3cml0ZXJfbXV0ZXg7CisJYWNwaV9tdXRleCByZWFkZXJfbXV0ZXg7CisJdTMyIG51bV9yZWFkZXJzOworfTsKKwogLyoKICAqIFByZWRlZmluZWQgaGFuZGxlcyBmb3Igc3BpbmxvY2tzIHVzZWQgd2l0aGluIHRoZSBzdWJzeXN0ZW0uCiAgKiBUaGVzZSBzcGlubG9ja3MgYXJlIGNyZWF0ZWQgYnkgYWNwaV91dF9tdXRleF9pbml0aWFsaXplCkBAIC03NzIsNyArNzgwLDE5IEBACiAgKiBtdXN0IGJlIHByZXNlcnZlZC4KICAqLwogI2RlZmluZSBBQ1BJX1BNMV9TVEFUVVNfUFJFU0VSVkVEX0JJVFMgICAgICAgICAgMHgwODAwCS8qIEJpdCAxMSAqLwotI2RlZmluZSBBQ1BJX1BNMV9DT05UUk9MX1BSRVNFUlZFRF9CSVRTICAgICAgICAgMHgwMjAwCS8qIEJpdCA5ICh3aGF0ZXZlcikgKi8KKworLyogV3JpdGUtb25seSBiaXRzIG11c3QgYmUgemVyb2VkIGJ5IHNvZnR3YXJlICovCisKKyNkZWZpbmUgQUNQSV9QTTFfQ09OVFJPTF9XUklURU9OTFlfQklUUyAgICAgICAgIDB4MjAwNAkvKiBCaXRzIDEzLCAyICovCisKKy8qIEZvciBjb250cm9sIHJlZ2lzdGVycywgYm90aCBpZ25vcmVkIGFuZCByZXNlcnZlZCBiaXRzIG11c3QgYmUgcHJlc2VydmVkICovCisKKyNkZWZpbmUgQUNQSV9QTTFfQ09OVFJPTF9JR05PUkVEX0JJVFMgICAgICAgICAgIDB4MDIwMQkvKiBCaXRzIDksIDAoU0NJX0VOKSAqLworI2RlZmluZSBBQ1BJX1BNMV9DT05UUk9MX1JFU0VSVkVEX0JJVFMgICAgICAgICAgMHhDMUY4CS8qIEJpdHMgMTQtMTUsIDMtOCAqLworI2RlZmluZSBBQ1BJX1BNMV9DT05UUk9MX1BSRVNFUlZFRF9CSVRTIFwKKwkgICAgICAgKEFDUElfUE0xX0NPTlRST0xfSUdOT1JFRF9CSVRTIHwgQUNQSV9QTTFfQ09OVFJPTF9SRVNFUlZFRF9CSVRTKQorCisjZGVmaW5lIEFDUElfUE0yX0NPTlRST0xfUFJFU0VSVkVEX0JJVFMgICAgICAgICAweEZGRkZGRkZFCS8qIEFsbCBleGNlcHQgYml0IDAgKi8KIAogLyoKICAqIFJlZ2lzdGVyIElEcwpAQCAtNzgxLDEyICs4MDEsMTAgQEAKICNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTICAgICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTFfRU5BQkxFICAgICAgICAgICAgICAgIDB4MDIKICNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTFBX0NPTlRST0wgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTFCX0NPTlRST0wgICAgICAgICAgICAgIDB4MDUKLSNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTJfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MDYKLSNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTV9USU1FUiAgICAgICAgICAgICAgICAgIDB4MDcKLSNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QUk9DRVNTT1JfQkxPQ0sgICAgICAgICAgIDB4MDgKLSNkZWZpbmUgQUNQSV9SRUdJU1RFUl9TTUlfQ09NTUFORF9CTE9DSyAgICAgICAgIDB4MDkKKyNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTTJfQ09OVFJPTCAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QTV9USU1FUiAgICAgICAgICAgICAgICAgIDB4MDUKKyNkZWZpbmUgQUNQSV9SRUdJU1RFUl9QUk9DRVNTT1JfQkxPQ0sgICAgICAgICAgIDB4MDYKKyNkZWZpbmUgQUNQSV9SRUdJU1RFUl9TTUlfQ09NTUFORF9CTE9DSyAgICAgICAgIDB4MDcKIAogLyogTWFza3MgdXNlZCB0byBhY2Nlc3MgdGhlIGJpdF9yZWdpc3RlcnMgKi8KIApAQCAtODE4LDcgKzgzNiw3IEBACiAjZGVmaW5lIEFDUElfQklUTUFTS19TQ0lfRU5BQkxFICAgICAgICAgICAgICAgICAweDAwMDEKICNkZWZpbmUgQUNQSV9CSVRNQVNLX0JVU19NQVNURVJfUkxEICAgICAgICAgICAgIDB4MDAwMgogI2RlZmluZSBBQ1BJX0JJVE1BU0tfR0xPQkFMX0xPQ0tfUkVMRUFTRSAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIEFDUElfQklUTUFTS19TTEVFUF9UWVBFX1ggICAgICAgICAgICAgICAweDFDMDAKKyNkZWZpbmUgQUNQSV9CSVRNQVNLX1NMRUVQX1RZUEUgICAgICAgICAgICAgICAgIDB4MUMwMAogI2RlZmluZSBBQ1BJX0JJVE1BU0tfU0xFRVBfRU5BQkxFICAgICAgICAgICAgICAgMHgyMDAwCiAKICNkZWZpbmUgQUNQSV9CSVRNQVNLX0FSQl9ESVNBQkxFICAgICAgICAgICAgICAgIDB4MDAwMQpAQCAtODQ0LDExICs4NjIsMzUgQEAKICNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9TQ0lfRU5BQkxFICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9CVVNfTUFTVEVSX1JMRCAgICAgICAgIDB4MDEKICNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9HTE9CQUxfTE9DS19SRUxFQVNFICAgIDB4MDIKLSNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9TTEVFUF9UWVBFX1ggICAgICAgICAgIDB4MEEKKyNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9TTEVFUF9UWVBFICAgICAgICAgICAgIDB4MEEKICNkZWZpbmUgQUNQSV9CSVRQT1NJVElPTl9TTEVFUF9FTkFCTEUgICAgICAgICAgIDB4MEQKIAogI2RlZmluZSBBQ1BJX0JJVFBPU0lUSU9OX0FSQl9ESVNBQkxFICAgICAgICAgICAgMHgwMAogCisvKiBTdHJ1Y3RzIGFuZCBkZWZpbml0aW9ucyBmb3IgX09TSSBzdXBwb3J0IGFuZCBJL08gcG9ydCB2YWxpZGF0aW9uICovCisKKyNkZWZpbmUgQUNQSV9PU0lfV0lOXzIwMDAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFDUElfT1NJX1dJTl9YUCAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBBQ1BJX09TSV9XSU5fWFBfU1AxICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgQUNQSV9PU0lfV0lOU1JWXzIwMDMgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFDUElfT1NJX1dJTl9YUF9TUDIgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBBQ1BJX09TSV9XSU5TUlZfMjAwM19TUDEgICAgICAgIDB4MDYKKyNkZWZpbmUgQUNQSV9PU0lfV0lOX1ZJU1RBICAgICAgICAgICAgICAweDA3CisKKyNkZWZpbmUgQUNQSV9BTFdBWVNfSUxMRUdBTCAgICAgICAgICAgICAweDAwCisKK3N0cnVjdCBhY3BpX2ludGVyZmFjZV9pbmZvIHsKKwljaGFyICpuYW1lOworCXU4IHZhbHVlOworfTsKKworc3RydWN0IGFjcGlfcG9ydF9pbmZvIHsKKwljaGFyICpuYW1lOworCXUxNiBzdGFydDsKKwl1MTYgZW5kOworCXU4IG9zaV9kZXBlbmRlbmN5OworfTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogUmVzb3VyY2UgZGVzY3JpcHRvcnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaAppbmRleCA5YzEyN2U4Li45MWFjN2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbWFjcm9zLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY21hY3Jvcy5oCkBAIC0yOTIsMTAgKzI5Miw2IEBACiAjZGVmaW5lIEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShkKSAgICAgKCgodW5pb24gYWNwaV9kZXNjcmlwdG9yICopKHZvaWQgKikoZCkpLT5jb21tb24uZGVzY3JpcHRvcl90eXBlKQogI2RlZmluZSBBQ1BJX1NFVF9ERVNDUklQVE9SX1RZUEUoZCwgdCkgICgoKHVuaW9uIGFjcGlfZGVzY3JpcHRvciAqKSh2b2lkICopKGQpKS0+Y29tbW9uLmRlc2NyaXB0b3JfdHlwZSA9IHQpCiAKLS8qIE1hY3JvIHRvIHRlc3QgdGhlIG9iamVjdCB0eXBlICovCi0KLSNkZWZpbmUgQUNQSV9HRVRfT0JKRUNUX1RZUEUoZCkgICAgICAgICAoKCh1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICopKHZvaWQgKikoZCkpLT5jb21tb24udHlwZSkKLQogLyoKICAqIE1hY3JvcyBmb3IgdGhlIG1hc3RlciBBTUwgb3Bjb2RlIHRhYmxlCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaAppbmRleCBlYjZmMDM4Li41NDRkY2Y4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCkBAIC05Nyw3ICs5Nyw2IEBACiAjZGVmaW5lIEFPUE9CSl9PQkpFQ1RfSU5JVElBTElaRUQgICAweDA4CiAjZGVmaW5lIEFPUE9CSl9TRVRVUF9DT01QTEVURSAgICAgICAweDEwCiAjZGVmaW5lIEFPUE9CSl9TSU5HTEVfREFUVU0gICAgICAgICAweDIwCi0jZGVmaW5lIEFPUE9CSl9JTlZBTElEICAgICAgICAgICAgICAweDQwCS8qIFVzZWQgaWYgaG9zdCBPUyB3b24ndCBhbGxvdyBhbiBvcF9yZWdpb24gYWRkcmVzcyAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oCmluZGV4IDE2YTljYTkuLjYzZjY1NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwcmVkZWYuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmgKQEAgLTUyLDQxICs1Miw0NCBAQAogICogMSkgUFRZUEUxIHBhY2thZ2VzIGRvIG5vdCBjb250YWluIHN1Yi1wYWNrYWdlcy4KICAqCiAgKiBBQ1BJX1BUWVBFMV9GSVhFRDogRml4ZWQgbGVuZ3RoLCAxIG9yIDIgb2JqZWN0IHR5cGVzOgotICogICAgIG9iamVjdCB0eXBlCi0gKiAgICAgY291bnQKLSAqICAgICBvYmplY3QgdHlwZQotICogICAgIGNvdW50CisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIGNvdW50CisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIGNvdW50CiAgKgogICogQUNQSV9QVFlQRTFfVkFSOiBWYXJpYWJsZSBsZW5ndGg6Ci0gKiAgICBvYmplY3QgdHlwZSAoSW50L0J1Zi9SZWYpCisgKiAgICAgIG9iamVjdCB0eXBlIChJbnQvQnVmL1JlZikKICAqCi0gKiBBQ1BJX1BUWVBFMV9PUFRJT046IFBhY2thZ2UgaGFzIHNvbWUgcmVxdWlyZWQgYW5kIHNvbWUgb3B0aW9uYWwgZWxlbWVudHM6Ci0gKiAgICAgIFVzZWQgZm9yIF9QUlcKKyAqIEFDUElfUFRZUEUxX09QVElPTjogUGFja2FnZSBoYXMgc29tZSByZXF1aXJlZCBhbmQgc29tZSBvcHRpb25hbCBlbGVtZW50cworICogICAgICAoVXNlZCBmb3IgX1BSVykKICAqCiAgKgogICogMikgUFRZUEUyIHBhY2thZ2VzIGNvbnRhaW4gYSB2YXJpYWJsZSBudW1iZXIgb2Ygc3ViLXBhY2thZ2VzLiBFYWNoIG9mIHRoZQogICogICAgZGlmZmVyZW50IHR5cGVzIGRlc2NyaWJlIHRoZSBjb250ZW50cyBvZiBlYWNoIG9mIHRoZSBzdWItcGFja2FnZXMuCiAgKgogICogQUNQSV9QVFlQRTI6IEVhY2ggc3VicGFja2FnZSBjb250YWlucyAxIG9yIDIgb2JqZWN0IHR5cGVzOgotICogICAgIG9iamVjdCB0eXBlCi0gKiAgICAgY291bnQKLSAqICAgICBvYmplY3QgdHlwZQotICogICAgIGNvdW50CisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIGNvdW50CisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIGNvdW50CisgKiAgICAgIChVc2VkIGZvciBfQUxSLF9NTFMsX1BTUyxfVFJULF9UU1MpCiAgKgogICogQUNQSV9QVFlQRTJfQ09VTlQ6IEVhY2ggc3VicGFja2FnZSBoYXMgYSBjb3VudCBhcyBmaXJzdCBlbGVtZW50OgotICogICAgIG9iamVjdCB0eXBlCisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIChVc2VkIGZvciBfQ1NELF9QU0QsX1RTRCkKICAqCiAgKiBBQ1BJX1BUWVBFMl9QS0dfQ09VTlQ6IENvdW50IG9mIHN1YnBhY2thZ2VzIGF0IHN0YXJ0LCAxIG9yIDIgb2JqZWN0IHR5cGVzOgotICogICAgIG9iamVjdCB0eXBlCi0gKiAgICAgY291bnQKLSAqICAgICBvYmplY3QgdHlwZQotICogICAgIGNvdW50CisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIGNvdW50CisgKiAgICAgIG9iamVjdCB0eXBlCisgKiAgICAgIGNvdW50CisgKiAgICAgIChVc2VkIGZvciBfQ1NUKQogICoKLSAqIEFDUElfUFRZUEUyX0ZJWEVEOiBFYWNoIHN1YnBhY2thZ2UgaXMgb2YgZml4ZWQgbGVuZ3RoOgotICogICAgICBVc2VkIGZvciBfUFJUCisgKiBBQ1BJX1BUWVBFMl9GSVhFRDogRWFjaCBzdWJwYWNrYWdlIGlzIG9mIGZpeGVkIGxlbmd0aAorICogICAgICAoVXNlZCBmb3IgX1BSVCkKICAqCiAgKiBBQ1BJX1BUWVBFMl9NSU46IEVhY2ggc3VicGFja2FnZSBoYXMgYSB2YXJpYWJsZSBidXQgbWluaW11bSBsZW5ndGgKLSAqICAgICAgVXNlZCBmb3IgX0hQWAorICogICAgICAoVXNlZCBmb3IgX0hQWCkKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN0YWJsZXMuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN0YWJsZXMuaAppbmRleCA3Y2U2ZTMzLi4wMWM3NmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdGFibGVzLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3RhYmxlcy5oCkBAIC00OSw3ICs0OSw3IEBACiAvKgogICogdGJmYWR0IC0gRkFEVCBwYXJzZS9jb252ZXJ0L3ZhbGlkYXRlCiAgKi8KLXZvaWQgYWNwaV90Yl9wYXJzZV9mYWR0KHUzMiB0YWJsZV9pbmRleCwgdTggZmxhZ3MpOwordm9pZCBhY3BpX3RiX3BhcnNlX2ZhZHQodTMyIHRhYmxlX2luZGV4KTsKIAogdm9pZCBhY3BpX3RiX2NyZWF0ZV9sb2NhbF9mYWR0KHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqdGFibGUsIHUzMiBsZW5ndGgpOwogCkBAIC03OSw3ICs3OSw3IEBACiAKIHZvaWQgYWNwaV90Yl90ZXJtaW5hdGUodm9pZCk7CiAKLXZvaWQgYWNwaV90Yl9kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyKHUzMiB0YWJsZV9pbmRleCk7CithY3BpX3N0YXR1cyBhY3BpX3RiX2RlbGV0ZV9uYW1lc3BhY2VfYnlfb3duZXIodTMyIHRhYmxlX2luZGV4KTsKIAogYWNwaV9zdGF0dXMgYWNwaV90Yl9hbGxvY2F0ZV9vd25lcl9pZCh1MzIgdGFibGVfaW5kZXgpOwogCkBAIC0xMDksOSArMTA5LDggQEAKIAogdm9pZAogYWNwaV90Yl9pbnN0YWxsX3RhYmxlKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAotCQkgICAgICB1OCBmbGFncywgY2hhciAqc2lnbmF0dXJlLCB1MzIgdGFibGVfaW5kZXgpOworCQkgICAgICBjaGFyICpzaWduYXR1cmUsIHUzMiB0YWJsZV9pbmRleCk7CiAKLWFjcGlfc3RhdHVzCi1hY3BpX3RiX3BhcnNlX3Jvb3RfdGFibGUoYWNwaV9waHlzaWNhbF9hZGRyZXNzIHJzZHBfYWRkcmVzcywgdTggZmxhZ3MpOworYWNwaV9zdGF0dXMgYWNwaV90Yl9wYXJzZV9yb290X3RhYmxlKGFjcGlfcGh5c2ljYWxfYWRkcmVzcyByc2RwX2FkZHJlc3MpOwogCiAjZW5kaWYJCQkJLyogX19BQ1RBQkxFU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN1dGlscy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmgKaW5kZXggODBkODgxMy4uODk3ODEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmgKQEAgLTM0Niw2ICszNDYsMjEgQEAKIGFjcGlfdXRfZXhlY3V0ZV9zeGRzKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpkZXZpY2Vfbm9kZSwgdTggKiBoaWdoZXN0KTsKIAogLyoKKyAqIHV0bG9jayAtIHJlYWRlci93cml0ZXIgbG9ja3MKKyAqLworYWNwaV9zdGF0dXMgYWNwaV91dF9jcmVhdGVfcndfbG9jayhzdHJ1Y3QgYWNwaV9yd19sb2NrICpsb2NrKTsKKwordm9pZCBhY3BpX3V0X2RlbGV0ZV9yd19sb2NrKHN0cnVjdCBhY3BpX3J3X2xvY2sgKmxvY2spOworCithY3BpX3N0YXR1cyBhY3BpX3V0X2FjcXVpcmVfcmVhZF9sb2NrKHN0cnVjdCBhY3BpX3J3X2xvY2sgKmxvY2spOworCithY3BpX3N0YXR1cyBhY3BpX3V0X3JlbGVhc2VfcmVhZF9sb2NrKHN0cnVjdCBhY3BpX3J3X2xvY2sgKmxvY2spOworCithY3BpX3N0YXR1cyBhY3BpX3V0X2FjcXVpcmVfd3JpdGVfbG9jayhzdHJ1Y3QgYWNwaV9yd19sb2NrICpsb2NrKTsKKwordm9pZCBhY3BpX3V0X3JlbGVhc2Vfd3JpdGVfbG9jayhzdHJ1Y3QgYWNwaV9yd19sb2NrICpsb2NrKTsKKworLyoKICAqIHV0b2JqZWN0IC0gaW50ZXJuYWwgb2JqZWN0IGNyZWF0ZS9kZWxldGUvY2FjaGUgcm91dGluZXMKICAqLwogdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqYWNwaV91dF9jcmVhdGVfaW50ZXJuYWxfb2JqZWN0X2RiZyhjb25zdCBjaGFyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzaW5pdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc2luaXQuYwppbmRleCBlYjE0NGIxLi4zYWFlMTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzaW5pdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNpbml0LmMKQEAgLTE4MCwxMSArMTgwLDIzIEBACiAKIAkvKiBXYWxrIGVudGlyZSBuYW1lc3BhY2UgZnJvbSB0aGUgc3VwcGxpZWQgcm9vdCAqLwogCi0Jc3RhdHVzID0gYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfQU5ZLCBzdGFydF9ub2RlLCBBQ1BJX1VJTlQzMl9NQVgsCi0JCQkJICAgICBhY3BpX2RzX2luaXRfb25lX29iamVjdCwgJmluZm8sIE5VTEwpOworCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9OQU1FU1BBQ0UpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwl9CisKKwkvKgorCSAqIFdlIGRvbid0IHVzZSBhY3BpX3dhbGtfbmFtZXNwYWNlIHNpbmNlIHdlIGRvIG5vdCB3YW50IHRvIGFjcXVpcmUKKwkgKiB0aGUgbmFtZXNwYWNlIHJlYWRlciBsb2NrLgorCSAqLworCXN0YXR1cyA9CisJICAgIGFjcGlfbnNfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0FOWSwgc3RhcnRfbm9kZSwgQUNQSV9VSU5UMzJfTUFYLAorCQkJCSAgIEFDUElfTlNfV0FMS19VTkxPQ0ssIGFjcGlfZHNfaW5pdF9vbmVfb2JqZWN0LAorCQkJCSAgICZpbmZvLCBOVUxMKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgIkR1cmluZyBXYWxrTmFtZXNwYWNlIikpOwogCX0KKwkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfTkFNRVNQQUNFKTsKIAogCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlX2J5X2luZGV4KHRhYmxlX2luZGV4LCAmdGFibGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jCmluZGV4IGRhMGY1NDYuLjIyYjFhM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtdGhkYXQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbXRoZGF0LmMKQEAgLTcxMyw2ICs3MTMsNiBAQAogCiAJLyogR2V0IHRoZSBvYmplY3QgdHlwZSAqLwogCi0JcmV0dXJuX1ZBTFVFKEFDUElfR0VUX09CSkVDVF9UWVBFKG9iamVjdCkpOworCXJldHVybl9WQUxVRShvYmplY3QtPnR5cGUpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMKaW5kZXggMTVjNjI4ZS4uZGFiM2Y0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc29iamVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvYmplY3QuYwpAQCAtNTY1LDcgKzU2NSw3IEBACiAKIAkvKiBSZS10eXBlIHRoZSBvYmplY3QgYWNjb3JkaW5nIHRvIGl0cyBhcmd1bWVudCAqLwogCi0Jbm9kZS0+dHlwZSA9IEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKTsKKwlub2RlLT50eXBlID0gb2JqX2Rlc2MtPmNvbW1vbi50eXBlOwogCiAJLyogQXR0YWNoIG9iaiB0byBub2RlICovCiAKQEAgLTYxOSw3ICs2MTksNyBAQAogCiAJLyogUGVyZm9ybSBwZXItb2JqZWN0IGluaXRpYWxpemF0aW9uICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgogCiAJCS8qCkBAIC04MDMsNyArODAzLDcgQEAKIAlkZWZhdWx0OgogCiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJVbmltcGxlbWVudGVkIGRhdGEgdHlwZTogJVgiLAotCQkJICAgIEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkpOworCQkJICAgIG9ial9kZXNjLT5jb21tb24udHlwZSkpOwogCiAJCXN0YXR1cyA9IEFFX0FNTF9PUEVSQU5EX1RZUEU7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc29wY29kZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc29wY29kZS5jCmluZGV4IDBjM2I0ZGQuLmI0Yzg3YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvcGNvZGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb3Bjb2RlLmMKQEAgLTM5NywzMCArMzk3LDYgQEAKIAlzdGF0dXMgPSBhY3BpX2RzX2V4ZWN1dGVfYXJndW1lbnRzKG5vZGUsIGFjcGlfbnNfZ2V0X3BhcmVudF9ub2RlKG5vZGUpLAogCQkJCQkgICBleHRyYV9kZXNjLT5leHRyYS5hbWxfbGVuZ3RoLAogCQkJCQkgICBleHRyYV9kZXNjLT5leHRyYS5hbWxfc3RhcnQpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKLQl9Ci0KLQkvKiBWYWxpZGF0ZSB0aGUgcmVnaW9uIGFkZHJlc3MvbGVuZ3RoIHZpYSB0aGUgaG9zdCBPUyAqLwotCi0Jc3RhdHVzID0gYWNwaV9vc192YWxpZGF0ZV9hZGRyZXNzKG9ial9kZXNjLT5yZWdpb24uc3BhY2VfaWQsCi0JCQkJCSAgb2JqX2Rlc2MtPnJlZ2lvbi5hZGRyZXNzLAotCQkJCQkgIChhY3BpX3NpemUpIG9ial9kZXNjLT5yZWdpb24ubGVuZ3RoLAotCQkJCQkgIGFjcGlfdXRfZ2V0X25vZGVfbmFtZShub2RlKSk7Ci0KLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJLyoKLQkJICogSW52YWxpZCBhZGRyZXNzL2xlbmd0aC4gV2Ugd2lsbCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UgYW5kIG1hcmsKLQkJICogdGhlIHJlZ2lvbiBhcyBpbnZhbGlkLCBzbyB0aGF0IGl0IHdpbGwgY2F1c2UgYW4gYWRkaXRpb25hbCBlcnJvciBpZgotCQkgKiBpdCBpcyBldmVyIHVzZWQuIFRoZW4gcmV0dXJuIEFFX09LLgotCQkgKi8KLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKLQkJCQkiRHVyaW5nIGFkZHJlc3MgdmFsaWRhdGlvbiBvZiBPcFJlZ2lvbiBbJTQuNHNdIiwKLQkJCQlub2RlLT5uYW1lLmFzY2lpKSk7Ci0JCW9ial9kZXNjLT5jb21tb24uZmxhZ3MgfD0gQU9QT0JKX0lOVkFMSUQ7Ci0JCXN0YXR1cyA9IEFFX09LOwotCX0KLQogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCkBAIC00ODQsNyArNDYwLDcgQEAKIAogCS8qIEhvc3Qgb2JqZWN0IG11c3QgYmUgYSBCdWZmZXIgKi8KIAotCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShidWZmZXJfZGVzYykgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCWlmIChidWZmZXJfZGVzYy0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJICAgICJUYXJnZXQgb2YgQ3JlYXRlIEZpZWxkIGlzIG5vdCBhIEJ1ZmZlciBvYmplY3QgLSAlcyIsCiAJCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShidWZmZXJfZGVzYykpKTsKQEAgLTEzNjUsMTAgKzEzNDEsOCBAQAogCQkJaWYgKChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUKIAkJCSAgICAgKHdhbGtfc3RhdGUtPnJlc3VsdHMtPnJlc3VsdHMub2JqX2Rlc2NbMF0pID09CiAJCQkgICAgIEFDUElfREVTQ19UWVBFX09QRVJBTkQpCi0JCQkgICAgJiYKLQkJCSAgICAoQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCSAgICAgKHdhbGtfc3RhdGUtPnJlc3VsdHMtPnJlc3VsdHMub2JqX2Rlc2NbMF0pID09Ci0JCQkgICAgIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpCisJCQkgICAgJiYgKCh3YWxrX3N0YXRlLT5yZXN1bHRzLT5yZXN1bHRzLm9ial9kZXNjWzBdKS0+CisJCQkJY29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkKIAkJCSAgICAmJiAoKHdhbGtfc3RhdGUtPnJlc3VsdHMtPnJlc3VsdHMub2JqX2Rlc2NbMF0pLT4KIAkJCQlyZWZlcmVuY2UuY2xhc3MgIT0gQUNQSV9SRUZDTEFTU19JTkRFWCkpIHsKIAkJCQlzdGF0dXMgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYwppbmRleCBkYWJjMjNhLi5kZmExMDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzdXRpbHMuYwpAQCAtODE2LDcgKzgxNiw3IEBACiAJCWdvdG8gcHVzaF9yZXN1bHQ7CiAJfQogCi0JdHlwZSA9IEFDUElfR0VUX09CSkVDVF9UWVBFKCpvcGVyYW5kKTsKKwl0eXBlID0gKCpvcGVyYW5kKS0+Y29tbW9uLnR5cGU7CiAKIAlzdGF0dXMgPSBhY3BpX2V4X3Jlc29sdmVfdG9fdmFsdWUob3BlcmFuZCwgd2Fsa19zdGF0ZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2V4ZWMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3ZXhlYy5jCmluZGV4IDM1MGU2NjUuLmYwMjgwODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3ZXhlYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3ZXhlYy5jCkBAIC0xMzgsMTEgKzEzOCwxMCBAQAogCQlnb3RvIGNsZWFudXA7CiAJfQogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKGxvY2FsX29ial9kZXNjKSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgeworCWlmIChsb2NhbF9vYmpfZGVzYy0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiQmFkIHByZWRpY2F0ZSAobm90IGFuIGludGVnZXIpIE9iakRlc2M9JXAgU3RhdGU9JXAgVHlwZT0lWCIsCi0JCQkgICAgb2JqX2Rlc2MsIHdhbGtfc3RhdGUsCi0JCQkgICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSk7CisJCQkgICAgb2JqX2Rlc2MsIHdhbGtfc3RhdGUsIG9ial9kZXNjLT5jb21tb24udHlwZSkpOwogCiAJCXN0YXR1cyA9IEFFX0FNTF9PUEVSQU5EX1RZUEU7CiAJCWdvdG8gY2xlYW51cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmV2ZW50LmMKaW5kZXggODAzZWRkOS4uY2Q1NWM3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmV2ZW50LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmV2ZW50LmMKQEAgLTE4Myw3ICsxODMsNyBAQAogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCi0gKiBERVNDUklQVElPTjogSW5zdGFsbCB0aGUgZml4ZWQgZXZlbnQgaGFuZGxlcnMgYW5kIGVuYWJsZSB0aGUgZml4ZWQgZXZlbnRzLgorICogREVTQ1JJUFRJT046IEluc3RhbGwgdGhlIGZpeGVkIGV2ZW50IGhhbmRsZXJzIGFuZCBkaXNhYmxlIGFsbCBmaXhlZCBldmVudHMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMjAwLDEyICsyMDAsMTMgQEAKIAkJYWNwaV9nYmxfZml4ZWRfZXZlbnRfaGFuZGxlcnNbaV0uaGFuZGxlciA9IE5VTEw7CiAJCWFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2hhbmRsZXJzW2ldLmNvbnRleHQgPSBOVUxMOwogCi0JCS8qIEVuYWJsZSB0aGUgZml4ZWQgZXZlbnQgKi8KKwkJLyogRGlzYWJsZSB0aGUgZml4ZWQgZXZlbnQgKi8KIAogCQlpZiAoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tpXS5lbmFibGVfcmVnaXN0ZXJfaWQgIT0gMHhGRikgewogCQkJc3RhdHVzID0KLQkJCSAgICBhY3BpX3NldF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvW2ldLgotCQkJCQkgICAgICBlbmFibGVfcmVnaXN0ZXJfaWQsIDApOworCQkJICAgIGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm8KKwkJCQkJCSAgICBbaV0uZW5hYmxlX3JlZ2lzdGVyX2lkLAorCQkJCQkJICAgIEFDUElfRElTQUJMRV9FVkVOVCk7CiAJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCQlyZXR1cm4gKHN0YXR1cyk7CiAJCQl9CkBAIC0yODgsMTYgKzI4OSwxNyBAQAogCiAJLyogQ2xlYXIgdGhlIHN0YXR1cyBiaXQgKi8KIAotCSh2b2lkKWFjcGlfc2V0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bZXZlbnRdLgotCQkJCXN0YXR1c19yZWdpc3Rlcl9pZCwgMSk7CisJKHZvaWQpYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCisJCQkJICAgICAgc3RhdHVzX3JlZ2lzdGVyX2lkLCBBQ1BJX0NMRUFSX1NUQVRVUyk7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB3ZSd2ZSBnb3QgYSBoYW5kbGVyLiBJZiBub3QsIHJlcG9ydCBhbiBlcnJvci4gVGhlIGV2ZW50IGlzCiAJICogZGlzYWJsZWQgdG8gcHJldmVudCBmdXJ0aGVyIGludGVycnVwdHMuCiAJICovCiAJaWYgKE5VTEwgPT0gYWNwaV9nYmxfZml4ZWRfZXZlbnRfaGFuZGxlcnNbZXZlbnRdLmhhbmRsZXIpIHsKLQkJKHZvaWQpYWNwaV9zZXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCi0JCQkJCWVuYWJsZV9yZWdpc3Rlcl9pZCwgMCk7CisJCSh2b2lkKWFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bZXZlbnRdLgorCQkJCQkgICAgICBlbmFibGVfcmVnaXN0ZXJfaWQsCisJCQkJCSAgICAgIEFDUElfRElTQUJMRV9FVkVOVCk7CiAKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiTm8gaW5zdGFsbGVkIGhhbmRsZXIgZm9yIGZpeGVkIGV2ZW50IFslMDhYXSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKaW5kZXggZjM0NWNlZC4uYjlkOGVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYwpAQCAtODgsMTAgKzg4LDEwIEBACiAKIAlzdGF0dXMgPSBhY3BpX2V2X2Rpc2FibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKIAotCS8qIFR5cGUgd2FzIHZhbGlkYXRlZCBhYm92ZSAqLworCS8qIENsZWFyIHRoZSB0eXBlIGJpdHMgYW5kIGluc2VydCB0aGUgbmV3IFR5cGUgKi8KIAotCWdwZV9ldmVudF9pbmZvLT5mbGFncyAmPSB+QUNQSV9HUEVfVFlQRV9NQVNLOwkvKiBDbGVhciB0eXBlIGJpdHMgKi8KLQlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgfD0gdHlwZTsJLyogSW5zZXJ0IHR5cGUgKi8KKwlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJj0gfkFDUElfR1BFX1RZUEVfTUFTSzsKKwlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgfD0gdHlwZTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApAQCAtMTIyLDYgKzEyMiw3IEBACiAJaWYgKCFncGVfcmVnaXN0ZXJfaW5mbykgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9UX0VYSVNUKTsKIAl9CisKIAlyZWdpc3Rlcl9iaXQgPSAodTgpCiAJICAgICgxIDw8CiAJICAgICAoZ3BlX2V2ZW50X2luZm8tPmdwZV9udW1iZXIgLSBncGVfcmVnaXN0ZXJfaW5mby0+YmFzZV9ncGVfbnVtYmVyKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMKaW5kZXggNDg0Y2MwNS4uN2IzNDYzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYwpAQCAtMTA0LDkgKzEwNCw5IEBACiAKIAkJd2hpbGUgKGdwZV9ibG9jaykgewogCQkJaWYgKCgmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvWzBdIDw9IGdwZV9ldmVudF9pbmZvKSAmJgotCQkJICAgICgmZ3BlX2Jsb2NrLT4KLQkJCSAgICAgZXZlbnRfaW5mb1soKGFjcGlfc2l6ZSkgZ3BlX2Jsb2NrLT4KLQkJCQkJIHJlZ2lzdGVyX2NvdW50KSAqIDhdID4KKwkJCSAgICAoJmdwZV9ibG9jay0+ZXZlbnRfaW5mb1soKGFjcGlfc2l6ZSkKKwkJCQkJCSAgICAgZ3BlX2Jsb2NrLT4KKwkJCQkJCSAgICAgcmVnaXN0ZXJfY291bnQpICogOF0gPgogCQkJICAgICBncGVfZXZlbnRfaW5mbykpIHsKIAkJCQlyZXR1cm4gKFRSVUUpOwogCQkJfQpAQCAtMjEwLDEwICsyMTAsOSBAQAogCQkvKiBOb3cgbG9vayBhdCB0aGUgaW5kaXZpZHVhbCBHUEVzIGluIHRoaXMgYnl0ZSByZWdpc3RlciAqLwogCiAJCWZvciAoaiA9IDA7IGogPCBBQ1BJX0dQRV9SRUdJU1RFUl9XSURUSDsgaisrKSB7Ci0JCQlncGVfZXZlbnRfaW5mbyA9Ci0JCQkgICAgJmdwZV9ibG9jay0+Ci0JCQkgICAgZXZlbnRfaW5mb1soKGFjcGlfc2l6ZSkgaSAqCi0JCQkJCUFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKSArIGpdOworCQkJZ3BlX2V2ZW50X2luZm8gPSAmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvWygoYWNwaV9zaXplKSBpICoKKwkJCQkJCQkJIEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKQorCQkJCQkJCQkrIGpdOwogCiAJCQlpZiAoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spID09CiAJCQkgICAgQUNQSV9HUEVfRElTUEFUQ0hfSEFORExFUikgewpAQCAtMjkzLDggKzI5Miw4IEBACiAJCS8qIFVua25vd24gbWV0aG9kIHR5cGUsIGp1c3QgaWdub3JlIGl0ISAqLwogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwKLQkJCQkgICJJZ25vcmluZyB1bmtub3duIEdQRSBtZXRob2QgdHlwZTogJXMgKG5hbWUgbm90IG9mIGZvcm0gX0x4eCBvciBfRXh4KSIsCi0JCQkJICBuYW1lKSk7CisJCQkJICAiSWdub3JpbmcgdW5rbm93biBHUEUgbWV0aG9kIHR5cGU6ICVzICIKKwkJCQkgICIobmFtZSBub3Qgb2YgZm9ybSBfTHh4IG9yIF9FeHgpIiwgbmFtZSkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KIApAQCAtMzA2LDE3ICszMDUsMTYgQEAKIAkJLyogQ29udmVyc2lvbiBmYWlsZWQ7IGludmFsaWQgbWV0aG9kLCBqdXN0IGlnbm9yZSBpdCAqLwogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTE9BRCwKLQkJCQkgICJDb3VsZCBub3QgZXh0cmFjdCBHUEUgbnVtYmVyIGZyb20gbmFtZTogJXMgKG5hbWUgaXMgbm90IG9mIGZvcm0gX0x4eCBvciBfRXh4KSIsCi0JCQkJICBuYW1lKSk7CisJCQkJICAiQ291bGQgbm90IGV4dHJhY3QgR1BFIG51bWJlciBmcm9tIG5hbWU6ICVzICIKKwkJCQkgICIobmFtZSBpcyBub3Qgb2YgZm9ybSBfTHh4IG9yIF9FeHgpIiwgbmFtZSkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KIAogCS8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBHUEUgbnVtYmVyIGZvciB0aGlzIEdQRSBibG9jayAqLwogCiAJaWYgKChncGVfbnVtYmVyIDwgZ3BlX2Jsb2NrLT5ibG9ja19iYXNlX251bWJlcikgfHwKLQkgICAgKGdwZV9udW1iZXIgPj0KLQkgICAgIChncGVfYmxvY2stPmJsb2NrX2Jhc2VfbnVtYmVyICsKLQkgICAgICAoZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudCAqIDgpKSkpIHsKKwkgICAgKGdwZV9udW1iZXIgPj0gKGdwZV9ibG9jay0+YmxvY2tfYmFzZV9udW1iZXIgKworCQkJICAgIChncGVfYmxvY2stPnJlZ2lzdGVyX2NvdW50ICogOCkpKSkgewogCQkvKgogCQkgKiBOb3QgdmFsaWQgZm9yIHRoaXMgR1BFIGJsb2NrLCBqdXN0IGlnbm9yZSBpdC4gSG93ZXZlciwgaXQgbWF5IGJlCiAJCSAqIHZhbGlkIGZvciBhIGRpZmZlcmVudCBHUEUgYmxvY2ssIHNpbmNlIEdQRTAgYW5kIEdQRTEgbWV0aG9kcyBib3RoCkBAIC00MDgsNyArNDA2LDcgQEAKIAkgKi8KIAlvYmpfZGVzYyA9IHBrZ19kZXNjLT5wYWNrYWdlLmVsZW1lbnRzWzBdOwogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgeworCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKIAogCQkvKiBVc2UgRkFEVC1kZWZpbmVkIEdQRSBkZXZpY2UgKGZyb20gZGVmaW5pdGlvbiBvZiBfUFJXKSAqLwogCkBAIC00MTcsMTUgKzQxNSwxNSBAQAogCQkvKiBJbnRlZ2VyIGlzIHRoZSBHUEUgbnVtYmVyIGluIHRoZSBGQURUIGRlc2NyaWJlZCBHUEUgYmxvY2tzICovCiAKIAkJZ3BlX251bWJlciA9ICh1MzIpIG9ial9kZXNjLT5pbnRlZ2VyLnZhbHVlOwotCX0gZWxzZSBpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJfSBlbHNlIGlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKIAogCQkvKiBQYWNrYWdlIGNvbnRhaW5zIGEgR1BFIHJlZmVyZW5jZSBhbmQgR1BFIG51bWJlciB3aXRoaW4gYSBHUEUgYmxvY2sgKi8KIAogCQlpZiAoKG9ial9kZXNjLT5wYWNrYWdlLmNvdW50IDwgMikgfHwKLQkJICAgIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50c1swXSkgIT0KLQkJICAgICBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKQotCQkgICAgfHwgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzWzFdKSAhPQotCQkJQUNQSV9UWVBFX0lOVEVHRVIpKSB7CisJCSAgICAoKG9ial9kZXNjLT5wYWNrYWdlLmVsZW1lbnRzWzBdKS0+Y29tbW9uLnR5cGUgIT0KKwkJICAgICBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB8fAorCQkgICAgKChvYmpfZGVzYy0+cGFja2FnZS5lbGVtZW50c1sxXSktPmNvbW1vbi50eXBlICE9CisJCSAgICAgQUNQSV9UWVBFX0lOVEVHRVIpKSB7CiAJCQlnb3RvIGNsZWFudXA7CiAJCX0KIApAQCAtNDUwLDExICs0NDgsMTEgQEAKIAkgKi8KIAlpZiAoKGdwZV9kZXZpY2UgPT0gdGFyZ2V0X2dwZV9kZXZpY2UpICYmCiAJICAgIChncGVfbnVtYmVyID49IGdwZV9ibG9jay0+YmxvY2tfYmFzZV9udW1iZXIpICYmCi0JICAgIChncGVfbnVtYmVyIDwKLQkgICAgIGdwZV9ibG9jay0+YmxvY2tfYmFzZV9udW1iZXIgKyAoZ3BlX2Jsb2NrLT5yZWdpc3Rlcl9jb3VudCAqIDgpKSkgewotCQlncGVfZXZlbnRfaW5mbyA9Ci0JCSAgICAmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvW2dwZV9udW1iZXIgLQotCQkJCQkgICBncGVfYmxvY2stPmJsb2NrX2Jhc2VfbnVtYmVyXTsKKwkgICAgKGdwZV9udW1iZXIgPCBncGVfYmxvY2stPmJsb2NrX2Jhc2VfbnVtYmVyICsKKwkgICAgIChncGVfYmxvY2stPnJlZ2lzdGVyX2NvdW50ICogOCkpKSB7CisJCWdwZV9ldmVudF9pbmZvID0gJmdwZV9ibG9jay0+ZXZlbnRfaW5mb1tncGVfbnVtYmVyIC0KKwkJCQkJCQlncGVfYmxvY2stPgorCQkJCQkJCWJsb2NrX2Jhc2VfbnVtYmVyXTsKIAogCQkvKiBNYXJrIEdQRSBmb3IgV0FLRS1PTkxZIGJ1dCBXQUtFX0RJU0FCTEVEICovCiAKQEAgLTEwMzMsOCArMTAzMSw4IEBACiAJICogMSkgYXJlICJydW50aW1lIiBvciAicnVuL3dha2UiIEdQRXMsIGFuZAogCSAqIDIpIGhhdmUgYSBjb3JyZXNwb25kaW5nIF9MeHggb3IgX0V4eCBtZXRob2QKIAkgKgotCSAqIEFueSBvdGhlciBHUEVzIHdpdGhpbiB0aGlzIGJsb2NrIG11c3QgYmUgZW5hYmxlZCB2aWEgdGhlIGFjcGlfZW5hYmxlX2dwZSgpCi0JICogZXh0ZXJuYWwgaW50ZXJmYWNlLgorCSAqIEFueSBvdGhlciBHUEVzIHdpdGhpbiB0aGlzIGJsb2NrIG11c3QgYmUgZW5hYmxlZCB2aWEgdGhlCisJICogYWNwaV9lbmFibGVfZ3BlKCkgZXh0ZXJuYWwgaW50ZXJmYWNlLgogCSAqLwogCXdha2VfZ3BlX2NvdW50ID0gMDsKIAlncGVfZW5hYmxlZF9jb3VudCA9IDA7CkBAIC0xMDQ0LDE0ICsxMDQyLDEzIEBACiAKIAkJCS8qIEdldCB0aGUgaW5mbyBibG9jayBmb3IgdGhpcyBwYXJ0aWN1bGFyIEdQRSAqLwogCi0JCQlncGVfZXZlbnRfaW5mbyA9Ci0JCQkgICAgJmdwZV9ibG9jay0+Ci0JCQkgICAgZXZlbnRfaW5mb1soKGFjcGlfc2l6ZSkgaSAqCi0JCQkJCUFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKSArIGpdOworCQkJZ3BlX2V2ZW50X2luZm8gPSAmZ3BlX2Jsb2NrLT5ldmVudF9pbmZvWygoYWNwaV9zaXplKSBpICoKKwkJCQkJCQkJIEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKQorCQkJCQkJCQkrIGpdOwogCiAJCQlpZiAoKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSA9PQotCQkJICAgICBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpCi0JCQkgICAgJiYgKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX1RZUEVfUlVOVElNRSkpIHsKKwkJCSAgICAgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EKSAmJgorCQkJICAgIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpKSB7CiAJCQkJZ3BlX2VuYWJsZWRfY291bnQrKzsKIAkJCX0KIApAQCAtMTEwNSw4ICsxMTAyLDggQEAKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIEdQRSBCbG9jayhzKSBkZWZpbmVkIGluIHRoZSBGQURUCiAJICoKLQkgKiBXaHkgdGhlIEdQRSByZWdpc3RlciBibG9jayBsZW5ndGhzIGFyZSBkaXZpZGVkIGJ5IDI6ICBGcm9tIHRoZSBBQ1BJIFNwZWMsCi0JICogc2VjdGlvbiAiR2VuZXJhbC1QdXJwb3NlIEV2ZW50IFJlZ2lzdGVycyIsIHdlIGhhdmU6CisJICogV2h5IHRoZSBHUEUgcmVnaXN0ZXIgYmxvY2sgbGVuZ3RocyBhcmUgZGl2aWRlZCBieSAyOiAgRnJvbSB0aGUgQUNQSQorCSAqIFNwZWMsIHNlY3Rpb24gIkdlbmVyYWwtUHVycG9zZSBFdmVudCBSZWdpc3RlcnMiLCB3ZSBoYXZlOgogCSAqCiAJICogIkVhY2ggcmVnaXN0ZXIgYmxvY2sgY29udGFpbnMgdHdvIHJlZ2lzdGVycyBvZiBlcXVhbCBsZW5ndGgKIAkgKiAgR1BFeF9TVFMgYW5kIEdQRXhfRU4gKHdoZXJlIHggaXMgMCBvciAxKS4gVGhlIGxlbmd0aCBvZiB0aGUKQEAgLTExNjMsNyArMTE2MCw4IEBACiAJCWlmICgocmVnaXN0ZXJfY291bnQwKSAmJgogCQkgICAgKGdwZV9udW1iZXJfbWF4ID49IGFjcGlfZ2JsX0ZBRFQuZ3BlMV9iYXNlKSkgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCQkgICAgIkdQRTAgYmxvY2sgKEdQRSAwIHRvICVkKSBvdmVybGFwcyB0aGUgR1BFMSBibG9jayAoR1BFICVkIHRvICVkKSAtIElnbm9yaW5nIEdQRTEiLAorCQkJCSAgICAiR1BFMCBibG9jayAoR1BFIDAgdG8gJWQpIG92ZXJsYXBzIHRoZSBHUEUxIGJsb2NrICIKKwkJCQkgICAgIihHUEUgJWQgdG8gJWQpIC0gSWdub3JpbmcgR1BFMSIsCiAJCQkJICAgIGdwZV9udW1iZXJfbWF4LCBhY3BpX2dibF9GQURULmdwZTFfYmFzZSwKIAkJCQkgICAgYWNwaV9nYmxfRkFEVC5ncGUxX2Jhc2UgKwogCQkJCSAgICAoKHJlZ2lzdGVyX2NvdW50MSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYwppbmRleCA1Zjg5MzA1Li5jZTIyNGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZtaXNjLmMKQEAgLTE2MywxMCArMTYzLDEwIEBACiAJICogMikgR2xvYmFsIGRldmljZSBub3RpZnkgaGFuZGxlcgogCSAqIDMpIFBlci1kZXZpY2Ugbm90aWZ5IGhhbmRsZXIKIAkgKi8KLQlpZiAoKGFjcGlfZ2JsX3N5c3RlbV9ub3RpZnkuaGFuZGxlcgotCSAgICAgJiYgKG5vdGlmeV92YWx1ZSA8PSBBQ1BJX01BWF9TWVNfTk9USUZZKSkKLQkgICAgfHwgKGFjcGlfZ2JsX2RldmljZV9ub3RpZnkuaGFuZGxlcgotCQkmJiAobm90aWZ5X3ZhbHVlID4gQUNQSV9NQVhfU1lTX05PVElGWSkpIHx8IGhhbmRsZXJfb2JqKSB7CisJaWYgKChhY3BpX2dibF9zeXN0ZW1fbm90aWZ5LmhhbmRsZXIgJiYKKwkgICAgIChub3RpZnlfdmFsdWUgPD0gQUNQSV9NQVhfU1lTX05PVElGWSkpIHx8CisJICAgIChhY3BpX2dibF9kZXZpY2Vfbm90aWZ5LmhhbmRsZXIgJiYKKwkgICAgIChub3RpZnlfdmFsdWUgPiBBQ1BJX01BWF9TWVNfTk9USUZZKSkgfHwgaGFuZGxlcl9vYmopIHsKIAkJbm90aWZ5X2luZm8gPSBhY3BpX3V0X2NyZWF0ZV9nZW5lcmljX3N0YXRlKCk7CiAJCWlmICghbm90aWZ5X2luZm8pIHsKIAkJCXJldHVybiAoQUVfTk9fTUVNT1JZKTsKQEAgLTE3NCw3ICsxNzQsOCBAQAogCiAJCWlmICghaGFuZGxlcl9vYmopIHsKIAkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKLQkJCQkJICAiRXhlY3V0aW5nIHN5c3RlbSBub3RpZnkgaGFuZGxlciBmb3IgTm90aWZ5ICglNC40cywgJVgpIG5vZGUgJXBcbiIsCisJCQkJCSAgIkV4ZWN1dGluZyBzeXN0ZW0gbm90aWZ5IGhhbmRsZXIgZm9yIE5vdGlmeSAoJTQuNHMsICVYKSAiCisJCQkJCSAgIm5vZGUgJXBcbiIsCiAJCQkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKG5vZGUpLAogCQkJCQkgIG5vdGlmeV92YWx1ZSwgbm9kZSkpOwogCQl9CkBAIC01MzQsOCArNTM1LDkgQEAKIAkJICovCiAJCWlmIChwZW5kaW5nKSB7CiAJCQlzdGF0dXMgPQotCQkJICAgIGFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0dMT0JBTF9MT0NLX1JFTEVBU0UsCi0JCQkJCSAgICAgIDEpOworCQkJICAgIGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyCisJCQkgICAgKEFDUElfQklUUkVHX0dMT0JBTF9MT0NLX1JFTEVBU0UsCisJCQkgICAgIEFDUElfRU5BQkxFX0VWRU5UKTsKIAkJfQogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZWdpb24uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZWdpb24uYwppbmRleCA2NjVjMDg4Li41MzhkNjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmVnaW9uLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJlZ2lvbi5jCkBAIC02OTEsNyArNjkxLDcgQEAKIAogCS8qIERldmljZXMgYXJlIGhhbmRsZWQgZGlmZmVyZW50IHRoYW4gcmVnaW9ucyAqLwogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfREVWSUNFKSB7CisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfREVWSUNFKSB7CiAKIAkJLyogQ2hlY2sgaWYgdGhpcyBEZXZpY2UgYWxyZWFkeSBoYXMgYSBoYW5kbGVyIGZvciB0aGlzIGFkZHJlc3Mgc3BhY2UgKi8KIApAQCAtNzAzLDcgKzcwMyw4IEBACiAJCQlpZiAobmV4dF9oYW5kbGVyX29iai0+YWRkcmVzc19zcGFjZS5zcGFjZV9pZCA9PQogCQkJICAgIGhhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLnNwYWNlX2lkKSB7CiAJCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9PUFJFR0lPTiwKLQkJCQkJCSAgIkZvdW5kIGhhbmRsZXIgZm9yIHJlZ2lvbiBbJXNdIGluIGRldmljZSAlcCglcCkgaGFuZGxlciAlcFxuIiwKKwkJCQkJCSAgIkZvdW5kIGhhbmRsZXIgZm9yIHJlZ2lvbiBbJXNdIGluIGRldmljZSAlcCglcCkgIgorCQkJCQkJICAiaGFuZGxlciAlcFxuIiwKIAkJCQkJCSAgYWNwaV91dF9nZXRfcmVnaW9uX25hbWUKIAkJCQkJCSAgKGhhbmRsZXJfb2JqLT5hZGRyZXNzX3NwYWNlLgogCQkJCQkJICAgc3BhY2VfaWQpLCBvYmpfZGVzYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYwppbmRleCBmM2YxZmI0Li4yODRhN2JlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmduaW5pLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jCkBAIC0yNDEsNyArMjQxLDggQEAKIAkJCQkJCXN0YXR1cyA9IEFFX09LOwogCQkJCQl9IGVsc2UgewogCQkJCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKLQkJCQkJCQkJIkNvdWxkIG5vdCBpbnN0YWxsIFBjaUNvbmZpZyBoYW5kbGVyIGZvciBSb290IEJyaWRnZSAlNC40cyIsCisJCQkJCQkJCSJDb3VsZCBub3QgaW5zdGFsbCBQY2lDb25maWcgaGFuZGxlciAiCisJCQkJCQkJCSJmb3IgUm9vdCBCcmlkZ2UgJTQuNHMiLAogCQkJCQkJCQlhY3BpX3V0X2dldF9ub2RlX25hbWUKIAkJCQkJCQkJKHBjaV9yb290X25vZGUpKSk7CiAJCQkJCX0KQEAgLTI5Myw5ICsyOTQsOCBAQAogCSAqIEdldCB0aGUgUENJIGRldmljZSBhbmQgZnVuY3Rpb24gbnVtYmVycyBmcm9tIHRoZSBfQURSIG9iamVjdCBjb250YWluZWQKIAkgKiBpbiB0aGUgcGFyZW50J3Mgc2NvcGUuCiAJICovCi0Jc3RhdHVzID0KLQkgICAgYWNwaV91dF9ldmFsdWF0ZV9udW1lcmljX29iamVjdChNRVRIT0RfTkFNRV9fQURSLCBwY2lfZGV2aWNlX25vZGUsCi0JCQkJCSAgICAmcGNpX3ZhbHVlKTsKKwlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KE1FVEhPRF9OQU1FX19BRFIsCisJCQkJCQkgcGNpX2RldmljZV9ub2RlLCAmcGNpX3ZhbHVlKTsKIAogCS8qCiAJICogVGhlIGRlZmF1bHQgaXMgemVybywgYW5kIHNpbmNlIHRoZSBhbGxvY2F0aW9uIGFib3ZlIHplcm9lZCB0aGUgZGF0YSwKQEAgLTMwOCwxOCArMzA4LDE2IEBACiAKIAkvKiBUaGUgUENJIHNlZ21lbnQgbnVtYmVyIGNvbWVzIGZyb20gdGhlIF9TRUcgbWV0aG9kICovCiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KE1FVEhPRF9OQU1FX19TRUcsIHBjaV9yb290X25vZGUsCi0JCQkJCSAgICAmcGNpX3ZhbHVlKTsKKwlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KE1FVEhPRF9OQU1FX19TRUcsCisJCQkJCQkgcGNpX3Jvb3Rfbm9kZSwgJnBjaV92YWx1ZSk7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCXBjaV9pZC0+c2VnbWVudCA9IEFDUElfTE9XT1JEKHBjaV92YWx1ZSk7CiAJfQogCiAJLyogVGhlIFBDSSBidXMgbnVtYmVyIGNvbWVzIGZyb20gdGhlIF9CQk4gbWV0aG9kICovCiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KE1FVEhPRF9OQU1FX19CQk4sIHBjaV9yb290X25vZGUsCi0JCQkJCSAgICAmcGNpX3ZhbHVlKTsKKwlzdGF0dXMgPSBhY3BpX3V0X2V2YWx1YXRlX251bWVyaWNfb2JqZWN0KE1FVEhPRF9OQU1FX19CQk4sCisJCQkJCQkgcGNpX3Jvb3Rfbm9kZSwgJnBjaV92YWx1ZSk7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCXBjaV9pZC0+YnVzID0gQUNQSV9MT1dPUkQocGNpX3ZhbHVlKTsKIAl9CkBAIC02MzIsOCArNjMwLDggQEAKIAkJCQkJCQkJICBhY3BpX25zX2xvY2tlZCk7CiAKIAkJCQkJLyoKLQkJCQkJICogVGVsbCBhbGwgdXNlcnMgdGhhdCB0aGlzIHJlZ2lvbiBpcyB1c2FibGUgYnkgcnVubmluZyB0aGUgX1JFRwotCQkJCQkgKiBtZXRob2QKKwkJCQkJICogVGVsbCBhbGwgdXNlcnMgdGhhdCB0aGlzIHJlZ2lvbiBpcyB1c2FibGUgYnkKKwkJCQkJICogcnVubmluZyB0aGUgX1JFRyBtZXRob2QKIAkJCQkJICovCiAJCQkJCWlmIChhY3BpX25zX2xvY2tlZCkgewogCQkJCQkJc3RhdHVzID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMKaW5kZXggM2FjYTkwMS4uMTBiODU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMKQEAgLTYzMSw3ICs2MzEsOCBAQAogCiAJLyogU2V0dXAgdXAgZGlzcGF0Y2ggZmxhZ3MgdG8gaW5kaWNhdGUgaGFuZGxlciAodnMuIG1ldGhvZCkgKi8KIAotCWdwZV9ldmVudF9pbmZvLT5mbGFncyAmPSB+KEFDUElfR1BFX1hSVVBUX1RZUEVfTUFTSyB8IEFDUElfR1BFX0RJU1BBVENIX01BU0spOwkvKiBDbGVhciBiaXRzICovCisJZ3BlX2V2ZW50X2luZm8tPmZsYWdzICY9CisJICAgIH4oQUNQSV9HUEVfWFJVUFRfVFlQRV9NQVNLIHwgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSyk7CiAJZ3BlX2V2ZW50X2luZm8tPmZsYWdzIHw9ICh1OCkgKHR5cGUgfCBBQ1BJX0dQRV9ESVNQQVRDSF9IQU5ETEVSKTsKIAogCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMKaW5kZXggMzU0ODVlNC4uZDBhMDgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYwpAQCAtMTcyLDggKzE3Miw4IEBACiAJICogcmVnaXN0ZXIgYml0KQogCSAqLwogCXN0YXR1cyA9Ci0JICAgIGFjcGlfc2V0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bZXZlbnRdLgotCQkJICAgICAgZW5hYmxlX3JlZ2lzdGVyX2lkLCAxKTsKKwkgICAgYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCisJCQkJICAgIGVuYWJsZV9yZWdpc3Rlcl9pZCwgQUNQSV9FTkFCTEVfRVZFTlQpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC0xODEsOCArMTgxLDggQEAKIAkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgaGFyZHdhcmUgcmVzcG9uZGVkICovCiAKIAlzdGF0dXMgPQotCSAgICBhY3BpX2dldF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvW2V2ZW50XS4KLQkJCSAgICAgIGVuYWJsZV9yZWdpc3Rlcl9pZCwgJnZhbHVlKTsKKwkgICAgYWNwaV9yZWFkX2JpdF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvW2V2ZW50XS4KKwkJCQkgICBlbmFibGVfcmVnaXN0ZXJfaWQsICZ2YWx1ZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KQEAgLTM1NCwxNSArMzU0LDE1IEBACiAJICogcmVnaXN0ZXIgYml0KQogCSAqLwogCXN0YXR1cyA9Ci0JICAgIGFjcGlfc2V0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bZXZlbnRdLgotCQkJICAgICAgZW5hYmxlX3JlZ2lzdGVyX2lkLCAwKTsKKwkgICAgYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCisJCQkJICAgIGVuYWJsZV9yZWdpc3Rlcl9pZCwgQUNQSV9ESVNBQkxFX0VWRU5UKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCiAJc3RhdHVzID0KLQkgICAgYWNwaV9nZXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCi0JCQkgICAgICBlbmFibGVfcmVnaXN0ZXJfaWQsICZ2YWx1ZSk7CisJICAgIGFjcGlfcmVhZF9iaXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCisJCQkJICAgZW5hYmxlX3JlZ2lzdGVyX2lkLCAmdmFsdWUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC00MDcsOCArNDA3LDggQEAKIAkgKiByZWdpc3RlciBiaXQpCiAJICovCiAJc3RhdHVzID0KLQkgICAgYWNwaV9zZXRfcmVnaXN0ZXIoYWNwaV9nYmxfZml4ZWRfZXZlbnRfaW5mb1tldmVudF0uCi0JCQkgICAgICBzdGF0dXNfcmVnaXN0ZXJfaWQsIDEpOworCSAgICBhY3BpX3dyaXRlX2JpdF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvW2V2ZW50XS4KKwkJCQkgICAgc3RhdHVzX3JlZ2lzdGVyX2lkLCBBQ1BJX0NMRUFSX1NUQVRVUyk7CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KQEAgLTQ5NSw3ICs0OTUsNyBAQAogCS8qIEdldCB0aGUgc3RhdHVzIG9mIHRoZSByZXF1ZXN0ZWQgZml4ZWQgZXZlbnQgKi8KIAogCXN0YXR1cyA9Ci0JICAgIGFjcGlfZ2V0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bZXZlbnRdLgorCSAgICBhY3BpX3JlYWRfYml0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm9bZXZlbnRdLgogCQkJICAgICAgZW5hYmxlX3JlZ2lzdGVyX2lkLCAmdmFsdWUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC01MDMsNyArNTAzLDcgQEAKIAkqZXZlbnRfc3RhdHVzID0gdmFsdWU7CiAKIAlzdGF0dXMgPQotCSAgICBhY3BpX2dldF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvW2V2ZW50XS4KKwkgICAgYWNwaV9yZWFkX2JpdF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvW2V2ZW50XS4KIAkJCSAgICAgIHN0YXR1c19yZWdpc3Rlcl9pZCwgJnZhbHVlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmcmVnbi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmcmVnbi5jCmluZGV4IDQ3OWU3YTMuLjdjM2QyZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZnJlZ24uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZyZWduLmMKQEAgLTE5Myw3ICsxOTMsOCBAQAogCQkJLyogTWF0Y2hlZCBzcGFjZV9pZCwgZmlyc3QgZGVyZWZlcmVuY2UgdGhpcyBpbiB0aGUgUmVnaW9ucyAqLwogCiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX09QUkVHSU9OLAotCQkJCQkgICJSZW1vdmluZyBhZGRyZXNzIGhhbmRsZXIgJXAoJXApIGZvciByZWdpb24gJXMgb24gRGV2aWNlICVwKCVwKVxuIiwKKwkJCQkJICAiUmVtb3ZpbmcgYWRkcmVzcyBoYW5kbGVyICVwKCVwKSBmb3IgcmVnaW9uICVzICIKKwkJCQkJICAib24gRGV2aWNlICVwKCVwKVxuIiwKIAkJCQkJICBoYW5kbGVyX29iaiwgaGFuZGxlciwKIAkJCQkJICBhY3BpX3V0X2dldF9yZWdpb25fbmFtZShzcGFjZV9pZCksCiAJCQkJCSAgbm9kZSwgb2JqX2Rlc2MpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYwppbmRleCA5MzJiYmMyLi4zZGViMjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29uZmlnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbmZpZy5jCkBAIC0yOTEsNyArMjkxLDcgQEAKIAogCS8qIFNvdXJjZSBPYmplY3QgY2FuIGJlIGVpdGhlciBhbiBvcF9yZWdpb24gb3IgYSBCdWZmZXIvRmllbGQgKi8KIAotCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CisJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9SRUdJT046CiAKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLApAQCAtNTAxLDcgKzUwMSw3IEBACiAJICovCiAJaWYgKCghZGRiX2hhbmRsZSkgfHwKIAkgICAgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShkZGJfaGFuZGxlKSAhPSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EKSB8fAotCSAgICAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoZGRiX2hhbmRsZSkgIT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkpIHsKKwkgICAgKGRkYl9oYW5kbGUtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKQEAgLTUyMCwxMyArNTIwLDE0IEBACiAJCX0KIAl9CiAKLQkvKgotCSAqIERlbGV0ZSB0aGUgZW50aXJlIG5hbWVzcGFjZSB1bmRlciB0aGlzIHRhYmxlIE5vZGUKLQkgKiAoT2Zmc2V0IGNvbnRhaW5zIHRoZSB0YWJsZV9pZCkKLQkgKi8KLQlhY3BpX3RiX2RlbGV0ZV9uYW1lc3BhY2VfYnlfb3duZXIodGFibGVfaW5kZXgpOwotCSh2b2lkKWFjcGlfdGJfcmVsZWFzZV9vd25lcl9pZCh0YWJsZV9pbmRleCk7CisJLyogRGVsZXRlIHRoZSBwb3J0aW9uIG9mIHRoZSBuYW1lc3BhY2Ugb3duZWQgYnkgdGhpcyB0YWJsZSAqLwogCisJc3RhdHVzID0gYWNwaV90Yl9kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyKHRhYmxlX2luZGV4KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CisJfQorCisJKHZvaWQpYWNwaV90Yl9yZWxlYXNlX293bmVyX2lkKHRhYmxlX2luZGV4KTsKIAlhY3BpX3RiX3NldF90YWJsZV9sb2FkZWRfZmxhZyh0YWJsZV9pbmRleCwgRkFMU0UpOwogCiAJLyogVGFibGUgdW5sb2FkZWQsIHJlbW92ZSBhIHJlZmVyZW5jZSB0byB0aGUgZGRiX2hhbmRsZSBvYmplY3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb252cnQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb252cnQuYwppbmRleCAwYmUxMDE4Li4zN2QwZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29udnJ0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbnZydC5jCkBAIC04Miw3ICs4Miw3IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1BUUihleF9jb252ZXJ0X3RvX2ludGVnZXIsIG9ial9kZXNjKTsKIAotCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CisJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgogCiAJCS8qIE5vIGNvbnZlcnNpb24gbmVjZXNzYXJ5ICovCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogCS8qIFN0cmluZyBjb252ZXJzaW9uIGlzIGRpZmZlcmVudCB0aGFuIEJ1ZmZlciBjb252ZXJzaW9uICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCiAJCS8qCkBAIC0yMDYsNyArMjA2LDcgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X2NvbnZlcnRfdG9fYnVmZmVyLCBvYmpfZGVzYyk7CiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgogCiAJCS8qIE5vIGNvbnZlcnNpb24gbmVjZXNzYXJ5ICovCkBAIC00MDksNyArNDA5LDcgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0VfUFRSKGV4X2NvbnZlcnRfdG9fc3RyaW5nLCBvYmpfZGVzYyk7CiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCiAJCS8qIE5vIGNvbnZlcnNpb24gbmVjZXNzYXJ5ICovCkBAIC02MDUsOCArNjA1LDcgQEAKIAkJZGVmYXVsdDoKIAkJCS8qIE5vIGNvbnZlcnNpb24gYWxsb3dlZCBmb3IgdGhlc2UgdHlwZXMgKi8KIAotCQkJaWYgKGRlc3RpbmF0aW9uX3R5cGUgIT0KLQkJCSAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykpIHsKKwkJCWlmIChkZXN0aW5hdGlvbl90eXBlICE9IHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSkgewogCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKIAkJCQkJCSAgIkV4cGxpY2l0IG9wZXJhdG9yLCB3aWxsIHN0b3JlICglcykgb3ZlciBleGlzdGluZyB0eXBlICglcylcbiIsCiAJCQkJCQkgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkdW1wLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jCmluZGV4IGFhMzEzNTcuLjg5ZDE0MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkdW1wLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGR1bXAuYwpAQCAtMzUwLDYgKzM1MCw3IEBACiAJCQlicmVhazsKIAogCQljYXNlIEFDUElfRVhEX1RZUEU6CisKIAkJCWFjcGlfZXhfb3V0X3N0cmluZygiVHlwZSIsCiAJCQkJCSAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUKIAkJCQkJICAgKG9ial9kZXNjKSk7CkBAIC00MjIsNiArNDIzLDcgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6CisKIAkJCWFjcGlfb3NfcHJpbnRmKCIqKioqIEludmFsaWQgdGFibGUgb3Bjb2RlIFslWF0gKioqKlxuIiwKIAkJCQkgICAgICAgaW5mby0+b3Bjb2RlKTsKIAkJCXJldHVybjsKQEAgLTQ5Miw3ICs0OTQsNyBAQAogCiAJLyogRGVjb2RlIG9iamVjdCB0eXBlICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFOgogCiAJCWFjcGlfb3NfcHJpbnRmKCJSZWZlcmVuY2U6IFslc10gIiwKQEAgLTUyNyw0NiArNTI5LDE4IEBACiAJCQkJCQkJICAgICB0eXBlKSk7CiAJCQlicmVhazsKIAotCQljYXNlIEFDUElfUkVGQ0xBU1NfQVJHOgotCi0JCQlhY3BpX29zX3ByaW50ZigiJVgiLCBvYmpfZGVzYy0+cmVmZXJlbmNlLnZhbHVlKTsKLQotCQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgewotCi0JCQkJLyogVmFsdWUgaXMgYW4gSW50ZWdlciAqLwotCi0JCQkJYWNwaV9vc19wcmludGYoIiB2YWx1ZSBpcyBbJTguOFglOC44eF0iLAotCQkJCQkgICAgICAgQUNQSV9GT1JNQVRfVUlOVDY0KG9ial9kZXNjLT4KLQkJCQkJCQkJICBpbnRlZ2VyLgotCQkJCQkJCQkgIHZhbHVlKSk7Ci0JCQl9Ci0KLQkJCWFjcGlfb3NfcHJpbnRmKCJcbiIpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBQ1BJX1JFRkNMQVNTX0xPQ0FMOgotCi0JCQlhY3BpX29zX3ByaW50ZigiJVgiLCBvYmpfZGVzYy0+cmVmZXJlbmNlLnZhbHVlKTsKLQotCQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgewotCi0JCQkJLyogVmFsdWUgaXMgYW4gSW50ZWdlciAqLwotCi0JCQkJYWNwaV9vc19wcmludGYoIiB2YWx1ZSBpcyBbJTguOFglOC44eF0iLAotCQkJCQkgICAgICAgQUNQSV9GT1JNQVRfVUlOVDY0KG9ial9kZXNjLT4KLQkJCQkJCQkJICBpbnRlZ2VyLgotCQkJCQkJCQkgIHZhbHVlKSk7Ci0JCQl9Ci0KLQkJCWFjcGlfb3NfcHJpbnRmKCJcbiIpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBBQ1BJX1JFRkNMQVNTX05BTUU6CiAKIAkJCWFjcGlfb3NfcHJpbnRmKCItIFslNC40c11cbiIsCiAJCQkJICAgICAgIG9ial9kZXNjLT5yZWZlcmVuY2Uubm9kZS0+bmFtZS5hc2NpaSk7CiAJCQlicmVhazsKIAorCQljYXNlIEFDUElfUkVGQ0xBU1NfQVJHOgorCQljYXNlIEFDUElfUkVGQ0xBU1NfTE9DQUw6CisKKwkJCWFjcGlfb3NfcHJpbnRmKCIlWFxuIiwgb2JqX2Rlc2MtPnJlZmVyZW5jZS52YWx1ZSk7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgkvKiBVbmtub3duIHJlZmVyZW5jZSBjbGFzcyAqLwogCiAJCQlhY3BpX29zX3ByaW50ZigiJTIuMlhcbiIsIG9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MpOwpAQCAtNjYxLDggKzYzNSw4IEBACiAJY2FzZSBBQ1BJX1RZUEVfTE9DQUxfUkVHSU9OX0ZJRUxEOgogCiAJCWFjcGlfb3NfcHJpbnRmCi0JCSAgICAoIlJlZ2lvbkZpZWxkOiBCaXRzPSVYIEFjY1dpZHRoPSVYIExvY2s9JVggVXBkYXRlPSVYIGF0IGJ5dGU9JVggYml0PSVYIG9mIGJlbG93OlxuIiwKLQkJICAgICBvYmpfZGVzYy0+ZmllbGQuYml0X2xlbmd0aCwKKwkJICAgICgiUmVnaW9uRmllbGQ6IEJpdHM9JVggQWNjV2lkdGg9JVggTG9jaz0lWCBVcGRhdGU9JVggYXQgIgorCQkgICAgICJieXRlPSVYIGJpdD0lWCBvZiBiZWxvdzpcbiIsIG9ial9kZXNjLT5maWVsZC5iaXRfbGVuZ3RoLAogCQkgICAgIG9ial9kZXNjLT5maWVsZC5hY2Nlc3NfYnl0ZV93aWR0aCwKIAkJICAgICBvYmpfZGVzYy0+ZmllbGQuZmllbGRfZmxhZ3MgJiBBTUxfRklFTERfTE9DS19SVUxFX01BU0ssCiAJCSAgICAgb2JqX2Rlc2MtPmZpZWxkLmZpZWxkX2ZsYWdzICYgQU1MX0ZJRUxEX1VQREFURV9SVUxFX01BU0ssCkBAIC02ODYsOSArNjYwLDggQEAKIAogCQlpZiAoIW9ial9kZXNjLT5idWZmZXJfZmllbGQuYnVmZmVyX29iaikgewogCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9FWEVDLCAiKk5VTEwqXG4iKSk7Ci0JCX0gZWxzZQotCQkgICAgaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjLT5idWZmZXJfZmllbGQuYnVmZmVyX29iaikKLQkJCSE9IEFDUElfVFlQRV9CVUZGRVIpIHsKKwkJfSBlbHNlIGlmICgob2JqX2Rlc2MtPmJ1ZmZlcl9maWVsZC5idWZmZXJfb2JqKS0+Y29tbW9uLnR5cGUgIT0KKwkJCSAgIEFDUElfVFlQRV9CVUZGRVIpIHsKIAkJCWFjcGlfb3NfcHJpbnRmKCIqbm90IGEgQnVmZmVyKlxuIik7CiAJCX0gZWxzZSB7CiAJCQlhY3BpX2V4X2R1bXBfb3BlcmFuZChvYmpfZGVzYy0+YnVmZmVyX2ZpZWxkLmJ1ZmZlcl9vYmosCkBAIC03MzcsOCArNzEwLDcgQEAKIAlkZWZhdWx0OgogCQkvKiBVbmtub3duIFR5cGUgKi8KIAotCQlhY3BpX29zX3ByaW50ZigiVW5rbm93biBUeXBlICVYXG4iLAotCQkJICAgICAgIEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSk7CisJCWFjcGlfb3NfcHJpbnRmKCJVbmtub3duIFR5cGUgJVhcbiIsIG9ial9kZXNjLT5jb21tb24udHlwZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtOTM5LDcgKzkxMSw3IEBACiAKIAkvKiBQYWNrYWdlcyBtYXkgb25seSBjb250YWluIGEgZmV3IG9iamVjdCB0eXBlcyAqLwogCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykpIHsKKwlzd2l0Y2ggKG9ial9kZXNjLT5jb21tb24udHlwZSkgewogCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CiAKIAkJYWNwaV9vc19wcmludGYoIltJbnRlZ2VyXSA9ICU4LjhYJTguOFhcbiIsCkBAIC05OTAsOCArOTYyLDcgQEAKIAogCWRlZmF1bHQ6CiAKLQkJYWNwaV9vc19wcmludGYoIltVbmtub3duIFR5cGVdICVYXG4iLAotCQkJICAgICAgIEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSk7CisJCWFjcGlfb3NfcHJpbnRmKCJbVW5rbm93biBUeXBlXSAlWFxuIiwgb2JqX2Rlc2MtPmNvbW1vbi50eXBlKTsKIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGZpZWxkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmllbGQuYwppbmRleCBhMzUyZDAyLi41NDZkY2RkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmllbGQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmllbGQuYwpAQCAtODQsNyArODQsNyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEKSB7CisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEKSB7CiAJCS8qCiAJCSAqIElmIHRoZSBidWZmZXJfZmllbGQgYXJndW1lbnRzIGhhdmUgbm90IGJlZW4gcHJldmlvdXNseSBldmFsdWF0ZWQsCiAJCSAqIGV2YWx1YXRlIHRoZW0gbm93IGFuZCBzYXZlIHRoZSByZXN1bHRzLgpAQCAtOTUsOSArOTUsOCBAQAogCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQkJfQogCQl9Ci0JfSBlbHNlCi0JICAgIGlmICgoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9SRUdJT05fRklFTEQpCi0JCSYmIChvYmpfZGVzYy0+ZmllbGQucmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkID09CisJfSBlbHNlIGlmICgob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUdJT05fRklFTEQpICYmCisJCSAgIChvYmpfZGVzYy0+ZmllbGQucmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkID09CiAJCSAgICBBQ1BJX0FEUl9TUEFDRV9TTUJVUykpIHsKIAkJLyoKIAkJICogVGhpcyBpcyBhbiBTTUJ1cyByZWFkLiAgV2UgbXVzdCBjcmVhdGUgYSBidWZmZXIgdG8gaG9sZCB0aGUgZGF0YQpAQCAtMTYzLDcgKzE2Miw3IEBACiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKIAkJCSAgIkZpZWxkUmVhZCBbVE9dOiAgIE9iaiAlcCwgVHlwZSAlWCwgQnVmICVwLCBCeXRlTGVuICVYXG4iLAotCQkJICBvYmpfZGVzYywgQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpLCBidWZmZXIsCisJCQkgIG9ial9kZXNjLCBvYmpfZGVzYy0+Y29tbW9uLnR5cGUsIGJ1ZmZlciwKIAkJCSAgKHUzMikgbGVuZ3RoKSk7CiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9CRklFTEQsCiAJCQkgICJGaWVsZFJlYWQgW0ZST01dOiBCaXRMZW4gJVgsIEJpdE9mZiAlWCwgQnl0ZU9mZiAlWFxuIiwKQEAgLTIyMiw3ICsyMjEsNyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX05PX09QRVJBTkQpOwogCX0KIAotCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgPT0gQUNQSV9UWVBFX0JVRkZFUl9GSUVMRCkgeworCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0JVRkZFUl9GSUVMRCkgewogCQkvKgogCQkgKiBJZiB0aGUgYnVmZmVyX2ZpZWxkIGFyZ3VtZW50cyBoYXZlIG5vdCBiZWVuIHByZXZpb3VzbHkgZXZhbHVhdGVkLAogCQkgKiBldmFsdWF0ZSB0aGVtIG5vdyBhbmQgc2F2ZSB0aGUgcmVzdWx0cy4KQEAgLTIzMyw5ICsyMzIsOCBAQAogCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQkJfQogCQl9Ci0JfSBlbHNlCi0JICAgIGlmICgoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9SRUdJT05fRklFTEQpCi0JCSYmIChvYmpfZGVzYy0+ZmllbGQucmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkID09CisJfSBlbHNlIGlmICgob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUdJT05fRklFTEQpICYmCisJCSAgIChvYmpfZGVzYy0+ZmllbGQucmVnaW9uX29iai0+cmVnaW9uLnNwYWNlX2lkID09CiAJCSAgICBBQ1BJX0FEUl9TUEFDRV9TTUJVUykpIHsKIAkJLyoKIAkJICogVGhpcyBpcyBhbiBTTUJ1cyB3cml0ZS4gIFdlIHdpbGwgYnlwYXNzIHRoZSBlbnRpcmUgZmllbGQgbWVjaGFuaXNtCkBAIC0yNDMsNyArMjQxLDcgQEAKIAkJICoKIAkJICogU291cmNlIG11c3QgYmUgYSBidWZmZXIgb2Ygc3VmZmljaWVudCBzaXplIChBQ1BJX1NNQlVTX0JVRkZFUl9TSVpFKS4KIAkJICovCi0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCQlpZiAoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkJICAgICJTTUJ1cyB3cml0ZSByZXF1aXJlcyBCdWZmZXIsIGZvdW5kIHR5cGUgJXMiLAogCQkJCSAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHNvdXJjZV9kZXNjKSkpOwpAQCAtMjkxLDcgKzI4OSw3IEBACiAKIAkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBkYXRhIHRvIGJlIHdyaXR0ZW4gKi8KIAotCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoc291cmNlX2Rlc2MpKSB7CisJc3dpdGNoIChzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgogCQlidWZmZXIgPSAmc291cmNlX2Rlc2MtPmludGVnZXIudmFsdWU7CiAJCWxlbmd0aCA9IHNpemVvZihzb3VyY2VfZGVzYy0+aW50ZWdlci52YWx1ZSk7CkBAIC0zMTQsMTUgKzMxMiwxNCBAQAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQkZJRUxELAogCQkJICAiRmllbGRXcml0ZSBbRlJPTV06IE9iaiAlcCAoJXM6JVgpLCBCdWYgJXAsIEJ5dGVMZW4gJVhcbiIsCiAJCQkgIHNvdXJjZV9kZXNjLAotCQkJICBhY3BpX3V0X2dldF90eXBlX25hbWUoQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCQkJCShzb3VyY2VfZGVzYykpLAotCQkJICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYyksIGJ1ZmZlciwgbGVuZ3RoKSk7CisJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUpLAorCQkJICBzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUsIGJ1ZmZlciwgbGVuZ3RoKSk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0JGSUVMRCwKIAkJCSAgIkZpZWxkV3JpdGUgW1RPXTogICBPYmogJXAgKCVzOiVYKSwgQml0TGVuICVYLCBCaXRPZmYgJVgsIEJ5dGVPZmYgJVhcbiIsCiAJCQkgIG9ial9kZXNjLAotCQkJICBhY3BpX3V0X2dldF90eXBlX25hbWUoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSwKLQkJCSAgQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpLAorCQkJICBhY3BpX3V0X2dldF90eXBlX25hbWUob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSwKKwkJCSAgb2JqX2Rlc2MtPmNvbW1vbi50eXBlLAogCQkJICBvYmpfZGVzYy0+Y29tbW9uX2ZpZWxkLmJpdF9sZW5ndGgsCiAJCQkgIG9ial9kZXNjLT5jb21tb25fZmllbGQuc3RhcnRfZmllbGRfYml0X29mZnNldCwKIAkJCSAgb2JqX2Rlc2MtPmNvbW1vbl9maWVsZC5iYXNlX2J5dGVfb2Zmc2V0KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCmluZGV4IGVmNThhYzQuLjk5Y2VlNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCkBAIC05NCw5ICs5NCw5IEBACiAKIAkvKiBXZSBtdXN0IGhhdmUgYSB2YWxpZCByZWdpb24gKi8KIAotCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShyZ25fZGVzYykgIT0gQUNQSV9UWVBFX1JFR0lPTikgeworCWlmIChyZ25fZGVzYy0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX1JFR0lPTikgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiTmVlZGVkIFJlZ2lvbiwgZm91bmQgdHlwZSAlWCAoJXMpIiwKLQkJCSAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShyZ25fZGVzYyksCisJCQkgICAgcmduX2Rlc2MtPmNvbW1vbi50eXBlLAogCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUocmduX2Rlc2MpKSk7CiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwpAQCAtMTEzLDEyICsxMTMsNiBAQAogCQl9CiAJfQogCi0JLyogRXhpdCBpZiBBZGRyZXNzL0xlbmd0aCBoYXZlIGJlZW4gZGlzYWxsb3dlZCBieSB0aGUgaG9zdCBPUyAqLwotCi0JaWYgKHJnbl9kZXNjLT5jb21tb24uZmxhZ3MgJiBBT1BPQkpfSU5WQUxJRCkgewotCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX0lMTEVHQUxfQUREUkVTUyk7Ci0JfQotCiAJLyoKIAkgKiBFeGl0IG5vdyBmb3IgU01CdXMgYWRkcmVzcyBzcGFjZSwgaXQgaGFzIGEgbm9uLWxpbmVhciBhZGRyZXNzIHNwYWNlCiAJICogYW5kIHRoZSByZXF1ZXN0IGNhbm5vdCBiZSBkaXJlY3RseSB2YWxpZGF0ZWQKQEAgLTM5MCw3ICszODQsNyBAQAogCSAqIGluZGV4X2ZpZWxkIC0gV3JpdGUgdG8gYW4gSW5kZXggUmVnaXN0ZXIsIHRoZW4gcmVhZC93cml0ZSBmcm9tL3RvIGEKIAkgKiAgICAgICAgICAgICAgIERhdGEgUmVnaXN0ZXIKIAkgKi8KLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCXN3aXRjaCAob2JqX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEOgogCQkvKgogCQkgKiBJZiB0aGUgYnVmZmVyX2ZpZWxkIGFyZ3VtZW50cyBoYXZlIG5vdCBiZWVuIHByZXZpb3VzbHkgZXZhbHVhdGVkLApAQCAtNTI3LDcgKzUyMSw3IEBACiAJZGVmYXVsdDoKIAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiV3Jvbmcgb2JqZWN0IHR5cGUgaW4gZmllbGQgSS9PICVYIiwKLQkJCSAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykpKTsKKwkJCSAgICBvYmpfZGVzYy0+Y29tbW9uLnR5cGUpKTsKIAkJc3RhdHVzID0gQUVfQU1MX0lOVEVSTkFMOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bWlzYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG1pc2MuYwppbmRleCA2YjA3NDdhYy4uOTk4ZWFjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bWlzYy5jCkBAIC04MCw3ICs4MCw3IEBACiAJc3dpdGNoIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUob2JqX2Rlc2MpKSB7CiAJY2FzZSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EOgogCi0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgIT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkgeworCQlpZiAob2JqX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfT1BFUkFORF9UWVBFKTsKIAkJfQogCkBAIC0yNjAsNyArMjYwLDcgQEAKIAkgKiBndWFyYW50ZWVkIHRvIGJlIGVpdGhlciBJbnRlZ2VyL1N0cmluZy9CdWZmZXIgYnkgdGhlIG9wZXJhbmQKIAkgKiByZXNvbHV0aW9uIG1lY2hhbmlzbS4KIAkgKi8KLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9wZXJhbmQwKSkgeworCXN3aXRjaCAob3BlcmFuZDAtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfZXhfY29udmVydF90b19pbnRlZ2VyKG9wZXJhbmQxLCAmbG9jYWxfb3BlcmFuZDEsIDE2KTsKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCiAJZGVmYXVsdDoKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkludmFsaWQgb2JqZWN0IHR5cGU6ICVYIiwKLQkJCSAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvcGVyYW5kMCkpKTsKKwkJCSAgICBvcGVyYW5kMC0+Y29tbW9uLnR5cGUpKTsKIAkJc3RhdHVzID0gQUVfQU1MX0lOVEVSTkFMOwogCX0KIApAQCAtMjk4LDcgKzI5OCw3IEBACiAJICogMikgVHdvIFN0cmluZ3MgY29uY2F0ZW5hdGVkIHRvIHByb2R1Y2UgYSBuZXcgU3RyaW5nCiAJICogMykgVHdvIEJ1ZmZlcnMgY29uY2F0ZW5hdGVkIHRvIHByb2R1Y2UgYSBuZXcgQnVmZmVyCiAJICovCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvcGVyYW5kMCkpIHsKKwlzd2l0Y2ggKG9wZXJhbmQwLT5jb21tb24udHlwZSkgewogCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CiAKIAkJLyogUmVzdWx0IG9mIHR3byBJbnRlZ2VycyBpcyBhIEJ1ZmZlciAqLwpAQCAtMzc5LDcgKzM3OSw3IEBACiAJCS8qIEludmFsaWQgb2JqZWN0IHR5cGUsIHNob3VsZCBub3QgaGFwcGVuIGhlcmUgKi8KIAogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiSW52YWxpZCBvYmplY3QgdHlwZTogJVgiLAotCQkJICAgIEFDUElfR0VUX09CSkVDVF9UWVBFKG9wZXJhbmQwKSkpOworCQkJICAgIG9wZXJhbmQwLT5jb21tb24udHlwZSkpOwogCQlzdGF0dXMgPSBBRV9BTUxfSU5URVJOQUw7CiAJCWdvdG8gY2xlYW51cDsKIAl9CkBAIC01ODEsNyArNTgxLDcgQEAKIAkgKiBndWFyYW50ZWVkIHRvIGJlIGVpdGhlciBJbnRlZ2VyL1N0cmluZy9CdWZmZXIgYnkgdGhlIG9wZXJhbmQKIAkgKiByZXNvbHV0aW9uIG1lY2hhbmlzbS4KIAkgKi8KLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9wZXJhbmQwKSkgeworCXN3aXRjaCAob3BlcmFuZDAtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfZXhfY29udmVydF90b19pbnRlZ2VyKG9wZXJhbmQxLCAmbG9jYWxfb3BlcmFuZDEsIDE2KTsKQEAgLTYwOCw3ICs2MDgsNyBAQAogCS8qCiAJICogVHdvIGNhc2VzOiAxKSBCb3RoIEludGVnZXJzLCAyKSBCb3RoIFN0cmluZ3Mgb3IgQnVmZmVycwogCSAqLwotCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvcGVyYW5kMCkgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwlpZiAob3BlcmFuZDAtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CiAJCS8qCiAJCSAqIDEpIEJvdGggb3BlcmFuZHMgYXJlIG9mIHR5cGUgaW50ZWdlcgogCQkgKiAgICBOb3RlOiBsb2NhbF9vcGVyYW5kMSBtYXkgaGF2ZSBjaGFuZ2VkIGFib3ZlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcxLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcxLmMKaW5kZXggYjUzMDQ4MC4uOTYzNWQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzEuYwpAQCAtODA3LDExICs4MDcsOSBAQAogCQkJCQkJCSBhY3BpX25hbWVzcGFjZV9ub2RlICopCiAJCQkJCQkJb3BlcmFuZFswXSk7CiAJCQlpZiAodGVtcF9kZXNjCi0JCQkgICAgJiYKLQkJCSAgICAoKEFDUElfR0VUX09CSkVDVF9UWVBFKHRlbXBfZGVzYykgPT0KLQkJCSAgICAgIEFDUElfVFlQRV9TVFJJTkcpCi0JCQkgICAgIHx8IChBQ1BJX0dFVF9PQkpFQ1RfVFlQRSh0ZW1wX2Rlc2MpID09Ci0JCQkJIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpKSkgeworCQkJICAgICYmICgodGVtcF9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfU1RSSU5HKQorCQkJCXx8ICh0ZW1wX2Rlc2MtPmNvbW1vbi50eXBlID09CisJCQkJICAgIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpKSkgewogCQkJCW9wZXJhbmRbMF0gPSB0ZW1wX2Rlc2M7CiAJCQkJYWNwaV91dF9hZGRfcmVmZXJlbmNlKHRlbXBfZGVzYyk7CiAJCQl9IGVsc2UgewpAQCAtODE5LDcgKzgxNyw3IEBACiAJCQkJZ290byBjbGVhbnVwOwogCQkJfQogCQl9IGVsc2UgewotCQkJc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvcGVyYW5kWzBdKSkgeworCQkJc3dpdGNoICgob3BlcmFuZFswXSktPmNvbW1vbi50eXBlKSB7CiAJCQljYXNlIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0U6CiAJCQkJLyoKIAkJCQkgKiBUaGlzIGlzIGEgZGVyZWZfb2YgKGxvY2FsX3ggfCBhcmdfeCkKQEAgLTg3Nyw4ICs4NzUsNyBAQAogCiAJCWlmIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUob3BlcmFuZFswXSkgIT0KIAkJICAgIEFDUElfREVTQ19UWVBFX05BTUVEKSB7Ci0JCQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob3BlcmFuZFswXSkgPT0KLQkJCSAgICBBQ1BJX1RZUEVfU1RSSU5HKSB7CisJCQlpZiAoKG9wZXJhbmRbMF0pLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfU1RSSU5HKSB7CiAJCQkJLyoKIAkJCQkgKiBUaGlzIGlzIGEgZGVyZWZfb2YgKFN0cmluZykuIFRoZSBzdHJpbmcgaXMgYSByZWZlcmVuY2UKIAkJCQkgKiB0byBhIG5hbWVkIEFDUEkgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMi5jCmluZGV4IDBiNGY1MTMuLjg1ZDk1YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzIuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcyLmMKQEAgLTM5OSw3ICszOTksNyBAQAogCQkgKiBBdCB0aGlzIHBvaW50LCB0aGUgU291cmNlIG9wZXJhbmQgaXMgYSBTdHJpbmcsIEJ1ZmZlciwgb3IgUGFja2FnZS4KIAkJICogVmVyaWZ5IHRoYXQgdGhlIGluZGV4IGlzIHdpdGhpbiByYW5nZS4KIAkJICovCi0JCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob3BlcmFuZFswXSkpIHsKKwkJc3dpdGNoICgob3BlcmFuZFswXSktPmNvbW1vbi50eXBlKSB7CiAJCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKIAogCQkJaWYgKGluZGV4ID49IG9wZXJhbmRbMF0tPnN0cmluZy5sZW5ndGgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzMuYwppbmRleCBjNjUyMGJiLi4yNTNmOWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmczLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMy5jCkBAIC0xNjEsOSArMTYxLDggQEAKIAkJICogQ3JlYXRlIHRoZSByZXR1cm4gb2JqZWN0LiAgVGhlIFNvdXJjZSBvcGVyYW5kIGlzIGd1YXJhbnRlZWQgdG8gYmUKIAkJICogZWl0aGVyIGEgU3RyaW5nIG9yIGEgQnVmZmVyLCBzbyBqdXN0IHVzZSBpdHMgdHlwZS4KIAkJICovCi0JCXJldHVybl9kZXNjID0KLQkJICAgIGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChBQ1BJX0dFVF9PQkpFQ1RfVFlQRQotCQkJCQkJICAgKG9wZXJhbmRbMF0pKTsKKwkJcmV0dXJuX2Rlc2MgPSBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3QoKG9wZXJhbmRbMF0pLT4KKwkJCQkJCQkgICAgIGNvbW1vbi50eXBlKTsKIAkJaWYgKCFyZXR1cm5fZGVzYykgewogCQkJc3RhdHVzID0gQUVfTk9fTUVNT1JZOwogCQkJZ290byBjbGVhbnVwOwpAQCAtMTkxLDcgKzE5MCw3IEBACiAKIAkJLyogU3RyaW5ncyBhbHdheXMgaGF2ZSBhIHN1Yi1wb2ludGVyLCBub3Qgc28gZm9yIGJ1ZmZlcnMgKi8KIAotCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9wZXJhbmRbMF0pKSB7CisJCXN3aXRjaCAoKG9wZXJhbmRbMF0pLT5jb21tb24udHlwZSkgewogCQljYXNlIEFDUElfVFlQRV9TVFJJTkc6CiAKIAkJCS8qIEFsd2F5cyBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgZm9yIHRoZSBTdHJpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhwcmVwLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cHJlcC5jCmluZGV4IGEyMjZmNzQuLjUyZmVjMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhwcmVwLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHByZXAuYwpAQCAtMjc5LDcgKzI3OSw3IEBACiAJCXJldHVybl9VSU5UMzIoMCk7CiAJfQogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEKSB7CisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfQlVGRkVSX0ZJRUxEKSB7CiAJCS8qCiAJCSAqIGJ1ZmZlcl9maWVsZCBhY2Nlc3MgY2FuIGJlIG9uIGFueSBieXRlIGJvdW5kYXJ5LCBzbyB0aGUKIAkJICogYnl0ZV9hbGlnbm1lbnQgaXMgYWx3YXlzIDEgYnl0ZSAtLSByZWdhcmRsZXNzIG9mIGFueSBieXRlX2FsaWdubWVudApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCmluZGV4IDc2ZWM4ZmYuLjNhNTRiNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVnaW9uLmMKQEAgLTI5NCwxNCArMjk0LDE0IEBACiAJc3dpdGNoIChmdW5jdGlvbikgewogCWNhc2UgQUNQSV9SRUFEOgogCi0JCXN0YXR1cyA9IGFjcGlfb3NfcmVhZF9wb3J0KChhY3BpX2lvX2FkZHJlc3MpIGFkZHJlc3MsCisJCXN0YXR1cyA9IGFjcGlfaHdfcmVhZF9wb3J0KChhY3BpX2lvX2FkZHJlc3MpIGFkZHJlc3MsCiAJCQkJCSAgICZ2YWx1ZTMyLCBiaXRfd2lkdGgpOwogCQkqdmFsdWUgPSB2YWx1ZTMyOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9XUklURToKIAotCQlzdGF0dXMgPSBhY3BpX29zX3dyaXRlX3BvcnQoKGFjcGlfaW9fYWRkcmVzcykgYWRkcmVzcywKKwkJc3RhdHVzID0gYWNwaV9od193cml0ZV9wb3J0KChhY3BpX2lvX2FkZHJlc3MpIGFkZHJlc3MsCiAJCQkJCSAgICAodTMyKSAqIHZhbHVlLCBiaXRfd2lkdGgpOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc250ZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc250ZS5jCmluZGV4IGEwNjNhNzQuLjYwNzk1OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNudGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzbnRlLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCXN3aXRjaCAoZW50cnlfdHlwZSkgewogCWNhc2UgQUNQSV9UWVBFX1BBQ0tBR0U6CiAKLQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQlpZiAoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiT2JqZWN0IG5vdCBhIFBhY2thZ2UsIHR5cGUgJXMiLAogCQkJCSAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHNvdXJjZV9kZXNjKSkpOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAKIAljYXNlIEFDUElfVFlQRV9CVUZGRVI6CiAKLQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCWlmIChzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk9iamVjdCBub3QgYSBCdWZmZXIsIHR5cGUgJXMiLAogCQkJCSAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHNvdXJjZV9kZXNjKSkpOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIAljYXNlIEFDUElfVFlQRV9TVFJJTkc6CiAKLQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSAhPSBBQ1BJX1RZUEVfU1RSSU5HKSB7CisJCWlmIChzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX1NUUklORykgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk9iamVjdCBub3QgYSBTdHJpbmcsIHR5cGUgJXMiLAogCQkJCSAgICBhY3BpX3V0X2dldF9vYmplY3RfdHlwZV9uYW1lKHNvdXJjZV9kZXNjKSkpOwogCQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9PUEVSQU5EX1RZUEUpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAKIAljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgogCi0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJaWYgKHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIk9iamVjdCBub3QgYSBJbnRlZ2VyLCB0eXBlICVzIiwKIAkJCQkgICAgYWNwaV91dF9nZXRfb2JqZWN0X3R5cGVfbmFtZShzb3VyY2VfZGVzYykpKTsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfT1BFUkFORF9UWVBFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvbHYuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvbHYuYwppbmRleCBmNjEwNWE2Li5jOTNiNTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb2x2LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc29sdi5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAogCS8qIFRoaXMgaXMgYSB1bmlvbiBhY3BpX29wZXJhbmRfb2JqZWN0ICAgICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKHN0YWNrX2Rlc2MpKSB7CisJc3dpdGNoIChzdGFja19kZXNjLT5jb21tb24udHlwZSkgewogCWNhc2UgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRToKIAogCQlyZWZfdHlwZSA9IHN0YWNrX2Rlc2MtPnJlZmVyZW5jZS5jbGFzczsKQEAgLTI5Nyw4ICsyOTcsNyBAQAogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywKIAkJCQkgICJGaWVsZFJlYWQgU291cmNlRGVzYz0lcCBUeXBlPSVYXG4iLAotCQkJCSAgc3RhY2tfZGVzYywKLQkJCQkgIEFDUElfR0VUX09CSkVDVF9UWVBFKHN0YWNrX2Rlc2MpKSk7CisJCQkJICBzdGFja19kZXNjLCBzdGFja19kZXNjLT5jb21tb24udHlwZSkpOwogCiAJCXN0YXR1cyA9CiAJCSAgICBhY3BpX2V4X3JlYWRfZGF0YV9mcm9tX2ZpZWxkKHdhbGtfc3RhdGUsIHN0YWNrX2Rlc2MsCkBAIC0zODYsNyArMzg1LDcgQEAKIAkgKiBzcGVjaWZpY2F0aW9uIG9mIHRoZSBvYmplY3RfdHlwZSBhbmQgc2l6ZV9vZiBvcGVyYXRvcnMpLiBUaGlzIG1lYW5zCiAJICogdHJhdmVyc2luZyB0aGUgbGlzdCBvZiBwb3NzaWJseSBtYW55IG5lc3RlZCByZWZlcmVuY2VzLgogCSAqLwotCXdoaWxlIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgPT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkgeworCXdoaWxlIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkgewogCQlzd2l0Y2ggKG9ial9kZXNjLT5yZWZlcmVuY2UuY2xhc3MpIHsKIAkJY2FzZSBBQ1BJX1JFRkNMQVNTX1JFRk9GOgogCQljYXNlIEFDUElfUkVGQ0xBU1NfTkFNRToKQEAgLTUxOCw3ICs1MTcsNyBAQAogCSAqIE5vdyB3ZSBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIGFuIG9iamVjdCB0aGF0IGhhcyBub3QgYmVlbiBjcmVhdGVkCiAJICogdmlhIHRoZSByZWZfb2Ygb3IgSW5kZXggb3BlcmF0b3JzLgogCSAqLwotCXR5cGUgPSBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYyk7CisJdHlwZSA9IG9ial9kZXNjLT5jb21tb24udHlwZTsKIAogICAgICAgZXhpdDoKIAkvKiBDb252ZXJ0IGludGVybmFsIHR5cGVzIHRvIGV4dGVybmFsIHR5cGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb3AuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jCmluZGV4IDNjMzgwMjcuLjVjNzI5YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jCkBAIC0yMTIsNyArMjEyLDcgQEAKIAogCQkJLyogQUNQSSBpbnRlcm5hbCBvYmplY3QgKi8KIAotCQkJb2JqZWN0X3R5cGUgPSBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYyk7CisJCQlvYmplY3RfdHlwZSA9IG9ial9kZXNjLT5jb21tb24udHlwZTsKIAogCQkJLyogQ2hlY2sgZm9yIGJhZCBhY3BpX29iamVjdF90eXBlICovCiAKQEAgLTI4Nyw4ICsyODcsNyBAQAogCiAJCQlpZiAoKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShvYmpfZGVzYykgPT0KIAkJCSAgICAgQUNQSV9ERVNDX1RZUEVfT1BFUkFORCkKLQkJCSAgICAmJiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09Ci0JCQkJQUNQSV9UWVBFX1NUUklORykpIHsKKwkJCSAgICAmJiAob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9TVFJJTkcpKSB7CiAJCQkJLyoKIAkJCQkgKiBTdHJpbmcgZm91bmQgLSB0aGUgc3RyaW5nIHJlZmVyZW5jZXMgYSBuYW1lZCBvYmplY3QgYW5kCiAJCQkJICogbXVzdCBiZSByZXNvbHZlZCB0byBhIG5vZGUKQEAgLTMzNiw3ICszMzUsNyBAQAogCQkJICogLS0gQWxsIG90aGVycyBtdXN0IGJlIHJlc29sdmVkIGJlbG93LgogCQkJICovCiAJCQlpZiAoKG9wY29kZSA9PSBBTUxfU1RPUkVfT1ApICYmCi0JCQkgICAgKEFDUElfR0VUX09CSkVDVF9UWVBFKCpzdGFja19wdHIpID09CisJCQkgICAgKCgqc3RhY2tfcHRyKS0+Y29tbW9uLnR5cGUgPT0KIAkJCSAgICAgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkKIAkJCSAgICAmJiAoKCpzdGFja19wdHIpLT5yZWZlcmVuY2UuY2xhc3MgPT0gQUNQSV9SRUZDTEFTU19JTkRFWCkpIHsKIAkJCQlnb3RvIG5leHRfb3BlcmFuZDsKQEAgLTQ5MCw3ICs0ODksNyBAQAogCiAJCQkvKiBOZWVkIGFuIG9wZXJhbmQgb2YgdHlwZSBJTlRFR0VSLCBTVFJJTkcgb3IgQlVGRkVSICovCiAKLQkJCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CisJCQlzd2l0Y2ggKG9ial9kZXNjLT5jb21tb24udHlwZSkgewogCQkJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKIAkJCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKQEAgLTUxMiw3ICs1MTEsNyBAQAogCiAJCQkvKiBOZWVkIGFuIG9wZXJhbmQgb2YgdHlwZSBTVFJJTkcgb3IgQlVGRkVSICovCiAKLQkJCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CisJCQlzd2l0Y2ggKG9ial9kZXNjLT5jb21tb24udHlwZSkgewogCQkJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCQkJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgogCkBAIC01NTMsNyArNTUyLDcgQEAKIAkJCSAqIFRoZSBvbmx5IHJlZmVyZW5jZSBhbGxvd2VkIGhlcmUgaXMgYSBkaXJlY3QgcmVmZXJlbmNlIHRvCiAJCQkgKiBhIG5hbWVzcGFjZSBub2RlLgogCQkJICovCi0JCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCQkJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAkJCWNhc2UgQUNQSV9UWVBFX1BBQ0tBR0U6CiAJCQljYXNlIEFDUElfVFlQRV9TVFJJTkc6CiAJCQljYXNlIEFDUElfVFlQRV9CVUZGRVI6CkBAIC01NzYsNyArNTc1LDcgQEAKIAogCQkJLyogTmVlZCBhIGJ1ZmZlciBvciBwYWNrYWdlIG9yIChBQ1BJIDIuMCkgU3RyaW5nICovCiAKLQkJCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CisJCQlzd2l0Y2ggKG9ial9kZXNjLT5jb21tb24udHlwZSkgewogCQkJY2FzZSBBQ1BJX1RZUEVfUEFDS0FHRToKIAkJCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKIAkJCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKQEAgLTU5OCw3ICs1OTcsNyBAQAogCiAJCQkvKiBOZWVkIGFuIG9wZXJhbmQgb2YgdHlwZSBSRUdJT04gb3IgYSBCVUZGRVIgKHdoaWNoIGNvdWxkIGJlIGEgcmVzb2x2ZWQgcmVnaW9uIGZpZWxkKSAqLwogCi0JCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCQkJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAkJCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKIAkJCWNhc2UgQUNQSV9UWVBFX1JFR0lPTjoKIApAQCAtNjE5LDcgKzYxOCw3IEBACiAKIAkJCS8qIFVzZWQgYnkgdGhlIFN0b3JlKCkgb3BlcmF0b3Igb25seSAqLwogCi0JCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCQkJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAkJCWNhc2UgQUNQSV9UWVBFX0lOVEVHRVI6CiAJCQljYXNlIEFDUElfVFlQRV9QQUNLQUdFOgogCQkJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgpAQCAtNjc3LDggKzY3Niw4IEBACiAJCSAqIHJlcXVpcmVkIG9iamVjdCB0eXBlIChTaW1wbGUgY2FzZXMgb25seSkuCiAJCSAqLwogCQlzdGF0dXMgPSBhY3BpX2V4X2NoZWNrX29iamVjdF90eXBlKHR5cGVfbmVlZGVkLAotCQkJCQkJICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCQkJCSAgICgqc3RhY2tfcHRyKSwgKnN0YWNrX3B0cik7CisJCQkJCQkgICAoKnN0YWNrX3B0ciktPmNvbW1vbi50eXBlLAorCQkJCQkJICAgKnN0YWNrX3B0cik7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JlLmMKaW5kZXggZTM1ZTliNC4uOTBkNjA2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JlLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCiAJLyogc291cmNlX2Rlc2MgaXMgb2YgdHlwZSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSkgeworCXN3aXRjaCAoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAogCQkvKiBPdXRwdXQgY29ycmVjdCBpbnRlZ2VyIHdpZHRoICovCkBAIC0zMjQsNyArMzI0LDcgQEAKIAogCS8qIERlc3RpbmF0aW9uIG9iamVjdCBtdXN0IGJlIGEgUmVmZXJlbmNlIG9yIGEgQ29uc3RhbnQgb2JqZWN0ICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKGRlc3RfZGVzYykpIHsKKwlzd2l0Y2ggKGRlc3RfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0U6CiAJCWJyZWFrOwogCkBAIC00NjAsOSArNDYwLDggQEAKIAkJICovCiAJCW9ial9kZXNjID0gKihpbmRleF9kZXNjLT5yZWZlcmVuY2Uud2hlcmUpOwogCi0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgPT0KLQkJICAgIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UKLQkJICAgICYmIHNvdXJjZV9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgPT0gQUNQSV9SRUZDTEFTU19UQUJMRSkgeworCQlpZiAoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UgJiYKKwkJICAgIHNvdXJjZV9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgPT0gQUNQSV9SRUZDTEFTU19UQUJMRSkgewogCiAJCQkvKiBUaGlzIGlzIGEgRERCSGFuZGxlLCBqdXN0IGFkZCBhIHJlZmVyZW5jZSB0byBpdCAqLwogCkBAIC01MjAsOCArNTE5LDggQEAKIAkJICogYnkgdGhlIElOREVYX09QIGNvZGUuCiAJCSAqLwogCQlvYmpfZGVzYyA9IGluZGV4X2Rlc2MtPnJlZmVyZW5jZS5vYmplY3Q7Ci0JCWlmICgoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpICE9IEFDUElfVFlQRV9CVUZGRVIpICYmCi0JCSAgICAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpICE9IEFDUElfVFlQRV9TVFJJTkcpKSB7CisJCWlmICgob2JqX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9CVUZGRVIpICYmCisJCSAgICAob2JqX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9TVFJJTkcpKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQU1MX09QRVJBTkRfVFlQRSk7CiAJCX0KIApAQCAtNTI5LDcgKzUyOCw3IEBACiAJCSAqIFRoZSBhc3NpZ25tZW50IG9mIHRoZSBpbmRpdmlkdWFsIGVsZW1lbnRzIHdpbGwgYmUgc2xpZ2h0bHkKIAkJICogZGlmZmVyZW50IGZvciBlYWNoIHNvdXJjZSB0eXBlLgogCQkgKi8KLQkJc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykpIHsKKwkJc3dpdGNoIChzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAkJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAogCQkJLyogVXNlIHRoZSBsZWFzdC1zaWduaWZpY2FudCBieXRlIG9mIHRoZSBpbnRlZ2VyICovCkBAIC03MDcsOCArNzA2LDcgQEAKIAkJLyogTm8gY29udmVyc2lvbnMgZm9yIGFsbCBvdGhlciB0eXBlcy4gIEp1c3QgYXR0YWNoIHRoZSBzb3VyY2Ugb2JqZWN0ICovCiAKIAkJc3RhdHVzID0gYWNwaV9uc19hdHRhY2hfb2JqZWN0KG5vZGUsIHNvdXJjZV9kZXNjLAotCQkJCQkgICAgICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCQkJICAgICAgIChzb3VyY2VfZGVzYykpOworCQkJCQkgICAgICAgc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlKTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmVuLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmVuLmMKaW5kZXggMTQ1ZDE1My4uNjA4ZTgzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3Jlbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZW4uYwpAQCAtOTYsOCArOTYsNyBAQAogCQkgKiBhcmUgYWxsIGVzc2VudGlhbGx5IHRoZSBzYW1lLiAgVGhpcyBjYXNlIGhhbmRsZXMgdGhlCiAJCSAqICJpbnRlcmNoYW5nZWFibGUiIHR5cGVzIEludGVnZXIsIFN0cmluZywgYW5kIEJ1ZmZlci4KIAkJICovCi0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgPT0KLQkJICAgIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKKwkJaWYgKHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7CiAKIAkJCS8qIFJlc29sdmUgYSByZWZlcmVuY2Ugb2JqZWN0IGZpcnN0ICovCiAKQEAgLTExNywxMyArMTE2LDExIEBACiAKIAkJLyogTXVzdCBoYXZlIGEgSW50ZWdlciwgQnVmZmVyLCBvciBTdHJpbmcgKi8KIAotCQlpZiAoKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgJiYKLQkJICAgIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgIT0gQUNQSV9UWVBFX0JVRkZFUikgJiYKLQkJICAgIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgIT0gQUNQSV9UWVBFX1NUUklORykgJiYKLQkJICAgICEoKEFDUElfR0VUX09CSkVDVF9UWVBFKHNvdXJjZV9kZXNjKSA9PQotCQkgICAgICAgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkKLQkJICAgICAgJiYgKHNvdXJjZV9kZXNjLT5yZWZlcmVuY2UuY2xhc3MgPT0KLQkJCSAgQUNQSV9SRUZDTEFTU19UQUJMRSkpKSB7CisJCWlmICgoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSAmJgorCQkgICAgKHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSAmJgorCQkgICAgKHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfU1RSSU5HKSAmJgorCQkgICAgISgoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpICYmCisJCSAgICAgIChzb3VyY2VfZGVzYy0+cmVmZXJlbmNlLmNsYXNzID09IEFDUElfUkVGQ0xBU1NfVEFCTEUpKSkgewogCiAJCQkvKiBDb252ZXJzaW9uIHN1Y2Nlc3NmdWwgYnV0IHN0aWxsIG5vdCBhIHZhbGlkIHR5cGUgKi8KIApAQCAtMjE4LDggKzIxNSw3IEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykgIT0KLQkgICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUoZGVzdF9kZXNjKSkgeworCWlmIChzb3VyY2VfZGVzYy0+Y29tbW9uLnR5cGUgIT0gZGVzdF9kZXNjLT5jb21tb24udHlwZSkgewogCQkvKgogCQkgKiBUaGUgc291cmNlIHR5cGUgZG9lcyBub3QgbWF0Y2ggdGhlIHR5cGUgb2YgdGhlIGRlc3RpbmF0aW9uLgogCQkgKiBQZXJmb3JtIHRoZSAiaW1wbGljaXQgY29udmVyc2lvbiIgb2YgdGhlIHNvdXJjZSB0byB0aGUgY3VycmVudCB0eXBlCkBAIC0yMjksMTEgKzIyNSwxMCBAQAogCQkgKiBPdGhlcndpc2UsIGFjdHVhbF9zcmNfZGVzYyBpcyBhIHRlbXBvcmFyeSBvYmplY3QgdG8gaG9sZCB0aGUKIAkJICogY29udmVydGVkIG9iamVjdC4KIAkJICovCi0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2V4X2NvbnZlcnRfdG9fdGFyZ2V0X3R5cGUoQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCQkJCSAgIChkZXN0X2Rlc2MpLCBzb3VyY2VfZGVzYywKLQkJCQkJCSAgICZhY3R1YWxfc3JjX2Rlc2MsCi0JCQkJCQkgICB3YWxrX3N0YXRlKTsKKwkJc3RhdHVzID0gYWNwaV9leF9jb252ZXJ0X3RvX3RhcmdldF90eXBlKGRlc3RfZGVzYy0+Y29tbW9uLnR5cGUsCisJCQkJCQkJc291cmNlX2Rlc2MsCisJCQkJCQkJJmFjdHVhbF9zcmNfZGVzYywKKwkJCQkJCQl3YWxrX3N0YXRlKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAkJfQpAQCAtMjUyLDcgKzI0Nyw3IEBACiAJICogV2Ugbm93IGhhdmUgdHdvIG9iamVjdHMgb2YgaWRlbnRpY2FsIHR5cGVzLCBhbmQgd2UgY2FuIHBlcmZvcm0gYQogCSAqIGNvcHkgb2YgdGhlICp2YWx1ZSogb2YgdGhlIHNvdXJjZSBvYmplY3QuCiAJICovCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShkZXN0X2Rlc2MpKSB7CisJc3dpdGNoIChkZXN0X2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAogCQlkZXN0X2Rlc2MtPmludGVnZXIudmFsdWUgPSBhY3R1YWxfc3JjX2Rlc2MtPmludGVnZXIudmFsdWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4dXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCmluZGV4IDMyYjg1ZDYuLjg3NzMwZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAkgKi8KIAlpZiAoKCFvYmpfZGVzYykgfHwKIAkgICAgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShvYmpfZGVzYykgIT0gQUNQSV9ERVNDX1RZUEVfT1BFUkFORCkgfHwKLQkgICAgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSAhPSBBQ1BJX1RZUEVfSU5URUdFUikpIHsKKwkgICAgKG9ial9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikpIHsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2FjcGkuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdhY3BpLmMKaW5kZXggYTlkNGZlYS4uOWFmMzYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2FjcGkuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3YWNwaS5jCkBAIC04Niw3ICs4Niw4IEBACiAJICovCiAJaWYgKCFhY3BpX2dibF9GQURULmFjcGlfZW5hYmxlICYmICFhY3BpX2dibF9GQURULmFjcGlfZGlzYWJsZSkgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJObyBBQ1BJIG1vZGUgdHJhbnNpdGlvbiBzdXBwb3J0ZWQgaW4gdGhpcyBzeXN0ZW0gKGVuYWJsZS9kaXNhYmxlIGJvdGggemVybykiKSk7CisJCQkgICAgIk5vIEFDUEkgbW9kZSB0cmFuc2l0aW9uIHN1cHBvcnRlZCBpbiB0aGlzIHN5c3RlbSAiCisJCQkgICAgIihlbmFibGUvZGlzYWJsZSBib3RoIHplcm8pIikpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOwogCX0KIApAQCAtOTUsNyArOTYsNyBAQAogCiAJCS8qIEJJT1Mgc2hvdWxkIGhhdmUgZGlzYWJsZWQgQUxMIGZpeGVkIGFuZCBHUCBldmVudHMgKi8KIAotCQlzdGF0dXMgPSBhY3BpX29zX3dyaXRlX3BvcnQoYWNwaV9nYmxfRkFEVC5zbWlfY29tbWFuZCwKKwkJc3RhdHVzID0gYWNwaV9od193cml0ZV9wb3J0KGFjcGlfZ2JsX0ZBRFQuc21pX2NvbW1hbmQsCiAJCQkJCSAgICAodTMyKSBhY3BpX2dibF9GQURULmFjcGlfZW5hYmxlLCA4KTsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJCSAgIkF0dGVtcHRpbmcgdG8gZW5hYmxlIEFDUEkgbW9kZVxuIikpOwpAQCAtMTA3LDcgKzEwOCw3IEBACiAJCSAqIEJJT1Mgc2hvdWxkIGNsZWFyIGFsbCBmaXhlZCBzdGF0dXMgYml0cyBhbmQgcmVzdG9yZSBmaXhlZCBldmVudAogCQkgKiBlbmFibGUgYml0cyB0byBkZWZhdWx0CiAJCSAqLwotCQlzdGF0dXMgPSBhY3BpX29zX3dyaXRlX3BvcnQoYWNwaV9nYmxfRkFEVC5zbWlfY29tbWFuZCwKKwkJc3RhdHVzID0gYWNwaV9od193cml0ZV9wb3J0KGFjcGlfZ2JsX0ZBRFQuc21pX2NvbW1hbmQsCiAJCQkJCSAgICAodTMyKSBhY3BpX2dibF9GQURULmFjcGlfZGlzYWJsZSwKIAkJCQkJICAgIDgpOwogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCkBAIC0xNzIsNyArMTczLDcgQEAKIAkJcmV0dXJuX1VJTlQzMihBQ1BJX1NZU19NT0RFX0FDUEkpOwogCX0KIAotCXN0YXR1cyA9IGFjcGlfZ2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX1NDSV9FTkFCTEUsICZ2YWx1ZSk7CisJc3RhdHVzID0gYWNwaV9yZWFkX2JpdF9yZWdpc3RlcihBQ1BJX0JJVFJFR19TQ0lfRU5BQkxFLCAmdmFsdWUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fVUlOVDMyKEFDUElfU1lTX01PREVfTEVHQUNZKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMKaW5kZXggMjAxM2I2Ni4uZDNiN2UzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2dwZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdncGUuYwpAQCAtODksMTAgKzg5LDkgQEAKIAogCS8qIENsZWFyIGp1c3QgdGhlIGJpdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgR1BFICovCiAKLQlBQ1BJX0NMRUFSX0JJVChlbmFibGVfbWFzaywKLQkJICAgICAgICgodTMyKSAxIDw8Ci0JCQkoZ3BlX2V2ZW50X2luZm8tPmdwZV9udW1iZXIgLQotCQkJIGdwZV9yZWdpc3Rlcl9pbmZvLT5iYXNlX2dwZV9udW1iZXIpKSk7CisJQUNQSV9DTEVBUl9CSVQoZW5hYmxlX21hc2ssICgodTMyKTEgPDwKKwkJCQkgICAgIChncGVfZXZlbnRfaW5mby0+Z3BlX251bWJlciAtCisJCQkJICAgICAgZ3BlX3JlZ2lzdGVyX2luZm8tPmJhc2VfZ3BlX251bWJlcikpKTsKIAogCS8qIFdyaXRlIHRoZSB1cGRhdGVkIGVuYWJsZSBtYXNrICovCiAKQEAgLTE1NiwxMCArMTU1LDkgQEAKIAogCUFDUElfRlVOQ1RJT05fRU5UUlkoKTsKIAotCXJlZ2lzdGVyX2JpdCA9ICh1OCkKLQkgICAgKDEgPDwKLQkgICAgIChncGVfZXZlbnRfaW5mby0+Z3BlX251bWJlciAtCi0JICAgICAgZ3BlX2V2ZW50X2luZm8tPnJlZ2lzdGVyX2luZm8tPmJhc2VfZ3BlX251bWJlcikpOworCXJlZ2lzdGVyX2JpdCA9ICh1OCkoMSA8PAorCQkJICAgIChncGVfZXZlbnRfaW5mby0+Z3BlX251bWJlciAtCisJCQkgICAgIGdwZV9ldmVudF9pbmZvLT5yZWdpc3Rlcl9pbmZvLT5iYXNlX2dwZV9udW1iZXIpKTsKIAogCS8qCiAJICogV3JpdGUgYSBvbmUgdG8gdGhlIGFwcHJvcHJpYXRlIGJpdCBpbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIHRvCkBAIC0yMDYsMTAgKzIwNCw5IEBACiAKIAkvKiBHZXQgdGhlIHJlZ2lzdGVyIGJpdG1hc2sgZm9yIHRoaXMgR1BFICovCiAKLQlyZWdpc3Rlcl9iaXQgPSAodTgpCi0JICAgICgxIDw8Ci0JICAgICAoZ3BlX2V2ZW50X2luZm8tPmdwZV9udW1iZXIgLQotCSAgICAgIGdwZV9ldmVudF9pbmZvLT5yZWdpc3Rlcl9pbmZvLT5iYXNlX2dwZV9udW1iZXIpKTsKKwlyZWdpc3Rlcl9iaXQgPSAodTgpKDEgPDwKKwkJCSAgICAoZ3BlX2V2ZW50X2luZm8tPmdwZV9udW1iZXIgLQorCQkJICAgICBncGVfZXZlbnRfaW5mby0+cmVnaXN0ZXJfaW5mby0+YmFzZV9ncGVfbnVtYmVyKSk7CiAKIAkvKiBHUEUgY3VycmVudGx5IGVuYWJsZWQ/IChlbmFibGVkIGZvciBydW50aW1lPykgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3JlZ3MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdyZWdzLmMKaW5kZXggNGRjNDNiMC4uN2IyZmI2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3JlZ3MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cmVncy5jCkBAIC01MSw2ICs1MSwxNyBAQAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfSEFSRFdBUkUKIEFDUElfTU9EVUxFX05BTUUoImh3cmVncyIpCiAKKy8qIExvY2FsIFByb3RvdHlwZXMgKi8KK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9od19yZWFkX211bHRpcGxlKHUzMiAqdmFsdWUsCisJCSAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnaXN0ZXJfYSwKKwkJICAgICAgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpyZWdpc3Rlcl9iKTsKKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2h3X3dyaXRlX211bHRpcGxlKHUzMiB2YWx1ZSwKKwkJICAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnaXN0ZXJfYSwKKwkJICAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnaXN0ZXJfYik7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfaHdfY2xlYXJfYWNwaV9zdGF0dXMKQEAgLTYwLDkgKzcxLDkgQEAKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCiAgKiBERVNDUklQVElPTjogQ2xlYXJzIGFsbCBmaXhlZCBhbmQgZ2VuZXJhbCBwdXJwb3NlIHN0YXR1cyBiaXRzCi0gKiAgICAgICAgICAgICAgVEhJUyBGVU5DVElPTiBNVVNUIEJFIENBTExFRCBXSVRIIElOVEVSUlVQVFMgRElTQUJMRUQKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBhY3BpX3N0YXR1cyBhY3BpX2h3X2NsZWFyX2FjcGlfc3RhdHVzKHZvaWQpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwpAQCAtNzAsMjggKzgxLDIwIEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X2NsZWFyX2FjcGlfc3RhdHVzKTsKIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU8sICJBYm91dCB0byB3cml0ZSAlMDRYIHRvICUwNFhcbiIsCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywgIkFib3V0IHRvIHdyaXRlICUwNFggdG8gJTBsbFhcbiIsCiAJCQkgIEFDUElfQklUTUFTS19BTExfRklYRURfU1RBVFVTLAotCQkJICAodTE2KSBhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrLmFkZHJlc3MpKTsKKwkJCSAgYWNwaV9nYmxfeHBtMWFfc3RhdHVzLmFkZHJlc3MpKTsKIAogCWxvY2tfZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrKTsKIAorCS8qIENsZWFyIHRoZSBmaXhlZCBldmVudHMgaW4gUE0xIEEvQiAqLworCiAJc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVMsCiAJCQkJCUFDUElfQklUTUFTS19BTExfRklYRURfU1RBVFVTKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CiAJfQogCi0JLyogQ2xlYXIgdGhlIGZpeGVkIGV2ZW50cyAqLwotCi0JaWYgKGFjcGlfZ2JsX0ZBRFQueHBtMWJfZXZlbnRfYmxvY2suYWRkcmVzcykgewotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKEFDUElfQklUTUFTS19BTExfRklYRURfU1RBVFVTLAotCQkJCSAgICAmYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jayk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7Ci0JCX0KLQl9Ci0KIAkvKiBDbGVhciB0aGUgR1BFIEJpdHMgaW4gYWxsIEdQRSByZWdpc3RlcnMgaW4gYWxsIEdQRSBibG9ja3MgKi8KIAogCXN0YXR1cyA9IGFjcGlfZXZfd2Fsa19ncGVfbGlzdChhY3BpX2h3X2NsZWFyX2dwZV9ibG9jaywgTlVMTCk7CkBAIC0xMjgsNiArMTMxLDQyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBGVU5DVElPTjogICAgYWNwaV9od193cml0ZV9wbTFfY29udHJvbAorICoKKyAqIFBBUkFNRVRFUlM6ICBwbTFhX2NvbnRyb2wgICAgICAgIC0gVmFsdWUgdG8gYmUgd3JpdHRlbiB0byBQTTFBIGNvbnRyb2wKKyAqICAgICAgICAgICAgICBwbTFiX2NvbnRyb2wgICAgICAgIC0gVmFsdWUgdG8gYmUgd3JpdHRlbiB0byBQTTFCIGNvbnRyb2wKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IFdyaXRlIHRoZSBQTTEgQS9CIGNvbnRyb2wgcmVnaXN0ZXJzLiBUaGVzZSByZWdpc3RlcnMgYXJlCisgKiAgICAgICAgICAgICAgZGlmZmVyZW50IHRoYW4gdGhhbiB0aGUgUE0xIEEvQiBzdGF0dXMgYW5kIGVuYWJsZSByZWdpc3RlcnMKKyAqICAgICAgICAgICAgICBpbiB0aGF0IGRpZmZlcmVudCB2YWx1ZXMgY2FuIGJlIHdyaXR0ZW4gdG8gdGhlIEEvQiByZWdpc3RlcnMuCisgKiAgICAgICAgICAgICAgTW9zdCBub3RhYmx5LCB0aGUgU0xQX1RZUCBiaXRzIGNhbiBiZSBkaWZmZXJlbnQsIGFzIHBlciB0aGUKKyAqICAgICAgICAgICAgICB2YWx1ZXMgcmV0dXJuZWQgZnJvbSB0aGUgX1N4IHByZWRlZmluZWQgbWV0aG9kcy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cyBhY3BpX2h3X3dyaXRlX3BtMV9jb250cm9sKHUzMiBwbTFhX2NvbnRyb2wsIHUzMiBwbTFiX2NvbnRyb2wpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJQUNQSV9GVU5DVElPTl9UUkFDRShod193cml0ZV9wbTFfY29udHJvbCk7CisKKwlzdGF0dXMgPSBhY3BpX3dyaXRlKHBtMWFfY29udHJvbCwgJmFjcGlfZ2JsX0ZBRFQueHBtMWFfY29udHJvbF9ibG9jayk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCX0KKworCWlmIChhY3BpX2dibF9GQURULnhwbTFiX2NvbnRyb2xfYmxvY2suYWRkcmVzcykgeworCQlzdGF0dXMgPQorCQkgICAgYWNwaV93cml0ZShwbTFiX2NvbnRyb2wsCisJCQkgICAgICAgJmFjcGlfZ2JsX0ZBRFQueHBtMWJfY29udHJvbF9ibG9jayk7CisJfQorCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgogICogRlVOQ1RJT046ICAgIGFjcGlfaHdfcmVnaXN0ZXJfcmVhZAogICoKICAqIFBBUkFNRVRFUlM6ICByZWdpc3Rlcl9pZCAgICAgICAgIC0gQUNQSSBSZWdpc3RlciBJRApAQCAtMTQxLDY0ICsxODAsNTYgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQodTMyIHJlZ2lzdGVyX2lkLCB1MzIgKiByZXR1cm5fdmFsdWUpCiB7Ci0JdTMyIHZhbHVlMSA9IDA7Ci0JdTMyIHZhbHVlMiA9IDA7CisJdTMyIHZhbHVlID0gMDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X3JlZ2lzdGVyX3JlYWQpOwogCiAJc3dpdGNoIChyZWdpc3Rlcl9pZCkgewotCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTOgkvKiAxNi1iaXQgYWNjZXNzICovCisJY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVM6CS8qIFBNMSBBL0I6IDE2LWJpdCBhY2Nlc3MgZWFjaCAqLwogCi0JCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWUxLCAmYWNwaV9nYmxfRkFEVC54cG0xYV9ldmVudF9ibG9jayk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJLyogUE0xQiBpcyBvcHRpb25hbCAqLwotCi0JCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWUyLCAmYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jayk7Ci0JCXZhbHVlMSB8PSB2YWx1ZTI7CisJCXN0YXR1cyA9IGFjcGlfaHdfcmVhZF9tdWx0aXBsZSgmdmFsdWUsCisJCQkJCSAgICAgICAmYWNwaV9nYmxfeHBtMWFfc3RhdHVzLAorCQkJCQkgICAgICAgJmFjcGlfZ2JsX3hwbTFiX3N0YXR1cyk7CiAJCWJyZWFrOwogCi0JY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMV9FTkFCTEU6CS8qIDE2LWJpdCBhY2Nlc3MgKi8KKwljYXNlIEFDUElfUkVHSVNURVJfUE0xX0VOQUJMRToJLyogUE0xIEEvQjogMTYtYml0IGFjY2VzcyBlYWNoICovCiAKLQkJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZTEsICZhY3BpX2dibF94cG0xYV9lbmFibGUpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCS8qIFBNMUIgaXMgb3B0aW9uYWwgKi8KLQotCQlzdGF0dXMgPSBhY3BpX3JlYWQoJnZhbHVlMiwgJmFjcGlfZ2JsX3hwbTFiX2VuYWJsZSk7Ci0JCXZhbHVlMSB8PSB2YWx1ZTI7CisJCXN0YXR1cyA9IGFjcGlfaHdfcmVhZF9tdWx0aXBsZSgmdmFsdWUsCisJCQkJCSAgICAgICAmYWNwaV9nYmxfeHBtMWFfZW5hYmxlLAorCQkJCQkgICAgICAgJmFjcGlfZ2JsX3hwbTFiX2VuYWJsZSk7CiAJCWJyZWFrOwogCi0JY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MOgkvKiAxNi1iaXQgYWNjZXNzICovCisJY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MOgkvKiBQTTEgQS9COiAxNi1iaXQgYWNjZXNzIGVhY2ggKi8KIAotCQlzdGF0dXMgPSBhY3BpX3JlYWQoJnZhbHVlMSwgJmFjcGlfZ2JsX0ZBRFQueHBtMWFfY29udHJvbF9ibG9jayk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byBleGl0OwotCQl9CisJCXN0YXR1cyA9IGFjcGlfaHdfcmVhZF9tdWx0aXBsZSgmdmFsdWUsCisJCQkJCSAgICAgICAmYWNwaV9nYmxfRkFEVC4KKwkJCQkJICAgICAgIHhwbTFhX2NvbnRyb2xfYmxvY2ssCisJCQkJCSAgICAgICAmYWNwaV9nYmxfRkFEVC4KKwkJCQkJICAgICAgIHhwbTFiX2NvbnRyb2xfYmxvY2spOwogCi0JCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWUyLCAmYWNwaV9nYmxfRkFEVC54cG0xYl9jb250cm9sX2Jsb2NrKTsKLQkJdmFsdWUxIHw9IHZhbHVlMjsKKwkJLyoKKwkJICogWmVybyB0aGUgd3JpdGUtb25seSBiaXRzLiBGcm9tIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24sICJIYXJkd2FyZQorCQkgKiBXcml0ZS1Pbmx5IEJpdHMiOiAiVXBvbiByZWFkcyB0byByZWdpc3RlcnMgd2l0aCB3cml0ZS1vbmx5IGJpdHMsCisJCSAqIHNvZnR3YXJlIG1hc2tzIG91dCBhbGwgd3JpdGUtb25seSBiaXRzLiIKKwkJICovCisJCXZhbHVlICY9IH5BQ1BJX1BNMV9DT05UUk9MX1dSSVRFT05MWV9CSVRTOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTJfQ09OVFJPTDoJLyogOC1iaXQgYWNjZXNzICovCiAKLQkJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZTEsICZhY3BpX2dibF9GQURULnhwbTJfY29udHJvbF9ibG9jayk7CisJCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWUsICZhY3BpX2dibF9GQURULnhwbTJfY29udHJvbF9ibG9jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1JFR0lTVEVSX1BNX1RJTUVSOgkvKiAzMi1iaXQgYWNjZXNzICovCiAKLQkJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZTEsICZhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jayk7CisJCXN0YXR1cyA9IGFjcGlfcmVhZCgmdmFsdWUsICZhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1JFR0lTVEVSX1NNSV9DT01NQU5EX0JMT0NLOgkvKiA4LWJpdCBhY2Nlc3MgKi8KIAogCQlzdGF0dXMgPQotCQkgICAgYWNwaV9vc19yZWFkX3BvcnQoYWNwaV9nYmxfRkFEVC5zbWlfY29tbWFuZCwgJnZhbHVlMSwgOCk7CisJCSAgICBhY3BpX2h3X3JlYWRfcG9ydChhY3BpX2dibF9GQURULnNtaV9jb21tYW5kLCAmdmFsdWUsIDgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0yMDcsMTAgKzIzOCw4IEBACiAJCWJyZWFrOwogCX0KIAotICAgICAgZXhpdDoKLQogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQkqcmV0dXJuX3ZhbHVlID0gdmFsdWUxOworCQkqcmV0dXJuX3ZhbHVlID0gdmFsdWU7CiAJfQogCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC0yNTAsNTIgKzI3OSw0MiBAQAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoaHdfcmVnaXN0ZXJfd3JpdGUpOwogCiAJc3dpdGNoIChyZWdpc3Rlcl9pZCkgewotCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTOgkvKiAxNi1iaXQgYWNjZXNzICovCisJY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVM6CS8qIFBNMSBBL0I6IDE2LWJpdCBhY2Nlc3MgZWFjaCAqLworCQkvKgorCQkgKiBIYW5kbGUgdGhlICJpZ25vcmVkIiBiaXQgaW4gUE0xIFN0YXR1cy4gQWNjb3JkaW5nIHRvIHRoZSBBQ1BJCisJCSAqIHNwZWNpZmljYXRpb24sIGlnbm9yZWQgYml0cyBhcmUgdG8gYmUgcHJlc2VydmVkIHdoZW4gd3JpdGluZy4KKwkJICogTm9ybWFsbHksIHRoaXMgd291bGQgbWVhbiBhIHJlYWQvbW9kaWZ5L3dyaXRlIHNlcXVlbmNlLiBIb3dldmVyLAorCQkgKiBwcmVzZXJ2aW5nIGEgYml0IGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgZGlmZmVyZW50LiBXcml0aW5nIGEKKwkJICogb25lIGNsZWFycyB0aGUgc3RhdHVzLCBhbmQgd3JpdGluZyBhIHplcm8gcHJlc2VydmVzIHRoZSBzdGF0dXMuCisJCSAqIFRoZXJlZm9yZSwgd2UgbXVzdCBhbHdheXMgd3JpdGUgemVybyB0byB0aGUgaWdub3JlZCBiaXQuCisJCSAqCisJCSAqIFRoaXMgYmVoYXZpb3IgaXMgY2xhcmlmaWVkIGluIHRoZSBBQ1BJIDQuMCBzcGVjaWZpY2F0aW9uLgorCQkgKi8KKwkJdmFsdWUgJj0gfkFDUElfUE0xX1NUQVRVU19QUkVTRVJWRURfQklUUzsKIAotCQkvKiBQZXJmb3JtIGEgcmVhZCBmaXJzdCB0byBwcmVzZXJ2ZSBjZXJ0YWluIGJpdHMgKHBlciBBQ1BJIHNwZWMpICovCi0KLQkJc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl9yZWFkKEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUywKLQkJCQkJICAgICAgICZyZWFkX3ZhbHVlKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQkvKiBJbnNlcnQgdGhlIGJpdHMgdG8gYmUgcHJlc2VydmVkICovCi0KLQkJQUNQSV9JTlNFUlRfQklUUyh2YWx1ZSwgQUNQSV9QTTFfU1RBVFVTX1BSRVNFUlZFRF9CSVRTLAotCQkJCSByZWFkX3ZhbHVlKTsKLQotCQkvKiBOb3cgd2UgY2FuIHdyaXRlIHRoZSBkYXRhICovCi0KLQkJc3RhdHVzID0gYWNwaV93cml0ZSh2YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtMWFfZXZlbnRfYmxvY2spOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCS8qIFBNMUIgaXMgb3B0aW9uYWwgKi8KLQotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCAmYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jayk7CisJCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfbXVsdGlwbGUodmFsdWUsCisJCQkJCQkmYWNwaV9nYmxfeHBtMWFfc3RhdHVzLAorCQkJCQkJJmFjcGlfZ2JsX3hwbTFiX3N0YXR1cyk7CiAJCWJyZWFrOwogCi0JY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMV9FTkFCTEU6CS8qIDE2LWJpdCBhY2Nlc3MgKi8KKwljYXNlIEFDUElfUkVHSVNURVJfUE0xX0VOQUJMRToJLyogUE0xIEEvQjogMTYtYml0IGFjY2VzcyAqLwogCi0JCXN0YXR1cyA9IGFjcGlfd3JpdGUodmFsdWUsICZhY3BpX2dibF94cG0xYV9lbmFibGUpOwotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCS8qIFBNMUIgaXMgb3B0aW9uYWwgKi8KLQotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCAmYWNwaV9nYmxfeHBtMWJfZW5hYmxlKTsKKwkJc3RhdHVzID0gYWNwaV9od193cml0ZV9tdWx0aXBsZSh2YWx1ZSwKKwkJCQkJCSZhY3BpX2dibF94cG0xYV9lbmFibGUsCisJCQkJCQkmYWNwaV9nYmxfeHBtMWJfZW5hYmxlKTsKIAkJYnJlYWs7CiAKLQljYXNlIEFDUElfUkVHSVNURVJfUE0xX0NPTlRST0w6CS8qIDE2LWJpdCBhY2Nlc3MgKi8KKwljYXNlIEFDUElfUkVHSVNURVJfUE0xX0NPTlRST0w6CS8qIFBNMSBBL0I6IDE2LWJpdCBhY2Nlc3MgZWFjaCAqLwogCiAJCS8qCiAJCSAqIFBlcmZvcm0gYSByZWFkIGZpcnN0IHRvIHByZXNlcnZlIGNlcnRhaW4gYml0cyAocGVyIEFDUEkgc3BlYykKKwkJICogTm90ZTogVGhpcyBpbmNsdWRlcyBTQ0lfRU4sIHdlIG5ldmVyIHdhbnQgdG8gY2hhbmdlIHRoaXMgYml0CiAJCSAqLwotCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCwKLQkJCQkJICAgICAgICZyZWFkX3ZhbHVlKTsKKwkJc3RhdHVzID0gYWNwaV9od19yZWFkX211bHRpcGxlKCZyZWFkX3ZhbHVlLAorCQkJCQkgICAgICAgJmFjcGlfZ2JsX0ZBRFQuCisJCQkJCSAgICAgICB4cG0xYV9jb250cm9sX2Jsb2NrLAorCQkJCQkgICAgICAgJmFjcGlfZ2JsX0ZBRFQuCisJCQkJCSAgICAgICB4cG0xYl9jb250cm9sX2Jsb2NrKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KQEAgLTMwNywyNSArMzI2LDI5IEBACiAKIAkJLyogTm93IHdlIGNhbiB3cml0ZSB0aGUgZGF0YSAqLwogCi0JCXN0YXR1cyA9IGFjcGlfd3JpdGUodmFsdWUsICZhY3BpX2dibF9GQURULnhwbTFhX2NvbnRyb2xfYmxvY2spOworCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlX211bHRpcGxlKHZhbHVlLAorCQkJCQkJJmFjcGlfZ2JsX0ZBRFQuCisJCQkJCQl4cG0xYV9jb250cm9sX2Jsb2NrLAorCQkJCQkJJmFjcGlfZ2JsX0ZBRFQuCisJCQkJCQl4cG0xYl9jb250cm9sX2Jsb2NrKTsKKwkJYnJlYWs7CisKKwljYXNlIEFDUElfUkVHSVNURVJfUE0yX0NPTlRST0w6CS8qIDgtYml0IGFjY2VzcyAqLworCisJCS8qCisJCSAqIEZvciBjb250cm9sIHJlZ2lzdGVycywgYWxsIHJlc2VydmVkIGJpdHMgbXVzdCBiZSBwcmVzZXJ2ZWQsCisJCSAqIGFzIHBlciB0aGUgQUNQSSBzcGVjLgorCQkgKi8KKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfcmVhZCgmcmVhZF92YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtMl9jb250cm9sX2Jsb2NrKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCAmYWNwaV9nYmxfRkFEVC54cG0xYl9jb250cm9sX2Jsb2NrKTsKLQkJYnJlYWs7CisJCS8qIEluc2VydCB0aGUgYml0cyB0byBiZSBwcmVzZXJ2ZWQgKi8KIAotCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTFBX0NPTlRST0w6CS8qIDE2LWJpdCBhY2Nlc3MgKi8KLQotCQlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCAmYWNwaV9nYmxfRkFEVC54cG0xYV9jb250cm9sX2Jsb2NrKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFDUElfUkVHSVNURVJfUE0xQl9DT05UUk9MOgkvKiAxNi1iaXQgYWNjZXNzICovCi0KLQkJc3RhdHVzID0gYWNwaV93cml0ZSh2YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtMWJfY29udHJvbF9ibG9jayk7Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMl9DT05UUk9MOgkvKiA4LWJpdCBhY2Nlc3MgKi8KKwkJQUNQSV9JTlNFUlRfQklUUyh2YWx1ZSwgQUNQSV9QTTJfQ09OVFJPTF9QUkVTRVJWRURfQklUUywKKwkJCQkgcmVhZF92YWx1ZSk7CiAKIAkJc3RhdHVzID0gYWNwaV93cml0ZSh2YWx1ZSwgJmFjcGlfZ2JsX0ZBRFQueHBtMl9jb250cm9sX2Jsb2NrKTsKIAkJYnJlYWs7CkBAIC0zNDAsMTAgKzM2MywxMSBAQAogCQkvKiBTTUlfQ01EIGlzIGN1cnJlbnRseSBhbHdheXMgaW4gSU8gc3BhY2UgKi8KIAogCQlzdGF0dXMgPQotCQkgICAgYWNwaV9vc193cml0ZV9wb3J0KGFjcGlfZ2JsX0ZBRFQuc21pX2NvbW1hbmQsIHZhbHVlLCA4KTsKKwkJICAgIGFjcGlfaHdfd3JpdGVfcG9ydChhY3BpX2dibF9GQURULnNtaV9jb21tYW5kLCB2YWx1ZSwgOCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywgIlVua25vd24gUmVnaXN0ZXIgSUQ6ICVYIiwgcmVnaXN0ZXJfaWQpKTsKIAkJc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAkJYnJlYWs7CiAJfQpAQCAtMzUxLDMgKzM3NSwxMDMgQEAKICAgICAgIGV4aXQ6CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9od19yZWFkX211bHRpcGxlCisgKgorICogUEFSQU1FVEVSUzogIFZhbHVlICAgICAgICAgICAgICAgLSBXaGVyZSB0aGUgcmVnaXN0ZXIgdmFsdWUgaXMgcmV0dXJuZWQKKyAqICAgICAgICAgICAgICByZWdpc3Rlcl9hICAgICAgICAgICAtIEZpcnN0IEFDUEkgcmVnaXN0ZXIgKHJlcXVpcmVkKQorICogICAgICAgICAgICAgIHJlZ2lzdGVyX2IgICAgICAgICAgIC0gU2Vjb25kIEFDUEkgcmVnaXN0ZXIgKG9wdGlvbmFsKQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogUmVhZCBmcm9tIHRoZSBzcGVjaWZpZWQgdHdvLXBhcnQgQUNQSSByZWdpc3RlciAoc3VjaCBhcyBQTTEgQS9CKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9od19yZWFkX211bHRpcGxlKHUzMiAqdmFsdWUsCisJCSAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnaXN0ZXJfYSwKKwkJICAgICAgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpyZWdpc3Rlcl9iKQoreworCXUzMiB2YWx1ZV9hID0gMDsKKwl1MzIgdmFsdWVfYiA9IDA7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJLyogVGhlIGZpcnN0IHJlZ2lzdGVyIGlzIGFsd2F5cyByZXF1aXJlZCAqLworCisJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZV9hLCByZWdpc3Rlcl9hKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKworCS8qIFNlY29uZCByZWdpc3RlciBpcyBvcHRpb25hbCAqLworCisJaWYgKHJlZ2lzdGVyX2ItPmFkZHJlc3MpIHsKKwkJc3RhdHVzID0gYWNwaV9yZWFkKCZ2YWx1ZV9iLCByZWdpc3Rlcl9iKTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQlyZXR1cm4gKHN0YXR1cyk7CisJCX0KKwl9CisKKwkvKgorCSAqIE9SIHRoZSB0d28gcmV0dXJuIHZhbHVlcyB0b2dldGhlci4gTm8gc2hpZnRpbmcgb3IgbWFza2luZyBpcyBuZWNlc3NhcnksCisJICogYmVjYXVzZSBvZiBob3cgdGhlIFBNMSByZWdpc3RlcnMgYXJlIGRlZmluZWQgaW4gdGhlIEFDUEkgc3BlY2lmaWNhdGlvbjoKKwkgKgorCSAqICJBbHRob3VnaCB0aGUgYml0cyBjYW4gYmUgc3BsaXQgYmV0d2VlbiB0aGUgdHdvIHJlZ2lzdGVyIGJsb2NrcyAoZWFjaAorCSAqIHJlZ2lzdGVyIGJsb2NrIGhhcyBhIHVuaXF1ZSBwb2ludGVyIHdpdGhpbiB0aGUgRkFEVCksIHRoZSBiaXQgcG9zaXRpb25zCisJICogYXJlIG1haW50YWluZWQuIFRoZSByZWdpc3RlciBibG9jayB3aXRoIHVuaW1wbGVtZW50ZWQgYml0cyAodGhhdCBpcywKKwkgKiB0aG9zZSBpbXBsZW1lbnRlZCBpbiB0aGUgb3RoZXIgcmVnaXN0ZXIgYmxvY2spIGFsd2F5cyByZXR1cm5zIHplcm9zLAorCSAqIGFuZCB3cml0ZXMgaGF2ZSBubyBzaWRlIGVmZmVjdHMiCisJICovCisJKnZhbHVlID0gKHZhbHVlX2EgfCB2YWx1ZV9iKTsKKwlyZXR1cm4gKEFFX09LKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2h3X3dyaXRlX211bHRpcGxlCisgKgorICogUEFSQU1FVEVSUzogIFZhbHVlICAgICAgICAgICAgICAgLSBUaGUgdmFsdWUgdG8gd3JpdGUKKyAqICAgICAgICAgICAgICByZWdpc3Rlcl9hICAgICAgICAgICAtIEZpcnN0IEFDUEkgcmVnaXN0ZXIgKHJlcXVpcmVkKQorICogICAgICAgICAgICAgIHJlZ2lzdGVyX2IgICAgICAgICAgIC0gU2Vjb25kIEFDUEkgcmVnaXN0ZXIgKG9wdGlvbmFsKQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogV3JpdGUgdG8gdGhlIHNwZWNpZmllZCB0d28tcGFydCBBQ1BJIHJlZ2lzdGVyIChzdWNoIGFzIFBNMSBBL0IpCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2h3X3dyaXRlX211bHRpcGxlKHUzMiB2YWx1ZSwKKwkJICAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnaXN0ZXJfYSwKKwkJICAgICAgIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnaXN0ZXJfYikKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwkvKiBUaGUgZmlyc3QgcmVnaXN0ZXIgaXMgYWx3YXlzIHJlcXVpcmVkICovCisKKwlzdGF0dXMgPSBhY3BpX3dyaXRlKHZhbHVlLCByZWdpc3Rlcl9hKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIChzdGF0dXMpOworCX0KKworCS8qCisJICogU2Vjb25kIHJlZ2lzdGVyIGlzIG9wdGlvbmFsCisJICoKKwkgKiBObyBiaXQgc2hpZnRpbmcgb3IgY2xlYXJpbmcgaXMgbmVjZXNzYXJ5LCBiZWNhdXNlIG9mIGhvdyB0aGUgUE0xCisJICogcmVnaXN0ZXJzIGFyZSBkZWZpbmVkIGluIHRoZSBBQ1BJIHNwZWNpZmljYXRpb246CisJICoKKwkgKiAiQWx0aG91Z2ggdGhlIGJpdHMgY2FuIGJlIHNwbGl0IGJldHdlZW4gdGhlIHR3byByZWdpc3RlciBibG9ja3MgKGVhY2gKKwkgKiByZWdpc3RlciBibG9jayBoYXMgYSB1bmlxdWUgcG9pbnRlciB3aXRoaW4gdGhlIEZBRFQpLCB0aGUgYml0IHBvc2l0aW9ucworCSAqIGFyZSBtYWludGFpbmVkLiBUaGUgcmVnaXN0ZXIgYmxvY2sgd2l0aCB1bmltcGxlbWVudGVkIGJpdHMgKHRoYXQgaXMsCisJICogdGhvc2UgaW1wbGVtZW50ZWQgaW4gdGhlIG90aGVyIHJlZ2lzdGVyIGJsb2NrKSBhbHdheXMgcmV0dXJucyB6ZXJvcywKKwkgKiBhbmQgd3JpdGVzIGhhdmUgbm8gc2lkZSBlZmZlY3RzIgorCSAqLworCWlmIChyZWdpc3Rlcl9iLT5hZGRyZXNzKSB7CisJCXN0YXR1cyA9IGFjcGlfd3JpdGUodmFsdWUsIHJlZ2lzdGVyX2IpOworCX0KKworCXJldHVybiAoc3RhdHVzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdzbGVlcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMKaW5kZXggYTJhZjJhNC4uYmFhNWZjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3NsZWVwLmMKQEAgLTkwLDYgKzkwLDcgQEAKIAogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IpCiAKKyNpZiBBQ1BJX01BQ0hJTkVfV0lEVEggPT0gNjQKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3I2NApAQCAtMTAwLDcgKzEwMSw4IEBACiAgKiBSRVRVUk46ICAgICAgU3RhdHVzCiAgKgogICogREVTQ1JJUFRJT046IFNldHMgdGhlIDY0LWJpdCBYX2Zpcm13YXJlX3dha2luZ192ZWN0b3IgZmllbGQgb2YgdGhlIEZBQ1MsIGlmCi0gKiAgICAgICAgICAgICAgaXQgZXhpc3RzIGluIHRoZSB0YWJsZS4KKyAqICAgICAgICAgICAgICBpdCBleGlzdHMgaW4gdGhlIHRhYmxlLiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciB1c2Ugd2l0aAorICogICAgICAgICAgICAgIDY0LWJpdCBob3N0IG9wZXJhdGluZyBzeXN0ZW1zLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cwpAQCAtMTI0LDYgKzEyNiw3IEBACiB9CiAKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX3NldF9maXJtd2FyZV93YWtpbmdfdmVjdG9yNjQpCisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xNDcsOSArMTUwLDggQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZV9wcmVwKTsKIAotCS8qCi0JICogX1BTVyBtZXRob2RzIGNvdWxkIGJlIHJ1biBoZXJlIHRvIGVuYWJsZSB3YWtlLW9uIGtleWJvYXJkLCBMQU4sIGV0Yy4KLQkgKi8KKwkvKiBfUFNXIG1ldGhvZHMgY291bGQgYmUgcnVuIGhlcmUgdG8gZW5hYmxlIHdha2Utb24ga2V5Ym9hcmQsIExBTiwgZXRjLiAqLworCiAJc3RhdHVzID0gYWNwaV9nZXRfc2xlZXBfdHlwZV9kYXRhKHNsZWVwX3N0YXRlLAogCQkJCQkgICZhY3BpX2dibF9zbGVlcF90eXBlX2EsCiAJCQkJCSAgJmFjcGlfZ2JsX3NsZWVwX3R5cGVfYik7CkBAIC0yMjMsOCArMjI1LDggQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cyBhc21saW5rYWdlIGFjcGlfZW50ZXJfc2xlZXBfc3RhdGUodTggc2xlZXBfc3RhdGUpCiB7Ci0JdTMyIFBNMUFjb250cm9sOwotCXUzMiBQTTFCY29udHJvbDsKKwl1MzIgcG0xYV9jb250cm9sOworCXUzMiBwbTFiX2NvbnRyb2w7CiAJc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKnNsZWVwX3R5cGVfcmVnX2luZm87CiAJc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKnNsZWVwX2VuYWJsZV9yZWdfaW5mbzsKIAl1MzIgaW5fdmFsdWU7CkBAIC0yNDIsMTMgKzI0NCwxNCBAQAogCX0KIAogCXNsZWVwX3R5cGVfcmVnX2luZm8gPQotCSAgICBhY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyhBQ1BJX0JJVFJFR19TTEVFUF9UWVBFX0EpOworCSAgICBhY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyhBQ1BJX0JJVFJFR19TTEVFUF9UWVBFKTsKIAlzbGVlcF9lbmFibGVfcmVnX2luZm8gPQogCSAgICBhY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyhBQ1BJX0JJVFJFR19TTEVFUF9FTkFCTEUpOwogCiAJLyogQ2xlYXIgd2FrZSBzdGF0dXMgKi8KIAotCXN0YXR1cyA9IGFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX1dBS0VfU1RBVFVTLCAxKTsKKwlzdGF0dXMgPQorCSAgICBhY3BpX3dyaXRlX2JpdF9yZWdpc3RlcihBQ1BJX0JJVFJFR19XQUtFX1NUQVRVUywgQUNQSV9DTEVBUl9TVEFUVVMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC0yODksMjQgKzI5MiwyNSBAQAogCiAJLyogR2V0IGN1cnJlbnQgdmFsdWUgb2YgUE0xQSBjb250cm9sICovCiAKLQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCwgJlBNMUFjb250cm9sKTsKKwlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCwKKwkJCQkgICAgICAgJnBtMWFfY29udHJvbCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lOSVQsCiAJCQkgICJFbnRlcmluZyBzbGVlcCBzdGF0ZSBbUyVkXVxuIiwgc2xlZXBfc3RhdGUpKTsKIAotCS8qIENsZWFyIFNMUF9FTiBhbmQgU0xQX1RZUCBmaWVsZHMgKi8KKwkvKiBDbGVhciB0aGUgU0xQX0VOIGFuZCBTTFBfVFlQIGZpZWxkcyAqLwogCi0JUE0xQWNvbnRyb2wgJj0gfihzbGVlcF90eXBlX3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2sgfAotCQkJIHNsZWVwX2VuYWJsZV9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrKTsKLQlQTTFCY29udHJvbCA9IFBNMUFjb250cm9sOworCXBtMWFfY29udHJvbCAmPSB+KHNsZWVwX3R5cGVfcmVnX2luZm8tPmFjY2Vzc19iaXRfbWFzayB8CisJCQkgIHNsZWVwX2VuYWJsZV9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrKTsKKwlwbTFiX2NvbnRyb2wgPSBwbTFhX2NvbnRyb2w7CiAKLQkvKiBJbnNlcnQgU0xQX1RZUCBiaXRzICovCisJLyogSW5zZXJ0IHRoZSBTTFBfVFlQIGJpdHMgKi8KIAotCVBNMUFjb250cm9sIHw9CisJcG0xYV9jb250cm9sIHw9CiAJICAgIChhY3BpX2dibF9zbGVlcF90eXBlX2EgPDwgc2xlZXBfdHlwZV9yZWdfaW5mby0+Yml0X3Bvc2l0aW9uKTsKLQlQTTFCY29udHJvbCB8PQorCXBtMWJfY29udHJvbCB8PQogCSAgICAoYWNwaV9nYmxfc2xlZXBfdHlwZV9iIDw8IHNsZWVwX3R5cGVfcmVnX2luZm8tPmJpdF9wb3NpdGlvbik7CiAKIAkvKgpAQCAtMzE0LDM3ICszMTgsMjUgQEAKIAkgKiBwb29ybHkgaW1wbGVtZW50ZWQgaGFyZHdhcmUuCiAJICovCiAKLQkvKiBXcml0ZSAjMTogZmlsbCBpbiBTTFBfVFlQIGRhdGEgKi8KKwkvKiBXcml0ZSAjMTogd3JpdGUgdGhlIFNMUF9UWVAgZGF0YSB0byB0aGUgUE0xIENvbnRyb2wgcmVnaXN0ZXJzICovCiAKLQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xQV9DT05UUk9MLAotCQkJCQlQTTFBY29udHJvbCk7CisJc3RhdHVzID0gYWNwaV9od193cml0ZV9wbTFfY29udHJvbChwbTFhX2NvbnRyb2wsIHBtMWJfY29udHJvbCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9SRUdJU1RFUl9QTTFCX0NPTlRST0wsCi0JCQkJCVBNMUJjb250cm9sKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Ci0JfQorCS8qIEluc2VydCB0aGUgc2xlZXAgZW5hYmxlIChTTFBfRU4pIGJpdCAqLwogCi0JLyogSW5zZXJ0IFNMUF9FTkFCTEUgYml0ICovCisJcG0xYV9jb250cm9sIHw9IHNsZWVwX2VuYWJsZV9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrOworCXBtMWJfY29udHJvbCB8PSBzbGVlcF9lbmFibGVfcmVnX2luZm8tPmFjY2Vzc19iaXRfbWFzazsKIAotCVBNMUFjb250cm9sIHw9IHNsZWVwX2VuYWJsZV9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrOwotCVBNMUJjb250cm9sIHw9IHNsZWVwX2VuYWJsZV9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrOwotCi0JLyogV3JpdGUgIzI6IFNMUF9UWVAgKyBTTFBfRU4gKi8KKwkvKiBGbHVzaCBjYWNoZXMsIGFzIHBlciBBQ1BJIHNwZWNpZmljYXRpb24gKi8KIAogCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7CiAKLQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xQV9DT05UUk9MLAotCQkJCQlQTTFBY29udHJvbCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KKwkvKiBXcml0ZSAjMjogV3JpdGUgYm90aCBTTFBfVFlQICsgU0xQX0VOICovCiAKLQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xQl9DT05UUk9MLAotCQkJCQlQTTFCY29udHJvbCk7CisJc3RhdHVzID0gYWNwaV9od193cml0ZV9wbTFfY29udHJvbChwbTFhX2NvbnRyb2wsIHBtMWJfY29udHJvbCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KQEAgLTM1Nyw4ICszNDksOCBAQAogCQkgKiBXYWl0IHRlbiBzZWNvbmRzLCB0aGVuIHRyeSBhZ2Fpbi4gVGhpcyBpcyB0byBnZXQgUzQvUzUgdG8gd29yayBvbgogCQkgKiBhbGwgbWFjaGluZXMuCiAJCSAqCi0JCSAqIFdlIHdhaXQgc28gbG9uZyB0byBhbGxvdyBjaGlwc2V0cyB0aGF0IHBvbGwgdGhpcyByZWcgdmVyeSBzbG93bHkgdG8KLQkJICogc3RpbGwgcmVhZCB0aGUgcmlnaHQgdmFsdWUuIElkZWFsbHksIHRoaXMgYmxvY2sgd291bGQgZ28KKwkJICogV2Ugd2FpdCBzbyBsb25nIHRvIGFsbG93IGNoaXBzZXRzIHRoYXQgcG9sbCB0aGlzIHJlZyB2ZXJ5IHNsb3dseQorCQkgKiB0byBzdGlsbCByZWFkIHRoZSByaWdodCB2YWx1ZS4gSWRlYWxseSwgdGhpcyBibG9jayB3b3VsZCBnbwogCQkgKiBhd2F5IGVudGlyZWx5LgogCQkgKi8KIAkJYWNwaV9vc19zdGFsbCgxMDAwMDAwMCk7CkBAIC0zNzQsNyArMzY2LDcgQEAKIAkvKiBXYWl0IHVudGlsIHdlIGVudGVyIHNsZWVwIHN0YXRlICovCiAKIAlkbyB7Ci0JCXN0YXR1cyA9IGFjcGlfZ2V0X3JlZ2lzdGVyX3VubG9ja2VkKEFDUElfQklUUkVHX1dBS0VfU1RBVFVTLAorCQlzdGF0dXMgPSBhY3BpX3JlYWRfYml0X3JlZ2lzdGVyKEFDUElfQklUUkVHX1dBS0VfU1RBVFVTLAogCQkJCQkJICAgICZpbl92YWx1ZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC00MDgsNyArNDAwLDEwIEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGFjcGlfZW50ZXJfc2xlZXBfc3RhdGVfczRiaW9zKTsKIAotCXN0YXR1cyA9IGFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX1dBS0VfU1RBVFVTLCAxKTsKKwkvKiBDbGVhciB0aGUgd2FrZSBzdGF0dXMgYml0IChQTTEpICovCisKKwlzdGF0dXMgPQorCSAgICBhY3BpX3dyaXRlX2JpdF9yZWdpc3RlcihBQ1BJX0JJVFJFR19XQUtFX1NUQVRVUywgQUNQSV9DTEVBUl9TVEFUVVMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC00MzUsMTIgKzQzMCwxMyBAQAogCiAJQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKTsKIAotCXN0YXR1cyA9IGFjcGlfb3Nfd3JpdGVfcG9ydChhY3BpX2dibF9GQURULnNtaV9jb21tYW5kLAorCXN0YXR1cyA9IGFjcGlfaHdfd3JpdGVfcG9ydChhY3BpX2dibF9GQURULnNtaV9jb21tYW5kLAogCQkJCSAgICAodTMyKSBhY3BpX2dibF9GQURULlM0Ymlvc19yZXF1ZXN0LCA4KTsKIAogCWRvIHsKIAkJYWNwaV9vc19zdGFsbCgxMDAwKTsKLQkJc3RhdHVzID0gYWNwaV9nZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfV0FLRV9TVEFUVVMsICZpbl92YWx1ZSk7CisJCXN0YXR1cyA9CisJCSAgICBhY3BpX3JlYWRfYml0X3JlZ2lzdGVyKEFDUElfQklUUkVHX1dBS0VfU1RBVFVTLCAmaW5fdmFsdWUpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCQl9CkBAIC00NzEsOCArNDY3LDggQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKnNsZWVwX3R5cGVfcmVnX2luZm87CiAJc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKnNsZWVwX2VuYWJsZV9yZWdfaW5mbzsKLQl1MzIgUE0xQWNvbnRyb2w7Ci0JdTMyIFBNMUJjb250cm9sOworCXUzMiBwbTFhX2NvbnRyb2w7CisJdTMyIHBtMWJfY29udHJvbDsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9sZWF2ZV9zbGVlcF9zdGF0ZV9wcmVwKTsKIApAQCAtNDg2LDM4ICs0ODIsMzQgQEAKIAkJCQkJICAmYWNwaV9nYmxfc2xlZXBfdHlwZV9iKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKIAkJc2xlZXBfdHlwZV9yZWdfaW5mbyA9Ci0JCSAgICBhY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyhBQ1BJX0JJVFJFR19TTEVFUF9UWVBFX0EpOworCQkgICAgYWNwaV9od19nZXRfYml0X3JlZ2lzdGVyX2luZm8oQUNQSV9CSVRSRUdfU0xFRVBfVFlQRSk7CiAJCXNsZWVwX2VuYWJsZV9yZWdfaW5mbyA9CiAJCSAgICBhY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyhBQ1BJX0JJVFJFR19TTEVFUF9FTkFCTEUpOwogCiAJCS8qIEdldCBjdXJyZW50IHZhbHVlIG9mIFBNMUEgY29udHJvbCAqLwogCiAJCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLAotCQkJCQkgICAgICAgJlBNMUFjb250cm9sKTsKKwkJCQkJICAgICAgICZwbTFhX2NvbnRyb2wpOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKIAotCQkJLyogQ2xlYXIgU0xQX0VOIGFuZCBTTFBfVFlQIGZpZWxkcyAqLworCQkJLyogQ2xlYXIgdGhlIFNMUF9FTiBhbmQgU0xQX1RZUCBmaWVsZHMgKi8KIAotCQkJUE0xQWNvbnRyb2wgJj0gfihzbGVlcF90eXBlX3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2sgfAotCQkJCQkgc2xlZXBfZW5hYmxlX3JlZ19pbmZvLT4KLQkJCQkJIGFjY2Vzc19iaXRfbWFzayk7Ci0JCQlQTTFCY29udHJvbCA9IFBNMUFjb250cm9sOworCQkJcG0xYV9jb250cm9sICY9IH4oc2xlZXBfdHlwZV9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrIHwKKwkJCQkJICBzbGVlcF9lbmFibGVfcmVnX2luZm8tPgorCQkJCQkgIGFjY2Vzc19iaXRfbWFzayk7CisJCQlwbTFiX2NvbnRyb2wgPSBwbTFhX2NvbnRyb2w7CiAKLQkJCS8qIEluc2VydCBTTFBfVFlQIGJpdHMgKi8KKwkJCS8qIEluc2VydCB0aGUgU0xQX1RZUCBiaXRzICovCiAKLQkJCVBNMUFjb250cm9sIHw9Ci0JCQkgICAgKGFjcGlfZ2JsX3NsZWVwX3R5cGVfYSA8PCBzbGVlcF90eXBlX3JlZ19pbmZvLT4KLQkJCSAgICAgYml0X3Bvc2l0aW9uKTsKLQkJCVBNMUJjb250cm9sIHw9Ci0JCQkgICAgKGFjcGlfZ2JsX3NsZWVwX3R5cGVfYiA8PCBzbGVlcF90eXBlX3JlZ19pbmZvLT4KLQkJCSAgICAgYml0X3Bvc2l0aW9uKTsKKwkJCXBtMWFfY29udHJvbCB8PSAoYWNwaV9nYmxfc2xlZXBfdHlwZV9hIDw8CisJCQkJCSBzbGVlcF90eXBlX3JlZ19pbmZvLT5iaXRfcG9zaXRpb24pOworCQkJcG0xYl9jb250cm9sIHw9IChhY3BpX2dibF9zbGVlcF90eXBlX2IgPDwKKwkJCQkJIHNsZWVwX3R5cGVfcmVnX2luZm8tPmJpdF9wb3NpdGlvbik7CiAKLQkJCS8qIEp1c3QgaWdub3JlIGFueSBlcnJvcnMgKi8KKwkJCS8qIFdyaXRlIHRoZSBjb250cm9sIHJlZ2lzdGVycyBhbmQgaWdub3JlIGFueSBlcnJvcnMgKi8KIAotCQkJKHZvaWQpYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX1JFR0lTVEVSX1BNMUFfQ09OVFJPTCwKLQkJCQkJCSAgICAgUE0xQWNvbnRyb2wpOwotCQkJKHZvaWQpYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX1JFR0lTVEVSX1BNMUJfQ09OVFJPTCwKLQkJCQkJCSAgICAgUE0xQmNvbnRyb2wpOworCQkJKHZvaWQpYWNwaV9od193cml0ZV9wbTFfY29udHJvbChwbTFhX2NvbnRyb2wsCisJCQkJCQkJcG0xYl9jb250cm9sKTsKIAkJfQogCX0KIApAQCAtNjAzLDE5ICs1OTUsMjEgQEAKIAkgKiBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgc3lzdGVtIGlzIHJlYm9vdGluZyBvciByZXN1bWluZy4gQ2xlYXIKIAkgKiBpdCBmb3IgY29tcGF0aWJpbGl0eS4KIAkgKi8KLQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19XQUtFX1NUQVRVUywgMSk7CisJYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfV0FLRV9TVEFUVVMsIDEpOwogCiAJYWNwaV9nYmxfc3lzdGVtX2F3YWtlX2FuZF9ydW5uaW5nID0gVFJVRTsKIAogCS8qIEVuYWJsZSBwb3dlciBidXR0b24gKi8KIAogCSh2b2lkKQotCSAgICBhY3BpX3NldF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvCi0JCQkgICAgICBbQUNQSV9FVkVOVF9QT1dFUl9CVVRUT05dLmVuYWJsZV9yZWdpc3Rlcl9pZCwgMSk7CisJICAgIGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm8KKwkJCSAgICAgIFtBQ1BJX0VWRU5UX1BPV0VSX0JVVFRPTl0uCisJCQkgICAgICBlbmFibGVfcmVnaXN0ZXJfaWQsIEFDUElfRU5BQkxFX0VWRU5UKTsKIAogCSh2b2lkKQotCSAgICBhY3BpX3NldF9yZWdpc3RlcihhY3BpX2dibF9maXhlZF9ldmVudF9pbmZvCi0JCQkgICAgICBbQUNQSV9FVkVOVF9QT1dFUl9CVVRUT05dLnN0YXR1c19yZWdpc3Rlcl9pZCwgMSk7CisJICAgIGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKGFjcGlfZ2JsX2ZpeGVkX2V2ZW50X2luZm8KKwkJCSAgICAgIFtBQ1BJX0VWRU5UX1BPV0VSX0JVVFRPTl0uCisJCQkgICAgICBzdGF0dXNfcmVnaXN0ZXJfaWQsIEFDUElfQ0xFQVJfU1RBVFVTKTsKIAogCWFyZy5pbnRlZ2VyLnZhbHVlID0gQUNQSV9TU1RfV09SS0lORzsKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChOVUxMLCBNRVRIT0RfTkFNRV9fU1NULCAmYXJnX2xpc3QsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3ZhbGlkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3dmFsaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNjOTM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3ZhbGlkLmMKQEAgLTAsMCArMSwyNTggQEAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIE1vZHVsZSBOYW1lOiBod3ZhbGlkIC0gSS9PIHJlcXVlc3QgdmFsaWRhdGlvbgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDksIEludGVsIENvcnAuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgorI2luY2x1ZGUgImFjY29tbW9uLmgiCisKKyNkZWZpbmUgX0NPTVBPTkVOVCAgICAgICAgICBBQ1BJX0hBUkRXQVJFCitBQ1BJX01PRFVMRV9OQU1FKCJod3ZhbGlkIikKKworLyogTG9jYWwgcHJvdG90eXBlcyAqLworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2h3X3ZhbGlkYXRlX2lvX3JlcXVlc3QoYWNwaV9pb19hZGRyZXNzIGFkZHJlc3MsIHUzMiBiaXRfd2lkdGgpOworCisvKgorICogUHJvdGVjdGVkIEkvTyBwb3J0cy4gU29tZSBwb3J0cyBhcmUgYWx3YXlzIGlsbGVnYWwsIGFuZCBzb21lIGFyZQorICogY29uZGl0aW9uYWxseSBpbGxlZ2FsLiBUaGlzIHRhYmxlIG11c3QgcmVtYWluIG9yZGVyZWQgYnkgcG9ydCBhZGRyZXNzLgorICoKKyAqIFRoZSB0YWJsZSBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgTWljcm9zb2Z0IHBvcnQgYWNjZXNzIHJ1bGVzIHRoYXQKKyAqIGZpcnN0IGFwcGVhcmVkIGluIFdpbmRvd3MgWFAuIFNvbWUgcG9ydHMgYXJlIGFsd2F5cyBpbGxlZ2FsLCBhbmQgc29tZQorICogcG9ydHMgYXJlIG9ubHkgaWxsZWdhbCBpZiB0aGUgQklPUyBjYWxscyBfT1NJIHdpdGggYSB3aW5feFAgc3RyaW5nIG9yCisgKiBsYXRlciAobWVhbmluZyB0aGF0IHRoZSBCSU9TIGl0ZWxmIGlzIHBvc3QtWFAuKQorICoKKyAqIFRoaXMgcHJvdmlkZXMgQUNQSUNBIHdpdGggdGhlIGRlc2lyZWQgcG9ydCBwcm90ZWN0aW9ucyBhbmQKKyAqIE1pY3Jvc29mdCBjb21wYXRpYmlsaXR5LgorICoKKyAqIERlc2NyaXB0aW9uIG9mIHBvcnQgZW50cmllczoKKyAqICBETUE6ICAgRE1BIGNvbnRyb2xsZXIKKyAqICBQSUMwOiAgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyICg4MjU5X2EpCisgKiAgUElUMTogIFN5c3RlbSBUaW1lciAxCisgKiAgUElUMjogIFN5c3RlbSBUaW1lciAyIGZhaWxzYWZlCisgKiAgUlRDOiAgIFJlYWwtdGltZSBjbG9jaworICogIENNT1M6ICBFeHRlbmRlZCBDTU9TCisgKiAgRE1BMTogIERNQSAxIHBhZ2UgcmVnaXN0ZXJzCisgKiAgRE1BMUw6IERNQSAxIENoIDAgbG93IHBhZ2UKKyAqICBETUEyOiAgRE1BIDIgcGFnZSByZWdpc3RlcnMKKyAqICBETUEyTDogRE1BIDIgbG93IHBhZ2UgcmVmcmVzaAorICogIEFSQkM6ICBBcmJpdHJhdGlvbiBjb250cm9sCisgKiAgU0VUVVA6IFJlc2VydmVkIHN5c3RlbSBib2FyZCBzZXR1cAorICogIFBPUzogICBQT1MgY2hhbm5lbCBzZWxlY3QKKyAqICBQSUMxOiAgQ2FzY2FkZWQgUElDCisgKiAgSURNQTogIElTQSBETUEKKyAqICBFTENSOiAgUElDIGVkZ2UvbGV2ZWwgcmVnaXN0ZXJzCisgKiAgUENJOiAgIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9wb3J0X2luZm8gYWNwaV9wcm90ZWN0ZWRfcG9ydHNbXSA9IHsKKwl7IkRNQSIsIDB4MDAwMCwgMHgwMDBGLCBBQ1BJX09TSV9XSU5fWFB9LAorCXsiUElDMCIsIDB4MDAyMCwgMHgwMDIxLCBBQ1BJX0FMV0FZU19JTExFR0FMfSwKKwl7IlBJVDEiLCAweDAwNDAsIDB4MDA0MywgQUNQSV9PU0lfV0lOX1hQfSwKKwl7IlBJVDIiLCAweDAwNDgsIDB4MDA0QiwgQUNQSV9PU0lfV0lOX1hQfSwKKwl7IlJUQyIsIDB4MDA3MCwgMHgwMDcxLCBBQ1BJX09TSV9XSU5fWFB9LAorCXsiQ01PUyIsIDB4MDA3NCwgMHgwMDc2LCBBQ1BJX09TSV9XSU5fWFB9LAorCXsiRE1BMSIsIDB4MDA4MSwgMHgwMDgzLCBBQ1BJX09TSV9XSU5fWFB9LAorCXsiRE1BMUwiLCAweDAwODcsIDB4MDA4NywgQUNQSV9PU0lfV0lOX1hQfSwKKwl7IkRNQTIiLCAweDAwODksIDB4MDA4QiwgQUNQSV9PU0lfV0lOX1hQfSwKKwl7IkRNQTJMIiwgMHgwMDhGLCAweDAwOEYsIEFDUElfT1NJX1dJTl9YUH0sCisJeyJBUkJDIiwgMHgwMDkwLCAweDAwOTEsIEFDUElfT1NJX1dJTl9YUH0sCisJeyJTRVRVUCIsIDB4MDA5MywgMHgwMDk0LCBBQ1BJX09TSV9XSU5fWFB9LAorCXsiUE9TIiwgMHgwMDk2LCAweDAwOTcsIEFDUElfT1NJX1dJTl9YUH0sCisJeyJQSUMxIiwgMHgwMEEwLCAweDAwQTEsIEFDUElfQUxXQVlTX0lMTEVHQUx9LAorCXsiSURNQSIsIDB4MDBDMCwgMHgwMERGLCBBQ1BJX09TSV9XSU5fWFB9LAorCXsiRUxDUiIsIDB4MDREMCwgMHgwNEQxLCBBQ1BJX0FMV0FZU19JTExFR0FMfSwKKwl7IlBDSSIsIDB4MENGOCwgMHgwQ0ZGLCBBQ1BJX09TSV9XSU5fWFB9Cit9OworCisjZGVmaW5lIEFDUElfUE9SVF9JTkZPX0VOVFJJRVMgIEFDUElfQVJSQVlfTEVOR1RIIChhY3BpX3Byb3RlY3RlZF9wb3J0cykKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2h3X3ZhbGlkYXRlX2lvX3JlcXVlc3QKKyAqCisgKiBQQVJBTUVURVJTOiAgQWRkcmVzcyAgICAgICAgICAgICBBZGRyZXNzIG9mIEkvTyBwb3J0L3JlZ2lzdGVyCisgKiAgICAgICAgICAgICAgYml0X3dpZHRoICAgICAgICAgICBOdW1iZXIgb2YgYml0cyAoOCwxNiwzMikKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IFZhbGlkYXRlcyBhbiBJL08gcmVxdWVzdCAoYWRkcmVzcy9sZW5ndGgpLiBDZXJ0YWluIHBvcnRzIGFyZQorICogICAgICAgICAgICAgIGFsd2F5cyBpbGxlZ2FsIGFuZCBzb21lIHBvcnRzIGFyZSBvbmx5IGlsbGVnYWwgZGVwZW5kaW5nIG9uCisgKiAgICAgICAgICAgICAgdGhlIHJlcXVlc3RzIHRoZSBCSU9TIEFNTCBjb2RlIG1ha2VzIHRvIHRoZSBwcmVkZWZpbmVkCisgKiAgICAgICAgICAgICAgX09TSSBtZXRob2QuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2h3X3ZhbGlkYXRlX2lvX3JlcXVlc3QoYWNwaV9pb19hZGRyZXNzIGFkZHJlc3MsIHUzMiBiaXRfd2lkdGgpCit7CisJdTMyIGk7CisJdTMyIGJ5dGVfd2lkdGg7CisJYWNwaV9pb19hZGRyZXNzIGxhc3RfYWRkcmVzczsKKwljb25zdCBzdHJ1Y3QgYWNwaV9wb3J0X2luZm8gKnBvcnRfaW5mbzsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UoaHdfdmFsaWRhdGVfaW9fcmVxdWVzdCk7CisKKwkvKiBTdXBwb3J0ZWQgd2lkdGhzIGFyZSA4LzE2LzMyICovCisKKwlpZiAoKGJpdF93aWR0aCAhPSA4KSAmJiAoYml0X3dpZHRoICE9IDE2KSAmJiAoYml0X3dpZHRoICE9IDMyKSkgeworCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKKwl9CisKKwlwb3J0X2luZm8gPSBhY3BpX3Byb3RlY3RlZF9wb3J0czsKKwlieXRlX3dpZHRoID0gQUNQSV9ESVZfOChiaXRfd2lkdGgpOworCWxhc3RfYWRkcmVzcyA9IGFkZHJlc3MgKyBieXRlX3dpZHRoIC0gMTsKKworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU8sICJBZGRyZXNzICVwIExhc3RBZGRyZXNzICVwIExlbmd0aCAlWCIsCisJCQkgIEFDUElfQ0FTVF9QVFIodm9pZCwgYWRkcmVzcyksIEFDUElfQ0FTVF9QVFIodm9pZCwKKwkJCQkJCQkJICAgICAgbGFzdF9hZGRyZXNzKSwKKwkJCSAgYnl0ZV93aWR0aCkpOworCisJLyogTWF4aW11bSAxNi1iaXQgYWRkcmVzcyBpbiBJL08gc3BhY2UgKi8KKworCWlmIChsYXN0X2FkZHJlc3MgPiBBQ1BJX1VJTlQxNl9NQVgpIHsKKwkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCSAgICAiSWxsZWdhbCBJL08gcG9ydCBhZGRyZXNzL2xlbmd0aCBhYm92ZSA2NEs6IDB4JXAvJVgiLAorCQkJICAgIEFDUElfQ0FTVF9QVFIodm9pZCwgYWRkcmVzcyksIGJ5dGVfd2lkdGgpKTsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0FNTF9JTExFR0FMX0FERFJFU1MpOworCX0KKworCS8qIEV4aXQgaWYgcmVxdWVzdGVkIGFkZHJlc3MgaXMgbm90IHdpdGhpbiB0aGUgcHJvdGVjdGVkIHBvcnQgdGFibGUgKi8KKworCWlmIChhZGRyZXNzID4gYWNwaV9wcm90ZWN0ZWRfcG9ydHNbQUNQSV9QT1JUX0lORk9fRU5UUklFUyAtIDFdLmVuZCkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCX0KKworCS8qIENoZWNrIHJlcXVlc3QgYWdhaW5zdCB0aGUgbGlzdCBvZiBwcm90ZWN0ZWQgSS9PIHBvcnRzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgQUNQSV9QT1JUX0lORk9fRU5UUklFUzsgaSsrLCBwb3J0X2luZm8rKykgeworCQkvKgorCQkgKiBDaGVjayBpZiB0aGUgcmVxdWVzdGVkIGFkZHJlc3MgcmFuZ2Ugd2lsbCB3cml0ZSB0byBhIHJlc2VydmVkCisJCSAqIHBvcnQuIEZvdXIgY2FzZXMgdG8gY29uc2lkZXI6CisJCSAqCisJCSAqIDEpIEFkZHJlc3MgcmFuZ2UgaXMgY29udGFpbmVkIGNvbXBsZXRlbHkgaW4gdGhlIHBvcnQgYWRkcmVzcyByYW5nZQorCQkgKiAyKSBBZGRyZXNzIHJhbmdlIG92ZXJsYXBzIHBvcnQgcmFuZ2UgYXQgdGhlIHBvcnQgcmFuZ2Ugc3RhcnQKKwkJICogMykgQWRkcmVzcyByYW5nZSBvdmVybGFwcyBwb3J0IHJhbmdlIGF0IHRoZSBwb3J0IHJhbmdlIGVuZAorCQkgKiA0KSBBZGRyZXNzIHJhbmdlIGNvbXBsZXRlbHkgZW5jb21wYXNzZXMgdGhlIHBvcnQgcmFuZ2UKKwkJICovCisJCWlmICgoYWRkcmVzcyA8PSBwb3J0X2luZm8tPmVuZCkKKwkJICAgICYmIChsYXN0X2FkZHJlc3MgPj0gcG9ydF9pbmZvLT5zdGFydCkpIHsKKworCQkJLyogUG9ydCBpbGxlZ2FsaXR5IG1heSBkZXBlbmQgb24gdGhlIF9PU0kgY2FsbHMgbWFkZSBieSB0aGUgQklPUyAqLworCisJCQlpZiAoYWNwaV9nYmxfb3NpX2RhdGEgPj0gcG9ydF9pbmZvLT5vc2lfZGVwZW5kZW5jeSkgeworCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCisJCQkJCSAgICAiRGVuaWVkIEFNTCBhY2Nlc3MgdG8gcG9ydCAweCVwLyVYICglcyAweCUuNFgtMHglLjRYKSIsCisJCQkJCSAgICBBQ1BJX0NBU1RfUFRSKHZvaWQsIGFkZHJlc3MpLAorCQkJCQkgICAgYnl0ZV93aWR0aCwgcG9ydF9pbmZvLT5uYW1lLAorCQkJCQkgICAgcG9ydF9pbmZvLT5zdGFydCwgcG9ydF9pbmZvLT5lbmQpKTsKKworCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9BTUxfSUxMRUdBTF9BRERSRVNTKTsKKwkJCX0KKwkJfQorCisJCS8qIEZpbmlzaGVkIGlmIGFkZHJlc3MgcmFuZ2UgZW5kcyBiZWZvcmUgdGhlIGVuZCBvZiB0aGlzIHBvcnQgKi8KKworCQlpZiAobGFzdF9hZGRyZXNzIDw9IHBvcnRfaW5mby0+ZW5kKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9od19yZWFkX3BvcnQKKyAqCisgKiBQQVJBTUVURVJTOiAgQWRkcmVzcyAgICAgICAgICAgICBBZGRyZXNzIG9mIEkvTyBwb3J0L3JlZ2lzdGVyIHRvIHJlYWQKKyAqICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgIFdoZXJlIHZhbHVlIGlzIHBsYWNlZAorICogICAgICAgICAgICAgIFdpZHRoICAgICAgICAgICAgICAgTnVtYmVyIG9mIGJpdHMKKyAqCisgKiBSRVRVUk46ICAgICAgVmFsdWUgcmVhZCBmcm9tIHBvcnQKKyAqCisgKiBERVNDUklQVElPTjogUmVhZCBkYXRhIGZyb20gYW4gSS9PIHBvcnQgb3IgcmVnaXN0ZXIuIFRoaXMgaXMgYSBmcm9udC1lbmQKKyAqICAgICAgICAgICAgICB0byBhY3BpX29zX3JlYWRfcG9ydCB0aGF0IHBlcmZvcm1zIHZhbGlkYXRpb24gb24gYm90aCB0aGUgcG9ydAorICogICAgICAgICAgICAgIGFkZHJlc3MgYW5kIHRoZSBsZW5ndGguCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cyBhY3BpX2h3X3JlYWRfcG9ydChhY3BpX2lvX2FkZHJlc3MgYWRkcmVzcywgdTMyICp2YWx1ZSwgdTMyIHdpZHRoKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IGFjcGlfaHdfdmFsaWRhdGVfaW9fcmVxdWVzdChhZGRyZXNzLCB3aWR0aCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJc3RhdHVzID0gYWNwaV9vc19yZWFkX3BvcnQoYWRkcmVzcywgdmFsdWUsIHdpZHRoKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfaHdfd3JpdGVfcG9ydAorICoKKyAqIFBBUkFNRVRFUlM6ICBBZGRyZXNzICAgICAgICAgICAgIEFkZHJlc3Mgb2YgSS9PIHBvcnQvcmVnaXN0ZXIgdG8gd3JpdGUKKyAqICAgICAgICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgIFZhbHVlIHRvIHdyaXRlCisgKiAgICAgICAgICAgICAgV2lkdGggICAgICAgICAgICAgICBOdW1iZXIgb2YgYml0cworICoKKyAqIFJFVFVSTjogICAgICBOb25lCisgKgorICogREVTQ1JJUFRJT046IFdyaXRlIGRhdGEgdG8gYW4gSS9PIHBvcnQgb3IgcmVnaXN0ZXIuIFRoaXMgaXMgYSBmcm9udC1lbmQKKyAqICAgICAgICAgICAgICB0byBhY3BpX29zX3dyaXRlX3BvcnQgdGhhdCBwZXJmb3JtcyB2YWxpZGF0aW9uIG9uIGJvdGggdGhlIHBvcnQKKyAqICAgICAgICAgICAgICBhZGRyZXNzIGFuZCB0aGUgbGVuZ3RoLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMgYWNwaV9od193cml0ZV9wb3J0KGFjcGlfaW9fYWRkcmVzcyBhZGRyZXNzLCB1MzIgdmFsdWUsIHUzMiB3aWR0aCkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX2h3X3ZhbGlkYXRlX2lvX3JlcXVlc3QoYWRkcmVzcywgd2lkdGgpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXN0YXR1cyA9IGFjcGlfb3Nfd3JpdGVfcG9ydChhZGRyZXNzLCB2YWx1ZSwgd2lkdGgpOworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCmluZGV4IGFlNTk3YzAuLjk4Mjk5NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCkBAIC0xMDcsMTkgKzEwNywxOCBAQAogCUFDUElfRlVOQ1RJT05fTkFNRShhY3BpX3JlYWQpOwogCiAJLyoKLQkgKiBNdXN0IGhhdmUgYSB2YWxpZCBwb2ludGVyIHRvIGEgR0FTIHN0cnVjdHVyZSwgYW5kCi0JICogYSBub24temVybyBhZGRyZXNzIHdpdGhpbi4gSG93ZXZlciwgZG9uJ3QgcmV0dXJuIGFuIGVycm9yCi0JICogYmVjYXVzZSB0aGUgUE0xQS9CIGNvZGUgbXVzdCBub3QgZmFpbCBpZiBCIGlzbid0IHByZXNlbnQuCisJICogTXVzdCBoYXZlIGEgdmFsaWQgcG9pbnRlciB0byBhIEdBUyBzdHJ1Y3R1cmUsIGFuZCBhIG5vbi16ZXJvIGFkZHJlc3MKKwkgKiB3aXRoaW4uCiAJICovCiAJaWYgKCFyZWcpIHsKLQkJcmV0dXJuIChBRV9PSyk7CisJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCiAJLyogR2V0IGEgbG9jYWwgY29weSBvZiB0aGUgYWRkcmVzcy4gSGFuZGxlcyBwb3NzaWJsZSBhbGlnbm1lbnQgaXNzdWVzICovCiAKIAlBQ1BJX01PVkVfNjRfVE9fNjQoJmFkZHJlc3MsICZyZWctPmFkZHJlc3MpOwogCWlmICghYWRkcmVzcykgewotCQlyZXR1cm4gKEFFX09LKTsKKwkJcmV0dXJuIChBRV9CQURfQUREUkVTUyk7CiAJfQogCiAJLyogU3VwcG9ydGVkIHdpZHRocyBhcmUgOC8xNi8zMiAqLwpAQCAtMTM0LDggKzEzMyw4IEBACiAJKnZhbHVlID0gMDsKIAogCS8qCi0JICogVHdvIGFkZHJlc3Mgc3BhY2VzIHN1cHBvcnRlZDogTWVtb3J5IG9yIElPLgotCSAqIFBDSV9Db25maWcgaXMgbm90IHN1cHBvcnRlZCBoZXJlIGJlY2F1c2UgdGhlIEdBUyBzdHJ1Y3QgaXMgaW5zdWZmaWNpZW50CisJICogVHdvIGFkZHJlc3Mgc3BhY2VzIHN1cHBvcnRlZDogTWVtb3J5IG9yIElPLiBQQ0lfQ29uZmlnIGlzCisJICogbm90IHN1cHBvcnRlZCBoZXJlIGJlY2F1c2UgdGhlIEdBUyBzdHJ1Y3R1cmUgaXMgaW5zdWZmaWNpZW50CiAJICovCiAJc3dpdGNoIChyZWctPnNwYWNlX2lkKSB7CiAJY2FzZSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fTUVNT1JZOgpAQCAtMTQ3LDcgKzE0Niw3IEBACiAJY2FzZSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU86CiAKIAkJc3RhdHVzID0KLQkJICAgIGFjcGlfb3NfcmVhZF9wb3J0KChhY3BpX2lvX2FkZHJlc3MpIGFkZHJlc3MsIHZhbHVlLCB3aWR0aCk7CisJCSAgICBhY3BpX2h3X3JlYWRfcG9ydCgoYWNwaV9pb19hZGRyZXNzKSBhZGRyZXNzLCB2YWx1ZSwgd2lkdGgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xODcsMTkgKzE4NiwxOCBAQAogCUFDUElfRlVOQ1RJT05fTkFNRShhY3BpX3dyaXRlKTsKIAogCS8qCi0JICogTXVzdCBoYXZlIGEgdmFsaWQgcG9pbnRlciB0byBhIEdBUyBzdHJ1Y3R1cmUsIGFuZAotCSAqIGEgbm9uLXplcm8gYWRkcmVzcyB3aXRoaW4uIEhvd2V2ZXIsIGRvbid0IHJldHVybiBhbiBlcnJvcgotCSAqIGJlY2F1c2UgdGhlIFBNMUEvQiBjb2RlIG11c3Qgbm90IGZhaWwgaWYgQiBpc24ndCBwcmVzZW50LgorCSAqIE11c3QgaGF2ZSBhIHZhbGlkIHBvaW50ZXIgdG8gYSBHQVMgc3RydWN0dXJlLCBhbmQgYSBub24temVybyBhZGRyZXNzCisJICogd2l0aGluLgogCSAqLwogCWlmICghcmVnKSB7Ci0JCXJldHVybiAoQUVfT0spOworCQlyZXR1cm4gKEFFX0JBRF9QQVJBTUVURVIpOwogCX0KIAogCS8qIEdldCBhIGxvY2FsIGNvcHkgb2YgdGhlIGFkZHJlc3MuIEhhbmRsZXMgcG9zc2libGUgYWxpZ25tZW50IGlzc3VlcyAqLwogCiAJQUNQSV9NT1ZFXzY0X1RPXzY0KCZhZGRyZXNzLCAmcmVnLT5hZGRyZXNzKTsKIAlpZiAoIWFkZHJlc3MpIHsKLQkJcmV0dXJuIChBRV9PSyk7CisJCXJldHVybiAoQUVfQkFEX0FERFJFU1MpOwogCX0KIAogCS8qIFN1cHBvcnRlZCB3aWR0aHMgYXJlIDgvMTYvMzIgKi8KQEAgLTIyMiw3ICsyMjAsNyBAQAogCiAJY2FzZSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fSU86CiAKLQkJc3RhdHVzID0gYWNwaV9vc193cml0ZV9wb3J0KChhY3BpX2lvX2FkZHJlc3MpIGFkZHJlc3MsIHZhbHVlLAorCQlzdGF0dXMgPSBhY3BpX2h3X3dyaXRlX3BvcnQoKGFjcGlfaW9fYWRkcmVzcykgYWRkcmVzcywgdmFsdWUsCiAJCQkJCSAgICB3aWR0aCk7CiAJCWJyZWFrOwogCkBAIC0yNDQsMjQgKzI0MiwzNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2dldF9yZWdpc3Rlcl91bmxvY2tlZAorICogRlVOQ1RJT046ICAgIGFjcGlfcmVhZF9iaXRfcmVnaXN0ZXIKICAqCi0gKiBQQVJBTUVURVJTOiAgcmVnaXN0ZXJfaWQgICAgIC0gSUQgb2YgQUNQSSBiaXRfcmVnaXN0ZXIgdG8gYWNjZXNzCi0gKiAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlICAgIC0gVmFsdWUgdGhhdCB3YXMgcmVhZCBmcm9tIHRoZSByZWdpc3RlcgorICogUEFSQU1FVEVSUzogIHJlZ2lzdGVyX2lkICAgICAtIElEIG9mIEFDUEkgQml0IFJlZ2lzdGVyIHRvIGFjY2VzcworICogICAgICAgICAgICAgIHJldHVybl92YWx1ZSAgICAtIFZhbHVlIHRoYXQgd2FzIHJlYWQgZnJvbSB0aGUgcmVnaXN0ZXIsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZCB0byBiaXQgcG9zaXRpb24gemVyby4KICAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzIGFuZCB0aGUgdmFsdWUgcmVhZCBmcm9tIHNwZWNpZmllZCBSZWdpc3Rlci4gVmFsdWUKKyAqIFJFVFVSTjogICAgICBTdGF0dXMgYW5kIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIHNwZWNpZmllZCBSZWdpc3Rlci4gVmFsdWUKICAqICAgICAgICAgICAgICByZXR1cm5lZCBpcyBub3JtYWxpemVkIHRvIGJpdDAgKGlzIHNoaWZ0ZWQgYWxsIHRoZSB3YXkgcmlnaHQpCiAgKgogICogREVTQ1JJUFRJT046IEFDUEkgYml0X3JlZ2lzdGVyIHJlYWQgZnVuY3Rpb24uIERvZXMgbm90IGFjcXVpcmUgdGhlIEhXIGxvY2suCiAgKgorICogU1VQUE9SVFM6ICAgIEJpdCBmaWVsZHMgaW4gUE0xIFN0YXR1cywgUE0xIEVuYWJsZSwgUE0xIENvbnRyb2wsIGFuZAorICogICAgICAgICAgICAgIFBNMiBDb250cm9sLgorICoKKyAqIE5vdGU6IFRoZSBoYXJkd2FyZSBsb2NrIGlzIG5vdCByZXF1aXJlZCB3aGVuIHJlYWRpbmcgdGhlIEFDUEkgYml0IHJlZ2lzdGVycworICogICAgICAgc2luY2UgYWxtb3N0IGFsbCBvZiB0aGVtIGFyZSBzaW5nbGUgYml0IGFuZCBpdCBkb2VzIG5vdCBtYXR0ZXIgdGhhdAorICogICAgICAgdGhlIHBhcmVudCBoYXJkd2FyZSByZWdpc3RlciBjYW4gYmUgc3BsaXQgYWNyb3NzIHR3byBwaHlzaWNhbAorICogICAgICAgcmVnaXN0ZXJzLiBUaGUgb25seSBtdWx0aS1iaXQgZmllbGQgaXMgU0xQX1RZUCBpbiB0aGUgUE0xIGNvbnRyb2wKKyAqICAgICAgIHJlZ2lzdGVyLCBidXQgdGhpcyBmaWVsZCBkb2VzIG5vdCBjcm9zcyBhbiA4LWJpdCBib3VuZGFyeSAobm9yIGRvZXMKKyAqICAgICAgIGl0IG1ha2UgbXVjaCBzZW5zZSB0byBhY3R1YWxseSByZWFkIHRoaXMgZmllbGQuKQorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX2dldF9yZWdpc3Rlcl91bmxvY2tlZCh1MzIgcmVnaXN0ZXJfaWQsIHUzMiAqcmV0dXJuX3ZhbHVlKQorYWNwaV9zdGF0dXMgYWNwaV9yZWFkX2JpdF9yZWdpc3Rlcih1MzIgcmVnaXN0ZXJfaWQsIHUzMiAqcmV0dXJuX3ZhbHVlKQogewotCXUzMiByZWdpc3Rlcl92YWx1ZSA9IDA7CiAJc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKmJpdF9yZWdfaW5mbzsKKwl1MzIgcmVnaXN0ZXJfdmFsdWU7CisJdTMyIHZhbHVlOwogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9nZXRfcmVnaXN0ZXJfdW5sb2NrZWQpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKGFjcGlfcmVhZF9iaXRfcmVnaXN0ZXIsIHJlZ2lzdGVyX2lkKTsKIAogCS8qIEdldCB0aGUgaW5mbyBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byB0aGUgcmVxdWVzdGVkIEFDUEkgUmVnaXN0ZXIgKi8KIApAQCAtMjcwLDIwOSArMjgwLDEzMyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JLyogUmVhZCBmcm9tIHRoZSByZWdpc3RlciAqLworCS8qIFJlYWQgdGhlIGVudGlyZSBwYXJlbnQgcmVnaXN0ZXIgKi8KIAogCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChiaXRfcmVnX2luZm8tPnBhcmVudF9yZWdpc3RlciwKIAkJCQkgICAgICAgJnJlZ2lzdGVyX3ZhbHVlKTsKLQotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCi0JCS8qIE5vcm1hbGl6ZSB0aGUgdmFsdWUgdGhhdCB3YXMgcmVhZCAqLwotCi0JCXJlZ2lzdGVyX3ZhbHVlID0KLQkJICAgICgocmVnaXN0ZXJfdmFsdWUgJiBiaXRfcmVnX2luZm8tPmFjY2Vzc19iaXRfbWFzaykKLQkJICAgICA+PiBiaXRfcmVnX2luZm8tPmJpdF9wb3NpdGlvbik7Ci0KLQkJKnJldHVybl92YWx1ZSA9IHJlZ2lzdGVyX3ZhbHVlOwotCi0JCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU8sICJSZWFkIHZhbHVlICU4LjhYIHJlZ2lzdGVyICVYXG4iLAotCQkJCSAgcmVnaXN0ZXJfdmFsdWUsCi0JCQkJICBiaXRfcmVnX2luZm8tPnBhcmVudF9yZWdpc3RlcikpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKLQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKKwkvKiBOb3JtYWxpemUgdGhlIHZhbHVlIHRoYXQgd2FzIHJlYWQsIG1hc2sgb2ZmIG90aGVyIGJpdHMgKi8KKworCXZhbHVlID0gKChyZWdpc3Rlcl92YWx1ZSAmIGJpdF9yZWdfaW5mby0+YWNjZXNzX2JpdF9tYXNrKQorCQkgPj4gYml0X3JlZ19pbmZvLT5iaXRfcG9zaXRpb24pOworCisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywKKwkJCSAgIkJpdFJlZyAlWCwgUGFyZW50UmVnICVYLCBBY3R1YWwgJTguOFgsIFJldHVyblZhbHVlICU4LjhYXG4iLAorCQkJICByZWdpc3Rlcl9pZCwgYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIsCisJCQkgIHJlZ2lzdGVyX3ZhbHVlLCB2YWx1ZSkpOworCisJKnJldHVybl92YWx1ZSA9IHZhbHVlOworCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiB9CiAKLUFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9yZWdpc3Rlcl91bmxvY2tlZCkKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3JlYWRfYml0X3JlZ2lzdGVyKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2dldF9yZWdpc3RlcgorICogRlVOQ1RJT046ICAgIGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyCiAgKgotICogUEFSQU1FVEVSUzogIHJlZ2lzdGVyX2lkICAgICAtIElEIG9mIEFDUEkgYml0X3JlZ2lzdGVyIHRvIGFjY2VzcwotICogICAgICAgICAgICAgIHJldHVybl92YWx1ZSAgICAtIFZhbHVlIHRoYXQgd2FzIHJlYWQgZnJvbSB0aGUgcmVnaXN0ZXIKLSAqCi0gKiBSRVRVUk46ICAgICAgU3RhdHVzIGFuZCB0aGUgdmFsdWUgcmVhZCBmcm9tIHNwZWNpZmllZCBSZWdpc3Rlci4gVmFsdWUKLSAqICAgICAgICAgICAgICByZXR1cm5lZCBpcyBub3JtYWxpemVkIHRvIGJpdDAgKGlzIHNoaWZ0ZWQgYWxsIHRoZSB3YXkgcmlnaHQpCi0gKgotICogREVTQ1JJUFRJT046IEFDUEkgYml0X3JlZ2lzdGVyIHJlYWQgZnVuY3Rpb24uCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWFjcGlfc3RhdHVzIGFjcGlfZ2V0X3JlZ2lzdGVyKHUzMiByZWdpc3Rlcl9pZCwgdTMyICpyZXR1cm5fdmFsdWUpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwotCi0JZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrKTsKLQlzdGF0dXMgPSBhY3BpX2dldF9yZWdpc3Rlcl91bmxvY2tlZChyZWdpc3Rlcl9pZCwgcmV0dXJuX3ZhbHVlKTsKLQlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gKHN0YXR1cyk7Ci19Ci0KLUFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9yZWdpc3RlcikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV9zZXRfcmVnaXN0ZXIKLSAqCi0gKiBQQVJBTUVURVJTOiAgcmVnaXN0ZXJfaWQgICAgIC0gSUQgb2YgQUNQSSBiaXRfcmVnaXN0ZXIgdG8gYWNjZXNzCi0gKiAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgIC0gKG9ubHkgdXNlZCBvbiB3cml0ZSkgdmFsdWUgdG8gd3JpdGUgdG8gdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIsIE5PVCBwcmUtbm9ybWFsaXplZCB0byB0aGUgYml0IHBvcworICogUEFSQU1FVEVSUzogIHJlZ2lzdGVyX2lkICAgICAtIElEIG9mIEFDUEkgQml0IFJlZ2lzdGVyIHRvIGFjY2VzcworICogICAgICAgICAgICAgIFZhbHVlICAgICAgICAgICAtIFZhbHVlIHRvIHdyaXRlIHRvIHRoZSByZWdpc3RlciwgaW4gYml0CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gemVyby4gVGhlIGJpdCBpcyBhdXRvbWF0aWNhbGxseQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0ZWQgdG8gdGhlIGNvcnJlY3QgcG9zaXRpb24uCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBBQ1BJIEJpdCBSZWdpc3RlciB3cml0ZSBmdW5jdGlvbi4KKyAqIERFU0NSSVBUSU9OOiBBQ1BJIEJpdCBSZWdpc3RlciB3cml0ZSBmdW5jdGlvbi4gQWNxdWlyZXMgdGhlIGhhcmR3YXJlIGxvY2sKKyAqICAgICAgICAgICAgICBzaW5jZSBtb3N0IG9wZXJhdGlvbnMgcmVxdWlyZSBhIHJlYWQvbW9kaWZ5L3dyaXRlIHNlcXVlbmNlLgorICoKKyAqIFNVUFBPUlRTOiAgICBCaXQgZmllbGRzIGluIFBNMSBTdGF0dXMsIFBNMSBFbmFibGUsIFBNMSBDb250cm9sLCBhbmQKKyAqICAgICAgICAgICAgICBQTTIgQ29udHJvbC4KKyAqCisgKiBOb3RlIHRoYXQgYXQgdGhpcyBsZXZlbCwgdGhlIGZhY3QgdGhhdCB0aGVyZSBtYXkgYmUgYWN0dWFsbHkgdHdvCisgKiBoYXJkd2FyZSByZWdpc3RlcnMgKEEgYW5kIEIgLSBhbmQgQiBtYXkgbm90IGV4aXN0KSBpcyBhYnN0cmFjdGVkLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX3NldF9yZWdpc3Rlcih1MzIgcmVnaXN0ZXJfaWQsIHUzMiB2YWx1ZSkKK2FjcGlfc3RhdHVzIGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKHUzMiByZWdpc3Rlcl9pZCwgdTMyIHZhbHVlKQogewotCXUzMiByZWdpc3Rlcl92YWx1ZSA9IDA7CiAJc3RydWN0IGFjcGlfYml0X3JlZ2lzdGVyX2luZm8gKmJpdF9yZWdfaW5mbzsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJYWNwaV9jcHVfZmxhZ3MgbG9ja19mbGFnczsKKwl1MzIgcmVnaXN0ZXJfdmFsdWU7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQlBQ1BJX0ZVTkNUSU9OX1RSQUNFX1UzMihhY3BpX3NldF9yZWdpc3RlciwgcmVnaXN0ZXJfaWQpOworCUFDUElfRlVOQ1RJT05fVFJBQ0VfVTMyKGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyLCByZWdpc3Rlcl9pZCk7CiAKIAkvKiBHZXQgdGhlIGluZm8gc3RydWN0dXJlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlcXVlc3RlZCBBQ1BJIFJlZ2lzdGVyICovCiAKIAliaXRfcmVnX2luZm8gPSBhY3BpX2h3X2dldF9iaXRfcmVnaXN0ZXJfaW5mbyhyZWdpc3Rlcl9pZCk7CiAJaWYgKCFiaXRfcmVnX2luZm8pIHsKLQkJQUNQSV9FUlJPUigoQUVfSU5GTywgIkJhZCBBQ1BJIEhXIFJlZ2lzdGVySWQ6ICVYIiwKLQkJCSAgICByZWdpc3Rlcl9pZCkpOwogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCiAJbG9ja19mbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOwogCi0JLyogQWx3YXlzIGRvIGEgcmVnaXN0ZXIgcmVhZCBmaXJzdCBzbyB3ZSBjYW4gaW5zZXJ0IHRoZSBuZXcgYml0cyAgKi8KLQotCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChiaXRfcmVnX2luZm8tPnBhcmVudF9yZWdpc3RlciwKLQkJCQkgICAgICAgJnJlZ2lzdGVyX3ZhbHVlKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7Ci0JfQotCiAJLyoKLQkgKiBEZWNvZGUgdGhlIFJlZ2lzdGVyIElECi0JICogUmVnaXN0ZXIgSUQgPSBbUmVnaXN0ZXIgYmxvY2sgSURdIHwgW2JpdCBJRF0KLQkgKgotCSAqIENoZWNrIGJpdCBJRCB0byBmaW5lIGxvY2F0ZSBSZWdpc3RlciBvZmZzZXQuCi0JICogQ2hlY2sgTWFzayB0byBkZXRlcm1pbmUgUmVnaXN0ZXIgb2Zmc2V0LCBhbmQgdGhlbiByZWFkLXdyaXRlLgorCSAqIEF0IHRoaXMgcG9pbnQsIHdlIGtub3cgdGhhdCB0aGUgcGFyZW50IHJlZ2lzdGVyIGlzIG9uZSBvZiB0aGUKKwkgKiBmb2xsb3dpbmc6IFBNMSBTdGF0dXMsIFBNMSBFbmFibGUsIFBNMSBDb250cm9sLCBvciBQTTIgQ29udHJvbAogCSAqLwotCXN3aXRjaCAoYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIpIHsKLQljYXNlIEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUzoKLQorCWlmIChiaXRfcmVnX2luZm8tPnBhcmVudF9yZWdpc3RlciAhPSBBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVMpIHsKIAkJLyoKLQkJICogU3RhdHVzIFJlZ2lzdGVycyBhcmUgZGlmZmVyZW50IGZyb20gdGhlIHJlc3QuIENsZWFyIGJ5Ci0JCSAqIHdyaXRpbmcgMSwgYW5kIHdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LiBTbywgdGhlIG9ubHkgcmVsZXZhbnQKLQkJICogaW5mb3JtYXRpb24gaXMgdGhlIHNpbmdsZSBiaXQgd2UncmUgaW50ZXJlc3RlZCBpbiwgYWxsIG90aGVycyBzaG91bGQKLQkJICogYmUgd3JpdHRlbiBhcyAwIHNvIHRoZXkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZC4KKwkJICogMSkgQ2FzZSBmb3IgUE0xIEVuYWJsZSwgUE0xIENvbnRyb2wsIGFuZCBQTTIgQ29udHJvbAorCQkgKgorCQkgKiBQZXJmb3JtIGEgcmVnaXN0ZXIgcmVhZCB0byBwcmVzZXJ2ZSB0aGUgYml0cyB0aGF0IHdlIGFyZSBub3QKKwkJICogaW50ZXJlc3RlZCBpbgogCQkgKi8KLQkJdmFsdWUgPSBBQ1BJX1JFR0lTVEVSX1BSRVBBUkVfQklUUyh2YWx1ZSwKLQkJCQkJCSAgIGJpdF9yZWdfaW5mby0+Yml0X3Bvc2l0aW9uLAotCQkJCQkJICAgYml0X3JlZ19pbmZvLT4KLQkJCQkJCSAgIGFjY2Vzc19iaXRfbWFzayk7Ci0JCWlmICh2YWx1ZSkgewotCQkJc3RhdHVzID0KLQkJCSAgICBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUywKLQkJCQkJCSAgICh1MTYpIHZhbHVlKTsKLQkJCXJlZ2lzdGVyX3ZhbHVlID0gMDsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTFfRU5BQkxFOgotCi0JCUFDUElfUkVHSVNURVJfSU5TRVJUX1ZBTFVFKHJlZ2lzdGVyX3ZhbHVlLAotCQkJCQkgICBiaXRfcmVnX2luZm8tPmJpdF9wb3NpdGlvbiwKLQkJCQkJICAgYml0X3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2ssCi0JCQkJCSAgIHZhbHVlKTsKLQotCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xX0VOQUJMRSwKLQkJCQkJCSh1MTYpIHJlZ2lzdGVyX3ZhbHVlKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFDUElfUkVHSVNURVJfUE0xX0NPTlRST0w6Ci0KLQkJLyoKLQkJICogV3JpdGUgdGhlIFBNMSBDb250cm9sIHJlZ2lzdGVyLgotCQkgKiBOb3RlIHRoYXQgYXQgdGhpcyBsZXZlbCwgdGhlIGZhY3QgdGhhdCB0aGVyZSBhcmUgYWN0dWFsbHkgVFdPCi0JCSAqIHJlZ2lzdGVycyAoQSBhbmQgQiAtIGFuZCBCIG1heSBub3QgZXhpc3QpIGlzIGFic3RyYWN0ZWQuCi0JCSAqLwotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lPLCAiUE0xIGNvbnRyb2w6IFJlYWQgJVhcbiIsCi0JCQkJICByZWdpc3Rlcl92YWx1ZSkpOwotCi0JCUFDUElfUkVHSVNURVJfSU5TRVJUX1ZBTFVFKHJlZ2lzdGVyX3ZhbHVlLAotCQkJCQkgICBiaXRfcmVnX2luZm8tPmJpdF9wb3NpdGlvbiwKLQkJCQkJICAgYml0X3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2ssCi0JCQkJCSAgIHZhbHVlKTsKLQotCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xX0NPTlRST0wsCi0JCQkJCQkodTE2KSByZWdpc3Rlcl92YWx1ZSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX1JFR0lTVEVSX1BNMl9DT05UUk9MOgotCi0JCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX1JFR0lTVEVSX1BNMl9DT05UUk9MLAorCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIsCiAJCQkJCSAgICAgICAmcmVnaXN0ZXJfdmFsdWUpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCQl9CiAKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywKLQkJCQkgICJQTTIgY29udHJvbDogUmVhZCAlWCBmcm9tICU4LjhYJTguOFhcbiIsCi0JCQkJICByZWdpc3Rlcl92YWx1ZSwKLQkJCQkgIEFDUElfRk9STUFUX1VJTlQ2NChhY3BpX2dibF9GQURULgotCQkJCQkJICAgICB4cG0yX2NvbnRyb2xfYmxvY2suCi0JCQkJCQkgICAgIGFkZHJlc3MpKSk7Ci0KKwkJLyoKKwkJICogSW5zZXJ0IHRoZSBpbnB1dCBiaXQgaW50byB0aGUgdmFsdWUgdGhhdCB3YXMganVzdCByZWFkCisJCSAqIGFuZCB3cml0ZSB0aGUgcmVnaXN0ZXIKKwkJICovCiAJCUFDUElfUkVHSVNURVJfSU5TRVJUX1ZBTFVFKHJlZ2lzdGVyX3ZhbHVlLAogCQkJCQkgICBiaXRfcmVnX2luZm8tPmJpdF9wb3NpdGlvbiwKIAkJCQkJICAgYml0X3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2ssCiAJCQkJCSAgIHZhbHVlKTsKIAotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lPLAotCQkJCSAgIkFib3V0IHRvIHdyaXRlICU0LjRYIHRvICU4LjhYJTguOFhcbiIsCi0JCQkJICByZWdpc3Rlcl92YWx1ZSwKLQkJCQkgIEFDUElfRk9STUFUX1VJTlQ2NChhY3BpX2dibF9GQURULgotCQkJCQkJICAgICB4cG0yX2NvbnRyb2xfYmxvY2suCi0JCQkJCQkgICAgIGFkZHJlc3MpKSk7CisJCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIsCisJCQkJCQlyZWdpc3Rlcl92YWx1ZSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogMikgQ2FzZSBmb3IgUE0xIFN0YXR1cworCQkgKgorCQkgKiBUaGUgU3RhdHVzIHJlZ2lzdGVyIGlzIGRpZmZlcmVudCBmcm9tIHRoZSByZXN0LiBDbGVhciBhbiBldmVudAorCQkgKiBieSB3cml0aW5nIDEsIHdyaXRpbmcgMCBoYXMgbm8gZWZmZWN0LiBTbywgdGhlIG9ubHkgcmVsZXZhbnQKKwkJICogaW5mb3JtYXRpb24gaXMgdGhlIHNpbmdsZSBiaXQgd2UncmUgaW50ZXJlc3RlZCBpbiwgYWxsIG90aGVycworCQkgKiBzaG91bGQgYmUgd3JpdHRlbiBhcyAwIHNvIHRoZXkgd2lsbCBiZSBsZWZ0IHVuY2hhbmdlZC4KKwkJICovCisJCXJlZ2lzdGVyX3ZhbHVlID0gQUNQSV9SRUdJU1RFUl9QUkVQQVJFX0JJVFModmFsdWUsCisJCQkJCQkJICAgIGJpdF9yZWdfaW5mby0+CisJCQkJCQkJICAgIGJpdF9wb3NpdGlvbiwKKwkJCQkJCQkgICAgYml0X3JlZ19pbmZvLT4KKwkJCQkJCQkgICAgYWNjZXNzX2JpdF9tYXNrKTsKIAotCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0yX0NPTlRST0wsCi0JCQkJCQkodTgpIChyZWdpc3Rlcl92YWx1ZSkpOwotCQlicmVhazsKKwkJLyogTm8gbmVlZCB0byB3cml0ZSB0aGUgcmVnaXN0ZXIgaWYgdmFsdWUgaXMgYWxsIHplcm9zICovCiAKLQlkZWZhdWx0OgotCQlicmVhazsKKwkJaWYgKHJlZ2lzdGVyX3ZhbHVlKSB7CisJCQlzdGF0dXMgPQorCQkJICAgIGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTLAorCQkJCQkJICAgcmVnaXN0ZXJfdmFsdWUpOworCQl9CiAJfQogCi0gICAgICB1bmxvY2tfYW5kX2V4aXQ6CisJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywKKwkJCSAgIkJpdFJlZyAlWCwgUGFyZW50UmVnICVYLCBWYWx1ZSAlOC44WCwgQWN0dWFsICU4LjhYXG4iLAorCQkJICByZWdpc3Rlcl9pZCwgYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIsIHZhbHVlLAorCQkJICByZWdpc3Rlcl92YWx1ZSkpOworCit1bmxvY2tfYW5kX2V4aXQ6CiAKIAlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9oYXJkd2FyZV9sb2NrLCBsb2NrX2ZsYWdzKTsKLQotCS8qIE5vcm1hbGl6ZSB0aGUgdmFsdWUgdGhhdCB3YXMgcmVhZCAqLwotCi0JQUNQSV9ERUJVR19FWEVDKHJlZ2lzdGVyX3ZhbHVlID0KLQkJCSgocmVnaXN0ZXJfdmFsdWUgJiBiaXRfcmVnX2luZm8tPmFjY2Vzc19iaXRfbWFzaykgPj4KLQkJCSBiaXRfcmVnX2luZm8tPmJpdF9wb3NpdGlvbikpOwotCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTywKLQkJCSAgIlNldCBiaXRzOiAlOC44WCBhY3R1YWwgJTguOFggcmVnaXN0ZXIgJVhcbiIsIHZhbHVlLAotCQkJICByZWdpc3Rlcl92YWx1ZSwgYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIpKTsKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAotQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfc2V0X3JlZ2lzdGVyKQorQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTUzNCw3ICs0NjgsNyBAQAogCiAJLyogSXQgbXVzdCBiZSBvZiB0eXBlIFBhY2thZ2UgKi8KIAotCWVsc2UgaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8tPnJldHVybl9vYmplY3QpICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJZWxzZSBpZiAoaW5mby0+cmV0dXJuX29iamVjdC0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCSAgICAiU2xlZXAgU3RhdGUgcmV0dXJuIG9iamVjdCBpcyBub3QgYSBQYWNrYWdlIikpOwogCQlzdGF0dXMgPSBBRV9BTUxfT1BFUkFORF9UWVBFOwpAQCAtNTU1LDEyICs0ODksMTMgQEAKIAogCS8qIFRoZSBmaXJzdCB0d28gZWxlbWVudHMgbXVzdCBib3RoIGJlIG9mIHR5cGUgSW50ZWdlciAqLwogCi0JZWxzZSBpZiAoKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8tPnJldHVybl9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHNbMF0pCisJZWxzZSBpZiAoKChpbmZvLT5yZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzWzBdKS0+Y29tbW9uLnR5cGUKIAkJICAhPSBBQ1BJX1RZUEVfSU5URUdFUikgfHwKLQkJIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbmZvLT5yZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzWzFdKQorCQkgKChpbmZvLT5yZXR1cm5fb2JqZWN0LT5wYWNrYWdlLmVsZW1lbnRzWzFdKS0+Y29tbW9uLnR5cGUKIAkJICAhPSBBQ1BJX1RZUEVfSU5URUdFUikpIHsKIAkJQUNQSV9FUlJPUigoQUVfSU5GTywKLQkJCSAgICAiU2xlZXAgU3RhdGUgcmV0dXJuIHBhY2thZ2UgZWxlbWVudHMgYXJlIG5vdCBib3RoIEludGVnZXJzICglcywgJXMpIiwKKwkJCSAgICAiU2xlZXAgU3RhdGUgcmV0dXJuIHBhY2thZ2UgZWxlbWVudHMgYXJlIG5vdCBib3RoIEludGVnZXJzICIKKwkJCSAgICAiKCVzLCAlcykiLAogCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoaW5mby0+cmV0dXJuX29iamVjdC0+CiAJCQkJCQkJIHBhY2thZ2UuZWxlbWVudHNbMF0pLAogCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoaW5mby0+cmV0dXJuX29iamVjdC0+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWNjZXNzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWNjZXNzLmMKaW5kZXggODgzMDNlYi4uOWMzY2RiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FjY2Vzcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhY2Nlc3MuYwpAQCAtMTE4LDkgKzExOCw4IEBACiAJCX0KIAogCQkvKgotCQkgKiBOYW1lIGVudGVyZWQgc3VjY2Vzc2Z1bGx5LgotCQkgKiBJZiBlbnRyeSBpbiBwcmVfZGVmaW5lZF9uYW1lc1tdIHNwZWNpZmllcyBhbgotCQkgKiBpbml0aWFsIHZhbHVlLCBjcmVhdGUgdGhlIGluaXRpYWwgdmFsdWUuCisJCSAqIE5hbWUgZW50ZXJlZCBzdWNjZXNzZnVsbHkuIElmIGVudHJ5IGluIHByZV9kZWZpbmVkX25hbWVzW10gc3BlY2lmaWVzCisJCSAqIGFuIGluaXRpYWwgdmFsdWUsIGNyZWF0ZSB0aGUgaW5pdGlhbCB2YWx1ZS4KIAkJICovCiAJCWlmIChpbml0X3ZhbC0+dmFsKSB7CiAJCQlzdGF0dXMgPSBhY3BpX29zX3ByZWRlZmluZWRfb3ZlcnJpZGUoaW5pdF92YWwsICZ2YWwpOwpAQCAtMTc4LDkgKzE3Nyw4IEBACiAKIAkJCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKIAotCQkJCS8qCi0JCQkJICogQnVpbGQgYW4gb2JqZWN0IGFyb3VuZCB0aGUgc3RhdGljIHN0cmluZwotCQkJCSAqLworCQkJCS8qIEJ1aWxkIGFuIG9iamVjdCBhcm91bmQgdGhlIHN0YXRpYyBzdHJpbmcgKi8KKwogCQkJCW9ial9kZXNjLT5zdHJpbmcubGVuZ3RoID0KIAkJCQkgICAgKHUzMikgQUNQSV9TVFJMRU4odmFsKTsKIAkJCQlvYmpfZGVzYy0+c3RyaW5nLnBvaW50ZXIgPSB2YWw7CkBAIC0yMzQsOCArMjMyLDcgQEAKIAkJCS8qIFN0b3JlIHBvaW50ZXIgdG8gdmFsdWUgZGVzY3JpcHRvciBpbiB0aGUgTm9kZSAqLwogCiAJCQlzdGF0dXMgPSBhY3BpX25zX2F0dGFjaF9vYmplY3QobmV3X25vZGUsIG9ial9kZXNjLAotCQkJCQkJICAgICAgIEFDUElfR0VUX09CSkVDVF9UWVBFCi0JCQkJCQkgICAgICAgKG9ial9kZXNjKSk7CisJCQkJCQkgICAgICAgb2JqX2Rlc2MtPmNvbW1vbi50eXBlKTsKIAogCQkJLyogUmVtb3ZlIGxvY2FsIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0ICovCiAKQEAgLTMxNSwxMCArMzEyLDggQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX05BTUVTUEFDRSk7CiAJfQogCi0JLyoKLQkgKiBHZXQgdGhlIHByZWZpeCBzY29wZS4KLQkgKiBBIG51bGwgc2NvcGUgbWVhbnMgdXNlIHRoZSByb290IHNjb3BlCi0JICovCisJLyogR2V0IHRoZSBwcmVmaXggc2NvcGUuIEEgbnVsbCBzY29wZSBtZWFucyB1c2UgdGhlIHJvb3Qgc2NvcGUgKi8KKwogCWlmICgoIXNjb3BlX2luZm8pIHx8ICghc2NvcGVfaW5mby0+c2NvcGUubm9kZSkpIHsKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9OQU1FUywKIAkJCQkgICJOdWxsIHNjb3BlIHByZWZpeCwgdXNpbmcgcm9vdCBub2RlICglcClcbiIsCkBAIC0zMzgsOCArMzMzLDggQEAKIAkJaWYgKCEoZmxhZ3MgJiBBQ1BJX05TX1BSRUZJWF9JU19TQ09QRSkpIHsKIAkJCS8qCiAJCQkgKiBUaGlzIG5vZGUgbWlnaHQgbm90IGJlIGEgYWN0dWFsICJzY29wZSIgbm9kZSAoc3VjaCBhcyBhCi0JCQkgKiBEZXZpY2UvTWV0aG9kLCBldGMuKSAgSXQgY291bGQgYmUgYSBQYWNrYWdlIG9yIG90aGVyIG9iamVjdCBub2RlLgotCQkJICogQmFja3VwIHVwIHRoZSB0cmVlIHRvIGZpbmQgdGhlIGNvbnRhaW5pbmcgc2NvcGUgbm9kZS4KKwkJCSAqIERldmljZS9NZXRob2QsIGV0Yy4pICBJdCBjb3VsZCBiZSBhIFBhY2thZ2Ugb3Igb3RoZXIgb2JqZWN0CisJCQkgKiBub2RlLiBCYWNrdXAgdXAgdGhlIHRyZWUgdG8gZmluZCB0aGUgY29udGFpbmluZyBzY29wZSBub2RlLgogCQkJICovCiAJCQl3aGlsZSAoIWFjcGlfbnNfb3BlbnNfc2NvcGUocHJlZml4X25vZGUtPnR5cGUpICYmCiAJCQkgICAgICAgcHJlZml4X25vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX0FOWSkgewpAQCAtMzQ5LDcgKzM0NCw3IEBACiAJCX0KIAl9CiAKLQkvKiBTYXZlIHR5cGUgICBUQkQ6IG1heSBiZSBubyBsb25nZXIgbmVjZXNzYXJ5ICovCisJLyogU2F2ZSB0eXBlLiBUQkQ6IG1heSBiZSBubyBsb25nZXIgbmVjZXNzYXJ5ICovCiAKIAl0eXBlX3RvX2NoZWNrX2ZvciA9IHR5cGU7CiAKQEAgLTQxNCw2ICs0MDksNyBAQAogCQkJCS8qIE5hbWUgaXMgZnVsbHkgcXVhbGlmaWVkLCBubyBzZWFyY2ggcnVsZXMgYXBwbHkgKi8KIAogCQkJCXNlYXJjaF9wYXJlbnRfZmxhZyA9IEFDUElfTlNfTk9fVVBTRUFSQ0g7CisKIAkJCQkvKgogCQkJCSAqIFBvaW50IHBhc3QgdGhpcyBwcmVmaXggdG8gdGhlIG5hbWUgc2VnbWVudAogCQkJCSAqIHBhcnQgb3IgdGhlIG5leHQgUGFyZW50IFByZWZpeApAQCAtNDI5LDcgKzQyNSw4IEBACiAJCQkJCS8qIEN1cnJlbnQgc2NvcGUgaGFzIG5vIHBhcmVudCBzY29wZSAqLwogCiAJCQkJCUFDUElfRVJST1IoKEFFX0lORk8sCi0JCQkJCQkgICAgIkFDUEkgcGF0aCBoYXMgdG9vIG1hbnkgcGFyZW50IHByZWZpeGVzICheKSAtIHJlYWNoZWQgYmV5b25kIHJvb3Qgbm9kZSIpKTsKKwkJCQkJCSAgICAiQUNQSSBwYXRoIGhhcyB0b28gbWFueSBwYXJlbnQgcHJlZml4ZXMgKF4pICIKKwkJCQkJCSAgICAiLSByZWFjaGVkIGJleW9uZCByb290IG5vZGUiKSk7CiAJCQkJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT1RfRk9VTkQpOwogCQkJCX0KIAkJCX0KQEAgLTUzMSw5ICs1MjgsOSBAQAogCXdoaWxlIChudW1fc2VnbWVudHMgJiYgY3VycmVudF9ub2RlKSB7CiAJCW51bV9zZWdtZW50cy0tOwogCQlpZiAoIW51bV9zZWdtZW50cykgewotCQkJLyoKLQkJCSAqIFRoaXMgaXMgdGhlIGxhc3Qgc2VnbWVudCwgZW5hYmxlIHR5cGVjaGVja2luZwotCQkJICovCisKKwkJCS8qIFRoaXMgaXMgdGhlIGxhc3Qgc2VnbWVudCwgZW5hYmxlIHR5cGVjaGVja2luZyAqLworCiAJCQl0aGlzX3NlYXJjaF90eXBlID0gdHlwZTsKIAogCQkJLyoKQEAgLTU4NCw5ICs1ODEsOSBAQAogCQlpZiAobnVtX3NlZ21lbnRzID4gMCkgewogCQkJLyoKIAkJCSAqIElmIHdlIGhhdmUgYW4gYWxpYXMgdG8gYW4gb2JqZWN0IHRoYXQgb3BlbnMgYSBzY29wZSAoc3VjaCBhcyBhCi0JCQkgKiBkZXZpY2Ugb3IgcHJvY2Vzc29yKSwgd2UgbmVlZCB0byBkZXJlZmVyZW5jZSB0aGUgYWxpYXMgaGVyZSBzbyB0aGF0Ci0JCQkgKiB3ZSBjYW4gYWNjZXNzIGFueSBjaGlsZHJlbiBvZiB0aGUgb3JpZ2luYWwgbm9kZSAodmlhIHRoZSByZW1haW5pbmcKLQkJCSAqIHNlZ21lbnRzKS4KKwkJCSAqIGRldmljZSBvciBwcm9jZXNzb3IpLCB3ZSBuZWVkIHRvIGRlcmVmZXJlbmNlIHRoZSBhbGlhcyBoZXJlIHNvCisJCQkgKiB0aGF0IHdlIGNhbiBhY2Nlc3MgYW55IGNoaWxkcmVuIG9mIHRoZSBvcmlnaW5hbCBub2RlICh2aWEgdGhlCisJCQkgKiByZW1haW5pbmcgc2VnbWVudHMpLgogCQkJICovCiAJCQlpZiAodGhpc19ub2RlLT50eXBlID09IEFDUElfVFlQRV9MT0NBTF9BTElBUykgewogCQkJCWlmICghdGhpc19ub2RlLT5vYmplY3QpIHsKQEAgLTU5NCw4ICs1OTEsOCBAQAogCQkJCX0KIAogCQkJCWlmIChhY3BpX25zX29wZW5zX3Njb3BlCi0JCQkJICAgICgoKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICopdGhpc19ub2RlLT4KLQkJCQkgICAgICBvYmplY3QpLT50eXBlKSkgeworCQkJCSAgICAoKChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKQorCQkJCSAgICAgIHRoaXNfbm9kZS0+b2JqZWN0KS0+dHlwZSkpIHsKIAkJCQkJdGhpc19ub2RlID0KIAkJCQkJICAgIChzdHJ1Y3QgYWNwaV9uYW1lc3BhY2Vfbm9kZSAqKQogCQkJCQkgICAgdGhpc19ub2RlLT5vYmplY3Q7CkBAIC02MzksOCArNjM2LDggQEAKIAogCQkJLyoKIAkJCSAqIElmIHRoaXMgaXMgdGhlIGxhc3QgbmFtZSBzZWdtZW50IGFuZCB3ZSBhcmUgbm90IGxvb2tpbmcgZm9yIGEKLQkJCSAqIHNwZWNpZmljIHR5cGUsIGJ1dCB0aGUgdHlwZSBvZiBmb3VuZCBvYmplY3QgaXMga25vd24sIHVzZSB0aGF0IHR5cGUKLQkJCSAqIHRvIChsYXRlcikgc2VlIGlmIGl0IG9wZW5zIGEgc2NvcGUuCisJCQkgKiBzcGVjaWZpYyB0eXBlLCBidXQgdGhlIHR5cGUgb2YgZm91bmQgb2JqZWN0IGlzIGtub3duLCB1c2UgdGhhdAorCQkJICogdHlwZSB0byAobGF0ZXIpIHNlZSBpZiBpdCBvcGVucyBhIHNjb3BlLgogCQkJICovCiAJCQlpZiAodHlwZSA9PSBBQ1BJX1RZUEVfQU5ZKSB7CiAJCQkJdHlwZSA9IHRoaXNfbm9kZS0+dHlwZTsKQEAgLTY1Myw5ICs2NTAsOCBAQAogCQljdXJyZW50X25vZGUgPSB0aGlzX25vZGU7CiAJfQogCi0JLyoKLQkgKiBBbHdheXMgY2hlY2sgaWYgd2UgbmVlZCB0byBvcGVuIGEgbmV3IHNjb3BlCi0JICovCisJLyogQWx3YXlzIGNoZWNrIGlmIHdlIG5lZWQgdG8gb3BlbiBhIG5ldyBzY29wZSAqLworCiAJaWYgKCEoZmxhZ3MgJiBBQ1BJX05TX0RPTlRfT1BFTl9TQ09QRSkgJiYgKHdhbGtfc3RhdGUpKSB7CiAJCS8qCiAJCSAqIElmIGVudHJ5IGlzIGEgdHlwZSB3aGljaCBvcGVucyBhIHNjb3BlLCBwdXNoIHRoZSBuZXcgc2NvcGUgb24gdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWxsb2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jCmluZGV4IGY5NzZkODQuLmFjZWI5MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jCkBAIC03Niw4ICs3Niw3IEBACiAJQUNQSV9NRU1fVFJBQ0tJTkcoYWNwaV9nYmxfbnNfbm9kZV9saXN0LT50b3RhbF9hbGxvY2F0ZWQrKyk7CiAKICNpZmRlZiBBQ1BJX0RCR19UUkFDS19BTExPQ0FUSU9OUwotCXRlbXAgPQotCSAgICBhY3BpX2dibF9uc19ub2RlX2xpc3QtPnRvdGFsX2FsbG9jYXRlZCAtCisJdGVtcCA9IGFjcGlfZ2JsX25zX25vZGVfbGlzdC0+dG90YWxfYWxsb2NhdGVkIC0KIAkgICAgYWNwaV9nYmxfbnNfbm9kZV9saXN0LT50b3RhbF9mcmVlZDsKIAlpZiAodGVtcCA+IGFjcGlfZ2JsX25zX25vZGVfbGlzdC0+bWF4X29jY3VwaWVkKSB7CiAJCWFjcGlfZ2JsX25zX25vZGVfbGlzdC0+bWF4X29jY3VwaWVkID0gdGVtcDsKQEAgLTE0NSw5ICsxNDQsOCBAQAogCiAJQUNQSV9NRU1fVFJBQ0tJTkcoYWNwaV9nYmxfbnNfbm9kZV9saXN0LT50b3RhbF9mcmVlZCsrKTsKIAotCS8qCi0JICogRGV0YWNoIGFuIG9iamVjdCBpZiB0aGVyZSBpcyBvbmUsIHRoZW4gZGVsZXRlIHRoZSBub2RlCi0JICovCisJLyogRGV0YWNoIGFuIG9iamVjdCBpZiB0aGVyZSBpcyBvbmUsIHRoZW4gZGVsZXRlIHRoZSBub2RlICovCisKIAlhY3BpX25zX2RldGFjaF9vYmplY3Qobm9kZSk7CiAJKHZvaWQpYWNwaV9vc19yZWxlYXNlX29iamVjdChhY3BpX2dibF9uYW1lc3BhY2VfY2FjaGUsIG5vZGUpOwogCXJldHVybl9WT0lEOwpAQCAtMTgzLDkgKzE4MSw4IEBACiAJQUNQSV9GVU5DVElPTl9UUkFDRShuc19pbnN0YWxsX25vZGUpOwogCiAJLyoKLQkgKiBHZXQgdGhlIG93bmVyIElEIGZyb20gdGhlIFdhbGsgc3RhdGUKLQkgKiBUaGUgb3duZXIgSUQgaXMgdXNlZCB0byB0cmFjayB0YWJsZSBkZWxldGlvbiBhbmQKLQkgKiBkZWxldGlvbiBvZiBvYmplY3RzIGNyZWF0ZWQgYnkgbWV0aG9kcworCSAqIEdldCB0aGUgb3duZXIgSUQgZnJvbSB0aGUgV2FsayBzdGF0ZS4gVGhlIG93bmVyIElEIGlzIHVzZWQgdG8gdHJhY2sKKwkgKiB0YWJsZSBkZWxldGlvbiBhbmQgZGVsZXRpb24gb2Ygb2JqZWN0cyBjcmVhdGVkIGJ5IG1ldGhvZHMuCiAJICovCiAJaWYgKHdhbGtfc3RhdGUpIHsKIAkJb3duZXJfaWQgPSB3YWxrX3N0YXRlLT5vd25lcl9pZDsKQEAgLTI2MCw5ICsyNTcsOCBAQAogCQlyZXR1cm5fVk9JRDsKIAl9CiAKLQkvKgotCSAqIERlYWxsb2NhdGUgYWxsIGNoaWxkcmVuIGF0IHRoaXMgbGV2ZWwKLQkgKi8KKwkvKiBEZWFsbG9jYXRlIGFsbCBjaGlsZHJlbiBhdCB0aGlzIGxldmVsICovCisKIAlkbyB7CiAKIAkJLyogR2V0IHRoZSB0aGluZ3Mgd2UgbmVlZCAqLwpAQCAtMjg1LDkgKzI4MSw4IEBACiAJCQkJICAiT2JqZWN0ICVwLCBSZW1haW5pbmcgJVhcbiIsIGNoaWxkX25vZGUsCiAJCQkJICBhY3BpX2dibF9jdXJyZW50X25vZGVfY291bnQpKTsKIAotCQkvKgotCQkgKiBEZXRhY2ggYW4gb2JqZWN0IGlmIHRoZXJlIGlzIG9uZSwgdGhlbiBmcmVlIHRoZSBjaGlsZCBub2RlCi0JCSAqLworCQkvKiBEZXRhY2ggYW4gb2JqZWN0IGlmIHRoZXJlIGlzIG9uZSwgdGhlbiBmcmVlIHRoZSBjaGlsZCBub2RlICovCisKIAkJYWNwaV9uc19kZXRhY2hfb2JqZWN0KGNoaWxkX25vZGUpOwogCiAJCS8qIE5vdyB3ZSBjYW4gZGVsZXRlIHRoZSBub2RlICovCkBAIC0zMDQsNyArMjk5LDYgQEAKIAkvKiBDbGVhciB0aGUgcGFyZW50J3MgY2hpbGQgcG9pbnRlciAqLwogCiAJcGFyZW50X25vZGUtPmNoaWxkID0gTlVMTDsKLQogCXJldHVybl9WT0lEOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXAuYwppbmRleCAwZGEzM2M4Li4yYmFkNjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wLmMKQEAgLTE4MSw2ICsxODEsMTIgQEAKIAl9CiAKIAl0aGlzX25vZGUgPSBhY3BpX25zX21hcF9oYW5kbGVfdG9fbm9kZShvYmpfaGFuZGxlKTsKKwlpZiAoIXRoaXNfbm9kZSkgeworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJJbnZhbGlkIG9iamVjdCBoYW5kbGUgJXBcbiIsCisJCQkJICBvYmpfaGFuZGxlKSk7CisJCXJldHVybiAoQUVfT0spOworCX0KKwogCXR5cGUgPSB0aGlzX25vZGUtPnR5cGU7CiAKIAkvKiBDaGVjayBpZiB0aGUgb3duZXIgbWF0Y2hlcyAqLwpAQCAtMjE0LDkgKzIyMCw4IEBACiAJCWFjcGlfb3NfcHJpbnRmKCIlNC40cyIsIGFjcGlfdXRfZ2V0X25vZGVfbmFtZSh0aGlzX25vZGUpKTsKIAl9CiAKLQkvKgotCSAqIE5vdyB3ZSBjYW4gcHJpbnQgb3V0IHRoZSBwZXJ0aW5lbnQgaW5mb3JtYXRpb24KLQkgKi8KKwkvKiBOb3cgd2UgY2FuIHByaW50IG91dCB0aGUgcGVydGluZW50IGluZm9ybWF0aW9uICovCisKIAlhY3BpX29zX3ByaW50ZigiICUtMTJzICVwICUyLjJYICIsCiAJCSAgICAgICBhY3BpX3V0X2dldF90eXBlX25hbWUodHlwZSksIHRoaXNfbm9kZSwKIAkJICAgICAgIHRoaXNfbm9kZS0+b3duZXJfaWQpOwpAQCAtNTA5LDcgKzUxNCw3IEBACiAKIAkJY2FzZSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EOgogCi0JCQlvYmpfdHlwZSA9IEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKTsKKwkJCW9ial90eXBlID0gb2JqX2Rlc2MtPmNvbW1vbi50eXBlOwogCiAJCQlpZiAob2JqX3R5cGUgPiBBQ1BJX1RZUEVfTE9DQUxfTUFYKSB7CiAJCQkJYWNwaV9vc19wcmludGYKQEAgLTUzOSw5ICs1NDQsOCBAQAogCQkJZ290byBjbGVhbnVwOwogCQl9CiAKLQkJLyoKLQkJICogVmFsaWQgb2JqZWN0LCBnZXQgdGhlIHBvaW50ZXIgdG8gbmV4dCBsZXZlbCwgaWYgYW55Ci0JCSAqLworCQkvKiBWYWxpZCBvYmplY3QsIGdldCB0aGUgcG9pbnRlciB0byBuZXh0IGxldmVsLCBpZiBhbnkgKi8KKwogCQlzd2l0Y2ggKG9ial90eXBlKSB7CiAJCWNhc2UgQUNQSV9UWVBFX0JVRkZFUjoKIAkJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgpAQCAtNjAyLDE0ICs2MDYsMTQgQEAKICAqICAgICAgICAgICAgICBkaXNwbGF5X3R5cGUgICAgICAgIC0gMCBvciBBQ1BJX0RJU1BMQVlfU1VNTUFSWQogICogICAgICAgICAgICAgIG1heF9kZXB0aCAgICAgICAgICAgLSBNYXhpbXVtIGRlcHRoIG9mIGR1bXAuIFVzZSBBQ1BJX1VJTlQzMl9NQVgKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFuIGVmZmVjdGl2ZWx5IHVubGltaXRlZCBkZXB0aC4KLSAqICAgICAgICAgICAgICBvd25lcl9pZCAgICAgICAgICAgIC0gRHVtcCBvbmx5IG9iamVjdHMgb3duZWQgYnkgdGhpcyBJRC4gIFVzZQorICogICAgICAgICAgICAgIG93bmVyX2lkICAgICAgICAgICAgLSBEdW1wIG9ubHkgb2JqZWN0cyBvd25lZCBieSB0aGlzIElELiBVc2UKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNQSV9VSU5UMzJfTUFYIHRvIG1hdGNoIGFsbCBvd25lcnMuCiAgKiAgICAgICAgICAgICAgc3RhcnRfaGFuZGxlICAgICAgICAtIFdoZXJlIGluIG5hbWVzcGFjZSB0byBzdGFydC9lbmQgc2VhcmNoCiAgKgogICogUkVUVVJOOiAgICAgIE5vbmUKICAqCi0gKiBERVNDUklQVElPTjogRHVtcCB0eXBlZCBvYmplY3RzIHdpdGhpbiB0aGUgbG9hZGVkIG5hbWVzcGFjZS4KLSAqICAgICAgICAgICAgICBVc2VzIGFjcGlfbnNfd2Fsa19uYW1lc3BhY2UgaW4gY29uanVuY3Rpb24gd2l0aCBhY3BpX25zX2R1bXBfb25lX29iamVjdC4KKyAqIERFU0NSSVBUSU9OOiBEdW1wIHR5cGVkIG9iamVjdHMgd2l0aGluIHRoZSBsb2FkZWQgbmFtZXNwYWNlLiBVc2VzCisgKiAgICAgICAgICAgICAgYWNwaV9uc193YWxrX25hbWVzcGFjZSBpbiBjb25qdW5jdGlvbiB3aXRoIGFjcGlfbnNfZHVtcF9vbmVfb2JqZWN0LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZXZhbC5jCmluZGV4IDBmM2Q1ZjkuLjhlN2RlYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2V2YWwuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJCX0KIAogCi0JCUFDUElfRFVNUF9QQVRITkFNRShpbmZvLT5yZXNvbHZlZF9ub2RlLCAiRXhlY3V0ZSBNZXRob2Q6IiwKKwkJQUNQSV9EVU1QX1BBVEhOQU1FKGluZm8tPnJlc29sdmVkX25vZGUsICJBQ1BJOiBFeGVjdXRlIE1ldGhvZCIsCiAJCQkJICAgQUNQSV9MVl9JTkZPLCBfQ09NUE9ORU5UKTsKIAogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2luaXQuYwppbmRleCAxMzUwMWNiLi4yYWRmY2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMKQEAgLTEwMyw3ICsxMDMsOCBAQAogCX0KIAogCUFDUElfREVCVUdfUFJJTlRfUkFXKChBQ1BJX0RCX0lOSVQsCi0JCQkgICAgICAiXG5Jbml0aWFsaXplZCAlaGQvJWhkIFJlZ2lvbnMgJWhkLyVoZCBGaWVsZHMgJWhkLyVoZCBCdWZmZXJzICVoZC8laGQgUGFja2FnZXMgKCVoZCBub2RlcylcbiIsCisJCQkgICAgICAiXG5Jbml0aWFsaXplZCAlaGQvJWhkIFJlZ2lvbnMgJWhkLyVoZCBGaWVsZHMgJWhkLyVoZCAiCisJCQkgICAgICAiQnVmZmVycyAlaGQvJWhkIFBhY2thZ2VzICglaGQgbm9kZXMpXG4iLAogCQkJICAgICAgaW5mby5vcF9yZWdpb25faW5pdCwgaW5mby5vcF9yZWdpb25fY291bnQsCiAJCQkgICAgICBpbmZvLmZpZWxkX2luaXQsIGluZm8uZmllbGRfY291bnQsCiAJCQkgICAgICBpbmZvLmJ1ZmZlcl9pbml0LCBpbmZvLmJ1ZmZlcl9jb3VudCwKQEAgLTE0OCw3ICsxNDksOCBAQAogCWluZm8ubnVtX0lOSSA9IDA7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9JTklULAotCQkJICAgICAgIkluaXRpYWxpemluZyBEZXZpY2UvUHJvY2Vzc29yL1RoZXJtYWwgb2JqZWN0cyBieSBleGVjdXRpbmcgX0lOSSBtZXRob2RzOiIpKTsKKwkJCSAgICAgICJJbml0aWFsaXppbmcgRGV2aWNlL1Byb2Nlc3Nvci9UaGVybWFsIG9iamVjdHMgIgorCQkJICAgICAgImJ5IGV4ZWN1dGluZyBfSU5JIG1ldGhvZHM6IikpOwogCiAJLyogVHJlZSBhbmFseXNpczogZmluZCBhbGwgc3VidHJlZXMgdGhhdCBjb250YWluIF9JTkkgbWV0aG9kcyAqLwogCkBAIC0xODAsNyArMTgyLDggQEAKIAl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9JTklULAotCQkJICAgICAgIlxuRXhlY3V0ZWQgJWhkIF9JTkkgbWV0aG9kcyByZXF1aXJpbmcgJWhkIF9TVEEgZXhlY3V0aW9ucyAoZXhhbWluZWQgJWhkIG9iamVjdHMpXG4iLAorCQkJICAgICAgIlxuRXhlY3V0ZWQgJWhkIF9JTkkgbWV0aG9kcyByZXF1aXJpbmcgJWhkIF9TVEEgZXhlY3V0aW9ucyAiCisJCQkgICAgICAiKGV4YW1pbmVkICVoZCBvYmplY3RzKVxuIiwKIAkJCSAgICAgIGluZm8ubnVtX0lOSSwgaW5mby5udW1fU1RBLCBpbmZvLmRldmljZV9jb3VudCkpOwogCiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC0yNjMsMTYgKzI2NiwxNCBAQAogCQlyZXR1cm4gKEFFX09LKTsKIAl9CiAKLQkvKgotCSAqIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbml0aWFsaXplZCwgbm90aGluZyBlbHNlIHRvIGRvCi0JICovCisJLyogSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLCBub3RoaW5nIGVsc2UgdG8gZG8gKi8KKwogCWlmIChvYmpfZGVzYy0+Y29tbW9uLmZsYWdzICYgQU9QT0JKX0RBVEFfVkFMSUQpIHsKIAkJcmV0dXJuIChBRV9PSyk7CiAJfQogCi0JLyoKLQkgKiBNdXN0IGxvY2sgdGhlIGludGVycHJldGVyIGJlZm9yZSBleGVjdXRpbmcgQU1MIGNvZGUKLQkgKi8KKwkvKiBNdXN0IGxvY2sgdGhlIGludGVycHJldGVyIGJlZm9yZSBleGVjdXRpbmcgQU1MIGNvZGUgKi8KKwogCWFjcGlfZXhfZW50ZXJfaW50ZXJwcmV0ZXIoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2xvYWQuYwppbmRleCBhMGJhOWUxLi5kY2Q3YTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNsb2FkLmMKQEAgLTEyOCwxMiArMTI4LDEyIEBACiAJICogcGFyc2UgdHJlZXMuCiAJICovCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJICAiKioqKiBCZWdpbiBUYWJsZSBNZXRob2QgUGFyc2luZyBhbmQgT2JqZWN0IEluaXRpYWxpemF0aW9uICoqKipcbiIpKTsKKwkJCSAgIioqKiogQmVnaW4gVGFibGUgTWV0aG9kIFBhcnNpbmcgYW5kIE9iamVjdCBJbml0aWFsaXphdGlvblxuIikpOwogCiAJc3RhdHVzID0gYWNwaV9kc19pbml0aWFsaXplX29iamVjdHModGFibGVfaW5kZXgsIG5vZGUpOwogCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJICAiKioqKiBDb21wbGV0ZWQgVGFibGUgTWV0aG9kIFBhcnNpbmcgYW5kIE9iamVjdCBJbml0aWFsaXphdGlvbiAqKioqXG4iKSk7CisJCQkgICIqKioqIENvbXBsZXRlZCBUYWJsZSBNZXRob2QgUGFyc2luZyBhbmQgT2JqZWN0IEluaXRpYWxpemF0aW9uXG4iKSk7CiAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNvYmplY3QuYwppbmRleCAwOGE5N2E1Li4zZWIyMGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zb2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc29iamVjdC5jCkBAIC0yMDksOCArMjA5LDcgQEAKIAogCW9ial9kZXNjID0gbm9kZS0+b2JqZWN0OwogCi0JaWYgKCFvYmpfZGVzYyB8fAotCSAgICAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSkgeworCWlmICghb2JqX2Rlc2MgfHwgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfREFUQSkpIHsKIAkJcmV0dXJuX1ZPSUQ7CiAJfQogCkBAIC0yMjAsOCArMjE5LDcgQEAKIAlpZiAoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EKSB7CiAJCW5vZGUtPm9iamVjdCA9IG9ial9kZXNjLT5jb21tb24ubmV4dF9vYmplY3Q7CiAJCWlmIChub2RlLT5vYmplY3QgJiYKLQkJICAgIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShub2RlLT5vYmplY3QpICE9Ci0JCSAgICAgQUNQSV9UWVBFX0xPQ0FMX0RBVEEpKSB7CisJCSAgICAoKG5vZGUtPm9iamVjdCktPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9MT0NBTF9EQVRBKSkgewogCQkJbm9kZS0+b2JqZWN0ID0gbm9kZS0+b2JqZWN0LT5jb21tb24ubmV4dF9vYmplY3Q7CiAJCX0KIAl9CkBAIC0yNjcsNyArMjY1LDcgQEAKIAkgICAgKChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUobm9kZS0+b2JqZWN0KSAhPSBBQ1BJX0RFU0NfVFlQRV9PUEVSQU5EKQogCSAgICAgJiYgKEFDUElfR0VUX0RFU0NSSVBUT1JfVFlQRShub2RlLT5vYmplY3QpICE9CiAJCSBBQ1BJX0RFU0NfVFlQRV9OQU1FRCkpCi0JICAgIHx8IChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShub2RlLT5vYmplY3QpID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSkgeworCSAgICB8fCAoKG5vZGUtPm9iamVjdCktPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSkgewogCQlyZXR1cm5fUFRSKE5VTEwpOwogCX0KIApAQCAtMjk0LDkgKzI5Miw5IEBACiAJQUNQSV9GVU5DVElPTl9UUkFDRV9QVFIobnNfZ2V0X3NlY29uZGFyeV9vYmplY3QsIG9ial9kZXNjKTsKIAogCWlmICgoIW9ial9kZXNjKSB8fAotCSAgICAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSB8fAorCSAgICAob2JqX2Rlc2MtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSB8fAogCSAgICAoIW9ial9kZXNjLT5jb21tb24ubmV4dF9vYmplY3QpIHx8Ci0JICAgIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYy0+Y29tbW9uLm5leHRfb2JqZWN0KSA9PQorCSAgICAoKG9ial9kZXNjLT5jb21tb24ubmV4dF9vYmplY3QpLT5jb21tb24udHlwZSA9PQogCSAgICAgQUNQSV9UWVBFX0xPQ0FMX0RBVEEpKSB7CiAJCXJldHVybl9QVFIoTlVMTCk7CiAJfQpAQCAtMzMxLDcgKzMyOSw3IEBACiAJcHJldl9vYmpfZGVzYyA9IE5VTEw7CiAJb2JqX2Rlc2MgPSBub2RlLT5vYmplY3Q7CiAJd2hpbGUgKG9ial9kZXNjKSB7Ci0JCWlmICgoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSAmJgorCQlpZiAoKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfREFUQSkgJiYKIAkJICAgIChvYmpfZGVzYy0+ZGF0YS5oYW5kbGVyID09IGhhbmRsZXIpKSB7CiAJCQlyZXR1cm4gKEFFX0FMUkVBRFlfRVhJU1RTKTsKIAkJfQpAQCAtMzg1LDcgKzM4Myw3IEBACiAJcHJldl9vYmpfZGVzYyA9IE5VTEw7CiAJb2JqX2Rlc2MgPSBub2RlLT5vYmplY3Q7CiAJd2hpbGUgKG9ial9kZXNjKSB7Ci0JCWlmICgoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9MT0NBTF9EQVRBKSAmJgorCQlpZiAoKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfREFUQSkgJiYKIAkJICAgIChvYmpfZGVzYy0+ZGF0YS5oYW5kbGVyID09IGhhbmRsZXIpKSB7CiAJCQlpZiAocHJldl9vYmpfZGVzYykgewogCQkJCXByZXZfb2JqX2Rlc2MtPmNvbW1vbi5uZXh0X29iamVjdCA9CkBAIC00MjgsNyArNDI2LDcgQEAKIAogCW9ial9kZXNjID0gbm9kZS0+b2JqZWN0OwogCXdoaWxlIChvYmpfZGVzYykgewotCQlpZiAoKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfTE9DQUxfREFUQSkgJiYKKwkJaWYgKChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0xPQ0FMX0RBVEEpICYmCiAJCSAgICAob2JqX2Rlc2MtPmRhdGEuaGFuZGxlciA9PSBoYW5kbGVyKSkgewogCQkJKmRhdGEgPSBvYmpfZGVzYy0+ZGF0YS5wb2ludGVyOwogCQkJcmV0dXJuIChBRV9PSyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcGFyc2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jCmluZGV4IGI5ZThkMDAuLjY2MmE0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jCkBAIC0xNzYsOSArMTc2LDggQEAKIAkgKiBwZXJmb3JtcyBhbm90aGVyIGNvbXBsZXRlIHBhcnNlIG9mIHRoZSBBTUwuCiAJICovCiAJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9QQVJTRSwgIioqKiogU3RhcnQgcGFzcyAxXG4iKSk7Ci0Jc3RhdHVzID0KLQkgICAgYWNwaV9uc19vbmVfY29tcGxldGVfcGFyc2UoQUNQSV9JTU9ERV9MT0FEX1BBU1MxLCB0YWJsZV9pbmRleCwKLQkJCQkgICAgICAgc3RhcnRfbm9kZSk7CisJc3RhdHVzID0gYWNwaV9uc19vbmVfY29tcGxldGVfcGFyc2UoQUNQSV9JTU9ERV9MT0FEX1BBU1MxLAorCQkJCQkgICAgdGFibGVfaW5kZXgsIHN0YXJ0X25vZGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC0xOTMsOSArMTkyLDggQEAKIAkgKiBwYXJzZSBvYmplY3RzIGFyZSBhbGwgY2FjaGVkLgogCSAqLwogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfUEFSU0UsICIqKioqIFN0YXJ0IHBhc3MgMlxuIikpOwotCXN0YXR1cyA9Ci0JICAgIGFjcGlfbnNfb25lX2NvbXBsZXRlX3BhcnNlKEFDUElfSU1PREVfTE9BRF9QQVNTMiwgdGFibGVfaW5kZXgsCi0JCQkJICAgICAgIHN0YXJ0X25vZGUpOworCXN0YXR1cyA9IGFjcGlfbnNfb25lX2NvbXBsZXRlX3BhcnNlKEFDUElfSU1PREVfTE9BRF9QQVNTMiwKKwkJCQkJICAgIHRhYmxlX2luZGV4LCBzdGFydF9ub2RlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jCmluZGV4IDQ1MjcwMzIuLmQ5ZThjYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVkZWYuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMKQEAgLTc5LDcgKzc5LDkgQEAKIHN0YXRpYyBhY3BpX3N0YXR1cwogYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKGNoYXIgKnBhdGhuYW1lLAogCQkJICAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiplbGVtZW50cywKLQkJCSAgICAgICB1OCB0eXBlMSwgdTMyIGNvdW50MSwgdTggdHlwZTIsIHUzMiBjb3VudDIpOworCQkJICAgICAgIHU4IHR5cGUxLAorCQkJICAgICAgIHUzMiBjb3VudDEsCisJCQkgICAgICAgdTggdHlwZTIsIHUzMiBjb3VudDIsIHUzMiBzdGFydF9pbmRleCk7CiAKIHN0YXRpYyBhY3BpX3N0YXR1cwogYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShjaGFyICpwYXRobmFtZSwKQEAgLTIyMSw3ICsyMjMsNyBAQAogCiAJLyogRm9yIHJldHVybmVkIFBhY2thZ2Ugb2JqZWN0cywgY2hlY2sgdGhlIHR5cGUgb2YgYWxsIHN1Yi1vYmplY3RzICovCiAKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUocmV0dXJuX29iamVjdCkgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKKwlpZiAocmV0dXJuX29iamVjdC0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfbnNfY2hlY2tfcGFja2FnZShwYXRobmFtZSwgcmV0dXJuX29iamVjdF9wdHIsCiAJCQkJCSAgcHJlZGVmaW5lZCk7CkBAIC0zMDIsNyArMzA0LDggQEAKIAkJaWYgKCh1c2VyX3BhcmFtX2NvdW50ICE9IHJlcXVpcmVkX3BhcmFtc19jdXJyZW50KSAmJgogCQkgICAgKHVzZXJfcGFyYW1fY291bnQgIT0gcmVxdWlyZWRfcGFyYW1zX29sZCkpIHsKIAkJCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCQkgICAgICAiJXM6IFBhcmFtZXRlciBjb3VudCBtaXNtYXRjaCAtIGNhbGxlciBwYXNzZWQgJWQsIEFDUEkgcmVxdWlyZXMgJWQiLAorCQkJCSAgICAgICIlczogUGFyYW1ldGVyIGNvdW50IG1pc21hdGNoIC0gIgorCQkJCSAgICAgICJjYWxsZXIgcGFzc2VkICVkLCBBQ1BJIHJlcXVpcmVzICVkIiwKIAkJCQkgICAgICBwYXRobmFtZSwgdXNlcl9wYXJhbV9jb3VudCwKIAkJCQkgICAgICByZXF1aXJlZF9wYXJhbXNfY3VycmVudCkpOwogCQl9CkBAIC00NzIsNyArNDc1LDcgQEAKIAkJCQkJCQlwYWNrYWdlLT5yZXRfaW5mby4KIAkJCQkJCQlvYmplY3RfdHlwZTIsCiAJCQkJCQkJcGFja2FnZS0+cmV0X2luZm8uCi0JCQkJCQkJY291bnQyKTsKKwkJCQkJCQljb3VudDIsIDApOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybiAoc3RhdHVzKTsKIAkJfQpAQCAtNjIzLDcgKzYyNiw3IEBACiAJCQkJCQkJCSAgIG9iamVjdF90eXBlMiwKIAkJCQkJCQkJICAgcGFja2FnZS0+CiAJCQkJCQkJCSAgIHJldF9pbmZvLgotCQkJCQkJCQkgICBjb3VudDIpOworCQkJCQkJCQkgICBjb3VudDIsIDApOwogCQkJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJCQlyZXR1cm4gKHN0YXR1cyk7CiAJCQkJfQpAQCAtNjcyLDcgKzY3NSw4IEBACiAJCQkJCQkJCSAgIG9iamVjdF90eXBlMSwKIAkJCQkJCQkJICAgc3ViX3BhY2thZ2UtPgogCQkJCQkJCQkgICBwYWNrYWdlLgotCQkJCQkJCQkgICBjb3VudCwgMCwgMCk7CisJCQkJCQkJCSAgIGNvdW50LCAwLCAwLAorCQkJCQkJCQkgICAwKTsKIAkJCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCQkJcmV0dXJuIChzdGF0dXMpOwogCQkJCX0KQEAgLTcxMCw3ICs3MTQsOCBAQAogCQkJCQkJCQkgICByZXRfaW5mby4KIAkJCQkJCQkJICAgb2JqZWN0X3R5cGUxLAogCQkJCQkJCQkgICAoZXhwZWN0ZWRfY291bnQKLQkJCQkJCQkJICAgIC0gMSksIDAsIDApOworCQkJCQkJCQkgICAgLSAxKSwgMCwgMCwKKwkJCQkJCQkJICAgMSk7CiAJCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQkJCXJldHVybiAoc3RhdHVzKTsKIAkJCQl9CkBAIC03NTgsNiArNzYzLDcgQEAKICAqICAgICAgICAgICAgICBDb3VudDEgICAgICAgICAgLSBDb3VudCBmb3IgZmlyc3QgZ3JvdXAKICAqICAgICAgICAgICAgICBUeXBlMiAgICAgICAgICAgLSBPYmplY3QgdHlwZSBmb3Igc2Vjb25kIGdyb3VwCiAgKiAgICAgICAgICAgICAgQ291bnQyICAgICAgICAgIC0gQ291bnQgZm9yIHNlY29uZCBncm91cAorICogICAgICAgICAgICAgIHN0YXJ0X2luZGV4ICAgICAtIFN0YXJ0IG9mIHRoZSBmaXJzdCBncm91cCBvZiBlbGVtZW50cwogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKICAqCkBAIC03NjksNyArNzc1LDkgQEAKIHN0YXRpYyBhY3BpX3N0YXR1cwogYWNwaV9uc19jaGVja19wYWNrYWdlX2VsZW1lbnRzKGNoYXIgKnBhdGhuYW1lLAogCQkJICAgICAgIHVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKiplbGVtZW50cywKLQkJCSAgICAgICB1OCB0eXBlMSwgdTMyIGNvdW50MSwgdTggdHlwZTIsIHUzMiBjb3VudDIpCisJCQkgICAgICAgdTggdHlwZTEsCisJCQkgICAgICAgdTMyIGNvdW50MSwKKwkJCSAgICAgICB1OCB0eXBlMiwgdTMyIGNvdW50MiwgdTMyIHN0YXJ0X2luZGV4KQogewogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKip0aGlzX2VsZW1lbnQgPSBlbGVtZW50czsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CkBAIC03ODIsNyArNzkwLDcgQEAKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY291bnQxOyBpKyspIHsKIAkJc3RhdHVzID0gYWNwaV9uc19jaGVja19vYmplY3RfdHlwZShwYXRobmFtZSwgdGhpc19lbGVtZW50LAotCQkJCQkJICAgdHlwZTEsIGkpOworCQkJCQkJICAgdHlwZTEsIGkgKyBzdGFydF9pbmRleCk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuIChzdGF0dXMpOwogCQl9CkBAIC03OTEsNyArNzk5LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDI7IGkrKykgewogCQlzdGF0dXMgPSBhY3BpX25zX2NoZWNrX29iamVjdF90eXBlKHBhdGhuYW1lLCB0aGlzX2VsZW1lbnQsCi0JCQkJCQkgICB0eXBlMiwgKGkgKyBjb3VudDEpKTsKKwkJCQkJCSAgIHR5cGUyLAorCQkJCQkJICAgKGkgKyBjb3VudDEgKyBzdGFydF9pbmRleCkpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXJldHVybiAoc3RhdHVzKTsKIAkJfQpAQCAtODU4LDcgKzg2Nyw3IEBACiAJICogZnJvbSBhbGwgb2YgdGhlIHByZWRlZmluZWQgbmFtZXMgKGluY2x1ZGluZyBlbGVtZW50cyBvZiByZXR1cm5lZAogCSAqIHBhY2thZ2VzKQogCSAqLwotCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUocmV0dXJuX29iamVjdCkpIHsKKwlzd2l0Y2ggKHJldHVybl9vYmplY3QtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJcmV0dXJuX2J0eXBlID0gQUNQSV9SVFlQRV9JTlRFR0VSOwogCQlicmVhazsKQEAgLTkwMSw3ICs5MTAsNyBAQAogCiAJLyogRm9yIHJlZmVyZW5jZSBvYmplY3RzLCBjaGVjayB0aGF0IHRoZSByZWZlcmVuY2UgdHlwZSBpcyBjb3JyZWN0ICovCiAKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUocmV0dXJuX29iamVjdCkgPT0gQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRSkgeworCWlmIChyZXR1cm5fb2JqZWN0LT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7CiAJCXN0YXR1cyA9IGFjcGlfbnNfY2hlY2tfcmVmZXJlbmNlKHBhdGhuYW1lLCByZXR1cm5fb2JqZWN0KTsKIAl9CiAKQEAgLTk3NCw3ICs5ODMsOCBAQAogCX0KIAogCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJICAgICAgIiVzOiBSZXR1cm4gdHlwZSBtaXNtYXRjaCAtIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIG9iamVjdCB0eXBlIFslc10gJTIuMlgiLAorCQkgICAgICAiJXM6IFJldHVybiB0eXBlIG1pc21hdGNoIC0gIgorCQkgICAgICAidW5leHBlY3RlZCByZWZlcmVuY2Ugb2JqZWN0IHR5cGUgWyVzXSAlMi4yWCIsCiAJCSAgICAgIHBhdGhuYW1lLCBhY3BpX3V0X2dldF9yZWZlcmVuY2VfbmFtZShyZXR1cm5fb2JqZWN0KSwKIAkJICAgICAgcmV0dXJuX29iamVjdC0+cmVmZXJlbmNlLmNsYXNzKSk7CiAKQEAgLTEwMDYsNyArMTAxNiw3IEBACiAJdW5pb24gYWNwaV9vcGVyYW5kX29iamVjdCAqbmV3X29iamVjdDsKIAlhY3BpX3NpemUgbGVuZ3RoOwogCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShyZXR1cm5fb2JqZWN0KSkgeworCXN3aXRjaCAocmV0dXJuX29iamVjdC0+Y29tbW9uLnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9CVUZGRVI6CiAKIAkJaWYgKCEoZXhwZWN0ZWRfYnR5cGVzICYgQUNQSV9SVFlQRV9TVFJJTkcpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zc2VhcmNoLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zc2VhcmNoLmMKaW5kZXggNmZlYTEzZi4uZjliNGY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3NlYXJjaC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNzZWFyY2guYwpAQCAtMTY3LDcgKzE2Nyw4IEBACiAJLyogU2VhcmNoZWQgZW50aXJlIG5hbWVzcGFjZSBsZXZlbCwgbm90IGZvdW5kICovCiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX05BTUVTLAotCQkJICAiTmFtZSBbJTQuNHNdICglcykgbm90IGZvdW5kIGluIHNlYXJjaCBpbiBzY29wZSBbJTQuNHNdICVwIGZpcnN0IGNoaWxkICVwXG4iLAorCQkJICAiTmFtZSBbJTQuNHNdICglcykgbm90IGZvdW5kIGluIHNlYXJjaCBpbiBzY29wZSBbJTQuNHNdICIKKwkJCSAgIiVwIGZpcnN0IGNoaWxkICVwXG4iLAogCQkJICBBQ1BJX0NBU1RfUFRSKGNoYXIsICZ0YXJnZXRfbmFtZSksCiAJCQkgIGFjcGlfdXRfZ2V0X3R5cGVfbmFtZSh0eXBlKSwKIAkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKHBhcmVudF9ub2RlKSwgcGFyZW50X25vZGUsCkBAIC0yMzksOSArMjQwLDggQEAKIAkJCSAgYWNwaV91dF9nZXRfbm9kZV9uYW1lKHBhcmVudF9ub2RlKSwKIAkJCSAgQUNQSV9DQVNUX1BUUihjaGFyLCAmdGFyZ2V0X25hbWUpKSk7CiAKLQkvKgotCSAqIFNlYXJjaCBwYXJlbnRzIHVudGlsIHRhcmdldCBpcyBmb3VuZCBvciB3ZSBoYXZlIGJhY2tlZCB1cCB0byB0aGUgcm9vdAotCSAqLworCS8qIFNlYXJjaCBwYXJlbnRzIHVudGlsIHRhcmdldCBpcyBmb3VuZCBvciB3ZSBoYXZlIGJhY2tlZCB1cCB0byB0aGUgcm9vdCAqLworCiAJd2hpbGUgKHBhcmVudF9ub2RlKSB7CiAJCS8qCiAJCSAqIFNlYXJjaCBwYXJlbnQgc2NvcGUuIFVzZSBUWVBFX0FOWSBiZWNhdXNlIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlCkBAIC0zOTUsOSArMzk1LDkgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJfQogI2lmZGVmIEFDUElfQVNMX0NPTVBJTEVSCi0JLyoKLQkgKiBOb2RlIGlzIGFuIG9iamVjdCBkZWZpbmVkIGJ5IGFuIEV4dGVybmFsKCkgc3RhdGVtZW50Ci0JICovCisKKwkvKiBOb2RlIGlzIGFuIG9iamVjdCBkZWZpbmVkIGJ5IGFuIEV4dGVybmFsKCkgc3RhdGVtZW50ICovCisKIAlpZiAoZmxhZ3MgJiBBQ1BJX05TX0VYVEVSTkFMKSB7CiAJCW5ld19ub2RlLT5mbGFncyB8PSBBTk9CSl9JU19FWFRFUk5BTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCmluZGV4IDNlMTE0OWIuLjc4Mjc3ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCkBAIC0zMjUsOSArMzI1LDggQEAKIAkJCW5leHRfZXh0ZXJuYWxfY2hhcisrOwogCQl9CiAJfSBlbHNlIHsKLQkJLyoKLQkJICogSGFuZGxlIENhcmF0IHByZWZpeGVzCi0JCSAqLworCQkvKiBIYW5kbGUgQ2FyYXQgcHJlZml4ZXMgKi8KKwogCQl3aGlsZSAoKm5leHRfZXh0ZXJuYWxfY2hhciA9PSAnXicpIHsKIAkJCWluZm8tPm51bV9jYXJhdHMrKzsKIAkJCW5leHRfZXh0ZXJuYWxfY2hhcisrOwpAQCAtNTUyLDkgKzU1MSw4IEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQkvKgotCSAqIENoZWNrIGZvciBhIHByZWZpeCAob25lICdcJyB8IG9uZSBvciBtb3JlICdeJykuCi0JICovCisJLyogQ2hlY2sgZm9yIGEgcHJlZml4IChvbmUgJ1wnIHwgb25lIG9yIG1vcmUgJ14nKSAqLworCiAJc3dpdGNoIChpbnRlcm5hbF9uYW1lWzBdKSB7CiAJY2FzZSAnXFwnOgogCQlwcmVmaXhfbGVuZ3RoID0gMTsKQEAgLTU4MCw3ICs1NzgsNyBAQAogCX0KIAogCS8qCi0JICogQ2hlY2sgZm9yIG9iamVjdCBuYW1lcy4gIE5vdGUgdGhhdCB0aGVyZSBjb3VsZCBiZSAwLTI1NSBvZiB0aGVzZQorCSAqIENoZWNrIGZvciBvYmplY3QgbmFtZXMuIE5vdGUgdGhhdCB0aGVyZSBjb3VsZCBiZSAwLTI1NSBvZiB0aGVzZQogCSAqIDQtYnl0ZSBlbGVtZW50cy4KIAkgKi8KIAlpZiAocHJlZml4X2xlbmd0aCA8IGludGVybmFsX25hbWVfbGVuZ3RoKSB7CkBAIC02MzcsOSArNjM1LDggQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVRITkFNRSk7CiAJfQogCi0JLyoKLQkgKiBCdWlsZCBjb252ZXJ0ZWRfbmFtZQotCSAqLworCS8qIEJ1aWxkIHRoZSBjb252ZXJ0ZWRfbmFtZSAqLworCiAJKmNvbnZlcnRlZF9uYW1lID0gQUNQSV9BTExPQ0FURV9aRVJPRUQocmVxdWlyZWRfbGVuZ3RoKTsKIAlpZiAoISgqY29udmVydGVkX25hbWUpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19NRU1PUlkpOwpAQCAtNjg1LDYgKzY4Miw5IEBACiAgKiAgICAgICBhbmQga2VlcCBhbGwgcG9pbnRlcnMgd2l0aGluIHRoaXMgc3Vic3lzdGVtIC0gaG93ZXZlciB0aGlzIGludHJvZHVjZXMKICAqICAgICAgIG1vcmUgKGFuZCBwZXJoYXBzIHVubmVjZXNzYXJ5KSBvdmVyaGVhZC4KICAqCisgKiBUaGUgY3VycmVudCBpbXBsZW1lbmF0aW9uIGlzIGJhc2ljYWxseSBhIHBsYWNlaG9sZGVyIHVudGlsIHN1Y2ggdGltZSBjb21lcworICogdGhhdCBpdCBpcyBuZWVkZWQuCisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmFjcGlfbnNfbWFwX2hhbmRsZV90b19ub2RlKGFjcGlfaGFuZGxlIGhhbmRsZSkKQEAgLTY5Miw5ICs2OTIsOCBAQAogCiAJQUNQSV9GVU5DVElPTl9FTlRSWSgpOwogCi0JLyoKLQkgKiBTaW1wbGUgaW1wbGVtZW50YXRpb24KLQkgKi8KKwkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLworCiAJaWYgKCghaGFuZGxlKSB8fCAoaGFuZGxlID09IEFDUElfUk9PVF9PQkpFQ1QpKSB7CiAJCXJldHVybiAoYWNwaV9nYmxfcm9vdF9ub2RlKTsKIAl9CkBAIC04NzIsNyArODcxLDcgQEAKIAkJCQkoZmxhZ3MgfCBBQ1BJX05TX0RPTlRfT1BFTl9TQ09QRSksIE5VTEwsCiAJCQkJcmV0dXJuX25vZGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICIlcywgJXNcbiIsCisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVhFQywgIiVzLCAlc1xuIiwKIAkJCQkgIHBhdGhuYW1lLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSkpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3dhbGsuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN3YWxrLmMKaW5kZXggMjAwODk1Zi4uODNlM2FhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3dhbGsuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zd2Fsay5jCkBAIC0xMzUsOCArMTM1LDggQEAKICAqICAgICAgICAgICAgICBzdGFydGluZyAoYW5kIGVuZGluZykgYXQgdGhlIG5vZGUgc3BlY2lmaWVkIGJ5IHN0YXJ0X2hhbmRsZS4KICAqICAgICAgICAgICAgICBUaGUgdXNlcl9mdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBub2RlIHRoYXQgbWF0Y2hlcwogICogICAgICAgICAgICAgIHRoZSB0eXBlIHBhcmFtZXRlciBpcyBmb3VuZC4gIElmIHRoZSB1c2VyIGZ1bmN0aW9uIHJldHVybnMKLSAqICAgICAgICAgICAgICBhIG5vbi16ZXJvIHZhbHVlLCB0aGUgc2VhcmNoIGlzIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkgYW5kIHRoaXMKLSAqICAgICAgICAgICAgICB2YWx1ZSBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgorICogICAgICAgICAgICAgIGEgbm9uLXplcm8gdmFsdWUsIHRoZSBzZWFyY2ggaXMgdGVybWluYXRlZCBpbW1lZGlhdGVseSBhbmQKKyAqICAgICAgICAgICAgICB0aGlzIHZhbHVlIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCiAgKgogICogICAgICAgICAgICAgIFRoZSBwb2ludCBvZiB0aGlzIHByb2NlZHVyZSBpcyB0byBwcm92aWRlIGEgZ2VuZXJpYyBuYW1lc3BhY2UKICAqICAgICAgICAgICAgICB3YWxrIHJvdXRpbmUgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzIHRvCkBAIC0yMDAsMTAgKzIwMCwxMCBAQAogCQkJLyoKIAkJCSAqIElnbm9yZSBhbGwgdGVtcG9yYXJ5IG5hbWVzcGFjZSBub2RlcyAoY3JlYXRlZCBkdXJpbmcgY29udHJvbAogCQkJICogbWV0aG9kIGV4ZWN1dGlvbikgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLiBUaGVzZSB0ZW1wb3Jhcnkgbm9kZXMKLQkJCSAqIGNhbiBjYXVzZSBhIHJhY2UgY29uZGl0aW9uIGJlY2F1c2UgdGhleSBjYW4gYmUgZGVsZXRlZCBkdXJpbmcgdGhlCi0JCQkgKiBleGVjdXRpb24gb2YgdGhlIHVzZXIgZnVuY3Rpb24gKGlmIHRoZSBuYW1lc3BhY2UgaXMgdW5sb2NrZWQgYmVmb3JlCi0JCQkgKiBpbnZvY2F0aW9uIG9mIHRoZSB1c2VyIGZ1bmN0aW9uLikgT25seSB0aGUgZGVidWdnZXIgbmFtZXNwYWNlIGR1bXAKLQkJCSAqIHdpbGwgZXhhbWluZSB0aGUgdGVtcG9yYXJ5IG5vZGVzLgorCQkJICogY2FuIGNhdXNlIGEgcmFjZSBjb25kaXRpb24gYmVjYXVzZSB0aGV5IGNhbiBiZSBkZWxldGVkIGR1cmluZworCQkJICogdGhlIGV4ZWN1dGlvbiBvZiB0aGUgdXNlciBmdW5jdGlvbiAoaWYgdGhlIG5hbWVzcGFjZSBpcworCQkJICogdW5sb2NrZWQgYmVmb3JlIGludm9jYXRpb24gb2YgdGhlIHVzZXIgZnVuY3Rpb24uKSBPbmx5IHRoZQorCQkJICogZGVidWdnZXIgbmFtZXNwYWNlIGR1bXAgd2lsbCBleGFtaW5lIHRoZSB0ZW1wb3Jhcnkgbm9kZXMuCiAJCQkgKi8KIAkJCWlmICgoY2hpbGRfbm9kZS0+ZmxhZ3MgJiBBTk9CSl9URU1QT1JBUlkpICYmCiAJCQkgICAgIShmbGFncyAmIEFDUElfTlNfV0FMS19URU1QX05PREVTKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jCmluZGV4IDIyYTcxNzEuLjA0NTA1NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4ZmV2YWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZldmFsLmMKQEAgLTM4Nyw4ICszODcsNyBAQAogCiAJLyogV2UgYXJlIGludGVyZXN0ZWQgaW4gcmVmZXJlbmNlIG9iamVjdHMgb25seSAqLwogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8tPnJldHVybl9vYmplY3QpICE9Ci0JICAgIEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UpIHsKKwlpZiAoKGluZm8tPnJldHVybl9vYmplY3QpLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfTE9DQUxfUkVGRVJFTkNFKSB7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQ3NiwyMSArNDc1LDQwIEBACiAJfQogCiAJLyoKLQkgKiBMb2NrIHRoZSBuYW1lc3BhY2UgYXJvdW5kIHRoZSB3YWxrLgotCSAqIFRoZSBuYW1lc3BhY2Ugd2lsbCBiZSB1bmxvY2tlZC9sb2NrZWQgYXJvdW5kIGVhY2ggY2FsbAotCSAqIHRvIHRoZSB1c2VyIGZ1bmN0aW9uIC0gc2luY2UgdGhpcyBmdW5jdGlvbgotCSAqIG11c3QgYmUgYWxsb3dlZCB0byBtYWtlIEFjcGkgY2FsbHMgaXRzZWxmLgorCSAqIE5lZWQgdG8gYWNxdWlyZSB0aGUgbmFtZXNwYWNlIHJlYWRlciBsb2NrIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlCisJICogd2l0aCBhbnkgY29uY3VycmVudCB0YWJsZSB1bmxvYWRzICh3aGljaCBjYXVzZXMgdGhlIGRlbGV0aW9uIG9mCisJICogbmFtZXNwYWNlIG9iamVjdHMpLiBXZSBjYW5ub3QgYWxsb3cgdGhlIGRlbGV0aW9uIG9mIGEgbmFtZXNwYWNlIG5vZGUKKwkgKiB3aGlsZSB0aGUgdXNlciBmdW5jdGlvbiBpcyB1c2luZyBpdC4gVGhlIGV4Y2VwdGlvbiB0byB0aGlzIGFyZSB0aGUKKwkgKiBub2RlcyBjcmVhdGVkIGFuZCBkZWxldGVkIGR1cmluZyBjb250cm9sIG1ldGhvZCBleGVjdXRpb24gLS0gdGhlc2UKKwkgKiBub2RlcyBhcmUgbWFya2VkIGFzIHRlbXBvcmFyeSBub2RlcyBhbmQgYXJlIGlnbm9yZWQgYnkgdGhlIG5hbWVzcGFjZQorCSAqIHdhbGsuIFRodXMsIGNvbnRyb2wgbWV0aG9kcyBjYW4gYmUgZXhlY3V0ZWQgd2hpbGUgaG9sZGluZyB0aGUKKwkgKiBuYW1lc3BhY2UgZGVsZXRpb24gbG9jayAoYW5kIHRoZSB1c2VyIGZ1bmN0aW9uIGNhbiBleGVjdXRlIGNvbnRyb2wKKwkgKiBtZXRob2RzLikKKwkgKi8KKwlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfcmVhZF9sb2NrKCZhY3BpX2dibF9uYW1lc3BhY2VfcndfbG9jayk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyoKKwkgKiBMb2NrIHRoZSBuYW1lc3BhY2UgYXJvdW5kIHRoZSB3YWxrLiBUaGUgbmFtZXNwYWNlIHdpbGwgYmUKKwkgKiB1bmxvY2tlZC9sb2NrZWQgYXJvdW5kIGVhY2ggY2FsbCB0byB0aGUgdXNlciBmdW5jdGlvbiAtIHNpbmNlIHRoZSB1c2VyCisJICogZnVuY3Rpb24gbXVzdCBiZSBhbGxvd2VkIHRvIG1ha2UgQUNQSUNBIGNhbGxzIGl0c2VsZiAoZm9yIGV4YW1wbGUsIGl0CisJICogd2lsbCB0eXBpY2FsbHkgZXhlY3V0ZSBjb250cm9sIG1ldGhvZHMgZHVyaW5nIGRldmljZSBlbnVtZXJhdGlvbi4pCiAJICovCiAJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CiAKIAlzdGF0dXMgPSBhY3BpX25zX3dhbGtfbmFtZXNwYWNlKHR5cGUsIHN0YXJ0X29iamVjdCwgbWF4X2RlcHRoLAotCQkJCQlBQ1BJX05TX1dBTEtfVU5MT0NLLAotCQkJCQl1c2VyX2Z1bmN0aW9uLCBjb250ZXh0LCByZXR1cm5fdmFsdWUpOworCQkJCQlBQ1BJX05TX1dBTEtfVU5MT0NLLCB1c2VyX2Z1bmN0aW9uLAorCQkJCQljb250ZXh0LCByZXR1cm5fdmFsdWUpOwogCiAJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7CisKKyAgICAgIHVubG9ja19hbmRfZXhpdDoKKwkodm9pZClhY3BpX3V0X3JlbGVhc2VfcmVhZF9sb2NrKCZhY3BpX2dibF9uYW1lc3BhY2VfcndfbG9jayk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjYWxjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY2FsYy5jCmluZGV4IDUyODY1ZWUuLmI2NjY3ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjYWxjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NhbGMuYwpAQCAtNTU3LDkgKzU1Nyw5IEBACiAJCSAgICAgdGFibGVfaW5kZXgrKykgewogCQkJaWYgKCpzdWJfb2JqZWN0X2xpc3QgJiYJLyogTnVsbCBvYmplY3QgYWxsb3dlZCAqLwogCQkJICAgICgoQUNQSV9UWVBFX1NUUklORyA9PQotCQkJICAgICAgQUNQSV9HRVRfT0JKRUNUX1RZUEUoKnN1Yl9vYmplY3RfbGlzdCkpIHx8CisJCQkgICAgICAoKnN1Yl9vYmplY3RfbGlzdCktPmNvbW1vbi50eXBlKSB8fAogCQkJICAgICAoKEFDUElfVFlQRV9MT0NBTF9SRUZFUkVOQ0UgPT0KLQkJCSAgICAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRSgqc3ViX29iamVjdF9saXN0KSkgJiYKKwkJCSAgICAgICAoKnN1Yl9vYmplY3RfbGlzdCktPmNvbW1vbi50eXBlKSAmJgogCQkJICAgICAgKCgqc3ViX29iamVjdF9saXN0KS0+cmVmZXJlbmNlLmNsYXNzID09CiAJCQkgICAgICAgQUNQSV9SRUZDTEFTU19OQU1FKSkpKSB7CiAJCQkJbmFtZV9mb3VuZCA9IFRSVUU7CkBAIC01NzUsOCArNTc1LDcgQEAKIAkJLyogV2FzIGEgU3RyaW5nIHR5cGUgZm91bmQ/ICovCiAKIAkJaWYgKG5hbWVfZm91bmQpIHsKLQkJCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRSgqc3ViX29iamVjdF9saXN0KSA9PQotCQkJICAgIEFDUElfVFlQRV9TVFJJTkcpIHsKKwkJCWlmICgoKnN1Yl9vYmplY3RfbGlzdCktPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9TVFJJTkcpIHsKIAkJCQkvKgogCQkJCSAqIFRoZSBsZW5ndGggU3RyaW5nLkxlbmd0aCBmaWVsZCBkb2VzIG5vdCBpbmNsdWRlIHRoZQogCQkJCSAqIHRlcm1pbmF0aW5nIE5VTEwsIGFkZCAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY3JlYXRlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY3JlYXRlLmMKaW5kZXggNjE1NjZiMS4uNjYzZjY5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NyZWF0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjcmVhdGUuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAKIAkJLyogRWFjaCBlbGVtZW50IG9mIHRoZSB0b3AtbGV2ZWwgcGFja2FnZSBtdXN0IGFsc28gYmUgYSBwYWNrYWdlICovCiAKLQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKCp0b3Bfb2JqZWN0X2xpc3QpICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJCWlmICgoKnRvcF9vYmplY3RfbGlzdCktPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7CiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJCSAgICAiKFBSVFslWF0pIE5lZWQgc3ViLXBhY2thZ2UsIGZvdW5kICVzIiwKIAkJCQkgICAgaW5kZXgsCkBAIC0yNDAsNyArMjQwLDcgQEAKIAkJLyogMSkgRmlyc3Qgc3Vib2JqZWN0OiBEZXJlZmVyZW5jZSB0aGUgUFJULkFkZHJlc3MgKi8KIAogCQlvYmpfZGVzYyA9IHN1Yl9vYmplY3RfbGlzdFswXTsKLQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgeworCQlpZiAob2JqX2Rlc2MtPmNvbW1vbi50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CiAJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJCSAgICAiKFBSVFslWF0uQWRkcmVzcykgTmVlZCBJbnRlZ2VyLCBmb3VuZCAlcyIsCiAJCQkJICAgIGluZGV4LApAQCAtMjUzLDcgKzI1Myw3IEBACiAJCS8qIDIpIFNlY29uZCBzdWJvYmplY3Q6IERlcmVmZXJlbmNlIHRoZSBQUlQuUGluICovCiAKIAkJb2JqX2Rlc2MgPSBzdWJfb2JqZWN0X2xpc3RbMV07Ci0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgewogCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKIAkJCQkgICAgIihQUlRbJVhdLlBpbikgTmVlZCBJbnRlZ2VyLCBmb3VuZCAlcyIsCiAJCQkJICAgIGluZGV4LApAQCAtMjY1LDcgKzI2NSw3IEBACiAJCSAqIElmIEJJT1MgZXJyb25lb3VzbHkgcmV2ZXJzZWQgdGhlIF9QUlQgc291cmNlX25hbWUgYW5kIHNvdXJjZV9pbmRleCwKIAkJICogdGhlbiByZXZlcnNlIHRoZW0gYmFjay4KIAkJICovCi0JCWlmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzdWJfb2JqZWN0X2xpc3RbM10pICE9CisJCWlmICgoc3ViX29iamVjdF9saXN0WzNdKS0+Y29tbW9uLnR5cGUgIT0KIAkJICAgIEFDUElfVFlQRV9JTlRFR0VSKSB7CiAJCQlpZiAoYWNwaV9nYmxfZW5hYmxlX2ludGVycHJldGVyX3NsYWNrKSB7CiAJCQkJc291cmNlX25hbWVfaW5kZXggPSAzOwpAQCAtMjkxLDggKzI5MSw3IEBACiAJCSAqIG90aGVyIEFDUEkgaW1wbGVtZW50YXRpb25zLgogCQkgKi8KIAkJb2JqX2Rlc2MgPSBzdWJfb2JqZWN0X2xpc3RbM107Ci0JCWlmICghb2JqX2Rlc2MKLQkJICAgIHx8IChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykgIT0gQUNQSV9UWVBFX0lOVEVHRVIpKSB7CisJCWlmICghb2JqX2Rlc2MgfHwgKG9ial9kZXNjLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikpIHsKIAkJCXN1Yl9vYmplY3RfbGlzdFszXSA9IHN1Yl9vYmplY3RfbGlzdFsyXTsKIAkJCXN1Yl9vYmplY3RfbGlzdFsyXSA9IG9ial9kZXNjOwogCkBAIC0zMDcsNyArMzA2LDcgQEAKIAkJICovCiAJCW9ial9kZXNjID0gc3ViX29iamVjdF9saXN0W3NvdXJjZV9uYW1lX2luZGV4XTsKIAkJaWYgKG9ial9kZXNjKSB7Ci0JCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSkgeworCQkJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAkJCWNhc2UgQUNQSV9UWVBFX0xPQ0FMX1JFRkVSRU5DRToKIAogCQkJCWlmIChvYmpfZGVzYy0+cmVmZXJlbmNlLmNsYXNzICE9CkBAIC0zODAsNyArMzc5LDcgQEAKIAkJLyogNCkgRm91cnRoIHN1Ym9iamVjdDogRGVyZWZlcmVuY2UgdGhlIFBSVC5zb3VyY2VfaW5kZXggKi8KIAogCQlvYmpfZGVzYyA9IHN1Yl9vYmplY3RfbGlzdFtzb3VyY2VfaW5kZXhfaW5kZXhdOwotCQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKIAkJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkJICAgICIoUFJUWyVYXS5Tb3VyY2VJbmRleCkgTmVlZCBJbnRlZ2VyLCBmb3VuZCAlcyIsCiAJCQkJICAgIGluZGV4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90YmZhZHQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmYWR0LmMKaW5kZXggMzYzNmU0Zi4uNzFlNjU1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90YmZhZHQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmFkdC5jCkBAIC01Nyw2ICs1Nyw4IEBACiAKIHN0YXRpYyB2b2lkIGFjcGlfdGJfdmFsaWRhdGVfZmFkdCh2b2lkKTsKIAorc3RhdGljIHZvaWQgYWNwaV90Yl9zZXR1cF9mYWR0X3JlZ2lzdGVycyh2b2lkKTsKKwogLyogVGFibGUgZm9yIGNvbnZlcnNpb24gb2YgRkFEVCB0byBjb21tb24gaW50ZXJuYWwgZm9ybWF0IGFuZCBGQURUIHZhbGlkYXRpb24gKi8KIAogdHlwZWRlZiBzdHJ1Y3QgYWNwaV9mYWR0X2luZm8gewpAQCAtMTMwLDcgKzEzMiwzOCBAQAogCSBBQ1BJX0ZBRFRfU0VQQVJBVEVfTEVOR1RIfQogfTsKIAotI2RlZmluZSBBQ1BJX0ZBRFRfSU5GT19FTlRSSUVTICAgICAgICAoc2l6ZW9mIChmYWR0X2luZm9fdGFibGUpIC8gc2l6ZW9mIChzdHJ1Y3QgYWNwaV9mYWR0X2luZm8pKQorI2RlZmluZSBBQ1BJX0ZBRFRfSU5GT19FTlRSSUVTIFwKKwkJCShzaXplb2YgKGZhZHRfaW5mb190YWJsZSkgLyBzaXplb2YgKHN0cnVjdCBhY3BpX2ZhZHRfaW5mbykpCisKKy8qIFRhYmxlIHVzZWQgdG8gc3BsaXQgRXZlbnQgQmxvY2tzIGludG8gc2VwYXJhdGUgc3RhdHVzL2VuYWJsZSByZWdpc3RlcnMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgYWNwaV9mYWR0X3BtX2luZm8geworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqdGFyZ2V0OworCXU4IHNvdXJjZTsKKwl1OCByZWdpc3Rlcl9udW07CisKK30gYWNwaV9mYWR0X3BtX2luZm87CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9mYWR0X3BtX2luZm8gZmFkdF9wbV9pbmZvX3RhYmxlW10gPSB7CisJeyZhY3BpX2dibF94cG0xYV9zdGF0dXMsCisJIEFDUElfRkFEVF9PRkZTRVQoeHBtMWFfZXZlbnRfYmxvY2spLAorCSAwfSwKKworCXsmYWNwaV9nYmxfeHBtMWFfZW5hYmxlLAorCSBBQ1BJX0ZBRFRfT0ZGU0VUKHhwbTFhX2V2ZW50X2Jsb2NrKSwKKwkgMX0sCisKKwl7JmFjcGlfZ2JsX3hwbTFiX3N0YXR1cywKKwkgQUNQSV9GQURUX09GRlNFVCh4cG0xYl9ldmVudF9ibG9jayksCisJIDB9LAorCisJeyZhY3BpX2dibF94cG0xYl9lbmFibGUsCisJIEFDUElfRkFEVF9PRkZTRVQoeHBtMWJfZXZlbnRfYmxvY2spLAorCSAxfQorfTsKKworI2RlZmluZSBBQ1BJX0ZBRFRfUE1fSU5GT19FTlRSSUVTIFwKKwkJCShzaXplb2YgKGZhZHRfcG1faW5mb190YWJsZSkgLyBzaXplb2YgKHN0cnVjdCBhY3BpX2ZhZHRfcG1faW5mbykpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMTcyLDcgKzIwNSw2IEBACiAgKiBGVU5DVElPTjogICAgYWNwaV90Yl9wYXJzZV9mYWR0CiAgKgogICogUEFSQU1FVEVSUzogIHRhYmxlX2luZGV4ICAgICAgICAgLSBJbmRleCBmb3IgdGhlIEZBRFQKLSAqICAgICAgICAgICAgICBGbGFncyAgICAgICAgICAgICAgIC0gRmxhZ3MKICAqCiAgKiBSRVRVUk46ICAgICAgTm9uZQogICoKQEAgLTE4MSw3ICsyMTMsNyBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgYWNwaV90Yl9wYXJzZV9mYWR0KHUzMiB0YWJsZV9pbmRleCwgdTggZmxhZ3MpCit2b2lkIGFjcGlfdGJfcGFyc2VfZmFkdCh1MzIgdGFibGVfaW5kZXgpCiB7CiAJdTMyIGxlbmd0aDsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlOwpAQCAtMjA4LDcgKzI0MCw3IEBACiAJICovCiAJKHZvaWQpYWNwaV90Yl92ZXJpZnlfY2hlY2tzdW0odGFibGUsIGxlbmd0aCk7CiAKLQkvKiBPYnRhaW4gYSBsb2NhbCBjb3B5IG9mIHRoZSBGQURUIGluIGNvbW1vbiBBQ1BJIDIuMCsgZm9ybWF0ICovCisJLyogQ3JlYXRlIGEgbG9jYWwgY29weSBvZiB0aGUgRkFEVCBpbiBjb21tb24gQUNQSSAyLjArIGZvcm1hdCAqLwogCiAJYWNwaV90Yl9jcmVhdGVfbG9jYWxfZmFkdCh0YWJsZSwgbGVuZ3RoKTsKIApAQCAtMjE5LDEwICsyNTEsMTAgQEAKIAkvKiBPYnRhaW4gdGhlIERTRFQgYW5kIEZBQ1MgdGFibGVzIHZpYSB0aGVpciBhZGRyZXNzZXMgd2l0aGluIHRoZSBGQURUICovCiAKIAlhY3BpX3RiX2luc3RhbGxfdGFibGUoKGFjcGlfcGh5c2ljYWxfYWRkcmVzcykgYWNwaV9nYmxfRkFEVC5YZHNkdCwKLQkJCSAgICAgIGZsYWdzLCBBQ1BJX1NJR19EU0RULCBBQ1BJX1RBQkxFX0lOREVYX0RTRFQpOworCQkJICAgICAgQUNQSV9TSUdfRFNEVCwgQUNQSV9UQUJMRV9JTkRFWF9EU0RUKTsKIAogCWFjcGlfdGJfaW5zdGFsbF90YWJsZSgoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSBhY3BpX2dibF9GQURULlhmYWNzLAotCQkJICAgICAgZmxhZ3MsIEFDUElfU0lHX0ZBQ1MsIEFDUElfVEFCTEVfSU5ERVhfRkFDUyk7CisJCQkgICAgICBBQ1BJX1NJR19GQUNTLCBBQ1BJX1RBQkxFX0lOREVYX0ZBQ1MpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjY2LDExICsyOTgsMTcgQEAKIAlBQ1BJX01FTUNQWSgmYWNwaV9nYmxfRkFEVCwgdGFibGUsCiAJCSAgICBBQ1BJX01JTihsZW5ndGgsIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9mYWR0KSkpOwogCi0JLyoKLQkgKiAxKSBDb252ZXJ0IHRoZSBsb2NhbCBjb3B5IG9mIHRoZSBGQURUIHRvIHRoZSBjb21tb24gaW50ZXJuYWwgZm9ybWF0Ci0JICogMikgVmFsaWRhdGUgc29tZSBvZiB0aGUgaW1wb3J0YW50IHZhbHVlcyB3aXRoaW4gdGhlIEZBRFQKLQkgKi8KKwkvKiBDb252ZXJ0IHRoZSBsb2NhbCBjb3B5IG9mIHRoZSBGQURUIHRvIHRoZSBjb21tb24gaW50ZXJuYWwgZm9ybWF0ICovCisKIAlhY3BpX3RiX2NvbnZlcnRfZmFkdCgpOworCisJLyogVmFsaWRhdGUgRkFEVCB2YWx1ZXMgbm93LCBiZWZvcmUgd2UgbWFrZSBhbnkgY2hhbmdlcyAqLworCisJYWNwaV90Yl92YWxpZGF0ZV9mYWR0KCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBnbG9iYWwgQUNQSSByZWdpc3RlciBzdHJ1Y3R1cmVzICovCisKKwlhY3BpX3RiX3NldHVwX2ZhZHRfcmVnaXN0ZXJzKCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yODIsMzEgKzMyMCwzNSBAQAogICogUkVUVVJOOiAgICAgIE5vbmUKICAqCiAgKiBERVNDUklQVElPTjogQ29udmVydHMgYWxsIHZlcnNpb25zIG9mIHRoZSBGQURUIHRvIGEgY29tbW9uIGludGVybmFsIGZvcm1hdC4KLSAqICAgICAgICAgICAgICBFeHBhbmQgYWxsIDMyLWJpdCBhZGRyZXNzZXMgdG8gNjQtYml0LgorICogICAgICAgICAgICAgIEV4cGFuZCAzMi1iaXQgYWRkcmVzc2VzIHRvIDY0LWJpdCBhcyBuZWNlc3NhcnkuCiAgKgogICogTk9URTogICAgICAgIGFjcGlfZ2JsX0ZBRFQgbXVzdCBiZSBvZiBzaXplIChzdHJ1Y3QgYWNwaV90YWJsZV9mYWR0KSwKICAqICAgICAgICAgICAgICBhbmQgbXVzdCBjb250YWluIGEgY29weSBvZiB0aGUgYWN0dWFsIEZBRFQuCiAgKgotICogQUNQSUNBIHdpbGwgdXNlIHRoZSAiWCIgZmllbGRzIG9mIHRoZSBGQURUIGZvciBhbGwgYWRkcmVzc2VzLgorICogTm90ZXMgb24gNjQtYml0IHJlZ2lzdGVyIGFkZHJlc3NlczoKICAqCi0gKiAiWCIgZmllbGRzIGFyZSBvcHRpb25hbCBleHRlbnNpb25zIHRvIHRoZSBvcmlnaW5hbCBWMS4wIGZpZWxkcy4gRXZlbiBpZgotICogdGhleSBhcmUgcHJlc2VudCBpbiB0aGUgc3RydWN0dXJlLCB0aGV5IGNhbiBiZSBvcHRpb25hbGx5IG5vdCB1c2VkIGJ5Ci0gKiBzZXR0aW5nIHRoZW0gdG8gemVyby4gVGhlcmVmb3JlLCB3ZSBtdXN0IHNlbGVjdGl2ZWx5IGV4cGFuZCBWMS4wIGZpZWxkcwotICogaWYgdGhlIGNvcnJlc3BvbmRpbmcgWCBmaWVsZCBpcyB6ZXJvLgorICogQWZ0ZXIgdGhpcyBGQURUIGNvbnZlcnNpb24sIGxhdGVyIEFDUElDQSBjb2RlIHdpbGwgb25seSB1c2UgdGhlIDY0LWJpdCAiWCIKKyAqIGZpZWxkcyBvZiB0aGUgRkFEVCBmb3IgYWxsIEFDUEkgcmVnaXN0ZXIgYWRkcmVzc2VzLgogICoKLSAqIEZvciBBQ1BJIDEuMCBGQURUcywgYWxsIGFkZHJlc3MgZmllbGRzIGFyZSBleHBhbmRlZCB0byB0aGUgY29ycmVzcG9uZGluZwotICogIlgiIGZpZWxkcy4KKyAqIFRoZSA2NC1iaXQgIlgiIGZpZWxkcyBhcmUgb3B0aW9uYWwgZXh0ZW5zaW9ucyB0byB0aGUgb3JpZ2luYWwgMzItYml0IEZBRFQKKyAqIFYxLjAgZmllbGRzLiBFdmVuIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIEZBRFQsIHRoZXkgYXJlIG9wdGlvbmFsIGFuZAorICogYXJlIHVudXNlZCBpZiB0aGUgQklPUyBzZXRzIHRoZW0gdG8gemVyby4gVGhlcmVmb3JlLCB3ZSBtdXN0IGNvcHkvZXhwYW5kCisgKiAzMi1iaXQgVjEuMCBmaWVsZHMgaWYgdGhlIGNvcnJlc3BvbmRpbmcgWCBmaWVsZCBpcyB6ZXJvLgogICoKLSAqIEZvciBBQ1BJIDIuMCBGQURUcywgYW55ICJYIiBmaWVsZHMgdGhhdCBhcmUgTlVMTCBhcmUgZmlsbGVkIGluIGJ5Ci0gKiBleHBhbmRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgQUNQSSAxLjAgZmllbGQuCisgKiBGb3IgQUNQSSAxLjAgRkFEVHMsIGFsbCAzMi1iaXQgYWRkcmVzcyBmaWVsZHMgYXJlIGV4cGFuZGVkIHRvIHRoZQorICogY29ycmVzcG9uZGluZyAiWCIgZmllbGRzIGluIHRoZSBpbnRlcm5hbCBGQURULgorICoKKyAqIEZvciBBQ1BJIDIuMCsgRkFEVHMsIGFsbCB2YWxpZCAobm9uLXplcm8pIDMyLWJpdCBhZGRyZXNzIGZpZWxkcyBhcmUgZXhwYW5kZWQKKyAqIHRvIHRoZSBjb3JyZXNwb25kaW5nIDY0LWJpdCBYIGZpZWxkcy4gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBBQ1BJCisgKiBpbXBsZW1lbnRhdGlvbnMsIHdlIGlnbm9yZSB0aGUgNjQtYml0IGZpZWxkIGlmIHRoZSAzMi1iaXQgZmllbGQgaXMgdmFsaWQsCisgKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGhvc3QgT1MgaXMgMzItYml0IG9yIDY0LWJpdC4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgdm9pZCBhY3BpX3RiX2NvbnZlcnRfZmFkdCh2b2lkKQogewotCXU4IHBtMV9yZWdpc3Rlcl9iaXRfd2lkdGg7Ci0JdTggcG0xX3JlZ2lzdGVyX2J5dGVfd2lkdGg7Ci0Jc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICp0YXJnZXQ2NDsKKwlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKmFkZHJlc3M2NDsKKwl1MzIgYWRkcmVzczMyOwogCXUzMiBpOwogCiAJLyogVXBkYXRlIHRoZSBsb2NhbCBGQURUIHRhYmxlIGhlYWRlciBsZW5ndGggKi8KQEAgLTM1NSwzNSArMzk3LDE5MyBAQAogCSAqIEV4cGFuZCB0aGUgQUNQSSAxLjAgMzItYml0IGFkZHJlc3NlcyB0byB0aGUgQUNQSSAyLjAgNjQtYml0ICJYIgogCSAqIGdlbmVyaWMgYWRkcmVzcyBzdHJ1Y3R1cmVzIGFzIG5lY2Vzc2FyeS4gTGF0ZXIgY29kZSB3aWxsIGFsd2F5cyB1c2UKIAkgKiB0aGUgNjQtYml0IGFkZHJlc3Mgc3RydWN0dXJlcy4KKwkgKgorCSAqIE1hcmNoIDIwMDk6CisJICogV2Ugbm93IGFsd2F5cyB1c2UgdGhlIDMyLWJpdCBhZGRyZXNzIGlmIGl0IGlzIHZhbGlkIChub24tbnVsbCkuIFRoaXMKKwkgKiBpcyBub3QgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24gd2hpY2ggc3RhdGVzIHRoYXQKKwkgKiB0aGUgNjQtYml0IGFkZHJlc3Mgc3VwZXJzZWRlcyB0aGUgMzItYml0IHZlcnNpb24sIGJ1dCB3ZSBkbyB0aGlzIGZvcgorCSAqIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBBQ1BJIGltcGxlbWVudGF0aW9ucy4gTW9zdCBub3RhYmx5LCBpbiB0aGUKKwkgKiBjYXNlIHdoZXJlIGJvdGggdGhlIDMyIGFuZCA2NCB2ZXJzaW9ucyBhcmUgbm9uLW51bGwsIHdlIHVzZSB0aGUgMzItYml0CisJICogdmVyc2lvbi4gVGhpcyBpcyB0aGUgb25seSBhZGRyZXNzIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGJlZW4KKwkgKiB0ZXN0ZWQgYnkgdGhlIEJJT1MgbWFudWZhY3R1cmVyLgogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBBQ1BJX0ZBRFRfSU5GT19FTlRSSUVTOyBpKyspIHsKLQkJdGFyZ2V0NjQgPQotCQkgICAgQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcywgJmFjcGlfZ2JsX0ZBRFQsCi0JCQkJIGZhZHRfaW5mb190YWJsZVtpXS5hZGRyZXNzNjQpOworCQlhZGRyZXNzMzIgPSAqQUNQSV9BRERfUFRSKHUzMiwKKwkJCQkJICAmYWNwaV9nYmxfRkFEVCwKKwkJCQkJICBmYWR0X2luZm9fdGFibGVbaV0uYWRkcmVzczMyKTsKIAotCQkvKiBFeHBhbmQgb25seSBpZiB0aGUgNjQtYml0IFggdGFyZ2V0IGlzIG51bGwgKi8KKwkJYWRkcmVzczY0ID0gQUNQSV9BRERfUFRSKHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcywKKwkJCQkJICZhY3BpX2dibF9GQURULAorCQkJCQkgZmFkdF9pbmZvX3RhYmxlW2ldLmFkZHJlc3M2NCk7CiAKLQkJaWYgKCF0YXJnZXQ2NC0+YWRkcmVzcykgeworCQkvKgorCQkgKiBJZiBib3RoIDMyLSBhbmQgNjQtYml0IGFkZHJlc3NlcyBhcmUgdmFsaWQgKG5vbi16ZXJvKSwKKwkJICogdGhleSBtdXN0IG1hdGNoLgorCQkgKi8KKwkJaWYgKGFkZHJlc3M2NC0+YWRkcmVzcyAmJiBhZGRyZXNzMzIgJiYKKwkJICAgIChhZGRyZXNzNjQtPmFkZHJlc3MgIT0gKHU2NCkgYWRkcmVzczMyKSkgeworCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCQkgICAgIjMyLzY0WCBhZGRyZXNzIG1pc21hdGNoIGluICVzOiAlOC44WC8lOC44WCU4LjhYLCB1c2luZyAzMiIsCisJCQkJICAgIGZhZHRfaW5mb190YWJsZVtpXS5uYW1lLCBhZGRyZXNzMzIsCisJCQkJICAgIEFDUElfRk9STUFUX1VJTlQ2NChhZGRyZXNzNjQtPmFkZHJlc3MpKSk7CisJCX0KIAotCQkJLyogVGhlIHNwYWNlX2lkIGlzIGFsd2F5cyBJL08gZm9yIHRoZSAzMi1iaXQgbGVnYWN5IGFkZHJlc3MgZmllbGRzICovCisJCS8qIEFsd2F5cyB1c2UgMzItYml0IGFkZHJlc3MgaWYgaXQgaXMgdmFsaWQgKG5vbi1udWxsKSAqLwogCi0JCQlhY3BpX3RiX2luaXRfZ2VuZXJpY19hZGRyZXNzKHRhcmdldDY0LAorCQlpZiAoYWRkcmVzczMyKSB7CisJCQkvKgorCQkJICogQ29weSB0aGUgMzItYml0IGFkZHJlc3MgdG8gdGhlIDY0LWJpdCBHQVMgc3RydWN0dXJlLiBUaGUKKwkJCSAqIFNwYWNlIElEIGlzIGFsd2F5cyBJL08gZm9yIDMyLWJpdCBsZWdhY3kgYWRkcmVzcyBmaWVsZHMKKwkJCSovCisJCQlhY3BpX3RiX2luaXRfZ2VuZXJpY19hZGRyZXNzKGFkZHJlc3M2NCwKIAkJCQkJCSAgICAgQUNQSV9BRFJfU1BBQ0VfU1lTVEVNX0lPLAogCQkJCQkJICAgICAqQUNQSV9BRERfUFRSKHU4LAogCQkJCQkJCQkgICAmYWNwaV9nYmxfRkFEVCwKIAkJCQkJCQkJICAgZmFkdF9pbmZvX3RhYmxlCiAJCQkJCQkJCSAgIFtpXS5sZW5ndGgpLAotCQkJCQkJICAgICAodTY0KSAqIEFDUElfQUREX1BUUih1MzIsCi0JCQkJCQkJCQkgICZhY3BpX2dibF9GQURULAotCQkJCQkJCQkJICBmYWR0X2luZm9fdGFibGUKLQkJCQkJCQkJCSAgW2ldLgotCQkJCQkJCQkJICBhZGRyZXNzMzIpKTsKKwkJCQkJCSAgICAgYWRkcmVzczMyKTsKIAkJfQogCX0KK30KIAotCS8qIFZhbGlkYXRlIEZBRFQgdmFsdWVzIG5vdywgYmVmb3JlIHdlIG1ha2UgYW55IGNoYW5nZXMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdGJfdmFsaWRhdGVfZmFkdAorICoKKyAqIFBBUkFNRVRFUlM6ICBUYWJsZSAgICAgICAgICAgLSBQb2ludGVyIHRvIHRoZSBGQURUIHRvIGJlIHZhbGlkYXRlZAorICoKKyAqIFJFVFVSTjogICAgICBOb25lCisgKgorICogREVTQ1JJUFRJT046IFZhbGlkYXRlIHZhcmlvdXMgaW1wb3J0YW50IGZpZWxkcyB3aXRoaW4gdGhlIEZBRFQuIElmIGEgcHJvYmxlbQorICogICAgICAgICAgICAgIGlzIGZvdW5kLCBpc3N1ZSBhIG1lc3NhZ2UsIGJ1dCBubyBzdGF0dXMgaXMgcmV0dXJuZWQuCisgKiAgICAgICAgICAgICAgVXNlZCBieSBib3RoIHRoZSB0YWJsZSBtYW5hZ2VyIGFuZCB0aGUgZGlzYXNzZW1ibGVyLgorICoKKyAqIFBvc3NpYmxlIGFkZGl0aW9uYWwgY2hlY2tzOgorICogKGFjcGlfZ2JsX0ZBRFQucG0xX2V2ZW50X2xlbmd0aCA+PSA0KQorICogKGFjcGlfZ2JsX0ZBRFQucG0xX2NvbnRyb2xfbGVuZ3RoID49IDIpCisgKiAoYWNwaV9nYmxfRkFEVC5wbV90aW1lcl9sZW5ndGggPj0gNCkKKyAqIEdwZSBibG9jayBsZW5ndGhzIG11c3QgYmUgbXVsdGlwbGUgb2YgMgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQlhY3BpX3RiX3ZhbGlkYXRlX2ZhZHQoKTsKK3N0YXRpYyB2b2lkIGFjcGlfdGJfdmFsaWRhdGVfZmFkdCh2b2lkKQoreworCWNoYXIgKm5hbWU7CisJdTMyICphZGRyZXNzMzI7CisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICphZGRyZXNzNjQ7CisJdTggbGVuZ3RoOworCXUzMiBpOworCisJLyoKKwkgKiBDaGVjayBmb3IgRkFDUyBhbmQgRFNEVCBhZGRyZXNzIG1pc21hdGNoZXMuIEFuIGFkZHJlc3MgbWlzbWF0Y2ggYmV0d2VlbgorCSAqIHRoZSAzMi1iaXQgYW5kIDY0LWJpdCBhZGRyZXNzIGZpZWxkcyAoRklSTVdBUkVfQ1RSTC9YX0ZJUk1XQVJFX0NUUkwgYW5kCisJICogRFNEVC9YX0RTRFQpIHdvdWxkIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiB0d28gRkFDUyBvciB0d28gRFNEVCB0YWJsZXMuCisJICovCisJaWYgKGFjcGlfZ2JsX0ZBRFQuZmFjcyAmJgorCSAgICAoYWNwaV9nYmxfRkFEVC5YZmFjcyAhPSAodTY0KSBhY3BpX2dibF9GQURULmZhY3MpKSB7CisJCUFDUElfV0FSTklORygoQUVfSU5GTywKKwkJCSAgICAgICIzMi82NFggRkFDUyBhZGRyZXNzIG1pc21hdGNoIGluIEZBRFQgLSAiCisJCQkgICAgICAiJTguOFgvJTguOFglOC44WCwgdXNpbmcgMzIiLAorCQkJICAgICAgYWNwaV9nYmxfRkFEVC5mYWNzLAorCQkJICAgICAgQUNQSV9GT1JNQVRfVUlOVDY0KGFjcGlfZ2JsX0ZBRFQuWGZhY3MpKSk7CisKKwkJYWNwaV9nYmxfRkFEVC5YZmFjcyA9ICh1NjQpIGFjcGlfZ2JsX0ZBRFQuZmFjczsKKwl9CisKKwlpZiAoYWNwaV9nYmxfRkFEVC5kc2R0ICYmCisJICAgIChhY3BpX2dibF9GQURULlhkc2R0ICE9ICh1NjQpIGFjcGlfZ2JsX0ZBRFQuZHNkdCkpIHsKKwkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAorCQkJICAgICAgIjMyLzY0WCBEU0RUIGFkZHJlc3MgbWlzbWF0Y2ggaW4gRkFEVCAtICIKKwkJCSAgICAgICIlOC44WC8lOC44WCU4LjhYLCB1c2luZyAzMiIsCisJCQkgICAgICBhY3BpX2dibF9GQURULmRzZHQsCisJCQkgICAgICBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWNwaV9nYmxfRkFEVC5YZHNkdCkpKTsKKworCQlhY3BpX2dibF9GQURULlhkc2R0ID0gKHU2NCkgYWNwaV9nYmxfRkFEVC5kc2R0OworCX0KKworCS8qIEV4YW1pbmUgYWxsIG9mIHRoZSA2NC1iaXQgZXh0ZW5kZWQgYWRkcmVzcyBmaWVsZHMgKFggZmllbGRzKSAqLworCisJZm9yIChpID0gMDsgaSA8IEFDUElfRkFEVF9JTkZPX0VOVFJJRVM7IGkrKykgeworCQkvKgorCQkgKiBHZW5lcmF0ZSBwb2ludGVycyB0byB0aGUgMzItYml0IGFuZCA2NC1iaXQgYWRkcmVzc2VzLCBnZXQgdGhlCisJCSAqIHJlZ2lzdGVyIGxlbmd0aCAod2lkdGgpLCBhbmQgdGhlIHJlZ2lzdGVyIG5hbWUKKwkJICovCisJCWFkZHJlc3M2NCA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MsCisJCQkJCSAmYWNwaV9nYmxfRkFEVCwKKwkJCQkJIGZhZHRfaW5mb190YWJsZVtpXS5hZGRyZXNzNjQpOworCQlhZGRyZXNzMzIgPQorCQkgICAgQUNQSV9BRERfUFRSKHUzMiwgJmFjcGlfZ2JsX0ZBRFQsCisJCQkJIGZhZHRfaW5mb190YWJsZVtpXS5hZGRyZXNzMzIpOworCQlsZW5ndGggPQorCQkgICAgKkFDUElfQUREX1BUUih1OCwgJmFjcGlfZ2JsX0ZBRFQsCisJCQkJICBmYWR0X2luZm9fdGFibGVbaV0ubGVuZ3RoKTsKKwkJbmFtZSA9IGZhZHRfaW5mb190YWJsZVtpXS5uYW1lOworCisJCS8qCisJCSAqIEZvciBlYWNoIGV4dGVuZGVkIGZpZWxkLCBjaGVjayBmb3IgbGVuZ3RoIG1pc21hdGNoIGJldHdlZW4gdGhlCisJCSAqIGxlZ2FjeSBsZW5ndGggZmllbGQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIDY0LWJpdCBYIGxlbmd0aCBmaWVsZC4KKwkJICovCisJCWlmIChhZGRyZXNzNjQtPmFkZHJlc3MgJiYKKwkJICAgIChhZGRyZXNzNjQtPmJpdF93aWR0aCAhPSBBQ1BJX01VTF84KGxlbmd0aCkpKSB7CisJCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCisJCQkJICAgICAgIjMyLzY0WCBsZW5ndGggbWlzbWF0Y2ggaW4gJXM6ICVkLyVkIiwKKwkJCQkgICAgICBuYW1lLCBBQ1BJX01VTF84KGxlbmd0aCksCisJCQkJICAgICAgYWRkcmVzczY0LT5iaXRfd2lkdGgpKTsKKwkJfQorCisJCWlmIChmYWR0X2luZm9fdGFibGVbaV0udHlwZSAmIEFDUElfRkFEVF9SRVFVSVJFRCkgeworCQkJLyoKKwkJCSAqIEZpZWxkIGlzIHJlcXVpcmVkIChQbTFhX2V2ZW50LCBQbTFhX2NvbnRyb2wsIHBtX3RpbWVyKS4KKwkJCSAqIEJvdGggdGhlIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0IGJlIG5vbi16ZXJvLgorCQkJICovCisJCQlpZiAoIWFkZHJlc3M2NC0+YWRkcmVzcyB8fCAhbGVuZ3RoKSB7CisJCQkJQUNQSV9FUlJPUigoQUVfSU5GTywKKwkJCQkJICAgICJSZXF1aXJlZCBmaWVsZCAlcyBoYXMgemVybyBhZGRyZXNzIGFuZC9vciBsZW5ndGg6IgorCQkJCQkgICAgIiAlOC44WCU4LjhYLyVYIiwKKwkJCQkJICAgIG5hbWUsCisJCQkJCSAgICBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzczY0LT4KKwkJCQkJCQkgICAgICAgYWRkcmVzcyksCisJCQkJCSAgICBsZW5ndGgpKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChmYWR0X2luZm9fdGFibGVbaV0udHlwZSAmIEFDUElfRkFEVF9TRVBBUkFURV9MRU5HVEgpIHsKKwkJCS8qCisJCQkgKiBGaWVsZCBpcyBvcHRpb25hbCAoUE0yQ29udHJvbCwgR1BFMCwgR1BFMSkgQU5EIGhhcyBpdHMgb3duCisJCQkgKiBsZW5ndGggZmllbGQuIElmIHByZXNlbnQsIGJvdGggdGhlIGFkZHJlc3MgYW5kIGxlbmd0aCBtdXN0CisJCQkgKiBiZSB2YWxpZC4KKwkJCSAqLworCQkJaWYgKChhZGRyZXNzNjQtPmFkZHJlc3MgJiYgIWxlbmd0aCkgfHwKKwkJCSAgICAoIWFkZHJlc3M2NC0+YWRkcmVzcyAmJiBsZW5ndGgpKSB7CisJCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAorCQkJCQkgICAgICAiT3B0aW9uYWwgZmllbGQgJXMgaGFzIHplcm8gYWRkcmVzcyBvciBsZW5ndGg6ICIKKwkJCQkJICAgICAgIiU4LjhYJTguOFgvJVgiLAorCQkJCQkgICAgICBuYW1lLAorCQkJCQkgICAgICBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzczY0LT4KKwkJCQkJCQkJIGFkZHJlc3MpLAorCQkJCQkgICAgICBsZW5ndGgpKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV90Yl9zZXR1cF9mYWR0X3JlZ2lzdGVycworICoKKyAqIFBBUkFNRVRFUlM6ICBOb25lLCB1c2VzIGFjcGlfZ2JsX0ZBRFQuCisgKgorICogUkVUVVJOOiAgICAgIE5vbmUKKyAqCisgKiBERVNDUklQVElPTjogSW5pdGlhbGl6ZSBnbG9iYWwgQUNQSSBQTTEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuIE9wdGlvbmFsbHksCisgKiAgICAgICAgICAgICAgZm9yY2UgRkFEVCByZWdpc3RlciBkZWZpbml0aW9ucyB0byB0aGVpciBkZWZhdWx0IGxlbmd0aHMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgYWNwaV90Yl9zZXR1cF9mYWR0X3JlZ2lzdGVycyh2b2lkKQoreworCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqdGFyZ2V0NjQ7CisJc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzICpzb3VyY2U2NDsKKwl1OCBwbTFfcmVnaXN0ZXJfYnl0ZV93aWR0aDsKKwl1MzIgaTsKIAogCS8qCiAJICogT3B0aW9uYWxseSBjaGVjayBhbGwgcmVnaXN0ZXIgbGVuZ3RocyBhZ2FpbnN0IHRoZSBkZWZhdWx0IHZhbHVlcyBhbmQKQEAgLTQyMSwxOTAgKzYyMSwzOSBAQAogCiAJLyoKIAkgKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgaW5kaXZpZHVhbCBQTTEgcmVnaXN0ZXJzIChlbmFibGUgYW5kIHN0YXR1cykuCi0JICogRWFjaCByZWdpc3RlciBpcyBkZWZpbmVkIHRvIGJlIChldmVudCBibG9jayBsZW5ndGggLyAyKS4KKwkgKiBFYWNoIHJlZ2lzdGVyIGlzIGRlZmluZWQgdG8gYmUgKGV2ZW50IGJsb2NrIGxlbmd0aCAvIDIpLiBFeHRyYSBkaXZpZGUKKwkgKiBieSA4IGNvbnZlcnRzIGJpdHMgdG8gYnl0ZXMuCiAJICovCi0JcG0xX3JlZ2lzdGVyX2JpdF93aWR0aCA9Ci0JICAgICh1OClBQ1BJX0RJVl8yKGFjcGlfZ2JsX0ZBRFQueHBtMWFfZXZlbnRfYmxvY2suYml0X3dpZHRoKTsKLQlwbTFfcmVnaXN0ZXJfYnl0ZV93aWR0aCA9ICh1OClBQ1BJX0RJVl84KHBtMV9yZWdpc3Rlcl9iaXRfd2lkdGgpOworCXBtMV9yZWdpc3Rlcl9ieXRlX3dpZHRoID0gKHU4KQorCSAgICBBQ1BJX0RJVl8xNihhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrLmJpdF93aWR0aCk7CiAKIAkvKgotCSAqIEFkanVzdCB0aGUgbGVuZ3RocyBvZiB0aGUgUE0xIEV2ZW50IEJsb2NrcyBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgdG8KLQkgKiBhY2Nlc3MgdGhlIFBNMSBzdGF0dXMgcmVnaXN0ZXIocykuIFVzZSAod2lkdGggLyAyKQotCSAqLwotCWFjcGlfZ2JsX0ZBRFQueHBtMWFfZXZlbnRfYmxvY2suYml0X3dpZHRoID0gcG0xX3JlZ2lzdGVyX2JpdF93aWR0aDsKLQlhY3BpX2dibF9GQURULnhwbTFiX2V2ZW50X2Jsb2NrLmJpdF93aWR0aCA9IHBtMV9yZWdpc3Rlcl9iaXRfd2lkdGg7Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSBzZXBhcmF0ZSBHQVMgc3RydWN0cyBmb3IgdGhlIFBNMSBFbmFibGUgcmVnaXN0ZXJzLgotCSAqIFRoZXNlIGFkZHJlc3NlcyBkbyBub3QgYXBwZWFyIChkaXJlY3RseSkgaW4gdGhlIEZBRFQsIHNvIGl0IGlzCi0JICogdXNlZnVsIHRvIGNhbGN1bGF0ZSB0aGVtIG9uY2UsIGhlcmUuCisJICogQ2FsY3VsYXRlIHNlcGFyYXRlIEdBUyBzdHJ1Y3RzIGZvciB0aGUgUE0xeCAoQS9CKSBTdGF0dXMgYW5kIEVuYWJsZQorCSAqIHJlZ2lzdGVycy4gVGhlc2UgYWRkcmVzc2VzIGRvIG5vdCBhcHBlYXIgKGRpcmVjdGx5KSBpbiB0aGUgRkFEVCwgc28gaXQKKwkgKiBpcyB1c2VmdWwgdG8gcHJlLWNhbGN1bGF0ZSB0aGVtIGZyb20gdGhlIFBNMSBFdmVudCBCbG9jayBkZWZpbml0aW9ucy4KIAkgKgogCSAqIFRoZSBQTSBldmVudCBibG9ja3MgYXJlIHNwbGl0IGludG8gdHdvIHJlZ2lzdGVyIGJsb2NrcywgZmlyc3QgaXMgdGhlCiAJICogUE0gU3RhdHVzIFJlZ2lzdGVyIGJsb2NrLCBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSB0aGUgUE0gRW5hYmxlCi0JICogUmVnaXN0ZXIgYmxvY2suIEVhY2ggaXMgb2YgbGVuZ3RoICh4cG0xeF9ldmVudF9ibG9jay5iaXRfd2lkdGgvMikuCisJICogUmVnaXN0ZXIgYmxvY2suIEVhY2ggaXMgb2YgbGVuZ3RoIChwbTFfZXZlbnRfbGVuZ3RoLzIpCiAJICoKLQkgKiBPbiB2YXJpb3VzIHN5c3RlbXMgdGhlIHYyIGZpZWxkcyAoYW5kIHBhcnRpY3VsYXJseSB0aGUgYml0IHdpZHRocykKLQkgKiBjYW5ub3QgYmUgcmVsaWVkIHVwb24sIHRob3VnaC4gSGVuY2UgcmVzb3J0IHRvIHVzaW5nIHRoZSB2MSBsZW5ndGgKLQkgKiBoZXJlIChhbmQgd2FybiBhYm91dCB0aGUgaW5jb25zaXN0ZW5jeSkuCisJICogTm90ZTogVGhlIFBNMUEgZXZlbnQgYmxvY2sgaXMgcmVxdWlyZWQgYnkgdGhlIEFDUEkgc3BlY2lmaWNhdGlvbi4KKwkgKiBIb3dldmVyLCB0aGUgUE0xQiBldmVudCBibG9jayBpcyBvcHRpb25hbCBhbmQgaXMgcmFyZWx5LCBpZiBldmVyLAorCSAqIHVzZWQuCiAJICovCi0JaWYgKGFjcGlfZ2JsX0ZBRFQueHBtMWFfZXZlbnRfYmxvY2suYml0X3dpZHRoCi0JICAgICE9IGFjcGlfZ2JsX0ZBRFQucG0xX2V2ZW50X2xlbmd0aCAqIDgpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkZBRFQ6ICIKLQkJICAgICAgICJYX1BNMWFfRVZUX0JMSy5iaXRfd2lkdGggKCV1KSBkb2VzIG5vdCBtYXRjaCIKLQkJICAgICAgICIgUE0xX0VWVF9MRU4gKCV1KVxuIiwKLQkJICAgICAgIGFjcGlfZ2JsX0ZBRFQueHBtMWFfZXZlbnRfYmxvY2suYml0X3dpZHRoLAotCQkgICAgICAgYWNwaV9nYmxfRkFEVC5wbTFfZXZlbnRfbGVuZ3RoKTsKIAotCS8qIFRoZSBQTTFBIHJlZ2lzdGVyIGJsb2NrIGlzIHJlcXVpcmVkICovCisJZm9yIChpID0gMDsgaSA8IEFDUElfRkFEVF9QTV9JTkZPX0VOVFJJRVM7IGkrKykgeworCQlzb3VyY2U2NCA9CisJCSAgICBBQ1BJX0FERF9QVFIoc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzLCAmYWNwaV9nYmxfRkFEVCwKKwkJCQkgZmFkdF9wbV9pbmZvX3RhYmxlW2ldLnNvdXJjZSk7CiAKLQlhY3BpX3RiX2luaXRfZ2VuZXJpY19hZGRyZXNzKCZhY3BpX2dibF94cG0xYV9lbmFibGUsCi0JCQkJICAgICBhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrLnNwYWNlX2lkLAotCQkJCSAgICAgcG0xX3JlZ2lzdGVyX2J5dGVfd2lkdGgsCi0JCQkJICAgICAoYWNwaV9nYmxfRkFEVC54cG0xYV9ldmVudF9ibG9jay5hZGRyZXNzICsKLQkJCQkgICAgICBwbTFfcmVnaXN0ZXJfYnl0ZV93aWR0aCkpOwotCS8qIERvbid0IGZvcmdldCB0byBjb3B5IHNwYWNlX2lkIG9mIHRoZSBHQVMgKi8KLQlhY3BpX2dibF94cG0xYV9lbmFibGUuc3BhY2VfaWQgPQotCSAgICBhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrLnNwYWNlX2lkOwotCi0JLyogVGhlIFBNMUIgcmVnaXN0ZXIgYmxvY2sgaXMgb3B0aW9uYWwsIGlnbm9yZSBpZiBub3QgcHJlc2VudCAqLwotCi0JaWYgKGFjcGlfZ2JsX0ZBRFQueHBtMWJfZXZlbnRfYmxvY2suYWRkcmVzcykgewotCQlpZiAoYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jay5iaXRfd2lkdGgKLQkJICAgICE9IGFjcGlfZ2JsX0ZBRFQucG0xX2V2ZW50X2xlbmd0aCAqIDgpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJGQURUOiAiCi0JCQkgICAgICAgIlhfUE0xYl9FVlRfQkxLLmJpdF93aWR0aCAoJXUpIGRvZXMgbm90IG1hdGNoIgotCQkJICAgICAgICIgUE0xX0VWVF9MRU4gKCV1KVxuIiwKLQkJCSAgICAgICBhY3BpX2dibF9GQURULnhwbTFiX2V2ZW50X2Jsb2NrLmJpdF93aWR0aCwKLQkJCSAgICAgICBhY3BpX2dibF9GQURULnBtMV9ldmVudF9sZW5ndGgpOwotCQlhY3BpX3RiX2luaXRfZ2VuZXJpY19hZGRyZXNzKCZhY3BpX2dibF94cG0xYl9lbmFibGUsCi0JCQkJCSAgICAgYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jay5zcGFjZV9pZCwKLQkJCQkJICAgICBwbTFfcmVnaXN0ZXJfYnl0ZV93aWR0aCwKLQkJCQkJICAgICAoYWNwaV9nYmxfRkFEVC54cG0xYl9ldmVudF9ibG9jay4KLQkJCQkJICAgICAgYWRkcmVzcyArIHBtMV9yZWdpc3Rlcl9ieXRlX3dpZHRoKSk7Ci0JCS8qIERvbid0IGZvcmdldCB0byBjb3B5IHNwYWNlX2lkIG9mIHRoZSBHQVMgKi8KLQkJYWNwaV9nYmxfeHBtMWJfZW5hYmxlLnNwYWNlX2lkID0KLQkJICAgIGFjcGlfZ2JsX0ZBRFQueHBtMWJfZXZlbnRfYmxvY2suc3BhY2VfaWQ7Ci0KLQl9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBGVU5DVElPTjogICAgYWNwaV90Yl92YWxpZGF0ZV9mYWR0Ci0gKgotICogUEFSQU1FVEVSUzogIFRhYmxlICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIEZBRFQgdG8gYmUgdmFsaWRhdGVkCi0gKgotICogUkVUVVJOOiAgICAgIE5vbmUKLSAqCi0gKiBERVNDUklQVElPTjogVmFsaWRhdGUgdmFyaW91cyBpbXBvcnRhbnQgZmllbGRzIHdpdGhpbiB0aGUgRkFEVC4gSWYgYSBwcm9ibGVtCi0gKiAgICAgICAgICAgICAgaXMgZm91bmQsIGlzc3VlIGEgbWVzc2FnZSwgYnV0IG5vIHN0YXR1cyBpcyByZXR1cm5lZC4KLSAqICAgICAgICAgICAgICBVc2VkIGJ5IGJvdGggdGhlIHRhYmxlIG1hbmFnZXIgYW5kIHRoZSBkaXNhc3NlbWJsZXIuCi0gKgotICogUG9zc2libGUgYWRkaXRpb25hbCBjaGVja3M6Ci0gKiAoYWNwaV9nYmxfRkFEVC5wbTFfZXZlbnRfbGVuZ3RoID49IDQpCi0gKiAoYWNwaV9nYmxfRkFEVC5wbTFfY29udHJvbF9sZW5ndGggPj0gMikKLSAqIChhY3BpX2dibF9GQURULnBtX3RpbWVyX2xlbmd0aCA+PSA0KQotICogR3BlIGJsb2NrIGxlbmd0aHMgbXVzdCBiZSBtdWx0aXBsZSBvZiAyCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgYWNwaV90Yl92YWxpZGF0ZV9mYWR0KHZvaWQpCi17Ci0JY2hhciAqbmFtZTsKLQl1MzIgKmFkZHJlc3MzMjsKLQlzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MgKmFkZHJlc3M2NDsKLQl1OCBsZW5ndGg7Ci0JdTMyIGk7Ci0KLQkvKgotCSAqIENoZWNrIGZvciBGQUNTIGFuZCBEU0RUIGFkZHJlc3MgbWlzbWF0Y2hlcy4gQW4gYWRkcmVzcyBtaXNtYXRjaCBiZXR3ZWVuCi0JICogdGhlIDMyLWJpdCBhbmQgNjQtYml0IGFkZHJlc3MgZmllbGRzIChGSVJNV0FSRV9DVFJML1hfRklSTVdBUkVfQ1RSTCBhbmQKLQkgKiBEU0RUL1hfRFNEVCkgd291bGQgaW5kaWNhdGUgdGhlIHByZXNlbmNlIG9mIHR3byBGQUNTIG9yIHR3byBEU0RUIHRhYmxlcy4KLQkgKi8KLQlpZiAoYWNwaV9nYmxfRkFEVC5mYWNzICYmCi0JICAgIChhY3BpX2dibF9GQURULlhmYWNzICE9ICh1NjQpIGFjcGlfZ2JsX0ZBRFQuZmFjcykpIHsKLQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJICAgICAgIjMyLzY0WCBGQUNTIGFkZHJlc3MgbWlzbWF0Y2ggaW4gRkFEVCAtICIKLQkJCSAgICAgICJ0d28gRkFDUyB0YWJsZXMhICU4LjhYLyU4LjhYJTguOFgiLAotCQkJICAgICAgYWNwaV9nYmxfRkFEVC5mYWNzLAotCQkJICAgICAgQUNQSV9GT1JNQVRfVUlOVDY0KGFjcGlfZ2JsX0ZBRFQuWGZhY3MpKSk7Ci0JfQotCi0JaWYgKGFjcGlfZ2JsX0ZBRFQuZHNkdCAmJgotCSAgICAoYWNwaV9nYmxfRkFEVC5YZHNkdCAhPSAodTY0KSBhY3BpX2dibF9GQURULmRzZHQpKSB7Ci0JCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCSAgICAgICIzMi82NFggRFNEVCBhZGRyZXNzIG1pc21hdGNoIGluIEZBRFQgLSAiCi0JCQkgICAgICAidHdvIERTRFQgdGFibGVzISAlOC44WC8lOC44WCU4LjhYIiwKLQkJCSAgICAgIGFjcGlfZ2JsX0ZBRFQuZHNkdCwKLQkJCSAgICAgIEFDUElfRk9STUFUX1VJTlQ2NChhY3BpX2dibF9GQURULlhkc2R0KSkpOwotCX0KLQotCS8qIEV4YW1pbmUgYWxsIG9mIHRoZSA2NC1iaXQgZXh0ZW5kZWQgYWRkcmVzcyBmaWVsZHMgKFggZmllbGRzKSAqLwotCi0JZm9yIChpID0gMDsgaSA8IEFDUElfRkFEVF9JTkZPX0VOVFJJRVM7IGkrKykgewotCQkvKgotCQkgKiBHZW5lcmF0ZSBwb2ludGVycyB0byB0aGUgMzItYml0IGFuZCA2NC1iaXQgYWRkcmVzc2VzLCBnZXQgdGhlCi0JCSAqIHJlZ2lzdGVyIGxlbmd0aCAod2lkdGgpLCBhbmQgdGhlIHJlZ2lzdGVyIG5hbWUKLQkJICovCi0JCWFkZHJlc3M2NCA9IEFDUElfQUREX1BUUihzdHJ1Y3QgYWNwaV9nZW5lcmljX2FkZHJlc3MsCi0JCQkJCSAmYWNwaV9nYmxfRkFEVCwKLQkJCQkJIGZhZHRfaW5mb190YWJsZVtpXS5hZGRyZXNzNjQpOwotCQlhZGRyZXNzMzIgPQotCQkgICAgQUNQSV9BRERfUFRSKHUzMiwgJmFjcGlfZ2JsX0ZBRFQsCi0JCQkJIGZhZHRfaW5mb190YWJsZVtpXS5hZGRyZXNzMzIpOwotCQlsZW5ndGggPQotCQkgICAgKkFDUElfQUREX1BUUih1OCwgJmFjcGlfZ2JsX0ZBRFQsCi0JCQkJICBmYWR0X2luZm9fdGFibGVbaV0ubGVuZ3RoKTsKLQkJbmFtZSA9IGZhZHRfaW5mb190YWJsZVtpXS5uYW1lOwotCi0JCS8qCi0JCSAqIEZvciBlYWNoIGV4dGVuZGVkIGZpZWxkLCBjaGVjayBmb3IgbGVuZ3RoIG1pc21hdGNoIGJldHdlZW4gdGhlCi0JCSAqIGxlZ2FjeSBsZW5ndGggZmllbGQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIDY0LWJpdCBYIGxlbmd0aCBmaWVsZC4KLQkJICovCi0JCWlmIChhZGRyZXNzNjQgJiYgKGFkZHJlc3M2NC0+Yml0X3dpZHRoICE9IEFDUElfTVVMXzgobGVuZ3RoKSkpIHsKLQkJCUFDUElfV0FSTklORygoQUVfSU5GTywKLQkJCQkgICAgICAiMzIvNjRYIGxlbmd0aCBtaXNtYXRjaCBpbiAlczogJWQvJWQiLAotCQkJCSAgICAgIG5hbWUsIEFDUElfTVVMXzgobGVuZ3RoKSwKLQkJCQkgICAgICBhZGRyZXNzNjQtPmJpdF93aWR0aCkpOwotCQl9Ci0KLQkJaWYgKGZhZHRfaW5mb190YWJsZVtpXS50eXBlICYgQUNQSV9GQURUX1JFUVVJUkVEKSB7Ci0JCQkvKgotCQkJICogRmllbGQgaXMgcmVxdWlyZWQgKFBtMWFfZXZlbnQsIFBtMWFfY29udHJvbCwgcG1fdGltZXIpLgotCQkJICogQm90aCB0aGUgYWRkcmVzcyBhbmQgbGVuZ3RoIG11c3QgYmUgbm9uLXplcm8uCi0JCQkgKi8KLQkJCWlmICghYWRkcmVzczY0LT5hZGRyZXNzIHx8ICFsZW5ndGgpIHsKLQkJCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCQkgICAgIlJlcXVpcmVkIGZpZWxkICVzIGhhcyB6ZXJvIGFkZHJlc3MgYW5kL29yIGxlbmd0aDogJTguOFglOC44WC8lWCIsCi0JCQkJCSAgICBuYW1lLAotCQkJCQkgICAgQUNQSV9GT1JNQVRfVUlOVDY0KGFkZHJlc3M2NC0+Ci0JCQkJCQkJICAgICAgIGFkZHJlc3MpLAotCQkJCQkgICAgbGVuZ3RoKSk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoZmFkdF9pbmZvX3RhYmxlW2ldLnR5cGUgJiBBQ1BJX0ZBRFRfU0VQQVJBVEVfTEVOR1RIKSB7Ci0JCQkvKgotCQkJICogRmllbGQgaXMgb3B0aW9uYWwgKFBNMkNvbnRyb2wsIEdQRTAsIEdQRTEpIEFORCBoYXMgaXRzIG93bgotCQkJICogbGVuZ3RoIGZpZWxkLiBJZiBwcmVzZW50LCBib3RoIHRoZSBhZGRyZXNzIGFuZCBsZW5ndGggbXVzdCBiZSB2YWxpZC4KLQkJCSAqLwotCQkJaWYgKChhZGRyZXNzNjQtPmFkZHJlc3MgJiYgIWxlbmd0aCkKLQkJCSAgICB8fCAoIWFkZHJlc3M2NC0+YWRkcmVzcyAmJiBsZW5ndGgpKSB7Ci0JCQkJQUNQSV9XQVJOSU5HKChBRV9JTkZPLAotCQkJCQkgICAgICAiT3B0aW9uYWwgZmllbGQgJXMgaGFzIHplcm8gYWRkcmVzcyBvciBsZW5ndGg6ICU4LjhYJTguOFgvJVgiLAotCQkJCQkgICAgICBuYW1lLAotCQkJCQkgICAgICBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzczY0LT4KLQkJCQkJCQkJIGFkZHJlc3MpLAotCQkJCQkgICAgICBsZW5ndGgpKTsKLQkJCX0KLQkJfQotCi0JCS8qIElmIGJvdGggMzItIGFuZCA2NC1iaXQgYWRkcmVzc2VzIGFyZSB2YWxpZCAobm9uLXplcm8pLCB0aGV5IG11c3QgbWF0Y2ggKi8KLQotCQlpZiAoYWRkcmVzczY0LT5hZGRyZXNzICYmICphZGRyZXNzMzIgJiYKLQkJICAgIChhZGRyZXNzNjQtPmFkZHJlc3MgIT0gKHU2NCkgKiBhZGRyZXNzMzIpKSB7Ci0JCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJCSAgICAiMzIvNjRYIGFkZHJlc3MgbWlzbWF0Y2ggaW4gJXM6ICU4LjhYLyU4LjhYJTguOFgsIHVzaW5nIDY0WCIsCi0JCQkJICAgIG5hbWUsICphZGRyZXNzMzIsCi0JCQkJICAgIEFDUElfRk9STUFUX1VJTlQ2NChhZGRyZXNzNjQtPmFkZHJlc3MpKSk7CisJCWlmIChzb3VyY2U2NC0+YWRkcmVzcykgeworCQkJYWNwaV90Yl9pbml0X2dlbmVyaWNfYWRkcmVzcyhmYWR0X3BtX2luZm9fdGFibGVbaV0uCisJCQkJCQkgICAgIHRhcmdldCwgc291cmNlNjQtPnNwYWNlX2lkLAorCQkJCQkJICAgICBwbTFfcmVnaXN0ZXJfYnl0ZV93aWR0aCwKKwkJCQkJCSAgICAgc291cmNlNjQtPmFkZHJlc3MgKworCQkJCQkJICAgICAoZmFkdF9wbV9pbmZvX3RhYmxlW2ldLgorCQkJCQkJICAgICAgcmVnaXN0ZXJfbnVtICoKKwkJCQkJCSAgICAgIHBtMV9yZWdpc3Rlcl9ieXRlX3dpZHRoKSk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiaW5zdGFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiaW5zdGFsLmMKaW5kZXggMzczNzRiMi4uZjg2NWQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90Ymluc3RhbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJpbnN0YWwuYwpAQCAtMTAzLDcgKzEwMyw5IEBACiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBhZGQgdGhlIEFDUEkgdGFibGUKKyAqIERFU0NSSVBUSU9OOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBhZGQgYW4gQUNQSSB0YWJsZS4gSXQgaXMgdXNlZCB0bworICogICAgICAgICAgICAgIGR5bmFtaWNhbGx5IGxvYWQgdGFibGVzIHZpYSB0aGUgTG9hZCBhbmQgbG9hZF90YWJsZSBBTUwKKyAqICAgICAgICAgICAgICBvcGVyYXRvcnMuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTEyLDYgKzExNCw3IEBACiB7CiAJdTMyIGk7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICpvdmVycmlkZV90YWJsZSA9IE5VTEw7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHRiX2FkZF90YWJsZSk7CiAKQEAgLTIwMSw2ICsyMDQsMjkgQEAKIAkJfQogCX0KIAorCS8qCisJICogQUNQSSBUYWJsZSBPdmVycmlkZToKKwkgKiBBbGxvdyB0aGUgaG9zdCB0byBvdmVycmlkZSBkeW5hbWljYWxseSBsb2FkZWQgdGFibGVzLgorCSAqLworCXN0YXR1cyA9IGFjcGlfb3NfdGFibGVfb3ZlcnJpZGUodGFibGVfZGVzYy0+cG9pbnRlciwgJm92ZXJyaWRlX3RhYmxlKTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgb3ZlcnJpZGVfdGFibGUpIHsKKwkJQUNQSV9JTkZPKChBRV9JTkZPLAorCQkJICAgIiU0LjRzIEAgMHglcCBUYWJsZSBvdmVycmlkZSwgcmVwbGFjZWQgd2l0aDoiLAorCQkJICAgdGFibGVfZGVzYy0+cG9pbnRlci0+c2lnbmF0dXJlLAorCQkJICAgQUNQSV9DQVNUX1BUUih2b2lkLCB0YWJsZV9kZXNjLT5hZGRyZXNzKSkpOworCisJCS8qIFdlIGNhbiBkZWxldGUgdGhlIHRhYmxlIHRoYXQgd2FzIHBhc3NlZCBhcyBhIHBhcmFtZXRlciAqLworCisJCWFjcGlfdGJfZGVsZXRlX3RhYmxlKHRhYmxlX2Rlc2MpOworCisJCS8qIFNldHVwIGRlc2NyaXB0b3IgZm9yIHRoZSBuZXcgdGFibGUgKi8KKworCQl0YWJsZV9kZXNjLT5hZGRyZXNzID0gQUNQSV9QVFJfVE9fUEhZU0FERFIob3ZlcnJpZGVfdGFibGUpOworCQl0YWJsZV9kZXNjLT5wb2ludGVyID0gb3ZlcnJpZGVfdGFibGU7CisJCXRhYmxlX2Rlc2MtPmxlbmd0aCA9IG92ZXJyaWRlX3RhYmxlLT5sZW5ndGg7CisJCXRhYmxlX2Rlc2MtPmZsYWdzID0gQUNQSV9UQUJMRV9PUklHSU5fT1ZFUlJJREU7CisJfQorCiAJLyogQWRkIHRoZSB0YWJsZSB0byB0aGUgZ2xvYmFsIHJvb3QgdGFibGUgbGlzdCAqLwogCiAJc3RhdHVzID0gYWNwaV90Yl9zdG9yZV90YWJsZSh0YWJsZV9kZXNjLT5hZGRyZXNzLCB0YWJsZV9kZXNjLT5wb2ludGVyLApAQCAtMjQ3LDggKzI3Myw5IEBACiAJLyogSW5jcmVhc2UgdGhlIFRhYmxlIEFycmF5IHNpemUgKi8KIAogCXRhYmxlcyA9IEFDUElfQUxMT0NBVEVfWkVST0VEKCgoYWNwaV9zaXplKSBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QuCi0JCQkJICAgICAgIHNpemUgKyBBQ1BJX1JPT1RfVEFCTEVfU0laRV9JTkNSRU1FTlQpCi0JCQkJICAgICAgKiBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfZGVzYykpOworCQkJCSAgICAgICBzaXplICsKKwkJCQkgICAgICAgQUNQSV9ST09UX1RBQkxFX1NJWkVfSU5DUkVNRU5UKSAqCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2Rlc2MpKTsKIAlpZiAoIXRhYmxlcykgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAogCQkJICAgICJDb3VsZCBub3QgYWxsb2NhdGUgbmV3IHJvb3QgdGFibGUgYXJyYXkiKSk7CkBAIC00MDcsMjcgKzQzNCw1NiBAQAogICoKICAqIFBBUkFNRVRFUlM6ICB0YWJsZV9pbmRleCAgICAgICAgIC0gVGFibGUgaW5kZXgKICAqCi0gKiBSRVRVUk46ICAgICAgTm9uZQorICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKICAqIERFU0NSSVBUSU9OOiBEZWxldGUgYWxsIG5hbWVzcGFjZSBvYmplY3RzIGNyZWF0ZWQgd2hlbiB0aGlzIHRhYmxlIHdhcyBsb2FkZWQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhY3BpX3RiX2RlbGV0ZV9uYW1lc3BhY2VfYnlfb3duZXIodTMyIHRhYmxlX2luZGV4KQorYWNwaV9zdGF0dXMgYWNwaV90Yl9kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyKHUzMiB0YWJsZV9pbmRleCkKIHsKIAlhY3BpX293bmVyX2lkIG93bmVyX2lkOworCWFjcGlfc3RhdHVzIHN0YXR1czsKIAotCSh2b2lkKWFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9UQUJMRVMpOwotCWlmICh0YWJsZV9pbmRleCA8IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC5jb3VudCkgewotCQlvd25lcl9pZCA9Ci0JCSAgICBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW3RhYmxlX2luZGV4XS5vd25lcl9pZDsKLQl9IGVsc2UgewotCQkodm9pZClhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfVEFCTEVTKTsKLQkJcmV0dXJuOworCUFDUElfRlVOQ1RJT05fVFJBQ0UodGJfZGVsZXRlX25hbWVzcGFjZV9ieV9vd25lcik7CisKKwlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfVEFCTEVTKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCisJaWYgKHRhYmxlX2luZGV4ID49IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC5jb3VudCkgeworCisJCS8qIFRoZSB0YWJsZSBpbmRleCBkb2VzIG5vdCBleGlzdCAqLworCisJCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9UQUJMRVMpOworCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9UX0VYSVNUKTsKKwl9CisKKwkvKiBHZXQgdGhlIG93bmVyIElEIGZvciB0aGlzIHRhYmxlLCB1c2VkIHRvIGRlbGV0ZSBuYW1lc3BhY2Ugbm9kZXMgKi8KKworCW93bmVyX2lkID0gYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1t0YWJsZV9pbmRleF0ub3duZXJfaWQ7CiAJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX1RBQkxFUyk7CisKKwkvKgorCSAqIE5lZWQgdG8gYWNxdWlyZSB0aGUgbmFtZXNwYWNlIHdyaXRlciBsb2NrIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlCisJICogd2l0aCBhbnkgY29uY3VycmVudCBuYW1lc3BhY2Ugd2Fsa3MuIFRoZSBpbnRlcnByZXRlciBtdXN0IGJlCisJICogcmVsZWFzZWQgZHVyaW5nIHRoZSBkZWxldGlvbiBzaW5jZSB0aGUgYWNxdWlzaXRpb24gb2YgdGhlIGRlbGV0aW9uCisJICogbG9jayBtYXkgYmxvY2ssIGFuZCBhbHNvIHNpbmNlIHRoZSBleGVjdXRpb24gb2YgYSBuYW1lc3BhY2Ugd2FsaworCSAqIG11c3QgYmUgYWxsb3dlZCB0byB1c2UgdGhlIGludGVycHJldGVyLgorCSAqLworCWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9JTlRFUlBSRVRFUik7CisJc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX3dyaXRlX2xvY2soJmFjcGlfZ2JsX25hbWVzcGFjZV9yd19sb2NrKTsKKwogCWFjcGlfbnNfZGVsZXRlX25hbWVzcGFjZV9ieV9vd25lcihvd25lcl9pZCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOworCX0KKworCWFjcGlfdXRfcmVsZWFzZV93cml0ZV9sb2NrKCZhY3BpX2dibF9uYW1lc3BhY2VfcndfbG9jayk7CisKKwlzdGF0dXMgPSBhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfSU5URVJQUkVURVIpOworCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTM1LDggKzU5MSw4IEBACiAJKHZvaWQpYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX1RBQkxFUyk7CiAJaWYgKHRhYmxlX2luZGV4IDwgYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LmNvdW50KSB7CiAJCWlzX2xvYWRlZCA9ICh1OCkKLQkJICAgIChhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW3RhYmxlX2luZGV4XS4KLQkJICAgICBmbGFncyAmIEFDUElfVEFCTEVfSVNfTE9BREVEKTsKKwkJICAgIChhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW3RhYmxlX2luZGV4XS5mbGFncyAmCisJCSAgICAgQUNQSV9UQUJMRV9JU19MT0FERUQpOwogCX0KIAogCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9UQUJMRVMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnV0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYwppbmRleCAyMmNlNDg5Li5lZjdkMmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RidXRpbHMuYwpAQCAtMTc3LDE5ICsxNzcsMjMgQEAKIAkJCSAgIHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaGVhZGVyKQogewogCisJLyoKKwkgKiBUaGUgcmVhc29uIHRoYXQgdGhlIEFkZHJlc3MgaXMgY2FzdCB0byBhIHZvaWQgcG9pbnRlciBpcyBzbyB0aGF0IHdlCisJICogY2FuIHVzZSAlcCB3aGljaCB3aWxsIHdvcmsgcHJvcGVybHkgb24gYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBob3N0cy4KKwkgKi8KIAlpZiAoQUNQSV9DT01QQVJFX05BTUUoaGVhZGVyLT5zaWduYXR1cmUsIEFDUElfU0lHX0ZBQ1MpKSB7CiAKLQkJLyogRkFDUyBvbmx5IGhhcyBzaWduYXR1cmUgYW5kIGxlbmd0aCBmaWVsZHMgb2YgY29tbW9uIHRhYmxlIGhlYWRlciAqLworCQkvKiBGQUNTIG9ubHkgaGFzIHNpZ25hdHVyZSBhbmQgbGVuZ3RoIGZpZWxkcyAqLwogCi0JCUFDUElfSU5GTygoQUVfSU5GTywgIiU0LjRzICUwOGxYLCAlMDRYIiwKLQkJCSAgIGhlYWRlci0+c2lnbmF0dXJlLCAodW5zaWduZWQgbG9uZylhZGRyZXNzLAorCQlBQ1BJX0lORk8oKEFFX0lORk8sICIlNC40cyAlcCAlMDVYIiwKKwkJCSAgIGhlYWRlci0+c2lnbmF0dXJlLCBBQ1BJX0NBU1RfUFRSKHZvaWQsIGFkZHJlc3MpLAogCQkJICAgaGVhZGVyLT5sZW5ndGgpKTsKIAl9IGVsc2UgaWYgKEFDUElfQ09NUEFSRV9OQU1FKGhlYWRlci0+c2lnbmF0dXJlLCBBQ1BJX1NJR19SU0RQKSkgewogCiAJCS8qIFJTRFAgaGFzIG5vIGNvbW1vbiBmaWVsZHMgKi8KIAotCQlBQ1BJX0lORk8oKEFFX0lORk8sICJSU0RQICUwOGxYLCAlMDRYIChyJWQgJTYuNnMpIiwKLQkJCSAgICh1bnNpZ25lZCBsb25nKWFkZHJlc3MsCisJCUFDUElfSU5GTygoQUVfSU5GTywgIlJTRFAgJXAgJTA1WCAodiUuMmQgJTYuNnMpIiwKKwkJCSAgIEFDUElfQ0FTVF9QVFIgKHZvaWQsIGFkZHJlc3MpLAogCQkJICAgKEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfdGFibGVfcnNkcCwgaGVhZGVyKS0+CiAJCQkgICAgcmV2aXNpb24gPgogCQkJICAgIDApID8gQUNQSV9DQVNUX1BUUihzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwLApAQCAtMjAyLDggKzIwNiw4IEBACiAJCS8qIFN0YW5kYXJkIEFDUEkgdGFibGUgd2l0aCBmdWxsIGNvbW1vbiBoZWFkZXIgKi8KIAogCQlBQ1BJX0lORk8oKEFFX0lORk8sCi0JCQkgICAiJTQuNHMgJTA4bFgsICUwNFggKHIlZCAlNi42cyAlOC44cyAlOFggJTQuNHMgJThYKSIsCi0JCQkgICBoZWFkZXItPnNpZ25hdHVyZSwgKHVuc2lnbmVkIGxvbmcpYWRkcmVzcywKKwkJCSAgICIlNC40cyAlcCAlMDVYICh2JS4yZCAlNi42cyAlOC44cyAlMDhYICU0LjRzICUwOFgpIiwKKwkJCSAgIGhlYWRlci0+c2lnbmF0dXJlLCBBQ1BJX0NBU1RfUFRSICh2b2lkLCBhZGRyZXNzKSwKIAkJCSAgIGhlYWRlci0+bGVuZ3RoLCBoZWFkZXItPnJldmlzaW9uLCBoZWFkZXItPm9lbV9pZCwKIAkJCSAgIGhlYWRlci0+b2VtX3RhYmxlX2lkLCBoZWFkZXItPm9lbV9yZXZpc2lvbiwKIAkJCSAgIGhlYWRlci0+YXNsX2NvbXBpbGVyX2lkLApAQCAtMjgwLDIyICsyODQsMjggQEAKICAqIEZVTkNUSU9OOiAgICBhY3BpX3RiX2luc3RhbGxfdGFibGUKICAqCiAgKiBQQVJBTUVURVJTOiAgQWRkcmVzcyAgICAgICAgICAgICAgICAgLSBQaHlzaWNhbCBhZGRyZXNzIG9mIERTRFQgb3IgRkFDUwotICogICAgICAgICAgICAgIEZsYWdzICAgICAgICAgICAgICAgICAgIC0gRmxhZ3MKICAqICAgICAgICAgICAgICBTaWduYXR1cmUgICAgICAgICAgICAgICAtIFRhYmxlIHNpZ25hdHVyZSwgTlVMTCBpZiBubyBuZWVkIHRvCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaAogICogICAgICAgICAgICAgIHRhYmxlX2luZGV4ICAgICAgICAgICAgIC0gSW5kZXggaW50byByb290IHRhYmxlIGFycmF5CiAgKgogICogUkVUVVJOOiAgICAgIE5vbmUKICAqCi0gKiBERVNDUklQVElPTjogSW5zdGFsbCBhbiBBQ1BJIHRhYmxlIGludG8gdGhlIGdsb2JhbCBkYXRhIHN0cnVjdHVyZS4KKyAqIERFU0NSSVBUSU9OOiBJbnN0YWxsIGFuIEFDUEkgdGFibGUgaW50byB0aGUgZ2xvYmFsIGRhdGEgc3RydWN0dXJlLiBUaGUKKyAqICAgICAgICAgICAgICB0YWJsZSBvdmVycmlkZSBtZWNoYW5pc20gaXMgaW1wbGVtZW50ZWQgaGVyZSB0byBhbGxvdyB0aGUgaG9zdAorICogICAgICAgICAgICAgIE9TIHRvIHJlcGxhY2UgYW55IHRhYmxlIGJlZm9yZSBpdCBpcyBpbnN0YWxsZWQgaW4gdGhlIHJvb3QKKyAqICAgICAgICAgICAgICB0YWJsZSBhcnJheS4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB2b2lkCiBhY3BpX3RiX2luc3RhbGxfdGFibGUoYWNwaV9waHlzaWNhbF9hZGRyZXNzIGFkZHJlc3MsCi0JCSAgICAgIHU4IGZsYWdzLCBjaGFyICpzaWduYXR1cmUsIHUzMiB0YWJsZV9pbmRleCkKKwkJICAgICAgY2hhciAqc2lnbmF0dXJlLCB1MzIgdGFibGVfaW5kZXgpCiB7Ci0Jc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZTsKKwl1OCBmbGFnczsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZV90b19pbnN0YWxsOworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqbWFwcGVkX3RhYmxlOworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqb3ZlcnJpZGVfdGFibGUgPSBOVUxMOwogCiAJaWYgKCFhZGRyZXNzKSB7CiAJCUFDUElfRVJST1IoKEFFX0lORk8sCkBAIC0zMDYsNDEgKzMxNiw2OSBAQAogCiAJLyogTWFwIGp1c3QgdGhlIHRhYmxlIGhlYWRlciAqLwogCi0JdGFibGUgPSBhY3BpX29zX21hcF9tZW1vcnkoYWRkcmVzcywgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOwotCWlmICghdGFibGUpIHsKKwltYXBwZWRfdGFibGUgPQorCSAgICBhY3BpX29zX21hcF9tZW1vcnkoYWRkcmVzcywgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpOworCWlmICghbWFwcGVkX3RhYmxlKSB7CiAJCXJldHVybjsKIAl9CiAKLQkvKiBJZiBhIHBhcnRpY3VsYXIgc2lnbmF0dXJlIGlzIGV4cGVjdGVkLCBzaWduYXR1cmUgbXVzdCBtYXRjaCAqLworCS8qIElmIGEgcGFydGljdWxhciBzaWduYXR1cmUgaXMgZXhwZWN0ZWQgKERTRFQvRkFDUyksIGl0IG11c3QgbWF0Y2ggKi8KIAotCWlmIChzaWduYXR1cmUgJiYgIUFDUElfQ09NUEFSRV9OQU1FKHRhYmxlLT5zaWduYXR1cmUsIHNpZ25hdHVyZSkpIHsKKwlpZiAoc2lnbmF0dXJlICYmICFBQ1BJX0NPTVBBUkVfTkFNRShtYXBwZWRfdGFibGUtPnNpZ25hdHVyZSwgc2lnbmF0dXJlKSkgewogCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAotCQkJICAgICJJbnZhbGlkIHNpZ25hdHVyZSAweCVYIGZvciBBQ1BJIHRhYmxlIFslc10iLAotCQkJICAgICpBQ1BJX0NBU1RfUFRSKHUzMiwgdGFibGUtPnNpZ25hdHVyZSksIHNpZ25hdHVyZSkpOworCQkJICAgICJJbnZhbGlkIHNpZ25hdHVyZSAweCVYIGZvciBBQ1BJIHRhYmxlLCBleHBlY3RlZCBbJXNdIiwKKwkJCSAgICAqQUNQSV9DQVNUX1BUUih1MzIsIG1hcHBlZF90YWJsZS0+c2lnbmF0dXJlKSwKKwkJCSAgICBzaWduYXR1cmUpKTsKIAkJZ290byB1bm1hcF9hbmRfZXhpdDsKIAl9CiAKKwkvKgorCSAqIEFDUEkgVGFibGUgT3ZlcnJpZGU6CisJICoKKwkgKiBCZWZvcmUgd2UgaW5zdGFsbCB0aGUgdGFibGUsIGxldCB0aGUgaG9zdCBPUyBvdmVycmlkZSBpdCB3aXRoIGEgbmV3CisJICogb25lIGlmIGRlc2lyZWQuIEFueSB0YWJsZSB3aXRoaW4gdGhlIFJTRFQvWFNEVCBjYW4gYmUgcmVwbGFjZWQsCisJICogaW5jbHVkaW5nIHRoZSBEU0RUIHdoaWNoIGlzIHBvaW50ZWQgdG8gYnkgdGhlIEZBRFQuCisJICovCisJc3RhdHVzID0gYWNwaV9vc190YWJsZV9vdmVycmlkZShtYXBwZWRfdGFibGUsICZvdmVycmlkZV90YWJsZSk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpICYmIG92ZXJyaWRlX3RhYmxlKSB7CisJCUFDUElfSU5GTygoQUVfSU5GTywKKwkJCSAgICIlNC40cyBAIDB4JXAgVGFibGUgb3ZlcnJpZGUsIHJlcGxhY2VkIHdpdGg6IiwKKwkJCSAgIG1hcHBlZF90YWJsZS0+c2lnbmF0dXJlLCBBQ1BJX0NBU1RfUFRSKHZvaWQsCisJCQkJCQkJCSAgYWRkcmVzcykpKTsKKworCQlhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW3RhYmxlX2luZGV4XS5wb2ludGVyID0KKwkJICAgIG92ZXJyaWRlX3RhYmxlOworCQlhZGRyZXNzID0gQUNQSV9QVFJfVE9fUEhZU0FERFIob3ZlcnJpZGVfdGFibGUpOworCisJCXRhYmxlX3RvX2luc3RhbGwgPSBvdmVycmlkZV90YWJsZTsKKwkJZmxhZ3MgPSBBQ1BJX1RBQkxFX09SSUdJTl9PVkVSUklERTsKKwl9IGVsc2UgeworCQl0YWJsZV90b19pbnN0YWxsID0gbWFwcGVkX3RhYmxlOworCQlmbGFncyA9IEFDUElfVEFCTEVfT1JJR0lOX01BUFBFRDsKKwl9CisKIAkvKiBJbml0aWFsaXplIHRoZSB0YWJsZSBlbnRyeSAqLwogCiAJYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1t0YWJsZV9pbmRleF0uYWRkcmVzcyA9IGFkZHJlc3M7Ci0JYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1t0YWJsZV9pbmRleF0ubGVuZ3RoID0gdGFibGUtPmxlbmd0aDsKKwlhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW3RhYmxlX2luZGV4XS5sZW5ndGggPQorCSAgICB0YWJsZV90b19pbnN0YWxsLT5sZW5ndGg7CiAJYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1t0YWJsZV9pbmRleF0uZmxhZ3MgPSBmbGFnczsKIAogCUFDUElfTU9WRV8zMl9UT18zMigmCiAJCQkgICAoYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1t0YWJsZV9pbmRleF0uCi0JCQkgICAgc2lnbmF0dXJlKSwgdGFibGUtPnNpZ25hdHVyZSk7CisJCQkgICAgc2lnbmF0dXJlKSwgdGFibGVfdG9faW5zdGFsbC0+c2lnbmF0dXJlKTsKIAotCWFjcGlfdGJfcHJpbnRfdGFibGVfaGVhZGVyKGFkZHJlc3MsIHRhYmxlKTsKKwlhY3BpX3RiX3ByaW50X3RhYmxlX2hlYWRlcihhZGRyZXNzLCB0YWJsZV90b19pbnN0YWxsKTsKIAogCWlmICh0YWJsZV9pbmRleCA9PSBBQ1BJX1RBQkxFX0lOREVYX0RTRFQpIHsKIAogCQkvKiBHbG9iYWwgaW50ZWdlciB3aWR0aCBpcyBiYXNlZCB1cG9uIHJldmlzaW9uIG9mIHRoZSBEU0RUICovCiAKLQkJYWNwaV91dF9zZXRfaW50ZWdlcl93aWR0aCh0YWJsZS0+cmV2aXNpb24pOworCQlhY3BpX3V0X3NldF9pbnRlZ2VyX3dpZHRoKHRhYmxlX3RvX2luc3RhbGwtPnJldmlzaW9uKTsKIAl9CiAKICAgICAgIHVubWFwX2FuZF9leGl0OgotCWFjcGlfb3NfdW5tYXBfbWVtb3J5KHRhYmxlLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7CisJYWNwaV9vc191bm1hcF9tZW1vcnkobWFwcGVkX3RhYmxlLCBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zNzksNyArNDE3LDggQEAKIAl9IGVsc2UgewogCQkvKgogCQkgKiAzMi1iaXQgcGxhdGZvcm0sIFhTRFQ6IFRydW5jYXRlIDY0LWJpdCB0byAzMi1iaXQgYW5kIHJldHVybgotCQkgKiA2NC1iaXQgcGxhdGZvcm0sIFhTRFQ6IE1vdmUgKHVuYWxpZ25lZCkgNjQtYml0IHRvIGxvY2FsLCByZXR1cm4gNjQtYml0CisJCSAqIDY0LWJpdCBwbGF0Zm9ybSwgWFNEVDogTW92ZSAodW5hbGlnbmVkKSA2NC1iaXQgdG8gbG9jYWwsCisJCSAqICByZXR1cm4gNjQtYml0CiAJCSAqLwogCQlBQ1BJX01PVkVfNjRfVE9fNjQoJmFkZHJlc3M2NCwgdGFibGVfZW50cnkpOwogCkBAIC0zODksNyArNDI4LDggQEAKIAkJCS8qIFdpbGwgdHJ1bmNhdGUgNjQtYml0IGFkZHJlc3MgdG8gMzIgYml0cywgaXNzdWUgd2FybmluZyAqLwogCiAJCQlBQ1BJX1dBUk5JTkcoKEFFX0lORk8sCi0JCQkJICAgICAgIjY0LWJpdCBQaHlzaWNhbCBBZGRyZXNzIGluIFhTRFQgaXMgdG9vIGxhcmdlICglOC44WCU4LjhYKSwgdHJ1bmNhdGluZyIsCisJCQkJICAgICAgIjY0LWJpdCBQaHlzaWNhbCBBZGRyZXNzIGluIFhTRFQgaXMgdG9vIGxhcmdlICglOC44WCU4LjhYKSwiCisJCQkJICAgICAgIiB0cnVuY2F0aW5nIiwKIAkJCQkgICAgICBBQ1BJX0ZPUk1BVF9VSU5UNjQoYWRkcmVzczY0KSkpOwogCQl9CiAjZW5kaWYKQEAgLTQwMiw3ICs0NDIsNiBAQAogICogRlVOQ1RJT046ICAgIGFjcGlfdGJfcGFyc2Vfcm9vdF90YWJsZQogICoKICAqIFBBUkFNRVRFUlM6ICBSc2RwICAgICAgICAgICAgICAgICAgICAtIFBvaW50ZXIgdG8gdGhlIFJTRFAKLSAqICAgICAgICAgICAgICBGbGFncyAgICAgICAgICAgICAgICAgICAtIEZsYWdzCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKQEAgLTQxNiw3ICs0NTUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogYWNwaV9zdGF0dXMgX19pbml0Ci1hY3BpX3RiX3BhcnNlX3Jvb3RfdGFibGUoYWNwaV9waHlzaWNhbF9hZGRyZXNzIHJzZHBfYWRkcmVzcywgdTggZmxhZ3MpCithY3BpX3RiX3BhcnNlX3Jvb3RfdGFibGUoYWNwaV9waHlzaWNhbF9hZGRyZXNzIHJzZHBfYWRkcmVzcykKIHsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9yc2RwICpyc2RwOwogCXUzMiB0YWJsZV9lbnRyeV9zaXplOwpAQCAtNTEzLDEzICs1NTIsMTIgQEAKIAogCS8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHRhYmxlcyBkZXNjcmliZWQgaW4gdGhlIHJvb3QgdGFibGUgKi8KIAotCXRhYmxlX2NvdW50ID0KLQkgICAgKHUzMikgKCh0YWJsZS0+bGVuZ3RoIC0KLQkJICAgIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKSAvIHRhYmxlX2VudHJ5X3NpemUpOwotCisJdGFibGVfY291bnQgPSAodTMyKSgodGFibGUtPmxlbmd0aCAtIHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIpKSAvCisJCQkgICAgdGFibGVfZW50cnlfc2l6ZSk7CiAJLyoKLQkgKiBGaXJzdCB0d28gZW50cmllcyBpbiB0aGUgdGFibGUgYXJyYXkgYXJlIHJlc2VydmVkIGZvciB0aGUgRFNEVCBhbmQgRkFDUywKLQkgKiB3aGljaCBhcmUgbm90IGFjdHVhbGx5IHByZXNlbnQgaW4gdGhlIFJTRFQvWFNEVCAtIHRoZXkgY29tZSBmcm9tIHRoZSBGQURUCisJICogRmlyc3QgdHdvIGVudHJpZXMgaW4gdGhlIHRhYmxlIGFycmF5IGFyZSByZXNlcnZlZCBmb3IgdGhlIERTRFQKKwkgKiBhbmQgRkFDUywgd2hpY2ggYXJlIG5vdCBhY3R1YWxseSBwcmVzZW50IGluIHRoZSBSU0RUL1hTRFQgLSB0aGV5CisJICogY29tZSBmcm9tIHRoZSBGQURUCiAJICovCiAJdGFibGVfZW50cnkgPQogCSAgICBBQ1BJX0NBU1RfUFRSKHU4LCB0YWJsZSkgKyBzaXplb2Yoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyKTsKQEAgLTU2NywxNCArNjA1LDE0IEBACiAJICovCiAJZm9yIChpID0gMjsgaSA8IGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC5jb3VudDsgaSsrKSB7CiAJCWFjcGlfdGJfaW5zdGFsbF90YWJsZShhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLgotCQkJCSAgICAgIGFkZHJlc3MsIGZsYWdzLCBOVUxMLCBpKTsKKwkJCQkgICAgICBhZGRyZXNzLCBOVUxMLCBpKTsKIAogCQkvKiBTcGVjaWFsIGNhc2UgZm9yIEZBRFQgLSBnZXQgdGhlIERTRFQgYW5kIEZBQ1MgKi8KIAogCQlpZiAoQUNQSV9DT01QQVJFX05BTUUKIAkJICAgICgmYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5zaWduYXR1cmUsCiAJCSAgICAgQUNQSV9TSUdfRkFEVCkpIHsKLQkJCWFjcGlfdGJfcGFyc2VfZmFkdChpLCBmbGFncyk7CisJCQlhY3BpX3RiX3BhcnNlX2ZhZHQoaSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMKaW5kZXggYWIwYWZmMy4uYTg4ZjAyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmYWNlLmMKQEAgLTE1MCw4ICsxNTAsNyBAQAogCSAqIFJvb3QgVGFibGUgQXJyYXkuIFRoaXMgYXJyYXkgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBSU0RUL1hTRFQKIAkgKiBpbiBhIGNvbW1vbiwgbW9yZSB1c2VhYmxlIGZvcm1hdC4KIAkgKi8KLQlzdGF0dXMgPQotCSAgICBhY3BpX3RiX3BhcnNlX3Jvb3RfdGFibGUocnNkcF9hZGRyZXNzLCBBQ1BJX1RBQkxFX09SSUdJTl9NQVBQRUQpOworCXN0YXR1cyA9IGFjcGlfdGJfcGFyc2Vfcm9vdF90YWJsZShyc2RwX2FkZHJlc3MpOwogCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogfQogCkBAIC0yNDcsNyArMjQ2LDcgQEAKIAogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfbG9hZF90YWJsZSkKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBGVU5DVElPTjogICAgYWNwaV9nZXRfdGFibGVfaGVhZGVyCiAgKgpAQCAtMjYyLDcgKzI2MSw3IEBACiAgKiBOT1RFOiAgICAgICAgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGluIHVubWFwcGluZyB0aGUgaGVhZGVyIHdpdGgKICAqICAgICAgICAgICAgICBhY3BpX29zX3VubWFwX21lbW9yeQogICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cwogYWNwaV9nZXRfdGFibGVfaGVhZGVyKGNoYXIgKnNpZ25hdHVyZSwKIAkJICAgICAgdTMyIGluc3RhbmNlLCBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKm91dF90YWJsZV9oZWFkZXIpCkBAIC0yNzcsOSArMjc2LDggQEAKIAkJcmV0dXJuIChBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQkvKgotCSAqIFdhbGsgdGhlIHJvb3QgdGFibGUgbGlzdAotCSAqLworCS8qIFdhbGsgdGhlIHJvb3QgdGFibGUgbGlzdCAqLworCiAJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBhY3BpX2dibF9yb290X3RhYmxlX2xpc3QuY291bnQ7IGkrKykgewogCQlpZiAoIUFDUElfQ09NUEFSRV9OQU1FCiAJCSAgICAoJihhY3BpX2dibF9yb290X3RhYmxlX2xpc3QudGFibGVzW2ldLnNpZ25hdHVyZSksCkBAIC0yOTIsOCArMjkwLDggQEAKIAkJfQogCiAJCWlmICghYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5wb2ludGVyKSB7Ci0JCQlpZiAoKGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbaV0uCi0JCQkgICAgIGZsYWdzICYgQUNQSV9UQUJMRV9PUklHSU5fTUFTSykgPT0KKwkJCWlmICgoYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5mbGFncyAmCisJCQkgICAgIEFDUElfVEFCTEVfT1JJR0lOX01BU0spID09CiAJCQkgICAgQUNQSV9UQUJMRV9PUklHSU5fTUFQUEVEKSB7CiAJCQkJaGVhZGVyID0KIAkJCQkgICAgYWNwaV9vc19tYXBfbWVtb3J5KGFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC4KQEAgLTMyNCw3ICszMjIsNyBAQAogCiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfdGFibGVfaGVhZGVyKQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3VubG9hZF90YWJsZV9pZAogICoKQEAgLTM3NSw3ICszNzMsNyBAQAogICoKICAqIERFU0NSSVBUSU9OOiBGaW5kcyBhbmQgdmVyaWZpZXMgYW4gQUNQSSB0YWJsZS4KICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogYWNwaV9zdGF0dXMKIGFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZShjaGFyICpzaWduYXR1cmUsCiAJICAgICAgIHUzMiBpbnN0YW5jZSwgc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICoqb3V0X3RhYmxlLApAQCAtMzkxLDkgKzM4OSw4IEBACiAJCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7CiAJfQogCi0JLyoKLQkgKiBXYWxrIHRoZSByb290IHRhYmxlIGxpc3QKLQkgKi8KKwkvKiBXYWxrIHRoZSByb290IHRhYmxlIGxpc3QgKi8KKwogCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LmNvdW50OyBpKyspIHsKIAkJaWYgKCFBQ1BJX0NPTVBBUkVfTkFNRQogCQkgICAgKCYoYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5zaWduYXR1cmUpLApAQCAtNTAyLDcgKzQ5OSw2IEBACiBzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV90Yl9sb2FkX25hbWVzcGFjZSh2b2lkKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlOwogCXUzMiBpOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSh0Yl9sb2FkX25hbWVzcGFjZSk7CkBAIC01MjYsNTggKzUyMiwyOCBAQAogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CiAKLQkvKgotCSAqIEZpbmQgRFNEVCB0YWJsZQotCSAqLwotCXN0YXR1cyA9Ci0JICAgIGFjcGlfb3NfdGFibGVfb3ZlcnJpZGUoYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LgotCQkJCSAgIHRhYmxlc1tBQ1BJX1RBQkxFX0lOREVYX0RTRFRdLnBvaW50ZXIsCi0JCQkJICAgJnRhYmxlKTsKLQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgdGFibGUpIHsKLQkJLyoKLQkJICogRFNEVCB0YWJsZSBoYXMgYmVlbiBmb3VuZAotCQkgKi8KLQkJYWNwaV90Yl9kZWxldGVfdGFibGUoJmFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC4KLQkJCQkgICAgIHRhYmxlc1tBQ1BJX1RBQkxFX0lOREVYX0RTRFRdKTsKLQkJYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tBQ1BJX1RBQkxFX0lOREVYX0RTRFRdLnBvaW50ZXIgPQotCQkgICAgdGFibGU7Ci0JCWFjcGlfZ2JsX3Jvb3RfdGFibGVfbGlzdC50YWJsZXNbQUNQSV9UQUJMRV9JTkRFWF9EU0RUXS5sZW5ndGggPQotCQkgICAgdGFibGUtPmxlbmd0aDsKLQkJYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tBQ1BJX1RBQkxFX0lOREVYX0RTRFRdLmZsYWdzID0KLQkJICAgIEFDUElfVEFCTEVfT1JJR0lOX1VOS05PV047Ci0KLQkJQUNQSV9JTkZPKChBRV9JTkZPLCAiVGFibGUgRFNEVCByZXBsYWNlZCBieSBob3N0IE9TIikpOwotCQlhY3BpX3RiX3ByaW50X3RhYmxlX2hlYWRlcigwLCB0YWJsZSk7Ci0KLQkJaWYgKG5vX2F1dG9fc3NkdCA9PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJBQ1BJOiBEU0RUIG92ZXJyaWRlIHVzZXMgb3JpZ2luYWwgU1NEVHMgdW5sZXNzIFwiYWNwaV9ub19hdXRvX3NzZHRcIlxuIik7Ci0JCX0KLQl9CisJLyogQSB2YWxpZCBEU0RUIGlzIHJlcXVpcmVkICovCiAKIAlzdGF0dXMgPQogCSAgICBhY3BpX3RiX3ZlcmlmeV90YWJsZSgmYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LgogCQkJCSB0YWJsZXNbQUNQSV9UQUJMRV9JTkRFWF9EU0RUXSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAKLQkJLyogQSB2YWxpZCBEU0RUIGlzIHJlcXVpcmVkICovCi0KIAkJc3RhdHVzID0gQUVfTk9fQUNQSV9UQUJMRVM7CiAJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwogCX0KIAogCSh2b2lkKWFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9UQUJMRVMpOwogCi0JLyoKLQkgKiBMb2FkIGFuZCBwYXJzZSB0YWJsZXMuCi0JICovCisJLyogTG9hZCBhbmQgcGFyc2UgdGFibGVzICovCisKIAlzdGF0dXMgPSBhY3BpX25zX2xvYWRfdGFibGUoQUNQSV9UQUJMRV9JTkRFWF9EU0RULCBhY3BpX2dibF9yb290X25vZGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKLQkvKgotCSAqIExvYWQgYW55IFNTRFQgb3IgUFNEVCB0YWJsZXMuIE5vdGU6IExvb3AgbGVhdmVzIHRhYmxlcyBsb2NrZWQKLQkgKi8KKwkvKiBMb2FkIGFueSBTU0RUIG9yIFBTRFQgdGFibGVzLiBOb3RlOiBMb29wIGxlYXZlcyB0YWJsZXMgbG9ja2VkICovCisKIAkodm9pZClhY3BpX3V0X2FjcXVpcmVfbXV0ZXgoQUNQSV9NVFhfVEFCTEVTKTsKIAlmb3IgKGkgPSAwOyBpIDwgYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LmNvdW50OyArK2kpIHsKIAkJaWYgKCghQUNQSV9DT01QQVJFX05BTUUKQEAgLTYzMCw5ICs1OTYsOCBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2xvYWRfdGFibGVzKTsKIAotCS8qCi0JICogTG9hZCB0aGUgbmFtZXNwYWNlIGZyb20gdGhlIHRhYmxlcwotCSAqLworCS8qIExvYWQgdGhlIG5hbWVzcGFjZSBmcm9tIHRoZSB0YWJsZXMgKi8KKwogCXN0YXR1cyA9IGFjcGlfdGJfbG9hZF9uYW1lc3BhY2UoKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZnJvb3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZnJvb3QuYwppbmRleCBiN2ZjOGRkLi44NWVhODM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZyb290LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90Ynhmcm9vdC5jCkBAIC03NSw4ICs3NSw4IEBACiAJICogTm90ZTogU29tZXRpbWVzIHRoZXJlIGV4aXN0cyBtb3JlIHRoYW4gb25lIFJTRFAgaW4gbWVtb3J5OyB0aGUgdmFsaWQKIAkgKiBSU0RQIGhhcyBhIHZhbGlkIGNoZWNrc3VtLCBhbGwgb3RoZXJzIGhhdmUgYW4gaW52YWxpZCBjaGVja3N1bS4KIAkgKi8KLQlpZiAoQUNQSV9TVFJOQ01QKChjaGFyICopcnNkcCwgQUNQSV9TSUdfUlNEUCwgc2l6ZW9mKEFDUElfU0lHX1JTRFApIC0gMSkKLQkgICAgIT0gMCkgeworCWlmIChBQ1BJX1NUUk5DTVAoKGNoYXIgKilyc2RwLCBBQ1BJX1NJR19SU0RQLAorCQkJIHNpemVvZihBQ1BJX1NJR19SU0RQKSAtIDEpICE9IDApIHsKIAogCQkvKiBOb3BlLCBCQUQgU2lnbmF0dXJlICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRjb3B5LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Y29weS5jCmluZGV4IGIwZGNmZDMuLjkxOTYyNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRjb3B5LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGNvcHkuYwpAQCAtMTM1LDExICsxMzUsMTEgQEAKIAkgKiBJbiBnZW5lcmFsLCB0aGUgZXh0ZXJuYWwgb2JqZWN0IHdpbGwgYmUgdGhlIHNhbWUgdHlwZSBhcwogCSAqIHRoZSBpbnRlcm5hbCBvYmplY3QKIAkgKi8KLQlleHRlcm5hbF9vYmplY3QtPnR5cGUgPSBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbnRlcm5hbF9vYmplY3QpOworCWV4dGVybmFsX29iamVjdC0+dHlwZSA9IGludGVybmFsX29iamVjdC0+Y29tbW9uLnR5cGU7CiAKIAkvKiBIb3dldmVyLCBvbmx5IGEgbGltaXRlZCBudW1iZXIgb2YgZXh0ZXJuYWwgdHlwZXMgYXJlIHN1cHBvcnRlZCAqLwogCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbnRlcm5hbF9vYmplY3QpKSB7CisJc3dpdGNoIChpbnRlcm5hbF9vYmplY3QtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCiAJCWV4dGVybmFsX29iamVjdC0+c3RyaW5nLnBvaW50ZXIgPSAoY2hhciAqKWRhdGFfc3BhY2U7CkBAIC0yMjIsOCArMjIyLDggQEAKIAkJICovCiAJCUFDUElfRVJST1IoKEFFX0lORk8sCiAJCQkgICAgIlVuc3VwcG9ydGVkIG9iamVjdCB0eXBlLCBjYW5ub3QgY29udmVydCB0byBleHRlcm5hbCBvYmplY3Q6ICVzIiwKLQkJCSAgICBhY3BpX3V0X2dldF90eXBlX25hbWUoQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCQkJCSAgKGludGVybmFsX29iamVjdCkpKSk7CisJCQkgICAgYWNwaV91dF9nZXRfdHlwZV9uYW1lKGludGVybmFsX29iamVjdC0+Y29tbW9uLgorCQkJCQkJICB0eXBlKSkpOwogCiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9TVVBQT1JUKTsKIAl9CkBAIC0zNTUsNyArMzU1LDcgQEAKIAlpbmZvLm9iamVjdF9zcGFjZSA9IDA7CiAJaW5mby5udW1fcGFja2FnZXMgPSAxOwogCi0JZXh0ZXJuYWxfb2JqZWN0LT50eXBlID0gQUNQSV9HRVRfT0JKRUNUX1RZUEUoaW50ZXJuYWxfb2JqZWN0KTsKKwlleHRlcm5hbF9vYmplY3QtPnR5cGUgPSBpbnRlcm5hbF9vYmplY3QtPmNvbW1vbi50eXBlOwogCWV4dGVybmFsX29iamVjdC0+cGFja2FnZS5jb3VudCA9IGludGVybmFsX29iamVjdC0+cGFja2FnZS5jb3VudDsKIAlleHRlcm5hbF9vYmplY3QtPnBhY2thZ2UuZWxlbWVudHMgPSBBQ1BJX0NBU1RfUFRSKHVuaW9uIGFjcGlfb2JqZWN0LAogCQkJCQkJCSAgaW5mby5mcmVlX3NwYWNlKTsKQEAgLTM5OSw3ICszOTksNyBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRSh1dF9jb3B5X2lvYmplY3RfdG9fZW9iamVjdCk7CiAKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoaW50ZXJuYWxfb2JqZWN0KSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCWlmIChpbnRlcm5hbF9vYmplY3QtPmNvbW1vbi50eXBlID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CiAJCS8qCiAJCSAqIFBhY2thZ2Ugb2JqZWN0OiAgQ29weSBhbGwgc3Vib2JqZWN0cyAoaW5jbHVkaW5nCiAJCSAqIG5lc3RlZCBwYWNrYWdlcykKQEAgLTQ5Niw4ICs0OTYsOSBAQAogCWNhc2UgQUNQSV9UWVBFX1NUUklORzoKIAogCQlpbnRlcm5hbF9vYmplY3QtPnN0cmluZy5wb2ludGVyID0KLQkJICAgIEFDUElfQUxMT0NBVEVfWkVST0VEKChhY3BpX3NpemUpIGV4dGVybmFsX29iamVjdC0+c3RyaW5nLgotCQkJCQkgbGVuZ3RoICsgMSk7CisJCSAgICBBQ1BJX0FMTE9DQVRFX1pFUk9FRCgoYWNwaV9zaXplKQorCQkJCQkgZXh0ZXJuYWxfb2JqZWN0LT5zdHJpbmcubGVuZ3RoICsgMSk7CisKIAkJaWYgKCFpbnRlcm5hbF9vYmplY3QtPnN0cmluZy5wb2ludGVyKSB7CiAJCQlnb3RvIGVycm9yX2V4aXQ7CiAJCX0KQEAgLTY5Nyw3ICs2OTgsNyBAQAogCiAJLyogSGFuZGxlIHRoZSBvYmplY3RzIHdpdGggZXh0cmEgZGF0YSAqLwogCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShkZXN0X2Rlc2MpKSB7CisJc3dpdGNoIChkZXN0X2Rlc2MtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfQlVGRkVSOgogCQkvKgogCQkgKiBBbGxvY2F0ZSBhbmQgY29weSB0aGUgYWN0dWFsIGJ1ZmZlciBpZiBhbmQgb25seSBpZjoKQEAgLTgxNCw4ICs4MTUsOCBAQAogCQkJICogVGhpcyBpcyBhIHNpbXBsZSBvYmplY3QsIGp1c3QgY29weSBpdAogCQkJICovCiAJCQl0YXJnZXRfb2JqZWN0ID0KLQkJCSAgICBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3QoQUNQSV9HRVRfT0JKRUNUX1RZUEUKLQkJCQkJCQkgICAoc291cmNlX29iamVjdCkpOworCQkJICAgIGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChzb3VyY2Vfb2JqZWN0LT4KKwkJCQkJCQkgICBjb21tb24udHlwZSk7CiAJCQlpZiAoIXRhcmdldF9vYmplY3QpIHsKIAkJCQlyZXR1cm4gKEFFX05PX01FTU9SWSk7CiAJCQl9CkBAIC04OTIsNyArODkzLDcgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UodXRfY29weV9pcGFja2FnZV90b19pcGFja2FnZSk7CiAKLQlkZXN0X29iai0+Y29tbW9uLnR5cGUgPSBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2Vfb2JqKTsKKwlkZXN0X29iai0+Y29tbW9uLnR5cGUgPSBzb3VyY2Vfb2JqLT5jb21tb24udHlwZTsKIAlkZXN0X29iai0+Y29tbW9uLmZsYWdzID0gc291cmNlX29iai0+Y29tbW9uLmZsYWdzOwogCWRlc3Rfb2JqLT5wYWNrYWdlLmNvdW50ID0gc291cmNlX29iai0+cGFja2FnZS5jb3VudDsKIApAQCAtOTUwLDE1ICs5NTEsMTQgQEAKIAogCS8qIENyZWF0ZSB0aGUgdG9wIGxldmVsIG9iamVjdCAqLwogCi0JKmRlc3RfZGVzYyA9Ci0JICAgIGFjcGlfdXRfY3JlYXRlX2ludGVybmFsX29iamVjdChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShzb3VyY2VfZGVzYykpOworCSpkZXN0X2Rlc2MgPSBhY3BpX3V0X2NyZWF0ZV9pbnRlcm5hbF9vYmplY3Qoc291cmNlX2Rlc2MtPmNvbW1vbi50eXBlKTsKIAlpZiAoISpkZXN0X2Rlc2MpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX05PX01FTU9SWSk7CiAJfQogCiAJLyogQ29weSB0aGUgb2JqZWN0IGFuZCBwb3NzaWJsZSBzdWJvYmplY3RzICovCiAKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUoc291cmNlX2Rlc2MpID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJaWYgKHNvdXJjZV9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgewogCQlzdGF0dXMgPQogCQkgICAgYWNwaV91dF9jb3B5X2lwYWNrYWdlX3RvX2lwYWNrYWdlKHNvdXJjZV9kZXNjLCAqZGVzdF9kZXNjLAogCQkJCQkJICAgICAgd2Fsa19zdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVsZXRlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVsZXRlLmMKaW5kZXggYTBiZTllMy4uYTVlZTIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlbGV0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWxldGUuYwpAQCAtODYsNyArODYsNyBAQAogCSAqIE11c3QgZGVsZXRlIG9yIGZyZWUgYW55IHBvaW50ZXJzIHdpdGhpbiB0aGUgb2JqZWN0IHRoYXQgYXJlIG5vdAogCSAqIGFjdHVhbCBBQ1BJIG9iamVjdHMgKGZvciBleGFtcGxlLCBhIHJhdyBidWZmZXIgcG9pbnRlcikuCiAJICovCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmplY3QpKSB7CisJc3dpdGNoIChvYmplY3QtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfQUxMT0NBVElPTlMsCkBAIC0zODIsNyArMzgyLDcgQEAKIAkJCQkJICBvYmplY3QsIG5ld19jb3VudCkpOwogCQl9CiAKLQkJaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9iamVjdCkgPT0gQUNQSV9UWVBFX01FVEhPRCkgeworCQlpZiAob2JqZWN0LT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfTUVUSE9EKSB7CiAJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0FMTE9DQVRJT05TLAogCQkJCQkgICJNZXRob2QgT2JqICVwIFJlZnM9JVgsIFtEZWNyZW1lbnRlZF1cbiIsCiAJCQkJCSAgb2JqZWN0LCBuZXdfY291bnQpKTsKQEAgLTQ2OSw3ICs0NjksNyBAQAogCQkgKiBBbGwgc3ViLW9iamVjdHMgbXVzdCBoYXZlIHRoZWlyIHJlZmVyZW5jZSBjb3VudCBpbmNyZW1lbnRlZCBhbHNvLgogCQkgKiBEaWZmZXJlbnQgb2JqZWN0IHR5cGVzIGhhdmUgZGlmZmVyZW50IHN1Ym9iamVjdHMuCiAJCSAqLwotCQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKG9iamVjdCkpIHsKKwkJc3dpdGNoIChvYmplY3QtPmNvbW1vbi50eXBlKSB7CiAJCWNhc2UgQUNQSV9UWVBFX0RFVklDRToKIAkJY2FzZSBBQ1BJX1RZUEVfUFJPQ0VTU09SOgogCQljYXNlIEFDUElfVFlQRV9QT1dFUjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZXZhbC5jCmluZGV4IDljOTg5N2QuLjAwNmIxNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGV2YWwuYwpAQCAtNTksMjYgKzU5LDM1IEBACiAKIC8qCiAgKiBTdHJpbmdzIHN1cHBvcnRlZCBieSB0aGUgX09TSSBwcmVkZWZpbmVkIChpbnRlcm5hbCkgbWV0aG9kLgorICoKKyAqIE1hcmNoIDIwMDk6IFJlbW92ZWQgIkxpbnV4IiBhcyB0aGlzIGhvc3Qgbm8gbG9uZ2VyIHdhbnRzIHRvIHJlc3BvbmQgdHJ1ZQorICogZm9yIHRoaXMgc3RyaW5nLiBCYXNpY2FsbHksIHRoZSBvbmx5IHNhZmUgT1Mgc3RyaW5ncyBhcmUgd2luZG93cy1yZWxhdGVkCisgKiBhbmQgaW4gbWFueSBvciBtb3N0IGNhc2VzIHJlcHJlc2VudCB0aGUgb25seSB0ZXN0IHBhdGggd2l0aGluIHRoZQorICogQklPUy1wcm92aWRlZCBBU0wgY29kZS4KKyAqCisgKiBUaGUgc2Vjb25kIGVsZW1lbnQgb2YgZWFjaCBlbnRyeSBpcyB1c2VkIHRvIHRyYWNrIHRoZSBuZXdlc3QgdmVyc2lvbiBvZgorICogV2luZG93cyB0aGF0IHRoZSBCSU9TIGhhcyByZXF1ZXN0ZWQuCiAgKi8KLXN0YXRpYyBjaGFyICphY3BpX2ludGVyZmFjZXNfc3VwcG9ydGVkW10gPSB7CitzdGF0aWMgc3RydWN0IGFjcGlfaW50ZXJmYWNlX2luZm8gYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZFtdID0gewogCS8qIE9wZXJhdGluZyBTeXN0ZW0gVmVuZG9yIFN0cmluZ3MgKi8KIAotCSJXaW5kb3dzIDIwMDAiLAkJLyogV2luZG93cyAyMDAwICovCi0JIldpbmRvd3MgMjAwMSIsCQkvKiBXaW5kb3dzIFhQICovCi0JIldpbmRvd3MgMjAwMSBTUDEiLAkvKiBXaW5kb3dzIFhQIFNQMSAqLwotCSJXaW5kb3dzIDIwMDEgU1AyIiwJLyogV2luZG93cyBYUCBTUDIgKi8KLQkiV2luZG93cyAyMDAxLjEiLAkvKiBXaW5kb3dzIFNlcnZlciAyMDAzICovCi0JIldpbmRvd3MgMjAwMS4xIFNQMSIsCS8qIFdpbmRvd3MgU2VydmVyIDIwMDMgU1AxIC0gQWRkZWQgMDMvMjAwNiAqLwotCSJXaW5kb3dzIDIwMDYiLAkJLyogV2luZG93cyBWaXN0YSAtIEFkZGVkIDAzLzIwMDYgKi8KKwl7IldpbmRvd3MgMjAwMCIsIEFDUElfT1NJX1dJTl8yMDAwfSwJLyogV2luZG93cyAyMDAwICovCisJeyJXaW5kb3dzIDIwMDEiLCBBQ1BJX09TSV9XSU5fWFB9LAkvKiBXaW5kb3dzIFhQICovCisJeyJXaW5kb3dzIDIwMDEgU1AxIiwgQUNQSV9PU0lfV0lOX1hQX1NQMX0sCS8qIFdpbmRvd3MgWFAgU1AxICovCisJeyJXaW5kb3dzIDIwMDEuMSIsIEFDUElfT1NJX1dJTlNSVl8yMDAzfSwJLyogV2luZG93cyBTZXJ2ZXIgMjAwMyAqLworCXsiV2luZG93cyAyMDAxIFNQMiIsIEFDUElfT1NJX1dJTl9YUF9TUDJ9LAkvKiBXaW5kb3dzIFhQIFNQMiAqLworCXsiV2luZG93cyAyMDAxLjEgU1AxIiwgQUNQSV9PU0lfV0lOU1JWXzIwMDNfU1AxfSwJLyogV2luZG93cyBTZXJ2ZXIgMjAwMyBTUDEgLSBBZGRlZCAwMy8yMDA2ICovCisJeyJXaW5kb3dzIDIwMDYiLCBBQ1BJX09TSV9XSU5fVklTVEF9LAkvKiBXaW5kb3dzIFZpc3RhIC0gQWRkZWQgMDMvMjAwNiAqLwogCiAJLyogRmVhdHVyZSBHcm91cCBTdHJpbmdzICovCiAKLQkiRXh0ZW5kZWQgQWRkcmVzcyBTcGFjZSBEZXNjcmlwdG9yIgotCSAgICAvKgotCSAgICAgKiBBbGwgIm9wdGlvbmFsIiBmZWF0dXJlIGdyb3VwIHN0cmluZ3MgKGZlYXR1cmVzIHRoYXQgYXJlIGltcGxlbWVudGVkCi0JICAgICAqIGJ5IHRoZSBob3N0KSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGhvc3QgdmVyc2lvbiBvZgotCSAgICAgKiBhY3BpX29zX3ZhbGlkYXRlX2ludGVyZmFjZSBhbmQgc2hvdWxkIG5vdCBiZSBhZGRlZCBoZXJlLgotCSAgICAgKi8KKwl7IkV4dGVuZGVkIEFkZHJlc3MgU3BhY2UgRGVzY3JpcHRvciIsIDB9CisKKwkvKgorCSAqIEFsbCAib3B0aW9uYWwiIGZlYXR1cmUgZ3JvdXAgc3RyaW5ncyAoZmVhdHVyZXMgdGhhdCBhcmUgaW1wbGVtZW50ZWQKKwkgKiBieSB0aGUgaG9zdCkgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSBob3N0IHZlcnNpb24gb2YKKwkgKiBhY3BpX29zX3ZhbGlkYXRlX2ludGVyZmFjZSBhbmQgc2hvdWxkIG5vdCBiZSBhZGRlZCBoZXJlLgorCSAqLwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTk4LDYgKzEwNyw3IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnN0cmluZ19kZXNjOwogCXVuaW9uIGFjcGlfb3BlcmFuZF9vYmplY3QgKnJldHVybl9kZXNjOworCXUzMiByZXR1cm5fdmFsdWU7CiAJdTMyIGk7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X29zaV9pbXBsZW1lbnRhdGlvbik7CkBAIC0xMTYsMTkgKzEyNiwyOCBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfTk9fTUVNT1JZKTsKIAl9CiAKLQkvKiBEZWZhdWx0IHJldHVybiB2YWx1ZSBpcyAwLCBOT1QtU1VQUE9SVEVEICovCisJLyogRGVmYXVsdCByZXR1cm4gdmFsdWUgaXMgMCwgTk9UIFNVUFBPUlRFRCAqLwogCi0JcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSAwOwotCXdhbGtfc3RhdGUtPnJldHVybl9kZXNjID0gcmV0dXJuX2Rlc2M7CisJcmV0dXJuX3ZhbHVlID0gMDsKIAogCS8qIENvbXBhcmUgaW5wdXQgc3RyaW5nIHRvIHN0YXRpYyB0YWJsZSBvZiBzdXBwb3J0ZWQgaW50ZXJmYWNlcyAqLwogCiAJZm9yIChpID0gMDsgaSA8IEFDUElfQVJSQVlfTEVOR1RIKGFjcGlfaW50ZXJmYWNlc19zdXBwb3J0ZWQpOyBpKyspIHsKLQkJaWYgKCFBQ1BJX1NUUkNNUAotCQkgICAgKHN0cmluZ19kZXNjLT5zdHJpbmcucG9pbnRlciwKLQkJICAgICBhY3BpX2ludGVyZmFjZXNfc3VwcG9ydGVkW2ldKSkgewotCQkJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSBBQ1BJX1VJTlQzMl9NQVg7Ci0JCQlnb3RvIGRvbmU7CisJCWlmICghQUNQSV9TVFJDTVAoc3RyaW5nX2Rlc2MtPnN0cmluZy5wb2ludGVyLAorCQkJCSBhY3BpX2ludGVyZmFjZXNfc3VwcG9ydGVkW2ldLm5hbWUpKSB7CisJCQkvKgorCQkJICogVGhlIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQuCisJCQkgKiBVcGRhdGUgdGhlIG9zaV9kYXRhIGlmIG5lY2Vzc2FyeS4gV2Uga2VlcCB0cmFjayBvZiB0aGUgbGF0ZXN0CisJCQkgKiB2ZXJzaW9uIG9mIFdpbmRvd3MgdGhhdCBoYXMgYmVlbiByZXF1ZXN0ZWQgYnkgdGhlIEJJT1MuCisJCQkgKi8KKwkJCWlmIChhY3BpX2ludGVyZmFjZXNfc3VwcG9ydGVkW2ldLnZhbHVlID4KKwkJCSAgICBhY3BpX2dibF9vc2lfZGF0YSkgeworCQkJCWFjcGlfZ2JsX29zaV9kYXRhID0KKwkJCQkgICAgYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZFtpXS52YWx1ZTsKKwkJCX0KKworCQkJcmV0dXJuX3ZhbHVlID0gQUNQSV9VSU5UMzJfTUFYOworCQkJZ290byBleGl0OwogCQl9CiAJfQogCkBAIC0xMzksMTUgKzE1OCwyMiBAQAogCSAqLwogCXN0YXR1cyA9IGFjcGlfb3NfdmFsaWRhdGVfaW50ZXJmYWNlKHN0cmluZ19kZXNjLT5zdHJpbmcucG9pbnRlcik7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCXJldHVybl9kZXNjLT5pbnRlZ2VyLnZhbHVlID0gQUNQSV9VSU5UMzJfTUFYOworCisJCS8qIFRoZSBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkICovCisKKwkJcmV0dXJuX3ZhbHVlID0gQUNQSV9VSU5UMzJfTUFYOwogCX0KIAotZG9uZToKLQlBQ1BJX0RFQlVHX1BSSU5UX1JBVygoQUNQSV9EQl9JTkZPLCAiQUNQSTogQklPUyBfT1NJKCVzKSAlc3N1cHBvcnRlZFxuIiwKLQkJc3RyaW5nX2Rlc2MtPnN0cmluZy5wb2ludGVyLAotCQlyZXR1cm5fZGVzYy0+aW50ZWdlci52YWx1ZSA9PSAwID8gIm5vdC0iIDogIiIpKTsKK2V4aXQ6CisJQUNQSV9ERUJVR19QUklOVF9SQVcgKChBQ1BJX0RCX0lORk8sCisJCSJBQ1BJOiBCSU9TIF9PU0koJXMpIGlzICVzc3VwcG9ydGVkXG4iLAorCQlzdHJpbmdfZGVzYy0+c3RyaW5nLnBvaW50ZXIsIHJldHVybl92YWx1ZSA9PSAwID8gIm5vdCAiIDogIiIpKTsKIAotCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CisJLyogQ29tcGxldGUgdGhlIHJldHVybiB2YWx1ZSAqLworCisJcmV0dXJuX2Rlc2MtPmludGVnZXIudmFsdWUgPSByZXR1cm5fdmFsdWU7CisJd2Fsa19zdGF0ZS0+cmV0dXJuX2Rlc2MgPSByZXR1cm5fZGVzYzsKKwlyZXR1cm5fQUNQSV9TVEFUVVMgKEFFX09LKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE2Nyw4ICsxOTMsOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFDUElfQVJSQVlfTEVOR1RIKGFjcGlfaW50ZXJmYWNlc19zdXBwb3J0ZWQpOyBpKyspIHsKLQkJaWYgKCFBQ1BJX1NUUkNNUChpbnRlcmZhY2UsIGFjcGlfaW50ZXJmYWNlc19zdXBwb3J0ZWRbaV0pKSB7Ci0JCQkqYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZFtpXSA9ICdcMCc7CisJCWlmICghQUNQSV9TVFJDTVAoaW50ZXJmYWNlLCBhY3BpX2ludGVyZmFjZXNfc3VwcG9ydGVkW2ldLm5hbWUpKSB7CisJCQkqYWNwaV9pbnRlcmZhY2VzX3N1cHBvcnRlZFtpXS5uYW1lID0gJ1wwJzsKIAkJCXJldHVybiBBRV9PSzsKIAkJfQogCX0KQEAgLTI0OCw3ICsyNzQsNyBAQAogCiAJLyogTWFwIHRoZSByZXR1cm4gb2JqZWN0IHR5cGUgdG8gdGhlIGJpdG1hcHBlZCB0eXBlICovCiAKLQlzd2l0Y2ggKEFDUElfR0VUX09CSkVDVF9UWVBFKGluZm8tPnJldHVybl9vYmplY3QpKSB7CisJc3dpdGNoICgoaW5mby0+cmV0dXJuX29iamVjdCktPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfSU5URUdFUjoKIAkJcmV0dXJuX2J0eXBlID0gQUNQSV9CVFlQRV9JTlRFR0VSOwogCQlicmVhazsKQEAgLTQxOCw3ICs0NDQsNyBAQAogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CiAKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgewogCiAJCS8qIENvbnZlcnQgdGhlIE51bWVyaWMgSElEIHRvIHN0cmluZyAqLwogCkBAIC00NTksNyArNDg1LDcgQEAKIAkJCSAgc3RydWN0IGFjcGlfY29tcGF0aWJsZV9pZCAqb25lX2NpZCkKIHsKIAotCXN3aXRjaCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpKSB7CisJc3dpdGNoIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUpIHsKIAljYXNlIEFDUElfVFlQRV9JTlRFR0VSOgogCiAJCS8qIENvbnZlcnQgdGhlIE51bWVyaWMgQ0lEIHRvIHN0cmluZyAqLwpAQCAtNTI3LDcgKzU1Myw3IEBACiAJLyogR2V0IHRoZSBudW1iZXIgb2YgX0NJRHMgcmV0dXJuZWQgKi8KIAogCWNvdW50ID0gMTsKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgewogCQljb3VudCA9IG9ial9kZXNjLT5wYWNrYWdlLmNvdW50OwogCX0KIApAQCAtNTU1LDcgKzU4MSw3IEBACiAKIAkvKiBUaGUgX0NJRCBvYmplY3QgY2FuIGJlIGVpdGhlciBhIHNpbmdsZSBDSUQgb3IgYSBwYWNrYWdlIChsaXN0KSBvZiBDSURzICovCiAKLQlpZiAoQUNQSV9HRVRfT0JKRUNUX1RZUEUob2JqX2Rlc2MpID09IEFDUElfVFlQRV9QQUNLQUdFKSB7CisJaWYgKG9ial9kZXNjLT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkgewogCiAJCS8qIFRyYW5zbGF0ZSBlYWNoIHBhY2thZ2UgZWxlbWVudCAqLwogCkBAIC02MjAsNyArNjQ2LDcgQEAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCi0JaWYgKEFDUElfR0VUX09CSkVDVF9UWVBFKG9ial9kZXNjKSA9PSBBQ1BJX1RZUEVfSU5URUdFUikgeworCWlmIChvYmpfZGVzYy0+Y29tbW9uLnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKIAogCQkvKiBDb252ZXJ0IHRoZSBOdW1lcmljIFVJRCB0byBzdHJpbmcgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jCmluZGV4IGEzYWI5ZDkuLjU5ZTQ2ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRnbG9iYWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Z2xvYmFsLmMKQEAgLTI5NCwxMiArMjk0LDkgQEAKIAkvKiBBQ1BJX0JJVFJFR19HTE9CQUxfTE9DS19SRUxFQVNFICAqLyB7QUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCwKIAkJCQkJCUFDUElfQklUUE9TSVRJT05fR0xPQkFMX0xPQ0tfUkVMRUFTRSwKIAkJCQkJCUFDUElfQklUTUFTS19HTE9CQUxfTE9DS19SRUxFQVNFfSwKLQkvKiBBQ1BJX0JJVFJFR19TTEVFUF9UWVBFX0EgICAgICAgICAqLyB7QUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCwKLQkJCQkJCUFDUElfQklUUE9TSVRJT05fU0xFRVBfVFlQRV9YLAotCQkJCQkJQUNQSV9CSVRNQVNLX1NMRUVQX1RZUEVfWH0sCi0JLyogQUNQSV9CSVRSRUdfU0xFRVBfVFlQRV9CICAgICAgICAgKi8ge0FDUElfUkVHSVNURVJfUE0xX0NPTlRST0wsCi0JCQkJCQlBQ1BJX0JJVFBPU0lUSU9OX1NMRUVQX1RZUEVfWCwKLQkJCQkJCUFDUElfQklUTUFTS19TTEVFUF9UWVBFX1h9LAorCS8qIEFDUElfQklUUkVHX1NMRUVQX1RZUEUgICAgICAgICAgICovIHtBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLAorCQkJCQkJQUNQSV9CSVRQT1NJVElPTl9TTEVFUF9UWVBFLAorCQkJCQkJQUNQSV9CSVRNQVNLX1NMRUVQX1RZUEV9LAogCS8qIEFDUElfQklUUkVHX1NMRUVQX0VOQUJMRSAgICAgICAgICovIHtBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLAogCQkJCQkJQUNQSV9CSVRQT1NJVElPTl9TTEVFUF9FTkFCTEUsCiAJCQkJCQlBQ1BJX0JJVE1BU0tfU0xFRVBfRU5BQkxFfSwKQEAgLTQ3Niw3ICs0NzMsNyBAQAogCQlyZXR1cm4gKCJbTlVMTCBPYmplY3QgRGVzY3JpcHRvcl0iKTsKIAl9CiAKLQlyZXR1cm4gKGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShBQ1BJX0dFVF9PQkpFQ1RfVFlQRShvYmpfZGVzYykpKTsKKwlyZXR1cm4gKGFjcGlfdXRfZ2V0X3R5cGVfbmFtZShvYmpfZGVzYy0+Y29tbW9uLnR5cGUpKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTc0OSw3ICs3NDYsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQUNQSV9OVU1fT1dORVJJRF9NQVNLUzsgaSsrKSB7CiAJCWFjcGlfZ2JsX293bmVyX2lkX21hc2tbaV0gPSAwOwogCX0KLQlhY3BpX2dibF9vd25lcl9pZF9tYXNrW0FDUElfTlVNX09XTkVSSURfTUFTS1MgLSAxXSA9IDB4ODAwMDAwMDA7CS8qIExhc3QgSUQgaXMgbmV2ZXIgdmFsaWQgKi8KKworCS8qIExhc3Qgb3duZXJfaUQgaXMgbmV2ZXIgdmFsaWQgKi8KKworCWFjcGlfZ2JsX293bmVyX2lkX21hc2tbQUNQSV9OVU1fT1dORVJJRF9NQVNLUyAtIDFdID0gMHg4MDAwMDAwMDsKIAogCS8qIEdQRSBzdXBwb3J0ICovCiAKQEAgLTc4OSw2ICs3ODksNyBAQAogCWFjcGlfZ2JsX3RyYWNlX2RiZ19sYXllciA9IDA7CiAJYWNwaV9nYmxfZGVidWdnZXJfY29uZmlndXJhdGlvbiA9IERFQlVHR0VSX1RIUkVBRElORzsKIAlhY3BpX2dibF9kYl9vdXRwdXRfZmxhZ3MgPSBBQ1BJX0RCX0NPTlNPTEVfT1VUUFVUOworCWFjcGlfZ2JsX29zaV9kYXRhID0gMDsKIAogCS8qIEhhcmR3YXJlIG9yaWVudGVkICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRsb2NrLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZTAzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bG9jay5jCkBAIC0wLDAgKzEsMTc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTW9kdWxlIE5hbWU6IHV0bG9jayAtIFJlYWRlci9Xcml0ZXIgbG9jayBpbnRlcmZhY2VzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAwOSwgSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CisjaW5jbHVkZSAiYWNjb21tb24uaCIKKworI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgIEFDUElfVVRJTElUSUVTCitBQ1BJX01PRFVMRV9OQU1FKCJ1dGxvY2siKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2NyZWF0ZV9yd19sb2NrCisgKiAgICAgICAgICAgICAgYWNwaV91dF9kZWxldGVfcndfbG9jaworICoKKyAqIFBBUkFNRVRFUlM6ICBMb2NrICAgICAgICAgICAgICAgIC0gUG9pbnRlciB0byBhIHZhbGlkIFJXIGxvY2sKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IFJlYWRlci93cml0ZXIgbG9jayBjcmVhdGlvbiBhbmQgZGVsZXRpb24gaW50ZXJmYWNlcy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworYWNwaV9zdGF0dXMgYWNwaV91dF9jcmVhdGVfcndfbG9jayhzdHJ1Y3QgYWNwaV9yd19sb2NrICpsb2NrKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCWxvY2stPm51bV9yZWFkZXJzID0gMDsKKwlzdGF0dXMgPSBhY3BpX29zX2NyZWF0ZV9tdXRleCgmbG9jay0+cmVhZGVyX211dGV4KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSBhY3BpX29zX2NyZWF0ZV9tdXRleCgmbG9jay0+d3JpdGVyX211dGV4KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIGFjcGlfdXRfZGVsZXRlX3J3X2xvY2soc3RydWN0IGFjcGlfcndfbG9jayAqbG9jaykKK3sKKworCWFjcGlfb3NfZGVsZXRlX211dGV4KGxvY2stPnJlYWRlcl9tdXRleCk7CisJYWNwaV9vc19kZWxldGVfbXV0ZXgobG9jay0+d3JpdGVyX211dGV4KTsKKworCWxvY2stPm51bV9yZWFkZXJzID0gMDsKKwlsb2NrLT5yZWFkZXJfbXV0ZXggPSBOVUxMOworCWxvY2stPndyaXRlcl9tdXRleCA9IE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRlVOQ1RJT046ICAgIGFjcGlfdXRfYWNxdWlyZV9yZWFkX2xvY2sKKyAqICAgICAgICAgICAgICBhY3BpX3V0X3JlbGVhc2VfcmVhZF9sb2NrCisgKgorICogUEFSQU1FVEVSUzogIExvY2sgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIGEgdmFsaWQgUlcgbG9jaworICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogUmVhZGVyIGludGVyZmFjZXMgZm9yIHJlYWRlci93cml0ZXIgbG9ja3MuIE9uIGFjcXVpc2l0aW9uLAorICogICAgICAgICAgICAgIG9ubHkgdGhlIGZpcnN0IHJlYWRlciBhY3F1aXJlcyB0aGUgd3JpdGUgbXV0ZXguIE9uIHJlbGVhc2UsCisgKiAgICAgICAgICAgICAgb25seSB0aGUgbGFzdCByZWFkZXIgcmVsZWFzZXMgdGhlIHdyaXRlIG11dGV4LiBBbHRob3VnaCB0aGlzCisgKiAgICAgICAgICAgICAgYWxnb3JpdGhtIGNhbiBpbiB0aGVvcnkgc3RhcnZlIHdyaXRlcnMsIHRoaXMgc2hvdWxkIG5vdCBiZSBhCisgKiAgICAgICAgICAgICAgcHJvYmxlbSB3aXRoIEFDUElDQSBzaW5jZSB0aGUgc3Vic3lzdGVtIGlzIGluZnJlcXVlbnRseSB1c2VkCisgKiAgICAgICAgICAgICAgaW4gY29tcGFyaXNvbiB0byAoZm9yIGV4YW1wbGUpIGFuIEkvTyBzeXN0ZW0uCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWNwaV9zdGF0dXMgYWNwaV91dF9hY3F1aXJlX3JlYWRfbG9jayhzdHJ1Y3QgYWNwaV9yd19sb2NrICpsb2NrKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IGFjcGlfb3NfYWNxdWlyZV9tdXRleChsb2NrLT5yZWFkZXJfbXV0ZXgsIEFDUElfV0FJVF9GT1JFVkVSKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwkvKiBBY3F1aXJlIHRoZSB3cml0ZSBsb2NrIG9ubHkgZm9yIHRoZSBmaXJzdCByZWFkZXIgKi8KKworCWxvY2stPm51bV9yZWFkZXJzKys7CisJaWYgKGxvY2stPm51bV9yZWFkZXJzID09IDEpIHsKKwkJc3RhdHVzID0KKwkJICAgIGFjcGlfb3NfYWNxdWlyZV9tdXRleChsb2NrLT53cml0ZXJfbXV0ZXgsCisJCQkJCSAgQUNQSV9XQUlUX0ZPUkVWRVIpOworCX0KKworCWFjcGlfb3NfcmVsZWFzZV9tdXRleChsb2NrLT5yZWFkZXJfbXV0ZXgpOworCXJldHVybiBzdGF0dXM7Cit9CisKK2FjcGlfc3RhdHVzIGFjcGlfdXRfcmVsZWFzZV9yZWFkX2xvY2soc3RydWN0IGFjcGlfcndfbG9jayAqbG9jaykKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisKKwlzdGF0dXMgPSBhY3BpX29zX2FjcXVpcmVfbXV0ZXgobG9jay0+cmVhZGVyX211dGV4LCBBQ1BJX1dBSVRfRk9SRVZFUik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogUmVsZWFzZSB0aGUgd3JpdGUgbG9jayBvbmx5IGZvciB0aGUgdmVyeSBsYXN0IHJlYWRlciAqLworCisJbG9jay0+bnVtX3JlYWRlcnMtLTsKKwlpZiAobG9jay0+bnVtX3JlYWRlcnMgPT0gMCkgeworCQlhY3BpX29zX3JlbGVhc2VfbXV0ZXgobG9jay0+d3JpdGVyX211dGV4KTsKKwl9CisKKwlhY3BpX29zX3JlbGVhc2VfbXV0ZXgobG9jay0+cmVhZGVyX211dGV4KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX3V0X2FjcXVpcmVfd3JpdGVfbG9jaworICogICAgICAgICAgICAgIGFjcGlfdXRfcmVsZWFzZV93cml0ZV9sb2NrCisgKgorICogUEFSQU1FVEVSUzogIExvY2sgICAgICAgICAgICAgICAgLSBQb2ludGVyIHRvIGEgdmFsaWQgUlcgbG9jaworICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogV3JpdGVyIGludGVyZmFjZXMgZm9yIHJlYWRlci93cml0ZXIgbG9ja3MuIFNpbXBseSBhY3F1aXJlIG9yCisgKiAgICAgICAgICAgICAgcmVsZWFzZSB0aGUgd3JpdGVyIG11dGV4IGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9jay4gQWNxdWlzaXRpb24KKyAqICAgICAgICAgICAgICBvZiB0aGUgbG9jayBpcyBmdWxseSBleGNsdXNpdmUgYW5kIHdpbGwgYmxvY2sgYWxsIHJlYWRlcnMgYW5kCisgKiAgICAgICAgICAgICAgd3JpdGVycyB1bnRpbCBpdCBpcyByZWxlYXNlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCithY3BpX3N0YXR1cyBhY3BpX3V0X2FjcXVpcmVfd3JpdGVfbG9jayhzdHJ1Y3QgYWNwaV9yd19sb2NrICpsb2NrKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IGFjcGlfb3NfYWNxdWlyZV9tdXRleChsb2NrLT53cml0ZXJfbXV0ZXgsIEFDUElfV0FJVF9GT1JFVkVSKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIGFjcGlfdXRfcmVsZWFzZV93cml0ZV9sb2NrKHN0cnVjdCBhY3BpX3J3X2xvY2sgKmxvY2spCit7CisKKwlhY3BpX29zX3JlbGVhc2VfbXV0ZXgobG9jay0+d3JpdGVyX211dGV4KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtaXNjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWlzYy5jCmluZGV4IGMxZjdmNGUuLjFjOWUyNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtaXNjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG1pc2MuYwpAQCAtOTM4LDggKzkzOCw3IEBACiAJCWlmICgoIXRoaXNfc291cmNlX29iaikgfHwKIAkJICAgIChBQ1BJX0dFVF9ERVNDUklQVE9SX1RZUEUodGhpc19zb3VyY2Vfb2JqKSAhPQogCQkgICAgIEFDUElfREVTQ19UWVBFX09QRVJBTkQpCi0JCSAgICB8fCAoQUNQSV9HRVRfT0JKRUNUX1RZUEUodGhpc19zb3VyY2Vfb2JqKSAhPQotCQkJQUNQSV9UWVBFX1BBQ0tBR0UpKSB7CisJCSAgICB8fCAodGhpc19zb3VyY2Vfb2JqLT5jb21tb24udHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkpIHsKIAkJCXN0YXR1cyA9CiAJCQkgICAgd2Fsa19jYWxsYmFjayhBQ1BJX0NPUFlfVFlQRV9TSU1QTEUsCiAJCQkJCSAgdGhpc19zb3VyY2Vfb2JqLCBzdGF0ZSwgY29udGV4dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bXV0ZXguYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtdXRleC5jCmluZGV4IDE0ZWI1MmMuLjI2YzkzYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtdXRleC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtdXRleC5jCkBAIC02MCw3ICs2MCw4IEBACiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBDcmVhdGUgdGhlIHN5c3RlbSBtdXRleCBvYmplY3RzLgorICogREVTQ1JJUFRJT046IENyZWF0ZSB0aGUgc3lzdGVtIG11dGV4IG9iamVjdHMuIFRoaXMgaW5jbHVkZXMgbXV0ZXhlcywKKyAqICAgICAgICAgICAgICBzcGluIGxvY2tzLCBhbmQgcmVhZGVyL3dyaXRlciBsb2Nrcy4KICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC03MSw5ICs3Miw4IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X211dGV4X2luaXRpYWxpemUpOwogCi0JLyoKLQkgKiBDcmVhdGUgZWFjaCBvZiB0aGUgcHJlZGVmaW5lZCBtdXRleCBvYmplY3RzCi0JICovCisJLyogQ3JlYXRlIGVhY2ggb2YgdGhlIHByZWRlZmluZWQgbXV0ZXggb2JqZWN0cyAqLworCiAJZm9yIChpID0gMDsgaSA8IEFDUElfTlVNX01VVEVYOyBpKyspIHsKIAkJc3RhdHVzID0gYWNwaV91dF9jcmVhdGVfbXV0ZXgoaSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewpAQCAtODYsNiArODYsOSBAQAogCXNwaW5fbG9ja19pbml0KGFjcGlfZ2JsX2dwZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdChhY3BpX2dibF9oYXJkd2FyZV9sb2NrKTsKIAorCS8qIENyZWF0ZSB0aGUgcmVhZGVyL3dyaXRlciBsb2NrIGZvciBuYW1lc3BhY2UgYWNjZXNzICovCisKKwlzdGF0dXMgPSBhY3BpX3V0X2NyZWF0ZV9yd19sb2NrKCZhY3BpX2dibF9uYW1lc3BhY2VfcndfbG9jayk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKQEAgLTk3LDcgKzEwMCw4IEBACiAgKgogICogUkVUVVJOOiAgICAgIE5vbmUuCiAgKgotICogREVTQ1JJUFRJT046IERlbGV0ZSBhbGwgb2YgdGhlIHN5c3RlbSBtdXRleCBvYmplY3RzLgorICogREVTQ1JJUFRJT046IERlbGV0ZSBhbGwgb2YgdGhlIHN5c3RlbSBtdXRleCBvYmplY3RzLiBUaGlzIGluY2x1ZGVzIG11dGV4ZXMsCisgKiAgICAgICAgICAgICAgc3BpbiBsb2NrcywgYW5kIHJlYWRlci93cml0ZXIgbG9ja3MuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTA3LDkgKzExMSw4IEBACiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKHV0X211dGV4X3Rlcm1pbmF0ZSk7CiAKLQkvKgotCSAqIERlbGV0ZSBlYWNoIHByZWRlZmluZWQgbXV0ZXggb2JqZWN0Ci0JICovCisJLyogRGVsZXRlIGVhY2ggcHJlZGVmaW5lZCBtdXRleCBvYmplY3QgKi8KKwogCWZvciAoaSA9IDA7IGkgPCBBQ1BJX05VTV9NVVRFWDsgaSsrKSB7CiAJCSh2b2lkKWFjcGlfdXRfZGVsZXRlX211dGV4KGkpOwogCX0KQEAgLTExOCw2ICsxMjEsMTAgQEAKIAogCWFjcGlfb3NfZGVsZXRlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOwogCWFjcGlfb3NfZGVsZXRlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jayk7CisKKwkvKiBEZWxldGUgdGhlIHJlYWRlci93cml0ZXIgbG9jayAqLworCisJYWNwaV91dF9kZWxldGVfcndfbG9jaygmYWNwaV9nYmxfbmFtZXNwYWNlX3J3X2xvY2spOwogCXJldHVybl9WT0lEOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b2JqZWN0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b2JqZWN0LmMKaW5kZXggZmQ1ZWE3NS4uMDIwN2I2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG9iamVjdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRvYmplY3QuYwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJLyogQ2hlY2sgZm9yIGEgbnVsbCBwb2ludGVyICovCiAKIAlpZiAoIW9iamVjdCkgewotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICIqKioqIE51bGwgT2JqZWN0IFB0clxuIikpOworCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsICIqKioqIE51bGwgT2JqZWN0IFB0clxuIikpOwogCQlyZXR1cm4gKEZBTFNFKTsKIAl9CiAKQEAgLTMyNCw3ICszMjQsNyBAQAogCQlyZXR1cm4gKFRSVUUpOwogCiAJZGVmYXVsdDoKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAorCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0VYRUMsCiAJCQkJICAiJXAgaXMgbm90IG5vdCBhbiBBQ1BJIG9wZXJhbmQgb2JqIFslc11cbiIsCiAJCQkJICBvYmplY3QsIGFjcGlfdXRfZ2V0X2Rlc2NyaXB0b3JfbmFtZShvYmplY3QpKSk7CiAJCWJyZWFrOwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJICogbXVzdCBiZSBhY2Nlc3NlZCBieXRld2lzZSBvciB0aGVyZSBtYXkgYmUgYWxpZ25tZW50IHByb2JsZW1zIG9uCiAJICogY2VydGFpbiBwcm9jZXNzb3JzCiAJICovCi0Jc3dpdGNoIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbnRlcm5hbF9vYmplY3QpKSB7CisJc3dpdGNoIChpbnRlcm5hbF9vYmplY3QtPmNvbW1vbi50eXBlKSB7CiAJY2FzZSBBQ1BJX1RZUEVfU1RSSU5HOgogCiAJCWxlbmd0aCArPSAoYWNwaV9zaXplKSBpbnRlcm5hbF9vYmplY3QtPnN0cmluZy5sZW5ndGggKyAxOwpAQCAtNTE4LDggKzUxOCw3IEBACiAJCUFDUElfRVJST1IoKEFFX0lORk8sICJDYW5ub3QgY29udmVydCB0byBleHRlcm5hbCBvYmplY3QgLSAiCiAJCQkgICAgInVuc3VwcG9ydGVkIHR5cGUgWyVzXSAlWCBpbiBvYmplY3QgJXAiLAogCQkJICAgIGFjcGlfdXRfZ2V0X29iamVjdF90eXBlX25hbWUoaW50ZXJuYWxfb2JqZWN0KSwKLQkJCSAgICBBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbnRlcm5hbF9vYmplY3QpLAotCQkJICAgIGludGVybmFsX29iamVjdCkpOworCQkJICAgIGludGVybmFsX29iamVjdC0+Y29tbW9uLnR5cGUsIGludGVybmFsX29iamVjdCkpOwogCQlzdGF0dXMgPSBBRV9UWVBFOwogCQlicmVhazsKIAl9CkBAIC02NjQsNyArNjYzLDcgQEAKIAogCWlmICgoQUNQSV9HRVRfREVTQ1JJUFRPUl9UWVBFKGludGVybmFsX29iamVjdCkgPT0KIAkgICAgIEFDUElfREVTQ19UWVBFX09QRVJBTkQpCi0JICAgICYmIChBQ1BJX0dFVF9PQkpFQ1RfVFlQRShpbnRlcm5hbF9vYmplY3QpID09IEFDUElfVFlQRV9QQUNLQUdFKSkgeworCSAgICAmJiAoaW50ZXJuYWxfb2JqZWN0LT5jb21tb24udHlwZSA9PSBBQ1BJX1RZUEVfUEFDS0FHRSkpIHsKIAkJc3RhdHVzID0KIAkJICAgIGFjcGlfdXRfZ2V0X3BhY2thZ2Vfb2JqZWN0X3NpemUoaW50ZXJuYWxfb2JqZWN0LAogCQkJCQkJICAgIG9ial9sZW5ndGgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggM2JjYjViZi4uYjBkZTYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CiAKICNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlNfUE9XRVIKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CkBAIC05Miw3ICs5Myw3IEBACiAjZW5kaWYKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKIAl1bnNpZ25lZCBsb25nIHVwZGF0ZV90aW1lOwotCWludCBjdXJyZW50X25vdzsKKwlpbnQgcmF0ZV9ub3c7CiAJaW50IGNhcGFjaXR5X25vdzsKIAlpbnQgdm9sdGFnZV9ub3c7CiAJaW50IGRlc2lnbl9jYXBhY2l0eTsKQEAgLTE5Niw3ICsxOTcsOCBAQAogCQl2YWwtPmludHZhbCA9IGJhdHRlcnktPnZvbHRhZ2Vfbm93ICogMTAwMDsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVzoKLQkJdmFsLT5pbnR2YWwgPSBiYXR0ZXJ5LT5jdXJyZW50X25vdyAqIDEwMDA7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9OT1c6CisJCXZhbC0+aW50dmFsID0gYmF0dGVyeS0+cmF0ZV9ub3cgKiAxMDAwOwogCQlicmVhazsKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMX0RFU0lHTjoKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9GVUxMX0RFU0lHTjoKQEAgLTI0Nyw2ICsyNDksNyBAQAogCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlOX0RFU0lHTiwKIAlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKIAlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9OT1csCiAJUE9XRVJfU1VQUExZX1BST1BfRU5FUkdZX0ZVTExfREVTSUdOLAogCVBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9GVUxMLAogCVBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9OT1csCkBAIC0yNzMsNyArMjc2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBhY3BpX29mZnNldHMgc3RhdGVfb2Zmc2V0c1tdID0gewogCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBzdGF0ZSksIDB9LAotCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBjdXJyZW50X25vdyksIDB9LAorCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCByYXRlX25vdyksIDB9LAogCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBjYXBhY2l0eV9ub3cpLCAwfSwKIAl7b2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgdm9sdGFnZV9ub3cpLCAwfSwKIH07CkBAIC02MDUsMTEgKzYwOCwxMSBAQAogCWVsc2UKIAkJc2VxX3ByaW50ZihzZXEsICJjaGFyZ2luZyBzdGF0ZTogICAgICAgICAgY2hhcmdlZFxuIik7CiAKLQlpZiAoYmF0dGVyeS0+Y3VycmVudF9ub3cgPT0gQUNQSV9CQVRURVJZX1ZBTFVFX1VOS05PV04pCisJaWYgKGJhdHRlcnktPnJhdGVfbm93ID09IEFDUElfQkFUVEVSWV9WQUxVRV9VTktOT1dOKQogCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQgcmF0ZTogICAgICAgICAgICB1bmtub3duXG4iKTsKIAllbHNlCiAJCXNlcV9wcmludGYoc2VxLCAicHJlc2VudCByYXRlOiAgICAgICAgICAgICVkICVzXG4iLAotCQkJICAgYmF0dGVyeS0+Y3VycmVudF9ub3csIGFjcGlfYmF0dGVyeV91bml0cyhiYXR0ZXJ5KSk7CisJCQkgICBiYXR0ZXJ5LT5yYXRlX25vdywgYWNwaV9iYXR0ZXJ5X3VuaXRzKGJhdHRlcnkpKTsKIAogCWlmIChiYXR0ZXJ5LT5jYXBhY2l0eV9ub3cgPT0gQUNQSV9CQVRURVJZX1ZBTFVFX1VOS05PV04pCiAJCXNlcV9wcmludGYoc2VxLCAicmVtYWluaW5nIGNhcGFjaXR5OiAgICAgIHVua25vd25cbiIpOwpAQCAtNzQwLDcgKzc0Myw3IEBACiBzdGF0aWMgc3RydWN0IGJhdHRlcnlfZmlsZSB7CiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvcHM7CiAJbW9kZV90IG1vZGU7Ci0JY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpuYW1lOwogfSBhY3BpX2JhdHRlcnlfZmlsZVtdID0gewogCUZJTEVfREVTQ1JJUFRJT05fUk8oaW5mbyksCiAJRklMRV9ERVNDUklQVElPTl9STyhzdGF0ZSksCkBAIC05MDAsMjEgKzkwMywyNyBAQAogCQl9LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgYWNwaV9iYXR0ZXJ5X2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBhY3BpX2JhdHRlcnlfaW5pdF9hc3luYyh2b2lkICp1bnVzZWQsIGFzeW5jX2Nvb2tpZV90IGNvb2tpZSkKIHsKIAlpZiAoYWNwaV9kaXNhYmxlZCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybjsKICNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlNfUE9XRVIKIAlhY3BpX2JhdHRlcnlfZGlyID0gYWNwaV9sb2NrX2JhdHRlcnlfZGlyKCk7CiAJaWYgKCFhY3BpX2JhdHRlcnlfZGlyKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuOwogI2VuZGlmCiAJaWYgKGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9iYXR0ZXJ5X2RyaXZlcikgPCAwKSB7CiAjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTX1BPV0VSCiAJCWFjcGlfdW5sb2NrX2JhdHRlcnlfZGlyKGFjcGlfYmF0dGVyeV9kaXIpOwogI2VuZGlmCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm47CiAJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBfX2luaXQgYWNwaV9iYXR0ZXJ5X2luaXQodm9pZCkKK3sKKwlhc3luY19zY2hlZHVsZShhY3BpX2JhdHRlcnlfaW5pdF9hc3luYywgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuYwppbmRleCBiZWU2NGI3Li5lOGY3YjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jCkBAIC0zOSw2ICszOSw4IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfQlVTX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgiYnVzIik7CiAKQEAgLTg0Niw2ICs4NDgsNyBAQAogCQlhY3BpX2tvYmogPSBOVUxMOwogCX0KIAorCWluaXRfYWNwaV9kZXZpY2Vfbm90aWZ5KCk7CiAJcmVzdWx0ID0gYWNwaV9idXNfaW5pdCgpOwogCiAJaWYgKCFyZXN1bHQpIHsKQEAgLTg2MCwxMSArODYzLDIzIEBACiAJCX0KIAl9IGVsc2UKIAkJZGlzYWJsZV9hY3BpKCk7CisKKwlpZiAoYWNwaV9kaXNhYmxlZCkKKwkJcmV0dXJuIHJlc3VsdDsKKwogCS8qCiAJICogSWYgdGhlIGxhcHRvcCBmYWxscyBpbnRvIHRoZSBETUkgY2hlY2sgdGFibGUsIHRoZSBwb3dlciBzdGF0ZSBjaGVjawogCSAqIHdpbGwgYmUgZGlzYWJsZWQgaW4gdGhlIGNvdXJzZSBvZiBkZXZpY2UgcG93ZXIgdHJhbnNpc3Rpb24uCiAJICovCiAJZG1pX2NoZWNrX3N5c3RlbShwb3dlcl9ub2NoZWNrX2RtaV90YWJsZSk7CisKKwlhY3BpX3NjYW5faW5pdCgpOworCWFjcGlfZWNfaW5pdCgpOworCWFjcGlfcG93ZXJfaW5pdCgpOworCWFjcGlfc3lzdGVtX2luaXQoKTsKKwlhY3BpX2RlYnVnX2luaXQoKTsKKwlhY3BpX3NsZWVwX3Byb2NfaW5pdCgpOworCWFjcGlfd2FrZXVwX2RldmljZV9pbml0KCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCmluZGV4IGMyZjA2MDYuLmQ3M2M5NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXR0b24uYworKysgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKQEAgLTc4LDYgKzc4LDcgQEAKIHN0YXRpYyBpbnQgYWNwaV9idXR0b25fYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyBpbnQgYWNwaV9idXR0b25fcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7CiBzdGF0aWMgaW50IGFjcGlfYnV0dG9uX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CitzdGF0aWMgdm9pZCBhY3BpX2J1dHRvbl9ub3RpZnkoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHUzMiBldmVudCk7CiBzdGF0aWMgaW50IGFjcGlfYnV0dG9uX2luZm9fb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgaW50IGFjcGlfYnV0dG9uX3N0YXRlX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwogCkBAIC04OSw2ICs5MCw3IEBACiAJCS5hZGQgPSBhY3BpX2J1dHRvbl9hZGQsCiAJCS5yZXN1bWUgPSBhY3BpX2J1dHRvbl9yZXN1bWUsCiAJCS5yZW1vdmUgPSBhY3BpX2J1dHRvbl9yZW1vdmUsCisJCS5ub3RpZnkgPSBhY3BpX2J1dHRvbl9ub3RpZnksCiAJfSwKIH07CiAKQEAgLTI2MywxNSArMjY1LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFjcGlfYnV0dG9uX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGFjcGlfYnV0dG9uX25vdGlmeShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgdTMyIGV2ZW50KQogewotCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uID0gZGF0YTsKKwlzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbiA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAogCWlmICghYnV0dG9uIHx8ICFidXR0b24tPmRldmljZSkKIAkJcmV0dXJuOwogCiAJc3dpdGNoIChldmVudCkgeworCWNhc2UgQUNQSV9GSVhFRF9IQVJEV0FSRV9FVkVOVDoKKwkJZXZlbnQgPSBBQ1BJX0JVVFRPTl9OT1RJRllfU1RBVFVTOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEFDUElfQlVUVE9OX05PVElGWV9TVEFUVVM6CiAJCWlucHV0ID0gYnV0dG9uLT5pbnB1dDsKIAkJaWYgKGJ1dHRvbi0+dHlwZSA9PSBBQ1BJX0JVVFRPTl9UWVBFX0xJRCkgewpAQCAtMjk4LDQ2ICszMDMsNiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfYnV0dG9uX25vdGlmeV9maXhlZCh2b2lkICpkYXRhKQotewotCXN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uID0gZGF0YTsKLQotCWlmICghYnV0dG9uKQotCQlyZXR1cm4gQUVfQkFEX1BBUkFNRVRFUjsKLQotCWFjcGlfYnV0dG9uX25vdGlmeShidXR0b24tPmRldmljZS0+aGFuZGxlLCBBQ1BJX0JVVFRPTl9OT1RJRllfU1RBVFVTLCBidXR0b24pOwotCi0JcmV0dXJuIEFFX09LOwotfQotCi1zdGF0aWMgaW50IGFjcGlfYnV0dG9uX2luc3RhbGxfbm90aWZ5X2hhbmRsZXJzKHN0cnVjdCBhY3BpX2J1dHRvbiAqYnV0dG9uKQotewotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQotCXN3aXRjaCAoYnV0dG9uLT50eXBlKSB7Ci0JY2FzZSBBQ1BJX0JVVFRPTl9UWVBFX1BPV0VSRjoKLQkJc3RhdHVzID0KLQkJICAgIGFjcGlfaW5zdGFsbF9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfUE9XRVJfQlVUVE9OLAotCQkJCQkJICAgICBhY3BpX2J1dHRvbl9ub3RpZnlfZml4ZWQsCi0JCQkJCQkgICAgIGJ1dHRvbik7Ci0JCWJyZWFrOwotCWNhc2UgQUNQSV9CVVRUT05fVFlQRV9TTEVFUEY6Ci0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1NMRUVQX0JVVFRPTiwKLQkJCQkJCSAgICAgYWNwaV9idXR0b25fbm90aWZ5X2ZpeGVkLAotCQkJCQkJICAgICBidXR0b24pOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoYnV0dG9uLT5kZXZpY2UtPmhhbmRsZSwKLQkJCQkJCSAgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAotCQkJCQkJICAgICBhY3BpX2J1dHRvbl9ub3RpZnksCi0JCQkJCQkgICAgIGJ1dHRvbik7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBBQ1BJX0ZBSUxVUkUoc3RhdHVzKSA/IC1FTk9ERVYgOiAwOwotfQotCiBzdGF0aWMgaW50IGFjcGlfYnV0dG9uX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbjsKQEAgLTM0OSwyNSArMzE0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYWNwaV9idXR0b25fcmVtb3ZlX25vdGlmeV9oYW5kbGVycyhzdHJ1Y3QgYWNwaV9idXR0b24gKmJ1dHRvbikKLXsKLQlzd2l0Y2ggKGJ1dHRvbi0+dHlwZSkgewotCWNhc2UgQUNQSV9CVVRUT05fVFlQRV9QT1dFUkY6Ci0JCWFjcGlfcmVtb3ZlX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9QT1dFUl9CVVRUT04sCi0JCQkJCQlhY3BpX2J1dHRvbl9ub3RpZnlfZml4ZWQpOwotCQlicmVhazsKLQljYXNlIEFDUElfQlVUVE9OX1RZUEVfU0xFRVBGOgotCQlhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfU0xFRVBfQlVUVE9OLAotCQkJCQkJYWNwaV9idXR0b25fbm90aWZ5X2ZpeGVkKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYWNwaV9yZW1vdmVfbm90aWZ5X2hhbmRsZXIoYnV0dG9uLT5kZXZpY2UtPmhhbmRsZSwKLQkJCQkJICAgQUNQSV9ERVZJQ0VfTk9USUZZLAotCQkJCQkgICBhY3BpX2J1dHRvbl9ub3RpZnkpOwotCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgYWNwaV9idXR0b25fYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWludCBlcnJvcjsKQEAgLTQzMiwxMCArMzc4LDYgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyX2ZyZWVfaW5wdXQ7CiAKLQllcnJvciA9IGFjcGlfYnV0dG9uX2luc3RhbGxfbm90aWZ5X2hhbmRsZXJzKGJ1dHRvbik7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycl9yZW1vdmVfZnM7Ci0KIAlzbnByaW50ZihidXR0b24tPnBoeXMsIHNpemVvZihidXR0b24tPnBoeXMpLAogCQkgIiVzL2J1dHRvbi9pbnB1dDAiLCBhY3BpX2RldmljZV9oaWQoZGV2aWNlKSk7CiAKQEAgLTQ2Niw3ICs0MDgsNyBAQAogCiAJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOwogCWlmIChlcnJvcikKLQkJZ290byBlcnJfcmVtb3ZlX2hhbmRsZXJzOworCQlnb3RvIGVycl9yZW1vdmVfZnM7CiAJaWYgKGJ1dHRvbi0+dHlwZSA9PSBBQ1BJX0JVVFRPTl9UWVBFX0xJRCkKIAkJYWNwaV9saWRfc2VuZF9zdGF0ZShidXR0b24pOwogCkBAIC00ODUsOCArNDI3LDYgQEAKIAogCXJldHVybiAwOwogCi0gZXJyX3JlbW92ZV9oYW5kbGVyczoKLQlhY3BpX2J1dHRvbl9yZW1vdmVfbm90aWZ5X2hhbmRsZXJzKGJ1dHRvbik7CiAgZXJyX3JlbW92ZV9mczoKIAlhY3BpX2J1dHRvbl9yZW1vdmVfZnMoZGV2aWNlKTsKICBlcnJfZnJlZV9pbnB1dDoKQEAgLTUwNSw3ICs0NDUsNiBAQAogCiAJYnV0dG9uID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCi0JYWNwaV9idXR0b25fcmVtb3ZlX25vdGlmeV9oYW5kbGVycyhidXR0b24pOwogCWFjcGlfYnV0dG9uX3JlbW92ZV9mcyhkZXZpY2UpOwogCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGJ1dHRvbi0+aW5wdXQpOwogCWtmcmVlKGJ1dHRvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGVidWcuYyBiL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jCmluZGV4IDIwMjIzY2IuLmE4Mjg3YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvYWNwaS9kZWJ1Zy5jCkBAIC0xMywxMSArMTMsNiBAQAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX1NZU1RFTV9DT01QT05FTlQKIEFDUElfTU9EVUxFX05BTUUoImRlYnVnIik7CiAKLSNpZmRlZiBNT0RVTEVfUEFSQU1fUFJFRklYCi0jdW5kZWYgTU9EVUxFX1BBUkFNX1BSRUZJWAotI2VuZGlmCi0jZGVmaW5lIE1PRFVMRV9QQVJBTV9QUkVGSVggImFjcGkuIgotCiBzdHJ1Y3QgYWNwaV9kbGF5ZXIgewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKQEAgLTI5NywxNyArMjkyLDE1IEBACiAKIAlyZXR1cm4gY291bnQ7CiB9CisjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgYWNwaV9kZWJ1Z19pbml0KHZvaWQpCitpbnQgX19pbml0IGFjcGlfZGVidWdfaW5pdCh2b2lkKQogeworI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CiAJaW50IGVycm9yID0gMDsKIAljaGFyICpuYW1lOwogCi0KLQlpZiAoYWNwaV9kaXNhYmxlZCkKLQkJcmV0dXJuIDA7Ci0KIAkvKiAnZGVidWdfbGF5ZXInIFtSL1ddICovCiAJbmFtZSA9IEFDUElfU1lTVEVNX0ZJTEVfREVCVUdfTEFZRVI7CiAJZW50cnkgPQpAQCAtMzM4LDcgKzMzMSw3IEBACiAJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9TWVNURU1fRklMRV9ERUJVR19MQVlFUiwgYWNwaV9yb290X2Rpcik7CiAJZXJyb3IgPSAtRU5PREVWOwogCWdvdG8gRG9uZTsKLX0KLQotc3Vic3lzX2luaXRjYWxsKGFjcGlfZGVidWdfaW5pdCk7CisjZWxzZQorCXJldHVybiAwOwogI2VuZGlmCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZG9jay5jIGIvZHJpdmVycy9hY3BpL2RvY2suYwppbmRleCA3YWY3ZGIxLi5lZmI5NTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZG9jay5jCisrKyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKQEAgLTExNDYsOSArMTE0NiwxMCBAQAogc3RhdGljIHZvaWQgX19leGl0IGRvY2tfZXhpdCh2b2lkKQogewogCXN0cnVjdCBkb2NrX3N0YXRpb24gKmRvY2tfc3RhdGlvbjsKKwlzdHJ1Y3QgZG9ja19zdGF0aW9uICp0bXA7CiAKIAl1bnJlZ2lzdGVyX2FjcGlfYnVzX25vdGlmaWVyKCZkb2NrX2FjcGlfbm90aWZpZXIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9ja19zdGF0aW9uLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRvY2tfc3RhdGlvbiwgdG1wLCAmZG9ja19zdGF0aW9ucywgc2liaWxpbmcpCiAJCWRvY2tfcmVtb3ZlKGRvY2tfc3RhdGlvbik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9lYy5jIGIvZHJpdmVycy9hY3BpL2VjLmMKaW5kZXggMmZlMTUwNi4uMDRlOTA0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2VjLmMKKysrIGIvZHJpdmVycy9hY3BpL2VjLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogI2RlZmluZSBBQ1BJX0VDX0RFTEFZCQk1MDAJLyogV2FpdCA1MDBtcyBtYXguIGR1cmluZyBFQyBvcHMgKi8KICNkZWZpbmUgQUNQSV9FQ19VREVMQVlfR0xLCTEwMDAJLyogV2FpdCAxbXMgbWF4LiB0byBnZXQgZ2xvYmFsIGxvY2sgKi8KLSNkZWZpbmUgQUNQSV9FQ19VREVMQVkJCTEwMAkvKiBXYWl0IDEwMHVzIGJlZm9yZSBwb2xsaW5nIEVDIGFnYWluICovCisjZGVmaW5lIEFDUElfRUNfQ0RFTEFZCQkxMAkvKiBXYWl0IDEwdXMgYmVmb3JlIHBvbGxpbmcgRUMgKi8KIAogI2RlZmluZSBBQ1BJX0VDX1NUT1JNX1RIUkVTSE9MRCA4CS8qIG51bWJlciBvZiBmYWxzZSBpbnRlcnJ1cHRzCiAJCQkJCSAgIHBlciBvbmUgdHJhbnNhY3Rpb24gKi8KQEAgLTIzNiwxMyArMjM2LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGVjX2RlbGF5KHZvaWQpCit7CisJLyogRUMgaW4gTVNJIG5vdGVib29rcyBkb24ndCB0b2xlcmF0ZSBkZWxheXMgb3RoZXIgdGhhbiA1NTAgdXNlYyAqLworCWlmIChFQ19GTEFHU19NU0kpCisJCXVkZWxheShBQ1BJX0VDX0RFTEFZKTsKKwllbHNlCisJCS8qIFVzZSBzaG9ydGVzdCBzbGVlcCBhdmFpbGFibGUgKi8KKwkJbXNsZWVwKDEpOworfQorCiBzdGF0aWMgaW50IGVjX3BvbGwoc3RydWN0IGFjcGlfZWMgKmVjKQogewogCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhBQ1BJX0VDX0RFTEFZKTsKLQl1ZGVsYXkoQUNQSV9FQ19VREVMQVkpOworCXVkZWxheShBQ1BJX0VDX0NERUxBWSk7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KSkgewogCQlncGVfdHJhbnNhY3Rpb24oZWMsIGFjcGlfZWNfcmVhZF9zdGF0dXMoZWMpKTsKLQkJdWRlbGF5KEFDUElfRUNfVURFTEFZKTsKKwkJZWNfZGVsYXkoKTsKIAkJaWYgKGVjX3RyYW5zYWN0aW9uX2RvbmUoZWMpKQogCQkJcmV0dXJuIDA7CiAJfQpAQCAtNjcyLDcgKzY4Miw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGFjcGlfZWNfcmVhZF9pbmZvLCBQREUoaW5vZGUpLT5kYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9lY19pbmZvX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfZWNfaW5mb19vcHMgPSB7CiAJLm9wZW4gPSBhY3BpX2VjX2luZm9fb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCkBAIC03NTUsNiArNzY1LDEwIEBACiAJdW5zaWduZWQgbG9uZyBsb25nIHRtcCA9IDA7CiAKIAlzdHJ1Y3QgYWNwaV9lYyAqZWMgPSBjb250ZXh0OworCisJLyogY2xlYXIgYWRkciB2YWx1ZXMsIGVjX3BhcnNlX2lvX3BvcnRzIGRlcGVuZCBvbiBpdCAqLworCWVjLT5jb21tYW5kX2FkZHIgPSBlYy0+ZGF0YV9hZGRyID0gMDsKKwogCXN0YXR1cyA9IGFjcGlfd2Fsa19yZXNvdXJjZXMoaGFuZGxlLCBNRVRIT0RfTkFNRV9fQ1JTLAogCQkJCSAgICAgZWNfcGFyc2VfaW9fcG9ydHMsIGVjKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCkBAIC04MDQsMTEgKzgxOCwxMSBAQAogCQllYyA9IG1ha2VfYWNwaV9lYygpOwogCQlpZiAoIWVjKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWlmIChlY19wYXJzZV9kZXZpY2UoZGV2aWNlLT5oYW5kbGUsIDAsIGVjLCBOVUxMKSAhPQotCQkgICAgQUVfQ1RSTF9URVJNSU5BVEUpIHsKKwl9CisJaWYgKGVjX3BhcnNlX2RldmljZShkZXZpY2UtPmhhbmRsZSwgMCwgZWMsIE5VTEwpICE9CisJCUFFX0NUUkxfVEVSTUlOQVRFKSB7CiAJCQlrZnJlZShlYyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCX0KIAogCWVjLT5oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKQEAgLTk4NiwxMiArMTAwMCwxMiBAQAogCQlib290X2VjLT5oYW5kbGUgPSBBQ1BJX1JPT1RfT0JKRUNUOwogCQlhY3BpX2dldF9oYW5kbGUoQUNQSV9ST09UX09CSkVDVCwgZWNkdF9wdHItPmlkLCAmYm9vdF9lYy0+aGFuZGxlKTsKIAkJLyogRG9uJ3QgdHJ1c3QgRUNEVCwgd2hpY2ggY29tZXMgZnJvbSBBU1VTVGVrICovCi0JCWlmICghZG1pX25hbWVfaW5fdmVuZG9ycygiQVNVUyIpKQorCQlpZiAoIWRtaV9uYW1lX2luX3ZlbmRvcnMoIkFTVVMiKSAmJiBFQ19GTEFHU19NU0kgPT0gMCkKIAkJCWdvdG8gaW5zdGFsbDsKIAkJc2F2ZWRfZWMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9lYyksIEdGUF9LRVJORUwpOwogCQlpZiAoIXNhdmVkX2VjKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCW1lbWNweShzYXZlZF9lYywgYm9vdF9lYywgc2l6ZW9mKCpzYXZlZF9lYykpOworCQltZW1jcHkoc2F2ZWRfZWMsIGJvb3RfZWMsIHNpemVvZihzdHJ1Y3QgYWNwaV9lYykpOwogCS8qIGZhbGwgdGhyb3VnaCAqLwogCX0KIAkvKiBUaGlzIHdvcmthcm91bmQgaXMgbmVlZGVkIG9ubHkgb24gc29tZSBicm9rZW4gbWFjaGluZXMsCkBAIC0xMDY5LDEzICsxMDgzLDEwIEBACiAJCX0sCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX2VjX2luaXQodm9pZCkKK2ludCBfX2luaXQgYWNwaV9lY19pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlpZiAoYWNwaV9kaXNhYmxlZCkKLQkJcmV0dXJuIDA7Ci0KIAlhY3BpX2VjX2RpciA9IHByb2NfbWtkaXIoQUNQSV9FQ19DTEFTUywgYWNwaV9yb290X2Rpcik7CiAJaWYgKCFhY3BpX2VjX2RpcikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMDkwLDggKzExMDEsNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN1YnN5c19pbml0Y2FsbChhY3BpX2VjX2luaXQpOwotCiAvKiBFQyBkcml2ZXIgY3VycmVudGx5IG5vdCB1bmxvYWRhYmxlICovCiAjaWYgMAogc3RhdGljIHZvaWQgX19leGl0IGFjcGlfZWNfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2Zhbi5jIGIvZHJpdmVycy9hY3BpL2Zhbi5jCmluZGV4IDhhMDI5NDQuLjUzNjk4ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9mYW4uYworKysgYi9kcml2ZXJzL2FjcGkvZmFuLmMKQEAgLTY4LDMxICs2OCwzNSBAQAogfTsKIAogLyogdGhlcm1hbCBjb29saW5nIGRldmljZSBjYWxsYmFja3MgKi8KLXN0YXRpYyBpbnQgZmFuX2dldF9tYXhfc3RhdGUoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbnQgZmFuX2dldF9tYXhfc3RhdGUoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsIHVuc2lnbmVkIGxvbmcKKwkJCSAgICAgKnN0YXRlKQogewogCS8qIEFDUEkgZmFuIGRldmljZSBvbmx5IHN1cHBvcnQgdHdvIHN0YXRlczogT04vT0ZGICovCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiMVxuIik7CisJKnN0YXRlID0gMTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmYW5fZ2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwgY2hhciAqYnVmKQorc3RhdGljIGludCBmYW5fZ2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwgdW5zaWduZWQgbG9uZworCQkJICAgICAqc3RhdGUpCiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOwotCWludCBzdGF0ZTsKIAlpbnQgcmVzdWx0OworCWludCBhY3BpX3N0YXRlOwogCiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmVzdWx0ID0gYWNwaV9idXNfZ2V0X3Bvd2VyKGRldmljZS0+aGFuZGxlLCAmc3RhdGUpOworCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9wb3dlcihkZXZpY2UtPmhhbmRsZSwgJmFjcGlfc3RhdGUpOwogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgc3RhdGUgPT0gQUNQSV9TVEFURV9EMyA/ICIwIiA6Ci0JCQkgKHN0YXRlID09IEFDUElfU1RBVEVfRDAgPyAiMSIgOiAidW5rbm93biIpKTsKKwkqc3RhdGUgPSAoYWNwaV9zdGF0ZSA9PSBBQ1BJX1NUQVRFX0QzID8gMCA6CisJCSAoYWNwaV9zdGF0ZSA9PSBBQ1BJX1NUQVRFX0QwID8gMSA6IC0xKSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLWZhbl9zZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgc3RhdGUpCitmYW5fc2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwgdW5zaWduZWQgbG9uZyBzdGF0ZSkKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IGNkZXYtPmRldmRhdGE7CiAJaW50IHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9nbHVlLmMgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCmluZGV4IDU0NzliOWYuLjhiZDJjMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9nbHVlLmMKKysrIGIvZHJpdmVycy9hY3BpL2dsdWUuYwpAQCAtMjg2LDEwICsyODYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2FjcGlfZGV2aWNlX25vdGlmeSh2b2lkKQoraW50IF9faW5pdCBpbml0X2FjcGlfZGV2aWNlX25vdGlmeSh2b2lkKQogewotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gMDsKIAlpZiAocGxhdGZvcm1fbm90aWZ5IHx8IHBsYXRmb3JtX25vdGlmeV9yZW1vdmUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiQ2FuJ3QgdXNlIHBsYXRmb3JtX25vdGlmeVxuIik7CiAJCXJldHVybiAwOwpAQCAtMjk4LDUgKzI5NiwzIEBACiAJcGxhdGZvcm1fbm90aWZ5X3JlbW92ZSA9IGFjcGlfcGxhdGZvcm1fbm90aWZ5X3JlbW92ZTsKIAlyZXR1cm4gMDsKIH0KLQotYXJjaF9pbml0Y2FsbChpbml0X2FjcGlfZGV2aWNlX25vdGlmeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaCBiL2RyaXZlcnMvYWNwaS9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYTY5YjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaApAQCAtMCwwICsxLDQzIEBACisvKiBGb3IgdXNlIGJ5IExpbnV4L0FDUEkgaW5mcmFzdHJ1Y3R1cmUsIG5vdCBkcml2ZXJzICovCisKK2ludCBpbml0X2FjcGlfZGV2aWNlX25vdGlmeSh2b2lkKTsKK2ludCBhY3BpX3NjYW5faW5pdCh2b2lkKTsKK2ludCBhY3BpX3N5c3RlbV9pbml0KHZvaWQpOworCisjaWZkZWYgQ09ORklHX0FDUElfREVCVUcKK2ludCBhY3BpX2RlYnVnX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgYWNwaV9kZWJ1Z19pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIFJlc291cmNlCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworaW50IGFjcGlfcG93ZXJfaW5pdCh2b2lkKTsKK2ludCBhY3BpX2RldmljZV9zbGVlcF93YWtlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuYWJsZSwgaW50IHNsZWVwX3N0YXRlLCBpbnQgZGV2X3N0YXRlKTsKK2ludCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2LCBpbnQgc2xlZXBfc3RhdGUpOworaW50IGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlX3Bvd2VyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2KTsKK2ludCBhY3BpX3Bvd2VyX2dldF9pbmZlcnJlZF9zdGF0ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CitpbnQgYWNwaV9wb3dlcl90cmFuc2l0aW9uKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgc3RhdGUpOworZXh0ZXJuIGludCBhY3BpX3Bvd2VyX25vY2hlY2s7CisKK2ludCBhY3BpX3dha2V1cF9kZXZpY2VfaW5pdCh2b2lkKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWJlZGRlZCBDb250cm9sbGVyCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworaW50IGFjcGlfZWNfaW5pdCh2b2lkKTsKK2ludCBhY3BpX2VjX2VjZHRfcHJvYmUodm9pZCk7CitpbnQgYWNwaV9ib290X2VjX2VuYWJsZSh2b2lkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1c3BlbmQvUmVzdW1lCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitleHRlcm4gaW50IGFjcGlfc2xlZXBfaW5pdCh2b2lkKTsKKworI2lmZGVmIENPTkZJR19BQ1BJX1NMRUVQCitpbnQgYWNwaV9zbGVlcF9wcm9jX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgYWNwaV9zbGVlcF9wcm9jX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvbnVtYS5jIGIvZHJpdmVycy9hY3BpL251bWEuYwppbmRleCAzYTBkOGVmLi5kNDQwY2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvbnVtYS5jCisrKyBiL2RyaXZlcnMvYWNwaS9udW1hLmMKQEAgLTEzMSw2ICsxMzEsMjEgQEAKICNlbmRpZgkJCQkvKiBBQ1BJX0RFQlVHX09VVFBVVCAqLwogCQlicmVhazsKIAorCWNhc2UgQUNQSV9TUkFUX1RZUEVfWDJBUElDX0NQVV9BRkZJTklUWToKKyNpZmRlZiBBQ1BJX0RFQlVHX09VVFBVVAorCQl7CisJCQlzdHJ1Y3QgYWNwaV9zcmF0X3gyYXBpY19jcHVfYWZmaW5pdHkgKnAgPQorCQkJICAgIChzdHJ1Y3QgYWNwaV9zcmF0X3gyYXBpY19jcHVfYWZmaW5pdHkgKiloZWFkZXI7CisJCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCisJCQkJCSAgIlNSQVQgUHJvY2Vzc29yICh4MmFwaWNpZFsweCUwOHhdKSBpbiIKKwkJCQkJICAiIHByb3hpbWl0eSBkb21haW4gJWQgJXNcbiIsCisJCQkJCSAgcC0+YXBpY19pZCwKKwkJCQkJICBwLT5wcm94aW1pdHlfZG9tYWluLAorCQkJCQkgIChwLT5mbGFncyAmIEFDUElfU1JBVF9DUFVfRU5BQkxFRCkgPworCQkJCQkgICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKTsKKwkJfQorI2VuZGlmCQkJCS8qIEFDUElfREVCVUdfT1VUUFVUICovCisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCiAJCSAgICAgICAiRm91bmQgdW5zdXBwb3J0ZWQgU1JBVCBlbnRyeSAodHlwZSA9IDB4JXgpXG4iLApAQCAtMTgwLDggKzE5NSwzNSBAQAogCXJldHVybiAwOwogfQogCit2b2lkIF9faW5pdCBfX2F0dHJpYnV0ZV9fICgod2VhaykpCithY3BpX251bWFfeDJhcGljX2FmZmluaXR5X2luaXQoc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5ICpwYSkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAorCSAgICAgICAiRm91bmQgdW5zdXBwb3J0ZWQgeDJhcGljIFsweCUwOHhdIFNSQVQgZW50cnlcbiIsIHBhLT5hcGljX2lkKTsKKwlyZXR1cm47Cit9CisKKwogc3RhdGljIGludCBfX2luaXQKLWFjcGlfcGFyc2VfcHJvY2Vzc29yX2FmZmluaXR5KHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqIGhlYWRlciwKK2FjcGlfcGFyc2VfeDJhcGljX2FmZmluaXR5KHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyLAorCQkJICAgY29uc3QgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5ICpwcm9jZXNzb3JfYWZmaW5pdHk7CisKKwlwcm9jZXNzb3JfYWZmaW5pdHkgPSAoc3RydWN0IGFjcGlfc3JhdF94MmFwaWNfY3B1X2FmZmluaXR5ICopaGVhZGVyOworCWlmICghcHJvY2Vzc29yX2FmZmluaXR5KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFjcGlfdGFibGVfcHJpbnRfc3JhdF9lbnRyeShoZWFkZXIpOworCisJLyogbGV0IGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydCB0byBkbyBpdCAqLworCWFjcGlfbnVtYV94MmFwaWNfYWZmaW5pdHlfaW5pdChwcm9jZXNzb3JfYWZmaW5pdHkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0CithY3BpX3BhcnNlX3Byb2Nlc3Nvcl9hZmZpbml0eShzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmhlYWRlciwKIAkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXN0cnVjdCBhY3BpX3NyYXRfY3B1X2FmZmluaXR5ICpwcm9jZXNzb3JfYWZmaW5pdHk7CkBAIC0yNDEsNiArMjgzLDggQEAKIHsKIAkvKiBTUkFUOiBTdGF0aWMgUmVzb3VyY2UgQWZmaW5pdHkgVGFibGUgKi8KIAlpZiAoIWFjcGlfdGFibGVfcGFyc2UoQUNQSV9TSUdfU1JBVCwgYWNwaV9wYXJzZV9zcmF0KSkgeworCQlhY3BpX3RhYmxlX3BhcnNlX3NyYXQoQUNQSV9TUkFUX1RZUEVfWDJBUElDX0NQVV9BRkZJTklUWSwKKwkJCQkgICAgICBhY3BpX3BhcnNlX3gyYXBpY19hZmZpbml0eSwgTlJfQ1BVUyk7CiAJCWFjcGlfdGFibGVfcGFyc2Vfc3JhdChBQ1BJX1NSQVRfVFlQRV9DUFVfQUZGSU5JVFksCiAJCQkJICAgICAgYWNwaV9wYXJzZV9wcm9jZXNzb3JfYWZmaW5pdHksIE5SX0NQVVMpOwogCQlhY3BpX3RhYmxlX3BhcnNlX3NyYXQoQUNQSV9TUkFUX1RZUEVfTUVNT1JZX0FGRklOSVRZLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCmluZGV4IGViODk4MGQuLmQ1OWYwOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYworKysgYi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTEwNzAsOSArMTA3MCw5IEBACiAgKiBpbiBhcmJpdHJhcnkgQU1MIGNvZGUgYW5kIGNhbiBpbnRlcmZlcmUgd2l0aCBsZWdhY3kgZHJpdmVycy4KICAqIGFjcGlfZW5mb3JjZV9yZXNvdXJjZXM9IGNhbiBiZSBzZXQgdG86CiAgKgotICogICAtIHN0cmljdCAgICAgICAgICAgKDIpCisgKiAgIC0gc3RyaWN0IChkZWZhdWx0KSAoMikKICAqICAgICAtPiBmdXJ0aGVyIGRyaXZlciB0cnlpbmcgdG8gYWNjZXNzIHRoZSByZXNvdXJjZXMgd2lsbCBub3QgbG9hZAotICogICAtIGxheCAoZGVmYXVsdCkgICAgKDEpCisgKiAgIC0gbGF4ICAgICAgICAgICAgICAoMSkKICAqICAgICAtPiBmdXJ0aGVyIGRyaXZlciB0cnlpbmcgdG8gYWNjZXNzIHRoZSByZXNvdXJjZXMgd2lsbCBsb2FkLCBidXQgeW91CiAgKiAgICAgZ2V0IGEgc3lzdGVtIG1lc3NhZ2UgdGhhdCBzb21ldGhpbmcgbWlnaHQgZ28gd3JvbmcuLi4KICAqCkBAIC0xMDg0LDcgKzEwODQsNyBAQAogI2RlZmluZSBFTkZPUkNFX1JFU09VUkNFU19MQVggICAgMQogI2RlZmluZSBFTkZPUkNFX1JFU09VUkNFU19OTyAgICAgMAogCi1zdGF0aWMgdW5zaWduZWQgaW50IGFjcGlfZW5mb3JjZV9yZXNvdXJjZXMgPSBFTkZPUkNFX1JFU09VUkNFU19MQVg7CitzdGF0aWMgdW5zaWduZWQgaW50IGFjcGlfZW5mb3JjZV9yZXNvdXJjZXMgPSBFTkZPUkNFX1JFU09VUkNFU19TVFJJQ1Q7CiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfZW5mb3JjZV9yZXNvdXJjZXNfc2V0dXAoY2hhciAqc3RyKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9pcnEuYyBiL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKaW5kZXggODkxYmRmNi4uNTFiOWY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9pcnEuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCkBAIC04Niw3ICs4Niw3IEBACiB9CiAKIC8qIGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD00NzczICovCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgbWVkaW9uX21kOTU4MFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIG1lZGlvbl9tZDk1ODBbXSA9IHsKIAl7CiAJCS5pZGVudCA9ICJNZWRpb24gTUQ5NTgwLUYgbGFwdG9wIiwKIAkJLm1hdGNoZXMgPSB7CkBAIC05OCw3ICs5OCw3IEBACiB9OwogCiAvKiBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTA0NCAqLwotc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGRlbGxfb3B0aXBsZXhbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBkZWxsX29wdGlwbGV4W10gPSB7CiAJewogCQkuaWRlbnQgPSAiRGVsbCBPcHRpcGxleCBHWDEiLAogCQkubWF0Y2hlcyA9IHsKQEAgLTExMCw3ICsxMTAsNyBAQAogfTsKIAogLyogaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTM4ICovCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgaHBfdDU3MTBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBocF90NTcxMFtdID0gewogCXsKIAkJLmlkZW50ID0gIkhQIHQ1NzEwIiwKIAkJLm1hdGNoZXMgPSB7CkBAIC0xMjMsMTMgKzEyMywxMyBAQAogfTsKIAogc3RydWN0IHBydF9xdWlyayB7Ci0Jc3RydWN0IGRtaV9zeXN0ZW1faWQJKnN5c3RlbTsKKwljb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqc3lzdGVtOwogCXVuc2lnbmVkIGludAkJc2VnbWVudDsKIAl1bnNpZ25lZCBpbnQJCWJ1czsKIAl1bnNpZ25lZCBpbnQJCWRldmljZTsKIAl1bnNpZ25lZCBjaGFyCQlwaW47Ci0JY2hhcgkJCSpzb3VyY2U7CS8qIGFjY29yZGluZyB0byBCSU9TICovCi0JY2hhcgkJCSphY3R1YWxfc291cmNlOworCWNvbnN0IGNoYXIJCSpzb3VyY2U7CS8qIGFjY29yZGluZyB0byBCSU9TICovCisJY29uc3QgY2hhcgkJKmFjdHVhbF9zb3VyY2U7CiB9OwogCiAjZGVmaW5lIFBDSV9JTlRYX1BJTihjKQkJKGMgLSAnQScgKyAxKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAgKiBpbnRlcnJ1cHQgYXQgdGhlIGxpc3RlZCBzZWdtZW50L2J1cy9kZXZpY2UvcGluIGlzIGNvbm5lY3RlZCB0byB0aGUgZmlyc3QKICAqIGxpbmsgZGV2aWNlLCBidXQgaXQgaXMgYWN0dWFsbHkgY29ubmVjdGVkIHRvIHRoZSBzZWNvbmQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHJ0X3F1aXJrIHBydF9xdWlya3NbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJ0X3F1aXJrIHBydF9xdWlya3NbXSA9IHsKIAl7IG1lZGlvbl9tZDk1ODAsIDAsIDAsIDksIFBDSV9JTlRYX1BJTignQScpLAogCQkiXFxfU0JfLlBDSTAuSVNBXy5MTktBIiwKIAkJIlxcX1NCXy5QQ0kwLklTQV8uTE5LQiJ9LApAQCAtMTU1LDcgKzE1NSw3IEBACiAJCQkgIHN0cnVjdCBhY3BpX3BjaV9yb3V0aW5nX3RhYmxlICpwcnQpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IHBydF9xdWlyayAqcXVpcms7CisJY29uc3Qgc3RydWN0IHBydF9xdWlyayAqcXVpcms7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcnRfcXVpcmtzKTsgaSsrKSB7CiAJCXF1aXJrID0gJnBydF9xdWlya3NbaV07CkBAIC0zMTksNyArMzE5LDcgQEAKIAkgKi8KIAlicmlkZ2UgPSBkZXYtPmJ1cy0+c2VsZjsKIAl3aGlsZSAoYnJpZGdlKSB7Ci0JCXBpbiA9ICgoKHBpbiAtIDEpICsgUENJX1NMT1QoZGV2LT5kZXZmbikpICUgNCkgKyAxOworCQlwaW4gPSBwY2lfc3dpenpsZV9pbnRlcnJ1cHRfcGluKGRldiwgcGluKTsKIAogCQlpZiAoKGJyaWRnZS0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTKSB7CiAJCQkvKiBQQyBjYXJkIGhhcyB0aGUgc2FtZSBJUlEgYXMgaXRzIGNhcmRicmlkZ2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfbGluay5jIGIvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKaW5kZXggNmM3NzJjYS4uMTZlMGY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9saW5rLmMKQEAgLTQzLDEzICs0MywxNCBAQAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCi0jZGVmaW5lIF9DT01QT05FTlQJCUFDUElfUENJX0NPTVBPTkVOVAorI2RlZmluZSBfQ09NUE9ORU5UCQkJQUNQSV9QQ0lfQ09NUE9ORU5UCiBBQ1BJX01PRFVMRV9OQU1FKCJwY2lfbGluayIpOwogI2RlZmluZSBBQ1BJX1BDSV9MSU5LX0NMQVNTCQkicGNpX2lycV9yb3V0aW5nIgogI2RlZmluZSBBQ1BJX1BDSV9MSU5LX0RFVklDRV9OQU1FCSJQQ0kgSW50ZXJydXB0IExpbmsiCiAjZGVmaW5lIEFDUElfUENJX0xJTktfRklMRV9JTkZPCQkiaW5mbyIKICNkZWZpbmUgQUNQSV9QQ0lfTElOS19GSUxFX1NUQVRVUwkic3RhdGUiCi0jZGVmaW5lIEFDUElfUENJX0xJTktfTUFYX1BPU1NJQkxFIDE2CisjZGVmaW5lIEFDUElfUENJX0xJTktfTUFYX1BPU1NJQkxFCTE2CisKIHN0YXRpYyBpbnQgYWNwaV9wY2lfbGlua19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIGludCBhY3BpX3BjaV9saW5rX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwogCkBAIC02Niw3ICs2Nyw3IEBACiAJLm9wcyA9IHsKIAkJLmFkZCA9IGFjcGlfcGNpX2xpbmtfYWRkLAogCQkucmVtb3ZlID0gYWNwaV9wY2lfbGlua19yZW1vdmUsCi0JCX0sCisJfSwKIH07CiAKIC8qCkBAIC03Niw3ICs3Nyw3IEBACiBzdHJ1Y3QgYWNwaV9wY2lfbGlua19pcnEgewogCXU4IGFjdGl2ZTsJCS8qIEN1cnJlbnQgSVJRICovCiAJdTggdHJpZ2dlcmluZzsJCS8qIEFsbCBJUlFzICovCi0JdTggcG9sYXJpdHk7CS8qIEFsbCBJUlFzICovCisJdTggcG9sYXJpdHk7CQkvKiBBbGwgSVJRcyAqLwogCXU4IHJlc291cmNlX3R5cGU7CiAJdTggcG9zc2libGVfY291bnQ7CiAJdTggcG9zc2libGVbQUNQSV9QQ0lfTElOS19NQVhfUE9TU0lCTEVdOwpAQCAtODUsMTYgKzg2LDEzIEBACiB9OwogCiBzdHJ1Y3QgYWNwaV9wY2lfbGluayB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOwotCXN0cnVjdCBhY3BpX3BjaV9saW5rX2lycSBpcnE7Ci0JaW50IHJlZmNudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OworCXN0cnVjdCBhY3BpX2RldmljZQkJKmRldmljZTsKKwlzdHJ1Y3QgYWNwaV9wY2lfbGlua19pcnEJaXJxOworCWludAkJCQlyZWZjbnQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IHsKLQlpbnQgY291bnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOwotfSBhY3BpX2xpbms7CitzdGF0aWMgTElTVF9IRUFEKGFjcGlfbGlua19saXN0KTsKIHN0YXRpYyBERUZJTkVfTVVURVgoYWNwaV9saW5rX2xvY2spOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA0LDEyICsxMDIsMTEgQEAKIC8qCiAgKiBzZXQgY29udGV4dCAobGluaykgcG9zc2libGUgbGlzdCBmcm9tIHJlc291cmNlIGxpc3QKICAqLwotc3RhdGljIGFjcGlfc3RhdHVzCi1hY3BpX3BjaV9saW5rX2NoZWNrX3Bvc3NpYmxlKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqY29udGV4dCkKK3N0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3BjaV9saW5rX2NoZWNrX3Bvc3NpYmxlKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwKKwkJCQkJCXZvaWQgKmNvbnRleHQpCiB7CiAJc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmsgPSBjb250ZXh0OwotCXUzMiBpID0gMDsKLQorCXUzMiBpOwogCiAJc3dpdGNoIChyZXNvdXJjZS0+dHlwZSkgewogCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX1NUQVJUX0RFUEVOREVOVDoKQEAgLTE3OSwxMCArMTc2LDYgQEAKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKLQotCWlmICghbGluaykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlzdGF0dXMgPSBhY3BpX3dhbGtfcmVzb3VyY2VzKGxpbmstPmRldmljZS0+aGFuZGxlLCBNRVRIT0RfTkFNRV9fUFJTLAogCQkJCSAgICAgYWNwaV9wY2lfbGlua19jaGVja19wb3NzaWJsZSwgbGluayk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC0xOTcsMTEgKzE5MCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgYWNwaV9zdGF0dXMKLWFjcGlfcGNpX2xpbmtfY2hlY2tfY3VycmVudChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmNvbnRleHQpCitzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9wY2lfbGlua19jaGVja19jdXJyZW50KHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwKKwkJCQkJICAgICAgIHZvaWQgKmNvbnRleHQpCiB7Ci0JaW50ICppcnEgPSAoaW50ICopY29udGV4dDsKLQorCWludCAqaXJxID0gY29udGV4dDsKIAogCXN3aXRjaCAocmVzb3VyY2UtPnR5cGUpIHsKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9TVEFSVF9ERVBFTkRFTlQ6CkBAIC0yNTgsMTIgKzI1MCw5IEBACiBzdGF0aWMgaW50IGFjcGlfcGNpX2xpbmtfZ2V0X2N1cnJlbnQoc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmspCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWludCBpcnEgPSAwOwogCi0JaWYgKCFsaW5rKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWxpbmstPmlycS5hY3RpdmUgPSAwOwogCiAJLyogaW4gcHJhY3RpY2UsIHN0YXR1cyBkaXNhYmxlZCBpcyBtZWFuaW5nbGVzcywgaWdub3JlIGl0ICovCkBAIC0zMDgsMTYgKzI5NywxNSBAQAogCiBzdGF0aWMgaW50IGFjcGlfcGNpX2xpbmtfc2V0KHN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rLCBpbnQgaXJxKQogewotCWludCByZXN1bHQgPSAwOwotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCWludCByZXN1bHQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBhY3BpX3Jlc291cmNlIHJlczsKIAkJc3RydWN0IGFjcGlfcmVzb3VyY2UgZW5kOwogCX0gKnJlc291cmNlOwogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IDAsIE5VTEwgfTsKIAotCi0JaWYgKCFsaW5rIHx8ICFpcnEpCisJaWYgKCFpcnEpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmVzb3VyY2UgPSBremFsbG9jKHNpemVvZigqcmVzb3VyY2UpICsgMSwgaXJxc19kaXNhYmxlZCgpID8gR0ZQX0FUT01JQzogR0ZQX0tFUk5FTCk7CkBAIC00NzksMzAgKzQ2NywyMiBAQAogCVBJUlFfUEVOQUxUWV9QQ0lfQVZBSUxBQkxFLAkvKiBJUlE5ICBQQ0ksIG9mdGVuIGFjcGkgKi8KIAlQSVJRX1BFTkFMVFlfUENJX0FWQUlMQUJMRSwJLyogSVJRMTAgUENJICovCiAJUElSUV9QRU5BTFRZX1BDSV9BVkFJTEFCTEUsCS8qIElSUTExIFBDSSAqLwotCVBJUlFfUEVOQUxUWV9JU0FfVVNFRCwJLyogSVJRMTIgbW91c2UgKi8KLQlQSVJRX1BFTkFMVFlfSVNBX1VTRUQsCS8qIElSUTEzIGZwZSwgc29tZXRpbWVzICovCi0JUElSUV9QRU5BTFRZX0lTQV9VU0VELAkvKiBJUlExNCBpZGUwICovCi0JUElSUV9QRU5BTFRZX0lTQV9VU0VELAkvKiBJUlExNSBpZGUxICovCisJUElSUV9QRU5BTFRZX0lTQV9VU0VELAkJLyogSVJRMTIgbW91c2UgKi8KKwlQSVJRX1BFTkFMVFlfSVNBX1VTRUQsCQkvKiBJUlExMyBmcGUsIHNvbWV0aW1lcyAqLworCVBJUlFfUEVOQUxUWV9JU0FfVVNFRCwJCS8qIElSUTE0IGlkZTAgKi8KKwlQSVJRX1BFTkFMVFlfSVNBX1VTRUQsCQkvKiBJUlExNSBpZGUxICovCiAJLyogPklSUTE1ICovCiB9OwogCiBpbnQgX19pbml0IGFjcGlfaXJxX3BlbmFsdHlfaW5pdCh2b2lkKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUgPSBOVUxMOwotCXN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rID0gTlVMTDsKLQlpbnQgaSA9IDA7Ci0KKwlzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluazsKKwlpbnQgaTsKIAogCS8qCiAJICogVXBkYXRlIHBlbmFsdGllcyB0byBmYWNpbGl0YXRlIElSUSBiYWxhbmNpbmcuCiAJICovCi0JbGlzdF9mb3JfZWFjaChub2RlLCAmYWNwaV9saW5rLmVudHJpZXMpIHsKLQotCQlsaW5rID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgYWNwaV9wY2lfbGluaywgbm9kZSk7Ci0JCWlmICghbGluaykgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBsaW5rIGNvbnRleHRcbiIpOwotCQkJY29udGludWU7Ci0JCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpbmssICZhY3BpX2xpbmtfbGlzdCwgbGlzdCkgewogCiAJCS8qCiAJCSAqIHJlZmxlY3QgdGhlIHBvc3NpYmxlIGFuZCBhY3RpdmUgaXJxcyBpbiB0aGUgcGVuYWx0eSB0YWJsZSAtLQpAQCAtNTI3LDcgKzUwNyw2IEBACiAJfQogCS8qIEFkZCBhIHBlbmFsdHkgZm9yIHRoZSBTQ0kgKi8KIAlhY3BpX2lycV9wZW5hbHR5W2FjcGlfZ2JsX0ZBRFQuc2NpX2ludGVycnVwdF0gKz0gUElSUV9QRU5BTFRZX1BDSV9VU0lORzsKLQogCXJldHVybiAwOwogfQogCkBAIC01MzgsNyArNTE3LDYgQEAKIAlpbnQgaXJxOwogCWludCBpOwogCi0KIAlpZiAobGluay0+aXJxLmluaXRpYWxpemVkKSB7CiAJCWlmIChsaW5rLT5yZWZjbnQgPT0gMCkKIAkJCS8qIFRoaXMgbWVhbnMgdGhlIGxpbmsgaXMgZGlzYWJsZWQgYnV0IGluaXRpYWxpemVkICovCkBAIC01NjYsMTEgKzU0NCwxMCBAQAogCS8qCiAJICogaWYgYWN0aXZlIGZvdW5kLCB1c2UgaXQ7IGVsc2UgcGljayBlbnRyeSBmcm9tIGVuZCBvZiBwb3NzaWJsZSBsaXN0LgogCSAqLwotCWlmIChsaW5rLT5pcnEuYWN0aXZlKSB7CisJaWYgKGxpbmstPmlycS5hY3RpdmUpCiAJCWlycSA9IGxpbmstPmlycS5hY3RpdmU7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWlycSA9IGxpbmstPmlycS5wb3NzaWJsZVtsaW5rLT5pcnEucG9zc2libGVfY291bnQgLSAxXTsKLQl9CiAKIAlpZiAoYWNwaV9pcnFfYmFsYW5jZSB8fCAhbGluay0+aXJxLmFjdGl2ZSkgewogCQkvKgpAQCAtNTk5LDcgKzU3Niw2IEBACiAJfQogCiAJbGluay0+aXJxLmluaXRpYWxpemVkID0gMTsKLQogCXJldHVybiAwOwogfQogCkBAIC02MDgsMTYgKzU4NCwxMiBAQAogICogc3VjY2VzczogcmV0dXJuIElSUSA+PSAwCiAgKiBmYWlsdXJlOiByZXR1cm4gLTEKICAqLwotCi1pbnQKLWFjcGlfcGNpX2xpbmtfYWxsb2NhdGVfaXJxKGFjcGlfaGFuZGxlIGhhbmRsZSwKLQkJCSAgIGludCBpbmRleCwKLQkJCSAgIGludCAqdHJpZ2dlcmluZywgaW50ICpwb2xhcml0eSwgY2hhciAqKm5hbWUpCitpbnQgYWNwaV9wY2lfbGlua19hbGxvY2F0ZV9pcnEoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgaW5kZXgsIGludCAqdHJpZ2dlcmluZywKKwkJCSAgICAgICBpbnQgKnBvbGFyaXR5LCBjaGFyICoqbmFtZSkKIHsKLQlpbnQgcmVzdWx0ID0gMDsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IE5VTEw7Ci0Jc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmsgPSBOVUxMOwotCisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluazsKIAogCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKTsKIAlpZiAocmVzdWx0KSB7CkBAIC02NjksMTEgKzY0MSwxMCBAQAogICovCiBpbnQgYWNwaV9wY2lfbGlua19mcmVlX2lycShhY3BpX2hhbmRsZSBoYW5kbGUpCiB7Ci0Jc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBOVUxMOwotCXN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rID0gTlVMTDsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKKwlzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluazsKIAlhY3BpX3N0YXR1cyByZXN1bHQ7CiAKLQogCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9kZXZpY2UoaGFuZGxlLCAmZGV2aWNlKTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgbGluayBkZXZpY2VcbiIpOwpAQCAtNzA4LDkgKzY3OSw5IEBACiAJCQkgICJMaW5rICVzIGlzIGRlcmVmZXJlbmNlZFxuIiwKIAkJCSAgYWNwaV9kZXZpY2VfYmlkKGxpbmstPmRldmljZSkpKTsKIAotCWlmIChsaW5rLT5yZWZjbnQgPT0gMCkgeworCWlmIChsaW5rLT5yZWZjbnQgPT0gMCkKIAkJYWNwaV9ldmFsdWF0ZV9vYmplY3QobGluay0+ZGV2aWNlLT5oYW5kbGUsICJfRElTIiwgTlVMTCwgTlVMTCk7Ci0JfQorCiAJbXV0ZXhfdW5sb2NrKCZhY3BpX2xpbmtfbG9jayk7CiAJcmV0dXJuIChsaW5rLT5pcnEuYWN0aXZlKTsKIH0KQEAgLTcyMSwxNSArNjkyLDExIEBACiAKIHN0YXRpYyBpbnQgYWNwaV9wY2lfbGlua19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0Jc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbmsgPSBOVUxMOwotCWludCBpID0gMDsKKwlpbnQgcmVzdWx0OworCXN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rOworCWludCBpOwogCWludCBmb3VuZCA9IDA7CiAKLQotCWlmICghZGV2aWNlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWxpbmsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9wY2lfbGluayksIEdGUF9LRVJORUwpOwogCWlmICghbGluaykKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03NjcsOSArNzM0LDcgQEAKIAogCXByaW50aygiXG4iKTsKIAotCS8qIFRCRDogQWNxdWlyZS9yZWxlYXNlIGxvY2sgKi8KLQlsaXN0X2FkZF90YWlsKCZsaW5rLT5ub2RlLCAmYWNwaV9saW5rLmVudHJpZXMpOwotCWFjcGlfbGluay5jb3VudCsrOworCWxpc3RfYWRkX3RhaWwoJmxpbmstPmxpc3QsICZhY3BpX2xpbmtfbGlzdCk7CiAKICAgICAgIGVuZDoKIAkvKiBkaXNhYmxlIGFsbCBsaW5rcyAtLSB0byBiZSBhY3RpdmF0ZWQgb24gdXNlICovCkBAIC03ODQsMjQgKzc0OSwxNyBAQAogCiBzdGF0aWMgaW50IGFjcGlfcGNpX2xpbmtfcmVzdW1lKHN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rKQogewotCiAJaWYgKGxpbmstPnJlZmNudCAmJiBsaW5rLT5pcnEuYWN0aXZlICYmIGxpbmstPmlycS5pbml0aWFsaXplZCkKIAkJcmV0dXJuIChhY3BpX3BjaV9saW5rX3NldChsaW5rLCBsaW5rLT5pcnEuYWN0aXZlKSk7Ci0JZWxzZQotCQlyZXR1cm4gMDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGlycXJvdXRlcl9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlID0gTlVMTDsKLQlzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluayA9IE5VTEw7CisJc3RydWN0IGFjcGlfcGNpX2xpbmsgKmxpbms7CiAKLQlsaXN0X2Zvcl9lYWNoKG5vZGUsICZhY3BpX2xpbmsuZW50cmllcykgewotCQlsaW5rID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgYWNwaV9wY2lfbGluaywgbm9kZSk7Ci0JCWlmICghbGluaykgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBsaW5rIGNvbnRleHRcbiIpOwotCQkJY29udGludWU7Ci0JCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpbmssICZhY3BpX2xpbmtfbGlzdCwgbGlzdCkgewogCQlhY3BpX3BjaV9saW5rX3Jlc3VtZShsaW5rKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC04MDksMjAgKzc2NywxNSBAQAogCiBzdGF0aWMgaW50IGFjcGlfcGNpX2xpbmtfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgYWNwaV9wY2lfbGluayAqbGluayA9IE5VTEw7Ci0KLQotCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCi0JCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBhY3BpX3BjaV9saW5rICpsaW5rOwogCiAJbGluayA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAogCW11dGV4X2xvY2soJmFjcGlfbGlua19sb2NrKTsKLQlsaXN0X2RlbCgmbGluay0+bm9kZSk7CisJbGlzdF9kZWwoJmxpbmstPmxpc3QpOwogCW11dGV4X3VubG9jaygmYWNwaV9saW5rX2xvY2spOwogCiAJa2ZyZWUobGluayk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtOTMxLDcgKzg4NCw2IEBACiB7CiAJaW50IGVycm9yOwogCi0KIAlpZiAoYWNwaV9kaXNhYmxlZCB8fCBhY3BpX25vaXJxKQogCQlyZXR1cm4gMDsKIApAQCAtOTU3LDkgKzkwOSw2IEBACiAJCQlhY3BpX2lycV9iYWxhbmNlID0gMDsKIAl9CiAKLQlhY3BpX2xpbmsuY291bnQgPSAwOwotCUlOSVRfTElTVF9IRUFEKCZhY3BpX2xpbmsuZW50cmllcyk7Ci0KIAlpZiAoYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3BjaV9saW5rX2RyaXZlcikgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwppbmRleCA1YjM4YTAyLi4xOTZmOTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYworKysgYi9kcml2ZXJzL2FjcGkvcGNpX3Jvb3QuYwpAQCAtNjYsMTEgKzY2LDE4IEBACiAJc3RydWN0IGFjcGlfZGV2aWNlICogZGV2aWNlOwogCXN0cnVjdCBhY3BpX3BjaV9pZCBpZDsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCisJdTMyIG9zY19zdXBwb3J0X3NldDsJLyogX09TQyBzdGF0ZSBvZiBzdXBwb3J0IGJpdHMgKi8KKwl1MzIgb3NjX2NvbnRyb2xfc2V0OwkvKiBfT1NDIHN0YXRlIG9mIGNvbnRyb2wgYml0cyAqLworCXUzMiBvc2NfY29udHJvbF9xcnk7CS8qIHRoZSBsYXRlc3QgX09TQyBxdWVyeSByZXN1bHQgKi8KKworCXUzMiBvc2NfcXVlcmllZDoxOwkvKiBoYXMgX09TQyBjb250cm9sIGJlZW4gcXVlcmllZD8gKi8KIH07CiAKIHN0YXRpYyBMSVNUX0hFQUQoYWNwaV9wY2lfcm9vdHMpOwogCiBzdGF0aWMgc3RydWN0IGFjcGlfcGNpX2RyaXZlciAqc3ViX2RyaXZlcjsKK3N0YXRpYyBERUZJTkVfTVVURVgob3NjX2xvY2spOwogCiBpbnQgYWNwaV9wY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBhY3BpX3BjaV9kcml2ZXIgKmRyaXZlcikKIHsKQEAgLTE4NSw2ICsxOTIsMTc1IEBACiAJCX0KIH0KIAorc3RhdGljIHU4IE9TQ19VVUlEWzE2XSA9IHsweDVCLCAweDRELCAweERCLCAweDMzLCAweEY3LCAweDFGLCAweDFDLCAweDQwLAorCQkJICAweDk2LCAweDU3LCAweDc0LCAweDQxLCAweEMwLCAweDNELCAweEQ3LCAweDY2fTsKKworc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfcGNpX3J1bl9vc2MoYWNwaV9oYW5kbGUgaGFuZGxlLAorCQkJCSAgICBjb25zdCB1MzIgKmNhcGJ1ZiwgdTMyICpyZXR2YWwpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGlucHV0OworCXVuaW9uIGFjcGlfb2JqZWN0IGluX3BhcmFtc1s0XTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgb3V0cHV0ID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqb3V0X29iajsKKwl1MzIgZXJyb3JzOworCisJLyogU2V0dGluZyB1cCBpbnB1dCBwYXJhbWV0ZXJzICovCisJaW5wdXQuY291bnQgPSA0OworCWlucHV0LnBvaW50ZXIgPSBpbl9wYXJhbXM7CisJaW5fcGFyYW1zWzBdLnR5cGUgCQk9IEFDUElfVFlQRV9CVUZGRVI7CisJaW5fcGFyYW1zWzBdLmJ1ZmZlci5sZW5ndGggCT0gMTY7CisJaW5fcGFyYW1zWzBdLmJ1ZmZlci5wb2ludGVyCT0gT1NDX1VVSUQ7CisJaW5fcGFyYW1zWzFdLnR5cGUgCQk9IEFDUElfVFlQRV9JTlRFR0VSOworCWluX3BhcmFtc1sxXS5pbnRlZ2VyLnZhbHVlIAk9IDE7CisJaW5fcGFyYW1zWzJdLnR5cGUgCQk9IEFDUElfVFlQRV9JTlRFR0VSOworCWluX3BhcmFtc1syXS5pbnRlZ2VyLnZhbHVlCT0gMzsKKwlpbl9wYXJhbXNbM10udHlwZQkJPSBBQ1BJX1RZUEVfQlVGRkVSOworCWluX3BhcmFtc1szXS5idWZmZXIubGVuZ3RoIAk9IDEyOworCWluX3BhcmFtc1szXS5idWZmZXIucG9pbnRlciAJPSAodTggKiljYXBidWY7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfT1NDIiwgJmlucHV0LCAmb3V0cHV0KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiBzdGF0dXM7CisKKwlpZiAoIW91dHB1dC5sZW5ndGgpCisJCXJldHVybiBBRV9OVUxMX09CSkVDVDsKKworCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKKwlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJfT1NDIGV2YWx1YXRpb24gcmV0dXJuZWQgd3JvbmcgdHlwZVxuIik7CisJCXN0YXR1cyA9IEFFX1RZUEU7CisJCWdvdG8gb3V0X2tmcmVlOworCX0KKwkvKiBOZWVkIHRvIGlnbm9yZSB0aGUgYml0MCBpbiByZXN1bHQgY29kZSAqLworCWVycm9ycyA9ICooKHUzMiAqKW91dF9vYmotPmJ1ZmZlci5wb2ludGVyKSAmIH4oMSA8PCAwKTsKKwlpZiAoZXJyb3JzKSB7CisJCWlmIChlcnJvcnMgJiBPU0NfUkVRVUVTVF9FUlJPUikKKwkJCXByaW50ayhLRVJOX0RFQlVHICJfT1NDIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJaWYgKGVycm9ycyAmIE9TQ19JTlZBTElEX1VVSURfRVJST1IpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyBpbnZhbGlkIFVVSURcbiIpOworCQlpZiAoZXJyb3JzICYgT1NDX0lOVkFMSURfUkVWSVNJT05fRVJST1IpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyBpbnZhbGlkIHJldmlzaW9uXG4iKTsKKwkJaWYgKGVycm9ycyAmIE9TQ19DQVBBQklMSVRJRVNfTUFTS19FUlJPUikgeworCQkJaWYgKGNhcGJ1ZltPU0NfUVVFUllfVFlQRV0gJiBPU0NfUVVFUllfRU5BQkxFKQorCQkJCWdvdG8gb3V0X3N1Y2Nlc3M7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJGaXJtd2FyZSBkaWQgbm90IGdyYW50IHJlcXVlc3RlZCBfT1NDIGNvbnRyb2xcbiIpOworCQkJc3RhdHVzID0gQUVfU1VQUE9SVDsKKwkJCWdvdG8gb3V0X2tmcmVlOworCQl9CisJCXN0YXR1cyA9IEFFX0VSUk9SOworCQlnb3RvIG91dF9rZnJlZTsKKwl9CitvdXRfc3VjY2VzczoKKwkqcmV0dmFsID0gKigodTMyICopKG91dF9vYmotPmJ1ZmZlci5wb2ludGVyICsgOCkpOworCXN0YXR1cyA9IEFFX09LOworCitvdXRfa2ZyZWU6CisJa2ZyZWUob3V0cHV0LnBvaW50ZXIpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3BjaV9xdWVyeV9vc2Moc3RydWN0IGFjcGlfcGNpX3Jvb3QgKnJvb3QsIHUzMiBmbGFncykKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdTMyIHN1cHBvcnRfc2V0LCByZXN1bHQsIGNhcGJ1ZlszXTsKKworCS8qIGRvIF9PU0MgcXVlcnkgZm9yIGFsbCBwb3NzaWJsZSBjb250cm9scyAqLworCXN1cHBvcnRfc2V0ID0gcm9vdC0+b3NjX3N1cHBvcnRfc2V0IHwgKGZsYWdzICYgT1NDX1NVUFBPUlRfTUFTS1MpOworCWNhcGJ1ZltPU0NfUVVFUllfVFlQRV0gPSBPU0NfUVVFUllfRU5BQkxFOworCWNhcGJ1ZltPU0NfU1VQUE9SVF9UWVBFXSA9IHN1cHBvcnRfc2V0OworCWNhcGJ1ZltPU0NfQ09OVFJPTF9UWVBFXSA9IE9TQ19DT05UUk9MX01BU0tTOworCisJc3RhdHVzID0gYWNwaV9wY2lfcnVuX29zYyhyb290LT5kZXZpY2UtPmhhbmRsZSwgY2FwYnVmLCAmcmVzdWx0KTsKKwlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJcm9vdC0+b3NjX3N1cHBvcnRfc2V0ID0gc3VwcG9ydF9zZXQ7CisJCXJvb3QtPm9zY19jb250cm9sX3FyeSA9IHJlc3VsdDsKKwkJcm9vdC0+b3NjX3F1ZXJpZWQgPSAxOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9wY2lfb3NjX3N1cHBvcnQoc3RydWN0IGFjcGlfcGNpX3Jvb3QgKnJvb3QsIHUzMiBmbGFncykKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9oYW5kbGUgdG1wOworCisJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKHJvb3QtPmRldmljZS0+aGFuZGxlLCAiX09TQyIsICZ0bXApOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIHN0YXR1czsKKwltdXRleF9sb2NrKCZvc2NfbG9jayk7CisJc3RhdHVzID0gYWNwaV9wY2lfcXVlcnlfb3NjKHJvb3QsIGZsYWdzKTsKKwltdXRleF91bmxvY2soJm9zY19sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3RydWN0IGFjcGlfcGNpX3Jvb3QgKmFjcGlfcGNpX2ZpbmRfcm9vdChhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJc3RydWN0IGFjcGlfcGNpX3Jvb3QgKnJvb3Q7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyb290LCAmYWNwaV9wY2lfcm9vdHMsIG5vZGUpIHsKKwkJaWYgKHJvb3QtPmRldmljZS0+aGFuZGxlID09IGhhbmRsZSkKKwkJCXJldHVybiByb290OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBhY3BpX3BjaV9vc2NfY29udHJvbF9zZXQgLSBjb21taXQgcmVxdWVzdGVkIGNvbnRyb2wgdG8gRmlybXdhcmUKKyAqIEBoYW5kbGU6IGFjcGlfaGFuZGxlIGZvciB0aGUgdGFyZ2V0IEFDUEkgb2JqZWN0CisgKiBAZmxhZ3M6IGRyaXZlcidzIHJlcXVlc3RlZCBjb250cm9sIGJpdHMKKyAqCisgKiBBdHRlbXB0IHRvIHRha2UgY29udHJvbCBmcm9tIEZpcm13YXJlIG9uIHJlcXVlc3RlZCBjb250cm9sIGJpdHMuCisgKiovCithY3BpX3N0YXR1cyBhY3BpX3BjaV9vc2NfY29udHJvbF9zZXQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXUzMiBjb250cm9sX3JlcSwgcmVzdWx0LCBjYXBidWZbM107CisJYWNwaV9oYW5kbGUgdG1wOworCXN0cnVjdCBhY3BpX3BjaV9yb290ICpyb290OworCisJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9PU0MiLCAmdG1wKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiBzdGF0dXM7CisKKwljb250cm9sX3JlcSA9IChmbGFncyAmIE9TQ19DT05UUk9MX01BU0tTKTsKKwlpZiAoIWNvbnRyb2xfcmVxKQorCQlyZXR1cm4gQUVfVFlQRTsKKworCXJvb3QgPSBhY3BpX3BjaV9maW5kX3Jvb3QoaGFuZGxlKTsKKwlpZiAoIXJvb3QpCisJCXJldHVybiBBRV9OT1RfRVhJU1Q7CisKKwltdXRleF9sb2NrKCZvc2NfbG9jayk7CisJLyogTm8gbmVlZCB0byBldmFsdWF0ZSBfT1NDIGlmIHRoZSBjb250cm9sIHdhcyBhbHJlYWR5IGdyYW50ZWQuICovCisJaWYgKChyb290LT5vc2NfY29udHJvbF9zZXQgJiBjb250cm9sX3JlcSkgPT0gY29udHJvbF9yZXEpCisJCWdvdG8gb3V0OworCisJLyogTmVlZCB0byBxdWVyeSBjb250cm9scyBmaXJzdCBiZWZvcmUgcmVxdWVzdGluZyB0aGVtICovCisJaWYgKCFyb290LT5vc2NfcXVlcmllZCkgeworCQlzdGF0dXMgPSBhY3BpX3BjaV9xdWVyeV9vc2Mocm9vdCwgcm9vdC0+b3NjX3N1cHBvcnRfc2V0KTsKKwkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQkJZ290byBvdXQ7CisJfQorCWlmICgocm9vdC0+b3NjX2NvbnRyb2xfcXJ5ICYgY29udHJvbF9yZXEpICE9IGNvbnRyb2xfcmVxKSB7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRmlybXdhcmUgZGlkIG5vdCBncmFudCByZXF1ZXN0ZWQgX09TQyBjb250cm9sXG4iKTsKKwkJc3RhdHVzID0gQUVfU1VQUE9SVDsKKwkJZ290byBvdXQ7CisJfQorCisJY2FwYnVmW09TQ19RVUVSWV9UWVBFXSA9IDA7CisJY2FwYnVmW09TQ19TVVBQT1JUX1RZUEVdID0gcm9vdC0+b3NjX3N1cHBvcnRfc2V0OworCWNhcGJ1ZltPU0NfQ09OVFJPTF9UWVBFXSA9IHJvb3QtPm9zY19jb250cm9sX3NldCB8IGNvbnRyb2xfcmVxOworCXN0YXR1cyA9IGFjcGlfcGNpX3J1bl9vc2MoaGFuZGxlLCBjYXBidWYsICZyZXN1bHQpOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJcm9vdC0+b3NjX2NvbnRyb2xfc2V0ID0gcmVzdWx0Oworb3V0OgorCW11dGV4X3VubG9jaygmb3NjX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CitFWFBPUlRfU1lNQk9MKGFjcGlfcGNpX29zY19jb250cm9sX3NldCk7CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGFjcGlfcGNpX3Jvb3RfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCWludCByZXN1bHQgPSAwOwpAQCAtMjE3LDcgKzM5Myw3IEBACiAJICogUENJIGRvbWFpbnMsIHNvIHdlIGluZGljYXRlIHRoaXMgaW4gX09TQyBzdXBwb3J0IGNhcGFiaWxpdGllcy4KIAkgKi8KIAlmbGFncyA9IGJhc2VfZmxhZ3MgPSBPU0NfUENJX1NFR01FTlRfR1JPVVBTX1NVUFBPUlQ7Ci0JcGNpX2FjcGlfb3NjX3N1cHBvcnQoZGV2aWNlLT5oYW5kbGUsIGZsYWdzKTsKKwlhY3BpX3BjaV9vc2Nfc3VwcG9ydChyb290LCBmbGFncyk7CiAKIAkvKiAKIAkgKiBTZWdtZW50CkBAIC0zNTMsNyArNTI5LDcgQEAKIAlpZiAocGNpX21zaV9lbmFibGVkKCkpCiAJCWZsYWdzIHw9IE9TQ19NU0lfU1VQUE9SVDsKIAlpZiAoZmxhZ3MgIT0gYmFzZV9mbGFncykKLQkJcGNpX2FjcGlfb3NjX3N1cHBvcnQoZGV2aWNlLT5oYW5kbGUsIGZsYWdzKTsKKwkJYWNwaV9wY2lfb3NjX3N1cHBvcnQocm9vdCwgZmxhZ3MpOwogCiAgICAgICBlbmQ6CiAJaWYgKHJlc3VsdCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Bvd2VyLmMgYi9kcml2ZXJzL2FjcGkvcG93ZXIuYwppbmRleCBjOTI2ZTdkLi41NjY2NWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcG93ZXIuYworKysgYi9kcml2ZXJzL2FjcGkvcG93ZXIuYwpAQCAtNTQsMTAgKzU0LDYgQEAKICNkZWZpbmUgQUNQSV9QT1dFUl9SRVNPVVJDRV9TVEFURV9PTgkweDAxCiAjZGVmaW5lIEFDUElfUE9XRVJfUkVTT1VSQ0VfU1RBVEVfVU5LTk9XTiAweEZGCiAKLSNpZmRlZiBNT0RVTEVfUEFSQU1fUFJFRklYCi0jdW5kZWYgTU9EVUxFX1BBUkFNX1BSRUZJWAotI2VuZGlmCi0jZGVmaW5lIE1PRFVMRV9QQVJBTV9QUkVGSVggImFjcGkuIgogaW50IGFjcGlfcG93ZXJfbm9jaGVjazsKIG1vZHVsZV9wYXJhbV9uYW1lZChwb3dlcl9ub2NoZWNrLCBhY3BpX3Bvd2VyX25vY2hlY2ssIGJvb2wsIDAwMCk7CiAKQEAgLTc3MywxNCArNzY5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfcG93ZXJfaW5pdCh2b2lkKQoraW50IF9faW5pdCBhY3BpX3Bvd2VyX2luaXQodm9pZCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCi0JaWYgKGFjcGlfZGlzYWJsZWQpCi0JCXJldHVybiAwOwotCiAJSU5JVF9MSVNUX0hFQUQoJmFjcGlfcG93ZXJfcmVzb3VyY2VfbGlzdCk7CiAKIAlhY3BpX3Bvd2VyX2RpciA9IHByb2NfbWtkaXIoQUNQSV9QT1dFUl9DTEFTUywgYWNwaV9yb290X2Rpcik7CkBAIC03OTUsNSArNzg3LDMgQEAKIAogCXJldHVybiAwOwogfQotCi1zdWJzeXNfaW5pdGNhbGwoYWNwaV9wb3dlcl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jLmMgYi9kcml2ZXJzL2FjcGkvcHJvYy5jCmluZGV4IDQyOGM5MTFkLi4wNWRmZGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jLmMKQEAgLTQ5NiwxMSArNDk2LDggQEAKIH0KICNlbmRpZgkJCQkvKiBIQVZFX0FDUElfTEVHQUNZX0FMQVJNICovCiAKLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfc2xlZXBfcHJvY19pbml0KHZvaWQpCitpbnQgX19pbml0IGFjcGlfc2xlZXBfcHJvY19pbml0KHZvaWQpCiB7Ci0JaWYgKGFjcGlfZGlzYWJsZWQpCi0JCXJldHVybiAwOwotCiAjaWZkZWYJQ09ORklHX0FDUElfUFJPQ0ZTCiAJLyogJ3NsZWVwJyBbUi9XXSAqLwogCXByb2NfY3JlYXRlKCJzbGVlcCIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKQEAgLTUyNyw1ICs1MjQsMyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KLWxhdGVfaW5pdGNhbGwoYWNwaV9zbGVlcF9wcm9jX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwppbmRleCBmYTJmNzQyLi40NWFkMzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwpAQCAtODIsNyArODIsNyBAQAogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9zdGFydChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9pbmZvX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHZvaWQgYWNwaV9wcm9jZXNzb3Jfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIGFjcGlfcHJvY2Vzc29yX25vdGlmeShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgdTMyIGV2ZW50KTsKIHN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3Byb2Nlc3Nvcl9ob3RhZGRfaW5pdChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqcF9jcHUpOwogc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9oYW5kbGVfZWplY3Qoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcik7CiAKQEAgLTEwNCw2ICsxMDQsNyBAQAogCQkuc3RhcnQgPSBhY3BpX3Byb2Nlc3Nvcl9zdGFydCwKIAkJLnN1c3BlbmQgPSBhY3BpX3Byb2Nlc3Nvcl9zdXNwZW5kLAogCQkucmVzdW1lID0gYWNwaV9wcm9jZXNzb3JfcmVzdW1lLAorCQkubm90aWZ5ID0gYWNwaV9wcm9jZXNzb3Jfbm90aWZ5LAogCQl9LAogfTsKIApAQCAtNDI2LDYgKzQyNywyOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG1hcF94MmFwaWNfaWQoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICplbnRyeSwKKwkJCSBpbnQgZGV2aWNlX2RlY2xhcmF0aW9uLCB1MzIgYWNwaV9pZCwgaW50ICphcGljX2lkKQoreworCXN0cnVjdCBhY3BpX21hZHRfbG9jYWxfeDJhcGljICphcGljID0KKwkJKHN0cnVjdCBhY3BpX21hZHRfbG9jYWxfeDJhcGljICopZW50cnk7CisJdTMyIHRtcCA9IGFwaWMtPmxvY2FsX2FwaWNfaWQ7CisKKwkvKiBPbmx5IGNoZWNrIGVuYWJsZWQgQVBJQ3MqLworCWlmICghKGFwaWMtPmxhcGljX2ZsYWdzICYgQUNQSV9NQURUX0VOQUJMRUQpKQorCQlyZXR1cm4gMDsKKworCS8qIERldmljZSBzdGF0ZW1lbnQgZGVjbGFyYXRpb24gdHlwZSAqLworCWlmIChkZXZpY2VfZGVjbGFyYXRpb24pIHsKKwkJaWYgKGFwaWMtPnVpZCA9PSBhY3BpX2lkKQorCQkJZ290byBmb3VuZDsKKwl9CisKKwlyZXR1cm4gMDsKK2ZvdW5kOgorCSphcGljX2lkID0gdG1wOworCXJldHVybiAxOworfQorCiBzdGF0aWMgaW50IG1hcF9sc2FwaWNfaWQoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICplbnRyeSwKIAkJaW50IGRldmljZV9kZWNsYXJhdGlvbiwgdTMyIGFjcGlfaWQsIGludCAqYXBpY19pZCkKIHsKQEAgLTQ3NSw2ICs0OTksOSBAQAogCQlpZiAoaGVhZGVyLT50eXBlID09IEFDUElfTUFEVF9UWVBFX0xPQ0FMX0FQSUMpIHsKIAkJCWlmIChtYXBfbGFwaWNfaWQoaGVhZGVyLCBhY3BpX2lkLCAmYXBpY19pZCkpCiAJCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoaGVhZGVyLT50eXBlID09IEFDUElfTUFEVF9UWVBFX0xPQ0FMX1gyQVBJQykgeworCQkJaWYgKG1hcF94MmFwaWNfaWQoaGVhZGVyLCB0eXBlLCBhY3BpX2lkLCAmYXBpY19pZCkpCisJCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAoaGVhZGVyLT50eXBlID09IEFDUElfTUFEVF9UWVBFX0xPQ0FMX1NBUElDKSB7CiAJCQlpZiAobWFwX2xzYXBpY19pZChoZWFkZXIsIHR5cGUsIGFjcGlfaWQsICZhcGljX2lkKSkKIAkJCQlicmVhazsKQEAgLTY2NSw3ICs2OTIsNiBAQAogc3RhdGljIGludCBfX2NwdWluaXQgYWNwaV9wcm9jZXNzb3Jfc3RhcnQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKIAlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwogCkBAIC03MDIsOSArNzI4LDYgQEAKIAlpZiAoc3lzZnNfY3JlYXRlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosICZzeXNkZXYtPmtvYmosICJzeXNkZXYiKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIocHItPmhhbmRsZSwgQUNQSV9ERVZJQ0VfTk9USUZZLAotCQkJCQkgICAgIGFjcGlfcHJvY2Vzc29yX25vdGlmeSwgcHIpOwotCiAJLyogX1BEQyBjYWxsIHNob3VsZCBiZSBkb25lIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlIChpZiByZXFkLikuICovCiAJYXJjaF9hY3BpX3Byb2Nlc3Nvcl9pbml0X3BkYyhwcik7CiAJYWNwaV9wcm9jZXNzb3Jfc2V0X3BkYyhwcik7CkBAIC03NTAsMTggKzc3MywxNCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGFjcGlfcHJvY2Vzc29yX25vdGlmeShhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBldmVudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGFjcGlfcHJvY2Vzc29yX25vdGlmeShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgdTMyIGV2ZW50KQogewotCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBkYXRhOwotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwogCWludCBzYXZlZDsKIAogCWlmICghcHIpCiAJCXJldHVybjsKIAotCWlmIChhY3BpX2J1c19nZXRfZGV2aWNlKHByLT5oYW5kbGUsICZkZXZpY2UpKQotCQlyZXR1cm47Ci0KIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBBQ1BJX1BST0NFU1NPUl9OT1RJRllfUEVSRk9STUFOQ0U6CiAJCXNhdmVkID0gcHItPnBlcmZvcm1hbmNlX3BsYXRmb3JtX2xpbWl0OwpAQCAtODQwLDcgKzg1OSw2IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gTlVMTDsKIAogCkBAIC04NTksOSArODc3LDYgQEAKIAogCWFjcGlfcHJvY2Vzc29yX3Bvd2VyX2V4aXQocHIsIGRldmljZSk7CiAKLQlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihwci0+aGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCi0JCQkJCSAgICBhY3BpX3Byb2Nlc3Nvcl9ub3RpZnkpOwotCiAJc3lzZnNfcmVtb3ZlX2xpbmsoJmRldmljZS0+ZGV2LmtvYmosICJzeXNkZXYiKTsKIAogCWFjcGlfcHJvY2Vzc29yX3JlbW92ZV9mcyhkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwppbmRleCA3YmMyMmE0Li40ZTZlNzU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYwpAQCAtNjQsNyArNjQsNiBAQAogI2RlZmluZSBfQ09NUE9ORU5UICAgICAgICAgICAgICBBQ1BJX1BST0NFU1NPUl9DT01QT05FTlQKIEFDUElfTU9EVUxFX05BTUUoInByb2Nlc3Nvcl9pZGxlIik7CiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0ZJTEVfUE9XRVIJInBvd2VyIgotI2RlZmluZSBVU19UT19QTV9USU1FUl9USUNLUyh0KQkJKCh0ICogKFBNX1RJTUVSX0ZSRVFVRU5DWS8xMDAwKSkgLyAxMDAwKQogI2RlZmluZSBQTV9USU1FUl9USUNLX05TCQkoMTAwMDAwMDAwMFVMTC9QTV9USU1FUl9GUkVRVUVOQ1kpCiAjZGVmaW5lIEMyX09WRVJIRUFECQkJMQkvKiAxdXMgKi8KICNkZWZpbmUgQzNfT1ZFUkhFQUQJCQkxCS8qIDF1cyAqLwpAQCAtNzgsNiArNzcsMTAgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGF0ZW5jeV9mYWN0b3IgX19yZWFkX21vc3RseSA9IDI7CiBtb2R1bGVfcGFyYW0obGF0ZW5jeV9mYWN0b3IsIHVpbnQsIDA2NDQpOwogCitzdGF0aWMgczY0IHVzX3RvX3BtX3RpbWVyX3RpY2tzKHM2NCB0KQoreworCXJldHVybiBkaXY2NF91NjQodCAqIFBNX1RJTUVSX0ZSRVFVRU5DWSwgMTAwMDAwMCk7Cit9CiAvKgogICogSUJNIFRoaW5rUGFkIFI0MGUgY3Jhc2hlcyBteXN0ZXJpb3VzbHkgd2hlbiBnb2luZyBpbnRvIEMyIG9yIEMzLgogICogRm9yIG5vdyBkaXNhYmxlIHRoaXMuIFByb2JhYmx5IGEgYnVnIHNvbWV3aGVyZSBlbHNlLgpAQCAtMTAxLDU3ICsxMDQsNiBAQAogLyogQWN0dWFsbHkgdGhpcyBzaG91bGRuJ3QgYmUgX19jcHVpbml0ZGF0YSwgd291bGQgYmUgYmV0dGVyIHRvIGZpeCB0aGUKICAgIGNhbGxlcnMgdG8gb25seSBydW4gb25jZSAtQUsgKi8KIHN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2NwdWluaXRkYXRhIHByb2Nlc3Nvcl9wb3dlcl9kbWlfdGFibGVbXSA9IHsKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNzBXVyIpfSwgKHZvaWQgKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjBXVyIpfSwgKHZvaWQgKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNDNXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNDVXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNDdXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNTBXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNTJXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNTVXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNTZXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNTlXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjBXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjFXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjJXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjRXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjVXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiSUJNIFRoaW5rUGFkIFI0MGUiLCB7Ci0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJJQk0iKSwKLQkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCIxU0VUNjhXVyIpIH0sICh2b2lkKikxfSwKLQl7IHNldF9tYXhfY3N0YXRlLCAiTWVkaW9uIDQxNzAwIiwgewotCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwiUGhvZW5peCBUZWNobm9sb2dpZXMgTFREIiksCi0JICBETUlfTUFUQ0goRE1JX0JJT1NfVkVSU0lPTiwiUjAxLUExSiIpfSwgKHZvaWQgKikxfSwKIAl7IHNldF9tYXhfY3N0YXRlLCAiQ2xldm8gNTYwMEQiLCB7CiAJICBETUlfTUFUQ0goRE1JX0JJT1NfVkVORE9SLCJQaG9lbml4IFRlY2hub2xvZ2llcyBMVEQiKSwKIAkgIERNSV9NQVRDSChETUlfQklPU19WRVJTSU9OLCJTSEU4NDVNMC44NkMuMDAxMy5ELjAzMDIxMzEzMDciKX0sCkBAIC0xNTksMjUgKzExMSw2IEBACiAJe30sCiB9OwogCi1zdGF0aWMgaW5saW5lIHUzMiB0aWNrc19lbGFwc2VkKHUzMiB0MSwgdTMyIHQyKQotewotCWlmICh0MiA+PSB0MSkKLQkJcmV0dXJuICh0MiAtIHQxKTsKLQllbHNlIGlmICghKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfMzJCSVRfVElNRVIpKQotCQlyZXR1cm4gKCgoMHgwMEZGRkZGRiAtIHQxKSArIHQyKSAmIDB4MDBGRkZGRkYpOwotCWVsc2UKLQkJcmV0dXJuICgoMHhGRkZGRkZGRiAtIHQxKSArIHQyKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgdGlja3NfZWxhcHNlZF9pbl91cyh1MzIgdDEsIHUzMiB0MikKLXsKLQlpZiAodDIgPj0gdDEpCi0JCXJldHVybiBQTV9USU1FUl9USUNLU19UT19VUyh0MiAtIHQxKTsKLQllbHNlIGlmICghKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfMzJCSVRfVElNRVIpKQotCQlyZXR1cm4gUE1fVElNRVJfVElDS1NfVE9fVVMoKCgweDAwRkZGRkZGIC0gdDEpICsgdDIpICYgMHgwMEZGRkZGRik7Ci0JZWxzZQotCQlyZXR1cm4gUE1fVElNRVJfVElDS1NfVE9fVVMoKDB4RkZGRkZGRkYgLSB0MSkgKyB0Mik7Ci19CiAKIC8qCiAgKiBDYWxsZXJzIHNob3VsZCBkaXNhYmxlIGludGVycnVwdHMgYmVmb3JlIHRoZSBjYWxsIGFuZCBlbmFibGUKQEAgLTYzMCw3ICs1NjMsNyBAQAogCSAqIEluIGVpdGhlciBjYXNlLCB0aGUgcHJvcGVyIHdheSB0bwogCSAqIGhhbmRsZSBCTV9STEQgaXMgdG8gc2V0IGl0IGFuZCBsZWF2ZSBpdCBzZXQuCiAJICovCi0JYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9STEQsIDEpOworCWFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0JVU19NQVNURVJfUkxELCAxKTsKIAogCXJldHVybjsKIH0KQEAgLTgwMCw5ICs3MzMsOSBAQAogewogCXUzMiBibV9zdGF0dXMgPSAwOwogCi0JYWNwaV9nZXRfcmVnaXN0ZXJfdW5sb2NrZWQoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9TVEFUVVMsICZibV9zdGF0dXMpOworCWFjcGlfcmVhZF9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9TVEFUVVMsICZibV9zdGF0dXMpOwogCWlmIChibV9zdGF0dXMpCi0JCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0JVU19NQVNURVJfU1RBVFVTLCAxKTsKKwkJYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9TVEFUVVMsIDEpOwogCS8qCiAJICogUElJWDQgRXJyYXR1bSAjMTg6IE5vdGUgdGhhdCBCTV9TVFMgZG9lc24ndCBhbHdheXMgcmVmbGVjdAogCSAqIHRoZSB0cnVlIHN0YXRlIG9mIGJ1cyBtYXN0ZXJpbmcgYWN0aXZpdHk7IGZvcmNpbmcgdXMgdG8KQEAgLTg1Myw3ICs3ODYsOCBAQAogc3RhdGljIGludCBhY3BpX2lkbGVfZW50ZXJfYzEoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqc3RhdGUpCiB7Ci0JdTMyIHQxLCB0MjsKKwlrdGltZV90ICBrdDEsIGt0MjsKKwlzNjQgaWRsZV90aW1lOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCA9IGNwdWlkbGVfZ2V0X3N0YXRlZGF0YShzdGF0ZSk7CiAKQEAgLTg3MSwxNCArODA1LDE1IEBACiAJCXJldHVybiAwOwogCX0KIAotCXQxID0gaW5sKGFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrLmFkZHJlc3MpOworCWt0MSA9IGt0aW1lX2dldF9yZWFsKCk7CiAJYWNwaV9pZGxlX2RvX2VudHJ5KGN4KTsKLQl0MiA9IGlubChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzKTsKKwlrdDIgPSBrdGltZV9nZXRfcmVhbCgpOworCWlkbGVfdGltZSA9ICBrdGltZV90b191cyhrdGltZV9zdWIoa3QyLCBrdDEpKTsKIAogCWxvY2FsX2lycV9lbmFibGUoKTsKIAljeC0+dXNhZ2UrKzsKIAotCXJldHVybiB0aWNrc19lbGFwc2VkX2luX3VzKHQxLCB0Mik7CisJcmV0dXJuIGlkbGVfdGltZTsKIH0KIAogLyoqCkBAIC04OTEsOCArODI2LDkgQEAKIHsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByOwogCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3ggPSBjcHVpZGxlX2dldF9zdGF0ZWRhdGEoc3RhdGUpOwotCXUzMiB0MSwgdDI7Ci0JaW50IHNsZWVwX3RpY2tzID0gMDsKKwlrdGltZV90ICBrdDEsIGt0MjsKKwlzNjQgaWRsZV90aW1lOworCXM2NCBzbGVlcF90aWNrcyA9IDA7CiAKIAlwciA9IF9fZ2V0X2NwdV92YXIocHJvY2Vzc29ycyk7CiAKQEAgLTkyNSwxOCArODYxLDE5IEBACiAJaWYgKGN4LT50eXBlID09IEFDUElfU1RBVEVfQzMpCiAJCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7CiAKLQl0MSA9IGlubChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzKTsKKwlrdDEgPSBrdGltZV9nZXRfcmVhbCgpOwogCS8qIFRlbGwgdGhlIHNjaGVkdWxlciB0aGF0IHdlIGFyZSBnb2luZyBkZWVwLWlkbGU6ICovCiAJc2NoZWRfY2xvY2tfaWRsZV9zbGVlcF9ldmVudCgpOwogCWFjcGlfaWRsZV9kb19lbnRyeShjeCk7Ci0JdDIgPSBpbmwoYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2suYWRkcmVzcyk7CisJa3QyID0ga3RpbWVfZ2V0X3JlYWwoKTsKKwlpZGxlX3RpbWUgPSAga3RpbWVfdG9fdXMoa3RpbWVfc3ViKGt0Miwga3QxKSk7CiAKICNpZiBkZWZpbmVkIChDT05GSUdfR0VORVJJQ19USU1FKSAmJiBkZWZpbmVkIChDT05GSUdfWDg2KQogCS8qIFRTQyBjb3VsZCBoYWx0IGluIGlkbGUsIHNvIG5vdGlmeSB1c2VycyAqLwogCWlmICh0c2NfaGFsdHNfaW5fYyhjeC0+dHlwZSkpCiAJCW1hcmtfdHNjX3Vuc3RhYmxlKCJUU0MgaGFsdHMgaW4gaWRsZSIpOzsKICNlbmRpZgotCXNsZWVwX3RpY2tzID0gdGlja3NfZWxhcHNlZCh0MSwgdDIpOworCXNsZWVwX3RpY2tzID0gdXNfdG9fcG1fdGltZXJfdGlja3MoaWRsZV90aW1lKTsKIAogCS8qIFRlbGwgdGhlIHNjaGVkdWxlciBob3cgbXVjaCB3ZSBpZGxlZDogKi8KIAlzY2hlZF9jbG9ja19pZGxlX3dha2V1cF9ldmVudChzbGVlcF90aWNrcypQTV9USU1FUl9USUNLX05TKTsKQEAgLTk0OCw3ICs4ODUsNyBAQAogCiAJYWNwaV9zdGF0ZV90aW1lcl9icm9hZGNhc3QocHIsIGN4LCAwKTsKIAljeC0+dGltZSArPSBzbGVlcF90aWNrczsKLQlyZXR1cm4gdGlja3NfZWxhcHNlZF9pbl91cyh0MSwgdDIpOworCXJldHVybiBpZGxlX3RpbWU7CiB9CiAKIHN0YXRpYyBpbnQgYzNfY3B1X2NvdW50OwpAQCAtOTY2LDggKzkwMywxMCBAQAogewogCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCA9IGNwdWlkbGVfZ2V0X3N0YXRlZGF0YShzdGF0ZSk7Ci0JdTMyIHQxLCB0MjsKLQlpbnQgc2xlZXBfdGlja3MgPSAwOworCWt0aW1lX3QgIGt0MSwga3QyOworCXM2NCBpZGxlX3RpbWU7CisJczY0IHNsZWVwX3RpY2tzID0gMDsKKwogCiAJcHIgPSBfX2dldF9jcHVfdmFyKHByb2Nlc3NvcnMpOwogCkBAIC0xMDI4LDIwICs5NjcsMjEgQEAKIAkJYzNfY3B1X2NvdW50Kys7CiAJCS8qIERpc2FibGUgYnVzIG1hc3RlciBhcmJpdHJhdGlvbiB3aGVuIGFsbCBDUFVzIGFyZSBpbiBDMyAqLwogCQlpZiAoYzNfY3B1X2NvdW50ID09IG51bV9vbmxpbmVfY3B1cygpKQotCQkJYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQVJCX0RJU0FCTEUsIDEpOworCQkJYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQVJCX0RJU0FCTEUsIDEpOwogCQlzcGluX3VubG9jaygmYzNfbG9jayk7CiAJfSBlbHNlIGlmICghcHItPmZsYWdzLmJtX2NoZWNrKSB7CiAJCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7CiAJfQogCi0JdDEgPSBpbmwoYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2suYWRkcmVzcyk7CisJa3QxID0ga3RpbWVfZ2V0X3JlYWwoKTsKIAlhY3BpX2lkbGVfZG9fZW50cnkoY3gpOwotCXQyID0gaW5sKGFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrLmFkZHJlc3MpOworCWt0MiA9IGt0aW1lX2dldF9yZWFsKCk7CisJaWRsZV90aW1lID0gIGt0aW1lX3RvX3VzKGt0aW1lX3N1YihrdDIsIGt0MSkpOwogCiAJLyogUmUtZW5hYmxlIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gKi8KIAlpZiAocHItPmZsYWdzLmJtX2NoZWNrICYmIHByLT5mbGFncy5ibV9jb250cm9sKSB7CiAJCXNwaW5fbG9jaygmYzNfbG9jayk7Ci0JCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAwKTsKKwkJYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQVJCX0RJU0FCTEUsIDApOwogCQljM19jcHVfY291bnQtLTsKIAkJc3Bpbl91bmxvY2soJmMzX2xvY2spOwogCX0KQEAgLTEwNTEsNyArOTkxLDcgQEAKIAlpZiAodHNjX2hhbHRzX2luX2MoQUNQSV9TVEFURV9DMykpCiAJCW1hcmtfdHNjX3Vuc3RhYmxlKCJUU0MgaGFsdHMgaW4gaWRsZSIpOwogI2VuZGlmCi0Jc2xlZXBfdGlja3MgPSB0aWNrc19lbGFwc2VkKHQxLCB0Mik7CisJc2xlZXBfdGlja3MgPSB1c190b19wbV90aW1lcl90aWNrcyhpZGxlX3RpbWUpOwogCS8qIFRlbGwgdGhlIHNjaGVkdWxlciBob3cgbXVjaCB3ZSBpZGxlZDogKi8KIAlzY2hlZF9jbG9ja19pZGxlX3dha2V1cF9ldmVudChzbGVlcF90aWNrcypQTV9USU1FUl9USUNLX05TKTsKIApAQCAtMTA2Miw3ICsxMDAyLDcgQEAKIAogCWFjcGlfc3RhdGVfdGltZXJfYnJvYWRjYXN0KHByLCBjeCwgMCk7CiAJY3gtPnRpbWUgKz0gc2xlZXBfdGlja3M7Ci0JcmV0dXJuIHRpY2tzX2VsYXBzZWRfaW5fdXModDEsIHQyKTsKKwlyZXR1cm4gaWRsZV90aW1lOwogfQogCiBzdHJ1Y3QgY3B1aWRsZV9kcml2ZXIgYWNwaV9pZGxlX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKaW5kZXggNjhmZDNkMi4uY2FmYjQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMKQEAgLTQ3OSw2ICs0NzksMTMgQEAKIAkJZ290byBlbmQ7CiAJfQogCisJaWYgKHBkb21haW4tPmNvb3JkX3R5cGUgIT0gRE9NQUlOX0NPT1JEX1RZUEVfU1dfQUxMICYmCisJICAgIHBkb21haW4tPmNvb3JkX3R5cGUgIT0gRE9NQUlOX0NPT1JEX1RZUEVfU1dfQU5ZICYmCisJICAgIHBkb21haW4tPmNvb3JkX3R5cGUgIT0gRE9NQUlOX0NPT1JEX1RZUEVfSFdfQUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIkludmFsaWQgX1BTRDpjb29yZF90eXBlXG4iKTsKKwkJcmVzdWx0ID0gLUVGQVVMVDsKKwkJZ290byBlbmQ7CisJfQogZW5kOgogCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKIAlyZXR1cm4gcmVzdWx0OwpAQCAtNTAxLDkgKzUwOCwxMCBAQAogCiAJbXV0ZXhfbG9jaygmcGVyZm9ybWFuY2VfbXV0ZXgpOwogCi0JcmV0dmFsID0gMDsKLQotCS8qIENhbGwgX1BTRCBmb3IgYWxsIENQVXMgKi8KKwkvKgorCSAqIENoZWNrIGlmIGFub3RoZXIgZHJpdmVyIGhhcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIGFuZCBhYm9ydCBiZWZvcmUKKwkgKiBjaGFuZ2luZyBwci0+cGVyZm9ybWFuY2UgaWYgaXQgaGFzLiBDaGVjayBpbnB1dCBkYXRhIGFzIHdlbGwuCisJICovCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJcHIgPSBwZXJfY3B1KHByb2Nlc3NvcnMsIGkpOwogCQlpZiAoIXByKSB7CkBAIC01MTMsMTMgKzUyMSwyMCBAQAogCiAJCWlmIChwci0+cGVyZm9ybWFuY2UpIHsKIAkJCXJldHZhbCA9IC1FQlVTWTsKLQkJCWNvbnRpbnVlOworCQkJZ290byBlcnJfb3V0OwogCQl9CiAKIAkJaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyX2NwdV9wdHIocGVyZm9ybWFuY2UsIGkpKSB7CiAJCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJY29udGludWU7CisJCQlnb3RvIGVycl9vdXQ7CiAJCX0KKwl9CisKKwkvKiBDYWxsIF9QU0QgZm9yIGFsbCBDUFVzICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJcHIgPSBwZXJfY3B1KHByb2Nlc3NvcnMsIGkpOworCQlpZiAoIXByKQorCQkJY29udGludWU7CiAKIAkJcHItPnBlcmZvcm1hbmNlID0gcGVyX2NwdV9wdHIocGVyZm9ybWFuY2UsIGkpOwogCQljcHVtYXNrX3NldF9jcHUoaSwgcHItPnBlcmZvcm1hbmNlLT5zaGFyZWRfY3B1X21hcCk7CkBAIC01MzUsMjYgKzU1MCw2IEBACiAJICogTm93IHRoYXQgd2UgaGF2ZSBfUFNEIGRhdGEgZnJvbSBhbGwgQ1BVcywgbGV0cyBzZXR1cCBQLXN0YXRlIAogCSAqIGRvbWFpbiBpbmZvLgogCSAqLwotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7Ci0JCXByID0gcGVyX2NwdShwcm9jZXNzb3JzLCBpKTsKLQkJaWYgKCFwcikKLQkJCWNvbnRpbnVlOwotCi0JCS8qIEJhc2ljIHZhbGlkaXR5IGNoZWNrIGZvciBkb21haW4gaW5mbyAqLwotCQlwZG9tYWluID0gJihwci0+cGVyZm9ybWFuY2UtPmRvbWFpbl9pbmZvKTsKLQkJaWYgKChwZG9tYWluLT5yZXZpc2lvbiAhPSBBQ1BJX1BTRF9SRVYwX1JFVklTSU9OKSB8fAotCQkgICAgKHBkb21haW4tPm51bV9lbnRyaWVzICE9IEFDUElfUFNEX1JFVjBfRU5UUklFUykpIHsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycl9yZXQ7Ci0JCX0KLQkJaWYgKHBkb21haW4tPmNvb3JkX3R5cGUgIT0gRE9NQUlOX0NPT1JEX1RZUEVfU1dfQUxMICYmCi0JCSAgICBwZG9tYWluLT5jb29yZF90eXBlICE9IERPTUFJTl9DT09SRF9UWVBFX1NXX0FOWSAmJgotCQkgICAgcGRvbWFpbi0+Y29vcmRfdHlwZSAhPSBET01BSU5fQ09PUkRfVFlQRV9IV19BTEwpIHsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycl9yZXQ7Ci0JCX0KLQl9Ci0KIAljcHVtYXNrX2NsZWFyKGNvdmVyZWRfY3B1cyk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJcHIgPSBwZXJfY3B1KHByb2Nlc3NvcnMsIGkpOwpAQCAtNjQzLDYgKzYzOCw3IEBACiAJCXByLT5wZXJmb3JtYW5jZSA9IE5VTEw7IC8qIFdpbGwgYmUgc2V0IGZvciByZWFsIGluIHJlZ2lzdGVyICovCiAJfQogCitlcnJfb3V0OgogCW11dGV4X3VubG9jaygmcGVyZm9ybWFuY2VfbXV0ZXgpOwogCWZyZWVfY3B1bWFza192YXIoY292ZXJlZF9jcHVzKTsKIAlyZXR1cm4gcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl90aGVybWFsLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYwppbmRleCBiMWViMzc2Li4zOTgzOGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3RoZXJtYWwuYwpAQCAtMzczLDcgKzM3Myw4IEBACiAJcmV0dXJuIG1heF9zdGF0ZTsKIH0KIHN0YXRpYyBpbnQKLXByb2Nlc3Nvcl9nZXRfbWF4X3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitwcm9jZXNzb3JfZ2V0X21heF9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwKKwkJCXVuc2lnbmVkIGxvbmcgKnN0YXRlKQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY2Rldi0+ZGV2ZGF0YTsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwpAQCAtMzgxLDI4ICszODIsMjkgQEAKIAlpZiAoIWRldmljZSB8fCAhcHIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFjcGlfcHJvY2Vzc29yX21heF9zdGF0ZShwcikpOworCSpzdGF0ZSA9IGFjcGlfcHJvY2Vzc29yX21heF9zdGF0ZShwcik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLXByb2Nlc3Nvcl9nZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitwcm9jZXNzb3JfZ2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwKKwkJCXVuc2lnbmVkIGxvbmcgKmN1cl9zdGF0ZSkKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSA9IGNkZXYtPmRldmRhdGE7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQlpbnQgY3VyX3N0YXRlOwogCiAJaWYgKCFkZXZpY2UgfHwgIXByKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWN1cl9zdGF0ZSA9IGNwdWZyZXFfZ2V0X2N1cl9zdGF0ZShwci0+aWQpOworCSpjdXJfc3RhdGUgPSBjcHVmcmVxX2dldF9jdXJfc3RhdGUocHItPmlkKTsKIAlpZiAocHItPmZsYWdzLnRocm90dGxpbmcpCi0JCWN1cl9zdGF0ZSArPSBwci0+dGhyb3R0bGluZy5zdGF0ZTsKLQotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjdXJfc3RhdGUpOworCQkqY3VyX3N0YXRlICs9IHByLT50aHJvdHRsaW5nLnN0YXRlOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1wcm9jZXNzb3Jfc2V0X2N1cl9zdGF0ZShzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwgdW5zaWduZWQgaW50IHN0YXRlKQorcHJvY2Vzc29yX3NldF9jdXJfc3RhdGUoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsCisJCQl1bnNpZ25lZCBsb25nIHN0YXRlKQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY2Rldi0+ZGV2ZGF0YTsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwpAQCAtNTA3LDcgKzUwOSw3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX2xpbWl0X2ZvcHMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX2xpbWl0X2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBhY3BpX3Byb2Nlc3Nvcl9saW1pdF9vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3Rocm90dGxpbmcuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCmluZGV4IGQyNzgzODEuLmQwZDFmNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfdGhyb3R0bGluZy5jCkBAIC03ODMsMTEgKzc4Myw5IEBACiAJCSAgICAoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3R4X3RzcyAqKSYocHItPnRocm90dGxpbmcuCiAJCQkJCQkgICAgICBzdGF0ZXNfdHNzW2ldKTsKIAkJaWYgKHR4LT5jb250cm9sID09IHZhbHVlKQotCQkJYnJlYWs7CisJCQlyZXR1cm4gaTsKIAl9Ci0JaWYgKGkgPiBwci0+dGhyb3R0bGluZy5zdGF0ZV9jb3VudCkKLQkJaSA9IC0xOwotCXJldHVybiBpOworCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBhY3BpX2dldF90aHJvdHRsaW5nX3ZhbHVlKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCkBAIC0xMjkxLDcgKzEyODksNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3Byb2Nlc3Nvcl90aHJvdHRsaW5nX2ZvcHMgPSB7Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Nicy5jIGIvZHJpdmVycy9hY3BpL3Nicy5jCmluZGV4IDU5YWZkNTIuLjRiMjE0YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zYnMuYworKysgYi9kcml2ZXJzL2FjcGkvc2JzLmMKQEAgLTEwMiw4ICsxMDIsOCBAQAogCXUxNiBjeWNsZV9jb3VudDsKIAl1MTYgdGVtcF9ub3c7CiAJdTE2IHZvbHRhZ2Vfbm93OwotCXMxNiBjdXJyZW50X25vdzsKLQlzMTYgY3VycmVudF9hdmc7CisJczE2IHJhdGVfbm93OworCXMxNiByYXRlX2F2ZzsKIAl1MTYgY2FwYWNpdHlfbm93OwogCXUxNiBzdGF0ZV9vZl9jaGFyZ2U7CiAJdTE2IHN0YXRlOwpAQCAtMjAyLDkgKzIwMiw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCXN3aXRjaCAocHNwKSB7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVM6Ci0JCWlmIChiYXR0ZXJ5LT5jdXJyZW50X25vdyA8IDApCisJCWlmIChiYXR0ZXJ5LT5yYXRlX25vdyA8IDApCiAJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfRElTQ0hBUkdJTkc7Ci0JCWVsc2UgaWYgKGJhdHRlcnktPmN1cnJlbnRfbm93ID4gMCkKKwkJZWxzZSBpZiAoYmF0dGVyeS0+cmF0ZV9ub3cgPiAwKQogCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOwogCQllbHNlCiAJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfRlVMTDsKQEAgLTIyNCwxMSArMjI0LDEzIEBACiAJCQkJYWNwaV9iYXR0ZXJ5X3ZzY2FsZShiYXR0ZXJ5KSAqIDEwMDA7CiAJCWJyZWFrOwogCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1c6Ci0JCXZhbC0+aW50dmFsID0gYWJzKGJhdHRlcnktPmN1cnJlbnRfbm93KSAqCisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9OT1c6CisJCXZhbC0+aW50dmFsID0gYWJzKGJhdHRlcnktPnJhdGVfbm93KSAqCiAJCQkJYWNwaV9iYXR0ZXJ5X2lwc2NhbGUoYmF0dGVyeSkgKiAxMDAwOwogCQlicmVhazsKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfQVZHOgotCQl2YWwtPmludHZhbCA9IGFicyhiYXR0ZXJ5LT5jdXJyZW50X2F2ZykgKgorCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfUE9XRVJfQVZHOgorCQl2YWwtPmludHZhbCA9IGFicyhiYXR0ZXJ5LT5yYXRlX2F2ZykgKgogCQkJCWFjcGlfYmF0dGVyeV9pcHNjYWxlKGJhdHRlcnkpICogMTAwMDsKIAkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWToKQEAgLTI5Myw2ICsyOTUsOCBAQAogCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfQVZHLAorCVBPV0VSX1NVUFBMWV9QUk9QX1BPV0VSX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9BVkcsCiAJUE9XRVJfU1VQUExZX1BST1BfQ0FQQUNJVFksCiAJUE9XRVJfU1VQUExZX1BST1BfRU5FUkdZX0ZVTExfREVTSUdOLAogCVBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9GVUxMLApAQCAtMzAxLDYgKzMwNSw3IEBACiAJUE9XRVJfU1VQUExZX1BST1BfTU9ERUxfTkFNRSwKIAlQT1dFUl9TVVBQTFlfUFJPUF9NQU5VRkFDVFVSRVIsCiB9OworCiAjZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMzMCw4ICszMzUsOCBAQAogc3RhdGljIHN0cnVjdCBhY3BpX2JhdHRlcnlfcmVhZGVyIHN0YXRlX3JlYWRlcnNbXSA9IHsKIAl7MHgwOCwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCB0ZW1wX25vdyl9LAogCXsweDA5LCBTTUJVU19SRUFEX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIHZvbHRhZ2Vfbm93KX0sCi0JezB4MGEsIFNNQlVTX1JFQURfV09SRCwgb2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgY3VycmVudF9ub3cpfSwKLQl7MHgwYiwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBjdXJyZW50X2F2Zyl9LAorCXsweDBhLCBTTUJVU19SRUFEX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIHJhdGVfbm93KX0sCisJezB4MGIsIFNNQlVTX1JFQURfV09SRCwgb2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgcmF0ZV9hdmcpfSwKIAl7MHgwZiwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBjYXBhY2l0eV9ub3cpfSwKIAl7MHgwZSwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBzdGF0ZV9vZl9jaGFyZ2UpfSwKIAl7MHgxNiwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBzdGF0ZSl9LApAQCAtNDc5LDkgKzQ4NCw5IEBACiBhY3BpX3Nic19hZGRfZnMoc3RydWN0IHByb2NfZGlyX2VudHJ5ICoqZGlyLAogCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudF9kaXIsCiAJCWNoYXIgKmRpcl9uYW1lLAotCQlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICppbmZvX2ZvcHMsCi0JCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKnN0YXRlX2ZvcHMsCi0JCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmFsYXJtX2ZvcHMsIHZvaWQgKmRhdGEpCisJCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmluZm9fZm9wcywKKwkJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqc3RhdGVfZm9wcywKKwkJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqYWxhcm1fZm9wcywgdm9pZCAqZGF0YSkKIHsKIAlpZiAoISpkaXIpIHsKIAkJKmRpciA9IHByb2NfbWtkaXIoZGlyX25hbWUsIHBhcmVudF9kaXIpOwpAQCAtNTg4LDkgKzU5Myw5IEBACiAJc2VxX3ByaW50ZihzZXEsICJjYXBhY2l0eSBzdGF0ZTogICAgICAgICAgJXNcbiIsCiAJCSAgIChiYXR0ZXJ5LT5zdGF0ZSAmIDB4MDAxMCkgPyAiY3JpdGljYWwiIDogIm9rIik7CiAJc2VxX3ByaW50ZihzZXEsICJjaGFyZ2luZyBzdGF0ZTogICAgICAgICAgJXNcbiIsCi0JCSAgIChiYXR0ZXJ5LT5jdXJyZW50X25vdyA8IDApID8gImRpc2NoYXJnaW5nIiA6Ci0JCSAgICgoYmF0dGVyeS0+Y3VycmVudF9ub3cgPiAwKSA/ICJjaGFyZ2luZyIgOiAiY2hhcmdlZCIpKTsKLQlyYXRlID0gYWJzKGJhdHRlcnktPmN1cnJlbnRfbm93KSAqIGFjcGlfYmF0dGVyeV9pcHNjYWxlKGJhdHRlcnkpOworCQkgICAoYmF0dGVyeS0+cmF0ZV9ub3cgPCAwKSA/ICJkaXNjaGFyZ2luZyIgOgorCQkgICAoKGJhdHRlcnktPnJhdGVfbm93ID4gMCkgPyAiY2hhcmdpbmciIDogImNoYXJnZWQiKSk7CisJcmF0ZSA9IGFicyhiYXR0ZXJ5LT5yYXRlX25vdykgKiBhY3BpX2JhdHRlcnlfaXBzY2FsZShiYXR0ZXJ5KTsKIAlyYXRlICo9IChhY3BpX2JhdHRlcnlfbW9kZShiYXR0ZXJ5KSk/KGJhdHRlcnktPnZvbHRhZ2Vfbm93ICoKIAkJCWFjcGlfYmF0dGVyeV92c2NhbGUoYmF0dGVyeSkvMTAwMCk6MTsKIAlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQgcmF0ZTogICAgICAgICAgICAlZCVzXG4iLCByYXRlLApAQCAtNjc2LDcgKzY4MSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGFjcGlfYmF0dGVyeV9yZWFkX2FsYXJtLCBQREUoaW5vZGUpLT5kYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9iYXR0ZXJ5X2luZm9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfYmF0dGVyeV9pbmZvX2ZvcHMgPSB7CiAJLm9wZW4gPSBhY3BpX2JhdHRlcnlfaW5mb19vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTY4NCw3ICs2ODksNyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9iYXR0ZXJ5X3N0YXRlX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX2JhdHRlcnlfc3RhdGVfZm9wcyA9IHsKIAkub3BlbiA9IGFjcGlfYmF0dGVyeV9zdGF0ZV9vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKQEAgLTY5Miw3ICs2OTcsNyBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9iYXR0ZXJ5X2FsYXJtX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX2JhdHRlcnlfYWxhcm1fZm9wcyA9IHsKIAkub3BlbiA9IGFjcGlfYmF0dGVyeV9hbGFybV9vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLndyaXRlID0gYWNwaV9iYXR0ZXJ5X3dyaXRlX2FsYXJtLApAQCAtNzI0LDcgKzcyOSw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGFjcGlfYWNfcmVhZF9zdGF0ZSwgUERFKGlub2RlKS0+ZGF0YSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfYWNfc3RhdGVfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfYWNfc3RhdGVfZm9wcyA9IHsKIAkub3BlbiA9IGFjcGlfYWNfc3RhdGVfb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2Nhbi5jIGIvZHJpdmVycy9hY3BpL3NjYW4uYwppbmRleCBjNTRkN2I2Li4yMGMyM2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2Nhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKQEAgLTExLDYgKzExLDggQEAKIAogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CiAKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfQlVTX0NPTVBPTkVOVAogQUNQSV9NT0RVTEVfTkFNRSgic2NhbiIpOwogI2RlZmluZSBTVFJVQ1RfVE9fSU5UKHMpCSgqKChpbnQqKSZzKSkKQEAgLTM1Nyw2ICszNTksNjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYWNwaV9kZXZpY2Vfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gZGF0YTsKKworCWRldmljZS0+ZHJpdmVyLT5vcHMubm90aWZ5KGRldmljZSwgZXZlbnQpOworfQorCitzdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBkYXRhOworCisJYWNwaV9kZXZpY2Vfbm90aWZ5KGRldmljZS0+aGFuZGxlLCBBQ1BJX0ZJWEVEX0hBUkRXQVJFX0VWRU5ULCBkZXZpY2UpOworCXJldHVybiBBRV9PSzsKK30KKworc3RhdGljIGludCBhY3BpX2RldmljZV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwljaGFyICpoaWQ7CisKKwloaWQgPSBhY3BpX2RldmljZV9oaWQoZGV2aWNlKTsKKwlpZiAoIXN0cmNtcChoaWQsIEFDUElfQlVUVE9OX0hJRF9QT1dFUkYpKQorCQlzdGF0dXMgPQorCQkgICAgYWNwaV9pbnN0YWxsX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9QT1dFUl9CVVRUT04sCisJCQkJCQkgICAgIGFjcGlfZGV2aWNlX25vdGlmeV9maXhlZCwKKwkJCQkJCSAgICAgZGV2aWNlKTsKKwllbHNlIGlmICghc3RyY21wKGhpZCwgQUNQSV9CVVRUT05fSElEX1NMRUVQRikpCisJCXN0YXR1cyA9CisJCSAgICBhY3BpX2luc3RhbGxfZml4ZWRfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1NMRUVQX0JVVFRPTiwKKwkJCQkJCSAgICAgYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkLAorCQkJCQkJICAgICBkZXZpY2UpOworCWVsc2UKKwkJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAorCQkJCQkJICAgICBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJCQkgICAgIGFjcGlfZGV2aWNlX25vdGlmeSwKKwkJCQkJCSAgICAgZGV2aWNlKTsKKworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpZiAoIXN0cmNtcChhY3BpX2RldmljZV9oaWQoZGV2aWNlKSwgQUNQSV9CVVRUT05fSElEX1BPV0VSRikpCisJCWFjcGlfcmVtb3ZlX2ZpeGVkX2V2ZW50X2hhbmRsZXIoQUNQSV9FVkVOVF9QT1dFUl9CVVRUT04sCisJCQkJCQlhY3BpX2RldmljZV9ub3RpZnlfZml4ZWQpOworCWVsc2UgaWYgKCFzdHJjbXAoYWNwaV9kZXZpY2VfaGlkKGRldmljZSksIEFDUElfQlVUVE9OX0hJRF9TTEVFUEYpKQorCQlhY3BpX3JlbW92ZV9maXhlZF9ldmVudF9oYW5kbGVyKEFDUElfRVZFTlRfU0xFRVBfQlVUVE9OLAorCQkJCQkJYWNwaV9kZXZpY2Vfbm90aWZ5X2ZpeGVkKTsKKwllbHNlCisJCWFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLCBBQ1BJX0RFVklDRV9OT1RJRlksCisJCQkJCSAgIGFjcGlfZGV2aWNlX25vdGlmeSk7Cit9CisKIHN0YXRpYyBpbnQgYWNwaV9idXNfZHJpdmVyX2luaXQoc3RydWN0IGFjcGlfZGV2aWNlICosIHN0cnVjdCBhY3BpX2RyaXZlciAqKTsKIHN0YXRpYyBpbnQgYWNwaV9zdGFydF9zaW5nbGVfb2JqZWN0KHN0cnVjdCBhY3BpX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgYWNwaV9kZXZpY2VfcHJvYmUoc3RydWN0IGRldmljZSAqIGRldikKQEAgLTM2OSw2ICs0MjYsMjAgQEAKIAlpZiAoIXJldCkgewogCQlpZiAoYWNwaV9kZXYtPmJ1c19vcHMuYWNwaV9vcF9zdGFydCkKIAkJCWFjcGlfc3RhcnRfc2luZ2xlX29iamVjdChhY3BpX2Rldik7CisKKwkJaWYgKGFjcGlfZHJ2LT5vcHMubm90aWZ5KSB7CisJCQlyZXQgPSBhY3BpX2RldmljZV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGFjcGlfZGV2KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlpZiAoYWNwaV9kcnYtPm9wcy5zdG9wKQorCQkJCQlhY3BpX2Rydi0+b3BzLnN0b3AoYWNwaV9kZXYsCisJCQkJCQkgICBhY3BpX2Rldi0+cmVtb3ZhbF90eXBlKTsKKwkJCQlpZiAoYWNwaV9kcnYtPm9wcy5yZW1vdmUpCisJCQkJCWFjcGlfZHJ2LT5vcHMucmVtb3ZlKGFjcGlfZGV2LAorCQkJCQkJICAgICBhY3BpX2Rldi0+cmVtb3ZhbF90eXBlKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisKIAkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAogCQkJIkZvdW5kIGRyaXZlciBbJXNdIGZvciBkZXZpY2UgWyVzXVxuIiwKIAkJCWFjcGlfZHJ2LT5uYW1lLCBhY3BpX2Rldi0+cG5wLmJ1c19pZCkpOwpAQCAtMzgzLDYgKzQ1NCw4IEBACiAJc3RydWN0IGFjcGlfZHJpdmVyICphY3BpX2RydiA9IGFjcGlfZGV2LT5kcml2ZXI7CiAKIAlpZiAoYWNwaV9kcnYpIHsKKwkJaWYgKGFjcGlfZHJ2LT5vcHMubm90aWZ5KQorCQkJYWNwaV9kZXZpY2VfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGFjcGlfZGV2KTsKIAkJaWYgKGFjcGlfZHJ2LT5vcHMuc3RvcCkKIAkJCWFjcGlfZHJ2LT5vcHMuc3RvcChhY3BpX2RldiwgYWNwaV9kZXYtPnJlbW92YWxfdHlwZSk7CiAJCWlmIChhY3BpX2Rydi0+b3BzLnJlbW92ZSkKQEAgLTM5NSwyMiArNDY4LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfZGV2ID0gdG9fYWNwaV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgYWNwaV9kcml2ZXIgKmFjcGlfZHJ2ID0gYWNwaV9kZXYtPmRyaXZlcjsKLQotCWlmIChhY3BpX2RydiAmJiBhY3BpX2Rydi0+b3BzLnNodXRkb3duKQotCQlhY3BpX2Rydi0+b3BzLnNodXRkb3duKGFjcGlfZGV2KTsKLQotCXJldHVybiA7Ci19Ci0KIHN0cnVjdCBidXNfdHlwZSBhY3BpX2J1c190eXBlID0gewogCS5uYW1lCQk9ICJhY3BpIiwKIAkuc3VzcGVuZAk9IGFjcGlfZGV2aWNlX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBhY3BpX2RldmljZV9yZXN1bWUsCi0JLnNodXRkb3duCT0gYWNwaV9kZXZpY2Vfc2h1dGRvd24sCiAJLm1hdGNoCQk9IGFjcGlfYnVzX21hdGNoLAogCS5wcm9iZQkJPSBhY3BpX2RldmljZV9wcm9iZSwKIAkucmVtb3ZlCQk9IGFjcGlfZGV2aWNlX3JlbW92ZSwKQEAgLTE1MjQsMTYgKzE1ODUsMTEgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KLXN0YXRpYyBpbnQgX19pbml0IGFjcGlfc2Nhbl9pbml0KHZvaWQpCitpbnQgX19pbml0IGFjcGlfc2Nhbl9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdDsKIAlzdHJ1Y3QgYWNwaV9idXNfb3BzIG9wczsKIAotCi0JaWYgKGFjcGlfZGlzYWJsZWQpCi0JCXJldHVybiAwOwotCiAJbWVtc2V0KCZvcHMsIDAsIHNpemVvZihvcHMpKTsKIAlvcHMuYWNwaV9vcF9hZGQgPSAxOwogCW9wcy5hY3BpX29wX3N0YXJ0ID0gMTsKQEAgLTE1NjYsNSArMTYyMiwzIEBACiAgICAgICBEb25lOgogCXJldHVybiByZXN1bHQ7CiB9Ci0KLXN1YnN5c19pbml0Y2FsbChhY3BpX3NjYW5faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCmluZGV4IDAwNDU2ZmMuLjc3OWU0ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC5jCkBAIC0yMSw2ICsyMSw4IEBACiAKICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KKworI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAic2xlZXAuaCIKIAogdTggc2xlZXBfc3RhdGVzW0FDUElfU19TVEFURV9DT1VOVF07CkBAIC0yNDgsNyArMjUwLDcgQEAKIAogCS8qIElmIEFDUEkgaXMgbm90IGVuYWJsZWQgYnkgdGhlIEJJT1MsIHdlIG5lZWQgdG8gZW5hYmxlIGl0IGhlcmUuICovCiAJaWYgKHNldF9zY2lfZW5fb25fcmVzdW1lKQotCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19TQ0lfRU5BQkxFLCAxKTsKKwkJYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfU0NJX0VOQUJMRSwgMSk7CiAJZWxzZQogCQlhY3BpX2VuYWJsZSgpOwogCkBAIC0zOTQsNiArMzk2LDE1IEBACiAJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiU2F0ZWxsaXRlIEwzMDAiKSwKIAkJfSwKIAl9LAorCXsKKwkuY2FsbGJhY2sgPSBpbml0X29sZF9zdXNwZW5kX29yZGVyaW5nLAorCS5pZGVudCA9ICJQYW5hc29uaWMgQ0Y1MS0yTCIsCisJLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLAorCQkJCSJNYXRzdXNoaXRhIEVsZWN0cmljIEluZHVzdHJpYWwgQ28uLEx0ZC4iKSwKKwkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiQ0Y1MS0yTCIpLAorCQl9LAorCX0sCiAJe30sCiB9OwogI2VuZGlmIC8qIENPTkZJR19TVVNQRU5EICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc3lzdGVtLmMgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKaW5kZXggMzkxZDAzNS4uZGE1MWYwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jCisrKyBiL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYwpAQCAtMzMsMTAgKzMzLDYgQEAKIAogI2RlZmluZSBfQ09NUE9ORU5UCQlBQ1BJX1NZU1RFTV9DT01QT05FTlQKIEFDUElfTU9EVUxFX05BTUUoInN5c3RlbSIpOwotI2lmZGVmIE1PRFVMRV9QQVJBTV9QUkVGSVgKLSN1bmRlZiBNT0RVTEVfUEFSQU1fUFJFRklYCi0jZW5kaWYKLSNkZWZpbmUgTU9EVUxFX1BBUkFNX1BSRUZJWCAiYWNwaS4iCiAKICNkZWZpbmUgQUNQSV9TWVNURU1fQ0xBU1MJCSJzeXN0ZW0iCiAjZGVmaW5lIEFDUElfU1lTVEVNX0RFVklDRV9OQU1FCQkiU3lzdGVtIgpAQCAtNjIsNiArNTgsNyBAQAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBMSVNUX0hFQUQoYWNwaV90YWJsZV9hdHRyX2xpc3QpOwogc3RhdGljIHN0cnVjdCBrb2JqZWN0ICp0YWJsZXNfa29iajsKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqZHluYW1pY190YWJsZXNfa29iajsKIAogc3RydWN0IGFjcGlfdGFibGVfYXR0ciB7CiAJc3RydWN0IGJpbl9hdHRyaWJ1dGUgYXR0cjsKQEAgLTEyOCw2ICsxMjUsNDAgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9zeXNmc190YWJsZV9oYW5kbGVyKHUzMiBldmVudCwgdm9pZCAqdGFibGUsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGFjcGlfdGFibGVfYXR0ciAqdGFibGVfYXR0cjsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIEFDUElfVEFCTEVfRVZFTlRfTE9BRDoKKwkJdGFibGVfYXR0ciA9CisJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9hdHRyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdGFibGVfYXR0cikKKwkJCXJldHVybiBBRV9OT19NRU1PUlk7CisKKwkJYWNwaV90YWJsZV9hdHRyX2luaXQodGFibGVfYXR0ciwgdGFibGUpOworCQlpZiAoc3lzZnNfY3JlYXRlX2Jpbl9maWxlKGR5bmFtaWNfdGFibGVzX2tvYmosCisJCQkJCSZ0YWJsZV9hdHRyLT5hdHRyKSkgeworCQkJa2ZyZWUodGFibGVfYXR0cik7CisJCQlyZXR1cm4gQUVfRVJST1I7CisJCX0gZWxzZQorCQkJbGlzdF9hZGRfdGFpbCgmdGFibGVfYXR0ci0+bm9kZSwKKwkJCQkJJmFjcGlfdGFibGVfYXR0cl9saXN0KTsKKwkJYnJlYWs7CisJY2FzZSBBQ1BJX1RBQkxFX0VWRU5UX1VOTE9BRDoKKwkJLyoKKwkJICogd2UgZG8gbm90IG5lZWQgdG8gZG8gYW55dGhpbmcgcmlnaHQgbm93CisJCSAqIGJlY2F1c2UgdGhlIHRhYmxlIGlzIG5vdCBkZWxldGVkIGZyb20gdGhlCisJCSAqIGdsb2JhbCB0YWJsZSBsaXN0IHdoZW4gdW5sb2FkaW5nIGl0LgorCQkgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CisJfQorCXJldHVybiBBRV9PSzsKK30KKwogc3RhdGljIGludCBhY3BpX3N5c3RlbV9zeXNmc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGFjcGlfdGFibGVfYXR0ciAqdGFibGVfYXR0cjsKQEAgLTEzNyw3ICsxNjgsMTEgQEAKIAogCXRhYmxlc19rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgidGFibGVzIiwgYWNwaV9rb2JqKTsKIAlpZiAoIXRhYmxlc19rb2JqKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBlcnI7CisKKwlkeW5hbWljX3RhYmxlc19rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgiZHluYW1pYyIsIHRhYmxlc19rb2JqKTsKKwlpZiAoIWR5bmFtaWNfdGFibGVzX2tvYmopCisJCWdvdG8gZXJyX2R5bmFtaWNfdGFibGVzOwogCiAJZG8gewogCQlyZXN1bHQgPSBhY3BpX2dldF90YWJsZV9ieV9pbmRleCh0YWJsZV9pbmRleCwgJnRhYmxlX2hlYWRlcik7CkBAIC0xNjIsOCArMTk3LDE0IEBACiAJCX0KIAl9IHdoaWxlICghcmVzdWx0KTsKIAlrb2JqZWN0X3VldmVudCh0YWJsZXNfa29iaiwgS09CSl9BREQpOworCWtvYmplY3RfdWV2ZW50KGR5bmFtaWNfdGFibGVzX2tvYmosIEtPQkpfQUREKTsKKwlyZXN1bHQgPSBhY3BpX2luc3RhbGxfdGFibGVfaGFuZGxlcihhY3BpX3N5c2ZzX3RhYmxlX2hhbmRsZXIsIE5VTEwpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlc3VsdCA9PSBBRV9PSyA/IDAgOiAtRUlOVkFMOworZXJyX2R5bmFtaWNfdGFibGVzOgorCWtvYmplY3RfcHV0KHRhYmxlc19rb2JqKTsKK2VycjoKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogLyoKQEAgLTU3MSwxMiArNjEyLDkgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBhY3BpX3N5c3RlbV9pbml0KHZvaWQpCitpbnQgX19pbml0IGFjcGlfc3lzdGVtX2luaXQodm9pZCkKIHsKLQlpbnQgcmVzdWx0ID0gMDsKLQotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gMDsKKwlpbnQgcmVzdWx0OwogCiAJcmVzdWx0ID0gYWNwaV9zeXN0ZW1fcHJvY2ZzX2luaXQoKTsKIAlpZiAocmVzdWx0KQpAQCAtNTg2LDUgKzYyNCwzIEBACiAKIAlyZXR1cm4gcmVzdWx0OwogfQotCi1zdWJzeXNfaW5pdGNhbGwoYWNwaV9zeXN0ZW1faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzLmMgYi9kcml2ZXJzL2FjcGkvdGFibGVzLmMKaW5kZXggZmVjMWFlMy4uNjQ2ZDM5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RhYmxlcy5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMuYwpAQCAtNjIsNiArNjIsMTggQEAKIAkJfQogCQlicmVhazsKIAorCWNhc2UgQUNQSV9NQURUX1RZUEVfTE9DQUxfWDJBUElDOgorCQl7CisJCQlzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpYyAqcCA9CisJCQkgICAgKHN0cnVjdCBhY3BpX21hZHRfbG9jYWxfeDJhcGljICopaGVhZGVyOworCQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVgKKwkJCSAgICAgICAiWDJBUElDIChhcGljX2lkWzB4JTAyeF0gdWlkWzB4JTAyeF0gJXMpXG4iLAorCQkJICAgICAgIHAtPmxvY2FsX2FwaWNfaWQsIHAtPnVpZCwKKwkJCSAgICAgICAocC0+bGFwaWNfZmxhZ3MgJiBBQ1BJX01BRFRfRU5BQkxFRCkgPworCQkJICAgICAgICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCQl9CisJCWJyZWFrOworCiAJY2FzZSBBQ1BJX01BRFRfVFlQRV9JT19BUElDOgogCQl7CiAJCQlzdHJ1Y3QgYWNwaV9tYWR0X2lvX2FwaWMgKnAgPQpAQCAtMTE2LDYgKzEyOCwyNCBAQAogCQl9CiAJCWJyZWFrOwogCisJY2FzZSBBQ1BJX01BRFRfVFlQRV9MT0NBTF9YMkFQSUNfTk1JOgorCQl7CisJCQl1MTYgcG9sYXJpdHksIHRyaWdnZXI7CisJCQlzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgKnAgPQorCQkJICAgIChzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgKiloZWFkZXI7CisKKwkJCXBvbGFyaXR5ID0gcC0+aW50aV9mbGFncyAmIEFDUElfTUFEVF9QT0xBUklUWV9NQVNLOworCQkJdHJpZ2dlciA9IChwLT5pbnRpX2ZsYWdzICYgQUNQSV9NQURUX1RSSUdHRVJfTUFTSykgPj4gMjsKKworCQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVgKKwkJCSAgICAgICAiWDJBUElDX05NSSAodWlkWzB4JTAyeF0gJXMgJXMgbGludFsweCV4XSlcbiIsCisJCQkgICAgICAgcC0+dWlkLAorCQkJICAgICAgIG1wc19pbnRpX2ZsYWdzX3BvbGFyaXR5W3BvbGFyaXR5XSwKKwkJCSAgICAgICBtcHNfaW50aV9mbGFnc190cmlnZ2VyW3RyaWdnZXJdLAorCQkJICAgICAgIHAtPmxpbnQpOworCQl9CisJCWJyZWFrOworCiAJY2FzZSBBQ1BJX01BRFRfVFlQRV9MT0NBTF9BUElDX09WRVJSSURFOgogCQl7CiAJCQlzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX2FwaWNfb3ZlcnJpZGUgKnAgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKaW5kZXggYzExZjlhZS4uZThjMTQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3RoZXJtYWwuYworKysgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCkBAIC0zNywxMSArMzcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC90aGVybWFsLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgpAQCAtMTkwLDcgKzE5MCw2IEBACiAJc3RydWN0IGFjcGlfdGhlcm1hbF9zdGF0ZSBzdGF0ZTsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsX3RyaXBzIHRyaXBzOwogCXN0cnVjdCBhY3BpX2hhbmRsZV9saXN0IGRldmljZXM7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnRoZXJtYWxfem9uZTsKIAlpbnQgdHpfZW5hYmxlZDsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKQEAgLTI5MCw2ICsyODksMTEgQEAKIAogCXR6LT5wb2xsaW5nX2ZyZXF1ZW5jeSA9IHNlY29uZHMgKiAxMDsJLyogQ29udmVydCB2YWx1ZSB0byBkZWNpLXNlY29uZHMgKi8KIAorCXR6LT50aGVybWFsX3pvbmUtPnBvbGxpbmdfZGVsYXkgPSBzZWNvbmRzICogMTAwMDsKKworCWlmICh0ei0+dHpfZW5hYmxlZCkKKwkJdGhlcm1hbF96b25lX2RldmljZV91cGRhdGUodHotPnRoZXJtYWxfem9uZSk7CisKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCiAJCQkgICJQb2xsaW5nIGZyZXF1ZW5jeSBzZXQgdG8gJWx1IHNlY29uZHNcbiIsCiAJCQkgIHR6LT5wb2xsaW5nX2ZyZXF1ZW5jeS8xMCkpOwpAQCAtMzY3LDcgKzM3MSw3IEBACiAJCS8qCiAJCSAqIFRyZWF0IGZyZWV6aW5nIHRlbXBlcmF0dXJlcyBhcyBpbnZhbGlkIGFzIHdlbGw7IHNvbWUKIAkJICogQklPU2VzIHJldHVybiByZWFsbHkgbG93IHZhbHVlcyBhbmQgY2F1c2UgcmVib290cyBhdCBzdGFydHVwLgotCQkgKiBCZWxvdyB6ZXJvIChDZWxjaXVzKSB2YWx1ZXMgY2xlYXJseSBhcmVuJ3QgcmlnaHQgZm9yIHN1cmUuLgorCQkgKiBCZWxvdyB6ZXJvIChDZWxzaXVzKSB2YWx1ZXMgY2xlYXJseSBhcmVuJ3QgcmlnaHQgZm9yIHN1cmUuLgogCQkgKiAuLi4gc28gbGV0cyBkaXNjYXJkIHRob3NlIGFzIGludmFsaWQuCiAJCSAqLwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykgfHwKQEAgLTU2OSwzOTIgKzU3MywxOCBAQAogCXJldHVybiBhY3BpX3RoZXJtYWxfdHJpcHNfdXBkYXRlKHR6LCBBQ1BJX1RSSVBTX0lOSVQpOwogfQogCi1zdGF0aWMgaW50IGFjcGlfdGhlcm1hbF9jcml0aWNhbChzdHJ1Y3QgYWNwaV90aGVybWFsICp0eikKLXsKLQlpZiAoIXR6IHx8ICF0ei0+dHJpcHMuY3JpdGljYWwuZmxhZ3MudmFsaWQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHR6LT50ZW1wZXJhdHVyZSA+PSB0ei0+dHJpcHMuY3JpdGljYWwudGVtcGVyYXR1cmUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkNyaXRpY2FsIHRyaXAgcG9pbnRcbiIpOwotCQl0ei0+dHJpcHMuY3JpdGljYWwuZmxhZ3MuZW5hYmxlZCA9IDE7Ci0JfSBlbHNlIGlmICh0ei0+dHJpcHMuY3JpdGljYWwuZmxhZ3MuZW5hYmxlZCkKLQkJdHotPnRyaXBzLmNyaXRpY2FsLmZsYWdzLmVuYWJsZWQgPSAwOwotCi0JYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudCh0ei0+ZGV2aWNlLCBBQ1BJX1RIRVJNQUxfTk9USUZZX0NSSVRJQ0FMLAotCQkJCXR6LT50cmlwcy5jcml0aWNhbC5mbGFncy5lbmFibGVkKTsKLQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KHR6LT5kZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCi0JCQkJCSAgZGV2X25hbWUoJnR6LT5kZXZpY2UtPmRldiksCi0JCQkJCSAgQUNQSV9USEVSTUFMX05PVElGWV9DUklUSUNBTCwKLQkJCQkJICB0ei0+dHJpcHMuY3JpdGljYWwuZmxhZ3MuZW5hYmxlZCk7Ci0KLQkvKiB0YWtlIG5vIGFjdGlvbiBpZiBub2NydCBpcyBzZXQgKi8KLQlpZighbm9jcnQpIHsKLQkJcHJpbnRrKEtFUk5fRU1FUkcKLQkJCSJDcml0aWNhbCB0ZW1wZXJhdHVyZSByZWFjaGVkICglbGQgQyksIHNodXR0aW5nIGRvd24uXG4iLAotCQkJS0VMVklOX1RPX0NFTFNJVVModHotPnRlbXBlcmF0dXJlKSk7Ci0JCW9yZGVybHlfcG93ZXJvZmYodHJ1ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWNwaV90aGVybWFsX2hvdChzdHJ1Y3QgYWNwaV90aGVybWFsICp0eikKLXsKLQlpZiAoIXR6IHx8ICF0ei0+dHJpcHMuaG90LmZsYWdzLnZhbGlkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICh0ei0+dGVtcGVyYXR1cmUgPj0gdHotPnRyaXBzLmhvdC50ZW1wZXJhdHVyZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiSG90IHRyaXAgcG9pbnRcbiIpOwotCQl0ei0+dHJpcHMuaG90LmZsYWdzLmVuYWJsZWQgPSAxOwotCX0gZWxzZSBpZiAodHotPnRyaXBzLmhvdC5mbGFncy5lbmFibGVkKQotCQl0ei0+dHJpcHMuaG90LmZsYWdzLmVuYWJsZWQgPSAwOwotCi0JYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudCh0ei0+ZGV2aWNlLCBBQ1BJX1RIRVJNQUxfTk9USUZZX0hPVCwKLQkJCQl0ei0+dHJpcHMuaG90LmZsYWdzLmVuYWJsZWQpOwotCWFjcGlfYnVzX2dlbmVyYXRlX25ldGxpbmtfZXZlbnQodHotPmRldmljZS0+cG5wLmRldmljZV9jbGFzcywKLQkJCQkJICBkZXZfbmFtZSgmdHotPmRldmljZS0+ZGV2KSwKLQkJCQkJICBBQ1BJX1RIRVJNQUxfTk9USUZZX0hPVCwKLQkJCQkJICB0ei0+dHJpcHMuaG90LmZsYWdzLmVuYWJsZWQpOwotCi0JLyogVEJEOiBDYWxsIHVzZXItbW9kZSAic2xlZXAoUzQpIiBmdW5jdGlvbiBpZiBub2NydCBpcyBjbGVhcmVkICovCi0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYWNwaV90aGVybWFsX3Bhc3NpdmUoc3RydWN0IGFjcGlfdGhlcm1hbCAqdHopCi17Ci0JaW50IHJlc3VsdCA9IDE7Ci0Jc3RydWN0IGFjcGlfdGhlcm1hbF9wYXNzaXZlICpwYXNzaXZlID0gTlVMTDsKLQlpbnQgdHJlbmQgPSAwOwotCWludCBpID0gMDsKLQotCi0JaWYgKCF0eiB8fCAhdHotPnRyaXBzLnBhc3NpdmUuZmxhZ3MudmFsaWQpCi0JCXJldHVybjsKLQotCXBhc3NpdmUgPSAmKHR6LT50cmlwcy5wYXNzaXZlKTsKLQotCS8qCi0JICogQWJvdmUgVHJpcD8KLQkgKiAtLS0tLS0tLS0tLQotCSAqIENhbGN1bGF0ZSB0aGUgdGhlcm1hbCB0cmVuZCAodXNpbmcgdGhlIHBhc3NpdmUgY29vbGluZyBlcXVhdGlvbikKLQkgKiBhbmQgbW9kaWZ5IHRoZSBwZXJmb3JtYW5jZSBsaW1pdCBmb3IgYWxsIHBhc3NpdmUgY29vbGluZyBkZXZpY2VzCi0JICogYWNjb3JkaW5nbHkuICBOb3RlIHRoYXQgd2UgYXNzdW1lIHN5bW1ldHJ5LgotCSAqLwotCWlmICh0ei0+dGVtcGVyYXR1cmUgPj0gcGFzc2l2ZS0+dGVtcGVyYXR1cmUpIHsKLQkJdHJlbmQgPQotCQkgICAgKHBhc3NpdmUtPnRjMSAqICh0ei0+dGVtcGVyYXR1cmUgLSB0ei0+bGFzdF90ZW1wZXJhdHVyZSkpICsKLQkJICAgIChwYXNzaXZlLT50YzIgKiAodHotPnRlbXBlcmF0dXJlIC0gcGFzc2l2ZS0+dGVtcGVyYXR1cmUpKTsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJCSAgInRyZW5kWyVkXT0odGMxWyVsdV0qKHRtcFslbHVdLWxhc3RbJWx1XSkpKyh0YzJbJWx1XSoodG1wWyVsdV0tcHN2WyVsdV0pKVxuIiwKLQkJCQkgIHRyZW5kLCBwYXNzaXZlLT50YzEsIHR6LT50ZW1wZXJhdHVyZSwKLQkJCQkgIHR6LT5sYXN0X3RlbXBlcmF0dXJlLCBwYXNzaXZlLT50YzIsCi0JCQkJICB0ei0+dGVtcGVyYXR1cmUsIHBhc3NpdmUtPnRlbXBlcmF0dXJlKSk7Ci0JCXBhc3NpdmUtPmZsYWdzLmVuYWJsZWQgPSAxOwotCQkvKiBIZWF0aW5nIHVwPyAqLwotCQlpZiAodHJlbmQgPiAwKQotCQkJZm9yIChpID0gMDsgaSA8IHBhc3NpdmUtPmRldmljZXMuY291bnQ7IGkrKykKLQkJCQlhY3BpX3Byb2Nlc3Nvcl9zZXRfdGhlcm1hbF9saW1pdChwYXNzaXZlLT4KLQkJCQkJCQkJIGRldmljZXMuCi0JCQkJCQkJCSBoYW5kbGVzW2ldLAotCQkJCQkJCQkgQUNQSV9QUk9DRVNTT1JfTElNSVRfSU5DUkVNRU5UKTsKLQkJLyogQ29vbGluZyBvZmY/ICovCi0JCWVsc2UgaWYgKHRyZW5kIDwgMCkgewotCQkJZm9yIChpID0gMDsgaSA8IHBhc3NpdmUtPmRldmljZXMuY291bnQ7IGkrKykKLQkJCQkvKgotCQkJCSAqIGFzc3VtZSB0aGF0IHdlIGFyZSBvbiBoaWdoZXN0Ci0JCQkJICogZnJlcS9sb3dlc3QgdGhyb3R0IGFuZCBjYW4gbGVhdmUKLQkJCQkgKiBwYXNzaXZlIG1vZGUsIGV2ZW4gaW4gZXJyb3IgY2FzZQotCQkJCSAqLwotCQkJCWlmICghYWNwaV9wcm9jZXNzb3Jfc2V0X3RoZXJtYWxfbGltaXQKLQkJCQkgICAgKHBhc3NpdmUtPmRldmljZXMuaGFuZGxlc1tpXSwKLQkJCQkgICAgIEFDUElfUFJPQ0VTU09SX0xJTUlUX0RFQ1JFTUVOVCkpCi0JCQkJCXJlc3VsdCA9IDA7Ci0JCQkvKgotCQkJICogTGVhdmUgY29vbGluZyBtb2RlLCBldmVuIGlmIHRoZSB0ZW1wIG1pZ2h0Ci0JCQkgKiBoaWdoZXIgdGhhbiB0cmlwIHBvaW50IFRoaXMgaXMgYmVjYXVzZSBzb21lCi0JCQkgKiBtYWNoaW5lcyBtaWdodCBoYXZlIGxvbmcgdGhlcm1hbCBwb2xsaW5nCi0JCQkgKiBmcmVxdWVuY2llcyAodHNwKSBkZWZpbmVkLiBXZSB3aWxsIGZhbGwgYmFjawotCQkJICogaW50byBwYXNzaXZlIG1vZGUgaW4gbmV4dCBjeWNsZSAocHJvYmFibHkgcXVpY2tlcikKLQkJCSAqLwotCQkJaWYgKHJlc3VsdCkgewotCQkJCXBhc3NpdmUtPmZsYWdzLmVuYWJsZWQgPSAwOwotCQkJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKLQkJCQkJCSAgIkRpc2FibGluZyBwYXNzaXZlIGNvb2xpbmcsIHN0aWxsIGFib3ZlIHRocmVzaG9sZCwiCi0JCQkJCQkgICIgYnV0IHdlIGFyZSBjb29saW5nIGRvd25cbiIpKTsKLQkJCX0KLQkJfQotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBCZWxvdyBUcmlwPwotCSAqIC0tLS0tLS0tLS0tCi0JICogSW1wbGVtZW50IHBhc3NpdmUgY29vbGluZyBoeXN0ZXJlc2lzIHRvIHNsb3dseSBpbmNyZWFzZSBwZXJmb3JtYW5jZQotCSAqIGFuZCBhdm9pZCB0aHJhc2hpbmcgYXJvdW5kIHRoZSBwYXNzaXZlIHRyaXAgcG9pbnQuICBOb3RlIHRoYXQgd2UKLQkgKiBhc3N1bWUgc3ltbWV0cnkuCi0JICovCi0JaWYgKCFwYXNzaXZlLT5mbGFncy5lbmFibGVkKQotCQlyZXR1cm47Ci0JZm9yIChpID0gMDsgaSA8IHBhc3NpdmUtPmRldmljZXMuY291bnQ7IGkrKykKLQkJaWYgKCFhY3BpX3Byb2Nlc3Nvcl9zZXRfdGhlcm1hbF9saW1pdAotCQkgICAgKHBhc3NpdmUtPmRldmljZXMuaGFuZGxlc1tpXSwKLQkJICAgICBBQ1BJX1BST0NFU1NPUl9MSU1JVF9ERUNSRU1FTlQpKQotCQkJcmVzdWx0ID0gMDsKLQlpZiAocmVzdWx0KSB7Ci0JCXBhc3NpdmUtPmZsYWdzLmVuYWJsZWQgPSAwOwotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCi0JCQkJICAiRGlzYWJsaW5nIHBhc3NpdmUgY29vbGluZyAoem9uZSBpcyBjb29sKVxuIikpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYWNwaV90aGVybWFsX2FjdGl2ZShzdHJ1Y3QgYWNwaV90aGVybWFsICp0eikKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQlzdHJ1Y3QgYWNwaV90aGVybWFsX2FjdGl2ZSAqYWN0aXZlID0gTlVMTDsKLQlpbnQgaSA9IDA7Ci0JaW50IGogPSAwOwotCXVuc2lnbmVkIGxvbmcgbWF4dGVtcCA9IDA7Ci0KLQotCWlmICghdHopCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBBQ1BJX1RIRVJNQUxfTUFYX0FDVElWRTsgaSsrKSB7Ci0JCWFjdGl2ZSA9ICYodHotPnRyaXBzLmFjdGl2ZVtpXSk7Ci0JCWlmICghYWN0aXZlIHx8ICFhY3RpdmUtPmZsYWdzLnZhbGlkKQotCQkJYnJlYWs7Ci0JCWlmICh0ei0+dGVtcGVyYXR1cmUgPj0gYWN0aXZlLT50ZW1wZXJhdHVyZSkgewotCQkJLyoKLQkJCSAqIEFib3ZlIFRocmVzaG9sZD8KLQkJCSAqIC0tLS0tLS0tLS0tLS0tLS0KLQkJCSAqIElmIG5vdCBhbHJlYWR5IGVuYWJsZWQsIHR1cm4gT04gYWxsIGNvb2xpbmcgZGV2aWNlcwotCQkJICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgYWN0aXZlIHRocmVzaG9sZC4KLQkJCSAqLwotCQkJaWYgKGFjdGl2ZS0+dGVtcGVyYXR1cmUgPiBtYXh0ZW1wKQotCQkJCXR6LT5zdGF0ZS5hY3RpdmVfaW5kZXggPSBpOwotCQkJbWF4dGVtcCA9IGFjdGl2ZS0+dGVtcGVyYXR1cmU7Ci0JCQlpZiAoYWN0aXZlLT5mbGFncy5lbmFibGVkKQotCQkJCWNvbnRpbnVlOwotCQkJZm9yIChqID0gMDsgaiA8IGFjdGl2ZS0+ZGV2aWNlcy5jb3VudDsgaisrKSB7Ci0JCQkJcmVzdWx0ID0KLQkJCQkgICAgYWNwaV9idXNfc2V0X3Bvd2VyKGFjdGl2ZS0+ZGV2aWNlcy4KLQkJCQkJCSAgICAgICBoYW5kbGVzW2pdLAotCQkJCQkJICAgICAgIEFDUElfU1RBVEVfRDApOwotCQkJCWlmIChyZXN1bHQpIHsKLQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVgKLQkJCQkJCSAgICAgICJVbmFibGUgdG8gdHVybiBjb29saW5nIGRldmljZSBbJXBdICdvbidcbiIsCi0JCQkJCQkgICAgICBhY3RpdmUtPmRldmljZXMuCi0JCQkJCQkgICAgICBoYW5kbGVzW2pdKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWFjdGl2ZS0+ZmxhZ3MuZW5hYmxlZCA9IDE7Ci0JCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJCQkJICAiQ29vbGluZyBkZXZpY2UgWyVwXSBub3cgJ29uJ1xuIiwKLQkJCQkJCSAgYWN0aXZlLT5kZXZpY2VzLmhhbmRsZXNbal0pKTsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghYWN0aXZlLT5mbGFncy5lbmFibGVkKQotCQkJY29udGludWU7Ci0JCS8qCi0JCSAqIEJlbG93IFRocmVzaG9sZD8KLQkJICogLS0tLS0tLS0tLS0tLS0tLQotCQkgKiBUdXJuIE9GRiBhbGwgY29vbGluZyBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0JCSAqIHRocmVzaG9sZC4KLQkJICovCi0JCWZvciAoaiA9IDA7IGogPCBhY3RpdmUtPmRldmljZXMuY291bnQ7IGorKykgewotCQkJcmVzdWx0ID0gYWNwaV9idXNfc2V0X3Bvd2VyKGFjdGl2ZS0+ZGV2aWNlcy5oYW5kbGVzW2pdLAotCQkJCQkJICAgIEFDUElfU1RBVEVfRDMpOwotCQkJaWYgKHJlc3VsdCkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCi0JCQkJCSAgICAgICJVbmFibGUgdG8gdHVybiBjb29saW5nIGRldmljZSBbJXBdICdvZmYnXG4iLAotCQkJCQkgICAgICBhY3RpdmUtPmRldmljZXMuaGFuZGxlc1tqXSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlhY3RpdmUtPmZsYWdzLmVuYWJsZWQgPSAwOwotCQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJCQkgICJDb29saW5nIGRldmljZSBbJXBdIG5vdyAnb2ZmJ1xuIiwKLQkJCQkJICBhY3RpdmUtPmRldmljZXMuaGFuZGxlc1tqXSkpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhY3BpX3RoZXJtYWxfY2hlY2sodm9pZCAqY29udGV4dCk7Ci0KLXN0YXRpYyB2b2lkIGFjcGlfdGhlcm1hbF9ydW4odW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gKHN0cnVjdCBhY3BpX3RoZXJtYWwgKilkYXRhOwotCWlmICghdHotPnpvbWJpZSkKLQkJYWNwaV9vc19leGVjdXRlKE9TTF9HUEVfSEFORExFUiwgYWNwaV90aGVybWFsX2NoZWNrLCAodm9pZCAqKWRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBhY3BpX3RoZXJtYWxfYWN0aXZlX29mZih2b2lkICpkYXRhKQotewotCWludCByZXN1bHQgPSAwOwotCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gZGF0YTsKLQlpbnQgaSA9IDA7Ci0JaW50IGogPSAwOwotCXN0cnVjdCBhY3BpX3RoZXJtYWxfYWN0aXZlICphY3RpdmUgPSBOVUxMOwotCi0JaWYgKCF0eikgewotCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIChOVUxMKSBjb250ZXh0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXJlc3VsdCA9IGFjcGlfdGhlcm1hbF9nZXRfdGVtcGVyYXR1cmUodHopOwotCWlmIChyZXN1bHQpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBBQ1BJX1RIRVJNQUxfTUFYX0FDVElWRTsgaSsrKSB7Ci0JCWFjdGl2ZSA9ICYodHotPnRyaXBzLmFjdGl2ZVtpXSk7Ci0JCWlmICghYWN0aXZlIHx8ICFhY3RpdmUtPmZsYWdzLnZhbGlkKQotCQkJYnJlYWs7Ci0JCWlmICh0ei0+dGVtcGVyYXR1cmUgPj0gYWN0aXZlLT50ZW1wZXJhdHVyZSkgewotCQkJLyoKLQkJCSAqIElmIHRoZSB0aGVybWFsIHRlbXBlcmF0dXJlIGlzIGdyZWF0ZXIgdGhhbiB0aGUKLQkJCSAqIGFjdGl2ZSB0aHJlc2hvZCwgdW5uZWNlc3NhcnkgdG8gdHVybiBvZmYgdGhlCi0JCQkgKiB0aGUgYWN0aXZlIGNvb2xpbmcgZGV2aWNlLgotCQkJICovCi0JCQljb250aW51ZTsKLQkJfQotCQkvKgotCQkgKiBCZWxvdyBUaHJlc2hvbGQ/Ci0JCSAqIC0tLS0tLS0tLS0tLS0tLS0KLQkJICogVHVybiBPRkYgYWxsIGNvb2xpbmcgZGV2aWNlcyBhc3NvY2lhdGVkIHdpdGggdGhpcwotCQkgKiB0aHJlc2hvbGQuCi0JCSAqLwotCQlmb3IgKGogPSAwOyBqIDwgYWN0aXZlLT5kZXZpY2VzLmNvdW50OyBqKyspCi0JCQlyZXN1bHQgPSBhY3BpX2J1c19zZXRfcG93ZXIoYWN0aXZlLT5kZXZpY2VzLmhhbmRsZXNbal0sCi0JCQkJCQkgICAgQUNQSV9TVEFURV9EMyk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBhY3BpX3RoZXJtYWxfY2hlY2sodm9pZCAqZGF0YSkKIHsKLQlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IGRhdGE7Ci0JdW5zaWduZWQgbG9uZyBzbGVlcF90aW1lID0gMDsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXRfamlmZmllcyA9IDA7Ci0JaW50IGkgPSAwOwotCXN0cnVjdCBhY3BpX3RoZXJtYWxfc3RhdGUgc3RhdGU7CiAKLQotCWlmICghdHopIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCAoTlVMTCkgY29udGV4dFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBDaGVjayBpZiBzb21lb25lIGVsc2UgaXMgYWxyZWFkeSBydW5uaW5nICovCi0JaWYgKCFtdXRleF90cnlsb2NrKCZ0ei0+bG9jaykpCi0JCXJldHVybjsKLQotCXN0YXRlID0gdHotPnN0YXRlOwotCi0JcmVzdWx0ID0gYWNwaV90aGVybWFsX2dldF90ZW1wZXJhdHVyZSh0eik7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byB1bmxvY2s7Ci0KLQlpZiAoIXR6LT50el9lbmFibGVkKQotCQlnb3RvIHVubG9jazsKLQotCW1lbXNldCgmdHotPnN0YXRlLCAwLCBzaXplb2YodHotPnN0YXRlKSk7Ci0KLQkvKgotCSAqIENoZWNrIFRyaXAgUG9pbnRzCi0JICogLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBDb21wYXJlIHRoZSBjdXJyZW50IHRlbXBlcmF0dXJlIHRvIHRoZSB0cmlwIHBvaW50IHZhbHVlcyB0byBzZWUKLQkgKiBpZiB3ZSd2ZSBlbnRlcmVkIG9uZSBvZiB0aGUgdGhlcm1hbCBwb2xpY3kgc3RhdGVzLiAgTm90ZSB0aGF0Ci0JICogdGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIHdoZW4gYSBzdGF0ZSBpcyBlbnRlcmVkLCBidXQgdGhlIAotCSAqIGluZGl2aWR1YWwgcG9saWN5IGRlY2lkZXMgd2hlbiBpdCBpcyBleGl0ZWQgKGUuZy4gaHlzdGVyZXNpcykuCi0JICovCi0JaWYgKHR6LT50cmlwcy5jcml0aWNhbC5mbGFncy52YWxpZCkKLQkJc3RhdGUuY3JpdGljYWwgfD0KLQkJICAgICh0ei0+dGVtcGVyYXR1cmUgPj0gdHotPnRyaXBzLmNyaXRpY2FsLnRlbXBlcmF0dXJlKTsKLQlpZiAodHotPnRyaXBzLmhvdC5mbGFncy52YWxpZCkKLQkJc3RhdGUuaG90IHw9ICh0ei0+dGVtcGVyYXR1cmUgPj0gdHotPnRyaXBzLmhvdC50ZW1wZXJhdHVyZSk7Ci0JaWYgKHR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkKQotCQlzdGF0ZS5wYXNzaXZlIHw9Ci0JCSAgICAodHotPnRlbXBlcmF0dXJlID49IHR6LT50cmlwcy5wYXNzaXZlLnRlbXBlcmF0dXJlKTsKLQlmb3IgKGkgPSAwOyBpIDwgQUNQSV9USEVSTUFMX01BWF9BQ1RJVkU7IGkrKykKLQkJaWYgKHR6LT50cmlwcy5hY3RpdmVbaV0uZmxhZ3MudmFsaWQpCi0JCQlzdGF0ZS5hY3RpdmUgfD0KLQkJCSAgICAodHotPnRlbXBlcmF0dXJlID49Ci0JCQkgICAgIHR6LT50cmlwcy5hY3RpdmVbaV0udGVtcGVyYXR1cmUpOwotCi0JLyoKLQkgKiBJbnZva2UgUG9saWN5Ci0JICogLS0tLS0tLS0tLS0tLQotCSAqIFNlcGFyYXRlZCBmcm9tIHRoZSBhYm92ZSBjaGVjayB0byBhbGxvdyBpbmRpdmlkdWFsIHBvbGljeSB0byAKLQkgKiBkZXRlcm1pbmUgd2hlbiB0byBleGl0IGEgZ2l2ZW4gc3RhdGUuCi0JICovCi0JaWYgKHN0YXRlLmNyaXRpY2FsKQotCQlhY3BpX3RoZXJtYWxfY3JpdGljYWwodHopOwotCWlmIChzdGF0ZS5ob3QpCi0JCWFjcGlfdGhlcm1hbF9ob3QodHopOwotCWlmIChzdGF0ZS5wYXNzaXZlKQotCQlhY3BpX3RoZXJtYWxfcGFzc2l2ZSh0eik7Ci0JaWYgKHN0YXRlLmFjdGl2ZSkKLQkJYWNwaV90aGVybWFsX2FjdGl2ZSh0eik7Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSBTdGF0ZQotCSAqIC0tLS0tLS0tLS0tLS0tLQotCSAqIEFnYWluLCBzZXBhcmF0ZWQgZnJvbSB0aGUgYWJvdmUgdHdvIHRvIGFsbG93IGluZGVwZW5kZW50IHBvbGljeQotCSAqIGRlY2lzaW9ucy4KLQkgKi8KLQl0ei0+c3RhdGUuY3JpdGljYWwgPSB0ei0+dHJpcHMuY3JpdGljYWwuZmxhZ3MuZW5hYmxlZDsKLQl0ei0+c3RhdGUuaG90ID0gdHotPnRyaXBzLmhvdC5mbGFncy5lbmFibGVkOwotCXR6LT5zdGF0ZS5wYXNzaXZlID0gdHotPnRyaXBzLnBhc3NpdmUuZmxhZ3MuZW5hYmxlZDsKLQl0ei0+c3RhdGUuYWN0aXZlID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgQUNQSV9USEVSTUFMX01BWF9BQ1RJVkU7IGkrKykKLQkJdHotPnN0YXRlLmFjdGl2ZSB8PSB0ei0+dHJpcHMuYWN0aXZlW2ldLmZsYWdzLmVuYWJsZWQ7Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSBTbGVlcCBUaW1lCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBJZiB3ZSdyZSBpbiB0aGUgcGFzc2l2ZSBzdGF0ZSwgdXNlIF9UU1AncyB2YWx1ZS4gIE90aGVyd2lzZQotCSAqIHVzZSB0aGUgZGVmYXVsdCBwb2xsaW5nIGZyZXF1ZW5jeSAoZS5nLiBfVFpQKS4gIElmIG5vIHBvbGxpbmcKLQkgKiBmcmVxdWVuY3kgaXMgc3BlY2lmaWVkIHRoZW4gd2UnbGwgd2FpdCBmb3JldmVyIChhdCBsZWFzdCB1bnRpbAotCSAqIGEgdGhlcm1hbCBldmVudCBvY2N1cnMpLiAgTm90ZSB0aGF0IF9UU1AgYW5kIF9UWkQgdmFsdWVzIGFyZQotCSAqIGdpdmVuIGluIDEvMTB0aCBzZWNvbmRzICh3ZSBtdXN0IGNvdmVydCB0byBtaWxsaXNlY29uZHMpLgotCSAqLwotCWlmICh0ei0+c3RhdGUucGFzc2l2ZSkgewotCQlzbGVlcF90aW1lID0gdHotPnRyaXBzLnBhc3NpdmUudHNwICogMTAwOwotCQl0aW1lb3V0X2ppZmZpZXMgPSAgamlmZmllcyArIChIWiAqIHNsZWVwX3RpbWUpIC8gMTAwMDsKLQl9IGVsc2UgaWYgKHR6LT5wb2xsaW5nX2ZyZXF1ZW5jeSA+IDApIHsKLQkJc2xlZXBfdGltZSA9IHR6LT5wb2xsaW5nX2ZyZXF1ZW5jeSAqIDEwMDsKLQkJdGltZW91dF9qaWZmaWVzID0gIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIChIWiAqIHNsZWVwX3RpbWUpIC8gMTAwMCk7Ci0JfQotCi0JQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiJXM6IHRlbXBlcmF0dXJlWyVsdV0gc2xlZXBbJWx1XVxuIiwKLQkJCSAgdHotPm5hbWUsIHR6LT50ZW1wZXJhdHVyZSwgc2xlZXBfdGltZSkpOwotCi0JLyoKLQkgKiBTY2hlZHVsZSBOZXh0IFBvbGwKLQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0KLQkgKi8KLQlpZiAoIXNsZWVwX3RpbWUpIHsKLQkJaWYgKHRpbWVyX3BlbmRpbmcoJih0ei0+dGltZXIpKSkKLQkJCWRlbF90aW1lcigmKHR6LT50aW1lcikpOwotCX0gZWxzZSB7Ci0JCWlmICh0aW1lcl9wZW5kaW5nKCYodHotPnRpbWVyKSkpCi0JCQltb2RfdGltZXIoJih0ei0+dGltZXIpLCB0aW1lb3V0X2ppZmZpZXMpOwotCQllbHNlIHsKLQkJCXR6LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpdHo7Ci0JCQl0ei0+dGltZXIuZnVuY3Rpb24gPSBhY3BpX3RoZXJtYWxfcnVuOwotCQkJdHotPnRpbWVyLmV4cGlyZXMgPSB0aW1lb3V0X2ppZmZpZXM7Ci0JCQlhZGRfdGltZXIoJih0ei0+dGltZXIpKTsKLQkJfQotCX0KLSAgICAgIHVubG9jazoKLQltdXRleF91bmxvY2soJnR6LT5sb2NrKTsKKwl0aGVybWFsX3pvbmVfZGV2aWNlX3VwZGF0ZSh0ei0+dGhlcm1hbF96b25lKTsKIH0KIAogLyogc3lzIEkvRiBmb3IgZ2VuZXJpYyB0aGVybWFsIHN5c2ZzIHN1cHBvcnQgKi8KICNkZWZpbmUgS0VMVklOX1RPX01JTExJQ0VMU0lVUyh0KSAodCAqIDEwMCAtIDI3MzIwMCkKIAotc3RhdGljIGludCB0aGVybWFsX2dldF90ZW1wKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsLCBjaGFyICpidWYpCitzdGF0aWMgaW50IHRoZXJtYWxfZ2V0X3RlbXAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnRoZXJtYWwsCisJCQkgICAgdW5zaWduZWQgbG9uZyAqdGVtcCkKIHsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IHRoZXJtYWwtPmRldmRhdGE7CiAJaW50IHJlc3VsdDsKQEAgLTk2NiwyNSArNTk2LDI4IEBACiAJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgS0VMVklOX1RPX01JTExJQ0VMU0lVUyh0ei0+dGVtcGVyYXR1cmUpKTsKKwkqdGVtcCA9IEtFTFZJTl9UT19NSUxMSUNFTFNJVVModHotPnRlbXBlcmF0dXJlKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgZW5hYmxlZFtdID0gImtlcm5lbCI7CiBzdGF0aWMgY29uc3QgY2hhciBkaXNhYmxlZFtdID0gInVzZXIiOwogc3RhdGljIGludCB0aGVybWFsX2dldF9tb2RlKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsLAotCQkJCWNoYXIgKmJ1ZikKKwkJCQllbnVtIHRoZXJtYWxfZGV2aWNlX21vZGUgKm1vZGUpCiB7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSB0aGVybWFsLT5kZXZkYXRhOwogCiAJaWYgKCF0eikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgdHotPnR6X2VuYWJsZWQgPwotCQkJZW5hYmxlZCA6IGRpc2FibGVkKTsKKwkqbW9kZSA9IHR6LT50el9lbmFibGVkID8gVEhFUk1BTF9ERVZJQ0VfRU5BQkxFRCA6CisJCVRIRVJNQUxfREVWSUNFX0RJU0FCTEVEOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdGhlcm1hbF9zZXRfbW9kZShzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdGhlcm1hbCwKLQkJCQljb25zdCBjaGFyICpidWYpCisJCQkJZW51bSB0aGVybWFsX2RldmljZV9tb2RlIG1vZGUpCiB7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSB0aGVybWFsLT5kZXZkYXRhOwogCWludCBlbmFibGU7CkBAIC05OTUsOSArNjI4LDkgQEAKIAkvKgogCSAqIGVuYWJsZS9kaXNhYmxlIHRoZXJtYWwgbWFuYWdlbWVudCBmcm9tIEFDUEkgdGhlcm1hbCBkcml2ZXIKIAkgKi8KLQlpZiAoIXN0cm5jbXAoYnVmLCBlbmFibGVkLCBzaXplb2YgZW5hYmxlZCAtIDEpKQorCWlmIChtb2RlID09IFRIRVJNQUxfREVWSUNFX0VOQUJMRUQpCiAJCWVuYWJsZSA9IDE7Ci0JZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCBkaXNhYmxlZCwgc2l6ZW9mIGRpc2FibGVkIC0gMSkpCisJZWxzZSBpZiAobW9kZSA9PSBUSEVSTUFMX0RFVklDRV9ESVNBQkxFRCkKIAkJZW5hYmxlID0gMDsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTAxMyw3ICs2NDYsNyBAQAogfQogCiBzdGF0aWMgaW50IHRoZXJtYWxfZ2V0X3RyaXBfdHlwZShzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdGhlcm1hbCwKLQkJCQkgaW50IHRyaXAsIGNoYXIgKmJ1ZikKKwkJCQkgaW50IHRyaXAsIGVudW0gdGhlcm1hbF90cmlwX3R5cGUgKnR5cGUpCiB7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSB0aGVybWFsLT5kZXZkYXRhOwogCWludCBpOwpAQCAtMTAyMiwyNyArNjU1LDM1IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHR6LT50cmlwcy5jcml0aWNhbC5mbGFncy52YWxpZCkgewotCQlpZiAoIXRyaXApCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICJjcml0aWNhbFxuIik7CisJCWlmICghdHJpcCkgeworCQkJKnR5cGUgPSBUSEVSTUFMX1RSSVBfQ1JJVElDQUw7CisJCQlyZXR1cm4gMDsKKwkJfQogCQl0cmlwLS07CiAJfQogCiAJaWYgKHR6LT50cmlwcy5ob3QuZmxhZ3MudmFsaWQpIHsKLQkJaWYgKCF0cmlwKQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiaG90XG4iKTsKKwkJaWYgKCF0cmlwKSB7CisJCQkqdHlwZSA9IFRIRVJNQUxfVFJJUF9IT1Q7CisJCQlyZXR1cm4gMDsKKwkJfQogCQl0cmlwLS07CiAJfQogCiAJaWYgKHR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkKSB7Ci0JCWlmICghdHJpcCkKLQkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgInBhc3NpdmVcbiIpOworCQlpZiAoIXRyaXApIHsKKwkJCSp0eXBlID0gVEhFUk1BTF9UUklQX1BBU1NJVkU7CisJCQlyZXR1cm4gMDsKKwkJfQogCQl0cmlwLS07CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IEFDUElfVEhFUk1BTF9NQVhfQUNUSVZFICYmCiAJCXR6LT50cmlwcy5hY3RpdmVbaV0uZmxhZ3MudmFsaWQ7IGkrKykgewotCQlpZiAoIXRyaXApCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICJhY3RpdmUlZFxuIiwgaSk7CisJCWlmICghdHJpcCkgeworCQkJKnR5cGUgPSBUSEVSTUFMX1RSSVBfQUNUSVZFOworCQkJcmV0dXJuIDA7CisJCX0KIAkJdHJpcC0tOwogCX0KIApAQCAtMTA1MCw3ICs2OTEsNyBAQAogfQogCiBzdGF0aWMgaW50IHRoZXJtYWxfZ2V0X3RyaXBfdGVtcChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdGhlcm1hbCwKLQkJCQkgaW50IHRyaXAsIGNoYXIgKmJ1ZikKKwkJCQkgaW50IHRyaXAsIHVuc2lnbmVkIGxvbmcgKnRlbXApCiB7CiAJc3RydWN0IGFjcGlfdGhlcm1hbCAqdHogPSB0aGVybWFsLT5kZXZkYXRhOwogCWludCBpOwpAQCAtMTA1OSwzMSArNzAwLDM5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHR6LT50cmlwcy5jcml0aWNhbC5mbGFncy52YWxpZCkgewotCQlpZiAoIXRyaXApCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIEtFTFZJTl9UT19NSUxMSUNFTFNJVVMoCi0JCQkJdHotPnRyaXBzLmNyaXRpY2FsLnRlbXBlcmF0dXJlKSk7CisJCWlmICghdHJpcCkgeworCQkJKnRlbXAgPSBLRUxWSU5fVE9fTUlMTElDRUxTSVVTKAorCQkJCXR6LT50cmlwcy5jcml0aWNhbC50ZW1wZXJhdHVyZSk7CisJCQlyZXR1cm4gMDsKKwkJfQogCQl0cmlwLS07CiAJfQogCiAJaWYgKHR6LT50cmlwcy5ob3QuZmxhZ3MudmFsaWQpIHsKLQkJaWYgKCF0cmlwKQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBLRUxWSU5fVE9fTUlMTElDRUxTSVVTKAotCQkJCQl0ei0+dHJpcHMuaG90LnRlbXBlcmF0dXJlKSk7CisJCWlmICghdHJpcCkgeworCQkJKnRlbXAgPSBLRUxWSU5fVE9fTUlMTElDRUxTSVVTKAorCQkJCXR6LT50cmlwcy5ob3QudGVtcGVyYXR1cmUpOworCQkJcmV0dXJuIDA7CisJCX0KIAkJdHJpcC0tOwogCX0KIAogCWlmICh0ei0+dHJpcHMucGFzc2l2ZS5mbGFncy52YWxpZCkgewotCQlpZiAoIXRyaXApCi0JCQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIEtFTFZJTl9UT19NSUxMSUNFTFNJVVMoCi0JCQkJCXR6LT50cmlwcy5wYXNzaXZlLnRlbXBlcmF0dXJlKSk7CisJCWlmICghdHJpcCkgeworCQkJKnRlbXAgPSBLRUxWSU5fVE9fTUlMTElDRUxTSVVTKAorCQkJCXR6LT50cmlwcy5wYXNzaXZlLnRlbXBlcmF0dXJlKTsKKwkJCXJldHVybiAwOworCQl9CiAJCXRyaXAtLTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQUNQSV9USEVSTUFMX01BWF9BQ1RJVkUgJiYKIAkJdHotPnRyaXBzLmFjdGl2ZVtpXS5mbGFncy52YWxpZDsgaSsrKSB7Ci0JCWlmICghdHJpcCkKLQkJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgS0VMVklOX1RPX01JTExJQ0VMU0lVUygKLQkJCQkJdHotPnRyaXBzLmFjdGl2ZVtpXS50ZW1wZXJhdHVyZSkpOworCQlpZiAoIXRyaXApIHsKKwkJCSp0ZW1wID0gS0VMVklOX1RPX01JTExJQ0VMU0lVUygKKwkJCQl0ei0+dHJpcHMuYWN0aXZlW2ldLnRlbXBlcmF0dXJlKTsKKwkJCXJldHVybiAwOworCQl9CiAJCXRyaXAtLTsKIAl9CiAKQEAgLTExMDIsNiArNzUxLDI5IEBACiAJCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IHRoZXJtYWxfbm90aWZ5KHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsLCBpbnQgdHJpcCwKKwkJCSAgIGVudW0gdGhlcm1hbF90cmlwX3R5cGUgdHJpcF90eXBlKQoreworCXU4IHR5cGUgPSAwOworCXN0cnVjdCBhY3BpX3RoZXJtYWwgKnR6ID0gdGhlcm1hbC0+ZGV2ZGF0YTsKKworCWlmICh0cmlwX3R5cGUgPT0gVEhFUk1BTF9UUklQX0NSSVRJQ0FMKQorCQl0eXBlID0gQUNQSV9USEVSTUFMX05PVElGWV9DUklUSUNBTDsKKwllbHNlIGlmICh0cmlwX3R5cGUgPT0gVEhFUk1BTF9UUklQX0hPVCkKKwkJdHlwZSA9IEFDUElfVEhFUk1BTF9OT1RJRllfSE9UOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KHR6LT5kZXZpY2UsIHR5cGUsIDEpOworCWFjcGlfYnVzX2dlbmVyYXRlX25ldGxpbmtfZXZlbnQodHotPmRldmljZS0+cG5wLmRldmljZV9jbGFzcywKKwkJCQkJZGV2X25hbWUoJnR6LT5kZXZpY2UtPmRldiksIHR5cGUsIDEpOworCisJaWYgKHRyaXBfdHlwZSA9PSBUSEVSTUFMX1RSSVBfQ1JJVElDQUwgJiYgbm9jcnQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIHR5cGVkZWYgaW50ICgqY2IpKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosIGludCwKIAkJICBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX2Nvb2xpbmdfZGV2aWNlX2NiKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0aGVybWFsLApAQCAtMTE5NCw2ICs4NjYsNyBAQAogCS5nZXRfdHJpcF90eXBlID0gdGhlcm1hbF9nZXRfdHJpcF90eXBlLAogCS5nZXRfdHJpcF90ZW1wID0gdGhlcm1hbF9nZXRfdHJpcF90ZW1wLAogCS5nZXRfY3JpdF90ZW1wID0gdGhlcm1hbF9nZXRfY3JpdF90ZW1wLAorCS5ub3RpZnkgPSB0aGVybWFsX25vdGlmeSwKIH07CiAKIHN0YXRpYyBpbnQgYWNwaV90aGVybWFsX3JlZ2lzdGVyX3RoZXJtYWxfem9uZShzdHJ1Y3QgYWNwaV90aGVybWFsICp0eikKQEAgLTEyMTQsOCArODg3LDIxIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQUNQSV9USEVSTUFMX01BWF9BQ1RJVkUgJiYKIAkJCXR6LT50cmlwcy5hY3RpdmVbaV0uZmxhZ3MudmFsaWQ7IGkrKywgdHJpcHMrKyk7Ci0JdHotPnRoZXJtYWxfem9uZSA9IHRoZXJtYWxfem9uZV9kZXZpY2VfcmVnaXN0ZXIoImFjcGl0eiIsCi0JCQkJCXRyaXBzLCB0eiwgJmFjcGlfdGhlcm1hbF96b25lX29wcyk7CisKKwlpZiAodHotPnRyaXBzLnBhc3NpdmUuZmxhZ3MudmFsaWQpCisJCXR6LT50aGVybWFsX3pvbmUgPQorCQkJdGhlcm1hbF96b25lX2RldmljZV9yZWdpc3RlcigiYWNwaXR6IiwgdHJpcHMsIHR6LAorCQkJCQkJICAgICAmYWNwaV90aGVybWFsX3pvbmVfb3BzLAorCQkJCQkJICAgICB0ei0+dHJpcHMucGFzc2l2ZS50YzEsCisJCQkJCQkgICAgIHR6LT50cmlwcy5wYXNzaXZlLnRjMiwKKwkJCQkJCSAgICAgdHotPnRyaXBzLnBhc3NpdmUudHNwKjEwMCwKKwkJCQkJCSAgICAgdHotPnBvbGxpbmdfZnJlcXVlbmN5KjEwMCk7CisJZWxzZQorCQl0ei0+dGhlcm1hbF96b25lID0KKwkJCXRoZXJtYWxfem9uZV9kZXZpY2VfcmVnaXN0ZXIoImFjcGl0eiIsIHRyaXBzLCB0eiwKKwkJCQkJCSAgICAgJmFjcGlfdGhlcm1hbF96b25lX29wcywKKwkJCQkJCSAgICAgMCwgMCwgMCwKKwkJCQkJCSAgICAgdHotPnBvbGxpbmdfZnJlcXVlbmN5KTsKIAlpZiAoSVNfRVJSKHR6LT50aGVybWFsX3pvbmUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtMTQ0NywxMyArMTEzMywxMyBAQAogCWlmICghdHopCiAJCWdvdG8gZW5kOwogCi0JaWYgKCF0ei0+cG9sbGluZ19mcmVxdWVuY3kpIHsKKwlpZiAoIXR6LT50aGVybWFsX3pvbmUtPnBvbGxpbmdfZGVsYXkpIHsKIAkJc2VxX3B1dHMoc2VxLCAiPHBvbGxpbmcgZGlzYWJsZWQ+XG4iKTsKIAkJZ290byBlbmQ7CiAJfQogCi0Jc2VxX3ByaW50ZihzZXEsICJwb2xsaW5nIGZyZXF1ZW5jeTogICAgICAgJWx1IHNlY29uZHNcbiIsCi0JCSAgICh0ei0+cG9sbGluZ19mcmVxdWVuY3kgLyAxMCkpOworCXNlcV9wcmludGYoc2VxLCAicG9sbGluZyBmcmVxdWVuY3k6ICAgICAgICVkIHNlY29uZHNcbiIsCisJCSAgICh0ei0+dGhlcm1hbF96b25lLT5wb2xsaW5nX2RlbGF5IC8gMTAwMCkpOwogCiAgICAgICBlbmQ6CiAJcmV0dXJuIDA7CkBAIC0xNjgyLDEyICsxMzY4LDYgQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIHVucmVnaXN0ZXJfdGhlcm1hbF96b25lOwogCi0JaW5pdF90aW1lcigmdHotPnRpbWVyKTsKLQotCWFjcGlfdGhlcm1hbF9hY3RpdmVfb2ZmKHR6KTsKLQotCWFjcGlfdGhlcm1hbF9jaGVjayh0eik7Ci0KIAlzdGF0dXMgPSBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoZGV2aWNlLT5oYW5kbGUsCiAJCQkJCSAgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAogCQkJCQkgICAgIGFjcGlfdGhlcm1hbF9ub3RpZnksIHR6KTsKQEAgLTE3MTYsMzYgKzEzOTYsMTUgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IE5VTEw7CiAKLQogCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdHogPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKLQkvKiBhdm9pZCB0aW1lciBhZGRpbmcgbmV3IGRlZmVyIHRhc2sgKi8KLQl0ei0+em9tYmllID0gMTsKLQkvKiB3YWl0IGZvciBydW5uaW5nIHRpbWVyIChvbiBvdGhlciBDUFVzKSBmaW5pc2ggKi8KLQlkZWxfdGltZXJfc3luYygmKHR6LT50aW1lcikpOwotCS8qIHN5bmNocm9uaXplIGRlZmVycmVkIHRhc2sgKi8KLQlhY3BpX29zX3dhaXRfZXZlbnRzX2NvbXBsZXRlKE5VTEwpOwotCS8qIGRlZmVycmVkIHRhc2sgbWF5IHJlaW5zZXJ0IHRpbWVyICovCi0JZGVsX3RpbWVyX3N5bmMoJih0ei0+dGltZXIpKTsKLQogCXN0YXR1cyA9IGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAogCQkJCQkgICAgQUNQSV9ERVZJQ0VfTk9USUZZLAogCQkJCQkgICAgYWNwaV90aGVybWFsX25vdGlmeSk7CiAKLQkvKiBUZXJtaW5hdGUgcG9saWN5ICovCi0JaWYgKHR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLnZhbGlkICYmIHR6LT50cmlwcy5wYXNzaXZlLmZsYWdzLmVuYWJsZWQpIHsKLQkJdHotPnRyaXBzLnBhc3NpdmUuZmxhZ3MuZW5hYmxlZCA9IDA7Ci0JCWFjcGlfdGhlcm1hbF9wYXNzaXZlKHR6KTsKLQl9Ci0JaWYgKHR6LT50cmlwcy5hY3RpdmVbMF0uZmxhZ3MudmFsaWQKLQkgICAgJiYgdHotPnRyaXBzLmFjdGl2ZVswXS5mbGFncy5lbmFibGVkKSB7Ci0JCXR6LT50cmlwcy5hY3RpdmVbMF0uZmxhZ3MuZW5hYmxlZCA9IDA7Ci0JCWFjcGlfdGhlcm1hbF9hY3RpdmUodHopOwotCX0KLQogCWFjcGlfdGhlcm1hbF9yZW1vdmVfZnMoZGV2aWNlKTsKIAlhY3BpX3RoZXJtYWxfdW5yZWdpc3Rlcl90aGVybWFsX3pvbmUodHopOwogCW11dGV4X2Rlc3Ryb3koJnR6LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggNjdjYzM2ZC4uYWIwNjE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlIDxsaW51eC90aGVybWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9fb3V0cHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgpAQCAtMTYyLDE2ICsxNjQsMjYgQEAKIAl1OCBfQkNMOjE7CQkvKlF1ZXJ5IGxpc3Qgb2YgYnJpZ2h0bmVzcyBjb250cm9sIGxldmVscyBzdXBwb3J0ZWQgKi8KIAl1OCBfQkNNOjE7CQkvKlNldCB0aGUgYnJpZ2h0bmVzcyBsZXZlbCAqLwogCXU4IF9CUUM6MTsJCS8qIEdldCBjdXJyZW50IGJyaWdodG5lc3MgbGV2ZWwgKi8KKwl1OCBfQkNROjE7CQkvKiBTb21lIGJ1Z2d5IEJJT1MgdXNlcyBfQkNRIGluc3RlYWQgb2YgX0JRQyAqLwogCXU4IF9EREM6MTsJCS8qUmV0dXJuIHRoZSBFRElEIGZvciB0aGlzIGRldmljZSAqLwogCXU4IF9EQ1M6MTsJCS8qUmV0dXJuIHN0YXR1cyBvZiBvdXRwdXQgZGV2aWNlICovCiAJdTggX0RHUzoxOwkJLypRdWVyeSBncmFwaGljcyBzdGF0ZSAqLwogCXU4IF9EU1M6MTsJCS8qRGV2aWNlIHN0YXRlIHNldCAqLwogfTsKIAorc3RydWN0IGFjcGlfdmlkZW9fYnJpZ2h0bmVzc19mbGFncyB7CisJdTggX0JDTF9ub19hY19iYXR0ZXJ5X2xldmVsczoxOwkvKiBubyBBQy9CYXR0ZXJ5IGxldmVscyBpbiBfQkNMICovCisJdTggX0JDTF9yZXZlcnNlZDoxOwkJLyogX0JDTCBwYWNrYWdlIGlzIGluIGEgcmV2ZXJzZWQgb3JkZXIqLworCXU4IF9CQ0xfdXNlX2luZGV4OjE7CQkvKiBsZXZlbHMgaW4gX0JDTCBhcmUgaW5kZXggdmFsdWVzICovCisJdTggX0JDTV91c2VfaW5kZXg6MTsJCS8qIGlucHV0IG9mIF9CQ00gaXMgYW4gaW5kZXggdmFsdWUgKi8KKwl1OCBfQlFDX3VzZV9pbmRleDoxOwkJLyogX0JRQyByZXR1cm5zIGFuIGluZGV4IHZhbHVlICovCit9OworCiBzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2VfYnJpZ2h0bmVzcyB7CiAJaW50IGN1cnI7CiAJaW50IGNvdW50OwogCWludCAqbGV2ZWxzOworCXN0cnVjdCBhY3BpX3ZpZGVvX2JyaWdodG5lc3NfZmxhZ3MgZmxhZ3M7CiB9OwogCiBzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgewpAQCAtMTg5LDcgKzIwMSw3IEBACiAKIC8qIGJ1cyAqLwogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19pbmZvX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfaW5mb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfaW5mb19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gYWNwaV92aWRlb19idXNfaW5mb19vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0xOTgsNyArMjEwLDcgQEAKIH07CiAKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19idXNfUk9NX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfUk9NX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3ZpZGVvX2J1c19ST01fZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGFjcGlfdmlkZW9fYnVzX1JPTV9vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0yMDgsNyArMjIwLDcgQEAKIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19QT1NUX2luZm9fb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfUE9TVF9pbmZvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3ZpZGVvX2J1c19QT1NUX2luZm9fZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGFjcGlfdmlkZW9fYnVzX1BPU1RfaW5mb19vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0yMTcsMTkgKzIyOSwyNSBAQAogfTsKIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2J1c19QT1NUX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfUE9TVF9mb3BzID0geworc3RhdGljIHNzaXplX3QgYWNwaV92aWRlb19idXNfd3JpdGVfUE9TVChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwljb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqZGF0YSk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhY3BpX3ZpZGVvX2J1c19QT1NUX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBhY3BpX3ZpZGVvX2J1c19QT1NUX29wZW5fZnMsCiAJLnJlYWQgPSBzZXFfcmVhZCwKKwkud3JpdGUgPSBhY3BpX3ZpZGVvX2J1c193cml0ZV9QT1NULAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19idXNfRE9TX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfRE9TX2ZvcHMgPSB7CitzdGF0aWMgc3NpemVfdCBhY3BpX3ZpZGVvX2J1c193cml0ZV9ET1Moc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19idXNfRE9TX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBhY3BpX3ZpZGVvX2J1c19ET1Nfb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLAorCS53cml0ZSA9IGFjcGlfdmlkZW9fYnVzX3dyaXRlX0RPUywKIAkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwpAQCAtMjM3LDcgKzI1NSw3IEBACiAvKiBkZXZpY2UgKi8KIHN0YXRpYyBpbnQgYWNwaV92aWRlb19kZXZpY2VfaW5mb19vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19kZXZpY2VfaW5mb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19kZXZpY2VfaW5mb19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gYWNwaV92aWRlb19kZXZpY2VfaW5mb19vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCkBAIC0yNDcsMjcgKzI2NSwzMyBAQAogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fZGV2aWNlX3N0YXRlX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJICAgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19kZXZpY2Vfc3RhdGVfZm9wcyA9IHsKK3N0YXRpYyBzc2l6ZV90IGFjcGlfdmlkZW9fZGV2aWNlX3dyaXRlX3N0YXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpkYXRhKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfdmlkZW9fZGV2aWNlX3N0YXRlX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSBhY3BpX3ZpZGVvX2RldmljZV9zdGF0ZV9vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCisJLndyaXRlID0gYWNwaV92aWRlb19kZXZpY2Vfd3JpdGVfc3RhdGUsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJCXN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBzc2l6ZV90IGFjcGlfdmlkZW9fZGV2aWNlX3dyaXRlX2JyaWdodG5lc3Moc3RydWN0IGZpbGUgKmZpbGUsCisJY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpOwogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV92aWRlb19kZXZpY2VfYnJpZ2h0bmVzc19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gYWNwaV92aWRlb19kZXZpY2VfYnJpZ2h0bmVzc19vcGVuX2ZzLAogCS5yZWFkID0gc2VxX3JlYWQsCisJLndyaXRlID0gYWNwaV92aWRlb19kZXZpY2Vfd3JpdGVfYnJpZ2h0bmVzcywKIAkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fZGV2aWNlX0VESURfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlKTsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfdmlkZW9fZGV2aWNlX0VESURfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfdmlkZW9fZGV2aWNlX0VESURfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IGFjcGlfdmlkZW9fZGV2aWNlX0VESURfb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtMjc1LDcgKzI5OSw3IEBACiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBjaGFyIGRldmljZV9kZWNvZGVbXVszMF0gPSB7CitzdGF0aWMgY29uc3QgY2hhciBkZXZpY2VfZGVjb2RlW11bMzBdID0gewogCSJtb3RoZXJib2FyZCBWR0EgZGV2aWNlIiwKIAkiUENJIFZHQSBkZXZpY2UiLAogCSJBR1AgVkdBIGRldmljZSIsCkBAIC0yOTQsNyArMzE4LDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgbG9uZyAqbGV2ZWwpOwogc3RhdGljIGludCBhY3BpX3ZpZGVvX2dldF9uZXh0X2xldmVsKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlLAogCQkJCSAgICAgdTMyIGxldmVsX2N1cnJlbnQsIHUzMiBldmVudCk7Ci1zdGF0aWMgdm9pZCBhY3BpX3ZpZGVvX3N3aXRjaF9icmlnaHRuZXNzKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlLAorc3RhdGljIGludCBhY3BpX3ZpZGVvX3N3aXRjaF9icmlnaHRuZXNzKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlLAogCQkJCQkgaW50IGV2ZW50KTsKIHN0YXRpYyBpbnQgYWNwaV92aWRlb19kZXZpY2VfZ2V0X3N0YXRlKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqc3RhdGUpOwpAQCAtMzA4LDcgKzMzMiw5IEBACiAJaW50IGk7CiAJc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICp2ZCA9CiAJCShzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKilibF9nZXRfZGF0YShiZCk7Ci0JYWNwaV92aWRlb19kZXZpY2VfbGNkX2dldF9sZXZlbF9jdXJyZW50KHZkLCAmY3VyX2xldmVsKTsKKworCWlmIChhY3BpX3ZpZGVvX2RldmljZV9sY2RfZ2V0X2xldmVsX2N1cnJlbnQodmQsICZjdXJfbGV2ZWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlmb3IgKGkgPSAyOyBpIDwgdmQtPmJyaWdodG5lc3MtPmNvdW50OyBpKyspIHsKIAkJaWYgKHZkLT5icmlnaHRuZXNzLT5sZXZlbHNbaV0gPT0gY3VyX2xldmVsKQogCQkJLyogVGhlIGZpcnN0IHR3byBlbnRyaWVzIGFyZSBzcGVjaWFsIC0gc2VlIHBhZ2UgNTc1CkBAIC0zMjAsMTIgKzM0NiwxMiBAQAogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fc2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQogewotCWludCByZXF1ZXN0X2xldmVsID0gYmQtPnByb3BzLmJyaWdodG5lc3MrMjsKKwlpbnQgcmVxdWVzdF9sZXZlbCA9IGJkLT5wcm9wcy5icmlnaHRuZXNzICsgMjsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKnZkID0KIAkJKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqKWJsX2dldF9kYXRhKGJkKTsKLQlhY3BpX3ZpZGVvX2RldmljZV9sY2Rfc2V0X2xldmVsKHZkLAotCQkJCQl2ZC0+YnJpZ2h0bmVzcy0+bGV2ZWxzW3JlcXVlc3RfbGV2ZWxdKTsKLQlyZXR1cm4gMDsKKworCXJldHVybiBhY3BpX3ZpZGVvX2RldmljZV9sY2Rfc2V0X2xldmVsKHZkLAorCQkJCXZkLT5icmlnaHRuZXNzLT5sZXZlbHNbcmVxdWVzdF9sZXZlbF0pOwogfQogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYWNwaV9iYWNrbGlnaHRfb3BzID0gewpAQCAtMzU4LDMyICszODQsMzcgQEAKIAogCiAvKiB0aGVybWFsIGNvb2xpbmcgZGV2aWNlIGNhbGxiYWNrcyAqLwotc3RhdGljIGludCB2aWRlb19nZXRfbWF4X3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgaW50IHZpZGVvX2dldF9tYXhfc3RhdGUoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsIHVuc2lnbmVkCisJCQkgICAgICAgbG9uZyAqc3RhdGUpCiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOwogCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqdmlkZW8gPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmlkZW8tPmJyaWdodG5lc3MtPmNvdW50IC0gMyk7CisJKnN0YXRlID0gdmlkZW8tPmJyaWdodG5lc3MtPmNvdW50IC0gMzsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRlb19nZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCitzdGF0aWMgaW50IHZpZGVvX2dldF9jdXJfc3RhdGUoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsIHVuc2lnbmVkCisJCQkgICAgICAgbG9uZyAqc3RhdGUpCiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOwogCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqdmlkZW8gPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJdW5zaWduZWQgbG9uZyBsb25nIGxldmVsOwotCWludCBzdGF0ZTsKKwlpbnQgb2Zmc2V0OwogCi0JYWNwaV92aWRlb19kZXZpY2VfbGNkX2dldF9sZXZlbF9jdXJyZW50KHZpZGVvLCAmbGV2ZWwpOwotCWZvciAoc3RhdGUgPSAyOyBzdGF0ZSA8IHZpZGVvLT5icmlnaHRuZXNzLT5jb3VudDsgc3RhdGUrKykKLQkJaWYgKGxldmVsID09IHZpZGVvLT5icmlnaHRuZXNzLT5sZXZlbHNbc3RhdGVdKQotCQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCi0JCQkJICAgICAgIHZpZGVvLT5icmlnaHRuZXNzLT5jb3VudCAtIHN0YXRlIC0gMSk7CisJaWYgKGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9nZXRfbGV2ZWxfY3VycmVudCh2aWRlbywgJmxldmVsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yIChvZmZzZXQgPSAyOyBvZmZzZXQgPCB2aWRlby0+YnJpZ2h0bmVzcy0+Y291bnQ7IG9mZnNldCsrKQorCQlpZiAobGV2ZWwgPT0gdmlkZW8tPmJyaWdodG5lc3MtPmxldmVsc1tvZmZzZXRdKSB7CisJCQkqc3RhdGUgPSB2aWRlby0+YnJpZ2h0bmVzcy0+Y291bnQgLSBvZmZzZXQgLSAxOworCQkJcmV0dXJuIDA7CisJCX0KIAogCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50Ci12aWRlb19zZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBpbnQgc3RhdGUpCit2aWRlb19zZXRfY3VyX3N0YXRlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LCB1bnNpZ25lZCBsb25nIHN0YXRlKQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY2Rldi0+ZGV2ZGF0YTsKIAlzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKnZpZGVvID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwpAQCAtNDc5LDM0ICs1MTAsNjggQEAKIHN0YXRpYyBpbnQKIGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9zZXRfbGV2ZWwoc3RydWN0IGFjcGlfdmlkZW9fZGV2aWNlICpkZXZpY2UsIGludCBsZXZlbCkKIHsKLQlpbnQgc3RhdHVzID0gQUVfT0s7CisJaW50IHN0YXR1czsKIAl1bmlvbiBhY3BpX29iamVjdCBhcmcwID0geyBBQ1BJX1RZUEVfSU5URUdFUiB9OwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ3MgPSB7IDEsICZhcmcwIH07CiAJaW50IHN0YXRlOwogCi0KIAlhcmcwLmludGVnZXIudmFsdWUgPSBsZXZlbDsKIAotCWlmIChkZXZpY2UtPmNhcC5fQkNNKQotCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmRldi0+aGFuZGxlLCAiX0JDTSIsCi0JCQkJCSAgICAgICZhcmdzLCBOVUxMKTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmRldi0+aGFuZGxlLCAiX0JDTSIsCisJCQkJICAgICAgJmFyZ3MsIE5VTEwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiRXZhbHVhdGluZyBfQkNNIGZhaWxlZCIpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCiAJZGV2aWNlLT5icmlnaHRuZXNzLT5jdXJyID0gbGV2ZWw7CiAJZm9yIChzdGF0ZSA9IDI7IHN0YXRlIDwgZGV2aWNlLT5icmlnaHRuZXNzLT5jb3VudDsgc3RhdGUrKykKLQkJaWYgKGxldmVsID09IGRldmljZS0+YnJpZ2h0bmVzcy0+bGV2ZWxzW3N0YXRlXSkKLQkJCWRldmljZS0+YmFja2xpZ2h0LT5wcm9wcy5icmlnaHRuZXNzID0gc3RhdGUgLSAyOworCQlpZiAobGV2ZWwgPT0gZGV2aWNlLT5icmlnaHRuZXNzLT5sZXZlbHNbc3RhdGVdKSB7CisJCQlpZiAoZGV2aWNlLT5iYWNrbGlnaHQpCisJCQkJZGV2aWNlLT5iYWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MgPSBzdGF0ZSAtIDI7CisJCQlyZXR1cm4gMDsKKwkJfQogCi0JcmV0dXJuIHN0YXR1czsKKwlBQ1BJX0VSUk9SKChBRV9JTkZPLCAiQ3VycmVudCBicmlnaHRuZXNzIGludmFsaWQiKSk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQKIGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9nZXRfbGV2ZWxfY3VycmVudChzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldmljZSwKIAkJCQkJdW5zaWduZWQgbG9uZyBsb25nICpsZXZlbCkKIHsKLQlpZiAoZGV2aWNlLT5jYXAuX0JRQykKLQkJcmV0dXJuIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmRldi0+aGFuZGxlLCAiX0JRQyIsIE5VTEwsCi0JCQkJCSAgICAgbGV2ZWwpOworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCisJaWYgKGRldmljZS0+Y2FwLl9CUUMgfHwgZGV2aWNlLT5jYXAuX0JDUSkgeworCQljaGFyICpidWYgPSBkZXZpY2UtPmNhcC5fQlFDID8gIl9CUUMiIDogIl9CQ1EiOworCisJCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmRldi0+aGFuZGxlLCBidWYsCisJCQkJCQlOVUxMLCBsZXZlbCk7CisJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJaWYgKGRldmljZS0+YnJpZ2h0bmVzcy0+ZmxhZ3MuX0JRQ191c2VfaW5kZXgpIHsKKwkJCQlpZiAoZGV2aWNlLT5icmlnaHRuZXNzLT5mbGFncy5fQkNMX3JldmVyc2VkKQorCQkJCQkqbGV2ZWwgPSBkZXZpY2UtPmJyaWdodG5lc3MtPmNvdW50CisJCQkJCQkJCSAtIDMgLSAoKmxldmVsKTsKKwkJCQkqbGV2ZWwgPSBkZXZpY2UtPmJyaWdodG5lc3MtPmxldmVsc1sqbGV2ZWwgKyAyXTsKKworCQkJfQorCQkJZGV2aWNlLT5icmlnaHRuZXNzLT5jdXJyID0gKmxldmVsOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSB7CisJCQkvKiBGaXhtZToKKwkJCSAqIHNob3VsZCB3ZSByZXR1cm4gYW4gZXJyb3Igb3IgaWdub3JlIHRoaXMgZmFpbHVyZT8KKwkJCSAqIGRldi0+YnJpZ2h0bmVzcy0+Y3VyciBpcyBhIGNhY2hlZCB2YWx1ZSB3aGljaCBzdG9yZXMKKwkJCSAqIHRoZSBjb3JyZWN0IGN1cnJlbnQgYmFja2xpZ2h0IGxldmVsIGluIG1vc3QgY2FzZXMuCisJCQkgKiBBQ1BJIHZpZGVvIGJhY2tsaWdodCBzdGlsbCB3b3JrcyB3LyBidWdneSBfQlFDLgorCQkJICogaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjMzCisJCQkgKi8KKwkJCUFDUElfV0FSTklORygoQUVfSU5GTywgIkV2YWx1YXRpbmcgJXMgZmFpbGVkIiwgYnVmKSk7CisJCQlkZXZpY2UtPmNhcC5fQlFDID0gZGV2aWNlLT5jYXAuX0JDUSA9IDA7CisJCX0KKwl9CisKIAkqbGV2ZWwgPSBkZXZpY2UtPmJyaWdodG5lc3MtPmN1cnI7Ci0JcmV0dXJuIEFFX09LOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC02NTUsOSArNzIwLDExIEBACiBhY3BpX3ZpZGVvX2luaXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldmljZSkKIHsKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqID0gTlVMTDsKLQlpbnQgaSwgbWF4X2xldmVsID0gMCwgY291bnQgPSAwOworCWludCBpLCBtYXhfbGV2ZWwgPSAwLCBjb3VudCA9IDAsIGxldmVsX2FjX2JhdHRlcnkgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBsZXZlbCwgbGV2ZWxfb2xkOwogCXVuaW9uIGFjcGlfb2JqZWN0ICpvOwogCXN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzICpiciA9IE5VTEw7CisJaW50IHJlc3VsdCA9IC1FSU5WQUw7CiAKIAlpZiAoIUFDUElfU1VDQ0VTUyhhY3BpX3ZpZGVvX2RldmljZV9sY2RfcXVlcnlfbGV2ZWxzKGRldmljZSwgJm9iaikpKSB7CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkNvdWxkIG5vdCBxdWVyeSBhdmFpbGFibGUgIgpAQCAtNjcxLDEzICs3MzgsMTYgQEAKIAliciA9IGt6YWxsb2Moc2l6ZW9mKCpiciksIEdGUF9LRVJORUwpOwogCWlmICghYnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAKLQlici0+bGV2ZWxzID0ga21hbGxvYyhvYmotPnBhY2thZ2UuY291bnQgKiBzaXplb2YgKihici0+bGV2ZWxzKSwKKwlici0+bGV2ZWxzID0ga21hbGxvYygob2JqLT5wYWNrYWdlLmNvdW50ICsgMikgKiBzaXplb2YgKihici0+bGV2ZWxzKSwKIAkJCQlHRlBfS0VSTkVMKTsKLQlpZiAoIWJyLT5sZXZlbHMpCisJaWYgKCFici0+bGV2ZWxzKSB7CisJCXJlc3VsdCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0X2ZyZWU7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IG9iai0+cGFja2FnZS5jb3VudDsgaSsrKSB7CiAJCW8gPSAodW5pb24gYWNwaV9vYmplY3QgKikmb2JqLT5wYWNrYWdlLmVsZW1lbnRzW2ldOwpAQCAtNjkyLDE4ICs3NjIsODYgQEAKIAkJY291bnQrKzsKIAl9CiAKLQkvKiBkb24ndCBzb3J0IHRoZSBmaXJzdCB0d28gYnJpZ2h0bmVzcyBsZXZlbHMgKi8KLQlzb3J0KCZici0+bGV2ZWxzWzJdLCBjb3VudCAtIDIsIHNpemVvZihici0+bGV2ZWxzWzJdKSwKLQkJYWNwaV92aWRlb19jbXBfbGV2ZWwsIE5VTEwpOworCS8qCisJICogc29tZSBidWdneSBCSU9TIGRvbid0IGV4cG9ydCB0aGUgbGV2ZWxzCisJICogd2hlbiBtYWNoaW5lIGlzIG9uIEFDL0JhdHRlcnkgaW4gX0JDTCBwYWNrYWdlLgorCSAqIEluIHRoaXMgY2FzZSwgdGhlIGZpcnN0IHR3byBlbGVtZW50cyBpbiBfQkNMIHBhY2thZ2VzCisJICogYXJlIGFsc28gc3VwcG9ydGVkIGJyaWdodG5lc3MgbGV2ZWxzIHRoYXQgT1Mgc2hvdWxkIHRha2UgY2FyZSBvZi4KKwkgKi8KKwlmb3IgKGkgPSAyOyBpIDwgY291bnQ7IGkrKykKKwkJaWYgKGJyLT5sZXZlbHNbaV0gPT0gYnItPmxldmVsc1swXSB8fAorCQkgICAgYnItPmxldmVsc1tpXSA9PSBici0+bGV2ZWxzWzFdKQorCQkJbGV2ZWxfYWNfYmF0dGVyeSsrOwogCi0JaWYgKGNvdW50IDwgMikKLQkJZ290byBvdXRfZnJlZV9sZXZlbHM7CisJaWYgKGxldmVsX2FjX2JhdHRlcnkgPCAyKSB7CisJCWxldmVsX2FjX2JhdHRlcnkgPSAyIC0gbGV2ZWxfYWNfYmF0dGVyeTsKKwkJYnItPmZsYWdzLl9CQ0xfbm9fYWNfYmF0dGVyeV9sZXZlbHMgPSAxOworCQlmb3IgKGkgPSAoY291bnQgLSAxICsgbGV2ZWxfYWNfYmF0dGVyeSk7IGkgPj0gMjsgaS0tKQorCQkJYnItPmxldmVsc1tpXSA9IGJyLT5sZXZlbHNbaSAtIGxldmVsX2FjX2JhdHRlcnldOworCQljb3VudCArPSBsZXZlbF9hY19iYXR0ZXJ5OworCX0gZWxzZSBpZiAobGV2ZWxfYWNfYmF0dGVyeSA+IDIpCisJCUFDUElfRVJST1IoKEFFX0lORk8sICJUb28gbWFueSBkdXBsaWNhdGVzIGluIF9CQ0wgcGFja2FnZVxuIikpOworCisJLyogQ2hlY2sgaWYgdGhlIF9CQ0wgcGFja2FnZSBpcyBpbiBhIHJldmVyc2VkIG9yZGVyICovCisJaWYgKG1heF9sZXZlbCA9PSBici0+bGV2ZWxzWzJdKSB7CisJCWJyLT5mbGFncy5fQkNMX3JldmVyc2VkID0gMTsKKwkJc29ydCgmYnItPmxldmVsc1syXSwgY291bnQgLSAyLCBzaXplb2YoYnItPmxldmVsc1syXSksCisJCQlhY3BpX3ZpZGVvX2NtcF9sZXZlbCwgTlVMTCk7CisJfSBlbHNlIGlmIChtYXhfbGV2ZWwgIT0gYnItPmxldmVsc1tjb3VudCAtIDFdKQorCQlBQ1BJX0VSUk9SKChBRV9JTkZPLAorCQkJICAgICJGb3VuZCB1bm9yZGVyZWQgX0JDTCBwYWNrYWdlXG4iKSk7CiAKIAlici0+Y291bnQgPSBjb3VudDsKIAlkZXZpY2UtPmJyaWdodG5lc3MgPSBicjsKLQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJmb3VuZCAlZCBicmlnaHRuZXNzIGxldmVsc1xuIiwgY291bnQpKTsKKworCS8qIENoZWNrIHRoZSBpbnB1dC9vdXRwdXQgb2YgX0JRQy9fQkNML19CQ00gKi8KKwlpZiAoKG1heF9sZXZlbCA8IDEwMCkgJiYgKG1heF9sZXZlbCA8PSAoY291bnQgLSAyKSkpCisJCWJyLT5mbGFncy5fQkNMX3VzZV9pbmRleCA9IDE7CisKKwkvKgorCSAqIF9CQ00gaXMgYWx3YXlzIGNvbnNpc3RlbnQgd2l0aCBfQkNMLAorCSAqIGF0IGxlYXN0IGZvciBhbGwgdGhlIGxhcHRvcHMgd2UgaGF2ZSBldmVyIHNlZW4uCisJICovCisJYnItPmZsYWdzLl9CQ01fdXNlX2luZGV4ID0gYnItPmZsYWdzLl9CQ0xfdXNlX2luZGV4OworCisJLyogX0JRQyB1c2VzIElOREVYIHdoaWxlIF9CQ0wgdXNlcyBWQUxVRSBpbiBzb21lIGxhcHRvcHMgKi8KKwlici0+Y3VyciA9IG1heF9sZXZlbDsKKwlyZXN1bHQgPSBhY3BpX3ZpZGVvX2RldmljZV9sY2RfZ2V0X2xldmVsX2N1cnJlbnQoZGV2aWNlLCAmbGV2ZWxfb2xkKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIG91dF9mcmVlX2xldmVsczsKKworCXJlc3VsdCA9IGFjcGlfdmlkZW9fZGV2aWNlX2xjZF9zZXRfbGV2ZWwoZGV2aWNlLCBici0+Y3Vycik7CisJaWYgKHJlc3VsdCkKKwkJZ290byBvdXRfZnJlZV9sZXZlbHM7CisKKwlyZXN1bHQgPSBhY3BpX3ZpZGVvX2RldmljZV9sY2RfZ2V0X2xldmVsX2N1cnJlbnQoZGV2aWNlLCAmbGV2ZWwpOworCWlmIChyZXN1bHQpCisJCWdvdG8gb3V0X2ZyZWVfbGV2ZWxzOworCisJaWYgKChsZXZlbCAhPSBsZXZlbF9vbGQpICYmICFici0+ZmxhZ3MuX0JDTV91c2VfaW5kZXgpIHsKKwkJLyogTm90ZToKKwkJICogVGhpcyBwaWVjZSBvZiBjb2RlIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IGlmIHRoZSBjdXJyZW50CisJCSAqIGJyaWdodG5lc3MgbGV2ZWxzIGlzIDAuCisJCSAqIEJ1dCBJIGd1ZXNzIGJveGVzIHRoYXQgYm9vdCB3aXRoIHN1Y2ggYSBkYXJrIHNjcmVlbiBhcmUgcmFyZQorCQkgKiBhbmQgbm8gbW9yZSBjb2RlIGlzIG5lZWRlZCB0byBjb3ZlciB0aGlzIHNwZWNpZmlhbCBjYXNlLgorCQkgKi8KKworCQlpZiAobGV2ZWxfYWNfYmF0dGVyeSAhPSAyKSB7CisJCQkvKgorCQkJICogRm9yIG5vdywgd2UgZG9uJ3Qgc3VwcG9ydCB0aGUgX0JDTCBsaWtlIHRoaXM6CisJCQkgKiAxNiwgMTUsIDAsIDEsIDIsIDMsIC4uLiwgMTQsIDE1LCAxNgorCQkJICogYmVjYXVzZSB3ZSBtYXkgbWVzcyB1cCB0aGUgaW5kZXggcmV0dXJuZWQgYnkgX0JRQy4KKwkJCSAqIFBsdXM6IHdlIGhhdmUgbm90IGdvdCBhIGJveCBsaWtlIHRoaXMuCisJCQkgKi8KKwkJCUFDUElfRVJST1IoKEFFX0lORk8sICJfQkNMIG5vdCBzdXBwb3J0ZWRcbiIpKTsKKwkJfQorCQlici0+ZmxhZ3MuX0JRQ191c2VfaW5kZXggPSAxOworCX0KKworCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKKwkJCSAgImZvdW5kICVkIGJyaWdodG5lc3MgbGV2ZWxzXG4iLCBjb3VudCAtIDIpKTsKIAlrZnJlZShvYmopOwotCXJldHVybiBtYXhfbGV2ZWw7CisJcmV0dXJuIHJlc3VsdDsKIAogb3V0X2ZyZWVfbGV2ZWxzOgogCWtmcmVlKGJyLT5sZXZlbHMpOwpAQCAtNzEyLDcgKzg1MCw3IEBACiBvdXQ6CiAJZGV2aWNlLT5icmlnaHRuZXNzID0gTlVMTDsKIAlrZnJlZShvYmopOwotCXJldHVybiAwOworCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qCkBAIC03MjksNyArODY3LDYgQEAKIHN0YXRpYyB2b2lkIGFjcGlfdmlkZW9fZGV2aWNlX2ZpbmRfY2FwKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlKQogewogCWFjcGlfaGFuZGxlIGhfZHVtbXkxOwotCXUzMiBtYXhfbGV2ZWwgPSAwOwogCiAKIAltZW1zZXQoJmRldmljZS0+Y2FwLCAwLCBzaXplb2YoZGV2aWNlLT5jYXApKTsKQEAgLTc0NSw2ICs4ODIsMTIgQEAKIAl9CiAJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5kZXYtPmhhbmRsZSwiX0JRQyIsJmhfZHVtbXkxKSkpCiAJCWRldmljZS0+Y2FwLl9CUUMgPSAxOworCWVsc2UgaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5kZXYtPmhhbmRsZSwgIl9CQ1EiLAorCQkJCSZoX2R1bW15MSkpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRldfQlVHICJfQkNRIGlzIHVzZWQgaW5zdGVhZCBvZiBfQlFDXG4iKTsKKwkJZGV2aWNlLT5jYXAuX0JDUSA9IDE7CisJfQorCiAJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoZGV2aWNlLT5kZXYtPmhhbmRsZSwgIl9EREMiLCAmaF9kdW1teTEpKSkgewogCQlkZXZpY2UtPmNhcC5fRERDID0gMTsKIAl9CkBAIC03NTgsMTMgKzkwMSwxNCBAQAogCQlkZXZpY2UtPmNhcC5fRFNTID0gMTsKIAl9CiAKLQlpZiAoYWNwaV92aWRlb19iYWNrbGlnaHRfc3VwcG9ydCgpKQotCQltYXhfbGV2ZWwgPSBhY3BpX3ZpZGVvX2luaXRfYnJpZ2h0bmVzcyhkZXZpY2UpOwotCi0JaWYgKGRldmljZS0+Y2FwLl9CQ0wgJiYgZGV2aWNlLT5jYXAuX0JDTSAmJiBtYXhfbGV2ZWwgPiAwKSB7CisJaWYgKGFjcGlfdmlkZW9fYmFja2xpZ2h0X3N1cHBvcnQoKSkgewogCQlpbnQgcmVzdWx0OwogCQlzdGF0aWMgaW50IGNvdW50ID0gMDsKIAkJY2hhciAqbmFtZTsKKworCQlyZXN1bHQgPSBhY3BpX3ZpZGVvX2luaXRfYnJpZ2h0bmVzcyhkZXZpY2UpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuOwogCQluYW1lID0ga3phbGxvYyhNQVhfTkFNRV9MRU4sIEdGUF9LRVJORUwpOwogCQlpZiAoIW5hbWUpCiAJCQlyZXR1cm47CkBAIC03NzMsMTggKzkxNyw2IEBACiAJCWRldmljZS0+YmFja2xpZ2h0ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLAogCQkJTlVMTCwgZGV2aWNlLCAmYWNwaV9iYWNrbGlnaHRfb3BzKTsKIAkJZGV2aWNlLT5iYWNrbGlnaHQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gZGV2aWNlLT5icmlnaHRuZXNzLT5jb3VudC0zOwotCQkvKgotCQkgKiBJZiB0aGVyZSBleGlzdHMgdGhlIF9CUUMgb2JqZWN0LCB0aGUgX0JRQyBvYmplY3Qgd2lsbCBiZQotCQkgKiBjYWxsZWQgdG8gZ2V0IHRoZSBjdXJyZW50IGJhY2tsaWdodCBicmlnaHRuZXNzLiBPdGhlcndpc2UKLQkJICogdGhlIGJyaWdodG5lc3Mgd2lsbCBiZSBzZXQgdG8gdGhlIG1heGltdW0uCi0JCSAqLwotCQlpZiAoZGV2aWNlLT5jYXAuX0JRQykKLQkJCWRldmljZS0+YmFja2xpZ2h0LT5wcm9wcy5icmlnaHRuZXNzID0KLQkJCQlhY3BpX3ZpZGVvX2dldF9icmlnaHRuZXNzKGRldmljZS0+YmFja2xpZ2h0KTsKLQkJZWxzZQotCQkJZGV2aWNlLT5iYWNrbGlnaHQtPnByb3BzLmJyaWdodG5lc3MgPQotCQkJCWRldmljZS0+YmFja2xpZ2h0LT5wcm9wcy5tYXhfYnJpZ2h0bmVzczsKLQkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoZGV2aWNlLT5iYWNrbGlnaHQpOwogCQlrZnJlZShuYW1lKTsKIAogCQlkZXZpY2UtPmNkZXYgPSB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKCJMQ0QiLApAQCAtMTA2MSwxMyArMTE5MywxMiBAQAogCS8qIHZhbGlkYXRlIHRocm91Z2ggdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGxldmVscyAqLwogCWZvciAoaSA9IDI7IGkgPCBkZXYtPmJyaWdodG5lc3MtPmNvdW50OyBpKyspCiAJCWlmIChsZXZlbCA9PSBkZXYtPmJyaWdodG5lc3MtPmxldmVsc1tpXSkgewotCQkJaWYgKEFDUElfU1VDQ0VTUwotCQkJICAgIChhY3BpX3ZpZGVvX2RldmljZV9sY2Rfc2V0X2xldmVsKGRldiwgbGV2ZWwpKSkKLQkJCQlkZXYtPmJyaWdodG5lc3MtPmN1cnIgPSBsZXZlbDsKKwkJCWlmICghYWNwaV92aWRlb19kZXZpY2VfbGNkX3NldF9sZXZlbChkZXYsIGxldmVsKSkKKwkJCQlyZXR1cm4gY291bnQ7CiAJCQlicmVhazsKIAkJfQogCi0JcmV0dXJuIGNvdW50OworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IGFjcGlfdmlkZW9fZGV2aWNlX0VESURfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKQEAgLTExMzIsNyArMTI2Myw2IEBACiAJCWdvdG8gZXJyX3JlbW92ZV9kaXI7CiAKIAkvKiAnc3RhdGUnIFtSL1ddICovCi0JYWNwaV92aWRlb19kZXZpY2Vfc3RhdGVfZm9wcy53cml0ZSA9IGFjcGlfdmlkZW9fZGV2aWNlX3dyaXRlX3N0YXRlOwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgic3RhdGUiLCBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJIGRldmljZV9kaXIsCiAJCQkJICZhY3BpX3ZpZGVvX2RldmljZV9zdGF0ZV9mb3BzLApAQCAtMTE0MSw4ICsxMjcxLDYgQEAKIAkJZ290byBlcnJfcmVtb3ZlX2luZm87CiAKIAkvKiAnYnJpZ2h0bmVzcycgW1IvV10gKi8KLQlhY3BpX3ZpZGVvX2RldmljZV9icmlnaHRuZXNzX2ZvcHMud3JpdGUgPQotCQlhY3BpX3ZpZGVvX2RldmljZV93cml0ZV9icmlnaHRuZXNzOwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiYnJpZ2h0bmVzcyIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkgZGV2aWNlX2RpciwKIAkJCQkgJmFjcGlfdmlkZW9fZGV2aWNlX2JyaWdodG5lc3NfZm9wcywKQEAgLTE0MjMsNyArMTU1MSw2IEBACiAJCWdvdG8gZXJyX3JlbW92ZV9yb207CiAKIAkvKiAnUE9TVCcgW1IvV10gKi8KLQlhY3BpX3ZpZGVvX2J1c19QT1NUX2ZvcHMud3JpdGUgPSBhY3BpX3ZpZGVvX2J1c193cml0ZV9QT1NUOwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiUE9TVCIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkgZGV2aWNlX2RpciwKIAkJCQkgJmFjcGlfdmlkZW9fYnVzX1BPU1RfZm9wcywKQEAgLTE0MzIsNyArMTU1OSw2IEBACiAJCWdvdG8gZXJyX3JlbW92ZV9wb3N0X2luZm87CiAKIAkvKiAnRE9TJyBbUi9XXSAqLwotCWFjcGlfdmlkZW9fYnVzX0RPU19mb3BzLndyaXRlID0gYWNwaV92aWRlb19idXNfd3JpdGVfRE9TOwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YSgiRE9TIiwgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAogCQkJCSBkZXZpY2VfZGlyLAogCQkJCSAmYWNwaV92aWRlb19idXNfRE9TX2ZvcHMsCkBAIC0xNzQ1LDE1ICsxODcxLDI5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogYWNwaV92aWRlb19zd2l0Y2hfYnJpZ2h0bmVzcyhzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldmljZSwgaW50IGV2ZW50KQogewogCXVuc2lnbmVkIGxvbmcgbG9uZyBsZXZlbF9jdXJyZW50LCBsZXZlbF9uZXh0OworCWludCByZXN1bHQgPSAtRUlOVkFMOworCiAJaWYgKCFkZXZpY2UtPmJyaWdodG5lc3MpCi0JCXJldHVybjsKLQlhY3BpX3ZpZGVvX2RldmljZV9sY2RfZ2V0X2xldmVsX2N1cnJlbnQoZGV2aWNlLCAmbGV2ZWxfY3VycmVudCk7CisJCWdvdG8gb3V0OworCisJcmVzdWx0ID0gYWNwaV92aWRlb19kZXZpY2VfbGNkX2dldF9sZXZlbF9jdXJyZW50KGRldmljZSwKKwkJCQkJCQkgJmxldmVsX2N1cnJlbnQpOworCWlmIChyZXN1bHQpCisJCWdvdG8gb3V0OworCiAJbGV2ZWxfbmV4dCA9IGFjcGlfdmlkZW9fZ2V0X25leHRfbGV2ZWwoZGV2aWNlLCBsZXZlbF9jdXJyZW50LCBldmVudCk7Ci0JYWNwaV92aWRlb19kZXZpY2VfbGNkX3NldF9sZXZlbChkZXZpY2UsIGxldmVsX25leHQpOworCisJcmVzdWx0ID0gYWNwaV92aWRlb19kZXZpY2VfbGNkX3NldF9sZXZlbChkZXZpY2UsIGxldmVsX25leHQpOworCitvdXQ6CisJaWYgKHJlc3VsdCkKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiRmFpbGVkIHRvIHN3aXRjaCB0aGUgYnJpZ2h0bmVzc1xuIik7CisKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50CkBAIC0yMTIwLDcgKzIyNjAsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgYWNwaV92aWRlb19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbnRlbF9vcHJlZ2lvbl9wcmVzZW50KHZvaWQpCit7CisjaWYgZGVmaW5lZChDT05GSUdfRFJNX0k5MTUpIHx8IGRlZmluZWQoQ09ORklHX0RSTV9JOTE1X01PRFVMRSkKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKwl1MzIgYWRkcmVzczsKKworCWZvcl9lYWNoX3BjaV9kZXYoZGV2KSB7CisJCWlmICgoZGV2LT5jbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EpCisJCQljb250aW51ZTsKKwkJaWYgKGRldi0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfSU5URUwpCisJCQljb250aW51ZTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHhmYywgJmFkZHJlc3MpOworCQlpZiAoIWFkZHJlc3MpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIDE7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK2ludCBhY3BpX3ZpZGVvX3JlZ2lzdGVyKHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKQEAgLTIxMzYsNiArMjI5NiwyMiBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGFjcGlfdmlkZW9fcmVnaXN0ZXIpOworCisvKgorICogVGhpcyBpcyBraW5kIG9mIG5hc3R5LiBIYXJkd2FyZSB1c2luZyBJbnRlbCBjaGlwc2V0cyBtYXkgcmVxdWlyZQorICogdGhlIHZpZGVvIG9wcmVnaW9uIGNvZGUgdG8gYmUgcnVuIGZpcnN0IGluIG9yZGVyIHRvIGluaXRpYWxpc2UKKyAqIHN0YXRlIGJlZm9yZSBhbnkgQUNQSSB2aWRlbyBjYWxscyBhcmUgbWFkZS4gVG8gaGFuZGxlIHRoaXMgd2UgZGVmZXIKKyAqIHJlZ2lzdHJhdGlvbiBvZiB0aGUgdmlkZW8gY2xhc3MgdW50aWwgdGhlIG9wcmVnaW9uIGNvZGUgaGFzIHJ1bi4KKyAqLworCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX3ZpZGVvX2luaXQodm9pZCkKK3sKKwlpZiAoaW50ZWxfb3ByZWdpb25fcHJlc2VudCgpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhY3BpX3ZpZGVvX3JlZ2lzdGVyKCk7Cit9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX3ZpZGVvX2V4aXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwppbmRleCA1MGUzZDJkLi4wOTczNzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCkBAIC01NSw2ICs1NSw5IEBACiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkZvdW5kIGdlbmVyaWMgYmFja2xpZ2h0ICIKIAkJCQkgICJzdXBwb3J0XG4iKSk7CiAJCSpjYXAgfD0gQUNQSV9WSURFT19CQUNLTElHSFQ7CisJCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9CUUMiLCAmaF9kdW1teSkpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyBGV19CVUcgUFJFRklYICJBQ1BJIGJyaWdodG5lc3MgIgorCQkJCQkiY29udHJvbCBtaXNzZXMgX0JRQyBmdW5jdGlvblxuIik7CiAJCS8qIFdlIGhhdmUgYmFja2xpZ2h0IHN1cHBvcnQsIG5vIG5lZWQgdG8gc2NhbiBmdXJ0aGVyICovCiAJCXJldHVybiBBRV9DVFJMX1RFUk1JTkFURTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvd2FrZXVwLmMgYi9kcml2ZXJzL2FjcGkvd2FrZXVwLmMKaW5kZXggMmQzNDgwNi4uNWFlZThjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3dha2V1cC5jCisrKyBiL2RyaXZlcnMvYWNwaS93YWtldXAuYwpAQCAtOCw2ICs4LDggQEAKICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogI2luY2x1ZGUgInNsZWVwLmgiCiAKICNkZWZpbmUgX0NPTVBPTkVOVAkJQUNQSV9TWVNURU1fQ09NUE9ORU5UCkBAIC0xMzYsMTMgKzEzOCwxMCBAQAogCXNwaW5fdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgYWNwaV93YWtldXBfZGV2aWNlX2luaXQodm9pZCkKK2ludCBfX2luaXQgYWNwaV93YWtldXBfZGV2aWNlX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKIAotCWlmIChhY3BpX2Rpc2FibGVkKQotCQlyZXR1cm4gMDsKLQogCXNwaW5fbG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKG5vZGUsIG5leHQsICZhY3BpX3dha2V1cF9kZXZpY2VfbGlzdCkgewogCQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihub2RlLApAQCAtMTYzLDUgKzE2MiwzIEBACiAJc3Bpbl91bmxvY2soJmFjcGlfZGV2aWNlX2xvY2spOwogCXJldHVybiAwOwogfQotCi1sYXRlX2luaXRjYWxsKGFjcGlfd2FrZXVwX2RldmljZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL0tjb25maWcgYi9kcml2ZXJzL2F0YS9LY29uZmlnCmluZGV4IDBiY2YyNjQuLjkxMjA3MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL0tjb25maWcKKysrIGIvZHJpdmVycy9hdGEvS2NvbmZpZwpAQCAtODYsNyArODYsNyBAQAogCiAJICBGb3IgdXNlcnMgd2l0aCBleGNsdXNpdmVseSBtb2Rlcm4gY29udHJvbGxlcnMgbGlrZSBBSENJLAogCSAgU2lsaWNvbiBJbWFnZSAzMTI0LCBvciBNYXJ2ZWxsIDY0NDAsIHlvdSBtYXkgY2hvb3NlIHRvCi0JICBkaXNhYmxlIHRoaXMgdW5lZWRlZCBTRkYgc3VwcG9ydC4KKwkgIGRpc2FibGUgdGhpcyB1bm5lZWRlZCBTRkYgc3VwcG9ydC4KIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdXhkaXNwbGF5L0tjb25maWcgYi9kcml2ZXJzL2F1eGRpc3BsYXkvS2NvbmZpZwppbmRleCAxNGI5ZDVmLi5jMDdlNzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F1eGRpc3BsYXkvS2NvbmZpZworKysgYi9kcml2ZXJzL2F1eGRpc3BsYXkvS2NvbmZpZwpAQCAtNiw3ICs2LDYgQEAKICMKIAogbWVudWNvbmZpZyBBVVhESVNQTEFZCi0JZGVwZW5kcyBvbiBQQVJQT1JUCiAJYm9vbCAiQXV4aWxpYXJ5IERpc3BsYXkgc3VwcG9ydCIKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyBmb3IgYXV4aWxpYXJ5IGRpc3BsYXkgZHJpdmVycy4KQEAgLTE0LDcgKzEzLDcgQEAKIAogCSAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC4KIAotaWYgQVVYRElTUExBWSAmJiBQQVJQT1JUCitpZiBBVVhESVNQTEFZCiAKIGNvbmZpZyBLUzAxMDgKIAl0cmlzdGF0ZSAiS1MwMTA4IExDRCBDb250cm9sbGVyIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2lvbW11LmMgYi9kcml2ZXJzL2Jhc2UvaW9tbXUuYwppbmRleCBjMmQxZWVkLi45ZjBlNjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvaW9tbXUuYworKysgYi9kcml2ZXJzL2Jhc2UvaW9tbXUuYwpAQCAtOTgsMyArOTgsMTAgQEAKIAlyZXR1cm4gaW9tbXVfb3BzLT5pb3ZhX3RvX3BoeXMoZG9tYWluLCBpb3ZhKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbW11X2lvdmFfdG9fcGh5cyk7CisKK2ludCBpb21tdV9kb21haW5faGFzX2NhcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCisJCQkgdW5zaWduZWQgbG9uZyBjYXApCit7CisJcmV0dXJuIGlvbW11X29wcy0+ZG9tYWluX2hhc19jYXAoZG9tYWluLCBjYXApOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW9tbXVfZG9tYWluX2hhc19jYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL25vZGUuYyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKaW5kZXggZjhmNTc4YS4uNDBiODA5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL25vZGUuYworKysgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCkBAIC0yNCw3ICsyNCw3IEBACiBzdGF0aWMgc3NpemVfdCBub2RlX3JlYWRfY3B1bWFwKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGludCB0eXBlLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IG5vZGUgKm5vZGVfZGV2ID0gdG9fbm9kZShkZXYpOwotCW5vZGVfdG9fY3B1bWFza19wdHIobWFzaywgbm9kZV9kZXYtPnN5c2Rldi5pZCk7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2sgPSBjcHVtYXNrX29mX25vZGUobm9kZV9kZXYtPnN5c2Rldi5pZCk7CiAJaW50IGxlbjsKIAogCS8qIDIwMDgvMDQvMDc6IGJ1ZiBjdXJyZW50bHkgUEFHRV9TSVpFLCBuZWVkIDkgY2hhcnMgcGVyIDMyIGJpdHMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvc3lzLmMgYi9kcml2ZXJzL2Jhc2Uvc3lzLmMKaW5kZXggNzZjZTc1Yi4uMzIzNmI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3N5cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9zeXMuYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAgKglhbmQgdGhlIGNsYXNzIGRyaXZlci4KICAqCiAgKglOb3RlOiBUaGUgbGlzdCBpcyBpdGVyYXRlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB0aGF0IHdlIHNodXQgZG93bgotICoJY2hpbGQgZGV2aWNlcyBiZWZvcmUgd2Ugc2h1dCBkb3duIHRoaWVyIHBhcmVudHMuIFRoZSBsaXN0IG9yZGVyaW5nCisgKgljaGlsZCBkZXZpY2VzIGJlZm9yZSB3ZSBzaHV0IGRvd24gdGhlaXIgcGFyZW50cy4gVGhlIGxpc3Qgb3JkZXJpbmcKICAqCWlzIGd1YXJhbnRlZWQgYnkgdmlydHVlIG9mIHRoZSBmYWN0IHRoYXQgY2hpbGQgZGV2aWNlcyBhcmUgcmVnaXN0ZXJlZAogICoJYWZ0ZXIgdGhlaXIgcGFyZW50cy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hb2UvYW9lY21kLmMgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjbWQuYwppbmRleCA0NWM1YTMzLi4zMTY5M2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjbWQuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FvZS9hb2VjbWQuYwpAQCAtNCw2ICs0LDcgQEAKICAqIEZpbGVzeXN0ZW0gcmVxdWVzdCBoYW5kbGluZyBtZXRob2RzCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC0yNjcsNyArMjY4LDcgQEAKIAkJd3JpdGViaXQgPSAwOwogCX0KIAotCWFoLT5jbWRzdGF0ID0gV0lOX1JFQUQgfCB3cml0ZWJpdCB8IGV4dGJpdDsKKwlhaC0+Y21kc3RhdCA9IEFUQV9DTURfUElPX1JFQUQgfCB3cml0ZWJpdCB8IGV4dGJpdDsKIAogCS8qIG1hcmsgYWxsIHRyYWNraW5nIGZpZWxkcyBhbmQgbG9hZCBvdXQgKi8KIAlidWYtPm5mcmFtZXNvdXQgKz0gMTsKQEAgLTM2MiwxMCArMzYzLDEwIEBACiAJc3dpdGNoIChhaC0+Y21kc3RhdCkgewogCWRlZmF1bHQ6CiAJCWJyZWFrOwotCWNhc2UgV0lOX1JFQUQ6Ci0JY2FzZSBXSU5fUkVBRF9FWFQ6Ci0JY2FzZSBXSU5fV1JJVEU6Ci0JY2FzZSBXSU5fV1JJVEVfRVhUOgorCWNhc2UgQVRBX0NNRF9QSU9fUkVBRDoKKwljYXNlIEFUQV9DTURfUElPX1JFQURfRVhUOgorCWNhc2UgQVRBX0NNRF9QSU9fV1JJVEU6CisJY2FzZSBBVEFfQ01EX1BJT19XUklURV9FWFQ6CiAJCXB1dF9sYmEoYWgsIGYtPmxiYSk7CiAKIAkJbiA9IGYtPmJjbnQ7CkBAIC04MTIsOCArODEzLDggQEAKIAkJCWQtPmh0Z3QgPSBOVUxMOwogCQluID0gYWhvdXQtPnNjbnQgPDwgOTsKIAkJc3dpdGNoIChhaG91dC0+Y21kc3RhdCkgewotCQljYXNlIFdJTl9SRUFEOgotCQljYXNlIFdJTl9SRUFEX0VYVDoKKwkJY2FzZSBBVEFfQ01EX1BJT19SRUFEOgorCQljYXNlIEFUQV9DTURfUElPX1JFQURfRVhUOgogCQkJaWYgKHNrYi0+bGVuIC0gc2l6ZW9mICpoaW4gLSBzaXplb2YgKmFoaW4gPCBuKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJCSJhb2U6ICVzLiAgc2tiLT5sZW49JWQgbmVlZD0lbGRcbiIsCkBAIC04MjMsOCArODI0LDggQEAKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQltZW1jcHkoZi0+YnVmYWRkciwgYWhpbisxLCBuKTsKLQkJY2FzZSBXSU5fV1JJVEU6Ci0JCWNhc2UgV0lOX1dSSVRFX0VYVDoKKwkJY2FzZSBBVEFfQ01EX1BJT19XUklURToKKwkJY2FzZSBBVEFfQ01EX1BJT19XUklURV9FWFQ6CiAJCQlpZnAgPSBnZXRpZih0LCBza2ItPmRldik7CiAJCQlpZiAoaWZwKSB7CiAJCQkJaWZwLT5sb3N0ID0gMDsKQEAgLTgzOCw3ICs4MzksNyBAQAogCQkJCWdvdG8geG1pdDsKIAkJCX0KIAkJCWJyZWFrOwotCQljYXNlIFdJTl9JREVOVElGWToKKwkJY2FzZSBBVEFfQ01EX0lEX0FUQToKIAkJCWlmIChza2ItPmxlbiAtIHNpemVvZiAqaGluIC0gc2l6ZW9mICphaGluIDwgNTEyKSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTwogCQkJCQkiYW9lOiBydW50IGRhdGEgc2l6ZSBpbiBhdGFpZC4gIHNrYi0+bGVuPSVkXG4iLApAQCAtOTE0LDcgKzkxNSw3IEBACiAKIAkvKiBzZXQgdXAgYXRhIGhlYWRlciAqLwogCWFoLT5zY250ID0gMTsKLQlhaC0+Y21kc3RhdCA9IFdJTl9JREVOVElGWTsKKwlhaC0+Y21kc3RhdCA9IEFUQV9DTURfSURfQVRBOwogCWFoLT5sYmEzID0gMHhhMDsKIAogCXNrYi0+ZGV2ID0gdC0+aWZwLT5uZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IGMyYzk1ZTYuLjEzMDBkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtMTc3LDYgKzE3Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CS8qIGZvciBpbnZhbGlkYXRlX2J1ZmZlcnMoKSAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKQEAgLTQ1OTcsNiArNDU5OCwxMyBAQAogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoImZkIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKy8qIFRoaXMgZG9lc24ndCBhY3R1YWxseSBnZXQgdXNlZCBvdGhlciB0aGFuIGZvciBtb2R1bGUgaW5mb3JtYXRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBmbG9wcHlfcG5waWRzW10gPSB7CisJeyAiUE5QMDcwMCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgZmxvcHB5X3BucGlkcyk7CisKICNlbHNlCiAKIF9fc2V0dXAoImZsb3BweT0iLCBmbG9wcHlfc2V0dXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9oZC5jIGIvZHJpdmVycy9ibG9jay9oZC5jCmluZGV4IDQ4MmMwYzQuLjNjMTFmMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svaGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL2hkLmMKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNsdWRlIDxsaW51eC9hdGEuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogCisjZGVmaW5lIEhEX0lSUSAxNAorCiAjZGVmaW5lIFJFQUxMWV9TTE9XX0lPCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCAyNjIxZWQyLi40MGIxN2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtMTE5Miw2ICsxMTkyLDMwIEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBsb29wX3NldF9jYXBhY2l0eShzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCWludCBlcnI7CisJc2VjdG9yX3Qgc2VjOworCWxvZmZfdCBzejsKKworCWVyciA9IC1FTlhJTzsKKwlpZiAodW5saWtlbHkobG8tPmxvX3N0YXRlICE9IExvX2JvdW5kKSkKKwkJZ290byBvdXQ7CisJZXJyID0gZmlndXJlX2xvb3Bfc2l6ZShsbyk7CisJaWYgKHVubGlrZWx5KGVycikpCisJCWdvdG8gb3V0OworCXNlYyA9IGdldF9jYXBhY2l0eShsby0+bG9fZGlzayk7CisJLyogdGhlIHdpZHRoIG9mIHNlY3Rvcl90IG1heSBiZSBuYXJyb3cgZm9yIGJpdC1zaGlmdCAqLworCXN6ID0gc2VjOworCXN6IDw8PSA5OworCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKKwliZF9zZXRfc2l6ZShiZGV2LCBzeik7CisJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tdXRleCk7CisKKyBvdXQ6CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBsb19pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCiAJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0xMjI0LDYgKzEyNDgsMTEgQEAKIAljYXNlIExPT1BfR0VUX1NUQVRVUzY0OgogCQllcnIgPSBsb29wX2dldF9zdGF0dXM2NChsbywgKHN0cnVjdCBsb29wX2luZm82NCBfX3VzZXIgKikgYXJnKTsKIAkJYnJlYWs7CisJY2FzZSBMT09QX1NFVF9DQVBBQ0lUWToKKwkJZXJyID0gLUVQRVJNOworCQlpZiAoKG1vZGUgJiBGTU9ERV9XUklURSkgfHwgY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCWVyciA9IGxvb3Bfc2V0X2NhcGFjaXR5KGxvLCBiZGV2KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gbG8tPmlvY3RsID8gbG8tPmlvY3RsKGxvLCBjbWQsIGFyZykgOiAtRUlOVkFMOwogCX0KQEAgLTEzNzEsNiArMTQwMCw3IEBACiAJCQlsbywgKHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqKSBhcmcpOwogCQltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOwogCQlicmVhazsKKwljYXNlIExPT1BfU0VUX0NBUEFDSVRZOgogCWNhc2UgTE9PUF9DTFJfRkQ6CiAJY2FzZSBMT09QX0dFVF9TVEFUVVM2NDoKIAljYXNlIExPT1BfU0VUX1NUQVRVUzY0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggODI5OWUyZC4uNGQ2ZGU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC00LDcgKzQsNyBAQAogICogTm90ZSB0aGF0IHlvdSBjYW4gbm90IHN3YXAgb3ZlciB0aGlzIHRoaW5nLCB5ZXQuIFNlZW1zIHRvIHdvcmsgYnV0CiAgKiBkZWFkbG9ja3Mgc29tZXRpbWVzIC0geW91IGNhbiBub3Qgc3dhcCBvdmVyIFRDUCBpbiBnZW5lcmFsLgogICogCi0gKiBDb3B5cmlnaHQgMTk5Ny0yMDAwIFBhdmVsIE1hY2hlayA8cGF2ZWxAdWN3LmN6PgorICogQ29weXJpZ2h0IDE5OTctMjAwMCwgMjAwOCBQYXZlbCBNYWNoZWsgPHBhdmVsQHN1c2UuY3o+CiAgKiBQYXJ0cyBjb3B5cmlnaHQgMjAwMSBTdGV2ZW4gV2hpdGVob3VzZSA8c3RldmVAY2h5Z3d5bi5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIEdQTHYyIG9yIGxhdGVyLgpAQCAtMjc2LDcgKzI3Niw3IEBACiAJcmV0dXJuIDA7CiAKIGVycm9yX291dDoKLQlyZXR1cm4gMTsKKwlyZXR1cm4gLUVJTzsKIH0KIAogc3RhdGljIHN0cnVjdCByZXF1ZXN0ICpuYmRfZmluZF9yZXF1ZXN0KHN0cnVjdCBuYmRfZGV2aWNlICpsbywKQEAgLTQ2Nyw5ICs0NjcsNyBAQAogCQltdXRleF91bmxvY2soJmxvLT50eF9sb2NrKTsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQXR0ZW1wdGVkIHNlbmQgb24gY2xvc2VkIHNvY2tldFxuIiwKIAkJICAgICAgIGxvLT5kaXNrLT5kaXNrX25hbWUpOwotCQlyZXEtPmVycm9ycysrOwotCQluYmRfZW5kX3JlcXVlc3QocmVxKTsKLQkJcmV0dXJuOworCQlnb3RvIGVycm9yX291dDsKIAl9CiAKIAlsby0+YWN0aXZlX3JlcSA9IHJlcTsKQEAgLTUzMSw3ICs1MjksNyBAQAogICogICB7IHByaW50ayggIldhcm5pbmc6IElnbm9yaW5nIHJlc3VsdCFcbiIpOyBuYmRfZW5kX3JlcXVlc3QoIHJlcSApOyB9CiAgKi8KIAotc3RhdGljIHZvaWQgZG9fbmJkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKiBxKQorc3RhdGljIHZvaWQgZG9fbmJkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJlcTsKIAkKQEAgLTU2OCwyNyArNTY2LDE3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCi0JCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHR4X2xvY2sgaGVsZCAqLworCitzdGF0aWMgaW50IF9fbmJkX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBuYmRfZGV2aWNlICpsbywKKwkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBuYmRfZGV2aWNlICpsbyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlpbnQgZXJyb3I7Ci0Jc3RydWN0IHJlcXVlc3Qgc3JlcSA7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7Ci0KLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlCVUdfT04obG8tPm1hZ2ljICE9IExPX01BR0lDKTsKLQotCS8qIEFueW9uZSBjYXBhYmxlIG9mIHRoaXMgc3lzY2FsbCBjYW4gZG8gKnJlYWwgYmFkKiB0aGluZ3MgKi8KLQlkcHJpbnRrKERCR19JT0NUTCwgIiVzOiBuYmRfaW9jdGwgY21kPSVzKDB4JXgpIGFyZz0lbHVcbiIsCi0JCQlsby0+ZGlzay0+ZGlza19uYW1lLCBpb2N0bF9jbWRfdG9fYXNjaWkoY21kKSwgY21kLCBhcmcpOwotCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIE5CRF9ESVNDT05ORUNUOgorCWNhc2UgTkJEX0RJU0NPTk5FQ1Q6IHsKKwkJc3RydWN0IHJlcXVlc3Qgc3JlcTsKKwogCSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5CRF9ESVNDT05ORUNUXG4iLCBsby0+ZGlzay0+ZGlza19uYW1lKTsKKwogCQlibGtfcnFfaW5pdChOVUxMLCAmc3JlcSk7CiAJCXNyZXEuY21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOwogCQluYmRfY21kKCZzcmVxKSA9IE5CRF9DTURfRElTQzsKQEAgLTU5OSwyOSArNTg3LDI5IEBACiAJCSAqLwogCQlzcmVxLnNlY3RvciA9IDA7CiAJCXNyZXEubnJfc2VjdG9ycyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFsby0+c29jaykKKwkJaWYgKCFsby0+c29jaykKIAkJCXJldHVybiAtRUlOVkFMOwotCQltdXRleF9sb2NrKCZsby0+dHhfbG9jayk7Ci0gICAgICAgICAgICAgICAgbmJkX3NlbmRfcmVxKGxvLCAmc3JlcSk7Ci0JCW11dGV4X3VubG9jaygmbG8tPnR4X2xvY2spOworCQluYmRfc2VuZF9yZXEobG8sICZzcmVxKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwl9CiAgCi0JY2FzZSBOQkRfQ0xFQVJfU09DSzoKLQkJZXJyb3IgPSAwOwotCQltdXRleF9sb2NrKCZsby0+dHhfbG9jayk7CisJY2FzZSBOQkRfQ0xFQVJfU09DSzogeworCQlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwogCQlsby0+c29jayA9IE5VTEw7Ci0JCW11dGV4X3VubG9jaygmbG8tPnR4X2xvY2spOwogCQlmaWxlID0gbG8tPmZpbGU7CiAJCWxvLT5maWxlID0gTlVMTDsKIAkJbmJkX2NsZWFyX3F1ZShsbyk7CiAJCUJVR19PTighbGlzdF9lbXB0eSgmbG8tPnF1ZXVlX2hlYWQpKTsKIAkJaWYgKGZpbGUpCiAJCQlmcHV0KGZpbGUpOwotCQlyZXR1cm4gZXJyb3I7Ci0JY2FzZSBOQkRfU0VUX1NPQ0s6CisJCXJldHVybiAwOworCX0KKworCWNhc2UgTkJEX1NFVF9TT0NLOiB7CisJCXN0cnVjdCBmaWxlICpmaWxlOwogCQlpZiAobG8tPmZpbGUpCiAJCQlyZXR1cm4gLUVCVVNZOwotCQllcnJvciA9IC1FSU5WQUw7CiAJCWZpbGUgPSBmZ2V0KGFyZyk7CiAJCWlmIChmaWxlKSB7CiAJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKQEAgLTYzMCwxMiArNjE4LDE0IEBACiAJCQkJbG8tPnNvY2sgPSBTT0NLRVRfSShpbm9kZSk7CiAJCQkJaWYgKG1heF9wYXJ0ID4gMCkKIAkJCQkJYmRldi0+YmRfaW52YWxpZGF0ZWQgPSAxOwotCQkJCWVycm9yID0gMDsKKwkJCQlyZXR1cm4gMDsKIAkJCX0gZWxzZSB7CiAJCQkJZnB1dChmaWxlKTsKIAkJCX0KIAkJfQotCQlyZXR1cm4gZXJyb3I7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWNhc2UgTkJEX1NFVF9CTEtTSVpFOgogCQlsby0+Ymxrc2l6ZSA9IGFyZzsKIAkJbG8tPmJ5dGVzaXplICY9IH4obG8tPmJsa3NpemUtMSk7CkBAIC02NDMsMzUgKzYzMyw1MCBAQAogCQlzZXRfYmxvY2tzaXplKGJkZXYsIGxvLT5ibGtzaXplKTsKIAkJc2V0X2NhcGFjaXR5KGxvLT5kaXNrLCBsby0+Ynl0ZXNpemUgPj4gOSk7CiAJCXJldHVybiAwOworCiAJY2FzZSBOQkRfU0VUX1NJWkU6CiAJCWxvLT5ieXRlc2l6ZSA9IGFyZyAmIH4obG8tPmJsa3NpemUtMSk7CiAJCWJkZXYtPmJkX2lub2RlLT5pX3NpemUgPSBsby0+Ynl0ZXNpemU7CiAJCXNldF9ibG9ja3NpemUoYmRldiwgbG8tPmJsa3NpemUpOwogCQlzZXRfY2FwYWNpdHkobG8tPmRpc2ssIGxvLT5ieXRlc2l6ZSA+PiA5KTsKIAkJcmV0dXJuIDA7CisKIAljYXNlIE5CRF9TRVRfVElNRU9VVDoKIAkJbG8tPnhtaXRfdGltZW91dCA9IGFyZyAqIEhaOwogCQlyZXR1cm4gMDsKKwogCWNhc2UgTkJEX1NFVF9TSVpFX0JMT0NLUzoKIAkJbG8tPmJ5dGVzaXplID0gKCh1NjQpIGFyZykgKiBsby0+Ymxrc2l6ZTsKIAkJYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA9IGxvLT5ieXRlc2l6ZTsKIAkJc2V0X2Jsb2Nrc2l6ZShiZGV2LCBsby0+Ymxrc2l6ZSk7CiAJCXNldF9jYXBhY2l0eShsby0+ZGlzaywgbG8tPmJ5dGVzaXplID4+IDkpOwogCQlyZXR1cm4gMDsKLQljYXNlIE5CRF9ET19JVDoKKworCWNhc2UgTkJEX0RPX0lUOiB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOworCQlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwkJaW50IGVycm9yOworCiAJCWlmIChsby0+cGlkKQogCQkJcmV0dXJuIC1FQlVTWTsKIAkJaWYgKCFsby0+ZmlsZSkKIAkJCXJldHVybiAtRUlOVkFMOworCisJCW11dGV4X3VubG9jaygmbG8tPnR4X2xvY2spOworCiAJCXRocmVhZCA9IGt0aHJlYWRfY3JlYXRlKG5iZF90aHJlYWQsIGxvLCBsby0+ZGlzay0+ZGlza19uYW1lKTsKLQkJaWYgKElTX0VSUih0aHJlYWQpKQorCQlpZiAoSVNfRVJSKHRocmVhZCkpIHsKKwkJCW11dGV4X2xvY2soJmxvLT50eF9sb2NrKTsKIAkJCXJldHVybiBQVFJfRVJSKHRocmVhZCk7CisJCX0KIAkJd2FrZV91cF9wcm9jZXNzKHRocmVhZCk7CiAJCWVycm9yID0gbmJkX2RvX2l0KGxvKTsKIAkJa3RocmVhZF9zdG9wKHRocmVhZCk7CisKKwkJbXV0ZXhfbG9jaygmbG8tPnR4X2xvY2spOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7Ci0JCXNvY2tfc2h1dGRvd24obG8sIDEpOworCQlzb2NrX3NodXRkb3duKGxvLCAwKTsKIAkJZmlsZSA9IGxvLT5maWxlOwogCQlsby0+ZmlsZSA9IE5VTEw7CiAJCW5iZF9jbGVhcl9xdWUobG8pOwpAQCAtNjg0LDYgKzY4OSw4IEBACiAJCWlmIChtYXhfcGFydCA+IDApCiAJCQlpb2N0bF9ieV9iZGV2KGJkZXYsIEJMS1JSUEFSVCwgMCk7CiAJCXJldHVybiBsby0+aGFyZGVycm9yOworCX0KKwogCWNhc2UgTkJEX0NMRUFSX1FVRToKIAkJLyoKIAkJICogVGhpcyBpcyBmb3IgY29tcGF0aWJpbGl0eSBvbmx5LiAgVGhlIHF1ZXVlIGlzIGFsd2F5cyBjbGVhcmVkCkBAIC02OTEsNiArNjk4LDcgQEAKIAkJICovCiAJCUJVR19PTighbG8tPnNvY2sgJiYgIWxpc3RfZW1wdHkoJmxvLT5xdWV1ZV9oZWFkKSk7CiAJCXJldHVybiAwOworCiAJY2FzZSBOQkRfUFJJTlRfREVCVUc6CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBuZXh0ID0gJXAsIHByZXYgPSAlcCwgaGVhZCA9ICVwXG4iLAogCQkJYmRldi0+YmRfZGlzay0+ZGlza19uYW1lLApAQCAtNjk4LDcgKzcwNiwyOSBAQAogCQkJJmxvLT5xdWV1ZV9oZWFkKTsKIAkJcmV0dXJuIDA7CiAJfQotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAtRU5PVFRZOworfQorCitzdGF0aWMgaW50IG5iZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCisJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IG5iZF9kZXZpY2UgKmxvID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCWludCBlcnJvcjsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCUJVR19PTihsby0+bWFnaWMgIT0gTE9fTUFHSUMpOworCisJLyogQW55b25lIGNhcGFibGUgb2YgdGhpcyBzeXNjYWxsIGNhbiBkbyAqcmVhbCBiYWQqIHRoaW5ncyAqLworCWRwcmludGsoREJHX0lPQ1RMLCAiJXM6IG5iZF9pb2N0bCBjbWQ9JXMoMHgleCkgYXJnPSVsdVxuIiwKKwkJCWxvLT5kaXNrLT5kaXNrX25hbWUsIGlvY3RsX2NtZF90b19hc2NpaShjbWQpLCBjbWQsIGFyZyk7CisKKwltdXRleF9sb2NrKCZsby0+dHhfbG9jayk7CisJZXJyb3IgPSBfX25iZF9pb2N0bChiZGV2LCBsbywgY21kLCBhcmcpOworCW11dGV4X3VubG9jaygmbG8tPnR4X2xvY2spOworCisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIG5iZF9mb3BzID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jIGIvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKaW5kZXggMTE5YmUzNC4uNmNjY2RjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKKysrIGIvZHJpdmVycy9ibG9jay94c3lzYWNlLmMKQEAgLTg5LDYgKzg5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9hdGEuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2lmIGRlZmluZWQoQ09ORklHX09GKQpAQCAtMjA4LDcgKzIwOSw3IEBACiAJc3RydWN0IGdlbmRpc2sgKmdkOwogCiAJLyogSW5zZXJ0ZWQgQ0YgY2FyZCBwYXJhbWV0ZXJzICovCi0Jc3RydWN0IGhkX2RyaXZlaWQgY2ZfaWQ7CisJdTE2IGNmX2lkW0FUQV9JRF9XT1JEU107CiB9OwogCiBzdGF0aWMgaW50IGFjZV9tYWpvcjsKQEAgLTQwMiwyMSArNDAzLDE0IEBACiAJCSBhY2VfaW4zMihhY2UsIEFDRV9DRkdMQkEpLCBhY2VfaW4oYWNlLCBBQ0VfRkFUU1RBVCkpOwogfQogCi12b2lkIGFjZV9maXhfZHJpdmVpZChzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQpCit2b2lkIGFjZV9maXhfZHJpdmVpZCh1MTYgKmlkKQogewogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiAqYnVmID0gKHZvaWQgKilpZDsKIAlpbnQgaTsKIAogCS8qIEFsbCBoYWxmIHdvcmRzIGhhdmUgd3JvbmcgYnl0ZSBvcmRlcjsgc3dhcCB0aGUgYnl0ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBoZF9kcml2ZWlkKTsgaSArPSAyLCBidWYrKykKLQkJKmJ1ZiA9IGxlMTZfdG9fY3B1KCpidWYpOwotCi0JLyogU29tZSBvZiB0aGUgZGF0YSB2YWx1ZXMgYXJlIDMyYml0OyBzd2FwIHRoZSBoYWxmIHdvcmRzICAqLwotCWlkLT5sYmFfY2FwYWNpdHkgPSAoKGlkLT5sYmFfY2FwYWNpdHkgPj4gMTYpICYgMHgwMDAwRkZGRikgfAotCSAgICAoKGlkLT5sYmFfY2FwYWNpdHkgPDwgMTYpICYgMHhGRkZGMDAwMCk7Ci0JaWQtPnNwZyA9ICgoaWQtPnNwZyA+PiAxNikgJiAweDAwMDBGRkZGKSB8Ci0JICAgICgoaWQtPnNwZyA8PCAxNikgJiAweEZGRkYwMDAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVRBX0lEX1dPUkRTOyBpKyssIGlkKyspCisJCSppZCA9IGxlMTZfdG9fY3B1KCppZCk7CiAjZW5kaWYKIH0KIApAQCAtNjE0LDcgKzYwOCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBBQ0VfRlNNX1NUQVRFX0lERU5USUZZX0NPTVBMRVRFOgotCQlhY2VfZml4X2RyaXZlaWQoJmFjZS0+Y2ZfaWQpOworCQlhY2VfZml4X2RyaXZlaWQoJmFjZS0+Y2ZfaWRbMF0pOwogCQlhY2VfZHVtcF9tZW0oJmFjZS0+Y2ZfaWQsIDUxMik7CS8qIERlYnVnOiBEdW1wIG91dCBkaXNrIElEICovCiAKIAkJaWYgKGFjZS0+ZGF0YV9yZXN1bHQpIHsKQEAgLTYyNyw5ICs2MjEsMTAgQEAKIAkJCWFjZS0+bWVkaWFfY2hhbmdlID0gMDsKIAogCQkJLyogUmVjb3JkIGRpc2sgcGFyYW1ldGVycyAqLwotCQkJc2V0X2NhcGFjaXR5KGFjZS0+Z2QsIGFjZS0+Y2ZfaWQubGJhX2NhcGFjaXR5KTsKKwkJCXNldF9jYXBhY2l0eShhY2UtPmdkLAorCQkJCWF0YV9pZF91MzIoJmFjZS0+Y2ZfaWQsIEFUQV9JRF9MQkFfQ0FQQUNJVFkpKTsKIAkJCWRldl9pbmZvKGFjZS0+ZGV2LCAiY2FwYWNpdHk6ICVpIHNlY3RvcnNcbiIsCi0JCQkJIGFjZS0+Y2ZfaWQubGJhX2NhcGFjaXR5KTsKKwkJCQlhdGFfaWRfdTMyKCZhY2UtPmNmX2lkLCBBVEFfSURfTEJBX0NBUEFDSVRZKSk7CiAJCX0KIAogCQkvKiBXZSdyZSBkb25lLCBkcm9wIHRvIElETEUgc3RhdGUgYW5kIG5vdGlmeSB3YWl0ZXJzICovCkBAIC05MjgsMTIgKzkyMywxMyBAQAogc3RhdGljIGludCBhY2VfZ2V0Z2VvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQogewogCXN0cnVjdCBhY2VfZGV2aWNlICphY2UgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJdTE2ICpjZl9pZCA9ICZhY2UtPmNmX2lkWzBdOwogCiAJZGV2X2RiZyhhY2UtPmRldiwgImFjZV9nZXRnZW8oKVxuIik7CiAKLQlnZW8tPmhlYWRzID0gYWNlLT5jZl9pZC5oZWFkczsKLQlnZW8tPnNlY3RvcnMgPSBhY2UtPmNmX2lkLnNlY3RvcnM7Ci0JZ2VvLT5jeWxpbmRlcnMgPSBhY2UtPmNmX2lkLmN5bHM7CisJZ2VvLT5oZWFkcwk9IGNmX2lkW0FUQV9JRF9IRUFEU107CisJZ2VvLT5zZWN0b3JzCT0gY2ZfaWRbQVRBX0lEX1NFQ1RPUlNdOworCWdlby0+Y3lsaW5kZXJzCT0gY2ZfaWRbQVRBX0lEX0NZTFNdOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMgYi9kcml2ZXJzL2NoYXIvYW1pc2VyaWFsLmMKaW5kZXggYTU4ODY5ZS4uZmQzZWJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FtaXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvY2hhci9hbWlzZXJpYWwuYwpAQCAtNzksNiArNzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpAQCAtMTgyNSwxNCArMTgyNiwxMyBAQAogICogL3Byb2MgZnMgcm91dGluZXMuLi4uCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgbGluZV9pbmZvKGNoYXIgKmJ1Ziwgc3RydWN0IHNlcmlhbF9zdGF0ZSAqc3RhdGUpCitzdGF0aWMgaW5saW5lIHZvaWQgbGluZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHNlcmlhbF9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IGFzeW5jX3N0cnVjdCAqaW5mbyA9IHN0YXRlLT5pbmZvLCBzY3JfaW5mbzsKIAljaGFyCXN0YXRfYnVmWzMwXSwgY29udHJvbCwgc3RhdHVzOwotCWludAlyZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXJldCA9IHNwcmludGYoYnVmLCAiJWQ6IHVhcnQ6YW1pZ2FfYnVpbHRpbiIsc3RhdGUtPmxpbmUpOworCXNlcV9wcmludGYobSwgIiVkOiB1YXJ0OmFtaWdhX2J1aWx0aW4iLHN0YXRlLT5saW5lKTsKIAogCS8qCiAJICogRmlndXJlIG91dCB0aGUgY3VycmVudCBSUy0yMzIgbGluZXMKQEAgLTE4NjQsNTUgKzE4NjQsNDkgQEAKIAkJc3RyY2F0KHN0YXRfYnVmLCAifENEIik7CiAKIAlpZiAoaW5mby0+cXVvdCkgewotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIGJhdWQ6JWQiLAotCQkJICAgICAgIHN0YXRlLT5iYXVkX2Jhc2UgLyBpbmZvLT5xdW90KTsKKwkJc2VxX3ByaW50ZihtLCAiIGJhdWQ6JWQiLCBzdGF0ZS0+YmF1ZF9iYXNlIC8gaW5mby0+cXVvdCk7CiAJfQogCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiB0eDolZCByeDolZCIsCi0JCSAgICAgIHN0YXRlLT5pY291bnQudHgsIHN0YXRlLT5pY291bnQucngpOworCXNlcV9wcmludGYobSwgIiB0eDolZCByeDolZCIsIHN0YXRlLT5pY291bnQudHgsIHN0YXRlLT5pY291bnQucngpOwogCiAJaWYgKHN0YXRlLT5pY291bnQuZnJhbWUpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgZmU6JWQiLCBzdGF0ZS0+aWNvdW50LmZyYW1lKTsKKwkJc2VxX3ByaW50ZihtLCAiIGZlOiVkIiwgc3RhdGUtPmljb3VudC5mcmFtZSk7CiAKIAlpZiAoc3RhdGUtPmljb3VudC5wYXJpdHkpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcGU6JWQiLCBzdGF0ZS0+aWNvdW50LnBhcml0eSk7CisJCXNlcV9wcmludGYobSwgIiBwZTolZCIsIHN0YXRlLT5pY291bnQucGFyaXR5KTsKIAogCWlmIChzdGF0ZS0+aWNvdW50LmJyaykKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBicms6JWQiLCBzdGF0ZS0+aWNvdW50LmJyayk7CisJCXNlcV9wcmludGYobSwgIiBicms6JWQiLCBzdGF0ZS0+aWNvdW50LmJyayk7CiAKIAlpZiAoc3RhdGUtPmljb3VudC5vdmVycnVuKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIG9lOiVkIiwgc3RhdGUtPmljb3VudC5vdmVycnVuKTsKKwkJc2VxX3ByaW50ZihtLCAiIG9lOiVkIiwgc3RhdGUtPmljb3VudC5vdmVycnVuKTsKIAogCS8qCiAJICogTGFzdCB0aGluZyBpcyB0aGUgUlMtMjMyIHN0YXR1cyBsaW5lcwogCSAqLwotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgJXNcbiIsIHN0YXRfYnVmKzEpOwotCXJldHVybiByZXQ7CisJc2VxX3ByaW50ZihtLCAiICVzXG4iLCBzdGF0X2J1ZisxKTsKIH0KIAotc3RhdGljIGludCByc19yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJCWludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCByc19wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSAwLCBsOwotCW9mZl90CWJlZ2luID0gMDsKLQotCWxlbiArPSBzcHJpbnRmKHBhZ2UsICJzZXJpbmZvOjEuMCBkcml2ZXI6JXNcbiIsIHNlcmlhbF92ZXJzaW9uKTsKLQlsID0gbGluZV9pbmZvKHBhZ2UgKyBsZW4sICZyc190YWJsZVswXSk7Ci0JbGVuICs9IGw7Ci0JaWYgKGxlbitiZWdpbiA+IG9mZitjb3VudCkKLQkgIGdvdG8gZG9uZTsKLQlpZiAobGVuK2JlZ2luIDwgb2ZmKSB7Ci0JICBiZWdpbiArPSBsZW47Ci0JICBsZW4gPSAwOwotCX0KLQkqZW9mID0gMTsKLWRvbmU6Ci0JaWYgKG9mZiA+PSBsZW4rYmVnaW4pCi0JCXJldHVybiAwOwotCSpzdGFydCA9IHBhZ2UgKyAob2ZmLWJlZ2luKTsKLQlyZXR1cm4gKChjb3VudCA8IGJlZ2luK2xlbi1vZmYpID8gY291bnQgOiBiZWdpbitsZW4tb2ZmKTsKKwlzZXFfcHJpbnRmKG0sICJzZXJpbmZvOjEuMCBkcml2ZXI6JXNcbiIsIHNlcmlhbF92ZXJzaW9uKTsKKwlsaW5lX2luZm8obSwgJnJzX3RhYmxlWzBdKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCByc19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJzX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcnNfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiByc19pbml0KCkgYW5kIGZyaWVuZHMKQEAgLTE5NTEsOSArMTk0NSw5IEBACiAJLmJyZWFrX2N0bCA9IHJzX2JyZWFrLAogCS5zZW5kX3hjaGFyID0gcnNfc2VuZF94Y2hhciwKIAkud2FpdF91bnRpbF9zZW50ID0gcnNfd2FpdF91bnRpbF9zZW50LAotCS5yZWFkX3Byb2MgPSByc19yZWFkX3Byb2MsCiAJLnRpb2NtZ2V0ID0gcnNfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0gcnNfdGlvY21zZXQsCisJLnByb2NfZm9wcyA9ICZyc19wcm9jX2ZvcHMsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2Jzci5jIGIvZHJpdmVycy9jaGFyL2Jzci5jCmluZGV4IGY2MDk0YWUuLjE0MGVhMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ic3IuYworKysgYi9kcml2ZXJzL2NoYXIvYnNyLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCXJldHVybiAwOwogfQogCi1jb25zdCBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBic3JfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJzcl9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5tbWFwICA9IGJzcl9tbWFwLAogCS5vcGVuICA9IGJzcl9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMgYi9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwppbmRleCA2YTU5ZjcyLi4yNzJkYjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYworKysgYi9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYwpAQCAtNjU3LDYgKzY1Nyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKIHN0YXRpYyB2b2lkIGN5X3Rocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIHZvaWQgY3lfc2VuZF94Y2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyIGNoKTsKQEAgLTg2OCw4ICs4NjksNiBAQAogc3RhdGljIHVuc2lnbmVkIGRldGVjdF9pc2FfaXJxKHZvaWQgX19pb21lbSAqKTsKICNlbmRpZgkJCQkvKiBDT05GSUdfSVNBICovCiAKLXN0YXRpYyBpbnQgY3ljbGFkZXNfZ2V0X3Byb2NfaW5mbyhjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQsIGludCAqLCB2b2lkICopOwotCiAjaWZuZGVmIENPTkZJR19DWVpfSU5UUgogc3RhdGljIHZvaWQgY3l6X3BvbGwodW5zaWduZWQgbG9uZyk7CiAKQEAgLTUyMTYsMzEgKzUyMTUsMjIgQEAKIH07CiAjZW5kaWYKIAotc3RhdGljIGludAotY3ljbGFkZXNfZ2V0X3Byb2NfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuZ3RoLAotCQlpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgY3ljbGFkZXNfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKIAl1bnNpZ25lZCBpbnQgaSwgajsKLQlpbnQgbGVuID0gMDsKLQlvZmZfdCBiZWdpbiA9IDA7Ci0Jb2ZmX3QgcG9zID0gMDsKLQlpbnQgc2l6ZTsKIAlfX3UzMiBjdXJfamlmcyA9IGppZmZpZXM7CiAKLQlzaXplID0gc3ByaW50ZihidWYsICJEZXYgVGltZU9wZW4gICBCeXRlc091dCAgSWRsZU91dCAgICBCeXRlc0luICAgIgorCXNlcV9wdXRzKG0sICJEZXYgVGltZU9wZW4gICBCeXRlc091dCAgSWRsZU91dCAgICBCeXRlc0luICAgIgogCQkJIklkbGVJbiAgT3ZlcnJ1bnMgIExkaXNjXG4iKTsKIAotCXBvcyArPSBzaXplOwotCWxlbiArPSBzaXplOwotCiAJLyogT3V0cHV0IG9uZSBsaW5lIGZvciBlYWNoIGtub3duIHBvcnQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlJfQ0FSRFM7IGkrKykKIAkJZm9yIChqID0gMDsgaiA8IGN5X2NhcmRbaV0ubnBvcnRzOyBqKyspIHsKIAkJCWluZm8gPSAmY3lfY2FyZFtpXS5wb3J0c1tqXTsKIAogCQkJaWYgKGluZm8tPnBvcnQuY291bnQpCi0JCQkJc2l6ZSA9IHNwcmludGYoYnVmICsgbGVuLCAiJTNkICU4bHUgJTEwbHUgJThsdSAiCisJCQkJc2VxX3ByaW50ZihtLCAiJTNkICU4bHUgJTEwbHUgJThsdSAiCiAJCQkJCSIlMTBsdSAlOGx1ICU5bHUgJTZsZFxuIiwgaW5mby0+bGluZSwKIAkJCQkJKGN1cl9qaWZzIC0gaW5mby0+aWRsZV9zdGF0cy5pbl91c2UpIC8KIAkJCQkJSFosIGluZm8tPmlkbGVfc3RhdHMueG1pdF9ieXRlcywKQEAgLTUyNTEsMzAgKzUyNDEsMjYgQEAKIAkJCQkJLyogRklYTUU6IGRvdWJsZSBjaGVjayBsb2NraW5nICovCiAJCQkJCShsb25nKWluZm8tPnBvcnQudHR5LT5sZGlzYy5vcHMtPm51bSk7CiAJCQllbHNlCi0JCQkJc2l6ZSA9IHNwcmludGYoYnVmICsgbGVuLCAiJTNkICU4bHUgJTEwbHUgJThsdSAiCisJCQkJc2VxX3ByaW50ZihtLCAiJTNkICU4bHUgJTEwbHUgJThsdSAiCiAJCQkJCSIlMTBsdSAlOGx1ICU5bHUgJTZsZFxuIiwKIAkJCQkJaW5mby0+bGluZSwgMEwsIDBMLCAwTCwgMEwsIDBMLCAwTCwgMEwpOwotCQkJbGVuICs9IHNpemU7Ci0JCQlwb3MgPSBiZWdpbiArIGxlbjsKLQotCQkJaWYgKHBvcyA8IG9mZnNldCkgewotCQkJCWxlbiA9IDA7Ci0JCQkJYmVnaW4gPSBwb3M7Ci0JCQl9Ci0JCQlpZiAocG9zID4gb2Zmc2V0ICsgbGVuZ3RoKQotCQkJCWdvdG8gZG9uZTsKIAkJfQotCSplb2YgPSAxOwotZG9uZToKLQkqc3RhcnQgPSBidWYgKyAob2Zmc2V0IC0gYmVnaW4pOwkvKiBTdGFydCBvZiB3YW50ZWQgZGF0YSAqLwotCWxlbiAtPSAob2Zmc2V0IC0gYmVnaW4pOwkvKiBTdGFydCBzbG9wICovCi0JaWYgKGxlbiA+IGxlbmd0aCkKLQkJbGVuID0gbGVuZ3RoOwkvKiBFbmRpbmcgc2xvcCAqLwotCWlmIChsZW4gPCAwKQotCQlsZW4gPSAwOwotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY3ljbGFkZXNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjeWNsYWRlc19wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjeWNsYWRlc19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGN5Y2xhZGVzX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyogVGhlIHNlcmlhbCBkcml2ZXIgYm9vdC10aW1lIGluaXRpYWxpemF0aW9uIGNvZGUhCiAgICAgSGFyZHdhcmUgSS9PIHBvcnRzIGFyZSBtYXBwZWQgdG8gY2hhcmFjdGVyIHNwZWNpYWwgZGV2aWNlcyBvbiBhCiAgICAgZmlyc3QgZm91bmQsIGZpcnN0IGFsbG9jYXRlZCBtYW5uZXIuICBUaGF0IGlzLCB0aGlzIGNvZGUgc2VhcmNoZXMKQEAgLTUzMTEsOSArNTI5Nyw5IEBACiAJLmhhbmd1cCA9IGN5X2hhbmd1cCwKIAkuYnJlYWtfY3RsID0gY3lfYnJlYWssCiAJLndhaXRfdW50aWxfc2VudCA9IGN5X3dhaXRfdW50aWxfc2VudCwKLQkucmVhZF9wcm9jID0gY3ljbGFkZXNfZ2V0X3Byb2NfaW5mbywKIAkudGlvY21nZXQgPSBjeV90aW9jbWdldCwKIAkudGlvY21zZXQgPSBjeV90aW9jbXNldCwKKwkucHJvY19mb3BzID0gJmN5Y2xhZGVzX3Byb2NfZm9wcywKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGN5X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ocGV0LmMgYi9kcml2ZXJzL2NoYXIvaHBldC5jCmluZGV4IDMyYjhiYmYuLjUwZGZhM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ocGV0LmMKKysrIGIvZHJpdmVycy9jaGFyL2hwZXQuYwpAQCAtNzEzLDcgKzcxMyw3IEBACiAgKi8KICNkZWZpbmUJVElDS19DQUxJQlJBVEUJKDEwMDBVTCkKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBldF9jYWxpYnJhdGUoc3RydWN0IGhwZXRzICpocGV0cCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faHBldF9jYWxpYnJhdGUoc3RydWN0IGhwZXRzICpocGV0cCkKIHsKIAlzdHJ1Y3QgaHBldF90aW1lciBfX2lvbWVtICp0aW1lciA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyB0LCBtLCBjb3VudCwgaSwgZmxhZ3MsIHN0YXJ0OwpAQCAtNzUwLDYgKzc1MCwyNiBAQAogCXJldHVybiAobSAtIHN0YXJ0KSAvIGk7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGhwZXRfY2FsaWJyYXRlKHN0cnVjdCBocGV0cyAqaHBldHApCit7CisJdW5zaWduZWQgbG9uZyByZXQgPSAtMTsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCS8qCisJICogVHJ5IHRvIGNhbGlicmF0ZSB1bnRpbCByZXR1cm4gdmFsdWUgYmVjb21lcyBzdGFibGUgc21hbGwgdmFsdWUuCisJICogSWYgU01JIGludGVycnVwdGlvbiBvY2N1cnMgaW4gY2FsaWJyYXRpb24gbG9vcCwgdGhlIHJldHVybiB2YWx1ZQorCSAqIHdpbGwgYmUgYmlnLiBUaGlzIGF2b2lkcyBpdHMgaW1wYWN0LgorCSAqLworCWZvciAoIDsgOyApIHsKKwkJdG1wID0gX19ocGV0X2NhbGlicmF0ZShocGV0cCk7CisJCWlmIChyZXQgPD0gdG1wKQorCQkJYnJlYWs7CisJCXJldCA9IHRtcDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgaHBldF9hbGxvYyhzdHJ1Y3QgaHBldF9kYXRhICpoZHApCiB7CiAJdTY0IGNhcCwgbWNmZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYwppbmRleCAxMGFkNDFiLi5kY2QzNTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS90aW1lcmlvbWVtLXJuZy5jCkBAIC05MCwxMCArOTAsMzAgQEAKIAogc3RhdGljIGludCBfX2luaXQgdGltZXJpb21lbV9ybmdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgKm1lbTsKIAlpbnQgcmV0OwogCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCW1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAorCQkJCSBwZGV2LT5uYW1lKTsKKwlpZiAobWVtID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbWVtKTsKKwogCXRpbWVyaW9tZW1fcm5nX2RhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAorCXRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MgPSBpb3JlbWFwKHJlcy0+c3RhcnQsCisJCQkJCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoIXRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW9yZW1hcDsKKwl9CisKIAlpZiAodGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kICE9IDAKIAkJJiYgdXNlY3NfdG9famlmZmllcyh0aW1lcmlvbWVtX3JuZ19kYXRhLT5wZXJpb2QpID4gMCkgewogCQl0aW1lcmlvbWVtX3JuZ190aW1lci5leHBpcmVzID0gamlmZmllczsKQEAgLTEwNCwyMyArMTI0LDM0IEBACiAJdGltZXJpb21lbV9ybmdfZGF0YS0+cHJlc2VudCA9IDE7CiAKIAlyZXQgPSBod3JuZ19yZWdpc3RlcigmdGltZXJpb21lbV9ybmdfb3BzKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JsZW0gcmVnaXN0ZXJpbmdcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZWdpc3RlcjsKIAogCWRldl9pbmZvKCZwZGV2LT5kZXYsICIzMmJpdHMgZnJvbSAweCVwIEAgJWR1c1xuIiwKIAkJCXRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MsCiAJCQl0aW1lcmlvbWVtX3JuZ19kYXRhLT5wZXJpb2QpOwogCiAJcmV0dXJuIDA7CisKK2Vycl9yZWdpc3RlcjoKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJwcm9ibGVtIHJlZ2lzdGVyaW5nXG4iKTsKKwlpb3VubWFwKHRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MpOworZXJyX2lvcmVtYXA6CisJcmVsZWFzZV9yZXNvdXJjZShtZW0pOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgdGltZXJpb21lbV9ybmdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJc3RydWN0IHJlc291cmNlICptZW0gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKIAlkZWxfdGltZXJfc3luYygmdGltZXJpb21lbV9ybmdfdGltZXIpOwogCWh3cm5nX3VucmVnaXN0ZXIoJnRpbWVyaW9tZW1fcm5nX29wcyk7CiAKKwlpb3VubWFwKHRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MpOworCXJlbGVhc2VfcmVzb3VyY2UobWVtKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYyBiL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCmluZGV4IDcwZTBlYmMuLmFmZDkyNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCkBAIC0xMzksNyArMTM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcDJtZW1fcHJvY19mb3BzOwotc3RhdGljIGludCBpcDJfcmVhZF9wcm9jKGNoYXIgKiwgY2hhciAqKiwgb2ZmX3QsIGludCwgaW50ICosIHZvaWQgKiApOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXAyX3Byb2NfZm9wczsKIAogLyoqKioqKioqKioqKioqKioqKioqLwogLyogVHlwZSBEZWZpbml0aW9ucyAqLwpAQCAtNDQ2LDkgKzQ0Niw5IEBACiAJLnN0b3AgICAgICAgICAgICA9IGlwMl9zdG9wLAogCS5zdGFydCAgICAgICAgICAgPSBpcDJfc3RhcnQsCiAJLmhhbmd1cCAgICAgICAgICA9IGlwMl9oYW5ndXAsCi0JLnJlYWRfcHJvYyAgICAgICA9IGlwMl9yZWFkX3Byb2MsCiAJLnRpb2NtZ2V0CSA9IGlwMl90aW9jbWdldCwKIAkudGlvY21zZXQJID0gaXAyX3Rpb2Ntc2V0LAorCS5wcm9jX2ZvcHMJID0gJmlwMl9wcm9jX2ZvcHMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMzAyOSwxOSArMzAyOSwxNyBAQAogICogZGlmZmVyZW50IHNvdXJjZXMgaW5jbHVkaW5nIGlwMm1rZGV2LmMgYW5kIGEgY291cGxlIG9mIG90aGVyIGRyaXZlcnMuCiAgKiBUaGUgYnVncyBhcmUgYWxsIG1pbmUuICA6LSkJPW1odz0KICAqLwotc3RhdGljIGludCBpcDJfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCWludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGlwMl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCWludAlpLCBqLCBib3g7Ci0JaW50CWxlbiA9IDA7CiAJaW50CWJveGVzID0gMDsKIAlpbnQJcG9ydHMgPSAwOwogCWludAl0cG9ydHMgPSAwOwotCW9mZl90CWJlZ2luID0gMDsKIAlpMmVCb3JkU3RyUHRyICBwQjsKKwljaGFyICpzZXA7CiAKLQlsZW4gKz0gc3ByaW50ZihwYWdlLCAiaXAyaW5mbzogMS4wIGRyaXZlcjogJXNcbiIsIHBjVmVyc2lvbiApOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiRHJpdmVyOiBTTWFqb3I9JWQgQ01ham9yPSVkIElNYWpvcj0lZCBNYXhCb2FyZHM9JWQgTWF4Qm94ZXM9JWQgTWF4UG9ydHM9JWRcbiIsCisJc2VxX3ByaW50ZihtLCAiaXAyaW5mbzogMS4wIGRyaXZlcjogJXNcbiIsIHBjVmVyc2lvbik7CisJc2VxX3ByaW50ZihtLCAiRHJpdmVyOiBTTWFqb3I9JWQgQ01ham9yPSVkIElNYWpvcj0lZCBNYXhCb2FyZHM9JWQgTWF4Qm94ZXM9JWQgTWF4UG9ydHM9JWRcbiIsCiAJCQlJUDJfVFRZX01BSk9SLCBJUDJfQ0FMTE9VVF9NQUpPUiwgSVAyX0lQTF9NQUpPUiwKIAkJCUlQMl9NQVhfQk9BUkRTLCBBQlNfTUFYX0JPWEVTLCBBQlNfQklHR0VTVF9CT1gpOwogCkBAIC0zMDUzLDcgKzMwNTEsOCBAQAogCQkJc3dpdGNoKCBwQi0+aTJlUG9tLmUucG9ySUQgJiB+UE9SX0lEX1JFU0VSVkVEICkgCiAJCQl7CiAJCQljYXNlIFBPUl9JRF9GSUlFWDoKLQkJCQlsZW4gKz0gc3ByaW50ZiggcGFnZStsZW4sICJCb2FyZCAlZDogRVggcG9ydHM9IiwgaSApOworCQkJCXNlcV9wcmludGYobSwgIkJvYXJkICVkOiBFWCBwb3J0cz0iLCBpKTsKKwkJCQlzZXAgPSAiIjsKIAkJCQlmb3IoIGJveCA9IDA7IGJveCA8IEFCU19NQVhfQk9YRVM7ICsrYm94ICkKIAkJCQl7CiAJCQkJCXBvcnRzID0gMDsKQEAgLTMwNjUsNzkgKzMwNjQsNzQgQEAKIAkJCQkJCQkrK3BvcnRzOwogCQkJCQkJfQogCQkJCQl9Ci0JCQkJCWxlbiArPSBzcHJpbnRmKCBwYWdlK2xlbiwgIiVkLCIsIHBvcnRzICk7CisJCQkJCXNlcV9wcmludGYobSwgIiVzJWQiLCBzZXAsIHBvcnRzKTsKKwkJCQkJc2VwID0gIiwiOwogCQkJCQl0cG9ydHMgKz0gcG9ydHM7CiAJCQkJfQotCi0JCQkJLS1sZW47CS8qIEJhY2t1cCBvdmVyIHRoYXQgbGFzdCBjb21tYSAqLwotCi0JCQkJbGVuICs9IHNwcmludGYoIHBhZ2UrbGVuLCAiIGJveGVzPSVkIHdpZHRoPSVkIiwgYm94ZXMsIHBCLT5pMmVEYXRhV2lkdGgxNiA/IDE2IDogOCApOworCQkJCXNlcV9wcmludGYobSwgIiBib3hlcz0lZCB3aWR0aD0lZCIsIGJveGVzLCBwQi0+aTJlRGF0YVdpZHRoMTYgPyAxNiA6IDgpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFBPUl9JRF9JSV80OgotCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiQm9hcmQgJWQ6IElTQS00IHBvcnRzPTQgYm94ZXM9MSIsIGkgKTsKKwkJCQlzZXFfcHJpbnRmKG0sICJCb2FyZCAlZDogSVNBLTQgcG9ydHM9NCBib3hlcz0xIiwgaSk7CiAJCQkJdHBvcnRzID0gcG9ydHMgPSA0OwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFBPUl9JRF9JSV84OgotCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiQm9hcmQgJWQ6IElTQS04LXN0ZCBwb3J0cz04IGJveGVzPTEiLCBpICk7CisJCQkJc2VxX3ByaW50ZihtLCAiQm9hcmQgJWQ6IElTQS04LXN0ZCBwb3J0cz04IGJveGVzPTEiLCBpKTsKIAkJCQl0cG9ydHMgPSBwb3J0cyA9IDg7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgUE9SX0lEX0lJXzhSOgotCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiQm9hcmQgJWQ6IElTQS04LVJKMTEgcG9ydHM9OCBib3hlcz0xIiwgaSApOworCQkJCXNlcV9wcmludGYobSwgIkJvYXJkICVkOiBJU0EtOC1SSjExIHBvcnRzPTggYm94ZXM9MSIsIGkpOwogCQkJCXRwb3J0cyA9IHBvcnRzID0gODsKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKLQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIkJvYXJkICVkOiB1bmtub3duIiwgaSApOworCQkJCXNlcV9wcmludGYobSwgIkJvYXJkICVkOiB1bmtub3duIiwgaSk7CiAJCQkJLyogRG9uJ3QgdHJ5IGFuZCBwcm9iZSBmb3IgbWlub3IgbnVtYmVycyAqLwogCQkJCXRwb3J0cyA9IHBvcnRzID0gMDsKIAkJCX0KIAogCQl9IGVsc2UgewogCQkJLyogRG9uJ3QgdHJ5IGFuZCBwcm9iZSBmb3IgbWlub3IgbnVtYmVycyAqLwotCQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICJCb2FyZCAlZDogdmFjYW50IiwgaSApOworCQkJc2VxX3ByaW50ZihtLCAiQm9hcmQgJWQ6IHZhY2FudCIsIGkpOwogCQkJdHBvcnRzID0gcG9ydHMgPSAwOwogCQl9CiAKIAkJaWYoIHRwb3J0cyApIHsKLQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiIG1pbm9ycz0iICk7Ci0KKwkJCXNlcV9wdXRzKG0sICIgbWlub3JzPSIpOworCQkJc2VwID0gIiI7CiAJCQlmb3IgKCBib3ggPSAwOyBib3ggPCBBQlNfTUFYX0JPWEVTOyArK2JveCApCiAJCQl7CiAJCQkJZm9yICggaiA9IDA7IGogPCBBQlNfQklHR0VTVF9CT1g7ICsraiApCiAJCQkJewogCQkJCQlpZiAoIHBCLT5pMmVDaGFubmVsTWFwW2JveF0gJiAoMSA8PCBqKSApCiAJCQkJCXsKLQkJCQkJCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwiJWQsIiwKKwkJCQkJCXNlcV9wcmludGYobSwgIiVzJWQiLCBzZXAsCiAJCQkJCQkJaiArIEFCU19CSUdHRVNUX0JPWCAqCiAJCQkJCQkJKGJveCtpKkFCU19NQVhfQk9YRVMpKTsKKwkJCQkJCXNlcCA9ICIsIjsKIAkJCQkJfQogCQkJCX0KIAkJCX0KLQotCQkJcGFnZVsgbGVuIC0gMSBdID0gJ1xuJzsJLyogT3ZlcndyaXRlIHRoYXQgbGFzdCBjb21tYSAqLwotCQl9IGVsc2UgewotCQkJbGVuICs9IHNwcmludGYgKHBhZ2UrbGVuLCJcbiIgKTsKIAkJfQotCi0JCWlmIChsZW4rYmVnaW4gPiBvZmYrY291bnQpCi0JCQlicmVhazsKLQkJaWYgKGxlbitiZWdpbiA8IG9mZikgewotCQkJYmVnaW4gKz0gbGVuOwotCQkJbGVuID0gMDsKLQkJfQorCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAl9Ci0KLQlpZiAoaSA+PSBJUDJfTUFYX0JPQVJEUykKLQkJKmVvZiA9IDE7Ci0JaWYgKG9mZiA+PSBsZW4rYmVnaW4pCi0JCXJldHVybiAwOwotCi0JKnN0YXJ0ID0gcGFnZSArIChvZmYtYmVnaW4pOwotCXJldHVybiAoKGNvdW50IDwgYmVnaW4rbGVuLW9mZikgPyBjb3VudCA6IGJlZ2luK2xlbi1vZmYpOworCXJldHVybiAwOwogIH0KKworc3RhdGljIGludCBpcDJfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpcDJfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXAyX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaXAyX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKICAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBGdW5jdGlvbjogICBpcDJ0cmFjZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCmluZGV4IDVjM2RjNmIuLmZmZjE5ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvY2RrLmg+CiAjaW5jbHVkZSA8bGludXgvY29tc3RhdHMuaD4KICNpbmNsdWRlIDxsaW51eC9pc3RhbGxpb24uaD4KQEAgLTYxMyw3ICs2MTQsNiBAQAogc3RhdGljIHZvaWQJc3RsaV93YWl0dW50aWxzZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KTsKIHN0YXRpYyB2b2lkCXN0bGlfc2VuZHhjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpOwogc3RhdGljIHZvaWQJc3RsaV9oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7Ci1zdGF0aWMgaW50CXN0bGlfcG9ydGluZm8oc3RydWN0IHN0bGlicmQgKmJyZHAsIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIGludCBwb3J0bnIsIGNoYXIgKnBvcyk7CiAKIHN0YXRpYyBpbnQJc3RsaV9icmRpbml0KHN0cnVjdCBzdGxpYnJkICpicmRwKTsKIHN0YXRpYyBpbnQJc3RsaV9zdGFydGJyZChzdHJ1Y3Qgc3RsaWJyZCAqYnJkcCk7CkBAIC0xODkzLDIwICsxODkzLDEwIEBACiAJc3RsaV9jbWR3YWl0KGJyZHAsIHBvcnRwLCBBX1BPUlRDVFJMLCAmYWN0cmwsIHNpemVvZihhc3ljdHJsX3QpLCAwKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lCU1BWExJTkUJCTgwCi0KLS8qCi0gKglGb3JtYXQgaW5mbyBmb3IgYSBzcGVjaWZpZWQgcG9ydC4gVGhlIGxpbmUgaXMgZGVsaWJlcmF0ZWx5IGxpbWl0ZWQKLSAqCXRvIDgwIGNoYXJhY3RlcnMuIChJZiBpdCBpcyB0b28gbG9uZyBpdCB3aWxsIGJlIHRydW5jYXRlZCwgaWYgdG9vCi0gKglzaG9ydCB0aGVuIHBhZGRlZCB3aXRoIHNwYWNlcykuCi0gKi8KLQotc3RhdGljIGludCBzdGxpX3BvcnRpbmZvKHN0cnVjdCBzdGxpYnJkICpicmRwLCBzdHJ1Y3Qgc3RsaXBvcnQgKnBvcnRwLCBpbnQgcG9ydG5yLCBjaGFyICpwb3MpCitzdGF0aWMgdm9pZCBzdGxpX3BvcnRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHN0bGlicmQgKmJyZHAsIHN0cnVjdCBzdGxpcG9ydCAqcG9ydHAsIGludCBwb3J0bnIpCiB7Ci0JY2hhciAqc3AsICp1YXJ0OwotCWludCByYywgY250OworCWNoYXIgKnVhcnQ7CisJaW50IHJjOwogCiAJcmMgPSBzdGxpX3BvcnRjbWRzdGF0cyhOVUxMLCBwb3J0cCk7CiAKQEAgLTE5MTgsNDQgKzE5MDgsNTAgQEAKIAkJZGVmYXVsdDp1YXJ0ID0gIkNEMTQwMCI7IGJyZWFrOwogCQl9CiAJfQotCi0Jc3AgPSBwb3M7Ci0Jc3AgKz0gc3ByaW50ZihzcCwgIiVkOiB1YXJ0OiVzICIsIHBvcnRuciwgdWFydCk7CisJc2VxX3ByaW50ZihtLCAiJWQ6IHVhcnQ6JXMgIiwgcG9ydG5yLCB1YXJ0KTsKIAogCWlmICgoYnJkcC0+c3RhdGUgJiBCU1RfU1RBUlRFRCkgJiYgKHJjID49IDApKSB7Ci0JCXNwICs9IHNwcmludGYoc3AsICJ0eDolZCByeDolZCIsIChpbnQpIHN0bGlfY29tc3RhdHMudHh0b3RhbCwKKwkJY2hhciBzZXA7CisKKwkJc2VxX3ByaW50ZihtLCAidHg6JWQgcng6JWQiLCAoaW50KSBzdGxpX2NvbXN0YXRzLnR4dG90YWwsCiAJCQkoaW50KSBzdGxpX2NvbXN0YXRzLnJ4dG90YWwpOwogCiAJCWlmIChzdGxpX2NvbXN0YXRzLnJ4ZnJhbWluZykKLQkJCXNwICs9IHNwcmludGYoc3AsICIgZmU6JWQiLAorCQkJc2VxX3ByaW50ZihtLCAiIGZlOiVkIiwKIAkJCQkoaW50KSBzdGxpX2NvbXN0YXRzLnJ4ZnJhbWluZyk7CiAJCWlmIChzdGxpX2NvbXN0YXRzLnJ4cGFyaXR5KQotCQkJc3AgKz0gc3ByaW50ZihzcCwgIiBwZTolZCIsCisJCQlzZXFfcHJpbnRmKG0sICIgcGU6JWQiLAogCQkJCShpbnQpIHN0bGlfY29tc3RhdHMucnhwYXJpdHkpOwogCQlpZiAoc3RsaV9jb21zdGF0cy5yeGJyZWFrcykKLQkJCXNwICs9IHNwcmludGYoc3AsICIgYnJrOiVkIiwKKwkJCXNlcV9wcmludGYobSwgIiBicms6JWQiLAogCQkJCShpbnQpIHN0bGlfY29tc3RhdHMucnhicmVha3MpOwogCQlpZiAoc3RsaV9jb21zdGF0cy5yeG92ZXJydW4pCi0JCQlzcCArPSBzcHJpbnRmKHNwLCAiIG9lOiVkIiwKKwkJCXNlcV9wcmludGYobSwgIiBvZTolZCIsCiAJCQkJKGludCkgc3RsaV9jb21zdGF0cy5yeG92ZXJydW4pOwogCi0JCWNudCA9IHNwcmludGYoc3AsICIlcyVzJXMlcyVzICIsCi0JCQkoc3RsaV9jb21zdGF0cy5zaWduYWxzICYgVElPQ01fUlRTKSA/ICJ8UlRTIiA6ICIiLAotCQkJKHN0bGlfY29tc3RhdHMuc2lnbmFscyAmIFRJT0NNX0NUUykgPyAifENUUyIgOiAiIiwKLQkJCShzdGxpX2NvbXN0YXRzLnNpZ25hbHMgJiBUSU9DTV9EVFIpID8gInxEVFIiIDogIiIsCi0JCQkoc3RsaV9jb21zdGF0cy5zaWduYWxzICYgVElPQ01fQ0QpID8gInxEQ0QiIDogIiIsCi0JCQkoc3RsaV9jb21zdGF0cy5zaWduYWxzICYgVElPQ01fRFNSKSA/ICJ8RFNSIiA6ICIiKTsKLQkJKnNwID0gJyAnOwotCQlzcCArPSBjbnQ7CisJCXNlcCA9ICcgJzsKKwkJaWYgKHN0bGlfY29tc3RhdHMuc2lnbmFscyAmIFRJT0NNX1JUUykgeworCQkJc2VxX3ByaW50ZihtLCAiJWMlcyIsIHNlcCwgIlJUUyIpOworCQkJc2VwID0gJ3wnOworCQl9CisJCWlmIChzdGxpX2NvbXN0YXRzLnNpZ25hbHMgJiBUSU9DTV9DVFMpIHsKKwkJCXNlcV9wcmludGYobSwgIiVjJXMiLCBzZXAsICJDVFMiKTsKKwkJCXNlcCA9ICd8JzsKKwkJfQorCQlpZiAoc3RsaV9jb21zdGF0cy5zaWduYWxzICYgVElPQ01fRFRSKSB7CisJCQlzZXFfcHJpbnRmKG0sICIlYyVzIiwgc2VwLCAiRFRSIik7CisJCQlzZXAgPSAnfCc7CisJCX0KKwkJaWYgKHN0bGlfY29tc3RhdHMuc2lnbmFscyAmIFRJT0NNX0NEKSB7CisJCQlzZXFfcHJpbnRmKG0sICIlYyVzIiwgc2VwLCAiRENEIik7CisJCQlzZXAgPSAnfCc7CisJCX0KKwkJaWYgKHN0bGlfY29tc3RhdHMuc2lnbmFscyAmIFRJT0NNX0RTUikgeworCQkJc2VxX3ByaW50ZihtLCAiJWMlcyIsIHNlcCwgIkRTUiIpOworCQkJc2VwID0gJ3wnOworCQl9CiAJfQotCi0JZm9yIChjbnQgPSAoc3AgLSBwb3MpOyAoY250IDwgKE1BWExJTkUgLSAxKSk7IGNudCsrKQotCQkqc3ArKyA9ICcgJzsKLQlpZiAoY250ID49IE1BWExJTkUpCi0JCXBvc1soTUFYTElORSAtIDIpXSA9ICcrJzsKLQlwb3NbKE1BWExJTkUgLSAxKV0gPSAnXG4nOwotCi0JcmV0dXJuKE1BWExJTkUpOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTY0LDI2ICsxOTYwLDE1IEBACiAgKglQb3J0IGluZm8sIHJlYWQgZnJvbSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0uCiAgKi8KIAotc3RhdGljIGludCBzdGxpX3JlYWRwcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBzdGxpX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IHN0bGlicmQgKmJyZHA7CiAJc3RydWN0IHN0bGlwb3J0ICpwb3J0cDsKIAl1bnNpZ25lZCBpbnQgYnJkbnIsIHBvcnRuciwgdG90YWxwb3J0OwotCWludCBjdXJvZmYsIG1heG9mZjsKLQljaGFyICpwb3M7CiAKLQlwb3MgPSBwYWdlOwogCXRvdGFscG9ydCA9IDA7Ci0JY3Vyb2ZmID0gMDsKIAotCWlmIChvZmYgPT0gMCkgewotCQlwb3MgKz0gc3ByaW50Zihwb3MsICIlczogdmVyc2lvbiAlcyIsIHN0bGlfZHJ2dGl0bGUsCi0JCQlzdGxpX2RydnZlcnNpb24pOwotCQl3aGlsZSAocG9zIDwgKHBhZ2UgKyBNQVhMSU5FIC0gMSkpCi0JCQkqcG9zKysgPSAnICc7Ci0JCSpwb3MrKyA9ICdcbic7Ci0JfQotCWN1cm9mZiA9ICBNQVhMSU5FOworCXNlcV9wcmludGYobSwgIiVzOiB2ZXJzaW9uICVzXG4iLCBzdGxpX2RydnRpdGxlLCBzdGxpX2RydnZlcnNpb24pOwogCiAvKgogICoJV2Ugc2NhbiB0aHJvdWdoIGZvciBlYWNoIGJvYXJkLCBwYW5lbCBhbmQgcG9ydC4gVGhlIG9mZnNldCBpcwpAQCAtMTk5NiwzMyArMTk4MSwzMSBAQAogCQlpZiAoYnJkcC0+c3RhdGUgPT0gMCkKIAkJCWNvbnRpbnVlOwogCi0JCW1heG9mZiA9IGN1cm9mZiArIChicmRwLT5ucnBvcnRzICogTUFYTElORSk7Ci0JCWlmIChvZmYgPj0gbWF4b2ZmKSB7Ci0JCQljdXJvZmYgPSBtYXhvZmY7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCXRvdGFscG9ydCA9IGJyZG5yICogU1RMX01BWFBPUlRTOwogCQlmb3IgKHBvcnRuciA9IDA7IChwb3J0bnIgPCBicmRwLT5ucnBvcnRzKTsgcG9ydG5yKyssCiAJCSAgICB0b3RhbHBvcnQrKykgewogCQkJcG9ydHAgPSBicmRwLT5wb3J0c1twb3J0bnJdOwogCQkJaWYgKHBvcnRwID09IE5VTEwpCiAJCQkJY29udGludWU7Ci0JCQlpZiAob2ZmID49IChjdXJvZmYgKz0gTUFYTElORSkpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoKHBvcyAtIHBhZ2UgKyBNQVhMSU5FKSA+IGNvdW50KQotCQkJCWdvdG8gc3RsaV9yZWFkZG9uZTsKLQkJCXBvcyArPSBzdGxpX3BvcnRpbmZvKGJyZHAsIHBvcnRwLCB0b3RhbHBvcnQsIHBvcyk7CisJCQlzdGxpX3BvcnRpbmZvKG0sIGJyZHAsIHBvcnRwLCB0b3RhbHBvcnQpOwogCQl9CiAJfQotCi0JKmVvZiA9IDE7Ci0KLXN0bGlfcmVhZGRvbmU6Ci0JKnN0YXJ0ID0gcGFnZTsKLQlyZXR1cm4ocG9zIC0gcGFnZSk7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3RsaV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHN0bGlfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RsaV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHN0bGlfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCkBAIC00NDI3LDkgKzQ0MTAsOSBAQAogCS5icmVha19jdGwgPSBzdGxpX2JyZWFrY3RsLAogCS53YWl0X3VudGlsX3NlbnQgPSBzdGxpX3dhaXR1bnRpbHNlbnQsCiAJLnNlbmRfeGNoYXIgPSBzdGxpX3NlbmR4Y2hhciwKLQkucmVhZF9wcm9jID0gc3RsaV9yZWFkcHJvYywKIAkudGlvY21nZXQgPSBzdGxpX3Rpb2NtZ2V0LAogCS50aW9jbXNldCA9IHN0bGlfdGlvY21zZXQsCisJLnByb2NfZm9wcyA9ICZzdGxpX3Byb2NfZm9wcywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBzdGxpX3BvcnRfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCmluZGV4IDU2MDhhMWUuLjE5ZDc5ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTI2MTksMTMgKzI2MjAsMTIgQEAKICAqIC9wcm9jIGZzIHJvdXRpbmVzLi4uLgogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGxpbmVfaW5mbyhjaGFyICpidWYsIE1HU0xQQ19JTkZPICppbmZvKQorc3RhdGljIGlubGluZSB2b2lkIGxpbmVfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIE1HU0xQQ19JTkZPICppbmZvKQogewogCWNoYXIJc3RhdF9idWZbMzBdOwotCWludAlyZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXJldCA9IHNwcmludGYoYnVmLCAiJXM6aW86JTA0WCBpcnE6JWQiLAorCXNlcV9wcmludGYobSwgIiVzOmlvOiUwNFggaXJxOiVkIiwKIAkJICAgICAgaW5mby0+ZGV2aWNlX25hbWUsIGluZm8tPmlvX2Jhc2UsIGluZm8tPmlycV9sZXZlbCk7CiAKIAkvKiBvdXRwdXQgY3VycmVudCBzZXJpYWwgc2lnbmFsIHN0YXRlcyAqLwpAQCAtMjY0OSw3NSArMjY0OSw3MCBAQAogCQlzdHJjYXQoc3RhdF9idWYsICJ8UkkiKTsKIAogCWlmIChpbmZvLT5wYXJhbXMubW9kZSA9PSBNR1NMX01PREVfSERMQykgewotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIEhETEMgdHhvazolZCByeG9rOiVkIiwKKwkJc2VxX3ByaW50ZihtLCAiIEhETEMgdHhvazolZCByeG9rOiVkIiwKIAkJCSAgICAgIGluZm8tPmljb3VudC50eG9rLCBpbmZvLT5pY291bnQucnhvayk7CiAJCWlmIChpbmZvLT5pY291bnQudHh1bmRlcikKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgdHh1bmRlcjolZCIsIGluZm8tPmljb3VudC50eHVuZGVyKTsKKwkJCXNlcV9wcmludGYobSwgIiB0eHVuZGVyOiVkIiwgaW5mby0+aWNvdW50LnR4dW5kZXIpOwogCQlpZiAoaW5mby0+aWNvdW50LnR4YWJvcnQpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHR4YWJvcnQ6JWQiLCBpbmZvLT5pY291bnQudHhhYm9ydCk7CisJCQlzZXFfcHJpbnRmKG0sICIgdHhhYm9ydDolZCIsIGluZm8tPmljb3VudC50eGFib3J0KTsKIAkJaWYgKGluZm8tPmljb3VudC5yeHNob3J0KQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiByeHNob3J0OiVkIiwgaW5mby0+aWNvdW50LnJ4c2hvcnQpOworCQkJc2VxX3ByaW50ZihtLCAiIHJ4c2hvcnQ6JWQiLCBpbmZvLT5pY291bnQucnhzaG9ydCk7CiAJCWlmIChpbmZvLT5pY291bnQucnhsb25nKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiByeGxvbmc6JWQiLCBpbmZvLT5pY291bnQucnhsb25nKTsKKwkJCXNlcV9wcmludGYobSwgIiByeGxvbmc6JWQiLCBpbmZvLT5pY291bnQucnhsb25nKTsKIAkJaWYgKGluZm8tPmljb3VudC5yeG92ZXIpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHJ4b3ZlcjolZCIsIGluZm8tPmljb3VudC5yeG92ZXIpOworCQkJc2VxX3ByaW50ZihtLCAiIHJ4b3ZlcjolZCIsIGluZm8tPmljb3VudC5yeG92ZXIpOwogCQlpZiAoaW5mby0+aWNvdW50LnJ4Y3JjKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiByeGNyYzolZCIsIGluZm8tPmljb3VudC5yeGNyYyk7CisJCQlzZXFfcHJpbnRmKG0sICIgcnhjcmM6JWQiLCBpbmZvLT5pY291bnQucnhjcmMpOwogCX0gZWxzZSB7Ci0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgQVNZTkMgdHg6JWQgcng6JWQiLAorCQlzZXFfcHJpbnRmKG0sICIgQVNZTkMgdHg6JWQgcng6JWQiLAogCQkJICAgICAgaW5mby0+aWNvdW50LnR4LCBpbmZvLT5pY291bnQucngpOwogCQlpZiAoaW5mby0+aWNvdW50LmZyYW1lKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBmZTolZCIsIGluZm8tPmljb3VudC5mcmFtZSk7CisJCQlzZXFfcHJpbnRmKG0sICIgZmU6JWQiLCBpbmZvLT5pY291bnQuZnJhbWUpOwogCQlpZiAoaW5mby0+aWNvdW50LnBhcml0eSkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcGU6JWQiLCBpbmZvLT5pY291bnQucGFyaXR5KTsKKwkJCXNlcV9wcmludGYobSwgIiBwZTolZCIsIGluZm8tPmljb3VudC5wYXJpdHkpOwogCQlpZiAoaW5mby0+aWNvdW50LmJyaykKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgYnJrOiVkIiwgaW5mby0+aWNvdW50LmJyayk7CisJCQlzZXFfcHJpbnRmKG0sICIgYnJrOiVkIiwgaW5mby0+aWNvdW50LmJyayk7CiAJCWlmIChpbmZvLT5pY291bnQub3ZlcnJ1bikKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgb2U6JWQiLCBpbmZvLT5pY291bnQub3ZlcnJ1bik7CisJCQlzZXFfcHJpbnRmKG0sICIgb2U6JWQiLCBpbmZvLT5pY291bnQub3ZlcnJ1bik7CiAJfQogCiAJLyogQXBwZW5kIHNlcmlhbCBzaWduYWwgc3RhdHVzIHRvIGVuZCAqLwotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgJXNcbiIsIHN0YXRfYnVmKzEpOworCXNlcV9wcmludGYobSwgIiAlc1xuIiwgc3RhdF9idWYrMSk7CiAKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAidHhhY3RpdmU9JWQgYmhfcmVxPSVkIGJoX3J1bj0lZCBwZW5kaW5nX2JoPSV4XG4iLAorCXNlcV9wcmludGYobSwgInR4YWN0aXZlPSVkIGJoX3JlcT0lZCBiaF9ydW49JWQgcGVuZGluZ19iaD0leFxuIiwKIAkJICAgICAgIGluZm8tPnR4X2FjdGl2ZSxpbmZvLT5iaF9yZXF1ZXN0ZWQsaW5mby0+YmhfcnVubmluZywKIAkJICAgICAgIGluZm8tPnBlbmRpbmdfYmgpOwotCi0JcmV0dXJuIHJldDsKIH0KIAogLyogQ2FsbGVkIHRvIHByaW50IGluZm9ybWF0aW9uIGFib3V0IGRldmljZXMKICAqLwotc3RhdGljIGludCBtZ3NscGNfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCi0JCSBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWdzbHBjX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDAsIGw7Ci0Jb2ZmX3QJYmVnaW4gPSAwOwogCU1HU0xQQ19JTkZPICppbmZvOwogCi0JbGVuICs9IHNwcmludGYocGFnZSwgInN5bmNsaW5rIGRyaXZlcjolc1xuIiwgZHJpdmVyX3ZlcnNpb24pOworCXNlcV9wcmludGYobSwgInN5bmNsaW5rIGRyaXZlcjolc1xuIiwgZHJpdmVyX3ZlcnNpb24pOwogCiAJaW5mbyA9IG1nc2xwY19kZXZpY2VfbGlzdDsKIAl3aGlsZSggaW5mbyApIHsKLQkJbCA9IGxpbmVfaW5mbyhwYWdlICsgbGVuLCBpbmZvKTsKLQkJbGVuICs9IGw7Ci0JCWlmIChsZW4rYmVnaW4gPiBvZmYrY291bnQpCi0JCQlnb3RvIGRvbmU7Ci0JCWlmIChsZW4rYmVnaW4gPCBvZmYpIHsKLQkJCWJlZ2luICs9IGxlbjsKLQkJCWxlbiA9IDA7Ci0JCX0KKwkJbGluZV9pbmZvKG0sIGluZm8pOwogCQlpbmZvID0gaW5mby0+bmV4dF9kZXZpY2U7CiAJfQotCi0JKmVvZiA9IDE7Ci1kb25lOgotCWlmIChvZmYgPj0gbGVuK2JlZ2luKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgKG9mZi1iZWdpbik7Ci0JcmV0dXJuICgoY291bnQgPCBiZWdpbitsZW4tb2ZmKSA/IGNvdW50IDogYmVnaW4rbGVuLW9mZik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWdzbHBjX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWdzbHBjX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1nc2xwY19wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IG1nc2xwY19wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIHN0YXRpYyBpbnQgcnhfYWxsb2NfYnVmZmVycyhNR1NMUENfSU5GTyAqaW5mbykKIHsKIAkvKiBlYWNoIGJ1ZmZlciBoYXMgaGVhZGVyIGFuZCBkYXRhICovCkBAIC0yODYxLDEzICsyODU2LDEzIEBACiAJLnNlbmRfeGNoYXIgPSBtZ3NscGNfc2VuZF94Y2hhciwKIAkuYnJlYWtfY3RsID0gbWdzbHBjX2JyZWFrLAogCS53YWl0X3VudGlsX3NlbnQgPSBtZ3NscGNfd2FpdF91bnRpbF9zZW50LAotCS5yZWFkX3Byb2MgPSBtZ3NscGNfcmVhZF9wcm9jLAogCS5zZXRfdGVybWlvcyA9IG1nc2xwY19zZXRfdGVybWlvcywKIAkuc3RvcCA9IHR4X3BhdXNlLAogCS5zdGFydCA9IHR4X3JlbGVhc2UsCiAJLmhhbmd1cCA9IG1nc2xwY19oYW5ndXAsCiAJLnRpb2NtZ2V0ID0gdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0gdGlvY21zZXQsCisJLnByb2NfZm9wcyA9ICZtZ3NscGNfcHJvY19mb3BzLAogfTsKIAogc3RhdGljIHZvaWQgc3luY2xpbmtfY3NfY2xlYW51cCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCmluZGV4IDdjNDNhZTcuLmY4MjRlZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYW5kb20uYworKysgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKQEAgLTE0ODgsNyArMTQ4OCw4IEBACiAJa2V5cHRyLT5jb3VudCA9IChpcF9jbnQgJiBDT1VOVF9NQVNLKSA8PCBIQVNIX0JJVFM7CiAJc21wX3dtYigpOwogCWlwX2NudCsrOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcmVrZXlfd29yaywgUkVLRVlfSU5URVJWQUwpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcmVrZXlfd29yaywKKwkJCSAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoUkVLRVlfSU5URVJWQUwpKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qga2V5ZGF0YSAqZ2V0X2tleXB0cih2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N0YWxsaW9uLmMgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwppbmRleCBlMWUwZGQ4Li4yYWQ4MTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvc3RhbGxpb24uYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9jZDE0MDAuaD4KICNpbmNsdWRlIDxsaW51eC9zYzI2MTk4Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tc3RhdHMuaD4KQEAgLTEzNzksNTIgKzEzODAsNDcgQEAKIAkJc3RsX3B1dGNoYXIodHR5LCBjaCk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZQlNQVhMSU5FCQk4MAotCi0vKgotICoJRm9ybWF0IGluZm8gZm9yIGEgc3BlY2lmaWVkIHBvcnQuIFRoZSBsaW5lIGlzIGRlbGliZXJhdGVseSBsaW1pdGVkCi0gKgl0byA4MCBjaGFyYWN0ZXJzLiAoSWYgaXQgaXMgdG9vIGxvbmcgaXQgd2lsbCBiZSB0cnVuY2F0ZWQsIGlmIHRvbwotICoJc2hvcnQgdGhlbiBwYWRkZWQgd2l0aCBzcGFjZXMpLgotICovCi0KLXN0YXRpYyBpbnQgc3RsX3BvcnRpbmZvKHN0cnVjdCBzdGxwb3J0ICpwb3J0cCwgaW50IHBvcnRuciwgY2hhciAqcG9zKQorc3RhdGljIHZvaWQgc3RsX3BvcnRpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHN0bHBvcnQgKnBvcnRwLCBpbnQgcG9ydG5yKQogewotCWNoYXIJKnNwOwotCWludAlzaWdzLCBjbnQ7CisJaW50CXNpZ3M7CisJY2hhciBzZXA7CiAKLQlzcCA9IHBvczsKLQlzcCArPSBzcHJpbnRmKHNwLCAiJWQ6IHVhcnQ6JXMgdHg6JWQgcng6JWQiLAorCXNlcV9wcmludGYobSwgIiVkOiB1YXJ0OiVzIHR4OiVkIHJ4OiVkIiwKIAkJcG9ydG5yLCAocG9ydHAtPmh3aWQgPT0gMSkgPyAiU0MyNjE5OCIgOiAiQ0QxNDAwIiwKIAkJKGludCkgcG9ydHAtPnN0YXRzLnR4dG90YWwsIChpbnQpIHBvcnRwLT5zdGF0cy5yeHRvdGFsKTsKIAogCWlmIChwb3J0cC0+c3RhdHMucnhmcmFtaW5nKQotCQlzcCArPSBzcHJpbnRmKHNwLCAiIGZlOiVkIiwgKGludCkgcG9ydHAtPnN0YXRzLnJ4ZnJhbWluZyk7CisJCXNlcV9wcmludGYobSwgIiBmZTolZCIsIChpbnQpIHBvcnRwLT5zdGF0cy5yeGZyYW1pbmcpOwogCWlmIChwb3J0cC0+c3RhdHMucnhwYXJpdHkpCi0JCXNwICs9IHNwcmludGYoc3AsICIgcGU6JWQiLCAoaW50KSBwb3J0cC0+c3RhdHMucnhwYXJpdHkpOworCQlzZXFfcHJpbnRmKG0sICIgcGU6JWQiLCAoaW50KSBwb3J0cC0+c3RhdHMucnhwYXJpdHkpOwogCWlmIChwb3J0cC0+c3RhdHMucnhicmVha3MpCi0JCXNwICs9IHNwcmludGYoc3AsICIgYnJrOiVkIiwgKGludCkgcG9ydHAtPnN0YXRzLnJ4YnJlYWtzKTsKKwkJc2VxX3ByaW50ZihtLCAiIGJyazolZCIsIChpbnQpIHBvcnRwLT5zdGF0cy5yeGJyZWFrcyk7CiAJaWYgKHBvcnRwLT5zdGF0cy5yeG92ZXJydW4pCi0JCXNwICs9IHNwcmludGYoc3AsICIgb2U6JWQiLCAoaW50KSBwb3J0cC0+c3RhdHMucnhvdmVycnVuKTsKKwkJc2VxX3ByaW50ZihtLCAiIG9lOiVkIiwgKGludCkgcG9ydHAtPnN0YXRzLnJ4b3ZlcnJ1bik7CiAKIAlzaWdzID0gc3RsX2dldHNpZ25hbHMocG9ydHApOwotCWNudCA9IHNwcmludGYoc3AsICIlcyVzJXMlcyVzICIsCi0JCShzaWdzICYgVElPQ01fUlRTKSA/ICJ8UlRTIiA6ICIiLAotCQkoc2lncyAmIFRJT0NNX0NUUykgPyAifENUUyIgOiAiIiwKLQkJKHNpZ3MgJiBUSU9DTV9EVFIpID8gInxEVFIiIDogIiIsCi0JCShzaWdzICYgVElPQ01fQ0QpID8gInxEQ0QiIDogIiIsCi0JCShzaWdzICYgVElPQ01fRFNSKSA/ICJ8RFNSIiA6ICIiKTsKLQkqc3AgPSAnICc7Ci0Jc3AgKz0gY250OwotCi0JZm9yIChjbnQgPSBzcCAtIHBvczsgY250IDwgKE1BWExJTkUgLSAxKTsgY250KyspCi0JCSpzcCsrID0gJyAnOwotCWlmIChjbnQgPj0gTUFYTElORSkKLQkJcG9zWyhNQVhMSU5FIC0gMildID0gJysnOwotCXBvc1soTUFYTElORSAtIDEpXSA9ICdcbic7Ci0KLQlyZXR1cm4gTUFYTElORTsKKwlzZXAgPSAnICc7CisJaWYgKHNpZ3MgJiBUSU9DTV9SVFMpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWMlcyIsIHNlcCwgIlJUUyIpOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzaWdzICYgVElPQ01fQ1RTKSB7CisJCXNlcV9wcmludGYobSwgIiVjJXMiLCBzZXAsICJDVFMiKTsKKwkJc2VwID0gJ3wnOworCX0KKwlpZiAoc2lncyAmIFRJT0NNX0RUUikgeworCQlzZXFfcHJpbnRmKG0sICIlYyVzIiwgc2VwLCAiRFRSIik7CisJCXNlcCA9ICd8JzsKKwl9CisJaWYgKHNpZ3MgJiBUSU9DTV9DRCkgeworCQlzZXFfcHJpbnRmKG0sICIlYyVzIiwgc2VwLCAiRENEIik7CisJCXNlcCA9ICd8JzsKKwl9CisJaWYgKHNpZ3MgJiBUSU9DTV9EU1IpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWMlcyIsIHNlcCwgIkRTUiIpOworCQlzZXAgPSAnfCc7CisJfQorCXNlcV9wdXRjKG0sICdcbicpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNDMzLDMwICsxNDI5LDE3IEBACiAgKglQb3J0IGluZm8sIHJlYWQgZnJvbSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0uCiAgKi8KIAotc3RhdGljIGludCBzdGxfcmVhZHByb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHN0bF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXN0cnVjdCBzdGxicmQJKmJyZHA7CiAJc3RydWN0IHN0bHBhbmVsCSpwYW5lbHA7CiAJc3RydWN0IHN0bHBvcnQJKnBvcnRwOwogCXVuc2lnbmVkIGludAlicmRuciwgcGFuZWxuciwgcG9ydG5yOwotCWludAkJdG90YWxwb3J0LCBjdXJvZmYsIG1heG9mZjsKLQljaGFyCQkqcG9zOworCWludAkJdG90YWxwb3J0OwogCi0JcHJfZGVidWcoInN0bF9yZWFkcHJvYyhwYWdlPSVwLHN0YXJ0PSVwLG9mZj0lbHgsY291bnQ9JWQsZW9mPSVwLCIKLQkJImRhdGE9JXBcbiIsIHBhZ2UsIHN0YXJ0LCBvZmYsIGNvdW50LCBlb2YsIGRhdGEpOwotCi0JcG9zID0gcGFnZTsKIAl0b3RhbHBvcnQgPSAwOwotCWN1cm9mZiA9IDA7CiAKLQlpZiAob2ZmID09IDApIHsKLQkJcG9zICs9IHNwcmludGYocG9zLCAiJXM6IHZlcnNpb24gJXMiLCBzdGxfZHJ2dGl0bGUsCi0JCQlzdGxfZHJ2dmVyc2lvbik7Ci0JCXdoaWxlIChwb3MgPCAocGFnZSArIE1BWExJTkUgLSAxKSkKLQkJCSpwb3MrKyA9ICcgJzsKLQkJKnBvcysrID0gJ1xuJzsKLQl9Ci0JY3Vyb2ZmID0gIE1BWExJTkU7CisJc2VxX3ByaW50ZihtLCAiJXM6IHZlcnNpb24gJXNcbiIsIHN0bF9kcnZ0aXRsZSwgc3RsX2RydnZlcnNpb24pOwogCiAvKgogICoJV2Ugc2NhbiB0aHJvdWdoIGZvciBlYWNoIGJvYXJkLCBwYW5lbCBhbmQgcG9ydC4gVGhlIG9mZnNldCBpcwpAQCAtMTQ2OSw0NiArMTQ1MiwzNyBAQAogCQlpZiAoYnJkcC0+c3RhdGUgPT0gMCkKIAkJCWNvbnRpbnVlOwogCi0JCW1heG9mZiA9IGN1cm9mZiArIChicmRwLT5ucnBvcnRzICogTUFYTElORSk7Ci0JCWlmIChvZmYgPj0gbWF4b2ZmKSB7Ci0JCQljdXJvZmYgPSBtYXhvZmY7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCXRvdGFscG9ydCA9IGJyZG5yICogU1RMX01BWFBPUlRTOwogCQlmb3IgKHBhbmVsbnIgPSAwOyBwYW5lbG5yIDwgYnJkcC0+bnJwYW5lbHM7IHBhbmVsbnIrKykgewogCQkJcGFuZWxwID0gYnJkcC0+cGFuZWxzW3BhbmVsbnJdOwogCQkJaWYgKHBhbmVscCA9PSBOVUxMKQogCQkJCWNvbnRpbnVlOwogCi0JCQltYXhvZmYgPSBjdXJvZmYgKyAocGFuZWxwLT5ucnBvcnRzICogTUFYTElORSk7Ci0JCQlpZiAob2ZmID49IG1heG9mZikgewotCQkJCWN1cm9mZiA9IG1heG9mZjsKLQkJCQl0b3RhbHBvcnQgKz0gcGFuZWxwLT5ucnBvcnRzOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCiAJCQlmb3IgKHBvcnRuciA9IDA7IHBvcnRuciA8IHBhbmVscC0+bnJwb3J0czsgcG9ydG5yKyssCiAJCQkgICAgdG90YWxwb3J0KyspIHsKIAkJCQlwb3J0cCA9IHBhbmVscC0+cG9ydHNbcG9ydG5yXTsKIAkJCQlpZiAocG9ydHAgPT0gTlVMTCkKIAkJCQkJY29udGludWU7Ci0JCQkJaWYgKG9mZiA+PSAoY3Vyb2ZmICs9IE1BWExJTkUpKQotCQkJCQljb250aW51ZTsKLQkJCQlpZiAoKHBvcyAtIHBhZ2UgKyBNQVhMSU5FKSA+IGNvdW50KQotCQkJCQlnb3RvIHN0bF9yZWFkZG9uZTsKLQkJCQlwb3MgKz0gc3RsX3BvcnRpbmZvKHBvcnRwLCB0b3RhbHBvcnQsIHBvcyk7CisJCQkJc3RsX3BvcnRpbmZvKG0sIHBvcnRwLCB0b3RhbHBvcnQpOwogCQkJfQogCQl9CiAJfQotCi0JKmVvZiA9IDE7Ci0KLXN0bF9yZWFkZG9uZToKLQkqc3RhcnQgPSBwYWdlOwotCXJldHVybiBwb3MgLSBwYWdlOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHN0bF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHN0bF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzdGxfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBzdGxfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCkBAIC0yNTY2LDkgKzI1NDAsOSBAQAogCS5icmVha19jdGwgPSBzdGxfYnJlYWtjdGwsCiAJLndhaXRfdW50aWxfc2VudCA9IHN0bF93YWl0dW50aWxzZW50LAogCS5zZW5kX3hjaGFyID0gc3RsX3NlbmR4Y2hhciwKLQkucmVhZF9wcm9jID0gc3RsX3JlYWRwcm9jLAogCS50aW9jbWdldCA9IHN0bF90aW9jbWdldCwKIAkudGlvY21zZXQgPSBzdGxfdGlvY21zZXQsCisJLnByb2NfZm9wcyA9ICZzdGxfcHJvY19mb3BzLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfcG9ydF9vcGVyYXRpb25zIHN0bF9wb3J0X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKaW5kZXggMDA1N2E4Zi4uYWZkMGIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKQEAgLTc5LDYgKzc5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CkBAIC0zNDU5LDE4ICszNDYwLDE3IEBACiAgKiAvcHJvYyBmcyByb3V0aW5lcy4uLi4KICAqLwogCi1zdGF0aWMgaW5saW5lIGludCBsaW5lX2luZm8oY2hhciAqYnVmLCBzdHJ1Y3QgbWdzbF9zdHJ1Y3QgKmluZm8pCitzdGF0aWMgaW5saW5lIHZvaWQgbGluZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1nc2xfc3RydWN0ICppbmZvKQogewogCWNoYXIJc3RhdF9idWZbMzBdOwotCWludAlyZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChpbmZvLT5idXNfdHlwZSA9PSBNR1NMX0JVU19UWVBFX1BDSSkgewotCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzOlBDSSBpbzolMDRYIGlycTolZCBtZW06JTA4WCBsY3I6JTA4WCIsCisJCXNlcV9wcmludGYobSwgIiVzOlBDSSBpbzolMDRYIGlycTolZCBtZW06JTA4WCBsY3I6JTA4WCIsCiAJCQlpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+aW9fYmFzZSwgaW5mby0+aXJxX2xldmVsLAogCQkJaW5mby0+cGh5c19tZW1vcnlfYmFzZSwgaW5mby0+cGh5c19sY3JfYmFzZSk7CiAJfSBlbHNlIHsKLQkJcmV0ID0gc3ByaW50ZihidWYsICIlczooRSlJU0EgaW86JTA0WCBpcnE6JWQgZG1hOiVkIiwKKwkJc2VxX3ByaW50ZihtLCAiJXM6KEUpSVNBIGlvOiUwNFggaXJxOiVkIGRtYTolZCIsCiAJCQlpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+aW9fYmFzZSwgCiAJCQlpbmZvLT5pcnFfbGV2ZWwsIGluZm8tPmRtYV9sZXZlbCk7CiAJfQpAQCAtMzQ5NywzNyArMzQ5NywzNyBAQAogCiAJaWYgKGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9IRExDIHx8CiAJICAgIGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9SQVcgKSB7Ci0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgSERMQyB0eG9rOiVkIHJ4b2s6JWQiLAorCQlzZXFfcHJpbnRmKG0sICIgSERMQyB0eG9rOiVkIHJ4b2s6JWQiLAogCQkJICAgICAgaW5mby0+aWNvdW50LnR4b2ssIGluZm8tPmljb3VudC5yeG9rKTsKIAkJaWYgKGluZm8tPmljb3VudC50eHVuZGVyKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiB0eHVuZGVyOiVkIiwgaW5mby0+aWNvdW50LnR4dW5kZXIpOworCQkJc2VxX3ByaW50ZihtLCAiIHR4dW5kZXI6JWQiLCBpbmZvLT5pY291bnQudHh1bmRlcik7CiAJCWlmIChpbmZvLT5pY291bnQudHhhYm9ydCkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgdHhhYm9ydDolZCIsIGluZm8tPmljb3VudC50eGFib3J0KTsKKwkJCXNlcV9wcmludGYobSwgIiB0eGFib3J0OiVkIiwgaW5mby0+aWNvdW50LnR4YWJvcnQpOwogCQlpZiAoaW5mby0+aWNvdW50LnJ4c2hvcnQpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHJ4c2hvcnQ6JWQiLCBpbmZvLT5pY291bnQucnhzaG9ydCk7CQorCQkJc2VxX3ByaW50ZihtLCAiIHJ4c2hvcnQ6JWQiLCBpbmZvLT5pY291bnQucnhzaG9ydCk7CiAJCWlmIChpbmZvLT5pY291bnQucnhsb25nKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiByeGxvbmc6JWQiLCBpbmZvLT5pY291bnQucnhsb25nKTsKKwkJCXNlcV9wcmludGYobSwgIiByeGxvbmc6JWQiLCBpbmZvLT5pY291bnQucnhsb25nKTsKIAkJaWYgKGluZm8tPmljb3VudC5yeG92ZXIpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHJ4b3ZlcjolZCIsIGluZm8tPmljb3VudC5yeG92ZXIpOworCQkJc2VxX3ByaW50ZihtLCAiIHJ4b3ZlcjolZCIsIGluZm8tPmljb3VudC5yeG92ZXIpOwogCQlpZiAoaW5mby0+aWNvdW50LnJ4Y3JjKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiByeGNyYzolZCIsIGluZm8tPmljb3VudC5yeGNyYyk7CisJCQlzZXFfcHJpbnRmKG0sICIgcnhjcmM6JWQiLCBpbmZvLT5pY291bnQucnhjcmMpOwogCX0gZWxzZSB7Ci0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgQVNZTkMgdHg6JWQgcng6JWQiLAorCQlzZXFfcHJpbnRmKG0sICIgQVNZTkMgdHg6JWQgcng6JWQiLAogCQkJICAgICAgaW5mby0+aWNvdW50LnR4LCBpbmZvLT5pY291bnQucngpOwogCQlpZiAoaW5mby0+aWNvdW50LmZyYW1lKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBmZTolZCIsIGluZm8tPmljb3VudC5mcmFtZSk7CisJCQlzZXFfcHJpbnRmKG0sICIgZmU6JWQiLCBpbmZvLT5pY291bnQuZnJhbWUpOwogCQlpZiAoaW5mby0+aWNvdW50LnBhcml0eSkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcGU6JWQiLCBpbmZvLT5pY291bnQucGFyaXR5KTsKKwkJCXNlcV9wcmludGYobSwgIiBwZTolZCIsIGluZm8tPmljb3VudC5wYXJpdHkpOwogCQlpZiAoaW5mby0+aWNvdW50LmJyaykKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgYnJrOiVkIiwgaW5mby0+aWNvdW50LmJyayk7CQorCQkJc2VxX3ByaW50ZihtLCAiIGJyazolZCIsIGluZm8tPmljb3VudC5icmspOwogCQlpZiAoaW5mby0+aWNvdW50Lm92ZXJydW4pCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIG9lOiVkIiwgaW5mby0+aWNvdW50Lm92ZXJydW4pOworCQkJc2VxX3ByaW50ZihtLCAiIG9lOiVkIiwgaW5mby0+aWNvdW50Lm92ZXJydW4pOwogCX0KIAkKIAkvKiBBcHBlbmQgc2VyaWFsIHNpZ25hbCBzdGF0dXMgdG8gZW5kICovCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiAlc1xuIiwgc3RhdF9idWYrMSk7CisJc2VxX3ByaW50ZihtLCAiICVzXG4iLCBzdGF0X2J1ZisxKTsKIAkKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAidHhhY3RpdmU9JWQgYmhfcmVxPSVkIGJoX3J1bj0lZCBwZW5kaW5nX2JoPSV4XG4iLAorCXNlcV9wcmludGYobSwgInR4YWN0aXZlPSVkIGJoX3JlcT0lZCBiaF9ydW49JWQgcGVuZGluZ19iaD0leFxuIiwKIAkgaW5mby0+dHhfYWN0aXZlLGluZm8tPmJoX3JlcXVlc3RlZCxpbmZvLT5iaF9ydW5uaW5nLAogCSBpbmZvLT5wZW5kaW5nX2JoKTsKIAkgCkBAIC0zNTQ0LDYwICszNTQ0LDQwIEBACiAJdTE2IFRtciA9IHVzY19JblJlZyggaW5mbywgVE1SICk7CiAJdTE2IFRjY3IgPSB1c2NfSW5SZWcoIGluZm8sIFRDQ1IgKTsKIAl1MTYgQ2NhciA9IGludyggaW5mby0+aW9fYmFzZSArIENDQVIgKTsKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAidGNzcj0lMDRYIHRkbXI9JTA0WCB0aWNyPSUwNFggcmNzcj0lMDRYIHJkbXI9JTA0WFxuIgorCXNlcV9wcmludGYobSwgInRjc3I9JTA0WCB0ZG1yPSUwNFggdGljcj0lMDRYIHJjc3I9JTA0WCByZG1yPSUwNFhcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICJyaWNyPSUwNFggaWNyID0lMDRYIGRjY3I9JTA0WCB0bXI9JTA0WCB0Y2NyPSUwNFggY2Nhcj0lMDRYXG4iLAogCSAJCVRjc3IsVGRtcixUaWNyLFJzY3IsUmRtcixSaWNyLEljcixEY2NyLFRtcixUY2NyLENjYXIgKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+aXJxX3NwaW5sb2NrLGZsYWdzKTsKLQkKLQlyZXR1cm4gcmV0OwotCQotfQkvKiBlbmQgb2YgbGluZV9pbmZvKCkgKi8KK30KIAotLyogbWdzbF9yZWFkX3Byb2MoKQotICogCi0gKiBDYWxsZWQgdG8gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgZGV2aWNlcwotICogCi0gKiBBcmd1bWVudHM6Ci0gKiAJcGFnZQlwYWdlIG9mIG1lbW9yeSB0byBob2xkIHJldHVybmVkIGluZm8KLSAqIAlzdGFydAkKLSAqIAlvZmYKLSAqIAljb3VudAotICogCWVvZgotICogCWRhdGEKLSAqIAkKLSAqIFJldHVybiBWYWx1ZToKLSAqLwotc3RhdGljIGludCBtZ3NsX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAotCQkgaW50ICplb2YsIHZvaWQgKmRhdGEpCisvKiBDYWxsZWQgdG8gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgZGV2aWNlcyAqLworc3RhdGljIGludCBtZ3NsX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDAsIGw7Ci0Jb2ZmX3QJYmVnaW4gPSAwOwogCXN0cnVjdCBtZ3NsX3N0cnVjdCAqaW5mbzsKIAkKLQlsZW4gKz0gc3ByaW50ZihwYWdlLCAic3luY2xpbmsgZHJpdmVyOiVzXG4iLCBkcml2ZXJfdmVyc2lvbik7CisJc2VxX3ByaW50ZihtLCAic3luY2xpbmsgZHJpdmVyOiVzXG4iLCBkcml2ZXJfdmVyc2lvbik7CiAJCiAJaW5mbyA9IG1nc2xfZGV2aWNlX2xpc3Q7CiAJd2hpbGUoIGluZm8gKSB7Ci0JCWwgPSBsaW5lX2luZm8ocGFnZSArIGxlbiwgaW5mbyk7Ci0JCWxlbiArPSBsOwotCQlpZiAobGVuK2JlZ2luID4gb2ZmK2NvdW50KQotCQkJZ290byBkb25lOwotCQlpZiAobGVuK2JlZ2luIDwgb2ZmKSB7Ci0JCQliZWdpbiArPSBsZW47Ci0JCQlsZW4gPSAwOwotCQl9CisJCWxpbmVfaW5mbyhtLCBpbmZvKTsKIAkJaW5mbyA9IGluZm8tPm5leHRfZGV2aWNlOwogCX0KKwlyZXR1cm4gMDsKK30KIAotCSplb2YgPSAxOwotZG9uZToKLQlpZiAob2ZmID49IGxlbitiZWdpbikKLQkJcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIChvZmYtYmVnaW4pOwotCXJldHVybiAoKGNvdW50IDwgYmVnaW4rbGVuLW9mZikgPyBjb3VudCA6IGJlZ2luK2xlbi1vZmYpOwotCQotfQkvKiBlbmQgb2YgbWdzbF9yZWFkX3Byb2MoKSAqLworc3RhdGljIGludCBtZ3NsX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbWdzbF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZ3NsX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gbWdzbF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAKIC8qIG1nc2xfYWxsb2NhdGVfZG1hX2J1ZmZlcnMoKQogICogCkBAIC00MzM1LDEzICs0MzE1LDEzIEBACiAJLnNlbmRfeGNoYXIgPSBtZ3NsX3NlbmRfeGNoYXIsCiAJLmJyZWFrX2N0bCA9IG1nc2xfYnJlYWssCiAJLndhaXRfdW50aWxfc2VudCA9IG1nc2xfd2FpdF91bnRpbF9zZW50LAotIAkucmVhZF9wcm9jID0gbWdzbF9yZWFkX3Byb2MsCiAJLnNldF90ZXJtaW9zID0gbWdzbF9zZXRfdGVybWlvcywKIAkuc3RvcCA9IG1nc2xfc3RvcCwKIAkuc3RhcnQgPSBtZ3NsX3N0YXJ0LAogCS5oYW5ndXAgPSBtZ3NsX2hhbmd1cCwKIAkudGlvY21nZXQgPSB0aW9jbWdldCwKIAkudGlvY21zZXQgPSB0aW9jbXNldCwKKwkucHJvY19mb3BzID0gJm1nc2xfcHJvY19mb3BzLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKaW5kZXggZWZiM2RjOS4uNWUyNTY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTE1NCw3ICsxNTUsNiBAQAogc3RhdGljIHZvaWQgdHhfcmVsZWFzZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIAogc3RhdGljIGludCAgaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyBpbnQgIHJlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LGludCAqZW9mLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBpbnQgIGNoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyB2b2lkIHRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKIHN0YXRpYyB2b2lkIHVudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwpAQCAtMjk4LDYgKzI5OCw3IEBACiAKIAl1bnNpZ25lZCBpbnQgcmJ1Zl9maWxsX2xldmVsOwogCXVuc2lnbmVkIGludCBpZl9tb2RlOworCXVuc2lnbmVkIGludCBiYXNlX2Nsb2NrOwogCiAJLyogZGV2aWNlIHN0YXR1cyAqLwogCkBAIC0xMTU2LDIyICsxMTU3LDI2IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKLQlpbmZvLT5wYXJhbXMubW9kZSAgICAgICAgICAgID0gdG1wX3BhcmFtcy5tb2RlOwotCWluZm8tPnBhcmFtcy5sb29wYmFjayAgICAgICAgPSB0bXBfcGFyYW1zLmxvb3BiYWNrOwotCWluZm8tPnBhcmFtcy5mbGFncyAgICAgICAgICAgPSB0bXBfcGFyYW1zLmZsYWdzOwotCWluZm8tPnBhcmFtcy5lbmNvZGluZyAgICAgICAgPSB0bXBfcGFyYW1zLmVuY29kaW5nOwotCWluZm8tPnBhcmFtcy5jbG9ja19zcGVlZCAgICAgPSB0bXBfcGFyYW1zLmNsb2NrX3NwZWVkOwotCWluZm8tPnBhcmFtcy5hZGRyX2ZpbHRlciAgICAgPSB0bXBfcGFyYW1zLmFkZHJfZmlsdGVyOwotCWluZm8tPnBhcmFtcy5jcmNfdHlwZSAgICAgICAgPSB0bXBfcGFyYW1zLmNyY190eXBlOwotCWluZm8tPnBhcmFtcy5wcmVhbWJsZV9sZW5ndGggPSB0bXBfcGFyYW1zLnByZWFtYmxlX2xlbmd0aDsKLQlpbmZvLT5wYXJhbXMucHJlYW1ibGUgICAgICAgID0gdG1wX3BhcmFtcy5wcmVhbWJsZTsKLQlpbmZvLT5wYXJhbXMuZGF0YV9yYXRlICAgICAgID0gdG1wX3BhcmFtcy5kYXRhX3JhdGU7Ci0JaW5mby0+cGFyYW1zLmRhdGFfYml0cyAgICAgICA9IHRtcF9wYXJhbXMuZGF0YV9iaXRzOwotCWluZm8tPnBhcmFtcy5zdG9wX2JpdHMgICAgICAgPSB0bXBfcGFyYW1zLnN0b3BfYml0czsKLQlpbmZvLT5wYXJhbXMucGFyaXR5ICAgICAgICAgID0gdG1wX3BhcmFtcy5wYXJpdHk7CisJaWYgKHRtcF9wYXJhbXMubW9kZSA9PSBNR1NMX01PREVfQkFTRV9DTE9DSykgeworCQlpbmZvLT5iYXNlX2Nsb2NrID0gdG1wX3BhcmFtcy5jbG9ja19zcGVlZDsKKwl9IGVsc2UgeworCQlpbmZvLT5wYXJhbXMubW9kZSAgICAgICAgICAgID0gdG1wX3BhcmFtcy5tb2RlOworCQlpbmZvLT5wYXJhbXMubG9vcGJhY2sgICAgICAgID0gdG1wX3BhcmFtcy5sb29wYmFjazsKKwkJaW5mby0+cGFyYW1zLmZsYWdzICAgICAgICAgICA9IHRtcF9wYXJhbXMuZmxhZ3M7CisJCWluZm8tPnBhcmFtcy5lbmNvZGluZyAgICAgICAgPSB0bXBfcGFyYW1zLmVuY29kaW5nOworCQlpbmZvLT5wYXJhbXMuY2xvY2tfc3BlZWQgICAgID0gdG1wX3BhcmFtcy5jbG9ja19zcGVlZDsKKwkJaW5mby0+cGFyYW1zLmFkZHJfZmlsdGVyICAgICA9IHRtcF9wYXJhbXMuYWRkcl9maWx0ZXI7CisJCWluZm8tPnBhcmFtcy5jcmNfdHlwZSAgICAgICAgPSB0bXBfcGFyYW1zLmNyY190eXBlOworCQlpbmZvLT5wYXJhbXMucHJlYW1ibGVfbGVuZ3RoID0gdG1wX3BhcmFtcy5wcmVhbWJsZV9sZW5ndGg7CisJCWluZm8tPnBhcmFtcy5wcmVhbWJsZSAgICAgICAgPSB0bXBfcGFyYW1zLnByZWFtYmxlOworCQlpbmZvLT5wYXJhbXMuZGF0YV9yYXRlICAgICAgID0gdG1wX3BhcmFtcy5kYXRhX3JhdGU7CisJCWluZm8tPnBhcmFtcy5kYXRhX2JpdHMgICAgICAgPSB0bXBfcGFyYW1zLmRhdGFfYml0czsKKwkJaW5mby0+cGFyYW1zLnN0b3BfYml0cyAgICAgICA9IHRtcF9wYXJhbXMuc3RvcF9iaXRzOworCQlpbmZvLT5wYXJhbXMucGFyaXR5ICAgICAgICAgID0gdG1wX3BhcmFtcy5wYXJpdHk7CisJfQogCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKIAotIAljaGFuZ2VfcGFyYW1zKGluZm8pOworCXByb2dyYW1faHcoaW5mbyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMjksMTMgKzEyMzQsMTIgQEAKIC8qCiAgKiBwcm9jIGZzIHN1cHBvcnQKICAqLwotc3RhdGljIGlubGluZSBpbnQgbGluZV9pbmZvKGNoYXIgKmJ1Ziwgc3RydWN0IHNsZ3RfaW5mbyAqaW5mbykKK3N0YXRpYyBpbmxpbmUgdm9pZCBsaW5lX2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKQogewogCWNoYXIgc3RhdF9idWZbMzBdOwotCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXJldCA9IHNwcmludGYoYnVmLCAiJXM6IElPPSUwOFggSVJRPSVkIE1heEZyYW1lU2l6ZT0ldVxuIiwKKwlzZXFfcHJpbnRmKG0sICIlczogSU89JTA4WCBJUlE9JWQgTWF4RnJhbWVTaXplPSV1XG4iLAogCQkgICAgICBpbmZvLT5kZXZpY2VfbmFtZSwgaW5mby0+cGh5c19yZWdfYWRkciwKIAkJICAgICAgaW5mby0+aXJxX2xldmVsLCBpbmZvLT5tYXhfZnJhbWVfc2l6ZSk7CiAKQEAgLTEyNjAsNzUgKzEyNjQsNzAgQEAKIAkJc3RyY2F0KHN0YXRfYnVmLCAifFJJIik7CiAKIAlpZiAoaW5mby0+cGFyYW1zLm1vZGUgIT0gTUdTTF9NT0RFX0FTWU5DKSB7Ci0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJcdEhETEMgdHhvazolZCByeG9rOiVkIiwKKwkJc2VxX3ByaW50ZihtLCAiXHRIRExDIHR4b2s6JWQgcnhvazolZCIsCiAJCQkgICAgICAgaW5mby0+aWNvdW50LnR4b2ssIGluZm8tPmljb3VudC5yeG9rKTsKIAkJaWYgKGluZm8tPmljb3VudC50eHVuZGVyKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiB0eHVuZGVyOiVkIiwgaW5mby0+aWNvdW50LnR4dW5kZXIpOworCQkJc2VxX3ByaW50ZihtLCAiIHR4dW5kZXI6JWQiLCBpbmZvLT5pY291bnQudHh1bmRlcik7CiAJCWlmIChpbmZvLT5pY291bnQudHhhYm9ydCkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgdHhhYm9ydDolZCIsIGluZm8tPmljb3VudC50eGFib3J0KTsKKwkJCXNlcV9wcmludGYobSwgIiB0eGFib3J0OiVkIiwgaW5mby0+aWNvdW50LnR4YWJvcnQpOwogCQlpZiAoaW5mby0+aWNvdW50LnJ4c2hvcnQpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHJ4c2hvcnQ6JWQiLCBpbmZvLT5pY291bnQucnhzaG9ydCk7CisJCQlzZXFfcHJpbnRmKG0sICIgcnhzaG9ydDolZCIsIGluZm8tPmljb3VudC5yeHNob3J0KTsKIAkJaWYgKGluZm8tPmljb3VudC5yeGxvbmcpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHJ4bG9uZzolZCIsIGluZm8tPmljb3VudC5yeGxvbmcpOworCQkJc2VxX3ByaW50ZihtLCAiIHJ4bG9uZzolZCIsIGluZm8tPmljb3VudC5yeGxvbmcpOwogCQlpZiAoaW5mby0+aWNvdW50LnJ4b3ZlcikKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcnhvdmVyOiVkIiwgaW5mby0+aWNvdW50LnJ4b3Zlcik7CisJCQlzZXFfcHJpbnRmKG0sICIgcnhvdmVyOiVkIiwgaW5mby0+aWNvdW50LnJ4b3Zlcik7CiAJCWlmIChpbmZvLT5pY291bnQucnhjcmMpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHJ4Y3JjOiVkIiwgaW5mby0+aWNvdW50LnJ4Y3JjKTsKKwkJCXNlcV9wcmludGYobSwgIiByeGNyYzolZCIsIGluZm8tPmljb3VudC5yeGNyYyk7CiAJfSBlbHNlIHsKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlx0QVNZTkMgdHg6JWQgcng6JWQiLAorCQlzZXFfcHJpbnRmKG0sICJcdEFTWU5DIHR4OiVkIHJ4OiVkIiwKIAkJCSAgICAgICBpbmZvLT5pY291bnQudHgsIGluZm8tPmljb3VudC5yeCk7CiAJCWlmIChpbmZvLT5pY291bnQuZnJhbWUpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIGZlOiVkIiwgaW5mby0+aWNvdW50LmZyYW1lKTsKKwkJCXNlcV9wcmludGYobSwgIiBmZTolZCIsIGluZm8tPmljb3VudC5mcmFtZSk7CiAJCWlmIChpbmZvLT5pY291bnQucGFyaXR5KQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBwZTolZCIsIGluZm8tPmljb3VudC5wYXJpdHkpOworCQkJc2VxX3ByaW50ZihtLCAiIHBlOiVkIiwgaW5mby0+aWNvdW50LnBhcml0eSk7CiAJCWlmIChpbmZvLT5pY291bnQuYnJrKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBicms6JWQiLCBpbmZvLT5pY291bnQuYnJrKTsKKwkJCXNlcV9wcmludGYobSwgIiBicms6JWQiLCBpbmZvLT5pY291bnQuYnJrKTsKIAkJaWYgKGluZm8tPmljb3VudC5vdmVycnVuKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBvZTolZCIsIGluZm8tPmljb3VudC5vdmVycnVuKTsKKwkJCXNlcV9wcmludGYobSwgIiBvZTolZCIsIGluZm8tPmljb3VudC5vdmVycnVuKTsKIAl9CiAKIAkvKiBBcHBlbmQgc2VyaWFsIHNpZ25hbCBzdGF0dXMgdG8gZW5kICovCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiAlc1xuIiwgc3RhdF9idWYrMSk7CisJc2VxX3ByaW50ZihtLCAiICVzXG4iLCBzdGF0X2J1ZisxKTsKIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJcdHR4YWN0aXZlPSVkIGJoX3JlcT0lZCBiaF9ydW49JWQgcGVuZGluZ19iaD0leFxuIiwKKwlzZXFfcHJpbnRmKG0sICJcdHR4YWN0aXZlPSVkIGJoX3JlcT0lZCBiaF9ydW49JWQgcGVuZGluZ19iaD0leFxuIiwKIAkJICAgICAgIGluZm8tPnR4X2FjdGl2ZSxpbmZvLT5iaF9yZXF1ZXN0ZWQsaW5mby0+YmhfcnVubmluZywKIAkJICAgICAgIGluZm8tPnBlbmRpbmdfYmgpOwotCi0JcmV0dXJuIHJldDsKIH0KIAogLyogQ2FsbGVkIHRvIHByaW50IGluZm9ybWF0aW9uIGFib3V0IGRldmljZXMKICAqLwotc3RhdGljIGludCByZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwKLQkJICAgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgc3luY2xpbmtfZ3RfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpbnQgbGVuID0gMCwgbDsKLQlvZmZfdAliZWdpbiA9IDA7CiAJc3RydWN0IHNsZ3RfaW5mbyAqaW5mbzsKIAotCWxlbiArPSBzcHJpbnRmKHBhZ2UsICJzeW5jbGlua19ndCBkcml2ZXJcbiIpOworCXNlcV9wdXRzKG0sICJzeW5jbGlua19ndCBkcml2ZXJcbiIpOwogCiAJaW5mbyA9IHNsZ3RfZGV2aWNlX2xpc3Q7CiAJd2hpbGUoIGluZm8gKSB7Ci0JCWwgPSBsaW5lX2luZm8ocGFnZSArIGxlbiwgaW5mbyk7Ci0JCWxlbiArPSBsOwotCQlpZiAobGVuK2JlZ2luID4gb2ZmK2NvdW50KQotCQkJZ290byBkb25lOwotCQlpZiAobGVuK2JlZ2luIDwgb2ZmKSB7Ci0JCQliZWdpbiArPSBsZW47Ci0JCQlsZW4gPSAwOwotCQl9CisJCWxpbmVfaW5mbyhtLCBpbmZvKTsKIAkJaW5mbyA9IGluZm8tPm5leHRfZGV2aWNlOwogCX0KLQotCSplb2YgPSAxOwotZG9uZToKLQlpZiAob2ZmID49IGxlbitiZWdpbikKLQkJcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIChvZmYtYmVnaW4pOwotCXJldHVybiAoKGNvdW50IDwgYmVnaW4rbGVuLW9mZikgPyBjb3VudCA6IGJlZ2luK2xlbi1vZmYpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHN5bmNsaW5rX2d0X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc3luY2xpbmtfZ3RfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3luY2xpbmtfZ3RfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBzeW5jbGlua19ndF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIC8qCiAgKiByZXR1cm4gY291bnQgb2YgYnl0ZXMgaW4gdHJhbnNtaXQgYnVmZmVyCiAgKi8KQEAgLTI1NjUsMTAgKzI1NjQsMTMgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jaywgZmxhZ3MpOwotCW1lbWNweSgmaW5mby0+cGFyYW1zLCAmdG1wX3BhcmFtcywgc2l6ZW9mKE1HU0xfUEFSQU1TKSk7CisJaWYgKHRtcF9wYXJhbXMubW9kZSA9PSBNR1NMX01PREVfQkFTRV9DTE9DSykKKwkJaW5mby0+YmFzZV9jbG9jayA9IHRtcF9wYXJhbXMuY2xvY2tfc3BlZWQ7CisJZWxzZQorCQltZW1jcHkoJmluZm8tPnBhcmFtcywgJnRtcF9wYXJhbXMsIHNpemVvZihNR1NMX1BBUkFNUykpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAotIAljaGFuZ2VfcGFyYW1zKGluZm8pOworCXByb2dyYW1faHcoaW5mbyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM0MzgsNiArMzQ0MCw3IEBACiAJCWluZm8tPm1hZ2ljID0gTUdTTF9NQUdJQzsKIAkJSU5JVF9XT1JLKCZpbmZvLT50YXNrLCBiaF9oYW5kbGVyKTsKIAkJaW5mby0+bWF4X2ZyYW1lX3NpemUgPSA0MDk2OworCQlpbmZvLT5iYXNlX2Nsb2NrID0gMTQ3NDU2MDA7CiAJCWluZm8tPnJidWZfZmlsbF9sZXZlbCA9IERNQUJVRlNJWkU7CiAJCWluZm8tPnBvcnQuY2xvc2VfZGVsYXkgPSA1KkhaLzEwOwogCQlpbmZvLT5wb3J0LmNsb3Npbmdfd2FpdCA9IDMwKkhaOwpAQCAtMzU2MiwxMyArMzU2NSwxMyBAQAogCS5zZW5kX3hjaGFyID0gc2VuZF94Y2hhciwKIAkuYnJlYWtfY3RsID0gc2V0X2JyZWFrLAogCS53YWl0X3VudGlsX3NlbnQgPSB3YWl0X3VudGlsX3NlbnQsCi0gCS5yZWFkX3Byb2MgPSByZWFkX3Byb2MsCiAJLnNldF90ZXJtaW9zID0gc2V0X3Rlcm1pb3MsCiAJLnN0b3AgPSB0eF9ob2xkLAogCS5zdGFydCA9IHR4X3JlbGVhc2UsCiAJLmhhbmd1cCA9IGhhbmd1cCwKIAkudGlvY21nZXQgPSB0aW9jbWdldCwKIAkudGlvY21zZXQgPSB0aW9jbXNldCwKKwkucHJvY19mb3BzID0gJnN5bmNsaW5rX2d0X3Byb2NfZm9wcywKIH07CiAKIHN0YXRpYyB2b2lkIHNsZ3RfY2xlYW51cCh2b2lkKQpAQCAtMzc4NSw3ICszNzg4LDcgQEAKIHN0YXRpYyB2b2lkIHNldF9yYXRlKHN0cnVjdCBzbGd0X2luZm8gKmluZm8sIHUzMiByYXRlKQogewogCXVuc2lnbmVkIGludCBkaXY7Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBvc2MgPSAxNDc0NTYwMDsKKwl1bnNpZ25lZCBpbnQgb3NjID0gaW5mby0+YmFzZV9jbG9jazsKIAogCS8qIGRpdiA9IG9zYy9yYXRlIC0gMQogCSAqCkBAIC00MDg5LDE4ICs0MDkyLDI3IEBACiAJICogMDYgIENUUyAgICAgIElSUSBlbmFibGUKIAkgKiAwNSAgRENEICAgICAgSVJRIGVuYWJsZQogCSAqIDA0ICBSSSAgICAgICBJUlEgZW5hYmxlCi0JICogMDMgIHJlc2VydmVkLCBtdXN0IGJlIHplcm8KKwkgKiAwMyAgMD0xNnggc2FtcGxpbmcsIDE9OHggc2FtcGxpbmcKIAkgKiAwMiAgMT10eGQtPnJ4ZCBpbnRlcm5hbCBsb29wYmFjayBlbmFibGUKIAkgKiAwMSAgcmVzZXJ2ZWQsIG11c3QgYmUgemVybwogCSAqIDAwICAxPW1hc3RlciBJUlEgZW5hYmxlCiAJICovCiAJdmFsID0gQklUMTUgKyBCSVQxNCArIEJJVDA7CisJLyogSkNSWzhdIDogMSA9IHg4IGFzeW5jIG1vZGUgZmVhdHVyZSBhdmFpbGFibGUgKi8KKwlpZiAoKHJkX3JlZzMyKGluZm8sIEpDUikgJiBCSVQ4KSAmJiBpbmZvLT5wYXJhbXMuZGF0YV9yYXRlICYmCisJICAgICgoaW5mby0+YmFzZV9jbG9jayA8IChpbmZvLT5wYXJhbXMuZGF0YV9yYXRlICogMTYpKSB8fAorCSAgICAgKGluZm8tPmJhc2VfY2xvY2sgJSAoaW5mby0+cGFyYW1zLmRhdGFfcmF0ZSAqIDE2KSkpKSB7CisJCS8qIHVzZSA4eCBzYW1wbGluZyAqLworCQl2YWwgfD0gQklUMzsKKwkJc2V0X3JhdGUoaW5mbywgaW5mby0+cGFyYW1zLmRhdGFfcmF0ZSAqIDgpOworCX0gZWxzZSB7CisJCS8qIHVzZSAxNnggc2FtcGxpbmcgKi8KKwkJc2V0X3JhdGUoaW5mbywgaW5mby0+cGFyYW1zLmRhdGFfcmF0ZSAqIDE2KTsKKwl9CiAJd3JfcmVnMTYoaW5mbywgU0NSLCB2YWwpOwogCiAJc2xndF9pcnFfb24oaW5mbywgSVJRX1JYQlJFQUsgfCBJUlFfUlhPVkVSKTsKIAotCXNldF9yYXRlKGluZm8sIGluZm8tPnBhcmFtcy5kYXRhX3JhdGUgKiAxNik7Ci0KIAlpZiAoaW5mby0+cGFyYW1zLmxvb3BiYWNrKQogCQllbmFibGVfbG9vcGJhY2soaW5mbyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwppbmRleCA4ZWI2Yzg5Li4yNmRlNjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTUyMCw3ICs1MjEsNiBAQAogc3RhdGljIHZvaWQgdHhfcmVsZWFzZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIAogc3RhdGljIGludCAgaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyBpbnQgIHJlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LGludCAqZW9mLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBpbnQgIGNoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyB2b2lkIHRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKIHN0YXRpYyB2b2lkIHVudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwpAQCAtMTM1NCwxMyArMTM1NCwxMiBAQAogICogL3Byb2MgZnMgcm91dGluZXMuLi4uCiAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgbGluZV9pbmZvKGNoYXIgKmJ1ZiwgU0xNUF9JTkZPICppbmZvKQorc3RhdGljIGlubGluZSB2b2lkIGxpbmVfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIFNMTVBfSU5GTyAqaW5mbykKIHsKIAljaGFyCXN0YXRfYnVmWzMwXTsKLQlpbnQJcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzOiBTQ0FCYXNlPSUwOHggTWVtPSUwOFggU3RhdHVzQ29udHJvbD0lMDh4IExDUj0lMDhYXG4iCisJc2VxX3ByaW50ZihtLCAiJXM6IFNDQUJhc2U9JTA4eCBNZW09JTA4WCBTdGF0dXNDb250cm9sPSUwOHggTENSPSUwOFhcbiIKIAkJICAgICAgICJcdElSUT0lZCBNYXhGcmFtZVNpemU9JXVcbiIsCiAJCWluZm8tPmRldmljZV9uYW1lLAogCQlpbmZvLT5waHlzX3NjYV9iYXNlLApAQCAtMTM5MSw3NSArMTM5MCw3MCBAQAogCQlzdHJjYXQoc3RhdF9idWYsICJ8UkkiKTsKIAogCWlmIChpbmZvLT5wYXJhbXMubW9kZSA9PSBNR1NMX01PREVfSERMQykgewotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXHRIRExDIHR4b2s6JWQgcnhvazolZCIsCisJCXNlcV9wcmludGYobSwgIlx0SERMQyB0eG9rOiVkIHJ4b2s6JWQiLAogCQkJICAgICAgaW5mby0+aWNvdW50LnR4b2ssIGluZm8tPmljb3VudC5yeG9rKTsKIAkJaWYgKGluZm8tPmljb3VudC50eHVuZGVyKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiB0eHVuZGVyOiVkIiwgaW5mby0+aWNvdW50LnR4dW5kZXIpOworCQkJc2VxX3ByaW50ZihtLCAiIHR4dW5kZXI6JWQiLCBpbmZvLT5pY291bnQudHh1bmRlcik7CiAJCWlmIChpbmZvLT5pY291bnQudHhhYm9ydCkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgdHhhYm9ydDolZCIsIGluZm8tPmljb3VudC50eGFib3J0KTsKKwkJCXNlcV9wcmludGYobSwgIiB0eGFib3J0OiVkIiwgaW5mby0+aWNvdW50LnR4YWJvcnQpOwogCQlpZiAoaW5mby0+aWNvdW50LnJ4c2hvcnQpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHJ4c2hvcnQ6JWQiLCBpbmZvLT5pY291bnQucnhzaG9ydCk7CisJCQlzZXFfcHJpbnRmKG0sICIgcnhzaG9ydDolZCIsIGluZm8tPmljb3VudC5yeHNob3J0KTsKIAkJaWYgKGluZm8tPmljb3VudC5yeGxvbmcpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHJ4bG9uZzolZCIsIGluZm8tPmljb3VudC5yeGxvbmcpOworCQkJc2VxX3ByaW50ZihtLCAiIHJ4bG9uZzolZCIsIGluZm8tPmljb3VudC5yeGxvbmcpOwogCQlpZiAoaW5mby0+aWNvdW50LnJ4b3ZlcikKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcnhvdmVyOiVkIiwgaW5mby0+aWNvdW50LnJ4b3Zlcik7CisJCQlzZXFfcHJpbnRmKG0sICIgcnhvdmVyOiVkIiwgaW5mby0+aWNvdW50LnJ4b3Zlcik7CiAJCWlmIChpbmZvLT5pY291bnQucnhjcmMpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiIHJ4bG9uZzolZCIsIGluZm8tPmljb3VudC5yeGNyYyk7CisJCQlzZXFfcHJpbnRmKG0sICIgcnhsb25nOiVkIiwgaW5mby0+aWNvdW50LnJ4Y3JjKTsKIAl9IGVsc2UgewotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXHRBU1lOQyB0eDolZCByeDolZCIsCisJCXNlcV9wcmludGYobSwgIlx0QVNZTkMgdHg6JWQgcng6JWQiLAogCQkJICAgICAgaW5mby0+aWNvdW50LnR4LCBpbmZvLT5pY291bnQucngpOwogCQlpZiAoaW5mby0+aWNvdW50LmZyYW1lKQotCQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIiBmZTolZCIsIGluZm8tPmljb3VudC5mcmFtZSk7CisJCQlzZXFfcHJpbnRmKG0sICIgZmU6JWQiLCBpbmZvLT5pY291bnQuZnJhbWUpOwogCQlpZiAoaW5mby0+aWNvdW50LnBhcml0eSkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgcGU6JWQiLCBpbmZvLT5pY291bnQucGFyaXR5KTsKKwkJCXNlcV9wcmludGYobSwgIiBwZTolZCIsIGluZm8tPmljb3VudC5wYXJpdHkpOwogCQlpZiAoaW5mby0+aWNvdW50LmJyaykKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgYnJrOiVkIiwgaW5mby0+aWNvdW50LmJyayk7CisJCQlzZXFfcHJpbnRmKG0sICIgYnJrOiVkIiwgaW5mby0+aWNvdW50LmJyayk7CiAJCWlmIChpbmZvLT5pY291bnQub3ZlcnJ1bikKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgb2U6JWQiLCBpbmZvLT5pY291bnQub3ZlcnJ1bik7CisJCQlzZXFfcHJpbnRmKG0sICIgb2U6JWQiLCBpbmZvLT5pY291bnQub3ZlcnJ1bik7CiAJfQogCiAJLyogQXBwZW5kIHNlcmlhbCBzaWduYWwgc3RhdHVzIHRvIGVuZCAqLwotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIgJXNcbiIsIHN0YXRfYnVmKzEpOworCXNlcV9wcmludGYobSwgIiAlc1xuIiwgc3RhdF9idWYrMSk7CiAKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXHR0eGFjdGl2ZT0lZCBiaF9yZXE9JWQgYmhfcnVuPSVkIHBlbmRpbmdfYmg9JXhcbiIsCisJc2VxX3ByaW50ZihtLCAiXHR0eGFjdGl2ZT0lZCBiaF9yZXE9JWQgYmhfcnVuPSVkIHBlbmRpbmdfYmg9JXhcbiIsCiAJIGluZm8tPnR4X2FjdGl2ZSxpbmZvLT5iaF9yZXF1ZXN0ZWQsaW5mby0+YmhfcnVubmluZywKIAkgaW5mby0+cGVuZGluZ19iaCk7Ci0KLQlyZXR1cm4gcmV0OwogfQogCiAvKiBDYWxsZWQgdG8gcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgZGV2aWNlcwogICovCi1zdGF0aWMgaW50IHJlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAotCSAgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBzeW5jbGlua21wX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDAsIGw7Ci0Jb2ZmX3QJYmVnaW4gPSAwOwogCVNMTVBfSU5GTyAqaW5mbzsKIAotCWxlbiArPSBzcHJpbnRmKHBhZ2UsICJzeW5jbGlua21wIGRyaXZlcjolc1xuIiwgZHJpdmVyX3ZlcnNpb24pOworCXNlcV9wcmludGYobSwgInN5bmNsaW5rbXAgZHJpdmVyOiVzXG4iLCBkcml2ZXJfdmVyc2lvbik7CiAKIAlpbmZvID0gc3luY2xpbmttcF9kZXZpY2VfbGlzdDsKIAl3aGlsZSggaW5mbyApIHsKLQkJbCA9IGxpbmVfaW5mbyhwYWdlICsgbGVuLCBpbmZvKTsKLQkJbGVuICs9IGw7Ci0JCWlmIChsZW4rYmVnaW4gPiBvZmYrY291bnQpCi0JCQlnb3RvIGRvbmU7Ci0JCWlmIChsZW4rYmVnaW4gPCBvZmYpIHsKLQkJCWJlZ2luICs9IGxlbjsKLQkJCWxlbiA9IDA7Ci0JCX0KKwkJbGluZV9pbmZvKG0sIGluZm8pOwogCQlpbmZvID0gaW5mby0+bmV4dF9kZXZpY2U7CiAJfQotCi0JKmVvZiA9IDE7Ci1kb25lOgotCWlmIChvZmYgPj0gbGVuK2JlZ2luKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgKG9mZi1iZWdpbik7Ci0JcmV0dXJuICgoY291bnQgPCBiZWdpbitsZW4tb2ZmKSA/IGNvdW50IDogYmVnaW4rbGVuLW9mZik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3luY2xpbmttcF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHN5bmNsaW5rbXBfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3luY2xpbmttcF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IHN5bmNsaW5rbXBfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKiBSZXR1cm4gdGhlIGNvdW50IG9mIGJ5dGVzIGluIHRyYW5zbWl0IGJ1ZmZlcgogICovCiBzdGF0aWMgaW50IGNoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtMzkwNSwxMyArMzg5OSwxMyBAQAogCS5zZW5kX3hjaGFyID0gc2VuZF94Y2hhciwKIAkuYnJlYWtfY3RsID0gc2V0X2JyZWFrLAogCS53YWl0X3VudGlsX3NlbnQgPSB3YWl0X3VudGlsX3NlbnQsCi0gCS5yZWFkX3Byb2MgPSByZWFkX3Byb2MsCiAJLnNldF90ZXJtaW9zID0gc2V0X3Rlcm1pb3MsCiAJLnN0b3AgPSB0eF9ob2xkLAogCS5zdGFydCA9IHR4X3JlbGVhc2UsCiAJLmhhbmd1cCA9IGhhbmd1cCwKIAkudGlvY21nZXQgPSB0aW9jbWdldCwKIAkudGlvY21zZXQgPSB0aW9jbXNldCwKKwkucHJvY19mb3BzID0gJnN5bmNsaW5rbXBfcHJvY19mb3BzLAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3lzcnEuYyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCmluZGV4IDMzYTkzNTEuLjZkZTAyMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeXNycS5jCisrKyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L29vbS5oPgogCkBAIC0yODMsNyArMjgzLDcgQEAKIH0KIHN0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX2Z0cmFjZV9kdW1wX29wID0gewogCS5oYW5kbGVyCT0gc3lzcnFfZnRyYWNlX2R1bXAsCi0JLmhlbHBfbXNnCT0gImR1bXBaLWZ0cmFjZS1idWZmZXIiLAorCS5oZWxwX21zZwk9ICJkdW1wLWZ0cmFjZS1idWZmZXIoWikiLAogCS5hY3Rpb25fbXNnCT0gIkR1bXAgZnRyYWNlIGJ1ZmZlciIsCiAJLmVuYWJsZV9tYXNrCT0gU1lTUlFfRU5BQkxFX0RVTVAsCiB9OwpAQCAtMzQ2LDYgKzM0NiwxOSBAQAogCS5lbmFibGVfbWFzawk9IFNZU1JRX0VOQUJMRV9TSUdOQUwsCiB9OwogCisjaWZkZWYgQ09ORklHX0JMT0NLCitzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfdGhhdyhpbnQga2V5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCWVtZXJnZW5jeV90aGF3X2FsbCgpOworfQorc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfdGhhd19vcCA9IHsKKwkuaGFuZGxlcgk9IHN5c3JxX2hhbmRsZV90aGF3LAorCS5oZWxwX21zZwk9ICJ0aGF3LWZpbGVzeXN0ZW1zKEopIiwKKwkuYWN0aW9uX21zZwk9ICJFbWVyZ2VuY3kgVGhhdyBvZiBhbGwgZnJvemVuIGZpbGVzeXN0ZW1zIiwKKwkuZW5hYmxlX21hc2sJPSBTWVNSUV9FTkFCTEVfU0lHTkFMLAorfTsKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfa2lsbChpbnQga2V5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXNlbmRfc2lnX2FsbChTSUdLSUxMKTsKQEAgLTM5Niw5ICs0MDksMTMgQEAKIAkmc3lzcnFfbW9vbV9vcCwJCQkvKiBmICovCiAJLyogZzogTWF5IGJlIHJlZ2lzdGVyZWQgYnkgcHBjIGZvciBrZ2RiICovCiAJTlVMTCwJCQkJLyogZyAqLwotCU5VTEwsCQkJCS8qIGggKi8KKwlOVUxMLAkJCQkvKiBoIC0gcmVzZXJ2ZWQgZm9yIGhlbHAgKi8KIAkmc3lzcnFfa2lsbF9vcCwJCQkvKiBpICovCisjaWZkZWYgQ09ORklHX0JMT0NLCisJJnN5c3JxX3RoYXdfb3AsCQkJLyogaiAqLworI2Vsc2UKIAlOVUxMLAkJCQkvKiBqICovCisjZW5kaWYKIAkmc3lzcnFfU0FLX29wLAkJCS8qIGsgKi8KICNpZmRlZiBDT05GSUdfU01QCiAJJnN5c3JxX3Nob3dhbGxjcHVzX29wLAkJLyogbCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9hdWRpdC5jIGIvZHJpdmVycy9jaGFyL3R0eV9hdWRpdC5jCmluZGV4IDM0YWI2ZDcuLjU1YmE2ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfYXVkaXQuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2F1ZGl0LmMKQEAgLTEwLDggKzEwLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZmR0YWJsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogCiBzdHJ1Y3QgdHR5X2F1ZGl0X2J1ZiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggMjI0ZjI3MS4uNjZiOTlhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJCQl0dHlfbGRpc2NfZGVyZWYobGQpOwogCQl9CiAJfQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmdHR5LT53cml0ZV93YWl0LCBQT0xMT1VUKTsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwodHR5X3dha2V1cCk7CkBAIC01ODcsOCArNTg3LDggQEAKIAkgKiBGSVhNRTogT25jZSB3ZSB0cnVzdCB0aGUgTERJU0MgY29kZSBiZXR0ZXIgd2UgY2FuIHdhaXQgaGVyZSBmb3IKIAkgKiBsZGlzYyBjb21wbGV0aW9uIGFuZCBmaXggdGhlIGRyaXZlciBjYWxsIHJhY2UKIAkgKi8KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnR0eS0+d3JpdGVfd2FpdCk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPnJlYWRfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJnR0eS0+d3JpdGVfd2FpdCwgUE9MTE9VVCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3BvbGwoJnR0eS0+cmVhZF93YWl0LCBQT0xMSU4pOwogCS8qCiAJICogU2h1dGRvd24gdGhlIGN1cnJlbnQgbGluZSBkaXNjaXBsaW5lLCBhbmQgcmVzZXQgaXQgdG8KIAkgKiBOX1RUWS4KQEAgLTg3OSw3ICs4NzksNyBAQAogCWlmICh0dHktPmxpbmsgJiYgdHR5LT5saW5rLT5wYWNrZXQpIHsKIAkJdHR5LT5jdHJsX3N0YXR1cyAmPSB+VElPQ1BLVF9TVEFSVDsKIAkJdHR5LT5jdHJsX3N0YXR1cyB8PSBUSU9DUEtUX1NUT1A7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT5saW5rLT5yZWFkX3dhaXQpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmdHR5LT5saW5rLT5yZWFkX3dhaXQsIFBPTExJTik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR0eS0+Y3RybF9sb2NrLCBmbGFncyk7CiAJaWYgKHR0eS0+b3BzLT5zdG9wKQpAQCAtOTEzLDcgKzkxMyw3IEBACiAJaWYgKHR0eS0+bGluayAmJiB0dHktPmxpbmstPnBhY2tldCkgewogCQl0dHktPmN0cmxfc3RhdHVzICY9IH5USU9DUEtUX1NUT1A7CiAJCXR0eS0+Y3RybF9zdGF0dXMgfD0gVElPQ1BLVF9TVEFSVDsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPmxpbmstPnJlYWRfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKCZ0dHktPmxpbmstPnJlYWRfd2FpdCwgUE9MTElOKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHR5LT5jdHJsX2xvY2ssIGZsYWdzKTsKIAlpZiAodHR5LT5vcHMtPnN0YXJ0KQpAQCAtOTcwLDcgKzk3MCw3IEBACiB2b2lkIHR0eV93cml0ZV91bmxvY2soc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAltdXRleF91bmxvY2soJnR0eS0+YXRvbWljX3dyaXRlX2xvY2spOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdHR5LT53cml0ZV93YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmdHR5LT53cml0ZV93YWl0LCBQT0xMT1VUKTsKIH0KIAogaW50IHR0eV93cml0ZV9sb2NrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBuZGVsYXkpCkBAIC0xNjIzLDIxICsxNjIzLDIxIEBACiAKIAkJaWYgKHR0eV9jbG9zaW5nKSB7CiAJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmdHR5LT5yZWFkX3dhaXQpKSB7Ci0JCQkJd2FrZV91cCgmdHR5LT5yZWFkX3dhaXQpOworCQkJCXdha2VfdXBfcG9sbCgmdHR5LT5yZWFkX3dhaXQsIFBPTExJTik7CiAJCQkJZG9fc2xlZXArKzsKIAkJCX0KIAkJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZ0dHktPndyaXRlX3dhaXQpKSB7Ci0JCQkJd2FrZV91cCgmdHR5LT53cml0ZV93YWl0KTsKKwkJCQl3YWtlX3VwX3BvbGwoJnR0eS0+d3JpdGVfd2FpdCwgUE9MTE9VVCk7CiAJCQkJZG9fc2xlZXArKzsKIAkJCX0KIAkJfQogCQlpZiAob190dHlfY2xvc2luZykgewogCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJm9fdHR5LT5yZWFkX3dhaXQpKSB7Ci0JCQkJd2FrZV91cCgmb190dHktPnJlYWRfd2FpdCk7CisJCQkJd2FrZV91cF9wb2xsKCZvX3R0eS0+cmVhZF93YWl0LCBQT0xMSU4pOwogCQkJCWRvX3NsZWVwKys7CiAJCQl9CiAJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmb190dHktPndyaXRlX3dhaXQpKSB7Ci0JCQkJd2FrZV91cCgmb190dHktPndyaXRlX3dhaXQpOworCQkJCXdha2VfdXBfcG9sbCgmb190dHktPndyaXRlX3dhaXQsIFBPTExPVVQpOwogCQkJCWRvX3NsZWVwKys7CiAJCQl9CiAJCX0KQEAgLTE3NTgsNyArMTc1OCw3IEBACiAJc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcjsKIAlpbnQgaW5kZXg7CiAJZGV2X3QgZGV2aWNlID0gaW5vZGUtPmlfcmRldjsKLQl1bnNpZ25lZCBzaG9ydCBzYXZlZF9mbGFncyA9IGZpbHAtPmZfZmxhZ3M7CisJdW5zaWduZWQgc2F2ZWRfZmxhZ3MgPSBmaWxwLT5mX2ZsYWdzOwogCiAJbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlscCk7CiAKQEAgLTI2ODEsNyArMjY4MSw3IEBACiAJLyogS2lsbCB0aGUgZW50aXJlIHNlc3Npb24gKi8KIAlkb19lYWNoX3BpZF90YXNrKHNlc3Npb24sIFBJRFRZUEVfU0lELCBwKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiU0FLOiBraWxsZWQgcHJvY2VzcyAlZCIKLQkJCSIgKCVzKTogdGFza19zZXNzaW9uX25yKHApPT10dHktPnNlc3Npb25cbiIsCisJCQkiICglcyk6IHRhc2tfc2Vzc2lvbihwKT09dHR5LT5zZXNzaW9uXG4iLAogCQkJdGFza19waWRfbnIocCksIHAtPmNvbW0pOwogCQlzZW5kX3NpZyhTSUdLSUxMLCBwLCAxKTsKIAl9IHdoaWxlX2VhY2hfcGlkX3Rhc2soc2Vzc2lvbiwgUElEVFlQRV9TSUQsIHApOwpAQCAtMjY5MSw3ICsyNjkxLDcgQEAKIAlkb19lYWNoX3RocmVhZChnLCBwKSB7CiAJCWlmIChwLT5zaWduYWwtPnR0eSA9PSB0dHkpIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiU0FLOiBraWxsZWQgcHJvY2VzcyAlZCIKLQkJCSAgICAiICglcyk6IHRhc2tfc2Vzc2lvbl9ucihwKT09dHR5LT5zZXNzaW9uXG4iLAorCQkJICAgICIgKCVzKTogdGFza19zZXNzaW9uKHApPT10dHktPnNlc3Npb25cbiIsCiAJCQkgICAgdGFza19waWRfbnIocCksIHAtPmNvbW0pOwogCQkJc2VuZF9zaWcoU0lHS0lMTCwgcCwgMSk7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYyBiL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYwppbmRleCA3YTg0YjQwLi5mNzhmNWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jCkBAIC0xMCw3ICsxMCw2IEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZwdHNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZmR0YWJsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwppbmRleCA3NzgzYjQyLi4xYzkyYzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2Uvc2hfY210LmMKQEAgLTQ2NSw3ICs0NjUsNiBAQAogCWNlZC0+c2V0X21vZGUgPSBzaF9jbXRfY2xvY2tfZXZlbnRfbW9kZTsKIAogCXByX2luZm8oInNoX2NtdDogJXMgdXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iLCBjZWQtPm5hbWUpOwotCWNlZC0+bXVsdCA9IDE7IC8qIHdvcmsgYXJvdW5kIG1pc3BsYWNlZCBXQVJOX09OKCkgaW4gY2xvY2tldmVudHMuYyAqLwogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZWQpOwogfQogCkBAIC01NTcsNyArNTU2LDcgQEAKIAkJCSAgICAgICBjZmctPmNsb2NrZXZlbnRfcmF0aW5nLAogCQkJICAgICAgIGNmZy0+Y2xvY2tzb3VyY2VfcmF0aW5nKTsKICBlcnIyOgotCWZyZWVfaXJxKGlycSwgcCk7CisJcmVtb3ZlX2lycShpcnEsICZwLT5pcnFhY3Rpb24pOwogIGVycjE6CiAJaW91bm1hcChwLT5tYXBiYXNlKTsKICBlcnIwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vaGlmbl83OTV4LmMgYi9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYwppbmRleCAwYzc5ZmU3Li40ZDg1NDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYworKysgYi9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYwpAQCAtMTg4Miw3ICsxODgyLDcgQEAKIAogc3RhdGljIHZvaWQgaGlmbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgaGlmbl9kZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihkdywgc3RydWN0IGhpZm5fZGV2aWNlLCB3b3JrKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXNldCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9peHA0eHhfY3J5cHRvLmMgYi9kcml2ZXJzL2NyeXB0by9peHA0eHhfY3J5cHRvLmMKaW5kZXggZDllNzUxYi4uYWY5NzYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcnlwdG8vaXhwNHh4X2NyeXB0by5jCisrKyBiL2RyaXZlcnMvY3J5cHRvL2l4cDR4eF9jcnlwdG8uYwpAQCAtMTAxLDYgKzEwMSw3IEBACiAJdTMyIHBoeXNfYWRkcjsKIAl1MzIgX19yZXNlcnZlZFs0XTsKIAlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKm5leHQ7CisJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyOwogfTsKIAogc3RydWN0IGNyeXB0X2N0bCB7CkBAIC0xMzIsMTQgKzEzMywxMCBAQAogc3RydWN0IGFibGtfY3R4IHsKIAlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKnNyYzsKIAlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmRzdDsKLQl1bnNpZ25lZCBzcmNfbmVudHM7Ci0JdW5zaWduZWQgZHN0X25lbnRzOwogfTsKIAogc3RydWN0IGFlYWRfY3R4IHsKIAlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmJ1ZmZlcjsKLQl1bnNpZ25lZCBzaG9ydCBhc3NvY19uZW50czsKLQl1bnNpZ25lZCBzaG9ydCBzcmNfbmVudHM7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IGl2bGlzdDsKIAkvKiB1c2VkIHdoZW4gdGhlIGhtYWMgaXMgbm90IG9uIG9uZSBzZyBlbnRyeSAqLwogCXU4ICpobWFjX3ZpcnQ7CkBAIC0zMTIsNyArMzA5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfYnVmX2NoYWluKHN0cnVjdCBidWZmZXJfZGVzYyAqYnVmLCB1MzIgcGh5cykKK3N0YXRpYyB2b2lkIGZyZWVfYnVmX2NoYWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJ1ZmZlcl9kZXNjICpidWYsdTMyIHBoeXMpCiB7CiAJd2hpbGUgKGJ1ZikgewogCQlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmJ1ZjE7CkBAIC0zMjAsNiArMzE3LDcgQEAKIAogCQlidWYxID0gYnVmLT5uZXh0OwogCQlwaHlzMSA9IGJ1Zi0+cGh5c19uZXh0OworCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgYnVmLT5waHlzX25leHQsIGJ1Zi0+YnVmX2xlbiwgYnVmLT5kaXIpOwogCQlkbWFfcG9vbF9mcmVlKGJ1ZmZlcl9wb29sLCBidWYsIHBoeXMpOwogCQlidWYgPSBidWYxOwogCQlwaHlzID0gcGh5czE7CkBAIC0zNDgsNyArMzQ2LDYgQEAKIAlzdHJ1Y3QgY3J5cHRfY3RsICpjcnlwdDsKIAlzdHJ1Y3QgaXhwX2N0eCAqY3R4OwogCWludCBmYWlsZWQ7Ci0JZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gc3JjX2RpcmVjdGlvbiA9IERNQV9CSURJUkVDVElPTkFMOwogCiAJZmFpbGVkID0gcGh5cyAmIDB4MSA/IC1FQkFETVNHIDogMDsKIAlwaHlzICY9IH4weDM7CkBAIC0zNTgsMTMgKzM1NSw4IEBACiAJY2FzZSBDVExfRkxBR19QRVJGT1JNX0FFQUQ6IHsKIAkJc3RydWN0IGFlYWRfcmVxdWVzdCAqcmVxID0gY3J5cHQtPmRhdGEuYWVhZF9yZXE7CiAJCXN0cnVjdCBhZWFkX2N0eCAqcmVxX2N0eCA9IGFlYWRfcmVxdWVzdF9jdHgocmVxKTsKLQkJZG1hX3VubWFwX3NnKGRldiwgcmVxLT5hc3NvYywgcmVxX2N0eC0+YXNzb2NfbmVudHMsCi0JCQkJRE1BX1RPX0RFVklDRSk7Ci0JCWRtYV91bm1hcF9zZyhkZXYsICZyZXFfY3R4LT5pdmxpc3QsIDEsIERNQV9CSURJUkVDVElPTkFMKTsKLQkJZG1hX3VubWFwX3NnKGRldiwgcmVxLT5zcmMsIHJlcV9jdHgtPnNyY19uZW50cywKLQkJCQlETUFfQklESVJFQ1RJT05BTCk7CiAKLQkJZnJlZV9idWZfY2hhaW4ocmVxX2N0eC0+YnVmZmVyLCBjcnlwdC0+c3JjX2J1Zik7CisJCWZyZWVfYnVmX2NoYWluKGRldiwgcmVxX2N0eC0+YnVmZmVyLCBjcnlwdC0+c3JjX2J1Zik7CiAJCWlmIChyZXFfY3R4LT5obWFjX3ZpcnQpIHsKIAkJCWZpbmlzaF9zY2F0dGVyZWRfaG1hYyhjcnlwdCk7CiAJCX0KQEAgLTM3NCwxNiArMzY2LDExIEBACiAJY2FzZSBDVExfRkxBR19QRVJGT1JNX0FCTEs6IHsKIAkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxID0gY3J5cHQtPmRhdGEuYWJsa19yZXE7CiAJCXN0cnVjdCBhYmxrX2N0eCAqcmVxX2N0eCA9IGFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKLQkJaW50IG5lbnRzOworCiAJCWlmIChyZXFfY3R4LT5kc3QpIHsKLQkJCW5lbnRzID0gcmVxX2N0eC0+ZHN0X25lbnRzOwotCQkJZG1hX3VubWFwX3NnKGRldiwgcmVxLT5kc3QsIG5lbnRzLCBETUFfRlJPTV9ERVZJQ0UpOwotCQkJZnJlZV9idWZfY2hhaW4ocmVxX2N0eC0+ZHN0LCBjcnlwdC0+ZHN0X2J1Zik7Ci0JCQlzcmNfZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwkJCWZyZWVfYnVmX2NoYWluKGRldiwgcmVxX2N0eC0+ZHN0LCBjcnlwdC0+ZHN0X2J1Zik7CiAJCX0KLQkJbmVudHMgPSByZXFfY3R4LT5zcmNfbmVudHM7Ci0JCWRtYV91bm1hcF9zZyhkZXYsIHJlcS0+c3JjLCBuZW50cywgc3JjX2RpcmVjdGlvbik7Ci0JCWZyZWVfYnVmX2NoYWluKHJlcV9jdHgtPnNyYywgY3J5cHQtPnNyY19idWYpOworCQlmcmVlX2J1Zl9jaGFpbihkZXYsIHJlcV9jdHgtPnNyYywgY3J5cHQtPnNyY19idWYpOwogCQlyZXEtPmJhc2UuY29tcGxldGUoJnJlcS0+YmFzZSwgZmFpbGVkKTsKIAkJYnJlYWs7CiAJfQpAQCAtNzUwLDU2ICs3MzcsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3VudF9zZyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmJ5dGVzKQorc3RhdGljIHN0cnVjdCBidWZmZXJfZGVzYyAqY2hhaW51cF9idWZmZXJzKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywJdW5zaWduZWQgbmJ5dGVzLAorCQlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmJ1ZiwgZ2ZwX3QgZmxhZ3MsCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBuYnl0ZXMgPiAwOyBpKyssIHNnID0gc2dfbmV4dChzZykpCi0JCW5ieXRlcyAtPSBzZy0+bGVuZ3RoOwotCXJldHVybiBpOwotfQotCi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9kZXNjICpjaGFpbnVwX2J1ZmZlcnMoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCXVuc2lnbmVkIG5ieXRlcywgc3RydWN0IGJ1ZmZlcl9kZXNjICpidWYsIGdmcF90IGZsYWdzKQotewotCWludCBuZW50cyA9IDA7Ci0KLQl3aGlsZSAobmJ5dGVzID4gMCkgeworCWZvciAoO25ieXRlcyA+IDA7IHNnID0gc2NhdHRlcndhbGtfc2dfbmV4dChzZykpIHsKKwkJdW5zaWduZWQgbGVuID0gbWluKG5ieXRlcywgc2ctPmxlbmd0aCk7CiAJCXN0cnVjdCBidWZmZXJfZGVzYyAqbmV4dF9idWY7CiAJCXUzMiBuZXh0X2J1Zl9waHlzOwotCQl1bnNpZ25lZCBsZW4gPSBtaW4obmJ5dGVzLCBzZ19kbWFfbGVuKHNnKSk7CisJCXZvaWQgKnB0cjsKIAotCQluZW50cysrOwogCQluYnl0ZXMgLT0gbGVuOwotCQlpZiAoIWJ1Zi0+cGh5c19hZGRyKSB7Ci0JCQlidWYtPnBoeXNfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKLQkJCWJ1Zi0+YnVmX2xlbiA9IGxlbjsKLQkJCWJ1Zi0+bmV4dCA9IE5VTEw7Ci0JCQlidWYtPnBoeXNfbmV4dCA9IDA7Ci0JCQlnb3RvIG5leHQ7Ci0JCX0KLQkJLyogVHdvIGNvbnNlY3V0aXZlIGNodW5rcyBvbiBvbmUgcGFnZSBtYXkgYmUgaGFuZGxlZCBieSB0aGUgb2xkCi0JCSAqIGJ1ZmZlciBkZXNjcmlwdG9yLCBpbmNyZWFzZWQgYnkgdGhlIGxlbmd0aCBvZiB0aGUgbmV3IG9uZQotCQkgKi8KLQkJaWYgKHNnX2RtYV9hZGRyZXNzKHNnKSA9PSBidWYtPnBoeXNfYWRkciArIGJ1Zi0+YnVmX2xlbikgewotCQkJYnVmLT5idWZfbGVuICs9IGxlbjsKLQkJCWdvdG8gbmV4dDsKLQkJfQorCQlwdHIgPSBwYWdlX2FkZHJlc3Moc2dfcGFnZShzZykpICsgc2ctPm9mZnNldDsKIAkJbmV4dF9idWYgPSBkbWFfcG9vbF9hbGxvYyhidWZmZXJfcG9vbCwgZmxhZ3MsICZuZXh0X2J1Zl9waHlzKTsKLQkJaWYgKCFuZXh0X2J1ZikKLQkJCXJldHVybiBOVUxMOworCQlpZiAoIW5leHRfYnVmKSB7CisJCQlidWYgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJc2dfZG1hX2FkZHJlc3Moc2cpID0gZG1hX21hcF9zaW5nbGUoZGV2LCBwdHIsIGxlbiwgZGlyKTsKIAkJYnVmLT5uZXh0ID0gbmV4dF9idWY7CiAJCWJ1Zi0+cGh5c19uZXh0ID0gbmV4dF9idWZfcGh5czsKLQogCQlidWYgPSBuZXh0X2J1ZjsKLQkJYnVmLT5uZXh0ID0gTlVMTDsKLQkJYnVmLT5waHlzX25leHQgPSAwOworCiAJCWJ1Zi0+cGh5c19hZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwogCQlidWYtPmJ1Zl9sZW4gPSBsZW47Ci1uZXh0OgotCQlpZiAobmJ5dGVzID4gMCkgewotCQkJc2cgPSBzZ19uZXh0KHNnKTsKLQkJfQorCQlidWYtPmRpciA9IGRpcjsKIAl9CisJYnVmLT5uZXh0ID0gTlVMTDsKKwlidWYtPnBoeXNfbmV4dCA9IDA7CiAJcmV0dXJuIGJ1ZjsKIH0KIApAQCAtODYwLDEyICs4MjYsMTIgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOwogCXN0cnVjdCBpeHBfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKIAl1bnNpZ25lZCBpdnNpemUgPSBjcnlwdG9fYWJsa2NpcGhlcl9pdnNpemUodGZtKTsKLQlpbnQgcmV0ID0gLUVOT01FTTsKIAlzdHJ1Y3QgaXhfc2FfZGlyICpkaXI7CiAJc3RydWN0IGNyeXB0X2N0bCAqY3J5cHQ7Ci0JdW5zaWduZWQgaW50IG5ieXRlcyA9IHJlcS0+bmJ5dGVzLCBuZW50czsKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gcmVxLT5uYnl0ZXM7CiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gc3JjX2RpcmVjdGlvbiA9IERNQV9CSURJUkVDVElPTkFMOwogCXN0cnVjdCBhYmxrX2N0eCAqcmVxX2N0eCA9IGFibGtjaXBoZXJfcmVxdWVzdF9jdHgocmVxKTsKKwlzdHJ1Y3QgYnVmZmVyX2Rlc2Mgc3JjX2hvb2s7CiAJZ2ZwX3QgZmxhZ3MgPSByZXEtPmJhc2UuZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVAgPwogCQkJCUdGUF9LRVJORUwgOiBHRlBfQVRPTUlDOwogCkBAIC04NzgsNyArODQ0LDcgQEAKIAogCWNyeXB0ID0gZ2V0X2NyeXB0X2Rlc2MoKTsKIAlpZiAoIWNyeXB0KQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gLUVOT01FTTsKIAogCWNyeXB0LT5kYXRhLmFibGtfcmVxID0gcmVxOwogCWNyeXB0LT5jcnlwdG9fY3R4ID0gZGlyLT5ucGVfY3R4X3BoeXM7CkBAIC04OTEsNTMgKzg1Nyw0MSBAQAogCUJVR19PTihpdnNpemUgJiYgIXJlcS0+aW5mbyk7CiAJbWVtY3B5KGNyeXB0LT5pdiwgcmVxLT5pbmZvLCBpdnNpemUpOwogCWlmIChyZXEtPnNyYyAhPSByZXEtPmRzdCkgeworCQlzdHJ1Y3QgYnVmZmVyX2Rlc2MgZHN0X2hvb2s7CiAJCWNyeXB0LT5tb2RlIHw9IE5QRV9PUF9OT1RfSU5fUExBQ0U7Ci0JCW5lbnRzID0gY291bnRfc2cocmVxLT5kc3QsIG5ieXRlcyk7CiAJCS8qIFRoaXMgd2FzIG5ldmVyIHRlc3RlZCBieSBJbnRlbAogCQkgKiBmb3IgbW9yZSB0aGFuIG9uZSBkc3QgYnVmZmVyLCBJIHRoaW5rLiAqLwotCQlCVUdfT04obmVudHMgIT0gMSk7Ci0JCXJlcV9jdHgtPmRzdF9uZW50cyA9IG5lbnRzOwotCQlkbWFfbWFwX3NnKGRldiwgcmVxLT5kc3QsIG5lbnRzLCBETUFfRlJPTV9ERVZJQ0UpOwotCQlyZXFfY3R4LT5kc3QgPSBkbWFfcG9vbF9hbGxvYyhidWZmZXJfcG9vbCwgZmxhZ3MsJmNyeXB0LT5kc3RfYnVmKTsKLQkJaWYgKCFyZXFfY3R4LT5kc3QpCi0JCQlnb3RvIHVubWFwX3NnX2Rlc3Q7Ci0JCXJlcV9jdHgtPmRzdC0+cGh5c19hZGRyID0gMDsKLQkJaWYgKCFjaGFpbnVwX2J1ZmZlcnMocmVxLT5kc3QsIG5ieXRlcywgcmVxX2N0eC0+ZHN0LCBmbGFncykpCisJCUJVR19PTihyZXEtPmRzdC0+bGVuZ3RoIDwgbmJ5dGVzKTsKKwkJcmVxX2N0eC0+ZHN0ID0gTlVMTDsKKwkJaWYgKCFjaGFpbnVwX2J1ZmZlcnMoZGV2LCByZXEtPmRzdCwgbmJ5dGVzLCAmZHN0X2hvb2ssCisJCQkJCWZsYWdzLCBETUFfRlJPTV9ERVZJQ0UpKQogCQkJZ290byBmcmVlX2J1Zl9kZXN0OwogCQlzcmNfZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwkJcmVxX2N0eC0+ZHN0ID0gZHN0X2hvb2submV4dDsKKwkJY3J5cHQtPmRzdF9idWYgPSBkc3RfaG9vay5waHlzX25leHQ7CiAJfSBlbHNlIHsKIAkJcmVxX2N0eC0+ZHN0ID0gTlVMTDsKLQkJcmVxX2N0eC0+ZHN0X25lbnRzID0gMDsKIAl9Ci0JbmVudHMgPSBjb3VudF9zZyhyZXEtPnNyYywgbmJ5dGVzKTsKLQlyZXFfY3R4LT5zcmNfbmVudHMgPSBuZW50czsKLQlkbWFfbWFwX3NnKGRldiwgcmVxLT5zcmMsIG5lbnRzLCBzcmNfZGlyZWN0aW9uKTsKLQotCXJlcV9jdHgtPnNyYyA9IGRtYV9wb29sX2FsbG9jKGJ1ZmZlcl9wb29sLCBmbGFncywgJmNyeXB0LT5zcmNfYnVmKTsKLQlpZiAoIXJlcV9jdHgtPnNyYykKLQkJZ290byB1bm1hcF9zZ19zcmM7Ci0JcmVxX2N0eC0+c3JjLT5waHlzX2FkZHIgPSAwOwotCWlmICghY2hhaW51cF9idWZmZXJzKHJlcS0+c3JjLCBuYnl0ZXMsIHJlcV9jdHgtPnNyYywgZmxhZ3MpKQorCXJlcV9jdHgtPnNyYyA9IE5VTEw7CisJaWYgKCFjaGFpbnVwX2J1ZmZlcnMoZGV2LCByZXEtPnNyYywgbmJ5dGVzLCAmc3JjX2hvb2ssCisJCQkJZmxhZ3MsIHNyY19kaXJlY3Rpb24pKQogCQlnb3RvIGZyZWVfYnVmX3NyYzsKIAorCXJlcV9jdHgtPnNyYyA9IHNyY19ob29rLm5leHQ7CisJY3J5cHQtPnNyY19idWYgPSBzcmNfaG9vay5waHlzX25leHQ7CiAJY3J5cHQtPmN0bF9mbGFncyB8PSBDVExfRkxBR19QRVJGT1JNX0FCTEs7CiAJcW1ncl9wdXRfZW50cnkoU0VORF9RSUQsIGNyeXB0X3ZpcnQycGh5cyhjcnlwdCkpOwogCUJVR19PTihxbWdyX3N0YXRfb3ZlcmZsb3coU0VORF9RSUQpKTsKIAlyZXR1cm4gLUVJTlBST0dSRVNTOwogCiBmcmVlX2J1Zl9zcmM6Ci0JZnJlZV9idWZfY2hhaW4ocmVxX2N0eC0+c3JjLCBjcnlwdC0+c3JjX2J1Zik7Ci11bm1hcF9zZ19zcmM6Ci0JZG1hX3VubWFwX3NnKGRldiwgcmVxLT5zcmMsIHJlcV9jdHgtPnNyY19uZW50cywgc3JjX2RpcmVjdGlvbik7CisJZnJlZV9idWZfY2hhaW4oZGV2LCByZXFfY3R4LT5zcmMsIGNyeXB0LT5zcmNfYnVmKTsKIGZyZWVfYnVmX2Rlc3Q6CiAJaWYgKHJlcS0+c3JjICE9IHJlcS0+ZHN0KSB7Ci0JCWZyZWVfYnVmX2NoYWluKHJlcV9jdHgtPmRzdCwgY3J5cHQtPmRzdF9idWYpOwotdW5tYXBfc2dfZGVzdDoKLQkJZG1hX3VubWFwX3NnKGRldiwgcmVxLT5zcmMsIHJlcV9jdHgtPmRzdF9uZW50cywKLQkJCURNQV9GUk9NX0RFVklDRSk7CisJCWZyZWVfYnVmX2NoYWluKGRldiwgcmVxX2N0eC0+ZHN0LCBjcnlwdC0+ZHN0X2J1Zik7CiAJfQogCWNyeXB0LT5jdGxfZmxhZ3MgPSBDVExfRkxBR19VTlVTRUQ7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGludCBhYmxrX2VuY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQpAQCAtOTg1LDcgKzkzOSw3IEBACiAJCQlicmVhazsKIAogCQlvZmZzZXQgKz0gc2ctPmxlbmd0aDsKLQkJc2cgPSBzZ19uZXh0KHNnKTsKKwkJc2cgPSBzY2F0dGVyd2Fsa19zZ19uZXh0KHNnKTsKIAl9CiAJcmV0dXJuIChzdGFydCArIG5ieXRlcyA+IG9mZnNldCArIHNnLT5sZW5ndGgpOwogfQpAQCAtOTk3LDExICs5NTEsMTAgQEAKIAlzdHJ1Y3QgaXhwX2N0eCAqY3R4ID0gY3J5cHRvX2FlYWRfY3R4KHRmbSk7CiAJdW5zaWduZWQgaXZzaXplID0gY3J5cHRvX2FlYWRfaXZzaXplKHRmbSk7CiAJdW5zaWduZWQgYXV0aHNpemUgPSBjcnlwdG9fYWVhZF9hdXRoc2l6ZSh0Zm0pOwotCWludCByZXQgPSAtRU5PTUVNOwogCXN0cnVjdCBpeF9zYV9kaXIgKmRpcjsKIAlzdHJ1Y3QgY3J5cHRfY3RsICpjcnlwdDsKLQl1bnNpZ25lZCBpbnQgY3J5cHRsZW4sIG5lbnRzOwotCXN0cnVjdCBidWZmZXJfZGVzYyAqYnVmOworCXVuc2lnbmVkIGludCBjcnlwdGxlbjsKKwlzdHJ1Y3QgYnVmZmVyX2Rlc2MgKmJ1Ziwgc3JjX2hvb2s7CiAJc3RydWN0IGFlYWRfY3R4ICpyZXFfY3R4ID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOwogCWdmcF90IGZsYWdzID0gcmVxLT5iYXNlLmZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQID8KIAkJCQlHRlBfS0VSTkVMIDogR0ZQX0FUT01JQzsKQEAgLTEwMjIsNyArOTc1LDcgQEAKIAl9CiAJY3J5cHQgPSBnZXRfY3J5cHRfZGVzYygpOwogCWlmICghY3J5cHQpCi0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRU5PTUVNOwogCiAJY3J5cHQtPmRhdGEuYWVhZF9yZXEgPSByZXE7CiAJY3J5cHQtPmNyeXB0b19jdHggPSBkaXItPm5wZV9jdHhfcGh5czsKQEAgLTEwNDEsMzEgKzk5NCwyNyBAQAogCQlCVUcoKTsgLyogLUVOT1RTVVAgYmVjYXVzZSBvZiBteSBsYXp5bmVzcyAqLwogCX0KIAotCXJlcV9jdHgtPmJ1ZmZlciA9IGRtYV9wb29sX2FsbG9jKGJ1ZmZlcl9wb29sLCBmbGFncywgJmNyeXB0LT5zcmNfYnVmKTsKLQlpZiAoIXJlcV9jdHgtPmJ1ZmZlcikKLQkJZ290byBvdXQ7Ci0JcmVxX2N0eC0+YnVmZmVyLT5waHlzX2FkZHIgPSAwOwogCS8qIEFTU09DIGRhdGEgKi8KLQluZW50cyA9IGNvdW50X3NnKHJlcS0+YXNzb2MsIHJlcS0+YXNzb2NsZW4pOwotCXJlcV9jdHgtPmFzc29jX25lbnRzID0gbmVudHM7Ci0JZG1hX21hcF9zZyhkZXYsIHJlcS0+YXNzb2MsIG5lbnRzLCBETUFfVE9fREVWSUNFKTsKLQlidWYgPSBjaGFpbnVwX2J1ZmZlcnMocmVxLT5hc3NvYywgcmVxLT5hc3NvY2xlbiwgcmVxX2N0eC0+YnVmZmVyLGZsYWdzKTsKKwlidWYgPSBjaGFpbnVwX2J1ZmZlcnMoZGV2LCByZXEtPmFzc29jLCByZXEtPmFzc29jbGVuLCAmc3JjX2hvb2ssCisJCWZsYWdzLCBETUFfVE9fREVWSUNFKTsKKwlyZXFfY3R4LT5idWZmZXIgPSBzcmNfaG9vay5uZXh0OworCWNyeXB0LT5zcmNfYnVmID0gc3JjX2hvb2sucGh5c19uZXh0OwogCWlmICghYnVmKQotCQlnb3RvIHVubWFwX3NnX2Fzc29jOworCQlnb3RvIG91dDsKIAkvKiBJViAqLwogCXNnX2luaXRfdGFibGUoJnJlcV9jdHgtPml2bGlzdCwgMSk7CiAJc2dfc2V0X2J1ZigmcmVxX2N0eC0+aXZsaXN0LCBpdiwgaXZzaXplKTsKLQlkbWFfbWFwX3NnKGRldiwgJnJlcV9jdHgtPml2bGlzdCwgMSwgRE1BX0JJRElSRUNUSU9OQUwpOwotCWJ1ZiA9IGNoYWludXBfYnVmZmVycygmcmVxX2N0eC0+aXZsaXN0LCBpdnNpemUsIGJ1ZiwgZmxhZ3MpOworCWJ1ZiA9IGNoYWludXBfYnVmZmVycyhkZXYsICZyZXFfY3R4LT5pdmxpc3QsIGl2c2l6ZSwgYnVmLCBmbGFncywKKwkJCURNQV9CSURJUkVDVElPTkFMKTsKIAlpZiAoIWJ1ZikKLQkJZ290byB1bm1hcF9zZ19pdjsKKwkJZ290byBmcmVlX2NoYWluOwogCWlmICh1bmxpa2VseShobWFjX2luY29uc2lzdGVudChyZXEtPnNyYywgY3J5cHRsZW4sIGF1dGhzaXplKSkpIHsKIAkJLyogVGhlIDEyIGhtYWMgYnl0ZXMgYXJlIHNjYXR0ZXJlZCwKIAkJICogd2UgbmVlZCB0byBjb3B5IHRoZW0gaW50byBhIHNhZmUgYnVmZmVyICovCiAJCXJlcV9jdHgtPmhtYWNfdmlydCA9IGRtYV9wb29sX2FsbG9jKGJ1ZmZlcl9wb29sLCBmbGFncywKIAkJCQkmY3J5cHQtPmljdl9yZXZfYWVzKTsKIAkJaWYgKHVubGlrZWx5KCFyZXFfY3R4LT5obWFjX3ZpcnQpKQotCQkJZ290byB1bm1hcF9zZ19pdjsKKwkJCWdvdG8gZnJlZV9jaGFpbjsKIAkJaWYgKCFlbmNyeXB0KSB7CiAJCQlzY2F0dGVyd2Fsa19tYXBfYW5kX2NvcHkocmVxX2N0eC0+aG1hY192aXJ0LAogCQkJCXJlcS0+c3JjLCBjcnlwdGxlbiwgYXV0aHNpemUsIDApOwpAQCAtMTA3NSwzMyArMTAyNCwyOCBAQAogCQlyZXFfY3R4LT5obWFjX3ZpcnQgPSBOVUxMOwogCX0KIAkvKiBDcnlwdCAqLwotCW5lbnRzID0gY291bnRfc2cocmVxLT5zcmMsIGNyeXB0bGVuICsgYXV0aHNpemUpOwotCXJlcV9jdHgtPnNyY19uZW50cyA9IG5lbnRzOwotCWRtYV9tYXBfc2coZGV2LCByZXEtPnNyYywgbmVudHMsIERNQV9CSURJUkVDVElPTkFMKTsKLQlidWYgPSBjaGFpbnVwX2J1ZmZlcnMocmVxLT5zcmMsIGNyeXB0bGVuICsgYXV0aHNpemUsIGJ1ZiwgZmxhZ3MpOworCWJ1ZiA9IGNoYWludXBfYnVmZmVycyhkZXYsIHJlcS0+c3JjLCBjcnlwdGxlbiArIGF1dGhzaXplLCBidWYsIGZsYWdzLAorCQkJRE1BX0JJRElSRUNUSU9OQUwpOwogCWlmICghYnVmKQotCQlnb3RvIHVubWFwX3NnX3NyYzsKKwkJZ290byBmcmVlX2htYWNfdmlydDsKIAlpZiAoIXJlcV9jdHgtPmhtYWNfdmlydCkgewogCQljcnlwdC0+aWN2X3Jldl9hZXMgPSBidWYtPnBoeXNfYWRkciArIGJ1Zi0+YnVmX2xlbiAtIGF1dGhzaXplOwogCX0KKwogCWNyeXB0LT5jdGxfZmxhZ3MgfD0gQ1RMX0ZMQUdfUEVSRk9STV9BRUFEOwogCXFtZ3JfcHV0X2VudHJ5KFNFTkRfUUlELCBjcnlwdF92aXJ0MnBoeXMoY3J5cHQpKTsKIAlCVUdfT04ocW1ncl9zdGF0X292ZXJmbG93KFNFTkRfUUlEKSk7CiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsKLXVubWFwX3NnX3NyYzoKLQlkbWFfdW5tYXBfc2coZGV2LCByZXEtPnNyYywgcmVxX2N0eC0+c3JjX25lbnRzLCBETUFfQklESVJFQ1RJT05BTCk7CitmcmVlX2htYWNfdmlydDoKIAlpZiAocmVxX2N0eC0+aG1hY192aXJ0KSB7CiAJCWRtYV9wb29sX2ZyZWUoYnVmZmVyX3Bvb2wsIHJlcV9jdHgtPmhtYWNfdmlydCwKIAkJCQljcnlwdC0+aWN2X3Jldl9hZXMpOwogCX0KLXVubWFwX3NnX2l2OgotCWRtYV91bm1hcF9zZyhkZXYsICZyZXFfY3R4LT5pdmxpc3QsIDEsIERNQV9CSURJUkVDVElPTkFMKTsKLXVubWFwX3NnX2Fzc29jOgotCWRtYV91bm1hcF9zZyhkZXYsIHJlcS0+YXNzb2MsIHJlcV9jdHgtPmFzc29jX25lbnRzLCBETUFfVE9fREVWSUNFKTsKLQlmcmVlX2J1Zl9jaGFpbihyZXFfY3R4LT5idWZmZXIsIGNyeXB0LT5zcmNfYnVmKTsKK2ZyZWVfY2hhaW46CisJZnJlZV9idWZfY2hhaW4oZGV2LCByZXFfY3R4LT5idWZmZXIsIGNyeXB0LT5zcmNfYnVmKTsKIG91dDoKIAljcnlwdC0+Y3RsX2ZsYWdzID0gQ1RMX0ZMQUdfVU5VU0VEOwotCXJldHVybiByZXQ7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyBpbnQgYWVhZF9zZXR1cChzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSwgdW5zaWduZWQgaW50IGF1dGhzaXplKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL0tjb25maWcKaW5kZXggNDhlYTU5ZS4uM2IzYzAxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvS2NvbmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC05OCw2ICs5OCwxNyBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgZW5hYmxlZCBJTlRFTF9JT0FURE1BIG9yIEZTTF9ETUEsIG90aGVyd2lzZQogCSAgc2F5IE4uCiAKK2NvbmZpZyBBU1lOQ19UWF9ETUEKKwlib29sICJBc3luY190eDogT2ZmbG9hZCBzdXBwb3J0IGZvciB0aGUgYXN5bmNfdHggYXBpIgorCWRlcGVuZHMgb24gRE1BX0VOR0lORQorCWhlbHAKKwkgIFRoaXMgYWxsb3dzIHRoZSBhc3luY190eCBhcGkgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Ygb2ZmbG9hZCBlbmdpbmVzIGZvcgorCSAgbWVtY3B5LCBtZW1zZXQsIHhvciwgYW5kIHJhaWQ2IHArcSBvcGVyYXRpb25zLiAgSWYgeW91ciBwbGF0Zm9ybSBoYXMKKwkgIGEgZG1hIGVuZ2luZSB0aGF0IGNhbiBwZXJmb3JtIHJhaWQgb3BlcmF0aW9ucyBhbmQgeW91IGhhdmUgZW5hYmxlZAorCSAgTURfUkFJRDQ1NiBzYXkgWS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIERNQVRFU1QKIAl0cmlzdGF0ZSAiRE1BIFRlc3QgY2xpZW50IgogCWRlcGVuZHMgb24gRE1BX0VOR0lORQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMgYi9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYwppbmRleCAyODBhOWQyLi45MjQzOGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYworKysgYi9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYwpAQCAtNTA3LDYgKzUwNyw3IEBACiAJCQkgKiBwdWJsaXNoZWQgaW4gdGhlIGdlbmVyYWwtcHVycG9zZSBhbGxvY2F0b3IKIAkJCSAqLwogCQkJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIGRldmljZS0+Y2FwX21hc2spOworCQkJZGV2aWNlLT5wcml2YXRlY250Kys7CiAJCQllcnIgPSBkbWFfY2hhbl9nZXQoY2hhbik7CiAKIAkJCWlmIChlcnIgPT0gLUVOT0RFVikgewpAQCAtNTE4LDYgKzUxOSw4IEBACiAJCQkJICAgICAgIGRtYV9jaGFuX25hbWUoY2hhbiksIGVycik7CiAJCQllbHNlCiAJCQkJYnJlYWs7CisJCQlpZiAoLS1kZXZpY2UtPnByaXZhdGVjbnQgPT0gMCkKKwkJCQlkbWFfY2FwX2NsZWFyKERNQV9QUklWQVRFLCBkZXZpY2UtPmNhcF9tYXNrKTsKIAkJCWNoYW4tPnByaXZhdGUgPSBOVUxMOwogCQkJY2hhbiA9IE5VTEw7CiAJCX0KQEAgLTUzNyw2ICs1NDAsOSBAQAogCVdBUk5fT05DRShjaGFuLT5jbGllbnRfY291bnQgIT0gMSwKIAkJICAiY2hhbiByZWZlcmVuY2UgY291bnQgJWQgIT0gMVxuIiwgY2hhbi0+Y2xpZW50X2NvdW50KTsKIAlkbWFfY2hhbl9wdXQoY2hhbik7CisJLyogZHJvcCBQUklWQVRFIGNhcCBlbmFibGVkIGJ5IF9fZG1hX3JlcXVlc3RfY2hhbm5lbCgpICovCisJaWYgKC0tY2hhbi0+ZGV2aWNlLT5wcml2YXRlY250ID09IDApCisJCWRtYV9jYXBfY2xlYXIoRE1BX1BSSVZBVEUsIGNoYW4tPmRldmljZS0+Y2FwX21hc2spOwogCWNoYW4tPnByaXZhdGUgPSBOVUxMOwogCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOwogfQpAQCAtNjAyLDYgKzYwOCwyNCBAQAogfQogRVhQT1JUX1NZTUJPTChkbWFlbmdpbmVfcHV0KTsKIAorc3RhdGljIGludCBnZXRfZG1hX2lkKHN0cnVjdCBkbWFfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IHJjOworCisgaWRyX3JldHJ5OgorCWlmICghaWRyX3ByZV9nZXQoJmRtYV9pZHIsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9sb2NrKCZkbWFfbGlzdF9tdXRleCk7CisJcmMgPSBpZHJfZ2V0X25ldygmZG1hX2lkciwgTlVMTCwgJmRldmljZS0+ZGV2X2lkKTsKKwltdXRleF91bmxvY2soJmRtYV9saXN0X211dGV4KTsKKwlpZiAocmMgPT0gLUVBR0FJTikKKwkJZ290byBpZHJfcmV0cnk7CisJZWxzZSBpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVycyBETUEgZGV2aWNlcyBmb3VuZAogICogQGRldmljZTogJmRtYV9kZXZpY2UKQEAgLTY0MCwyNyArNjY0LDI1IEBACiAJaWRyX3JlZiA9IGttYWxsb2Moc2l6ZW9mKCppZHJfcmVmKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpZHJfcmVmKQogCQlyZXR1cm4gLUVOT01FTTsKLQlhdG9taWNfc2V0KGlkcl9yZWYsIDApOwotIGlkcl9yZXRyeToKLQlpZiAoIWlkcl9wcmVfZ2V0KCZkbWFfaWRyLCBHRlBfS0VSTkVMKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbXV0ZXhfbG9jaygmZG1hX2xpc3RfbXV0ZXgpOwotCXJjID0gaWRyX2dldF9uZXcoJmRtYV9pZHIsIE5VTEwsICZkZXZpY2UtPmRldl9pZCk7Ci0JbXV0ZXhfdW5sb2NrKCZkbWFfbGlzdF9tdXRleCk7Ci0JaWYgKHJjID09IC1FQUdBSU4pCi0JCWdvdG8gaWRyX3JldHJ5OwotCWVsc2UgaWYgKHJjICE9IDApCisJcmMgPSBnZXRfZG1hX2lkKGRldmljZSk7CisJaWYgKHJjICE9IDApIHsKKwkJa2ZyZWUoaWRyX3JlZik7CiAJCXJldHVybiByYzsKKwl9CisKKwlhdG9taWNfc2V0KGlkcl9yZWYsIDApOwogCiAJLyogcmVwcmVzZW50IGNoYW5uZWxzIGluIHN5c2ZzLiBQcm9iYWJseSB3YW50IGRldnMgdG9vICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFuLCAmZGV2aWNlLT5jaGFubmVscywgZGV2aWNlX25vZGUpIHsKKwkJcmMgPSAtRU5PTUVNOwogCQljaGFuLT5sb2NhbCA9IGFsbG9jX3BlcmNwdSh0eXBlb2YoKmNoYW4tPmxvY2FsKSk7CiAJCWlmIChjaGFuLT5sb2NhbCA9PSBOVUxMKQotCQkJY29udGludWU7CisJCQlnb3RvIGVycl9vdXQ7CiAJCWNoYW4tPmRldiA9IGt6YWxsb2Moc2l6ZW9mKCpjaGFuLT5kZXYpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGNoYW4tPmRldiA9PSBOVUxMKSB7CiAJCQlmcmVlX3BlcmNwdShjaGFuLT5sb2NhbCk7Ci0JCQljb250aW51ZTsKKwkJCWNoYW4tPmxvY2FsID0gTlVMTDsKKwkJCWdvdG8gZXJyX291dDsKIAkJfQogCiAJCWNoYW4tPmNoYW5faWQgPSBjaGFuY250Kys7CkBAIC02NzcsNiArNjk5LDggQEAKIAkJaWYgKHJjKSB7CiAJCQlmcmVlX3BlcmNwdShjaGFuLT5sb2NhbCk7CiAJCQljaGFuLT5sb2NhbCA9IE5VTEw7CisJCQlrZnJlZShjaGFuLT5kZXYpOworCQkJYXRvbWljX2RlYyhpZHJfcmVmKTsKIAkJCWdvdG8gZXJyX291dDsKIAkJfQogCQljaGFuLT5jbGllbnRfY291bnQgPSAwOwpAQCAtNzAxLDEyICs3MjUsMjMgQEAKIAkJCX0KIAkJfQogCWxpc3RfYWRkX3RhaWxfcmN1KCZkZXZpY2UtPmdsb2JhbF9ub2RlLCAmZG1hX2RldmljZV9saXN0KTsKKwlpZiAoZG1hX2hhc19jYXAoRE1BX1BSSVZBVEUsIGRldmljZS0+Y2FwX21hc2spKQorCQlkZXZpY2UtPnByaXZhdGVjbnQrKzsJLyogQWx3YXlzIHByaXZhdGUgKi8KIAlkbWFfY2hhbm5lbF9yZWJhbGFuY2UoKTsKIAltdXRleF91bmxvY2soJmRtYV9saXN0X211dGV4KTsKIAogCXJldHVybiAwOwogCiBlcnJfb3V0OgorCS8qIGlmIHdlIG5ldmVyIHJlZ2lzdGVyZWQgYSBjaGFubmVsIGp1c3QgcmVsZWFzZSB0aGUgaWRyICovCisJaWYgKGF0b21pY19yZWFkKGlkcl9yZWYpID09IDApIHsKKwkJbXV0ZXhfbG9jaygmZG1hX2xpc3RfbXV0ZXgpOworCQlpZHJfcmVtb3ZlKCZkbWFfaWRyLCBkZXZpY2UtPmRldl9pZCk7CisJCW11dGV4X3VubG9jaygmZG1hX2xpc3RfbXV0ZXgpOworCQlrZnJlZShpZHJfcmVmKTsKKwkJcmV0dXJuIHJjOworCX0KKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hhbiwgJmRldmljZS0+Y2hhbm5lbHMsIGRldmljZV9ub2RlKSB7CiAJCWlmIChjaGFuLT5sb2NhbCA9PSBOVUxMKQogCQkJY29udGludWU7CkBAIC04OTMsNiArOTI4LDcgQEAKIHsKIAl0eC0+Y2hhbiA9IGNoYW47CiAJc3Bpbl9sb2NrX2luaXQoJnR4LT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmdHgtPnR4X2xpc3QpOwogfQogRVhQT1JUX1NZTUJPTChkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hdGVzdC5jIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCmluZGV4IGUxOTBkOGIuLmEyN2MwZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYworKysgYi9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKQEAgLTM4LDYgKzM4LDExIEBACiBNT0RVTEVfUEFSTV9ERVNDKG1heF9jaGFubmVscywKIAkJIk1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzIHRvIHVzZSAoZGVmYXVsdDogYWxsKSIpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IHhvcl9zb3VyY2VzID0gMzsKK21vZHVsZV9wYXJhbSh4b3Jfc291cmNlcywgdWludCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHhvcl9zb3VyY2VzLAorCQkiTnVtYmVyIG9mIHhvciBzb3VyY2UgYnVmZmVycyAoZGVmYXVsdDogMykiKTsKKwogLyoKICAqIEluaXRpYWxpemF0aW9uIHBhdHRlcm5zLiBBbGwgYnl0ZXMgaW4gdGhlIHNvdXJjZSBidWZmZXIgaGFzIGJpdCA3CiAgKiBzZXQsIGFsbCBieXRlcyBpbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGhhcyBiaXQgNyBjbGVhcmVkLgpAQCAtNTksOCArNjQsOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRhc2s7CiAJc3RydWN0IGRtYV9jaGFuCQkqY2hhbjsKLQl1OAkJCSpzcmNidWY7Ci0JdTgJCQkqZHN0YnVmOworCXU4CQkJKipzcmNzOworCXU4CQkJKipkc3RzOworCWVudW0gZG1hX3RyYW5zYWN0aW9uX3R5cGUgdHlwZTsKIH07CiAKIHN0cnVjdCBkbWF0ZXN0X2NoYW4gewpAQCAtOTgsMzAgKzEwNCwzNyBAQAogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyB2b2lkIGRtYXRlc3RfaW5pdF9zcmNidWYodTggKmJ1ZiwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG1hdGVzdF9pbml0X3NyY3ModTggKipidWZzLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IGk7CisJdTggKmJ1ZjsKIAotCWZvciAoaSA9IDA7IGkgPCBzdGFydDsgaSsrKQotCQlidWZbaV0gPSBQQVRURVJOX1NSQyB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7Ci0JZm9yICggOyBpIDwgc3RhcnQgKyBsZW47IGkrKykKLQkJYnVmW2ldID0gUEFUVEVSTl9TUkMgfCBQQVRURVJOX0NPUFkKLQkJCXwgKH5pICYgUEFUVEVSTl9DT1VOVF9NQVNLKTs7Ci0JZm9yICggOyBpIDwgdGVzdF9idWZfc2l6ZTsgaSsrKQotCQlidWZbaV0gPSBQQVRURVJOX1NSQyB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJZm9yICg7IChidWYgPSAqYnVmcyk7IGJ1ZnMrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgc3RhcnQ7IGkrKykKKwkJCWJ1ZltpXSA9IFBBVFRFUk5fU1JDIHwgKH5pICYgUEFUVEVSTl9DT1VOVF9NQVNLKTsKKwkJZm9yICggOyBpIDwgc3RhcnQgKyBsZW47IGkrKykKKwkJCWJ1ZltpXSA9IFBBVFRFUk5fU1JDIHwgUEFUVEVSTl9DT1BZCisJCQkJfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOzsKKwkJZm9yICggOyBpIDwgdGVzdF9idWZfc2l6ZTsgaSsrKQorCQkJYnVmW2ldID0gUEFUVEVSTl9TUkMgfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOworCQlidWYrKzsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGRtYXRlc3RfaW5pdF9kc3RidWYodTggKmJ1ZiwgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG1hdGVzdF9pbml0X2RzdHModTggKipidWZzLCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IGk7CisJdTggKmJ1ZjsKIAotCWZvciAoaSA9IDA7IGkgPCBzdGFydDsgaSsrKQotCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7Ci0JZm9yICggOyBpIDwgc3RhcnQgKyBsZW47IGkrKykKLQkJYnVmW2ldID0gUEFUVEVSTl9EU1QgfCBQQVRURVJOX09WRVJXUklURQotCQkJfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOwotCWZvciAoIDsgaSA8IHRlc3RfYnVmX3NpemU7IGkrKykKLQkJYnVmW2ldID0gUEFUVEVSTl9EU1QgfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOworCWZvciAoOyAoYnVmID0gKmJ1ZnMpOyBidWZzKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHN0YXJ0OyBpKyspCisJCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJCWZvciAoIDsgaSA8IHN0YXJ0ICsgbGVuOyBpKyspCisJCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8IFBBVFRFUk5fT1ZFUldSSVRFCisJCQkJfCAofmkgJiBQQVRURVJOX0NPVU5UX01BU0spOworCQlmb3IgKCA7IGkgPCB0ZXN0X2J1Zl9zaXplOyBpKyspCisJCQlidWZbaV0gPSBQQVRURVJOX0RTVCB8ICh+aSAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBkbWF0ZXN0X21pc21hdGNoKHU4IGFjdHVhbCwgdTggcGF0dGVybiwgdW5zaWduZWQgaW50IGluZGV4LApAQCAtMTUwLDIzICsxNjMsMzAgQEAKIAkJCQl0aHJlYWRfbmFtZSwgaW5kZXgsIGV4cGVjdGVkLCBhY3R1YWwpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRtYXRlc3RfdmVyaWZ5KHU4ICpidWYsIHVuc2lnbmVkIGludCBzdGFydCwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZG1hdGVzdF92ZXJpZnkodTggKipidWZzLCB1bnNpZ25lZCBpbnQgc3RhcnQsCiAJCXVuc2lnbmVkIGludCBlbmQsIHVuc2lnbmVkIGludCBjb3VudGVyLCB1OCBwYXR0ZXJuLAogCQlib29sIGlzX3NyY2J1ZikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBpbnQgZXJyb3JfY291bnQgPSAwOwogCXU4IGFjdHVhbDsKKwl1OCBleHBlY3RlZDsKKwl1OCAqYnVmOworCXVuc2lnbmVkIGludCBjb3VudGVyX29yaWcgPSBjb3VudGVyOwogCi0JZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewotCQlhY3R1YWwgPSBidWZbaV07Ci0JCWlmIChhY3R1YWwgIT0gKHBhdHRlcm4gfCAofmNvdW50ZXIgJiBQQVRURVJOX0NPVU5UX01BU0spKSkgewotCQkJaWYgKGVycm9yX2NvdW50IDwgMzIpCi0JCQkJZG1hdGVzdF9taXNtYXRjaChhY3R1YWwsIHBhdHRlcm4sIGksIGNvdW50ZXIsCi0JCQkJCQlpc19zcmNidWYpOwotCQkJZXJyb3JfY291bnQrKzsKKwlmb3IgKDsgKGJ1ZiA9ICpidWZzKTsgYnVmcysrKSB7CisJCWNvdW50ZXIgPSBjb3VudGVyX29yaWc7CisJCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKKwkJCWFjdHVhbCA9IGJ1ZltpXTsKKwkJCWV4cGVjdGVkID0gcGF0dGVybiB8ICh+Y291bnRlciAmIFBBVFRFUk5fQ09VTlRfTUFTSyk7CisJCQlpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSB7CisJCQkJaWYgKGVycm9yX2NvdW50IDwgMzIpCisJCQkJCWRtYXRlc3RfbWlzbWF0Y2goYWN0dWFsLCBwYXR0ZXJuLCBpLAorCQkJCQkJCSBjb3VudGVyLCBpc19zcmNidWYpOworCQkJCWVycm9yX2NvdW50Kys7CisJCQl9CisJCQljb3VudGVyKys7CiAJCX0KLQkJY291bnRlcisrOwogCX0KIAogCWlmIChlcnJvcl9jb3VudCA+IDMyKQpAQCAtMTc2LDEyICsxOTYsMTcgQEAKIAlyZXR1cm4gZXJyb3JfY291bnQ7CiB9CiAKK3N0YXRpYyB2b2lkIGRtYXRlc3RfY2FsbGJhY2sodm9pZCAqY29tcGxldGlvbikKK3sKKwljb21wbGV0ZShjb21wbGV0aW9uKTsKK30KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gcmVwZWF0ZWRseSB0ZXN0cyBETUEgdHJhbnNmZXJzIG9mIHZhcmlvdXMgbGVuZ3RocyBhbmQKLSAqIG9mZnNldHMgdW50aWwgaXQgaXMgdG9sZCB0byBleGl0IGJ5IGt0aHJlYWRfc3RvcCgpLiBUaGVyZSBtYXkgYmUKLSAqIG11bHRpcGxlIHRocmVhZHMgcnVubmluZyB0aGlzIGZ1bmN0aW9uIGluIHBhcmFsbGVsIGZvciBhIHNpbmdsZQotICogY2hhbm5lbCwgYW5kIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBjaGFubmVscyBiZWluZyB0ZXN0ZWQgaW4KLSAqIHBhcmFsbGVsLgorICogb2Zmc2V0cyBmb3IgYSBnaXZlbiBvcGVyYXRpb24gdHlwZSB1bnRpbCBpdCBpcyB0b2xkIHRvIGV4aXQgYnkKKyAqIGt0aHJlYWRfc3RvcCgpLiBUaGVyZSBtYXkgYmUgbXVsdGlwbGUgdGhyZWFkcyBydW5uaW5nIHRoaXMgZnVuY3Rpb24KKyAqIGluIHBhcmFsbGVsIGZvciBhIHNpbmdsZSBjaGFubmVsLCBhbmQgdGhlcmUgbWF5IGJlIG11bHRpcGxlIGNoYW5uZWxzCisgKiBiZWluZyB0ZXN0ZWQgaW4gcGFyYWxsZWwuCiAgKgogICogQmVmb3JlIGVhY2ggdGVzdCwgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYnVmZmVyIGlzIGluaXRpYWxpemVkCiAgKiB3aXRoIGEga25vd24gcGF0dGVybi4gVGhpcyBwYXR0ZXJuIGlzIGRpZmZlcmVudCBkZXBlbmRpbmcgb24KQEAgLTIwMSwyNSArMjI2LDU3IEBACiAJdW5zaWduZWQgaW50CQl0b3RhbF90ZXN0cyA9IDA7CiAJZG1hX2Nvb2tpZV90CQljb29raWU7CiAJZW51bSBkbWFfc3RhdHVzCQlzdGF0dXM7CisJZW51bSBkbWFfY3RybF9mbGFncyAJZmxhZ3M7CiAJaW50CQkJcmV0OworCWludAkJCXNyY19jbnQ7CisJaW50CQkJZHN0X2NudDsKKwlpbnQJCQlpOwogCiAJdGhyZWFkX25hbWUgPSBjdXJyZW50LT5jb21tOwogCiAJcmV0ID0gLUVOT01FTTsKLQl0aHJlYWQtPnNyY2J1ZiA9IGttYWxsb2ModGVzdF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0aHJlYWQtPnNyY2J1ZikKLQkJZ290byBlcnJfc3JjYnVmOwotCXRocmVhZC0+ZHN0YnVmID0ga21hbGxvYyh0ZXN0X2J1Zl9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRocmVhZC0+ZHN0YnVmKQotCQlnb3RvIGVycl9kc3RidWY7CiAKIAlzbXBfcm1iKCk7CiAJY2hhbiA9IHRocmVhZC0+Y2hhbjsKKwlpZiAodGhyZWFkLT50eXBlID09IERNQV9NRU1DUFkpCisJCXNyY19jbnQgPSBkc3RfY250ID0gMTsKKwllbHNlIGlmICh0aHJlYWQtPnR5cGUgPT0gRE1BX1hPUikgeworCQlzcmNfY250ID0geG9yX3NvdXJjZXMgfCAxOyAvKiBmb3JjZSBvZGQgdG8gZW5zdXJlIGRzdCA9IHNyYyAqLworCQlkc3RfY250ID0gMTsKKwl9IGVsc2UKKwkJZ290byBlcnJfc3JjczsKKworCXRocmVhZC0+c3JjcyA9IGtjYWxsb2Moc3JjX2NudCsxLCBzaXplb2YodTggKiksIEdGUF9LRVJORUwpOworCWlmICghdGhyZWFkLT5zcmNzKQorCQlnb3RvIGVycl9zcmNzOworCWZvciAoaSA9IDA7IGkgPCBzcmNfY250OyBpKyspIHsKKwkJdGhyZWFkLT5zcmNzW2ldID0ga21hbGxvYyh0ZXN0X2J1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0aHJlYWQtPnNyY3NbaV0pCisJCQlnb3RvIGVycl9zcmNidWY7CisJfQorCXRocmVhZC0+c3Jjc1tpXSA9IE5VTEw7CisKKwl0aHJlYWQtPmRzdHMgPSBrY2FsbG9jKGRzdF9jbnQrMSwgc2l6ZW9mKHU4ICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRocmVhZC0+ZHN0cykKKwkJZ290byBlcnJfZHN0czsKKwlmb3IgKGkgPSAwOyBpIDwgZHN0X2NudDsgaSsrKSB7CisJCXRocmVhZC0+ZHN0c1tpXSA9IGttYWxsb2ModGVzdF9idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdGhyZWFkLT5kc3RzW2ldKQorCQkJZ290byBlcnJfZHN0YnVmOworCX0KKwl0aHJlYWQtPmRzdHNbaV0gPSBOVUxMOworCisJc2V0X3VzZXJfbmljZShjdXJyZW50LCAxMCk7CisKKwlmbGFncyA9IERNQV9DVFJMX0FDSyB8IERNQV9DT01QTF9TS0lQX0RFU1RfVU5NQVAgfCBETUFfUFJFUF9JTlRFUlJVUFQ7CiAKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlzdHJ1Y3QgZG1hX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2aWNlOwotCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4OwotCQlkbWFfYWRkcl90IGRtYV9zcmMsIGRtYV9kZXN0OworCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4ID0gTlVMTDsKKwkJZG1hX2FkZHJfdCBkbWFfc3Jjc1tzcmNfY250XTsKKwkJZG1hX2FkZHJfdCBkbWFfZHN0c1tkc3RfY250XTsKKwkJc3RydWN0IGNvbXBsZXRpb24gY21wOworCQl1bnNpZ25lZCBsb25nIHRtbyA9IG1zZWNzX3RvX2ppZmZpZXMoMzAwMCk7CiAKIAkJdG90YWxfdGVzdHMrKzsKIApAQCAtMjI3LDIyICsyODQsNDEgQEAKIAkJc3JjX29mZiA9IGRtYXRlc3RfcmFuZG9tKCkgJSAodGVzdF9idWZfc2l6ZSAtIGxlbiArIDEpOwogCQlkc3Rfb2ZmID0gZG1hdGVzdF9yYW5kb20oKSAlICh0ZXN0X2J1Zl9zaXplIC0gbGVuICsgMSk7CiAKLQkJZG1hdGVzdF9pbml0X3NyY2J1Zih0aHJlYWQtPnNyY2J1Ziwgc3JjX29mZiwgbGVuKTsKLQkJZG1hdGVzdF9pbml0X2RzdGJ1Zih0aHJlYWQtPmRzdGJ1ZiwgZHN0X29mZiwgbGVuKTsKKwkJZG1hdGVzdF9pbml0X3NyY3ModGhyZWFkLT5zcmNzLCBzcmNfb2ZmLCBsZW4pOworCQlkbWF0ZXN0X2luaXRfZHN0cyh0aHJlYWQtPmRzdHMsIGRzdF9vZmYsIGxlbik7CiAKLQkJZG1hX3NyYyA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LCB0aHJlYWQtPnNyY2J1ZiArIHNyY19vZmYsCi0JCQkJbGVuLCBETUFfVE9fREVWSUNFKTsKKwkJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykgeworCQkJdTggKmJ1ZiA9IHRocmVhZC0+c3Jjc1tpXSArIHNyY19vZmY7CisKKwkJCWRtYV9zcmNzW2ldID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYsIGJ1ZiwgbGVuLAorCQkJCQkJICAgICBETUFfVE9fREVWSUNFKTsKKwkJfQogCQkvKiBtYXAgd2l0aCBETUFfQklESVJFQ1RJT05BTCB0byBmb3JjZSB3cml0ZWJhY2svaW52YWxpZGF0ZSAqLwotCQlkbWFfZGVzdCA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LCB0aHJlYWQtPmRzdGJ1ZiwKLQkJCQl0ZXN0X2J1Zl9zaXplLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWZvciAoaSA9IDA7IGkgPCBkc3RfY250OyBpKyspIHsKKwkJCWRtYV9kc3RzW2ldID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYsIHRocmVhZC0+ZHN0c1tpXSwKKwkJCQkJCSAgICAgdGVzdF9idWZfc2l6ZSwKKwkJCQkJCSAgICAgRE1BX0JJRElSRUNUSU9OQUwpOworCQl9CiAKLQkJdHggPSBkZXYtPmRldmljZV9wcmVwX2RtYV9tZW1jcHkoY2hhbiwgZG1hX2Rlc3QgKyBkc3Rfb2ZmLAotCQkJCWRtYV9zcmMsIGxlbiwKLQkJCQlETUFfQ1RSTF9BQ0sgfCBETUFfQ09NUExfU0tJUF9ERVNUX1VOTUFQKTsKKwkJaWYgKHRocmVhZC0+dHlwZSA9PSBETUFfTUVNQ1BZKQorCQkJdHggPSBkZXYtPmRldmljZV9wcmVwX2RtYV9tZW1jcHkoY2hhbiwKKwkJCQkJCQkgZG1hX2RzdHNbMF0gKyBkc3Rfb2ZmLAorCQkJCQkJCSBkbWFfc3Jjc1swXSwgbGVuLAorCQkJCQkJCSBmbGFncyk7CisJCWVsc2UgaWYgKHRocmVhZC0+dHlwZSA9PSBETUFfWE9SKQorCQkJdHggPSBkZXYtPmRldmljZV9wcmVwX2RtYV94b3IoY2hhbiwKKwkJCQkJCSAgICAgIGRtYV9kc3RzWzBdICsgZHN0X29mZiwKKwkJCQkJCSAgICAgIGRtYV9zcmNzLCB4b3Jfc291cmNlcywKKwkJCQkJCSAgICAgIGxlbiwgZmxhZ3MpOworCiAJCWlmICghdHgpIHsKLQkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsIGRtYV9zcmMsIGxlbiwgRE1BX1RPX0RFVklDRSk7Ci0JCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LCBkbWFfZGVzdCwKLQkJCQkJdGVzdF9idWZfc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwpOworCQkJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LCBkbWFfc3Jjc1tpXSwgbGVuLAorCQkJCQkJIERNQV9UT19ERVZJQ0UpOworCQkJZm9yIChpID0gMDsgaSA8IGRzdF9jbnQ7IGkrKykKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LCBkbWFfZHN0c1tpXSwKKwkJCQkJCSB0ZXN0X2J1Zl9zaXplLAorCQkJCQkJIERNQV9CSURJUkVDVElPTkFMKTsKIAkJCXByX3dhcm5pbmcoIiVzOiAjJXU6IHByZXAgZXJyb3Igd2l0aCBzcmNfb2ZmPTB4JXggIgogCQkJCQkiZHN0X29mZj0weCV4IGxlbj0weCV4XG4iLAogCQkJCQl0aHJlYWRfbmFtZSwgdG90YWxfdGVzdHMgLSAxLApAQCAtMjUxLDcgKzMyNywxMCBAQAogCQkJZmFpbGVkX3Rlc3RzKys7CiAJCQljb250aW51ZTsKIAkJfQotCQl0eC0+Y2FsbGJhY2sgPSBOVUxMOworCisJCWluaXRfY29tcGxldGlvbigmY21wKTsKKwkJdHgtPmNhbGxiYWNrID0gZG1hdGVzdF9jYWxsYmFjazsKKwkJdHgtPmNhbGxiYWNrX3BhcmFtID0gJmNtcDsKIAkJY29va2llID0gdHgtPnR4X3N1Ym1pdCh0eCk7CiAKIAkJaWYgKGRtYV9zdWJtaXRfZXJyb3IoY29va2llKSkgewpAQCAtMjYzLDQ0ICszNDIsNTAgQEAKIAkJCWZhaWxlZF90ZXN0cysrOwogCQkJY29udGludWU7CiAJCX0KLQkJZG1hX2FzeW5jX21lbWNweV9pc3N1ZV9wZW5kaW5nKGNoYW4pOworCQlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhjaGFuKTsKIAotCQlkbyB7Ci0JCQltc2xlZXAoMSk7Ci0JCQlzdGF0dXMgPSBkbWFfYXN5bmNfbWVtY3B5X2NvbXBsZXRlKAotCQkJCQljaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpOwotCQl9IHdoaWxlIChzdGF0dXMgPT0gRE1BX0lOX1BST0dSRVNTKTsKKwkJdG1vID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjbXAsIHRtbyk7CisJCXN0YXR1cyA9IGRtYV9hc3luY19pc190eF9jb21wbGV0ZShjaGFuLCBjb29raWUsIE5VTEwsIE5VTEwpOwogCi0JCWlmIChzdGF0dXMgPT0gRE1BX0VSUk9SKSB7Ci0JCQlwcl93YXJuaW5nKCIlczogIyV1OiBlcnJvciBkdXJpbmcgY29weVxuIiwKLQkJCQkJdGhyZWFkX25hbWUsIHRvdGFsX3Rlc3RzIC0gMSk7CisJCWlmICh0bW8gPT0gMCkgeworCQkJcHJfd2FybmluZygiJXM6ICMldTogdGVzdCB0aW1lZCBvdXRcbiIsCisJCQkJICAgdGhyZWFkX25hbWUsIHRvdGFsX3Rlc3RzIC0gMSk7CisJCQlmYWlsZWRfdGVzdHMrKzsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHN0YXR1cyAhPSBETUFfU1VDQ0VTUykgeworCQkJcHJfd2FybmluZygiJXM6ICMldTogZ290IGNvbXBsZXRpb24gY2FsbGJhY2ssIgorCQkJCSAgICIgYnV0IHN0YXR1cyBpcyBcJyVzXCdcbiIsCisJCQkJICAgdGhyZWFkX25hbWUsIHRvdGFsX3Rlc3RzIC0gMSwKKwkJCQkgICBzdGF0dXMgPT0gRE1BX0VSUk9SID8gImVycm9yIiA6ICJpbiBwcm9ncmVzcyIpOwogCQkJZmFpbGVkX3Rlc3RzKys7CiAJCQljb250aW51ZTsKIAkJfQorCiAJCS8qIFVubWFwIGJ5IG15c2VsZiAoc2VlIERNQV9DT01QTF9TS0lQX0RFU1RfVU5NQVAgYWJvdmUpICovCi0JCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsIGRtYV9kZXN0LAotCQkJCXRlc3RfYnVmX3NpemUsIERNQV9CSURJUkVDVElPTkFMKTsKKwkJZm9yIChpID0gMDsgaSA8IGRzdF9jbnQ7IGkrKykKKwkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LT5kZXYsIGRtYV9kc3RzW2ldLCB0ZXN0X2J1Zl9zaXplLAorCQkJCQkgRE1BX0JJRElSRUNUSU9OQUwpOwogCiAJCWVycm9yX2NvdW50ID0gMDsKIAogCQlwcl9kZWJ1ZygiJXM6IHZlcmlmeWluZyBzb3VyY2UgYnVmZmVyLi4uXG4iLCB0aHJlYWRfbmFtZSk7Ci0JCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+c3JjYnVmLCAwLCBzcmNfb2ZmLAorCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPnNyY3MsIDAsIHNyY19vZmYsCiAJCQkJMCwgUEFUVEVSTl9TUkMsIHRydWUpOwotCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPnNyY2J1Ziwgc3JjX29mZiwKKwkJZXJyb3JfY291bnQgKz0gZG1hdGVzdF92ZXJpZnkodGhyZWFkLT5zcmNzLCBzcmNfb2ZmLAogCQkJCXNyY19vZmYgKyBsZW4sIHNyY19vZmYsCiAJCQkJUEFUVEVSTl9TUkMgfCBQQVRURVJOX0NPUFksIHRydWUpOwotCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPnNyY2J1Ziwgc3JjX29mZiArIGxlbiwKKwkJZXJyb3JfY291bnQgKz0gZG1hdGVzdF92ZXJpZnkodGhyZWFkLT5zcmNzLCBzcmNfb2ZmICsgbGVuLAogCQkJCXRlc3RfYnVmX3NpemUsIHNyY19vZmYgKyBsZW4sCiAJCQkJUEFUVEVSTl9TUkMsIHRydWUpOwogCiAJCXByX2RlYnVnKCIlczogdmVyaWZ5aW5nIGRlc3QgYnVmZmVyLi4uXG4iLAogCQkJCXRocmVhZC0+dGFzay0+Y29tbSk7Ci0JCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+ZHN0YnVmLCAwLCBkc3Rfb2ZmLAorCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPmRzdHMsIDAsIGRzdF9vZmYsCiAJCQkJMCwgUEFUVEVSTl9EU1QsIGZhbHNlKTsKLQkJZXJyb3JfY291bnQgKz0gZG1hdGVzdF92ZXJpZnkodGhyZWFkLT5kc3RidWYsIGRzdF9vZmYsCisJCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+ZHN0cywgZHN0X29mZiwKIAkJCQlkc3Rfb2ZmICsgbGVuLCBzcmNfb2ZmLAogCQkJCVBBVFRFUk5fU1JDIHwgUEFUVEVSTl9DT1BZLCBmYWxzZSk7Ci0JCWVycm9yX2NvdW50ICs9IGRtYXRlc3RfdmVyaWZ5KHRocmVhZC0+ZHN0YnVmLCBkc3Rfb2ZmICsgbGVuLAorCQllcnJvcl9jb3VudCArPSBkbWF0ZXN0X3ZlcmlmeSh0aHJlYWQtPmRzdHMsIGRzdF9vZmYgKyBsZW4sCiAJCQkJdGVzdF9idWZfc2l6ZSwgZHN0X29mZiArIGxlbiwKIAkJCQlQQVRURVJOX0RTVCwgZmFsc2UpOwogCkBAIC0zMTksMTAgKzQwNCwxNiBAQAogCX0KIAogCXJldCA9IDA7Ci0Ja2ZyZWUodGhyZWFkLT5kc3RidWYpOworCWZvciAoaSA9IDA7IHRocmVhZC0+ZHN0c1tpXTsgaSsrKQorCQlrZnJlZSh0aHJlYWQtPmRzdHNbaV0pOwogZXJyX2RzdGJ1ZjoKLQlrZnJlZSh0aHJlYWQtPnNyY2J1Zik7CisJa2ZyZWUodGhyZWFkLT5kc3RzKTsKK2Vycl9kc3RzOgorCWZvciAoaSA9IDA7IHRocmVhZC0+c3Jjc1tpXTsgaSsrKQorCQlrZnJlZSh0aHJlYWQtPnNyY3NbaV0pOwogZXJyX3NyY2J1ZjoKKwlrZnJlZSh0aHJlYWQtPnNyY3MpOworZXJyX3NyY3M6CiAJcHJfbm90aWNlKCIlczogdGVybWluYXRpbmcgYWZ0ZXIgJXUgdGVzdHMsICV1IGZhaWx1cmVzIChzdGF0dXMgJWQpXG4iLAogCQkJdGhyZWFkX25hbWUsIHRvdGFsX3Rlc3RzLCBmYWlsZWRfdGVzdHMsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTM0NCwxMSArNDM1LDU0IEBACiAJa2ZyZWUoZHRjKTsKIH0KIAorc3RhdGljIGludCBkbWF0ZXN0X2FkZF90aHJlYWRzKHN0cnVjdCBkbWF0ZXN0X2NoYW4gKmR0YywgZW51bSBkbWFfdHJhbnNhY3Rpb25fdHlwZSB0eXBlKQoreworCXN0cnVjdCBkbWF0ZXN0X3RocmVhZCAqdGhyZWFkOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGR0Yy0+Y2hhbjsKKwljaGFyICpvcDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICh0eXBlID09IERNQV9NRU1DUFkpCisJCW9wID0gImNvcHkiOworCWVsc2UgaWYgKHR5cGUgPT0gRE1BX1hPUikKKwkJb3AgPSAieG9yIjsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IHRocmVhZHNfcGVyX2NoYW47IGkrKykgeworCQl0aHJlYWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hdGVzdF90aHJlYWQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0aHJlYWQpIHsKKwkJCXByX3dhcm5pbmcoImRtYXRlc3Q6IE5vIG1lbW9yeSBmb3IgJXMtJXMldVxuIiwKKwkJCQkgICBkbWFfY2hhbl9uYW1lKGNoYW4pLCBvcCwgaSk7CisKKwkJCWJyZWFrOworCQl9CisJCXRocmVhZC0+Y2hhbiA9IGR0Yy0+Y2hhbjsKKwkJdGhyZWFkLT50eXBlID0gdHlwZTsKKwkJc21wX3dtYigpOworCQl0aHJlYWQtPnRhc2sgPSBrdGhyZWFkX3J1bihkbWF0ZXN0X2Z1bmMsIHRocmVhZCwgIiVzLSVzJXUiLAorCQkJCWRtYV9jaGFuX25hbWUoY2hhbiksIG9wLCBpKTsKKwkJaWYgKElTX0VSUih0aHJlYWQtPnRhc2spKSB7CisJCQlwcl93YXJuaW5nKCJkbWF0ZXN0OiBGYWlsZWQgdG8gcnVuIHRocmVhZCAlcy0lcyV1XG4iLAorCQkJCQlkbWFfY2hhbl9uYW1lKGNoYW4pLCBvcCwgaSk7CisJCQlrZnJlZSh0aHJlYWQpOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBzcmNidWYgYW5kIGRzdGJ1ZiBhcmUgYWxsb2NhdGVkIGJ5IHRoZSB0aHJlYWQgaXRzZWxmICovCisKKwkJbGlzdF9hZGRfdGFpbCgmdGhyZWFkLT5ub2RlLCAmZHRjLT50aHJlYWRzKTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKwogc3RhdGljIGludCBkbWF0ZXN0X2FkZF9jaGFubmVsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKIHsKIAlzdHJ1Y3QgZG1hdGVzdF9jaGFuCSpkdGM7Ci0Jc3RydWN0IGRtYXRlc3RfdGhyZWFkCSp0aHJlYWQ7Ci0JdW5zaWduZWQgaW50CQlpOworCXN0cnVjdCBkbWFfZGV2aWNlCSpkbWFfZGV2ID0gY2hhbi0+ZGV2aWNlOworCXVuc2lnbmVkIGludAkJdGhyZWFkX2NvdW50ID0gMDsKKwl1bnNpZ25lZCBpbnQJCWNudDsKIAogCWR0YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbWF0ZXN0X2NoYW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWR0YykgewpAQCAtMzU5LDMwICs0OTMsMTcgQEAKIAlkdGMtPmNoYW4gPSBjaGFuOwogCUlOSVRfTElTVF9IRUFEKCZkdGMtPnRocmVhZHMpOwogCi0JZm9yIChpID0gMDsgaSA8IHRocmVhZHNfcGVyX2NoYW47IGkrKykgewotCQl0aHJlYWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hdGVzdF90aHJlYWQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0aHJlYWQpIHsKLQkJCXByX3dhcm5pbmcoImRtYXRlc3Q6IE5vIG1lbW9yeSBmb3IgJXMtdGVzdCV1XG4iLAotCQkJCSAgIGRtYV9jaGFuX25hbWUoY2hhbiksIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJdGhyZWFkLT5jaGFuID0gZHRjLT5jaGFuOwotCQlzbXBfd21iKCk7Ci0JCXRocmVhZC0+dGFzayA9IGt0aHJlYWRfcnVuKGRtYXRlc3RfZnVuYywgdGhyZWFkLCAiJXMtdGVzdCV1IiwKLQkJCQlkbWFfY2hhbl9uYW1lKGNoYW4pLCBpKTsKLQkJaWYgKElTX0VSUih0aHJlYWQtPnRhc2spKSB7Ci0JCQlwcl93YXJuaW5nKCJkbWF0ZXN0OiBGYWlsZWQgdG8gcnVuIHRocmVhZCAlcy10ZXN0JXVcbiIsCi0JCQkJCWRtYV9jaGFuX25hbWUoY2hhbiksIGkpOwotCQkJa2ZyZWUodGhyZWFkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogc3JjYnVmIGFuZCBkc3RidWYgYXJlIGFsbG9jYXRlZCBieSB0aGUgdGhyZWFkIGl0c2VsZiAqLwotCi0JCWxpc3RfYWRkX3RhaWwoJnRocmVhZC0+bm9kZSwgJmR0Yy0+dGhyZWFkcyk7CisJaWYgKGRtYV9oYXNfY2FwKERNQV9NRU1DUFksIGRtYV9kZXYtPmNhcF9tYXNrKSkgeworCQljbnQgPSBkbWF0ZXN0X2FkZF90aHJlYWRzKGR0YywgRE1BX01FTUNQWSk7CisJCXRocmVhZF9jb3VudCArPSBjbnQgPiAwID86IDA7CisJfQorCWlmIChkbWFfaGFzX2NhcChETUFfWE9SLCBkbWFfZGV2LT5jYXBfbWFzaykpIHsKKwkJY250ID0gZG1hdGVzdF9hZGRfdGhyZWFkcyhkdGMsIERNQV9YT1IpOworCQl0aHJlYWRfY291bnQgKz0gY250ID4gMCA/OiAwOwogCX0KIAotCXByX2luZm8oImRtYXRlc3Q6IFN0YXJ0ZWQgJXUgdGhyZWFkcyB1c2luZyAlc1xuIiwgaSwgZG1hX2NoYW5fbmFtZShjaGFuKSk7CisJcHJfaW5mbygiZG1hdGVzdDogU3RhcnRlZCAldSB0aHJlYWRzIHVzaW5nICVzXG4iLAorCQl0aHJlYWRfY291bnQsIGRtYV9jaGFuX25hbWUoY2hhbikpOwogCiAJbGlzdF9hZGRfdGFpbCgmZHRjLT5ub2RlLCAmZG1hdGVzdF9jaGFubmVscyk7CiAJbnJfY2hhbm5lbHMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYyBiL2RyaXZlcnMvZG1hL2R3X2RtYWMuYwppbmRleCAyMGFkM2QyLi45OGM5YTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kd19kbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCkBAIC0zNjMsNiArMzYzLDgyIEBACiAJZHdjX2Rlc2NyaXB0b3JfY29tcGxldGUoZHdjLCBiYWRfZGVzYyk7CiB9CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDeWNsaWMgRE1BIEFQSSBleHRlbnNpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2lubGluZSBkbWFfYWRkcl90IGR3X2RtYV9nZXRfc3JjX2FkZHIoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBkd19kbWFfY2hhbiAqZHdjID0gdG9fZHdfZG1hX2NoYW4oY2hhbik7CisJcmV0dXJuIGNoYW5uZWxfcmVhZGwoZHdjLCBTQVIpOworfQorRVhQT1JUX1NZTUJPTChkd19kbWFfZ2V0X3NyY19hZGRyKTsKKworaW5saW5lIGRtYV9hZGRyX3QgZHdfZG1hX2dldF9kc3RfYWRkcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGR3X2RtYV9jaGFuICpkd2MgPSB0b19kd19kbWFfY2hhbihjaGFuKTsKKwlyZXR1cm4gY2hhbm5lbF9yZWFkbChkd2MsIERBUik7Cit9CitFWFBPUlRfU1lNQk9MKGR3X2RtYV9nZXRfZHN0X2FkZHIpOworCisvKiBjYWxsZWQgd2l0aCBkd2MtPmxvY2sgaGVsZCBhbmQgYWxsIERNQUMgaW50ZXJydXB0cyBkaXNhYmxlZCAqLworc3RhdGljIHZvaWQgZHdjX2hhbmRsZV9jeWNsaWMoc3RydWN0IGR3X2RtYSAqZHcsIHN0cnVjdCBkd19kbWFfY2hhbiAqZHdjLAorCQl1MzIgc3RhdHVzX2Jsb2NrLCB1MzIgc3RhdHVzX2VyciwgdTMyIHN0YXR1c194ZmVyKQoreworCWlmIChzdGF0dXNfYmxvY2sgJiBkd2MtPm1hc2spIHsKKwkJdm9pZCAoKmNhbGxiYWNrKSh2b2lkICpwYXJhbSk7CisJCXZvaWQgKmNhbGxiYWNrX3BhcmFtOworCisJCWRldl92ZGJnKGNoYW4yZGV2KCZkd2MtPmNoYW4pLCAibmV3IGN5Y2xpYyBwZXJpb2QgbGxwIDB4JTA4eFxuIiwKKwkJCQljaGFubmVsX3JlYWRsKGR3YywgTExQKSk7CisJCWRtYV93cml0ZWwoZHcsIENMRUFSLkJMT0NLLCBkd2MtPm1hc2spOworCisJCWNhbGxiYWNrID0gZHdjLT5jZGVzYy0+cGVyaW9kX2NhbGxiYWNrOworCQljYWxsYmFja19wYXJhbSA9IGR3Yy0+Y2Rlc2MtPnBlcmlvZF9jYWxsYmFja19wYXJhbTsKKwkJaWYgKGNhbGxiYWNrKSB7CisJCQlzcGluX3VubG9jaygmZHdjLT5sb2NrKTsKKwkJCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKKwkJCXNwaW5fbG9jaygmZHdjLT5sb2NrKTsKKwkJfQorCX0KKworCS8qCisJICogRXJyb3IgYW5kIHRyYW5zZmVyIGNvbXBsZXRlIGFyZSBoaWdobHkgdW5saWtlbHksIGFuZCB3aWxsIG1vc3QKKwkgKiBsaWtlbHkgYmUgZHVlIHRvIGEgY29uZmlndXJhdGlvbiBlcnJvciBieSB0aGUgdXNlci4KKwkgKi8KKwlpZiAodW5saWtlbHkoc3RhdHVzX2VyciAmIGR3Yy0+bWFzaykgfHwKKwkJCXVubGlrZWx5KHN0YXR1c194ZmVyICYgZHdjLT5tYXNrKSkgeworCQlpbnQgaTsKKworCQlkZXZfZXJyKGNoYW4yZGV2KCZkd2MtPmNoYW4pLCAiY3ljbGljIERNQSB1bmV4cGVjdGVkICVzICIKKwkJCQkiaW50ZXJydXB0LCBzdG9wcGluZyBETUEgdHJhbnNmZXJcbiIsCisJCQkJc3RhdHVzX3hmZXIgPyAieGZlciIgOiAiZXJyb3IiKTsKKwkJZGV2X2VycihjaGFuMmRldigmZHdjLT5jaGFuKSwKKwkJCSIgIFNBUjogMHgleCBEQVI6IDB4JXggTExQOiAweCV4IENUTDogMHgleDolMDh4XG4iLAorCQkJY2hhbm5lbF9yZWFkbChkd2MsIFNBUiksCisJCQljaGFubmVsX3JlYWRsKGR3YywgREFSKSwKKwkJCWNoYW5uZWxfcmVhZGwoZHdjLCBMTFApLAorCQkJY2hhbm5lbF9yZWFkbChkd2MsIENUTF9ISSksCisJCQljaGFubmVsX3JlYWRsKGR3YywgQ1RMX0xPKSk7CisKKwkJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIENIX0VOLCBkd2MtPm1hc2spOworCQl3aGlsZSAoZG1hX3JlYWRsKGR3LCBDSF9FTikgJiBkd2MtPm1hc2spCisJCQljcHVfcmVsYXgoKTsKKworCQkvKiBtYWtlIHN1cmUgRE1BIGRvZXMgbm90IHJlc3RhcnQgYnkgbG9hZGluZyBhIG5ldyBsaXN0ICovCisJCWNoYW5uZWxfd3JpdGVsKGR3YywgTExQLCAwKTsKKwkJY2hhbm5lbF93cml0ZWwoZHdjLCBDVExfTE8sIDApOworCQljaGFubmVsX3dyaXRlbChkd2MsIENUTF9ISSwgMCk7CisKKwkJZG1hX3dyaXRlbChkdywgQ0xFQVIuQkxPQ0ssIGR3Yy0+bWFzayk7CisJCWRtYV93cml0ZWwoZHcsIENMRUFSLkVSUk9SLCBkd2MtPm1hc2spOworCQlkbWFfd3JpdGVsKGR3LCBDTEVBUi5YRkVSLCBkd2MtPm1hc2spOworCisJCWZvciAoaSA9IDA7IGkgPCBkd2MtPmNkZXNjLT5wZXJpb2RzOyBpKyspCisJCQlkd2NfZHVtcF9sbGkoZHdjLCAmZHdjLT5jZGVzYy0+ZGVzY1tpXS0+bGxpKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwogc3RhdGljIHZvaWQgZHdfZG1hX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBkd19kbWEgKmR3ID0gKHN0cnVjdCBkd19kbWEgKilkYXRhOwpAQCAtMzgyLDcgKzQ1OCwxMCBAQAogCWZvciAoaSA9IDA7IGkgPCBkdy0+ZG1hLmNoYW5jbnQ7IGkrKykgewogCQlkd2MgPSAmZHctPmNoYW5baV07CiAJCXNwaW5fbG9jaygmZHdjLT5sb2NrKTsKLQkJaWYgKHN0YXR1c19lcnIgJiAoMSA8PCBpKSkKKwkJaWYgKHRlc3RfYml0KERXX0RNQV9JU19DWUNMSUMsICZkd2MtPmZsYWdzKSkKKwkJCWR3Y19oYW5kbGVfY3ljbGljKGR3LCBkd2MsIHN0YXR1c19ibG9jaywgc3RhdHVzX2VyciwKKwkJCQkJc3RhdHVzX3hmZXIpOworCQllbHNlIGlmIChzdGF0dXNfZXJyICYgKDEgPDwgaSkpCiAJCQlkd2NfaGFuZGxlX2Vycm9yKGR3LCBkd2MpOwogCQllbHNlIGlmICgoc3RhdHVzX2Jsb2NrIHwgc3RhdHVzX3hmZXIpICYgKDEgPDwgaSkpCiAJCQlkd2Nfc2Nhbl9kZXNjcmlwdG9ycyhkdywgZHdjKTsKQEAgLTgyNiw3ICs5MDUsNiBAQAogCQlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZkZXNjLT50eGQsIGNoYW4pOwogCQlkZXNjLT50eGQudHhfc3VibWl0ID0gZHdjX3R4X3N1Ym1pdDsKIAkJZGVzYy0+dHhkLmZsYWdzID0gRE1BX0NUUkxfQUNLOwotCQlJTklUX0xJU1RfSEVBRCgmZGVzYy0+dHhkLnR4X2xpc3QpOwogCQlkZXNjLT50eGQucGh5cyA9IGRtYV9tYXBfc2luZ2xlKGNoYW4ycGFyZW50KGNoYW4pLCAmZGVzYy0+bGxpLAogCQkJCXNpemVvZihkZXNjLT5sbGkpLCBETUFfVE9fREVWSUNFKTsKIAkJZHdjX2Rlc2NfcHV0KGR3YywgZGVzYyk7CkBAIC04ODQsNiArOTYyLDI1NyBAQAogCWRldl92ZGJnKGNoYW4yZGV2KGNoYW4pLCAiZnJlZV9jaGFuX3Jlc291cmNlcyBkb25lXG4iKTsKIH0KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEN5Y2xpYyBETUEgQVBJIGV4dGVuc2lvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoqCisgKiBkd19kbWFfY3ljbGljX3N0YXJ0IC0gc3RhcnQgdGhlIGN5Y2xpYyBETUEgdHJhbnNmZXIKKyAqIEBjaGFuOiB0aGUgRE1BIGNoYW5uZWwgdG8gc3RhcnQKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHNvZnQgaW50ZXJydXB0cyBkaXNhYmxlZC4gUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IKKyAqIC1lcnJubyBvbiBmYWlsdXJlLgorICovCitpbnQgZHdfZG1hX2N5Y2xpY19zdGFydChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGR3X2RtYV9jaGFuCSpkd2MgPSB0b19kd19kbWFfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgZHdfZG1hCQkqZHcgPSB0b19kd19kbWEoZHdjLT5jaGFuLmRldmljZSk7CisKKwlpZiAoIXRlc3RfYml0KERXX0RNQV9JU19DWUNMSUMsICZkd2MtPmZsYWdzKSkgeworCQlkZXZfZXJyKGNoYW4yZGV2KCZkd2MtPmNoYW4pLCAibWlzc2luZyBwcmVwIGZvciBjeWNsaWMgRE1BXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3Bpbl9sb2NrKCZkd2MtPmxvY2spOworCisJLyogYXNzZXJ0IGNoYW5uZWwgaXMgaWRsZSAqLworCWlmIChkbWFfcmVhZGwoZHcsIENIX0VOKSAmIGR3Yy0+bWFzaykgeworCQlkZXZfZXJyKGNoYW4yZGV2KCZkd2MtPmNoYW4pLAorCQkJIkJVRzogQXR0ZW1wdGVkIHRvIHN0YXJ0IG5vbi1pZGxlIGNoYW5uZWxcbiIpOworCQlkZXZfZXJyKGNoYW4yZGV2KCZkd2MtPmNoYW4pLAorCQkJIiAgU0FSOiAweCV4IERBUjogMHgleCBMTFA6IDB4JXggQ1RMOiAweCV4OiUwOHhcbiIsCisJCQljaGFubmVsX3JlYWRsKGR3YywgU0FSKSwKKwkJCWNoYW5uZWxfcmVhZGwoZHdjLCBEQVIpLAorCQkJY2hhbm5lbF9yZWFkbChkd2MsIExMUCksCisJCQljaGFubmVsX3JlYWRsKGR3YywgQ1RMX0hJKSwKKwkJCWNoYW5uZWxfcmVhZGwoZHdjLCBDVExfTE8pKTsKKwkJc3Bpbl91bmxvY2soJmR3Yy0+bG9jayk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZG1hX3dyaXRlbChkdywgQ0xFQVIuQkxPQ0ssIGR3Yy0+bWFzayk7CisJZG1hX3dyaXRlbChkdywgQ0xFQVIuRVJST1IsIGR3Yy0+bWFzayk7CisJZG1hX3dyaXRlbChkdywgQ0xFQVIuWEZFUiwgZHdjLT5tYXNrKTsKKworCS8qIHNldHVwIERNQUMgY2hhbm5lbCByZWdpc3RlcnMgKi8KKwljaGFubmVsX3dyaXRlbChkd2MsIExMUCwgZHdjLT5jZGVzYy0+ZGVzY1swXS0+dHhkLnBoeXMpOworCWNoYW5uZWxfd3JpdGVsKGR3YywgQ1RMX0xPLCBEV0NfQ1RMTF9MTFBfRF9FTiB8IERXQ19DVExMX0xMUF9TX0VOKTsKKwljaGFubmVsX3dyaXRlbChkd2MsIENUTF9ISSwgMCk7CisKKwljaGFubmVsX3NldF9iaXQoZHcsIENIX0VOLCBkd2MtPm1hc2spOworCisJc3Bpbl91bmxvY2soJmR3Yy0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHdfZG1hX2N5Y2xpY19zdGFydCk7CisKKy8qKgorICogZHdfZG1hX2N5Y2xpY19zdG9wIC0gc3RvcCB0aGUgY3ljbGljIERNQSB0cmFuc2ZlcgorICogQGNoYW46IHRoZSBETUEgY2hhbm5lbCB0byBzdG9wCisgKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBzb2Z0IGludGVycnVwdHMgZGlzYWJsZWQuCisgKi8KK3ZvaWQgZHdfZG1hX2N5Y2xpY19zdG9wKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgZHdfZG1hX2NoYW4JKmR3YyA9IHRvX2R3X2RtYV9jaGFuKGNoYW4pOworCXN0cnVjdCBkd19kbWEJCSpkdyA9IHRvX2R3X2RtYShkd2MtPmNoYW4uZGV2aWNlKTsKKworCXNwaW5fbG9jaygmZHdjLT5sb2NrKTsKKworCWNoYW5uZWxfY2xlYXJfYml0KGR3LCBDSF9FTiwgZHdjLT5tYXNrKTsKKwl3aGlsZSAoZG1hX3JlYWRsKGR3LCBDSF9FTikgJiBkd2MtPm1hc2spCisJCWNwdV9yZWxheCgpOworCisJc3Bpbl91bmxvY2soJmR3Yy0+bG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKGR3X2RtYV9jeWNsaWNfc3RvcCk7CisKKy8qKgorICogZHdfZG1hX2N5Y2xpY19wcmVwIC0gcHJlcGFyZSB0aGUgY3ljbGljIERNQSB0cmFuc2ZlcgorICogQGNoYW46IHRoZSBETUEgY2hhbm5lbCB0byBwcmVwYXJlCisgKiBAYnVmX2FkZHI6IHBoeXNpY2FsIERNQSBhZGRyZXNzIHdoZXJlIHRoZSBidWZmZXIgc3RhcnRzCisgKiBAYnVmX2xlbjogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGZvciB0aGUgZW50aXJlIGJ1ZmZlcgorICogQHBlcmlvZF9sZW46IG51bWJlciBvZiBieXRlcyBmb3IgZWFjaCBwZXJpb2QKKyAqIEBkaXJlY3Rpb246IHRyYW5zZmVyIGRpcmVjdGlvbiwgdG8gb3IgZnJvbSBkZXZpY2UKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdHJ5aW5nIHRvIHN0YXJ0IHRoZSB0cmFuc2Zlci4gUmV0dXJucyBhIHZhbGlkIHN0cnVjdAorICogZHdfY3ljbGljX2Rlc2MgaWYgc3VjY2Vzc2Z1bCBvciBhbiBFUlJfUFRSKC1lcnJubykgaWYgbm90IHN1Y2Nlc3NmdWwuCisgKi8KK3N0cnVjdCBkd19jeWNsaWNfZGVzYyAqZHdfZG1hX2N5Y2xpY19wcmVwKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKKwkJZG1hX2FkZHJfdCBidWZfYWRkciwgc2l6ZV90IGJ1Zl9sZW4sIHNpemVfdCBwZXJpb2RfbGVuLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3RydWN0IGR3X2RtYV9jaGFuCQkqZHdjID0gdG9fZHdfZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCQkqY2Rlc2M7CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCQkqcmV0dmFsID0gTlVMTDsKKwlzdHJ1Y3QgZHdfZGVzYwkJCSpkZXNjOworCXN0cnVjdCBkd19kZXNjCQkJKmxhc3QgPSBOVUxMOworCXN0cnVjdCBkd19kbWFfc2xhdmUJCSpkd3MgPSBjaGFuLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcJCQl3YXNfY3ljbGljOworCXVuc2lnbmVkIGludAkJCXJlZ193aWR0aDsKKwl1bnNpZ25lZCBpbnQJCQlwZXJpb2RzOworCXVuc2lnbmVkIGludAkJCWk7CisKKwlzcGluX2xvY2tfYmgoJmR3Yy0+bG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZkd2MtPnF1ZXVlKSB8fCAhbGlzdF9lbXB0eSgmZHdjLT5hY3RpdmVfbGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmR3Yy0+bG9jayk7CisJCWRldl9kYmcoY2hhbjJkZXYoJmR3Yy0+Y2hhbiksCisJCQkJInF1ZXVlIGFuZC9vciBhY3RpdmUgbGlzdCBhcmUgbm90IGVtcHR5XG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwl9CisKKwl3YXNfY3ljbGljID0gdGVzdF9hbmRfc2V0X2JpdChEV19ETUFfSVNfQ1lDTElDLCAmZHdjLT5mbGFncyk7CisJc3Bpbl91bmxvY2tfYmgoJmR3Yy0+bG9jayk7CisJaWYgKHdhc19jeWNsaWMpIHsKKwkJZGV2X2RiZyhjaGFuMmRldigmZHdjLT5jaGFuKSwKKwkJCQkiY2hhbm5lbCBhbHJlYWR5IHByZXBhcmVkIGZvciBjeWNsaWMgRE1BXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwl9CisKKwlyZXR2YWwgPSBFUlJfUFRSKC1FSU5WQUwpOworCXJlZ193aWR0aCA9IGR3cy0+cmVnX3dpZHRoOworCXBlcmlvZHMgPSBidWZfbGVuIC8gcGVyaW9kX2xlbjsKKworCS8qIENoZWNrIGZvciB0b28gYmlnL3VuYWxpZ25lZCBwZXJpb2RzIGFuZCB1bmFsaWduZWQgRE1BIGJ1ZmZlci4gKi8KKwlpZiAocGVyaW9kX2xlbiA+IChEV0NfTUFYX0NPVU5UIDw8IHJlZ193aWR0aCkpCisJCWdvdG8gb3V0X2VycjsKKwlpZiAodW5saWtlbHkocGVyaW9kX2xlbiAmICgoMSA8PCByZWdfd2lkdGgpIC0gMSkpKQorCQlnb3RvIG91dF9lcnI7CisJaWYgKHVubGlrZWx5KGJ1Zl9hZGRyICYgKCgxIDw8IHJlZ193aWR0aCkgLSAxKSkpCisJCWdvdG8gb3V0X2VycjsKKwlpZiAodW5saWtlbHkoIShkaXJlY3Rpb24gJiAoRE1BX1RPX0RFVklDRSB8IERNQV9GUk9NX0RFVklDRSkpKSkKKwkJZ290byBvdXRfZXJyOworCisJcmV0dmFsID0gRVJSX1BUUigtRU5PTUVNKTsKKworCWlmIChwZXJpb2RzID4gTlJfREVTQ1NfUEVSX0NIQU5ORUwpCisJCWdvdG8gb3V0X2VycjsKKworCWNkZXNjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGR3X2N5Y2xpY19kZXNjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZGVzYykKKwkJZ290byBvdXRfZXJyOworCisJY2Rlc2MtPmRlc2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHdfZGVzYyAqKSAqIHBlcmlvZHMsIEdGUF9LRVJORUwpOworCWlmICghY2Rlc2MtPmRlc2MpCisJCWdvdG8gb3V0X2Vycl9hbGxvYzsKKworCWZvciAoaSA9IDA7IGkgPCBwZXJpb2RzOyBpKyspIHsKKwkJZGVzYyA9IGR3Y19kZXNjX2dldChkd2MpOworCQlpZiAoIWRlc2MpCisJCQlnb3RvIG91dF9lcnJfZGVzY19nZXQ7CisKKwkJc3dpdGNoIChkaXJlY3Rpb24pIHsKKwkJY2FzZSBETUFfVE9fREVWSUNFOgorCQkJZGVzYy0+bGxpLmRhciA9IGR3cy0+dHhfcmVnOworCQkJZGVzYy0+bGxpLnNhciA9IGJ1Zl9hZGRyICsgKHBlcmlvZF9sZW4gKiBpKTsKKwkJCWRlc2MtPmxsaS5jdGxsbyA9IChEV0NfREVGQVVMVF9DVExMTworCQkJCQl8IERXQ19DVExMX0RTVF9XSURUSChyZWdfd2lkdGgpCisJCQkJCXwgRFdDX0NUTExfU1JDX1dJRFRIKHJlZ193aWR0aCkKKwkJCQkJfCBEV0NfQ1RMTF9EU1RfRklYCisJCQkJCXwgRFdDX0NUTExfU1JDX0lOQworCQkJCQl8IERXQ19DVExMX0ZDX00yUAorCQkJCQl8IERXQ19DVExMX0lOVF9FTik7CisJCQlicmVhazsKKwkJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCQlkZXNjLT5sbGkuZGFyID0gYnVmX2FkZHIgKyAocGVyaW9kX2xlbiAqIGkpOworCQkJZGVzYy0+bGxpLnNhciA9IGR3cy0+cnhfcmVnOworCQkJZGVzYy0+bGxpLmN0bGxvID0gKERXQ19ERUZBVUxUX0NUTExPCisJCQkJCXwgRFdDX0NUTExfU1JDX1dJRFRIKHJlZ193aWR0aCkKKwkJCQkJfCBEV0NfQ1RMTF9EU1RfV0lEVEgocmVnX3dpZHRoKQorCQkJCQl8IERXQ19DVExMX0RTVF9JTkMKKwkJCQkJfCBEV0NfQ1RMTF9TUkNfRklYCisJCQkJCXwgRFdDX0NUTExfRkNfUDJNCisJCQkJCXwgRFdDX0NUTExfSU5UX0VOKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlkZXNjLT5sbGkuY3RsaGkgPSAocGVyaW9kX2xlbiA+PiByZWdfd2lkdGgpOworCQljZGVzYy0+ZGVzY1tpXSA9IGRlc2M7CisKKwkJaWYgKGxhc3QpIHsKKwkJCWxhc3QtPmxsaS5sbHAgPSBkZXNjLT50eGQucGh5czsKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNoYW4ycGFyZW50KGNoYW4pLAorCQkJCQlsYXN0LT50eGQucGh5cywgc2l6ZW9mKGxhc3QtPmxsaSksCisJCQkJCURNQV9UT19ERVZJQ0UpOworCQl9CisKKwkJbGFzdCA9IGRlc2M7CisJfQorCisJLyogbGV0cyBtYWtlIGEgY3ljbGljIGxpc3QgKi8KKwlsYXN0LT5sbGkubGxwID0gY2Rlc2MtPmRlc2NbMF0tPnR4ZC5waHlzOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNoYW4ycGFyZW50KGNoYW4pLCBsYXN0LT50eGQucGh5cywKKwkJCXNpemVvZihsYXN0LT5sbGkpLCBETUFfVE9fREVWSUNFKTsKKworCWRldl9kYmcoY2hhbjJkZXYoJmR3Yy0+Y2hhbiksICJjeWNsaWMgcHJlcGFyZWQgYnVmIDB4JTA4eCBsZW4gJXp1ICIKKwkJCSJwZXJpb2QgJXp1IHBlcmlvZHMgJWRcbiIsIGJ1Zl9hZGRyLCBidWZfbGVuLAorCQkJcGVyaW9kX2xlbiwgcGVyaW9kcyk7CisKKwljZGVzYy0+cGVyaW9kcyA9IHBlcmlvZHM7CisJZHdjLT5jZGVzYyA9IGNkZXNjOworCisJcmV0dXJuIGNkZXNjOworCitvdXRfZXJyX2Rlc2NfZ2V0OgorCXdoaWxlIChpLS0pCisJCWR3Y19kZXNjX3B1dChkd2MsIGNkZXNjLT5kZXNjW2ldKTsKK291dF9lcnJfYWxsb2M6CisJa2ZyZWUoY2Rlc2MpOworb3V0X2VycjoKKwljbGVhcl9iaXQoRFdfRE1BX0lTX0NZQ0xJQywgJmR3Yy0+ZmxhZ3MpOworCXJldHVybiAoc3RydWN0IGR3X2N5Y2xpY19kZXNjICopcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTChkd19kbWFfY3ljbGljX3ByZXApOworCisvKioKKyAqIGR3X2RtYV9jeWNsaWNfZnJlZSAtIGZyZWUgYSBwcmVwYXJlZCBjeWNsaWMgRE1BIHRyYW5zZmVyCisgKiBAY2hhbjogdGhlIERNQSBjaGFubmVsIHRvIGZyZWUKKyAqLwordm9pZCBkd19kbWFfY3ljbGljX2ZyZWUoc3RydWN0IGRtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBkd19kbWFfY2hhbgkqZHdjID0gdG9fZHdfZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IGR3X2RtYQkJKmR3ID0gdG9fZHdfZG1hKGR3Yy0+Y2hhbi5kZXZpY2UpOworCXN0cnVjdCBkd19jeWNsaWNfZGVzYwkqY2Rlc2MgPSBkd2MtPmNkZXNjOworCWludAkJCWk7CisKKwlkZXZfZGJnKGNoYW4yZGV2KCZkd2MtPmNoYW4pLCAiY3ljbGljIGZyZWVcbiIpOworCisJaWYgKCFjZGVzYykKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2JoKCZkd2MtPmxvY2spOworCisJY2hhbm5lbF9jbGVhcl9iaXQoZHcsIENIX0VOLCBkd2MtPm1hc2spOworCXdoaWxlIChkbWFfcmVhZGwoZHcsIENIX0VOKSAmIGR3Yy0+bWFzaykKKwkJY3B1X3JlbGF4KCk7CisKKwlkbWFfd3JpdGVsKGR3LCBDTEVBUi5CTE9DSywgZHdjLT5tYXNrKTsKKwlkbWFfd3JpdGVsKGR3LCBDTEVBUi5FUlJPUiwgZHdjLT5tYXNrKTsKKwlkbWFfd3JpdGVsKGR3LCBDTEVBUi5YRkVSLCBkd2MtPm1hc2spOworCisJc3Bpbl91bmxvY2tfYmgoJmR3Yy0+bG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2Rlc2MtPnBlcmlvZHM7IGkrKykKKwkJZHdjX2Rlc2NfcHV0KGR3YywgY2Rlc2MtPmRlc2NbaV0pOworCisJa2ZyZWUoY2Rlc2MtPmRlc2MpOworCWtmcmVlKGNkZXNjKTsKKworCWNsZWFyX2JpdChEV19ETUFfSVNfQ1lDTElDLCAmZHdjLT5mbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGR3X2RtYV9jeWNsaWNfZnJlZSk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyB2b2lkIGR3X2RtYV9vZmYoc3RydWN0IGR3X2RtYSAqZHcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kd19kbWFjX3JlZ3MuaCBiL2RyaXZlcnMvZG1hL2R3X2RtYWNfcmVncy5oCmluZGV4IGIyNTJiMjAuLjEzYTU4MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2R3X2RtYWNfcmVncy5oCisrKyBiL2RyaXZlcnMvZG1hL2R3X2RtYWNfcmVncy5oCkBAIC0xMjYsNiArMTI2LDEwIEBACiAKICNkZWZpbmUgRFdfUkVHTEVOCQkweDQwMAogCitlbnVtIGR3X2RtYWNfZmxhZ3MgeworCURXX0RNQV9JU19DWUNMSUMgPSAwLAorfTsKKwogc3RydWN0IGR3X2RtYV9jaGFuIHsKIAlzdHJ1Y3QgZG1hX2NoYW4JCWNoYW47CiAJdm9pZCBfX2lvbWVtCQkqY2hfcmVnczsKQEAgLTEzNCwxMCArMTM4LDEyIEBACiAJc3BpbmxvY2tfdAkJbG9jazsKIAogCS8qIHRoZXNlIG90aGVyIGVsZW1lbnRzIGFyZSBhbGwgcHJvdGVjdGVkIGJ5IGxvY2sgKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlkbWFfY29va2llX3QJCWNvbXBsZXRlZDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZV9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQJcXVldWU7CiAJc3RydWN0IGxpc3RfaGVhZAlmcmVlX2xpc3Q7CisJc3RydWN0IGR3X2N5Y2xpY19kZXNjCSpjZGVzYzsKIAogCXVuc2lnbmVkIGludAkJZGVzY3NfYWxsb2NhdGVkOwogfTsKQEAgLTE1OCw3ICsxNjQsNiBAQAogCXJldHVybiBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGR3X2RtYV9jaGFuLCBjaGFuKTsKIH0KIAotCiBzdHJ1Y3QgZHdfZG1hIHsKIAlzdHJ1Y3QgZG1hX2RldmljZQlkbWE7CiAJdm9pZCBfX2lvbWVtCQkqcmVnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5jIGIvZHJpdmVycy9kbWEvZnNsZG1hLmMKaW5kZXggODZkNmRhNC4uZGE4YThlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZnNsZG1hLmMKKysrIGIvZHJpdmVycy9kbWEvZnNsZG1hLmMKQEAgLTM1NCw3ICszNTQsNiBAQAogCQlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZkZXNjX3N3LT5hc3luY190eCwKIAkJCQkJCSZmc2xfY2hhbi0+Y29tbW9uKTsKIAkJZGVzY19zdy0+YXN5bmNfdHgudHhfc3VibWl0ID0gZnNsX2RtYV90eF9zdWJtaXQ7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZXNjX3N3LT5hc3luY190eC50eF9saXN0KTsKIAkJZGVzY19zdy0+YXN5bmNfdHgucGh5cyA9IHBkZXNjOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdF9kbWEuYyBiL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMKaW5kZXggNTkwNWNkMy4uZTRmYzMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdF9kbWEuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jCkBAIC02OTMsNyArNjkzLDYgQEAKIAkJZGVzY19zdy0+YXN5bmNfdHgudHhfc3VibWl0ID0gaW9hdDJfdHhfc3VibWl0OwogCQlicmVhazsKIAl9Ci0JSU5JVF9MSVNUX0hFQUQoJmRlc2Nfc3ctPmFzeW5jX3R4LnR4X2xpc3QpOwogCiAJZGVzY19zdy0+aHcgPSBkZXNjOwogCWRlc2Nfc3ctPmFzeW5jX3R4LnBoeXMgPSBwaHlzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9wLWFkbWEuYyBiL2RyaXZlcnMvZG1hL2lvcC1hZG1hLmMKaW5kZXggMTZhZGJlNi4uMmYwNTIyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9wLWFkbWEuYworKysgYi9kcml2ZXJzL2RtYS9pb3AtYWRtYS5jCkBAIC00OTgsNyArNDk4LDYgQEAKIAkJc2xvdC0+YXN5bmNfdHgudHhfc3VibWl0ID0gaW9wX2FkbWFfdHhfc3VibWl0OwogCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+Y2hhaW5fbm9kZSk7CiAJCUlOSVRfTElTVF9IRUFEKCZzbG90LT5zbG90X25vZGUpOwotCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+YXN5bmNfdHgudHhfbGlzdCk7CiAJCWh3X2Rlc2MgPSAoY2hhciAqKSBpb3BfY2hhbi0+ZGV2aWNlLT5kbWFfZGVzY19wb29sOwogCQlzbG90LT5hc3luY190eC5waHlzID0KIAkJCShkbWFfYWRkcl90KSAmaHdfZGVzY1tpZHggKiBJT1BfQURNQV9TTE9UX1NJWkVdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCmluZGV4IGRhNzgxZDEuLmUyMDJhNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYworKysgYi9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKQEAgLTI4LDYgKzI4LDkgQEAKICNkZWZpbmUgRlNfVkZfSU5fVkFMSUQJMHgwMDAwMDAwMgogI2RlZmluZSBGU19FTkNfSU5fVkFMSUQJMHgwMDAwMDAwMQogCitzdGF0aWMgaW50IGlwdV9kaXNhYmxlX2NoYW5uZWwoc3RydWN0IGlkbWFjICppZG1hYywgc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuLAorCQkJICAgICAgIGJvb2wgd2FpdF9mb3Jfc3RvcCk7CisKIC8qCiAgKiBUaGVyZSBjYW4gYmUgb25seSBvbmUsIHdlIGNvdWxkIGFsbG9jYXRlIGl0IGR5bmFtaWNhbGx5LCBidXQgdGhlbiB3ZSdkIGhhdmUKICAqIHRvIGFkZCBhbiBleHRyYSBwYXJhbWV0ZXIgdG8gc29tZSBmdW5jdGlvbnMsIGFuZCB1c2Ugc29tZXRoaW5nIGFzIHVnbHkgYXMKQEAgLTEwNyw3ICsxMTAsNyBAQAogCX0KIH0KIAotLyogRW5hYmxlIC8gZGlzYWJsZSBkaXJlY3Qgd3JpdGUgdG8gbWVtb3J5IGJ5IHRoZSBDYW1lcmEgU2Vuc29yIEludGVyZmFjZSAqLworLyogRW5hYmxlIGRpcmVjdCB3cml0ZSB0byBtZW1vcnkgYnkgdGhlIENhbWVyYSBTZW5zb3IgSW50ZXJmYWNlICovCiBzdGF0aWMgdm9pZCBpcHVfaWNfZW5hYmxlX3Rhc2soc3RydWN0IGlwdSAqaXB1LCBlbnVtIGlwdV9jaGFubmVsIGNoYW5uZWwpCiB7CiAJdWludDMyX3QgaWNfY29uZiwgbWFzazsKQEAgLTEyNiw2ICsxMjksNyBAQAogCWlkbWFjX3dyaXRlX2ljcmVnKGlwdSwgaWNfY29uZiwgSUNfQ09ORik7CiB9CiAKKy8qIENhbGxlZCB1bmRlciBzcGluX2xvY2tfaXJxc2F2ZSgmaXB1X2RhdGEubG9jaykgKi8KIHN0YXRpYyB2b2lkIGlwdV9pY19kaXNhYmxlX3Rhc2soc3RydWN0IGlwdSAqaXB1LCBlbnVtIGlwdV9jaGFubmVsIGNoYW5uZWwpCiB7CiAJdWludDMyX3QgaWNfY29uZiwgbWFzazsKQEAgLTQyMiw3ICs0MjYsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGlwdV9kYXRhLmRldiwKLQkJCSJteGMgaXB1OiB1bmltcGxlbWVudGVkIHBpeGVsIGZvcm1hdCAlZFxuIiwgcGl4ZWxfZm10KTsKKwkJCSJteDMgaXB1OiB1bmltcGxlbWVudGVkIHBpeGVsIGZvcm1hdCAlZFxuIiwgcGl4ZWxfZm10KTsKIAkJYnJlYWs7CiAJfQogCkBAIC00MzMsMjAgKzQzNywyMCBAQAogCQkJCQl1aW50MTZfdCBidXJzdF9waXhlbHMpCiB7CiAJcGFyYW1zLT5wcC5ucGIgPSBidXJzdF9waXhlbHMgLSAxOwotfTsKK30KIAogc3RhdGljIHZvaWQgaXB1X2NoX3BhcmFtX3NldF9idWZmZXIodW5pb24gY2hhbl9wYXJhbV9tZW0gKnBhcmFtcywKIAkJCQkgICAgZG1hX2FkZHJfdCBidWYwLCBkbWFfYWRkcl90IGJ1ZjEpCiB7CiAJcGFyYW1zLT5wcC5lYmEwID0gYnVmMDsKIAlwYXJhbXMtPnBwLmViYTEgPSBidWYxOwotfTsKK30KIAogc3RhdGljIHZvaWQgaXB1X2NoX3BhcmFtX3NldF9yb3RhdGlvbih1bmlvbiBjaGFuX3BhcmFtX21lbSAqcGFyYW1zLAogCQkJCSAgICAgIGVudW0gaXB1X3JvdGF0ZV9tb2RlIHJvdGF0ZSkKIHsKIAlwYXJhbXMtPnBwLmJhbSA9IHJvdGF0ZTsKLX07Cit9CiAKIHN0YXRpYyB2b2lkIGlwdV93cml0ZV9wYXJhbV9tZW0odWludDMyX3QgYWRkciwgdWludDMyX3QgKmRhdGEsCiAJCQkJdWludDMyX3QgbnVtX3dvcmRzKQpAQCAtNTcxLDcgKzU3NSw3IEBACiB7CiAJLyogQ2hhbm5lbCBQYXJhbWV0ZXIgTWVtb3J5ICovCiAJcmV0dXJuIDB4MTAwMDAgfCAoZG1hX2NoIDw8IDQpOwotfTsKK30KIAogc3RhdGljIHZvaWQgaXB1X2NoYW5uZWxfc2V0X3ByaW9yaXR5KHN0cnVjdCBpcHUgKmlwdSwgZW51bSBpcHVfY2hhbm5lbCBjaGFubmVsLAogCQkJCSAgICAgYm9vbCBwcmlvKQpAQCAtNjExLDcgKzYxNSw4IEBACiAKIC8qKgogICogaXB1X2VuYWJsZV9jaGFubmVsKCkgLSBlbmFibGUgYW4gSVBVIGNoYW5uZWwuCi0gKiBAY2hhbm5lbDoJY2hhbm5lbCBJRC4KKyAqIEBpZG1hYzoJSVBVIERNQUMgY29udGV4dC4KKyAqIEBpY2hhbjoJSURNQUMgY2hhbm5lbC4KICAqIEByZXR1cm46CTAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgaXB1X2VuYWJsZV9jaGFubmVsKHN0cnVjdCBpZG1hYyAqaWRtYWMsIHN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbikKQEAgLTY0OSw3ICs2NTQsNyBAQAogCiAvKioKICAqIGlwdV9pbml0X2NoYW5uZWxfYnVmZmVyKCkgLSBpbml0aWFsaXplIGEgYnVmZmVyIGZvciBsb2dpY2FsIElQVSBjaGFubmVsLgotICogQGNoYW5uZWw6CWNoYW5uZWwgSUQuCisgKiBAaWNoYW46CUlETUFDIGNoYW5uZWwuCiAgKiBAcGl4ZWxfZm10OglwaXhlbCBmb3JtYXQgb2YgYnVmZmVyLiBQaXhlbCBmb3JtYXQgaXMgYSBGT1VSQ0MgQVNDSUkgY29kZS4KICAqIEB3aWR0aDoJd2lkdGggb2YgYnVmZmVyIGluIHBpeGVscy4KICAqIEBoZWlnaHQ6CWhlaWdodCBvZiBidWZmZXIgaW4gcGl4ZWxzLgpAQCAtNjg3LDcgKzY5Miw3IEBACiAJfQogCiAJLyogSUMgY2hhbm5lbCdzIHN0cmlkZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCBwaXhlbHMgKi8KLQlpZiAoKGNoYW5uZWwgPD0gMTMpICYmIChzdHJpZGUgJSA4KSkgeworCWlmICgoY2hhbm5lbCA8PSBJRE1BQ19JQ18xMykgJiYgKHN0cmlkZSAlIDgpKSB7CiAJCWRldl9lcnIoaXB1LT5kZXYsICJTdHJpZGUgbXVzdCBiZSA4IHBpeGVsIG11bHRpcGxlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzUyLDcgKzc1Nyw3IEBACiAKIC8qKgogICogaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcigpIC0gdXBkYXRlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgYSBjaGFubmVsIGJ1ZmZlci4KLSAqIEBjaGFubmVsOgljaGFubmVsIElELgorICogQGljaGFuOglJRE1BQyBjaGFubmVsLgogICogQGJ1ZmZlcl9uOglidWZmZXIgbnVtYmVyIHRvIHVwZGF0ZS4KICAqCQkwIG9yIDEgYXJlIHRoZSBvbmx5IHZhbGlkIHZhbHVlcy4KICAqIEBwaHlhZGRyOglidWZmZXIgcGh5c2ljYWwgYWRkcmVzcy4KQEAgLTc2MCw5ICs3NjUsMTAgQEAKICAqICAgICAgICAgICAgICBmdW5jdGlvbiB3aWxsIGZhaWwgaWYgdGhlIGJ1ZmZlciBpcyBzZXQgdG8gcmVhZHkuCiAgKi8KIC8qIENhbGxlZCB1bmRlciBzcGluX2xvY2soX2lycXNhdmUpKCZpY2hhbi0+bG9jaykgKi8KLXN0YXRpYyBpbnQgaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcihlbnVtIGlwdV9jaGFubmVsIGNoYW5uZWwsCitzdGF0aWMgaW50IGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuLAogCQkJCSAgICAgaW50IGJ1ZmZlcl9uLCBkbWFfYWRkcl90IHBoeWFkZHIpCiB7CisJZW51bSBpcHVfY2hhbm5lbCBjaGFubmVsID0gaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQ7CiAJdWludDMyX3QgcmVnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTc3MSw4ICs3NzcsOCBAQAogCWlmIChidWZmZXJfbiA9PSAwKSB7CiAJCXJlZyA9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0NIQV9CVUYwX1JEWSk7CiAJCWlmIChyZWcgJiAoMVVMIDw8IGNoYW5uZWwpKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gLUVBQ0NFUzsKKwkJCWlwdV9pY19kaXNhYmxlX3Rhc2soJmlwdV9kYXRhLCBjaGFubmVsKTsKKwkJCWljaGFuLT5zdGF0dXMgPSBJUFVfQ0hBTk5FTF9SRUFEWTsKIAkJfQogCiAJCS8qIDQ0LjMuMy4xLjkgLSBSb3cgTnVtYmVyIDEgKFdPUkQxLCBvZmZzZXQgMCkgKi8KQEAgLTc4Miw4ICs3ODgsOCBAQAogCX0gZWxzZSB7CiAJCXJlZyA9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0NIQV9CVUYxX1JEWSk7CiAJCWlmIChyZWcgJiAoMVVMIDw8IGNoYW5uZWwpKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gLUVBQ0NFUzsKKwkJCWlwdV9pY19kaXNhYmxlX3Rhc2soJmlwdV9kYXRhLCBjaGFubmVsKTsKKwkJCWljaGFuLT5zdGF0dXMgPSBJUFVfQ0hBTk5FTF9SRUFEWTsKIAkJfQogCiAJCS8qIENoZWNrIGlmIGRvdWJsZS1idWZmZXJpbmcgaXMgYWxyZWFkeSBlbmFibGVkICovCkBAIC04MDUsNiArODExLDM5IEBACiB9CiAKIC8qIENhbGxlZCB1bmRlciBzcGluX2xvY2tfaXJxc2F2ZSgmaWNoYW4tPmxvY2spICovCitzdGF0aWMgaW50IGlwdV9zdWJtaXRfYnVmZmVyKHN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiwKKwlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYywgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IGJ1Zl9pZHgpCit7CisJdW5zaWduZWQgaW50IGNoYW5faWQgPSBpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaWNoYW4tPmRtYV9jaGFuLmRldi0+ZGV2aWNlOworCWludCByZXQ7CisKKwlpZiAoYXN5bmNfdHhfdGVzdF9hY2soJmRlc2MtPnR4ZCkpCisJCXJldHVybiAtRUlOVFI7CisKKwkvKgorCSAqIE9uIGZpcnN0IGludm9jYXRpb24gdGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCB0aGUgY2FsbCB0bworCSAqIGlwdV9pbml0X2NoYW5uZWxfYnVmZmVyKCkgYWJvdmUgd2lsbCBzZXQgYWRkcmVzc2VzIGZvciB1cywgc28gd2UKKwkgKiBjb3VsZCBtYWtlIGl0IGNvbmRpdGlvbmFsIG9uIHN0YXR1cyA+PSBJUFVfQ0hBTk5FTF9FTkFCTEVELCBidXQKKwkgKiBkb2luZyBpdCBhZ2FpbiBzaG91bGRuJ3QgaHVydCBlaXRoZXIuCisJICovCisJcmV0ID0gaXB1X3VwZGF0ZV9jaGFubmVsX2J1ZmZlcihpY2hhbiwgYnVmX2lkeCwKKwkJCQkJc2dfZG1hX2FkZHJlc3Moc2cpKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiVXBkYXRpbmcgc2cgJXAgb24gY2hhbm5lbCAweCV4IGJ1ZmZlciAlZCBmYWlsZWQhXG4iLAorCQkJc2csIGNoYW5faWQsIGJ1Zl9pZHgpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlwdV9zZWxlY3RfYnVmZmVyKGNoYW5faWQsIGJ1Zl9pZHgpOworCWRldl9kYmcoZGV2LCAiVXBkYXRlZCBzZyAlcCBvbiBjaGFubmVsIDB4JXggYnVmZmVyICVkXG4iLAorCQlzZywgY2hhbl9pZCwgYnVmX2lkeCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIHVuZGVyIHNwaW5fbG9ja19pcnFzYXZlKCZpY2hhbi0+bG9jaykgKi8KIHN0YXRpYyBpbnQgaXB1X3N1Ym1pdF9jaGFubmVsX2J1ZmZlcnMoc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuLAogCQkJCSAgICAgIHN0cnVjdCBpZG1hY190eF9kZXNjICpkZXNjKQogewpAQCAtODE1LDIwICs4NTQsMTAgQEAKIAkJaWYgKCFpY2hhbi0+c2dbaV0pIHsKIAkJCWljaGFuLT5zZ1tpXSA9IHNnOwogCi0JCQkvKgotCQkJICogT24gZmlyc3QgaW52b2NhdGlvbiB0aGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIHRoZQotCQkJICogY2FsbCB0byBpcHVfaW5pdF9jaGFubmVsX2J1ZmZlcigpIGFib3ZlIHdpbGwgc2V0Ci0JCQkgKiBhZGRyZXNzZXMgZm9yIHVzLCBzbyB3ZSBjb3VsZCBtYWtlIGl0IGNvbmRpdGlvbmFsCi0JCQkgKiBvbiBzdGF0dXMgPj0gSVBVX0NIQU5ORUxfRU5BQkxFRCwgYnV0IGRvaW5nIGl0IGFnYWluCi0JCQkgKiBzaG91bGRuJ3QgaHVydCBlaXRoZXIuCi0JCQkgKi8KLQkJCXJldCA9IGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQsIGksCi0JCQkJCQkJc2dfZG1hX2FkZHJlc3Moc2cpKTsKKwkJCXJldCA9IGlwdV9zdWJtaXRfYnVmZmVyKGljaGFuLCBkZXNjLCBzZywgaSk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwogCi0JCQlpcHVfc2VsZWN0X2J1ZmZlcihpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZCwgaSk7Ci0KIAkJCXNnID0gc2dfbmV4dChzZyk7CiAJCX0KIAl9CkBAIC04NDIsMTkgKzg3MSwyMiBAQAogCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IHRvX2lkbWFjX2NoYW4odHgtPmNoYW4pOwogCXN0cnVjdCBpZG1hYyAqaWRtYWMgPSB0b19pZG1hYyh0eC0+Y2hhbi0+ZGV2aWNlKTsKIAlzdHJ1Y3QgaXB1ICppcHUgPSB0b19pcHUoaWRtYWMpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpY2hhbi0+ZG1hX2NoYW4uZGV2LT5kZXZpY2U7CiAJZG1hX2Nvb2tpZV90IGNvb2tpZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CiAKIAkvKiBTYW5pdHkgY2hlY2sgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmRlc2MtPmxpc3QpKSB7CiAJCS8qIFRoZSBkZXNjcmlwdG9yIGRvZXNuJ3QgYmVsb25nIHRvIGNsaWVudCAqLwotCQlkZXZfZXJyKCZpY2hhbi0+ZG1hX2NoYW4uZGV2LT5kZXZpY2UsCi0JCQkiRGVzY3JpcHRvciAlcCBub3QgcHJlcGFyZWQhXG4iLCB0eCk7CisJCWRldl9lcnIoZGV2LCAiRGVzY3JpcHRvciAlcCBub3QgcHJlcGFyZWQhXG4iLCB0eCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJbXV0ZXhfbG9jaygmaWNoYW4tPmNoYW5fbXV0ZXgpOwogCisJYXN5bmNfdHhfY2xlYXJfYWNrKHR4KTsKKwogCWlmIChpY2hhbi0+c3RhdHVzIDwgSVBVX0NIQU5ORUxfUkVBRFkpIHsKIAkJc3RydWN0IGlkbWFjX3ZpZGVvX3BhcmFtICp2aWRlbyA9ICZpY2hhbi0+cGFyYW1zLnZpZGVvOwogCQkvKgpAQCAtODc4LDE2ICs5MTAsNyBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JLyogaXB1LT5sb2NrIGNhbiBiZSB0YWtlbiB1bmRlciBpY2hhbi0+bG9jaywgYnV0IG5vdCB2LnYuICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBzdWJtaXRfYnVmZmVycygpIGF0b21pY2FsbHkgdmVyaWZpZXMgYW5kIGZpbGxzIGVtcHR5IHNnIHNsb3RzICovCi0JY29va2llID0gaXB1X3N1Ym1pdF9jaGFubmVsX2J1ZmZlcnMoaWNoYW4sIGRlc2MpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNoYW4tPmxvY2ssIGZsYWdzKTsKLQotCWlmIChjb29raWUgPCAwKQotCQlnb3RvIG91dDsKKwlkZXZfZGJnKGRldiwgIlN1Ym1pdHRpbmcgc2cgJXBcbiIsICZkZXNjLT5zZ1swXSk7CiAKIAljb29raWUgPSBpY2hhbi0+ZG1hX2NoYW4uY29va2llOwogCkBAIC04OTcsMjQgKzkyMCw0MCBAQAogCS8qIGZyb20gZG1hZW5naW5lLmg6ICJsYXN0IGNvb2tpZSB2YWx1ZSByZXR1cm5lZCB0byBjbGllbnQiICovCiAJaWNoYW4tPmRtYV9jaGFuLmNvb2tpZSA9IGNvb2tpZTsKIAl0eC0+Y29va2llID0gY29va2llOworCisJLyogaXB1LT5sb2NrIGNhbiBiZSB0YWtlbiB1bmRlciBpY2hhbi0+bG9jaywgYnV0IG5vdCB2LnYuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrLCBmbGFncyk7CisKIAlsaXN0X2FkZF90YWlsKCZkZXNjLT5saXN0LCAmaWNoYW4tPnF1ZXVlKTsKKwkvKiBzdWJtaXRfYnVmZmVycygpIGF0b21pY2FsbHkgdmVyaWZpZXMgYW5kIGZpbGxzIGVtcHR5IHNnIHNsb3RzICovCisJcmV0ID0gaXB1X3N1Ym1pdF9jaGFubmVsX2J1ZmZlcnMoaWNoYW4sIGRlc2MpOworCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWNoYW4tPmxvY2ssIGZsYWdzKTsKIAorCWlmIChyZXQgPCAwKSB7CisJCWNvb2tpZSA9IHJldDsKKwkJZ290byBkZXF1ZXVlOworCX0KKwogCWlmIChpY2hhbi0+c3RhdHVzIDwgSVBVX0NIQU5ORUxfRU5BQkxFRCkgewotCQlpbnQgcmV0ID0gaXB1X2VuYWJsZV9jaGFubmVsKGlkbWFjLCBpY2hhbik7CisJCXJldCA9IGlwdV9lbmFibGVfY2hhbm5lbChpZG1hYywgaWNoYW4pOwogCQlpZiAocmV0IDwgMCkgewogCQkJY29va2llID0gcmV0OwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrLCBmbGFncyk7Ci0JCQlsaXN0X2RlbF9pbml0KCZkZXNjLT5saXN0KTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljaGFuLT5sb2NrLCBmbGFncyk7Ci0JCQl0eC0+Y29va2llID0gY29va2llOwotCQkJaWNoYW4tPmRtYV9jaGFuLmNvb2tpZSA9IGNvb2tpZTsKKwkJCWdvdG8gZGVxdWV1ZTsKIAkJfQogCX0KIAogCWR1bXBfaWRtYWNfcmVnKGlwdSk7CiAKK2RlcXVldWU6CisJaWYgKGNvb2tpZSA8IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmljaGFuLT5sb2NrLCBmbGFncyk7CisJCWxpc3RfZGVsX2luaXQoJmRlc2MtPmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY2hhbi0+bG9jaywgZmxhZ3MpOworCQl0eC0+Y29va2llID0gY29va2llOworCQlpY2hhbi0+ZG1hX2NoYW4uY29va2llID0gY29va2llOworCX0KKwogb3V0OgogCW11dGV4X3VubG9jaygmaWNoYW4tPmNoYW5fbXV0ZXgpOwogCkBAIC05NDQsOCArOTgzLDYgQEAKIAkJbWVtc2V0KHR4ZCwgMCwgc2l6ZW9mKCp0eGQpKTsKIAkJZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCh0eGQsICZpY2hhbi0+ZG1hX2NoYW4pOwogCQl0eGQtPnR4X3N1Ym1pdAkJPSBpZG1hY190eF9zdWJtaXQ7Ci0JCXR4ZC0+Y2hhbgkJPSAmaWNoYW4tPmRtYV9jaGFuOwotCQlJTklUX0xJU1RfSEVBRCgmdHhkLT50eF9saXN0KTsKIAogCQlsaXN0X2FkZCgmZGVzYy0+bGlzdCwgJmljaGFuLT5mcmVlX2xpc3QpOwogCkBAIC0xMTYxLDYgKzExOTgsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBzY2F0dGVybGlzdCAqaWRtYWNfc2dfbmV4dChzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4sCisJc3RydWN0IGlkbWFjX3R4X2Rlc2MgKipkZXNjLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2duZXcgPSBzZyA/IHNnX25leHQoc2cpIDogTlVMTDsKKworCWlmIChzZ25ldykKKwkJLyogbmV4dCBzZy1lbGVtZW50IGluIHRoaXMgbGlzdCAqLworCQlyZXR1cm4gc2duZXc7CisKKwlpZiAoKCpkZXNjKS0+bGlzdC5uZXh0ID09ICZpY2hhbi0+cXVldWUpCisJCS8qIE5vIG1vcmUgZGVzY3JpcHRvcnMgb24gdGhlIHF1ZXVlICovCisJCXJldHVybiBOVUxMOworCisJLyogRmV0Y2ggbmV4dCBkZXNjcmlwdG9yICovCisJKmRlc2MgPSBsaXN0X2VudHJ5KCgqZGVzYyktPmxpc3QubmV4dCwgc3RydWN0IGlkbWFjX3R4X2Rlc2MsIGxpc3QpOworCXJldHVybiAoKmRlc2MpLT5zZzsKK30KKwogLyoKICAqIFdlIGhhdmUgc2V2ZXJhbCBwb3NzaWJpbGl0aWVzIGhlcmU6CiAgKiBjdXJyZW50IEJVRgkJbmV4dCBCVUYKQEAgLTExNzYsMjMgKzEyMzEsNDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpZG1hY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IGRldl9pZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaWNoYW4tPmRtYV9jaGFuLmRldi0+ZGV2aWNlOwogCXVuc2lnbmVkIGludCBjaGFuX2lkID0gaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQ7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICoqc2csICpzZ25leHQsICpzZ25ldyA9IE5VTEw7CiAJLyogTmV4dCB0cmFuc2ZlciBkZXNjcmlwdG9yICovCi0Jc3RydWN0IGlkbWFjX3R4X2Rlc2MgKmRlc2MgPSBOVUxMLCAqZGVzY25ldzsKKwlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYywgKmRlc2NuZXc7CiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNhbGxiYWNrOwogCXZvaWQgKmNhbGxiYWNrX3BhcmFtOwogCWJvb2wgZG9uZSA9IGZhbHNlOwotCXUzMglyZWFkeTAgPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQlVGMF9SRFkpLAotCQlyZWFkeTEgPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQlVGMV9SRFkpLAotCQljdXJidWYgPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQ1VSX0JVRik7CisJdTMyIHJlYWR5MCwgcmVhZHkxLCBjdXJidWYsIGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogSURNQUMgaGFzIGNsZWFyZWQgdGhlIHJlc3BlY3RpdmUgQlVGeF9SRFkgYml0LCB3ZSBtYW5hZ2UgdGhlIGJ1ZmZlciAqLwogCi0JcHJfZGVidWcoIklETUFDIGlycSAlZFxuIiwgaXJxKTsKKwlkZXZfZGJnKGRldiwgIklETUFDIGlycSAlZCwgYnVmICVkXG4iLCBpcnEsIGljaGFuLT5hY3RpdmVfYnVmZmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7CisKKwlyZWFkeTAJPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQlVGMF9SRFkpOworCXJlYWR5MQk9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0NIQV9CVUYxX1JEWSk7CisJY3VyYnVmCT0gaWRtYWNfcmVhZF9pcHVyZWcoJmlwdV9kYXRhLCBJUFVfQ0hBX0NVUl9CVUYpOworCWVycgk9IGlkbWFjX3JlYWRfaXB1cmVnKCZpcHVfZGF0YSwgSVBVX0lOVF9TVEFUXzQpOworCisJaWYgKGVyciAmICgxIDw8IGNoYW5faWQpKSB7CisJCWlkbWFjX3dyaXRlX2lwdXJlZygmaXB1X2RhdGEsIDEgPDwgY2hhbl9pZCwgSVBVX0lOVF9TVEFUXzQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7CisJCS8qCisJCSAqIERvaW5nIHRoaXMKKwkJICogaWNoYW4tPnNnWzBdID0gaWNoYW4tPnNnWzFdID0gTlVMTDsKKwkJICogeW91IGNhbiBmb3JjZSBjaGFubmVsIHJlLWVuYWJsZSBvbiB0aGUgbmV4dCB0eF9zdWJtaXQoKSwgYnV0CisJCSAqIHRoaXMgaXMgZGlydHkgLSB0aGluayBhYm91dCBkZXNjcmlwdG9ycyB3aXRoIG11bHRpcGxlCisJCSAqIHNnIGVsZW1lbnRzLgorCQkgKi8KKwkJZGV2X3dhcm4oZGV2LCAiTkZCNEVPRiBvbiBjaGFubmVsICVkLCByZWFkeSAleCwgJXgsIGN1ciAleFxuIiwKKwkJCSBjaGFuX2lkLCByZWFkeTAsIHJlYWR5MSwgY3VyYnVmKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcHVfZGF0YS5sb2NrLCBmbGFncyk7CisKIAkvKiBPdGhlciBpbnRlcnJ1cHRzIGRvIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGlzIGNoYW5uZWwgKi8KIAlzcGluX2xvY2soJmljaGFuLT5sb2NrKTsKLQogCWlmICh1bmxpa2VseShjaGFuX2lkICE9IElETUFDX1NEQ18wICYmIGNoYW5faWQgIT0gSURNQUNfU0RDXzEgJiYKIAkJICAgICAoKGN1cmJ1ZiA+PiBjaGFuX2lkKSAmIDEpID09IGljaGFuLT5hY3RpdmVfYnVmZmVyKSkgewogCQlpbnQgaSA9IDEwMDsKQEAgLTEyMDcsMTkgKzEyODUsMjMgQEAKIAogCQlpZiAoIWkpIHsKIAkJCXNwaW5fdW5sb2NrKCZpY2hhbi0+bG9jayk7Ci0JCQlkZXZfZGJnKGljaGFuLT5kbWFfY2hhbi5kZXZpY2UtPmRldiwKKwkJCWRldl9kYmcoZGV2LAogCQkJCSJJUlEgb24gYWN0aXZlIGJ1ZmZlciBvbiBjaGFubmVsICV4LCBhY3RpdmUgIgogCQkJCSIlZCwgcmVhZHkgJXgsICV4LCBjdXJyZW50ICV4IVxuIiwgY2hhbl9pZCwKIAkJCQlpY2hhbi0+YWN0aXZlX2J1ZmZlciwgcmVhZHkwLCByZWFkeTEsIGN1cmJ1Zik7CiAJCQlyZXR1cm4gSVJRX05PTkU7Ci0JCX0KKwkJfSBlbHNlCisJCQlkZXZfZGJnKGRldiwKKwkJCQkiQnVmZmVyIGRlYWN0aXZhdGVkIG9uIGNoYW5uZWwgJXgsIGFjdGl2ZSAiCisJCQkJIiVkLCByZWFkeSAleCwgJXgsIGN1cnJlbnQgJXgsIHJlc3QgJWQhXG4iLCBjaGFuX2lkLAorCQkJCWljaGFuLT5hY3RpdmVfYnVmZmVyLCByZWFkeTAsIHJlYWR5MSwgY3VyYnVmLCBpKTsKIAl9CiAKIAlpZiAodW5saWtlbHkoKGljaGFuLT5hY3RpdmVfYnVmZmVyICYmIChyZWFkeTEgPj4gY2hhbl9pZCkgJiAxKSB8fAogCQkgICAgICghaWNoYW4tPmFjdGl2ZV9idWZmZXIgJiYgKHJlYWR5MCA+PiBjaGFuX2lkKSAmIDEpCiAJCSAgICAgKSkgewogCQlzcGluX3VubG9jaygmaWNoYW4tPmxvY2spOwotCQlkZXZfZGJnKGljaGFuLT5kbWFfY2hhbi5kZXZpY2UtPmRldiwKKwkJZGV2X2RiZyhkZXYsCiAJCQkiSVJRIHdpdGggYWN0aXZlIGJ1ZmZlciBzdGlsbCByZWFkeSBvbiBjaGFubmVsICV4LCAiCiAJCQkiYWN0aXZlICVkLCByZWFkeSAleCwgJXghXG4iLCBjaGFuX2lkLAogCQkJaWNoYW4tPmFjdGl2ZV9idWZmZXIsIHJlYWR5MCwgcmVhZHkxKTsKQEAgLTEyMjcsOCArMTMwOSw5IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJmljaGFuLT5xdWV1ZSkpKSB7CisJCWljaGFuLT5zZ1tpY2hhbi0+YWN0aXZlX2J1ZmZlcl0gPSBOVUxMOwogCQlzcGluX3VubG9jaygmaWNoYW4tPmxvY2spOwotCQlkZXZfZXJyKGljaGFuLT5kbWFfY2hhbi5kZXZpY2UtPmRldiwKKwkJZGV2X2VycihkZXYsCiAJCQkiSVJRIHdpdGhvdXQgcXVldWVkIGJ1ZmZlcnMgb24gY2hhbm5lbCAleCwgYWN0aXZlICVkLCAiCiAJCQkicmVhZHkgJXgsICV4IVxuIiwgY2hhbl9pZCwKIAkJCWljaGFuLT5hY3RpdmVfYnVmZmVyLCByZWFkeTAsIHJlYWR5MSk7CkBAIC0xMjQzLDQwICsxMzI2LDQ0IEBACiAJc2cgPSAmaWNoYW4tPnNnW2ljaGFuLT5hY3RpdmVfYnVmZmVyXTsKIAlzZ25leHQgPSBpY2hhbi0+c2dbIWljaGFuLT5hY3RpdmVfYnVmZmVyXTsKIAorCWlmICghKnNnKSB7CisJCXNwaW5fdW5sb2NrKCZpY2hhbi0+bG9jayk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlkZXNjID0gbGlzdF9lbnRyeShpY2hhbi0+cXVldWUubmV4dCwgc3RydWN0IGlkbWFjX3R4X2Rlc2MsIGxpc3QpOworCWRlc2NuZXcgPSBkZXNjOworCisJZGV2X2RiZyhkZXYsICJJRE1BQyBpcnEgJWQsIGRtYSAweCUwOHgsIG5leHQgZG1hIDB4JTA4eCwgY3VycmVudCAlZCwgY3VyYnVmIDB4JTA4eFxuIiwKKwkJaXJxLCBzZ19kbWFfYWRkcmVzcygqc2cpLCBzZ25leHQgPyBzZ19kbWFfYWRkcmVzcyhzZ25leHQpIDogMCwgaWNoYW4tPmFjdGl2ZV9idWZmZXIsIGN1cmJ1Zik7CisKKwkvKiBGaW5kIHRoZSBkZXNjcmlwdG9yIG9mIHNnbmV4dCAqLworCXNnbmV3ID0gaWRtYWNfc2dfbmV4dChpY2hhbiwgJmRlc2NuZXcsICpzZyk7CisJaWYgKHNnbmV4dCAhPSBzZ25ldykKKwkJZGV2X2VycihkZXYsICJTdWJtaXR0ZWQgYnVmZmVyICVwLCBuZXh0IGJ1ZmZlciAlcFxuIiwgc2duZXh0LCBzZ25ldyk7CisKIAkvKgogCSAqIGlmIHNnbmV4dCA9PSBOVUxMIHNnIG11c3QgYmUgdGhlIGxhc3QgZWxlbWVudCBpbiBhIHNjYXR0ZXJsaXN0IGFuZAogCSAqIHF1ZXVlIG11c3QgYmUgZW1wdHkKIAkgKi8KIAlpZiAodW5saWtlbHkoIXNnbmV4dCkpIHsKLQkJaWYgKHVubGlrZWx5KHNnX25leHQoKnNnKSkpIHsKLQkJCWRldl9lcnIoaWNoYW4tPmRtYV9jaGFuLmRldmljZS0+ZGV2LAotCQkJCSJCcm9rZW4gYnVmZmVyLXVwZGF0ZSBsb2NraW5nIG9uIGNoYW5uZWwgJXghXG4iLAotCQkJCWNoYW5faWQpOwotCQkJLyogV2UnbGwgbGV0IHRoZSB1c2VyIGNhdGNoIHVwICovCisJCWlmICghV0FSTl9PTihzZ19uZXh0KCpzZykpKQorCQkJZGV2X2RiZyhkZXYsICJVbmRlcnJ1biBvbiBjaGFubmVsICV4XG4iLCBjaGFuX2lkKTsKKwkJaWNoYW4tPnNnWyFpY2hhbi0+YWN0aXZlX2J1ZmZlcl0gPSBzZ25ldzsKKworCQlpZiAodW5saWtlbHkoc2duZXcpKSB7CisJCQlpcHVfc3VibWl0X2J1ZmZlcihpY2hhbiwgZGVzY25ldywgc2duZXcsICFpY2hhbi0+YWN0aXZlX2J1ZmZlcik7CiAJCX0gZWxzZSB7Ci0JCQkvKiBVbmRlcnJ1biAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlwdV9kYXRhLmxvY2ssIGZsYWdzKTsKIAkJCWlwdV9pY19kaXNhYmxlX3Rhc2soJmlwdV9kYXRhLCBjaGFuX2lkKTsKLQkJCWRldl9kYmcoaWNoYW4tPmRtYV9jaGFuLmRldmljZS0+ZGV2LAotCQkJCSJVbmRlcnJ1biBvbiBjaGFubmVsICV4XG4iLCBjaGFuX2lkKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwdV9kYXRhLmxvY2ssIGZsYWdzKTsKIAkJCWljaGFuLT5zdGF0dXMgPSBJUFVfQ0hBTk5FTF9SRUFEWTsKIAkJCS8qIENvbnRpbnVlIHRvIGNoZWNrIGZvciBjb21wbGV0ZSBkZXNjcmlwdG9yICovCiAJCX0KIAl9CiAKLQlkZXNjID0gbGlzdF9lbnRyeShpY2hhbi0+cXVldWUubmV4dCwgc3RydWN0IGlkbWFjX3R4X2Rlc2MsIGxpc3QpOwotCi0JLyogRmlyc3QgY2FsY3VsYXRlIGFuZCBzdWJtaXQgdGhlIG5leHQgc2cgZWxlbWVudCAqLwotCWlmIChsaWtlbHkoc2duZXh0KSkKLQkJc2duZXcgPSBzZ19uZXh0KHNnbmV4dCk7Ci0KLQlpZiAodW5saWtlbHkoIXNnbmV3KSkgewotCQkvKiBTdGFydCBhIG5ldyBzY2F0dGVybGlzdCwgaWYgYW55IHF1ZXVlZCAqLwotCQlpZiAobGlrZWx5KGRlc2MtPmxpc3QubmV4dCAhPSAmaWNoYW4tPnF1ZXVlKSkgewotCQkJZGVzY25ldyA9IGxpc3RfZW50cnkoZGVzYy0+bGlzdC5uZXh0LAotCQkJCQkgICAgIHN0cnVjdCBpZG1hY190eF9kZXNjLCBsaXN0KTsKLQkJCXNnbmV3ID0gJmRlc2NuZXctPnNnWzBdOwotCQl9Ci0JfQorCS8qIENhbGN1bGF0ZSBhbmQgc3VibWl0IHRoZSBuZXh0IHNnIGVsZW1lbnQgKi8KKwlzZ25ldyA9IGlkbWFjX3NnX25leHQoaWNoYW4sICZkZXNjbmV3LCBzZ25ldyk7CiAKIAlpZiAodW5saWtlbHkoIXNnX25leHQoKnNnKSkgfHwgIXNnbmV4dCkgewogCQkvKgpAQCAtMTI4OSwxNyArMTM3NiwxMyBAQAogCiAJKnNnID0gc2duZXc7CiAKLQlpZiAobGlrZWx5KHNnbmV3KSkgewotCQlpbnQgcmV0OwotCi0JCXJldCA9IGlwdV91cGRhdGVfY2hhbm5lbF9idWZmZXIoY2hhbl9pZCwgaWNoYW4tPmFjdGl2ZV9idWZmZXIsCi0JCQkJCQlzZ19kbWFfYWRkcmVzcygqc2cpKTsKLQkJaWYgKHJldCA8IDApCi0JCQlkZXZfZXJyKGljaGFuLT5kbWFfY2hhbi5kZXZpY2UtPmRldiwKLQkJCQkiRmFpbGVkIHRvIHVwZGF0ZSBidWZmZXIgb24gY2hhbm5lbCAleCBidWZmZXIgJWQhXG4iLAotCQkJCWNoYW5faWQsIGljaGFuLT5hY3RpdmVfYnVmZmVyKTsKLQkJZWxzZQotCQkJaXB1X3NlbGVjdF9idWZmZXIoY2hhbl9pZCwgaWNoYW4tPmFjdGl2ZV9idWZmZXIpOworCWlmIChsaWtlbHkoc2duZXcpICYmCisJICAgIGlwdV9zdWJtaXRfYnVmZmVyKGljaGFuLCBkZXNjbmV3LCBzZ25ldywgaWNoYW4tPmFjdGl2ZV9idWZmZXIpIDwgMCkgeworCQljYWxsYmFjayA9IGRlc2MtPnR4ZC5jYWxsYmFjazsKKwkJY2FsbGJhY2tfcGFyYW0gPSBkZXNjLT50eGQuY2FsbGJhY2tfcGFyYW07CisJCXNwaW5fdW5sb2NrKCZpY2hhbi0+bG9jayk7CisJCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKKwkJc3Bpbl9sb2NrKCZpY2hhbi0+bG9jayk7CiAJfQogCiAJLyogRmxpcCB0aGUgYWN0aXZlIGJ1ZmZlciAtIGV2ZW4gaWYgdXBkYXRlIGFib3ZlIGZhaWxlZCAqLwpAQCAtMTMyNywxMyArMTQxMCwyMCBAQAogCQlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSBpcHUtPmNoYW5uZWwgKyBpOwogCQlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYzsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJaW50IGo7CisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJCWludCBqLCBrOwogCiAJCWZvciAoaiA9IDA7IGogPCBpY2hhbi0+bl90eF9kZXNjOyBqKyspIHsKIAkJCWRlc2MgPSBpY2hhbi0+ZGVzYyArIGo7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWNoYW4tPmxvY2ssIGZsYWdzKTsKIAkJCWlmIChhc3luY190eF90ZXN0X2FjaygmZGVzYy0+dHhkKSkgewogCQkJCWxpc3RfbW92ZSgmZGVzYy0+bGlzdCwgJmljaGFuLT5mcmVlX2xpc3QpOworCQkJCWZvcl9lYWNoX3NnKGRlc2MtPnNnLCBzZywgZGVzYy0+c2dfbGVuLCBrKSB7CisJCQkJCWlmIChpY2hhbi0+c2dbMF0gPT0gc2cpCisJCQkJCQlpY2hhbi0+c2dbMF0gPSBOVUxMOworCQkJCQllbHNlIGlmIChpY2hhbi0+c2dbMV0gPT0gc2cpCisJCQkJCQlpY2hhbi0+c2dbMV0gPSBOVUxMOworCQkJCX0KIAkJCQlhc3luY190eF9jbGVhcl9hY2soJmRlc2MtPnR4ZCk7CiAJCQl9CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpY2hhbi0+bG9jaywgZmxhZ3MpOwpAQCAtMTM0MSwxMyArMTQzMSw3IEBACiAJfQogfQogCi0vKgotICogQXQgdGhlIHRpbWUgLmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcygpIG1ldGhvZCBpcyBjYWxsZWQsIHdlIGNhbm5vdCBrbm93LAotICogd2hldGhlciB0aGUgY2xpZW50IHdpbGwgYWNjZXB0IHRoZSBjaGFubmVsLiBUaHVzIHdlIG11c3Qgb25seSBjaGVjaywgaWYgd2UKLSAqIGNhbiBzYXRpc2Z5IGNsaWVudCdzIHJlcXVlc3QgYnV0IHRoZSBvbmx5IHJlYWwgY3JpdGVyaW9uIHRvIHZlcmlmeSwgd2hldGhlcgotICogdGhlIGNsaWVudCBoYXMgYWNjZXB0ZWQgb3VyIG9mZmVyIGlzIHRoZSBjbGllbnRfY291bnQuIFRoYXQncyB3aHkgd2UgaGF2ZSB0bwotICogcGVyZm9ybSB0aGUgcmVzdCBvZiBvdXIgYWxsb2NhdGlvbiB0YXNrcyBvbiB0aGUgZmlyc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgotICovCisvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGlzZSBhIHRyYW5zZmVyIGRlc2NyaXB0b3IuICovCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICppZG1hY19wcmVwX3NsYXZlX3NnKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKIAkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsIHVuc2lnbmVkIGludCBzZ19sZW4sCiAJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgbG9uZyB0eF9mbGFncykKQEAgLTEzNTgsOCArMTQ0Miw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFdlIG9ubHkgY2FuIGhhbmRsZSB0aGVzZSB0aHJlZSBjaGFubmVscyBzbyBmYXIgKi8KLQlpZiAoaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQgIT0gSURNQUNfU0RDXzAgJiYgaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQgIT0gSURNQUNfU0RDXzEgJiYKLQkgICAgaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQgIT0gSURNQUNfSUNfNykKKwlpZiAoY2hhbi0+Y2hhbl9pZCAhPSBJRE1BQ19TRENfMCAmJiBjaGFuLT5jaGFuX2lkICE9IElETUFDX1NEQ18xICYmCisJICAgIGNoYW4tPmNoYW5faWQgIT0gSURNQUNfSUNfNykKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoZGlyZWN0aW9uICE9IERNQV9GUk9NX0RFVklDRSAmJiBkaXJlY3Rpb24gIT0gRE1BX1RPX0RFVklDRSkgewpAQCAtMTQwMCw3ICsxNDg0LDcgQEAKIAogCS8qIFRoaXMgaXMgbm90IGFsd2F5cyBuZWVkZWQsIGJ1dCBkb2Vzbid0IGh1cnQgZWl0aGVyICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlwdS0+bG9jaywgZmxhZ3MpOwotCWlwdV9zZWxlY3RfYnVmZmVyKGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkLCBpY2hhbi0+YWN0aXZlX2J1ZmZlcik7CisJaXB1X3NlbGVjdF9idWZmZXIoY2hhbi0+Y2hhbl9pZCwgaWNoYW4tPmFjdGl2ZV9idWZmZXIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwdS0+bG9jaywgZmxhZ3MpOwogCiAJLyoKQEAgLTE0MzIsOCArMTUxNiw3IEBACiAJCQlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYyA9IGljaGFuLT5kZXNjICsgaTsKIAkJCWlmIChsaXN0X2VtcHR5KCZkZXNjLT5saXN0KSkKIAkJCQkvKiBEZXNjcmlwdG9yIHdhcyBwcmVwYXJlZCwgYnV0IG5vdCBzdWJtaXR0ZWQgKi8KLQkJCQlsaXN0X2FkZCgmZGVzYy0+bGlzdCwKLQkJCQkJICZpY2hhbi0+ZnJlZV9saXN0KTsKKwkJCQlsaXN0X2FkZCgmZGVzYy0+bGlzdCwgJmljaGFuLT5mcmVlX2xpc3QpOwogCiAJCQlhc3luY190eF9jbGVhcl9hY2soJmRlc2MtPnR4ZCk7CiAJCX0KQEAgLTE0NTgsNiArMTU0MSwyOCBAQAogCW11dGV4X3VubG9jaygmaWNoYW4tPmNoYW5fbXV0ZXgpOwogfQogCisjaWZkZWYgREVCVUcKK3N0YXRpYyBpcnFyZXR1cm5fdCBpY19zb2ZfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW4gPSBkZXZfaWQ7CisJcHJpbnRrKEtFUk5fREVCVUcgIkdvdCBTT0YgSVJRICVkIG9uIENoYW5uZWwgJWRcbiIsCisJICAgICAgIGlycSwgaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQpOworCWRpc2FibGVfaXJxKGlycSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaWNfZW9mX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gZGV2X2lkOworCXByaW50ayhLRVJOX0RFQlVHICJHb3QgRU9GIElSUSAlZCBvbiBDaGFubmVsICVkXG4iLAorCSAgICAgICBpcnEsIGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkKTsKKwlkaXNhYmxlX2lycShpcnEpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBpY19zb2YgPSAtRUlOVkFMLCBpY19lb2YgPSAtRUlOVkFMOworI2VuZGlmCisKIHN0YXRpYyBpbnQgaWRtYWNfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQogewogCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IHRvX2lkbWFjX2NoYW4oY2hhbik7CkBAIC0xNDcxLDMxICsxNTc2LDQ5IEBACiAJY2hhbi0+Y29va2llCQk9IDE7CiAJaWNoYW4tPmNvbXBsZXRlZAk9IC1FTlhJTzsKIAotCXJldCA9IGlwdV9pcnFfbWFwKGljaGFuLT5kbWFfY2hhbi5jaGFuX2lkKTsKKwlyZXQgPSBpcHVfaXJxX21hcChjaGFuLT5jaGFuX2lkKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlaW1hcDsKIAogCWljaGFuLT5lb2ZfaXJxID0gcmV0OwotCXJldCA9IHJlcXVlc3RfaXJxKGljaGFuLT5lb2ZfaXJxLCBpZG1hY19pbnRlcnJ1cHQsIDAsCi0JCQkgIGljaGFuLT5lb2ZfbmFtZSwgaWNoYW4pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVyaXJxOworCisJLyoKKwkgKiBJbXBvcnRhbnQgdG8gZmlyc3QgZGlzYWJsZSB0aGUgY2hhbm5lbCwgYmVjYXVzZSBtYXliZSBzb21lb25lCisJICogdXNlZCBpdCBiZWZvcmUgdXMsIGUuZy4sIHRoZSBib290bG9hZGVyCisJICovCisJaXB1X2Rpc2FibGVfY2hhbm5lbChpZG1hYywgaWNoYW4sIHRydWUpOwogCiAJcmV0ID0gaXB1X2luaXRfY2hhbm5lbChpZG1hYywgaWNoYW4pOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVpY2hhbjsKIAorCXJldCA9IHJlcXVlc3RfaXJxKGljaGFuLT5lb2ZfaXJxLCBpZG1hY19pbnRlcnJ1cHQsIDAsCisJCQkgIGljaGFuLT5lb2ZfbmFtZSwgaWNoYW4pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVyaXJxOworCisjaWZkZWYgREVCVUcKKwlpZiAoY2hhbi0+Y2hhbl9pZCA9PSBJRE1BQ19JQ183KSB7CisJCWljX3NvZiA9IGlwdV9pcnFfbWFwKDY5KTsKKwkJaWYgKGljX3NvZiA+IDApCisJCQlyZXF1ZXN0X2lycShpY19zb2YsIGljX3NvZl9pcnEsIDAsICJJQyBTT0YiLCBpY2hhbik7CisJCWljX2VvZiA9IGlwdV9pcnFfbWFwKDcwKTsKKwkJaWYgKGljX2VvZiA+IDApCisJCQlyZXF1ZXN0X2lycShpY19lb2YsIGljX2VvZl9pcnEsIDAsICJJQyBFT0YiLCBpY2hhbik7CisJfQorI2VuZGlmCisKIAlpY2hhbi0+c3RhdHVzID0gSVBVX0NIQU5ORUxfSU5JVElBTElaRUQ7CiAKLQlkZXZfZGJnKCZpY2hhbi0+ZG1hX2NoYW4uZGV2LT5kZXZpY2UsICJGb3VuZCBjaGFubmVsIDB4JXgsIGlycSAlZFxuIiwKLQkJaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQsIGljaGFuLT5lb2ZfaXJxKTsKKwlkZXZfZGJnKCZjaGFuLT5kZXYtPmRldmljZSwgIkZvdW5kIGNoYW5uZWwgMHgleCwgaXJxICVkXG4iLAorCQljaGFuLT5jaGFuX2lkLCBpY2hhbi0+ZW9mX2lycSk7CiAKIAlyZXR1cm4gcmV0OwogCi1laWNoYW46Ci0JZnJlZV9pcnEoaWNoYW4tPmVvZl9pcnEsIGljaGFuKTsKIGVyaXJxOgotCWlwdV9pcnFfdW5tYXAoaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQpOworCWlwdV91bmluaXRfY2hhbm5lbChpZG1hYywgaWNoYW4pOworZWljaGFuOgorCWlwdV9pcnFfdW5tYXAoY2hhbi0+Y2hhbl9pZCk7CiBlaW1hcDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUxMCw4ICsxNjMzLDIyIEBACiAJX19pZG1hY190ZXJtaW5hdGVfYWxsKGNoYW4pOwogCiAJaWYgKGljaGFuLT5zdGF0dXMgPiBJUFVfQ0hBTk5FTF9GUkVFKSB7CisjaWZkZWYgREVCVUcKKwkJaWYgKGNoYW4tPmNoYW5faWQgPT0gSURNQUNfSUNfNykgeworCQkJaWYgKGljX3NvZiA+IDApIHsKKwkJCQlmcmVlX2lycShpY19zb2YsIGljaGFuKTsKKwkJCQlpcHVfaXJxX3VubWFwKDY5KTsKKwkJCQlpY19zb2YgPSAtRUlOVkFMOworCQkJfQorCQkJaWYgKGljX2VvZiA+IDApIHsKKwkJCQlmcmVlX2lycShpY19lb2YsIGljaGFuKTsKKwkJCQlpcHVfaXJxX3VubWFwKDcwKTsKKwkJCQlpY19lb2YgPSAtRUlOVkFMOworCQkJfQorCQl9CisjZW5kaWYKIAkJZnJlZV9pcnEoaWNoYW4tPmVvZl9pcnEsIGljaGFuKTsKLQkJaXB1X2lycV91bm1hcChpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZCk7CisJCWlwdV9pcnFfdW5tYXAoY2hhbi0+Y2hhbl9pZCk7CiAJfQogCiAJaWNoYW4tPnN0YXR1cyA9IElQVV9DSEFOTkVMX0ZSRUU7CkBAIC0xNTczLDcgKzE3MTAsNyBAQAogCQlkbWFfY2hhbi0+ZGV2aWNlCT0gJmlkbWFjLT5kbWE7CiAJCWRtYV9jaGFuLT5jb29raWUJPSAxOwogCQlkbWFfY2hhbi0+Y2hhbl9pZAk9IGk7Ci0JCWxpc3RfYWRkX3RhaWwoJmljaGFuLT5kbWFfY2hhbi5kZXZpY2Vfbm9kZSwgJmRtYS0+Y2hhbm5lbHMpOworCQlsaXN0X2FkZF90YWlsKCZkbWFfY2hhbi0+ZGV2aWNlX25vZGUsICZkbWEtPmNoYW5uZWxzKTsKIAl9CiAKIAlpZG1hY193cml0ZV9pY3JlZyhpcHUsIDB4MDAwMDAwNzAsIElETUFDX0NPTkYpOwpAQCAtMTU4MSw3ICsxNzE4LDcgQEAKIAlyZXR1cm4gZG1hX2FzeW5jX2RldmljZV9yZWdpc3RlcigmaWRtYWMtPmRtYSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwdV9pZG1hY19leGl0KHN0cnVjdCBpcHUgKmlwdSkKK3N0YXRpYyB2b2lkIF9fZXhpdCBpcHVfaWRtYWNfZXhpdChzdHJ1Y3QgaXB1ICppcHUpCiB7CiAJaW50IGk7CiAJc3RydWN0IGlkbWFjICppZG1hYyA9ICZpcHUtPmlkbWFjOwpAQCAtMTYwMCw3ICsxNzM3LDcgQEAKICAqIElQVSBjb21tb24gcHJvYmUgLyByZW1vdmUKICAqLwogCi1zdGF0aWMgaW50IGlwdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2luaXQgaXB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGlwdV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtX2lwdSwgKm1lbV9pYzsKQEAgLTE3MDAsNyArMTgzNyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpcHVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBpcHVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGlwdSAqaXB1ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKQEAgLTE3MjUsNyArMTg2Miw3IEBACiAJCS5uYW1lCT0gImlwdS1jb3JlIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKLQkucmVtb3ZlCQk9IGlwdV9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcChpcHVfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGlwdV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lycS5jIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pcnEuYwppbmRleCA4M2Y1MzJjLi5kZDhlYmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lycS5jCisrKyBiL2RyaXZlcnMvZG1hL2lwdS9pcHVfaXJxLmMKQEAgLTM1Miw3ICszNTIsNyBAQAogfTsKIAogLyogSW5zdGFsbCB0aGUgSVJRIGhhbmRsZXIgKi8KLWludCBpcHVfaXJxX2F0dGFjaF9pcnEoc3RydWN0IGlwdSAqaXB1LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitpbnQgX19pbml0IGlwdV9pcnFfYXR0YWNoX2lycShzdHJ1Y3QgaXB1ICppcHUsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXB1X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAl1bnNpZ25lZCBpbnQgaXJxLCBpcnFfYmFzZSwgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL212X3hvci5jIGIvZHJpdmVycy9kbWEvbXZfeG9yLmMKaW5kZXggY2I3ZjI2Zi4uZGRhYjk0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvbXZfeG9yLmMKKysrIGIvZHJpdmVycy9kbWEvbXZfeG9yLmMKQEAgLTYzMiw3ICs2MzIsNiBAQAogCQlzbG90LT5hc3luY190eC50eF9zdWJtaXQgPSBtdl94b3JfdHhfc3VibWl0OwogCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+Y2hhaW5fbm9kZSk7CiAJCUlOSVRfTElTVF9IRUFEKCZzbG90LT5zbG90X25vZGUpOwotCQlJTklUX0xJU1RfSEVBRCgmc2xvdC0+YXN5bmNfdHgudHhfbGlzdCk7CiAJCWh3X2Rlc2MgPSAoY2hhciAqKSBtdl9jaGFuLT5kZXZpY2UtPmRtYV9kZXNjX3Bvb2w7CiAJCXNsb3QtPmFzeW5jX3R4LnBoeXMgPQogCQkJKGRtYV9hZGRyX3QpICZod19kZXNjW2lkeCAqIE1WX1hPUl9TTE9UX1NJWkVdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCBlZWU0N2ZkLi5lNWY1YzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtMSwxMyArMSwxMiBAQAogIwogIwlFREFDIEtjb25maWcKLSMJQ29weXJpZ2h0IChjKSAyMDAzIExpbnV4IE5ldHdvcngKKyMJQ29weXJpZ2h0IChjKSAyMDA4IERvdWcgVGhvbXBzb24gd3d3LnNvZnR3YXJlYml0bWFrZXIuY29tCiAjCUxpY2Vuc2VkIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgR1BMCiAjCiAKIG1lbnVjb25maWcgRURBQwotCWJvb2wgIkVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmciCiAJZGVwZW5kcyBvbiBIQVNfSU9NRU0KLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCWRlcGVuZHMgb24gWDg2IHx8IFBQQwogCWhlbHAKIAkgIEVEQUMgaXMgZGVzaWduZWQgdG8gcmVwb3J0IGVycm9ycyBpbiB0aGUgY29yZSBzeXN0ZW0uCkBAIC00MCw2ICszOSwxNCBAQAogCSAgdGhlcmUncmUgZm91ciBkZWJ1ZyBsZXZlbHMgKHg9MCwxLDIsMyBmcm9tIGxvdyB0byBoaWdoKS4KIAkgIFVzdWFsbHkgeW91IHNob3VsZCBzZWxlY3QgJ04nLgogCitjb25maWcgRURBQ19ERUJVR19WRVJCT1NFCisJYm9vbCAiTW9yZSB2ZXJib3NlIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIEVEQUNfREVCVUcKKwloZWxwCisJICBUaGlzIG9wdGlvbiBtYWtlcyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gbW9yZSB2ZXJib3NlLgorCSAgU291cmNlIGZpbGUgbmFtZSBhbmQgbGluZSBudW1iZXIgd2hlcmUgZGVidWdnaW5nIG1lc3NhZ2UKKwkgIHByaW50ZWQgd2lsbCBiZSBhZGRlZCB0byBkZWJ1Z2dpbmcgbWVzc2FnZS4KKwogY29uZmlnIEVEQUNfTU1fRURBQwogCXRyaXN0YXRlICJNYWluIE1lbW9yeSBFREFDIChFcnJvciBEZXRlY3Rpb24gQW5kIENvcnJlY3Rpb24pIHJlcG9ydGluZyIKIAlkZWZhdWx0IHkKQEAgLTE3NCw0ICsxODEsMjcgQEAKIAkgIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBpbnRlcm5hbCBtZW1vcnkgY29udHJvbGxlcgogCSAgb24gcGxhdGZvcm0gd2l0aG91dCBhIGh5cGVydmlzb3IKIAorY29uZmlnIEVEQUNfUFBDNFhYCisJdHJpc3RhdGUgIlBQQzR4eCBJQk0gRERSMiBNZW1vcnkgQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiA0eHgKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgRURBQyBvbiB0aGUgRUNDIG1lbW9yeSB1c2VkCisJICB3aXRoIHRoZSBJQk0gRERSMiBtZW1vcnkgY29udHJvbGxlciBmb3VuZCBpbiB2YXJpb3VzCisJICBQb3dlclBDIDR4eCBlbWJlZGRlZCBwcm9jZXNzb3JzIHN1Y2ggYXMgdGhlIDQwNUVYW3JdLAorCSAgNDQwU1AsIDQ0MFNQZSwgNDYwRVgsIDQ2MEdUIGFuZCA0NjBTWC4KKworY29uZmlnIEVEQUNfQU1EODEzMQorCXRyaXN0YXRlICJBTUQ4MTMxIEh5cGVyVHJhbnNwb3J0IFBDSS1YIFR1bm5lbCIKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBQQ0kKKwloZWxwCisJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlCisJICBBTUQ4MTMxIEh5cGVyVHJhbnNwb3J0IFBDSS1YIFR1bm5lbCBjaGlwLgorCitjb25maWcgRURBQ19BTUQ4MTExCisJdHJpc3RhdGUgIkFNRDgxMTEgSHlwZXJUcmFuc3BvcnQgSS9PIEh1YiIKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBQQ0kKKwloZWxwCisJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlCisJICBBTUQ4MTExIEh5cGVyVHJhbnNwb3J0IEkvTyBIdWIgY2hpcC4KKwogZW5kaWYgIyBFREFDCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvTWFrZWZpbGUgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKaW5kZXggYjc1MTk2OS4uYTVmZGNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQpAQCAtMzQsNCArMzQsNCBAQAogb2JqLSQoQ09ORklHX0VEQUNfTVBDODVYWCkJCSs9IG1wYzg1eHhfZWRhYy5vCiBvYmotJChDT05GSUdfRURBQ19NVjY0WDYwKQkJKz0gbXY2NHg2MF9lZGFjLm8KIG9iai0kKENPTkZJR19FREFDX0NFTEwpCQkJKz0gY2VsbF9lZGFjLm8KLQorb2JqLSQoQ09ORklHX0VEQUNfUFBDNFhYKQkJKz0gcHBjNHh4X2VkYWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDgxMTFfZWRhYy5jIGIvZHJpdmVycy9lZGFjL2FtZDgxMTFfZWRhYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNDY5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2VkYWMvYW1kODExMV9lZGFjLmMKQEAgLTAsMCArMSw1OTUgQEAKKy8qCisgKiBhbWQ4MTExX2VkYWMuYywgQU1EODExMSBIeXBlciBUcmFuc3BvcnQgY2hpcCBFREFDIGtlcm5lbCBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICogQXV0aG9yczoJQ2FvIFFpbmd0YW8gPHFpbmd0YW8uY2FvQHdpbmRyaXZlci5jb20+CisgKiAJCUJlbmphbWluIFdhbHNoIDxiZW5qYW1pbi53YWxzaEB3aW5kcml2ZXIuY29tPgorICogCQlIdSBZb25ncWkgPHlvbmdxaS5odUB3aW5kcml2ZXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2VkYWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJlZGFjX2NvcmUuaCIKKyNpbmNsdWRlICJlZGFjX21vZHVsZS5oIgorI2luY2x1ZGUgImFtZDgxMTFfZWRhYy5oIgorCisjZGVmaW5lIEFNRDgxMTFfRURBQ19SRVZJU0lPTgkiIFZlcjogMS4wLjAgIiBfX0RBVEVfXworI2RlZmluZSBBTUQ4MTExX0VEQUNfTU9EX1NUUgkiYW1kODExMV9lZGFjIgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfUENJCTB4NzQ2MAorc3RhdGljIGludCBlZGFjX2Rldl9pZHg7CisKK2VudW0gYW1kODExMV9lZGFjX2RldnMgeworCUxQQ19CUklER0UgPSAwLAorfTsKKworZW51bSBhbWQ4MTExX2VkYWNfcGNpcyB7CisJUENJX0JSSURHRSA9IDAsCit9OworCisvKiBXcmFwcGVyIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCitzdGF0aWMgaW50IGVkYWNfcGNpX3JlYWRfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlZywgdTMyICp2YWwzMikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcmVnLCB2YWwzMik7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgQU1EODExMV9FREFDX01PRF9TVFIKKwkJCSIgUENJIEFjY2VzcyBSZWFkIEVycm9yIGF0IDB4JXhcbiIsIHJlZyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBlZGFjX3BjaV9yZWFkX2J5dGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlZywgdTggKnZhbDgpCit7CisJaW50IHJldDsKKworCXJldCA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcmVnLCB2YWw4KTsKKwlpZiAocmV0ICE9IDApCisJCXByaW50ayhLRVJOX0VSUiBBTUQ4MTExX0VEQUNfTU9EX1NUUgorCQkJIiBQQ0kgQWNjZXNzIFJlYWQgRXJyb3IgYXQgMHgleFxuIiwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZWRhY19wY2lfd3JpdGVfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlZywgdTMyIHZhbDMyKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcmVnLCB2YWwzMik7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgQU1EODExMV9FREFDX01PRF9TVFIKKwkJCSIgUENJIEFjY2VzcyBXcml0ZSBFcnJvciBhdCAweCV4XG4iLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBlZGFjX3BjaV93cml0ZV9ieXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZWcsIHU4IHZhbDgpCit7CisJaW50IHJldDsKKworCXJldCA9IHBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHJlZywgdmFsOCk7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgQU1EODExMV9FREFDX01PRF9TVFIKKwkJCSIgUENJIEFjY2VzcyBXcml0ZSBFcnJvciBhdCAweCV4XG4iLCByZWcpOworfQorCisvKgorICogZGV2aWNlLXNwZWNpZmljIG1ldGhvZHMgZm9yIGFtZDgxMTEgUENJIEJyaWRnZSBDb250cm9sbGVyCisgKgorICogRXJyb3IgUmVwb3J0aW5nIGFuZCBIYW5kbGluZyBmb3IgYW1kODExMSBjaGlwc2V0IGNvdWxkIGJlIGZvdW5kCisgKiBpbiBpdHMgZGF0YXNoZWV0IDMuMS4yIHNlY3Rpb24sIFAzNworICovCitzdGF0aWMgdm9pZCBhbWQ4MTExX3BjaV9icmlkZ2VfaW5pdChzdHJ1Y3QgYW1kODExMV9wY2lfaW5mbyAqcGNpX2luZm8pCit7CisJdTMyIHZhbDMyOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwY2lfaW5mby0+ZGV2OworCisJLyogRmlyc3QgY2xlYXIgZXJyb3IgZGV0ZWN0aW9uIGZsYWdzIG9uIHRoZSBob3N0IGludGVyZmFjZSAqLworCisJLyogQ2xlYXIgU1NFL1NNQS9TVEEgZmxhZ3MgaW4gdGhlIGdsb2JhbCBzdGF0dXMgcmVnaXN0ZXIqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX1NUU0NNRCwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBQQ0lfU1RTQ01EX0NMRUFSX01BU0spCisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1BDSV9TVFNDTUQsIHZhbDMyKTsKKworCS8qIENsZWFyIENSQyBhbmQgTGluayBGYWlsIGZsYWdzIGluIEhUIExpbmsgQ29udHJvbCByZWcgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX0hUX0xJTkssICZ2YWwzMik7CisJaWYgKHZhbDMyICYgSFRfTElOS19DTEVBUl9NQVNLKQorCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19IVF9MSU5LLCB2YWwzMik7CisKKwkvKiBTZWNvbmQgY2xlYXIgYWxsIGZhdWx0IG9uIHRoZSBzZWNvbmRhcnkgaW50ZXJmYWNlICovCisKKwkvKiBDbGVhciBlcnJvciBmbGFncyBpbiB0aGUgbWVtb3J5LWJhc2UgbGltaXQgcmVnLiAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBNRU1fTElNSVRfQ0xFQVJfTUFTSykKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgdmFsMzIpOworCisJLyogQ2xlYXIgRGlzY2FyZCBUaW1lciBFeHBpcmVkIGZsYWcgaW4gSW50ZXJydXB0L0JyaWRnZSBDb250cm9sIHJlZyAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX0lOVEJSR19DVFJMLCAmdmFsMzIpOworCWlmICh2YWwzMiAmIFBDSV9JTlRCUkdfQ1RSTF9DTEVBUl9NQVNLKQorCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19QQ0lfSU5UQlJHX0NUUkwsIHZhbDMyKTsKKworCS8qIExhc3QgZW5hYmxlIGVycm9yIGRldGVjdGlvbnMgKi8KKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkgeworCQkvKiBFbmFibGUgU3lzdGVtIEVycm9yIHJlcG9ydGluZyBpbiBnbG9iYWwgc3RhdHVzIHJlZ2lzdGVyICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX1NUU0NNRCwgJnZhbDMyKTsKKwkJdmFsMzIgfD0gUENJX1NUU0NNRF9TRVJSRU47CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1BDSV9TVFNDTUQsIHZhbDMyKTsKKworCQkvKiBFbmFibGUgQ1JDIFN5bmMgZmxvb2QgcGFja2V0cyB0byBIeXBlclRyYW5zcG9ydCBMaW5rICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfSFRfTElOSywgJnZhbDMyKTsKKwkJdmFsMzIgfD0gSFRfTElOS19DUkNGRU47CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0hUX0xJTkssIHZhbDMyKTsKKworCQkvKiBFbmFibGUgU1NFIHJlcG9ydGluZyBldGMgaW4gSW50ZXJydXB0IGNvbnRyb2wgcmVnICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX0lOVEJSR19DVFJMLCAmdmFsMzIpOworCQl2YWwzMiB8PSBQQ0lfSU5UQlJHX0NUUkxfUE9MTF9NQVNLOworCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19QQ0lfSU5UQlJHX0NUUkwsIHZhbDMyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMTFfcGNpX2JyaWRnZV9leGl0KHN0cnVjdCBhbWQ4MTExX3BjaV9pbmZvICpwY2lfaW5mbykKK3sKKwl1MzIgdmFsMzI7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHBjaV9pbmZvLT5kZXY7CisKKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkgeworCQkvKiBEaXNhYmxlIFN5c3RlbSBFcnJvciByZXBvcnRpbmcgKi8KKwkJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19QQ0lfU1RTQ01ELCAmdmFsMzIpOworCQl2YWwzMiAmPSB+UENJX1NUU0NNRF9TRVJSRU47CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1BDSV9TVFNDTUQsIHZhbDMyKTsKKworCQkvKiBEaXNhYmxlIENSQyBmbG9vZCBwYWNrZXRzICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfSFRfTElOSywgJnZhbDMyKTsKKwkJdmFsMzIgJj0gfkhUX0xJTktfQ1JDRkVOOworCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19IVF9MSU5LLCB2YWwzMik7CisKKwkJLyogRGlzYWJsZSBEVFNFUlJFTi9NQVJTUC9TRVJSRU4gaW4gSW50ZXJydXB0IENvbnRyb2wgcmVnICovCisJCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfUENJX0lOVEJSR19DVFJMLCAmdmFsMzIpOworCQl2YWwzMiAmPSB+UENJX0lOVEJSR19DVFJMX1BPTExfTUFTSzsKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfUENJX0lOVEJSR19DVFJMLCB2YWwzMik7CisJfQorfQorCitzdGF0aWMgdm9pZCBhbWQ4MTExX3BjaV9icmlkZ2VfY2hlY2soc3RydWN0IGVkYWNfcGNpX2N0bF9pbmZvICplZGFjX2RldikKK3sKKwlzdHJ1Y3QgYW1kODExMV9wY2lfaW5mbyAqcGNpX2luZm8gPSBlZGFjX2Rldi0+cHZ0X2luZm87CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHBjaV9pbmZvLT5kZXY7CisJdTMyIHZhbDMyOworCisJLyogQ2hlY2sgb3V0IFBDSSBCcmlkZ2UgU3RhdHVzIGFuZCBDb21tYW5kIFJlZ2lzdGVyICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19QQ0lfU1RTQ01ELCAmdmFsMzIpOworCWlmICh2YWwzMiAmIFBDSV9TVFNDTURfQ0xFQVJfTUFTSykgeworCQlwcmludGsoS0VSTl9JTkZPICJFcnJvcihzKSBpbiBQQ0kgYnJpZGdlIHN0YXR1cyBhbmQgY29tbWFuZCIKKwkJCSJyZWdpc3RlciBvbiBkZXZpY2UgJXNcbiIsIHBjaV9pbmZvLT5jdGxfbmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gIlNTRTogJWQsIFJNQTogJWQsIFJUQTogJWRcbiIsCisJCQkodmFsMzIgJiBQQ0lfU1RTQ01EX1NTRSkgIT0gMCwKKwkJCSh2YWwzMiAmIFBDSV9TVFNDTURfUk1BKSAhPSAwLAorCQkJKHZhbDMyICYgUENJX1NUU0NNRF9SVEEpICE9IDApOworCisJCXZhbDMyIHw9IFBDSV9TVFNDTURfQ0xFQVJfTUFTSzsKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfUENJX1NUU0NNRCwgdmFsMzIpOworCisJCWVkYWNfcGNpX2hhbmRsZV9ucGUoZWRhY19kZXYsIGVkYWNfZGV2LT5jdGxfbmFtZSk7CisJfQorCisJLyogQ2hlY2sgb3V0IEh5cGVyVHJhbnNwb3J0IExpbmsgQ29udHJvbCBSZWdpc3RlciAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfSFRfTElOSywgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBIVF9MSU5LX0xLRkFJTCkgeworCQlwcmludGsoS0VSTl9JTkZPICJFcnJvcihzKSBpbiBoeXBlcnRyYW5zcG9ydCBsaW5rIGNvbnRyb2wiCisJCQkicmVnaXN0ZXIgb24gZGV2aWNlICVzXG4iLCBwY2lfaW5mby0+Y3RsX25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICJMS0ZBSUw6ICVkXG4iLAorCQkJKHZhbDMyICYgSFRfTElOS19MS0ZBSUwpICE9IDApOworCisJCXZhbDMyIHw9IEhUX0xJTktfTEtGQUlMOworCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19IVF9MSU5LLCB2YWwzMik7CisKKwkJZWRhY19wY2lfaGFuZGxlX25wZShlZGFjX2RldiwgZWRhY19kZXYtPmN0bF9uYW1lKTsKKwl9CisKKwkvKiBDaGVjayBvdXQgUENJIEludGVycnVwdCBhbmQgQnJpZGdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX1BDSV9JTlRCUkdfQ1RSTCwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBQQ0lfSU5UQlJHX0NUUkxfRFRTVEFUKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkVycm9yKHMpIGluIFBDSSBpbnRlcnJ1cHQgYW5kIGJyaWRnZSBjb250cm9sIgorCQkJInJlZ2lzdGVyIG9uIGRldmljZSAlc1xuIiwgcGNpX2luZm8tPmN0bF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRFRTVEFUOiAlZFxuIiwKKwkJCSh2YWwzMiAmIFBDSV9JTlRCUkdfQ1RSTF9EVFNUQVQpICE9IDApOworCisJCXZhbDMyIHw9IFBDSV9JTlRCUkdfQ1RSTF9EVFNUQVQ7CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1BDSV9JTlRCUkdfQ1RSTCwgdmFsMzIpOworCisJCWVkYWNfcGNpX2hhbmRsZV9ucGUoZWRhY19kZXYsIGVkYWNfZGV2LT5jdGxfbmFtZSk7CisJfQorCisJLyogQ2hlY2sgb3V0IFBDSSBCcmlkZ2UgTWVtb3J5IEJhc2UtTGltaXQgUmVnaXN0ZXIgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX01FTV9MSU0sICZ2YWwzMik7CisJaWYgKHZhbDMyICYgTUVNX0xJTUlUX0NMRUFSX01BU0spIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIkVycm9yKHMpIGluIG1lbSBsaW1pdCByZWdpc3RlciBvbiAlcyBkZXZpY2VcbiIsCisJCQlwY2lfaW5mby0+Y3RsX25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICJEUEU6ICVkLCBSU0U6ICVkLCBSTUE6ICVkXG4iCisJCQkiUlRBOiAlZCwgU1RBOiAlZCwgTURQRTogJWRcbiIsCisJCQkodmFsMzIgJiBNRU1fTElNSVRfRFBFKSAgIT0gMCwKKwkJCSh2YWwzMiAmIE1FTV9MSU1JVF9SU0UpICAhPSAwLAorCQkJKHZhbDMyICYgTUVNX0xJTUlUX1JNQSkgICE9IDAsCisJCQkodmFsMzIgJiBNRU1fTElNSVRfUlRBKSAgIT0gMCwKKwkJCSh2YWwzMiAmIE1FTV9MSU1JVF9TVEEpICAhPSAwLAorCQkJKHZhbDMyICYgTUVNX0xJTUlUX01EUEUpICE9IDApOworCisJCXZhbDMyIHw9IE1FTV9MSU1JVF9DTEVBUl9NQVNLOworCQllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19NRU1fTElNLCB2YWwzMik7CisKKwkJZWRhY19wY2lfaGFuZGxlX25wZShlZGFjX2RldiwgZWRhY19kZXYtPmN0bF9uYW1lKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKmxlZ2FjeV9pb19yZXM7CitzdGF0aWMgaW50IGF0X2NvbXBhdF9yZWdfYnJva2VuOworI2RlZmluZSBMRUdBQ1lfTlJfUE9SVFMJMQorCisvKiBkZXZpY2Utc3BlY2lmaWMgbWV0aG9kcyBmb3IgYW1kODExMSBMUEMgQnJpZGdlIGRldmljZSAqLworc3RhdGljIHZvaWQgYW1kODExMV9scGNfYnJpZGdlX2luaXQoc3RydWN0IGFtZDgxMTFfZGV2X2luZm8gKmRldl9pbmZvKQoreworCXU4IHZhbDg7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IGRldl9pbmZvLT5kZXY7CisKKwkvKiBGaXJzdCBjbGVhciBSRUdfQVRfQ09NUEFUW1NFUlIsIElPQ0hLXSBpZiBuZWNlc3NhcnkgKi8KKwlsZWdhY3lfaW9fcmVzID0gcmVxdWVzdF9yZWdpb24oUkVHX0FUX0NPTVBBVCwgTEVHQUNZX05SX1BPUlRTLAorCQkJCQlBTUQ4MTExX0VEQUNfTU9EX1NUUik7CisJaWYgKCFsZWdhY3lfaW9fcmVzKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogZmFpbGVkIHRvIHJlcXVlc3QgbGVnYWN5IEkvTyByZWdpb24gIgorCQkJInN0YXJ0ICVkLCBsZW4gJWRcbiIsIF9fZnVuY19fLAorCQkJUkVHX0FUX0NPTVBBVCwgTEVHQUNZX05SX1BPUlRTKTsKKwllbHNlIHsKKwkJdmFsOCA9IF9fZG9faW5iKFJFR19BVF9DT01QQVQpOworCQlpZiAodmFsOCA9PSAweGZmKSB7IC8qIGJ1Z2d5IHBvcnQgKi8KKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwb3J0ICVkIGlzIGJ1Z2d5LCBub3Qgc3VwcG9ydGVkIgorCQkJCSIgYnkgaGFyZHdhcmU/XG4iLCBfX2Z1bmNfXywgUkVHX0FUX0NPTVBBVCk7CisJCQlhdF9jb21wYXRfcmVnX2Jyb2tlbiA9IDE7CisJCQlyZWxlYXNlX3JlZ2lvbihSRUdfQVRfQ09NUEFULCBMRUdBQ1lfTlJfUE9SVFMpOworCQkJbGVnYWN5X2lvX3JlcyA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQl1OCBvdXQ4ID0gMDsKKwkJCWlmICh2YWw4ICYgQVRfQ09NUEFUX1NFUlIpCisJCQkJb3V0OCA9IEFUX0NPTVBBVF9DTFJTRVJSOworCQkJaWYgKHZhbDggJiBBVF9DT01QQVRfSU9DSEspCisJCQkJb3V0OCB8PSBBVF9DT01QQVRfQ0xSSU9DSEs7CisJCQlpZiAob3V0OCA+IDApCisJCQkJX19kb19vdXRiKG91dDgsIFJFR19BVF9DT01QQVQpOworCQl9CisJfQorCisJLyogU2Vjb25kIGNsZWFyIGVycm9yIGZsYWdzIG9uIExQQyBicmlkZ2UgKi8KKwllZGFjX3BjaV9yZWFkX2J5dGUoZGV2LCBSRUdfSU9fQ1RSTF8xLCAmdmFsOCk7CisJaWYgKHZhbDggJiBJT19DVFJMXzFfQ0xFQVJfTUFTSykKKwkJZWRhY19wY2lfd3JpdGVfYnl0ZShkZXYsIFJFR19JT19DVFJMXzEsIHZhbDgpOworfQorCitzdGF0aWMgdm9pZCBhbWQ4MTExX2xwY19icmlkZ2VfZXhpdChzdHJ1Y3QgYW1kODExMV9kZXZfaW5mbyAqZGV2X2luZm8pCit7CisJaWYgKGxlZ2FjeV9pb19yZXMpCisJCXJlbGVhc2VfcmVnaW9uKFJFR19BVF9DT01QQVQsIExFR0FDWV9OUl9QT1JUUyk7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMTFfbHBjX2JyaWRnZV9jaGVjayhzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkYWNfZGV2KQoreworCXN0cnVjdCBhbWQ4MTExX2Rldl9pbmZvICpkZXZfaW5mbyA9IGVkYWNfZGV2LT5wdnRfaW5mbzsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGV2X2luZm8tPmRldjsKKwl1OCB2YWw4OworCisJZWRhY19wY2lfcmVhZF9ieXRlKGRldiwgUkVHX0lPX0NUUkxfMSwgJnZhbDgpOworCWlmICh2YWw4ICYgSU9fQ1RSTF8xX0NMRUFSX01BU0spIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkJIkVycm9yKHMpIGluIElPIGNvbnRyb2wgcmVnaXN0ZXIgb24gJXMgZGV2aWNlXG4iLAorCQkJZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTFBDIEVSUjogJWQsIFBXMkxQQzogJWRcbiIsCisJCQkodmFsOCAmIElPX0NUUkxfMV9MUENfRVJSKSAhPSAwLAorCQkJKHZhbDggJiBJT19DVFJMXzFfUFcyTFBDKSAhPSAwKTsKKworCQl2YWw4IHw9IElPX0NUUkxfMV9DTEVBUl9NQVNLOworCQllZGFjX3BjaV93cml0ZV9ieXRlKGRldiwgUkVHX0lPX0NUUkxfMSwgdmFsOCk7CisKKwkJZWRhY19kZXZpY2VfaGFuZGxlX3VlKGVkYWNfZGV2LCAwLCAwLCBlZGFjX2Rldi0+Y3RsX25hbWUpOworCX0KKworCWlmIChhdF9jb21wYXRfcmVnX2Jyb2tlbiA9PSAwKSB7CisJCXU4IG91dDggPSAwOworCQl2YWw4ID0gX19kb19pbmIoUkVHX0FUX0NPTVBBVCk7CisJCWlmICh2YWw4ICYgQVRfQ09NUEFUX1NFUlIpCisJCQlvdXQ4ID0gQVRfQ09NUEFUX0NMUlNFUlI7CisJCWlmICh2YWw4ICYgQVRfQ09NUEFUX0lPQ0hLKQorCQkJb3V0OCB8PSBBVF9DT01QQVRfQ0xSSU9DSEs7CisJCWlmIChvdXQ4ID4gMCkgeworCQkJX19kb19vdXRiKG91dDgsIFJFR19BVF9DT01QQVQpOworCQkJZWRhY19kZXZpY2VfaGFuZGxlX3VlKGVkYWNfZGV2LCAwLCAwLAorCQkJCQkJZWRhY19kZXYtPmN0bF9uYW1lKTsKKwkJfQorCX0KK30KKworLyogR2VuZXJhbCBkZXZpY2VzIHJlcHJlc2VudGVkIGJ5IGVkYWNfZGV2aWNlX2N0bF9pbmZvICovCitzdGF0aWMgc3RydWN0IGFtZDgxMTFfZGV2X2luZm8gYW1kODExMV9kZXZpY2VzW10gPSB7CisJW0xQQ19CUklER0VdID0geworCQkuZXJyX2RldiA9IFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfTFBDLAorCQkuY3RsX25hbWUgPSAibHBjIiwKKwkJLmluaXQgPSBhbWQ4MTExX2xwY19icmlkZ2VfaW5pdCwKKwkJLmV4aXQgPSBhbWQ4MTExX2xwY19icmlkZ2VfZXhpdCwKKwkJLmNoZWNrID0gYW1kODExMV9scGNfYnJpZGdlX2NoZWNrLAorCX0sCisJezB9LAorfTsKKworLyogUENJIGNvbnRyb2xsZXJzIHJlcHJlc2VudGVkIGJ5IGVkYWNfcGNpX2N0bF9pbmZvICovCitzdGF0aWMgc3RydWN0IGFtZDgxMTFfcGNpX2luZm8gYW1kODExMV9wY2lzW10gPSB7CisJW1BDSV9CUklER0VdID0geworCQkuZXJyX2RldiA9IFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfUENJLAorCQkuY3RsX25hbWUgPSAiQU1EODExMV9QQ0lfQ29udHJvbGxlciIsCisJCS5pbml0ID0gYW1kODExMV9wY2lfYnJpZGdlX2luaXQsCisJCS5leGl0ID0gYW1kODExMV9wY2lfYnJpZGdlX2V4aXQsCisJCS5jaGVjayA9IGFtZDgxMTFfcGNpX2JyaWRnZV9jaGVjaywKKwl9LAorCXswfSwKK307CisKK3N0YXRpYyBpbnQgYW1kODExMV9kZXZfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGFtZDgxMTFfZGV2X2luZm8gKmRldl9pbmZvID0gJmFtZDgxMTFfZGV2aWNlc1tpZC0+ZHJpdmVyX2RhdGFdOworCisJZGV2X2luZm8tPmRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1ELAorCQkJCQlkZXZfaW5mby0+ZXJyX2RldiwgTlVMTCk7CisKKwlpZiAoIWRldl9pbmZvLT5kZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFREFDIGRldmljZSBub3QgZm91bmQ6IgorCQkJInZlbmRvciAleCwgZGV2aWNlICV4LCBuYW1lICVzXG4iLAorCQkJUENJX1ZFTkRPUl9JRF9BTUQsIGRldl9pbmZvLT5lcnJfZGV2LAorCQkJZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldl9pbmZvLT5kZXYpKSB7CisJCXBjaV9kZXZfcHV0KGRldl9pbmZvLT5kZXYpOworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBlbmFibGU6IgorCQkJInZlbmRvciAleCwgZGV2aWNlICV4LCBuYW1lICVzXG4iLAorCQkJUENJX1ZFTkRPUl9JRF9BTUQsIGRldl9pbmZvLT5lcnJfZGV2LAorCQkJZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyoKKwkgKiB3ZSBkbyBub3QgYWxsb2NhdGUgZXh0cmEgcHJpdmF0ZSBzdHJ1Y3R1cmUgZm9yCisJICogZWRhY19kZXZpY2VfY3RsX2luZm8sIGJ1dCBtYWtlIHVzZSBvZiBleGlzdGluZworCSAqIG9uZSBpbnN0ZWFkLgorCSovCisJZGV2X2luZm8tPmVkYWNfaWR4ID0gZWRhY19kZXZfaWR4Kys7CisJZGV2X2luZm8tPmVkYWNfZGV2ID0KKwkJZWRhY19kZXZpY2VfYWxsb2NfY3RsX2luZm8oMCwgZGV2X2luZm8tPmN0bF9uYW1lLCAxLAorCQkJCQkgICBOVUxMLCAwLCAwLAorCQkJCQkgICBOVUxMLCAwLCBkZXZfaW5mby0+ZWRhY19pZHgpOworCWlmICghZGV2X2luZm8tPmVkYWNfZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9pbmZvLT5lZGFjX2Rldi0+cHZ0X2luZm8gPSBkZXZfaW5mbzsKKwlkZXZfaW5mby0+ZWRhY19kZXYtPmRldiA9ICZkZXZfaW5mby0+ZGV2LT5kZXY7CisJZGV2X2luZm8tPmVkYWNfZGV2LT5tb2RfbmFtZSA9IEFNRDgxMTFfRURBQ19NT0RfU1RSOworCWRldl9pbmZvLT5lZGFjX2Rldi0+Y3RsX25hbWUgPSBkZXZfaW5mby0+Y3RsX25hbWU7CisJZGV2X2luZm8tPmVkYWNfZGV2LT5kZXZfbmFtZSA9IGRldl9pbmZvLT5kZXYtPmRldi5idXNfaWQ7CisKKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkKKwkJZGV2X2luZm8tPmVkYWNfZGV2LT5lZGFjX2NoZWNrID0gZGV2X2luZm8tPmNoZWNrOworCisJaWYgKGRldl9pbmZvLT5pbml0KQorCQlkZXZfaW5mby0+aW5pdChkZXZfaW5mbyk7CisKKwlpZiAoZWRhY19kZXZpY2VfYWRkX2RldmljZShkZXZfaW5mby0+ZWRhY19kZXYpID4gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBhZGQgZWRhY19kZXYgZm9yICVzXG4iLAorCQkJZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJZWRhY19kZXZpY2VfZnJlZV9jdGxfaW5mbyhkZXZfaW5mby0+ZWRhY19kZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJhZGRlZCBvbmUgZWRhY19kZXYgb24gQU1EODExMSAiCisJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgbmFtZSAlc1xuIiwKKwkJUENJX1ZFTkRPUl9JRF9BTUQsIGRldl9pbmZvLT5lcnJfZGV2LAorCQlkZXZfaW5mby0+Y3RsX25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMTFfZGV2X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBhbWQ4MTExX2Rldl9pbmZvICpkZXZfaW5mbzsKKworCWZvciAoZGV2X2luZm8gPSBhbWQ4MTExX2RldmljZXM7IGRldl9pbmZvLT5lcnJfZGV2OyBkZXZfaW5mbysrKQorCQlpZiAoZGV2X2luZm8tPmRldi0+ZGV2aWNlID09IGRldi0+ZGV2aWNlKQorCQkJYnJlYWs7CisKKwlpZiAoIWRldl9pbmZvLT5lcnJfZGV2KQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybjsKKworCWlmIChkZXZfaW5mby0+ZWRhY19kZXYpIHsKKwkJZWRhY19kZXZpY2VfZGVsX2RldmljZShkZXZfaW5mby0+ZWRhY19kZXYtPmRldik7CisJCWVkYWNfZGV2aWNlX2ZyZWVfY3RsX2luZm8oZGV2X2luZm8tPmVkYWNfZGV2KTsKKwl9CisKKwlpZiAoZGV2X2luZm8tPmV4aXQpCisJCWRldl9pbmZvLT5leGl0KGRldl9pbmZvKTsKKworCXBjaV9kZXZfcHV0KGRldl9pbmZvLT5kZXYpOworfQorCitzdGF0aWMgaW50IGFtZDgxMTFfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBhbWQ4MTExX3BjaV9pbmZvICpwY2lfaW5mbyA9ICZhbWQ4MTExX3BjaXNbaWQtPmRyaXZlcl9kYXRhXTsKKworCXBjaV9pbmZvLT5kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwKKwkJCQkJcGNpX2luZm8tPmVycl9kZXYsIE5VTEwpOworCisJaWYgKCFwY2lfaW5mby0+ZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRURBQyBkZXZpY2Ugbm90IGZvdW5kOiIKKwkJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgbmFtZSAlc1xuIiwKKwkJCVBDSV9WRU5ET1JfSURfQU1ELCBwY2lfaW5mby0+ZXJyX2RldiwKKwkJCXBjaV9pbmZvLT5jdGxfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfaW5mby0+ZGV2KSkgeworCQlwY2lfZGV2X3B1dChwY2lfaW5mby0+ZGV2KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZW5hYmxlOiIKKwkJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgbmFtZSAlc1xuIiwKKwkJCVBDSV9WRU5ET1JfSURfQU1ELCBwY2lfaW5mby0+ZXJyX2RldiwKKwkJCXBjaV9pbmZvLT5jdGxfbmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qCisJICogd2UgZG8gbm90IGFsbG9jYXRlIGV4dHJhIHByaXZhdGUgc3RydWN0dXJlIGZvcgorCSAqIGVkYWNfcGNpX2N0bF9pbmZvLCBidXQgbWFrZSB1c2Ugb2YgZXhpc3RpbmcKKwkgKiBvbmUgaW5zdGVhZC4KKwkqLworCXBjaV9pbmZvLT5lZGFjX2lkeCA9IGVkYWNfcGNpX2FsbG9jX2luZGV4KCk7CisJcGNpX2luZm8tPmVkYWNfZGV2ID0gZWRhY19wY2lfYWxsb2NfY3RsX2luZm8oMCwgcGNpX2luZm8tPmN0bF9uYW1lKTsKKwlpZiAoIXBjaV9pbmZvLT5lZGFjX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwY2lfaW5mby0+ZWRhY19kZXYtPnB2dF9pbmZvID0gcGNpX2luZm87CisJcGNpX2luZm8tPmVkYWNfZGV2LT5kZXYgPSAmcGNpX2luZm8tPmRldi0+ZGV2OworCXBjaV9pbmZvLT5lZGFjX2Rldi0+bW9kX25hbWUgPSBBTUQ4MTExX0VEQUNfTU9EX1NUUjsKKwlwY2lfaW5mby0+ZWRhY19kZXYtPmN0bF9uYW1lID0gcGNpX2luZm8tPmN0bF9uYW1lOworCXBjaV9pbmZvLT5lZGFjX2Rldi0+ZGV2X25hbWUgPSBwY2lfaW5mby0+ZGV2LT5kZXYuYnVzX2lkOworCisJaWYgKGVkYWNfb3Bfc3RhdGUgPT0gRURBQ19PUFNUQVRFX1BPTEwpCisJCXBjaV9pbmZvLT5lZGFjX2Rldi0+ZWRhY19jaGVjayA9IHBjaV9pbmZvLT5jaGVjazsKKworCWlmIChwY2lfaW5mby0+aW5pdCkKKwkJcGNpX2luZm8tPmluaXQocGNpX2luZm8pOworCisJaWYgKGVkYWNfcGNpX2FkZF9kZXZpY2UocGNpX2luZm8tPmVkYWNfZGV2LCBwY2lfaW5mby0+ZWRhY19pZHgpID4gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBhZGQgZWRhY19wY2kgZm9yICVzXG4iLAorCQkJcGNpX2luZm8tPmN0bF9uYW1lKTsKKwkJZWRhY19wY2lfZnJlZV9jdGxfaW5mbyhwY2lfaW5mby0+ZWRhY19kZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJhZGRlZCBvbmUgZWRhY19wY2kgb24gQU1EODExMSAiCisJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgbmFtZSAlc1xuIiwKKwkJUENJX1ZFTkRPUl9JRF9BTUQsIHBjaV9pbmZvLT5lcnJfZGV2LAorCQlwY2lfaW5mby0+Y3RsX25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMTFfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBhbWQ4MTExX3BjaV9pbmZvICpwY2lfaW5mbzsKKworCWZvciAocGNpX2luZm8gPSBhbWQ4MTExX3BjaXM7IHBjaV9pbmZvLT5lcnJfZGV2OyBwY2lfaW5mbysrKQorCQlpZiAocGNpX2luZm8tPmRldi0+ZGV2aWNlID09IGRldi0+ZGV2aWNlKQorCQkJYnJlYWs7CisKKwlpZiAoIXBjaV9pbmZvLT5lcnJfZGV2KQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybjsKKworCWlmIChwY2lfaW5mby0+ZWRhY19kZXYpIHsKKwkJZWRhY19wY2lfZGVsX2RldmljZShwY2lfaW5mby0+ZWRhY19kZXYtPmRldik7CisJCWVkYWNfcGNpX2ZyZWVfY3RsX2luZm8ocGNpX2luZm8tPmVkYWNfZGV2KTsKKwl9CisKKwlpZiAocGNpX2luZm8tPmV4aXQpCisJCXBjaV9pbmZvLT5leGl0KHBjaV9pbmZvKTsKKworCXBjaV9kZXZfcHV0KHBjaV9pbmZvLT5kZXYpOworfQorCisvKiBQQ0kgRGV2aWNlIElEIHRhbGJlIGZvciBnZW5lcmFsIEVEQUMgZGV2aWNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kODExMV9lZGFjX2Rldl90YmxbXSA9IHsKKwl7CisJUENJX1ZFTkRfREVWKEFNRCwgODExMV9MUEMpLAorCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCS5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCS5jbGFzcyA9IDAsCisJLmNsYXNzX21hc2sgPSAwLAorCS5kcml2ZXJfZGF0YSA9IExQQ19CUklER0UsCisJfSwKKwl7CisJMCwKKwl9CQkJLyogdGFibGUgaXMgTlVMTC10ZXJtaW5hdGVkICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFtZDgxMTFfZWRhY19kZXZfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFtZDgxMTFfZWRhY19kZXZfZHJpdmVyID0geworCS5uYW1lID0gIkFNRDgxMTFfRURBQ19ERVYiLAorCS5wcm9iZSA9IGFtZDgxMTFfZGV2X3Byb2JlLAorCS5yZW1vdmUgPSBhbWQ4MTExX2Rldl9yZW1vdmUsCisJLmlkX3RhYmxlID0gYW1kODExMV9lZGFjX2Rldl90YmwsCit9OworCisvKiBQQ0kgRGV2aWNlIElEIHRhYmxlIGZvciBFREFDIFBDSSBjb250cm9sbGVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kODExMV9lZGFjX3BjaV90YmxbXSA9IHsKKwl7CisJUENJX1ZFTkRfREVWKEFNRCwgODExMV9QQ0kpLAorCS5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCS5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAorCS5jbGFzcyA9IDAsCisJLmNsYXNzX21hc2sgPSAwLAorCS5kcml2ZXJfZGF0YSA9IFBDSV9CUklER0UsCisJfSwKKwl7CisJMCwKKwl9CQkJLyogdGFibGUgaXMgTlVMTC10ZXJtaW5hdGVkICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFtZDgxMTFfZWRhY19wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFtZDgxMTFfZWRhY19wY2lfZHJpdmVyID0geworCS5uYW1lID0gIkFNRDgxMTFfRURBQ19QQ0kiLAorCS5wcm9iZSA9IGFtZDgxMTFfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBhbWQ4MTExX3BjaV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYW1kODExMV9lZGFjX3BjaV90YmwsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbWQ4MTExX2VkYWNfaW5pdCh2b2lkKQoreworCWludCB2YWw7CisKKwlwcmludGsoS0VSTl9JTkZPICJBTUQ4MTExIEVEQUMgZHJpdmVyICIJQU1EODExMV9FREFDX1JFVklTSU9OICJcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlx0KGMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuXG4iKTsKKworCS8qIE9ubHkgUE9MTCBtb2RlIHN1cHBvcnRlZCBzbyBmYXIgKi8KKwllZGFjX29wX3N0YXRlID0gRURBQ19PUFNUQVRFX1BPTEw7CisKKwl2YWwgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbWQ4MTExX2VkYWNfZGV2X2RyaXZlcik7CisJdmFsIHw9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFtZDgxMTFfZWRhY19wY2lfZHJpdmVyKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbWQ4MTExX2VkYWNfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kODExMV9lZGFjX3BjaV9kcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYW1kODExMV9lZGFjX2Rldl9kcml2ZXIpOworfQorCisKK21vZHVsZV9pbml0KGFtZDgxMTFfZWRhY19pbml0KTsKK21vZHVsZV9leGl0KGFtZDgxMTFfZWRhY19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQ2FvIFFpbmd0YW8gPHFpbmd0YW8uY2FvQHdpbmRyaXZlci5jb20+XG4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQU1EODExMSBIeXBlclRyYW5zcG9ydCBJL08gSHViIEVEQUMga2VybmVsIG1vZHVsZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDgxMTFfZWRhYy5oIGIvZHJpdmVycy9lZGFjL2FtZDgxMTFfZWRhYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1Nzk0MzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2VkYWMvYW1kODExMV9lZGFjLmgKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBhbWQ4MTExX2VkYWMuaCwgRURBQyBkZWZzIGZvciBBTUQ4MTExIGh5cGVydHJhbnNwb3J0IGNoaXAKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICogQXV0aG9yczoJQ2FvIFFpbmd0YW8gPHFpbmd0YW8uY2FvQHdpbmRyaXZlci5jb20+CisgKiAJCUJlbmphbWluIFdhbHNoIDxiZW5qYW1pbi53YWxzaEB3aW5kcml2ZXIuY29tPgorICogCQlIdSBZb25ncWkgPHlvbmdxaS5odUB3aW5kcml2ZXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaWZuZGVmIF9BTUQ4MTExX0VEQUNfSF8KKyNkZWZpbmUgX0FNRDgxMTFfRURBQ19IXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglQQ0kgQnJpZGdlIFN0YXR1cyBhbmQgQ29tbWFuZCBSZWdpc3RlciwgRGV2QToweDA0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfUENJX1NUU0NNRAkweDA0CitlbnVtIHBjaV9zdHNjbWRfYml0cyB7CisJUENJX1NUU0NNRF9TU0UJCT0gQklUKDMwKSwKKwlQQ0lfU1RTQ01EX1JNQQkJPSBCSVQoMjkpLAorCVBDSV9TVFNDTURfUlRBCQk9IEJJVCgyOCksCisJUENJX1NUU0NNRF9TRVJSRU4JPSBCSVQoOCksCisJUENJX1NUU0NNRF9DTEVBUl9NQVNLCT0gKFBDSV9TVFNDTURfU1NFIHwKKwkJCQkgICBQQ0lfU1RTQ01EX1JNQSB8CisJCQkJICAgUENJX1NUU0NNRF9SVEEpCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglQQ0kgQnJpZGdlIE1lbW9yeSBCYXNlLUxpbWl0IFJlZ2lzdGVyLCBEZXZBOjB4MWMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJFR19NRU1fTElNICAgICAweDFjCitlbnVtIG1lbV9saW1pdF9iaXRzIHsKKwlNRU1fTElNSVRfRFBFICAgPSBCSVQoMzEpLAorCU1FTV9MSU1JVF9SU0UgICA9IEJJVCgzMCksCisJTUVNX0xJTUlUX1JNQSAgID0gQklUKDI5KSwKKwlNRU1fTElNSVRfUlRBICAgPSBCSVQoMjgpLAorCU1FTV9MSU1JVF9TVEEgICA9IEJJVCgyNyksCisJTUVNX0xJTUlUX01EUEUgID0gQklUKDI0KSwKKwlNRU1fTElNSVRfQ0xFQVJfTUFTSyAgPSAoTUVNX0xJTUlUX0RQRSB8CisJCQkJIE1FTV9MSU1JVF9SU0UgfAorCQkJCSBNRU1fTElNSVRfUk1BIHwKKwkJCQkgTUVNX0xJTUlUX1JUQSB8CisJCQkJIE1FTV9MSU1JVF9TVEEgfAorCQkJCSBNRU1fTElNSVRfTURQRSkKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCUh5cGVyVHJhbnNwb3J0IExpbmsgQ29udHJvbCBSZWdpc3RlciwgRGV2QToweGM0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfSFRfTElOSwkweGM0CitlbnVtIGh0X2xpbmtfYml0cyB7CisJSFRfTElOS19MS0ZBSUwJPSBCSVQoNCksCisJSFRfTElOS19DUkNGRU4JPSBCSVQoMSksCisJSFRfTElOS19DTEVBUl9NQVNLID0gKEhUX0xJTktfTEtGQUlMKQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJUENJIEJyaWRnZSBJbnRlcnJ1cHQgYW5kIEJyaWRnZSBDb250cm9sLCBEZXZBOjB4M2MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJFR19QQ0lfSU5UQlJHX0NUUkwJMHgzYworZW51bSBwY2lfaW50YnJnX2N0cmxfYml0cyB7CisJUENJX0lOVEJSR19DVFJMX0RUU0VSUkVOCT0gQklUKDI3KSwKKwlQQ0lfSU5UQlJHX0NUUkxfRFRTVEFUCQk9IEJJVCgyNiksCisJUENJX0lOVEJSR19DVFJMX01BUlNQCQk9IEJJVCgyMSksCisJUENJX0lOVEJSR19DVFJMX1NFUlJFTgkJPSBCSVQoMTcpLAorCVBDSV9JTlRCUkdfQ1RSTF9QRVJFTgkJPSBCSVQoMTYpLAorCVBDSV9JTlRCUkdfQ1RSTF9DTEVBUl9NQVNLCT0gKFBDSV9JTlRCUkdfQ1RSTF9EVFNUQVQpLAorCVBDSV9JTlRCUkdfQ1RSTF9QT0xMX01BU0sJPSAoUENJX0lOVEJSR19DVFJMX0RUU0VSUkVOIHwKKwkJCQkJICAgUENJX0lOVEJSR19DVFJMX01BUlNQIHwKKwkJCQkJICAgUENJX0lOVEJSR19DVFJMX1NFUlJFTikKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQlJL08gQ29udHJvbCAxIFJlZ2lzdGVyLCBEZXZCOjB4NDAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJFR19JT19DVFJMXzEgMHg0MAorZW51bSBpb19jdHJsXzFfYml0cyB7CisJSU9fQ1RSTF8xX05NSU9ORVJSCT0gQklUKDcpLAorCUlPX0NUUkxfMV9MUENfRVJSCT0gQklUKDYpLAorCUlPX0NUUkxfMV9QVzJMUEMJPSBCSVQoMSksCisJSU9fQ1RSTF8xX0NMRUFSX01BU0sJPSAoSU9fQ1RSTF8xX0xQQ19FUlIgfCBJT19DVFJMXzFfUFcyTFBDKQorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJCUxlZ2FjeSBJL08gU3BhY2UgUmVnaXN0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfQVRfQ09NUEFUIDB4NjEKK2VudW0gYXRfY29tcGF0X2JpdHMgeworCUFUX0NPTVBBVF9TRVJSCQk9IEJJVCg3KSwKKwlBVF9DT01QQVRfSU9DSEsJCT0gQklUKDYpLAorCUFUX0NPTVBBVF9DTFJJT0NISwk9IEJJVCgzKSwKKwlBVF9DT01QQVRfQ0xSU0VSUgk9IEJJVCgyKSwKK307CisKK3N0cnVjdCBhbWQ4MTExX2Rldl9pbmZvIHsKKwl1MTYgZXJyX2RldjsJLyogUENJIERldmljZSBJRCAqLworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJaW50IGVkYWNfaWR4OwkvKiBkZXZpY2UgaW5kZXggKi8KKwljaGFyICpjdGxfbmFtZTsKKwlzdHJ1Y3QgZWRhY19kZXZpY2VfY3RsX2luZm8gKmVkYWNfZGV2OworCXZvaWQgKCppbml0KShzdHJ1Y3QgYW1kODExMV9kZXZfaW5mbyAqZGV2X2luZm8pOworCXZvaWQgKCpleGl0KShzdHJ1Y3QgYW1kODExMV9kZXZfaW5mbyAqZGV2X2luZm8pOworCXZvaWQgKCpjaGVjaykoc3RydWN0IGVkYWNfZGV2aWNlX2N0bF9pbmZvICplZGFjX2Rldik7Cit9OworCitzdHJ1Y3QgYW1kODExMV9wY2lfaW5mbyB7CisJdTE2IGVycl9kZXY7CS8qIFBDSSBEZXZpY2UgSUQgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWludCBlZGFjX2lkeDsJLyogcGNpIGluZGV4ICovCisJY29uc3QgY2hhciAqY3RsX25hbWU7CisJc3RydWN0IGVkYWNfcGNpX2N0bF9pbmZvICplZGFjX2RldjsKKwl2b2lkICgqaW5pdCkoc3RydWN0IGFtZDgxMTFfcGNpX2luZm8gKmRldl9pbmZvKTsKKwl2b2lkICgqZXhpdCkoc3RydWN0IGFtZDgxMTFfcGNpX2luZm8gKmRldl9pbmZvKTsKKwl2b2lkICgqY2hlY2spKHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqZWRhY19kZXYpOworfTsKKworI2VuZGlmIC8qIF9BTUQ4MTExX0VEQUNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDgzYjMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL2FtZDgxMzFfZWRhYy5jCkBAIC0wLDAgKzEsMzc5IEBACisvKgorICogYW1kODEzMV9lZGFjLmMsIEFNRDgxMzEgaHlwZXJ0cmFuc3BvcnQgY2hpcCBFREFDIGtlcm5lbCBtb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisgKgorICogQXV0aG9yczoJQ2FvIFFpbmd0YW8gPHFpbmd0YW8uY2FvQHdpbmRyaXZlci5jb20+CisgKiAJCUJlbmphbWluIFdhbHNoIDxiZW5qYW1pbi53YWxzaEB3aW5kcml2ZXIuY29tPgorICogCQlIdSBZb25ncWkgPHlvbmdxaS5odUB3aW5kcml2ZXIuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZWRhYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KKworI2luY2x1ZGUgImVkYWNfY29yZS5oIgorI2luY2x1ZGUgImVkYWNfbW9kdWxlLmgiCisjaW5jbHVkZSAiYW1kODEzMV9lZGFjLmgiCisKKyNkZWZpbmUgQU1EODEzMV9FREFDX1JFVklTSU9OCSIgVmVyOiAxLjAuMCAiIF9fREFURV9fCisjZGVmaW5lIEFNRDgxMzFfRURBQ19NT0RfU1RSCSJhbWQ4MTMxX2VkYWMiCisKKy8qIFdyYXBwZXIgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KK3N0YXRpYyB2b2lkIGVkYWNfcGNpX3JlYWRfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlZywgdTMyICp2YWwzMikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcmVnLCB2YWwzMik7CisJaWYgKHJldCAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgQU1EODEzMV9FREFDX01PRF9TVFIKKwkJCSIgUENJIEFjY2VzcyBSZWFkIEVycm9yIGF0IDB4JXhcbiIsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGVkYWNfcGNpX3dyaXRlX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZWcsIHUzMiB2YWwzMikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHJlZywgdmFsMzIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJpbnRrKEtFUk5fRVJSIEFNRDgxMzFfRURBQ19NT0RfU1RSCisJCQkiIFBDSSBBY2Nlc3MgV3JpdGUgRXJyb3IgYXQgMHgleFxuIiwgcmVnKTsKK30KKworc3RhdGljIGNoYXIgKiBjb25zdCBicmlkZ2Vfc3RyW10gPSB7CisJW05PUlRIX0FdID0gIk5PUlRIIEEiLAorCVtOT1JUSF9CXSA9ICJOT1JUSCBCIiwKKwlbU09VVEhfQV0gPSAiU09VVEggQSIsCisJW1NPVVRIX0JdID0gIlNPVVRIIEIiLAorCVtOT19CUklER0VdID0gIk5PIEJSSURHRSIsCit9OworCisvKiBTdXBwb3J0IHVwIHRvIHR3byBBTUQ4MTMxIGNoaXBzZXRzIG9uIGEgcGxhdGZvcm0gKi8KK3N0YXRpYyBzdHJ1Y3QgYW1kODEzMV9kZXZfaW5mbyBhbWQ4MTMxX2RldmljZXNbXSA9IHsKKwl7CisJLmluc3QgPSBOT1JUSF9BLAorCS5kZXZmbiA9IERFVkZOX1BDSVhfQlJJREdFX05PUlRIX0EsCisJLmN0bF9uYW1lID0gIkFNRDgxMzFfUENJWF9OT1JUSF9BIiwKKwl9LAorCXsKKwkuaW5zdCA9IE5PUlRIX0IsCisJLmRldmZuID0gREVWRk5fUENJWF9CUklER0VfTk9SVEhfQiwKKwkuY3RsX25hbWUgPSAiQU1EODEzMV9QQ0lYX05PUlRIX0IiLAorCX0sCisJeworCS5pbnN0ID0gU09VVEhfQSwKKwkuZGV2Zm4gPSBERVZGTl9QQ0lYX0JSSURHRV9TT1VUSF9BLAorCS5jdGxfbmFtZSA9ICJBTUQ4MTMxX1BDSVhfU09VVEhfQSIsCisJfSwKKwl7CisJLmluc3QgPSBTT1VUSF9CLAorCS5kZXZmbiA9IERFVkZOX1BDSVhfQlJJREdFX1NPVVRIX0IsCisJLmN0bF9uYW1lID0gIkFNRDgxMzFfUENJWF9TT1VUSF9CIiwKKwl9LAorCXsuaW5zdCA9IE5PX0JSSURHRSx9LAorfTsKKworc3RhdGljIHZvaWQgYW1kODEzMV9wY2l4X2luaXQoc3RydWN0IGFtZDgxMzFfZGV2X2luZm8gKmRldl9pbmZvKQoreworCXUzMiB2YWwzMjsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGV2X2luZm8tPmRldjsKKworCS8qIEZpcnN0IGNsZWFyIGVycm9yIGRldGVjdGlvbiBmbGFncyAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBNRU1fTElNSVRfTUFTSykKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgdmFsMzIpOworCisJLyogQ2xlYXIgRGlzY2FyZCBUaW1lciBUaW1lZG91dCBmbGFnICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19JTlRfQ1RMUiwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBJTlRfQ1RMUl9EVFMpCisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0lOVF9DVExSLCB2YWwzMik7CisKKwkvKiBDbGVhciBDUkMgRXJyb3IgZmxhZyBvbiBsaW5rIHNpZGUgQSAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBMTktfQ1RSTF9DUkNFUlJfQSkKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQSwgdmFsMzIpOworCisJLyogQ2xlYXIgQ1JDIEVycm9yIGZsYWcgb24gbGluayBzaWRlIEIgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0IsICZ2YWwzMik7CisJaWYgKHZhbDMyICYgTE5LX0NUUkxfQ1JDRVJSX0IpCisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0IsIHZhbDMyKTsKKworCS8qCisJICogVGhlbiBlbmFibGUgYWxsIGVycm9yIGRldGVjdGlvbnMuCisJICoKKwkgKiBTZXR1cCBEaXNjYXJkIFRpbWVyIFN5bmMgRmxvb2QgRW5hYmxlLAorCSAqIFN5c3RlbSBFcnJvciBFbmFibGUgYW5kIFBhcml0eSBFcnJvciBFbmFibGUuCisJICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19JTlRfQ1RMUiwgJnZhbDMyKTsKKwl2YWwzMiB8PSBJTlRfQ1RMUl9QRVJSIHwgSU5UX0NUTFJfU0VSUiB8IElOVF9DVExSX0RUU0U7CisJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfSU5UX0NUTFIsIHZhbDMyKTsKKworCS8qIEVuYWJsZSBvdmVyYWxsIFNFUlIgRXJyb3IgZGV0ZWN0aW9uICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19TVFNfQ01ELCAmdmFsMzIpOworCXZhbDMyIHw9IFNUU19DTURfU0VSUkVOOworCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX1NUU19DTUQsIHZhbDMyKTsKKworCS8qIFNldHVwIENSQyBGbG9vZCBFbmFibGUgZm9yIGxpbmsgc2lkZSBBICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19MTktfQ1RSTF9BLCAmdmFsMzIpOworCXZhbDMyIHw9IExOS19DVFJMX0NSQ0ZFTjsKKwllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19MTktfQ1RSTF9BLCB2YWwzMik7CisKKwkvKiBTZXR1cCBDUkMgRmxvb2QgRW5hYmxlIGZvciBsaW5rIHNpZGUgQiAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQiwgJnZhbDMyKTsKKwl2YWwzMiB8PSBMTktfQ1RSTF9DUkNGRU47CisJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQiwgdmFsMzIpOworfQorCitzdGF0aWMgdm9pZCBhbWQ4MTMxX3BjaXhfZXhpdChzdHJ1Y3QgYW1kODEzMV9kZXZfaW5mbyAqZGV2X2luZm8pCit7CisJdTMyIHZhbDMyOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBkZXZfaW5mby0+ZGV2OworCisJLyogRGlzYWJsZSBTRVJSLCBQRVJSIGFuZCBEVFNFIEVycm9yIGRldGVjdGlvbiAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfSU5UX0NUTFIsICZ2YWwzMik7CisJdmFsMzIgJj0gfihJTlRfQ1RMUl9QRVJSIHwgSU5UX0NUTFJfU0VSUiB8IElOVF9DVExSX0RUU0UpOworCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0lOVF9DVExSLCB2YWwzMik7CisKKwkvKiBEaXNhYmxlIG92ZXJhbGwgU3lzdGVtIEVycm9yIGRldGVjdGlvbiAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfU1RTX0NNRCwgJnZhbDMyKTsKKwl2YWwzMiAmPSB+U1RTX0NNRF9TRVJSRU47CisJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfU1RTX0NNRCwgdmFsMzIpOworCisJLyogRGlzYWJsZSBDUkMgU3luYyBGbG9vZCBvbiBsaW5rIHNpZGUgQSAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQSwgJnZhbDMyKTsKKwl2YWwzMiAmPSB+TE5LX0NUUkxfQ1JDRkVOOworCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0EsIHZhbDMyKTsKKworCS8qIERpc2FibGUgQ1JDIFN5bmMgRmxvb2Qgb24gbGluayBzaWRlIEIgKi8KKwllZGFjX3BjaV9yZWFkX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0IsICZ2YWwzMik7CisJdmFsMzIgJj0gfkxOS19DVFJMX0NSQ0ZFTjsKKwllZGFjX3BjaV93cml0ZV9kd29yZChkZXYsIFJFR19MTktfQ1RSTF9CLCB2YWwzMik7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMzFfcGNpeF9jaGVjayhzdHJ1Y3QgZWRhY19wY2lfY3RsX2luZm8gKmVkYWNfZGV2KQoreworCXN0cnVjdCBhbWQ4MTMxX2Rldl9pbmZvICpkZXZfaW5mbyA9IGVkYWNfZGV2LT5wdnRfaW5mbzsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZGV2X2luZm8tPmRldjsKKwl1MzIgdmFsMzI7CisKKwkvKiBDaGVjayBQQ0ktWCBCcmlkZ2UgTWVtb3J5IEJhc2UtTGltaXQgUmVnaXN0ZXIgZm9yIGVycm9ycyAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTUVNX0xJTSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBNRU1fTElNSVRfTUFTSykgeworCQlwcmludGsoS0VSTl9JTkZPICJFcnJvcihzKSBpbiBtZW0gbGltaXQgcmVnaXN0ZXIgIgorCQkJIm9uICVzIGJyaWRnZVxuIiwgZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRFBFOiAlZCwgUlNFOiAlZCwgUk1BOiAlZFxuIgorCQkJIlJUQTogJWQsIFNUQTogJWQsIE1EUEU6ICVkXG4iLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfRFBFLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfUlNFLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfUk1BLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfUlRBLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfU1RBLAorCQkJdmFsMzIgJiBNRU1fTElNSVRfTURQRSk7CisKKwkJdmFsMzIgfD0gTUVNX0xJTUlUX01BU0s7CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX01FTV9MSU0sIHZhbDMyKTsKKworCQllZGFjX3BjaV9oYW5kbGVfbnBlKGVkYWNfZGV2LCBlZGFjX2Rldi0+Y3RsX25hbWUpOworCX0KKworCS8qIENoZWNrIGlmIERpc2NhcmQgVGltZXIgdGltZWQgb3V0ICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19JTlRfQ1RMUiwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBJTlRfQ1RMUl9EVFMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRXJyb3IocykgaW4gaW50ZXJydXB0IGFuZCBjb250cm9sIHJlZ2lzdGVyICIKKwkJCSJvbiAlcyBicmlkZ2VcbiIsIGRldl9pbmZvLT5jdGxfbmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gIkRUUzogJWRcbiIsIHZhbDMyICYgSU5UX0NUTFJfRFRTKTsKKworCQl2YWwzMiB8PSBJTlRfQ1RMUl9EVFM7CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0lOVF9DVExSLCB2YWwzMik7CisKKwkJZWRhY19wY2lfaGFuZGxlX25wZShlZGFjX2RldiwgZWRhY19kZXYtPmN0bF9uYW1lKTsKKwl9CisKKwkvKiBDaGVjayBpZiBDUkMgZXJyb3IgaGFwcGVucyBvbiBsaW5rIHNpZGUgQSAqLworCWVkYWNfcGNpX3JlYWRfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQSwgJnZhbDMyKTsKKwlpZiAodmFsMzIgJiBMTktfQ1RSTF9DUkNFUlJfQSkgeworCQlwcmludGsoS0VSTl9JTkZPICJFcnJvcihzKSBpbiBsaW5rIGNvbmYgYW5kIGNvbnRyb2wgcmVnaXN0ZXIgIgorCQkJIm9uICVzIGJyaWRnZVxuIiwgZGV2X2luZm8tPmN0bF9uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1JDRVJSOiAlZFxuIiwgdmFsMzIgJiBMTktfQ1RSTF9DUkNFUlJfQSk7CisKKwkJdmFsMzIgfD0gTE5LX0NUUkxfQ1JDRVJSX0E7CisJCWVkYWNfcGNpX3dyaXRlX2R3b3JkKGRldiwgUkVHX0xOS19DVFJMX0EsIHZhbDMyKTsKKworCQllZGFjX3BjaV9oYW5kbGVfbnBlKGVkYWNfZGV2LCBlZGFjX2Rldi0+Y3RsX25hbWUpOworCX0KKworCS8qIENoZWNrIGlmIENSQyBlcnJvciBoYXBwZW5zIG9uIGxpbmsgc2lkZSBCICovCisJZWRhY19wY2lfcmVhZF9kd29yZChkZXYsIFJFR19MTktfQ1RSTF9CLCAmdmFsMzIpOworCWlmICh2YWwzMiAmIExOS19DVFJMX0NSQ0VSUl9CKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkVycm9yKHMpIGluIGxpbmsgY29uZiBhbmQgY29udHJvbCByZWdpc3RlciAiCisJCQkib24gJXMgYnJpZGdlXG4iLCBkZXZfaW5mby0+Y3RsX25hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICJDUkNFUlI6ICVkXG4iLCB2YWwzMiAmIExOS19DVFJMX0NSQ0VSUl9CKTsKKworCQl2YWwzMiB8PSBMTktfQ1RSTF9DUkNFUlJfQjsKKwkJZWRhY19wY2lfd3JpdGVfZHdvcmQoZGV2LCBSRUdfTE5LX0NUUkxfQiwgdmFsMzIpOworCisJCWVkYWNfcGNpX2hhbmRsZV9ucGUoZWRhY19kZXYsIGVkYWNfZGV2LT5jdGxfbmFtZSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGFtZDgxMzFfaW5mbyBhbWQ4MTMxX2NoaXBzZXQgPSB7CisJLmVycl9kZXYgPSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMsCisJLmRldmljZXMgPSBhbWQ4MTMxX2RldmljZXMsCisJLmluaXQgPSBhbWQ4MTMxX3BjaXhfaW5pdCwKKwkuZXhpdCA9IGFtZDgxMzFfcGNpeF9leGl0LAorCS5jaGVjayA9IGFtZDgxMzFfcGNpeF9jaGVjaywKK307CisKKy8qCisgKiBUaGVyZSBhcmUgNCBQQ0lYIEJyaWRnZXMgb24gQVRDQS02MTAxIHRoYXQgc2hhcmUgdGhlIHNhbWUgUENJIERldmljZSBJRCwKKyAqIHNvIGFtZDgxMzFfcHJvYmUoKSB3b3VsZCBiZSBjYWxsZWQgYnkga2VybmVsIDQgdGltZXMsIHdpdGggZGlmZmVyZW50CisgKiBhZGRyZXNzIG9mIHBjaV9kZXYgZm9yIGVhY2ggb2YgdGhlbSBlYWNoIHRpbWUuCisgKi8KK3N0YXRpYyBpbnQgYW1kODEzMV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGFtZDgxMzFfZGV2X2luZm8gKmRldl9pbmZvOworCisJZm9yIChkZXZfaW5mbyA9IGFtZDgxMzFfY2hpcHNldC5kZXZpY2VzOyBkZXZfaW5mby0+aW5zdCAhPSBOT19CUklER0U7CisJCWRldl9pbmZvKyspCisJCWlmIChkZXZfaW5mby0+ZGV2Zm4gPT0gZGV2LT5kZXZmbikKKwkJCWJyZWFrOworCisJaWYgKGRldl9pbmZvLT5pbnN0ID09IE5PX0JSSURHRSkgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qCisJICogV2UgY2FuJ3QgY2FsbCBwY2lfZ2V0X2RldmljZSgpIGFzIHdlIGFyZSB1c2VkIHRvIGRvIGJlY2F1c2UKKwkgKiB0aGVyZSBhcmUgNCBvZiB0aGVtIGJ1dCBwY2lfZGV2X2dldCgpIGluc3RlYWQuCisJICovCisJZGV2X2luZm8tPmRldiA9IHBjaV9kZXZfZ2V0KGRldik7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2X2luZm8tPmRldikpIHsKKwkJcGNpX2Rldl9wdXQoZGV2X2luZm8tPmRldik7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGVuYWJsZToiCisJCQkidmVuZG9yICV4LCBkZXZpY2UgJXgsIGRldmZuICV4LCBuYW1lICVzXG4iLAorCQkJUENJX1ZFTkRPUl9JRF9BTUQsIGFtZDgxMzFfY2hpcHNldC5lcnJfZGV2LAorCQkJZGV2X2luZm8tPmRldmZuLCBkZXZfaW5mby0+Y3RsX25hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKgorCSAqIHdlIGRvIG5vdCBhbGxvY2F0ZSBleHRyYSBwcml2YXRlIHN0cnVjdHVyZSBmb3IKKwkgKiBlZGFjX3BjaV9jdGxfaW5mbywgYnV0IG1ha2UgdXNlIG9mIGV4aXN0aW5nCisJICogb25lIGluc3RlYWQuCisJICovCisJZGV2X2luZm8tPmVkYWNfaWR4ID0gZWRhY19wY2lfYWxsb2NfaW5kZXgoKTsKKwlkZXZfaW5mby0+ZWRhY19kZXYgPSBlZGFjX3BjaV9hbGxvY19jdGxfaW5mbygwLCBkZXZfaW5mby0+Y3RsX25hbWUpOworCWlmICghZGV2X2luZm8tPmVkYWNfZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldl9pbmZvLT5lZGFjX2Rldi0+cHZ0X2luZm8gPSBkZXZfaW5mbzsKKwlkZXZfaW5mby0+ZWRhY19kZXYtPmRldiA9ICZkZXZfaW5mby0+ZGV2LT5kZXY7CisJZGV2X2luZm8tPmVkYWNfZGV2LT5tb2RfbmFtZSA9IEFNRDgxMzFfRURBQ19NT0RfU1RSOworCWRldl9pbmZvLT5lZGFjX2Rldi0+Y3RsX25hbWUgPSBkZXZfaW5mby0+Y3RsX25hbWU7CisJZGV2X2luZm8tPmVkYWNfZGV2LT5kZXZfbmFtZSA9IGRldl9pbmZvLT5kZXYtPmRldi5idXNfaWQ7CisKKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfUE9MTCkKKwkJZGV2X2luZm8tPmVkYWNfZGV2LT5lZGFjX2NoZWNrID0gYW1kODEzMV9jaGlwc2V0LmNoZWNrOworCisJaWYgKGFtZDgxMzFfY2hpcHNldC5pbml0KQorCQlhbWQ4MTMxX2NoaXBzZXQuaW5pdChkZXZfaW5mbyk7CisKKwlpZiAoZWRhY19wY2lfYWRkX2RldmljZShkZXZfaW5mby0+ZWRhY19kZXYsIGRldl9pbmZvLT5lZGFjX2lkeCkgPiAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIGVkYWNfcGNpX2FkZF9kZXZpY2UoKSBmb3IgJXNcbiIsCisJCQlkZXZfaW5mby0+Y3RsX25hbWUpOworCQllZGFjX3BjaV9mcmVlX2N0bF9pbmZvKGRldl9pbmZvLT5lZGFjX2Rldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50ayhLRVJOX0lORk8gImFkZGVkIG9uZSBkZXZpY2Ugb24gQU1EODEzMSAiCisJCSJ2ZW5kb3IgJXgsIGRldmljZSAleCwgZGV2Zm4gJXgsIG5hbWUgJXNcbiIsCisJCVBDSV9WRU5ET1JfSURfQU1ELCBhbWQ4MTMxX2NoaXBzZXQuZXJyX2RldiwKKwkJZGV2X2luZm8tPmRldmZuLCBkZXZfaW5mby0+Y3RsX25hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFtZDgxMzFfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGFtZDgxMzFfZGV2X2luZm8gKmRldl9pbmZvOworCisJZm9yIChkZXZfaW5mbyA9IGFtZDgxMzFfY2hpcHNldC5kZXZpY2VzOyBkZXZfaW5mby0+aW5zdCAhPSBOT19CUklER0U7CisJCWRldl9pbmZvKyspCisJCWlmIChkZXZfaW5mby0+ZGV2Zm4gPT0gZGV2LT5kZXZmbikKKwkJCWJyZWFrOworCisJaWYgKGRldl9pbmZvLT5pbnN0ID09IE5PX0JSSURHRSkgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlyZXR1cm47CisKKwlpZiAoZGV2X2luZm8tPmVkYWNfZGV2KSB7CisJCWVkYWNfcGNpX2RlbF9kZXZpY2UoZGV2X2luZm8tPmVkYWNfZGV2LT5kZXYpOworCQllZGFjX3BjaV9mcmVlX2N0bF9pbmZvKGRldl9pbmZvLT5lZGFjX2Rldik7CisJfQorCisJaWYgKGFtZDgxMzFfY2hpcHNldC5leGl0KQorCQlhbWQ4MTMxX2NoaXBzZXQuZXhpdChkZXZfaW5mbyk7CisKKwlwY2lfZGV2X3B1dChkZXZfaW5mby0+ZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFtZDgxMzFfZWRhY19wY2lfdGJsW10gPSB7CisJeworCVBDSV9WRU5EX0RFVihBTUQsIDgxMzFfQlJJREdFKSwKKwkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwKKwkuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkuY2xhc3MgPSAwLAorCS5jbGFzc19tYXNrID0gMCwKKwkuZHJpdmVyX2RhdGEgPSAwLAorCX0sCisJeworCTAsCisJfQkJCS8qIHRhYmxlIGlzIE5VTEwtdGVybWluYXRlZCAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhbWQ4MTMxX2VkYWNfcGNpX3RibCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbWQ4MTMxX2VkYWNfZHJpdmVyID0geworCS5uYW1lID0gQU1EODEzMV9FREFDX01PRF9TVFIsCisJLnByb2JlID0gYW1kODEzMV9wcm9iZSwKKwkucmVtb3ZlID0gYW1kODEzMV9yZW1vdmUsCisJLmlkX3RhYmxlID0gYW1kODEzMV9lZGFjX3BjaV90YmwsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbWQ4MTMxX2VkYWNfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIkFNRDgxMzEgRURBQyBkcml2ZXIgIiBBTUQ4MTMxX0VEQUNfUkVWSVNJT04gIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiXHQoYykgMjAwOCBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy5cbiIpOworCisJLyogT25seSBQT0xMIG1vZGUgc3VwcG9ydGVkIHNvIGZhciAqLworCWVkYWNfb3Bfc3RhdGUgPSBFREFDX09QU1RBVEVfUE9MTDsKKworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhbWQ4MTMxX2VkYWNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFtZDgxMzFfZWRhY19leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhbWQ4MTMxX2VkYWNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYW1kODEzMV9lZGFjX2luaXQpOworbW9kdWxlX2V4aXQoYW1kODEzMV9lZGFjX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJDYW8gUWluZ3RhbyA8cWluZ3Rhby5jYW9Ad2luZHJpdmVyLmNvbT5cbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQ4MTMxIEh5cGVyVHJhbnNwb3J0IFBDSS1YIFR1bm5lbCBFREFDIGtlcm5lbCBtb2R1bGUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuaCBiL2RyaXZlcnMvZWRhYy9hbWQ4MTMxX2VkYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGUwZDFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL2FtZDgxMzFfZWRhYy5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogYW1kODEzMV9lZGFjLmgsIEVEQUMgZGVmcyBmb3IgQU1EODEzMSBoeXBlcnRyYW5zcG9ydCBjaGlwCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIEF1dGhvcnM6CUNhbyBRaW5ndGFvIDxxaW5ndGFvLmNhb0B3aW5kcml2ZXIuY29tPgorICogCQlCZW5qYW1pbiBXYWxzaCA8YmVuamFtaW4ud2Fsc2hAd2luZHJpdmVyLmNvbT4KKyAqIAkJSHUgWW9uZ3FpIDx5b25ncWkuaHVAd2luZHJpdmVyLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfQU1EODEzMV9FREFDX0hfCisjZGVmaW5lIF9BTUQ4MTMxX0VEQUNfSF8KKworI2RlZmluZSBERVZGTl9QQ0lYX0JSSURHRV9OT1JUSF9BCTgKKyNkZWZpbmUgREVWRk5fUENJWF9CUklER0VfTk9SVEhfQgkxNgorI2RlZmluZSBERVZGTl9QQ0lYX0JSSURHRV9TT1VUSF9BCTI0CisjZGVmaW5lIERFVkZOX1BDSVhfQlJJREdFX1NPVVRIX0IJMzIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoJUENJLVggQnJpZGdlIFN0YXR1cyBhbmQgQ29tbWFuZCBSZWdpc3RlciwgRGV2QToweDA0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfU1RTX0NNRAkweDA0CitlbnVtIHN0c19jbWRfYml0cyB7CisJU1RTX0NNRF9TU0UJPSBCSVQoMzApLAorCVNUU19DTURfU0VSUkVOCT0gQklUKDgpCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglQQ0ktWCBCcmlkZ2UgSW50ZXJydXB0IGFuZCBCcmlkZ2UgQ29udHJvbCBSZWdpc3RlciwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJFR19JTlRfQ1RMUgkweDNjCitlbnVtIGludF9jdGxyX2JpdHMgeworCUlOVF9DVExSX0RUU0UJPSBCSVQoMjcpLAorCUlOVF9DVExSX0RUUwk9IEJJVCgyNiksCisJSU5UX0NUTFJfU0VSUgk9IEJJVCgxNyksCisJSU5UX0NUTFJfUEVSUgk9IEJJVCgxNikKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCVBDSS1YIEJyaWRnZSBNZW1vcnkgQmFzZS1MaW1pdCBSZWdpc3RlciwgRGV2QToweDFDCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBSRUdfTUVNX0xJTQkweDFjCitlbnVtIG1lbV9saW1pdF9iaXRzIHsKKwlNRU1fTElNSVRfRFBFIAk9IEJJVCgzMSksCisJTUVNX0xJTUlUX1JTRSAJPSBCSVQoMzApLAorCU1FTV9MSU1JVF9STUEgCT0gQklUKDI5KSwKKwlNRU1fTElNSVRfUlRBIAk9IEJJVCgyOCksCisJTUVNX0xJTUlUX1NUQQk9IEJJVCgyNyksCisJTUVNX0xJTUlUX01EUEUJPSBCSVQoMjQpLAorCU1FTV9MSU1JVF9NQVNLCT0gTUVNX0xJTUlUX0RQRXxNRU1fTElNSVRfUlNFfE1FTV9MSU1JVF9STUF8CisJCQkJTUVNX0xJTUlUX1JUQXxNRU1fTElNSVRfU1RBfE1FTV9MSU1JVF9NRFBFCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglMaW5rIENvbmZpZ3VyYXRpb24gQW5kIENvbnRyb2wgUmVnaXN0ZXIsIHNpZGUgQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUkVHX0xOS19DVFJMX0EJMHhjNAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKglMaW5rIENvbmZpZ3VyYXRpb24gQW5kIENvbnRyb2wgUmVnaXN0ZXIsIHNpZGUgQgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUkVHX0xOS19DVFJMX0IgIDB4YzgKKworZW51bSBsbmtfY3RybF9iaXRzIHsKKwlMTktfQ1RSTF9DUkNFUlJfQQk9IEJJVCg5KSwKKwlMTktfQ1RSTF9DUkNFUlJfQgk9IEJJVCg4KSwKKwlMTktfQ1RSTF9DUkNGRU4JCT0gQklUKDEpCit9OworCitlbnVtIHBjaXhfYnJpZGdlX2luc3QgeworCU5PUlRIX0EgPSAwLAorCU5PUlRIX0IgPSAxLAorCVNPVVRIX0EgPSAyLAorCVNPVVRIX0IgPSAzLAorCU5PX0JSSURHRSA9IDQKK307CisKK3N0cnVjdCBhbWQ4MTMxX2Rldl9pbmZvIHsKKwlpbnQgZGV2Zm47CisJZW51bSBwY2l4X2JyaWRnZV9pbnN0IGluc3Q7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlpbnQgZWRhY19pZHg7CS8qIHBjaSBkZXZpY2UgaW5kZXggKi8KKwljaGFyICpjdGxfbmFtZTsKKwlzdHJ1Y3QgZWRhY19wY2lfY3RsX2luZm8gKmVkYWNfZGV2OworfTsKKworLyoKKyAqIEFNRDgxMzEgY2hpcHNldCBoYXMgdHdvIHBhaXJzIG9mIFBDSVggQnJpZGdlIGFuZCByZWxhdGVkIElPQVBJQworICogQ29udHJvbGVyLCBhbmQgQVRDQS02MTAxIGhhcyB0d28gQU1EODEzMSBjaGlwc2V0cywgc28gdGhlcmUgYXJlCisgKiBmb3VyIFBDSVggQnJpZGdlcyBvbiBBVENBLTYxMDEgYWx0b2dldGhlci4KKyAqCisgKiBUaGVzZSBQQ0lYIEJyaWRnZXMgc2hhcmUgdGhlIHNhbWUgUENJIERldmljZSBJRCBhbmQgYXJlIGFsbCBvZgorICogRnVuY3Rpb24gWmVybywgdGhleSBjb3VsZCBiZSBkaXNjcmltYXRlZCBieSB0aGVpciBwY2lfZGV2LT5kZXZmbi4KKyAqIFRoZXkgc2hhcmUgdGhlIHNhbWUgc2V0IG9mIGluaXQvY2hlY2svZXhpdCBtZXRob2RzLCBhbmQgdGhlaXIKKyAqIHByaXZhdGUgc3RydWN0dXJlcyBhcmUgY29sbGVjdGVkIGluIHRoZSBkZXZpY2VzW10gYXJyYXkuCisgKi8KK3N0cnVjdCBhbWQ4MTMxX2luZm8geworCXUxNiBlcnJfZGV2OwkvKiBQQ0kgRGV2aWNlIElEIGZvciBBTUQ4MTMxIEFQSUMqLworCXN0cnVjdCBhbWQ4MTMxX2Rldl9pbmZvICpkZXZpY2VzOworCXZvaWQgKCppbml0KShzdHJ1Y3QgYW1kODEzMV9kZXZfaW5mbyAqZGV2X2luZm8pOworCXZvaWQgKCpleGl0KShzdHJ1Y3QgYW1kODEzMV9kZXZfaW5mbyAqZGV2X2luZm8pOworCXZvaWQgKCpjaGVjaykoc3RydWN0IGVkYWNfcGNpX2N0bF9pbmZvICplZGFjX2Rldik7Cit9OworCisjZW5kaWYgLyogX0FNRDgxMzFfRURBQ19IXyAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmggYi9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmgKaW5kZXggNGI1NWVjNi4uMjhmMmMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfY29yZS5oCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaApAQCAtNDksNiArNDksMTAgQEAKICNkZWZpbmUgZWRhY19wcmludGsobGV2ZWwsIHByZWZpeCwgZm10LCBhcmcuLi4pIFwKIAlwcmludGsobGV2ZWwgIkVEQUMgIiBwcmVmaXggIjogIiBmbXQsICMjYXJnKQogCisjZGVmaW5lIGVkYWNfcHJpbnRrX3ZlcmJvc2UobGV2ZWwsIHByZWZpeCwgZm10LCBhcmcuLi4pIFwKKwlwcmludGsobGV2ZWwgIkVEQUMgIiBwcmVmaXggIjogIiAiaW4gJXMsIGxpbmUgYXQgJWQ6ICIgZm10LAlcCisJICAgICAgIF9fRklMRV9fLCBfX0xJTkVfXywgIyNhcmcpCisKICNkZWZpbmUgZWRhY19tY19wcmludGsobWNpLCBsZXZlbCwgZm10LCBhcmcuLi4pIFwKIAlwcmludGsobGV2ZWwgIkVEQUMgTUMlZDogIiBmbXQsIG1jaS0+bWNfaWR4LCAjI2FyZykKIApAQCAtNzEsMTEgKzc1LDIwIEBACiAjaWZkZWYgQ09ORklHX0VEQUNfREVCVUcKIGV4dGVybiBpbnQgZWRhY19kZWJ1Z19sZXZlbDsKIAorI2lmbmRlZiBDT05GSUdfRURBQ19ERUJVR19WRVJCT1NFCiAjZGVmaW5lIGVkYWNfZGVidWdfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQlpZiAobGV2ZWwgPD0gZWRhY19kZWJ1Z19sZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCQllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX0RFQlVHLCBmbXQsICMjYXJnKTsgXAotCX0gd2hpbGUoMCkKKwl9IHdoaWxlICgwKQorI2Vsc2UgIC8qIENPTkZJR19FREFDX0RFQlVHX1ZFUkJPU0UgKi8KKyNkZWZpbmUgZWRhY19kZWJ1Z19wcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChsZXZlbCA8PSBlZGFjX2RlYnVnX2xldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWVkYWNfcHJpbnRrX3ZlcmJvc2UoS0VSTl9ERUJVRywgRURBQ19ERUJVRywgZm10LCBcCisJCQkJCSAgICAjI2FyZyk7CQkJXAorCX0gd2hpbGUgKDApCisjZW5kaWYKIAogI2RlZmluZSBkZWJ1Z2YwKCAuLi4gKSBlZGFjX2RlYnVnX3ByaW50aygwLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIGRlYnVnZjEoIC4uLiApIGVkYWNfZGVidWdfcHJpbnRrKDEsIF9fVkFfQVJHU19fICkKQEAgLTgzMSw2ICs4NDQsNyBAQAogZXh0ZXJuIHZvaWQgZWRhY19wY2lfcmVzZXRfZGVsYXlfcGVyaW9kKHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqcGNpLAogCQkJCXVuc2lnbmVkIGxvbmcgdmFsdWUpOwogCitleHRlcm4gaW50IGVkYWNfcGNpX2FsbG9jX2luZGV4KHZvaWQpOwogZXh0ZXJuIGludCBlZGFjX3BjaV9hZGRfZGV2aWNlKHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqcGNpLCBpbnQgZWRhY19pZHgpOwogZXh0ZXJuIHN0cnVjdCBlZGFjX3BjaV9jdGxfaW5mbyAqZWRhY19wY2lfZGVsX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19wY2kuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaS5jCmluZGV4IDVkM2M4MDguLjViMTUwYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX3BjaS5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX3BjaS5jCkBAIC0zMCw2ICszMCw3IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoZWRhY19wY2lfY3Rsc19tdXRleCk7CiBzdGF0aWMgTElTVF9IRUFEKGVkYWNfcGNpX2xpc3QpOworc3RhdGljIGF0b21pY190IHBjaV9pbmRleGVzID0gQVRPTUlDX0lOSVQoMCk7CiAKIC8qCiAgKiBlZGFjX3BjaV9hbGxvY19jdGxfaW5mbwpAQCAtMzE4LDYgKzMxOSwxOSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZWRhY19wY2lfcmVzZXRfZGVsYXlfcGVyaW9kKTsKIAogLyoKKyAqIGVkYWNfcGNpX2FsbG9jX2luZGV4OiBBbGxvY2F0ZSBhIHVuaXF1ZSBQQ0kgaW5kZXggbnVtYmVyCisgKgorICogUmV0dXJuOgorICogICAgICBhbGxvY2F0ZWQgaW5kZXggbnVtYmVyCisgKgorICovCitpbnQgZWRhY19wY2lfYWxsb2NfaW5kZXgodm9pZCkKK3sKKwlyZXR1cm4gYXRvbWljX2luY19yZXR1cm4oJnBjaV9pbmRleGVzKSAtIDE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlZGFjX3BjaV9hbGxvY19pbmRleCk7CisKKy8qCiAgKiBlZGFjX3BjaV9hZGRfZGV2aWNlOiBJbnNlcnQgdGhlICdlZGFjX2Rldicgc3RydWN0dXJlIGludG8gdGhlCiAgKiBlZGFjX3BjaSBnbG9iYWwgbGlzdCBhbmQgY3JlYXRlIHN5c2ZzIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoCiAgKiBlZGFjX3BjaSBzdHJ1Y3R1cmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9wcGM0eHhfZWRhYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjIxNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYwpAQCAtMCwwICsxLDE0NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnVvdmF0aW9uIFN5c3RlbSBEZXNpZ25zLCBMTEMKKyAqICAgR3JhbnQgRXJpY2tzb24gPGdlcmlja3NvbkBudW92YXRpb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lZGFjLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vZGNyLmg+CisKKyNpbmNsdWRlICJlZGFjX2NvcmUuaCIKKyNpbmNsdWRlICJwcGM0eHhfZWRhYy5oIgorCisvKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgYSBkcml2ZXIgZm9yIG1vbml0b3JpbmcgYW5kIGhhbmRsaW5nIGV2ZW50cworICogYXNzb2NpYXRlZCB3aXRoIHRoZSBJTUIgRERSMiBFQ0MgY29udHJvbGxlciBmb3VuZCBpbiB0aGUgQU1DQy9JQk0KKyAqIDQwNUVYW3JdLCA0NDBTUCwgNDQwU1BlLCA0NjBFWCwgNDYwR1QgYW5kIDQ2MFNYLgorICoKKyAqIEFzIHJlYWxpemVkIGluIHRoZSA0MDVFWFtyXSwgdGhpcyBjb250cm9sbGVyIGZlYXR1cmVzOgorICoKKyAqICAgLSBTdXBwb3J0IGZvciByZWdpc3RlcmVkLSBhbmQgbm9uLXJlZ2lzdGVyZWQgRERSMSBhbmQgRERSMiBtZW1vcnkuCisgKiAgIC0gMzItYml0IG9yIDE2LWJpdCBtZW1vcnkgaW50ZXJmYWNlIHdpdGggb3B0aW9uYWwgRUNDLgorICoKKyAqICAgICBvIEVDQyBzdXBwb3J0IGluY2x1ZGVzOgorICoKKyAqICAgICAgIC0gNC1iaXQgU0VDL0RFRAorICogICAgICAgLSBBbGlnbmVkLW5pYmJsZSBlcnJvciBkZXRlY3QKKyAqICAgICAgIC0gQnlwYXNzIG1vZGUKKyAqCisgKiAgIC0gVHdvICgyKSBtZW1vcnkgYmFua3MvcmFua3MuCisgKiAgIC0gVXAgdG8gMSBHaUIgcGVyIGJhbmsvcmFuayBpbiAzMi1iaXQgbW9kZSBhbmQgdXAgdG8gNTEyIE1pQiBwZXIKKyAqICAgICBiYW5rL3JhbmsgaW4gMTYtYml0IG1vZGUuCisgKgorICogQXMgcmVhbGl6ZWQgaW4gdGhlIDQ0MFNQIGFuZCA0NDBTUGUsIHRoaXMgY29udHJvbGxlciBjaGFuZ2VzL2FkZHM6CisgKgorICogICAtIDY0LWJpdCBvciAzMi1iaXQgbWVtb3J5IGludGVyZmFjZSB3aXRoIG9wdGlvbmFsIEVDQy4KKyAqCisgKiAgICAgbyBFQ0Mgc3VwcG9ydCBpbmNsdWRlczoKKyAqCisgKiAgICAgICAtIDgtYml0IFNFQy9ERUQKKyAqICAgICAgIC0gQWxpZ25lZC1uaWJibGUgZXJyb3IgZGV0ZWN0CisgKiAgICAgICAtIEJ5cGFzcyBtb2RlCisgKgorICogICAtIFVwIHRvIDQgR2lCIHBlciBiYW5rL3JhbmsgaW4gNjQtYml0IG1vZGUgYW5kIHVwIHRvIDIgR2lCCisgKiAgICAgcGVyIGJhbmsvcmFuayBpbiAzMi1iaXQgbW9kZS4KKyAqCisgKiBBcyByZWFsaXplZCBpbiB0aGUgNDYwRVggYW5kIDQ2MEdULCB0aGlzIGNvbnRyb2xsZXIgY2hhbmdlcy9hZGRzOgorICoKKyAqICAgLSA2NC1iaXQgb3IgMzItYml0IG1lbW9yeSBpbnRlcmZhY2Ugd2l0aCBvcHRpb25hbCBFQ0MuCisgKgorICogICAgIG8gRUNDIHN1cHBvcnQgaW5jbHVkZXM6CisgKgorICogICAgICAgLSA4LWJpdCBTRUMvREVECisgKiAgICAgICAtIEFsaWduZWQtbmliYmxlIGVycm9yIGRldGVjdAorICogICAgICAgLSBCeXBhc3MgbW9kZQorICoKKyAqICAgLSBGb3VyICg0KSBtZW1vcnkgYmFua3MvcmFua3MuCisgKiAgIC0gVXAgdG8gMTYgR2lCIHBlciBiYW5rL3JhbmsgaW4gNjQtYml0IG1vZGUgYW5kIHVwIHRvIDggR2lCCisgKiAgICAgcGVyIGJhbmsvcmFuayBpbiAzMi1iaXQgbW9kZS4KKyAqCisgKiBBdCBwcmVzZW50LCB0aGlzIGRyaXZlciBoYXMgT05MWSBiZWVuIHRlc3RlZCBhZ2FpbnN0IHRoZSBjb250cm9sbGVyCisgKiByZWFsaXphdGlvbiBpbiB0aGUgNDA1RVhbcl0gb24gdGhlIEFNQ0MgS2lsYXVlYSBhbmQgSGFsZWFrYWxhCisgKiBib2FyZHMgKDI1NiBNaUIgdy9vIEVDQyBtZW1vcnkgc29sZGVyZWQgb250byB0aGUgYm9hcmQpIGFuZCBhCisgKiBwcm9wcmlldGFyeSBib2FyZCBiYXNlZCBvbiB0aG9zZSBkZXNpZ25zICgxMjggTWlCIEVDQyBtZW1vcnksIGFsc28KKyAqIHNvbGRlcmVkIG9udG8gdGhlIGJvYXJkKS4KKyAqCisgKiBEeW5hbWljIGZlYXR1cmUgZGV0ZWN0aW9uIGFuZCBoYW5kbGluZyBuZWVkcyB0byBiZSBhZGRlZCBmb3IgdGhlCisgKiBvdGhlciByZWFsaXphdGlvbnMgb2YgdGhpcyBjb250cm9sbGVyIGxpc3RlZCBhYm92ZS4KKyAqCisgKiBFdmVudHVhbGx5LCB0aGlzIGRyaXZlciB3aWxsIGxpa2VseSBiZSBhZGFwdGVkIHRvIHRoZSBhYm92ZSB2YXJpYW50CisgKiByZWFsaXphdGlvbnMgb2YgdGhpcyBjb250cm9sbGVyIGFzIHdlbGwgYXMgYnJva2VuIGFwYXJ0IHRvIGhhbmRsZQorICogdGhlIG90aGVyIGtub3duIEVDQy1jYXBhYmxlIGNvbnRyb2xsZXJzIHByZXZhbGVudCBpbiBvdGhlciA0eHgKKyAqIHByb2Nlc3NvcnM6CisgKgorICogICAtIElCTSBTRFJBTSAoNDA1R1AsIDQwNUNSIGFuZCA0MDVFUCkgImlibSxzZHJhbS00eHgiCisgKiAgIC0gSUJNIEREUjEgKDQ0MEdQLCA0NDBHWCwgNDQwRVAgYW5kIDQ0MEdSKSAiaWJtLHNkcmFtLTR4eC1kZHIiCisgKiAgIC0gRGVuYWxpIEREUjEvRERSMiAoNDQwRVBYIGFuZCA0NDBHUlgpICJkZW5hbGksc2RyYW0tNHh4LWRkcjIiCisgKgorICogRm9yIHRoaXMgY29udHJvbGxlciwgdW5mb3J0dW5hdGVseSwgY29ycmVjdGFibGUgZXJyb3JzIHJlcG9ydAorICogbm90aGluZyBtb3JlIHRoYW4gdGhlIGJlYXQvY3ljbGUgYW5kIGJ5dGUvbGFuZSB0aGUgY29ycmVjdGlvbgorICogb2NjdXJyZWQgb24gYW5kIHRoZSBjaGVjayBiaXQgZ3JvdXAgdGhhdCBjb3ZlcmVkIHRoZSBlcnJvci4KKyAqCisgKiBJbiBjb250cmFzdCwgdW5jb3JyZWN0YWJsZSBlcnJvcnMgYWxzbyByZXBvcnQgdGhlIGZhaWxpbmcgYWRkcmVzcywKKyAqIHRoZSBidXMgbWFzdGVyIGFuZCB0aGUgdHJhbnNhY3Rpb24gZGlyZWN0aW9uIChpLmUuIHJlYWQgb3Igd3JpdGUpCisgKgorICogUmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBlcnJvciBpcyBhIENFIG9yIGEgVUUsIHdlIHJlcG9ydCB0aGUKKyAqIGZvbGxvd2luZyBwaWVjZXMgb2YgaW5mb3JtYXRpb24gaW4gdGhlIGRyaXZlci11bmlxdWUgbWVzc2FnZSB0byB0aGUKKyAqIEVEQUMgc3Vic3lzdGVtOgorICoKKyAqICAgLSBEZXZpY2UgdHJlZSBwYXRoCisgKiAgIC0gQmFuayhzKQorICogICAtIENoZWNrIGJpdCBlcnJvciBncm91cAorICogICAtIEJlYXQocykvbGFuZShzKQorICovCisKKy8qIFByZXByb2Nlc3NvciBEZWZpbml0aW9ucyAqLworCisjZGVmaW5lIEVEQUNfT1BTVEFURV9JTlRfU1RSCQkiaW50ZXJydXB0IgorI2RlZmluZSBFREFDX09QU1RBVEVfUE9MTF9TVFIJCSJwb2xsZWQiCisjZGVmaW5lIEVEQUNfT1BTVEFURV9VTktOT1dOX1NUUgkidW5rbm93biIKKworI2RlZmluZSBQUEM0WFhfRURBQ19NT0RVTEVfTkFNRQkJInBwYzR4eF9lZGFjIgorI2RlZmluZSBQUEM0WFhfRURBQ19NT0RVTEVfUkVWSVNJT04JInYxLjAuMCAiIF9fREFURV9fCisKKyNkZWZpbmUgUFBDNFhYX0VEQUNfTUVTU0FHRV9TSVpFCTI1NgorCisvKgorICogS2VybmVsIGxvZ2dpbmcgd2l0aG91dCBhbiBFREFDIGluc3RhbmNlCisgKi8KKyNkZWZpbmUgcHBjNHh4X2VkYWNfcHJpbnRrKGxldmVsLCBmbXQsIGFyZy4uLikgXAorCWVkYWNfcHJpbnRrKGxldmVsLCAiUFBDNHh4IE1DIiwgZm10LCAjI2FyZykKKworLyoKKyAqIEtlcm5lbCBsb2dnaW5nIHdpdGggYW4gRURBQyBpbnN0YW5jZQorICovCisjZGVmaW5lIHBwYzR4eF9lZGFjX21jX3ByaW50ayhsZXZlbCwgbWNpLCBmbXQsIGFyZy4uLikgXAorCWVkYWNfbWNfY2hpcHNldF9wcmludGsobWNpLCBsZXZlbCwgIlBQQzR4eCIsIGZtdCwgIyNhcmcpCisKKy8qCisgKiBNYWNyb3MgdG8gY29udmVydCBiYW5rIGNvbmZpZ3VyYXRpb24gc2l6ZSBlbnVtZXJhdGlvbnMgaW50byBNaUIgYW5kCisgKiBwYWdlIHZhbHVlcy4KKyAqLworI2RlZmluZSBTRFJBTV9NQkNGX1NaX01pQl9NSU4JCTQKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl9UT19NaUIobikJCShTRFJBTV9NQkNGX1NaX01pQl9NSU4gXAorCQkJCQkgPDwgKFNEUkFNX01CQ0ZfU1pfREVDT0RFKG4pKSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl9UT19QQUdFUyhuKQkoU0RSQU1fTUJDRl9TWl9NaUJfTUlOIFwKKwkJCQkJIDw8ICgyMCAtIFBBR0VfU0hJRlQgKyBcCisJCQkJCSAgICAgU0RSQU1fTUJDRl9TWl9ERUNPREUobikpKQorCisvKgorICogVGhlIGlibSxzZHJhbS00eHgtZGRyMiBEZXZpY2UgQ29udHJvbCBSZWdpc3RlcnMgKERDUnMpIGFyZQorICogaW5kaXJlY3RseSBhY2NjZXNzZWQgYW5kIGhhdmUgYSBiYXNlIGFuZCBsZW5ndGggZGVmaW5lZCBieSB0aGUKKyAqIGRldmljZSB0cmVlLiBUaGUgYmFzZSBjYW4gYmUgYW55dGhpbmc7IGhvd2V2ZXIsIHdlIGV4cGVjdCB0aGUKKyAqIGxlbmd0aCB0byBiZSBwcmVjaXNlbHkgdHdvIHJlZ2lzdGVycywgdGhlIGZpcnN0IGZvciB0aGUgYWRkcmVzcworICogd2luZG93IGFuZCB0aGUgc2Vjb25kIGZvciB0aGUgZGF0YSB3aW5kb3cuCisgKi8KKyNkZWZpbmUgU0RSQU1fRENSX1JFU09VUkNFX0xFTgkJMgorI2RlZmluZSBTRFJBTV9EQ1JfQUREUl9PRkZTRVQJCTAKKyNkZWZpbmUgU0RSQU1fRENSX0RBVEFfT0ZGU0VUCQkxCisKKy8qCisgKiBEZXZpY2UgdHJlZSBpbnRlcnJ1cHQgaW5kaWNlcworICovCisjZGVmaW5lIElOVE1BUF9FQ0NERURfSU5ERVgJCTAJLyogRG91YmxlLWJpdCBFcnJvciBEZXRlY3QgKi8KKyNkZWZpbmUgSU5UTUFQX0VDQ1NFQ19JTkRFWAkJMQkvKiBTaW5nbGUtYml0IEVycm9yIENvcnJlY3QgKi8KKworLyogVHlwZSBEZWZpbml0aW9ucyAqLworCisvKgorICogUFBDNHh4IFNEUkFNIG1lbW9yeSBjb250cm9sbGVyIHByaXZhdGUgaW5zdGFuY2UgZGF0YQorICovCitzdHJ1Y3QgcHBjNHh4X2VkYWNfcGRhdGEgeworCWRjcl9ob3N0X3QgZGNyX2hvc3Q7CS8qIEluZGlyZWN0IERDUiBhZGRyZXNzL2RhdGEgd2luZG93IG1hcHBpbmcgKi8KKwlzdHJ1Y3QgeworCQlpbnQgc2VjOwkvKiBTaW5nbGUtYml0IGNvcnJlY3RhYmxlIGVycm9yIElSUSBhc3NpZ25lZCAqLworCQlpbnQgZGVkOwkvKiBEb3VibGUtYml0IGRldGVjdGFibGUgZXJyb3IgSVJRIGFzc2lnbmVkICovCisJfSBpcnFzOworfTsKKworLyoKKyAqIFZhcmlvdXMgc3RhdHVzIGRhdGEgZ2F0aGVyZWQgYW5kIG1hbmlwdWxhdGVkIHdoZW4gY2hlY2tpbmcgYW5kCisgKiByZXBvcnRpbmcgRUNDIHN0YXR1cy4KKyAqLworc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzIHsKKwl1MzIgZWNjZXM7CisJdTMyIGJlc3I7CisJdTMyIGJlYXJoOworCXUzMiBiZWFybDsKKwl1MzIgd21pcnE7Cit9OworCisvKiBGdW5jdGlvbiBQcm90b3R5cGVzICovCisKK3N0YXRpYyBpbnQgcHBjNHh4X2VkYWNfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2aWNlLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpkZXZpY2VfaWQpOworc3RhdGljIGludCBwcGM0eHhfZWRhY19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqZGV2aWNlKTsKKworLyogR2xvYmFsIFZhcmlhYmxlcyAqLworCisvKgorICogRGV2aWNlIHRyZWUgbm9kZSB0eXBlIGFuZCBjb21wYXRpYmxlIHR1cGxlcyB0aGlzIGRyaXZlciBjYW4gbWF0Y2gKKyAqIG9uLgorICovCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBwcGM0eHhfZWRhY19tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUJPSAiaWJtLHNkcmFtLTR4eC1kZHIyIgorCX0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBwcGM0eHhfZWRhY19kcml2ZXIgPSB7CisJLm1hdGNoX3RhYmxlCQk9IHBwYzR4eF9lZGFjX21hdGNoLAorCS5wcm9iZQkJCT0gcHBjNHh4X2VkYWNfcHJvYmUsCisJLnJlbW92ZQkJCT0gcHBjNHh4X2VkYWNfcmVtb3ZlLAorCS5kcml2ZXIJCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gUFBDNFhYX0VEQUNfTU9EVUxFX05BTUUKKwl9Cit9OworCisvKgorICogVE9ETzogVGhlIHJvdyBhbmQgY2hhbm5lbCBwYXJhbWV0ZXJzIGxpa2VseSBuZWVkIHRvIGJlIGR5bmFtaWNhbGx5CisgKiBzZXQgYmFzZWQgb24gdGhlIGFmb3JlbWVudGlvbmVkIHZhcmlhbnQgY29udHJvbGxlciByZWFsaXphdGlvbnMuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBwcGM0eHhfZWRhY19ucl9jc3Jvd3MgPSAyOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHBwYzR4eF9lZGFjX25yX2NoYW5zID0gMTsKKworLyoKKyAqIFN0cmluZ3MgYXNzb2NpYXRlZCB3aXRoIFBMQiBtYXN0ZXIgSURzIGNhcGFibGUgb2YgYmVpbmcgcG9zdGVkIGluCisgKiBTRFJBTV9CRVNSIG9yIFNEUkFNX1dNSVJRIG9uIHVuY29ycmVjdGFibGUgRUNDIGVycm9ycy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcGM0eHhfcGxiX21hc3RlcnNbOV0gPSB7CisJW1NEUkFNX1BMQl9NMElEX0lDVV0JPSAiSUNVIiwKKwlbU0RSQU1fUExCX00wSURfUENJRTBdCT0gIlBDSS1FIDAiLAorCVtTRFJBTV9QTEJfTTBJRF9QQ0lFMV0JPSAiUENJLUUgMSIsCisJW1NEUkFNX1BMQl9NMElEX0RNQV0JPSAiRE1BIiwKKwlbU0RSQU1fUExCX00wSURfRENVXQk9ICJEQ1UiLAorCVtTRFJBTV9QTEJfTTBJRF9PUEJdCT0gIk9QQiIsCisJW1NEUkFNX1BMQl9NMElEX01BTF0JPSAiTUFMIiwKKwlbU0RSQU1fUExCX00wSURfU0VDXQk9ICJTRUMiLAorCVtTRFJBTV9QTEJfTTBJRF9BSEJdCT0gIkFIQiIKK307CisKKy8qKgorICogbWZzZHJhbSAtIHJlYWQgYW5kIHJldHVybiBjb250cm9sbGVyIHJlZ2lzdGVyIGRhdGEKKyAqIEBkY3JfaG9zdDogQSBwb2ludGVyIHRvIHRoZSBEQ1IgbWFwcGluZy4KKyAqIEBpZGNyX246IFRoZSBpbmRpcmVjdCBEQ1IgcmVnaXN0ZXIgdG8gcmVhZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgYW5kIHJldHVybnMgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogY29udHJvbGxlcidzIHNwZWNpZmllZCBpbmRpcmVjdCBEQ1IgcmVnaXN0ZXIuCisgKgorICogUmV0dXJucyB0aGUgcmVhZCBkYXRhLgorICovCitzdGF0aWMgaW5saW5lIHUzMgorbWZzZHJhbShjb25zdCBkY3JfaG9zdF90ICpkY3JfaG9zdCwgdW5zaWduZWQgaW50IGlkY3JfbikKK3sKKwlyZXR1cm4gX19tZmRjcmkoZGNyX2hvc3QtPmJhc2UgKyBTRFJBTV9EQ1JfQUREUl9PRkZTRVQsCisJCQlkY3JfaG9zdC0+YmFzZSArIFNEUkFNX0RDUl9EQVRBX09GRlNFVCwKKwkJCWlkY3Jfbik7Cit9CisKKy8qKgorICogbXRzZHJhbSAtIHdyaXRlIGNvbnRyb2xsZXIgcmVnaXN0ZXIgZGF0YQorICogQGRjcl9ob3N0OiBBIHBvaW50ZXIgdG8gdGhlIERDUiBtYXBwaW5nLgorICogQGlkY3JfbjogVGhlIGluZGlyZWN0IERDUiByZWdpc3RlciB0byB3cml0ZS4KKyAqIEB2YWx1ZTogVGhlIGRhdGEgdG8gd3JpdGUuCisgKgorICogVGhpcyByb3V0aW5lIHdyaXRlcyB0aGUgcHJvdmlkZWQgZGF0YSB0byB0aGUgY29udHJvbGxlcidzIHNwZWNpZmllZAorICogaW5kaXJlY3QgRENSIHJlZ2lzdGVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK210c2RyYW0oY29uc3QgZGNyX2hvc3RfdCAqZGNyX2hvc3QsIHVuc2lnbmVkIGludCBpZGNyX24sIHUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gX19tdGRjcmkoZGNyX2hvc3QtPmJhc2UgKyBTRFJBTV9EQ1JfQUREUl9PRkZTRVQsCisJCQlkY3JfaG9zdC0+YmFzZSArIFNEUkFNX0RDUl9EQVRBX09GRlNFVCwKKwkJCWlkY3JfbiwKKwkJCXZhbHVlKTsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19jaGVja19iYW5rX2Vycm9yIC0gY2hlY2sgYSBiYW5rIGZvciBhbiBFQ0MgYmFuayBlcnJvcgorICogQHN0YXR1czogQSBwb2ludGVyIHRvIHRoZSBFQ0Mgc3RhdHVzIHN0cnVjdHVyZSB0byBjaGVjayBmb3IgYW4KKyAqICAgICAgICAgIEVDQyBiYW5rIGVycm9yLgorICogQGJhbms6IFRoZSBiYW5rIHRvIGNoZWNrIGZvciBhbiBFQ0MgZXJyb3IuCisgKgorICogVGhpcyByb3V0aW5lIGRldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIGJhbmsgaGFzIGFuIEVDQworICogZXJyb3IuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgYmFuayBoYXMgYW4gRUNDIGVycm9yOyBvdGhlcndpc2UsCisgKiBmYWxzZS4KKyAqLworc3RhdGljIGJvb2wKK3BwYzR4eF9lZGFjX2NoZWNrX2JhbmtfZXJyb3IoY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMsCisJCQkgICAgIHVuc2lnbmVkIGludCBiYW5rKQoreworCXN3aXRjaCAoYmFuaykgeworCWNhc2UgMDoKKwkJcmV0dXJuIHN0YXR1cy0+ZWNjZXMgJiBTRFJBTV9FQ0NFU19CSzBFUjsKKwljYXNlIDE6CisJCXJldHVybiBzdGF0dXMtPmVjY2VzICYgU0RSQU1fRUNDRVNfQksxRVI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19nZW5lcmF0ZV9iYW5rX21lc3NhZ2UgLSBnZW5lcmF0ZSBpbnRlcnByZXR0ZWQgYmFuayBzdGF0dXMgbWVzc2FnZQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGFzc29jaWF0ZWQKKyAqICAgICAgIHdpdGggdGhlIGJhbmsgbWVzc2FnZSBiZWluZyBnZW5lcmF0ZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIHRvIGdlbmVyYXRlIHRoZQorICogICAgICAgICAgbWVzc2FnZSBmcm9tLgorICogQGJ1ZmZlcjogQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgaW4gd2hpY2ggdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlLgorICogQHNpemU6IFRoZSBzaXplLCBpbiBieXRlcywgb2Ygc3BhY2UgYXZhaWxhYmxlIGluIGJ1ZmZlci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZ2VuZXJhdGVzIHRvIHRoZSBwcm92aWRlZCBidWZmZXIgdGhlIHBvcnRpb24gb2YgdGhlCisgKiBkcml2ZXItdW5pcXVlIHJlcG9ydCBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUNDRVNTW0JLTkVSXQorICogZmllbGQgb2YgdGhlIHNwZWNpZmllZCBFQ0Mgc3RhdHVzLgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGdlbmVyYXRlZCBvbiBzdWNjZXNzOyBvdGhlcndpc2UsIDwKKyAqIDAgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQKK3BwYzR4eF9lZGFjX2dlbmVyYXRlX2JhbmtfbWVzc2FnZShjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCQkJICBjb25zdCBzdHJ1Y3QgcHBjNHh4X2VjY19zdGF0dXMgKnN0YXR1cywKKwkJCQkgIGNoYXIgKmJ1ZmZlciwKKwkJCQkgIHNpemVfdCBzaXplKQoreworCWludCBuLCB0b3RhbCA9IDA7CisJdW5zaWduZWQgaW50IHJvdywgcm93czsKKworCW4gPSBzbnByaW50ZihidWZmZXIsIHNpemUsICIlczogQmFua3M6ICIsIG1jaS0+ZGV2X25hbWUpOworCisJaWYgKG4gPCAwIHx8IG4gPj0gc2l6ZSkKKwkJZ290byBmYWlsOworCisJYnVmZmVyICs9IG47CisJc2l6ZSAtPSBuOworCXRvdGFsICs9IG47CisKKwlmb3IgKHJvd3MgPSAwLCByb3cgPSAwOyByb3cgPCBtY2ktPm5yX2Nzcm93czsgcm93KyspIHsKKwkJaWYgKHBwYzR4eF9lZGFjX2NoZWNrX2JhbmtfZXJyb3Ioc3RhdHVzLCByb3cpKSB7CisJCQluID0gc25wcmludGYoYnVmZmVyLCBzaXplLCAiJXMldSIsCisJCQkJCShyb3dzKysgPyAiLCAiIDogIiIpLCByb3cpOworCisJCQlpZiAobiA8IDAgfHwgbiA+PSBzaXplKQorCQkJCWdvdG8gZmFpbDsKKworCQkJYnVmZmVyICs9IG47CisJCQlzaXplIC09IG47CisJCQl0b3RhbCArPSBuOworCQl9CisJfQorCisJbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzOyAiLCByb3dzID8gIiIgOiAiTm9uZSIpOworCisJaWYgKG4gPCAwIHx8IG4gPj0gc2l6ZSkKKwkJZ290byBmYWlsOworCisJYnVmZmVyICs9IG47CisJc2l6ZSAtPSBuOworCXRvdGFsICs9IG47CisKKyBmYWlsOgorCXJldHVybiB0b3RhbDsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19nZW5lcmF0ZV9jaGVja2JpdF9tZXNzYWdlIC0gZ2VuZXJhdGUgaW50ZXJwcmV0dGVkIGNoZWNrYml0IG1lc3NhZ2UKKyAqIEBtY2k6IEEgcG9pbnRlciB0byB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZSBhc3NvY2lhdGVkCisgKiAgICAgICB3aXRoIHRoZSBjaGVja2JpdCBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZC4KKyAqIEBzdGF0dXM6IEEgcG9pbnRlciB0byB0aGUgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUgdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlIGZyb20uCisgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBAc2l6ZTogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiBzcGFjZSBhdmFpbGFibGUgaW4gYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBnZW5lcmF0ZXMgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciB0aGUgcG9ydGlvbiBvZiB0aGUKKyAqIGRyaXZlci11bmlxdWUgcmVwb3J0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQ0NFU1NbQ0tCRVJdCisgKiBmaWVsZCBvZiB0aGUgc3BlY2lmaWVkIEVDQyBzdGF0dXMuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZ2VuZXJhdGVkIG9uIHN1Y2Nlc3M7IG90aGVyd2lzZSwgPAorICogMCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludAorcHBjNHh4X2VkYWNfZ2VuZXJhdGVfY2hlY2tiaXRfbWVzc2FnZShjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMsCisJCQkJICAgICAgY2hhciAqYnVmZmVyLAorCQkJCSAgICAgIHNpemVfdCBzaXplKQoreworCWNvbnN0IHN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSAqcGRhdGEgPSBtY2ktPnB2dF9pbmZvOworCWNvbnN0IGNoYXIgKmNrYmVyID0gTlVMTDsKKworCXN3aXRjaCAoc3RhdHVzLT5lY2NlcyAmIFNEUkFNX0VDQ0VTX0NLQkVSX01BU0spIHsKKwljYXNlIFNEUkFNX0VDQ0VTX0NLQkVSX05PTkU6CisJCWNrYmVyID0gIk5vbmUiOworCQlicmVhazsKKwljYXNlIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ18wXzM6CisJCWNrYmVyID0gIkVDQzA6MyI7CisJCWJyZWFrOworCWNhc2UgU0RSQU1fRUNDRVNfQ0tCRVJfMzJfRUNDXzRfODoKKwkJc3dpdGNoIChtZnNkcmFtKCZwZGF0YS0+ZGNyX2hvc3QsIFNEUkFNX01DT1BUMSkgJgorCQkJU0RSQU1fTUNPUFQxX1dEVEhfTUFTSykgeworCQljYXNlIFNEUkFNX01DT1BUMV9XRFRIXzE2OgorCQkJY2tiZXIgPSAiRUNDMDozIjsKKwkJCWJyZWFrOworCQljYXNlIFNEUkFNX01DT1BUMV9XRFRIXzMyOgorCQkJY2tiZXIgPSAiRUNDNDo4IjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY2tiZXIgPSAiVW5rbm93biI7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ18wXzg6CisJCWNrYmVyID0gIkVDQzA6OCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNrYmVyID0gIlVua25vd24iOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc25wcmludGYoYnVmZmVyLCBzaXplLCAiQ2hlY2tiaXQgRXJyb3I6ICVzIiwgY2tiZXIpOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2dlbmVyYXRlX2xhbmVfbWVzc2FnZSAtIGdlbmVyYXRlIGludGVycHJldHRlZCBieXRlIGxhbmUgbWVzc2FnZQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGFzc29jaWF0ZWQKKyAqICAgICAgIHdpdGggdGhlIGJ5dGUgbGFuZSBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZC4KKyAqIEBzdGF0dXM6IEEgcG9pbnRlciB0byB0aGUgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUgdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlIGZyb20uCisgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBAc2l6ZTogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiBzcGFjZSBhdmFpbGFibGUgaW4gYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBnZW5lcmF0ZXMgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciB0aGUgcG9ydGlvbiBvZiB0aGUKKyAqIGRyaXZlci11bmlxdWUgcmVwb3J0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBFQ0NFU1NbQk5DRV0KKyAqIGZpZWxkIG9mIHRoZSBzcGVjaWZpZWQgRUNDIHN0YXR1cy4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBnZW5lcmF0ZWQgb24gc3VjY2Vzczsgb3RoZXJ3aXNlLCA8CisgKiAwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50CitwcGM0eHhfZWRhY19nZW5lcmF0ZV9sYW5lX21lc3NhZ2UoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJCSAgY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMsCisJCQkJICBjaGFyICpidWZmZXIsCisJCQkJICBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgbiwgdG90YWwgPSAwOworCXVuc2lnbmVkIGludCBsYW5lLCBsYW5lczsKKwljb25zdCB1bnNpZ25lZCBpbnQgZmlyc3RfbGFuZSA9IDA7CisJY29uc3QgdW5zaWduZWQgaW50IGxhbmVfY291bnQgPSAxNjsKKworCW4gPSBzbnByaW50ZihidWZmZXIsIHNpemUsICI7IEJ5dGUgTGFuZSBFcnJvcnM6ICIpOworCisJaWYgKG4gPCAwIHx8IG4gPj0gc2l6ZSkKKwkJZ290byBmYWlsOworCisJYnVmZmVyICs9IG47CisJc2l6ZSAtPSBuOworCXRvdGFsICs9IG47CisKKwlmb3IgKGxhbmVzID0gMCwgbGFuZSA9IGZpcnN0X2xhbmU7IGxhbmUgPCBsYW5lX2NvdW50OyBsYW5lKyspIHsKKwkJaWYgKChzdGF0dXMtPmVjY2VzICYgU0RSQU1fRUNDRVNfQk5DRV9FTkNPREUobGFuZSkpICE9IDApIHsKKwkJCW4gPSBzbnByaW50ZihidWZmZXIsIHNpemUsCisJCQkJICAgICAiJXMldSIsCisJCQkJICAgICAobGFuZXMrKyA/ICIsICIgOiAiIiksIGxhbmUpOworCisJCQlpZiAobiA8IDAgfHwgbiA+PSBzaXplKQorCQkJCWdvdG8gZmFpbDsKKworCQkJYnVmZmVyICs9IG47CisJCQlzaXplIC09IG47CisJCQl0b3RhbCArPSBuOworCQl9CisJfQorCisJbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZSwgIiVzOyAiLCBsYW5lcyA/ICIiIDogIk5vbmUiKTsKKworCWlmIChuIDwgMCB8fCBuID49IHNpemUpCisJCWdvdG8gZmFpbDsKKworCWJ1ZmZlciArPSBuOworCXNpemUgLT0gbjsKKwl0b3RhbCArPSBuOworCisgZmFpbDoKKwlyZXR1cm4gdG90YWw7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfZ2VuZXJhdGVfZWNjX21lc3NhZ2UgLSBnZW5lcmF0ZSBpbnRlcnByZXR0ZWQgRUNDIHN0YXR1cyBtZXNzYWdlCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UgYXNzb2NpYXRlZAorICogICAgICAgd2l0aCB0aGUgRUNDRVMgbWVzc2FnZSBiZWluZyBnZW5lcmF0ZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIHRvIGdlbmVyYXRlIHRoZQorICogICAgICAgICAgbWVzc2FnZSBmcm9tLgorICogQGJ1ZmZlcjogQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgaW4gd2hpY2ggdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlLgorICogQHNpemU6IFRoZSBzaXplLCBpbiBieXRlcywgb2Ygc3BhY2UgYXZhaWxhYmxlIGluIGJ1ZmZlci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZ2VuZXJhdGVzIHRvIHRoZSBwcm92aWRlZCBidWZmZXIgdGhlIHBvcnRpb24gb2YgdGhlCisgKiBkcml2ZXItdW5pcXVlIHJlcG9ydCBtZXNzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRUNDRVNTIHJlZ2lzdGVyIG9mCisgKiB0aGUgc3BlY2lmaWVkIEVDQyBzdGF0dXMuCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZ2VuZXJhdGVkIG9uIHN1Y2Nlc3M7IG90aGVyd2lzZSwgPAorICogMCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludAorcHBjNHh4X2VkYWNfZ2VuZXJhdGVfZWNjX21lc3NhZ2UoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJCSBjb25zdCBzdHJ1Y3QgcHBjNHh4X2VjY19zdGF0dXMgKnN0YXR1cywKKwkJCQkgY2hhciAqYnVmZmVyLAorCQkJCSBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgbiwgdG90YWwgPSAwOworCisJbiA9IHBwYzR4eF9lZGFjX2dlbmVyYXRlX2JhbmtfbWVzc2FnZShtY2ksIHN0YXR1cywgYnVmZmVyLCBzaXplKTsKKworCWlmIChuIDwgMCB8fCBuID49IHNpemUpCisJCWdvdG8gZmFpbDsKKworCWJ1ZmZlciArPSBuOworCXNpemUgLT0gbjsKKwl0b3RhbCArPSBuOworCisJbiA9IHBwYzR4eF9lZGFjX2dlbmVyYXRlX2NoZWNrYml0X21lc3NhZ2UobWNpLCBzdGF0dXMsIGJ1ZmZlciwgc2l6ZSk7CisKKwlpZiAobiA8IDAgfHwgbiA+PSBzaXplKQorCQlnb3RvIGZhaWw7CisKKwlidWZmZXIgKz0gbjsKKwlzaXplIC09IG47CisJdG90YWwgKz0gbjsKKworCW4gPSBwcGM0eHhfZWRhY19nZW5lcmF0ZV9sYW5lX21lc3NhZ2UobWNpLCBzdGF0dXMsIGJ1ZmZlciwgc2l6ZSk7CisKKwlpZiAobiA8IDAgfHwgbiA+PSBzaXplKQorCQlnb3RvIGZhaWw7CisKKwlidWZmZXIgKz0gbjsKKwlzaXplIC09IG47CisJdG90YWwgKz0gbjsKKworIGZhaWw6CisJcmV0dXJuIHRvdGFsOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2dlbmVyYXRlX3BsYl9tZXNzYWdlIC0gZ2VuZXJhdGUgaW50ZXJwcmV0dGVkIFBMQiBzdGF0dXMgbWVzc2FnZQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGFzc29jaWF0ZWQKKyAqICAgICAgIHdpdGggdGhlIFBMQiBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZC4KKyAqIEBzdGF0dXM6IEEgcG9pbnRlciB0byB0aGUgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUgdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlIGZyb20uCisgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBAc2l6ZTogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiBzcGFjZSBhdmFpbGFibGUgaW4gYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBnZW5lcmF0ZXMgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciB0aGUgcG9ydGlvbiBvZiB0aGUKKyAqIGRyaXZlci11bmlxdWUgcmVwb3J0IG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBQTEItcmVsYXRlZCBCRVNSCisgKiBhbmQvb3IgV01JUlEgcmVnaXN0ZXJzIG9mIHRoZSBzcGVjaWZpZWQgRUNDIHN0YXR1cy4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBnZW5lcmF0ZWQgb24gc3VjY2Vzczsgb3RoZXJ3aXNlLCA8CisgKiAwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50CitwcGM0eHhfZWRhY19nZW5lcmF0ZV9wbGJfbWVzc2FnZShjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCQkJIGNvbnN0IHN0cnVjdCBwcGM0eHhfZWNjX3N0YXR1cyAqc3RhdHVzLAorCQkJCSBjaGFyICpidWZmZXIsCisJCQkJIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGludCBtYXN0ZXI7CisJYm9vbCByZWFkOworCisJaWYgKChzdGF0dXMtPmJlc3IgJiBTRFJBTV9CRVNSX01BU0spID09IDApCisJCXJldHVybiAwOworCisJaWYgKChzdGF0dXMtPmJlc3IgJiBTRFJBTV9CRVNSX00wRVRfTUFTSykgPT0gU0RSQU1fQkVTUl9NMEVUX05PTkUpCisJCXJldHVybiAwOworCisJcmVhZCA9ICgoc3RhdHVzLT5iZXNyICYgU0RSQU1fQkVTUl9NMFJXX01BU0spID09IFNEUkFNX0JFU1JfTTBSV19SRUFEKTsKKworCW1hc3RlciA9IFNEUkFNX0JFU1JfTTBJRF9ERUNPREUoc3RhdHVzLT5iZXNyKTsKKworCXJldHVybiBzbnByaW50ZihidWZmZXIsIHNpemUsCisJCQkiJXMgZXJyb3Igdy8gUExCIG1hc3RlciAldSBcIiVzXCI7ICIsCisJCQkocmVhZCA/ICJSZWFkIiA6ICJXcml0ZSIpLAorCQkJbWFzdGVyLAorCQkJKCgobWFzdGVyID49IFNEUkFNX1BMQl9NMElEX0ZJUlNUKSAmJgorCQkJICAobWFzdGVyIDw9IFNEUkFNX1BMQl9NMElEX0xBU1QpKSA/CisJCQkgcHBjNHh4X3BsYl9tYXN0ZXJzW21hc3Rlcl0gOiAiVU5LTk9XTiIpKTsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19nZW5lcmF0ZV9tZXNzYWdlIC0gZ2VuZXJhdGUgaW50ZXJwcmV0dGVkIHN0YXR1cyBtZXNzYWdlCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UgYXNzb2NpYXRlZAorICogICAgICAgd2l0aCB0aGUgZHJpdmVyLXVuaXF1ZSBtZXNzYWdlIGJlaW5nIGdlbmVyYXRlZC4KKyAqIEBzdGF0dXM6IEEgcG9pbnRlciB0byB0aGUgRUNDIHN0YXR1cyBzdHJ1Y3R1cmUgdG8gZ2VuZXJhdGUgdGhlCisgKiAgICAgICAgICBtZXNzYWdlIGZyb20uCisgKiBAYnVmZmVyOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpbiB3aGljaCB0byBnZW5lcmF0ZSB0aGUKKyAqICAgICAgICAgIG1lc3NhZ2UuCisgKiBAc2l6ZTogVGhlIHNpemUsIGluIGJ5dGVzLCBvZiBzcGFjZSBhdmFpbGFibGUgaW4gYnVmZmVyLgorICoKKyAqIFRoaXMgcm91dGluZSBnZW5lcmF0ZXMgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlciB0aGUgZHJpdmVyLXVuaXF1ZQorICogRURBQyByZXBvcnQgbWVzc2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgRUNDIHN0YXR1cy4KKyAqLworc3RhdGljIHZvaWQKK3BwYzR4eF9lZGFjX2dlbmVyYXRlX21lc3NhZ2UoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgcHBjNHh4X2VjY19zdGF0dXMgKnN0YXR1cywKKwkJCSAgICAgY2hhciAqYnVmZmVyLAorCQkJICAgICBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgbjsKKworCWlmIChidWZmZXIgPT0gTlVMTCB8fCBzaXplID09IDApCisJCXJldHVybjsKKworCW4gPSBwcGM0eHhfZWRhY19nZW5lcmF0ZV9lY2NfbWVzc2FnZShtY2ksIHN0YXR1cywgYnVmZmVyLCBzaXplKTsKKworCWlmIChuIDwgMCB8fCBuID49IHNpemUpCisJCXJldHVybjsKKworCWJ1ZmZlciArPSBuOworCXNpemUgLT0gbjsKKworCXBwYzR4eF9lZGFjX2dlbmVyYXRlX3BsYl9tZXNzYWdlKG1jaSwgc3RhdHVzLCBidWZmZXIsIHNpemUpOworfQorCisjaWZkZWYgREVCVUcKKy8qKgorICogcHBjNHh4X2VjY19kdW1wX3N0YXR1cyAtIGR1bXAgY29udHJvbGxlciBFQ0Mgc3RhdHVzIHJlZ2lzdGVycworICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXR1cyBiZWluZyBkdW1wZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIHRvIGdlbmVyYXRlIHRoZQorICogICAgICAgICAgZHVtcCBmcm9tLgorICoKKyAqIFRoaXMgcm91dGluZSBkdW1wcyB0byB0aGUga2VybmVsIGxvZyBidWZmZXIgdGhlIHJhdyBhbmQKKyAqIGludGVycHJldHRlZCBzcGVjaWZpZWQgRUNDIHN0YXR1cy4KKyAqLworc3RhdGljIHZvaWQKK3BwYzR4eF9lY2NfZHVtcF9zdGF0dXMoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMpCit7CisJY2hhciBtZXNzYWdlW1BQQzRYWF9FREFDX01FU1NBR0VfU0laRV07CisKKwlwcGM0eHhfZWRhY19nZW5lcmF0ZV9tZXNzYWdlKG1jaSwgc3RhdHVzLCBtZXNzYWdlLCBzaXplb2YobWVzc2FnZSkpOworCisJcHBjNHh4X2VkYWNfbWNfcHJpbnRrKEtFUk5fSU5GTywgbWNpLAorCQkJICAgICAgIlxuIgorCQkJICAgICAgIlx0RUNDRVM6IDB4JTA4eFxuIgorCQkJICAgICAgIlx0V01JUlE6IDB4JTA4eFxuIgorCQkJICAgICAgIlx0QkVTUjogIDB4JTA4eFxuIgorCQkJICAgICAgIlx0QkVBUjogIDB4JTA4eCUwOHhcbiIKKwkJCSAgICAgICJcdCVzXG4iLAorCQkJICAgICAgc3RhdHVzLT5lY2NlcywKKwkJCSAgICAgIHN0YXR1cy0+d21pcnEsCisJCQkgICAgICBzdGF0dXMtPmJlc3IsCisJCQkgICAgICBzdGF0dXMtPmJlYXJoLAorCQkJICAgICAgc3RhdHVzLT5iZWFybCwKKwkJCSAgICAgIG1lc3NhZ2UpOworfQorI2VuZGlmIC8qIERFQlVHICovCisKKy8qKgorICogcHBjNHh4X2VjY19nZXRfc3RhdHVzIC0gZ2V0IGNvbnRyb2xsZXIgRUNDIHN0YXR1cworICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXR1cyBiZWluZyByZXRyaWV2ZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIHRvIHBvcHVsYXRlIHRoZQorICogICAgICAgICAgRUNDIHN0YXR1cyB3aXRoLgorICoKKyAqIFRoaXMgcm91dGluZSByZWFkcyBhbmQgbWFza3MsIGFzIGFwcHJvcHJpYXRlLCBhbGwgdGhlIHJlbGV2YW50CisgKiBzdGF0dXMgcmVnaXN0ZXJzIHRoYXQgZGVhbCB3aXRoIGlibSxzZHJhbS00eHgtZGRyMiBFQ0MgZXJyb3JzLgorICogV2hpbGUgd2UgcmVhZCBhbGwgb2YgdGhlbSwgZm9yIGNvcnJlY3RhYmxlIGVycm9ycywgd2Ugb25seSBleHBlY3QKKyAqIHRvIGRlYWwgd2l0aCBFQ0NFUy4gRm9yIHVuY29ycmVjdGFibGUgZXJyb3JzLCB3ZSBleHBlY3QgdG8gZGVhbAorICogd2l0aCBhbGwgb2YgdGhlbS4KKyAqLworc3RhdGljIHZvaWQKK3BwYzR4eF9lY2NfZ2V0X3N0YXR1cyhjb25zdCBzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCSAgICAgIHN0cnVjdCBwcGM0eHhfZWNjX3N0YXR1cyAqc3RhdHVzKQoreworCWNvbnN0IHN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSAqcGRhdGEgPSBtY2ktPnB2dF9pbmZvOworCWNvbnN0IGRjcl9ob3N0X3QgKmRjcl9ob3N0ID0gJnBkYXRhLT5kY3JfaG9zdDsKKworCXN0YXR1cy0+ZWNjZXMgPSBtZnNkcmFtKGRjcl9ob3N0LCBTRFJBTV9FQ0NFUykgJiBTRFJBTV9FQ0NFU19NQVNLOworCXN0YXR1cy0+d21pcnEgPSBtZnNkcmFtKGRjcl9ob3N0LCBTRFJBTV9XTUlSUSkgJiBTRFJBTV9XTUlSUV9NQVNLOworCXN0YXR1cy0+YmVzciAgPSBtZnNkcmFtKGRjcl9ob3N0LCBTRFJBTV9CRVNSKSAgJiBTRFJBTV9CRVNSX01BU0s7CisJc3RhdHVzLT5iZWFybCA9IG1mc2RyYW0oZGNyX2hvc3QsIFNEUkFNX0JFQVJMKTsKKwlzdGF0dXMtPmJlYXJoID0gbWZzZHJhbShkY3JfaG9zdCwgU0RSQU1fQkVBUkgpOworfQorCisvKioKKyAqIHBwYzR4eF9lY2NfY2xlYXJfc3RhdHVzIC0gY2xlYXIgY29udHJvbGxlciBFQ0Mgc3RhdHVzCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdHVzIGJlaW5nIGNsZWFyZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlCisgKiAgICAgICAgICB2YWx1ZXMgdG8gd3JpdGUgdG8gY2xlYXIgdGhlIEVDQyBzdGF0dXMuCisgKgorICogVGhpcyByb3V0aW5lIGNsZWFycy0tYnkgd3JpdGluZyB0aGUgbWFza2VkIChhcyBhcHByb3ByaWF0ZSkgc3RhdHVzCisgKiB2YWx1ZXMgYmFjayB0by0tdGhlIHN0YXR1cyByZWdpc3RlcnMgdGhhdCBkZWFsIHdpdGgKKyAqIGlibSxzZHJhbS00eHgtZGRyMiBFQ0MgZXJyb3JzLgorICovCitzdGF0aWMgdm9pZAorcHBjNHh4X2VjY19jbGVhcl9zdGF0dXMoY29uc3Qgc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLAorCQkJY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMpCit7CisJY29uc3Qgc3RydWN0IHBwYzR4eF9lZGFjX3BkYXRhICpwZGF0YSA9IG1jaS0+cHZ0X2luZm87CisJY29uc3QgZGNyX2hvc3RfdCAqZGNyX2hvc3QgPSAmcGRhdGEtPmRjcl9ob3N0OworCisJbXRzZHJhbShkY3JfaG9zdCwgU0RSQU1fRUNDRVMsCXN0YXR1cy0+ZWNjZXMgJiBTRFJBTV9FQ0NFU19NQVNLKTsKKwltdHNkcmFtKGRjcl9ob3N0LCBTRFJBTV9XTUlSUSwJc3RhdHVzLT53bWlycSAmIFNEUkFNX1dNSVJRX01BU0spOworCW10c2RyYW0oZGNyX2hvc3QsIFNEUkFNX0JFU1IsCXN0YXR1cy0+YmVzciAmIFNEUkFNX0JFU1JfTUFTSyk7CisJbXRzZHJhbShkY3JfaG9zdCwgU0RSQU1fQkVBUkwsCTApOworCW10c2RyYW0oZGNyX2hvc3QsIFNEUkFNX0JFQVJILAkwKTsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19oYW5kbGVfY2UgLSBoYW5kbGUgY29udHJvbGxlciBjb3JyZWN0YWJsZSBFQ0MgZXJyb3IgKENFKQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGNvcnJlY3RhYmxlIGVycm9yIGJlaW5nIGhhbmRsZWQgYW5kIHJlcG9ydGVkLgorICogQHN0YXR1czogQSBwb2ludGVyIHRvIHRoZSBFQ0Mgc3RhdHVzIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGgKKyAqICAgICAgICAgIHRoZSBjb3JyZWN0YWJsZSBlcnJvciBiZWluZyBoYW5kbGVkIGFuZCByZXBvcnRlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBhbiBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBFQ0MKKyAqIGNvcnJlY3RhYmxlIGVycm9yLiBQZXIgdGhlIGFmb3JlbWVudGlvbmVkIGRpc2N1c3Npb24sIHRoZXJlJ3Mgbm90CisgKiBlbm91Z2ggc3RhdHVzIGF2YWlsYWJsZSB0byB1c2UgdGhlIGZ1bGwgRURBQyBjb3JyZWN0YWJsZSBlcnJvcgorICogaW50ZXJmYWNlLCBzbyB3ZSBqdXN0IHBhc3MgZHJpdmVyLXVuaXF1ZSBtZXNzYWdlIHRvIHRoZSAibm8gaW5mbyIKKyAqIGludGVyZmFjZS4KKyAqLworc3RhdGljIHZvaWQKK3BwYzR4eF9lZGFjX2hhbmRsZV9jZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCSAgICAgIGNvbnN0IHN0cnVjdCBwcGM0eHhfZWNjX3N0YXR1cyAqc3RhdHVzKQoreworCWludCByb3c7CisJY2hhciBtZXNzYWdlW1BQQzRYWF9FREFDX01FU1NBR0VfU0laRV07CisKKwlwcGM0eHhfZWRhY19nZW5lcmF0ZV9tZXNzYWdlKG1jaSwgc3RhdHVzLCBtZXNzYWdlLCBzaXplb2YobWVzc2FnZSkpOworCisJZm9yIChyb3cgPSAwOyByb3cgPCBtY2ktPm5yX2Nzcm93czsgcm93KyspCisJCWlmIChwcGM0eHhfZWRhY19jaGVja19iYW5rX2Vycm9yKHN0YXR1cywgcm93KSkKKwkJCWVkYWNfbWNfaGFuZGxlX2NlX25vX2luZm8obWNpLCBtZXNzYWdlKTsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19oYW5kbGVfdWUgLSBoYW5kbGUgY29udHJvbGxlciB1bmNvcnJlY3RhYmxlIEVDQyBlcnJvciAoVUUpCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5jb3JyZWN0YWJsZSBlcnJvciBiZWluZyBoYW5kbGVkIGFuZAorICogICAgICAgcmVwb3J0ZWQuCisgKiBAc3RhdHVzOiBBIHBvaW50ZXIgdG8gdGhlIEVDQyBzdGF0dXMgc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aAorICogICAgICAgICAgdGhlIHVuY29ycmVjdGFibGUgZXJyb3IgYmVpbmcgaGFuZGxlZCBhbmQgcmVwb3J0ZWQuCisgKgorICogVGhpcyByb3V0aW5lIGhhbmRsZXMgYW4gaWJtLHNkcmFtLTR4eC1kZHIyIGNvbnRyb2xsZXIgRUNDCisgKiB1bmNvcnJlY3RhYmxlIGVycm9yLgorICovCitzdGF0aWMgdm9pZAorcHBjNHh4X2VkYWNfaGFuZGxlX3VlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKKwkJICAgICAgY29uc3Qgc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzICpzdGF0dXMpCit7CisJY29uc3QgdTY0IGJlYXIgPSAoKHU2NClzdGF0dXMtPmJlYXJoIDw8IDMyIHwgc3RhdHVzLT5iZWFybCk7CisJY29uc3QgdW5zaWduZWQgbG9uZyBwYWdlID0gYmVhciA+PiBQQUdFX1NISUZUOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYmVhciAmIH5QQUdFX01BU0s7CisJaW50IHJvdzsKKwljaGFyIG1lc3NhZ2VbUFBDNFhYX0VEQUNfTUVTU0FHRV9TSVpFXTsKKworCXBwYzR4eF9lZGFjX2dlbmVyYXRlX21lc3NhZ2UobWNpLCBzdGF0dXMsIG1lc3NhZ2UsIHNpemVvZihtZXNzYWdlKSk7CisKKwlmb3IgKHJvdyA9IDA7IHJvdyA8IG1jaS0+bnJfY3Nyb3dzOyByb3crKykKKwkJaWYgKHBwYzR4eF9lZGFjX2NoZWNrX2JhbmtfZXJyb3Ioc3RhdHVzLCByb3cpKQorCQkJZWRhY19tY19oYW5kbGVfdWUobWNpLCBwYWdlLCBvZmZzZXQsIHJvdywgbWVzc2FnZSk7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfY2hlY2sgLSBjaGVjayBjb250cm9sbGVyIGZvciBFQ0MgZXJyb3JzCisgKiBAbWNpOiBBIHBvaW50ZXIgdG8gdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqICAgICAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgaWJtLHNkcmFtLTR4eC1kZHIyIGNvbnRyb2xsZXIgYmVpbmcKKyAqICAgICAgIGNoZWNrZWQuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gY2hlY2sgYW5kIHBvc3QgRUNDIGVycm9ycyBhbmQgaXMgY2FsbGVkIGJ5CisgKiBib3RoIHRoZSBFREFDIHBvbGxpbmcgdGhyZWFkIGFuZCB0aGlzIGRyaXZlcidzIENFIGFuZCBVRSBpbnRlcnJ1cHQKKyAqIGhhbmRsZXIuCisgKi8KK3N0YXRpYyB2b2lkCitwcGM0eHhfZWRhY19jaGVjayhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCit7CisjaWZkZWYgREVCVUcKKwlzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50OworI2VuZGlmCisJc3RydWN0IHBwYzR4eF9lY2Nfc3RhdHVzIHN0YXR1czsKKworCXBwYzR4eF9lY2NfZ2V0X3N0YXR1cyhtY2ksICZzdGF0dXMpOworCisjaWZkZWYgREVCVUcKKwlpZiAoY291bnQrKyAlIDMwID09IDApCisJCXBwYzR4eF9lY2NfZHVtcF9zdGF0dXMobWNpLCAmc3RhdHVzKTsKKyNlbmRpZgorCisJaWYgKHN0YXR1cy5lY2NlcyAmIFNEUkFNX0VDQ0VTX1VFKQorCQlwcGM0eHhfZWRhY19oYW5kbGVfdWUobWNpLCAmc3RhdHVzKTsKKworCWlmIChzdGF0dXMuZWNjZXMgJiBTRFJBTV9FQ0NFU19DRSkKKwkJcHBjNHh4X2VkYWNfaGFuZGxlX2NlKG1jaSwgJnN0YXR1cyk7CisKKwlwcGM0eHhfZWNjX2NsZWFyX3N0YXR1cyhtY2ksICZzdGF0dXMpOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2lzciAtIFNFQyAoQ0UpIGFuZCBERUQgKFVFKSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCisgKiBAaXJxOiAgICBUaGUgdmlydHVhbCBpbnRlcnJ1cHQgbnVtYmVyIGJlaW5nIHNlcnZpY2VkLgorICogQGRldl9pZDogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlCisgKiAgICAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVycnVwdCBiZWluZyBoYW5kbGVkLgorICoKKyAqIFRoaXMgcm91dGluZSBpbXBsZW1lbnRzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgYm90aCBjb3JyZWN0YWJsZQorICogKENFKSBhbmQgdW5jb3JyZWN0YWJsZSAoVUUpIEVDQyBlcnJvcnMgZm9yIHRoZSBpYm0sc2RyYW0tNHh4LWRkcjIKKyAqIGNvbnRyb2xsZXIuIEl0IHNpbXBseSBjYWxscyB0aHJvdWdoIHRvIHRoZSBzYW1lIHJvdXRpbmUgdXNlZCBkdXJpbmcKKyAqIHBvbGxpbmcgdG8gY2hlY2ssIHJlcG9ydCBhbmQgY2xlYXIgdGhlIEVDQyBzdGF0dXMuCisgKgorICogVW5jb25kaXRpb25hbGx5IHJldHVybnMgSVJRX0hBTkRMRUQuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdAorcHBjNHh4X2VkYWNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kgPSBkZXZfaWQ7CisKKwlwcGM0eHhfZWRhY19jaGVjayhtY2kpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2dldF9kdHlwZSAtIHJldHVybiB0aGUgY29udHJvbGxlciBtZW1vcnkgd2lkdGgKKyAqIEBtY29wdDE6IFRoZSAzMi1iaXQgTWVtb3J5IENvbnRyb2xsZXIgT3B0aW9uIDEgcmVnaXN0ZXIgdmFsdWUKKyAqICAgICAgICAgIGN1cnJlbnRseSBzZXQgZm9yIHRoZSBjb250cm9sbGVyLCBmcm9tIHdoaWNoIHRoZSB3aWR0aAorICogICAgICAgICAgaXMgZGVyaXZlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgRURBQyBkZXZpY2UgdHlwZSB3aWR0aCBhcHByb3ByaWF0ZSBmb3IgdGhlCisgKiBjdXJyZW50IGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbi4KKyAqCisgKiBUT0RPOiBUaGlzIG5lZWRzIHRvIGJlIGNvbmRpdGlvbmVkIGR5bmFtaWNhbGx5IHRocm91Z2ggZmVhdHVyZQorICogZmxhZ3Mgb3Igc29tZSBzdWNoIHdoZW4gb3RoZXIgY29udHJvbGxlciB2YXJpYW50cyBhcmUgc3VwcG9ydGVkIGFzCisgKiB0aGUgNDA1RVhbcl0gaXMgMTYtLzMyLWJpdCBhbmQgdGhlIG90aGVycyBhcmUgMzItLzY0LWJpdCB3aXRoIHRoZQorICogMTYtIGFuZCA2NC1iaXQgZmllbGQgZGVmaW5pdGlvbi92YWx1ZS9lbnVtZXJhdGlvbiAoYjEpIG92ZXJsb2FkZWQKKyAqIGFtb25nIHRoZW0uCisgKgorICogUmV0dXJucyBhIGRldmljZSB0eXBlIHdpZHRoIGVudW1lcmF0aW9uLgorICovCitzdGF0aWMgZW51bSBkZXZfdHlwZSBfX2RldmluaXQKK3BwYzR4eF9lZGFjX2dldF9kdHlwZSh1MzIgbWNvcHQxKQoreworCXN3aXRjaCAobWNvcHQxICYgU0RSQU1fTUNPUFQxX1dEVEhfTUFTSykgeworCWNhc2UgU0RSQU1fTUNPUFQxX1dEVEhfMTY6CisJCXJldHVybiBERVZfWDI7CisJY2FzZSBTRFJBTV9NQ09QVDFfV0RUSF8zMjoKKwkJcmV0dXJuIERFVl9YNDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gREVWX1VOS05PV047CisJfQorfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2dldF9tdHlwZSAtIHJldHVybiBjb250cm9sbGVyIG1lbW9yeSB0eXBlCisgKiBAbWNvcHQxOiBUaGUgMzItYml0IE1lbW9yeSBDb250cm9sbGVyIE9wdGlvbiAxIHJlZ2lzdGVyIHZhbHVlCisgKiAgICAgICAgICBjdXJyZW50bHkgc2V0IGZvciB0aGUgY29udHJvbGxlciwgZnJvbSB3aGljaCB0aGUgbWVtb3J5IHR5cGUKKyAqICAgICAgICAgIGlzIGRlcml2ZWQuCisgKgorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIEVEQUMgbWVtb3J5IHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZQorICogY3VycmVudCBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24uCisgKgorICogUmV0dXJucyBhIG1lbW9yeSB0eXBlIGVudW1lcmF0aW9uLgorICovCitzdGF0aWMgZW51bSBtZW1fdHlwZSBfX2RldmluaXQKK3BwYzR4eF9lZGFjX2dldF9tdHlwZSh1MzIgbWNvcHQxKQoreworCWJvb2wgcmRlbiA9ICgobWNvcHQxICYgU0RSQU1fTUNPUFQxX1JERU5fTUFTSykgPT0gU0RSQU1fTUNPUFQxX1JERU4pOworCisJc3dpdGNoIChtY29wdDEgJiBTRFJBTV9NQ09QVDFfRERSX1RZUEVfTUFTSykgeworCWNhc2UgU0RSQU1fTUNPUFQxX0REUjJfVFlQRToKKwkJcmV0dXJuIHJkZW4gPyBNRU1fUkREUjIgOiBNRU1fRERSMjsKKwljYXNlIFNEUkFNX01DT1BUMV9ERFIxX1RZUEU6CisJCXJldHVybiByZGVuID8gTUVNX1JERFIgOiBNRU1fRERSOworCWRlZmF1bHQ6CisJCXJldHVybiBNRU1fVU5LTk9XTjsKKwl9Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfaW5pdF9jc3Jvd3MgLSBpbnRpYWxpemUgZHJpdmVyIGluc3RhbmNlIHJvd3MKKyAqIEBtY2k6IEEgcG9pbnRlciB0byB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZQorICogICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBmb3Igd2hpY2gKKyAqICAgICAgIHRoZSBjc3Jvd3MgKGkuZS4gYmFua3MvcmFua3MpIGFyZSBiZWluZyBpbml0aWFsaXplZC4KKyAqIEBtY29wdDE6IFRoZSAzMi1iaXQgTWVtb3J5IENvbnRyb2xsZXIgT3B0aW9uIDEgcmVnaXN0ZXIgdmFsdWUKKyAqICAgICAgICAgIGN1cnJlbnRseSBzZXQgZm9yIHRoZSBjb250cm9sbGVyLCBmcm9tIHdoaWNoIGJhbmsgd2lkdGgKKyAqICAgICAgICAgIGFuZCBtZW1vcnkgdHlwIGluZm9ybWF0aW9uIGlzIGRlcml2ZWQuCisgKgorICogVGhpcyByb3V0aW5lIGludGlhbGl6ZXMgdGhlIHZpcnR1YWwgImNoaXAgc2VsZWN0IHJvd3MiIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UuIEFuIGlibSxzZHJhbS00eHgtZGRyMgorICogY29udHJvbGxlciBiYW5rL3JhbmsgaXMgbWFwcGVkIHRvIGEgcm93LgorICoKKyAqIFJldHVybnMgMCBpZiBPSzsgb3RoZXJ3aXNlLCAtRUlOVkFMIGlmIHRoZSBtZW1vcnkgYmFuayBzaXplCisgKiBjb25maWd1cmF0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcHBjNHh4X2VkYWNfaW5pdF9jc3Jvd3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpLCB1MzIgbWNvcHQxKQoreworCWNvbnN0IHN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSAqcGRhdGEgPSBtY2ktPnB2dF9pbmZvOworCWludCBzdGF0dXMgPSAwOworCWVudW0gbWVtX3R5cGUgbXR5cGU7CisJZW51bSBkZXZfdHlwZSBkdHlwZTsKKwllbnVtIGVkYWNfdHlwZSBlZGFjX21vZGU7CisJaW50IHJvdzsKKwl1MzIgbWJ4Y2YsIHNpemU7CisJc3RhdGljIHUzMiBwcGM0eHhfbGFzdF9wYWdlOworCisJLyogRXN0YWJsaXNoIHRoZSBtZW1vcnkgdHlwZSBhbmQgd2lkdGggKi8KKworCW10eXBlID0gcHBjNHh4X2VkYWNfZ2V0X210eXBlKG1jb3B0MSk7CisJZHR5cGUgPSBwcGM0eHhfZWRhY19nZXRfZHR5cGUobWNvcHQxKTsKKworCS8qIEVzdGFibGlzaCBFREFDIG1vZGUgKi8KKworCWlmIChtY2ktPmVkYWNfY2FwICYgRURBQ19GTEFHX1NFQ0RFRCkKKwkJZWRhY19tb2RlID0gRURBQ19TRUNERUQ7CisJZWxzZSBpZiAobWNpLT5lZGFjX2NhcCAmIEVEQUNfRkxBR19FQykKKwkJZWRhY19tb2RlID0gRURBQ19FQzsKKwllbHNlCisJCWVkYWNfbW9kZSA9IEVEQUNfTk9ORTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBlYWNoIGNoaXAgc2VsZWN0IHJvdyBzdHJ1Y3R1cmUgd2hpY2ggY29ycmVzcG9uZAorCSAqIDE6MSB3aXRoIGEgY29udHJvbGxlciBiYW5rL3JhbmsuCisJICovCisKKwlmb3IgKHJvdyA9IDA7IHJvdyA8IG1jaS0+bnJfY3Nyb3dzOyByb3crKykgeworCQlzdHJ1Y3QgY3Nyb3dfaW5mbyAqY3NpID0gJm1jaS0+Y3Nyb3dzW3Jvd107CisKKwkJLyoKKwkJICogR2V0IHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGlzCisJCSAqIHJvdy9iYW5rL3JhbmsgYW5kIHNraXAgZGlzYWJsZWQgYmFua3MuCisJCSAqLworCisJCW1ieGNmID0gbWZzZHJhbSgmcGRhdGEtPmRjcl9ob3N0LCBTRFJBTV9NQlhDRihyb3cpKTsKKworCQlpZiAoKG1ieGNmICYgU0RSQU1fTUJDRl9CRV9NQVNLKSAhPSBTRFJBTV9NQkNGX0JFX0VOQUJMRSkKKwkJCWNvbnRpbnVlOworCisJCS8qIE1hcCB0aGUgYmFuayBjb25maWd1cmF0aW9uIHNpemUgc2V0dGluZyB0byBwYWdlcy4gKi8KKworCQlzaXplID0gbWJ4Y2YgJiBTRFJBTV9NQkNGX1NaX01BU0s7CisKKwkJc3dpdGNoIChzaXplKSB7CisJCWNhc2UgU0RSQU1fTUJDRl9TWl80TUI6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl84TUI6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl8xNk1COgorCQljYXNlIFNEUkFNX01CQ0ZfU1pfMzJNQjoKKwkJY2FzZSBTRFJBTV9NQkNGX1NaXzY0TUI6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl8xMjhNQjoKKwkJY2FzZSBTRFJBTV9NQkNGX1NaXzI1Nk1COgorCQljYXNlIFNEUkFNX01CQ0ZfU1pfNTEyTUI6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl8xR0I6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl8yR0I6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl80R0I6CisJCWNhc2UgU0RSQU1fTUJDRl9TWl84R0I6CisJCQljc2ktPm5yX3BhZ2VzID0gU0RSQU1fTUJDRl9TWl9UT19QQUdFUyhzaXplKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHBjNHh4X2VkYWNfbWNfcHJpbnRrKEtFUk5fRVJSLCBtY2ksCisJCQkJCSAgICAgICJVbnJlY29nbml6ZWQgbWVtb3J5IGJhbmsgJWQgIgorCQkJCQkgICAgICAic2l6ZSAweCUwOHhcbiIsCisJCQkJCSAgICAgIHJvdywgU0RSQU1fTUJDRl9TWl9ERUNPREUoc2l6ZSkpOworCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWNzaS0+Zmlyc3RfcGFnZSA9IHBwYzR4eF9sYXN0X3BhZ2U7CisJCWNzaS0+bGFzdF9wYWdlCT0gY3NpLT5maXJzdF9wYWdlICsgY3NpLT5ucl9wYWdlcyAtIDE7CisJCWNzaS0+cGFnZV9tYXNrCT0gMDsKKworCQkvKgorCQkgKiBJdCdzIHVuY2xlYXIgZXhhY3RseSB3aGF0IGdyYWluIHNob3VsZCBiZSBzZXQgdG8KKwkJICogaGVyZS4gVGhlIFNEUkFNX0VDQ0VTIHJlZ2lzdGVyIGFsbG93cyByZXNvbHV0aW9uIG9mCisJCSAqIGFuIGVycm9yIGRvd24gdG8gYSBuaWJibGUgd2hpY2ggd291bGQgcG90ZW50aWFsbHkKKwkJICogYXJndWUgZm9yIGEgZ3JhaW4gb2YgJzEnIGJ5dGUsIGV2ZW4gdGhvdWdoIHdlIG9ubHkKKwkJICoga25vdyB0aGUgYXNzb2NpYXRlZCBhZGRyZXNzIGZvciB1bmNvcnJlY3RhYmxlCisJCSAqIGVycm9ycy4gVGhpcyB2YWx1ZSBpcyBub3QgdXNlZCBhdCBwcmVzZW50IGZvcgorCQkgKiBhbnl0aGluZyBvdGhlciB0aGFuIGVycm9yIHJlcG9ydGluZyBzbyBnZXR0aW5nIGl0CisJCSAqIHdyb25nIHNob3VsZCBiZSBvZiBsaXR0bGUgY29uc2VxdWVuY2UuIE90aGVyCisJCSAqIHBvc3NpYmxlIHZhbHVlcyB3b3VsZCBiZSB0aGUgUExCIHdpZHRoICgxNiksIHRoZQorCQkgKiBwYWdlIHNpemUgKFBBR0VfU0laRSkgb3IgdGhlIG1lbW9yeSB3aWR0aCAoMiBvciA0KS4KKwkJICovCisKKwkJY3NpLT5ncmFpbgk9IDE7CisKKwkJY3NpLT5tdHlwZQk9IG10eXBlOworCQljc2ktPmR0eXBlCT0gZHR5cGU7CisKKwkJY3NpLT5lZGFjX21vZGUJPSBlZGFjX21vZGU7CisKKwkJcHBjNHh4X2xhc3RfcGFnZSArPSBjc2ktPm5yX3BhZ2VzOworCX0KKworIGRvbmU6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19tY19pbml0IC0gaW50aWFsaXplIGRyaXZlciBpbnN0YW5jZQorICogQG1jaTogQSBwb2ludGVyIHRvIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGJlaW5nCisgKiAgICAgICBpbml0aWFsaXplZC4KKyAqIEBvcDogQSBwb2ludGVyIHRvIHRoZSBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgbm9kZSBhc3NvY2lhdGVkCisgKiAgICAgIHdpdGggdGhlIGNvbnRyb2xsZXIgdGhpcyBFREFDIGluc3RhbmNlIGlzIGJvdW5kIHRvLgorICogQG1hdGNoOiBBIHBvaW50ZXIgdG8gdGhlIE9wZW5GaXJtd2FyZSBkZXZpY2UgdHJlZSBtYXRjaAorICogICAgICAgICBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRyb2xsZXIgdGhpcyBFREFDIGluc3RhbmNlCisgKiAgICAgICAgIGlzIGJvdW5kIHRvLgorICogQGRjcl9ob3N0OiBBIHBvaW50ZXIgdG8gdGhlIERDUiBkYXRhIGNvbnRhaW5pbmcgdGhlIERDUiBtYXBwaW5nCisgKiAgICAgICAgICAgIGZvciB0aGlzIGNvbnRyb2xsZXIgaW5zdGFuY2UuCisgKiBAbWNvcHQxOiBUaGUgMzItYml0IE1lbW9yeSBDb250cm9sbGVyIE9wdGlvbiAxIHJlZ2lzdGVyIHZhbHVlCisgKiAgICAgICAgICBjdXJyZW50bHkgc2V0IGZvciB0aGUgY29udHJvbGxlciwgZnJvbSB3aGljaCBFQ0MgY2FwYWJpbGl0aWVzCisgKiAgICAgICAgICBhbmQgc2NydWIgbW9kZSBhcmUgZGVyaXZlZC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgaW5pdGlhbGl6YXRpb24gb2YgdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIKKyAqIGluc3RhbmNlIGFuZCByZWxhdGVkIGRyaXZlci1wcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogaWJtLHNkcmFtLTR4eC1kZHIyIG1lbW9yeSBjb250cm9sbGVyIHRoZSBpbnN0YW5jZSBpcyBib3VuZCB0by4KKyAqCisgKiBSZXR1cm5zIDAgaWYgT0s7IG90aGVyd2lzZSwgPCAwIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdAorcHBjNHh4X2VkYWNfbWNfaW5pdChzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksCisJCSAgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKKwkJICAgIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoLAorCQkgICAgY29uc3QgZGNyX2hvc3RfdCAqZGNyX2hvc3QsCisJCSAgICB1MzIgbWNvcHQxKQoreworCWludCBzdGF0dXMgPSAwOworCWNvbnN0IHUzMiBtZW1jaGVjayA9IChtY29wdDEgJiBTRFJBTV9NQ09QVDFfTUNIS19NQVNLKTsKKwlzdHJ1Y3QgcHBjNHh4X2VkYWNfcGRhdGEgKnBkYXRhID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb3AtPm5vZGU7CisKKwlpZiAobWF0Y2ggPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBJbml0aWFsIGRyaXZlciBwb2ludGVycyBhbmQgcHJpdmF0ZSBkYXRhICovCisKKwltY2ktPmRldgkJPSAmb3AtPmRldjsKKworCWRldl9zZXRfZHJ2ZGF0YShtY2ktPmRldiwgbWNpKTsKKworCXBkYXRhCQkJPSBtY2ktPnB2dF9pbmZvOworCisJcGRhdGEtPmRjcl9ob3N0CQk9ICpkY3JfaG9zdDsKKwlwZGF0YS0+aXJxcy5zZWMJCT0gTk9fSVJROworCXBkYXRhLT5pcnFzLmRlZAkJPSBOT19JUlE7CisKKwkvKiBJbml0aWFsaXplIGNvbnRyb2xsZXIgY2FwYWJpbGl0aWVzIGFuZCBjb25maWd1cmF0aW9uICovCisKKwltY2ktPm10eXBlX2NhcAkJPSAoTUVNX0ZMQUdfRERSIHwgTUVNX0ZMQUdfUkREUiB8CisJCQkJICAgTUVNX0ZMQUdfRERSMiB8IE1FTV9GTEFHX1JERFIyKTsKKworCW1jaS0+ZWRhY19jdGxfY2FwCT0gKEVEQUNfRkxBR19OT05FIHwKKwkJCQkgICBFREFDX0ZMQUdfRUMgfAorCQkJCSAgIEVEQUNfRkxBR19TRUNERUQpOworCisJbWNpLT5zY3J1Yl9jYXAJCT0gU0NSVUJfTk9ORTsKKwltY2ktPnNjcnViX21vZGUJCT0gU0NSVUJfTk9ORTsKKworCS8qCisJICogVXBkYXRlIHRoZSBhY3R1YWwgY2FwYWJpbGl0ZXMgYmFzZWQgb24gdGhlIE1DT1BUMVtNQ0hLXQorCSAqIHNldHRpbmdzLiBTY3J1YmJpbmcgaXMgb25seSB1c2VmdWwgaWYgcmVwb3J0aW5nIGlzIGVuYWJsZWQuCisJICovCisKKwlzd2l0Y2ggKG1lbWNoZWNrKSB7CisJY2FzZSBTRFJBTV9NQ09QVDFfTUNIS19DSEs6CisJCW1jaS0+ZWRhY19jYXAJPSBFREFDX0ZMQUdfRUM7CisJCWJyZWFrOworCWNhc2UgU0RSQU1fTUNPUFQxX01DSEtfQ0hLX1JFUDoKKwkJbWNpLT5lZGFjX2NhcAk9IChFREFDX0ZMQUdfRUMgfCBFREFDX0ZMQUdfU0VDREVEKTsKKwkJbWNpLT5zY3J1Yl9tb2RlCT0gU0NSVUJfU1dfU1JDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltY2ktPmVkYWNfY2FwCT0gRURBQ19GTEFHX05PTkU7CisJCWJyZWFrOworCX0KKworCS8qIEluaXRpYWxpemUgc3RyaW5ncyAqLworCisJbWNpLT5tb2RfbmFtZQkJPSBQUEM0WFhfRURBQ19NT0RVTEVfTkFNRTsKKwltY2ktPm1vZF92ZXIJCT0gUFBDNFhYX0VEQUNfTU9EVUxFX1JFVklTSU9OOworCW1jaS0+Y3RsX25hbWUJCT0gbWF0Y2gtPmNvbXBhdGlibGUsCisJbWNpLT5kZXZfbmFtZQkJPSBucC0+ZnVsbF9uYW1lOworCisJLyogSW5pdGlhbGl6ZSBjYWxsYmFja3MgKi8KKworCW1jaS0+ZWRhY19jaGVjawkJPSBwcGM0eHhfZWRhY19jaGVjazsKKwltY2ktPmN0bF9wYWdlX3RvX3BoeXMJPSBOVUxMOworCisJLyogSW5pdGlhbGl6ZSBjaGlwIHNlbGVjdCByb3dzICovCisKKwlzdGF0dXMgPSBwcGM0eHhfZWRhY19pbml0X2Nzcm93cyhtY2ksIG1jb3B0MSk7CisKKwlpZiAoc3RhdHVzKQorCQlwcGM0eHhfZWRhY19tY19wcmludGsoS0VSTl9FUlIsIG1jaSwKKwkJCQkgICAgICAiRmFpbGVkIHRvIGluaXRpYWxpemUgcm93cyFcbiIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19yZWdpc3Rlcl9pcnEgLSBzZXR1cCBhbmQgcmVnaXN0ZXIgY29udHJvbGxlciBpbnRlcnJ1cHRzCisgKiBAb3A6IEEgcG9pbnRlciB0byB0aGUgT3BlbkZpcm13YXJlIGRldmljZSB0cmVlIG5vZGUgYXNzb2NpYXRlZAorICogICAgICB3aXRoIHRoZSBjb250cm9sbGVyIHRoaXMgRURBQyBpbnN0YW5jZSBpcyBib3VuZCB0by4KKyAqIEBtY2k6IEEgcG9pbnRlciB0byB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZQorICogICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBmb3Igd2hpY2gKKyAqICAgICAgIGludGVycnVwdHMgYXJlIGJlaW5nIHJlZ2lzdGVyZWQuCisgKgorICogVGhpcyByb3V0aW5lIHBhcnNlcyB0aGUgY29ycmVjdGFibGUgKENFKSBhbmQgdW5jb3JyZWN0YWJsZSBlcnJvciAoVUUpCisgKiBpbnRlcnJ1cHRzIGZyb20gdGhlIGRldmljZSB0cmVlIG5vZGUgYW5kIG1hcHMgYW5kIGFzc2lnbnMgdGhlbSB0bworICogdGhlIGFzc29jaWF0ZWQgRURBQyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgT0s7IG90aGVyd2lzZSwgLUVOT0RFViBpZiB0aGUgaW50ZXJydXB0cyBjb3VsZCBub3QgYmUKKyAqIG1hcHBlZCBhbmQgYXNzaWduZWQuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0CitwcGM0eHhfZWRhY19yZWdpc3Rlcl9pcnEoc3RydWN0IG9mX2RldmljZSAqb3AsIHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlpbnQgZGVkX2lycSwgc2VjX2lycTsKKwlzdHJ1Y3QgcHBjNHh4X2VkYWNfcGRhdGEgKnBkYXRhID0gbWNpLT5wdnRfaW5mbzsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb3AtPm5vZGU7CisKKwlkZWRfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIElOVE1BUF9FQ0NERURfSU5ERVgpOworCXNlY19pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgSU5UTUFQX0VDQ1NFQ19JTkRFWCk7CisKKwlpZiAoZGVkX2lycSA9PSBOT19JUlEgfHwgc2VjX2lycSA9PSBOT19JUlEpIHsKKwkJcHBjNHh4X2VkYWNfbWNfcHJpbnRrKEtFUk5fRVJSLCBtY2ksCisJCQkJICAgICAgIlVuYWJsZSB0byBtYXAgaW50ZXJydXB0cy5cbiIpOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorCisJc3RhdHVzID0gcmVxdWVzdF9pcnEoZGVkX2lycSwKKwkJCSAgICAgcHBjNHh4X2VkYWNfaXNyLAorCQkJICAgICBJUlFGX0RJU0FCTEVELAorCQkJICAgICAiW0VEQUNdIE1DIEVDQ0RFRCIsCisJCQkgICAgIG1jaSk7CisKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlwcGM0eHhfZWRhY19tY19wcmludGsoS0VSTl9FUlIsIG1jaSwKKwkJCQkgICAgICAiVW5hYmxlIHRvIHJlcXVlc3QgaXJxICVkIGZvciBFQ0MgREVEIiwKKwkJCQkgICAgICBkZWRfaXJxKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsMTsKKwl9CisKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShzZWNfaXJxLAorCQkJICAgICBwcGM0eHhfZWRhY19pc3IsCisJCQkgICAgIElSUUZfRElTQUJMRUQsCisJCQkgICAgICJbRURBQ10gTUMgRUNDU0VDIiwKKwkJCSAgICAgbWNpKTsKKworCWlmIChzdGF0dXMgPCAwKSB7CisJCXBwYzR4eF9lZGFjX21jX3ByaW50ayhLRVJOX0VSUiwgbWNpLAorCQkJCSAgICAgICJVbmFibGUgdG8gcmVxdWVzdCBpcnEgJWQgZm9yIEVDQyBTRUMiLAorCQkJCSAgICAgIHNlY19pcnEpOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGZhaWwyOworCX0KKworCXBwYzR4eF9lZGFjX21jX3ByaW50ayhLRVJOX0lORk8sIG1jaSwgIkVDQ0RFRCBpcnEgaXMgJWRcbiIsIGRlZF9pcnEpOworCXBwYzR4eF9lZGFjX21jX3ByaW50ayhLRVJOX0lORk8sIG1jaSwgIkVDQ1NFQyBpcnEgaXMgJWRcbiIsIHNlY19pcnEpOworCisJcGRhdGEtPmlycXMuZGVkID0gZGVkX2lycTsKKwlwZGF0YS0+aXJxcy5zZWMgPSBzZWNfaXJxOworCisJcmV0dXJuIDA7CisKKyBmYWlsMjoKKwlmcmVlX2lycShzZWNfaXJxLCBtY2kpOworCisgZmFpbDE6CisJZnJlZV9pcnEoZGVkX2lycSwgbWNpKTsKKworIGZhaWw6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19tYXBfZGNycyAtIGxvY2F0ZSBhbmQgbWFwIGNvbnRyb2xsZXIgcmVnaXN0ZXJzCisgKiBAbnA6IEEgcG9pbnRlciB0byB0aGUgZGV2aWNlIHRyZWUgbm9kZSBjb250YWluaW5nIHRoZSBEQ1IKKyAqICAgICAgcmVzb3VyY2VzIHRvIG1hcC4KKyAqIEBkY3JfaG9zdDogQSBwb2ludGVyIHRvIHRoZSBEQ1IgZGF0YSB0byBwb3B1bGF0ZSB3aXRoIHRoZQorICogICAgICAgICAgICBEQ1IgbWFwcGluZy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYXR0ZW1wdHMgdG8gbG9jYXRlIGluIHRoZSBkZXZpY2UgdHJlZSBhbmQgbWFwIHRoZSBEQ1IKKyAqIHJlZ2lzdGVyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRyb2xsZXIncyBpbmRpcmVjdCBEQ1IKKyAqIGFkZHJlc3MgYW5kIGRhdGEgd2luZG93cy4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIERDUnMgd2VyZSBzdWNjZXNzZnVsbHkgbWFwcGVkOyBvdGhlcndpc2UsIDwgMCBvbgorICogZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0CitwcGM0eHhfZWRhY19tYXBfZGNycyhjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBkY3JfaG9zdF90ICpkY3JfaG9zdCkKK3sKKwl1bnNpZ25lZCBpbnQgZGNyX2Jhc2UsIGRjcl9sZW47CisKKwlpZiAobnAgPT0gTlVMTCB8fCBkY3JfaG9zdCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEdldCB0aGUgRENSIHJlc291cmNlIGV4dGVudCBhbmQgc2FuaXR5IGNoZWNrIHRoZSB2YWx1ZXMuICovCisKKwlkY3JfYmFzZSA9IGRjcl9yZXNvdXJjZV9zdGFydChucCwgMCk7CisJZGNyX2xlbiA9IGRjcl9yZXNvdXJjZV9sZW4obnAsIDApOworCisJaWYgKGRjcl9iYXNlID09IDAgfHwgZGNyX2xlbiA9PSAwKSB7CisJCXBwYzR4eF9lZGFjX3ByaW50ayhLRVJOX0VSUiwKKwkJCQkgICAiRmFpbGVkIHRvIG9idGFpbiBEQ1IgcHJvcGVydHkuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGRjcl9sZW4gIT0gU0RSQU1fRENSX1JFU09VUkNFX0xFTikgeworCQlwcGM0eHhfZWRhY19wcmludGsoS0VSTl9FUlIsCisJCQkJICAgIlVuZXhwZWN0ZWQgRENSIGxlbmd0aCAlZCwgZXhwZWN0ZWQgJWQuXG4iLAorCQkJCSAgIGRjcl9sZW4sIFNEUkFNX0RDUl9SRVNPVVJDRV9MRU4pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiAgQXR0ZW1wdCB0byBtYXAgdGhlIERDUiBleHRlbnQuICovCisKKwkqZGNyX2hvc3QgPSBkY3JfbWFwKG5wLCBkY3JfYmFzZSwgZGNyX2xlbik7CisKKwlpZiAoIURDUl9NQVBfT0soKmRjcl9ob3N0KSkgeworCQlwcGM0eHhfZWRhY19wcmludGsoS0VSTl9JTkZPLCAiRmFpbGVkIHRvIG1hcCBEQ1JzLlxuIik7CisJCSAgICByZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwcGM0eHhfZWRhY19wcm9iZSAtIGNoZWNrIGNvbnRyb2xsZXIgYW5kIGJpbmQgZHJpdmVyCisgKiBAb3A6IEEgcG9pbnRlciB0byB0aGUgT3BlbkZpcm13YXJlIGRldmljZSB0cmVlIG5vZGUgYXNzb2NpYXRlZAorICogICAgICB3aXRoIHRoZSBjb250cm9sbGVyIGJlaW5nIHByb2JlZCBmb3IgZHJpdmVyIGJpbmRpbmcuCisgKiBAbWF0Y2g6IEEgcG9pbnRlciB0byB0aGUgT3BlbkZpcm13YXJlIGRldmljZSB0cmVlIG1hdGNoCisgKiAgICAgICAgIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udHJvbGxlciBiZWluZyBwcm9iZWQKKyAqICAgICAgICAgZm9yIGRyaXZlciBiaW5kaW5nLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9iZXMgYSBzcGVjaWZpYyBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlcgorICogaW5zdGFuY2UgZm9yIGJpbmRpbmcgd2l0aCB0aGUgZHJpdmVyLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgY29udHJvbGxlciBpbnN0YW5jZSB3YXMgc3VjY2Vzc2Z1bGx5IGJvdW5kIHRvIHRoZQorICogZHJpdmVyOyBvdGhlcndpc2UsIDwgMCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCBfX2RldmluaXQKK3BwYzR4eF9lZGFjX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwl1MzIgbWNvcHQxLCBtZW1jaGVjazsKKwlkY3JfaG9zdF90IGRjcl9ob3N0OworCWNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvcC0+bm9kZTsKKwlzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kgPSBOVUxMOworCXN0YXRpYyBpbnQgcHBjNHh4X2VkYWNfaW5zdGFuY2U7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIHdlIG9ubHkgc3VwcG9ydCB0aGUgY29udHJvbGxlciByZWFsaXplZCBvbgorCSAqIHRoZSBBTUNDIFBQQyA0MDVFWFtyXS4gUmVqZWN0IGFueXRoaW5nIGVsc2UuCisJICovCisKKwlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLHNkcmFtLTQwNWV4IikgJiYKKwkgICAgIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiaWJtLHNkcmFtLTQwNWV4ciIpKSB7CisJCXBwYzR4eF9lZGFjX3ByaW50ayhLRVJOX05PVElDRSwKKwkJCQkgICAiT25seSB0aGUgUFBDNDA1RVhbcl0gaXMgc3VwcG9ydGVkLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qCisJICogTmV4dCwgZ2V0IHRoZSBEQ1IgcHJvcGVydHkgYW5kIGF0dGVtcHQgdG8gbWFwIGl0IHNvIHRoYXQgd2UKKwkgKiBjYW4gcHJvYmUgdGhlIGNvbnRyb2xsZXIuCisJICovCisKKwlzdGF0dXMgPSBwcGM0eHhfZWRhY19tYXBfZGNycyhucCwgJmRjcl9ob3N0KTsKKworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwkvKgorCSAqIEZpcnN0IGRldGVybWluZSB3aGV0aGVyIEVDQyBpcyBlbmFibGVkIGF0IGFsbC4gSWYgbm90LAorCSAqIHRoZXJlIGlzIG5vIHVzZWZ1bCBjaGVja2luZyBvciBtb25pdG9yaW5nIHRoYXQgY2FuIGJlIGRvbmUKKwkgKiBmb3IgdGhpcyBjb250cm9sbGVyLgorCSAqLworCisJbWNvcHQxID0gbWZzZHJhbSgmZGNyX2hvc3QsIFNEUkFNX01DT1BUMSk7CisJbWVtY2hlY2sgPSAobWNvcHQxICYgU0RSQU1fTUNPUFQxX01DSEtfTUFTSyk7CisKKwlpZiAobWVtY2hlY2sgPT0gU0RSQU1fTUNPUFQxX01DSEtfTk9OKSB7CisJCXBwYzR4eF9lZGFjX3ByaW50ayhLRVJOX0lORk8sICIlczogTm8gRUNDIG1lbW9yeSBkZXRlY3RlZCBvciAiCisJCQkJICAgIkVDQyBpcyBkaXNhYmxlZC5cbiIsIG5wLT5mdWxsX25hbWUpOworCQlzdGF0dXMgPSAtRU5PREVWOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50LCB3ZSBrbm93IEVDQyBpcyBlbmFibGVkLCBhbGxvY2F0ZSBhbiBFREFDCisJICogY29udHJvbGxlciBpbnN0YW5jZSBhbmQgcGVyZm9ybSB0aGUgYXBwcm9wcmlhdGUKKwkgKiBpbml0aWFsaXphdGlvbi4KKwkgKi8KKworCW1jaSA9IGVkYWNfbWNfYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcGM0eHhfZWRhY19wZGF0YSksCisJCQkgICAgcHBjNHh4X2VkYWNfbnJfY3Nyb3dzLAorCQkJICAgIHBwYzR4eF9lZGFjX25yX2NoYW5zLAorCQkJICAgIHBwYzR4eF9lZGFjX2luc3RhbmNlKTsKKworCWlmIChtY2kgPT0gTlVMTCkgeworCQlwcGM0eHhfZWRhY19wcmludGsoS0VSTl9FUlIsICIlczogIgorCQkJCSAgICJGYWlsZWQgdG8gYWxsb2NhdGUgRURBQyBNQyBpbnN0YW5jZSFcbiIsCisJCQkJICAgbnAtPmZ1bGxfbmFtZSk7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gZG9uZTsKKwl9CisKKwlzdGF0dXMgPSBwcGM0eHhfZWRhY19tY19pbml0KG1jaSwgb3AsIG1hdGNoLCAmZGNyX2hvc3QsIG1jb3B0MSk7CisKKwlpZiAoc3RhdHVzKSB7CisJCXBwYzR4eF9lZGFjX21jX3ByaW50ayhLRVJOX0VSUiwgbWNpLAorCQkJCSAgICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBpbnN0YW5jZSFcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIGEgdmFsaWQsIGluaXRpYWxpemVkIEVEQUMgaW5zdGFuY2UgYm91bmQgdG8gdGhlCisJICogY29udHJvbGxlci4gQXR0ZW1wdCB0byByZWdpc3RlciBpdCB3aXRoIHRoZSBFREFDIHN1YnN5c3RlbQorCSAqIGFuZCwgaWYgbmVjZXNzYXJ5LCByZWdpc3RlciBpbnRlcnJ1cHRzLgorCSAqLworCisJaWYgKGVkYWNfbWNfYWRkX21jKG1jaSkpIHsKKwkJcHBjNHh4X2VkYWNfbWNfcHJpbnRrKEtFUk5fRVJSLCBtY2ksCisJCQkJICAgICAgIkZhaWxlZCB0byBhZGQgaW5zdGFuY2UhXG4iKTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWlmIChlZGFjX29wX3N0YXRlID09IEVEQUNfT1BTVEFURV9JTlQpIHsKKwkJc3RhdHVzID0gcHBjNHh4X2VkYWNfcmVnaXN0ZXJfaXJxKG9wLCBtY2kpOworCisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGZhaWwxOworCX0KKworCXBwYzR4eF9lZGFjX2luc3RhbmNlKys7CisKKwlyZXR1cm4gMDsKKworIGZhaWwxOgorCWVkYWNfbWNfZGVsX21jKG1jaS0+ZGV2KTsKKworIGZhaWw6CisJZWRhY19tY19mcmVlKG1jaSk7CisKKyBkb25lOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfcmVtb3ZlIC0gdW5iaW5kIGRyaXZlciBmcm9tIGNvbnRyb2xsZXIKKyAqIEBvcDogQSBwb2ludGVyIHRvIHRoZSBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgbm9kZSBhc3NvY2lhdGVkCisgKiAgICAgIHdpdGggdGhlIGNvbnRyb2xsZXIgdGhpcyBFREFDIGluc3RhbmNlIGlzIHRvIGJlIHVuYm91bmQvcmVtb3ZlZAorICogICAgICBmcm9tLgorICoKKyAqIFRoaXMgcm91dGluZSB1bmJpbmRzIHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIGluc3RhbmNlIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIHNwZWNpZmllZCBpYm0sc2RyYW0tNHh4LWRkcjIgY29udHJvbGxlciBkZXNjcmliZWQgYnkgdGhlCisgKiBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgbm9kZSBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuCisgKgorICogVW5jb25kaXRpb25hbGx5IHJldHVybnMgMC4KKyAqLworc3RhdGljIGludAorcHBjNHh4X2VkYWNfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQoreworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IGRldl9nZXRfZHJ2ZGF0YSgmb3AtPmRldik7CisJc3RydWN0IHBwYzR4eF9lZGFjX3BkYXRhICpwZGF0YSA9IG1jaS0+cHZ0X2luZm87CisKKwlpZiAoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfSU5UKSB7CisJCWZyZWVfaXJxKHBkYXRhLT5pcnFzLnNlYywgbWNpKTsKKwkJZnJlZV9pcnEocGRhdGEtPmlycXMuZGVkLCBtY2kpOworCX0KKworCWRjcl91bm1hcChwZGF0YS0+ZGNyX2hvc3QsIFNEUkFNX0RDUl9SRVNPVVJDRV9MRU4pOworCisJZWRhY19tY19kZWxfbWMobWNpLT5kZXYpOworCWVkYWNfbWNfZnJlZShtY2kpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfb3BzdGF0ZV9pbml0IC0gaW5pdGlhbGl6ZSBFREFDIHJlcG9ydGluZyBtZXRob2QKKyAqCisgKiBUaGlzIHJvdXRpbmUgZW5zdXJlcyB0aGF0IHRoZSBFREFDIG1lbW9yeSBjb250cm9sbGVyIHJlcG9ydGluZworICogbWV0aG9kIGlzIG1hcHBlZCB0byBhIHNhbmUgdmFsdWUgYXMgdGhlIEVEQUMgY29yZSBkZWZpbmVzIHRoZSB2YWx1ZQorICogdG8gRURBQ19PUFNUQVRFX0lOVkFMIGJ5IGRlZmF1bHQuIFdlIGRvbid0IGNhbGwgdGhlIGdsb2JhbAorICogb3BzdGF0ZV9pbml0IGFzIHRoYXQgZGVmYXVsdHMgdG8gcG9sbGluZyBhbmQgd2Ugd2FudCBpbnRlcnJ1cHQgYXMKKyAqIHRoZSBkZWZhdWx0LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0CitwcGM0eHhfZWRhY19vcHN0YXRlX2luaXQodm9pZCkKK3sKKwlzd2l0Y2ggKGVkYWNfb3Bfc3RhdGUpIHsKKwljYXNlIEVEQUNfT1BTVEFURV9QT0xMOgorCWNhc2UgRURBQ19PUFNUQVRFX0lOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZWRhY19vcF9zdGF0ZSA9IEVEQUNfT1BTVEFURV9JTlQ7CisJCWJyZWFrOworCX0KKworCXBwYzR4eF9lZGFjX3ByaW50ayhLRVJOX0lORk8sICJSZXBvcnRpbmcgdHlwZTogJXNcbiIsCisJCQkgICAoKGVkYWNfb3Bfc3RhdGUgPT0gRURBQ19PUFNUQVRFX1BPTEwpID8KKwkJCSAgICBFREFDX09QU1RBVEVfUE9MTF9TVFIgOgorCQkJICAgICgoZWRhY19vcF9zdGF0ZSA9PSBFREFDX09QU1RBVEVfSU5UKSA/CisJCQkgICAgIEVEQUNfT1BTVEFURV9JTlRfU1RSIDoKKwkJCSAgICAgRURBQ19PUFNUQVRFX1VOS05PV05fU1RSKSkpOworfQorCisvKioKKyAqIHBwYzR4eF9lZGFjX2luaXQgLSBkcml2ZXIvbW9kdWxlIGluc2VydGlvbiBlbnRyeSBwb2ludAorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZHJpdmVyL21vZHVsZSBpbnNlcnRpb24gZW50cnkgcG9pbnQuIEl0CisgKiBpbml0aWFsaXplcyB0aGUgRURBQyBtZW1vcnkgY29udHJvbGxlciByZXBvcnRpbmcgc3RhdGUgYW5kCisgKiByZWdpc3RlcnMgdGhlIGRyaXZlciBhcyBhbiBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgcGxhdGZvcm0KKyAqIGRyaXZlci4KKyAqLworc3RhdGljIGludCBfX2luaXQKK3BwYzR4eF9lZGFjX2luaXQodm9pZCkKK3sKKwlwcGM0eHhfZWRhY19wcmludGsoS0VSTl9JTkZPLCBQUEM0WFhfRURBQ19NT0RVTEVfUkVWSVNJT04gIlxuIik7CisKKwlwcGM0eHhfZWRhY19vcHN0YXRlX2luaXQoKTsKKworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnBwYzR4eF9lZGFjX2RyaXZlcik7Cit9CisKKy8qKgorICogcHBjNHh4X2VkYWNfZXhpdCAtIGRyaXZlci9tb2R1bGUgcmVtb3ZhbCBlbnRyeSBwb2ludAorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0aGUgZHJpdmVyL21vZHVsZSByZW1vdmFsIGVudHJ5IHBvaW50LiBJdAorICogdW5yZWdpc3RlcnMgdGhlIGRyaXZlciBhcyBhbiBPcGVuRmlybXdhcmUgZGV2aWNlIHRyZWUgcGxhdGZvcm0KKyAqIGRyaXZlci4KKyAqLworc3RhdGljIHZvaWQgX19leGl0CitwcGM0eHhfZWRhY19leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnBwYzR4eF9lZGFjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBwYzR4eF9lZGFjX2luaXQpOworbW9kdWxlX2V4aXQocHBjNHh4X2VkYWNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIkdyYW50IEVyaWNrc29uIDxnZXJpY2tzb25AbnVvdmF0aW9ucy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkVEQUMgTUMgRHJpdmVyIGZvciB0aGUgUFBDNHh4IElCTSBERFIyIE1lbW9yeSBDb250cm9sbGVyIik7Cittb2R1bGVfcGFyYW0oZWRhY19vcF9zdGF0ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZWRhY19vcF9zdGF0ZSwgIkVEQUMgRXJyb3IgUmVwb3J0aW5nIFN0YXRlOiAiCisJCSAiMD0iIEVEQUNfT1BTVEFURV9QT0xMX1NUUiAiLCAyPSIgRURBQ19PUFNUQVRFX0lOVF9TVFIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmggYi9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzE1NDc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggTnVvdmF0aW9uIFN5c3RlbSBEZXNpZ25zLCBMTEMKKyAqICAgR3JhbnQgRXJpY2tzb24gPGdlcmlja3NvbkBudW92YXRpb25zLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgZGVmaW5lcyBwcm9jZXNzb3IgbW5lbW9uaWNzIGZvciBhY2Nlc3NpbmcgYW5kIG1hbmFnaW5nCisgKiB0aGUgSUJNIEREUjEvRERSMiBFQ0MgY29udHJvbGxlciBmb3VuZCBpbiB0aGUgNDA1RVhbcl0sIDQ0MFNQLAorICogNDQwU1BlLCA0NjBFWCwgNDYwR1QgYW5kIDQ2MFNYLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfX1BQQzRYWF9FREFDX0gKKyNkZWZpbmUgX19QUEM0WFhfRURBQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogTWFjcm8gZm9yIGdlbmVyYXRpbmcgcmVnaXN0ZXIgZmllbGQgbW5lbW9uaWNzCisgKi8KKyNkZWZpbmUgUFBDX1JFR19CSVRTCQkJMzIKKyNkZWZpbmUgUFBDX1JFR19WQUwoYml0LCB2YWwpCQkoKHZhbCkgPDwgKChQUENfUkVHX0JJVFMgLSAxKSAtIChiaXQpKSkKKyNkZWZpbmUgUFBDX1JFR19ERUNPREUoYml0LCB2YWwpCSgodmFsKSA+PiAoKFBQQ19SRUdfQklUUyAtIDEpIC0gKGJpdCkpKQorCisvKgorICogSUJNIDR4eCBERFIxL0REUjIgU0RSQU0gbWVtb3J5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzIChhdCBsZWFzdCB0aG9zZQorICogcmVsZXZhbnQgdG8gRUNDKQorICovCisjZGVmaW5lIFNEUkFNX0JFU1IJCQkweDAwCS8qIEVycm9yIHN0YXR1cyAocmVhZC9jbGVhcikgKi8KKyNkZWZpbmUgU0RSQU1fQkVTUlQJCQkweDAxCS8qIEVycm9yIHN0YXR1c3MgKHRlc3Qvc2V0KSAgKi8KKyNkZWZpbmUgU0RSQU1fQkVBUkwJCQkweDAyCS8qIEVycm9yIGFkZHJlc3MgbG93CSAgICAgKi8KKyNkZWZpbmUgU0RSQU1fQkVBUkgJCQkweDAzCS8qIEVycm9yIGFkZHJlc3MgaGlnaAkgICAgICovCisjZGVmaW5lIFNEUkFNX1dNSVJRCQkJMHgwNgkvKiBXcml0ZSBtYXN0ZXIgKHJlYWQvY2xlYXIpICovCisjZGVmaW5lIFNEUkFNX1dNSVJRVAkJCTB4MDcJLyogV3JpdGUgbWFzdGVyICh0ZXN0L3NldCkgICAqLworI2RlZmluZSBTRFJBTV9NQ09QVDEJCQkweDIwCS8qIENvbnRyb2xsZXIgb3B0aW9ucyAxCSAgICAgKi8KKyNkZWZpbmUgU0RSQU1fTUJYQ0ZfQkFTRQkJMHg0MAkvKiBCYW5rIG4gY29uZmlndXJhdGlvbiBiYXNlICovCisjZGVmaW5lCVNEUkFNX01CWENGKG4pCQkJKFNEUkFNX01CWENGX0JBU0UgKyAoNCAqIChuKSkpCisjZGVmaW5lIFNEUkFNX01CMENGCQkJU0RSQU1fTUJYQ0YoMCkKKyNkZWZpbmUgU0RSQU1fTUIxQ0YJCQlTRFJBTV9NQlhDRigxKQorI2RlZmluZSBTRFJBTV9NQjJDRgkJCVNEUkFNX01CWENGKDIpCisjZGVmaW5lIFNEUkFNX01CM0NGCQkJU0RSQU1fTUJYQ0YoMykKKyNkZWZpbmUgU0RSQU1fRUNDQ1IJCQkweDk4CS8qIEVDQyBlcnJvciBzdGF0dXMJICAgICAqLworI2RlZmluZSBTRFJBTV9FQ0NFUwkJCVNEUkFNX0VDQ0NSCisKKy8qCisgKiBQTEIgTWFzdGVyIElEcworICovCisjZGVmaW5lCVNEUkFNX1BMQl9NMElEX0ZJUlNUCQkwCisjZGVmaW5lCVNEUkFNX1BMQl9NMElEX0lDVQkJU0RSQU1fUExCX00wSURfRklSU1QKKyNkZWZpbmUJU0RSQU1fUExCX00wSURfUENJRTAJCTEKKyNkZWZpbmUJU0RSQU1fUExCX00wSURfUENJRTEJCTIKKyNkZWZpbmUJU0RSQU1fUExCX00wSURfRE1BCQkzCisjZGVmaW5lCVNEUkFNX1BMQl9NMElEX0RDVQkJNAorI2RlZmluZQlTRFJBTV9QTEJfTTBJRF9PUEIJCTUKKyNkZWZpbmUJU0RSQU1fUExCX00wSURfTUFMCQk2CisjZGVmaW5lCVNEUkFNX1BMQl9NMElEX1NFQwkJNworI2RlZmluZQlTRFJBTV9QTEJfTTBJRF9BSEIJCTgKKyNkZWZpbmUgU0RSQU1fUExCX00wSURfTEFTVAkJU0RSQU1fUExCX00wSURfQUhCCisjZGVmaW5lIFNEUkFNX1BMQl9NMElEX0NPVU5UCQkoU0RSQU1fUExCX00wSURfTEFTVCAtIFwKKwkJCQkJIFNEUkFNX1BMQl9NMElEX0ZJUlNUICsgMSkKKworLyoKKyAqIE1lbW9yeSBDb250cm9sbGVyIEJ1cyBFcnJvciBTdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTRFJBTV9CRVNSX01BU0sJCQlQUENfUkVHX1ZBTCg3LCAweEZGKQorI2RlZmluZSBTRFJBTV9CRVNSX00wSURfTUFTSwkJUFBDX1JFR19WQUwoMywgMHhGKQorI2RlZmluZQlTRFJBTV9CRVNSX00wSURfREVDT0RFKG4pCVBQQ19SRUdfREVDT0RFKDMsIG4pCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBJRF9JQ1UJCVBQQ19SRUdfVkFMKDMsIFNEUkFNX1BMQl9NMElEX0lDVSkKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMElEX1BDSUUwCQlQUENfUkVHX1ZBTCgzLCBTRFJBTV9QTEJfTTBJRF9QQ0lFMCkKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMElEX1BDSUUxCQlQUENfUkVHX1ZBTCgzLCBTRFJBTV9QTEJfTTBJRF9QQ0lFMSkKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMElEX0RNQQkJUFBDX1JFR19WQUwoMywgU0RSQU1fUExCX00wSURfRE1BKQorI2RlZmluZSBTRFJBTV9CRVNSX00wSURfRENVCQlQUENfUkVHX1ZBTCgzLCBTRFJBTV9QTEJfTTBJRF9EQ1UpCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBJRF9PUEIJCVBQQ19SRUdfVkFMKDMsIFNEUkFNX1BMQl9NMElEX09QQikKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMElEX01BTAkJUFBDX1JFR19WQUwoMywgU0RSQU1fUExCX00wSURfTUFMKQorI2RlZmluZSBTRFJBTV9CRVNSX00wSURfU0VDCQlQUENfUkVHX1ZBTCgzLCBTRFJBTV9QTEJfTTBJRF9TRUMpCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBJRF9BSEIJCVBQQ19SRUdfVkFMKDMsIFNEUkFNX1BMQl9NMElEX0FIQikKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMEVUX01BU0sJCVBQQ19SRUdfVkFMKDYsIDB4NykKKyNkZWZpbmUgU0RSQU1fQkVTUl9NMEVUX05PTkUJCVBQQ19SRUdfVkFMKDYsIDApCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBFVF9FQ0MJCVBQQ19SRUdfVkFMKDYsIDEpCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBSV19NQVNLCQlQUENfUkVHX1ZBTCg3LCAxKQorI2RlZmluZSBTRFJBTV9CRVNSX00wUldfV1JJVEUJCVBQQ19SRUdfVkFMKDcsIDApCisjZGVmaW5lIFNEUkFNX0JFU1JfTTBSV19SRUFECQlQUENfUkVHX1ZBTCg3LCAxKQorCisvKgorICogTWVtb3J5IENvbnRyb2xsZXIgUExCIFdyaXRlIE1hc3RlciBJbnRlcnJ1cHQgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTRFJBTV9XTUlSUV9NQVNLCQlQUENfUkVHX1ZBTCg4LCAweDFGRikKKyNkZWZpbmUJU0RSQU1fV01JUlFfRU5DT0RFKGlkKQkJUFBDX1JFR19WQUwoKGlkICUgXAorCQkJCQkJICAgICBTRFJBTV9QTEJfTTBJRF9DT1VOVCksIDEpCisjZGVmaW5lIFNEUkFNX1dNSVJRX0lDVQkJCVBQQ19SRUdfVkFMKFNEUkFNX1BMQl9NMElEX0lDVSwgMSkKKyNkZWZpbmUgU0RSQU1fV01JUlFfUENJRTAJCVBQQ19SRUdfVkFMKFNEUkFNX1BMQl9NMElEX1BDSUUwLCAxKQorI2RlZmluZSBTRFJBTV9XTUlSUV9QQ0lFMQkJUFBDX1JFR19WQUwoU0RSQU1fUExCX00wSURfUENJRTEsIDEpCisjZGVmaW5lIFNEUkFNX1dNSVJRX0RNQQkJCVBQQ19SRUdfVkFMKFNEUkFNX1BMQl9NMElEX0RNQSwgMSkKKyNkZWZpbmUgU0RSQU1fV01JUlFfRENVCQkJUFBDX1JFR19WQUwoU0RSQU1fUExCX00wSURfRENVLCAxKQorI2RlZmluZSBTRFJBTV9XTUlSUV9PUEIJCQlQUENfUkVHX1ZBTChTRFJBTV9QTEJfTTBJRF9PUEIsIDEpCisjZGVmaW5lIFNEUkFNX1dNSVJRX01BTAkJCVBQQ19SRUdfVkFMKFNEUkFNX1BMQl9NMElEX01BTCwgMSkKKyNkZWZpbmUgU0RSQU1fV01JUlFfU0VDCQkJUFBDX1JFR19WQUwoU0RSQU1fUExCX00wSURfU0VDLCAxKQorI2RlZmluZSBTRFJBTV9XTUlSUV9BSEIJCQlQUENfUkVHX1ZBTChTRFJBTV9QTEJfTTBJRF9BSEIsIDEpCisKKy8qCisgKiBNZW1vcnkgQ29udHJvbGxlciBPcHRpb25zIDEgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfTUNIS19NQVNLCSAgICBQUENfUkVHX1ZBTCgzLCAweDMpCSAvKiBFQ0MgbWFzawkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9NQ0hLX05PTgkgICAgUFBDX1JFR19WQUwoMywgMHgwKQkgLyogTm8gRUNDIGdlbgkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9NQ0hLX0dFTgkgICAgUFBDX1JFR19WQUwoMywgMHgyKQkgLyogRUNDIGdlbgkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9NQ0hLX0NISwkgICAgUFBDX1JFR19WQUwoMywgMHgxKQkgLyogRUNDIGdlbiBhbmQgY2hrICAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfTUNIS19DSEtfUkVQICAgUFBDX1JFR19WQUwoMywgMHgzKQkgLyogRUNDIGdlbi9jaGsvcnB0ICAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfTUNIS19ERUNPREUobikgKCgoKHUzMikobikpID4+IDI4KSAmIDB4MykKKyNkZWZpbmUgU0RSQU1fTUNPUFQxX1JERU5fTUFTSwkgICAgUFBDX1JFR19WQUwoNCwgMHgxKQkgLyogUmdzdHJkIERJTU0gbWFzayAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfUkRFTgkgICAgUFBDX1JFR19WQUwoNCwgMHgxKQkgLyogUmdzdHJkIERJTU0gZW5ibCAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfV0RUSF9NQVNLCSAgICBQUENfUkVHX1ZBTCg3LCAweDEpCSAvKiBXaWR0aCBtYXNrCSAgICAgKi8KKyNkZWZpbmUgU0RSQU1fTUNPUFQxX1dEVEhfMzIJICAgIFBQQ19SRUdfVkFMKDcsIDB4MCkJIC8qIDMyIGJpdHMJICAgICAqLworI2RlZmluZSBTRFJBTV9NQ09QVDFfV0RUSF8xNgkgICAgUFBDX1JFR19WQUwoNywgMHgxKQkgLyogMTYgYml0cwkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9ERFJfVFlQRV9NQVNLICBQUENfUkVHX1ZBTCgxMSwgMHgxKSAvKiBERFIgdHlwZSBtYXNrICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9ERFIxX1RZUEUJICAgIFBQQ19SRUdfVkFMKDExLCAweDApIC8qIEREUjEgdHlwZQkgICAgICovCisjZGVmaW5lIFNEUkFNX01DT1BUMV9ERFIyX1RZUEUJICAgIFBQQ19SRUdfVkFMKDExLCAweDEpIC8qIEREUjIgdHlwZQkgICAgICovCisKKy8qCisgKiBNZW1vcnkgQmFuayAwIC0gbiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgU0RSQU1fTUJDRl9CQV9NQVNLCQlQUENfUkVHX1ZBTCgxMiwgMHgxRkZGKQorI2RlZmluZSBTRFJBTV9NQkNGX1NaX01BU0sJCVBQQ19SRUdfVkFMKDE5LCAweEYpCisjZGVmaW5lIFNEUkFNX01CQ0ZfU1pfREVDT0RFKG1ieGNmKQlQUENfUkVHX0RFQ09ERSgxOSwgbWJ4Y2YpCisjZGVmaW5lIFNEUkFNX01CQ0ZfU1pfNE1CCQlQUENfUkVHX1ZBTCgxOSwgMHgwKQorI2RlZmluZSBTRFJBTV9NQkNGX1NaXzhNQgkJUFBDX1JFR19WQUwoMTksIDB4MSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl8xNk1CCQlQUENfUkVHX1ZBTCgxOSwgMHgyKQorI2RlZmluZSBTRFJBTV9NQkNGX1NaXzMyTUIJCVBQQ19SRUdfVkFMKDE5LCAweDMpCisjZGVmaW5lIFNEUkFNX01CQ0ZfU1pfNjRNQgkJUFBDX1JFR19WQUwoMTksIDB4NCkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl8xMjhNQgkJUFBDX1JFR19WQUwoMTksIDB4NSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl8yNTZNQgkJUFBDX1JFR19WQUwoMTksIDB4NikKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl81MTJNQgkJUFBDX1JFR19WQUwoMTksIDB4NykKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl8xR0IJCVBQQ19SRUdfVkFMKDE5LCAweDgpCisjZGVmaW5lIFNEUkFNX01CQ0ZfU1pfMkdCCQlQUENfUkVHX1ZBTCgxOSwgMHg5KQorI2RlZmluZSBTRFJBTV9NQkNGX1NaXzRHQgkJUFBDX1JFR19WQUwoMTksIDB4QSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9TWl84R0IJCVBQQ19SRUdfVkFMKDE5LCAweEIpCisjZGVmaW5lIFNEUkFNX01CQ0ZfQU1fTUFTSwkJUFBDX1JFR19WQUwoMjMsIDB4RikKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFMAkJUFBDX1JFR19WQUwoMjMsIDB4MCkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFMQkJUFBDX1JFR19WQUwoMjMsIDB4MSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFMgkJUFBDX1JFR19WQUwoMjMsIDB4MikKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFMwkJUFBDX1JFR19WQUwoMjMsIDB4MykKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFNAkJUFBDX1JFR19WQUwoMjMsIDB4NCkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFNQkJUFBDX1JFR19WQUwoMjMsIDB4NSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFNgkJUFBDX1JFR19WQUwoMjMsIDB4NikKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFNwkJUFBDX1JFR19WQUwoMjMsIDB4NykKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFOAkJUFBDX1JFR19WQUwoMjMsIDB4OCkKKyNkZWZpbmUgU0RSQU1fTUJDRl9BTV9NT0RFOQkJUFBDX1JFR19WQUwoMjMsIDB4OSkKKyNkZWZpbmUgU0RSQU1fTUJDRl9CRV9NQVNLCQlQUENfUkVHX1ZBTCgzMSwgMHgxKQorI2RlZmluZSBTRFJBTV9NQkNGX0JFX0RJU0FCTEUJCVBQQ19SRUdfVkFMKDMxLCAweDApCisjZGVmaW5lIFNEUkFNX01CQ0ZfQkVfRU5BQkxFCQlQUENfUkVHX1ZBTCgzMSwgMHgxKQorCisvKgorICogRUNDIEVycm9yIFN0YXR1cworICovCisjZGVmaW5lIFNEUkFNX0VDQ0VTX01BU0sJCVBQQ19SRUdfVkFMKDIxLCAweDNGRkZGRikKKyNkZWZpbmUgU0RSQU1fRUNDRVNfQk5DRV9NQVNLCQlQUENfUkVHX1ZBTCgxNSwgMHhGRkZGKQorI2RlZmluZSBTRFJBTV9FQ0NFU19CTkNFX0VOQ09ERShsYW5lKQlQUENfUkVHX1ZBTCgoKGxhbmUpICYgMHhGKSwgMSkKKyNkZWZpbmUgU0RSQU1fRUNDRVNfQ0tCRVJfTUFTSwkJUFBDX1JFR19WQUwoMTcsIDB4MykKKyNkZWZpbmUgU0RSQU1fRUNDRVNfQ0tCRVJfTk9ORQkJUFBDX1JFR19WQUwoMTcsIDApCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NLQkVSXzE2X0VDQ18wXzMJUFBDX1JFR19WQUwoMTcsIDIpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ18wXzMJUFBDX1JFR19WQUwoMTcsIDEpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ180XzgJUFBDX1JFR19WQUwoMTcsIDIpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NLQkVSXzMyX0VDQ18wXzgJUFBDX1JFR19WQUwoMTcsIDMpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0NFCQkJUFBDX1JFR19WQUwoMTgsIDEpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX1VFCQkJUFBDX1JFR19WQUwoMTksIDEpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0JLTkVSX01BU0sJCVBQQ19SRUdfVkFMKDIxLCAweDMpCisjZGVmaW5lIFNEUkFNX0VDQ0VTX0JLMEVSCQlQUENfUkVHX1ZBTCgyMCwgMSkKKyNkZWZpbmUgU0RSQU1fRUNDRVNfQksxRVIJCVBQQ19SRUdfVkFMKDIxLCAxKQorCisjZW5kaWYgLyogX19QUEM0WFhfRURBQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCmluZGV4IDNkMjU2NTQuLmVkYjAyNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCkBAIC00Miw5ICs0Miw5IEBACiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGFkZCBzb21lIGV4dHJhIGNoZWNrcyBhbmQgZGlhZ25vc3RpY3MgdG8gR1BJTyBjYWxscy4KLQkgIFRoZSBjaGVja3MgaGVscCBlbnN1cmUgdGhhdCBHUElPcyBoYXZlIGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQKLQkgIGJlZm9yZSB0aGV5IGFyZSB1c2VkIGFuZCB0aGF0IHNsZWVwaW5nIGNhbGxzIGFyZW4gbm90IG1hZGUgZnJvbQotCSAgbm9uc2xlZXBpbmcgY29udGV4dHMuICBUaGV5IGNhbiBtYWtlIGJpdGJhbmdlZCBzZXJpYWwgcHJvdG9jb2xzCisJICBUaGVzZSBjaGVja3MgaGVscCBlbnN1cmUgdGhhdCBHUElPcyBoYXZlIGJlZW4gcHJvcGVybHkgaW5pdGlhbGl6ZWQKKwkgIGJlZm9yZSB0aGV5IGFyZSB1c2VkLCBhbmQgdGhhdCBzbGVlcGluZyBjYWxscyBhcmUgbm90IG1hZGUgZnJvbQorCSAgbm9uLXNsZWVwaW5nIGNvbnRleHRzLiAgVGhleSBjYW4gbWFrZSBiaXRiYW5nZWQgc2VyaWFsIHByb3RvY29scwogCSAgc2xvd2VyLiAgVGhlIGRpYWdub3N0aWNzIGhlbHAgY2F0Y2ggdGhlIHR5cGUgb2Ygc2V0dXAgZXJyb3JzCiAJICB0aGF0IGFyZSBtb3N0IGNvbW1vbiB3aGVuIHNldHRpbmcgdXAgbmV3IHBsYXRmb3JtcyBvciBib2FyZHMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IDQyZmIyZmQuLjUxYThkNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtNjksMjAgKzY5LDI0IEBACiAgKiB0aG9zZSBjYWxscyBoYXZlIG5vIHRlZXRoKSB3ZSBjYW4ndCBhdm9pZCBhdXRvcmVxdWVzdGluZy4gIFRoaXMgbmFnCiAgKiBtZXNzYWdlIHNob3VsZCBtb3RpdmF0ZSBzd2l0Y2hpbmcgdG8gZXhwbGljaXQgcmVxdWVzdHMuLi4gc28gc2hvdWxkCiAgKiB0aGUgd2Vha2VyIGNsZWFudXAgYWZ0ZXIgZmF1bHRzLCBjb21wYXJlZCB0byBncGlvX3JlcXVlc3QoKS4KKyAqCisgKiBOT1RFOiB0aGUgYXV0b3JlcXVlc3QgbWVjaGFuaXNtIGlzIGdvaW5nIGF3YXk7IGF0IHRoaXMgcG9pbnQgaXQncworICogb25seSAibGVnYWwiIGluIHRoZSBzZW5zZSB0aGF0IChvbGQpIGNvZGUgdXNpbmcgaXQgd29uJ3QgYnJlYWsgeWV0LAorICogYnV0IGluc3RlYWQgb25seSB0cmlnZ2VycyBhIFdBUk4oKSBzdGFjayBkdW1wLgogICovCiBzdGF0aWMgaW50IGdwaW9fZW5zdXJlX3JlcXVlc3RlZChzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0JaWYgKHRlc3RfYW5kX3NldF9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncykgPT0gMCkgewotCQlzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwID0gZGVzYy0+Y2hpcDsKLQkJaW50IGdwaW8gPSBjaGlwLT5iYXNlICsgb2Zmc2V0OworCWNvbnN0IHN0cnVjdCBncGlvX2NoaXAgKmNoaXAgPSBkZXNjLT5jaGlwOworCWNvbnN0IGludCBncGlvID0gY2hpcC0+YmFzZSArIG9mZnNldDsKIAorCWlmIChXQVJOKHRlc3RfYW5kX3NldF9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncykgPT0gMCwKKwkJCSJhdXRvcmVxdWVzdCBHUElPLSVkXG4iLCBncGlvKSkgewogCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNoaXAtPm93bmVyKSkgewogCQkJcHJfZXJyKCJHUElPLSVkOiBtb2R1bGUgY2FuJ3QgYmUgZ290dGVuIFxuIiwgZ3Bpbyk7CiAJCQljbGVhcl9iaXQoRkxBR19SRVFVRVNURUQsICZkZXNjLT5mbGFncyk7CiAJCQkvKiBsb3NlICovCiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQlwcl93YXJuaW5nKCJHUElPLSVkIGF1dG9yZXF1ZXN0ZWRcbiIsIGdwaW8pOwogCQlkZXNjX3NldF9sYWJlbChkZXNjLCAiW2F1dG9dIik7CiAJCS8qIGNhbGxlciBtdXN0IGNoaXAtPnJlcXVlc3QoKSB3L28gc3BpbmxvY2sgKi8KIAkJaWYgKGNoaXAtPnJlcXVlc3QpCkBAIC00MzgsNiArNDQyLDcgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAlzdHJ1Y3QgZ3Bpb19kZXNjCSpkZXNjOwogCWludAkJCXN0YXR1cyA9IC1FSU5WQUw7CisJY2hhcgkJCSppb25hbWUgPSBOVUxMOwogCiAJLyogY2FuJ3QgZXhwb3J0IHVudGlsIHN5c2ZzIGlzIGF2YWlsYWJsZSAuLi4gKi8KIAlpZiAoIWdwaW9fY2xhc3MucCkgewpAQCAtNDYxLDExICs0NjYsMTQgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiAKKwlpZiAoZGVzYy0+Y2hpcC0+bmFtZXMgJiYgZGVzYy0+Y2hpcC0+bmFtZXNbZ3BpbyAtIGRlc2MtPmNoaXAtPmJhc2VdKQorCQlpb25hbWUgPSBkZXNjLT5jaGlwLT5uYW1lc1tncGlvIC0gZGVzYy0+Y2hpcC0+YmFzZV07CisKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJc3RydWN0IGRldmljZQkqZGV2OwogCiAJCWRldiA9IGRldmljZV9jcmVhdGUoJmdwaW9fY2xhc3MsIGRlc2MtPmNoaXAtPmRldiwgTUtERVYoMCwgMCksCi0JCQkJCWRlc2MsICJncGlvJWQiLCBncGlvKTsKKwkJCQkgICAgZGVzYywgaW9uYW1lID8gaW9uYW1lIDogImdwaW8lZCIsIGdwaW8pOwogCQlpZiAoZGV2KSB7CiAJCQlpZiAoZGlyZWN0aW9uX21heV9jaGFuZ2UpCiAJCQkJc3RhdHVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCkBAIC01MTMsNiArNTIxLDcgQEAKIAltdXRleF9sb2NrKCZzeXNmc19sb2NrKTsKIAogCWRlc2MgPSAmZ3Bpb19kZXNjW2dwaW9dOworCiAJaWYgKHRlc3RfYml0KEZMQUdfRVhQT1JULCAmZGVzYy0+ZmxhZ3MpKSB7CiAJCXN0cnVjdCBkZXZpY2UJKmRldiA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYwppbmRleCAxYzNhOGM1Li5hMDQ2MzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCkBAIC00Miw2ICs0MiwyNiBAQAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAogfTsKIAorc3RhdGljIHZvaWQgZHJtX21vZGVfdmFsaWRhdGVfZmxhZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwgKnQ7CisKKwlpZiAoZmxhZ3MgPT0gKERSTV9NT0RFX0ZMQUdfREJMU0NBTiB8IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKSkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7CisJCWlmICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkgJiYKKwkJCQkhKGZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpKQorCQkJbW9kZS0+c3RhdHVzID0gTU9ERV9OT19JTlRFUkxBQ0U7CisJCWlmICgobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pICYmCisJCQkJIShmbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikpCisJCQltb2RlLT5zdGF0dXMgPSBNT0RFX05PX0RCTEVTQ0FOOworCX0KKworCXJldHVybjsKK30KKwogLyoqCiAgKiBkcm1faGVscGVyX3Byb2JlX2Nvbm5lY3Rvcl9tb2RlcyAtIGdldCBjb21wbGV0ZSBzZXQgb2YgZGlzcGxheSBtb2RlcwogICogQGRldjogRFJNIGRldmljZQpAQCAtNzIsNiArOTIsNyBAQAogCXN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyAqY29ubmVjdG9yX2Z1bmNzID0KIAkJY29ubmVjdG9yLT5oZWxwZXJfcHJpdmF0ZTsKIAlpbnQgY291bnQgPSAwOworCWludCBtb2RlX2ZsYWdzID0gMDsKIAogCURSTV9ERUJVRygiJXNcbiIsIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAJLyogc2V0IGFsbCBtb2RlcyB0byB0aGUgdW52ZXJpZmllZCBzdGF0ZSAqLwpAQCAtOTYsNiArMTE3LDEzIEBACiAJaWYgKG1heFggJiYgbWF4WSkKIAkJZHJtX21vZGVfdmFsaWRhdGVfc2l6ZShkZXYsICZjb25uZWN0b3ItPm1vZGVzLCBtYXhYLAogCQkJCSAgICAgICBtYXhZLCAwKTsKKworCWlmIChjb25uZWN0b3ItPmludGVybGFjZV9hbGxvd2VkKQorCQltb2RlX2ZsYWdzIHw9IERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFOworCWlmIChjb25uZWN0b3ItPmRvdWJsZXNjYW5fYWxsb3dlZCkKKwkJbW9kZV9mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0RCTFNDQU47CisJZHJtX21vZGVfdmFsaWRhdGVfZmxhZyhjb25uZWN0b3IsIG1vZGVfZmxhZ3MpOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKSB7CiAJCWlmIChtb2RlLT5zdGF0dXMgPT0gTU9ERV9PSykKIAkJCW1vZGUtPnN0YXR1cyA9IGNvbm5lY3Rvcl9mdW5jcy0+bW9kZV92YWxpZChjb25uZWN0b3IsCkBAIC04ODUsNyArOTEzLDYgQEAKIC8qKgogICogZHJtX2luaXRpYWxfY29uZmlnIC0gc2V0dXAgYSBzYW5lIGluaXRpYWwgY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24KICAqIEBkZXY6IERSTSBkZXZpY2UKLSAqIEBjYW5fZ3JvdzogdGhpcyBjb25maWd1cmF0aW9uIGlzIGdyb3dhYmxlCiAgKgogICogTE9DS0lORzoKICAqIENhbGxlZCBhdCBpbml0IHRpbWUsIG11c3QgdGFrZSBtb2RlIGNvbmZpZyBsb2NrLgpAQCAtODk3LDcgKzkyNCw3IEBACiAgKiBSRVRVUk5TOgogICogWmVybyBpZiBldmVyeXRoaW5nIHdlbnQgb2ssIG5vbnplcm8gb3RoZXJ3aXNlLgogICovCi1ib29sIGRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBjYW5fZ3JvdykKK2Jvb2wgZHJtX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJaW50IGNvdW50ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggYzY3NDAwMC4uY2E5YzYxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTEyNSwxMCArMTI1LDggQEAKIAkJRFJNX0VSUk9SKCJFRElEIGhhcyBtYWpvciB2ZXJzaW9uICVkLCBpbnN0ZWFkIG9mIDFcbiIsIGVkaWQtPnZlcnNpb24pOwogCQlnb3RvIGJhZDsKIAl9Ci0JaWYgKGVkaWQtPnJldmlzaW9uID4gMykgewotCQlEUk1fRVJST1IoIkVESUQgaGFzIG1pbm9yIHZlcnNpb24gJWQsIHdoaWNoIGlzIG5vdCBiZXR3ZWVuIDAtM1xuIiwgZWRpZC0+cmV2aXNpb24pOwotCQlnb3RvIGJhZDsKLQl9CisJaWYgKGVkaWQtPnJldmlzaW9uID4gNCkKKwkJRFJNX0RFQlVHKCJFRElEIG1pbm9yID4gNCwgYXNzdW1pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgRURJRF9MRU5HVEg7IGkrKykKIAkJY3N1bSArPSByYXdfZWRpZFtpXTsKQEAgLTE2Miw3ICsxNjAsNyBAQAogCWVkaWRfdmVuZG9yWzBdID0gKChlZGlkLT5tZmdfaWRbMF0gJiAweDdjKSA+PiAyKSArICdAJzsKIAllZGlkX3ZlbmRvclsxXSA9ICgoKGVkaWQtPm1mZ19pZFswXSAmIDB4MykgPDwgMykgfAogCQkJICAoKGVkaWQtPm1mZ19pZFsxXSAmIDB4ZTApID4+IDUpKSArICdAJzsKLQllZGlkX3ZlbmRvclsyXSA9IChlZGlkLT5tZmdfaWRbMl0gJiAweDFmKSArICdAJzsKKwllZGlkX3ZlbmRvclsyXSA9IChlZGlkLT5tZmdfaWRbMV0gJiAweDFmKSArICdAJzsKIAogCXJldHVybiAhc3RybmNtcChlZGlkX3ZlbmRvciwgdmVuZG9yLCAzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCmluZGV4IGMxMTczZDguLjQ5ODRhYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwpAQCAtNTA1LDcgKzUwNSw2IEBACiAJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9IE5VTEw7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CiAJc3RydWN0IGRybV9oYXNoX2l0ZW0gKmhhc2g7Ci0JdW5zaWduZWQgbG9uZyBwcm90OwogCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpAQCAtNTM4LDExICs1MzcsNyBAQAogCXZtYS0+dm1fb3BzID0gb2JqLT5kZXYtPmRyaXZlci0+Z2VtX3ZtX29wczsKIAl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcC0+aGFuZGxlOwogCS8qIEZJWE1FOiB1c2UgcGdwcm90X3dyaXRlY29tYmluZSB3aGVuIGF2YWlsYWJsZSAqLwotCXByb3QgPSBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KTsKLSNpZmRlZiBDT05GSUdfWDg2Ci0JcHJvdCB8PSBfUEFHRV9DQUNIRV9XQzsKLSNlbmRpZgotCXZtYS0+dm1fcGFnZV9wcm90ID0gX19wZ3Byb3QocHJvdCk7CisJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfd3JpdGVjb21iaW5lKHZtYS0+dm1fcGFnZV9wcm90KTsKIAogCS8qIFRha2UgYSByZWYgZm9yIHRoaXMgbWFwcGluZyBvZiB0aGUgb2JqZWN0LCBzbyB0aGF0IHRoZSBmYXVsdAogCSAqIGhhbmRsZXIgY2FuIGRlcmVmZXJlbmNlIHRoZSBtbWFwIG9mZnNldCdzIHBvaW50ZXIgdG8gdGhlIG9iamVjdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwppbmRleCA1ZGU1NzNhLi5iYzBjNjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCkBAIC00NTEsNiArNDUxLDcgQEAKIAogCWtvYmplY3RfdWV2ZW50X2VudigmZGV2LT5wcmltYXJ5LT5rZGV2LmtvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKIH0KK0VYUE9SVF9TWU1CT0woZHJtX3N5c2ZzX2hvdHBsdWdfZXZlbnQpOwogCiAvKioKICAqIGRybV9zeXNmc19kZXZpY2VfYWRkIC0gYWRkcyBhIGNsYXNzIGRldmljZSB0byBzeXNmcyBmb3IgYSBjaGFyYWN0ZXIgZHJpdmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCA4NTU0OWY2Li5hMDAwY2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTkyMiw3ICs5MjIsNyBAQAogCSAqIFNvbWUgb2YgdGhlIHByZWFsbG9jYXRlZCBzcGFjZSBpcyB0YWtlbiBieSB0aGUgR1RUCiAJICogYW5kIHBvcHVwLiAgR1RUIGlzIDFLIHBlciBNQiBvZiBhcGVydHVyZSBzaXplLCBhbmQgcG9wdXAgaXMgNEsuCiAJICovCi0JaWYgKElTX0c0WChkZXYpKQorCWlmIChJU19HNFgoZGV2KSB8fCBJU19JR0QoZGV2KSkKIAkJb3ZlcmhlYWQgPSA0MDk2OwogCWVsc2UKIAkJb3ZlcmhlYWQgPSAoKmFwZXJ0dXJlX3NpemUgLyAxMDI0KSArIDQwOTY7CkBAIC0xMDMwLDEzICsxMDMwLDYgQEAKIAlpZiAocmV0KQogCQlnb3RvIGRlc3Ryb3lfcmluZ2J1ZmZlcjsKIAotCS8qIEZJWE1FOiByZS1hZGQgaG90cGx1ZyBzdXBwb3J0ICovCi0jaWYgMAotCXJldCA9IGRybV9ob3RwbHVnX2luaXQoZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIGRlc3Ryb3lfcmluZ2J1ZmZlcjsKLSNlbmRpZgotCiAJLyogQWx3YXlzIHNhZmUgaW4gdGhlIG1vZGUgc2V0dGluZyBjYXNlLiAqLwogCS8qIEZJWE1FOiBkbyBwcmUvcG9zdC1tb2RlIHNldCBzdHVmZiBpbiBjb3JlIEtNUyBjb2RlICovCiAJZGV2LT52YmxhbmtfZGlzYWJsZV9hbGxvd2VkID0gMTsKQEAgLTEwNDksNyArMTA0Miw3IEBACiAKIAlpbnRlbF9tb2Rlc2V0X2luaXQoZGV2KTsKIAotCWRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcoZGV2LCBmYWxzZSk7CisJZHJtX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhkZXYpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTExODYsOCArMTE3OSw2IEBACiAJaWYgKCFJU19JOTQ1RyhkZXYpICYmICFJU19JOTQ1R00oZGV2KSkKIAkJcGNpX2VuYWJsZV9tc2koZGV2LT5wZGV2KTsKIAotCWludGVsX29wcmVnaW9uX2luaXQoZGV2KTsKLQogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jayk7CiAJZGV2X3ByaXYtPnVzZXJfaXJxX3JlZmNvdW50ID0gMDsKIApAQCAtMTIwNiw2ICsxMTk3LDkgQEAKIAkJfQogCX0KIAorCS8qIE11c3QgYmUgZG9uZSBhZnRlciBwcm9iaW5nIG91dHB1dHMgKi8KKwlpbnRlbF9vcHJlZ2lvbl9pbml0KGRldiwgMCk7CisKIAlyZXR1cm4gMDsKIAogb3V0X2lvbWFwZnJlZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDJjMDE2NzYuLjY1MDNlMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAKIAlpOTE1X3Jlc3RvcmVfc3RhdGUoZGV2KTsKIAotCWludGVsX29wcmVnaW9uX2luaXQoZGV2KTsKKwlpbnRlbF9vcHJlZ2lvbl9pbml0KGRldiwgMSk7CiAKIAkvKiBLTVMgRW50ZXJWVCBlcXVpdmFsZW50ICovCiAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGMxNjg1ZDAuLjM3NTBkODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTU5LDYgKzE1OSw5IEBACiAJdTMyIGlycV9tYXNrX3JlZzsKIAl1MzIgcGlwZXN0YXRbMl07CiAKKwl1MzIgaG90cGx1Z19zdXBwb3J0ZWRfbWFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaG90cGx1Z193b3JrOworCiAJaW50IHRleF9scnVfbG9nX2dyYW51bGFyaXR5OwogCWludCBhbGxvd19iYXRjaGJ1ZmZlcjsKIAlzdHJ1Y3QgbWVtX2Jsb2NrICphZ3BfaGVhcDsKQEAgLTI5Nyw2ICszMDAsNyBAQAogCQkgKgogCQkgKiBBIHJlZmVyZW5jZSBpcyBoZWxkIG9uIHRoZSBidWZmZXIgd2hpbGUgb24gdGhpcyBsaXN0LgogCQkgKi8KKwkJc3BpbmxvY2tfdCBhY3RpdmVfbGlzdF9sb2NrOwogCQlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9saXN0OwogCiAJCS8qKgpAQCAtNjYyLDEyICs2NjYsMTIgQEAKIAogI2lmZGVmIENPTkZJR19BQ1BJCiAvKiBpOTE1X29wcmVnaW9uLmMgKi8KLWV4dGVybiBpbnQgaW50ZWxfb3ByZWdpb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgaW50ZWxfb3ByZWdpb25faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcmVzdW1lKTsKIGV4dGVybiB2b2lkIGludGVsX29wcmVnaW9uX2ZyZWUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBvcHJlZ2lvbl9hc2xlX2ludHIoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBvcHJlZ2lvbl9lbmFibGVfYXNsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBpbnRlbF9vcHJlZ2lvbl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGludGVsX29wcmVnaW9uX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHJlc3VtZSkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGludGVsX29wcmVnaW9uX2ZyZWUoc3RydWN0IGRybV9kZXZpY2UgKmRldikgeyByZXR1cm47IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBvcHJlZ2lvbl9hc2xlX2ludHIoc3RydWN0IGRybV9kZXZpY2UgKmRldikgeyByZXR1cm47IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBvcHJlZ2lvbl9lbmFibGVfYXNsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KSB7IHJldHVybjsgfQpAQCAtODEwLDYgKzgxNCw3IEBACiAjZGVmaW5lIEhBU18xMjhfQllURV9ZX1RJTElORyhkZXYpIChJU19JOVhYKGRldikgJiYgIShJU19JOTE1RyhkZXYpIHx8IFwKIAkJCQkJCSAgICAgIElTX0k5MTVHTShkZXYpKSkKICNkZWZpbmUgU1VQUE9SVFNfSU5URUdSQVRFRF9IRE1JKGRldikJKElTX0c0WChkZXYpKQorI2RlZmluZSBJOTE1X0hBU19IT1RQTFVHKGRldikgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikgfHwgSVNfSTk2NUcoZGV2KSkKIAogI2RlZmluZSBQUklNQVJZX1JJTkdCVUZGRVJfU0laRSAgICAgICAgICgxMjgqMTAyNCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggZTAzODlhZC4uMTQ0OWI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0xMDcyLDYgKzEwNzIsNyBAQAogCWNhc2UgLUVBR0FJTjoKIAkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKIAljYXNlIC1FRkFVTFQ6CisJY2FzZSAtRUlOVkFMOgogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogCWRlZmF1bHQ6CiAJCXJldHVybiBWTV9GQVVMVF9OT1BBR0U7CkBAIC0xMzI0LDggKzEzMjUsMTAgQEAKIAkJb2JqX3ByaXYtPmFjdGl2ZSA9IDE7CiAJfQogCS8qIE1vdmUgZnJvbSB3aGF0ZXZlciBsaXN0IHdlIHdlcmUgb24gdG8gdGhlIHRhaWwgb2YgZXhlY3V0aW9uLiAqLworCXNwaW5fbG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwogCWxpc3RfbW92ZV90YWlsKCZvYmpfcHJpdi0+bGlzdCwKIAkJICAgICAgICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vID0gc2Vxbm87CiB9CiAKQEAgLTE0NjcsNiArMTQ3MCw3IEBACiAJLyogTW92ZSBhbnkgYnVmZmVycyBvbiB0aGUgYWN0aXZlIGxpc3QgdGhhdCBhcmUgbm8gbG9uZ2VyIHJlZmVyZW5jZWQKIAkgKiBieSB0aGUgcmluZ2J1ZmZlciB0byB0aGUgZmx1c2hpbmcvaW5hY3RpdmUgbGlzdHMgYXMgYXBwcm9wcmlhdGUuCiAJICovCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpKSB7CiAJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOwogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CkBAIC0xNDgxLDcgKzE0ODUsNyBAQAogCQkgKiB0aGlzIHNlcW5vLgogCQkgKi8KIAkJaWYgKG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyAhPSByZXF1ZXN0LT5zZXFubykKLQkJCXJldHVybjsKKwkJCWdvdG8gb3V0OwogCiAjaWYgV0FUQ0hfTFJVCiAJCURSTV9JTkZPKCIlczogcmV0aXJlICVkIG1vdmVzIHRvIGluYWN0aXZlIGxpc3QgJXBcbiIsCkBAIC0xNDkzLDYgKzE0OTcsOCBAQAogCQllbHNlCiAJCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShvYmopOwogCX0KK291dDoKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwogfQogCiAvKioKQEAgLTE5OTAsMjAgKzE5OTYsMjMgQEAKIAlpbnQgcmVnbnVtID0gb2JqX3ByaXYtPmZlbmNlX3JlZzsKIAl1aW50MzJfdCB2YWw7CiAJdWludDMyX3QgcGl0Y2hfdmFsOworCXVpbnQzMl90IGZlbmNlX3NpemVfYml0czsKIAotCWlmICgob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiB+STkxNV9GRU5DRV9TVEFSVF9NQVNLKSB8fAorCWlmICgob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiB+STgzMF9GRU5DRV9TVEFSVF9NQVNLKSB8fAogCSAgICAob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiAob2JqLT5zaXplIC0gMSkpKSB7Ci0JCVdBUk4oMSwgIiVzOiBvYmplY3QgMHglMDh4IG5vdCAxTSBvciBzaXplIGFsaWduZWRcbiIsCisJCVdBUk4oMSwgIiVzOiBvYmplY3QgMHglMDh4IG5vdCA1MTJLIG9yIHNpemUgYWxpZ25lZFxuIiwKIAkJICAgICBfX2Z1bmNfXywgb2JqX3ByaXYtPmd0dF9vZmZzZXQpOwogCQlyZXR1cm47CiAJfQogCiAJcGl0Y2hfdmFsID0gKG9ial9wcml2LT5zdHJpZGUgLyAxMjgpIC0gMTsKLQorCVdBUk5fT04ocGl0Y2hfdmFsICYgfjB4MDAwMDAwMGYpOwogCXZhbCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OwogCWlmIChvYmpfcHJpdi0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSkKIAkJdmFsIHw9IDEgPDwgSTgzMF9GRU5DRV9USUxJTkdfWV9TSElGVDsKLQl2YWwgfD0gSTgzMF9GRU5DRV9TSVpFX0JJVFMob2JqLT5zaXplKTsKKwlmZW5jZV9zaXplX2JpdHMgPSBJODMwX0ZFTkNFX1NJWkVfQklUUyhvYmotPnNpemUpOworCVdBUk5fT04oZmVuY2Vfc2l6ZV9iaXRzICYgfjB4MDAwMDBmMDApOworCXZhbCB8PSBmZW5jZV9zaXplX2JpdHM7CiAJdmFsIHw9IHBpdGNoX3ZhbCA8PCBJODMwX0ZFTkNFX1BJVENIX1NISUZUOwogCXZhbCB8PSBJODMwX0ZFTkNFX1JFR19WQUxJRDsKIApAQCAtMjE5NCw3ICsyMjAzLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZiAoYWxpZ25tZW50ID09IDApCiAJCWFsaWdubWVudCA9IGk5MTVfZ2VtX2dldF9ndHRfYWxpZ25tZW50KG9iaik7Ci0JaWYgKGFsaWdubWVudCAmIChQQUdFX1NJWkUgLSAxKSkgeworCWlmIChhbGlnbm1lbnQgJiAoaTkxNV9nZW1fZ2V0X2d0dF9hbGlnbm1lbnQob2JqKSAtIDEpKSB7CiAJCURSTV9FUlJPUigiSW52YWxpZCBvYmplY3QgYWxpZ25tZW50IHJlcXVlc3RlZCAldVxuIiwgYWxpZ25tZW50KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjIxMSwxNSArMjIyMCwyMCBAQAogCQl9CiAJfQogCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlID09IE5VTEwpIHsKKwkJYm9vbCBsaXN0c19lbXB0eTsKKwogCQkvKiBJZiB0aGUgZ3R0IGlzIGVtcHR5IGFuZCB3ZSdyZSBzdGlsbCBoYXZpbmcgdHJvdWJsZQogCQkgKiBmaXR0aW5nIG91ciBvYmplY3QgaW4sIHdlJ3JlIG91dCBvZiBtZW1vcnkuCiAJCSAqLwogI2lmIFdBVENIX0xSVQogCQlEUk1fSU5GTygiJXM6IEdUVCBmdWxsLCBldmljdGluZyBzb21ldGhpbmdcbiIsIF9fZnVuY19fKTsKICNlbmRpZgotCQlpZiAobGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpICYmCi0JCSAgICBsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkgJiYKLQkJICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpIHsKKwkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CisJCWxpc3RzX2VtcHR5ID0gKGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSAmJgorCQkJICAgICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSAmJgorCQkJICAgICAgIGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpOworCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOworCQlpZiAobGlzdHNfZW1wdHkpIHsKIAkJCURSTV9FUlJPUigiR1RUIGZ1bGwsIGJ1dCBMUlUgbGlzdCBlbXB0eVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtMzY3NSw2ICszNjg5LDcgQEAKIAogCWk5MTVfZ2VtX3JldGlyZV9yZXF1ZXN0cyhkZXYpOwogCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJaWYgKCFkZXZfcHJpdi0+bW0ud2VkZ2VkKSB7CiAJCS8qIEFjdGl2ZSBhbmQgZmx1c2hpbmcgc2hvdWxkIG5vdyBiZSBlbXB0eSBhcyB3ZSd2ZQogCQkgKiB3YWl0ZWQgZm9yIGEgc2VxdWVuY2UgaGlnaGVyIHRoYW4gYW55IHBlbmRpbmcgZXhlY2J1ZmZlcgpAQCAtMzcwMSw2ICszNzE2LDcgQEAKIAkJb2JqX3ByaXYtPm9iai0+d3JpdGVfZG9tYWluICY9IH5JOTE1X0dFTV9HUFVfRE9NQUlOUzsKIAkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUob2JqX3ByaXYtPm9iaik7CiAJfQorCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSkgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CkBAIC0zOTQ5LDcgKzM5NjUsMTAgQEAKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKKwlzcGluX2xvY2soJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CisKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7CiAJQlVHX09OKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCkpOwogCUJVR19PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpOwpAQCAtMzk5Myw2ICs0MDEyLDcgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPm1tLmluYWN0aXZlX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnLmMKaW5kZXggMTMxYzA4OC4uOGQwYjk0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCkBAIC0xMDUsMTIgKzEwNSwxNCBAQAogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0CSpvYmpfcHJpdjsKIAogCURSTV9JTkZPKCJhY3RpdmUgbGlzdCAlcyB7XG4iLCB3aGVyZSk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCwKIAkJCSAgICBsaXN0KQogCXsKIAkJRFJNX0lORk8oIiAgICAlcDogJTA4eFxuIiwgb2JqX3ByaXYsCiAJCQkgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKIAl9CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrKTsKIAlEUk1fSU5GTygifVxuIik7CiAJRFJNX0lORk8oImZsdXNoaW5nIGxpc3QgJXMge1xuIiwgd2hlcmUpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnZnMuYwppbmRleCA0NTVlYzk3Li5hMWFjMGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZGVidWdmcy5jCkBAIC02OSwxMCArNjksMTMgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7CisJc3BpbmxvY2tfdCAqbG9jayA9IE5VTEw7CiAKIAlzd2l0Y2ggKGxpc3QpIHsKIAljYXNlIEFDVElWRV9MSVNUOgogCQlzZXFfcHJpbnRmKG0sICJBY3RpdmU6XG4iKTsKKwkJbG9jayA9ICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jazsKKwkJc3Bpbl9sb2NrKGxvY2spOwogCQloZWFkID0gJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdDsKIAkJYnJlYWs7CiAJY2FzZSBJTkFDVElWRV9MSVNUOgpAQCAtMTA0LDYgKzEwNyw5IEBACiAJCQlzZXFfcHJpbnRmKG0sICIgKGZlbmNlOiAlZFxuIiwgb2JqX3ByaXYtPmZlbmNlX3JlZyk7CiAJCXNlcV9wcmludGYobSwgIlxuIik7CiAJfQorCisJaWYgKGxvY2spCisJICAgIHNwaW5fdW5sb2NrKGxvY2spOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCmluZGV4IDRjY2UxYWUuLjZiZTNmOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCkBAIC0yMTYsNiArMjE2LDIyIEBACiAJZWxzZQogCQl0aWxlX3dpZHRoID0gNTEyOwogCisJLyogY2hlY2sgbWF4aW11bSBzdHJpZGUgJiBvYmplY3Qgc2l6ZSAqLworCWlmIChJU19JOTY1RyhkZXYpKSB7CisJCS8qIGk5NjUgc3RvcmVzIHRoZSBlbmQgYWRkcmVzcyBvZiB0aGUgZ3R0IG1hcHBpbmcgaW4gdGhlIGZlbmNlCisJCSAqIHJlZywgc28gZG9udCBib3RoZXIgdG8gY2hlY2sgdGhlIHNpemUgKi8KKwkJaWYgKHN0cmlkZSAvIDEyOCA+IEk5NjVfRkVOQ0VfTUFYX1BJVENIX1ZBTCkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgaWYgKElTX0k5WFgoZGV2KSkgeworCQlpZiAoc3RyaWRlIC8gdGlsZV93aWR0aCA+IEk4MzBfRkVOQ0VfTUFYX1BJVENIX1ZBTCB8fAorCQkgICAgc2l6ZSA+IChJODMwX0ZFTkNFX01BWF9TSVpFX1ZBTCA8PCAyMCkpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJaWYgKHN0cmlkZSAvIDEyOCA+IEk4MzBfRkVOQ0VfTUFYX1BJVENIX1ZBTCB8fAorCQkgICAgc2l6ZSA+IChJODMwX0ZFTkNFX01BWF9TSVpFX1ZBTCA8PCAxOSkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCiAJLyogOTY1KyBqdXN0IG5lZWRzIG11bHRpcGxlcyBvZiB0aWxlIHdpZHRoICovCiAJaWYgKElTX0k5NjVHKGRldikpIHsKIAkJaWYgKHN0cmlkZSAmICh0aWxlX3dpZHRoIC0gMSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA4N2I2YjYwLi5lZTdjZTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKQEAgLTQ4LDEwICs0OCw2IEBACiAvKiogSW50ZXJydXB0cyB0aGF0IHdlIG1hc2sgYW5kIHVubWFzayBhdCBydW50aW1lLiAqLwogI2RlZmluZSBJOTE1X0lOVEVSUlVQVF9FTkFCTEVfVkFSIChJOTE1X1VTRVJfSU5URVJSVVBUKQogCi0vKiogVGhlc2UgYXJlIGFsbCBvZiB0aGUgaW50ZXJydXB0cyB1c2VkIGJ5IHRoZSBkcml2ZXIgKi8KLSNkZWZpbmUgSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0sgKEk5MTVfSU5URVJSVVBUX0VOQUJMRV9GSVggfCBcCi0JCQkJICAgIEk5MTVfSU5URVJSVVBUX0VOQUJMRV9WQVIpCi0KICNkZWZpbmUgSTkxNV9QSVBFX1ZCTEFOS19TVEFUVVMJKFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9TVEFUVVMgfFwKIAkJCQkgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUykKIApAQCAtMTg3LDYgKzE4MywxOSBAQAogCXJldHVybiBJOTE1X1JFQUQocmVnKTsKIH0KIAorLyoKKyAqIEhhbmRsZSBob3RwbHVnIGV2ZW50cyBvdXRzaWRlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBwcm9wZXIuCisgKi8KK3N0YXRpYyB2b2lkIGk5MTVfaG90cGx1Z193b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBjb250YWluZXJfb2Yod29yaywgZHJtX2k5MTVfcHJpdmF0ZV90LAorCQkJCQkJICAgIGhvdHBsdWdfd29yayk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisKKwkvKiBKdXN0IGZpcmUgb2ZmIGEgdWV2ZW50IGFuZCBsZXQgdXNlcnNwYWNlIHRlbGwgdXMgd2hhdCB0byBkbyAqLworCWRybV9zeXNmc19ob3RwbHVnX2V2ZW50KGRldik7Cit9CisKIGlycXJldHVybl90IGk5MTVfZHJpdmVyX2lycV9oYW5kbGVyKERSTV9JUlFfQVJHUykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gKHN0cnVjdCBkcm1fZGV2aWNlICopIGFyZzsKQEAgLTI0NCw2ICsyNTMsMjAgQEAKIAogCQlyZXQgPSBJUlFfSEFORExFRDsKIAorCQkvKiBDb25zdW1lIHBvcnQuICBUaGVuIGNsZWFyIElJUiBvciB3ZSdsbCBtaXNzIGV2ZW50cyAqLworCQlpZiAoKEk5MTVfSEFTX0hPVFBMVUcoZGV2KSkgJiYKKwkJICAgIChpaXIgJiBJOTE1X0RJU1BMQVlfUE9SVF9JTlRFUlJVUFQpKSB7CisJCQl1MzIgaG90cGx1Z19zdGF0dXMgPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpOworCisJCQlEUk1fREVCVUcoImhvdHBsdWcgZXZlbnQgcmVjZWl2ZWQsIHN0YXQgMHglMDh4XG4iLAorCQkJCSAgaG90cGx1Z19zdGF0dXMpOworCQkJaWYgKGhvdHBsdWdfc3RhdHVzICYgZGV2X3ByaXYtPmhvdHBsdWdfc3VwcG9ydGVkX21hc2spCisJCQkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPmhvdHBsdWdfd29yayk7CisKKwkJCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX1NUQVQsIGhvdHBsdWdfc3RhdHVzKTsKKwkJCUk5MTVfUkVBRChQT1JUX0hPVFBMVUdfU1RBVCk7CisJCX0KKwogCQlJOTE1X1dSSVRFKElJUiwgaWlyKTsKIAkJbmV3X2lpciA9IEk5MTVfUkVBRChJSVIpOyAvKiBGbHVzaCBwb3N0ZWQgd3JpdGVzICovCiAKQEAgLTUyOCwxNyArNTUxLDI0IEBACiAKIAlhdG9taWNfc2V0KCZkZXZfcHJpdi0+aXJxX3JlY2VpdmVkLCAwKTsKIAorCWlmIChJOTE1X0hBU19IT1RQTFVHKGRldikpIHsKKwkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIDApOworCQlJOTE1X1dSSVRFKFBPUlRfSE9UUExVR19TVEFULCBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpKTsKKwl9CisKIAlJOTE1X1dSSVRFKEhXU1RBTSwgMHhlZmZlKTsKIAlJOTE1X1dSSVRFKFBJUEVBU1RBVCwgMCk7CiAJSTkxNV9XUklURShQSVBFQlNUQVQsIDApOwogCUk5MTVfV1JJVEUoSU1SLCAweGZmZmZmZmZmKTsKIAlJOTE1X1dSSVRFKElFUiwgMHgwKTsKIAkodm9pZCkgSTkxNV9SRUFEKElFUik7CisJSU5JVF9XT1JLKCZkZXZfcHJpdi0+aG90cGx1Z193b3JrLCBpOTE1X2hvdHBsdWdfd29ya19mdW5jKTsKIH0KIAogaW50IGk5MTVfZHJpdmVyX2lycV9wb3N0aW5zdGFsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX2k5MTVfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIGVuYWJsZV9tYXNrID0gSTkxNV9JTlRFUlJVUFRfRU5BQkxFX0ZJWCB8IEk5MTVfSU5URVJSVVBUX0VOQUJMRV9WQVI7CiAKIAlkZXZfcHJpdi0+dmJsYW5rX3BpcGUgPSBEUk1fSTkxNV9WQkxBTktfUElQRV9BIHwgRFJNX0k5MTVfVkJMQU5LX1BJUEVfQjsKIApAQCAtNTUwLDEzICs1ODAsMzUgQEAKIAlkZXZfcHJpdi0+cGlwZXN0YXRbMF0gPSAwOwogCWRldl9wcml2LT5waXBlc3RhdFsxXSA9IDA7CiAKKwlpZiAoSTkxNV9IQVNfSE9UUExVRyhkZXYpKSB7CisJCXUzMiBob3RwbHVnX2VuID0gSTkxNV9SRUFEKFBPUlRfSE9UUExVR19FTik7CisKKwkJLyogTGVhdmUgb3RoZXIgYml0cyBhbG9uZSAqLworCQlob3RwbHVnX2VuIHw9IEhPVFBMVUdfRU5fTUFTSzsKKwkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIGhvdHBsdWdfZW4pOworCisJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrID0gQ1JUX0hPVFBMVUdfSU5UX1NUQVRVUyB8CisJCQlUVl9IT1RQTFVHX0lOVF9TVEFUVVMgfCBTRFZPQ19IT1RQTFVHX0lOVF9TVEFUVVMgfAorCQkJU0RWT0JfSE9UUExVR19JTlRfU1RBVFVTOworCQlpZiAoSVNfRzRYKGRldikpIHsKKwkJCWRldl9wcml2LT5ob3RwbHVnX3N1cHBvcnRlZF9tYXNrIHw9CisJCQkJSERNSUJfSE9UUExVR19JTlRfU1RBVFVTIHwKKwkJCQlIRE1JQ19IT1RQTFVHX0lOVF9TVEFUVVMgfAorCQkJCUhETUlEX0hPVFBMVUdfSU5UX1NUQVRVUzsKKwkJfQorCQkvKiBFbmFibGUgaW4gSUVSLi4uICovCisJCWVuYWJsZV9tYXNrIHw9IEk5MTVfRElTUExBWV9QT1JUX0lOVEVSUlVQVDsKKwkJLyogYW5kIHVubWFzayBpbiBJTVIgKi8KKwkJaTkxNV9lbmFibGVfaXJxKGRldl9wcml2LCBJOTE1X0RJU1BMQVlfUE9SVF9JTlRFUlJVUFQpOworCX0KKwogCS8qIERpc2FibGUgcGlwZSBpbnRlcnJ1cHQgZW5hYmxlcywgY2xlYXIgcGVuZGluZyBwaXBlIHN0YXR1cyAqLwogCUk5MTVfV1JJVEUoUElQRUFTVEFULCBJOTE1X1JFQUQoUElQRUFTVEFUKSAmIDB4ODAwMGZmZmYpOwogCUk5MTVfV1JJVEUoUElQRUJTVEFULCBJOTE1X1JFQUQoUElQRUJTVEFUKSAmIDB4ODAwMGZmZmYpOwogCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cyAqLwogCUk5MTVfV1JJVEUoSUlSLCBJOTE1X1JFQUQoSUlSKSk7CiAKLQlJOTE1X1dSSVRFKElFUiwgSTkxNV9JTlRFUlJVUFRfRU5BQkxFX01BU0spOworCUk5MTVfV1JJVEUoSUVSLCBlbmFibGVfbWFzayk7CiAJSTkxNV9XUklURShJTVIsIGRldl9wcml2LT5pcnFfbWFza19yZWcpOwogCSh2b2lkKSBJOTE1X1JFQUQoSUVSKTsKIApAQCAtNTc1LDYgKzYyNywxMSBAQAogCiAJZGV2X3ByaXYtPnZibGFua19waXBlID0gMDsKIAorCWlmIChJOTE1X0hBU19IT1RQTFVHKGRldikpIHsKKwkJSTkxNV9XUklURShQT1JUX0hPVFBMVUdfRU4sIDApOworCQlJOTE1X1dSSVRFKFBPUlRfSE9UUExVR19TVEFULCBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX1NUQVQpKTsKKwl9CisKIAlJOTE1X1dSSVRFKEhXU1RBTSwgMHhmZmZmZmZmZik7CiAJSTkxNV9XUklURShQSVBFQVNUQVQsIDApOwogCUk5MTVfV1JJVEUoUElQRUJTVEFULCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfb3ByZWdpb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfb3ByZWdpb24uYwppbmRleCBmZjAxMjgzLi42OTQyNzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X29wcmVnaW9uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9vcHJlZ2lvbi5jCkBAIC0yNiw2ICsyNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxhY3BpL3ZpZGVvLmg+CiAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiaTkxNV9kcm0uaCIKQEAgLTEzNiw2ICsxMzcsMTIgQEAKIAogI2RlZmluZSBBU0xFX0NCTFZfVkFMSUQgICAgICAgICAoMTw8MzEpCiAKKyNkZWZpbmUgQUNQSV9PVEhFUl9PVVRQVVQgKDA8PDgpCisjZGVmaW5lIEFDUElfVkdBX09VVFBVVCAoMTw8OCkKKyNkZWZpbmUgQUNQSV9UVl9PVVRQVVQgKDI8PDgpCisjZGVmaW5lIEFDUElfRElHSVRBTF9PVVRQVVQgKDM8PDgpCisjZGVmaW5lIEFDUElfTFZEU19PVVRQVVQgKDQ8PDgpCisKIHN0YXRpYyB1MzIgYXNsZV9zZXRfYmFja2xpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBiY2xwKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0yODIsNyArMjg5LDU4IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBpbnRlbF9vcHJlZ2lvbl92aWRlb19ldmVudCwKIH07CiAKLWludCBpbnRlbF9vcHJlZ2lvbl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCisvKgorICogSW5pdGlhbGlzZSB0aGUgRElETCBmaWVsZCBpbiBvcHJlZ2lvbi4gVGhpcyBwYXNzZXMgYSBsaXN0IG9mIGRldmljZXMgdG8KKyAqIHRoZSBmaXJtd2FyZS4gVmFsdWVzIGFyZSBkZWZpbmVkIGJ5IHNlY3Rpb24gQi40LjIgb2YgdGhlIEFDUEkgc3BlY2lmaWNhdGlvbgorICogKHZlcnNpb24gMykKKyAqLworCitzdGF0aWMgdm9pZCBpbnRlbF9kaWRsX291dHB1dHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpbnRlbF9vcHJlZ2lvbiAqb3ByZWdpb24gPSAmZGV2X3ByaXYtPm9wcmVnaW9uOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJaW50IGkgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWludCBvdXRwdXRfdHlwZSA9IEFDUElfT1RIRVJfT1VUUFVUOworCQlpZiAoaSA+PSA4KSB7CisJCQlkZXZfcHJpbnRrIChLRVJOX0VSUiwgJmRldi0+cGRldi0+ZGV2LAorCQkJCSAgICAiTW9yZSB0aGFuIDggb3V0cHV0cyBkZXRlY3RlZFxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJc3dpdGNoIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlKSB7CisJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1ZHQToKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQToKKwkJCW91dHB1dF90eXBlID0gQUNQSV9WR0FfT1VUUFVUOworCQkJYnJlYWs7CisJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0NvbXBvc2l0ZToKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPOgorCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb25lbnQ6CisJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SXzlQaW5ESU46CisJCQlvdXRwdXRfdHlwZSA9IEFDUElfVFZfT1VUUFVUOworCQkJYnJlYWs7CisJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUk6CisJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ6CisJCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0OgorCQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQToKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUI6CisJCQlvdXRwdXRfdHlwZSA9IEFDUElfRElHSVRBTF9PVVRQVVQ7CisJCQlicmVhazsKKwkJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUzoKKwkJCW91dHB1dF90eXBlID0gQUNQSV9MVkRTX09VVFBVVDsKKwkJCWJyZWFrOworCQl9CisJCW9wcmVnaW9uLT5hY3BpLT5kaWRsW2ldIHw9ICgxPDwzMSkgfCBvdXRwdXRfdHlwZSB8IGk7CisJCWkrKzsKKwl9CisKKwkvKiBJZiBmZXdlciB0aGFuIDggb3V0cHV0cywgdGhlIGxpc3QgbXVzdCBiZSBudWxsIHRlcm1pbmF0ZWQgKi8KKwlpZiAoaSA8IDgpCisJCW9wcmVnaW9uLT5hY3BpLT5kaWRsW2ldID0gMDsKK30KKworaW50IGludGVsX29wcmVnaW9uX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHJlc3VtZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBpbnRlbF9vcHJlZ2lvbiAqb3ByZWdpb24gPSAmZGV2X3ByaXYtPm9wcmVnaW9uOwpAQCAtMzEyLDYgKzM3MCwxMSBAQAogCWlmIChtYm94ZXMgJiBNQk9YX0FDUEkpIHsKIAkJRFJNX0RFQlVHKCJQdWJsaWMgQUNQSSBtZXRob2RzIHN1cHBvcnRlZFxuIik7CiAJCW9wcmVnaW9uLT5hY3BpID0gYmFzZSArIE9QUkVHSU9OX0FDUElfT0ZGU0VUOworCQlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkgeworCQkJaW50ZWxfZGlkbF9vdXRwdXRzKGRldik7CisJCQlpZiAoIXJlc3VtZSkKKwkJCQlhY3BpX3ZpZGVvX3JlZ2lzdGVyKCk7CisJCX0KIAl9IGVsc2UgewogCQlEUk1fREVCVUcoIlB1YmxpYyBBQ1BJIG1ldGhvZHMgbm90IHN1cHBvcnRlZFxuIik7CiAJCWVyciA9IC1FTk9UU1VQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCmluZGV4IDM3N2NjNTguLmU4MDViNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaApAQCAtMTkwLDYgKzE5MCw4IEBACiAjZGVmaW5lICAgSTgzMF9GRU5DRV9TSVpFX0JJVFMoc2l6ZSkJKChmZnMoKHNpemUpID4+IDE5KSAtIDEpIDw8IDgpCiAjZGVmaW5lICAgSTgzMF9GRU5DRV9QSVRDSF9TSElGVAk0CiAjZGVmaW5lICAgSTgzMF9GRU5DRV9SRUdfVkFMSUQJCSgxPDwwKQorI2RlZmluZSAgIEk4MzBfRkVOQ0VfTUFYX1BJVENIX1ZBTAkweDEwCisjZGVmaW5lICAgSTgzMF9GRU5DRV9NQVhfU0laRV9WQUwJKDE8PDgpCiAKICNkZWZpbmUgICBJOTE1X0ZFTkNFX1NUQVJUX01BU0sJCTB4MGZmMDAwMDAKICNkZWZpbmUgICBJOTE1X0ZFTkNFX1NJWkVfQklUUyhzaXplKQkoKGZmcygoc2l6ZSkgPj4gMjApIC0gMSkgPDwgOCkKQEAgLTE5OCw2ICsyMDAsNyBAQAogI2RlZmluZSAgIEk5NjVfRkVOQ0VfUElUQ0hfU0hJRlQJMgogI2RlZmluZSAgIEk5NjVfRkVOQ0VfVElMSU5HX1lfU0hJRlQJMQogI2RlZmluZSAgIEk5NjVfRkVOQ0VfUkVHX1ZBTElECQkoMTw8MCkKKyNkZWZpbmUgICBJOTY1X0ZFTkNFX01BWF9QSVRDSF9WQUwJMHgwNDAwCiAKIC8qCiAgKiBJbnN0cnVjdGlvbiBhbmQgaW50ZXJydXB0IGNvbnRyb2wgcmVncwpAQCAtNjQ4LDYgKzY1MSwxNCBAQAogI2RlZmluZSBDUlRfSE9UUExVR19ERVRFQ1RfVk9MVEFHRV8zMjVNVgkoMCA8PCAyKQogI2RlZmluZSBDUlRfSE9UUExVR19ERVRFQ1RfVk9MVEFHRV80NzVNVgkoMSA8PCAyKQogI2RlZmluZSBDUlRfSE9UUExVR19NQVNLCQkJKDB4M2ZjKSAvKiBCaXRzIDktMiAqLworI2RlZmluZSBDUlRfRk9SQ0VfSE9UUExVR19NQVNLCQkJMHhmZmZmZmUxZgorI2RlZmluZSBIT1RQTFVHX0VOX01BU0sgKEhETUlCX0hPVFBMVUdfSU5UX0VOIHwgXAorCQkJIEhETUlDX0hPVFBMVUdfSU5UX0VOIHwJICBcCisJCQkgSERNSURfSE9UUExVR19JTlRfRU4gfAkgIFwKKwkJCSBTRFZPQl9IT1RQTFVHX0lOVF9FTiB8CSAgXAorCQkJIFNEVk9DX0hPVFBMVUdfSU5UX0VOIHwJICBcCisJCQkgVFZfSE9UUExVR19JTlRfRU4gfAkgIFwKKwkJCSBDUlRfSE9UUExVR19JTlRfRU4pCiAKIAogI2RlZmluZSBQT1JUX0hPVFBMVUdfU1RBVAkweDYxMTE0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IDJiNmQ0NDMuLjliZGQ5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC00MSw3ICs0MSw3IEBACiAKIAl0ZW1wID0gSTkxNV9SRUFEKEFEUEEpOwogCXRlbXAgJj0gfihBRFBBX0hTWU5DX0NOVExfRElTQUJMRSB8IEFEUEFfVlNZTkNfQ05UTF9ESVNBQkxFKTsKLQl0ZW1wICY9IH5BRFBBX0RBQ19FTkFCTEU7CisJdGVtcCB8PSBBRFBBX0RBQ19FTkFCTEU7CiAKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKQEAgLTE1OCw3ICsxNTgsNyBAQAogCWVsc2UKIAkJdHJpZXMgPSAxOwogCWhvdHBsdWdfZW4gPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX0VOKTsKLQlob3RwbHVnX2VuICY9IH4oQ1JUX0hPVFBMVUdfTUFTSyk7CisJaG90cGx1Z19lbiAmPSBDUlRfRk9SQ0VfSE9UUExVR19NQVNLOwogCWhvdHBsdWdfZW4gfD0gQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUOwogCiAJaWYgKElTX0dNNDUoZGV2KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCBkOWM1MGZmLi42NDc3M2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC02MzYsNyArNjM2LDcgQEAKIGludGVsX3dhaXRfZm9yX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCS8qIFdhaXQgZm9yIDIwbXMsIGkuZS4gb25lIGN5Y2xlIGF0IDUwaHouICovCi0JdWRlbGF5KDIwMDAwKTsKKwltZGVsYXkoMjApOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMTA2LDYgKzExMDYsMjYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogU0RWTyBUViBoYXMgZml4ZWQgUExMIHZhbHVlcyBkZXBlbmQgb24gaXRzIGNsb2NrIHJhbmdlLAorCSAgIHRoaXMgbWlycm9ycyB2YmlvcyBzZXR0aW5nLiAqLworCWlmIChpc19zZHZvICYmIGlzX3R2KSB7CisJCWlmIChhZGp1c3RlZF9tb2RlLT5jbG9jayA+PSAxMDAwMDAKKwkJCQkmJiBhZGp1c3RlZF9tb2RlLT5jbG9jayA8IDE0MDUwMCkgeworCQkJY2xvY2sucDEgPSAyOworCQkJY2xvY2sucDIgPSAxMDsKKwkJCWNsb2NrLm4gPSAzOworCQkJY2xvY2subTEgPSAxNjsKKwkJCWNsb2NrLm0yID0gODsKKwkJfSBlbHNlIGlmIChhZGp1c3RlZF9tb2RlLT5jbG9jayA+PSAxNDA1MDAKKwkJCQkmJiBhZGp1c3RlZF9tb2RlLT5jbG9jayA8PSAyMDAwMDApIHsKKwkJCWNsb2NrLnAxID0gMTsKKwkJCWNsb2NrLnAyID0gMTA7CisJCQljbG9jay5uID0gNjsKKwkJCWNsb2NrLm0xID0gMTI7CisJCQljbG9jay5tMiA9IDg7CisJCX0KKwl9CisKIAlpZiAoSVNfSUdEKGRldikpCiAJCWZwID0gKDEgPDwgY2xvY2subikgPDwgMTYgfCBjbG9jay5tMSA8PCA4IHwgY2xvY2subTI7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9kZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vZGVzLmMKaW5kZXggZTQyMDE5ZS4uMDdkN2VjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9kZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jCkBAIC03Niw2ICs3Niw3IEBACiAJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSgmaW50ZWxfb3V0cHV0LT5iYXNlLAogCQkJCQkJCWVkaWQpOwogCQlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoJmludGVsX291dHB1dC0+YmFzZSwgZWRpZCk7CisJCWludGVsX291dHB1dC0+YmFzZS5kaXNwbGF5X2luZm8ucmF3X2VkaWQgPSBOVUxMOwogCQlrZnJlZShlZGlkKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwppbmRleCBmYmU2ZjM5Li43YjMxZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCkBAIC0yNzMsMjAgKzI3MywyMCBAQAogCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CiAJaW50IGk7CiAKLQlEUk1fREVCVUcoIiVzOiBXOiAlMDJYICIsIFNEVk9fTkFNRShzZHZvX3ByaXYpLCBjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogVzogJTAyWCAiLCBTRFZPX05BTUUoc2R2b19wcml2KSwgY21kKTsKIAlmb3IgKGkgPSAwOyBpIDwgYXJnc19sZW47IGkrKykKLQkJcHJpbnRrKCIlMDJYICIsICgodTggKilhcmdzKVtpXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlMDJYICIsICgodTggKilhcmdzKVtpXSk7CiAJZm9yICg7IGkgPCA4OyBpKyspCi0JCXByaW50aygiICAgIik7CisJCXByaW50ayhLRVJOX0RFQlVHICIgICAiKTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNkdm9fY21kX25hbWVzKSAvIHNpemVvZihzZHZvX2NtZF9uYW1lc1swXSk7IGkrKykgewogCQlpZiAoY21kID09IHNkdm9fY21kX25hbWVzW2ldLmNtZCkgewotCQkJcHJpbnRrKCIoJXMpIiwgc2R2b19jbWRfbmFtZXNbaV0ubmFtZSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiKCVzKSIsIHNkdm9fY21kX25hbWVzW2ldLm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAJaWYgKGkgPT0gc2l6ZW9mKHNkdm9fY21kX25hbWVzKS8gc2l6ZW9mKHNkdm9fY21kX25hbWVzWzBdKSkKLQkJcHJpbnRrKCIoJTAyWCkiLGNtZCk7Ci0JcHJpbnRrKCJcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiKCUwMlgpIiwgY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKIH0KICNlbHNlCiAjZGVmaW5lIGludGVsX3Nkdm9fZGVidWdfd3JpdGUobywgYywgYSwgbCkKQEAgLTMyMywxNyArMzIzLDE4IEBACiAJCQkJICAgICAgdTggc3RhdHVzKQogewogCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IGludGVsX291dHB1dC0+ZGV2X3ByaXY7CisJaW50IGk7CiAKLQlEUk1fREVCVUcoIiVzOiBSOiAiLCBTRFZPX05BTUUoc2R2b19wcml2KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSOiAiLCBTRFZPX05BTUUoc2R2b19wcml2KSk7CiAJZm9yIChpID0gMDsgaSA8IHJlc3BvbnNlX2xlbjsgaSsrKQotCQlwcmludGsoIiUwMlggIiwgKCh1OCAqKXJlc3BvbnNlKVtpXSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlMDJYICIsICgodTggKilyZXNwb25zZSlbaV0pOwogCWZvciAoOyBpIDwgODsgaSsrKQotCQlwcmludGsoIiAgICIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiICAgIik7CiAJaWYgKHN0YXR1cyA8PSBTRFZPX0NNRF9TVEFUVVNfU0NBTElOR19OT1RfU1VQUCkKLQkJcHJpbnRrKCIoJXMpIiwgY21kX3N0YXR1c19uYW1lc1tzdGF0dXNdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiglcykiLCBjbWRfc3RhdHVzX25hbWVzW3N0YXR1c10pOwogCWVsc2UKLQkJcHJpbnRrKCIoPz8/ICVkKSIsIHN0YXR1cyk7Ci0JcHJpbnRrKCJcbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyAiKD8/PyAlZCkiLCBzdGF0dXMpOworCXByaW50ayhLRVJOX0RFQlVHICJcbiIpOwogfQogI2Vsc2UKICNkZWZpbmUgaW50ZWxfc2R2b19kZWJ1Z19yZXNwb25zZShvLCByLCBsLCBzKQpAQCAtNTg4LDkgKzU4OSwxMiBAQAogCXN0cnVjdCBpbnRlbF9zZHZvX3ByZWZlcnJlZF9pbnB1dF90aW1pbmdfYXJncyBhcmdzOwogCXVpbnQ4X3Qgc3RhdHVzOwogCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCWFyZ3MuY2xvY2sgPSBjbG9jazsKIAlhcmdzLndpZHRoID0gd2lkdGg7CiAJYXJncy5oZWlnaHQgPSBoZWlnaHQ7CisJYXJncy5pbnRlcmxhY2UgPSAwOworCWFyZ3Muc2NhbGVkID0gMDsKIAlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX0NSRUFURV9QUkVGRVJSRURfSU5QVVRfVElNSU5HLAogCQkJICAgICAmYXJncywgc2l6ZW9mKGFyZ3MpKTsKIAlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCBOVUxMLCAwKTsKQEAgLTY4Myw3ICs2ODcsNyBAQAogCWR0ZC0+cGFydDEudl9oaWdoID0gKCgoaGVpZ2h0ID4+IDgpICYgMHhmKSA8PCA0KSB8CiAJCSgodl9ibGFua19sZW4gPj4gOCkgJiAweGYpOwogCi0JZHRkLT5wYXJ0Mi5oX3N5bmNfb2ZmID0gaF9zeW5jX29mZnNldDsKKwlkdGQtPnBhcnQyLmhfc3luY19vZmYgPSBoX3N5bmNfb2Zmc2V0ICYgMHhmZjsKIAlkdGQtPnBhcnQyLmhfc3luY193aWR0aCA9IGhfc3luY19sZW4gJiAweGZmOwogCWR0ZC0+cGFydDIudl9zeW5jX29mZl93aWR0aCA9ICh2X3N5bmNfb2Zmc2V0ICYgMHhmKSA8PCA0IHwKIAkJKHZfc3luY19sZW4gJiAweGYpOwpAQCAtNzA1LDI3ICs3MDksMTAgQEAKIHN0YXRpYyB2b2lkIGludGVsX3Nkdm9fZ2V0X21vZGVfZnJvbV9kdGQoc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKiBtb2RlLAogCQkJCQkgc3RydWN0IGludGVsX3Nkdm9fZHRkICpkdGQpCiB7Ci0JdWludDE2X3Qgd2lkdGgsIGhlaWdodDsKLQl1aW50MTZfdCBoX2JsYW5rX2xlbiwgaF9zeW5jX2xlbiwgdl9ibGFua19sZW4sIHZfc3luY19sZW47Ci0JdWludDE2X3QgaF9zeW5jX29mZnNldCwgdl9zeW5jX29mZnNldDsKLQotCXdpZHRoID0gbW9kZS0+Y3J0Y19oZGlzcGxheTsKLQloZWlnaHQgPSBtb2RlLT5jcnRjX3ZkaXNwbGF5OwotCi0JLyogZG8gc29tZSBtb2RlIHRyYW5zbGF0aW9ucyAqLwotCWhfYmxhbmtfbGVuID0gbW9kZS0+Y3J0Y19oYmxhbmtfZW5kIC0gbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQ7Ci0JaF9zeW5jX2xlbiA9IG1vZGUtPmNydGNfaHN5bmNfZW5kIC0gbW9kZS0+Y3J0Y19oc3luY19zdGFydDsKLQotCXZfYmxhbmtfbGVuID0gbW9kZS0+Y3J0Y192YmxhbmtfZW5kIC0gbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQ7Ci0Jdl9zeW5jX2xlbiA9IG1vZGUtPmNydGNfdnN5bmNfZW5kIC0gbW9kZS0+Y3J0Y192c3luY19zdGFydDsKLQotCWhfc3luY19vZmZzZXQgPSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0IC0gbW9kZS0+Y3J0Y19oYmxhbmtfc3RhcnQ7Ci0Jdl9zeW5jX29mZnNldCA9IG1vZGUtPmNydGNfdnN5bmNfc3RhcnQgLSBtb2RlLT5jcnRjX3ZibGFua19zdGFydDsKLQogCW1vZGUtPmhkaXNwbGF5ID0gZHRkLT5wYXJ0MS5oX2FjdGl2ZTsKIAltb2RlLT5oZGlzcGxheSArPSAoKGR0ZC0+cGFydDEuaF9oaWdoID4+IDQpICYgMHgwZikgPDwgODsKIAltb2RlLT5oc3luY19zdGFydCA9IG1vZGUtPmhkaXNwbGF5ICsgZHRkLT5wYXJ0Mi5oX3N5bmNfb2ZmOwotCW1vZGUtPmhzeW5jX3N0YXJ0ICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweGEwKSA8PCAyOworCW1vZGUtPmhzeW5jX3N0YXJ0ICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweGMwKSA8PCAyOwogCW1vZGUtPmhzeW5jX2VuZCA9IG1vZGUtPmhzeW5jX3N0YXJ0ICsgZHRkLT5wYXJ0Mi5oX3N5bmNfd2lkdGg7CiAJbW9kZS0+aHN5bmNfZW5kICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweDMwKSA8PCA0OwogCW1vZGUtPmh0b3RhbCA9IG1vZGUtPmhkaXNwbGF5ICsgZHRkLT5wYXJ0MS5oX2JsYW5rOwpAQCAtNzM1LDcgKzcyMiw3IEBACiAJbW9kZS0+dmRpc3BsYXkgKz0gKChkdGQtPnBhcnQxLnZfaGlnaCA+PiA0KSAmIDB4MGYpIDw8IDg7CiAJbW9kZS0+dnN5bmNfc3RhcnQgPSBtb2RlLT52ZGlzcGxheTsKIAltb2RlLT52c3luY19zdGFydCArPSAoZHRkLT5wYXJ0Mi52X3N5bmNfb2ZmX3dpZHRoID4+IDQpICYgMHhmOwotCW1vZGUtPnZzeW5jX3N0YXJ0ICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweDBhKSA8PCAyOworCW1vZGUtPnZzeW5jX3N0YXJ0ICs9IChkdGQtPnBhcnQyLnN5bmNfb2ZmX3dpZHRoX2hpZ2ggJiAweDBjKSA8PCAyOwogCW1vZGUtPnZzeW5jX3N0YXJ0ICs9IGR0ZC0+cGFydDIudl9zeW5jX29mZl9oaWdoICYgMHhjMDsKIAltb2RlLT52c3luY19lbmQgPSBtb2RlLT52c3luY19zdGFydCArCiAJCShkdGQtPnBhcnQyLnZfc3luY19vZmZfd2lkdGggJiAweGYpOwpAQCAtNzQ1LDcgKzczMiw3IEBACiAKIAltb2RlLT5jbG9jayA9IGR0ZC0+cGFydDEuY2xvY2sgKiAxMDsKIAotCW1vZGUtPmZsYWdzICY9IChEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKTsKKwltb2RlLT5mbGFncyAmPSB+KERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpOwogCWlmIChkdGQtPnBhcnQyLmR0ZF9mbGFncyAmIDB4MikKIAkJbW9kZS0+ZmxhZ3MgfD0gRFJNX01PREVfRkxBR19QSFNZTkM7CiAJaWYgKGR0ZC0+cGFydDIuZHRkX2ZsYWdzICYgMHg0KQpAQCAtOTI0LDYgKzkxMSwyNyBAQAogCQkJCVNEVk9fSEJVRl9UWF9WU1lOQyk7CiB9CiAKK3N0YXRpYyB2b2lkIGludGVsX3Nkdm9fc2V0X3R2X2Zvcm1hdChzdHJ1Y3QgaW50ZWxfb3V0cHV0ICpvdXRwdXQpCit7CisJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqc2R2b19wcml2ID0gb3V0cHV0LT5kZXZfcHJpdjsKKwlzdHJ1Y3QgaW50ZWxfc2R2b190dl9mb3JtYXQgKmZvcm1hdCwgdW5zZXQ7CisJdTggc3RhdHVzOworCisJZm9ybWF0ID0gJnNkdm9fcHJpdi0+dHZfZm9ybWF0OworCW1lbXNldCgmdW5zZXQsIDAsIHNpemVvZih1bnNldCkpOworCWlmIChtZW1jbXAoZm9ybWF0LCAmdW5zZXQsIHNpemVvZigqZm9ybWF0KSkpIHsKKwkJRFJNX0RFQlVHKCIlczogQ2hvb3NpbmcgZGVmYXVsdCBUViBmb3JtYXQgb2YgTlRTQy1NXG4iLAorCQkJCVNEVk9fTkFNRShzZHZvX3ByaXYpKTsKKwkJZm9ybWF0LT5udHNjX20gPSAxOworCQlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX1NFVF9UVl9GT1JNQVQsIGZvcm1hdCwKKwkJCQlzaXplb2YoKmZvcm1hdCkpOworCQlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCBOVUxMLCAwKTsKKwkJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKKwkJCURSTV9ERUJVRygiJXM6IEZhaWxlZCB0byBzZXQgVFYgZm9ybWF0XG4iLAorCQkJCQlTRFZPX05BTUUoc2R2b19wcml2KSk7CisJfQorfQorCiBzdGF0aWMgYm9vbCBpbnRlbF9zZHZvX21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKQEAgLTk2OCw2ICs5NzYsMTIgQEAKIAkJCQkJCQkgICAgICZpbnB1dF9kdGQpOwogCQkJaW50ZWxfc2R2b19nZXRfbW9kZV9mcm9tX2R0ZChhZGp1c3RlZF9tb2RlLCAmaW5wdXRfZHRkKTsKIAorCQkJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsIDApOworCisJCQltb2RlLT5jbG9jayA9IGFkanVzdGVkX21vZGUtPmNsb2NrOworCisJCQlhZGp1c3RlZF9tb2RlLT5jbG9jayAqPQorCQkJCWludGVsX3Nkdm9fZ2V0X3BpeGVsX211bHRpcGxpZXIobW9kZSk7CiAJCX0gZWxzZSB7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KQEAgLTEwMTIsNyArMTAyNiwxMiBAQAogCQlzZHZveCB8PSBTRFZPX0FVRElPX0VOQUJMRTsKIAl9CiAKLQlpbnRlbF9zZHZvX2dldF9kdGRfZnJvbV9tb2RlKCZpbnB1dF9kdGQsIG1vZGUpOworCS8qIFdlIGhhdmUgdHJpZWQgdG8gZ2V0IGlucHV0IHRpbWluZyBpbiBtb2RlX2ZpeHVwLCBhbmQgZmlsbGVkIGludG8KKwkgICBhZGp1c3RlZF9tb2RlICovCisJaWYgKHNkdm9fcHJpdi0+aXNfdHYpCisJCWludGVsX3Nkdm9fZ2V0X2R0ZF9mcm9tX21vZGUoJmlucHV0X2R0ZCwgYWRqdXN0ZWRfbW9kZSk7CisJZWxzZQorCQlpbnRlbF9zZHZvX2dldF9kdGRfZnJvbV9tb2RlKCZpbnB1dF9kdGQsIG1vZGUpOwogCiAJLyogSWYgaXQncyBhIFRWLCB3ZSBhbHJlYWR5IHNldCB0aGUgb3V0cHV0IHRpbWluZyBpbiBtb2RlX2ZpeHVwLgogCSAqIE90aGVyd2lzZSwgdGhlIG91dHB1dCB0aW1pbmcgaXMgZXF1YWwgdG8gdGhlIGlucHV0IHRpbWluZy4KQEAgLTEwMjcsNiArMTA0Niw5IEBACiAJLyogU2V0IHRoZSBpbnB1dCB0aW1pbmcgdG8gdGhlIHNjcmVlbi4gQXNzdW1lIGFsd2F5cyBpbnB1dCAwLiAqLwogCWludGVsX3Nkdm9fc2V0X3RhcmdldF9pbnB1dChvdXRwdXQsIHRydWUsIGZhbHNlKTsKIAorCWlmIChzZHZvX3ByaXYtPmlzX3R2KQorCQlpbnRlbF9zZHZvX3NldF90dl9mb3JtYXQob3V0cHV0KTsKKwogCS8qIFdlIHdvdWxkIGxpa2UgdG8gdXNlIGludGVsX3Nkdm9fY3JlYXRlX3ByZWZlcnJlZF9pbnB1dF90aW1pbmcoKSB0bwogCSAqIHByb3ZpZGUgdGhlIGRldmljZSB3aXRoIGEgdGltaW5nIGl0IGNhbiBzdXBwb3J0LCBpZiBpdCBzdXBwb3J0cyB0aGF0CiAJICogZmVhdHVyZS4gIEhvd2V2ZXIsIHByZXN1bWFibHkgd2Ugd291bGQgbmVlZCB0byBhZGp1c3QgdGhlIENSVEMgdG8KQEAgLTEzOTUsNyArMTQxNyw3IEBACiBpbnRlbF9zZHZvX2NoZWNrX3R2X2Zvcm1hdChzdHJ1Y3QgaW50ZWxfb3V0cHV0ICpvdXRwdXQpCiB7CiAJc3RydWN0IGludGVsX3Nkdm9fcHJpdiAqZGV2X3ByaXYgPSBvdXRwdXQtPmRldl9wcml2OwotCXN0cnVjdCBpbnRlbF9zZHZvX3R2X2Zvcm1hdCBmb3JtYXQsIHVuc2V0OworCXN0cnVjdCBpbnRlbF9zZHZvX3R2X2Zvcm1hdCBmb3JtYXQ7CiAJdWludDhfdCBzdGF0dXM7CiAKIAlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX0dFVF9UVl9GT1JNQVQsIE5VTEwsIDApOwpAQCAtMTQwMywxNSArMTQyNSw3IEBACiAJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKIAkJcmV0dXJuOwogCi0JbWVtc2V0KCZ1bnNldCwgMCwgc2l6ZW9mKHVuc2V0KSk7Ci0JaWYgKG1lbWNtcCgmZm9ybWF0LCAmdW5zZXQsIHNpemVvZihmb3JtYXQpKSkgewotCQlEUk1fREVCVUcoIiVzOiBDaG9vc2luZyBkZWZhdWx0IFRWIGZvcm1hdCBvZiBOVFNDLU1cbiIsCi0JCQkgIFNEVk9fTkFNRShkZXZfcHJpdikpOwotCi0JCWZvcm1hdC5udHNjX20gPSB0cnVlOwotCQlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX1NFVF9UVl9GT1JNQVQsIE5VTEwsIDApOwotCQlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCBOVUxMLCAwKTsKLQl9CisJbWVtY3B5KCZkZXZfcHJpdi0+dHZfZm9ybWF0LCAmZm9ybWF0LCBzaXplb2YoZm9ybWF0KSk7CiB9CiAKIC8qCkBAIC0xNDIwLDY4ICsxNDM0LDcwIEBACiAgKiBYWFg6IGFsbCA2MEh6IHJlZnJlc2g/CiAgKi8KIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIHNkdm9fdHZfbW9kZXNbXSA9IHsKLQl7IERSTV9NT0RFKCIzMjB4MjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDU4MTU2ODAsIDMyMSwgMzg0LCA0MTYsCi0JCSAgIDIwMCwgMCwgMjMyLCAyMDEsIDIzMywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCIzMjB4MjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDU4MTUsIDMyMCwgMzIxLCAzODQsCisJCSAgIDQxNiwgMCwgMjAwLCAyMDEsIDIzMiwgMjMzLCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjMyMHgyNDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNjgxNDA4MCwgMzIxLCAzODQsIDQxNiwKLQkJICAgMjQwLCAwLCAyNzIsIDI0MSwgMjczLCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjMyMHgyNDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNjgxNCwgMzIwLCAzMjEsIDM4NCwKKwkJICAgNDE2LCAwLCAyNDAsIDI0MSwgMjcyLCAyNzMsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNDAweDMwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA5OTEwMDgwLCA0MDEsIDQ2NCwgNDk2LAotCQkgICAzMDAsIDAsIDMzMiwgMzAxLCAzMzMsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNDAweDMwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA5OTEwLCA0MDAsIDQwMSwgNDY0LAorCQkgICA0OTYsIDAsIDMwMCwgMzAxLCAzMzIsIDMzMywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI2NDB4MzUwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE2OTEzMjgwLCA2NDEsIDcwNCwgNzM2LAotCQkgICAzNTAsIDAsIDM4MiwgMzUxLCAzODMsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNjQweDM1MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxNjkxMywgNjQwLCA2NDEsIDcwNCwKKwkJICAgNzM2LCAwLCAzNTAsIDM1MSwgMzgyLCAzODMsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNjQweDQwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAxOTEyMTI4MCwgNjQxLCA3MDQsIDczNiwKLQkJICAgNDAwLCAwLCA0MzIsIDQwMSwgNDMzLCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjY0MHg0MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTkxMjEsIDY0MCwgNjQxLCA3MDQsCisJCSAgIDczNiwgMCwgNDAwLCA0MDEsIDQzMiwgNDMzLCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjY0MHg0MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTkxMjEyODAsIDY0MSwgNzA0LCA3MzYsCi0JCSAgIDQwMCwgMCwgNDMyLCA0MDEsIDQzMywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI2NDB4NDgwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIyNjU0LCA2NDAsIDY0MSwgNzA0LAorCQkgICA3MzYsIDAsIDQ4MCwgNDgxLCA1MTIsIDUxMywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI3MDR4NDgwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI0NjI0MDAwLCA3MDUsIDc2OCwgODAwLAotCQkgICA0ODAsIDAsIDUxMiwgNDgxLCA1MTMsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNzA0eDQ4MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyNDYyNCwgNzA0LCA3MDUsIDc2OCwKKwkJICAgODAwLCAwLCA0ODAsIDQ4MSwgNTEyLCA1MTMsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNzA0eDU3NiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyOTIzMjAwMCwgNzA1LCA3NjgsIDgwMCwKLQkJICAgNTc2LCAwLCA2MDgsIDU3NywgNjA5LCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjcwNHg1NzYiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjkyMzIsIDcwNCwgNzA1LCA3NjgsCisJCSAgIDgwMCwgMCwgNTc2LCA1NzcsIDYwOCwgNjA5LCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjcyMHgzNTAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMTg3NTE2ODAsIDcyMSwgNzg0LCA4MTYsCi0JCSAgIDM1MCwgMCwgMzgyLCAzNTEsIDM4MywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI3MjB4MzUwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDE4NzUxLCA3MjAsIDcyMSwgNzg0LAorCQkgICA4MTYsIDAsIDM1MCwgMzUxLCAzODIsIDM4MywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI3MjB4NDAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDIxMTk5NjgwLCA3MjEsIDc4NCwgODE2LAotCQkgICA0MDAsIDAsIDQzMiwgNDAxLCA0MzMsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNzIweDQwMCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyMTE5OSwgNzIwLCA3MjEsIDc4NCwKKwkJICAgODE2LCAwLCA0MDAsIDQwMSwgNDMyLCA0MzMsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNzIweDQ4MCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyNTExNjQ4MCwgNzIxLCA3ODQsIDgxNiwKLQkJICAgNDgwLCAwLCA1MTIsIDQ4MSwgNTEzLCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjcyMHg0ODAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjUxMTYsIDcyMCwgNzIxLCA3ODQsCisJCSAgIDgxNiwgMCwgNDgwLCA0ODEsIDUxMiwgNTEzLCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjcyMHg1NDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMjgwNTQwODAsIDcyMSwgNzg0LCA4MTYsCi0JCSAgIDU0MCwgMCwgNTcyLCA1NDEsIDU3MywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI3MjB4NTQwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI4MDU0LCA3MjAsIDcyMSwgNzg0LAorCQkgICA4MTYsIDAsIDU0MCwgNTQxLCA1NzIsIDU3MywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI3MjB4NTc2IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDI5ODE2NjQwLCA3MjEsIDc4NCwgODE2LAotCQkgICA1NzYsIDAsIDYwOCwgNTc3LCA2MDksIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiNzIweDU3NiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAyOTgxNiwgNzIwLCA3MjEsIDc4NCwKKwkJICAgODE2LCAwLCA1NzYsIDU3NywgNjA4LCA2MDksIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiNzY4eDU3NiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzMTU3MDU2MCwgNzY5LCA4MzIsIDg2NCwKLQkJICAgNTc2LCAwLCA2MDgsIDU3NywgNjA5LCA0MTk2MTEyLCAwLAorCXsgRFJNX01PREUoIjc2OHg1NzYiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzE1NzAsIDc2OCwgNzY5LCA4MzIsCisJCSAgIDg2NCwgMCwgNTc2LCA1NzcsIDYwOCwgNjA5LCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjgwMHg2MDAiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgMzQwMzAwODAsIDgwMSwgODY0LCA4OTYsCi0JCSAgIDYwMCwgMCwgNjMyLCA2MDEsIDYzMywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI4MDB4NjAwIiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDM0MDMwLCA4MDAsIDgwMSwgODY0LAorCQkgICA4OTYsIDAsIDYwMCwgNjAxLCA2MzIsIDYzMywgMCwKIAkJICAgRFJNX01PREVfRkxBR19QSFNZTkMgfCBEUk1fTU9ERV9GTEFHX1BWU1lOQykgfSwKLQl7IERSTV9NT0RFKCI4MzJ4NjI0IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDM2NTgxNzYwLCA4MzMsIDg5NiwgOTI4LAotCQkgICA2MjQsIDAsIDY1NiwgNjI1LCA2NTcsIDQxOTYxMTIsIDAsCisJeyBEUk1fTU9ERSgiODMyeDYyNCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCAzNjU4MSwgODMyLCA4MzMsIDg5NiwKKwkJICAgOTI4LCAwLCA2MjQsIDYyNSwgNjU2LCA2NTcsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiOTIweDc2NiIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA0ODcwNzA0MCwgOTIxLCA5ODQsIDEwMTYsCi0JCSAgIDc2NiwgMCwgNzk4LCA3NjcsIDc5OSwgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCI5MjB4NzY2IiwgRFJNX01PREVfVFlQRV9EUklWRVIsIDQ4NzA3LCA5MjAsIDkyMSwgOTg0LAorCQkgICAxMDE2LCAwLCA3NjYsIDc2NywgNzk4LCA3OTksIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCi0JeyBEUk1fTU9ERSgiMTAyNHg3NjgiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgNTM4MjcyMDAsIDEwMjUsIDEwODgsIDExMjAsCi0JCSAgIDc2OCwgMCwgODAwLCA3NjksIDgwMSwgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCIxMDI0eDc2OCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA1MzgyNywgMTAyNCwgMTAyNSwgMTA4OCwKKwkJICAgMTEyMCwgMCwgNzY4LCA3NjksIDgwMCwgODAxLCAwLAogCQkgICBEUk1fTU9ERV9GTEFHX1BIU1lOQyB8IERSTV9NT0RFX0ZMQUdfUFZTWU5DKSB9LAotCXsgRFJNX01PREUoIjEyODB4MTAyNCIsIERSTV9NT0RFX1RZUEVfRFJJVkVSLCA4NzI2NTkyMCwgMTI4MSwgMTM0NCwgMTM3NiwKLQkJICAgMTAyNCwgMCwgMTA1NiwgMTAyNSwgMTA1NywgNDE5NjExMiwgMCwKKwl7IERSTV9NT0RFKCIxMjgweDEwMjQiLCBEUk1fTU9ERV9UWVBFX0RSSVZFUiwgODcyNjUsIDEyODAsIDEyODEsIDEzNDQsCisJCSAgIDEzNzYsIDAsIDEwMjQsIDEwMjUsIDEwNTYsIDEwNTcsIDAsCiAJCSAgIERSTV9NT0RFX0ZMQUdfUEhTWU5DIHwgRFJNX01PREVfRkxBR19QVlNZTkMpIH0sCiB9OwogCiBzdGF0aWMgdm9pZCBpbnRlbF9zZHZvX2dldF90dl9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQogewogCXN0cnVjdCBpbnRlbF9vdXRwdXQgKm91dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCXN0cnVjdCBpbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJpdiA9IG91dHB1dC0+ZGV2X3ByaXY7CisJc3RydWN0IGludGVsX3Nkdm9fc2R0dl9yZXNvbHV0aW9uX3JlcXVlc3QgdHZfcmVzOwogCXVpbnQzMl90IHJlcGx5ID0gMDsKIAl1aW50OF90IHN0YXR1czsKIAlpbnQgaSA9IDA7CkBAIC0xNDkxLDE1ICsxNTA3LDIyIEBACiAJLyogUmVhZCB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgaW5wdXQgcmVzb2x1dGlvbnMgZm9yIHRoZSBzZWxlY3RlZCBUVgogCSAqIGZvcm1hdC4KIAkgKi8KKwltZW1zZXQoJnR2X3JlcywgMCwgc2l6ZW9mKHR2X3JlcykpOworCW1lbWNweSgmdHZfcmVzLCAmc2R2b19wcml2LT50dl9mb3JtYXQsIHNpemVvZih0dl9yZXMpKTsKIAlpbnRlbF9zZHZvX3dyaXRlX2NtZChvdXRwdXQsIFNEVk9fQ01EX0dFVF9TRFRWX1JFU09MVVRJT05fU1VQUE9SVCwKLQkJCSAgICAgTlVMTCwgMCk7CisJCQkgICAgICZ0dl9yZXMsIHNpemVvZih0dl9yZXMpKTsKIAlzdGF0dXMgPSBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uob3V0cHV0LCAmcmVwbHksIDMpOwogCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpCiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkdm9fdHZfbW9kZXMpOyBpKyspCi0JCWlmIChyZXBseSAmICgxIDw8IGkpKQotCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsICZzZHZvX3R2X21vZGVzW2ldKTsKKwkJaWYgKHJlcGx5ICYgKDEgPDwgaSkpIHsKKwkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpubW9kZTsKKwkJCW5tb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGNvbm5lY3Rvci0+ZGV2LAorCQkJCQkmc2R2b190dl9tb2Rlc1tpXSk7CisJCQlpZiAobm1vZGUpCisJCQkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG5tb2RlKTsKKwkJfQogfQogCiBzdGF0aWMgaW50IGludGVsX3Nkdm9fZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCmluZGV4IDExMTdiOWMuLjE5MzkzOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm9fcmVncy5oCkBAIC0xMDAsNiArMTAwLDkgQEAKICAgICB1MTYgY2xvY2s7CiAgICAgdTE2IHdpZHRoOwogICAgIHUxNiBoZWlnaHQ7CisgICAgdTgJaW50ZXJsYWNlOjE7CisgICAgdTgJc2NhbGVkOjE7CisgICAgdTgJcGFkOjY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAvKiBJMkMgcmVnaXN0ZXJzIGZvciBTRFZPICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwppbmRleCBjZWNhOTQ3Li5kMmMzMjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKQEAgLTE1NzAsMzMgKzE1NzAsNDkgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CiAJc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0ID0gdG9faW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CiAJc3RydWN0IGludGVsX3R2X3ByaXYgKnR2X3ByaXYgPSBpbnRlbF9vdXRwdXQtPmRldl9wcml2OworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZpbnRlbF9vdXRwdXQtPmVuYzsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBlbmNvZGVyLT5jcnRjOwogCWludCByZXQgPSAwOworCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwogCiAJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfdmFsdWUoY29ubmVjdG9yLCBwcm9wZXJ0eSwgdmFsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9sZWZ0X21hcmdpbl9wcm9wZXJ0eSkKKwlpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9sZWZ0X21hcmdpbl9wcm9wZXJ0eSAmJgorCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX0xFRlRdICE9IHZhbCkgewogCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX0xFRlRdID0gdmFsOwotCWVsc2UgaWYgKHByb3BlcnR5ID09IGRldi0+bW9kZV9jb25maWcudHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5KQorCQljaGFuZ2VkID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGRldi0+bW9kZV9jb25maWcudHZfcmlnaHRfbWFyZ2luX3Byb3BlcnR5ICYmCisJCXR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fUklHSFRdICE9IHZhbCkgewogCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX1JJR0hUXSA9IHZhbDsKLQllbHNlIGlmIChwcm9wZXJ0eSA9PSBkZXYtPm1vZGVfY29uZmlnLnR2X3RvcF9tYXJnaW5fcHJvcGVydHkpCisJCWNoYW5nZWQgPSB0cnVlOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl90b3BfbWFyZ2luX3Byb3BlcnR5ICYmCisJCXR2X3ByaXYtPm1hcmdpbltUVl9NQVJHSU5fVE9QXSAhPSB2YWwpIHsKIAkJdHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9UT1BdID0gdmFsOwotCWVsc2UgaWYgKHByb3BlcnR5ID09IGRldi0+bW9kZV9jb25maWcudHZfYm90dG9tX21hcmdpbl9wcm9wZXJ0eSkKKwkJY2hhbmdlZCA9IHRydWU7CisJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBkZXYtPm1vZGVfY29uZmlnLnR2X2JvdHRvbV9tYXJnaW5fcHJvcGVydHkgJiYKKwkJdHZfcHJpdi0+bWFyZ2luW1RWX01BUkdJTl9CT1RUT01dICE9IHZhbCkgewogCQl0dl9wcml2LT5tYXJnaW5bVFZfTUFSR0lOX0JPVFRPTV0gPSB2YWw7Ci0JZWxzZSBpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9tb2RlX3Byb3BlcnR5KSB7CisJCWNoYW5nZWQgPSB0cnVlOworCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gZGV2LT5tb2RlX2NvbmZpZy50dl9tb2RlX3Byb3BlcnR5KSB7CiAJCWlmICh2YWwgPj0gTlVNX1RWX01PREVTKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KKwkJaWYgKCFzdHJjbXAodHZfcHJpdi0+dHZfZm9ybWF0LCB0dl9tb2Rlc1t2YWxdLm5hbWUpKQorCQkJZ290byBvdXQ7CisKIAkJdHZfcHJpdi0+dHZfZm9ybWF0ID0gdHZfbW9kZXNbdmFsXS5uYW1lOwotCQlpbnRlbF90dl9tb2RlX3NldCgmaW50ZWxfb3V0cHV0LT5lbmMsIE5VTEwsIE5VTEwpOworCQljaGFuZ2VkID0gdHJ1ZTsKIAl9IGVsc2UgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpbnRlbF90dl9tb2RlX3NldCgmaW50ZWxfb3V0cHV0LT5lbmMsIE5VTEwsIE5VTEwpOworCWlmIChjaGFuZ2VkICYmIGNydGMpCisJCWRybV9jcnRjX2hlbHBlcl9zZXRfbW9kZShjcnRjLCAmY3J0Yy0+bW9kZSwgY3J0Yy0+eCwKKwkJCQljcnRjLT55LCBjcnRjLT5mYik7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKaW5kZXggOWQxNGVlZS4uYmM5ZDA5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKQEAgLTM4OCwxNyArMzg4LDE3IEBACiAJCURSTV9JTkZPKCJMb2FkaW5nIFJTNzgwIENQIE1pY3JvY29kZVxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7CiAJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKLQkJCQkgICAgIFJWNjcwX2NwX21pY3JvY29kZVtpXVswXSk7CisJCQkJICAgICBSUzc4MF9jcF9taWNyb2NvZGVbaV1bMF0pOwogCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCi0JCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJCSAgICAgUlM3ODBfY3BfbWljcm9jb2RlW2ldWzFdKTsKIAkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAotCQkJCSAgICAgUlY2NzBfY3BfbWljcm9jb2RlW2ldWzJdKTsKKwkJCQkgICAgIFJTNzgwX2NwX21pY3JvY29kZVtpXVsyXSk7CiAJCX0KIAogCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CiAJCURSTV9JTkZPKCJMb2FkaW5nIFJTNzgwIFBGUCBNaWNyb2NvZGVcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKLQkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjY3MF9wZnBfbWljcm9jb2RlW2ldKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSUzc4MF9wZnBfbWljcm9jb2RlW2ldKTsKIAl9CiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOwogCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9LY29uZmlnIGIvZHJpdmVycy9oaWQvS2NvbmZpZwppbmRleCBlODVjOGZlLi43ZTY3ZGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaGlkL0tjb25maWcKQEAgLTI5LDExICsyOSwxMSBAQAogCiAJICBGb3IgZG9jcyBhbmQgc3BlY3MsIHNlZSBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9oaWRwYWdlLwogCi0JICBJZiB1bnN1cmUsIHNheSBZCisJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgSElEX0RFQlVHCiAJYm9vbCAiSElEIGRlYnVnZ2luZyBzdXBwb3J0IgotCWRlZmF1bHQgeSBpZiAhRU1CRURERUQKKwlkZWZhdWx0IHkKIAlkZXBlbmRzIG9uIEhJRAogCS0tLWhlbHAtLS0KIAlUaGlzIG9wdGlvbiBsZXRzIHRoZSBISUQgbGF5ZXIgb3V0cHV0IGRpYWdub3N0aWNzIGFib3V0IGl0cyBpbnRlcm5hbApAQCAtNDQsNyArNDQsNyBAQAogCVRoaXMgZmVhdHVyZSBpcyB1c2VmdWwgZm9yIHRob3NlIHdobyBhcmUgZWl0aGVyIGRlYnVnZ2luZyB0aGUgSElEIHBhcnNlcgogCW9yIGFueSBISUQgaGFyZHdhcmUgZGV2aWNlLgogCi0JSWYgdW5zdXJlLCBzYXkgTgorCUlmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBISURSQVcKIAlib29sICIvZGV2L2hpZHJhdyByYXcgSElEIGRldmljZSBzdXBwb3J0IgpAQCAtNzAsMTggKzcwLDYgQEAKIG1lbnUgIlNwZWNpYWwgSElEIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBISUQKIAotY29uZmlnIEhJRF9DT01QQVQKLQlib29sICJMb2FkIGFsbCBISUQgZHJpdmVycyBvbiBoaWQgY29yZSBsb2FkIgotCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KLQlDb21wYXRpYmxlIG9wdGlvbiBmb3Igb2xkZXIgdXNlcnNwYWNlLiBJZiB5b3UgaGF2ZSBzeXN0ZW0gd2l0aG91dCB1ZGV2Ci0Jc3VwcG9ydCBvZiBtb2R1bGUgbG9hZGluZyB0aHJvdWdoIGFsaWFzZXMgYW5kIGFsc28gb2xkCi0JbW9kdWxlLWluaXQtdG9vbHMgd2hpY2ggY2FuJ3QgaGFuZGxlIGhpZCBidXMsIGNob29zZSBZIGhlcmUuIE90aGVyd2lzZQotCXNheSBOLiBJZiB5b3Ugc2F5IE4gYW5kIHlvdXIgdXNlcnNwYWNlIGlzIG9sZCBlbm91Z2gsIHRoZSBvbmx5Ci0JZnVuY3Rpb25hbGl0eSB5b3UgbG9zZSBpcyBtb2R1bGVzIGF1dG9sb2FkaW5nLgotCi0JSWYgdW5zdXJlLCBzYXkgWS4KLQogY29uZmlnIEhJRF9BNFRFQ0gKIAl0cmlzdGF0ZSAiQTQgdGVjaCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTEyOCw2ICsxMTYsMTQgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgY3lwcmVzcyBtb3VzZSBhbmQgYmFyY29kZSByZWFkZXJzLgogCitjb25maWcgRFJBR09OUklTRV9GRgorCXRyaXN0YXRlICJEcmFnb25SaXNlIEluYy4gZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9ISUQKKwlzZWxlY3QgSU5QVVRfRkZfTUVNTEVTUworCS0tLWhlbHAtLS0KKwlTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBEcmFnb25SaXNlIEluYy4KKwlnYW1lIGNvbnRyb2xsZXJzLgorCiBjb25maWcgSElEX0VaS0VZCiAJdHJpc3RhdGUgIkV6a2V5IiBpZiBFTUJFRERFRAogCWRlcGVuZHMgb24gVVNCX0hJRApAQCAtMTM1LDYgKzEzMSwxMyBAQAogCS0tLWhlbHAtLS0KIAlTdXBwb3J0IGZvciBFemtleSBCVEMgODE5MyBrZXlib2FyZC4KIAorY29uZmlnIEhJRF9LWUUKKwl0cmlzdGF0ZSAiS3llIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgIUVNQkVEREVECisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIEt5ZS9HZW5pdXMgRXJnbyBNb3VzZS4KKwogY29uZmlnIEhJRF9HWVJBVElPTgogCXRyaXN0YXRlICJHeXJhdGlvbiIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTE0Miw2ICsxNDUsMTMgQEAKIAktLS1oZWxwLS0tCiAJU3VwcG9ydCBmb3IgR3lyYXRpb24gcmVtb3RlIGNvbnRyb2wuCiAKK2NvbmZpZyBISURfS0VOU0lOR1RPTgorCXRyaXN0YXRlICJLZW5zaW5ndG9uIiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX0hJRAorCWRlZmF1bHQgIUVNQkVEREVECisJLS0taGVscC0tLQorCVN1cHBvcnQgZm9yIEtlbnNpbmd0b24gU2xpbWJsYWRlIFRyYWNrYmFsbC4KKwogY29uZmlnIEhJRF9MT0dJVEVDSAogCXRyaXN0YXRlICJMb2dpdGVjaCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9ISUQKQEAgLTI0Myw3ICsyNTMsNyBAQAogCXNlbGVjdCBJTlBVVF9GRl9NRU1MRVNTCiAJLS0taGVscC0tLQogCVNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBHcmVlbkFzaWEgKFByb2R1Y3QgSUQgMHgxMikgYmFzZWQgZ2FtZSBjb250cm9sbGVyCi0JKGxpa2UgTUFOVEEgV2FyaW9yIE1NODE2IGFuZCBTcGVlZExpbmsgU3RyaWtlMiBTTC02NjM1KSBvciBhZGFwdGVyCisJKGxpa2UgTUFOVEEgV2FycmlvciBNTTgxNiBhbmQgU3BlZWRMaW5rIFN0cmlrZTIgU0wtNjYzNSkgb3IgYWRhcHRlcgogCWFuZCB3YW50IHRvIGVuYWJsZSBmb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBpdC4KIAogY29uZmlnIEhJRF9UT1BTRUVECmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCmluZGV4IGZiZDAyMWYuLjFmN2NiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCkBAIC04LDEwICs4LDYgQEAKIGhpZC0kKENPTkZJR19ISURfREVCVUcpCQkrPSBoaWQtZGVidWcubwogaGlkLSQoQ09ORklHX0hJRFJBVykJCSs9IGhpZHJhdy5vCiAKLWlmZGVmIENPTkZJR19ISURfQ09NUEFUCi1vYmotbQkJCQkrPSBoaWQtZHVtbXkubwotZW5kaWYKLQogaGlkLWxvZ2l0ZWNoLW9ianMJCTo9IGhpZC1sZy5vCiBpZmRlZiBDT05GSUdfTE9HSVRFQ0hfRkYKIAloaWQtbG9naXRlY2gtb2JqcwkrPSBoaWQtbGdmZi5vCkBAIC0yNiw4ICsyMiwxMSBAQAogb2JqLSQoQ09ORklHX0hJRF9DSEVSUlkpCSs9IGhpZC1jaGVycnkubwogb2JqLSQoQ09ORklHX0hJRF9DSElDT05ZKQkrPSBoaWQtY2hpY29ueS5vCiBvYmotJChDT05GSUdfSElEX0NZUFJFU1MpCSs9IGhpZC1jeXByZXNzLm8KK29iai0kKENPTkZJR19EUkFHT05SSVNFX0ZGKQkrPSBoaWQtZHJmZi5vCiBvYmotJChDT05GSUdfSElEX0VaS0VZKQkJKz0gaGlkLWV6a2V5Lm8KIG9iai0kKENPTkZJR19ISURfR1lSQVRJT04pCSs9IGhpZC1neXJhdGlvbi5vCitvYmotJChDT05GSUdfSElEX0tFTlNJTkdUT04pCSs9IGhpZC1rZW5zaW5ndG9uLm8KK29iai0kKENPTkZJR19ISURfS1lFKQkJKz0gaGlkLWt5ZS5vCiBvYmotJChDT05GSUdfSElEX0xPR0lURUNIKQkrPSBoaWQtbG9naXRlY2gubwogb2JqLSQoQ09ORklHX0hJRF9NSUNST1NPRlQpCSs9IGhpZC1taWNyb3NvZnQubwogb2JqLSQoQ09ORklHX0hJRF9NT05URVJFWSkJKz0gaGlkLW1vbnRlcmV5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYyBiL2RyaXZlcnMvaGlkL2hpZC1hNHRlY2guYwppbmRleCBlYmNhMDBlLi40MmVhMzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYTR0ZWNoLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWE0dGVjaC5jCkBAIC0xNTgsNSArMTU4LDMgQEAKIG1vZHVsZV9pbml0KGE0X2luaXQpOwogbW9kdWxlX2V4aXQoYTRfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIoYTR0ZWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1hcHBsZS5jIGIvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMKaW5kZXggYWEyOGFlZC4uNzM1OWQ5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWFwcGxlLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAl1OCBmbGFnczsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIGFwcGxlX2ZuX2tleXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIGFwcGxlX2ZuX2tleXNbXSA9IHsKIAl7IEtFWV9CQUNLU1BBQ0UsIEtFWV9ERUxFVEUgfSwKIAl7IEtFWV9FTlRFUiwJS0VZX0lOU0VSVCB9LAogCXsgS0VZX0YxLAlLRVlfQlJJR0hUTkVTU0RPV04sIEFQUExFX0ZMQUdfRktFWSB9LApAQCAtNzUsNyArNzUsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gcG93ZXJib29rX2ZuX2tleXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIHBvd2VyYm9va19mbl9rZXlzW10gPSB7CiAJeyBLRVlfQkFDS1NQQUNFLCBLRVlfREVMRVRFIH0sCiAJeyBLRVlfRjEsCUtFWV9CUklHSFRORVNTRE9XTiwgICAgIEFQUExFX0ZMQUdfRktFWSB9LAogCXsgS0VZX0YyLAlLRVlfQlJJR0hUTkVTU1VQLCAgICAgICBBUFBMRV9GTEFHX0ZLRVkgfSwKQEAgLTk0LDcgKzk0LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIHBvd2VyYm9va19udW1sb2NrX2tleXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIHBvd2VyYm9va19udW1sb2NrX2tleXNbXSA9IHsKIAl7IEtFWV9KLAlLRVlfS1AxIH0sCiAJeyBLRVlfSywJS0VZX0tQMiB9LAogCXsgS0VZX0wsCUtFWV9LUDMgfSwKQEAgLTExNywxNiArMTE3LDE2IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiBhcHBsZV9pc29fa2V5Ym9hcmRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uIGFwcGxlX2lzb19rZXlib2FyZFtdID0gewogCXsgS0VZX0dSQVZFLAlLRVlfMTAyTkQgfSwKIAl7IEtFWV8xMDJORCwJS0VZX0dSQVZFIH0sCiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqYXBwbGVfZmluZF90cmFuc2xhdGlvbigKLQkJc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdGFibGUsIHUxNiBmcm9tKQorc3RhdGljIGNvbnN0IHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKmFwcGxlX2ZpbmRfdHJhbnNsYXRpb24oCisJCWNvbnN0IHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRhYmxlLCB1MTYgZnJvbSkKIHsKLQlzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uICp0cmFuczsKKwljb25zdCBzdHJ1Y3QgYXBwbGVfa2V5X3RyYW5zbGF0aW9uICp0cmFuczsKIAogCS8qIExvb2sgZm9yIHRoZSB0cmFuc2xhdGlvbiAqLwogCWZvciAodHJhbnMgPSB0YWJsZTsgdHJhbnMtPmZyb207IHRyYW5zKyspCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkJc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UsIF9fczMyIHZhbHVlKQogewogCXN0cnVjdCBhcHBsZV9zYyAqYXNjID0gaGlkX2dldF9kcnZkYXRhKGhpZCk7Ci0Jc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdHJhbnM7CisJY29uc3Qgc3RydWN0IGFwcGxlX2tleV90cmFuc2xhdGlvbiAqdHJhbnM7CiAKIAlpZiAodXNhZ2UtPmNvZGUgPT0gS0VZX0ZOKSB7CiAJCWFzYy0+Zm5fb24gPSAhIXZhbHVlOwpAQCAtMjUzLDcgKzI1Myw3IEBACiAKIHN0YXRpYyB2b2lkIGFwcGxlX3NldHVwX2lucHV0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQogewotCXN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOworCWNvbnN0IHN0cnVjdCBhcHBsZV9rZXlfdHJhbnNsYXRpb24gKnRyYW5zOwogCiAJc2V0X2JpdChLRVlfTlVNTE9DSywgaW5wdXQtPmtleWJpdCk7CiAKQEAgLTM4Nyw2ICszODcsMTIgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMpLAogCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9OVU1MT0NLX0VNVUxBVElPTiB8IEFQUExFX0hBU19GTiB8CiAJCQlBUFBMRV9SREVTQ19KSVMgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX01JTklfQU5TSSksCisJCS5kcml2ZXJfZGF0YSA9IEFQUExFX0hBU19GTiB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfTUlOSV9JU08pLAorCQkuZHJpdmVyX2RhdGEgPSBBUFBMRV9IQVNfRk4gfCBBUFBMRV9JU09fS0VZQk9BUkQgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX01JTklfSklTKSwKKwkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9BTlNJKSwKIAkJLmRyaXZlcl9kYXRhID0gQVBQTEVfSEFTX0ZOIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9JU08pLApAQCAtNDY4LDUgKzQ3NCwzIEBACiBtb2R1bGVfaW5pdChhcHBsZV9pbml0KTsKIG1vZHVsZV9leGl0KGFwcGxlX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGFwcGxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYyBiL2RyaXZlcnMvaGlkL2hpZC1iZWxraW4uYwppbmRleCAxMmM4YTliLi4yZjY3MjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtYmVsa2luLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWJlbGtpbi5jCkBAIC0xMDEsNSArMTAxLDMgQEAKIG1vZHVsZV9pbml0KGJlbGtpbl9pbml0KTsKIG1vZHVsZV9leGl0KGJlbGtpbl9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihiZWxraW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jIGIvZHJpdmVycy9oaWQvaGlkLWNoZXJyeS5jCmluZGV4IGI4MzNiOTcuLmFiODIwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jaGVycnkuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtY2hlcnJ5LmMKQEAgLTgzLDUgKzgzLDMgQEAKIG1vZHVsZV9pbml0KGNoX2luaXQpOwogbW9kdWxlX2V4aXQoY2hfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIoY2hlcnJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMgYi9kcml2ZXJzL2hpZC9oaWQtY2hpY29ueS5jCmluZGV4IGE1NGQ0MDkuLjdmOTEwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jaGljb255LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNoaWNvbnkuYwpAQCAtNzYsNSArNzYsMyBAQAogbW9kdWxlX2luaXQoY2hfaW5pdCk7CiBtb2R1bGVfZXhpdChjaF9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihjaGljb255KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IDFjYzk2NzQuLjU3NDZhNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtMTIzNiw2ICsxMjM2LDkgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9BTlNJKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9HRVlTRVI0X0lTTykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9KSVMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9NSU5JX0FOU0kpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLCBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9NSU5JX0lTTykgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX01JTklfSklTKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BUFBMRSwgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfQU5TSSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0lTTykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX0pJUykgfSwKQEAgLTEyNjIsNiArMTI2NSw3IEBACiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzEpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19CQVJDT0RFXzIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0NZUFJFU1MsIFVTQl9ERVZJQ0VfSURfQ1lQUkVTU19NT1VTRSkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfRFJBR09OUklTRSwgMHgwMDA2KSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9FWktFWSwgVVNCX0RFVklDRV9JRF9CVENfODE5MykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0FNRVJPTiwgVVNCX0RFVklDRV9JRF9HQU1FUk9OX0RVQUxfUFNYX0FEQVBUT1IpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dBTUVST04sIFVTQl9ERVZJQ0VfSURfR0FNRVJPTl9EVUFMX1BDU19BREFQVE9SKSB9LApAQCAtMTI2OSw2ICsxMjczLDggQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1JFRU5BU0lBLCAweDAwMTIpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dZUkFUSU9OLCBVU0JfREVWSUNFX0lEX0dZUkFUSU9OX1JFTU9URSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR1lSQVRJT04sIFVTQl9ERVZJQ0VfSURfR1lSQVRJT05fUkVNT1RFXzIpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0tFTlNJTkdUT04sIFVTQl9ERVZJQ0VfSURfS1NfU0xJTUJMQURFKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9LWUUsIFVTQl9ERVZJQ0VfSURfS1lFX0VSR09fNTI1VikgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTEFCVEVDLCBVU0JfREVWSUNFX0lEX0xBQlRFQ19XSVJFTEVTU19LRVlCT0FSRCkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTE9HSVRFQ0gsIFVTQl9ERVZJQ0VfSURfTVgzMDAwX1JFQ0VJVkVSKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSCwgVVNCX0RFVklDRV9JRF9TNTEwX1JFQ0VJVkVSKSB9LApAQCAtMTgxMywxNCArMTgxOSwyMSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaGlkX3VucmVnaXN0ZXJfZHJpdmVyKTsKIAotI2lmZGVmIENPTkZJR19ISURfQ09NUEFUCi1zdGF0aWMgdm9pZCBoaWRfY29tcGF0X2xvYWQoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKK2ludCBoaWRfY2hlY2tfa2V5c19wcmVzc2VkKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCiB7Ci0JcmVxdWVzdF9tb2R1bGUoImhpZC1kdW1teSIpOworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0OworCWludCBpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShoaWRpbnB1dCwgJmhpZC0+aW5wdXRzLCBsaXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBCSVRTX1RPX0xPTkdTKEtFWV9NQVgpOyBpKyspCisJCQlpZiAoaGlkaW5wdXQtPmlucHV0LT5rZXlbaV0pCisJCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgREVDTEFSRV9XT1JLKGhpZF9jb21wYXRfd29yaywgaGlkX2NvbXBhdF9sb2FkKTsKLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqaGlkX2NvbXBhdF93cTsKLSNlbmRpZgorCitFWFBPUlRfU1lNQk9MX0dQTChoaWRfY2hlY2tfa2V5c19wcmVzc2VkKTsKIAogc3RhdGljIGludCBfX2luaXQgaGlkX2luaXQodm9pZCkKIHsKQEAgLTE4MzYsMTUgKzE4NDksNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2J1czsKIAotI2lmZGVmIENPTkZJR19ISURfQ09NUEFUCi0JaGlkX2NvbXBhdF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJoaWRfY29tcGF0Iik7Ci0JaWYgKCFoaWRfY29tcGF0X3dxKSB7Ci0JCWhpZHJhd19leGl0KCk7Ci0JCWdvdG8gZXJyOwotCX0KLQlxdWV1ZV93b3JrKGhpZF9jb21wYXRfd3EsICZoaWRfY29tcGF0X3dvcmspOwotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIGVycl9idXM6CiAJYnVzX3VucmVnaXN0ZXIoJmhpZF9idXNfdHlwZSk7CkBAIC0xODU0LDkgKzE4NTgsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaGlkX2V4aXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfSElEX0NPTVBBVAotCWRlc3Ryb3lfd29ya3F1ZXVlKGhpZF9jb21wYXRfd3EpOwotI2VuZGlmCiAJaGlkcmF3X2V4aXQoKTsKIAlidXNfdW5yZWdpc3RlcigmaGlkX2J1c190eXBlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jeXByZXNzLmMgYi9kcml2ZXJzL2hpZC9oaWQtY3lwcmVzcy5jCmluZGV4IDVkNjlkMjcuLjlkNmQzYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jeXByZXNzLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWN5cHJlc3MuYwpAQCAtMTU0LDUgKzE1NCwzIEBACiBtb2R1bGVfaW5pdChjcF9pbml0KTsKIG1vZHVsZV9leGl0KGNwX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGN5cHJlc3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWRyZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1kcmZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmM2ViNjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2hpZC9oaWQtZHJmZi5jCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogRm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgRHJhZ29uUmlzZSBJbmMuIGdhbWUgY29udHJvbGxlcnMKKyAqCisgKiBGcm9tIHdoYXQgSSBoYXZlIGdhdGhlcmVkLCB0aGVzZSBkZXZpY2VzIGFyZSBtYXNzIHByb2R1Y2VkIGluIENoaW5hIGFuZCBhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHNldmVyYWwgdmVuZG9ycy4gVGhleSBvZnRlbiBzaGFyZSB0aGUgc2FtZSBkZXNpZ24gYXMKKyAqIHRoZSBvcmlnaW5hbCBQbGF5U3RhdGlvbiBEdWFsU2hvY2sgY29udHJvbGxlci4KKyAqCisgKiAwMDc5OjAwMDYgIkRyYWdvblJpc2UgSW5jLiAgIEdlbmVyaWMgICBVU0IgIEpveXN0aWNrICAiCisgKiAgLSB0ZXN0ZWQgd2l0aCBhIFRlc3VuIFVTQi03MDMgZ2FtZSBjb250cm9sbGVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBSaWNoYXJkIFdhbG1zbGV5IDxyaWNod2FsbUBnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisjaW5jbHVkZSAidXNiaGlkL3VzYmhpZC5oIgorCitzdHJ1Y3QgZHJmZl9kZXZpY2UgeworCXN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQ7Cit9OworCitzdGF0aWMgaW50IGRyZmZfcGxheShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJmZl9kZXZpY2UgKmRyZmYgPSBkYXRhOworCWludCBzdHJvbmcsIHdlYWs7CisKKwlzdHJvbmcgPSBlZmZlY3QtPnUucnVtYmxlLnN0cm9uZ19tYWduaXR1ZGU7CisJd2VhayA9IGVmZmVjdC0+dS5ydW1ibGUud2Vha19tYWduaXR1ZGU7CisKKwlkYmdfaGlkKCJjYWxsZWQgd2l0aCAweCUwNHggMHglMDR4Iiwgc3Ryb25nLCB3ZWFrKTsKKworCWlmIChzdHJvbmcgfHwgd2VhaykgeworCQlzdHJvbmcgPSBzdHJvbmcgKiAweGZmIC8gMHhmZmZmOworCQl3ZWFrID0gd2VhayAqIDB4ZmYgLyAweGZmZmY7CisKKwkJLyogV2hpbGUgcmV2ZXJzZSBlbmdpbmVlcmluZyB0aGlzIGRldmljZSwgSSBmb3VuZCB0aGF0IHdoZW4KKwkJICAgdGhpcyB2YWx1ZSBpcyBzZXQsIGl0IGNhdXNlcyB0aGUgc3Ryb25nIHJ1bWJsZSB0byBmdW5jdGlvbgorCQkgICBhdCBhIG5lYXIgbWF4aW11bSBzcGVlZCwgc28gd2UnbGwgYnlwYXNzIGl0LiAqLworCQlpZiAod2VhayA9PSAweDBhKQorCQkJd2VhayA9IDB4MGI7CisKKwkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweDUxOworCQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDA7CisJCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gd2VhazsKKwkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNF0gPSBzdHJvbmc7CisJCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgZHJmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CisKKwkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweGZhOworCQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4ZmU7CisJfSBlbHNlIHsKKwkJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMF0gPSAweGYzOworCQlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsxXSA9IDB4MDA7CisJfQorCisJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMl0gPSAweDAwOworCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzRdID0gMHgwMDsKKwlkYmdfaGlkKCJydW5uaW5nIHdpdGggMHglMDJ4IDB4JTAyeCIsIHN0cm9uZywgd2Vhayk7CisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBkcmZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRyZmZfaW5pdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKQoreworCXN0cnVjdCBkcmZmX2RldmljZSAqZHJmZjsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OworCXN0cnVjdCBoaWRfaW5wdXQgKmhpZGlucHV0ID0gbGlzdF9maXJzdF9lbnRyeSgmaGlkLT5pbnB1dHMsCisJCQkJCQlzdHJ1Y3QgaGlkX2lucHV0LCBsaXN0KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfbGlzdCA9CisJCQkmaGlkLT5yZXBvcnRfZW51bVtISURfT1VUUFVUX1JFUE9SVF0ucmVwb3J0X2xpc3Q7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gaGlkaW5wdXQtPmlucHV0OworCWludCBlcnJvcjsKKworCWlmIChsaXN0X2VtcHR5KHJlcG9ydF9saXN0KSkgeworCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vIG91dHB1dCByZXBvcnRzIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmVwb3J0ID0gbGlzdF9maXJzdF9lbnRyeShyZXBvcnRfbGlzdCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOworCWlmIChyZXBvcnQtPm1heGZpZWxkIDwgMSkgeworCQlkZXZfZXJyKCZoaWQtPmRldiwgIm5vIGZpZWxkcyBpbiB0aGUgcmVwb3J0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKHJlcG9ydC0+ZmllbGRbMF0tPnJlcG9ydF9jb3VudCA8IDcpIHsKKwkJZGV2X2VycigmaGlkLT5kZXYsICJub3QgZW5vdWdoIHZhbHVlcyBpbiB0aGUgZmllbGRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkcmZmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRyZmZfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcmZmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNldF9iaXQoRkZfUlVNQkxFLCBkZXYtPmZmYml0KTsKKworCWVycm9yID0gaW5wdXRfZmZfY3JlYXRlX21lbWxlc3MoZGV2LCBkcmZmLCBkcmZmX3BsYXkpOworCWlmIChlcnJvcikgeworCQlrZnJlZShkcmZmKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWRyZmYtPnJlcG9ydCA9IHJlcG9ydDsKKwlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVswXSA9IDB4ZjM7CisJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOworCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gMHgwMDsKKwlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IDB4MDA7CisJZHJmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbNF0gPSAweDAwOworCWRyZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzVdID0gMHgwMDsKKwlkcmZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVs2XSA9IDB4MDA7CisJdXNiaGlkX3N1Ym1pdF9yZXBvcnQoaGlkLCBkcmZmLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKKworCWRldl9pbmZvKCZoaWQtPmRldiwgIkZvcmNlIEZlZWRiYWNrIGZvciBEcmFnb25SaXNlIEluYy4gZ2FtZSAiCisJICAgICAgICJjb250cm9sbGVycyBieSBSaWNoYXJkIFdhbG1zbGV5IDxyaWNod2FsbUBnbWFpbC5jb20+XG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRyX3Byb2JlKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKworCWRldl9kYmcoJmhkZXYtPmRldiwgIkRyYWdvblJpc2UgSW5jLiBISUQgaGFyZHdhcmUgcHJvYmUuLi4iKTsKKworCXJldCA9IGhpZF9wYXJzZShoZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgInBhcnNlIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUICYgfkhJRF9DT05ORUNUX0ZGKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmhkZXYtPmRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCWRyZmZfaW5pdChoZGV2KTsKKworCXJldHVybiAwOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBkcl9kZXZpY2VzW10gPSB7CisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0RSQUdPTlJJU0UsIDB4MDAwNiksICB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaGlkLCBkcl9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGRyX2RyaXZlciA9IHsKKwkubmFtZSA9ICJkcmFnb25yaXNlIiwKKwkuaWRfdGFibGUgPSBkcl9kZXZpY2VzLAorCS5wcm9iZSA9IGRyX3Byb2JlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZHJfaW5pdCh2b2lkKQoreworCXJldHVybiBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZkcl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZHJfZXhpdCh2b2lkKQoreworCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmZHJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZHJfaW5pdCk7Cittb2R1bGVfZXhpdChkcl9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1kdW1teS5jIGIvZHJpdmVycy9oaWQvaGlkLWR1bW15LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0Y2MwZjcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWR1bW15LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvYXV0b2NvbmYuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9oaWQuaD4KLQotc3RhdGljIGludCBfX2luaXQgaGlkX2R1bW15X2luaXQodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfSElEX0E0VEVDSF9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKGE0dGVjaCk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX0FQUExFX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoYXBwbGUpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9CRUxLSU5fTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihiZWxraW4pOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9CUklHSFRfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihicmlnaHQpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9DSEVSUllfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihjaGVycnkpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9DSElDT05ZX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoY2hpY29ueSk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX0NZUFJFU1NfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihjeXByZXNzKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfREVMTF9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKGRlbGwpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9FWktFWV9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKGV6a2V5KTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfR1lSQVRJT05fTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihneXJhdGlvbik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX0xPR0lURUNIX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIobG9naXRlY2gpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9NSUNST1NPRlRfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihtaWNyb3NvZnQpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9NT05URVJFWV9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKG1vbnRlcmV5KTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfTlRSSUdfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihudHJpZyk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX1BBTlRIRVJMT1JEX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIocGFudGhlcmxvcmQpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9QRVRBTFlOWF9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKHBldGFseW54KTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19ISURfU0FNU1VOR19NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKHNhbXN1bmcpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0hJRF9TT05ZX01PRFVMRQotCUhJRF9DT01QQVRfQ0FMTF9EUklWRVIoc29ueSk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSElEX1NVTlBMVVNfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihzdW5wbHVzKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19HUkVFTkFTSUFfRkZfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUihncmVlbmFzaWEpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1RIUlVTVE1BU1RFUl9GRl9NT0RVTEUKLQlISURfQ09NUEFUX0NBTExfRFJJVkVSKHRocnVzdG1hc3Rlcik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfWkVST1BMVVNfRkZfTU9EVUxFCi0JSElEX0NPTVBBVF9DQUxMX0RSSVZFUih6ZXJvcGx1cyk7Ci0jZW5kaWYKLQotCXJldHVybiAtRUlPOwotfQotbW9kdWxlX2luaXQoaGlkX2R1bW15X2luaXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZXprZXkuYyBiL2RyaXZlcnMvaGlkL2hpZC1lemtleS5jCmluZGV4IGRlYjQyZjkuLjBhMWZlMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1lemtleS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1lemtleS5jCkBAIC05MSw1ICs5MSwzIEBACiBtb2R1bGVfaW5pdChlel9pbml0KTsKIG1vZHVsZV9leGl0KGV6X2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGV6a2V5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1nYWZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtZ2FmZi5jCmluZGV4IDcxMjExZjYuLjUxMGFkM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1nYWZmLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWdhZmYuYwpAQCAtMTgxLDUgKzE4MSwzIEBACiBtb2R1bGVfaW5pdChnYV9pbml0KTsKIG1vZHVsZV9leGl0KGdhX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGdyZWVuYXNpYSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtZ3lyYXRpb24uYyBiL2RyaXZlcnMvaGlkL2hpZC1neXJhdGlvbi5jCmluZGV4IDA0YTBhZmUuLmQ0MmQyMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1neXJhdGlvbi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1neXJhdGlvbi5jCkBAIC05NCw1ICs5NCwzIEBACiBtb2R1bGVfaW5pdChneXJhdGlvbl9pbml0KTsKIG1vZHVsZV9leGl0KGd5cmF0aW9uX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGd5cmF0aW9uKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaCBiL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAppbmRleCA4ODUxMTk3Li5iZGVkYTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCkBAIC02Nyw2ICs2Nyw5IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSNF9BTlNJCTB4MDIxYQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSVNPCTB4MDIxYgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0dFWVNFUjRfSklTCTB4MDIxYworI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9NSU5JX0FOU0kJMHgwMjFkCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVBQTEVfQUxVX01JTklfSVNPCTB4MDIxZQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9NSU5JX0pJUwkweDAyMWYKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfQU5TSQkweDAyMjAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfSVNPCTB4MDIyMQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9KSVMJMHgwMjIyCkBAIC0xNDgsNiArMTUxLDggQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9ETUkJCTB4MGMwYgogI2RlZmluZSBVU0JfREVWSUNFX0lEX0RNSV9FTkMJCTB4NWZhYgogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfRFJBR09OUklTRQkweDAwNzkKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX0VMTwkJMHgwNEU3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfRUxPX1RTMjcwMAkweDAwMjAKIApAQCAtMjcyLDYgKzI3Nyw5IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTERfUE9XRVJDT05UUk9MCTB4MjAzMAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0xEX01BQ0hJTkVURVNUCTB4MjA0MAogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfS0VOU0lOR1RPTgkweDA0N2QKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9LU19TTElNQkxBREUJMHgyMDQxCisKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9MT0dJVEVDSAkJMHgwNDZkCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfUkVDRUlWRVIJMHhjMTAxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTE9HSVRFQ0hfSEFSTU9OWV9GSVJTVCAgMHhjMTEwCkBAIC00MTgsNiArNDI2LDggQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9aRVJPUExVUwkJMHgwYzEyCiAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9LWUUJCTB4MDQ1OAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0tZRV9FUkdPXzUyNVYJMHgwMDg3CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfS1lFX0dQRU5fNTYwCTB4NTAwMwogCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWtlbnNpbmd0b24uYyBiL2RyaXZlcnMvaGlkL2hpZC1rZW5zaW5ndG9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM1M2JkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1rZW5zaW5ndG9uLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqICBISUQgZHJpdmVyIGZvciBLZW5zaWd0b24gU2xpbWJsYWRlIFRyYWNrYmFsbAorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgSmlyaSBLb3NpbmEKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworI2RlZmluZSBrc19tYXBfa2V5KGMpCWhpZF9tYXBfdXNhZ2UoaGksIHVzYWdlLCBiaXQsIG1heCwgRVZfS0VZLCAoYykpCisKK3N0YXRpYyBpbnQga3NfaW5wdXRfbWFwcGluZyhzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9pbnB1dCAqaGksCisJCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkLCBzdHJ1Y3QgaGlkX3VzYWdlICp1c2FnZSwKKwkJdW5zaWduZWQgbG9uZyAqKmJpdCwgaW50ICptYXgpCit7CisJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpICE9IEhJRF9VUF9NU1ZFTkRPUikKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpIHsKKwljYXNlIDB4MDE6IGtzX21hcF9rZXkoQlROX01JRERMRSk7CWJyZWFrOworCWNhc2UgMHgwMjoga3NfbWFwX2tleShCVE5fU0lERSk7CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGtzX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS0VOU0lOR1RPTiwgVVNCX0RFVklDRV9JRF9LU19TTElNQkxBREUpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGtzX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIga3NfZHJpdmVyID0geworCS5uYW1lID0gImtlbnNpbmd0b24iLAorCS5pZF90YWJsZSA9IGtzX2RldmljZXMsCisJLmlucHV0X21hcHBpbmcgPSBrc19pbnB1dF9tYXBwaW5nLAorfTsKKworc3RhdGljIGludCBrc19pbml0KHZvaWQpCit7CisJcmV0dXJuIGhpZF9yZWdpc3Rlcl9kcml2ZXIoJmtzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGtzX2V4aXQodm9pZCkKK3sKKwloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmtzX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGtzX2luaXQpOworbW9kdWxlX2V4aXQoa3NfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQta3llLmMgYi9kcml2ZXJzL2hpZC9oaWQta3llLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlZTNmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1reWUuYwpAQCAtMCwwICsxLDY5IEBACisvKgorICogIEhJRCBkcml2ZXIgZm9yIEt5ZS9HZW5pdXMgZGV2aWNlcyBub3QgZnVsbHkgY29tcGxpYW50IHdpdGggSElEIHN0YW5kYXJkCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBKaXJpIEtvc2luYQorICogIENvcHlyaWdodCAoYykgMjAwOSBUb21hcyBIYW5haworICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgImhpZC1pZHMuaCIKKworLyogdGhlIGZpeHVwcyB0aGF0IG5lZWQgdG8gYmUgZG9uZToKKyAqICAgLSBjaGFuZ2UgbGVkIHVzYWdlIHBhZ2UgdG8gYnV0dG9uIGZvciBleHRyYSBidXR0b25zCisgKiAgIC0gcmVwb3J0IHNpemUgOCBjb3VudCAxIG11c3QgYmUgc2l6ZSAxIGNvdW50IDggZm9yIGJ1dHRvbiBiaXRmaWVsZAorICogICAtIGNoYW5nZSB0aGUgYnV0dG9uIHVzYWdlIHJhbmdlIHRvIDQtNyBmb3IgdGhlIGV4dHJhIGJ1dHRvbnMKKyAqLworc3RhdGljIHZvaWQga3llX3JlcG9ydF9maXh1cChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqcmRlc2MsCisJCXVuc2lnbmVkIGludCByc2l6ZSkKK3sKKwlpZiAocnNpemUgPj0gNzQgJiYKKwkJcmRlc2NbNjFdID09IDB4MDUgJiYgcmRlc2NbNjJdID09IDB4MDggJiYKKwkJcmRlc2NbNjNdID09IDB4MTkgJiYgcmRlc2NbNjRdID09IDB4MDggJiYKKwkJcmRlc2NbNjVdID09IDB4MjkgJiYgcmRlc2NbNjZdID09IDB4MGYgJiYKKwkJcmRlc2NbNzFdID09IDB4NzUgJiYgcmRlc2NbNzJdID09IDB4MDggJiYKKwkJcmRlc2NbNzNdID09IDB4OTUgJiYgcmRlc2NbNzRdID09IDB4MDEpIHsKKwkJZGV2X2luZm8oJmhkZXYtPmRldiwgImZpeGluZyB1cCBLeWUvR2VuaXVzIEVyZ28gTW91c2UgcmVwb3J0ICIKKwkJCQkiZGVzY3JpcHRvclxuIik7CisJCXJkZXNjWzYyXSA9IDB4MDk7CisJCXJkZXNjWzY0XSA9IDB4MDQ7CisJCXJkZXNjWzY2XSA9IDB4MDc7CisJCXJkZXNjWzcyXSA9IDB4MDE7CisJCXJkZXNjWzc0XSA9IDB4MDg7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQga3llX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfS1lFLCBVU0JfREVWSUNFX0lEX0tZRV9FUkdPXzUyNVYpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGt5ZV9kZXZpY2VzKTsKKworc3RhdGljIHN0cnVjdCBoaWRfZHJpdmVyIGt5ZV9kcml2ZXIgPSB7CisJLm5hbWUgPSAia3llIiwKKwkuaWRfdGFibGUgPSBreWVfZGV2aWNlcywKKwkucmVwb3J0X2ZpeHVwID0ga3llX3JlcG9ydF9maXh1cCwKK307CisKK3N0YXRpYyBpbnQga3llX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaGlkX3JlZ2lzdGVyX2RyaXZlcigma3llX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGt5ZV9leGl0KHZvaWQpCit7CisJaGlkX3VucmVnaXN0ZXJfZHJpdmVyKCZreWVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoa3llX2luaXQpOworbW9kdWxlX2V4aXQoa3llX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxnLmMgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwppbmRleCA4M2UwN2M5Li43YjgwY2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbGcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGcuYwpAQCAtMzI2LDUgKzMyNiwzIEBACiBtb2R1bGVfaW5pdChsZ19pbml0KTsKIG1vZHVsZV9leGl0KGxnX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKGxvZ2l0ZWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1taWNyb3NvZnQuYyBiL2RyaXZlcnMvaGlkL2hpZC1taWNyb3NvZnQuYwppbmRleCAyNWIxMGRjLi41ZTllMzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbWljcm9zb2Z0LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1pY3Jvc29mdC5jCkBAIC0yMTAsNSArMjEwLDMgQEAKIG1vZHVsZV9pbml0KG1zX2luaXQpOwogbW9kdWxlX2V4aXQobXNfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIobWljcm9zb2Z0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1tb250ZXJleS5jIGIvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMKaW5kZXggZjNhODVhMC4uMjQwZjg3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLW1vbnRlcmV5LmMKQEAgLTc4LDUgKzc4LDMgQEAKIG1vZHVsZV9pbml0KG1yX2luaXQpOwogbW9kdWxlX2V4aXQobXJfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIobW9udGVyZXkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW50cmlnLmMgYi9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYwppbmRleCBkYjQ0ZmJkLi5jNWIyNTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbnRyaWcuYwpAQCAtNzgsNSArNzgsMyBAQAogbW9kdWxlX2luaXQobnRyaWdfaW5pdCk7CiBtb2R1bGVfZXhpdChudHJpZ19leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihudHJpZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcGV0YWx5bnguYyBiL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jCmluZGV4IDEwOTQ1ZmUuLjJlODNlOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1wZXRhbHlueC5jCkBAIC0xMTgsNSArMTE4LDMgQEAKIG1vZHVsZV9pbml0KHBsX2luaXQpOwogbW9kdWxlX2V4aXQocGxfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIocGV0YWx5bngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXBsLmMgYi9kcml2ZXJzL2hpZC9oaWQtcGwuYwppbmRleCA0Njk0MWY5Li40ZGI5YTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtcGwuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtcGwuYwpAQCAtOSw5ICs5LDEyIEBACiAgKiAgIC0gY29udGFpbnMgdHdvIHJlcG9ydHMsIG9uZSBmb3IgZWFjaCBwb3J0IChISURfUVVJUktfTVVMVElfSU5QVVQpCiAgKgogICogIDBlOGY6MDAwMyAiR3JlZW5Bc2lhIEluYy4gICAgVVNCIEpveXN0aWNrICAgICAiCi0gKiAgIC0gdGVzdGVkIHdpdGggSz8/bmcgR2FtaW5nIGdhbWVwYWQKKyAqICAgLSB0ZXN0ZWQgd2l0aCBL9m5pZyBHYW1pbmcgZ2FtZXBhZAogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDcgQW5zc2kgSGFubnVsYSA8YW5zc2kuaGFubnVsYUBnbWFpbC5jb20+CisgKiAgMGU4ZjowMDAzICJHQVNJQSBVU0IgR2FtZXBhZCIKKyAqICAgLSBhbm90aGVyIHZlcnNpb24gb2YgdGhlIEv2bmlnIGdhbWVwYWQKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3LCAyMDA5IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPgogICovCiAKIC8qCkBAIC00Niw2ICs0OSw4IEBACiAKIHN0cnVjdCBwbGZmX2RldmljZSB7CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzMzIgKnN0cm9uZzsKKwlzMzIgKndlYWs7CiB9OwogCiBzdGF0aWMgaW50IGhpZF9wbGZmX3BsYXkoc3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLApAQCAtNjIsOCArNjcsOCBAQAogCWxlZnQgPSBsZWZ0ICogMHg3ZiAvIDB4ZmZmZjsKIAlyaWdodCA9IHJpZ2h0ICogMHg3ZiAvIDB4ZmZmZjsKIAotCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzJdID0gbGVmdDsKLQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVszXSA9IHJpZ2h0OworCSpwbGZmLT5zdHJvbmcgPSBsZWZ0OworCSpwbGZmLT53ZWFrID0gcmlnaHQ7CiAJZGVidWcoInJ1bm5pbmcgd2l0aCAweCUwMnggMHglMDJ4IiwgbGVmdCwgcmlnaHQpOwogCXVzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcGxmZi0+cmVwb3J0LCBVU0JfRElSX09VVCk7CiAKQEAgLTgwLDYgKzg1LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpyZXBvcnRfcHRyID0gcmVwb3J0X2xpc3Q7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2OwogCWludCBlcnJvcjsKKwlzMzIgKnN0cm9uZzsKKwlzMzIgKndlYWs7CiAKIAkvKiBUaGUgZGV2aWNlIGNvbnRhaW5zIG9uZSBvdXRwdXQgcmVwb3J0IHBlciBwaHlzaWNhbCBkZXZpY2UsIGFsbAogCSAgIGNvbnRhaW5pbmcgMSBmaWVsZCwgd2hpY2ggY29udGFpbnMgNCBmZjAwLjAwMDIgdXNhZ2VzIGFuZCA0IDE2Yml0CkBAIC04Nyw3ICs5NCwxMiBAQAogCiAJICAgVGhlIGlucHV0IHJlcG9ydHMgYWxzbyBjb250YWluIGEgZmllbGQgd2hpY2ggY29udGFpbnMKIAkgICA4IGZmMDAuMDAwMSB1c2FnZXMgYW5kIDggYm9vbGVhbiB2YWx1ZXMuIFRoZWlyIG1lYW5pbmcgaXMKLQkgICBjdXJyZW50bHkgdW5rbm93bi4gKi8KKwkgICBjdXJyZW50bHkgdW5rbm93bi4KKwkgICAKKwkgICBBIHZlcnNpb24gb2YgdGhlIDBlOGY6MDAwMyBleGlzdHMgdGhhdCBoYXMgYWxsIHRoZSB2YWx1ZXMgaW4KKwkgICBzZXBhcmF0ZSBmaWVsZHMgYW5kIG1pc3NlcyB0aGUgZXh0cmEgaW5wdXQgZmllbGQsIHRodXMgcmVzZW1ibGluZworCSAgIFplcm9wbHVzIChoaWQtenBmZikgZGV2aWNlcy4KKwkqLwogCiAJaWYgKGxpc3RfZW1wdHkocmVwb3J0X2xpc3QpKSB7CiAJCWRldl9lcnIoJmhpZC0+ZGV2LCAibm8gb3V0cHV0IHJlcG9ydHMgZm91bmRcbiIpOwpAQCAtMTEwLDggKzEyMiwyMSBAQAogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAotCQlpZiAocmVwb3J0LT5maWVsZFswXS0+cmVwb3J0X2NvdW50IDwgNCkgewotCQkJZGV2X2VycigmaGlkLT5kZXYsICJub3QgZW5vdWdoIHZhbHVlcyBpbiB0aGUgZmllbGRcbiIpOworCQlpZiAocmVwb3J0LT5maWVsZFswXS0+cmVwb3J0X2NvdW50ID49IDQpIHsKKwkJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMDsKKwkJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzFdID0gMHgwMDsKKwkJCXN0cm9uZyA9ICZyZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXTsKKwkJCXdlYWsgPSAmcmVwb3J0LT5maWVsZFswXS0+dmFsdWVbM107CisJCQlkZWJ1ZygiZGV0ZWN0ZWQgc2luZ2xlLWZpZWxkIGRldmljZSIpOworCQl9IGVsc2UgaWYgKHJlcG9ydC0+bWF4ZmllbGQgPj0gNCAmJiByZXBvcnQtPmZpZWxkWzBdLT5tYXh1c2FnZSA9PSAxICYmCisJCQkJcmVwb3J0LT5maWVsZFswXS0+dXNhZ2VbMF0uaGlkID09IChISURfVVBfTEVEIHwgMHg0MykpIHsKKwkJCXJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMDsKKwkJCXJlcG9ydC0+ZmllbGRbMV0tPnZhbHVlWzBdID0gMHgwMDsKKwkJCXN0cm9uZyA9ICZyZXBvcnQtPmZpZWxkWzJdLT52YWx1ZVswXTsKKwkJCXdlYWsgPSAmcmVwb3J0LT5maWVsZFszXS0+dmFsdWVbMF07CisJCQlkZWJ1ZygiZGV0ZWN0ZWQgNC1maWVsZCBkZXZpY2UiKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoJmhpZC0+ZGV2LCAibm90IGVub3VnaCBmaWVsZHMgb3IgdmFsdWVzXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKQEAgLTEzMCwxMCArMTU1LDExIEBACiAJCX0KIAogCQlwbGZmLT5yZXBvcnQgPSByZXBvcnQ7Ci0JCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzBdID0gMHgwMDsKLQkJcGxmZi0+cmVwb3J0LT5maWVsZFswXS0+dmFsdWVbMV0gPSAweDAwOwotCQlwbGZmLT5yZXBvcnQtPmZpZWxkWzBdLT52YWx1ZVsyXSA9IDB4MDA7Ci0JCXBsZmYtPnJlcG9ydC0+ZmllbGRbMF0tPnZhbHVlWzNdID0gMHgwMDsKKwkJcGxmZi0+c3Ryb25nID0gc3Ryb25nOworCQlwbGZmLT53ZWFrID0gd2VhazsKKworCQkqc3Ryb25nID0gMHgwMDsKKwkJKndlYWsgPSAweDAwOwogCQl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIHBsZmYtPnJlcG9ydCwgVVNCX0RJUl9PVVQpOwogCX0KIApAQCAtMTgwLDcgKzIwNiw3IEBACiAJCS5kcml2ZXJfZGF0YSA9IDEgfSwgLyogVHdpbiBVU0IgSm95c3RpY2sgKi8KIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0FNRVJPTiwgVVNCX0RFVklDRV9JRF9HQU1FUk9OX0RVQUxfUENTX0FEQVBUT1IpLAogCQkuZHJpdmVyX2RhdGEgPSAxIH0sIC8qIFR3aW4gVVNCIEpveXN0aWNrICovCi0JeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dSRUVOQVNJQSwgMHgwMDAzKSwgfSwgLyogR3JlZW5Bc2lhIEluYy4gVVNCIEpveXN0aWNrICovCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dSRUVOQVNJQSwgMHgwMDAzKSwgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGhpZCwgcGxfZGV2aWNlcyk7CkBAIC0yMDQsNSArMjMwLDMgQEAKIG1vZHVsZV9pbml0KHBsX2luaXQpOwogbW9kdWxlX2V4aXQocGxfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIocGFudGhlcmxvcmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYyBiL2RyaXZlcnMvaGlkL2hpZC1zYW1zdW5nLmMKaW5kZXggMTVmM2MwNC4uMDcwODNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXNhbXN1bmcuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtc2Ftc3VuZy5jCkBAIC05Niw1ICs5NiwzIEBACiBtb2R1bGVfaW5pdChzYW1zdW5nX2luaXQpOwogbW9kdWxlX2V4aXQoc2Ftc3VuZ19leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihzYW1zdW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zb255LmMgYi9kcml2ZXJzL2hpZC9oaWQtc29ueS5jCmluZGV4IGRkNWEzOTcuLmMyNTk5MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zb255LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXNvbnkuYwpAQCAtMTQ4LDUgKzE0OCwzIEBACiBtb2R1bGVfaW5pdChzb255X2luaXQpOwogbW9kdWxlX2V4aXQoc29ueV9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihzb255KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1zdW5wbHVzLmMgYi9kcml2ZXJzL2hpZC9oaWQtc3VucGx1cy5jCmluZGV4IDViYTY4ZjcuLmUwYThmZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1zdW5wbHVzLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXN1bnBsdXMuYwpAQCAtNzgsNSArNzgsMyBAQAogbW9kdWxlX2luaXQoc3BfaW5pdCk7CiBtb2R1bGVfZXhpdChzcF9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUihzdW5wbHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC10bWZmLmMgYi9kcml2ZXJzL2hpZC9oaWQtdG1mZi5jCmluZGV4IDFiN2NiYTAuLjdjMWY3YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC10bWZmLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLXRtZmYuYwpAQCAtMjY1LDUgKzI2NSwzIEBACiBtb2R1bGVfaW5pdCh0bV9pbml0KTsKIG1vZHVsZV9leGl0KHRtX2V4aXQpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1ISURfQ09NUEFUX0xPQURfRFJJVkVSKHRocnVzdG1hc3Rlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtdG9wc2VlZC5jIGIvZHJpdmVycy9oaWQvaGlkLXRvcHNlZWQuYwppbmRleCBjY2E2NGEwLi4xNTJjY2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtdG9wc2VlZC5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC10b3BzZWVkLmMKQEAgLTczLDUgKzczLDMgQEAKIG1vZHVsZV9pbml0KHRzX2luaXQpOwogbW9kdWxlX2V4aXQodHNfZXhpdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLUhJRF9DT01QQVRfTE9BRF9EUklWRVIodG9wc2VlZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtenBmZi5jIGIvZHJpdmVycy9oaWQvaGlkLXpwZmYuYwppbmRleCBlYTgyZjM3Li44NWExOThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtenBmZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC16cGZmLmMKQEAgLTE1OCw1ICsxNTgsMyBAQAogbW9kdWxlX2luaXQoenBfaW5pdCk7CiBtb2R1bGVfZXhpdCh6cF9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotSElEX0NPTVBBVF9MT0FEX0RSSVZFUih6ZXJvcGx1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWRyYXcuYyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCmluZGV4IDAyYjE5ZGIuLmUyNjNkNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZHJhdy5jCkBAIC0xODEsOSArMTgxLDE3IEBACiAKIAlkZXYgPSBoaWRyYXdfdGFibGVbbWlub3JdOwogCWlmICghZGV2LT5vcGVuKyspIHsKKwkJaWYgKGRldi0+aGlkLT5sbF9kcml2ZXItPnBvd2VyKSB7CisJCQllcnIgPSBkZXYtPmhpZC0+bGxfZHJpdmVyLT5wb3dlcihkZXYtPmhpZCwgUE1fSElOVF9GVUxMT04pOworCQkJaWYgKGVyciA8IDApCisJCQkJZ290byBvdXRfdW5sb2NrOworCQl9CiAJCWVyciA9IGRldi0+aGlkLT5sbF9kcml2ZXItPm9wZW4oZGV2LT5oaWQpOwotCQlpZiAoZXJyIDwgMCkKKwkJaWYgKGVyciA8IDApIHsKKwkJCWlmIChkZXYtPmhpZC0+bGxfZHJpdmVyLT5wb3dlcikKKwkJCQlkZXYtPmhpZC0+bGxfZHJpdmVyLT5wb3dlcihkZXYtPmhpZCwgUE1fSElOVF9OT1JNQUwpOwogCQkJZGV2LT5vcGVuLS07CisJCX0KIAl9CiAKIG91dF91bmxvY2s6CkBAIC0yMDksMTAgKzIxNywxMyBAQAogCWxpc3RfZGVsKCZsaXN0LT5ub2RlKTsKIAlkZXYgPSBoaWRyYXdfdGFibGVbbWlub3JdOwogCWlmICghLS1kZXYtPm9wZW4pIHsKLQkJaWYgKGxpc3QtPmhpZHJhdy0+ZXhpc3QpCisJCWlmIChsaXN0LT5oaWRyYXctPmV4aXN0KSB7CisJCQlpZiAoZGV2LT5oaWQtPmxsX2RyaXZlci0+cG93ZXIpCisJCQkJZGV2LT5oaWQtPmxsX2RyaXZlci0+cG93ZXIoZGV2LT5oaWQsIFBNX0hJTlRfTk9STUFMKTsKIAkJCWRldi0+aGlkLT5sbF9kcml2ZXItPmNsb3NlKGRldi0+aGlkKTsKLQkJZWxzZQorCQl9IGVsc2UgewogCQkJa2ZyZWUobGlzdC0+aGlkcmF3KTsKKwkJfQogCX0KIAogCWtmcmVlKGxpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwppbmRleCBmMGEwZjcyLi40MzA2Y2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWNvcmUuYwpAQCAtNSw2ICs1LDcgQEAKICAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNSBWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgogICogIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEhhYm91c3RhayA8bWlrZS1AY2luY2kucnIuY29tPiBmb3IgQ29uY2VwdDIsIEluYwogICogIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEppcmkgS29zaW5hCisgKiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggT2xpdmVyIE5ldWt1bQogICovCiAKIC8qCkBAIC0yNyw2ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKQEAgLTUzLDYgKzU1LDEwIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQobW91c2Vwb2xsLCBoaWRfbW91c2Vwb2xsX2ludGVydmFsLCB1aW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobW91c2Vwb2xsLCAiUG9sbGluZyBpbnRlcnZhbCBvZiBtaWNlIik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaWdub3JlbGVkOworbW9kdWxlX3BhcmFtX25hbWVkKGlnbm9yZWxlZCwgaWdub3JlbGVkLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWdub3JlbGVkLCAiQXV0b3N1c3BlbmQgd2l0aCBhY3RpdmUgbGVkcyIpOworCiAvKiBRdWlya3Mgc3BlY2lmaWVkIGF0IG1vZHVsZSBsb2FkIHRpbWUgKi8KIHN0YXRpYyBjaGFyICpxdWlya3NfcGFyYW1bTUFYX1VTQkhJRF9CT09UX1FVSVJLU10gPSB7IFsgMCAuLi4gKE1BWF9VU0JISURfQk9PVF9RVUlSS1MgLSAxKSBdID0gTlVMTCB9OwogbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKHF1aXJrcywgcXVpcmtzX3BhcmFtLCBjaGFycCwgTlVMTCwgMDQ0NCk7CkBAIC02Myw4ICs2OSwxMyBAQAogLyoKICAqIElucHV0IHN1Ym1pc3Npb24gYW5kIEkvTyBlcnJvciBoYW5kbGVyLgogICovCitzdGF0aWMgREVGSU5FX01VVEVYKGhpZF9vcGVuX211dCk7CitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlc3VtcHRpb25fd2FrZXI7CiAKIHN0YXRpYyB2b2lkIGhpZF9pb19lcnJvcihzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKK3N0YXRpYyBpbnQgaGlkX3N1Ym1pdF9vdXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CitzdGF0aWMgaW50IGhpZF9zdWJtaXRfY3RybChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKK3N0YXRpYyB2b2lkIGhpZF9jYW5jZWxfZGVsYXllZF9zdHVmZihzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkKTsKIAogLyogU3RhcnQgdXAgdGhlIGlucHV0IFVSQiAqLwogc3RhdGljIGludCBoaWRfc3RhcnRfaW4oc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKQEAgLTczLDE1ICs4NCwxNiBAQAogCWludCByYyA9IDA7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5pbmxvY2ssIGZsYWdzKTsKLQlpZiAoaGlkLT5vcGVuID4gMCAmJiAhdGVzdF9iaXQoSElEX1NVU1BFTkRFRCwgJnVzYmhpZC0+aW9mbCkgJiYKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5sb2NrLCBmbGFncyk7CisJaWYgKGhpZC0+b3BlbiA+IDAgJiYKIAkJCSF0ZXN0X2JpdChISURfRElTQ09OTkVDVEVELCAmdXNiaGlkLT5pb2ZsKSAmJgorCQkJIXRlc3RfYml0KEhJRF9SRVBPUlRFRF9JRExFLCAmdXNiaGlkLT5pb2ZsKSAmJgogCQkJIXRlc3RfYW5kX3NldF9iaXQoSElEX0lOX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpKSB7CiAJCXJjID0gdXNiX3N1Ym1pdF91cmIodXNiaGlkLT51cmJpbiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyYyAhPSAwKQogCQkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5pbmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTE0NSw3ICsxNTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5pbmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBTdG9wIHdoZW4gZGlzY29ubmVjdGVkICovCiAJaWYgKHRlc3RfYml0KEhJRF9ESVNDT05ORUNURUQsICZ1c2JoaWQtPmlvZmwpKQpAQCAtMTc1LDcgKzE4Nyw1MSBAQAogCW1vZF90aW1lcigmdXNiaGlkLT5pb19yZXRyeSwKIAkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHVzYmhpZC0+cmV0cnlfZGVsYXkpKTsKIGRvbmU6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5pbmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgdXNiaGlkX21hcmtfYnVzeShzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdXNiaGlkLT5pbnRmOworCisJdXNiX21hcmtfbGFzdF9idXN5KGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOworfQorCitzdGF0aWMgaW50IHVzYmhpZF9yZXN0YXJ0X291dF9xdWV1ZShzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhKHVzYmhpZC0+aW50Zik7CisJaW50IGtpY2tlZDsKKworCWlmICghaGlkKQorCQlyZXR1cm4gMDsKKworCWlmICgoa2lja2VkID0gKHVzYmhpZC0+b3V0aGVhZCAhPSB1c2JoaWQtPm91dHRhaWwpKSkgeworCQlkYmcoIktpY2tpbmcgaGVhZCAlZCB0YWlsICVkIiwgdXNiaGlkLT5vdXRoZWFkLCB1c2JoaWQtPm91dHRhaWwpOworCQlpZiAoaGlkX3N1Ym1pdF9vdXQoaGlkKSkgeworCQkJY2xlYXJfYml0KEhJRF9PVVRfUlVOTklORywgJnVzYmhpZC0+aW9mbCk7CisJCQl3YWtlX3VwKCZ1c2JoaWQtPndhaXQpOworCQl9CisJfQorCXJldHVybiBraWNrZWQ7Cit9CisKK3N0YXRpYyBpbnQgdXNiaGlkX3Jlc3RhcnRfY3RybF9xdWV1ZShzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhKHVzYmhpZC0+aW50Zik7CisJaW50IGtpY2tlZDsKKworCVdBUk5fT04oaGlkID09IE5VTEwpOworCWlmICghaGlkKQorCQlyZXR1cm4gMDsKKworCWlmICgoa2lja2VkID0gKHVzYmhpZC0+Y3RybGhlYWQgIT0gdXNiaGlkLT5jdHJsdGFpbCkpKSB7CisJCWRiZygiS2lja2luZyBoZWFkICVkIHRhaWwgJWQiLCB1c2JoaWQtPmN0cmxoZWFkLCB1c2JoaWQtPmN0cmx0YWlsKTsKKwkJaWYgKGhpZF9zdWJtaXRfY3RybChoaWQpKSB7CisJCQljbGVhcl9iaXQoSElEX0NUUkxfUlVOTklORywgJnVzYmhpZC0+aW9mbCk7CisJCQl3YWtlX3VwKCZ1c2JoaWQtPndhaXQpOworCQl9CisJfQorCXJldHVybiBraWNrZWQ7CiB9CiAKIC8qCkBAIC0xOTAsMTIgKzI0NiwyMyBAQAogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewogCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCisJCXVzYmhpZF9tYXJrX2J1c3kodXNiaGlkKTsKIAkJdXNiaGlkLT5yZXRyeV9kZWxheSA9IDA7CiAJCWhpZF9pbnB1dF9yZXBvcnQodXJiLT5jb250ZXh0LCBISURfSU5QVVRfUkVQT1JULAogCQkJCSB1cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkJCQkgdXJiLT5hY3R1YWxfbGVuZ3RoLCAxKTsKKwkJLyoKKwkJICogYXV0b3N1c3BlbmQgcmVmdXNlZCB3aGlsZSBrZXlzIGFyZSBwcmVzc2VkCisJCSAqIGJlY2F1c2UgbW9zdCBrZXlib2FyZHMgZG9uJ3Qgd2FrZSB1cCB3aGVuCisJCSAqIGEga2V5IGlzIHJlbGVhc2VkCisJCSAqLworCQlpZiAoaGlkX2NoZWNrX2tleXNfcHJlc3NlZChoaWQpKQorCQkJc2V0X2JpdChISURfS0VZU19QUkVTU0VELCAmdXNiaGlkLT5pb2ZsKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KEhJRF9LRVlTX1BSRVNTRUQsICZ1c2JoaWQtPmlvZmwpOwogCQlicmVhazsKIAljYXNlIC1FUElQRToJCS8qIHN0YWxsICovCisJCXVzYmhpZF9tYXJrX2J1c3kodXNiaGlkKTsKIAkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKIAkJc2V0X2JpdChISURfQ0xFQVJfSEFMVCwgJnVzYmhpZC0+aW9mbCk7CiAJCXNjaGVkdWxlX3dvcmsoJnVzYmhpZC0+cmVzZXRfd29yayk7CkBAIC0yMDksNiArMjc2LDcgQEAKIAljYXNlIC1FUFJPVE86CQkvKiBwcm90b2NvbCBlcnJvciBvciB1bnBsdWcgKi8KIAljYXNlIC1FVElNRToJCS8qIHByb3RvY29sIGVycm9yIG9yIHVucGx1ZyAqLwogCWNhc2UgLUVUSU1FRE9VVDoJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0Li4uICovCisJCXVzYmhpZF9tYXJrX2J1c3kodXNiaGlkKTsKIAkJY2xlYXJfYml0KEhJRF9JTl9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKIAkJaGlkX2lvX2Vycm9yKGhpZCk7CiAJCXJldHVybjsKQEAgLTIzOSwxNiArMzA3LDI1IEBACiAJcmVwb3J0ID0gdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXR0YWlsXS5yZXBvcnQ7CiAJcmF3X3JlcG9ydCA9IHVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0dGFpbF0ucmF3X3JlcG9ydDsKIAotCXVzYmhpZC0+dXJib3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOwotCXVzYmhpZC0+dXJib3V0LT5kZXYgPSBoaWRfdG9fdXNiX2RldihoaWQpOwotCW1lbWNweSh1c2JoaWQtPm91dGJ1ZiwgcmF3X3JlcG9ydCwgdXNiaGlkLT51cmJvdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwotCWtmcmVlKHJhd19yZXBvcnQpOworCWlmICghdGVzdF9iaXQoSElEX1JFUE9SVEVEX0lETEUsICZ1c2JoaWQtPmlvZmwpKSB7CisJCXVzYmhpZC0+dXJib3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOworCQl1c2JoaWQtPnVyYm91dC0+ZGV2ID0gaGlkX3RvX3VzYl9kZXYoaGlkKTsKKwkJbWVtY3B5KHVzYmhpZC0+b3V0YnVmLCByYXdfcmVwb3J0LCB1c2JoaWQtPnVyYm91dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJCWtmcmVlKHJhd19yZXBvcnQpOwogCi0JZGJnX2hpZCgic3VibWl0dGluZyBvdXQgdXJiXG4iKTsKKwkJZGJnX2hpZCgic3VibWl0dGluZyBvdXQgdXJiXG4iKTsKIAotCWlmICh1c2Jfc3VibWl0X3VyYih1c2JoaWQtPnVyYm91dCwgR0ZQX0FUT01JQykpIHsKLQkJZXJyX2hpZCgidXNiX3N1Ym1pdF91cmIob3V0KSBmYWlsZWQiKTsKLQkJcmV0dXJuIC0xOworCQlpZiAodXNiX3N1Ym1pdF91cmIodXNiaGlkLT51cmJvdXQsIEdGUF9BVE9NSUMpKSB7CisJCQllcnJfaGlkKCJ1c2Jfc3VibWl0X3VyYihvdXQpIGZhaWxlZCIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogcXVldWUgd29yayB0byB3YWtlIHVwIHRoZSBkZXZpY2UuCisJCSAqIGFzIHRoZSB3b3JrIHF1ZXVlIGlzIGZyZWV6ZWFibGUsIHRoaXMgaXMgc2FmZQorCQkgKiB3aXRoIHJlc3BlY3QgdG8gU1REIGFuZCBTVFIKKwkJICovCisJCXF1ZXVlX3dvcmsocmVzdW1wdGlvbl93YWtlciwgJnVzYmhpZC0+cmVzdGFydF93b3JrKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTI2Niw0MSArMzQzLDUwIEBACiAJcmF3X3JlcG9ydCA9IHVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmx0YWlsXS5yYXdfcmVwb3J0OwogCWRpciA9IHVzYmhpZC0+Y3RybFt1c2JoaWQtPmN0cmx0YWlsXS5kaXI7CiAKLQlsZW4gPSAoKHJlcG9ydC0+c2l6ZSAtIDEpID4+IDMpICsgMSArIChyZXBvcnQtPmlkID4gMCk7Ci0JaWYgKGRpciA9PSBVU0JfRElSX09VVCkgewotCQl1c2JoaWQtPnVyYmN0cmwtPnBpcGUgPSB1c2Jfc25kY3RybHBpcGUoaGlkX3RvX3VzYl9kZXYoaGlkKSwgMCk7Ci0JCXVzYmhpZC0+dXJiY3RybC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGxlbjsKLQkJbWVtY3B5KHVzYmhpZC0+Y3RybGJ1ZiwgcmF3X3JlcG9ydCwgbGVuKTsKLQkJa2ZyZWUocmF3X3JlcG9ydCk7CisJaWYgKCF0ZXN0X2JpdChISURfUkVQT1JURURfSURMRSwgJnVzYmhpZC0+aW9mbCkpIHsKKwkJbGVuID0gKChyZXBvcnQtPnNpemUgLSAxKSA+PiAzKSArIDEgKyAocmVwb3J0LT5pZCA+IDApOworCQlpZiAoZGlyID09IFVTQl9ESVJfT1VUKSB7CisJCQl1c2JoaWQtPnVyYmN0cmwtPnBpcGUgPSB1c2Jfc25kY3RybHBpcGUoaGlkX3RvX3VzYl9kZXYoaGlkKSwgMCk7CisJCQl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBsZW47CisJCQltZW1jcHkodXNiaGlkLT5jdHJsYnVmLCByYXdfcmVwb3J0LCBsZW4pOworCQkJa2ZyZWUocmF3X3JlcG9ydCk7CisJCX0gZWxzZSB7CisJCQlpbnQgbWF4cGFja2V0LCBwYWRsZW47CisKKwkJCXVzYmhpZC0+dXJiY3RybC0+cGlwZSA9IHVzYl9yY3ZjdHJscGlwZShoaWRfdG9fdXNiX2RldihoaWQpLCAwKTsKKwkJCW1heHBhY2tldCA9IHVzYl9tYXhwYWNrZXQoaGlkX3RvX3VzYl9kZXYoaGlkKSwgdXNiaGlkLT51cmJjdHJsLT5waXBlLCAwKTsKKwkJCWlmIChtYXhwYWNrZXQgPiAwKSB7CisJCQkJcGFkbGVuID0gRElWX1JPVU5EX1VQKGxlbiwgbWF4cGFja2V0KTsKKwkJCQlwYWRsZW4gKj0gbWF4cGFja2V0OworCQkJCWlmIChwYWRsZW4gPiB1c2JoaWQtPmJ1ZnNpemUpCisJCQkJCXBhZGxlbiA9IHVzYmhpZC0+YnVmc2l6ZTsKKwkJCX0gZWxzZQorCQkJCXBhZGxlbiA9IDA7CisJCQl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwYWRsZW47CisJCX0KKwkJdXNiaGlkLT51cmJjdHJsLT5kZXYgPSBoaWRfdG9fdXNiX2RldihoaWQpOworCisJCXVzYmhpZC0+Y3ItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IGRpcjsKKwkJdXNiaGlkLT5jci0+YlJlcXVlc3QgPSAoZGlyID09IFVTQl9ESVJfT1VUKSA/IEhJRF9SRVFfU0VUX1JFUE9SVCA6IEhJRF9SRVFfR0VUX1JFUE9SVDsKKwkJdXNiaGlkLT5jci0+d1ZhbHVlID0gY3B1X3RvX2xlMTYoKChyZXBvcnQtPnR5cGUgKyAxKSA8PCA4KSB8IHJlcG9ydC0+aWQpOworCQl1c2JoaWQtPmNyLT53SW5kZXggPSBjcHVfdG9fbGUxNih1c2JoaWQtPmlmbnVtKTsKKwkJdXNiaGlkLT5jci0+d0xlbmd0aCA9IGNwdV90b19sZTE2KGxlbik7CisKKwkJZGJnX2hpZCgic3VibWl0dGluZyBjdHJsIHVyYjogJXMgd1ZhbHVlPTB4JTA0eCB3SW5kZXg9MHglMDR4IHdMZW5ndGg9JXVcbiIsCisJCQl1c2JoaWQtPmNyLT5iUmVxdWVzdCA9PSBISURfUkVRX1NFVF9SRVBPUlQgPyAiU2V0X1JlcG9ydCIgOiAiR2V0X1JlcG9ydCIsCisJCQl1c2JoaWQtPmNyLT53VmFsdWUsIHVzYmhpZC0+Y3ItPndJbmRleCwgdXNiaGlkLT5jci0+d0xlbmd0aCk7CisKKwkJaWYgKHVzYl9zdWJtaXRfdXJiKHVzYmhpZC0+dXJiY3RybCwgR0ZQX0FUT01JQykpIHsKKwkJCWVycl9oaWQoInVzYl9zdWJtaXRfdXJiKGN0cmwpIGZhaWxlZCIpOworCQkJcmV0dXJuIC0xOworCQl9CiAJfSBlbHNlIHsKLQkJaW50IG1heHBhY2tldCwgcGFkbGVuOwotCi0JCXVzYmhpZC0+dXJiY3RybC0+cGlwZSA9IHVzYl9yY3ZjdHJscGlwZShoaWRfdG9fdXNiX2RldihoaWQpLCAwKTsKLQkJbWF4cGFja2V0ID0gdXNiX21heHBhY2tldChoaWRfdG9fdXNiX2RldihoaWQpLCB1c2JoaWQtPnVyYmN0cmwtPnBpcGUsIDApOwotCQlpZiAobWF4cGFja2V0ID4gMCkgewotCQkJcGFkbGVuID0gRElWX1JPVU5EX1VQKGxlbiwgbWF4cGFja2V0KTsKLQkJCXBhZGxlbiAqPSBtYXhwYWNrZXQ7Ci0JCQlpZiAocGFkbGVuID4gdXNiaGlkLT5idWZzaXplKQotCQkJCXBhZGxlbiA9IHVzYmhpZC0+YnVmc2l6ZTsKLQkJfSBlbHNlCi0JCQlwYWRsZW4gPSAwOwotCQl1c2JoaWQtPnVyYmN0cmwtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBwYWRsZW47Ci0JfQotCXVzYmhpZC0+dXJiY3RybC0+ZGV2ID0gaGlkX3RvX3VzYl9kZXYoaGlkKTsKLQotCXVzYmhpZC0+Y3ItPmJSZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSB8IGRpcjsKLQl1c2JoaWQtPmNyLT5iUmVxdWVzdCA9IChkaXIgPT0gVVNCX0RJUl9PVVQpID8gSElEX1JFUV9TRVRfUkVQT1JUIDogSElEX1JFUV9HRVRfUkVQT1JUOwotCXVzYmhpZC0+Y3ItPndWYWx1ZSA9IGNwdV90b19sZTE2KCgocmVwb3J0LT50eXBlICsgMSkgPDwgOCkgfCByZXBvcnQtPmlkKTsKLQl1c2JoaWQtPmNyLT53SW5kZXggPSBjcHVfdG9fbGUxNih1c2JoaWQtPmlmbnVtKTsKLQl1c2JoaWQtPmNyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKLQotCWRiZ19oaWQoInN1Ym1pdHRpbmcgY3RybCB1cmI6ICVzIHdWYWx1ZT0weCUwNHggd0luZGV4PTB4JTA0eCB3TGVuZ3RoPSV1XG4iLAotCQl1c2JoaWQtPmNyLT5iUmVxdWVzdCA9PSBISURfUkVRX1NFVF9SRVBPUlQgPyAiU2V0X1JlcG9ydCIgOiAiR2V0X1JlcG9ydCIsCi0JCXVzYmhpZC0+Y3ItPndWYWx1ZSwgdXNiaGlkLT5jci0+d0luZGV4LCB1c2JoaWQtPmNyLT53TGVuZ3RoKTsKLQotCWlmICh1c2Jfc3VibWl0X3VyYih1c2JoaWQtPnVyYmN0cmwsIEdGUF9BVE9NSUMpKSB7Ci0JCWVycl9oaWQoInVzYl9zdWJtaXRfdXJiKGN0cmwpIGZhaWxlZCIpOwotCQlyZXR1cm4gLTE7CisJCS8qCisJCSAqIHF1ZXVlIHdvcmsgdG8gd2FrZSB1cCB0aGUgZGV2aWNlLgorCQkgKiBhcyB0aGUgd29yayBxdWV1ZSBpcyBmcmVlemVhYmxlLCB0aGlzIGlzIHNhZmUKKwkJICogd2l0aCByZXNwZWN0IHRvIFNURCBhbmQgU1RSCisJCSAqLworCQlxdWV1ZV93b3JrKHJlc3VtcHRpb25fd2FrZXIsICZ1c2JoaWQtPnJlc3RhcnRfd29yayk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zMzIsNyArNDE4LDcgQEAKIAkJCQkicmVjZWl2ZWRcbiIsIHVyYi0+c3RhdHVzKTsKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmhpZC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHVucGx1ZykKIAkJdXNiaGlkLT5vdXR0YWlsID0gdXNiaGlkLT5vdXRoZWFkOwpAQCAtMzQ0LDEyICs0MzAsMTIgQEAKIAkJCWNsZWFyX2JpdChISURfT1VUX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpOwogCQkJd2FrZV91cCgmdXNiaGlkLT53YWl0KTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPm91dGxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAKIAljbGVhcl9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPm91dGxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPmxvY2ssIGZsYWdzKTsKIAl3YWtlX3VwKCZ1c2JoaWQtPndhaXQpOwogfQogCkBAIC0zNjEsMTIgKzQ0NywxMSBAQAogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgdW5wbHVnID0gMDsKKwlpbnQgdW5wbHVnID0gMCwgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5jdHJsbG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmdXNiaGlkLT5sb2NrKTsKIAotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgMDoJCQkvKiBzdWNjZXNzICovCiAJCWlmICh1c2JoaWQtPmN0cmxbdXNiaGlkLT5jdHJsdGFpbF0uZGlyID09IFVTQl9ESVJfSU4pCiAJCQloaWRfaW5wdXRfcmVwb3J0KHVyYi0+Y29udGV4dCwKQEAgLTM4Myw3ICs0NjgsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgkJLyogZXJyb3IgKi8KIAkJZGV2X3dhcm4oJnVyYi0+ZGV2LT5kZXYsICJjdHJsIHVyYiBzdGF0dXMgJWQgIgotCQkJCSJyZWNlaXZlZFxuIiwgdXJiLT5zdGF0dXMpOworCQkJCSJyZWNlaXZlZFxuIiwgc3RhdHVzKTsKIAl9CiAKIAlpZiAodW5wbHVnKQpAQCAtMzk2LDE5ICs0ODEsMTggQEAKIAkJCWNsZWFyX2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKIAkJCXdha2VfdXAoJnVzYmhpZC0+d2FpdCk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5jdHJsbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9jaygmdXNiaGlkLT5sb2NrKTsKIAkJcmV0dXJuOwogCX0KIAogCWNsZWFyX2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPmN0cmxsb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJnVzYmhpZC0+bG9jayk7CiAJd2FrZV91cCgmdXNiaGlkLT53YWl0KTsKIH0KIAotdm9pZCB1c2JoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCBjaGFyIGRpcikKK3ZvaWQgX191c2JoaWRfc3VibWl0X3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCBjaGFyIGRpcikKIHsKIAlpbnQgaGVhZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCWludCBsZW4gPSAoKHJlcG9ydC0+c2l6ZSAtIDEpID4+IDMpICsgMSArIChyZXBvcnQtPmlkID4gMCk7CiAKQEAgLTQxNiwxOCArNTAwLDEzIEBACiAJCXJldHVybjsKIAogCWlmICh1c2JoaWQtPnVyYm91dCAmJiBkaXIgPT0gVVNCX0RJUl9PVVQgJiYgcmVwb3J0LT50eXBlID09IEhJRF9PVVRQVVRfUkVQT1JUKSB7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmhpZC0+b3V0bG9jaywgZmxhZ3MpOwotCiAJCWlmICgoaGVhZCA9ICh1c2JoaWQtPm91dGhlYWQgKyAxKSAmIChISURfT1VUUFVUX0ZJRk9fU0laRSAtIDEpKSA9PSB1c2JoaWQtPm91dHRhaWwpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+b3V0bG9jaywgZmxhZ3MpOwogCQkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAib3V0cHV0IHF1ZXVlIGZ1bGxcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJdXNiaGlkLT5vdXRbdXNiaGlkLT5vdXRoZWFkXS5yYXdfcmVwb3J0ID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwogCQlpZiAoIXVzYmhpZC0+b3V0W3VzYmhpZC0+b3V0aGVhZF0ucmF3X3JlcG9ydCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5vdXRsb2NrLCBmbGFncyk7CiAJCQlkZXZfd2FybigmaGlkLT5kZXYsICJvdXRwdXQgcXVldWVpbmcgZmFpbGVkXG4iKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNDM4LDE1ICs1MTcsMTAgQEAKIAkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhJRF9PVVRfUlVOTklORywgJnVzYmhpZC0+aW9mbCkpCiAJCQlpZiAoaGlkX3N1Ym1pdF9vdXQoaGlkKSkKIAkJCQljbGVhcl9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JoaWQtPm91dGxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JoaWQtPmN0cmxsb2NrLCBmbGFncyk7Ci0KIAlpZiAoKGhlYWQgPSAodXNiaGlkLT5jdHJsaGVhZCArIDEpICYgKEhJRF9DT05UUk9MX0ZJRk9fU0laRSAtIDEpKSA9PSB1c2JoaWQtPmN0cmx0YWlsKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKIAkJZGV2X3dhcm4oJmhpZC0+ZGV2LCAiY29udHJvbCBxdWV1ZSBmdWxsXG4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTQ1NCw3ICs1MjgsNiBAQAogCWlmIChkaXIgPT0gVVNCX0RJUl9PVVQpIHsKIAkJdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7CiAJCWlmICghdXNiaGlkLT5jdHJsW3VzYmhpZC0+Y3RybGhlYWRdLnJhd19yZXBvcnQpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKIAkJCWRldl93YXJuKCZoaWQtPmRldiwgImNvbnRyb2wgcXVldWVpbmcgZmFpbGVkXG4iKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNDY3LDE1ICs1NDAsMjUgQEAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSElEX0NUUkxfUlVOTklORywgJnVzYmhpZC0+aW9mbCkpCiAJCWlmIChoaWRfc3VibWl0X2N0cmwoaGlkKSkKIAkJCWNsZWFyX2JpdChISURfQ1RSTF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKTsKK30KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+Y3RybGxvY2ssIGZsYWdzKTsKK3ZvaWQgdXNiaGlkX3N1Ym1pdF9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwgdW5zaWduZWQgY2hhciBkaXIpCit7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2JoaWQtPmxvY2ssIGZsYWdzKTsKKwlfX3VzYmhpZF9zdWJtaXRfcmVwb3J0KGhpZCwgcmVwb3J0LCBkaXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiaGlkX3N1Ym1pdF9yZXBvcnQpOwogCiBzdGF0aWMgaW50IHVzYl9oaWRpbnB1dF9pbnB1dF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9mZnNldDsKIAogCWlmICh0eXBlID09IEVWX0ZGKQpAQCAtNDkwLDYgKzU3MywxNSBAQAogCX0KIAogCWhpZF9zZXRfZmllbGQoZmllbGQsIG9mZnNldCwgdmFsdWUpOworCWlmICh2YWx1ZSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiaGlkLT5sb2NrLCBmbGFncyk7CisJCXVzYmhpZC0+bGVkY291bnQrKzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiaGlkLT5sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYmhpZC0+bG9jaywgZmxhZ3MpOworCQl1c2JoaWQtPmxlZGNvdW50LS07CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmhpZC0+bG9jaywgZmxhZ3MpOworCX0KIAl1c2JoaWRfc3VibWl0X3JlcG9ydChoaWQsIGZpZWxkLT5yZXBvcnQsIFVTQl9ESVJfT1VUKTsKIAogCXJldHVybiAwOwpAQCAtNTM4LDE1ICs2MzAsMjIgQEAKIAlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAlpbnQgcmVzOwogCisJbXV0ZXhfbG9jaygmaGlkX29wZW5fbXV0KTsKIAlpZiAoIWhpZC0+b3BlbisrKSB7CiAJCXJlcyA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSh1c2JoaWQtPmludGYpOworCQkvKiB0aGUgZGV2aWNlIG11c3QgYmUgYXdha2UgdG8gcmVsaWFibGUgcmVxdWVzdCByZW1vdGUgd2FrZXVwICovCiAJCWlmIChyZXMgPCAwKSB7CiAJCQloaWQtPm9wZW4tLTsKKwkJCW11dGV4X3VubG9jaygmaGlkX29wZW5fbXV0KTsKIAkJCXJldHVybiAtRUlPOwogCQl9CisJCXVzYmhpZC0+aW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDE7CisJCWlmIChoaWRfc3RhcnRfaW4oaGlkKSkKKwkJCWhpZF9pb19lcnJvcihoaWQpOworIAorCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UodXNiaGlkLT5pbnRmKTsKIAl9Ci0JaWYgKGhpZF9zdGFydF9pbihoaWQpKQotCQloaWRfaW9fZXJyb3IoaGlkKTsKKwltdXRleF91bmxvY2soJmhpZF9vcGVuX211dCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU1NCwxMCArNjUzLDIyIEBACiB7CiAJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CiAKKwltdXRleF9sb2NrKCZoaWRfb3Blbl9tdXQpOworCisJLyogcHJvdGVjdGluZyBoaWQtPm9wZW4gdG8gbWFrZSBzdXJlIHdlIGRvbid0IHJlc3RhcnQKKwkgKiBkYXRhIGFjcXVpc3Rpb24gZHVlIHRvIGEgcmVzdW1wdGlvbiB3ZSBubyBsb25nZXIKKwkgKiBjYXJlIGFib3V0CisJICovCisJc3Bpbl9sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKIAlpZiAoIS0taGlkLT5vcGVuKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKIAkJdXNiX2tpbGxfdXJiKHVzYmhpZC0+dXJiaW4pOwotCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UodXNiaGlkLT5pbnRmKTsKKwkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwkJdXNiaGlkLT5pbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CiAJfQorCW11dGV4X3VubG9jaygmaGlkX29wZW5fbXV0KTsKIH0KIAogLyoKQEAgLTY4Nyw2ICs3OTgsMjUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCB1c2JoaWRfcmVzdGFydF9xdWV1ZXMoc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCkKK3sKKwlpZiAodXNiaGlkLT51cmJvdXQpCisJCXVzYmhpZF9yZXN0YXJ0X291dF9xdWV1ZSh1c2JoaWQpOworCXVzYmhpZF9yZXN0YXJ0X2N0cmxfcXVldWUodXNiaGlkKTsKK30KKworc3RhdGljIHZvaWQgX191c2JoaWRfcmVzdGFydF9xdWV1ZXMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYmhpZF9kZXZpY2UsIHJlc3RhcnRfd29yayk7CisJaW50IHI7CisKKwlyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHVzYmhpZC0+aW50Zik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm47CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHVzYmhpZC0+aW50Zik7Cit9CisKIHN0YXRpYyB2b2lkIGhpZF9mcmVlX2J1ZmZlcnMoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKIHsKIAlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKQEAgLTcxMSw2ICs4NDEsOSBAQAogCXF1aXJrcyA9IHVzYmhpZF9sb29rdXBfcXVpcmsobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJCWxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKTsKIAorCWlmIChxdWlya3MgJiBISURfUVVJUktfSUdOT1JFKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qIE1hbnkga2V5Ym9hcmRzIGFuZCBtaWNlIGRvbid0IGxpa2UgdG8gYmUgcG9sbGVkIGZvciByZXBvcnRzLAogCSAqIHNvIHdlIHdpbGwgYWx3YXlzIHNldCB0aGUgSElEX1FVSVJLX05PR0VUIGZsYWcgZm9yIHRoZW0uICovCiAJaWYgKGludGVyZmFjZS0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gVVNCX0lOVEVSRkFDRV9TVUJDTEFTU19CT09UKSB7CkBAIC04NTAsMTEgKzk4MywxMSBAQAogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdXNiaGlkLT53YWl0KTsKIAlJTklUX1dPUksoJnVzYmhpZC0+cmVzZXRfd29yaywgaGlkX3Jlc2V0KTsKKwlJTklUX1dPUksoJnVzYmhpZC0+cmVzdGFydF93b3JrLCBfX3VzYmhpZF9yZXN0YXJ0X3F1ZXVlcyk7CiAJc2V0dXBfdGltZXIoJnVzYmhpZC0+aW9fcmV0cnksIGhpZF9yZXRyeV90aW1lb3V0LCAodW5zaWduZWQgbG9uZykgaGlkKTsKIAotCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPmlubG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnVzYmhpZC0+b3V0bG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnVzYmhpZC0+Y3RybGxvY2spOworCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZ1c2JoaWQtPmxvY2spOwogCiAJdXNiaGlkLT5pbnRmID0gaW50ZjsKIAl1c2JoaWQtPmlmbnVtID0gaW50ZXJmYWNlLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CkBAIC05MDYsMTUgKzEwMzksMTQgQEAKIAkJcmV0dXJuOwogCiAJY2xlYXJfYml0KEhJRF9TVEFSVEVELCAmdXNiaGlkLT5pb2ZsKTsKLQlzcGluX2xvY2tfaXJxKCZ1c2JoaWQtPmlubG9jayk7CS8qIFN5bmMgd2l0aCBlcnJvciBoYW5kbGVyICovCisJc3Bpbl9sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsJLyogU3luYyB3aXRoIGVycm9yIGhhbmRsZXIgKi8KIAlzZXRfYml0KEhJRF9ESVNDT05ORUNURUQsICZ1c2JoaWQtPmlvZmwpOwotCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5pbmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKIAl1c2Jfa2lsbF91cmIodXNiaGlkLT51cmJpbik7CiAJdXNiX2tpbGxfdXJiKHVzYmhpZC0+dXJib3V0KTsKIAl1c2Jfa2lsbF91cmIodXNiaGlkLT51cmJjdHJsKTsKIAotCWRlbF90aW1lcl9zeW5jKCZ1c2JoaWQtPmlvX3JldHJ5KTsKLQljYW5jZWxfd29ya19zeW5jKCZ1c2JoaWQtPnJlc2V0X3dvcmspOworCWhpZF9jYW5jZWxfZGVsYXllZF9zdHVmZih1c2JoaWQpOwogCiAJaWYgKGhpZC0+Y2xhaW1lZCAmIEhJRF9DTEFJTUVEX0lOUFVUKQogCQloaWRpbnB1dF9kaXNjb25uZWN0KGhpZCk7CkBAIC05MzUsMTIgKzEwNjcsMjggQEAKIAloaWRfZnJlZV9idWZmZXJzKGhpZF90b191c2JfZGV2KGhpZCksIGhpZCk7CiB9CiAKK3N0YXRpYyBpbnQgdXNiaGlkX3Bvd2VyKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIGludCBsdmwpCit7CisJaW50IHIgPSAwOworCisJc3dpdGNoIChsdmwpIHsKKwljYXNlIFBNX0hJTlRfRlVMTE9OOgorCQlyID0gdXNiaGlkX2dldF9wb3dlcihoaWQpOworCQlicmVhazsKKwljYXNlIFBNX0hJTlRfTk9STUFMOgorCQl1c2JoaWRfcHV0X3Bvd2VyKGhpZCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcjsKK30KKwogc3RhdGljIHN0cnVjdCBoaWRfbGxfZHJpdmVyIHVzYl9oaWRfZHJpdmVyID0gewogCS5wYXJzZSA9IHVzYmhpZF9wYXJzZSwKIAkuc3RhcnQgPSB1c2JoaWRfc3RhcnQsCiAJLnN0b3AgPSB1c2JoaWRfc3RvcCwKIAkub3BlbiA9IHVzYmhpZF9vcGVuLAogCS5jbG9zZSA9IHVzYmhpZF9jbG9zZSwKKwkucG93ZXIgPSB1c2JoaWRfcG93ZXIsCiAJLmhpZGlucHV0X2lucHV0X2V2ZW50ID0gdXNiX2hpZGlucHV0X2lucHV0X2V2ZW50LAogfTsKIApAQCAtMTA0OSwxOSArMTE5NywxMjYgQEAKIAlrZnJlZSh1c2JoaWQpOwogfQogCi1zdGF0aWMgaW50IGhpZF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3N0YXRpYyB2b2lkIGhpZF9jYW5jZWxfZGVsYXllZF9zdHVmZihzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkKQogewotCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKKwlkZWxfdGltZXJfc3luYygmdXNiaGlkLT5pb19yZXRyeSk7CisJY2FuY2VsX3dvcmtfc3luYygmdXNiaGlkLT5yZXN0YXJ0X3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJnVzYmhpZC0+cmVzZXRfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGhpZF9jZWFzZV9pbyhzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkKQoreworCWRlbF90aW1lcigmdXNiaGlkLT5pb19yZXRyeSk7CisJdXNiX2tpbGxfdXJiKHVzYmhpZC0+dXJiaW4pOworCXVzYl9raWxsX3VyYih1c2JoaWQtPnVyYmN0cmwpOworCXVzYl9raWxsX3VyYih1c2JoaWQtPnVyYm91dCk7Cit9CisKKy8qIFRyZWF0IFVTQiByZXNldCBwcmV0dHkgbXVjaCB0aGUgc2FtZSBhcyBzdXNwZW5kL3Jlc3VtZSAqLworc3RhdGljIGludCBoaWRfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOwogCi0JaWYgKCF0ZXN0X2JpdChISURfU1RBUlRFRCwgJnVzYmhpZC0+aW9mbCkpCi0JCXJldHVybiAwOworCXNwaW5fbG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CisJc2V0X2JpdChISURfUkVTRVRfUEVORElORywgJnVzYmhpZC0+aW9mbCk7CisJc3Bpbl91bmxvY2tfaXJxKCZ1c2JoaWQtPmxvY2spOworCWNhbmNlbF93b3JrX3N5bmMoJnVzYmhpZC0+cmVzdGFydF93b3JrKTsKKwloaWRfY2Vhc2VfaW8odXNiaGlkKTsKIAotCXNwaW5fbG9ja19pcnEoJnVzYmhpZC0+aW5sb2NrKTsJLyogU3luYyB3aXRoIGVycm9yIGhhbmRsZXIgKi8KLQlzZXRfYml0KEhJRF9TVVNQRU5ERUQsICZ1c2JoaWQtPmlvZmwpOwotCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5pbmxvY2spOwotCWRlbF90aW1lcl9zeW5jKCZ1c2JoaWQtPmlvX3JldHJ5KTsKLQl1c2Jfa2lsbF91cmIodXNiaGlkLT51cmJpbik7CisJcmV0dXJuIDA7Cit9CisKKy8qIFNhbWUgcm91dGluZSB1c2VkIGZvciBwb3N0X3Jlc2V0IGFuZCByZXNldF9yZXN1bWUgKi8KK3N0YXRpYyBpbnQgaGlkX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYgKGludGYpOworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCB1c2JoaWRfZGV2aWNlICp1c2JoaWQgPSBoaWQtPmRyaXZlcl9kYXRhOworCWludCBzdGF0dXM7CisgCisJc3Bpbl9sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKKwljbGVhcl9iaXQoSElEX1JFU0VUX1BFTkRJTkcsICZ1c2JoaWQtPmlvZmwpOworCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKKwloaWRfc2V0X2lkbGUoZGV2LCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAwLCAwKTsKKwkvKiBGSVhNRTogQW55IG1vcmUgcmVpbml0aWFsaXphdGlvbiBuZWVkZWQ/ICovCisJc3RhdHVzID0gaGlkX3N0YXJ0X2luKGhpZCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWhpZF9pb19lcnJvcihoaWQpOworCXVzYmhpZF9yZXN0YXJ0X3F1ZXVlcyh1c2JoaWQpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2JoaWRfZ2V0X3Bvd2VyKHN0cnVjdCBoaWRfZGV2aWNlICpoaWQpCit7CisJc3RydWN0IHVzYmhpZF9kZXZpY2UgKnVzYmhpZCA9IGhpZC0+ZHJpdmVyX2RhdGE7CisgCisJcmV0dXJuIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSh1c2JoaWQtPmludGYpOworfQorCit2b2lkIHVzYmhpZF9wdXRfcG93ZXIoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKKyAKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UodXNiaGlkLT5pbnRmKTsKK30KKworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGhpZF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJaW50IHN0YXR1czsKKworCWlmICh1ZGV2LT5hdXRvX3BtKSB7CisJCXNwaW5fbG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CS8qIFN5bmMgd2l0aCBlcnJvciBoYW5kbGVyICovCisJCWlmICghdGVzdF9iaXQoSElEX1JFU0VUX1BFTkRJTkcsICZ1c2JoaWQtPmlvZmwpCisJCSAgICAmJiAhdGVzdF9iaXQoSElEX0NMRUFSX0hBTFQsICZ1c2JoaWQtPmlvZmwpCisJCSAgICAmJiAhdGVzdF9iaXQoSElEX09VVF9SVU5OSU5HLCAmdXNiaGlkLT5pb2ZsKQorCQkgICAgJiYgIXRlc3RfYml0KEhJRF9DVFJMX1JVTk5JTkcsICZ1c2JoaWQtPmlvZmwpCisJCSAgICAmJiAhdGVzdF9iaXQoSElEX0tFWVNfUFJFU1NFRCwgJnVzYmhpZC0+aW9mbCkKKwkJICAgICYmICghdXNiaGlkLT5sZWRjb3VudCB8fCBpZ25vcmVsZWQpKQorCQl7CisJCQlzZXRfYml0KEhJRF9SRVBPUlRFRF9JRExFLCAmdXNiaGlkLT5pb2ZsKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCXVzYmhpZF9tYXJrX2J1c3kodXNiaGlkKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CisJCXNldF9iaXQoSElEX1JFUE9SVEVEX0lETEUsICZ1c2JoaWQtPmlvZmwpOworCQlzcGluX3VubG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CisJCWlmICh1c2JoaWRfd2FpdF9pbyhoaWQpIDwgMCkKKwkJCXJldHVybiAtRUlPOworCX0KKworCWlmICghaWdub3JlbGVkICYmIHVkZXYtPmF1dG9fcG0pIHsKKwkJc3Bpbl9sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKKwkJaWYgKHRlc3RfYml0KEhJRF9MRURfT04sICZ1c2JoaWQtPmlvZmwpKSB7CisJCQlzcGluX3VubG9ja19pcnEoJnVzYmhpZC0+bG9jayk7CisJCQl1c2JoaWRfbWFya19idXN5KHVzYmhpZCk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmdXNiaGlkLT5sb2NrKTsKKwl9CisKKwloaWRfY2FuY2VsX2RlbGF5ZWRfc3R1ZmYodXNiaGlkKTsKKwloaWRfY2Vhc2VfaW8odXNiaGlkKTsKKworCWlmICh1ZGV2LT5hdXRvX3BtICYmIHRlc3RfYml0KEhJRF9LRVlTX1BSRVNTRUQsICZ1c2JoaWQtPmlvZmwpKSB7CisJCS8qIGxvc3QgcmFjZSBhZ2FpbnN0IGtleXByZXNzZXMgKi8KKwkJc3RhdHVzID0gaGlkX3N0YXJ0X2luKGhpZCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJaGlkX2lvX2Vycm9yKGhpZCk7CisJCXVzYmhpZF9tYXJrX2J1c3kodXNiaGlkKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CiAJZGV2X2RiZygmaW50Zi0+ZGV2LCAic3VzcGVuZFxuIik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDc1LDMyICsxMzMwLDMzIEBACiAJaWYgKCF0ZXN0X2JpdChISURfU1RBUlRFRCwgJnVzYmhpZC0+aW9mbCkpCiAJCXJldHVybiAwOwogCi0JY2xlYXJfYml0KEhJRF9TVVNQRU5ERUQsICZ1c2JoaWQtPmlvZmwpOworCWNsZWFyX2JpdChISURfUkVQT1JURURfSURMRSwgJnVzYmhpZC0+aW9mbCk7CisJdXNiaGlkX21hcmtfYnVzeSh1c2JoaWQpOworCisJaWYgKHRlc3RfYml0KEhJRF9DTEVBUl9IQUxULCAmdXNiaGlkLT5pb2ZsKSB8fAorCSAgICB0ZXN0X2JpdChISURfUkVTRVRfUEVORElORywgJnVzYmhpZC0+aW9mbCkpCisJCXNjaGVkdWxlX3dvcmsoJnVzYmhpZC0+cmVzZXRfd29yayk7CiAJdXNiaGlkLT5yZXRyeV9kZWxheSA9IDA7CiAJc3RhdHVzID0gaGlkX3N0YXJ0X2luKGhpZCk7Ci0JZGV2X2RiZygmaW50Zi0+ZGV2LCAicmVzdW1lIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKLQlyZXR1cm4gc3RhdHVzOwotfQorCWlmIChzdGF0dXMgPCAwKQorCQloaWRfaW9fZXJyb3IoaGlkKTsKKwl1c2JoaWRfcmVzdGFydF9xdWV1ZXModXNiaGlkKTsKIAotLyogVHJlYXQgVVNCIHJlc2V0IHByZXR0eSBtdWNoIHRoZSBzYW1lIGFzIHN1c3BlbmQvcmVzdW1lICovCi1zdGF0aWMgaW50IGhpZF9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0JLyogRklYTUU6IFdoYXQgaWYgdGhlIGludGVyZmFjZSBpcyBhbHJlYWR5IHN1c3BlbmRlZD8gKi8KLQloaWRfc3VzcGVuZChpbnRmLCBQTVNHX09OKTsKKwlkZXZfZGJnKCZpbnRmLT5kZXYsICJyZXN1bWUgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCXJldHVybiAwOwogfQogCi0vKiBTYW1lIHJvdXRpbmUgdXNlZCBmb3IgcG9zdF9yZXNldCBhbmQgcmVzZXRfcmVzdW1lICovCi1zdGF0aWMgaW50IGhpZF9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQorc3RhdGljIGludCBoaWRfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKKwlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgdXNiaGlkX2RldmljZSAqdXNiaGlkID0gaGlkLT5kcml2ZXJfZGF0YTsKIAotCWhpZF9zZXRfaWRsZShkZXYsIGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDAsIDApOwotCS8qIEZJWE1FOiBBbnkgbW9yZSByZWluaXRpYWxpemF0aW9uIG5lZWRlZD8gKi8KLQotCXJldHVybiBoaWRfcmVzdW1lKGludGYpOworCWNsZWFyX2JpdChISURfUkVQT1JURURfSURMRSwgJnVzYmhpZC0+aW9mbCk7CisJcmV0dXJuIGhpZF9wb3N0X3Jlc2V0KGludGYpOwogfQogCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBoaWRfdXNiX2lkcyBbXSA9IHsKIAl7IC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0NMQVNTLAogCQkuYkludGVyZmFjZUNsYXNzID0gVVNCX0lOVEVSRkFDRV9DTEFTU19ISUQgfSwKQEAgLTExMTMsOSArMTM2OSwxMSBAQAogCS5uYW1lID0JCSJ1c2JoaWQiLAogCS5wcm9iZSA9CWhpZF9wcm9iZSwKIAkuZGlzY29ubmVjdCA9CWhpZF9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kID0JaGlkX3N1c3BlbmQsCiAJLnJlc3VtZSA9CWhpZF9yZXN1bWUsCi0JLnJlc2V0X3Jlc3VtZSA9CWhpZF9wb3N0X3Jlc2V0LAorCS5yZXNldF9yZXN1bWUgPQloaWRfcmVzZXRfcmVzdW1lLAorI2VuZGlmCiAJLnByZV9yZXNldCA9CWhpZF9wcmVfcmVzZXQsCiAJLnBvc3RfcmVzZXQgPQloaWRfcG9zdF9yZXNldCwKIAkuaWRfdGFibGUgPQloaWRfdXNiX2lkcywKQEAgLTExMzQsNyArMTM5MiwxMSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBoaWRfaW5pdCh2b2lkKQogewotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisKKwlyZXN1bXB0aW9uX3dha2VyID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKCJ1c2JoaWRfcmVzdW1lciIpOworCWlmICghcmVzdW1wdGlvbl93YWtlcikKKwkJZ290byBub19xdWV1ZTsKIAlyZXR2YWwgPSBoaWRfcmVnaXN0ZXJfZHJpdmVyKCZoaWRfdXNiX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBoaWRfcmVnaXN0ZXJfZmFpbDsKQEAgLTExNTgsNiArMTQyMCw4IEBACiB1c2JoaWRfcXVpcmtzX2luaXRfZmFpbDoKIAloaWRfdW5yZWdpc3Rlcl9kcml2ZXIoJmhpZF91c2JfZHJpdmVyKTsKIGhpZF9yZWdpc3Rlcl9mYWlsOgorCWRlc3Ryb3lfd29ya3F1ZXVlKHJlc3VtcHRpb25fd2FrZXIpOworbm9fcXVldWU6CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTE2Nyw2ICsxNDMxLDcgQEAKIAloaWRkZXZfZXhpdCgpOwogCXVzYmhpZF9xdWlya3NfZXhpdCgpOwogCWhpZF91bnJlZ2lzdGVyX2RyaXZlcigmaGlkX3VzYl9kcml2ZXIpOworCWRlc3Ryb3lfd29ya3F1ZXVlKHJlc3VtcHRpb25fd2FrZXIpOwogfQogCiBtb2R1bGVfaW5pdChoaWRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKaW5kZXggYWEyMTQxNy4uZTliNDM2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwpAQCAtMjQ2LDEwICsyNDYsMTIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5oaWRkZXYtPmxpc3RfbG9jaywgZmxhZ3MpOwogCiAJaWYgKCEtLWxpc3QtPmhpZGRldi0+b3BlbikgewotCQlpZiAobGlzdC0+aGlkZGV2LT5leGlzdCkKKwkJaWYgKGxpc3QtPmhpZGRldi0+ZXhpc3QpIHsKIAkJCXVzYmhpZF9jbG9zZShsaXN0LT5oaWRkZXYtPmhpZCk7Ci0JCWVsc2UKKwkJCXVzYmhpZF9wdXRfcG93ZXIobGlzdC0+aGlkZGV2LT5oaWQpOworCQl9IGVsc2UgewogCQkJa2ZyZWUobGlzdC0+aGlkZGV2KTsKKwkJfQogCX0KIAogCWtmcmVlKGxpc3QpOwpAQCAtMzAwLDYgKzMwMiwxNyBAQAogCWxpc3RfYWRkX3RhaWwoJmxpc3QtPm5vZGUsICZoaWRkZXZfdGFibGVbaV0tPmxpc3QpOwogCXNwaW5fdW5sb2NrX2lycSgmbGlzdC0+aGlkZGV2LT5saXN0X2xvY2spOwogCisJaWYgKCFsaXN0LT5oaWRkZXYtPm9wZW4rKykKKwkJaWYgKGxpc3QtPmhpZGRldi0+ZXhpc3QpIHsKKwkJCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBoaWRkZXZfdGFibGVbaV0tPmhpZDsKKwkJCXJlcyA9IHVzYmhpZF9nZXRfcG93ZXIoaGlkKTsKKwkJCWlmIChyZXMgPCAwKSB7CisJCQkJcmVzID0gLUVJTzsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCQl1c2JoaWRfb3BlbihoaWQpOworCQl9CisKIAlyZXR1cm4gMDsKIGJhaWw6CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKQEAgLTg3NSwxNiArODg4LDIxIEBACiAJaGlkZGV2LT5oaWQgPSBoaWQ7CiAJaGlkZGV2LT5leGlzdCA9IDE7CiAKKwkvKiB3aGVuIGxvY2tfa2VybmVsKCkgdXNhZ2UgaXMgZml4ZWQgaW4gdXNiX29wZW4oKSwKKwkgKiB3ZSBjb3VsZCBhbHNvIGZpeCBpdCBoZXJlICovCisJbG9ja19rZXJuZWwoKTsKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KHVzYmhpZC0+aW50ZiwgJmhpZGRldl9jbGFzcyk7CiAJaWYgKHJldHZhbCkgewogCQllcnJfaGlkKCJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuIik7CiAJCWhpZC0+aGlkZGV2ID0gTlVMTDsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlrZnJlZShoaWRkZXYpOwogCQlyZXR1cm4gLTE7CiAJfSBlbHNlIHsKIAkJaGlkLT5taW5vciA9IHVzYmhpZC0+aW50Zi0+bWlub3I7CiAJCWhpZGRldl90YWJsZVt1c2JoaWQtPmludGYtPm1pbm9yIC0gSElEREVWX01JTk9SX0JBU0VdID0gaGlkZGV2OwogCX0KKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaCBiL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JoaWQuaAppbmRleCA5ZWIzMDU2Li4wOGY1MDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvdXNiaGlkLmgKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmhpZC5oCkBAIC0zOCw3ICszOCwxMCBAQAogdm9pZCB1c2JoaWRfY2xvc2Uoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CiBpbnQgdXNiaGlkX29wZW4oc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7CiB2b2lkIHVzYmhpZF9pbml0X3JlcG9ydHMoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCk7Ci12b2lkIHVzYmhpZF9zdWJtaXRfcmVwb3J0KHN0cnVjdCBoaWRfZGV2aWNlICpoaWQsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIHVuc2lnbmVkIGNoYXIgZGlyKTsKK3ZvaWQgdXNiaGlkX3N1Ym1pdF9yZXBvcnQKKyhzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0LCB1bnNpZ25lZCBjaGFyIGRpcik7CitpbnQgdXNiaGlkX2dldF9wb3dlcihzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKK3ZvaWQgdXNiaGlkX3B1dF9wb3dlcihzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKIAogLyogaW9mbCBmbGFncyAqLwogI2RlZmluZSBISURfQ1RSTF9SVU5OSU5HCTEKQEAgLTQ5LDYgKzUyLDkgQEAKICNkZWZpbmUgSElEX0NMRUFSX0hBTFQJCTYKICNkZWZpbmUgSElEX0RJU0NPTk5FQ1RFRAk3CiAjZGVmaW5lIEhJRF9TVEFSVEVECQk4CisjZGVmaW5lIEhJRF9SRVBPUlRFRF9JRExFCTkKKyNkZWZpbmUgSElEX0tFWVNfUFJFU1NFRAkxMAorI2RlZmluZSBISURfTEVEX09OCQkxMQogCiAvKgogICogVVNCLXNwZWNpZmljIEhJRCBzdHJ1Y3QsIHRvIGJlIHBvaW50ZWQgdG8KQEAgLTY2LDcgKzcyLDYgQEAKIAlzdHJ1Y3QgdXJiICp1cmJpbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5wdXQgVVJCICovCiAJY2hhciAqaW5idWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElucHV0IGJ1ZmZlciAqLwogCWRtYV9hZGRyX3QgaW5idWZfZG1hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnB1dCBidWZmZXIgZG1hICovCi0Jc3BpbmxvY2tfdCBpbmxvY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElucHV0IGZpZm8gc3BpbmxvY2sgKi8KIAogCXN0cnVjdCB1cmIgKnVyYmN0cmw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIFVSQiAqLwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIHJlcXVlc3Qgc3RydWN0ICovCkBAIC03NSwyMSArODAsMjIgQEAKIAl1bnNpZ25lZCBjaGFyIGN0cmxoZWFkLCBjdHJsdGFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29udHJvbCBmaWZvIGhlYWQgJiB0YWlsICovCiAJY2hhciAqY3RybGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgYnVmZmVyICovCiAJZG1hX2FkZHJfdCBjdHJsYnVmX2RtYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbnRyb2wgYnVmZmVyIGRtYSAqLwotCXNwaW5sb2NrX3QgY3RybGxvY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIGZpZm8gc3BpbmxvY2sgKi8KIAogCXN0cnVjdCB1cmIgKnVyYm91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgVVJCICovCiAJc3RydWN0IGhpZF9vdXRwdXRfZmlmbyBvdXRbSElEX0NPTlRST0xfRklGT19TSVpFXTsgICAgICAgICAgICAgIC8qIE91dHB1dCBwaXBlIGZpZm8gKi8KIAl1bnNpZ25lZCBjaGFyIG91dGhlYWQsIG91dHRhaWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3V0cHV0IHBpcGUgZmlmbyBoZWFkICYgdGFpbCAqLwogCWNoYXIgKm91dGJ1ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdXRwdXQgYnVmZmVyICovCiAJZG1hX2FkZHJfdCBvdXRidWZfZG1hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXIgZG1hICovCi0Jc3BpbmxvY2tfdCBvdXRsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE91dHB1dCBmaWZvIHNwaW5sb2NrICovCiAKKwlzcGlubG9ja190IGxvY2s7CQkJCQkJLyogZmlmbyBzcGlubG9jayAqLwogCXVuc2lnbmVkIGxvbmcgaW9mbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJL08gZmxhZ3MgKENUUkxfUlVOTklORywgT1VUX1JVTk5JTkcpICovCiAJc3RydWN0IHRpbWVyX2xpc3QgaW9fcmV0cnk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHJ5IHRpbWVyICovCiAJdW5zaWduZWQgbG9uZyBzdG9wX3JldHJ5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRpbWUgdG8gZ2l2ZSB1cCwgaW4gamlmZmllcyAqLwogCXVuc2lnbmVkIGludCByZXRyeV9kZWxheTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxheSBsZW5ndGggaW4gbXMgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfd29yazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVGFzayBjb250ZXh0IGZvciByZXNldHMgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzdGFydF93b3JrOwkJCQkvKiB3YWtpbmcgdXAgZm9yIG91dHB1dCB0byBiZSBkb25lIGluIGEgdGFzayAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CQkJCQkJLyogRm9yIHNsZWVwaW5nICovCisJaW50IGxlZGNvdW50OwkJCQkJCQkvKiBjb3VudGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBsZWRzICovCiB9OwogCiAjZGVmaW5lCWhpZF90b191c2JfZGV2KGhpZF9kZXYpIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCA1MWZmOWIzLi5jZTUyYmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC01NzEsNiArNTcxLDE3IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTkzLgogCitjb25maWcgU0VOU09SU19MVEM0MjE1CisJdHJpc3RhdGUgIkxpbmVhciBUZWNobm9sb2d5IExUQzQyMTUiCisJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCBuCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIExpbmVhciBUZWNobm9sb2d5IExUQzQyMTUKKwkgIEhvdCBTd2FwIENvbnRyb2xsZXIgSTJDIGludGVyZmFjZS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBsdGM0MjE1LgorCiBjb25maWcgU0VOU09SU19MVEM0MjQ1CiAJdHJpc3RhdGUgIkxpbmVhciBUZWNobm9sb2d5IExUQzQyNDUiCiAJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCkBAIC01ODIsNiArNTkzLDE1IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbAogCSAgYmUgY2FsbGVkIGx0YzQyNDUuCiAKK2NvbmZpZyBTRU5TT1JTX0xNOTUyNDEKKwl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTk1MjQxIHNlbnNvciBjaGlwIgorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIExNOTUyNDEgc2Vuc29yIGNoaXAuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGxtOTUyNDEuCisKIGNvbmZpZyBTRU5TT1JTX01BWDExMTEKIAl0cmlzdGF0ZSAiTWF4aW0gTUFYMTExMSBNdWx0aWNoYW5uZWwsIFNlcmlhbCA4LWJpdCBBREMgY2hpcCIKIAlkZXBlbmRzIG9uIFNQSV9NQVNURVIKQEAgLTkxMiw2ICs5MzIsMjIgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gYXBwbGljYWJsZSBsYXB0b3AgYW5kIHdhbnQgdG8gZXhwZXJpZW5jZQogCSAgdGhlIGF3ZXNvbWUgcG93ZXIgb2YgbGlzM2x2MDJkLgogCitjb25maWcgU0VOU09SU19MSVMzX1NQSQorCXRyaXN0YXRlICJTVE1pY3JvZWxldHJvbmljcyBMSVMzTFYwMkR4IHRocmVlLWF4aXMgZGlnaXRhbCBhY2NlbGVyb21ldGVyIChTUEkpIgorCWRlcGVuZHMgb24gIUFDUEkgJiYgU1BJX01BU1RFUiAmJiBJTlBVVAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBMSVMzTFYwMkR4IGFjY2VsZXJvbWV0ZXIgY29ubmVjdGVkCisJICB2aWEgU1BJLiBUaGUgYWNjZWxlcm9tZXRlciBkYXRhIGlzIHJlYWRhYmxlIHZpYQorCSAgL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2xpczNsdjAyZC4KKworCSAgVGhpcyBkcml2ZXIgYWxzbyBwcm92aWRlcyBhbiBhYnNvbHV0ZSBpbnB1dCBjbGFzcyBkZXZpY2UsIGFsbG93aW5nCisJICB0aGUgbGFwdG9wIHRvIGFjdCBhcyBhIHBpbmJhbGwgbWFjaGluZS1lc3F1ZSBqb3lzdGljay4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgbW9kdWxlcy4gIElmIHNvLCB0aGUgY29yZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGxpczNsdjAyZCBhbmQgYSBzcGVjaWZpYyBtb2R1bGUgZm9yIHRoZSBTUEkgdHJhbnNwb3J0CisJICBpcyBjYWxsZWQgbGlzM2x2MDJkX3NwaS4KKwogY29uZmlnIFNFTlNPUlNfQVBQTEVTTUMKIAl0cmlzdGF0ZSAiQXBwbGUgU01DIChNb3Rpb24gc2Vuc29yLCBsaWdodCBzZW5zb3IsIGtleWJvYXJkIGJhY2tsaWdodCkiCiAJZGVwZW5kcyBvbiBJTlBVVCAmJiBYODYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCmluZGV4IGUzMzJkNjIuLjNhNmIxZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQpAQCAtNTIsNiArNTIsNyBAQAogb2JqLSQoQ09ORklHX1NFTlNPUlNfSVQ4NykJKz0gaXQ4Ny5vCiBvYmotJChDT05GSUdfU0VOU09SU19LOFRFTVApCSs9IGs4dGVtcC5vCiBvYmotJChDT05GSUdfU0VOU09SU19MSVMzTFYwMkQpICs9IGxpczNsdjAyZC5vIGhwX2FjY2VsLm8KK29iai0kKENPTkZJR19TRU5TT1JTX0xJUzNfU1BJKQkrPSBsaXMzbHYwMmQubyBsaXMzbHYwMmRfc3BpLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0xNNjMpCSs9IGxtNjMubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTE03MCkJKz0gbG03MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19MTTc1KQkrPSBsbTc1Lm8KQEAgLTY0LDYgKzY1LDggQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX0xNOTApCSs9IGxtOTAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTE05MikJKz0gbG05Mi5vCiBvYmotJChDT05GSUdfU0VOU09SU19MTTkzKQkrPSBsbTkzLm8KK29iai0kKENPTkZJR19TRU5TT1JTX0xNOTUyNDEpCSs9IGxtOTUyNDEubworb2JqLSQoQ09ORklHX1NFTlNPUlNfTFRDNDIxNSkJKz0gbHRjNDIxNS5vCiBvYmotJChDT05GSUdfU0VOU09SU19MVEM0MjQ1KQkrPSBsdGM0MjQ1Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX01BWDExMTEpCSs9IG1heDExMTEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTUFYMTYxOSkJKz0gbWF4MTYxOS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Y3NTM3NXMuYyBiL2RyaXZlcnMvaHdtb24vZjc1Mzc1cy5jCmluZGV4IDE4YTFiYTguLmUyMTA3ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZjc1Mzc1cy5jCisrKyBiL2RyaXZlcnMvaHdtb24vZjc1Mzc1cy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGY3NTM3NXMuYyAtIGRyaXZlciBmb3IgdGhlIEZpbnRlayBGNzUzNzUvU1AgYW5kIEY3NTM3MwogICogICAgICAgICAgICAgaGFyZHdhcmUgbW9uaXRvcmluZyBmZWF0dXJlcwotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgIFJpa3UgVm9pcGlvIDxyaWt1LnZvaXBpb0Btb3ZpYWwuZmk+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyAgUmlrdSBWb2lwaW8KICAqCiAgKiBEYXRhc2hlZXRzIGF2YWlsYWJsZSBhdDoKICAqCkBAIC03MjEsNyArNzIxLDcgQEAKIAlpMmNfZGVsX2RyaXZlcigmZjc1Mzc1X2RyaXZlcik7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIlJpa3UgVm9pcGlvIDxyaWt1LnZvaXBpb0Btb3ZpYWwuZmk+Iik7CitNT0RVTEVfQVVUSE9SKCJSaWt1IFZvaXBpbyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJGNzUzNzMvRjc1Mzc1IGhhcmR3YXJlIG1vbml0b3JpbmcgZHJpdmVyIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYyBiL2RyaXZlcnMvaHdtb24vaHBfYWNjZWwuYwppbmRleCAyOWM4M2I1Li41NWQzZGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hwX2FjY2VsLmMKKysrIGIvZHJpdmVycy9od21vbi9ocF9hY2NlbC5jCkBAIC04NSwyNSArODUsMzEgQEAKIAogLyoqCiAgKiBsaXMzbHYwMmRfYWNwaV9pbml0IC0gQUNQSSBfSU5JIG1ldGhvZDogaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLgotICogQGhhbmRsZTogdGhlIGhhbmRsZSBvZiB0aGUgZGV2aWNlCisgKiBAbGlzMzogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdAogICoKLSAqIFJldHVybnMgQUVfT0sgb24gc3VjY2Vzcy4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCi1hY3BpX3N0YXR1cyBsaXMzbHYwMmRfYWNwaV9pbml0KGFjcGlfaGFuZGxlIGhhbmRsZSkKK2ludCBsaXMzbHYwMmRfYWNwaV9pbml0KHN0cnVjdCBsaXMzbHYwMmQgKmxpczMpCiB7Ci0JcmV0dXJuIGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTUVUSE9EX05BTUVfX0lOSSwgTlVMTCwgTlVMTCk7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXYgPSBsaXMzLT5idXNfcHJpdjsKKwlpZiAoYWNwaV9ldmFsdWF0ZV9vYmplY3QoZGV2LT5oYW5kbGUsIE1FVEhPRF9OQU1FX19JTkksCisJCQkJIE5VTEwsIE5VTEwpICE9IEFFX09LKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOwogfQogCiAvKioKICAqIGxpczNsdjAyZF9hY3BpX3JlYWQgLSBBQ1BJIEFMUkQgbWV0aG9kOiByZWFkIGEgcmVnaXN0ZXIKLSAqIEBoYW5kbGU6IHRoZSBoYW5kbGUgb2YgdGhlIGRldmljZQorICogQGxpczM6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3QKICAqIEByZWc6ICAgIHRoZSByZWdpc3RlciB0byByZWFkCiAgKiBAcmV0OiAgICByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbgogICoKLSAqIFJldHVybnMgQUVfT0sgb24gc3VjY2Vzcy4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCi1hY3BpX3N0YXR1cyBsaXMzbHYwMmRfYWNwaV9yZWFkKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHJlZywgdTggKnJldCkKK2ludCBsaXMzbHYwMmRfYWNwaV9yZWFkKHN0cnVjdCBsaXMzbHYwMmQgKmxpczMsIGludCByZWcsIHU4ICpyZXQpCiB7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXYgPSBsaXMzLT5idXNfcHJpdjsKIAl1bmlvbiBhY3BpX29iamVjdCBhcmcwID0geyBBQ1BJX1RZUEVfSU5URUdFUiB9OwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ3MgPSB7IDEsICZhcmcwIH07CiAJdW5zaWduZWQgbG9uZyBsb25nIGxyZXQ7CkBAIC0xMTEsMjEgKzExNywyMiBAQAogCiAJYXJnMC5pbnRlZ2VyLnZhbHVlID0gcmVnOwogCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIkFMUkQiLCAmYXJncywgJmxyZXQpOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXYtPmhhbmRsZSwgIkFMUkQiLCAmYXJncywgJmxyZXQpOwogCSpyZXQgPSBscmV0OwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIChzdGF0dXMgIT0gQUVfT0spID8gLUVJTlZBTCA6IDA7CiB9CiAKIC8qKgogICogbGlzM2x2MDJkX2FjcGlfd3JpdGUgLSBBQ1BJIEFMV1IgbWV0aG9kOiB3cml0ZSB0byBhIHJlZ2lzdGVyCi0gKiBAaGFuZGxlOiB0aGUgaGFuZGxlIG9mIHRoZSBkZXZpY2UKKyAqIEBsaXMzOiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0CiAgKiBAcmVnOiAgICB0aGUgcmVnaXN0ZXIgdG8gd3JpdGUgdG8KICAqIEB2YWw6ICAgIHRoZSB2YWx1ZSB0byB3cml0ZQogICoKLSAqIFJldHVybnMgQUVfT0sgb24gc3VjY2Vzcy4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCi1hY3BpX3N0YXR1cyBsaXMzbHYwMmRfYWNwaV93cml0ZShhY3BpX2hhbmRsZSBoYW5kbGUsIGludCByZWcsIHU4IHZhbCkKK2ludCBsaXMzbHYwMmRfYWNwaV93cml0ZShzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgcmVnLCB1OCB2YWwpCiB7CisJc3RydWN0IGFjcGlfZGV2aWNlICpkZXYgPSBsaXMzLT5idXNfcHJpdjsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcmV0OyAvKiBOb3QgdXNlZCB3aGVuIHdyaXR0aW5nICovCiAJdW5pb24gYWNwaV9vYmplY3QgaW5fb2JqWzJdOwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ3MgPSB7IDIsIGluX29iaiB9OwpAQCAtMTM1LDEyICsxNDIsMTUgQEAKIAlpbl9vYmpbMV0udHlwZSAgICAgICAgICA9IEFDUElfVFlQRV9JTlRFR0VSOwogCWluX29ialsxXS5pbnRlZ2VyLnZhbHVlID0gdmFsOwogCi0JcmV0dXJuIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJBTFdSIiwgJmFyZ3MsICZyZXQpOworCWlmIChhY3BpX2V2YWx1YXRlX2ludGVnZXIoZGV2LT5oYW5kbGUsICJBTFdSIiwgJmFyZ3MsICZyZXQpICE9IEFFX09LKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGxpczNsdjAyZF9kbWlfbWF0Y2hlZChjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZG1pKQogewotCWFkZXYuYWMgPSAqKChzdHJ1Y3QgYXhpc19jb252ZXJzaW9uICopZG1pLT5kcml2ZXJfZGF0YSk7CisJbGlzM19kZXYuYWMgPSAqKChzdHJ1Y3QgYXhpc19jb252ZXJzaW9uICopZG1pLT5kcml2ZXJfZGF0YSk7CiAJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiBoYXJkd2FyZSB0eXBlICVzIGZvdW5kLlxuIiwgZG1pLT5pZGVudCk7CiAKIAlyZXR1cm4gMTsKQEAgLTE4Nyw2ICsxOTcsNyBAQAogCUFYSVNfRE1JX01BVENIKCJOQzI1MTAiLCAiSFAgQ29tcGFxIDI1MTAiLCB5X2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM4NTEwIiwgIkhQIENvbXBhcSA4NTEwIiwgeHlfc3dhcF9pbnZlcnRlZCksCiAJQVhJU19ETUlfTUFUQ0goIkhQMjEzMyIsICJIUCAyMTMzIiwgeHlfcm90YXRlZF9sZWZ0KSwKKwlBWElTX0RNSV9NQVRDSCgiSFAyMTQwIiwgIkhQIDIxNDAiLCB4eV9zd2FwX2ludmVydGVkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NTN4IiwgIkhQIENvbXBhcSA2NTMiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NzN4IiwgIkhQIENvbXBhcSA2NzMiLCB4eV9yb3RhdGVkX2xlZnRfdXNkKSwKIAlBWElTX0RNSV9NQVRDSCgiTkM2NTF4eCIsICJIUCBDb21wYXEgNjUxIiwgeHlfcm90YXRlZF9yaWdodCksCkBAIC0yMDEsNiArMjEyLDggQEAKIAkJCVBST0RVQ1RfTkFNRSwgIkhQIFBhdmlsaW9uIGR2NSIsCiAJCQlCT0FSRF9OQU1FLCAiMzYwMCIsCiAJCQl5X2ludmVydGVkKSwKKwlBWElTX0RNSV9NQVRDSCgiRFY3IiwgIkhQIFBhdmlsaW9uIGR2NyIsIHhfaW52ZXJ0ZWQpLAorCUFYSVNfRE1JX01BVENIKCJIUDg3MTAiLCAiSFAgQ29tcGFxIDg3MTAiLCB5X2ludmVydGVkKSwKIAl7IE5VTEwsIH0KIC8qIExhcHRvcCBtb2RlbHMgd2l0aG91dCBheGlzIGluZm8gKHlldCk6CiAgKiAiTkM2OTEwIiAiSFAgQ29tcGFxIDY5MTAiCkBAIC0yMTQsNyArMjI3LDcgQEAKIAogc3RhdGljIHZvaWQgaHBsZWRfc2V0KHN0cnVjdCBkZWxheWVkX2xlZF9jbGFzc2RldiAqbGVkX2NkZXYsIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCiB7Ci0JYWNwaV9oYW5kbGUgaGFuZGxlID0gYWRldi5kZXZpY2UtPmhhbmRsZTsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiA9IGxpczNfZGV2LmJ1c19wcml2OwogCXVuc2lnbmVkIGxvbmcgbG9uZyByZXQ7IC8qIE5vdCB1c2VkIHdoZW4gd3JpdGluZyAqLwogCXVuaW9uIGFjcGlfb2JqZWN0IGluX29ialsxXTsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdzID0geyAxLCBpbl9vYmogfTsKQEAgLTIyMiw3ICsyMzUsNyBAQAogCWluX29ialswXS50eXBlICAgICAgICAgID0gQUNQSV9UWVBFX0lOVEVHRVI7CiAJaW5fb2JqWzBdLmludGVnZXIudmFsdWUgPSAhIXZhbHVlOwogCi0JYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgIkFMRUQiLCAmYXJncywgJnJldCk7CisJYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGRldi0+aGFuZGxlLCAiQUxFRCIsICZhcmdzLCAmcmV0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBkZWxheWVkX2xlZF9jbGFzc2RldiBocGxlZF9sZWQgPSB7CkBAIC0yNTQsMjggKzI2NywxMSBAQAogCWFjcGlfc3RhdHVzIHN0YXR1czsKIAogCXN0YXR1cyA9IGFjcGlfd2Fsa19yZXNvdXJjZXMoZGV2aWNlLT5oYW5kbGUsIE1FVEhPRF9OQU1FX19DUlMsCi0JCQkJCWxpczNsdjAyZF9nZXRfcmVzb3VyY2UsICZhZGV2LmlycSk7CisJCQkJCWxpczNsdjAyZF9nZXRfcmVzb3VyY2UsICZsaXMzX2Rldi5pcnEpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogRXJyb3IgZ2V0dGluZyByZXNvdXJjZXNcbiIpOwogfQogCi1zdGF0aWMgczE2IGxpczNsdjAyZF9yZWFkXzE2KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHJlZykKLXsKLQl1OCBsbywgaGk7Ci0KLQlhZGV2LnJlYWQoaGFuZGxlLCByZWcgLSAxLCAmbG8pOwotCWFkZXYucmVhZChoYW5kbGUsIHJlZywgJmhpKTsKLQkvKiBJbiAiMTIgYml0IHJpZ2h0IGp1c3RpZmllZCIgbW9kZSwgYml0IDYsIGJpdCA3LCBiaXQgOCA9IGJpdCA1ICovCi0JcmV0dXJuIChzMTYpKChoaSA8PCA4KSB8IGxvKTsKLX0KLQotc3RhdGljIHMxNiBsaXMzbHYwMmRfcmVhZF84KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHJlZykKLXsKLQlzOCBsbzsKLQlhZGV2LnJlYWQoaGFuZGxlLCByZWcsICZsbyk7Ci0JcmV0dXJuIGxvOwotfQotCiBzdGF0aWMgaW50IGxpczNsdjAyZF9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJaW50IHJldDsKQEAgLTI4Myw1MSArMjc5LDM1IEBACiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYWRldi5kZXZpY2UgPSBkZXZpY2U7Ci0JYWRldi5pbml0ID0gbGlzM2x2MDJkX2FjcGlfaW5pdDsKLQlhZGV2LnJlYWQgPSBsaXMzbHYwMmRfYWNwaV9yZWFkOwotCWFkZXYud3JpdGUgPSBsaXMzbHYwMmRfYWNwaV93cml0ZTsKKwlsaXMzX2Rldi5idXNfcHJpdiA9IGRldmljZTsKKwlsaXMzX2Rldi5pbml0ID0gbGlzM2x2MDJkX2FjcGlfaW5pdDsKKwlsaXMzX2Rldi5yZWFkID0gbGlzM2x2MDJkX2FjcGlfcmVhZDsKKwlsaXMzX2Rldi53cml0ZSA9IGxpczNsdjAyZF9hY3BpX3dyaXRlOwogCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIERSSVZFUl9OQU1FKTsKIAlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQUNQSV9NRFBTX0NMQVNTKTsKLQlkZXZpY2UtPmRyaXZlcl9kYXRhID0gJmFkZXY7CisJZGV2aWNlLT5kcml2ZXJfZGF0YSA9ICZsaXMzX2RldjsKIAotCWxpczNsdjAyZF9hY3BpX3JlYWQoZGV2aWNlLT5oYW5kbGUsIFdIT19BTV9JLCAmYWRldi53aG9hbWkpOwotCXN3aXRjaCAoYWRldi53aG9hbWkpIHsKLQljYXNlIExJU19ET1VCTEVfSUQ6Ci0JCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogMi1ieXRlIHNlbnNvciBmb3VuZFxuIik7Ci0JCWFkZXYucmVhZF9kYXRhID0gbGlzM2x2MDJkX3JlYWRfMTY7Ci0JCWFkZXYubWRwc19tYXhfdmFsID0gMjA0ODsKLQkJYnJlYWs7Ci0JY2FzZSBMSVNfU0lOR0xFX0lEOgotCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IDEtYnl0ZSBzZW5zb3IgZm91bmRcbiIpOwotCQlhZGV2LnJlYWRfZGF0YSA9IGxpczNsdjAyZF9yZWFkXzg7Ci0JCWFkZXYubWRwc19tYXhfdmFsID0gMTI4OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUKLQkJCSI6IHVua25vd24gc2Vuc29yIHR5cGUgMHglWFxuIiwgYWRldi53aG9hbWkpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJLyogb2J0YWluIElSUSBudW1iZXIgb2Ygb3VyIGRldmljZSBmcm9tIEFDUEkgKi8KKwlsaXMzbHYwMmRfZW51bV9yZXNvdXJjZXMoZGV2aWNlKTsKIAogCS8qIElmIHBvc3NpYmxlIHVzZSBhICJzdGFuZGFyZCIgYXhlcyBvcmRlciAqLwogCWlmIChkbWlfY2hlY2tfc3lzdGVtKGxpczNsdjAyZF9kbWlfaWRzKSA9PSAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogbGFwdG9wIG1vZGVsIHVua25vd24sICIKIAkJCQkgInVzaW5nIGRlZmF1bHQgYXhlcyBjb25maWd1cmF0aW9uXG4iKTsKLQkJYWRldi5hYyA9IGxpczNsdjAyZF9heGlzX25vcm1hbDsKKwkJbGlzM19kZXYuYWMgPSBsaXMzbHYwMmRfYXhpc19ub3JtYWw7CiAJfQogCi0JSU5JVF9XT1JLKCZocGxlZF9sZWQud29yaywgZGVsYXllZF9zZXRfc3RhdHVzX3dvcmtlcik7Ci0JcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKE5VTEwsICZocGxlZF9sZWQubGVkX2NsYXNzZGV2KTsKKwkvKiBjYWxsIHRoZSBjb3JlIGxheWVyIGRvIGl0cyBpbml0ICovCisJcmV0ID0gbGlzM2x2MDJkX2luaXRfZGV2aWNlKCZsaXMzX2Rldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIG9idGFpbiBJUlEgbnVtYmVyIG9mIG91ciBkZXZpY2UgZnJvbSBBQ1BJICovCi0JbGlzM2x2MDJkX2VudW1fcmVzb3VyY2VzKGFkZXYuZGV2aWNlKTsKLQotCXJldCA9IGxpczNsdjAyZF9pbml0X2RldmljZSgmYWRldik7CisJSU5JVF9XT1JLKCZocGxlZF9sZWQud29yaywgZGVsYXllZF9zZXRfc3RhdHVzX3dvcmtlcik7CisJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKE5VTEwsICZocGxlZF9sZWQubGVkX2NsYXNzZGV2KTsKIAlpZiAocmV0KSB7CisJCWxpczNsdjAyZF9qb3lzdGlja19kaXNhYmxlKCk7CisJCWxpczNsdjAyZF9wb3dlcm9mZigmbGlzM19kZXYpOwogCQlmbHVzaF93b3JrKCZocGxlZF9sZWQud29yayk7Ci0JCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZocGxlZF9sZWQubGVkX2NsYXNzZGV2KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTM0MCw3ICszMjAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxpczNsdjAyZF9qb3lzdGlja19kaXNhYmxlKCk7Ci0JbGlzM2x2MDJkX3Bvd2Vyb2ZmKGRldmljZS0+aGFuZGxlKTsKKwlsaXMzbHYwMmRfcG93ZXJvZmYoJmxpczNfZGV2KTsKIAogCWZsdXNoX3dvcmsoJmhwbGVkX2xlZC53b3JrKTsKIAlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmaHBsZWRfbGVkLmxlZF9jbGFzc2Rldik7CkBAIC0zNTMsMTkgKzMzMywxOSBAQAogc3RhdGljIGludCBsaXMzbHYwMmRfc3VzcGVuZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCS8qIG1ha2Ugc3VyZSB0aGUgZGV2aWNlIGlzIG9mZiB3aGVuIHdlIHN1c3BlbmQgKi8KLQlsaXMzbHYwMmRfcG93ZXJvZmYoZGV2aWNlLT5oYW5kbGUpOworCWxpczNsdjAyZF9wb3dlcm9mZigmbGlzM19kZXYpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGxpczNsdjAyZF9yZXN1bWUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJLyogcHV0IGJhY2sgdGhlIGRldmljZSBpbiB0aGUgcmlnaHQgc3RhdGUgKEFDUEkgbWlnaHQgdHVybiBpdCBvbikgKi8KLQltdXRleF9sb2NrKCZhZGV2LmxvY2spOwotCWlmIChhZGV2LnVzYWdlID4gMCkKLQkJbGlzM2x2MDJkX3Bvd2Vyb24oZGV2aWNlLT5oYW5kbGUpOworCW11dGV4X2xvY2soJmxpczNfZGV2LmxvY2spOworCWlmIChsaXMzX2Rldi51c2FnZSA+IDApCisJCWxpczNsdjAyZF9wb3dlcm9uKCZsaXMzX2Rldik7CiAJZWxzZQotCQlsaXMzbHYwMmRfcG93ZXJvZmYoZGV2aWNlLT5oYW5kbGUpOwotCW11dGV4X3VubG9jaygmYWRldi5sb2NrKTsKKwkJbGlzM2x2MDJkX3Bvd2Vyb2ZmKCZsaXMzX2Rldik7CisJbXV0ZXhfdW5sb2NrKCZsaXMzX2Rldi5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYwppbmRleCA4YmIyMTU4Li43NzhlYjc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlICJsaXMzbHYwMmQuaCIKIApAQCAtNTMsMTMgKzUyLDMwIEBACiAgKiBqb3lzdGljay4KICAqLwogCi1zdHJ1Y3QgYWNwaV9saXMzbHYwMmQgYWRldiA9IHsKLQkubWlzY193YWl0ICAgPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUihhZGV2Lm1pc2Nfd2FpdCksCitzdHJ1Y3QgbGlzM2x2MDJkIGxpczNfZGV2ID0geworCS5taXNjX3dhaXQgICA9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKGxpczNfZGV2Lm1pc2Nfd2FpdCksCiB9OwogCi1FWFBPUlRfU1lNQk9MX0dQTChhZGV2KTsKK0VYUE9SVF9TWU1CT0xfR1BMKGxpczNfZGV2KTsKIAotc3RhdGljIGludCBsaXMzbHYwMmRfYWRkX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKK3N0YXRpYyBzMTYgbGlzM2x2MDJkX3JlYWRfOChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgcmVnKQoreworCXM4IGxvOworCWlmIChsaXMzLT5yZWFkKGxpczMsIHJlZywgJmxvKSA8IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIGxvOworfQorCitzdGF0aWMgczE2IGxpczNsdjAyZF9yZWFkXzE2KHN0cnVjdCBsaXMzbHYwMmQgKmxpczMsIGludCByZWcpCit7CisJdTggbG8sIGhpOworCisJbGlzMy0+cmVhZChsaXMzLCByZWcgLSAxLCAmbG8pOworCWxpczMtPnJlYWQobGlzMywgcmVnLCAmaGkpOworCS8qIEluICIxMiBiaXQgcmlnaHQganVzdGlmaWVkIiBtb2RlLCBiaXQgNiwgYml0IDcsIGJpdCA4ID0gYml0IDUgKi8KKwlyZXR1cm4gKHMxNikoKGhpIDw8IDgpIHwgbG8pOworfQogCiAvKioKICAqIGxpczNsdjAyZF9nZXRfYXhpcyAtIEZvciB0aGUgZ2l2ZW4gYXhpcywgZ2l2ZSB0aGUgdmFsdWUgY29udmVydGVkCkBAIC03OCwzNiArOTQsMzYgQEAKIAogLyoqCiAgKiBsaXMzbHYwMmRfZ2V0X3h5eiAtIEdldCBYLCBZIGFuZCBaIGF4aXMgdmFsdWVzIGZyb20gdGhlIGFjY2VsZXJvbWV0ZXIKLSAqIEBoYW5kbGU6IHRoZSBoYW5kbGUgdG8gdGhlIGRldmljZQotICogQHg6ICAgICAgd2hlcmUgdG8gc3RvcmUgdGhlIFggYXhpcyB2YWx1ZQotICogQHk6ICAgICAgd2hlcmUgdG8gc3RvcmUgdGhlIFkgYXhpcyB2YWx1ZQotICogQHo6ICAgICAgd2hlcmUgdG8gc3RvcmUgdGhlIFogYXhpcyB2YWx1ZQorICogQGxpczM6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3QKKyAqIEB4OiAgICB3aGVyZSB0byBzdG9yZSB0aGUgWCBheGlzIHZhbHVlCisgKiBAeTogICAgd2hlcmUgdG8gc3RvcmUgdGhlIFkgYXhpcyB2YWx1ZQorICogQHo6ICAgIHdoZXJlIHRvIHN0b3JlIHRoZSBaIGF4aXMgdmFsdWUKICAqCiAgKiBOb3RlIHRoYXQgNDBIeiBpbnB1dCBkZXZpY2UgY2FuIGVhdCB1cCBhYm91dCAxMCUgQ1BVIGF0IDgwME1IWgogICovCi1zdGF0aWMgdm9pZCBsaXMzbHYwMmRfZ2V0X3h5eihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCAqeCwgaW50ICp5LCBpbnQgKnopCitzdGF0aWMgdm9pZCBsaXMzbHYwMmRfZ2V0X3h5eihzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgKngsIGludCAqeSwgaW50ICp6KQogewogCWludCBwb3NpdGlvblszXTsKIAotCXBvc2l0aW9uWzBdID0gYWRldi5yZWFkX2RhdGEoaGFuZGxlLCBPVVRYKTsKLQlwb3NpdGlvblsxXSA9IGFkZXYucmVhZF9kYXRhKGhhbmRsZSwgT1VUWSk7Ci0JcG9zaXRpb25bMl0gPSBhZGV2LnJlYWRfZGF0YShoYW5kbGUsIE9VVFopOworCXBvc2l0aW9uWzBdID0gbGlzM19kZXYucmVhZF9kYXRhKGxpczMsIE9VVFgpOworCXBvc2l0aW9uWzFdID0gbGlzM19kZXYucmVhZF9kYXRhKGxpczMsIE9VVFkpOworCXBvc2l0aW9uWzJdID0gbGlzM19kZXYucmVhZF9kYXRhKGxpczMsIE9VVFopOwogCi0JKnggPSBsaXMzbHYwMmRfZ2V0X2F4aXMoYWRldi5hYy54LCBwb3NpdGlvbik7Ci0JKnkgPSBsaXMzbHYwMmRfZ2V0X2F4aXMoYWRldi5hYy55LCBwb3NpdGlvbik7Ci0JKnogPSBsaXMzbHYwMmRfZ2V0X2F4aXMoYWRldi5hYy56LCBwb3NpdGlvbik7CisJKnggPSBsaXMzbHYwMmRfZ2V0X2F4aXMobGlzM19kZXYuYWMueCwgcG9zaXRpb24pOworCSp5ID0gbGlzM2x2MDJkX2dldF9heGlzKGxpczNfZGV2LmFjLnksIHBvc2l0aW9uKTsKKwkqeiA9IGxpczNsdjAyZF9nZXRfYXhpcyhsaXMzX2Rldi5hYy56LCBwb3NpdGlvbik7CiB9CiAKLXZvaWQgbGlzM2x2MDJkX3Bvd2Vyb2ZmKGFjcGlfaGFuZGxlIGhhbmRsZSkKK3ZvaWQgbGlzM2x2MDJkX3Bvd2Vyb2ZmKHN0cnVjdCBsaXMzbHYwMmQgKmxpczMpCiB7Ci0JYWRldi5pc19vbiA9IDA7CisJbGlzM19kZXYuaXNfb24gPSAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobGlzM2x2MDJkX3Bvd2Vyb2ZmKTsKIAotdm9pZCBsaXMzbHYwMmRfcG93ZXJvbihhY3BpX2hhbmRsZSBoYW5kbGUpCit2b2lkIGxpczNsdjAyZF9wb3dlcm9uKHN0cnVjdCBsaXMzbHYwMmQgKmxpczMpCiB7Ci0JYWRldi5pc19vbiA9IDE7Ci0JYWRldi5pbml0KGhhbmRsZSk7CisJbGlzM19kZXYuaXNfb24gPSAxOworCWxpczNfZGV2LmluaXQobGlzMyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsaXMzbHYwMmRfcG93ZXJvbik7CiAKQEAgLTExNiwxMyArMTMyLDEzIEBACiAgKiBkZXZpY2Ugd2lsbCBhbHdheXMgYmUgb24gdW50aWwgYSBjYWxsIHRvIGxpczNsdjAyZF9kZWNyZWFzZV91c2UoKS4gTm90IHRvIGJlCiAgKiB1c2VkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCiAgKi8KLXN0YXRpYyB2b2lkIGxpczNsdjAyZF9pbmNyZWFzZV91c2Uoc3RydWN0IGFjcGlfbGlzM2x2MDJkICpkZXYpCitzdGF0aWMgdm9pZCBsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKHN0cnVjdCBsaXMzbHYwMmQgKmRldikKIHsKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWRldi0+dXNhZ2UrKzsKIAlpZiAoZGV2LT51c2FnZSA9PSAxKSB7CiAJCWlmICghZGV2LT5pc19vbikKLQkJCWxpczNsdjAyZF9wb3dlcm9uKGRldi0+ZGV2aWNlLT5oYW5kbGUpOworCQkJbGlzM2x2MDJkX3Bvd2Vyb24oZGV2KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogfQpAQCAtMTMxLDEyICsxNDcsMTIgQEAKICAqIFRvIGJlIGNhbGxlZCB3aGVuZXZlciBhIHVzYWdlIG9mIHRoZSBkZXZpY2UgaXMgc3RvcHBlZC4KICAqIEl0IHdpbGwgbWFrZSBzdXJlIHRvIHR1cm4gb2ZmIHRoZSBkZXZpY2Ugd2hlbiB0aGVyZSBpcyBub3QgdXNhZ2UuCiAgKi8KLXN0YXRpYyB2b2lkIGxpczNsdjAyZF9kZWNyZWFzZV91c2Uoc3RydWN0IGFjcGlfbGlzM2x2MDJkICpkZXYpCitzdGF0aWMgdm9pZCBsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKHN0cnVjdCBsaXMzbHYwMmQgKmRldikKIHsKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWRldi0+dXNhZ2UtLTsKIAlpZiAoZGV2LT51c2FnZSA9PSAwKQotCQlsaXMzbHYwMmRfcG93ZXJvZmYoZGV2LT5kZXZpY2UtPmhhbmRsZSk7CisJCWxpczNsdjAyZF9wb3dlcm9mZihkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIH0KIApAQCAtMTQ3LDEwICsxNjMsMTAgQEAKIAkgKiB0aGUgbGlkIGlzIGNsb3NlZC4gVGhpcyBsZWFkcyB0byBpbnRlcnJ1cHRzIGFzIHNvb24gYXMgYSBsaXR0bGUgbW92ZQogCSAqIGlzIGRvbmUuCiAJICovCi0JYXRvbWljX2luYygmYWRldi5jb3VudCk7CisJYXRvbWljX2luYygmbGlzM19kZXYuY291bnQpOwogCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhZGV2Lm1pc2Nfd2FpdCk7Ci0Ja2lsbF9mYXN5bmMoJmFkZXYuYXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX0lOKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmxpczNfZGV2Lm1pc2Nfd2FpdCk7CisJa2lsbF9mYXN5bmMoJmxpczNfZGV2LmFzeW5jX3F1ZXVlLCBTSUdJTywgUE9MTF9JTik7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xNTgsMTAgKzE3NCwxMCBAQAogewogCWludCByZXQ7CiAKLQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmYWRldi5taXNjX29wZW5lZCkpCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmxpczNfZGV2Lm1pc2Nfb3BlbmVkKSkKIAkJcmV0dXJuIC1FQlVTWTsgLyogYWxyZWFkeSBvcGVuICovCiAKLQlhdG9taWNfc2V0KCZhZGV2LmNvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZsaXMzX2Rldi5jb3VudCwgMCk7CiAKIAkvKgogCSAqIFRoZSBzZW5zb3IgY2FuIGdlbmVyYXRlIGludGVycnVwdHMgZm9yIGZyZWUtZmFsbCBhbmQgZGlyZWN0aW9uCkBAIC0xNzQsMjUgKzE5MCwyNSBAQAogCSAqIGlvLWFwaWMgaXMgbm90IGNvbmZpZ3VyYWJsZSAoYW5kIGdlbmVyYXRlcyBhIHdhcm5pbmcpIGJ1dCBJIGtlZXAgaXQKIAkgKiBpbiBjYXNlIG9mIHN1cHBvcnQgZm9yIG90aGVyIGhhcmR3YXJlLgogCSAqLwotCXJldCA9IHJlcXVlc3RfaXJxKGFkZXYuaXJxLCBsaXMzMDJkbF9pbnRlcnJ1cHQsIElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkgIERSSVZFUl9OQU1FLCAmYWRldik7CisJcmV0ID0gcmVxdWVzdF9pcnEobGlzM19kZXYuaXJxLCBsaXMzMDJkbF9pbnRlcnJ1cHQsIElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkgIERSSVZFUl9OQU1FLCAmbGlzM19kZXYpOwogCiAJaWYgKHJldCkgewotCQljbGVhcl9iaXQoMCwgJmFkZXYubWlzY19vcGVuZWQpOwotCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogSVJRJWQgYWxsb2NhdGlvbiBmYWlsZWRcbiIsIGFkZXYuaXJxKTsKKwkJY2xlYXJfYml0KDAsICZsaXMzX2Rldi5taXNjX29wZW5lZCk7CisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRSAiOiBJUlElZCBhbGxvY2F0aW9uIGZhaWxlZFxuIiwgbGlzM19kZXYuaXJxKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JbGlzM2x2MDJkX2luY3JlYXNlX3VzZSgmYWRldik7Ci0JcHJpbnRrKCJsaXMzOiByZWdpc3RlcmVkIGludGVycnVwdCAlZFxuIiwgYWRldi5pcnEpOworCWxpczNsdjAyZF9pbmNyZWFzZV91c2UoJmxpczNfZGV2KTsKKwlwcmludGsoImxpczM6IHJlZ2lzdGVyZWQgaW50ZXJydXB0ICVkXG4iLCBsaXMzX2Rldi5pcnEpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGxpczNsdjAyZF9taXNjX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JZmFzeW5jX2hlbHBlcigtMSwgZmlsZSwgMCwgJmFkZXYuYXN5bmNfcXVldWUpOwotCWxpczNsdjAyZF9kZWNyZWFzZV91c2UoJmFkZXYpOwotCWZyZWVfaXJxKGFkZXYuaXJxLCAmYWRldik7Ci0JY2xlYXJfYml0KDAsICZhZGV2Lm1pc2Nfb3BlbmVkKTsgLyogcmVsZWFzZSB0aGUgZGV2aWNlICovCisJZmFzeW5jX2hlbHBlcigtMSwgZmlsZSwgMCwgJmxpczNfZGV2LmFzeW5jX3F1ZXVlKTsKKwlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKCZsaXMzX2Rldik7CisJZnJlZV9pcnEobGlzM19kZXYuaXJxLCAmbGlzM19kZXYpOworCWNsZWFyX2JpdCgwLCAmbGlzM19kZXYubWlzY19vcGVuZWQpOyAvKiByZWxlYXNlIHRoZSBkZXZpY2UgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA3LDEwICsyMjMsMTAgQEAKIAlpZiAoY291bnQgPCAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFkZF93YWl0X3F1ZXVlKCZhZGV2Lm1pc2Nfd2FpdCwgJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZsaXMzX2Rldi5taXNjX3dhaXQsICZ3YWl0KTsKIAl3aGlsZSAodHJ1ZSkgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlkYXRhID0gYXRvbWljX3hjaGcoJmFkZXYuY291bnQsIDApOworCQlkYXRhID0gYXRvbWljX3hjaGcoJmxpczNfZGV2LmNvdW50LCAwKTsKIAkJaWYgKGRhdGEpCiAJCQlicmVhazsKIApAQCAtMjQwLDIyICsyNTYsMjIgQEAKIAogb3V0OgogCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmYWRldi5taXNjX3dhaXQsICZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmbGlzM19kZXYubWlzY193YWl0LCAmd2FpdCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGxpczNsdjAyZF9taXNjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7Ci0JcG9sbF93YWl0KGZpbGUsICZhZGV2Lm1pc2Nfd2FpdCwgd2FpdCk7Ci0JaWYgKGF0b21pY19yZWFkKCZhZGV2LmNvdW50KSkKKwlwb2xsX3dhaXQoZmlsZSwgJmxpczNfZGV2Lm1pc2Nfd2FpdCwgd2FpdCk7CisJaWYgKGF0b21pY19yZWFkKCZsaXMzX2Rldi5jb3VudCkpCiAJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGxpczNsdjAyZF9taXNjX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7Ci0JcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmYWRldi5hc3luY19xdWV1ZSk7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzM19kZXYuYXN5bmNfcXVldWUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsaXMzbHYwMmRfbWlzY19mb3BzID0gewpAQCAtMjgzLDEyICsyOTksMTIgQEAKIAlpbnQgeCwgeSwgejsKIAogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCWxpczNsdjAyZF9nZXRfeHl6KGFkZXYuZGV2aWNlLT5oYW5kbGUsICZ4LCAmeSwgJnopOwotCQlpbnB1dF9yZXBvcnRfYWJzKGFkZXYuaWRldiwgQUJTX1gsIHggLSBhZGV2LnhjYWxpYik7Ci0JCWlucHV0X3JlcG9ydF9hYnMoYWRldi5pZGV2LCBBQlNfWSwgeSAtIGFkZXYueWNhbGliKTsKLQkJaW5wdXRfcmVwb3J0X2FicyhhZGV2LmlkZXYsIEFCU19aLCB6IC0gYWRldi56Y2FsaWIpOworCQlsaXMzbHYwMmRfZ2V0X3h5eigmbGlzM19kZXYsICZ4LCAmeSwgJnopOworCQlpbnB1dF9yZXBvcnRfYWJzKGxpczNfZGV2LmlkZXYsIEFCU19YLCB4IC0gbGlzM19kZXYueGNhbGliKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhsaXMzX2Rldi5pZGV2LCBBQlNfWSwgeSAtIGxpczNfZGV2LnljYWxpYik7CisJCWlucHV0X3JlcG9ydF9hYnMobGlzM19kZXYuaWRldiwgQUJTX1osIHogLSBsaXMzX2Rldi56Y2FsaWIpOwogCi0JCWlucHV0X3N5bmMoYWRldi5pZGV2KTsKKwkJaW5wdXRfc3luYyhsaXMzX2Rldi5pZGV2KTsKIAogCQl0cnlfdG9fZnJlZXplKCk7CiAJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKE1EUFNfUE9MTF9JTlRFUlZBTCk7CkBAIC0yOTksMTEgKzMxNSwxMSBAQAogCiBzdGF0aWMgaW50IGxpczNsdjAyZF9qb3lzdGlja19vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0KQogewotCWxpczNsdjAyZF9pbmNyZWFzZV91c2UoJmFkZXYpOwotCWFkZXYua3RocmVhZCA9IGt0aHJlYWRfcnVuKGxpczNsdjAyZF9qb3lzdGlja19rdGhyZWFkLCBOVUxMLCAia2xpczNsdjAyZCIpOwotCWlmIChJU19FUlIoYWRldi5rdGhyZWFkKSkgewotCQlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKCZhZGV2KTsKLQkJcmV0dXJuIFBUUl9FUlIoYWRldi5rdGhyZWFkKTsKKwlsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKCZsaXMzX2Rldik7CisJbGlzM19kZXYua3RocmVhZCA9IGt0aHJlYWRfcnVuKGxpczNsdjAyZF9qb3lzdGlja19rdGhyZWFkLCBOVUxMLCAia2xpczNsdjAyZCIpOworCWlmIChJU19FUlIobGlzM19kZXYua3RocmVhZCkpIHsKKwkJbGlzM2x2MDJkX2RlY3JlYXNlX3VzZSgmbGlzM19kZXYpOworCQlyZXR1cm4gUFRSX0VSUihsaXMzX2Rldi5rdGhyZWFkKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMxMSw0NSArMzI3LDQ2IEBACiAKIHN0YXRpYyB2b2lkIGxpczNsdjAyZF9qb3lzdGlja19jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKIHsKLQlrdGhyZWFkX3N0b3AoYWRldi5rdGhyZWFkKTsKLQlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKCZhZGV2KTsKKwlrdGhyZWFkX3N0b3AobGlzM19kZXYua3RocmVhZCk7CisJbGlzM2x2MDJkX2RlY3JlYXNlX3VzZSgmbGlzM19kZXYpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzM2x2MDJkX2NhbGlicmF0ZV9qb3lzdGljayh2b2lkKQogewotCWxpczNsdjAyZF9nZXRfeHl6KGFkZXYuZGV2aWNlLT5oYW5kbGUsICZhZGV2LnhjYWxpYiwgJmFkZXYueWNhbGliLCAmYWRldi56Y2FsaWIpOworCWxpczNsdjAyZF9nZXRfeHl6KCZsaXMzX2RldiwKKwkJJmxpczNfZGV2LnhjYWxpYiwgJmxpczNfZGV2LnljYWxpYiwgJmxpczNfZGV2LnpjYWxpYik7CiB9CiAKIGludCBsaXMzbHYwMmRfam95c3RpY2tfZW5hYmxlKHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWlmIChhZGV2LmlkZXYpCisJaWYgKGxpczNfZGV2LmlkZXYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYWRldi5pZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFhZGV2LmlkZXYpCisJbGlzM19kZXYuaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghbGlzM19kZXYuaWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlsaXMzbHYwMmRfY2FsaWJyYXRlX2pveXN0aWNrKCk7CiAKLQlhZGV2LmlkZXYtPm5hbWUgICAgICAgPSAiU1QgTElTM0xWMDJETCBBY2NlbGVyb21ldGVyIjsKLQlhZGV2LmlkZXYtPnBoeXMgICAgICAgPSBEUklWRVJfTkFNRSAiL2lucHV0MCI7Ci0JYWRldi5pZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7Ci0JYWRldi5pZGV2LT5pZC52ZW5kb3IgID0gMDsKLQlhZGV2LmlkZXYtPmRldi5wYXJlbnQgPSAmYWRldi5wZGV2LT5kZXY7Ci0JYWRldi5pZGV2LT5vcGVuICAgICAgID0gbGlzM2x2MDJkX2pveXN0aWNrX29wZW47Ci0JYWRldi5pZGV2LT5jbG9zZSAgICAgID0gbGlzM2x2MDJkX2pveXN0aWNrX2Nsb3NlOworCWxpczNfZGV2LmlkZXYtPm5hbWUgICAgICAgPSAiU1QgTElTM0xWMDJETCBBY2NlbGVyb21ldGVyIjsKKwlsaXMzX2Rldi5pZGV2LT5waHlzICAgICAgID0gRFJJVkVSX05BTUUgIi9pbnB1dDAiOworCWxpczNfZGV2LmlkZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlsaXMzX2Rldi5pZGV2LT5pZC52ZW5kb3IgID0gMDsKKwlsaXMzX2Rldi5pZGV2LT5kZXYucGFyZW50ID0gJmxpczNfZGV2LnBkZXYtPmRldjsKKwlsaXMzX2Rldi5pZGV2LT5vcGVuICAgICAgID0gbGlzM2x2MDJkX2pveXN0aWNrX29wZW47CisJbGlzM19kZXYuaWRldi0+Y2xvc2UgICAgICA9IGxpczNsdjAyZF9qb3lzdGlja19jbG9zZTsKIAotCXNldF9iaXQoRVZfQUJTLCBhZGV2LmlkZXYtPmV2Yml0KTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhhZGV2LmlkZXYsIEFCU19YLCAtYWRldi5tZHBzX21heF92YWwsIGFkZXYubWRwc19tYXhfdmFsLCAzLCAzKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhhZGV2LmlkZXYsIEFCU19ZLCAtYWRldi5tZHBzX21heF92YWwsIGFkZXYubWRwc19tYXhfdmFsLCAzLCAzKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhhZGV2LmlkZXYsIEFCU19aLCAtYWRldi5tZHBzX21heF92YWwsIGFkZXYubWRwc19tYXhfdmFsLCAzLCAzKTsKKwlzZXRfYml0KEVWX0FCUywgbGlzM19kZXYuaWRldi0+ZXZiaXQpOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGxpczNfZGV2LmlkZXYsIEFCU19YLCAtbGlzM19kZXYubWRwc19tYXhfdmFsLCBsaXMzX2Rldi5tZHBzX21heF92YWwsIDMsIDMpOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGxpczNfZGV2LmlkZXYsIEFCU19ZLCAtbGlzM19kZXYubWRwc19tYXhfdmFsLCBsaXMzX2Rldi5tZHBzX21heF92YWwsIDMsIDMpOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGxpczNfZGV2LmlkZXYsIEFCU19aLCAtbGlzM19kZXYubWRwc19tYXhfdmFsLCBsaXMzX2Rldi5tZHBzX21heF92YWwsIDMsIDMpOwogCi0JZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGFkZXYuaWRldik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGxpczNfZGV2LmlkZXYpOwogCWlmIChlcnIpIHsKLQkJaW5wdXRfZnJlZV9kZXZpY2UoYWRldi5pZGV2KTsKLQkJYWRldi5pZGV2ID0gTlVMTDsKKwkJaW5wdXRfZnJlZV9kZXZpY2UobGlzM19kZXYuaWRldik7CisJCWxpczNfZGV2LmlkZXYgPSBOVUxMOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC0zNTgsNzEgKzM3NSw0MCBAQAogCiB2b2lkIGxpczNsdjAyZF9qb3lzdGlja19kaXNhYmxlKHZvaWQpCiB7Ci0JaWYgKCFhZGV2LmlkZXYpCisJaWYgKCFsaXMzX2Rldi5pZGV2KQogCQlyZXR1cm47CiAKIAltaXNjX2RlcmVnaXN0ZXIoJmxpczNsdjAyZF9taXNjX2RldmljZSk7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoYWRldi5pZGV2KTsKLQlhZGV2LmlkZXYgPSBOVUxMOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGxpczNfZGV2LmlkZXYpOworCWxpczNfZGV2LmlkZXYgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobGlzM2x2MDJkX2pveXN0aWNrX2Rpc2FibGUpOwogCi0vKgotICogSW5pdGlhbGlzZSB0aGUgYWNjZWxlcm9tZXRlciBhbmQgdGhlIHZhcmlvdXMgc3Vic3lzdGVtcy4KLSAqIFNob3VsZCBiZSByYXRoZXIgaW5kZXBlbmRhbnQgb2YgdGhlIGJ1cyBzeXN0ZW0uCi0gKi8KLWludCBsaXMzbHYwMmRfaW5pdF9kZXZpY2Uoc3RydWN0IGFjcGlfbGlzM2x2MDJkICpkZXYpCi17Ci0JbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKLQlsaXMzbHYwMmRfYWRkX2ZzKGRldi0+ZGV2aWNlKTsKLQlsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKGRldik7Ci0KLQlpZiAobGlzM2x2MDJkX2pveXN0aWNrX2VuYWJsZSgpKQotCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogam95c3RpY2sgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQotCXByaW50aygibGlzM19pbml0X2RldmljZTogaXJxICVkXG4iLCBkZXYtPmlycSk7Ci0KLQkvKiBpZiB3ZSBkaWQgbm90IGdldCBhbiBJUlEgZnJvbSBBQ1BJIC0gd2UgaGF2ZSBub3RoaW5nIG1vcmUgdG8gZG8gKi8KLQlpZiAoIWRldi0+aXJxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRQotCQkJIjogTm8gSVJRIGluIEFDUEkuIERpc2FibGluZyAvZGV2L2ZyZWVmYWxsXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcHJpbnRrKCJsaXMzOiByZWdpc3RlcmluZyBkZXZpY2VcbiIpOwotCWlmIChtaXNjX3JlZ2lzdGVyKCZsaXMzbHYwMmRfbWlzY19kZXZpY2UpKQotCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogbWlzY19yZWdpc3RlciBmYWlsZWRcbiIpOwotb3V0OgotCWxpczNsdjAyZF9kZWNyZWFzZV91c2UoZGV2KTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGxpczNsdjAyZF9pbml0X2RldmljZSk7Ci0KIC8qIFN5c2ZzIHN0dWZmICovCiBzdGF0aWMgc3NpemVfdCBsaXMzbHYwMmRfcG9zaXRpb25fc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlpbnQgeCwgeSwgejsKIAotCWxpczNsdjAyZF9pbmNyZWFzZV91c2UoJmFkZXYpOwotCWxpczNsdjAyZF9nZXRfeHl6KGFkZXYuZGV2aWNlLT5oYW5kbGUsICZ4LCAmeSwgJnopOwotCWxpczNsdjAyZF9kZWNyZWFzZV91c2UoJmFkZXYpOworCWxpczNsdjAyZF9pbmNyZWFzZV91c2UoJmxpczNfZGV2KTsKKwlsaXMzbHYwMmRfZ2V0X3h5eigmbGlzM19kZXYsICZ4LCAmeSwgJnopOworCWxpczNsdjAyZF9kZWNyZWFzZV91c2UoJmxpczNfZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIoJWQsJWQsJWQpXG4iLCB4LCB5LCB6KTsKIH0KIAogc3RhdGljIHNzaXplX3QgbGlzM2x2MDJkX2NhbGlicmF0ZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiglZCwlZCwlZClcbiIsIGFkZXYueGNhbGliLCBhZGV2LnljYWxpYiwgYWRldi56Y2FsaWIpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiglZCwlZCwlZClcbiIsIGxpczNfZGV2LnhjYWxpYiwgbGlzM19kZXYueWNhbGliLCBsaXMzX2Rldi56Y2FsaWIpOwogfQogCiBzdGF0aWMgc3NpemVfdCBsaXMzbHYwMmRfY2FsaWJyYXRlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKCZhZGV2KTsKKwlsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKCZsaXMzX2Rldik7CiAJbGlzM2x2MDJkX2NhbGlicmF0ZV9qb3lzdGljaygpOwotCWxpczNsdjAyZF9kZWNyZWFzZV91c2UoJmFkZXYpOworCWxpczNsdjAyZF9kZWNyZWFzZV91c2UoJmxpczNfZGV2KTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTQzNCw5ICs0MjAsOSBAQAogCXU4IGN0cmw7CiAJaW50IHZhbDsKIAotCWxpczNsdjAyZF9pbmNyZWFzZV91c2UoJmFkZXYpOwotCWFkZXYucmVhZChhZGV2LmRldmljZS0+aGFuZGxlLCBDVFJMX1JFRzEsICZjdHJsKTsKLQlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKCZhZGV2KTsKKwlsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKCZsaXMzX2Rldik7CisJbGlzM19kZXYucmVhZCgmbGlzM19kZXYsIENUUkxfUkVHMSwgJmN0cmwpOworCWxpczNsdjAyZF9kZWNyZWFzZV91c2UoJmxpczNfZGV2KTsKIAl2YWwgPSAoY3RybCAmIChDVFJMMV9ERjAgfCBDVFJMMV9ERjEpKSA+PiA0OwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBsaXMzbHYwMmRsX2RmX3ZhbFt2YWxdKTsKIH0KQEAgLTQ1OCwyMyArNDQ0LDczIEBACiB9OwogCiAKLXN0YXRpYyBpbnQgbGlzM2x2MDJkX2FkZF9mcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgbGlzM2x2MDJkX2FkZF9mcyhzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzKQogewotCWFkZXYucGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJJVkVSX05BTUUsIC0xLCBOVUxMLCAwKTsKLQlpZiAoSVNfRVJSKGFkZXYucGRldikpCi0JCXJldHVybiBQVFJfRVJSKGFkZXYucGRldik7CisJbGlzM19kZXYucGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJJVkVSX05BTUUsIC0xLCBOVUxMLCAwKTsKKwlpZiAoSVNfRVJSKGxpczNfZGV2LnBkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihsaXMzX2Rldi5wZGV2KTsKIAotCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmFkZXYucGRldi0+ZGV2LmtvYmosICZsaXMzbHYwMmRfYXR0cmlidXRlX2dyb3VwKTsKKwlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZsaXMzX2Rldi5wZGV2LT5kZXYua29iaiwgJmxpczNsdjAyZF9hdHRyaWJ1dGVfZ3JvdXApOwogfQogCiBpbnQgbGlzM2x2MDJkX3JlbW92ZV9mcyh2b2lkKQogewotCXN5c2ZzX3JlbW92ZV9ncm91cCgmYWRldi5wZGV2LT5kZXYua29iaiwgJmxpczNsdjAyZF9hdHRyaWJ1dGVfZ3JvdXApOwotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGFkZXYucGRldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZsaXMzX2Rldi5wZGV2LT5kZXYua29iaiwgJmxpczNsdjAyZF9hdHRyaWJ1dGVfZ3JvdXApOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGxpczNfZGV2LnBkZXYpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobGlzM2x2MDJkX3JlbW92ZV9mcyk7CiAKKy8qCisgKiBJbml0aWFsaXNlIHRoZSBhY2NlbGVyb21ldGVyIGFuZCB0aGUgdmFyaW91cyBzdWJzeXN0ZW1zLgorICogU2hvdWxkIGJlIHJhdGhlciBpbmRlcGVuZGFudCBvZiB0aGUgYnVzIHN5c3RlbS4KKyAqLworaW50IGxpczNsdjAyZF9pbml0X2RldmljZShzdHJ1Y3QgbGlzM2x2MDJkICpkZXYpCit7CisJZGV2LT53aG9hbWkgPSBsaXMzbHYwMmRfcmVhZF84KGRldiwgV0hPX0FNX0kpOworCisJc3dpdGNoIChkZXYtPndob2FtaSkgeworCWNhc2UgTElTX0RPVUJMRV9JRDoKKwkJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiOiAyLWJ5dGUgc2Vuc29yIGZvdW5kXG4iKTsKKwkJZGV2LT5yZWFkX2RhdGEgPSBsaXMzbHYwMmRfcmVhZF8xNjsKKwkJZGV2LT5tZHBzX21heF92YWwgPSAyMDQ4OworCQlicmVhazsKKwljYXNlIExJU19TSU5HTEVfSUQ6CisJCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogMS1ieXRlIHNlbnNvciBmb3VuZFxuIik7CisJCWRldi0+cmVhZF9kYXRhID0gbGlzM2x2MDJkX3JlYWRfODsKKwkJZGV2LT5tZHBzX21heF92YWwgPSAxMjg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRQorCQkJIjogdW5rbm93biBzZW5zb3IgdHlwZSAweCVYXG4iLCBsaXMzX2Rldi53aG9hbWkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCWxpczNsdjAyZF9hZGRfZnMoZGV2KTsKKwlsaXMzbHYwMmRfaW5jcmVhc2VfdXNlKGRldik7CisKKwlpZiAobGlzM2x2MDJkX2pveXN0aWNrX2VuYWJsZSgpKQorCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogam95c3RpY2sgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKworCXByaW50aygibGlzM19pbml0X2RldmljZTogaXJxICVkXG4iLCBkZXYtPmlycSk7CisKKwkvKiBiYWlsIGlmIHdlIGRpZCBub3QgZ2V0IGFuIElSUSBmcm9tIHRoZSBidXMgbGF5ZXIgKi8KKwlpZiAoIWRldi0+aXJxKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRQorCQkJIjogTm8gSVJRLiBEaXNhYmxpbmcgL2Rldi9mcmVlZmFsbFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXByaW50aygibGlzMzogcmVnaXN0ZXJpbmcgZGV2aWNlXG4iKTsKKwlpZiAobWlzY19yZWdpc3RlcigmbGlzM2x2MDJkX21pc2NfZGV2aWNlKSkKKwkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FICI6IG1pc2NfcmVnaXN0ZXIgZmFpbGVkXG4iKTsKK291dDoKKwlsaXMzbHYwMmRfZGVjcmVhc2VfdXNlKGRldik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsaXMzbHYwMmRfaW5pdF9kZXZpY2UpOworCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNUIExJUzNMVjAyRHggdGhyZWUtYXhpcyBkaWdpdGFsIGFjY2VsZXJvbWV0ZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJZYW4gQnVybWFuLCBFcmljIFBpZWwsIFBhdmVsIE1hY2hlayIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9saXMzbHYwMmQuaCBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmgKaW5kZXggNzU5NzJiZi4uNzQ1ZWM5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9saXMzbHYwMmQuaAorKysgYi9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5oCkBAIC0xNTksMTQgKzE1OSwxNCBAQAogCXM4CXo7CiB9OwogCi1zdHJ1Y3QgYWNwaV9saXMzbHYwMmQgewotCXN0cnVjdCBhY3BpX2RldmljZQkqZGV2aWNlOyAgIC8qIFRoZSBBQ1BJIGRldmljZSAqLwotCWFjcGlfc3RhdHVzICgqaW5pdCkgKGFjcGlfaGFuZGxlIGhhbmRsZSk7Ci0JYWNwaV9zdGF0dXMgKCp3cml0ZSkgKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IHJlZywgdTggdmFsKTsKLQlhY3BpX3N0YXR1cyAoKnJlYWQpIChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCByZWcsIHU4ICpyZXQpOworc3RydWN0IGxpczNsdjAyZCB7CisJdm9pZAkJCSpidXNfcHJpdjsgLyogdXNlZCBieSB0aGUgYnVzIGxheWVyIG9ubHkgKi8KKwlpbnQgKCppbml0KSAoc3RydWN0IGxpczNsdjAyZCAqbGlzMyk7CisJaW50ICgqd3JpdGUpIChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgcmVnLCB1OCB2YWwpOworCWludCAoKnJlYWQpIChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgcmVnLCB1OCAqcmV0KTsKIAogCXU4CQkJd2hvYW1pOyAgICAvKiAzQWg6IDItYnl0ZSByZWdpc3RyaWVzLCAzQmg6IDEtYnl0ZSByZWdpc3RyaWVzICovCi0JczE2ICgqcmVhZF9kYXRhKSAoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgcmVnKTsKKwlzMTYgKCpyZWFkX2RhdGEpIChzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzLCBpbnQgcmVnKTsKIAlpbnQJCQltZHBzX21heF92YWw7CiAKIAlzdHJ1Y3QgaW5wdXRfZGV2CSppZGV2OyAgICAgLyogaW5wdXQgZGV2aWNlICovCkBAIC0xODcsMTEgKzE4NywxMSBAQAogCXVuc2lnbmVkIGxvbmcJCW1pc2Nfb3BlbmVkOyAvKiBiaXQwOiB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgb3BlbiAqLwogfTsKIAotaW50IGxpczNsdjAyZF9pbml0X2RldmljZShzdHJ1Y3QgYWNwaV9saXMzbHYwMmQgKmRldik7CitpbnQgbGlzM2x2MDJkX2luaXRfZGV2aWNlKHN0cnVjdCBsaXMzbHYwMmQgKmxpczMpOwogaW50IGxpczNsdjAyZF9qb3lzdGlja19lbmFibGUodm9pZCk7CiB2b2lkIGxpczNsdjAyZF9qb3lzdGlja19kaXNhYmxlKHZvaWQpOwotdm9pZCBsaXMzbHYwMmRfcG93ZXJvZmYoYWNwaV9oYW5kbGUgaGFuZGxlKTsKLXZvaWQgbGlzM2x2MDJkX3Bvd2Vyb24oYWNwaV9oYW5kbGUgaGFuZGxlKTsKK3ZvaWQgbGlzM2x2MDJkX3Bvd2Vyb2ZmKHN0cnVjdCBsaXMzbHYwMmQgKmxpczMpOwordm9pZCBsaXMzbHYwMmRfcG93ZXJvbihzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzKTsKIGludCBsaXMzbHYwMmRfcmVtb3ZlX2ZzKHZvaWQpOwogCi1leHRlcm4gc3RydWN0IGFjcGlfbGlzM2x2MDJkIGFkZXY7CitleHRlcm4gc3RydWN0IGxpczNsdjAyZCBsaXMzX2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmRfc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhZTc0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkX3NwaS5jCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogbGlzM2x2MDJkX3NwaSAtIFNQSSBnbHVlIGxheWVyIGZvciBsaXMzbHYwMmQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjaW5jbHVkZSAibGlzM2x2MDJkLmgiCisKKyNkZWZpbmUgRFJWX05BTUUgCSJsaXMzbHYwMmRfc3BpIgorI2RlZmluZSBMSVMzX1NQSV9SRUFECTB4ODAKKworc3RhdGljIGludCBsaXMzX3NwaV9yZWFkKHN0cnVjdCBsaXMzbHYwMmQgKmxpczMsIGludCByZWcsIHU4ICp2KQoreworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBsaXMzLT5idXNfcHJpdjsKKwlpbnQgcmV0ID0gc3BpX3c4cjgoc3BpLCByZWcgfCBMSVMzX1NQSV9SRUFEKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkqdiA9ICh1OCkgcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpczNfc3BpX3dyaXRlKHN0cnVjdCBsaXMzbHYwMmQgKmxpczMsIGludCByZWcsIHU4IHZhbCkKK3sKKwl1OCB0bXBbMl0gPSB7IHJlZywgdmFsIH07CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGxpczMtPmJ1c19wcml2OworCXJldHVybiBzcGlfd3JpdGUoc3BpLCB0bXAsIHNpemVvZih0bXApKTsKK30KKworc3RhdGljIGludCBsaXMzX3NwaV9pbml0KHN0cnVjdCBsaXMzbHYwMmQgKmxpczMpCit7CisJdTggcmVnOworCWludCByZXQ7CisKKwkvKiBwb3dlciB1cCB0aGUgZGV2aWNlICovCisJcmV0ID0gbGlzMy0+cmVhZChsaXMzLCBDVFJMX1JFRzEsICZyZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmVnIHw9IENUUkwxX1BEMDsKKwlyZXR1cm4gbGlzMy0+d3JpdGUobGlzMywgQ1RSTF9SRUcxLCByZWcpOworfQorCitzdGF0aWMgc3RydWN0IGF4aXNfY29udmVyc2lvbiBsaXMzbHYwMmRfYXhpc19ub3JtYWwgPSB7IDEsIDIsIDMgfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbGlzMzAyZGxfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJaW50IHJldDsKKworCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CisJc3BpLT5tb2RlID0gU1BJX01PREVfMDsKKwlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWxpczNfZGV2LmJ1c19wcml2ID0gc3BpOworCWxpczNfZGV2LmluaXQgPSBsaXMzX3NwaV9pbml0OworCWxpczNfZGV2LnJlYWQgPSBsaXMzX3NwaV9yZWFkOworCWxpczNfZGV2LndyaXRlID0gbGlzM19zcGlfd3JpdGU7CisJbGlzM19kZXYuaXJxID0gc3BpLT5pcnE7CisJbGlzM19kZXYuYWMgPSBsaXMzbHYwMmRfYXhpc19ub3JtYWw7CisJc3BpX3NldF9kcnZkYXRhKHNwaSwgJmxpczNfZGV2KTsKKworCXJldCA9IGxpczNsdjAyZF9pbml0X2RldmljZSgmbGlzM19kZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGxpczMwMmRsX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgbGlzM2x2MDJkICpsaXMzID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisJbGlzM2x2MDJkX2pveXN0aWNrX2Rpc2FibGUoKTsKKwlsaXMzbHYwMmRfcG93ZXJvZmYobGlzMyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBsaXMzMDJkbF9zcGlfZHJpdmVyID0geworCS5kcml2ZXIJID0geworCQkubmFtZSAgID0gRFJWX05BTUUsCisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQk9IGxpczMwMmRsX3NwaV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AobGlzMzAyZGxfc3BpX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsaXMzMDJkbF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmxpczMwMmRsX3NwaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbGlzMzAyZGxfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmbGlzMzAyZGxfc3BpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGxpczMwMmRsX2luaXQpOworbW9kdWxlX2V4aXQobGlzMzAyZGxfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkRhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImxpczNsdjAyZCBTUEkgZ2x1ZSBsYXllciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTUyNDEuYyBiL2RyaXZlcnMvaHdtb24vbG05NTI0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MWQ5NWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2xtOTUyNDEuYwpAQCAtMCwwICsxLDUyNyBAQAorLyoKKyAqIGxtOTUyNDEuYyAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCisgKiAgICAgICAgICAgICBtb25pdG9yaW5nCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGF2aWRlIFJpenpvIDxlbHBhLXJpenpvQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiB0aGUgbWF4MTYxOSBkcml2ZXIuIFRoZSBMTTk1MjQxIGlzIGEgc2Vuc29yIGNoaXAgbWFkZSBieSBOYXRpb25hbAorICogICBTZW1pY29uZHVjdG9ycy4KKyAqIEl0IHJlcG9ydHMgdXAgdG8gdGhyZWUgdGVtcGVyYXR1cmVzIChpdHMgb3duIHBsdXMgdXAgdG8KKyAqIHR3byBleHRlcm5hbCBvbmVzKS4gQ29tcGxldGUgZGF0YXNoZWV0IGNhbiBiZQorICogb2J0YWluZWQgZnJvbSBOYXRpb25hbCdzIHdlYnNpdGUgYXQ6CisgKiAgIGh0dHA6Ly93d3cubmF0aW9uYWwuY29tL2RzLmNnaS9MTS9MTTk1MjQxLnBkZgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geworCTB4MTksIDB4MmEsIDB4MmIsIEkyQ19DTElFTlRfRU5EfTsKKworLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KK0kyQ19DTElFTlRfSU5TTU9EXzEobG05NTI0MSk7CisKKy8qIExNOTUyNDEgcmVnaXN0ZXJzICovCisjZGVmaW5lIExNOTUyNDFfUkVHX1JfTUFOX0lECQkweEZFCisjZGVmaW5lIExNOTUyNDFfUkVHX1JfQ0hJUF9JRAkJMHhGRgorI2RlZmluZSBMTTk1MjQxX1JFR19SX1NUQVRVUwkJMHgwMgorI2RlZmluZSBMTTk1MjQxX1JFR19SV19DT05GSUcJCTB4MDMKKyNkZWZpbmUgTE05NTI0MV9SRUdfUldfUkVNX0ZJTFRFUgkweDA2CisjZGVmaW5lIExNOTUyNDFfUkVHX1JXX1RSVVRIRVJNCQkweDA3CisjZGVmaW5lIExNOTUyNDFfUkVHX1dfT05FX1NIT1QgIAkweDBGCisjZGVmaW5lIExNOTUyNDFfUkVHX1JfTE9DQUxfVEVNUEgJMHgxMAorI2RlZmluZSBMTTk1MjQxX1JFR19SX1JFTU9URTFfVEVNUEgJMHgxMQorI2RlZmluZSBMTTk1MjQxX1JFR19SX1JFTU9URTJfVEVNUEgJMHgxMgorI2RlZmluZSBMTTk1MjQxX1JFR19SX0xPQ0FMX1RFTVBMCTB4MjAKKyNkZWZpbmUgTE05NTI0MV9SRUdfUl9SRU1PVEUxX1RFTVBMCTB4MjEKKyNkZWZpbmUgTE05NTI0MV9SRUdfUl9SRU1PVEUyX1RFTVBMCTB4MjIKKyNkZWZpbmUgTE05NTI0MV9SRUdfUldfUkVNT1RFX01PREVMCTB4MzAKKworLyogTE05NTI0MSBzcGVjaWZpYyBiaXRmaWVsZHMgKi8KKyNkZWZpbmUgQ0ZHX1NUT1AgMHg0MAorI2RlZmluZSBDRkdfQ1IwMDc2IDB4MDAKKyNkZWZpbmUgQ0ZHX0NSMDE4MiAweDEwCisjZGVmaW5lIENGR19DUjEwMDAgMHgyMAorI2RlZmluZSBDRkdfQ1IyNzAwIDB4MzAKKyNkZWZpbmUgUjFNU19TSElGVCAwCisjZGVmaW5lIFIyTVNfU0hJRlQgMgorI2RlZmluZSBSMU1TX01BU0sgKDB4MDEgPDwgKFIxTVNfU0hJRlQpKQorI2RlZmluZSBSMk1TX01BU0sgKDB4MDEgPDwgKFIyTVNfU0hJRlQpKQorI2RlZmluZSBSMURGX1NISUZUIDEKKyNkZWZpbmUgUjJERl9TSElGVCAyCisjZGVmaW5lIFIxREZfTUFTSyAoMHgwMSA8PCAoUjFERl9TSElGVCkpCisjZGVmaW5lIFIyREZfTUFTSyAoMHgwMSA8PCAoUjJERl9TSElGVCkpCisjZGVmaW5lIFIxRkVfTUFTSyAweDAxCisjZGVmaW5lIFIyRkVfTUFTSyAweDA1CisjZGVmaW5lIFRUMV9TSElGVCAwCisjZGVmaW5lIFRUMl9TSElGVCA0CisjZGVmaW5lIFRUX09GRiAwCisjZGVmaW5lIFRUX09OIDEKKyNkZWZpbmUgVFRfTUFTSyA3CisjZGVmaW5lIE1BTlVGQUNUVVJFUl9JRCAweDAxCisjZGVmaW5lIERFRkFVTFRfUkVWSVNJT04gMHhBNAorCisvKiBDb252ZXJzaW9ucyBhbmQgdmFyaW91cyBtYWNyb3MgKi8KKyNkZWZpbmUgVEVNUF9GUk9NX1JFRyh2YWxfaCwgdmFsX2wpICgoKHZhbF9oKSAmIDB4ODAgPyAodmFsX2gpIC0gMHgxMDAgOiBcCisgICAgKHZhbF9oKSkgKiAxMDAwICsgKHZhbF9sKSAqIDEwMDAgLyAyNTYpCisKKy8qIEZ1bmN0aW9ucyBkZWNsYXJhdGlvbiAqLworc3RhdGljIGludCBsbTk1MjQxX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IGxtOTUyNDFfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsCisJCQkgIGludCBraW5kKTsKK3N0YXRpYyB2b2lkIGxtOTUyNDFfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CitzdGF0aWMgaW50IGxtOTUyNDFfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyBzdHJ1Y3QgbG05NTI0MV9kYXRhICpsbTk1MjQxX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKKworLyogRHJpdmVyIGRhdGEgKGNvbW1vbiB0byBhbGwgY2xpZW50cykgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsbTk1MjQxX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSAgID0gImxtOTUyNDEiLAorCX0sCisJLmF0dGFjaF9hZGFwdGVyID0gbG05NTI0MV9hdHRhY2hfYWRhcHRlciwKKwkuZGV0YWNoX2NsaWVudCAgPSBsbTk1MjQxX2RldGFjaF9jbGllbnQsCit9OworCisvKiBDbGllbnQgZGF0YSAoZWFjaCBjbGllbnQgZ2V0cyBpdHMgb3duKSAqLworc3RydWN0IGxtOTUyNDFfZGF0YSB7CisJc3RydWN0IGkyY19jbGllbnQgY2xpZW50OworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CisJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQsIHJhdGU7IC8qIGluIGppZmZpZXMgKi8KKwljaGFyIHZhbGlkOyAvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCisJLyogcmVnaXN0ZXJzIHZhbHVlcyAqLworCXU4IGxvY2FsX2gsIGxvY2FsX2w7IC8qIGxvY2FsICovCisJdTggcmVtb3RlMV9oLCByZW1vdGUxX2w7IC8qIHJlbW90ZTEgKi8KKwl1OCByZW1vdGUyX2gsIHJlbW90ZTJfbDsgLyogcmVtb3RlMiAqLworCXU4IGNvbmZpZywgbW9kZWwsIHRydXRoZXJtOworfTsKKworLyogU3lzZnMgc3R1ZmYgKi8KKyNkZWZpbmUgc2hvd190ZW1wKHZhbHVlKSBcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBcCisgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAoreyBcCisJc3RydWN0IGxtOTUyNDFfZGF0YSAqZGF0YSA9IGxtOTUyNDFfdXBkYXRlX2RldmljZShkZXYpOyBcCisJc25wcmludGYoYnVmLCBQQUdFX1NJWkUgLSAxLCAiJWRcbiIsIFwKKwkJVEVNUF9GUk9NX1JFRyhkYXRhLT52YWx1ZSMjX2gsIGRhdGEtPnZhbHVlIyNfbCkpOyBcCisJcmV0dXJuIHN0cmxlbihidWYpOyBcCit9CitzaG93X3RlbXAobG9jYWwpOworc2hvd190ZW1wKHJlbW90ZTEpOworc2hvd190ZW1wKHJlbW90ZTIpOworCitzdGF0aWMgc3NpemVfdCBzaG93X3JhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IGxtOTUyNDFfZGF0YSAqZGF0YSA9IGxtOTUyNDFfdXBkYXRlX2RldmljZShkZXYpOworCisJc25wcmludGYoYnVmLCBQQUdFX1NJWkUgLSAxLCAiJWx1XG4iLCAxMDAwICogZGF0YS0+cmF0ZSAvIEhaKTsKKwlyZXR1cm4gc3RybGVuKGJ1Zik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9yYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBsbTk1MjQxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJmRhdGEtPnJhdGUpOworCWRhdGEtPnJhdGUgPSBkYXRhLT5yYXRlICogSFogLyAxMDAwOworCisJcmV0dXJuIGNvdW50OworfQorCisjZGVmaW5lIHNob3dfdHlwZShmbGFnKSBcCitzdGF0aWMgc3NpemVfdCBzaG93X3R5cGUjI2ZsYWcoc3RydWN0IGRldmljZSAqZGV2LCBcCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAoreyBcCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsgXAorCXN0cnVjdCBsbTk1MjQxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAorXAorCXNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFIC0gMSwgXAorCQlkYXRhLT5tb2RlbCAmIFIjI2ZsYWcjI01TX01BU0sgPyAiMVxuIiA6ICIyXG4iKTsgXAorCXJldHVybiBzdHJsZW4oYnVmKTsgXAorfQorc2hvd190eXBlKDEpOworc2hvd190eXBlKDIpOworCisjZGVmaW5lIHNob3dfbWluKGZsYWcpIFwKK3N0YXRpYyBzc2l6ZV90IHNob3dfbWluIyNmbGFnKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7IFwKKwlzdHJ1Y3QgbG05NTI0MV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKK1wKKwlzbnByaW50ZihidWYsIFBBR0VfU0laRSAtIDEsIFwKKwkJZGF0YS0+Y29uZmlnICYgUiMjZmxhZyMjREZfTUFTSyA/CVwKKwkJIi0xMjcwMDBcbiIgOiAiMFxuIik7IFwKKwlyZXR1cm4gc3RybGVuKGJ1Zik7IFwKK30KK3Nob3dfbWluKDEpOworc2hvd19taW4oMik7CisKKyNkZWZpbmUgc2hvd19tYXgoZmxhZykgXAorc3RhdGljIHNzaXplX3Qgc2hvd19tYXgjI2ZsYWcoc3RydWN0IGRldmljZSAqZGV2LCBcCisgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAoreyBcCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsgXAorCXN0cnVjdCBsbTk1MjQxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAorXAorCXNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFIC0gMSwgXAorCQlkYXRhLT5jb25maWcgJiBSIyNmbGFnIyNERl9NQVNLID8gXAorCQkiMTI3MDAwXG4iIDogIjI1NTAwMFxuIik7IFwKKwlyZXR1cm4gc3RybGVuKGJ1Zik7IFwKK30KK3Nob3dfbWF4KDEpOworc2hvd19tYXgoMik7CisKKyNkZWZpbmUgc2V0X3R5cGUoZmxhZykgXAorc3RhdGljIHNzaXplX3Qgc2V0X3R5cGUjI2ZsYWcoc3RydWN0IGRldmljZSAqZGV2LCBcCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXAorCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKK3sgXAorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7IFwKKwlzdHJ1Y3QgbG05NTI0MV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKK1wKKwlsb25nIHZhbDsgXAorCXN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCk7IFwKK1wKKwlpZiAoKHZhbCA9PSAxKSB8fCAodmFsID09IDIpKSB7IFwKK1wKKwkJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCitcCisJCWRhdGEtPnRydXRoZXJtICY9IH4oVFRfTUFTSyA8PCBUVCMjZmxhZyMjX1NISUZUKTsgXAorCQlpZiAodmFsID09IDEpIHsgXAorCQkJZGF0YS0+bW9kZWwgfD0gUiMjZmxhZyMjTVNfTUFTSzsgXAorCQkJZGF0YS0+dHJ1dGhlcm0gfD0gKFRUX09OIDw8IFRUIyNmbGFnIyNfU0hJRlQpOyBcCisJCX0gXAorCQllbHNlIHsgXAorCQkJZGF0YS0+bW9kZWwgJj0gflIjI2ZsYWcjI01TX01BU0s7IFwKKwkJCWRhdGEtPnRydXRoZXJtIHw9IChUVF9PRkYgPDwgVFQjI2ZsYWcjI19TSElGVCk7IFwKKwkJfSBcCitcCisJCWRhdGEtPnZhbGlkID0gMDsgXAorXAorCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE05NTI0MV9SRUdfUldfUkVNT1RFX01PREVMLCBcCisJCQkJCSAgZGF0YS0+bW9kZWwpOyBcCisJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjQxX1JFR19SV19UUlVUSEVSTSwgXAorCQkJCQkgIGRhdGEtPnRydXRoZXJtKTsgXAorXAorCQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorXAorCX0gXAorCXJldHVybiBjb3VudDsgXAorfQorc2V0X3R5cGUoMSk7CitzZXRfdHlwZSgyKTsKKworI2RlZmluZSBzZXRfbWluKGZsYWcpIFwKK3N0YXRpYyBzc2l6ZV90IHNldF9taW4jI2ZsYWcoc3RydWN0IGRldmljZSAqZGV2LCBcCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KSBcCit7IFwKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOyBcCisJc3RydWN0IGxtOTUyNDFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOyBcCitcCisJbG9uZyB2YWw7IFwKKwlzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpOyBcCitcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCitcCisJaWYgKHZhbCA8IDApIFwKKwkJZGF0YS0+Y29uZmlnIHw9IFIjI2ZsYWcjI0RGX01BU0s7IFwKKwllbHNlIFwKKwkJZGF0YS0+Y29uZmlnICY9IH5SIyNmbGFnIyNERl9NQVNLOyBcCitcCisJZGF0YS0+dmFsaWQgPSAwOyBcCitcCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNOTUyNDFfUkVHX1JXX0NPTkZJRywgXAorCQlkYXRhLT5jb25maWcpOyBcCitcCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKK1wKKwlyZXR1cm4gY291bnQ7IFwKK30KK3NldF9taW4oMSk7CitzZXRfbWluKDIpOworCisjZGVmaW5lIHNldF9tYXgoZmxhZykgXAorc3RhdGljIHNzaXplX3Qgc2V0X21heCMjZmxhZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKK3sgXAorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7IFwKKwlzdHJ1Y3QgbG05NTI0MV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKK1wKKwlsb25nIHZhbDsgXAorCXN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCk7IFwKK1wKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKK1wKKwlpZiAodmFsIDw9IDEyNzAwMCkgXAorCQlkYXRhLT5jb25maWcgfD0gUiMjZmxhZyMjREZfTUFTSzsgXAorCWVsc2UgXAorCQlkYXRhLT5jb25maWcgJj0gflIjI2ZsYWcjI0RGX01BU0s7IFwKK1wKKwlkYXRhLT52YWxpZCA9IDA7IFwKK1wKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE05NTI0MV9SRUdfUldfQ09ORklHLCBcCisJCWRhdGEtPmNvbmZpZyk7IFwKK1wKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorXAorCXJldHVybiBjb3VudDsgXAorfQorc2V0X21heCgxKTsKK3NldF9tYXgoMik7CisKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd19sb2NhbCwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfcmVtb3RlMSwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHNob3dfcmVtb3RlMiwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDJfdHlwZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdHlwZTEsIHNldF90eXBlMSk7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDNfdHlwZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdHlwZTIsIHNldF90eXBlMik7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDJfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19taW4xLCBzZXRfbWluMSk7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDNfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19taW4yLCBzZXRfbWluMik7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDJfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19tYXgxLCBzZXRfbWF4MSk7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcDNfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19tYXgyLCBzZXRfbWF4Mik7CitzdGF0aWMgREVWSUNFX0FUVFIocmF0ZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcmF0ZSwgc2V0X3JhdGUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG05NTI0MV9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAzX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX3R5cGUuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDNfdHlwZS5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9taW4uYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDNfbWluLmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19tYXguYXR0ciwKKwkmZGV2X2F0dHJfcmF0ZS5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxtOTUyNDFfZ3JvdXAgPSB7CisJLmF0dHJzID0gbG05NTI0MV9hdHRyaWJ1dGVzLAorfTsKKworLyogSW5pdC9leGl0IGNvZGUgKi8KK3N0YXRpYyBpbnQgbG05NTI0MV9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaWYgKCEoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfSFdNT04pKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGxtOTUyNDFfZGV0ZWN0KTsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gZG9lcyBtb3JlIHRoYW4ganVzdCBkZXRlY3Rpb24uIElmIGRldGVjdGlvbgorICogc3VjY2VlZHMsIGl0IGFsc28gcmVnaXN0ZXJzIHRoZSBuZXcgY2hpcC4KKyAqLworc3RhdGljIGludCBsbTk1MjQxX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudDsKKwlzdHJ1Y3QgbG05NTI0MV9kYXRhICpkYXRhOworCWludCBlcnIgPSAwOworCWNvbnN0IGNoYXIgKm5hbWUgPSAiIjsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJZ290byBleGl0OworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsbTk1MjQxX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCS8qIFRoZSBjb21tb24gSTJDIGNsaWVudCBkYXRhIGlzIHBsYWNlZCByaWdodCBiZWZvcmUgdGhlCisJICAgTE05NTI0MS1zcGVjaWZpYyBkYXRhLiAqLworCW5ld19jbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKKwluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKwluZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwluZXdfY2xpZW50LT5kcml2ZXIgPSAmbG05NTI0MV9kcml2ZXI7CisJbmV3X2NsaWVudC0+ZmxhZ3MgPSAwOworCisJLyoKKwkgKiBOb3cgd2UgZG8gdGhlIHJlbWFpbmluZyBkZXRlY3Rpb24uIEEgbmVnYXRpdmUga2luZCBtZWFucyB0aGF0CisJICogdGhlIGRyaXZlciB3YXMgbG9hZGVkIHdpdGggbm8gZm9yY2UgcGFyYW1ldGVyIChkZWZhdWx0KSwgc28gd2UKKwkgKiBtdXN0IGJvdGggZGV0ZWN0IGFuZCBpZGVudGlmeSB0aGUgY2hpcC4gQSB6ZXJvIGtpbmQgbWVhbnMgdGhhdAorCSAqIHRoZSBkcml2ZXIgd2FzIGxvYWRlZCB3aXRoIHRoZSBmb3JjZSBwYXJhbWV0ZXIsIHRoZSBkZXRlY3Rpb24KKwkgKiBzdGVwIHNoYWxsIGJlIHNraXBwZWQuIEEgcG9zaXRpdmUga2luZCBtZWFucyB0aGF0IHRoZSBkcml2ZXIKKwkgKiB3YXMgbG9hZGVkIHdpdGggdGhlIGZvcmNlIHBhcmFtZXRlciBhbmQgYSBnaXZlbiBraW5kIG9mIGNoaXAgaXMKKwkgKiByZXF1ZXN0ZWQsIHNvIGJvdGggdGhlIGRldGVjdGlvbiBhbmQgdGhlIGlkZW50aWZpY2F0aW9uIHN0ZXBzCisJICogYXJlIHNraXBwZWQuCisJICovCisJaWYgKGtpbmQgPCAwKSB7CS8qIGRldGVjdGlvbiAqLworCQlpZiAoKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCBMTTk1MjQxX1JFR19SX01BTl9JRCkKKwkJICAgICAhPSBNQU5VRkFDVFVSRVJfSUQpCisJCXx8IChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgTE05NTI0MV9SRUdfUl9DSElQX0lEKQorCQkgICAgPCBERUZBVUxUX1JFVklTSU9OKSkgeworCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LAorCQkJCSJMTTk1MjQxIGRldGVjdGlvbiBmYWlsZWQgYXQgMHglMDJ4LlxuIiwKKwkJCQlhZGRyZXNzKTsKKwkJCWdvdG8gZXhpdF9mcmVlOworCQl9CisJfQorCisJaWYgKGtpbmQgPD0gMCkgeyAvKiBpZGVudGlmaWNhdGlvbiAqLworCQlpZiAoKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShuZXdfY2xpZW50LCBMTTk1MjQxX1JFR19SX01BTl9JRCkKKwkJICAgICA9PSBNQU5VRkFDVFVSRVJfSUQpCisJCSYmIChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEobmV3X2NsaWVudCwgTE05NTI0MV9SRUdfUl9DSElQX0lEKQorCQkgICAgPj0gREVGQVVMVF9SRVZJU0lPTikpIHsKKworCQkJa2luZCA9IGxtOTUyNDE7CisKKwkJCWlmIChraW5kIDw9IDApIHsgLyogaWRlbnRpZmljYXRpb24gZmFpbGVkICovCisJCQkJZGV2X2luZm8oJmFkYXB0ZXItPmRldiwgIlVuc3VwcG9ydGVkIGNoaXBcbiIpOworCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJfQorCQl9CisJfQorCisJaWYgKGtpbmQgPT0gbG05NTI0MSkKKwkJbmFtZSA9ICJsbTk1MjQxIjsKKworCS8qIFdlIGNhbiBmaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyAqLworCXN0cmxjcHkobmV3X2NsaWVudC0+bmFtZSwgbmFtZSwgSTJDX05BTUVfU0laRSk7CisJZGF0YS0+dmFsaWQgPSAwOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCS8qIFRlbGwgdGhlIEkyQyBsYXllciBhIG5ldyBjbGllbnQgaGFzIGFycml2ZWQgKi8KKwllcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCS8qIEluaXRpYWxpemUgdGhlIExNOTUyNDEgY2hpcCAqLworCWxtOTUyNDFfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTk1MjQxX2dyb3VwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZGV0YWNoOworCisJZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOworCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisJfQorCisJcmV0dXJuIDA7CisKK2V4aXRfcmVtb3ZlX2ZpbGVzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTk1MjQxX2dyb3VwKTsKK2V4aXRfZGV0YWNoOgorCWkyY19kZXRhY2hfY2xpZW50KG5ld19jbGllbnQpOworZXhpdF9mcmVlOgorCWtmcmVlKGRhdGEpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBsbTk1MjQxX2luaXRfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGxtOTUyNDFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGF0YS0+cmF0ZSA9IEhaOyAgICAvKiAxIHNlYyBkZWZhdWx0ICovCisJZGF0YS0+dmFsaWQgPSAwOworCWRhdGEtPmNvbmZpZyA9IENGR19DUjAwNzY7CisJZGF0YS0+bW9kZWwgPSAwOworCWRhdGEtPnRydXRoZXJtID0gKFRUX09GRiA8PCBUVDFfU0hJRlQpIHwgKFRUX09GRiA8PCBUVDJfU0hJRlQpOworCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNOTUyNDFfUkVHX1JXX0NPTkZJRywKKwkJCQkgIGRhdGEtPmNvbmZpZyk7CisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNOTUyNDFfUkVHX1JXX1JFTV9GSUxURVIsCisJCQkJICBSMUZFX01BU0sgfCBSMkZFX01BU0spOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTk1MjQxX1JFR19SV19UUlVUSEVSTSwKKwkJCQkgIGRhdGEtPnRydXRoZXJtKTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE05NTI0MV9SRUdfUldfUkVNT1RFX01PREVMLAorCQkJCSAgZGF0YS0+bW9kZWwpOworfQorCitzdGF0aWMgaW50IGxtOTUyNDFfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBsbTk1MjQxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgZXJyOworCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTk1MjQxX2dyb3VwKTsKKworCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWtmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGxtOTUyNDFfZGF0YSAqbG05NTI0MV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBsbTk1MjQxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIGRhdGEtPnJhdGUpIHx8CisJICAgICFkYXRhLT52YWxpZCkgeworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlVwZGF0aW5nIGxtOTUyNDEgZGF0YS5cbiIpOworCQlkYXRhLT5sb2NhbF9oID0KKwkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkgTE05NTI0MV9SRUdfUl9MT0NBTF9URU1QSCk7CisJCWRhdGEtPmxvY2FsX2wgPQorCQkJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCSBMTTk1MjQxX1JFR19SX0xPQ0FMX1RFTVBMKTsKKwkJZGF0YS0+cmVtb3RlMV9oID0KKwkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkgTE05NTI0MV9SRUdfUl9SRU1PVEUxX1RFTVBIKTsKKwkJZGF0YS0+cmVtb3RlMV9sID0KKwkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkgTE05NTI0MV9SRUdfUl9SRU1PVEUxX1RFTVBMKTsKKwkJZGF0YS0+cmVtb3RlMl9oID0KKwkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkgTE05NTI0MV9SRUdfUl9SRU1PVEUyX1RFTVBIKTsKKwkJZGF0YS0+cmVtb3RlMl9sID0KKwkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkgTE05NTI0MV9SRUdfUl9SRU1PVEUyX1RFTVBMKTsKKwkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKKwkJZGF0YS0+dmFsaWQgPSAxOworCX0KKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNlbnNvcnNfbG05NTI0MV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZsbTk1MjQxX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZW5zb3JzX2xtOTUyNDFfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZsbTk1MjQxX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIkRhdmlkZSBSaXp6byA8ZWxwYS1yaXp6b0BnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxNOTUyNDEgc2Vuc29yIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChzZW5zb3JzX2xtOTUyNDFfaW5pdCk7Cittb2R1bGVfZXhpdChzZW5zb3JzX2xtOTUyNDFfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYyBiL2RyaXZlcnMvaHdtb24vbHRjNDIxNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzODZlMmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2x0YzQyMTUuYwpAQCAtMCwwICsxLDM2NCBAQAorLyoKKyAqIERyaXZlciBmb3IgTGluZWFyIFRlY2hub2xvZ3kgTFRDNDIxNSBJMkMgSG90IFN3YXAgQ29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJcmEgVy4gU255ZGVyIDxpd3NAb3Zyby5jYWx0ZWNoLmVkdT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBEYXRhc2hlZXQ6CisgKiBodHRwOi8vd3d3LmxpbmVhci5jb20vcGMvZG93bmxvYWREb2N1bWVudC5kbz9uYXZJZD1IMCxDMSxDMTAwMyxDMTAwNixDMTE2MyxQMTc1NzIsRDEyNjk3CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQ0xJRU5UX0VORCB9OworCisvKiBJbnNtb2QgcGFyYW1ldGVycyAqLworSTJDX0NMSUVOVF9JTlNNT0RfMShsdGM0MjE1KTsKKworLyogSGVyZSBhcmUgbmFtZXMgb2YgdGhlIGNoaXAncyByZWdpc3RlcnMgKGEuay5hLiBjb21tYW5kcykgKi8KK2VudW0gbHRjNDIxNV9jbWQgeworCUxUQzQyMTVfQ09OVFJPTAkJCT0gMHgwMCwgLyogcncgKi8KKwlMVEM0MjE1X0FMRVJUCQkJPSAweDAxLCAvKiBydyAqLworCUxUQzQyMTVfU1RBVFVTCQkJPSAweDAyLCAvKiBybyAqLworCUxUQzQyMTVfRkFVTFQJCQk9IDB4MDMsIC8qIHJ3ICovCisJTFRDNDIxNV9TRU5TRQkJCT0gMHgwNCwgLyogcncgKi8KKwlMVEM0MjE1X1NPVVJDRQkJCT0gMHgwNSwgLyogcncgKi8KKwlMVEM0MjE1X0FESU4JCQk9IDB4MDYsIC8qIHJ3ICovCit9OworCitzdHJ1Y3QgbHRjNDIxNV9kYXRhIHsKKwlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CisJYm9vbCB2YWxpZDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogaW4gamlmZmllcyAqLworCisJLyogUmVnaXN0ZXJzICovCisJdTggcmVnc1s3XTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbHRjNDIxNV9kYXRhICpsdGM0MjE1X3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGx0YzQyMTVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXMzMiB2YWw7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwkvKiBUaGUgY2hpcCdzIEEvRCB1cGRhdGVzIDEwIHRpbWVzIHBlciBzZWNvbmQgKi8KKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiAvIDEwKSB8fCAhZGF0YS0+dmFsaWQpIHsKKworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlN0YXJ0aW5nIGx0YzQyMTUgdXBkYXRlXG4iKTsKKworCQkvKiBSZWFkIGFsbCByZWdpc3RlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+cmVncyk7IGkrKykgeworCQkJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSk7CisJCQlpZiAodW5saWtlbHkodmFsIDwgMCkpCisJCQkJZGF0YS0+cmVnc1tpXSA9IDA7CisJCQllbHNlCisJCQkJZGF0YS0+cmVnc1tpXSA9IHZhbDsKKwkJfQorCisJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJCWRhdGEtPnZhbGlkID0gMTsKKwl9CisKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBkYXRhOworfQorCisvKiBSZXR1cm4gdGhlIHZvbHRhZ2UgZnJvbSB0aGUgZ2l2ZW4gcmVnaXN0ZXIgaW4gbWlsbGl2b2x0cyAqLworc3RhdGljIGludCBsdGM0MjE1X2dldF92b2x0YWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgdTggcmVnKQoreworCXN0cnVjdCBsdGM0MjE1X2RhdGEgKmRhdGEgPSBsdGM0MjE1X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwljb25zdCB1OCByZWd2YWwgPSBkYXRhLT5yZWdzW3JlZ107CisJdTMyIHZvbHRhZ2UgPSAwOworCisJc3dpdGNoIChyZWcpIHsKKwljYXNlIExUQzQyMTVfU0VOU0U6CisJCS8qIDE1MSB1ViBwZXIgaW5jcmVtZW50ICovCisJCXZvbHRhZ2UgPSByZWd2YWwgKiAxNTEgLyAxMDAwOworCQlicmVhazsKKwljYXNlIExUQzQyMTVfU09VUkNFOgorCQkvKiA2MC41IG1WIHBlciBpbmNyZW1lbnQgKi8KKwkJdm9sdGFnZSA9IHJlZ3ZhbCAqIDYwNSAvIDEwOworCQlicmVhazsKKwljYXNlIExUQzQyMTVfQURJTjoKKwkJLyogVGhlIEFESU4gaW5wdXQgaXMgZGl2aWRlZCBieSAxMi41LCBhbmQgaGFzIDQuODIgbVYKKwkJICogcGVyIGluY3JlbWVudCwgc28gd2UgaGF2ZSB0aGUgYWRkaXRpb25hbCBtdWx0aXBseSAqLworCQl2b2x0YWdlID0gcmVndmFsICogNDgyICogMTI1IC8gMTAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBkZXZlbG9wZXIgbWVzc2VkIHVwICovCisJCVdBUk5fT05fT05DRSgxKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHZvbHRhZ2U7Cit9CisKKy8qIFJldHVybiB0aGUgY3VycmVudCBmcm9tIHRoZSBzZW5zZSByZXNpc3RvciBpbiBtQSAqLworc3RhdGljIHVuc2lnbmVkIGludCBsdGM0MjE1X2dldF9jdXJyZW50KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbHRjNDIxNV9kYXRhICpkYXRhID0gbHRjNDIxNV91cGRhdGVfZGV2aWNlKGRldik7CisKKwkvKiBUaGUgc3RyYW5nZSBsb29raW5nIGNvbnZlcnNpb25zIHRoYXQgZm9sbG93IGFyZSBmaXhlZC1wb2ludAorCSAqIG1hdGgsIHNpbmNlIHdlIGNhbm5vdCBkbyBmbG9hdGluZyBwb2ludCBpbiB0aGUga2VybmVsLgorCSAqCisJICogU3RlcCAxOiBjb252ZXJ0IHNlbnNlIHJlZ2lzdGVyIHRvIG1pY3JvVm9sdHMKKwkgKiBTdGVwIDI6IGNvbnZlcnQgdm9sdGFnZSB0byBtaWxsaUFtcGVyZXMKKwkgKgorCSAqIElmIHlvdSBwbGF5IGFyb3VuZCB3aXRoIHRoZSBWPUlSIGVxdWF0aW9uLCB5b3UgY29tZSB1cCB3aXRoCisJICogdGhlIGZvbGxvd2luZzogWCB1ViAvIFkgbU9obSA9PSBaIG1BCisJICoKKwkgKiBXaXRoIHRoZSByZXNpc3RvcnMgdGhhdCBhcmUgZnJhY3Rpb25zIG9mIGEgbWlsbGlPaG0sIHdlIG11bHRpcGx5CisJICogdGhlIHZvbHRhZ2UgYW5kIHJlc2lzdGFuY2UgYnkgMTAsIHRvIHNoaWZ0IHRoZSBkZWNpbWFsIHBvaW50LgorCSAqIE5vdyB3ZSBjYW4gdXNlIHRoZSBub3JtYWwgZGl2aXNpb24gb3BlcmF0b3IgYWdhaW4uCisJICovCisKKwkvKiBDYWxjdWxhdGUgdm9sdGFnZSBpbiBtaWNyb1ZvbHRzICgxNTEgdVYgcGVyIGluY3JlbWVudCkgKi8KKwljb25zdCB1bnNpZ25lZCBpbnQgdm9sdGFnZSA9IGRhdGEtPnJlZ3NbTFRDNDIxNV9TRU5TRV0gKiAxNTE7CisKKwkvKiBDYWxjdWxhdGUgY3VycmVudCBpbiBtaWxsaUFtcGVyZXMgKDQgbWlsbGlPaG0gc2Vuc2UgcmVzaXN0b3IpICovCisJY29uc3QgdW5zaWduZWQgaW50IGN1cnIgPSB2b2x0YWdlIC8gNDsKKworCXJldHVybiBjdXJyOworfQorCitzdGF0aWMgc3NpemVfdCBsdGM0MjE1X3Nob3dfdm9sdGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwKKwkJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkYSk7CisJY29uc3QgaW50IHZvbHRhZ2UgPSBsdGM0MjE1X2dldF92b2x0YWdlKGRldiwgYXR0ci0+aW5kZXgpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHZvbHRhZ2UpOworfQorCitzdGF0aWMgc3NpemVfdCBsdGM0MjE1X3Nob3dfY3VycmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYSwKKwkJCQkgICAgY2hhciAqYnVmKQoreworCWNvbnN0IHVuc2lnbmVkIGludCBjdXJyID0gbHRjNDIxNV9nZXRfY3VycmVudChkZXYpOworCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIGN1cnIpOworfQorCitzdGF0aWMgc3NpemVfdCBsdGM0MjE1X3Nob3dfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAorCQkJCSAgY2hhciAqYnVmKQoreworCWNvbnN0IHVuc2lnbmVkIGludCBjdXJyID0gbHRjNDIxNV9nZXRfY3VycmVudChkZXYpOworCWNvbnN0IGludCBvdXRwdXRfdm9sdGFnZSA9IGx0YzQyMTVfZ2V0X3ZvbHRhZ2UoZGV2LCBMVEM0MjE1X0FESU4pOworCisJLyogY3VycmVudCBpbiBtQSAqIHZvbHRhZ2UgaW4gbVYgPT0gcG93ZXIgaW4gdVcgKi8KKwljb25zdCB1bnNpZ25lZCBpbnQgcG93ZXIgPSBhYnMob3V0cHV0X3ZvbHRhZ2UgKiBjdXJyKTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCBwb3dlcik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGx0YzQyMTVfc2hvd19hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAorCQkJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGRhKTsKKwlzdHJ1Y3QgbHRjNDIxNV9kYXRhICpkYXRhID0gbHRjNDIxNV91cGRhdGVfZGV2aWNlKGRldik7CisJY29uc3QgdTggcmVnID0gZGF0YS0+cmVnc1thdHRyLT5pbmRleF07CisJY29uc3QgdTMyIG1hc2sgPSBhdHRyLT5ucjsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCAocmVnICYgbWFzaykgPyAxIDogMCk7Cit9CisKKy8qIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCBiZWxvdyBpbiBjb25zdHJ1Y3RpbmcgZGV2aWNlIGF0dHJpYnV0ZSBvYmplY3RzCisgKiBmb3IgdXNlIHdpdGggc3lzZnNfY3JlYXRlX2dyb3VwKCkgdG8gbWFrZSBhIHN5c2ZzIGRldmljZSBmaWxlCisgKiBmb3IgZWFjaCByZWdpc3Rlci4KKyAqLworCisjZGVmaW5lIExUQzQyMTVfVk9MVEFHRShuYW1lLCBsdGM0MjE1X2NtZF9pZHgpIFwKKwlzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIFwKKwlsdGM0MjE1X3Nob3dfdm9sdGFnZSwgTlVMTCwgbHRjNDIxNV9jbWRfaWR4KQorCisjZGVmaW5lIExUQzQyMTVfQ1VSUkVOVChuYW1lKSBcCisJc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBcCisJbHRjNDIxNV9zaG93X2N1cnJlbnQsIE5VTEwsIDApOworCisjZGVmaW5lIExUQzQyMTVfUE9XRVIobmFtZSkgXAorCXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgXAorCWx0YzQyMTVfc2hvd19wb3dlciwgTlVMTCwgMCk7CisKKyNkZWZpbmUgTFRDNDIxNV9BTEFSTShuYW1lLCBtYXNrLCByZWcpIFwKKwlzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIobmFtZSwgU19JUlVHTywgXAorCWx0YzQyMTVfc2hvd19hbGFybSwgTlVMTCwgKG1hc2spLCByZWcpCisKKy8qIENvbnN0cnVjdCBhIHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHN0cnVjdHVyZSBmb3IgZWFjaCByZWdpc3RlciAqLworCisvKiBDdXJyZW50ICovCitMVEM0MjE1X0NVUlJFTlQoY3VycjFfaW5wdXQpOworTFRDNDIxNV9BTEFSTShjdXJyMV9tYXhfYWxhcm0sCSgxIDw8IDIpLAlMVEM0MjE1X1NUQVRVUyk7CisKKy8qIFBvd2VyICh2aXJ0dWFsKSAqLworTFRDNDIxNV9QT1dFUihwb3dlcjFfaW5wdXQpOworTFRDNDIxNV9BTEFSTShwb3dlcjFfYWxhcm0sCSgxIDw8IDMpLAlMVEM0MjE1X1NUQVRVUyk7CisKKy8qIElucHV0IFZvbHRhZ2UgKi8KK0xUQzQyMTVfVk9MVEFHRShpbjFfaW5wdXQsCQkJTFRDNDIxNV9BRElOKTsKK0xUQzQyMTVfQUxBUk0oaW4xX21heF9hbGFybSwJKDEgPDwgMCksCUxUQzQyMTVfU1RBVFVTKTsKK0xUQzQyMTVfQUxBUk0oaW4xX21pbl9hbGFybSwJKDEgPDwgMSksCUxUQzQyMTVfU1RBVFVTKTsKKworLyogT3V0cHV0IFZvbHRhZ2UgKi8KK0xUQzQyMTVfVk9MVEFHRShpbjJfaW5wdXQsCQkJTFRDNDIxNV9TT1VSQ0UpOworCisvKiBGaW5hbGx5LCBjb25zdHJ1Y3QgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gbWVtYmVycyBvZiB0aGUgYWJvdmUgb2JqZWN0cywKKyAqIGFzIHJlcXVpcmVkIGZvciBzeXNmc19jcmVhdGVfZ3JvdXAoKQorICovCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHRjNDIxNV9hdHRyaWJ1dGVzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9jdXJyMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfY3VycjFfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3Bvd2VyMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcG93ZXIxX2FsYXJtLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKworCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsdGM0MjE1X2dyb3VwID0geworCS5hdHRycyA9IGx0YzQyMTVfYXR0cmlidXRlcywKK307CisKK3N0YXRpYyBpbnQgbHRjNDIxNV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgbHRjNDIxNV9kYXRhICpkYXRhOworCWludCByZXQ7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfa3phbGxvYzsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBMVEM0MjE1IGNoaXAgKi8KKwkvKiBUT0RPICovCisKKwkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmx0YzQyMTVfZ3JvdXApOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3N5c2ZzX2NyZWF0ZV9ncm91cDsKKworCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOworCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgeworCQlyZXQgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7CisJCWdvdG8gb3V0X2h3bW9uX2RldmljZV9yZWdpc3RlcjsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2h3bW9uX2RldmljZV9yZWdpc3RlcjoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsdGM0MjE1X2dyb3VwKTsKK291dF9zeXNmc19jcmVhdGVfZ3JvdXA6CisJa2ZyZWUoZGF0YSk7CitvdXRfa3phbGxvYzoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGx0YzQyMTVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGx0YzQyMTVfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsdGM0MjE1X2dyb3VwKTsKKworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHRjNDIxNV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgaW50IGtpbmQsCisJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGtpbmQgPCAwKSB7CQkvKiBwcm9iZWQgZGV0ZWN0aW9uIC0gY2hlY2sgdGhlIGNoaXAgdHlwZSAqLworCQlzMzIgdjsJCS8qIDggYml0cyBmcm9tIHRoZSBjaGlwLCBvciAtRVJSTk8gKi8KKworCQkvKgorCQkgKiBSZWdpc3RlciAweDAxIGJpdCBiNyBpcyByZXNlcnZlZCwgZXhwZWN0IDAKKwkJICogUmVnaXN0ZXIgMHgwMyBiaXQgYjYgYW5kIGI3IGFyZSByZXNlcnZlZCwgZXhwZWN0IDAKKwkJICovCisJCXYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBMVEM0MjE1X0FMRVJUKTsKKwkJaWYgKHYgPCAwIHx8ICh2ICYgKDEgPDwgNykpICE9IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQl2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTFRDNDIxNV9GQVVMVCk7CisJCWlmICh2IDwgMCB8fCAodiAmICgoMSA8PCA2KSB8ICgxIDw8IDcpKSkgIT0gMCkKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzdHJsY3B5KGluZm8tPnR5cGUsICJsdGM0MjE1IiwgSTJDX05BTUVfU0laRSk7CisJZGV2X2luZm8oJmFkYXB0ZXItPmRldiwgImx0YzQyMTUgJXMgYXQgYWRkcmVzcyAweCUwMnhcbiIsCisJCQlraW5kIDwgMCA/ICJwcm9iZWQiIDogImZvcmNlZCIsCisJCQljbGllbnQtPmFkZHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBsdGM0MjE1X2lkW10gPSB7CisJeyAibHRjNDIxNSIsIGx0YzQyMTUgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbHRjNDIxNV9pZCk7CisKKy8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBsdGM0MjE1X2RyaXZlciA9IHsKKwkuY2xhc3MJCT0gSTJDX0NMQVNTX0hXTU9OLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImx0YzQyMTUiLAorCX0sCisJLnByb2JlCQk9IGx0YzQyMTVfcHJvYmUsCisJLnJlbW92ZQkJPSBsdGM0MjE1X3JlbW92ZSwKKwkuaWRfdGFibGUJPSBsdGM0MjE1X2lkLAorCS5kZXRlY3QJCT0gbHRjNDIxNV9kZXRlY3QsCisJLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBsdGM0MjE1X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmx0YzQyMTVfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGx0YzQyMTVfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZsdGM0MjE1X2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIklyYSBXLiBTbnlkZXIgPGl3c0BvdnJvLmNhbHRlY2guZWR1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMVEM0MjE1IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdChsdGM0MjE1X2luaXQpOworbW9kdWxlX2V4aXQobHRjNDIxNV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IDY0MGM5OTIuLmNmMDY0OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL0tjb25maWcKKysrIGIvZHJpdmVycy9pZGUvS2NvbmZpZwpAQCAtMjIyLDcgKzIyMiw4IEBACiAKIGNvbmZpZyBJREVfR0VORVJJQwogCXRyaXN0YXRlICJnZW5lcmljL2RlZmF1bHQgSURFIGNoaXBzZXQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFMUEhBIHx8IFg4NiB8fCBJQTY0IHx8IE0zMlIgfHwgTUlQUworCWRlcGVuZHMgb24gQUxQSEEgfHwgWDg2IHx8IElBNjQgfHwgTTMyUiB8fCBNSVBTIHx8IEFSQ0hfUlBDIHx8IEFSQ0hfU0hBUksKKwlkZWZhdWx0IEFSTSAmJiAoQVJDSF9SUEMgfHwgQVJDSF9TSEFSSykKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBnZW5lcmljIElERSBkcml2ZXIuICBUaGlzIGRyaXZlciBhdHRhY2hlcyB0byB0aGUKIAkgIGZpeGVkIGxlZ2FjeSBwb3J0cyAoZS5nLiBvbiBQQ3MgMHgxZjAvMHgxNzAsIDB4MWU4LzB4MTY4IGFuZApAQCAtNjgwLDcgKzY4MSw3IEBACiAjIFRPRE86IEJMS19ERVZfSURFRE1BX1BDSSAtPiBCTEtfREVWX0lERURNQV9TRkYKIGNvbmZpZyBCTEtfREVWX0lERV9QTUFDCiAJdHJpc3RhdGUgIlBvd2VyTWFjIG9uLWJvYXJkIElERSBzdXBwb3J0IgotCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgSURFPXkKKwlkZXBlbmRzIG9uIFBQQ19QTUFDCiAJc2VsZWN0IElERV9USU1JTkdTCiAJc2VsZWN0IEJMS19ERVZfSURFRE1BX1BDSQogCWhlbHAKQEAgLTczMSwxMSArNzMyLDYgQEAKIAlkZXBlbmRzIG9uIEFSTSAmJiBBUkNIX0FUOTEgJiYgIUFSQ0hfQVQ5MVJNOTIwMCAmJiAhQVJDSF9BVDkxWDQwCiAJc2VsZWN0IElERV9USU1JTkdTCiAKLWNvbmZpZyBJREVfQVJNCi0JdHJpc3RhdGUgIkFSTSBJREUgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEFSTSAmJiAoQVJDSF9SUEMgfHwgQVJDSF9TSEFSSykKLQlkZWZhdWx0IHkKLQogY29uZmlnIEJMS19ERVZfSURFX0lDU0lERQogCXRyaXN0YXRlICJJQ1MgSURFIGludGVyZmFjZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJNICYmIEFSQ0hfQUNPUk4KQEAgLTc3NCwyOCArNzcwLDIxIEBACiAJICBUaGlzIGluY2x1ZGVzIG9uLWJvYXJkIElERSBpbnRlcmZhY2VzIG9uIHNvbWUgQW1pZ2EgbW9kZWxzIChBNjAwLAogCSAgQTEyMDAsIEE0MDAwLCBhbmQgQTQwMDBUKSwgYW5kIElERSBpbnRlcmZhY2VzIG9uIHRoZSBab3JybyBleHBhbnNpb24KIAkgIGJ1cyAoTS1UZWNoIEUtTWF0cml4IDUzMCBleHBhbnNpb24gY2FyZCkuCi0JICBTYXkgWSBpZiB5b3UgaGF2ZSBhbiBBbWlnYSB3aXRoIGEgR2F5bGUgSURFIGludGVyZmFjZSBhbmQgd2FudCB0byB1c2UKLQkgIElERSBkZXZpY2VzIChoYXJkIGRpc2tzLCBDRC1ST00gZHJpdmVzLCBldGMuKSB0aGF0IGFyZSBjb25uZWN0ZWQgdG8KLQkgIGl0LgotCSAgTm90ZSB0aGF0IHlvdSBhbHNvIGhhdmUgdG8gZW5hYmxlIFpvcnJvIGJ1cyBzdXBwb3J0IGlmIHlvdSB3YW50IHRvCi0JICB1c2UgR2F5bGUgSURFIGludGVyZmFjZXMgb24gdGhlIFpvcnJvIGV4cGFuc2lvbiBidXMuCiAKLWNvbmZpZyBCTEtfREVWX0lERURPVUJMRVIKLQlib29sICJBbWlnYSBJREUgRG91YmxlciBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gQkxLX0RFVl9HQVlMRSAmJiBFWFBFUklNRU5UQUwKLQktLS1oZWxwLS0tCi0JICBUaGlzIGZlYXR1cmUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHNvLWNhbGxlZCBgSURFIGRvdWJsZXJzJyAobWFkZQorCSAgSXQgYWxzbyBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgc28tY2FsbGVkIGBJREUgZG91YmxlcnMnIChtYWRlCiAJICBieSB2YXJpb3VzIG1hbnVmYWN0dXJlcnMsIGUuZy4gRXlldGVjaCkgdGhhdCBjYW4gYmUgY29ubmVjdGVkIHRvCiAJICB0aGUgb24tYm9hcmQgSURFIGludGVyZmFjZSBvZiBzb21lIEFtaWdhIG1vZGVscy4gVXNpbmcgc3VjaCBhbiBJREUKIAkgIGRvdWJsZXIsIHlvdSBjYW4gY29ubmVjdCB1cCB0byBmb3VyIGluc3RlYWQgb2YgdHdvIElERSBkZXZpY2VzIHRvCi0JICB0aGUgQW1pZ2EncyBvbi1ib2FyZCBJREUgaW50ZXJmYWNlLgotCi0JICBOb3RlIHRoYXQgdGhlIG5vcm1hbCBBbWlnYSBHYXlsZSBJREUgZHJpdmVyIG1heSBub3Qgd29yayBjb3JyZWN0bHkKLQkgIGlmIHlvdSBoYXZlIGFuIElERSBkb3VibGVyIGFuZCBkb24ndCBlbmFibGUgdGhpcyBmZWF0dXJlIQotCi0JICBTYXkgWSBpZiB5b3UgaGF2ZSBhbiBJREUgZG91Ymxlci4gIFRoZSBmZWF0dXJlIGlzIGVuYWJsZWQgYXQga2VybmVsCisJICB0aGUgQW1pZ2EncyBvbi1ib2FyZCBJREUgaW50ZXJmYWNlLiBUaGUgZmVhdHVyZSBpcyBlbmFibGVkIGF0IGtlcm5lbAogCSAgcnVudGltZSB1c2luZyB0aGUgImdheWxlLmRvdWJsZXIiIGtlcm5lbCBib290IHBhcmFtZXRlci4KIAorCSAgU2F5IFkgaWYgeW91IGhhdmUgYW4gQW1pZ2Egd2l0aCBhIEdheWxlIElERSBpbnRlcmZhY2UgYW5kIHdhbnQgdG8gdXNlCisJICBJREUgZGV2aWNlcyAoaGFyZCBkaXNrcywgQ0QtUk9NIGRyaXZlcywgZXRjLikgdGhhdCBhcmUgY29ubmVjdGVkIHRvCisJICBpdC4KKworCSAgTm90ZSB0aGF0IHlvdSBhbHNvIGhhdmUgdG8gZW5hYmxlIFpvcnJvIGJ1cyBzdXBwb3J0IGlmIHlvdSB3YW50IHRvCisJICB1c2UgR2F5bGUgSURFIGludGVyZmFjZXMgb24gdGhlIFpvcnJvIGV4cGFuc2lvbiBidXMuCisKIGNvbmZpZyBCTEtfREVWX0JVRERIQQogCXRyaXN0YXRlICJCdWRkaGEvQ2F0d2Vhc2VsL1gtU3VyZiBJREUgaW50ZXJmYWNlIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBaT1JSTyAmJiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKaW5kZXggOWI0YmJlMS4uODFkZjkyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKQEAgLTIxLDggKzIxLDYgQEAKIAogb2JqLSQoQ09ORklHX0lERSkJCQkrPSBpZGUtY29yZS5vCiAKLW9iai0kKENPTkZJR19JREVfQVJNKQkJCSs9IGlkZV9hcm0ubwotCiBvYmotJChDT05GSUdfQkxLX0RFVl9BTEkxNFhYKQkJKz0gYWxpMTR4eC5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9VTUM4NjcyKQkJKz0gdW1jODY3Mi5vCiBvYmotJChDT05GSUdfQkxLX0RFVl9EVEMyMjc4KQkJKz0gZHRjMjI3OC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hbGltMTV4My5jIGIvZHJpdmVycy9pZGUvYWxpbTE1eDMuYwppbmRleCBkNTE2MTY4Li41MzdkYTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hbGltMTV4My5jCisrKyBiL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKQEAgLTE4OSwyMCArMTg5LDIwIEBACiB9CiAKIC8qKgotICoJYWxpMTV4M19kbWFfc2V0dXAJLQliZWdpbiBhIERNQSBwaGFzZQorICoJYWxpX2RtYV9jaGVjawktCURNQSBjaGVjawogICoJQGRyaXZlOgl0YXJnZXQgZGV2aWNlCiAgKglAY21kOiBjb21tYW5kCiAgKgogICoJUmV0dXJucyAxIGlmIHRoZSBETUEgY2Fubm90IGJlIHBlcmZvcm1lZCwgemVybyBvbiBzdWNjZXNzLgogICovCiAKLXN0YXRpYyBpbnQgYWxpMTV4M19kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQorc3RhdGljIGludCBhbGlfZG1hX2NoZWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZiAobTUyMjlfcmV2aXNpb24gPCAweEMyICYmIGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzaykgewogCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkKIAkJCXJldHVybiAxOwkvKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICovCiAJfQotCXJldHVybiBpZGVfZG1hX3NldHVwKGRyaXZlLCBjbWQpOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTUwMywxMyArNTAzLDEzIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgYWxpX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAotCS5kbWFfc2V0dXAJCT0gYWxpMTV4M19kbWFfc2V0dXAsCisJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfY2hlY2sJCT0gYWxpX2RtYV9jaGVjaywKIAkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdDkxX2lkZS5jIGIvZHJpdmVycy9pZGUvYXQ5MV9pZGUuYwppbmRleCAyNzU0NzEyLi44ZWRhNTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hdDkxX2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2F0OTFfaWRlLmMKQEAgLTE5MiwxNSArMTkyLDkgQEAKIAlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCXU4IEhJSEkgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKIAotCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX0ZURkxBR19GTEFHR0VEKQorCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfRkxBR0dFRCkKIAkJSElISSA9IDB4RkY7CiAKLQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9GVEZMQUdfT1VUX0RBVEEpIHsKLQkJdTE2IGRhdGEgPSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGE7Ci0KLQkJYXQ5MV9pZGVfb3V0cHV0X2RhdGEoZHJpdmUsIE5VTEwsICZkYXRhLCAyKTsKLQl9Ci0KIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCiAJCWlkZV9tbV9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKQEAgLTIzMywxOSArMjI3LDExIEBACiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CiAJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKIAotCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX0ZURkxBR19JTl9EQVRBKSB7Ci0JCXUxNiBkYXRhOwotCi0JCWF0OTFfaWRlX2lucHV0X2RhdGEoZHJpdmUsIE5VTEwsICZkYXRhLCAyKTsKLQkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKLQkJdGYtPmhvYl9kYXRhID0gKGRhdGEgPj4gOCkgJiAweGZmOwotCX0KLQogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KLQlpZGVfbW1fb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCWlkZV9tbV9vdXRiKEFUQV9ERVZDVExfT0JTLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKLQkJdGYtPmZlYXR1cmUgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0VSUk9SKQorCQl0Zi0+ZXJyb3IgID0gaWRlX21tX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwogCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCkBAIC0yNTgsMTggKzI0NCwxOCBAQAogCQl0Zi0+ZGV2aWNlID0gaWRlX21tX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKLQkJaWRlX21tX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCQlpZGVfbW1fb3V0YihBVEFfSE9CIHwgQVRBX0RFVkNUTF9PQlMsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCi0JCQl0Zi0+aG9iX2ZlYXR1cmUgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRVJST1IpCisJCQl0Zi0+aG9iX2Vycm9yID0gaWRlX21tX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKIAkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQotCQkJdGYtPmhvYl9uc2VjdCAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJCQl0Zi0+aG9iX25zZWN0ID0gaWRlX21tX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CiAJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQotCQkJdGYtPmhvYl9sYmFsICAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwkJCXRmLT5ob2JfbGJhbCAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwogCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKLQkJCXRmLT5ob2JfbGJhbSAgICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJCQl0Zi0+aG9iX2xiYW0gID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKIAkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCi0JCQl0Zi0+aG9iX2xiYWggICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCQkJdGYtPmhvYl9sYmFoICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAJfQogfQogCkBAIC0yOTUsOCArMjgxLDkgQEAKIAkuZXhlY19jb21tYW5kCT0gaWRlX2V4ZWNfY29tbWFuZCwKIAkucmVhZF9zdGF0dXMJPSBpZGVfcmVhZF9zdGF0dXMsCiAJLnJlYWRfYWx0c3RhdHVzCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAotCS5zZXRfaXJxCT0gaWRlX3NldF9pcnEsCisJLndyaXRlX2RldmN0bAk9IGlkZV93cml0ZV9kZXZjdGwsCiAKKwkuZGV2X3NlbGVjdAk9IGlkZV9kZXZfc2VsZWN0LAogCS50Zl9sb2FkCT0gYXQ5MV9pZGVfdGZfbG9hZCwKIAkudGZfcmVhZAk9IGF0OTFfaWRlX3RmX3JlYWQsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwppbmRleCBkM2E5ZDZjLi40NjAxMzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCkBAIC01MCw3ICs1MCw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfUElPX0RCRE1BKQogCi12b2lkIGF1aWRlX2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgYXVpZGVfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCkKIHsKIAlfYXVpZGVfaHdpZiAqYWh3aWYgPSAmYXVpZGVfaHdpZjsKIAljaGFuX3RhYl90ICpjdHA7CkBAIC02OCw3ICs2OCw3IEBACiAJY3RwLT5jdXJfcHRyID0gYXUxeHh4X2RkbWFfZ2V0X25leHRwdHJfdmlydChkcCk7CiB9CiAKLXZvaWQgYXVpZGVfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgYXVpZGVfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpCiB7CiAJX2F1aWRlX2h3aWYgKmFod2lmID0gJmF1aWRlX2h3aWY7CiAJY2hhbl90YWJfdCAqY3RwOwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJCQlpZiAoKytjb3VudCA+PSBQUkRfRU5UUklFUykgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBETUEgdGFibGUgdG9vIHNtYWxsXG4iLAogCQkJCSAgICAgICBkcml2ZS0+bmFtZSk7Ci0JCQkJZ290byB1c2VfcGlvX2luc3RlYWQ7CisJCQkJcmV0dXJuIDA7CiAJCQl9CiAKIAkJCS8qIExldHMgZW5hYmxlIGludHIgZm9yIHRoZSBsYXN0IGRlc2NyaXB0b3Igb25seSAqLwpAQCAtMjcyLDE2ICsyNzIsMTEgQEAKIAlpZiAoY291bnQpCiAJCXJldHVybiAxOwogCi0gdXNlX3Bpb19pbnN0ZWFkOgotCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQogCXJldHVybiAwOyAvKiByZXZlcnQgdG8gUElPIGZvciB0aGlzIHJlcXVlc3QgKi8KIH0KIAogc3RhdGljIGludCBhdWlkZV9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjkyLDEyICsyODcsOSBAQAogCiBzdGF0aWMgaW50IGF1aWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7Ci0JaWYgKGF1aWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApIHsKLQkJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKKwlpZiAoYXVpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCkgPT0gMCkKIAkJcmV0dXJuIDE7Ci0JfQogCi0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyMiwxNiArMzE0LDExIEBACiAKIHN0YXRpYyB2b2lkIGF1aWRlX2RkbWFfdHhfY2FsbGJhY2soaW50IGlycSwgdm9pZCAqcGFyYW0pCiB7Ci0JX2F1aWRlX2h3aWYgKmFod2lmID0gKF9hdWlkZV9od2lmKilwYXJhbTsKLQlhaHdpZi0+ZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGF1aWRlX2RkbWFfcnhfY2FsbGJhY2soaW50IGlycSwgdm9pZCAqcGFyYW0pCiB7Ci0JX2F1aWRlX2h3aWYgKmFod2lmID0gKF9hdWlkZV9od2lmKilwYXJhbTsKLQlhaHdpZi0+ZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CiB9Ci0KICNlbmRpZiAvKiBlbmQgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQSAqLwogCiBzdGF0aWMgdm9pZCBhdWlkZV9pbml0X2RiZG1hX2RldihkYmRldl90YWJfdCAqZGV2LCB1MzIgZGV2X2lkLCB1MzIgdHNpemUsIHUzMiBkZXZ3aWR0aCwgdTMyIGZsYWdzKQpAQCAtMzUzLDcgKzM0MCw2IEBACiAJLmRtYV9lbmQJCT0gYXVpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGF1aWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIH07CiAKIHN0YXRpYyBpbnQgYXVpZGVfZGRtYV9pbml0KGlkZV9od2lmX3QgKmh3aWYsIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkKQpAQCAtNDgxLDkgKzQ2Nyw5IEBACiAJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAogCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCiAJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkud3JpdGVfZGV2Y3RsCQk9IGlkZV93cml0ZV9kZXZjdGwsCiAKLQkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKLQorCS5kZXZfc2VsZWN0CQk9IGlkZV9kZXZfc2VsZWN0LAogCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAogCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jbWQ2NHguYyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCmluZGV4IGJmMGUzZjQuLjgwYjc3N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCkBAIC0zMTgsNyArMzE4LDYgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTggZG1hX3N0YXQgPSAwLCBkbWFfY21kID0gMDsKIAotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwogCS8qIGdldCBETUEgc3RhdHVzICovCiAJZG1hX3N0YXQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CiAJLyogcmVhZCBETUEgY29tbWFuZCBzdGF0ZSAqLwpAQCAtMzI3LDggKzMyNiw2IEBACiAJb3V0YihkbWFfY21kICYgfjEsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOwogCS8qIGNsZWFyIHRoZSBJTlRSICYgRVJST1IgYml0cyAqLwogCW91dGIoZG1hX3N0YXQgfCA2LCBod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfU1RBVFVTKTsKLQkvKiBhbmQgZnJlZSBhbnkgRE1BIHJlc291cmNlcyAqLwotCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKIAkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCiAJcmV0dXJuIChkbWFfc3RhdCAmIDcpICE9IDQ7CiB9CkBAIC0zODQsNyArMzgxLDYgQEAKIAkuZG1hX3Rlc3RfaXJxCQk9IGNtZDY0eF9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAogCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAotCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CiAKQEAgLTM5Niw3ICszOTIsNiBAQAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiAJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIApAQCAtNDA4LDcgKzQwMyw2IEBACiAJLmRtYV90ZXN0X2lycQkJPSBjbWQ2NDhfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKIAkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jczU1MzAuYyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCmluZGV4IDhlOGIzNWEuLjQwYmYwNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCkBAIC05Miw4ICs5Miw3IEBACiAJCWlmICgobWF0ZWlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiA0KSAmJgogCQkgICAgKG1hdGVpZFtBVEFfSURfVURNQV9NT0RFU10gJiA3KSkKIAkJCWdvdG8gb3V0OwotCQlpZiAoKG1hdGVpZFtBVEFfSURfRklFTERfVkFMSURdICYgMikgJiYKLQkJICAgIChtYXRlaWRbQVRBX0lEX01XRE1BX01PREVTXSAmIDcpKQorCQlpZiAobWF0ZWlkW0FUQV9JRF9NV0RNQV9NT0RFU10gJiA3KQogCQkJbWFzayA9IDA7CiAJfQogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY3M1NTM2LmMgYi9kcml2ZXJzL2lkZS9jczU1MzYuYwppbmRleCBkNWRjZjQ4Li4zNTNhMzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jczU1MzYuYworKysgYi9kcml2ZXJzL2lkZS9jczU1MzYuYwpAQCAtMjM2LDcgKzIzNiw2IEBACiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKIAkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGNzNTUzNl9pbmZvID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvZmFsY29uaWRlLmMgYi9kcml2ZXJzL2lkZS9mYWxjb25pZGUuYwppbmRleCBiMzY4YTVlLi5hZmEyYWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9mYWxjb25pZGUuYworKysgYi9kcml2ZXJzL2lkZS9mYWxjb25pZGUuYwpAQCAtODksOSArODksOSBAQAogCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKIAkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAogCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBpZGVfd3JpdGVfZGV2Y3RsLAogCi0JLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCi0KKwkuZGV2X3NlbGVjdAkJPSBpZGVfZGV2X3NlbGVjdCwKIAkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKIAkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvZ2F5bGUuYyBiL2RyaXZlcnMvaWRlL2dheWxlLmMKaW5kZXggZGM3NzgyNS4uYzcxMTk1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvZ2F5bGUuYworKysgYi9kcml2ZXJzL2lkZS9nYXlsZS5jCkBAIC01MywxMSArNTMsNiBAQAogCiAjZGVmaW5lIEdBWUxFX05FWFRfUE9SVAkweDEwMDAKIAotI2lmbmRlZiBDT05GSUdfQkxLX0RFVl9JREVET1VCTEVSCi0jZGVmaW5lIEdBWUxFX05VTV9IV0lGUwkJMQotI2RlZmluZSBHQVlMRV9OVU1fUFJPQkVfSFdJRlMJR0FZTEVfTlVNX0hXSUZTCi0jZGVmaW5lIEdBWUxFX0hBU19DT05UUk9MX1JFRwkxCi0jZWxzZSAvKiBDT05GSUdfQkxLX0RFVl9JREVET1VCTEVSICovCiAjZGVmaW5lIEdBWUxFX05VTV9IV0lGUwkJMgogI2RlZmluZSBHQVlMRV9OVU1fUFJPQkVfSFdJRlMJKGlkZV9kb3VibGVyID8gR0FZTEVfTlVNX0hXSUZTIDogXAogCQkJCQkgICAgICAgR0FZTEVfTlVNX0hXSUZTLTEpCkBAIC02Niw4ICs2MSw2IEBACiBzdGF0aWMgaW50IGlkZV9kb3VibGVyOwogbW9kdWxlX3BhcmFtX25hbWVkKGRvdWJsZXIsIGlkZV9kb3VibGVyLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZG91YmxlciwgImVuYWJsZSBzdXBwb3J0IGZvciBJREUgZG91YmxlcnMiKTsKLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVET1VCTEVSICovCi0KIAogICAgIC8qCiAgICAgICogIENoZWNrIGFuZCBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0IHN0YXR1cwpAQCAtMTUxLDEwICsxNDQsNyBAQAogZm91bmQ6CiAJcHJpbnRrKEtFUk5fSU5GTyAiaWRlOiBHYXlsZSBJREUgY29udHJvbGxlciAoQSVkIHN0eWxlJXMpXG4iLAogCQkJIGE0MDAwID8gNDAwMCA6IDEyMDAsCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE9VQkxFUgotCQkJIGlkZV9kb3VibGVyID8gIiwgSURFIGRvdWJsZXIiIDoKLSNlbmRpZgotCQkJICIiKTsKKwkJCSBpZGVfZG91YmxlciA/ICIsIElERSBkb3VibGVyIiA6ICIiKTsKIAogCWlmIChhNDAwMCkgewogCSAgICBwaHlzX2Jhc2UgPSBHQVlMRV9CQVNFXzQwMDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9ocHQzNjYuYyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCmluZGV4IGRiYWYxODQuLmEwZWI4N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCkBAIC04MzUsMTIgKzgzNSw2IEBACiAJcmV0dXJuIGlkZV9kbWFfZW5kKGRyaXZlKTsKIH0KIAotc3RhdGljIHZvaWQgaHB0MzcwX2RtYV90aW1lb3V0KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlocHQzNzBfaXJxX3RpbWVvdXQoZHJpdmUpOwotCWlkZV9kbWFfdGltZW91dChkcml2ZSk7Ci19Ci0KIC8qIHJldHVybnMgMSBpZiBETUEgSVJRIGlzc3VlZCwgMCBvdGhlcndpc2UgKi8KIHN0YXRpYyBpbnQgaHB0Mzc0X2RtYV90ZXN0X2lycShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CkBAIC0xNDIzLDcgKzE0MTcsNiBAQAogCS5kbWFfdGVzdF9pcnEJCT0gaHB0Mzc0X2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiAJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIApAQCAtMTQzNSw3ICsxNDI4LDcgQEAKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAogCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAotCS5kbWFfdGltZW91dAkJPSBocHQzNzBfZG1hX3RpbWVvdXQsCisJLmRtYV9jbGVhcgkJPSBocHQzNzBfaXJxX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CiAKQEAgLTE0NDcsNyArMTQ0MCw2IEBACiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaHB0MzY2X2RtYV9sb3N0X2lycSwKIAkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9odDY1NjBiLmMgYi9kcml2ZXJzL2lkZS9odDY1NjBiLmMKaW5kZXggYzdlNWMyMi4uMmZiMGYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaHQ2NTYwYi5jCisrKyBiL2RyaXZlcnMvaWRlL2h0NjU2MGIuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAvKgogICogVGhpcyByb3V0aW5lIGlzIGludm9rZWQgZnJvbSBpZGUuYyB0byBwcmVwYXJlIGZvciBhY2Nlc3MgdG8gYSBnaXZlbiBkcml2ZS4KICAqLwotc3RhdGljIHZvaWQgaHQ2NTYwYl9zZWxlY3Rwcm9jIChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBodDY1NjBiX2Rldl9zZWxlY3QoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTQzLDYgKzE0Myw4IEBACiAjZW5kaWYKIAl9CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJb3V0Yihkcml2ZS0+c2VsZWN0IHwgQVRBX0RFVklDRV9PQlMsIGh3aWYtPmlvX3BvcnRzLmRldmljZV9hZGRyKTsKIH0KIAogLyoKQEAgLTMwNSwxNSArMzA3LDI5IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQocHJvYmUsIHByb2JlX2h0NjU2MGIsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwcm9iZSwgInByb2JlIGZvciBIVDY1NjBCIGNoaXBzZXQiKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGh0NjU2MGJfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBpZGVfd3JpdGVfZGV2Y3RsLAorCisJLmRldl9zZWxlY3QJCT0gaHQ2NTYwYl9kZXZfc2VsZWN0LAorCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAorCisJLmlucHV0X2RhdGEJCT0gaWRlX2lucHV0X2RhdGEsCisJLm91dHB1dF9kYXRhCQk9IGlkZV9vdXRwdXRfZGF0YSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIGh0NjU2MGJfcG9ydF9vcHMgPSB7CiAJLmluaXRfZGV2CQk9IGh0NjU2MGJfaW5pdF9kZXYsCiAJLnNldF9waW9fbW9kZQkJPSBodDY1NjBiX3NldF9waW9fbW9kZSwKLQkuc2VsZWN0cHJvYwkJPSBodDY1NjBiX3NlbGVjdHByb2MsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaHQ2NTYwYl9wb3J0X2luZm8gX19pbml0ZGF0YSA9IHsKIAkubmFtZQkJCT0gRFJWX05BTUUsCiAJLmNoaXBzZXQJCT0gaWRlX2h0NjU2MGIsCisJLnRwX29wcyAJCT0gJmh0NjU2MGJfdHBfb3BzLAogCS5wb3J0X29wcwkJPSAmaHQ2NTYwYl9wb3J0X29wcywKIAkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfU0VSSUFMSVpFIHwgLyogaXMgdGhpcyBuZWVkZWQ/ICovCiAJCQkJICBJREVfSEZMQUdfTk9fRE1BIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2ljc2lkZS5jIGIvZHJpdmVycy9pZGUvaWNzaWRlLmMKaW5kZXggNTFjZTQwNC4uNGUxNmNlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWNzaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvaWNzaWRlLmMKQEAgLTI4NywxMyArMjg3LDggQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYyA9IEVDQVJEX0RFVihod2lmLT5kZXYpOwogCi0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7Ci0KIAlkaXNhYmxlX2RtYShlYy0+ZG1hKTsKIAotCS8qIFRlYXJkb3duIG1hcHBpbmdzIGFmdGVyIERNQSBoYXMgY29tcGxldGVkLiAqLwotCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQogCXJldHVybiBnZXRfZG1hX3Jlc2lkdWUoZWMtPmRtYSkgIT0gMDsKIH0KIApAQCAtMzQ2LDggKzM0MSw2IEBACiAJc2V0X2RtYV9zZyhlYy0+ZG1hLCBod2lmLT5zZ190YWJsZSwgY21kLT5zZ19uZW50cyk7CiAJc2V0X2RtYV9tb2RlKGVjLT5kbWEsIGRtYV9tb2RlKTsKIAotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM3Nyw3ICszNzAsNiBAQAogCS5kbWFfc3RhcnQJCT0gaWNzaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpY3NpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGljc2lkZV9kbWFfdGVzdF9pcnEsCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiB9OwogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKaW5kZXggMmZiNWQyOC4uM2U0M2I4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWF0YXBpLmMKQEAgLTYsNiArNiw4IEBACiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KIAogI2lmZGVmIERFQlVHCkBAIC02OSw1NiArNzEsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2NoZWNrX2F0YXBpX2RldmljZSk7CiAKLS8qIFBJTyBkYXRhIHRyYW5zZmVyIHJvdXRpbmUgdXNpbmcgdGhlIHNjYXR0ZXIgZ2F0aGVyIHRhYmxlLiAqLwotaW50IGlkZV9pb19idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsCi0JCSAgICB1bnNpZ25lZCBpbnQgYmNvdW50LCBpbnQgd3JpdGUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7Ci0JeGZlcl9mdW5jX3QgKnhmID0gd3JpdGUgPyB0cF9vcHMtPm91dHB1dF9kYXRhIDogdHBfb3BzLT5pbnB1dF9kYXRhOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBwYy0+c2c7Ci0JY2hhciAqYnVmOwotCWludCBjb3VudCwgZG9uZSA9IDA7Ci0KLQl3aGlsZSAoYmNvdW50KSB7Ci0JCWNvdW50ID0gbWluKHNnLT5sZW5ndGggLSBwYy0+Yl9jb3VudCwgYmNvdW50KTsKLQotCQlpZiAoUGFnZUhpZ2hNZW0oc2dfcGFnZShzZykpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlidWYgPSBrbWFwX2F0b21pYyhzZ19wYWdlKHNnKSwgS01fSVJRMCkgKyBzZy0+b2Zmc2V0OwotCQkJeGYoZHJpdmUsIE5VTEwsIGJ1ZiArIHBjLT5iX2NvdW50LCBjb3VudCk7Ci0JCQlrdW5tYXBfYXRvbWljKGJ1ZiAtIHNnLT5vZmZzZXQsIEtNX0lSUTApOwotCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQl9IGVsc2UgewotCQkJYnVmID0gc2dfdmlydChzZyk7Ci0JCQl4Zihkcml2ZSwgTlVMTCwgYnVmICsgcGMtPmJfY291bnQsIGNvdW50KTsKLQkJfQotCi0JCWJjb3VudCAtPSBjb3VudDsKLQkJcGMtPmJfY291bnQgKz0gY291bnQ7Ci0JCWRvbmUgKz0gY291bnQ7Ci0KLQkJaWYgKHBjLT5iX2NvdW50ID09IHNnLT5sZW5ndGgpIHsKLQkJCWlmICghLS1wYy0+c2dfY250KQotCQkJCWJyZWFrOwotCQkJcGMtPnNnID0gc2cgPSBzZ19uZXh0KHNnKTsKLQkJCXBjLT5iX2NvdW50ID0gMDsKLQkJfQotCX0KLQotCWlmIChiY291bnQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogJWQgbGVmdG92ZXIgYnl0ZXMsICVzXG4iLCBkcml2ZS0+bmFtZSwKLQkJCWJjb3VudCwgd3JpdGUgPyAicGFkZGluZyB3aXRoIHplcm9zIgotCQkJCSAgICAgIDogImRpc2NhcmRpbmcgZGF0YSIpOwotCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCB3cml0ZSwgYmNvdW50KTsKLQl9Ci0KLQlyZXR1cm4gZG9uZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9pb19idWZmZXJzKTsKLQogdm9pZCBpZGVfaW5pdF9wYyhzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKIAltZW1zZXQocGMsIDAsIHNpemVvZigqcGMpKTsKQEAgLTMyNCwxMiArMjc2LDE0IEBACiB7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBkcml2ZS0+cGM7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSAmaHdpZi0+Y21kOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOwogCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CiAJeGZlcl9mdW5jX3QgKnhmZXJmdW5jOwotCXVuc2lnbmVkIGludCB0aW1lb3V0LCB0ZW1wOworCXVuc2lnbmVkIGludCB0aW1lb3V0LCBkb25lOwogCXUxNiBiY291bnQ7CiAJdTggc3RhdCwgaXJlYXNvbiwgZHNjID0gMDsKKwl1OCB3cml0ZSA9ICEhKHBjLT5mbGFncyAmIFBDX0ZMQUdfV1JJVElORyk7CiAKIAlkZWJ1Z19sb2coIkVudGVyICVzIC0gaW50ZXJydXB0IGhhbmRsZXJcbiIsIF9fZnVuY19fKTsKIApAQCAtMzQwLDggKzI5NCwxMyBAQAogCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCiAJaWYgKHBjLT5mbGFncyAmIFBDX0ZMQUdfRE1BX0lOX1BST0dSRVNTKSB7Ci0JCWlmIChod2lmLT5kbWFfb3BzLT5kbWFfZW5kKGRyaXZlKSB8fAotCQkgICAgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSAmJiAoc3RhdCAmIEFUQV9FUlIpKSkgeworCQlpbnQgcmM7CisKKwkJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CisJCXJjID0gaHdpZi0+ZG1hX29wcy0+ZG1hX2VuZChkcml2ZSk7CisJCWlkZV9kbWFfdW5tYXBfc2coZHJpdmUsIGNtZCk7CisKKwkJaWYgKHJjIHx8IChkcml2ZS0+bWVkaWEgPT0gaWRlX3RhcGUgJiYgKHN0YXQgJiBBVEFfRVJSKSkpIHsKIAkJCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Zsb3BweSkKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgJXMgZXJyb3JcbiIsCiAJCQkJCWRyaXZlLT5uYW1lLCBycV9kYXRhX2RpcihwYy0+cnEpCkBAIC0zNTcsNyArMzE2LDggQEAKIAogCS8qIE5vIG1vcmUgaW50ZXJydXB0cyAqLwogCWlmICgoc3RhdCAmIEFUQV9EUlEpID09IDApIHsKLQkJaW50IHVwdG9kYXRlOworCQlpbnQgdXB0b2RhdGUsIGVycm9yOworCQl1bnNpZ25lZCBpbnQgZG9uZTsKIAogCQlkZWJ1Z19sb2coIlBhY2tldCBjb21tYW5kIGNvbXBsZXRlZCwgJWQgYnl0ZXMgdHJhbnNmZXJyZWRcbiIsCiAJCQkgIHBjLT54ZmVycmVkKTsKQEAgLTQwNCwxNiArMzY0LDI0IEBACiAKIAkJaWYgKGJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7CiAJCQlycS0+ZXJyb3JzID0gMDsKLQkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgYmxrX3JxX2J5dGVzKHJxKSk7CisJCQlkb25lID0gYmxrX3JxX2J5dGVzKHJxKTsKKwkJCWVycm9yID0gMDsKIAkJfSBlbHNlIHsKKwogCQkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSA9PSAwICYmIHVwdG9kYXRlIDw9IDApIHsKIAkJCQlpZiAocnEtPmVycm9ycyA9PSAwKQogCQkJCQlycS0+ZXJyb3JzID0gLUVJTzsKIAkJCX0KLQkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgdXB0b2RhdGUgPyAwIDogLUVJTywKLQkJCQkJaWRlX3JxX2J5dGVzKHJxKSk7CisKKwkJCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX3RhcGUpCisJCQkJZG9uZSA9IGlkZV9ycV9ieXRlcyhycSk7IC8qIEZJWE1FICovCisJCQllbHNlCisJCQkJZG9uZSA9IGJsa19ycV9ieXRlcyhycSk7CisKKwkJCWVycm9yID0gdXB0b2RhdGUgPyAwIDogLUVJTzsKIAkJfQogCisJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgZXJyb3IsIGRvbmUpOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCkBAIC00MzMsOCArNDAxLDcgQEAKIAkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CiAJfQogCi0JaWYgKCgoaXJlYXNvbiAmIEFUQVBJX0lPKSA9PSBBVEFQSV9JTykgPT0KLQkJISEocGMtPmZsYWdzICYgUENfRkxBR19XUklUSU5HKSkgeworCWlmICgoKGlyZWFzb24gJiBBVEFQSV9JTykgPT0gQVRBUElfSU8pID09IHdyaXRlKSB7CiAJCS8qIEhvcGVmdWxseSwgd2Ugd2lsbCBuZXZlciBnZXQgaGVyZSAqLwogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXZSB3YW50ZWQgdG8gJXMsIGJ1dCB0aGUgZGV2aWNlIHdhbnRzIHVzICIKIAkJCQkidG8gJXMhXG4iLCBkcml2ZS0+bmFtZSwKQEAgLTQ0Myw0NSArNDEwLDMwIEBACiAJCXJldHVybiBpZGVfZG9fcmVzZXQoZHJpdmUpOwogCX0KIAotCWlmICghKHBjLT5mbGFncyAmIFBDX0ZMQUdfV1JJVElORykpIHsKLQkJLyogUmVhZGluZyAtIENoZWNrIHRoYXQgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgKi8KLQkJdGVtcCA9IHBjLT54ZmVycmVkICsgYmNvdW50OwotCQlpZiAodGVtcCA+IHBjLT5yZXFfeGZlcikgewotCQkJaWYgKHRlbXAgPiBwYy0+YnVmX3NpemUpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUaGUgZGV2aWNlIHdhbnRzIHRvIHNlbmQgIgotCQkJCQkJInVzIG1vcmUgZGF0YSB0aGFuIGV4cGVjdGVkIC0gIgotCQkJCQkJImRpc2NhcmRpbmcgZGF0YVxuIiwKLQkJCQkJCWRyaXZlLT5uYW1lKTsKKwl4ZmVyZnVuYyA9IHdyaXRlID8gdHBfb3BzLT5vdXRwdXRfZGF0YSA6IHRwX29wcy0+aW5wdXRfZGF0YTsKIAotCQkJCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIDAsIGJjb3VudCk7Ci0JCQkJZ290byBuZXh0X2lycTsKLQkJCX0KLQkJCWRlYnVnX2xvZygiVGhlIGRldmljZSB3YW50cyB0byBzZW5kIHVzIG1vcmUgZGF0YSB0aGFuICIKLQkJCQkgICJleHBlY3RlZCAtIGFsbG93aW5nIHRyYW5zZmVyXG4iKTsKLQkJfQotCQl4ZmVyZnVuYyA9IHRwX29wcy0+aW5wdXRfZGF0YTsKLQl9IGVsc2UKLQkJeGZlcmZ1bmMgPSB0cF9vcHMtPm91dHB1dF9kYXRhOwotCi0JaWYgKChkcml2ZS0+bWVkaWEgPT0gaWRlX2Zsb3BweSAmJiAhcGMtPmJ1ZikgfHwKLQkgICAgKGRyaXZlLT5tZWRpYSA9PSBpZGVfdGFwZSAmJiBwYy0+YmgpKSB7Ci0JCWludCBkb25lID0gZHJpdmUtPnBjX2lvX2J1ZmZlcnMoZHJpdmUsIHBjLCBiY291bnQsCi0JCQkJICAhIShwYy0+ZmxhZ3MgJiBQQ19GTEFHX1dSSVRJTkcpKTsKLQotCQkvKiBGSVhNRTogZG9uJ3QgZG8gcGFydGlhbCBjb21wbGV0aW9ucyAqLwotCQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9mbG9wcHkpCi0JCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsCi0JCQkJCWRvbmUgPyBkb25lIDogaWRlX3JxX2J5dGVzKHJxKSk7Ci0JfSBlbHNlCi0JCXhmZXJmdW5jKGRyaXZlLCBOVUxMLCBwYy0+Y3VyX3BvcywgYmNvdW50KTsKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9mbG9wcHkgJiYgcGMtPmJ1ZiA9PSBOVUxMKSB7CisJCWRvbmUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGJjb3VudCwgY21kLT5ubGVmdCk7CisJCWlkZV9waW9fYnl0ZXMoZHJpdmUsIGNtZCwgd3JpdGUsIGRvbmUpOworCX0gZWxzZSBpZiAoZHJpdmUtPm1lZGlhID09IGlkZV90YXBlICYmIHBjLT5iaCkgeworCQlkb25lID0gZHJpdmUtPnBjX2lvX2J1ZmZlcnMoZHJpdmUsIHBjLCBiY291bnQsIHdyaXRlKTsKKwl9IGVsc2UgeworCQlkb25lID0gbWluX3QodW5zaWduZWQgaW50LCBiY291bnQsIHBjLT5yZXFfeGZlciAtIHBjLT54ZmVycmVkKTsKKwkJeGZlcmZ1bmMoZHJpdmUsIE5VTEwsIHBjLT5jdXJfcG9zLCBkb25lKTsKKwl9CiAKIAkvKiBVcGRhdGUgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KLQlwYy0+eGZlcnJlZCArPSBiY291bnQ7Ci0JcGMtPmN1cl9wb3MgKz0gYmNvdW50OworCXBjLT54ZmVycmVkICs9IGRvbmU7CisJcGMtPmN1cl9wb3MgKz0gZG9uZTsKIAotCWRlYnVnX2xvZygiW2NtZCAleF0gdHJhbnNmZXJyZWQgJWQgYnl0ZXMgb24gdGhhdCBpbnRyLlxuIiwKLQkJICBycS0+Y21kWzBdLCBiY291bnQpOwotbmV4dF9pcnE6CisJYmNvdW50IC09IGRvbmU7CisKKwlpZiAoYmNvdW50KQorCQlpZGVfcGFkX3RyYW5zZmVyKGRyaXZlLCB3cml0ZSwgYmNvdW50KTsKKworCWRlYnVnX2xvZygiW2NtZCAleF0gdHJhbnNmZXJyZWQgJWQgYnl0ZXMsIHBhZGRlZCAlZCBieXRlc1xuIiwKKwkJICBycS0+Y21kWzBdLCBkb25lLCBiY291bnQpOworCiAJLyogQW5kIHNldCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYWdhaW4gKi8KIAlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGlkZV9wY19pbnRyLCB0aW1lb3V0KTsKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CkBAIC02MTEsNiArNTYzLDEwIEBACiAJCQkJCSAgICAgOiBpZGVfcGNfaW50ciksCiAJCQl0aW1lb3V0KTsKIAorCS8qIFNlbmQgdGhlIGFjdHVhbCBwYWNrZXQgKi8KKwlpZiAoKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19aSVBfRFJJVkUpID09IDApCisJCWh3aWYtPnRwX29wcy0+b3V0cHV0X2RhdGEoZHJpdmUsIE5VTEwsIHJxLT5jbWQsIGNtZF9sZW4pOworCiAJLyogQmVnaW4gRE1BLCBpZiBuZWNlc3NhcnkgKi8KIAlpZiAoZGV2X2lzX2lkZWNkKGRyaXZlKSkgewogCQlpZiAoZHJpdmUtPmRtYSkKQEAgLTYyMiwxMCArNTc4LDYgQEAKIAkJfQogCX0KIAotCS8qIFNlbmQgdGhlIGFjdHVhbCBwYWNrZXQgKi8KLQlpZiAoKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19aSVBfRFJJVkUpID09IDApCi0JCWh3aWYtPnRwX29wcy0+b3V0cHV0X2RhdGEoZHJpdmUsIE5VTEwsIHJxLT5jbWQsIGNtZF9sZW4pOwotCiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQogCkBAIC02MzMsNyArNTg1LDYgQEAKIHsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYzsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzICpkbWFfb3BzID0gaHdpZi0+ZG1hX29wczsKIAlpZGVfZXhwaXJ5X3QgKmV4cGlyeSA9IE5VTEw7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CiAJdW5zaWduZWQgaW50IHRpbWVvdXQ7CkBAIC02NDcsMTIgKzU5OCw4IEBACiAJCWV4cGlyeSA9IGlkZV9jZF9leHBpcnk7CiAJCXRpbWVvdXQgPSBBVEFQSV9XQUlUX1BDOwogCi0JCWlmIChkcml2ZS0+ZG1hKSB7Ci0JCQlpZiAoaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgY21kKSkKLQkJCQlkcml2ZS0+ZG1hID0gIWRtYV9vcHMtPmRtYV9zZXR1cChkcml2ZSwgY21kKTsKLQkJCWVsc2UKLQkJCQlkcml2ZS0+ZG1hID0gMDsKLQkJfQorCQlpZiAoZHJpdmUtPmRtYSkKKwkJCWRyaXZlLT5kbWEgPSAhaWRlX2RtYV9wcmVwYXJlKGRyaXZlLCBjbWQpOwogCX0gZWxzZSB7CiAJCXBjID0gZHJpdmUtPnBjOwogCkBAIC02NzAsMTMgKzYxNyw4IEBACiAJCQlpZGVfZG1hX29mZihkcml2ZSk7CiAJCX0KIAotCQlpZiAoKHBjLT5mbGFncyAmIFBDX0ZMQUdfRE1BX09LKSAmJgotCQkgICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkpIHsKLQkJCWlmIChpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBjbWQpKQotCQkJCWRyaXZlLT5kbWEgPSAhZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlLCBjbWQpOwotCQkJZWxzZQotCQkJCWRyaXZlLT5kbWEgPSAwOwotCQl9CisJCWlmIChwYy0+ZmxhZ3MgJiBQQ19GTEFHX0RNQV9PSykKKwkJCWRyaXZlLT5kbWEgPSAhaWRlX2RtYV9wcmVwYXJlKGRyaXZlLCBjbWQpOwogCiAJCWlmICghZHJpdmUtPmRtYSkKIAkJCXBjLT5mbGFncyAmPSB+UENfRkxBR19ETUFfT0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCmluZGV4IDNmNjMwZTQuLjM1NzI5YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYgICBTY290dCBTbnlkZXIgPHNueWRlckBmbmFsZDAuZm5hbC5nb3Y+CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OCAgIEVyaWsgQW5kZXJzZW4gPGFuZGVyc2VlQGRlYmlhbi5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCAgIEplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcgIEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNy0yMDA5ICBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CiAgKgogICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgpAQCAtMTIsMTIgKzEyLDkgQEAKICAqIFNlZSBEb2N1bWVudGF0aW9uL2Nkcm9tL2lkZS1jZCBmb3IgdXNhZ2UgaW5mb3JtYXRpb24uCiAgKgogICogU3VnZ2VzdGlvbnMgYXJlIHdlbGNvbWUuIFBhdGNoZXMgdGhhdCB3b3JrIGFyZSBtb3JlIHdlbGNvbWUgdGhvdWdoLiA7LSkKLSAqIEZvciB0aG9zZSB3aXNoaW5nIHRvIHdvcmsgb24gdGhpcyBkcml2ZXIsIHBsZWFzZSBiZSBzdXJlIHlvdSBkb3dubG9hZAotICogYW5kIGNvbXBseSB3aXRoIHRoZSBsYXRlc3QgTXQuIEZ1amkgKFNGRjgwOTAgdmVyc2lvbiA0KSBhbmQgQVRBUEkKLSAqIChTRkYtODAyMGkgcmV2IDIuNikgc3RhbmRhcmRzLiBUaGVzZSBkb2N1bWVudHMgY2FuIGJlIG9idGFpbmVkIGJ5Ci0gKiBhbm9ueW1vdXMgZnRwIGZyb206Ci0gKiBmdHA6Ly9maXNzaW9uLmR0LndkYy5jb20vcHViL3N0YW5kYXJkcy9TRkZfYXRhcGkvc3BlYy9TRkY4MDIwLXIyLjYvUFMvODAyMHIyNi5wcwotICogZnRwOi8vZnRwLmF2Yy1waW9uZWVyLmNvbS9NdGZ1amk0L1NwZWMvRnVqaTRyMTAucGRmCisgKgorICogRG9jdW1lbnRhdGlvbjoKKyAqCU10LiBGdWppIChTRkY4MDkwIHZlcnNpb24gNCkgYW5kIEFUQVBJIChTRkYtODAyMGkgcmV2IDIuNikgc3RhbmRhcmRzLgogICoKICAqIEZvciBoaXN0b3JpY2FsIGNoYW5nZWxvZyBwbGVhc2Ugc2VlOgogICoJRG9jdW1lbnRhdGlvbi9pZGUvQ2hhbmdlTG9nLmlkZS1jZC4xOTk0LTIwMDQKQEAgLTI0NSw3MyArMjQyLDM0IEBACiAJZWx2X2FkZF9yZXF1ZXN0KGRyaXZlLT5xdWV1ZSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNkcm9tX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlKQorc3RhdGljIHZvaWQgaWRlX2NkX2NvbXBsZXRlX2ZhaWxlZF9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7Ci0JaW50IG5zZWN0b3JzID0gcnEtPmhhcmRfY3VyX3NlY3RvcnM7CisJLyoKKwkgKiBGb3IgUkVRX1RZUEVfU0VOU0UsICJycS0+YnVmZmVyIiBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCisJICogZmFpbGVkIHJlcXVlc3QKKwkgKi8KKwlzdHJ1Y3QgcmVxdWVzdCAqZmFpbGVkID0gKHN0cnVjdCByZXF1ZXN0ICopcnEtPmJ1ZmZlcjsKKwlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKKwl2b2lkICpzZW5zZSA9ICZpbmZvLT5zZW5zZV9kYXRhOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJjbWQ6IDB4JXgsIHVwdG9kYXRlOiAweCV4LCBuc2VjdG9yczogJWQiLAotCQkJCSAgICBycS0+Y21kWzBdLCB1cHRvZGF0ZSwgbnNlY3RvcnMpOworCWlmIChmYWlsZWQpIHsKKwkJaWYgKGZhaWxlZC0+c2Vuc2UpIHsKKwkJCXNlbnNlID0gZmFpbGVkLT5zZW5zZTsKKwkJCWZhaWxlZC0+c2Vuc2VfbGVuID0gcnEtPnNlbnNlX2xlbjsKKwkJfQorCQljZHJvbV9hbmFseXplX3NlbnNlX2RhdGEoZHJpdmUsIGZhaWxlZCwgc2Vuc2UpOwogCi0JaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHJxKSAmJiB1cHRvZGF0ZSkgewotCQkvKgotCQkgKiBGb3IgUkVRX1RZUEVfU0VOU0UsICJycS0+YnVmZmVyIiBwb2ludHMgdG8gdGhlIG9yaWdpbmFsCi0JCSAqIGZhaWxlZCByZXF1ZXN0Ci0JCSAqLwotCQlzdHJ1Y3QgcmVxdWVzdCAqZmFpbGVkID0gKHN0cnVjdCByZXF1ZXN0ICopIHJxLT5idWZmZXI7Ci0JCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCQl2b2lkICpzZW5zZSA9ICZpbmZvLT5zZW5zZV9kYXRhOwotCi0JCWlmIChmYWlsZWQpIHsKLQkJCWlmIChmYWlsZWQtPnNlbnNlKSB7Ci0JCQkJc2Vuc2UgPSBmYWlsZWQtPnNlbnNlOwotCQkJCWZhaWxlZC0+c2Vuc2VfbGVuID0gcnEtPnNlbnNlX2xlbjsKLQkJCX0KLQkJCWNkcm9tX2FuYWx5emVfc2Vuc2VfZGF0YShkcml2ZSwgZmFpbGVkLCBzZW5zZSk7Ci0JCQkvKgotCQkJICogbm93IGVuZCB0aGUgZmFpbGVkIHJlcXVlc3QKLQkJCSAqLwotCQkJaWYgKGJsa19mc19yZXF1ZXN0KGZhaWxlZCkpIHsKLQkJCQlpZiAoaWRlX2VuZF9ycShkcml2ZSwgZmFpbGVkLCAtRUlPLAotCQkJCQkJZmFpbGVkLT5oYXJkX25yX3NlY3RvcnMgPDwgOSkpCi0JCQkJCUJVRygpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoYmxrX2VuZF9yZXF1ZXN0KGZhaWxlZCwgLUVJTywKLQkJCQkJCSAgICBmYWlsZWQtPmRhdGFfbGVuKSkKLQkJCQkJQlVHKCk7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJY2Ryb21fYW5hbHl6ZV9zZW5zZV9kYXRhKGRyaXZlLCBOVUxMLCBzZW5zZSk7Ci0JfQotCi0JaWYgKCFycS0+Y3VycmVudF9ucl9zZWN0b3JzICYmIGJsa19mc19yZXF1ZXN0KHJxKSkKLQkJdXB0b2RhdGUgPSAxOwotCS8qIG1ha2Ugc3VyZSBpdCdzIGZ1bGx5IGVuZGVkICovCi0JaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKLQkJbnNlY3RvcnMgPSAocnEtPmRhdGFfbGVuICsgNTExKSA+PiA5OwotCWlmICghbnNlY3RvcnMpCi0JCW5zZWN0b3JzID0gMTsKLQotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAidXB0b2RhdGU6IDB4JXgsIG5zZWN0b3JzOiAlZCIsCi0JCQkJICAgIHVwdG9kYXRlLCBuc2VjdG9ycyk7Ci0KLQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpID09IDAgJiYgdXB0b2RhdGUgPD0gMCAmJiBycS0+ZXJyb3JzID09IDApCi0JCXJxLT5lcnJvcnMgPSAtRUlPOwotCi0JaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCB1cHRvZGF0ZSA/IDAgOiAtRUlPLCBuc2VjdG9ycyA8PCA5KTsKLX0KLQotc3RhdGljIHZvaWQgaWRlX2R1bXBfc3RhdHVzX25vX3NlbnNlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqbXNnLCB1OCBzdCkKLXsKLQlpZiAoc3QgJiAweDgwKQotCQlyZXR1cm47Ci0JaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCBtc2csIHN0KTsKKwkJaWYgKGlkZV9lbmRfcnEoZHJpdmUsIGZhaWxlZCwgLUVJTywgYmxrX3JxX2J5dGVzKGZhaWxlZCkpKQorCQkJQlVHKCk7CisJfSBlbHNlCisJCWNkcm9tX2FuYWx5emVfc2Vuc2VfZGF0YShkcml2ZSwgTlVMTCwgc2Vuc2UpOwogfQogCiAvKgogICogUmV0dXJuczoKICAqIDA6IGlmIHRoZSByZXF1ZXN0IHNob3VsZCBiZSBjb250aW51ZWQuCi0gKiAxOiBpZiB0aGUgcmVxdWVzdCB3YXMgZW5kZWQuCisgKiAxOiBpZiB0aGUgcmVxdWVzdCB3aWxsIGJlIGdvaW5nIHRocm91Z2ggZXJyb3IgcmVjb3ZlcnkuCisgKiAyOiBpZiB0aGUgcmVxdWVzdCBzaG91bGQgYmUgZW5kZWQuCiAgKi8KIHN0YXRpYyBpbnQgY2Ryb21fZGVjb2RlX3N0YXR1cyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBnb29kX3N0YXQsIGludCAqc3RhdF9yZXQpCiB7CkBAIC0zMzIsMTIgKzI5MCw2IEBACiAJZXJyID0gaWRlX3JlYWRfZXJyb3IoZHJpdmUpOwogCXNlbnNlX2tleSA9IGVyciA+PiA0OwogCi0JaWYgKHJxID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IG1pc3NpbmcgcnEgaW4gJXNcbiIsCi0JCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fKTsKLQkJcmV0dXJuIDE7Ci0JfQotCiAJaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAic3RhdDogMHgleCwgZ29vZF9zdGF0OiAweCV4LCBjbWRbMF06IDB4JXgsICIKIAkJCQkgICJycS0+Y21kX3R5cGU6IDB4JXgsIGVycjogMHgleCIsCiAJCQkJICBzdGF0LCBnb29kX3N0YXQsIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwKQEAgLTM1MCwxMCArMzAyLDcgQEAKIAkJICogSnVzdCBnaXZlIHVwLgogCQkgKi8KIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEVEOwotCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgMCk7Ci0JCWlkZV9lcnJvcihkcml2ZSwgInJlcXVlc3Qgc2Vuc2UgZmFpbHVyZSIsIHN0YXQpOwotCQlyZXR1cm4gMTsKLQorCQlyZXR1cm4gMjsKIAl9IGVsc2UgaWYgKGJsa19wY19yZXF1ZXN0KHJxKSB8fCBycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1BDKSB7CiAJCS8qIEFsbCBvdGhlciBmdW5jdGlvbnMsIGV4Y2VwdCBmb3IgUkVBRC4gKi8KIApAQCAtNDU2LDIxICs0MDUsMTkgQEAKIAkJCSAqIE5vIHBvaW50IGluIHJldHJ5aW5nIGFmdGVyIGFuIGlsbGVnYWwgcmVxdWVzdCBvciBkYXRhCiAJCQkgKiBwcm90ZWN0IGVycm9yLgogCQkJICovCi0JCQlpZGVfZHVtcF9zdGF0dXNfbm9fc2Vuc2UoZHJpdmUsICJjb21tYW5kIGVycm9yIiwgc3RhdCk7CisJCQlpZGVfZHVtcF9zdGF0dXMoZHJpdmUsICJjb21tYW5kIGVycm9yIiwgc3RhdCk7CiAJCQlkb19lbmRfcmVxdWVzdCA9IDE7CiAJCX0gZWxzZSBpZiAoc2Vuc2Vfa2V5ID09IE1FRElVTV9FUlJPUikgewogCQkJLyoKIAkJCSAqIE5vIHBvaW50IGluIHJlLXRyeWluZyBhIHppbGxpb24gdGltZXMgb24gYSBiYWQKIAkJCSAqIHNlY3Rvci4gSWYgd2UgZ290IGhlcmUgdGhlIGVycm9yIGlzIG5vdCBjb3JyZWN0YWJsZS4KIAkJCSAqLwotCQkJaWRlX2R1bXBfc3RhdHVzX25vX3NlbnNlKGRyaXZlLAotCQkJCQkJICJtZWRpYSBlcnJvciAoYmFkIHNlY3RvcikiLAotCQkJCQkJIHN0YXQpOworCQkJaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCAibWVkaWEgZXJyb3IgKGJhZCBzZWN0b3IpIiwKKwkJCQkJc3RhdCk7CiAJCQlkb19lbmRfcmVxdWVzdCA9IDE7CiAJCX0gZWxzZSBpZiAoc2Vuc2Vfa2V5ID09IEJMQU5LX0NIRUNLKSB7CiAJCQkvKiBkaXNrIGFwcGVhcnMgYmxhbmsgPz8gKi8KLQkJCWlkZV9kdW1wX3N0YXR1c19ub19zZW5zZShkcml2ZSwgIm1lZGlhIGVycm9yIChibGFuaykiLAotCQkJCQkJIHN0YXQpOworCQkJaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCAibWVkaWEgZXJyb3IgKGJsYW5rKSIsIHN0YXQpOwogCQkJZG9fZW5kX3JlcXVlc3QgPSAxOwogCQl9IGVsc2UgaWYgKChlcnIgJiB+QVRBX0FCT1JURUQpICE9IDApIHsKIAkJCS8qIGdvIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIgZm9yIG90aGVyIGVycm9ycyAqLwpAQCAtNDk1LDE0ICs0NDIsMTIgQEAKIAkJICovCiAJCWlmIChzdGF0ICYgQVRBX0VSUikKIAkJCWNkcm9tX3F1ZXVlX3JlcXVlc3Rfc2Vuc2UoZHJpdmUsIE5VTEwsIE5VTEwpOworCQlyZXR1cm4gMTsKIAl9IGVsc2UgewogCQlibGtfZHVtcF9ycV9mbGFncyhycSwgUEZYICJiYWQgcnEiKTsKLQkJY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOworCQlyZXR1cm4gMjsKIAl9CiAKLQkvKiByZXRyeSwgb3IgaGFuZGxlIHRoZSBuZXh0IHJlcXVlc3QgKi8KLQlyZXR1cm4gMTsKLQogZW5kX3JlcXVlc3Q6CiAJaWYgKHN0YXQgJiBBVEFfRVJSKSB7CiAJCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwpAQCAtNTE1LDEwICs0NjAsOSBAQAogCQlod2lmLT5ycSA9IE5VTEw7CiAKIAkJY2Ryb21fcXVldWVfcmVxdWVzdF9zZW5zZShkcml2ZSwgcnEtPnNlbnNlLCBycSk7CisJCXJldHVybiAxOwogCX0gZWxzZQotCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgMCk7Ci0KLQlyZXR1cm4gMTsKKwkJcmV0dXJuIDI7CiB9CiAKIC8qCkBAIC01NjIsMTAxICs1MDYsMTMgQEAKIAlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9QQykKIAkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEVEOwogCi0JY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOwogCXJldHVybiAtMTsKIH0KIAotLyoKLSAqIEFzc3VtZSB0aGF0IHRoZSBkcml2ZSB3aWxsIGFsd2F5cyBwcm92aWRlIGRhdGEgaW4gbXVsdGlwbGVzIG9mIGF0IGxlYXN0Ci0gKiBTRUNUT1JfU0laRSwgYXMgaXQgZ2V0cyBoYWlyeSB0byBrZWVwIHRyYWNrIG9mIHRoZSB0cmFuc2ZlcnMgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW50IGlkZV9jZF9jaGVja190cmFuc2Zlcl9zaXplKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGlkZV9jZF9yZXF1ZXN0X3NlbnNlX2ZpeHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImxlbjogJWQiLCBsZW4pOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IGNtZC0+cnE7CiAKLQlpZiAoKGxlbiAlIFNFQ1RPUl9TSVpFKSA9PSAwKQotCQlyZXR1cm4gMDsKLQotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiAlczogQmFkIHRyYW5zZmVyIHNpemUgJWRcbiIsIGRyaXZlLT5uYW1lLAotCQkJX19mdW5jX18sIGxlbik7Ci0KLQlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0xJTUlUX05GUkFNRVMpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIlRoaXMgZHJpdmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzICIKLQkJCQkidmVyc2lvbiBvZiB0aGUgZHJpdmVyXG4iKTsKLQllbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVHJ5aW5nIHRvIGxpbWl0IHRyYW5zZmVyIHNpemVzXG4iKTsKLQkJZHJpdmUtPmF0YXBpX2ZsYWdzIHw9IElERV9BRkxBR19MSU1JVF9ORlJBTUVTOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9jZF9wcmVwYXJlX3J3X3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLAotCQkJCQkJIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJycS0+Y21kX2ZsYWdzOiAweCV4IiwgcnEtPmNtZF9mbGFncyk7Ci0KLQlpZiAocnFfZGF0YV9kaXIocnEpID09IFJFQUQpIHsKLQkJdW5zaWduZWQgc2hvcnQgc2VjdG9yc19wZXJfZnJhbWUgPQotCQkJcXVldWVfaGFyZHNlY3Rfc2l6ZShkcml2ZS0+cXVldWUpID4+IFNFQ1RPUl9CSVRTOwotCQlpbnQgbnNraXAgPSBycS0+c2VjdG9yICYgKHNlY3RvcnNfcGVyX2ZyYW1lIC0gMSk7Ci0KLQkJLyoKLQkJICogSWYgdGhlIHJlcXVlc3RlZCBzZWN0b3IgZG9lc24ndCBzdGFydCBvbiBhIGZyYW1lIGJvdW5kYXJ5LAotCQkgKiB3ZSBtdXN0IGFkanVzdCB0aGUgc3RhcnQgb2YgdGhlIHRyYW5zZmVyIHNvIHRoYXQgaXQgZG9lcywKLQkJICogYW5kIHJlbWVtYmVyIHRvIHNraXAgdGhlIGZpcnN0IGZldyBzZWN0b3JzLgotCQkgKgotCQkgKiBJZiB0aGUgcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyBmaWVsZCBpcyBsYXJnZXIgdGhhbiB0aGUgc2l6ZQotCQkgKiBvZiB0aGUgYnVmZmVyLCBpdCB3aWxsIG1lYW4gdGhhdCB3ZSdyZSB0byBza2lwIGEgbnVtYmVyIG9mCi0JCSAqIHNlY3RvcnMgZXF1YWwgdG8gdGhlIGFtb3VudCBieSB3aGljaCBycS0+Y3VycmVudF9ucl9zZWN0b3JzCi0JCSAqIGlzIGxhcmdlciB0aGFuIHRoZSBidWZmZXIgc2l6ZS4KLQkJICovCi0JCWlmIChuc2tpcCA+IDApIHsKLQkJCS8qIHNhbml0eSBjaGVjay4uLiAqLwotCQkJaWYgKHJxLT5jdXJyZW50X25yX3NlY3RvcnMgIT0KLQkJCSAgICBiaW9fY3VyX3NlY3RvcnMocnEtPmJpbykpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogJXM6IGJ1ZmZlciBib3RjaCAoJXUpXG4iLAotCQkJCQkJZHJpdmUtPm5hbWUsIF9fZnVuY19fLAotCQkJCQkJcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7Ci0JCQkJY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOwotCQkJCXJldHVybiBpZGVfc3RvcHBlZDsKLQkJCX0KLQkJCXJxLT5jdXJyZW50X25yX3NlY3RvcnMgKz0gbnNraXA7Ci0JCX0KLQl9Ci0KLQkvKiBzZXQgdXAgdGhlIGNvbW1hbmQgKi8KLQlycS0+dGltZW91dCA9IEFUQVBJX1dBSVRfUEM7Ci0KLQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci19Ci0KLS8qCi0gKiBGaXggdXAgYSBwb3NzaWJseSBwYXJ0aWFsbHktcHJvY2Vzc2VkIHJlcXVlc3Qgc28gdGhhdCB3ZSBjYW4gc3RhcnQgaXQgb3ZlcgotICogZW50aXJlbHksIG9yIGV2ZW4gcHV0IGl0IGJhY2sgb24gdGhlIHJlcXVlc3QgcXVldWUuCi0gKi8KLXN0YXRpYyB2b2lkIGlkZV9jZF9yZXN0b3JlX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0KLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7Ci0KLQlpZiAocnEtPmJ1ZmZlciAhPSBiaW9fZGF0YShycS0+YmlvKSkgewotCQlzZWN0b3JfdCBuID0KLQkJCShycS0+YnVmZmVyIC0gKGNoYXIgKiliaW9fZGF0YShycS0+YmlvKSkgLyBTRUNUT1JfU0laRTsKLQotCQlycS0+YnVmZmVyID0gYmlvX2RhdGEocnEtPmJpbyk7Ci0JCXJxLT5ucl9zZWN0b3JzICs9IG47Ci0JCXJxLT5zZWN0b3IgLT0gbjsKLQl9Ci0JcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9IGJpb19jdXJfc2VjdG9ycyhycS0+YmlvKTsKLQlycS0+aGFyZF9jdXJfc2VjdG9ycyA9IHJxLT5jdXJyZW50X25yX3NlY3RvcnM7Ci0JcnEtPmhhcmRfbnJfc2VjdG9ycyA9IHJxLT5ucl9zZWN0b3JzOwotCXJxLT5oYXJkX3NlY3RvciA9IHJxLT5zZWN0b3I7Ci0JcnEtPnEtPnByZXBfcnFfZm4ocnEtPnEsIHJxKTsKLX0KLQotc3RhdGljIHZvaWQgaWRlX2NkX3JlcXVlc3Rfc2Vuc2VfZml4dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17CiAJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJycS0+Y21kWzBdOiAweCV4IiwgcnEtPmNtZFswXSk7CiAKIAkvKgpAQCAtNjY0LDExICs1MjAsMTQgQEAKIAkgKiBhbmQgc29tZSBkcml2ZXMgZG9uJ3Qgc2VuZCB0aGVtLiAgU2lnaC4KIAkgKi8KIAlpZiAocnEtPmNtZFswXSA9PSBHUENNRF9SRVFVRVNUX1NFTlNFICYmCi0JICAgIHJxLT5kYXRhX2xlbiA+IDAgJiYgcnEtPmRhdGFfbGVuIDw9IDUpCi0JCXdoaWxlIChycS0+ZGF0YV9sZW4gPiAwKSB7Ci0JCQkqKHU4ICopcnEtPmRhdGErKyA9IDA7Ci0JCQktLXJxLT5kYXRhX2xlbjsKKwkgICAgY21kLT5ubGVmdCA+IDAgJiYgY21kLT5ubGVmdCA8PSA1KSB7CisJCXVuc2lnbmVkIGludCBvZnMgPSBjbWQtPm5ieXRlcyAtIGNtZC0+bmxlZnQ7CisKKwkJd2hpbGUgKGNtZC0+bmxlZnQgPiAwKSB7CisJCQkqKCh1OCAqKXJxLT5kYXRhICsgb2ZzKyspID0gMDsKKwkJCWNtZC0+bmxlZnQtLTsKIAkJfQorCX0KIH0KIAogaW50IGlkZV9jZF9xdWV1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNtZCwKQEAgLTc0OCwyNCArNjA3LDI2IEBACiAJcmV0dXJuIChmbGFncyAmIFJFUV9GQUlMRUQpID8gLUVJTyA6IDA7CiB9CiAKLS8qCi0gKiBDYWxsZWQgZnJvbSBibGtfZW5kX3JlcXVlc3RfY2FsbGJhY2soKSBhZnRlciB0aGUgZGF0YSBvZiB0aGUgcmVxdWVzdCBpcwotICogY29tcGxldGVkIGFuZCBiZWZvcmUgdGhlIHJlcXVlc3QgaXRzZWxmIGlzIGNvbXBsZXRlZC4gQnkgcmV0dXJuaW5nIHZhbHVlICcxJywKLSAqIGJsa19lbmRfcmVxdWVzdF9jYWxsYmFjaygpIHJldHVybnMgaW1tZWRpYXRlbHkgd2l0aG91dCBjb21wbGV0aW5nIGl0LgotICovCi1zdGF0aWMgaW50IGNkcm9tX25ld3BjX2ludHJfZHVtbXlfY2Ioc3RydWN0IHJlcXVlc3QgKnJxKQorc3RhdGljIHZvaWQgaWRlX2NkX2Vycm9yX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7Ci0JcmV0dXJuIDE7CisJdW5zaWduZWQgaW50IG5yX2J5dGVzID0gY21kLT5uYnl0ZXMgLSBjbWQtPm5sZWZ0OworCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpCisJCW5yX2J5dGVzIC09IGNtZC0+bGFzdF94ZmVyX2xlbjsKKworCWlmIChucl9ieXRlcyA+IDApCisJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgbnJfYnl0ZXMpOwogfQogCiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGNkcm9tX25ld3BjX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKLQl4ZmVyX2Z1bmNfdCAqeGZlcmZ1bmM7CiAJaWRlX2V4cGlyeV90ICpleHBpcnkgPSBOVUxMOwogCWludCBkbWFfZXJyb3IgPSAwLCBkbWEsIHN0YXQsIHRoaXNsZW4sIHVwdG9kYXRlID0gMDsKLQlpbnQgd3JpdGUgPSAocnFfZGF0YV9kaXIocnEpID09IFdSSVRFKSA/IDEgOiAwOworCWludCB3cml0ZSA9IChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpID8gMSA6IDAsIHJjLCBuc2VjdG9yczsKKwlpbnQgc2Vuc2UgPSBibGtfc2Vuc2VfcmVxdWVzdChycSk7CiAJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAJdTE2IGxlbjsKIAl1OCBpcmVhc29uOwpAQCAtNzc3LDcgKzYzOCw5IEBACiAJZG1hID0gZHJpdmUtPmRtYTsKIAlpZiAoZG1hKSB7CiAJCWRyaXZlLT5kbWEgPSAwOworCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIAkJZG1hX2Vycm9yID0gaHdpZi0+ZG1hX29wcy0+ZG1hX2VuZChkcml2ZSk7CisJCWlkZV9kbWFfdW5tYXBfc2coZHJpdmUsIGNtZCk7CiAJCWlmIChkbWFfZXJyb3IpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBETUEgJXMgZXJyb3JcbiIsIGRyaXZlLT5uYW1lLAogCQkJCQl3cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIpOwpAQCAtNzg1LDI3ICs2NDgsMjQgQEAKIAkJfQogCX0KIAotCWlmIChjZHJvbV9kZWNvZGVfc3RhdHVzKGRyaXZlLCAwLCAmc3RhdCkpCisJcmMgPSBjZHJvbV9kZWNvZGVfc3RhdHVzKGRyaXZlLCAwLCAmc3RhdCk7CisJaWYgKHJjKSB7CisJCWlmIChyYyA9PSAyKQorCQkJZ290byBvdXRfZW5kOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJfQogCiAJLyogdXNpbmcgZG1hLCB0cmFuc2ZlciBpcyBjb21wbGV0ZSBub3cgKi8KIAlpZiAoZG1hKSB7CiAJCWlmIChkbWFfZXJyb3IpCiAJCQlyZXR1cm4gaWRlX2Vycm9yKGRyaXZlLCAiZG1hIGVycm9yIiwgc3RhdCk7Ci0JCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKLQkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgcnEtPm5yX3NlY3RvcnMKLQkJCQk/IChycS0+bnJfc2VjdG9ycyA8PCA5KSA6IGlkZV9ycV9ieXRlcyhycSkpOwotCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQl9IGVsc2UgaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfUEMgJiYgIXJxLT5iaW8pIHsKLQkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgNTEyKTsKLQkJCXJldHVybiBpZGVfc3RvcHBlZDsKLQkJfQotCQlnb3RvIGVuZF9yZXF1ZXN0OworCQl1cHRvZGF0ZSA9IDE7CisJCWdvdG8gb3V0X2VuZDsKIAl9CiAKIAlpZGVfcmVhZF9iY291bnRfYW5kX2lyZWFzb24oZHJpdmUsICZsZW4sICZpcmVhc29uKTsKIAotCXRoaXNsZW4gPSBibGtfZnNfcmVxdWVzdChycSkgPyBsZW4gOiBycS0+ZGF0YV9sZW47CisJdGhpc2xlbiA9IGJsa19mc19yZXF1ZXN0KHJxKSA/IGxlbiA6IGNtZC0+bmxlZnQ7CiAJaWYgKHRoaXNsZW4gPiBsZW4pCiAJCXRoaXNsZW4gPSBsZW47CiAKQEAgLTgyMCw2MCArNjgwLDMwIEBACiAJCQkgKiBPdGhlcndpc2UsIGNvbXBsZXRlIHRoZSBjb21tYW5kIG5vcm1hbGx5LgogCQkJICovCiAJCQl1cHRvZGF0ZSA9IDE7Ci0JCQlpZiAocnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA+IDApIHsKKwkJCWlmIChjbWQtPm5sZWZ0ID4gMCkgewogCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiAlczogZGF0YSB1bmRlcnJ1biAiCi0JCQkJCQkiKCVkIGJsb2NrcylcbiIsCi0JCQkJCQlkcml2ZS0+bmFtZSwgX19mdW5jX18sCi0JCQkJCQlycS0+Y3VycmVudF9ucl9zZWN0b3JzKTsKKwkJCQkJIigldSBieXRlcylcbiIsIGRyaXZlLT5uYW1lLCBfX2Z1bmNfXywKKwkJCQkJY21kLT5ubGVmdCk7CiAJCQkJaWYgKCF3cml0ZSkKIAkJCQkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEVEOwogCQkJCXVwdG9kYXRlID0gMDsKIAkJCX0KLQkJCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSk7Ci0JCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0gZWxzZSBpZiAoIWJsa19wY19yZXF1ZXN0KHJxKSkgewotCQkJaWRlX2NkX3JlcXVlc3Rfc2Vuc2VfZml4dXAoZHJpdmUsIHJxKTsKKwkJCWlkZV9jZF9yZXF1ZXN0X3NlbnNlX2ZpeHVwKGRyaXZlLCBjbWQpOwogCQkJLyogY29tcGxhaW4gaWYgd2Ugc3RpbGwgaGF2ZSBkYXRhIGxlZnQgdG8gdHJhbnNmZXIgKi8KLQkJCXVwdG9kYXRlID0gcnEtPmRhdGFfbGVuID8gMCA6IDE7CisJCQl1cHRvZGF0ZSA9IGNtZC0+bmxlZnQgPyAwIDogMTsKKwkJCWlmICh1cHRvZGF0ZSA9PSAwKQorCQkJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxFRDsKIAkJfQotCQlnb3RvIGVuZF9yZXF1ZXN0OworCQlnb3RvIG91dF9lbmQ7CiAJfQogCiAJLyogY2hlY2sgd2hpY2ggd2F5IHRvIHRyYW5zZmVyIGRhdGEgKi8KLQlpZiAoaWRlX2NkX2NoZWNrX2lyZWFzb24oZHJpdmUsIHJxLCBsZW4sIGlyZWFzb24sIHdyaXRlKSkKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCXJjID0gaWRlX2NkX2NoZWNrX2lyZWFzb24oZHJpdmUsIHJxLCBsZW4sIGlyZWFzb24sIHdyaXRlKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2VuZDsKIAotCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKLQkJaWYgKHdyaXRlID09IDApIHsKLQkJCWludCBuc2tpcDsKLQotCQkJaWYgKGlkZV9jZF9jaGVja190cmFuc2Zlcl9zaXplKGRyaXZlLCBsZW4pKSB7Ci0JCQkJY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOwotCQkJCXJldHVybiBpZGVfc3RvcHBlZDsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIEZpcnN0LCBmaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gYml0LWJ1Y2tldAotCQkJICogYW55IG9mIHRoZSBsZWFkaW5nIHNlY3RvcnMuCi0JCQkgKi8KLQkJCW5za2lwID0gbWluX3QoaW50LCBycS0+Y3VycmVudF9ucl9zZWN0b3JzCi0JCQkJCSAgIC0gYmlvX2N1cl9zZWN0b3JzKHJxLT5iaW8pLAotCQkJCQkgICB0aGlzbGVuID4+IDkpOwotCQkJaWYgKG5za2lwID4gMCkgewotCQkJCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIHdyaXRlLCBuc2tpcCA8PCA5KTsKLQkJCQlycS0+Y3VycmVudF9ucl9zZWN0b3JzIC09IG5za2lwOwotCQkJCXRoaXNsZW4gLT0gKG5za2lwIDw8IDkpOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGlyZWFzb24gPT0gMCkgewotCQl3cml0ZSA9IDE7Ci0JCXhmZXJmdW5jID0gaHdpZi0+dHBfb3BzLT5vdXRwdXRfZGF0YTsKLQl9IGVsc2UgewotCQl3cml0ZSA9IDA7Ci0JCXhmZXJmdW5jID0gaHdpZi0+dHBfb3BzLT5pbnB1dF9kYXRhOwotCX0KKwljbWQtPmxhc3RfeGZlcl9sZW4gPSAwOwogCiAJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiZGF0YSB0cmFuc2ZlciwgcnEtPmNtZF90eXBlOiAweCV4LCAiCiAJCQkJICAiaXJlYXNvbjogMHgleCIsCkBAIC04ODEsNzUgKzcxMSwzMSBAQAogCiAJLyogdHJhbnNmZXIgZGF0YSAqLwogCXdoaWxlICh0aGlzbGVuID4gMCkgewotCQl1OCAqcHRyID0gYmxrX2ZzX3JlcXVlc3QocnEpID8gTlVMTCA6IHJxLT5kYXRhOwotCQlpbnQgYmxlbiA9IHJxLT5kYXRhX2xlbjsKKwkJaW50IGJsZW4gPSBtaW5fdChpbnQsIHRoaXNsZW4sIGNtZC0+bmxlZnQpOwogCi0JCS8qIGJpbyBiYWNrZWQ/ICovCi0JCWlmIChycS0+YmlvKSB7Ci0JCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7Ci0JCQkJcHRyID0gcnEtPmJ1ZmZlcjsKLQkJCQlibGVuID0gcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA8PCA5OwotCQkJfSBlbHNlIHsKLQkJCQlwdHIgPSBiaW9fZGF0YShycS0+YmlvKTsKLQkJCQlibGVuID0gYmlvX2lvdmVjKHJxLT5iaW8pLT5idl9sZW47Ci0JCQl9Ci0JCX0KLQotCQlpZiAoIXB0cikgewotCQkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSAmJiAhd3JpdGUpCi0JCQkJLyoKLQkJCQkgKiBJZiB0aGUgYnVmZmVycyBhcmUgZnVsbCwgcGlwZSB0aGUgcmVzdCBpbnRvCi0JCQkJICogb2JsaXZpb24uCi0JCQkJICovCi0JCQkJaWRlX3BhZF90cmFuc2Zlcihkcml2ZSwgMCwgdGhpc2xlbik7Ci0JCQllbHNlIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY29uZnVzZWQsIG1pc3NpbmcgZGF0YVxuIiwKLQkJCQkJCWRyaXZlLT5uYW1lKTsKLQkJCQlibGtfZHVtcF9ycV9mbGFncyhycSwgcnFfZGF0YV9kaXIocnEpCi0JCQkJCQkgID8gImNkcm9tX25ld3BjX2ludHIsIHdyaXRlIgotCQkJCQkJICA6ICJjZHJvbV9uZXdwY19pbnRyLCByZWFkIik7Ci0JCQl9CisJCWlmIChjbWQtPm5sZWZ0ID09IDApCiAJCQlicmVhazsKLQkJfQogCi0JCWlmIChibGVuID4gdGhpc2xlbikKLQkJCWJsZW4gPSB0aGlzbGVuOwotCi0JCXhmZXJmdW5jKGRyaXZlLCBOVUxMLCBwdHIsIGJsZW4pOworCQlpZGVfcGlvX2J5dGVzKGRyaXZlLCBjbWQsIHdyaXRlLCBibGVuKTsKKwkJY21kLT5sYXN0X3hmZXJfbGVuICs9IGJsZW47CiAKIAkJdGhpc2xlbiAtPSBibGVuOwogCQlsZW4gLT0gYmxlbjsKIAotCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7Ci0JCQlycS0+YnVmZmVyICs9IGJsZW47Ci0JCQlycS0+bnJfc2VjdG9ycyAtPSAoYmxlbiA+PiA5KTsKLQkJCXJxLT5jdXJyZW50X25yX3NlY3RvcnMgLT0gKGJsZW4gPj4gOSk7Ci0JCQlycS0+c2VjdG9yICs9IChibGVuID4+IDkpOwotCi0JCQlpZiAocnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9PSAwICYmIHJxLT5ucl9zZWN0b3JzKQotCQkJCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCAxKTsKLQkJfSBlbHNlIHsKLQkJCXJxLT5kYXRhX2xlbiAtPSBibGVuOwotCi0JCQkvKgotCQkJICogVGhlIHJlcXVlc3QgY2FuJ3QgYmUgY29tcGxldGVkIHVudGlsIERSUSBpcyBjbGVhcmVkLgotCQkJICogU28gY29tcGxldGUgdGhlIGRhdGEsIGJ1dCBkb24ndCBjb21wbGV0ZSB0aGUgcmVxdWVzdAotCQkJICogdXNpbmcgdGhlIGR1bW15IGZ1bmN0aW9uIGZvciB0aGUgY2FsbGJhY2sgZmVhdHVyZQotCQkJICogb2YgYmxrX2VuZF9yZXF1ZXN0X2NhbGxiYWNrKCkuCi0JCQkgKi8KLQkJCWlmIChycS0+YmlvKQotCQkJCWJsa19lbmRfcmVxdWVzdF9jYWxsYmFjayhycSwgMCwgYmxlbiwKLQkJCQkJCSBjZHJvbV9uZXdwY19pbnRyX2R1bW15X2NiKTsKLQkJCWVsc2UKLQkJCQlycS0+ZGF0YSArPSBibGVuOwotCQl9Ci0JCWlmICghd3JpdGUgJiYgYmxrX3NlbnNlX3JlcXVlc3QocnEpKQorCQlpZiAoc2Vuc2UgJiYgd3JpdGUgPT0gMCkKIAkJCXJxLT5zZW5zZV9sZW4gKz0gYmxlbjsKIAl9CiAKIAkvKiBwYWQsIGlmIG5lY2Vzc2FyeSAqLwotCWlmICghYmxrX2ZzX3JlcXVlc3QocnEpICYmIGxlbiA+IDApCi0JCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIHdyaXRlLCBsZW4pOworCWlmIChsZW4gPiAwKSB7CisJCWlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCB8fCB3cml0ZSA9PSAwKQorCQkJaWRlX3BhZF90cmFuc2Zlcihkcml2ZSwgd3JpdGUsIGxlbik7CisJCWVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNvbmZ1c2VkLCBtaXNzaW5nIGRhdGFcbiIsCisJCQkJZHJpdmUtPm5hbWUpOworCQkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsICJjZHJvbV9uZXdwY19pbnRyIik7CisJCX0KKwl9CiAKIAlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7CiAJCXRpbWVvdXQgPSBycS0+dGltZW91dDsKQEAgLTk2MywyMSArNzQ5LDUwIEBACiAJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCBjZHJvbV9uZXdwY19pbnRyLCB0aW1lb3V0KTsKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAKLWVuZF9yZXF1ZXN0OgotCWlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKK291dF9lbmQ6CisJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSAmJiByYyA9PSAwKSB7CiAJCXVuc2lnbmVkIGludCBkbGVuID0gcnEtPmRhdGFfbGVuOwogCi0JCWlmIChkbWEpCi0JCQlycS0+ZGF0YV9sZW4gPSAwOworCQlycS0+ZGF0YV9sZW4gPSAwOwogCiAJCWlmIChibGtfZW5kX3JlcXVlc3QocnEsIDAsIGRsZW4pKQogCQkJQlVHKCk7CiAKIAkJaHdpZi0+cnEgPSBOVUxMOwogCX0gZWxzZSB7Ci0JCWlmICghdXB0b2RhdGUpCi0JCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRUQ7Ci0JCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSk7CisJCWlmIChzZW5zZSAmJiB1cHRvZGF0ZSkKKwkJCWlkZV9jZF9jb21wbGV0ZV9mYWlsZWRfcnEoZHJpdmUsIHJxKTsKKworCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7CisJCQlpZiAoY21kLT5ubGVmdCA9PSAwKQorCQkJCXVwdG9kYXRlID0gMTsKKwkJfSBlbHNlIHsKKwkJCWlmICh1cHRvZGF0ZSA8PSAwICYmIHJxLT5lcnJvcnMgPT0gMCkKKwkJCQlycS0+ZXJyb3JzID0gLUVJTzsKKwkJfQorCisJCWlmICh1cHRvZGF0ZSA9PSAwKQorCQkJaWRlX2NkX2Vycm9yX2NtZChkcml2ZSwgY21kKTsKKworCQkvKiBtYWtlIHN1cmUgaXQncyBmdWxseSBlbmRlZCAqLworCQlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKQorCQkJbnNlY3RvcnMgPSAocnEtPmRhdGFfbGVuICsgNTExKSA+PiA5OworCQllbHNlCisJCQluc2VjdG9ycyA9IHJxLT5oYXJkX25yX3NlY3RvcnM7CisKKwkJaWYgKG5zZWN0b3JzID09IDApCisJCQluc2VjdG9ycyA9IDE7CisKKwkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSA9PSAwKSB7CisJCQlycS0+ZGF0YV9sZW4gLT0gKGNtZC0+bmJ5dGVzIC0gY21kLT5ubGVmdCk7CisJCQlpZiAodXB0b2RhdGUgPT0gMCAmJiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkpCisJCQkJcnEtPmRhdGFfbGVuICs9IGNtZC0+bGFzdF94ZmVyX2xlbjsKKwkJfQorCisJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgdXB0b2RhdGUgPyAwIDogLUVJTywgbnNlY3RvcnMgPDwgOSk7CisKKwkJaWYgKHNlbnNlICYmIHJjID09IDIpCisJCQlpZGVfZXJyb3IoZHJpdmUsICJyZXF1ZXN0IHNlbnNlIGZhaWx1cmUiLCBzdGF0KTsKIAl9CiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQpAQCAtOTg1LDQyICs4MDAsNDAgQEAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgY2Ryb21fc3RhcnRfcncoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJc3RydWN0IGNkcm9tX2luZm8gKmNkID0gZHJpdmUtPmRyaXZlcl9kYXRhOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwogCWludCB3cml0ZSA9IHJxX2RhdGFfZGlyKHJxKSA9PSBXUklURTsKIAl1bnNpZ25lZCBzaG9ydCBzZWN0b3JzX3Blcl9mcmFtZSA9Ci0JCXF1ZXVlX2hhcmRzZWN0X3NpemUoZHJpdmUtPnF1ZXVlKSA+PiBTRUNUT1JfQklUUzsKKwkJcXVldWVfaGFyZHNlY3Rfc2l6ZShxKSA+PiBTRUNUT1JfQklUUzsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgInJxLT5jbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAicnEtPmNtZFswXTogMHgleCwgcnEtPmNtZF9mbGFnczogMHgleCwgIgogCQkJCSAgInNlY3NfcGVyX2ZyYW1lOiAldSIsCi0JCQkJICBycS0+Y21kWzBdLCB3cml0ZSwgc2VjdG9yc19wZXJfZnJhbWUpOworCQkJCSAgcnEtPmNtZFswXSwgcnEtPmNtZF9mbGFncywgc2VjdG9yc19wZXJfZnJhbWUpOwogCiAJaWYgKHdyaXRlKSB7CiAJCS8qIGRpc2sgaGFzIGJlY29tZSB3cml0ZSBwcm90ZWN0ZWQgKi8KLQkJaWYgKGdldF9kaXNrX3JvKGNkLT5kaXNrKSkgewotCQkJY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDApOworCQlpZiAoZ2V0X2Rpc2tfcm8oY2QtPmRpc2spKQogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQl9CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogV2UgbWF5IGJlIHJldHJ5aW5nIHRoaXMgcmVxdWVzdCBhZnRlciBhbiBlcnJvci4gIEZpeCB1cCBhbnkKIAkJICogd2VpcmRuZXNzIHdoaWNoIG1pZ2h0IGJlIHByZXNlbnQgaW4gdGhlIHJlcXVlc3QgcGFja2V0LgogCQkgKi8KLQkJaWRlX2NkX3Jlc3RvcmVfcmVxdWVzdChkcml2ZSwgcnEpOworCQlxLT5wcmVwX3JxX2ZuKHEsIHJxKTsKIAl9CiAKLQkvKiB1c2UgRE1BLCBpZiBwb3NzaWJsZSAvIHdyaXRlcyAqbXVzdCogYmUgaGFyZHdhcmUgZnJhbWUgYWxpZ25lZCAqLworCS8qIGZzIHJlcXVlc3RzICptdXN0KiBiZSBoYXJkd2FyZSBmcmFtZSBhbGlnbmVkICovCiAJaWYgKChycS0+bnJfc2VjdG9ycyAmIChzZWN0b3JzX3Blcl9mcmFtZSAtIDEpKSB8fAotCSAgICAocnEtPnNlY3RvciAmIChzZWN0b3JzX3Blcl9mcmFtZSAtIDEpKSkgewotCQlpZiAod3JpdGUpIHsKLQkJCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCAwKTsKLQkJCXJldHVybiBpZGVfc3RvcHBlZDsKLQkJfQotCQlkcml2ZS0+ZG1hID0gMDsKLQl9IGVsc2UKLQkJZHJpdmUtPmRtYSA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKTsKKwkgICAgKHJxLT5zZWN0b3IgJiAoc2VjdG9yc19wZXJfZnJhbWUgLSAxKSkpCisJCXJldHVybiBpZGVfc3RvcHBlZDsKKworCS8qIHVzZSBETUEsIGlmIHBvc3NpYmxlICovCisJZHJpdmUtPmRtYSA9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKTsKIAogCWlmICh3cml0ZSkKIAkJY2QtPmRldmluZm8ubWVkaWFfd3JpdHRlbiA9IDE7CiAKKwlycS0+dGltZW91dCA9IEFUQVBJX1dBSVRfUEM7CisKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiB9CiAKQEAgLTEwNjgsNiArODgxLDcgQEAKIAkJCQkJc2VjdG9yX3QgYmxvY2spCiB7CiAJc3RydWN0IGlkZV9jbWQgY21kOworCWludCB1cHRvZGF0ZSA9IDAsIG5zZWN0b3JzOwogCiAJaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiY21kOiAweCV4LCBibG9jazogJWxsdSIsCiAJCQkJICBycS0+Y21kWzBdLCAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrKTsKQEAgLTEwNzcsMTAgKzg5MSw3IEBACiAKIAlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7CiAJCWlmIChjZHJvbV9zdGFydF9ydyhkcml2ZSwgcnEpID09IGlkZV9zdG9wcGVkKQotCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCi0JCWlmIChpZGVfY2RfcHJlcGFyZV9yd19yZXF1ZXN0KGRyaXZlLCBycSkgPT0gaWRlX3N0b3BwZWQpCi0JCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCQlnb3RvIG91dF9lbmQ7CiAJfSBlbHNlIGlmIChibGtfc2Vuc2VfcmVxdWVzdChycSkgfHwgYmxrX3BjX3JlcXVlc3QocnEpIHx8CiAJCSAgIHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfUEMpIHsKIAkJaWYgKCFycS0+dGltZW91dCkKQEAgLTEwODksMTIgKzkwMCwxMyBAQAogCQljZHJvbV9kb19ibG9ja19wYyhkcml2ZSwgcnEpOwogCX0gZWxzZSBpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKIAkJLyogcmlnaHQgbm93IHRoaXMgY2FuIG9ubHkgYmUgYSByZXNldC4uLiAqLwotCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgMSk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJdXB0b2RhdGUgPSAxOworCQlnb3RvIG91dF9lbmQ7CiAJfSBlbHNlIHsKIAkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsIERSVl9OQU1FICIgYmFkIGZsYWdzIik7Ci0JCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCAwKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQlpZiAocnEtPmVycm9ycyA9PSAwKQorCQkJcnEtPmVycm9ycyA9IC1FSU87CisJCWdvdG8gb3V0X2VuZDsKIAl9CiAKIAltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwpAQCAtMTEwNCw3ICs5MTYsMjIgQEAKIAogCWNtZC5ycSA9IHJxOwogCisJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSB8fCBycS0+ZGF0YV9sZW4pIHsKKwkJaWRlX2luaXRfc2dfY21kKCZjbWQsIGJsa19mc19yZXF1ZXN0KHJxKSA/IChycS0+bnJfc2VjdG9ycyA8PCA5KQorCQkJCQkJCSA6IHJxLT5kYXRhX2xlbik7CisJCWlkZV9tYXBfc2coZHJpdmUsICZjbWQpOworCX0KKwogCXJldHVybiBpZGVfaXNzdWVfcGMoZHJpdmUsICZjbWQpOworb3V0X2VuZDoKKwluc2VjdG9ycyA9IHJxLT5oYXJkX25yX3NlY3RvcnM7CisKKwlpZiAobnNlY3RvcnMgPT0gMCkKKwkJbnNlY3RvcnMgPSAxOworCisJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCB1cHRvZGF0ZSA/IDAgOiAtRUlPLCBuc2VjdG9ycyA8PCA5KTsKKworCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KIAogLyoKQEAgLTE2OTYsOSArMTUyMyw2IEBACiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjZF9saXN0X2VudHJ5IGlkZV9jZF9xdWlya3NfbGlzdFtdID0gewotCS8qIExpbWl0IHRyYW5zZmVyIHNpemUgcGVyIGludGVycnVwdC4gKi8KLQl7ICJTQU1TVU5HIENELVJPTSBTQ1ItMjQzMCIsIE5VTEwsICAgSURFX0FGTEFHX0xJTUlUX05GUkFNRVMJICAgICB9LAotCXsgIlNBTVNVTkcgQ0QtUk9NIFNDUi0yNDMyIiwgTlVMTCwgICBJREVfQUZMQUdfTElNSVRfTkZSQU1FUwkgICAgIH0sCiAJLyogU0NSLTMyMzEgZG9lc24ndCBzdXBwb3J0IHRoZSBTRVRfQ0RfU1BFRUQgY29tbWFuZC4gKi8KIAl7ICJTQU1TVU5HIENELVJPTSBTQ1ItMzIzMSIsIE5VTEwsICAgSURFX0FGTEFHX05PX1NQRUVEX1NFTEVDVAkgICAgIH0sCiAJLyogT2xkIE5FQzI2MCAobm90IFIpIHdhcyByZWxlYXNlZCBiZWZvcmUgQVRBUEkgMS4yIHNwZWMuICovCkBAIC0xNzU5LDE4ICsxNTgzLDE4IEBACiB7CiAJc3RydWN0IGNkcm9tX2luZm8gKmNkID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpID0gJmNkLT5kZXZpbmZvOworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwogCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAJY2hhciAqZndfcmV2ID0gKGNoYXIgKikmaWRbQVRBX0lEX0ZXX1JFVl07CiAJaW50IG5zbG90czsKIAogCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgImVudGVyIik7CiAKLQlibGtfcXVldWVfcHJlcF9ycShkcml2ZS0+cXVldWUsIGlkZV9jZHJvbV9wcmVwX2ZuKTsKLQlibGtfcXVldWVfZG1hX2FsaWdubWVudChkcml2ZS0+cXVldWUsIDMxKTsKLQlibGtfcXVldWVfdXBkYXRlX2RtYV9wYWQoZHJpdmUtPnF1ZXVlLCAxNSk7Ci0JZHJpdmUtPnF1ZXVlLT51bnBsdWdfZGVsYXkgPSAoMSAqIEhaKSAvIDEwMDA7Ci0JaWYgKCFkcml2ZS0+cXVldWUtPnVucGx1Z19kZWxheSkKLQkJZHJpdmUtPnF1ZXVlLT51bnBsdWdfZGVsYXkgPSAxOworCWJsa19xdWV1ZV9wcmVwX3JxKHEsIGlkZV9jZHJvbV9wcmVwX2ZuKTsKKwlibGtfcXVldWVfZG1hX2FsaWdubWVudChxLCAzMSk7CisJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfcGFkKHEsIDE1KTsKKworCXEtPnVucGx1Z19kZWxheSA9IG1heCgoMSAqIEhaKSAvIDEwMDAsIDEpOwogCiAJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTUVESUFfQ0hBTkdFRDsKIAlkcml2ZS0+YXRhcGlfZmxhZ3MgPSBJREVfQUZMQUdfTk9fRUpFQ1QgfCBpZGVfY2RfZmxhZ3MoaWQpOwpAQCAtMTc4OCw4ICsxNjEyLDcgQEAKIAogCW5zbG90cyA9IGlkZV9jZHJvbV9wcm9iZV9jYXBhYmlsaXRpZXMoZHJpdmUpOwogCi0JLyogc2V0IGNvcnJlY3QgYmxvY2sgc2l6ZSAqLwotCWJsa19xdWV1ZV9oYXJkc2VjdF9zaXplKGRyaXZlLT5xdWV1ZSwgQ0RfRlJBTUVTSVpFKTsKKwlibGtfcXVldWVfaGFyZHNlY3Rfc2l6ZShxLCBDRF9GUkFNRVNJWkUpOwogCiAJaWYgKGlkZV9jZHJvbV9yZWdpc3Rlcihkcml2ZSwgbnNsb3RzKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogJXMgZmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZSB3aXRoIHRoZSIKQEAgLTE5NjgsOSArMTc5MSw2IEBACiB9OwogCiAvKiBtb2R1bGUgb3B0aW9ucyAqLwotc3RhdGljIGNoYXIgKmlnbm9yZTsKLW1vZHVsZV9wYXJhbShpZ25vcmUsIGNoYXJwLCAwNDAwKTsKLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVidWdfbWFzazsKIG1vZHVsZV9wYXJhbShkZWJ1Z19tYXNrLCB1bG9uZywgMDY0NCk7CiAKQEAgLTE5OTEsMTUgKzE4MTEsNiBAQAogCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Nkcm9tICYmIGRyaXZlLT5tZWRpYSAhPSBpZGVfb3B0aWNhbCkKIAkJZ290byBmYWlsZWQ7CiAKLQkvKiBza2lwIGRyaXZlcyB0aGF0IHdlIHdlcmUgdG9sZCB0byBpZ25vcmUgKi8KLQlpZiAoaWdub3JlICE9IE5VTEwpIHsKLQkJaWYgKHN0cnN0cihpZ25vcmUsIGRyaXZlLT5uYW1lKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImlnbm9yaW5nIGRyaXZlICVzXG4iLAotCQkJCQkgZHJpdmUtPm5hbWUpOwotCQkJZ290byBmYWlsZWQ7Ci0JCX0KLQl9Ci0KIAlkcml2ZS0+ZGVidWdfbWFzayA9IGRlYnVnX21hc2s7CiAJZHJpdmUtPmlycV9oYW5kbGVyID0gY2Ryb21fbmV3cGNfaW50cjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKaW5kZXggY2E5MzRjOC4uYzk5OGNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAlpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAKIAkvKiBpZiBPSywgY29tcHV0ZSBtYXhpbXVtIGFkZHJlc3MgdmFsdWUgKi8KLQlpZiAoKHRmLT5zdGF0dXMgJiAweDAxKSA9PSAwKQorCWlmICghKHRmLT5zdGF0dXMgJiBBVEFfRVJSKSkKIAkJYWRkciA9IGlkZV9nZXRfbGJhX2FkZHIodGYsIGxiYTQ4KSArIDE7CiAKIAlyZXR1cm4gYWRkcjsKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCWlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIAogCS8qIGlmIE9LLCBjb21wdXRlIG1heGltdW0gYWRkcmVzcyB2YWx1ZSAqLwotCWlmICgodGYtPnN0YXR1cyAmIDB4MDEpID09IDApCisJaWYgKCEodGYtPnN0YXR1cyAmIEFUQV9FUlIpKQogCQlhZGRyX3NldCA9IGlkZV9nZXRfbGJhX2FkZHIodGYsIGxiYTQ4KSArIDE7CiAKIAlyZXR1cm4gYWRkcl9zZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jIGIvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYwppbmRleCA3NWE5ZWEyLi4xNmZjNDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMKQEAgLTM4LDEwICszOCw5IEBACiAJICogRW5hYmxlIERNQSBvbiBhbnkgZHJpdmUgdGhhdCBoYXMgbW9kZTIgRE1BCiAJICogKG11bHRpIG9yIHNpbmdsZSkgZW5hYmxlZAogCSAqLwotCWlmIChpZFtBVEFfSURfRklFTERfVkFMSURdICYgMikJLyogcmVndWxhciBETUEgKi8KLQkJaWYgKChpZFtBVEFfSURfTVdETUFfTU9ERVNdICYgMHg0MDQpID09IDB4NDA0IHx8Ci0JCSAgICAoaWRbQVRBX0lEX1NXRE1BX01PREVTXSAmIDB4NDA0KSA9PSAweDQwNCkKLQkJCXJldHVybiAxOworCWlmICgoaWRbQVRBX0lEX01XRE1BX01PREVTXSAmIDB4NDA0KSA9PSAweDQwNCB8fAorCSAgICAoaWRbQVRBX0lEX1NXRE1BX01PREVTXSAmIDB4NDA0KSA9PSAweDQwNCkKKwkJcmV0dXJuIDE7CiAKIAkvKiBDb25zdWx0IHRoZSBsaXN0IG9mIGtub3duICJnb29kIiBkcml2ZXMgKi8KIAlpZiAoaWRlX2RtYV9nb29kX2RyaXZlKGRyaXZlKSkKQEAgLTE2Niw4ICsxNjUsNiBAQAogCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzXG4iLCBkcml2ZS0+bmFtZSwKIAkJY291bnQgPyAiRE1BIHRhYmxlIHRvbyBzbWFsbCIgOiAiZW1wdHkgRE1BIHRhYmxlPyIpOwogCi0JaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwotCiAJcmV0dXJuIDA7IC8qIHJldmVydCB0byBQSU8gZm9yIHRoaXMgcmVxdWVzdCAqLwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2J1aWxkX2RtYXRhYmxlKTsKQEAgLTIxOCw3ICsyMTUsNiBAQAogCS8qIGNsZWFyIElOVFIgJiBFUlJPUiBmbGFncyAqLwogCWlkZV9kbWFfc2ZmX3dyaXRlX3N0YXR1cyhod2lmLCBkbWFfc3RhdCB8IEFUQV9ETUFfRVJSIHwgQVRBX0RNQV9JTlRSKTsKIAotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9zZXR1cCk7CkBAIC0yOTIsOCArMjg4LDYgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTggZG1hX3N0YXQgPSAwLCBkbWFfY21kID0gMCwgbWFzazsKIAotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwotCiAJLyogc3RvcCBETUEgKi8KIAlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSB7CiAJCWRtYV9jbWQgPSByZWFkYigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKQEAgLTMxMCw4ICszMDQsNiBAQAogCS8qIGNsZWFyIElOVFIgJiBFUlJPUiBiaXRzICovCiAJaWRlX2RtYV9zZmZfd3JpdGVfc3RhdHVzKGh3aWYsIGRtYV9zdGF0IHwgQVRBX0RNQV9FUlIgfCBBVEFfRE1BX0lOVFIpOwogCi0JLyogcHVyZ2UgRE1BIG1hcHBpbmdzICovCi0JaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwogCXdtYigpOwogCiAJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwpAQCAtMzM4LDkgKzMzMCw4IEBACiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKLQkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNmZl9kbWFfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwppbmRleCAzZGJmODBjLi5hMGI4Y2FiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwpAQCAtODksMTUgKzg5LDE2IEBACiBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9jbWQgKmNtZCA9ICZod2lmLT5jbWQ7CiAJdTggc3RhdCA9IDAsIGRtYV9zdGF0ID0gMDsKIAorCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwogCWRtYV9zdGF0ID0gaHdpZi0+ZG1hX29wcy0+ZG1hX2VuZChkcml2ZSk7CisJaWRlX2RtYV91bm1hcF9zZyhkcml2ZSwgY21kKTsKIAlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAogCWlmIChPS19TVEFUKHN0YXQsIERSSVZFX1JFQURZLCBkcml2ZS0+YmFkX3dzdGF0IHwgQVRBX0RSUSkpIHsKIAkJaWYgKCFkbWFfc3RhdCkgewotCQkJc3RydWN0IGlkZV9jbWQgKmNtZCA9ICZod2lmLT5jbWQ7Ci0KIAkJCWlmICgoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19GUykgPT0gMCkKIAkJCQlpZGVfZmluaXNoX2NtZChkcml2ZSwgY21kLCBzdGF0KTsKIAkJCWVsc2UKQEAgLTExNyw4ICsxMTgsOCBAQAogfQogCiAvKioKLSAqCWlkZV9idWlsZF9zZ2xpc3QJLQltYXAgSURFIHNjYXR0ZXIgZ2F0aGVyIGZvciBETUEgSS9PCi0gKglAZHJpdmU6IHRoZSBkcml2ZSB0byBidWlsZCB0aGUgRE1BIHRhYmxlIGZvcgorICoJaWRlX2RtYV9tYXBfc2cJLQltYXAgSURFIHNjYXR0ZXIgZ2F0aGVyIGZvciBETUEgSS9PCisgKglAZHJpdmU6IHRoZSBkcml2ZSB0byBtYXAgdGhlIERNQSB0YWJsZSBmb3IKICAqCUBjbWQ6IGNvbW1hbmQKICAqCiAgKglQZXJmb3JtIHRoZSBETUEgbWFwcGluZyBtYWdpYyBuZWNlc3NhcnkgdG8gYWNjZXNzIHRoZSBzb3VyY2Ugb3IKQEAgLTEyNywyMyArMTI4LDE5IEBACiAgKglvcGVyYXRlIGluIGEgcG9ydGFibGUgZmFzaGlvbi4KICAqLwogCi1pbnQgaWRlX2J1aWxkX3NnbGlzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCitzdGF0aWMgaW50IGlkZV9kbWFfbWFwX3NnKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IGh3aWYtPnNnX3RhYmxlOwogCWludCBpOwogCi0JaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKLQogCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKQogCQljbWQtPnNnX2RtYV9kaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOwogCWVsc2UKIAkJY21kLT5zZ19kbWFfZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOwogCiAJaSA9IGRtYV9tYXBfc2coaHdpZi0+ZGV2LCBzZywgY21kLT5zZ19uZW50cywgY21kLT5zZ19kbWFfZGlyZWN0aW9uKTsKLQlpZiAoaSA9PSAwKQotCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwotCWVsc2UgeworCWlmIChpKSB7CiAJCWNtZC0+b3JpZ19zZ19uZW50cyA9IGNtZC0+c2dfbmVudHM7CiAJCWNtZC0+c2dfbmVudHMgPSBpOwogCX0KQEAgLTE1Miw3ICsxNDksNyBAQAogfQogCiAvKioKLSAqCWlkZV9kZXN0cm95X2RtYXRhYmxlCS0JY2xlYW4gdXAgRE1BIG1hcHBpbmcKKyAqCWlkZV9kbWFfdW5tYXBfc2cJLQljbGVhbiB1cCBETUEgbWFwcGluZwogICoJQGRyaXZlOiBUaGUgZHJpdmUgdG8gdW5tYXAKICAqCiAgKglUZWFyZG93biBtYXBwaW5ncyBhZnRlciBETUEgaGFzIGNvbXBsZXRlZC4gVGhpcyBtdXN0IGJlIGNhbGxlZApAQCAtMTYyLDE1ICsxNTksMTQgQEAKICAqCXRpbWUuCiAgKi8KIAotdm9pZCBpZGVfZGVzdHJveV9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUpCit2b2lkIGlkZV9kbWFfdW5tYXBfc2coaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKIAogCWRtYV91bm1hcF9zZyhod2lmLT5kZXYsIGh3aWYtPnNnX3RhYmxlLCBjbWQtPm9yaWdfc2dfbmVudHMsCiAJCSAgICAgY21kLT5zZ19kbWFfZGlyZWN0aW9uKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kZXN0cm95X2RtYXRhYmxlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfdW5tYXBfc2cpOwogCiAvKioKICAqCWlkZV9kbWFfb2ZmX3F1aWV0bHkJLQlHZW5lcmljIERNQSBraWxsCkBAIC0yNDksMTIgKzI0NSwxMSBAQAogCWNhc2UgWEZFUl9VRE1BXzA6CiAJCWlmICgoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDQpID09IDApCiAJCQlicmVhazsKLQorCQltYXNrID0gaWRbQVRBX0lEX1VETUFfTU9ERVNdOwogCQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnVkbWFfZmlsdGVyKQotCQkJbWFzayA9IHBvcnRfb3BzLT51ZG1hX2ZpbHRlcihkcml2ZSk7CisJCQltYXNrICY9IHBvcnRfb3BzLT51ZG1hX2ZpbHRlcihkcml2ZSk7CiAJCWVsc2UKLQkJCW1hc2sgPSBod2lmLT51bHRyYV9tYXNrOwotCQltYXNrICY9IGlkW0FUQV9JRF9VRE1BX01PREVTXTsKKwkJCW1hc2sgJj0gaHdpZi0+dWx0cmFfbWFzazsKIAogCQkvKgogCQkgKiBhdm9pZCBmYWxzZSBjYWJsZSB3YXJuaW5nIGZyb20gZWlnaHR5X25pbnR5X3RocmVlKCkKQEAgLTI2NSwxOCArMjYwLDIzIEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBYRkVSX01XX0RNQV8wOgotCQlpZiAoKGlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiAyKSA9PSAwKQotCQkJYnJlYWs7CisJCW1hc2sgPSBpZFtBVEFfSURfTVdETUFfTU9ERVNdOworCisJCS8qIEFsc28gbG9vayBmb3IgdGhlIENGIHNwZWNpZmljIE1XRE1BIG1vZGVzLi4uICovCisJCWlmIChhdGFfaWRfaXNfY2ZhKGlkKSAmJiAoaWRbQVRBX0lEX0NGQV9NT0RFU10gJiAweDM4KSkgeworCQkJdTggbW9kZSA9ICgoaWRbQVRBX0lEX0NGQV9NT0RFU10gJiAweDM4KSA+PiAzKSAtIDE7CisKKwkJCW1hc2sgfD0gKCgyIDw8IG1vZGUpIC0gMSkgPDwgMzsKKwkJfQorCiAJCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+bWRtYV9maWx0ZXIpCi0JCQltYXNrID0gcG9ydF9vcHMtPm1kbWFfZmlsdGVyKGRyaXZlKTsKKwkJCW1hc2sgJj0gcG9ydF9vcHMtPm1kbWFfZmlsdGVyKGRyaXZlKTsKIAkJZWxzZQotCQkJbWFzayA9IGh3aWYtPm13ZG1hX21hc2s7Ci0JCW1hc2sgJj0gaWRbQVRBX0lEX01XRE1BX01PREVTXTsKKwkJCW1hc2sgJj0gaHdpZi0+bXdkbWFfbWFzazsKIAkJYnJlYWs7CiAJY2FzZSBYRkVSX1NXX0RNQV8wOgotCQlpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpIHsKLQkJCW1hc2sgPSBpZFtBVEFfSURfU1dETUFfTU9ERVNdICYgaHdpZi0+c3dkbWFfbWFzazsKLQkJfSBlbHNlIGlmIChpZFtBVEFfSURfT0xEX0RNQV9NT0RFU10gPj4gOCkgeworCQltYXNrID0gaWRbQVRBX0lEX1NXRE1BX01PREVTXTsKKwkJaWYgKCEobWFzayAmIEFUQV9TV0RNQTIpICYmIChpZFtBVEFfSURfT0xEX0RNQV9NT0RFU10gPj4gOCkpIHsKIAkJCXU4IG1vZGUgPSBpZFtBVEFfSURfT0xEX0RNQV9NT0RFU10gPj4gODsKIAogCQkJLyoKQEAgLTI4NCw4ICsyODQsOSBAQAogCQkJICogKHRoZSBtYXhpbXVtIGFsbG93ZWQgbW9kZSBpcyBYRkVSX1NXX0RNQV8yKQogCQkJICovCiAJCQlpZiAobW9kZSA8PSAyKQotCQkJCW1hc2sgPSAoKDIgPDwgbW9kZSkgLSAxKSAmIGh3aWYtPnN3ZG1hX21hc2s7CisJCQkJbWFzayA9ICgyIDw8IG1vZGUpIC0gMTsKIAkJfQorCQltYXNrICY9IGh3aWYtPnN3ZG1hX21hc2s7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUJVRygpOwpAQCAtNDAyLDExICs0MDMsMTAgQEAKIAkJaWYgKChpZFtBVEFfSURfVURNQV9NT0RFU10gPj4gOCkgJiYKIAkJICAgIChpZFtBVEFfSURfTVdETUFfTU9ERVNdID4+IDgpKQogCQkJZ290byBlcnJfb3V0OwotCX0gZWxzZSBpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpIHsKLQkJaWYgKChpZFtBVEFfSURfTVdETUFfTU9ERVNdID4+IDgpICYmCi0JCSAgICAoaWRbQVRBX0lEX1NXRE1BX01PREVTXSA+PiA4KSkKLQkJCWdvdG8gZXJyX291dDsKLQl9CisJfSBlbHNlIGlmICgoaWRbQVRBX0lEX01XRE1BX01PREVTXSA+PiA4KSAmJgorCQkgICAoaWRbQVRBX0lEX1NXRE1BX01PREVTXSA+PiA4KSkKKwkJZ290byBlcnJfb3V0OworCiAJcmV0dXJuIDA7CiBlcnJfb3V0OgogCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCBETUEgaW5mbyBpbiBpZGVudGlmeSBibG9ja1xuIiwgZHJpdmUtPm5hbWUpOwpAQCAtNDYwLDIxICs0NjAsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV9sb3N0X2lycSk7CiAKLXZvaWQgaWRlX2RtYV90aW1lb3V0KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIERNQVxuIiwgZHJpdmUtPm5hbWUpOwotCi0JaWYgKGh3aWYtPmRtYV9vcHMtPmRtYV90ZXN0X2lycShkcml2ZSkpCi0JCXJldHVybjsKLQotCWlkZV9kdW1wX3N0YXR1cyhkcml2ZSwgIkRNQSB0aW1lb3V0IiwgaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSk7Ci0KLQlod2lmLT5kbWFfb3BzLT5kbWFfZW5kKGRyaXZlKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfdGltZW91dCk7Ci0KIC8qCiAgKiB1bi1idXN5IHRoZSBwb3J0IGV0YywgYW5kIGNsZWFyIGFueSBwZW5kaW5nIERNQSBzdGF0dXMuIHdlIHdhbnQgdG8KICAqIHJldHJ5IHRoZSBjdXJyZW50IHJlcXVlc3QgaW4gcGlvIG1vZGUgaW5zdGVhZCBvZiByaXNraW5nIHRvc3NpbmcgaXQKQEAgLTQ4Myw2ICs0NjgsOCBAQAogaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvcikKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzICpkbWFfb3BzID0gaHdpZi0+ZG1hX29wczsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJaWRlX3N0YXJ0c3RvcF90IHJldCA9IGlkZV9zdG9wcGVkOwogCkBAIC00OTIsMTIgKzQ3OSwyMyBAQAogCiAJaWYgKGVycm9yIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIHRpbWVvdXQgZXJyb3JcbiIsIGRyaXZlLT5uYW1lKTsKLQkJKHZvaWQpaHdpZi0+ZG1hX29wcy0+ZG1hX2VuZChkcml2ZSk7CisJCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOworCQkodm9pZClkbWFfb3BzLT5kbWFfZW5kKGRyaXZlKTsKKwkJaWRlX2RtYV91bm1hcF9zZyhkcml2ZSwgY21kKTsKIAkJcmV0ID0gaWRlX2Vycm9yKGRyaXZlLCAiZG1hIHRpbWVvdXQgZXJyb3IiLAogCQkJCWh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikpOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBETUEgdGltZW91dCByZXRyeVxuIiwgZHJpdmUtPm5hbWUpOwotCQlod2lmLT5kbWFfb3BzLT5kbWFfdGltZW91dChkcml2ZSk7CisJCWlmIChkbWFfb3BzLT5kbWFfY2xlYXIpCisJCQlkbWFfb3BzLT5kbWFfY2xlYXIoZHJpdmUpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIERNQVxuIiwgZHJpdmUtPm5hbWUpOworCQlpZiAoZG1hX29wcy0+ZG1hX3Rlc3RfaXJxKGRyaXZlKSA9PSAwKSB7CisJCQlpZGVfZHVtcF9zdGF0dXMoZHJpdmUsICJETUEgdGltZW91dCIsCisJCQkJCWh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikpOworCQkJZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CisJCQkodm9pZClkbWFfb3BzLT5kbWFfZW5kKGRyaXZlKTsKKwkJCWlkZV9kbWFfdW5tYXBfc2coZHJpdmUsIGNtZCk7CisJCX0KIAl9CiAKIAkvKgpAQCAtNTY3LDMgKzU2NSwyNSBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2FsbG9jYXRlX2RtYV9lbmdpbmUpOworCitpbnQgaWRlX2RtYV9wcmVwYXJlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKK3sKKwljb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgKmRtYV9vcHMgPSBkcml2ZS0+aHdpZi0+ZG1hX29wczsKKworCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpID09IDAgfHwKKwkgICAgKGRtYV9vcHMtPmRtYV9jaGVjayAmJiBkbWFfb3BzLT5kbWFfY2hlY2soZHJpdmUsIGNtZCkpKQorCQlnb3RvIG91dDsKKwlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOworCWlmIChpZGVfZG1hX21hcF9zZyhkcml2ZSwgY21kKSA9PSAwKQorCQlnb3RvIG91dF9tYXA7CisJaWYgKGRtYV9vcHMtPmRtYV9zZXR1cChkcml2ZSwgY21kKSkKKwkJZ290byBvdXRfZG1hX3VubWFwOworCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOworCXJldHVybiAwOworb3V0X2RtYV91bm1hcDoKKwlpZGVfZG1hX3VubWFwX3NnKGRyaXZlLCBjbWQpOworb3V0X21hcDoKKwlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOworb3V0OgorCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWVoLmMgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwppbmRleCAxMTY2NDk3Li41ZDVmYjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZWguYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwpAQCAtMTY1LDExICsxNjUsMTIgQEAKIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgYXRhcGlfcmVzZXRfcG9sbGZ1bmMoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwogCXU4IHN0YXQ7CiAKLQlTRUxFQ1RfRFJJVkUoZHJpdmUpOworCXRwX29wcy0+ZGV2X3NlbGVjdChkcml2ZSk7CiAJdWRlbGF5KDEwKTsKLQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKKwlzdGF0ID0gdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKIAogCWlmIChPS19TVEFUKHN0YXQsIDAsIEFUQV9CVVNZKSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEFUQVBJIHJlc2V0IGNvbXBsZXRlXG4iLCBkcml2ZS0+bmFtZSk7CkBAIC0zNDgsNyArMzQ5LDcgQEAKIAkvKiBGb3IgYW4gQVRBUEkgZGV2aWNlLCBmaXJzdCB0cnkgYW4gQVRBUEkgU1JTVC4gKi8KIAlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrICYmICFkb19ub3RfdHJ5X2F0YXBpKSB7CiAJCXByZV9yZXNldChkcml2ZSk7Ci0JCVNFTEVDVF9EUklWRShkcml2ZSk7CisJCXRwX29wcy0+ZGV2X3NlbGVjdChkcml2ZSk7CiAJCXVkZWxheSgyMCk7CiAJCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfREVWX1JFU0VUKTsKIAkJbmRlbGF5KDQwMCk7CkBAIC00MDEsMTUgKzQwMiwxNCBAQAogCSAqIGltbWVkaWF0ZSBpbnRlcnJ1cHQgZHVlIHRvIHRoZSBlZGdlIHRyYW5zaXRpb24gaXQgcHJvZHVjZXMuCiAJICogVGhpcyBzaW5nbGUgaW50ZXJydXB0IGdpdmVzIHVzIGEgImZhc3QgcG9sbCIgZm9yIGRyaXZlcyB0aGF0CiAJICogcmVjb3ZlciBmcm9tIHJlc2V0IHZlcnkgcXVpY2tseSwgc2F2aW5nIHVzIHRoZSBmaXJzdCA1MG1zIHdhaXQgdGltZS4KLQkgKgotCSAqIFRPRE86IGFkZCAtPnNvZnRyZXNldCBtZXRob2QgYW5kIHN0b3AgYWJ1c2luZyAtPnNldF9pcnEKIAkgKi8KIAkvKiBzZXQgU1JTVCBhbmQgbklFTiAqLwotCXRwX29wcy0+c2V0X2lycShod2lmLCA0KTsKKwl0cF9vcHMtPndyaXRlX2RldmN0bChod2lmLCBBVEFfU1JTVCB8IEFUQV9OSUVOIHwgQVRBX0RFVkNUTF9PQlMpOwogCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLwogCXVkZWxheSgxMCk7CiAJLyogY2xlYXIgU1JTVCwgbGVhdmUgbklFTiAodW5sZXNzIGRldmljZSBpcyBvbiB0aGUgcXVpcmsgbGlzdCkgKi8KLQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgZHJpdmUtPnF1aXJrX2xpc3QgPT0gMik7CisJdHBfb3BzLT53cml0ZV9kZXZjdGwoaHdpZiwgKGRyaXZlLT5xdWlya19saXN0ID09IDIgPyAwIDogQVRBX05JRU4pIHwKKwkJCSAgICAgQVRBX0RFVkNUTF9PQlMpOwogCS8qIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLwogCXVkZWxheSgxMCk7CiAJaHdpZi0+cG9sbF90aW1lb3V0ID0gamlmZmllcyArIFdBSVRfV09SU1RDQVNFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jIGIvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCmluZGV4IDdhZTY2MjMuLjJiNDg2OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKQEAgLTYxLDE2ICs2MSw2IEBACiAgKi8KICNkZWZpbmUgSURFRkxPUFBZX1BDX0RFTEFZCShIWi8yMCkJLyogZGVmYXVsdCBkZWxheSBmb3IgWklQIDEwMCAoNTBtcykgKi8KIAotc3RhdGljIHZvaWQgaWRlZmxvcHB5X3VwZGF0ZV9idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSwKLQkJCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBwYy0+cnE7Ci0Jc3RydWN0IGJpbyAqYmlvID0gcnEtPmJpbzsKLQotCXdoaWxlICgoYmlvID0gcnEtPmJpbykgIT0gTlVMTCkKLQkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBpZGVfcnFfYnl0ZXMocnEpKTsKLX0KLQogc3RhdGljIGludCBpZGVfZmxvcHB5X2NhbGxiYWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGRzYykKIHsKIAlzdHJ1Y3QgaWRlX2Rpc2tfb2JqICpmbG9wcHkgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CkBAIC0yMTMsNyArMjAzLDYgQEAKIAltZW1jcHkocnEtPmNtZCwgcGMtPmMsIDEyKTsKIAogCXBjLT5ycSA9IHJxOwotCXBjLT5iX2NvdW50ID0gMDsKIAlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9SVykKIAkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfV1JJVElORzsKIAlwYy0+YnVmID0gTlVMTDsKQEAgLTIyNyw3ICsyMTYsNiBAQAogCWlkZV9pbml0X3BjKHBjKTsKIAltZW1jcHkocGMtPmMsIHJxLT5jbWQsIHNpemVvZihwYy0+YykpOwogCXBjLT5ycSA9IHJxOwotCXBjLT5iX2NvdW50ID0gMDsKIAlpZiAocnEtPmRhdGFfbGVuICYmIHJxX2RhdGFfZGlyKHJxKSA9PSBXUklURSkKIAkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfV1JJVElORzsKIAlwYy0+YnVmID0gcnEtPmRhdGE7CkBAIC0yNDQsMTAgKzIzMiwxMSBAQAogCQkJCQkgICAgIHN0cnVjdCByZXF1ZXN0ICpycSwgc2VjdG9yX3QgYmxvY2spCiB7CiAJc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7CiAKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyLCBjbWQ6IDB4JXhcbiIsIHJxLT5jbWRbMF0pOworCiAJaWYgKGRyaXZlLT5kZWJ1Z19tYXNrICYgSURFX0RCR19SUSkKIAkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsIChycS0+cnFfZGlzawogCQkJCQk/IHJxLT5ycV9kaXNrLT5kaXNrX25hbWUKQEAgLTI5NCwxMyArMjgzLDEwIEBACiAJY21kLnJxID0gcnE7CiAKIAlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpIHx8IHBjLT5yZXFfeGZlcikgewotCQlpZGVfaW5pdF9zZ19jbWQoJmNtZCwgcnEtPm5yX3NlY3RvcnMgPDwgOSk7CisJCWlkZV9pbml0X3NnX2NtZCgmY21kLCBwYy0+cmVxX3hmZXIpOwogCQlpZGVfbWFwX3NnKGRyaXZlLCAmY21kKTsKIAl9CiAKLQlwYy0+c2cgPSBod2lmLT5zZ190YWJsZTsKLQlwYy0+c2dfY250ID0gY21kLnNnX25lbnRzOwotCiAJcGMtPnJxID0gcnE7CiAKIAlyZXR1cm4gaWRlX2Zsb3BweV9pc3N1ZV9wYyhkcml2ZSwgJmNtZCwgcGMpOwpAQCAtMzg1LDkgKzM3MSwxMSBAQAogCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gZmxvcHB5LT5kaXNrOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CiAJdTggKmNhcF9kZXNjOwotCXU4IGhlYWRlcl9sZW4sIGRlc2NfY250OworCXU4IHBjX2J1ZlsyNTZdLCBoZWFkZXJfbGVuLCBkZXNjX2NudDsKIAlpbnQgaSwgcmMgPSAxLCBibG9ja3MsIGxlbmd0aDsKIAorCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKKwogCWRyaXZlLT5iaW9zX2N5bCA9IDA7CiAJZHJpdmUtPmJpb3NfaGVhZCA9IGRyaXZlLT5iaW9zX3NlY3QgPSAwOwogCWZsb3BweS0+YmxvY2tzID0gMDsKQEAgLTM5NSw2ICszODMsOSBAQAogCWRyaXZlLT5jYXBhY2l0eTY0ID0gMDsKIAogCWlkZV9mbG9wcHlfY3JlYXRlX3JlYWRfY2FwYWNpdHlfY21kKCZwYyk7CisJcGMuYnVmID0gJnBjX2J1ZlswXTsKKwlwYy5idWZfc2l6ZSA9IHNpemVvZihwY19idWYpOworCiAJaWYgKGlkZV9xdWV1ZV9wY190YWlsKGRyaXZlLCBkaXNrLCAmcGMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbid0IGdldCBmbG9wcHkgcGFyYW1ldGVyc1xuIik7CiAJCXJldHVybiAxOwpAQCAtNDg1LDggKzQ3Niw2IEBACiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKIAogCWRyaXZlLT5wY19jYWxsYmFjawkgPSBpZGVfZmxvcHB5X2NhbGxiYWNrOwotCWRyaXZlLT5wY191cGRhdGVfYnVmZmVycyA9IGlkZWZsb3BweV91cGRhdGVfYnVmZmVyczsKLQlkcml2ZS0+cGNfaW9fYnVmZmVycwkgPSBpZGVfaW9fYnVmZmVyczsKIAogCS8qCiAJICogV2UgdXNlZCB0byBjaGVjayByZXZpc2lvbnMgaGVyZS4gQXQgdGhpcyBwb2ludCBob3dldmVyIEknbSBnaXZpbmcgdXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X2lvY3RsLmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5X2lvY3RsLmMKaW5kZXggOGY4YmU4NS4uY2Q4YTQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHlfaW9jdGwuYwpAQCAtMzYsOSArMzYsOSBAQAogCQkJCQkgICAgaW50IF9fdXNlciAqYXJnKQogewogCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQl1OCBoZWFkZXJfbGVuLCBkZXNjX2NudDsKIAlpbnQgaSwgYmxvY2tzLCBsZW5ndGgsIHVfYXJyYXlfc2l6ZSwgdV9pbmRleDsKIAlpbnQgX191c2VyICphcmdwOworCXU4IHBjX2J1ZlsyNTZdLCBoZWFkZXJfbGVuLCBkZXNjX2NudDsKIAogCWlmIChnZXRfdXNlcih1X2FycmF5X3NpemUsIGFyZykpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtNDcsNiArNDcsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlkZV9mbG9wcHlfY3JlYXRlX3JlYWRfY2FwYWNpdHlfY21kKHBjKTsKKwlwYy0+YnVmID0gJnBjX2J1ZlswXTsKKwlwYy0+YnVmX3NpemUgPSBzaXplb2YocGNfYnVmKTsKKwogCWlmIChpZGVfcXVldWVfcGNfdGFpbChkcml2ZSwgZmxvcHB5LT5kaXNrLCBwYykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJpZGUtZmxvcHB5OiBDYW4ndCBnZXQgZmxvcHB5IHBhcmFtZXRlcnNcbiIpOwogCQlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMgYi9kcml2ZXJzL2lkZS9pZGUtZ2VuZXJpYy5jCmluZGV4IDlkMDNlODIuLjc4MTJjYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYwpAQCAtMSwyNyArMSwyMiBAQAogLyoKICAqIGdlbmVyaWMvZGVmYXVsdCBJREUgaG9zdCBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4LTIwMDkgQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICogVGhpcyBjb2RlIHdhcyBzcGxpdCBvZmYgZnJvbSBpZGUuYy4gIFNlZSBpdCBmb3Igb3JpZ2luYWwgY29weXJpZ2h0cy4KICAqCiAgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCiAgKi8KIAotLyoKLSAqIEZvciBzcGVjaWFsIGNhc2VzIG5ldyBpbnRlcmZhY2VzIG1heSBiZSBhZGRlZCB1c2luZyBzeXNmcywgaS5lLgotICoKLSAqCWVjaG8gLW4gIjB4MTY4OjB4MzZlOjEwIiA+IC9zeXMvY2xhc3MvaWRlX2dlbmVyaWMvYWRkCi0gKgotICogd2lsbCBhZGQgYW4gaW50ZXJmYWNlIHVzaW5nIEkvTyBwb3J0cyAweDE2OC0weDE2Zi8weDM2ZSBhbmQgSVJRIDEwLgotICovCi0KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgogCi0vKiBGSVhNRTogY29udmVydCBtMzJyIHRvIHVzZSBpZGVfcGxhdGZvcm0gaG9zdCBkcml2ZXIgKi8KKy8qIEZJWE1FOiBjb252ZXJ0IGFybSBhbmQgbTMyciB0byB1c2UgaWRlX3BsYXRmb3JtIGhvc3QgZHJpdmVyICovCisjaWZkZWYgQ09ORklHX0FSTQorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNlbmRpZgogI2lmZGVmIENPTkZJR19NMzJSCiAjaW5jbHVkZSA8YXNtL20zMnIuaD4KICNlbmRpZgpAQCAtMzYsNjIgKzMxLDExIEBACiAJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX05PX0RNQSwKIH07CiAKLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2FkZChzdHJ1Y3QgY2xhc3MgKmNscywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKLXsKLQl1bnNpZ25lZCBpbnQgYmFzZSwgY3RsOwotCWludCBpcnEsIHJjOwotCWh3X3JlZ3NfdCBodywgKmh3c1tdID0geyAmaHcsIE5VTEwsIE5VTEwsIE5VTEwgfTsKLQotCWlmIChzc2NhbmYoYnVmLCAiJXg6JXg6JWQiLCAmYmFzZSwgJmN0bCwgJmlycSkgIT0gMykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKLQlpZGVfc3RkX2luaXRfcG9ydHMoJmh3LCBiYXNlLCBjdGwpOwotCWh3LmlycSA9IGlycTsKLQlody5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7Ci0KLQlyYyA9IGlkZV9ob3N0X2FkZCgmaWRlX2dlbmVyaWNfcG9ydF9pbmZvLCBod3MsIE5VTEwpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JcmV0dXJuIG47Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSBpZGVfZ2VuZXJpY19jbGFzc19hdHRyc1tdID0gewotCV9fQVRUUihhZGQsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX2FkZCksCi0JX19BVFRSX05VTEwKLX07Ci0KLXN0YXRpYyB2b2lkIGlkZV9nZW5lcmljX2NsYXNzX3JlbGVhc2Uoc3RydWN0IGNsYXNzICpjbHMpCi17Ci0Ja2ZyZWUoY2xzKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaWRlX2dlbmVyaWNfc3lzZnNfaW5pdCh2b2lkKQotewotCXN0cnVjdCBjbGFzcyAqY2xzOwotCWludCByYzsKLQotCWNscyA9IGt6YWxsb2Moc2l6ZW9mKCpjbHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNscykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljbHMtPm5hbWUgPSBEUlZfTkFNRTsKLQljbHMtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JY2xzLT5jbGFzc19yZWxlYXNlID0gaWRlX2dlbmVyaWNfY2xhc3NfcmVsZWFzZTsKLQljbHMtPmNsYXNzX2F0dHJzID0gaWRlX2dlbmVyaWNfY2xhc3NfYXR0cnM7Ci0KLQlyYyA9IGNsYXNzX3JlZ2lzdGVyKGNscyk7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGNscyk7Ci0JCXJldHVybiByYzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTTMyNzAwVVQpIHx8IGRlZmluZWQoQ09ORklHX1BMQVRfTUFQUEkyKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfUExBVF9PUFNQVVQpCisjaWZkZWYgQ09ORklHX0FSTQorc3RhdGljIGNvbnN0IHUxNiBsZWdhY3lfYmFzZXNbXSA9IHsgMHgxZjAgfTsKK3N0YXRpYyBjb25zdCBpbnQgbGVnYWN5X2lycXNbXSAgPSB7IElSUV9IQVJERElTSyB9OworI2VsaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVCkgfHwgZGVmaW5lZChDT05GSUdfUExBVF9NQVBQSTIpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX1BMQVRfT1BTUFVUKQogc3RhdGljIGNvbnN0IHUxNiBsZWdhY3lfYmFzZXNbXSA9IHsgMHgxZjAgfTsKIHN0YXRpYyBjb25zdCBpbnQgbGVnYWN5X2lycXNbXSAgPSB7IFBMRF9JUlFfQ0ZJUkVRIH07CiAjZWxpZiBkZWZpbmVkKENPTkZJR19QTEFUX01BUFBJMykKQEAgLTEwNywxMSArNTEsMTEgQEAKIAogc3RhdGljIHZvaWQgaWRlX2dlbmVyaWNfY2hlY2tfcGNpX2xlZ2FjeV9pb2Jhc2VzKGludCAqcHJpbWFyeSwgaW50ICpzZWNvbmRhcnkpCiB7CisjaWZkZWYgQ09ORklHX1BDSQogCXN0cnVjdCBwY2lfZGV2ICpwID0gTlVMTDsKIAl1MTYgdmFsOwogCiAJZm9yX2VhY2hfcGNpX2RldihwKSB7Ci0KIAkJaWYgKHBjaV9yZXNvdXJjZV9zdGFydChwLCAwKSA9PSAweDFmMCkKIAkJCSpwcmltYXJ5ID0gMTsKIAkJaWYgKHBjaV9yZXNvdXJjZV9zdGFydChwLCAyKSA9PSAweDE3MCkKQEAgLTEyNiw3ICs3MCw2IEBACiAJCS8qIEludGVsIE1QSUlYIC0gUElPIEFUQSBvbiBub24gUENJIHNpZGUgb2YgYnJpZGdlICovCiAJCWlmIChwLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTCAmJgogCQkgICAgcC0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFNWCkgewotCiAJCQlwY2lfcmVhZF9jb25maWdfd29yZChwLCAweDZDLCAmdmFsKTsKIAkJCWlmICh2YWwgJiAweDgwMDApIHsKIAkJCQkvKiBBVEEgcG9ydCBlbmFibGVkICovCkBAIC0xMzcsNiArODAsNyBAQAogCQkJfQogCQl9CiAJfQorI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGlkZV9nZW5lcmljX2luaXQodm9pZCkKQEAgLTE2OCw2ICsxMTIsNyBAQAogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEkvTyByZXNvdXJjZSAweCVsWC0weCVsWCAiCiAJCQkJCQkibm90IGZyZWUuXG4iLAogCQkJCQkJRFJWX05BTUUsIGlvX2FkZHIsIGlvX2FkZHIgKyA3KTsKKwkJCQlyYyA9IC1FQlVTWTsKIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtMTc2LDYgKzEyMSw3IEBACiAJCQkJCQkibm90IGZyZWUuXG4iLAogCQkJCQkJRFJWX05BTUUsIGlvX2FkZHIgKyAweDIwNik7CiAJCQkJcmVsZWFzZV9yZWdpb24oaW9fYWRkciwgOCk7CisJCQkJcmMgPSAtRUJVU1k7CiAJCQkJY29udGludWU7CiAJCQl9CiAKQEAgLTE5NiwxMCArMTQyLDYgQEAKIAkJfQogCX0KIAotCWlmIChpZGVfZ2VuZXJpY19zeXNmc19pbml0KCkpCi0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBmYWlsZWQgdG8gY3JlYXRlIGlkZV9nZW5lcmljICIKLQkJCQkJICJjbGFzc1xuIik7Ci0KIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1oODMwMC5jIGIvZHJpdmVycy9pZGUvaWRlLWg4MzAwLmMKaW5kZXggZmY4MzM5ZS4uZGFjOWE2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWg4MzAwLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWg4MzAwLmMKQEAgLTU0LDkgKzU0LDYgQEAKIAlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkKLQkJbW1fb3V0dygodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGEsIGlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQlvdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKQEAgLTkwLDE4ICs4NywxMSBAQAogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwogCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CiAKLQlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0lOX0RBVEEpIHsKLQkJdTE2IGRhdGEgPSBtbV9pbncoaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0KLQkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKLQkJdGYtPmhvYl9kYXRhID0gKGRhdGEgPj4gOCkgJiAweGZmOwotCX0KLQogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KLQlvdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisJb3V0YihBVEFfREVWQ1RMX09CUywgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCi0JCXRmLT5mZWF0dXJlID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0VSUk9SKQorCQl0Zi0+ZXJyb3IgID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwogCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQpAQCAtMTE0LDE4ICsxMDQsMTggQEAKIAkJdGYtPmRldmljZSA9IGluYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKLQkJb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisJCW91dGIoQVRBX0hPQiB8IEFUQV9ERVZDVExfT0JTLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQotCQkJdGYtPmhvYl9mZWF0dXJlID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRVJST1IpCisJCQl0Zi0+aG9iX2Vycm9yID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwogCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCi0JCQl0Zi0+aG9iX25zZWN0ICAgPSBpbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQkJdGYtPmhvYl9uc2VjdCA9IGluYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CiAJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQotCQkJdGYtPmhvYl9sYmFsICAgID0gaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCQkJdGYtPmhvYl9sYmFsICA9IGluYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKIAkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCi0JCQl0Zi0+aG9iX2xiYW0gICAgPSBpbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJCQl0Zi0+aG9iX2xiYW0gID0gaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwogCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKLQkJCXRmLT5ob2JfbGJhaCAgICA9IGluYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKKwkJCXRmLT5ob2JfbGJhaCAgPSBpbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAJfQogfQogCkBAIC0xNTksOSArMTQ5LDkgQEAKIAkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCiAJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKIAkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS53cml0ZV9kZXZjdGwJCT0gaWRlX3dyaXRlX2RldmN0bCwKIAotCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAotCisJLmRldl9zZWxlY3QJCT0gaWRlX2Rldl9zZWxlY3QsCiAJLnRmX2xvYWQJCT0gaDgzMDBfdGZfbG9hZCwKIAkudGZfcmVhZAkJPSBoODMwMF90Zl9yZWFkLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMKaW5kZXggMmQ5YzZkYy4uOWNhYzI4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby1zdGQuYwpAQCAtNjQsMjMgKzY0LDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9hbHRzdGF0dXMpOwogCi12b2lkIGlkZV9zZXRfaXJxKGlkZV9od2lmX3QgKmh3aWYsIGludCBvbikKK3ZvaWQgaWRlX3dyaXRlX2RldmN0bChpZGVfaHdpZl90ICpod2lmLCB1OCBjdGwpCiB7Ci0JdTggY3RsID0gQVRBX0RFVkNUTF9PQlM7Ci0KLQlpZiAob24gPT0gNCkgeyAvKiBoYWNrIGZvciBTUlNUICovCi0JCWN0bCB8PSA0OwotCQlvbiAmPSB+NDsKLQl9Ci0KLQljdGwgfD0gb24gPyAwIDogMjsKLQogCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCiAJCXdyaXRlYihjdGwsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CiAJZWxzZQogCQlvdXRiKGN0bCwgaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9pcnEpOworRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3dyaXRlX2RldmN0bCk7CisKK3ZvaWQgaWRlX2Rldl9zZWxlY3QoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCBzZWxlY3QgPSBkcml2ZS0+c2VsZWN0IHwgQVRBX0RFVklDRV9PQlM7CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKQorCQl3cml0ZWIoc2VsZWN0LCAodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuZGV2aWNlX2FkZHIpOworCWVsc2UKKwkJb3V0YihzZWxlY3QsIGh3aWYtPmlvX3BvcnRzLmRldmljZV9hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9kZXZfc2VsZWN0KTsKIAogdm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CkBAIC05OSwxNSArMTAyLDYgQEAKIAlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkgewotCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKLQotCQlpZiAobW1pbykKLQkJCXdyaXRldyhkYXRhLCAodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JCWVsc2UKLQkJCW91dHcoZGF0YSwgaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JfQotCiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQl0Zl9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKQEAgLTE1MywyMyArMTQ3LDExIEBACiAJCXRmX2luYiAgPSBpZGVfaW5iOwogCX0KIAotCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfSU5fREFUQSkgewotCQl1MTYgZGF0YTsKLQotCQlpZiAobW1pbykKLQkJCWRhdGEgPSByZWFkdygodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JCWVsc2UKLQkJCWRhdGEgPSBpbncoaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0KLQkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKLQkJdGYtPmhvYl9kYXRhID0gKGRhdGEgPj4gOCkgJiAweGZmOwotCX0KLQogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KLQl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisJdGZfb3V0YihBVEFfREVWQ1RMX09CUywgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCi0JCXRmLT5mZWF0dXJlID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0VSUk9SKQorCQl0Zi0+ZXJyb3IgID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwogCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQpAQCAtMTgyLDE4ICsxNjQsMTggQEAKIAkJdGYtPmRldmljZSA9IHRmX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKLQkJdGZfb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisJCXRmX291dGIoQVRBX0hPQiB8IEFUQV9ERVZDVExfT0JTLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQotCQkJdGYtPmhvYl9mZWF0dXJlID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRVJST1IpCisJCQl0Zi0+aG9iX2Vycm9yID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwogCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCi0JCQl0Zi0+aG9iX25zZWN0ICAgPSB0Zl9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQkJdGYtPmhvYl9uc2VjdCA9IHRmX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CiAJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQotCQkJdGYtPmhvYl9sYmFsICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCQkJdGYtPmhvYl9sYmFsICA9IHRmX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKIAkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCi0JCQl0Zi0+aG9iX2xiYW0gICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJCQl0Zi0+aG9iX2xiYW0gID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwogCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKLQkJCXRmLT5ob2JfbGJhaCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKKwkJCXRmLT5ob2JfbGJhaCAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3RmX3JlYWQpOwpAQCAtMjI1LDExICsyMDcsMTAgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBpb19wb3J0cy0+ZGF0YV9hZGRyOworCXVuc2lnbmVkIGludCB3b3JkcyA9IChsZW4gKyAxKSA+PiAxOwogCXU4IGlvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OwogCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwogCi0JbGVuKys7Ci0KIAlpZiAoaW9fMzJiaXQpIHsKIAkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7CiAKQEAgLTIzOCwyNyArMjE5LDI2IEBACiAJCQlhdGFfdmxiX3N5bmMoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwogCQl9CiAKKwkJd29yZHMgPj49IDE7CiAJCWlmIChtbWlvKQotCQkJX19pZGVfbW1faW5zbCgodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOworCQkJX19pZGVfbW1faW5zbCgodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIHdvcmRzKTsKIAkJZWxzZQotCQkJaW5zbChkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisJCQlpbnNsKGRhdGFfYWRkciwgYnVmLCB3b3Jkcyk7CiAKIAkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKQogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JCWlmICgobGVuICYgMykgPj0gMikgewotCQkJaWYgKG1taW8pCi0JCQkJX19pZGVfbW1faW5zdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLAotCQkJCQkJKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JCQllbHNlCi0JCQkJaW5zdyhkYXRhX2FkZHIsICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKG1taW8pCi0JCQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7Ci0JCWVsc2UKLQkJCWluc3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCQlpZiAoKChsZW4gKyAxKSAmIDMpIDwgMikKKwkJCXJldHVybjsKKworCQlidWYgKz0gbGVuICYgfjM7CisJCXdvcmRzID0gMTsKIAl9CisKKwlpZiAobW1pbykKKwkJX19pZGVfbW1faW5zdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIHdvcmRzKTsKKwllbHNlCisJCWluc3coZGF0YV9hZGRyLCBidWYsIHdvcmRzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbnB1dF9kYXRhKTsKIApAQCAtMjcxLDExICsyNTEsMTAgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBpb19wb3J0cy0+ZGF0YV9hZGRyOworCXVuc2lnbmVkIGludCB3b3JkcyA9IChsZW4gKyAxKSA+PiAxOwogCXU4IGlvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OwogCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwogCi0JbGVuKys7Ci0KIAlpZiAoaW9fMzJiaXQpIHsKIAkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7CiAKQEAgLTI4NCwyNyArMjYzLDI2IEBACiAJCQlhdGFfdmxiX3N5bmMoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwogCQl9CiAKKwkJd29yZHMgPj49IDE7CiAJCWlmIChtbWlvKQotCQkJX19pZGVfbW1fb3V0c2woKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKwkJCV9faWRlX21tX291dHNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1Ziwgd29yZHMpOwogCQllbHNlCi0JCQlvdXRzbChkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisJCQlvdXRzbChkYXRhX2FkZHIsIGJ1Ziwgd29yZHMpOwogCiAJCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykKIAkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCQlpZiAoKGxlbiAmIDMpID49IDIpIHsKLQkJCWlmIChtbWlvKQotCQkJCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsCi0JCQkJCQkgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7Ci0JCQllbHNlCi0JCQkJb3V0c3coZGF0YV9hZGRyLCAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChtbWlvKQotCQkJX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKLQkJZWxzZQotCQkJb3V0c3coZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCQlpZiAoKChsZW4gKyAxKSAmIDMpIDwgMikKKwkJCXJldHVybjsKKworCQlidWYgKz0gbGVuICYgfjM7CisJCXdvcmRzID0gMTsKIAl9CisKKwlpZiAobW1pbykKKwkJX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwgYnVmLCB3b3Jkcyk7CisJZWxzZQorCQlvdXRzdyhkYXRhX2FkZHIsIGJ1Ziwgd29yZHMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX291dHB1dF9kYXRhKTsKIApAQCAtMzEyLDkgKzI5MCw5IEBACiAJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAogCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCiAJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkud3JpdGVfZGV2Y3RsCQk9IGlkZV93cml0ZV9kZXZjdGwsCiAKLQkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKLQorCS5kZXZfc2VsZWN0CQk9IGlkZV9kZXZfc2VsZWN0LAogCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAogCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8uYyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCmluZGV4IDFhZGM1ZTIuLjFkZWI2ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pby5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCkBAIC03Myw2ICs3Myw3IEBACiAKIHZvaWQgaWRlX2NvbXBsZXRlX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsIHU4IHN0YXQsIHU4IGVycikKIHsKKwljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gZHJpdmUtPmh3aWYtPnRwX29wczsKIAlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IGNtZC0+cnE7CiAJdTggdGZfY21kID0gdGYtPmNvbW1hbmQ7CkBAIC04MCw3ICs4MSwxNiBAQAogCXRmLT5lcnJvciA9IGVycjsKIAl0Zi0+c3RhdHVzID0gc3RhdDsKIAotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsIGNtZCk7CisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19JTl9EQVRBKSB7CisJCXU4IGRhdGFbMl07CisKKwkJdHBfb3BzLT5pbnB1dF9kYXRhKGRyaXZlLCBjbWQsIGRhdGEsIDIpOworCisJCXRmLT5kYXRhID0gZGF0YVswXTsKKwkJdGYtPmhvYl9kYXRhID0gZGF0YVsxXTsKKwl9CisKKwl0cF9vcHMtPnRmX3JlYWQoZHJpdmUsIGNtZCk7CiAKIAlpZiAoKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVIpICYmCiAJICAgIHRmX2NtZCA9PSBBVEFfQ01EX0lETEVJTU1FRElBVEUpIHsKQEAgLTMzOCw3ICszNDgsNyBAQAogCWlmIChibGtfcG1fcmVxdWVzdChycSkpCiAJCWlkZV9jaGVja19wbV9zdGF0ZShkcml2ZSwgcnEpOwogCi0JU0VMRUNUX0RSSVZFKGRyaXZlKTsKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT5kZXZfc2VsZWN0KGRyaXZlKTsKIAlpZiAoaWRlX3dhaXRfc3RhdCgmc3RhcnRzdG9wLCBkcml2ZSwgZHJpdmUtPnJlYWR5X3N0YXQsCiAJCQkgIEFUQV9CVVNZIHwgQVRBX0RSUSwgV0FJVF9SRUFEWSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZHJpdmUgbm90IHJlYWR5IGZvciBjb21tYW5kXG4iLCBkcml2ZS0+bmFtZSk7CkBAIC00ODEsMTEgKzQ5MSwxMCBAQAogCQlwcmV2X3BvcnQgPSBod2lmLT5ob3N0LT5jdXJfcG9ydDsKIAkJaHdpZi0+cnEgPSBOVUxMOwogCi0JCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1NMRUVQSU5HKSB7Ci0JCQlpZiAodGltZV9iZWZvcmUoZHJpdmUtPnNsZWVwLCBqaWZmaWVzKSkgewotCQkJCWlkZV91bmxvY2tfcG9ydChod2lmKTsKLQkJCQlnb3RvIHBsdWdfZGV2aWNlOwotCQkJfQorCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19TTEVFUElORyAmJgorCQkgICAgdGltZV9hZnRlcihkcml2ZS0+c2xlZXAsIGppZmZpZXMpKSB7CisJCQlpZGVfdW5sb2NrX3BvcnQoaHdpZik7CisJCQlnb3RvIHBsdWdfZGV2aWNlOwogCQl9CiAKIAkJaWYgKChod2lmLT5ob3N0LT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFUklBTElaRSkgJiYKQEAgLTQ5NSw3ICs1MDQsOSBAQAogCQkJICogcXVpcmtfbGlzdCBtYXkgbm90IGxpa2UgaW50ciBzZXR1cHMvY2xlYW51cHMKIAkJCSAqLwogCQkJaWYgKHByZXZfcG9ydCAmJiBwcmV2X3BvcnQtPmN1cl9kZXYtPnF1aXJrX2xpc3QgPT0gMCkKLQkJCQlwcmV2X3BvcnQtPnRwX29wcy0+c2V0X2lycShwcmV2X3BvcnQsIDApOworCQkJCXByZXZfcG9ydC0+dHBfb3BzLT53cml0ZV9kZXZjdGwocHJldl9wb3J0LAorCQkJCQkJCQlBVEFfTklFTiB8CisJCQkJCQkJCUFUQV9ERVZDVExfT0JTKTsKIAogCQkJaHdpZi0+aG9zdC0+Y3VyX3BvcnQgPSBod2lmOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwppbmRleCA1NDAzZTRhLi4yN2JiNzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKQEAgLTI3LDIxICsyNyw2IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotdm9pZCBTRUxFQ1RfRFJJVkUoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCXN0cnVjdCBpZGVfY21kIGNtZDsKLQotCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+c2VsZWN0cHJvYykKLQkJcG9ydF9vcHMtPnNlbGVjdHByb2MoZHJpdmUpOwotCi0JbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0RFVklDRTsKLQotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZjbWQpOwotfQotCiB2b2lkIFNFTEVDVF9NQVNLKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG1hc2spCiB7CiAJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBkcml2ZS0+aHdpZi0+cG9ydF9vcHM7CkBAIC01NSw3ICs0MCw3IEBACiAJc3RydWN0IGlkZV9jbWQgY21kOwogCiAJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKLQljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fRkVBVFVSRTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fRVJST1I7CiAKIAlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmY21kKTsKIApAQCAtMzA2LDYgKzI5MSw3IEBACiAJZHJpdmUtPmlkW0FUQV9JRF9VRE1BX01PREVTXSAgPSBpZFtBVEFfSURfVURNQV9NT0RFU107CiAJZHJpdmUtPmlkW0FUQV9JRF9NV0RNQV9NT0RFU10gPSBpZFtBVEFfSURfTVdETUFfTU9ERVNdOwogCWRyaXZlLT5pZFtBVEFfSURfU1dETUFfTU9ERVNdID0gaWRbQVRBX0lEX1NXRE1BX01PREVTXTsKKwlkcml2ZS0+aWRbQVRBX0lEX0NGQV9NT0RFU10gICA9IGlkW0FUQV9JRF9DRkFfTU9ERVNdOwogCS8qIGFueXRoaW5nIG1vcmUgPyAqLwogCiAJa2ZyZWUoaWQpOwpAQCAtMzU2LDEwICszNDIsMTAgQEAKIAlkaXNhYmxlX2lycV9ub3N5bmMoaHdpZi0+aXJxKTsKIAogCXVkZWxheSgxKTsKLQlTRUxFQ1RfRFJJVkUoZHJpdmUpOworCXRwX29wcy0+ZGV2X3NlbGVjdChkcml2ZSk7CiAJU0VMRUNUX01BU0soZHJpdmUsIDEpOwogCXVkZWxheSgxKTsKLQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMCk7CisJdHBfb3BzLT53cml0ZV9kZXZjdGwoaHdpZiwgQVRBX05JRU4gfCBBVEFfREVWQ1RMX09CUyk7CiAKIAltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19PVVRfRkVBVFVSRSB8IElERV9URkxBR19PVVRfTlNFQ1Q7CkBAIC0zNzEsNyArMzU3LDcgQEAKIAl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX1NFVF9GRUFUVVJFUyk7CiAKIAlpZiAoZHJpdmUtPnF1aXJrX2xpc3QgPT0gMikKLQkJdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOworCQl0cF9vcHMtPndyaXRlX2RldmN0bChod2lmLCBBVEFfREVWQ1RMX09CUyk7CiAKIAllcnJvciA9IF9faWRlX3dhaXRfc3RhdChkcml2ZSwgZHJpdmUtPnJlYWR5X3N0YXQsCiAJCQkJQVRBX0JVU1kgfCBBVEFfRFJRIHwgQVRBX0VSUiwKQEAgLTM4Niw5ICszNzIsMTQgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAotCWlkW0FUQV9JRF9VRE1BX01PREVTXSAgJj0gfjB4RkYwMDsKLQlpZFtBVEFfSURfTVdETUFfTU9ERVNdICY9IH4weDBGMDA7Ci0JaWRbQVRBX0lEX1NXRE1BX01PREVTXSAmPSB+MHgwRjAwOworCWlmIChzcGVlZCA+PSBYRkVSX1NXX0RNQV8wKSB7CisJCWlkW0FUQV9JRF9VRE1BX01PREVTXSAgJj0gfjB4RkYwMDsKKwkJaWRbQVRBX0lEX01XRE1BX01PREVTXSAmPSB+MHgwNzAwOworCQlpZFtBVEFfSURfU1dETUFfTU9ERVNdICY9IH4weDA3MDA7CisJCWlmIChhdGFfaWRfaXNfY2ZhKGlkKSkKKwkJCWlkW0FUQV9JRF9DRkFfTU9ERVNdICY9IH4weDBFMDA7CisJfSBlbHNlCWlmIChhdGFfaWRfaXNfY2ZhKGlkKSkKKwkJaWRbQVRBX0lEX0NGQV9NT0RFU10gJj0gfjB4MDFDMDsKIAogIHNraXA6CiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BCkBAIC00MDEsMTIgKzM5MiwxOCBAQAogCWlmIChzcGVlZCA+PSBYRkVSX1VETUFfMCkgewogCQlpID0gMSA8PCAoc3BlZWQgLSBYRkVSX1VETUFfMCk7CiAJCWlkW0FUQV9JRF9VRE1BX01PREVTXSB8PSAoaSA8PCA4IHwgaSk7CisJfSBlbHNlIGlmIChhdGFfaWRfaXNfY2ZhKGlkKSAmJiBzcGVlZCA+PSBYRkVSX01XX0RNQV8zKSB7CisJCWkgPSBzcGVlZCAtIFhGRVJfTVdfRE1BXzI7CisJCWlkW0FUQV9JRF9DRkFfTU9ERVNdIHw9IGkgPDwgOTsKIAl9IGVsc2UgaWYgKHNwZWVkID49IFhGRVJfTVdfRE1BXzApIHsKIAkJaSA9IDEgPDwgKHNwZWVkIC0gWEZFUl9NV19ETUFfMCk7CiAJCWlkW0FUQV9JRF9NV0RNQV9NT0RFU10gfD0gKGkgPDwgOCB8IGkpOwogCX0gZWxzZSBpZiAoc3BlZWQgPj0gWEZFUl9TV19ETUFfMCkgewogCQlpID0gMSA8PCAoc3BlZWQgLSBYRkVSX1NXX0RNQV8wKTsKIAkJaWRbQVRBX0lEX1NXRE1BX01PREVTXSB8PSAoaSA8PCA4IHwgaSk7CisJfSBlbHNlIGlmIChhdGFfaWRfaXNfY2ZhKGlkKSAmJiBzcGVlZCA+PSBYRkVSX1BJT181KSB7CisJCWkgPSBzcGVlZCAtIFhGRVJfUElPXzQ7CisJCWlkW0FUQV9JRF9DRkFfTU9ERVNdIHw9IGkgPDwgNjsKIAl9CiAKIAlpZiAoIWRyaXZlLT5pbml0X3NwZWVkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXBtLmMgYi9kcml2ZXJzL2lkZS9pZGUtcG0uYwppbmRleCBlYmYyZDIxLi5iYjc4NThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcG0uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcG0uYwpAQCAtMjIzLDYgKzIyMyw3IEBACiAJCSAqIHBvaW50LgogCQkgKi8KIAkJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCQljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwogCQlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJaW50IHJjOwpAQCAtMjMyLDggKzIzMyw4IEBACiAJCXJjID0gaWRlX3dhaXRfbm90X2J1c3koaHdpZiwgMzUwMDApOwogCQlpZiAocmMpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYnVzIG5vdCByZWFkeSBvbiB3YWtldXBcbiIsIGRyaXZlLT5uYW1lKTsKLQkJU0VMRUNUX0RSSVZFKGRyaXZlKTsKLQkJaHdpZi0+dHBfb3BzLT5zZXRfaXJxKGh3aWYsIDEpOworCQl0cF9vcHMtPmRldl9zZWxlY3QoZHJpdmUpOworCQl0cF9vcHMtPndyaXRlX2RldmN0bChod2lmLCBBVEFfREVWQ1RMX09CUyk7CiAJCXJjID0gaWRlX3dhaXRfbm90X2J1c3koaHdpZiwgMTAwMDAwKTsKIAkJaWYgKHJjKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlIG5vdCByZWFkeSBvbiB3YWtldXBcbiIsIGRyaXZlLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKaW5kZXggNTQ4ODY0NS4uZDhjMWMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogCSAqIGR1cmluZyB0aGUgaWRlbnRpZnkgcGhhc2UgdGhhdCB0aGUgSVJRIGhhbmRsZXIgaXNuJ3QgZXhwZWN0aW5nLgogCSAqLwogCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIpCi0JCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKKwkJdHBfb3BzLT53cml0ZV9kZXZjdGwoaHdpZiwgQVRBX05JRU4gfCBBVEFfREVWQ1RMX09CUyk7CiAKIAkvKiB0YWtlIGEgZGVlcCBicmVhdGggKi8KIAltc2xlZXAoNTApOwpAQCAtMzkwLDEzICszOTAsMTMgQEAKIAkgKiAoZS5nLiBjcnc5NjI0IGFzIGRyaXZlMCB3aXRoIGRpc2sgYXMgc2xhdmUpCiAJICovCiAJbXNsZWVwKDUwKTsKLQlTRUxFQ1RfRFJJVkUoZHJpdmUpOworCXRwX29wcy0+ZGV2X3NlbGVjdChkcml2ZSk7CiAJbXNsZWVwKDUwKTsKIAogCWlmIChpZGVfcmVhZF9kZXZpY2UoZHJpdmUpICE9IGRyaXZlLT5zZWxlY3QgJiYgcHJlc2VudCA9PSAwKSB7CiAJCWlmIChkcml2ZS0+ZG4gJiAxKSB7CiAJCQkvKiBleGl0IHdpdGggZHJpdmUwIHNlbGVjdGVkICovCi0JCQlTRUxFQ1RfRFJJVkUoaHdpZi0+ZGV2aWNlc1swXSk7CisJCQl0cF9vcHMtPmRldl9zZWxlY3QoaHdpZi0+ZGV2aWNlc1swXSk7CiAJCQkvKiBhbGxvdyBBVEFfQlVTWSB0byBhc3NlcnQgJiBjbGVhciAqLwogCQkJbXNsZWVwKDUwKTsKIAkJfQpAQCAtNDIyLDcgKzQyMiw3IEBACiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyByZXNwb25zZSAoc3RhdHVzID0gMHglMDJ4KSwgIgogCQkJCQkicmVzZXR0aW5nIGRyaXZlXG4iLCBkcml2ZS0+bmFtZSwgc3RhdCk7CiAJCQltc2xlZXAoNTApOwotCQkJU0VMRUNUX0RSSVZFKGRyaXZlKTsKKwkJCXRwX29wcy0+ZGV2X3NlbGVjdChkcml2ZSk7CiAJCQltc2xlZXAoNTApOwogCQkJdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9ERVZfUkVTRVQpOwogCQkJKHZvaWQpaWRlX2J1c3lfc2xlZXAoaHdpZiwgV0FJVF9XT1JTVENBU0UsIDApOwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAJfQogCWlmIChkcml2ZS0+ZG4gJiAxKSB7CiAJCS8qIGV4aXQgd2l0aCBkcml2ZTAgc2VsZWN0ZWQgKi8KLQkJU0VMRUNUX0RSSVZFKGh3aWYtPmRldmljZXNbMF0pOworCQl0cF9vcHMtPmRldl9zZWxlY3QoaHdpZi0+ZGV2aWNlc1swXSk7CiAJCW1zbGVlcCg1MCk7CiAJCS8qIGVuc3VyZSBkcml2ZSBpcnEgaXMgY2xlYXIgKi8KIAkJKHZvaWQpdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKQEAgLTYwNSw2ICs2MDUsNyBAQAogCiBzdGF0aWMgaW50IGlkZV9wb3J0X3dhaXRfcmVhZHkoaWRlX2h3aWZfdCAqaHdpZikKIHsKKwljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwogCWlkZV9kcml2ZV90ICpkcml2ZTsKIAlpbnQgaSwgcmM7CiAKQEAgLTYyNyw4ICs2MjgsOCBAQAogCQkvKiBJZ25vcmUgZGlza3MgdGhhdCB3ZSB3aWxsIG5vdCBwcm9iZSBmb3IgbGF0ZXIuICovCiAJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1BST0JFKSA9PSAwIHx8CiAJCSAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSkgewotCQkJU0VMRUNUX0RSSVZFKGRyaXZlKTsKLQkJCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKKwkJCXRwX29wcy0+ZGV2X3NlbGVjdChkcml2ZSk7CisJCQl0cF9vcHMtPndyaXRlX2RldmN0bChod2lmLCBBVEFfREVWQ1RMX09CUyk7CiAJCQltZGVsYXkoMik7CiAJCQlyYyA9IGlkZV93YWl0X25vdF9idXN5KGh3aWYsIDM1MDAwKTsKIAkJCWlmIChyYykKQEAgLTY0MCw3ICs2NDEsNyBAQAogb3V0OgogCS8qIEV4aXQgZnVuY3Rpb24gd2l0aCBtYXN0ZXIgcmVzZWxlY3RlZCAobGV0J3MgYmUgc2FuZSkgKi8KIAlpZiAoaSkKLQkJU0VMRUNUX0RSSVZFKGh3aWYtPmRldmljZXNbMF0pOworCQl0cF9vcHMtPmRldl9zZWxlY3QoaHdpZi0+ZGV2aWNlc1swXSk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC04NDUsNyArODQ2LDcgQEAKIAkJaXJxX2hhbmRsZXIgPSBpZGVfaW50cjsKIAogCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIpCi0JCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKKwkJaHdpZi0+dHBfb3BzLT53cml0ZV9kZXZjdGwoaHdpZiwgQVRBX0RFVkNUTF9PQlMpOwogCiAJaWYgKHJlcXVlc3RfaXJxKGh3aWYtPmlycSwgaXJxX2hhbmRsZXIsIHNhLCBod2lmLT5uYW1lLCBod2lmKSkKIAkJZ290byBvdXRfdXA7CkBAIC05NDIsMjAgKzk0MywxNiBAQAogc3RhdGljIHZvaWQgZHJpdmVfcmVsZWFzZV9kZXYgKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlpZGVfZHJpdmVfdCAqZHJpdmUgPSBjb250YWluZXJfb2YoZGV2LCBpZGVfZHJpdmVfdCwgZ2VuZGV2KTsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAKIAlpZGVfcHJvY191bnJlZ2lzdGVyX2RldmljZShkcml2ZSk7CiAKLQlzcGluX2xvY2tfaXJxKCZod2lmLT5sb2NrKTsKKwlibGtfY2xlYW51cF9xdWV1ZShkcml2ZS0+cXVldWUpOworCWRyaXZlLT5xdWV1ZSA9IE5VTEw7CisKIAlrZnJlZShkcml2ZS0+aWQpOwogCWRyaXZlLT5pZCA9IE5VTEw7CisKIAlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUFJFU0VOVDsKLQkvKiBNZXNzZWQgdXAgbG9ja2luZyAuLi4gKi8KLQlzcGluX3VubG9ja19pcnEoJmh3aWYtPmxvY2spOwotCWJsa19jbGVhbnVwX3F1ZXVlKGRyaXZlLT5xdWV1ZSk7Ci0Jc3Bpbl9sb2NrX2lycSgmaHdpZi0+bG9jayk7Ci0JZHJpdmUtPnF1ZXVlID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnEoJmh3aWYtPmxvY2spOwogCiAJY29tcGxldGUoJmRyaXZlLT5nZW5kZXZfcmVsX2NvbXApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKaW5kZXggNjRkZmE3NC4uY2I5NDJhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCkBAIC0yOTcsMTkgKzI5NywxNSBAQAogCXJldHVybiB0YXBlOwogfQogCi1zdGF0aWMgdm9pZCBpZGV0YXBlX2lucHV0X2J1ZmZlcnMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKK3N0YXRpYyBpbnQgaWRldGFwZV9pbnB1dF9idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMsCiAJCQkJICB1bnNpZ25lZCBpbnQgYmNvdW50KQogewogCXN0cnVjdCBpZGV0YXBlX2JoICpiaCA9IHBjLT5iaDsKIAlpbnQgY291bnQ7CiAKIAl3aGlsZSAoYmNvdW50KSB7Ci0JCWlmIChiaCA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiBiaCA9PSBOVUxMIGluICIKLQkJCQkiaWRldGFwZV9pbnB1dF9idWZmZXJzXG4iKTsKLQkJCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIDAsIGJjb3VudCk7Ci0JCQlyZXR1cm47Ci0JCX0KKwkJaWYgKGJoID09IE5VTEwpCisJCQlicmVhazsKIAkJY291bnQgPSBtaW4oCiAJCQkodW5zaWduZWQgaW50KShiaC0+Yl9zaXplIC0gYXRvbWljX3JlYWQoJmJoLT5iX2NvdW50KSksCiAJCQliY291bnQpOwpAQCAtMzIzLDIxICszMTksMjEgQEAKIAkJCQlhdG9taWNfc2V0KCZiaC0+Yl9jb3VudCwgMCk7CiAJCX0KIAl9CisKIAlwYy0+YmggPSBiaDsKKworCXJldHVybiBiY291bnQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZXRhcGVfb3V0cHV0X2J1ZmZlcnMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYywKK3N0YXRpYyBpbnQgaWRldGFwZV9vdXRwdXRfYnVmZmVycyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAogCQkJCSAgIHVuc2lnbmVkIGludCBiY291bnQpCiB7CiAJc3RydWN0IGlkZXRhcGVfYmggKmJoID0gcGMtPmJoOwogCWludCBjb3VudDsKIAogCXdoaWxlIChiY291bnQpIHsKLQkJaWYgKGJoID09IE5VTEwpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiaWRlLXRhcGU6IGJoID09IE5VTEwgaW4gJXNcbiIsCi0JCQkJCV9fZnVuY19fKTsKLQkJCXJldHVybjsKLQkJfQorCQlpZiAoYmggPT0gTlVMTCkKKwkJCWJyZWFrOwogCQljb3VudCA9IG1pbigodW5zaWduZWQgaW50KXBjLT5iX2NvdW50LCAodW5zaWduZWQgaW50KWJjb3VudCk7CiAJCWRyaXZlLT5od2lmLT50cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBOVUxMLCBwYy0+Yl9kYXRhLCBjb3VudCk7CiAJCWJjb3VudCAtPSBjb3VudDsKQEAgLTM1Miw2ICszNDgsOCBAQAogCQkJfQogCQl9CiAJfQorCisJcmV0dXJuIGJjb3VudDsKIH0KIAogc3RhdGljIHZvaWQgaWRldGFwZV91cGRhdGVfYnVmZmVycyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQpAQCAtNTYzLDEyICs1NjEsMTQgQEAKIHN0YXRpYyBpbnQgaWRlX3RhcGVfaW9fYnVmZmVycyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjLAogCQkJCXVuc2lnbmVkIGludCBiY291bnQsIGludCB3cml0ZSkKIHsKLQlpZiAod3JpdGUpCi0JCWlkZXRhcGVfb3V0cHV0X2J1ZmZlcnMoZHJpdmUsIHBjLCBiY291bnQpOwotCWVsc2UKLQkJaWRldGFwZV9pbnB1dF9idWZmZXJzKGRyaXZlLCBwYywgYmNvdW50KTsKKwl1bnNpZ25lZCBpbnQgYmxlZnQ7CiAKLQlyZXR1cm4gYmNvdW50OworCWlmICh3cml0ZSkKKwkJYmxlZnQgPSBpZGV0YXBlX291dHB1dF9idWZmZXJzKGRyaXZlLCBwYywgYmNvdW50KTsKKwllbHNlCisJCWJsZWZ0ID0gaWRldGFwZV9pbnB1dF9idWZmZXJzKGRyaXZlLCBwYywgYmNvdW50KTsKKworCXJldHVybiBiY291bnQgLSBibGVmdDsKIH0KIAogLyoKQEAgLTIwMTQsOSArMjAxNCwxMyBAQAogewogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgcGM7CisJdTggcGNfYnVmWzI1Nl07CiAJY2hhciBmd19yZXZbNF0sIHZlbmRvcl9pZFs4XSwgcHJvZHVjdF9pZFsxNl07CiAKIAlpZGV0YXBlX2NyZWF0ZV9pbnF1aXJ5X2NtZCgmcGMpOworCXBjLmJ1ZiA9ICZwY19idWZbMF07CisJcGMuYnVmX3NpemUgPSBzaXplb2YocGNfYnVmKTsKKwogCWlmIChpZGVfcXVldWVfcGNfdGFpbChkcml2ZSwgdGFwZS0+ZGlzaywgJnBjKSkgewogCQlwcmludGsoS0VSTl9FUlIgImlkZS10YXBlOiAlczogY2FuJ3QgZ2V0IElOUVVJUlkgcmVzdWx0c1xuIiwKIAkJCQl0YXBlLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKaW5kZXggODQ1MzJiZS4uMjQzNDIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKQEAgLTgwLDggKzgwLDE0IEBACiAKIAlpZiAoKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRE1BX1BJT19GQUxMQkFDSykgPT0gMCkgewogCQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgdGYpOwotCQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgMSk7CisJCXRwX29wcy0+d3JpdGVfZGV2Y3RsKGh3aWYsIEFUQV9ERVZDVExfT0JTKTsKIAkJU0VMRUNUX01BU0soZHJpdmUsIDApOworCisJCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfT1VUX0RBVEEpIHsKKwkJCXU4IGRhdGFbMl0gPSB7IHRmLT5kYXRhLCB0Zi0+aG9iX2RhdGEgfTsKKworCQkJdHBfb3BzLT5vdXRwdXRfZGF0YShkcml2ZSwgY21kLCBkYXRhLCAyKTsKKwkJfQogCQl0cF9vcHMtPnRmX2xvYWQoZHJpdmUsIGNtZCk7CiAJfQogCkBAIC0xMDAsOSArMTA2LDcgQEAKIAkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY21kLCBoYW5kbGVyLCBXQUlUX1dPUlNUQ0FTRSk7CiAJCXJldHVybiBpZGVfc3RhcnRlZDsKIAljYXNlIEFUQV9QUk9UX0RNQToKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCB8fAotCQkgICAgaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgY21kKSA9PSAwIHx8Ci0JCSAgICBkbWFfb3BzLT5kbWFfc2V0dXAoZHJpdmUsIGNtZCkpCisJCWlmIChpZGVfZG1hX3ByZXBhcmUoZHJpdmUsIGNtZCkpCiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCWh3aWYtPmV4cGlyeSA9IGRtYV9vcHMtPmRtYV90aW1lcl9leHBpcnk7CiAJCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNtZCwgaWRlX2RtYV9pbnRyLCAyICogV0FJVF9DTUQpOwpAQCAtMTg4LDcwICsxOTIsNjggQEAKIAlyZXR1cm4gc3RhdDsKIH0KIAotc3RhdGljIHZvaWQgaWRlX3Bpb19ieXRlcyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCi0JCQkgIHVuc2lnbmVkIGludCB3cml0ZSwgdW5zaWduZWQgaW50IG5yX2J5dGVzKQordm9pZCBpZGVfcGlvX2J5dGVzKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKKwkJICAgdW5zaWduZWQgaW50IHdyaXRlLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaHdpZi0+c2dfdGFibGU7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXJzZyA9IGNtZC0+Y3Vyc2c7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0jaWZkZWYgQ09ORklHX0hJR0hNRU0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotI2VuZGlmCiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAl1OCAqYnVmOwogCiAJY3Vyc2cgPSBjbWQtPmN1cnNnOwotCWlmICghY3Vyc2cpIHsKLQkJY3Vyc2cgPSBzZzsKLQkJY21kLT5jdXJzZyA9IHNnOworCWlmIChjdXJzZyA9PSBOVUxMKQorCQljdXJzZyA9IGNtZC0+Y3Vyc2cgPSBzZzsKKworCXdoaWxlIChsZW4pIHsKKwkJdW5zaWduZWQgbnJfYnl0ZXMgPSBtaW4obGVuLCBjdXJzZy0+bGVuZ3RoIC0gY21kLT5jdXJzZ19vZnMpOworCisJCWlmIChucl9ieXRlcyA+IFBBR0VfU0laRSkKKwkJCW5yX2J5dGVzID0gUEFHRV9TSVpFOworCisJCXBhZ2UgPSBzZ19wYWdlKGN1cnNnKTsKKwkJb2Zmc2V0ID0gY3Vyc2ctPm9mZnNldCArIGNtZC0+Y3Vyc2dfb2ZzOworCisJCS8qIGdldCB0aGUgY3VycmVudCBwYWdlIGFuZCBvZmZzZXQgKi8KKwkJcGFnZSA9IG50aF9wYWdlKHBhZ2UsIChvZmZzZXQgPj4gUEFHRV9TSElGVCkpOworCQlvZmZzZXQgJT0gUEFHRV9TSVpFOworCisJCWlmIChQYWdlSGlnaE1lbShwYWdlKSkKKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCQlidWYgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9CSU9fU1JDX0lSUSkgKyBvZmZzZXQ7CisKKwkJY21kLT5ubGVmdCAtPSBucl9ieXRlczsKKwkJY21kLT5jdXJzZ19vZnMgKz0gbnJfYnl0ZXM7CisKKwkJaWYgKGNtZC0+Y3Vyc2dfb2ZzID09IGN1cnNnLT5sZW5ndGgpIHsKKwkJCWN1cnNnID0gY21kLT5jdXJzZyA9IHNnX25leHQoY21kLT5jdXJzZyk7CisJCQljbWQtPmN1cnNnX29mcyA9IDA7CisJCX0KKworCQkvKiBkbyB0aGUgYWN0dWFsIGRhdGEgdHJhbnNmZXIgKi8KKwkJaWYgKHdyaXRlKQorCQkJaHdpZi0+dHBfb3BzLT5vdXRwdXRfZGF0YShkcml2ZSwgY21kLCBidWYsIG5yX2J5dGVzKTsKKwkJZWxzZQorCQkJaHdpZi0+dHBfb3BzLT5pbnB1dF9kYXRhKGRyaXZlLCBjbWQsIGJ1ZiwgbnJfYnl0ZXMpOworCisJCWt1bm1hcF9hdG9taWMoYnVmLCBLTV9CSU9fU1JDX0lSUSk7CisKKwkJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKQorCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJCWxlbiAtPSBucl9ieXRlczsKIAl9Ci0KLQlwYWdlID0gc2dfcGFnZShjdXJzZyk7Ci0Jb2Zmc2V0ID0gY3Vyc2ctPm9mZnNldCArIGNtZC0+Y3Vyc2dfb2ZzOwotCi0JLyogZ2V0IHRoZSBjdXJyZW50IHBhZ2UgYW5kIG9mZnNldCAqLwotCXBhZ2UgPSBudGhfcGFnZShwYWdlLCAob2Zmc2V0ID4+IFBBR0VfU0hJRlQpKTsKLQlvZmZzZXQgJT0gUEFHRV9TSVpFOwotCi0jaWZkZWYgQ09ORklHX0hJR0hNRU0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0jZW5kaWYKLQlidWYgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9CSU9fU1JDX0lSUSkgKyBvZmZzZXQ7Ci0KLQljbWQtPm5sZWZ0IC09IG5yX2J5dGVzOwotCWNtZC0+Y3Vyc2dfb2ZzICs9IG5yX2J5dGVzOwotCi0JaWYgKGNtZC0+Y3Vyc2dfb2ZzID09IGN1cnNnLT5sZW5ndGgpIHsKLQkJY21kLT5jdXJzZyA9IHNnX25leHQoY21kLT5jdXJzZyk7Ci0JCWNtZC0+Y3Vyc2dfb2ZzID0gMDsKLQl9Ci0KLQkvKiBkbyB0aGUgYWN0dWFsIGRhdGEgdHJhbnNmZXIgKi8KLQlpZiAod3JpdGUpCi0JCWh3aWYtPnRwX29wcy0+b3V0cHV0X2RhdGEoZHJpdmUsIGNtZCwgYnVmLCBucl9ieXRlcyk7Ci0JZWxzZQotCQlod2lmLT50cF9vcHMtPmlucHV0X2RhdGEoZHJpdmUsIGNtZCwgYnVmLCBucl9ieXRlcyk7Ci0KLQlrdW5tYXBfYXRvbWljKGJ1ZiwgS01fQklPX1NSQ19JUlEpOwotI2lmZGVmIENPTkZJR19ISUdITUVNCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotI2VuZGlmCiB9Ci0KLXN0YXRpYyB2b2lkIGlkZV9waW9fbXVsdGkoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAotCQkJICB1bnNpZ25lZCBpbnQgd3JpdGUpCi17Ci0JdW5zaWduZWQgaW50IG5zZWN0OwotCi0JbnNlY3QgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNtZC0+bmxlZnQgPj4gOSwgZHJpdmUtPm11bHRfY291bnQpOwotCXdoaWxlIChuc2VjdC0tKQotCQlpZGVfcGlvX2J5dGVzKGRyaXZlLCBjbWQsIHdyaXRlLCBTRUNUT1JfU0laRSk7Ci19CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcGlvX2J5dGVzKTsKIAogc3RhdGljIHZvaWQgaWRlX3Bpb19kYXRhYmxvY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJICAgICAgdW5zaWduZWQgaW50IHdyaXRlKQogeworCXVuc2lnbmVkIGludCBucl9ieXRlczsKKwogCXU4IHNhdmVkX2lvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OwogCiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpCkBAIC0yNjMsOSArMjY1LDExIEBACiAJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwogCiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTVVMVElfUElPKQotCQlpZGVfcGlvX211bHRpKGRyaXZlLCBjbWQsIHdyaXRlKTsKKwkJbnJfYnl0ZXMgPSBtaW5fdCh1bnNpZ25lZCwgY21kLT5ubGVmdCwgZHJpdmUtPm11bHRfY291bnQgPDwgOSk7CiAJZWxzZQotCQlpZGVfcGlvX2J5dGVzKGRyaXZlLCBjbWQsIHdyaXRlLCBTRUNUT1JfU0laRSk7CisJCW5yX2J5dGVzID0gU0VDVE9SX1NJWkU7CisKKwlpZGVfcGlvX2J5dGVzKGRyaXZlLCBjbWQsIHdyaXRlLCBucl9ieXRlcyk7CiAKIAlkcml2ZS0+aW9fMzJiaXQgPSBzYXZlZF9pb18zMmJpdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10aW1pbmdzLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGltaW5ncy5jCmluZGV4IDgxZjUyN2EuLjAwMWE1NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10aW1pbmdzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRpbWluZ3MuYwpAQCAtNDMsNiArNDMsOCBAQAogCXsgWEZFUl9VRE1BXzEsICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgODAgfSwKIAl7IFhGRVJfVURNQV8wLCAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgMTIwIH0sCiAKKwl7IFhGRVJfTVdfRE1BXzQsICAyNSwgICAwLCAgIDAsICAgMCwgIDU1LCAgMjAsICA4MCwgICAwIH0sCisJeyBYRkVSX01XX0RNQV8zLCAgMjUsICAgMCwgICAwLCAgIDAsICA2NSwgIDI1LCAxMDAsICAgMCB9LAogCXsgWEZFUl9NV19ETUFfMiwgIDI1LCAgIDAsICAgMCwgICAwLCAgNzAsICAyNSwgMTIwLCAgIDAgfSwKIAl7IFhGRVJfTVdfRE1BXzEsICA0NSwgICAwLCAgIDAsICAgMCwgIDgwLCAgNTAsIDE1MCwgICAwIH0sCiAJeyBYRkVSX01XX0RNQV8wLCAgNjAsICAgMCwgICAwLCAgIDAsIDIxNSwgMjE1LCA0ODAsICAgMCB9LApAQCAtNTEsNyArNTMsOCBAQAogCXsgWEZFUl9TV19ETUFfMSwgIDkwLCAgIDAsICAgMCwgICAwLCAyNDAsIDI0MCwgNDgwLCAgIDAgfSwKIAl7IFhGRVJfU1dfRE1BXzAsIDEyMCwgICAwLCAgIDAsICAgMCwgNDgwLCA0ODAsIDk2MCwgICAwIH0sCiAKLQl7IFhGRVJfUElPXzUsICAgICAyMCwgIDUwLCAgMzAsIDEwMCwgIDUwLCAgMzAsIDEwMCwgICAwIH0sCisJeyBYRkVSX1BJT182LCAgICAgMTAsICA1NSwgIDIwLCAgODAsICA1NSwgIDIwLCAgODAsICAgMCB9LAorCXsgWEZFUl9QSU9fNSwgICAgIDE1LCAgNjUsICAyNSwgMTAwLCAgNjUsICAyNSwgMTAwLCAgIDAgfSwKIAl7IFhGRVJfUElPXzQsICAgICAyNSwgIDcwLCAgMjUsIDEyMCwgIDcwLCAgMjUsIDEyMCwgICAwIH0sCiAJeyBYRkVSX1BJT18zLCAgICAgMzAsICA4MCwgIDcwLCAxODAsICA4MCwgIDcwLCAxODAsICAgMCB9LAogCkBAIC05MCw2ICs5MywxMCBAQAogCQkvKiBjb25zZXJ2YXRpdmUgImRvd25ncmFkZSIgZm9yIGFsbCBwcmUtQVRBMiBkcml2ZXMgKi8KIAkJaWYgKHBpbyA8IDMgJiYgY3ljbGUgPCB0LT5jeWNsZSkKIAkJCWN5Y2xlID0gMDsgLyogdXNlIHN0YW5kYXJkIHRpbWluZyAqLworCisJCS8qIFVzZSB0aGUgc3RhbmRhcmQgdGltaW5nIGZvciB0aGUgQ0Ygc3BlY2lmaWMgbW9kZXMgdG9vICovCisJCWlmIChwaW8gPiA0ICYmIGF0YV9pZF9pc19jZmEoaWQpKQorCQkJY3ljbGUgPSAwOwogCX0KIAogCXJldHVybiBjeWNsZSA/IGN5Y2xlIDogdC0+Y3ljbGU7CkBAIC0xNjEsNyArMTY4LDggQEAKIAogCQlpZiAoc3BlZWQgPD0gWEZFUl9QSU9fMikKIAkJCXAuY3ljbGUgPSBwLmN5YzhiID0gaWRbQVRBX0lEX0VJREVfUElPXTsKLQkJZWxzZSBpZiAoc3BlZWQgPD0gWEZFUl9QSU9fNSkKKwkJZWxzZSBpZiAoKHNwZWVkIDw9IFhGRVJfUElPXzQpIHx8CisJCQkgKHNwZWVkID09IFhGRVJfUElPXzUgJiYgIWF0YV9pZF9pc19jZmEoaWQpKSkKIAkJCXAuY3ljbGUgPSBwLmN5YzhiID0gaWRbQVRBX0lEX0VJREVfUElPX0lPUkRZXTsKIAkJZWxzZSBpZiAoc3BlZWQgPj0gWEZFUl9NV19ETUFfMCAmJiBzcGVlZCA8PSBYRkVSX01XX0RNQV8yKQogCQkJcC5jeWNsZSA9IGlkW0FUQV9JRF9FSURFX0RNQV9NSU5dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jIGIvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jCmluZGV4IDY5MTBmNmEuLmFmNDRiZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS14ZmVyLW1vZGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUteGZlci1tb2RlLmMKQEAgLTksMTEgKzksMTEgQEAKIAkgeyAiVURNQS8xNiIsICJVRE1BLzI1IiwgICJVRE1BLzMzIiwgICJVRE1BLzQ0IiwKIAkgICAiVURNQS82NiIsICJVRE1BLzEwMCIsICJVRE1BLzEzMyIsICJVRE1BNyIgfTsKIHN0YXRpYyBjb25zdCBjaGFyICptd2RtYV9zdHJbXSA9Ci0JeyAiTVdETUEwIiwgIk1XRE1BMSIsICJNV0RNQTIiIH07CisJeyAiTVdETUEwIiwgIk1XRE1BMSIsICJNV0RNQTIiLCAiTVdETUEzIiwgIk1XRE1BNCIgfTsKIHN0YXRpYyBjb25zdCBjaGFyICpzd2RtYV9zdHJbXSA9CiAJeyAiU1dETUEwIiwgIlNXRE1BMSIsICJTV0RNQTIiIH07CiBzdGF0aWMgY29uc3QgY2hhciAqcGlvX3N0cltdID0KLQl7ICJQSU8wIiwgIlBJTzEiLCAiUElPMiIsICJQSU8zIiwgIlBJTzQiLCAiUElPNSIgfTsKKwl7ICJQSU8wIiwgIlBJTzEiLCAiUElPMiIsICJQSU8zIiwgIlBJTzQiLCAiUElPNSIsICJQSU82IiB9OwogCiAvKioKICAqCWlkZV94ZmVyX3ZlcmJvc2UJLQlyZXR1cm4gSURFIG1vZGUgbmFtZXMKQEAgLTMwLDExICszMCwxMSBAQAogCiAJaWYgKG1vZGUgPj0gWEZFUl9VRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1VETUFfNykKIAkJcyA9IHVkbWFfc3RyW2ldOwotCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9NV19ETUFfMCAmJiBtb2RlIDw9IFhGRVJfTVdfRE1BXzIpCisJZWxzZSBpZiAobW9kZSA+PSBYRkVSX01XX0RNQV8wICYmIG1vZGUgPD0gWEZFUl9NV19ETUFfNCkKIAkJcyA9IG13ZG1hX3N0cltpXTsKIAllbHNlIGlmIChtb2RlID49IFhGRVJfU1dfRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1NXX0RNQV8yKQogCQlzID0gc3dkbWFfc3RyW2ldOwotCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9QSU9fMCAmJiBtb2RlIDw9IFhGRVJfUElPXzUpCisJZWxzZSBpZiAobW9kZSA+PSBYRkVSX1BJT18wICYmIG1vZGUgPD0gWEZFUl9QSU9fNikKIAkJcyA9IHBpb19zdHJbaSAmIDB4N107CiAJZWxzZSBpZiAobW9kZSA9PSBYRkVSX1BJT19TTE9XKQogCQlzID0gIlBJTyBTTE9XIjsKQEAgLTc5LDcgKzc5LDEwIEBACiAJCX0KIAogCQlpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpIHsJICAgICAgLyogQVRBMj8gKi8KLQkJCWlmIChhdGFfaWRfaGFzX2lvcmR5KGlkKSkgeworCQkJaWYgKGF0YV9pZF9pc19jZmEoaWQpICYmIChpZFtBVEFfSURfQ0ZBX01PREVTXSAmIDcpKQorCQkJCXBpb19tb2RlID0gNCArIG1pbl90KGludCwgMiwKKwkJCQkJCSAgICAgaWRbQVRBX0lEX0NGQV9NT0RFU10gJiA3KTsKKwkJCWVsc2UgaWYgKGF0YV9pZF9oYXNfaW9yZHkoaWQpKSB7CiAJCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNykgewogCQkJCQlvdmVycmlkZGVuID0gMDsKIAkJCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNCkKQEAgLTIzOSw3ICsyNDIsNyBAQAogCiAJQlVHX09OKHJhdGUgPCBYRkVSX1BJT18wKTsKIAotCWlmIChyYXRlID49IFhGRVJfUElPXzAgJiYgcmF0ZSA8PSBYRkVSX1BJT181KQorCWlmIChyYXRlID49IFhGRVJfUElPXzAgJiYgcmF0ZSA8PSBYRkVSX1BJT182KQogCQlyZXR1cm4gaWRlX3NldF9waW9fbW9kZShkcml2ZSwgcmF0ZSk7CiAKIAlyZXR1cm4gaWRlX3NldF9kbWFfbW9kZShkcml2ZSwgcmF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGVfYXJtLmMgYi9kcml2ZXJzL2lkZS9pZGVfYXJtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNjM4NTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pZGUvaWRlX2FybS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIEFSTSBkZWZhdWx0IElERSBob3N0IGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6Ci0gKiBCYXNlZCBvbiBjb2RlIGJ5OiBSdXNzZWxsIEtpbmcsIElhbiBNb2x0b24gYW5kIEFsZXhhbmRlciBTY2h1bHouCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNkZWZpbmUgRFJWX05BTUUgImlkZV9hcm0iCi0KLSNkZWZpbmUgSURFX0FSTV9JTwkweDFmMAotI2RlZmluZSBJREVfQVJNX0lSUQlJUlFfSEFSRERJU0sKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGlkZV9hcm1fcG9ydF9pbmZvID0gewotCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19OT19ETUEsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpZGVfYXJtX2luaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGJhc2UgPSBJREVfQVJNX0lPLCBjdGwgPSBJREVfQVJNX0lPICsgMHgyMDY7Ci0JaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwotCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihiYXNlLCA4LCBEUlZfTkFNRSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSS9PIHJlc291cmNlIDB4JWxYLTB4JWxYIG5vdCBmcmVlLlxuIiwKLQkJCQlEUlZfTkFNRSwgYmFzZSwgYmFzZSArIDcpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCWlmICghcmVxdWVzdF9yZWdpb24oY3RsLCAxLCBEUlZfTkFNRSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSS9PIHJlc291cmNlIDB4JWxYIG5vdCBmcmVlLlxuIiwKLQkJCQlEUlZfTkFNRSwgY3RsKTsKLQkJcmVsZWFzZV9yZWdpb24oYmFzZSwgOCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JbWVtc2V0KCZodywgMCwgc2l6ZW9mKGh3KSk7Ci0JaWRlX3N0ZF9pbml0X3BvcnRzKCZodywgYmFzZSwgY3RsKTsKLQlody5pcnEgPSBJREVfQVJNX0lSUTsKLQlody5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7Ci0KLQlyZXR1cm4gaWRlX2hvc3RfYWRkKCZpZGVfYXJtX3BvcnRfaW5mbywgaHdzLCBOVUxMKTsKLX0KLQotbW9kdWxlX2luaXQoaWRlX2FybV9pbml0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaXQ4MjF4LmMgYi9kcml2ZXJzL2lkZS9pdDgyMXguYwppbmRleCAwZDRhYzY1Li41MWFhNzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pdDgyMXguYworKysgYi9kcml2ZXJzL2lkZS9pdDgyMXguYwpAQCAtNTExLDkgKzUxMSw4IEBACiAJLmRtYV9zdGFydAkJPSBpdDgyMXhfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGl0ODIxeF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKLQkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbnM4NzQxNS5jIGIvZHJpdmVycy9pZGUvbnM4NzQxNS5jCmluZGV4IDdiNjVmZTUuLjcxYTM5ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL25zODc0MTUuYworKysgYi9kcml2ZXJzL2lkZS9uczg3NDE1LmMKQEAgLTY2LDE4ICs2NiwxMSBAQAogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmRyaXZlLT5od2lmLT5pb19wb3J0czsKIAlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCi0JaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19JTl9EQVRBKSB7Ci0JCXUxNiBkYXRhID0gaW53KGlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCi0JCXRmLT5kYXRhID0gZGF0YSAmIDB4ZmY7Ci0JCXRmLT5ob2JfZGF0YSA9IChkYXRhID4+IDgpICYgMHhmZjsKLQl9Ci0KIAkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCi0Jb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCW91dGIoQVRBX0RFVkNUTF9PQlMsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQotCQl0Zi0+ZmVhdHVyZSA9IGluYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9FUlJPUikKKwkJdGYtPmVycm9yICA9IGluYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IGluYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKQEAgLTkwLDI4ICs4MywzMCBAQAogCQl0Zi0+ZGV2aWNlID0gc3VwZXJpb19pZGVfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiAKIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewotCQlvdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKwkJb3V0YihBVEFfSE9CIHwgQVRBX0RFVkNUTF9PQlMsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCi0JCQl0Zi0+aG9iX2ZlYXR1cmUgPSBpbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9FUlJPUikKKwkJCXRmLT5ob2JfZXJyb3IgPSBpbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CiAJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKLQkJCXRmLT5ob2JfbnNlY3QgICA9IGluYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJCQl0Zi0+aG9iX25zZWN0ID0gaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKIAkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCi0JCQl0Zi0+aG9iX2xiYWwgICAgPSBpbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJCQl0Zi0+aG9iX2xiYWwgID0gaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwogCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKLQkJCXRmLT5ob2JfbGJhbSAgICA9IGluYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwkJCXRmLT5ob2JfbGJhbSAgPSBpbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CiAJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQotCQkJdGYtPmhvYl9sYmFoICAgID0gaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCQkJdGYtPmhvYl9sYmFoICA9IGluYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG5zODc0MTVfZGV2X3NlbGVjdChpZGVfZHJpdmVfdCAqZHJpdmUpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgc3VwZXJpb190cF9vcHMgPSB7CiAJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAogCS5yZWFkX3N0YXR1cwkJPSBzdXBlcmlvX3JlYWRfc3RhdHVzLAogCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBpZGVfd3JpdGVfZGV2Y3RsLAogCi0JLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCi0KKwkuZGV2X3NlbGVjdAkJPSBuczg3NDE1X2Rldl9zZWxlY3QsCiAJLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCiAJLnRmX3JlYWQJCT0gc3VwZXJpb190Zl9yZWFkLAogCkBAIC0xOTAsMTAgKzE4NSwxOCBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgbnM4NzQxNV9zZWxlY3Rwcm9jIChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBuczg3NDE1X2Rldl9zZWxlY3QoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCW5zODc0MTVfcHJlcGFyZV9kcml2ZShkcml2ZSwKIAkJCSAgICAgICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSk7CisKKwlvdXRiKGRyaXZlLT5zZWxlY3QgfCBBVEFfREVWSUNFX09CUywgZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRldmljZV9hZGRyKTsKK30KKworc3RhdGljIHZvaWQgbnM4NzQxNV9kbWFfc3RhcnQoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCW5zODc0MTVfcHJlcGFyZV9kcml2ZShkcml2ZSwgMSk7CisJaWRlX2RtYV9zdGFydChkcml2ZSk7CiB9CiAKIHN0YXRpYyBpbnQgbnM4NzQxNV9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTIwMSw3ICsyMDQsNiBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1OCBkbWFfc3RhdCA9IDAsIGRtYV9jbWQgPSAwOwogCi0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CiAJZG1hX3N0YXQgPSBod2lmLT5kbWFfb3BzLT5kbWFfc2ZmX3JlYWRfc3RhdHVzKGh3aWYpOwogCS8qIGdldCBETUEgY29tbWFuZCBtb2RlICovCiAJZG1hX2NtZCA9IGluYihod2lmLT5kbWFfYmFzZSArIEFUQV9ETUFfQ01EKTsKQEAgLTIxMCwyMyArMjEyLDEzIEBACiAJLyogZnJvbSBFUlJBVEE6IGNsZWFyIHRoZSBJTlRSICYgRVJST1IgYml0cyAqLwogCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CiAJb3V0YihkbWFfY21kIHwgNiwgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7Ci0JLyogYW5kIGZyZWUgYW55IERNQSByZXNvdXJjZXMgKi8KLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CisKKwluczg3NDE1X3ByZXBhcmVfZHJpdmUoZHJpdmUsIDApOworCiAJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwogCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0OwogfQogCi1zdGF0aWMgaW50IG5zODc0MTVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKLXsKLQkvKiBzZWxlY3QgRE1BIHhmZXIgKi8KLQluczg3NDE1X3ByZXBhcmVfZHJpdmUoZHJpdmUsIDEpOwotCWlmIChpZGVfZG1hX3NldHVwKGRyaXZlLCBjbWQpID09IDApCi0JCXJldHVybiAwOwotCS8qIERNQSBmYWlsZWQ6IHNlbGVjdCBQSU8geGZlciAqLwotCW5zODc0MTVfcHJlcGFyZV9kcml2ZShkcml2ZSwgMCk7Ci0JcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfbnM4NzQxNSAoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwpAQCAtMjQyLDcgKzIzNCw3IEBACiAJICogQWxzbywgbGVhdmUgSVJRIG1hc2tlZCBkdXJpbmcgZHJpdmUgcHJvYmluZywgdG8gcHJldmVudCBpbmZpbml0ZQogCSAqIGludGVycnVwdHMgZnJvbSBhIHBvdGVudGlhbGx5IGZsb2F0aW5nIElOVEEuLgogCSAqCi0JICogSVJRcyBnZXQgdW5tYXNrZWQgaW4gc2VsZWN0cHJvYyB3aGVuIGRyaXZlIGlzIGZpcnN0IHVzZWQuCisJICogSVJRcyBnZXQgdW5tYXNrZWQgaW4gZGV2X3NlbGVjdCgpIHdoZW4gZHJpdmUgaXMgZmlyc3QgdXNlZC4KIAkgKi8KIAkodm9pZCkgcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgJmN0cmwpOwogCSh2b2lkKSBwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4MDksICZwcm9naWYpOwpAQCAtMjcwLDcgKzI2Miw3IEBACiAjaWZkZWYgX19zcGFyY192OV9fCiAJCS8qCiAJCSAqIFhYWDogUmVzZXQgdGhlIGRldmljZSwgaWYgd2UgZG9uJ3QgaXQgd2lsbCBub3QgcmVzcG9uZCB0bwotCQkgKiAgICAgIFNFTEVDVF9EUklWRSgpIHByb3Blcmx5IGR1cmluZyBmaXJzdCBpZGVfcHJvYmVfcG9ydCgpLgorCQkgKiAgICAgIGRldl9zZWxlY3QoKSBwcm9wZXJseSBkdXJpbmcgZmlyc3QgaWRlX3Byb2JlX3BvcnQoKS4KIAkJICovCiAJCXRpbWVvdXQgPSAxMDAwMDsKIAkJb3V0YigxMiwgaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOwpAQCAtMjk0LDI2ICsyODYsMzUgQEAKIAlvdXRiKDB4NjAsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9TVEFUVVMpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBuczg3NDE1X3BvcnRfb3BzID0gewotCS5zZWxlY3Rwcm9jCQk9IG5zODc0MTVfc2VsZWN0cHJvYywKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyBuczg3NDE1X3RwX29wcyA9IHsKKwkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCisJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKKwkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS53cml0ZV9kZXZjdGwJCT0gaWRlX3dyaXRlX2RldmN0bCwKKworCS5kZXZfc2VsZWN0CQk9IG5zODc0MTVfZGV2X3NlbGVjdCwKKwkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKKwkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKKworCS5pbnB1dF9kYXRhCQk9IGlkZV9pbnB1dF9kYXRhLAorCS5vdXRwdXRfZGF0YQkJPSBpZGVfb3V0cHV0X2RhdGEsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIG5zODc0MTVfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCi0JLmRtYV9zZXR1cAkJPSBuczg3NDE1X2RtYV9zZXR1cCwKLQkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCisJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAorCS5kbWFfc3RhcnQJCT0gbnM4NzQxNV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gbnM4NzQxNV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiAJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IHN1cGVyaW9fZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBuczg3NDE1X2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZQkJPSBEUlZfTkFNRSwKIAkuaW5pdF9od2lmCT0gaW5pdF9od2lmX25zODc0MTUsCi0JLnBvcnRfb3BzCT0gJm5zODc0MTVfcG9ydF9vcHMsCisJLnRwX29wcyAJPSAmbnM4NzQxNV90cF9vcHMsCiAJLmRtYV9vcHMJPSAmbnM4NzQxNV9kbWFfb3BzLAogCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSB8CiAJCQkgIElERV9IRkxBR19OT19BVEFQSV9ETUEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jCmluZGV4IGY3NTM2ZDEuLjI0OGE1NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jCisrKyBiL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jCkBAIC0yNTgsMTIgKzI1OCw2IEBACiAJaWRlX2RtYV9sb3N0X2lycShkcml2ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBkYzIwMnh4X2RtYV90aW1lb3V0KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlwZGMyMDJ4eF9yZXNldChkcml2ZSk7Ci0JaWRlX2RtYV90aW1lb3V0KGRyaXZlKTsKLX0KLQogc3RhdGljIGludCBpbml0X2NoaXBzZXRfcGRjMjAyeHgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGRtYWJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKQEAgLTMzNiw3ICszMzAsNyBAQAogCS5kbWFfdGVzdF9pcnEJCT0gcGRjMjAyeHhfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gcGRjMjAyeHhfZG1hX2xvc3RfaXJxLAogCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAotCS5kbWFfdGltZW91dAkJPSBwZGMyMDJ4eF9kbWFfdGltZW91dCwKKwkuZG1hX2NsZWFyCQk9IHBkYzIwMnh4X3Jlc2V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogCkBAIC0zNDgsNyArMzQyLDcgQEAKIAkuZG1hX3Rlc3RfaXJxCQk9IHBkYzIwMnh4X2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IHBkYzIwMnh4X2RtYV9sb3N0X2lycSwKIAkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKLQkuZG1hX3RpbWVvdXQJCT0gcGRjMjAyeHhfZG1hX3RpbWVvdXQsCisJLmRtYV9jbGVhcgkJPSBwZGMyMDJ4eF9yZXNldCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcG1hYy5jIGIvZHJpdmVycy9pZGUvcG1hYy5jCmluZGV4IDJiZmNmZWQuLjA1MmI5YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BtYWMuYworKysgYi9kcml2ZXJzL2lkZS9wbWFjLmMKQEAgLTQwNCw4ICs0MDQsNiBAQAogI2RlZmluZSBJREVfV0FLRVVQX0RFTEFZCSgxKkhaKQogCiBzdGF0aWMgaW50IHBtYWNfaWRlX2luaXRfZG1hKGlkZV9od2lmX3QgKiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKik7Ci1zdGF0aWMgdm9pZCBwbWFjX2lkZV9zZWxlY3Rwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSk7Ci1zdGF0aWMgdm9pZCBwbWFjX2lkZV9rYXVhaV9zZWxlY3Rwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSk7CiAKICNkZWZpbmUgUE1BQ19JREVfUkVHKHgpIFwKIAkoKHZvaWQgX19pb21lbSAqKSgoZHJpdmUpLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHIgKyAoeCkpKQpAQCAtNDE1LDggKzQxMyw3IEBACiAgKiB0aW1pbmcgcmVnaXN0ZXIgd2hlbiBzZWxlY3RpbmcgdGhhdCB1bml0LiBUaGlzIHZlcnNpb24gaXMgZm9yCiAgKiBBU0lDcyB3aXRoIGEgc2luZ2xlIHRpbWluZyByZWdpc3RlcgogICovCi1zdGF0aWMgdm9pZAotcG1hY19pZGVfc2VsZWN0cHJvYyhpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCBwbWFjX2lkZV9hcHBseV90aW1pbmdzKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KQEAgLTQzNCw4ICs0MzEsNyBAQAogICogdGltaW5nIHJlZ2lzdGVyIHdoZW4gc2VsZWN0aW5nIHRoYXQgdW5pdC4gVGhpcyB2ZXJzaW9uIGlzIGZvcgogICogQVNJQ3Mgd2l0aCBhIGR1YWwgdGltaW5nIHJlZ2lzdGVyIChLYXVhaSkKICAqLwotc3RhdGljIHZvaWQKLXBtYWNfaWRlX2thdWFpX3NlbGVjdHByb2MoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgcG1hY19pZGVfa2F1YWlfYXBwbHlfdGltaW5ncyhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CkBAIC00NjQsOSArNDYwLDI1IEBACiAJaWYgKHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9zaF9hdGE2IHx8CiAJICAgIHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl91bl9hdGE2IHx8CiAJICAgIHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9rMl9hdGE2KQotCQlwbWFjX2lkZV9rYXVhaV9zZWxlY3Rwcm9jKGRyaXZlKTsKKwkJcG1hY19pZGVfa2F1YWlfYXBwbHlfdGltaW5ncyhkcml2ZSk7CiAJZWxzZQotCQlwbWFjX2lkZV9zZWxlY3Rwcm9jKGRyaXZlKTsKKwkJcG1hY19pZGVfYXBwbHlfdGltaW5ncyhkcml2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBtYWNfZGV2X3NlbGVjdChpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJcG1hY19pZGVfYXBwbHlfdGltaW5ncyhkcml2ZSk7CisKKwl3cml0ZWIoZHJpdmUtPnNlbGVjdCB8IEFUQV9ERVZJQ0VfT0JTLAorCSAgICAgICAodm9pZCBfX2lvbWVtICopZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRldmljZV9hZGRyKTsKK30KKworc3RhdGljIHZvaWQgcG1hY19rYXVhaV9kZXZfc2VsZWN0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlwbWFjX2lkZV9rYXVhaV9hcHBseV90aW1pbmdzKGRyaXZlKTsKKworCXdyaXRlYihkcml2ZS0+c2VsZWN0IHwgQVRBX0RFVklDRV9PQlMsCisJICAgICAgICh2b2lkIF9faW9tZW0gKilkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGV2aWNlX2FkZHIpOwogfQogCiBzdGF0aWMgdm9pZCBwbWFjX2V4ZWNfY29tbWFuZChpZGVfaHdpZl90ICpod2lmLCB1OCBjbWQpCkBAIC00NzYsMTcgKzQ4OCw4IEBACiAJCQkJICAgICArIElERV9USU1JTkdfQ09ORklHKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBtYWNfc2V0X2lycShpZGVfaHdpZl90ICpod2lmLCBpbnQgb24pCitzdGF0aWMgdm9pZCBwbWFjX3dyaXRlX2RldmN0bChpZGVfaHdpZl90ICpod2lmLCB1OCBjdGwpCiB7Ci0JdTggY3RsID0gQVRBX0RFVkNUTF9PQlM7Ci0KLQlpZiAob24gPT0gNCkgeyAvKiBoYWNrIGZvciBTUlNUICovCi0JCWN0bCB8PSA0OwotCQlvbiAmPSB+NDsKLQl9Ci0KLQljdGwgfD0gb24gPyAwIDogMjsKLQogCXdyaXRlYihjdGwsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7CiAJKHZvaWQpcmVhZGwoKHZvaWQgX19pb21lbSAqKShod2lmLT5pb19wb3J0cy5kYXRhX2FkZHIKIAkJCQkgICAgICsgSURFX1RJTUlOR19DT05GSUcpKTsKQEAgLTkxNiwxMCArOTE5LDE4IEBACiAJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBtaWYtPm5vZGU7CiAJY29uc3QgY2hhciAqY2FibGUgPSBvZl9nZXRfcHJvcGVydHkobnAsICJjYWJsZS10eXBlIiwgTlVMTCk7CisJc3RydWN0IGRldmljZV9ub2RlICpyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwljb25zdCBjaGFyICptb2RlbCA9IG9mX2dldF9wcm9wZXJ0eShyb290LCAibW9kZWwiLCBOVUxMKTsKIAogCS8qIEdldCBjYWJsZSB0eXBlIGZyb20gZGV2aWNlLXRyZWUuICovCi0JaWYgKGNhYmxlICYmICFzdHJuY21wKGNhYmxlLCAiODAtIiwgMykpCi0JCXJldHVybiBBVEFfQ0JMX1BBVEE4MDsKKwlpZiAoY2FibGUgJiYgIXN0cm5jbXAoY2FibGUsICI4MC0iLCAzKSkgeworCQkvKiBTb21lIGRyaXZlcyBmYWlsIHRvIGRldGVjdCA4MGMgY2FibGUgaW4gUG93ZXJCb29rICovCisJCS8qIFRoZXNlIG1hY2hpbmUgdXNlIHByb3ByaWV0YXJ5IHNob3J0IElERSBjYWJsZSBhbnl3YXkgKi8KKwkJaWYgKCFzdHJuY21wKG1vZGVsLCAiUG93ZXJCb29rIiwgOSkpCisJCQlyZXR1cm4gQVRBX0NCTF9QQVRBNDBfU0hPUlQ7CisJCWVsc2UKKwkJCXJldHVybiBBVEFfQ0JMX1BBVEE4MDsKKwl9CiAKIAkvKgogCSAqIEc1J3Mgc2VlbSB0byBoYXZlIGluY29ycmVjdCBjYWJsZSB0eXBlIGluIGRldmljZS10cmVlLgpAQCAtOTU0LDkgKzk2NSw5IEBACiAJLmV4ZWNfY29tbWFuZAkJPSBwbWFjX2V4ZWNfY29tbWFuZCwKIAkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAogCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBwbWFjX3dyaXRlX2RldmN0bCwKIAotCS5zZXRfaXJxCQk9IHBtYWNfc2V0X2lycSwKLQorCS5kZXZfc2VsZWN0CQk9IHBtYWNfZGV2X3NlbGVjdCwKIAkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKIAkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKIApAQCAtOTY0LDE5ICs5NzUsMjQgQEAKIAkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgcG1hY19pZGVfYXRhNl9wb3J0X29wcyA9IHsKLQkuaW5pdF9kZXYJCT0gcG1hY19pZGVfaW5pdF9kZXYsCi0JLnNldF9waW9fbW9kZQkJPSBwbWFjX2lkZV9zZXRfcGlvX21vZGUsCi0JLnNldF9kbWFfbW9kZQkJPSBwbWFjX2lkZV9zZXRfZG1hX21vZGUsCi0JLnNlbGVjdHByb2MJCT0gcG1hY19pZGVfa2F1YWlfc2VsZWN0cHJvYywKLQkuY2FibGVfZGV0ZWN0CQk9IHBtYWNfaWRlX2NhYmxlX2RldGVjdCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyBwbWFjX2F0YTZfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gcG1hY19leGVjX2NvbW1hbmQsCisJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKKwkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS53cml0ZV9kZXZjdGwJCT0gcG1hY193cml0ZV9kZXZjdGwsCisKKwkuZGV2X3NlbGVjdAkJPSBwbWFjX2thdWFpX2Rldl9zZWxlY3QsCisJLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCisJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCisKKwkuaW5wdXRfZGF0YQkJPSBpZGVfaW5wdXRfZGF0YSwKKwkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgcG1hY19pZGVfYXRhNF9wb3J0X29wcyA9IHsKIAkuaW5pdF9kZXYJCT0gcG1hY19pZGVfaW5pdF9kZXYsCiAJLnNldF9waW9fbW9kZQkJPSBwbWFjX2lkZV9zZXRfcGlvX21vZGUsCiAJLnNldF9kbWFfbW9kZQkJPSBwbWFjX2lkZV9zZXRfZG1hX21vZGUsCi0JLnNlbGVjdHByb2MJCT0gcG1hY19pZGVfc2VsZWN0cHJvYywKIAkuY2FibGVfZGV0ZWN0CQk9IHBtYWNfaWRlX2NhYmxlX2RldGVjdCwKIH07CiAKQEAgLTk4NCw3ICsxMDAwLDYgQEAKIAkuaW5pdF9kZXYJCT0gcG1hY19pZGVfaW5pdF9kZXYsCiAJLnNldF9waW9fbW9kZQkJPSBwbWFjX2lkZV9zZXRfcGlvX21vZGUsCiAJLnNldF9kbWFfbW9kZQkJPSBwbWFjX2lkZV9zZXRfZG1hX21vZGUsCi0JLnNlbGVjdHByb2MJCT0gcG1hY19pZGVfc2VsZWN0cHJvYywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgcG1hY19kbWFfb3BzOwpAQCAtMTAyMSwxNSArMTAzNiwxOCBAQAogCXBtaWYtPmJyb2tlbl9kbWEgPSBwbWlmLT5icm9rZW5fZG1hX3dhcm4gPSAwOwogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInNoYXN0YS1hdGEiKSkgewogCQlwbWlmLT5raW5kID0gY29udHJvbGxlcl9zaF9hdGE2OwotCQlkLnBvcnRfb3BzID0gJnBtYWNfaWRlX2F0YTZfcG9ydF9vcHM7CisJCWQudHBfb3BzID0gJnBtYWNfYXRhNl90cF9vcHM7CisJCWQucG9ydF9vcHMgPSAmcG1hY19pZGVfYXRhNF9wb3J0X29wczsKIAkJZC51ZG1hX21hc2sgPSBBVEFfVURNQTY7CiAJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImthdWFpLWF0YSIpKSB7CiAJCXBtaWYtPmtpbmQgPSBjb250cm9sbGVyX3VuX2F0YTY7Ci0JCWQucG9ydF9vcHMgPSAmcG1hY19pZGVfYXRhNl9wb3J0X29wczsKKwkJZC50cF9vcHMgPSAmcG1hY19hdGE2X3RwX29wczsKKwkJZC5wb3J0X29wcyA9ICZwbWFjX2lkZV9hdGE0X3BvcnRfb3BzOwogCQlkLnVkbWFfbWFzayA9IEFUQV9VRE1BNTsKIAl9IGVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiSzItVUFUQSIpKSB7CiAJCXBtaWYtPmtpbmQgPSBjb250cm9sbGVyX2syX2F0YTY7Ci0JCWQucG9ydF9vcHMgPSAmcG1hY19pZGVfYXRhNl9wb3J0X29wczsKKwkJZC50cF9vcHMgPSAmcG1hY19hdGE2X3RwX29wczsKKwkJZC5wb3J0X29wcyA9ICZwbWFjX2lkZV9hdGE0X3BvcnRfb3BzOwogCQlkLnVkbWFfbWFzayA9IEFUQV9VRE1BNTsKIAl9IGVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAia2V5bGFyZ28tYXRhIikpIHsKIAkJaWYgKHN0cmNtcChucC0+bmFtZSwgImF0YS00IikgPT0gMCkgewpAQCAtMTQ1NSw3ICsxNDczLDcgQEAKIAkJCQkgICAgICAgInN3aXRjaGluZyB0byBQSU8gb24gT2hhcmUgY2hpcHNldFxuIiwgZHJpdmUtPm5hbWUpOwogCQkJCXBtaWYtPmJyb2tlbl9kbWFfd2FybiA9IDE7CiAJCQl9Ci0JCQlnb3RvIHVzZV9waW9faW5zdGVhZDsKKwkJCXJldHVybiAwOwogCQl9CiAJCXdoaWxlIChjdXJfbGVuKSB7CiAJCQl1bnNpZ25lZCBpbnQgdGMgPSAoY3VyX2xlbiA8IDB4ZmUwMCk/IGN1cl9sZW46IDB4ZmUwMDsKQEAgLTE0NjMsNyArMTQ4MSw3IEBACiAJCQlpZiAoY291bnQrKyA+PSBNQVhfRENNRFMpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIHRhYmxlIHRvbyBzbWFsbFxuIiwKIAkJCQkgICAgICAgZHJpdmUtPm5hbWUpOwotCQkJCWdvdG8gdXNlX3Bpb19pbnN0ZWFkOworCQkJCXJldHVybiAwOwogCQkJfQogCQkJc3RfbGUxNigmdGFibGUtPmNvbW1hbmQsIHdyPyBPVVRQVVRfTU9SRTogSU5QVVRfTU9SRSk7CiAJCQlzdF9sZTE2KCZ0YWJsZS0+cmVxX2NvdW50LCB0Yyk7CkBAIC0xNDkyLDkgKzE1MTAsNiBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBlbXB0eSBETUEgdGFibGU/XG4iLCBkcml2ZS0+bmFtZSk7CiAKLXVzZV9waW9faW5zdGVhZDoKLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7Ci0KIAlyZXR1cm4gMDsgLyogcmV2ZXJ0IHRvIFBJTyBmb3IgdGhpcyByZXF1ZXN0ICovCiB9CiAKQEAgLTE1MTAsMTAgKzE1MjUsOCBAQAogCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxLCBhdGE0ID0gKHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9rbF9hdGE0KTsKIAl1OCB3cml0ZSA9ICEhKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpOwogCi0JaWYgKHBtYWNfaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApIHsKLQkJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKKwlpZiAocG1hY19pZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCkgPT0gMCkKIAkJcmV0dXJuIDE7Ci0JfQogCiAJLyogQXBwbGUgYWRkcyA2MG5zIHRvIHdyRGF0YVNldHVwIG9uIHJlYWRzICovCiAJaWYgKGF0YTQgJiYgKHBtaWYtPnRpbWluZ3NbdW5pdF0gJiBUUl82Nl9VRE1BX0VOKSkgewpAQCAtMTUyMiw4ICsxNTM1LDYgQEAKIAkJKHZvaWQpcmVhZGwoUE1BQ19JREVfUkVHKElERV9USU1JTkdfQ09ORklHKSk7CiAJfQogCi0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDE7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU1OCwxMiArMTU2OSw5IEBACiAJdm9sYXRpbGUgc3RydWN0IGRiZG1hX3JlZ3MgX19pb21lbSAqZG1hID0gcG1pZi0+ZG1hX3JlZ3M7CiAJdTMyIGRzdGF0OwogCi0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7CiAJZHN0YXQgPSByZWFkbCgmZG1hLT5zdGF0dXMpOwogCXdyaXRlbCgoKFJVTnxXQUtFfERFQUQpIDw8IDE2KSwgJmRtYS0+Y29udHJvbCk7CiAKLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7Ci0KIAkvKiB2ZXJpZnkgZ29vZCBkbWEgc3RhdHVzLiB3ZSBkb24ndCBjaGVjayBmb3IgQUNUSVZFIGJlZWluZyAwLiBXZSBzaG91bGQuLi4KIAkgKiBpbiB0aGVvcnksIGJ1dCB3aXRoIEFUQVBJIGRlY2ljZXMgZG9pbmcgYnVmZmVyIHVuZGVycnVucywgdGhhdCB3b3VsZAogCSAqIGNhdXNlIHVzIHRvIGRpc2FibGUgRE1BLCB3aGljaCBpc24ndCB3aGF0IHdlIHdhbnQKQEAgLTE2NTAsNyArMTY1OCw2IEBACiAJLmRtYV9zdGFydAkJPSBwbWFjX2lkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gcG1hY19pZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IHBtYWNfaWRlX2RtYV90ZXN0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfbG9zdF9pcnEJCT0gcG1hY19pZGVfZG1hX2xvc3RfaXJxLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcTQwaWRlLmMgYi9kcml2ZXJzL2lkZS9xNDBpZGUuYwppbmRleCAyYTQzYTJmLi5kMDA3ZTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9xNDBpZGUuYworKysgYi9kcml2ZXJzL2lkZS9xNDBpZGUuYwpAQCAtOTksOSArOTksOSBAQAogCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKIAkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAogCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBpZGVfd3JpdGVfZGV2Y3RsLAogCi0JLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCi0KKwkuZGV2X3NlbGVjdAkJPSBpZGVfZGV2X3NlbGVjdCwKIAkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKIAkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcWQ2NXh4LmMgYi9kcml2ZXJzL2lkZS9xZDY1eHguYwppbmRleCAwOGM0ZmEzLi5jOWExMzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9xZDY1eHguYworKysgYi9kcml2ZXJzL2lkZS9xZDY1eHguYwpAQCAtOTAsMTMgKzkwLDE1IEBACiAgKiBUaGlzIHJvdXRpbmUgaXMgaW52b2tlZCB0byBwcmVwYXJlIGZvciBhY2Nlc3MgdG8gYSBnaXZlbiBkcml2ZS4KICAqLwogCi1zdGF0aWMgdm9pZCBxZDY1eHhfc2VsZWN0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIHFkNjV4eF9kZXZfc2VsZWN0KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAl1OCBpbmRleCA9ICgoCShRRF9USU1SRUcoZHJpdmUpKSAmIDB4ODAgKSA+PiA3KSB8CiAJCQkoUURfVElNUkVHKGRyaXZlKSAmIDB4MDIpOwogCiAJaWYgKHRpbWluZ3NbaW5kZXhdICE9IFFEX1RJTUlORyhkcml2ZSkpCiAJCW91dGIodGltaW5nc1tpbmRleF0gPSBRRF9USU1JTkcoZHJpdmUpLCBRRF9USU1SRUcoZHJpdmUpKTsKKworCW91dGIoZHJpdmUtPnNlbGVjdCB8IEFUQV9ERVZJQ0VfT0JTLCBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGV2aWNlX2FkZHIpOwogfQogCiAvKgpAQCAtMzA5LDIwICszMTEsMzMgQEAKIAlkcml2ZS0+ZHJpdmVfZGF0YSA9IChkcml2ZS0+ZG4gJiAxKSA/IHQyIDogdDE7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyBxZDY1eHhfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBpZGVfd3JpdGVfZGV2Y3RsLAorCisJLmRldl9zZWxlY3QJCT0gcWQ2NXh4X2Rldl9zZWxlY3QsCisJLnRmX2xvYWQJCT0gaWRlX3RmX2xvYWQsCisJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCisKKwkuaW5wdXRfZGF0YQkJPSBpZGVfaW5wdXRfZGF0YSwKKwkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgcWQ2NTAwX3BvcnRfb3BzID0gewogCS5pbml0X2RldgkJPSBxZDY1MDBfaW5pdF9kZXYsCiAJLnNldF9waW9fbW9kZQkJPSBxZDY1MDBfc2V0X3Bpb19tb2RlLAotCS5zZWxlY3Rwcm9jCQk9IHFkNjV4eF9zZWxlY3QsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBxZDY1ODBfcG9ydF9vcHMgPSB7CiAJLmluaXRfZGV2CQk9IHFkNjU4MF9pbml0X2RldiwKIAkuc2V0X3Bpb19tb2RlCQk9IHFkNjU4MF9zZXRfcGlvX21vZGUsCi0JLnNlbGVjdHByb2MJCT0gcWQ2NXh4X3NlbGVjdCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBxZDY1eHhfcG9ydF9pbmZvIF9faW5pdGRhdGEgPSB7CiAJLm5hbWUJCQk9IERSVl9OQU1FLAorCS50cF9vcHMgCQk9ICZxZDY1eHhfdHBfb3BzLAogCS5jaGlwc2V0CQk9IGlkZV9xZDY1eHgsCiAJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX0lPXzMyQklUIHwKIAkJCQkgIElERV9IRkxBR19OT19ETUEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zYzEyMDAuYyBiL2RyaXZlcnMvaWRlL3NjMTIwMC5jCmluZGV4IDFjM2E4MjkuLmQ0Njc0NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NjMTIwMC5jCisrKyBiL2RyaXZlcnMvaWRlL3NjMTIwMC5jCkBAIC0xMTUsOCArMTE1LDcgQEAKIAkJaWYgKChtYXRlaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDQpICYmCiAJCSAgICAobWF0ZWlkW0FUQV9JRF9VRE1BX01PREVTXSAmIDcpKQogCQkJZ290byBvdXQ7Ci0JCWlmICgobWF0ZWlkW0FUQV9JRF9GSUVMRF9WQUxJRF0gJiAyKSAmJgotCQkgICAgKG1hdGVpZFtBVEFfSURfTVdETUFfTU9ERVNdICYgNykpCisJCWlmIChtYXRlaWRbQVRBX0lEX01XRE1BX01PREVTXSAmIDcpCiAJCQltYXNrID0gMDsKIAl9CiBvdXQ6CkBAIC0xODMsOSArMTgyLDYgQEAKIAlvdXRiKGRtYV9zdGF0fDB4MWIsIGRtYV9iYXNlKzIpOwkvKiBjbGVhciB0aGUgSU5UUiAmIEVSUk9SIGJpdHMgKi8KIAlvdXRiKGluYihkbWFfYmFzZSkmfjEsIGRtYV9iYXNlKTsJLyogISEgRE8gVEhJUyBIRVJFICEhIHN0b3AgRE1BICovCiAKLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CQkvKiBwdXJnZSBETUEgbWFwcGluZ3MgKi8KLQogCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0OwkJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwogfQogCkBAIC0yOTEsNyArMjg3LDYgQEAKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAogCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAotCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NjY19wYXRhLmMgYi9kcml2ZXJzL2lkZS9zY2NfcGF0YS5jCmluZGV4IDBjYzEzN2MuLjZkOGRiZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NjY19wYXRhLmMKKysrIGIvZHJpdmVycy9pZGUvc2NjX3BhdGEuYwpAQCAtMTQ4LDE3ICsxNDgsOCBAQAogCXJldHVybiAodTgpaW5fYmUzMigodm9pZCAqKShod2lmLT5kbWFfYmFzZSArIDQpKTsKIH0KIAotc3RhdGljIHZvaWQgc2NjX3NldF9pcnEoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKQorc3RhdGljIHZvaWQgc2NjX3dyaXRlX2RldmN0bChpZGVfaHdpZl90ICpod2lmLCB1OCBjdGwpCiB7Ci0JdTggY3RsID0gQVRBX0RFVkNUTF9PQlM7Ci0KLQlpZiAob24gPT0gNCkgeyAvKiBoYWNrIGZvciBTUlNUICovCi0JCWN0bCB8PSA0OwotCQlvbiAmPSB+NDsKLQl9Ci0KLQljdGwgfD0gb24gPyAwIDogMjsKLQogCW91dF9iZTMyKCh2b2lkICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIsIGN0bCk7CiAJZWllaW8oKTsKIAlpbl9iZTMyKCh2b2lkICopKGh3aWYtPmRtYV9iYXNlICsgMHgwMWMpKTsKQEAgLTMyMSwxMCArMzEyLDggQEAKIAl1OCBkbWFfc3RhdDsKIAogCS8qIGZhbGwgYmFjayB0byBwaW8hICovCi0JaWYgKGlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgY21kKSA9PSAwKSB7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIGNtZCk7CisJaWYgKGlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgY21kKSA9PSAwKQogCQlyZXR1cm4gMTsKLQl9CiAKIAkvKiBQUkQgdGFibGUgKi8KIAlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgOCksIGh3aWYtPmRtYXRhYmxlX2RtYSk7CkBAIC0zMzcsNyArMzI2LDcgQEAKIAogCS8qIGNsZWFyIElOVFIgJiBFUlJPUiBmbGFncyAqLwogCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyA0KSwgZG1hX3N0YXQgfCA2KTsKLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zNTYsNyArMzQ1LDYgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTggZG1hX3N0YXQsIGRtYV9jbWQ7CiAKLQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIAkvKiBnZXQgRE1BIGNvbW1hbmQgbW9kZSAqLwogCWRtYV9jbWQgPSBzY2NfaWRlX2luYihod2lmLT5kbWFfYmFzZSk7CiAJLyogc3RvcCBETUEgKi8KQEAgLTM2NSw4ICszNTMsNiBAQAogCWRtYV9zdGF0ID0gc2NjX2RtYV9zZmZfcmVhZF9zdGF0dXMoaHdpZik7CiAJLyogY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCiAJc2NjX2lkZV9vdXRiKGRtYV9zdGF0IHwgNiwgaHdpZi0+ZG1hX2Jhc2UgKyA0KTsKLQkvKiBwdXJnZSBETUEgbWFwcGluZ3MgKi8KLQlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CiAJLyogdmVyaWZ5IGdvb2QgRE1BIHN0YXR1cyAqLwogCXdtYigpOwogCXJldHVybiAoZG1hX3N0YXQgJiA3KSAhPSA0ID8gKDB4MTAgfCBkbWFfc3RhdCkgOiAwOwpAQCAtNjcwLDEwICs2NTYsNiBAQAogCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfRkxBR0dFRCkKIAkJSElISSA9IDB4RkY7CiAKLQlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX09VVF9EQVRBKQotCQlvdXRfYmUzMigodm9pZCAqKWlvX3BvcnRzLT5kYXRhX2FkZHIsCi0JCQkgKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhKTsKLQogCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKIAkJc2NjX2lkZV9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKQEAgLTcwNiwxOCArNjg4LDExIEBACiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmZHJpdmUtPmh3aWYtPmlvX3BvcnRzOwogCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CiAKLQlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0lOX0RBVEEpIHsKLQkJdTE2IGRhdGEgPSAodTE2KWluX2JlMzIoKHZvaWQgKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKLQotCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOwotCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7Ci0JfQotCiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwotCXNjY19pZGVfb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCXNjY19pZGVfb3V0YihBVEFfREVWQ1RMX09CUywgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCi0JCXRmLT5mZWF0dXJlID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRVJST1IpCisJCXRmLT5lcnJvciAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQpAQCAtNzMwLDE4ICs3MDUsMTggQEAKIAkJdGYtPmRldmljZSA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiAKIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewotCQlzY2NfaWRlX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOworCQlzY2NfaWRlX291dGIoQVRBX0hPQiB8IEFUQV9ERVZDVExfT0JTLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQotCQkJdGYtPmhvYl9mZWF0dXJlID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9FUlJPUikKKwkJCXRmLT5ob2JfZXJyb3IgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKIAkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQotCQkJdGYtPmhvYl9uc2VjdCAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQkJdGYtPmhvYl9uc2VjdCA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKIAkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCi0JCQl0Zi0+aG9iX2xiYWwgICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwkJCXRmLT5ob2JfbGJhbCAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKIAkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCi0JCQl0Zi0+aG9iX2xiYW0gICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwkJCXRmLT5ob2JfbGJhbSAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKIAkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCi0JCQl0Zi0+aG9iX2xiYWggICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKKwkJCXRmLT5ob2JfbGJhaCAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CiAKQEAgLTg0OCw5ICs4MjMsOSBAQAogCS5leGVjX2NvbW1hbmQJCT0gc2NjX2V4ZWNfY29tbWFuZCwKIAkucmVhZF9zdGF0dXMJCT0gc2NjX3JlYWRfc3RhdHVzLAogCS5yZWFkX2FsdHN0YXR1cwkJPSBzY2NfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBzY2Nfd3JpdGVfZGV2Y3RsLAogCi0JLnNldF9pcnEJCT0gc2NjX3NldF9pcnEsCi0KKwkuZGV2X3NlbGVjdAkJPSBpZGVfZGV2X3NlbGVjdCwKIAkudGZfbG9hZAkJPSBzY2NfdGZfbG9hZCwKIAkudGZfcmVhZAkJPSBzY2NfdGZfcmVhZCwKIApAQCAtODcyLDcgKzg0Nyw2IEBACiAJLmRtYV9lbmQJCT0gc2NjX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBzY2NfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gc2NjX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2dpaW9jNC5jIGIvZHJpdmVycy9pZGUvc2dpaW9jNC5jCmluZGV4IGIxMmRlODMuLmU1ZDJhNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NnaWlvYzQuYworKysgYi9kcml2ZXJzL2lkZS9zZ2lpb2M0LmMKQEAgLTI1OCw5ICsyNTgsNiBAQAogCQl9CiAJfQogCi0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7Ci0JaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwotCiAJcmV0dXJuIGRtYV9zdGF0OwogfQogCkBAIC0yODAsMTAgKzI3NywxMiBAQAogCQlzZ2lpb2M0X2NsZWFyaXJxKGRyaXZlKTsKIH0KIAotc3RhdGljIHZvaWQKLXNnaWlvYzRfcmVzZXRwcm9jKGlkZV9kcml2ZV90ICogZHJpdmUpCitzdGF0aWMgdm9pZCBzZ2lpb2M0X3Jlc2V0cHJvYyhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CisJc3RydWN0IGlkZV9jbWQgKmNtZCA9ICZkcml2ZS0+aHdpZi0+Y21kOworCiAJc2dpaW9jNF9kbWFfZW5kKGRyaXZlKTsKKwlpZGVfZG1hX3VubWFwX3NnKGRyaXZlLCBjbWQpOwogCXNnaWlvYzRfY2xlYXJpcnEoZHJpdmUpOwogfQogCkBAIC00MTIsNyArNDExLDYgQEAKIAl3cml0ZWwoZW5kaW5nX2RtYV9hZGRyLCAodm9pZCBfX2lvbWVtICopKGRtYV9iYXNlICsgSU9DNF9ETUFfRU5EX0FERFIgKiA0KSk7CiAKIAl3cml0ZWwoZG1hX2RpcmVjdGlvbiwgKHZvaWQgX19pb21lbSAqKWlvYzRfZG1hX2FkZHIpOwotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOwogfQogCiAvKiBJT0M0IFNjYXR0ZXIgR2F0aGVyIGxpc3QgRm9ybWF0IAkJCQkJICovCkBAIC00NDIsNyArNDQwLDcgQEAKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJICAgICAgICIlczogRE1BIHRhYmxlIHRvbyBzbWFsbFxuIiwKIAkJCQkgICAgICAgZHJpdmUtPm5hbWUpOwotCQkJCWdvdG8gdXNlX3Bpb19pbnN0ZWFkOworCQkJCXJldHVybiAwOwogCQkJfSBlbHNlIHsKIAkJCQl1MzIgYmNvdW50ID0KIAkJCQkgICAgMHgxMDAwMCAtIChjdXJfYWRkciAmIDB4ZmZmZik7CkBAIC00NzcsOSArNDc1LDYgQEAKIAkJcmV0dXJuIGNvdW50OwogCX0KIAotdXNlX3Bpb19pbnN0ZWFkOgotCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQogCXJldHVybiAwOwkJLyogcmV2ZXJ0IHRvIFBJTyBmb3IgdGhpcyByZXF1ZXN0ICovCiB9CiAKQEAgLTQ4OCwxMSArNDgzLDkgQEAKIAlpbnQgZGRpcjsKIAl1OCB3cml0ZSA9ICEhKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpOwogCi0JaWYgKHNnaWlvYzRfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCkgPT0gMCkgeworCWlmIChzZ2lpb2M0X2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApCiAJCS8qIHRyeSBQSU8gaW5zdGVhZCBvZiBETUEgKi8KLQkJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKIAkJcmV0dXJuIDE7Ci0JfQogCiAJaWYgKHdyaXRlKQogCQkvKiBXcml0ZXMgVE8gdGhlIElPQzQgRlJPTSBNYWluIE1lbW9yeSAqLwpAQCAtNTEwLDkgKzUwMyw5IEBACiAJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAogCS5yZWFkX3N0YXR1cwkJPSBzZ2lpb2M0X3JlYWRfc3RhdHVzLAogCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSBpZGVfd3JpdGVfZGV2Y3RsLAogCi0JLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCi0KKwkuZGV2X3NlbGVjdAkJPSBpZGVfZGV2X3NlbGVjdCwKIAkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKIAkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKIApAQCAtNTMzLDcgKzUyNiw2IEBACiAJLmRtYV9lbmQJCT0gc2dpaW9jNF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gc2dpaW9jNF9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBzZ2lpb2M0X2RtYV9sb3N0X2lycSwKLQkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHNnaWlvYzRfcG9ydF9pbmZvIF9fZGV2aW5pdGNvbnN0ID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2lpbWFnZS5jIGIvZHJpdmVycy9pZGUvc2lpbWFnZS5jCmluZGV4IDA3NWNiMTIuLmU0OTczY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYworKysgYi9kcml2ZXJzL2lkZS9zaWltYWdlLmMKQEAgLTcxNSw3ICs3MTUsNiBAQAogCS5kbWFfZW5kCQk9IGlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gc2lpbWFnZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jIGIvZHJpdmVycy9pZGUvc2w4MmMxMDUuYwppbmRleCBkMjUxMzdiLi5iMGE0NjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKQEAgLTYxLDcgKzYxLDggQEAKIAlpZiAoY21kX29mZiA9PSAwKQogCQljbWRfb2ZmID0gMTsKIAotCWlmIChwaW8gPiAyIHx8IGF0YV9pZF9oYXNfaW9yZHkoZHJpdmUtPmlkKSkKKwlpZiAoKHBpbyA+IDIgfHwgYXRhX2lkX2hhc19pb3JkeShkcml2ZS0+aWQpKSAmJgorCSAgICAhKHBpbyA+IDQgJiYgYXRhX2lkX2lzX2NmYShkcml2ZS0+aWQpKSkKIAkJaW9yZHkgPSAweDQwOwogCiAJcmV0dXJuIChjbWRfb24gLSAxKSA8PCA4IHwgKGNtZF9vZmYgLSAxKSB8IGlvcmR5OwpAQCAtMTg5LDE0ICsxOTAsMTMgQEAKIAlpZGVfZG1hX3N0YXJ0KGRyaXZlKTsKIH0KIAotc3RhdGljIHZvaWQgc2w4MmMxMDVfZG1hX3RpbWVvdXQoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIHZvaWQgc2w4MmMxMDVfZG1hX2NsZWFyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihkcml2ZS0+aHdpZi0+ZGV2KTsKIAotCURCRygoInNsODJjMTA1X2RtYV90aW1lb3V0KGRyaXZlOiVzKVxuIiwgZHJpdmUtPm5hbWUpKTsKKwlEQkcoKCJzbDgyYzEwNV9kbWFfY2xlYXIoZHJpdmU6JXMpXG4iLCBkcml2ZS0+bmFtZSkpOwogCiAJc2w4MmMxMDVfcmVzZXRfaG9zdChkZXYpOwotCWlkZV9kbWFfdGltZW91dChkcml2ZSk7CiB9CiAKIHN0YXRpYyBpbnQgc2w4MmMxMDVfZG1hX2VuZChpZGVfZHJpdmVfdCAqZHJpdmUpCkBAIC0yOTgsNyArMjk4LDcgQEAKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBzbDgyYzEwNV9kbWFfbG9zdF9pcnEsCiAJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCi0JLmRtYV90aW1lb3V0CQk9IHNsODJjMTA1X2RtYV90aW1lb3V0LAorCS5kbWFfY2xlYXIJCT0gc2w4MmMxMDVfZG1hX2NsZWFyLAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90Yzg2YzAwMS5jIGIvZHJpdmVycy9pZGUvdGM4NmMwMDEuYwppbmRleCA0MjdkNGIzLi5iNGNmNDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS90Yzg2YzAwMS5jCisrKyBiL2RyaXZlcnMvaWRlL3RjODZjMDAxLmMKQEAgLTE4Nyw3ICsxODcsNiBAQAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiAJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdHJtMjkwLmMgYi9kcml2ZXJzL2lkZS90cm0yOTAuYwppbmRleCBlZDE0OTY4Li40YjQyY2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS90cm0yOTAuYworKysgYi9kcml2ZXJzL2lkZS90cm0yOTAuYwpAQCAtMTcxLDU0ICsxNzEsNTEgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHRybTI5MF9zZWxlY3Rwcm9jIChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdm9pZCB0cm0yOTBfZGV2X3NlbGVjdChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJdHJtMjkwX3ByZXBhcmVfZHJpdmUoZHJpdmUsICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSk7CisKKwlvdXRiKGRyaXZlLT5zZWxlY3QgfCBBVEFfREVWSUNFX09CUywgZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRldmljZV9hZGRyKTsKK30KKworc3RhdGljIGludCB0cm0yOTBfZG1hX2NoZWNrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKK3sKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgeworI2lmZGVmIFRSTTI5MF9OT19ETUFfV1JJVEVTCisJCS8qIGFsd2F5cyB1c2UgUElPIGZvciB3cml0ZXMgKi8KKwkJcmV0dXJuIDE7CisjZW5kaWYKKwl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdHJtMjkwX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXVuc2lnbmVkIGludCBjb3VudCwgcnc7Ci0KLQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgewotI2lmZGVmIFRSTTI5MF9OT19ETUFfV1JJVEVTCi0JCS8qIGFsd2F5cyB1c2UgUElPIGZvciB3cml0ZXMgKi8KLQkJdHJtMjkwX3ByZXBhcmVfZHJpdmUoZHJpdmUsIDApOwkvKiBzZWxlY3QgUElPIHhmZXIgKi8KLQkJcmV0dXJuIDE7Ci0jZW5kaWYKLQkJcncgPSAxOwotCX0gZWxzZQotCQlydyA9IDI7CisJdW5zaWduZWQgaW50IGNvdW50LCBydyA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSA/IDEgOiAyOwogCiAJY291bnQgPSBpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCk7Ci0JaWYgKGNvdW50ID09IDApIHsKLQkJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKKwlpZiAoY291bnQgPT0gMCkKIAkJLyogdHJ5IFBJTyBpbnN0ZWFkIG9mIERNQSAqLwotCQl0cm0yOTBfcHJlcGFyZV9kcml2ZShkcml2ZSwgMCk7IC8qIHNlbGVjdCBQSU8geGZlciAqLwogCQlyZXR1cm4gMTsKLQl9Ci0JLyogc2VsZWN0IERNQSB4ZmVyICovCi0JdHJtMjkwX3ByZXBhcmVfZHJpdmUoZHJpdmUsIDEpOworCiAJb3V0bChod2lmLT5kbWF0YWJsZV9kbWEgfCBydywgaHdpZi0+ZG1hX2Jhc2UpOwotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOwogCS8qIHN0YXJ0IERNQSAqLwogCW91dHcoY291bnQgKiAyIC0gMSwgaHdpZi0+ZG1hX2Jhc2UgKyAyKTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB0cm0yOTBfZG1hX3N0YXJ0KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKKwl0cm0yOTBfcHJlcGFyZV9kcml2ZShkcml2ZSwgMSk7CiB9CiAKIHN0YXRpYyBpbnQgdHJtMjkwX2RtYV9lbmQoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXUxNiBzdGF0dXM7CisJdTE2IHN0YXR1cyA9IGludyhkcml2ZS0+aHdpZi0+ZG1hX2Jhc2UgKyAyKTsKIAotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAwOwotCS8qIHB1cmdlIERNQSBtYXBwaW5ncyAqLwotCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQlzdGF0dXMgPSBpbncoZHJpdmUtPmh3aWYtPmRtYV9iYXNlICsgMik7CisJdHJtMjkwX3ByZXBhcmVfZHJpdmUoZHJpdmUsIDApOwogCiAJcmV0dXJuIHN0YXR1cyAhPSAweDAwZmY7CiB9CkBAIC0zMDMsOCArMzAwLDE4IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgdHJtMjkwX3BvcnRfb3BzID0gewotCS5zZWxlY3Rwcm9jCQk9IHRybTI5MF9zZWxlY3Rwcm9jLAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIHRybTI5MF90cF9vcHMgPSB7CisJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAorCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCisJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkud3JpdGVfZGV2Y3RsCQk9IGlkZV93cml0ZV9kZXZjdGwsCisKKwkuZGV2X3NlbGVjdAkJPSB0cm0yOTBfZGV2X3NlbGVjdCwKKwkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKKwkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKKworCS5pbnB1dF9kYXRhCQk9IGlkZV9pbnB1dF9kYXRhLAorCS5vdXRwdXRfZGF0YQkJPSBpZGVfb3V0cHV0X2RhdGEsCiB9OwogCiBzdGF0aWMgc3RydWN0IGlkZV9kbWFfb3BzIHRybTI5MF9kbWFfb3BzID0gewpAQCAtMzE0LDEzICszMjEsMTMgQEAKIAkuZG1hX2VuZAkJPSB0cm0yOTBfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IHRybTI5MF9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAotCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCisJLmRtYV9jaGVjawkJPSB0cm0yOTBfZG1hX2NoZWNrLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHRybTI5MF9jaGlwc2V0IF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUJCT0gRFJWX05BTUUsCiAJLmluaXRfaHdpZgk9IGluaXRfaHdpZl90cm0yOTAsCi0JLnBvcnRfb3BzCT0gJnRybTI5MF9wb3J0X29wcywKKwkudHBfb3BzIAk9ICZ0cm0yOTBfdHBfb3BzLAogCS5kbWFfb3BzCT0gJnRybTI5MF9kbWFfb3BzLAogCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSTTI5MCB8CiAJCQkgIElERV9IRkxBR19OT19BVEFQSV9ETUEgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdHg0OTM4aWRlLmMgYi9kcml2ZXJzL2lkZS90eDQ5MzhpZGUuYwppbmRleCA2NTdhNjE4Li40Y2I3OWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS90eDQ5MzhpZGUuYworKysgYi9kcml2ZXJzL2lkZS90eDQ5MzhpZGUuYwpAQCAtOTIsMTMgKzkyLDYgQEAKIAlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkgewotCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKLQotCQkvKiBubyBlbmRpYW4gc3dhcCAqLwotCQlfX3Jhd193cml0ZXcoZGF0YSwgKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCX0KLQogCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKIAkJdHg0OTM4aWRlX291dGIodGYtPmhvYl9mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQpAQCAtMTMyLDIwICsxMjUsMTEgQEAKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKIAlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCi0JaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19JTl9EQVRBKSB7Ci0JCXUxNiBkYXRhOwotCi0JCS8qIG5vIGVuZGlhbiBzd2FwICovCi0JCWRhdGEgPSBfX3Jhd19yZWFkdygodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7Ci0JCXRmLT5kYXRhID0gZGF0YSAmIDB4ZmY7Ci0JCXRmLT5ob2JfZGF0YSA9IChkYXRhID4+IDgpICYgMHhmZjsKLQl9Ci0KIAkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCi0JdHg0OTM4aWRlX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKwl0eDQ5MzhpZGVfb3V0YihBVEFfREVWQ1RMX09CUywgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCi0JCXRmLT5mZWF0dXJlID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9FUlJPUikKKwkJdGYtPmVycm9yICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCiAJCXRmLT5uc2VjdCAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQpAQCAtMTU4LDE5ICsxNDIsMTggQEAKIAkJdGYtPmRldmljZSA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIAogCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7Ci0JCXR4NDkzOGlkZV9vdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKKwkJdHg0OTM4aWRlX291dGIoQVRBX0hPQiB8IEFUQV9ERVZDVExfT0JTLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQotCQkJdGYtPmhvYl9mZWF0dXJlID0KLQkJCQl0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRVJST1IpCisJCQl0Zi0+aG9iX2Vycm9yID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKIAkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQotCQkJdGYtPmhvYl9uc2VjdCAgID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJCQl0Zi0+aG9iX25zZWN0ID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CiAJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQotCQkJdGYtPmhvYl9sYmFsICAgID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwkJCXRmLT5ob2JfbGJhbCAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwogCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKLQkJCXRmLT5ob2JfbGJhbSAgICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJCQl0Zi0+aG9iX2xiYW0gID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKIAkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCi0JCQl0Zi0+aG9iX2xiYWggICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCQkJdGYtPmhvYl9sYmFoICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAJfQogfQogCkBAIC0yMDQsOSArMTg3LDkgQEAKIAkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCiAJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKIAkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS53cml0ZV9kZXZjdGwJCT0gaWRlX3dyaXRlX2RldmN0bCwKIAotCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAotCisJLmRldl9zZWxlY3QJCT0gaWRlX2Rldl9zZWxlY3QsCiAJLnRmX2xvYWQJCT0gdHg0OTM4aWRlX3RmX2xvYWQsCiAJLnRmX3JlYWQJCT0gdHg0OTM4aWRlX3RmX3JlYWQsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jIGIvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKaW5kZXggZTBlMGE4MC4uMDA0MGE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKKysrIGIvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKQEAgLTI3OSw4ICsyNzksNiBAQAogCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzXG4iLCBkcml2ZS0+bmFtZSwKIAkJY291bnQgPyAiRE1BIHRhYmxlIHRvbyBzbWFsbCIgOiAiZW1wdHkgRE1BIHRhYmxlPyIpOwogCi0JaWRlX2Rlc3Ryb3lfZG1hdGFibGUoZHJpdmUpOwotCiAJcmV0dXJuIDA7IC8qIHJldmVydCB0byBQSU8gZm9yIHRoaXMgcmVxdWVzdCAqLwogfQogI2Vsc2UKQEAgLTI5NCwxMCArMjkyLDggQEAKIAl1OCBydyA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSA/IDAgOiBBVEFfRE1BX1dSOwogCiAJLyogZmFsbCBiYWNrIHRvIFBJTyEgKi8KLQlpZiAodHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApIHsKLQkJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKKwlpZiAodHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApCiAJCXJldHVybiAxOwotCX0KIAogCS8qIFBSRCB0YWJsZSAqLwogCXR4NDkzOWlkZV93cml0ZWwoaHdpZi0+ZG1hdGFibGVfZG1hLCBiYXNlLCBUWDQ5MzlJREVfUFJEX1B0cik7CkBAIC0zMDgsOCArMzA0LDYgQEAKIAkvKiBjbGVhciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KIAl0eDQ5MzlpZGVfY2xlYXJfZG1hX3N0YXR1cyhiYXNlKTsKIAotCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOwotCiAJdHg0OTM5aWRlX3dyaXRldyhTRUNUT1JfU0laRSAvIDIsIGJhc2UsIGRyaXZlLT5kbiA/CiAJCQkgVFg0OTM5SURFX1hmZXJfQ250XzIgOiBUWDQ5MzlJREVfWGZlcl9DbnRfMSk7CiAKQEAgLTMyNSw4ICszMTksNiBAQAogCXZvaWQgX19pb21lbSAqYmFzZSA9IFRYNDkzOUlERV9CQVNFKGh3aWYpOwogCXUxNiBjdGwgPSB0eDQ5MzlpZGVfcmVhZHcoYmFzZSwgVFg0OTM5SURFX0ludF9DdGwpOwogCi0JZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA9IDA7Ci0KIAkvKiBnZXQgRE1BIGNvbW1hbmQgbW9kZSAqLwogCWRtYV9jbWQgPSB0eDQ5MzlpZGVfcmVhZGIoYmFzZSwgVFg0OTM5SURFX0RNQV9DbWQpOwogCS8qIHN0b3AgRE1BICovCkBAIC0zMzUsMTEgKzMyNyw5IEBACiAJLyogcmVhZCBhbmQgY2xlYXIgdGhlIElOVFIgJiBFUlJPUiBiaXRzICovCiAJZG1hX3N0YXQgPSB0eDQ5MzlpZGVfY2xlYXJfZG1hX3N0YXR1cyhiYXNlKTsKIAotCS8qIHB1cmdlIERNQSBtYXBwaW5ncyAqLwotCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCiAJd21iKCk7CiAKKwkvKiB2ZXJpZnkgZ29vZCBETUEgc3RhdHVzICovCiAJaWYgKChkbWFfc3RhdCAmIChBVEFfRE1BX0lOVFIgfCBBVEFfRE1BX0VSUiB8IEFUQV9ETUFfQUNUSVZFKSkgPT0gMCAmJgogCSAgICAoY3RsICYgKFRYNDkzOUlERV9JTlRfWEZFUkVORCB8IFRYNDkzOUlERV9JTlRfSE9TVCkpID09CiAJICAgIChUWDQ5MzlJREVfSU5UX1hGRVJFTkQgfCBUWDQ5MzlJREVfSU5UX0hPU1QpKQpAQCAtNDM5LDcgKzQyOSw3IEBACiAJICogRml4IEFUQTEwMCBDT1JFIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyLiAoVGhlIHdyaXRlIHRvIHRoZQogCSAqIERldmljZS9IZWFkIHJlZ2lzdGVyIG1heSB3cml0ZSB3cm9uZyBkYXRhIHRvIHRoZSBTeXN0ZW0KIAkgKiBDb250cm9sIFJlZ2lzdGVyKQotCSAqIFdoaWxlIFN5c19DdGwgaXMgd3JpdHRlbiBoZXJlLCBzZWxlY3Rwcm9jIGlzIG5vdCBuZWVkZWQuCisJICogV2hpbGUgU3lzX0N0bCBpcyB3cml0dGVuIGhlcmUsIGRldl9zZWxlY3QoKSBpcyBub3QgbmVlZGVkLgogCSAqLwogCXR4NDkzOWlkZV93cml0ZXcoc3lzY3RsLCBiYXNlLCBUWDQ5MzlJREVfU3lzX0N0bCk7CiB9CkBAIC00NjcsMTMgKzQ1Nyw2IEBACiAJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19GTEFHR0VEKQogCQlISUhJID0gMHhGRjsKIAotCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfT1VUX0RBVEEpIHsKLQkJdTE2IGRhdGEgPSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGE7Ci0KLQkJLyogbm8gZW5kaWFuIHN3YXAgKi8KLQkJX19yYXdfd3JpdGV3KGRhdGEsICh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKLQl9Ci0KIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKQEAgLTUwOSwyMCArNDkyLDExIEBACiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CiAJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKIAotCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfSU5fREFUQSkgewotCQl1MTYgZGF0YTsKLQotCQkvKiBubyBlbmRpYW4gc3dhcCAqLwotCQlkYXRhID0gX19yYXdfcmVhZHcoKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOwotCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOwotCQl0Zi0+aG9iX2RhdGEgPSAoZGF0YSA+PiA4KSAmIDB4ZmY7Ci0JfQotCiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwotCXR4NDkzOWlkZV9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisJdHg0OTM5aWRlX291dGIoQVRBX0RFVkNUTF9PQlMsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQotCQl0Zi0+ZmVhdHVyZSA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRVJST1IpCisJCXRmLT5lcnJvciAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwogCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bnNlY3RfYWRkcik7CiAJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKQEAgLTUzNSwxOSArNTA5LDE4IEBACiAJCXRmLT5kZXZpY2UgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiAKIAlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewotCQl0eDQ5MzlpZGVfb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisJCXR4NDkzOWlkZV9vdXRiKEFUQV9IT0IgfCBBVEFfREVWQ1RMX09CUywgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKLQkJCXRmLT5ob2JfZmVhdHVyZSA9Ci0JCQkJdHg0OTM5aWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0VSUk9SKQorCQkJdGYtPmhvYl9lcnJvciA9CXR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CiAJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKLQkJCXRmLT5ob2JfbnNlY3QgICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQkJdGYtPmhvYl9uc2VjdCA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwogCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKLQkJCXRmLT5ob2JfbGJhbCAgICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJCQl0Zi0+aG9iX2xiYWwgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKIAkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCi0JCQl0Zi0+aG9iX2xiYW0gICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCQkJdGYtPmhvYl9sYmFtICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CiAJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQotCQkJdGYtPmhvYl9sYmFoICAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKKwkJCXRmLT5ob2JfbGJhaCAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCX0KIH0KIApAQCAtNTgxLDkgKzU1NCw5IEBACiAJLmV4ZWNfY29tbWFuZAkJPSBpZGVfZXhlY19jb21tYW5kLAogCS5yZWFkX3N0YXR1cwkJPSBpZGVfcmVhZF9zdGF0dXMsCiAJLnJlYWRfYWx0c3RhdHVzCQk9IGlkZV9yZWFkX2FsdHN0YXR1cywKKwkud3JpdGVfZGV2Y3RsCQk9IGlkZV93cml0ZV9kZXZjdGwsCiAKLQkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKLQorCS5kZXZfc2VsZWN0CQk9IGlkZV9kZXZfc2VsZWN0LAogCS50Zl9sb2FkCQk9IHR4NDkzOWlkZV90Zl9sb2FkLAogCS50Zl9yZWFkCQk9IHR4NDkzOWlkZV90Zl9yZWFkLAogCkBAIC02MDUsOSArNTc4LDkgQEAKIAkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCiAJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKIAkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCS53cml0ZV9kZXZjdGwJCT0gaWRlX3dyaXRlX2RldmN0bCwKIAotCS5zZXRfaXJxCQk9IGlkZV9zZXRfaXJxLAotCisJLmRldl9zZWxlY3QJCT0gaWRlX2Rldl9zZWxlY3QsCiAJLnRmX2xvYWQJCT0gdHg0OTM5aWRlX3RmX2xvYWQsCiAJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCiAKQEAgLTYzMiw3ICs2MDUsNiBAQAogCS5kbWFfdGVzdF9pcnEJCT0gdHg0OTM5aWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiAJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCi0JLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IHR4NDkzOWlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9LY29uZmlnCmluZGV4IDVmOWQ4NjAuLmNkNTBjMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L0tjb25maWcKQEAgLTE0Myw3ICsxNDMsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VzcGVuZCBrZXkgZXZlbnRzIHRvIHRyaWdnZXIgYSB1c2VyCiAJICByZXF1ZXN0ZWQgc3VzcGVuZCB0aHJvdWdoIEFQTS4gVGhpcyBpcyB1c2VmdWwgb24gZW1iZWRkZWQKLQkgIHN5c3RlbXMgd2hlcmUgc3VjaCBiZWh2aW91ciBpcyBkZXNpcmVkIHdpdGhvdXQgdXNlcnNwYWNlCisJICBzeXN0ZW1zIHdoZXJlIHN1Y2ggYmVoYXZpb3VyIGlzIGRlc2lyZWQgd2l0aG91dCB1c2Vyc3BhY2UKIAkgIGludGVyYWN0aW9uLiBJZiB1bnN1cmUsIHNheSBOLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwppbmRleCBlMTQ4MGZiLi5jZWE3MGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCkBAIC0yNTksMTIgKzI1OSwxNSBAQAogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgc2hfa2V5c2NfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCXVuc2lnbmVkIHNob3J0IHZhbHVlOwogCiAJdmFsdWUgPSBpb3JlYWQxNihwcml2LT5pb21lbV9iYXNlICsgS1lDUjFfT0ZGUyk7CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkgewogCQl2YWx1ZSB8PSAweDgwOworCQllbmFibGVfaXJxX3dha2UoaXJxKTsKKwl9CiAJZWxzZQogCQl2YWx1ZSAmPSB+MHg4MDsKIApAQCAtMjcyLDggKzI3NSwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNoX2tleXNjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCisJCWRpc2FibGVfaXJxX3dha2UoaXJxKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2hfa2V5c2NfZGV2X3BtX29wcyA9IHsKIAkuc3VzcGVuZCA9IHNoX2tleXNjX3N1c3BlbmQsCisJLnJlc3VtZSA9IHNoX2tleXNjX3Jlc3VtZSwKIH07CiAKIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfa2V5c2NfZGV2aWNlX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZ3Bpb19tb3VzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9ncGlvX21vdXNlLmMKaW5kZXggMGRiOGQxNi4uNWU1ZWI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9ncGlvX21vdXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9ncGlvX21vdXNlLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAogLyoKICAqIFRpbWVyIGZ1bmN0aW9uIHdoaWNoIGlzIHJ1biBldmVyeSBzY2FuX21zIG1zIHdoZW4gdGhlIGRldmljZSBpcyBvcGVuZWQuCi0gKiBUaGUgZGV2IGlucHV0IHZhcmFpYmxlIGlzIHNldCB0byB0aGUgdGhlIGlucHV0X2RldiBwb2ludGVyLgorICogVGhlIGRldiBpbnB1dCB2YXJpYWJsZSBpcyBzZXQgdG8gdGhlIHRoZSBpbnB1dF9kZXYgcG9pbnRlci4KICAqLwogc3RhdGljIHZvaWQgZ3Bpb19tb3VzZV9zY2FuKHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpkZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2hncGsuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jCmluZGV4IDgxZTZlYmYuLjU1Y2QwZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaGdway5jCkBAIC0zODEsNyArMzgxLDcgQEAKIAogc3RhdGljIHZvaWQgaGdwa19yZWNhbGliX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKncgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqdyA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgaGdwa19kYXRhICpwcml2ID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBoZ3BrX2RhdGEsIHJlY2FsaWJfd3EpOwogCXN0cnVjdCBwc21vdXNlICpwc21vdXNlID0gcHJpdi0+cHNtb3VzZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwppbmRleCA3YzI3YzhiLi4wNTZhYzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYwpAQCAtMjk1LDcgKzI5NSw3IEBACiBzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgbmFtZSAjIyBfc2hvdywgTlVMTCk7CiAKIAotLyogU3lzZnMgY29udmVudGlvbnMgcmVwb3J0IHRlbXBlcmF0dXJlcyBpbiBtaWxsaWRlZ3JlZXMgQ2VsY2l1cy4KKy8qIFN5c2ZzIGNvbnZlbnRpb25zIHJlcG9ydCB0ZW1wZXJhdHVyZXMgaW4gbWlsbGlkZWdyZWVzIENlbHNpdXMuCiAgKiBBRFM3ODQ2IGNvdWxkIHVzZSB0aGUgbG93LWFjY3VyYWN5IHR3by1zYW1wbGUgc2NoZW1lLCBidXQgY2FuJ3QgZG8gdGhlIGhpZ2gKICAqIGFjY3VyYWN5IHNjaGVtZSB3aXRob3V0IGNhbGlicmF0aW9uIGRhdGEuICBGb3Igbm93IHdlIHdvbid0IHRyeSBlaXRoZXI7CiAgKiB1c2Vyc3BhY2Ugc2VlcyByYXcgc2Vuc29yIHZhbHVlcywgYW5kIG11c3Qgc2NhbGUvY2FsaWJyYXRlIGFwcHJvcHJpYXRlbHkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21pZ29yX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21pZ29yX3RzLmMKaW5kZXggNTA0Y2ExMS4uMTQxZGQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9taWdvcl90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWlnb3JfdHMuYwpAQCAtMTk4LDYgKzE5OCw3IEBACiAJCWdvdG8gZXJyMjsKIAl9CiAKKwlkZXZpY2VfaW5pdF93YWtldXAoJmNsaWVudC0+ZGV2LCAxKTsKIAlyZXR1cm4gMDsKIAogIGVycjI6CkBAIC0yMjQsNiArMjI1LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWlnb3JfdHNfc3VzcGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBwbV9tZXNzYWdlX3QgbWVzZykKK3sKKwlzdHJ1Y3QgbWlnb3JfdHNfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmY2xpZW50LT5kZXYpOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZjbGllbnQtPmRldikpCisJCWVuYWJsZV9pcnFfd2FrZShwcml2LT5pcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWlnb3JfdHNfcmVzdW1lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IG1pZ29yX3RzX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJmNsaWVudC0+ZGV2KTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmY2xpZW50LT5kZXYpKQorCQlkaXNhYmxlX2lycV93YWtlKHByaXYtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG1pZ29yX3RzX2lkW10gPSB7CiAJeyAibWlnb3JfdHMiLCAwIH0sCiAJeyB9CkBAIC0yMzYsNiArMjU3LDggQEAKIAl9LAogCS5wcm9iZSA9IG1pZ29yX3RzX3Byb2JlLAogCS5yZW1vdmUgPSBtaWdvcl90c19yZW1vdmUsCisJLnN1c3BlbmQgPSBtaWdvcl90c19zdXNwZW5kLAorCS5yZXN1bWUgPSBtaWdvcl90c19yZXN1bWUsCiAJLmlkX3RhYmxlID0gbWlnb3JfdHNfaWQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKaW5kZXggM2U0NjhkMi4uMmQ4MzUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwpAQCAtMTMzMSwxMiArMTMzMSw2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGludCBjYXBpbmNfdHR5X3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCQlpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKmNhcGluY190dHlfZHJpdmVyOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGNhcGluY19vcHMgPSB7CkBAIC0xMzU4LDcgKzEzNTIsNiBAQAogCS5mbHVzaF9idWZmZXIgPSBjYXBpbmNfdHR5X2ZsdXNoX2J1ZmZlciwKIAkuc2V0X2xkaXNjID0gY2FwaW5jX3R0eV9zZXRfbGRpc2MsCiAJLnNlbmRfeGNoYXIgPSBjYXBpbmNfdHR5X3NlbmRfeGNoYXIsCi0JLnJlYWRfcHJvYyA9IGNhcGluY190dHlfcmVhZF9wcm9jLAogfTsKIAogc3RhdGljIGludCBjYXBpbmNfdHR5X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9tSVNETi9LY29uZmlnIGIvZHJpdmVycy9pc2RuL21JU0ROL0tjb25maWcKaW5kZXggNDkzODM1NS4uMTc0N2EwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL21JU0ROL0tjb25maWcKQEAgLTE0LDEzICsxNCwxNSBAQAogCWRlcGVuZHMgb24gTUlTRE4KIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgZGlnaXRhbCBhdWRpbyBwcm9jZXNzaW5nIGNhcGFiaWxpdHkuCisKIAkgIFRoaXMgbW9kdWxlIG1heSBiZSB1c2VkIGZvciBzcGVjaWFsIGFwcGxpY2F0aW9ucyB0aGF0IHJlcXVpcmUKLQkgIGNyb3NzIGNvbm5lY3Rpbmcgb2YgYmNoYW5uZWxzLCBjb25mZXJlbmNpbmcsIGR0bWYgZGVjb2RpbmcKKwkgIGNyb3NzIGNvbm5lY3Rpbmcgb2YgYmNoYW5uZWxzLCBjb25mZXJlbmNpbmcsIGR0bWYgZGVjb2RpbmcsCiAJICBlY2hvIGNhbmNlbGF0aW9uLCB0b25lIGdlbmVyYXRpb24sIGFuZCBCbG93ZmlzaCBlbmNyeXB0aW9uIGFuZAotCSAgZGVjcnlwdGlvbi4KLQkgIEl0IG1heSB1c2UgaGFyZHdhcmUgZmVhdHVyZXMgaWYgYXZhaWxhYmxlLgorCSAgZGVjcnlwdGlvbi4gSXQgbWF5IHVzZSBoYXJkd2FyZSBmZWF0dXJlcyBpZiBhdmFpbGFibGUuCisKIAkgIEUuZy4gaXQgaXMgcmVxdWlyZWQgZm9yIFBCWDRMaW51eC4gR28gdG8gaHR0cDovL2lzZG4uZXZlcnNiZXJnLmV1Ci0JICBhbmQgZ2V0IG1vcmUgaW5mb3JtYXRpb25zIGFib3V0IHRoaXMgbW9kdWxlIGFuZCBpdCdzIHVzYWdlLgorCSAgYW5kIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgbW9kdWxlIGFuZCBpdHMgdXNhZ2UuCisKIAkgIElmIHVuc3VyZSwgc2F5ICdOJy4KIAogY29uZmlnIE1JU0ROX0wxT0lQCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vbUlTRE4vbDFvaXBfY29kZWMuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb2RlYy5jCmluZGV4IDJlYzRiMjguLmU0ZWNiYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb2RlYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb2RlYy5jCkBAIC0zMzEsNyArMzMxLDcgQEAKIAkvKiBhbGxvYyBjb252ZXJzaW9uIHRhYmxlcyAqLwogCXRhYmxlX2NvbSA9IHZtYWxsb2MoNjU1MzYpOwogCXRhYmxlX2RlYyA9IHZtYWxsb2MoNTEyKTsKLQlpZiAoIXRhYmxlX2NvbSB8ICF0YWJsZV9kZWMpIHsKKwlpZiAoIXRhYmxlX2NvbSB8fCAhdGFibGVfZGVjKSB7CiAJCWwxb2lwXzRiaXRfZnJlZSgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCmluZGV4IDU1NmFlY2EuLmQ5ZGIxNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCkBAIC0xMDAsNyArMTAwLDcgQEAKIAl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIHRoZSBIUCBKb3JuYWRhIDZ4eCIKIAlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgU0hfSFA2WFgKIAloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIGxlZCBzdXBwb3J0IGZvciB0aGUgaGFuZGhlbGQKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgTEVEIHN1cHBvcnQgZm9yIHRoZSBoYW5kaGVsZAogCSAgSFAgSm9ybmFkYSA2MjAvNjYwLzY4MC82OTAuCiAKIGNvbmZpZyBMRURTX1BDQTk1MzIKQEAgLTEwOCw3ICsxMDgsNyBAQAogCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBJMkMgJiYgSU5QVVQgJiYgRVhQRVJJTUVOVEFMCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBOWFAgcGNhOTUzMgotCSAgbGVkIGNvbnRyb2xsZXIuIEl0IGlzIGdlbmVyYWxseSBvbmx5IHVzZWZ1bGwKKwkgIExFRCBjb250cm9sbGVyLiBJdCBpcyBnZW5lcmFsbHkgb25seSB1c2VmdWwKIAkgIGFzIGEgcGxhdGZvcm0gZHJpdmVyCiAKIGNvbmZpZyBMRURTX0dQSU8KQEAgLTE0NCw3ICsxNDQsNyBAQAogCSAgCVBvc2l0aXZvIE1vYmlsZSAoQ2xldm8gTTV4MFYpCiAKIAkgIElmIHlvdXIgbW9kZWwgaXMgbm90IGxpc3RlZCBoZXJlIHlvdSBjYW4gdHJ5IHRoZSAibm9kZXRlY3QiCi0JICBtb2R1bGUgcGFyYW10ZXIuCisJICBtb2R1bGUgcGFyYW1ldGVyLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBsZWRzLWNsZXZvLW1haWwuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1wY2E5NTMyLmMKaW5kZXggNzZlYzc0OS4uYmQzYjQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtcGNhOTUzMi5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXBjYTk1MzIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBwY2E5NTMyLmMgLSAxNi1iaXQgTGVkIGRpbW1lcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBSaWt1IFZvaXBpbyA8cmlrdS52b2lwaW9AbW92aWFsLmZpPgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJpa3UgVm9pcGlvCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zNjcsNyArMzY3LDcgQEAKIAlpMmNfZGVsX2RyaXZlcigmcGNhOTUzMl9kcml2ZXIpOwogfQogCi1NT0RVTEVfQVVUSE9SKCJSaWt1IFZvaXBpbyA8cmlrdS52b2lwaW9AbW92aWFsLmZpPiIpOworTU9EVUxFX0FVVEhPUigiUmlrdSBWb2lwaW8iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUENBIDk1MzIgTEVEIGRpbW1lciIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL0tjb25maWcgYi9kcml2ZXJzL21kL0tjb25maWcKaW5kZXggMjI4MWI1MC4uMzZlMDY3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWQvS2NvbmZpZwpAQCAtMTIxLDYgKzEyMSw3IEBACiBjb25maWcgTURfUkFJRDQ1NgogCXRyaXN0YXRlICJSQUlELTQvUkFJRC01L1JBSUQtNiBtb2RlIgogCWRlcGVuZHMgb24gQkxLX0RFVl9NRAorCXNlbGVjdCBNRF9SQUlENl9QUQogCXNlbGVjdCBBU1lOQ19NRU1DUFkKIAlzZWxlY3QgQVNZTkNfWE9SCiAJLS0taGVscC0tLQpAQCAtMTUxLDM0ICsxNTIsOCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCi1jb25maWcgTURfUkFJRDVfUkVTSEFQRQotCWJvb2wgIlN1cHBvcnQgYWRkaW5nIGRyaXZlcyB0byBhIHJhaWQtNSBhcnJheSIKLQlkZXBlbmRzIG9uIE1EX1JBSUQ0NTYKLQlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCi0JICBBIFJBSUQtNSBzZXQgY2FuIGJlIGV4cGFuZGVkIGJ5IGFkZGluZyBleHRyYSBkcml2ZXMuIFRoaXMKLQkgIHJlcXVpcmVzICJyZXN0cmlwaW5nIiB0aGUgYXJyYXkgd2hpY2ggbWVhbnMgKGFsbW9zdCkgZXZlcnkKLQkgIGJsb2NrIG11c3QgYmUgd3JpdHRlbiB0byBhIGRpZmZlcmVudCBwbGFjZS4KLQotICAgICAgICAgIFRoaXMgb3B0aW9uIGFsbG93cyBzdWNoIHJlc3RyaXBpbmcgdG8gYmUgZG9uZSB3aGlsZSB0aGUgYXJyYXkKLQkgIGlzIG9ubGluZS4KLQotCSAgWW91IHdpbGwgbmVlZCBtZGFkbSB2ZXJzaW9uIDIuNC4xIG9yIGxhdGVyIHRvIHVzZSB0aGlzCi0JICBmZWF0dXJlIHNhZmVseS4gIER1cmluZyB0aGUgZWFybHkgc3RhZ2Ugb2YgcmVzaGFwZSB0aGVyZSBpcwotCSAgYSBjcml0aWNhbCBzZWN0aW9uIHdoZXJlIGxpdmUgZGF0YSBpcyBiZWluZyBvdmVyLXdyaXR0ZW4uICBBCi0JICBjcmFzaCBkdXJpbmcgdGhpcyB0aW1lIG5lZWRzIGV4dHJhIGNhcmUgZm9yIHJlY292ZXJ5LiAgVGhlCi0JICBuZXdlciBtZGFkbSB0YWtlcyBhIGNvcHkgb2YgdGhlIGRhdGEgaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24KLQkgIGFuZCB3aWxsIHJlc3RvcmUgaXQsIGlmIG5lY2Vzc2FyeSwgYWZ0ZXIgYSBjcmFzaC4KLQotCSAgVGhlIG1kYWRtIHVzYWdlIGlzIGUuZy4KLQkgICAgICAgbWRhZG0gLS1ncm93IC9kZXYvbWQxIC0tcmFpZC1kaXNrcz02Ci0JICB0byBncm93ICcvZGV2L21kMScgdG8gaGF2aW5nIDYgZGlza3MuCi0KLQkgIE5vdGU6IFRoZSBhcnJheSBjYW4gb25seSBiZSBleHBhbmRlZCwgbm90IGNvbnRyYWN0ZWQuCi0JICBUaGVyZSBzaG91bGQgYmUgZW5vdWdoIHNwYXJlcyBhbHJlYWR5IHByZXNlbnQgdG8gbWFrZSB0aGUgbmV3Ci0JICBhcnJheSB3b3JrYWJsZS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgWS4KK2NvbmZpZyBNRF9SQUlENl9QUQorCXRyaXN0YXRlCiAKIGNvbmZpZyBNRF9NVUxUSVBBVEgKIAl0cmlzdGF0ZSAiTXVsdGlwYXRoIEkvTyBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWQvTWFrZWZpbGUKaW5kZXggNzI4ODBiNy4uNDVjYzU5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21kL01ha2VmaWxlCkBAIC0yLDIwICsyLDIxIEBACiAjIE1ha2VmaWxlIGZvciB0aGUga2VybmVsIHNvZnR3YXJlIFJBSUQgYW5kIExWTSBkcml2ZXJzLgogIwogCi1kbS1tb2Qtb2Jqcwk6PSBkbS5vIGRtLXRhYmxlLm8gZG0tdGFyZ2V0Lm8gZG0tbGluZWFyLm8gZG0tc3RyaXBlLm8gXAorZG0tbW9kLXkJKz0gZG0ubyBkbS10YWJsZS5vIGRtLXRhcmdldC5vIGRtLWxpbmVhci5vIGRtLXN0cmlwZS5vIFwKIAkJICAgZG0taW9jdGwubyBkbS1pby5vIGRtLWtjb3B5ZC5vIGRtLXN5c2ZzLm8KLWRtLW11bHRpcGF0aC1vYmpzIDo9IGRtLXBhdGgtc2VsZWN0b3IubyBkbS1tcGF0aC5vCi1kbS1zbmFwc2hvdC1vYmpzIDo9IGRtLXNuYXAubyBkbS1leGNlcHRpb24tc3RvcmUubyBkbS1zbmFwLXRyYW5zaWVudC5vIFwKK2RtLW11bHRpcGF0aC15CSs9IGRtLXBhdGgtc2VsZWN0b3IubyBkbS1tcGF0aC5vCitkbS1zbmFwc2hvdC15CSs9IGRtLXNuYXAubyBkbS1leGNlcHRpb24tc3RvcmUubyBkbS1zbmFwLXRyYW5zaWVudC5vIFwKIAkJICAgIGRtLXNuYXAtcGVyc2lzdGVudC5vCi1kbS1taXJyb3Itb2Jqcwk6PSBkbS1yYWlkMS5vCi1tZC1tb2Qtb2JqcyAgICAgOj0gbWQubyBiaXRtYXAubwotcmFpZDQ1Ni1vYmpzCTo9IHJhaWQ1Lm8gcmFpZDZhbGdvcy5vIHJhaWQ2cmVjb3YubyByYWlkNnRhYmxlcy5vIFwKK2RtLW1pcnJvci15CSs9IGRtLXJhaWQxLm8KK21kLW1vZC15CSs9IG1kLm8gYml0bWFwLm8KK3JhaWQ0NTYteQkrPSByYWlkNS5vCityYWlkNl9wcS15CSs9IHJhaWQ2YWxnb3MubyByYWlkNnJlY292Lm8gcmFpZDZ0YWJsZXMubyBcCiAJCSAgIHJhaWQ2aW50MS5vIHJhaWQ2aW50Mi5vIHJhaWQ2aW50NC5vIFwKIAkJICAgcmFpZDZpbnQ4Lm8gcmFpZDZpbnQxNi5vIHJhaWQ2aW50MzIubyBcCiAJCSAgIHJhaWQ2YWx0aXZlYzEubyByYWlkNmFsdGl2ZWMyLm8gcmFpZDZhbHRpdmVjNC5vIFwKIAkJICAgcmFpZDZhbHRpdmVjOC5vIFwKIAkJICAgcmFpZDZtbXgubyByYWlkNnNzZTEubyByYWlkNnNzZTIubwotaG9zdHByb2dzLXkJOj0gbWt0YWJsZXMKK2hvc3Rwcm9ncy15CSs9IG1rdGFibGVzCiAKICMgTm90ZTogbGluayBvcmRlciBpcyBpbXBvcnRhbnQuICBBbGwgcmFpZCBwZXJzb25hbGl0aWVzCiAjIGFuZCBtdXN0IGNvbWUgYmVmb3JlIG1kLm8sIGFzIHRoZXkgZWFjaCBpbml0aWFsaXNlIApAQCAtMjYsNiArMjcsNyBAQAogb2JqLSQoQ09ORklHX01EX1JBSUQwKQkJKz0gcmFpZDAubwogb2JqLSQoQ09ORklHX01EX1JBSUQxKQkJKz0gcmFpZDEubwogb2JqLSQoQ09ORklHX01EX1JBSUQxMCkJCSs9IHJhaWQxMC5vCitvYmotJChDT05GSUdfTURfUkFJRDZfUFEpCSs9IHJhaWQ2X3BxLm8KIG9iai0kKENPTkZJR19NRF9SQUlENDU2KQkrPSByYWlkNDU2Lm8KIG9iai0kKENPTkZJR19NRF9NVUxUSVBBVEgpCSs9IG11bHRpcGF0aC5vCiBvYmotJChDT05GSUdfTURfRkFVTFRZKQkJKz0gZmF1bHR5Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvYml0bWFwLmMgYi9kcml2ZXJzL21kL2JpdG1hcC5jCmluZGV4IDcxOTk0MzcuLmY4YTlmN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvYml0bWFwLmMKKysrIGIvZHJpdmVycy9tZC9iaXRtYXAuYwpAQCAtMTYsNiArMTYsNyBAQAogICogd2FpdCBpZiBjb3VudCBnZXRzIHRvbyBoaWdoLCB3YWtlIHdoZW4gaXQgZHJvcHMgdG8gaGFsZi4KICAqLwogCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0yNiw4ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KKyNpbmNsdWRlICJtZC5oIgorI2luY2x1ZGUgImJpdG1hcC5oIgogCiAvKiBkZWJ1ZyBtYWNyb3MgKi8KIApAQCAtMTExLDkgKzExMiwxMCBAQAogCXVuc2lnbmVkIGNoYXIgKm1hcHBhZ2U7CiAKIAlpZiAocGFnZSA+PSBiaXRtYXAtPnBhZ2VzKSB7Ci0JCXByaW50ayhLRVJOX0FMRVJUCi0JCQkiJXM6IGludmFsaWQgYml0bWFwIHBhZ2UgcmVxdWVzdDogJWx1ICg+ICVsdSlcbiIsCi0JCQlibW5hbWUoYml0bWFwKSwgcGFnZSwgYml0bWFwLT5wYWdlcy0xKTsKKwkJLyogVGhpcyBjYW4gaGFwcGVuIGlmIGJpdG1hcF9zdGFydF9zeW5jIGdvZXMgYmV5b25kCisJCSAqIEVuZC1vZi1kZXZpY2Ugd2hpbGUgbG9va2luZyBmb3IgYSB3aG9sZSBwYWdlLgorCQkgKiBJdCBpcyBoYXJtbGVzcy4KKwkJICovCiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjY1LDcgKzI2Nyw2IEBACiAJbGlzdF9mb3JfZWFjaF9jb250aW51ZV9yY3UocG9zLCAmbWRkZXYtPmRpc2tzKSB7CiAJCXJkZXYgPSBsaXN0X2VudHJ5KHBvcywgbWRrX3JkZXZfdCwgc2FtZV9zZXQpOwogCQlpZiAocmRldi0+cmFpZF9kaXNrID49IDAgJiYKLQkJICAgIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgJiYKIAkJICAgICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJCS8qIHRoaXMgaXMgYSB1c2FibGUgZGV2aWNlcyAqLwogCQkJYXRvbWljX2luYygmcmRldi0+bnJfcGVuZGluZyk7CkBAIC0yOTcsNyArMjk4LDcgQEAKIAkJCQkgICAgKyBzaXplLzUxMiA+IDApCiAJCQkJCS8qIGJpdG1hcCBydW5zIGluIHRvIG1ldGFkYXRhICovCiAJCQkJCWdvdG8gYmFkX2FsaWdubWVudDsKLQkJCQlpZiAocmRldi0+ZGF0YV9vZmZzZXQgKyBtZGRldi0+c2l6ZSoyCisJCQkJaWYgKHJkZXYtPmRhdGFfb2Zmc2V0ICsgbWRkZXYtPmRldl9zZWN0b3JzCiAJCQkJICAgID4gcmRldi0+c2Jfc3RhcnQgKyBiaXRtYXAtPm9mZnNldCkKIAkJCQkJLyogZGF0YSBydW5zIGluIHRvIGJpdG1hcCAqLwogCQkJCQlnb3RvIGJhZF9hbGlnbm1lbnQ7CkBAIC01NzAsNyArNTcxLDcgQEAKIAllbHNlIGlmIChsZTMyX3RvX2NwdShzYi0+dmVyc2lvbikgPCBCSVRNQVBfTUFKT1JfTE8gfHwKIAkJIGxlMzJfdG9fY3B1KHNiLT52ZXJzaW9uKSA+IEJJVE1BUF9NQUpPUl9ISSkKIAkJcmVhc29uID0gInVucmVjb2duaXplZCBzdXBlcmJsb2NrIHZlcnNpb24iOwotCWVsc2UgaWYgKGNodW5rc2l6ZSA8IFBBR0VfU0laRSkKKwllbHNlIGlmIChjaHVua3NpemUgPCA1MTIpCiAJCXJlYXNvbiA9ICJiaXRtYXAgY2h1bmtzaXplIHRvbyBzbWFsbCI7CiAJZWxzZSBpZiAoKDEgPDwgZmZ6KH5jaHVua3NpemUpKSAhPSBjaHVua3NpemUpCiAJCXJlYXNvbiA9ICJiaXRtYXAgY2h1bmtzaXplIG5vdCBhIHBvd2VyIG9mIDIiOwpAQCAtMTMwNiw2ICsxMzA3LDkgQEAKIAkJUFJJTlRLKEtFUk5fREVCVUcgImRlYyB3cml0ZS1iZWhpbmQgY291bnQgJWQvJWRcbiIsCiAJCSAgYXRvbWljX3JlYWQoJmJpdG1hcC0+YmVoaW5kX3dyaXRlcyksIGJpdG1hcC0+bWF4X3dyaXRlX2JlaGluZCk7CiAJfQorCWlmIChiaXRtYXAtPm1kZGV2LT5kZWdyYWRlZCkKKwkJLyogTmV2ZXIgY2xlYXIgYml0cyBvciB1cGRhdGUgZXZlbnRzX2NsZWFyZWQgd2hlbiBkZWdyYWRlZCAqLworCQlzdWNjZXNzID0gMDsKIAogCXdoaWxlIChzZWN0b3JzKSB7CiAJCWludCBibG9ja3M7CkBAIC0xMzQ1LDggKzEzNDksOCBAQAogCX0KIH0KIAotaW50IGJpdG1hcF9zdGFydF9zeW5jKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCwgc2VjdG9yX3Qgb2Zmc2V0LCBpbnQgKmJsb2NrcywKLQkJCWludCBkZWdyYWRlZCkKK3N0YXRpYyBpbnQgX19iaXRtYXBfc3RhcnRfc3luYyhzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHNlY3Rvcl90IG9mZnNldCwgaW50ICpibG9ja3MsCisJCQkgICAgICAgaW50IGRlZ3JhZGVkKQogewogCWJpdG1hcF9jb3VudGVyX3QgKmJtYzsKIAlpbnQgcnY7CkBAIC0xMzc0LDYgKzEzNzgsMjkgQEAKIAlyZXR1cm4gcnY7CiB9CiAKK2ludCBiaXRtYXBfc3RhcnRfc3luYyhzdHJ1Y3QgYml0bWFwICpiaXRtYXAsIHNlY3Rvcl90IG9mZnNldCwgaW50ICpibG9ja3MsCisJCSAgICAgIGludCBkZWdyYWRlZCkKK3sKKwkvKiBiaXRtYXBfc3RhcnRfc3luYyBtdXN0IGFsd2F5cyByZXBvcnQgb24gbXVsdGlwbGVzIG9mIHdob2xlCisJICogcGFnZXMsIG90aGVyd2lzZSByZXN5bmMgKHdoaWNoIGlzIHZlcnkgUEFHRV9TSVpFIGJhc2VkKSB3aWxsCisJICogZ2V0IGNvbmZ1c2VkLgorCSAqIFNvIGNhbGwgX19iaXRtYXBfc3RhcnRfc3luYyByZXBlYXRlZGx5IChpZiBuZWVkZWQpIHVudGlsCisJICogQXQgbGVhc3QgUEFHRV9TSVpFPj45IGJsb2NrcyBhcmUgY292ZXJlZC4KKwkgKiBSZXR1cm4gdGhlICdvcicgb2YgdGhlIHJlc3VsdC4KKwkgKi8KKwlpbnQgcnYgPSAwOworCWludCBibG9ja3MxOworCisJKmJsb2NrcyA9IDA7CisJd2hpbGUgKCpibG9ja3MgPCAoUEFHRV9TSVpFPj45KSkgeworCQlydiB8PSBfX2JpdG1hcF9zdGFydF9zeW5jKGJpdG1hcCwgb2Zmc2V0LAorCQkJCQkgICZibG9ja3MxLCBkZWdyYWRlZCk7CisJCW9mZnNldCArPSBibG9ja3MxOworCQkqYmxvY2tzICs9IGJsb2NrczE7CisJfQorCXJldHVybiBydjsKK30KKwogdm9pZCBiaXRtYXBfZW5kX3N5bmMoc3RydWN0IGJpdG1hcCAqYml0bWFwLCBzZWN0b3JfdCBvZmZzZXQsIGludCAqYmxvY2tzLCBpbnQgYWJvcnRlZCkKIHsKIAliaXRtYXBfY291bnRlcl90ICpibWM7CkBAIC0xNDQzLDYgKzE0NzAsOCBAQAogCXdhaXRfZXZlbnQoYml0bWFwLT5tZGRldi0+cmVjb3Zlcnlfd2FpdCwKIAkJICAgYXRvbWljX3JlYWQoJmJpdG1hcC0+bWRkZXYtPnJlY292ZXJ5X2FjdGl2ZSkgPT0gMCk7CiAKKwliaXRtYXAtPm1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQgPSBiaXRtYXAtPm1kZGV2LT5jdXJyX3Jlc3luYzsKKwlzZXRfYml0KE1EX0NIQU5HRV9DTEVBTiwgJmJpdG1hcC0+bWRkZXYtPmZsYWdzKTsKIAlzZWN0b3IgJj0gfigoMVVMTCA8PCBDSFVOS19CTE9DS19TSElGVChiaXRtYXApKSAtIDEpOwogCXMgPSAwOwogCXdoaWxlIChzIDwgc2VjdG9yICYmIHMgPCBiaXRtYXAtPm1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9iaXRtYXAuaCBiL2RyaXZlcnMvbWQvYml0bWFwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvbGludXgvcmFpZC9iaXRtYXAuaApyZW5hbWUgdG8gZHJpdmVycy9tZC9iaXRtYXAuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1iaW8tbGlzdC5oIGIvZHJpdmVycy9tZC9kbS1iaW8tbGlzdC5oCmluZGV4IGQ0NTA5YmUuLjM0NTA5OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaAorKysgYi9kcml2ZXJzL21kL2RtLWJpby1saXN0LmgKQEAgLTUyLDYgKzUyLDE2IEBACiAJYmwtPnRhaWwgPSBiaW87CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBiaW9fbGlzdF9hZGRfaGVhZChzdHJ1Y3QgYmlvX2xpc3QgKmJsLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJYmlvLT5iaV9uZXh0ID0gYmwtPmhlYWQ7CisKKwlibC0+aGVhZCA9IGJpbzsKKworCWlmICghYmwtPnRhaWwpCisJCWJsLT50YWlsID0gYmlvOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYmlvX2xpc3RfbWVyZ2Uoc3RydWN0IGJpb19saXN0ICpibCwgc3RydWN0IGJpb19saXN0ICpibDIpCiB7CiAJaWYgKCFibDItPmhlYWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWJpby1yZWNvcmQuaCBiL2RyaXZlcnMvbWQvZG0tYmlvLXJlY29yZC5oCmluZGV4IGQzZWMyMTcuLjNhOGNmYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tYmlvLXJlY29yZC5oCisrKyBiL2RyaXZlcnMvbWQvZG0tYmlvLXJlY29yZC5oCkBAIC0xNiwzMCArMTYsNTYgQEAKICAqIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgaGVscCB0aGUgdGFyZ2V0IHJlY29yZCBhbmQgcmVzdG9yZSB0aGUKICAqIG9yaWdpbmFsIGJpbyBzdGF0ZS4KICAqLworCitzdHJ1Y3QgZG1fYmlvX3ZlY19kZXRhaWxzIHsKKyNpZiBQQUdFX1NJWkUgPCA2NTUzNgorCV9fdTE2IGJ2X2xlbjsKKwlfX3UxNiBidl9vZmZzZXQ7CisjZWxzZQorCXVuc2lnbmVkIGJ2X2xlbjsKKwl1bnNpZ25lZCBidl9vZmZzZXQ7CisjZW5kaWYKK307CisKIHN0cnVjdCBkbV9iaW9fZGV0YWlscyB7CiAJc2VjdG9yX3QgYmlfc2VjdG9yOwogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJpX2JkZXY7CiAJdW5zaWduZWQgaW50IGJpX3NpemU7CiAJdW5zaWduZWQgc2hvcnQgYmlfaWR4OwogCXVuc2lnbmVkIGxvbmcgYmlfZmxhZ3M7CisJc3RydWN0IGRtX2Jpb192ZWNfZGV0YWlscyBiaV9pb192ZWNbQklPX01BWF9QQUdFU107CiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1fYmlvX3JlY29yZChzdHJ1Y3QgZG1fYmlvX2RldGFpbHMgKmJkLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CisJdW5zaWduZWQgaTsKKwogCWJkLT5iaV9zZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKIAliZC0+YmlfYmRldiA9IGJpby0+YmlfYmRldjsKIAliZC0+Ymlfc2l6ZSA9IGJpby0+Ymlfc2l6ZTsKIAliZC0+YmlfaWR4ID0gYmlvLT5iaV9pZHg7CiAJYmQtPmJpX2ZsYWdzID0gYmlvLT5iaV9mbGFnczsKKworCWZvciAoaSA9IDA7IGkgPCBiaW8tPmJpX3ZjbnQ7IGkrKykgeworCQliZC0+YmlfaW9fdmVjW2ldLmJ2X2xlbiA9IGJpby0+YmlfaW9fdmVjW2ldLmJ2X2xlbjsKKwkJYmQtPmJpX2lvX3ZlY1tpXS5idl9vZmZzZXQgPSBiaW8tPmJpX2lvX3ZlY1tpXS5idl9vZmZzZXQ7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1fYmlvX3Jlc3RvcmUoc3RydWN0IGRtX2Jpb19kZXRhaWxzICpiZCwgc3RydWN0IGJpbyAqYmlvKQogeworCXVuc2lnbmVkIGk7CisKIAliaW8tPmJpX3NlY3RvciA9IGJkLT5iaV9zZWN0b3I7CiAJYmlvLT5iaV9iZGV2ID0gYmQtPmJpX2JkZXY7CiAJYmlvLT5iaV9zaXplID0gYmQtPmJpX3NpemU7CiAJYmlvLT5iaV9pZHggPSBiZC0+YmlfaWR4OwogCWJpby0+YmlfZmxhZ3MgPSBiZC0+YmlfZmxhZ3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmlvLT5iaV92Y250OyBpKyspIHsKKwkJYmlvLT5iaV9pb192ZWNbaV0uYnZfbGVuID0gYmQtPmJpX2lvX3ZlY1tpXS5idl9sZW47CisJCWJpby0+YmlfaW9fdmVjW2ldLmJ2X29mZnNldCA9IGJkLT5iaV9pb192ZWNbaV0uYnZfb2Zmc2V0OworCX0KIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKaW5kZXggYmZlZmQwNy4uNTMzOTRlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwpAQCAtMTE1Niw4ICsxMTU2LDcgQEAKIAljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKHRmbSk7CiBiYWRfY2lwaGVyOgogCS8qIE11c3QgemVybyBrZXkgbWF0ZXJpYWwgYmVmb3JlIGZyZWVpbmcgKi8KLQltZW1zZXQoY2MsIDAsIHNpemVvZigqY2MpICsgY2MtPmtleV9zaXplICogc2l6ZW9mKHU4KSk7Ci0Ja2ZyZWUoY2MpOworCWt6ZnJlZShjYyk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTExODMsOCArMTE4Miw3IEBACiAJZG1fcHV0X2RldmljZSh0aSwgY2MtPmRldik7CiAKIAkvKiBNdXN0IHplcm8ga2V5IG1hdGVyaWFsIGJlZm9yZSBmcmVlaW5nICovCi0JbWVtc2V0KGNjLCAwLCBzaXplb2YoKmNjKSArIGNjLT5rZXlfc2l6ZSAqIHNpemVvZih1OCkpOwotCWtmcmVlKGNjKTsKKwlremZyZWUoY2MpOwogfQogCiBzdGF0aWMgaW50IGNyeXB0X21hcChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJpbyAqYmlvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmMKaW5kZXggZGNjYmZiMC4uYTJlMjZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuYworKysgYi9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5jCkBAIC03LDYgKzcsNyBAQAogCiAjaW5jbHVkZSAiZG0tZXhjZXB0aW9uLXN0b3JlLmgiCiAKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KQEAgLTE0LDYgKzE1LDI1NyBAQAogCiAjZGVmaW5lIERNX01TR19QUkVGSVggInNuYXBzaG90IGV4Y2VwdGlvbiBzdG9yZXMiCiAKK3N0YXRpYyBMSVNUX0hFQUQoX2V4Y2VwdGlvbl9zdG9yZV90eXBlcyk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKF9sb2NrKTsKKworc3RhdGljIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqX19maW5kX2V4Y2VwdGlvbl9zdG9yZV90eXBlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0eXBlLCAmX2V4Y2VwdGlvbl9zdG9yZV90eXBlcywgbGlzdCkKKwkJaWYgKCFzdHJjbXAobmFtZSwgdHlwZS0+bmFtZSkpCisJCQlyZXR1cm4gdHlwZTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICpfZ2V0X2V4Y2VwdGlvbl9zdG9yZV90eXBlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlOworCisJc3Bpbl9sb2NrKCZfbG9jayk7CisKKwl0eXBlID0gX19maW5kX2V4Y2VwdGlvbl9zdG9yZV90eXBlKG5hbWUpOworCisJaWYgKHR5cGUgJiYgIXRyeV9tb2R1bGVfZ2V0KHR5cGUtPm1vZHVsZSkpCisJCXR5cGUgPSBOVUxMOworCisJc3Bpbl91bmxvY2soJl9sb2NrKTsKKworCXJldHVybiB0eXBlOworfQorCisvKgorICogZ2V0X3R5cGUKKyAqIEB0eXBlX25hbWUKKyAqCisgKiBBdHRlbXB0IHRvIHJldHJpZXZlIHRoZSBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSBieSBuYW1lLiAgSWYgbm90IGFscmVhZHkKKyAqIGF2YWlsYWJsZSwgYXR0ZW1wdCB0byBsb2FkIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGUuCisgKgorICogRXhzdG9yZSBtb2R1bGVzIGFyZSBuYW1lZCAiZG0tZXhzdG9yZS0iIGZvbGxvd2VkIGJ5IHRoZSAndHlwZV9uYW1lJy4KKyAqIE1vZHVsZXMgbWF5IGNvbnRhaW4gbXVsdGlwbGUgdHlwZXMuCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZmlyc3QgdHJ5IHRoZSBtb2R1bGUgImRtLWV4c3RvcmUtPHR5cGVfbmFtZT4iLAorICogdGhlbiB0cnVuY2F0ZSAndHlwZV9uYW1lJyBvbiB0aGUgbGFzdCAnLScgYW5kIHRyeSBhZ2Fpbi4KKyAqCisgKiBGb3IgZXhhbXBsZSwgaWYgdHlwZV9uYW1lIHdhcyAiY2x1c3RlcmVkLXNoYXJlZCIsIGl0IHdvdWxkIHNlYXJjaAorICogJ2RtLWV4c3RvcmUtY2x1c3RlcmVkLXNoYXJlZCcgdGhlbiAnZG0tZXhzdG9yZS1jbHVzdGVyZWQnLgorICoKKyAqICdkbS1leGNlcHRpb24tc3RvcmUtPHR5cGVfbmFtZT4nIGlzIHRvbyBsb25nIG9mIGEgbmFtZSBpbiBteQorICogb3Bpbmlvbiwgd2hpY2ggaXMgd2h5IEkndmUgY2hvc2VuIHRvIGhhdmUgdGhlIGZpbGVzCisgKiBjb250YWluaW5nIGV4Y2VwdGlvbiBzdG9yZSBpbXBsZW1lbnRhdGlvbnMgYmUgJ2RtLWV4c3RvcmUtPHR5cGVfbmFtZT4nLgorICogSWYgeW91IHdhbnQgeW91ciBtb2R1bGUgdG8gYmUgYXV0b2xvYWRlZCwgeW91IHdpbGwgZm9sbG93IHRoaXMKKyAqIG5hbWluZyBjb252ZW50aW9uLgorICoKKyAqIFJldHVybnM6IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlKiBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqZ2V0X3R5cGUoY29uc3QgY2hhciAqdHlwZV9uYW1lKQoreworCWNoYXIgKnAsICp0eXBlX25hbWVfZHVwOworCXN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZTsKKworCXR5cGUgPSBfZ2V0X2V4Y2VwdGlvbl9zdG9yZV90eXBlKHR5cGVfbmFtZSk7CisJaWYgKHR5cGUpCisJCXJldHVybiB0eXBlOworCisJdHlwZV9uYW1lX2R1cCA9IGtzdHJkdXAodHlwZV9uYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXR5cGVfbmFtZV9kdXApIHsKKwkJRE1FUlIoIk5vIG1lbW9yeSBsZWZ0IHRvIGF0dGVtcHQgbG9hZCBmb3IgXCIlc1wiIiwgdHlwZV9uYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJd2hpbGUgKHJlcXVlc3RfbW9kdWxlKCJkbS1leHN0b3JlLSVzIiwgdHlwZV9uYW1lX2R1cCkgfHwKKwkgICAgICAgISh0eXBlID0gX2dldF9leGNlcHRpb25fc3RvcmVfdHlwZSh0eXBlX25hbWUpKSkgeworCQlwID0gc3RycmNocih0eXBlX25hbWVfZHVwLCAnLScpOworCQlpZiAoIXApCisJCQlicmVhazsKKwkJcFswXSA9ICdcMCc7CisJfQorCisJaWYgKCF0eXBlKQorCQlETVdBUk4oIk1vZHVsZSBmb3IgZXhzdG9yZSB0eXBlIFwiJXNcIiBub3QgZm91bmQuIiwgdHlwZV9uYW1lKTsKKworCWtmcmVlKHR5cGVfbmFtZV9kdXApOworCisJcmV0dXJuIHR5cGU7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF90eXBlKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZSkKK3sKKwlzcGluX2xvY2soJl9sb2NrKTsKKwltb2R1bGVfcHV0KHR5cGUtPm1vZHVsZSk7CisJc3Bpbl91bmxvY2soJl9sb2NrKTsKK30KKworaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3JlZ2lzdGVyKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSAqdHlwZSkKK3sKKwlpbnQgciA9IDA7CisKKwlzcGluX2xvY2soJl9sb2NrKTsKKwlpZiAoIV9fZmluZF9leGNlcHRpb25fc3RvcmVfdHlwZSh0eXBlLT5uYW1lKSkKKwkJbGlzdF9hZGQoJnR5cGUtPmxpc3QsICZfZXhjZXB0aW9uX3N0b3JlX3R5cGVzKTsKKwllbHNlCisJCXIgPSAtRUVYSVNUOworCXNwaW5fdW5sb2NrKCZfbG9jayk7CisKKwlyZXR1cm4gcjsKK30KK0VYUE9SVF9TWU1CT0woZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfcmVnaXN0ZXIpOworCitpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKnR5cGUpCit7CisJc3Bpbl9sb2NrKCZfbG9jayk7CisKKwlpZiAoIV9fZmluZF9leGNlcHRpb25fc3RvcmVfdHlwZSh0eXBlLT5uYW1lKSkgeworCQlzcGluX3VubG9jaygmX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsaXN0X2RlbCgmdHlwZS0+bGlzdCk7CisKKwlzcGluX3VubG9jaygmX2xvY2spOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIpOworCisvKgorICogUm91bmQgYSBudW1iZXIgdXAgdG8gdGhlIG5lYXJlc3QgJ3NpemUnIGJvdW5kYXJ5LiAgc2l6ZSBtdXN0CisgKiBiZSBhIHBvd2VyIG9mIDIuCisgKi8KK3N0YXRpYyB1bG9uZyByb3VuZF91cCh1bG9uZyBuLCB1bG9uZyBzaXplKQoreworCXNpemUtLTsKKwlyZXR1cm4gKG4gKyBzaXplKSAmIH5zaXplOworfQorCitzdGF0aWMgaW50IHNldF9jaHVua19zaXplKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAorCQkJICBjb25zdCBjaGFyICpjaHVua19zaXplX2FyZywgY2hhciAqKmVycm9yKQoreworCXVuc2lnbmVkIGxvbmcgY2h1bmtfc2l6ZV91bG9uZzsKKwljaGFyICp2YWx1ZTsKKworCWNodW5rX3NpemVfdWxvbmcgPSBzaW1wbGVfc3RydG91bChjaHVua19zaXplX2FyZywgJnZhbHVlLCAxMCk7CisJaWYgKCpjaHVua19zaXplX2FyZyA9PSAnXDAnIHx8ICp2YWx1ZSAhPSAnXDAnKSB7CisJCSplcnJvciA9ICJJbnZhbGlkIGNodW5rIHNpemUiOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWNodW5rX3NpemVfdWxvbmcpIHsKKwkJc3RvcmUtPmNodW5rX3NpemUgPSBzdG9yZS0+Y2h1bmtfbWFzayA9IHN0b3JlLT5jaHVua19zaGlmdCA9IDA7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogQ2h1bmsgc2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIHBhZ2Ugc2l6ZS4gIFNpbGVudGx5CisJICogcm91bmQgdXAgaWYgaXQncyBub3QuCisJICovCisJY2h1bmtfc2l6ZV91bG9uZyA9IHJvdW5kX3VwKGNodW5rX3NpemVfdWxvbmcsIFBBR0VfU0laRSA+PiA5KTsKKworCS8qIENoZWNrIGNodW5rX3NpemUgaXMgYSBwb3dlciBvZiAyICovCisJaWYgKCFpc19wb3dlcl9vZl8yKGNodW5rX3NpemVfdWxvbmcpKSB7CisJCSplcnJvciA9ICJDaHVuayBzaXplIGlzIG5vdCBhIHBvd2VyIG9mIDIiOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBWYWxpZGF0ZSB0aGUgY2h1bmsgc2l6ZSBhZ2FpbnN0IHRoZSBkZXZpY2UgYmxvY2sgc2l6ZSAqLworCWlmIChjaHVua19zaXplX3Vsb25nICUgKGJkZXZfaGFyZHNlY3Rfc2l6ZShzdG9yZS0+Y293LT5iZGV2KSA+PiA5KSkgeworCQkqZXJyb3IgPSAiQ2h1bmsgc2l6ZSBpcyBub3QgYSBtdWx0aXBsZSBvZiBkZXZpY2UgYmxvY2tzaXplIjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3RvcmUtPmNodW5rX3NpemUgPSBjaHVua19zaXplX3Vsb25nOworCXN0b3JlLT5jaHVua19tYXNrID0gY2h1bmtfc2l6ZV91bG9uZyAtIDE7CisJc3RvcmUtPmNodW5rX3NoaWZ0ID0gZmZzKGNodW5rX3NpemVfdWxvbmcpIC0gMTsKKworCXJldHVybiAwOworfQorCitpbnQgZG1fZXhjZXB0aW9uX3N0b3JlX2NyZWF0ZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LAorCQkJICAgICAgdW5zaWduZWQgKmFyZ3NfdXNlZCwKKwkJCSAgICAgIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKipzdG9yZSkKK3sKKwlpbnQgciA9IDA7CisJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlOworCXN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnRtcF9zdG9yZTsKKwljaGFyIHBlcnNpc3RlbnQ7CisKKwlpZiAoYXJnYyA8IDMpIHsKKwkJdGktPmVycm9yID0gIkluc3VmZmljaWVudCBleGNlcHRpb24gc3RvcmUgYXJndW1lbnRzIjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdG1wX3N0b3JlID0ga21hbGxvYyhzaXplb2YoKnRtcF9zdG9yZSksIEdGUF9LRVJORUwpOworCWlmICghdG1wX3N0b3JlKSB7CisJCXRpLT5lcnJvciA9ICJFeGNlcHRpb24gc3RvcmUgYWxsb2NhdGlvbiBmYWlsZWQiOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwZXJzaXN0ZW50ID0gdG91cHBlcigqYXJndlsxXSk7CisJaWYgKHBlcnNpc3RlbnQgIT0gJ1AnICYmIHBlcnNpc3RlbnQgIT0gJ04nKSB7CisJCXRpLT5lcnJvciA9ICJQZXJzaXN0ZW50IGZsYWcgaXMgbm90IFAgb3IgTiI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXR5cGUgPSBnZXRfdHlwZShhcmd2WzFdKTsKKwlpZiAoIXR5cGUpIHsKKwkJdGktPmVycm9yID0gIkV4Y2VwdGlvbiBzdG9yZSB0eXBlIG5vdCByZWNvZ25pc2VkIjsKKwkJciA9IC1FSU5WQUw7CisJCWdvdG8gYmFkX3R5cGU7CisJfQorCisJdG1wX3N0b3JlLT50eXBlID0gdHlwZTsKKwl0bXBfc3RvcmUtPnRpID0gdGk7CisKKwlyID0gZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgMCwgMCwKKwkJCSAgRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFLCAmdG1wX3N0b3JlLT5jb3cpOworCWlmIChyKSB7CisJCXRpLT5lcnJvciA9ICJDYW5ub3QgZ2V0IENPVyBkZXZpY2UiOworCQlnb3RvIGJhZF9jb3c7CisJfQorCisJciA9IHNldF9jaHVua19zaXplKHRtcF9zdG9yZSwgYXJndlsyXSwgJnRpLT5lcnJvcik7CisJaWYgKHIpCisJCWdvdG8gYmFkX2NvdzsKKworCXIgPSB0eXBlLT5jdHIodG1wX3N0b3JlLCAwLCBOVUxMKTsKKwlpZiAocikgeworCQl0aS0+ZXJyb3IgPSAiRXhjZXB0aW9uIHN0b3JlIHR5cGUgY29uc3RydWN0b3IgZmFpbGVkIjsKKwkJZ290byBiYWRfY3RyOworCX0KKworCSphcmdzX3VzZWQgPSAzOworCSpzdG9yZSA9IHRtcF9zdG9yZTsKKwlyZXR1cm4gMDsKKworYmFkX2N0cjoKKwlkbV9wdXRfZGV2aWNlKHRpLCB0bXBfc3RvcmUtPmNvdyk7CitiYWRfY293OgorCXB1dF90eXBlKHR5cGUpOworYmFkX3R5cGU6CisJa2ZyZWUodG1wX3N0b3JlKTsKKwlyZXR1cm4gcjsKK30KK0VYUE9SVF9TWU1CT0woZG1fZXhjZXB0aW9uX3N0b3JlX2NyZWF0ZSk7CisKK3ZvaWQgZG1fZXhjZXB0aW9uX3N0b3JlX2Rlc3Ryb3koc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpCit7CisJc3RvcmUtPnR5cGUtPmR0cihzdG9yZSk7CisJZG1fcHV0X2RldmljZShzdG9yZS0+dGksIHN0b3JlLT5jb3cpOworCXB1dF90eXBlKHN0b3JlLT50eXBlKTsKKwlrZnJlZShzdG9yZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRtX2V4Y2VwdGlvbl9zdG9yZV9kZXN0cm95KTsKKwogaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV9pbml0KHZvaWQpCiB7CiAJaW50IHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oIGIvZHJpdmVycy9tZC9kbS1leGNlcHRpb24tc3RvcmUuaAppbmRleCBiYjlmMzNkLi4wYTJlNmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWV4Y2VwdGlvbi1zdG9yZS5oCisrKyBiL2RyaXZlcnMvbWQvZG0tZXhjZXB0aW9uLXN0b3JlLmgKQEAgLTM3LDExICszNywxOCBAQAogICogQWJzdHJhY3Rpb24gdG8gaGFuZGxlIHRoZSBtZXRhL2xheW91dCBvZiBleGNlcHRpb24gc3RvcmVzICh0aGUKICAqIENPVyBkZXZpY2UpLgogICovCi1zdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlIHsKK3N0cnVjdCBkbV9leGNlcHRpb25fc3RvcmU7CitzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IG1vZHVsZSAqbW9kdWxlOworCisJaW50ICgqY3RyKSAoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCSAgICB1bnNpZ25lZCBhcmdjLCBjaGFyICoqYXJndik7CisKIAkvKgogCSAqIERlc3Ryb3lzIHRoaXMgb2JqZWN0IHdoZW4geW91J3ZlIGZpbmlzaGVkIHdpdGggaXQuCiAJICovCi0Jdm9pZCAoKmRlc3Ryb3kpIChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSk7CisJdm9pZCAoKmR0cikgKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKTsKIAogCS8qCiAJICogVGhlIHRhcmdldCBzaG91bGRuJ3QgcmVhZCB0aGUgQ09XIGRldmljZSB1bnRpbCB0aGlzIGlzCkBAIC03Miw4ICs3OSw5IEBACiAJICovCiAJdm9pZCAoKmRyb3Bfc25hcHNob3QpIChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSk7CiAKLQlpbnQgKCpzdGF0dXMpIChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwgc3RhdHVzX3R5cGVfdCBzdGF0dXMsCi0JCSAgICAgICBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIGludCBtYXhsZW4pOworCXVuc2lnbmVkICgqc3RhdHVzKSAoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCQkgICAgc3RhdHVzX3R5cGVfdCBzdGF0dXMsIGNoYXIgKnJlc3VsdCwKKwkJCSAgICB1bnNpZ25lZCBtYXhsZW4pOwogCiAJLyoKIAkgKiBSZXR1cm4gaG93IGZ1bGwgdGhlIHNuYXBzaG90IGlzLgpAQCAtODIsNyArOTAsMjEgQEAKIAkJCSAgICAgICBzZWN0b3JfdCAqbnVtZXJhdG9yLAogCQkJICAgICAgIHNlY3Rvcl90ICpkZW5vbWluYXRvcik7CiAKLQlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXA7CisJLyogRm9yIGludGVybmFsIGRldmljZS1tYXBwZXIgdXNlIG9ubHkuICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSB7CisJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlOworCXN0cnVjdCBkbV90YXJnZXQgKnRpOworCisJc3RydWN0IGRtX2RldiAqY293OworCisJLyogU2l6ZSBvZiBkYXRhIGJsb2NrcyBzYXZlZCAtIG11c3QgYmUgYSBwb3dlciBvZiAyICovCisJY2h1bmtfdCBjaHVua19zaXplOworCWNodW5rX3QgY2h1bmtfbWFzazsKKwljaHVua190IGNodW5rX3NoaWZ0OworCiAJdm9pZCAqY29udGV4dDsKIH07CiAKQEAgLTEyOSw2ICsxNTEsMjggQEAKIAogIyAgZW5kaWYKIAorLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHNlY3RvcnMgaW4gdGhlIGRldmljZS4KKyAqLworc3RhdGljIGlubGluZSBzZWN0b3JfdCBnZXRfZGV2X3NpemUoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlyZXR1cm4gYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiBTRUNUT1JfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY2h1bmtfdCBzZWN0b3JfdG9fY2h1bmsoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCQkJICAgICAgc2VjdG9yX3Qgc2VjdG9yKQoreworCXJldHVybiAoc2VjdG9yICYgfnN0b3JlLT5jaHVua19tYXNrKSA+PiBzdG9yZS0+Y2h1bmtfc2hpZnQ7Cit9CisKK2ludCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZV9yZWdpc3RlcihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGUgKnR5cGUpOworaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlICp0eXBlKTsKKworaW50IGRtX2V4Y2VwdGlvbl9zdG9yZV9jcmVhdGUoc3RydWN0IGRtX3RhcmdldCAqdGksIGludCBhcmdjLCBjaGFyICoqYXJndiwKKwkJCSAgICAgIHVuc2lnbmVkICphcmdzX3VzZWQsCisJCQkgICAgICBzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICoqc3RvcmUpOwordm9pZCBkbV9leGNlcHRpb25fc3RvcmVfZGVzdHJveShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSk7CisKIGludCBkbV9leGNlcHRpb25fc3RvcmVfaW5pdCh2b2lkKTsKIHZvaWQgZG1fZXhjZXB0aW9uX3N0b3JlX2V4aXQodm9pZCk7CiAKQEAgLTE0MSw4ICsxODUsNCBAQAogaW50IGRtX3RyYW5zaWVudF9zbmFwc2hvdF9pbml0KHZvaWQpOwogdm9pZCBkbV90cmFuc2llbnRfc25hcHNob3RfZXhpdCh2b2lkKTsKIAotaW50IGRtX2NyZWF0ZV9wZXJzaXN0ZW50KHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKTsKLQotaW50IGRtX2NyZWF0ZV90cmFuc2llbnQoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpOwotCiAjZW5kaWYgLyogX0xJTlVYX0RNX0VYQ0VQVElPTl9TVE9SRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pby5jIGIvZHJpdmVycy9tZC9kbS1pby5jCmluZGV4IDM2ZTJiNWUuLmU3M2FhYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0taW8uYworKysgYi9kcml2ZXJzL21kL2RtLWlvLmMKQEAgLTM3MCwxNiArMzcwLDEzIEBACiAJd2hpbGUgKDEpIHsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCi0JCWlmICghYXRvbWljX3JlYWQoJmlvLmNvdW50KSB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJaWYgKCFhdG9taWNfcmVhZCgmaW8uY291bnQpKQogCQkJYnJlYWs7CiAKIAkJaW9fc2NoZWR1bGUoKTsKIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAotCWlmIChhdG9taWNfcmVhZCgmaW8uY291bnQpKQotCQlyZXR1cm4gLUVJTlRSOwotCiAJaWYgKGVycm9yX2JpdHMpCiAJCSplcnJvcl9iaXRzID0gaW8uZXJyb3JfYml0czsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1sb2cuYyBiL2RyaXZlcnMvbWQvZG0tbG9nLmMKaW5kZXggNzM3OTYxZi4uYmUyMzNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1sb2cuYworKysgYi9kcml2ZXJzL21kL2RtLWxvZy5jCkBAIC0xNiw0MCArMTYsMjkgQEAKIAogI2RlZmluZSBETV9NU0dfUFJFRklYICJkaXJ0eSByZWdpb24gbG9nIgogCi1zdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsIHsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKnR5cGU7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JbG9uZyB1c2U7Ci19OwotCiBzdGF0aWMgTElTVF9IRUFEKF9sb2dfdHlwZXMpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhfbG9jayk7CiAKLXN0YXRpYyBzdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsICpfX2ZpbmRfZGlydHlfbG9nX3R5cGUoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKl9fZmluZF9kaXJ0eV9sb2dfdHlwZShjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBkbV9kaXJ0eV9sb2dfaW50ZXJuYWwgKmxvZ190eXBlOworCXN0cnVjdCBkbV9kaXJ0eV9sb2dfdHlwZSAqbG9nX3R5cGU7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvZ190eXBlLCAmX2xvZ190eXBlcywgbGlzdCkKLQkJaWYgKCFzdHJjbXAobmFtZSwgbG9nX3R5cGUtPnR5cGUtPm5hbWUpKQorCQlpZiAoIXN0cmNtcChuYW1lLCBsb2dfdHlwZS0+bmFtZSkpCiAJCQlyZXR1cm4gbG9nX3R5cGU7CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBkbV9kaXJ0eV9sb2dfaW50ZXJuYWwgKl9nZXRfZGlydHlfbG9nX3R5cGUoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKl9nZXRfZGlydHlfbG9nX3R5cGUoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsICpsb2dfdHlwZTsKKwlzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKmxvZ190eXBlOwogCiAJc3Bpbl9sb2NrKCZfbG9jayk7CiAKIAlsb2dfdHlwZSA9IF9fZmluZF9kaXJ0eV9sb2dfdHlwZShuYW1lKTsKLQlpZiAobG9nX3R5cGUpIHsKLQkJaWYgKCFsb2dfdHlwZS0+dXNlICYmICF0cnlfbW9kdWxlX2dldChsb2dfdHlwZS0+dHlwZS0+bW9kdWxlKSkKLQkJCWxvZ190eXBlID0gTlVMTDsKLQkJZWxzZQotCQkJbG9nX3R5cGUtPnVzZSsrOwotCX0KKwlpZiAobG9nX3R5cGUgJiYgIXRyeV9tb2R1bGVfZ2V0KGxvZ190eXBlLT5tb2R1bGUpKQorCQlsb2dfdHlwZSA9IE5VTEw7CiAKIAlzcGluX3VubG9jaygmX2xvY2spOwogCkBAIC03NiwxNCArNjUsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKmdldF90eXBlKGNvbnN0IGNoYXIgKnR5cGVfbmFtZSkKIHsKIAljaGFyICpwLCAqdHlwZV9uYW1lX2R1cDsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsICpsb2dfdHlwZTsKKwlzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKmxvZ190eXBlOwogCiAJaWYgKCF0eXBlX25hbWUpCiAJCXJldHVybiBOVUxMOwogCiAJbG9nX3R5cGUgPSBfZ2V0X2RpcnR5X2xvZ190eXBlKHR5cGVfbmFtZSk7CiAJaWYgKGxvZ190eXBlKQotCQlyZXR1cm4gbG9nX3R5cGUtPnR5cGU7CisJCXJldHVybiBsb2dfdHlwZTsKIAogCXR5cGVfbmFtZV9kdXAgPSBrc3RyZHVwKHR5cGVfbmFtZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0eXBlX25hbWVfZHVwKSB7CkBAIC0xMDUsNTYgKzk0LDMzIEBACiAKIAlrZnJlZSh0eXBlX25hbWVfZHVwKTsKIAotCXJldHVybiBsb2dfdHlwZSA/IGxvZ190eXBlLT50eXBlIDogTlVMTDsKKwlyZXR1cm4gbG9nX3R5cGU7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF90eXBlKHN0cnVjdCBkbV9kaXJ0eV9sb2dfdHlwZSAqdHlwZSkKIHsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsICpsb2dfdHlwZTsKLQogCWlmICghdHlwZSkKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrKCZfbG9jayk7Ci0JbG9nX3R5cGUgPSBfX2ZpbmRfZGlydHlfbG9nX3R5cGUodHlwZS0+bmFtZSk7Ci0JaWYgKCFsb2dfdHlwZSkKKwlpZiAoIV9fZmluZF9kaXJ0eV9sb2dfdHlwZSh0eXBlLT5uYW1lKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAoIS0tbG9nX3R5cGUtPnVzZSkKLQkJbW9kdWxlX3B1dCh0eXBlLT5tb2R1bGUpOwotCi0JQlVHX09OKGxvZ190eXBlLT51c2UgPCAwKTsKKwltb2R1bGVfcHV0KHR5cGUtPm1vZHVsZSk7CiAKIG91dDoKIAlzcGluX3VubG9jaygmX2xvY2spOwogfQogCi1zdGF0aWMgc3RydWN0IGRtX2RpcnR5X2xvZ19pbnRlcm5hbCAqX2FsbG9jX2RpcnR5X2xvZ190eXBlKHN0cnVjdCBkbV9kaXJ0eV9sb2dfdHlwZSAqdHlwZSkKLXsKLQlzdHJ1Y3QgZG1fZGlydHlfbG9nX2ludGVybmFsICpsb2dfdHlwZSA9IGt6YWxsb2Moc2l6ZW9mKCpsb2dfdHlwZSksCi0JCQkJCQkJIEdGUF9LRVJORUwpOwotCi0JaWYgKGxvZ190eXBlKQotCQlsb2dfdHlwZS0+dHlwZSA9IHR5cGU7Ci0KLQlyZXR1cm4gbG9nX3R5cGU7Ci19Ci0KIGludCBkbV9kaXJ0eV9sb2dfdHlwZV9yZWdpc3RlcihzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKnR5cGUpCiB7Ci0Jc3RydWN0IGRtX2RpcnR5X2xvZ19pbnRlcm5hbCAqbG9nX3R5cGUgPSBfYWxsb2NfZGlydHlfbG9nX3R5cGUodHlwZSk7CiAJaW50IHIgPSAwOwogCi0JaWYgKCFsb2dfdHlwZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAlzcGluX2xvY2soJl9sb2NrKTsKIAlpZiAoIV9fZmluZF9kaXJ0eV9sb2dfdHlwZSh0eXBlLT5uYW1lKSkKLQkJbGlzdF9hZGQoJmxvZ190eXBlLT5saXN0LCAmX2xvZ190eXBlcyk7Ci0JZWxzZSB7Ci0JCWtmcmVlKGxvZ190eXBlKTsKKwkJbGlzdF9hZGQoJnR5cGUtPmxpc3QsICZfbG9nX3R5cGVzKTsKKwllbHNlCiAJCXIgPSAtRUVYSVNUOwotCX0KIAlzcGluX3VubG9jaygmX2xvY2spOwogCiAJcmV0dXJuIHI7CkBAIC0xNjMsMjUgKzEyOSwxNiBAQAogCiBpbnQgZG1fZGlydHlfbG9nX3R5cGVfdW5yZWdpc3RlcihzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKnR5cGUpCiB7Ci0Jc3RydWN0IGRtX2RpcnR5X2xvZ19pbnRlcm5hbCAqbG9nX3R5cGU7Ci0KIAlzcGluX2xvY2soJl9sb2NrKTsKIAotCWxvZ190eXBlID0gX19maW5kX2RpcnR5X2xvZ190eXBlKHR5cGUtPm5hbWUpOwotCWlmICghbG9nX3R5cGUpIHsKKwlpZiAoIV9fZmluZF9kaXJ0eV9sb2dfdHlwZSh0eXBlLT5uYW1lKSkgewogCQlzcGluX3VubG9jaygmX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAobG9nX3R5cGUtPnVzZSkgewotCQlzcGluX3VubG9jaygmX2xvY2spOwotCQlyZXR1cm4gLUVUWFRCU1k7Ci0JfQotCi0JbGlzdF9kZWwoJmxvZ190eXBlLT5saXN0KTsKKwlsaXN0X2RlbCgmdHlwZS0+bGlzdCk7CiAKIAlzcGluX3VubG9jaygmX2xvY2spOwotCWtmcmVlKGxvZ190eXBlKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1wYXRoLXNlbGVjdG9yLmMgYi9kcml2ZXJzL21kL2RtLXBhdGgtc2VsZWN0b3IuYwppbmRleCA5NmVhMjI2Li40MmMwNGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXBhdGgtc2VsZWN0b3IuYworKysgYi9kcml2ZXJzL21kL2RtLXBhdGgtc2VsZWN0b3IuYwpAQCAtMTcsOSArMTcsNyBAQAogCiBzdHJ1Y3QgcHNfaW50ZXJuYWwgewogCXN0cnVjdCBwYXRoX3NlbGVjdG9yX3R5cGUgcHN0OwotCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWxvbmcgdXNlOwogfTsKIAogI2RlZmluZSBwc3RfdG9fcHNpKF9fcHN0KSBjb250YWluZXJfb2YoKF9fcHN0KSwgc3RydWN0IHBzX2ludGVybmFsLCBwc3QpCkBAIC00NSwxMiArNDMsOCBAQAogCiAJZG93bl9yZWFkKCZfcHNfbG9jayk7CiAJcHNpID0gX19maW5kX3BhdGhfc2VsZWN0b3JfdHlwZShuYW1lKTsKLQlpZiAocHNpKSB7Ci0JCWlmICgocHNpLT51c2UgPT0gMCkgJiYgIXRyeV9tb2R1bGVfZ2V0KHBzaS0+cHN0Lm1vZHVsZSkpCi0JCQlwc2kgPSBOVUxMOwotCQllbHNlCi0JCQlwc2ktPnVzZSsrOwotCX0KKwlpZiAocHNpICYmICF0cnlfbW9kdWxlX2dldChwc2ktPnBzdC5tb2R1bGUpKQorCQlwc2kgPSBOVUxMOwogCXVwX3JlYWQoJl9wc19sb2NrKTsKIAogCXJldHVybiBwc2k7CkBAIC04NCwxMSArNzgsNyBAQAogCWlmICghcHNpKQogCQlnb3RvIG91dDsKIAotCWlmICgtLXBzaS0+dXNlID09IDApCi0JCW1vZHVsZV9wdXQocHNpLT5wc3QubW9kdWxlKTsKLQotCUJVR19PTihwc2ktPnVzZSA8IDApOwotCisJbW9kdWxlX3B1dChwc2ktPnBzdC5tb2R1bGUpOwogb3V0OgogCXVwX3JlYWQoJl9wc19sb2NrKTsKIH0KQEAgLTEzNiwxMSArMTI2LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHBzaS0+dXNlKSB7Ci0JCXVwX3dyaXRlKCZfcHNfbG9jayk7Ci0JCXJldHVybiAtRVRYVEJTWTsKLQl9Ci0KIAlsaXN0X2RlbCgmcHNpLT5saXN0KTsKIAogCXVwX3dyaXRlKCZfcHNfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXJhaWQxLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKaW5kZXggNGQ2YmMxMC4uNTM2ZWYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tcmFpZDEuYwpAQCAtMTQ1LDYgKzE0NSw4IEBACiAJc3RydWN0IGRtX2Jpb19kZXRhaWxzIGRldGFpbHM7CiB9OwogCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKl9kbV9yYWlkMV9yZWFkX3JlY29yZF9jYWNoZTsKKwogLyoKICAqIEV2ZXJ5IG1pcnJvciBzaG91bGQgbG9vayBsaWtlIHRoaXMgb25lLgogICovCkBAIC01ODYsNiArNTg4LDkgQEAKIAlpbnQgc3RhdGU7CiAJc3RydWN0IGJpbyAqYmlvOwogCXN0cnVjdCBiaW9fbGlzdCBzeW5jLCBub3N5bmMsIHJlY292ZXIsICp0aGlzX2xpc3QgPSBOVUxMOworCXN0cnVjdCBiaW9fbGlzdCByZXF1ZXVlOworCXN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZyA9IGRtX3JoX2RpcnR5X2xvZyhtcy0+cmgpOworCXJlZ2lvbl90IHJlZ2lvbjsKIAogCWlmICghd3JpdGVzLT5oZWFkKQogCQlyZXR1cm47CkBAIC01OTYsMTAgKzYwMSwxOCBAQAogCWJpb19saXN0X2luaXQoJnN5bmMpOwogCWJpb19saXN0X2luaXQoJm5vc3luYyk7CiAJYmlvX2xpc3RfaW5pdCgmcmVjb3Zlcik7CisJYmlvX2xpc3RfaW5pdCgmcmVxdWV1ZSk7CiAKIAl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCh3cml0ZXMpKSkgewotCQlzdGF0ZSA9IGRtX3JoX2dldF9zdGF0ZShtcy0+cmgsCi0JCQkJCWRtX3JoX2Jpb190b19yZWdpb24obXMtPnJoLCBiaW8pLCAxKTsKKwkJcmVnaW9uID0gZG1fcmhfYmlvX3RvX3JlZ2lvbihtcy0+cmgsIGJpbyk7CisKKwkJaWYgKGxvZy0+dHlwZS0+aXNfcmVtb3RlX3JlY292ZXJpbmcgJiYKKwkJICAgIGxvZy0+dHlwZS0+aXNfcmVtb3RlX3JlY292ZXJpbmcobG9nLCByZWdpb24pKSB7CisJCQliaW9fbGlzdF9hZGQoJnJlcXVldWUsIGJpbyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0YXRlID0gZG1fcmhfZ2V0X3N0YXRlKG1zLT5yaCwgcmVnaW9uLCAxKTsKIAkJc3dpdGNoIChzdGF0ZSkgewogCQljYXNlIERNX1JIX0NMRUFOOgogCQljYXNlIERNX1JIX0RJUlRZOgpAQCAtNjE5LDYgKzYzMiwxNiBAQAogCX0KIAogCS8qCisJICogQWRkIGJpb3MgdGhhdCBhcmUgZGVsYXllZCBkdWUgdG8gcmVtb3RlIHJlY292ZXJ5CisJICogYmFjayBvbiB0byB0aGUgd3JpdGUgcXVldWUKKwkgKi8KKwlpZiAodW5saWtlbHkocmVxdWV1ZS5oZWFkKSkgeworCQlzcGluX2xvY2tfaXJxKCZtcy0+bG9jayk7CisJCWJpb19saXN0X21lcmdlKCZtcy0+d3JpdGVzLCAmcmVxdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycSgmbXMtPmxvY2spOworCX0KKworCS8qCiAJICogSW5jcmVtZW50IHRoZSBwZW5kaW5nIGNvdW50cyBmb3IgYW55IHJlZ2lvbnMgdGhhdCB3aWxsCiAJICogYmUgd3JpdHRlbiB0byAod3JpdGVzIHRvIHJlY292ZXIgcmVnaW9ucyBhcmUgZ29pbmcgdG8KIAkgKiBiZSBkZWxheWVkKS4KQEAgLTc2NCw5ICs3ODcsOSBAQAogCWF0b21pY19zZXQoJm1zLT5zdXNwZW5kLCAwKTsKIAlhdG9taWNfc2V0KCZtcy0+ZGVmYXVsdF9taXJyb3IsIERFRkFVTFRfTUlSUk9SKTsKIAotCWxlbiA9IHNpemVvZihzdHJ1Y3QgZG1fcmFpZDFfcmVhZF9yZWNvcmQpOwotCW1zLT5yZWFkX3JlY29yZF9wb29sID0gbWVtcG9vbF9jcmVhdGVfa21hbGxvY19wb29sKE1JTl9SRUFEX1JFQ09SRFMsCi0JCQkJCQkJICAgbGVuKTsKKwltcy0+cmVhZF9yZWNvcmRfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNSU5fUkVBRF9SRUNPUkRTLAorCQkJCQkJX2RtX3JhaWQxX3JlYWRfcmVjb3JkX2NhY2hlKTsKKwogCWlmICghbXMtPnJlYWRfcmVjb3JkX3Bvb2wpIHsKIAkJdGktPmVycm9yID0gIkVycm9yIGNyZWF0aW5nIG1pcnJvciByZWFkX3JlY29yZF9wb29sIjsKIAkJa2ZyZWUobXMpOwpAQCAtMTI3OSwxNiArMTMwMiwzMSBAQAogewogCWludCByOwogCi0JciA9IGRtX3JlZ2lzdGVyX3RhcmdldCgmbWlycm9yX3RhcmdldCk7Ci0JaWYgKHIgPCAwKQotCQlETUVSUigiRmFpbGVkIHRvIHJlZ2lzdGVyIG1pcnJvciB0YXJnZXQiKTsKKwlfZG1fcmFpZDFfcmVhZF9yZWNvcmRfY2FjaGUgPSBLTUVNX0NBQ0hFKGRtX3JhaWQxX3JlYWRfcmVjb3JkLCAwKTsKKwlpZiAoIV9kbV9yYWlkMV9yZWFkX3JlY29yZF9jYWNoZSkgeworCQlETUVSUigiQ2FuJ3QgYWxsb2NhdGUgZG1fcmFpZDFfcmVhZF9yZWNvcmQgY2FjaGUiKTsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gYmFkX2NhY2hlOworCX0KIAorCXIgPSBkbV9yZWdpc3Rlcl90YXJnZXQoJm1pcnJvcl90YXJnZXQpOworCWlmIChyIDwgMCkgeworCQlETUVSUigiRmFpbGVkIHRvIHJlZ2lzdGVyIG1pcnJvciB0YXJnZXQiKTsKKwkJZ290byBiYWRfdGFyZ2V0OworCX0KKworCXJldHVybiAwOworCitiYWRfdGFyZ2V0OgorCWttZW1fY2FjaGVfZGVzdHJveShfZG1fcmFpZDFfcmVhZF9yZWNvcmRfY2FjaGUpOworYmFkX2NhY2hlOgogCXJldHVybiByOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZG1fbWlycm9yX2V4aXQodm9pZCkKIHsKIAlkbV91bnJlZ2lzdGVyX3RhcmdldCgmbWlycm9yX3RhcmdldCk7CisJa21lbV9jYWNoZV9kZXN0cm95KF9kbV9yYWlkMV9yZWFkX3JlY29yZF9jYWNoZSk7CiB9CiAKIC8qIE1vZHVsZSBob29rcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYyBiL2RyaXZlcnMvbWQvZG0tc25hcC1wZXJzaXN0ZW50LmMKaW5kZXggOTM2YjM0ZS4uZTc1YzZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLXBlcnNpc3RlbnQuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAtcGVyc2lzdGVudC5jCkBAIC02LDcgKzYsNiBAQAogICovCiAKICNpbmNsdWRlICJkbS1leGNlcHRpb24tc3RvcmUuaCIKLSNpbmNsdWRlICJkbS1zbmFwLmgiCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KQEAgLTg5LDcgKzg4LDcgQEAKICAqIFRoZSB0b3AgbGV2ZWwgc3RydWN0dXJlIGZvciBhIHBlcnNpc3RlbnQgZXhjZXB0aW9uIHN0b3JlLgogICovCiBzdHJ1Y3QgcHN0b3JlIHsKLQlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXA7CS8qIHVwIHBvaW50ZXIgdG8gbXkgc25hcHNob3QgKi8KKwlzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZTsKIAlpbnQgdmVyc2lvbjsKIAlpbnQgdmFsaWQ7CiAJdWludDMyX3QgZXhjZXB0aW9uc19wZXJfYXJlYTsKQEAgLTE0MSw3ICsxNDAsNyBAQAogCWludCByID0gLUVOT01FTTsKIAlzaXplX3QgbGVuOwogCi0JbGVuID0gcHMtPnNuYXAtPmNodW5rX3NpemUgPDwgU0VDVE9SX1NISUZUOworCWxlbiA9IHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSA8PCBTRUNUT1JfU0hJRlQ7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBjaHVua19zaXplIGJsb2NrIG9mIG1lbW9yeSB0aGF0IHdpbGwgaG9sZApAQCAtMTYzLDkgKzE2MiwxMiBAQAogCiBzdGF0aWMgdm9pZCBmcmVlX2FyZWEoc3RydWN0IHBzdG9yZSAqcHMpCiB7Ci0JdmZyZWUocHMtPmFyZWEpOworCWlmIChwcy0+YXJlYSkKKwkJdmZyZWUocHMtPmFyZWEpOwogCXBzLT5hcmVhID0gTlVMTDsKLQl2ZnJlZShwcy0+emVyb19hcmVhKTsKKworCWlmIChwcy0+emVyb19hcmVhKQorCQl2ZnJlZShwcy0+emVyb19hcmVhKTsKIAlwcy0+emVyb19hcmVhID0gTlVMTDsKIH0KIApAQCAtMTg5LDkgKzE5MSw5IEBACiBzdGF0aWMgaW50IGNodW5rX2lvKHN0cnVjdCBwc3RvcmUgKnBzLCBjaHVua190IGNodW5rLCBpbnQgcncsIGludCBtZXRhZGF0YSkKIHsKIAlzdHJ1Y3QgZG1faW9fcmVnaW9uIHdoZXJlID0gewotCQkuYmRldiA9IHBzLT5zbmFwLT5jb3ctPmJkZXYsCi0JCS5zZWN0b3IgPSBwcy0+c25hcC0+Y2h1bmtfc2l6ZSAqIGNodW5rLAotCQkuY291bnQgPSBwcy0+c25hcC0+Y2h1bmtfc2l6ZSwKKwkJLmJkZXYgPSBwcy0+c3RvcmUtPmNvdy0+YmRldiwKKwkJLnNlY3RvciA9IHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSAqIGNodW5rLAorCQkuY291bnQgPSBwcy0+c3RvcmUtPmNodW5rX3NpemUsCiAJfTsKIAlzdHJ1Y3QgZG1faW9fcmVxdWVzdCBpb19yZXEgPSB7CiAJCS5iaV9ydyA9IHJ3LApAQCAtMjQ3LDE1ICsyNDksMTUgQEAKIAogc3RhdGljIHZvaWQgemVyb19tZW1vcnlfYXJlYShzdHJ1Y3QgcHN0b3JlICpwcykKIHsKLQltZW1zZXQocHMtPmFyZWEsIDAsIHBzLT5zbmFwLT5jaHVua19zaXplIDw8IFNFQ1RPUl9TSElGVCk7CisJbWVtc2V0KHBzLT5hcmVhLCAwLCBwcy0+c3RvcmUtPmNodW5rX3NpemUgPDwgU0VDVE9SX1NISUZUKTsKIH0KIAogc3RhdGljIGludCB6ZXJvX2Rpc2tfYXJlYShzdHJ1Y3QgcHN0b3JlICpwcywgY2h1bmtfdCBhcmVhKQogewogCXN0cnVjdCBkbV9pb19yZWdpb24gd2hlcmUgPSB7Ci0JCS5iZGV2ID0gcHMtPnNuYXAtPmNvdy0+YmRldiwKLQkJLnNlY3RvciA9IHBzLT5zbmFwLT5jaHVua19zaXplICogYXJlYV9sb2NhdGlvbihwcywgYXJlYSksCi0JCS5jb3VudCA9IHBzLT5zbmFwLT5jaHVua19zaXplLAorCQkuYmRldiA9IHBzLT5zdG9yZS0+Y293LT5iZGV2LAorCQkuc2VjdG9yID0gcHMtPnN0b3JlLT5jaHVua19zaXplICogYXJlYV9sb2NhdGlvbihwcywgYXJlYSksCisJCS5jb3VudCA9IHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSwKIAl9OwogCXN0cnVjdCBkbV9pb19yZXF1ZXN0IGlvX3JlcSA9IHsKIAkJLmJpX3J3ID0gV1JJVEUsCkBAIC0yNzgsMTUgKzI4MCwxNSBAQAogCS8qCiAJICogVXNlIGRlZmF1bHQgY2h1bmsgc2l6ZSAob3IgaGFyZHNlY3Rfc2l6ZSwgaWYgbGFyZ2VyKSBpZiBub25lIHN1cHBsaWVkCiAJICovCi0JaWYgKCFwcy0+c25hcC0+Y2h1bmtfc2l6ZSkgewotCQlwcy0+c25hcC0+Y2h1bmtfc2l6ZSA9IG1heChETV9DSFVOS19TSVpFX0RFRkFVTFRfU0VDVE9SUywKLQkJICAgIGJkZXZfaGFyZHNlY3Rfc2l6ZShwcy0+c25hcC0+Y293LT5iZGV2KSA+PiA5KTsKLQkJcHMtPnNuYXAtPmNodW5rX21hc2sgPSBwcy0+c25hcC0+Y2h1bmtfc2l6ZSAtIDE7Ci0JCXBzLT5zbmFwLT5jaHVua19zaGlmdCA9IGZmcyhwcy0+c25hcC0+Y2h1bmtfc2l6ZSkgLSAxOworCWlmICghcHMtPnN0b3JlLT5jaHVua19zaXplKSB7CisJCXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSA9IG1heChETV9DSFVOS19TSVpFX0RFRkFVTFRfU0VDVE9SUywKKwkJICAgIGJkZXZfaGFyZHNlY3Rfc2l6ZShwcy0+c3RvcmUtPmNvdy0+YmRldikgPj4gOSk7CisJCXBzLT5zdG9yZS0+Y2h1bmtfbWFzayA9IHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSAtIDE7CisJCXBzLT5zdG9yZS0+Y2h1bmtfc2hpZnQgPSBmZnMocHMtPnN0b3JlLT5jaHVua19zaXplKSAtIDE7CiAJCWNodW5rX3NpemVfc3VwcGxpZWQgPSAwOwogCX0KIAotCXBzLT5pb19jbGllbnQgPSBkbV9pb19jbGllbnRfY3JlYXRlKHNlY3RvcnNfdG9fcGFnZXMocHMtPnNuYXAtPgorCXBzLT5pb19jbGllbnQgPSBkbV9pb19jbGllbnRfY3JlYXRlKHNlY3RvcnNfdG9fcGFnZXMocHMtPnN0b3JlLT4KIAkJCQkJCQkgICAgIGNodW5rX3NpemUpKTsKIAlpZiAoSVNfRVJSKHBzLT5pb19jbGllbnQpKQogCQlyZXR1cm4gUFRSX0VSUihwcy0+aW9fY2xpZW50KTsKQEAgLTMxNywyMiArMzE5LDIyIEBACiAJcHMtPnZlcnNpb24gPSBsZTMyX3RvX2NwdShkaC0+dmVyc2lvbik7CiAJY2h1bmtfc2l6ZSA9IGxlMzJfdG9fY3B1KGRoLT5jaHVua19zaXplKTsKIAotCWlmICghY2h1bmtfc2l6ZV9zdXBwbGllZCB8fCBwcy0+c25hcC0+Y2h1bmtfc2l6ZSA9PSBjaHVua19zaXplKQorCWlmICghY2h1bmtfc2l6ZV9zdXBwbGllZCB8fCBwcy0+c3RvcmUtPmNodW5rX3NpemUgPT0gY2h1bmtfc2l6ZSkKIAkJcmV0dXJuIDA7CiAKIAlETVdBUk4oImNodW5rIHNpemUgJWxsdSBpbiBkZXZpY2UgbWV0YWRhdGEgb3ZlcnJpZGVzICIKIAkgICAgICAgInRhYmxlIGNodW5rIHNpemUgb2YgJWxsdS4iLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWNodW5rX3NpemUsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcHMtPnNuYXAtPmNodW5rX3NpemUpOworCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSk7CiAKIAkvKiBXZSBoYWQgYSBib2d1cyBjaHVua19zaXplLiBGaXggc3R1ZmYgdXAuICovCiAJZnJlZV9hcmVhKHBzKTsKIAotCXBzLT5zbmFwLT5jaHVua19zaXplID0gY2h1bmtfc2l6ZTsKLQlwcy0+c25hcC0+Y2h1bmtfbWFzayA9IGNodW5rX3NpemUgLSAxOwotCXBzLT5zbmFwLT5jaHVua19zaGlmdCA9IGZmcyhjaHVua19zaXplKSAtIDE7CisJcHMtPnN0b3JlLT5jaHVua19zaXplID0gY2h1bmtfc2l6ZTsKKwlwcy0+c3RvcmUtPmNodW5rX21hc2sgPSBjaHVua19zaXplIC0gMTsKKwlwcy0+c3RvcmUtPmNodW5rX3NoaWZ0ID0gZmZzKGNodW5rX3NpemUpIC0gMTsKIAotCXIgPSBkbV9pb19jbGllbnRfcmVzaXplKHNlY3RvcnNfdG9fcGFnZXMocHMtPnNuYXAtPmNodW5rX3NpemUpLAorCXIgPSBkbV9pb19jbGllbnRfcmVzaXplKHNlY3RvcnNfdG9fcGFnZXMocHMtPnN0b3JlLT5jaHVua19zaXplKSwKIAkJCQlwcy0+aW9fY2xpZW50KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CkBAIC0zNDksMTMgKzM1MSwxMyBAQAogewogCXN0cnVjdCBkaXNrX2hlYWRlciAqZGg7CiAKLQltZW1zZXQocHMtPmFyZWEsIDAsIHBzLT5zbmFwLT5jaHVua19zaXplIDw8IFNFQ1RPUl9TSElGVCk7CisJbWVtc2V0KHBzLT5hcmVhLCAwLCBwcy0+c3RvcmUtPmNodW5rX3NpemUgPDwgU0VDVE9SX1NISUZUKTsKIAogCWRoID0gKHN0cnVjdCBkaXNrX2hlYWRlciAqKSBwcy0+YXJlYTsKIAlkaC0+bWFnaWMgPSBjcHVfdG9fbGUzMihTTkFQX01BR0lDKTsKIAlkaC0+dmFsaWQgPSBjcHVfdG9fbGUzMihwcy0+dmFsaWQpOwogCWRoLT52ZXJzaW9uID0gY3B1X3RvX2xlMzIocHMtPnZlcnNpb24pOwotCWRoLT5jaHVua19zaXplID0gY3B1X3RvX2xlMzIocHMtPnNuYXAtPmNodW5rX3NpemUpOworCWRoLT5jaHVua19zaXplID0gY3B1X3RvX2xlMzIocHMtPnN0b3JlLT5jaHVua19zaXplKTsKIAogCXJldHVybiBjaHVua19pbyhwcywgMCwgV1JJVEUsIDEpOwogfQpAQCAtNDc0LDE4ICs0NzYsMjUgQEAKIHN0YXRpYyB2b2lkIHBlcnNpc3RlbnRfZnJhY3Rpb25fZnVsbChzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKIAkJCQkgICAgIHNlY3Rvcl90ICpudW1lcmF0b3IsIHNlY3Rvcl90ICpkZW5vbWluYXRvcikKIHsKLQkqbnVtZXJhdG9yID0gZ2V0X2luZm8oc3RvcmUpLT5uZXh0X2ZyZWUgKiBzdG9yZS0+c25hcC0+Y2h1bmtfc2l6ZTsKLQkqZGVub21pbmF0b3IgPSBnZXRfZGV2X3NpemUoc3RvcmUtPnNuYXAtPmNvdy0+YmRldik7CisJKm51bWVyYXRvciA9IGdldF9pbmZvKHN0b3JlKS0+bmV4dF9mcmVlICogc3RvcmUtPmNodW5rX3NpemU7CisJKmRlbm9taW5hdG9yID0gZ2V0X2Rldl9zaXplKHN0b3JlLT5jb3ctPmJkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBwZXJzaXN0ZW50X2Rlc3Ryb3koc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpCitzdGF0aWMgdm9pZCBwZXJzaXN0ZW50X2R0cihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSkKIHsKIAlzdHJ1Y3QgcHN0b3JlICpwcyA9IGdldF9pbmZvKHN0b3JlKTsKIAogCWRlc3Ryb3lfd29ya3F1ZXVlKHBzLT5tZXRhZGF0YV93cSk7Ci0JZG1faW9fY2xpZW50X2Rlc3Ryb3kocHMtPmlvX2NsaWVudCk7Ci0JdmZyZWUocHMtPmNhbGxiYWNrcyk7CisKKwkvKiBDcmVhdGVkIGluIHJlYWRfaGVhZGVyICovCisJaWYgKHBzLT5pb19jbGllbnQpCisJCWRtX2lvX2NsaWVudF9kZXN0cm95KHBzLT5pb19jbGllbnQpOwogCWZyZWVfYXJlYShwcyk7CisKKwkvKiBBbGxvY2F0ZWQgaW4gcGVyc2lzdGVudF9yZWFkX21ldGFkYXRhICovCisJaWYgKHBzLT5jYWxsYmFja3MpCisJCXZmcmVlKHBzLT5jYWxsYmFja3MpOworCiAJa2ZyZWUocHMpOwogfQogCkBAIC01MDcsNyArNTE2LDcgQEAKIAkvKgogCSAqIE5vdyB3ZSBrbm93IGNvcnJlY3QgY2h1bmtfc2l6ZSwgY29tcGxldGUgdGhlIGluaXRpYWxpc2F0aW9uLgogCSAqLwotCXBzLT5leGNlcHRpb25zX3Blcl9hcmVhID0gKHBzLT5zbmFwLT5jaHVua19zaXplIDw8IFNFQ1RPUl9TSElGVCkgLworCXBzLT5leGNlcHRpb25zX3Blcl9hcmVhID0gKHBzLT5zdG9yZS0+Y2h1bmtfc2l6ZSA8PCBTRUNUT1JfU0hJRlQpIC8KIAkJCQkgIHNpemVvZihzdHJ1Y3QgZGlza19leGNlcHRpb24pOwogCXBzLT5jYWxsYmFja3MgPSBkbV92Y2FsbG9jKHBzLT5leGNlcHRpb25zX3Blcl9hcmVhLAogCQkJc2l6ZW9mKCpwcy0+Y2FsbGJhY2tzKSk7CkBAIC01NjQsMTAgKzU3MywxMCBAQAogCXN0cnVjdCBwc3RvcmUgKnBzID0gZ2V0X2luZm8oc3RvcmUpOwogCXVpbnQzMl90IHN0cmlkZTsKIAljaHVua190IG5leHRfZnJlZTsKLQlzZWN0b3JfdCBzaXplID0gZ2V0X2Rldl9zaXplKHN0b3JlLT5zbmFwLT5jb3ctPmJkZXYpOworCXNlY3Rvcl90IHNpemUgPSBnZXRfZGV2X3NpemUoc3RvcmUtPmNvdy0+YmRldik7CiAKIAkvKiBJcyB0aGVyZSBlbm91Z2ggcm9vbSA/ICovCi0JaWYgKHNpemUgPCAoKHBzLT5uZXh0X2ZyZWUgKyAxKSAqIHN0b3JlLT5zbmFwLT5jaHVua19zaXplKSkKKwlpZiAoc2l6ZSA8ICgocHMtPm5leHRfZnJlZSArIDEpICogc3RvcmUtPmNodW5rX3NpemUpKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCWUtPm5ld19jaHVuayA9IHBzLT5uZXh0X2ZyZWU7CkBAIC02NTYsMTYgKzY2NSwxNyBAQAogCQlETVdBUk4oIndyaXRlIGhlYWRlciBmYWlsZWQiKTsKIH0KIAotaW50IGRtX2NyZWF0ZV9wZXJzaXN0ZW50KHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKQorc3RhdGljIGludCBwZXJzaXN0ZW50X2N0cihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKKwkJCSAgdW5zaWduZWQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAJc3RydWN0IHBzdG9yZSAqcHM7CiAKIAkvKiBhbGxvY2F0ZSB0aGUgcHN0b3JlICovCi0JcHMgPSBrbWFsbG9jKHNpemVvZigqcHMpLCBHRlBfS0VSTkVMKTsKKwlwcyA9IGt6YWxsb2Moc2l6ZW9mKCpwcyksIEdGUF9LRVJORUwpOwogCWlmICghcHMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcHMtPnNuYXAgPSBzdG9yZS0+c25hcDsKKwlwcy0+c3RvcmUgPSBzdG9yZTsKIAlwcy0+dmFsaWQgPSAxOwogCXBzLT52ZXJzaW9uID0gU05BUFNIT1RfRElTS19WRVJTSU9OOwogCXBzLT5hcmVhID0gTlVMTDsKQEAgLTY4MywyMiArNjkzLDc3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXN0b3JlLT5kZXN0cm95ID0gcGVyc2lzdGVudF9kZXN0cm95OwotCXN0b3JlLT5yZWFkX21ldGFkYXRhID0gcGVyc2lzdGVudF9yZWFkX21ldGFkYXRhOwotCXN0b3JlLT5wcmVwYXJlX2V4Y2VwdGlvbiA9IHBlcnNpc3RlbnRfcHJlcGFyZV9leGNlcHRpb247Ci0Jc3RvcmUtPmNvbW1pdF9leGNlcHRpb24gPSBwZXJzaXN0ZW50X2NvbW1pdF9leGNlcHRpb247Ci0Jc3RvcmUtPmRyb3Bfc25hcHNob3QgPSBwZXJzaXN0ZW50X2Ryb3Bfc25hcHNob3Q7Ci0Jc3RvcmUtPmZyYWN0aW9uX2Z1bGwgPSBwZXJzaXN0ZW50X2ZyYWN0aW9uX2Z1bGw7CiAJc3RvcmUtPmNvbnRleHQgPSBwczsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdW5zaWduZWQgcGVyc2lzdGVudF9zdGF0dXMoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUsCisJCQkJICBzdGF0dXNfdHlwZV90IHN0YXR1cywgY2hhciAqcmVzdWx0LAorCQkJCSAgdW5zaWduZWQgbWF4bGVuKQoreworCXVuc2lnbmVkIHN6ID0gMDsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBTVEFUVVNUWVBFX0lORk86CisJCWJyZWFrOworCWNhc2UgU1RBVFVTVFlQRV9UQUJMRToKKwkJRE1FTUlUKCIgJXMgUCAlbGx1Iiwgc3RvcmUtPmNvdy0+bmFtZSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc3RvcmUtPmNodW5rX3NpemUpOworCX0KKworCXJldHVybiBzejsKK30KKworc3RhdGljIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSBfcGVyc2lzdGVudF90eXBlID0geworCS5uYW1lID0gInBlcnNpc3RlbnQiLAorCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkuY3RyID0gcGVyc2lzdGVudF9jdHIsCisJLmR0ciA9IHBlcnNpc3RlbnRfZHRyLAorCS5yZWFkX21ldGFkYXRhID0gcGVyc2lzdGVudF9yZWFkX21ldGFkYXRhLAorCS5wcmVwYXJlX2V4Y2VwdGlvbiA9IHBlcnNpc3RlbnRfcHJlcGFyZV9leGNlcHRpb24sCisJLmNvbW1pdF9leGNlcHRpb24gPSBwZXJzaXN0ZW50X2NvbW1pdF9leGNlcHRpb24sCisJLmRyb3Bfc25hcHNob3QgPSBwZXJzaXN0ZW50X2Ryb3Bfc25hcHNob3QsCisJLmZyYWN0aW9uX2Z1bGwgPSBwZXJzaXN0ZW50X2ZyYWN0aW9uX2Z1bGwsCisJLnN0YXR1cyA9IHBlcnNpc3RlbnRfc3RhdHVzLAorfTsKKworc3RhdGljIHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmVfdHlwZSBfcGVyc2lzdGVudF9jb21wYXRfdHlwZSA9IHsKKwkubmFtZSA9ICJQIiwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLmN0ciA9IHBlcnNpc3RlbnRfY3RyLAorCS5kdHIgPSBwZXJzaXN0ZW50X2R0ciwKKwkucmVhZF9tZXRhZGF0YSA9IHBlcnNpc3RlbnRfcmVhZF9tZXRhZGF0YSwKKwkucHJlcGFyZV9leGNlcHRpb24gPSBwZXJzaXN0ZW50X3ByZXBhcmVfZXhjZXB0aW9uLAorCS5jb21taXRfZXhjZXB0aW9uID0gcGVyc2lzdGVudF9jb21taXRfZXhjZXB0aW9uLAorCS5kcm9wX3NuYXBzaG90ID0gcGVyc2lzdGVudF9kcm9wX3NuYXBzaG90LAorCS5mcmFjdGlvbl9mdWxsID0gcGVyc2lzdGVudF9mcmFjdGlvbl9mdWxsLAorCS5zdGF0dXMgPSBwZXJzaXN0ZW50X3N0YXR1cywKK307CisKIGludCBkbV9wZXJzaXN0ZW50X3NuYXBzaG90X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gMDsKKwlpbnQgcjsKKworCXIgPSBkbV9leGNlcHRpb25fc3RvcmVfdHlwZV9yZWdpc3RlcigmX3BlcnNpc3RlbnRfdHlwZSk7CisJaWYgKHIpIHsKKwkJRE1FUlIoIlVuYWJsZSB0byByZWdpc3RlciBwZXJzaXN0ZW50IGV4Y2VwdGlvbiBzdG9yZSB0eXBlIik7CisJCXJldHVybiByOworCX0KKworCXIgPSBkbV9leGNlcHRpb25fc3RvcmVfdHlwZV9yZWdpc3RlcigmX3BlcnNpc3RlbnRfY29tcGF0X3R5cGUpOworCWlmIChyKSB7CisJCURNRVJSKCJVbmFibGUgdG8gcmVnaXN0ZXIgb2xkLXN0eWxlIHBlcnNpc3RlbnQgZXhjZXB0aW9uICIKKwkJICAgICAgInN0b3JlIHR5cGUiKTsKKwkJZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3RlcigmX3BlcnNpc3RlbnRfdHlwZSk7CisJCXJldHVybiByOworCX0KKworCXJldHVybiByOwogfQogCiB2b2lkIGRtX3BlcnNpc3RlbnRfc25hcHNob3RfZXhpdCh2b2lkKQogeworCWRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoJl9wZXJzaXN0ZW50X3R5cGUpOworCWRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoJl9wZXJzaXN0ZW50X2NvbXBhdF90eXBlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC10cmFuc2llbnQuYyBiL2RyaXZlcnMvbWQvZG0tc25hcC10cmFuc2llbnQuYwppbmRleCA3ZjZlMmU2Li5jZGU1YWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAtdHJhbnNpZW50LmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLXRyYW5zaWVudC5jCkBAIC02LDcgKzYsNiBAQAogICovCiAKICNpbmNsdWRlICJkbS1leGNlcHRpb24tc3RvcmUuaCIKLSNpbmNsdWRlICJkbS1zbmFwLmgiCiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KQEAgLTIzLDcgKzIyLDcgQEAKIAlzZWN0b3JfdCBuZXh0X2ZyZWU7CiB9OwogCi1zdGF0aWMgdm9pZCB0cmFuc2llbnRfZGVzdHJveShzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSkKK3N0YXRpYyB2b2lkIHRyYW5zaWVudF9kdHIoc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmUpCiB7CiAJa2ZyZWUoc3RvcmUtPmNvbnRleHQpOwogfQpAQCAtMzksMTQgKzM4LDE0IEBACiBzdGF0aWMgaW50IHRyYW5zaWVudF9wcmVwYXJlX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlICpzdG9yZSwKIAkJCQkgICAgICAgc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplKQogewotCXN0cnVjdCB0cmFuc2llbnRfYyAqdGMgPSAoc3RydWN0IHRyYW5zaWVudF9jICopIHN0b3JlLT5jb250ZXh0OwotCXNlY3Rvcl90IHNpemUgPSBnZXRfZGV2X3NpemUoc3RvcmUtPnNuYXAtPmNvdy0+YmRldik7CisJc3RydWN0IHRyYW5zaWVudF9jICp0YyA9IHN0b3JlLT5jb250ZXh0OworCXNlY3Rvcl90IHNpemUgPSBnZXRfZGV2X3NpemUoc3RvcmUtPmNvdy0+YmRldik7CiAKLQlpZiAoc2l6ZSA8ICh0Yy0+bmV4dF9mcmVlICsgc3RvcmUtPnNuYXAtPmNodW5rX3NpemUpKQorCWlmIChzaXplIDwgKHRjLT5uZXh0X2ZyZWUgKyBzdG9yZS0+Y2h1bmtfc2l6ZSkpCiAJCXJldHVybiAtMTsKIAotCWUtPm5ld19jaHVuayA9IHNlY3Rvcl90b19jaHVuayhzdG9yZS0+c25hcCwgdGMtPm5leHRfZnJlZSk7Ci0JdGMtPm5leHRfZnJlZSArPSBzdG9yZS0+c25hcC0+Y2h1bmtfc2l6ZTsKKwllLT5uZXdfY2h1bmsgPSBzZWN0b3JfdG9fY2h1bmsoc3RvcmUsIHRjLT5uZXh0X2ZyZWUpOworCXRjLT5uZXh0X2ZyZWUgKz0gc3RvcmUtPmNodW5rX3NpemU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY0LDIwICs2MywxNCBAQAogCQkJCSAgICBzZWN0b3JfdCAqbnVtZXJhdG9yLCBzZWN0b3JfdCAqZGVub21pbmF0b3IpCiB7CiAJKm51bWVyYXRvciA9ICgoc3RydWN0IHRyYW5zaWVudF9jICopIHN0b3JlLT5jb250ZXh0KS0+bmV4dF9mcmVlOwotCSpkZW5vbWluYXRvciA9IGdldF9kZXZfc2l6ZShzdG9yZS0+c25hcC0+Y293LT5iZGV2KTsKKwkqZGVub21pbmF0b3IgPSBnZXRfZGV2X3NpemUoc3RvcmUtPmNvdy0+YmRldik7CiB9CiAKLWludCBkbV9jcmVhdGVfdHJhbnNpZW50KHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlKQorc3RhdGljIGludCB0cmFuc2llbnRfY3RyKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAorCQkJIHVuc2lnbmVkIGFyZ2MsIGNoYXIgKiphcmd2KQogewogCXN0cnVjdCB0cmFuc2llbnRfYyAqdGM7CiAKLQlzdG9yZS0+ZGVzdHJveSA9IHRyYW5zaWVudF9kZXN0cm95OwotCXN0b3JlLT5yZWFkX21ldGFkYXRhID0gdHJhbnNpZW50X3JlYWRfbWV0YWRhdGE7Ci0Jc3RvcmUtPnByZXBhcmVfZXhjZXB0aW9uID0gdHJhbnNpZW50X3ByZXBhcmVfZXhjZXB0aW9uOwotCXN0b3JlLT5jb21taXRfZXhjZXB0aW9uID0gdHJhbnNpZW50X2NvbW1pdF9leGNlcHRpb247Ci0Jc3RvcmUtPmRyb3Bfc25hcHNob3QgPSBOVUxMOwotCXN0b3JlLT5mcmFjdGlvbl9mdWxsID0gdHJhbnNpZW50X2ZyYWN0aW9uX2Z1bGw7Ci0KIAl0YyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0cmFuc2llbnRfYyksIEdGUF9LRVJORUwpOwogCWlmICghdGMpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtODgsMTEgKzgxLDcwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCB0cmFuc2llbnRfc3RhdHVzKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAorCQkJCSBzdGF0dXNfdHlwZV90IHN0YXR1cywgY2hhciAqcmVzdWx0LAorCQkJCSB1bnNpZ25lZCBtYXhsZW4pCit7CisJdW5zaWduZWQgc3ogPSAwOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIFNUQVRVU1RZUEVfSU5GTzoKKwkJYnJlYWs7CisJY2FzZSBTVEFUVVNUWVBFX1RBQkxFOgorCQlETUVNSVQoIiAlcyBOICVsbHUiLCBzdG9yZS0+Y293LT5uYW1lLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzdG9yZS0+Y2h1bmtfc2l6ZSk7CisJfQorCisJcmV0dXJuIHN6OworfQorCitzdGF0aWMgc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlIF90cmFuc2llbnRfdHlwZSA9IHsKKwkubmFtZSA9ICJ0cmFuc2llbnQiLAorCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkuY3RyID0gdHJhbnNpZW50X2N0ciwKKwkuZHRyID0gdHJhbnNpZW50X2R0ciwKKwkucmVhZF9tZXRhZGF0YSA9IHRyYW5zaWVudF9yZWFkX21ldGFkYXRhLAorCS5wcmVwYXJlX2V4Y2VwdGlvbiA9IHRyYW5zaWVudF9wcmVwYXJlX2V4Y2VwdGlvbiwKKwkuY29tbWl0X2V4Y2VwdGlvbiA9IHRyYW5zaWVudF9jb21taXRfZXhjZXB0aW9uLAorCS5mcmFjdGlvbl9mdWxsID0gdHJhbnNpZW50X2ZyYWN0aW9uX2Z1bGwsCisJLnN0YXR1cyA9IHRyYW5zaWVudF9zdGF0dXMsCit9OworCitzdGF0aWMgc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlIF90cmFuc2llbnRfY29tcGF0X3R5cGUgPSB7CisJLm5hbWUgPSAiTiIsCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5jdHIgPSB0cmFuc2llbnRfY3RyLAorCS5kdHIgPSB0cmFuc2llbnRfZHRyLAorCS5yZWFkX21ldGFkYXRhID0gdHJhbnNpZW50X3JlYWRfbWV0YWRhdGEsCisJLnByZXBhcmVfZXhjZXB0aW9uID0gdHJhbnNpZW50X3ByZXBhcmVfZXhjZXB0aW9uLAorCS5jb21taXRfZXhjZXB0aW9uID0gdHJhbnNpZW50X2NvbW1pdF9leGNlcHRpb24sCisJLmZyYWN0aW9uX2Z1bGwgPSB0cmFuc2llbnRfZnJhY3Rpb25fZnVsbCwKKwkuc3RhdHVzID0gdHJhbnNpZW50X3N0YXR1cywKK307CisKIGludCBkbV90cmFuc2llbnRfc25hcHNob3RfaW5pdCh2b2lkKQogewotCXJldHVybiAwOworCWludCByOworCisJciA9IGRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3JlZ2lzdGVyKCZfdHJhbnNpZW50X3R5cGUpOworCWlmIChyKSB7CisJCURNV0FSTigiVW5hYmxlIHRvIHJlZ2lzdGVyIHRyYW5zaWVudCBleGNlcHRpb24gc3RvcmUgdHlwZSIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlyID0gZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfcmVnaXN0ZXIoJl90cmFuc2llbnRfY29tcGF0X3R5cGUpOworCWlmIChyKSB7CisJCURNV0FSTigiVW5hYmxlIHRvIHJlZ2lzdGVyIG9sZC1zdHlsZSB0cmFuc2llbnQgIgorCQkgICAgICAgImV4Y2VwdGlvbiBzdG9yZSB0eXBlIik7CisJCWRtX2V4Y2VwdGlvbl9zdG9yZV90eXBlX3VucmVnaXN0ZXIoJl90cmFuc2llbnRfdHlwZSk7CisJCXJldHVybiByOworCX0KKworCXJldHVybiByOwogfQogCiB2b2lkIGRtX3RyYW5zaWVudF9zbmFwc2hvdF9leGl0KHZvaWQpCiB7CisJZG1fZXhjZXB0aW9uX3N0b3JlX3R5cGVfdW5yZWdpc3RlcigmX3RyYW5zaWVudF90eXBlKTsKKwlkbV9leGNlcHRpb25fc3RvcmVfdHlwZV91bnJlZ2lzdGVyKCZfdHJhbnNpZW50X2NvbXBhdF90eXBlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc25hcC5jIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKaW5kZXggNjVmZjgyZi4uOTgxYTA0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zbmFwLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zbmFwLmMKQEAgLTcsNyArNyw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLW1hcHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTIwLDkgKzE5LDkgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtLWtjb3B5ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSAiZG0tZXhjZXB0aW9uLXN0b3JlLmgiCi0jaW5jbHVkZSAiZG0tc25hcC5oIgogI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCiAKICNkZWZpbmUgRE1fTVNHX1BSRUZJWCAic25hcHNob3RzIgpAQCAtNDcsOSArNDYsNzYgQEAKICAqLwogI2RlZmluZSBNSU5fSU9TIDI1NgogCisjZGVmaW5lIERNX1RSQUNLRURfQ0hVTktfSEFTSF9TSVpFCTE2CisjZGVmaW5lIERNX1RSQUNLRURfQ0hVTktfSEFTSCh4KQkoKHVuc2lnbmVkIGxvbmcpKHgpICYgXAorCQkJCQkgKERNX1RSQUNLRURfQ0hVTktfSEFTSF9TSVpFIC0gMSkpCisKK3N0cnVjdCBleGNlcHRpb25fdGFibGUgeworCXVpbnQzMl90IGhhc2hfbWFzazsKKwl1bnNpZ25lZCBoYXNoX3NoaWZ0OworCXN0cnVjdCBsaXN0X2hlYWQgKnRhYmxlOworfTsKKworc3RydWN0IGRtX3NuYXBzaG90IHsKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIGxvY2s7CisKKwlzdHJ1Y3QgZG1fZGV2ICpvcmlnaW47CisKKwkvKiBMaXN0IG9mIHNuYXBzaG90cyBwZXIgT3JpZ2luICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyogWW91IGNhbid0IHVzZSBhIHNuYXBzaG90IGlmIHRoaXMgaXMgMCAoZS5nLiBpZiBmdWxsKSAqLworCWludCB2YWxpZDsKKworCS8qIE9yaWdpbiB3cml0ZXMgZG9uJ3QgdHJpZ2dlciBleGNlcHRpb25zIHVudGlsIHRoaXMgaXMgc2V0ICovCisJaW50IGFjdGl2ZTsKKworCW1lbXBvb2xfdCAqcGVuZGluZ19wb29sOworCisJYXRvbWljX3QgcGVuZGluZ19leGNlcHRpb25zX2NvdW50OworCisJc3RydWN0IGV4Y2VwdGlvbl90YWJsZSBwZW5kaW5nOworCXN0cnVjdCBleGNlcHRpb25fdGFibGUgY29tcGxldGU7CisKKwkvKgorCSAqIHBlX2xvY2sgcHJvdGVjdHMgYWxsIHBlbmRpbmdfZXhjZXB0aW9uIG9wZXJhdGlvbnMgYW5kIGFjY2VzcworCSAqIGFzIHdlbGwgYXMgdGhlIHNuYXBzaG90X2Jpb3MgbGlzdC4KKwkgKi8KKwlzcGlubG9ja190IHBlX2xvY2s7CisKKwkvKiBUaGUgb24gZGlzayBtZXRhZGF0YSBoYW5kbGVyICovCisJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmU7CisKKwlzdHJ1Y3QgZG1fa2NvcHlkX2NsaWVudCAqa2NvcHlkX2NsaWVudDsKKworCS8qIFF1ZXVlIG9mIHNuYXBzaG90IHdyaXRlcyBmb3Iga3NuYXBkIHRvIGZsdXNoICovCisJc3RydWN0IGJpb19saXN0IHF1ZXVlZF9iaW9zOworCXN0cnVjdCB3b3JrX3N0cnVjdCBxdWV1ZWRfYmlvc193b3JrOworCisJLyogQ2h1bmtzIHdpdGggb3V0c3RhbmRpbmcgcmVhZHMgKi8KKwltZW1wb29sX3QgKnRyYWNrZWRfY2h1bmtfcG9vbDsKKwlzcGlubG9ja190IHRyYWNrZWRfY2h1bmtfbG9jazsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCB0cmFja2VkX2NodW5rX2hhc2hbRE1fVFJBQ0tFRF9DSFVOS19IQVNIX1NJWkVdOworfTsKKwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprc25hcGQ7CiBzdGF0aWMgdm9pZCBmbHVzaF9xdWV1ZWRfYmlvcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCitzdGF0aWMgc2VjdG9yX3QgY2h1bmtfdG9fc2VjdG9yKHN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlLAorCQkJCWNodW5rX3QgY2h1bmspCit7CisJcmV0dXJuIGNodW5rIDw8IHN0b3JlLT5jaHVua19zaGlmdDsKK30KKworc3RhdGljIGludCBiZGV2X2VxdWFsKHN0cnVjdCBibG9ja19kZXZpY2UgKmxocywgc3RydWN0IGJsb2NrX2RldmljZSAqcmhzKQoreworCS8qCisJICogVGhlcmUgaXMgb25seSBldmVyIG9uZSBpbnN0YW5jZSBvZiBhIHBhcnRpY3VsYXIgYmxvY2sKKwkgKiBkZXZpY2Ugc28gd2UgY2FuIGNvbXBhcmUgcG9pbnRlcnMgc2FmZWx5LgorCSAqLworCXJldHVybiBsaHMgPT0gcmhzOworfQorCiBzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiB7CiAJc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uIGU7CiAKQEAgLTQ3NiwxMSArNTQyLDExIEBACiAJICogQ2FsY3VsYXRlIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBvcmlnaW5hbCB2b2x1bWUgb3IKIAkgKiB0aGUgQ09XIHZvbHVtZS4uLgogCSAqLwotCWNvd19kZXZfc2l6ZSA9IGdldF9kZXZfc2l6ZShzLT5jb3ctPmJkZXYpOworCWNvd19kZXZfc2l6ZSA9IGdldF9kZXZfc2l6ZShzLT5zdG9yZS0+Y293LT5iZGV2KTsKIAlvcmlnaW5fZGV2X3NpemUgPSBnZXRfZGV2X3NpemUocy0+b3JpZ2luLT5iZGV2KTsKIAltYXhfYnVja2V0cyA9IGNhbGNfbWF4X2J1Y2tldHMoKTsKIAotCWhhc2hfc2l6ZSA9IG1pbihvcmlnaW5fZGV2X3NpemUsIGNvd19kZXZfc2l6ZSkgPj4gcy0+Y2h1bmtfc2hpZnQ7CisJaGFzaF9zaXplID0gbWluKG9yaWdpbl9kZXZfc2l6ZSwgY293X2Rldl9zaXplKSA+PiBzLT5zdG9yZS0+Y2h1bmtfc2hpZnQ7CiAJaGFzaF9zaXplID0gbWluKGhhc2hfc2l6ZSwgbWF4X2J1Y2tldHMpOwogCiAJaGFzaF9zaXplID0gcm91bmRkb3duX3Bvd19vZl90d28oaGFzaF9zaXplKTsKQEAgLTUwNSw1OCArNTcxLDYgQEAKIH0KIAogLyoKLSAqIFJvdW5kIGEgbnVtYmVyIHVwIHRvIHRoZSBuZWFyZXN0ICdzaXplJyBib3VuZGFyeS4gIHNpemUgbXVzdAotICogYmUgYSBwb3dlciBvZiAyLgotICovCi1zdGF0aWMgdWxvbmcgcm91bmRfdXAodWxvbmcgbiwgdWxvbmcgc2l6ZSkKLXsKLQlzaXplLS07Ci0JcmV0dXJuIChuICsgc2l6ZSkgJiB+c2l6ZTsKLX0KLQotc3RhdGljIGludCBzZXRfY2h1bmtfc2l6ZShzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIGNvbnN0IGNoYXIgKmNodW5rX3NpemVfYXJnLAotCQkJICBjaGFyICoqZXJyb3IpCi17Ci0JdW5zaWduZWQgbG9uZyBjaHVua19zaXplOwotCWNoYXIgKnZhbHVlOwotCi0JY2h1bmtfc2l6ZSA9IHNpbXBsZV9zdHJ0b3VsKGNodW5rX3NpemVfYXJnLCAmdmFsdWUsIDEwKTsKLQlpZiAoKmNodW5rX3NpemVfYXJnID09ICdcMCcgfHwgKnZhbHVlICE9ICdcMCcpIHsKLQkJKmVycm9yID0gIkludmFsaWQgY2h1bmsgc2l6ZSI7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghY2h1bmtfc2l6ZSkgewotCQlzLT5jaHVua19zaXplID0gcy0+Y2h1bmtfbWFzayA9IHMtPmNodW5rX3NoaWZ0ID0gMDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBDaHVuayBzaXplIG11c3QgYmUgbXVsdGlwbGUgb2YgcGFnZSBzaXplLiAgU2lsZW50bHkKLQkgKiByb3VuZCB1cCBpZiBpdCdzIG5vdC4KLQkgKi8KLQljaHVua19zaXplID0gcm91bmRfdXAoY2h1bmtfc2l6ZSwgUEFHRV9TSVpFID4+IDkpOwotCi0JLyogQ2hlY2sgY2h1bmtfc2l6ZSBpcyBhIHBvd2VyIG9mIDIgKi8KLQlpZiAoIWlzX3Bvd2VyX29mXzIoY2h1bmtfc2l6ZSkpIHsKLQkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgMiI7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFZhbGlkYXRlIHRoZSBjaHVuayBzaXplIGFnYWluc3QgdGhlIGRldmljZSBibG9jayBzaXplICovCi0JaWYgKGNodW5rX3NpemUgJSAoYmRldl9oYXJkc2VjdF9zaXplKHMtPmNvdy0+YmRldikgPj4gOSkpIHsKLQkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgbXVsdGlwbGUgb2YgZGV2aWNlIGJsb2Nrc2l6ZSI7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXMtPmNodW5rX3NpemUgPSBjaHVua19zaXplOwotCXMtPmNodW5rX21hc2sgPSBjaHVua19zaXplIC0gMTsKLQlzLT5jaHVua19zaGlmdCA9IGZmcyhjaHVua19zaXplKSAtIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIENvbnN0cnVjdCBhIHNuYXBzaG90IG1hcHBpbmc6IDxvcmlnaW5fZGV2PiA8Q09XLWRldj4gPHAvbj4gPGNodW5rLXNpemU+CiAgKi8KIHN0YXRpYyBpbnQgc25hcHNob3RfY3RyKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCkBAIC01NjQsOTEgKzU3OCw2OCBAQAogCXN0cnVjdCBkbV9zbmFwc2hvdCAqczsKIAlpbnQgaTsKIAlpbnQgciA9IC1FSU5WQUw7Ci0JY2hhciBwZXJzaXN0ZW50OwogCWNoYXIgKm9yaWdpbl9wYXRoOwotCWNoYXIgKmNvd19wYXRoOworCXN0cnVjdCBkbV9leGNlcHRpb25fc3RvcmUgKnN0b3JlOworCXVuc2lnbmVkIGFyZ3NfdXNlZDsKIAogCWlmIChhcmdjICE9IDQpIHsKIAkJdGktPmVycm9yID0gInJlcXVpcmVzIGV4YWN0bHkgNCBhcmd1bWVudHMiOwogCQlyID0gLUVJTlZBTDsKLQkJZ290byBiYWQxOworCQlnb3RvIGJhZF9hcmdzOwogCX0KIAogCW9yaWdpbl9wYXRoID0gYXJndlswXTsKLQljb3dfcGF0aCA9IGFyZ3ZbMV07Ci0JcGVyc2lzdGVudCA9IHRvdXBwZXIoKmFyZ3ZbMl0pOworCWFyZ3YrKzsKKwlhcmdjLS07CiAKLQlpZiAocGVyc2lzdGVudCAhPSAnUCcgJiYgcGVyc2lzdGVudCAhPSAnTicpIHsKLQkJdGktPmVycm9yID0gIlBlcnNpc3RlbnQgZmxhZyBpcyBub3QgUCBvciBOIjsKKwlyID0gZG1fZXhjZXB0aW9uX3N0b3JlX2NyZWF0ZSh0aSwgYXJnYywgYXJndiwgJmFyZ3NfdXNlZCwgJnN0b3JlKTsKKwlpZiAocikgeworCQl0aS0+ZXJyb3IgPSAiQ291bGRuJ3QgY3JlYXRlIGV4Y2VwdGlvbiBzdG9yZSI7CiAJCXIgPSAtRUlOVkFMOwotCQlnb3RvIGJhZDE7CisJCWdvdG8gYmFkX2FyZ3M7CiAJfQogCisJYXJndiArPSBhcmdzX3VzZWQ7CisJYXJnYyAtPSBhcmdzX3VzZWQ7CisKIAlzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAocyA9PSBOVUxMKSB7CisJaWYgKCFzKSB7CiAJCXRpLT5lcnJvciA9ICJDYW5ub3QgYWxsb2NhdGUgc25hcHNob3QgY29udGV4dCBwcml2YXRlICIKIAkJICAgICJzdHJ1Y3R1cmUiOwogCQlyID0gLUVOT01FTTsKLQkJZ290byBiYWQxOworCQlnb3RvIGJhZF9zbmFwOwogCX0KIAogCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBvcmlnaW5fcGF0aCwgMCwgdGktPmxlbiwgRk1PREVfUkVBRCwgJnMtPm9yaWdpbik7CiAJaWYgKHIpIHsKIAkJdGktPmVycm9yID0gIkNhbm5vdCBnZXQgb3JpZ2luIGRldmljZSI7Ci0JCWdvdG8gYmFkMjsKKwkJZ290byBiYWRfb3JpZ2luOwogCX0KIAotCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBjb3dfcGF0aCwgMCwgMCwKLQkJCSAgRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFLCAmcy0+Y293KTsKLQlpZiAocikgewotCQlkbV9wdXRfZGV2aWNlKHRpLCBzLT5vcmlnaW4pOwotCQl0aS0+ZXJyb3IgPSAiQ2Fubm90IGdldCBDT1cgZGV2aWNlIjsKLQkJZ290byBiYWQyOwotCX0KLQotCXIgPSBzZXRfY2h1bmtfc2l6ZShzLCBhcmd2WzNdLCAmdGktPmVycm9yKTsKLQlpZiAocikKLQkJZ290byBiYWQzOwotCi0Jcy0+dHlwZSA9IHBlcnNpc3RlbnQ7Ci0KKwlzLT5zdG9yZSA9IHN0b3JlOwogCXMtPnZhbGlkID0gMTsKIAlzLT5hY3RpdmUgPSAwOwogCWF0b21pY19zZXQoJnMtPnBlbmRpbmdfZXhjZXB0aW9uc19jb3VudCwgMCk7CiAJaW5pdF9yd3NlbSgmcy0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnMtPnBlX2xvY2spOwotCXMtPnRpID0gdGk7CiAKIAkvKiBBbGxvY2F0ZSBoYXNoIHRhYmxlIGZvciBDT1cgZGF0YSAqLwogCWlmIChpbml0X2hhc2hfdGFibGVzKHMpKSB7CiAJCXRpLT5lcnJvciA9ICJVbmFibGUgdG8gYWxsb2NhdGUgaGFzaCB0YWJsZSBzcGFjZSI7CiAJCXIgPSAtRU5PTUVNOwotCQlnb3RvIGJhZDM7Ci0JfQotCi0Jcy0+c3RvcmUuc25hcCA9IHM7Ci0KLQlpZiAocGVyc2lzdGVudCA9PSAnUCcpCi0JCXIgPSBkbV9jcmVhdGVfcGVyc2lzdGVudCgmcy0+c3RvcmUpOwotCWVsc2UKLQkJciA9IGRtX2NyZWF0ZV90cmFuc2llbnQoJnMtPnN0b3JlKTsKLQotCWlmIChyKSB7Ci0JCXRpLT5lcnJvciA9ICJDb3VsZG4ndCBjcmVhdGUgZXhjZXB0aW9uIHN0b3JlIjsKLQkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkNDsKKwkJZ290byBiYWRfaGFzaF90YWJsZXM7CiAJfQogCiAJciA9IGRtX2tjb3B5ZF9jbGllbnRfY3JlYXRlKFNOQVBTSE9UX1BBR0VTLCAmcy0+a2NvcHlkX2NsaWVudCk7CiAJaWYgKHIpIHsKIAkJdGktPmVycm9yID0gIkNvdWxkIG5vdCBjcmVhdGUga2NvcHlkIGNsaWVudCI7Ci0JCWdvdG8gYmFkNTsKKwkJZ290byBiYWRfa2NvcHlkOwogCX0KIAogCXMtPnBlbmRpbmdfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNSU5fSU9TLCBwZW5kaW5nX2NhY2hlKTsKIAlpZiAoIXMtPnBlbmRpbmdfcG9vbCkgewogCQl0aS0+ZXJyb3IgPSAiQ291bGQgbm90IGFsbG9jYXRlIG1lbXBvb2wgZm9yIHBlbmRpbmcgZXhjZXB0aW9ucyI7Ci0JCWdvdG8gYmFkNjsKKwkJZ290byBiYWRfcGVuZGluZ19wb29sOwogCX0KIAogCXMtPnRyYWNrZWRfY2h1bmtfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNSU5fSU9TLApAQCAtNjY1LDcgKzY1Niw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJnMtPnRyYWNrZWRfY2h1bmtfbG9jayk7CiAKIAkvKiBNZXRhZGF0YSBtdXN0IG9ubHkgYmUgbG9hZGVkIGludG8gb25lIHRhYmxlIGF0IG9uY2UgKi8KLQlyID0gcy0+c3RvcmUucmVhZF9tZXRhZGF0YSgmcy0+c3RvcmUsIGRtX2FkZF9leGNlcHRpb24sICh2b2lkICopcyk7CisJciA9IHMtPnN0b3JlLT50eXBlLT5yZWFkX21ldGFkYXRhKHMtPnN0b3JlLCBkbV9hZGRfZXhjZXB0aW9uLAorCQkJCQkgICh2b2lkICopcyk7CiAJaWYgKHIgPCAwKSB7CiAJCXRpLT5lcnJvciA9ICJGYWlsZWQgdG8gcmVhZCBzbmFwc2hvdCBtZXRhZGF0YSI7CiAJCWdvdG8gYmFkX2xvYWRfYW5kX3JlZ2lzdGVyOwpAQCAtNjg2LDM0ICs2NzgsMzMgQEAKIAl9CiAKIAl0aS0+cHJpdmF0ZSA9IHM7Ci0JdGktPnNwbGl0X2lvID0gcy0+Y2h1bmtfc2l6ZTsKKwl0aS0+c3BsaXRfaW8gPSBzLT5zdG9yZS0+Y2h1bmtfc2l6ZTsKIAogCXJldHVybiAwOwogCi0gYmFkX2xvYWRfYW5kX3JlZ2lzdGVyOgorYmFkX2xvYWRfYW5kX3JlZ2lzdGVyOgogCW1lbXBvb2xfZGVzdHJveShzLT50cmFja2VkX2NodW5rX3Bvb2wpOwogCi0gYmFkX3RyYWNrZWRfY2h1bmtfcG9vbDoKK2JhZF90cmFja2VkX2NodW5rX3Bvb2w6CiAJbWVtcG9vbF9kZXN0cm95KHMtPnBlbmRpbmdfcG9vbCk7CiAKLSBiYWQ2OgorYmFkX3BlbmRpbmdfcG9vbDoKIAlkbV9rY29weWRfY2xpZW50X2Rlc3Ryb3kocy0+a2NvcHlkX2NsaWVudCk7CiAKLSBiYWQ1OgotCXMtPnN0b3JlLmRlc3Ryb3koJnMtPnN0b3JlKTsKLQotIGJhZDQ6CitiYWRfa2NvcHlkOgogCWV4aXRfZXhjZXB0aW9uX3RhYmxlKCZzLT5wZW5kaW5nLCBwZW5kaW5nX2NhY2hlKTsKIAlleGl0X2V4Y2VwdGlvbl90YWJsZSgmcy0+Y29tcGxldGUsIGV4Y2VwdGlvbl9jYWNoZSk7CiAKLSBiYWQzOgotCWRtX3B1dF9kZXZpY2UodGksIHMtPmNvdyk7CitiYWRfaGFzaF90YWJsZXM6CiAJZG1fcHV0X2RldmljZSh0aSwgcy0+b3JpZ2luKTsKIAotIGJhZDI6CitiYWRfb3JpZ2luOgogCWtmcmVlKHMpOwogCi0gYmFkMToKK2JhZF9zbmFwOgorCWRtX2V4Y2VwdGlvbl9zdG9yZV9kZXN0cm95KHN0b3JlKTsKKworYmFkX2FyZ3M6CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTcyNCw4ICs3MTUsNiBAQAogCiAJZXhpdF9leGNlcHRpb25fdGFibGUoJnMtPnBlbmRpbmcsIHBlbmRpbmdfY2FjaGUpOwogCWV4aXRfZXhjZXB0aW9uX3RhYmxlKCZzLT5jb21wbGV0ZSwgZXhjZXB0aW9uX2NhY2hlKTsKLQotCXMtPnN0b3JlLmRlc3Ryb3koJnMtPnN0b3JlKTsKIH0KIAogc3RhdGljIHZvaWQgc25hcHNob3RfZHRyKHN0cnVjdCBkbV90YXJnZXQgKnRpKQpAQCAtNzYxLDcgKzc1MCw4IEBACiAJbWVtcG9vbF9kZXN0cm95KHMtPnBlbmRpbmdfcG9vbCk7CiAKIAlkbV9wdXRfZGV2aWNlKHRpLCBzLT5vcmlnaW4pOwotCWRtX3B1dF9kZXZpY2UodGksIHMtPmNvdyk7CisKKwlkbV9leGNlcHRpb25fc3RvcmVfZGVzdHJveShzLT5zdG9yZSk7CiAKIAlrZnJlZShzKTsKIH0KQEAgLTgyMCwxMiArODEwLDEyIEBACiAJZWxzZSBpZiAoZXJyID09IC1FTk9NRU0pCiAJCURNRVJSKCJJbnZhbGlkYXRpbmcgc25hcHNob3Q6IFVuYWJsZSB0byBhbGxvY2F0ZSBleGNlcHRpb24uIik7CiAKLQlpZiAocy0+c3RvcmUuZHJvcF9zbmFwc2hvdCkKLQkJcy0+c3RvcmUuZHJvcF9zbmFwc2hvdCgmcy0+c3RvcmUpOworCWlmIChzLT5zdG9yZS0+dHlwZS0+ZHJvcF9zbmFwc2hvdCkKKwkJcy0+c3RvcmUtPnR5cGUtPmRyb3Bfc25hcHNob3Qocy0+c3RvcmUpOwogCiAJcy0+dmFsaWQgPSAwOwogCi0JZG1fdGFibGVfZXZlbnQocy0+dGktPnRhYmxlKTsKKwlkbV90YWJsZV9ldmVudChzLT5zdG9yZS0+dGktPnRhYmxlKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X3BlbmRpbmdfZXhjZXB0aW9uKHN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uICpwZSkKQEAgLTk0Myw4ICs5MzMsOCBAQAogCiAJZWxzZQogCQkvKiBVcGRhdGUgdGhlIG1ldGFkYXRhIGlmIHdlIGFyZSBwZXJzaXN0ZW50ICovCi0JCXMtPnN0b3JlLmNvbW1pdF9leGNlcHRpb24oJnMtPnN0b3JlLCAmcGUtPmUsIGNvbW1pdF9jYWxsYmFjaywKLQkJCQkJICBwZSk7CisJCXMtPnN0b3JlLT50eXBlLT5jb21taXRfZXhjZXB0aW9uKHMtPnN0b3JlLCAmcGUtPmUsCisJCQkJCQkgY29tbWl0X2NhbGxiYWNrLCBwZSk7CiB9CiAKIC8qCkBAIC05NjAsMTEgKzk1MCwxMSBAQAogCWRldl9zaXplID0gZ2V0X2Rldl9zaXplKGJkZXYpOwogCiAJc3JjLmJkZXYgPSBiZGV2OwotCXNyYy5zZWN0b3IgPSBjaHVua190b19zZWN0b3IocywgcGUtPmUub2xkX2NodW5rKTsKLQlzcmMuY291bnQgPSBtaW4ocy0+Y2h1bmtfc2l6ZSwgZGV2X3NpemUgLSBzcmMuc2VjdG9yKTsKKwlzcmMuc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLCBwZS0+ZS5vbGRfY2h1bmspOworCXNyYy5jb3VudCA9IG1pbihzLT5zdG9yZS0+Y2h1bmtfc2l6ZSwgZGV2X3NpemUgLSBzcmMuc2VjdG9yKTsKIAotCWRlc3QuYmRldiA9IHMtPmNvdy0+YmRldjsKLQlkZXN0LnNlY3RvciA9IGNodW5rX3RvX3NlY3RvcihzLCBwZS0+ZS5uZXdfY2h1bmspOworCWRlc3QuYmRldiA9IHMtPnN0b3JlLT5jb3ctPmJkZXY7CisJZGVzdC5zZWN0b3IgPSBjaHVua190b19zZWN0b3Iocy0+c3RvcmUsIHBlLT5lLm5ld19jaHVuayk7CiAJZGVzdC5jb3VudCA9IHNyYy5jb3VudDsKIAogCS8qIEhhbmQgb3ZlciB0byBrY29weWQgKi8KQEAgLTk3Miw2ICs5NjIsMTcgQEAKIAkJICAgICZzcmMsIDEsICZkZXN0LCAwLCBjb3B5X2NhbGxiYWNrLCBwZSk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiAqCitfX2xvb2t1cF9wZW5kaW5nX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIGNodW5rX3QgY2h1bmspCit7CisJc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplID0gbG9va3VwX2V4Y2VwdGlvbigmcy0+cGVuZGluZywgY2h1bmspOworCisJaWYgKCFlKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBjb250YWluZXJfb2YoZSwgc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24sIGUpOworfQorCiAvKgogICogTG9va3MgdG8gc2VlIGlmIHRoaXMgc25hcHNob3QgYWxyZWFkeSBoYXMgYSBwZW5kaW5nIGV4Y2VwdGlvbgogICogZm9yIHRoaXMgY2h1bmssIG90aGVyd2lzZSBpdCBhbGxvY2F0ZXMgYSBuZXcgb25lIGFuZCBpbnNlcnRzCkBAIC05ODEsNDAgKzk4MiwxNSBAQAogICogdGhpcy4KICAqLwogc3RhdGljIHN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uICoKLV9fZmluZF9wZW5kaW5nX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIHN0cnVjdCBiaW8gKmJpbykKK19fZmluZF9wZW5kaW5nX2V4Y2VwdGlvbihzdHJ1Y3QgZG1fc25hcHNob3QgKnMsCisJCQkgc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKnBlLCBjaHVua190IGNodW5rKQogewotCXN0cnVjdCBkbV9zbmFwX2V4Y2VwdGlvbiAqZTsKLQlzdHJ1Y3QgZG1fc25hcF9wZW5kaW5nX2V4Y2VwdGlvbiAqcGU7Ci0JY2h1bmtfdCBjaHVuayA9IHNlY3Rvcl90b19jaHVuayhzLCBiaW8tPmJpX3NlY3Rvcik7CisJc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKnBlMjsKIAotCS8qCi0JICogSXMgdGhlcmUgYSBwZW5kaW5nIGV4Y2VwdGlvbiBmb3IgdGhpcyBhbHJlYWR5ID8KLQkgKi8KLQllID0gbG9va3VwX2V4Y2VwdGlvbigmcy0+cGVuZGluZywgY2h1bmspOwotCWlmIChlKSB7Ci0JCS8qIGNhc3QgdGhlIGV4Y2VwdGlvbiB0byBhIHBlbmRpbmcgZXhjZXB0aW9uICovCi0JCXBlID0gY29udGFpbmVyX29mKGUsIHN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uLCBlKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBDcmVhdGUgYSBuZXcgcGVuZGluZyBleGNlcHRpb24sIHdlIGRvbid0IHdhbnQKLQkgKiB0byBob2xkIHRoZSBsb2NrIHdoaWxlIHdlIGRvIHRoaXMuCi0JICovCi0JdXBfd3JpdGUoJnMtPmxvY2spOwotCXBlID0gYWxsb2NfcGVuZGluZ19leGNlcHRpb24ocyk7Ci0JZG93bl93cml0ZSgmcy0+bG9jayk7Ci0KLQlpZiAoIXMtPnZhbGlkKSB7CisJcGUyID0gX19sb29rdXBfcGVuZGluZ19leGNlcHRpb24ocywgY2h1bmspOworCWlmIChwZTIpIHsKIAkJZnJlZV9wZW5kaW5nX2V4Y2VwdGlvbihwZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWUgPSBsb29rdXBfZXhjZXB0aW9uKCZzLT5wZW5kaW5nLCBjaHVuayk7Ci0JaWYgKGUpIHsKLQkJZnJlZV9wZW5kaW5nX2V4Y2VwdGlvbihwZSk7Ci0JCXBlID0gY29udGFpbmVyX29mKGUsIHN0cnVjdCBkbV9zbmFwX3BlbmRpbmdfZXhjZXB0aW9uLCBlKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiBwZTI7CiAJfQogCiAJcGUtPmUub2xkX2NodW5rID0gY2h1bms7CkBAIC0xMDI0LDcgKzEwMDAsNyBAQAogCWF0b21pY19zZXQoJnBlLT5yZWZfY291bnQsIDApOwogCXBlLT5zdGFydGVkID0gMDsKIAotCWlmIChzLT5zdG9yZS5wcmVwYXJlX2V4Y2VwdGlvbigmcy0+c3RvcmUsICZwZS0+ZSkpIHsKKwlpZiAocy0+c3RvcmUtPnR5cGUtPnByZXBhcmVfZXhjZXB0aW9uKHMtPnN0b3JlLCAmcGUtPmUpKSB7CiAJCWZyZWVfcGVuZGluZ19leGNlcHRpb24ocGUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xMDMyLDE3ICsxMDA4LDE4IEBACiAJZ2V0X3BlbmRpbmdfZXhjZXB0aW9uKHBlKTsKIAlpbnNlcnRfZXhjZXB0aW9uKCZzLT5wZW5kaW5nLCAmcGUtPmUpOwogCi0gb3V0OgogCXJldHVybiBwZTsKIH0KIAogc3RhdGljIHZvaWQgcmVtYXBfZXhjZXB0aW9uKHN0cnVjdCBkbV9zbmFwc2hvdCAqcywgc3RydWN0IGRtX3NuYXBfZXhjZXB0aW9uICplLAogCQkJICAgIHN0cnVjdCBiaW8gKmJpbywgY2h1bmtfdCBjaHVuaykKIHsKLQliaW8tPmJpX2JkZXYgPSBzLT5jb3ctPmJkZXY7Ci0JYmlvLT5iaV9zZWN0b3IgPSBjaHVua190b19zZWN0b3IocywgZG1fY2h1bmtfbnVtYmVyKGUtPm5ld19jaHVuaykgKwotCQkJIChjaHVuayAtIGUtPm9sZF9jaHVuaykpICsKLQkJCSAoYmlvLT5iaV9zZWN0b3IgJiBzLT5jaHVua19tYXNrKTsKKwliaW8tPmJpX2JkZXYgPSBzLT5zdG9yZS0+Y293LT5iZGV2OworCWJpby0+Ymlfc2VjdG9yID0gY2h1bmtfdG9fc2VjdG9yKHMtPnN0b3JlLAorCQkJCQkgZG1fY2h1bmtfbnVtYmVyKGUtPm5ld19jaHVuaykgKworCQkJCQkgKGNodW5rIC0gZS0+b2xkX2NodW5rKSkgKworCQkJCQkgKGJpby0+Ymlfc2VjdG9yICYKKwkJCQkJICBzLT5zdG9yZS0+Y2h1bmtfbWFzayk7CiB9CiAKIHN0YXRpYyBpbnQgc25hcHNob3RfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBzdHJ1Y3QgYmlvICpiaW8sCkBAIC0xMDU0LDcgKzEwMzEsNyBAQAogCWNodW5rX3QgY2h1bms7CiAJc3RydWN0IGRtX3NuYXBfcGVuZGluZ19leGNlcHRpb24gKnBlID0gTlVMTDsKIAotCWNodW5rID0gc2VjdG9yX3RvX2NodW5rKHMsIGJpby0+Ymlfc2VjdG9yKTsKKwljaHVuayA9IHNlY3Rvcl90b19jaHVuayhzLT5zdG9yZSwgYmlvLT5iaV9zZWN0b3IpOwogCiAJLyogRnVsbCBzbmFwc2hvdHMgYXJlIG5vdCB1c2FibGUgKi8KIAkvKiBUbyBnZXQgaGVyZSB0aGUgdGFibGUgbXVzdCBiZSBsaXZlIHNvIHMtPmFjdGl2ZSBpcyBhbHdheXMgc2V0LiAqLwpAQCAtMTA4MywxMSArMTA2MCwzMSBAQAogCSAqIHdyaXRlYWJsZS4KIAkgKi8KIAlpZiAoYmlvX3J3KGJpbykgPT0gV1JJVEUpIHsKLQkJcGUgPSBfX2ZpbmRfcGVuZGluZ19leGNlcHRpb24ocywgYmlvKTsKKwkJcGUgPSBfX2xvb2t1cF9wZW5kaW5nX2V4Y2VwdGlvbihzLCBjaHVuayk7CiAJCWlmICghcGUpIHsKLQkJCV9faW52YWxpZGF0ZV9zbmFwc2hvdChzLCAtRU5PTUVNKTsKLQkJCXIgPSAtRUlPOwotCQkJZ290byBvdXRfdW5sb2NrOworCQkJdXBfd3JpdGUoJnMtPmxvY2spOworCQkJcGUgPSBhbGxvY19wZW5kaW5nX2V4Y2VwdGlvbihzKTsKKwkJCWRvd25fd3JpdGUoJnMtPmxvY2spOworCisJCQlpZiAoIXMtPnZhbGlkKSB7CisJCQkJZnJlZV9wZW5kaW5nX2V4Y2VwdGlvbihwZSk7CisJCQkJciA9IC1FSU87CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCisJCQllID0gbG9va3VwX2V4Y2VwdGlvbigmcy0+Y29tcGxldGUsIGNodW5rKTsKKwkJCWlmIChlKSB7CisJCQkJZnJlZV9wZW5kaW5nX2V4Y2VwdGlvbihwZSk7CisJCQkJcmVtYXBfZXhjZXB0aW9uKHMsIGUsIGJpbywgY2h1bmspOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKworCQkJcGUgPSBfX2ZpbmRfcGVuZGluZ19leGNlcHRpb24ocywgcGUsIGNodW5rKTsKKwkJCWlmICghcGUpIHsKKwkJCQlfX2ludmFsaWRhdGVfc25hcHNob3QocywgLUVOT01FTSk7CisJCQkJciA9IC1FSU87CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQogCQl9CiAKIAkJcmVtYXBfZXhjZXB0aW9uKHMsICZwZS0+ZSwgYmlvLCBjaHVuayk7CkBAIC0xMTM3LDI0ICsxMTM0LDI1IEBACiBzdGF0aWMgaW50IHNuYXBzaG90X3N0YXR1cyhzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RhdHVzX3R5cGVfdCB0eXBlLAogCQkJICAgY2hhciAqcmVzdWx0LCB1bnNpZ25lZCBpbnQgbWF4bGVuKQogeworCXVuc2lnbmVkIHN6ID0gMDsKIAlzdHJ1Y3QgZG1fc25hcHNob3QgKnNuYXAgPSB0aS0+cHJpdmF0ZTsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgU1RBVFVTVFlQRV9JTkZPOgogCQlpZiAoIXNuYXAtPnZhbGlkKQotCQkJc25wcmludGYocmVzdWx0LCBtYXhsZW4sICJJbnZhbGlkIik7CisJCQlETUVNSVQoIkludmFsaWQiKTsKIAkJZWxzZSB7Ci0JCQlpZiAoc25hcC0+c3RvcmUuZnJhY3Rpb25fZnVsbCkgeworCQkJaWYgKHNuYXAtPnN0b3JlLT50eXBlLT5mcmFjdGlvbl9mdWxsKSB7CiAJCQkJc2VjdG9yX3QgbnVtZXJhdG9yLCBkZW5vbWluYXRvcjsKLQkJCQlzbmFwLT5zdG9yZS5mcmFjdGlvbl9mdWxsKCZzbmFwLT5zdG9yZSwKLQkJCQkJCQkgICZudW1lcmF0b3IsCi0JCQkJCQkJICAmZGVub21pbmF0b3IpOwotCQkJCXNucHJpbnRmKHJlc3VsdCwgbWF4bGVuLCAiJWxsdS8lbGx1IiwKLQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyludW1lcmF0b3IsCi0JCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZGVub21pbmF0b3IpOworCQkJCXNuYXAtPnN0b3JlLT50eXBlLT5mcmFjdGlvbl9mdWxsKHNuYXAtPnN0b3JlLAorCQkJCQkJCQkgJm51bWVyYXRvciwKKwkJCQkJCQkJICZkZW5vbWluYXRvcik7CisJCQkJRE1FTUlUKCIlbGx1LyVsbHUiLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW51bWVyYXRvciwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkZW5vbWluYXRvcik7CiAJCQl9CiAJCQllbHNlCi0JCQkJc25wcmludGYocmVzdWx0LCBtYXhsZW4sICJVbmtub3duIik7CisJCQkJRE1FTUlUKCJVbmtub3duIik7CiAJCX0KIAkJYnJlYWs7CiAKQEAgLTExNjQsMTAgKzExNjIsOSBAQAogCQkgKiB0byBtYWtlIHByaXZhdGUgY29waWVzIGlmIHRoZSBvdXRwdXQgaXMgdG8KIAkJICogbWFrZSBzZW5zZS4KIAkJICovCi0JCXNucHJpbnRmKHJlc3VsdCwgbWF4bGVuLCAiJXMgJXMgJWMgJWxsdSIsCi0JCQkgc25hcC0+b3JpZ2luLT5uYW1lLCBzbmFwLT5jb3ctPm5hbWUsCi0JCQkgc25hcC0+dHlwZSwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXNuYXAtPmNodW5rX3NpemUpOworCQlETUVNSVQoIiVzIiwgc25hcC0+b3JpZ2luLT5uYW1lKTsKKwkJc25hcC0+c3RvcmUtPnR5cGUtPnN0YXR1cyhzbmFwLT5zdG9yZSwgdHlwZSwgcmVzdWx0ICsgc3osCisJCQkJCSAgbWF4bGVuIC0gc3opOwogCQlicmVhazsKIAl9CiAKQEAgLTExOTYsMTQgKzExOTMsMTQgQEAKIAkJCWdvdG8gbmV4dF9zbmFwc2hvdDsKIAogCQkvKiBOb3RoaW5nIHRvIGRvIGlmIHdyaXRpbmcgYmV5b25kIGVuZCBvZiBzbmFwc2hvdCAqLwotCQlpZiAoYmlvLT5iaV9zZWN0b3IgPj0gZG1fdGFibGVfZ2V0X3NpemUoc25hcC0+dGktPnRhYmxlKSkKKwkJaWYgKGJpby0+Ymlfc2VjdG9yID49IGRtX3RhYmxlX2dldF9zaXplKHNuYXAtPnN0b3JlLT50aS0+dGFibGUpKQogCQkJZ290byBuZXh0X3NuYXBzaG90OwogCiAJCS8qCiAJCSAqIFJlbWVtYmVyLCBkaWZmZXJlbnQgc25hcHNob3RzIGNhbiBoYXZlCiAJCSAqIGRpZmZlcmVudCBjaHVuayBzaXplcy4KIAkJICovCi0JCWNodW5rID0gc2VjdG9yX3RvX2NodW5rKHNuYXAsIGJpby0+Ymlfc2VjdG9yKTsKKwkJY2h1bmsgPSBzZWN0b3JfdG9fY2h1bmsoc25hcC0+c3RvcmUsIGJpby0+Ymlfc2VjdG9yKTsKIAogCQkvKgogCQkgKiBDaGVjayBleGNlcHRpb24gdGFibGUgdG8gc2VlIGlmIGJsb2NrCkBAIC0xMjE3LDEwICsxMjE0LDI4IEBACiAJCWlmIChlKQogCQkJZ290byBuZXh0X3NuYXBzaG90OwogCi0JCXBlID0gX19maW5kX3BlbmRpbmdfZXhjZXB0aW9uKHNuYXAsIGJpbyk7CisJCXBlID0gX19sb29rdXBfcGVuZGluZ19leGNlcHRpb24oc25hcCwgY2h1bmspOwogCQlpZiAoIXBlKSB7Ci0JCQlfX2ludmFsaWRhdGVfc25hcHNob3Qoc25hcCwgLUVOT01FTSk7Ci0JCQlnb3RvIG5leHRfc25hcHNob3Q7CisJCQl1cF93cml0ZSgmc25hcC0+bG9jayk7CisJCQlwZSA9IGFsbG9jX3BlbmRpbmdfZXhjZXB0aW9uKHNuYXApOworCQkJZG93bl93cml0ZSgmc25hcC0+bG9jayk7CisKKwkJCWlmICghc25hcC0+dmFsaWQpIHsKKwkJCQlmcmVlX3BlbmRpbmdfZXhjZXB0aW9uKHBlKTsKKwkJCQlnb3RvIG5leHRfc25hcHNob3Q7CisJCQl9CisKKwkJCWUgPSBsb29rdXBfZXhjZXB0aW9uKCZzbmFwLT5jb21wbGV0ZSwgY2h1bmspOworCQkJaWYgKGUpIHsKKwkJCQlmcmVlX3BlbmRpbmdfZXhjZXB0aW9uKHBlKTsKKwkJCQlnb3RvIG5leHRfc25hcHNob3Q7CisJCQl9CisKKwkJCXBlID0gX19maW5kX3BlbmRpbmdfZXhjZXB0aW9uKHNuYXAsIHBlLCBjaHVuayk7CisJCQlpZiAoIXBlKSB7CisJCQkJX19pbnZhbGlkYXRlX3NuYXBzaG90KHNuYXAsIC1FTk9NRU0pOworCQkJCWdvdG8gbmV4dF9zbmFwc2hvdDsKKwkJCX0KIAkJfQogCiAJCWlmICghcHJpbWFyeV9wZSkgewpAQCAtMTM2MCw3ICsxMzc1LDggQEAKIAlvID0gX19sb29rdXBfb3JpZ2luKGRldi0+YmRldik7CiAJaWYgKG8pCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkgKHNuYXAsICZvLT5zbmFwc2hvdHMsIGxpc3QpCi0JCQljaHVua19zaXplID0gbWluX25vdF96ZXJvKGNodW5rX3NpemUsIHNuYXAtPmNodW5rX3NpemUpOworCQkJY2h1bmtfc2l6ZSA9IG1pbl9ub3RfemVybyhjaHVua19zaXplLAorCQkJCQkJICBzbmFwLT5zdG9yZS0+Y2h1bmtfc2l6ZSk7CiAJdXBfcmVhZCgmX29yaWdpbnNfbG9jayk7CiAKIAl0aS0+c3BsaXRfaW8gPSBjaHVua19zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLmggYi9kcml2ZXJzL21kL2RtLXNuYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDllNjJiNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgU2lzdGluYSBTb2Z0d2FyZSAoVUspIExpbWl0ZWQuCi0gKgotICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCi0gKi8KLQotI2lmbmRlZiBETV9TTkFQU0hPVF9ICi0jZGVmaW5lIERNX1NOQVBTSE9UX0gKLQotI2luY2x1ZGUgPGxpbnV4L2RldmljZS1tYXBwZXIuaD4KLSNpbmNsdWRlICJkbS1leGNlcHRpb24tc3RvcmUuaCIKLSNpbmNsdWRlICJkbS1iaW8tbGlzdC5oIgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotCi1zdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlIHsKLQl1aW50MzJfdCBoYXNoX21hc2s7Ci0JdW5zaWduZWQgaGFzaF9zaGlmdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0YWJsZTsKLX07Ci0KLSNkZWZpbmUgRE1fVFJBQ0tFRF9DSFVOS19IQVNIX1NJWkUJMTYKLSNkZWZpbmUgRE1fVFJBQ0tFRF9DSFVOS19IQVNIKHgpCSgodW5zaWduZWQgbG9uZykoeCkgJiBcCi0JCQkJCSAoRE1fVFJBQ0tFRF9DSFVOS19IQVNIX1NJWkUgLSAxKSkKLQotc3RydWN0IGRtX3NuYXBzaG90IHsKLQlzdHJ1Y3Qgcndfc2VtYXBob3JlIGxvY2s7Ci0Jc3RydWN0IGRtX3RhcmdldCAqdGk7Ci0KLQlzdHJ1Y3QgZG1fZGV2ICpvcmlnaW47Ci0Jc3RydWN0IGRtX2RldiAqY293OwotCi0JLyogTGlzdCBvZiBzbmFwc2hvdHMgcGVyIE9yaWdpbiAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQotCS8qIFNpemUgb2YgZGF0YSBibG9ja3Mgc2F2ZWQgLSBtdXN0IGJlIGEgcG93ZXIgb2YgMiAqLwotCWNodW5rX3QgY2h1bmtfc2l6ZTsKLQljaHVua190IGNodW5rX21hc2s7Ci0JY2h1bmtfdCBjaHVua19zaGlmdDsKLQotCS8qIFlvdSBjYW4ndCB1c2UgYSBzbmFwc2hvdCBpZiB0aGlzIGlzIDAgKGUuZy4gaWYgZnVsbCkgKi8KLQlpbnQgdmFsaWQ7Ci0KLQkvKiBPcmlnaW4gd3JpdGVzIGRvbid0IHRyaWdnZXIgZXhjZXB0aW9ucyB1bnRpbCB0aGlzIGlzIHNldCAqLwotCWludCBhY3RpdmU7Ci0KLQkvKiBVc2VkIGZvciBkaXNwbGF5IG9mIHRhYmxlICovCi0JY2hhciB0eXBlOwotCi0JbWVtcG9vbF90ICpwZW5kaW5nX3Bvb2w7Ci0KLQlhdG9taWNfdCBwZW5kaW5nX2V4Y2VwdGlvbnNfY291bnQ7Ci0KLQlzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlIHBlbmRpbmc7Ci0Jc3RydWN0IGV4Y2VwdGlvbl90YWJsZSBjb21wbGV0ZTsKLQotCS8qCi0JICogcGVfbG9jayBwcm90ZWN0cyBhbGwgcGVuZGluZ19leGNlcHRpb24gb3BlcmF0aW9ucyBhbmQgYWNjZXNzCi0JICogYXMgd2VsbCBhcyB0aGUgc25hcHNob3RfYmlvcyBsaXN0LgotCSAqLwotCXNwaW5sb2NrX3QgcGVfbG9jazsKLQotCS8qIFRoZSBvbiBkaXNrIG1ldGFkYXRhIGhhbmRsZXIgKi8KLQlzdHJ1Y3QgZG1fZXhjZXB0aW9uX3N0b3JlIHN0b3JlOwotCi0Jc3RydWN0IGRtX2tjb3B5ZF9jbGllbnQgKmtjb3B5ZF9jbGllbnQ7Ci0KLQkvKiBRdWV1ZSBvZiBzbmFwc2hvdCB3cml0ZXMgZm9yIGtzbmFwZCB0byBmbHVzaCAqLwotCXN0cnVjdCBiaW9fbGlzdCBxdWV1ZWRfYmlvczsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcXVldWVkX2Jpb3Nfd29yazsKLQotCS8qIENodW5rcyB3aXRoIG91dHN0YW5kaW5nIHJlYWRzICovCi0JbWVtcG9vbF90ICp0cmFja2VkX2NodW5rX3Bvb2w7Ci0Jc3BpbmxvY2tfdCB0cmFja2VkX2NodW5rX2xvY2s7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgdHJhY2tlZF9jaHVua19oYXNoW0RNX1RSQUNLRURfQ0hVTktfSEFTSF9TSVpFXTsKLX07Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzZWN0b3JzIGluIHRoZSBkZXZpY2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgc2VjdG9yX3QgZ2V0X2Rldl9zaXplKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCi17Ci0JcmV0dXJuIGJkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gU0VDVE9SX1NISUZUOwotfQotCi1zdGF0aWMgaW5saW5lIGNodW5rX3Qgc2VjdG9yX3RvX2NodW5rKHN0cnVjdCBkbV9zbmFwc2hvdCAqcywgc2VjdG9yX3Qgc2VjdG9yKQotewotCXJldHVybiAoc2VjdG9yICYgfnMtPmNodW5rX21hc2spID4+IHMtPmNodW5rX3NoaWZ0OwotfQotCi1zdGF0aWMgaW5saW5lIHNlY3Rvcl90IGNodW5rX3RvX3NlY3RvcihzdHJ1Y3QgZG1fc25hcHNob3QgKnMsIGNodW5rX3QgY2h1bmspCi17Ci0JcmV0dXJuIGNodW5rIDw8IHMtPmNodW5rX3NoaWZ0OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBiZGV2X2VxdWFsKHN0cnVjdCBibG9ja19kZXZpY2UgKmxocywgc3RydWN0IGJsb2NrX2RldmljZSAqcmhzKQotewotCS8qCi0JICogVGhlcmUgaXMgb25seSBldmVyIG9uZSBpbnN0YW5jZSBvZiBhIHBhcnRpY3VsYXIgYmxvY2sKLQkgKiBkZXZpY2Ugc28gd2UgY2FuIGNvbXBhcmUgcG9pbnRlcnMgc2FmZWx5LgotCSAqLwotCXJldHVybiBsaHMgPT0gcmhzOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYyBiL2RyaXZlcnMvbWQvZG0tdGFibGUuYwppbmRleCAyZmQ2NmMzLi5lODM2MWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRhYmxlLmMKKysrIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCkBAIC0zOTksMjggKzM5OSwzMCBAQAogfQogCiAvKgotICogVGhpcyB1cGdyYWRlcyB0aGUgbW9kZSBvbiBhbiBhbHJlYWR5IG9wZW4gZG1fZGV2LiAgQmVpbmcKKyAqIFRoaXMgdXBncmFkZXMgdGhlIG1vZGUgb24gYW4gYWxyZWFkeSBvcGVuIGRtX2RldiwgYmVpbmcKICAqIGNhcmVmdWwgdG8gbGVhdmUgdGhpbmdzIGFzIHRoZXkgd2VyZSBpZiB3ZSBmYWlsIHRvIHJlb3BlbiB0aGUKLSAqIGRldmljZS4KKyAqIGRldmljZSBhbmQgbm90IHRvIHRvdWNoIHRoZSBleGlzdGluZyBiZGV2IGZpZWxkIGluIGNhc2UKKyAqIGl0IGlzIGFjY2Vzc2VkIGNvbmN1cnJlbnRseSBpbnNpZGUgZG1fdGFibGVfYW55X2Nvbmdlc3RlZCgpLgogICovCiBzdGF0aWMgaW50IHVwZ3JhZGVfbW9kZShzdHJ1Y3QgZG1fZGV2X2ludGVybmFsICpkZCwgZm1vZGVfdCBuZXdfbW9kZSwKIAkJCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKIHsKIAlpbnQgcjsKLQlzdHJ1Y3QgZG1fZGV2X2ludGVybmFsIGRkX2NvcHk7Ci0JZGV2X3QgZGV2ID0gZGQtPmRtX2Rldi5iZGV2LT5iZF9kZXY7CisJc3RydWN0IGRtX2Rldl9pbnRlcm5hbCBkZF9uZXcsIGRkX29sZDsKIAotCWRkX2NvcHkgPSAqZGQ7CisJZGRfbmV3ID0gZGRfb2xkID0gKmRkOworCisJZGRfbmV3LmRtX2Rldi5tb2RlIHw9IG5ld19tb2RlOworCWRkX25ldy5kbV9kZXYuYmRldiA9IE5VTEw7CisKKwlyID0gb3Blbl9kZXYoJmRkX25ldywgZGQtPmRtX2Rldi5iZGV2LT5iZF9kZXYsIG1kKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CiAKIAlkZC0+ZG1fZGV2Lm1vZGUgfD0gbmV3X21vZGU7Ci0JZGQtPmRtX2Rldi5iZGV2ID0gTlVMTDsKLQlyID0gb3Blbl9kZXYoZGQsIGRldiwgbWQpOwotCWlmICghcikKLQkJY2xvc2VfZGV2KCZkZF9jb3B5LCBtZCk7Ci0JZWxzZQotCQkqZGQgPSBkZF9jb3B5OworCWNsb3NlX2RldigmZGRfb2xkLCBtZCk7CiAKLQlyZXR1cm4gcjsKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tdGFyZ2V0LmMgYi9kcml2ZXJzL21kL2RtLXRhcmdldC5jCmluZGV4IDdkZWNmMTAuLjA0ZmVjY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tdGFyZ2V0LmMKKysrIGIvZHJpdmVycy9tZC9kbS10YXJnZXQuYwpAQCAtMTQsNDUgKzE0LDM0IEBACiAKICNkZWZpbmUgRE1fTVNHX1BSRUZJWCAidGFyZ2V0IgogCi1zdHJ1Y3QgdHRfaW50ZXJuYWwgewotCXN0cnVjdCB0YXJnZXRfdHlwZSB0dDsKLQotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlsb25nIHVzZTsKLX07Ci0KIHN0YXRpYyBMSVNUX0hFQUQoX3RhcmdldHMpOwogc3RhdGljIERFQ0xBUkVfUldTRU0oX2xvY2spOwogCiAjZGVmaW5lIERNX01PRF9OQU1FX1NJWkUgMzIKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdHRfaW50ZXJuYWwgKl9fZmluZF90YXJnZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFyZ2V0X3R5cGUgKl9fZmluZF90YXJnZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCB0dF9pbnRlcm5hbCAqdGk7CisJc3RydWN0IHRhcmdldF90eXBlICp0dDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkgKHRpLCAmX3RhcmdldHMsIGxpc3QpCi0JCWlmICghc3RyY21wKG5hbWUsIHRpLT50dC5uYW1lKSkKLQkJCXJldHVybiB0aTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR0LCAmX3RhcmdldHMsIGxpc3QpCisJCWlmICghc3RyY21wKG5hbWUsIHR0LT5uYW1lKSkKKwkJCXJldHVybiB0dDsKIAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IHR0X2ludGVybmFsICpnZXRfdGFyZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0X3R5cGUgKmdldF90YXJnZXRfdHlwZShjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCB0dF9pbnRlcm5hbCAqdGk7CisJc3RydWN0IHRhcmdldF90eXBlICp0dDsKIAogCWRvd25fcmVhZCgmX2xvY2spOwogCi0JdGkgPSBfX2ZpbmRfdGFyZ2V0X3R5cGUobmFtZSk7Ci0JaWYgKHRpKSB7Ci0JCWlmICgodGktPnVzZSA9PSAwKSAmJiAhdHJ5X21vZHVsZV9nZXQodGktPnR0Lm1vZHVsZSkpCi0JCQl0aSA9IE5VTEw7Ci0JCWVsc2UKLQkJCXRpLT51c2UrKzsKLQl9CisJdHQgPSBfX2ZpbmRfdGFyZ2V0X3R5cGUobmFtZSk7CisJaWYgKHR0ICYmICF0cnlfbW9kdWxlX2dldCh0dC0+bW9kdWxlKSkKKwkJdHQgPSBOVUxMOwogCiAJdXBfcmVhZCgmX2xvY2spOwotCXJldHVybiB0aTsKKwlyZXR1cm4gdHQ7CiB9CiAKIHN0YXRpYyB2b2lkIGxvYWRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCkBAIC02Miw5MiArNTEsNTkgQEAKIAogc3RydWN0IHRhcmdldF90eXBlICpkbV9nZXRfdGFyZ2V0X3R5cGUoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgdHRfaW50ZXJuYWwgKnRpID0gZ2V0X3RhcmdldF90eXBlKG5hbWUpOworCXN0cnVjdCB0YXJnZXRfdHlwZSAqdHQgPSBnZXRfdGFyZ2V0X3R5cGUobmFtZSk7CiAKLQlpZiAoIXRpKSB7CisJaWYgKCF0dCkgewogCQlsb2FkX21vZHVsZShuYW1lKTsKLQkJdGkgPSBnZXRfdGFyZ2V0X3R5cGUobmFtZSk7CisJCXR0ID0gZ2V0X3RhcmdldF90eXBlKG5hbWUpOwogCX0KIAotCXJldHVybiB0aSA/ICZ0aS0+dHQgOiBOVUxMOworCXJldHVybiB0dDsKIH0KIAotdm9pZCBkbV9wdXRfdGFyZ2V0X3R5cGUoc3RydWN0IHRhcmdldF90eXBlICp0KQordm9pZCBkbV9wdXRfdGFyZ2V0X3R5cGUoc3RydWN0IHRhcmdldF90eXBlICp0dCkKIHsKLQlzdHJ1Y3QgdHRfaW50ZXJuYWwgKnRpID0gKHN0cnVjdCB0dF9pbnRlcm5hbCAqKSB0OwotCiAJZG93bl9yZWFkKCZfbG9jayk7Ci0JaWYgKC0tdGktPnVzZSA9PSAwKQotCQltb2R1bGVfcHV0KHRpLT50dC5tb2R1bGUpOwotCi0JQlVHX09OKHRpLT51c2UgPCAwKTsKKwltb2R1bGVfcHV0KHR0LT5tb2R1bGUpOwogCXVwX3JlYWQoJl9sb2NrKTsKLQotCXJldHVybjsKIH0KIAotc3RhdGljIHN0cnVjdCB0dF9pbnRlcm5hbCAqYWxsb2NfdGFyZ2V0KHN0cnVjdCB0YXJnZXRfdHlwZSAqdCkKLXsKLQlzdHJ1Y3QgdHRfaW50ZXJuYWwgKnRpID0ga3phbGxvYyhzaXplb2YoKnRpKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAodGkpCi0JCXRpLT50dCA9ICp0OwotCi0JcmV0dXJuIHRpOwotfQotCi0KIGludCBkbV90YXJnZXRfaXRlcmF0ZSh2b2lkICgqaXRlcl9mdW5jKShzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnR0LAogCQkJCQl2b2lkICpwYXJhbSksIHZvaWQgKnBhcmFtKQogewotCXN0cnVjdCB0dF9pbnRlcm5hbCAqdGk7CisJc3RydWN0IHRhcmdldF90eXBlICp0dDsKIAogCWRvd25fcmVhZCgmX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkgKHRpLCAmX3RhcmdldHMsIGxpc3QpCi0JCWl0ZXJfZnVuYygmdGktPnR0LCBwYXJhbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dCwgJl90YXJnZXRzLCBsaXN0KQorCQlpdGVyX2Z1bmModHQsIHBhcmFtKTsKIAl1cF9yZWFkKCZfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGRtX3JlZ2lzdGVyX3RhcmdldChzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnQpCitpbnQgZG1fcmVnaXN0ZXJfdGFyZ2V0KHN0cnVjdCB0YXJnZXRfdHlwZSAqdHQpCiB7CiAJaW50IHJ2ID0gMDsKLQlzdHJ1Y3QgdHRfaW50ZXJuYWwgKnRpID0gYWxsb2NfdGFyZ2V0KHQpOwotCi0JaWYgKCF0aSkKLQkJcmV0dXJuIC1FTk9NRU07CiAKIAlkb3duX3dyaXRlKCZfbG9jayk7Ci0JaWYgKF9fZmluZF90YXJnZXRfdHlwZSh0LT5uYW1lKSkKKwlpZiAoX19maW5kX3RhcmdldF90eXBlKHR0LT5uYW1lKSkKIAkJcnYgPSAtRUVYSVNUOwogCWVsc2UKLQkJbGlzdF9hZGQoJnRpLT5saXN0LCAmX3RhcmdldHMpOworCQlsaXN0X2FkZCgmdHQtPmxpc3QsICZfdGFyZ2V0cyk7CiAKIAl1cF93cml0ZSgmX2xvY2spOwotCWlmIChydikKLQkJa2ZyZWUodGkpOwogCXJldHVybiBydjsKIH0KIAotdm9pZCBkbV91bnJlZ2lzdGVyX3RhcmdldChzdHJ1Y3QgdGFyZ2V0X3R5cGUgKnQpCit2b2lkIGRtX3VucmVnaXN0ZXJfdGFyZ2V0KHN0cnVjdCB0YXJnZXRfdHlwZSAqdHQpCiB7Ci0Jc3RydWN0IHR0X2ludGVybmFsICp0aTsKLQogCWRvd25fd3JpdGUoJl9sb2NrKTsKLQlpZiAoISh0aSA9IF9fZmluZF90YXJnZXRfdHlwZSh0LT5uYW1lKSkpIHsKLQkJRE1DUklUKCJVbnJlZ2lzdGVyaW5nIHVucmVjb2duaXNlZCB0YXJnZXQ6ICVzIiwgdC0+bmFtZSk7CisJaWYgKCFfX2ZpbmRfdGFyZ2V0X3R5cGUodHQtPm5hbWUpKSB7CisJCURNQ1JJVCgiVW5yZWdpc3RlcmluZyB1bnJlY29nbmlzZWQgdGFyZ2V0OiAlcyIsIHR0LT5uYW1lKTsKIAkJQlVHKCk7CiAJfQogCi0JaWYgKHRpLT51c2UpIHsKLQkJRE1DUklUKCJBdHRlbXB0IHRvIHVucmVnaXN0ZXIgdGFyZ2V0IHN0aWxsIGluIHVzZTogJXMiLAotCQkgICAgICAgdC0+bmFtZSk7Ci0JCUJVRygpOwotCX0KLQotCWxpc3RfZGVsKCZ0aS0+bGlzdCk7Ci0Ja2ZyZWUodGkpOworCWxpc3RfZGVsKCZ0dC0+bGlzdCk7CiAKIAl1cF93cml0ZSgmX2xvY2spOwogfQpAQCAtMTU2LDE3ICsxMTIsMTcgQEAKICAqIGlvLWVycjogYWx3YXlzIGZhaWxzIGFuIGlvLCB1c2VmdWwgZm9yIGJyaW5naW5nCiAgKiB1cCBMVnMgdGhhdCBoYXZlIGhvbGVzIGluIHRoZW0uCiAgKi8KLXN0YXRpYyBpbnQgaW9fZXJyX2N0cihzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgdW5zaWduZWQgaW50IGFyZ2MsIGNoYXIgKiphcmdzKQorc3RhdGljIGludCBpb19lcnJfY3RyKHN0cnVjdCBkbV90YXJnZXQgKnR0LCB1bnNpZ25lZCBpbnQgYXJnYywgY2hhciAqKmFyZ3MpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlvX2Vycl9kdHIoc3RydWN0IGRtX3RhcmdldCAqdGkpCitzdGF0aWMgdm9pZCBpb19lcnJfZHRyKHN0cnVjdCBkbV90YXJnZXQgKnR0KQogewogCS8qIGVtcHR5ICovCiB9CiAKLXN0YXRpYyBpbnQgaW9fZXJyX21hcChzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGJpbyAqYmlvLAorc3RhdGljIGludCBpb19lcnJfbWFwKHN0cnVjdCBkbV90YXJnZXQgKnR0LCBzdHJ1Y3QgYmlvICpiaW8sCiAJCSAgICAgIHVuaW9uIG1hcF9pbmZvICptYXBfY29udGV4dCkKIHsKIAlyZXR1cm4gLUVJTzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCA4ZDQwZjI3Li43ODhiYTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC05OSwxOSArOTksOSBAQAogLyoKICAqIFdvcmsgcHJvY2Vzc2VkIGJ5IHBlci1kZXZpY2Ugd29ya3F1ZXVlLgogICovCi1zdHJ1Y3QgZG1fd3FfcmVxIHsKLQllbnVtIHsKLQkJRE1fV1FfRkxVU0hfREVGRVJSRUQsCi0JfSB0eXBlOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZDsKLQl2b2lkICpjb250ZXh0OwotfTsKLQogc3RydWN0IG1hcHBlZF9kZXZpY2UgewogCXN0cnVjdCByd19zZW1hcGhvcmUgaW9fbG9jazsKIAlzdHJ1Y3QgbXV0ZXggc3VzcGVuZF9sb2NrOwotCXNwaW5sb2NrX3QgcHVzaGJhY2tfbG9jazsKIAlyd2xvY2tfdCBtYXBfbG9jazsKIAlhdG9taWNfdCBob2xkZXJzOwogCWF0b21pY190IG9wZW5fY291bnQ7CkBAIC0xMjksOCArMTE5LDkgQEAKIAkgKi8KIAlhdG9taWNfdCBwZW5kaW5nOwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IGJpb19saXN0IGRlZmVycmVkOwotCXN0cnVjdCBiaW9fbGlzdCBwdXNoYmFjazsKKwlzcGlubG9ja190IGRlZmVycmVkX2xvY2s7CiAKIAkvKgogCSAqIFByb2Nlc3NpbmcgcXVldWUgKGZsdXNoL2JhcnJpZXJzKQpAQCAtNDUzLDcgKzQ0NCw5IEBACiAJCXJldHVybiAxOwogCX0KIAorCXNwaW5fbG9ja19pcnEoJm1kLT5kZWZlcnJlZF9sb2NrKTsKIAliaW9fbGlzdF9hZGQoJm1kLT5kZWZlcnJlZCwgYmlvKTsKKwlzcGluX3VubG9ja19pcnEoJm1kLT5kZWZlcnJlZF9sb2NrKTsKIAogCXVwX3dyaXRlKCZtZC0+aW9fbG9jayk7CiAJcmV0dXJuIDA7CQkvKiBkZWZlcnJlZCBzdWNjZXNzZnVsbHkgKi8KQEAgLTUzNywxNiArNTMwLDE0IEBACiAJCWlmIChpby0+ZXJyb3IgPT0gRE1fRU5ESU9fUkVRVUVVRSkgewogCQkJLyoKIAkJCSAqIFRhcmdldCByZXF1ZXN0ZWQgcHVzaGluZyBiYWNrIHRoZSBJL08uCi0JCQkgKiBUaGlzIG11c3QgYmUgaGFuZGxlZCBiZWZvcmUgdGhlIHNsZWVwZXIgb24KLQkJCSAqIHN1c3BlbmQgcXVldWUgbWVyZ2VzIHRoZSBwdXNoYmFjayBsaXN0LgogCQkJICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWQtPnB1c2hiYWNrX2xvY2ssIGZsYWdzKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZtZC0+ZGVmZXJyZWRfbG9jaywgZmxhZ3MpOwogCQkJaWYgKF9fbm9mbHVzaF9zdXNwZW5kaW5nKG1kKSkKLQkJCQliaW9fbGlzdF9hZGQoJm1kLT5wdXNoYmFjaywgaW8tPmJpbyk7CisJCQkJYmlvX2xpc3RfYWRkKCZtZC0+ZGVmZXJyZWQsIGlvLT5iaW8pOwogCQkJZWxzZQogCQkJCS8qIG5vZmx1c2ggc3VzcGVuZCB3YXMgaW50ZXJydXB0ZWQuICovCiAJCQkJaW8tPmVycm9yID0gLUVJTzsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kLT5wdXNoYmFja19sb2NrLCBmbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZC0+ZGVmZXJyZWRfbG9jaywgZmxhZ3MpOwogCQl9CiAKIAkJZW5kX2lvX2FjY3QoaW8pOwpAQCAtODM0LDIwICs4MjUsMjIgQEAKIH0KIAogLyoKLSAqIFNwbGl0IHRoZSBiaW8gaW50byBzZXZlcmFsIGNsb25lcy4KKyAqIFNwbGl0IHRoZSBiaW8gaW50byBzZXZlcmFsIGNsb25lcyBhbmQgc3VibWl0IGl0IHRvIHRhcmdldHMuCiAgKi8KLXN0YXRpYyBpbnQgX19zcGxpdF9iaW8oc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgdm9pZCBfX3NwbGl0X2FuZF9wcm9jZXNzX2JpbyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCBiaW8gKmJpbykKIHsKIAlzdHJ1Y3QgY2xvbmVfaW5mbyBjaTsKIAlpbnQgZXJyb3IgPSAwOwogCiAJY2kubWFwID0gZG1fZ2V0X3RhYmxlKG1kKTsKLQlpZiAodW5saWtlbHkoIWNpLm1hcCkpCi0JCXJldHVybiAtRUlPOworCWlmICh1bmxpa2VseSghY2kubWFwKSkgeworCQliaW9faW9fZXJyb3IoYmlvKTsKKwkJcmV0dXJuOworCX0KIAlpZiAodW5saWtlbHkoYmlvX2JhcnJpZXIoYmlvKSAmJiAhZG1fdGFibGVfYmFycmllcl9vayhjaS5tYXApKSkgewogCQlkbV90YWJsZV9wdXQoY2kubWFwKTsKIAkJYmlvX2VuZGlvKGJpbywgLUVPUE5PVFNVUFApOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAljaS5tZCA9IG1kOwogCWNpLmJpbyA9IGJpbzsKQEAgLTg2Nyw4ICs4NjAsNiBAQAogCS8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSBjb3VudCAqLwogCWRlY19wZW5kaW5nKGNpLmlvLCBlcnJvcik7CiAJZG1fdGFibGVfcHV0KGNpLm1hcCk7Ci0KLQlyZXR1cm4gMDsKIH0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENSVUQgRU5ECkBAIC05NTksOCArOTUwLDkgQEAKIAkJZG93bl9yZWFkKCZtZC0+aW9fbG9jayk7CiAJfQogCi0JciA9IF9fc3BsaXRfYmlvKG1kLCBiaW8pOworCV9fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvKG1kLCBiaW8pOwogCXVwX3JlYWQoJm1kLT5pb19sb2NrKTsKKwlyZXR1cm4gMDsKIAogb3V0X3JlcToKIAlpZiAociA8IDApCkBAIC0xMDc0LDYgKzEwNjYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRtX2Jsa19kb3BzOwogCitzdGF0aWMgdm9pZCBkbV93cV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKIC8qCiAgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGlzZSBhIGJsYW5rIGRldmljZSB3aXRoIGEgZ2l2ZW4gbWlub3IuCiAgKi8KQEAgLTExMDEsNyArMTA5NSw3IEBACiAKIAlpbml0X3J3c2VtKCZtZC0+aW9fbG9jayk7CiAJbXV0ZXhfaW5pdCgmbWQtPnN1c3BlbmRfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1kLT5wdXNoYmFja19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbWQtPmRlZmVycmVkX2xvY2spOwogCXJ3bG9ja19pbml0KCZtZC0+bWFwX2xvY2spOwogCWF0b21pY19zZXQoJm1kLT5ob2xkZXJzLCAxKTsKIAlhdG9taWNfc2V0KCZtZC0+b3Blbl9jb3VudCwgMCk7CkBAIC0xMTE4LDYgKzExMTIsNyBAQAogCW1kLT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZm4gPSBkbV9hbnlfY29uZ2VzdGVkOwogCW1kLT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZGF0YSA9IG1kOwogCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QobWQtPnF1ZXVlLCBkbV9yZXF1ZXN0KTsKKwlibGtfcXVldWVfb3JkZXJlZChtZC0+cXVldWUsIFFVRVVFX09SREVSRURfRFJBSU4sIE5VTEwpOwogCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQobWQtPnF1ZXVlLCBCTEtfQk9VTkNFX0FOWSk7CiAJbWQtPnF1ZXVlLT51bnBsdWdfZm4gPSBkbV91bnBsdWdfYWxsOwogCWJsa19xdWV1ZV9tZXJnZV9idmVjKG1kLT5xdWV1ZSwgZG1fbWVyZ2VfYnZlYyk7CkBAIC0xMTQwLDYgKzExMzUsNyBAQAogCiAJYXRvbWljX3NldCgmbWQtPnBlbmRpbmcsIDApOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1kLT53YWl0KTsKKwlJTklUX1dPUksoJm1kLT53b3JrLCBkbV93cV93b3JrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZC0+ZXZlbnRxKTsKIAogCW1kLT5kaXNrLT5tYWpvciA9IF9tYWpvcjsKQEAgLTEzNzksMTggKzEzNzUsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtX3B1dCk7CiAKLXN0YXRpYyBpbnQgZG1fd2FpdF9mb3JfY29tcGxldGlvbihzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCitzdGF0aWMgaW50IGRtX3dhaXRfZm9yX2NvbXBsZXRpb24oc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBpbnQgaW50ZXJydXB0aWJsZSkKIHsKIAlpbnQgciA9IDA7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlkbV91bnBsdWdfYWxsKG1kLT5xdWV1ZSk7CisKKwlhZGRfd2FpdF9xdWV1ZSgmbWQtPndhaXQsICZ3YWl0KTsKIAogCXdoaWxlICgxKSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNldF9jdXJyZW50X3N0YXRlKGludGVycnVwdGlibGUpOwogCiAJCXNtcF9tYigpOwogCQlpZiAoIWF0b21pY19yZWFkKCZtZC0+cGVuZGluZykpCiAJCQlicmVhazsKIAotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJaWYgKGludGVycnVwdGlibGUgPT0gVEFTS19JTlRFUlJVUFRJQkxFICYmCisJCSAgICBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJciA9IC1FSU5UUjsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMzk5LDY3ICsxNDAxLDQwIEBACiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmbWQtPndhaXQsICZ3YWl0KTsKKwogCXJldHVybiByOwogfQogCiAvKgogICogUHJvY2VzcyB0aGUgZGVmZXJyZWQgYmlvcwogICovCi1zdGF0aWMgdm9pZCBfX2ZsdXNoX2RlZmVycmVkX2lvKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKK3N0YXRpYyB2b2lkIGRtX3dxX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogeworCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWFwcGVkX2RldmljZSwKKwkJCQkJCXdvcmspOwogCXN0cnVjdCBiaW8gKmM7CiAKLQl3aGlsZSAoKGMgPSBiaW9fbGlzdF9wb3AoJm1kLT5kZWZlcnJlZCkpKSB7Ci0JCWlmIChfX3NwbGl0X2JpbyhtZCwgYykpCi0JCQliaW9faW9fZXJyb3IoYyk7CisJZG93bl93cml0ZSgmbWQtPmlvX2xvY2spOworCituZXh0X2JpbzoKKwlzcGluX2xvY2tfaXJxKCZtZC0+ZGVmZXJyZWRfbG9jayk7CisJYyA9IGJpb19saXN0X3BvcCgmbWQtPmRlZmVycmVkKTsKKwlzcGluX3VubG9ja19pcnEoJm1kLT5kZWZlcnJlZF9sb2NrKTsKKworCWlmIChjKSB7CisJCV9fc3BsaXRfYW5kX3Byb2Nlc3NfYmlvKG1kLCBjKTsKKwkJZ290byBuZXh0X2JpbzsKIAl9CiAKIAljbGVhcl9iaXQoRE1GX0JMT0NLX0lPLCAmbWQtPmZsYWdzKTsKLX0KIAotc3RhdGljIHZvaWQgX19tZXJnZV9wdXNoYmFja19saXN0KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1kLT5wdXNoYmFja19sb2NrLCBmbGFncyk7Ci0JY2xlYXJfYml0KERNRl9OT0ZMVVNIX1NVU1BFTkRJTkcsICZtZC0+ZmxhZ3MpOwotCWJpb19saXN0X21lcmdlX2hlYWQoJm1kLT5kZWZlcnJlZCwgJm1kLT5wdXNoYmFjayk7Ci0JYmlvX2xpc3RfaW5pdCgmbWQtPnB1c2hiYWNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZC0+cHVzaGJhY2tfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBkbV93cV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgZG1fd3FfcmVxICpyZXEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtX3dxX3JlcSwgd29yayk7Ci0Jc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gcmVxLT5tZDsKLQotCWRvd25fd3JpdGUoJm1kLT5pb19sb2NrKTsKLQlzd2l0Y2ggKHJlcS0+dHlwZSkgewotCWNhc2UgRE1fV1FfRkxVU0hfREVGRVJSRUQ6Ci0JCV9fZmx1c2hfZGVmZXJyZWRfaW8obWQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlETUVSUigiZG1fd3Ffd29yazogdW5yZWNvZ25pc2VkIHdvcmsgdHlwZSAlZCIsIHJlcS0+dHlwZSk7Ci0JCUJVRygpOwotCX0KIAl1cF93cml0ZSgmbWQtPmlvX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBkbV93cV9xdWV1ZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIGludCB0eXBlLCB2b2lkICpjb250ZXh0LAotCQkJc3RydWN0IGRtX3dxX3JlcSAqcmVxKQorc3RhdGljIHZvaWQgZG1fcXVldWVfZmx1c2goc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewotCXJlcS0+dHlwZSA9IHR5cGU7Ci0JcmVxLT5tZCA9IG1kOwotCXJlcS0+Y29udGV4dCA9IGNvbnRleHQ7Ci0JSU5JVF9XT1JLKCZyZXEtPndvcmssIGRtX3dxX3dvcmspOwotCXF1ZXVlX3dvcmsobWQtPndxLCAmcmVxLT53b3JrKTsKLX0KLQotc3RhdGljIHZvaWQgZG1fcXVldWVfZmx1c2goc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBpbnQgdHlwZSwgdm9pZCAqY29udGV4dCkKLXsKLQlzdHJ1Y3QgZG1fd3FfcmVxIHJlcTsKLQotCWRtX3dxX3F1ZXVlKG1kLCB0eXBlLCBjb250ZXh0LCAmcmVxKTsKKwlxdWV1ZV93b3JrKG1kLT53cSwgJm1kLT53b3JrKTsKIAlmbHVzaF93b3JrcXVldWUobWQtPndxKTsKIH0KIApAQCAtMTUzNCw3ICsxNTA5LDYgQEAKIGludCBkbV9zdXNwZW5kKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgdW5zaWduZWQgc3VzcGVuZF9mbGFncykKIHsKIAlzdHJ1Y3QgZG1fdGFibGUgKm1hcCA9IE5VTEw7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAJaW50IHIgPSAwOwogCWludCBkb19sb2NrZnMgPSBzdXNwZW5kX2ZsYWdzICYgRE1fU1VTUEVORF9MT0NLRlNfRkxBRyA/IDEgOiAwOwogCWludCBub2ZsdXNoID0gc3VzcGVuZF9mbGFncyAmIERNX1NVU1BFTkRfTk9GTFVTSF9GTEFHID8gMSA6IDA7CkBAIC0xNTg0LDI4ICsxNTU4LDIyIEBACiAJZG93bl93cml0ZSgmbWQtPmlvX2xvY2spOwogCXNldF9iaXQoRE1GX0JMT0NLX0lPLCAmbWQtPmZsYWdzKTsKIAotCWFkZF93YWl0X3F1ZXVlKCZtZC0+d2FpdCwgJndhaXQpOwogCXVwX3dyaXRlKCZtZC0+aW9fbG9jayk7CiAKLQkvKiB1bnBsdWcgKi8KLQlpZiAobWFwKQotCQlkbV90YWJsZV91bnBsdWdfYWxsKG1hcCk7Ci0KIAkvKgogCSAqIFdhaXQgZm9yIHRoZSBhbHJlYWR5LW1hcHBlZCBpb3MgdG8gY29tcGxldGUuCiAJICovCi0JciA9IGRtX3dhaXRfZm9yX2NvbXBsZXRpb24obWQpOworCXIgPSBkbV93YWl0X2Zvcl9jb21wbGV0aW9uKG1kLCBUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJZG93bl93cml0ZSgmbWQtPmlvX2xvY2spOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZtZC0+d2FpdCwgJndhaXQpOwogCiAJaWYgKG5vZmx1c2gpCi0JCV9fbWVyZ2VfcHVzaGJhY2tfbGlzdChtZCk7CisJCWNsZWFyX2JpdChETUZfTk9GTFVTSF9TVVNQRU5ESU5HLCAmbWQtPmZsYWdzKTsKIAl1cF93cml0ZSgmbWQtPmlvX2xvY2spOwogCiAJLyogd2VyZSB3ZSBpbnRlcnJ1cHRlZCA/ICovCiAJaWYgKHIgPCAwKSB7Ci0JCWRtX3F1ZXVlX2ZsdXNoKG1kLCBETV9XUV9GTFVTSF9ERUZFUlJFRCwgTlVMTCk7CisJCWRtX3F1ZXVlX2ZsdXNoKG1kKTsKIAogCQl1bmxvY2tfZnMobWQpOwogCQlnb3RvIG91dDsgLyogcHVzaGJhY2sgbGlzdCBpcyBhbHJlYWR5IGZsdXNoZWQsIHNvIHNraXAgZmx1c2ggKi8KQEAgLTE2NDUsNyArMTYxMyw3IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0JZG1fcXVldWVfZmx1c2gobWQsIERNX1dRX0ZMVVNIX0RFRkVSUkVELCBOVUxMKTsKKwlkbV9xdWV1ZV9mbHVzaChtZCk7CiAKIAl1bmxvY2tfZnMobWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLmggYi9kcml2ZXJzL21kL2RtLmgKaW5kZXggMjAxOTRlMC4uYjQ4Mzk3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS5oCisrKyBiL2RyaXZlcnMvbWQvZG0uaApAQCAtNjAsNyArNjAsNyBAQAogaW50IGRtX3RhcmdldF9pbml0KHZvaWQpOwogdm9pZCBkbV90YXJnZXRfZXhpdCh2b2lkKTsKIHN0cnVjdCB0YXJnZXRfdHlwZSAqZG1fZ2V0X3RhcmdldF90eXBlKGNvbnN0IGNoYXIgKm5hbWUpOwotdm9pZCBkbV9wdXRfdGFyZ2V0X3R5cGUoc3RydWN0IHRhcmdldF90eXBlICp0KTsKK3ZvaWQgZG1fcHV0X3RhcmdldF90eXBlKHN0cnVjdCB0YXJnZXRfdHlwZSAqdHQpOwogaW50IGRtX3RhcmdldF9pdGVyYXRlKHZvaWQgKCppdGVyX2Z1bmMpKHN0cnVjdCB0YXJnZXRfdHlwZSAqdHQsCiAJCQkJCXZvaWQgKnBhcmFtKSwgdm9pZCAqcGFyYW0pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2ZhdWx0eS5jIGIvZHJpdmVycy9tZC9mYXVsdHkuYwppbmRleCA4NmQ5YWRmLi44Njk1ODA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2ZhdWx0eS5jCisrKyBiL2RyaXZlcnMvbWQvZmF1bHR5LmMKQEAgLTYyLDcgKzYyLDEwIEBACiAjZGVmaW5lCU1vZGVTaGlmdAk1CiAKICNkZWZpbmUgTWF4RmF1bHQJNTAKLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF91Lmg+CisjaW5jbHVkZSAibWQuaCIKKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCiAKIHN0YXRpYyB2b2lkIGZhdWx0eV9mYWlsKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycm9yKQpAQCAtMjgwLDYgKzI4MywxNyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc2VjdG9yX3QgZmF1bHR5X3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3RvcnMsIGludCByYWlkX2Rpc2tzKQoreworCVdBUk5fT05DRShyYWlkX2Rpc2tzLAorCQkgICIlcyBkb2VzIG5vdCBzdXBwb3J0IGdlbmVyaWMgcmVzaGFwZVxuIiwgX19mdW5jX18pOworCisJaWYgKHNlY3RvcnMgPT0gMCkKKwkJcmV0dXJuIG1kZGV2LT5kZXZfc2VjdG9yczsKKworCXJldHVybiBzZWN0b3JzOworfQorCiBzdGF0aWMgaW50IHJ1bihtZGRldl90ICptZGRldikKIHsKIAltZGtfcmRldl90ICpyZGV2OwpAQCAtMjk4LDcgKzMxMiw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKIAkJY29uZi0+cmRldiA9IHJkZXY7CiAKLQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IG1kZGV2LT5zaXplICogMjsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgZmF1bHR5X3NpemUobWRkZXYsIDAsIDApKTsKIAltZGRldi0+cHJpdmF0ZSA9IGNvbmY7CiAKIAlyZWNvbmZpZyhtZGRldiwgbWRkZXYtPmxheW91dCwgLTEpOwpAQCAtMzI1LDYgKzMzOSw3IEBACiAJLnN0b3AJCT0gc3RvcCwKIAkuc3RhdHVzCQk9IHN0YXR1cywKIAkucmVjb25maWcJPSByZWNvbmZpZywKKwkuc2l6ZQkJPSBmYXVsdHlfc2l6ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHJhaWRfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9saW5lYXIuYyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKaW5kZXggMDk2NThiMi4uN2EzNmUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2xpbmVhci5jCkBAIC0xNiw3ICsxNiwxMSBAQAogICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAKICovCiAKLSNpbmNsdWRlIDxsaW51eC9yYWlkL2xpbmVhci5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAibWQuaCIKKyNpbmNsdWRlICJsaW5lYXIuaCIKIAogLyoKICAqIGZpbmQgd2hpY2ggZGV2aWNlIGhvbGRzIGEgcGFydGljdWxhciBvZmZzZXQgCkBAIC05Nyw2ICsxMDEsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc2VjdG9yX3QgbGluZWFyX3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3RvcnMsIGludCByYWlkX2Rpc2tzKQoreworCWxpbmVhcl9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKKworCVdBUk5fT05DRShzZWN0b3JzIHx8IHJhaWRfZGlza3MsCisJCSAgIiVzIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJpYyByZXNoYXBlXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gY29uZi0+YXJyYXlfc2VjdG9yczsKK30KKwogc3RhdGljIGxpbmVhcl9jb25mX3QgKmxpbmVhcl9jb25mKG1kZGV2X3QgKm1kZGV2LCBpbnQgcmFpZF9kaXNrcykKIHsKIAlsaW5lYXJfY29uZl90ICpjb25mOwpAQCAtMTM1LDggKzE0OSw4IEBACiAJCSAgICBtZGRldi0+cXVldWUtPm1heF9zZWN0b3JzID4gKFBBR0VfU0laRT4+OSkpCiAJCQlibGtfcXVldWVfbWF4X3NlY3RvcnMobWRkZXYtPnF1ZXVlLCBQQUdFX1NJWkU+PjkpOwogCi0JCWRpc2stPm51bV9zZWN0b3JzID0gcmRldi0+c2l6ZSAqIDI7Ci0JCWNvbmYtPmFycmF5X3NlY3RvcnMgKz0gcmRldi0+c2l6ZSAqIDI7CisJCWRpc2stPm51bV9zZWN0b3JzID0gcmRldi0+c2VjdG9yczsKKwkJY29uZi0+YXJyYXlfc2VjdG9ycyArPSByZGV2LT5zZWN0b3JzOwogCiAJCWNudCsrOwogCX0KQEAgLTI0OSw3ICsyNjMsNyBAQAogCWlmICghY29uZikKIAkJcmV0dXJuIDE7CiAJbWRkZXYtPnByaXZhdGUgPSBjb25mOwotCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gY29uZi0+YXJyYXlfc2VjdG9yczsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgbGluZWFyX3NpemUobWRkZXYsIDAsIDApKTsKIAogCWJsa19xdWV1ZV9tZXJnZV9idmVjKG1kZGV2LT5xdWV1ZSwgbGluZWFyX21lcmdlYWJsZV9idmVjKTsKIAltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IGxpbmVhcl91bnBsdWc7CkBAIC0yODMsNyArMjk3LDcgQEAKIAluZXdjb25mLT5wcmV2ID0gbWRkZXZfdG9fY29uZihtZGRldik7CiAJbWRkZXYtPnByaXZhdGUgPSBuZXdjb25mOwogCW1kZGV2LT5yYWlkX2Rpc2tzKys7Ci0JbWRkZXYtPmFycmF5X3NlY3RvcnMgPSBuZXdjb25mLT5hcnJheV9zZWN0b3JzOworCW1kX3NldF9hcnJheV9zZWN0b3JzKG1kZGV2LCBsaW5lYXJfc2l6ZShtZGRldiwgMCwgMCkpOwogCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCXJldHVybiAwOwogfQpAQCAtMzgxLDYgKzM5NSw3IEBACiAJLnN0b3AJCT0gbGluZWFyX3N0b3AsCiAJLnN0YXR1cwkJPSBsaW5lYXJfc3RhdHVzLAogCS5ob3RfYWRkX2Rpc2sJPSBsaW5lYXJfYWRkLAorCS5zaXplCQk9IGxpbmVhcl9zaXplLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbGluZWFyX2luaXQgKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2xpbmVhci5oIGIvZHJpdmVycy9tZC9saW5lYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjgxNzk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZC9saW5lYXIuaApAQCAtMCwwICsxLDI5IEBACisjaWZuZGVmIF9MSU5FQVJfSAorI2RlZmluZSBfTElORUFSX0gKKworc3RydWN0IGRldl9pbmZvIHsKKwltZGtfcmRldl90CSpyZGV2OworCXNlY3Rvcl90CW51bV9zZWN0b3JzOworCXNlY3Rvcl90CXN0YXJ0X3NlY3RvcjsKK307CisKK3R5cGVkZWYgc3RydWN0IGRldl9pbmZvIGRldl9pbmZvX3Q7CisKK3N0cnVjdCBsaW5lYXJfcHJpdmF0ZV9kYXRhCit7CisJc3RydWN0IGxpbmVhcl9wcml2YXRlX2RhdGEgKnByZXY7CS8qIGVhcmxpZXIgdmVyc2lvbiAqLworCWRldl9pbmZvX3QJCSoqaGFzaF90YWJsZTsKKwlzZWN0b3JfdAkJc3BhY2luZzsKKwlzZWN0b3JfdAkJYXJyYXlfc2VjdG9yczsKKwlpbnQJCQlzZWN0b3Jfc2hpZnQ7CS8qIHNoaWZ0IGJlZm9yZSBkaXZpZGluZworCQkJCQkJICogYnkgc3BhY2luZworCQkJCQkJICovCisJZGV2X2luZm9fdAkJZGlza3NbMF07Cit9OworCisKK3R5cGVkZWYgc3RydWN0IGxpbmVhcl9wcml2YXRlX2RhdGEgbGluZWFyX2NvbmZfdDsKKworI2RlZmluZSBtZGRldl90b19jb25mKG1kZGV2KSAoKGxpbmVhcl9jb25mX3QgKikgbWRkZXYtPnByaXZhdGUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IGEzMDdmODcuLmVkNTcyN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTMzLDkgKzMzLDkgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgotI2luY2x1ZGUgPGxpbnV4L3JhaWQvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPiAvKiBmb3IgaW52YWxpZGF0ZV9iZGV2ICovCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CkBAIC00NSwxMSArNDUsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2RlZmluZSBNQUpPUl9OUiBNRF9NQUpPUgotCi0vKiA2MyBwYXJ0aXRpb25zIHdpdGggdGhlIGFsdGVybmF0ZSBtYWpvciBudW1iZXIgKG1kcCkgKi8KLSNkZWZpbmUgTWRwTWlub3JTaGlmdCA2CisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF9wLmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF91Lmg+CisjaW5jbHVkZSAibWQuaCIKKyNpbmNsdWRlICJiaXRtYXAuaCIKIAogI2RlZmluZSBERUJVRyAwCiAjZGVmaW5lIGRwcmludGsoeC4uLikgKCh2b2lkKShERUJVRyAmJiBwcmludGsoeCkpKQpAQCAtMjAyLDEyICsyMDEsNjggQEAKIAkJKQogCiAKLXN0YXRpYyBpbnQgbWRfZmFpbF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCisvKiBSYXRoZXIgdGhhbiBjYWxsaW5nIGRpcmVjdGx5IGludG8gdGhlIHBlcnNvbmFsaXR5IG1ha2VfcmVxdWVzdCBmdW5jdGlvbiwKKyAqIElPIHJlcXVlc3RzIGNvbWUgaGVyZSBmaXJzdCBzbyB0aGF0IHdlIGNhbiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzCisgKiBiZWluZyBzdXNwZW5kZWQgcGVuZGluZyBhIHJlY29uZmlndXJhdGlvbi4KKyAqIFdlIGhvbGQgYSByZWZjb3VudCBvdmVyIHRoZSBjYWxsIHRvIC0+bWFrZV9yZXF1ZXN0LiAgQnkgdGhlIHRpbWUgdGhhdAorICogY2FsbCBoYXMgZmluaXNoZWQsIHRoZSBiaW8gaGFzIGJlZW4gbGlua2VkIGludG8gc29tZSBpbnRlcm5hbCBzdHJ1Y3R1cmUKKyAqIGFuZCBzbyBpcyB2aXNpYmxlIHRvIC0+cXVpZXNjZSgpLCBzbyB3ZSBkb24ndCBuZWVkIHRoZSByZWZjb3VudCBhbnkgbW9yZS4KKyAqLworc3RhdGljIGludCBtZF9tYWtlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKIHsKLQliaW9faW9fZXJyb3IoYmlvKTsKLQlyZXR1cm4gMDsKKwltZGRldl90ICptZGRldiA9IHEtPnF1ZXVlZGF0YTsKKwlpbnQgcnY7CisJaWYgKG1kZGV2ID09IE5VTEwgfHwgbWRkZXYtPnBlcnMgPT0gTlVMTCkgeworCQliaW9faW9fZXJyb3IoYmlvKTsKKwkJcmV0dXJuIDA7CisJfQorCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAobWRkZXYtPnN1c3BlbmRlZCkgeworCQlERUZJTkVfV0FJVChfX3dhaXQpOworCQlmb3IgKDs7KSB7CisJCQlwcmVwYXJlX3RvX3dhaXQoJm1kZGV2LT5zYl93YWl0LCAmX193YWl0LAorCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQlpZiAoIW1kZGV2LT5zdXNwZW5kZWQpCisJCQkJYnJlYWs7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCXNjaGVkdWxlKCk7CisJCQlyY3VfcmVhZF9sb2NrKCk7CisJCX0KKwkJZmluaXNoX3dhaXQoJm1kZGV2LT5zYl93YWl0LCAmX193YWl0KTsKKwl9CisJYXRvbWljX2luYygmbWRkZXYtPmFjdGl2ZV9pbyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcnYgPSBtZGRldi0+cGVycy0+bWFrZV9yZXF1ZXN0KHEsIGJpbyk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1kZGV2LT5hY3RpdmVfaW8pICYmIG1kZGV2LT5zdXNwZW5kZWQpCisJCXdha2VfdXAoJm1kZGV2LT5zYl93YWl0KTsKKworCXJldHVybiBydjsKIH0KIAorc3RhdGljIHZvaWQgbWRkZXZfc3VzcGVuZChtZGRldl90ICptZGRldikKK3sKKwlCVUdfT04obWRkZXYtPnN1c3BlbmRlZCk7CisJbWRkZXYtPnN1c3BlbmRlZCA9IDE7CisJc3luY2hyb25pemVfcmN1KCk7CisJd2FpdF9ldmVudChtZGRldi0+c2Jfd2FpdCwgYXRvbWljX3JlYWQoJm1kZGV2LT5hY3RpdmVfaW8pID09IDApOworCW1kZGV2LT5wZXJzLT5xdWllc2NlKG1kZGV2LCAxKTsKKwltZF91bnJlZ2lzdGVyX3RocmVhZChtZGRldi0+dGhyZWFkKTsKKwltZGRldi0+dGhyZWFkID0gTlVMTDsKKwkvKiB3ZSBub3cga25vdyB0aGF0IG5vIGNvZGUgaXMgZXhlY3V0aW5nIGluIHRoZSBwZXJzb25hbGl0eSBtb2R1bGUsCisJICogZXhjZXB0IHBvc3NpYmx5IHRoZSB0YWlsIGVuZCBvZiBhIC0+YmlfZW5kX2lvIGZ1bmN0aW9uLCBidXQgdGhhdAorCSAqIGlzIGNlcnRhaW4gdG8gY29tcGxldGUgYmVmb3JlIHRoZSBtb2R1bGUgaGFzIGEgY2hhbmNlIHRvIGdldAorCSAqIHVubG9hZGVkCisJICovCit9CisKK3N0YXRpYyB2b2lkIG1kZGV2X3Jlc3VtZShtZGRldl90ICptZGRldikKK3sKKwltZGRldi0+c3VzcGVuZGVkID0gMDsKKwl3YWtlX3VwKCZtZGRldi0+c2Jfd2FpdCk7CisJbWRkZXYtPnBlcnMtPnF1aWVzY2UobWRkZXYsIDApOworfQorCisKIHN0YXRpYyBpbmxpbmUgbWRkZXZfdCAqbWRkZXZfZ2V0KG1kZGV2X3QgKm1kZGV2KQogewogCWF0b21pY19pbmMoJm1kZGV2LT5hY3RpdmUpOwpAQCAtMzEwLDYgKzM2NSw3IEBACiAJaW5pdF90aW1lcigmbmV3LT5zYWZlbW9kZV90aW1lcik7CiAJYXRvbWljX3NldCgmbmV3LT5hY3RpdmUsIDEpOwogCWF0b21pY19zZXQoJm5ldy0+b3BlbmVycywgMCk7CisJYXRvbWljX3NldCgmbmV3LT5hY3RpdmVfaW8sIDApOwogCXNwaW5fbG9ja19pbml0KCZuZXctPndyaXRlX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5ldy0+c2Jfd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbmV3LT5yZWNvdmVyeV93YWl0KTsKQEAgLTMyNiw2ICszODIsMTEgQEAKIAlyZXR1cm4gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZtZGRldi0+cmVjb25maWdfbXV0ZXgpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBtZGRldl9pc19sb2NrZWQobWRkZXZfdCAqbWRkZXYpCit7CisJcmV0dXJuIG11dGV4X2lzX2xvY2tlZCgmbWRkZXYtPnJlY29uZmlnX211dGV4KTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbWRkZXZfdHJ5bG9jayhtZGRldl90ICogbWRkZXYpCiB7CiAJcmV0dXJuIG11dGV4X3RyeWxvY2soJm1kZGV2LT5yZWNvbmZpZ19tdXRleCk7CkBAIC00MDksNyArNDcwLDcgQEAKIAkJcmRldi0+c2JfbG9hZGVkID0gMDsKIAkJcmRldi0+c2JfcGFnZSA9IE5VTEw7CiAJCXJkZXYtPnNiX3N0YXJ0ID0gMDsKLQkJcmRldi0+c2l6ZSA9IDA7CisJCXJkZXYtPnNlY3RvcnMgPSAwOwogCX0KIH0KIApAQCAtNzc1LDkgKzgzNiw5IEBACiAJCWVsc2UgCiAJCQlyZXQgPSAwOwogCX0KLQlyZGV2LT5zaXplID0gY2FsY19udW1fc2VjdG9ycyhyZGV2LCBzYi0+Y2h1bmtfc2l6ZSkgLyAyOworCXJkZXYtPnNlY3RvcnMgPSBjYWxjX251bV9zZWN0b3JzKHJkZXYsIHNiLT5jaHVua19zaXplKTsKIAotCWlmIChyZGV2LT5zaXplIDwgc2ItPnNpemUgJiYgc2ItPmxldmVsID4gMSkKKwlpZiAocmRldi0+c2VjdG9ycyA8IHNiLT5zaXplICogMiAmJiBzYi0+bGV2ZWwgPiAxKQogCQkvKiAidGhpcyBjYW5ub3QgcG9zc2libHkgaGFwcGVuIiAuLi4gKi8KIAkJcmV0ID0gLUVJTlZBTDsKIApAQCAtODEyLDcgKzg3Myw3IEBACiAJCW1kZGV2LT5jbGV2ZWxbMF0gPSAwOwogCQltZGRldi0+bGF5b3V0ID0gc2ItPmxheW91dDsKIAkJbWRkZXYtPnJhaWRfZGlza3MgPSBzYi0+cmFpZF9kaXNrczsKLQkJbWRkZXYtPnNpemUgPSBzYi0+c2l6ZTsKKwkJbWRkZXYtPmRldl9zZWN0b3JzID0gc2ItPnNpemUgKiAyOwogCQltZGRldi0+ZXZlbnRzID0gZXYxOwogCQltZGRldi0+Yml0bWFwX29mZnNldCA9IDA7CiAJCW1kZGV2LT5kZWZhdWx0X2JpdG1hcF9vZmZzZXQgPSBNRF9TQl9CWVRFUyA+PiA5OwpAQCAtOTI2LDcgKzk4Nyw3IEBACiAKIAlzYi0+Y3RpbWUgPSBtZGRldi0+Y3RpbWU7CiAJc2ItPmxldmVsID0gbWRkZXYtPmxldmVsOwotCXNiLT5zaXplICA9IG1kZGV2LT5zaXplOworCXNiLT5zaXplID0gbWRkZXYtPmRldl9zZWN0b3JzIC8gMjsKIAlzYi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOwogCXNiLT5tZF9taW5vciA9IG1kZGV2LT5tZF9taW5vcjsKIAlzYi0+bm90X3BlcnNpc3RlbnQgPSAwOwpAQCAtMTAyNCw3ICsxMDg1LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcKIHN1cGVyXzkwX3JkZXZfc2l6ZV9jaGFuZ2UobWRrX3JkZXZfdCAqcmRldiwgc2VjdG9yX3QgbnVtX3NlY3RvcnMpCiB7Ci0JaWYgKG51bV9zZWN0b3JzICYmIG51bV9zZWN0b3JzIDwgcmRldi0+bWRkZXYtPnNpemUgKiAyKQorCWlmIChudW1fc2VjdG9ycyAmJiBudW1fc2VjdG9ycyA8IHJkZXYtPm1kZGV2LT5kZXZfc2VjdG9ycykKIAkJcmV0dXJuIDA7IC8qIGNvbXBvbmVudCBtdXN0IGZpdCBkZXZpY2UgKi8KIAlpZiAocmRldi0+bWRkZXYtPmJpdG1hcF9vZmZzZXQpCiAJCXJldHVybiAwOyAvKiBjYW4ndCBtb3ZlIGJpdG1hcCAqLwpAQCAtMTE4MCwxNiArMTI0MSwxNyBAQAogCQkJcmV0ID0gMDsKIAl9CiAJaWYgKG1pbm9yX3ZlcnNpb24pCi0JCXJkZXYtPnNpemUgPSAoKHJkZXYtPmJkZXYtPmJkX2lub2RlLT5pX3NpemU+PjkpIC0gbGU2NF90b19jcHUoc2ItPmRhdGFfb2Zmc2V0KSkgLyAyOworCQlyZGV2LT5zZWN0b3JzID0gKHJkZXYtPmJkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gOSkgLQorCQkJbGU2NF90b19jcHUoc2ItPmRhdGFfb2Zmc2V0KTsKIAllbHNlCi0JCXJkZXYtPnNpemUgPSByZGV2LT5zYl9zdGFydCAvIDI7Ci0JaWYgKHJkZXYtPnNpemUgPCBsZTY0X3RvX2NwdShzYi0+ZGF0YV9zaXplKS8yKQorCQlyZGV2LT5zZWN0b3JzID0gcmRldi0+c2Jfc3RhcnQ7CisJaWYgKHJkZXYtPnNlY3RvcnMgPCBsZTY0X3RvX2NwdShzYi0+ZGF0YV9zaXplKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmRldi0+c2l6ZSA9IGxlNjRfdG9fY3B1KHNiLT5kYXRhX3NpemUpLzI7CisJcmRldi0+c2VjdG9ycyA9IGxlNjRfdG9fY3B1KHNiLT5kYXRhX3NpemUpOwogCWlmIChsZTMyX3RvX2NwdShzYi0+Y2h1bmtzaXplKSkKLQkJcmRldi0+c2l6ZSAmPSB+KChzZWN0b3JfdClsZTMyX3RvX2NwdShzYi0+Y2h1bmtzaXplKS8yIC0gMSk7CisJCXJkZXYtPnNlY3RvcnMgJj0gfigoc2VjdG9yX3QpbGUzMl90b19jcHUoc2ItPmNodW5rc2l6ZSkgLSAxKTsKIAotCWlmIChsZTY0X3RvX2NwdShzYi0+c2l6ZSkgPiByZGV2LT5zaXplKjIpCisJaWYgKGxlNjRfdG9fY3B1KHNiLT5zaXplKSA+IHJkZXYtPnNlY3RvcnMpCiAJCXJldHVybiAtRUlOVkFMOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMjE2LDcgKzEyNzgsNyBAQAogCQltZGRldi0+Y2xldmVsWzBdID0gMDsKIAkJbWRkZXYtPmxheW91dCA9IGxlMzJfdG9fY3B1KHNiLT5sYXlvdXQpOwogCQltZGRldi0+cmFpZF9kaXNrcyA9IGxlMzJfdG9fY3B1KHNiLT5yYWlkX2Rpc2tzKTsKLQkJbWRkZXYtPnNpemUgPSBsZTY0X3RvX2NwdShzYi0+c2l6ZSkvMjsKKwkJbWRkZXYtPmRldl9zZWN0b3JzID0gbGU2NF90b19jcHUoc2ItPnNpemUpOwogCQltZGRldi0+ZXZlbnRzID0gZXYxOwogCQltZGRldi0+Yml0bWFwX29mZnNldCA9IDA7CiAJCW1kZGV2LT5kZWZhdWx0X2JpdG1hcF9vZmZzZXQgPSAxMDI0ID4+IDk7CkBAIC0xMzEyLDcgKzEzNzQsNyBAQAogCXNiLT5jbnRfY29ycmVjdGVkX3JlYWQgPSBjcHVfdG9fbGUzMihhdG9taWNfcmVhZCgmcmRldi0+Y29ycmVjdGVkX2Vycm9ycykpOwogCiAJc2ItPnJhaWRfZGlza3MgPSBjcHVfdG9fbGUzMihtZGRldi0+cmFpZF9kaXNrcyk7Ci0Jc2ItPnNpemUgPSBjcHVfdG9fbGU2NChtZGRldi0+c2l6ZTw8MSk7CisJc2ItPnNpemUgPSBjcHVfdG9fbGU2NChtZGRldi0+ZGV2X3NlY3RvcnMpOwogCiAJaWYgKG1kZGV2LT5iaXRtYXAgJiYgbWRkZXYtPmJpdG1hcF9maWxlID09IE5VTEwpIHsKIAkJc2ItPmJpdG1hcF9vZmZzZXQgPSBjcHVfdG9fbGUzMigoX191MzIpbWRkZXYtPmJpdG1hcF9vZmZzZXQpOwpAQCAtMTMyMCwxMCArMTM4MiwxNSBAQAogCX0KIAogCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgotCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSAmJgotCSAgICByZGV2LT5yZWNvdmVyeV9vZmZzZXQgPiAwKSB7Ci0JCXNiLT5mZWF0dXJlX21hcCB8PSBjcHVfdG9fbGUzMihNRF9GRUFUVVJFX1JFQ09WRVJZX09GRlNFVCk7Ci0JCXNiLT5yZWNvdmVyeV9vZmZzZXQgPSBjcHVfdG9fbGU2NChyZGV2LT5yZWNvdmVyeV9vZmZzZXQpOworCSAgICAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgeworCQlpZiAobWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCA+IHJkZXYtPnJlY292ZXJ5X29mZnNldCkKKwkJCXJkZXYtPnJlY292ZXJ5X29mZnNldCA9IG1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQ7CisJCWlmIChyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPiAwKSB7CisJCQlzYi0+ZmVhdHVyZV9tYXAgfD0KKwkJCQljcHVfdG9fbGUzMihNRF9GRUFUVVJFX1JFQ09WRVJZX09GRlNFVCk7CisJCQlzYi0+cmVjb3Zlcnlfb2Zmc2V0ID0KKwkJCQljcHVfdG9fbGU2NChyZGV2LT5yZWNvdmVyeV9vZmZzZXQpOworCQl9CiAJfQogCiAJaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3RvcikgewpAQCAtMTM2NSw3ICsxNDMyLDcgQEAKIHsKIAlzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfMSAqc2I7CiAJc2VjdG9yX3QgbWF4X3NlY3RvcnM7Ci0JaWYgKG51bV9zZWN0b3JzICYmIG51bV9zZWN0b3JzIDwgcmRldi0+bWRkZXYtPnNpemUgKiAyKQorCWlmIChudW1fc2VjdG9ycyAmJiBudW1fc2VjdG9ycyA8IHJkZXYtPm1kZGV2LT5kZXZfc2VjdG9ycykKIAkJcmV0dXJuIDA7IC8qIGNvbXBvbmVudCBtdXN0IGZpdCBkZXZpY2UgKi8KIAlpZiAocmRldi0+c2Jfc3RhcnQgPCByZGV2LT5kYXRhX29mZnNldCkgewogCQkvKiBtaW5vciB2ZXJzaW9ucyAxIGFuZCAyOyBzdXBlcmJsb2NrIGJlZm9yZSBkYXRhICovCkBAIC0xMzgxLDcgKzE0NDgsNyBAQAogCQlzZWN0b3JfdCBzYl9zdGFydDsKIAkJc2Jfc3RhcnQgPSAocmRldi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiA5KSAtIDgqMjsKIAkJc2Jfc3RhcnQgJj0gfihzZWN0b3JfdCkoNCoyIC0gMSk7Ci0JCW1heF9zZWN0b3JzID0gcmRldi0+c2l6ZSAqIDIgKyBzYl9zdGFydCAtIHJkZXYtPnNiX3N0YXJ0OworCQltYXhfc2VjdG9ycyA9IHJkZXYtPnNlY3RvcnMgKyBzYl9zdGFydCAtIHJkZXYtPnNiX3N0YXJ0OwogCQlpZiAoIW51bV9zZWN0b3JzIHx8IG51bV9zZWN0b3JzID4gbWF4X3NlY3RvcnMpCiAJCQludW1fc2VjdG9ycyA9IG1heF9zZWN0b3JzOwogCQlyZGV2LT5zYl9zdGFydCA9IHNiX3N0YXJ0OwpAQCAtMTQzMyw2ICsxNTAwLDM4IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQocGVuZGluZ19yYWlkX2Rpc2tzKTsKIAorc3RhdGljIHZvaWQgbWRfaW50ZWdyaXR5X2NoZWNrKG1ka19yZGV2X3QgKnJkZXYsIG1kZGV2X3QgKm1kZGV2KQoreworCXN0cnVjdCBtZGtfcGVyc29uYWxpdHkgKnBlcnMgPSBtZGRldi0+cGVyczsKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IG1kZGV2LT5nZW5kaXNrOworCXN0cnVjdCBibGtfaW50ZWdyaXR5ICpiaV9yZGV2ID0gYmRldl9nZXRfaW50ZWdyaXR5KHJkZXYtPmJkZXYpOworCXN0cnVjdCBibGtfaW50ZWdyaXR5ICpiaV9tZGRldiA9IGJsa19nZXRfaW50ZWdyaXR5KGRpc2spOworCisJLyogRGF0YSBpbnRlZ3JpdHkgcGFzc3Rocm91Z2ggbm90IHN1cHBvcnRlZCBvbiBSQUlEIDQsIDUgYW5kIDYgKi8KKwlpZiAocGVycyAmJiBwZXJzLT5sZXZlbCA+PSA0ICYmIHBlcnMtPmxldmVsIDw9IDYpCisJCXJldHVybjsKKworCS8qIElmIHJkZXYgaXMgaW50ZWdyaXR5IGNhcGFibGUsIHJlZ2lzdGVyIHByb2ZpbGUgZm9yIG1kZGV2ICovCisJaWYgKCFiaV9tZGRldiAmJiBiaV9yZGV2KSB7CisJCWlmIChibGtfaW50ZWdyaXR5X3JlZ2lzdGVyKGRpc2ssIGJpX3JkZXYpKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgQ291bGQgbm90IHJlZ2lzdGVyIGludGVncml0eSFcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGRpc2stPmRpc2tfbmFtZSk7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX05PVElDRSAiRW5hYmxpbmcgZGF0YSBpbnRlZ3JpdHkgb24gJXNcbiIsCisJCQkgICAgICAgZGlzay0+ZGlza19uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCS8qIENoZWNrIHRoYXQgbWRkZXYgYW5kIHJkZXYgaGF2ZSBtYXRjaGluZyBwcm9maWxlcyAqLworCWlmIChibGtfaW50ZWdyaXR5X2NvbXBhcmUoZGlzaywgcmRldi0+YmRldi0+YmRfZGlzaykgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzLyVzIGludGVncml0eSBtaXNtYXRjaCFcbiIsIF9fZnVuY19fLAorCQkgICAgICAgZGlzay0+ZGlza19uYW1lLCByZGV2LT5iZGV2LT5iZF9kaXNrLT5kaXNrX25hbWUpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIkRpc2FibGluZyBkYXRhIGludGVncml0eSBvbiAlc1xuIiwKKwkJICAgICAgIGRpc2stPmRpc2tfbmFtZSk7CisJCWJsa19pbnRlZ3JpdHlfdW5yZWdpc3RlcihkaXNrKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgYmluZF9yZGV2X3RvX2FycmF5KG1ka19yZGV2X3QgKiByZGV2LCBtZGRldl90ICogbWRkZXYpCiB7CiAJY2hhciBiW0JERVZOQU1FX1NJWkVdOwpAQCAtMTQ0OSw4ICsxNTQ4LDkgQEAKIAlpZiAoZmluZF9yZGV2KG1kZGV2LCByZGV2LT5iZGV2LT5iZF9kZXYpKQogCQlyZXR1cm4gLUVFWElTVDsKIAotCS8qIG1ha2Ugc3VyZSByZGV2LT5zaXplIGV4Y2VlZHMgbWRkZXYtPnNpemUgKi8KLQlpZiAocmRldi0+c2l6ZSAmJiAobWRkZXYtPnNpemUgPT0gMCB8fCByZGV2LT5zaXplIDwgbWRkZXYtPnNpemUpKSB7CisJLyogbWFrZSBzdXJlIHJkZXYtPnNlY3RvcnMgZXhjZWVkcyBtZGRldi0+ZGV2X3NlY3RvcnMgKi8KKwlpZiAocmRldi0+c2VjdG9ycyAmJiAobWRkZXYtPmRldl9zZWN0b3JzID09IDAgfHwKKwkJCXJkZXYtPnNlY3RvcnMgPCBtZGRldi0+ZGV2X3NlY3RvcnMpKSB7CiAJCWlmIChtZGRldi0+cGVycykgewogCQkJLyogQ2Fubm90IGNoYW5nZSBzaXplLCBzbyBmYWlsCiAJCQkgKiBJZiBtZGRldi0+bGV2ZWwgPD0gMCwgdGhlbiB3ZSBkb24ndCBjYXJlCkBAIC0xNDU5LDcgKzE1NTksNyBAQAogCQkJaWYgKG1kZGV2LT5sZXZlbCA+IDApCiAJCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0gZWxzZQotCQkJbWRkZXYtPnNpemUgPSByZGV2LT5zaXplOworCQkJbWRkZXYtPmRldl9zZWN0b3JzID0gcmRldi0+c2VjdG9yczsKIAl9CiAKIAkvKiBWZXJpZnkgcmRldi0+ZGVzY19uciBpcyB1bmlxdWUuCkBAIC0xNTAzLDYgKzE2MDMsOCBAQAogCiAJLyogTWF5IGFzIHdlbGwgYWxsb3cgcmVjb3ZlcnkgdG8gYmUgcmV0cmllZCBvbmNlICovCiAJbWRkZXYtPnJlY292ZXJ5X2Rpc2FibGVkID0gMDsKKworCW1kX2ludGVncml0eV9jaGVjayhyZGV2LCBtZGRldik7CiAJcmV0dXJuIDA7CiAKICBmYWlsOgpAQCAtMTcxMyw4ICsxODE1LDggQEAKIHN0YXRpYyB2b2lkIHByaW50X3JkZXYobWRrX3JkZXZfdCAqcmRldiwgaW50IG1ham9yX3ZlcnNpb24pCiB7CiAJY2hhciBiW0JERVZOQU1FX1NJWkVdOwotCXByaW50ayhLRVJOX0lORk8gIm1kOiByZGV2ICVzLCBTWjolMDhsbHUgRjolZCBTOiVkIEROOiV1XG4iLAotCQliZGV2bmFtZShyZGV2LT5iZGV2LGIpLCAodW5zaWduZWQgbG9uZyBsb25nKXJkZXYtPnNpemUsCisJcHJpbnRrKEtFUk5fSU5GTyAibWQ6IHJkZXYgJXMsIFNlY3Q6JTA4bGx1IEY6JWQgUzolZCBETjoldVxuIiwKKwkJYmRldm5hbWUocmRldi0+YmRldiwgYiksICh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2VjdG9ycywKIAkgICAgICAgIHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSwgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSwKIAkgICAgICAgIHJkZXYtPmRlc2NfbnIpOwogCWlmIChyZGV2LT5zYl9sb2FkZWQpIHsKQEAgLTIxNTMsNyArMjI1NSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChyZGV2LT5tZGRldi0+cGVycyAmJiByZGV2LT5yYWlkX2Rpc2sgPj0gMCkKIAkJcmV0dXJuIC1FQlVTWTsKLQlpZiAocmRldi0+c2l6ZSAmJiByZGV2LT5tZGRldi0+ZXh0ZXJuYWwpCisJaWYgKHJkZXYtPnNlY3RvcnMgJiYgcmRldi0+bWRkZXYtPmV4dGVybmFsKQogCQkvKiBNdXN0IHNldCBvZmZzZXQgYmVmb3JlIHNpemUsIHNvIG92ZXJsYXAgY2hlY2tzCiAJCSAqIGNhbiBiZSBzYW5lICovCiAJCXJldHVybiAtRUJVU1k7CkBAIC0yMTY3LDcgKzIyNjksNyBAQAogc3RhdGljIHNzaXplX3QKIHJkZXZfc2l6ZV9zaG93KG1ka19yZGV2X3QgKnJkZXYsIGNoYXIgKnBhZ2UpCiB7Ci0JcmV0dXJuIHNwcmludGYocGFnZSwgIiVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2l6ZSk7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2VjdG9ycyAvIDIpOwogfQogCiBzdGF0aWMgaW50IG92ZXJsYXBzKHNlY3Rvcl90IHMxLCBzZWN0b3JfdCBsMSwgc2VjdG9yX3QgczIsIHNlY3Rvcl90IGwyKQpAQCAtMjE4MCwzNCArMjI4Miw1MiBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IHN0cmljdF9ibG9ja3NfdG9fc2VjdG9ycyhjb25zdCBjaGFyICpidWYsIHNlY3Rvcl90ICpzZWN0b3JzKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9ja3M7CisJc2VjdG9yX3QgbmV3OworCisJaWYgKHN0cmljdF9zdHJ0b3VsbChidWYsIDEwLCAmYmxvY2tzKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJsb2NrcyAmIDFVTEwgPDwgKDggKiBzaXplb2YoYmxvY2tzKSAtIDEpKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogc2VjdG9yIGNvbnZlcnNpb24gb3ZlcmZsb3cgKi8KKworCW5ldyA9IGJsb2NrcyAqIDI7CisJaWYgKG5ldyAhPSBibG9ja3MgKiAyKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogdW5zaWduZWQgbG9uZyBsb25nIHRvIHNlY3Rvcl90IG92ZXJmbG93ICovCisKKwkqc2VjdG9ycyA9IG5ldzsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHNzaXplX3QKIHJkZXZfc2l6ZV9zdG9yZShtZGtfcmRldl90ICpyZGV2LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNpemU7Ci0JdW5zaWduZWQgbG9uZyBsb25nIG9sZHNpemUgPSByZGV2LT5zaXplOwogCW1kZGV2X3QgKm15X21kZGV2ID0gcmRldi0+bWRkZXY7CisJc2VjdG9yX3Qgb2xkc2VjdG9ycyA9IHJkZXYtPnNlY3RvcnM7CisJc2VjdG9yX3Qgc2VjdG9yczsKIAotCWlmIChzdHJpY3Rfc3RydG91bGwoYnVmLCAxMCwgJnNpemUpIDwgMCkKKwlpZiAoc3RyaWN0X2Jsb2Nrc190b19zZWN0b3JzKGJ1ZiwgJnNlY3RvcnMpIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKG15X21kZGV2LT5wZXJzICYmIHJkZXYtPnJhaWRfZGlzayA+PSAwKSB7CiAJCWlmIChteV9tZGRldi0+cGVyc2lzdGVudCkgewotCQkJc2l6ZSA9IHN1cGVyX3R5cGVzW215X21kZGV2LT5tYWpvcl92ZXJzaW9uXS4KLQkJCQlyZGV2X3NpemVfY2hhbmdlKHJkZXYsIHNpemUgKiAyKTsKLQkJCWlmICghc2l6ZSkKKwkJCXNlY3RvcnMgPSBzdXBlcl90eXBlc1tteV9tZGRldi0+bWFqb3JfdmVyc2lvbl0uCisJCQkJcmRldl9zaXplX2NoYW5nZShyZGV2LCBzZWN0b3JzKTsKKwkJCWlmICghc2VjdG9ycykKIAkJCQlyZXR1cm4gLUVCVVNZOwotCQl9IGVsc2UgaWYgKCFzaXplKSB7Ci0JCQlzaXplID0gKHJkZXYtPmJkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gMTApOwotCQkJc2l6ZSAtPSByZGV2LT5kYXRhX29mZnNldC8yOwotCQl9CisJCX0gZWxzZSBpZiAoIXNlY3RvcnMpCisJCQlzZWN0b3JzID0gKHJkZXYtPmJkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gOSkgLQorCQkJCXJkZXYtPmRhdGFfb2Zmc2V0OwogCX0KLQlpZiAoc2l6ZSA8IG15X21kZGV2LT5zaXplKQorCWlmIChzZWN0b3JzIDwgbXlfbWRkZXYtPmRldl9zZWN0b3JzKQogCQlyZXR1cm4gLUVJTlZBTDsgLyogY29tcG9uZW50IG11c3QgZml0IGRldmljZSAqLwogCi0JcmRldi0+c2l6ZSA9IHNpemU7Ci0JaWYgKHNpemUgPiBvbGRzaXplICYmIG15X21kZGV2LT5leHRlcm5hbCkgeworCXJkZXYtPnNlY3RvcnMgPSBzZWN0b3JzOworCWlmIChzZWN0b3JzID4gb2xkc2VjdG9ycyAmJiBteV9tZGRldi0+ZXh0ZXJuYWwpIHsKIAkJLyogbmVlZCB0byBjaGVjayB0aGF0IGFsbCBvdGhlciByZGV2cyB3aXRoIHRoZSBzYW1lIC0+YmRldgogCQkgKiBkbyBub3Qgb3ZlcmxhcC4gIFdlIG5lZWQgdG8gdW5sb2NrIHRoZSBtZGRldiB0byBhdm9pZAotCQkgKiBhIGRlYWRsb2NrLiAgV2UgaGF2ZSBhbHJlYWR5IGNoYW5nZWQgcmRldi0+c2l6ZSwgYW5kIGlmCisJCSAqIGEgZGVhZGxvY2suICBXZSBoYXZlIGFscmVhZHkgY2hhbmdlZCByZGV2LT5zZWN0b3JzLCBhbmQgaWYKIAkJICogd2UgaGF2ZSB0byBjaGFuZ2UgaXQgYmFjaywgd2Ugd2lsbCBoYXZlIHRoZSBsb2NrIGFnYWluLgogCQkgKi8KIAkJbWRkZXZfdCAqbWRkZXY7CkBAIC0yMjIzLDkgKzIzNDMsOSBAQAogCQkJCWlmICh0ZXN0X2JpdChBbGxSZXNlcnZlZCwgJnJkZXYyLT5mbGFncykgfHwKIAkJCQkgICAgKHJkZXYtPmJkZXYgPT0gcmRldjItPmJkZXYgJiYKIAkJCQkgICAgIHJkZXYgIT0gcmRldjIgJiYKLQkJCQkgICAgIG92ZXJsYXBzKHJkZXYtPmRhdGFfb2Zmc2V0LCByZGV2LT5zaXplICogMiwKKwkJCQkgICAgIG92ZXJsYXBzKHJkZXYtPmRhdGFfb2Zmc2V0LCByZGV2LT5zZWN0b3JzLAogCQkJCQkgICAgICByZGV2Mi0+ZGF0YV9vZmZzZXQsCi0JCQkJCSAgICAgIHJkZXYyLT5zaXplICogMikpKSB7CisJCQkJCSAgICAgIHJkZXYyLT5zZWN0b3JzKSkpIHsKIAkJCQkJb3ZlcmxhcCA9IDE7CiAJCQkJCWJyZWFrOwogCQkJCX0KQEAgLTIyMzksMTEgKzIzNTksMTEgQEAKIAkJaWYgKG92ZXJsYXApIHsKIAkJCS8qIFNvbWVvbmUgZWxzZSBjb3VsZCBoYXZlIHNsaXBwZWQgaW4gYSBzaXplCiAJCQkgKiBjaGFuZ2UgaGVyZSwgYnV0IGRvaW5nIHNvIGlzIGp1c3Qgc2lsbHkuCi0JCQkgKiBXZSBwdXQgb2xkc2l6ZSBiYWNrIGJlY2F1c2Ugd2UgKmtub3cqIGl0IGlzCisJCQkgKiBXZSBwdXQgb2xkc2VjdG9ycyBiYWNrIGJlY2F1c2Ugd2UgKmtub3cqIGl0IGlzCiAJCQkgKiBzYWZlLCBhbmQgdHJ1c3QgdXNlcnNwYWNlIG5vdCB0byByYWNlIHdpdGgKIAkJCSAqIGl0c2VsZgogCQkJICovCi0JCQlyZGV2LT5zaXplID0gb2xkc2l6ZTsKKwkJCXJkZXYtPnNlY3RvcnMgPSBvbGRzZWN0b3JzOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCX0KQEAgLTI1NDcsMTggKzI2NjcsMTAxIEBACiBzdGF0aWMgc3NpemVfdAogbGV2ZWxfc3RvcmUobWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKKwljaGFyIGxldmVsWzE2XTsKIAlzc2l6ZV90IHJ2ID0gbGVuOwotCWlmIChtZGRldi0+cGVycykKKwlzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5ICpwZXJzOworCXZvaWQgKnByaXY7CisKKwlpZiAobWRkZXYtPnBlcnMgPT0gTlVMTCkgeworCQlpZiAobGVuID09IDApCisJCQlyZXR1cm4gMDsKKwkJaWYgKGxlbiA+PSBzaXplb2YobWRkZXYtPmNsZXZlbCkpCisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJc3RybmNweShtZGRldi0+Y2xldmVsLCBidWYsIGxlbik7CisJCWlmIChtZGRldi0+Y2xldmVsW2xlbi0xXSA9PSAnXG4nKQorCQkJbGVuLS07CisJCW1kZGV2LT5jbGV2ZWxbbGVuXSA9IDA7CisJCW1kZGV2LT5sZXZlbCA9IExFVkVMX05PTkU7CisJCXJldHVybiBydjsKKwl9CisKKwkvKiByZXF1ZXN0IHRvIGNoYW5nZSB0aGUgcGVyc29uYWxpdHkuICBOZWVkIHRvIGVuc3VyZToKKwkgKiAgLSBhcnJheSBpcyBub3QgZW5nYWdlZCBpbiByZXN5bmMvcmVjb3ZlcnkvcmVzaGFwZQorCSAqICAtIG9sZCBwZXJzb25hbGl0eSBjYW4gYmUgc3VzcGVuZGVkCisJICogIC0gbmV3IHBlcnNvbmFsaXR5IHdpbGwgYWNjZXNzIG90aGVyIGFycmF5LgorCSAqLworCisJaWYgKG1kZGV2LT5zeW5jX3RocmVhZCB8fCBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpCiAJCXJldHVybiAtRUJVU1k7Ci0JaWYgKGxlbiA9PSAwKQotCQlyZXR1cm4gMDsKLQlpZiAobGVuID49IHNpemVvZihtZGRldi0+Y2xldmVsKSkKLQkJcmV0dXJuIC1FTk9TUEM7Ci0Jc3RybmNweShtZGRldi0+Y2xldmVsLCBidWYsIGxlbik7Ci0JaWYgKG1kZGV2LT5jbGV2ZWxbbGVuLTFdID09ICdcbicpCisKKwlpZiAoIW1kZGV2LT5wZXJzLT5xdWllc2NlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1kOiAlczogJXMgZG9lcyBub3Qgc3VwcG9ydCBvbmxpbmUgcGVyc29uYWxpdHkgY2hhbmdlXG4iLAorCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgbWRkZXYtPnBlcnMtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBOb3cgZmluZCB0aGUgbmV3IHBlcnNvbmFsaXR5ICovCisJaWYgKGxlbiA9PSAwIHx8IGxlbiA+PSBzaXplb2YobGV2ZWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJuY3B5KGxldmVsLCBidWYsIGxlbik7CisJaWYgKGxldmVsW2xlbi0xXSA9PSAnXG4nKQogCQlsZW4tLTsKLQltZGRldi0+Y2xldmVsW2xlbl0gPSAwOwotCW1kZGV2LT5sZXZlbCA9IExFVkVMX05PTkU7CisJbGV2ZWxbbGVuXSA9IDA7CisKKwlyZXF1ZXN0X21vZHVsZSgibWQtJXMiLCBsZXZlbCk7CisJc3Bpbl9sb2NrKCZwZXJzX2xvY2spOworCXBlcnMgPSBmaW5kX3BlcnMoTEVWRUxfTk9ORSwgbGV2ZWwpOworCWlmICghcGVycyB8fCAhdHJ5X21vZHVsZV9nZXQocGVycy0+b3duZXIpKSB7CisJCXNwaW5fdW5sb2NrKCZwZXJzX2xvY2spOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZDogcGVyc29uYWxpdHkgJXMgbm90IGxvYWRlZFxuIiwgbGV2ZWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc3Bpbl91bmxvY2soJnBlcnNfbG9jayk7CisKKwlpZiAocGVycyA9PSBtZGRldi0+cGVycykgeworCQkvKiBOb3RoaW5nIHRvIGRvISAqLworCQltb2R1bGVfcHV0KHBlcnMtPm93bmVyKTsKKwkJcmV0dXJuIHJ2OworCX0KKwlpZiAoIXBlcnMtPnRha2VvdmVyKSB7CisJCW1vZHVsZV9wdXQocGVycy0+b3duZXIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZDogJXM6ICVzIGRvZXMgbm90IHN1cHBvcnQgcGVyc29uYWxpdHkgdGFrZW92ZXJcbiIsCisJCSAgICAgICBtZG5hbWUobWRkZXYpLCBsZXZlbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIC0+dGFrZW92ZXIgbXVzdCBzZXQgbmV3XyogYW5kL29yIGRlbHRhX2Rpc2tzCisJICogaWYgaXQgc3VjY2VlZHMsIGFuZCBtYXkgc2V0IHRoZW0gd2hlbiBpdCBmYWlscy4KKwkgKi8KKwlwcml2ID0gcGVycy0+dGFrZW92ZXIobWRkZXYpOworCWlmIChJU19FUlIocHJpdikpIHsKKwkJbWRkZXYtPm5ld19sZXZlbCA9IG1kZGV2LT5sZXZlbDsKKwkJbWRkZXYtPm5ld19sYXlvdXQgPSBtZGRldi0+bGF5b3V0OworCQltZGRldi0+bmV3X2NodW5rID0gbWRkZXYtPmNodW5rX3NpemU7CisJCW1kZGV2LT5yYWlkX2Rpc2tzIC09IG1kZGV2LT5kZWx0YV9kaXNrczsKKwkJbWRkZXYtPmRlbHRhX2Rpc2tzID0gMDsKKwkJbW9kdWxlX3B1dChwZXJzLT5vd25lcik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1kOiAlczogJXMgd291bGQgbm90IGFjY2VwdCBhcnJheVxuIiwKKwkJICAgICAgIG1kbmFtZShtZGRldiksIGxldmVsKTsKKwkJcmV0dXJuIFBUUl9FUlIocHJpdik7CisJfQorCisJLyogTG9va3MgbGlrZSB3ZSBoYXZlIGEgd2lubmVyICovCisJbWRkZXZfc3VzcGVuZChtZGRldik7CisJbWRkZXYtPnBlcnMtPnN0b3AobWRkZXYpOworCW1vZHVsZV9wdXQobWRkZXYtPnBlcnMtPm93bmVyKTsKKwltZGRldi0+cGVycyA9IHBlcnM7CisJbWRkZXYtPnByaXZhdGUgPSBwcml2OworCXN0cmxjcHkobWRkZXYtPmNsZXZlbCwgcGVycy0+bmFtZSwgc2l6ZW9mKG1kZGV2LT5jbGV2ZWwpKTsKKwltZGRldi0+bGV2ZWwgPSBtZGRldi0+bmV3X2xldmVsOworCW1kZGV2LT5sYXlvdXQgPSBtZGRldi0+bmV3X2xheW91dDsKKwltZGRldi0+Y2h1bmtfc2l6ZSA9IG1kZGV2LT5uZXdfY2h1bms7CisJbWRkZXYtPmRlbHRhX2Rpc2tzID0gMDsKKwlwZXJzLT5ydW4obWRkZXYpOworCW1kZGV2X3Jlc3VtZShtZGRldik7CisJc2V0X2JpdChNRF9DSEFOR0VfREVWUywgJm1kZGV2LT5mbGFncyk7CisJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOworCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAJcmV0dXJuIHJ2OwogfQogCkBAIC0yNTg2LDEyICsyNzg5LDE4IEBACiAJaWYgKCEqYnVmIHx8ICgqZSAmJiAqZSAhPSAnXG4nKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAobWRkZXYtPnBlcnMpCi0JCXJldHVybiAtRUJVU1k7Ci0JaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3RvcikKKwlpZiAobWRkZXYtPnBlcnMpIHsKKwkJaW50IGVycjsKKwkJaWYgKG1kZGV2LT5wZXJzLT5yZWNvbmZpZyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJZXJyID0gbWRkZXYtPnBlcnMtPnJlY29uZmlnKG1kZGV2LCBuLCAtMSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CiAJCW1kZGV2LT5uZXdfbGF5b3V0ID0gbjsKLQllbHNlCi0JCW1kZGV2LT5sYXlvdXQgPSBuOworCQlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yKQorCQkJbWRkZXYtPmxheW91dCA9IG47CisJfQogCXJldHVybiBsZW47CiB9CiBzdGF0aWMgc3RydWN0IG1kX3N5c2ZzX2VudHJ5IG1kX2xheW91dCA9CkBAIC0yNjQ4LDE5ICsyODU3LDI0IEBACiBzdGF0aWMgc3NpemVfdAogY2h1bmtfc2l6ZV9zdG9yZShtZGRldl90ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewotCS8qIGNhbiBvbmx5IHNldCBjaHVua19zaXplIGlmIGFycmF5IGlzIG5vdCB5ZXQgYWN0aXZlICovCiAJY2hhciAqZTsKIAl1bnNpZ25lZCBsb25nIG4gPSBzaW1wbGVfc3RydG91bChidWYsICZlLCAxMCk7CiAKIAlpZiAoISpidWYgfHwgKCplICYmICplICE9ICdcbicpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChtZGRldi0+cGVycykKLQkJcmV0dXJuIC1FQlVTWTsKLQllbHNlIGlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiAhPSBNYXhTZWN0b3IpCisJaWYgKG1kZGV2LT5wZXJzKSB7CisJCWludCBlcnI7CisJCWlmIChtZGRldi0+cGVycy0+cmVjb25maWcgPT0gTlVMTCkKKwkJCXJldHVybiAtRUJVU1k7CisJCWVyciA9IG1kZGV2LT5wZXJzLT5yZWNvbmZpZyhtZGRldiwgLTEsIG4pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgewogCQltZGRldi0+bmV3X2NodW5rID0gbjsKLQllbHNlCi0JCW1kZGV2LT5jaHVua19zaXplID0gbjsKKwkJaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvcikKKwkJCW1kZGV2LT5jaHVua19zaXplID0gbjsKKwl9CiAJcmV0dXJuIGxlbjsKIH0KIHN0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgbWRfY2h1bmtfc2l6ZSA9CkBAIC0yNjY5LDYgKzI4ODMsOCBAQAogc3RhdGljIHNzaXplX3QKIHJlc3luY19zdGFydF9zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQogeworCWlmIChtZGRldi0+cmVjb3ZlcnlfY3AgPT0gTWF4U2VjdG9yKQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAibm9uZVxuIik7CiAJcmV0dXJuIHNwcmludGYocGFnZSwgIiVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbWRkZXYtPnJlY292ZXJ5X2NwKTsKIH0KIApAQCAtMjc2Niw3ICsyOTgyLDcgQEAKIAllbHNlIHsKIAkJaWYgKGxpc3RfZW1wdHkoJm1kZGV2LT5kaXNrcykgJiYKIAkJICAgIG1kZGV2LT5yYWlkX2Rpc2tzID09IDAgJiYKLQkJICAgIG1kZGV2LT5zaXplID09IDApCisJCSAgICBtZGRldi0+ZGV2X3NlY3RvcnMgPT0gMCkKIAkJCXN0ID0gY2xlYXI7CiAJCWVsc2UKIAkJCXN0ID0gaW5hY3RpdmU7CkBAIC0yOTczLDcgKzMxODksOCBAQAogc3RhdGljIHNzaXplX3QKIHNpemVfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKIHsKLQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyltZGRldi0+c2l6ZSk7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVsbHVcbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpbWRkZXYtPmRldl9zZWN0b3JzIC8gMik7CiB9CiAKIHN0YXRpYyBpbnQgdXBkYXRlX3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IG51bV9zZWN0b3JzKTsKQEAgLTI5ODUsMjAgKzMyMDIsMTggQEAKIAkgKiBub3QgaW5jcmVhc2UgaXQgKGV4Y2VwdCBmcm9tIDApLgogCSAqIElmIGFycmF5IGlzIGFjdGl2ZSwgd2UgY2FuIHRyeSBhbiBvbi1saW5lIHJlc2l6ZQogCSAqLwotCWNoYXIgKmU7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHNpemUgPSBzaW1wbGVfc3RydG91bGwoYnVmLCAmZSwgMTApOwotCWlmICghKmJ1ZiB8fCAqYnVmID09ICdcbicgfHwKLQkgICAgKCplICYmICplICE9ICdcbicpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlzZWN0b3JfdCBzZWN0b3JzOworCWludCBlcnIgPSBzdHJpY3RfYmxvY2tzX3RvX3NlY3RvcnMoYnVmLCAmc2VjdG9ycyk7CiAKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAobWRkZXYtPnBlcnMpIHsKLQkJZXJyID0gdXBkYXRlX3NpemUobWRkZXYsIHNpemUgKiAyKTsKKwkJZXJyID0gdXBkYXRlX3NpemUobWRkZXYsIHNlY3RvcnMpOwogCQltZF91cGRhdGVfc2IobWRkZXYsIDEpOwogCX0gZWxzZSB7Ci0JCWlmIChtZGRldi0+c2l6ZSA9PSAwIHx8Ci0JCSAgICBtZGRldi0+c2l6ZSA+IHNpemUpCi0JCQltZGRldi0+c2l6ZSA9IHNpemU7CisJCWlmIChtZGRldi0+ZGV2X3NlY3RvcnMgPT0gMCB8fAorCQkgICAgbWRkZXYtPmRldl9zZWN0b3JzID4gc2VjdG9ycykKKwkJCW1kZGV2LT5kZXZfc2VjdG9ycyA9IHNlY3RvcnM7CiAJCWVsc2UKIAkJCWVyciA9IC1FTk9TUEM7CiAJfQpAQCAtMzI1MSw2ICszNDY2LDggQEAKIHN5bmNfc3BlZWRfc2hvdyhtZGRldl90ICptZGRldiwgY2hhciAqcGFnZSkKIHsKIAl1bnNpZ25lZCBsb25nIHJlc3luYywgZHQsIGRiOworCWlmIChtZGRldi0+Y3Vycl9yZXN5bmMgPT0gMCkKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIm5vbmVcbiIpOwogCXJlc3luYyA9IG1kZGV2LT5jdXJyX21hcmtfY250IC0gYXRvbWljX3JlYWQoJm1kZGV2LT5yZWNvdmVyeV9hY3RpdmUpOwogCWR0ID0gKGppZmZpZXMgLSBtZGRldi0+cmVzeW5jX21hcmspIC8gSFo7CiAJaWYgKCFkdCkgZHQrKzsKQEAgLTMyNjMsMTUgKzM0ODAsMTUgQEAKIHN0YXRpYyBzc2l6ZV90CiBzeW5jX2NvbXBsZXRlZF9zaG93KG1kZGV2X3QgKm1kZGV2LCBjaGFyICpwYWdlKQogewotCXVuc2lnbmVkIGxvbmcgbWF4X2Jsb2NrcywgcmVzeW5jOworCXVuc2lnbmVkIGxvbmcgbWF4X3NlY3RvcnMsIHJlc3luYzsKIAogCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSkKLQkJbWF4X2Jsb2NrcyA9IG1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnM7CisJCW1heF9zZWN0b3JzID0gbWRkZXYtPnJlc3luY19tYXhfc2VjdG9yczsKIAllbHNlCi0JCW1heF9ibG9ja3MgPSBtZGRldi0+c2l6ZSA8PCAxOworCQltYXhfc2VjdG9ycyA9IG1kZGV2LT5kZXZfc2VjdG9yczsKIAogCXJlc3luYyA9IChtZGRldi0+Y3Vycl9yZXN5bmMgLSBhdG9taWNfcmVhZCgmbWRkZXYtPnJlY292ZXJ5X2FjdGl2ZSkpOwotCXJldHVybiBzcHJpbnRmKHBhZ2UsICIlbHUgLyAlbHVcbiIsIHJlc3luYywgbWF4X2Jsb2Nrcyk7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVsdSAvICVsdVxuIiwgcmVzeW5jLCBtYXhfc2VjdG9ycyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgbWRfc3luY19jb21wbGV0ZWQgPSBfX0FUVFJfUk8oc3luY19jb21wbGV0ZWQpOwpAQCAtMzQzMSw2ICszNjQ4LDU3IEBACiBfX0FUVFIocmVzaGFwZV9wb3NpdGlvbiwgU19JUlVHT3xTX0lXVVNSLCByZXNoYXBlX3Bvc2l0aW9uX3Nob3csCiAgICAgICAgcmVzaGFwZV9wb3NpdGlvbl9zdG9yZSk7CiAKK3N0YXRpYyBzc2l6ZV90CithcnJheV9zaXplX3Nob3cobWRkZXZfdCAqbWRkZXYsIGNoYXIgKnBhZ2UpCit7CisJaWYgKG1kZGV2LT5leHRlcm5hbF9zaXplKQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJWxsdVxuIiwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW1kZGV2LT5hcnJheV9zZWN0b3JzLzIpOworCWVsc2UKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgImRlZmF1bHRcbiIpOworfQorCitzdGF0aWMgc3NpemVfdAorYXJyYXlfc2l6ZV9zdG9yZShtZGRldl90ICptZGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXNlY3Rvcl90IHNlY3RvcnM7CisKKwlpZiAoc3RybmNtcChidWYsICJkZWZhdWx0IiwgNykgPT0gMCkgeworCQlpZiAobWRkZXYtPnBlcnMpCisJCQlzZWN0b3JzID0gbWRkZXYtPnBlcnMtPnNpemUobWRkZXYsIDAsIDApOworCQllbHNlCisJCQlzZWN0b3JzID0gbWRkZXYtPmFycmF5X3NlY3RvcnM7CisKKwkJbWRkZXYtPmV4dGVybmFsX3NpemUgPSAwOworCX0gZWxzZSB7CisJCWlmIChzdHJpY3RfYmxvY2tzX3RvX3NlY3RvcnMoYnVmLCAmc2VjdG9ycykgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChtZGRldi0+cGVycyAmJiBtZGRldi0+cGVycy0+c2l6ZShtZGRldiwgMCwgMCkgPCBzZWN0b3JzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWRkZXYtPmV4dGVybmFsX3NpemUgPSAxOworCX0KKworCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gc2VjdG9yczsKKwlzZXRfY2FwYWNpdHkobWRkZXYtPmdlbmRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKKwlpZiAobWRkZXYtPnBlcnMpIHsKKwkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGJkZ2V0X2Rpc2sobWRkZXYtPmdlbmRpc2ssIDApOworCisJCWlmIChiZGV2KSB7CisJCQltdXRleF9sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7CisJCQlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsCisJCQkJICAgICAobG9mZl90KW1kZGV2LT5hcnJheV9zZWN0b3JzIDw8IDkpOworCQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7CisJCQliZHB1dChiZGV2KTsKKwkJfQorCX0KKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgbWRfYXJyYXlfc2l6ZSA9CitfX0FUVFIoYXJyYXlfc2l6ZSwgU19JUlVHT3xTX0lXVVNSLCBhcnJheV9zaXplX3Nob3csCisgICAgICAgYXJyYXlfc2l6ZV9zdG9yZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptZF9kZWZhdWx0X2F0dHJzW10gPSB7CiAJJm1kX2xldmVsLmF0dHIsCkBAIC0zNDQ0LDYgKzM3MTIsNyBAQAogCSZtZF9zYWZlX2RlbGF5LmF0dHIsCiAJJm1kX2FycmF5X3N0YXRlLmF0dHIsCiAJJm1kX3Jlc2hhcGVfcG9zaXRpb24uYXR0ciwKKwkmbWRfYXJyYXlfc2l6ZS5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0zNjAyLDEwICszODcxLDEyIEBACiAJCW1kZGV2X3B1dChtZGRldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwltZGRldi0+cXVldWUtPnF1ZXVlZGF0YSA9IG1kZGV2OworCiAJLyogQ2FuIGJlIHVubG9ja2VkIGJlY2F1c2UgdGhlIHF1ZXVlIGlzIG5ldzogbm8gY29uY3VycmVuY3kgKi8KIAlxdWV1ZV9mbGFnX3NldF91bmxvY2tlZChRVUVVRV9GTEFHX0NMVVNURVIsIG1kZGV2LT5xdWV1ZSk7CiAKLQlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KG1kZGV2LT5xdWV1ZSwgbWRfZmFpbF9yZXF1ZXN0KTsKKwlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KG1kZGV2LT5xdWV1ZSwgbWRfbWFrZV9yZXF1ZXN0KTsKIAogCWRpc2sgPSBhbGxvY19kaXNrKDEgPDwgc2hpZnQpOwogCWlmICghZGlzaykgewpAQCAtMzczMSwxMyArNDAwMiwxMyBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCQlpZiAodGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKHJkZXYtPnNpemUgPCBjaHVua19zaXplIC8gMTAyNCkgeworCQkJaWYgKHJkZXYtPnNlY3RvcnMgPCBjaHVua19zaXplIC8gNTEyKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJCQkibWQ6IERldiAlcyBzbWFsbGVyIHRoYW4gY2h1bmtfc2l6ZToiCi0JCQkJCSIgJWxsdWsgPCAlZGtcbiIsCisJCQkJCSIgJWxsdSA8ICVkXG4iLAogCQkJCQliZGV2bmFtZShyZGV2LT5iZGV2LGIpLAotCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJkZXYtPnNpemUsCi0JCQkJCWNodW5rX3NpemUgLyAxMDI0KTsKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2LT5zZWN0b3JzLAorCQkJCQljaHVua19zaXplIC8gNTEyKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfQpAQCAtMzc2MSwxMSArNDAzMiwxMSBAQAogCiAJCS8qIHBlcmZvcm0gc29tZSBjb25zaXN0ZW5jeSB0ZXN0cyBvbiB0aGUgZGV2aWNlLgogCQkgKiBXZSBkb24ndCB3YW50IHRoZSBkYXRhIHRvIG92ZXJsYXAgdGhlIG1ldGFkYXRhLAotCQkgKiBJbnRlcm5hbCBCaXRtYXAgaXNzdWVzIGhhcyBoYW5kbGVkIGVsc2V3aGVyZS4KKwkJICogSW50ZXJuYWwgQml0bWFwIGlzc3VlcyBoYXZlIGJlZW4gaGFuZGxlZCBlbHNld2hlcmUuCiAJCSAqLwogCQlpZiAocmRldi0+ZGF0YV9vZmZzZXQgPCByZGV2LT5zYl9zdGFydCkgewotCQkJaWYgKG1kZGV2LT5zaXplICYmCi0JCQkgICAgcmRldi0+ZGF0YV9vZmZzZXQgKyBtZGRldi0+c2l6ZSoyCisJCQlpZiAobWRkZXYtPmRldl9zZWN0b3JzICYmCisJCQkgICAgcmRldi0+ZGF0YV9vZmZzZXQgKyBtZGRldi0+ZGV2X3NlY3RvcnMKIAkJCSAgICA+IHJkZXYtPnNiX3N0YXJ0KSB7CiAJCQkJcHJpbnRrKCJtZDogJXM6IGRhdGEgb3ZlcmxhcHMgbWV0YWRhdGFcbiIsCiAJCQkJICAgICAgIG1kbmFtZShtZGRldikpOwpAQCAtMzgwMSw5ICs0MDcyLDE2IEBACiAJfQogCW1kZGV2LT5wZXJzID0gcGVyczsKIAlzcGluX3VubG9jaygmcGVyc19sb2NrKTsKLQltZGRldi0+bGV2ZWwgPSBwZXJzLT5sZXZlbDsKKwlpZiAobWRkZXYtPmxldmVsICE9IHBlcnMtPmxldmVsKSB7CisJCW1kZGV2LT5sZXZlbCA9IHBlcnMtPmxldmVsOworCQltZGRldi0+bmV3X2xldmVsID0gcGVycy0+bGV2ZWw7CisJfQogCXN0cmxjcHkobWRkZXYtPmNsZXZlbCwgcGVycy0+bmFtZSwgc2l6ZW9mKG1kZGV2LT5jbGV2ZWwpKTsKIAorCWlmIChwZXJzLT5sZXZlbCA+PSA0ICYmIHBlcnMtPmxldmVsIDw9IDYpCisJCS8qIENhbm5vdCBzdXBwb3J0IGludGVncml0eSAoeWV0KSAqLworCQlibGtfaW50ZWdyaXR5X3VucmVnaXN0ZXIobWRkZXYtPmdlbmRpc2spOworCiAJaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3RvciAmJgogCSAgICBwZXJzLT5zdGFydF9yZXNoYXBlID09IE5VTEwpIHsKIAkJLyogVGhpcyBwZXJzb25hbGl0eSBjYW5ub3QgaGFuZGxlIHJlc2hhcGluZy4uLiAqLwpAQCAtMzg0Myw3ICs0MTIxLDkgQEAKIAl9CiAKIAltZGRldi0+cmVjb3ZlcnkgPSAwOwotCW1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSA8PCAxOyAvKiBtYXkgYmUgb3Zlci1yaWRkZW4gYnkgcGVyc29uYWxpdHkgKi8KKwkvKiBtYXkgYmUgb3Zlci1yaWRkZW4gYnkgcGVyc29uYWxpdHkgKi8KKwltZGRldi0+cmVzeW5jX21heF9zZWN0b3JzID0gbWRkZXYtPmRldl9zZWN0b3JzOworCiAJbWRkZXYtPmJhcnJpZXJzX3dvcmsgPSAxOwogCW1kZGV2LT5va19zdGFydF9kZWdyYWRlZCA9IHN0YXJ0X2RpcnR5X2RlZ3JhZGVkOwogCkBAIC0zODUzLDcgKzQxMzMsMTcgQEAKIAllcnIgPSBtZGRldi0+cGVycy0+cnVuKG1kZGV2KTsKIAlpZiAoZXJyKQogCQlwcmludGsoS0VSTl9FUlIgIm1kOiBwZXJzLT5ydW4oKSBmYWlsZWQgLi4uXG4iKTsKLQllbHNlIGlmIChtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KSB7CisJZWxzZSBpZiAobWRkZXYtPnBlcnMtPnNpemUobWRkZXYsIDAsIDApIDwgbWRkZXYtPmFycmF5X3NlY3RvcnMpIHsKKwkJV0FSTl9PTkNFKCFtZGRldi0+ZXh0ZXJuYWxfc2l6ZSwgIiVzOiBkZWZhdWx0IHNpemUgdG9vIHNtYWxsLCIKKwkJCSAgIiBidXQgJ2V4dGVybmFsX3NpemUnIG5vdCBpbiBlZmZlY3Q/XG4iLCBfX2Z1bmNfXyk7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm1kOiBpbnZhbGlkIGFycmF5X3NpemUgJWxsdSA+IGRlZmF1bHQgc2l6ZSAlbGx1XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyltZGRldi0+YXJyYXlfc2VjdG9ycyAvIDIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW1kZGV2LT5wZXJzLT5zaXplKG1kZGV2LCAwLCAwKSAvIDIpOworCQllcnIgPSAtRUlOVkFMOworCQltZGRldi0+cGVycy0+c3RvcChtZGRldik7CisJfQorCWlmIChlcnIgPT0gMCAmJiBtZGRldi0+cGVycy0+c3luY19yZXF1ZXN0KSB7CiAJCWVyciA9IGJpdG1hcF9jcmVhdGUobWRkZXYpOwogCQlpZiAoZXJyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gY3JlYXRlIGJpdG1hcCAoJWQpXG4iLApAQCAtMzg5OSwxNiArNDE4OSw2IEBACiAKIAlzZXRfY2FwYWNpdHkoZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwogCi0JLyogSWYgd2UgY2FsbCBibGtfcXVldWVfbWFrZV9yZXF1ZXN0IGhlcmUsIGl0IHdpbGwKLQkgKiByZS1pbml0aWFsaXNlIG1heF9zZWN0b3JzIGV0YyB3aGljaCBtYXkgaGF2ZSBiZWVuCi0JICogcmVmaW5lZCBpbnNpZGUgLT4gcnVuLiAgU28ganVzdCBzZXQgdGhlIGJpdHMgd2UgbmVlZCB0byBzZXQuCi0JICogTW9zdCBpbml0aWFsaXNhdGlvbiBoYXBwZW5kZWQgd2hlbiB3ZSBjYWxsZWQKLQkgKiBibGtfcXVldWVfbWFrZV9yZXF1ZXN0KC4uLiwgbWRfZmFpbF9yZXF1ZXN0KQotCSAqIGVhcmxpZXIuCi0JICovCi0JbWRkZXYtPnF1ZXVlLT5xdWV1ZWRhdGEgPSBtZGRldjsKLQltZGRldi0+cXVldWUtPm1ha2VfcmVxdWVzdF9mbiA9IG1kZGV2LT5wZXJzLT5tYWtlX3JlcXVlc3Q7Ci0KIAkvKiBJZiB0aGVyZSBpcyBhIHBhcnRpYWxseS1yZWNvdmVyZWQgZHJpdmUgd2UgbmVlZCB0bwogCSAqIHN0YXJ0IHJlY292ZXJ5IGhlcmUuICBJZiB3ZSBsZWF2ZSBpdCB0byBtZF9jaGVja19yZWNvdmVyeSwKIAkgKiBpdCB3aWxsIHJlbW92ZSB0aGUgZHJpdmVzIGFuZCBub3QgZG8gdGhlIHJpZ2h0IHRoaW5nCkBAIC00MDM4LDcgKzQzMTgsNyBAQAogCQkJbWRfc3VwZXJfd2FpdChtZGRldik7CiAJCQlpZiAobWRkZXYtPnJvKQogCQkJCXNldF9kaXNrX3JvKGRpc2ssIDApOwotCQkJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChtZGRldi0+cXVldWUsIG1kX2ZhaWxfcmVxdWVzdCk7CisKIAkJCW1kZGV2LT5wZXJzLT5zdG9wKG1kZGV2KTsKIAkJCW1kZGV2LT5xdWV1ZS0+bWVyZ2VfYnZlY19mbiA9IE5VTEw7CiAJCQltZGRldi0+cXVldWUtPnVucGx1Z19mbiA9IE5VTEw7CkBAIC00MDk1LDcgKzQzNzUsOCBAQAogCQlleHBvcnRfYXJyYXkobWRkZXYpOwogCiAJCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gMDsKLQkJbWRkZXYtPnNpemUgPSAwOworCQltZGRldi0+ZXh0ZXJuYWxfc2l6ZSA9IDA7CisJCW1kZGV2LT5kZXZfc2VjdG9ycyA9IDA7CiAJCW1kZGV2LT5yYWlkX2Rpc2tzID0gMDsKIAkJbWRkZXYtPnJlY292ZXJ5X2NwID0gMDsKIAkJbWRkZXYtPnJlc3luY19taW4gPSAwOwpAQCAtNDEzNSw2ICs0NDE2LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAibWQ6ICVzIHN3aXRjaGVkIHRvIHJlYWQtb25seSBtb2RlLlxuIiwKIAkJCW1kbmFtZShtZGRldikpOwogCWVyciA9IDA7CisJYmxrX2ludGVncml0eV91bnJlZ2lzdGVyKGRpc2spOwogCW1kX25ld19ldmVudChtZGRldik7CiAJc3lzZnNfbm90aWZ5X2RpcmVudChtZGRldi0+c3lzZnNfc3RhdGUpOwogb3V0OgpAQCAtNDMwMCw4ICs0NTgyLDggQEAKIAlpbmZvLnBhdGNoX3ZlcnNpb24gPSBNRF9QQVRDSExFVkVMX1ZFUlNJT047CiAJaW5mby5jdGltZSAgICAgICAgID0gbWRkZXYtPmN0aW1lOwogCWluZm8ubGV2ZWwgICAgICAgICA9IG1kZGV2LT5sZXZlbDsKLQlpbmZvLnNpemUgICAgICAgICAgPSBtZGRldi0+c2l6ZTsKLQlpZiAoaW5mby5zaXplICE9IG1kZGV2LT5zaXplKSAvKiBvdmVyZmxvdyAqLworCWluZm8uc2l6ZSAgICAgICAgICA9IG1kZGV2LT5kZXZfc2VjdG9ycyAvIDI7CisJaWYgKGluZm8uc2l6ZSAhPSBtZGRldi0+ZGV2X3NlY3RvcnMgLyAyKSAvKiBvdmVyZmxvdyAqLwogCQlpbmZvLnNpemUgPSAtMTsKIAlpbmZvLm5yX2Rpc2tzICAgICAgPSBucjsKIAlpbmZvLnJhaWRfZGlza3MgICAgPSBtZGRldi0+cmFpZF9kaXNrczsKQEAgLTQ0ODAsNiArNDc2Miw4IEBACiAJCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOyAvKiBqdXN0IHRvIGJlIHN1cmUgKi8KIAkJaWYgKGluZm8tPnN0YXRlICYgKDE8PE1EX0RJU0tfV1JJVEVNT1NUTFkpKQogCQkJc2V0X2JpdChXcml0ZU1vc3RseSwgJnJkZXYtPmZsYWdzKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KFdyaXRlTW9zdGx5LCAmcmRldi0+ZmxhZ3MpOwogCiAJCXJkZXYtPnJhaWRfZGlzayA9IC0xOwogCQllcnIgPSBiaW5kX3JkZXZfdG9fYXJyYXkocmRldiwgbWRkZXYpOwpAQCAtNDU0Myw3ICs0ODI3LDcgQEAKIAkJCXJkZXYtPnNiX3N0YXJ0ID0gcmRldi0+YmRldi0+YmRfaW5vZGUtPmlfc2l6ZSAvIDUxMjsKIAkJfSBlbHNlIAogCQkJcmRldi0+c2Jfc3RhcnQgPSBjYWxjX2Rldl9zYm9mZnNldChyZGV2LT5iZGV2KTsKLQkJcmRldi0+c2l6ZSA9IGNhbGNfbnVtX3NlY3RvcnMocmRldiwgbWRkZXYtPmNodW5rX3NpemUpIC8gMjsKKwkJcmRldi0+c2VjdG9ycyA9IGNhbGNfbnVtX3NlY3RvcnMocmRldiwgbWRkZXYtPmNodW5rX3NpemUpOwogCiAJCWVyciA9IGJpbmRfcmRldl90b19hcnJheShyZGV2LCBtZGRldik7CiAJCWlmIChlcnIpIHsKQEAgLTQ2MTMsNyArNDg5Nyw3IEBACiAJZWxzZQogCQlyZGV2LT5zYl9zdGFydCA9IHJkZXYtPmJkZXYtPmJkX2lub2RlLT5pX3NpemUgLyA1MTI7CiAKLQlyZGV2LT5zaXplID0gY2FsY19udW1fc2VjdG9ycyhyZGV2LCBtZGRldi0+Y2h1bmtfc2l6ZSkgLyAyOworCXJkZXYtPnNlY3RvcnMgPSBjYWxjX251bV9zZWN0b3JzKHJkZXYsIG1kZGV2LT5jaHVua19zaXplKTsKIAogCWlmICh0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAKQEAgLTQ3NDksNyArNTAzMyw3IEBACiAKIAltZGRldi0+bGV2ZWwgICAgICAgICA9IGluZm8tPmxldmVsOwogCW1kZGV2LT5jbGV2ZWxbMF0gICAgID0gMDsKLQltZGRldi0+c2l6ZSAgICAgICAgICA9IGluZm8tPnNpemU7CisJbWRkZXYtPmRldl9zZWN0b3JzICAgPSAyICogKHNlY3Rvcl90KWluZm8tPnNpemU7CiAJbWRkZXYtPnJhaWRfZGlza3MgICAgPSBpbmZvLT5yYWlkX2Rpc2tzOwogCS8qIGRvbid0IHNldCBtZF9taW5vciwgaXQgaXMgZGV0ZXJtaW5lZCBieSB3aGljaCAvZGV2L21kKiB3YXMKIAkgKiBvcGVubmVkCkBAIC00Nzg4LDYgKzUwNzIsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBtZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldl90ICptZGRldiwgc2VjdG9yX3QgYXJyYXlfc2VjdG9ycykKK3sKKwlXQVJOKCFtZGRldl9pc19sb2NrZWQobWRkZXYpLCAiJXM6IHVubG9ja2VkIG1kZGV2IVxuIiwgX19mdW5jX18pOworCisJaWYgKG1kZGV2LT5leHRlcm5hbF9zaXplKQorCQlyZXR1cm47CisKKwltZGRldi0+YXJyYXlfc2VjdG9ycyA9IGFycmF5X3NlY3RvcnM7Cit9CitFWFBPUlRfU1lNQk9MKG1kX3NldF9hcnJheV9zZWN0b3JzKTsKKwogc3RhdGljIGludCB1cGRhdGVfc2l6ZShtZGRldl90ICptZGRldiwgc2VjdG9yX3QgbnVtX3NlY3RvcnMpCiB7CiAJbWRrX3JkZXZfdCAqcmRldjsKQEAgLTQ4MTQsOCArNTEwOSw3IEBACiAJCSAqLwogCQlyZXR1cm4gLUVCVVNZOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKLQkJc2VjdG9yX3QgYXZhaWw7Ci0JCWF2YWlsID0gcmRldi0+c2l6ZSAqIDI7CisJCXNlY3Rvcl90IGF2YWlsID0gcmRldi0+c2VjdG9yczsKIAogCQlpZiAoZml0ICYmIChudW1fc2VjdG9ycyA9PSAwIHx8IG51bV9zZWN0b3JzID4gYXZhaWwpKQogCQkJbnVtX3NlY3RvcnMgPSBhdmFpbDsKQEAgLTQ4ODcsMTIgKzUxODEsMTggQEAKIAkJKQogCQlyZXR1cm4gLUVJTlZBTDsKIAkvKiBDaGVjayB0aGVyZSBpcyBvbmx5IG9uZSBjaGFuZ2UgKi8KLQlpZiAoaW5mby0+c2l6ZSA+PSAwICYmIG1kZGV2LT5zaXplICE9IGluZm8tPnNpemUpIGNudCsrOwotCWlmIChtZGRldi0+cmFpZF9kaXNrcyAhPSBpbmZvLT5yYWlkX2Rpc2tzKSBjbnQrKzsKLQlpZiAobWRkZXYtPmxheW91dCAhPSBpbmZvLT5sYXlvdXQpIGNudCsrOwotCWlmICgoc3RhdGUgXiBpbmZvLT5zdGF0ZSkgJiAoMTw8TURfU0JfQklUTUFQX1BSRVNFTlQpKSBjbnQrKzsKLQlpZiAoY250ID09IDApIHJldHVybiAwOwotCWlmIChjbnQgPiAxKSByZXR1cm4gLUVJTlZBTDsKKwlpZiAoaW5mby0+c2l6ZSA+PSAwICYmIG1kZGV2LT5kZXZfc2VjdG9ycyAvIDIgIT0gaW5mby0+c2l6ZSkKKwkJY250Kys7CisJaWYgKG1kZGV2LT5yYWlkX2Rpc2tzICE9IGluZm8tPnJhaWRfZGlza3MpCisJCWNudCsrOworCWlmIChtZGRldi0+bGF5b3V0ICE9IGluZm8tPmxheW91dCkKKwkJY250Kys7CisJaWYgKChzdGF0ZSBeIGluZm8tPnN0YXRlKSAmICgxPDxNRF9TQl9CSVRNQVBfUFJFU0VOVCkpCisJCWNudCsrOworCWlmIChjbnQgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKGNudCA+IDEpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG1kZGV2LT5sYXlvdXQgIT0gaW5mby0+bGF5b3V0KSB7CiAJCS8qIENoYW5nZSBsYXlvdXQKQEAgLTQ5MDQsNyArNTIwNCw3IEBACiAJCWVsc2UKIAkJCXJldHVybiBtZGRldi0+cGVycy0+cmVjb25maWcobWRkZXYsIGluZm8tPmxheW91dCwgLTEpOwogCX0KLQlpZiAoaW5mby0+c2l6ZSA+PSAwICYmIG1kZGV2LT5zaXplICE9IGluZm8tPnNpemUpCisJaWYgKGluZm8tPnNpemUgPj0gMCAmJiBtZGRldi0+ZGV2X3NlY3RvcnMgLyAyICE9IGluZm8tPnNpemUpCiAJCXJ2ID0gdXBkYXRlX3NpemUobWRkZXYsIChzZWN0b3JfdClpbmZvLT5zaXplICogMik7CiAKIAlpZiAobWRkZXYtPnJhaWRfZGlza3MgICAgIT0gaW5mby0+cmFpZF9kaXNrcykKQEAgLTUzMzEsNiArNTYzMSw4IEBACiAKIHZvaWQgbWRfdW5yZWdpc3Rlcl90aHJlYWQobWRrX3RocmVhZF90ICp0aHJlYWQpCiB7CisJaWYgKCF0aHJlYWQpCisJCXJldHVybjsKIAlkcHJpbnRrKCJpbnRlcnJ1cHRpbmcgTUQtdGhyZWFkIHBpZCAlZFxuIiwgdGFza19waWRfbnIodGhyZWFkLT50c2spKTsKIAogCWt0aHJlYWRfc3RvcCh0aHJlYWQtPnRzayk7CkBAIC01NDA0LDcgKzU3MDYsNyBAQAogCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJbWF4X2Jsb2NrcyA9IG1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnMgPj4gMTsKIAllbHNlCi0JCW1heF9ibG9ja3MgPSBtZGRldi0+c2l6ZTsKKwkJbWF4X2Jsb2NrcyA9IG1kZGV2LT5kZXZfc2VjdG9ycyAvIDI7CiAKIAkvKgogCSAqIFNob3VsZCBub3QgaGFwcGVuLgpAQCAtNTUzNyw3ICs1ODM5LDcgQEAKIHN0YXRpYyBpbnQgbWRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJbWRkZXZfdCAqbWRkZXYgPSB2OwotCXNlY3Rvcl90IHNpemU7CisJc2VjdG9yX3Qgc2VjdG9yczsKIAltZGtfcmRldl90ICpyZGV2OwogCXN0cnVjdCBtZHN0YXRfaW5mbyAqbWkgPSBzZXEtPnByaXZhdGU7CiAJc3RydWN0IGJpdG1hcCAqYml0bWFwOwpAQCAtNTU3Myw3ICs1ODc1LDcgQEAKIAkJCXNlcV9wcmludGYoc2VxLCAiICVzIiwgbWRkZXYtPnBlcnMtPm5hbWUpOwogCQl9CiAKLQkJc2l6ZSA9IDA7CisJCXNlY3RvcnMgPSAwOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KSB7CiAJCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAJCQlzZXFfcHJpbnRmKHNlcSwgIiAlc1slZF0iLApAQCAtNTU4NSw3ICs1ODg3LDcgQEAKIAkJCQljb250aW51ZTsKIAkJCX0gZWxzZSBpZiAocmRldi0+cmFpZF9kaXNrIDwgMCkKIAkJCQlzZXFfcHJpbnRmKHNlcSwgIihTKSIpOyAvKiBzcGFyZSAqLwotCQkJc2l6ZSArPSByZGV2LT5zaXplOworCQkJc2VjdG9ycyArPSByZGV2LT5zZWN0b3JzOwogCQl9CiAKIAkJaWYgKCFsaXN0X2VtcHR5KCZtZGRldi0+ZGlza3MpKSB7CkBAIC01NTk1LDcgKzU4OTcsNyBAQAogCQkJCQkgICBtZGRldi0+YXJyYXlfc2VjdG9ycyAvIDIpOwogCQkJZWxzZQogCQkJCXNlcV9wcmludGYoc2VxLCAiXG4gICAgICAlbGx1IGJsb2NrcyIsCi0JCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2l6ZSk7CisJCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2VjdG9ycyAvIDIpOwogCQl9CiAJCWlmIChtZGRldi0+cGVyc2lzdGVudCkgewogCQkJaWYgKG1kZGV2LT5tYWpvcl92ZXJzaW9uICE9IDAgfHwKQEAgLTU3MjIsMTkgKzYwMjQsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpc19tZGRldl9pZGxlKG1kZGV2X3QgKm1kZGV2KQorc3RhdGljIGludCBpc19tZGRldl9pZGxlKG1kZGV2X3QgKm1kZGV2LCBpbnQgaW5pdCkKIHsKIAltZGtfcmRldl90ICogcmRldjsKIAlpbnQgaWRsZTsKLQlsb25nIGN1cnJfZXZlbnRzOworCWludCBjdXJyX2V2ZW50czsKIAogCWlkbGUgPSAxOwogCXJjdV9yZWFkX2xvY2soKTsKIAlyZGV2X2Zvcl9lYWNoX3JjdShyZGV2LCBtZGRldikgewogCQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IHJkZXYtPmJkZXYtPmJkX2NvbnRhaW5zLT5iZF9kaXNrOwotCQljdXJyX2V2ZW50cyA9IHBhcnRfc3RhdF9yZWFkKCZkaXNrLT5wYXJ0MCwgc2VjdG9yc1swXSkgKwotCQkJCXBhcnRfc3RhdF9yZWFkKCZkaXNrLT5wYXJ0MCwgc2VjdG9yc1sxXSkgLQotCQkJCWF0b21pY19yZWFkKCZkaXNrLT5zeW5jX2lvKTsKKwkJY3Vycl9ldmVudHMgPSAoaW50KXBhcnRfc3RhdF9yZWFkKCZkaXNrLT5wYXJ0MCwgc2VjdG9yc1swXSkgKworCQkJICAgICAgKGludClwYXJ0X3N0YXRfcmVhZCgmZGlzay0+cGFydDAsIHNlY3RvcnNbMV0pIC0KKwkJCSAgICAgIGF0b21pY19yZWFkKCZkaXNrLT5zeW5jX2lvKTsKIAkJLyogc3luYyBJTyB3aWxsIGNhdXNlIHN5bmNfaW8gdG8gaW5jcmVhc2UgYmVmb3JlIHRoZSBkaXNrX3N0YXRzCiAJCSAqIGFzIHN5bmNfaW8gaXMgY291bnRlZCB3aGVuIGEgcmVxdWVzdCBzdGFydHMsIGFuZAogCQkgKiBkaXNrX3N0YXRzIGlzIGNvdW50ZWQgd2hlbiBpdCBjb21wbGV0ZXMuCkBAIC01NzU3LDcgKzYwNTksNyBAQAogCQkgKiBhbHdheXMgbWFrZSBjdXJyX2V2ZW50cyBsZXNzIHRoYW4gbGFzdF9ldmVudHMuCiAJCSAqCiAJCSAqLwotCQlpZiAoY3Vycl9ldmVudHMgLSByZGV2LT5sYXN0X2V2ZW50cyA+IDQwOTYpIHsKKwkJaWYgKGluaXQgfHwgY3Vycl9ldmVudHMgLSByZGV2LT5sYXN0X2V2ZW50cyA+IDY0KSB7CiAJCQlyZGV2LT5sYXN0X2V2ZW50cyA9IGN1cnJfZXZlbnRzOwogCQkJaWRsZSA9IDA7CiAJCX0KQEAgLTU5ODAsMTAgKzYyODIsMTAgQEAKIAkJCWogPSBtZGRldi0+cmVjb3ZlcnlfY3A7CiAKIAl9IGVsc2UgaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1JFU0hBUEUsICZtZGRldi0+cmVjb3ZlcnkpKQotCQltYXhfc2VjdG9ycyA9IG1kZGV2LT5zaXplIDw8IDE7CisJCW1heF9zZWN0b3JzID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCWVsc2UgewogCQkvKiByZWNvdmVyeSBmb2xsb3dzIHRoZSBwaHlzaWNhbCBzaXplIG9mIGRldmljZXMgKi8KLQkJbWF4X3NlY3RvcnMgPSBtZGRldi0+c2l6ZSA8PCAxOworCQltYXhfc2VjdG9ycyA9IG1kZGV2LT5kZXZfc2VjdG9yczsKIAkJaiA9IE1heFNlY3RvcjsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKIAkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgpAQCAtNjAwMCw3ICs2MzAyLDcgQEAKIAkgICAgICAgIihidXQgbm90IG1vcmUgdGhhbiAlZCBLQi9zZWMpIGZvciAlcy5cbiIsCiAJICAgICAgIHNwZWVkX21heChtZGRldiksIGRlc2MpOwogCi0JaXNfbWRkZXZfaWRsZShtZGRldik7IC8qIHRoaXMgYWxzbyBpbml0aWFsaXplcyBJTyBldmVudCBjb3VudGVycyAqLworCWlzX21kZGV2X2lkbGUobWRkZXYsIDEpOyAvKiB0aGlzIGluaXRpYWxpemVzIElPIGV2ZW50IGNvdW50ZXJzICovCiAKIAlpb19zZWN0b3JzID0gMDsKIAlmb3IgKG0gPSAwOyBtIDwgU1lOQ19NQVJLUzsgbSsrKSB7CkBAIC02MDQwLDYgKzYzNDIsMTggQEAKIAkJfQogCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJZ290byBpbnRlcnJ1cHRlZDsKKworCQlpZiAobWRkZXYtPmN1cnJfcmVzeW5jID4gbWRkZXYtPmN1cnJfcmVzeW5jX2NvbXBsZXRlZCAmJgorCQkgICAgKG1kZGV2LT5jdXJyX3Jlc3luYyAtIG1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQpCisJCSAgICA+IChtYXhfc2VjdG9ycyA+PiA0KSkgeworCQkJLyogdGltZSB0byB1cGRhdGUgY3Vycl9yZXN5bmNfY29tcGxldGVkICovCisJCQlibGtfdW5wbHVnKG1kZGV2LT5xdWV1ZSk7CisJCQl3YWl0X2V2ZW50KG1kZGV2LT5yZWNvdmVyeV93YWl0LAorCQkJCSAgIGF0b21pY19yZWFkKCZtZGRldi0+cmVjb3ZlcnlfYWN0aXZlKSA9PSAwKTsKKwkJCW1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQgPQorCQkJCW1kZGV2LT5jdXJyX3Jlc3luYzsKKwkJCXNldF9iaXQoTURfQ0hBTkdFX0NMRUFOLCAmbWRkZXYtPmZsYWdzKTsKKwkJfQogCQlzZWN0b3JzID0gbWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdChtZGRldiwgaiwgJnNraXBwZWQsCiAJCQkJCQkgIGN1cnJzcGVlZCA8IHNwZWVkX21pbihtZGRldikpOwogCQlpZiAoc2VjdG9ycyA9PSAwKSB7CkBAIC02MTAyLDcgKzY0MTYsNyBAQAogCiAJCWlmIChjdXJyc3BlZWQgPiBzcGVlZF9taW4obWRkZXYpKSB7CiAJCQlpZiAoKGN1cnJzcGVlZCA+IHNwZWVkX21heChtZGRldikpIHx8Ci0JCQkJCSFpc19tZGRldl9pZGxlKG1kZGV2KSkgeworCQkJCQkhaXNfbWRkZXZfaWRsZShtZGRldiwgMCkpIHsKIAkJCQltc2xlZXAoNTAwKTsKIAkJCQlnb3RvIHJlcGVhdDsKIAkJCX0KQEAgLTYxNzMsNiArNjQ4Nyw4IEBACiAJbWRrX3JkZXZfdCAqcmRldjsKIAlpbnQgc3BhcmVzID0gMDsKIAorCW1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQgPSAwOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKIAkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCiAJCSAgICAhdGVzdF9iaXQoQmxvY2tlZCwgJnJkZXYtPmZsYWdzKSAmJgpAQCAtNjMyNyw2ICs2NjQzLDkgQEAKIAkJCQkJc3lzZnNfbm90aWZ5KCZtZGRldi0+a29iaiwgTlVMTCwKIAkJCQkJCSAgICAgImRlZ3JhZGVkIik7CiAJCQl9CisJCQlpZiAodGVzdF9iaXQoTURfUkVDT1ZFUllfUkVTSEFQRSwgJm1kZGV2LT5yZWNvdmVyeSkgJiYKKwkJCSAgICBtZGRldi0+cGVycy0+ZmluaXNoX3Jlc2hhcGUpCisJCQkJbWRkZXYtPnBlcnMtPmZpbmlzaF9yZXNoYXBlKG1kZGV2KTsKIAkJCW1kX3VwZGF0ZV9zYihtZGRldiwgMSk7CiAKIAkJCS8qIGlmIGFycmF5IGlzIG5vLWxvbmdlciBkZWdyYWRlZCwgdGhlbiBhbnkgc2F2ZWRfcmFpZF9kaXNrCkBAIC02NDcwLDEzICs2Nzg5LDEzIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG1kX2luaXQodm9pZCkKIHsKLQlpZiAocmVnaXN0ZXJfYmxrZGV2KE1BSk9SX05SLCAibWQiKSkKKwlpZiAocmVnaXN0ZXJfYmxrZGV2KE1EX01BSk9SLCAibWQiKSkKIAkJcmV0dXJuIC0xOwogCWlmICgobWRwX21ham9yPXJlZ2lzdGVyX2Jsa2RldigwLCAibWRwIikpPD0wKSB7Ci0JCXVucmVnaXN0ZXJfYmxrZGV2KE1BSk9SX05SLCAibWQiKTsKKwkJdW5yZWdpc3Rlcl9ibGtkZXYoTURfTUFKT1IsICJtZCIpOwogCQlyZXR1cm4gLTE7CiAJfQotCWJsa19yZWdpc3Rlcl9yZWdpb24oTUtERVYoTUFKT1JfTlIsIDApLCAxVUw8PE1JTk9SQklUUywgVEhJU19NT0RVTEUsCisJYmxrX3JlZ2lzdGVyX3JlZ2lvbihNS0RFVihNRF9NQUpPUiwgMCksIDFVTDw8TUlOT1JCSVRTLCBUSElTX01PRFVMRSwKIAkJCSAgICBtZF9wcm9iZSwgTlVMTCwgTlVMTCk7CiAJYmxrX3JlZ2lzdGVyX3JlZ2lvbihNS0RFVihtZHBfbWFqb3IsIDApLCAxVUw8PE1JTk9SQklUUywgVEhJU19NT0RVTEUsCiAJCQkgICAgbWRfcHJvYmUsIE5VTEwsIE5VTEwpOwpAQCAtNjU2MiwxMCArNjg4MSwxMCBAQAogCW1kZGV2X3QgKm1kZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAotCWJsa191bnJlZ2lzdGVyX3JlZ2lvbihNS0RFVihNQUpPUl9OUiwwKSwgMVUgPDwgTUlOT1JCSVRTKTsKKwlibGtfdW5yZWdpc3Rlcl9yZWdpb24oTUtERVYoTURfTUFKT1IsMCksIDFVIDw8IE1JTk9SQklUUyk7CiAJYmxrX3VucmVnaXN0ZXJfcmVnaW9uKE1LREVWKG1kcF9tYWpvciwwKSwgMVUgPDwgTUlOT1JCSVRTKTsKIAotCXVucmVnaXN0ZXJfYmxrZGV2KE1BSk9SX05SLCJtZCIpOworCXVucmVnaXN0ZXJfYmxrZGV2KE1EX01BSk9SLCJtZCIpOwogCXVucmVnaXN0ZXJfYmxrZGV2KG1kcF9tYWpvciwgIm1kcCIpOwogCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZtZF9ub3RpZmllcik7CiAJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUocmFpZF90YWJsZV9oZWFkZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YjdmNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21kL21kLmgKQEAgLTAsMCArMSw0MzYgQEAKKy8qCisgICBtZF9rLmggOiBrZXJuZWwgaW50ZXJuYWwgc3RydWN0dXJlIG9mIHRoZSBMaW51eCBNRCBkcml2ZXIKKyAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTYtOTggSW5nbyBNb2xuYXIsIEdhZGkgT3htYW4KKwkgIAorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIAorICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIChmb3IgZXhhbXBsZSAvdXNyL3NyYy9saW51eC9DT1BZSU5HKTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAKKyovCisKKyNpZm5kZWYgX01EX0tfSAorI2RlZmluZSBfTURfS19ICisKKyNpZmRlZiBDT05GSUdfQkxPQ0sKKworI2RlZmluZSBNYXhTZWN0b3IgKH4oc2VjdG9yX3QpMCkKKwordHlwZWRlZiBzdHJ1Y3QgbWRkZXZfcyBtZGRldl90OwordHlwZWRlZiBzdHJ1Y3QgbWRrX3JkZXZfcyBtZGtfcmRldl90OworCisvKgorICogb3B0aW9ucyBwYXNzZWQgaW4gcmFpZHJ1bjoKKyAqLworCisvKiBDdXJyZW50bHkgdGhpcyBtdXN0IGZpdCBpbiBhbiAnaW50JyAqLworI2RlZmluZSBNQVhfQ0hVTktfU0laRSAoMTw8MzApCisKKy8qCisgKiBNRCdzICdleHRlbmRlZCcgZGV2aWNlCisgKi8KK3N0cnVjdCBtZGtfcmRldl9zCit7CisJc3RydWN0IGxpc3RfaGVhZCBzYW1lX3NldDsJLyogUkFJRCBkZXZpY2VzIHdpdGhpbiB0aGUgc2FtZSBzZXQgKi8KKworCXNlY3Rvcl90IHNlY3RvcnM7CQkvKiBEZXZpY2Ugc2l6ZSAoaW4gNTEyYnl0ZXMgc2VjdG9ycykgKi8KKwltZGRldl90ICptZGRldjsJCQkvKiBSQUlEIGFycmF5IGlmIHJ1bm5pbmcgKi8KKwlpbnQgbGFzdF9ldmVudHM7CQkvKiBJTyBldmVudCB0aW1lc3RhbXAgKi8KKworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CS8qIGJsb2NrIGRldmljZSBoYW5kbGUgKi8KKworCXN0cnVjdCBwYWdlCSpzYl9wYWdlOworCWludAkJc2JfbG9hZGVkOworCV9fdTY0CQlzYl9ldmVudHM7CisJc2VjdG9yX3QJZGF0YV9vZmZzZXQ7CS8qIHN0YXJ0IG9mIGRhdGEgaW4gYXJyYXkgKi8KKwlzZWN0b3JfdCAJc2Jfc3RhcnQ7CS8qIG9mZnNldCBvZiB0aGUgc3VwZXIgYmxvY2sgKGluIDUxMmJ5dGUgc2VjdG9ycykgKi8KKwlpbnQJCXNiX3NpemU7CS8qIGJ5dGVzIGluIHRoZSBzdXBlcmJsb2NrICovCisJaW50CQlwcmVmZXJyZWRfbWlub3I7CS8qIGF1dG9ydW4gc3VwcG9ydCAqLworCisJc3RydWN0IGtvYmplY3QJa29iajsKKworCS8qIEEgZGV2aWNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzIGJhc2VkIG9uIHR3byBmbGFnczoKKwkgKiBOb3Qgd29ya2luZzogICBmYXVsdHk9PTEgaW5fc3luYz09MAorCSAqIEZ1bGx5IHdvcmtpbmc6IGZhdWx0eT09MCBpbl9zeW5jPT0xCisJICogV29ya2luZywgYnV0IG5vdAorCSAqIGluIHN5bmMgd2l0aCBhcnJheQorCSAqICAgICAgICAgICAgICAgIGZhdWx0eT09MCBpbl9zeW5jPT0wCisJICoKKwkgKiBJdCBjYW4gbmV2ZXIgaGF2ZSBmYXVsdHk9PTEsIGluX3N5bmM9PTEKKwkgKiBUaGlzIHJlZHVjZXMgdGhlIGJ1cmRlbiBvZiB0ZXN0aW5nIG11bHRpcGxlIGZsYWdzIGluIG1hbnkgY2FzZXMKKwkgKi8KKworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CisjZGVmaW5lCUZhdWx0eQkJMQkJLyogZGV2aWNlIGlzIGtub3duIHRvIGhhdmUgYSBmYXVsdCAqLworI2RlZmluZQlJbl9zeW5jCQkyCQkvKiBkZXZpY2UgaXMgaW5fc3luYyB3aXRoIHJlc3Qgb2YgYXJyYXkgKi8KKyNkZWZpbmUJV3JpdGVNb3N0bHkJNAkJLyogQXZvaWQgcmVhZGluZyBpZiBhdCBhbGwgcG9zc2libGUgKi8KKyNkZWZpbmUJQmFycmllcnNOb3RzdXBwCTUJCS8qIEJJT19SV19CQVJSSUVSIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJQWxsUmVzZXJ2ZWQJNgkJLyogSWYgd2hvbGUgZGV2aWNlIGlzIHJlc2VydmVkIGZvcgorCQkJCQkgKiBvbmUgYXJyYXkgKi8KKyNkZWZpbmUJQXV0b0RldGVjdGVkCTcJCS8qIGFkZGVkIGJ5IGF1dG8tZGV0ZWN0ICovCisjZGVmaW5lIEJsb2NrZWQJCTgJCS8qIEFuIGVycm9yIG9jY3VyZWQgb24gYW4gZXh0ZXJuYWxseQorCQkJCQkgKiBtYW5hZ2VkIGFycmF5LCBkb24ndCBhbGxvdyB3cml0ZXMKKwkJCQkJICogdW50aWwgaXQgaXMgY2xlYXJlZCAqLworI2RlZmluZSBTdGF0ZUNoYW5nZWQJOQkJLyogRmF1bHR5IG9yIEJsb2NrZWQgaGFzIGNoYW5nZWQgZHVyaW5nCisJCQkJCSAqIGludGVycnVwdCwgc28gaXQgbmVlZHMgdG8gYmUKKwkJCQkJICogbm90aWZpZWQgYnkgdGhlIHRocmVhZCAqLworCXdhaXRfcXVldWVfaGVhZF90IGJsb2NrZWRfd2FpdDsKKworCWludCBkZXNjX25yOwkJCS8qIGRlc2NyaXB0b3IgaW5kZXggaW4gdGhlIHN1cGVyYmxvY2sgKi8KKwlpbnQgcmFpZF9kaXNrOwkJCS8qIHJvbGUgb2YgZGV2aWNlIGluIGFycmF5ICovCisJaW50IHNhdmVkX3JhaWRfZGlzazsJCS8qIHJvbGUgdGhhdCBkZXZpY2UgdXNlZCB0byBoYXZlIGluIHRoZQorCQkJCQkgKiBhcnJheSBhbmQgY291bGQgYWdhaW4gaWYgd2UgZGlkIGEgcGFydGlhbAorCQkJCQkgKiByZXN5bmMgZnJvbSB0aGUgYml0bWFwCisJCQkJCSAqLworCXNlY3Rvcl90CXJlY292ZXJ5X29mZnNldDsvKiBJZiB0aGlzIGRldmljZSBoYXMgYmVlbiBwYXJ0aWFsbHkKKwkJCQkJICogcmVjb3ZlcmVkLCB0aGlzIGlzIHdoZXJlIHdlIHdlcmUKKwkJCQkJICogdXAgdG8uCisJCQkJCSAqLworCisJYXRvbWljX3QJbnJfcGVuZGluZzsJLyogbnVtYmVyIG9mIHBlbmRpbmcgcmVxdWVzdHMuCisJCQkJCSAqIG9ubHkgbWFpbnRhaW5lZCBmb3IgYXJyYXlzIHRoYXQKKwkJCQkJICogc3VwcG9ydCBob3QgcmVtb3ZhbAorCQkJCQkgKi8KKwlhdG9taWNfdAlyZWFkX2Vycm9yczsJLyogbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJlYWQgZXJyb3JzIHRoYXQKKwkJCQkJICogd2UgaGF2ZSB0cmllZCB0byBpZ25vcmUuCisJCQkJCSAqLworCWF0b21pY190CWNvcnJlY3RlZF9lcnJvcnM7IC8qIG51bWJlciBvZiBjb3JyZWN0ZWQgcmVhZCBlcnJvcnMsCisJCQkJCSAgICogZm9yIHJlcG9ydGluZyB0byB1c2Vyc3BhY2UgYW5kIHN0b3JpbmcKKwkJCQkJICAgKiBpbiBzdXBlcmJsb2NrLgorCQkJCQkgICAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBkZWxfd29yazsJLyogdXNlZCBmb3IgZGVsYXllZCBzeXNmcyByZW1vdmFsICovCisKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzeXNmc19zdGF0ZTsgLyogaGFuZGxlIGZvciAnc3RhdGUnCisJCQkJCSAgICogc3lzZnMgZW50cnkgKi8KK307CisKK3N0cnVjdCBtZGRldl9zCit7CisJdm9pZAkJCQkqcHJpdmF0ZTsKKwlzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5CQkqcGVyczsKKwlkZXZfdAkJCQl1bml0OworCWludAkJCQltZF9taW5vcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIAkJZGlza3M7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworI2RlZmluZSBNRF9DSEFOR0VfREVWUwkwCS8qIFNvbWUgZGV2aWNlIHN0YXR1cyBoYXMgY2hhbmdlZCAqLworI2RlZmluZSBNRF9DSEFOR0VfQ0xFQU4gMQkvKiB0cmFuc2l0aW9uIHRvIG9yIGZyb20gJ2NsZWFuJyAqLworI2RlZmluZSBNRF9DSEFOR0VfUEVORElORyAyCS8qIHN1cGVyYmxvY2sgdXBkYXRlIGluIHByb2dyZXNzICovCisKKwlpbnQJCQkJc3VzcGVuZGVkOworCWF0b21pY190CQkJYWN0aXZlX2lvOworCWludAkJCQlybzsKKworCXN0cnVjdCBnZW5kaXNrCQkJKmdlbmRpc2s7CisKKwlzdHJ1Y3Qga29iamVjdAkJCWtvYmo7CisJaW50CQkJCWhvbGRfYWN0aXZlOworI2RlZmluZQlVTlRJTF9JT0NUTAkxCisjZGVmaW5lCVVOVElMX1NUT1AJMgorCisJLyogU3VwZXJibG9jayBpbmZvcm1hdGlvbiAqLworCWludAkJCQltYWpvcl92ZXJzaW9uLAorCQkJCQltaW5vcl92ZXJzaW9uLAorCQkJCQlwYXRjaF92ZXJzaW9uOworCWludAkJCQlwZXJzaXN0ZW50OworCWludCAJCQkJZXh0ZXJuYWw7CS8qIG1ldGFkYXRhIGlzCisJCQkJCQkJICogbWFuYWdlZCBleHRlcm5hbGx5ICovCisJY2hhcgkJCQltZXRhZGF0YV90eXBlWzE3XTsgLyogZXh0ZXJuYWxseSBzZXQqLworCWludAkJCQljaHVua19zaXplOworCXRpbWVfdAkJCQljdGltZSwgdXRpbWU7CisJaW50CQkJCWxldmVsLCBsYXlvdXQ7CisJY2hhcgkJCQljbGV2ZWxbMTZdOworCWludAkJCQlyYWlkX2Rpc2tzOworCWludAkJCQltYXhfZGlza3M7CisJc2VjdG9yX3QJCQlkZXZfc2VjdG9yczsgCS8qIHVzZWQgc2l6ZSBvZgorCQkJCQkJCSAqIGNvbXBvbmVudCBkZXZpY2VzICovCisJc2VjdG9yX3QJCQlhcnJheV9zZWN0b3JzOyAvKiBleHBvcnRlZCBhcnJheSBzaXplICovCisJaW50CQkJCWV4dGVybmFsX3NpemU7IC8qIHNpemUgbWFuYWdlZAorCQkJCQkJCSogZXh0ZXJuYWxseSAqLworCV9fdTY0CQkJCWV2ZW50czsKKworCWNoYXIJCQkJdXVpZFsxNl07CisKKwkvKiBJZiB0aGUgYXJyYXkgaXMgYmVpbmcgcmVzaGFwZWQsIHdlIG5lZWQgdG8gcmVjb3JkIHRoZQorCSAqIG5ldyBzaGFwZSBhbmQgYW4gaW5kaWNhdGlvbiBvZiB3aGVyZSB3ZSBhcmUgdXAgdG8uCisJICogVGhpcyBpcyB3cml0dGVuIHRvIHRoZSBzdXBlcmJsb2NrLgorCSAqIElmIHJlc2hhcGVfcG9zaXRpb24gaXMgTWF4U2VjdG9yLCB0aGVuIG5vIHJlc2hhcGUgaXMgaGFwcGVuaW5nICh5ZXQpLgorCSAqLworCXNlY3Rvcl90CQkJcmVzaGFwZV9wb3NpdGlvbjsKKwlpbnQJCQkJZGVsdGFfZGlza3MsIG5ld19sZXZlbCwgbmV3X2xheW91dCwgbmV3X2NodW5rOworCisJc3RydWN0IG1ka190aHJlYWRfcwkJKnRocmVhZDsJLyogbWFuYWdlbWVudCB0aHJlYWQgKi8KKwlzdHJ1Y3QgbWRrX3RocmVhZF9zCQkqc3luY190aHJlYWQ7CS8qIGRvaW5nIHJlc3luYyBvciByZWNvbnN0cnVjdCAqLworCXNlY3Rvcl90CQkJY3Vycl9yZXN5bmM7CS8qIGxhc3QgYmxvY2sgc2NoZWR1bGVkICovCisJLyogQXMgcmVzeW5jIHJlcXVlc3RzIGNhbiBjb21wbGV0ZSBvdXQgb2Ygb3JkZXIsIHdlIGNhbm5vdCBlYXNpbHkgdHJhY2sKKwkgKiBob3cgbXVjaCByZXN5bmMgaGFzIGJlZW4gY29tcGxldGVkLiAgU28gd2Ugb2NjYXNpb25hbGx5IHBhdXNlIHVudGlsCisJICogZXZlcnl0aGluZyBjb21wbGV0ZXMsIHRoZW4gc2V0IGN1cnJfcmVzeW5jX2NvbXBsZXRlZCB0byBjdXJyX3Jlc3luYy4KKwkgKiBBcyBzdWNoIGl0IG1heSBiZSB3ZWxsIGJlaGluZCB0aGUgcmVhbCByZXN5bmMgbWFyaywgYnV0IGl0IGlzIGEgdmFsdWUKKwkgKiB3ZSBhcmUgY2VydGFpbiBvZi4KKwkgKi8KKwlzZWN0b3JfdAkJCWN1cnJfcmVzeW5jX2NvbXBsZXRlZDsKKwl1bnNpZ25lZCBsb25nCQkJcmVzeW5jX21hcms7CS8qIGEgcmVjZW50IHRpbWVzdGFtcCAqLworCXNlY3Rvcl90CQkJcmVzeW5jX21hcmtfY250Oy8qIGJsb2NrcyB3cml0dGVuIGF0IHJlc3luY19tYXJrICovCisJc2VjdG9yX3QJCQljdXJyX21hcmtfY250OyAvKiBibG9ja3Mgc2NoZWR1bGVkIG5vdyAqLworCisJc2VjdG9yX3QJCQlyZXN5bmNfbWF4X3NlY3RvcnM7IC8qIG1heSBiZSBzZXQgYnkgcGVyc29uYWxpdHkgKi8KKworCXNlY3Rvcl90CQkJcmVzeW5jX21pc21hdGNoZXM7IC8qIGNvdW50IG9mIHNlY3RvcnMgd2hlcmUKKwkJCQkJCQkgICAgKiBwYXJpdHkvcmVwbGljYSBtaXNtYXRjaCBmb3VuZAorCQkJCQkJCSAgICAqLworCisJLyogYWxsb3cgdXNlci1zcGFjZSB0byByZXF1ZXN0IHN1c3BlbnNpb24gb2YgSU8gdG8gcmVnaW9ucyBvZiB0aGUgYXJyYXkgKi8KKwlzZWN0b3JfdAkJCXN1c3BlbmRfbG87CisJc2VjdG9yX3QJCQlzdXNwZW5kX2hpOworCS8qIGlmIHplcm8sIHVzZSB0aGUgc3lzdGVtLXdpZGUgZGVmYXVsdCAqLworCWludAkJCQlzeW5jX3NwZWVkX21pbjsKKwlpbnQJCQkJc3luY19zcGVlZF9tYXg7CisKKwkvKiByZXN5bmMgZXZlbiB0aG91Z2ggdGhlIHNhbWUgZGlza3MgYXJlIHNoYXJlZCBhbW9uZyBtZC1kZXZpY2VzICovCisJaW50CQkJCXBhcmFsbGVsX3Jlc3luYzsKKworCWludAkJCQlva19zdGFydF9kZWdyYWRlZDsKKwkvKiByZWNvdmVyeS9yZXN5bmMgZmxhZ3MgCisJICogTkVFREVEOiAgIHdlIG1pZ2h0IG5lZWQgdG8gc3RhcnQgYSByZXN5bmMvcmVjb3ZlcgorCSAqIFJVTk5JTkc6ICBhIHRocmVhZCBpcyBydW5uaW5nLCBvciBhYm91dCB0byBiZSBzdGFydGVkCisJICogU1lOQzogICAgIGFjdHVhbGx5IGRvaW5nIGEgcmVzeW5jLCBub3QgYSByZWNvdmVyeQorCSAqIFJFQ09WRVI6ICBkb2luZyByZWNvdmVyeSwgb3IgbmVlZCB0byB0cnkgaXQuCisJICogSU5UUjogICAgIHJlc3luYyBuZWVkcyB0byBiZSBhYm9ydGVkIGZvciBzb21lIHJlYXNvbgorCSAqIERPTkU6ICAgICB0aHJlYWQgaXMgZG9uZSBhbmQgaXMgd2FpdGluZyB0byBiZSByZWFwZWQKKwkgKiBSRVFVRVNUOiAgdXNlci1zcGFjZSBoYXMgcmVxdWVzdGVkIGEgc3luYyAodXNlZCB3aXRoIFNZTkMpCisJICogQ0hFQ0s6ICAgIHVzZXItc3BhY2UgcmVxdWVzdCBmb3IgZm9yIGNoZWNrLW9ubHksIG5vIHJlcGFpcgorCSAqIFJFU0hBUEU6ICBBIHJlc2hhcGUgaXMgaGFwcGVuaW5nCisJICoKKwkgKiBJZiBuZWl0aGVyIFNZTkMgb3IgUkVTSEFQRSBhcmUgc2V0LCB0aGVuIGl0IGlzIGEgcmVjb3ZlcnkuCisJICovCisjZGVmaW5lCU1EX1JFQ09WRVJZX1JVTk5JTkcJMAorI2RlZmluZQlNRF9SRUNPVkVSWV9TWU5DCTEKKyNkZWZpbmUJTURfUkVDT1ZFUllfUkVDT1ZFUgkyCisjZGVmaW5lCU1EX1JFQ09WRVJZX0lOVFIJMworI2RlZmluZQlNRF9SRUNPVkVSWV9ET05FCTQKKyNkZWZpbmUJTURfUkVDT1ZFUllfTkVFREVECTUKKyNkZWZpbmUJTURfUkVDT1ZFUllfUkVRVUVTVEVECTYKKyNkZWZpbmUJTURfUkVDT1ZFUllfQ0hFQ0sJNworI2RlZmluZSBNRF9SRUNPVkVSWV9SRVNIQVBFCTgKKyNkZWZpbmUJTURfUkVDT1ZFUllfRlJPWkVOCTkKKworCXVuc2lnbmVkIGxvbmcJCQlyZWNvdmVyeTsKKwlpbnQJCQkJcmVjb3ZlcnlfZGlzYWJsZWQ7IC8qIGlmIHdlIGRldGVjdCB0aGF0IHJlY292ZXJ5CisJCQkJCQkJICAgICogd2lsbCBhbHdheXMgZmFpbCwgc2V0IHRoaXMKKwkJCQkJCQkgICAgKiBzbyB3ZSBkb24ndCBsb29wIHRyeWluZyAqLworCisJaW50CQkJCWluX3N5bmM7CS8qIGtub3cgdG8gbm90IG5lZWQgcmVzeW5jICovCisJc3RydWN0IG11dGV4CQkJcmVjb25maWdfbXV0ZXg7CisJYXRvbWljX3QJCQlhY3RpdmU7CQkvKiBnZW5lcmFsIHJlZmNvdW50ICovCisJYXRvbWljX3QJCQlvcGVuZXJzOwkvKiBudW1iZXIgb2YgYWN0aXZlIG9wZW5zICovCisKKwlpbnQJCQkJY2hhbmdlZDsJLyogdHJ1ZSBpZiB3ZSBtaWdodCBuZWVkIHRvIHJlcmVhZCBwYXJ0aXRpb24gaW5mbyAqLworCWludAkJCQlkZWdyYWRlZDsJLyogd2hldGhlciBtZCBzaG91bGQgY29uc2lkZXIKKwkJCQkJCQkgKiBhZGRpbmcgYSBzcGFyZQorCQkJCQkJCSAqLworCWludAkJCQliYXJyaWVyc193b3JrOwkvKiBpbml0aWFsaXNlZCB0byB0cnVlLCBjbGVhcmVkIGFzIHNvb24KKwkJCQkJCQkgKiBhcyBhIGJhcnJpZXIgcmVxdWVzdCB0byBzbGF2ZQorCQkJCQkJCSAqIGZhaWxzLiAgT25seSBzdXBwb3J0ZWQKKwkJCQkJCQkgKi8KKwlzdHJ1Y3QgYmlvCQkJKmJpb2xpc3Q7IAkvKiBiaW9zIHRoYXQgbmVlZCB0byBiZSByZXRyaWVkCisJCQkJCQkJICogYmVjYXVzZSBCSU9fUldfQkFSUklFUiBpcyBub3Qgc3VwcG9ydGVkCisJCQkJCQkJICovCisKKwlhdG9taWNfdAkJCXJlY292ZXJ5X2FjdGl2ZTsgLyogYmxvY2tzIHNjaGVkdWxlZCwgYnV0IG5vdCB3cml0dGVuICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJCXJlY292ZXJ5X3dhaXQ7CisJc2VjdG9yX3QJCQlyZWNvdmVyeV9jcDsKKwlzZWN0b3JfdAkJCXJlc3luY19taW47CS8qIHVzZXIgcmVxdWVzdGVkIHN5bmMKKwkJCQkJCQkgKiBzdGFydHMgaGVyZSAqLworCXNlY3Rvcl90CQkJcmVzeW5jX21heDsJLyogcmVzeW5jIHNob3VsZCBwYXVzZQorCQkJCQkJCSAqIHdoZW4gaXQgZ2V0cyBoZXJlICovCisKKwlzdHJ1Y3Qgc3lzZnNfZGlyZW50CQkqc3lzZnNfc3RhdGU7CS8qIGhhbmRsZSBmb3IgJ2FycmF5X3N0YXRlJworCQkJCQkJCSAqIGZpbGUgaW4gc3lzZnMuCisJCQkJCQkJICovCisJc3RydWN0IHN5c2ZzX2RpcmVudAkJKnN5c2ZzX2FjdGlvbjsgIC8qIGhhbmRsZSBmb3IgJ3N5bmNfYWN0aW9uJyAqLworCisJc3RydWN0IHdvcmtfc3RydWN0IGRlbF93b3JrOwkvKiB1c2VkIGZvciBkZWxheWVkIHN5c2ZzIHJlbW92YWwgKi8KKworCXNwaW5sb2NrX3QJCQl3cml0ZV9sb2NrOworCXdhaXRfcXVldWVfaGVhZF90CQlzYl93YWl0OwkvKiBmb3Igd2FpdGluZyBvbiBzdXBlcmJsb2NrIHVwZGF0ZXMgKi8KKwlhdG9taWNfdAkJCXBlbmRpbmdfd3JpdGVzOwkvKiBudW1iZXIgb2YgYWN0aXZlIHN1cGVyYmxvY2sgd3JpdGVzICovCisKKwl1bnNpZ25lZCBpbnQJCQlzYWZlbW9kZTsJLyogaWYgc2V0LCB1cGRhdGUgImNsZWFuIiBzdXBlcmJsb2NrCisJCQkJCQkJICogd2hlbiBubyB3cml0ZXMgcGVuZGluZy4KKwkJCQkJCQkgKi8gCisJdW5zaWduZWQgaW50CQkJc2FmZW1vZGVfZGVsYXk7CisJc3RydWN0IHRpbWVyX2xpc3QJCXNhZmVtb2RlX3RpbWVyOworCWF0b21pY190CQkJd3JpdGVzX3BlbmRpbmc7IAorCXN0cnVjdCByZXF1ZXN0X3F1ZXVlCQkqcXVldWU7CS8qIGZvciBwbHVnZ2luZyAuLi4gKi8KKworCWF0b21pY190ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfYmVoaW5kOyAvKiBvdXRzdGFuZGluZyBhc3luYyBJTyAqLworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgbWF4X3dyaXRlX2JlaGluZDsgLyogMCA9IHN5bmMgKi8KKworCXN0cnVjdCBiaXRtYXAgICAgICAgICAgICAgICAgICAgKmJpdG1hcDsgLyogdGhlIGJpdG1hcCBmb3IgdGhlIGRldmljZSAqLworCXN0cnVjdCBmaWxlCQkJKmJpdG1hcF9maWxlOyAvKiB0aGUgYml0bWFwIGZpbGUgKi8KKwlsb25nCQkJCWJpdG1hcF9vZmZzZXQ7IC8qIG9mZnNldCBmcm9tIHN1cGVyYmxvY2sgb2YKKwkJCQkJCQkqIHN0YXJ0IG9mIGJpdG1hcC4gTWF5IGJlCisJCQkJCQkJKiBuZWdhdGl2ZSwgYnV0IG5vdCAnMCcKKwkJCQkJCQkqLworCWxvbmcJCQkJZGVmYXVsdF9iaXRtYXBfb2Zmc2V0OyAvKiB0aGlzIGlzIHRoZSBvZmZzZXQgdG8gdXNlIHdoZW4KKwkJCQkJCQkJKiBob3QtYWRkaW5nIGEgYml0bWFwLiAgSXQgc2hvdWxkCisJCQkJCQkJCSogZXZlbnR1YWxseSBiZSBzZXR0YWJsZSBieSBzeXNmcy4KKwkJCQkJCQkJKi8KKworCXN0cnVjdCBsaXN0X2hlYWQJCWFsbF9tZGRldnM7Cit9OworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZGV2X2RlY19wZW5kaW5nKG1ka19yZGV2X3QgKnJkZXYsIG1kZGV2X3QgKm1kZGV2KQoreworCWludCBmYXVsdHkgPSB0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncyk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJkZXYtPm5yX3BlbmRpbmcpICYmIGZhdWx0eSkKKwkJc2V0X2JpdChNRF9SRUNPVkVSWV9ORUVERUQsICZtZGRldi0+cmVjb3ZlcnkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWRfc3luY19hY2N0KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGxvbmcgbnJfc2VjdG9ycykKK3sKKyAgICAgICAgYXRvbWljX2FkZChucl9zZWN0b3JzLCAmYmRldi0+YmRfY29udGFpbnMtPmJkX2Rpc2stPnN5bmNfaW8pOworfQorCitzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5Cit7CisJY2hhciAqbmFtZTsKKwlpbnQgbGV2ZWw7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBtb2R1bGUgKm93bmVyOworCWludCAoKm1ha2VfcmVxdWVzdCkoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyk7CisJaW50ICgqcnVuKShtZGRldl90ICptZGRldik7CisJaW50ICgqc3RvcCkobWRkZXZfdCAqbWRkZXYpOworCXZvaWQgKCpzdGF0dXMpKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBtZGRldl90ICptZGRldik7CisJLyogZXJyb3JfaGFuZGxlciBtdXN0IHNldCAtPmZhdWx0eSBhbmQgY2xlYXIgLT5pbl9zeW5jCisJICogaWYgYXBwcm9wcmlhdGUsIGFuZCBzaG91bGQgYWJvcnQgcmVjb3ZlcnkgaWYgbmVlZGVkIAorCSAqLworCXZvaWQgKCplcnJvcl9oYW5kbGVyKShtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7CisJaW50ICgqaG90X2FkZF9kaXNrKSAobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpOworCWludCAoKmhvdF9yZW1vdmVfZGlzaykgKG1kZGV2X3QgKm1kZGV2LCBpbnQgbnVtYmVyKTsKKwlpbnQgKCpzcGFyZV9hY3RpdmUpIChtZGRldl90ICptZGRldik7CisJc2VjdG9yX3QgKCpzeW5jX3JlcXVlc3QpKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JfbnIsIGludCAqc2tpcHBlZCwgaW50IGdvX2Zhc3Rlcik7CisJaW50ICgqcmVzaXplKSAobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3RvcnMpOworCXNlY3Rvcl90ICgqc2l6ZSkgKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JzLCBpbnQgcmFpZF9kaXNrcyk7CisJaW50ICgqY2hlY2tfcmVzaGFwZSkgKG1kZGV2X3QgKm1kZGV2KTsKKwlpbnQgKCpzdGFydF9yZXNoYXBlKSAobWRkZXZfdCAqbWRkZXYpOworCXZvaWQgKCpmaW5pc2hfcmVzaGFwZSkgKG1kZGV2X3QgKm1kZGV2KTsKKwlpbnQgKCpyZWNvbmZpZykgKG1kZGV2X3QgKm1kZGV2LCBpbnQgbGF5b3V0LCBpbnQgY2h1bmtfc2l6ZSk7CisJLyogcXVpZXNjZSBtb3ZlcyBiZXR3ZWVuIHF1aWVzY2VuY2Ugc3RhdGVzCisJICogMCAtIGZ1bGx5IGFjdGl2ZQorCSAqIDEgLSBubyBuZXcgcmVxdWVzdHMgYWxsb3dlZAorCSAqIG90aGVycyAtIHJlc2VydmVkCisJICovCisJdm9pZCAoKnF1aWVzY2UpIChtZGRldl90ICptZGRldiwgaW50IHN0YXRlKTsKKwkvKiB0YWtlb3ZlciBpcyB1c2VkIHRvIHRyYW5zaXRpb24gYW4gYXJyYXkgZnJvbSBvbmUKKwkgKiBwZXJzb25hbGl0eSB0byBhbm90aGVyLiAgVGhlIG5ldyBwZXJzb25hbGl0eSBtdXN0IGJlIGFibGUKKwkgKiB0byBoYW5kbGUgdGhlIGRhdGEgaW4gdGhlIGN1cnJlbnQgbGF5b3V0LgorCSAqIGUuZy4gMmRyaXZlIHJhaWQxIC0+IDJkcml2ZSByYWlkNQorCSAqICAgICAgbmRyaXZlIHJhaWQ1IC0+IGRlZ3JhZGVkIG4rMWRyaXZlIHJhaWQ2IHdpdGggc3BlY2lhbCBsYXlvdXQKKwkgKiBJZiB0aGUgdGFrZW92ZXIgc3VjY2VlZHMsIGEgbmV3ICdwcml2YXRlJyBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQuCisJICogVGhpcyBuZWVkcyB0byBiZSBpbnN0YWxsZWQgYW5kIHRoZW4gLT5ydW4gdXNlZCB0byBhY3RpdmF0ZSB0aGUKKwkgKiBhcnJheS4KKwkgKi8KKwl2b2lkICooKnRha2VvdmVyKSAobWRkZXZfdCAqbWRkZXYpOworfTsKKworCitzdHJ1Y3QgbWRfc3lzZnNfZW50cnkgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykobWRkZXZfdCAqLCBjaGFyICopOworCXNzaXplX3QgKCpzdG9yZSkobWRkZXZfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Cit9OworCisKK3N0YXRpYyBpbmxpbmUgY2hhciAqIG1kbmFtZSAobWRkZXZfdCAqIG1kZGV2KQoreworCXJldHVybiBtZGRldi0+Z2VuZGlzayA/IG1kZGV2LT5nZW5kaXNrLT5kaXNrX25hbWUgOiAibWRYIjsKK30KKworLyoKKyAqIGl0ZXJhdGVzIHRocm91Z2ggc29tZSByZGV2IHJpbmdsaXN0LiBJdCdzIHNhZmUgdG8gcmVtb3ZlIHRoZQorICogY3VycmVudCAncmRldicuIERvbnQgdG91Y2ggJ3RtcCcgdGhvdWdoLgorICovCisjZGVmaW5lIHJkZXZfZm9yX2VhY2hfbGlzdChyZGV2LCB0bXAsIGhlYWQpCQkJCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmRldiwgdG1wLCBoZWFkLCBzYW1lX3NldCkKKworLyoKKyAqIGl0ZXJhdGVzIHRocm91Z2ggdGhlICdzYW1lIGFycmF5IGRpc2tzJyByaW5nbGlzdAorICovCisjZGVmaW5lIHJkZXZfZm9yX2VhY2gocmRldiwgdG1wLCBtZGRldikJCQkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZGV2LCB0bXAsICYoKG1kZGV2KS0+ZGlza3MpLCBzYW1lX3NldCkKKworI2RlZmluZSByZGV2X2Zvcl9lYWNoX3JjdShyZGV2LCBtZGRldikJCQkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsICYoKG1kZGV2KS0+ZGlza3MpLCBzYW1lX3NldCkKKwordHlwZWRlZiBzdHJ1Y3QgbWRrX3RocmVhZF9zIHsKKwl2b2lkCQkJKCpydW4pIChtZGRldl90ICptZGRldik7CisJbWRkZXZfdAkJCSptZGRldjsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3cXVldWU7CisJdW5zaWduZWQgbG9uZyAgICAgICAgICAgZmxhZ3M7CisJc3RydWN0IHRhc2tfc3RydWN0CSp0c2s7CisJdW5zaWduZWQgbG9uZwkJdGltZW91dDsKK30gbWRrX3RocmVhZF90OworCisjZGVmaW5lIFRIUkVBRF9XQUtFVVAgIDAKKworI2RlZmluZSBfX3dhaXRfZXZlbnRfbG9ja19pcnEod3EsIGNvbmRpdGlvbiwgbG9jaywgY21kKSAJCVwKK2RvIHsJCQkJCQkJCQlcCisJd2FpdF9xdWV1ZV90IF9fd2FpdDsJCQkJCQlcCisJaW5pdF93YWl0cXVldWVfZW50cnkoJl9fd2FpdCwgY3VycmVudCk7CQkJCVwKKwkJCQkJCQkJCVwKKwlhZGRfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOwkJCQkJXAorCWZvciAoOzspIHsJCQkJCQkJXAorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CQlcCisJCWlmIChjb25kaXRpb24pCQkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQlzcGluX3VubG9ja19pcnEoJmxvY2spOwkJCQkJXAorCQljbWQ7CQkJCQkJCVwKKwkJc2NoZWR1bGUoKTsJCQkJCQlcCisJCXNwaW5fbG9ja19pcnEoJmxvY2spOwkJCQkJXAorCX0JCQkJCQkJCVwKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsJCQkJCVwKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHdhaXRfZXZlbnRfbG9ja19pcnEod3EsIGNvbmRpdGlvbiwgbG9jaywgY21kKSAJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChjb25kaXRpb24pCSAJCQkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJX193YWl0X2V2ZW50X2xvY2tfaXJxKHdxLCBjb25kaXRpb24sIGxvY2ssIGNtZCk7CQlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2FmZV9wdXRfcGFnZShzdHJ1Y3QgcGFnZSAqcCkKK3sKKwlpZiAocCkgcHV0X3BhZ2UocCk7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQkxPQ0sgKi8KKyNlbmRpZgorCisKK2V4dGVybiBpbnQgcmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcCk7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcCk7CitleHRlcm4gbWRrX3RocmVhZF90ICogbWRfcmVnaXN0ZXJfdGhyZWFkKHZvaWQgKCpydW4pIChtZGRldl90ICptZGRldiksCisJCQkJbWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgbWRfdW5yZWdpc3Rlcl90aHJlYWQobWRrX3RocmVhZF90ICp0aHJlYWQpOworZXh0ZXJuIHZvaWQgbWRfd2FrZXVwX3RocmVhZChtZGtfdGhyZWFkX3QgKnRocmVhZCk7CitleHRlcm4gdm9pZCBtZF9jaGVja19yZWNvdmVyeShtZGRldl90ICptZGRldik7CitleHRlcm4gdm9pZCBtZF93cml0ZV9zdGFydChtZGRldl90ICptZGRldiwgc3RydWN0IGJpbyAqYmkpOworZXh0ZXJuIHZvaWQgbWRfd3JpdGVfZW5kKG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiB2b2lkIG1kX2RvbmVfc3luYyhtZGRldl90ICptZGRldiwgaW50IGJsb2NrcywgaW50IG9rKTsKK2V4dGVybiB2b2lkIG1kX2Vycm9yKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKKworZXh0ZXJuIHZvaWQgbWRfc3VwZXJfd3JpdGUobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYsCisJCQkgICBzZWN0b3JfdCBzZWN0b3IsIGludCBzaXplLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBtZF9zdXBlcl93YWl0KG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiBpbnQgc3luY19wYWdlX2lvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpemUsCisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJ3KTsKK2V4dGVybiB2b2lkIG1kX2RvX3N5bmMobWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIHZvaWQgbWRfbmV3X2V2ZW50KG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiBpbnQgbWRfYWxsb3dfd3JpdGUobWRkZXZfdCAqbWRkZXYpOworZXh0ZXJuIHZvaWQgbWRfd2FpdF9mb3JfYmxvY2tlZF9yZGV2KG1ka19yZGV2X3QgKnJkZXYsIG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiB2b2lkIG1kX3NldF9hcnJheV9zZWN0b3JzKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBhcnJheV9zZWN0b3JzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWt0YWJsZXMuYyBiL2RyaXZlcnMvbWQvbWt0YWJsZXMuYwppbmRleCBiNjFkNTc2Li4zYjE1MDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21rdGFibGVzLmMKKysrIGIvZHJpdmVycy9tZC9ta3RhYmxlcy5jCkBAIC01OSw3ICs1OSw3IEBACiAJdWludDhfdCB2OwogCXVpbnQ4X3QgZXhwdGJsWzI1Nl0sIGludnRibFsyNTZdOwogCi0JcHJpbnRmKCIjaW5jbHVkZSBcInJhaWQ2LmhcIlxuIik7CisJcHJpbnRmKCIjaW5jbHVkZSA8bGludXgvcmFpZC9wcS5oPlxuIik7CiAKIAkvKiBDb21wdXRlIG11bHRpcGxpY2F0aW9uIHRhYmxlICovCiAJcHJpbnRmKCJcbmNvbnN0IHU4ICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDI1NikpKVxuIgpAQCAtNzYsNiArNzYsOSBAQAogCQlwcmludGYoIlx0fSxcbiIpOwogCX0KIAlwcmludGYoIn07XG4iKTsKKwlwcmludGYoIiNpZmRlZiBfX0tFUk5FTF9fXG4iKTsKKwlwcmludGYoIkVYUE9SVF9TWU1CT0wocmFpZDZfZ2ZtdWwpO1xuIik7CisJcHJpbnRmKCIjZW5kaWZcbiIpOwogCiAJLyogQ29tcHV0ZSBwb3dlci1vZi0yIHRhYmxlIChleHBvbmVudCkgKi8KIAl2ID0gMTsKQEAgLTkyLDYgKzk1LDkgQEAKIAkJfQogCX0KIAlwcmludGYoIn07XG4iKTsKKwlwcmludGYoIiNpZmRlZiBfX0tFUk5FTF9fXG4iKTsKKwlwcmludGYoIkVYUE9SVF9TWU1CT0wocmFpZDZfZ2ZleHApO1xuIik7CisJcHJpbnRmKCIjZW5kaWZcbiIpOwogCiAJLyogQ29tcHV0ZSBpbnZlcnNlIHRhYmxlIHheLTEgPT0geF4yNTQgKi8KIAlwcmludGYoIlxuY29uc3QgdTggX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSlcbiIKQEAgLTEwNCw2ICsxMTAsOSBAQAogCQl9CiAJfQogCXByaW50ZigifTtcbiIpOworCXByaW50ZigiI2lmZGVmIF9fS0VSTkVMX19cbiIpOworCXByaW50ZigiRVhQT1JUX1NZTUJPTChyYWlkNl9nZmludik7XG4iKTsKKwlwcmludGYoIiNlbmRpZlxuIik7CiAKIAkvKiBDb21wdXRlIGludigyXnggKyAxKSAoZXhwb25lbnQteG9yLWludmVyc2UpIHRhYmxlICovCiAJcHJpbnRmKCJcbmNvbnN0IHU4IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpXG4iCkBAIC0xMTUsNiArMTI0LDkgQEAKIAkJCSAgICAgICAoaiA9PSA3KSA/ICdcbicgOiAnICcpOwogCX0KIAlwcmludGYoIn07XG4iKTsKKwlwcmludGYoIiNpZmRlZiBfX0tFUk5FTF9fXG4iKTsKKwlwcmludGYoIkVYUE9SVF9TWU1CT0wocmFpZDZfZ2ZleGkpO1xuIik7CisJcHJpbnRmKCIjZW5kaWZcbiIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL211bHRpcGF0aC5jIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwppbmRleCBmNmQwOGYyLi40MWNlZDBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL211bHRpcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKQEAgLTE5LDcgKzE5LDExIEBACiAgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tdWx0aXBhdGguaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWlkL21kX3UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgIm1kLmgiCisjaW5jbHVkZSAibXVsdGlwYXRoLmgiCiAKICNkZWZpbmUgTUFYX1dPUktfUEVSX0RJU0sgMTI4CiAKQEAgLTQwMiw2ICs0MDYsMTQgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgc2VjdG9yX3QgbXVsdGlwYXRoX3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3RvcnMsIGludCByYWlkX2Rpc2tzKQoreworCVdBUk5fT05DRShzZWN0b3JzIHx8IHJhaWRfZGlza3MsCisJCSAgIiVzIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJpYyByZXNoYXBlXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gbWRkZXYtPmRldl9zZWN0b3JzOworfQorCiBzdGF0aWMgaW50IG11bHRpcGF0aF9ydW4gKG1kZGV2X3QgKm1kZGV2KQogewogCW11bHRpcGF0aF9jb25mX3QgKmNvbmY7CkBAIC00OTgsNyArNTEwLDcgQEAKIAkvKgogCSAqIE9rLCBldmVyeXRoaW5nIGlzIGp1c3QgZmluZSBub3cKIAkgKi8KLQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IG1kZGV2LT5zaXplICogMjsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgbXVsdGlwYXRoX3NpemUobWRkZXYsIDAsIDApKTsKIAogCW1kZGV2LT5xdWV1ZS0+dW5wbHVnX2ZuID0gbXVsdGlwYXRoX3VucGx1ZzsKIAltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gbXVsdGlwYXRoX2Nvbmdlc3RlZDsKQEAgLTU0Myw2ICs1NTUsNyBAQAogCS5lcnJvcl9oYW5kbGVyCT0gbXVsdGlwYXRoX2Vycm9yLAogCS5ob3RfYWRkX2Rpc2sJPSBtdWx0aXBhdGhfYWRkX2Rpc2ssCiAJLmhvdF9yZW1vdmVfZGlzaz0gbXVsdGlwYXRoX3JlbW92ZV9kaXNrLAorCS5zaXplCQk9IG11bHRpcGF0aF9zaXplLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbXVsdGlwYXRoX2luaXQgKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL211bHRpcGF0aC5oIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmE3MGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguaApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIF9NVUxUSVBBVEhfSAorI2RlZmluZSBfTVVMVElQQVRIX0gKKworc3RydWN0IG11bHRpcGF0aF9pbmZvIHsKKwltZGtfcmRldl90CSpyZGV2OworfTsKKworc3RydWN0IG11bHRpcGF0aF9wcml2YXRlX2RhdGEgeworCW1kZGV2X3QJCQkqbWRkZXY7CisJc3RydWN0IG11bHRpcGF0aF9pbmZvCSptdWx0aXBhdGhzOworCWludAkJCXJhaWRfZGlza3M7CisJaW50CQkJd29ya2luZ19kaXNrczsKKwlzcGlubG9ja190CQlkZXZpY2VfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJldHJ5X2xpc3Q7CisKKwltZW1wb29sX3QJCSpwb29sOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbXVsdGlwYXRoX3ByaXZhdGVfZGF0YSBtdWx0aXBhdGhfY29uZl90OworCisvKgorICogdGhpcyBpcyB0aGUgb25seSBwb2ludCBpbiB0aGUgUkFJRCBjb2RlIHdoZXJlIHdlIHZpb2xhdGUKKyAqIEMgdHlwZSBzYWZldHkuIG1kZGV2LT5wcml2YXRlIGlzIGFuICdvcGFxdWUnIHBvaW50ZXIuCisgKi8KKyNkZWZpbmUgbWRkZXZfdG9fY29uZihtZGRldikgKChtdWx0aXBhdGhfY29uZl90ICopIG1kZGV2LT5wcml2YXRlKQorCisvKgorICogdGhpcyBpcyBvdXIgJ3ByaXZhdGUnICdjb2xsZWN0aXZlJyBNVUxUSVBBVEggYnVmZmVyIGhlYWQuCisgKiBpdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGtpbmQgb2YgSU8gb3BlcmF0aW9ucyB3ZXJlIHN0YXJ0ZWQKKyAqIGZvciB0aGlzIE1VTFRJUEFUSCBvcGVyYXRpb24sIGFuZCBhYm91dCB0aGVpciBzdGF0dXM6CisgKi8KKworc3RydWN0IG11bHRpcGF0aF9iaCB7CisJbWRkZXZfdAkJCSptZGRldjsKKwlzdHJ1Y3QgYmlvCQkqbWFzdGVyX2JpbzsKKwlzdHJ1Y3QgYmlvCQliaW87CisJaW50CQkJcGF0aDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJldHJ5X2xpc3Q7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQwLmMgYi9kcml2ZXJzL21kL3JhaWQwLmMKaW5kZXggYzYwNWJhOC4uYzA4ZDc1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDAuYwpAQCAtMTgsNyArMTgsMTAgQEAKICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgCiAqLwogCi0jaW5jbHVkZSA8bGludXgvcmFpZC9yYWlkMC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAibWQuaCIKKyNpbmNsdWRlICJyYWlkMC5oIgogCiBzdGF0aWMgdm9pZCByYWlkMF91bnBsdWcoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CkBAIC03MywxNiArNzYsMTUgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2MiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gInJhaWQwOiAgIGNvbXBhcmluZyAlcyglbGx1KSIsCiAJCQkgICAgICAgYmRldm5hbWUocmRldjEtPmJkZXYsYiksCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2MS0+c2l6ZSk7CisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2MS0+c2VjdG9ycyk7CiAJCQlwcmludGsoS0VSTl9JTkZPICIgd2l0aCAlcyglbGx1KVxuIiwKIAkJCSAgICAgICBiZGV2bmFtZShyZGV2Mi0+YmRldixiKSwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJkZXYyLT5zaXplKTsKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJkZXYyLT5zZWN0b3JzKTsKIAkJCWlmIChyZGV2MiA9PSByZGV2MSkgewogCQkJCXByaW50ayhLRVJOX0lORk8gInJhaWQwOiAgIEVORFxuIik7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlpZiAocmRldjItPnNpemUgPT0gcmRldjEtPnNpemUpCi0JCQl7CisJCQlpZiAocmRldjItPnNlY3RvcnMgPT0gcmRldjEtPnNlY3RvcnMpIHsKIAkJCQkvKgogCQkJCSAqIE5vdCB1bmlxdWUsIGRvbid0IGNvdW50IGl0IGFzIGEgbmV3CiAJCQkJICogZ3JvdXAKQEAgLTE0NSw3ICsxNDcsNyBAQAogCQkgICAgbWRkZXYtPnF1ZXVlLT5tYXhfc2VjdG9ycyA+IChQQUdFX1NJWkU+PjkpKQogCQkJYmxrX3F1ZXVlX21heF9zZWN0b3JzKG1kZGV2LT5xdWV1ZSwgUEFHRV9TSVpFPj45KTsKIAotCQlpZiAoIXNtYWxsZXN0IHx8IChyZGV2MS0+c2l6ZSA8c21hbGxlc3QtPnNpemUpKQorCQlpZiAoIXNtYWxsZXN0IHx8IChyZGV2MS0+c2VjdG9ycyA8IHNtYWxsZXN0LT5zZWN0b3JzKSkKIAkJCXNtYWxsZXN0ID0gcmRldjE7CiAJCWNudCsrOwogCX0KQEAgLTE1NSwxMCArMTU3LDEwIEBACiAJCWdvdG8gYWJvcnQ7CiAJfQogCXpvbmUtPm5iX2RldiA9IGNudDsKLQl6b25lLT5zZWN0b3JzID0gc21hbGxlc3QtPnNpemUgKiBjbnQgKiAyOworCXpvbmUtPnNlY3RvcnMgPSBzbWFsbGVzdC0+c2VjdG9ycyAqIGNudDsKIAl6b25lLT56b25lX3N0YXJ0ID0gMDsKIAotCWN1cnJlbnRfc3RhcnQgPSBzbWFsbGVzdC0+c2l6ZSAqIDI7CisJY3VycmVudF9zdGFydCA9IHNtYWxsZXN0LT5zZWN0b3JzOwogCWN1cnJfem9uZV9zdGFydCA9IHpvbmUtPnNlY3RvcnM7CiAKIAkvKiBub3cgZG8gdGhlIG90aGVyIHpvbmVzICovCkBAIC0xNzcsMjkgKzE3OSwyOSBAQAogCQkJcmRldiA9IGNvbmYtPnN0cmlwX3pvbmVbMF0uZGV2W2pdOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDA6IGNoZWNraW5nICVzIC4uLiIsCiAJCQkJYmRldm5hbWUocmRldi0+YmRldiwgYikpOwotCQkJaWYgKHJkZXYtPnNpemUgPiBjdXJyZW50X3N0YXJ0IC8gMikgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiBjb250YWluZWQgYXMgZGV2aWNlICVkXG4iLAotCQkJCQljKTsKLQkJCQl6b25lLT5kZXZbY10gPSByZGV2OwotCQkJCWMrKzsKLQkJCQlpZiAoIXNtYWxsZXN0IHx8IChyZGV2LT5zaXplIDxzbWFsbGVzdC0+c2l6ZSkpIHsKLQkJCQkJc21hbGxlc3QgPSByZGV2OwotCQkJCQlwcmludGsoS0VSTl9JTkZPICIgICglbGx1KSBpcyBzbWFsbGVzdCEuXG4iLAotCQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZGV2LT5zaXplKTsKLQkJCQl9Ci0JCQl9IGVsc2UKKwkJCWlmIChyZGV2LT5zZWN0b3JzIDw9IGN1cnJlbnRfc3RhcnQpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICIgbm9wZS5cbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiIGNvbnRhaW5lZCBhcyBkZXZpY2UgJWRcbiIsIGMpOworCQkJem9uZS0+ZGV2W2NdID0gcmRldjsKKwkJCWMrKzsKKwkJCWlmICghc21hbGxlc3QgfHwgcmRldi0+c2VjdG9ycyA8IHNtYWxsZXN0LT5zZWN0b3JzKSB7CisJCQkJc21hbGxlc3QgPSByZGV2OworCQkJCXByaW50ayhLRVJOX0lORk8gIiAgKCVsbHUpIGlzIHNtYWxsZXN0IS5cbiIsCisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcmRldi0+c2VjdG9ycyk7CisJCQl9CiAJCX0KIAogCQl6b25lLT5uYl9kZXYgPSBjOwotCQl6b25lLT5zZWN0b3JzID0gKHNtYWxsZXN0LT5zaXplICogMiAtIGN1cnJlbnRfc3RhcnQpICogYzsKKwkJem9uZS0+c2VjdG9ycyA9IChzbWFsbGVzdC0+c2VjdG9ycyAtIGN1cnJlbnRfc3RhcnQpICogYzsKIAkJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDA6IHpvbmUtPm5iX2RldjogJWQsIHNlY3RvcnM6ICVsbHVcbiIsCiAJCQl6b25lLT5uYl9kZXYsICh1bnNpZ25lZCBsb25nIGxvbmcpem9uZS0+c2VjdG9ycyk7CiAKIAkJem9uZS0+em9uZV9zdGFydCA9IGN1cnJfem9uZV9zdGFydDsKIAkJY3Vycl96b25lX3N0YXJ0ICs9IHpvbmUtPnNlY3RvcnM7CiAKLQkJY3VycmVudF9zdGFydCA9IHNtYWxsZXN0LT5zaXplICogMjsKKwkJY3VycmVudF9zdGFydCA9IHNtYWxsZXN0LT5zZWN0b3JzOwogCQlwcmludGsoS0VSTl9JTkZPICJyYWlkMDogY3VycmVudCB6b25lIHN0YXJ0OiAlbGx1XG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljdXJyZW50X3N0YXJ0KTsKIAl9CkBAIC0yNjEsMTIgKzI2MywyNSBAQAogCQlyZXR1cm4gbWF4OwogfQogCitzdGF0aWMgc2VjdG9yX3QgcmFpZDBfc2l6ZShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycywgaW50IHJhaWRfZGlza3MpCit7CisJc2VjdG9yX3QgYXJyYXlfc2VjdG9ycyA9IDA7CisJbWRrX3JkZXZfdCAqcmRldjsKKworCVdBUk5fT05DRShzZWN0b3JzIHx8IHJhaWRfZGlza3MsCisJCSAgIiVzIGRvZXMgbm90IHN1cHBvcnQgZ2VuZXJpYyByZXNoYXBlXG4iLCBfX2Z1bmNfXyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQorCQlhcnJheV9zZWN0b3JzICs9IHJkZXYtPnNlY3RvcnM7CisKKwlyZXR1cm4gYXJyYXlfc2VjdG9yczsKK30KKwogc3RhdGljIGludCByYWlkMF9ydW4gKG1kZGV2X3QgKm1kZGV2KQogewogCXVuc2lnbmVkICBjdXI9MCwgaT0wLCBuYl96b25lOwogCXM2NCBzZWN0b3JzOwogCXJhaWQwX2NvbmZfdCAqY29uZjsKLQltZGtfcmRldl90ICpyZGV2OwogCiAJaWYgKG1kZGV2LT5jaHVua19zaXplID09IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkMDogbm9uLXplcm8gY2h1bmsgc2l6ZSByZXF1aXJlZC5cbiIpOwpAQCAtMjkxLDE2ICszMDYsMTQgQEAKIAkJZ290byBvdXRfZnJlZV9jb25mOwogCiAJLyogY2FsY3VsYXRlIGFycmF5IGRldmljZSBzaXplICovCi0JbWRkZXYtPmFycmF5X3NlY3RvcnMgPSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCi0JCW1kZGV2LT5hcnJheV9zZWN0b3JzICs9IHJkZXYtPnNpemUgKiAyOworCW1kX3NldF9hcnJheV9zZWN0b3JzKG1kZGV2LCByYWlkMF9zaXplKG1kZGV2LCAwLCAwKSk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJyYWlkMCA6IG1kX3NpemUgaXMgJWxsdSBzZWN0b3JzLlxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZyltZGRldi0+YXJyYXlfc2VjdG9ycyk7CiAJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDAgOiBjb25mLT5zcGFjaW5nIGlzICVsbHUgc2VjdG9ycy5cbiIsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpY29uZi0+c3BhY2luZyk7CiAJewotCQlzZWN0b3JfdCBzID0gbWRkZXYtPmFycmF5X3NlY3RvcnM7CisJCXNlY3Rvcl90IHMgPSByYWlkMF9zaXplKG1kZGV2LCAwLCAwKTsKIAkJc2VjdG9yX3Qgc3BhY2UgPSBjb25mLT5zcGFjaW5nOwogCQlpbnQgcm91bmQ7CiAJCWNvbmYtPnNlY3Rvcl9zaGlmdCA9IDA7CkBAIC01MDksNiArNTIyLDcgQEAKIAkucnVuCQk9IHJhaWQwX3J1biwKIAkuc3RvcAkJPSByYWlkMF9zdG9wLAogCS5zdGF0dXMJCT0gcmFpZDBfc3RhdHVzLAorCS5zaXplCQk9IHJhaWQwX3NpemUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCByYWlkMF9pbml0ICh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMC5oIGIvZHJpdmVycy9tZC9yYWlkMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNGIxMmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21kL3JhaWQwLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBfUkFJRDBfSAorI2RlZmluZSBfUkFJRDBfSAorCitzdHJ1Y3Qgc3RyaXBfem9uZQoreworCXNlY3Rvcl90IHpvbmVfc3RhcnQ7CS8qIFpvbmUgb2Zmc2V0IGluIG1kX2RldiAoaW4gc2VjdG9ycykgKi8KKwlzZWN0b3JfdCBkZXZfc3RhcnQ7CS8qIFpvbmUgb2Zmc2V0IGluIHJlYWwgZGV2IChpbiBzZWN0b3JzKSAqLworCXNlY3Rvcl90IHNlY3RvcnM7CS8qIFpvbmUgc2l6ZSBpbiBzZWN0b3JzICovCisJaW50IG5iX2RldjsJCS8qICMgb2YgZGV2aWNlcyBhdHRhY2hlZCB0byB0aGUgem9uZSAqLworCW1ka19yZGV2X3QgKipkZXY7CS8qIERldmljZXMgYXR0YWNoZWQgdG8gdGhlIHpvbmUgKi8KK307CisKK3N0cnVjdCByYWlkMF9wcml2YXRlX2RhdGEKK3sKKwlzdHJ1Y3Qgc3RyaXBfem9uZSAqKmhhc2hfdGFibGU7IC8qIFRhYmxlIG9mIGluZGV4ZXMgaW50byBzdHJpcF96b25lICovCisJc3RydWN0IHN0cmlwX3pvbmUgKnN0cmlwX3pvbmU7CisJbWRrX3JkZXZfdCAqKmRldmxpc3Q7IC8qIGxpc3RzIG9mIHJkZXZzLCBwb2ludGVkIHRvIGJ5IHN0cmlwX3pvbmUtPmRldiAqLworCWludCBucl9zdHJpcF96b25lczsKKworCXNlY3Rvcl90IHNwYWNpbmc7CisJaW50IHNlY3Rvcl9zaGlmdDsgLyogc2hpZnQgdGhpcyBiZWZvcmUgZGl2aWRlIGJ5IHNwYWNpbmcgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IHJhaWQwX3ByaXZhdGVfZGF0YSByYWlkMF9jb25mX3Q7CisKKyNkZWZpbmUgbWRkZXZfdG9fY29uZihtZGRldikgKChyYWlkMF9jb25mX3QgKikgbWRkZXYtPnByaXZhdGUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkMS5jIGIvZHJpdmVycy9tZC9yYWlkMS5jCmluZGV4IGUyNDY2NDIuLmI0ZjRiYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEuYworKysgYi9kcml2ZXJzL21kL3JhaWQxLmMKQEAgLTMxLDEwICszMSwxMyBAQAogICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9yYWlkL3JhaWQxLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgIm1kLmgiCisjaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKKyNpbmNsdWRlICJyYWlkMS5oIgorI2luY2x1ZGUgImJpdG1hcC5oIgogCiAjZGVmaW5lIERFQlVHIDAKICNpZiBERUJVRwpAQCAtMTcyMyw3ICsxNzI2LDcgQEAKIAkJCXJldHVybiAwOwogCX0KIAotCW1heF9zZWN0b3IgPSBtZGRldi0+c2l6ZSA8PCAxOworCW1heF9zZWN0b3IgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CiAJaWYgKHNlY3Rvcl9uciA+PSBtYXhfc2VjdG9yKSB7CiAJCS8qIElmIHdlIGFib3J0ZWQsIHdlIG5lZWQgdG8gYWJvcnQgdGhlCiAJCSAqIHN5bmMgb24gdGhlICdjdXJyZW50JyBiaXRtYXAgY2h1bmsgKHRoZXJlIHdpbGwKQEAgLTE5MTksNiArMTkyMiwxNCBAQAogCXJldHVybiBucl9zZWN0b3JzOwogfQogCitzdGF0aWMgc2VjdG9yX3QgcmFpZDFfc2l6ZShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycywgaW50IHJhaWRfZGlza3MpCit7CisJaWYgKHNlY3RvcnMpCisJCXJldHVybiBzZWN0b3JzOworCisJcmV0dXJuIG1kZGV2LT5kZXZfc2VjdG9yczsKK30KKwogc3RhdGljIGludCBydW4obWRkZXZfdCAqbWRkZXYpCiB7CiAJY29uZl90ICpjb25mOwpAQCAtMjA0OCw3ICsyMDU5LDcgQEAKIAkvKgogCSAqIE9rLCBldmVyeXRoaW5nIGlzIGp1c3QgZmluZSBub3cKIAkgKi8KLQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IG1kZGV2LT5zaXplICogMjsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDFfc2l6ZShtZGRldiwgMCwgMCkpOwogCiAJbWRkZXYtPnF1ZXVlLT51bnBsdWdfZm4gPSByYWlkMV91bnBsdWc7CiAJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IHJhaWQxX2Nvbmdlc3RlZDsKQEAgLTIwODksNiArMjEwMCw5IEBACiAJCS8qIG5lZWQgdG8ga2ljayBzb21ldGhpbmcgaGVyZSB0byBtYWtlIHN1cmUgSS9PIGdvZXM/ICovCiAJfQogCisJcmFpc2VfYmFycmllcihjb25mKTsKKwlsb3dlcl9iYXJyaWVyKGNvbmYpOworCiAJbWRfdW5yZWdpc3Rlcl90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAJbWRkZXYtPnRocmVhZCA9IE5VTEw7CiAJYmxrX3N5bmNfcXVldWUobWRkZXYtPnF1ZXVlKTsgLyogdGhlIHVucGx1ZyBmbiByZWZlcmVuY2VzICdjb25mJyovCkBAIC0yMTEwLDE1ICsyMTI0LDE3IEBACiAJICogYW55IGlvIGluIHRoZSByZW1vdmVkIHNwYWNlIGNvbXBsZXRlcywgYnV0IGl0IGhhcmRseSBzZWVtcwogCSAqIHdvcnRoIGl0LgogCSAqLwotCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gc2VjdG9yczsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDFfc2l6ZShtZGRldiwgc2VjdG9ycywgMCkpOworCWlmIChtZGRldi0+YXJyYXlfc2VjdG9ycyA+IHJhaWQxX3NpemUobWRkZXYsIHNlY3RvcnMsIDApKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlzZXRfY2FwYWNpdHkobWRkZXYtPmdlbmRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKIAltZGRldi0+Y2hhbmdlZCA9IDE7Ci0JaWYgKG1kZGV2LT5hcnJheV9zZWN0b3JzIC8gMiA+IG1kZGV2LT5zaXplICYmCisJaWYgKHNlY3RvcnMgPiBtZGRldi0+ZGV2X3NlY3RvcnMgJiYKIAkgICAgbWRkZXYtPnJlY292ZXJ5X2NwID09IE1heFNlY3RvcikgewotCQltZGRldi0+cmVjb3ZlcnlfY3AgPSBtZGRldi0+c2l6ZSA8PCAxOworCQltZGRldi0+cmVjb3ZlcnlfY3AgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAl9Ci0JbWRkZXYtPnNpemUgPSBtZGRldi0+YXJyYXlfc2VjdG9ycyAvIDI7CisJbWRkZXYtPmRldl9zZWN0b3JzID0gc2VjdG9yczsKIAltZGRldi0+cmVzeW5jX21heF9zZWN0b3JzID0gc2VjdG9yczsKIAlyZXR1cm4gMDsKIH0KQEAgLTIyNjQsNiArMjI4MCw3IEBACiAJLnNwYXJlX2FjdGl2ZQk9IHJhaWQxX3NwYXJlX2FjdGl2ZSwKIAkuc3luY19yZXF1ZXN0CT0gc3luY19yZXF1ZXN0LAogCS5yZXNpemUJCT0gcmFpZDFfcmVzaXplLAorCS5zaXplCQk9IHJhaWQxX3NpemUsCiAJLmNoZWNrX3Jlc2hhcGUJPSByYWlkMV9yZXNoYXBlLAogCS5xdWllc2NlCT0gcmFpZDFfcXVpZXNjZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmggYi9kcml2ZXJzL21kL3JhaWQxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyMGVlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuaApAQCAtMCwwICsxLDEzMiBAQAorI2lmbmRlZiBfUkFJRDFfSAorI2RlZmluZSBfUkFJRDFfSAorCit0eXBlZGVmIHN0cnVjdCBtaXJyb3JfaW5mbyBtaXJyb3JfaW5mb190OworCitzdHJ1Y3QgbWlycm9yX2luZm8geworCW1ka19yZGV2X3QJKnJkZXY7CisJc2VjdG9yX3QJaGVhZF9wb3NpdGlvbjsKK307CisKKy8qCisgKiBtZW1vcnkgcG9vbHMgbmVlZCBhIHBvaW50ZXIgdG8gdGhlIG1kZGV2LCBzbyB0aGV5IGNhbiBmb3JjZSBhbiB1bnBsdWcKKyAqIHdoZW4gbWVtb3J5IGlzIHRpZ2h0LCBhbmQgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGRyaXZlcyB0aGF0IHRoZQorICogcG9vbCB3YXMgYWxsb2NhdGVkIGZvciwgc28gdGhleSBrbm93IGhvdyBtdWNoIHRvIGFsbG9jYXRlIGFuZCBmcmVlLgorICogbWRkZXYtPnJhaWRfZGlza3MgY2Fubm90IGJlIHVzZWQsIGFzIGl0IGNhbiBjaGFuZ2Ugd2hpbGUgYSBwb29sIGlzIGFjdGl2ZQorICogVGhlc2UgdHdvIGRhdHVtcyBhcmUgc3RvcmVkIGluIGEga21hbGxvY2VkIHN0cnVjdC4KKyAqLworCitzdHJ1Y3QgcG9vbF9pbmZvIHsKKwltZGRldl90ICptZGRldjsKKwlpbnQJcmFpZF9kaXNrczsKK307CisKKwordHlwZWRlZiBzdHJ1Y3QgcjFiaW9fcyByMWJpb190OworCitzdHJ1Y3QgcjFfcHJpdmF0ZV9kYXRhX3MgeworCW1kZGV2X3QJCQkqbWRkZXY7CisJbWlycm9yX2luZm9fdAkJKm1pcnJvcnM7CisJaW50CQkJcmFpZF9kaXNrczsKKwlpbnQJCQlsYXN0X3VzZWQ7CisJc2VjdG9yX3QJCW5leHRfc2VxX3NlY3Q7CisJc3BpbmxvY2tfdAkJZGV2aWNlX2xvY2s7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJldHJ5X2xpc3Q7CisJLyogcXVldWUgcGVuZGluZyB3cml0ZXMgYW5kIHN1Ym1pdCB0aGVtIG9uIHVucGx1ZyAqLworCXN0cnVjdCBiaW9fbGlzdAkJcGVuZGluZ19iaW9fbGlzdDsKKwkvKiBxdWV1ZSBvZiB3cml0ZXMgdGhhdCBoYXZlIGJlZW4gdW5wbHVnZ2VkICovCisJc3RydWN0IGJpb19saXN0CQlmbHVzaGluZ19iaW9fbGlzdDsKKworCS8qIGZvciB1c2Ugd2hlbiBzeW5jaW5nIG1pcnJvcnM6ICovCisKKwlzcGlubG9ja190CQlyZXN5bmNfbG9jazsKKwlpbnQJCQlucl9wZW5kaW5nOworCWludAkJCW5yX3dhaXRpbmc7CisJaW50CQkJbnJfcXVldWVkOworCWludAkJCWJhcnJpZXI7CisJc2VjdG9yX3QJCW5leHRfcmVzeW5jOworCWludAkJCWZ1bGxzeW5jOyAgLyogc2V0IHRvIDEgaWYgYSBmdWxsIHN5bmMgaXMgbmVlZGVkLAorCQkJCQkgICAgKiAoZnJlc2ggZGV2aWNlIGFkZGVkKS4KKwkJCQkJICAgICogQ2xlYXJlZCB3aGVuIGEgc3luYyBjb21wbGV0ZXMuCisJCQkJCSAgICAqLworCisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9iYXJyaWVyOworCisJc3RydWN0IHBvb2xfaW5mbwkqcG9vbGluZm87CisKKwlzdHJ1Y3QgcGFnZQkJKnRtcHBhZ2U7CisKKwltZW1wb29sX3QgKnIxYmlvX3Bvb2w7CisJbWVtcG9vbF90ICpyMWJ1Zl9wb29sOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcjFfcHJpdmF0ZV9kYXRhX3MgY29uZl90OworCisvKgorICogdGhpcyBpcyB0aGUgb25seSBwb2ludCBpbiB0aGUgUkFJRCBjb2RlIHdoZXJlIHdlIHZpb2xhdGUKKyAqIEMgdHlwZSBzYWZldHkuIG1kZGV2LT5wcml2YXRlIGlzIGFuICdvcGFxdWUnIHBvaW50ZXIuCisgKi8KKyNkZWZpbmUgbWRkZXZfdG9fY29uZihtZGRldikgKChjb25mX3QgKikgbWRkZXYtPnByaXZhdGUpCisKKy8qCisgKiB0aGlzIGlzIG91ciAncHJpdmF0ZScgUkFJRDEgYmlvLgorICoKKyAqIGl0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHdoYXQga2luZCBvZiBJTyBvcGVyYXRpb25zIHdlcmUgc3RhcnRlZAorICogZm9yIHRoaXMgUkFJRDEgb3BlcmF0aW9uLCBhbmQgYWJvdXQgdGhlaXIgc3RhdHVzOgorICovCisKK3N0cnVjdCByMWJpb19zIHsKKwlhdG9taWNfdAkJcmVtYWluaW5nOyAvKiAnaGF2ZSB3ZSBmaW5pc2hlZCcgY291bnQsCisJCQkJCSAgICAqIHVzZWQgZnJvbSBJUlEgaGFuZGxlcnMKKwkJCQkJICAgICovCisJYXRvbWljX3QJCWJlaGluZF9yZW1haW5pbmc7IC8qIG51bWJlciBvZiB3cml0ZS1iZWhpbmQgaW9zIHJlbWFpbmluZworCQkJCQkJICogaW4gdGhpcyBCZWhpbmRJTyByZXF1ZXN0CisJCQkJCQkgKi8KKwlzZWN0b3JfdAkJc2VjdG9yOworCWludAkJCXNlY3RvcnM7CisJdW5zaWduZWQgbG9uZwkJc3RhdGU7CisJbWRkZXZfdAkJCSptZGRldjsKKwkvKgorCSAqIG9yaWdpbmFsIGJpbyBnb2luZyB0byAvZGV2L21keAorCSAqLworCXN0cnVjdCBiaW8JCSptYXN0ZXJfYmlvOworCS8qCisJICogaWYgdGhlIElPIGlzIGluIFJFQUQgZGlyZWN0aW9uLCB0aGVuIHRoaXMgaXMgd2hlcmUgd2UgcmVhZAorCSAqLworCWludAkJCXJlYWRfZGlzazsKKworCXN0cnVjdCBsaXN0X2hlYWQJcmV0cnlfbGlzdDsKKwlzdHJ1Y3QgYml0bWFwX3VwZGF0ZQkqYml0bWFwX3VwZGF0ZTsKKwkvKgorCSAqIGlmIHRoZSBJTyBpcyBpbiBXUklURSBkaXJlY3Rpb24sIHRoZW4gbXVsdGlwbGUgYmlvcyBhcmUgdXNlZC4KKwkgKiBXZSBjaG9vc2UgdGhlIG51bWJlciB3aGVuIHRoZXkgYXJlIGFsbG9jYXRlZC4KKwkgKi8KKwlzdHJ1Y3QgYmlvCQkqYmlvc1swXTsKKwkvKiBETyBOT1QgUFVUIEFOWSBORVcgRklFTERTIEhFUkUgLSBiaW9zIGFycmF5IGlzIGNvbnRpZ3VvdXNseSBhbGxvY2VkKi8KK307CisKKy8qIHdoZW4gd2UgZ2V0IGEgcmVhZCBlcnJvciBvbiBhIHJlYWQtb25seSBhcnJheSwgd2UgcmVkaXJlY3QgdG8gYW5vdGhlcgorICogZGV2aWNlIHdpdGhvdXQgZmFpbGluZyB0aGUgZmlyc3QgZGV2aWNlLCBvciB0cnlpbmcgdG8gb3Zlci13cml0ZSB0bworICogY29ycmVjdCB0aGUgcmVhZCBlcnJvci4gIFRvIGtlZXAgdHJhY2sgb2YgYmFkIGJsb2NrcyBvbiBhIHBlci1iaW8KKyAqIGxldmVsLCB3ZSBzdG9yZSBJT19CTE9DS0VEIGluIHRoZSBhcHByb3ByaWF0ZSAnYmlvcycgcG9pbnRlcgorICovCisjZGVmaW5lIElPX0JMT0NLRUQgKChzdHJ1Y3QgYmlvKikxKQorCisvKiBiaXRzIGZvciByMWJpby5zdGF0ZSAqLworI2RlZmluZQlSMUJJT19VcHRvZGF0ZQkwCisjZGVmaW5lCVIxQklPX0lzU3luYwkxCisjZGVmaW5lCVIxQklPX0RlZ3JhZGVkCTIKKyNkZWZpbmUJUjFCSU9fQmVoaW5kSU8JMworI2RlZmluZQlSMUJJT19CYXJyaWVyCTQKKyNkZWZpbmUgUjFCSU9fQmFycmllclJldHJ5IDUKKy8qIEZvciB3cml0ZS1iZWhpbmQgcmVxdWVzdHMsIHdlIGNhbGwgYmlfZW5kX2lvIHdoZW4KKyAqIHRoZSBsYXN0IG5vbi13cml0ZS1iZWhpbmQgZGV2aWNlIGNvbXBsZXRlcywgcHJvdmlkaW5nCisgKiBhbnkgd3JpdGUgd2FzIHN1Y2Nlc3NmdWwuICBPdGhlcndpc2Ugd2UgY2FsbCB3aGVuCisgKiBhbnkgd3JpdGUtYmVoaW5kIHdyaXRlIHN1Y2NlZWRzLCBvdGhlcndpc2Ugd2UgY2FsbAorICogd2l0aCBmYWlsdXJlIHdoZW4gbGFzdCB3cml0ZSBjb21wbGV0ZXMgKGFuZCBhbGwgZmFpbGVkKS4KKyAqIFJlY29yZCB0aGF0IGJpX2VuZF9pbyB3YXMgY2FsbGVkIHdpdGggdGhpcyBmbGFnLi4uCisgKi8KKyNkZWZpbmUJUjFCSU9fUmV0dXJuZWQgNgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDczMDE2MzEuLmUyOTNkOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtMTgsMTAgKzE4LDEzIEBACiAgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3JhaWQvcmFpZDEwLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9iaXRtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgIm1kLmgiCisjaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKKyNpbmNsdWRlICJyYWlkMTAuaCIKKyNpbmNsdWRlICJiaXRtYXAuaCIKIAogLyoKICAqIFJBSUQxMCBwcm92aWRlcyBhIGNvbWJpbmF0aW9uIG9mIFJBSUQwIGFuZCBSQUlEMSBmdW5jdGlvbmFsaXR5LgpAQCAtMTY5NSw3ICsxNjk4LDcgQEAKIAkJCXJldHVybiAwOwogCiAgc2tpcHBlZDoKLQltYXhfc2VjdG9yID0gbWRkZXYtPnNpemUgPDwgMTsKKwltYXhfc2VjdG9yID0gbWRkZXYtPmRldl9zZWN0b3JzOwogCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9TWU5DLCAmbWRkZXYtPnJlY292ZXJ5KSkKIAkJbWF4X3NlY3RvciA9IG1kZGV2LT5yZXN5bmNfbWF4X3NlY3RvcnM7CiAJaWYgKHNlY3Rvcl9uciA+PSBtYXhfc2VjdG9yKSB7CkBAIC0yMDIwLDYgKzIwMjMsMjUgQEAKIAlnb3RvIHNraXBwZWQ7CiB9CiAKK3N0YXRpYyBzZWN0b3JfdAorcmFpZDEwX3NpemUobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3RvcnMsIGludCByYWlkX2Rpc2tzKQoreworCXNlY3Rvcl90IHNpemU7CisJY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CisKKwlpZiAoIXJhaWRfZGlza3MpCisJCXJhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKwlpZiAoIXNlY3RvcnMpCisJCXNlY3RvcnMgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CisKKwlzaXplID0gc2VjdG9ycyA+PiBjb25mLT5jaHVua19zaGlmdDsKKwlzZWN0b3JfZGl2KHNpemUsIGNvbmYtPmZhcl9jb3BpZXMpOworCXNpemUgPSBzaXplICogcmFpZF9kaXNrczsKKwlzZWN0b3JfZGl2KHNpemUsIGNvbmYtPm5lYXJfY29waWVzKTsKKworCXJldHVybiBzaXplIDw8IGNvbmYtPmNodW5rX3NoaWZ0OworfQorCiBzdGF0aWMgaW50IHJ1bihtZGRldl90ICptZGRldikKIHsKIAljb25mX3QgKmNvbmY7CkBAIC0yMDc2LDcgKzIwOTgsNyBAQAogCWNvbmYtPmZhcl9vZmZzZXQgPSBmbzsKIAljb25mLT5jaHVua19tYXNrID0gKHNlY3Rvcl90KShtZGRldi0+Y2h1bmtfc2l6ZT4+OSktMTsKIAljb25mLT5jaHVua19zaGlmdCA9IGZmeih+bWRkZXYtPmNodW5rX3NpemUpIC0gOTsKLQlzaXplID0gbWRkZXYtPnNpemUgPj4gKGNvbmYtPmNodW5rX3NoaWZ0LTEpOworCXNpemUgPSBtZGRldi0+ZGV2X3NlY3RvcnMgPj4gY29uZi0+Y2h1bmtfc2hpZnQ7CiAJc2VjdG9yX2RpdihzaXplLCBmYyk7CiAJc2l6ZSA9IHNpemUgKiBjb25mLT5yYWlkX2Rpc2tzOwogCXNlY3Rvcl9kaXYoc2l6ZSwgbmMpOwpAQCAtMjA4OSw3ICsyMTExLDcgQEAKIAkgKi8KIAlzdHJpZGUgKz0gY29uZi0+cmFpZF9kaXNrcyAtIDE7CiAJc2VjdG9yX2RpdihzdHJpZGUsIGNvbmYtPnJhaWRfZGlza3MpOwotCW1kZGV2LT5zaXplID0gc3RyaWRlICA8PCAoY29uZi0+Y2h1bmtfc2hpZnQtMSk7CisJbWRkZXYtPmRldl9zZWN0b3JzID0gc3RyaWRlIDw8IGNvbmYtPmNodW5rX3NoaWZ0OwogCiAJaWYgKGZvKQogCQlzdHJpZGUgPSAxOwpAQCAtMjE3MSw4ICsyMTkzLDggQEAKIAkvKgogCSAqIE9rLCBldmVyeXRoaW5nIGlzIGp1c3QgZmluZSBub3cKIAkgKi8KLQltZGRldi0+YXJyYXlfc2VjdG9ycyA9IHNpemUgPDwgY29uZi0+Y2h1bmtfc2hpZnQ7Ci0JbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IHNpemUgPDwgY29uZi0+Y2h1bmtfc2hpZnQ7CisJbWRfc2V0X2FycmF5X3NlY3RvcnMobWRkZXYsIHJhaWQxMF9zaXplKG1kZGV2LCAwLCAwKSk7CisJbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IHJhaWQxMF9zaXplKG1kZGV2LCAwLCAwKTsKIAogCW1kZGV2LT5xdWV1ZS0+dW5wbHVnX2ZuID0gcmFpZDEwX3VucGx1ZzsKIAltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gcmFpZDEwX2Nvbmdlc3RlZDsKQEAgLTIyMDgsNiArMjIzMCw5IEBACiB7CiAJY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CiAKKwlyYWlzZV9iYXJyaWVyKGNvbmYsIDApOworCWxvd2VyX2JhcnJpZXIoY29uZik7CisKIAltZF91bnJlZ2lzdGVyX3RocmVhZChtZGRldi0+dGhyZWFkKTsKIAltZGRldi0+dGhyZWFkID0gTlVMTDsKIAlibGtfc3luY19xdWV1ZShtZGRldi0+cXVldWUpOyAvKiB0aGUgdW5wbHVnIGZuIHJlZmVyZW5jZXMgJ2NvbmYnKi8KQEAgLTIyNTUsNiArMjI4MCw3IEBACiAJLnNwYXJlX2FjdGl2ZQk9IHJhaWQxMF9zcGFyZV9hY3RpdmUsCiAJLnN5bmNfcmVxdWVzdAk9IHN5bmNfcmVxdWVzdCwKIAkucXVpZXNjZQk9IHJhaWQxMF9xdWllc2NlLAorCS5zaXplCQk9IHJhaWQxMF9zaXplLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcmFpZF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5oIGIvZHJpdmVycy9tZC9yYWlkMTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDRkYmU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuaApAQCAtMCwwICsxLDEyMSBAQAorI2lmbmRlZiBfUkFJRDEwX0gKKyNkZWZpbmUgX1JBSUQxMF9ICisKK3R5cGVkZWYgc3RydWN0IG1pcnJvcl9pbmZvIG1pcnJvcl9pbmZvX3Q7CisKK3N0cnVjdCBtaXJyb3JfaW5mbyB7CisJbWRrX3JkZXZfdAkqcmRldjsKKwlzZWN0b3JfdAloZWFkX3Bvc2l0aW9uOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcjEwYmlvX3MgcjEwYmlvX3Q7CisKK3N0cnVjdCByMTBfcHJpdmF0ZV9kYXRhX3MgeworCW1kZGV2X3QJCQkqbWRkZXY7CisJbWlycm9yX2luZm9fdAkJKm1pcnJvcnM7CisJaW50CQkJcmFpZF9kaXNrczsKKwlzcGlubG9ja190CQlkZXZpY2VfbG9jazsKKworCS8qIGdlb21ldHJ5ICovCisJaW50CQkJbmVhcl9jb3BpZXM7ICAvKiBudW1iZXIgb2YgY29waWVzIGxheWVkIG91dCByYWlkMCBzdHlsZSAqLworCWludCAJCQlmYXJfY29waWVzOyAgIC8qIG51bWJlciBvZiBjb3BpZXMgbGF5ZWQgb3V0CisJCQkJCSAgICAgICAqIGF0IGxhcmdlIHN0cmlkZXMgYWNyb3NzIGRyaXZlcworCQkJCQkgICAgICAgKi8KKwlpbnQJCQlmYXJfb2Zmc2V0OyAgIC8qIGZhcl9jb3BpZXMgYXJlIG9mZnNldCBieSAxIHN0cmlwZQorCQkJCQkgICAgICAgKiBpbnN0ZWFkIG9mIG1hbnkKKwkJCQkJICAgICAgICovCisJaW50CQkJY29waWVzOwkgICAgICAvKiBuZWFyX2NvcGllcyAqIGZhcl9jb3BpZXMuCisJCQkJCSAgICAgICAqIG11c3QgYmUgPD0gcmFpZF9kaXNrcworCQkJCQkgICAgICAgKi8KKwlzZWN0b3JfdAkJc3RyaWRlOwkgICAgICAvKiBkaXN0YW5jZSBiZXR3ZWVuIGZhciBjb3BpZXMuCisJCQkJCSAgICAgICAqIFRoaXMgaXMgc2l6ZSAvIGZhcl9jb3BpZXMgdW5sZXNzCisJCQkJCSAgICAgICAqIGZhcl9vZmZzZXQsIGluIHdoaWNoIGNhc2UgaXQgaXMKKwkJCQkJICAgICAgICogMSBzdHJpcGUuCisJCQkJCSAgICAgICAqLworCisJaW50IGNodW5rX3NoaWZ0OyAvKiBzaGlmdCBmcm9tIGNodW5rcyB0byBzZWN0b3JzICovCisJc2VjdG9yX3QgY2h1bmtfbWFzazsKKworCXN0cnVjdCBsaXN0X2hlYWQJcmV0cnlfbGlzdDsKKwkvKiBxdWV1ZSBwZW5kaW5nIHdyaXRlcyBhbmQgc3VibWl0IHRoZW0gb24gdW5wbHVnICovCisJc3RydWN0IGJpb19saXN0CQlwZW5kaW5nX2Jpb19saXN0OworCisKKwlzcGlubG9ja190CQlyZXN5bmNfbG9jazsKKwlpbnQgbnJfcGVuZGluZzsKKwlpbnQgbnJfd2FpdGluZzsKKwlpbnQgbnJfcXVldWVkOworCWludCBiYXJyaWVyOworCXNlY3Rvcl90CQluZXh0X3Jlc3luYzsKKwlpbnQJCQlmdWxsc3luYzsgIC8qIHNldCB0byAxIGlmIGEgZnVsbCBzeW5jIGlzIG5lZWRlZCwKKwkJCQkJICAgICogKGZyZXNoIGRldmljZSBhZGRlZCkuCisJCQkJCSAgICAqIENsZWFyZWQgd2hlbiBhIHN5bmMgY29tcGxldGVzLgorCQkJCQkgICAgKi8KKworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfYmFycmllcjsKKworCW1lbXBvb2xfdCAqcjEwYmlvX3Bvb2w7CisJbWVtcG9vbF90ICpyMTBidWZfcG9vbDsKKwlzdHJ1Y3QgcGFnZQkJKnRtcHBhZ2U7Cit9OworCit0eXBlZGVmIHN0cnVjdCByMTBfcHJpdmF0ZV9kYXRhX3MgY29uZl90OworCisvKgorICogdGhpcyBpcyB0aGUgb25seSBwb2ludCBpbiB0aGUgUkFJRCBjb2RlIHdoZXJlIHdlIHZpb2xhdGUKKyAqIEMgdHlwZSBzYWZldHkuIG1kZGV2LT5wcml2YXRlIGlzIGFuICdvcGFxdWUnIHBvaW50ZXIuCisgKi8KKyNkZWZpbmUgbWRkZXZfdG9fY29uZihtZGRldikgKChjb25mX3QgKikgbWRkZXYtPnByaXZhdGUpCisKKy8qCisgKiB0aGlzIGlzIG91ciAncHJpdmF0ZScgUkFJRDEwIGJpby4KKyAqCisgKiBpdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGtpbmQgb2YgSU8gb3BlcmF0aW9ucyB3ZXJlIHN0YXJ0ZWQKKyAqIGZvciB0aGlzIFJBSUQxMCBvcGVyYXRpb24sIGFuZCBhYm91dCB0aGVpciBzdGF0dXM6CisgKi8KKworc3RydWN0IHIxMGJpb19zIHsKKwlhdG9taWNfdAkJcmVtYWluaW5nOyAvKiAnaGF2ZSB3ZSBmaW5pc2hlZCcgY291bnQsCisJCQkJCSAgICAqIHVzZWQgZnJvbSBJUlEgaGFuZGxlcnMKKwkJCQkJICAgICovCisJc2VjdG9yX3QJCXNlY3RvcjsJLyogdmlydHVhbCBzZWN0b3IgbnVtYmVyICovCisJaW50CQkJc2VjdG9yczsKKwl1bnNpZ25lZCBsb25nCQlzdGF0ZTsKKwltZGRldl90CQkJKm1kZGV2OworCS8qCisJICogb3JpZ2luYWwgYmlvIGdvaW5nIHRvIC9kZXYvbWR4CisJICovCisJc3RydWN0IGJpbwkJKm1hc3Rlcl9iaW87CisJLyoKKwkgKiBpZiB0aGUgSU8gaXMgaW4gUkVBRCBkaXJlY3Rpb24sIHRoZW4gdGhpcyBpcyB3aGVyZSB3ZSByZWFkCisJICovCisJaW50CQkJcmVhZF9zbG90OworCisJc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OworCS8qCisJICogaWYgdGhlIElPIGlzIGluIFdSSVRFIGRpcmVjdGlvbiwgdGhlbiBtdWx0aXBsZSBiaW9zIGFyZSB1c2VkLAorCSAqIG9uZSBmb3IgZWFjaCBjb3B5LgorCSAqIFdoZW4gcmVzeW5jaW5nIHdlIGFsc28gdXNlIG9uZSBmb3IgZWFjaCBjb3B5LgorCSAqIFdoZW4gcmVjb25zdHJ1Y3RpbmcsIHdlIHVzZSAyIGJpb3MsIG9uZSBmb3IgcmVhZCwgb25lIGZvciB3cml0ZS4KKwkgKiBXZSBjaG9vc2UgdGhlIG51bWJlciB3aGVuIHRoZXkgYXJlIGFsbG9jYXRlZC4KKwkgKi8KKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgYmlvCQkqYmlvOworCQlzZWN0b3JfdCBhZGRyOworCQlpbnQgZGV2bnVtOworCX0gZGV2c1swXTsKK307CisKKy8qIHdoZW4gd2UgZ2V0IGEgcmVhZCBlcnJvciBvbiBhIHJlYWQtb25seSBhcnJheSwgd2UgcmVkaXJlY3QgdG8gYW5vdGhlcgorICogZGV2aWNlIHdpdGhvdXQgZmFpbGluZyB0aGUgZmlyc3QgZGV2aWNlLCBvciB0cnlpbmcgdG8gb3Zlci13cml0ZSB0bworICogY29ycmVjdCB0aGUgcmVhZCBlcnJvci4gIFRvIGtlZXAgdHJhY2sgb2YgYmFkIGJsb2NrcyBvbiBhIHBlci1iaW8KKyAqIGxldmVsLCB3ZSBzdG9yZSBJT19CTE9DS0VEIGluIHRoZSBhcHByb3ByaWF0ZSAnYmlvcycgcG9pbnRlcgorICovCisjZGVmaW5lIElPX0JMT0NLRUQgKChzdHJ1Y3QgYmlvKikxKQorCisvKiBiaXRzIGZvciByMTBiaW8uc3RhdGUgKi8KKyNkZWZpbmUJUjEwQklPX1VwdG9kYXRlCTAKKyNkZWZpbmUJUjEwQklPX0lzU3luYwkxCisjZGVmaW5lCVIxMEJJT19Jc1JlY292ZXIgMgorI2RlZmluZQlSMTBCSU9fRGVncmFkZWQgMworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggYTViYTA4MC4uM2JiYzZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtNDMsMTEgKzQzLDE0IEBACiAgKiBtaXNzIGFueSBiaXRzLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Ci0jaW5jbHVkZSAicmFpZDYuaCIKLQotI2luY2x1ZGUgPGxpbnV4L3JhaWQvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9wcS5oPgogI2luY2x1ZGUgPGxpbnV4L2FzeW5jX3R4Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlICJtZC5oIgorI2luY2x1ZGUgInJhaWQ1LmgiCisjaW5jbHVkZSAiYml0bWFwLmgiCiAKIC8qCiAgKiBTdHJpcGUgY2FjaGUKQEAgLTkxLDExICs5NCw2IEBACiAKICNkZWZpbmUgcHJpbnRrX3JsKGFyZ3MuLi4pICgodm9pZCkgKHByaW50a19yYXRlbGltaXQoKSAmJiBwcmludGsoYXJncykpKQogCi0jaWYgIVJBSUQ2X1VTRV9FTVBUWV9aRVJPX1BBR0UKLS8qIEluIC5ic3Mgc28gaXQncyB6ZXJvZWQgKi8KLWNvbnN0IGNoYXIgcmFpZDZfZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSk7Ci0jZW5kaWYKLQogLyoKICAqIFdlIG1haW50YWluIGEgYmlhc2VkIGNvdW50IG9mIGFjdGl2ZSBzdHJpcGVzIGluIHRoZSBib3R0b20gMTYgYml0cyBvZgogICogYmlfcGh5c19zZWdtZW50cywgYW5kIGEgY291bnQgb2YgcHJvY2Vzc2VkIHN0cmlwZXMgaW4gdGhlIHVwcGVyIDE2IGJpdHMKQEAgLTEzMCwxMiArMTI4LDQyIEBACiAJYmlvLT5iaV9waHlzX3NlZ21lbnRzID0gcmFpZDVfYmlfcGh5c19zZWdtZW50cyhiaW8pIHx8IChjbnQgPDwgMTYpOwogfQogCisvKiBGaW5kIGZpcnN0IGRhdGEgZGlzayBpbiBhIHJhaWQ2IHN0cmlwZSAqLworc3RhdGljIGlubGluZSBpbnQgcmFpZDZfZDAoc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKK3sKKwlpZiAoc2gtPmRkZl9sYXlvdXQpCisJCS8qIGRkZiBhbHdheXMgc3RhcnQgZnJvbSBmaXJzdCBkZXZpY2UgKi8KKwkJcmV0dXJuIDA7CisJLyogbWQgc3RhcnRzIGp1c3QgYWZ0ZXIgUSBibG9jayAqLworCWlmIChzaC0+cWRfaWR4ID09IHNoLT5kaXNrcyAtIDEpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIHNoLT5xZF9pZHggKyAxOworfQogc3RhdGljIGlubGluZSBpbnQgcmFpZDZfbmV4dF9kaXNrKGludCBkaXNrLCBpbnQgcmFpZF9kaXNrcykKIHsKIAlkaXNrKys7CiAJcmV0dXJuIChkaXNrIDwgcmFpZF9kaXNrcykgPyBkaXNrIDogMDsKIH0KIAorLyogV2hlbiB3YWxraW5nIHRocm91Z2ggdGhlIGRpc2tzIGluIGEgcmFpZDUsIHN0YXJ0aW5nIGF0IHJhaWQ2X2QwLAorICogV2UgbmVlZCB0byBtYXAgZWFjaCBkaXNrIHRvIGEgJ3Nsb3QnLCB3aGVyZSB0aGUgZGF0YSBkaXNrcyBhcmUgc2xvdAorICogMCAuLiByYWlkX2Rpc2tzLTMsIHRoZSBwYXJpdHkgZGlzayBpcyByYWlkX2Rpc2tzLTIgYW5kIHRoZSBRIGRpc2sKKyAqIGlzIHJhaWRfZGlza3MtMS4gIFRoaXMgaGVscCBkb2VzIHRoYXQgbWFwcGluZy4KKyAqLworc3RhdGljIGludCByYWlkNl9pZHhfdG9fc2xvdChpbnQgaWR4LCBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLAorCQkJICAgICBpbnQgKmNvdW50LCBpbnQgc3luZHJvbWVfZGlza3MpCit7CisJaW50IHNsb3Q7CisKKwlpZiAoaWR4ID09IHNoLT5wZF9pZHgpCisJCXJldHVybiBzeW5kcm9tZV9kaXNrczsKKwlpZiAoaWR4ID09IHNoLT5xZF9pZHgpCisJCXJldHVybiBzeW5kcm9tZV9kaXNrcyArIDE7CisJc2xvdCA9ICgqY291bnQpKys7CisJcmV0dXJuIHNsb3Q7Cit9CisKIHN0YXRpYyB2b2lkIHJldHVybl9pbyhzdHJ1Y3QgYmlvICpyZXR1cm5fYmkpCiB7CiAJc3RydWN0IGJpbyAqYmkgPSByZXR1cm5fYmk7CkBAIC0xOTMsNiArMjIxLDcgQEAKIAkJfQogCX0KIH0KKwogc3RhdGljIHZvaWQgcmVsZWFzZV9zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOwpAQCAtMjcwLDkgKzI5OSwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCByYWlkNV9idWlsZF9ibG9jayhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSk7CitzdGF0aWMgdm9pZCByYWlkNV9idWlsZF9ibG9jayhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSwgaW50IHByZXZpb3VzKTsKK3N0YXRpYyB2b2lkIHN0cmlwZV9zZXRfaWR4KHNlY3Rvcl90IHN0cmlwZSwgcmFpZDVfY29uZl90ICpjb25mLCBpbnQgcHJldmlvdXMsCisJCQkgICAgc3RydWN0IHN0cmlwZV9oZWFkICpzaCk7CiAKLXN0YXRpYyB2b2lkIGluaXRfc3RyaXBlKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHNlY3Rvcl90IHNlY3RvciwgaW50IHBkX2lkeCwgaW50IGRpc2tzKQorc3RhdGljIHZvaWQgaW5pdF9zdHJpcGUoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgcHJldmlvdXMpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKIAlpbnQgaTsKQEAgLTI4NywxMSArMzE4LDEyIEBACiAKIAlyZW1vdmVfaGFzaChzaCk7CiAKKwlzaC0+Z2VuZXJhdGlvbiA9IGNvbmYtPmdlbmVyYXRpb24gLSBwcmV2aW91czsKKwlzaC0+ZGlza3MgPSBwcmV2aW91cyA/IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgOiBjb25mLT5yYWlkX2Rpc2tzOwogCXNoLT5zZWN0b3IgPSBzZWN0b3I7Ci0Jc2gtPnBkX2lkeCA9IHBkX2lkeDsKKwlzdHJpcGVfc2V0X2lkeChzZWN0b3IsIGNvbmYsIHByZXZpb3VzLCBzaCk7CiAJc2gtPnN0YXRlID0gMDsKIAotCXNoLT5kaXNrcyA9IGRpc2tzOwogCiAJZm9yIChpID0gc2gtPmRpc2tzOyBpLS07ICkgewogCQlzdHJ1Y3QgcjVkZXYgKmRldiA9ICZzaC0+ZGV2W2ldOwpAQCAtMzA1LDEyICszMzcsMTMgQEAKIAkJCUJVRygpOwogCQl9CiAJCWRldi0+ZmxhZ3MgPSAwOwotCQlyYWlkNV9idWlsZF9ibG9jayhzaCwgaSk7CisJCXJhaWQ1X2J1aWxkX2Jsb2NrKHNoLCBpLCBwcmV2aW91cyk7CiAJfQogCWluc2VydF9oYXNoKGNvbmYsIHNoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzdHJpcGVfaGVhZCAqX19maW5kX3N0cmlwZShyYWlkNV9jb25mX3QgKmNvbmYsIHNlY3Rvcl90IHNlY3RvciwgaW50IGRpc2tzKQorc3RhdGljIHN0cnVjdCBzdHJpcGVfaGVhZCAqX19maW5kX3N0cmlwZShyYWlkNV9jb25mX3QgKmNvbmYsIHNlY3Rvcl90IHNlY3RvciwKKwkJCQkJIHNob3J0IGdlbmVyYXRpb24pCiB7CiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaG47CkBAIC0zMTgsNyArMzUxLDcgQEAKIAlDSEVDS19ERVZMT0NLKCk7CiAJcHJfZGVidWcoIl9fZmluZF9zdHJpcGUsIHNlY3RvciAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXNlY3Rvcik7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoc2gsIGhuLCBzdHJpcGVfaGFzaChjb25mLCBzZWN0b3IpLCBoYXNoKQotCQlpZiAoc2gtPnNlY3RvciA9PSBzZWN0b3IgJiYgc2gtPmRpc2tzID09IGRpc2tzKQorCQlpZiAoc2gtPnNlY3RvciA9PSBzZWN0b3IgJiYgc2gtPmdlbmVyYXRpb24gPT0gZ2VuZXJhdGlvbikKIAkJCXJldHVybiBzaDsKIAlwcl9kZWJ1ZygiX19zdHJpcGUgJWxsdSBub3QgaW4gY2FjaGVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpc2VjdG9yKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTMyNyw4ICszNjAsOSBAQAogc3RhdGljIHZvaWQgdW5wbHVnX3NsYXZlcyhtZGRldl90ICptZGRldik7CiBzdGF0aWMgdm9pZCByYWlkNV91bnBsdWdfZGV2aWNlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIAotc3RhdGljIHN0cnVjdCBzdHJpcGVfaGVhZCAqZ2V0X2FjdGl2ZV9zdHJpcGUocmFpZDVfY29uZl90ICpjb25mLCBzZWN0b3JfdCBzZWN0b3IsIGludCBkaXNrcywKLQkJCQkJICAgICBpbnQgcGRfaWR4LCBpbnQgbm9ibG9jaykKK3N0YXRpYyBzdHJ1Y3Qgc3RyaXBlX2hlYWQgKgorZ2V0X2FjdGl2ZV9zdHJpcGUocmFpZDVfY29uZl90ICpjb25mLCBzZWN0b3JfdCBzZWN0b3IsCisJCSAgaW50IHByZXZpb3VzLCBpbnQgbm9ibG9jaykKIHsKIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoOwogCkBAIC0zNDAsNyArMzc0LDcgQEAKIAkJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2Zvcl9zdHJpcGUsCiAJCQkJICAgIGNvbmYtPnF1aWVzY2UgPT0gMCwKIAkJCQkgICAgY29uZi0+ZGV2aWNlX2xvY2ssIC8qIG5vdGhpbmcgKi8pOwotCQlzaCA9IF9fZmluZF9zdHJpcGUoY29uZiwgc2VjdG9yLCBkaXNrcyk7CisJCXNoID0gX19maW5kX3N0cmlwZShjb25mLCBzZWN0b3IsIGNvbmYtPmdlbmVyYXRpb24gLSBwcmV2aW91cyk7CiAJCWlmICghc2gpIHsKIAkJCWlmICghY29uZi0+aW5hY3RpdmVfYmxvY2tlZCkKIAkJCQlzaCA9IGdldF9mcmVlX3N0cmlwZShjb25mKTsKQEAgLTM1OCwxMCArMzkyLDExIEBACiAJCQkJCSk7CiAJCQkJY29uZi0+aW5hY3RpdmVfYmxvY2tlZCA9IDA7CiAJCQl9IGVsc2UKLQkJCQlpbml0X3N0cmlwZShzaCwgc2VjdG9yLCBwZF9pZHgsIGRpc2tzKTsKKwkJCQlpbml0X3N0cmlwZShzaCwgc2VjdG9yLCBwcmV2aW91cyk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoYXRvbWljX3JlYWQoJnNoLT5jb3VudCkpIHsKLQkJCSAgQlVHX09OKCFsaXN0X2VtcHR5KCZzaC0+bHJ1KSk7CisJCQkJQlVHX09OKCFsaXN0X2VtcHR5KCZzaC0+bHJ1KQorCQkJCSAgICAmJiAhdGVzdF9iaXQoU1RSSVBFX0VYUEFORElORywgJnNoLT5zdGF0ZSkpOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoIXRlc3RfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpKQogCQkJCQlhdG9taWNfaW5jKCZjb25mLT5hY3RpdmVfc3RyaXBlcyk7CkBAIC04OTUsOCArOTMwLDEwIEBACiAJc3RydWN0IGttZW1fY2FjaGUgKnNjOwogCWludCBkZXZzID0gY29uZi0+cmFpZF9kaXNrczsKIAotCXNwcmludGYoY29uZi0+Y2FjaGVfbmFtZVswXSwgInJhaWQ1LSVzIiwgbWRuYW1lKGNvbmYtPm1kZGV2KSk7Ci0Jc3ByaW50Zihjb25mLT5jYWNoZV9uYW1lWzFdLCAicmFpZDUtJXMtYWx0IiwgbWRuYW1lKGNvbmYtPm1kZGV2KSk7CisJc3ByaW50Zihjb25mLT5jYWNoZV9uYW1lWzBdLAorCQkicmFpZCVkLSVzIiwgY29uZi0+bGV2ZWwsIG1kbmFtZShjb25mLT5tZGRldikpOworCXNwcmludGYoY29uZi0+Y2FjaGVfbmFtZVsxXSwKKwkJInJhaWQlZC0lcy1hbHQiLCBjb25mLT5sZXZlbCwgbWRuYW1lKGNvbmYtPm1kZGV2KSk7CiAJY29uZi0+YWN0aXZlX25hbWUgPSAwOwogCXNjID0ga21lbV9jYWNoZV9jcmVhdGUoY29uZi0+Y2FjaGVfbmFtZVtjb25mLT5hY3RpdmVfbmFtZV0sCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzdHJpcGVfaGVhZCkrKGRldnMtMSkqc2l6ZW9mKHN0cnVjdCByNWRldiksCkBAIC05MTEsNyArOTQ4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19NRF9SQUlENV9SRVNIQVBFCiBzdGF0aWMgaW50IHJlc2l6ZV9zdHJpcGVzKHJhaWQ1X2NvbmZfdCAqY29uZiwgaW50IG5ld3NpemUpCiB7CiAJLyogTWFrZSBhbGwgdGhlIHN0cmlwZXMgYWJsZSB0byBob2xkICduZXdzaXplJyBkZXZpY2VzLgpAQCAtMTAzNiw3ICsxMDcyLDYgQEAKIAljb25mLT5wb29sX3NpemUgPSBuZXdzaXplOwogCXJldHVybiBlcnI7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGludCBkcm9wX29uZV9zdHJpcGUocmFpZDVfY29uZl90ICpjb25mKQogewpAQCAtMTA2Niw3ICsxMTAxLDcgQEAKIAogc3RhdGljIHZvaWQgcmFpZDVfZW5kX3JlYWRfcmVxdWVzdChzdHJ1Y3QgYmlvICogYmksIGludCBlcnJvcikKIHsKLSAJc3RydWN0IHN0cmlwZV9oZWFkICpzaCA9IGJpLT5iaV9wcml2YXRlOworCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBiaS0+YmlfcHJpdmF0ZTsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOwogCWludCBkaXNrcyA9IHNoLT5kaXNrcywgaTsKIAlpbnQgdXB0b2RhdGUgPSB0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaS0+YmlfZmxhZ3MpOwpAQCAtMTE0OCw3ICsxMTgzLDcgQEAKIAogc3RhdGljIHZvaWQgcmFpZDVfZW5kX3dyaXRlX3JlcXVlc3Qoc3RydWN0IGJpbyAqYmksIGludCBlcnJvcikKIHsKLSAJc3RydWN0IHN0cmlwZV9oZWFkICpzaCA9IGJpLT5iaV9wcml2YXRlOworCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2ggPSBiaS0+YmlfcHJpdmF0ZTsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOwogCWludCBkaXNrcyA9IHNoLT5kaXNrcywgaTsKIAlpbnQgdXB0b2RhdGUgPSB0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaS0+YmlfZmxhZ3MpOwpAQCAtMTE3Niw5ICsxMjExLDkgQEAKIH0KIAogCi1zdGF0aWMgc2VjdG9yX3QgY29tcHV0ZV9ibG9ja25yKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCBpKTsKK3N0YXRpYyBzZWN0b3JfdCBjb21wdXRlX2Jsb2NrbnIoc3RydWN0IHN0cmlwZV9oZWFkICpzaCwgaW50IGksIGludCBwcmV2aW91cyk7CiAJCi1zdGF0aWMgdm9pZCByYWlkNV9idWlsZF9ibG9jayhzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSkKK3N0YXRpYyB2b2lkIHJhaWQ1X2J1aWxkX2Jsb2NrKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCBpLCBpbnQgcHJldmlvdXMpCiB7CiAJc3RydWN0IHI1ZGV2ICpkZXYgPSAmc2gtPmRldltpXTsKIApAQCAtMTE5NCw3ICsxMjI5LDcgQEAKIAlkZXYtPnJlcS5iaV9wcml2YXRlID0gc2g7CiAKIAlkZXYtPmZsYWdzID0gMDsKLQlkZXYtPnNlY3RvciA9IGNvbXB1dGVfYmxvY2tucihzaCwgaSk7CisJZGV2LT5zZWN0b3IgPSBjb21wdXRlX2Jsb2NrbnIoc2gsIGksIHByZXZpb3VzKTsKIH0KIAogc3RhdGljIHZvaWQgZXJyb3IobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpCkBAIC0xMjI3LDE1ICsxMjYyLDIzIEBACiAgKiBJbnB1dDogYSAnYmlnJyBzZWN0b3IgbnVtYmVyLAogICogT3V0cHV0OiBpbmRleCBvZiB0aGUgZGF0YSBhbmQgcGFyaXR5IGRpc2ssIGFuZCB0aGUgc2VjdG9yICMgaW4gdGhlbS4KICAqLwotc3RhdGljIHNlY3Rvcl90IHJhaWQ1X2NvbXB1dGVfc2VjdG9yKHNlY3Rvcl90IHJfc2VjdG9yLCB1bnNpZ25lZCBpbnQgcmFpZF9kaXNrcywKLQkJCXVuc2lnbmVkIGludCBkYXRhX2Rpc2tzLCB1bnNpZ25lZCBpbnQgKiBkZF9pZHgsCi0JCQl1bnNpZ25lZCBpbnQgKiBwZF9pZHgsIHJhaWQ1X2NvbmZfdCAqY29uZikKK3N0YXRpYyBzZWN0b3JfdCByYWlkNV9jb21wdXRlX3NlY3RvcihyYWlkNV9jb25mX3QgKmNvbmYsIHNlY3Rvcl90IHJfc2VjdG9yLAorCQkJCSAgICAgaW50IHByZXZpb3VzLCBpbnQgKmRkX2lkeCwKKwkJCQkgICAgIHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gpCiB7CiAJbG9uZyBzdHJpcGU7CiAJdW5zaWduZWQgbG9uZyBjaHVua19udW1iZXI7CiAJdW5zaWduZWQgaW50IGNodW5rX29mZnNldDsKKwlpbnQgcGRfaWR4LCBxZF9pZHg7CisJaW50IGRkZl9sYXlvdXQgPSAwOwogCXNlY3Rvcl90IG5ld19zZWN0b3I7Ci0JaW50IHNlY3RvcnNfcGVyX2NodW5rID0gY29uZi0+Y2h1bmtfc2l6ZSA+PiA5OworCWludCBhbGdvcml0aG0gPSBwcmV2aW91cyA/IGNvbmYtPnByZXZfYWxnbworCQkJCSA6IGNvbmYtPmFsZ29yaXRobTsKKwlpbnQgc2VjdG9yc19wZXJfY2h1bmsgPSBwcmV2aW91cyA/IChjb25mLT5wcmV2X2NodW5rID4+IDkpCisJCQkJCSA6IChjb25mLT5jaHVua19zaXplID4+IDkpOworCWludCByYWlkX2Rpc2tzID0gcHJldmlvdXMgPyBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzCisJCQkJICA6IGNvbmYtPnJhaWRfZGlza3M7CisJaW50IGRhdGFfZGlza3MgPSByYWlkX2Rpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkOwogCiAJLyogRmlyc3QgY29tcHV0ZSB0aGUgaW5mb3JtYXRpb24gb24gdGhpcyBzZWN0b3IgKi8KIApAQCAtMTI1OSw2OCArMTMwMiwxNzAgQEAKIAkvKgogCSAqIFNlbGVjdCB0aGUgcGFyaXR5IGRpc2sgYmFzZWQgb24gdGhlIHVzZXIgc2VsZWN0ZWQgYWxnb3JpdGhtLgogCSAqLworCXBkX2lkeCA9IHFkX2lkeCA9IH4wOwogCXN3aXRjaChjb25mLT5sZXZlbCkgewogCWNhc2UgNDoKLQkJKnBkX2lkeCA9IGRhdGFfZGlza3M7CisJCXBkX2lkeCA9IGRhdGFfZGlza3M7CiAJCWJyZWFrOwogCWNhc2UgNToKLQkJc3dpdGNoIChjb25mLT5hbGdvcml0aG0pIHsKKwkJc3dpdGNoIChhbGdvcml0aG0pIHsKIAkJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDOgotCQkJKnBkX2lkeCA9IGRhdGFfZGlza3MgLSBzdHJpcGUgJSByYWlkX2Rpc2tzOwotCQkJaWYgKCpkZF9pZHggPj0gKnBkX2lkeCkKKwkJCXBkX2lkeCA9IGRhdGFfZGlza3MgLSBzdHJpcGUgJSByYWlkX2Rpc2tzOworCQkJaWYgKCpkZF9pZHggPj0gcGRfaWR4KQogCQkJCSgqZGRfaWR4KSsrOwogCQkJYnJlYWs7CiAJCWNhc2UgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUM6Ci0JCQkqcGRfaWR4ID0gc3RyaXBlICUgcmFpZF9kaXNrczsKLQkJCWlmICgqZGRfaWR4ID49ICpwZF9pZHgpCisJCQlwZF9pZHggPSBzdHJpcGUgJSByYWlkX2Rpc2tzOworCQkJaWYgKCpkZF9pZHggPj0gcGRfaWR4KQogCQkJCSgqZGRfaWR4KSsrOwogCQkJYnJlYWs7CiAJCWNhc2UgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDOgotCQkJKnBkX2lkeCA9IGRhdGFfZGlza3MgLSBzdHJpcGUgJSByYWlkX2Rpc2tzOwotCQkJKmRkX2lkeCA9ICgqcGRfaWR4ICsgMSArICpkZF9pZHgpICUgcmFpZF9kaXNrczsKKwkJCXBkX2lkeCA9IGRhdGFfZGlza3MgLSBzdHJpcGUgJSByYWlkX2Rpc2tzOworCQkJKmRkX2lkeCA9IChwZF9pZHggKyAxICsgKmRkX2lkeCkgJSByYWlkX2Rpc2tzOwogCQkJYnJlYWs7CiAJCWNhc2UgQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQzoKLQkJCSpwZF9pZHggPSBzdHJpcGUgJSByYWlkX2Rpc2tzOwotCQkJKmRkX2lkeCA9ICgqcGRfaWR4ICsgMSArICpkZF9pZHgpICUgcmFpZF9kaXNrczsKKwkJCXBkX2lkeCA9IHN0cmlwZSAlIHJhaWRfZGlza3M7CisJCQkqZGRfaWR4ID0gKHBkX2lkeCArIDEgKyAqZGRfaWR4KSAlIHJhaWRfZGlza3M7CisJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZXzA6CisJCQlwZF9pZHggPSAwOworCQkJKCpkZF9pZHgpKys7CisJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZX046CisJCQlwZF9pZHggPSBkYXRhX2Rpc2tzOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gJWRcbiIsCi0JCQkJY29uZi0+YWxnb3JpdGhtKTsKKwkJCQlhbGdvcml0aG0pOworCQkJQlVHKCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSA2OgogCi0JCS8qKioqIEZJWCBUSElTICoqKiovCi0JCXN3aXRjaCAoY29uZi0+YWxnb3JpdGhtKSB7CisJCXN3aXRjaCAoYWxnb3JpdGhtKSB7CiAJCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQzoKLQkJCSpwZF9pZHggPSByYWlkX2Rpc2tzIC0gMSAtIChzdHJpcGUgJSByYWlkX2Rpc2tzKTsKLQkJCWlmICgqcGRfaWR4ID09IHJhaWRfZGlza3MtMSkKLQkJCQkoKmRkX2lkeCkrKzsgCS8qIFEgRCBEIEQgUCAqLwotCQkJZWxzZSBpZiAoKmRkX2lkeCA+PSAqcGRfaWR4KQorCQkJcGRfaWR4ID0gcmFpZF9kaXNrcyAtIDEgLSAoc3RyaXBlICUgcmFpZF9kaXNrcyk7CisJCQlxZF9pZHggPSBwZF9pZHggKyAxOworCQkJaWYgKHBkX2lkeCA9PSByYWlkX2Rpc2tzLTEpIHsKKwkJCQkoKmRkX2lkeCkrKzsJLyogUSBEIEQgRCBQICovCisJCQkJcWRfaWR4ID0gMDsKKwkJCX0gZWxzZSBpZiAoKmRkX2lkeCA+PSBwZF9pZHgpCiAJCQkJKCpkZF9pZHgpICs9IDI7IC8qIEQgRCBQIFEgRCAqLwogCQkJYnJlYWs7CiAJCWNhc2UgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUM6Ci0JCQkqcGRfaWR4ID0gc3RyaXBlICUgcmFpZF9kaXNrczsKLQkJCWlmICgqcGRfaWR4ID09IHJhaWRfZGlza3MtMSkKLQkJCQkoKmRkX2lkeCkrKzsgCS8qIFEgRCBEIEQgUCAqLwotCQkJZWxzZSBpZiAoKmRkX2lkeCA+PSAqcGRfaWR4KQorCQkJcGRfaWR4ID0gc3RyaXBlICUgcmFpZF9kaXNrczsKKwkJCXFkX2lkeCA9IHBkX2lkeCArIDE7CisJCQlpZiAocGRfaWR4ID09IHJhaWRfZGlza3MtMSkgeworCQkJCSgqZGRfaWR4KSsrOwkvKiBRIEQgRCBEIFAgKi8KKwkJCQlxZF9pZHggPSAwOworCQkJfSBlbHNlIGlmICgqZGRfaWR4ID49IHBkX2lkeCkKIAkJCQkoKmRkX2lkeCkgKz0gMjsgLyogRCBEIFAgUSBEICovCiAJCQlicmVhazsKIAkJY2FzZSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUM6Ci0JCQkqcGRfaWR4ID0gcmFpZF9kaXNrcyAtIDEgLSAoc3RyaXBlICUgcmFpZF9kaXNrcyk7Ci0JCQkqZGRfaWR4ID0gKCpwZF9pZHggKyAyICsgKmRkX2lkeCkgJSByYWlkX2Rpc2tzOworCQkJcGRfaWR4ID0gcmFpZF9kaXNrcyAtIDEgLSAoc3RyaXBlICUgcmFpZF9kaXNrcyk7CisJCQlxZF9pZHggPSAocGRfaWR4ICsgMSkgJSByYWlkX2Rpc2tzOworCQkJKmRkX2lkeCA9IChwZF9pZHggKyAyICsgKmRkX2lkeCkgJSByYWlkX2Rpc2tzOwogCQkJYnJlYWs7CiAJCWNhc2UgQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQzoKLQkJCSpwZF9pZHggPSBzdHJpcGUgJSByYWlkX2Rpc2tzOwotCQkJKmRkX2lkeCA9ICgqcGRfaWR4ICsgMiArICpkZF9pZHgpICUgcmFpZF9kaXNrczsKKwkJCXBkX2lkeCA9IHN0cmlwZSAlIHJhaWRfZGlza3M7CisJCQlxZF9pZHggPSAocGRfaWR4ICsgMSkgJSByYWlkX2Rpc2tzOworCQkJKmRkX2lkeCA9IChwZF9pZHggKyAyICsgKmRkX2lkeCkgJSByYWlkX2Rpc2tzOwogCQkJYnJlYWs7CisKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZXzA6CisJCQlwZF9pZHggPSAwOworCQkJcWRfaWR4ID0gMTsKKwkJCSgqZGRfaWR4KSArPSAyOworCQkJYnJlYWs7CisJCWNhc2UgQUxHT1JJVEhNX1BBUklUWV9OOgorCQkJcGRfaWR4ID0gZGF0YV9kaXNrczsKKwkJCXFkX2lkeCA9IGRhdGFfZGlza3MgKyAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTEdPUklUSE1fUk9UQVRJTkdfWkVST19SRVNUQVJUOgorCQkJLyogRXhhY3RseSB0aGUgc2FtZSBhcyBSSUdIVF9BU1lNTUVUUklDLCBidXQgb3IKKwkJCSAqIG9mIGJsb2NrcyBmb3IgY29tcHV0aW5nIFEgaXMgZGlmZmVyZW50LgorCQkJICovCisJCQlwZF9pZHggPSBzdHJpcGUgJSByYWlkX2Rpc2tzOworCQkJcWRfaWR4ID0gcGRfaWR4ICsgMTsKKwkJCWlmIChwZF9pZHggPT0gcmFpZF9kaXNrcy0xKSB7CisJCQkJKCpkZF9pZHgpKys7CS8qIFEgRCBEIEQgUCAqLworCQkJCXFkX2lkeCA9IDA7CisJCQl9IGVsc2UgaWYgKCpkZF9pZHggPj0gcGRfaWR4KQorCQkJCSgqZGRfaWR4KSArPSAyOyAvKiBEIEQgUCBRIEQgKi8KKwkJCWRkZl9sYXlvdXQgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTEdPUklUSE1fUk9UQVRJTkdfTl9SRVNUQVJUOgorCQkJLyogU2FtZSBhIGxlZnRfYXN5bW1ldHJpYywgYnkgZmlyc3Qgc3RyaXBlIGlzCisJCQkgKiBEIEQgRCBQIFEgIHJhdGhlciB0aGFuCisJCQkgKiBRIEQgRCBEIFAKKwkJCSAqLworCQkJcGRfaWR4ID0gcmFpZF9kaXNrcyAtIDEgLSAoKHN0cmlwZSArIDEpICUgcmFpZF9kaXNrcyk7CisJCQlxZF9pZHggPSBwZF9pZHggKyAxOworCQkJaWYgKHBkX2lkeCA9PSByYWlkX2Rpc2tzLTEpIHsKKwkJCQkoKmRkX2lkeCkrKzsJLyogUSBEIEQgRCBQICovCisJCQkJcWRfaWR4ID0gMDsKKwkJCX0gZWxzZSBpZiAoKmRkX2lkeCA+PSBwZF9pZHgpCisJCQkJKCpkZF9pZHgpICs9IDI7IC8qIEQgRCBQIFEgRCAqLworCQkJZGRmX2xheW91dCA9IDE7CisJCQlicmVhazsKKworCQljYXNlIEFMR09SSVRITV9ST1RBVElOR19OX0NPTlRJTlVFOgorCQkJLyogU2FtZSBhcyBsZWZ0X3N5bW1ldHJpYyBidXQgUSBpcyBiZWZvcmUgUCAqLworCQkJcGRfaWR4ID0gcmFpZF9kaXNrcyAtIDEgLSAoc3RyaXBlICUgcmFpZF9kaXNrcyk7CisJCQlxZF9pZHggPSAocGRfaWR4ICsgcmFpZF9kaXNrcyAtIDEpICUgcmFpZF9kaXNrczsKKwkJCSpkZF9pZHggPSAocGRfaWR4ICsgMSArICpkZF9pZHgpICUgcmFpZF9kaXNrczsKKwkJCWRkZl9sYXlvdXQgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDXzY6CisJCQkvKiBSQUlENSBsZWZ0X2FzeW1tZXRyaWMsIHdpdGggUSBvbiBsYXN0IGRldmljZSAqLworCQkJcGRfaWR4ID0gZGF0YV9kaXNrcyAtIHN0cmlwZSAlIChyYWlkX2Rpc2tzLTEpOworCQkJaWYgKCpkZF9pZHggPj0gcGRfaWR4KQorCQkJCSgqZGRfaWR4KSsrOworCQkJcWRfaWR4ID0gcmFpZF9kaXNrcyAtIDE7CisJCQlicmVhazsKKworCQljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDXzY6CisJCQlwZF9pZHggPSBzdHJpcGUgJSAocmFpZF9kaXNrcy0xKTsKKwkJCWlmICgqZGRfaWR4ID49IHBkX2lkeCkKKwkJCQkoKmRkX2lkeCkrKzsKKwkJCXFkX2lkeCA9IHJhaWRfZGlza3MgLSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUNfNjoKKwkJCXBkX2lkeCA9IGRhdGFfZGlza3MgLSBzdHJpcGUgJSAocmFpZF9kaXNrcy0xKTsKKwkJCSpkZF9pZHggPSAocGRfaWR4ICsgMSArICpkZF9pZHgpICUgKHJhaWRfZGlza3MtMSk7CisJCQlxZF9pZHggPSByYWlkX2Rpc2tzIC0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQ182OgorCQkJcGRfaWR4ID0gc3RyaXBlICUgKHJhaWRfZGlza3MtMSk7CisJCQkqZGRfaWR4ID0gKHBkX2lkeCArIDEgKyAqZGRfaWR4KSAlIChyYWlkX2Rpc2tzLTEpOworCQkJcWRfaWR4ID0gcmFpZF9kaXNrcyAtIDE7CisJCQlicmVhazsKKworCQljYXNlIEFMR09SSVRITV9QQVJJVFlfMF82OgorCQkJcGRfaWR4ID0gMDsKKwkJCSgqZGRfaWR4KSsrOworCQkJcWRfaWR4ID0gcmFpZF9kaXNrcyAtIDE7CisJCQlicmVhazsKKworCiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9DUklUICJyYWlkNjogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtICVkXG4iLAotCQkJICAgICAgIGNvbmYtPmFsZ29yaXRobSk7CisJCQkgICAgICAgYWxnb3JpdGhtKTsKKwkJCUJVRygpOwogCQl9CiAJCWJyZWFrOwogCX0KIAorCWlmIChzaCkgeworCQlzaC0+cGRfaWR4ID0gcGRfaWR4OworCQlzaC0+cWRfaWR4ID0gcWRfaWR4OworCQlzaC0+ZGRmX2xheW91dCA9IGRkZl9sYXlvdXQ7CisJfQogCS8qCiAJICogRmluYWxseSwgY29tcHV0ZSB0aGUgbmV3IHNlY3RvciBudW1iZXIKIAkgKi8KQEAgLTEzMjksMTcgKzE0NzQsMjEgQEAKIH0KIAogCi1zdGF0aWMgc2VjdG9yX3QgY29tcHV0ZV9ibG9ja25yKHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIGludCBpKQorc3RhdGljIHNlY3Rvcl90IGNvbXB1dGVfYmxvY2tucihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgaSwgaW50IHByZXZpb3VzKQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IHJhaWRfZGlza3MgPSBzaC0+ZGlza3M7CiAJaW50IGRhdGFfZGlza3MgPSByYWlkX2Rpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkOwogCXNlY3Rvcl90IG5ld19zZWN0b3IgPSBzaC0+c2VjdG9yLCBjaGVjazsKLQlpbnQgc2VjdG9yc19wZXJfY2h1bmsgPSBjb25mLT5jaHVua19zaXplID4+IDk7CisJaW50IHNlY3RvcnNfcGVyX2NodW5rID0gcHJldmlvdXMgPyAoY29uZi0+cHJldl9jaHVuayA+PiA5KQorCQkJCQkgOiAoY29uZi0+Y2h1bmtfc2l6ZSA+PiA5KTsKKwlpbnQgYWxnb3JpdGhtID0gcHJldmlvdXMgPyBjb25mLT5wcmV2X2FsZ28KKwkJCQkgOiBjb25mLT5hbGdvcml0aG07CiAJc2VjdG9yX3Qgc3RyaXBlOwogCWludCBjaHVua19vZmZzZXQ7Ci0JaW50IGNodW5rX251bWJlciwgZHVtbXkxLCBkdW1teTIsIGRkX2lkeCA9IGk7CisJaW50IGNodW5rX251bWJlciwgZHVtbXkxLCBkZF9pZHggPSBpOwogCXNlY3Rvcl90IHJfc2VjdG9yOworCXN0cnVjdCBzdHJpcGVfaGVhZCBzaDI7CiAKIAogCWNodW5rX29mZnNldCA9IHNlY3Rvcl9kaXYobmV3X3NlY3Rvciwgc2VjdG9yc19wZXJfY2h1bmspOwpAQCAtMTM1MSw3ICsxNTAwLDcgQEAKIAlzd2l0Y2goY29uZi0+bGV2ZWwpIHsKIAljYXNlIDQ6IGJyZWFrOwogCWNhc2UgNToKLQkJc3dpdGNoIChjb25mLT5hbGdvcml0aG0pIHsKKwkJc3dpdGNoIChhbGdvcml0aG0pIHsKIAkJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDOgogCQljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDOgogCQkJaWYgKGkgPiBzaC0+cGRfaWR4KQpAQCAtMTM2MywxOSArMTUxMiwyNyBAQAogCQkJCWkgKz0gcmFpZF9kaXNrczsKIAkJCWkgLT0gKHNoLT5wZF9pZHggKyAxKTsKIAkJCWJyZWFrOworCQljYXNlIEFMR09SSVRITV9QQVJJVFlfMDoKKwkJCWkgLT0gMTsKKwkJCWJyZWFrOworCQljYXNlIEFMR09SSVRITV9QQVJJVFlfTjoKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtICVkXG4iLAotCQkJICAgICAgIGNvbmYtPmFsZ29yaXRobSk7CisJCQkgICAgICAgYWxnb3JpdGhtKTsKKwkJCUJVRygpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgNjoKLQkJaWYgKGkgPT0gcmFpZDZfbmV4dF9kaXNrKHNoLT5wZF9pZHgsIHJhaWRfZGlza3MpKQorCQlpZiAoaSA9PSBzaC0+cWRfaWR4KQogCQkJcmV0dXJuIDA7IC8qIEl0IGlzIHRoZSBRIGRpc2sgKi8KLQkJc3dpdGNoIChjb25mLT5hbGdvcml0aG0pIHsKKwkJc3dpdGNoIChhbGdvcml0aG0pIHsKIAkJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDOgogCQljYXNlIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDOgotCQkgIAlpZiAoc2gtPnBkX2lkeCA9PSByYWlkX2Rpc2tzLTEpCi0JCQkJaS0tOyAJLyogUSBEIEQgRCBQICovCisJCWNhc2UgQUxHT1JJVEhNX1JPVEFUSU5HX1pFUk9fUkVTVEFSVDoKKwkJY2FzZSBBTEdPUklUSE1fUk9UQVRJTkdfTl9SRVNUQVJUOgorCQkJaWYgKHNoLT5wZF9pZHggPT0gcmFpZF9kaXNrcy0xKQorCQkJCWktLTsJLyogUSBEIEQgRCBQICovCiAJCQllbHNlIGlmIChpID4gc2gtPnBkX2lkeCkKIAkJCQlpIC09IDI7IC8qIEQgRCBQIFEgRCAqLwogCQkJYnJlYWs7CkBAIC0xMzkwLDkgKzE1NDcsMzUgQEAKIAkJCQlpIC09IChzaC0+cGRfaWR4ICsgMik7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZXzA6CisJCQlpIC09IDI7CisJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fUEFSSVRZX046CisJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fUk9UQVRJTkdfTl9DT05USU5VRToKKwkJCWlmIChzaC0+cGRfaWR4ID09IDApCisJCQkJaS0tOwkvKiBQIEQgRCBEIFEgKi8KKwkJCWVsc2UgaWYgKGkgPiBzaC0+cGRfaWR4KQorCQkJCWkgLT0gMjsgLyogRCBEIFEgUCBEICovCisJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDXzY6CisJCWNhc2UgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUNfNjoKKwkJCWlmIChpID4gc2gtPnBkX2lkeCkKKwkJCQlpLS07CisJCQlicmVhazsKKwkJY2FzZSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUNfNjoKKwkJY2FzZSBBTEdPUklUSE1fUklHSFRfU1lNTUVUUklDXzY6CisJCQlpZiAoaSA8IHNoLT5wZF9pZHgpCisJCQkJaSArPSBkYXRhX2Rpc2tzICsgMTsKKwkJCWkgLT0gKHNoLT5wZF9pZHggKyAxKTsKKwkJCWJyZWFrOworCQljYXNlIEFMR09SSVRITV9QQVJJVFlfMF82OgorCQkJaSAtPSAxOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9DUklUICJyYWlkNjogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtICVkXG4iLAotCQkJICAgICAgIGNvbmYtPmFsZ29yaXRobSk7CisJCQkgICAgICAgYWxnb3JpdGhtKTsKKwkJCUJVRygpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTE0MDAsOCArMTU4MywxMCBAQAogCWNodW5rX251bWJlciA9IHN0cmlwZSAqIGRhdGFfZGlza3MgKyBpOwogCXJfc2VjdG9yID0gKHNlY3Rvcl90KWNodW5rX251bWJlciAqIHNlY3RvcnNfcGVyX2NodW5rICsgY2h1bmtfb2Zmc2V0OwogCi0JY2hlY2sgPSByYWlkNV9jb21wdXRlX3NlY3RvcihyX3NlY3RvciwgcmFpZF9kaXNrcywgZGF0YV9kaXNrcywgJmR1bW15MSwgJmR1bW15MiwgY29uZik7Ci0JaWYgKGNoZWNrICE9IHNoLT5zZWN0b3IgfHwgZHVtbXkxICE9IGRkX2lkeCB8fCBkdW1teTIgIT0gc2gtPnBkX2lkeCkgeworCWNoZWNrID0gcmFpZDVfY29tcHV0ZV9zZWN0b3IoY29uZiwgcl9zZWN0b3IsCisJCQkJICAgICBwcmV2aW91cywgJmR1bW15MSwgJnNoMik7CisJaWYgKGNoZWNrICE9IHNoLT5zZWN0b3IgfHwgZHVtbXkxICE9IGRkX2lkeCB8fCBzaDIucGRfaWR4ICE9IHNoLT5wZF9pZHgKKwkJfHwgc2gyLnFkX2lkeCAhPSBzaC0+cWRfaWR4KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY29tcHV0ZV9ibG9ja25yOiBtYXAgbm90IGNvcnJlY3RcbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDY4LDE0ICsxNjUzLDE2IEBACiAKIHN0YXRpYyB2b2lkIGNvbXB1dGVfcGFyaXR5NihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgbWV0aG9kKQogewotCXJhaWQ2X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7Ci0JaW50IGksIHBkX2lkeCA9IHNoLT5wZF9pZHgsIHFkX2lkeCwgZDBfaWR4LCBkaXNrcyA9IHNoLT5kaXNrcywgY291bnQ7CisJcmFpZDVfY29uZl90ICpjb25mID0gc2gtPnJhaWRfY29uZjsKKwlpbnQgaSwgcGRfaWR4LCBxZF9pZHgsIGQwX2lkeCwgZGlza3MgPSBzaC0+ZGlza3MsIGNvdW50OworCWludCBzeW5kcm9tZV9kaXNrcyA9IHNoLT5kZGZfbGF5b3V0ID8gZGlza3MgOiAoZGlza3MgLSAyKTsKIAlzdHJ1Y3QgYmlvICpjaG9zZW47CiAJLyoqKiogRklYIFRISVM6IFRoaXMgY291bGQgYmUgdmVyeSBiYWQgaWYgZGlza3MgaXMgY2xvc2UgdG8gMjU2ICoqKiovCi0Jdm9pZCAqcHRyc1tkaXNrc107CisJdm9pZCAqcHRyc1tzeW5kcm9tZV9kaXNrcysyXTsKIAotCXFkX2lkeCA9IHJhaWQ2X25leHRfZGlzayhwZF9pZHgsIGRpc2tzKTsKLQlkMF9pZHggPSByYWlkNl9uZXh0X2Rpc2socWRfaWR4LCBkaXNrcyk7CisJcGRfaWR4ID0gc2gtPnBkX2lkeDsKKwlxZF9pZHggPSBzaC0+cWRfaWR4OworCWQwX2lkeCA9IHJhaWQ2X2QwKHNoKTsKIAogCXByX2RlYnVnKCJjb21wdXRlX3Bhcml0eSwgc3RyaXBlICVsbHUsIG1ldGhvZCAlZFxuIiwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yLCBtZXRob2QpOwpAQCAtMTUxMywyNCArMTcwMCwyOSBAQAogCQkJc2V0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbaV0uZmxhZ3MpOwogCQl9CiAKLS8vCXN3aXRjaChtZXRob2QpIHsKLS8vCWNhc2UgUkVDT05TVFJVQ1RfV1JJVEU6Ci0vLwljYXNlIENIRUNLX1BBUklUWToKLS8vCWNhc2UgVVBEQVRFX1BBUklUWToKLQkJLyogTm90ZSB0aGF0IHVubGlrZSBSQUlELTUsIHRoZSBvcmRlcmluZyBvZiB0aGUgZGlza3MgbWF0dGVycyBncmVhdGx5LiAqLwotCQkvKiBGSVg6IElzIHRoaXMgb3JkZXJpbmcgb2YgZHJpdmVzIGV2ZW4gcmVtb3RlbHkgb3B0aW1hbD8gKi8KLQkJY291bnQgPSAwOwotCQlpID0gZDBfaWR4OwotCQlkbyB7Ci0JCQlwdHJzW2NvdW50KytdID0gcGFnZV9hZGRyZXNzKHNoLT5kZXZbaV0ucGFnZSk7Ci0JCQlpZiAoY291bnQgPD0gZGlza3MtMiAmJiAhdGVzdF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W2ldLmZsYWdzKSkKLQkJCQlwcmludGsoImJsb2NrICVkLyVkIG5vdCB1cHRvZGF0ZSBvbiBwYXJpdHkgY2FsY1xuIiwgaSxjb3VudCk7Ci0JCQlpID0gcmFpZDZfbmV4dF9kaXNrKGksIGRpc2tzKTsKLQkJfSB3aGlsZSAoIGkgIT0gZDBfaWR4ICk7Ci0vLwkJYnJlYWs7Ci0vLwl9CisJLyogTm90ZSB0aGF0IHVubGlrZSBSQUlELTUsIHRoZSBvcmRlcmluZyBvZiB0aGUgZGlza3MgbWF0dGVycyBncmVhdGx5LiovCiAKLQlyYWlkNl9jYWxsLmdlbl9zeW5kcm9tZShkaXNrcywgU1RSSVBFX1NJWkUsIHB0cnMpOworCWZvciAoaSA9IDA7IGkgPCBkaXNrczsgaSsrKQorCQlwdHJzW2ldID0gKHZvaWQgKilyYWlkNl9lbXB0eV96ZXJvX3BhZ2U7CisKKwljb3VudCA9IDA7CisJaSA9IGQwX2lkeDsKKwlkbyB7CisJCWludCBzbG90ID0gcmFpZDZfaWR4X3RvX3Nsb3QoaSwgc2gsICZjb3VudCwgc3luZHJvbWVfZGlza3MpOworCisJCXB0cnNbc2xvdF0gPSBwYWdlX2FkZHJlc3Moc2gtPmRldltpXS5wYWdlKTsKKwkJaWYgKHNsb3QgPCBzeW5kcm9tZV9kaXNrcyAmJgorCQkgICAgIXRlc3RfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltpXS5mbGFncykpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiYmxvY2sgJWQvJWQgbm90IHVwdG9kYXRlICIKKwkJCSAgICAgICAib24gcGFyaXR5IGNhbGNcbiIsIGksIGNvdW50KTsKKwkJCUJVRygpOworCQl9CisKKwkJaSA9IHJhaWQ2X25leHRfZGlzayhpLCBkaXNrcyk7CisJfSB3aGlsZSAoaSAhPSBkMF9pZHgpOworCUJVR19PTihjb3VudCAhPSBzeW5kcm9tZV9kaXNrcyk7CisKKwlyYWlkNl9jYWxsLmdlbl9zeW5kcm9tZShzeW5kcm9tZV9kaXNrcysyLCBTVFJJUEVfU0laRSwgcHRycyk7CiAKIAlzd2l0Y2gobWV0aG9kKSB7CiAJY2FzZSBSRUNPTlNUUlVDVF9XUklURToKQEAgLTE1NTIsOCArMTc0NCw3IEBACiB7CiAJaW50IGksIGNvdW50LCBkaXNrcyA9IHNoLT5kaXNrczsKIAl2b2lkICpwdHJbTUFYX1hPUl9CTE9DS1NdLCAqZGVzdCwgKnA7Ci0JaW50IHBkX2lkeCA9IHNoLT5wZF9pZHg7Ci0JaW50IHFkX2lkeCA9IHJhaWQ2X25leHRfZGlzayhwZF9pZHgsIGRpc2tzKTsKKwlpbnQgcWRfaWR4ID0gc2gtPnFkX2lkeDsKIAogCXByX2RlYnVnKCJjb21wdXRlX2Jsb2NrXzEsIHN0cmlwZSAlbGx1LCBpZHggJWRcbiIsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpc2gtPnNlY3RvciwgZGRfaWR4KTsKQEAgLTE1ODksNjMgKzE3ODAsNjUgQEAKIHN0YXRpYyB2b2lkIGNvbXB1dGVfYmxvY2tfMihzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoLCBpbnQgZGRfaWR4MSwgaW50IGRkX2lkeDIpCiB7CiAJaW50IGksIGNvdW50LCBkaXNrcyA9IHNoLT5kaXNrczsKLQlpbnQgcGRfaWR4ID0gc2gtPnBkX2lkeDsKLQlpbnQgcWRfaWR4ID0gcmFpZDZfbmV4dF9kaXNrKHBkX2lkeCwgZGlza3MpOwotCWludCBkMF9pZHggPSByYWlkNl9uZXh0X2Rpc2socWRfaWR4LCBkaXNrcyk7Ci0JaW50IGZhaWxhLCBmYWlsYjsKKwlpbnQgc3luZHJvbWVfZGlza3MgPSBzaC0+ZGRmX2xheW91dCA/IGRpc2tzIDogZGlza3MtMjsKKwlpbnQgZDBfaWR4ID0gcmFpZDZfZDAoc2gpOworCWludCBmYWlsYSA9IC0xLCBmYWlsYiA9IC0xOworCS8qKioqIEZJWCBUSElTOiBUaGlzIGNvdWxkIGJlIHZlcnkgYmFkIGlmIGRpc2tzIGlzIGNsb3NlIHRvIDI1NiAqKioqLworCXZvaWQgKnB0cnNbc3luZHJvbWVfZGlza3MrMl07CiAKLQkvKiBmYWlsYSBhbmQgZmFpbGIgYXJlIGRpc2sgbnVtYmVycyByZWxhdGl2ZSB0byBkMF9pZHggKi8KLQkvKiBwZF9pZHggYmVjb21lIGRpc2tzLTIgYW5kIHFkX2lkeCBiZWNvbWUgZGlza3MtMSAqLwotCWZhaWxhID0gKGRkX2lkeDEgPCBkMF9pZHgpID8gZGRfaWR4MSsoZGlza3MtZDBfaWR4KSA6IGRkX2lkeDEtZDBfaWR4OwotCWZhaWxiID0gKGRkX2lkeDIgPCBkMF9pZHgpID8gZGRfaWR4MisoZGlza3MtZDBfaWR4KSA6IGRkX2lkeDItZDBfaWR4OworCWZvciAoaSA9IDA7IGkgPCBkaXNrcyA7IGkrKykKKwkJcHRyc1tpXSA9ICh2b2lkICopcmFpZDZfZW1wdHlfemVyb19wYWdlOworCWNvdW50ID0gMDsKKwlpID0gZDBfaWR4OworCWRvIHsKKwkJaW50IHNsb3QgPSByYWlkNl9pZHhfdG9fc2xvdChpLCBzaCwgJmNvdW50LCBzeW5kcm9tZV9kaXNrcyk7CisKKwkJcHRyc1tzbG90XSA9IHBhZ2VfYWRkcmVzcyhzaC0+ZGV2W2ldLnBhZ2UpOworCisJCWlmIChpID09IGRkX2lkeDEpCisJCQlmYWlsYSA9IHNsb3Q7CisJCWlmIChpID09IGRkX2lkeDIpCisJCQlmYWlsYiA9IHNsb3Q7CisJCWkgPSByYWlkNl9uZXh0X2Rpc2soaSwgZGlza3MpOworCX0gd2hpbGUgKGkgIT0gZDBfaWR4KTsKKwlCVUdfT04oY291bnQgIT0gc3luZHJvbWVfZGlza3MpOwogCiAJQlVHX09OKGZhaWxhID09IGZhaWxiKTsKIAlpZiAoIGZhaWxiIDwgZmFpbGEgKSB7IGludCB0bXAgPSBmYWlsYTsgZmFpbGEgPSBmYWlsYjsgZmFpbGIgPSB0bXA7IH0KIAogCXByX2RlYnVnKCJjb21wdXRlX2Jsb2NrXzIsIHN0cmlwZSAlbGx1LCBpZHggJWQsJWQgKCVkLCVkKVxuIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yLCBkZF9pZHgxLCBkZF9pZHgyLCBmYWlsYSwgZmFpbGIpOworCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yLCBkZF9pZHgxLCBkZF9pZHgyLAorCQkgZmFpbGEsIGZhaWxiKTsKIAotCWlmICggZmFpbGIgPT0gZGlza3MtMSApIHsKKwlpZiAoZmFpbGIgPT0gc3luZHJvbWVfZGlza3MrMSkgewogCQkvKiBRIGRpc2sgaXMgb25lIG9mIHRoZSBtaXNzaW5nIGRpc2tzICovCi0JCWlmICggZmFpbGEgPT0gZGlza3MtMiApIHsKKwkJaWYgKGZhaWxhID09IHN5bmRyb21lX2Rpc2tzKSB7CiAJCQkvKiBNaXNzaW5nIFArUSwganVzdCByZWNvbXB1dGUgKi8KIAkJCWNvbXB1dGVfcGFyaXR5NihzaCwgVVBEQVRFX1BBUklUWSk7CiAJCQlyZXR1cm47CiAJCX0gZWxzZSB7CiAJCQkvKiBXZSdyZSBtaXNzaW5nIEQrUTsgcmVjb21wdXRlIEQgZnJvbSBQICovCi0JCQljb21wdXRlX2Jsb2NrXzEoc2gsIChkZF9pZHgxID09IHFkX2lkeCkgPyBkZF9pZHgyIDogZGRfaWR4MSwgMCk7CisJCQljb21wdXRlX2Jsb2NrXzEoc2gsICgoZGRfaWR4MSA9PSBzaC0+cWRfaWR4KSA/CisJCQkJCSAgICAgZGRfaWR4MiA6IGRkX2lkeDEpLAorCQkJCQkwKTsKIAkJCWNvbXB1dGVfcGFyaXR5NihzaCwgVVBEQVRFX1BBUklUWSk7IC8qIElzIHRoaXMgbmVjZXNzYXJ5PyAqLwogCQkJcmV0dXJuOwogCQl9CiAJfQogCi0JLyogV2UncmUgbWlzc2luZyBEK1Agb3IgRCtEOyBidWlsZCBwb2ludGVyIHRhYmxlICovCi0JewotCQkvKioqKiBGSVggVEhJUzogVGhpcyBjb3VsZCBiZSB2ZXJ5IGJhZCBpZiBkaXNrcyBpcyBjbG9zZSB0byAyNTYgKioqKi8KLQkJdm9pZCAqcHRyc1tkaXNrc107Ci0KLQkJY291bnQgPSAwOwotCQlpID0gZDBfaWR4OwotCQlkbyB7Ci0JCQlwdHJzW2NvdW50KytdID0gcGFnZV9hZGRyZXNzKHNoLT5kZXZbaV0ucGFnZSk7Ci0JCQlpID0gcmFpZDZfbmV4dF9kaXNrKGksIGRpc2tzKTsKLQkJCWlmIChpICE9IGRkX2lkeDEgJiYgaSAhPSBkZF9pZHgyICYmCi0JCQkgICAgIXRlc3RfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltpXS5mbGFncykpCi0JCQkJcHJpbnRrKCJjb21wdXRlXzIgd2l0aCBtaXNzaW5nIGJsb2NrICVkLyVkXG4iLCBjb3VudCwgaSk7Ci0JCX0gd2hpbGUgKCBpICE9IGQwX2lkeCApOwotCi0JCWlmICggZmFpbGIgPT0gZGlza3MtMiApIHsKLQkJCS8qIFdlJ3JlIG1pc3NpbmcgRCtQLiAqLwotCQkJcmFpZDZfZGF0YXBfcmVjb3YoZGlza3MsIFNUUklQRV9TSVpFLCBmYWlsYSwgcHRycyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBXZSdyZSBtaXNzaW5nIEQrRC4gKi8KLQkJCXJhaWQ2XzJkYXRhX3JlY292KGRpc2tzLCBTVFJJUEVfU0laRSwgZmFpbGEsIGZhaWxiLCBwdHJzKTsKLQkJfQotCi0JCS8qIEJvdGggdGhlIGFib3ZlIHVwZGF0ZSBib3RoIG1pc3NpbmcgYmxvY2tzICovCi0JCXNldF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W2RkX2lkeDFdLmZsYWdzKTsKLQkJc2V0X2JpdChSNV9VUFRPREFURSwgJnNoLT5kZXZbZGRfaWR4Ml0uZmxhZ3MpOworCS8qIFdlJ3JlIG1pc3NpbmcgRCtQIG9yIEQrRDsgKi8KKwlpZiAoZmFpbGIgPT0gc3luZHJvbWVfZGlza3MpIHsKKwkJLyogV2UncmUgbWlzc2luZyBEK1AuICovCisJCXJhaWQ2X2RhdGFwX3JlY292KHN5bmRyb21lX2Rpc2tzKzIsIFNUUklQRV9TSVpFLCBmYWlsYSwgcHRycyk7CisJfSBlbHNlIHsKKwkJLyogV2UncmUgbWlzc2luZyBEK0QuICovCisJCXJhaWQ2XzJkYXRhX3JlY292KHN5bmRyb21lX2Rpc2tzKzIsIFNUUklQRV9TSVpFLCBmYWlsYSwgZmFpbGIsCisJCQkJICBwdHJzKTsKIAl9CisKKwkvKiBCb3RoIHRoZSBhYm92ZSB1cGRhdGUgYm90aCBtaXNzaW5nIGJsb2NrcyAqLworCXNldF9iaXQoUjVfVVBUT0RBVEUsICZzaC0+ZGV2W2RkX2lkeDFdLmZsYWdzKTsKKwlzZXRfYml0KFI1X1VQVE9EQVRFLCAmc2gtPmRldltkZF9pZHgyXS5mbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xODAwLDE3ICsxOTkzLDIxIEBACiAJCW1lbWNtcChhLCBhKzQsIFNUUklQRV9TSVpFLTQpPT0wKTsKIH0KIAotc3RhdGljIGludCBzdHJpcGVfdG9fcGRpZHgoc2VjdG9yX3Qgc3RyaXBlLCByYWlkNV9jb25mX3QgKmNvbmYsIGludCBkaXNrcykKK3N0YXRpYyB2b2lkIHN0cmlwZV9zZXRfaWR4KHNlY3Rvcl90IHN0cmlwZSwgcmFpZDVfY29uZl90ICpjb25mLCBpbnQgcHJldmlvdXMsCisJCQkgICAgc3RydWN0IHN0cmlwZV9oZWFkICpzaCkKIHsKLQlpbnQgc2VjdG9yc19wZXJfY2h1bmsgPSBjb25mLT5jaHVua19zaXplID4+IDk7Ci0JaW50IHBkX2lkeCwgZGRfaWR4OworCWludCBzZWN0b3JzX3Blcl9jaHVuayA9CisJCXByZXZpb3VzID8gKGNvbmYtPnByZXZfY2h1bmsgPj4gOSkKKwkJCSA6IChjb25mLT5jaHVua19zaXplID4+IDkpOworCWludCBkZF9pZHg7CiAJaW50IGNodW5rX29mZnNldCA9IHNlY3Rvcl9kaXYoc3RyaXBlLCBzZWN0b3JzX3Blcl9jaHVuayk7CisJaW50IGRpc2tzID0gcHJldmlvdXMgPyBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzIDogY29uZi0+cmFpZF9kaXNrczsKIAotCXJhaWQ1X2NvbXB1dGVfc2VjdG9yKHN0cmlwZSAqIChkaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZCkKKwlyYWlkNV9jb21wdXRlX3NlY3Rvcihjb25mLAorCQkJICAgICBzdHJpcGUgKiAoZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQpCiAJCQkgICAgICpzZWN0b3JzX3Blcl9jaHVuayArIGNodW5rX29mZnNldCwKLQkJCSAgICAgZGlza3MsIGRpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkLAotCQkJICAgICAmZGRfaWR4LCAmcGRfaWR4LCBjb25mKTsKLQlyZXR1cm4gcGRfaWR4OworCQkJICAgICBwcmV2aW91cywKKwkJCSAgICAgJmRkX2lkeCwgc2gpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjE4MSw3ICsyMzc4LDcgQEAKIAkJc3RydWN0IHI2X3N0YXRlICpyNnMsIGludCBkaXNrcykKIHsKIAlpbnQgcmN3ID0gMCwgbXVzdF9jb21wdXRlID0gMCwgcGRfaWR4ID0gc2gtPnBkX2lkeCwgaTsKLQlpbnQgcWRfaWR4ID0gcjZzLT5xZF9pZHg7CisJaW50IHFkX2lkeCA9IHNoLT5xZF9pZHg7CiAJZm9yIChpID0gZGlza3M7IGktLTsgKSB7CiAJCXN0cnVjdCByNWRldiAqZGV2ID0gJnNoLT5kZXZbaV07CiAJCS8qIFdvdWxkIEkgaGF2ZSB0byByZWFkIHRoaXMgYnVmZmVyIGZvciByZWNvbnN0cnVjdF93cml0ZSAqLwpAQCAtMjM3MSw3ICsyNTY4LDcgQEAKIAlpbnQgdXBkYXRlX3AgPSAwLCB1cGRhdGVfcSA9IDA7CiAJc3RydWN0IHI1ZGV2ICpkZXY7CiAJaW50IHBkX2lkeCA9IHNoLT5wZF9pZHg7Ci0JaW50IHFkX2lkeCA9IHI2cy0+cWRfaWR4OworCWludCBxZF9pZHggPSBzaC0+cWRfaWR4OwogCiAJc2V0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKTsKIApAQCAtMjQ2NywxNyArMjY2NCwxNCBAQAogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwogCWNsZWFyX2JpdChTVFJJUEVfRVhQQU5EX1NPVVJDRSwgJnNoLT5zdGF0ZSk7CiAJZm9yIChpID0gMDsgaSA8IHNoLT5kaXNrczsgaSsrKQotCQlpZiAoaSAhPSBzaC0+cGRfaWR4ICYmICghcjZzIHx8IGkgIT0gcjZzLT5xZF9pZHgpKSB7Ci0JCQlpbnQgZGRfaWR4LCBwZF9pZHgsIGo7CisJCWlmIChpICE9IHNoLT5wZF9pZHggJiYgaSAhPSBzaC0+cWRfaWR4KSB7CisJCQlpbnQgZGRfaWR4LCBqOwogCQkJc3RydWN0IHN0cmlwZV9oZWFkICpzaDI7CiAKLQkJCXNlY3Rvcl90IGJuID0gY29tcHV0ZV9ibG9ja25yKHNoLCBpKTsKLQkJCXNlY3Rvcl90IHMgPSByYWlkNV9jb21wdXRlX3NlY3RvcihibiwgY29uZi0+cmFpZF9kaXNrcywKLQkJCQkJCWNvbmYtPnJhaWRfZGlza3MgLQotCQkJCQkJY29uZi0+bWF4X2RlZ3JhZGVkLCAmZGRfaWR4LAotCQkJCQkJJnBkX2lkeCwgY29uZik7Ci0JCQlzaDIgPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzLCBjb25mLT5yYWlkX2Rpc2tzLAotCQkJCQkJcGRfaWR4LCAxKTsKKwkJCXNlY3Rvcl90IGJuID0gY29tcHV0ZV9ibG9ja25yKHNoLCBpLCAxKTsKKwkJCXNlY3Rvcl90IHMgPSByYWlkNV9jb21wdXRlX3NlY3Rvcihjb25mLCBibiwgMCwKKwkJCQkJCQkgICZkZF9pZHgsIE5VTEwpOworCQkJc2gyID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgcywgMCwgMSk7CiAJCQlpZiAoc2gyID09IE5VTEwpCiAJCQkJLyogc28gZmFyIG9ubHkgdGhlIGVhcmx5IGJsb2NrcyBvZiB0aGlzIHN0cmlwZQogCQkJCSAqIGhhdmUgYmVlbiByZXF1ZXN0ZWQuICBXaGVuIGxhdGVyIGJsb2NrcwpAQCAtMjUwMCw4ICsyNjk0LDcgQEAKIAkJCXNldF9iaXQoUjVfVVBUT0RBVEUsICZzaDItPmRldltkZF9pZHhdLmZsYWdzKTsKIAkJCWZvciAoaiA9IDA7IGogPCBjb25mLT5yYWlkX2Rpc2tzOyBqKyspCiAJCQkJaWYgKGogIT0gc2gyLT5wZF9pZHggJiYKLQkJCQkgICAgKCFyNnMgfHwgaiAhPSByYWlkNl9uZXh0X2Rpc2soc2gyLT5wZF9pZHgsCi0JCQkJCQkJCSBzaDItPmRpc2tzKSkgJiYKKwkJCQkgICAgKCFyNnMgfHwgaiAhPSBzaDItPnFkX2lkeCkgJiYKIAkJCQkgICAgIXRlc3RfYml0KFI1X0V4cGFuZGVkLCAmc2gyLT5kZXZbal0uZmxhZ3MpKQogCQkJCQlicmVhazsKIAkJCWlmIChqID09IGNvbmYtPnJhaWRfZGlza3MpIHsKQEAgLTI3NTAsNiArMjk0MywyMyBAQAogCiAJLyogRmluaXNoIHJlY29uc3RydWN0IG9wZXJhdGlvbnMgaW5pdGlhdGVkIGJ5IHRoZSBleHBhbnNpb24gcHJvY2VzcyAqLwogCWlmIChzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgPT0gcmVjb25zdHJ1Y3Rfc3RhdGVfcmVzdWx0KSB7CisJCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2gyCisJCQk9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIHNoLT5zZWN0b3IsIDEsIDEpOworCQlpZiAoc2gyICYmIHRlc3RfYml0KFNUUklQRV9FWFBBTkRfU09VUkNFLCAmc2gyLT5zdGF0ZSkpIHsKKwkJCS8qIHNoIGNhbm5vdCBiZSB3cml0dGVuIHVudGlsIHNoMiBoYXMgYmVlbiByZWFkLgorCQkJICogc28gYXJyYW5nZSBmb3Igc2ggdG8gYmUgZGVsYXllZCBhIGxpdHRsZQorCQkJICovCisJCQlzZXRfYml0KFNUUklQRV9ERUxBWUVELCAmc2gtPnN0YXRlKTsKKwkJCXNldF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSk7CisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU1RSSVBFX1BSRVJFQURfQUNUSVZFLAorCQkJCQkgICAgICAmc2gyLT5zdGF0ZSkpCisJCQkJYXRvbWljX2luYygmY29uZi0+cHJlcmVhZF9hY3RpdmVfc3RyaXBlcyk7CisJCQlyZWxlYXNlX3N0cmlwZShzaDIpOworCQkJZ290byB1bmxvY2s7CisJCX0KKwkJaWYgKHNoMikKKwkJCXJlbGVhc2Vfc3RyaXBlKHNoMik7CisKIAkJc2gtPnJlY29uc3RydWN0X3N0YXRlID0gcmVjb25zdHJ1Y3Rfc3RhdGVfaWRsZTsKIAkJY2xlYXJfYml0KFNUUklQRV9FWFBBTkRJTkcsICZzaC0+c3RhdGUpOwogCQlmb3IgKGkgPSBjb25mLT5yYWlkX2Rpc2tzOyBpLS07ICkgewpAQCAtMjc2Myw4ICsyOTczLDcgQEAKIAkgICAgIXNoLT5yZWNvbnN0cnVjdF9zdGF0ZSkgewogCQkvKiBOZWVkIHRvIHdyaXRlIG91dCBhbGwgYmxvY2tzIGFmdGVyIGNvbXB1dGluZyBwYXJpdHkgKi8KIAkJc2gtPmRpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKLQkJc2gtPnBkX2lkeCA9IHN0cmlwZV90b19wZGlkeChzaC0+c2VjdG9yLCBjb25mLAotCQkJY29uZi0+cmFpZF9kaXNrcyk7CisJCXN0cmlwZV9zZXRfaWR4KHNoLT5zZWN0b3IsIGNvbmYsIDAsIHNoKTsKIAkJc2NoZWR1bGVfcmVjb25zdHJ1Y3Rpb241KHNoLCAmcywgMSwgMSk7CiAJfSBlbHNlIGlmIChzLmV4cGFuZGVkICYmICFzaC0+cmVjb25zdHJ1Y3Rfc3RhdGUgJiYgcy5sb2NrZWQgPT0gMCkgewogCQljbGVhcl9iaXQoU1RSSVBFX0VYUEFORF9SRUFEWSwgJnNoLT5zdGF0ZSk7CkBAIC0yNzk2LDIwICszMDA1LDE5IEBACiAKIHN0YXRpYyBib29sIGhhbmRsZV9zdHJpcGU2KHN0cnVjdCBzdHJpcGVfaGVhZCAqc2gsIHN0cnVjdCBwYWdlICp0bXBfcGFnZSkKIHsKLQlyYWlkNl9jb25mX3QgKmNvbmYgPSBzaC0+cmFpZF9jb25mOworCXJhaWQ1X2NvbmZfdCAqY29uZiA9IHNoLT5yYWlkX2NvbmY7CiAJaW50IGRpc2tzID0gc2gtPmRpc2tzOwogCXN0cnVjdCBiaW8gKnJldHVybl9iaSA9IE5VTEw7Ci0JaW50IGksIHBkX2lkeCA9IHNoLT5wZF9pZHg7CisJaW50IGksIHBkX2lkeCA9IHNoLT5wZF9pZHgsIHFkX2lkeCA9IHNoLT5xZF9pZHg7CiAJc3RydWN0IHN0cmlwZV9oZWFkX3N0YXRlIHM7CiAJc3RydWN0IHI2X3N0YXRlIHI2czsKIAlzdHJ1Y3QgcjVkZXYgKmRldiwgKnBkZXYsICpxZGV2OwogCW1ka19yZGV2X3QgKmJsb2NrZWRfcmRldiA9IE5VTEw7CiAKLQlyNnMucWRfaWR4ID0gcmFpZDZfbmV4dF9kaXNrKHBkX2lkeCwgZGlza3MpOwogCXByX2RlYnVnKCJoYW5kbGluZyBzdHJpcGUgJWxsdSwgc3RhdGU9JSNseCBjbnQ9JWQsICIKIAkJInBkX2lkeD0lZCwgcWRfaWR4PSVkXG4iLAogCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXNoLT5zZWN0b3IsIHNoLT5zdGF0ZSwKLQkgICAgICAgYXRvbWljX3JlYWQoJnNoLT5jb3VudCksIHBkX2lkeCwgcjZzLnFkX2lkeCk7CisJICAgICAgIGF0b21pY19yZWFkKCZzaC0+Y291bnQpLCBwZF9pZHgsIHFkX2lkeCk7CiAJbWVtc2V0KCZzLCAwLCBzaXplb2YocykpOwogCiAJc3Bpbl9sb2NrKCZzaC0+bG9jayk7CkBAIC0yOTIwLDkgKzMxMjgsOSBAQAogCXBkZXYgPSAmc2gtPmRldltwZF9pZHhdOwogCXI2cy5wX2ZhaWxlZCA9IChzLmZhaWxlZCA+PSAxICYmIHI2cy5mYWlsZWRfbnVtWzBdID09IHBkX2lkeCkKIAkJfHwgKHMuZmFpbGVkID49IDIgJiYgcjZzLmZhaWxlZF9udW1bMV0gPT0gcGRfaWR4KTsKLQlxZGV2ID0gJnNoLT5kZXZbcjZzLnFkX2lkeF07Ci0JcjZzLnFfZmFpbGVkID0gKHMuZmFpbGVkID49IDEgJiYgcjZzLmZhaWxlZF9udW1bMF0gPT0gcjZzLnFkX2lkeCkKLQkJfHwgKHMuZmFpbGVkID49IDIgJiYgcjZzLmZhaWxlZF9udW1bMV0gPT0gcjZzLnFkX2lkeCk7CisJcWRldiA9ICZzaC0+ZGV2W3FkX2lkeF07CisJcjZzLnFfZmFpbGVkID0gKHMuZmFpbGVkID49IDEgJiYgcjZzLmZhaWxlZF9udW1bMF0gPT0gcWRfaWR4KQorCQl8fCAocy5mYWlsZWQgPj0gMiAmJiByNnMuZmFpbGVkX251bVsxXSA9PSBxZF9pZHgpOwogCiAJaWYgKCBzLndyaXR0ZW4gJiYKIAkgICAgICggcjZzLnBfZmFpbGVkIHx8ICgodGVzdF9iaXQoUjVfSW5zeW5jLCAmcGRldi0+ZmxhZ3MpCkBAIC0yOTgwLDEwICszMTg4LDI2IEBACiAJCX0KIAogCWlmIChzLmV4cGFuZGVkICYmIHRlc3RfYml0KFNUUklQRV9FWFBBTkRJTkcsICZzaC0+c3RhdGUpKSB7CisJCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2gyCisJCQk9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIHNoLT5zZWN0b3IsIDEsIDEpOworCQlpZiAoc2gyICYmIHRlc3RfYml0KFNUUklQRV9FWFBBTkRfU09VUkNFLCAmc2gyLT5zdGF0ZSkpIHsKKwkJCS8qIHNoIGNhbm5vdCBiZSB3cml0dGVuIHVudGlsIHNoMiBoYXMgYmVlbiByZWFkLgorCQkJICogc28gYXJyYW5nZSBmb3Igc2ggdG8gYmUgZGVsYXllZCBhIGxpdHRsZQorCQkJICovCisJCQlzZXRfYml0KFNUUklQRV9ERUxBWUVELCAmc2gtPnN0YXRlKTsKKwkJCXNldF9iaXQoU1RSSVBFX0hBTkRMRSwgJnNoLT5zdGF0ZSk7CisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoU1RSSVBFX1BSRVJFQURfQUNUSVZFLAorCQkJCQkgICAgICAmc2gyLT5zdGF0ZSkpCisJCQkJYXRvbWljX2luYygmY29uZi0+cHJlcmVhZF9hY3RpdmVfc3RyaXBlcyk7CisJCQlyZWxlYXNlX3N0cmlwZShzaDIpOworCQkJZ290byB1bmxvY2s7CisJCX0KKwkJaWYgKHNoMikKKwkJCXJlbGVhc2Vfc3RyaXBlKHNoMik7CisKIAkJLyogTmVlZCB0byB3cml0ZSBvdXQgYWxsIGJsb2NrcyBhZnRlciBjb21wdXRpbmcgUCZRICovCiAJCXNoLT5kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7Ci0JCXNoLT5wZF9pZHggPSBzdHJpcGVfdG9fcGRpZHgoc2gtPnNlY3RvciwgY29uZiwKLQkJCQkJICAgICBjb25mLT5yYWlkX2Rpc2tzKTsKKwkJc3RyaXBlX3NldF9pZHgoc2gtPnNlY3RvciwgY29uZiwgMCwgc2gpOwogCQljb21wdXRlX3Bhcml0eTYoc2gsIFJFQ09OU1RSVUNUX1dSSVRFKTsKIAkJZm9yIChpID0gY29uZi0+cmFpZF9kaXNrcyA7IGktLSA7ICApIHsKIAkJCXNldF9iaXQoUjVfTE9DS0VELCAmc2gtPmRldltpXS5mbGFncyk7CkBAIC0zMTM0LDYgKzMzNTgsOCBAQAogCWlmICgoYnZtLT5iaV9ydyAmIDEpID09IFdSSVRFKQogCQlyZXR1cm4gYmlvdmVjLT5idl9sZW47IC8qIGFsd2F5cyBhbGxvdyB3cml0ZXMgdG8gYmUgbWVyZ2VhYmxlICovCiAKKwlpZiAobWRkZXYtPm5ld19jaHVuayA8IG1kZGV2LT5jaHVua19zaXplKQorCQljaHVua19zZWN0b3JzID0gbWRkZXYtPm5ld19jaHVuayA+PiA5OwogCW1heCA9ICAoY2h1bmtfc2VjdG9ycyAtICgoc2VjdG9yICYgKGNodW5rX3NlY3RvcnMgLSAxKSkgKyBiaW9fc2VjdG9ycykpIDw8IDk7CiAJaWYgKG1heCA8IDApIG1heCA9IDA7CiAJaWYgKG1heCA8PSBiaW92ZWMtPmJ2X2xlbiAmJiBiaW9fc2VjdG9ycyA9PSAwKQpAQCAtMzE0OSw2ICszMzc1LDggQEAKIAl1bnNpZ25lZCBpbnQgY2h1bmtfc2VjdG9ycyA9IG1kZGV2LT5jaHVua19zaXplID4+IDk7CiAJdW5zaWduZWQgaW50IGJpb19zZWN0b3JzID0gYmlvLT5iaV9zaXplID4+IDk7CiAKKwlpZiAobWRkZXYtPm5ld19jaHVuayA8IG1kZGV2LT5jaHVua19zaXplKQorCQljaHVua19zZWN0b3JzID0gbWRkZXYtPm5ld19jaHVuayA+PiA5OwogCXJldHVybiAgY2h1bmtfc2VjdG9ycyA+PQogCQkoKHNlY3RvciAmIChjaHVua19zZWN0b3JzIC0gMSkpICsgYmlvX3NlY3RvcnMpOwogfQpAQCAtMzI1NSw5ICszNDgzLDcgQEAKIHsKIAltZGRldl90ICptZGRldiA9IHEtPnF1ZXVlZGF0YTsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldl90b19jb25mKG1kZGV2KTsKLQljb25zdCB1bnNpZ25lZCBpbnQgcmFpZF9kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7Ci0JY29uc3QgdW5zaWduZWQgaW50IGRhdGFfZGlza3MgPSByYWlkX2Rpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkOwotCXVuc2lnbmVkIGludCBkZF9pZHgsIHBkX2lkeDsKKwl1bnNpZ25lZCBpbnQgZGRfaWR4OwogCXN0cnVjdCBiaW8qIGFsaWduX2JpOwogCW1ka19yZGV2X3QgKnJkZXY7CiAKQEAgLTMyNjYsNyArMzQ5Miw3IEBACiAJCXJldHVybiAwOwogCX0KIAkvKgotIAkgKiB1c2UgYmlvX2Nsb25lIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBiaW8KKwkgKiB1c2UgYmlvX2Nsb25lIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBiaW8KIAkgKi8KIAlhbGlnbl9iaSA9IGJpb19jbG9uZShyYWlkX2JpbywgR0ZQX05PSU8pOwogCWlmICghYWxpZ25fYmkpCkBAIC0zMjgwLDEyICszNTA2LDkgQEAKIAkvKgogCSAqCWNvbXB1dGUgcG9zaXRpb24KIAkgKi8KLQlhbGlnbl9iaS0+Ymlfc2VjdG9yID0gIHJhaWQ1X2NvbXB1dGVfc2VjdG9yKHJhaWRfYmlvLT5iaV9zZWN0b3IsCi0JCQkJCXJhaWRfZGlza3MsCi0JCQkJCWRhdGFfZGlza3MsCi0JCQkJCSZkZF9pZHgsCi0JCQkJCSZwZF9pZHgsCi0JCQkJCWNvbmYpOworCWFsaWduX2JpLT5iaV9zZWN0b3IgPSAgcmFpZDVfY29tcHV0ZV9zZWN0b3IoY29uZiwgcmFpZF9iaW8tPmJpX3NlY3RvciwKKwkJCQkJCSAgICAwLAorCQkJCQkJICAgICZkZF9pZHgsIE5VTEwpOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCXJkZXYgPSByY3VfZGVyZWZlcmVuY2UoY29uZi0+ZGlza3NbZGRfaWR4XS5yZGV2KTsKQEAgLTMzNzcsNyArMzYwMCw3IEBACiB7CiAJbWRkZXZfdCAqbWRkZXYgPSBxLT5xdWV1ZWRhdGE7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7Ci0JdW5zaWduZWQgaW50IGRkX2lkeCwgcGRfaWR4OworCWludCBkZF9pZHg7CiAJc2VjdG9yX3QgbmV3X3NlY3RvcjsKIAlzZWN0b3JfdCBsb2dpY2FsX3NlY3RvciwgbGFzdF9zZWN0b3I7CiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKQEAgLTM0MDAsNyArMzYyMyw3IEBACiAJaWYgKHJ3ID09IFJFQUQgJiYKIAkgICAgIG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID09IE1heFNlY3RvciAmJgogCSAgICAgY2h1bmtfYWxpZ25lZF9yZWFkKHEsYmkpKQotICAgICAgICAgICAgCXJldHVybiAwOworCQlyZXR1cm4gMDsKIAogCWxvZ2ljYWxfc2VjdG9yID0gYmktPmJpX3NlY3RvciAmIH4oKHNlY3Rvcl90KVNUUklQRV9TRUNUT1JTLTEpOwogCWxhc3Rfc2VjdG9yID0gYmktPmJpX3NlY3RvciArIChiaS0+Ymlfc2l6ZT4+OSk7CkBAIC0zNDEwLDI2ICszNjMzLDMxIEBACiAJZm9yICg7bG9naWNhbF9zZWN0b3IgPCBsYXN0X3NlY3RvcjsgbG9naWNhbF9zZWN0b3IgKz0gU1RSSVBFX1NFQ1RPUlMpIHsKIAkJREVGSU5FX1dBSVQodyk7CiAJCWludCBkaXNrcywgZGF0YV9kaXNrczsKKwkJaW50IHByZXZpb3VzOwogCiAJcmV0cnk6CisJCXByZXZpb3VzID0gMDsKKwkJZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwogCQlwcmVwYXJlX3RvX3dhaXQoJmNvbmYtPndhaXRfZm9yX292ZXJsYXAsICZ3LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCWlmIChsaWtlbHkoY29uZi0+ZXhwYW5kX3Byb2dyZXNzID09IE1heFNlY3RvcikpCi0JCQlkaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7Ci0JCWVsc2UgewotCQkJLyogc3BpbmxvY2sgaXMgbmVlZGVkIGFzIGV4cGFuZF9wcm9ncmVzcyBtYXkgYmUKKwkJaWYgKHVubGlrZWx5KGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3MgIT0gTWF4U2VjdG9yKSkgeworCQkJLyogc3BpbmxvY2sgaXMgbmVlZGVkIGFzIHJlc2hhcGVfcHJvZ3Jlc3MgbWF5IGJlCiAJCQkgKiA2NGJpdCBvbiBhIDMyYml0IHBsYXRmb3JtLCBhbmQgc28gaXQgbWlnaHQgYmUKIAkJCSAqIHBvc3NpYmxlIHRvIHNlZSBhIGhhbGYtdXBkYXRlZCB2YWx1ZQotCQkJICogT2Zjb3Vyc2UgZXhwYW5kX3Byb2dyZXNzIGNvdWxkIGNoYW5nZSBhZnRlcgorCQkJICogT2Zjb3Vyc2UgcmVzaGFwZV9wcm9ncmVzcyBjb3VsZCBjaGFuZ2UgYWZ0ZXIKIAkJCSAqIHRoZSBsb2NrIGlzIGRyb3BwZWQsIHNvIG9uY2Ugd2UgZ2V0IGEgcmVmZXJlbmNlCiAJCQkgKiB0byB0aGUgc3RyaXBlIHRoYXQgd2UgdGhpbmsgaXQgaXMsIHdlIHdpbGwgaGF2ZQogCQkJICogdG8gY2hlY2sgYWdhaW4uCiAJCQkgKi8KIAkJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQkJCWRpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKLQkJCWlmIChsb2dpY2FsX3NlY3RvciA+PSBjb25mLT5leHBhbmRfcHJvZ3Jlc3MpCisJCQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzIDwgMAorCQkJICAgID8gbG9naWNhbF9zZWN0b3IgPCBjb25mLT5yZXNoYXBlX3Byb2dyZXNzCisJCQkgICAgOiBsb2dpY2FsX3NlY3RvciA+PSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzKSB7CiAJCQkJZGlza3MgPSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzOwotCQkJZWxzZSB7Ci0JCQkJaWYgKGxvZ2ljYWxfc2VjdG9yID49IGNvbmYtPmV4cGFuZF9sbykgeworCQkJCXByZXZpb3VzID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDAKKwkJCQkgICAgPyBsb2dpY2FsX3NlY3RvciA8IGNvbmYtPnJlc2hhcGVfc2FmZQorCQkJCSAgICA6IGxvZ2ljYWxfc2VjdG9yID49IGNvbmYtPnJlc2hhcGVfc2FmZSkgewogCQkJCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJCQkJc2NoZWR1bGUoKTsKIAkJCQkJZ290byByZXRyeTsKQEAgLTM0MzksMTUgKzM2NjcsMTcgQEAKIAkJfQogCQlkYXRhX2Rpc2tzID0gZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQ7CiAKLSAJCW5ld19zZWN0b3IgPSByYWlkNV9jb21wdXRlX3NlY3Rvcihsb2dpY2FsX3NlY3RvciwgZGlza3MsIGRhdGFfZGlza3MsCi0JCQkJCQkgICZkZF9pZHgsICZwZF9pZHgsIGNvbmYpOworCQluZXdfc2VjdG9yID0gcmFpZDVfY29tcHV0ZV9zZWN0b3IoY29uZiwgbG9naWNhbF9zZWN0b3IsCisJCQkJCQkgIHByZXZpb3VzLAorCQkJCQkJICAmZGRfaWR4LCBOVUxMKTsKIAkJcHJfZGVidWcoInJhaWQ1OiBtYWtlX3JlcXVlc3QsIHNlY3RvciAlbGx1IGxvZ2ljYWwgJWxsdVxuIiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbmV3X3NlY3RvciwgCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWxvZ2ljYWxfc2VjdG9yKTsKIAotCQlzaCA9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIG5ld19zZWN0b3IsIGRpc2tzLCBwZF9pZHgsIChiaS0+YmlfcncmUldBX01BU0spKTsKKwkJc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBuZXdfc2VjdG9yLCBwcmV2aW91cywKKwkJCQkgICAgICAgKGJpLT5iaV9ydyZSV0FfTUFTSykpOwogCQlpZiAoc2gpIHsKLQkJCWlmICh1bmxpa2VseShjb25mLT5leHBhbmRfcHJvZ3Jlc3MgIT0gTWF4U2VjdG9yKSkgeworCQkJaWYgKHVubGlrZWx5KHByZXZpb3VzKSkgewogCQkJCS8qIGV4cGFuc2lvbiBtaWdodCBoYXZlIG1vdmVkIG9uIHdoaWxlIHdhaXRpbmcgZm9yIGEKIAkJCQkgKiBzdHJpcGUsIHNvIHdlIG11c3QgZG8gdGhlIHJhbmdlIGNoZWNrIGFnYWluLgogCQkJCSAqIEV4cGFuc2lvbiBjb3VsZCBzdGlsbCBtb3ZlIHBhc3QgYWZ0ZXIgdGhpcwpAQCAtMzQ1OCw4ICszNjg4LDkgQEAKIAkJCQkgKi8KIAkJCQlpbnQgbXVzdF9yZXRyeSA9IDA7CiAJCQkJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwotCQkJCWlmIChsb2dpY2FsX3NlY3RvciA8ICBjb25mLT5leHBhbmRfcHJvZ3Jlc3MgJiYKLQkJCQkgICAgZGlza3MgPT0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKKwkJCQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzIDwgMAorCQkJCSAgICA/IGxvZ2ljYWxfc2VjdG9yID49IGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3MKKwkJCQkgICAgOiBsb2dpY2FsX3NlY3RvciA8IGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3MpCiAJCQkJCS8qIG1pc21hdGNoLCBuZWVkIHRvIHRyeSBhZ2FpbiAqLwogCQkJCQltdXN0X3JldHJ5ID0gMTsKIAkJCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKQEAgLTM1MTQsNiArMzc0NSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzZWN0b3JfdCByYWlkNV9zaXplKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JzLCBpbnQgcmFpZF9kaXNrcyk7CisKIHN0YXRpYyBzZWN0b3JfdCByZXNoYXBlX3JlcXVlc3QobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3Rvcl9uciwgaW50ICpza2lwcGVkKQogewogCS8qIHJlc2hhcGluZyBpcyBxdWl0ZSBkaWZmZXJlbnQgdG8gcmVjb3ZlcnkvcmVzeW5jIHNvIGl0IGlzCkBAIC0zNTI3LDYxICszNzYwLDExOCBAQAogCSAqLwogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IChyYWlkNV9jb25mX3QgKikgbWRkZXYtPnByaXZhdGU7CiAJc3RydWN0IHN0cmlwZV9oZWFkICpzaDsKLQlpbnQgcGRfaWR4OwogCXNlY3Rvcl90IGZpcnN0X3NlY3RvciwgbGFzdF9zZWN0b3I7CiAJaW50IHJhaWRfZGlza3MgPSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzOwogCWludCBkYXRhX2Rpc2tzID0gcmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKIAlpbnQgbmV3X2RhdGFfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkOwogCWludCBpOwogCWludCBkZF9pZHg7Ci0Jc2VjdG9yX3Qgd3JpdGVwb3MsIHNhZmVwb3MsIGdhcDsKKwlzZWN0b3JfdCB3cml0ZXBvcywgcmVhZHBvcywgc2FmZXBvczsKKwlzZWN0b3JfdCBzdHJpcGVfYWRkcjsKKwlpbnQgcmVzaGFwZV9zZWN0b3JzOworCXN0cnVjdCBsaXN0X2hlYWQgc3RyaXBlczsKIAotCWlmIChzZWN0b3JfbnIgPT0gMCAmJgotCSAgICBjb25mLT5leHBhbmRfcHJvZ3Jlc3MgIT0gMCkgewotCQkvKiByZXN0YXJ0aW5nIGluIHRoZSBtaWRkbGUsIHNraXAgdGhlIGluaXRpYWwgc2VjdG9ycyAqLwotCQlzZWN0b3JfbnIgPSBjb25mLT5leHBhbmRfcHJvZ3Jlc3M7CisJaWYgKHNlY3Rvcl9uciA9PSAwKSB7CisJCS8qIElmIHJlc3RhcnRpbmcgaW4gdGhlIG1pZGRsZSwgc2tpcCB0aGUgaW5pdGlhbCBzZWN0b3JzICovCisJCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPCAwICYmCisJCSAgICBjb25mLT5yZXNoYXBlX3Byb2dyZXNzIDwgcmFpZDVfc2l6ZShtZGRldiwgMCwgMCkpIHsKKwkJCXNlY3Rvcl9uciA9IHJhaWQ1X3NpemUobWRkZXYsIDAsIDApCisJCQkJLSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzOworCQl9IGVsc2UgaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA+IDAgJiYKKwkJCSAgIGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3MgPiAwKQorCQkJc2VjdG9yX25yID0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKIAkJc2VjdG9yX2RpdihzZWN0b3JfbnIsIG5ld19kYXRhX2Rpc2tzKTsKLQkJKnNraXBwZWQgPSAxOwotCQlyZXR1cm4gc2VjdG9yX25yOworCQlpZiAoc2VjdG9yX25yKSB7CisJCQkqc2tpcHBlZCA9IDE7CisJCQlyZXR1cm4gc2VjdG9yX25yOworCQl9CiAJfQogCisJLyogV2UgbmVlZCB0byBwcm9jZXNzIGEgZnVsbCBjaHVuayBhdCBhIHRpbWUuCisJICogSWYgb2xkIGFuZCBuZXcgY2h1bmsgc2l6ZXMgZGlmZmVyLCB3ZSBuZWVkIHRvIHByb2Nlc3MgdGhlCisJICogbGFyZ2VzdCBvZiB0aGVzZQorCSAqLworCWlmIChtZGRldi0+bmV3X2NodW5rID4gbWRkZXYtPmNodW5rX3NpemUpCisJCXJlc2hhcGVfc2VjdG9ycyA9IG1kZGV2LT5uZXdfY2h1bmsgLyA1MTI7CisJZWxzZQorCQlyZXNoYXBlX3NlY3RvcnMgPSBtZGRldi0+Y2h1bmtfc2l6ZSAvIDUxMjsKKwogCS8qIHdlIHVwZGF0ZSB0aGUgbWV0YWRhdGEgd2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4gM01lZwogCSAqIGluIHRoZSBibG9jayByYW5nZSAodGhhdCBpcyByYXRoZXIgYXJiaXRyYXJ5LCBzaG91bGQKIAkgKiBwcm9iYWJseSBiZSB0aW1lIGJhc2VkKSBvciB3aGVuIHRoZSBkYXRhIGFib3V0IHRvIGJlCiAJICogY29waWVkIHdvdWxkIG92ZXItd3JpdGUgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSBhdAogCSAqIHRoZSBmcm9udCBvZiB0aGUgcmFuZ2UuCi0JICogaS5lLiBvbmUgbmV3X3N0cmlwZSBmb3J3YXJkIGZyb20gZXhwYW5kX3Byb2dyZXNzIG5ld19tYXBzCi0JICogdG8gYWZ0ZXIgd2hlcmUgZXhwYW5kX2xvIG9sZF9tYXBzIHRvCisJICogaS5lLiBvbmUgbmV3X3N0cmlwZSBhbG9uZyBmcm9tIHJlc2hhcGVfcHJvZ3Jlc3MgbmV3X21hcHMKKwkgKiB0byBhZnRlciB3aGVyZSByZXNoYXBlX3NhZmUgb2xkX21hcHMgdG8KIAkgKi8KLQl3cml0ZXBvcyA9IGNvbmYtPmV4cGFuZF9wcm9ncmVzcyArCi0JCWNvbmYtPmNodW5rX3NpemUvNTEyKihuZXdfZGF0YV9kaXNrcyk7CisJd3JpdGVwb3MgPSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzOwogCXNlY3Rvcl9kaXYod3JpdGVwb3MsIG5ld19kYXRhX2Rpc2tzKTsKLQlzYWZlcG9zID0gY29uZi0+ZXhwYW5kX2xvOworCXJlYWRwb3MgPSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzOworCXNlY3Rvcl9kaXYocmVhZHBvcywgZGF0YV9kaXNrcyk7CisJc2FmZXBvcyA9IGNvbmYtPnJlc2hhcGVfc2FmZTsKIAlzZWN0b3JfZGl2KHNhZmVwb3MsIGRhdGFfZGlza3MpOwotCWdhcCA9IGNvbmYtPmV4cGFuZF9wcm9ncmVzcyAtIGNvbmYtPmV4cGFuZF9sbzsKKwlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzIDwgMCkgeworCQl3cml0ZXBvcyAtPSByZXNoYXBlX3NlY3RvcnM7CisJCXJlYWRwb3MgKz0gcmVzaGFwZV9zZWN0b3JzOworCQlzYWZlcG9zICs9IHJlc2hhcGVfc2VjdG9yczsKKwl9IGVsc2UgeworCQl3cml0ZXBvcyArPSByZXNoYXBlX3NlY3RvcnM7CisJCXJlYWRwb3MgLT0gcmVzaGFwZV9zZWN0b3JzOworCQlzYWZlcG9zIC09IHJlc2hhcGVfc2VjdG9yczsKKwl9CiAKLQlpZiAod3JpdGVwb3MgPj0gc2FmZXBvcyB8fAotCSAgICBnYXAgPiAobmV3X2RhdGFfZGlza3MpKjMwMDAqMiAvKjNNZWcqLykgeworCS8qICd3cml0ZXBvcycgaXMgdGhlIG1vc3QgYWR2YW5jZWQgZGV2aWNlIGFkZHJlc3Mgd2UgbWlnaHQgd3JpdGUuCisJICogJ3JlYWRwb3MnIGlzIHRoZSBsZWFzdCBhZHZhbmNlZCBkZXZpY2UgYWRkcmVzcyB3ZSBtaWdodCByZWFkLgorCSAqICdzYWZlcG9zJyBpcyB0aGUgbGVhc3QgYWRkcmVzcyByZWNvcmRlZCBpbiB0aGUgbWV0YWRhdGEgYXMgaGF2aW5nCisJICogICAgIGJlZW4gcmVzaGFwZWQuCisJICogSWYgJ3JlYWRwb3MnIGlzIGJlaGluZCAnd3JpdGVwb3MnLCB0aGVuIHRoZXJlIGlzIG5vIHdheSB0aGF0IHdlIGNhbgorCSAqIGVuc3VyZSBzYWZldHkgaW4gdGhlIGZhY2Ugb2YgYSBjcmFzaCAtIHRoYXQgbXVzdCBiZSBkb25lIGJ5IHVzZXJzcGFjZQorCSAqIG1ha2luZyBhIGJhY2t1cCBvZiB0aGUgZGF0YS4gIFNvIGluIHRoYXQgY2FzZSB0aGVyZSBpcyBubyBwYXJ0aWN1bGFyCisJICogcnVzaCB0byB1cGRhdGUgbWV0YWRhdGEuCisJICogT3RoZXJ3aXNlIGlmICdzYWZlcG9zJyBpcyBiZWhpbmQgJ3dyaXRlcG9zJywgdGhlbiB3ZSByZWFsbHkgbmVlZCB0bworCSAqIHVwZGF0ZSB0aGUgbWV0YWRhdGEgdG8gYWR2YW5jZSAnc2FmZXBvcycgdG8gbWF0Y2ggJ3JlYWRwb3MnIHNvIHRoYXQKKwkgKiB3ZSBjYW4gYmUgc2FmZSBpbiB0aGUgZXZlbnQgb2YgYSBjcmFzaC4KKwkgKiBTbyB3ZSBpbnNpc3Qgb24gdXBkYXRpbmcgbWV0YWRhdGEgaWYgc2FmZXBvcyBpcyBiZWhpbmQgd3JpdGVwb3MgYW5kCisJICogcmVhZHBvcyBpcyBiZXlvbmQgd3JpdGVwb3MuCisJICogSW4gYW55IGNhc2UsIHVwZGF0ZSB0aGUgbWV0YWRhdGEgZXZlcnkgMTAgc2Vjb25kcy4KKwkgKiBNYXliZSB0aGF0IG51bWJlciBzaG91bGQgYmUgY29uZmlndXJhYmxlLCBidXQgSSdtIG5vdCBzdXJlIGl0IGlzCisJICogd29ydGggaXQuLi4uIG1heWJlIGl0IGNvdWxkIGJlIGEgbXVsdGlwbGUgb2Ygc2FmZW1vZGVfZGVsYXk/Pz8KKwkgKi8KKwlpZiAoKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDAKKwkgICAgID8gKHNhZmVwb3MgPiB3cml0ZXBvcyAmJiByZWFkcG9zIDwgd3JpdGVwb3MpCisJICAgICA6IChzYWZlcG9zIDwgd3JpdGVwb3MgJiYgcmVhZHBvcyA+IHdyaXRlcG9zKSkgfHwKKwkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBjb25mLT5yZXNoYXBlX2NoZWNrcG9pbnQgKyAxMCpIWikpIHsKIAkJLyogQ2Fubm90IHByb2NlZWQgdW50aWwgd2UndmUgdXBkYXRlZCB0aGUgc3VwZXJibG9jay4uLiAqLwogCQl3YWl0X2V2ZW50KGNvbmYtPndhaXRfZm9yX292ZXJsYXAsCiAJCQkgICBhdG9taWNfcmVhZCgmY29uZi0+cmVzaGFwZV9zdHJpcGVzKT09MCk7Ci0JCW1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID0gY29uZi0+ZXhwYW5kX3Byb2dyZXNzOworCQltZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9IGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3M7CisJCWNvbmYtPnJlc2hhcGVfY2hlY2twb2ludCA9IGppZmZpZXM7CiAJCXNldF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpOwogCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCQl3YWl0X2V2ZW50KG1kZGV2LT5zYl93YWl0LCBtZGRldi0+ZmxhZ3MgPT0gMCB8fAogCQkJICAga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKIAkJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwotCQljb25mLT5leHBhbmRfbG8gPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKKwkJY29uZi0+cmVzaGFwZV9zYWZlID0gbWRkZXYtPnJlc2hhcGVfcG9zaXRpb247CiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQl3YWtlX3VwKCZjb25mLT53YWl0X2Zvcl9vdmVybGFwKTsKIAl9CiAKLQlmb3IgKGk9MDsgaSA8IGNvbmYtPmNodW5rX3NpemUvNTEyOyBpKz0gU1RSSVBFX1NFQ1RPUlMpIHsKKwlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzIDwgMCkgeworCQlCVUdfT04oY29uZi0+cmVzaGFwZV9wcm9ncmVzcyA9PSAwKTsKKwkJc3RyaXBlX2FkZHIgPSB3cml0ZXBvczsKKwkJQlVHX09OKChtZGRldi0+ZGV2X3NlY3RvcnMgJgorCQkJfigoc2VjdG9yX3QpcmVzaGFwZV9zZWN0b3JzIC0gMSkpCisJCSAgICAgICAtIHJlc2hhcGVfc2VjdG9ycyAtIHN0cmlwZV9hZGRyCisJCSAgICAgICAhPSBzZWN0b3JfbnIpOworCX0gZWxzZSB7CisJCUJVR19PTih3cml0ZXBvcyAhPSBzZWN0b3JfbnIgKyByZXNoYXBlX3NlY3RvcnMpOworCQlzdHJpcGVfYWRkciA9IHNlY3Rvcl9ucjsKKwl9CisJSU5JVF9MSVNUX0hFQUQoJnN0cmlwZXMpOworCWZvciAoaSA9IDA7IGkgPCByZXNoYXBlX3NlY3RvcnM7IGkgKz0gU1RSSVBFX1NFQ1RPUlMpIHsKIAkJaW50IGo7CiAJCWludCBza2lwcGVkID0gMDsKLQkJcGRfaWR4ID0gc3RyaXBlX3RvX3BkaWR4KHNlY3Rvcl9ucitpLCBjb25mLCBjb25mLT5yYWlkX2Rpc2tzKTsKLQkJc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzZWN0b3JfbnIraSwKLQkJCQkgICAgICAgY29uZi0+cmFpZF9kaXNrcywgcGRfaWR4LCAwKTsKKwkJc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzdHJpcGVfYWRkcitpLCAwLCAwKTsKIAkJc2V0X2JpdChTVFJJUEVfRVhQQU5ESU5HLCAmc2gtPnN0YXRlKTsKIAkJYXRvbWljX2luYygmY29uZi0+cmVzaGFwZV9zdHJpcGVzKTsKIAkJLyogSWYgYW55IG9mIHRoaXMgc3RyaXBlIGlzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBvbGQKQEAgLTM1OTIsMTAgKzM4ODIsMTAgQEAKIAkJCWlmIChqID09IHNoLT5wZF9pZHgpCiAJCQkJY29udGludWU7CiAJCQlpZiAoY29uZi0+bGV2ZWwgPT0gNiAmJgotCQkJICAgIGogPT0gcmFpZDZfbmV4dF9kaXNrKHNoLT5wZF9pZHgsIHNoLT5kaXNrcykpCisJCQkgICAgaiA9PSBzaC0+cWRfaWR4KQogCQkJCWNvbnRpbnVlOwotCQkJcyA9IGNvbXB1dGVfYmxvY2tucihzaCwgaik7Ci0JCQlpZiAocyA8IG1kZGV2LT5hcnJheV9zZWN0b3JzKSB7CisJCQlzID0gY29tcHV0ZV9ibG9ja25yKHNoLCBqLCAwKTsKKwkJCWlmIChzIDwgcmFpZDVfc2l6ZShtZGRldiwgMCwgMCkpIHsKIAkJCQlza2lwcGVkID0gMTsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTM2MDcsMTAgKzM4OTcsMTMgQEAKIAkJCXNldF9iaXQoU1RSSVBFX0VYUEFORF9SRUFEWSwgJnNoLT5zdGF0ZSk7CiAJCQlzZXRfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpOwogCQl9Ci0JCXJlbGVhc2Vfc3RyaXBlKHNoKTsKKwkJbGlzdF9hZGQoJnNoLT5scnUsICZzdHJpcGVzKTsKIAl9CiAJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwotCWNvbmYtPmV4cGFuZF9wcm9ncmVzcyA9IChzZWN0b3JfbnIgKyBpKSAqIG5ld19kYXRhX2Rpc2tzOworCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPCAwKQorCQljb25mLT5yZXNoYXBlX3Byb2dyZXNzIC09IHJlc2hhcGVfc2VjdG9ycyAqIG5ld19kYXRhX2Rpc2tzOworCWVsc2UKKwkJY29uZi0+cmVzaGFwZV9wcm9ncmVzcyArPSByZXNoYXBlX3NlY3RvcnMgKiBuZXdfZGF0YV9kaXNrczsKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkvKiBPaywgdGhvc2Ugc3RyaXBlIGFyZSByZWFkeS4gV2UgY2FuIHN0YXJ0IHNjaGVkdWxpbmcKIAkgKiByZWFkcyBvbiB0aGUgc291cmNlIHN0cmlwZXMuCkBAIC0zNjE4LDQ2ICszOTExLDUwIEBACiAJICogYmxvY2sgb24gdGhlIGRlc3RpbmF0aW9uIHN0cmlwZXMuCiAJICovCiAJZmlyc3Rfc2VjdG9yID0KLQkJcmFpZDVfY29tcHV0ZV9zZWN0b3Ioc2VjdG9yX25yKihuZXdfZGF0YV9kaXNrcyksCi0JCQkJICAgICByYWlkX2Rpc2tzLCBkYXRhX2Rpc2tzLAotCQkJCSAgICAgJmRkX2lkeCwgJnBkX2lkeCwgY29uZik7CisJCXJhaWQ1X2NvbXB1dGVfc2VjdG9yKGNvbmYsIHN0cmlwZV9hZGRyKihuZXdfZGF0YV9kaXNrcyksCisJCQkJICAgICAxLCAmZGRfaWR4LCBOVUxMKTsKIAlsYXN0X3NlY3RvciA9Ci0JCXJhaWQ1X2NvbXB1dGVfc2VjdG9yKChzZWN0b3JfbnIrY29uZi0+Y2h1bmtfc2l6ZS81MTIpCi0JCQkJICAgICAqKG5ld19kYXRhX2Rpc2tzKSAtMSwKLQkJCQkgICAgIHJhaWRfZGlza3MsIGRhdGFfZGlza3MsCi0JCQkJICAgICAmZGRfaWR4LCAmcGRfaWR4LCBjb25mKTsKLQlpZiAobGFzdF9zZWN0b3IgPj0gKG1kZGV2LT5zaXplPDwxKSkKLQkJbGFzdF9zZWN0b3IgPSAobWRkZXYtPnNpemU8PDEpLTE7CisJCXJhaWQ1X2NvbXB1dGVfc2VjdG9yKGNvbmYsICgoc3RyaXBlX2FkZHIrY29uZi0+Y2h1bmtfc2l6ZS81MTIpCisJCQkJCSAgICAqKG5ld19kYXRhX2Rpc2tzKSAtIDEpLAorCQkJCSAgICAgMSwgJmRkX2lkeCwgTlVMTCk7CisJaWYgKGxhc3Rfc2VjdG9yID49IG1kZGV2LT5kZXZfc2VjdG9ycykKKwkJbGFzdF9zZWN0b3IgPSBtZGRldi0+ZGV2X3NlY3RvcnMgLSAxOwogCXdoaWxlIChmaXJzdF9zZWN0b3IgPD0gbGFzdF9zZWN0b3IpIHsKLQkJcGRfaWR4ID0gc3RyaXBlX3RvX3BkaWR4KGZpcnN0X3NlY3RvciwgY29uZiwKLQkJCQkJIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpOwotCQlzaCA9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIGZpcnN0X3NlY3RvciwKLQkJCQkgICAgICAgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcywgcGRfaWR4LCAwKTsKKwkJc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBmaXJzdF9zZWN0b3IsIDEsIDApOwogCQlzZXRfYml0KFNUUklQRV9FWFBBTkRfU09VUkNFLCAmc2gtPnN0YXRlKTsKIAkJc2V0X2JpdChTVFJJUEVfSEFORExFLCAmc2gtPnN0YXRlKTsKIAkJcmVsZWFzZV9zdHJpcGUoc2gpOwogCQlmaXJzdF9zZWN0b3IgKz0gU1RSSVBFX1NFQ1RPUlM7CiAJfQorCS8qIE5vdyB0aGF0IHRoZSBzb3VyY2VzIGFyZSBjbGVhcmx5IG1hcmtlZCwgd2UgY2FuIHJlbGVhc2UKKwkgKiB0aGUgZGVzdGluYXRpb24gc3RyaXBlcworCSAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmc3RyaXBlcykpIHsKKwkJc2ggPSBsaXN0X2VudHJ5KHN0cmlwZXMubmV4dCwgc3RydWN0IHN0cmlwZV9oZWFkLCBscnUpOworCQlsaXN0X2RlbF9pbml0KCZzaC0+bHJ1KTsKKwkJcmVsZWFzZV9zdHJpcGUoc2gpOworCX0KIAkvKiBJZiB0aGlzIHRha2VzIHVzIHRvIHRoZSByZXN5bmNfbWF4IHBvaW50IHdoZXJlIHdlIGhhdmUgdG8gcGF1c2UsCiAJICogdGhlbiB3ZSBuZWVkIHRvIHdyaXRlIG91dCB0aGUgc3VwZXJibG9jay4KIAkgKi8KLQlzZWN0b3JfbnIgKz0gY29uZi0+Y2h1bmtfc2l6ZT4+OTsKKwlzZWN0b3JfbnIgKz0gcmVzaGFwZV9zZWN0b3JzOwogCWlmIChzZWN0b3JfbnIgPj0gbWRkZXYtPnJlc3luY19tYXgpIHsKIAkJLyogQ2Fubm90IHByb2NlZWQgdW50aWwgd2UndmUgdXBkYXRlZCB0aGUgc3VwZXJibG9jay4uLiAqLwogCQl3YWl0X2V2ZW50KGNvbmYtPndhaXRfZm9yX292ZXJsYXAsCiAJCQkgICBhdG9taWNfcmVhZCgmY29uZi0+cmVzaGFwZV9zdHJpcGVzKSA9PSAwKTsKLQkJbWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPSBjb25mLT5leHBhbmRfcHJvZ3Jlc3M7CisJCW1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID0gY29uZi0+cmVzaGFwZV9wcm9ncmVzczsKKwkJY29uZi0+cmVzaGFwZV9jaGVja3BvaW50ID0gamlmZmllczsKIAkJc2V0X2JpdChNRF9DSEFOR0VfREVWUywgJm1kZGV2LT5mbGFncyk7CiAJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAJCXdhaXRfZXZlbnQobWRkZXYtPnNiX3dhaXQsCiAJCQkgICAhdGVzdF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpCiAJCQkgICB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwogCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7Ci0JCWNvbmYtPmV4cGFuZF9sbyA9IG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uOworCQljb25mLT5yZXNoYXBlX3NhZmUgPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJCXdha2VfdXAoJmNvbmYtPndhaXRfZm9yX292ZXJsYXApOwogCX0KLQlyZXR1cm4gY29uZi0+Y2h1bmtfc2l6ZT4+OTsKKwlyZXR1cm4gcmVzaGFwZV9zZWN0b3JzOwogfQogCiAvKiBGSVhNRSBnb19mYXN0ZXIgaXNuJ3QgdXNlZCAqLwpAQCAtMzY2NSw5ICszOTYyLDcgQEAKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSAocmFpZDVfY29uZl90ICopIG1kZGV2LT5wcml2YXRlOwogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7Ci0JaW50IHBkX2lkeDsKLQlpbnQgcmFpZF9kaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7Ci0Jc2VjdG9yX3QgbWF4X3NlY3RvciA9IG1kZGV2LT5zaXplIDw8IDE7CisJc2VjdG9yX3QgbWF4X3NlY3RvciA9IG1kZGV2LT5kZXZfc2VjdG9yczsKIAlpbnQgc3luY19ibG9ja3M7CiAJaW50IHN0aWxsX2RlZ3JhZGVkID0gMDsKIAlpbnQgaTsKQEAgLTM2NzUsNiArMzk3MCw3IEBACiAJaWYgKHNlY3Rvcl9uciA+PSBtYXhfc2VjdG9yKSB7CiAJCS8qIGp1c3QgYmVpbmcgdG9sZCB0byBmaW5pc2ggdXAgLi4gbm90aGluZyBtdWNoIHRvIGRvICovCiAJCXVucGx1Z19zbGF2ZXMobWRkZXYpOworCiAJCWlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVNIQVBFLCAmbWRkZXYtPnJlY292ZXJ5KSkgewogCQkJZW5kX3Jlc2hhcGUoY29uZik7CiAJCQlyZXR1cm4gMDsKQEAgLTM3MDUsNyArNDAwMSw3IEBACiAJICovCiAJaWYgKG1kZGV2LT5kZWdyYWRlZCA+PSBjb25mLT5tYXhfZGVncmFkZWQgJiYKIAkgICAgdGVzdF9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSkpIHsKLQkJc2VjdG9yX3QgcnYgPSAobWRkZXYtPnNpemUgPDwgMSkgLSBzZWN0b3JfbnI7CisJCXNlY3Rvcl90IHJ2ID0gbWRkZXYtPmRldl9zZWN0b3JzIC0gc2VjdG9yX25yOwogCQkqc2tpcHBlZCA9IDE7CiAJCXJldHVybiBydjsKIAl9CkBAIC0zNzIxLDEwICs0MDE3LDkgQEAKIAogCWJpdG1hcF9jb25kX2VuZF9zeW5jKG1kZGV2LT5iaXRtYXAsIHNlY3Rvcl9ucik7CiAKLQlwZF9pZHggPSBzdHJpcGVfdG9fcGRpZHgoc2VjdG9yX25yLCBjb25mLCByYWlkX2Rpc2tzKTsKLQlzaCA9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIHNlY3Rvcl9uciwgcmFpZF9kaXNrcywgcGRfaWR4LCAxKTsKKwlzaCA9IGdldF9hY3RpdmVfc3RyaXBlKGNvbmYsIHNlY3Rvcl9uciwgMCwgMSk7CiAJaWYgKHNoID09IE5VTEwpIHsKLQkJc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzZWN0b3JfbnIsIHJhaWRfZGlza3MsIHBkX2lkeCwgMCk7CisJCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgc2VjdG9yX25yLCAwLCAwKTsKIAkJLyogbWFrZSBzdXJlIHdlIGRvbid0IHN3YW1wIHRoZSBzdHJpcGUgY2FjaGUgaWYgc29tZW9uZSBlbHNlCiAJCSAqIGlzIHRyeWluZyB0byBnZXQgYWNjZXNzCiAJCSAqLwpAQCAtMzc2NiwxOSArNDA2MSwxNSBAQAogCSAqIGl0IHdpbGwgYmUgb25seSBvbmUgJ2RkX2lkeCcgYW5kIG9ubHkgbmVlZCBvbmUgY2FsbCB0byByYWlkNV9jb21wdXRlX3NlY3Rvci4KIAkgKi8KIAlzdHJ1Y3Qgc3RyaXBlX2hlYWQgKnNoOwotCWludCBkZF9pZHgsIHBkX2lkeDsKKwlpbnQgZGRfaWR4OwogCXNlY3Rvcl90IHNlY3RvciwgbG9naWNhbF9zZWN0b3IsIGxhc3Rfc2VjdG9yOwogCWludCBzY250ID0gMDsKIAlpbnQgcmVtYWluaW5nOwogCWludCBoYW5kbGVkID0gMDsKIAogCWxvZ2ljYWxfc2VjdG9yID0gcmFpZF9iaW8tPmJpX3NlY3RvciAmIH4oKHNlY3Rvcl90KVNUUklQRV9TRUNUT1JTLTEpOwotCXNlY3RvciA9IHJhaWQ1X2NvbXB1dGVfc2VjdG9yKAlsb2dpY2FsX3NlY3RvciwKLQkJCQkJY29uZi0+cmFpZF9kaXNrcywKLQkJCQkJY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZCwKLQkJCQkJJmRkX2lkeCwKLQkJCQkJJnBkX2lkeCwKLQkJCQkJY29uZik7CisJc2VjdG9yID0gcmFpZDVfY29tcHV0ZV9zZWN0b3IoY29uZiwgbG9naWNhbF9zZWN0b3IsCisJCQkJICAgICAgMCwgJmRkX2lkeCwgTlVMTCk7CiAJbGFzdF9zZWN0b3IgPSByYWlkX2Jpby0+Ymlfc2VjdG9yICsgKHJhaWRfYmlvLT5iaV9zaXplPj45KTsKIAogCWZvciAoOyBsb2dpY2FsX3NlY3RvciA8IGxhc3Rfc2VjdG9yOwpAQCAtMzc5MCw3ICs0MDgxLDcgQEAKIAkJCS8qIGFscmVhZHkgZG9uZSB0aGlzIHN0cmlwZSAqLwogCQkJY29udGludWU7CiAKLQkJc2ggPSBnZXRfYWN0aXZlX3N0cmlwZShjb25mLCBzZWN0b3IsIGNvbmYtPnJhaWRfZGlza3MsIHBkX2lkeCwgMSk7CisJCXNoID0gZ2V0X2FjdGl2ZV9zdHJpcGUoY29uZiwgc2VjdG9yLCAwLCAxKTsKIAogCQlpZiAoIXNoKSB7CiAJCQkvKiBmYWlsZWQgdG8gZ2V0IGEgc3RyaXBlIC0gbXVzdCB3YWl0ICovCkBAIC0zOTkyLDg5ICs0MjgzLDY5IEBACiAJLmF0dHJzID0gcmFpZDVfYXR0cnMsCiB9OwogCi1zdGF0aWMgaW50IHJ1bihtZGRldl90ICptZGRldikKK3N0YXRpYyBzZWN0b3JfdAorcmFpZDVfc2l6ZShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycywgaW50IHJhaWRfZGlza3MpCit7CisJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7CisKKwlpZiAoIXNlY3RvcnMpCisJCXNlY3RvcnMgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CisJaWYgKCFyYWlkX2Rpc2tzKSB7CisJCS8qIHNpemUgaXMgZGVmaW5lZCBieSB0aGUgc21hbGxlc3Qgb2YgcHJldmlvdXMgYW5kIG5ldyBzaXplICovCisJCWlmIChjb25mLT5yYWlkX2Rpc2tzIDwgY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykKKwkJCXJhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOworCQllbHNlCisJCQlyYWlkX2Rpc2tzID0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrczsKKwl9CisKKwlzZWN0b3JzICY9IH4oKHNlY3Rvcl90KW1kZGV2LT5jaHVua19zaXplLzUxMiAtIDEpOworCXNlY3RvcnMgJj0gfigoc2VjdG9yX3QpbWRkZXYtPm5ld19jaHVuay81MTIgLSAxKTsKKwlyZXR1cm4gc2VjdG9ycyAqIChyYWlkX2Rpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkKTsKK30KKworc3RhdGljIHJhaWQ1X2NvbmZfdCAqc2V0dXBfY29uZihtZGRldl90ICptZGRldikKIHsKIAlyYWlkNV9jb25mX3QgKmNvbmY7CiAJaW50IHJhaWRfZGlzaywgbWVtb3J5OwogCW1ka19yZGV2X3QgKnJkZXY7CiAJc3RydWN0IGRpc2tfaW5mbyAqZGlzazsKLQlpbnQgd29ya2luZ19kaXNrcyA9IDA7CiAKLQlpZiAobWRkZXYtPmxldmVsICE9IDUgJiYgbWRkZXYtPmxldmVsICE9IDQgJiYgbWRkZXYtPmxldmVsICE9IDYpIHsKKwlpZiAobWRkZXYtPm5ld19sZXZlbCAhPSA1CisJICAgICYmIG1kZGV2LT5uZXdfbGV2ZWwgIT0gNAorCSAgICAmJiBtZGRldi0+bmV3X2xldmVsICE9IDYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogJXM6IHJhaWQgbGV2ZWwgbm90IHNldCB0byA0LzUvNiAoJWQpXG4iLAotCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgbWRkZXYtPmxldmVsKTsKLQkJcmV0dXJuIC1FSU87CisJCSAgICAgICBtZG5hbWUobWRkZXYpLCBtZGRldi0+bmV3X2xldmVsKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCWlmICgobWRkZXYtPm5ld19sZXZlbCA9PSA1CisJICAgICAmJiAhYWxnb3JpdGhtX3ZhbGlkX3JhaWQ1KG1kZGV2LT5uZXdfbGF5b3V0KSkgfHwKKwkgICAgKG1kZGV2LT5uZXdfbGV2ZWwgPT0gNgorCSAgICAgJiYgIWFsZ29yaXRobV92YWxpZF9yYWlkNihtZGRldi0+bmV3X2xheW91dCkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmFpZDU6ICVzOiBsYXlvdXQgJWQgbm90IHN1cHBvcnRlZFxuIiwKKwkJICAgICAgIG1kbmFtZShtZGRldiksIG1kZGV2LT5uZXdfbGF5b3V0KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisJfQorCWlmIChtZGRldi0+bmV3X2xldmVsID09IDYgJiYgbWRkZXYtPnJhaWRfZGlza3MgPCA0KSB7CisJCXByaW50ayhLRVJOX0VSUiAicmFpZDY6IG5vdCBlbm91Z2ggY29uZmlndXJlZCBkZXZpY2VzIGZvciAlcyAoJWQsIG1pbmltdW0gNClcbiIsCisJCSAgICAgICBtZG5hbWUobWRkZXYpLCBtZGRldi0+cmFpZF9kaXNrcyk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAotCWlmIChtZGRldi0+Y2h1bmtfc2l6ZSA8IFBBR0VfU0laRSkgewotCQlwcmludGsoS0VSTl9FUlIgIm1kL3JhaWQ1OiBjaHVua19zaXplIG11c3QgYmUgYXQgbGVhc3QgIgotCQkgICAgICAgIlBBR0VfU0laRSBidXQgJWQgPCAlbGRcbiIsCi0JCSAgICAgICBtZGRldi0+Y2h1bmtfc2l6ZSwgUEFHRV9TSVpFKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFtZGRldi0+bmV3X2NodW5rIHx8IG1kZGV2LT5uZXdfY2h1bmsgJSBQQUdFX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJyYWlkNTogaW52YWxpZCBjaHVuayBzaXplICVkIGZvciAlc1xuIiwKKwkJCW1kZGV2LT5uZXdfY2h1bmssIG1kbmFtZShtZGRldikpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKLQlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gIT0gTWF4U2VjdG9yKSB7Ci0JCS8qIENoZWNrIHRoYXQgd2UgY2FuIGNvbnRpbnVlIHRoZSByZXNoYXBlLgotCQkgKiBDdXJyZW50bHkgb25seSBkaXNrcyBjYW4gY2hhbmdlLCBpdCBtdXN0Ci0JCSAqIGluY3JlYXNlLCBhbmQgd2UgbXVzdCBiZSBwYXN0IHRoZSBwb2ludCB3aGVyZQotCQkgKiBhIHN0cmlwZSBvdmVyLXdyaXRlcyBpdHNlbGYKLQkJICovCi0JCXNlY3Rvcl90IGhlcmVfbmV3LCBoZXJlX29sZDsKLQkJaW50IG9sZF9kaXNrczsKLQkJaW50IG1heF9kZWdyYWRlZCA9IChtZGRldi0+bGV2ZWwgPT0gNSA/IDEgOiAyKTsKLQotCQlpZiAobWRkZXYtPm5ld19sZXZlbCAhPSBtZGRldi0+bGV2ZWwgfHwKLQkJICAgIG1kZGV2LT5uZXdfbGF5b3V0ICE9IG1kZGV2LT5sYXlvdXQgfHwKLQkJICAgIG1kZGV2LT5uZXdfY2h1bmsgIT0gbWRkZXYtPmNodW5rX3NpemUpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicmFpZDU6ICVzOiB1bnN1cHBvcnRlZCByZXNoYXBlICIKLQkJCSAgICAgICAicmVxdWlyZWQgLSBhYm9ydGluZy5cbiIsCi0JCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzIDw9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicmFpZDU6ICVzOiB1bnN1cHBvcnRlZCByZXNoYXBlICIKLQkJCSAgICAgICAiKHJlZHVjZSBkaXNrcykgcmVxdWlyZWQgLSBhYm9ydGluZy5cbiIsCi0JCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlvbGRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWx0YV9kaXNrczsKLQkJLyogcmVzaGFwZV9wb3NpdGlvbiBtdXN0IGJlIG9uIGEgbmV3LXN0cmlwZSBib3VuZGFyeSwgYW5kIG9uZQotCQkgKiBmdXJ0aGVyIHVwIGluIG5ldyBnZW9tZXRyeSBtdXN0IG1hcCBhZnRlciBoZXJlIGluIG9sZAotCQkgKiBnZW9tZXRyeS4KLQkJICovCi0JCWhlcmVfbmV3ID0gbWRkZXYtPnJlc2hhcGVfcG9zaXRpb247Ci0JCWlmIChzZWN0b3JfZGl2KGhlcmVfbmV3LCAobWRkZXYtPmNodW5rX3NpemU+PjkpKgotCQkJICAgICAgIChtZGRldi0+cmFpZF9kaXNrcyAtIG1heF9kZWdyYWRlZCkpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiByZXNoYXBlX3Bvc2l0aW9uIG5vdCAiCi0JCQkgICAgICAgIm9uIGEgc3RyaXBlIGJvdW5kYXJ5XG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCS8qIGhlcmVfbmV3IGlzIHRoZSBzdHJpcGUgd2Ugd2lsbCB3cml0ZSB0byAqLwotCQloZXJlX29sZCA9IG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uOwotCQlzZWN0b3JfZGl2KGhlcmVfb2xkLCAobWRkZXYtPmNodW5rX3NpemU+PjkpKgotCQkJICAgKG9sZF9kaXNrcy1tYXhfZGVncmFkZWQpKTsKLQkJLyogaGVyZV9vbGQgaXMgdGhlIGZpcnN0IHN0cmlwZSB0aGF0IHdlIG1pZ2h0IG5lZWQgdG8gcmVhZAotCQkgKiBmcm9tICovCi0JCWlmIChoZXJlX25ldyA+PSBoZXJlX29sZCkgewotCQkJLyogUmVhZGluZyBmcm9tIHRoZSBzYW1lIHN0cmlwZSBhcyB3cml0aW5nIHRvIC0gYmFkICovCi0JCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiByZXNoYXBlX3Bvc2l0aW9uIHRvbyBlYXJseSBmb3IgIgotCQkJICAgICAgICJhdXRvLXJlY292ZXJ5IC0gYWJvcnRpbmcuXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gInJhaWQ1OiByZXNoYXBlIHdpbGwgY29udGludWVcbiIpOwotCQkvKiBPSywgd2Ugc2hvdWxkIGJlIGFibGUgdG8gY29udGludWU7ICovCi0JfQotCi0KLQltZGRldi0+cHJpdmF0ZSA9IGt6YWxsb2Moc2l6ZW9mIChyYWlkNV9jb25mX3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoKGNvbmYgPSBtZGRldi0+cHJpdmF0ZSkgPT0gTlVMTCkKKwljb25mID0ga3phbGxvYyhzaXplb2YocmFpZDVfY29uZl90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNvbmYgPT0gTlVMTCkKIAkJZ290byBhYm9ydDsKLQlpZiAobWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPT0gTWF4U2VjdG9yKSB7Ci0JCWNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3M7Ci0JfSBlbHNlIHsKLQkJY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOworCisJY29uZi0+cmFpZF9kaXNrcyA9IG1kZGV2LT5yYWlkX2Rpc2tzOworCWlmIChtZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9PSBNYXhTZWN0b3IpCisJCWNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrczsKKwllbHNlCiAJCWNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgPSBtZGRldi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWx0YV9kaXNrczsKLQl9CiAKIAljb25mLT5kaXNrcyA9IGt6YWxsb2MoY29uZi0+cmFpZF9kaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza19pbmZvKSwKIAkJCSAgICAgIEdGUF9LRVJORUwpOwpAQCAtNDA4NiwxMyArNDM1NywxMiBAQAogCWlmICgoY29uZi0+c3RyaXBlX2hhc2h0YmwgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCiAJCWdvdG8gYWJvcnQ7CiAKLQlpZiAobWRkZXYtPmxldmVsID09IDYpIHsKKwlpZiAobWRkZXYtPm5ld19sZXZlbCA9PSA2KSB7CiAJCWNvbmYtPnNwYXJlX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOwogCQlpZiAoIWNvbmYtPnNwYXJlX3BhZ2UpCiAJCQlnb3RvIGFib3J0OwogCX0KIAlzcGluX2xvY2tfaW5pdCgmY29uZi0+ZGV2aWNlX2xvY2spOwotCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjb25mLT53YWl0X2Zvcl9zdHJpcGUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNvbmYtPndhaXRfZm9yX292ZXJsYXApOwogCUlOSVRfTElTVF9IRUFEKCZjb25mLT5oYW5kbGVfbGlzdCk7CkBAIC00MTIxLDQ3ICs0MzkxLDEzNCBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDU6IGRldmljZSAlcyBvcGVyYXRpb25hbCBhcyByYWlkIgogCQkJCSIgZGlzayAlZFxuIiwgYmRldm5hbWUocmRldi0+YmRldixiKSwKIAkJCQlyYWlkX2Rpc2spOwotCQkJd29ya2luZ19kaXNrcysrOwogCQl9IGVsc2UKIAkJCS8qIENhbm5vdCByZWx5IG9uIGJpdG1hcCB0byBjb21wbGV0ZSByZWNvdmVyeSAqLwogCQkJY29uZi0+ZnVsbHN5bmMgPSAxOwogCX0KIAotCS8qCi0JICogMCBmb3IgYSBmdWxseSBmdW5jdGlvbmFsIGFycmF5LCAxIG9yIDIgZm9yIGEgZGVncmFkZWQgYXJyYXkuCi0JICovCi0JbWRkZXYtPmRlZ3JhZGVkID0gY29uZi0+cmFpZF9kaXNrcyAtIHdvcmtpbmdfZGlza3M7Ci0JY29uZi0+bWRkZXYgPSBtZGRldjsKLQljb25mLT5jaHVua19zaXplID0gbWRkZXYtPmNodW5rX3NpemU7Ci0JY29uZi0+bGV2ZWwgPSBtZGRldi0+bGV2ZWw7CisJY29uZi0+Y2h1bmtfc2l6ZSA9IG1kZGV2LT5uZXdfY2h1bms7CisJY29uZi0+bGV2ZWwgPSBtZGRldi0+bmV3X2xldmVsOwogCWlmIChjb25mLT5sZXZlbCA9PSA2KQogCQljb25mLT5tYXhfZGVncmFkZWQgPSAyOwogCWVsc2UKIAkJY29uZi0+bWF4X2RlZ3JhZGVkID0gMTsKLQljb25mLT5hbGdvcml0aG0gPSBtZGRldi0+bGF5b3V0OworCWNvbmYtPmFsZ29yaXRobSA9IG1kZGV2LT5uZXdfbGF5b3V0OwogCWNvbmYtPm1heF9ucl9zdHJpcGVzID0gTlJfU1RSSVBFUzsKLQljb25mLT5leHBhbmRfcHJvZ3Jlc3MgPSBtZGRldi0+cmVzaGFwZV9wb3NpdGlvbjsKKwljb25mLT5yZXNoYXBlX3Byb2dyZXNzID0gbWRkZXYtPnJlc2hhcGVfcG9zaXRpb247CisJaWYgKGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3MgIT0gTWF4U2VjdG9yKSB7CisJCWNvbmYtPnByZXZfY2h1bmsgPSBtZGRldi0+Y2h1bmtfc2l6ZTsKKwkJY29uZi0+cHJldl9hbGdvID0gbWRkZXYtPmxheW91dDsKKwl9CiAKLQkvKiBkZXZpY2Ugc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgY2h1bmsgc2l6ZSAqLwotCW1kZGV2LT5zaXplICY9IH4obWRkZXYtPmNodW5rX3NpemUvMTAyNCAtMSk7Ci0JbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IG1kZGV2LT5zaXplIDw8IDE7CisJbWVtb3J5ID0gY29uZi0+bWF4X25yX3N0cmlwZXMgKiAoc2l6ZW9mKHN0cnVjdCBzdHJpcGVfaGVhZCkgKworCQkgY29uZi0+cmFpZF9kaXNrcyAqICgoc2l6ZW9mKHN0cnVjdCBiaW8pICsgUEFHRV9TSVpFKSkpIC8gMTAyNDsKKwlpZiAoZ3Jvd19zdHJpcGVzKGNvbmYsIGNvbmYtPm1heF9ucl9zdHJpcGVzKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJyYWlkNTogY291bGRuJ3QgYWxsb2NhdGUgJWRrQiBmb3IgYnVmZmVyc1xuIiwgbWVtb3J5KTsKKwkJZ290byBhYm9ydDsKKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmFpZDU6IGFsbG9jYXRlZCAlZGtCIGZvciAlc1xuIiwKKwkJCW1lbW9yeSwgbWRuYW1lKG1kZGV2KSk7CiAKLQlpZiAoY29uZi0+bGV2ZWwgPT0gNiAmJiBjb25mLT5yYWlkX2Rpc2tzIDwgNCkgewotCQlwcmludGsoS0VSTl9FUlIgInJhaWQ2OiBub3QgZW5vdWdoIGNvbmZpZ3VyZWQgZGV2aWNlcyBmb3IgJXMgKCVkLCBtaW5pbXVtIDQpXG4iLAotCQkgICAgICAgbWRuYW1lKG1kZGV2KSwgY29uZi0+cmFpZF9kaXNrcyk7CisJY29uZi0+dGhyZWFkID0gbWRfcmVnaXN0ZXJfdGhyZWFkKHJhaWQ1ZCwgbWRkZXYsICIlc19yYWlkNSIpOworCWlmICghY29uZi0+dGhyZWFkKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgInJhaWQ1OiBjb3VsZG4ndCBhbGxvY2F0ZSB0aHJlYWQgZm9yICVzXG4iLAorCQkgICAgICAgbWRuYW1lKG1kZGV2KSk7CiAJCWdvdG8gYWJvcnQ7CiAJfQotCWlmICghY29uZi0+Y2h1bmtfc2l6ZSB8fCBjb25mLT5jaHVua19zaXplICUgNCkgewotCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiBpbnZhbGlkIGNodW5rIHNpemUgJWQgZm9yICVzXG4iLAotCQkJY29uZi0+Y2h1bmtfc2l6ZSwgbWRuYW1lKG1kZGV2KSk7Ci0JCWdvdG8gYWJvcnQ7CisKKwlyZXR1cm4gY29uZjsKKworIGFib3J0OgorCWlmIChjb25mKSB7CisJCXNocmlua19zdHJpcGVzKGNvbmYpOworCQlzYWZlX3B1dF9wYWdlKGNvbmYtPnNwYXJlX3BhZ2UpOworCQlrZnJlZShjb25mLT5kaXNrcyk7CisJCWtmcmVlKGNvbmYtPnN0cmlwZV9oYXNodGJsKTsKKwkJa2ZyZWUoY29uZik7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0gZWxzZQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKK30KKworc3RhdGljIGludCBydW4obWRkZXZfdCAqbWRkZXYpCit7CisJcmFpZDVfY29uZl90ICpjb25mOworCWludCB3b3JraW5nX2Rpc2tzID0gMDsKKwltZGtfcmRldl90ICpyZGV2OworCisJaWYgKG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uICE9IE1heFNlY3RvcikgeworCQkvKiBDaGVjayB0aGF0IHdlIGNhbiBjb250aW51ZSB0aGUgcmVzaGFwZS4KKwkJICogQ3VycmVudGx5IG9ubHkgZGlza3MgY2FuIGNoYW5nZSwgaXQgbXVzdAorCQkgKiBpbmNyZWFzZSwgYW5kIHdlIG11c3QgYmUgcGFzdCB0aGUgcG9pbnQgd2hlcmUKKwkJICogYSBzdHJpcGUgb3Zlci13cml0ZXMgaXRzZWxmCisJCSAqLworCQlzZWN0b3JfdCBoZXJlX25ldywgaGVyZV9vbGQ7CisJCWludCBvbGRfZGlza3M7CisJCWludCBtYXhfZGVncmFkZWQgPSAobWRkZXYtPmxldmVsID09IDYgPyAyIDogMSk7CisKKwkJaWYgKG1kZGV2LT5uZXdfbGV2ZWwgIT0gbWRkZXYtPmxldmVsKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiAlczogdW5zdXBwb3J0ZWQgcmVzaGFwZSAiCisJCQkgICAgICAgInJlcXVpcmVkIC0gYWJvcnRpbmcuXG4iLAorCQkJICAgICAgIG1kbmFtZShtZGRldikpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJb2xkX2Rpc2tzID0gbWRkZXYtPnJhaWRfZGlza3MgLSBtZGRldi0+ZGVsdGFfZGlza3M7CisJCS8qIHJlc2hhcGVfcG9zaXRpb24gbXVzdCBiZSBvbiBhIG5ldy1zdHJpcGUgYm91bmRhcnksIGFuZCBvbmUKKwkJICogZnVydGhlciB1cCBpbiBuZXcgZ2VvbWV0cnkgbXVzdCBtYXAgYWZ0ZXIgaGVyZSBpbiBvbGQKKwkJICogZ2VvbWV0cnkuCisJCSAqLworCQloZXJlX25ldyA9IG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uOworCQlpZiAoc2VjdG9yX2RpdihoZXJlX25ldywgKG1kZGV2LT5uZXdfY2h1bms+PjkpKgorCQkJICAgICAgIChtZGRldi0+cmFpZF9kaXNrcyAtIG1heF9kZWdyYWRlZCkpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiByZXNoYXBlX3Bvc2l0aW9uIG5vdCAiCisJCQkgICAgICAgIm9uIGEgc3RyaXBlIGJvdW5kYXJ5XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCS8qIGhlcmVfbmV3IGlzIHRoZSBzdHJpcGUgd2Ugd2lsbCB3cml0ZSB0byAqLworCQloZXJlX29sZCA9IG1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uOworCQlzZWN0b3JfZGl2KGhlcmVfb2xkLCAobWRkZXYtPmNodW5rX3NpemU+PjkpKgorCQkJICAgKG9sZF9kaXNrcy1tYXhfZGVncmFkZWQpKTsKKwkJLyogaGVyZV9vbGQgaXMgdGhlIGZpcnN0IHN0cmlwZSB0aGF0IHdlIG1pZ2h0IG5lZWQgdG8gcmVhZAorCQkgKiBmcm9tICovCisJCWlmIChoZXJlX25ldyA+PSBoZXJlX29sZCkgeworCQkJLyogUmVhZGluZyBmcm9tIHRoZSBzYW1lIHN0cmlwZSBhcyB3cml0aW5nIHRvIC0gYmFkICovCisJCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiByZXNoYXBlX3Bvc2l0aW9uIHRvbyBlYXJseSBmb3IgIgorCQkJICAgICAgICJhdXRvLXJlY292ZXJ5IC0gYWJvcnRpbmcuXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXByaW50ayhLRVJOX0lORk8gInJhaWQ1OiByZXNoYXBlIHdpbGwgY29udGludWVcbiIpOworCQkvKiBPSywgd2Ugc2hvdWxkIGJlIGFibGUgdG8gY29udGludWU7ICovCisJfSBlbHNlIHsKKwkJQlVHX09OKG1kZGV2LT5sZXZlbCAhPSBtZGRldi0+bmV3X2xldmVsKTsKKwkJQlVHX09OKG1kZGV2LT5sYXlvdXQgIT0gbWRkZXYtPm5ld19sYXlvdXQpOworCQlCVUdfT04obWRkZXYtPmNodW5rX3NpemUgIT0gbWRkZXYtPm5ld19jaHVuayk7CisJCUJVR19PTihtZGRldi0+ZGVsdGFfZGlza3MgIT0gMCk7CiAJfQotCWlmIChjb25mLT5hbGdvcml0aG0gPiBBTEdPUklUSE1fUklHSFRfU1lNTUVUUklDKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAKLQkJCSJyYWlkNTogdW5zdXBwb3J0ZWQgcGFyaXR5IGFsZ29yaXRobSAlZCBmb3IgJXNcbiIsCi0JCQljb25mLT5hbGdvcml0aG0sIG1kbmFtZShtZGRldikpOwotCQlnb3RvIGFib3J0OwotCX0KKworCWlmIChtZGRldi0+cHJpdmF0ZSA9PSBOVUxMKQorCQljb25mID0gc2V0dXBfY29uZihtZGRldik7CisJZWxzZQorCQljb25mID0gbWRkZXYtPnByaXZhdGU7CisKKwlpZiAoSVNfRVJSKGNvbmYpKQorCQlyZXR1cm4gUFRSX0VSUihjb25mKTsKKworCW1kZGV2LT50aHJlYWQgPSBjb25mLT50aHJlYWQ7CisJY29uZi0+dGhyZWFkID0gTlVMTDsKKwltZGRldi0+cHJpdmF0ZSA9IGNvbmY7CisKKwkvKgorCSAqIDAgZm9yIGEgZnVsbHkgZnVuY3Rpb25hbCBhcnJheSwgMSBvciAyIGZvciBhIGRlZ3JhZGVkIGFycmF5LgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCisJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgorCQkgICAgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkKKwkJCXdvcmtpbmdfZGlza3MrKzsKKworCW1kZGV2LT5kZWdyYWRlZCA9IGNvbmYtPnJhaWRfZGlza3MgLSB3b3JraW5nX2Rpc2tzOworCiAJaWYgKG1kZGV2LT5kZWdyYWRlZCA+IGNvbmYtPm1heF9kZWdyYWRlZCkgewogCQlwcmludGsoS0VSTl9FUlIgInJhaWQ1OiBub3QgZW5vdWdoIG9wZXJhdGlvbmFsIGRldmljZXMgZm9yICVzIgogCQkJIiAoJWQvJWQgZmFpbGVkKVxuIiwKQEAgLTQxNjksNiArNDUyNiwxMCBAQAogCQlnb3RvIGFib3J0OwogCX0KIAorCS8qIGRldmljZSBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBjaHVuayBzaXplICovCisJbWRkZXYtPmRldl9zZWN0b3JzICY9IH4obWRkZXYtPmNodW5rX3NpemUgLyA1MTIgLSAxKTsKKwltZGRldi0+cmVzeW5jX21heF9zZWN0b3JzID0gbWRkZXYtPmRldl9zZWN0b3JzOworCiAJaWYgKG1kZGV2LT5kZWdyYWRlZCA+IDAgJiYKIAkgICAgbWRkZXYtPnJlY292ZXJ5X2NwICE9IE1heFNlY3RvcikgewogCQlpZiAobWRkZXYtPm9rX3N0YXJ0X2RlZ3JhZGVkKQpAQCAtNDE4NCw0MyArNDU0NSwyMiBAQAogCQl9CiAJfQogCi0JewotCQltZGRldi0+dGhyZWFkID0gbWRfcmVnaXN0ZXJfdGhyZWFkKHJhaWQ1ZCwgbWRkZXYsICIlc19yYWlkNSIpOwotCQlpZiAoIW1kZGV2LT50aHJlYWQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAKLQkJCQkicmFpZDU6IGNvdWxkbid0IGFsbG9jYXRlIHRocmVhZCBmb3IgJXNcbiIsCi0JCQkJbWRuYW1lKG1kZGV2KSk7Ci0JCQlnb3RvIGFib3J0OwotCQl9Ci0JfQotCW1lbW9yeSA9IGNvbmYtPm1heF9ucl9zdHJpcGVzICogKHNpemVvZihzdHJ1Y3Qgc3RyaXBlX2hlYWQpICsKLQkJIGNvbmYtPnJhaWRfZGlza3MgKiAoKHNpemVvZihzdHJ1Y3QgYmlvKSArIFBBR0VfU0laRSkpKSAvIDEwMjQ7Ci0JaWYgKGdyb3dfc3RyaXBlcyhjb25mLCBjb25mLT5tYXhfbnJfc3RyaXBlcykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIAotCQkJInJhaWQ1OiBjb3VsZG4ndCBhbGxvY2F0ZSAlZGtCIGZvciBidWZmZXJzXG4iLCBtZW1vcnkpOwotCQlzaHJpbmtfc3RyaXBlcyhjb25mKTsKLQkJbWRfdW5yZWdpc3Rlcl90aHJlYWQobWRkZXYtPnRocmVhZCk7Ci0JCWdvdG8gYWJvcnQ7Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0lORk8gInJhaWQ1OiBhbGxvY2F0ZWQgJWRrQiBmb3IgJXNcbiIsCi0JCQltZW1vcnksIG1kbmFtZShtZGRldikpOwotCiAJaWYgKG1kZGV2LT5kZWdyYWRlZCA9PSAwKQogCQlwcmludGsoInJhaWQ1OiByYWlkIGxldmVsICVkIHNldCAlcyBhY3RpdmUgd2l0aCAlZCBvdXQgb2YgJWQiCi0JCQkiIGRldmljZXMsIGFsZ29yaXRobSAlZFxuIiwgY29uZi0+bGV2ZWwsIG1kbmFtZShtZGRldiksIAotCQkJbWRkZXYtPnJhaWRfZGlza3MtbWRkZXYtPmRlZ3JhZGVkLCBtZGRldi0+cmFpZF9kaXNrcywKLQkJCWNvbmYtPmFsZ29yaXRobSk7CisJCSAgICAgICAiIGRldmljZXMsIGFsZ29yaXRobSAlZFxuIiwgY29uZi0+bGV2ZWwsIG1kbmFtZShtZGRldiksCisJCSAgICAgICBtZGRldi0+cmFpZF9kaXNrcy1tZGRldi0+ZGVncmFkZWQsIG1kZGV2LT5yYWlkX2Rpc2tzLAorCQkgICAgICAgbWRkZXYtPm5ld19sYXlvdXQpOwogCWVsc2UKIAkJcHJpbnRrKEtFUk5fQUxFUlQgInJhaWQ1OiByYWlkIGxldmVsICVkIHNldCAlcyBhY3RpdmUgd2l0aCAlZCIKIAkJCSIgb3V0IG9mICVkIGRldmljZXMsIGFsZ29yaXRobSAlZFxuIiwgY29uZi0+bGV2ZWwsCiAJCQltZG5hbWUobWRkZXYpLCBtZGRldi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWdyYWRlZCwKLQkJCW1kZGV2LT5yYWlkX2Rpc2tzLCBjb25mLT5hbGdvcml0aG0pOworCQkJbWRkZXYtPnJhaWRfZGlza3MsIG1kZGV2LT5uZXdfbGF5b3V0KTsKIAogCXByaW50X3JhaWQ1X2NvbmYoY29uZik7CiAKLQlpZiAoY29uZi0+ZXhwYW5kX3Byb2dyZXNzICE9IE1heFNlY3RvcikgeworCWlmIChjb25mLT5yZXNoYXBlX3Byb2dyZXNzICE9IE1heFNlY3RvcikgewogCQlwcmludGsoIi4uLm9rIHN0YXJ0IHJlc2hhcGUgdGhyZWFkXG4iKTsKLQkJY29uZi0+ZXhwYW5kX2xvID0gY29uZi0+ZXhwYW5kX3Byb2dyZXNzOworCQljb25mLT5yZXNoYXBlX3NhZmUgPSBjb25mLT5yZXNoYXBlX3Byb2dyZXNzOwogCQlhdG9taWNfc2V0KCZjb25mLT5yZXNoYXBlX3N0cmlwZXMsIDApOwogCQljbGVhcl9iaXQoTURfUkVDT1ZFUllfU1lOQywgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCWNsZWFyX2JpdChNRF9SRUNPVkVSWV9DSEVDSywgJm1kZGV2LT5yZWNvdmVyeSk7CkBAIC00MjQ3LDE4ICs0NTg3LDIyIEBACiAJCSAgICAgICAicmFpZDU6IGZhaWxlZCB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlcyBmb3IgJXNcbiIsCiAJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKIAorCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKKwogCW1kZGV2LT5xdWV1ZS0+dW5wbHVnX2ZuID0gcmFpZDVfdW5wbHVnX2RldmljZTsKIAltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2RhdGEgPSBtZGRldjsKIAltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gcmFpZDVfY29uZ2VzdGVkOwogCi0JbWRkZXYtPmFycmF5X3NlY3RvcnMgPSAyICogbWRkZXYtPnNpemUgKiAoY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcyAtCi0JCQkJCSAgICBjb25mLT5tYXhfZGVncmFkZWQpOworCW1kX3NldF9hcnJheV9zZWN0b3JzKG1kZGV2LCByYWlkNV9zaXplKG1kZGV2LCAwLCAwKSk7CiAKIAlibGtfcXVldWVfbWVyZ2VfYnZlYyhtZGRldi0+cXVldWUsIHJhaWQ1X21lcmdlYWJsZV9idmVjKTsKIAogCXJldHVybiAwOwogYWJvcnQ6CisJbWRfdW5yZWdpc3Rlcl90aHJlYWQobWRkZXYtPnRocmVhZCk7CisJbWRkZXYtPnRocmVhZCA9IE5VTEw7CiAJaWYgKGNvbmYpIHsKKwkJc2hyaW5rX3N0cmlwZXMoY29uZik7CiAJCXByaW50X3JhaWQ1X2NvbmYoY29uZik7CiAJCXNhZmVfcHV0X3BhZ2UoY29uZi0+c3BhcmVfcGFnZSk7CiAJCWtmcmVlKGNvbmYtPmRpc2tzKTsKQEAgLTQzOTYsNiArNDc0MCwxMCBAQAogCXByaW50X3JhaWQ1X2NvbmYoY29uZik7CiAJcmRldiA9IHAtPnJkZXY7CiAJaWYgKHJkZXYpIHsKKwkJaWYgKG51bWJlciA+PSBjb25mLT5yYWlkX2Rpc2tzICYmCisJCSAgICBjb25mLT5yZXNoYXBlX3Byb2dyZXNzID09IE1heFNlY3RvcikKKwkJCWNsZWFyX2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpOworCiAJCWlmICh0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpIHx8CiAJCSAgICBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZykpIHsKIAkJCWVyciA9IC1FQlVTWTsKQEAgLTQ0MDUsNyArNDc1Myw4IEBACiAJCSAqIGlzbid0IHBvc3NpYmxlLgogCQkgKi8KIAkJaWYgKCF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykgJiYKLQkJICAgIG1kZGV2LT5kZWdyYWRlZCA8PSBjb25mLT5tYXhfZGVncmFkZWQpIHsKKwkJICAgIG1kZGV2LT5kZWdyYWRlZCA8PSBjb25mLT5tYXhfZGVncmFkZWQgJiYKKwkJICAgIG51bWJlciA8IGNvbmYtPnJhaWRfZGlza3MpIHsKIAkJCWVyciA9IC1FQlVTWTsKIAkJCWdvdG8gYWJvcnQ7CiAJCX0KQEAgLTQ0NzIsMzYgKzQ4MjEsNDggQEAKIAkgKiBhbnkgaW8gaW4gdGhlIHJlbW92ZWQgc3BhY2UgY29tcGxldGVzLCBidXQgaXQgaGFyZGx5IHNlZW1zCiAJICogd29ydGggaXQuCiAJICovCi0JcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXZfdG9fY29uZihtZGRldik7Ci0KIAlzZWN0b3JzICY9IH4oKHNlY3Rvcl90KW1kZGV2LT5jaHVua19zaXplLzUxMiAtIDEpOwotCW1kZGV2LT5hcnJheV9zZWN0b3JzID0gc2VjdG9ycyAqIChtZGRldi0+cmFpZF9kaXNrcwotCQkJCQkgIC0gY29uZi0+bWF4X2RlZ3JhZGVkKTsKKwltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDVfc2l6ZShtZGRldiwgc2VjdG9ycywKKwkJCQkJICAgICAgIG1kZGV2LT5yYWlkX2Rpc2tzKSk7CisJaWYgKG1kZGV2LT5hcnJheV9zZWN0b3JzID4KKwkgICAgcmFpZDVfc2l6ZShtZGRldiwgc2VjdG9ycywgbWRkZXYtPnJhaWRfZGlza3MpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlzZXRfY2FwYWNpdHkobWRkZXYtPmdlbmRpc2ssIG1kZGV2LT5hcnJheV9zZWN0b3JzKTsKIAltZGRldi0+Y2hhbmdlZCA9IDE7Ci0JaWYgKHNlY3RvcnMvMiAgPiBtZGRldi0+c2l6ZSAmJiBtZGRldi0+cmVjb3ZlcnlfY3AgPT0gTWF4U2VjdG9yKSB7Ci0JCW1kZGV2LT5yZWNvdmVyeV9jcCA9IG1kZGV2LT5zaXplIDw8IDE7CisJaWYgKHNlY3RvcnMgPiBtZGRldi0+ZGV2X3NlY3RvcnMgJiYgbWRkZXYtPnJlY292ZXJ5X2NwID09IE1heFNlY3RvcikgeworCQltZGRldi0+cmVjb3ZlcnlfY3AgPSBtZGRldi0+ZGV2X3NlY3RvcnM7CiAJCXNldF9iaXQoTURfUkVDT1ZFUllfTkVFREVELCAmbWRkZXYtPnJlY292ZXJ5KTsKIAl9Ci0JbWRkZXYtPnNpemUgPSBzZWN0b3JzIC8yOworCW1kZGV2LT5kZXZfc2VjdG9ycyA9IHNlY3RvcnM7CiAJbWRkZXYtPnJlc3luY19tYXhfc2VjdG9ycyA9IHNlY3RvcnM7CiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfTURfUkFJRDVfUkVTSEFQRQogc3RhdGljIGludCByYWlkNV9jaGVja19yZXNoYXBlKG1kZGV2X3QgKm1kZGV2KQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwotCWludCBlcnI7CiAKLQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzIDwgMCB8fAotCSAgICBtZGRldi0+bmV3X2xldmVsICE9IG1kZGV2LT5sZXZlbCkKLQkJcmV0dXJuIC1FSU5WQUw7IC8qIENhbm5vdCBzaHJpbmsgYXJyYXkgb3IgY2hhbmdlIGxldmVsIHlldCAqLwotCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPT0gMCkKLQkJcmV0dXJuIDA7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID09IDAgJiYKKwkgICAgbWRkZXYtPm5ld19sYXlvdXQgPT0gbWRkZXYtPmxheW91dCAmJgorCSAgICBtZGRldi0+bmV3X2NodW5rID09IG1kZGV2LT5jaHVua19zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsgLyogbm90aGluZyB0byBkbyAqLwogCWlmIChtZGRldi0+Yml0bWFwKQogCQkvKiBDYW5ub3QgZ3JvdyBhIGJpdG1hcCB5ZXQgKi8KIAkJcmV0dXJuIC1FQlVTWTsKKwlpZiAobWRkZXYtPmRlZ3JhZGVkID4gY29uZi0+bWF4X2RlZ3JhZGVkKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzIDwgMCkgeworCQkvKiBXZSBtaWdodCBiZSBhYmxlIHRvIHNocmluaywgYnV0IHRoZSBkZXZpY2VzIG11c3QKKwkJICogYmUgbWFkZSBiaWdnZXIgZmlyc3QuCisJCSAqIEZvciByYWlkNiwgNCBpcyB0aGUgbWluaW11bSBzaXplLgorCQkgKiBPdGhlcndpc2UgMiBpcyB0aGUgbWluaW11bQorCQkgKi8KKwkJaW50IG1pbiA9IDI7CisJCWlmIChtZGRldi0+bGV2ZWwgPT0gNikKKwkJCW1pbiA9IDQ7CisJCWlmIChtZGRldi0+cmFpZF9kaXNrcyArIG1kZGV2LT5kZWx0YV9kaXNrcyA8IG1pbikKKwkJCXJldHVybiAtRUlOVkFMOworCX0KIAogCS8qIENhbiBvbmx5IHByb2NlZWQgaWYgdGhlcmUgYXJlIHBsZW50eSBvZiBzdHJpcGVfaGVhZHMuCiAJICogV2UgbmVlZCBhIG1pbmltdW0gb2Ygb25lIGZ1bGwgc3RyaXBlLCwgYW5kIGZvciBzZW5zaWJsZSBwcm9ncmVzcwpAQCAtNDUxNCwxOCArNDg3NSwxMiBAQAogCWlmICgobWRkZXYtPmNodW5rX3NpemUgLyBTVFJJUEVfU0laRSkgKiA0ID4gY29uZi0+bWF4X25yX3N0cmlwZXMgfHwKIAkgICAgKG1kZGV2LT5uZXdfY2h1bmsgLyBTVFJJUEVfU0laRSkgKiA0ID4gY29uZi0+bWF4X25yX3N0cmlwZXMpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicmFpZDU6IHJlc2hhcGU6IG5vdCBlbm91Z2ggc3RyaXBlcy4gIE5lZWRlZCAlbHVcbiIsCi0JCSAgICAgICAobWRkZXYtPmNodW5rX3NpemUgLyBTVFJJUEVfU0laRSkqNCk7CisJCSAgICAgICAobWF4KG1kZGV2LT5jaHVua19zaXplLCBtZGRldi0+bmV3X2NodW5rKQorCQkJLyBTVFJJUEVfU0laRSkqNCk7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAotCWVyciA9IHJlc2l6ZV9zdHJpcGVzKGNvbmYsIGNvbmYtPnJhaWRfZGlza3MgKyBtZGRldi0+ZGVsdGFfZGlza3MpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAobWRkZXYtPmRlZ3JhZGVkID4gY29uZi0+bWF4X2RlZ3JhZGVkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQkvKiBsb29rcyBsaWtlIHdlIG1pZ2h0IGJlIGFibGUgdG8gbWFuYWdlIHRoaXMgKi8KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVzaXplX3N0cmlwZXMoY29uZiwgY29uZi0+cmFpZF9kaXNrcyArIG1kZGV2LT5kZWx0YV9kaXNrcyk7CiB9CiAKIHN0YXRpYyBpbnQgcmFpZDVfc3RhcnRfcmVzaGFwZShtZGRldl90ICptZGRldikKQEAgLTQ1NTAsMTIgKzQ5MDUsMzEgQEAKIAkJICovCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogUmVmdXNlIHRvIHJlZHVjZSBzaXplIG9mIHRoZSBhcnJheS4gIEFueSByZWR1Y3Rpb25zIGluCisJICogYXJyYXkgc2l6ZSBtdXN0IGJlIHRocm91Z2ggZXhwbGljaXQgc2V0dGluZyBvZiBhcnJheV9zaXplCisJICogYXR0cmlidXRlLgorCSAqLworCWlmIChyYWlkNV9zaXplKG1kZGV2LCAwLCBjb25mLT5yYWlkX2Rpc2tzICsgbWRkZXYtPmRlbHRhX2Rpc2tzKQorCSAgICA8IG1kZGV2LT5hcnJheV9zZWN0b3JzKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWQ6ICVzOiBhcnJheSBzaXplIG11c3QgYmUgcmVkdWNlZCAiCisJCSAgICAgICAiYmVmb3JlIG51bWJlciBvZiBkaXNrc1xuIiwgbWRuYW1lKG1kZGV2KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWF0b21pY19zZXQoJmNvbmYtPnJlc2hhcGVfc3RyaXBlcywgMCk7CiAJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCWNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOwogCWNvbmYtPnJhaWRfZGlza3MgKz0gbWRkZXYtPmRlbHRhX2Rpc2tzOwotCWNvbmYtPmV4cGFuZF9wcm9ncmVzcyA9IDA7Ci0JY29uZi0+ZXhwYW5kX2xvID0gMDsKKwljb25mLT5wcmV2X2NodW5rID0gY29uZi0+Y2h1bmtfc2l6ZTsKKwljb25mLT5jaHVua19zaXplID0gbWRkZXYtPm5ld19jaHVuazsKKwljb25mLT5wcmV2X2FsZ28gPSBjb25mLT5hbGdvcml0aG07CisJY29uZi0+YWxnb3JpdGhtID0gbWRkZXYtPm5ld19sYXlvdXQ7CisJaWYgKG1kZGV2LT5kZWx0YV9kaXNrcyA8IDApCisJCWNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3MgPSByYWlkNV9zaXplKG1kZGV2LCAwLCAwKTsKKwllbHNlCisJCWNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3MgPSAwOworCWNvbmYtPnJlc2hhcGVfc2FmZSA9IGNvbmYtPnJlc2hhcGVfcHJvZ3Jlc3M7CisJY29uZi0+Z2VuZXJhdGlvbisrOwogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCiAJLyogQWRkIHNvbWUgbmV3IGRyaXZlcywgYXMgbWFueSBhcyB3aWxsIGZpdC4KQEAgLTQ1ODAsOSArNDk1NCwxMiBAQAogCQkJCWJyZWFrOwogCQl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKLQltZGRldi0+ZGVncmFkZWQgPSAoY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpIC0gYWRkZWRfZGV2aWNlczsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOworCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPiAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOworCQltZGRldi0+ZGVncmFkZWQgPSAoY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpCisJCQktIGFkZGVkX2RldmljZXM7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CisJfQogCW1kZGV2LT5yYWlkX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrczsKIAltZGRldi0+cmVzaGFwZV9wb3NpdGlvbiA9IDA7CiAJc2V0X2JpdChNRF9DSEFOR0VfREVWUywgJm1kZGV2LT5mbGFncyk7CkBAIC00NTk3LDUyICs0OTc0LDg2IEBACiAJCW1kZGV2LT5yZWNvdmVyeSA9IDA7CiAJCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJbWRkZXYtPnJhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzID0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrczsKLQkJY29uZi0+ZXhwYW5kX3Byb2dyZXNzID0gTWF4U2VjdG9yOworCQljb25mLT5yZXNoYXBlX3Byb2dyZXNzID0gTWF4U2VjdG9yOwogCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQorCWNvbmYtPnJlc2hhcGVfY2hlY2twb2ludCA9IGppZmZpZXM7CiAJbWRfd2FrZXVwX3RocmVhZChtZGRldi0+c3luY190aHJlYWQpOwogCW1kX25ld19ldmVudChtZGRldik7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAorLyogVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgcmVzaGFwZSB0aHJlYWQgYW5kIHNob3VsZCBtYWtlIGFueQorICogY2hhbmdlcyBuZWVkZWQgaW4gJ2NvbmYnCisgKi8KIHN0YXRpYyB2b2lkIGVuZF9yZXNoYXBlKHJhaWQ1X2NvbmZfdCAqY29uZikKIHsKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwogCiAJaWYgKCF0ZXN0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmY29uZi0+bWRkZXYtPnJlY292ZXJ5KSkgewotCQljb25mLT5tZGRldi0+YXJyYXlfc2VjdG9ycyA9IDIgKiBjb25mLT5tZGRldi0+c2l6ZSAqCi0JCQkoY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZCk7Ci0JCXNldF9jYXBhY2l0eShjb25mLT5tZGRldi0+Z2VuZGlzaywgY29uZi0+bWRkZXYtPmFycmF5X3NlY3RvcnMpOwotCQljb25mLT5tZGRldi0+Y2hhbmdlZCA9IDE7CiAKLQkJYmRldiA9IGJkZ2V0X2Rpc2soY29uZi0+bWRkZXYtPmdlbmRpc2ssIDApOwotCQlpZiAoYmRldikgewotCQkJbXV0ZXhfbG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOwotCQkJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLAotCQkJCSAgICAgKGxvZmZfdCljb25mLT5tZGRldi0+YXJyYXlfc2VjdG9ycyA8PCA5KTsKLQkJCW11dGV4X3VubG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOwotCQkJYmRwdXQoYmRldik7Ci0JCX0KIAkJc3Bpbl9sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwotCQljb25mLT5leHBhbmRfcHJvZ3Jlc3MgPSBNYXhTZWN0b3I7CisJCWNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgPSBjb25mLT5yYWlkX2Rpc2tzOworCQljb25mLT5yZXNoYXBlX3Byb2dyZXNzID0gTWF4U2VjdG9yOwogCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKLQkJY29uZi0+bWRkZXYtPnJlc2hhcGVfcG9zaXRpb24gPSBNYXhTZWN0b3I7CisJCXdha2VfdXAoJmNvbmYtPndhaXRfZm9yX292ZXJsYXApOwogCiAJCS8qIHJlYWQtYWhlYWQgc2l6ZSBtdXN0IGNvdmVyIHR3byB3aG9sZSBzdHJpcGVzLCB3aGljaCBpcwogCQkgKiAyICogKGRhdGFkaXNrcykgKiBjaHVua3NpemUgd2hlcmUgJ24nIGlzIHRoZSBudW1iZXIgb2YgcmFpZCBkZXZpY2VzCiAJCSAqLwogCQl7Ci0JCQlpbnQgZGF0YV9kaXNrcyA9IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MgLSBjb25mLT5tYXhfZGVncmFkZWQ7Ci0JCQlpbnQgc3RyaXBlID0gZGF0YV9kaXNrcyAqCi0JCQkJKGNvbmYtPm1kZGV2LT5jaHVua19zaXplIC8gUEFHRV9TSVpFKTsKKwkJCWludCBkYXRhX2Rpc2tzID0gY29uZi0+cmFpZF9kaXNrcyAtIGNvbmYtPm1heF9kZWdyYWRlZDsKKwkJCWludCBzdHJpcGUgPSBkYXRhX2Rpc2tzICogKGNvbmYtPmNodW5rX3NpemUKKwkJCQkJCSAgIC8gUEFHRV9TSVpFKTsKIAkJCWlmIChjb25mLT5tZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8ucmFfcGFnZXMgPCAyICogc3RyaXBlKQogCQkJCWNvbmYtPm1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5yYV9wYWdlcyA9IDIgKiBzdHJpcGU7CiAJCX0KIAl9CiB9CiAKKy8qIFRoaXMgaXMgY2FsbGVkIGZyb20gdGhlIHJhaWQ1ZCB0aHJlYWQgd2l0aCBtZGRldl9sb2NrIGhlbGQuCisgKiBJdCBtYWtlcyBjb25maWcgY2hhbmdlcyB0byB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgdm9pZCByYWlkNV9maW5pc2hfcmVzaGFwZShtZGRldl90ICptZGRldikKK3sKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OworCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOworCisJaWYgKCF0ZXN0X2JpdChNRF9SRUNPVkVSWV9JTlRSLCAmbWRkZXYtPnJlY292ZXJ5KSkgeworCisJCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPiAwKSB7CisJCQltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDVfc2l6ZShtZGRldiwgMCwgMCkpOworCQkJc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7CisJCQltZGRldi0+Y2hhbmdlZCA9IDE7CisKKwkJCWJkZXYgPSBiZGdldF9kaXNrKG1kZGV2LT5nZW5kaXNrLCAwKTsKKwkJCWlmIChiZGV2KSB7CisJCQkJbXV0ZXhfbG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOworCQkJCWlfc2l6ZV93cml0ZShiZGV2LT5iZF9pbm9kZSwKKwkJCQkJICAgICAobG9mZl90KW1kZGV2LT5hcnJheV9zZWN0b3JzIDw8IDkpOworCQkJCW11dGV4X3VubG9jaygmYmRldi0+YmRfaW5vZGUtPmlfbXV0ZXgpOworCQkJCWJkcHV0KGJkZXYpOworCQkJfQorCQl9IGVsc2UgeworCQkJaW50IGQ7CisJCQltZGRldi0+ZGVncmFkZWQgPSBjb25mLT5yYWlkX2Rpc2tzOworCQkJZm9yIChkID0gMDsgZCA8IGNvbmYtPnJhaWRfZGlza3MgOyBkKyspCisJCQkJaWYgKGNvbmYtPmRpc2tzW2RdLnJkZXYgJiYKKwkJCQkgICAgdGVzdF9iaXQoSW5fc3luYywKKwkJCQkJICAgICAmY29uZi0+ZGlza3NbZF0ucmRldi0+ZmxhZ3MpKQorCQkJCQltZGRldi0+ZGVncmFkZWQtLTsKKwkJCWZvciAoZCA9IGNvbmYtPnJhaWRfZGlza3MgOworCQkJICAgICBkIDwgY29uZi0+cmFpZF9kaXNrcyAtIG1kZGV2LT5kZWx0YV9kaXNrczsKKwkJCSAgICAgZCsrKQorCQkJCXJhaWQ1X3JlbW92ZV9kaXNrKG1kZGV2LCBkKTsKKwkJfQorCQltZGRldi0+bGF5b3V0ID0gY29uZi0+YWxnb3JpdGhtOworCQltZGRldi0+Y2h1bmtfc2l6ZSA9IGNvbmYtPmNodW5rX3NpemU7CisJCW1kZGV2LT5yZXNoYXBlX3Bvc2l0aW9uID0gTWF4U2VjdG9yOworCQltZGRldi0+ZGVsdGFfZGlza3MgPSAwOworCX0KK30KKwogc3RhdGljIHZvaWQgcmFpZDVfcXVpZXNjZShtZGRldl90ICptZGRldiwgaW50IHN0YXRlKQogewogCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOwpAQCAtNDY3Miw2ICs1MDgzLDIxMiBAQAogCX0KIH0KIAorCitzdGF0aWMgdm9pZCAqcmFpZDVfdGFrZW92ZXJfcmFpZDEobWRkZXZfdCAqbWRkZXYpCit7CisJaW50IGNodW5rc2VjdDsKKworCWlmIChtZGRldi0+cmFpZF9kaXNrcyAhPSAyIHx8CisJICAgIG1kZGV2LT5kZWdyYWRlZCA+IDEpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogU2hvdWxkIGNoZWNrIGlmIHRoZXJlIGFyZSB3cml0ZS1iZWhpbmQgZGV2aWNlcz8gKi8KKworCWNodW5rc2VjdCA9IDY0KjI7IC8qIDY0SyBieSBkZWZhdWx0ICovCisKKwkvKiBUaGUgYXJyYXkgbXVzdCBiZSBhbiBleGFjdCBtdWx0aXBsZSBvZiBjaHVua3NpemUgKi8KKwl3aGlsZSAoY2h1bmtzZWN0ICYmIChtZGRldi0+YXJyYXlfc2VjdG9ycyAmIChjaHVua3NlY3QtMSkpKQorCQljaHVua3NlY3QgPj49IDE7CisKKwlpZiAoKGNodW5rc2VjdDw8OSkgPCBTVFJJUEVfU0laRSkKKwkJLyogYXJyYXkgc2l6ZSBkb2VzIG5vdCBhbGxvdyBhIHN1aXRhYmxlIGNodW5rIHNpemUgKi8KKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwltZGRldi0+bmV3X2xldmVsID0gNTsKKwltZGRldi0+bmV3X2xheW91dCA9IEFMR09SSVRITV9MRUZUX1NZTU1FVFJJQzsKKwltZGRldi0+bmV3X2NodW5rID0gY2h1bmtzZWN0IDw8IDk7CisKKwlyZXR1cm4gc2V0dXBfY29uZihtZGRldik7Cit9CisKK3N0YXRpYyB2b2lkICpyYWlkNV90YWtlb3Zlcl9yYWlkNihtZGRldl90ICptZGRldikKK3sKKwlpbnQgbmV3X2xheW91dDsKKworCXN3aXRjaCAobWRkZXYtPmxheW91dCkgeworCWNhc2UgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQ182OgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQzsKKwkJYnJlYWs7CisJY2FzZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQ182OgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUM7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDXzY6CisJCW5ld19sYXlvdXQgPSBBTEdPUklUSE1fTEVGVF9TWU1NRVRSSUM7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQ182OgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQzsKKwkJYnJlYWs7CisJY2FzZSBBTEdPUklUSE1fUEFSSVRZXzBfNjoKKwkJbmV3X2xheW91dCA9IEFMR09SSVRITV9QQVJJVFlfMDsKKwkJYnJlYWs7CisJY2FzZSBBTEdPUklUSE1fUEFSSVRZX046CisJCW5ld19sYXlvdXQgPSBBTEdPUklUSE1fUEFSSVRZX047CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKwltZGRldi0+bmV3X2xldmVsID0gNTsKKwltZGRldi0+bmV3X2xheW91dCA9IG5ld19sYXlvdXQ7CisJbWRkZXYtPmRlbHRhX2Rpc2tzID0gLTE7CisJbWRkZXYtPnJhaWRfZGlza3MgLT0gMTsKKwlyZXR1cm4gc2V0dXBfY29uZihtZGRldik7Cit9CisKKworc3RhdGljIGludCByYWlkNV9yZWNvbmZpZyhtZGRldl90ICptZGRldiwgaW50IG5ld19sYXlvdXQsIGludCBuZXdfY2h1bmspCit7CisJLyogRm9yIGEgMi1kcml2ZSBhcnJheSwgdGhlIGxheW91dCBhbmQgY2h1bmsgc2l6ZSBjYW4gYmUgY2hhbmdlZAorCSAqIGltbWVkaWF0ZWx5IGFzIG5vdCByZXN0cmlwaW5nIGlzIG5lZWRlZC4KKwkgKiBGb3IgbGFyZ2VyIGFycmF5cyB3ZSByZWNvcmQgdGhlIG5ldyB2YWx1ZSAtIGFmdGVyIHZhbGlkYXRpb24KKwkgKiB0byBiZSB1c2VkIGJ5IGEgcmVzaGFwZSBwYXNzLgorCSAqLworCXJhaWQ1X2NvbmZfdCAqY29uZiA9IG1kZGV2X3RvX2NvbmYobWRkZXYpOworCisJaWYgKG5ld19sYXlvdXQgPj0gMCAmJiAhYWxnb3JpdGhtX3ZhbGlkX3JhaWQ1KG5ld19sYXlvdXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobmV3X2NodW5rID4gMCkgeworCQlpZiAobmV3X2NodW5rICYgKG5ld19jaHVuay0xKSkKKwkJCS8qIG5vdCBhIHBvd2VyIG9mIDIgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAobmV3X2NodW5rIDwgUEFHRV9TSVpFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChtZGRldi0+YXJyYXlfc2VjdG9ycyAmICgobmV3X2NodW5rPj45KS0xKSkKKwkJCS8qIG5vdCBmYWN0b3Igb2YgYXJyYXkgc2l6ZSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVGhleSBsb29rIHZhbGlkICovCisKKwlpZiAobWRkZXYtPnJhaWRfZGlza3MgPT0gMikgeworCisJCWlmIChuZXdfbGF5b3V0ID49IDApIHsKKwkJCWNvbmYtPmFsZ29yaXRobSA9IG5ld19sYXlvdXQ7CisJCQltZGRldi0+bGF5b3V0ID0gbWRkZXYtPm5ld19sYXlvdXQgPSBuZXdfbGF5b3V0OworCQl9CisJCWlmIChuZXdfY2h1bmsgPiAwKSB7CisJCQljb25mLT5jaHVua19zaXplID0gbmV3X2NodW5rOworCQkJbWRkZXYtPmNodW5rX3NpemUgPSBtZGRldi0+bmV3X2NodW5rID0gbmV3X2NodW5rOworCQl9CisJCXNldF9iaXQoTURfQ0hBTkdFX0RFVlMsICZtZGRldi0+ZmxhZ3MpOworCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOworCX0gZWxzZSB7CisJCWlmIChuZXdfbGF5b3V0ID49IDApCisJCQltZGRldi0+bmV3X2xheW91dCA9IG5ld19sYXlvdXQ7CisJCWlmIChuZXdfY2h1bmsgPiAwKQorCQkJbWRkZXYtPm5ld19jaHVuayA9IG5ld19jaHVuazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmFpZDZfcmVjb25maWcobWRkZXZfdCAqbWRkZXYsIGludCBuZXdfbGF5b3V0LCBpbnQgbmV3X2NodW5rKQoreworCWlmIChuZXdfbGF5b3V0ID49IDAgJiYgIWFsZ29yaXRobV92YWxpZF9yYWlkNihuZXdfbGF5b3V0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG5ld19jaHVuayA+IDApIHsKKwkJaWYgKG5ld19jaHVuayAmIChuZXdfY2h1bmstMSkpCisJCQkvKiBub3QgYSBwb3dlciBvZiAyICovCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG5ld19jaHVuayA8IFBBR0VfU0laRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAobWRkZXYtPmFycmF5X3NlY3RvcnMgJiAoKG5ld19jaHVuaz4+OSktMSkpCisJCQkvKiBub3QgZmFjdG9yIG9mIGFycmF5IHNpemUgKi8KKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFRoZXkgbG9vayB2YWxpZCAqLworCisJaWYgKG5ld19sYXlvdXQgPj0gMCkKKwkJbWRkZXYtPm5ld19sYXlvdXQgPSBuZXdfbGF5b3V0OworCWlmIChuZXdfY2h1bmsgPiAwKQorCQltZGRldi0+bmV3X2NodW5rID0gbmV3X2NodW5rOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpyYWlkNV90YWtlb3ZlcihtZGRldl90ICptZGRldikKK3sKKwkvKiByYWlkNSBjYW4gdGFrZSBvdmVyOgorCSAqICByYWlkMCAtIGlmIGFsbCBkZXZpY2VzIGFyZSB0aGUgc2FtZSAtIG1ha2UgaXQgYSByYWlkNCBsYXlvdXQKKwkgKiAgcmFpZDEgLSBpZiB0aGVyZSBhcmUgdHdvIGRyaXZlcy4gIFdlIG5lZWQgdG8ga25vdyB0aGUgY2h1bmsgc2l6ZQorCSAqICByYWlkNCAtIHRyaXZpYWwgLSBqdXN0IHVzZSBhIHJhaWQ0IGxheW91dC4KKwkgKiAgcmFpZDYgLSBQcm92aWRpbmcgaXQgaXMgYSAqXzYgbGF5b3V0CisJICoKKwkgKiBGb3Igbm93LCBqdXN0IGRvIHJhaWQxCisJICovCisKKwlpZiAobWRkZXYtPmxldmVsID09IDEpCisJCXJldHVybiByYWlkNV90YWtlb3Zlcl9yYWlkMShtZGRldik7CisJaWYgKG1kZGV2LT5sZXZlbCA9PSA0KSB7CisJCW1kZGV2LT5uZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1BBUklUWV9OOworCQltZGRldi0+bmV3X2xldmVsID0gNTsKKwkJcmV0dXJuIHNldHVwX2NvbmYobWRkZXYpOworCX0KKwlpZiAobWRkZXYtPmxldmVsID09IDYpCisJCXJldHVybiByYWlkNV90YWtlb3Zlcl9yYWlkNihtZGRldik7CisKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKworCitzdGF0aWMgc3RydWN0IG1ka19wZXJzb25hbGl0eSByYWlkNV9wZXJzb25hbGl0eTsKKworc3RhdGljIHZvaWQgKnJhaWQ2X3Rha2VvdmVyKG1kZGV2X3QgKm1kZGV2KQoreworCS8qIEN1cnJlbnRseSBjYW4gb25seSB0YWtlIG92ZXIgYSByYWlkNS4gIFdlIG1hcCB0aGUKKwkgKiBwZXJzb25hbGl0eSB0byBhbiBlcXVpdmFsZW50IHJhaWQ2IHBlcnNvbmFsaXR5CisJICogd2l0aCB0aGUgUSBibG9jayBhdCB0aGUgZW5kLgorCSAqLworCWludCBuZXdfbGF5b3V0OworCisJaWYgKG1kZGV2LT5wZXJzICE9ICZyYWlkNV9wZXJzb25hbGl0eSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKG1kZGV2LT5kZWdyYWRlZCA+IDEpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWlmIChtZGRldi0+cmFpZF9kaXNrcyA+IDI1MykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKG1kZGV2LT5yYWlkX2Rpc2tzIDwgMykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlzd2l0Y2ggKG1kZGV2LT5sYXlvdXQpIHsKKwljYXNlIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUM6CisJCW5ld19sYXlvdXQgPSBBTEdPUklUSE1fTEVGVF9BU1lNTUVUUklDXzY7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX1JJR0hUX0FTWU1NRVRSSUM6CisJCW5ld19sYXlvdXQgPSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQ182OworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9MRUZUX1NZTU1FVFJJQzoKKwkJbmV3X2xheW91dCA9IEFMR09SSVRITV9MRUZUX1NZTU1FVFJJQ182OworCQlicmVhazsKKwljYXNlIEFMR09SSVRITV9SSUdIVF9TWU1NRVRSSUM6CisJCW5ld19sYXlvdXQgPSBBTEdPUklUSE1fUklHSFRfU1lNTUVUUklDXzY7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX1BBUklUWV8wOgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1BBUklUWV8wXzY7CisJCWJyZWFrOworCWNhc2UgQUxHT1JJVEhNX1BBUklUWV9OOgorCQluZXdfbGF5b3V0ID0gQUxHT1JJVEhNX1BBUklUWV9OOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisJbWRkZXYtPm5ld19sZXZlbCA9IDY7CisJbWRkZXYtPm5ld19sYXlvdXQgPSBuZXdfbGF5b3V0OworCW1kZGV2LT5kZWx0YV9kaXNrcyA9IDE7CisJbWRkZXYtPnJhaWRfZGlza3MgKz0gMTsKKwlyZXR1cm4gc2V0dXBfY29uZihtZGRldik7Cit9CisKKwogc3RhdGljIHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgcmFpZDZfcGVyc29uYWxpdHkgPQogewogCS5uYW1lCQk9ICJyYWlkNiIsCkBAIC00Njg3LDExICs1MzA0LDEzIEBACiAJLnNwYXJlX2FjdGl2ZQk9IHJhaWQ1X3NwYXJlX2FjdGl2ZSwKIAkuc3luY19yZXF1ZXN0CT0gc3luY19yZXF1ZXN0LAogCS5yZXNpemUJCT0gcmFpZDVfcmVzaXplLAotI2lmZGVmIENPTkZJR19NRF9SQUlENV9SRVNIQVBFCisJLnNpemUJCT0gcmFpZDVfc2l6ZSwKIAkuY2hlY2tfcmVzaGFwZQk9IHJhaWQ1X2NoZWNrX3Jlc2hhcGUsCiAJLnN0YXJ0X3Jlc2hhcGUgID0gcmFpZDVfc3RhcnRfcmVzaGFwZSwKLSNlbmRpZgorCS5maW5pc2hfcmVzaGFwZSA9IHJhaWQ1X2ZpbmlzaF9yZXNoYXBlLAogCS5xdWllc2NlCT0gcmFpZDVfcXVpZXNjZSwKKwkudGFrZW92ZXIJPSByYWlkNl90YWtlb3ZlciwKKwkucmVjb25maWcJPSByYWlkNl9yZWNvbmZpZywKIH07CiBzdGF0aWMgc3RydWN0IG1ka19wZXJzb25hbGl0eSByYWlkNV9wZXJzb25hbGl0eSA9CiB7CkBAIC00NzA4LDExICs1MzI3LDEzIEBACiAJLnNwYXJlX2FjdGl2ZQk9IHJhaWQ1X3NwYXJlX2FjdGl2ZSwKIAkuc3luY19yZXF1ZXN0CT0gc3luY19yZXF1ZXN0LAogCS5yZXNpemUJCT0gcmFpZDVfcmVzaXplLAotI2lmZGVmIENPTkZJR19NRF9SQUlENV9SRVNIQVBFCisJLnNpemUJCT0gcmFpZDVfc2l6ZSwKIAkuY2hlY2tfcmVzaGFwZQk9IHJhaWQ1X2NoZWNrX3Jlc2hhcGUsCiAJLnN0YXJ0X3Jlc2hhcGUgID0gcmFpZDVfc3RhcnRfcmVzaGFwZSwKLSNlbmRpZgorCS5maW5pc2hfcmVzaGFwZSA9IHJhaWQ1X2ZpbmlzaF9yZXNoYXBlLAogCS5xdWllc2NlCT0gcmFpZDVfcXVpZXNjZSwKKwkudGFrZW92ZXIJPSByYWlkNV90YWtlb3ZlciwKKwkucmVjb25maWcJPSByYWlkNV9yZWNvbmZpZywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5IHJhaWQ0X3BlcnNvbmFsaXR5ID0KQEAgLTQ3MzAsMjAgKzUzNTEsMTUgQEAKIAkuc3BhcmVfYWN0aXZlCT0gcmFpZDVfc3BhcmVfYWN0aXZlLAogCS5zeW5jX3JlcXVlc3QJPSBzeW5jX3JlcXVlc3QsCiAJLnJlc2l6ZQkJPSByYWlkNV9yZXNpemUsCi0jaWZkZWYgQ09ORklHX01EX1JBSUQ1X1JFU0hBUEUKKwkuc2l6ZQkJPSByYWlkNV9zaXplLAogCS5jaGVja19yZXNoYXBlCT0gcmFpZDVfY2hlY2tfcmVzaGFwZSwKIAkuc3RhcnRfcmVzaGFwZSAgPSByYWlkNV9zdGFydF9yZXNoYXBlLAotI2VuZGlmCisJLmZpbmlzaF9yZXNoYXBlID0gcmFpZDVfZmluaXNoX3Jlc2hhcGUsCiAJLnF1aWVzY2UJPSByYWlkNV9xdWllc2NlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcmFpZDVfaW5pdCh2b2lkKQogewotCWludCBlOwotCi0JZSA9IHJhaWQ2X3NlbGVjdF9hbGdvKCk7Ci0JaWYgKCBlICkKLQkJcmV0dXJuIGU7CiAJcmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoJnJhaWQ2X3BlcnNvbmFsaXR5KTsKIAlyZWdpc3Rlcl9tZF9wZXJzb25hbGl0eSgmcmFpZDVfcGVyc29uYWxpdHkpOwogCXJlZ2lzdGVyX21kX3BlcnNvbmFsaXR5KCZyYWlkNF9wZXJzb25hbGl0eSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmggYi9kcml2ZXJzL21kL3JhaWQ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJiYTk5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuaApAQCAtMCwwICsxLDQ3NCBAQAorI2lmbmRlZiBfUkFJRDVfSAorI2RlZmluZSBfUkFJRDVfSAorCisjaW5jbHVkZSA8bGludXgvcmFpZC94b3IuaD4KKworLyoKKyAqCisgKiBFYWNoIHN0cmlwZSBjb250YWlucyBvbmUgYnVmZmVyIHBlciBkaXNjLiAgRWFjaCBidWZmZXIgY2FuIGJlIGluCisgKiBvbmUgb2YgYSBudW1iZXIgb2Ygc3RhdGVzIHN0b3JlZCBpbiAiZmxhZ3MiLiAgQ2hhbmdlcyBiZXR3ZWVuCisgKiB0aGVzZSBzdGF0ZXMgaGFwcGVuICphbG1vc3QqIGV4Y2x1c2l2ZWx5IHVuZGVyIGEgcGVyLXN0cmlwZQorICogc3BpbmxvY2suICBTb21lIHZlcnkgc3BlY2lmaWMgY2hhbmdlcyBjYW4gaGFwcGVuIGluIGJpX2VuZF9pbywgYW5kCisgKiB0aGVzZSBhcmUgbm90IHByb3RlY3RlZCBieSB0aGUgc3BpbiBsb2NrLgorICoKKyAqIFRoZSBmbGFnIGJpdHMgdGhhdCBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlc2Ugc3RhdGVzIGFyZToKKyAqICAgUjVfVVBUT0RBVEUgYW5kIFI1X0xPQ0tFRAorICoKKyAqIFN0YXRlIEVtcHR5ID09ICFVUFRPREFURSwgIUxPQ0sKKyAqICAgICAgICBXZSBoYXZlIG5vIGRhdGEsIGFuZCB0aGVyZSBpcyBubyBhY3RpdmUgcmVxdWVzdAorICogU3RhdGUgV2FudCA9PSAhVVBUT0RBVEUsIExPQ0sKKyAqICAgICAgICBBIHJlYWQgcmVxdWVzdCBpcyBiZWluZyBzdWJtaXR0ZWQgZm9yIHRoaXMgYmxvY2sKKyAqIFN0YXRlIERpcnR5ID09IFVQVE9EQVRFLCBMT0NLCisgKiAgICAgICAgU29tZSBuZXcgZGF0YSBpcyBpbiB0aGlzIGJ1ZmZlciwgYW5kIGl0IGlzIGJlaW5nIHdyaXR0ZW4gb3V0CisgKiBTdGF0ZSBDbGVhbiA9PSBVUFRPREFURSwgIUxPQ0sKKyAqICAgICAgICBXZSBoYXZlIHZhbGlkIGRhdGEgd2hpY2ggaXMgdGhlIHNhbWUgYXMgb24gZGlzYworICoKKyAqIFRoZSBwb3NzaWJsZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmU6CisgKgorICogIEVtcHR5IC0+IFdhbnQgICAtIG9uIHJlYWQgb3Igd3JpdGUgdG8gZ2V0IG9sZCBkYXRhIGZvciAgcGFyaXR5IGNhbGMKKyAqICBFbXB0eSAtPiBEaXJ0eSAgLSBvbiBjb21wdXRlX3Bhcml0eSB0byBzYXRpc2Z5IHdyaXRlL3N5bmMgcmVxdWVzdC4oUkVDT05TVFJVQ1RfV1JJVEUpCisgKiAgRW1wdHkgLT4gQ2xlYW4gIC0gb24gY29tcHV0ZV9ibG9jayB3aGVuIGNvbXB1dGluZyBhIGJsb2NrIGZvciBmYWlsZWQgZHJpdmUKKyAqICBXYW50ICAtPiBFbXB0eSAgLSBvbiBmYWlsZWQgcmVhZAorICogIFdhbnQgIC0+IENsZWFuICAtIG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiByZWFkIHJlcXVlc3QKKyAqICBEaXJ0eSAtPiBDbGVhbiAgLSBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2Ygd3JpdGUgcmVxdWVzdAorICogIERpcnR5IC0+IENsZWFuICAtIG9uIGZhaWxlZCB3cml0ZQorICogIENsZWFuIC0+IERpcnR5ICAtIG9uIGNvbXB1dGVfcGFyaXR5IHRvIHNhdGlzZnkgd3JpdGUvc3luYyAoUkVDT05TVFJVQ1Qgb3IgUk1XKQorICoKKyAqIFRoZSBXYW50LT5FbXB0eSwgV2FudC0+Q2xlYW4sIERpcnR5LT5DbGVhbiwgdHJhbnNpdGlvbnMKKyAqIGFsbCBoYXBwZW4gaW4gYl9lbmRfaW8gYXQgaW50ZXJydXB0IHRpbWUuCisgKiBFYWNoIHNldHMgdGhlIFVwdG9kYXRlIGJpdCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBMb2NrIGJpdC4KKyAqIFRoaXMgbGVhdmVzIG9uZSBtdWx0aS1zdGFnZSB0cmFuc2l0aW9uOgorICogICAgV2FudC0+RGlydHktPkNsZWFuCisgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSB0aGlua2luZyB0aGF0IGEgQ2xlYW4gYnVmZmVyIGlzIGFjdHVhbGx5IGRpcnR5CisgKiB3aWxsIGF0IHdvcnN0IGRlbGF5IHNvbWUgYWN0aW9uLCBhbmQgdGhlIHN0cmlwZSB3aWxsIGJlIHNjaGVkdWxlZAorICogZm9yIGF0dGVudGlvbiBhZnRlciB0aGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS4KKyAqCisgKiBUaGVyZSBpcyBvbmUgcG9zc2liaWxpdHkgdGhhdCBpcyBub3QgY292ZXJlZCBieSB0aGVzZSBzdGF0ZXMuICBUaGF0CisgKiBpcyBpZiBvbmUgZHJpdmUgaGFzIGZhaWxlZCBhbmQgdGhlcmUgaXMgYSBzcGFyZSBiZWluZyByZWJ1aWx0LiAgV2UKKyAqIGNhbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBjbGVhbiBibG9jayB0aGF0IGhhcyBiZWVuIGdlbmVyYXRlZAorICogZnJvbSBwYXJpdHkgY2FsY3VsYXRpb25zLCBhbmQgYSBjbGVhbiBibG9jayB0aGF0IGhhcyBiZWVuCisgKiBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byB0aGUgc3BhcmUgKCBvciB0byBwYXJpdHkgd2hlbiByZXN5bmNpbmcpLgorICogVG8gZGlzdGluZ3VzaCB0aGVzZSBzdGF0ZXMgd2UgaGF2ZSBhIHN0cmlwZSBiaXQgU1RSSVBFX0lOU1lOQyB0aGF0CisgKiBpcyBzZXQgd2hlbmV2ZXIgYSB3cml0ZSBpcyBzY2hlZHVsZWQgdG8gdGhlIHNwYXJlLCBvciB0byB0aGUgcGFyaXR5CisgKiBkaXNjIGlmIHRoZXJlIGlzIG5vIHNwYXJlLiAgQSBzeW5jIHJlcXVlc3QgY2xlYXJzIHRoaXMgYml0LCBhbmQKKyAqIHdoZW4gd2UgZmluZCBpdCBzZXQgd2l0aCBubyBidWZmZXJzIGxvY2tlZCwgd2Uga25vdyB0aGUgc3luYyBpcworICogY29tcGxldGUuCisgKgorICogQnVmZmVycyBmb3IgdGhlIG1kIGRldmljZSB0aGF0IGFycml2ZSB2aWEgbWFrZV9yZXF1ZXN0IGFyZSBhdHRhY2hlZAorICogdG8gdGhlIGFwcHJvcHJpYXRlIHN0cmlwZSBpbiBvbmUgb2YgdHdvIGxpc3RzIGxpbmtlZCBvbiBiX3JlcW5leHQuCisgKiBPbmUgbGlzdCAoYmhfcmVhZCkgZm9yIHJlYWQgcmVxdWVzdHMsIG9uZSAoYmhfd3JpdGUpIGZvciB3cml0ZS4KKyAqIFRoZXJlIHNob3VsZCBuZXZlciBiZSBtb3JlIHRoYW4gb25lIGJ1ZmZlciBvbiB0aGUgdHdvIGxpc3RzCisgKiB0b2dldGhlciwgYnV0IHdlIGFyZSBub3QgZ3VhcmFudGVlZCBvZiB0aGF0IHNvIHdlIGFsbG93IGZvciBtb3JlLgorICoKKyAqIElmIGEgYnVmZmVyIGlzIG9uIHRoZSByZWFkIGxpc3Qgd2hlbiB0aGUgYXNzb2NpYXRlZCBjYWNoZSBidWZmZXIgaXMKKyAqIFVwdG9kYXRlLCB0aGUgZGF0YSBpcyBjb3BpZWQgaW50byB0aGUgcmVhZCBidWZmZXIgYW5kIGl0J3MgYl9lbmRfaW8KKyAqIHJvdXRpbmUgaXMgY2FsbGVkLiAgVGhpcyBtYXkgaGFwcGVuIGluIHRoZSBlbmRfcmVxdWVzdCByb3V0aW5lIG9ubHkKKyAqIGlmIHRoZSBidWZmZXIgaGFzIGp1c3Qgc3VjY2Vzc2Z1bGx5IGJlZW4gcmVhZC4gIGVuZF9yZXF1ZXN0IHNob3VsZAorICogcmVtb3ZlIHRoZSBidWZmZXJzIGZyb20gdGhlIGxpc3QgYW5kIHRoZW4gc2V0IHRoZSBVcHRvZGF0ZSBiaXQgb24KKyAqIHRoZSBidWZmZXIuICBPdGhlciB0aHJlYWRzIG1heSBkbyB0aGlzIG9ubHkgaWYgdGhleSBmaXJzdCBjaGVjaworICogdGhhdCB0aGUgVXB0b2RhdGUgYml0IGlzIHNldC4gIE9uY2UgdGhleSBoYXZlIGNoZWNrZWQgdGhhdCB0aGV5IG1heQorICogdGFrZSBidWZmZXJzIG9mZiB0aGUgcmVhZCBxdWV1ZS4KKyAqCisgKiBXaGVuIGEgYnVmZmVyIG9uIHRoZSB3cml0ZSBsaXN0IGlzIGNvbW1pdHRlZCBmb3Igd3JpdGUgaXQgaXMgY29waWVkCisgKiBpbnRvIHRoZSBjYWNoZSBidWZmZXIsIHdoaWNoIGlzIHRoZW4gbWFya2VkIGRpcnR5LCBhbmQgbW92ZWQgb250byBhCisgKiB0aGlyZCBsaXN0LCB0aGUgd3JpdHRlbiBsaXN0IChiaF93cml0dGVuKS4gIE9uY2UgYm90aCB0aGUgcGFyaXR5CisgKiBibG9jayBhbmQgdGhlIGNhY2hlZCBidWZmZXIgYXJlIHN1Y2Nlc3NmdWxseSB3cml0dGVuLCBhbnkgYnVmZmVyIG9uCisgKiBhIHdyaXR0ZW4gbGlzdCBjYW4gYmUgcmV0dXJuZWQgd2l0aCBiX2VuZF9pby4KKyAqCisgKiBUaGUgd3JpdGUgbGlzdCBhbmQgcmVhZCBsaXN0IGJvdGggYWN0IGFzIGZpZm9zLiAgVGhlIHJlYWQgbGlzdCBpcworICogcHJvdGVjdGVkIGJ5IHRoZSBkZXZpY2VfbG9jay4gIFRoZSB3cml0ZSBhbmQgd3JpdHRlbiBsaXN0cyBhcmUKKyAqIHByb3RlY3RlZCBieSB0aGUgc3RyaXBlIGxvY2suICBUaGUgZGV2aWNlX2xvY2ssIHdoaWNoIGNhbiBiZQorICogY2xhaW1lZCB3aGlsZSB0aGUgc3RpcGUgbG9jayBpcyBoZWxkLCBpcyBvbmx5IGZvciBsaXN0CisgKiBtYW5pcHVsYXRpb25zIGFuZCB3aWxsIG9ubHkgYmUgaGVsZCBmb3IgYSB2ZXJ5IHNob3J0IHRpbWUuICBJdCBjYW4KKyAqIGJlIGNsYWltZWQgZnJvbSBpbnRlcnJ1cHRzLgorICoKKyAqCisgKiBTdHJpcGVzIGluIHRoZSBzdHJpcGUgY2FjaGUgY2FuIGJlIG9uIG9uZSBvZiB0d28gbGlzdHMgKG9yIG9uCisgKiBuZWl0aGVyKS4gIFRoZSAiaW5hY3RpdmVfbGlzdCIgY29udGFpbnMgc3RyaXBlcyB3aGljaCBhcmUgbm90CisgKiBjdXJyZW50bHkgYmVpbmcgdXNlZCBmb3IgYW55IHJlcXVlc3QuICBUaGV5IGNhbiBmcmVlbHkgYmUgcmV1c2VkCisgKiBmb3IgYW5vdGhlciBzdHJpcGUuICBUaGUgImhhbmRsZV9saXN0IiBjb250YWlucyBzdHJpcGVzIHRoYXQgbmVlZAorICogdG8gYmUgaGFuZGxlZCBpbiBzb21lIHdheS4gIEJvdGggb2YgdGhlc2UgYXJlIGZpZm8gcXVldWVzLiAgRWFjaAorICogc3RyaXBlIGlzIGFsc28gKHBvdGVudGlhbGx5KSBsaW5rZWQgdG8gYSBoYXNoIGJ1Y2tldCBpbiB0aGUgaGFzaAorICogdGFibGUgc28gdGhhdCBpdCBjYW4gYmUgZm91bmQgYnkgc2VjdG9yIG51bWJlci4gIFN0cmlwZXMgdGhhdCBhcmUKKyAqIG5vdCBoYXNoZWQgbXVzdCBiZSBvbiB0aGUgaW5hY3RpdmVfbGlzdCwgYW5kIHdpbGwgbm9ybWFsbHkgYmUgYXQKKyAqIHRoZSBmcm9udC4gIEFsbCBzdHJpcGVzIHN0YXJ0IGxpZmUgdGhpcyB3YXkuCisgKgorICogVGhlIGluYWN0aXZlX2xpc3QsIGhhbmRsZV9saXN0IGFuZCBoYXNoIGJ1Y2tldCBsaXN0cyBhcmUgYWxsIHByb3RlY3RlZCBieSB0aGUKKyAqIGRldmljZV9sb2NrLgorICogIC0gc3RyaXBlcyBvbiB0aGUgaW5hY3RpdmVfbGlzdCBuZXZlciBoYXZlIHRoZWlyIHN0cmlwZV9sb2NrIGhlbGQuCisgKiAgLSBzdHJpcGVzIGhhdmUgYSByZWZlcmVuY2UgY291bnRlci4gSWYgY291bnQ9PTAsIHRoZXkgYXJlIG9uIGEgbGlzdC4KKyAqICAtIElmIGEgc3RyaXBlIG1pZ2h0IG5lZWQgaGFuZGxpbmcsIFNUUklQRV9IQU5ETEUgaXMgc2V0LgorICogIC0gV2hlbiByZWZjb3VudCByZWFjaGVzIHplcm8sIHRoZW4gaWYgU1RSSVBFX0hBTkRMRSBpdCBpcyBwdXQgb24KKyAqICAgIGhhbmRsZV9saXN0IGVsc2UgaW5hY3RpdmVfbGlzdAorICoKKyAqIFRoaXMsIGNvbWJpbmVkIHdpdGggdGhlIGZhY3QgdGhhdCBTVFJJUEVfSEFORExFIGlzIG9ubHkgZXZlcgorICogY2xlYXJlZCB3aGlsZSBhIHN0cmlwZSBoYXMgYSBub24temVybyBjb3VudCBtZWFucyB0aGF0IGlmIHRoZQorICogcmVmY291bnQgaXMgMCBhbmQgU1RSSVBFX0hBTkRMRSBpcyBzZXQsIHRoZW4gaXQgaXMgb24gdGhlCisgKiBoYW5kbGVfbGlzdCBhbmQgaWYgcmVjb3VudCBpcyAwIGFuZCBTVFJJUEVfSEFORExFIGlzIG5vdCBzZXQsIHRoZW4KKyAqIHRoZSBzdHJpcGUgaXMgb24gaW5hY3RpdmVfbGlzdC4KKyAqCisgKiBUaGUgcG9zc2libGUgdHJhbnNpdGlvbnMgYXJlOgorICogIGFjdGl2YXRlIGFuIHVuaGFzaGVkL2luYWN0aXZlIHN0cmlwZSAoZ2V0X2FjdGl2ZV9zdHJpcGUoKSkKKyAqICAgICBsb2NrZGV2IGNoZWNrLWhhc2ggdW5saW5rLXN0cmlwZSBjbnQrKyBjbGVhbi1zdHJpcGUgaGFzaC1zdHJpcGUgdW5sb2NrZGV2CisgKiAgYWN0aXZhdGUgYSBoYXNoZWQsIHBvc3NpYmx5IGFjdGl2ZSBzdHJpcGUgKGdldF9hY3RpdmVfc3RyaXBlKCkpCisgKiAgICAgbG9ja2RldiBjaGVjay1oYXNoIGlmKCFjbnQrKyl1bmxpbmstc3RyaXBlIHVubG9ja2RldgorICogIGF0dGFjaCBhIHJlcXVlc3QgdG8gYW4gYWN0aXZlIHN0cmlwZSAoYWRkX3N0cmlwZV9iaCgpKQorICogICAgIGxvY2tkZXYgYXR0YWNoLWJ1ZmZlciB1bmxvY2tkZXYKKyAqICBoYW5kbGUgYSBzdHJpcGUgKGhhbmRsZV9zdHJpcGUoKSkKKyAqICAgICBsb2Nrc3RyaXBlIGNsclNUUklQRV9IQU5ETEUgLi4uCisgKgkJKGxvY2tkZXYgY2hlY2stYnVmZmVycyB1bmxvY2tkZXYpIC4uCisgKgkJY2hhbmdlLXN0YXRlIC4uCisgKgkJcmVjb3JkIGlvL29wcyBuZWVkZWQgdW5sb2Nrc3RyaXBlIHNjaGVkdWxlIGlvL29wcworICogIHJlbGVhc2UgYW4gYWN0aXZlIHN0cmlwZSAocmVsZWFzZV9zdHJpcGUoKSkKKyAqICAgICBsb2NrZGV2IGlmICghLS1jbnQpIHsgaWYgIFNUUklQRV9IQU5ETEUsIGFkZCB0byBoYW5kbGVfbGlzdCBlbHNlIGFkZCB0byBpbmFjdGl2ZS1saXN0IH0gdW5sb2NrZGV2CisgKgorICogVGhlIHJlZmNvdW50IGNvdW50cyBlYWNoIHRocmVhZCB0aGF0IGhhdmUgYWN0aXZhdGVkIHRoZSBzdHJpcGUsCisgKiBwbHVzIHJhaWQ1ZCBpZiBpdCBpcyBoYW5kbGluZyBpdCwgcGx1cyBvbmUgZm9yIGVhY2ggYWN0aXZlIHJlcXVlc3QKKyAqIG9uIGEgY2FjaGVkIGJ1ZmZlciwgYW5kIHBsdXMgb25lIGlmIHRoZSBzdHJpcGUgaXMgdW5kZXJnb2luZyBzdHJpcGUKKyAqIG9wZXJhdGlvbnMuCisgKgorICogU3RyaXBlIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBvdXRzaWRlIHRoZSBzdHJpcGUgbG9jaywKKyAqIHRoZSBzdHJpcGUgb3BlcmF0aW9ucyBhcmU6CisgKiAtY29weWluZyBkYXRhIGJldHdlZW4gdGhlIHN0cmlwZSBjYWNoZSBhbmQgdXNlciBhcHBsaWNhdGlvbiBidWZmZXJzCisgKiAtY29tcHV0aW5nIGJsb2NrcyB0byBzYXZlIGEgZGlzayBhY2Nlc3MsIG9yIHRvIHJlY292ZXIgYSBtaXNzaW5nIGJsb2NrCisgKiAtdXBkYXRpbmcgdGhlIHBhcml0eSBvbiBhIHdyaXRlIG9wZXJhdGlvbiAocmVjb25zdHJ1Y3Qgd3JpdGUgYW5kCisgKiAgcmVhZC1tb2RpZnktd3JpdGUpCisgKiAtY2hlY2tpbmcgcGFyaXR5IGNvcnJlY3RuZXNzCisgKiAtcnVubmluZyBpL28gdG8gZGlzaworICogVGhlc2Ugb3BlcmF0aW9ucyBhcmUgY2FycmllZCBvdXQgYnkgcmFpZDVfcnVuX29wcyB3aGljaCB1c2VzIHRoZSBhc3luY190eAorICogYXBpIHRvIChvcHRpb25hbGx5KSBvZmZsb2FkIG9wZXJhdGlvbnMgdG8gZGVkaWNhdGVkIGhhcmR3YXJlIGVuZ2luZXMuCisgKiBXaGVuIHJlcXVlc3RpbmcgYW4gb3BlcmF0aW9uIGhhbmRsZV9zdHJpcGUgc2V0cyB0aGUgcGVuZGluZyBiaXQgZm9yIHRoZQorICogb3BlcmF0aW9uIGFuZCBpbmNyZW1lbnRzIHRoZSBjb3VudC4gIHJhaWQ1X3J1bl9vcHMgaXMgdGhlbiBydW4gd2hlbmV2ZXIKKyAqIHRoZSBjb3VudCBpcyBub24temVyby4KKyAqIFRoZXJlIGFyZSBzb21lIGNyaXRpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSBvcGVyYXRpb25zIHRoYXQgcHJldmVudCBzb21lCisgKiBmcm9tIGJlaW5nIHJlcXVlc3RlZCB3aGlsZSBhbm90aGVyIGlzIGluIGZsaWdodC4KKyAqIDEvIFBhcml0eSBjaGVjayBvcGVyYXRpb25zIGRlc3Ryb3kgdGhlIGluIGNhY2hlIHZlcnNpb24gb2YgdGhlIHBhcml0eSBibG9jaywKKyAqICAgIHNvIHdlIHByZXZlbnQgcGFyaXR5IGRlcGVuZGVudCBvcGVyYXRpb25zIGxpa2Ugd3JpdGVzIGFuZCBjb21wdXRlX2Jsb2NrcworICogICAgZnJvbSBzdGFydGluZyB3aGlsZSBhIGNoZWNrIGlzIGluIHByb2dyZXNzLiAgU29tZSBkbWEgZW5naW5lcyBjYW4gcGVyZm9ybQorICogICAgdGhlIGNoZWNrIHdpdGhvdXQgZGFtYWdpbmcgdGhlIHBhcml0eSBibG9jaywgaW4gdGhlc2UgY2FzZXMgdGhlIHBhcml0eQorICogICAgYmxvY2sgaXMgcmUtbWFya2VkIHVwIHRvIGRhdGUgKGFzc3VtaW5nIHRoZSBjaGVjayB3YXMgc3VjY2Vzc2Z1bCkgYW5kIGlzCisgKiAgICBub3QgcmUtcmVhZCBmcm9tIGRpc2suCisgKiAyLyBXaGVuIGEgd3JpdGUgb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB3ZSBpbW1lZGlhdGVseSBsb2NrIHRoZSBhZmZlY3RlZAorICogICAgYmxvY2tzLCBhbmQgbWFyayB0aGVtIGFzIG5vdCB1cCB0byBkYXRlLiAgVGhpcyBjYXVzZXMgbmV3IHJlYWQgcmVxdWVzdHMKKyAqICAgIHRvIGJlIGhlbGQgb2ZmLCBhcyB3ZWxsIGFzIHBhcml0eSBjaGVja3MgYW5kIGNvbXB1dGUgYmxvY2sgb3BlcmF0aW9ucy4KKyAqIDMvIE9uY2UgYSBjb21wdXRlIGJsb2NrIG9wZXJhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQgaGFuZGxlX3N0cmlwZSB0cmVhdHMKKyAqICAgIHRoYXQgYmxvY2sgYXMgaWYgaXQgaXMgdXAgdG8gZGF0ZS4gIHJhaWQ1X3J1bl9vcHMgZ3VhcnVudGVlcyB0aGF0IGFueQorICogICAgb3BlcmF0aW9uIHRoYXQgaXMgZGVwZW5kZW50IG9uIHRoZSBjb21wdXRlIGJsb2NrIHJlc3VsdCBpcyBpbml0aWF0ZWQgYWZ0ZXIKKyAqICAgIHRoZSBjb21wdXRlIGJsb2NrIGNvbXBsZXRlcy4KKyAqLworCisvKgorICogT3BlcmF0aW9ucyBzdGF0ZSAtIGludGVybWVkaWF0ZSBzdGF0ZXMgdGhhdCBhcmUgdmlzaWJsZSBvdXRzaWRlIG9mIHNoLT5sb2NrCisgKiBJbiBnZW5lcmFsIF9pZGxlIGluZGljYXRlcyBub3RoaW5nIGlzIHJ1bm5pbmcsIF9ydW4gaW5kaWNhdGVzIGEgZGF0YQorICogcHJvY2Vzc2luZyBvcGVyYXRpb24gaXMgYWN0aXZlLCBhbmQgX3Jlc3VsdCBtZWFucyB0aGUgZGF0YSBwcm9jZXNzaW5nIHJlc3VsdAorICogaXMgc3RhYmxlIGFuZCBjYW4gYmUgYWN0ZWQgdXBvbi4gIEZvciBzaW1wbGUgb3BlcmF0aW9ucyBsaWtlIGJpb2ZpbGwgYW5kCisgKiBjb21wdXRlIHRoYXQgb25seSBoYXZlIGFuIF9pZGxlIGFuZCBfcnVuIHN0YXRlIHRoZXkgYXJlIGluZGljYXRlZCB3aXRoCisgKiBzaC0+c3RhdGUgZmxhZ3MgKFNUUklQRV9CSU9GSUxMX1JVTiBhbmQgU1RSSVBFX0NPTVBVVEVfUlVOKQorICovCisvKioKKyAqIGVudW0gY2hlY2tfc3RhdGVzIC0gaGFuZGxlcyBzeW5jaW5nIC8gcmVwYWlyaW5nIGEgc3RyaXBlCisgKiBAY2hlY2tfc3RhdGVfaWRsZSAtIGNoZWNrIG9wZXJhdGlvbnMgYXJlIHF1aWVzY2VkCisgKiBAY2hlY2tfc3RhdGVfcnVuIC0gY2hlY2sgb3BlcmF0aW9uIGlzIHJ1bm5pbmcKKyAqIEBjaGVja19zdGF0ZV9yZXN1bHQgLSBzZXQgb3V0c2lkZSBsb2NrIHdoZW4gY2hlY2sgcmVzdWx0IGlzIHZhbGlkCisgKiBAY2hlY2tfc3RhdGVfY29tcHV0ZV9ydW4gLSBjaGVjayBmYWlsZWQgYW5kIHdlIGFyZSByZXBhaXJpbmcKKyAqIEBjaGVja19zdGF0ZV9jb21wdXRlX3Jlc3VsdCAtIHNldCBvdXRzaWRlIGxvY2sgd2hlbiBjb21wdXRlIHJlc3VsdCBpcyB2YWxpZAorICovCitlbnVtIGNoZWNrX3N0YXRlcyB7CisJY2hlY2tfc3RhdGVfaWRsZSA9IDAsCisJY2hlY2tfc3RhdGVfcnVuLCAvKiBwYXJpdHkgY2hlY2sgKi8KKwljaGVja19zdGF0ZV9jaGVja19yZXN1bHQsCisJY2hlY2tfc3RhdGVfY29tcHV0ZV9ydW4sIC8qIHBhcml0eSByZXBhaXIgKi8KKwljaGVja19zdGF0ZV9jb21wdXRlX3Jlc3VsdCwKK307CisKKy8qKgorICogZW51bSByZWNvbnN0cnVjdF9zdGF0ZXMgLSBoYW5kbGVzIHdyaXRpbmcgb3IgZXhwYW5kaW5nIGEgc3RyaXBlCisgKi8KK2VudW0gcmVjb25zdHJ1Y3Rfc3RhdGVzIHsKKwlyZWNvbnN0cnVjdF9zdGF0ZV9pZGxlID0gMCwKKwlyZWNvbnN0cnVjdF9zdGF0ZV9wcmV4b3JfZHJhaW5fcnVuLAkvKiBwcmV4b3Itd3JpdGUgKi8KKwlyZWNvbnN0cnVjdF9zdGF0ZV9kcmFpbl9ydW4sCQkvKiB3cml0ZSAqLworCXJlY29uc3RydWN0X3N0YXRlX3J1biwJCQkvKiBleHBhbmQgKi8KKwlyZWNvbnN0cnVjdF9zdGF0ZV9wcmV4b3JfZHJhaW5fcmVzdWx0LAorCXJlY29uc3RydWN0X3N0YXRlX2RyYWluX3Jlc3VsdCwKKwlyZWNvbnN0cnVjdF9zdGF0ZV9yZXN1bHQsCit9OworCitzdHJ1Y3Qgc3RyaXBlX2hlYWQgeworCXN0cnVjdCBobGlzdF9ub2RlCWhhc2g7CisJc3RydWN0IGxpc3RfaGVhZAlscnU7CSAgICAgIC8qIGluYWN0aXZlX2xpc3Qgb3IgaGFuZGxlX2xpc3QgKi8KKwlzdHJ1Y3QgcmFpZDVfcHJpdmF0ZV9kYXRhICpyYWlkX2NvbmY7CisJc2hvcnQJCQlnZW5lcmF0aW9uOwkvKiBpbmNyZW1lbnRzIHdpdGggZXZlcnkKKwkJCQkJCSAqIHJlc2hhcGUgKi8KKwlzZWN0b3JfdAkJc2VjdG9yOwkJLyogc2VjdG9yIG9mIHRoaXMgcm93ICovCisJc2hvcnQJCQlwZF9pZHg7CQkvKiBwYXJpdHkgZGlzayBpbmRleCAqLworCXNob3J0CQkJcWRfaWR4OwkJLyogJ1EnIGRpc2sgaW5kZXggZm9yIHJhaWQ2ICovCisJc2hvcnQJCQlkZGZfbGF5b3V0Oy8qIHVzZSBEREYgb3JkZXJpbmcgdG8gY2FsY3VsYXRlIFEgKi8KKwl1bnNpZ25lZCBsb25nCQlzdGF0ZTsJCS8qIHN0YXRlIGZsYWdzICovCisJYXRvbWljX3QJCWNvdW50OwkgICAgICAvKiBuciBvZiBhY3RpdmUgdGhyZWFkL3JlcXVlc3RzICovCisJc3BpbmxvY2tfdAkJbG9jazsKKwlpbnQJCQlibV9zZXE7CS8qIHNlcXVlbmNlIG51bWJlciBmb3IgYml0bWFwIGZsdXNoZXMgKi8KKwlpbnQJCQlkaXNrczsJCS8qIGRpc2tzIGluIHN0cmlwZSAqLworCWVudW0gY2hlY2tfc3RhdGVzCWNoZWNrX3N0YXRlOworCWVudW0gcmVjb25zdHJ1Y3Rfc3RhdGVzIHJlY29uc3RydWN0X3N0YXRlOworCS8qIHN0cmlwZV9vcGVyYXRpb25zCisJICogQHRhcmdldCAtIFNUUklQRV9PUF9DT01QVVRFX0JMSyB0YXJnZXQKKwkgKi8KKwlzdHJ1Y3Qgc3RyaXBlX29wZXJhdGlvbnMgeworCQlpbnQJCSAgIHRhcmdldDsKKwkJdTMyCQkgICB6ZXJvX3N1bV9yZXN1bHQ7CisJfSBvcHM7CisJc3RydWN0IHI1ZGV2IHsKKwkJc3RydWN0IGJpbwlyZXE7CisJCXN0cnVjdCBiaW9fdmVjCXZlYzsKKwkJc3RydWN0IHBhZ2UJKnBhZ2U7CisJCXN0cnVjdCBiaW8JKnRvcmVhZCwgKnJlYWQsICp0b3dyaXRlLCAqd3JpdHRlbjsKKwkJc2VjdG9yX3QJc2VjdG9yOwkJCS8qIHNlY3RvciBvZiB0aGlzIHBhZ2UgKi8KKwkJdW5zaWduZWQgbG9uZwlmbGFnczsKKwl9IGRldlsxXTsgLyogYWxsb2NhdGVkIHdpdGggZXh0cmEgc3BhY2UgZGVwZW5kaW5nIG9mIFJBSUQgZ2VvbWV0cnkgKi8KK307CisKKy8qIHN0cmlwZV9oZWFkX3N0YXRlIC0gY29sbGVjdHMgYW5kIHRyYWNrcyB0aGUgZHluYW1pYyBzdGF0ZSBvZiBhIHN0cmlwZV9oZWFkCisgKiAgICAgZm9yIGhhbmRsZV9zdHJpcGUuICBJdCBpcyBvbmx5IHZhbGlkIHVuZGVyIHNwaW5fbG9jayhzaC0+bG9jayk7CisgKi8KK3N0cnVjdCBzdHJpcGVfaGVhZF9zdGF0ZSB7CisJaW50IHN5bmNpbmcsIGV4cGFuZGluZywgZXhwYW5kZWQ7CisJaW50IGxvY2tlZCwgdXB0b2RhdGUsIHRvX3JlYWQsIHRvX3dyaXRlLCBmYWlsZWQsIHdyaXR0ZW47CisJaW50IHRvX2ZpbGwsIGNvbXB1dGUsIHJlcV9jb21wdXRlLCBub25fb3ZlcndyaXRlOworCWludCBmYWlsZWRfbnVtOworCXVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3Q7Cit9OworCisvKiByNl9zdGF0ZSAtIGV4dHJhIHN0YXRlIGRhdGEgb25seSByZWxldmFudCB0byByNiAqLworc3RydWN0IHI2X3N0YXRlIHsKKwlpbnQgcF9mYWlsZWQsIHFfZmFpbGVkLCBmYWlsZWRfbnVtWzJdOworfTsKKworLyogRmxhZ3MgKi8KKyNkZWZpbmUJUjVfVVBUT0RBVEUJMAkvKiBwYWdlIGNvbnRhaW5zIGN1cnJlbnQgZGF0YSAqLworI2RlZmluZQlSNV9MT0NLRUQJMQkvKiBJTyBoYXMgYmVlbiBzdWJtaXR0ZWQgb24gInJlcSIgKi8KKyNkZWZpbmUJUjVfT1ZFUldSSVRFCTIJLyogdG93cml0ZSBjb3ZlcnMgd2hvbGUgcGFnZSAqLworLyogYW5kIHNvbWUgdGhhdCBhcmUgaW50ZXJuYWwgdG8gaGFuZGxlX3N0cmlwZSAqLworI2RlZmluZQlSNV9JbnN5bmMJMwkvKiByZGV2ICYmIHJkZXYtPmluX3N5bmMgYXQgc3RhcnQgKi8KKyNkZWZpbmUJUjVfV2FudHJlYWQJNAkvKiB3YW50IHRvIHNjaGVkdWxlIGEgcmVhZCAqLworI2RlZmluZQlSNV9XYW50d3JpdGUJNQorI2RlZmluZQlSNV9PdmVybGFwCTcJLyogVGhlcmUgaXMgYSBwZW5kaW5nIG92ZXJsYXBwaW5nIHJlcXVlc3Qgb24gdGhpcyBibG9jayAqLworI2RlZmluZQlSNV9SZWFkRXJyb3IJOAkvKiBzZWVuIGEgcmVhZCBlcnJvciBoZXJlIHJlY2VudGx5ICovCisjZGVmaW5lCVI1X1JlV3JpdGUJOQkvKiBoYXZlIHRyaWVkIHRvIG92ZXItd3JpdGUgdGhlIHJlYWRlcnJvciAqLworCisjZGVmaW5lCVI1X0V4cGFuZGVkCTEwCS8qIFRoaXMgYmxvY2sgbm93IGhhcyBwb3N0LWV4cGFuZCBkYXRhICovCisjZGVmaW5lCVI1X1dhbnRjb21wdXRlCTExIC8qIGNvbXB1dGVfYmxvY2sgaW4gcHJvZ3Jlc3MgdHJlYXQgYXMKKwkJCQkgICAgKiB1cHRvZGF0ZQorCQkJCSAgICAqLworI2RlZmluZQlSNV9XYW50ZmlsbAkxMiAvKiBkZXYtPnRvcmVhZCBjb250YWlucyBhIGJpbyB0aGF0IG5lZWRzCisJCQkJICAgICogZmlsbGluZworCQkJCSAgICAqLworI2RlZmluZSBSNV9XYW50ZHJhaW4JMTMgLyogZGV2LT50b3dyaXRlIG5lZWRzIHRvIGJlIGRyYWluZWQgKi8KKy8qCisgKiBXcml0ZSBtZXRob2QKKyAqLworI2RlZmluZSBSRUNPTlNUUlVDVF9XUklURQkxCisjZGVmaW5lIFJFQURfTU9ESUZZX1dSSVRFCTIKKy8qIG5vdCBhIHdyaXRlIG1ldGhvZCwgYnV0IGEgY29tcHV0ZV9wYXJpdHkgbW9kZSAqLworI2RlZmluZQlDSEVDS19QQVJJVFkJCTMKKy8qIEFkZGl0aW9uYWwgY29tcHV0ZV9wYXJpdHkgbW9kZSAtLSB1cGRhdGVzIHRoZSBwYXJpdHkgdy9vIExPQ0tJTkcgKi8KKyNkZWZpbmUgVVBEQVRFX1BBUklUWQkJNAorCisvKgorICogU3RyaXBlIHN0YXRlCisgKi8KKyNkZWZpbmUgU1RSSVBFX0hBTkRMRQkJMgorI2RlZmluZQlTVFJJUEVfU1lOQ0lORwkJMworI2RlZmluZQlTVFJJUEVfSU5TWU5DCQk0CisjZGVmaW5lCVNUUklQRV9QUkVSRUFEX0FDVElWRQk1CisjZGVmaW5lCVNUUklQRV9ERUxBWUVECQk2CisjZGVmaW5lCVNUUklQRV9ERUdSQURFRAkJNworI2RlZmluZQlTVFJJUEVfQklUX0RFTEFZCTgKKyNkZWZpbmUJU1RSSVBFX0VYUEFORElORwk5CisjZGVmaW5lCVNUUklQRV9FWFBBTkRfU09VUkNFCTEwCisjZGVmaW5lCVNUUklQRV9FWFBBTkRfUkVBRFkJMTEKKyNkZWZpbmUJU1RSSVBFX0lPX1NUQVJURUQJMTIgLyogZG8gbm90IGNvdW50IHRvd2FyZHMgJ2J5cGFzc19jb3VudCcgKi8KKyNkZWZpbmUJU1RSSVBFX0ZVTExfV1JJVEUJMTMgLyogYWxsIGJsb2NrcyBhcmUgc2V0IHRvIGJlIG92ZXJ3cml0dGVuICovCisjZGVmaW5lCVNUUklQRV9CSU9GSUxMX1JVTgkxNAorI2RlZmluZQlTVFJJUEVfQ09NUFVURV9SVU4JMTUKKy8qCisgKiBPcGVyYXRpb24gcmVxdWVzdCBmbGFncworICovCisjZGVmaW5lIFNUUklQRV9PUF9CSU9GSUxMCTAKKyNkZWZpbmUgU1RSSVBFX09QX0NPTVBVVEVfQkxLCTEKKyNkZWZpbmUgU1RSSVBFX09QX1BSRVhPUgkyCisjZGVmaW5lIFNUUklQRV9PUF9CSU9EUkFJTgkzCisjZGVmaW5lIFNUUklQRV9PUF9QT1NUWE9SCTQKKyNkZWZpbmUgU1RSSVBFX09QX0NIRUNLCTUKKworLyoKKyAqIFBsdWdnaW5nOgorICoKKyAqIFRvIGltcHJvdmUgd3JpdGUgdGhyb3VnaHB1dCwgd2UgbmVlZCB0byBkZWxheSB0aGUgaGFuZGxpbmcgb2Ygc29tZQorICogc3RyaXBlcyB1bnRpbCB0aGVyZSBoYXMgYmVlbiBhIGNoYW5jZSB0aGF0IHNldmVyYWwgd3JpdGUgcmVxdWVzdHMKKyAqIGZvciB0aGUgb25lIHN0cmlwZSBoYXZlIGFsbCBiZWVuIGNvbGxlY3RlZC4KKyAqIEluIHBhcnRpY3VsYXIsIGFueSB3cml0ZSByZXF1ZXN0IHRoYXQgd291bGQgcmVxdWlyZSBwcmUtcmVhZGluZworICogaXMgcHV0IG9uIGEgImRlbGF5ZWQiIHF1ZXVlIHVudGlsIHRoZXJlIGFyZSBubyBzdHJpcGVzIGN1cnJlbnRseQorICogaW4gYSBwcmUtcmVhZCBwaGFzZS4gIEZ1cnRoZXIsIGlmIHRoZSAiZGVsYXllZCIgcXVldWUgaXMgZW1wdHkgd2hlbgorICogYSBzdHJpcGUgaXMgcHV0IG9uIGl0IHRoZW4gd2UgInBsdWciIHRoZSBxdWV1ZSBhbmQgZG8gbm90IHByb2Nlc3MgaXQKKyAqIHVudGlsIGFuIHVucGx1ZyBjYWxsIGlzIG1hZGUuICh0aGUgdW5wbHVnX2lvX2ZuKCkgaXMgY2FsbGVkKS4KKyAqCisgKiBXaGVuIHByZXJlYWQgaXMgaW5pdGlhdGVkIG9uIGEgc3RyaXBlLCB3ZSBzZXQgUFJFUkVBRF9BQ1RJVkUgYW5kIGFkZAorICogaXQgdG8gdGhlIGNvdW50IG9mIHByZXJlYWRpbmcgc3RyaXBlcy4KKyAqIFdoZW4gd3JpdGUgaXMgaW5pdGlhdGVkLCBvciB0aGUgc3RyaXBlIHJlZmNudCA9PSAwIChqdXN0IGluIGNhc2UpIHdlCisgKiBjbGVhciB0aGUgUFJFUkVBRF9BQ1RJVkUgZmxhZyBhbmQgZGVjcmVtZW50IHRoZSBjb3VudAorICogV2hlbmV2ZXIgdGhlICdoYW5kbGUnIHF1ZXVlIGlzIGVtcHR5IGFuZCB0aGUgZGV2aWNlIGlzIG5vdCBwbHVnZ2VkLCB3ZQorICogbW92ZSBhbnkgc3RyaXBzIGZyb20gZGVsYXllZCB0byBoYW5kbGUgYW5kIGNsZWFyIHRoZSBERUxBWUVEIGZsYWcgYW5kIHNldAorICogUFJFUkVBRF9BQ1RJVkUuCisgKiBJbiBzdHJpcGVfaGFuZGxlLCBpZiB3ZSBmaW5kIHByZS1yZWFkaW5nIGlzIG5lY2Vzc2FyeSwgd2UgZG8gaXQgaWYKKyAqIFBSRVJFQURfQUNUSVZFIGlzIHNldCwgZWxzZSB3ZSBzZXQgREVMQVlFRCB3aGljaCB3aWxsIHNlbmQgaXQgdG8gdGhlIGRlbGF5ZWQgcXVldWUuCisgKiBIQU5ETEUgZ2V0cyBjbGVhcmVkIGlmIHN0cmlwZV9oYW5kbGUgbGVhdmUgbm90aGluZyBsb2NrZWQuCisgKi8KKworCitzdHJ1Y3QgZGlza19pbmZvIHsKKwltZGtfcmRldl90CSpyZGV2OworfTsKKworc3RydWN0IHJhaWQ1X3ByaXZhdGVfZGF0YSB7CisJc3RydWN0IGhsaXN0X2hlYWQJKnN0cmlwZV9oYXNodGJsOworCW1kZGV2X3QJCQkqbWRkZXY7CisJc3RydWN0IGRpc2tfaW5mbwkqc3BhcmU7CisJaW50CQkJY2h1bmtfc2l6ZSwgbGV2ZWwsIGFsZ29yaXRobTsKKwlpbnQJCQltYXhfZGVncmFkZWQ7CisJaW50CQkJcmFpZF9kaXNrczsKKwlpbnQJCQltYXhfbnJfc3RyaXBlczsKKworCS8qIHJlc2hhcGVfcHJvZ3Jlc3MgaXMgdGhlIGxlYWRpbmcgZWRnZSBvZiBhICdyZXNoYXBlJworCSAqIEl0IGhhcyB2YWx1ZSBNYXhTZWN0b3Igd2hlbiBubyByZXNoYXBlIGlzIGhhcHBlbmluZworCSAqIElmIGRlbHRhX2Rpc2tzIDwgMCwgaXQgaXMgdGhlIGxhc3Qgc2VjdG9yIHdlIHN0YXJ0ZWQgd29yayBvbiwKKwkgKiBlbHNlIGlzIGl0IHRoZSBuZXh0IHNlY3RvciB0byB3b3JrIG9uLgorCSAqLworCXNlY3Rvcl90CQlyZXNoYXBlX3Byb2dyZXNzOworCS8qIHJlc2hhcGVfc2FmZSBpcyB0aGUgdHJhaWxpbmcgZWRnZSBvZiBhIHJlc2hhcGUuICBXZSBrbm93IHRoYXQKKwkgKiBiZWZvcmUgKG9yIGFmdGVyKSB0aGlzIGFkZHJlc3MsIGFsbCByZXNoYXBlIGhhcyBjb21wbGV0ZWQuCisJICovCisJc2VjdG9yX3QJCXJlc2hhcGVfc2FmZTsKKwlpbnQJCQlwcmV2aW91c19yYWlkX2Rpc2tzOworCWludAkJCXByZXZfY2h1bmssIHByZXZfYWxnbzsKKwlzaG9ydAkJCWdlbmVyYXRpb247IC8qIGluY3JlbWVudHMgd2l0aCBldmVyeSByZXNoYXBlICovCisJdW5zaWduZWQgbG9uZwkJcmVzaGFwZV9jaGVja3BvaW50OyAvKiBUaW1lIHdlIGxhc3QgdXBkYXRlZAorCQkJCQkJICAgICAqIG1ldGFkYXRhICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWhhbmRsZV9saXN0OyAvKiBzdHJpcGVzIG5lZWRpbmcgaGFuZGxpbmcgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWhvbGRfbGlzdDsgLyogcHJlcmVhZCByZWFkeSBzdHJpcGVzICovCisJc3RydWN0IGxpc3RfaGVhZAlkZWxheWVkX2xpc3Q7IC8qIHN0cmlwZXMgdGhhdCBoYXZlIHBsdWdnZWQgcmVxdWVzdHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWJpdG1hcF9saXN0OyAvKiBzdHJpcGVzIGRlbGF5aW5nIGF3YWl0aW5nIGJpdG1hcCB1cGRhdGUgKi8KKwlzdHJ1Y3QgYmlvCQkqcmV0cnlfcmVhZF9hbGlnbmVkOyAvKiBjdXJyZW50bHkgcmV0cnlpbmcgYWxpZ25lZCBiaW9zICAgKi8KKwlzdHJ1Y3QgYmlvCQkqcmV0cnlfcmVhZF9hbGlnbmVkX2xpc3Q7IC8qIGFsaWduZWQgYmlvcyByZXRyeSBsaXN0ICAqLworCWF0b21pY190CQlwcmVyZWFkX2FjdGl2ZV9zdHJpcGVzOyAvKiBzdHJpcGVzIHdpdGggc2NoZWR1bGVkIGlvICovCisJYXRvbWljX3QJCWFjdGl2ZV9hbGlnbmVkX3JlYWRzOworCWF0b21pY190CQlwZW5kaW5nX2Z1bGxfd3JpdGVzOyAvKiBmdWxsIHdyaXRlIGJhY2tsb2cgKi8KKwlpbnQJCQlieXBhc3NfY291bnQ7IC8qIGJ5cGFzc2VkIHByZXJlYWRzICovCisJaW50CQkJYnlwYXNzX3RocmVzaG9sZDsgLyogcHJlcmVhZCBuaWNlICovCisJc3RydWN0IGxpc3RfaGVhZAkqbGFzdF9ob2xkOyAvKiBkZXRlY3QgaG9sZF9saXN0IHByb21vdGlvbnMgKi8KKworCWF0b21pY190CQlyZXNoYXBlX3N0cmlwZXM7IC8qIHN0cmlwZXMgd2l0aCBwZW5kaW5nIHdyaXRlcyBmb3IgcmVzaGFwZSAqLworCS8qIHVuZm9ydHVuYXRlbHkgd2UgbmVlZCB0d28gY2FjaGUgbmFtZXMgYXMgd2UgdGVtcG9yYXJpbHkgaGF2ZQorCSAqIHR3byBjYWNoZXMuCisJICovCisJaW50CQkJYWN0aXZlX25hbWU7CisJY2hhcgkJCWNhY2hlX25hbWVbMl1bMjBdOworCXN0cnVjdCBrbWVtX2NhY2hlCQkqc2xhYl9jYWNoZTsgLyogZm9yIGFsbG9jYXRpbmcgc3RyaXBlcyAqLworCisJaW50CQkJc2VxX2ZsdXNoLCBzZXFfd3JpdGU7CisJaW50CQkJcXVpZXNjZTsKKworCWludAkJCWZ1bGxzeW5jOyAgLyogc2V0IHRvIDEgaWYgYSBmdWxsIHN5bmMgaXMgbmVlZGVkLAorCQkJCQkgICAgKiAoZnJlc2ggZGV2aWNlIGFkZGVkKS4KKwkJCQkJICAgICogQ2xlYXJlZCB3aGVuIGEgc3luYyBjb21wbGV0ZXMuCisJCQkJCSAgICAqLworCisJc3RydWN0IHBhZ2UgCQkqc3BhcmVfcGFnZTsgLyogVXNlZCB3aGVuIGNoZWNraW5nIFAvUSBpbiByYWlkNiAqLworCisJLyoKKwkgKiBGcmVlIHN0cmlwZXMgcG9vbAorCSAqLworCWF0b21pY190CQlhY3RpdmVfc3RyaXBlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWluYWN0aXZlX2xpc3Q7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9mb3Jfc3RyaXBlOworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfZm9yX292ZXJsYXA7CisJaW50CQkJaW5hY3RpdmVfYmxvY2tlZDsJLyogcmVsZWFzZSBvZiBpbmFjdGl2ZSBzdHJpcGVzIGJsb2NrZWQsCisJCQkJCQkJICogd2FpdGluZyBmb3IgMjUlIHRvIGJlIGZyZWUKKwkJCQkJCQkgKi8KKwlpbnQJCQlwb29sX3NpemU7IC8qIG51bWJlciBvZiBkaXNrcyBpbiBzdHJpcGVoZWFkcyBpbiBwb29sICovCisJc3BpbmxvY2tfdAkJZGV2aWNlX2xvY2s7CisJc3RydWN0IGRpc2tfaW5mbwkqZGlza3M7CisKKwkvKiBXaGVuIHRha2luZyBvdmVyIGFuIGFycmF5IGZyb20gYSBkaWZmZXJlbnQgcGVyc29uYWxpdHksIHdlIHN0b3JlCisJICogdGhlIG5ldyB0aHJlYWQgaGVyZSB1bnRpbCB3ZSBmdWxseSBhY3RpdmF0ZSB0aGUgYXJyYXkuCisJICovCisJc3RydWN0IG1ka190aHJlYWRfcwkqdGhyZWFkOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcmFpZDVfcHJpdmF0ZV9kYXRhIHJhaWQ1X2NvbmZfdDsKKworI2RlZmluZSBtZGRldl90b19jb25mKG1kZGV2KSAoKHJhaWQ1X2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZSkKKworLyoKKyAqIE91ciBzdXBwb3J0ZWQgYWxnb3JpdGhtcworICovCisjZGVmaW5lIEFMR09SSVRITV9MRUZUX0FTWU1NRVRSSUMJMCAvKiBSb3RhdGluZyBQYXJpdHkgTiB3aXRoIERhdGEgUmVzdGFydCAqLworI2RlZmluZSBBTEdPUklUSE1fUklHSFRfQVNZTU1FVFJJQwkxIC8qIFJvdGF0aW5nIFBhcml0eSAwIHdpdGggRGF0YSBSZXN0YXJ0ICovCisjZGVmaW5lIEFMR09SSVRITV9MRUZUX1NZTU1FVFJJQwkyIC8qIFJvdGF0aW5nIFBhcml0eSBOIHdpdGggRGF0YSBDb250aW51YXRpb24gKi8KKyNkZWZpbmUgQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQwkzIC8qIFJvdGF0aW5nIFBhcml0eSAwIHdpdGggRGF0YSBDb250aW51YXRpb24gKi8KKworLyogRGVmaW5lIG5vbi1yb3RhdGluZyAocmFpZDQpIGFsZ29yaXRobXMuICBUaGVzZSBhbGxvdworICogY29udmVyc2lvbiBvZiByYWlkNCB0byByYWlkNS4KKyAqLworI2RlZmluZSBBTEdPUklUSE1fUEFSSVRZXzAJCTQgLyogUCBvciBQLFEgYXJlIGluaXRpYWwgZGV2aWNlcyAqLworI2RlZmluZSBBTEdPUklUSE1fUEFSSVRZX04JCTUgLyogUCBvciBQLFEgYXJlIGZpbmFsIGRldmljZXMuICovCisKKy8qIERERiBSQUlENiBsYXlvdXRzIGRpZmZlciBmcm9tIG1kL3JhaWQ2IGxheW91dHMgaW4gdHdvIHdheXMuCisgKiBGaXJzdGx5LCB0aGUgZXhhY3QgcG9zaXRpb25pbmcgb2YgdGhlIHBhcml0eSBibG9jayBpcyBzbGlnaHRseQorICogZGlmZmVyZW50IGJldHdlZW4gdGhlICdMRUZUXyonIG1vZGVzIG9mIG1kIGFuZCB0aGUgIl9OXyoiIG1vZGVzCisgKiBvZiBEREYuCisgKiBTZWNvbmRseSwgb3Igb3JkZXIgb2YgZGF0YWJsb2NrcyBvdmVyIHdoaWNoIHRoZSBRIHN5bmRyb21lIGlzIGNvbXB1dGVkCisgKiBpcyBkaWZmZXJlbnQuCisgKiBDb25zZXF1ZW50bHkgd2UgaGF2ZSBkaWZmZXJlbnQgbGF5b3V0cyBmb3IgRERGL3JhaWQ2IHRoYW4gbWQvcmFpZDYuCisgKiBUaGVzZSBsYXlvdXRzIGFyZSBmcm9tIHRoZSBEREZ2MS4yIHNwZWMuCisgKiBJbnRlcmVzdGluZ2x5IERERnYxLjItRXJyYXRhLUEgZG9lcyBub3Qgc3BlY2lmeSBOX0NPTlRJTlVFIGJ1dAorICogbGVhdmVzIFJMUT0zIGFzICdWZW5kb3IgU3BlY2lmaWMnCisgKi8KKworI2RlZmluZSBBTEdPUklUSE1fUk9UQVRJTkdfWkVST19SRVNUQVJUCTggLyogRERGIFBSTD02IFJMUT0xICovCisjZGVmaW5lIEFMR09SSVRITV9ST1RBVElOR19OX1JFU1RBUlQJOSAvKiBEREYgUFJMPTYgUkxRPTIgKi8KKyNkZWZpbmUgQUxHT1JJVEhNX1JPVEFUSU5HX05fQ09OVElOVUUJMTAgLypEREYgUFJMPTYgUkxRPTMgKi8KKworCisvKiBGb3IgZXZlcnkgUkFJRDUgYWxnb3JpdGhtIHdlIGRlZmluZSBhIFJBSUQ2IGFsZ29yaXRobQorICogd2l0aCBleGFjdGx5IHRoZSBzYW1lIGxheW91dCBmb3IgZGF0YSBhbmQgcGFyaXR5LCBhbmQKKyAqIHdpdGggdGhlIFEgYmxvY2sgYWx3YXlzIG9uIHRoZSBsYXN0IGRldmljZSAoTi0xKS4KKyAqIFRoaXMgYWxsb3dzIHRyaXZpYWwgY29udmVyc2lvbiBmcm9tIFJBSUQ1IHRvIFJBSUQ2CisgKi8KKyNkZWZpbmUgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQ182CTE2CisjZGVmaW5lIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDXzYJMTcKKyNkZWZpbmUgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDXzYJMTgKKyNkZWZpbmUgQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQ182CTE5CisjZGVmaW5lIEFMR09SSVRITV9QQVJJVFlfMF82CQkyMAorI2RlZmluZSBBTEdPUklUSE1fUEFSSVRZX05fNgkJQUxHT1JJVEhNX1BBUklUWV9OCisKK3N0YXRpYyBpbmxpbmUgaW50IGFsZ29yaXRobV92YWxpZF9yYWlkNShpbnQgbGF5b3V0KQoreworCXJldHVybiAobGF5b3V0ID49IDApICYmCisJCShsYXlvdXQgPD0gNSk7Cit9CitzdGF0aWMgaW5saW5lIGludCBhbGdvcml0aG1fdmFsaWRfcmFpZDYoaW50IGxheW91dCkKK3sKKwlyZXR1cm4gKGxheW91dCA+PSAwICYmIGxheW91dCA8PSA1KQorCQl8fAorCQkobGF5b3V0ID09IDggfHwgbGF5b3V0ID09IDEwKQorCQl8fAorCQkobGF5b3V0ID49IDE2ICYmIGxheW91dCA8PSAyMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFsZ29yaXRobV9pc19EREYoaW50IGxheW91dCkKK3sKKwlyZXR1cm4gbGF5b3V0ID49IDggJiYgbGF5b3V0IDw9IDEwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2LmggYi9kcml2ZXJzL21kL3JhaWQ2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZGNkZTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZC9yYWlkNi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qIC0qLSBsaW51eC1jIC0qLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKLSAqCi0gKiAgIENvcHlyaWdodCAyMDAzIEguIFBldGVyIEFudmluIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZAotICoKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTMgVGVtcGxlIFBsYWNlIFN0ZSAzMzAsCi0gKiAgIEJvc3RvbSBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb247IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgotICoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZm5kZWYgTElOVVhfUkFJRF9SQUlENl9ICi0jZGVmaW5lIExJTlVYX1JBSURfUkFJRDZfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0vKiBTZXQgdG8gMSB0byB1c2Uga2VybmVsLXdpZGUgZW1wdHlfemVyb19wYWdlICovCi0jZGVmaW5lIFJBSUQ2X1VTRV9FTVBUWV9aRVJPX1BBR0UgMAotCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgotI2luY2x1ZGUgPGxpbnV4L3JhaWQvcmFpZDUuaD4KLQotdHlwZWRlZiByYWlkNV9jb25mX3QgcmFpZDZfY29uZl90OyAvKiBTYW1lIGNvbmZpZ3VyYXRpb24gKi8KLQotLyogQWRkaXRpb25hbCBjb21wdXRlX3Bhcml0eSBtb2RlIC0tIHVwZGF0ZXMgdGhlIHBhcml0eSB3L28gTE9DS0lORyAqLwotI2RlZmluZSBVUERBVEVfUEFSSVRZCTQKLQotLyogV2UgbmVlZCBhIHByZS16ZXJvZWQgcGFnZS4uLiBpZiB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUga2VybmVsLXByb3ZpZGVkCi0gICBvbmUgZGVmaW5lIGl0IGhlcmUgKi8KLSNpZiBSQUlENl9VU0VfRU1QVFlfWkVST19QQUdFCi0jIGRlZmluZSByYWlkNl9lbXB0eV96ZXJvX3BhZ2UgZW1wdHlfemVyb19wYWdlCi0jZWxzZQotZXh0ZXJuIGNvbnN0IGNoYXIgcmFpZDZfZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRV07Ci0jZW5kaWYKLQotI2Vsc2UgLyogISBfX0tFUk5FTF9fICovCi0vKiBVc2VkIGZvciB0ZXN0aW5nIGluIHVzZXIgc3BhY2UgKi8KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0vKiBOb3Qgc3RhbmRhcmQsIGJ1dCBnbGliYyBkZWZpbmVzIGl0ICovCi0jZGVmaW5lIEJJVFNfUEVSX0xPTkcgX19XT1JEU0laRQotCi10eXBlZGVmIHVpbnQ4X3QgIHU4OwotdHlwZWRlZiB1aW50MTZfdCB1MTY7Ci10eXBlZGVmIHVpbnQzMl90IHUzMjsKLXR5cGVkZWYgdWludDY0X3QgdTY0OwotCi0jaWZuZGVmIFBBR0VfU0laRQotIyBkZWZpbmUgUEFHRV9TSVpFIDQwOTYKLSNlbmRpZgotZXh0ZXJuIGNvbnN0IGNoYXIgcmFpZDZfZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRV07Ci0KLSNkZWZpbmUgX19pbml0Ci0jZGVmaW5lIF9fZXhpdAotI2RlZmluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fYXR0cmlidXRlX18oKGNvbnN0KSkKLSNkZWZpbmUgbm9pbmxpbmUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQotCi0jZGVmaW5lIHByZWVtcHRfZW5hYmxlKCkKLSNkZWZpbmUgcHJlZW1wdF9kaXNhYmxlKCkKLSNkZWZpbmUgY3B1X2hhc19mZWF0dXJlKHgpIDEKLSNkZWZpbmUgZW5hYmxlX2tlcm5lbF9hbHRpdmVjKCkKLSNkZWZpbmUgZGlzYWJsZV9rZXJuZWxfYWx0aXZlYygpCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLS8qIFJvdXRpbmUgY2hvaWNlcyAqLwotc3RydWN0IHJhaWQ2X2NhbGxzIHsKLQl2b2lkICgqZ2VuX3N5bmRyb21lKShpbnQsIHNpemVfdCwgdm9pZCAqKik7Ci0JaW50ICAoKnZhbGlkKSh2b2lkKTsJLyogUmV0dXJucyAxIGlmIHRoaXMgcm91dGluZSBzZXQgaXMgdXNhYmxlICovCi0JY29uc3QgY2hhciAqbmFtZTsJLyogTmFtZSBvZiB0aGlzIHJvdXRpbmUgc2V0ICovCi0JaW50IHByZWZlcjsJCS8qIEhhcyBzcGVjaWFsIHBlcmZvcm1hbmNlIGF0dHJpYnV0ZSAqLwotfTsKLQotLyogU2VsZWN0ZWQgYWxnb3JpdGhtICovCi1leHRlcm4gc3RydWN0IHJhaWQ2X2NhbGxzIHJhaWQ2X2NhbGw7Ci0KLS8qIEFsZ29yaXRobSBsaXN0ICovCi1leHRlcm4gY29uc3Qgc3RydWN0IHJhaWQ2X2NhbGxzICogY29uc3QgcmFpZDZfYWxnb3NbXTsKLWludCByYWlkNl9zZWxlY3RfYWxnbyh2b2lkKTsKLQotLyogUmV0dXJuIHZhbHVlcyBmcm9tIGNoa19zeW5kcm9tZSAqLwotI2RlZmluZSBSQUlENl9PSwkwCi0jZGVmaW5lIFJBSUQ2X1BfQkFECTEKLSNkZWZpbmUgUkFJRDZfUV9CQUQJMgotI2RlZmluZSBSQUlENl9QUV9CQUQJMwotCi0vKiBHYWxvaXMgZmllbGQgdGFibGVzICovCi1leHRlcm4gY29uc3QgdTggcmFpZDZfZ2ZtdWxbMjU2XVsyNTZdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpOwotZXh0ZXJuIGNvbnN0IHU4IHJhaWQ2X2dmZXhwWzI1Nl0gICAgICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDI1NikpKTsKLWV4dGVybiBjb25zdCB1OCByYWlkNl9nZmludlsyNTZdICAgICAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSk7Ci1leHRlcm4gY29uc3QgdTggcmFpZDZfZ2ZleGlbMjU2XSAgICAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpOwotCi0vKiBSZWNvdmVyeSByb3V0aW5lcyAqLwotdm9pZCByYWlkNl8yZGF0YV9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsIHZvaWQgKipwdHJzKTsKLXZvaWQgcmFpZDZfZGF0YXBfcmVjb3YoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgdm9pZCAqKnB0cnMpOwotdm9pZCByYWlkNl9kdWFsX3JlY292KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwgdm9pZCAqKnB0cnMpOwotCi0vKiBTb21lIGRlZmluaXRpb25zIHRvIGFsbG93IGNvZGUgdG8gYmUgY29tcGlsZWQgZm9yIHRlc3RpbmcgaW4gdXNlcnNwYWNlICovCi0jaWZuZGVmIF9fS0VSTkVMX18KLQotIyBkZWZpbmUgamlmZmllcwlyYWlkNl9qaWZmaWVzKCkKLSMgZGVmaW5lIHByaW50ayAJcHJpbnRmCi0jIGRlZmluZSBHRlBfS0VSTkVMCTAKLSMgZGVmaW5lIF9fZ2V0X2ZyZWVfcGFnZXMoeCx5KQkoKHVuc2lnbmVkIGxvbmcpbW1hcChOVUxMLCBQQUdFX1NJWkUgPDwgKHkpLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgMCwgMCkpCi0jIGRlZmluZSBmcmVlX3BhZ2VzKHgseSkJbXVubWFwKCh2b2lkICopKHgpLCAoeSkqUEFHRV9TSVpFKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlbGF4KHZvaWQpCi17Ci0JLyogTm90aGluZyAqLwotfQotCi0jdW5kZWYgIEhaCi0jZGVmaW5lIEhaIDEwMDAKLXN0YXRpYyBpbmxpbmUgdWludDMyX3QgcmFpZDZfamlmZmllcyh2b2lkKQotewotCXN0cnVjdCB0aW1ldmFsIHR2OwotCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwotCXJldHVybiB0di50dl9zZWMqMTAwMCArIHR2LnR2X3VzZWMvMTAwMDsKLX0KLQotI2VuZGlmIC8qICEgX19LRVJORUxfXyAqLwotCi0jZW5kaWYgLyogTElOVVhfUkFJRF9SQUlENl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2YWxnb3MuYyBiL2RyaXZlcnMvbWQvcmFpZDZhbGdvcy5jCmluZGV4IDIxOTg3ZTMuLjg2NjIxNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZhbGdvcy5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZhbGdvcy5jCkBAIC01LDcgKzUsNyBAQAogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MyBUZW1wbGUgUGxhY2UgU3RlIDMzMCwKLSAqICAgQm9zdG9tIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbjsgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE2LDEzICsxNiwyMCBAQAogICogQWxnb3JpdGhtIGxpc3QgYW5kIGFsZ29yaXRobSBzZWxlY3Rpb24gZm9yIFJBSUQtNgogICovCiAKLSNpbmNsdWRlICJyYWlkNi5oIgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD4KICNpZm5kZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbHNlCisjaWYgIVJBSUQ2X1VTRV9FTVBUWV9aRVJPX1BBR0UKKy8qIEluIC5ic3Mgc28gaXQncyB6ZXJvZWQgKi8KK2NvbnN0IGNoYXIgcmFpZDZfZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSk7CitFWFBPUlRfU1lNQk9MKHJhaWQ2X2VtcHR5X3plcm9fcGFnZSk7CisjZW5kaWYKICNlbmRpZgogCiBzdHJ1Y3QgcmFpZDZfY2FsbHMgcmFpZDZfY2FsbDsKK0VYUE9SVF9TWU1CT0xfR1BMKHJhaWQ2X2NhbGwpOwogCiAvKiBWYXJpb3VzIHJvdXRpbmUgc2V0cyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9pbnR4MTsKQEAgLTc5LDYgKzg2LDcgQEAKICNlbHNlCiAvKiBOZWVkIG1vcmUgdGltZSB0byBiZSBzdGFibGUgaW4gdXNlcnNwYWNlICovCiAjZGVmaW5lIFJBSUQ2X1RJTUVfSklGRklFU19MRzIJOQorI2RlZmluZSB0aW1lX2JlZm9yZSh4LCB5KSAoKHgpIDwgKHkpKQogI2VuZGlmCiAKIC8qIFRyeSB0byBwaWNrIHRoZSBiZXN0IGFsZ29yaXRobSAqLwpAQCAtMTUyLDMgKzE2MCwxMiBAQAogCiAJcmV0dXJuIGJlc3QgPyAwIDogLUVJTlZBTDsKIH0KKworc3RhdGljIHZvaWQgcmFpZDZfZXhpdCh2b2lkKQoreworCWRvIHsgfSB3aGlsZSAoMCk7Cit9CisKK3N1YnN5c19pbml0Y2FsbChyYWlkNl9zZWxlY3RfYWxnbyk7Cittb2R1bGVfZXhpdChyYWlkNl9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZhbHRpdmVjLnVjIGIvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMKaW5kZXggYjlhZmQzNS4uNjk5ZGZlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMKKysrIGIvZHJpdmVycy9tZC9yYWlkNmFsdGl2ZWMudWMKQEAgLTUsNyArNSw3IEBACiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUzIFRlbXBsZSBQbGFjZSBTdGUgMzMwLAotICogICBCb3N0b20gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uOyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjIsNyArMjIsNyBAQAogICogYnJhY2tlZCB0aGlzIHdpdGggcHJlZW1wdF9kaXNhYmxlL2VuYWJsZSBvciBpbiBhIGxvY2spCiAgKi8KIAotI2luY2x1ZGUgInJhaWQ2LmgiCisjaW5jbHVkZSA8bGludXgvcmFpZC9wcS5oPgogCiAjaWZkZWYgQ09ORklHX0FMVElWRUMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNmludC51YyBiL2RyaXZlcnMvbWQvcmFpZDZpbnQudWMKaW5kZXggYWQwMDRjZS4uZjliZjljYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNmludC51YworKysgYi9kcml2ZXJzL21kL3JhaWQ2aW50LnVjCkBAIC01LDcgKzUsNyBAQAogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MyBUZW1wbGUgUGxhY2UgU3RlIDMzMCwKLSAqICAgQm9zdG9tIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQTsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbjsgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTE4LDcgKzE4LDcgQEAKICAqIFRoaXMgZmlsZSBpcyBwb3N0cHJvY2Vzc2VkIHVzaW5nIHVucm9sbC5wbAogICovCiAKLSNpbmNsdWRlICJyYWlkNi5oIgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD4KIAogLyoKICAqIFRoaXMgaXMgdGhlIEMgZGF0YSB0eXBlIHRvIHVzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNm1teC5jIGIvZHJpdmVycy9tZC9yYWlkNm1teC5jCmluZGV4IGQ0ZTRhMWIuLmU3ZjZjMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZtbXguYworKysgYi9kcml2ZXJzL21kL3JhaWQ2bW14LmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUzIFRlbXBsZSBQbGFjZSBTdGUgMzMwLAotICogICBCb3N0b20gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uOyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTgsNyArMTgsNyBAQAogCiAjaWYgZGVmaW5lZChfX2kzODZfXykgJiYgIWRlZmluZWQoX19hcmNoX3VtX18pCiAKLSNpbmNsdWRlICJyYWlkNi5oIgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD4KICNpbmNsdWRlICJyYWlkNng4Ni5oIgogCiAvKiBTaGFyZWQgd2l0aCByYWlkNnNzZTEuYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNnJlY292LmMgYi9kcml2ZXJzL21kL3JhaWQ2cmVjb3YuYwppbmRleCBhOGM0ZDk0Li4yNjA5ZjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2cmVjb3YuYworKysgYi9kcml2ZXJzL21kL3JhaWQ2cmVjb3YuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTMgVGVtcGxlIFBsYWNlIFN0ZSAzMzAsCi0gKiAgIEJvc3RvbSBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb247IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xOCw3ICsxOCw3IEBACiAgKiB0aGUgc3luZHJvbWUuKQogICovCiAKLSNpbmNsdWRlICJyYWlkNi5oIgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD4KIAogLyogUmVjb3ZlciB0d28gZmFpbGVkIGRhdGEgYmxvY2tzLiAqLwogdm9pZCByYWlkNl8yZGF0YV9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCBpbnQgZmFpbGIsCkBAIC02Myw5ICs2Myw3IEBACiAJCXArKzsgcSsrOwogCX0KIH0KLQotCi0KK0VYUE9SVF9TWU1CT0xfR1BMKHJhaWQ2XzJkYXRhX3JlY292KTsKIAogLyogUmVjb3ZlciBmYWlsdXJlIG9mIG9uZSBkYXRhIGJsb2NrIHBsdXMgdGhlIFAgYmxvY2sgKi8KIHZvaWQgcmFpZDZfZGF0YXBfcmVjb3YoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgdm9pZCAqKnB0cnMpCkBAIC05Nyw5ICs5NSwxMCBAQAogCQlxKys7IGRxKys7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwocmFpZDZfZGF0YXBfcmVjb3YpOwogCi0KLSNpZm5kZWYgX19LRVJORUxfXwkJLyogVGVzdGluZyBvbmx5ICovCisjaWZuZGVmIF9fS0VSTkVMX18KKy8qIFRlc3Rpbmcgb25seSAqLwogCiAvKiBSZWNvdmVyIHR3byBmYWlsZWQgYmxvY2tzLiAqLwogdm9pZCByYWlkNl9kdWFsX3JlY292KGludCBkaXNrcywgc2l6ZV90IGJ5dGVzLCBpbnQgZmFpbGEsIGludCBmYWlsYiwgdm9pZCAqKnB0cnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ2c3NlMS5jIGIvZHJpdmVycy9tZC9yYWlkNnNzZTEuYwppbmRleCAwNjY2MjM3Li5iMjc0ZGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2c3NlMS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDZzc2UxLmMKQEAgLTUsNyArNSw3IEBACiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUzIFRlbXBsZSBQbGFjZSBTdGUgMzMwLAotICogICBCb3N0b20gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uOyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjMsNyArMjMsNyBAQAogCiAjaWYgZGVmaW5lZChfX2kzODZfXykgJiYgIWRlZmluZWQoX19hcmNoX3VtX18pCiAKLSNpbmNsdWRlICJyYWlkNi5oIgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD4KICNpbmNsdWRlICJyYWlkNng4Ni5oIgogCiAvKiBEZWZpbmVkIGluIHJhaWQ2bW14LmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDZzc2UyLmMgYi9kcml2ZXJzL21kL3JhaWQ2c3NlMi5jCmluZGV4IGIwMzRhZDguLjZlZDZjNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZzc2UyLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNnNzZTIuYwpAQCAtNSw3ICs1LDcgQEAKICAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTMgVGVtcGxlIFBsYWNlIFN0ZSAzMzAsCi0gKiAgIEJvc3RvbSBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb247IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xOSw3ICsxOSw3IEBACiAKICNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkgJiYgIWRlZmluZWQoX19hcmNoX3VtX18pCiAKLSNpbmNsdWRlICJyYWlkNi5oIgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvcHEuaD4KICNpbmNsdWRlICJyYWlkNng4Ni5oIgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJhaWQ2X3NzZV9jb25zdGFudHMgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNnRlc3QvTWFrZWZpbGUgYi9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZQppbmRleCA3OGUwMzk2Li41OGZmZGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21kL3JhaWQ2dGVzdC9NYWtlZmlsZQpAQCAtNSw3ICs1LDcgQEAKIAogQ0MJID0gZ2NjCiBPUFRGTEFHUyA9IC1PMgkJCSMgQWRqdXN0IGFzIGRlc2lyZWQKLUNGTEFHUwkgPSAtSS4uIC1nICQoT1BURkxBR1MpCitDRkxBR1MJID0gLUkuLiAtSSAuLi8uLi8uLi9pbmNsdWRlIC1nICQoT1BURkxBR1MpCiBMRAkgPSBsZAogUEVSTAkgPSBwZXJsCiBBUgkgPSBhcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNnRlc3QvdGVzdC5jIGIvZHJpdmVycy9tZC9yYWlkNnRlc3QvdGVzdC5jCmluZGV4IDU1OWNjNDEuLjdhOTMwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZ0ZXN0L3Rlc3QuYworKysgYi9kcml2ZXJzL21kL3JhaWQ2dGVzdC90ZXN0LmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgInJhaWQ2LmgiCisjaW5jbHVkZSA8bGludXgvcmFpZC9wcS5oPgogCiAjZGVmaW5lIE5ESVNLUwkJMTYJLyogSW5jbHVkaW5nIFAgYW5kIFEgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9yYWlkNng4Ni5oIGIvZHJpdmVycy9tZC9yYWlkNng4Ni5oCmluZGV4IDk5ZmVhN2EuLjRjMjJjMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDZ4ODYuaAorKysgYi9kcml2ZXJzL21kL3JhaWQ2eDg2LmgKQEAgLTUsNyArNSw3IEBACiAgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUzIFRlbXBsZSBQbGFjZSBTdGUgMzMwLAotICogICBCb3N0b20gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uOyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZwppbmRleCA1MmMzZjY1Li42MDdkMzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiB0dW5lciBYQzUwMDAgZnJvbSBYY2VpdmUuCi0JICBUaGlzIGRldmljZSBpcyBvbmx5IHVzZWQgaW5zaWRlIGEgU2lQIGNhbGxlZCB0b2d0aGVyIHdpdGggYQorCSAgVGhpcyBkZXZpY2UgaXMgb25seSB1c2VkIGluc2lkZSBhIFNpUCBjYWxsZWQgdG9nZXRoZXIgd2l0aCBhCiAJICBkZW1vZHVsYXRvciBmb3Igbm93LgogCiBjb25maWcgTUVESUFfVFVORVJfTVhMNTAwNVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKaW5kZXggYTIwNmNlZS4uYTQ4NmE3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKQEAgLTQ3OSw3ICs0NzksNyBAQAogCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBkcml2ZXIgZm9yIHRoZSBzaWxpY29uIGJhc2ViYW5kIHR1bmVyIERpQjAwNzAgZnJvbSBEaUJjb20uCi0JICBUaGlzIGRldmljZSBpcyBvbmx5IHVzZWQgaW5zaWRlIGEgU2lQIGNhbGxlZCB0b2d0aGVyIHdpdGggYQorCSAgVGhpcyBkZXZpY2UgaXMgb25seSB1c2VkIGluc2lkZSBhIFNpUCBjYWxsZWQgdG9nZXRoZXIgd2l0aCBhCiAJICBkZW1vZHVsYXRvciBmb3Igbm93LgogCiBjb21tZW50ICJTRUMgY29udHJvbCBkZXZpY2VzIGZvciBEVkItUyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kcngzOTd4RC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmMKaW5kZXggMWU4MWU3MS4uMTcyZjFmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RyeDM5N3hELmMKQEAgLTc0LDcgKzc0LDcgQEAKIH0gZndbXSA9IHsKICNkZWZpbmUgX0ZXX0VOVFJZKGEsIGIsIGMpCXsJCQkJCVwKIAkJCS5uYW1lCT0gYSwJCQkJCVwKLQkJCS5maWxlCT0gMCwJCQkJCVwKKwkJCS5maWxlCT0gTlVMTCwJCQkJCVwKIAkJCS5sb2NrCT0gX19SV19MT0NLX1VOTE9DS0VEKGZ3W2NdLmxvY2spLAlcCiAJCQkucmVmY250ID0gMCwJCQkJCVwKIAkJCS5kYXRhCT0geyB9CQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCAwNmEyYjBmLi5lZTM5MjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTUyLDYgKzUyLDcgQEAKIAogY29uZmlnIEhUQ19QQVNJQzMKIAl0cmlzdGF0ZSAiSFRDIFBBU0lDMyBMRUQvRFMxV00gY2hpcCBzdXBwb3J0IgorCXNlbGVjdCBNRkRfQ09SRQogCWhlbHAKIAkgIFRoaXMgY29yZSBkcml2ZXIgcHJvdmlkZXMgcmVnaXN0ZXIgYWNjZXNzIGZvciB0aGUgTEVEL0RTMVdNCiAJICBjaGlwcyBsYWJlbGVkICJBSUMyIiBhbmQgIkFJQzMiLCBmb3VuZCBvbiBIVEMgQmx1ZWFuZ2VsIGFuZApAQCAtODgsNyArODksNyBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMKIAkgIFRXTDkyMzMwL01lbmVsYXVzIFBvd2VyIE1hbmFnZW1lbnQgY2hpcC4gVGhpcyBpbmNsdWRlIHZvbHRhZ2UKLQkgIHJlZ3VsYXRvcnMsIER1YWwgc2xvdCBtZW1vcnkgY2FyZCB0cmFuY2VpdmVycywgcmVhbC10aW1lIGNsb2NrCisJICByZWd1bGF0b3JzLCBEdWFsIHNsb3QgbWVtb3J5IGNhcmQgdHJhbnNjZWl2ZXJzLCByZWFsLXRpbWUgY2xvY2sKIAkgIGFuZCBvdGhlciBmZWF0dXJlcyB0aGF0IGFyZSBvZnRlbiB1c2VkIGluIHBvcnRhYmxlIGRldmljZXMgbGlrZQogCSAgY2VsbCBwaG9uZXMgYW5kIFBEQXMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2RhOTAzeC5jIGIvZHJpdmVycy9tZmQvZGE5MDN4LmMKaW5kZXggOTlmOGRjZi4uNzI4M2Q4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvZGE5MDN4LmMKKysrIGIvZHJpdmVycy9tZmQvZGE5MDN4LmMKQEAgLTQxMyw3ICs0MTMsNyBAQAogCWVuYWJsZV9pcnEoY2hpcC0+Y2xpZW50LT5pcnEpOwogfQogCi1zdGF0aWMgaW50IGRhOTAzeF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQorc3RhdGljIGlycXJldHVybl90IGRhOTAzeF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBkYTkwM3hfY2hpcCAqY2hpcCA9IGRhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2h0Yy1wYXNpYzMuYyBiL2RyaXZlcnMvbWZkL2h0Yy1wYXNpYzMuYwppbmRleCA5MWIyOTRkLi4zODZkYTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9odGMtcGFzaWMzLmMKKysrIGIvZHJpdmVycy9tZmQvaHRjLXBhc2ljMy5jCkBAIC0xMiwxOCArMTIsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2RzMXdtLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZHMxd20uaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvaHRjLXBhc2ljMy5oPgogCiBzdHJ1Y3QgcGFzaWMzX2RhdGEgewogCXZvaWQgX19pb21lbSAqbWFwcGluZzsKIAl1bnNpZ25lZCBpbnQgYnVzX3NoaWZ0OwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRzMXdtX3BkZXY7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbGVkX3BkZXY7CiB9OwogCiAjZGVmaW5lIFJFR19BRERSICA1CkBAIC02NSw0NiArNjQsMTUgQEAKICAqIExFRHMKICAqLwogCi1zdGF0aWMgaW50IGxlZF9kZXZpY2VfYWRkKHN0cnVjdCBkZXZpY2UgKnBhc2ljM19kZXYsCi0JCQkJY29uc3Qgc3RydWN0IHBhc2ljM19sZWRzX21hY2hpbmZvICpwZGF0YSkKLXsKLQlzdHJ1Y3QgcGFzaWMzX2RhdGEgKmFzaWMgPSBwYXNpYzNfZGV2LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCWludCByZXQ7Ci0KLQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJwYXNpYzMtbGVkIiwgLTEpOwotCWlmICghcGRldikgewotCQlkZXZfZGJnKHBhc2ljM19kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgTEVEIHBsYXRmb3JtIGRldmljZVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBwZGF0YSwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBwYXNpYzNfbGVkc19tYWNoaW5mbykpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9kYmcocGFzaWMzX2RldiwgImZhaWxlZCB0byBhZGQgTEVEIHBsYXRmb3JtIGRhdGFcbiIpOwotCQlnb3RvIGV4aXRfcGRldl9wdXQ7Ci0JfQotCi0JcGRldi0+ZGV2LnBhcmVudCA9IHBhc2ljM19kZXY7Ci0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZGJnKHBhc2ljM19kZXYsICJmYWlsZWQgdG8gYWRkIExFRCBwbGF0Zm9ybSBkZXZpY2VcbiIpOwotCQlnb3RvIGV4aXRfcGRldl9wdXQ7Ci0JfQotCi0JYXNpYy0+bGVkX3BkZXYgPSBwZGV2OwotCXJldHVybiAwOwotCi1leGl0X3BkZXZfcHV0OgotCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7Ci0JcmV0dXJuIHJldDsKLX0KK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgbGVkX2NlbGwgX19pbml0ZGF0YSA9IHsKKwkubmFtZSA9ICJsZWRzLXBhc2ljMyIsCit9OwogCiAvKgogICogRFMxV00KICAqLwogCi1zdGF0aWMgdm9pZCBkczF3bV9lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgZHMxd21fZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcGRldi0+ZGV2LnBhcmVudDsKIAlpbnQgYzsKQEAgLTExMyw5ICs4MSwxMCBAQAogCXBhc2ljM193cml0ZV9yZWdpc3RlcihkZXYsIDB4MjgsIGMgJiAweDdmKTsKIAogCWRldl9kYmcoZGV2LCAiRFMxV00gT1dNX0VOIGxvdyAoYWN0aXZlKSAlMDJ4XG4iLCBjICYgMHg3Zik7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRzMXdtX2Rpc2FibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgZHMxd21fZGlzYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkZXYtPmRldi5wYXJlbnQ7CiAJaW50IGM7CkBAIC0xMjQsNTYgKzkzLDMzIEBACiAJcGFzaWMzX3dyaXRlX3JlZ2lzdGVyKGRldiwgMHgyOCwgYyB8IDB4ODApOwogCiAJZGV2X2RiZyhkZXYsICJEUzFXTSBPV01fRU4gaGlnaCAoaW5hY3RpdmUpICUwMnhcbiIsIGMgfCAweDgwKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkczF3bV9wbGF0Zm9ybV9kYXRhIGRzMXdtX3BkYXRhID0gewotCS5idXNfc2hpZnQgPSAyLAotCS5lbmFibGUgICAgPSBkczF3bV9lbmFibGUsCi0JLmRpc2FibGUgICA9IGRzMXdtX2Rpc2FibGUsCitzdGF0aWMgc3RydWN0IGRzMXdtX2RyaXZlcl9kYXRhIGRzMXdtX3BkYXRhID0geworCS5hY3RpdmVfaGlnaCA9IDAsCiB9OwogCi1zdGF0aWMgaW50IGRzMXdtX2RldmljZV9hZGQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGFzaWMzX3BkZXYsIGludCBidXNfc2hpZnQpCi17Ci0Jc3RydWN0IGRldmljZSAqcGFzaWMzX2RldiA9ICZwYXNpYzNfcGRldi0+ZGV2OwotCXN0cnVjdCBwYXNpYzNfZGF0YSAqYXNpYyA9IHBhc2ljM19kZXYtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0JaW50IHJldDsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZHMxd21fcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgPSAwLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSAwLAorCQkuZW5kICAgID0gMCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OwogCi0JcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiZHMxd20iLCAtMSk7Ci0JaWYgKCFwZGV2KSB7Ci0JCWRldl9kYmcocGFzaWMzX2RldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBEUzFXTSBwbGF0Zm9ybSBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCBwYXNpYzNfcGRldi0+cmVzb3VyY2UsCi0JCQkJCQlwYXNpYzNfcGRldi0+bnVtX3Jlc291cmNlcyk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2RiZyhwYXNpYzNfZGV2LCAiZmFpbGVkIHRvIGFkZCBEUzFXTSByZXNvdXJjZXNcbiIpOwotCQlnb3RvIGV4aXRfcGRldl9wdXQ7Ci0JfQotCi0JZHMxd21fcGRhdGEuYnVzX3NoaWZ0ID0gYXNpYy0+YnVzX3NoaWZ0OwotCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCAmZHMxd21fcGRhdGEsCi0JCQkJCXNpemVvZihzdHJ1Y3QgZHMxd21fcGxhdGZvcm1fZGF0YSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9kYmcocGFzaWMzX2RldiwgImZhaWxlZCB0byBhZGQgRFMxV00gcGxhdGZvcm0gZGF0YVxuIik7Ci0JCWdvdG8gZXhpdF9wZGV2X3B1dDsKLQl9Ci0KLQlwZGV2LT5kZXYucGFyZW50ID0gcGFzaWMzX2RldjsKLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKHBkZXYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9kYmcocGFzaWMzX2RldiwgImZhaWxlZCB0byBhZGQgRFMxV00gcGxhdGZvcm0gZGV2aWNlXG4iKTsKLQkJZ290byBleGl0X3BkZXZfcHV0OwotCX0KLQotCWFzaWMtPmRzMXdtX3BkZXYgPSBwZGV2OwotCXJldHVybiAwOwotCi1leGl0X3BkZXZfcHV0OgotCXBsYXRmb3JtX2RldmljZV9wdXQocGRldik7Ci0JcmV0dXJuIHJldDsKLX0KK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgZHMxd21fY2VsbCBfX2luaXRkYXRhID0geworCS5uYW1lICAgICAgICAgID0gImRzMXdtIiwKKwkuZW5hYmxlICAgICAgICA9IGRzMXdtX2VuYWJsZSwKKwkuZGlzYWJsZSAgICAgICA9IGRzMXdtX2Rpc2FibGUsCisJLmRyaXZlcl9kYXRhICAgPSAmZHMxd21fcGRhdGEsCisJLm51bV9yZXNvdXJjZXMgPSAyLAorCS5yZXNvdXJjZXMgICAgID0gZHMxd21fcmVzb3VyY2VzLAorfTsKIAogc3RhdGljIGludCBfX2luaXQgcGFzaWMzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC0xODIsMTIgKzEyOCwyNyBAQAogCXN0cnVjdCBwYXNpYzNfZGF0YSAqYXNpYzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAJaW50IHJldDsKKwlpbnQgaXJxID0gMDsKKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChyKSB7CisJCWRzMXdtX3Jlc291cmNlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIHwgKHItPmZsYWdzICYKKwkJCShJT1JFU09VUkNFX0lSUV9ISUdIRURHRSB8IElPUkVTT1VSQ0VfSVJRX0xPV0VER0UpKTsKKwkJaXJxID0gci0+c3RhcnQ7CisJfQorCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHIpIHsKKwkJZHMxd21fcmVzb3VyY2VzWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCAoci0+ZmxhZ3MgJgorCQkJKElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFIHwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSkpOworCQlpcnEgPSByLT5zdGFydDsKKwl9CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXIpCiAJCXJldHVybiAtRU5YSU87CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxLCAicGFzaWMzIikpCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUociksICJwYXNpYzMiKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWFzaWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGFzaWMzX2RhdGEpLCBHRlBfS0VSTkVMKTsKQEAgLTE5NiwyNCArMTU3LDMzIEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhc2ljKTsKIAotCWlmIChwZGF0YSAmJiBwZGF0YS0+YnVzX3NoaWZ0KQotCQlhc2ljLT5idXNfc2hpZnQgPSBwZGF0YS0+YnVzX3NoaWZ0OwotCWVsc2UKLQkJYXNpYy0+YnVzX3NoaWZ0ID0gMjsKLQotCWFzaWMtPm1hcHBpbmcgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCWFzaWMtPm1hcHBpbmcgPSBpb3JlbWFwKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlpZiAoIWFzaWMtPm1hcHBpbmcpIHsKIAkJZGV2X2VycihkZXYsICJjb3VsZG4ndCBpb3JlbWFwIFBBU0lDM1xuIik7CiAJCWtmcmVlKGFzaWMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlyZXQgPSBkczF3bV9kZXZpY2VfYWRkKHBkZXYsIGFzaWMtPmJ1c19zaGlmdCk7Ci0JaWYgKHJldCA8IDApCi0JCWRldl93YXJuKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBEUzFXTVxuIik7CisJLyogY2FsY3VsYXRlIGJ1cyBzaGlmdCBmcm9tIG1lbSByZXNvdXJjZSAqLworCWFzaWMtPmJ1c19zaGlmdCA9IChyZXNvdXJjZV9zaXplKHIpIC0gNSkgPj4gMzsKIAotCWlmIChwZGF0YS0+bGVkX3BkYXRhKSB7Ci0JCXJldCA9IGxlZF9kZXZpY2VfYWRkKGRldiwgcGRhdGEtPmxlZF9wZGF0YSk7CisJaWYgKHBkYXRhICYmIHBkYXRhLT5jbG9ja19yYXRlKSB7CisJCWRzMXdtX3BkYXRhLmNsb2NrX3JhdGUgPSBwZGF0YS0+Y2xvY2tfcmF0ZTsKKwkJLyogdGhlIGZpcnN0IDUgUEFTSUMzIHJlZ2lzdGVycyBjb250cm9sIHRoZSBEUzFXTSAqLworCQlkczF3bV9yZXNvdXJjZXNbMF0uZW5kID0gKDUgPDwgYXNpYy0+YnVzX3NoaWZ0KSAtIDE7CisJCWRzMXdtX2NlbGwucGxhdGZvcm1fZGF0YSA9ICZkczF3bV9jZWxsOworCQlkczF3bV9jZWxsLmRhdGFfc2l6ZSA9IHNpemVvZihkczF3bV9jZWxsKTsKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKCZwZGV2LT5kZXYsIHBkZXYtPmlkLAorCQkJCSZkczF3bV9jZWxsLCAxLCByLCBpcnEpOworCQlpZiAocmV0IDwgMCkKKwkJCWRldl93YXJuKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBEUzFXTVxuIik7CisJfQorCisJaWYgKHBkYXRhICYmIHBkYXRhLT5sZWRfcGRhdGEpIHsKKwkJbGVkX2NlbGwuZHJpdmVyX2RhdGEgPSBwZGF0YS0+bGVkX3BkYXRhOworCQlsZWRfY2VsbC5wbGF0Zm9ybV9kYXRhID0gJmxlZF9jZWxsOworCQlsZWRfY2VsbC5kYXRhX3NpemUgPSBzaXplb2YoZHMxd21fY2VsbCk7CisJCXJldCA9IG1mZF9hZGRfZGV2aWNlcygmcGRldi0+ZGV2LCBwZGV2LT5pZCwgJmxlZF9jZWxsLCAxLCByLCAwKTsKIAkJaWYgKHJldCA8IDApCiAJCQlkZXZfd2FybihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgTEVEIGRldmljZVxuIik7CiAJfQpAQCAtMjI2LDE0ICsxOTYsMTEgQEAKIAlzdHJ1Y3QgcGFzaWMzX2RhdGEgKmFzaWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAKLQlpZiAoYXNpYy0+bGVkX3BkZXYpCi0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGFzaWMtPmxlZF9wZGV2KTsKLQlpZiAoYXNpYy0+ZHMxd21fcGRldikKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYXNpYy0+ZHMxd21fcGRldik7CisJbWZkX3JlbW92ZV9kZXZpY2VzKCZwZGV2LT5kZXYpOwogCiAJaW91bm1hcChhc2ljLT5tYXBwaW5nKTsKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAlrZnJlZShhc2ljKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3BjZjUwNjMzLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3BjZjUwNjMzLWNvcmUuYwppbmRleCAyZTM2MDU3NjUuLjc3OTM5MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3BjZjUwNjMzLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC9wY2Y1MDYzMy1jb3JlLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90N2w2NnhiLmMgYi9kcml2ZXJzL21mZC90N2w2NnhiLmMKaW5kZXggOWY3MDI0YzAuLmU5ZjQzMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3Q3bDY2eGIuYworKysgYi9kcml2ZXJzL21mZC90N2w2NnhiLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotY29uc3Qgc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0N2w2NnhiX21tY19yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgdDdsNjZ4Yl9tbWNfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQgPSAweDgwMCwKIAkJLmVuZAk9IDB4OWZmLApAQCAtMTI2LDcgKzEyNiw3IEBACiAJfSwKIH07CiAKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdDdsNjZ4Yl9uYW5kX3Jlc291cmNlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0N2w2NnhiX25hbmRfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQJPSAweGMwMCwKIAkJLmVuZAk9IDB4YzA3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKaW5kZXggZjg1NmU5NC4uNzdhMTJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYworKysgYi9kcml2ZXJzL21mZC90YzYzOTN4Yi5jCkBAIC0xNzIsNyArMTcyLDcgQEAKIAl9LAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0YzYzOTN4Yl9vaGNpX3Jlc291cmNlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSB0YzYzOTN4Yl9vaGNpX3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0CT0gMHgzMDAwLAogCQkuZW5kCT0gMHgzMWZmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1jb3JlLmMgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwppbmRleCA2ODgyNmYxLi5lYzkwZTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLWNvcmUuYwpAQCAtNTkyLDExICs1OTIsOSBAQAogCiAJLyogbWF5YmUgYWRkIExET3MgdGhhdCBhcmUgb21pdHRlZCBvbiBjb3N0LXJlZHVjZWQgcGFydHMgKi8KIAlpZiAodHdsX2hhc19yZWd1bGF0b3IoKSAmJiAhKGZlYXR1cmVzICYgVFBTX1NVQlNFVCkpIHsKLQkJLyoKIAkJY2hpbGQgPSBhZGRfcmVndWxhdG9yKFRXTDQwMzBfUkVHX1ZQTEwyLCBwZGF0YS0+dnBsbDIpOwogCQlpZiAoSVNfRVJSKGNoaWxkKSkKIAkJCXJldHVybiBQVFJfRVJSKGNoaWxkKTsKLQkJKi8KIAogCQljaGlsZCA9IGFkZF9yZWd1bGF0b3IoVFdMNDAzMF9SRUdfVk1NQzIsIHBkYXRhLT52bW1jMik7CiAJCWlmIChJU19FUlIoY2hpbGQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1pcnEuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtaXJxLmMKaW5kZXggYjEwODc2MC4uYWNhMjY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHdsNDAzMC1pcnEuYworKysgYi9kcml2ZXJzL21mZC90d2w0MDMwLWlycS5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAlsb25nIGlycSA9IChsb25nKWRhdGE7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlzdGF0aWMgdW5zaWduZWQgaTJjX2Vycm9yczsKLQljb25zdCBzdGF0aWMgdW5zaWduZWQgbWF4X2kyY19lcnJvcnMgPSAxMDA7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heF9pMmNfZXJyb3JzID0gMTAwOwogCiAJaWYgKCFkZXNjKSB7CiAJCXByX2VycigidHdsNDAzMDogSW52YWxpZCBJUlE6ICVsZFxuIiwgaXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMgYi9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCmluZGV4IGI0NTdhMDUuLmMyYmUzMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYwpAQCAtMTExMSw3ICsxMTExLDcgQEAKIAlkbyB7CiAJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKIAkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RJR0lUSVNFUl9DT05UUk9MXzEpOwotCX0gd2hpbGUgKC0tdHJpZXMgJiYgKHJlZyAmIFdNODM1MF9BVVhBRENfUE9MTCkpOworCX0gd2hpbGUgKChyZWcgJiBXTTgzNTBfQVVYQURDX1BPTEwpICYmIC0tdHJpZXMpOwogCiAJaWYgKCF0cmllcykKIAkJZGV2X2Vycih3bTgzNTAtPmRldiwgImFkYyBjaG4gJWQgcmVhZCB0aW1lb3V0XG4iLCBjaGFubmVsKTsKQEAgLTEyMzgsNyArMTIzOCw3IEBACiAJfQogCiAJd204MzUwLT5yZWdfY2FjaGUgPQotCSAgICBremFsbG9jKHNpemVvZih1MTYpICogKFdNODM1MF9NQVhfUkVHSVNURVIgKyAxKSwgR0ZQX0tFUk5FTCk7CisJCWttYWxsb2Moc2l6ZW9mKHUxNikgKiAoV004MzUwX01BWF9SRUdJU1RFUiArIDEpLCBHRlBfS0VSTkVMKTsKIAlpZiAod204MzUwLT5yZWdfY2FjaGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEyNDYsMTcgKzEyNDYsMjAgQEAKIAkgKiBhIFBNSUMgc28gdGhlIGRldmljZSBtYW55IG5vdCBiZSBpbiBhIHZpcmdpbiBzdGF0ZSBhbmQgd2UKIAkgKiBjYW4ndCByZWx5IG9uIHRoZSBzaWxpY29uIHZhbHVlcy4KIAkgKi8KKwlyZXQgPSB3bTgzNTAtPnJlYWRfZGV2KHdtODM1MCwgMCwKKwkJCSAgICAgICBzaXplb2YodTE2KSAqIChXTTgzNTBfTUFYX1JFR0lTVEVSICsgMSksCisJCQkgICAgICAgd204MzUwLT5yZWdfY2FjaGUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIod204MzUwLT5kZXYsCisJCQkiZmFpbGVkIHRvIHJlYWQgaW5pdGlhbCBjYWNoZSB2YWx1ZXNcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBNYXNrIG91dCB1bmNhY2hlYWJsZS91bnJlYWRhYmxlIGJpdHMgYW5kIHRoZSBhdWRpby4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgV004MzUwX01BWF9SRUdJU1RFUjsgaSsrKSB7Ci0JCS8qIGF1ZGlvIHJlZ2lzdGVyIHJhbmdlICovCiAJCWlmICh3bTgzNTBfcmVnX2lvX21hcFtpXS5yZWFkYWJsZSAmJgogCQkgICAgKGkgPCBXTTgzNTBfQ0xPQ0tfQ09OVFJPTF8xIHx8IGkgPiBXTTgzNTBfQUlGX1RFU1QpKSB7Ci0JCQlyZXQgPSB3bTgzNTAtPnJlYWRfZGV2KHdtODM1MCwgaSwgMiwgKGNoYXIgKikmdmFsdWUpOwotCQkJaWYgKHJldCA8IDApIHsKLQkJCQlkZXZfZXJyKHdtODM1MC0+ZGV2LAotCQkJCSAgICAgICAiZmFpbGVkIHRvIHJlYWQgaW5pdGlhbCBjYWNoZSB2YWx1ZVxuIik7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQl2YWx1ZSA9IGJlMTZfdG9fY3B1KHZhbHVlKTsKKwkJCXZhbHVlID0gYmUxNl90b19jcHUod204MzUwLT5yZWdfY2FjaGVbaV0pOwogCQkJdmFsdWUgJj0gd204MzUwX3JlZ19pb19tYXBbaV0ucmVhZGFibGU7CiAJCQl2YWx1ZSAmPSB+d204MzUwX3JlZ19pb19tYXBbaV0udm9sOwogCQkJd204MzUwLT5yZWdfY2FjaGVbaV0gPSB2YWx1ZTsKQEAgLTE0MzUsNyArMTQzOCwyMSBAQAogCW11dGV4X2luaXQoJndtODM1MC0+aXJxX211dGV4KTsKIAlJTklUX1dPUksoJndtODM1MC0+aXJxX3dvcmssIHdtODM1MF9pcnFfd29ya2VyKTsKIAlpZiAoaXJxKSB7Ci0JCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgd204MzUwX2lycSwgMCwKKwkJaW50IGZsYWdzID0gMDsKKworCQlpZiAocGRhdGEgJiYgcGRhdGEtPmlycV9oaWdoKSB7CisJCQlmbGFncyB8PSBJUlFGX1RSSUdHRVJfSElHSDsKKworCQkJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1NZU1RFTV9DT05UUk9MXzEsCisJCQkJCVdNODM1MF9JUlFfUE9MKTsKKwkJfSBlbHNlIHsKKwkJCWZsYWdzIHw9IElSUUZfVFJJR0dFUl9MT1c7CisKKwkJCXdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX1NZU1RFTV9DT05UUk9MXzEsCisJCQkJCSAgV004MzUwX0lSUV9QT0wpOworCQl9CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCB3bTgzNTBfaXJxLCBmbGFncywKIAkJCQkgICJ3bTgzNTAiLCB3bTgzNTApOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCWRldl9lcnIod204MzUwLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlE6ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL0tjb25maWcgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwppbmRleCAxYzQ4NDA4Li42ZDFhYzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL21pc2MvS2NvbmZpZwpAQCAtMTgsOCArMTgsOCBAQAogCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxU0FNOTI2MyB8fCBBUkNIX0FUOTFTQU05UkwgfHwgQVJDSF9BVDkxQ0FQOQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZGV2aWNlIGRyaXZlciBzdXBwb3J0IGZvciB0aGUgUFdNIGNoYW5uZWxzCi0JICBvbiBjZXJ0YWluIEF0bWVsIHByY29lc3NvcnMuICBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIGlzIHVzZWQgZm9yCi0JICBwdXJwb3NlcyBpbmNsdWRpbmcgc29mdHdhcmUgY29udHJvbGxlZCBwb3dlci1lZmZpY2VudCBiYWNrbGlnaHRzCisJICBvbiBjZXJ0YWluIEF0bWVsIHByb2Nlc3NvcnMuICBQdWxzZSBXaWR0aCBNb2R1bGF0aW9uIGlzIHVzZWQgZm9yCisJICBwdXJwb3NlcyBpbmNsdWRpbmcgc29mdHdhcmUgY29udHJvbGxlZCBwb3dlci1lZmZpY2llbnQgYmFja2xpZ2h0cwogCSAgb24gTENEIGRpc3BsYXlzLCBtb3RvciBjb250cm9sLCBhbmQgd2F2ZWZvcm0gZ2VuZXJhdGlvbi4KIAogY29uZmlnIEFUTUVMX1RDTElCCkBAIC0xNDIsNyArMTQyLDcgQEAKIAl0cmlzdGF0ZSAiRGV2aWNlIGRyaXZlciBmb3IgQXRtZWwgU1NDIHBlcmlwaGVyYWwiCiAJZGVwZW5kcyBvbiBBVlIzMiB8fCBBUkNIX0FUOTEKIAktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIGRldmljZSBkcml2ZXIgc3VwcG9ydCBmb3IgQXRtZWwgU3luY3Jvbml6ZWQKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgZGV2aWNlIGRyaXZlciBzdXBwb3J0IGZvciBBdG1lbCBTeW5jaHJvbml6ZWQKIAkgIFNlcmlhbCBDb21tdW5pY2F0aW9uIHBlcmlwaGVyYWwgKFNTQykuCiAKIAkgIFRoZSBTU0MgcGVyaXBoZXJhbCBzdXBwb3J0cyBhIHdpZGUgdmFyaWV0eSBvZiBzZXJpYWwgZnJhbWUgYmFzZWQKQEAgLTE2NSw3ICsxNjUsNyBAQAogCWRlcGVuZHMgb24gKElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9TTjIgfHwgSUE2NF9TR0lfVVYgfHwgWDg2X1VWKSAmJiBTTVAKIAlzZWxlY3QgSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1IgaWYgSUE2NF9HRU5FUklDIHx8IElBNjRfU0dJX1NOMgogCXNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUiBpZiBJQTY0X0dFTkVSSUMgfHwgSUE2NF9TR0lfU04yCi0Jc2VsZWN0IFNHSV9HUlUgaWYgKElBNjRfR0VORVJJQyB8fCBJQTY0X1NHSV9VViB8fCBYODZfNjQpICYmIFNNUAorCXNlbGVjdCBTR0lfR1JVIGlmIFg4Nl82NCAmJiBTTVAKIAktLS1oZWxwLS0tCiAJICBBbiBTR0kgbWFjaGluZSBjYW4gYmUgZGl2aWRlZCBpbnRvIG11bHRpcGxlIFNpbmdsZSBTeXN0ZW0KIAkgIEltYWdlcyB3aGljaCBhY3QgaW5kZXBlbmRlbnRseSBvZiBlYWNoIG90aGVyIGFuZCBoYXZlCkBAIC0xODksNyArMTg5LDcgQEAKIAogY29uZmlnIFNHSV9HUlUKIAl0cmlzdGF0ZSAiU0dJIEdSVSBkcml2ZXIiCi0JZGVwZW5kcyBvbiAoWDg2X1VWIHx8IElBNjRfU0dJX1VWIHx8IElBNjRfR0VORVJJQykgJiYgU01QCisJZGVwZW5kcyBvbiBYODZfVVYgJiYgU01QCiAJZGVmYXVsdCBuCiAJc2VsZWN0IE1NVV9OT1RJRklFUgogCS0tLWhlbHAtLS0KQEAgLTIyMyw2ICsyMjMsMTYgQEAKIAlUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHJma2lsbCBhbmQgYmFja2xpZ2h0IGNvbnRyb2wgdG8gRGVsbAogCWxhcHRvcHMuCiAKK2NvbmZpZyBJU0wyOTAwMworCXRyaXN0YXRlICJJbnRlcnNpbCBJU0wyOTAwMyBhbWJpZW50IGxpZ2h0IHNlbnNvciIKKwlkZXBlbmRzIG9uIEkyQyAmJiBTWVNGUworCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgSW50ZXJzaWwgSVNMMjkwMDMKKwkgIGFtYmllbnQgbGlnaHQgc2Vuc29yLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBpc2wyOTAwMy4KKwogc291cmNlICJkcml2ZXJzL21pc2MvYzJwb3J0L0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWlzYy9lZXByb20vS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9taXNjL01ha2VmaWxlCmluZGV4IGJjMTE5OTguLjc4NzFmMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKQEAgLTE4LDUgKzE4LDYgQEAKIG9iai0kKENPTkZJR19TR0lfWFApCQkrPSBzZ2kteHAvCiBvYmotJChDT05GSUdfU0dJX0dSVSkJCSs9IHNnaS1ncnUvCiBvYmotJChDT05GSUdfSFBfSUxPKQkJKz0gaHBpbG8ubworb2JqLSQoQ09ORklHX0lTTDI5MDAzKQkJKz0gaXNsMjkwMDMubwogb2JqLSQoQ09ORklHX0MyUE9SVCkJCSs9IGMycG9ydC8KIG9iai15CQkJCSs9IGVlcHJvbS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNC5jIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI0LmMKaW5kZXggZDQ3NzU1Mi4uZDE4NGRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI0LmMKKysrIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI0LmMKQEAgLTUzLDYgKzUzLDcgQEAKIAogc3RydWN0IGF0MjRfZGF0YSB7CiAJc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSBjaGlwOworCXN0cnVjdCBtZW1vcnlfYWNjZXNzb3IgbWFjYzsKIAlib29sIHVzZV9zbWJ1czsKIAogCS8qCkBAIC0yMjUsMTQgKzIyNiwxMSBAQAogCQlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3NpemVfdCBhdDI0X2Jpbl9yZWFkKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGF0MjRfcmVhZChzdHJ1Y3QgYXQyNF9kYXRhICphdDI0LAogCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgYXQyNF9kYXRhICphdDI0OwogCXNzaXplX3QgcmV0dmFsID0gMDsKIAotCWF0MjQgPSBkZXZfZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKLQogCWlmICh1bmxpa2VseSghY291bnQpKQogCQlyZXR1cm4gY291bnQ7CiAKQEAgLTI2MiwxMiArMjYwLDE0IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHNzaXplX3QgYXQyNF9iaW5fcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdDI0X2RhdGEgKmF0MjQ7CiAKLS8qCi0gKiBSRVZJU0lUOiBleHBvcnQgYXQyNF9iaW57cmVhZCx3cml0ZX0oKSB0byBsZXQgb3RoZXIga2VybmVsIGNvZGUgdXNlCi0gKiBlZXByb20gZGF0YS4gRm9yIGV4YW1wbGUsIGl0IG1pZ2h0IGhvbGQgYSBib2FyZCdzIEV0aGVybmV0IGFkZHJlc3MsIG9yCi0gKiBib2FyZC1zcGVjaWZpYyBjYWxpYnJhdGlvbiBkYXRhIGdlbmVyYXRlZCBvbiB0aGUgbWFudWZhY3R1cmluZyBmbG9vci4KLSAqLworCWF0MjQgPSBkZXZfZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKKwlyZXR1cm4gYXQyNF9yZWFkKGF0MjQsIGJ1Ziwgb2ZmLCBjb3VudCk7Cit9CiAKIAogLyoKQEAgLTM0NywxNCArMzQ3LDExIEBACiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGF0MjRfYmluX3dyaXRlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGF0MjRfd3JpdGUoc3RydWN0IGF0MjRfZGF0YSAqYXQyNCwKIAkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGF0MjRfZGF0YSAqYXQyNDsKIAlzc2l6ZV90IHJldHZhbCA9IDA7CiAKLQlhdDI0ID0gZGV2X2dldF9kcnZkYXRhKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKSk7Ci0KIAlpZiAodW5saWtlbHkoIWNvdW50KSkKIAkJcmV0dXJuIGNvdW50OwogCkBAIC0zODQsNiArMzgxLDM5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHNzaXplX3QgYXQyNF9iaW5fd3JpdGUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYXQyNF9kYXRhICphdDI0OworCisJYXQyNCA9IGRldl9nZXRfZHJ2ZGF0YShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOworCXJldHVybiBhdDI0X3dyaXRlKGF0MjQsIGJ1Ziwgb2ZmLCBjb3VudCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBUaGlzIGxldHMgb3RoZXIga2VybmVsIGNvZGUgYWNjZXNzIHRoZSBlZXByb20gZGF0YS4gRm9yIGV4YW1wbGUsIGl0CisgKiBtaWdodCBob2xkIGEgYm9hcmQncyBFdGhlcm5ldCBhZGRyZXNzLCBvciBib2FyZC1zcGVjaWZpYyBjYWxpYnJhdGlvbgorICogZGF0YSBnZW5lcmF0ZWQgb24gdGhlIG1hbnVmYWN0dXJpbmcgZmxvb3IuCisgKi8KKworc3RhdGljIHNzaXplX3QgYXQyNF9tYWNjX3JlYWQoc3RydWN0IG1lbW9yeV9hY2Nlc3NvciAqbWFjYywgY2hhciAqYnVmLAorCQkJIG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdDI0X2RhdGEgKmF0MjQgPSBjb250YWluZXJfb2YobWFjYywgc3RydWN0IGF0MjRfZGF0YSwgbWFjYyk7CisKKwlyZXR1cm4gYXQyNF9yZWFkKGF0MjQsIGJ1Ziwgb2Zmc2V0LCBjb3VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGF0MjRfbWFjY193cml0ZShzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yICptYWNjLCBjaGFyICpidWYsCisJCQkgIG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdDI0X2RhdGEgKmF0MjQgPSBjb250YWluZXJfb2YobWFjYywgc3RydWN0IGF0MjRfZGF0YSwgbWFjYyk7CisKKwlyZXR1cm4gYXQyNF93cml0ZShhdDI0LCBidWYsIG9mZnNldCwgY291bnQpOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IGF0MjRfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQpAQCAtNDEzLDYgKzQ0Myw5IEBACiAJCSAqIGlzIHJlY29tbWVuZGVkIGFueWhvdy4KIAkJICovCiAJCWNoaXAucGFnZV9zaXplID0gMTsKKworCQljaGlwLnNldHVwID0gTlVMTDsKKwkJY2hpcC5jb250ZXh0ID0gTlVMTDsKIAl9CiAKIAlpZiAoIWlzX3Bvd2VyX29mXzIoY2hpcC5ieXRlX2xlbikpCkBAIC00NjMsNiArNDk2LDggQEAKIAlhdDI0LT5iaW4ucmVhZCA9IGF0MjRfYmluX3JlYWQ7CiAJYXQyNC0+YmluLnNpemUgPSBjaGlwLmJ5dGVfbGVuOwogCisJYXQyNC0+bWFjYy5yZWFkID0gYXQyNF9tYWNjX3JlYWQ7CisKIAl3cml0YWJsZSA9ICEoY2hpcC5mbGFncyAmIEFUMjRfRkxBR19SRUFET05MWSk7CiAJaWYgKHdyaXRhYmxlKSB7CiAJCWlmICghdXNlX3NtYnVzIHx8IGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKQEAgLTQ3MCw2ICs1MDUsOCBAQAogCiAJCQl1bnNpZ25lZCB3cml0ZV9tYXggPSBjaGlwLnBhZ2Vfc2l6ZTsKIAorCQkJYXQyNC0+bWFjYy53cml0ZSA9IGF0MjRfbWFjY193cml0ZTsKKwogCQkJYXQyNC0+YmluLndyaXRlID0gYXQyNF9iaW5fd3JpdGU7CiAJCQlhdDI0LT5iaW4uYXR0ci5tb2RlIHw9IFNfSVdVU1I7CiAKQEAgLTUyMCw2ICs1NTcsMTAgQEAKIAkJYXQyNC0+d3JpdGVfbWF4LAogCQl1c2Vfc21idXMgPyAiLCB1c2Vfc21idXMiIDogIiIpOwogCisJLyogZXhwb3J0IGRhdGEgdG8ga2VybmVsIGNvZGUgKi8KKwlpZiAoY2hpcC5zZXR1cCkKKwkJY2hpcC5zZXR1cCgmYXQyNC0+bWFjYywgY2hpcC5jb250ZXh0KTsKKwogCXJldHVybiAwOwogCiBlcnJfY2xpZW50czoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9lZXByb20vYXQyNS5jIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMKaW5kZXggMjkwZGJlOS4uNmJjMGRhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMKKysrIGIvZHJpdmVycy9taXNjL2VlcHJvbS9hdDI1LmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogc3RydWN0IGF0MjVfZGF0YSB7CiAJc3RydWN0IHNwaV9kZXZpY2UJKnNwaTsKKwlzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yCW1lbTsKIAlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CiAJc3RydWN0IHNwaV9lZXByb20JY2hpcDsKIAlzdHJ1Y3QgYmluX2F0dHJpYnV0ZQliaW47CkBAIC03NSw2ICs3NiwxMyBAQAogCXN0cnVjdCBzcGlfdHJhbnNmZXIJdFsyXTsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbTsKIAorCWlmICh1bmxpa2VseShvZmZzZXQgPj0gYXQyNS0+YmluLnNpemUpKQorCQlyZXR1cm4gMDsKKwlpZiAoKG9mZnNldCArIGNvdW50KSA+IGF0MjUtPmJpbi5zaXplKQorCQljb3VudCA9IGF0MjUtPmJpbi5zaXplIC0gb2Zmc2V0OworCWlmICh1bmxpa2VseSghY291bnQpKQorCQlyZXR1cm4gY291bnQ7CisKIAljcCA9IGNvbW1hbmQ7CiAJKmNwKysgPSBBVDI1X1JFQUQ7CiAKQEAgLTEyNywxMyArMTM1LDYgQEAKIAlkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CiAJYXQyNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JaWYgKHVubGlrZWx5KG9mZiA+PSBhdDI1LT5iaW4uc2l6ZSkpCi0JCXJldHVybiAwOwotCWlmICgob2ZmICsgY291bnQpID4gYXQyNS0+YmluLnNpemUpCi0JCWNvdW50ID0gYXQyNS0+YmluLnNpemUgLSBvZmY7Ci0JaWYgKHVubGlrZWx5KCFjb3VudCkpCi0JCXJldHVybiBjb3VudDsKLQogCXJldHVybiBhdDI1X2VlX3JlYWQoYXQyNSwgYnVmLCBvZmYsIGNvdW50KTsKIH0KIApAQCAtMTQ2LDYgKzE0NywxMyBAQAogCXVuc2lnbmVkCQlidWZfc2l6ZTsKIAl1OAkJCSpib3VuY2U7CiAKKwlpZiAodW5saWtlbHkob2ZmID49IGF0MjUtPmJpbi5zaXplKSkKKwkJcmV0dXJuIC1FRkJJRzsKKwlpZiAoKG9mZiArIGNvdW50KSA+IGF0MjUtPmJpbi5zaXplKQorCQljb3VudCA9IGF0MjUtPmJpbi5zaXplIC0gb2ZmOworCWlmICh1bmxpa2VseSghY291bnQpKQorCQlyZXR1cm4gY291bnQ7CisKIAkvKiBUZW1wIGJ1ZmZlciBzdGFydHMgd2l0aCBjb21tYW5kIGFuZCBhZGRyZXNzICovCiAJYnVmX3NpemUgPSBhdDI1LT5jaGlwLnBhZ2Vfc2l6ZTsKIAlpZiAoYnVmX3NpemUgPiBpb19saW1pdCkKQEAgLTI1MywxOCArMjYxLDMxIEBACiAJZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOwogCWF0MjUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCWlmICh1bmxpa2VseShvZmYgPj0gYXQyNS0+YmluLnNpemUpKQotCQlyZXR1cm4gLUVGQklHOwotCWlmICgob2ZmICsgY291bnQpID4gYXQyNS0+YmluLnNpemUpCi0JCWNvdW50ID0gYXQyNS0+YmluLnNpemUgLSBvZmY7Ci0JaWYgKHVubGlrZWx5KCFjb3VudCkpCi0JCXJldHVybiBjb3VudDsKLQogCXJldHVybiBhdDI1X2VlX3dyaXRlKGF0MjUsIGJ1Ziwgb2ZmLCBjb3VudCk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIExldCBpbi1rZXJuZWwgY29kZSBhY2Nlc3MgdGhlIGVlcHJvbSBkYXRhLiAqLworCitzdGF0aWMgc3NpemVfdCBhdDI1X21lbV9yZWFkKHN0cnVjdCBtZW1vcnlfYWNjZXNzb3IgKm1lbSwgY2hhciAqYnVmLAorCQkJIG9mZl90IG9mZnNldCwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBhdDI1X2RhdGEgKmF0MjUgPSBjb250YWluZXJfb2YobWVtLCBzdHJ1Y3QgYXQyNV9kYXRhLCBtZW0pOworCisJcmV0dXJuIGF0MjVfZWVfcmVhZChhdDI1LCBidWYsIG9mZnNldCwgY291bnQpOworfQorCitzdGF0aWMgc3NpemVfdCBhdDI1X21lbV93cml0ZShzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yICptZW0sIGNoYXIgKmJ1ZiwKKwkJCSAgb2ZmX3Qgb2Zmc2V0LCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGF0MjVfZGF0YSAqYXQyNSA9IGNvbnRhaW5lcl9vZihtZW0sIHN0cnVjdCBhdDI1X2RhdGEsIG1lbSk7CisKKwlyZXR1cm4gYXQyNV9lZV93cml0ZShhdDI1LCBidWYsIG9mZnNldCwgY291bnQpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiBzdGF0aWMgaW50IGF0MjVfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgYXQyNV9kYXRhCSphdDI1ID0gTlVMTDsKQEAgLTMxNyw2ICszMzgsMTAgQEAKIAlhdDI1LT5hZGRybGVuID0gYWRkcmxlbjsKIAogCS8qIEV4cG9ydCB0aGUgRUVQUk9NIGJ5dGVzIHRocm91Z2ggc3lzZnMsIHNpbmNlIHRoYXQncyBjb252ZW5pZW50LgorCSAqIEFuZCBtYXliZSB0byBvdGhlciBrZXJuZWwgY29kZTsgaXQgbWlnaHQgaG9sZCBhIGJvYXJkJ3MgRXRoZXJuZXQKKwkgKiBhZGRyZXNzLCBvciBib2FyZC1zcGVjaWZpYyBjYWxpYnJhdGlvbiBkYXRhIGdlbmVyYXRlZCBvbiB0aGUKKwkgKiBtYW51ZmFjdHVyaW5nIGZsb29yLgorCSAqCiAJICogRGVmYXVsdCB0byByb290LW9ubHkgYWNjZXNzIHRvIHRoZSBkYXRhOyBFRVBST01zIG9mdGVuIGhvbGQgZGF0YQogCSAqIHRoYXQncyBzZW5zaXRpdmUgZm9yIHJlYWQgYW5kL29yIHdyaXRlLCBsaWtlIGV0aGVybmV0IGFkZHJlc3NlcywKIAkgKiBzZWN1cml0eSBjb2RlcywgYm9hcmQtc3BlY2lmaWMgbWFudWZhY3R1cmluZyBjYWxpYnJhdGlvbnMsIGV0Yy4KQEAgLTMyNCwxNyArMzQ5LDIyIEBACiAJYXQyNS0+YmluLmF0dHIubmFtZSA9ICJlZXByb20iOwogCWF0MjUtPmJpbi5hdHRyLm1vZGUgPSBTX0lSVVNSOwogCWF0MjUtPmJpbi5yZWFkID0gYXQyNV9iaW5fcmVhZDsKKwlhdDI1LT5tZW0ucmVhZCA9IGF0MjVfbWVtX3JlYWQ7CiAKIAlhdDI1LT5iaW4uc2l6ZSA9IGF0MjUtPmNoaXAuYnl0ZV9sZW47CiAJaWYgKCEoY2hpcC0+ZmxhZ3MgJiBFRV9SRUFET05MWSkpIHsKIAkJYXQyNS0+YmluLndyaXRlID0gYXQyNV9iaW5fd3JpdGU7CiAJCWF0MjUtPmJpbi5hdHRyLm1vZGUgfD0gU19JV1VTUjsKKwkJYXQyNS0+bWVtLndyaXRlID0gYXQyNV9tZW1fd3JpdGU7CiAJfQogCiAJZXJyID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZzcGktPmRldi5rb2JqLCAmYXQyNS0+YmluKTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWw7CiAKKwlpZiAoY2hpcC0+c2V0dXApCisJCWNoaXAtPnNldHVwKCZhdDI1LT5tZW0sIGNoaXAtPmNvbnRleHQpOworCiAJZGV2X2luZm8oJnNwaS0+ZGV2LCAiJVpkICVzICVzIGVlcHJvbSVzLCBwYWdlc2l6ZSAldVxuIiwKIAkJKGF0MjUtPmJpbi5zaXplIDwgMTAyNCkKIAkJCT8gYXQyNS0+YmluLnNpemUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9ocGlsby5jIGIvZHJpdmVycy9taXNjL2hwaWxvLmMKaW5kZXggY2Y5OTE4NS4uODgwY2NmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2hwaWxvLmMKKysrIGIvZHJpdmVycy9taXNjL2hwaWxvLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCS8qIGdpdmUgaUxPIHNvbWUgdGltZSB0byBwcm9jZXNzIHN0b3AgcmVxdWVzdCAqLwogCWZvciAocmV0cmllcyA9IE1BWF9XQUlUOyByZXRyaWVzID4gMDsgcmV0cmllcy0tKSB7CiAJCWRvb3JiZWxsX3NldChkcml2ZXJfY2NiKTsKLQkJdWRlbGF5KDEpOworCQl1ZGVsYXkoV0FJVF9USU1FKTsKIAkJaWYgKCEoaW9yZWFkMzIoJmRldmljZV9jY2ItPnNlbmRfY3RybCkgJiAoMSA8PCBDVFJMX0JJVFBPU19BKSkKIAkJICAgICYmCiAJCSAgICAhKGlvcmVhZDMyKCZkZXZpY2VfY2NiLT5yZWN2X2N0cmwpICYgKDEgPDwgQ1RSTF9CSVRQT1NfQSkpKQpAQCAtMzEyLDcgKzMxMiw3IEBACiAJZm9yIChpID0gTUFYX1dBSVQ7IGkgPiAwOyBpLS0pIHsKIAkJaWYgKGlsb19wa3RfZGVxdWV1ZShodywgZHJpdmVyX2NjYiwgU0VORFEsICZwa3RfaWQsIE5VTEwsIE5VTEwpKQogCQkJYnJlYWs7Ci0JCXVkZWxheSgxKTsKKwkJdWRlbGF5KFdBSVRfVElNRSk7CiAJfQogCiAJaWYgKGkpIHsKQEAgLTc1OSw3ICs3NTksNyBAQAogCWNsYXNzX2Rlc3Ryb3koaWxvX2NsYXNzKTsKIH0KIAotTU9EVUxFX1ZFUlNJT04oIjEuMCIpOworTU9EVUxFX1ZFUlNJT04oIjEuMSIpOwogTU9EVUxFX0FMSUFTKElMT19OQU1FKTsKIE1PRFVMRV9ERVNDUklQVElPTihJTE9fTkFNRSk7CiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBBbHRvYmVsbGkgPGRhdmlkLmFsdG9iZWxsaUBocC5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaHBpbG8uaCBiL2RyaXZlcnMvbWlzYy9ocGlsby5oCmluZGV4IGI2NGEyMGUuLjAzYTE0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9ocGlsby5oCisrKyBiL2RyaXZlcnMvbWlzYy9ocGlsby5oCkBAIC0xOSw4ICsxOSwxMiBAQAogI2RlZmluZSBNQVhfSUxPX0RFVgkxCiAvKiBtYXggbnVtYmVyIG9mIGZpbGVzICovCiAjZGVmaW5lIE1BWF9PUEVOCShNQVhfQ0NCICogTUFYX0lMT19ERVYpCisvKiB0b3RhbCB3YWl0IHRpbWUgaW4gdXNlYyAqLworI2RlZmluZSBNQVhfV0FJVF9USU1FCTEwMDAwCisvKiBwZXIgc3BpbiB3YWl0IHRpbWUgaW4gdXNlYyAqLworI2RlZmluZSBXQUlUX1RJTUUJMTAKIC8qIHNwaW4gY291bnRlciBmb3Igb3Blbi9jbG9zZSBkZWxheSAqLwotI2RlZmluZSBNQVhfV0FJVAkxMDAwMAorI2RlZmluZSBNQVhfV0FJVAkoTUFYX1dBSVRfVElNRSAvIFdBSVRfVElNRSkKIAogLyoKICAqIFBlciBkZXZpY2UsIHVzZWQgdG8gdHJhY2sgZ2xvYmFsIG1lbW9yeSBhbGxvY2F0aW9ucy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pc2wyOTAwMy5jIGIvZHJpdmVycy9taXNjL2lzbDI5MDAzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUyYTU5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9pc2wyOTAwMy5jCkBAIC0wLDAgKzEsNDcwIEBACisvKgorICogIGlzbDI5MDAzLmMgLSBMaW51eCBrZXJuZWwgbW9kdWxlIGZvcgorICogCUludGVyc2lsIElTTDI5MDAzIGFtYmllbnQgbGlnaHQgc2Vuc29yCisgKgorICogIFNlZSBmaWxlOkRvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL2lzbDI5MDAzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICoKKyAqICBCYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkKKyAqICAJUm9kb2xmbyBHaW9tZXR0aSA8Z2lvbWV0dGlAbGludXguaXQ+CisgKiAgCUV1cm90ZWNoIFMucC5BLiA8aW5mb0BldXJvdGVjaC5pdD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2RlZmluZSBJU0wyOTAwM19EUlZfTkFNRQkiaXNsMjkwMDMiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkiMS4wIgorCisjZGVmaW5lIElTTDI5MDAzX1JFR19DT01NQU5ECQkweDAwCisjZGVmaW5lIElTTDI5MDAzX0FEQ19FTkFCTEVECQkoMSA8PCA3KQorI2RlZmluZSBJU0wyOTAwM19BRENfUEQJCQkoMSA8PCA2KQorI2RlZmluZSBJU0wyOTAwM19USU1JTkdfSU5UCQkoMSA8PCA1KQorI2RlZmluZSBJU0wyOTAwM19NT0RFX1NISUZUCQkoMikKKyNkZWZpbmUgSVNMMjkwMDNfTU9ERV9NQVNLCQkoMHgzIDw8IElTTDI5MDAzX01PREVfU0hJRlQpCisjZGVmaW5lIElTTDI5MDAzX1JFU19TSElGVAkJKDApCisjZGVmaW5lIElTTDI5MDAzX1JFU19NQVNLCQkoMHgzIDw8IElTTDI5MDAzX1JFU19TSElGVCkKKworI2RlZmluZSBJU0wyOTAwM19SRUdfQ09OVFJPTAkJMHgwMQorI2RlZmluZSBJU0wyOTAwM19JTlRfRkxHCQkoMSA8PCA1KQorI2RlZmluZSBJU0wyOTAwM19SQU5HRV9TSElGVAkJKDIpCisjZGVmaW5lIElTTDI5MDAzX1JBTkdFX01BU0sJCSgweDMgPDwgSVNMMjkwMDNfUkFOR0VfU0hJRlQpCisjZGVmaW5lIElTTDI5MDAzX0lOVF9QRVJTSVNUU19TSElGVAkoMCkKKyNkZWZpbmUgSVNMMjkwMDNfSU5UX1BFUlNJU1RTX01BU0sJKDB4ZiA8PCBJU0wyOTAwM19JTlRfUEVSU0lTVFNfU0hJRlQpCisKKyNkZWZpbmUgSVNMMjkwMDNfUkVHX0lSUV9USFJFU0hfSEkJMHgwMgorI2RlZmluZSBJU0wyOTAwM19SRUdfSVJRX1RIUkVTSF9MTwkweDAzCisjZGVmaW5lIElTTDI5MDAzX1JFR19MU0JfU0VOU09SCQkweDA0CisjZGVmaW5lIElTTDI5MDAzX1JFR19NU0JfU0VOU09SCQkweDA1CisjZGVmaW5lIElTTDI5MDAzX1JFR19MU0JfVElNRVIJCTB4MDYKKyNkZWZpbmUgSVNMMjkwMDNfUkVHX01TQl9USU1FUgkJMHgwNworCisjZGVmaW5lIElTTDI5MDAzX05VTV9DQUNIQUJMRV9SRUdTCTQKKworc3RydWN0IGlzbDI5MDAzX2RhdGEgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IG11dGV4IGxvY2s7CisJdTggcmVnX2NhY2hlW0lTTDI5MDAzX05VTV9DQUNIQUJMRV9SRUdTXTsKK307CisKK3N0YXRpYyBpbnQgZ2Fpbl9yYW5nZVtdID0geworCTEwMDAsIDQwMDAsIDE2MDAwLCA2NDAwMAorfTsKKworLyoKKyAqIHJlZ2lzdGVyIGFjY2VzcyBoZWxwZXJzCisgKi8KKworc3RhdGljIGludCBfX2lzbDI5MDAzX3JlYWRfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkgICAgICAgdTMyIHJlZywgdTggbWFzaywgdTggc2hpZnQpCit7CisJc3RydWN0IGlzbDI5MDAzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlyZXR1cm4gKGRhdGEtPnJlZ19jYWNoZVtyZWddICYgbWFzaykgPj4gc2hpZnQ7Cit9CisKK3N0YXRpYyBpbnQgX19pc2wyOTAwM193cml0ZV9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQl1MzIgcmVnLCB1OCBtYXNrLCB1OCBzaGlmdCwgdTggdmFsKQoreworCXN0cnVjdCBpc2wyOTAwM19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHJldCA9IDA7CisJdTggdG1wOworCisJaWYgKHJlZyA+PSBJU0wyOTAwM19OVU1fQ0FDSEFCTEVfUkVHUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKKworCXRtcCA9IGRhdGEtPnJlZ19jYWNoZVtyZWddOworCXRtcCAmPSB+bWFzazsKKwl0bXAgfD0gdmFsIDw8IHNoaWZ0OworCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdG1wKTsKKwlpZiAoIXJldCkKKwkJZGF0YS0+cmVnX2NhY2hlW3JlZ10gPSB0bXA7CisKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBpbnRlcm5hbGx5IHVzZWQgZnVuY3Rpb25zCisgKi8KKworLyogcmFuZ2UgKi8KK3N0YXRpYyBpbnQgaXNsMjkwMDNfZ2V0X3JhbmdlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJcmV0dXJuIF9faXNsMjkwMDNfcmVhZF9yZWcoY2xpZW50LCBJU0wyOTAwM19SRUdfQ09OVFJPTCwKKwkJSVNMMjkwMDNfUkFOR0VfTUFTSywgSVNMMjkwMDNfUkFOR0VfU0hJRlQpOworfQorCitzdGF0aWMgaW50IGlzbDI5MDAzX3NldF9yYW5nZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmFuZ2UpCit7CisJcmV0dXJuIF9faXNsMjkwMDNfd3JpdGVfcmVnKGNsaWVudCwgSVNMMjkwMDNfUkVHX0NPTlRST0wsCisJCUlTTDI5MDAzX1JBTkdFX01BU0ssIElTTDI5MDAzX1JBTkdFX1NISUZULCByYW5nZSk7Cit9CisKKy8qIHJlc29sdXRpb24gKi8KK3N0YXRpYyBpbnQgaXNsMjkwMDNfZ2V0X3Jlc29sdXRpb24oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlyZXR1cm4gX19pc2wyOTAwM19yZWFkX3JlZyhjbGllbnQsIElTTDI5MDAzX1JFR19DT01NQU5ELAorCQlJU0wyOTAwM19SRVNfTUFTSywgSVNMMjkwMDNfUkVTX1NISUZUKTsKK30KKworc3RhdGljIGludCBpc2wyOTAwM19zZXRfcmVzb2x1dGlvbihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgcmVzKQoreworCXJldHVybiBfX2lzbDI5MDAzX3dyaXRlX3JlZyhjbGllbnQsIElTTDI5MDAzX1JFR19DT01NQU5ELAorCQlJU0wyOTAwM19SRVNfTUFTSywgSVNMMjkwMDNfUkVTX1NISUZULCByZXMpOworfQorCisvKiBtb2RlICovCitzdGF0aWMgaW50IGlzbDI5MDAzX2dldF9tb2RlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJcmV0dXJuIF9faXNsMjkwMDNfcmVhZF9yZWcoY2xpZW50LCBJU0wyOTAwM19SRUdfQ09NTUFORCwKKwkJSVNMMjkwMDNfUkVTX01BU0ssIElTTDI5MDAzX1JFU19TSElGVCk7Cit9CisKK3N0YXRpYyBpbnQgaXNsMjkwMDNfc2V0X21vZGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IG1vZGUpCit7CisJcmV0dXJuIF9faXNsMjkwMDNfd3JpdGVfcmVnKGNsaWVudCwgSVNMMjkwMDNfUkVHX0NPTU1BTkQsCisJCUlTTDI5MDAzX1JFU19NQVNLLCBJU0wyOTAwM19SRVNfU0hJRlQsIG1vZGUpOworfQorCisvKiBwb3dlcl9zdGF0ZSAqLworc3RhdGljIGludCBpc2wyOTAwM19zZXRfcG93ZXJfc3RhdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHN0YXRlKQoreworCXJldHVybiBfX2lzbDI5MDAzX3dyaXRlX3JlZyhjbGllbnQsIElTTDI5MDAzX1JFR19DT01NQU5ELAorCQkJCUlTTDI5MDAzX0FEQ19FTkFCTEVEIHwgSVNMMjkwMDNfQURDX1BELCAwLAorCQkJCXN0YXRlID8gSVNMMjkwMDNfQURDX0VOQUJMRUQgOiBJU0wyOTAwM19BRENfUEQpOworfQorCitzdGF0aWMgaW50IGlzbDI5MDAzX2dldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBpc2wyOTAwM19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdTggY21kcmVnID0gZGF0YS0+cmVnX2NhY2hlW0lTTDI5MDAzX1JFR19DT01NQU5EXTsKKwlyZXR1cm4gfmNtZHJlZyAmIElTTDI5MDAzX0FEQ19QRDsKK30KKworc3RhdGljIGludCBpc2wyOTAwM19nZXRfYWRjX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGlzbDI5MDAzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgbHNiLCBtc2IsIHJhbmdlLCBiaXRkZXB0aDsKKworCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOworCWxzYiA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIElTTDI5MDAzX1JFR19MU0JfU0VOU09SKTsKKworCWlmIChsc2IgPCAwKSB7CisJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisJCXJldHVybiBsc2I7CisJfQorCisJbXNiID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgSVNMMjkwMDNfUkVHX01TQl9TRU5TT1IpOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CisKKwlpZiAobXNiIDwgMCkKKwkJcmV0dXJuIG1zYjsKKworCXJhbmdlID0gaXNsMjkwMDNfZ2V0X3JhbmdlKGNsaWVudCk7CisJYml0ZGVwdGggPSAoNCAtIGlzbDI5MDAzX2dldF9yZXNvbHV0aW9uKGNsaWVudCkpICogNDsKKwlyZXR1cm4gKCgobXNiIDw8IDgpIHwgbHNiKSAqIGdhaW5fcmFuZ2VbcmFuZ2VdKSA+PiBiaXRkZXB0aDsKK30KKworLyoKKyAqIHN5c2ZzIGxheWVyCisgKi8KKworLyogcmFuZ2UgKi8KK3N0YXRpYyBzc2l6ZV90IGlzbDI5MDAzX3Nob3dfcmFuZ2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgaXNsMjkwMDNfZ2V0X3JhbmdlKGNsaWVudCkpOworfQorCitzdGF0aWMgc3NpemVfdCBpc2wyOTAwM19zdG9yZV9yYW5nZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlpZiAoKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIDwgMCkgfHwgKHZhbCA+IDMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGlzbDI5MDAzX3NldF9yYW5nZShjbGllbnQsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihyYW5nZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCSAgIGlzbDI5MDAzX3Nob3dfcmFuZ2UsIGlzbDI5MDAzX3N0b3JlX3JhbmdlKTsKKworCisvKiByZXNvbHV0aW9uICovCitzdGF0aWMgc3NpemVfdCBpc2wyOTAwM19zaG93X3Jlc29sdXRpb24oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGlzbDI5MDAzX2dldF9yZXNvbHV0aW9uKGNsaWVudCkpOworfQorCitzdGF0aWMgc3NpemVfdCBpc2wyOTAwM19zdG9yZV9yZXNvbHV0aW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJaWYgKChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApIHx8ICh2YWwgPiAzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBpc2wyOTAwM19zZXRfcmVzb2x1dGlvbihjbGllbnQsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXNvbHV0aW9uLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgaXNsMjkwMDNfc2hvd19yZXNvbHV0aW9uLCBpc2wyOTAwM19zdG9yZV9yZXNvbHV0aW9uKTsKKworLyogbW9kZSAqLworc3RhdGljIHNzaXplX3QgaXNsMjkwMDNfc2hvd19tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaXNsMjkwMDNfZ2V0X21vZGUoY2xpZW50KSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlzbDI5MDAzX3N0b3JlX21vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJaWYgKChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApIHx8ICh2YWwgPiAyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBpc2wyOTAwM19zZXRfbW9kZShjbGllbnQsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RlLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJICAgaXNsMjkwMDNfc2hvd19tb2RlLCBpc2wyOTAwM19zdG9yZV9tb2RlKTsKKworCisvKiBwb3dlciBzdGF0ZSAqLworc3RhdGljIHNzaXplX3QgaXNsMjkwMDNfc2hvd19wb3dlcl9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBpc2wyOTAwM19nZXRfcG93ZXJfc3RhdGUoY2xpZW50KSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlzbDI5MDAzX3N0b3JlX3Bvd2VyX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlpZiAoKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIDwgMCkgfHwgKHZhbCA+IDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IGlzbDI5MDAzX3NldF9wb3dlcl9zdGF0ZShjbGllbnQsIHZhbCk7CisJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfc3RhdGUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkgICBpc2wyOTAwM19zaG93X3Bvd2VyX3N0YXRlLCBpc2wyOTAwM19zdG9yZV9wb3dlcl9zdGF0ZSk7CisKKworLyogbHV4ICovCitzdGF0aWMgc3NpemVfdCBpc2wyOTAwM19zaG93X2x1eChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKworCS8qIE5vIExVWCBkYXRhIGlmIG5vdCBvcGVyYXRpb25hbCAqLworCWlmICghaXNsMjkwMDNfZ2V0X3Bvd2VyX3N0YXRlKGNsaWVudCkpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaXNsMjkwMDNfZ2V0X2FkY192YWx1ZShjbGllbnQpKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGx1eCwgU19JUlVHTywgaXNsMjkwMDNfc2hvd19sdXgsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXNsMjkwMDNfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9yYW5nZS5hdHRyLAorCSZkZXZfYXR0cl9yZXNvbHV0aW9uLmF0dHIsCisJJmRldl9hdHRyX21vZGUuYXR0ciwKKwkmZGV2X2F0dHJfcG93ZXJfc3RhdGUuYXR0ciwKKwkmZGV2X2F0dHJfbHV4LmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXNsMjkwMDNfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBpc2wyOTAwM19hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIGludCBpc2wyOTAwM19pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBpc2wyOTAwM19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGk7CisKKwkvKiByZWFkIGFsbCB0aGUgcmVnaXN0ZXJzIG9uY2UgdG8gZmlsbCB0aGUgY2FjaGUuCisJICogaWYgb25lIG9mIHRoZSByZWFkcyBmYWlscywgd2UgY29uc2lkZXIgdGhlIGluaXQgZmFpbGVkICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+cmVnX2NhY2hlKTsgaSsrKSB7CisJCWludCB2ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgaSk7CisJCWlmICh2IDwgMCkKKwkJCXJldHVybiAtRU5PREVWOworCisJCWRhdGEtPnJlZ19jYWNoZVtpXSA9IHY7CisJfQorCisJLyogc2V0IGRlZmF1bHRzICovCisJaXNsMjkwMDNfc2V0X3JhbmdlKGNsaWVudCwgMCk7CisJaXNsMjkwMDNfc2V0X3Jlc29sdXRpb24oY2xpZW50LCAwKTsKKwlpc2wyOTAwM19zZXRfbW9kZShjbGllbnQsIDApOworCWlzbDI5MDAzX3NldF9wb3dlcl9zdGF0ZShjbGllbnQsIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJMkMgbGF5ZXIKKyAqLworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpc2wyOTAwM19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgaXNsMjkwMDNfZGF0YSAqZGF0YTsKKwlpbnQgZXJyID0gMDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURSkpCisJCXJldHVybiAtRUlPOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpc2wyOTAwM19kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRhdGEtPmNsaWVudCA9IGNsaWVudDsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKKworCS8qIGluaXRpYWxpemUgdGhlIElTTDI5MDAzIGNoaXAgKi8KKwllcnIgPSBpc2wyOTAwM19pbml0X2NsaWVudChjbGllbnQpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9rZnJlZTsKKworCS8qIHJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmaXNsMjkwMDNfYXR0cl9ncm91cCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2tmcmVlOworCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiZHJpdmVyIHZlcnNpb24gJXMgZW5hYmxlZFxuIiwgRFJJVkVSX1ZFUlNJT04pOworCXJldHVybiAwOworCitleGl0X2tmcmVlOgorCWtmcmVlKGRhdGEpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGlzbDI5MDAzX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmlzbDI5MDAzX2F0dHJfZ3JvdXApOworCWlzbDI5MDAzX3NldF9wb3dlcl9zdGF0ZShjbGllbnQsIDApOworCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBpc2wyOTAwM19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHBtX21lc3NhZ2VfdCBtZXNnKQoreworCXJldHVybiBpc2wyOTAwM19zZXRfcG93ZXJfc3RhdGUoY2xpZW50LCAwKTsKK30KKworc3RhdGljIGludCBpc2wyOTAwM19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaXNsMjkwMDNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJLyogcmVzdG9yZSByZWdpc3RlcnMgZnJvbSBjYWNoZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnJlZ19jYWNoZSk7IGkrKykKKwkJaWYgKCFpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgaSwgZGF0YS0+cmVnX2NhY2hlW2ldKSkKKwkJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIGlzbDI5MDAzX3N1c3BlbmQJTlVMTAorI2RlZmluZSBpc2wyOTAwM19yZXN1bWUJCU5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGlzbDI5MDAzX2lkW10gPSB7CisJeyAiaXNsMjkwMDMiLCAwIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgaXNsMjkwMDNfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaXNsMjkwMDNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gSVNMMjkwMDNfRFJWX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgPSBpc2wyOTAwM19zdXNwZW5kLAorCS5yZXN1bWUJPSBpc2wyOTAwM19yZXN1bWUsCisJLnByb2JlCT0gaXNsMjkwMDNfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGlzbDI5MDAzX3JlbW92ZSksCisJLmlkX3RhYmxlID0gaXNsMjkwMDNfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpc2wyOTAwM19pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpc2wyOTAwM19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXNsMjkwMDNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZpc2wyOTAwM19kcml2ZXIpOworfQorCitNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJU0wyOTAwMyBhbWJpZW50IGxpZ2h0IHNlbnNvciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKKworbW9kdWxlX2luaXQoaXNsMjkwMDNfaW5pdCk7Cittb2R1bGVfZXhpdChpc2wyOTAwM19leGl0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9NYWtlZmlsZQppbmRleCA5ZTkxNzBiLi5iY2Q4MTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9NYWtlZmlsZQpAQCAtMyw1ICszLDUgQEAKIGVuZGlmCiAKIG9iai0kKENPTkZJR19TR0lfR1JVKSA6PSBncnUubwotZ3J1LXkgOj0gZ3J1ZmlsZS5vIGdydW1haW4ubyBncnVmYXVsdC5vIGdydXRsYnB1cmdlLm8gZ3J1cHJvY2ZzLm8gZ3J1a3NlcnZpY2VzLm8KK2dydS15IDo9IGdydWZpbGUubyBncnVtYWluLm8gZ3J1ZmF1bHQubyBncnV0bGJwdXJnZS5vIGdydXByb2Nmcy5vIGdydWtzZXJ2aWNlcy5vIGdydWhhbmRsZXMubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVfaW5zdHJ1Y3Rpb25zLmggYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVfaW5zdHJ1Y3Rpb25zLmgKaW5kZXggNDg3NjJlNy4uM2ZkZTMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1X2luc3RydWN0aW9ucy5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydV9pbnN0cnVjdGlvbnMuaApAQCAtMTksOCArMTksMTEgQEAKICNpZm5kZWYgX19HUlVfSU5TVFJVQ1RJT05TX0hfXwogI2RlZmluZSBfX0dSVV9JTlNUUlVDVElPTlNfSF9fCiAKLSNkZWZpbmUgZ3J1X2ZsdXNoX2NhY2hlX2hvb2socCkKLSNkZWZpbmUgZ3J1X2VtdWxhdG9yX3dhaXRfaG9vayhwLCB3KQorZXh0ZXJuIGludCBncnVfY2hlY2tfc3RhdHVzX3Byb2Modm9pZCAqY2IpOworZXh0ZXJuIGludCBncnVfd2FpdF9wcm9jKHZvaWQgKmNiKTsKK2V4dGVybiB2b2lkIGdydV93YWl0X2Fib3J0X3Byb2Modm9pZCAqY2IpOworCisKIAogLyoKICAqIEFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgZnVuY3Rpb25zCkBAIC0yOSwxNiArMzIsMTYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19JQTY0KQogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KLSNkZWZpbmUgX19mbHVzaF9jYWNoZShwKQkJaWE2NF9mYyhwKQorI2RlZmluZSBfX2ZsdXNoX2NhY2hlKHApCQlpYTY0X2ZjKCh1bnNpZ25lZCBsb25nKXApCiAvKiBVc2Ugdm9sYXRpbGUgb24gSUE2NCB0byBlbnN1cmUgb3JkZXJpbmcgdmlhIHN0NC5yZWwgKi8KLSNkZWZpbmUgZ3J1X29yZGVyZWRfc3RvcmVfaW50KHAsdikJCQkJCVwKKyNkZWZpbmUgZ3J1X29yZGVyZWRfc3RvcmVfaW50KHAsIHYpCQkJCQlcCiAJCWRvIHsJCQkJCQkJXAogCQkJYmFycmllcigpOwkJCQkJXAogCQkJKigodm9sYXRpbGUgaW50ICopKHApKSA9IHY7IC8qIGZvcmNlIHN0LnJlbCAqLwlcCiAJCX0gd2hpbGUgKDApCiAjZWxpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCiAjZGVmaW5lIF9fZmx1c2hfY2FjaGUocCkJCWNsZmx1c2gocCkKLSNkZWZpbmUgZ3J1X29yZGVyZWRfc3RvcmVfaW50KHAsdikJCQkJCVwKKyNkZWZpbmUgZ3J1X29yZGVyZWRfc3RvcmVfaW50KHAsIHYpCQkJCQlcCiAJCWRvIHsJCQkJCQkJXAogCQkJYmFycmllcigpOwkJCQkJXAogCQkJKihpbnQgKilwID0gdjsJCQkJCVwKQEAgLTU1OCwyMCArNTYxLDE5IEBACiAKICNkZWZpbmUgR1JVX0VYQ19TVFJfU0laRQkJMjU2CiAKLWV4dGVybiBpbnQgZ3J1X2NoZWNrX3N0YXR1c19wcm9jKHZvaWQgKmNiKTsKLWV4dGVybiBpbnQgZ3J1X3dhaXRfcHJvYyh2b2lkICpjYik7Ci1leHRlcm4gdm9pZCBncnVfd2FpdF9hYm9ydF9wcm9jKHZvaWQgKmNiKTsKIAogLyoKICAqIENvbnRyb2wgYmxvY2sgZGVmaW5pdGlvbiBmb3IgY2hlY2tpbmcgc3RhdHVzCiAgKi8KIHN0cnVjdCBncnVfY29udHJvbF9ibG9ja19zdGF0dXMgewogCXVuc2lnbmVkIGludAlpY21kCQk6MTsKLQl1bnNpZ25lZCBpbnQJdW51c2VkMQkJOjMxOworCXVuc2lnbmVkIGludAlpbWEJCTozOworCXVuc2lnbmVkIGludAlyZXNlcnZlZDAJOjQ7CisJdW5zaWduZWQgaW50CXVudXNlZDEJCToyNDsKIAl1bnNpZ25lZCBpbnQJdW51c2VkMgkJOjI0OwogCXVuc2lnbmVkIGludAlpc3RhdHVzCQk6MjsKIAl1bnNpZ25lZCBpbnQJaXN1YnN0YXR1cwk6NDsKLQl1bnNpZ25lZCBpbnQJaW51c2VkMwkJOjI7CisJdW5zaWduZWQgaW50CXVudXNlZDMJCToyOwogfTsKIAogLyogR2V0IENCIHN0YXR1cyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmF1bHQuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZhdWx0LmMKaW5kZXggM2VlNjk4YS4uYWIxMTg1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmF1bHQuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmYXVsdC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgImdydS5oIgogI2luY2x1ZGUgImdydXRhYmxlcy5oIgpAQCAtMjY2LDYgKzI2Nyw0NCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGdydV92dG9wKHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCisJCSAgICBpbnQgd3JpdGUsIGludCBhdG9taWMsIHVuc2lnbmVkIGxvbmcgKmdwYSwgaW50ICpwYWdlc2hpZnQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBndHMtPnRzX21tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisJaW50IHJldCwgcHM7CisKKwl2bWEgPSBmaW5kX3ZtYShtbSwgdmFkZHIpOworCWlmICghdm1hKQorCQlnb3RvIGludmFsOworCisJLyoKKwkgKiBBdG9taWMgbG9va3VwIGlzIGZhc3RlciAmIHVzdWFsbHkgd29ya3MgZXZlbiBpZiBjYWxsZWQgaW4gbm9uLWF0b21pYworCSAqIGNvbnRleHQuCisJICovCisJcm1iKCk7CS8qIE11c3QvY2hlY2sgbXNfcmFuZ2VfYWN0aXZlIGJlZm9yZSBsb2FkaW5nIFBURXMgKi8KKwlyZXQgPSBhdG9taWNfcHRlX2xvb2t1cCh2bWEsIHZhZGRyLCB3cml0ZSwgJnBhZGRyLCAmcHMpOworCWlmIChyZXQpIHsKKwkJaWYgKGF0b21pYykKKwkJCWdvdG8gdXBtOworCQlpZiAobm9uX2F0b21pY19wdGVfbG9va3VwKHZtYSwgdmFkZHIsIHdyaXRlLCAmcGFkZHIsICZwcykpCisJCQlnb3RvIGludmFsOworCX0KKwlpZiAoaXNfZ3J1X3BhZGRyKHBhZGRyKSkKKwkJZ290byBpbnZhbDsKKwlwYWRkciA9IHBhZGRyICYgfigoMVVMIDw8IHBzKSAtIDEpOworCSpncGEgPSB1dl9zb2NfcGh5c19yYW1fdG9fZ3BhKHBhZGRyKTsKKwkqcGFnZXNoaWZ0ID0gcHM7CisJcmV0dXJuIDA7CisKK2ludmFsOgorCXJldHVybiAtMTsKK3VwbToKKwlyZXR1cm4gLTI7Cit9CisKKwogLyoKICAqIERyb3AgYSBUTEIgZW50cnkgaW50byB0aGUgR1JVLiBUaGUgZmF1bHQgaXMgZGVzY3JpYmVkIGJ5IGluZm8gaW4gYW4gVEZILgogICoJSW5wdXQ6CkBAIC0yODAsMTAgKzMxOSw4IEBACiAJCQkgIHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoLAogCQkJICB1bnNpZ25lZCBsb25nIF9fdXNlciAqY2IpCiB7Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBndHMtPnRzX21tOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCWludCBwYWdlc2hpZnQsIGFzaWQsIHdyaXRlLCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBwYWRkciwgZ3BhLCB2YWRkcjsKKwlpbnQgcGFnZXNoaWZ0ID0gMCwgYXNpZCwgd3JpdGUsIHJldCwgYXRvbWljID0gIWNiOworCXVuc2lnbmVkIGxvbmcgZ3BhID0gMCwgdmFkZHIgPSAwOwogCiAJLyoKIAkgKiBOT1RFOiBUaGUgR1JVIGNvbnRhaW5zIG1hZ2ljIGhhcmR3YXJlIHRoYXQgZWxpbWluYXRlcyByYWNlcyBiZXR3ZWVuCkBAIC0zMTcsMjggKzM1NCwxOSBAQAogCWlmIChhdG9taWNfcmVhZCgmZ3RzLT50c19nbXMtPm1zX3JhbmdlX2FjdGl2ZSkpCiAJCWdvdG8gZmFpbGFjdGl2ZTsKIAotCXZtYSA9IGZpbmRfdm1hKG1tLCB2YWRkcik7Ci0JaWYgKCF2bWEpCisJcmV0ID0gZ3J1X3Z0b3AoZ3RzLCB2YWRkciwgd3JpdGUsIGF0b21pYywgJmdwYSwgJnBhZ2VzaGlmdCk7CisJaWYgKHJldCA9PSAtMSkKIAkJZ290byBmYWlsaW52YWw7CisJaWYgKHJldCA9PSAtMikKKwkJZ290byBmYWlsdXBtOwogCi0JLyoKLQkgKiBBdG9taWMgbG9va3VwIGlzIGZhc3RlciAmIHVzdWFsbHkgd29ya3MgZXZlbiBpZiBjYWxsZWQgaW4gbm9uLWF0b21pYwotCSAqIGNvbnRleHQuCi0JICovCi0Jcm1iKCk7CS8qIE11c3QvY2hlY2sgbXNfcmFuZ2VfYWN0aXZlIGJlZm9yZSBsb2FkaW5nIFBURXMgKi8KLQlyZXQgPSBhdG9taWNfcHRlX2xvb2t1cCh2bWEsIHZhZGRyLCB3cml0ZSwgJnBhZGRyLCAmcGFnZXNoaWZ0KTsKLQlpZiAocmV0KSB7Ci0JCWlmICghY2IpCisJaWYgKCEoZ3RzLT50c19zaXplYXZhaWwgJiBHUlVfU0laRUFWQUlMKHBhZ2VzaGlmdCkpKSB7CisJCWd0cy0+dHNfc2l6ZWF2YWlsIHw9IEdSVV9TSVpFQVZBSUwocGFnZXNoaWZ0KTsKKwkJaWYgKGF0b21pYyB8fCAhZ3J1X3VwZGF0ZV9jY2goZ3RzLCAwKSkgeworCQkJZ3RzLT50c19mb3JjZV9jY2hfcmVsb2FkID0gMTsKIAkJCWdvdG8gZmFpbHVwbTsKLQkJaWYgKG5vbl9hdG9taWNfcHRlX2xvb2t1cCh2bWEsIHZhZGRyLCB3cml0ZSwgJnBhZGRyLAotCQkJCQkgICZwYWdlc2hpZnQpKQotCQkJZ290byBmYWlsaW52YWw7CisJCX0KIAl9Ci0JaWYgKGlzX2dydV9wYWRkcihwYWRkcikpCi0JCWdvdG8gZmFpbGludmFsOwotCi0JcGFkZHIgPSBwYWRkciAmIH4oKDFVTCA8PCBwYWdlc2hpZnQpIC0gMSk7Ci0JZ3BhID0gdXZfc29jX3BoeXNfcmFtX3RvX2dwYShwYWRkcik7CiAJZ3J1X2NiX3NldF9pc3RhdHVzX2FjdGl2ZShjYik7CiAJdGZoX3dyaXRlX3Jlc3RhcnQodGZoLCBncGEsIEdBQV9SQU0sIHZhZGRyLCBhc2lkLCB3cml0ZSwKIAkJCSAgR1JVX1BBR0VTSVpFKHBhZ2VzaGlmdCkpOwpAQCAtMzY4LDYgKzM5Niw3IEBACiAKIGZhaWxmbW06CiAJLyogRk1NIHN0YXRlIG9uIFVQTSBjYWxsICovCisJZ3J1X2ZsdXNoX2NhY2hlKHRmaCk7CiAJU1RBVCh0bGJfZHJvcGluX2ZhaWxfZm1tKTsKIAlncnVfZGJnKGdydWRldiwgIkZBSUxFRCBmbW0gdGZoOiAweCVwLCBzdGF0ZSAlZFxuIiwgdGZoLCB0ZmgtPnN0YXRlKTsKIAlyZXR1cm4gMDsKQEAgLTQ0OCw2ICs0NzcsNyBAQAogCQkJdXBfcmVhZCgmZ3RzLT50c19tbS0+bW1hcF9zZW0pOwogCQl9IGVsc2UgewogCQkJdGZoX3VzZXJfcG9sbGluZ19tb2RlKHRmaCk7CisJCQlTVEFUKGludHJfbW1fbG9ja19mYWlsZWQpOwogCQl9CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTQ5NywxMCArNTI3LDggQEAKIAlpZiAoIWd0cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAodWNibnVtID49IGd0cy0+dHNfY2JyX2F1X2NvdW50ICogR1JVX0NCUl9BVV9TSVpFKSB7Ci0JCXJldCA9IC1FSU5WQUw7CisJaWYgKHVjYm51bSA+PSBndHMtPnRzX2Nicl9hdV9jb3VudCAqIEdSVV9DQlJfQVVfU0laRSkKIAkJZ290byBleGl0OwotCX0KIAogCS8qCiAJICogSWYgZm9yY2VfdW5sb2FkIGlzIHNldCwgdGhlIFVQTSBUTEIgZmF1bHQgaXMgcGhvbnkuIFRoZSB0YXNrCkBAIC01MDgsNiArNTM2LDIwIEBACiAJICogdW5sb2FkIHRoZSBjb250ZXh0LiBUaGUgdGFzayB3aWxsIHBhZ2UgZmF1bHQgYW5kIGFzc2lnbiBhIG5ldwogCSAqIGNvbnRleHQuCiAJICovCisJaWYgKGd0cy0+dHNfdGdpZF9vd25lciA9PSBjdXJyZW50LT50Z2lkICYmIGd0cy0+dHNfYmxhZGUgPj0gMCAmJgorCQkJCWd0cy0+dHNfYmxhZGUgIT0gdXZfbnVtYV9ibGFkZV9pZCgpKSB7CisJCVNUQVQoY2FsbF9vc19vZmZub2RlX3JlZmVyZW5jZSk7CisJCWd0cy0+dHNfZm9yY2VfdW5sb2FkID0gMTsKKwl9CisKKwkvKgorCSAqIENDSCBtYXkgY29udGFpbiBzdGFsZSBkYXRhIGlmIHRzX2ZvcmNlX2NjaF9yZWxvYWQgaXMgc2V0LgorCSAqLworCWlmIChndHMtPnRzX2dydSAmJiBndHMtPnRzX2ZvcmNlX2NjaF9yZWxvYWQpIHsKKwkJZ3J1X3VwZGF0ZV9jY2goZ3RzLCAwKTsKKwkJZ3RzLT50c19mb3JjZV9jY2hfcmVsb2FkID0gMDsKKwl9CisKIAlyZXQgPSAtRUFHQUlOOwogCWNicm51bSA9IHRocmVhZF9jYnJfbnVtYmVyKGd0cywgdWNibnVtKTsKIAlpZiAoZ3RzLT50c19mb3JjZV91bmxvYWQpIHsKQEAgLTU0MSwxMSArNTgzLDEzIEBACiAJaWYgKCFndHMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGd0cy0+dHNfZ3J1KSB7Ci0JCXVjYm51bSA9IGdldF9jYl9udW1iZXIoKHZvaWQgKilleGNkZXQuY2IpOworCXVjYm51bSA9IGdldF9jYl9udW1iZXIoKHZvaWQgKilleGNkZXQuY2IpOworCWlmICh1Y2JudW0gPj0gZ3RzLT50c19jYnJfYXVfY291bnQgKiBHUlVfQ0JSX0FVX1NJWkUpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKGd0cy0+dHNfZ3J1KSB7CiAJCWNicm51bSA9IHRocmVhZF9jYnJfbnVtYmVyKGd0cywgdWNibnVtKTsKIAkJY2JlID0gZ2V0X2NiZV9ieV9pbmRleChndHMtPnRzX2dydSwgY2JybnVtKTsKLQkJcHJlZmV0Y2h3KGNiZSk7CQkvKiBIYXJtbGVzcyBvbiBoYXJkd2FyZSwgcmVxdWlyZWQgZm9yIGVtdWxhdG9yICovCisJCXByZWZldGNodyhjYmUpOy8qIEhhcm1sZXNzIG9uIGhhcmR3YXJlLCByZXF1aXJlZCBmb3IgZW11bGF0b3IgKi8KIAkJZXhjZGV0Lm9wYyA9IGNiZS0+b3BjY3B5OwogCQlleGNkZXQuZXhvcGMgPSBjYmUtPmV4b3BjY3B5OwogCQlleGNkZXQuZWNhdXNlID0gY2JlLT5lY2F1c2U7CkBAIC01NjcsNiArNjExLDMxIEBACiAvKgogICogVXNlciByZXF1ZXN0IHRvIHVubG9hZCBhIGNvbnRleHQuIENvbnRlbnQgaXMgc2F2ZWQgZm9yIHBvc3NpYmxlIHJlbG9hZC4KICAqLworc3RhdGljIGludCBncnVfdW5sb2FkX2FsbF9jb250ZXh0cyh2b2lkKQoreworCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHM7CisJc3RydWN0IGdydV9zdGF0ZSAqZ3J1OworCWludCBnaWQsIGN0eG51bTsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlmb3JlYWNoX2dpZChnaWQpIHsKKwkJZ3J1ID0gR0lEX1RPX0dSVShnaWQpOworCQlzcGluX2xvY2soJmdydS0+Z3NfbG9jayk7CisJCWZvciAoY3R4bnVtID0gMDsgY3R4bnVtIDwgR1JVX05VTV9DQ0g7IGN0eG51bSsrKSB7CisJCQlndHMgPSBncnUtPmdzX2d0c1tjdHhudW1dOworCQkJaWYgKGd0cyAmJiBtdXRleF90cnlsb2NrKCZndHMtPnRzX2N0eGxvY2spKSB7CisJCQkJc3Bpbl91bmxvY2soJmdydS0+Z3NfbG9jayk7CisJCQkJZ3J1X3VubG9hZF9jb250ZXh0KGd0cywgMSk7CisJCQkJZ3J1X3VubG9ja19ndHMoZ3RzKTsKKwkJCQlzcGluX2xvY2soJmdydS0+Z3NfbG9jayk7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2soJmdydS0+Z3NfbG9jayk7CisJfQorCXJldHVybiAwOworfQorCiBpbnQgZ3J1X3VzZXJfdW5sb2FkX2NvbnRleHQodW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0czsKQEAgLTU3OCw2ICs2NDcsOSBAQAogCiAJZ3J1X2RiZyhncnVkZXYsICJnc2VnIDB4JWx4XG4iLCByZXEuZ3NlZyk7CiAKKwlpZiAoIXJlcS5nc2VnKQorCQlyZXR1cm4gZ3J1X3VubG9hZF9hbGxfY29udGV4dHMoKTsKKwogCWd0cyA9IGdydV9maW5kX2xvY2tfZ3RzKHJlcS5nc2VnKTsKIAlpZiAoIWd0cykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MDksNyArNjgxLDcgQEAKIAlpZiAoIWd0cykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlncnVfZmx1c2hfdGxiX3JhbmdlKGd0cy0+dHNfZ21zLCByZXEudmFkZHIsIHJlcS52YWRkciArIHJlcS5sZW4pOworCWdydV9mbHVzaF90bGJfcmFuZ2UoZ3RzLT50c19nbXMsIHJlcS52YWRkciwgcmVxLmxlbik7CiAJZ3J1X3VubG9ja19ndHMoZ3RzKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1ZmlsZS5jCmluZGV4IGM2N2U0ZTguLjNlNmU0MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWZpbGUuYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVmaWxlLmMKQEAgLTQ1LDcgKzQ1LDkgQEAKICNpbmNsdWRlIDxhc20vdXYvdXZfbW1ycy5oPgogCiBzdHJ1Y3QgZ3J1X2JsYWRlX3N0YXRlICpncnVfYmFzZVtHUlVfTUFYX0JMQURFU10gX19yZWFkX21vc3RseTsKLXVuc2lnbmVkIGxvbmcgZ3J1X3N0YXJ0X3BhZGRyLCBncnVfZW5kX3BhZGRyIF9fcmVhZF9tb3N0bHk7Cit1bnNpZ25lZCBsb25nIGdydV9zdGFydF9wYWRkciBfX3JlYWRfbW9zdGx5OwordW5zaWduZWQgbG9uZyBncnVfZW5kX3BhZGRyIF9fcmVhZF9tb3N0bHk7Cit1bnNpZ25lZCBpbnQgZ3J1X21heF9naWRzIF9fcmVhZF9tb3N0bHk7CiBzdHJ1Y3QgZ3J1X3N0YXRzX3MgZ3J1X3N0YXRzOwogCiAvKiBHdWFyYW50ZWVkIHVzZXIgYXZhaWxhYmxlIHJlc291cmNlcyBvbiBlYWNoIG5vZGUgKi8KQEAgLTEwMSw3ICsxMDMsNyBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJaWYgKHZtYS0+dm1fc3RhcnQgJiAoR1JVX0dTRUdfUEFHRVNJWkUgLSAxKSB8fAotCSAgICAJCQl2bWEtPnZtX2VuZCAmIChHUlVfR1NFR19QQUdFU0laRSAtIDEpKQorCQkJCXZtYS0+dm1fZW5kICYgKEdSVV9HU0VHX1BBR0VTSVpFIC0gMSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdm1hLT52bV9mbGFncyB8PQpAQCAtMjczLDggKzI3NSwxMSBAQAogCWdydS0+Z3NfYmxhZGVfaWQgPSBiaWQ7CiAJZ3J1LT5nc19jYnJfbWFwID0gKEdSVV9DQlJfQVUgPT0gNjQpID8gfjAgOiAoMVVMIDw8IEdSVV9DQlJfQVUpIC0gMTsKIAlncnUtPmdzX2Rzcl9tYXAgPSAoMVVMIDw8IEdSVV9EU1JfQVUpIC0gMTsKKwlncnUtPmdzX2FzaWRfbGltaXQgPSBNQVhfQVNJRDsKIAlncnVfdGdoX2ZsdXNoX2luaXQoZ3J1KTsKLQlncnVfZGJnKGdydWRldiwgImJpZCAlZCwgbmlkICVkLCBncnUgJXgsIHZhZGRyICVwICgweCVseClcbiIsCisJaWYgKGdydS0+Z3NfZ2lkID49IGdydV9tYXhfZ2lkcykKKwkJZ3J1X21heF9naWRzID0gZ3J1LT5nc19naWQgKyAxOworCWdydV9kYmcoZ3J1ZGV2LCAiYmlkICVkLCBuaWQgJWQsIGdpZCAlZCwgdmFkZHIgJXAgKDB4JWx4KVxuIiwKIAkJYmlkLCBuaWQsIGdydS0+Z3NfZ2lkLCBncnUtPmdzX2dydV9iYXNlX3ZhZGRyLAogCQlncnUtPmdzX2dydV9iYXNlX3BhZGRyKTsKIAlncnVfa3NlcnZpY2VzX2luaXQoZ3J1KTsKQEAgLTI5NSw3ICszMDAsNyBAQAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewogCQliaWQgPSB1dl9ub2RlX3RvX2JsYWRlX2lkKG5pZCk7CiAJCXBub2RlID0gdXZfbm9kZV90b19wbm9kZShuaWQpOwotCQlpZiAoZ3J1X2Jhc2VbYmlkXSkKKwkJaWYgKGJpZCA8IDAgfHwgZ3J1X2Jhc2VbYmlkXSkKIAkJCWNvbnRpbnVlOwogCQlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShuaWQsIEdGUF9LRVJORUwsIG9yZGVyKTsKIAkJaWYgKCFwYWdlKQpAQCAtMzA4LDExICszMTMsMTEgQEAKIAkJZHNyYnl0ZXMgPSAwOwogCQljYnJzID0gMDsKIAkJZm9yIChncnUgPSBncnVfYmFzZVtiaWRdLT5ic19ncnVzLCBjaGlwID0gMDsKLQkJICAgICAJCWNoaXAgPCBHUlVfQ0hJUExFVFNfUEVSX0JMQURFOworCQkJCWNoaXAgPCBHUlVfQ0hJUExFVFNfUEVSX0JMQURFOwogCQkJCWNoaXArKywgZ3J1KyspIHsKIAkJCXBhZGRyID0gZ3J1X2NoaXBsZXRfcGFkZHIoZ3J1X2Jhc2VfcGFkZHIsIHBub2RlLCBjaGlwKTsKIAkJCXZhZGRyID0gZ3J1X2NoaXBsZXRfdmFkZHIoZ3J1X2Jhc2VfdmFkZHIsIHBub2RlLCBjaGlwKTsKLQkJCWdydV9pbml0X2NoaXBsZXQoZ3J1LCBwYWRkciwgdmFkZHIsIGJpZCwgbmlkLCBjaGlwKTsKKwkJCWdydV9pbml0X2NoaXBsZXQoZ3J1LCBwYWRkciwgdmFkZHIsIG5pZCwgYmlkLCBjaGlwKTsKIAkJCW4gPSBod2VpZ2h0NjQoZ3J1LT5nc19jYnJfbWFwKSAqIEdSVV9DQlJfQVVfU0laRTsKIAkJCWNicnMgPSBtYXgoY2Jycywgbik7CiAJCQluID0gaHdlaWdodDY0KGdydS0+Z3NfZHNyX21hcCkgKiBHUlVfRFNSX0FVX0JZVEVTOwpAQCAtMzcwLDI2ICszNzUsMjYgQEAKIAl2b2lkICpncnVfc3RhcnRfdmFkZHI7CiAKIAlpZiAoIWlzX3V2X3N5c3RlbSgpKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAKICNpZiBkZWZpbmVkIENPTkZJR19JQTY0CiAJZ3J1X3N0YXJ0X3BhZGRyID0gMHhkMDAwMDAwMDAwVUw7IC8qIFpaWlpaWlpaWlpaWlpaWlpaWlogZml4bWUgKi8KICNlbHNlCiAJZ3J1X3N0YXJ0X3BhZGRyID0gdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1JIX0dBTV9HUlVfT1ZFUkxBWV9DT05GSUdfTU1SKSAmCiAJCQkJMHg3ZmZmZmZmZmZmZmZVTDsKLQogI2VuZGlmCiAJZ3J1X3N0YXJ0X3ZhZGRyID0gX192YShncnVfc3RhcnRfcGFkZHIpOwotCWdydV9lbmRfcGFkZHIgPSBncnVfc3RhcnRfcGFkZHIgKyBNQVhfTlVNTk9ERVMgKiBHUlVfU0laRTsKKwlncnVfZW5kX3BhZGRyID0gZ3J1X3N0YXJ0X3BhZGRyICsgR1JVX01BWF9CTEFERVMgKiBHUlVfU0laRTsKIAlwcmludGsoS0VSTl9JTkZPICJHUlUgc3BhY2U6IDB4JWx4IC0gMHglbHhcbiIsCiAJICAgICAgIGdydV9zdGFydF9wYWRkciwgZ3J1X2VuZF9wYWRkcik7CiAJaXJxID0gZ2V0X2Jhc2VfaXJxKCk7CiAJZm9yIChjaGlwID0gMDsgY2hpcCA8IEdSVV9DSElQTEVUU19QRVJfQkxBREU7IGNoaXArKykgewogCQlyZXQgPSByZXF1ZXN0X2lycShpcnEgKyBjaGlwLCBncnVfaW50ciwgMCwgaWQsIE5VTEwpOwotCQkvKiBUT0RPOiBmaXggaXJxIGhhbmRsaW5nIG9uIHg4Ni4gRm9yIG5vdyBpZ25vcmUgZmFpbHVyZXMgYmVjYXVzZQorCQkvKiBUT0RPOiBmaXggaXJxIGhhbmRsaW5nIG9uIHg4Ni4gRm9yIG5vdyBpZ25vcmUgZmFpbHVyZSBiZWNhdXNlCiAJCSAqIGludGVycnVwdHMgYXJlIG5vdCByZXF1aXJlZCAmIG5vdCB5ZXQgZnVsbHkgc3VwcG9ydGVkICovCiAJCWlmIChyZXQpIHsKLQkJCXByaW50aygiISEhV0FSTklORzogR1JVIGlnbm9yaW5nIHJlcXVlc3QgZmFpbHVyZSEhIVxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiEhIVdBUk5JTkc6IEdSVSBpZ25vcmluZyByZXF1ZXN0IGZhaWx1cmUhISFcbiIpOwogCQkJcmV0ID0gMDsKIAkJfQogCQlpZiAocmV0KSB7CkBAIC00MzUsNyArNDQwLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGdydV9leGl0KHZvaWQpCiB7Ci0JaW50IGksIGJpZDsKKwlpbnQgaSwgYmlkLCBnaWQ7CiAJaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemVvZihzdHJ1Y3QgZ3J1X3N0YXRlKSAqCiAJCQkgICAgICBHUlVfQ0hJUExFVFNfUEVSX0JMQURFKTsKIApAQCAtNDQ1LDYgKzQ1MCw5IEBACiAJZm9yIChpID0gMDsgaSA8IEdSVV9DSElQTEVUU19QRVJfQkxBREU7IGkrKykKIAkJZnJlZV9pcnEoSVJRX0dSVSArIGksIE5VTEwpOwogCisJZm9yZWFjaF9naWQoZ2lkKQorCQlncnVfa3NlcnZpY2VzX2V4aXQoR0lEX1RPX0dSVShnaWQpKTsKKwogCWZvciAoYmlkID0gMDsgYmlkIDwgR1JVX01BWF9CTEFERVM7IGJpZCsrKQogCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWdydV9iYXNlW2JpZF0sIG9yZGVyKTsKIApAQCAtNDY5LDcgKzQ3NywxMSBAQAogCS5mYXVsdAkJPSBncnVfZmF1bHQsCiB9OwogCisjaWZuZGVmIE1PRFVMRQogZnNfaW5pdGNhbGwoZ3J1X2luaXQpOworI2Vsc2UKK21vZHVsZV9pbml0KGdydV9pbml0KTsKKyNlbmRpZgogbW9kdWxlX2V4aXQoZ3J1X2V4aXQpOwogCiBtb2R1bGVfcGFyYW0oZ3J1X29wdGlvbnMsIHVsb25nLCAwNjQ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjdjY2IzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5jCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogICAgICAgICAgICAgIEdSVSBLRVJORUwgTUNTIElOU1RSVUNUSU9OUworICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlICJncnUuaCIKKyNpbmNsdWRlICJncnVsaWIuaCIKKyNpbmNsdWRlICJncnV0YWJsZXMuaCIKKworLyogMTAgc2VjICovCisjaWZkZWYgQ09ORklHX0lBNjQKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjZGVmaW5lIEdSVV9PUEVSQVRJT05fVElNRU9VVAkoKChjeWNsZXNfdCkgbG9jYWxfY3B1X2RhdGEtPml0Y19mcmVxKSoxMCkKKyNlbHNlCisjaW5jbHVkZSA8YXNtL3RzYy5oPgorI2RlZmluZSBHUlVfT1BFUkFUSU9OX1RJTUVPVVQJKChjeWNsZXNfdCkgdHNjX2toeioxMCoxMDAwKQorI2VuZGlmCisKKy8qIEV4dHJhY3QgdGhlIHN0YXR1cyBmaWVsZCBmcm9tIGEga2VybmVsIGhhbmRsZSAqLworI2RlZmluZSBHRVRfTVNFR19IQU5ETEVfU1RBVFVTKGgpCSgoKCoodW5zaWduZWQgbG9uZyAqKShoKSkgPj4gMTYpICYgMykKKworc3RydWN0IG1jc19vcF9zdGF0aXN0aWMgbWNzX29wX3N0YXRpc3RpY3NbbWNzb3BfbGFzdF07CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9tY3Nfc3RhdHMoZW51bSBtY3Nfb3Agb3AsIHVuc2lnbmVkIGxvbmcgY2xrcykKK3sKKwlhdG9taWNfbG9uZ19pbmMoJm1jc19vcF9zdGF0aXN0aWNzW29wXS5jb3VudCk7CisJYXRvbWljX2xvbmdfYWRkKGNsa3MsICZtY3Nfb3Bfc3RhdGlzdGljc1tvcF0udG90YWwpOworCWlmIChtY3Nfb3Bfc3RhdGlzdGljc1tvcF0ubWF4IDwgY2xrcykKKwkJbWNzX29wX3N0YXRpc3RpY3Nbb3BdLm1heCA9IGNsa3M7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2luc3RydWN0aW9uKHZvaWQgKmgpCit7CisJdW5zaWduZWQgbG9uZyAqdzAgPSBoOworCisJd21iKCk7CQkvKiBzZXR0aW5nIENNRCBiaXQgbXVzdCBiZSBsYXN0ICovCisJKncwID0gKncwIHwgMTsKKwlncnVfZmx1c2hfY2FjaGUoaCk7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZSh2b2lkICpoLCBlbnVtIG1jc19vcCBvcGMpCit7CisJaW50IHN0YXR1czsKKwljeWNsZXNfdCBzdGFydF90aW1lID0gZ2V0X2N5Y2xlcygpOworCisJd2hpbGUgKDEpIHsKKwkJY3B1X3JlbGF4KCk7CisJCXN0YXR1cyA9IEdFVF9NU0VHX0hBTkRMRV9TVEFUVVMoaCk7CisJCWlmIChzdGF0dXMgIT0gQ0NIU1RBVFVTX0FDVElWRSkKKwkJCWJyZWFrOworCQlpZiAoR1JVX09QRVJBVElPTl9USU1FT1VUIDwgKGdldF9jeWNsZXMoKSAtIHN0YXJ0X3RpbWUpKQorCQkJcGFuaWMoIkdSVSAlcCBpcyBtYWxmdW5jdGlvbmluZ1xuIiwgaCk7CisJfQorCWlmIChncnVfb3B0aW9ucyAmIE9QVF9TVEFUUykKKwkJdXBkYXRlX21jc19zdGF0cyhvcGMsIGdldF9jeWNsZXMoKSAtIHN0YXJ0X3RpbWUpOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBjY2hfYWxsb2NhdGUoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gsCisJCWludCBhc2lkdmFsLCBpbnQgc2l6ZWF2YWlsLCB1bnNpZ25lZCBsb25nIGNicm1hcCwKKwkJdW5zaWduZWQgbG9uZyBkc3JtYXApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWNjaC0+YXNpZFtpXSA9IChhc2lkdmFsKyspOworCQljY2gtPnNpemVhdmFpbFtpXSA9IHNpemVhdmFpbDsKKwl9CisJY2NoLT5kc3JfYWxsb2NhdGlvbl9tYXAgPSBkc3JtYXA7CisJY2NoLT5jYnJfYWxsb2NhdGlvbl9tYXAgPSBjYnJtYXA7CisJY2NoLT5vcGMgPSBDQ0hPUF9BTExPQ0FURTsKKwlzdGFydF9pbnN0cnVjdGlvbihjY2gpOworCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCwgY2Nob3BfYWxsb2NhdGUpOworfQorCitpbnQgY2NoX3N0YXJ0KHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoKQoreworCWNjaC0+b3BjID0gQ0NIT1BfU1RBUlQ7CisJc3RhcnRfaW5zdHJ1Y3Rpb24oY2NoKTsKKwlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gsIGNjaG9wX3N0YXJ0KTsKK30KKworaW50IGNjaF9pbnRlcnJ1cHQoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gpCit7CisJY2NoLT5vcGMgPSBDQ0hPUF9JTlRFUlJVUFQ7CisJc3RhcnRfaW5zdHJ1Y3Rpb24oY2NoKTsKKwlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gsIGNjaG9wX2ludGVycnVwdCk7Cit9CisKK2ludCBjY2hfZGVhbGxvY2F0ZShzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCkKK3sKKwljY2gtPm9wYyA9IENDSE9QX0RFQUxMT0NBVEU7CisJc3RhcnRfaW5zdHJ1Y3Rpb24oY2NoKTsKKwlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZShjY2gsIGNjaG9wX2RlYWxsb2NhdGUpOworfQorCitpbnQgY2NoX2ludGVycnVwdF9zeW5jKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZQorCQkJCSAgICAgKmNjaCkKK3sKKwljY2gtPm9wYyA9IENDSE9QX0lOVEVSUlVQVF9TWU5DOworCXN0YXJ0X2luc3RydWN0aW9uKGNjaCk7CisJcmV0dXJuIHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUoY2NoLCBjY2hvcF9pbnRlcnJ1cHRfc3luYyk7Cit9CisKK2ludCB0Z2hfaW52YWxpZGF0ZShzdHJ1Y3QgZ3J1X3RsYl9nbG9iYWxfaGFuZGxlICp0Z2gsCisJCQkJIHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFkZHJtYXNrLAorCQkJCSBpbnQgYXNpZCwgaW50IHBhZ2VzaXplLCBpbnQgZ2xvYmFsLCBpbnQgbiwKKwkJCQkgdW5zaWduZWQgc2hvcnQgY3R4Yml0bWFwKQoreworCXRnaC0+dmFkZHIgPSB2YWRkcjsKKwl0Z2gtPmFzaWQgPSBhc2lkOworCXRnaC0+cGFnZXNpemUgPSBwYWdlc2l6ZTsKKwl0Z2gtPm4gPSBuOworCXRnaC0+Z2xvYmFsID0gZ2xvYmFsOworCXRnaC0+dmFkZHJtYXNrID0gdmFkZHJtYXNrOworCXRnaC0+Y3R4Yml0bWFwID0gY3R4Yml0bWFwOworCXRnaC0+b3BjID0gVEdIT1BfVExCSU5WOworCXN0YXJ0X2luc3RydWN0aW9uKHRnaCk7CisJcmV0dXJuIHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUodGdoLCB0Z2hvcF9pbnZhbGlkYXRlKTsKK30KKwordm9pZCB0Zmhfd3JpdGVfb25seShzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHZhZGRyLAorCQkJCSAgaW50IGFzaWQsIGludCBkaXJ0eSwgaW50IHBhZ2VzaXplKQoreworCXRmaC0+ZmlsbGFzaWQgPSBhc2lkOworCXRmaC0+ZmlsbHZhZGRyID0gdmFkZHI7CisJdGZoLT5wZm4gPSBwZm47CisJdGZoLT5kaXJ0eSA9IGRpcnR5OworCXRmaC0+cGFnZXNpemUgPSBwYWdlc2l6ZTsKKwl0ZmgtPm9wYyA9IFRGSE9QX1dSSVRFX09OTFk7CisJc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKK30KKwordm9pZCB0Zmhfd3JpdGVfcmVzdGFydChzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFkZHIsIGludCBnYWEsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgYXNpZCwgaW50IGRpcnR5LAorCQkJCSAgICAgaW50IHBhZ2VzaXplKQoreworCXRmaC0+ZmlsbGFzaWQgPSBhc2lkOworCXRmaC0+ZmlsbHZhZGRyID0gdmFkZHI7CisJdGZoLT5wZm4gPSBwYWRkciA+PiBHUlVfUEFERFJfU0hJRlQ7CisJdGZoLT5nYWEgPSBnYWE7CisJdGZoLT5kaXJ0eSA9IGRpcnR5OworCXRmaC0+cGFnZXNpemUgPSBwYWdlc2l6ZTsKKwl0ZmgtPm9wYyA9IFRGSE9QX1dSSVRFX1JFU1RBUlQ7CisJc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKK30KKwordm9pZCB0ZmhfcmVzdGFydChzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCkKK3sKKwl0ZmgtPm9wYyA9IFRGSE9QX1JFU1RBUlQ7CisJc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKK30KKwordm9pZCB0ZmhfdXNlcl9wb2xsaW5nX21vZGUoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgpCit7CisJdGZoLT5vcGMgPSBURkhPUF9VU0VSX1BPTExJTkdfTU9ERTsKKwlzdGFydF9pbnN0cnVjdGlvbih0ZmgpOworfQorCit2b2lkIHRmaF9leGNlcHRpb24oc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgpCit7CisJdGZoLT5vcGMgPSBURkhPUF9FWENFUFRJT047CisJc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1aGFuZGxlcy5oCmluZGV4IGI2MzAxOGQuLjFlZDc0ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWhhbmRsZXMuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVoYW5kbGVzLmgKQEAgLTQ4OSwxNzAgKzQ4OSwyOCBAQAogICogCSA2NG0JCQkyNgk4CiAgKiAJLi4uCiAgKi8KLSNkZWZpbmUgR1JVX1BBR0VTSVpFKHNoKQkoKCgoc2gpID4gMjAgPyAoc2gpICsgMjogKHNoKSkgPj4gMSkgLSA2KQorI2RlZmluZSBHUlVfUEFHRVNJWkUoc2gpCSgoKChzaCkgPiAyMCA/IChzaCkgKyAyIDogKHNoKSkgPj4gMSkgLSA2KQogI2RlZmluZSBHUlVfU0laRUFWQUlMKHNoKQkoMVVMIDw8IEdSVV9QQUdFU0laRShzaCkpCiAKIC8qIG1pbmltdW0gVExCIHB1cmdlIGNvdW50IHRvIGVuc3VyZSBhIGZ1bGwgcHVyZ2UgKi8KICNkZWZpbmUgR1JVTUFYSU5WQUwJCTEwMjRVTAogCitpbnQgY2NoX2FsbG9jYXRlKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoLAorICAgICAgIGludCBhc2lkdmFsLCBpbnQgc2l6ZWF2YWlsLCB1bnNpZ25lZCBsb25nIGNicm1hcCwgdW5zaWduZWQgbG9uZyBkc3JtYXApOwogCi0vKiBFeHRyYWN0IHRoZSBzdGF0dXMgZmllbGQgZnJvbSBhIGtlcm5lbCBoYW5kbGUgKi8KLSNkZWZpbmUgR0VUX01TRUdfSEFORExFX1NUQVRVUyhoKQkoKCgqKHVuc2lnbmVkIGxvbmcgKikoaCkpID4+IDE2KSAmIDMpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF9pbnN0cnVjdGlvbih2b2lkICpoKQotewotCXVuc2lnbmVkIGxvbmcgKncwID0gaDsKLQotCXdtYigpOwkJLyogc2V0dGluZyBDTUQgYml0IG11c3QgYmUgbGFzdCAqLwotCSp3MCA9ICp3MCB8IDE7Ci0JZ3J1X2ZsdXNoX2NhY2hlKGgpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKHZvaWQgKmgpCi17Ci0JaW50IHN0YXR1czsKLQotCWRvIHsKLQkJY3B1X3JlbGF4KCk7Ci0JCWJhcnJpZXIoKTsKLQkJc3RhdHVzID0gR0VUX01TRUdfSEFORExFX1NUQVRVUyhoKTsKLQl9IHdoaWxlIChzdGF0dXMgPT0gQ0NIU1RBVFVTX0FDVElWRSk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotI2lmIGRlZmluZWQgQ09ORklHX0lBNjQKLXN0YXRpYyBpbmxpbmUgdm9pZCBjY2hfYWxsb2NhdGVfc2V0X2FzaWRzKAotCQkgIHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoLCBpbnQgYXNpZHZhbCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPD0gUkdOX0hQQUdFOyBpKyspIHsgIC8qICBhc3N1bWUgSFBBR0UgaXMgbGFzdCByZWdpb24gKi8KLQkJY2NoLT5hc2lkW2ldID0gKGFzaWR2YWwrKyk7Ci0jaWYgMAotCQkvKiBaWlogaHVnZXBhZ2VzIG5vdCBzdXBwb3J0ZWQgeWV0ICovCi0JCWlmIChpID09IFJHTl9IUEFHRSkKLQkJCWNjaC0+c2l6ZWF2YWlsW2ldID0gR1JVX1NJWkVBVkFJTChocGFnZV9zaGlmdCk7Ci0JCWVsc2UKLSNlbmRpZgotCQkJY2NoLT5zaXplYXZhaWxbaV0gPSBHUlVfU0laRUFWQUlMKFBBR0VfU0hJRlQpOwotCX0KLX0KLSNlbGlmIGRlZmluZWQgQ09ORklHX1g4Nl82NAotc3RhdGljIGlubGluZSB2b2lkIGNjaF9hbGxvY2F0ZV9zZXRfYXNpZHMoCi0JCSAgc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gsIGludCBhc2lkdmFsKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQljY2gtPmFzaWRbaV0gPSBhc2lkdmFsKys7Ci0JCWNjaC0+c2l6ZWF2YWlsW2ldID0gR1JVX1NJWkVBVkFJTChQQUdFX1NISUZUKSB8Ci0JCQlHUlVfU0laRUFWQUlMKDIxKTsKLQl9Ci19Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQgY2NoX2FsbG9jYXRlKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoLAotCQkJICAgICAgIGludCBhc2lkdmFsLCB1bnNpZ25lZCBsb25nIGNicm1hcCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRzcm1hcCkKLXsKLQljY2hfYWxsb2NhdGVfc2V0X2FzaWRzKGNjaCwgYXNpZHZhbCk7Ci0JY2NoLT5kc3JfYWxsb2NhdGlvbl9tYXAgPSBkc3JtYXA7Ci0JY2NoLT5jYnJfYWxsb2NhdGlvbl9tYXAgPSBjYnJtYXA7Ci0JY2NoLT5vcGMgPSBDQ0hPUF9BTExPQ0FURTsKLQlzdGFydF9pbnN0cnVjdGlvbihjY2gpOwotCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNjaF9zdGFydChzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCkKLXsKLQljY2gtPm9wYyA9IENDSE9QX1NUQVJUOwotCXN0YXJ0X2luc3RydWN0aW9uKGNjaCk7Ci0JcmV0dXJuIHdhaXRfaW5zdHJ1Y3Rpb25fY29tcGxldGUoY2NoKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgY2NoX2ludGVycnVwdChzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaCkKLXsKLQljY2gtPm9wYyA9IENDSE9QX0lOVEVSUlVQVDsKLQlzdGFydF9pbnN0cnVjdGlvbihjY2gpOwotCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNjaF9kZWFsbG9jYXRlKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoKQotewotCWNjaC0+b3BjID0gQ0NIT1BfREVBTExPQ0FURTsKLQlzdGFydF9pbnN0cnVjdGlvbihjY2gpOwotCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNjaF9pbnRlcnJ1cHRfc3luYyhzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUKLQkJCQkgICAgICpjY2gpCi17Ci0JY2NoLT5vcGMgPSBDQ0hPUF9JTlRFUlJVUFRfU1lOQzsKLQlzdGFydF9pbnN0cnVjdGlvbihjY2gpOwotCXJldHVybiB3YWl0X2luc3RydWN0aW9uX2NvbXBsZXRlKGNjaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHRnaF9pbnZhbGlkYXRlKHN0cnVjdCBncnVfdGxiX2dsb2JhbF9oYW5kbGUgKnRnaCwKLQkJCQkgdW5zaWduZWQgbG9uZyB2YWRkciwgdW5zaWduZWQgbG9uZyB2YWRkcm1hc2ssCi0JCQkJIGludCBhc2lkLCBpbnQgcGFnZXNpemUsIGludCBnbG9iYWwsIGludCBuLAotCQkJCSB1bnNpZ25lZCBzaG9ydCBjdHhiaXRtYXApCi17Ci0JdGdoLT52YWRkciA9IHZhZGRyOwotCXRnaC0+YXNpZCA9IGFzaWQ7Ci0JdGdoLT5wYWdlc2l6ZSA9IHBhZ2VzaXplOwotCXRnaC0+biA9IG47Ci0JdGdoLT5nbG9iYWwgPSBnbG9iYWw7Ci0JdGdoLT52YWRkcm1hc2sgPSB2YWRkcm1hc2s7Ci0JdGdoLT5jdHhiaXRtYXAgPSBjdHhiaXRtYXA7Ci0JdGdoLT5vcGMgPSBUR0hPUF9UTEJJTlY7Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24odGdoKTsKLQlyZXR1cm4gd2FpdF9pbnN0cnVjdGlvbl9jb21wbGV0ZSh0Z2gpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGZoX3dyaXRlX29ubHkoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgsCi0JCQkJICB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyB2YWRkciwKLQkJCQkgIGludCBhc2lkLCBpbnQgZGlydHksIGludCBwYWdlc2l6ZSkKLXsKLQl0ZmgtPmZpbGxhc2lkID0gYXNpZDsKLQl0ZmgtPmZpbGx2YWRkciA9IHZhZGRyOwotCXRmaC0+cGZuID0gcGZuOwotCXRmaC0+ZGlydHkgPSBkaXJ0eTsKLQl0ZmgtPnBhZ2VzaXplID0gcGFnZXNpemU7Ci0JdGZoLT5vcGMgPSBURkhPUF9XUklURV9PTkxZOwotCXN0YXJ0X2luc3RydWN0aW9uKHRmaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0Zmhfd3JpdGVfcmVzdGFydChzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFkZHIsIGludCBnYWEsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHZhZGRyLCBpbnQgYXNpZCwgaW50IGRpcnR5LAotCQkJCSAgICAgaW50IHBhZ2VzaXplKQotewotCXRmaC0+ZmlsbGFzaWQgPSBhc2lkOwotCXRmaC0+ZmlsbHZhZGRyID0gdmFkZHI7Ci0JdGZoLT5wZm4gPSBwYWRkciA+PiBHUlVfUEFERFJfU0hJRlQ7Ci0JdGZoLT5nYWEgPSBnYWE7Ci0JdGZoLT5kaXJ0eSA9IGRpcnR5OwotCXRmaC0+cGFnZXNpemUgPSBwYWdlc2l6ZTsKLQl0ZmgtPm9wYyA9IFRGSE9QX1dSSVRFX1JFU1RBUlQ7Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHRmaF9yZXN0YXJ0KHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoKQotewotCXRmaC0+b3BjID0gVEZIT1BfUkVTVEFSVDsKLQlzdGFydF9pbnN0cnVjdGlvbih0ZmgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGZoX3VzZXJfcG9sbGluZ19tb2RlKHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoKQotewotCXRmaC0+b3BjID0gVEZIT1BfVVNFUl9QT0xMSU5HX01PREU7Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHRmaF9leGNlcHRpb24oc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgpCi17Ci0JdGZoLT5vcGMgPSBURkhPUF9FWENFUFRJT047Ci0Jc3RhcnRfaW5zdHJ1Y3Rpb24odGZoKTsKLX0KK2ludCBjY2hfc3RhcnQoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gpOworaW50IGNjaF9pbnRlcnJ1cHQoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gpOworaW50IGNjaF9kZWFsbG9jYXRlKHN0cnVjdCBncnVfY29udGV4dF9jb25maWd1cmF0aW9uX2hhbmRsZSAqY2NoKTsKK2ludCBjY2hfaW50ZXJydXB0X3N5bmMoc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2gpOworaW50IHRnaF9pbnZhbGlkYXRlKHN0cnVjdCBncnVfdGxiX2dsb2JhbF9oYW5kbGUgKnRnaCwgdW5zaWduZWQgbG9uZyB2YWRkciwKKwl1bnNpZ25lZCBsb25nIHZhZGRybWFzaywgaW50IGFzaWQsIGludCBwYWdlc2l6ZSwgaW50IGdsb2JhbCwgaW50IG4sCisJdW5zaWduZWQgc2hvcnQgY3R4Yml0bWFwKTsKK3ZvaWQgdGZoX3dyaXRlX29ubHkoc3RydWN0IGdydV90bGJfZmF1bHRfaGFuZGxlICp0ZmgsIHVuc2lnbmVkIGxvbmcgcGZuLAorCXVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBhc2lkLCBpbnQgZGlydHksIGludCBwYWdlc2l6ZSk7Cit2b2lkIHRmaF93cml0ZV9yZXN0YXJ0KHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoLCB1bnNpZ25lZCBsb25nIHBhZGRyLAorCWludCBnYWEsIHVuc2lnbmVkIGxvbmcgdmFkZHIsIGludCBhc2lkLCBpbnQgZGlydHksIGludCBwYWdlc2l6ZSk7Cit2b2lkIHRmaF9yZXN0YXJ0KHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoKTsKK3ZvaWQgdGZoX3VzZXJfcG9sbGluZ19tb2RlKHN0cnVjdCBncnVfdGxiX2ZhdWx0X2hhbmRsZSAqdGZoKTsKK3ZvaWQgdGZoX2V4Y2VwdGlvbihzdHJ1Y3QgZ3J1X3RsYl9mYXVsdF9oYW5kbGUgKnRmaCk7CiAKICNlbmRpZiAvKiBfX0dSVUhBTkRMRVNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuYyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCmluZGV4IDg4MGM1NWQuLmQ4YmQ3ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5jCkBAIC01Miw4ICs1MiwxMCBAQAogICovCiAKIC8qIEJsYWRlIHBlcmNwdSByZXNvdXJjZXMgUEVSTUFORU5UTFkgcmVzZXJ2ZWQgZm9yIGtlcm5lbCB1c2UgKi8KLSNkZWZpbmUgR1JVX05VTV9LRVJORUxfQ0JSICAgICAgMQorI2RlZmluZSBHUlVfTlVNX0tFUk5FTF9DQlIJMQogI2RlZmluZSBHUlVfTlVNX0tFUk5FTF9EU1JfQllURVMgMjU2CisjZGVmaW5lIEdSVV9OVU1fS0VSTkVMX0RTUl9DTAkoR1JVX05VTV9LRVJORUxfRFNSX0JZVEVTIC8JCVwKKwkJCQkJR1JVX0NBQ0hFX0xJTkVfQllURVMpCiAjZGVmaW5lIEtFUk5FTF9DVFhOVU0gICAgICAgICAgIDE1CiAKIC8qIEdSVSBpbnN0cnVjdGlvbiBhdHRyaWJ1dGVzIGZvciBhbGwgaW5zdHJ1Y3Rpb25zICovCkBAIC05NCw3ICs5Niw2IEBACiAJY2hhcglmaWxsOwogfTsKIAotI2RlZmluZSBRTElORVMobXEpCSgobXEpICsgb2Zmc2V0b2Yoc3RydWN0IG1lc3NhZ2VfcXVldWUsIHFsaW5lcykpCiAjZGVmaW5lIEhTVEFUVVMobXEsIGgpCSgobXEpICsgb2Zmc2V0b2Yoc3RydWN0IG1lc3NhZ2VfcXVldWUsIGhzdGF0dXNbaF0pKQogCiBzdGF0aWMgaW50IGdydV9nZXRfY3B1X3Jlc291cmNlcyhpbnQgZHNyX2J5dGVzLCB2b2lkICoqY2IsIHZvaWQgKipkc3IpCkBAIC0xMjIsNyArMTIzLDcgQEAKIAlzdHJ1Y3QgZ3J1X2NvbnRyb2xfYmxvY2tfZXh0ZW5kZWQgKmNiZTsKIAogCWNiZSA9IGdldF9jYmUoR1JVQkFTRShjYiksIGdldF9jYl9udW1iZXIoY2IpKTsKLQlwcmVmZXRjaHcoY2JlKTsgICAgICAgICAvKiBIYXJtbGVzcyBvbiBoYXJkd2FyZSwgcmVxdWlyZWQgZm9yIGVtdWxhdG9yICovCisJcHJlZmV0Y2h3KGNiZSk7CS8qIEhhcm1sZXNzIG9uIGhhcmR3YXJlLCByZXF1aXJlZCBmb3IgZW11bGF0b3IgKi8KIAlleGNkZXQtPm9wYyA9IGNiZS0+b3BjY3B5OwogCWV4Y2RldC0+ZXhvcGMgPSBjYmUtPmV4b3BjY3B5OwogCWV4Y2RldC0+ZWNhdXNlID0gY2JlLT5lY2F1c2U7CkBAIC0yNTAsNyArMjUxLDggQEAKICAqIENyZWF0ZSBhIG1lc3NhZ2UgcXVldWUuCiAgKiAJcWxpbmVzIC0gbWVzc2FnZSBxdWV1ZSBzaXplIGluIGNhY2hlIGxpbmVzLiBJbmNsdWRlcyAyLWxpbmUgaGVhZGVyLgogICovCi1pbnQgZ3J1X2NyZWF0ZV9tZXNzYWdlX3F1ZXVlKHZvaWQgKnAsIHVuc2lnbmVkIGludCBieXRlcykKK2ludCBncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCwKKwkJdm9pZCAqcCwgdW5zaWduZWQgaW50IGJ5dGVzLCBpbnQgbmFzaWQsIGludCB2ZWN0b3IsIGludCBhcGljaWQpCiB7CiAJc3RydWN0IG1lc3NhZ2VfcXVldWUgKm1xID0gcDsKIAl1bnNpZ25lZCBpbnQgcWxpbmVzOwpAQCAtMjY1LDYgKzI2NywxMiBAQAogCW1xLT5oc3RhdHVzWzBdID0gMDsKIAltcS0+aHN0YXR1c1sxXSA9IDE7CiAJbXEtPmhlYWQgPSBncnVfbWVzcV9oZWFkKDIsIHFsaW5lcyAvIDIgKyAxKTsKKwltcWQtPm1xID0gbXE7CisJbXFkLT5tcV9ncGEgPSB1dl9ncGEobXEpOworCW1xZC0+cWxpbmVzID0gcWxpbmVzOworCW1xZC0+aW50ZXJydXB0X3Bub2RlID0gVVZfTkFTSURfVE9fUE5PREUobmFzaWQpOworCW1xZC0+aW50ZXJydXB0X3ZlY3RvciA9IHZlY3RvcjsKKwltcWQtPmludGVycnVwdF9hcGljaWQgPSBhcGljaWQ7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUpOwpAQCAtMjc3LDggKzI4NSw4IEBACiAgKgkJLTEgLSBpZiBtZXNxIHNlbnQgc3VjY2Vzc2Z1bGx5IGJ1dCBxdWV1ZSBub3QgZnVsbAogICoJCT4wIC0gdW5leHBlY3RlZCBlcnJvci4gTVFFX3h4eCByZXR1cm5lZAogICovCi1zdGF0aWMgaW50IHNlbmRfbm9vcF9tZXNzYWdlKHZvaWQgKmNiLAotCQkJCXVuc2lnbmVkIGxvbmcgbXEsIHZvaWQgKm1lc2cpCitzdGF0aWMgaW50IHNlbmRfbm9vcF9tZXNzYWdlKHZvaWQgKmNiLCBzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqbXFkLAorCQkJCXZvaWQgKm1lc2cpCiB7CiAJY29uc3Qgc3RydWN0IG1lc3NhZ2VfaGVhZGVyIG5vb3BfaGVhZGVyID0gewogCQkJCQkucHJlc2VudCA9IE1RU19OT09QLCAubGluZXMgPSAxfTsKQEAgLTI4OSw3ICsyOTcsNyBAQAogCVNUQVQobWVzcV9ub29wKTsKIAlzYXZlX21oZHIgPSAqbWhkcjsKIAkqbWhkciA9IG5vb3BfaGVhZGVyOwotCWdydV9tZXNxKGNiLCBtcSwgZ3J1X2dldF90cmkobWhkciksIDEsIElNQSk7CisJZ3J1X21lc3EoY2IsIG1xZC0+bXFfZ3BhLCBncnVfZ2V0X3RyaShtaGRyKSwgMSwgSU1BKTsKIAlyZXQgPSBncnVfd2FpdChjYik7CiAKIAlpZiAocmV0KSB7CkBAIC0zMTMsNyArMzIxLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIENCU1NfUFVUX05BQ0tFRDoKIAkJCVNUQVQobWVzcV9ub29wX3B1dF9uYWNrZWQpOwotCQkJbSA9IG1xICsgKGdydV9nZXRfYW1vX3ZhbHVlX2hlYWQoY2IpIDw8IDYpOworCQkJbSA9IG1xZC0+bXFfZ3BhICsgKGdydV9nZXRfYW1vX3ZhbHVlX2hlYWQoY2IpIDw8IDYpOwogCQkJZ3J1X3ZzdG9yZShjYiwgbSwgZ3J1X2dldF90cmkobWVzZyksIFhUWVBFX0NMLCAxLCAxLAogCQkJCQkJSU1BKTsKIAkJCWlmIChncnVfd2FpdChjYikgPT0gQ0JTX0lETEUpCkBAIC0zMzMsMzAgKzM0MSwyMCBAQAogLyoKICAqIEhhbmRsZSBhIGdydV9tZXNxIGZ1bGwuCiAgKi8KLXN0YXRpYyBpbnQgc2VuZF9tZXNzYWdlX3F1ZXVlX2Z1bGwodm9pZCAqY2IsCi0JCQkgICB1bnNpZ25lZCBsb25nIG1xLCB2b2lkICptZXNnLCBpbnQgbGluZXMpCitzdGF0aWMgaW50IHNlbmRfbWVzc2FnZV9xdWV1ZV9mdWxsKHZvaWQgKmNiLCBzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqbXFkLAorCQkJCXZvaWQgKm1lc2csIGludCBsaW5lcykKIHsKIAl1bmlvbiBncnVfbWVzcWhlYWQgbXFoOwogCXVuc2lnbmVkIGludCBsaW1pdCwgaGVhZDsKIAl1bnNpZ25lZCBsb25nIGF2YWx1ZTsKLQlpbnQgaGFsZiwgcWxpbmVzLCBzYXZlOworCWludCBoYWxmLCBxbGluZXM7CiAKIAkvKiBEZXRlcm1pbmUgaWYgc3dpdGNoaW5nIHRvIGZpcnN0L3NlY29uZCBoYWxmIG9mIHEgKi8KIAlhdmFsdWUgPSBncnVfZ2V0X2Ftb192YWx1ZShjYik7CiAJaGVhZCA9IGdydV9nZXRfYW1vX3ZhbHVlX2hlYWQoY2IpOwogCWxpbWl0ID0gZ3J1X2dldF9hbW9fdmFsdWVfbGltaXQoY2IpOwogCi0JLyoKLQkgKiBGZXRjaCAicWxpbmVzIiBmcm9tIHRoZSBxdWV1ZSBoZWFkZXIuIFNpbmNlIHRoZSBxdWV1ZSBtYXkgYmUKLQkgKiBpbiBtZW1vcnkgdGhhdCBjYW4ndCBiZSBhY2Nlc3NlZCB1c2luZyBzb2NrZXQgYWRkcmVzc2VzLCB1c2UKLQkgKiB0aGUgR1JVIHRvIGFjY2VzcyB0aGUgZGF0YS4gVXNlIERTUiBzcGFjZSBmcm9tIHRoZSBtZXNzYWdlLgotCSAqLwotCXNhdmUgPSAqKGludCAqKW1lc2c7Ci0JZ3J1X3Zsb2FkKGNiLCBRTElORVMobXEpLCBncnVfZ2V0X3RyaShtZXNnKSwgWFRZUEVfVywgMSwgMSwgSU1BKTsKLQlpZiAoZ3J1X3dhaXQoY2IpICE9IENCU19JRExFKQotCQlnb3RvIGNiZXJyOwotCXFsaW5lcyA9ICooaW50ICopbWVzZzsKLQkqKGludCAqKW1lc2cgPSBzYXZlOworCXFsaW5lcyA9IG1xZC0+cWxpbmVzOwogCWhhbGYgPSAobGltaXQgIT0gcWxpbmVzKTsKIAogCWlmIChoYWxmKQpAQCAtMzY1LDcgKzM2Myw3IEBACiAJCW1xaCA9IGdydV9tZXNxX2hlYWQoMiwgcWxpbmVzIC8gMiArIDEpOwogCiAJLyogVHJ5IHRvIGdldCBsb2NrIGZvciBzd2l0Y2hpbmcgaGVhZCBwb2ludGVyICovCi0JZ3J1X2dhbWlyKGNiLCBFT1BfSVJfQ0xSLCBIU1RBVFVTKG1xLCBoYWxmKSwgWFRZUEVfRFcsIElNQSk7CisJZ3J1X2dhbWlyKGNiLCBFT1BfSVJfQ0xSLCBIU1RBVFVTKG1xZC0+bXFfZ3BhLCBoYWxmKSwgWFRZUEVfRFcsIElNQSk7CiAJaWYgKGdydV93YWl0KGNiKSAhPSBDQlNfSURMRSkKIAkJZ290byBjYmVycjsKIAlpZiAoIWdydV9nZXRfYW1vX3ZhbHVlKGNiKSkgewpAQCAtMzc1LDggKzM3Myw4IEBACiAKIAkvKiBHb3QgdGhlIGxvY2suIFNlbmQgb3B0aW9uYWwgTk9QIGlmIHF1ZXVlIG5vdCBmdWxsLCAqLwogCWlmIChoZWFkICE9IGxpbWl0KSB7Ci0JCWlmIChzZW5kX25vb3BfbWVzc2FnZShjYiwgbXEsIG1lc2cpKSB7Ci0JCQlncnVfZ2FtaXIoY2IsIEVPUF9JUl9JTkMsIEhTVEFUVVMobXEsIGhhbGYpLAorCQlpZiAoc2VuZF9ub29wX21lc3NhZ2UoY2IsIG1xZCwgbWVzZykpIHsKKwkJCWdydV9nYW1pcihjYiwgRU9QX0lSX0lOQywgSFNUQVRVUyhtcWQtPm1xX2dwYSwgaGFsZiksCiAJCQkJCVhUWVBFX0RXLCBJTUEpOwogCQkJaWYgKGdydV93YWl0KGNiKSAhPSBDQlNfSURMRSkKIAkJCQlnb3RvIGNiZXJyOwpAQCAtMzg3LDE0ICszODUsMTYgQEAKIAl9CiAKIAkvKiBUaGVuIGZsaXAgcXVldWVoZWFkIHRvIG90aGVyIGhhbGYgb2YgcXVldWUuICovCi0JZ3J1X2dhbWVyKGNiLCBFT1BfRVJSX0NTV0FQLCBtcSwgWFRZUEVfRFcsIG1xaC52YWwsIGF2YWx1ZSwgSU1BKTsKKwlncnVfZ2FtZXIoY2IsIEVPUF9FUlJfQ1NXQVAsIG1xZC0+bXFfZ3BhLCBYVFlQRV9EVywgbXFoLnZhbCwgYXZhbHVlLAorCQkJCQkJCUlNQSk7CiAJaWYgKGdydV93YWl0KGNiKSAhPSBDQlNfSURMRSkKIAkJZ290byBjYmVycjsKIAogCS8qIElmIG5vdCBzdWNjZXNzZnVsbHkgaW4gc3dhcHBpbmcgcXVldWUgaGVhZCwgY2xlYXIgdGhlIGhzdGF0dXMgbG9jayAqLwogCWlmIChncnVfZ2V0X2Ftb192YWx1ZShjYikgIT0gYXZhbHVlKSB7CiAJCVNUQVQobWVzcV9xZl9zd2l0Y2hfaGVhZF9mYWlsZWQpOwotCQlncnVfZ2FtaXIoY2IsIEVPUF9JUl9JTkMsIEhTVEFUVVMobXEsIGhhbGYpLCBYVFlQRV9EVywgSU1BKTsKKwkJZ3J1X2dhbWlyKGNiLCBFT1BfSVJfSU5DLCBIU1RBVFVTKG1xZC0+bXFfZ3BhLCBoYWxmKSwgWFRZUEVfRFcsCisJCQkJCQkJSU1BKTsKIAkJaWYgKGdydV93YWl0KGNiKSAhPSBDQlNfSURMRSkKIAkJCWdvdG8gY2JlcnI7CiAJfQpAQCAtNDA0LDE1ICs0MDQsMjUgQEAKIAlyZXR1cm4gTVFFX1VORVhQRUNURURfQ0JfRVJSOwogfQogCisvKgorICogU2VuZCBhIGNyb3NzLXBhcnRpdGlvbiBpbnRlcnJ1cHQgdG8gdGhlIFNTSSB0aGF0IGNvbnRhaW5zIHRoZSB0YXJnZXQKKyAqIG1lc3NhZ2UgcXVldWUuIE5vcm1hbGx5LCB0aGUgaW50ZXJydXB0IGlzIGF1dG9tYXRpY2FsbHkgZGVsaXZlcmVkIGJ5IGhhcmR3YXJlCisgKiBidXQgc29tZSBlcnJvciBjb25kaXRpb25zIHJlcXVpcmUgZXhwbGljaXQgZGVsaXZlcnkuCisgKi8KK3N0YXRpYyB2b2lkIHNlbmRfbWVzc2FnZV9xdWV1ZV9pbnRlcnJ1cHQoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCkKK3sKKwlpZiAobXFkLT5pbnRlcnJ1cHRfdmVjdG9yKQorCQl1dl9odWJfc2VuZF9pcGkobXFkLT5pbnRlcnJ1cHRfcG5vZGUsIG1xZC0+aW50ZXJydXB0X2FwaWNpZCwKKwkJCQltcWQtPmludGVycnVwdF92ZWN0b3IpOworfQorCiAKIC8qCiAgKiBIYW5kbGUgYSBncnVfbWVzcSBmYWlsdXJlLiBTb21lIG9mIHRoZXNlIGZhaWx1cmVzIGFyZSBzb2Z0d2FyZSByZWNvdmVyYWJsZQogICogb3IgcmV0cnlhYmxlLgogICovCi1zdGF0aWMgaW50IHNlbmRfbWVzc2FnZV9mYWlsdXJlKHZvaWQgKmNiLAotCQkJCXVuc2lnbmVkIGxvbmcgbXEsCi0JCQkJdm9pZCAqbWVzZywKLQkJCQlpbnQgbGluZXMpCitzdGF0aWMgaW50IHNlbmRfbWVzc2FnZV9mYWlsdXJlKHZvaWQgKmNiLCBzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqbXFkLAorCQkJCXZvaWQgKm1lc2csIGludCBsaW5lcykKIHsKIAlpbnQgc3Vic3RhdHVzLCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgbTsKQEAgLTQyOSw3ICs0MzksNyBAQAogCQlicmVhazsKIAljYXNlIENCU1NfUUxJTUlUX1JFQUNIRUQ6CiAJCVNUQVQobWVzcV9zZW5kX3FsaW1pdF9yZWFjaGVkKTsKLQkJcmV0ID0gc2VuZF9tZXNzYWdlX3F1ZXVlX2Z1bGwoY2IsIG1xLCBtZXNnLCBsaW5lcyk7CisJCXJldCA9IHNlbmRfbWVzc2FnZV9xdWV1ZV9mdWxsKGNiLCBtcWQsIG1lc2csIGxpbmVzKTsKIAkJYnJlYWs7CiAJY2FzZSBDQlNTX0FNT19OQUNLRUQ6CiAJCVNUQVQobWVzcV9zZW5kX2Ftb19uYWNrZWQpOwpAQCAtNDM3LDEyICs0NDcsMTQgQEAKIAkJYnJlYWs7CiAJY2FzZSBDQlNTX1BVVF9OQUNLRUQ6CiAJCVNUQVQobWVzcV9zZW5kX3B1dF9uYWNrZWQpOwotCQltID1tcSArIChncnVfZ2V0X2Ftb192YWx1ZV9oZWFkKGNiKSA8PCA2KTsKKwkJbSA9IG1xZC0+bXFfZ3BhICsgKGdydV9nZXRfYW1vX3ZhbHVlX2hlYWQoY2IpIDw8IDYpOwogCQlncnVfdnN0b3JlKGNiLCBtLCBncnVfZ2V0X3RyaShtZXNnKSwgWFRZUEVfQ0wsIGxpbmVzLCAxLCBJTUEpOwotCQlpZiAoZ3J1X3dhaXQoY2IpID09IENCU19JRExFKQorCQlpZiAoZ3J1X3dhaXQoY2IpID09IENCU19JRExFKSB7CiAJCQlyZXQgPSBNUUVfT0s7Ci0JCWVsc2UKKwkJCXNlbmRfbWVzc2FnZV9xdWV1ZV9pbnRlcnJ1cHQobXFkKTsKKwkJfSBlbHNlIHsKIAkJCXJldCA9IE1RRV9VTkVYUEVDVEVEX0NCX0VSUjsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKQEAgLTQ1MiwxMiArNDY0LDEyIEBACiAKIC8qCiAgKiBTZW5kIGEgbWVzc2FnZSB0byBhIG1lc3NhZ2UgcXVldWUKLSAqIAljYglHUlUgY29udHJvbCBibG9jayB0byB1c2UgdG8gc2VuZCBtZXNzYWdlCi0gKiAJbXEJbWVzc2FnZSBxdWV1ZQorICogCW1xZAltZXNzYWdlIHF1ZXVlIGRlc2NyaXB0b3IKICAqIAltZXNnCW1lc3NhZ2UuIHVzdCBiZSB2YWRkciB3aXRoaW4gYSBHU0VHCiAgKiAJYnl0ZXMJbWVzc2FnZSBzaXplICg8PSAyIENMKQogICovCi1pbnQgZ3J1X3NlbmRfbWVzc2FnZV9ncGEodW5zaWduZWQgbG9uZyBtcSwgdm9pZCAqbWVzZywgdW5zaWduZWQgaW50IGJ5dGVzKQoraW50IGdydV9zZW5kX21lc3NhZ2VfZ3BhKHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjICptcWQsIHZvaWQgKm1lc2csCisJCQkJdW5zaWduZWQgaW50IGJ5dGVzKQogewogCXN0cnVjdCBtZXNzYWdlX2hlYWRlciAqbWhkcjsKIAl2b2lkICpjYjsKQEAgLTQ4MSwxMCArNDkzLDEwIEBACiAKIAlkbyB7CiAJCXJldCA9IE1RRV9PSzsKLQkJZ3J1X21lc3EoY2IsIG1xLCBncnVfZ2V0X3RyaShtaGRyKSwgY2xpbmVzLCBJTUEpOworCQlncnVfbWVzcShjYiwgbXFkLT5tcV9ncGEsIGdydV9nZXRfdHJpKG1oZHIpLCBjbGluZXMsIElNQSk7CiAJCWlzdGF0dXMgPSBncnVfd2FpdChjYik7CiAJCWlmIChpc3RhdHVzICE9IENCU19JRExFKQotCQkJcmV0ID0gc2VuZF9tZXNzYWdlX2ZhaWx1cmUoY2IsIG1xLCBkc3IsIGNsaW5lcyk7CisJCQlyZXQgPSBzZW5kX21lc3NhZ2VfZmFpbHVyZShjYiwgbXFkLCBkc3IsIGNsaW5lcyk7CiAJfSB3aGlsZSAocmV0ID09IE1RSUVfQUdBSU4pOwogCWdydV9mcmVlX2NwdV9yZXNvdXJjZXMoY2IsIGRzcik7CiAKQEAgLTQ5Nyw5ICs1MDksOSBAQAogLyoKICAqIEFkdmFuY2UgdGhlIHJlY2VpdmUgcG9pbnRlciBmb3IgdGhlIHF1ZXVlIHRvIHRoZSBuZXh0IG1lc3NhZ2UuCiAgKi8KLXZvaWQgZ3J1X2ZyZWVfbWVzc2FnZSh2b2lkICpybXEsIHZvaWQgKm1lc2cpCit2b2lkIGdydV9mcmVlX21lc3NhZ2Uoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCwgdm9pZCAqbWVzZykKIHsKLQlzdHJ1Y3QgbWVzc2FnZV9xdWV1ZSAqbXEgPSBybXE7CisJc3RydWN0IG1lc3NhZ2VfcXVldWUgKm1xID0gbXFkLT5tcTsKIAlzdHJ1Y3QgbWVzc2FnZV9oZWFkZXIgKm1oZHIgPSBtcS0+bmV4dDsKIAl2b2lkICpuZXh0LCAqcG5leHQ7CiAJaW50IGhhbGYgPSAtMTsKQEAgLTUyOSwxNiArNTQxLDE2IEBACiAgKiBwcmVzZW50LiBVc2VyIG11c3QgY2FsbCBuZXh0X21lc3NhZ2UoKSB0byBtb3ZlIHRvIG5leHQgbWVzc2FnZS4KICAqIAlybXEJbWVzc2FnZSBxdWV1ZQogICovCi12b2lkICpncnVfZ2V0X25leHRfbWVzc2FnZSh2b2lkICpybXEpCit2b2lkICpncnVfZ2V0X25leHRfbWVzc2FnZShzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqbXFkKQogewotCXN0cnVjdCBtZXNzYWdlX3F1ZXVlICptcSA9IHJtcTsKKwlzdHJ1Y3QgbWVzc2FnZV9xdWV1ZSAqbXEgPSBtcWQtPm1xOwogCXN0cnVjdCBtZXNzYWdlX2hlYWRlciAqbWhkciA9IG1xLT5uZXh0OwogCWludCBwcmVzZW50ID0gbWhkci0+cHJlc2VudDsKIAogCS8qIHNraXAgTk9PUCBtZXNzYWdlcyAqLwogCVNUQVQobWVzcV9yZWNlaXZlKTsKIAl3aGlsZSAocHJlc2VudCA9PSBNUVNfTk9PUCkgewotCQlncnVfZnJlZV9tZXNzYWdlKHJtcSwgbWhkcik7CisJCWdydV9mcmVlX21lc3NhZ2UobXFkLCBtaGRyKTsKIAkJbWhkciA9IG1xLT5uZXh0OwogCQlwcmVzZW50ID0gbWhkci0+cHJlc2VudDsKIAl9CkBAIC01NzYsNyArNTg4LDcgQEAKIAlpZiAoZ3J1X2dldF9jcHVfcmVzb3VyY2VzKEdSVV9OVU1fS0VSTkVMX0RTUl9CWVRFUywgJmNiLCAmZHNyKSkKIAkJcmV0dXJuIE1RRV9CVUdfTk9fUkVTT1VSQ0VTOwogCWdydV9iY29weShjYiwgc3JjX2dwYSwgZGVzdF9ncGEsIGdydV9nZXRfdHJpKGRzciksCi0JCSAgWFRZUEVfQiwgYnl0ZXMsIEdSVV9OVU1fS0VSTkVMX0RTUl9CWVRFUywgSU1BKTsKKwkJICBYVFlQRV9CLCBieXRlcywgR1JVX05VTV9LRVJORUxfRFNSX0NMLCBJTUEpOwogCXJldCA9IGdydV93YWl0KGNiKTsKIAlncnVfZnJlZV9jcHVfcmVzb3VyY2VzKGNiLCBkc3IpOwogCXJldHVybiByZXQ7CkBAIC02MTEsNyArNjIzLDcgQEAKIAogCWlmICh3b3JkMCAhPSB3b3JkMSB8fCB3b3JkMCAhPSBNQUdJQykgewogCQlwcmludGsKLQkJICAgICgiR1JVIHF1aWNrdGVzdCBlcnI6IGdydSAlZCwgZm91bmQgMHglbHgsIGV4cGVjdGVkIDB4JWx4XG4iLAorCQkgICAgKCJHUlUgcXVpY2t0ZXN0IGVycjogZ2lkICVkLCBmb3VuZCAweCVseCwgZXhwZWN0ZWQgMHglbHhcbiIsCiAJCSAgICAgZ3J1LT5nc19naWQsIHdvcmQxLCBNQUdJQyk7CiAJCUJVRygpOwkJLyogWlpaIHNob3VsZCBub3QgYmUgZmF0YWwgKi8KIAl9CkBAIC02NjAsMTUgKzY3MiwxNSBAQAogCWNjaC0+dGxiX2ludF9lbmFibGUgPSAwOwogCWNjaC0+dGZtX2RvbmVfYml0X2VuYWJsZSA9IDA7CiAJY2NoLT51bm1hcF9lbmFibGUgPSAxOwotCWVyciA9IGNjaF9hbGxvY2F0ZShjY2gsIDAsIGNicl9tYXAsIGRzcl9tYXApOworCWVyciA9IGNjaF9hbGxvY2F0ZShjY2gsIDAsIDAsIGNicl9tYXAsIGRzcl9tYXApOwogCWlmIChlcnIpIHsKIAkJZ3J1X2RiZyhncnVkZXYsCi0JCQkiVW5hYmxlIHRvIGFsbG9jYXRlIGtlcm5lbCBDQ0g6IGdydSAlZCwgZXJyICVkXG4iLAorCQkJIlVuYWJsZSB0byBhbGxvY2F0ZSBrZXJuZWwgQ0NIOiBnaWQgJWQsIGVyciAlZFxuIiwKIAkJCWdydS0+Z3NfZ2lkLCBlcnIpOwogCQlCVUcoKTsKIAl9CiAJaWYgKGNjaF9zdGFydChjY2gpKSB7Ci0JCWdydV9kYmcoZ3J1ZGV2LCAiVW5hYmxlIHRvIHN0YXJ0IGtlcm5lbCBDQ0g6IGdydSAlZCwgZXJyICVkXG4iLAorCQlncnVfZGJnKGdydWRldiwgIlVuYWJsZSB0byBzdGFydCBrZXJuZWwgQ0NIOiBnaWQgJWQsIGVyciAlZFxuIiwKIAkJCWdydS0+Z3NfZ2lkLCBlcnIpOwogCQlCVUcoKTsKIAl9CkBAIC02NzgsMyArNjkwLDIyIEBACiAJCXF1aWNrdGVzdChncnUpOwogCXJldHVybiAwOwogfQorCit2b2lkIGdydV9rc2VydmljZXNfZXhpdChzdHJ1Y3QgZ3J1X3N0YXRlICpncnUpCit7CisJc3RydWN0IGdydV9jb250ZXh0X2NvbmZpZ3VyYXRpb25faGFuZGxlICpjY2g7CisJc3RydWN0IGdydV9ibGFkZV9zdGF0ZSAqYnM7CisKKwlicyA9IGdydS0+Z3NfYmxhZGU7CisJaWYgKGdydSAhPSAmYnMtPmJzX2dydXNbMV0pCisJCXJldHVybjsKKworCWNjaCA9IGdldF9jY2goZ3J1LT5nc19ncnVfYmFzZV92YWRkciwgS0VSTkVMX0NUWE5VTSk7CisJbG9ja19jY2hfaGFuZGxlKGNjaCk7CisJaWYgKGNjaF9pbnRlcnJ1cHRfc3luYyhjY2gpKQorCQlCVUcoKTsKKwlpZiAoY2NoX2RlYWxsb2NhdGUoY2NoKSkKKwkJQlVHKCk7CisJdW5sb2NrX2NjaF9oYW5kbGUoY2NoKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1a3NlcnZpY2VzLmggYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuaAppbmRleCBlYjE3ZTBhLi43NDdlZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuaAorKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVrc2VydmljZXMuaApAQCAtNDEsNiArNDEsMTUgQEAKICAqIAktIGdydV9jcmVhdGVfbWVzc2FnZV9xdWV1ZSgpIG5lZWRzIGludGVycnVwdCB2ZWN0b3IgaW5mbwogICovCiAKK3N0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjIHsKKwl2b2lkCQkqbXE7CQkJLyogbWVzc2FnZSBxdWV1ZSB2YWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcJbXFfZ3BhOwkJCS8qIGdsb2JhbCBhZGRyZXNzIG9mIG1xICovCisJaW50CQlxbGluZXM7CQkJLyogcXVldWUgc2l6ZSBpbiBDTCAqLworCWludAkJaW50ZXJydXB0X3ZlY3RvcjsJLyogaW50ZXJydXB0IHZlY3RvciAqLworCWludAkJaW50ZXJydXB0X3Bub2RlOwkvKiBwbm9kZSBmb3IgaW50ZXJydXB0ICovCisJaW50CQlpbnRlcnJ1cHRfYXBpY2lkOwkvKiBsYXBpY2lkIGZvciBpbnRlcnJ1cHQgKi8KK307CisKIC8qCiAgKiBJbml0aWFsaXplIGEgdXNlciBhbGxvY2F0ZWQgY2h1bmsgb2YgbWVtb3J5IHRvIGJlIHVzZWQgYXMKICAqIGEgbWVzc2FnZSBxdWV1ZS4gVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBxdWV1ZSBpcwpAQCAtNTEsMTQgKzYwLDE5IEBACiAgKiB0byBtYW5hZ2UgdGhlIHF1ZXVlLgogICoKICAqICBJbnB1dDoKLSAqIAlwCXBvaW50ZXIgdG8gdXNlciBhbGxvY2F0ZWQgbWVtb3J5LgorICogCW1xZAlwb2ludGVyIHRvIG1lc3NhZ2UgcXVldWUgZGVzY3JpcHRvcgorICogCXAJcG9pbnRlciB0byB1c2VyIGFsbG9jYXRlZCBtZXNxIG1lbW9yeS4KICAqIAlieXRlcwlzaXplIG9mIG1lc3NhZ2UgcXVldWUgaW4gYnl0ZXMKKyAqICAgICAgdmVjdG9yCWludGVycnVwdCB2ZWN0b3IgKHplcm8gaWYgbm8gaW50ZXJydXB0cykKKyAqICAgICAgbmFzaWQJbmFzaWQgb2YgYmxhZGUgd2hlcmUgaW50ZXJydXB0IGlzIGRlbGl2ZXJlZAorICogICAgICBhcGljaWQJYXBpY2lkIG9mIGNwdSBmb3IgaW50ZXJydXB0CiAgKgogICogIEVycm9yczoKICAqICAJMAlPSwogICogIAk+MAllcnJvcgogICovCi1leHRlcm4gaW50IGdydV9jcmVhdGVfbWVzc2FnZV9xdWV1ZSh2b2lkICpwLCB1bnNpZ25lZCBpbnQgYnl0ZXMpOworZXh0ZXJuIGludCBncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCwKKwkJdm9pZCAqcCwgdW5zaWduZWQgaW50IGJ5dGVzLCBpbnQgbmFzaWQsIGludCB2ZWN0b3IsIGludCBhcGljaWQpOwogCiAvKgogICogU2VuZCBhIG1lc3NhZ2UgdG8gYSBtZXNzYWdlIHF1ZXVlLgpAQCAtNjgsNyArODIsNyBAQAogICoKICAqCiAgKiAgIElucHV0OgotICogCXhtcQltZXNzYWdlIHF1ZXVlIC0gbXVzdCBiZSBhIFVWIGdsb2JhbCBwaHlzaWNhbCBhZGRyZXNzCisgKiAJbXFkCXBvaW50ZXIgdG8gbWVzc2FnZSBxdWV1ZSBkZXNjcmlwdG9yCiAgKiAJbWVzZwlwb2ludGVyIHRvIG1lc3NhZ2UuIE11c3QgYmUgNjQtYml0IGFsaWduZWQKICAqIAlieXRlcwlzaXplIG9mIG1lc3NhZ2UgaW4gYnl0ZXMKICAqCkBAIC03Nyw4ICs5MSw4IEBACiAgKiAgICAgPjAJU2VuZCBmYWlsdXJlIC0gc2VlIGVycm9yIGNvZGVzIGJlbG93CiAgKgogICovCi1leHRlcm4gaW50IGdydV9zZW5kX21lc3NhZ2VfZ3BhKHVuc2lnbmVkIGxvbmcgbXFfZ3BhLCB2b2lkICptZXNnLAotCQkJCQkJdW5zaWduZWQgaW50IGJ5dGVzKTsKK2V4dGVybiBpbnQgZ3J1X3NlbmRfbWVzc2FnZV9ncGEoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MgKm1xZCwKKwkJCXZvaWQgKm1lc2csIHVuc2lnbmVkIGludCBieXRlcyk7CiAKIC8qIFN0YXR1cyB2YWx1ZXMgZm9yIGdydV9zZW5kX21lc3NhZ2UoKSAqLwogI2RlZmluZSBNUUVfT0sJCQkwCS8qIG1lc3NhZ2Ugc2VudCBzdWNjZXNzZnVsbHkgKi8KQEAgLTk0LDEwICsxMDgsMTEgQEAKICAqIEFQSSBleHRlbnNpb25zIG1heSBhbGxvdyBmb3Igb3V0LW9mLW9yZGVyIGZyZWVpbmcuCiAgKgogICogICBJbnB1dAotICogCW1xCW1lc3NhZ2UgcXVldWUKKyAqIAltcWQJcG9pbnRlciB0byBtZXNzYWdlIHF1ZXVlIGRlc2NyaXB0b3IKICAqIAltZXNxCW1lc3NhZ2UgYmVpbmcgZnJlZWQKICAqLwotZXh0ZXJuIHZvaWQgZ3J1X2ZyZWVfbWVzc2FnZSh2b2lkICptcSwgdm9pZCAqbWVzcSk7CitleHRlcm4gdm9pZCBncnVfZnJlZV9tZXNzYWdlKHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjICptcWQsCisJCQkgICAgIHZvaWQgKm1lc3EpOwogCiAvKgogICogR2V0IG5leHQgbWVzc2FnZSBmcm9tIG1lc3NhZ2UgcXVldWUuIFJldHVybnMgcG9pbnRlciB0bwpAQCAtMTA2LDEzICsxMjEsMTMgQEAKICAqIGluIG9yZGVyIHRvIG1vdmUgdGhlIHF1ZXVlIHBvaW50ZXJzIHRvIG5leHQgbWVzc2FnZS4KICAqCiAgKiAgIElucHV0Ci0gKiAJbXEJbWVzc2FnZSBxdWV1ZQorICogCW1xZAlwb2ludGVyIHRvIG1lc3NhZ2UgcXVldWUgZGVzY3JpcHRvcgogICoKICAqICAgT3V0cHV0OgogICoJcAlwb2ludGVyIHRvIG1lc3NhZ2UKICAqCU5VTEwJbm8gbWVzc2FnZSBhdmFpbGFibGUKICAqLwotZXh0ZXJuIHZvaWQgKmdydV9nZXRfbmV4dF9tZXNzYWdlKHZvaWQgKm1xKTsKK2V4dGVybiB2b2lkICpncnVfZ2V0X25leHRfbWVzc2FnZShzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqbXFkKTsKIAogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1bWFpbi5jCmluZGV4IDNkMmZjMjEuLmVjM2Y3YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydW1haW4uYworKysgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnVtYWluLmMKQEAgLTc2LDEwICs3Niw5IEBACiAvKiBIaXQgdGhlIGFzaWQgbGltaXQuIFN0YXJ0IG92ZXIgKi8KIHN0YXRpYyBpbnQgZ3J1X3dyYXBfYXNpZChzdHJ1Y3QgZ3J1X3N0YXRlICpncnUpCiB7Ci0JZ3J1X2RiZyhncnVkZXYsICJncnUgJXBcbiIsIGdydSk7CisJZ3J1X2RiZyhncnVkZXYsICJnaWQgJWRcbiIsIGdydS0+Z3NfZ2lkKTsKIAlTVEFUKGFzaWRfd3JhcCk7CiAJZ3J1LT5nc19hc2lkX2dlbisrOwotCWdydV9mbHVzaF9hbGxfdGxiKGdydSk7CiAJcmV0dXJuIE1JTl9BU0lEOwogfQogCkBAIC04OCwxOSArODcsMjEgQEAKIHsKIAlpbnQgaSwgZ2lkLCBpbnVzZV9hc2lkLCBsaW1pdDsKIAotCWdydV9kYmcoZ3J1ZGV2LCAiZ3J1ICVwLCBhc2lkIDB4JXhcbiIsIGdydSwgYXNpZCk7CisJZ3J1X2RiZyhncnVkZXYsICJnaWQgJWQsIGFzaWQgMHgleFxuIiwgZ3J1LT5nc19naWQsIGFzaWQpOwogCVNUQVQoYXNpZF9uZXh0KTsKIAlsaW1pdCA9IE1BWF9BU0lEOwogCWlmIChhc2lkID49IGxpbWl0KQogCQlhc2lkID0gZ3J1X3dyYXBfYXNpZChncnUpOworCWdydV9mbHVzaF9hbGxfdGxiKGdydSk7CiAJZ2lkID0gZ3J1LT5nc19naWQ7CiBhZ2FpbjoKIAlmb3IgKGkgPSAwOyBpIDwgR1JVX05VTV9DQ0g7IGkrKykgewogCQlpZiAoIWdydS0+Z3NfZ3RzW2ldKQogCQkJY29udGludWU7CiAJCWludXNlX2FzaWQgPSBncnUtPmdzX2d0c1tpXS0+dHNfZ21zLT5tc19hc2lkc1tnaWRdLm10X2FzaWQ7Ci0JCWdydV9kYmcoZ3J1ZGV2LCAiZ3J1ICVwLCBpbnVzZV9hc2lkIDB4JXgsIGN4dG51bSAlZCwgZ3RzICVwXG4iLAotCQkJZ3J1LCBpbnVzZV9hc2lkLCBpLCBncnUtPmdzX2d0c1tpXSk7CisJCWdydV9kYmcoZ3J1ZGV2LCAiZ2lkICVkLCBndHMgJXAsIGdtcyAlcCwgaW51c2UgMHgleCwgY3h0ICVkXG4iLAorCQkJZ3J1LT5nc19naWQsIGdydS0+Z3NfZ3RzW2ldLCBncnUtPmdzX2d0c1tpXS0+dHNfZ21zLAorCQkJaW51c2VfYXNpZCwgaSk7CiAJCWlmIChpbnVzZV9hc2lkID09IGFzaWQpIHsKIAkJCWFzaWQgKz0gQVNJRF9JTkM7CiAJCQlpZiAoYXNpZCA+PSBsaW1pdCkgewpAQCAtMTIwLDggKzEyMSw4IEBACiAJfQogCWdydS0+Z3NfYXNpZF9saW1pdCA9IGxpbWl0OwogCWdydS0+Z3NfYXNpZCA9IGFzaWQ7Ci0JZ3J1X2RiZyhncnVkZXYsICJncnUgJXAsIG5ldyBhc2lkIDB4JXgsIG5ld19saW1pdCAweCV4XG4iLCBncnUsIGFzaWQsCi0JCWxpbWl0KTsKKwlncnVfZGJnKGdydWRldiwgImdpZCAlZCwgbmV3IGFzaWQgMHgleCwgbmV3X2xpbWl0IDB4JXhcbiIsIGdydS0+Z3NfZ2lkLAorCQkJCQlhc2lkLCBsaW1pdCk7CiAJcmV0dXJuIGFzaWQ7CiB9CiAKQEAgLTEzMCwxNCArMTMxLDEyIEBACiB7CiAJaW50IGFzaWQ7CiAKLQlzcGluX2xvY2soJmdydS0+Z3NfYXNpZF9sb2NrKTsKIAlncnUtPmdzX2FzaWQgKz0gQVNJRF9JTkM7CiAJYXNpZCA9IGdydS0+Z3NfYXNpZDsKIAlpZiAoYXNpZCA+PSBncnUtPmdzX2FzaWRfbGltaXQpCiAJCWFzaWQgPSBncnVfcmVzZXRfYXNpZF9saW1pdChncnUsIGFzaWQpOwotCXNwaW5fdW5sb2NrKCZncnUtPmdzX2FzaWRfbG9jayk7CiAKLQlncnVfZGJnKGdydWRldiwgImdydSAlcCwgYXNpZCAweCV4XG4iLCBncnUsIGFzaWQpOworCWdydV9kYmcoZ3J1ZGV2LCAiZ2lkICVkLCBhc2lkIDB4JXhcbiIsIGdydS0+Z3NfZ2lkLCBhc2lkKTsKIAlyZXR1cm4gYXNpZDsKIH0KIApAQCAtMjE1LDE3ICsyMTQsMjAgQEAKICAqIFRMQiBtYW5hbmdtZW50IHJlcXVpcmVzIHRyYWNraW5nIGFsbCBHUlUgY2hpcGxldHMgdGhhdCBoYXZlIGxvYWRlZCBhIEdTRUcKICAqIGNvbnRleHQuCiAgKi8KLXN0YXRpYyBpbnQgZ3J1X2xvYWRfbW1fdHJhY2tlcihzdHJ1Y3QgZ3J1X3N0YXRlICpncnUsIHN0cnVjdCBncnVfbW1fc3RydWN0ICpnbXMsCi0JCQkgICAgICAgaW50IGN0eG51bSkKK3N0YXRpYyBpbnQgZ3J1X2xvYWRfbW1fdHJhY2tlcihzdHJ1Y3QgZ3J1X3N0YXRlICpncnUsCisJCQkJCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMpCiB7CisJc3RydWN0IGdydV9tbV9zdHJ1Y3QgKmdtcyA9IGd0cy0+dHNfZ21zOwogCXN0cnVjdCBncnVfbW1fdHJhY2tlciAqYXNpZHMgPSAmZ21zLT5tc19hc2lkc1tncnUtPmdzX2dpZF07Ci0JdW5zaWduZWQgc2hvcnQgY3R4Yml0bWFwID0gKDEgPDwgY3R4bnVtKTsKKwl1bnNpZ25lZCBzaG9ydCBjdHhiaXRtYXAgPSAoMSA8PCBndHMtPnRzX2N0eG51bSk7CiAJaW50IGFzaWQ7CiAKIAlzcGluX2xvY2soJmdtcy0+bXNfYXNpZF9sb2NrKTsKIAlhc2lkID0gYXNpZHMtPm10X2FzaWQ7CiAKLQlpZiAoYXNpZCA9PSAwIHx8IGFzaWRzLT5tdF9hc2lkX2dlbiAhPSBncnUtPmdzX2FzaWRfZ2VuKSB7CisJc3Bpbl9sb2NrKCZncnUtPmdzX2FzaWRfbG9jayk7CisJaWYgKGFzaWQgPT0gMCB8fCAoYXNpZHMtPm10X2N0eGJpdG1hcCA9PSAwICYmIGFzaWRzLT5tdF9hc2lkX2dlbiAhPQorCQkJICBncnUtPmdzX2FzaWRfZ2VuKSkgewogCQlhc2lkID0gZ3J1X2Fzc2lnbl9hc2lkKGdydSk7CiAJCWFzaWRzLT5tdF9hc2lkID0gYXNpZDsKIAkJYXNpZHMtPm10X2FzaWRfZ2VuID0gZ3J1LT5nc19hc2lkX2dlbjsKQEAgLTIzMyw2ICsyMzUsNyBAQAogCX0gZWxzZSB7CiAJCVNUQVQoYXNpZF9yZXVzZSk7CiAJfQorCXNwaW5fdW5sb2NrKCZncnUtPmdzX2FzaWRfbG9jayk7CiAKIAlCVUdfT04oYXNpZHMtPm10X2N0eGJpdG1hcCAmIGN0eGJpdG1hcCk7CiAJYXNpZHMtPm10X2N0eGJpdG1hcCB8PSBjdHhiaXRtYXA7CkBAIC0yNDEsMjQgKzI0NCwyOCBAQAogCXNwaW5fdW5sb2NrKCZnbXMtPm1zX2FzaWRfbG9jayk7CiAKIAlncnVfZGJnKGdydWRldiwKLQkJImdydSAleCwgZ21zICVwLCBjdHhudW0gMHglZCwgYXNpZCAweCV4LCBhc2lkbWFwIDB4JWx4XG4iLAotCQlncnUtPmdzX2dpZCwgZ21zLCBjdHhudW0sIGFzaWQsIGdtcy0+bXNfYXNpZG1hcFswXSk7CisJCSJnaWQgJWQsIGd0cyAlcCwgZ21zICVwLCBjdHhudW0gJWQsIGFzaWQgMHgleCwgYXNpZG1hcCAweCVseFxuIiwKKwkJZ3J1LT5nc19naWQsIGd0cywgZ21zLCBndHMtPnRzX2N0eG51bSwgYXNpZCwKKwkJZ21zLT5tc19hc2lkbWFwWzBdKTsKIAlyZXR1cm4gYXNpZDsKIH0KIAogc3RhdGljIHZvaWQgZ3J1X3VubG9hZF9tbV90cmFja2VyKHN0cnVjdCBncnVfc3RhdGUgKmdydSwKLQkJCQkgIHN0cnVjdCBncnVfbW1fc3RydWN0ICpnbXMsIGludCBjdHhudW0pCisJCQkJCXN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMpCiB7CisJc3RydWN0IGdydV9tbV9zdHJ1Y3QgKmdtcyA9IGd0cy0+dHNfZ21zOwogCXN0cnVjdCBncnVfbW1fdHJhY2tlciAqYXNpZHM7CiAJdW5zaWduZWQgc2hvcnQgY3R4Yml0bWFwOwogCiAJYXNpZHMgPSAmZ21zLT5tc19hc2lkc1tncnUtPmdzX2dpZF07Ci0JY3R4Yml0bWFwID0gKDEgPDwgY3R4bnVtKTsKKwljdHhiaXRtYXAgPSAoMSA8PCBndHMtPnRzX2N0eG51bSk7CiAJc3Bpbl9sb2NrKCZnbXMtPm1zX2FzaWRfbG9jayk7CisJc3Bpbl9sb2NrKCZncnUtPmdzX2FzaWRfbG9jayk7CiAJQlVHX09OKChhc2lkcy0+bXRfY3R4Yml0bWFwICYgY3R4Yml0bWFwKSAhPSBjdHhiaXRtYXApOwogCWFzaWRzLT5tdF9jdHhiaXRtYXAgXj0gY3R4Yml0bWFwOwotCWdydV9kYmcoZ3J1ZGV2LCAiZ3J1ICV4LCBnbXMgJXAsIGN0eG51bSAweCVkLCBhc2lkbWFwIDB4JWx4XG4iLAotCQlncnUtPmdzX2dpZCwgZ21zLCBjdHhudW0sIGdtcy0+bXNfYXNpZG1hcFswXSk7CisJZ3J1X2RiZyhncnVkZXYsICJnaWQgJWQsIGd0cyAlcCwgZ21zICVwLCBjdHhudW0gMHglZCwgYXNpZG1hcCAweCVseFxuIiwKKwkJZ3J1LT5nc19naWQsIGd0cywgZ21zLCBndHMtPnRzX2N0eG51bSwgZ21zLT5tc19hc2lkbWFwWzBdKTsKKwlzcGluX3VubG9jaygmZ3J1LT5nc19hc2lkX2xvY2spOwogCXNwaW5fdW5sb2NrKCZnbXMtPm1zX2FzaWRfbG9jayk7CiB9CiAKQEAgLTMxOSw2ICszMjYsNyBAQAogCWd0cy0+dHNfdm1hID0gdm1hOwogCWd0cy0+dHNfdGxiX2ludF9zZWxlY3QgPSAtMTsKIAlndHMtPnRzX2dtcyA9IGdydV9yZWdpc3Rlcl9tbXVfbm90aWZpZXIoKTsKKwlndHMtPnRzX3NpemVhdmFpbCA9IEdSVV9TSVpFQVZBSUwoUEFHRV9TSElGVCk7CiAJaWYgKCFndHMtPnRzX2dtcykKIAkJZ290byBlcnI7CiAKQEAgLTM5OSw3ICs0MDcsNyBAQAogCXN0cnVjdCBncnVfc3RhdGUgKmdydTsKIAogCWdydSA9IGd0cy0+dHNfZ3J1OwotCWdydV9kYmcoZ3J1ZGV2LCAiZ3RzICVwLCBncnUgJXBcbiIsIGd0cywgZ3J1KTsKKwlncnVfZGJnKGdydWRldiwgImd0cyAlcCwgZ2lkICVkXG4iLCBndHMsIGdydS0+Z3NfZ2lkKTsKIAogCXNwaW5fbG9jaygmZ3J1LT5nc19sb2NrKTsKIAlncnUtPmdzX2d0c1tndHMtPnRzX2N0eG51bV0gPSBOVUxMOwpAQCAtNDA4LDYgKzQxNiw3IEBACiAJX19jbGVhcl9iaXQoZ3RzLT50c19jdHhudW0sICZncnUtPmdzX2NvbnRleHRfbWFwKTsKIAlndHMtPnRzX2N0eG51bSA9IE5VTExDVFg7CiAJZ3RzLT50c19ncnUgPSBOVUxMOworCWd0cy0+dHNfYmxhZGUgPSAtMTsKIAlzcGluX3VubG9jaygmZ3J1LT5nc19sb2NrKTsKIAogCWd0c19kcm9wKGd0cyk7CkBAIC00MzIsOCArNDQxLDggQEAKIAlyZXR1cm4gR1JVX0hBTkRMRV9CWVRFUzsKIH0KIAotc3RhdGljIHZvaWQgZ3J1X3ByZWZldGNoX2NvbnRleHQodm9pZCAqZ3NlZywgdm9pZCAqY2IsIHZvaWQgKmNiZSwgdW5zaWduZWQgbG9uZyBjYnJtYXAsCi0JCQkJdW5zaWduZWQgbG9uZyBsZW5ndGgpCitzdGF0aWMgdm9pZCBncnVfcHJlZmV0Y2hfY29udGV4dCh2b2lkICpnc2VnLCB2b2lkICpjYiwgdm9pZCAqY2JlLAorCQkJCXVuc2lnbmVkIGxvbmcgY2JybWFwLCB1bnNpZ25lZCBsb25nIGxlbmd0aCkKIHsKIAlpbnQgaSwgc2NyOwogCkBAIC01MDAsMTIgKzUwOSwxMiBAQAogCXphcF92bWFfcHRlcyhndHMtPnRzX3ZtYSwgVUdSVUFERFIoZ3RzKSwgR1JVX0dTRUdfUEFHRVNJWkUpOwogCWNjaCA9IGdldF9jY2goZ3J1LT5nc19ncnVfYmFzZV92YWRkciwgY3R4bnVtKTsKIAorCWdydV9kYmcoZ3J1ZGV2LCAiZ3RzICVwXG4iLCBndHMpOwogCWxvY2tfY2NoX2hhbmRsZShjY2gpOwogCWlmIChjY2hfaW50ZXJydXB0X3N5bmMoY2NoKSkKIAkJQlVHKCk7Ci0JZ3J1X2RiZyhncnVkZXYsICJndHMgJXBcbiIsIGd0cyk7CiAKLQlncnVfdW5sb2FkX21tX3RyYWNrZXIoZ3J1LCBndHMtPnRzX2dtcywgZ3RzLT50c19jdHhudW0pOworCWdydV91bmxvYWRfbW1fdHJhY2tlcihncnUsIGd0cyk7CiAJaWYgKHNhdmVzdGF0ZSkKIAkJZ3J1X3VubG9hZF9jb250ZXh0X2RhdGEoZ3RzLT50c19nZGF0YSwgZ3J1LT5nc19ncnVfYmFzZV92YWRkciwKIAkJCQkJY3R4bnVtLCBndHMtPnRzX2Nicl9tYXAsCkBAIC01MzQsNyArNTQzLDcgQEAKIAljY2ggPSBnZXRfY2NoKGdydS0+Z3NfZ3J1X2Jhc2VfdmFkZHIsIGN0eG51bSk7CiAKIAlsb2NrX2NjaF9oYW5kbGUoY2NoKTsKLQlhc2lkID0gZ3J1X2xvYWRfbW1fdHJhY2tlcihncnUsIGd0cy0+dHNfZ21zLCBndHMtPnRzX2N0eG51bSk7CisJYXNpZCA9IGdydV9sb2FkX21tX3RyYWNrZXIoZ3J1LCBndHMpOwogCWNjaC0+dGZtX2ZhdWx0X2JpdF9lbmFibGUgPQogCSAgICAoZ3RzLT50c191c2VyX29wdGlvbnMgPT0gR1JVX09QVF9NSVNTX0ZNTV9QT0xMCiAJICAgICB8fCBndHMtPnRzX3VzZXJfb3B0aW9ucyA9PSBHUlVfT1BUX01JU1NfRk1NX0lOVFIpOwpAQCAtNTQ0LDcgKzU1Myw4IEBACiAJCWNjaC0+dGxiX2ludF9zZWxlY3QgPSBndHMtPnRzX3RsYl9pbnRfc2VsZWN0OwogCX0KIAljY2gtPnRmbV9kb25lX2JpdF9lbmFibGUgPSAwOwotCWVyciA9IGNjaF9hbGxvY2F0ZShjY2gsIGFzaWQsIGd0cy0+dHNfY2JyX21hcCwgZ3RzLT50c19kc3JfbWFwKTsKKwllcnIgPSBjY2hfYWxsb2NhdGUoY2NoLCBhc2lkLCBndHMtPnRzX3NpemVhdmFpbCwgZ3RzLT50c19jYnJfbWFwLAorCQkJCWd0cy0+dHNfZHNyX21hcCk7CiAJaWYgKGVycikgewogCQlncnVfZGJnKGdydWRldiwKIAkJCSJlcnIgJWQ6IGNjaCAlcCwgZ3RzICVwLCBjYnIgMHglbHgsIGRzciAweCVseFxuIiwKQEAgLTU2NSwxMSArNTc1LDEyIEBACiAvKgogICogVXBkYXRlIGZpZWxkcyBpbiBhbiBhY3RpdmUgQ0NIOgogICogCS0gcmV0YXJnZXQgaW50ZXJydXB0cyBvbiBsb2NhbCBibGFkZQorICogCS0gdXBkYXRlIHNpemVhdmFpbCBtYXNrCiAgKiAJLSBmb3JjZSBhIGRlbGF5ZWQgY29udGV4dCB1bmxvYWQgYnkgY2xlYXJpbmcgdGhlIENDSCBhc2lkcy4gVGhpcwogICogCSAgZm9yY2VzIFRMQiBtaXNzZXMgZm9yIG5ldyBHUlUgaW5zdHJ1Y3Rpb25zLiBUaGUgY29udGV4dCBpcyB1bmxvYWRlZAogICogCSAgd2hlbiB0aGUgbmV4dCBUTEIgbWlzcyBvY2N1cnMuCiAgKi8KLXN0YXRpYyBpbnQgZ3J1X3VwZGF0ZV9jY2goc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cywgaW50IGludF9zZWxlY3QpCitpbnQgZ3J1X3VwZGF0ZV9jY2goc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmd0cywgaW50IGZvcmNlX3VubG9hZCkKIHsKIAlzdHJ1Y3QgZ3J1X2NvbnRleHRfY29uZmlndXJhdGlvbl9oYW5kbGUgKmNjaDsKIAlzdHJ1Y3QgZ3J1X3N0YXRlICpncnUgPSBndHMtPnRzX2dydTsKQEAgLTU4Myw5ICs1OTQsMTEgQEAKIAkJCWdvdG8gZXhpdDsKIAkJaWYgKGNjaF9pbnRlcnJ1cHQoY2NoKSkKIAkJCUJVRygpOwotCQlpZiAoaW50X3NlbGVjdCA+PSAwKSB7Ci0JCQlndHMtPnRzX3RsYl9pbnRfc2VsZWN0ID0gaW50X3NlbGVjdDsKLQkJCWNjaC0+dGxiX2ludF9zZWxlY3QgPSBpbnRfc2VsZWN0OworCQlpZiAoIWZvcmNlX3VubG9hZCkgeworCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCQljY2gtPnNpemVhdmFpbFtpXSA9IGd0cy0+dHNfc2l6ZWF2YWlsOworCQkJZ3RzLT50c190bGJfaW50X3NlbGVjdCA9IGdydV9jcHVfZmF1bHRfbWFwX2lkKCk7CisJCQljY2gtPnRsYl9pbnRfc2VsZWN0ID0gZ3J1X2NwdV9mYXVsdF9tYXBfaWQoKTsKIAkJfSBlbHNlIHsKIAkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCQkJY2NoLT5hc2lkW2ldID0gMDsKQEAgLTYxNyw3ICs2MzAsNyBAQAogCiAJZ3J1X2RiZyhncnVkZXYsICJyZXRhcmdldCBmcm9tICVkIHRvICVkXG4iLCBndHMtPnRzX3RsYl9pbnRfc2VsZWN0LAogCQlncnVfY3B1X2ZhdWx0X21hcF9pZCgpKTsKLQlyZXR1cm4gZ3J1X3VwZGF0ZV9jY2goZ3RzLCBncnVfY3B1X2ZhdWx0X21hcF9pZCgpKTsKKwlyZXR1cm4gZ3J1X3VwZGF0ZV9jY2goZ3RzLCAwKTsKIH0KIAogCkBAIC02ODgsNyArNzAxLDcgQEAKIAkJU1RBVChzdGVhbF9jb250ZXh0X2ZhaWxlZCk7CiAJfQogCWdydV9kYmcoZ3J1ZGV2LAotCQkic3RvbGUgZ3J1ICV4LCBjdHhudW0gJWQgZnJvbSBndHMgJXAuIE5lZWQgY2IgJWQsIGRzICVkOyIKKwkJInN0b2xlIGdpZCAlZCwgY3R4bnVtICVkIGZyb20gZ3RzICVwLiBOZWVkIGNiICVkLCBkcyAlZDsiCiAJCSIgYXZhaWwgY2IgJWxkLCBkcyAlbGRcbiIsCiAJCWdydS0+Z3NfZ2lkLCBjdHhudW0sIG5ndHMsIGNiciwgZHNyLCBod2VpZ2h0NjQoZ3J1LT5nc19jYnJfbWFwKSwKIAkJaHdlaWdodDY0KGdydS0+Z3NfZHNyX21hcCkpOwpAQCAtNzI3LDYgKzc0MCw3IEBACiAJCX0KIAkJcmVzZXJ2ZV9ncnVfcmVzb3VyY2VzKGdydSwgZ3RzKTsKIAkJZ3RzLT50c19ncnUgPSBncnU7CisJCWd0cy0+dHNfYmxhZGUgPSBncnUtPmdzX2JsYWRlX2lkOwogCQlndHMtPnRzX2N0eG51bSA9CiAJCSAgICBmaW5kX2ZpcnN0X3plcm9fYml0KCZncnUtPmdzX2NvbnRleHRfbWFwLCBHUlVfTlVNX0NDSCk7CiAJCUJVR19PTihndHMtPnRzX2N0eG51bSA9PSBHUlVfTlVNX0NDSCk7CkBAIC03MzcsNyArNzUxLDcgQEAKIAogCQlTVEFUKGFzc2lnbl9jb250ZXh0KTsKIAkJZ3J1X2RiZyhncnVkZXYsCi0JCQkiZ3NlZyAlcCwgZ3RzICVwLCBncnUgJXgsIGN0eCAlZCwgY2JyICVkLCBkc3IgJWRcbiIsCisJCQkiZ3NlZyAlcCwgZ3RzICVwLCBnaWQgJWQsIGN0eCAlZCwgY2JyICVkLCBkc3IgJWRcbiIsCiAJCQlnc2VnX3ZpcnR1YWxfYWRkcmVzcyhndHMtPnRzX2dydSwgZ3RzLT50c19jdHhudW0pLCBndHMsCiAJCQlndHMtPnRzX2dydS0+Z3NfZ2lkLCBndHMtPnRzX2N0eG51bSwKIAkJCWd0cy0+dHNfY2JyX2F1X2NvdW50LCBndHMtPnRzX2Rzcl9hdV9jb3VudCk7CkBAIC03NzMsOCArNzg3LDggQEAKIAkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKIAogYWdhaW46Ci0JcHJlZW1wdF9kaXNhYmxlKCk7CiAJbXV0ZXhfbG9jaygmZ3RzLT50c19jdHhsb2NrKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAlpZiAoZ3RzLT50c19ncnUpIHsKIAkJaWYgKGd0cy0+dHNfZ3J1LT5nc19ibGFkZV9pZCAhPSB1dl9udW1hX2JsYWRlX2lkKCkpIHsKIAkJCVNUQVQobWlncmF0ZWRfbm9wZm5fdW5sb2FkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXByb2Nmcy5jIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMKaW5kZXggNzNiMGNhMC4uZWU3NDgyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1cHJvY2ZzLmMKQEAgLTYyLDcgKzYyLDkgQEAKIAlwcmludHN0YXQocywgYXNpZF93cmFwKTsKIAlwcmludHN0YXQocywgYXNpZF9yZXVzZSk7CiAJcHJpbnRzdGF0KHMsIGludHIpOworCXByaW50c3RhdChzLCBpbnRyX21tX2xvY2tfZmFpbGVkKTsKIAlwcmludHN0YXQocywgY2FsbF9vcyk7CisJcHJpbnRzdGF0KHMsIGNhbGxfb3Nfb2Zmbm9kZV9yZWZlcmVuY2UpOwogCXByaW50c3RhdChzLCBjYWxsX29zX2NoZWNrX2Zvcl9idWcpOwogCXByaW50c3RhdChzLCBjYWxsX29zX3dhaXRfcXVldWUpOwogCXByaW50c3RhdChzLCB1c2VyX2ZsdXNoX3RsYik7CkBAIC0xMjAsNiArMTIyLDMwIEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgaW50IG1jc19zdGF0aXN0aWNzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQoreworCWludCBvcDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsLCBjb3VudCwgbWF4OworCXN0YXRpYyBjaGFyICppZFtdID0geyJjY2hfYWxsb2NhdGUiLCAiY2NoX3N0YXJ0IiwgImNjaF9pbnRlcnJ1cHQiLAorCQkiY2NoX2ludGVycnVwdF9zeW5jIiwgImNjaF9kZWFsbG9jYXRlIiwgInRnaF9pbnZhbGlkYXRlIn07CisKKwlmb3IgKG9wID0gMDsgb3AgPCBtY3NvcF9sYXN0OyBvcCsrKSB7CisJCWNvdW50ID0gYXRvbWljX2xvbmdfcmVhZCgmbWNzX29wX3N0YXRpc3RpY3Nbb3BdLmNvdW50KTsKKwkJdG90YWwgPSBhdG9taWNfbG9uZ19yZWFkKCZtY3Nfb3Bfc3RhdGlzdGljc1tvcF0udG90YWwpOworCQltYXggPSBtY3Nfb3Bfc3RhdGlzdGljc1tvcF0ubWF4OworCQlzZXFfcHJpbnRmKHMsICIlLTIwcyUxMmxkJTEybGQlMTJsZFxuIiwgaWRbb3BdLCBjb3VudCwKKwkJCSAgIGNvdW50ID8gdG90YWwgLyBjb3VudCA6IDAsIG1heCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBtY3Nfc3RhdGlzdGljc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqZGF0YSkKK3sKKwltZW1zZXQobWNzX29wX3N0YXRpc3RpY3MsIDAsIHNpemVvZihtY3Nfb3Bfc3RhdGlzdGljcykpOworCXJldHVybiBjb3VudDsKK30KKwogc3RhdGljIGludCBvcHRpb25zX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKQogewogCXNlcV9wcmludGYocywgIjB4JWx4XG4iLCBncnVfb3B0aW9ucyk7CkBAIC0xMzUsNiArMTYxLDcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIKIAkgICAgKGJ1ZiwgdXNlcmJ1ZiwgY291bnQgPCBzaXplb2YoYnVmKSA/IGNvdW50IDogc2l6ZW9mKGJ1ZikpKQogCQlyZXR1cm4gLUVGQVVMVDsKKwlidWZbY291bnQgLSAxXSA9ICdcMCc7CiAJaWYgKCFzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSkKIAkJZ3J1X29wdGlvbnMgPSB2YWw7CiAKQEAgLTE5OSw3ICsyMjYsNyBAQAogCiBzdGF0aWMgdm9pZCAqc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgbG9mZl90ICpnaWQpCiB7Ci0JaWYgKCpnaWQgPCBHUlVfTUFYX0dSVVMpCisJaWYgKCpnaWQgPCBncnVfbWF4X2dpZHMpCiAJCXJldHVybiBnaWQ7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yMDcsNyArMjM0LDcgQEAKIHN0YXRpYyB2b2lkICpzZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKmRhdGEsIGxvZmZfdCAqZ2lkKQogewogCSgqZ2lkKSsrOwotCWlmICgqZ2lkIDwgR1JVX01BWF9HUlVTKQorCWlmICgqZ2lkIDwgZ3J1X21heF9naWRzKQogCQlyZXR1cm4gZ2lkOwogCXJldHVybiBOVUxMOwogfQpAQCAtMjMxLDYgKzI1OCwxMSBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzdGF0aXN0aWNzX3Nob3csIE5VTEwpOwogfQogCitzdGF0aWMgaW50IG1jc19zdGF0aXN0aWNzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG1jc19zdGF0aXN0aWNzX3Nob3csIE5VTEwpOworfQorCiBzdGF0aWMgaW50IG9wdGlvbnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgb3B0aW9uc19zaG93LCBOVUxMKTsKQEAgLTI1NSw2ICsyODcsMTQgQEAKIAkucmVsZWFzZSAJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1jc19zdGF0aXN0aWNzX2ZvcHMgPSB7CisJLm9wZW4gCQk9IG1jc19zdGF0aXN0aWNzX29wZW4sCisJLnJlYWQgCQk9IHNlcV9yZWFkLAorCS53cml0ZSAJCT0gbWNzX3N0YXRpc3RpY3Nfd3JpdGUsCisJLmxsc2VlayAJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvcHRpb25zX2ZvcHMgPSB7CiAJLm9wZW4gCQk9IG9wdGlvbnNfb3BlbiwKIAkucmVhZCAJCT0gc2VxX3JlYWQsCkBAIC0yODMsNiArMzIzLDcgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwogfSBwcm9jX2ZpbGVzW10gPSB7CiAJeyJzdGF0aXN0aWNzIiwgMDY0NCwgJnN0YXRpc3RpY3NfZm9wc30sCisJeyJtY3Nfc3RhdGlzdGljcyIsIDA2NDQsICZtY3Nfc3RhdGlzdGljc19mb3BzfSwKIAl7ImRlYnVnX29wdGlvbnMiLCAwNjQ0LCAmb3B0aW9uc19mb3BzfSwKIAl7ImNjaF9zdGF0dXMiLCAwNDQ0LCAmY2NoX2ZvcHN9LAogCXsiZ3J1X3N0YXR1cyIsIDA0NDQsICZncnVfZm9wc30sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0YWJsZXMuaCBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oCmluZGV4IGE3OGY3MGQuLmJmMWVlYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oCkBAIC0xNTMsNiArMTUzLDcgQEAKIGV4dGVybiBzdHJ1Y3QgZ3J1X3N0YXRzX3MgZ3J1X3N0YXRzOwogZXh0ZXJuIHN0cnVjdCBncnVfYmxhZGVfc3RhdGUgKmdydV9iYXNlW107CiBleHRlcm4gdW5zaWduZWQgbG9uZyBncnVfc3RhcnRfcGFkZHIsIGdydV9lbmRfcGFkZHI7CitleHRlcm4gdW5zaWduZWQgaW50IGdydV9tYXhfZ2lkczsKIAogI2RlZmluZSBHUlVfTUFYX0JMQURFUwkJTUFYX05VTU5PREVTCiAjZGVmaW5lIEdSVV9NQVhfR1JVUwkJKEdSVV9NQVhfQkxBREVTICogR1JVX0NISVBMRVRTX1BFUl9CTEFERSkKQEAgLTE4NCw3ICsxODUsOSBAQAogCWF0b21pY19sb25nX3QgYXNpZF93cmFwOwogCWF0b21pY19sb25nX3QgYXNpZF9yZXVzZTsKIAlhdG9taWNfbG9uZ190IGludHI7CisJYXRvbWljX2xvbmdfdCBpbnRyX21tX2xvY2tfZmFpbGVkOwogCWF0b21pY19sb25nX3QgY2FsbF9vczsKKwlhdG9taWNfbG9uZ190IGNhbGxfb3Nfb2Zmbm9kZV9yZWZlcmVuY2U7CiAJYXRvbWljX2xvbmdfdCBjYWxsX29zX2NoZWNrX2Zvcl9idWc7CiAJYXRvbWljX2xvbmdfdCBjYWxsX29zX3dhaXRfcXVldWU7CiAJYXRvbWljX2xvbmdfdCB1c2VyX2ZsdXNoX3RsYjsKQEAgLTIzNyw2ICsyNDAsMTcgQEAKIAogfTsKIAorZW51bSBtY3Nfb3Age2NjaG9wX2FsbG9jYXRlLCBjY2hvcF9zdGFydCwgY2Nob3BfaW50ZXJydXB0LCBjY2hvcF9pbnRlcnJ1cHRfc3luYywKKwljY2hvcF9kZWFsbG9jYXRlLCB0Z2hvcF9pbnZhbGlkYXRlLCBtY3NvcF9sYXN0fTsKKworc3RydWN0IG1jc19vcF9zdGF0aXN0aWMgeworCWF0b21pY19sb25nX3QJY291bnQ7CisJYXRvbWljX2xvbmdfdAl0b3RhbDsKKwl1bnNpZ25lZCBsb25nCW1heDsKK307CisKK2V4dGVybiBzdHJ1Y3QgbWNzX29wX3N0YXRpc3RpYyBtY3Nfb3Bfc3RhdGlzdGljc1ttY3NvcF9sYXN0XTsKKwogI2RlZmluZSBPUFRfRFBSSU5UCTEKICNkZWZpbmUgT1BUX1NUQVRTCTIKICNkZWZpbmUgR1JVX1FVSUNLTE9PSwk0CkBAIC0yNzgsMTMgKzI5MiwxMiBAQAogLyogR2VuZXJhdGUgYSBHUlUgYXNpZCB2YWx1ZSBmcm9tIGEgR1JVIGJhc2UgYXNpZCAmIGEgdmlydHVhbCBhZGRyZXNzLiAqLwogI2lmIGRlZmluZWQgQ09ORklHX0lBNjQKICNkZWZpbmUgVkFERFJfSElfQklUCQk2NAotI2RlZmluZSBHUlVSRUdJT04oYWRkcikJCSgoYWRkcikgPj4gKFZBRERSX0hJX0JJVCAtIDMpICYgMykKICNlbGlmIGRlZmluZWQgQ09ORklHX1g4Nl82NAogI2RlZmluZSBWQUREUl9ISV9CSVQJCTQ4Ci0jZGVmaW5lIEdSVVJFR0lPTihhZGRyKQkJKDApCQkvKiBaWlogY291bGQgZG8gYmV0dGVyICovCiAjZWxzZQogI2Vycm9yICJVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUiCiAjZW5kaWYKKyNkZWZpbmUgR1JVUkVHSU9OKGFkZHIpCQkoKGFkZHIpID4+IChWQUREUl9ISV9CSVQgLSAzKSAmIDMpCiAjZGVmaW5lIEdSVUFTSUQoYXNpZCwgYWRkcikJKChhc2lkKSArIEdSVVJFR0lPTihhZGRyKSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI5NywxMiArMzEwLDEyIEBACiAgKiBUaGlzIHN0cnVjdHVyZSBpcyBwb2ludGVkIHRvIGZyb20gdGhlIG1tc3RydWN0IHZpYSB0aGUgbm90aWZpZXIgcG9pbnRlci4KICAqIFRoZXJlIGlzIG9uZSBvZiB0aGVzZSBwZXIgYWRkcmVzcyBzcGFjZS4KICAqLwotc3RydWN0IGdydV9tbV90cmFja2VyIHsKLQl1bnNpZ25lZCBpbnQJCW10X2FzaWRfZ2VuOwkvKiBBU0lEIHdyYXAgY291bnQgKi8KLQlpbnQJCQltdF9hc2lkOwkvKiBjdXJyZW50IGJhc2UgQVNJRCBmb3IgZ3J1ICovCi0JdW5zaWduZWQgc2hvcnQJCW10X2N0eGJpdG1hcDsJLyogYml0bWFwIG9mIGNvbnRleHRzIHVzaW5nCitzdHJ1Y3QgZ3J1X21tX3RyYWNrZXIgewkJCQkvKiBwYWNrIHRvIHJlZHVjZSBzaXplICovCisJdW5zaWduZWQgaW50CQltdF9hc2lkX2dlbjoyNDsJLyogQVNJRCB3cmFwIGNvdW50ICovCisJdW5zaWduZWQgaW50CQltdF9hc2lkOjI0OwkvKiBjdXJyZW50IGJhc2UgQVNJRCBmb3IgZ3J1ICovCisJdW5zaWduZWQgc2hvcnQJCW10X2N0eGJpdG1hcDoxNjsvKiBiaXRtYXAgb2YgY29udGV4dHMgdXNpbmcKIAkJCQkJCSAgIGFzaWQgKi8KLX07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IGdydV9tbV9zdHJ1Y3QgewogCXN0cnVjdCBtbXVfbm90aWZpZXIJbXNfbm90aWZpZXI7CkBAIC0zNDgsNiArMzYxLDcgQEAKIAlsb25nCQkJdHNfdXNlcl9vcHRpb25zOy8qIG1pc2MgdXNlciBvcHRpb24gZmxhZ3MgKi8KIAlwaWRfdAkJCXRzX3RnaWRfb3duZXI7CS8qIHRhc2sgdGhhdCBpcyB1c2luZyB0aGUKIAkJCQkJCSAgIGNvbnRleHQgLSBmb3IgbWlncmF0aW9uICovCisJdW5zaWduZWQgc2hvcnQJCXRzX3NpemVhdmFpbDsJLyogUGFnZXNpemVzIGluIHVzZSAqLwogCWludAkJCXRzX3RzaWQ7CS8qIHRocmVhZCB0aGF0IG93bnMgdGhlCiAJCQkJCQkgICBzdHJ1Y3R1cmUgKi8KIAlpbnQJCQl0c190bGJfaW50X3NlbGVjdDsvKiB0YXJnZXQgY3B1IGlmIGludGVycnVwdHMKQEAgLTM1OSw2ICszNzMsOSBAQAogCQkJCQkJICAgcmVxdWlyZWQgZm9yIGNvbnRlc3QgKi8KIAl1bnNpZ25lZCBjaGFyCQl0c19jYnJfYXVfY291bnQ7LyogTnVtYmVyIG9mIENCUiByZXNvdXJjZXMKIAkJCQkJCSAgIHJlcXVpcmVkIGZvciBjb250ZXN0ICovCisJY2hhcgkJCXRzX2JsYWRlOwkvKiBJZiA+PSAwLCBtaWdyYXRlIGNvbnRleHQgaWYKKwkJCQkJCSAgIHJlZiBmcm9tIGRpZmVyZW50IGJsYWRlICovCisJY2hhcgkJCXRzX2ZvcmNlX2NjaF9yZWxvYWQ7CiAJY2hhcgkJCXRzX2ZvcmNlX3VubG9hZDsvKiBmb3JjZSBjb250ZXh0IHRvIGJlIHVubG9hZGVkCiAJCQkJCQkgICBhZnRlciBtaWdyYXRpb24gKi8KIAljaGFyCQkJdHNfY2JyX2lkeFtHUlVfQ0JSX0FVXTsvKiBDQlIgbnVtYmVycyBvZiBlYWNoCkBAIC0zOTIsMTIgKzQwOSwxMiBAQAogCQkJCQkJCSAgIGdydSBzZWdtZW50cyAoNjQpICovCiAJdm9pZAkJCSpnc19ncnVfYmFzZV92YWRkcjsJLyogVmlydHVhbCBhZGRyZXNzIG9mCiAJCQkJCQkJICAgZ3J1IHNlZ21lbnRzICg2NCkgKi8KLQl1bnNpZ25lZCBjaGFyCQlnc19naWQ7CQkJLyogdW5pcXVlIEdSVSBudW1iZXIgKi8KKwl1bnNpZ25lZCBzaG9ydAkJZ3NfZ2lkOwkJCS8qIHVuaXF1ZSBHUlUgbnVtYmVyICovCisJdW5zaWduZWQgc2hvcnQJCWdzX2JsYWRlX2lkOwkJLyogYmxhZGUgb2YgR1JVICovCiAJdW5zaWduZWQgY2hhcgkJZ3NfdGdoX2xvY2FsX3NoaWZ0OwkvKiB1c2VkIHRvIHBpY2sgVEdIIGZvcgogCQkJCQkJCSAgIGxvY2FsIGZsdXNoICovCiAJdW5zaWduZWQgY2hhcgkJZ3NfdGdoX2ZpcnN0X3JlbW90ZTsJLyogc3RhcnRpbmcgVEdIIyBmb3IKIAkJCQkJCQkgICByZW1vdGUgZmx1c2ggKi8KLQl1bnNpZ25lZCBzaG9ydAkJZ3NfYmxhZGVfaWQ7CQkvKiBibGFkZSBvZiBHUlUgKi8KIAlzcGlubG9ja190CQlnc19hc2lkX2xvY2s7CQkvKiBsb2NrIHVzZWQgZm9yCiAJCQkJCQkJICAgYXNzaWduaW5nIGFzaWRzICovCiAJc3BpbmxvY2tfdAkJZ3NfbG9jazsJCS8qIGxvY2sgdXNlZCBmb3IKQEAgLTQ5Miw2ICs1MDksMTAgQEAKIAkJCShpKSA8IEdSVV9DSElQTEVUU19QRVJfQkxBREU7CQkJXAogCQkJKGkpKyssIChncnUpKyspCiAKKy8qIFNjYW4gYWxsIEdSVXMgKi8KKyNkZWZpbmUgZm9yZWFjaF9naWQoZ2lkKQkJCQkJCVwKKwlmb3IgKChnaWQpID0gMDsgKGdpZCkgPCBncnVfbWF4X2dpZHM7IChnaWQpKyspCisKIC8qIFNjYW4gYWxsIGFjdGl2ZSBHVFNzIG9uIGEgZ3J1LiBOb3RlOiBtdXN0IGhvbGQgc3NfbG9jayB0byB1c2UgdGhpcyBtYWNyby4gKi8KICNkZWZpbmUgZm9yX2VhY2hfZ3RzX29uX2dydShndHMsIGdydSwgY3R4bnVtKQkJCQlcCiAJZm9yICgoY3R4bnVtKSA9IDA7IChjdHhudW0pIDwgR1JVX05VTV9DQ0g7IChjdHhudW0pKyspCQlcCkBAIC01NzgsOSArNTk5LDExIEBACiBleHRlcm4gc3RydWN0IGdydV90aHJlYWRfc3RhdGUgKmdydV9hbGxvY190aHJlYWRfc3RhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0CiAJCQkJKnZtYSwgaW50IHRzaWQpOwogZXh0ZXJuIHZvaWQgZ3J1X3VubG9hZF9jb250ZXh0KHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMsIGludCBzYXZlc3RhdGUpOworZXh0ZXJuIGludCBncnVfdXBkYXRlX2NjaChzdHJ1Y3QgZ3J1X3RocmVhZF9zdGF0ZSAqZ3RzLCBpbnQgZm9yY2VfdW5sb2FkKTsKIGV4dGVybiB2b2lkIGd0c19kcm9wKHN0cnVjdCBncnVfdGhyZWFkX3N0YXRlICpndHMpOwogZXh0ZXJuIHZvaWQgZ3J1X3RnaF9mbHVzaF9pbml0KHN0cnVjdCBncnVfc3RhdGUgKmdydSk7CiBleHRlcm4gaW50IGdydV9rc2VydmljZXNfaW5pdChzdHJ1Y3QgZ3J1X3N0YXRlICpncnUpOworZXh0ZXJuIHZvaWQgZ3J1X2tzZXJ2aWNlc19leGl0KHN0cnVjdCBncnVfc3RhdGUgKmdydSk7CiBleHRlcm4gaXJxcmV0dXJuX3QgZ3J1X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIGV4dGVybiBpbnQgZ3J1X2hhbmRsZV91c2VyX2NhbGxfb3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIGV4dGVybiBpbnQgZ3J1X3VzZXJfZmx1c2hfdGxiKHVuc2lnbmVkIGxvbmcgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRsYnB1cmdlLmMgYi9kcml2ZXJzL21pc2Mvc2dpLWdydS9ncnV0bGJwdXJnZS5jCmluZGV4IGM4NDQ5NmEuLjFkMTI1MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRsYnB1cmdlLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGxicHVyZ2UuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJIiAgRkxVU0ggZ3J1aWQgJWQsIGFzaWQgMHgleCwgbnVtICVsZCwgY2JtYXAgMHgleFxuIiwKIAkJCQlnaWQsIGFzaWQsIG51bSwgYXNpZHMtPm10X2N0eGJpdG1hcCk7CiAJCQl0Z2ggPSBnZXRfbG9ja190Z2hfaGFuZGxlKGdydSk7Ci0JCQl0Z2hfaW52YWxpZGF0ZSh0Z2gsIHN0YXJ0LCAwLCBhc2lkLCBncnVwYWdlc2l6ZSwgMCwKKwkJCXRnaF9pbnZhbGlkYXRlKHRnaCwgc3RhcnQsIH4wLCBhc2lkLCBncnVwYWdlc2l6ZSwgMCwKIAkJCQkgICAgICAgbnVtIC0gMSwgYXNpZHMtPm10X2N0eGJpdG1hcCk7CiAJCQlnZXRfdW5sb2NrX3RnaF9oYW5kbGUodGdoKTsKIAkJfSBlbHNlIHsKQEAgLTIxMCwxMSArMjEwLDEwIEBACiB7CiAJc3RydWN0IGdydV90bGJfZ2xvYmFsX2hhbmRsZSAqdGdoOwogCi0JZ3J1X2RiZyhncnVkZXYsICJncnUgJXAsIGdpZCAlZFxuIiwgZ3J1LCBncnUtPmdzX2dpZCk7CisJZ3J1X2RiZyhncnVkZXYsICJnaWQgJWRcbiIsIGdydS0+Z3NfZ2lkKTsKIAl0Z2ggPSBnZXRfbG9ja190Z2hfaGFuZGxlKGdydSk7Ci0JdGdoX2ludmFsaWRhdGUodGdoLCAwLCB+MCwgMCwgMSwgMSwgR1JVTUFYSU5WQUwgLSAxLCAwKTsKKwl0Z2hfaW52YWxpZGF0ZSh0Z2gsIDAsIH4wLCAwLCAxLCAxLCBHUlVNQVhJTlZBTCAtIDEsIDB4ZmZmZik7CiAJZ2V0X3VubG9ja190Z2hfaGFuZGxlKHRnaCk7Ci0JcHJlZW1wdF9lbmFibGUoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjLmggYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwYy5oCmluZGV4IDI3NWI3ODguLjExNDQ0NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjLmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGMuaApAQCAtOTIsNyArOTIsOSBAQAogCXU4IHBhZDFbM107CQkvKiBhbGlnbiB0byBuZXh0IHU2NCBpbiAxc3QgNjQtYnl0ZSBjYWNoZWxpbmUgKi8KIAl1bmlvbiB7CiAJCXVuc2lnbmVkIGxvbmcgdmFyc19wYTsJLyogcGh5cyBhZGRyZXNzIG9mIHN0cnVjdCB4cGNfdmFycyAqLwotCQl1bnNpZ25lZCBsb25nIGFjdGl2YXRlX21xX2dwYTsgLyogZ3J1IHBoeSBhZGRyIG9mIGFjdGl2YXRlX21xICovCisJCXVuc2lnbmVkIGxvbmcgYWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhOyAvKiBwaHlzIGFkZHIgb2YgKi8KKwkJCQkJCQkvKiBhY3RpdmF0ZSBtcSdzICovCisJCQkJCQkJLyogZ3J1IG1xIGRlc2NyaXB0b3IgKi8KIAl9IHNuOwogCXVuc2lnbmVkIGxvbmcgdHNfamlmZmllczsgLyogdGltZXN0YW1wIHdoZW4gcnN2ZCBwZyB3YXMgc2V0dXAgYnkgWFBDICovCiAJdTY0IHBhZDJbMTBdOwkJLyogYWxpZ24gdG8gbGFzdCB1NjQgaW4gMm5kIDY0LWJ5dGUgY2FjaGVsaW5lICovCkBAIC0xODksNyArMTkxLDkgQEAKIAlpbnQgaXJxOwkJLyogaXJxIHJhaXNlZCB3aGVuIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgaW4gbXEgKi8KIAlpbnQgbW1yX2JsYWRlOwkJLyogYmxhZGUgd2hlcmUgd2F0Y2hsaXN0IHdhcyBhbGxvY2F0ZWQgZnJvbSAqLwogCXVuc2lnbmVkIGxvbmcgbW1yX29mZnNldDsgLyogb2Zmc2V0IG9mIGlycSBtbXIgbG9jYXRlZCBvbiBtbXJfYmxhZGUgKi8KKwl1bnNpZ25lZCBsb25nIG1tcl92YWx1ZTsgLyogdmFsdWUgb2YgaXJxIG1tciBsb2NhdGVkIG9uIG1tcl9ibGFkZSAqLwogCWludCB3YXRjaGxpc3RfbnVtOwkvKiBudW1iZXIgb2Ygd2F0Y2hsaXN0IGFsbG9jYXRkIGJ5IEJJT1MgKi8KKwl2b2lkICpncnVfbXFfZGVzYzsJLyogb3BhcXVlIHN0cnVjdHVyZSB1c2VkIGJ5IHRoZSBHUlUgZHJpdmVyICovCiB9OwogCiAvKgpAQCAtMTk3LDYgKzIwMSw3IEBACiAgKiBoZWFydGJlYXQsIHBhcnRpdGlvbiBhY3RpdmUgc3RhdGUsIGFuZCBjaGFubmVsIHN0YXRlLiBUaGlzIGlzIFVWIG9ubHkuCiAgKi8KIHN0cnVjdCB4cGNfYWN0aXZhdGVfbXFfbXNnaGRyX3V2IHsKKwl1bnNpZ25lZCBpbnQgZ3J1X21zZ19oZHI7IC8qIEZPUiBHUlUgSU5URVJOQUwgVVNFIE9OTFkgKi8KIAlzaG9ydCBwYXJ0aWQ7CQkvKiBzZW5kZXIncyBwYXJ0aWQgKi8KIAl1OCBhY3Rfc3RhdGU7CQkvKiBzZW5kZXIncyBhY3Rfc3RhdGUgYXQgdGltZSBtc2cgc2VudCAqLwogCXU4IHR5cGU7CQkvKiBtZXNzYWdlJ3MgdHlwZSAqLwpAQCAtMjMyLDcgKzIzNyw3IEBACiBzdHJ1Y3QgeHBjX2FjdGl2YXRlX21xX21zZ19hY3RpdmF0ZV9yZXFfdXYgewogCXN0cnVjdCB4cGNfYWN0aXZhdGVfbXFfbXNnaGRyX3V2IGhkcjsKIAl1bnNpZ25lZCBsb25nIHJwX2dwYTsKLQl1bnNpZ25lZCBsb25nIGFjdGl2YXRlX21xX2dwYTsKKwl1bnNpZ25lZCBsb25nIGFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYTsKIH07CiAKIHN0cnVjdCB4cGNfYWN0aXZhdGVfbXFfbXNnX2RlYWN0aXZhdGVfcmVxX3V2IHsKQEAgLTI2Myw3ICsyNjgsNyBAQAogCXNob3J0IGNoX251bWJlcjsKIAlzaG9ydCByZW1vdGVfbmVudHJpZXM7CS8qID8/PyBJcyB0aGlzIG5lZWRlZD8gV2hhdCBpcz8gKi8KIAlzaG9ydCBsb2NhbF9uZW50cmllczsJLyogPz8/IElzIHRoaXMgbmVlZGVkPyBXaGF0IGlzPyAqLwotCXVuc2lnbmVkIGxvbmcgbG9jYWxfbm90aWZ5X21xX2dwYTsKKwl1bnNpZ25lZCBsb25nIG5vdGlmeV9ncnVfbXFfZGVzY19ncGE7CiB9OwogCiAvKgpAQCAtNTEwLDggKzUxNSw4IEBACiB9OwogCiBzdHJ1Y3QgeHBjX2NoYW5uZWxfdXYgewotCXVuc2lnbmVkIGxvbmcgcmVtb3RlX25vdGlmeV9tcV9ncGE7CS8qIGdydSBwaHlzIGFkZHJlc3Mgb2YgcmVtb3RlICovCi0JCQkJCQkvKiBwYXJ0aXRpb24ncyBub3RpZnkgbXEgKi8KKwl2b2lkICpjYWNoZWRfbm90aWZ5X2dydV9tcV9kZXNjOyAvKiByZW1vdGUgcGFydGl0aW9uJ3Mgbm90aWZ5IG1xJ3MgKi8KKwkJCQkJIC8qIGdydSBtcSBkZXNjcmlwdG9yICovCiAKIAlzdHJ1Y3QgeHBjX3NlbmRfbXNnX3Nsb3RfdXYgKnNlbmRfbXNnX3Nsb3RzOwogCXZvaWQgKnJlY3ZfbXNnX3Nsb3RzOwkvKiBlYWNoIHNsb3Qgd2lsbCBob2xkIGEgeHBjX25vdGlmeV9tcV9tc2dfdXYgKi8KQEAgLTY4Miw4ICs2ODcsMTIgQEAKIH07CiAKIHN0cnVjdCB4cGNfcGFydGl0aW9uX3V2IHsKLQl1bnNpZ25lZCBsb25nIHJlbW90ZV9hY3RpdmF0ZV9tcV9ncGE7CS8qIGdydSBwaHlzIGFkZHJlc3Mgb2YgcmVtb3RlICovCi0JCQkJCQkvKiBwYXJ0aXRpb24ncyBhY3RpdmF0ZSBtcSAqLworCXVuc2lnbmVkIGxvbmcgYWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhOwkvKiBwaHlzIGFkZHIgb2YgcGFyaXRpdG9uJ3MgKi8KKwkJCQkJCS8qIGFjdGl2YXRlIG1xJ3MgZ3J1IG1xICovCisJCQkJCQkvKiBkZXNjcmlwdG9yICovCisJdm9pZCAqY2FjaGVkX2FjdGl2YXRlX2dydV9tcV9kZXNjOyAvKiBjYWNoZWQgY29weSBvZiBwYXJ0aXRpb24ncyAqLworCQkJCQkgICAvKiBhY3RpdmF0ZSBtcSdzIGdydSBtcSBkZXNjcmlwdG9yICovCisJc3RydWN0IG11dGV4IGNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzY19tdXRleDsKIAlzcGlubG9ja190IGZsYWdzX2xvY2s7CS8qIHByb3RlY3QgdXBkYXRpbmcgb2YgZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CS8qIGdlbmVyYWwgZmxhZ3MgKi8KIAl1OCByZW1vdGVfYWN0X3N0YXRlOwkvKiByZW1vdGUgcGFydGl0aW9uJ3MgYWN0X3N0YXRlICovCkBAIC02OTQsOCArNzAzLDkgQEAKIAogLyogc3RydWN0IHhwY19wYXJ0aXRpb25fdXYgZmxhZ3MgKi8KIAotI2RlZmluZSBYUENfUF9IRUFSVEJFQVRfT0ZGTElORV9VVgkweDAwMDAwMDAxCi0jZGVmaW5lIFhQQ19QX0VOR0FHRURfVVYJCTB4MDAwMDAwMDIKKyNkZWZpbmUgWFBDX1BfSEVBUlRCRUFUX09GRkxJTkVfVVYJCTB4MDAwMDAwMDEKKyNkZWZpbmUgWFBDX1BfRU5HQUdFRF9VVgkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgWFBDX1BfQ0FDSEVEX0FDVElWQVRFX0dSVV9NUV9ERVNDX1VWCTB4MDAwMDAwMDQKIAogLyogc3RydWN0IHhwY19wYXJ0aXRpb25fdXYgYWN0X3N0YXRlIGNoYW5nZSByZXF1ZXN0cyAqLwogCkBAIC04MDQsNiArODE0LDcgQEAKIGV4dGVybiB2b2lkIHhwY19jcmVhdGVfa3RocmVhZHMoc3RydWN0IHhwY19jaGFubmVsICosIGludCwgaW50KTsKIGV4dGVybiB2b2lkIHhwY19kaXNjb25uZWN0X3dhaXQoaW50KTsKIGV4dGVybiBpbnQgKCp4cGNfc2V0dXBfcGFydGl0aW9uc19zbikgKHZvaWQpOworZXh0ZXJuIHZvaWQgKCp4cGNfdGVhcmRvd25fcGFydGl0aW9uc19zbikgKHZvaWQpOwogZXh0ZXJuIGVudW0geHBfcmV0dmFsICgqeHBjX2dldF9wYXJ0aXRpb25fcnN2ZF9wYWdlX3BhKSAodm9pZCAqLCB1NjQgKiwKIAkJCQkJCQkgdW5zaWduZWQgbG9uZyAqLAogCQkJCQkJCSBzaXplX3QgKik7CkBAIC04NDYsOCArODU3LDggQEAKIAkJCQkJICAgdW5zaWduZWQgbG9uZyAqKTsKIGV4dGVybiB2b2lkICgqeHBjX3NlbmRfY2hjdGxfb3BlbnJlcGx5KSAoc3RydWN0IHhwY19jaGFubmVsICosIHVuc2lnbmVkIGxvbmcgKik7CiAKLWV4dGVybiB2b2lkICgqeHBjX3NhdmVfcmVtb3RlX21zZ3F1ZXVlX3BhKSAoc3RydWN0IHhwY19jaGFubmVsICosCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBlbnVtIHhwX3JldHZhbCAoKnhwY19zYXZlX3JlbW90ZV9tc2dxdWV1ZV9wYSkgKHN0cnVjdCB4cGNfY2hhbm5lbCAqLAorCQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyk7CiAKIGV4dGVybiBlbnVtIHhwX3JldHZhbCAoKnhwY19zZW5kX3BheWxvYWQpIChzdHJ1Y3QgeHBjX2NoYW5uZWwgKiwgdTMyLCB2b2lkICosCiAJCQkJCSAgIHUxNiwgdTgsIHhwY19ub3RpZnlfZnVuYywgdm9pZCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX2NoYW5uZWwuYyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX2NoYW5uZWwuYwppbmRleCA0NWZkNjUzLi45OWEyNTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19jaGFubmVsLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfY2hhbm5lbC5jCkBAIC0xODMsNiArMTgzLDcgQEAKIAkgICAgJnBhcnQtPnJlbW90ZV9vcGVuY2xvc2VfYXJnc1tjaF9udW1iZXJdOwogCXN0cnVjdCB4cGNfY2hhbm5lbCAqY2ggPSAmcGFydC0+Y2hhbm5lbHNbY2hfbnVtYmVyXTsKIAllbnVtIHhwX3JldHZhbCByZWFzb247CisJZW51bSB4cF9yZXR2YWwgcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOwogCkBAIC0zOTksOCArNDAwLDEzIEBACiAJCURCVUdfT04oYXJncy0+bG9jYWxfbmVudHJpZXMgPT0gMCk7CiAJCURCVUdfT04oYXJncy0+cmVtb3RlX25lbnRyaWVzID09IDApOwogCisJCXJldCA9IHhwY19zYXZlX3JlbW90ZV9tc2dxdWV1ZV9wYShjaCwgYXJncy0+bG9jYWxfbXNncXVldWVfcGEpOworCQlpZiAocmV0ICE9IHhwU3VjY2VzcykgeworCQkJWFBDX0RJU0NPTk5FQ1RfQ0hBTk5FTChjaCwgcmV0LCAmaXJxX2ZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBpcnFfZmxhZ3MpOworCQkJcmV0dXJuOworCQl9CiAJCWNoLT5mbGFncyB8PSBYUENfQ19ST1BFTlJFUExZOwotCQl4cGNfc2F2ZV9yZW1vdGVfbXNncXVldWVfcGEoY2gsIGFyZ3MtPmxvY2FsX21zZ3F1ZXVlX3BhKTsKIAogCQlpZiAoYXJncy0+bG9jYWxfbmVudHJpZXMgPCBjaC0+cmVtb3RlX25lbnRyaWVzKSB7CiAJCQlkZXZfZGJnKHhwY19jaGFuLCAiWFBDX0NIQ1RMX09QRU5SRVBMWTogbmV3ICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX21haW4uYyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX21haW4uYwppbmRleCA2NTc2MTcwLi4xYWI5ZmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY19tYWluLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfbWFpbi5jCkBAIC0xNzEsNiArMTcxLDcgQEAKIH07CiAKIGludCAoKnhwY19zZXR1cF9wYXJ0aXRpb25zX3NuKSAodm9pZCk7Cit2b2lkICgqeHBjX3RlYXJkb3duX3BhcnRpdGlvbnNfc24pICh2b2lkKTsKIGVudW0geHBfcmV0dmFsICgqeHBjX2dldF9wYXJ0aXRpb25fcnN2ZF9wYWdlX3BhKSAodm9pZCAqYnVmLCB1NjQgKmNvb2tpZSwKIAkJCQkJCSAgdW5zaWduZWQgbG9uZyAqcnBfcGEsCiAJCQkJCQkgIHNpemVfdCAqbGVuKTsKQEAgLTIxNyw4ICsyMTgsOCBAQAogdm9pZCAoKnhwY19zZW5kX2NoY3RsX29wZW5yZXBseSkgKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsCiAJCQkJICB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MpOwogCi12b2lkICgqeHBjX3NhdmVfcmVtb3RlX21zZ3F1ZXVlX3BhKSAoc3RydWN0IHhwY19jaGFubmVsICpjaCwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbXNncXVldWVfcGEpOworZW51bSB4cF9yZXR2YWwgKCp4cGNfc2F2ZV9yZW1vdGVfbXNncXVldWVfcGEpIChzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLAorCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBtc2dxdWV1ZV9wYSk7CiAKIGVudW0geHBfcmV0dmFsICgqeHBjX3NlbmRfcGF5bG9hZCkgKHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsIHUzMiBmbGFncywKIAkJCQkgICAgdm9pZCAqcGF5bG9hZCwgdTE2IHBheWxvYWRfc2l6ZSwKQEAgLTk5OCw2ICs5OTksNyBAQAogc3RhdGljIHZvaWQKIHhwY190ZWFyZG93bl9wYXJ0aXRpb25zKHZvaWQpCiB7CisJeHBjX3RlYXJkb3duX3BhcnRpdGlvbnNfc24oKTsKIAlrZnJlZSh4cGNfcGFydGl0aW9ucyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3NuMi5jIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfc24yLmMKaW5kZXggMmU5NzU3Ni4uZWFhYTk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS14cC94cGNfc24yLmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfc24yLmMKQEAgLTY2LDYgKzY2LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCit4cGNfdGVhcmRvd25fcGFydGl0aW9uc19zbl9zbjIodm9pZCkKK3sKKwkvKiBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgKi8KK30KKwogLyogU0hfSVBJX0FDQ0VTUyBzaHViIHJlZ2lzdGVyIHZhbHVlIG9uIHN0YXJ0dXAgKi8KIHN0YXRpYyB1NjQgeHBjX3NoMV9JUElfYWNjZXNzX3NuMjsKIHN0YXRpYyB1NjQgeHBjX3NoMl9JUElfYWNjZXNzMF9zbjI7CkBAIC00MzYsMTEgKzQ0MiwxMiBAQAogCVhQQ19TRU5EX0xPQ0FMX05PVElGWV9JUlFfU04yKGNoLCBYUENfQ0hDVExfTVNHUkVRVUVTVCk7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgZW51bSB4cF9yZXR2YWwKIHhwY19zYXZlX3JlbW90ZV9tc2dxdWV1ZV9wYV9zbjIoc3RydWN0IHhwY19jaGFubmVsICpjaCwKIAkJCQl1bnNpZ25lZCBsb25nIG1zZ3F1ZXVlX3BhKQogewogCWNoLT5zbi5zbjIucmVtb3RlX21zZ3F1ZXVlX3BhID0gbXNncXVldWVfcGE7CisJcmV0dXJuIHhwU3VjY2VzczsKIH0KIAogLyoKQEAgLTE3MzcsMjAgKzE3NDQsMjAgQEAKIHsKIAlzdHJ1Y3QgeHBjX2NoYW5uZWxfc24yICpjaF9zbjIgPSAmY2gtPnNuLnNuMjsKIAlzdHJ1Y3QgeHBjX21zZ19zbjIgKm1zZzsKLQlzNjQgcHV0OworCXM2NCBwdXQsIHJlbW90ZV9uZW50cmllcyA9IGNoLT5yZW1vdGVfbmVudHJpZXM7CiAKIAkvKiBmbGFncyBhcmUgemVyb2VkIHdoZW4gdGhlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgKi8KLQlpZiAoY2hfc24yLT5yZW1vdGVfR1AucHV0IDwgY2gtPnJlbW90ZV9uZW50cmllcykKKwlpZiAoY2hfc24yLT5yZW1vdGVfR1AucHV0IDwgcmVtb3RlX25lbnRyaWVzKQogCQlyZXR1cm47CiAKLQlwdXQgPSBtYXgoY2hfc24yLT53X3JlbW90ZV9HUC5wdXQsIGNoLT5yZW1vdGVfbmVudHJpZXMpOworCXB1dCA9IG1heChjaF9zbjItPndfcmVtb3RlX0dQLnB1dCwgcmVtb3RlX25lbnRyaWVzKTsKIAlkbyB7CiAJCW1zZyA9IChzdHJ1Y3QgeHBjX21zZ19zbjIgKikoKHU2NCljaF9zbjItPnJlbW90ZV9tc2dxdWV1ZSArCi0JCQkJCSAgICAgKHB1dCAlIGNoLT5yZW1vdGVfbmVudHJpZXMpICoKKwkJCQkJICAgICAocHV0ICUgcmVtb3RlX25lbnRyaWVzKSAqCiAJCQkJCSAgICAgY2gtPmVudHJ5X3NpemUpOwogCQlEQlVHX09OKCEobXNnLT5mbGFncyAmIFhQQ19NX1NOMl9SRUFEWSkpOwogCQlEQlVHX09OKCEobXNnLT5mbGFncyAmIFhQQ19NX1NOMl9ET05FKSk7Ci0JCURCVUdfT04obXNnLT5udW1iZXIgIT0gcHV0IC0gY2gtPnJlbW90ZV9uZW50cmllcyk7CisJCURCVUdfT04obXNnLT5udW1iZXIgIT0gcHV0IC0gcmVtb3RlX25lbnRyaWVzKTsKIAkJbXNnLT5mbGFncyA9IDA7CiAJfSB3aGlsZSAoKytwdXQgPCBjaF9zbjItPnJlbW90ZV9HUC5wdXQpOwogfQpAQCAtMjMxNSw2ICsyMzIyLDcgQEAKIAlzaXplX3QgYnVmX3NpemU7CiAKIAl4cGNfc2V0dXBfcGFydGl0aW9uc19zbiA9IHhwY19zZXR1cF9wYXJ0aXRpb25zX3NuX3NuMjsKKwl4cGNfdGVhcmRvd25fcGFydGl0aW9uc19zbiA9IHhwY190ZWFyZG93bl9wYXJ0aXRpb25zX3NuX3NuMjsKIAl4cGNfZ2V0X3BhcnRpdGlvbl9yc3ZkX3BhZ2VfcGEgPSB4cGNfZ2V0X3BhcnRpdGlvbl9yc3ZkX3BhZ2VfcGFfc24yOwogCXhwY19zZXR1cF9yc3ZkX3BhZ2Vfc24gPSB4cGNfc2V0dXBfcnN2ZF9wYWdlX3NuX3NuMjsKIAl4cGNfaW5jcmVtZW50X2hlYXJ0YmVhdCA9IHhwY19pbmNyZW1lbnRfaGVhcnRiZWF0X3NuMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmMgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwY191di5jCmluZGV4IDI5YzA1MDIuLmY3ZmZmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBjX3V2LmMKKysrIGIvZHJpdmVycy9taXNjL3NnaS14cC94cGNfdXYuYwpAQCAtMzEsNiArMzEsMjEgQEAKICNpbmNsdWRlICIuLi9zZ2ktZ3J1L2dydWtzZXJ2aWNlcy5oIgogI2luY2x1ZGUgInhwYy5oIgogCisjaWYgZGVmaW5lZCBDT05GSUdfSUE2NF9HRU5FUklDIHx8IGRlZmluZWQgQ09ORklHX0lBNjRfU0dJX1VWCitzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSB7CisJX191NjQJdmVjdG9yCQk6ICA4LAorCQlkZWxpdmVyeV9tb2RlCTogIDMsCisJCWRlc3RfbW9kZQk6ICAxLAorCQlkZWxpdmVyeV9zdGF0dXMJOiAgMSwKKwkJcG9sYXJpdHkJOiAgMSwKKwkJX19yZXNlcnZlZF8xCTogIDEsCisJCXRyaWdnZXIJCTogIDEsCisJCW1hc2sJCTogIDEsCisJCV9fcmVzZXJ2ZWRfMgk6IDE1LAorCQlkZXN0CQk6IDMyOworfTsKKyNlbmRpZgorCiBzdGF0aWMgYXRvbWljNjRfdCB4cGNfaGVhcnRiZWF0X3V2Owogc3RhdGljIERFQ0xBUkVfQklUTUFQKHhwY19oZWFydGJlYXRpbmdfdG9fbWFza191diwgWFBfTUFYX05QQVJUSVRJT05TX1VWKTsKIApAQCAtNTYsMjYgKzcxLDUyIEBACiAJZm9yIChwYXJ0aWQgPSAwOyBwYXJ0aWQgPCBYUF9NQVhfTlBBUlRJVElPTlNfVVY7IHBhcnRpZCsrKSB7CiAJCXBhcnRfdXYgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXS5zbi51djsKIAorCQltdXRleF9pbml0KCZwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2NfbXV0ZXgpOwogCQlzcGluX2xvY2tfaW5pdCgmcGFydF91di0+ZmxhZ3NfbG9jayk7CiAJCXBhcnRfdXYtPnJlbW90ZV9hY3Rfc3RhdGUgPSBYUENfUF9BU19JTkFDVElWRTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCit4cGNfdGVhcmRvd25fcGFydGl0aW9uc19zbl91dih2b2lkKQoreworCXNob3J0IHBhcnRpZDsKKwlzdHJ1Y3QgeHBjX3BhcnRpdGlvbl91diAqcGFydF91djsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCWZvciAocGFydGlkID0gMDsgcGFydGlkIDwgWFBfTUFYX05QQVJUSVRJT05TX1VWOyBwYXJ0aWQrKykgeworCQlwYXJ0X3V2ID0gJnhwY19wYXJ0aXRpb25zW3BhcnRpZF0uc24udXY7CisKKwkJaWYgKHBhcnRfdXYtPmNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzYyAhPSBOVUxMKSB7CisJCQltdXRleF9sb2NrKCZwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2NfbXV0ZXgpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBhcnRfdXYtPmZsYWdzX2xvY2ssIGlycV9mbGFncyk7CisJCQlwYXJ0X3V2LT5mbGFncyAmPSB+WFBDX1BfQ0FDSEVEX0FDVElWQVRFX0dSVV9NUV9ERVNDX1VWOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFydF91di0+ZmxhZ3NfbG9jaywgaXJxX2ZsYWdzKTsKKwkJCWtmcmVlKHBhcnRfdXYtPmNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzYyk7CisJCQlwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2MgPSBOVUxMOworCQkJbXV0ZXhfdW5sb2NrKCZwYXJ0X3V2LT4KKwkJCQkgICAgIGNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzY19tdXRleCk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQKIHhwY19nZXRfZ3J1X21xX2lycV91dihzdHJ1Y3QgeHBjX2dydV9tcV91diAqbXEsIGludCBjcHUsIGNoYXIgKmlycV9uYW1lKQogeworCWludCBtbXJfcG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZShtcS0+bW1yX2JsYWRlKTsKKwogI2lmIGRlZmluZWQgQ09ORklHX1g4Nl82NAogCW1xLT5pcnEgPSB1dl9zZXR1cF9pcnEoaXJxX25hbWUsIGNwdSwgbXEtPm1tcl9ibGFkZSwgbXEtPm1tcl9vZmZzZXQpOwogCWlmIChtcS0+aXJxIDwgMCkgewogCQlkZXZfZXJyKHhwY19wYXJ0LCAidXZfc2V0dXBfaXJxKCkgcmV0dXJuZWQgZXJyb3I9JWRcbiIsCi0JCQltcS0+aXJxKTsKKwkJCS1tcS0+aXJxKTsKKwkJcmV0dXJuIG1xLT5pcnE7CiAJfQogCi0jZWxpZiBkZWZpbmVkIENPTkZJR19JQTY0X0dFTkVSSUMgfHwgZGVmaW5lZCBDT05GSUdfSUE2NF9TR0lfVVYKLQlpbnQgbW1yX3Bub2RlOwotCXVuc2lnbmVkIGxvbmcgbW1yX3ZhbHVlOworCW1xLT5tbXJfdmFsdWUgPSB1dl9yZWFkX2dsb2JhbF9tbXI2NChtbXJfcG5vZGUsIG1xLT5tbXJfb2Zmc2V0KTsKIAorI2VsaWYgZGVmaW5lZCBDT05GSUdfSUE2NF9HRU5FUklDIHx8IGRlZmluZWQgQ09ORklHX0lBNjRfU0dJX1VWCiAJaWYgKHN0cmNtcChpcnFfbmFtZSwgWFBDX0FDVElWQVRFX0lSUV9OQU1FKSA9PSAwKQogCQltcS0+aXJxID0gU0dJX1hQQ19BQ1RJVkFURTsKIAllbHNlIGlmIChzdHJjbXAoaXJxX25hbWUsIFhQQ19OT1RJRllfSVJRX05BTUUpID09IDApCkBAIC04MywxMCArMTI0LDggQEAKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbW1yX3Bub2RlID0gdXZfYmxhZGVfdG9fcG5vZGUobXEtPm1tcl9ibGFkZSk7Ci0JbW1yX3ZhbHVlID0gKHVuc2lnbmVkIGxvbmcpY3B1X3BoeXNpY2FsX2lkKGNwdSkgPDwgMzIgfCBtcS0+aXJxOwotCi0JdXZfd3JpdGVfZ2xvYmFsX21tcjY0KG1tcl9wbm9kZSwgbXEtPm1tcl9vZmZzZXQsIG1tcl92YWx1ZSk7CisJbXEtPm1tcl92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKWNwdV9waHlzaWNhbF9pZChjcHUpIDw8IDMyIHwgbXEtPmlycTsKKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQobW1yX3Bub2RlLCBtcS0+bW1yX29mZnNldCwgbXEtPm1tcl92YWx1ZSk7CiAjZWxzZQogCSNlcnJvciBub3QgYSBzdXBwb3J0ZWQgY29uZmlndXJhdGlvbgogI2VuZGlmCkBAIC0xMjcsNyArMTY2LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAjZWxpZiBkZWZpbmVkIENPTkZJR19JQTY0X0dFTkVSSUMgfHwgZGVmaW5lZCBDT05GSUdfSUE2NF9TR0lfVVYKLQlyZXQgPSBzbl9tcV93YXRjaGxpc3RfYWxsb2MobXEtPm1tcl9ibGFkZSwgdXZfZ3BhKG1xLT5hZGRyZXNzKSwKKwlyZXQgPSBzbl9tcV93YXRjaGxpc3RfYWxsb2MobXEtPm1tcl9ibGFkZSwgKHZvaWQgKil1dl9ncGEobXEtPmFkZHJlc3MpLAogCQkJCSAgICBtcS0+b3JkZXIsICZtcS0+bW1yX29mZnNldCk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2Vycih4cGNfcGFydCwgInNuX21xX3dhdGNobGlzdF9hbGxvYygpIGZhaWxlZCwgcmV0PSVkXG4iLApAQCAtMTY4LDEyICsyMDcsMjIgQEAKIAlpbnQgcGdfb3JkZXI7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IHhwY19ncnVfbXFfdXYgKm1xOworCXN0cnVjdCB1dl9JT19BUElDX3JvdXRlX2VudHJ5ICptbXJfdmFsdWU7CiAKIAltcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB4cGNfZ3J1X21xX3V2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKG1xID09IE5VTEwpIHsKIAkJZGV2X2Vycih4cGNfcGFydCwgInhwY19jcmVhdGVfZ3J1X21xX3V2KCkgZmFpbGVkIHRvIGttYWxsb2MoKSAiCiAJCQkiYSB4cGNfZ3J1X21xX3V2IHN0cnVjdHVyZVxuIik7CiAJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0XzA7CisJfQorCisJbXEtPmdydV9tcV9kZXNjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdydV9tZXNzYWdlX3F1ZXVlX2Rlc2MpLAorCQkJCSAgR0ZQX0tFUk5FTCk7CisJaWYgKG1xLT5ncnVfbXFfZGVzYyA9PSBOVUxMKSB7CisJCWRldl9lcnIoeHBjX3BhcnQsICJ4cGNfY3JlYXRlX2dydV9tcV91digpIGZhaWxlZCB0byBrbWFsbG9jKCkgIgorCQkJImEgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyBzdHJ1Y3R1cmVcbiIpOworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dF8xOwogCX0KIApAQCAtMTk0LDE0ICsyNDMsNiBAQAogCX0KIAltcS0+YWRkcmVzcyA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAotCXJldCA9IGdydV9jcmVhdGVfbWVzc2FnZV9xdWV1ZShtcS0+YWRkcmVzcywgbXFfc2l6ZSk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoeHBjX3BhcnQsICJncnVfY3JlYXRlX21lc3NhZ2VfcXVldWUoKSByZXR1cm5lZCAiCi0JCQkiZXJyb3I9JWRcbiIsIHJldCk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0XzM7Ci0JfQotCiAJLyogZW5hYmxlIGdlbmVyYXRpb24gb2YgaXJxIHdoZW4gR1JVIG1xIG9wZXJhdGlvbiBvY2N1cnMgdG8gdGhpcyBtcSAqLwogCXJldCA9IHhwY19ncnVfbXFfd2F0Y2hsaXN0X2FsbG9jX3V2KG1xKTsKIAlpZiAocmV0ICE9IDApCkBAIC0yMTQsMTAgKzI1NSwyMCBAQAogCXJldCA9IHJlcXVlc3RfaXJxKG1xLT5pcnEsIGlycV9oYW5kbGVyLCAwLCBpcnFfbmFtZSwgTlVMTCk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoeHBjX3BhcnQsICJyZXF1ZXN0X2lycShpcnE9JWQpIHJldHVybmVkIGVycm9yPSVkXG4iLAotCQkJbXEtPmlycSwgcmV0KTsKKwkJCW1xLT5pcnEsIC1yZXQpOwogCQlnb3RvIG91dF81OwogCX0KIAorCW1tcl92YWx1ZSA9IChzdHJ1Y3QgdXZfSU9fQVBJQ19yb3V0ZV9lbnRyeSAqKSZtcS0+bW1yX3ZhbHVlOworCXJldCA9IGdydV9jcmVhdGVfbWVzc2FnZV9xdWV1ZShtcS0+Z3J1X21xX2Rlc2MsIG1xLT5hZGRyZXNzLCBtcV9zaXplLAorCQkJCSAgICAgICBuaWQsIG1tcl92YWx1ZS0+dmVjdG9yLCBtbXJfdmFsdWUtPmRlc3QpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKHhwY19wYXJ0LCAiZ3J1X2NyZWF0ZV9tZXNzYWdlX3F1ZXVlKCkgcmV0dXJuZWQgIgorCQkJImVycm9yPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF82OworCX0KKwogCS8qIGFsbG93IG90aGVyIHBhcnRpdGlvbnMgdG8gYWNjZXNzIHRoaXMgR1JVIG1xICovCiAJeHBfcmV0ID0geHBfZXhwYW5kX21lbXByb3RlY3QoeHBfcGEobXEtPmFkZHJlc3MpLCBtcV9zaXplKTsKIAlpZiAoeHBfcmV0ICE9IHhwU3VjY2VzcykgewpAQCAtMjM3LDggKzI4OCwxMCBAQAogb3V0XzM6CiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyltcS0+YWRkcmVzcywgcGdfb3JkZXIpOwogb3V0XzI6Ci0Ja2ZyZWUobXEpOworCWtmcmVlKG1xLT5ncnVfbXFfZGVzYyk7CiBvdXRfMToKKwlrZnJlZShtcSk7CitvdXRfMDoKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCkBAIC0yNjgsMTMgKzMyMSwxNCBAQAogfQogCiBzdGF0aWMgZW51bSB4cF9yZXR2YWwKLXhwY19zZW5kX2dydV9tc2codW5zaWduZWQgbG9uZyBtcV9ncGEsIHZvaWQgKm1zZywgc2l6ZV90IG1zZ19zaXplKQoreHBjX3NlbmRfZ3J1X21zZyhzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqZ3J1X21xX2Rlc2MsIHZvaWQgKm1zZywKKwkJIHNpemVfdCBtc2dfc2l6ZSkKIHsKIAllbnVtIHhwX3JldHZhbCB4cF9yZXQ7CiAJaW50IHJldDsKIAogCXdoaWxlICgxKSB7Ci0JCXJldCA9IGdydV9zZW5kX21lc3NhZ2VfZ3BhKG1xX2dwYSwgbXNnLCBtc2dfc2l6ZSk7CisJCXJldCA9IGdydV9zZW5kX21lc3NhZ2VfZ3BhKGdydV9tcV9kZXNjLCBtc2csIG1zZ19zaXplKTsKIAkJaWYgKHJldCA9PSBNUUVfT0spIHsKIAkJCXhwX3JldCA9IHhwU3VjY2VzczsKIAkJCWJyZWFrOwpAQCAtNDIxLDcgKzQ3NSwxNSBAQAogCQlwYXJ0X3V2LT5hY3Rfc3RhdGVfcmVxID0gWFBDX1BfQVNSX0FDVElWQVRFX1VWOwogCQlwYXJ0LT5yZW1vdGVfcnBfcGEgPSBtc2ctPnJwX2dwYTsgLyogISEhIF9wYSBpcyBfZ3BhICovCiAJCXBhcnQtPnJlbW90ZV9ycF90c19qaWZmaWVzID0gbXNnX2hkci0+cnBfdHNfamlmZmllczsKLQkJcGFydF91di0+cmVtb3RlX2FjdGl2YXRlX21xX2dwYSA9IG1zZy0+YWN0aXZhdGVfbXFfZ3BhOworCisJCWlmIChtc2ctPmFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYSAhPQorCQkgICAgcGFydF91di0+YWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGFydF91di0+ZmxhZ3NfbG9jaywgaXJxX2ZsYWdzKTsKKwkJCXBhcnRfdXYtPmZsYWdzICY9IH5YUENfUF9DQUNIRURfQUNUSVZBVEVfR1JVX01RX0RFU0NfVVY7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwYXJ0X3V2LT5mbGFnc19sb2NrLCBpcnFfZmxhZ3MpOworCQkJcGFydF91di0+YWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhID0KKwkJCSAgICBtc2ctPmFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYTsKKwkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4cGNfYWN0aXZhdGVfSVJRX3JjdmRfbG9jaywgaXJxX2ZsYWdzKTsKIAogCQkoKndha2V1cF9oYl9jaGVja2VyKSsrOwpAQCAtNDk4LDcgKzU2MCw3IEBACiAJCWFyZ3MgPSAmcGFydC0+cmVtb3RlX29wZW5jbG9zZV9hcmdzW21zZy0+Y2hfbnVtYmVyXTsKIAkJYXJncy0+cmVtb3RlX25lbnRyaWVzID0gbXNnLT5yZW1vdGVfbmVudHJpZXM7CiAJCWFyZ3MtPmxvY2FsX25lbnRyaWVzID0gbXNnLT5sb2NhbF9uZW50cmllczsKLQkJYXJncy0+bG9jYWxfbXNncXVldWVfcGEgPSBtc2ctPmxvY2FsX25vdGlmeV9tcV9ncGE7CisJCWFyZ3MtPmxvY2FsX21zZ3F1ZXVlX3BhID0gbXNnLT5ub3RpZnlfZ3J1X21xX2Rlc2NfZ3BhOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwYXJ0LT5jaGN0bF9sb2NrLCBpcnFfZmxhZ3MpOwogCQlwYXJ0LT5jaGN0bC5mbGFnc1ttc2ctPmNoX251bWJlcl0gfD0gWFBDX0NIQ1RMX09QRU5SRVBMWTsKQEAgLTU1OCw5ICs2MjAsMTAgQEAKIAlzaG9ydCBwYXJ0aWQ7CiAJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQ7CiAJaW50IHdha2V1cF9oYl9jaGVja2VyID0gMDsKKwlpbnQgcGFydF9yZWZlcmVuY2VkOwogCiAJd2hpbGUgKDEpIHsKLQkJbXNnX2hkciA9IGdydV9nZXRfbmV4dF9tZXNzYWdlKHhwY19hY3RpdmF0ZV9tcV91di0+YWRkcmVzcyk7CisJCW1zZ19oZHIgPSBncnVfZ2V0X25leHRfbWVzc2FnZSh4cGNfYWN0aXZhdGVfbXFfdXYtPmdydV9tcV9kZXNjKTsKIAkJaWYgKG1zZ19oZHIgPT0gTlVMTCkKIAkJCWJyZWFrOwogCkBAIC01NzEsMTQgKzYzNCwxNSBAQAogCQkJCXBhcnRpZCk7CiAJCX0gZWxzZSB7CiAJCQlwYXJ0ID0gJnhwY19wYXJ0aXRpb25zW3BhcnRpZF07Ci0JCQlpZiAoeHBjX3BhcnRfcmVmKHBhcnQpKSB7Ci0JCQkJeHBjX2hhbmRsZV9hY3RpdmF0ZV9tcV9tc2dfdXYocGFydCwgbXNnX2hkciwKLQkJCQkJCQkgICAgJndha2V1cF9oYl9jaGVja2VyKTsKKworCQkJcGFydF9yZWZlcmVuY2VkID0geHBjX3BhcnRfcmVmKHBhcnQpOworCQkJeHBjX2hhbmRsZV9hY3RpdmF0ZV9tcV9tc2dfdXYocGFydCwgbXNnX2hkciwKKwkJCQkJCSAgICAgICZ3YWtldXBfaGJfY2hlY2tlcik7CisJCQlpZiAocGFydF9yZWZlcmVuY2VkKQogCQkJCXhwY19wYXJ0X2RlcmVmKHBhcnQpOwotCQkJfQogCQl9CiAKLQkJZ3J1X2ZyZWVfbWVzc2FnZSh4cGNfYWN0aXZhdGVfbXFfdXYtPmFkZHJlc3MsIG1zZ19oZHIpOworCQlncnVfZnJlZV9tZXNzYWdlKHhwY19hY3RpdmF0ZV9tcV91di0+Z3J1X21xX2Rlc2MsIG1zZ19oZHIpOwogCX0KIAogCWlmICh3YWtldXBfaGJfY2hlY2tlcikKQEAgLTU4OCwyMSArNjUyLDczIEBACiB9CiAKIHN0YXRpYyBlbnVtIHhwX3JldHZhbAoreHBjX2NhY2hlX3JlbW90ZV9ncnVfbXFfZGVzY191dihzdHJ1Y3QgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyAqZ3J1X21xX2Rlc2MsCisJCQkJdW5zaWduZWQgbG9uZyBncnVfbXFfZGVzY19ncGEpCit7CisJZW51bSB4cF9yZXR2YWwgcmV0OworCisJcmV0ID0geHBfcmVtb3RlX21lbWNweSh1dl9ncGEoZ3J1X21xX2Rlc2MpLCBncnVfbXFfZGVzY19ncGEsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjKSk7CisJaWYgKHJldCA9PSB4cFN1Y2Nlc3MpCisJCWdydV9tcV9kZXNjLT5tcSA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSB4cF9yZXR2YWwKIHhwY19zZW5kX2FjdGl2YXRlX0lSUV91dihzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCwgdm9pZCAqbXNnLCBzaXplX3QgbXNnX3NpemUsCiAJCQkgaW50IG1zZ190eXBlKQogewogCXN0cnVjdCB4cGNfYWN0aXZhdGVfbXFfbXNnaGRyX3V2ICptc2dfaGRyID0gbXNnOworCXN0cnVjdCB4cGNfcGFydGl0aW9uX3V2ICpwYXJ0X3V2ID0gJnBhcnQtPnNuLnV2OworCXN0cnVjdCBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjICpncnVfbXFfZGVzYzsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwllbnVtIHhwX3JldHZhbCByZXQ7CiAKIAlEQlVHX09OKG1zZ19zaXplID4gWFBDX0FDVElWQVRFX01TR19TSVpFX1VWKTsKIAogCW1zZ19oZHItPnR5cGUgPSBtc2dfdHlwZTsKLQltc2dfaGRyLT5wYXJ0aWQgPSBYUENfUEFSVElEKHBhcnQpOworCW1zZ19oZHItPnBhcnRpZCA9IHhwX3BhcnRpdGlvbl9pZDsKIAltc2dfaGRyLT5hY3Rfc3RhdGUgPSBwYXJ0LT5hY3Rfc3RhdGU7CiAJbXNnX2hkci0+cnBfdHNfamlmZmllcyA9IHhwY19yc3ZkX3BhZ2UtPnRzX2ppZmZpZXM7CiAKKwltdXRleF9sb2NrKCZwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2NfbXV0ZXgpOworYWdhaW46CisJaWYgKCEocGFydF91di0+ZmxhZ3MgJiBYUENfUF9DQUNIRURfQUNUSVZBVEVfR1JVX01RX0RFU0NfVVYpKSB7CisJCWdydV9tcV9kZXNjID0gcGFydF91di0+Y2FjaGVkX2FjdGl2YXRlX2dydV9tcV9kZXNjOworCQlpZiAoZ3J1X21xX2Rlc2MgPT0gTlVMTCkgeworCQkJZ3J1X21xX2Rlc2MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QKKwkJCQkJICAgICAgZ3J1X21lc3NhZ2VfcXVldWVfZGVzYyksCisJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQkJaWYgKGdydV9tcV9kZXNjID09IE5VTEwpIHsKKwkJCQlyZXQgPSB4cE5vTWVtb3J5OworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXBhcnRfdXYtPmNhY2hlZF9hY3RpdmF0ZV9ncnVfbXFfZGVzYyA9IGdydV9tcV9kZXNjOworCQl9CisKKwkJcmV0ID0geHBjX2NhY2hlX3JlbW90ZV9ncnVfbXFfZGVzY191dihncnVfbXFfZGVzYywKKwkJCQkJCSAgICAgIHBhcnRfdXYtPgorCQkJCQkJICAgICAgYWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhKTsKKwkJaWYgKHJldCAhPSB4cFN1Y2Nlc3MpCisJCQlnb3RvIGRvbmU7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBhcnRfdXYtPmZsYWdzX2xvY2ssIGlycV9mbGFncyk7CisJCXBhcnRfdXYtPmZsYWdzIHw9IFhQQ19QX0NBQ0hFRF9BQ1RJVkFURV9HUlVfTVFfREVTQ19VVjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGFydF91di0+ZmxhZ3NfbG9jaywgaXJxX2ZsYWdzKTsKKwl9CisKIAkvKiA/Pz8gSXMgaG9sZGluZyBhIHNwaW5fbG9jayAoY2gtPmxvY2spIGR1cmluZyB0aGlzIGNhbGwgYSBiYWQgaWRlYT8gKi8KLQlyZXR1cm4geHBjX3NlbmRfZ3J1X21zZyhwYXJ0LT5zbi51di5yZW1vdGVfYWN0aXZhdGVfbXFfZ3BhLCBtc2csCi0JCQkJbXNnX3NpemUpOworCXJldCA9IHhwY19zZW5kX2dydV9tc2cocGFydF91di0+Y2FjaGVkX2FjdGl2YXRlX2dydV9tcV9kZXNjLCBtc2csCisJCQkgICAgICAgbXNnX3NpemUpOworCWlmIChyZXQgIT0geHBTdWNjZXNzKSB7CisJCXNtcF9ybWIoKTsJLyogZW5zdXJlIGEgZnJlc2ggY29weSBvZiBwYXJ0X3V2LT5mbGFncyAqLworCQlpZiAoIShwYXJ0X3V2LT5mbGFncyAmIFhQQ19QX0NBQ0hFRF9BQ1RJVkFURV9HUlVfTVFfREVTQ19VVikpCisJCQlnb3RvIGFnYWluOworCX0KK2RvbmU6CisJbXV0ZXhfdW5sb2NrKCZwYXJ0X3V2LT5jYWNoZWRfYWN0aXZhdGVfZ3J1X21xX2Rlc2NfbXV0ZXgpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC02MjAsNyArNzM2LDcgQEAKIHhwY19zZW5kX2FjdGl2YXRlX0lSUV9jaF91dihzdHJ1Y3QgeHBjX2NoYW5uZWwgKmNoLCB1bnNpZ25lZCBsb25nICppcnFfZmxhZ3MsCiAJCQkgdm9pZCAqbXNnLCBzaXplX3QgbXNnX3NpemUsIGludCBtc2dfdHlwZSkKIHsKLQlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCA9ICZ4cGNfcGFydGl0aW9uc1tjaC0+bnVtYmVyXTsKKwlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydCA9ICZ4cGNfcGFydGl0aW9uc1tjaC0+cGFydGlkXTsKIAllbnVtIHhwX3JldHZhbCByZXQ7CiAKIAlyZXQgPSB4cGNfc2VuZF9hY3RpdmF0ZV9JUlFfdXYocGFydCwgbXNnLCBtc2dfc2l6ZSwgbXNnX3R5cGUpOwpAQCAtNjkyLDcgKzgwOCw4IEBACiBzdGF0aWMgaW50CiB4cGNfc2V0dXBfcnN2ZF9wYWdlX3NuX3V2KHN0cnVjdCB4cGNfcnN2ZF9wYWdlICpycCkKIHsKLQlycC0+c24uYWN0aXZhdGVfbXFfZ3BhID0gdXZfZ3BhKHhwY19hY3RpdmF0ZV9tcV91di0+YWRkcmVzcyk7CisJcnAtPnNuLmFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYSA9CisJICAgIHV2X2dwYSh4cGNfYWN0aXZhdGVfbXFfdXYtPmdydV9tcV9kZXNjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzg3LDcgKzkwNCw4IEBACiAKIAlwYXJ0LT5yZW1vdGVfcnBfcGEgPSByZW1vdGVfcnBfZ3BhOyAvKiAhISEgX3BhIGhlcmUgaXMgcmVhbGx5IF9ncGEgKi8KIAlwYXJ0LT5yZW1vdGVfcnBfdHNfamlmZmllcyA9IHJlbW90ZV9ycC0+dHNfamlmZmllczsKLQlwYXJ0LT5zbi51di5yZW1vdGVfYWN0aXZhdGVfbXFfZ3BhID0gcmVtb3RlX3JwLT5zbi5hY3RpdmF0ZV9tcV9ncGE7CisJcGFydC0+c24udXYuYWN0aXZhdGVfZ3J1X21xX2Rlc2NfZ3BhID0KKwkgICAgcmVtb3RlX3JwLT5zbi5hY3RpdmF0ZV9ncnVfbXFfZGVzY19ncGE7CiAKIAkvKgogCSAqID8/PyBJcyBpdCBhIGdvb2QgaWRlYSB0byBtYWtlIHRoaXMgY29uZGl0aW9uYWwgb24gd2hhdCBpcwpAQCAtNzk1LDcgKzkxMyw4IEBACiAJICovCiAJaWYgKHBhcnQtPnNuLnV2LnJlbW90ZV9hY3Rfc3RhdGUgPT0gWFBDX1BfQVNfSU5BQ1RJVkUpIHsKIAkJbXNnLnJwX2dwYSA9IHV2X2dwYSh4cGNfcnN2ZF9wYWdlKTsKLQkJbXNnLmFjdGl2YXRlX21xX2dwYSA9IHhwY19yc3ZkX3BhZ2UtPnNuLmFjdGl2YXRlX21xX2dwYTsKKwkJbXNnLmFjdGl2YXRlX2dydV9tcV9kZXNjX2dwYSA9CisJCSAgICB4cGNfcnN2ZF9wYWdlLT5zbi5hY3RpdmF0ZV9ncnVfbXFfZGVzY19ncGE7CiAJCXhwY19zZW5kX2FjdGl2YXRlX0lSUV9wYXJ0X3V2KHBhcnQsICZtc2csIHNpemVvZihtc2cpLAogCQkJCQkgICBYUENfQUNUSVZBVEVfTVFfTVNHX0FDVElWQVRFX1JFUV9VVik7CiAJfQpAQCAtODU3LDcgKzk3Niw4IEBACiAJCWlmIChoZWFkLT5maXJzdCA9PSBOVUxMKQogCQkJaGVhZC0+bGFzdCA9IE5VTEw7CiAJfQotCWhlYWQtPm5fZW50cmllcysrOworCWhlYWQtPm5fZW50cmllcy0tOworCUJVR19PTihoZWFkLT5uX2VudHJpZXMgPCAwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoZWFkLT5sb2NrLCBpcnFfZmxhZ3MpOwogCWZpcnN0LT5uZXh0ID0gTlVMTDsKIAlyZXR1cm4gZmlyc3Q7CkBAIC04NzYsOCArOTk2LDcgQEAKIAllbHNlCiAJCWhlYWQtPmZpcnN0ID0gbGFzdDsKIAloZWFkLT5sYXN0ID0gbGFzdDsKLQloZWFkLT5uX2VudHJpZXMtLTsKLQlCVUdfT04oaGVhZC0+bl9lbnRyaWVzIDwgMCk7CisJaGVhZC0+bl9lbnRyaWVzKys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGVhZC0+bG9jaywgaXJxX2ZsYWdzKTsKIH0KIApAQCAtMTAzNyw2ICsxMTU2LDEyIEBACiAKIAlEQlVHX09OKGNoLT5mbGFncyAmIFhQQ19DX1NFVFVQKTsKIAorCWNoX3V2LT5jYWNoZWRfbm90aWZ5X2dydV9tcV9kZXNjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0CisJCQkJCQkgICBncnVfbWVzc2FnZV9xdWV1ZV9kZXNjKSwKKwkJCQkJCSAgIEdGUF9LRVJORUwpOworCWlmIChjaF91di0+Y2FjaGVkX25vdGlmeV9ncnVfbXFfZGVzYyA9PSBOVUxMKQorCQlyZXR1cm4geHBOb01lbW9yeTsKKwogCXJldCA9IHhwY19hbGxvY2F0ZV9zZW5kX21zZ19zbG90X3V2KGNoKTsKIAlpZiAocmV0ID09IHhwU3VjY2VzcykgewogCkBAIC0xMDYwLDcgKzExODUsOCBAQAogCiAJREJVR19PTighc3Bpbl9pc19sb2NrZWQoJmNoLT5sb2NrKSk7CiAKLQljaF91di0+cmVtb3RlX25vdGlmeV9tcV9ncGEgPSAwOworCWtmcmVlKGNoX3V2LT5jYWNoZWRfbm90aWZ5X2dydV9tcV9kZXNjKTsKKwljaF91di0+Y2FjaGVkX25vdGlmeV9ncnVfbXFfZGVzYyA9IE5VTEw7CiAKIAlpZiAoY2gtPmZsYWdzICYgWFBDX0NfU0VUVVApIHsKIAkJeHBjX2luaXRfZmlmb191digmY2hfdXYtPm1zZ19zbG90X2ZyZWVfbGlzdCk7CkBAIC0xMTExLDcgKzEyMzcsNyBAQAogCW1zZy5jaF9udW1iZXIgPSBjaC0+bnVtYmVyOwogCW1zZy5sb2NhbF9uZW50cmllcyA9IGNoLT5sb2NhbF9uZW50cmllczsKIAltc2cucmVtb3RlX25lbnRyaWVzID0gY2gtPnJlbW90ZV9uZW50cmllczsKLQltc2cubG9jYWxfbm90aWZ5X21xX2dwYSA9IHV2X2dwYSh4cGNfbm90aWZ5X21xX3V2KTsKKwltc2cubm90aWZ5X2dydV9tcV9kZXNjX2dwYSA9IHV2X2dwYSh4cGNfbm90aWZ5X21xX3V2LT5ncnVfbXFfZGVzYyk7CiAJeHBjX3NlbmRfYWN0aXZhdGVfSVJRX2NoX3V2KGNoLCBpcnFfZmxhZ3MsICZtc2csIHNpemVvZihtc2cpLAogCQkJCSAgICBYUENfQUNUSVZBVEVfTVFfTVNHX0NIQ1RMX09QRU5SRVBMWV9VVik7CiB9CkBAIC0xMTI4LDExICsxMjU0LDE1IEBACiAJeHBjX3dha2V1cF9jaGFubmVsX21ncihwYXJ0KTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBlbnVtIHhwX3JldHZhbAogeHBjX3NhdmVfcmVtb3RlX21zZ3F1ZXVlX3BhX3V2KHN0cnVjdCB4cGNfY2hhbm5lbCAqY2gsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBtc2dxdWV1ZV9wYSkKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGdydV9tcV9kZXNjX2dwYSkKIHsKLQljaC0+c24udXYucmVtb3RlX25vdGlmeV9tcV9ncGEgPSBtc2dxdWV1ZV9wYTsKKwlzdHJ1Y3QgeHBjX2NoYW5uZWxfdXYgKmNoX3V2ID0gJmNoLT5zbi51djsKKworCURCVUdfT04oY2hfdXYtPmNhY2hlZF9ub3RpZnlfZ3J1X21xX2Rlc2MgPT0gTlVMTCk7CisJcmV0dXJuIHhwY19jYWNoZV9yZW1vdGVfZ3J1X21xX2Rlc2NfdXYoY2hfdXYtPmNhY2hlZF9ub3RpZnlfZ3J1X21xX2Rlc2MsCisJCQkJCSAgICAgICBncnVfbXFfZGVzY19ncGEpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTMzOSw3ICsxNDY5LDggQEAKIAlzaG9ydCBwYXJ0aWQ7CiAJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQ7CiAKLQl3aGlsZSAoKG1zZyA9IGdydV9nZXRfbmV4dF9tZXNzYWdlKHhwY19ub3RpZnlfbXFfdXYpKSAhPSBOVUxMKSB7CisJd2hpbGUgKChtc2cgPSBncnVfZ2V0X25leHRfbWVzc2FnZSh4cGNfbm90aWZ5X21xX3V2LT5ncnVfbXFfZGVzYykpICE9CisJICAgICAgIE5VTEwpIHsKIAogCQlwYXJ0aWQgPSBtc2ctPmhkci5wYXJ0aWQ7CiAJCWlmIChwYXJ0aWQgPCAwIHx8IHBhcnRpZCA+PSBYUF9NQVhfTlBBUlRJVElPTlNfVVYpIHsKQEAgLTEzNTQsNyArMTQ4NSw3IEBACiAJCQl9CiAJCX0KIAotCQlncnVfZnJlZV9tZXNzYWdlKHhwY19ub3RpZnlfbXFfdXYsIG1zZyk7CisJCWdydV9mcmVlX21lc3NhZ2UoeHBjX25vdGlmeV9tcV91di0+Z3J1X21xX2Rlc2MsIG1zZyk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTQzOCw3ICsxNTY5LDggQEAKIAltc2ctPmhkci5tc2dfc2xvdF9udW1iZXIgPSBtc2dfc2xvdC0+bXNnX3Nsb3RfbnVtYmVyOwogCW1lbWNweSgmbXNnLT5wYXlsb2FkLCBwYXlsb2FkLCBwYXlsb2FkX3NpemUpOwogCi0JcmV0ID0geHBjX3NlbmRfZ3J1X21zZyhjaC0+c24udXYucmVtb3RlX25vdGlmeV9tcV9ncGEsIG1zZywgbXNnX3NpemUpOworCXJldCA9IHhwY19zZW5kX2dydV9tc2coY2gtPnNuLnV2LmNhY2hlZF9ub3RpZnlfZ3J1X21xX2Rlc2MsIG1zZywKKwkJCSAgICAgICBtc2dfc2l6ZSk7CiAJaWYgKHJldCA9PSB4cFN1Y2Nlc3MpCiAJCWdvdG8gb3V0XzE7CiAKQEAgLTE1MjksNyArMTY2MSw3IEBACiAJbXNnLT5oZHIucGFydGlkID0geHBfcGFydGl0aW9uX2lkOwogCW1zZy0+aGRyLnNpemUgPSAwOwkvKiBzaXplIG9mIHplcm8gaW5kaWNhdGVzIHRoaXMgaXMgYW4gQUNLICovCiAKLQlyZXQgPSB4cGNfc2VuZF9ncnVfbXNnKGNoLT5zbi51di5yZW1vdGVfbm90aWZ5X21xX2dwYSwgbXNnLAorCXJldCA9IHhwY19zZW5kX2dydV9tc2coY2gtPnNuLnV2LmNhY2hlZF9ub3RpZnlfZ3J1X21xX2Rlc2MsIG1zZywKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IHhwY19ub3RpZnlfbXFfbXNnaGRyX3V2KSk7CiAJaWYgKHJldCAhPSB4cFN1Y2Nlc3MpCiAJCVhQQ19ERUFDVElWQVRFX1BBUlRJVElPTigmeHBjX3BhcnRpdGlvbnNbY2gtPnBhcnRpZF0sIHJldCk7CkBAIC0xNTQxLDYgKzE2NzMsNyBAQAogeHBjX2luaXRfdXYodm9pZCkKIHsKIAl4cGNfc2V0dXBfcGFydGl0aW9uc19zbiA9IHhwY19zZXR1cF9wYXJ0aXRpb25zX3NuX3V2OworCXhwY190ZWFyZG93bl9wYXJ0aXRpb25zX3NuID0geHBjX3RlYXJkb3duX3BhcnRpdGlvbnNfc25fdXY7CiAJeHBjX3Byb2Nlc3NfYWN0aXZhdGVfSVJRX3JjdmQgPSB4cGNfcHJvY2Vzc19hY3RpdmF0ZV9JUlFfcmN2ZF91djsKIAl4cGNfZ2V0X3BhcnRpdGlvbl9yc3ZkX3BhZ2VfcGEgPSB4cGNfZ2V0X3BhcnRpdGlvbl9yc3ZkX3BhZ2VfcGFfdXY7CiAJeHBjX3NldHVwX3JzdmRfcGFnZV9zbiA9IHhwY19zZXR1cF9yc3ZkX3BhZ2Vfc25fdXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKaW5kZXggNTEzZWIwOS4uZmU4MDQxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCisrKyBiL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYwpAQCAtNDEsNiArNDEsOCBAQAogCiAjaW5jbHVkZSAicXVldWUuaCIKIAorTU9EVUxFX0FMSUFTKCJtbWM6YmxvY2siKTsKKwogLyoKICAqIG1heCA4IHBhcnRpdGlvbnMgcGVyIGNhcmQKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9zZGlvX3VhcnQuYyBiL2RyaXZlcnMvbW1jL2NhcmQvc2Rpb191YXJ0LmMKaW5kZXggNzhhZDQ4Ny4uMzZhOGQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY2FyZC9zZGlvX3VhcnQuYworKysgYi9kcml2ZXJzL21tYy9jYXJkL3NkaW9fdWFydC5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvY2lyY19idWYuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KQEAgLTkzMyw2NyArOTM0LDY0IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBzZGlvX3VhcnRfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJICAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHNkaW9fdWFydF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBpLCBsZW4gPSAwOwotCW9mZl90IGJlZ2luID0gMDsKKwlpbnQgaTsKIAotCWxlbiArPSBzcHJpbnRmKHBhZ2UsICJzZXJpbmZvOjEuMCBkcml2ZXIlcyVzIHJldmlzaW9uOiVzXG4iLAorCXNlcV9wcmludGYobSwgInNlcmluZm86MS4wIGRyaXZlciVzJXMgcmV2aXNpb246JXNcbiIsCiAJCSAgICAgICAiIiwgIiIsICIiKTsKLQlmb3IgKGkgPSAwOyBpIDwgVUFSVF9OUiAmJiBsZW4gPCBQQUdFX1NJWkUgLSA5NjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykgewogCQlzdHJ1Y3Qgc2Rpb191YXJ0X3BvcnQgKnBvcnQgPSBzZGlvX3VhcnRfcG9ydF9nZXQoaSk7CiAJCWlmIChwb3J0KSB7Ci0JCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiVkOiB1YXJ0OlNESU8iLCBpKTsKKwkJCXNlcV9wcmludGYobSwgIiVkOiB1YXJ0OlNESU8iLCBpKTsKIAkJCWlmKGNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKLQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiIHR4OiVkIHJ4OiVkIiwKKwkJCQlzZXFfcHJpbnRmKG0sICIgdHg6JWQgcng6JWQiLAogCQkJCQkgICAgICAgcG9ydC0+aWNvdW50LnR4LCBwb3J0LT5pY291bnQucngpOwogCQkJCWlmIChwb3J0LT5pY291bnQuZnJhbWUpCi0JCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgZmU6JWQiLAorCQkJCQlzZXFfcHJpbnRmKG0sICIgZmU6JWQiLAogCQkJCQkJICAgICAgIHBvcnQtPmljb3VudC5mcmFtZSk7CiAJCQkJaWYgKHBvcnQtPmljb3VudC5wYXJpdHkpCi0JCQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIgcGU6JWQiLAorCQkJCQlzZXFfcHJpbnRmKG0sICIgcGU6JWQiLAogCQkJCQkJICAgICAgIHBvcnQtPmljb3VudC5wYXJpdHkpOwogCQkJCWlmIChwb3J0LT5pY291bnQuYnJrKQotCQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiIGJyazolZCIsCisJCQkJCXNlcV9wcmludGYobSwgIiBicms6JWQiLAogCQkJCQkJICAgICAgIHBvcnQtPmljb3VudC5icmspOwogCQkJCWlmIChwb3J0LT5pY291bnQub3ZlcnJ1bikKLQkJCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiBvZTolZCIsCisJCQkJCXNlcV9wcmludGYobSwgIiBvZTolZCIsCiAJCQkJCQkgICAgICAgcG9ydC0+aWNvdW50Lm92ZXJydW4pOwogCQkJCWlmIChwb3J0LT5pY291bnQuY3RzKQotCQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiIGN0czolZCIsCisJCQkJCXNlcV9wcmludGYobSwgIiBjdHM6JWQiLAogCQkJCQkJICAgICAgIHBvcnQtPmljb3VudC5jdHMpOwogCQkJCWlmIChwb3J0LT5pY291bnQuZHNyKQotCQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiIGRzcjolZCIsCisJCQkJCXNlcV9wcmludGYobSwgIiBkc3I6JWQiLAogCQkJCQkJICAgICAgIHBvcnQtPmljb3VudC5kc3IpOwogCQkJCWlmIChwb3J0LT5pY291bnQucm5nKQotCQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiIHJuZzolZCIsCisJCQkJCXNlcV9wcmludGYobSwgIiBybmc6JWQiLAogCQkJCQkJICAgICAgIHBvcnQtPmljb3VudC5ybmcpOwogCQkJCWlmIChwb3J0LT5pY291bnQuZGNkKQotCQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiIGRjZDolZCIsCisJCQkJCXNlcV9wcmludGYobSwgIiBkY2Q6JWQiLAogCQkJCQkJICAgICAgIHBvcnQtPmljb3VudC5kY2QpOwogCQkJfQotCQkJc3RyY2F0KHBhZ2UsICJcbiIpOwotCQkJbGVuKys7CiAJCQlzZGlvX3VhcnRfcG9ydF9wdXQocG9ydCk7Ci0JCX0KLQotCQlpZiAobGVuICsgYmVnaW4gPiBvZmYgKyBjb3VudCkKLQkJCWdvdG8gZG9uZTsKLQkJaWYgKGxlbiArIGJlZ2luIDwgb2ZmKSB7Ci0JCQliZWdpbiArPSBsZW47Ci0JCQlsZW4gPSAwOworCQkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJCX0KIAl9Ci0JKmVvZiA9IDE7Ci0KLWRvbmU6Ci0JaWYgKG9mZiA+PSBsZW4gKyBiZWdpbikKLQkJcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIChvZmYgLSBiZWdpbik7Ci0JcmV0dXJuIChjb3VudCA8IGJlZ2luICsgbGVuIC0gb2ZmKSA/IGNvdW50IDogKGJlZ2luICsgbGVuIC0gb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZGlvX3VhcnRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzZGlvX3VhcnRfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2Rpb191YXJ0X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gc2Rpb191YXJ0X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBzZGlvX3VhcnRfb3BzID0gewogCS5vcGVuCQkJPSBzZGlvX3VhcnRfb3BlbiwKIAkuY2xvc2UJCQk9IHNkaW9fdWFydF9jbG9zZSwKQEAgLTEwMDcsNyArMTAwNSw3IEBACiAJLmJyZWFrX2N0bAkJPSBzZGlvX3VhcnRfYnJlYWtfY3RsLAogCS50aW9jbWdldAkJPSBzZGlvX3VhcnRfdGlvY21nZXQsCiAJLnRpb2Ntc2V0CQk9IHNkaW9fdWFydF90aW9jbXNldCwKLQkucmVhZF9wcm9jCQk9IHNkaW9fdWFydF9yZWFkX3Byb2MsCisJLnByb2NfZm9wcwkJPSAmc2Rpb191YXJ0X3Byb2NfZm9wcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqc2Rpb191YXJ0X3R0eV9kcml2ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2J1cy5jIGIvZHJpdmVycy9tbWMvY29yZS9idXMuYwppbmRleCBmMjEwYThlLi5iZGIxNjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKQEAgLTg0LDYgKzg0LDE0IEBACiAJfQogCiAJcmV0dmFsID0gYWRkX3VldmVudF92YXIoZW52LCAiTU1DX05BTUU9JXMiLCBtbWNfY2FyZF9uYW1lKGNhcmQpKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJLyoKKwkgKiBSZXF1ZXN0IHRoZSBtbWNfYmxvY2sgZGV2aWNlLiAgTm90ZTogdGhhdCB0aGlzIGlzIGEgZGlyZWN0IHJlcXVlc3QKKwkgKiBmb3IgdGhlIG1vZHVsZSBpdCBjYXJyaWVzIG5vIGluZm9ybWF0aW9uIGFzIHRvIHdoYXQgaXMgaW5zZXJ0ZWQuCisJICovCisJcmV0dmFsID0gYWRkX3VldmVudF92YXIoZW52LCAiTU9EQUxJQVM9bW1jOmJsb2NrIik7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYwppbmRleCBkZjZjZTRhLi5mYTA3M2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KQEAgLTI5Nyw2ICsyOTgsMjEgQEAKIAkJCWRhdGEtPnRpbWVvdXRfY2xrcyA9IDA7CiAJCX0KIAl9CisJLyoKKwkgKiBTb21lIGNhcmRzIG5lZWQgdmVyeSBoaWdoIHRpbWVvdXRzIGlmIGRyaXZlbiBpbiBTUEkgbW9kZS4KKwkgKiBUaGUgd29yc3Qgb2JzZXJ2ZWQgdGltZW91dCB3YXMgOTAwbXMgYWZ0ZXIgd3JpdGluZyBhCisJICogY29udGludW91cyBzdHJlYW0gb2YgZGF0YSB1bnRpbCB0aGUgaW50ZXJuYWwgbG9naWMKKwkgKiBvdmVyZmxvd2VkLgorCSAqLworCWlmIChtbWNfaG9zdF9pc19zcGkoY2FyZC0+aG9zdCkpIHsKKwkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpIHsKKwkJCWlmIChkYXRhLT50aW1lb3V0X25zIDwgMTAwMDAwMDAwMCkKKwkJCQlkYXRhLT50aW1lb3V0X25zID0gMTAwMDAwMDAwMDsJLyogMXMgKi8KKwkJfSBlbHNlIHsKKwkJCWlmIChkYXRhLT50aW1lb3V0X25zIDwgMTAwMDAwMDAwKQorCQkJCWRhdGEtPnRpbWVvdXRfbnMgPSAgMTAwMDAwMDAwOwkvKiAxMDBtcyAqLworCQl9CisJfQogfQogRVhQT1JUX1NZTUJPTChtbWNfc2V0X2RhdGFfdGltZW91dCk7CiAKQEAgLTUyMyw2ICs1MzksMTA1IEBACiB9CiBFWFBPUlRfU1lNQk9MKG1tY192ZGRyYW5nZV90b19vY3JtYXNrKTsKIAorI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKKworLyoqCisgKiBtbWNfcmVndWxhdG9yX2dldF9vY3JtYXNrIC0gcmV0dXJuIG1hc2sgb2Ygc3VwcG9ydGVkIHZvbHRhZ2VzCisgKiBAc3VwcGx5OiByZWd1bGF0b3IgdG8gdXNlCisgKgorICogVGhpcyByZXR1cm5zIGVpdGhlciBhIG5lZ2F0aXZlIGVycm5vLCBvciBhIG1hc2sgb2Ygdm9sdGFnZXMgdGhhdAorICogY2FuIGJlIHByb3ZpZGVkIHRvIE1NQy9TRC9TRElPIGRldmljZXMgdXNpbmcgdGhlIHNwZWNpZmllZCB2b2x0YWdlCisgKiByZWd1bGF0b3IuICBUaGlzIHdvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZCBiZWZvcmUgcmVnaXN0ZXJpbmcgdGhlCisgKiBNTUMgaG9zdCBhZGFwdGVyLgorICovCitpbnQgbW1jX3JlZ3VsYXRvcl9nZXRfb2NybWFzayhzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHkpCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlpbnQJCQljb3VudDsKKwlpbnQJCQlpOworCisJY291bnQgPSByZWd1bGF0b3JfY291bnRfdm9sdGFnZXMoc3VwcGx5KTsKKwlpZiAoY291bnQgPCAwKQorCQlyZXR1cm4gY291bnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpbnQJCXZkZF91VjsKKwkJaW50CQl2ZGRfbVY7CisKKwkJdmRkX3VWID0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZShzdXBwbHksIGkpOworCQlpZiAodmRkX3VWIDw9IDApCisJCQljb250aW51ZTsKKworCQl2ZGRfbVYgPSB2ZGRfdVYgLyAxMDAwOworCQlyZXN1bHQgfD0gbW1jX3ZkZHJhbmdlX3RvX29jcm1hc2sodmRkX21WLCB2ZGRfbVYpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CitFWFBPUlRfU1lNQk9MKG1tY19yZWd1bGF0b3JfZ2V0X29jcm1hc2spOworCisvKioKKyAqIG1tY19yZWd1bGF0b3Jfc2V0X29jciAtIHNldCByZWd1bGF0b3IgdG8gbWF0Y2ggaG9zdC0+aW9zIHZvbHRhZ2UKKyAqIEB2ZGRfYml0OiB6ZXJvIGZvciBwb3dlciBvZmYsIGVsc2UgYSBiaXQgbnVtYmVyIChob3N0LT5pb3MudmRkKQorICogQHN1cHBseTogcmVndWxhdG9yIHRvIHVzZQorICoKKyAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLgorICoKKyAqIE1NQyBob3N0IGRyaXZlcnMgbWF5IHVzZSB0aGlzIHRvIGVuYWJsZSBvciBkaXNhYmxlIGEgcmVndWxhdG9yIHVzaW5nCisgKiBhIHBhcnRpY3VsYXIgc3VwcGx5IHZvbHRhZ2UuICBUaGlzIHdvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZCBmcm9tIHRoZQorICogc2V0X2lvcygpIG1ldGhvZC4KKyAqLworaW50IG1tY19yZWd1bGF0b3Jfc2V0X29jcihzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHksIHVuc2lnbmVkIHNob3J0IHZkZF9iaXQpCit7CisJaW50CQkJcmVzdWx0ID0gMDsKKwlpbnQJCQltaW5fdVYsIG1heF91VjsKKwlpbnQJCQllbmFibGVkOworCisJZW5hYmxlZCA9IHJlZ3VsYXRvcl9pc19lbmFibGVkKHN1cHBseSk7CisJaWYgKGVuYWJsZWQgPCAwKQorCQlyZXR1cm4gZW5hYmxlZDsKKworCWlmICh2ZGRfYml0KSB7CisJCWludAkJdG1wOworCQlpbnQJCXZvbHRhZ2U7CisKKwkJLyogUkVWSVNJVCBtbWNfdmRkcmFuZ2VfdG9fb2NybWFzaygpIG1heSBoYXZlIHNldCBzb21lCisJCSAqIGJpdHMgdGhpcyByZWd1bGF0b3IgZG9lc24ndCBxdWl0ZSBzdXBwb3J0IC4uLiBkb24ndAorCQkgKiBiZSB0b28gcGlja3ksIG1vc3QgY2FyZHMgYW5kIHJlZ3VsYXRvcnMgYXJlIE9LIHdpdGgKKwkJICogYSAwLjFWIHJhbmdlIGdvb2YgKGl0J3MgYSBzbWFsbCBlcnJvciBwZXJjZW50YWdlKS4KKwkJICovCisJCXRtcCA9IHZkZF9iaXQgLSBpbG9nMihNTUNfVkREXzE2NV8xOTUpOworCQlpZiAodG1wID09IDApIHsKKwkJCW1pbl91ViA9IDE2NTAgKiAxMDAwOworCQkJbWF4X3VWID0gMTk1MCAqIDEwMDA7CisJCX0gZWxzZSB7CisJCQltaW5fdVYgPSAxOTAwICogMTAwMCArIHRtcCAqIDEwMCAqIDEwMDA7CisJCQltYXhfdVYgPSBtaW5fdVYgKyAxMDAgKiAxMDAwOworCQl9CisKKwkJLyogYXZvaWQgbmVlZGxlc3MgY2hhbmdlcyB0byB0aGlzIHZvbHRhZ2U7IHRoZSByZWd1bGF0b3IKKwkJICogbWlnaHQgbm90IGFsbG93IHRoaXMgb3BlcmF0aW9uCisJCSAqLworCQl2b2x0YWdlID0gcmVndWxhdG9yX2dldF92b2x0YWdlKHN1cHBseSk7CisJCWlmICh2b2x0YWdlIDwgMCkKKwkJCXJlc3VsdCA9IHZvbHRhZ2U7CisJCWVsc2UgaWYgKHZvbHRhZ2UgPCBtaW5fdVYgfHwgdm9sdGFnZSA+IG1heF91VikKKwkJCXJlc3VsdCA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShzdXBwbHksIG1pbl91ViwgbWF4X3VWKTsKKwkJZWxzZQorCQkJcmVzdWx0ID0gMDsKKworCQlpZiAocmVzdWx0ID09IDAgJiYgIWVuYWJsZWQpCisJCQlyZXN1bHQgPSByZWd1bGF0b3JfZW5hYmxlKHN1cHBseSk7CisJfSBlbHNlIGlmIChlbmFibGVkKSB7CisJCXJlc3VsdCA9IHJlZ3VsYXRvcl9kaXNhYmxlKHN1cHBseSk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0wobW1jX3JlZ3VsYXRvcl9zZXRfb2NyKTsKKworI2VuZGlmCisKIC8qCiAgKiBNYXNrIG9mZiBhbnkgdm9sdGFnZXMgd2UgZG9uJ3Qgc3VwcG9ydCBhbmQgc2VsZWN0CiAgKiB0aGUgbG93ZXN0IHZvbHRhZ2UKQEAgLTgxNSw2ICs5MzAsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKICNlbmRpZgogCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmaG9zdC0+ZGV0ZWN0KTsKIAltbWNfZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAogCW1tY19idXNfZ2V0KGhvc3QpOwpAQCAtODQyLDYgKzk1OCw3IEBACiAgKi8KIGludCBtbWNfc3VzcGVuZF9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgcG1fbWVzc2FnZV90IHN0YXRlKQogeworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmhvc3QtPmRldGVjdCk7CiAJbW1jX2ZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAltbWNfYnVzX2dldChob3N0KTsKQEAgLTg3NSw2ICs5OTIsNyBAQAogCW1tY19idXNfZ2V0KGhvc3QpOwogCWlmIChob3N0LT5idXNfb3BzICYmICFob3N0LT5idXNfZGVhZCkgewogCQltbWNfcG93ZXJfdXAoaG9zdCk7CisJCW1tY19zZWxlY3Rfdm9sdGFnZShob3N0LCBob3N0LT5vY3IpOwogCQlCVUdfT04oIWhvc3QtPmJ1c19vcHMtPnJlc3VtZSk7CiAJCWhvc3QtPmJ1c19vcHMtPnJlc3VtZShob3N0KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2RlYnVnZnMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jCmluZGV4IDEyMzdiYjQuLjYxMGRiZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvZGVidWdmcy5jCkBAIC0xODQsNiArMTg0LDY4IEBACiBERUZJTkVfU0lNUExFX0FUVFJJQlVURShtbWNfZGJnX2NhcmRfc3RhdHVzX2ZvcHMsIG1tY19kYmdfY2FyZF9zdGF0dXNfZ2V0LAogCQlOVUxMLCAiJTA4bGx4XG4iKTsKIAorI2RlZmluZSBFWFRfQ1NEX1NUUl9MRU4gMTAyNQorCitzdGF0aWMgaW50IG1tY19leHRfY3NkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IG1tY19jYXJkICpjYXJkID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwljaGFyICpidWY7CisJc3NpemVfdCBuID0gMDsKKwl1OCAqZXh0X2NzZDsKKwlpbnQgZXJyLCBpOworCisJYnVmID0ga21hbGxvYyhFWFRfQ1NEX1NUUl9MRU4gKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlleHRfY3NkID0ga21hbGxvYyg1MTIsIEdGUF9LRVJORUwpOworCWlmICghZXh0X2NzZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCW1tY19jbGFpbV9ob3N0KGNhcmQtPmhvc3QpOworCWVyciA9IG1tY19zZW5kX2V4dF9jc2QoY2FyZCwgZXh0X2NzZCk7CisJbW1jX3JlbGVhc2VfaG9zdChjYXJkLT5ob3N0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlOworCisJZm9yIChpID0gNTExOyBpID49IDA7IGktLSkKKwkJbiArPSBzcHJpbnRmKGJ1ZiArIG4sICIlMDJ4IiwgZXh0X2NzZFtpXSk7CisJbiArPSBzcHJpbnRmKGJ1ZiArIG4sICJcbiIpOworCUJVR19PTihuICE9IEVYVF9DU0RfU1RSX0xFTik7CisKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBidWY7CisJa2ZyZWUoZXh0X2NzZCk7CisJcmV0dXJuIDA7CisKK291dF9mcmVlOgorCWtmcmVlKGJ1Zik7CisJa2ZyZWUoZXh0X2NzZCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHNzaXplX3QgbW1jX2V4dF9jc2RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQoreworCWNoYXIgKmJ1ZiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsCisJCQkJICAgICAgIGJ1ZiwgRVhUX0NTRF9TVFJfTEVOKTsKK30KKworc3RhdGljIGludCBtbWNfZXh0X2NzZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWtmcmVlKGZpbGUtPnByaXZhdGVfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1tY19kYmdfZXh0X2NzZF9mb3BzID0geworCS5vcGVuCQk9IG1tY19leHRfY3NkX29wZW4sCisJLnJlYWQJCT0gbW1jX2V4dF9jc2RfcmVhZCwKKwkucmVsZWFzZQk9IG1tY19leHRfY3NkX3JlbGVhc2UsCit9OworCiB2b2lkIG1tY19hZGRfY2FyZF9kZWJ1Z2ZzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QJKmhvc3QgPSBjYXJkLT5ob3N0OwpAQCAtMjExLDYgKzI3MywxMSBAQAogCQkJCQkmbW1jX2RiZ19jYXJkX3N0YXR1c19mb3BzKSkKIAkJCWdvdG8gZXJyOwogCisJaWYgKG1tY19jYXJkX21tYyhjYXJkKSkKKwkJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJleHRfY3NkIiwgU19JUlVTUiwgcm9vdCwgY2FyZCwKKwkJCQkJJm1tY19kYmdfZXh0X2NzZF9mb3BzKSkKKwkJCWdvdG8gZXJyOworCiAJcmV0dXJuOwogCiBlcnI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fY2lzLmMKaW5kZXggOTU2YmQ3Ni4uOTYzZjI5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2Npcy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19jaXMuYwpAQCAtMjIzLDEwICsyMjMsMTggQEAKIAkJaWYgKHRwbF9jb2RlID09IDB4ZmYpCiAJCQlicmVhazsKIAorCQkvKiBudWxsIGVudHJpZXMgaGF2ZSBubyBsaW5rIGZpZWxkIG9yIGRhdGEgKi8KKwkJaWYgKHRwbF9jb2RlID09IDB4MDApCisJCQljb250aW51ZTsKKwogCQlyZXQgPSBtbWNfaW9fcndfZGlyZWN0KGNhcmQsIDAsIDAsIHB0cisrLCAwLCAmdHBsX2xpbmspOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAKKwkJLyogYSBzaXplIG9mIDB4ZmYgYWxzbyBtZWFucyB3ZSdyZSBkb25lICovCisJCWlmICh0cGxfbGluayA9PSAweGZmKQorCQkJYnJlYWs7CisKIAkJdGhpcyA9IGttYWxsb2Moc2l6ZW9mKCp0aGlzKSArIHRwbF9saW5rLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCF0aGlzKQogCQkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fb3BzLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fb3BzLmMKaW5kZXggYzhmYTA5NS4uNGViNzgyNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19vcHMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fb3BzLmMKQEAgLTc2LDYgKzc2LDEwIEBACiAJQlVHX09OKCFjYXJkKTsKIAlCVUdfT04oZm4gPiA3KTsKIAorCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChhZGRyICYgfjB4MUZGRkYpCisJCXJldHVybiAtRUlOVkFMOworCiAJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2NvbW1hbmQpKTsKIAogCWNtZC5vcGNvZGUgPSBTRF9JT19SV19ESVJFQ1Q7CkBAIC0xMjUsNiArMTI5LDEwIEBACiAJV0FSTl9PTihibG9ja3MgPT0gMCk7CiAJV0FSTl9PTihibGtzeiA9PSAwKTsKIAorCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChhZGRyICYgfjB4MUZGRkYpCisJCXJldHVybiAtRUlOVkFMOworCiAJbWVtc2V0KCZtcnEsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX3JlcXVlc3QpKTsKIAltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKHN0cnVjdCBtbWNfY29tbWFuZCkpOwogCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBtbWNfZGF0YSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCmluZGV4IDk5ZDRiMjguLmI0Y2Y2OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKQEAgLTM3LDYgKzM3LDEzIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBNTUNfU0RIQ0lfSU9fQUNDRVNTT1JTCisJYm9vbAorCWRlcGVuZHMgb24gTU1DX1NESENJCisJaGVscAorCSAgVGhpcyBpcyBzaWxlbnQgS2NvbmZpZyBzeW1ib2wgdGhhdCBpcyBzZWxlY3RlZCBieSB0aGUgZHJpdmVycyB0aGF0CisJICBuZWVkIHRvIG92ZXJ3cml0ZSBTREhDSSBJTyBtZW1vcnkgYWNjZXNzb3JzLgorCiBjb25maWcgTU1DX1NESENJX1BDSQogCXRyaXN0YXRlICJTREhDSSBzdXBwb3J0IG9uIFBDSSBidXMiCiAJZGVwZW5kcyBvbiBNTUNfU0RIQ0kgJiYgUENJCkBAIC02NSw2ICs3MiwxNyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCitjb25maWcgTU1DX1NESENJX09GCisJdHJpc3RhdGUgIlNESENJIHN1cHBvcnQgb24gT3BlbkZpcm13YXJlIHBsYXRmb3JtcyIKKwlkZXBlbmRzIG9uIE1NQ19TREhDSSAmJiBQUENfT0YKKwlzZWxlY3QgTU1DX1NESENJX0lPX0FDQ0VTU09SUworCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyB0aGUgT0Ygc3VwcG9ydCBmb3IgU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyCisJICBJbnRlcmZhY2VzLiBTbyBmYXIsIG9ubHkgdGhlIEZyZWVzY2FsZSBlU0RIQyBjb250cm9sbGVyIGlzIGtub3duCisJICB0byBleGlzdCBvbiBPRiBwbGF0Zm9ybXMuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBNTUNfT01BUAogCXRyaXN0YXRlICJUSSBPTUFQIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUApAQCAtMTcxLDEzICsxODksMjQgQEAKICAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aWZtX3NkLgogCitjb25maWcgTU1DX01WU0RJTworCXRyaXN0YXRlICJNYXJ2ZWxsIE1NQy9TRC9TRElPIGhvc3QgZHJpdmVyIgorCWRlcGVuZHMgb24gUExBVF9PUklPTgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgc2VsZWN0cyB0aGUgTWFydmVsbCBTRElPIGhvc3QgZHJpdmVyLgorCSAgU0RJTyBtYXkgY3VycmVudGx5IGJlIGZvdW5kIG9uIHRoZSBLaXJrd29vZCA4OEY2MjgxIGFuZCA4OEY2MTkyCisJICBTb0MgY29udHJvbGxlcnMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG12c2Rpby4KKwogY29uZmlnIE1NQ19TUEkKIAl0cmlzdGF0ZSAiTU1DL1NEL1NESU8gb3ZlciBTUEkiCiAJZGVwZW5kcyBvbiBTUElfTUFTVEVSICYmICFISUdITUVNICYmIEhBU19ETUEKIAlzZWxlY3QgQ1JDNwogCXNlbGVjdCBDUkNfSVRVX1QKIAloZWxwCi0JICBTb21lIHN5c3RlbXMgYWNjc3MgTU1DL1NEL1NESU8gY2FyZHMgdXNpbmcgYSBTUEkgY29udHJvbGxlcgorCSAgU29tZSBzeXN0ZW1zIGFjY2VzcyBNTUMvU0QvU0RJTyBjYXJkcyB1c2luZyBhIFNQSSBjb250cm9sbGVyCiAJICBpbnN0ZWFkIG9mIHVzaW5nIGEgIm5hdGl2ZSIgTU1DL1NEL1NESU8gY29udHJvbGxlci4gIFRoaXMgaGFzIGEKIAkgIGRpc2FkdmFudGFnZSBvZiBiZWluZyByZWxhdGl2ZWx5IGhpZ2ggb3ZlcmhlYWQsIGJ1dCBhIGNvbXBlbnNhdGluZwogCSAgYWR2YW50YWdlIG9mIHdvcmtpbmcgb24gbWFueSBzeXN0ZW1zIHdpdGhvdXQgZGVkaWNhdGVkIE1NQy9TRC9TRElPCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQppbmRleCBkZWRlYzU1Li45NzBhOTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDcgQEAKIG9iai0kKENPTkZJR19NTUNfU0RIQ0kpCQkrPSBzZGhjaS5vCiBvYmotJChDT05GSUdfTU1DX1NESENJX1BDSSkJKz0gc2RoY2ktcGNpLm8KIG9iai0kKENPTkZJR19NTUNfUklDT0hfTU1DKQkrPSByaWNvaF9tbWMubworb2JqLSQoQ09ORklHX01NQ19TREhDSV9PRikJKz0gc2RoY2ktb2Yubwogb2JqLSQoQ09ORklHX01NQ19XQlNEKQkJKz0gd2JzZC5vCiBvYmotJChDT05GSUdfTU1DX0FVMVgpCQkrPSBhdTF4bW1jLm8KIG9iai0kKENPTkZJR19NTUNfT01BUCkJCSs9IG9tYXAubwpAQCAtMjAsNiArMjEsNyBAQAogb2JqLSQoQ09ORklHX01NQ19BVDkxKQkJKz0gYXQ5MV9tY2kubwogb2JqLSQoQ09ORklHX01NQ19BVE1FTE1DSSkJKz0gYXRtZWwtbWNpLm8KIG9iai0kKENPTkZJR19NTUNfVElGTV9TRCkJKz0gdGlmbV9zZC5vCitvYmotJChDT05GSUdfTU1DX01WU0RJTykJKz0gbXZzZGlvLm8KIG9iai0kKENPTkZJR19NTUNfU1BJKQkJKz0gbW1jX3NwaS5vCiBpZmVxICgkKENPTkZJR19PRikseSkKIG9iai0kKENPTkZJR19NTUNfU1BJKQkJKz0gb2ZfbW1jX3NwaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwppbmRleCBlOTRlOTIwLi5jZjZhMTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKQEAgLTgxMiw3ICs4MTIsNyBAQAogCQlzbG90LT5zZGNfcmVnIHw9IE1DSV9TRENCVVNfMUJJVDsKIAkJYnJlYWs7CiAJY2FzZSBNTUNfQlVTX1dJRFRIXzQ6Ci0JCXNsb3QtPnNkY19yZWcgPSBNQ0lfU0RDQlVTXzRCSVQ7CisJCXNsb3QtPnNkY19yZWcgfD0gTUNJX1NEQ0JVU180QklUOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jX3NwaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMKaW5kZXggODdlMjExZC4uNzJmOGJkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMKQEAgLTI3OSw4ICsyNzksMTEgQEAKIAkJICogc28gaXQgY2FuIGFsd2F5cyBETUEgZGlyZWN0bHkgaW50byB0aGUgdGFyZ2V0IGJ1ZmZlci4KIAkJICogSXQnZCBwcm9iYWJseSBiZSBiZXR0ZXIgdG8gbWVtY3B5KCkgdGhlIGZpcnN0IGNodW5rIGFuZAogCQkgKiBhdm9pZCBleHRyYSBpL28gY2FsbHMuLi4KKwkJICoKKwkJICogTm90ZSB3ZSBjaGVjayBmb3IgbW9yZSB0aGFuIDggYnl0ZXMsIGJlY2F1c2UgaW4gcHJhY3RpY2UsCisJCSAqIHNvbWUgU0QgY2FyZHMgYXJlIHNsb3cuLi4KIAkJICovCi0JCWZvciAoaSA9IDI7IGkgPCA5OyBpKyspIHsKKwkJZm9yIChpID0gMjsgaSA8IDE2OyBpKyspIHsKIAkJCXZhbHVlID0gbW1jX3NwaV9yZWFkYnl0ZXMoaG9zdCwgMSk7CiAJCQlpZiAodmFsdWUgPCAwKQogCQkJCWdvdG8gZG9uZTsKQEAgLTYwOSw2ICs2MTIsNyBAQAogCXN0cnVjdCBzcGlfZGV2aWNlCSpzcGkgPSBob3N0LT5zcGk7CiAJaW50CQkJc3RhdHVzLCBpOwogCXN0cnVjdCBzY3JhdGNoCQkqc2NyYXRjaCA9IGhvc3QtPmRhdGE7CisJdTMyCQkJcGF0dGVybjsKIAogCWlmIChob3N0LT5tbWMtPnVzZV9zcGlfY3JjKQogCQlzY3JhdGNoLT5jcmNfdmFsID0gY3B1X3RvX2JlMTYoCkBAIC02MzYsOCArNjQwLDI3IEBACiAJICogZG9lc24ndCBuZWNlc3NhcmlseSB0ZWxsIHdoZXRoZXIgdGhlIHdyaXRlIG9wZXJhdGlvbiBzdWNjZWVkZWQ7CiAJICogaXQganVzdCBzYXlzIGlmIHRoZSB0cmFuc21pc3Npb24gd2FzIG9rIGFuZCB3aGV0aGVyICplYXJsaWVyKgogCSAqIHdyaXRlcyBzdWNjZWVkZWQ7IHNlZSB0aGUgc3RhbmRhcmQuCisJICoKKwkgKiBJbiBwcmFjdGljZSwgdGhlcmUgYXJlIChldmVuIG1vZGVybiBTREhDLSljYXJkcyB3aGljaCBhcmUgbGF0ZQorCSAqIGluIHNlbmRpbmcgdGhlIHJlc3BvbnNlLCBhbmQgbWlzcyB0aGUgdGltZSBmcmFtZSBieSBhIGZldyBiaXRzLAorCSAqIHNvIHdlIGhhdmUgdG8gY29wZSB3aXRoIHRoaXMgc2l0dWF0aW9uIGFuZCBjaGVjayB0aGUgcmVzcG9uc2UKKwkgKiBiaXQtYnktYml0LiBBcmdnaCEhIQogCSAqLwotCXN3aXRjaCAoU1BJX01NQ19SRVNQT05TRV9DT0RFKHNjcmF0Y2gtPnN0YXR1c1swXSkpIHsKKwlwYXR0ZXJuICA9IHNjcmF0Y2gtPnN0YXR1c1swXSA8PCAyNDsKKwlwYXR0ZXJuIHw9IHNjcmF0Y2gtPnN0YXR1c1sxXSA8PCAxNjsKKwlwYXR0ZXJuIHw9IHNjcmF0Y2gtPnN0YXR1c1syXSA8PCA4OworCXBhdHRlcm4gfD0gc2NyYXRjaC0+c3RhdHVzWzNdOworCisJLyogRmlyc3QgMyBiaXQgb2YgcGF0dGVybiBhcmUgdW5kZWZpbmVkICovCisJcGF0dGVybiB8PSAweEUwMDAwMDAwOworCisJLyogbGVmdC1hZGp1c3QgdG8gbGVhZGluZyAwIGJpdCAqLworCXdoaWxlIChwYXR0ZXJuICYgMHg4MDAwMDAwMCkKKwkJcGF0dGVybiA8PD0gMTsKKwkvKiByaWdodC1hZGp1c3QgZm9yIHBhdHRlcm4gbWF0Y2hpbmcuIENvZGUgaXMgaW4gYml0IDQuLjAgbm93LiAqLworCXBhdHRlcm4gPj49IDI3OworCisJc3dpdGNoIChwYXR0ZXJuKSB7CiAJY2FzZSBTUElfUkVTUE9OU0VfQUNDRVBURUQ6CiAJCXN0YXR1cyA9IDA7CiAJCWJyZWFrOwpAQCAtNjY4LDggKzY5MSw5IEBACiAJLyogUmV0dXJuIHdoZW4gbm90IGJ1c3kuICBJZiB3ZSBkaWRuJ3QgY29sbGVjdCB0aGF0IHN0YXR1cyB5ZXQsCiAJICogd2UnbGwgbmVlZCBzb21lIG1vcmUgSS9PLgogCSAqLwotCWZvciAoaSA9IDE7IGkgPCBzaXplb2Yoc2NyYXRjaC0+c3RhdHVzKTsgaSsrKSB7Ci0JCWlmIChzY3JhdGNoLT5zdGF0dXNbaV0gIT0gMCkKKwlmb3IgKGkgPSA0OyBpIDwgc2l6ZW9mKHNjcmF0Y2gtPnN0YXR1cyk7IGkrKykgeworCQkvKiBjYXJkIGlzIG5vbi1idXN5IGlmIHRoZSBtb3N0IHJlY2VudCBiaXQgaXMgMSAqLworCQlpZiAoc2NyYXRjaC0+c3RhdHVzW2ldICYgMHgwMSkKIAkJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gbW1jX3NwaV93YWl0X3VuYnVzeShob3N0LCB0aW1lb3V0KTsKQEAgLTEyMDQsMTAgKzEyMjgsMTIgQEAKIAogCS8qIE1NQyBhbmQgU0Qgc3BlY3Mgb25seSBzZWVtIHRvIGNhcmUgdGhhdCBzYW1wbGluZyBpcyBvbiB0aGUKIAkgKiByaXNpbmcgZWRnZSAuLi4gbWVhbmluZyBTUEkgbW9kZXMgMCBvciAzLiAgU28gZWl0aGVyIFNQSSBtb2RlCi0JICogc2hvdWxkIGJlIGxlZ2l0LiAgV2UnbGwgdXNlIG1vZGUgMCBzaW5jZSBpdCBzZWVtcyB0byBiZSBhCi0JICogYml0IGxlc3MgdHJvdWJsZXNvbWUgb24gc29tZSBoYXJkd2FyZSAuLi4gdW5jbGVhciB3aHkuCisJICogc2hvdWxkIGJlIGxlZ2l0LiAgV2UnbGwgdXNlIG1vZGUgMCBzaW5jZSB0aGUgc3RlYWR5IHN0YXRlIGlzIDAsCisJICogd2hpY2ggaXMgYXBwcm9wcmlhdGUgZm9yIGhvdHBsdWdnaW5nLCB1bmxlc3MgdGhlIHBsYXRmb3JtIGRhdGEKKwkgKiBzcGVjaWZ5IG1vZGUgMyAoaWYgaGFyZHdhcmUgaXMgbm90IGNvbXBhdGlibGUgdG8gbW9kZSAwKS4KIAkgKi8KLQlzcGktPm1vZGUgPSBTUElfTU9ERV8wOworCWlmIChzcGktPm1vZGUgIT0gU1BJX01PREVfMykKKwkJc3BpLT5tb2RlID0gU1BJX01PREVfMDsKIAlzcGktPmJpdHNfcGVyX3dvcmQgPSA4OwogCiAJc3RhdHVzID0gc3BpX3NldHVwKHNwaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L212c2Rpby5jIGIvZHJpdmVycy9tbWMvaG9zdC9tdnNkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWMzNzVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tdnNkaW8uYwpAQCAtMCwwICsxLDg4NSBAQAorLyoKKyAqIE1hcnZlbGwgTU1DL1NEL1NESU8gZHJpdmVyCisgKgorICogQXV0aG9yczogTWFlbiBTdWxlaW1hbiwgTmljb2xhcyBQaXRyZQorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTWFydmVsbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPHBsYXQvbXZzZGlvLmg+CisKKyNpbmNsdWRlICJtdnNkaW8uaCIKKworI2RlZmluZSBEUklWRVJfTkFNRQkibXZzZGlvIgorCitzdGF0aWMgaW50IG1heGZyZXEgPSBNVlNEX0NMT0NLUkFURV9NQVg7CitzdGF0aWMgaW50IG5vZG1hOworCitzdHJ1Y3QgbXZzZF9ob3N0IHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IG1tY19yZXF1ZXN0ICptcnE7CisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGludCB4ZmVyX21vZGU7CisJdW5zaWduZWQgaW50IGludHJfZW47CisJdW5zaWduZWQgaW50IGN0cmw7CisJdW5zaWduZWQgaW50IHBpb19zaXplOworCXZvaWQgKnBpb19wdHI7CisJdW5zaWduZWQgaW50IHNnX2ZyYWdzOworCXVuc2lnbmVkIGludCBuc19wZXJfY2xrOworCXVuc2lnbmVkIGludCBjbG9jazsKKwl1bnNpZ25lZCBpbnQgYmFzZV9jbG9jazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycTsKKwlpbnQgZ3Bpb19jYXJkX2RldGVjdDsKKwlpbnQgZ3Bpb193cml0ZV9wcm90ZWN0OworfTsKKworI2RlZmluZSBtdnNkX3dyaXRlKG9mZnMsIHZhbCkJd3JpdGVsKHZhbCwgaW9iYXNlICsgKG9mZnMpKQorI2RlZmluZSBtdnNkX3JlYWQob2ZmcykJCXJlYWRsKGlvYmFzZSArIChvZmZzKSkKKworc3RhdGljIGludCBtdnNkX3NldHVwX2RhdGEoc3RydWN0IG12c2RfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCXZvaWQgX19pb21lbSAqaW9iYXNlID0gaG9zdC0+YmFzZTsKKwl1bnNpZ25lZCBpbnQgdG1vdXQ7CisJaW50IHRtb3V0X2luZGV4OworCisJLyogSWYgdGltZW91dD0wIHRoZW4gbWF4aW11bSB0aW1lb3V0IGluZGV4IGlzIHVzZWQuICovCisJdG1vdXQgPSBESVZfUk9VTkRfVVAoZGF0YS0+dGltZW91dF9ucywgaG9zdC0+bnNfcGVyX2Nsayk7CisJdG1vdXQgKz0gZGF0YS0+dGltZW91dF9jbGtzOworCXRtb3V0X2luZGV4ID0gZmxzKHRtb3V0IC0gMSkgLSAxMjsKKwlpZiAodG1vdXRfaW5kZXggPCAwKQorCQl0bW91dF9pbmRleCA9IDA7CisJaWYgKHRtb3V0X2luZGV4ID4gTVZTRF9IT1NUX0NUUkxfVE1PVVRfTUFYKQorCQl0bW91dF9pbmRleCA9IE1WU0RfSE9TVF9DVFJMX1RNT1VUX01BWDsKKworCWRldl9kYmcoaG9zdC0+ZGV2LCAiZGF0YSAlcyBhdCAweCUwOHg6IGJsb2Nrcz0lZCBibGtzej0lZCB0bW91dD0ldSAoJWQpXG4iLAorCQkoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSA/ICJyZWFkIiA6ICJ3cml0ZSIsCisJCSh1MzIpc2dfdmlydChkYXRhLT5zZyksIGRhdGEtPmJsb2NrcywgZGF0YS0+Ymxrc3osCisJCXRtb3V0LCB0bW91dF9pbmRleCk7CisKKwlob3N0LT5jdHJsICY9IH5NVlNEX0hPU1RfQ1RSTF9UTU9VVF9NQVNLOworCWhvc3QtPmN0cmwgfD0gTVZTRF9IT1NUX0NUUkxfVE1PVVQodG1vdXRfaW5kZXgpOworCW12c2Rfd3JpdGUoTVZTRF9IT1NUX0NUUkwsIGhvc3QtPmN0cmwpOworCW12c2Rfd3JpdGUoTVZTRF9CTEtfQ09VTlQsIGRhdGEtPmJsb2Nrcyk7CisJbXZzZF93cml0ZShNVlNEX0JMS19TSVpFLCBkYXRhLT5ibGtzeik7CisKKwlpZiAobm9kbWEgfHwgKGRhdGEtPmJsa3N6IHwgZGF0YS0+c2ctPm9mZnNldCkgJiAzKSB7CisJCS8qCisJCSAqIFdlIGNhbm5vdCBkbyBETUEgb24gYSBidWZmZXIgd2hpY2ggb2Zmc2V0IG9yIHNpemUKKwkJICogaXMgbm90IGFsaWduZWQgb24gYSA0LWJ5dGUgYm91bmRhcnkuCisJCSAqLworCQlob3N0LT5waW9fc2l6ZSA9IGRhdGEtPmJsb2NrcyAqIGRhdGEtPmJsa3N6OworCQlob3N0LT5waW9fcHRyID0gc2dfdmlydChkYXRhLT5zZyk7CisJCWlmICghbm9kbWEpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhbGxiYWNrIHRvIFBJTyBmb3IgZGF0YSAiCisJCQkJCSAgImF0IDB4JXAgc2l6ZSAlZFxuIiwKKwkJCQkJICBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwKKwkJCQkJICBob3N0LT5waW9fcHRyLCBob3N0LT5waW9fc2l6ZSk7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCWRtYV9hZGRyX3QgcGh5c19hZGRyOworCQlpbnQgZG1hX2RpciA9IChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpID8KKwkJCURNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0U7CisJCWhvc3QtPnNnX2ZyYWdzID0gZG1hX21hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLAorCQkJCQkgICAgZGF0YS0+c2dfbGVuLCBkbWFfZGlyKTsKKwkJcGh5c19hZGRyID0gc2dfZG1hX2FkZHJlc3MoZGF0YS0+c2cpOworCQltdnNkX3dyaXRlKE1WU0RfU1lTX0FERFJfTE9XLCAodTMyKXBoeXNfYWRkciAmIDB4ZmZmZik7CisJCW12c2Rfd3JpdGUoTVZTRF9TWVNfQUREUl9ISSwgICh1MzIpcGh5c19hZGRyID4+IDE2KTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBtdnNkX3JlcXVlc3Qoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQoreworCXN0cnVjdCBtdnNkX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXZvaWQgX19pb21lbSAqaW9iYXNlID0gaG9zdC0+YmFzZTsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IG1ycS0+Y21kOworCXUzMiBjbWRyZWcgPSAwLCB4ZmVyID0gMCwgaW50ciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUJVR19PTihob3N0LT5tcnEgIT0gTlVMTCk7CisJaG9zdC0+bXJxID0gbXJxOworCisJZGV2X2RiZyhob3N0LT5kZXYsICJjbWQgJWQgKGh3IHN0YXRlIDB4JTA0eClcbiIsCisJCWNtZC0+b3Bjb2RlLCBtdnNkX3JlYWQoTVZTRF9IV19TVEFURSkpOworCisJY21kcmVnID0gTVZTRF9DTURfSU5ERVgoY21kLT5vcGNvZGUpOworCisJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX0JVU1kpCisJCWNtZHJlZyB8PSBNVlNEX0NNRF9SU1BfNDhCVVNZOworCWVsc2UgaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQXzEzNikKKwkJY21kcmVnIHw9IE1WU0RfQ01EX1JTUF8xMzY7CisJZWxzZSBpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkKKwkJY21kcmVnIHw9IE1WU0RfQ01EX1JTUF80ODsKKwllbHNlCisJCWNtZHJlZyB8PSBNVlNEX0NNRF9SU1BfTk9ORTsKKworCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9DUkMpCisJCWNtZHJlZyB8PSBNVlNEX0NNRF9DSEVDS19DTURDUkM7CisKKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfT1BDT0RFKQorCQljbWRyZWcgfD0gTVZTRF9DTURfSU5EWF9DSEVDSzsKKworCWlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9QUkVTRU5UKSB7CisJCWNtZHJlZyB8PSBNVlNEX1VORVhQRUNURURfUkVTUDsKKwkJaW50ciB8PSBNVlNEX05PUl9VTkVYUF9SU1A7CisJfQorCisJaWYgKG1ycS0+ZGF0YSkgeworCQlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBtcnEtPmRhdGE7CisJCWludCBwaW87CisKKwkJY21kcmVnIHw9IE1WU0RfQ01EX0RBVEFfUFJFU0VOVCB8IE1WU0RfQ01EX0NIRUNLX0RBVEFDUkMxNjsKKwkJeGZlciB8PSBNVlNEX1hGRVJfTU9ERV9IV19XUl9EQVRBX0VOOworCQlpZiAoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKQorCQkJeGZlciB8PSBNVlNEX1hGRVJfTU9ERV9UT19IT1NUOworCisJCXBpbyA9IG12c2Rfc2V0dXBfZGF0YShob3N0LCBkYXRhKTsKKwkJaWYgKHBpbykgeworCQkJeGZlciB8PSBNVlNEX1hGRVJfTU9ERV9QSU87CisJCQkvKiBQSU8gc2VjdGlvbiBvZiBtdnNkX2lycSBoYXMgY29tbWVudHMgb24gdGhvc2UgYml0cyAqLworCQkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCisJCQkJaW50ciB8PSBNVlNEX05PUl9UWF9BVkFJTDsKKwkJCWVsc2UgaWYgKGhvc3QtPnBpb19zaXplID4gMzIpCisJCQkJaW50ciB8PSBNVlNEX05PUl9SWF9GSUZPXzhXOworCQkJZWxzZQorCQkJCWludHIgfD0gTVZTRF9OT1JfUlhfUkVBRFk7CisJCX0KKworCQlpZiAoZGF0YS0+c3RvcCkgeworCQkJc3RydWN0IG1tY19jb21tYW5kICpzdG9wID0gZGF0YS0+c3RvcDsKKwkJCXUzMiBjbWQxMnJlZyA9IDA7CisKKwkJCW12c2Rfd3JpdGUoTVZTRF9BVVRPQ01EMTJfQVJHX0xPVywgc3RvcC0+YXJnICYgMHhmZmZmKTsKKwkJCW12c2Rfd3JpdGUoTVZTRF9BVVRPQ01EMTJfQVJHX0hJLCAgc3RvcC0+YXJnID4+IDE2KTsKKworCQkJaWYgKHN0b3AtPmZsYWdzICYgTU1DX1JTUF9CVVNZKQorCQkJCWNtZDEycmVnIHw9IE1WU0RfQVVUT0NNRDEyX0JVU1k7CisJCQlpZiAoc3RvcC0+ZmxhZ3MgJiBNTUNfUlNQX09QQ09ERSkKKwkJCQljbWQxMnJlZyB8PSBNVlNEX0FVVE9DTUQxMl9JTkRYX0NIRUNLOworCQkJY21kMTJyZWcgfD0gTVZTRF9BVVRPQ01EMTJfSU5ERVgoc3RvcC0+b3Bjb2RlKTsKKwkJCW12c2Rfd3JpdGUoTVZTRF9BVVRPQ01EMTJfQ01ELCBjbWQxMnJlZyk7CisKKwkJCXhmZXIgfD0gTVZTRF9YRkVSX01PREVfQVVUT19DTUQxMjsKKwkJCWludHIgfD0gTVZTRF9OT1JfQVVUT0NNRDEyX0RPTkU7CisJCX0gZWxzZSB7CisJCQlpbnRyIHw9IE1WU0RfTk9SX1hGRVJfRE9ORTsKKwkJfQorCX0gZWxzZSB7CisJCWludHIgfD0gTVZTRF9OT1JfQ01EX0RPTkU7CisJfQorCisJbXZzZF93cml0ZShNVlNEX0FSR19MT1csIGNtZC0+YXJnICYgMHhmZmZmKTsKKwltdnNkX3dyaXRlKE1WU0RfQVJHX0hJLCAgY21kLT5hcmcgPj4gMTYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCWhvc3QtPnhmZXJfbW9kZSAmPSBNVlNEX1hGRVJfTU9ERV9JTlRfQ0hLX0VOOworCWhvc3QtPnhmZXJfbW9kZSB8PSB4ZmVyOworCW12c2Rfd3JpdGUoTVZTRF9YRkVSX01PREUsIGhvc3QtPnhmZXJfbW9kZSk7CisKKwltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfU1RBVFVTLCB+TVZTRF9OT1JfQ0FSRF9JTlQpOworCW12c2Rfd3JpdGUoTVZTRF9FUlJfSU5UUl9TVEFUVVMsIDB4ZmZmZik7CisJbXZzZF93cml0ZShNVlNEX0NNRCwgY21kcmVnKTsKKworCWhvc3QtPmludHJfZW4gJj0gTVZTRF9OT1JfQ0FSRF9JTlQ7CisJaG9zdC0+aW50cl9lbiB8PSBpbnRyIHwgTVZTRF9OT1JfRVJST1I7CisJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX0VOLCBob3N0LT5pbnRyX2VuKTsKKwltdnNkX3dyaXRlKE1WU0RfRVJSX0lOVFJfRU4sIDB4ZmZmZik7CisKKwltb2RfdGltZXIoJmhvc3QtPnRpbWVyLCBqaWZmaWVzICsgNSAqIEhaKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHUzMiBtdnNkX2ZpbmlzaF9jbWQoc3RydWN0IG12c2RfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQsCisJCQkgICB1MzIgZXJyX3N0YXR1cykKK3sKKwl2b2lkIF9faW9tZW0gKmlvYmFzZSA9IGhvc3QtPmJhc2U7CisKKwlpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfMTM2KSB7CisJCXVuc2lnbmVkIGludCByZXNwb25zZVs4XSwgaTsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCXJlc3BvbnNlW2ldID0gbXZzZF9yZWFkKE1WU0RfUlNQKGkpKTsKKwkJY21kLT5yZXNwWzBdID0JCSgocmVzcG9uc2VbMF0gJiAweDAzZmYpIDw8IDIyKSB8CisJCQkJCSgocmVzcG9uc2VbMV0gJiAweGZmZmYpIDw8IDYpIHwKKwkJCQkJKChyZXNwb25zZVsyXSAmIDB4ZmMwMCkgPj4gMTApOworCQljbWQtPnJlc3BbMV0gPQkJKChyZXNwb25zZVsyXSAmIDB4MDNmZikgPDwgMjIpIHwKKwkJCQkJKChyZXNwb25zZVszXSAmIDB4ZmZmZikgPDwgNikgfAorCQkJCQkoKHJlc3BvbnNlWzRdICYgMHhmYzAwKSA+PiAxMCk7CisJCWNtZC0+cmVzcFsyXSA9CQkoKHJlc3BvbnNlWzRdICYgMHgwM2ZmKSA8PCAyMikgfAorCQkJCQkoKHJlc3BvbnNlWzVdICYgMHhmZmZmKSA8PCA2KSB8CisJCQkJCSgocmVzcG9uc2VbNl0gJiAweGZjMDApID4+IDEwKTsKKwkJY21kLT5yZXNwWzNdID0JCSgocmVzcG9uc2VbNl0gJiAweDAzZmYpIDw8IDIyKSB8CisJCQkJCSgocmVzcG9uc2VbN10gJiAweDNmZmYpIDw8IDgpOworCX0gZWxzZSBpZiAoY21kLT5mbGFncyAmIE1NQ19SU1BfUFJFU0VOVCkgeworCQl1bnNpZ25lZCBpbnQgcmVzcG9uc2VbM10sIGk7CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCQlyZXNwb25zZVtpXSA9IG12c2RfcmVhZChNVlNEX1JTUChpKSk7CisJCWNtZC0+cmVzcFswXSA9CQkoKHJlc3BvbnNlWzJdICYgMHgwMDNmKSA8PCAoOCAtIDgpKSB8CisJCQkJCSgocmVzcG9uc2VbMV0gJiAweGZmZmYpIDw8ICgxNCAtIDgpKSB8CisJCQkJCSgocmVzcG9uc2VbMF0gJiAweDAzZmYpIDw8ICgzMCAtIDgpKTsKKwkJY21kLT5yZXNwWzFdID0JCSgocmVzcG9uc2VbMF0gJiAweGZjMDApID4+IDEwKTsKKwkJY21kLT5yZXNwWzJdID0gMDsKKwkJY21kLT5yZXNwWzNdID0gMDsKKwl9CisKKwlpZiAoZXJyX3N0YXR1cyAmIE1WU0RfRVJSX0NNRF9USU1FT1VUKSB7CisJCWNtZC0+ZXJyb3IgPSAtRVRJTUVET1VUOworCX0gZWxzZSBpZiAoZXJyX3N0YXR1cyAmIChNVlNEX0VSUl9DTURfQ1JDIHwgTVZTRF9FUlJfQ01EX0VOREJJVCB8CisJCQkJIE1WU0RfRVJSX0NNRF9JTkRFWCB8IE1WU0RfRVJSX0NNRF9TVEFSVEJJVCkpIHsKKwkJY21kLT5lcnJvciA9IC1FSUxTRVE7CisJfQorCWVycl9zdGF0dXMgJj0gfihNVlNEX0VSUl9DTURfVElNRU9VVCB8IE1WU0RfRVJSX0NNRF9DUkMgfAorCQkJTVZTRF9FUlJfQ01EX0VOREJJVCB8IE1WU0RfRVJSX0NNRF9JTkRFWCB8CisJCQlNVlNEX0VSUl9DTURfU1RBUlRCSVQpOworCisJcmV0dXJuIGVycl9zdGF0dXM7Cit9CisKK3N0YXRpYyB1MzIgbXZzZF9maW5pc2hfZGF0YShzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEsCisJCQkgICAgdTMyIGVycl9zdGF0dXMpCit7CisJdm9pZCBfX2lvbWVtICppb2Jhc2UgPSBob3N0LT5iYXNlOworCisJaWYgKGhvc3QtPnBpb19wdHIpIHsKKwkJaG9zdC0+cGlvX3B0ciA9IE5VTEw7CisJCWhvc3QtPnBpb19zaXplID0gMDsKKwl9IGVsc2UgeworCQlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywgaG9zdC0+c2dfZnJhZ3MsCisJCQkgICAgIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpID8KKwkJCQlETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKKwl9CisKKwlpZiAoZXJyX3N0YXR1cyAmIE1WU0RfRVJSX0RBVEFfVElNRU9VVCkKKwkJZGF0YS0+ZXJyb3IgPSAtRVRJTUVET1VUOworCWVsc2UgaWYgKGVycl9zdGF0dXMgJiAoTVZTRF9FUlJfREFUQV9DUkMgfCBNVlNEX0VSUl9EQVRBX0VOREJJVCkpCisJCWRhdGEtPmVycm9yID0gLUVJTFNFUTsKKwllbHNlIGlmIChlcnJfc3RhdHVzICYgTVZTRF9FUlJfWEZFUl9TSVpFKQorCQlkYXRhLT5lcnJvciA9IC1FQkFERTsKKwllcnJfc3RhdHVzICY9IH4oTVZTRF9FUlJfREFUQV9USU1FT1VUIHwgTVZTRF9FUlJfREFUQV9DUkMgfAorCQkJTVZTRF9FUlJfREFUQV9FTkRCSVQgfCBNVlNEX0VSUl9YRkVSX1NJWkUpOworCisJZGV2X2RiZyhob3N0LT5kZXYsICJkYXRhIGRvbmU6IGJsb2Nrc19sZWZ0PSVkLCBieXRlc19sZWZ0PSVkXG4iLAorCQltdnNkX3JlYWQoTVZTRF9DVVJSX0JMS19MRUZUKSwgbXZzZF9yZWFkKE1WU0RfQ1VSUl9CWVRFX0xFRlQpKTsKKwlkYXRhLT5ieXRlc194ZmVyZWQgPQorCQkoZGF0YS0+YmxvY2tzIC0gbXZzZF9yZWFkKE1WU0RfQ1VSUl9CTEtfTEVGVCkpICogZGF0YS0+Ymxrc3o7CisJLyogV2UgY2FuJ3QgYmUgc3VyZSBhYm91dCB0aGUgbGFzdCBibG9jayB3aGVuIGVycm9ycyBhcmUgZGV0ZWN0ZWQgKi8KKwlpZiAoZGF0YS0+Ynl0ZXNfeGZlcmVkICYmIGRhdGEtPmVycm9yKQorCQlkYXRhLT5ieXRlc194ZmVyZWQgLT0gZGF0YS0+Ymxrc3o7CisKKwkvKiBIYW5kbGUgQXV0byBjbWQgMTIgcmVzcG9uc2UgKi8KKwlpZiAoZGF0YS0+c3RvcCkgeworCQl1bnNpZ25lZCBpbnQgcmVzcG9uc2VbM10sIGk7CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCQlyZXNwb25zZVtpXSA9IG12c2RfcmVhZChNVlNEX0FVVE9fUlNQKGkpKTsKKwkJZGF0YS0+c3RvcC0+cmVzcFswXSA9CSgocmVzcG9uc2VbMl0gJiAweDAwM2YpIDw8ICg4IC0gOCkpIHwKKwkJCQkJKChyZXNwb25zZVsxXSAmIDB4ZmZmZikgPDwgKDE0IC0gOCkpIHwKKwkJCQkJKChyZXNwb25zZVswXSAmIDB4MDNmZikgPDwgKDMwIC0gOCkpOworCQlkYXRhLT5zdG9wLT5yZXNwWzFdID0JKChyZXNwb25zZVswXSAmIDB4ZmMwMCkgPj4gMTApOworCQlkYXRhLT5zdG9wLT5yZXNwWzJdID0gMDsKKwkJZGF0YS0+c3RvcC0+cmVzcFszXSA9IDA7CisKKwkJaWYgKGVycl9zdGF0dXMgJiBNVlNEX0VSUl9BVVRPQ01EMTIpIHsKKwkJCXUzMiBlcnJfY21kMTIgPSBtdnNkX3JlYWQoTVZTRF9BVVRPQ01EMTJfRVJSX1NUQVRVUyk7CisJCQlkZXZfZGJnKGhvc3QtPmRldiwgImMxMmVyciAweCUwNHhcbiIsIGVycl9jbWQxMik7CisJCQlpZiAoZXJyX2NtZDEyICYgTVZTRF9BVVRPQ01EMTJfRVJSX05PVEVYRSkKKwkJCQlkYXRhLT5zdG9wLT5lcnJvciA9IC1FTk9FWEVDOworCQkJZWxzZSBpZiAoZXJyX2NtZDEyICYgTVZTRF9BVVRPQ01EMTJfRVJSX1RJTUVPVVQpCisJCQkJZGF0YS0+c3RvcC0+ZXJyb3IgPSAtRVRJTUVET1VUOworCQkJZWxzZSBpZiAoZXJyX2NtZDEyKQorCQkJCWRhdGEtPnN0b3AtPmVycm9yID0gLUVJTFNFUTsKKwkJCWVycl9zdGF0dXMgJj0gfk1WU0RfRVJSX0FVVE9DTUQxMjsKKwkJfQorCX0KKworCXJldHVybiBlcnJfc3RhdHVzOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXZzZF9pcnEoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBtdnNkX2hvc3QgKmhvc3QgPSBkZXY7CisJdm9pZCBfX2lvbWVtICppb2Jhc2UgPSBob3N0LT5iYXNlOworCXUzMiBpbnRyX3N0YXR1cywgaW50cl9kb25lX21hc2s7CisJaW50IGlycV9oYW5kbGVkID0gMDsKKworCWludHJfc3RhdHVzID0gbXZzZF9yZWFkKE1WU0RfTk9SX0lOVFJfU1RBVFVTKTsKKwlkZXZfZGJnKGhvc3QtPmRldiwgImludHIgMHglMDR4IGludHJfZW4gMHglMDR4IGh3X3N0YXRlIDB4JTA0eFxuIiwKKwkJaW50cl9zdGF0dXMsIG12c2RfcmVhZChNVlNEX05PUl9JTlRSX0VOKSwKKwkJbXZzZF9yZWFkKE1WU0RfSFdfU1RBVEUpKTsKKworCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7CisKKwkvKiBQSU8gaGFuZGxpbmcsIGlmIG5lZWRlZC4gTWVzc3kgYnVzaW5lc3MuLi4gKi8KKwlpZiAoaG9zdC0+cGlvX3NpemUgJiYKKwkgICAgKGludHJfc3RhdHVzICYgaG9zdC0+aW50cl9lbiAmCisJICAgICAoTVZTRF9OT1JfUlhfUkVBRFkgfCBNVlNEX05PUl9SWF9GSUZPXzhXKSkpIHsKKwkJdTE2ICpwID0gaG9zdC0+cGlvX3B0cjsKKwkJaW50IHMgPSBob3N0LT5waW9fc2l6ZTsKKwkJd2hpbGUgKHMgPj0gMzIgJiYgKGludHJfc3RhdHVzICYgTVZTRF9OT1JfUlhfRklGT184VykpIHsKKwkJCXJlYWRzdyhpb2Jhc2UgKyBNVlNEX0ZJRk8sIHAsIDE2KTsKKwkJCXAgKz0gMTY7CisJCQlzIC09IDMyOworCQkJaW50cl9zdGF0dXMgPSBtdnNkX3JlYWQoTVZTRF9OT1JfSU5UUl9TVEFUVVMpOworCQl9CisJCS8qCisJCSAqIE5vcm1hbGx5IHdlJ2QgdXNlIDwgMzIgaGVyZSwgYnV0IHRoZSBSWF9GSUZPXzhXIGJpdAorCQkgKiBkb2Vzbid0IGFwcGVhciB0byBhc3NlcnQgd2hlbiB0aGVyZSBpcyBleGFjdGx5IDMyIGJ5dGVzCisJCSAqICg4IHdvcmRzKSBsZWZ0IHRvIGZldGNoIGluIGEgdHJhbnNmZXIuCisJCSAqLworCQlpZiAocyA8PSAzMikgeworCQkJd2hpbGUgKHMgPj0gNCAmJiAoaW50cl9zdGF0dXMgJiBNVlNEX05PUl9SWF9SRUFEWSkpIHsKKwkJCQlwdXRfdW5hbGlnbmVkKG12c2RfcmVhZChNVlNEX0ZJRk8pLCBwKyspOworCQkJCXB1dF91bmFsaWduZWQobXZzZF9yZWFkKE1WU0RfRklGTyksIHArKyk7CisJCQkJcyAtPSA0OworCQkJCWludHJfc3RhdHVzID0gbXZzZF9yZWFkKE1WU0RfTk9SX0lOVFJfU1RBVFVTKTsKKwkJCX0KKwkJCWlmIChzICYmIHMgPCA0ICYmIChpbnRyX3N0YXR1cyAmIE1WU0RfTk9SX1JYX1JFQURZKSkgeworCQkJCXUxNiB2YWxbMl0gPSB7MCwgMH07CisJCQkJdmFsWzBdID0gbXZzZF9yZWFkKE1WU0RfRklGTyk7CisJCQkJdmFsWzFdID0gbXZzZF9yZWFkKE1WU0RfRklGTyk7CisJCQkJbWVtY3B5KHAsICZ2YWwsIHMpOworCQkJCXMgPSAwOworCQkJCWludHJfc3RhdHVzID0gbXZzZF9yZWFkKE1WU0RfTk9SX0lOVFJfU1RBVFVTKTsKKwkJCX0KKwkJCWlmIChzID09IDApIHsKKwkJCQlob3N0LT5pbnRyX2VuICY9CisJCQkJICAgICB+KE1WU0RfTk9SX1JYX1JFQURZIHwgTVZTRF9OT1JfUlhfRklGT184Vyk7CisJCQkJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX0VOLCBob3N0LT5pbnRyX2VuKTsKKwkJCX0gZWxzZSBpZiAoaG9zdC0+aW50cl9lbiAmIE1WU0RfTk9SX1JYX0ZJRk9fOFcpIHsKKwkJCQlob3N0LT5pbnRyX2VuICY9IH5NVlNEX05PUl9SWF9GSUZPXzhXOworCQkJCWhvc3QtPmludHJfZW4gfD0gTVZTRF9OT1JfUlhfUkVBRFk7CisJCQkJbXZzZF93cml0ZShNVlNEX05PUl9JTlRSX0VOLCBob3N0LT5pbnRyX2VuKTsKKwkJCX0KKwkJfQorCQlkZXZfZGJnKGhvc3QtPmRldiwgInBpbyAlZCBpbnRyIDB4JTA0eCBod19zdGF0ZSAweCUwNHhcbiIsCisJCQlzLCBpbnRyX3N0YXR1cywgbXZzZF9yZWFkKE1WU0RfSFdfU1RBVEUpKTsKKwkJaG9zdC0+cGlvX3B0ciA9IHA7CisJCWhvc3QtPnBpb19zaXplID0gczsKKwkJaXJxX2hhbmRsZWQgPSAxOworCX0gZWxzZSBpZiAoaG9zdC0+cGlvX3NpemUgJiYKKwkJICAgKGludHJfc3RhdHVzICYgaG9zdC0+aW50cl9lbiAmCisJCSAgICAoTVZTRF9OT1JfVFhfQVZBSUwgfCBNVlNEX05PUl9UWF9GSUZPXzhXKSkpIHsKKwkJdTE2ICpwID0gaG9zdC0+cGlvX3B0cjsKKwkJaW50IHMgPSBob3N0LT5waW9fc2l6ZTsKKwkJLyoKKwkJICogVGhlIFRYX0ZJRk9fOFcgYml0IGlzIHVucmVsaWFibGUuIFdoZW4gc2V0LCBidXJzdGluZworCQkgKiAxNiBoYWxmd29yZHMgYWxsIGF0IG9uY2UgaW4gdGhlIEZJRk8gZHJvcHMgZGF0YS4gQWN0dWFsbHkKKwkJICogVFhfQVZBSUwgZG9lcyBnbyBvZmYgYWZ0ZXIgb25seSBvbmUgd29yZCBpcyBwdXNoZWQgZXZlbiBpZgorCQkgKiBUWF9GSUZPXzhXIHJlbWFpbnMgc2V0LgorCQkgKi8KKwkJd2hpbGUgKHMgPj0gNCAmJiAoaW50cl9zdGF0dXMgJiBNVlNEX05PUl9UWF9BVkFJTCkpIHsKKwkJCW12c2Rfd3JpdGUoTVZTRF9GSUZPLCBnZXRfdW5hbGlnbmVkKHArKykpOworCQkJbXZzZF93cml0ZShNVlNEX0ZJRk8sIGdldF91bmFsaWduZWQocCsrKSk7CisJCQlzIC09IDQ7CisJCQlpbnRyX3N0YXR1cyA9IG12c2RfcmVhZChNVlNEX05PUl9JTlRSX1NUQVRVUyk7CisJCX0KKwkJaWYgKHMgPCA0KSB7CisJCQlpZiAocyAmJiAoaW50cl9zdGF0dXMgJiBNVlNEX05PUl9UWF9BVkFJTCkpIHsKKwkJCQl1MTYgdmFsWzJdID0gezAsIDB9OworCQkJCW1lbWNweSgmdmFsLCBwLCBzKTsKKwkJCQltdnNkX3dyaXRlKE1WU0RfRklGTywgdmFsWzBdKTsKKwkJCQltdnNkX3dyaXRlKE1WU0RfRklGTywgdmFsWzFdKTsKKwkJCQlzID0gMDsKKwkJCQlpbnRyX3N0YXR1cyA9IG12c2RfcmVhZChNVlNEX05PUl9JTlRSX1NUQVRVUyk7CisJCQl9CisJCQlpZiAocyA9PSAwKSB7CisJCQkJaG9zdC0+aW50cl9lbiAmPQorCQkJCSAgICAgfihNVlNEX05PUl9UWF9BVkFJTCB8IE1WU0RfTk9SX1RYX0ZJRk9fOFcpOworCQkJCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9FTiwgaG9zdC0+aW50cl9lbik7CisJCQl9CisJCX0KKwkJZGV2X2RiZyhob3N0LT5kZXYsICJwaW8gJWQgaW50ciAweCUwNHggaHdfc3RhdGUgMHglMDR4XG4iLAorCQkJcywgaW50cl9zdGF0dXMsIG12c2RfcmVhZChNVlNEX0hXX1NUQVRFKSk7CisJCWhvc3QtPnBpb19wdHIgPSBwOworCQlob3N0LT5waW9fc2l6ZSA9IHM7CisJCWlycV9oYW5kbGVkID0gMTsKKwl9CisKKwltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfU1RBVFVTLCBpbnRyX3N0YXR1cyk7CisKKwlpbnRyX2RvbmVfbWFzayA9IE1WU0RfTk9SX0NBUkRfSU5UIHwgTVZTRF9OT1JfUlhfUkVBRFkgfAorCQkJIE1WU0RfTk9SX1JYX0ZJRk9fOFcgfCBNVlNEX05PUl9UWF9GSUZPXzhXOworCWlmIChpbnRyX3N0YXR1cyAmIGhvc3QtPmludHJfZW4gJiB+aW50cl9kb25lX21hc2spIHsKKwkJc3RydWN0IG1tY19yZXF1ZXN0ICptcnEgPSBob3N0LT5tcnE7CisJCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kID0gbXJxLT5jbWQ7CisJCXUzMiBlcnJfc3RhdHVzID0gMDsKKworCQlkZWxfdGltZXIoJmhvc3QtPnRpbWVyKTsKKwkJaG9zdC0+bXJxID0gTlVMTDsKKworCQlob3N0LT5pbnRyX2VuICY9IE1WU0RfTk9SX0NBUkRfSU5UOworCQltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfRU4sIGhvc3QtPmludHJfZW4pOworCQltdnNkX3dyaXRlKE1WU0RfRVJSX0lOVFJfRU4sIDApOworCisJCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKKworCQlpZiAoaW50cl9zdGF0dXMgJiBNVlNEX05PUl9VTkVYUF9SU1ApIHsKKwkJCWNtZC0+ZXJyb3IgPSAtRVBST1RPOworCQl9IGVsc2UgaWYgKGludHJfc3RhdHVzICYgTVZTRF9OT1JfRVJST1IpIHsKKwkJCWVycl9zdGF0dXMgPSBtdnNkX3JlYWQoTVZTRF9FUlJfSU5UUl9TVEFUVVMpOworCQkJZGV2X2RiZyhob3N0LT5kZXYsICJlcnIgMHglMDR4XG4iLCBlcnJfc3RhdHVzKTsKKwkJfQorCisJCWVycl9zdGF0dXMgPSBtdnNkX2ZpbmlzaF9jbWQoaG9zdCwgY21kLCBlcnJfc3RhdHVzKTsKKwkJaWYgKG1ycS0+ZGF0YSkKKwkJCWVycl9zdGF0dXMgPSBtdnNkX2ZpbmlzaF9kYXRhKGhvc3QsIG1ycS0+ZGF0YSwgZXJyX3N0YXR1cyk7CisJCWlmIChlcnJfc3RhdHVzKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmhhbmRsZWQgZXJyb3Igc3RhdHVzICUjMDR4XG4iLAorCQkJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgZXJyX3N0YXR1cyk7CisJCQljbWQtPmVycm9yID0gLUVOT01TRzsKKwkJfQorCisJCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBtcnEpOworCQlpcnFfaGFuZGxlZCA9IDE7CisJfSBlbHNlCisJCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKKworCWlmIChpbnRyX3N0YXR1cyAmIE1WU0RfTk9SX0NBUkRfSU5UKSB7CisJCW1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC0+bW1jKTsKKwkJaXJxX2hhbmRsZWQgPSAxOworCX0KKworCWlmIChpcnFfaGFuZGxlZCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJcHJpbnRrKEtFUk5fRVJSICIlczogdW5oYW5kbGVkIGludGVycnVwdCBzdGF0dXM9MHglMDR4IGVuPTB4JTA0eCAiCisJCQkicGlvPSVkXG4iLCBtbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSwgaW50cl9zdGF0dXMsCisJCQlob3N0LT5pbnRyX2VuLCBob3N0LT5waW9fc2l6ZSk7CisJcmV0dXJuIElSUV9OT05FOworfQorCitzdGF0aWMgdm9pZCBtdnNkX3RpbWVvdXRfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBtdnNkX2hvc3QgKmhvc3QgPSAoc3RydWN0IG12c2RfaG9zdCAqKWRhdGE7CisJdm9pZCBfX2lvbWVtICppb2Jhc2UgPSBob3N0LT5iYXNlOworCXN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCW1ycSA9IGhvc3QtPm1ycTsKKwlpZiAobXJxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFRpbWVvdXQgd2FpdGluZyBmb3IgaGFyZHdhcmUgaW50ZXJydXB0LlxuIiwKKwkJCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGh3X3N0YXRlPTB4JTA0eCwgaW50cl9zdGF0dXM9MHglMDR4ICIKKwkJCQkiaW50cl9lbj0weCUwNHhcbiIsIG1tY19ob3N0bmFtZShob3N0LT5tbWMpLAorCQkJCW12c2RfcmVhZChNVlNEX0hXX1NUQVRFKSwKKwkJCQltdnNkX3JlYWQoTVZTRF9OT1JfSU5UUl9TVEFUVVMpLAorCQkJCW12c2RfcmVhZChNVlNEX05PUl9JTlRSX0VOKSk7CisKKwkJaG9zdC0+bXJxID0gTlVMTDsKKworCQltdnNkX3dyaXRlKE1WU0RfU1dfUkVTRVQsIE1WU0RfU1dfUkVTRVRfTk9XKTsKKworCQlob3N0LT54ZmVyX21vZGUgJj0gTVZTRF9YRkVSX01PREVfSU5UX0NIS19FTjsKKwkJbXZzZF93cml0ZShNVlNEX1hGRVJfTU9ERSwgaG9zdC0+eGZlcl9tb2RlKTsKKworCQlob3N0LT5pbnRyX2VuICY9IE1WU0RfTk9SX0NBUkRfSU5UOworCQltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfRU4sIGhvc3QtPmludHJfZW4pOworCQltdnNkX3dyaXRlKE1WU0RfRVJSX0lOVFJfRU4sIDApOworCQltdnNkX3dyaXRlKE1WU0RfRVJSX0lOVFJfU1RBVFVTLCAweGZmZmYpOworCisJCW1ycS0+Y21kLT5lcnJvciA9IC1FVElNRURPVVQ7CisJCW12c2RfZmluaXNoX2NtZChob3N0LCBtcnEtPmNtZCwgMCk7CisJCWlmIChtcnEtPmRhdGEpIHsKKwkJCW1ycS0+ZGF0YS0+ZXJyb3IgPSAtRVRJTUVET1VUOworCQkJbXZzZF9maW5pc2hfZGF0YShob3N0LCBtcnEtPmRhdGEsIDApOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKKworCWlmIChtcnEpCisJCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBtcnEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbXZzZF9jYXJkX2RldGVjdF9pcnEoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBtdnNkX2hvc3QgKmhvc3QgPSBkZXY7CisJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdC0+bW1jLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbXZzZF9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpCit7CisJc3RydWN0IG12c2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisJdm9pZCBfX2lvbWVtICppb2Jhc2UgPSBob3N0LT5iYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOworCWlmIChlbmFibGUpIHsKKwkJaG9zdC0+eGZlcl9tb2RlIHw9IE1WU0RfWEZFUl9NT0RFX0lOVF9DSEtfRU47CisJCWhvc3QtPmludHJfZW4gfD0gTVZTRF9OT1JfQ0FSRF9JTlQ7CisJfSBlbHNlIHsKKwkJaG9zdC0+eGZlcl9tb2RlICY9IH5NVlNEX1hGRVJfTU9ERV9JTlRfQ0hLX0VOOworCQlob3N0LT5pbnRyX2VuICY9IH5NVlNEX05PUl9DQVJEX0lOVDsKKwl9CisJbXZzZF93cml0ZShNVlNEX1hGRVJfTU9ERSwgaG9zdC0+eGZlcl9tb2RlKTsKKwltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfRU4sIGhvc3QtPmludHJfZW4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBtdnNkX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKK3sKKwlzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKworCWlmIChob3N0LT5ncGlvX3dyaXRlX3Byb3RlY3QpCisJCXJldHVybiBncGlvX2dldF92YWx1ZShob3N0LT5ncGlvX3dyaXRlX3Byb3RlY3QpOworCisJLyoKKwkgKiBCb2FyZCBkb2Vzbid0IHN1cHBvcnQgcmVhZCBvbmx5IGRldGVjdGlvbjsgbGV0IHRoZSBtbWMgY29yZQorCSAqIGRlY2lkZSB3aGF0IHRvIGRvLgorCSAqLworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgdm9pZCBtdnNkX3Bvd2VyX3VwKHN0cnVjdCBtdnNkX2hvc3QgKmhvc3QpCit7CisJdm9pZCBfX2lvbWVtICppb2Jhc2UgPSBob3N0LT5iYXNlOworCWRldl9kYmcoaG9zdC0+ZGV2LCAicG93ZXIgdXBcbiIpOworCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9FTiwgMCk7CisJbXZzZF93cml0ZShNVlNEX0VSUl9JTlRSX0VOLCAwKTsKKwltdnNkX3dyaXRlKE1WU0RfU1dfUkVTRVQsIE1WU0RfU1dfUkVTRVRfTk9XKTsKKwltdnNkX3dyaXRlKE1WU0RfWEZFUl9NT0RFLCAwKTsKKwltdnNkX3dyaXRlKE1WU0RfTk9SX1NUQVRVU19FTiwgMHhmZmZmKTsKKwltdnNkX3dyaXRlKE1WU0RfRVJSX1NUQVRVU19FTiwgMHhmZmZmKTsKKwltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfU1RBVFVTLCAweGZmZmYpOworCW12c2Rfd3JpdGUoTVZTRF9FUlJfSU5UUl9TVEFUVVMsIDB4ZmZmZik7Cit9CisKK3N0YXRpYyB2b2lkIG12c2RfcG93ZXJfZG93bihzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0KQoreworCXZvaWQgX19pb21lbSAqaW9iYXNlID0gaG9zdC0+YmFzZTsKKwlkZXZfZGJnKGhvc3QtPmRldiwgInBvd2VyIGRvd25cbiIpOworCW12c2Rfd3JpdGUoTVZTRF9OT1JfSU5UUl9FTiwgMCk7CisJbXZzZF93cml0ZShNVlNEX0VSUl9JTlRSX0VOLCAwKTsKKwltdnNkX3dyaXRlKE1WU0RfU1dfUkVTRVQsIE1WU0RfU1dfUkVTRVRfTk9XKTsKKwltdnNkX3dyaXRlKE1WU0RfWEZFUl9NT0RFLCBNVlNEX1hGRVJfTU9ERV9TVE9QX0NMSyk7CisJbXZzZF93cml0ZShNVlNEX05PUl9TVEFUVVNfRU4sIDApOworCW12c2Rfd3JpdGUoTVZTRF9FUlJfU1RBVFVTX0VOLCAwKTsKKwltdnNkX3dyaXRlKE1WU0RfTk9SX0lOVFJfU1RBVFVTLCAweGZmZmYpOworCW12c2Rfd3JpdGUoTVZTRF9FUlJfSU5UUl9TVEFUVVMsIDB4ZmZmZik7Cit9CisKK3N0YXRpYyB2b2lkIG12c2Rfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcykKK3sKKwlzdHJ1Y3QgbXZzZF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKKwl2b2lkIF9faW9tZW0gKmlvYmFzZSA9IGhvc3QtPmJhc2U7CisJdTMyIGN0cmxfcmVnID0gMDsKKworCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX1VQKQorCQltdnNkX3Bvd2VyX3VwKGhvc3QpOworCisJaWYgKGlvcy0+Y2xvY2sgPT0gMCkgeworCQltdnNkX3dyaXRlKE1WU0RfWEZFUl9NT0RFLCBNVlNEX1hGRVJfTU9ERV9TVE9QX0NMSyk7CisJCW12c2Rfd3JpdGUoTVZTRF9DTEtfRElWLCBNVlNEX0JBU0VfRElWX01BWCk7CisJCWhvc3QtPmNsb2NrID0gMDsKKwkJZGV2X2RiZyhob3N0LT5kZXYsICJjbG9jayBvZmZcbiIpOworCX0gZWxzZSBpZiAoaW9zLT5jbG9jayAhPSBob3N0LT5jbG9jaykgeworCQl1MzIgbSA9IERJVl9ST1VORF9VUChob3N0LT5iYXNlX2Nsb2NrLCBpb3MtPmNsb2NrKSAtIDE7CisJCWlmIChtID4gTVZTRF9CQVNFX0RJVl9NQVgpCisJCQltID0gTVZTRF9CQVNFX0RJVl9NQVg7CisJCW12c2Rfd3JpdGUoTVZTRF9DTEtfRElWLCBtKTsKKwkJaG9zdC0+Y2xvY2sgPSBpb3MtPmNsb2NrOworCQlob3N0LT5uc19wZXJfY2xrID0gMTAwMDAwMDAwMCAvIChob3N0LT5iYXNlX2Nsb2NrIC8gKG0rMSkpOworCQlkZXZfZGJnKGhvc3QtPmRldiwgImNsb2NrPSVkICglZCksIGRpdj0weCUwNHhcbiIsCisJCQlpb3MtPmNsb2NrLCBob3N0LT5iYXNlX2Nsb2NrIC8gKG0rMSksIG0pOworCX0KKworCS8qIGRlZmF1bHQgdHJhbnNmZXIgbW9kZSAqLworCWN0cmxfcmVnIHw9IE1WU0RfSE9TVF9DVFJMX0JJR19FTkRJQU47CisJY3RybF9yZWcgJj0gfk1WU0RfSE9TVF9DVFJMX0xTQl9GSVJTVDsKKworCS8qIGRlZmF1bHQgdG8gbWF4aW11bSB0aW1lb3V0ICovCisJY3RybF9yZWcgfD0gTVZTRF9IT1NUX0NUUkxfVE1PVVRfTUFTSzsKKwljdHJsX3JlZyB8PSBNVlNEX0hPU1RfQ1RSTF9UTU9VVF9FTjsKKworCWlmIChpb3MtPmJ1c19tb2RlID09IE1NQ19CVVNNT0RFX1BVU0hQVUxMKQorCQljdHJsX3JlZyB8PSBNVlNEX0hPU1RfQ1RSTF9QVVNIX1BVTExfRU47CisKKwlpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KQorCQljdHJsX3JlZyB8PSBNVlNEX0hPU1RfQ1RSTF9EQVRBX1dJRFRIXzRfQklUUzsKKworCWlmIChpb3MtPnRpbWluZyA9PSBNTUNfVElNSU5HX01NQ19IUyB8fAorCSAgICBpb3MtPnRpbWluZyA9PSBNTUNfVElNSU5HX1NEX0hTKQorCQljdHJsX3JlZyB8PSBNVlNEX0hPU1RfQ1RSTF9ISV9TUEVFRF9FTjsKKworCWhvc3QtPmN0cmwgPSBjdHJsX3JlZzsKKwltdnNkX3dyaXRlKE1WU0RfSE9TVF9DVFJMLCBjdHJsX3JlZyk7CisJZGV2X2RiZyhob3N0LT5kZXYsICJjdHJsIDB4JTA0eDogJXMgJXMgJXNcbiIsIGN0cmxfcmVnLAorCQkoY3RybF9yZWcgJiBNVlNEX0hPU1RfQ1RSTF9QVVNIX1BVTExfRU4pID8KKwkJCSJwdXNoLXB1bGwiIDogIm9wZW4tZHJhaW4iLAorCQkoY3RybF9yZWcgJiBNVlNEX0hPU1RfQ1RSTF9EQVRBX1dJRFRIXzRfQklUUykgPworCQkJIjRiaXQtd2lkdGgiIDogIjFiaXQtd2lkdGgiLAorCQkoY3RybF9yZWcgJiBNVlNEX0hPU1RfQ1RSTF9ISV9TUEVFRF9FTikgPworCQkJImhpZ2gtc3BlZWQiIDogIiIpOworCisJaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfT0ZGKQorCQltdnNkX3Bvd2VyX2Rvd24oaG9zdCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG12c2Rfb3BzID0geworCS5yZXF1ZXN0CQk9IG12c2RfcmVxdWVzdCwKKwkuZ2V0X3JvCQkJPSBtdnNkX2dldF9ybywKKwkuc2V0X2lvcwkJPSBtdnNkX3NldF9pb3MsCisJLmVuYWJsZV9zZGlvX2lycQk9IG12c2RfZW5hYmxlX3NkaW9faXJxLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG12X2NvbmZfbWJ1c193aW5kb3dzKHN0cnVjdCBtdnNkX2hvc3QgKmhvc3QsCisJCQkJCXN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8gKmRyYW0pCit7CisJdm9pZCBfX2lvbWVtICppb2Jhc2UgPSBob3N0LT5iYXNlOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQl3cml0ZWwoMCwgaW9iYXNlICsgTVZTRF9XSU5ET1dfQ1RSTChpKSk7CisJCXdyaXRlbCgwLCBpb2Jhc2UgKyBNVlNEX1dJTkRPV19CQVNFKGkpKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZHJhbS0+bnVtX2NzOyBpKyspIHsKKwkJc3RydWN0IG1idXNfZHJhbV93aW5kb3cgKmNzID0gZHJhbS0+Y3MgKyBpOworCQl3cml0ZWwoKChjcy0+c2l6ZSAtIDEpICYgMHhmZmZmMDAwMCkgfAorCQkgICAgICAgKGNzLT5tYnVzX2F0dHIgPDwgOCkgfAorCQkgICAgICAgKGRyYW0tPm1idXNfZHJhbV90YXJnZXRfaWQgPDwgNCkgfCAxLAorCQkgICAgICAgaW9iYXNlICsgTVZTRF9XSU5ET1dfQ1RSTChpKSk7CisJCXdyaXRlbChjcy0+YmFzZSwgaW9iYXNlICsgTVZTRF9XSU5ET1dfQkFTRShpKSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBtdnNkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBOVUxMOworCXN0cnVjdCBtdnNkX2hvc3QgKmhvc3QgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YSAqbXZzZF9kYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlpbnQgcmV0LCBpcnE7CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCW12c2RfZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghciB8fCBpcnEgPCAwIHx8ICFtdnNkX2RhdGEpCisJCXJldHVybiAtRU5YSU87CisKKwlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCBTWl8xSywgRFJJVkVSX05BTUUpOworCWlmICghcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgbXZzZF9ob3N0KSwgJnBkZXYtPmRldik7CisJaWYgKCFtbWMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaG9zdCA9IG1tY19wcml2KG1tYyk7CisJaG9zdC0+bW1jID0gbW1jOworCWhvc3QtPmRldiA9ICZwZGV2LT5kZXY7CisJaG9zdC0+cmVzID0gcjsKKwlob3N0LT5iYXNlX2Nsb2NrID0gbXZzZF9kYXRhLT5jbG9jayAvIDI7CisKKwltbWMtPm9wcyA9ICZtdnNkX29wczsKKworCW1tYy0+b2NyX2F2YWlsID0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7CisJbW1jLT5jYXBzID0gTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF9TRElPX0lSUSB8CisJCSAgICBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8IE1NQ19DQVBfTU1DX0hJR0hTUEVFRDsKKworCW1tYy0+Zl9taW4gPSBESVZfUk9VTkRfVVAoaG9zdC0+YmFzZV9jbG9jaywgTVZTRF9CQVNFX0RJVl9NQVgpOworCW1tYy0+Zl9tYXggPSBtYXhmcmVxOworCisJbW1jLT5tYXhfYmxrX3NpemUgPSAyMDQ4OworCW1tYy0+bWF4X2Jsa19jb3VudCA9IDY1NTM1OworCisJbW1jLT5tYXhfaHdfc2VncyA9IDE7CisJbW1jLT5tYXhfcGh5c19zZWdzID0gMTsKKwltbWMtPm1heF9zZWdfc2l6ZSA9IG1tYy0+bWF4X2Jsa19zaXplICogbW1jLT5tYXhfYmxrX2NvdW50OworCW1tYy0+bWF4X3JlcV9zaXplID0gbW1jLT5tYXhfYmxrX3NpemUgKiBtbWMtPm1heF9ibGtfY291bnQ7CisKKwlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CisKKwlob3N0LT5iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgU1pfNEspOworCWlmICghaG9zdC0+YmFzZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiAoUmUtKXByb2dyYW0gTUJVUyByZW1hcHBpbmcgd2luZG93cyBpZiB3ZSBhcmUgYXNrZWQgdG8uICovCisJaWYgKG12c2RfZGF0YS0+ZHJhbSAhPSBOVUxMKQorCQltdl9jb25mX21idXNfd2luZG93cyhob3N0LCBtdnNkX2RhdGEtPmRyYW0pOworCisJbXZzZF9wb3dlcl9kb3duKGhvc3QpOworCisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBtdnNkX2lycSwgMCwgRFJJVkVSX05BTUUsIGhvc3QpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFzc2lnbiBpcnEgJWRcbiIsIERSSVZFUl9OQU1FLCBpcnEpOworCQlnb3RvIG91dDsKKwl9IGVsc2UKKwkJaG9zdC0+aXJxID0gaXJxOworCisJaWYgKG12c2RfZGF0YS0+Z3Bpb19jYXJkX2RldGVjdCkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QobXZzZF9kYXRhLT5ncGlvX2NhcmRfZGV0ZWN0LAorCQkJCSAgIERSSVZFUl9OQU1FICIgY2QiKTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQlncGlvX2RpcmVjdGlvbl9pbnB1dChtdnNkX2RhdGEtPmdwaW9fY2FyZF9kZXRlY3QpOworCQkJaXJxID0gZ3Bpb190b19pcnEobXZzZF9kYXRhLT5ncGlvX2NhcmRfZGV0ZWN0KTsKKwkJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgbXZzZF9jYXJkX2RldGVjdF9pcnEsCisJCQkJCSAgSVJRX1RZUEVfRURHRV9SSVNJTkcgfCBJUlFfVFlQRV9FREdFX0ZBTExJTkcsCisJCQkJCSAgRFJJVkVSX05BTUUgIiBjZCIsIGhvc3QpOworCQkJaWYgKHJldCA9PSAwKQorCQkJCWhvc3QtPmdwaW9fY2FyZF9kZXRlY3QgPQorCQkJCQltdnNkX2RhdGEtPmdwaW9fY2FyZF9kZXRlY3Q7CisJCQllbHNlCisJCQkJZ3Bpb19mcmVlKG12c2RfZGF0YS0+Z3Bpb19jYXJkX2RldGVjdCk7CisJCX0KKwl9CisJaWYgKCFob3N0LT5ncGlvX2NhcmRfZGV0ZWN0KQorCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9ORUVEU19QT0xMOworCisJaWYgKG12c2RfZGF0YS0+Z3Bpb193cml0ZV9wcm90ZWN0KSB7CisJCXJldCA9IGdwaW9fcmVxdWVzdChtdnNkX2RhdGEtPmdwaW9fd3JpdGVfcHJvdGVjdCwKKwkJCQkgICBEUklWRVJfTkFNRSAiIHdwIik7CisJCWlmIChyZXQgPT0gMCkgeworCQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQobXZzZF9kYXRhLT5ncGlvX3dyaXRlX3Byb3RlY3QpOworCQkJaG9zdC0+Z3Bpb193cml0ZV9wcm90ZWN0ID0KKwkJCQltdnNkX2RhdGEtPmdwaW9fd3JpdGVfcHJvdGVjdDsKKwkJfQorCX0KKworCXNldHVwX3RpbWVyKCZob3N0LT50aW1lciwgbXZzZF90aW1lb3V0X3RpbWVyLCAodW5zaWduZWQgbG9uZylob3N0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtbWMpOworCXJldCA9IG1tY19hZGRfaG9zdChtbWMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcHJpbnRrKEtFUk5fTk9USUNFICIlczogJXMgZHJpdmVyIGluaXRpYWxpemVkLCAiLAorCQkJICAgbW1jX2hvc3RuYW1lKG1tYyksIERSSVZFUl9OQU1FKTsKKwlpZiAoaG9zdC0+Z3Bpb19jYXJkX2RldGVjdCkKKwkJcHJpbnRrKCJ1c2luZyBHUElPICVkIGZvciBjYXJkIGRldGVjdGlvblxuIiwKKwkJICAgICAgIGhvc3QtPmdwaW9fY2FyZF9kZXRlY3QpOworCWVsc2UKKwkJcHJpbnRrKCJsYWNraW5nIGNhcmQgZGV0ZWN0IChmYWxsIGJhY2sgdG8gcG9sbGluZylcbiIpOworCXJldHVybiAwOworCitvdXQ6CisJaWYgKGhvc3QpIHsKKwkJaWYgKGhvc3QtPmlycSkKKwkJCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CisJCWlmIChob3N0LT5ncGlvX2NhcmRfZGV0ZWN0KSB7CisJCQlmcmVlX2lycShncGlvX3RvX2lycShob3N0LT5ncGlvX2NhcmRfZGV0ZWN0KSwgaG9zdCk7CisJCQlncGlvX2ZyZWUoaG9zdC0+Z3Bpb19jYXJkX2RldGVjdCk7CisJCX0KKwkJaWYgKGhvc3QtPmdwaW9fd3JpdGVfcHJvdGVjdCkKKwkJCWdwaW9fZnJlZShob3N0LT5ncGlvX3dyaXRlX3Byb3RlY3QpOworCQlpZiAoaG9zdC0+YmFzZSkKKwkJCWlvdW5tYXAoaG9zdC0+YmFzZSk7CisJfQorCWlmIChyKQorCQlyZWxlYXNlX3Jlc291cmNlKHIpOworCWlmIChtbWMpCisJCW1tY19mcmVlX2hvc3QobW1jKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IG12c2RfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChtbWMpIHsKKwkJc3RydWN0IG12c2RfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CisKKwkJaWYgKGhvc3QtPmdwaW9fY2FyZF9kZXRlY3QpIHsKKwkJCWZyZWVfaXJxKGdwaW9fdG9faXJxKGhvc3QtPmdwaW9fY2FyZF9kZXRlY3QpLCBob3N0KTsKKwkJCWdwaW9fZnJlZShob3N0LT5ncGlvX2NhcmRfZGV0ZWN0KTsKKwkJfQorCQltbWNfcmVtb3ZlX2hvc3QobW1jKTsKKwkJZnJlZV9pcnEoaG9zdC0+aXJxLCBob3N0KTsKKwkJaWYgKGhvc3QtPmdwaW9fd3JpdGVfcHJvdGVjdCkKKwkJCWdwaW9fZnJlZShob3N0LT5ncGlvX3dyaXRlX3Byb3RlY3QpOworCQlkZWxfdGltZXJfc3luYygmaG9zdC0+dGltZXIpOworCQltdnNkX3Bvd2VyX2Rvd24oaG9zdCk7CisJCWlvdW5tYXAoaG9zdC0+YmFzZSk7CisJCXJlbGVhc2VfcmVzb3VyY2UoaG9zdC0+cmVzKTsKKwkJbW1jX2ZyZWVfaG9zdChtbWMpOworCX0KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBtdnNkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUsCisJCQkgICB1MzIgbGV2ZWwpCit7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQgPSAwOworCisJaWYgKG1tYyAmJiBsZXZlbCA9PSBTVVNQRU5EX0RJU0FCTEUpCisJCXJldCA9IG1tY19zdXNwZW5kX2hvc3QobW1jLCBzdGF0ZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG12c2RfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgdTMyIGxldmVsKQoreworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldCA9IDA7CisKKwlpZiAobW1jICYmIGxldmVsID09IFJFU1VNRV9FTkFCTEUpCisJCXJldCA9IG1tY19yZXN1bWVfaG9zdChtbWMpOworCisJcmV0dXJuIHJldDsKK30KKyNlbHNlCisjZGVmaW5lIG12c2Rfc3VzcGVuZAlOVUxMCisjZGVmaW5lIG12c2RfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdnNkX2RyaXZlciA9IHsKKwkucmVtb3ZlCQk9IF9fZXhpdF9wKG12c2RfcmVtb3ZlKSwKKwkuc3VzcGVuZAk9IG12c2Rfc3VzcGVuZCwKKwkucmVzdW1lCQk9IG12c2RfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtdnNkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZtdnNkX2RyaXZlciwgbXZzZF9wcm9iZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdnNkX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXZzZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtdnNkX2luaXQpOworbW9kdWxlX2V4aXQobXZzZF9leGl0KTsKKworLyogbWF4aW11bSBjYXJkIGNsb2NrIGZyZXF1ZW5jeSAoZGVmYXVsdCA1ME1IeikgKi8KK21vZHVsZV9wYXJhbShtYXhmcmVxLCBpbnQsIDApOworCisvKiBmb3JjZSBQSU8gdHJhbnNmZXJzIGFsbCB0aGUgdGltZSAqLworbW9kdWxlX3BhcmFtKG5vZG1hLCBpbnQsIDApOworCitNT0RVTEVfQVVUSE9SKCJNYWVuIFN1bGVpbWFuLCBOaWNvbGFzIFBpdHJlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1hcnZlbGwgTU1DLFNELFNESU8gSG9zdCBDb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tdnNkaW8uaCBiL2RyaXZlcnMvbW1jL2hvc3QvbXZzZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q5NzI3YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXZzZGlvLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcnMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fTVZTRElPX0gKKyNkZWZpbmUgX19NVlNESU9fSAorCisvKgorICogQ2xvY2sgcmF0ZXMKKyAqLworCisjZGVmaW5lIE1WU0RfQ0xPQ0tSQVRFX01BWAkJCTUwMDAwMDAwCisjZGVmaW5lIE1WU0RfQkFTRV9ESVZfTUFYCQkJMHg3ZmYKKworCisvKgorICogUmVnaXN0ZXIgb2Zmc2V0cworICovCisKKyNkZWZpbmUgTVZTRF9TWVNfQUREUl9MT1cJCQkweDAwMAorI2RlZmluZSBNVlNEX1NZU19BRERSX0hJCQkJMHgwMDQKKyNkZWZpbmUgTVZTRF9CTEtfU0laRQkJCQkweDAwOAorI2RlZmluZSBNVlNEX0JMS19DT1VOVAkJCQkweDAwYworI2RlZmluZSBNVlNEX0FSR19MT1cJCQkJMHgwMTAKKyNkZWZpbmUgTVZTRF9BUkdfSEkJCQkJMHgwMTQKKyNkZWZpbmUgTVZTRF9YRkVSX01PREUJCQkJMHgwMTgKKyNkZWZpbmUgTVZTRF9DTUQJCQkJMHgwMWMKKyNkZWZpbmUgTVZTRF9SU1AoaSkJCQkJKDB4MDIwICsgKChpKTw8MikpCisjZGVmaW5lIE1WU0RfUlNQMAkJCQkweDAyMAorI2RlZmluZSBNVlNEX1JTUDEJCQkJMHgwMjQKKyNkZWZpbmUgTVZTRF9SU1AyCQkJCTB4MDI4CisjZGVmaW5lIE1WU0RfUlNQMwkJCQkweDAyYworI2RlZmluZSBNVlNEX1JTUDQJCQkJMHgwMzAKKyNkZWZpbmUgTVZTRF9SU1A1CQkJCTB4MDM0CisjZGVmaW5lIE1WU0RfUlNQNgkJCQkweDAzOAorI2RlZmluZSBNVlNEX1JTUDcJCQkJMHgwM2MKKyNkZWZpbmUgTVZTRF9GSUZPCQkJCTB4MDQwCisjZGVmaW5lIE1WU0RfUlNQX0NSQzcJCQkJMHgwNDQKKyNkZWZpbmUgTVZTRF9IV19TVEFURQkJCQkweDA0OAorI2RlZmluZSBNVlNEX0hPU1RfQ1RSTAkJCQkweDA1MAorI2RlZmluZSBNVlNEX0JMS19HQVBfQ1RSTAkJCTB4MDU0CisjZGVmaW5lIE1WU0RfQ0xLX0NUUkwJCQkJMHgwNTgKKyNkZWZpbmUgTVZTRF9TV19SRVNFVAkJCQkweDA1YworI2RlZmluZSBNVlNEX05PUl9JTlRSX1NUQVRVUwkJCTB4MDYwCisjZGVmaW5lIE1WU0RfRVJSX0lOVFJfU1RBVFVTCQkJMHgwNjQKKyNkZWZpbmUgTVZTRF9OT1JfU1RBVFVTX0VOCQkJMHgwNjgKKyNkZWZpbmUgTVZTRF9FUlJfU1RBVFVTX0VOCQkJMHgwNmMKKyNkZWZpbmUgTVZTRF9OT1JfSU5UUl9FTgkJCTB4MDcwCisjZGVmaW5lIE1WU0RfRVJSX0lOVFJfRU4JCQkweDA3NAorI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9FUlJfU1RBVFVTCQkweDA3OAorI2RlZmluZSBNVlNEX0NVUlJfQllURV9MRUZUCQkJMHgwN2MKKyNkZWZpbmUgTVZTRF9DVVJSX0JMS19MRUZUCQkJMHgwODAKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfQVJHX0xPVwkJCTB4MDg0CisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0FSR19ISQkJCTB4MDg4CisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0NNRAkJCTB4MDhjCisjZGVmaW5lIE1WU0RfQVVUT19SU1AoaSkJCQkoMHgwOTAgKyAoKGkpPDwyKSkKKyNkZWZpbmUgTVZTRF9BVVRPX1JTUDAJCQkJMHgwOTAKKyNkZWZpbmUgTVZTRF9BVVRPX1JTUDEJCQkJMHgwOTQKKyNkZWZpbmUgTVZTRF9BVVRPX1JTUDIJCQkJMHgwOTgKKyNkZWZpbmUgTVZTRF9DTEtfRElWCQkJCTB4MTI4CisKKyNkZWZpbmUgTVZTRF9XSU5ET1dfQ1RSTChpKQkJCSgweDEwOCArICgoaSkgPDwgMykpCisjZGVmaW5lIE1WU0RfV0lORE9XX0JBU0UoaSkJCQkoMHgxMGMgKyAoKGkpIDw8IDMpKQorCisKKy8qCisgKiBNVlNEX0NNRAorICovCisKKyNkZWZpbmUgTVZTRF9DTURfUlNQX05PTkUJCQkoMCA8PCAwKQorI2RlZmluZSBNVlNEX0NNRF9SU1BfMTM2CQkJKDEgPDwgMCkKKyNkZWZpbmUgTVZTRF9DTURfUlNQXzQ4CQkJCSgyIDw8IDApCisjZGVmaW5lIE1WU0RfQ01EX1JTUF80OEJVU1kJCQkoMyA8PCAwKQorCisjZGVmaW5lIE1WU0RfQ01EX0NIRUNLX0RBVEFDUkMxNgkJKDEgPDwgMikKKyNkZWZpbmUgTVZTRF9DTURfQ0hFQ0tfQ01EQ1JDCQkJKDEgPDwgMykKKyNkZWZpbmUgTVZTRF9DTURfSU5EWF9DSEVDSwkJCSgxIDw8IDQpCisjZGVmaW5lIE1WU0RfQ01EX0RBVEFfUFJFU0VOVAkJCSgxIDw8IDUpCisjZGVmaW5lIE1WU0RfVU5FWFBFQ1RFRF9SRVNQCQkJKDEgPDwgNykKKyNkZWZpbmUgTVZTRF9DTURfSU5ERVgoeCkJCQkoKHgpIDw8IDgpCisKKworLyoKKyAqIE1WU0RfQVVUT0NNRDEyX0NNRAorICovCisKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfQlVTWQkJCSgxIDw8IDApCisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0lORFhfQ0hFQ0sJCSgxIDw8IDEpCisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0lOREVYKHgpCQkJKCh4KSA8PCA4KQorCisvKgorICogTVZTRF9YRkVSX01PREUKKyAqLworCisjZGVmaW5lIE1WU0RfWEZFUl9NT0RFX1dSX0RBVEFfU1RBUlQJCSgxIDw8IDApCisjZGVmaW5lIE1WU0RfWEZFUl9NT0RFX0hXX1dSX0RBVEFfRU4JCSgxIDw8IDEpCisjZGVmaW5lIE1WU0RfWEZFUl9NT0RFX0FVVE9fQ01EMTIJCSgxIDw8IDIpCisjZGVmaW5lIE1WU0RfWEZFUl9NT0RFX0lOVF9DSEtfRU4JCSgxIDw8IDMpCisjZGVmaW5lIE1WU0RfWEZFUl9NT0RFX1RPX0hPU1QJCQkoMSA8PCA0KQorI2RlZmluZSBNVlNEX1hGRVJfTU9ERV9TVE9QX0NMSwkJCSgxIDw8IDUpCisjZGVmaW5lIE1WU0RfWEZFUl9NT0RFX1BJTwkJCSgxIDw8IDYpCisKKworLyoKKyAqIE1WU0RfSE9TVF9DVFJMCisgKi8KKworI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9QVVNIX1BVTExfRU4gCQkoMSA8PCAwKQorCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX0NBUkRfVFlQRV9NRU1fT05MWSAJKDAgPDwgMSkKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfQ0FSRF9UWVBFX0lPX09OTFkgCSgxIDw8IDEpCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX0NBUkRfVFlQRV9JT19NRU1fQ09NQk8gCSgyIDw8IDEpCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX0NBUkRfVFlQRV9JT19NTUMgCSgzIDw8IDEpCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX0NBUkRfVFlQRV9NQVNLCSAJKDMgPDwgMSkKKworI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9CSUdfRU5ESUFOIAkJKDEgPDwgMykKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfTFNCX0ZJUlNUIAkJKDEgPDwgNCkKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfREFUQV9XSURUSF80X0JJVFMgCSgxIDw8IDkpCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX0hJX1NQRUVEX0VOIAkJKDEgPDwgMTApCisKKyNkZWZpbmUgTVZTRF9IT1NUX0NUUkxfVE1PVVRfTUFYIAkJMHhmCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX1RNT1VUX01BU0sgCQkoMHhmIDw8IDExKQorI2RlZmluZSBNVlNEX0hPU1RfQ1RSTF9UTU9VVCh4KSAJCSgoeCkgPDwgMTEpCisjZGVmaW5lIE1WU0RfSE9TVF9DVFJMX1RNT1VUX0VOIAkJKDEgPDwgMTUpCisKKworLyoKKyAqIE1WU0RfU1dfUkVTRVQKKyAqLworCisjZGVmaW5lIE1WU0RfU1dfUkVTRVRfTk9XCQkJKDEgPDwgOCkKKworCisvKgorICogTm9ybWFsIGludGVycnVwdCBzdGF0dXMgYml0cworICovCisKKyNkZWZpbmUgTVZTRF9OT1JfQ01EX0RPTkUJCQkoMSA8PCAwKQorI2RlZmluZSBNVlNEX05PUl9YRkVSX0RPTkUJCQkoMSA8PCAxKQorI2RlZmluZSBNVlNEX05PUl9CTEtfR0FQX0VWVAkJCSgxIDw8IDIpCisjZGVmaW5lIE1WU0RfTk9SX0RNQV9ET05FCQkJKDEgPDwgMykKKyNkZWZpbmUgTVZTRF9OT1JfVFhfQVZBSUwJCQkoMSA8PCA0KQorI2RlZmluZSBNVlNEX05PUl9SWF9SRUFEWQkJCSgxIDw8IDUpCisjZGVmaW5lIE1WU0RfTk9SX0NBUkRfSU5UCQkJKDEgPDwgOCkKKyNkZWZpbmUgTVZTRF9OT1JfUkVBRF9XQUlUX09OCQkJKDEgPDwgOSkKKyNkZWZpbmUgTVZTRF9OT1JfUlhfRklGT184VwkJCSgxIDw8IDEwKQorI2RlZmluZSBNVlNEX05PUl9UWF9GSUZPXzhXCQkJKDEgPDwgMTEpCisjZGVmaW5lIE1WU0RfTk9SX1NVU1BFTkRfT04JCQkoMSA8PCAxMikKKyNkZWZpbmUgTVZTRF9OT1JfQVVUT0NNRDEyX0RPTkUJCQkoMSA8PCAxMykKKyNkZWZpbmUgTVZTRF9OT1JfVU5FWFBfUlNQCQkJKDEgPDwgMTQpCisjZGVmaW5lIE1WU0RfTk9SX0VSUk9SCQkJCSgxIDw8IDE1KQorCisKKy8qCisgKiBFcnJvciBzdGF0dXMgYml0cworICovCisKKyNkZWZpbmUgTVZTRF9FUlJfQ01EX1RJTUVPVVQJCQkoMSA8PCAwKQorI2RlZmluZSBNVlNEX0VSUl9DTURfQ1JDCQkJKDEgPDwgMSkKKyNkZWZpbmUgTVZTRF9FUlJfQ01EX0VOREJJVAkJCSgxIDw8IDIpCisjZGVmaW5lIE1WU0RfRVJSX0NNRF9JTkRFWAkJCSgxIDw8IDMpCisjZGVmaW5lIE1WU0RfRVJSX0RBVEFfVElNRU9VVAkJCSgxIDw8IDQpCisjZGVmaW5lIE1WU0RfRVJSX0RBVEFfQ1JDCQkJKDEgPDwgNSkKKyNkZWZpbmUgTVZTRF9FUlJfREFUQV9FTkRCSVQJCQkoMSA8PCA2KQorI2RlZmluZSBNVlNEX0VSUl9BVVRPQ01EMTIJCQkoMSA8PCA4KQorI2RlZmluZSBNVlNEX0VSUl9DTURfU1RBUlRCSVQJCQkoMSA8PCA5KQorI2RlZmluZSBNVlNEX0VSUl9YRkVSX1NJWkUJCQkoMSA8PCAxMCkKKyNkZWZpbmUgTVZTRF9FUlJfUkVTUF9UX0JJVAkJCSgxIDw8IDExKQorI2RlZmluZSBNVlNEX0VSUl9DUkNfRU5EQklUCQkJKDEgPDwgMTIpCisjZGVmaW5lIE1WU0RfRVJSX0NSQ19TVEFSVEJJVAkJCSgxIDw8IDEzKQorI2RlZmluZSBNVlNEX0VSUl9DUkNfU1RBVFVTCQkJKDEgPDwgMTQpCisKKworLyoKKyAqIENNRDEyIGVycm9yIHN0YXR1cyBiaXRzCisgKi8KKworI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9FUlJfTk9URVhFCQkoMSA8PCAwKQorI2RlZmluZSBNVlNEX0FVVE9DTUQxMl9FUlJfVElNRU9VVAkJKDEgPDwgMSkKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfRVJSX0NSQwkJCSgxIDw8IDIpCisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0VSUl9FTkRCSVQJCSgxIDw8IDMpCisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0VSUl9JTkRFWAkJKDEgPDwgNCkKKyNkZWZpbmUgTVZTRF9BVVRPQ01EMTJfRVJSX1JFU1BfVF9CSVQJCSgxIDw8IDUpCisjZGVmaW5lIE1WU0RfQVVUT0NNRDEyX0VSUl9SRVNQX1NUQVJUQklUCSgxIDw8IDYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwppbmRleCAzOTE2YTU2Li5kMTgzYmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwpAQCAtNTYsNiArNTYsNyBAQAogI2RlZmluZSBTRFZTMTgJCQkoMHg1IDw8IDkpCiAjZGVmaW5lIFNEVlMzMAkJCSgweDYgPDwgOSkKICNkZWZpbmUgU0RWUzMzCQkJKDB4NyA8PCA5KQorI2RlZmluZSBTRFZTX01BU0sJCTB4MDAwMDBFMDAKICNkZWZpbmUgU0RWU0NMUgkJCTB4RkZGRkYxRkYKICNkZWZpbmUgU0RWU0RFVAkJCTB4MDAwMDA0MDAKICNkZWZpbmUgQVVUT0lETEUJCTB4MQpAQCAtNzYsNiArNzcsNyBAQAogI2RlZmluZSBNU0JTCQkJKDEgPDwgNSkKICNkZWZpbmUgQkNFCQkJKDEgPDwgMSkKICNkZWZpbmUgRk9VUl9CSVQJCSgxIDw8IDEpCisjZGVmaW5lIERXOAkJCSgxIDw8IDUpCiAjZGVmaW5lIENDCQkJMHgxCiAjZGVmaW5lIFRDCQkJMHgwMgogI2RlZmluZSBPRAkJCTB4MQpAQCAtOTgsMTAgKzEwMCw4IEBACiAgKi8KICNkZWZpbmUgT01BUF9NTUMxX0RFVklECQkwCiAjZGVmaW5lIE9NQVBfTU1DMl9ERVZJRAkJMQorI2RlZmluZSBPTUFQX01NQzNfREVWSUQJCTIKIAotI2RlZmluZSBPTUFQX01NQ19EQVRBRElSX05PTkUJMAotI2RlZmluZSBPTUFQX01NQ19EQVRBRElSX1JFQUQJMQotI2RlZmluZSBPTUFQX01NQ19EQVRBRElSX1dSSVRFCTIKICNkZWZpbmUgTU1DX1RJTUVPVVRfTVMJCTIwCiAjZGVmaW5lIE9NQVBfTU1DX01BU1RFUl9DTE9DSwk5NjAwMDAwMAogI2RlZmluZSBEUklWRVJfTkFNRQkJIm1tY2ktb21hcC1ocyIKQEAgLTEzNywxOCArMTM3LDE4IEBACiAJcmVzb3VyY2Vfc2l6ZV90CQltYXBiYXNlOwogCXVuc2lnbmVkIGludAkJaWQ7CiAJdW5zaWduZWQgaW50CQlkbWFfbGVuOwotCXVuc2lnbmVkIGludAkJZG1hX2RpcjsKKwl1bnNpZ25lZCBpbnQJCWRtYV9zZ19pZHg7CiAJdW5zaWduZWQgY2hhcgkJYnVzX21vZGU7Ci0JdW5zaWduZWQgY2hhcgkJZGF0YWRpcjsKIAl1MzIJCQkqYnVmZmVyOwogCXUzMgkJCWJ5dGVzbGVmdDsKIAlpbnQJCQlzdXNwZW5kZWQ7CiAJaW50CQkJaXJxOwogCWludAkJCWNhcmRkZXRlY3Q7CiAJaW50CQkJdXNlX2RtYSwgZG1hX2NoOwotCWludAkJCWluaXRzdHI7CisJaW50CQkJZG1hX2xpbmVfdHgsIGRtYV9saW5lX3J4OwogCWludAkJCXNsb3RfaWQ7CiAJaW50CQkJZGJjbGtfZW5hYmxlZDsKKwlpbnQJCQlyZXNwb25zZV9idXN5OwogCXN0cnVjdAlvbWFwX21tY19wbGF0Zm9ybV9kYXRhCSpwZGF0YTsKIH07CiAKQEAgLTIxOCw3ICsyMTgsNyBAQAogCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKIAlzdHJ1Y3Qgb21hcF9tbWNfc2xvdF9kYXRhIHNsb3QgPSBob3N0LT5wZGF0YS0+c2xvdHNbaG9zdC0+c2xvdF9pZF07CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICJzbG90OiVzXG4iLCBzbG90Lm5hbWUpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzbG90Lm5hbWUpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIoc2xvdF9uYW1lLCBTX0lSVUdPLCBtbWNfb21hcF9zaG93X3Nsb3RfbmFtZSwgTlVMTCk7CkBAIC0yNDMsMTAgKzI0MywxNCBAQAogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSVNFLCBJTlRfRU5fTUFTSyk7CiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBJRSwgSU5UX0VOX01BU0spOwogCisJaG9zdC0+cmVzcG9uc2VfYnVzeSA9IDA7CiAJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpIHsKIAkJaWYgKGNtZC0+ZmxhZ3MgJiBNTUNfUlNQXzEzNikKIAkJCXJlc3B0eXBlID0gMTsKLQkJZWxzZQorCQllbHNlIGlmIChjbWQtPmZsYWdzICYgTU1DX1JTUF9CVVNZKSB7CisJCQlyZXNwdHlwZSA9IDM7CisJCQlob3N0LT5yZXNwb25zZV9idXN5ID0gMTsKKwkJfSBlbHNlCiAJCQlyZXNwdHlwZSA9IDI7CiAJfQogCkBAIC0yNzUsMTkgKzI3OSwzNSBAQAogCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ01ELCBjbWRyZWcpOwogfQogCitzdGF0aWMgaW50CittbWNfb21hcF9nZXRfZG1hX2RpcihzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKQoreworCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQorCQlyZXR1cm4gRE1BX1RPX0RFVklDRTsKKwllbHNlCisJCXJldHVybiBETUFfRlJPTV9ERVZJQ0U7Cit9CisKIC8qCiAgKiBOb3RpZnkgdGhlIHRyYW5zZmVyIGNvbXBsZXRlIHRvIE1NQyBjb3JlCiAgKi8KIHN0YXRpYyB2b2lkCiBtbWNfb21hcF94ZmVyX2RvbmUoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKIHsKKwlpZiAoIWRhdGEpIHsKKwkJc3RydWN0IG1tY19yZXF1ZXN0ICptcnEgPSBob3N0LT5tcnE7CisKKwkJaG9zdC0+bXJxID0gTlVMTDsKKwkJbW1jX29tYXBfZmNsa19sYXp5X2Rpc2FibGUoaG9zdCk7CisJCW1tY19yZXF1ZXN0X2RvbmUoaG9zdC0+bW1jLCBtcnEpOworCQlyZXR1cm47CisJfQorCiAJaG9zdC0+ZGF0YSA9IE5VTEw7CiAKIAlpZiAoaG9zdC0+dXNlX2RtYSAmJiBob3N0LT5kbWFfY2ggIT0gLTEpCiAJCWRtYV91bm1hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLCBob3N0LT5kbWFfbGVuLAotCQkJaG9zdC0+ZG1hX2Rpcik7Ci0KLQlob3N0LT5kYXRhZGlyID0gT01BUF9NTUNfREFUQURJUl9OT05FOworCQkJbW1jX29tYXBfZ2V0X2RtYV9kaXIoaG9zdCwgZGF0YSkpOwogCiAJaWYgKCFkYXRhLT5lcnJvcikKIAkJZGF0YS0+Ynl0ZXNfeGZlcmVkICs9IGRhdGEtPmJsb2NrcyAqIChkYXRhLT5ibGtzeik7CkBAIC0zMjIsNyArMzQyLDcgQEAKIAkJCWNtZC0+cmVzcFswXSA9IE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBSU1AxMCk7CiAJCX0KIAl9Ci0JaWYgKGhvc3QtPmRhdGEgPT0gTlVMTCB8fCBjbWQtPmVycm9yKSB7CisJaWYgKChob3N0LT5kYXRhID09IE5VTEwgJiYgIWhvc3QtPnJlc3BvbnNlX2J1c3kpIHx8IGNtZC0+ZXJyb3IpIHsKIAkJaG9zdC0+bXJxID0gTlVMTDsKIAkJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIGNtZC0+bXJxKTsKIAl9CkBAIC0zMzEsMTkgKzM1MSwxOCBAQAogLyoKICAqIERNQSBjbGVhbiB1cCBmb3IgY29tbWFuZCBlcnJvcnMKICAqLwotc3RhdGljIHZvaWQgbW1jX2RtYV9jbGVhbnVwKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0KQorc3RhdGljIHZvaWQgbW1jX2RtYV9jbGVhbnVwKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBpbnQgZXJybm8pCiB7Ci0JaG9zdC0+ZGF0YS0+ZXJyb3IgPSAtRVRJTUVET1VUOworCWhvc3QtPmRhdGEtPmVycm9yID0gZXJybm87CiAKIAlpZiAoaG9zdC0+dXNlX2RtYSAmJiBob3N0LT5kbWFfY2ggIT0gLTEpIHsKIAkJZG1hX3VubWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgaG9zdC0+ZGF0YS0+c2csIGhvc3QtPmRtYV9sZW4sCi0JCQlob3N0LT5kbWFfZGlyKTsKKwkJCW1tY19vbWFwX2dldF9kbWFfZGlyKGhvc3QsIGhvc3QtPmRhdGEpKTsKIAkJb21hcF9mcmVlX2RtYShob3N0LT5kbWFfY2gpOwogCQlob3N0LT5kbWFfY2ggPSAtMTsKIAkJdXAoJmhvc3QtPnNlbSk7CiAJfQogCWhvc3QtPmRhdGEgPSBOVUxMOwotCWhvc3QtPmRhdGFkaXIgPSBPTUFQX01NQ19EQVRBRElSX05PTkU7CiB9CiAKIC8qCkBAIC00MTIsNyArNDMxLDcgQEAKIAlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGE7CiAJaW50IGVuZF9jbWQgPSAwLCBlbmRfdHJhbnMgPSAwLCBzdGF0dXM7CiAKLQlpZiAoaG9zdC0+Y21kID09IE5VTEwgJiYgaG9zdC0+ZGF0YSA9PSBOVUxMKSB7CisJaWYgKGhvc3QtPm1ycSA9PSBOVUxMKSB7CiAJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgU1RBVCwKIAkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBTVEFUKSk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTQzNywxOCArNDU2LDI0IEBACiAJCQkJfQogCQkJCWVuZF9jbWQgPSAxOwogCQkJfQotCQkJaWYgKGhvc3QtPmRhdGEpIHsKLQkJCQltbWNfZG1hX2NsZWFudXAoaG9zdCk7CisJCQlpZiAoaG9zdC0+ZGF0YSB8fCBob3N0LT5yZXNwb25zZV9idXN5KSB7CisJCQkJaWYgKGhvc3QtPmRhdGEpCisJCQkJCW1tY19kbWFfY2xlYW51cChob3N0LCAtRVRJTUVET1VUKTsKKwkJCQlob3N0LT5yZXNwb25zZV9idXN5ID0gMDsKIAkJCQltbWNfb21hcF9yZXNldF9jb250cm9sbGVyX2ZzbShob3N0LCBTUkQpOwogCQkJfQogCQl9CiAJCWlmICgoc3RhdHVzICYgREFUQV9USU1FT1VUKSB8fAogCQkJKHN0YXR1cyAmIERBVEFfQ1JDKSkgewotCQkJaWYgKGhvc3QtPmRhdGEpIHsKLQkJCQlpZiAoc3RhdHVzICYgREFUQV9USU1FT1VUKQotCQkJCQltbWNfZG1hX2NsZWFudXAoaG9zdCk7CisJCQlpZiAoaG9zdC0+ZGF0YSB8fCBob3N0LT5yZXNwb25zZV9idXN5KSB7CisJCQkJaW50IGVyciA9IChzdGF0dXMgJiBEQVRBX1RJTUVPVVQpID8KKwkJCQkJCS1FVElNRURPVVQgOiAtRUlMU0VROworCisJCQkJaWYgKGhvc3QtPmRhdGEpCisJCQkJCW1tY19kbWFfY2xlYW51cChob3N0LCBlcnIpOwogCQkJCWVsc2UKLQkJCQkJaG9zdC0+ZGF0YS0+ZXJyb3IgPSAtRUlMU0VROworCQkJCQlob3N0LT5tcnEtPmNtZC0+ZXJyb3IgPSBlcnI7CisJCQkJaG9zdC0+cmVzcG9uc2VfYnVzeSA9IDA7CiAJCQkJbW1jX29tYXBfcmVzZXRfY29udHJvbGxlcl9mc20oaG9zdCwgU1JEKTsKIAkJCQllbmRfdHJhbnMgPSAxOwogCQkJfQpAQCAtNDczLDYgKzQ5OCwxOSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIHZvaWQgc2V0X3NkX2J1c19wb3dlcihzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCisJCQkgT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpIHwgU0RCUCk7CisJZm9yIChpID0gMDsgaSA8IGxvb3BzX3Blcl9qaWZmeTsgaSsrKSB7CisJCWlmIChPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgJiBTREJQKQorCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOworCX0KK30KKwogLyoKICAqIFN3aXRjaCBNTUMgaW50ZXJmYWNlIHZvbHRhZ2UgLi4uIG9ubHkgcmVsZXZhbnQgZm9yIE1NQzEuCiAgKgpAQCAtNDg1LDkgKzUyMyw2IEBACiAJdTMyIHJlZ192YWwgPSAwOwogCWludCByZXQ7CiAKLQlpZiAoaG9zdC0+aWQgIT0gT01BUF9NTUMxX0RFVklEKQotCQlyZXR1cm4gMDsKLQogCS8qIERpc2FibGUgdGhlIGNsb2NrcyAqLwogCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOwogCWNsa19kaXNhYmxlKGhvc3QtPmljbGspOwpAQCAtNTMyLDkgKzU2Nyw3IEBACiAJCXJlZ192YWwgfD0gU0RWUzMwOwogCiAJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLCByZWdfdmFsKTsKLQotCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKLQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpIHwgU0RCUCk7CisJc2V0X3NkX2J1c19wb3dlcihob3N0KTsKIAogCXJldHVybiAwOwogZXJyOgpAQCAtNTUxLDcgKzU4NCwxMCBAQAogCQkJCQkJbW1jX2NhcmRkZXRlY3Rfd29yayk7CiAJc3RydWN0IG9tYXBfbW1jX3Nsb3RfZGF0YSAqc2xvdCA9ICZtbWNfc2xvdChob3N0KTsKIAotCWhvc3QtPmNhcmRkZXRlY3QgPSBzbG90LT5jYXJkX2RldGVjdChzbG90LT5jYXJkX2RldGVjdF9pcnEpOworCWlmIChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdCkKKwkJaG9zdC0+Y2FyZGRldGVjdCA9IHNsb3QtPmNhcmRfZGV0ZWN0KHNsb3QtPmNhcmRfZGV0ZWN0X2lycSk7CisJZWxzZQorCQlob3N0LT5jYXJkZGV0ZWN0ID0gLUVOT1NZUzsKIAogCXN5c2ZzX25vdGlmeSgmaG9zdC0+bW1jLT5jbGFzc19kZXYua29iaiwgTlVMTCwgImNvdmVyX3N3aXRjaCIpOwogCWlmIChob3N0LT5jYXJkZGV0ZWN0KSB7CkBAIC01NzQsNiArNjEwLDQ4IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaW50IG1tY19vbWFwX2dldF9kbWFfc3luY19kZXYoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsCisJCQkJICAgICBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJaW50IHN5bmNfZGV2OworCisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpCisJCXN5bmNfZGV2ID0gaG9zdC0+ZG1hX2xpbmVfdHg7CisJZWxzZQorCQlzeW5jX2RldiA9IGhvc3QtPmRtYV9saW5lX3J4OworCXJldHVybiBzeW5jX2RldjsKK30KKworc3RhdGljIHZvaWQgbW1jX29tYXBfY29uZmlnX2RtYV9wYXJhbXMoc3RydWN0IG1tY19vbWFwX2hvc3QgKmhvc3QsCisJCQkJICAgICAgIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSwKKwkJCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wpCit7CisJaW50IGJsa3N6LCBuYmxrLCBkbWFfY2g7CisKKwlkbWFfY2ggPSBob3N0LT5kbWFfY2g7CisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUpIHsKKwkJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGRtYV9jaCwgMCwgT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCisJCQkoaG9zdC0+bWFwYmFzZSArIE9NQVBfSFNNTUNfREFUQSksIDAsIDApOworCQlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhkbWFfY2gsIDAsIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAorCQkJc2dfZG1hX2FkZHJlc3Moc2dsKSwgMCwgMCk7CisJfSBlbHNlIHsKKwkJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoZG1hX2NoLCAwLCBPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCwKKwkJCQkJKGhvc3QtPm1hcGJhc2UgKyBPTUFQX0hTTU1DX0RBVEEpLCAwLCAwKTsKKwkJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGRtYV9jaCwgMCwgT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCisJCQlzZ19kbWFfYWRkcmVzcyhzZ2wpLCAwLCAwKTsKKwl9CisKKwlibGtzeiA9IGhvc3QtPmRhdGEtPmJsa3N6OworCW5ibGsgPSBzZ19kbWFfbGVuKHNnbCkgLyBibGtzejsKKworCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoZG1hX2NoLCBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyLAorCQkJYmxrc3ogLyA0LCBuYmxrLCBPTUFQX0RNQV9TWU5DX0ZSQU1FLAorCQkJbW1jX29tYXBfZ2V0X2RtYV9zeW5jX2Rldihob3N0LCBkYXRhKSwKKwkJCSEoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkpOworCisJb21hcF9zdGFydF9kbWEoZG1hX2NoKTsKK30KKwogLyoKICAqIERNQSBjYWxsIGJhY2sgZnVuY3Rpb24KICAqLwpAQCAtNTg3LDYgKzY2NSwxNCBAQAogCWlmIChob3N0LT5kbWFfY2ggPCAwKQogCQlyZXR1cm47CiAKKwlob3N0LT5kbWFfc2dfaWR4Kys7CisJaWYgKGhvc3QtPmRtYV9zZ19pZHggPCBob3N0LT5kbWFfbGVuKSB7CisJCS8qIEZpcmUgdXAgdGhlIG5leHQgdHJhbnNmZXIuICovCisJCW1tY19vbWFwX2NvbmZpZ19kbWFfcGFyYW1zKGhvc3QsIGhvc3QtPmRhdGEsCisJCQkJCSAgIGhvc3QtPmRhdGEtPnNnICsgaG9zdC0+ZG1hX3NnX2lkeCk7CisJCXJldHVybjsKKwl9CisKIAlvbWFwX2ZyZWVfZG1hKGhvc3QtPmRtYV9jaCk7CiAJaG9zdC0+ZG1hX2NoID0gLTE7CiAJLyoKQEAgLTU5NywzOCArNjgzLDI4IEBACiB9CiAKIC8qCi0gKiBDb25maWd1cmUgZG1hIHNyYyBhbmQgZGVzdGluYXRpb24gcGFyYW1ldGVycwotICovCi1zdGF0aWMgaW50IG1tY19vbWFwX2NvbmZpZ19kbWFfcGFyYW0oaW50IHN5bmNfZGlyLCBzdHJ1Y3QgbW1jX29tYXBfaG9zdCAqaG9zdCwKLQkJCQlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCi17Ci0JaWYgKHN5bmNfZGlyID09IDApIHsKLQkJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGhvc3QtPmRtYV9jaCwgMCwKLQkJCU9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAotCQkJKGhvc3QtPm1hcGJhc2UgKyBPTUFQX0hTTU1DX0RBVEEpLCAwLCAwKTsKLQkJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoaG9zdC0+ZG1hX2NoLCAwLAotCQkJT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCi0JCQlzZ19kbWFfYWRkcmVzcygmZGF0YS0+c2dbMF0pLCAwLCAwKTsKLQl9IGVsc2UgewotCQlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhob3N0LT5kbWFfY2gsIDAsCi0JCQlPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCwKLQkJCShob3N0LT5tYXBiYXNlICsgT01BUF9IU01NQ19EQVRBKSwgMCwgMCk7Ci0JCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhob3N0LT5kbWFfY2gsIDAsCi0JCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKLQkJCXNnX2RtYV9hZGRyZXNzKCZkYXRhLT5zZ1swXSksIDAsIDApOwotCX0KLQlyZXR1cm4gMDsKLX0KLS8qCiAgKiBSb3V0aW5lIHRvIGNvbmZpZ3VyZSBhbmQgc3RhcnQgRE1BIGZvciB0aGUgTU1DIGNhcmQKICAqLwogc3RhdGljIGludAogbW1jX29tYXBfc3RhcnRfZG1hX3RyYW5zZmVyKHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcSkKIHsKLQlpbnQgc3luY19kZXYsIHN5bmNfZGlyID0gMDsKLQlpbnQgZG1hX2NoID0gMCwgcmV0ID0gMCwgZXJyID0gMTsKKwlpbnQgZG1hX2NoID0gMCwgcmV0ID0gMCwgZXJyID0gMSwgaTsKIAlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSByZXEtPmRhdGE7CiAKKwkvKiBTYW5pdHkgY2hlY2s6IGFsbCB0aGUgU0cgZW50cmllcyBtdXN0IGJlIGFsaWduZWQgYnkgYmxvY2sgc2l6ZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+ZG1hX2xlbjsgaSsrKSB7CisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsOworCisJCXNnbCA9IGRhdGEtPnNnICsgaTsKKwkJaWYgKHNnbC0+bGVuZ3RoICUgZGF0YS0+Ymxrc3opCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKChkYXRhLT5ibGtzeiAlIDQpICE9IDApCisJCS8qIFJFVklTSVQ6IFRoZSBNTUMgYnVmZmVyIGluY3JlbWVudHMgb25seSB3aGVuIE1TQiBpcyB3cml0dGVuLgorCQkgKiBSZXR1cm4gZXJyb3IgZm9yIGJsa3N6IHdoaWNoIGlzIG5vbiBtdWx0aXBsZSBvZiBmb3VyLgorCQkgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKgogCSAqIElmIGZvciBzb21lIHJlYXNvbiB0aGUgRE1BIHRyYW5zZmVyIGlzIHN0aWxsIGFjdGl2ZSwKIAkgKiB3ZSB3YWl0IGZvciB0aW1lb3V0IHBlcmlvZCBhbmQgZnJlZSB0aGUgZG1hCkBAIC02NDcsNDkgKzcyMywyMiBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAoIShkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSkgewotCQlob3N0LT5kbWFfZGlyID0gRE1BX0ZST01fREVWSUNFOwotCQlpZiAoaG9zdC0+aWQgPT0gT01BUF9NTUMxX0RFVklEKQotCQkJc3luY19kZXYgPSBPTUFQMjRYWF9ETUFfTU1DMV9SWDsKLQkJZWxzZQotCQkJc3luY19kZXYgPSBPTUFQMjRYWF9ETUFfTU1DMl9SWDsKLQl9IGVsc2UgewotCQlob3N0LT5kbWFfZGlyID0gRE1BX1RPX0RFVklDRTsKLQkJaWYgKGhvc3QtPmlkID09IE9NQVBfTU1DMV9ERVZJRCkKLQkJCXN5bmNfZGV2ID0gT01BUDI0WFhfRE1BX01NQzFfVFg7Ci0JCWVsc2UKLQkJCXN5bmNfZGV2ID0gT01BUDI0WFhfRE1BX01NQzJfVFg7Ci0JfQotCi0JcmV0ID0gb21hcF9yZXF1ZXN0X2RtYShzeW5jX2RldiwgIk1NQy9TRCIsIG1tY19vbWFwX2RtYV9jYiwKLQkJCWhvc3QsICZkbWFfY2gpOworCXJldCA9IG9tYXBfcmVxdWVzdF9kbWEobW1jX29tYXBfZ2V0X2RtYV9zeW5jX2Rldihob3N0LCBkYXRhKSwgIk1NQy9TRCIsCisJCQkgICAgICAgbW1jX29tYXBfZG1hX2NiLGhvc3QsICZkbWFfY2gpOwogCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwKKwkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksCiAJCQkiJXM6IG9tYXBfcmVxdWVzdF9kbWEoKSBmYWlsZWQgd2l0aCAlZFxuIiwKIAkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCWhvc3QtPmRtYV9sZW4gPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csCi0JCQlkYXRhLT5zZ19sZW4sIGhvc3QtPmRtYV9kaXIpOworCQkJZGF0YS0+c2dfbGVuLCBtbWNfb21hcF9nZXRfZG1hX2Rpcihob3N0LCBkYXRhKSk7CiAJaG9zdC0+ZG1hX2NoID0gZG1hX2NoOworCWhvc3QtPmRtYV9zZ19pZHggPSAwOwogCi0JaWYgKCEoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkpCi0JCW1tY19vbWFwX2NvbmZpZ19kbWFfcGFyYW0oMSwgaG9zdCwgZGF0YSk7Ci0JZWxzZQotCQltbWNfb21hcF9jb25maWdfZG1hX3BhcmFtKDAsIGhvc3QsIGRhdGEpOworCW1tY19vbWFwX2NvbmZpZ19kbWFfcGFyYW1zKGhvc3QsIGRhdGEsIGRhdGEtPnNnKTsKIAotCWlmICgoZGF0YS0+Ymxrc3ogJSA0KSA9PSAwKQotCQlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGRtYV9jaCwgT01BUF9ETUFfREFUQV9UWVBFX1MzMiwKLQkJCShkYXRhLT5ibGtzeiAvIDQpLCBkYXRhLT5ibG9ja3MsIE9NQVBfRE1BX1NZTkNfRlJBTUUsCi0JCQlzeW5jX2Rldiwgc3luY19kaXIpOwotCWVsc2UKLQkJLyogUkVWSVNJVDogVGhlIE1NQyBidWZmZXIgaW5jcmVtZW50cyBvbmx5IHdoZW4gTVNCIGlzIHdyaXR0ZW4uCi0JCSAqIFJldHVybiBlcnJvciBmb3IgYmxrc3ogd2hpY2ggaXMgbm9uIG11bHRpcGxlIG9mIGZvdXIuCi0JCSAqLwotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW9tYXBfc3RhcnRfZG1hKGRtYV9jaCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTczOSw3ICs3ODgsNiBAQAogCWhvc3QtPmRhdGEgPSByZXEtPmRhdGE7CiAKIAlpZiAocmVxLT5kYXRhID09IE5VTEwpIHsKLQkJaG9zdC0+ZGF0YWRpciA9IE9NQVBfTU1DX0RBVEFESVJfTk9ORTsKIAkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBCTEssIDApOwogCQlyZXR1cm4gMDsKIAl9CkBAIC03NDgsOSArNzk2LDYgQEAKIAkJCQkJfCAocmVxLT5kYXRhLT5ibG9ja3MgPDwgMTYpKTsKIAlzZXRfZGF0YV90aW1lb3V0KGhvc3QsIHJlcSk7CiAKLQlob3N0LT5kYXRhZGlyID0gKHJlcS0+ZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9XUklURSkgPwotCQkJT01BUF9NTUNfREFUQURJUl9XUklURSA6IE9NQVBfTU1DX0RBVEFESVJfUkVBRDsKLQogCWlmIChob3N0LT51c2VfZG1hKSB7CiAJCXJldCA9IG1tY19vbWFwX3N0YXJ0X2RtYV90cmFuc2Zlcihob3N0LCByZXEpOwogCQlpZiAocmV0ICE9IDApIHsKQEAgLTc4MiwzNiArODI3LDI5IEBACiAJdTE2IGRzb3IgPSAwOwogCXVuc2lnbmVkIGxvbmcgcmVndmFsOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1MzIgY29uOwogCiAJc3dpdGNoIChpb3MtPnBvd2VyX21vZGUpIHsKIAljYXNlIE1NQ19QT1dFUl9PRkY6CiAJCW1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDAsIDApOwotCQkvKgotCQkgKiBSZXNldCBpbnRlcmZhY2Ugdm9sdGFnZSB0byAzViBpZiBpdCdzIDEuOFYgbm93OwotCQkgKiBvbmx5IHJlbGV2YW50IG9uIE1NQy0xLCB0aGUgb3RoZXJzIGFsd2F5cyB1c2UgMS44Vi4KLQkJICoKLQkJICogUkVWSVNJVDogSWYgd2UgYXJlIGFibGUgdG8gZGV0ZWN0IGNhcmRzIGFmdGVyIHVucGx1Z2dpbmcKLQkJICogYSAxLjhWIGNhcmQsIHRoaXMgY29kZSBzaG91bGQgbm90IGJlIG5lZWRlZC4KLQkJICovCi0JCWlmIChob3N0LT5pZCAhPSBPTUFQX01NQzFfREVWSUQpCi0JCQlicmVhazsKLQkJaWYgKCEoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpICYgU0RWU0RFVCkpIHsKLQkJCWludCB2ZGQgPSBmbHMoaG9zdC0+bW1jLT5vY3JfYXZhaWwpIC0gMTsKLQkJCWlmIChvbWFwX21tY19zd2l0Y2hfb3Bjb25kKGhvc3QsIHZkZCkgIT0gMCkKLQkJCQlob3N0LT5tbWMtPmlvcy52ZGQgPSB2ZGQ7Ci0JCX0KIAkJYnJlYWs7CiAJY2FzZSBNTUNfUE9XRVJfVVA6CiAJCW1tY19zbG90KGhvc3QpLnNldF9wb3dlcihob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQsIDEsIGlvcy0+dmRkKTsKIAkJYnJlYWs7CiAJfQogCisJY29uID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENPTik7CiAJc3dpdGNoIChtbWMtPmlvcy5idXNfd2lkdGgpIHsKKwljYXNlIE1NQ19CVVNfV0lEVEhfODoKKwkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBDT04sIGNvbiB8IERXOCk7CisJCWJyZWFrOwogCWNhc2UgTU1DX0JVU19XSURUSF80OgorCQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIENPTiwgY29uICYgfkRXOCk7CiAJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKIAkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSB8IEZPVVJfQklUKTsKIAkJYnJlYWs7CiAJY2FzZSBNTUNfQlVTX1dJRFRIXzE6CisJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ09OLCBjb24gJiB+RFc4KTsKIAkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAogCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpICYgfkZPVVJfQklUKTsKIAkJYnJlYWs7CkBAIC04OTEsNiArOTI5LDMzIEBACiAJcmV0dXJuIHBkYXRhLT5zbG90c1swXS5nZXRfcm8oaG9zdC0+ZGV2LCAwKTsKIH0KIAorc3RhdGljIHZvaWQgb21hcF9oc21tY19pbml0KHN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0KQoreworCXUzMiBoY3RsLCBjYXBhLCB2YWx1ZTsKKworCS8qIE9ubHkgTU1DMSBzdXBwb3J0cyAzLjBWICovCisJaWYgKGhvc3QtPmlkID09IE9NQVBfTU1DMV9ERVZJRCkgeworCQloY3RsID0gU0RWUzMwOworCQljYXBhID0gVlMzMCB8IFZTMTg7CisJfSBlbHNlIHsKKwkJaGN0bCA9IFNEVlMxODsKKwkJY2FwYSA9IFZTMTg7CisJfQorCisJdmFsdWUgPSBPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgJiB+U0RWU19NQVNLOworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwgdmFsdWUgfCBoY3RsKTsKKworCXZhbHVlID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIENBUEEpOworCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ0FQQSwgdmFsdWUgfCBjYXBhKTsKKworCS8qIFNldCB0aGUgY29udHJvbGxlciB0byBBVVRPIElETEUgbW9kZSAqLworCXZhbHVlID0gT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIFNZU0NPTkZJRyk7CisJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBTWVNDT05GSUcsIHZhbHVlIHwgQVVUT0lETEUpOworCisJLyogU2V0IFNEIGJ1cyBwb3dlciBiaXQgKi8KKwlzZXRfc2RfYnVzX3Bvd2VyKGhvc3QpOworfQorCiBzdGF0aWMgc3RydWN0IG1tY19ob3N0X29wcyBtbWNfb21hcF9vcHMgPSB7CiAJLnJlcXVlc3QgPSBvbWFwX21tY19yZXF1ZXN0LAogCS5zZXRfaW9zID0gb21hcF9tbWNfc2V0X2lvcywKQEAgLTkwNiw3ICs5NzEsNiBAQAogCXN0cnVjdCBtbWNfb21hcF9ob3N0ICpob3N0ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0ID0gMCwgaXJxOwotCXUzMiBoY3RsLCBjYXBhOwogCiAJaWYgKHBkYXRhID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiUGxhdGZvcm0gRGF0YSBpcyBtaXNzaW5nXG4iKTsKQEAgLTk5NiwxMCArMTA2MCwxMSBAQAogCQllbHNlCiAJCQlob3N0LT5kYmNsa19lbmFibGVkID0gMTsKIAotI2lmZGVmIENPTkZJR19NTUNfQkxPQ0tfQk9VTkNFCi0JbW1jLT5tYXhfcGh5c19zZWdzID0gMTsKLQltbWMtPm1heF9od19zZWdzID0gMTsKLSNlbmRpZgorCS8qIFNpbmNlIHdlIGRvIG9ubHkgU0cgZW11bGF0aW9uLCB3ZSBjYW4gaGF2ZSBhcyBtYW55IHNlZ3MKKwkgKiBhcyB3ZSB3YW50LiAqLworCW1tYy0+bWF4X3BoeXNfc2VncyA9IDEwMjQ7CisJbW1jLT5tYXhfaHdfc2VncyA9IDEwMjQ7CisKIAltbWMtPm1heF9ibGtfc2l6ZSA9IDUxMjsgICAgICAgLyogQmxvY2sgTGVuZ3RoIGF0IG1heCBjYW4gYmUgMTAyNCAqLwogCW1tYy0+bWF4X2Jsa19jb3VudCA9IDB4RkZGRjsgICAgLyogTm8uIG9mIEJsb2NrcyBpcyAxNiBiaXRzICovCiAJbW1jLT5tYXhfcmVxX3NpemUgPSBtbWMtPm1heF9ibGtfc2l6ZSAqIG1tYy0+bWF4X2Jsa19jb3VudDsKQEAgLTEwMDgsMzIgKzEwNzMsMzIgQEAKIAltbWMtPm9jcl9hdmFpbCA9IG1tY19zbG90KGhvc3QpLm9jcl9tYXNrOwogCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX01NQ19ISUdIU1BFRUQgfCBNTUNfQ0FQX1NEX0hJR0hTUEVFRDsKIAotCWlmIChwZGF0YS0+c2xvdHNbaG9zdC0+c2xvdF9pZF0ud2lyZXMgPj0gNCkKKwlpZiAocGRhdGEtPnNsb3RzW2hvc3QtPnNsb3RfaWRdLndpcmVzID49IDgpCisJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzhfQklUX0RBVEE7CisJZWxzZSBpZiAocGRhdGEtPnNsb3RzW2hvc3QtPnNsb3RfaWRdLndpcmVzID49IDQpCiAJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CiAKLQkvKiBPbmx5IE1NQzEgc3VwcG9ydHMgMy4wViAqLwotCWlmIChob3N0LT5pZCA9PSBPTUFQX01NQzFfREVWSUQpIHsKLQkJaGN0bCA9IFNEVlMzMDsKLQkJY2FwYSA9IFZTMzAgfCBWUzE4OwotCX0gZWxzZSB7Ci0JCWhjdGwgPSBTRFZTMTg7Ci0JCWNhcGEgPSBWUzE4OworCW9tYXBfaHNtbWNfaW5pdChob3N0KTsKKworCS8qIFNlbGVjdCBETUEgbGluZXMgKi8KKwlzd2l0Y2ggKGhvc3QtPmlkKSB7CisJY2FzZSBPTUFQX01NQzFfREVWSUQ6CisJCWhvc3QtPmRtYV9saW5lX3R4ID0gT01BUDI0WFhfRE1BX01NQzFfVFg7CisJCWhvc3QtPmRtYV9saW5lX3J4ID0gT01BUDI0WFhfRE1BX01NQzFfUlg7CisJCWJyZWFrOworCWNhc2UgT01BUF9NTUMyX0RFVklEOgorCQlob3N0LT5kbWFfbGluZV90eCA9IE9NQVAyNFhYX0RNQV9NTUMyX1RYOworCQlob3N0LT5kbWFfbGluZV9yeCA9IE9NQVAyNFhYX0RNQV9NTUMyX1JYOworCQlicmVhazsKKwljYXNlIE9NQVBfTU1DM19ERVZJRDoKKwkJaG9zdC0+ZG1hX2xpbmVfdHggPSBPTUFQMzRYWF9ETUFfTU1DM19UWDsKKwkJaG9zdC0+ZG1hX2xpbmVfcnggPSBPTUFQMzRYWF9ETUFfTU1DM19SWDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihtbWNfZGV2KGhvc3QtPm1tYyksICJJbnZhbGlkIE1NQyBpZFxuIik7CisJCWdvdG8gZXJyX2lycTsKIAl9CiAKLQlPTUFQX0hTTU1DX1dSSVRFKGhvc3QtPmJhc2UsIEhDVEwsCi0JCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkgfCBoY3RsKTsKLQotCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgQ0FQQSwKLQkJCU9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBDQVBBKSB8IGNhcGEpOwotCi0JLyogU2V0IHRoZSBjb250cm9sbGVyIHRvIEFVVE8gSURMRSBtb2RlICovCi0JT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBTWVNDT05GSUcsCi0JCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgU1lTQ09ORklHKSB8IEFVVE9JRExFKTsKLQotCS8qIFNldCBTRCBidXMgcG93ZXIgYml0ICovCi0JT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAotCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpIHwgU0RCUCk7Ci0KIAkvKiBSZXF1ZXN0IElSUSBmb3IgTU1DIG9wZXJhdGlvbnMgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIG1tY19vbWFwX2lycSwgSVJRRl9ESVNBQkxFRCwKIAkJCW1tY19ob3N0bmFtZShtbWMpLCBob3N0KTsKQEAgLTEwNTEsNyArMTExNiw3IEBACiAJfQogCiAJLyogUmVxdWVzdCBJUlEgZm9yIGNhcmQgZGV0ZWN0ICovCi0JaWYgKChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEpICYmIChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdCkpIHsKKwlpZiAoKG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSkpIHsKIAkJcmV0ID0gcmVxdWVzdF9pcnEobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxLAogCQkJCSAgb21hcF9tbWNfY2RfaGFuZGxlciwKIAkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORwpAQCAtMTA3NCw4ICsxMTM5LDggQEAKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGVycl9zbG90X25hbWU7CiAJfQotCWlmIChtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdF9pcnEgJiYgbW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3QgJiYKLQkJCWhvc3QtPnBkYXRhLT5zbG90c1tob3N0LT5zbG90X2lkXS5nZXRfY292ZXJfc3RhdGUpIHsKKwlpZiAobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxICYmCisJICAgIGhvc3QtPnBkYXRhLT5zbG90c1tob3N0LT5zbG90X2lkXS5nZXRfY292ZXJfc3RhdGUpIHsKIAkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZtbWMtPmNsYXNzX2RldiwKIAkJCQkJJmRldl9hdHRyX2NvdmVyX3N3aXRjaCk7CiAJCWlmIChyZXQgPCAwKQpAQCAtMTE3MywyMCArMTIzOCw4IEBACiAJCQkJCQkiIGxldmVsIHN1c3BlbmRcbiIpOwogCQkJfQogCi0JCQlpZiAoaG9zdC0+aWQgPT0gT01BUF9NTUMxX0RFVklECi0JCQkJCSYmICEoT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpCi0JCQkJCQkJJiBTRFZTREVUKSkgewotCQkJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKLQkJCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpCi0JCQkJCSYgU0RWU0NMUik7Ci0JCQkJT01BUF9IU01NQ19XUklURShob3N0LT5iYXNlLCBIQ1RMLAotCQkJCQlPTUFQX0hTTU1DX1JFQUQoaG9zdC0+YmFzZSwgSENUTCkKLQkJCQkJfCBTRFZTMzApOwotCQkJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKLQkJCQkJT01BUF9IU01NQ19SRUFEKGhvc3QtPmJhc2UsIEhDVEwpCi0JCQkJCXwgU0RCUCk7Ci0JCQl9Ci0KKwkJCU9NQVBfSFNNTUNfV1JJVEUoaG9zdC0+YmFzZSwgSENUTCwKKwkJCQkJIE9NQVBfSFNNTUNfUkVBRChob3N0LT5iYXNlLCBIQ1RMKSAmIH5TREJQKTsKIAkJCWNsa19kaXNhYmxlKGhvc3QtPmZjbGspOwogCQkJY2xrX2Rpc2FibGUoaG9zdC0+aWNsayk7CiAJCQljbGtfZGlzYWJsZShob3N0LT5kYmNsayk7CkBAIC0xMjIyLDYgKzEyNzUsOCBAQAogCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksCiAJCQkJCSJFbmFibGluZyBkZWJvdW5jZSBjbGsgZmFpbGVkXG4iKTsKIAorCQlvbWFwX2hzbW1jX2luaXQoaG9zdCk7CisKIAkJaWYgKGhvc3QtPnBkYXRhLT5yZXN1bWUpIHsKIAkJCXJldCA9IGhvc3QtPnBkYXRhLT5yZXN1bWUoJnBkZXYtPmRldiwgaG9zdC0+c2xvdF9pZCk7CiAJCQlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZjRhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLmMKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBPcGVuRmlybXdhcmUgYmluZGluZ3MgZm9yIFNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcnM6IFhpYW9ibyBYaWUgPFguWGllQGZyZWVzY2FsZS5jb20+CisgKgkgICAgQW50b24gVm9yb250c292IDxhdm9yb250c292QHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKyNpbmNsdWRlICJzZGhjaS5oIgorCitzdHJ1Y3Qgc2RoY2lfb2ZfZGF0YSB7CisJdW5zaWduZWQgaW50IHF1aXJrczsKKwlzdHJ1Y3Qgc2RoY2lfb3BzIG9wczsKK307CisKK3N0cnVjdCBzZGhjaV9vZl9ob3N0IHsKKwl1bnNpZ25lZCBpbnQgY2xvY2s7CisJdTE2IHhmZXJfbW9kZV9zaGFkb3c7Cit9OworCisvKgorICogT3BzIGFuZCBxdWlya3MgZm9yIHRoZSBGcmVlc2NhbGUgZVNESEMgY29udHJvbGxlci4KKyAqLworCisjZGVmaW5lIEVTREhDX0RNQV9TWVNDVEwJMHg0MGMKKyNkZWZpbmUgRVNESENfRE1BX1NOT09QCQkweDAwMDAwMDQwCisKKyNkZWZpbmUgRVNESENfU1lTVEVNX0NPTlRST0wJMHgyYworI2RlZmluZSBFU0RIQ19DTE9DS19NQVNLCTB4MDAwMGZmZjAKKyNkZWZpbmUgRVNESENfUFJFRElWX1NISUZUCTgKKyNkZWZpbmUgRVNESENfRElWSURFUl9TSElGVAk0CisjZGVmaW5lIEVTREhDX0NMT0NLX1BFUkVOCTB4MDAwMDAwMDQKKyNkZWZpbmUgRVNESENfQ0xPQ0tfSENLRU4JMHgwMDAwMDAwMgorI2RlZmluZSBFU0RIQ19DTE9DS19JUEdFTgkweDAwMDAwMDAxCisKK3N0YXRpYyB1MzIgZXNkaGNfcmVhZGwoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJcmV0dXJuIGluX2JlMzIoaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIHUxNiBlc2RoY19yZWFkdyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwlyZXR1cm4gaW5fYmUxNihob3N0LT5pb2FkZHIgKyAocmVnIF4gMHgyKSk7Cit9CisKK3N0YXRpYyB1OCBlc2RoY19yZWFkYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwlyZXR1cm4gaW5fOChob3N0LT5pb2FkZHIgKyAocmVnIF4gMHgzKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVzZGhjX3dyaXRlbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIHZhbCwgaW50IHJlZykKK3sKKwlvdXRfYmUzMihob3N0LT5pb2FkZHIgKyByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGVzZGhjX3dyaXRldyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTE2IHZhbCwgaW50IHJlZykKK3sKKwlzdHJ1Y3Qgc2RoY2lfb2ZfaG9zdCAqb2ZfaG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CisJaW50IGJhc2UgPSByZWcgJiB+MHgzOworCWludCBzaGlmdCA9IChyZWcgJiAweDIpICogODsKKworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBTREhDSV9UUkFOU0ZFUl9NT0RFOgorCQkvKgorCQkgKiBQb3N0cG9uZSB0aGlzIHdyaXRlLCB3ZSBtdXN0IGRvIGl0IHRvZ2V0aGVyIHdpdGggYQorCQkgKiBjb21tYW5kIHdyaXRlIHRoYXQgaXMgZG93biBiZWxvdy4KKwkJICovCisJCW9mX2hvc3QtPnhmZXJfbW9kZV9zaGFkb3cgPSB2YWw7CisJCXJldHVybjsKKwljYXNlIFNESENJX0NPTU1BTkQ6CisJCWVzZGhjX3dyaXRlbChob3N0LCB2YWwgPDwgMTYgfCBvZl9ob3N0LT54ZmVyX21vZGVfc2hhZG93LAorCQkJICAgICBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKKwkJcmV0dXJuOworCWNhc2UgU0RIQ0lfQkxPQ0tfU0laRToKKwkJLyoKKwkJICogVHdvIGxhc3QgRE1BIGJpdHMgYXJlIHJlc2VydmVkLCBhbmQgZmlyc3Qgb25lIGlzIHVzZWQgZm9yCisJCSAqIG5vbi1zdGFuZGFyZCBibGtzeiBvZiA0MDk2IGJ5dGVzIHRoYXQgd2UgZG9uJ3Qgc3VwcG9ydAorCQkgKiB5ZXQuIFNvIGNsZWFyIHRoZSBETUEgYm91bmRhcnkgYml0cy4KKwkJICovCisJCXZhbCAmPSB+U0RIQ0lfTUFLRV9CTEtTWigweDcsIDApOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwl9CisJY2xyc2V0Yml0c19iZTMyKGhvc3QtPmlvYWRkciArIGJhc2UsIDB4ZmZmZiA8PCBzaGlmdCwgdmFsIDw8IHNoaWZ0KTsKK30KKworc3RhdGljIHZvaWQgZXNkaGNfd3JpdGViKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1OCB2YWwsIGludCByZWcpCit7CisJaW50IGJhc2UgPSByZWcgJiB+MHgzOworCWludCBzaGlmdCA9IChyZWcgJiAweDMpICogODsKKworCWNscnNldGJpdHNfYmUzMihob3N0LT5pb2FkZHIgKyBiYXNlICwgMHhmZiA8PCBzaGlmdCwgdmFsIDw8IHNoaWZ0KTsKK30KKworc3RhdGljIHZvaWQgZXNkaGNfc2V0X2Nsb2NrKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgY2xvY2spCit7CisJaW50IGRpdjsKKwlpbnQgcHJlX2RpdiA9IDI7CisKKwljbHJiaXRzMzIoaG9zdC0+aW9hZGRyICsgRVNESENfU1lTVEVNX0NPTlRST0wsIEVTREhDX0NMT0NLX0lQR0VOIHwKKwkJICBFU0RIQ19DTE9DS19IQ0tFTiB8IEVTREhDX0NMT0NLX1BFUkVOIHwgRVNESENfQ0xPQ0tfTUFTSyk7CisKKwlpZiAoY2xvY2sgPT0gMCkKKwkJZ290byBvdXQ7CisKKwlpZiAoaG9zdC0+bWF4X2NsayAvIDE2ID4gY2xvY2spIHsKKwkJZm9yICg7IHByZV9kaXYgPCAyNTY7IHByZV9kaXYgKj0gMikgeworCQkJaWYgKGhvc3QtPm1heF9jbGsgLyBwcmVfZGl2IDwgY2xvY2sgKiAxNikKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWZvciAoZGl2ID0gMTsgZGl2IDw9IDE2OyBkaXYrKykgeworCQlpZiAoaG9zdC0+bWF4X2NsayAvIChkaXYgKiBwcmVfZGl2KSA8PSBjbG9jaykKKwkJCWJyZWFrOworCX0KKworCXByZV9kaXYgPj49IDE7CisKKwlzZXRiaXRzMzIoaG9zdC0+aW9hZGRyICsgRVNESENfU1lTVEVNX0NPTlRST0wsIEVTREhDX0NMT0NLX0lQR0VOIHwKKwkJICBFU0RIQ19DTE9DS19IQ0tFTiB8IEVTREhDX0NMT0NLX1BFUkVOIHwKKwkJICBkaXYgPDwgRVNESENfRElWSURFUl9TSElGVCB8IHByZV9kaXYgPDwgRVNESENfUFJFRElWX1NISUZUKTsKKwltZGVsYXkoMTAwKTsKK291dDoKKwlob3N0LT5jbG9jayA9IGNsb2NrOworfQorCitzdGF0aWMgaW50IGVzZGhjX2VuYWJsZV9kbWEoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJc2V0Yml0czMyKGhvc3QtPmlvYWRkciArIEVTREhDX0RNQV9TWVNDVEwsIEVTREhDX0RNQV9TTk9PUCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXNkaGNfZ2V0X21heF9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3Qgc2RoY2lfb2ZfaG9zdCAqb2ZfaG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CisKKwlyZXR1cm4gb2ZfaG9zdC0+Y2xvY2s7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZXNkaGNfZ2V0X3RpbWVvdXRfY2xvY2soc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IHNkaGNpX29mX2hvc3QgKm9mX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOworCisJcmV0dXJuIG9mX2hvc3QtPmNsb2NrIC8gMTAwMDsKK30KKworc3RhdGljIHN0cnVjdCBzZGhjaV9vZl9kYXRhIHNkaGNpX2VzZGhjID0geworCS5xdWlya3MgPSBTREhDSV9RVUlSS19GT1JDRV9CTEtfU1pfMjA0OCB8CisJCSAgU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OIHwKKwkJICBTREhDSV9RVUlSS19JTlZFUlRFRF9XUklURV9QUk9URUNUIHwKKwkJICBTREhDSV9RVUlSS19OT19CVVNZX0lSUSB8CisJCSAgU0RIQ0lfUVVJUktfTk9OU1RBTkRBUkRfQ0xPQ0sgfAorCQkgIFNESENJX1FVSVJLX1BJT19ORUVEU19ERUxBWSB8CisJCSAgU0RIQ0lfUVVJUktfUkVTVE9SRV9JUlFTX0FGVEVSX1JFU0VUIHwKKwkJICBTREhDSV9RVUlSS19OT19DQVJEX05PX1JFU0VULAorCS5vcHMgPSB7CisJCS5yZWFkbCA9IGVzZGhjX3JlYWRsLAorCQkucmVhZHcgPSBlc2RoY19yZWFkdywKKwkJLnJlYWRiID0gZXNkaGNfcmVhZGIsCisJCS53cml0ZWwgPSBlc2RoY193cml0ZWwsCisJCS53cml0ZXcgPSBlc2RoY193cml0ZXcsCisJCS53cml0ZWIgPSBlc2RoY193cml0ZWIsCisJCS5zZXRfY2xvY2sgPSBlc2RoY19zZXRfY2xvY2ssCisJCS5lbmFibGVfZG1hID0gZXNkaGNfZW5hYmxlX2RtYSwKKwkJLmdldF9tYXhfY2xvY2sgPSBlc2RoY19nZXRfbWF4X2Nsb2NrLAorCQkuZ2V0X3RpbWVvdXRfY2xvY2sgPSBlc2RoY19nZXRfdGltZW91dF9jbG9jaywKKwl9LAorfTsKKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50IHNkaGNpX29mX3N1c3BlbmQoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldik7CisKKwlyZXR1cm4gbW1jX3N1c3BlbmRfaG9zdChob3N0LT5tbWMsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBzZGhjaV9vZl9yZXN1bWUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOworCisJcmV0dXJuIG1tY19yZXN1bWVfaG9zdChob3N0LT5tbWMpOworfQorCisjZWxzZQorCisjZGVmaW5lIHNkaGNpX29mX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzZGhjaV9vZl9yZXN1bWUgTlVMTAorCisjZW5kaWYKKworc3RhdGljIGludCBfX2RldmluaXQgc2RoY2lfb2ZfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+bm9kZTsKKwlzdHJ1Y3Qgc2RoY2lfb2ZfZGF0YSAqc2RoY2lfb2ZfZGF0YSA9IG1hdGNoLT5kYXRhOworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0OworCXN0cnVjdCBzZGhjaV9vZl9ob3N0ICpvZl9ob3N0OworCWNvbnN0IHUzMiAqY2xrOworCWludCBzaXplOworCWludCByZXQ7CisKKwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWhvc3QgPSBzZGhjaV9hbGxvY19ob3N0KCZvZmRldi0+ZGV2LCBzaXplb2YoKm9mX2hvc3QpKTsKKwlpZiAoIWhvc3QpCisJCXJldHVybiAtRU5PTUVNOworCisJb2ZfaG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CisJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBob3N0KTsKKworCWhvc3QtPmlvYWRkciA9IG9mX2lvbWFwKG5wLCAwKTsKKwlpZiAoIWhvc3QtPmlvYWRkcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9hZGRyX21hcDsKKwl9CisKKwlob3N0LT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJaWYgKCFob3N0LT5pcnEpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfbm9faXJxOworCX0KKworCWhvc3QtPmh3X25hbWUgPSBkZXZfbmFtZSgmb2ZkZXYtPmRldik7CisJaWYgKHNkaGNpX29mX2RhdGEpIHsKKwkJaG9zdC0+cXVpcmtzID0gc2RoY2lfb2ZfZGF0YS0+cXVpcmtzOworCQlob3N0LT5vcHMgPSAmc2RoY2lfb2ZfZGF0YS0+b3BzOworCX0KKworCWNsayA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNsb2NrLWZyZXF1ZW5jeSIsICZzaXplKTsKKwlpZiAoY2xrICYmIHNpemUgPT0gc2l6ZW9mKCpjbGspICYmICpjbGspCisJCW9mX2hvc3QtPmNsb2NrID0gKmNsazsKKworCXJldCA9IHNkaGNpX2FkZF9ob3N0KGhvc3QpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2FkZF9ob3N0OworCisJcmV0dXJuIDA7CisKK2Vycl9hZGRfaG9zdDoKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKGhvc3QtPmlycSk7CitlcnJfbm9faXJxOgorCWlvdW5tYXAoaG9zdC0+aW9hZGRyKTsKK2Vycl9hZGRyX21hcDoKKwlzZGhjaV9mcmVlX2hvc3QoaG9zdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgc2RoY2lfb2ZfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKKworCXNkaGNpX3JlbW92ZV9ob3N0KGhvc3QsIDApOworCXNkaGNpX2ZyZWVfaG9zdChob3N0KTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKGhvc3QtPmlycSk7CisJaW91bm1hcChob3N0LT5pb2FkZHIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzZGhjaV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZXNkaGMiLCAuZGF0YSA9ICZzZGhjaV9lc2RoYywgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4NTM2LWVzZGhjIiwgLmRhdGEgPSAmc2RoY2lfZXNkaGMsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnZW5lcmljLXNkaGNpIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzZGhjaV9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIHNkaGNpX29mX2RyaXZlciA9IHsKKwkuZHJpdmVyLm5hbWUgPSAic2RoY2ktb2YiLAorCS5tYXRjaF90YWJsZSA9IHNkaGNpX29mX21hdGNoLAorCS5wcm9iZSA9IHNkaGNpX29mX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzZGhjaV9vZl9yZW1vdmUpLAorCS5zdXNwZW5kID0gc2RoY2lfb2Zfc3VzcGVuZCwKKwkucmVzdW1lCT0gc2RoY2lfb2ZfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2RoY2lfb2ZfaW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnNkaGNpX29mX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChzZGhjaV9vZl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHNkaGNpX29mX2V4aXQodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmc2RoY2lfb2ZfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHNkaGNpX29mX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlNlY3VyZSBEaWdpdGFsIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgT0YgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJYaWFvYm8gWGllIDxYLlhpZUBmcmVlc2NhbGUuY29tPiwgIgorCSAgICAgICJBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwppbmRleCBhY2NiNTkyLi4zMGQ4ZTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCkBAIC00OCwzNSArNDgsMzUgQEAKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiA9PT09PT09PT09PT09PSBSRUdJU1RFUiBEVU1QID09PT09PT09PT09PT09XG4iKTsKIAogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IFN5cyBhZGRyOiAweCUwOHggfCBWZXJzaW9uOiAgMHglMDh4XG4iLAotCQlyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9ETUFfQUREUkVTUyksCi0JCXJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfVkVSU0lPTikpOworCQlzZGhjaV9yZWFkbChob3N0LCBTREhDSV9ETUFfQUREUkVTUyksCisJCXNkaGNpX3JlYWR3KGhvc3QsIFNESENJX0hPU1RfVkVSU0lPTikpOwogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IEJsayBzaXplOiAweCUwOHggfCBCbGsgY250OiAgMHglMDh4XG4iLAotCQlyZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19TSVpFKSwKLQkJcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQkxPQ0tfQ09VTlQpKTsKKwkJc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfQkxPQ0tfU0laRSksCisJCXNkaGNpX3JlYWR3KGhvc3QsIFNESENJX0JMT0NLX0NPVU5UKSk7CiAJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogQXJndW1lbnQ6IDB4JTA4eCB8IFRybiBtb2RlOiAweCUwOHhcbiIsCi0JCXJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0FSR1VNRU5UKSwKLQkJcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfVFJBTlNGRVJfTU9ERSkpOworCQlzZGhjaV9yZWFkbChob3N0LCBTREhDSV9BUkdVTUVOVCksCisJCXNkaGNpX3JlYWR3KGhvc3QsIFNESENJX1RSQU5TRkVSX01PREUpKTsKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBQcmVzZW50OiAgMHglMDh4IHwgSG9zdCBjdGw6IDB4JTA4eFxuIiwKLQkJcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfUFJFU0VOVF9TVEFURSksCi0JCXJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCkpOworCQlzZGhjaV9yZWFkbChob3N0LCBTREhDSV9QUkVTRU5UX1NUQVRFKSwKKwkJc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfSE9TVF9DT05UUk9MKSk7CiAJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogUG93ZXI6ICAgIDB4JTA4eCB8IEJsayBnYXA6ICAweCUwOHhcbiIsCi0JCXJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX1BPV0VSX0NPTlRST0wpLAotCQlyZWFkYihob3N0LT5pb2FkZHIgKyBTREhDSV9CTE9DS19HQVBfQ09OVFJPTCkpOworCQlzZGhjaV9yZWFkYihob3N0LCBTREhDSV9QT1dFUl9DT05UUk9MKSwKKwkJc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfQkxPQ0tfR0FQX0NPTlRST0wpKTsKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBXYWtlLXVwOiAgMHglMDh4IHwgQ2xvY2s6ICAgIDB4JTA4eFxuIiwKLQkJcmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfV0FLRV9VUF9DT05UUk9MKSwKLQkJcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCkpOworCQlzZGhjaV9yZWFkYihob3N0LCBTREhDSV9XQUtFX1VQX0NPTlRST0wpLAorCQlzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9DTE9DS19DT05UUk9MKSk7CiAJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX05BTUUgIjogVGltZW91dDogIDB4JTA4eCB8IEludCBzdGF0OiAweCUwOHhcbiIsCi0JCXJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX1RJTUVPVVRfQ09OVFJPTCksCi0JCXJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0lOVF9TVEFUVVMpKTsKKwkJc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfVElNRU9VVF9DT05UUk9MKSwKKwkJc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfSU5UX1NUQVRVUykpOwogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IEludCBlbmFiOiAweCUwOHggfCBTaWcgZW5hYjogMHglMDh4XG4iLAotCQlyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfRU5BQkxFKSwKLQkJcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfU0lHTkFMX0VOQUJMRSkpOworCQlzZGhjaV9yZWFkbChob3N0LCBTREhDSV9JTlRfRU5BQkxFKSwKKwkJc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfU0lHTkFMX0VOQUJMRSkpOwogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6IEFDMTIgZXJyOiAweCUwOHggfCBTbG90IGludDogMHglMDh4XG4iLAotCQlyZWFkdyhob3N0LT5pb2FkZHIgKyBTREhDSV9BQ01EMTJfRVJSKSwKLQkJcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfU0xPVF9JTlRfU1RBVFVTKSk7CisJCXNkaGNpX3JlYWR3KGhvc3QsIFNESENJX0FDTUQxMl9FUlIpLAorCQlzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9TTE9UX0lOVF9TVEFUVVMpKTsKIAlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiBDYXBzOiAgICAgMHglMDh4IHwgTWF4IGN1cnI6IDB4JTA4eFxuIiwKLQkJcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ0FQQUJJTElUSUVTKSwKLQkJcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfTUFYX0NVUlJFTlQpKTsKKwkJc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfQ0FQQUJJTElUSUVTKSwKKwkJc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfTUFYX0NVUlJFTlQpKTsKIAogCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwogfQpAQCAtODcsMTcgKzg3LDY1IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgc2RoY2lfY2xlYXJfc2V0X2lycXMoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiBjbGVhciwgdTMyIHNldCkKK3sKKwl1MzIgaWVyOworCisJaWVyID0gc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfSU5UX0VOQUJMRSk7CisJaWVyICY9IH5jbGVhcjsKKwlpZXIgfD0gc2V0OworCXNkaGNpX3dyaXRlbChob3N0LCBpZXIsIFNESENJX0lOVF9FTkFCTEUpOworCXNkaGNpX3dyaXRlbChob3N0LCBpZXIsIFNESENJX1NJR05BTF9FTkFCTEUpOworfQorCitzdGF0aWMgdm9pZCBzZGhjaV91bm1hc2tfaXJxcyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIGlycXMpCit7CisJc2RoY2lfY2xlYXJfc2V0X2lycXMoaG9zdCwgMCwgaXJxcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX21hc2tfaXJxcyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIGlycXMpCit7CisJc2RoY2lfY2xlYXJfc2V0X2lycXMoaG9zdCwgaXJxcywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNkaGNpX3NldF9jYXJkX2RldGVjdGlvbihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgYm9vbCBlbmFibGUpCit7CisJdTMyIGlycXMgPSBTREhDSV9JTlRfQ0FSRF9SRU1PVkUgfCBTREhDSV9JTlRfQ0FSRF9JTlNFUlQ7CisKKwlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OKQorCQlyZXR1cm47CisKKwlpZiAoZW5hYmxlKQorCQlzZGhjaV91bm1hc2tfaXJxcyhob3N0LCBpcnFzKTsKKwllbHNlCisJCXNkaGNpX21hc2tfaXJxcyhob3N0LCBpcnFzKTsKK30KKworc3RhdGljIHZvaWQgc2RoY2lfZW5hYmxlX2NhcmRfZGV0ZWN0aW9uKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXNkaGNpX3NldF9jYXJkX2RldGVjdGlvbihob3N0LCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgc2RoY2lfZGlzYWJsZV9jYXJkX2RldGVjdGlvbihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3sKKwlzZGhjaV9zZXRfY2FyZF9kZXRlY3Rpb24oaG9zdCwgZmFsc2UpOworfQorCiBzdGF0aWMgdm9pZCBzZGhjaV9yZXNldChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTggbWFzaykKIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJdTMyIHVuaW5pdGlhbGl6ZWRfdmFyKGllcik7CiAKIAlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfTk9fQ0FSRF9OT19SRVNFVCkgewotCQlpZiAoIShyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9QUkVTRU5UX1NUQVRFKSAmCisJCWlmICghKHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX1BSRVNFTlRfU1RBVEUpICYKIAkJCVNESENJX0NBUkRfUFJFU0VOVCkpCiAJCQlyZXR1cm47CiAJfQogCi0Jd3JpdGViKG1hc2ssIGhvc3QtPmlvYWRkciArIFNESENJX1NPRlRXQVJFX1JFU0VUKTsKKwlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfUkVTVE9SRV9JUlFTX0FGVEVSX1JFU0VUKQorCQlpZXIgPSBzZGhjaV9yZWFkbChob3N0LCBTREhDSV9JTlRfRU5BQkxFKTsKKworCXNkaGNpX3dyaXRlYihob3N0LCBtYXNrLCBTREhDSV9TT0ZUV0FSRV9SRVNFVCk7CiAKIAlpZiAobWFzayAmIFNESENJX1JFU0VUX0FMTCkKIAkJaG9zdC0+Y2xvY2sgPSAwOwpAQCAtMTA2LDcgKzE1NCw3IEBACiAJdGltZW91dCA9IDEwMDsKIAogCS8qIGh3IGNsZWFycyB0aGUgYml0IHdoZW4gaXQncyBkb25lICovCi0Jd2hpbGUgKHJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX1NPRlRXQVJFX1JFU0VUKSAmIG1hc2spIHsKKwl3aGlsZSAoc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfU09GVFdBUkVfUkVTRVQpICYgbWFzaykgewogCQlpZiAodGltZW91dCA9PSAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSZXNldCAweCV4IG5ldmVyIGNvbXBsZXRlZC5cbiIsCiAJCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIChpbnQpbWFzayk7CkBAIC0xMTYsNDIgKzE2NCw0NCBAQAogCQl0aW1lb3V0LS07CiAJCW1kZWxheSgxKTsKIAl9CisKKwlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfUkVTVE9SRV9JUlFTX0FGVEVSX1JFU0VUKQorCQlzZGhjaV9jbGVhcl9zZXRfaXJxcyhob3N0LCBTREhDSV9JTlRfQUxMX01BU0ssIGllcik7CiB9CiAKIHN0YXRpYyB2b2lkIHNkaGNpX2luaXQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCiB7Ci0JdTMyIGludG1hc2s7Ci0KIAlzZGhjaV9yZXNldChob3N0LCBTREhDSV9SRVNFVF9BTEwpOwogCi0JaW50bWFzayA9IFNESENJX0lOVF9CVVNfUE9XRVIgfCBTREhDSV9JTlRfREFUQV9FTkRfQklUIHwKKwlzZGhjaV9jbGVhcl9zZXRfaXJxcyhob3N0LCBTREhDSV9JTlRfQUxMX01BU0ssCisJCVNESENJX0lOVF9CVVNfUE9XRVIgfCBTREhDSV9JTlRfREFUQV9FTkRfQklUIHwKIAkJU0RIQ0lfSU5UX0RBVEFfQ1JDIHwgU0RIQ0lfSU5UX0RBVEFfVElNRU9VVCB8IFNESENJX0lOVF9JTkRFWCB8CiAJCVNESENJX0lOVF9FTkRfQklUIHwgU0RIQ0lfSU5UX0NSQyB8IFNESENJX0lOVF9USU1FT1VUIHwKLQkJU0RIQ0lfSU5UX0NBUkRfUkVNT1ZFIHwgU0RIQ0lfSU5UX0NBUkRfSU5TRVJUIHwKLQkJU0RIQ0lfSU5UX0RBVEFfQVZBSUwgfCBTREhDSV9JTlRfU1BBQ0VfQVZBSUwgfAotCQlTREhDSV9JTlRfRE1BX0VORCB8IFNESENJX0lOVF9EQVRBX0VORCB8IFNESENJX0lOVF9SRVNQT05TRSB8Ci0JCVNESENJX0lOVF9BRE1BX0VSUk9SOworCQlTREhDSV9JTlRfREFUQV9FTkQgfCBTREhDSV9JTlRfUkVTUE9OU0UpOworfQogCi0Jd3JpdGVsKGludG1hc2ssIGhvc3QtPmlvYWRkciArIFNESENJX0lOVF9FTkFCTEUpOwotCXdyaXRlbChpbnRtYXNrLCBob3N0LT5pb2FkZHIgKyBTREhDSV9TSUdOQUxfRU5BQkxFKTsKK3N0YXRpYyB2b2lkIHNkaGNpX3JlaW5pdChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3sKKwlzZGhjaV9pbml0KGhvc3QpOworCXNkaGNpX2VuYWJsZV9jYXJkX2RldGVjdGlvbihob3N0KTsKIH0KIAogc3RhdGljIHZvaWQgc2RoY2lfYWN0aXZhdGVfbGVkKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQogewogCXU4IGN0cmw7CiAKLQljdHJsID0gcmVhZGIoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSE9TVF9DT05UUk9MKTsKKwljdHJsID0gc2RoY2lfcmVhZGIoaG9zdCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKIAljdHJsIHw9IFNESENJX0NUUkxfTEVEOwotCXdyaXRlYihjdHJsLCBob3N0LT5pb2FkZHIgKyBTREhDSV9IT1NUX0NPTlRST0wpOworCXNkaGNpX3dyaXRlYihob3N0LCBjdHJsLCBTREhDSV9IT1NUX0NPTlRST0wpOwogfQogCiBzdGF0aWMgdm9pZCBzZGhjaV9kZWFjdGl2YXRlX2xlZChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKIHsKIAl1OCBjdHJsOwogCi0JY3RybCA9IHJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCk7CisJY3RybCA9IHNkaGNpX3JlYWRiKGhvc3QsIFNESENJX0hPU1RfQ09OVFJPTCk7CiAJY3RybCAmPSB+U0RIQ0lfQ1RSTF9MRUQ7Ci0Jd3JpdGViKGN0cmwsIGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCk7CisJc2RoY2lfd3JpdGViKGhvc3QsIGN0cmwsIFNESENJX0hPU1RfQ09OVFJPTCk7CiB9CiAKICNpZmRlZiBTREhDSV9VU0VfTEVEU19DTEFTUwpAQCAtMjA1LDcgKzI1NSw3IEBACiAKIAkJd2hpbGUgKGxlbikgewogCQkJaWYgKGNodW5rID09IDApIHsKLQkJCQlzY3JhdGNoID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQlVGRkVSKTsKKwkJCQlzY3JhdGNoID0gc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfQlVGRkVSKTsKIAkJCQljaHVuayA9IDQ7CiAJCQl9CiAKQEAgLTI1Nyw3ICszMDcsNyBAQAogCQkJbGVuLS07CiAKIAkJCWlmICgoY2h1bmsgPT0gNCkgfHwgKChsZW4gPT0gMCkgJiYgKGJsa3NpemUgPT0gMCkpKSB7Ci0JCQkJd3JpdGVsKHNjcmF0Y2gsIGhvc3QtPmlvYWRkciArIFNESENJX0JVRkZFUik7CisJCQkJc2RoY2lfd3JpdGVsKGhvc3QsIHNjcmF0Y2gsIFNESENJX0JVRkZFUik7CiAJCQkJY2h1bmsgPSAwOwogCQkJCXNjcmF0Y2ggPSAwOwogCQkJfQpAQCAtMjkyLDcgKzM0MiwxMCBAQAogCQkoaG9zdC0+ZGF0YS0+YmxvY2tzID09IDEpKQogCQltYXNrID0gfjA7CiAKLQl3aGlsZSAocmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfUFJFU0VOVF9TVEFURSkgJiBtYXNrKSB7CisJd2hpbGUgKHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX1BSRVNFTlRfU1RBVEUpICYgbWFzaykgeworCQlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfUElPX05FRURTX0RFTEFZKQorCQkJdWRlbGF5KDEwMCk7CisKIAkJaWYgKGhvc3QtPmRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKIAkJCXNkaGNpX3JlYWRfYmxvY2tfcGlvKGhvc3QpOwogCQllbHNlCkBAIC01NjEsNiArNjE0LDE3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgdm9pZCBzZGhjaV9zZXRfdHJhbnNmZXJfaXJxcyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3sKKwl1MzIgcGlvX2lycXMgPSBTREhDSV9JTlRfREFUQV9BVkFJTCB8IFNESENJX0lOVF9TUEFDRV9BVkFJTDsKKwl1MzIgZG1hX2lycXMgPSBTREhDSV9JTlRfRE1BX0VORCB8IFNESENJX0lOVF9BRE1BX0VSUk9SOworCisJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfUkVRX1VTRV9ETUEpCisJCXNkaGNpX2NsZWFyX3NldF9pcnFzKGhvc3QsIHBpb19pcnFzLCBkbWFfaXJxcyk7CisJZWxzZQorCQlzZGhjaV9jbGVhcl9zZXRfaXJxcyhob3N0LCBkbWFfaXJxcywgcGlvX2lycXMpOworfQorCiBzdGF0aWMgdm9pZCBzZGhjaV9wcmVwYXJlX2RhdGEoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKIHsKIAl1OCBjb3VudDsKQEAgLTU4MSw3ICs2NDUsNyBAQAogCWhvc3QtPmRhdGFfZWFybHkgPSAwOwogCiAJY291bnQgPSBzZGhjaV9jYWxjX3RpbWVvdXQoaG9zdCwgZGF0YSk7Ci0Jd3JpdGViKGNvdW50LCBob3N0LT5pb2FkZHIgKyBTREhDSV9USU1FT1VUX0NPTlRST0wpOworCXNkaGNpX3dyaXRlYihob3N0LCBjb3VudCwgU0RIQ0lfVElNRU9VVF9DT05UUk9MKTsKIAogCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9ETUEpCiAJCWhvc3QtPmZsYWdzIHw9IFNESENJX1JFUV9VU0VfRE1BOwpAQCAtNjYxLDggKzcyNSw4IEBACiAJCQkJV0FSTl9PTigxKTsKIAkJCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfUkVRX1VTRV9ETUE7CiAJCQl9IGVsc2UgewotCQkJCXdyaXRlbChob3N0LT5hZG1hX2FkZHIsCi0JCQkJCWhvc3QtPmlvYWRkciArIFNESENJX0FETUFfQUREUkVTUyk7CisJCQkJc2RoY2lfd3JpdGVsKGhvc3QsIGhvc3QtPmFkbWFfYWRkciwKKwkJCQkJU0RIQ0lfQURNQV9BRERSRVNTKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWludCBzZ19jbnQ7CkBAIC02ODEsOCArNzQ1LDggQEAKIAkJCQlob3N0LT5mbGFncyAmPSB+U0RIQ0lfUkVRX1VTRV9ETUE7CiAJCQl9IGVsc2UgewogCQkJCVdBUk5fT04oc2dfY250ICE9IDEpOwotCQkJCXdyaXRlbChzZ19kbWFfYWRkcmVzcyhkYXRhLT5zZyksCi0JCQkJCWhvc3QtPmlvYWRkciArIFNESENJX0RNQV9BRERSRVNTKTsKKwkJCQlzZGhjaV93cml0ZWwoaG9zdCwgc2dfZG1hX2FkZHJlc3MoZGF0YS0+c2cpLAorCQkJCQlTREhDSV9ETUFfQUREUkVTUyk7CiAJCQl9CiAJCX0KIAl9CkBAIC02OTMsMTQgKzc1NywxNCBAQAogCSAqIGlzIEFETUEuCiAJICovCiAJaWYgKGhvc3QtPnZlcnNpb24gPj0gU0RIQ0lfU1BFQ18yMDApIHsKLQkJY3RybCA9IHJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCk7CisJCWN0cmwgPSBzZGhjaV9yZWFkYihob3N0LCBTREhDSV9IT1NUX0NPTlRST0wpOwogCQljdHJsICY9IH5TREhDSV9DVFJMX0RNQV9NQVNLOwogCQlpZiAoKGhvc3QtPmZsYWdzICYgU0RIQ0lfUkVRX1VTRV9ETUEpICYmCiAJCQkoaG9zdC0+ZmxhZ3MgJiBTREhDSV9VU0VfQURNQSkpCiAJCQljdHJsIHw9IFNESENJX0NUUkxfQURNQTMyOwogCQllbHNlCiAJCQljdHJsIHw9IFNESENJX0NUUkxfU0RNQTsKLQkJd3JpdGViKGN0cmwsIGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCk7CisJCXNkaGNpX3dyaXRlYihob3N0LCBjdHJsLCBTREhDSV9IT1NUX0NPTlRST0wpOwogCX0KIAogCWlmICghKGhvc3QtPmZsYWdzICYgU0RIQ0lfUkVRX1VTRV9ETUEpKSB7CkBAIC03MDksMTAgKzc3MywxMSBAQAogCQlob3N0LT5ibG9ja3MgPSBkYXRhLT5ibG9ja3M7CiAJfQogCisJc2RoY2lfc2V0X3RyYW5zZmVyX2lycXMoaG9zdCk7CisKIAkvKiBXZSBkbyBub3QgaGFuZGxlIERNQSBib3VuZGFyaWVzLCBzbyBzZXQgaXQgdG8gbWF4ICg1MTIgS2lCKSAqLwotCXdyaXRldyhTREhDSV9NQUtFX0JMS1NaKDcsIGRhdGEtPmJsa3N6KSwKLQkJaG9zdC0+aW9hZGRyICsgU0RIQ0lfQkxPQ0tfU0laRSk7Ci0Jd3JpdGV3KGRhdGEtPmJsb2NrcywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQkxPQ0tfQ09VTlQpOworCXNkaGNpX3dyaXRldyhob3N0LCBTREhDSV9NQUtFX0JMS1NaKDcsIGRhdGEtPmJsa3N6KSwgU0RIQ0lfQkxPQ0tfU0laRSk7CisJc2RoY2lfd3JpdGV3KGhvc3QsIGRhdGEtPmJsb2NrcywgU0RIQ0lfQkxPQ0tfQ09VTlQpOwogfQogCiBzdGF0aWMgdm9pZCBzZGhjaV9zZXRfdHJhbnNmZXJfbW9kZShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwKQEAgLTczMyw3ICs3OTgsNyBAQAogCWlmIChob3N0LT5mbGFncyAmIFNESENJX1JFUV9VU0VfRE1BKQogCQltb2RlIHw9IFNESENJX1RSTlNfRE1BOwogCi0Jd3JpdGV3KG1vZGUsIGhvc3QtPmlvYWRkciArIFNESENJX1RSQU5TRkVSX01PREUpOworCXNkaGNpX3dyaXRldyhob3N0LCBtb2RlLCBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKIH0KIAogc3RhdGljIHZvaWQgc2RoY2lfZmluaXNoX2RhdGEoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCkBAIC04MDIsNyArODY3LDcgQEAKIAlpZiAoaG9zdC0+bXJxLT5kYXRhICYmIChjbWQgPT0gaG9zdC0+bXJxLT5kYXRhLT5zdG9wKSkKIAkJbWFzayAmPSB+U0RIQ0lfREFUQV9JTkhJQklUOwogCi0Jd2hpbGUgKHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1BSRVNFTlRfU1RBVEUpICYgbWFzaykgeworCXdoaWxlIChzZGhjaV9yZWFkbChob3N0LCBTREhDSV9QUkVTRU5UX1NUQVRFKSAmIG1hc2spIHsKIAkJaWYgKHRpbWVvdXQgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ29udHJvbGxlciBuZXZlciByZWxlYXNlZCAiCiAJCQkJImluaGliaXQgYml0KHMpLlxuIiwgbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOwpAQCAtODIxLDcgKzg4Niw3IEBACiAKIAlzZGhjaV9wcmVwYXJlX2RhdGEoaG9zdCwgY21kLT5kYXRhKTsKIAotCXdyaXRlbChjbWQtPmFyZywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQVJHVU1FTlQpOworCXNkaGNpX3dyaXRlbChob3N0LCBjbWQtPmFyZywgU0RIQ0lfQVJHVU1FTlQpOwogCiAJc2RoY2lfc2V0X3RyYW5zZmVyX21vZGUoaG9zdCwgY21kLT5kYXRhKTsKIApAQCAtODQ5LDggKzkxNCw3IEBACiAJaWYgKGNtZC0+ZGF0YSkKIAkJZmxhZ3MgfD0gU0RIQ0lfQ01EX0RBVEE7CiAKLQl3cml0ZXcoU0RIQ0lfTUFLRV9DTUQoY21kLT5vcGNvZGUsIGZsYWdzKSwKLQkJaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ09NTUFORCk7CisJc2RoY2lfd3JpdGV3KGhvc3QsIFNESENJX01BS0VfQ01EKGNtZC0+b3Bjb2RlLCBmbGFncyksIFNESENJX0NPTU1BTkQpOwogfQogCiBzdGF0aWMgdm9pZCBzZGhjaV9maW5pc2hfY29tbWFuZChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKQEAgLTg2MywxNSArOTI3LDE1IEBACiAJCWlmIChob3N0LT5jbWQtPmZsYWdzICYgTU1DX1JTUF8xMzYpIHsKIAkJCS8qIENSQyBpcyBzdHJpcHBlZCBzbyB3ZSBuZWVkIHRvIGRvIHNvbWUgc2hpZnRpbmcuICovCiAJCQlmb3IgKGkgPSAwO2kgPCA0O2krKykgewotCQkJCWhvc3QtPmNtZC0+cmVzcFtpXSA9IHJlYWRsKGhvc3QtPmlvYWRkciArCisJCQkJaG9zdC0+Y21kLT5yZXNwW2ldID0gc2RoY2lfcmVhZGwoaG9zdCwKIAkJCQkJU0RIQ0lfUkVTUE9OU0UgKyAoMy1pKSo0KSA8PCA4OwogCQkJCWlmIChpICE9IDMpCiAJCQkJCWhvc3QtPmNtZC0+cmVzcFtpXSB8PQotCQkJCQkJcmVhZGIoaG9zdC0+aW9hZGRyICsKKwkJCQkJCXNkaGNpX3JlYWRiKGhvc3QsCiAJCQkJCQlTREhDSV9SRVNQT05TRSArICgzLWkpKjQtMSk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlob3N0LT5jbWQtPnJlc3BbMF0gPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9SRVNQT05TRSk7CisJCQlob3N0LT5jbWQtPnJlc3BbMF0gPSBzZGhjaV9yZWFkbChob3N0LCBTREhDSV9SRVNQT05TRSk7CiAJCX0KIAl9CiAKQEAgLTg5NSw3ICs5NTksMTMgQEAKIAlpZiAoY2xvY2sgPT0gaG9zdC0+Y2xvY2spCiAJCXJldHVybjsKIAotCXdyaXRldygwLCBob3N0LT5pb2FkZHIgKyBTREhDSV9DTE9DS19DT05UUk9MKTsKKwlpZiAoaG9zdC0+b3BzLT5zZXRfY2xvY2spIHsKKwkJaG9zdC0+b3BzLT5zZXRfY2xvY2soaG9zdCwgY2xvY2spOworCQlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfTk9OU1RBTkRBUkRfQ0xPQ0spCisJCQlyZXR1cm47CisJfQorCisJc2RoY2lfd3JpdGV3KGhvc3QsIDAsIFNESENJX0NMT0NLX0NPTlRST0wpOwogCiAJaWYgKGNsb2NrID09IDApCiAJCWdvdG8gb3V0OwpAQCAtOTA4LDExICs5NzgsMTEgQEAKIAogCWNsayA9IGRpdiA8PCBTREhDSV9ESVZJREVSX1NISUZUOwogCWNsayB8PSBTREhDSV9DTE9DS19JTlRfRU47Ci0Jd3JpdGV3KGNsaywgaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCk7CisJc2RoY2lfd3JpdGV3KGhvc3QsIGNsaywgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCk7CiAKIAkvKiBXYWl0IG1heCAxMCBtcyAqLwogCXRpbWVvdXQgPSAxMDsKLQl3aGlsZSAoISgoY2xrID0gcmVhZHcoaG9zdC0+aW9hZGRyICsgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCkpCisJd2hpbGUgKCEoKGNsayA9IHNkaGNpX3JlYWR3KGhvc3QsIFNESENJX0NMT0NLX0NPTlRST0wpKQogCQkmIFNESENJX0NMT0NLX0lOVF9TVEFCTEUpKSB7CiAJCWlmICh0aW1lb3V0ID09IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludGVybmFsIGNsb2NrIG5ldmVyICIKQEAgLTkyNSw3ICs5OTUsNyBAQAogCX0KIAogCWNsayB8PSBTREhDSV9DTE9DS19DQVJEX0VOOwotCXdyaXRldyhjbGssIGhvc3QtPmlvYWRkciArIFNESENJX0NMT0NLX0NPTlRST0wpOworCXNkaGNpX3dyaXRldyhob3N0LCBjbGssIFNESENJX0NMT0NLX0NPTlRST0wpOwogCiBvdXQ6CiAJaG9zdC0+Y2xvY2sgPSBjbG9jazsKQEAgLTkzOSw3ICsxMDA5LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKHBvd2VyID09ICh1bnNpZ25lZCBzaG9ydCktMSkgewotCQl3cml0ZWIoMCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfUE9XRVJfQ09OVFJPTCk7CisJCXNkaGNpX3dyaXRlYihob3N0LCAwLCBTREhDSV9QT1dFUl9DT05UUk9MKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC05NDgsNyArMTAxOCw3IEBACiAJICogYSBuZXcgdmFsdWUuIFNvbWUgY29udHJvbGxlcnMgZG9uJ3Qgc2VlbSB0byBsaWtlIHRoaXMgdGhvdWdoLgogCSAqLwogCWlmICghKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX1NJTkdMRV9QT1dFUl9XUklURSkpCi0JCXdyaXRlYigwLCBob3N0LT5pb2FkZHIgKyBTREhDSV9QT1dFUl9DT05UUk9MKTsKKwkJc2RoY2lfd3JpdGViKGhvc3QsIDAsIFNESENJX1BPV0VSX0NPTlRST0wpOwogCiAJcHdyID0gU0RIQ0lfUE9XRVJfT047CiAKQEAgLTk3MywxMCArMTA0Myw5IEBACiAJICogYW5kIHNldCB0dXJuIG9uIHBvd2VyIGF0IHRoZSBzYW1lIHRpbWUsIHNvIHNldCB0aGUgdm9sdGFnZSBmaXJzdC4KIAkgKi8KIAlpZiAoKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX05PX1NJTVVMVF9WRERfQU5EX1BPV0VSKSkKLQkJd3JpdGViKHB3ciAmIH5TREhDSV9QT1dFUl9PTiwKLQkJCQlob3N0LT5pb2FkZHIgKyBTREhDSV9QT1dFUl9DT05UUk9MKTsKKwkJc2RoY2lfd3JpdGViKGhvc3QsIHB3ciAmIH5TREhDSV9QT1dFUl9PTiwgU0RIQ0lfUE9XRVJfQ09OVFJPTCk7CiAKLQl3cml0ZWIocHdyLCBob3N0LT5pb2FkZHIgKyBTREhDSV9QT1dFUl9DT05UUk9MKTsKKwlzZGhjaV93cml0ZWIoaG9zdCwgcHdyLCBTREhDSV9QT1dFUl9DT05UUk9MKTsKIAogb3V0OgogCWhvc3QtPnBvd2VyID0gcG93ZXI7CkBAIC05OTEsNiArMTA2MCw3IEBACiBzdGF0aWMgdm9pZCBzZGhjaV9yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKIHsKIAlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdDsKKwlib29sIHByZXNlbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWhvc3QgPSBtbWNfcHJpdihtbWMpOwpAQCAtMTAwNSw4ICsxMDc1LDE0IEBACiAKIAlob3N0LT5tcnEgPSBtcnE7CiAKLQlpZiAoIShyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9QUkVTRU5UX1NUQVRFKSAmIFNESENJX0NBUkRfUFJFU0VOVCkKLQkJfHwgKGhvc3QtPmZsYWdzICYgU0RIQ0lfREVWSUNFX0RFQUQpKSB7CisJLyogSWYgcG9sbGluZywgYXNzdW1lIHRoYXQgdGhlIGNhcmQgaXMgYWx3YXlzIHByZXNlbnQuICovCisJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTikKKwkJcHJlc2VudCA9IHRydWU7CisJZWxzZQorCQlwcmVzZW50ID0gc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfUFJFU0VOVF9TVEFURSkgJgorCQkJCVNESENJX0NBUkRfUFJFU0VOVDsKKworCWlmICghcHJlc2VudCB8fCBob3N0LT5mbGFncyAmIFNESENJX0RFVklDRV9ERUFEKSB7CiAJCWhvc3QtPm1ycS0+Y21kLT5lcnJvciA9IC1FTk9NRURJVU07CiAJCXRhc2tsZXRfc2NoZWR1bGUoJmhvc3QtPmZpbmlzaF90YXNrbGV0KTsKIAl9IGVsc2UKQEAgLTEwMzQsOCArMTExMCw4IEBACiAJICogU2hvdWxkIGNsZWFyIG91dCBhbnkgd2VpcmQgc3RhdGVzLgogCSAqLwogCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRikgewotCQl3cml0ZWwoMCwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfU0lHTkFMX0VOQUJMRSk7Ci0JCXNkaGNpX2luaXQoaG9zdCk7CisJCXNkaGNpX3dyaXRlbChob3N0LCAwLCBTREhDSV9TSUdOQUxfRU5BQkxFKTsKKwkJc2RoY2lfcmVpbml0KGhvc3QpOwogCX0KIAogCXNkaGNpX3NldF9jbG9jayhob3N0LCBpb3MtPmNsb2NrKTsKQEAgLTEwNDUsNyArMTEyMSw3IEBACiAJZWxzZQogCQlzZGhjaV9zZXRfcG93ZXIoaG9zdCwgaW9zLT52ZGQpOwogCi0JY3RybCA9IHJlYWRiKGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCk7CisJY3RybCA9IHNkaGNpX3JlYWRiKGhvc3QsIFNESENJX0hPU1RfQ09OVFJPTCk7CiAKIAlpZiAoaW9zLT5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF80KQogCQljdHJsIHw9IFNESENJX0NUUkxfNEJJVEJVUzsKQEAgLTEwNTcsNyArMTEzMyw3IEBACiAJZWxzZQogCQljdHJsICY9IH5TREhDSV9DVFJMX0hJU1BEOwogCi0Jd3JpdGViKGN0cmwsIGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfQ09OVFJPTCk7CisJc2RoY2lfd3JpdGViKGhvc3QsIGN0cmwsIFNESENJX0hPU1RfQ09OVFJPTCk7CiAKIAkvKgogCSAqIFNvbWUgKEVORSkgY29udHJvbGxlcnMgZ28gYXBlc2hpdCBvbiBzb21lIGlvcyBvcGVyYXRpb24sCkBAIC0xMDg1LDEwICsxMTYxLDEyIEBACiAJaWYgKGhvc3QtPmZsYWdzICYgU0RIQ0lfREVWSUNFX0RFQUQpCiAJCXByZXNlbnQgPSAwOwogCWVsc2UKLQkJcHJlc2VudCA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX1BSRVNFTlRfU1RBVEUpOworCQlwcmVzZW50ID0gc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfUFJFU0VOVF9TVEFURSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAKKwlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfSU5WRVJURURfV1JJVEVfUFJPVEVDVCkKKwkJcmV0dXJuICEhKHByZXNlbnQgJiBTREhDSV9XUklURV9QUk9URUNUKTsKIAlyZXR1cm4gIShwcmVzZW50ICYgU0RIQ0lfV1JJVEVfUFJPVEVDVCk7CiB9CiAKQEAgLTEwOTYsNyArMTE3NCw2IEBACiB7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgaWVyOwogCiAJaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKQEAgLTExMDUsMTUgKzExODIsMTAgQEAKIAlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9ERVZJQ0VfREVBRCkKIAkJZ290byBvdXQ7CiAKLQlpZXIgPSByZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfRU5BQkxFKTsKLQotCWllciAmPSB+U0RIQ0lfSU5UX0NBUkRfSU5UOwogCWlmIChlbmFibGUpCi0JCWllciB8PSBTREhDSV9JTlRfQ0FSRF9JTlQ7Ci0KLQl3cml0ZWwoaWVyLCBob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfRU5BQkxFKTsKLQl3cml0ZWwoaWVyLCBob3N0LT5pb2FkZHIgKyBTREhDSV9TSUdOQUxfRU5BQkxFKTsKLQorCQlzZGhjaV91bm1hc2tfaXJxcyhob3N0LCBTREhDSV9JTlRfQ0FSRF9JTlQpOworCWVsc2UKKwkJc2RoY2lfbWFza19pcnFzKGhvc3QsIFNESENJX0lOVF9DQVJEX0lOVCk7CiBvdXQ6CiAJbW1pb3diKCk7CiAKQEAgLTExNDIsNyArMTIxNCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKCEocmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfUFJFU0VOVF9TVEFURSkgJiBTREhDSV9DQVJEX1BSRVNFTlQpKSB7CisJaWYgKCEoc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfUFJFU0VOVF9TVEFURSkgJiBTREhDSV9DQVJEX1BSRVNFTlQpKSB7CiAJCWlmIChob3N0LT5tcnEpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhcmQgcmVtb3ZlZCBkdXJpbmcgdHJhbnNmZXIhXG4iLAogCQkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpKTsKQEAgLTEzNDYsOCArMTQxOCw4IEBACiAJCSAqIHdlIG5lZWQgdG8gYXQgbGVhc3QgcmVzdGFydCB0aGUgdHJhbnNmZXIuCiAJCSAqLwogCQlpZiAoaW50bWFzayAmIFNESENJX0lOVF9ETUFfRU5EKQotCQkJd3JpdGVsKHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0RNQV9BRERSRVNTKSwKLQkJCQlob3N0LT5pb2FkZHIgKyBTREhDSV9ETUFfQUREUkVTUyk7CisJCQlzZGhjaV93cml0ZWwoaG9zdCwgc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfRE1BX0FERFJFU1MpLAorCQkJCVNESENJX0RNQV9BRERSRVNTKTsKIAogCQlpZiAoaW50bWFzayAmIFNESENJX0lOVF9EQVRBX0VORCkgewogCQkJaWYgKGhvc3QtPmNtZCkgewpAQCAtMTM3Myw3ICsxNDQ1LDcgQEAKIAogCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7CiAKLQlpbnRtYXNrID0gcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX1NUQVRVUyk7CisJaW50bWFzayA9IHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0lOVF9TVEFUVVMpOwogCiAJaWYgKCFpbnRtYXNrIHx8IGludG1hc2sgPT0gMHhmZmZmZmZmZikgewogCQlyZXN1bHQgPSBJUlFfTk9ORTsKQEAgLTEzODQsMjIgKzE0NTYsMjIgQEAKIAkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYyksIGludG1hc2spOwogCiAJaWYgKGludG1hc2sgJiAoU0RIQ0lfSU5UX0NBUkRfSU5TRVJUIHwgU0RIQ0lfSU5UX0NBUkRfUkVNT1ZFKSkgewotCQl3cml0ZWwoaW50bWFzayAmIChTREhDSV9JTlRfQ0FSRF9JTlNFUlQgfCBTREhDSV9JTlRfQ0FSRF9SRU1PVkUpLAotCQkJaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX1NUQVRVUyk7CisJCXNkaGNpX3dyaXRlbChob3N0LCBpbnRtYXNrICYgKFNESENJX0lOVF9DQVJEX0lOU0VSVCB8CisJCQlTREhDSV9JTlRfQ0FSRF9SRU1PVkUpLCBTREhDSV9JTlRfU1RBVFVTKTsKIAkJdGFza2xldF9zY2hlZHVsZSgmaG9zdC0+Y2FyZF90YXNrbGV0KTsKIAl9CiAKIAlpbnRtYXNrICY9IH4oU0RIQ0lfSU5UX0NBUkRfSU5TRVJUIHwgU0RIQ0lfSU5UX0NBUkRfUkVNT1ZFKTsKIAogCWlmIChpbnRtYXNrICYgU0RIQ0lfSU5UX0NNRF9NQVNLKSB7Ci0JCXdyaXRlbChpbnRtYXNrICYgU0RIQ0lfSU5UX0NNRF9NQVNLLAotCQkJaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX1NUQVRVUyk7CisJCXNkaGNpX3dyaXRlbChob3N0LCBpbnRtYXNrICYgU0RIQ0lfSU5UX0NNRF9NQVNLLAorCQkJU0RIQ0lfSU5UX1NUQVRVUyk7CiAJCXNkaGNpX2NtZF9pcnEoaG9zdCwgaW50bWFzayAmIFNESENJX0lOVF9DTURfTUFTSyk7CiAJfQogCiAJaWYgKGludG1hc2sgJiBTREhDSV9JTlRfREFUQV9NQVNLKSB7Ci0JCXdyaXRlbChpbnRtYXNrICYgU0RIQ0lfSU5UX0RBVEFfTUFTSywKLQkJCWhvc3QtPmlvYWRkciArIFNESENJX0lOVF9TVEFUVVMpOworCQlzZGhjaV93cml0ZWwoaG9zdCwgaW50bWFzayAmIFNESENJX0lOVF9EQVRBX01BU0ssCisJCQlTREhDSV9JTlRfU1RBVFVTKTsKIAkJc2RoY2lfZGF0YV9pcnEoaG9zdCwgaW50bWFzayAmIFNESENJX0lOVF9EQVRBX01BU0spOwogCX0KIApAQCAtMTQxMCw3ICsxNDgyLDcgQEAKIAlpZiAoaW50bWFzayAmIFNESENJX0lOVF9CVVNfUE9XRVIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FyZCBpcyBjb25zdW1pbmcgdG9vIG11Y2ggcG93ZXIhXG4iLAogCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOwotCQl3cml0ZWwoU0RIQ0lfSU5UX0JVU19QT1dFUiwgaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX1NUQVRVUyk7CisJCXNkaGNpX3dyaXRlbChob3N0LCBTREhDSV9JTlRfQlVTX1BPV0VSLCBTREhDSV9JTlRfU1RBVFVTKTsKIAl9CiAKIAlpbnRtYXNrICY9IH5TREhDSV9JTlRfQlVTX1BPV0VSOwpAQCAtMTQyNSw3ICsxNDk3LDcgQEAKIAkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBpbnRtYXNrKTsKIAkJc2RoY2lfZHVtcHJlZ3MoaG9zdCk7CiAKLQkJd3JpdGVsKGludG1hc2ssIGhvc3QtPmlvYWRkciArIFNESENJX0lOVF9TVEFUVVMpOworCQlzZGhjaV93cml0ZWwoaG9zdCwgaW50bWFzaywgU0RIQ0lfSU5UX1NUQVRVUyk7CiAJfQogCiAJcmVzdWx0ID0gSVJRX0hBTkRMRUQ7CkBAIC0xNDU1LDYgKzE1MjcsOCBAQAogewogCWludCByZXQ7CiAKKwlzZGhjaV9kaXNhYmxlX2NhcmRfZGV0ZWN0aW9uKGhvc3QpOworCiAJcmV0ID0gbW1jX3N1c3BlbmRfaG9zdChob3N0LT5tbWMsIHN0YXRlKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTQ4Nyw2ICsxNTYxLDggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJc2RoY2lfZW5hYmxlX2NhcmRfZGV0ZWN0aW9uKGhvc3QpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MzcsNyArMTYxMyw3IEBACiAKIAlzZGhjaV9yZXNldChob3N0LCBTREhDSV9SRVNFVF9BTEwpOwogCi0JaG9zdC0+dmVyc2lvbiA9IHJlYWR3KGhvc3QtPmlvYWRkciArIFNESENJX0hPU1RfVkVSU0lPTik7CisJaG9zdC0+dmVyc2lvbiA9IHNkaGNpX3JlYWR3KGhvc3QsIFNESENJX0hPU1RfVkVSU0lPTik7CiAJaG9zdC0+dmVyc2lvbiA9IChob3N0LT52ZXJzaW9uICYgU0RIQ0lfU1BFQ19WRVJfTUFTSykKIAkJCQk+PiBTREhDSV9TUEVDX1ZFUl9TSElGVDsKIAlpZiAoaG9zdC0+dmVyc2lvbiA+IFNESENJX1NQRUNfMjAwKSB7CkBAIC0xNTQ2LDcgKzE2MjIsNyBAQAogCQkJaG9zdC0+dmVyc2lvbik7CiAJfQogCi0JY2FwcyA9IHJlYWRsKGhvc3QtPmlvYWRkciArIFNESENJX0NBUEFCSUxJVElFUyk7CisJY2FwcyA9IHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0NBUEFCSUxJVElFUyk7CiAKIAlpZiAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfRk9SQ0VfRE1BKQogCQlob3N0LT5mbGFncyB8PSBTREhDSV9VU0VfRE1BOwpAQCAtMTYxNCwxOSArMTY5MCwyNyBAQAogCiAJaG9zdC0+bWF4X2NsayA9CiAJCShjYXBzICYgU0RIQ0lfQ0xPQ0tfQkFTRV9NQVNLKSA+PiBTREhDSV9DTE9DS19CQVNFX1NISUZUOwotCWlmIChob3N0LT5tYXhfY2xrID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSGFyZHdhcmUgZG9lc24ndCBzcGVjaWZ5IGJhc2UgY2xvY2sgIgotCQkJImZyZXF1ZW5jeS5cbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCWhvc3QtPm1heF9jbGsgKj0gMTAwMDAwMDsKKwlpZiAoaG9zdC0+bWF4X2NsayA9PSAwKSB7CisJCWlmICghaG9zdC0+b3BzLT5nZXRfbWF4X2Nsb2NrKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IEhhcmR3YXJlIGRvZXNuJ3Qgc3BlY2lmeSBiYXNlIGNsb2NrICIKKwkJCSAgICAgICAiZnJlcXVlbmN5LlxuIiwgbW1jX2hvc3RuYW1lKG1tYykpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJaG9zdC0+bWF4X2NsayA9IGhvc3QtPm9wcy0+Z2V0X21heF9jbG9jayhob3N0KTsKKwl9CiAKIAlob3N0LT50aW1lb3V0X2NsayA9CiAJCShjYXBzICYgU0RIQ0lfVElNRU9VVF9DTEtfTUFTSykgPj4gU0RIQ0lfVElNRU9VVF9DTEtfU0hJRlQ7CiAJaWYgKGhvc3QtPnRpbWVvdXRfY2xrID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogSGFyZHdhcmUgZG9lc24ndCBzcGVjaWZ5IHRpbWVvdXQgY2xvY2sgIgotCQkJImZyZXF1ZW5jeS5cbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmICghaG9zdC0+b3BzLT5nZXRfdGltZW91dF9jbG9jaykgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBIYXJkd2FyZSBkb2Vzbid0IHNwZWNpZnkgdGltZW91dCBjbG9jayAiCisJCQkgICAgICAgImZyZXF1ZW5jeS5cbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWhvc3QtPnRpbWVvdXRfY2xrID0gaG9zdC0+b3BzLT5nZXRfdGltZW91dF9jbG9jayhob3N0KTsKIAl9CiAJaWYgKGNhcHMgJiBTREhDSV9USU1FT1VUX0NMS19VTklUKQogCQlob3N0LT50aW1lb3V0X2NsayAqPSAxMDAwOwpAQCAtMTY0Miw2ICsxNzI2LDkgQEAKIAlpZiAoY2FwcyAmIFNESENJX0NBTl9ET19ISVNQRCkKIAkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfU0RfSElHSFNQRUVEOwogCisJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX0JST0tFTl9DQVJEX0RFVEVDVElPTikKKwkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfTkVFRFNfUE9MTDsKKwogCW1tYy0+b2NyX2F2YWlsID0gMDsKIAlpZiAoY2FwcyAmIFNESENJX0NBTl9WRERfMzMwKQogCQltbWMtPm9jcl9hdmFpbCB8PSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQ7CkBAIC0xNjkwLDEzICsxNzc3LDE5IEBACiAJICogTWF4aW11bSBibG9jayBzaXplLiBUaGlzIHZhcmllcyBmcm9tIGNvbnRyb2xsZXIgdG8gY29udHJvbGxlciBhbmQKIAkgKiBpcyBzcGVjaWZpZWQgaW4gdGhlIGNhcGFiaWxpdGllcyByZWdpc3Rlci4KIAkgKi8KLQltbWMtPm1heF9ibGtfc2l6ZSA9IChjYXBzICYgU0RIQ0lfTUFYX0JMT0NLX01BU0spID4+IFNESENJX01BWF9CTE9DS19TSElGVDsKLQlpZiAobW1jLT5tYXhfYmxrX3NpemUgPj0gMykgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSW52YWxpZCBtYXhpbXVtIGJsb2NrIHNpemUsICIKLQkJCSJhc3N1bWluZyA1MTIgYnl0ZXNcbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKLQkJbW1jLT5tYXhfYmxrX3NpemUgPSA1MTI7Ci0JfSBlbHNlCi0JCW1tYy0+bWF4X2Jsa19zaXplID0gNTEyIDw8IG1tYy0+bWF4X2Jsa19zaXplOworCWlmIChob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19GT1JDRV9CTEtfU1pfMjA0OCkgeworCQltbWMtPm1heF9ibGtfc2l6ZSA9IDI7CisJfSBlbHNlIHsKKwkJbW1jLT5tYXhfYmxrX3NpemUgPSAoY2FwcyAmIFNESENJX01BWF9CTE9DS19NQVNLKSA+PgorCQkJCVNESENJX01BWF9CTE9DS19TSElGVDsKKwkJaWYgKG1tYy0+bWF4X2Jsa19zaXplID49IDMpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJbnZhbGlkIG1heGltdW0gYmxvY2sgc2l6ZSwgIgorCQkJCSJhc3N1bWluZyA1MTIgYnl0ZXNcbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKKwkJCW1tYy0+bWF4X2Jsa19zaXplID0gMDsKKwkJfQorCX0KKworCW1tYy0+bWF4X2Jsa19zaXplID0gNTEyIDw8IG1tYy0+bWF4X2Jsa19zaXplOwogCiAJLyoKIAkgKiBNYXhpbXVtIGJsb2NrIGNvdW50LgpAQCAtMTc0Niw2ICsxODM5LDggQEAKIAkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0FETUEpPyJBIjoiIiwKIAkJKGhvc3QtPmZsYWdzICYgU0RIQ0lfVVNFX0RNQSk/IkRNQSI6IlBJTyIpOwogCisJc2RoY2lfZW5hYmxlX2NhcmRfZGV0ZWN0aW9uKGhvc3QpOworCiAJcmV0dXJuIDA7CiAKICNpZmRlZiBTREhDSV9VU0VfTEVEU19DTEFTUwpAQCAtMTc4Miw2ICsxODc3LDggQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCX0KIAorCXNkaGNpX2Rpc2FibGVfY2FyZF9kZXRlY3Rpb24oaG9zdCk7CisKIAltbWNfcmVtb3ZlX2hvc3QoaG9zdC0+bW1jKTsKIAogI2lmZGVmIFNESENJX1VTRV9MRURTX0NMQVNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmggYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKaW5kZXggNDNjMzdjNi4uZjIwYTgzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaApAQCAtMTAsNiArMTAsOSBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAvKgogICogQ29udHJvbGxlciByZWdpc3RlcnMKQEAgLTEyMyw2ICsxMjYsNyBAQAogCQlTREhDSV9JTlRfREFUQV9BVkFJTCB8IFNESENJX0lOVF9TUEFDRV9BVkFJTCB8IFwKIAkJU0RIQ0lfSU5UX0RBVEFfVElNRU9VVCB8IFNESENJX0lOVF9EQVRBX0NSQyB8IFwKIAkJU0RIQ0lfSU5UX0RBVEFfRU5EX0JJVCkKKyNkZWZpbmUgU0RIQ0lfSU5UX0FMTF9NQVNLCSgodW5zaWduZWQgaW50KS0xKQogCiAjZGVmaW5lIFNESENJX0FDTUQxMl9FUlIJMHgzQwogCkBAIC0yMTAsNiArMjE0LDE4IEBACiAjZGVmaW5lIFNESENJX1FVSVJLX0JST0tFTl9TTUFMTF9QSU8JCQkoMTw8MTMpCiAvKiBDb250cm9sbGVyIGRvZXMgbm90IHByb3ZpZGUgdHJhbnNmZXItY29tcGxldGUgaW50ZXJydXB0IHdoZW4gbm90IGJ1c3kgKi8KICNkZWZpbmUgU0RIQ0lfUVVJUktfTk9fQlVTWV9JUlEJCQkJKDE8PDE0KQorLyogQ29udHJvbGxlciBoYXMgdW5yZWxpYWJsZSBjYXJkIGRldGVjdGlvbiAqLworI2RlZmluZSBTREhDSV9RVUlSS19CUk9LRU5fQ0FSRF9ERVRFQ1RJT04JCSgxPDwxNSkKKy8qIENvbnRyb2xsZXIgcmVwb3J0cyBpbnZlcnRlZCB3cml0ZS1wcm90ZWN0IHN0YXRlICovCisjZGVmaW5lIFNESENJX1FVSVJLX0lOVkVSVEVEX1dSSVRFX1BST1RFQ1QJCSgxPDwxNikKKy8qIENvbnRyb2xsZXIgaGFzIG5vbnN0YW5kYXJkIGNsb2NrIG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUktfTk9OU1RBTkRBUkRfQ0xPQ0sJCQkoMTw8MTcpCisvKiBDb250cm9sbGVyIGRvZXMgbm90IGxpa2UgZmFzdCBQSU8gdHJhbnNmZXJzICovCisjZGVmaW5lIFNESENJX1FVSVJLX1BJT19ORUVEU19ERUxBWQkJCSgxPDwxOCkKKy8qIENvbnRyb2xsZXIgbG9zaW5nIHNpZ25hbC9pbnRlcnJ1cHQgZW5hYmxlIHN0YXRlcyBhZnRlciByZXNldCAqLworI2RlZmluZSBTREhDSV9RVUlSS19SRVNUT1JFX0lSUVNfQUZURVJfUkVTRVQJCSgxPDwxOSkKKy8qIENvbnRyb2xsZXIgaGFzIHRvIGJlIGZvcmNlZCB0byB1c2UgYmxvY2sgc2l6ZSBvZiAyMDQ4IGJ5dGVzICovCisjZGVmaW5lIFNESENJX1FVSVJLX0ZPUkNFX0JMS19TWl8yMDQ4CQkJKDE8PDIwKQogCiAJaW50CQkJaXJxOwkJLyogRGV2aWNlIElSUSAqLwogCXZvaWQgX19pb21lbSAqCQlpb2FkZHI7CQkvKiBNYXBwZWQgYWRkcmVzcyAqLwpAQCAtMjY3LDkgKzI4MywxMDUgQEAKIAogCiBzdHJ1Y3Qgc2RoY2lfb3BzIHsKKyNpZmRlZiBDT05GSUdfTU1DX1NESENJX0lPX0FDQ0VTU09SUworCXUzMgkJKCpyZWFkbCkoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpOworCXUxNgkJKCpyZWFkdykoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpOworCXU4CQkoKnJlYWRiKShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZyk7CisJdm9pZAkJKCp3cml0ZWwpKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgdmFsLCBpbnQgcmVnKTsKKwl2b2lkCQkoKndyaXRldykoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUxNiB2YWwsIGludCByZWcpOworCXZvaWQJCSgqd3JpdGViKShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTggdmFsLCBpbnQgcmVnKTsKKyNlbmRpZgorCisJdm9pZAkoKnNldF9jbG9jaykoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBjbG9jayk7CisKIAlpbnQJCSgqZW5hYmxlX2RtYSkoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpOworCXVuc2lnbmVkIGludAkoKmdldF9tYXhfY2xvY2spKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KTsKKwl1bnNpZ25lZCBpbnQJKCpnZXRfdGltZW91dF9jbG9jaykoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpOwogfTsKIAorI2lmZGVmIENPTkZJR19NTUNfU0RIQ0lfSU9fQUNDRVNTT1JTCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZGhjaV93cml0ZWwoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiB2YWwsIGludCByZWcpCit7CisJaWYgKHVubGlrZWx5KGhvc3QtPm9wcy0+d3JpdGVsKSkKKwkJaG9zdC0+b3BzLT53cml0ZWwoaG9zdCwgdmFsLCByZWcpOworCWVsc2UKKwkJd3JpdGVsKHZhbCwgaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNkaGNpX3dyaXRldyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTE2IHZhbCwgaW50IHJlZykKK3sKKwlpZiAodW5saWtlbHkoaG9zdC0+b3BzLT53cml0ZXcpKQorCQlob3N0LT5vcHMtPndyaXRldyhob3N0LCB2YWwsIHJlZyk7CisJZWxzZQorCQl3cml0ZXcodmFsLCBob3N0LT5pb2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2RoY2lfd3JpdGViKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1OCB2YWwsIGludCByZWcpCit7CisJaWYgKHVubGlrZWx5KGhvc3QtPm9wcy0+d3JpdGViKSkKKwkJaG9zdC0+b3BzLT53cml0ZWIoaG9zdCwgdmFsLCByZWcpOworCWVsc2UKKwkJd3JpdGViKHZhbCwgaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgc2RoY2lfcmVhZGwoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIGludCByZWcpCit7CisJaWYgKHVubGlrZWx5KGhvc3QtPm9wcy0+cmVhZGwpKQorCQlyZXR1cm4gaG9zdC0+b3BzLT5yZWFkbChob3N0LCByZWcpOworCWVsc2UKKwkJcmV0dXJuIHJlYWRsKGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IHNkaGNpX3JlYWR3KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQoreworCWlmICh1bmxpa2VseShob3N0LT5vcHMtPnJlYWR3KSkKKwkJcmV0dXJuIGhvc3QtPm9wcy0+cmVhZHcoaG9zdCwgcmVnKTsKKwllbHNlCisJCXJldHVybiByZWFkdyhob3N0LT5pb2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHU4IHNkaGNpX3JlYWRiKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQoreworCWlmICh1bmxpa2VseShob3N0LT5vcHMtPnJlYWRiKSkKKwkJcmV0dXJuIGhvc3QtPm9wcy0+cmVhZGIoaG9zdCwgcmVnKTsKKwllbHNlCisJCXJldHVybiByZWFkYihob3N0LT5pb2FkZHIgKyByZWcpOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2RoY2lfd3JpdGVsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgdmFsLCBpbnQgcmVnKQoreworCXdyaXRlbCh2YWwsIGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZGhjaV93cml0ZXcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUxNiB2YWwsIGludCByZWcpCit7CisJd3JpdGV3KHZhbCwgaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNkaGNpX3dyaXRlYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTggdmFsLCBpbnQgcmVnKQoreworCXdyaXRlYih2YWwsIGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHNkaGNpX3JlYWRsKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgcmVnKQoreworCXJldHVybiByZWFkbChob3N0LT5pb2FkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBzZGhjaV9yZWFkdyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZHcoaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB1OCBzZGhjaV9yZWFkYihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVhZGIoaG9zdC0+aW9hZGRyICsgcmVnKTsKK30KKworI2VuZGlmIC8qIENPTkZJR19NTUNfU0RIQ0lfSU9fQUNDRVNTT1JTICovCiAKIGV4dGVybiBzdHJ1Y3Qgc2RoY2lfaG9zdCAqc2RoY2lfYWxsb2NfaG9zdChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJc2l6ZV90IHByaXZfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMKaW5kZXggNmE3YTYxOS4uNjNmYmQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYwpAQCAtNTY4LDExICs1NjgsMTEgQEAKIAlob3N0LT5tbWMgPSBtbWM7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBtbWMpOwogCi0JaG9zdC0+Y3RsID0gaW9yZW1hcChyZXNfY3RsLT5zdGFydCwgcmVzX2N0bC0+ZW5kIC0gcmVzX2N0bC0+c3RhcnQpOworCWhvc3QtPmN0bCA9IGlvcmVtYXAocmVzX2N0bC0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzX2N0bCkpOwogCWlmICghaG9zdC0+Y3RsKQogCQlnb3RvIGhvc3RfZnJlZTsKIAotCWhvc3QtPmNuZiA9IGlvcmVtYXAocmVzX2NuZi0+c3RhcnQsIHJlc19jbmYtPmVuZCAtIHJlc19jbmYtPnN0YXJ0KTsKKwlob3N0LT5jbmYgPSBpb3JlbWFwKHJlc19jbmYtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlc19jbmYpKTsKIAlpZiAoIWhvc3QtPmNuZikKIAkJZ290byB1bm1hcF9jdGw7CiAKQEAgLTY1MCwxMCArNjUwLDEwIEBACiAJaWYgKG1tYykgewogCQlzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJCW1tY19yZW1vdmVfaG9zdChtbWMpOwotCQltbWNfZnJlZV9ob3N0KG1tYyk7CiAJCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiAJCWlvdW5tYXAoaG9zdC0+Y3RsKTsKIAkJaW91bm1hcChob3N0LT5jbmYpOworCQltbWNfZnJlZV9ob3N0KG1tYyk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmggYi9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmgKaW5kZXggYmEyYjQyNC4uOWM4MzFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuaApAQCAtOCw2ICs4LDkgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqLworCisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorCiAjZGVmaW5lIENORl9DTUQgICAgIDB4MDQKICNkZWZpbmUgQ05GX0NUTF9CQVNFICAgMHgxMAogI2RlZmluZSBDTkZfSU5UX1BJTiAgMHgzZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKaW5kZXggZTkwMjZjYi4uNTcyZDMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgcHhhMnh4X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBweGEyeHhfZmxhc2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYyBiL2RyaXZlcnMvbXRkL25hbmQvZGlza29uY2hpcC5jCmluZGV4IGU0MjI2ZTAuLmU1MWMxZWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYwpAQCAtMTc3Myw0ICsxNzczLDQgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJNLVN5c3RlbXMgRGlza09uQ2hpcCAyMDAwLCBNaWxsZW5uaXVtIGFuZCBNaWxsZW5uaXVtIFBsdXMgZGV2aWNlIGRyaXZlclxuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk0tU3lzdGVtcyBEaXNrT25DaGlwIDIwMDAsIE1pbGxlbm5pdW0gYW5kIE1pbGxlbm5pdW0gUGx1cyBkZXZpY2UgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCAwYzNhZmNjLi41ZjcxMzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKQEAgLTI3MjAsMTQgKzI3MjAsMTQgQEAKIAlyZXR1cm4gY2hpcC0+c2Nhbl9iYnQobXRkKTsKIH0KIAotLyogbW9kdWxlX3RleHRfYWRkcmVzcygpIGlzbid0IGV4cG9ydGVkLCBhbmQgaXQncyBtb3N0bHkgYSBwb2ludGxlc3MKKy8qIGlzX21vZHVsZV90ZXh0X2FkZHJlc3MoKSBpc24ndCBleHBvcnRlZCwgYW5kIGl0J3MgbW9zdGx5IGEgcG9pbnRsZXNzCiAgICB0ZXN0IGlmIHRoaXMgaXMgYSBtb2R1bGUgX2FueXdheV8gLS0gdGhleSdkIGhhdmUgdG8gdHJ5IF9yZWFsbHlfIGhhcmQKICAgIHRvIGNhbGwgdXMgZnJvbSBpbi1rZXJuZWwgY29kZSBpZiB0aGUgY29yZSBOQU5EIHN1cHBvcnQgaXMgbW9kdWxhci4gKi8KICNpZmRlZiBNT0RVTEUKICNkZWZpbmUgY2FsbGVyX2lzX21vZHVsZSgpICgxKQogI2Vsc2UKICNkZWZpbmUgY2FsbGVyX2lzX21vZHVsZSgpIFwKLQltb2R1bGVfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKKwlpc19tb2R1bGVfdGV4dF9hZGRyZXNzKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKICNlbmRpZgogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9vb2J0ZXN0LmMgYi9kcml2ZXJzL210ZC90ZXN0cy9tdGRfb29idGVzdC5jCmluZGV4IGFmYmMzZjguLmExOGU4ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9vb2J0ZXN0LmMKKysrIGIvZHJpdmVycy9tdGQvdGVzdHMvbXRkX29vYnRlc3QuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJCW9wcy5vb2JsZW4gICAgPSB1c2VfbGVuOwogCQlvcHMub29icmV0bGVuID0gMDsKIAkJb3BzLm9vYm9mZnMgICA9IHVzZV9vZmZzZXQ7Ci0JCW9wcy5kYXRidWYgICAgPSAwOworCQlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAkJb3BzLm9vYmJ1ZiAgICA9IHdyaXRlYnVmOwogCQllcnIgPSBtdGQtPndyaXRlX29vYihtdGQsIGFkZHIsICZvcHMpOwogCQlpZiAoZXJyIHx8IG9wcy5vb2JyZXRsZW4gIT0gdXNlX2xlbikgewpAQCAtMTg5LDcgKzE4OSw3IEBACiAJCW9wcy5vb2JsZW4gICAgPSB1c2VfbGVuOwogCQlvcHMub29icmV0bGVuID0gMDsKIAkJb3BzLm9vYm9mZnMgICA9IHVzZV9vZmZzZXQ7Ci0JCW9wcy5kYXRidWYgICAgPSAwOworCQlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAkJb3BzLm9vYmJ1ZiAgICA9IHJlYWRidWY7CiAJCWVyciA9IG10ZC0+cmVhZF9vb2IobXRkLCBhZGRyLCAmb3BzKTsKIAkJaWYgKGVyciB8fCBvcHMub29icmV0bGVuICE9IHVzZV9sZW4pIHsKQEAgLTIxNiw3ICsyMTYsNyBAQAogCQkJb3BzLm9vYmxlbiAgICA9IG10ZC0+ZWNjbGF5b3V0LT5vb2JhdmFpbDsKIAkJCW9wcy5vb2JyZXRsZW4gPSAwOwogCQkJb3BzLm9vYm9mZnMgICA9IDA7Ci0JCQlvcHMuZGF0YnVmICAgID0gMDsKKwkJCW9wcy5kYXRidWYgICAgPSBOVUxMOwogCQkJb3BzLm9vYmJ1ZiAgICA9IHJlYWRidWY7CiAJCQllcnIgPSBtdGQtPnJlYWRfb29iKG10ZCwgYWRkciwgJm9wcyk7CiAJCQlpZiAoZXJyIHx8IG9wcy5vb2JyZXRsZW4gIT0gbXRkLT5lY2NsYXlvdXQtPm9vYmF2YWlsKSB7CkBAIC0yODEsNyArMjgxLDcgQEAKIAlvcHMub29ibGVuICAgID0gbGVuOwogCW9wcy5vb2JyZXRsZW4gPSAwOwogCW9wcy5vb2JvZmZzICAgPSAwOwotCW9wcy5kYXRidWYgICAgPSAwOworCW9wcy5kYXRidWYgICAgPSBOVUxMOwogCW9wcy5vb2JidWYgICAgPSByZWFkYnVmOwogCWVyciA9IG10ZC0+cmVhZF9vb2IobXRkLCBhZGRyLCAmb3BzKTsKIAlpZiAoZXJyIHx8IG9wcy5vb2JyZXRsZW4gIT0gbGVuKSB7CkBAIC01MjIsNyArNTIyLDcgQEAKIAlvcHMub29ibGVuICAgID0gMTsKIAlvcHMub29icmV0bGVuID0gMDsKIAlvcHMub29ib2ZmcyAgID0gbXRkLT5lY2NsYXlvdXQtPm9vYmF2YWlsOwotCW9wcy5kYXRidWYgICAgPSAwOworCW9wcy5kYXRidWYgICAgPSBOVUxMOwogCW9wcy5vb2JidWYgICAgPSB3cml0ZWJ1ZjsKIAlwcmludGsoUFJJTlRfUFJFRiAiYXR0ZW1wdGluZyB0byBzdGFydCB3cml0ZSBwYXN0IGVuZCBvZiBPT0JcbiIpOwogCXByaW50ayhQUklOVF9QUkVGICJhbiBlcnJvciBpcyBleHBlY3RlZC4uLlxuIik7CkBAIC01NDIsNyArNTQyLDcgQEAKIAlvcHMub29ibGVuICAgID0gMTsKIAlvcHMub29icmV0bGVuID0gMDsKIAlvcHMub29ib2ZmcyAgID0gbXRkLT5lY2NsYXlvdXQtPm9vYmF2YWlsOwotCW9wcy5kYXRidWYgICAgPSAwOworCW9wcy5kYXRidWYgICAgPSBOVUxMOwogCW9wcy5vb2JidWYgICAgPSByZWFkYnVmOwogCXByaW50ayhQUklOVF9QUkVGICJhdHRlbXB0aW5nIHRvIHN0YXJ0IHJlYWQgcGFzdCBlbmQgb2YgT09CXG4iKTsKIAlwcmludGsoUFJJTlRfUFJFRiAiYW4gZXJyb3IgaXMgZXhwZWN0ZWQuLi5cbiIpOwpAQCAtNTY2LDcgKzU2Niw3IEBACiAJCW9wcy5vb2JsZW4gICAgPSBtdGQtPmVjY2xheW91dC0+b29iYXZhaWwgKyAxOwogCQlvcHMub29icmV0bGVuID0gMDsKIAkJb3BzLm9vYm9mZnMgICA9IDA7Ci0JCW9wcy5kYXRidWYgICAgPSAwOworCQlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAkJb3BzLm9vYmJ1ZiAgICA9IHdyaXRlYnVmOwogCQlwcmludGsoUFJJTlRfUFJFRiAiYXR0ZW1wdGluZyB0byB3cml0ZSBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOwogCQlwcmludGsoUFJJTlRfUFJFRiAiYW4gZXJyb3IgaXMgZXhwZWN0ZWQuLi5cbiIpOwpAQCAtNTg2LDcgKzU4Niw3IEBACiAJCW9wcy5vb2JsZW4gICAgPSBtdGQtPmVjY2xheW91dC0+b29iYXZhaWwgKyAxOwogCQlvcHMub29icmV0bGVuID0gMDsKIAkJb3BzLm9vYm9mZnMgICA9IDA7Ci0JCW9wcy5kYXRidWYgICAgPSAwOworCQlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAkJb3BzLm9vYmJ1ZiAgICA9IHJlYWRidWY7CiAJCXByaW50ayhQUklOVF9QUkVGICJhdHRlbXB0aW5nIHRvIHJlYWQgcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJcHJpbnRrKFBSSU5UX1BSRUYgImFuIGVycm9yIGlzIGV4cGVjdGVkLi4uXG4iKTsKQEAgLTYxMCw3ICs2MTAsNyBAQAogCQlvcHMub29ibGVuICAgID0gbXRkLT5lY2NsYXlvdXQtPm9vYmF2YWlsOwogCQlvcHMub29icmV0bGVuID0gMDsKIAkJb3BzLm9vYm9mZnMgICA9IDE7Ci0JCW9wcy5kYXRidWYgICAgPSAwOworCQlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAkJb3BzLm9vYmJ1ZiAgICA9IHdyaXRlYnVmOwogCQlwcmludGsoUFJJTlRfUFJFRiAiYXR0ZW1wdGluZyB0byB3cml0ZSBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOwogCQlwcmludGsoUFJJTlRfUFJFRiAiYW4gZXJyb3IgaXMgZXhwZWN0ZWQuLi5cbiIpOwpAQCAtNjMwLDcgKzYzMCw3IEBACiAJCW9wcy5vb2JsZW4gICAgPSBtdGQtPmVjY2xheW91dC0+b29iYXZhaWw7CiAJCW9wcy5vb2JyZXRsZW4gPSAwOwogCQlvcHMub29ib2ZmcyAgID0gMTsKLQkJb3BzLmRhdGJ1ZiAgICA9IDA7CisJCW9wcy5kYXRidWYgICAgPSBOVUxMOwogCQlvcHMub29iYnVmICAgID0gcmVhZGJ1ZjsKIAkJcHJpbnRrKFBSSU5UX1BSRUYgImF0dGVtcHRpbmcgdG8gcmVhZCBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOwogCQlwcmludGsoUFJJTlRfUFJFRiAiYW4gZXJyb3IgaXMgZXhwZWN0ZWQuLi5cbiIpOwpAQCAtNjcwLDcgKzY3MCw3IEBACiAJCQlvcHMub29ibGVuICAgID0gc3o7CiAJCQlvcHMub29icmV0bGVuID0gMDsKIAkJCW9wcy5vb2JvZmZzICAgPSAwOwotCQkJb3BzLmRhdGJ1ZiAgICA9IDA7CisJCQlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAkJCW9wcy5vb2JidWYgICAgPSB3cml0ZWJ1ZjsKIAkJCWVyciA9IG10ZC0+d3JpdGVfb29iKG10ZCwgYWRkciwgJm9wcyk7CiAJCQlpZiAoZXJyKQpAQCAtNjk4LDcgKzY5OCw3IEBACiAJCW9wcy5vb2JsZW4gICAgPSBtdGQtPmVjY2xheW91dC0+b29iYXZhaWwgKiAyOwogCQlvcHMub29icmV0bGVuID0gMDsKIAkJb3BzLm9vYm9mZnMgICA9IDA7Ci0JCW9wcy5kYXRidWYgICAgPSAwOworCQlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAkJb3BzLm9vYmJ1ZiAgICA9IHJlYWRidWY7CiAJCWVyciA9IG10ZC0+cmVhZF9vb2IobXRkLCBhZGRyLCAmb3BzKTsKIAkJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3Rlc3RzL210ZF9yZWFkdGVzdC5jIGIvZHJpdmVycy9tdGQvdGVzdHMvbXRkX3JlYWR0ZXN0LmMKaW5kZXggNjQ1ZTc3Zi4uNzlmYzQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdGVzdHMvbXRkX3JlYWR0ZXN0LmMKKysrIGIvZHJpdmVycy9tdGQvdGVzdHMvbXRkX3JlYWR0ZXN0LmMKQEAgLTcxLDcgKzcxLDcgQEAKIAkJCW9wcy5vb2JsZW4gICAgPSBtdGQtPm9vYnNpemU7CiAJCQlvcHMub29icmV0bGVuID0gMDsKIAkJCW9wcy5vb2JvZmZzICAgPSAwOwotCQkJb3BzLmRhdGJ1ZiAgICA9IDA7CisJCQlvcHMuZGF0YnVmICAgID0gTlVMTDsKIAkJCW9wcy5vb2JidWYgICAgPSBvb2JidWY7CiAJCQlyZXQgPSBtdGQtPnJlYWRfb29iKG10ZCwgYWRkciwgJm9wcyk7CiAJCQlpZiAocmV0IHx8IG9wcy5vb2JyZXRsZW4gIT0gbXRkLT5vb2JzaXplKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCBmMDYyYjQyLi4xNjg5OWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTk3NCw3ICs5NzQsNyBAQAogCiBjb25maWcgRVRIT0MKIAl0cmlzdGF0ZSAiT3BlbkNvcmVzIDEwLzEwMCBNYnBzIEV0aGVybmV0IE1BQyBzdXBwb3J0IgotCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgSEFTX0lPTUVNCiAJc2VsZWN0IE1JSQogCXNlbGVjdCBQSFlMSUIKIAloZWxwCkBAIC0yNTQ3LDYgKzI1NDcsMjMgQEAKIAkgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpbiAKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zMmlvLnR4dD4uCiAKK2NvbmZpZyBWWEdFCisJdHJpc3RhdGUgIk5ldGVyaW9uIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIFNlcnZlciBBZGFwdGVyIgorCWRlcGVuZHMgb24gUENJICYmIElORVQKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTAgR2JFIFBDSWUKKwkgIEkvTyBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KKwkgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpbgorCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Z4Z2UudHh0Pi4KKworY29uZmlnIFZYR0VfREVCVUdfVFJBQ0VfQUxMCisJYm9vbCAiRW5hYmxpbmcgQWxsIERlYnVnIHRyYWNlIHN0YXRtZW50cyBpbiBkcml2ZXIiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBWWEdFCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGluZyBhbGwgdGhlIGRlYnVnIHRyYWNlIHN0YXRlbWVudHMgaW4KKwkgIGRyaXZlci4gQnkgIGRlZmF1bHQgb25seSBmZXcgZGVidWcgdHJhY2Ugc3RhdGVtZW50cyBhcmUgZW5hYmxlZC4KKwogY29uZmlnIE1ZUkkxMEdFCiAJdHJpc3RhdGUgIk15cmljb20gTXlyaS0xMEcgRXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSSAmJiBJTkVUCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCmluZGV4IDk4NDA5YzkuLmVkYzlhMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCkBAIC0yMjAsNiArMjIwLDcgQEAKIG9iai0kKENPTkZJR19BTUQ4MTExX0VUSCkgKz0gYW1kODExMWUubwogb2JqLSQoQ09ORklHX0lCTVZFVEgpICs9IGlibXZldGgubwogb2JqLSQoQ09ORklHX1MySU8pICs9IHMyaW8ubworb2JqLSQoQ09ORklHX1ZYR0UpICs9IHZ4Z2UvCiBvYmotJChDT05GSUdfTVlSSTEwR0UpICs9IG15cmkxMGdlLwogb2JqLSQoQ09ORklHX1NNQzkxWCkgKz0gc21jOTF4Lm8KIG9iai0kKENPTkZJR19TTUM5MTFYKSArPSBzbWM5MTF4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKaW5kZXggMjU0ZWM2Mi4uZDgzNTA4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG05MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKQEAgLTU1OSw3ICs1NTksNyBAQAogc3RhdGljIHZvaWQKIGRtOTAwMF9wb2xsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3ID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3ID0gdG9fZGVsYXllZF93b3JrKHcpOwogCWJvYXJkX2luZm9fdCAqZGIgPSBjb250YWluZXJfb2YoZHcsIGJvYXJkX2luZm9fdCwgcGh5X3BvbGwpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGItPm5kZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RuZXQuYyBiL2RyaXZlcnMvbmV0L2RuZXQuYwppbmRleCBkYjFlMzFmLi4zM2ZhOWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvZG5ldC5jCkBAIC04LDcgKzgsNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMgYi9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCmluZGV4IDA0OWIwYTcuLjhiYmU3ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKKysrIGIvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYwpAQCAtMTI5LDcgKzEyOSw4IEBACiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKIAkJc2tiID0gYmNvbV9yZXRyaWV2ZV9idWZmZXIocywgTlVMTCwgKHN0cnVjdCBiY29tX2JkICoqKSZiZCk7Ci0JCWRtYV91bm1hcF9zaW5nbGUoJmRldi0+ZGV2LCBiZC0+c2tiX3BhLCBza2ItPmxlbiwgRE1BX0ZST01fREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZShkZXYtPmRldi5wYXJlbnQsIGJkLT5za2JfcGEsIHNrYi0+bGVuLAorCQkJCSBETUFfRlJPTV9ERVZJQ0UpOwogCQlrZnJlZV9za2Ioc2tiKTsKIAl9CiB9CkBAIC0xNTAsNyArMTUxLDcgQEAKIAkJYmQgPSAoc3RydWN0IGJjb21fZmVjX2JkICopYmNvbV9wcmVwYXJlX25leHRfYnVmZmVyKHJ4dHNrKTsKIAogCQliZC0+c3RhdHVzID0gRkVDX1JYX0JVRkZFUl9TSVpFOwotCQliZC0+c2tiX3BhID0gZG1hX21hcF9zaW5nbGUoJmRldi0+ZGV2LCBza2ItPmRhdGEsCisJCWJkLT5za2JfcGEgPSBkbWFfbWFwX3NpbmdsZShkZXYtPmRldi5wYXJlbnQsIHNrYi0+ZGF0YSwKIAkJCQlGRUNfUlhfQlVGRkVSX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJYmNvbV9zdWJtaXRfbmV4dF9idWZmZXIocnh0c2ssIHNrYik7CkBAIC0yNzAsMTUgKzI3MSw2IEBACiAJcGh5X3dyaXRlKHByaXYtPnBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pOwogfQogCi1zdGF0aWMgaW50IG1wYzUyeHhfZmVjX3BoeV9taWlfaW9jdGwoc3RydWN0IG1wYzUyeHhfZmVjX3ByaXYgKnByaXYsCi0JCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWlpX2RhdGEsIGludCBjbWQpCi17Ci0JaWYgKCFwcml2LT5waHlkZXYpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KLQlyZXR1cm4gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIG1paV9kYXRhLCBjbWQpOwotfQotCiBzdGF0aWMgdm9pZCBtcGM1Mnh4X2ZlY19waHlfaHdfaW5pdChzdHJ1Y3QgbXBjNTJ4eF9mZWNfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgbXBjNTJ4eF9mZWMgX19pb21lbSAqZmVjID0gcHJpdi0+ZmVjOwpAQCAtMzcwLDcgKzM2Miw3IEBACiAgKiBpbnZhcmlhbnQgd2lsbCBob2xkIGlmIHlvdSBtYWtlIHN1cmUgdGhhdCB0aGUgbmV0aWZfKl9xdWV1ZSgpCiAgKiBjYWxscyBhcmUgZG9uZSBhdCB0aGUgcHJvcGVyIHRpbWVzLgogICovCi1zdGF0aWMgaW50IG1wYzUyeHhfZmVjX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBtcGM1Mnh4X2ZlY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1wYzUyeHhfZmVjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBiY29tX2ZlY19iZCAqYmQ7CkBAIC0zNzgsNyArMzcwLDcgQEAKIAlpZiAoYmNvbV9xdWV1ZV9mdWxsKHByaXYtPnR4X2RtYXRzaykpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCWRldl9lcnIoJmRldi0+ZGV2LCAidHJhbnNtaXQgcXVldWUgb3ZlcnJ1blxuIik7Ci0JCXJldHVybiAxOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCiAJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CkBAIC0zODgsNyArMzgwLDggQEAKIAkJYmNvbV9wcmVwYXJlX25leHRfYnVmZmVyKHByaXYtPnR4X2RtYXRzayk7CiAKIAliZC0+c3RhdHVzID0gc2tiLT5sZW4gfCBCQ09NX0ZFQ19UWF9CRF9URkQgfCBCQ09NX0ZFQ19UWF9CRF9UQzsKLQliZC0+c2tiX3BhID0gZG1hX21hcF9zaW5nbGUoJmRldi0+ZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKKwliZC0+c2tiX3BhID0gZG1hX21hcF9zaW5nbGUoZGV2LT5kZXYucGFyZW50LCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCSAgICBETUFfVE9fREVWSUNFKTsKIAogCWJjb21fc3VibWl0X25leHRfYnVmZmVyKHByaXYtPnR4X2RtYXRzaywgc2tiKTsKIApAQCAtMzk4LDcgKzM5MSw3IEBACiAKIAlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC00MzAsNyArNDIzLDggQEAKIAkJc3RydWN0IGJjb21fZmVjX2JkICpiZDsKIAkJc2tiID0gYmNvbV9yZXRyaWV2ZV9idWZmZXIocHJpdi0+dHhfZG1hdHNrLCBOVUxMLAogCQkJCShzdHJ1Y3QgYmNvbV9iZCAqKikmYmQpOwotCQlkbWFfdW5tYXBfc2luZ2xlKCZkZXYtPmRldiwgYmQtPnNrYl9wYSwgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xlKGRldi0+ZGV2LnBhcmVudCwgYmQtPnNrYl9wYSwgc2tiLT5sZW4sCisJCQkJIERNQV9UT19ERVZJQ0UpOwogCiAJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJfQpAQCAtNDU1LDcgKzQ0OSw4IEBACiAKIAkJcnNrYiA9IGJjb21fcmV0cmlldmVfYnVmZmVyKHByaXYtPnJ4X2RtYXRzaywgJnN0YXR1cywKIAkJCQkoc3RydWN0IGJjb21fYmQgKiopJmJkKTsKLQkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5kZXYsIGJkLT5za2JfcGEsIHJza2ItPmxlbiwgRE1BX0ZST01fREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZShkZXYtPmRldi5wYXJlbnQsIGJkLT5za2JfcGEsIHJza2ItPmxlbiwKKwkJCQkgRE1BX0ZST01fREVWSUNFKTsKIAogCQkvKiBUZXN0IGZvciBlcnJvcnMgaW4gcmVjZWl2ZWQgZnJhbWUgKi8KIAkJaWYgKHN0YXR1cyAmIEJDT01fRkVDX1JYX0JEX0VSUk9SUykgewpAQCAtNDY0LDcgKzQ1OSw4IEBACiAJCQkJYmNvbV9wcmVwYXJlX25leHRfYnVmZmVyKHByaXYtPnJ4X2RtYXRzayk7CiAKIAkJCWJkLT5zdGF0dXMgPSBGRUNfUlhfQlVGRkVSX1NJWkU7Ci0JCQliZC0+c2tiX3BhID0gZG1hX21hcF9zaW5nbGUoJmRldi0+ZGV2LCByc2tiLT5kYXRhLAorCQkJYmQtPnNrYl9wYSA9IGRtYV9tYXBfc2luZ2xlKGRldi0+ZGV2LnBhcmVudCwKKwkJCQkJcnNrYi0+ZGF0YSwKIAkJCQkJRkVDX1JYX0JVRkZFUl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJCQliY29tX3N1Ym1pdF9uZXh0X2J1ZmZlcihwcml2LT5yeF9kbWF0c2ssIHJza2IpOwpAQCAtNDk5LDcgKzQ5NSw3IEBACiAJCQliY29tX3ByZXBhcmVfbmV4dF9idWZmZXIocHJpdi0+cnhfZG1hdHNrKTsKIAogCQliZC0+c3RhdHVzID0gRkVDX1JYX0JVRkZFUl9TSVpFOwotCQliZC0+c2tiX3BhID0gZG1hX21hcF9zaW5nbGUoJmRldi0+ZGV2LCBza2ItPmRhdGEsCisJCWJkLT5za2JfcGEgPSBkbWFfbWFwX3NpbmdsZShkZXYtPmRldi5wYXJlbnQsIHNrYi0+ZGF0YSwKIAkJCQlGRUNfUlhfQlVGRkVSX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJYmNvbV9zdWJtaXRfbmV4dF9idWZmZXIocHJpdi0+cnhfZG1hdHNrLCBza2IpOwpAQCAtODQ3LDEyICs4NDMsMjAgQEAKIHN0YXRpYyBpbnQgbXBjNTJ4eF9mZWNfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewogCXN0cnVjdCBtcGM1Mnh4X2ZlY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghcHJpdi0+cGh5ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXJldHVybiBwaHlfZXRodG9vbF9nc2V0KHByaXYtPnBoeWRldiwgY21kKTsKIH0KIAogc3RhdGljIGludCBtcGM1Mnh4X2ZlY19zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IG1wYzUyeHhfZmVjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFwcml2LT5waHlkZXYpCisJCXJldHVybiAtRU5PREVWOworCiAJcmV0dXJuIHBoeV9ldGh0b29sX3NzZXQocHJpdi0+cGh5ZGV2LCBjbWQpOwogfQogCkBAIC04ODIsOSArODg2LDI4IEBACiB7CiAJc3RydWN0IG1wYzUyeHhfZmVjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0dXJuIG1wYzUyeHhfZmVjX3BoeV9taWlfaW9jdGwocHJpdiwgaWZfbWlpKHJxKSwgY21kKTsKKwlpZiAoIXByaXYtPnBoeWRldikKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCXJldHVybiBwaHlfbWlpX2lvY3RsKHByaXYtPnBoeWRldiwgaWZfbWlpKHJxKSwgY21kKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtcGM1Mnh4X2ZlY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IG1wYzUyeHhfZmVjX29wZW4sCisJLm5kb19zdG9wID0gbXBjNTJ4eF9mZWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gbXBjNTJ4eF9mZWNfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IG1wYzUyeHhfZmVjX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IG1wYzUyeHhfZmVjX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsID0gbXBjNTJ4eF9mZWNfaW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1ID0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb190eF90aW1lb3V0ID0gbXBjNTJ4eF9mZWNfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cyA9IG1wYzUyeHhfZmVjX2dldF9zdGF0cywKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gbXBjNTJ4eF9mZWNfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCit9OworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIE9GIERyaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC05MjksMjIgKzk1MiwxMCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogSW5pdCBldGhlciBuZGV2IHdpdGggd2hhdCB3ZSBoYXZlICovCi0JbmRldi0+b3BlbgkJPSBtcGM1Mnh4X2ZlY19vcGVuOwotCW5kZXYtPnN0b3AJCT0gbXBjNTJ4eF9mZWNfY2xvc2U7Ci0JbmRldi0+aGFyZF9zdGFydF94bWl0CT0gbXBjNTJ4eF9mZWNfaGFyZF9zdGFydF94bWl0OwotCW5kZXYtPmRvX2lvY3RsCQk9IG1wYzUyeHhfZmVjX2lvY3RsOworCW5kZXYtPm5ldGRldl9vcHMJPSAmbXBjNTJ4eF9mZWNfbmV0ZGV2X29wczsKIAluZGV2LT5ldGh0b29sX29wcwk9ICZtcGM1Mnh4X2ZlY19ldGh0b29sX29wczsKLQluZGV2LT5nZXRfc3RhdHMJCT0gbXBjNTJ4eF9mZWNfZ2V0X3N0YXRzOwotCW5kZXYtPnNldF9tYWNfYWRkcmVzcwk9IG1wYzUyeHhfZmVjX3NldF9tYWNfYWRkcmVzczsKLQluZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBtcGM1Mnh4X2ZlY19zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JbmRldi0+dHhfdGltZW91dAk9IG1wYzUyeHhfZmVjX3R4X3RpbWVvdXQ7CiAJbmRldi0+d2F0Y2hkb2dfdGltZW8JPSBGRUNfV0FUQ0hET0dfVElNRU9VVDsKIAluZGV2LT5iYXNlX2FkZHIJCT0gbWVtLnN0YXJ0OwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JbmRldi0+cG9sbF9jb250cm9sbGVyID0gbXBjNTJ4eF9mZWNfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCi0KLQlwcml2LT50X2lycSA9IHByaXYtPnJfaXJxID0gbmRldi0+aXJxID0gTk9fSVJROyAvKiBJUlEgYXJlIGZyZWUgZm9yIG5vdyAqLwogCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jIGIvZHJpdmVycy9uZXQvZnNsX3BxX21kaW8uYwppbmRleCBiMzA3OWE1Li5hYTFlYjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMKQEAgLTIwNCw2ICsyMDQsNyBAQAogCXNucHJpbnRmKG5hbWUsIE1JSV9CVVNfSURfU0laRSwgIiVzQCVsbHgiLCBucC0+bmFtZSwKIAkJKHVuc2lnbmVkIGxvbmcgbG9uZyl0YWRkcik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfcHFfbWRpb19idXNfbmFtZSk7CiAKIC8qIFNjYW4gdGhlIGJ1cyBpbiByZXZlcnNlLCBsb29raW5nIGZvciBhbiBlbXB0eSBzcG90ICovCiBzdGF0aWMgaW50IGZzbF9wcV9tZGlvX2ZpbmRfZnJlZShzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cykKQEAgLTM4Nyw3ICszODgsNyBAQAogCSAqIFRoZSBUQklQSFktb25seSBidXNlcyB3aWxsIGZpbmQgUEhZcyBhdCBldmVyeSBhZGRyZXNzLAogCSAqIHNvIHdlIG1hc2sgdGhlbSBhbGwgYnV0IHRoZSBUQkkKIAkgKi8KLQlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGdpYW5mYXItbWRpbyIpKQorCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxnaWFuZmFyLXRiaSIpKQogCQluZXdfYnVzLT5waHlfbWFzayA9IH4oMSA8PCB0YmlhZGRyKTsKIAogCWVyciA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKaW5kZXggZGQ0OTlkNy4uMDY0MmQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaApAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CiAKIC8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRvIGJlIGhhbmRsZWQgaW4gb25lIGNhbGwgb2YgZ2Zhcl9wb2xsICovCiAjZGVmaW5lIEdGQVJfREVWX1dFSUdIVCA2NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwppbmRleCA1MDBhNDBiLi5iMDY2OTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwpAQCAtNTUsNiArNTUsOCBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CkBAIC03MSw4ICs3Myw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiAjaW5jbHVkZSA8bGludXgveWFtLmg+Ci0jaW5jbHVkZSAieWFtOTYwMC5oIgotI2luY2x1ZGUgInlhbTEyMDAuaCIKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTgyLDYgKzgyLDkgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKKyNkZWZpbmUgRklSTVdBUkVfOTYwMAkieWFtLzk2MDAuYmluIgorI2RlZmluZSBGSVJNV0FSRV8xMjAwCSJ5YW0vMTIwMC5iaW4iCisKICNkZWZpbmUgWUFNXzk2MDAJMQogI2RlZmluZSBZQU1fMTIwMAkyCiAKQEAgLTM0Miw5ICszNDUsNTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgKmFkZF9tY3ModW5zaWduZWQgY2hhciAqYml0cywgaW50IGJpdHJhdGUpCisvKgorICogcHJlZGVmIHNob3VsZCBiZSAwIGZvciBsb2FkaW5nIHVzZXIgZGVmaW5lZCBtY3MKKyAqIHByZWRlZiBzaG91bGQgYmUgWUFNXzEyMDAgZm9yIGxvYWRpbmcgcHJlZGVmIDEyMDAgbWNzCisgKiBwcmVkZWYgc2hvdWxkIGJlIFlBTV85NjAwIGZvciBsb2FkaW5nIHByZWRlZiA5NjAwIG1jcworICovCitzdGF0aWMgdW5zaWduZWQgY2hhciAqYWRkX21jcyh1bnNpZ25lZCBjaGFyICpiaXRzLCBpbnQgYml0cmF0ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBwcmVkZWYpCiB7CisJY29uc3QgY2hhciAqZndfbmFtZVsyXSA9IHtGSVJNV0FSRV85NjAwLCBGSVJNV0FSRV8xMjAwfTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJc3RydWN0IHlhbV9tY3MgKnA7CisJaW50IGVycjsKKworCXN3aXRjaCAocHJlZGVmKSB7CisJY2FzZSAwOgorCQlmdyA9IE5VTEw7CisJCWJyZWFrOworCWNhc2UgWUFNXzEyMDA6CisJY2FzZSBZQU1fOTYwMDoKKwkJcHJlZGVmLS07CisJCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJ5YW0iLCAwLCBOVUxMLCAwKTsKKwkJaWYgKElTX0VSUihwZGV2KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ5YW06IEZhaWxlZCB0byByZWdpc3RlciBmaXJtd2FyZVxuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZVtwcmVkZWZdLCAmcGRldi0+ZGV2KTsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLAorCQkJICAgICAgIGZ3X25hbWVbcHJlZGVmXSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlpZiAoZnctPnNpemUgIT0gWUFNX0ZQR0FfU0laRSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJCb2d1cyBsZW5ndGggJXp1IGluIGZpcm13YXJlIFwiJXNcIlxuIiwKKwkJCSAgICAgICBmdy0+c2l6ZSwgZndfbmFtZVtwcmVkZWZdKTsKKwkJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJYml0cyA9ICh1bnNpZ25lZCBjaGFyICopZnctPmRhdGE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAieWFtOiBJbnZhbGlkIHByZWRlZiBudW1iZXIgJXVcbiIsIHByZWRlZik7CisJCXJldHVybiBOVUxMOworCX0KIAogCS8qIElmIGl0IGFscmVhZHkgZXhpc3RzLCByZXBsYWNlIHRoZSBiaXQgZGF0YSAqLwogCXAgPSB5YW1fZGF0YTsKQEAgLTM1OSw2ICs0MDQsNyBAQAogCS8qIEFsbG9jYXRlIGEgbmV3IG1jcyAqLwogCWlmICgocCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB5YW1fbWNzKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiWUFNOiBubyBtZW1vcnkgdG8gYWxsb2NhdGUgbWNzXG4iKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJCXJldHVybiBOVUxMOwogCX0KIAltZW1jcHkocC0+Yml0cywgYml0cywgWUFNX0ZQR0FfU0laRSk7CkBAIC0zNjYsNiArNDEyLDcgQEAKIAlwLT5uZXh0ID0geWFtX2RhdGE7CiAJeWFtX2RhdGEgPSBwOwogCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJcmV0dXJuIHAtPmJpdHM7CiB9CiAKQEAgLTM4Myw5ICs0MzAsMTEgQEAKIAkvKiBMb2FkIHByZWRlZmluZWQgbWNzIGRhdGEgKi8KIAlzd2l0Y2ggKGJpdHJhdGUpIHsKIAljYXNlIDEyMDA6Ci0JCXJldHVybiBhZGRfbWNzKGJpdHNfMTIwMCwgYml0cmF0ZSk7CisJCS8qIHNldHRpbmcgcHJlZGVmIGFzIFlBTV8xMjAwIGZvciBsb2FkaW5nIHByZWRlZiAxMjAwIG1jcyAqLworCQlyZXR1cm4gYWRkX21jcyhOVUxMLCBiaXRyYXRlLCBZQU1fMTIwMCk7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIGFkZF9tY3MoYml0c185NjAwLCBiaXRyYXRlKTsKKwkJLyogc2V0dGluZyBwcmVkZWYgYXMgWUFNXzk2MDAgZm9yIGxvYWRpbmcgcHJlZGVmIDk2MDAgbWNzICovCisJCXJldHVybiBhZGRfbWNzKE5VTEwsIGJpdHJhdGUsIFlBTV85NjAwKTsKIAl9CiB9CiAKQEAgLTkzNiw3ICs5ODUsOCBAQAogCQkJa2ZyZWUoeW0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJYWRkX21jcyh5bS0+Yml0cywgeW0tPmJpdHJhdGUpOworCQkvKiBzZXR0aW5nIHByZWRlZiBhcyAwIGZvciBsb2FkaW5nIHVzZXJkZWZpbmVkIG1jcyBkYXRhICovCisJCWFkZF9tY3MoeW0tPmJpdHMsIHltLT5iaXRyYXRlLCAwKTsKIAkJa2ZyZWUoeW0pOwogCQlicmVhazsKIApAQCAtMTE1OSw2ICsxMjA5LDggQEAKIE1PRFVMRV9BVVRIT1IoIkZyZWRlcmljIFJpYmxlIEYxT0FUIGZyaWJsZUB0ZWFzZXIuZnIiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWWFtIGFtYXRldXIgcmFkaW8gbW9kZW0gZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfMTIwMCk7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfOTYwMCk7CiAKIG1vZHVsZV9pbml0KHlhbV9pbml0X2RyaXZlcik7CiBtb2R1bGVfZXhpdCh5YW1fY2xlYW51cF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtMTIwMC5oIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtMTIwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2NhOGEzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbTEyMDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0vKgotICoKLSAqIEZpbGUgeWFtMWsyYjUubWNzIGNvbnZlcnRlZCB0byBoIGZvcm1hdCBieSBtY3MyaAotICoKLSAqIChDKSBGNkZCQiAxOTk4Ci0gKgotICogVHVlIEF1ZyAyNSAyMDoyNDowOCAxOTk4Ci0gKgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJpdHNfMTIwMFtdPSB7Ci0weGZmLDB4ZjIsMHgwMCwweGE1LDB4YWQsMHhmZiwweGZlLDB4OWYsMHhmZiwweGVmLDB4ZjMsMHhjYiwweGZmLDB4ZGIsMHhmYywweGYyLAotMHhmZiwweGY2LDB4ZmYsMHgzYywweGJmLDB4ZmQsMHhiZiwweGRmLDB4NmUsMHgzZiwweDZmLDB4ZjEsMHg3ZCwweGI0LDB4ZmQsMHhiZiwKLTB4ZGYsMHg2ZiwweDNmLDB4NmYsMHhmNywweDBiLDB4ZmYsMHhkYiwweGZkLDB4ZjIsMHhmZiwweGY2LDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGZmLAotMHhmZCwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhiZiwKLTB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhmZiwweGZmLDB4ZmMsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjAsCi0weDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZSwweDdmLDB4YmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4OWYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGZmLAotMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZiLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZjcsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhmMCwweDVmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhlZiwweGZmLDB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGJmLDB4ZmYsMHhmZiwweGRmLDB4ZjcsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGViLAotMHhmZiwweGZmLDB4ZmYsMHhmZCwweGZmLDB4YmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmYiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4NmYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZjcsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZjcsMHhiZiwweGU3LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4NzcsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgxZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZGIsCi0weGZmLDB4ZmYsMHhmNSwweGE1LDB4ZmQsMHg0YiwweDZlLDB4ZWYsMHgzMywweDMyLDB4ZGQsMHhkMywweDRhLDB4ZDYsMHg5MiwweGZlLAotMHhiMywweDNmLDB4YmQsMHhmMSwweGZhLDB4ZGIsMHhmZSwweGY3LDB4ZjYsMHg5NiwweGJkLDB4YmQsMHhmZiwweGJkLDB4ZmYsMHhlZCwKLTB4N2YsMHg2YiwweDdmLDB4ZmIsMHhkZiwweGZlLDB4ZmIsMHhmZSwweDkwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJlLDB4ZWYsCi0weGZmLDB4ZmYsMHhkYiwweDVmLDB4ZjYsMHhmZiwweGY2LDB4OGYsMHhmZCwweGE1LDB4ZGQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDZmLAotMHg3ZiwweGRiLDB4ZjEsMHhmYywweGJmLDB4ZmYsMHg2ZiwweGZmLDB4ZWYsMHhmYywweDViLDB4NWQsMHhkYSwweGRmLDB4ZjQsMHhmZiwKLTB4ZjIsMHhmZiwweGZkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmIsMHhlZiwweGI3LDB4ZmMsMHgzMywweGZmLDB4ZmIsMHhmZiwweDA0LDB4NmEsMHhmMywweDNjLDB4MzYsMHhmZiwweGYwLAotMHgwZiwweGYxLDB4MGYsMHhmZiwweGZmLDB4ZmYsMHhmMywweDE1LDB4NzIsMHgwZiwweGYxLDB4NmYsMHhmZiwweGZlLDB4OTQsMHgzZiwKLTB4ZmYsMHhmZiwweGZmLDB4N2IsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjAsCi0weGY3LDB4ZWYsMHhiNywweGZjLDB4MzMsMHhmZiwweGZmLDB4ZmYsMHgwNCwweDZhLDB4ZjMsMHgzYywweDM2LDB4ZmYsMHhmMCwweDBmLAotMHhmMSwweDBmLDB4ZmYsMHhmZiwweGZmLDB4ZjMsMHgxNSwweDczLDB4OGYsMHhmMiwweDZmLDB4ZmYsMHhmZSwweDk0LDB4M2YsMHhmZiwKLTB4ZmYsMHhmZiwweDdkLDB4OWYsMHhmZiwweGYwLDB4MGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4OWUsCi0weGZmLDB4ZmMsMHhlZiwweGQzLDB4ZmIsMHhmZiwweDdmLDB4ZjUsMHg1ZiwweGZlLDB4NTksMHhmZiwweGZmLDB4ZmYsMHhmYywweGYxLAotMHhmZSwweDdmLDB4ZmYsMHhmZiwweGZhLDB4MTcsMHhmZiwweGU3LDB4ZWYsMHhlZiwweGZmLDB4ZmYsMHgzZiwweGYxLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNSwweGZmLDB4YmYsMHhmZiwweGZjLDB4ZWEsCi0weGZmLDB4ZjAsMHhmZiwweGZmLDB4YmYsMHhmOSwweDNmLDB4YjEsMHhlZiwweGZmLDB4ZDcsMHhmZiwweGZiLDB4ZmYsMHhmMCwweGZmLAotMHhmZiwweGYzLDB4ZmYsMHhkZiwweGZmLDB4N2IsMHhmZiwweGZkLDB4ZmYsMHhmNiwweGZmLDB4YmYsMHhmZiwweGZmLDB4YmYsMHhmZiwKLTB4ZmYsMHhmZiwweGRhLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjIsMHhjMCwweDAxLDB4MDAsMHgwMCwweDAyLDB4MDIsCi0weDAyLDB4MDIsMHgwMCwweDQwLDB4NDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDE5LDB4MDAsMHgwNCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwKLTB4MDAsMHgzYywweGYwLDB4YWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZkLDB4YmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZkLDB4ZmYsCi0weGZmLDB4N2YsMHhmZiwweGZmLDB4YmYsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhkZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YmYsMHhmZSwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwKLTB4ZGIsMHhmMCwweDZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMCwweGJmLDB4ZGYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGRmLDB4ZGYsMHhmZiwweGVmLDB4ZmYsMHg5ZSwweGVmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmMSwweGVmLDB4ZmYsMHhmZiwweGZmLAotMHhmNywweGZhLDB4YmYsMHhmZiwweGZmLDB4ZmUsMHg0NywweGVmLDB4ZmYsMHhiZCwweGY2LDB4ZmYsMHhmZiwweGRmLDB4ZjUsMHhmMCwKLTB4ZjAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjgsMHgzMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMSwweDAyLDB4MDgsCi0weDE2LDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAxLDB4MDIsMHgwMCwweDgwLDB4MDEsMHgwYywweDAyLDB4MDAsMHgwMCwweDAxLAotMHgwMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDYsMHgwMCwweDIwLDB4MDAsMHgxMCwweDAwLDB4MTQsMHgwMCwweDA0LDB4YzEsMHhmMCwKLTB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZmLDB4N2YsCi0weGVjLDB4ZmYsMHhmZiwweGZhLDB4ZmYsMHhiZiwweGZmLDB4NmYsMHhmZiwweGUxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhiZCwweGZlLAotMHg0NiwweGZmLDB4ZWYsMHg3ZiwweGNkLDB4ZGYsMHhmZiwweGZmLDB4ZmQsMHhmZiwweGJkLDB4ZmYsMHg3ZiwweDdmLDB4ZjAsMHg0ZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4MGYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhhNCwweGJjLDB4Y2QsMHg2ZCwweDZiLDB4NmYsMHg1YiwweGRjLDB4MzMsCi0weDVhLDB4ZjYsMHhmNywweGY2LDB4YjMsMHgzZiwweGJkLDB4YzEsMHhmYSwweDVhLDB4ZjYsMHhmNiwweGI2LDB4ZjcsMHhmZiwweGJkLAotMHhiYiwweDNjLDB4Y2UsMHhjZiwweDM0LDB4ZWYsMHgzMywweGJiLDB4Y2MsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDRmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZGIsMHhmZiwweGY2LDB4ZDYsMHhmZiwweGZkLDB4ZmQsMHhiZiwweGZmLDB4YWQsCi0weGJmLDB4ZjksMHg3ZiwweDZmLDB4ZmMsMHhkYiwweGYxLDB4ZmQsMHhiZiwweGZmLDB4NmYsMHhmZiwweGZmLDB4ZGEsMHhkYiwweGZjLAotMHhkYiwweGZmLDB4NzYsMHg4ZiwweGY2LDB4ZmYsMHhjZCwweGFiLDB4ZmUsMHhmYiwweGZmLDB4ZDAsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhmZiwweDlmLDB4ZmYsMHhmNCwweDIwLDB4YWYsMHg2ZCwweDBiLDB4YzEsMHg3YiwweGZmLDB4ZmYsMHhmZiwweGNiLDB4ZmYsCi0weDNmLDB4ZjAsMHhlZiwweDdmLDB4MGYsMHhmMSwweGMzLDB4M2MsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmOCwweDBiLAotMHgxZCwweDZhLDB4NjQsMHgwNSwweDZiLDB4OTksMHgwMSwweGZmLDB4ZmQsMHhlZiwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZiwweGZmLDB4ZjQsMHgwMCwweDJmLDB4Y2MsMHgwYiwweGMzLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHgwYSwweGRmLDB4YmYsCi0weGZkLDB4N2YsMHhmZiwweGZmLDB4ZjEsMHhjMywweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg0YSwweDBlLAotMHg5NiwweDY0LDB4MDIsMHg5NywweDk5LDB4MTAsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ODQsMHhmOSwweGQ1LDB4MjcsMHhmMSwweDdmLDB4ZmYsMHhmOCwweGViLDB4ZGYsMHhmMywweGNmLDB4M2YsCi0weDFmLDB4ZmYsMHhmNywweDExLDB4ZmYsMHhjZiwweGZmLDB4ZmUsMHg2NywweGZmLDB4ZmYsMHhmZiwweGZmLDB4YzQsMHhmZiwweGZmLAotMHhiMywweGExLDB4ZmYsMHhmOSwweGUwLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjUsMHhmZiwKLTB4ZmYsMHhmYiwweDdmLDB4ZTAsMHhmZiwweGM3LDB4ZmUsMHg3ZiwweDNmLDB4ZmYsMHhmZCwweDc3LDB4OGQsMHg3ZiwweDBmLDB4ZmYsCi0weGMzLDB4ZmYsMHhmMSwweGJmLDB4OGYsMHhjZiwweGZmLDB4ZmYsMHhkZCwweDdiLDB4ZmYsMHhmNiwweGZhLDB4ZjcsMHhmZiwweDQwLAotMHg5ZiwweGY5LDB4N2YsMHhkOCwweGZmLDB4ZmYsMHhmYSwweGYwLDB4MWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYxLDB4YzAsMHgwMCwKLTB4MDAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MTAsCi0weDAwLDB4MDEsMHgwMCwweDEwLDB4MjAsMHgyMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMSwweDA1LDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDQwLDB4NDAsMHgwMCwweDAwLDB4M2MsMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZCwweGJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4N2YsMHg3ZiwweGZmLDB4ZWYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGVmLDB4ZjcsCi0weGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmNywweGZmLDB4ZmYsMHhmZiwweGZjLDB4ZmQsMHhmZiwweDdmLAotMHg3ZSwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZjAsMHg2ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjAsMHhiYiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZWIsMHhmZCwweDZmLDB4ZmYsMHhmNywweGZlLDB4ZjUsMHg3ZiwweGZmLDB4ZmYsMHg3ZiwweGJmLDB4YjEsCi0weGZmLDB4ZmYsMHg5ZiwweGJmLDB4ZmIsMHhmZiwweGZlLDB4ZmYsMHhmZSwweGZmLDB4ZjcsMHhlYiwweGRmLDB4YmYsMHg1ZiwweGRkLAotMHhmZiwweGRiLDB4ZmQsMHhkMCwweGYwLDB4NmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY4LDB4MzAsMHgyMCwweDAwLDB4NDIsMHgwMCwKLTB4MDAsMHgwMCwweDMwLDB4MTgsMHgwNCwweDA4LDB4MDksMHgyMSwweDgyLDB4ODAsMHgwMiwweDAwLDB4MDgsMHgwMCwweDAxLDB4MDAsCi0weDAwLDB4MDAsMHgwYywweDIwLDB4MTAsMHgwMCwweDExLDB4MDAsMHg0NCwweDg0LDB4MDAsMHgyMCwweDIwLDB4ODQsMHg4MCwweDAwLAotMHgwMCwweDAwLDB4YzEsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGY3LDB4ZmYsMHhmYiwweGRkLDB4ZjksMHhmZiwKLTB4ZGEsMHhmZiwweGRjLDB4ZGQsMHhmYywweGZiLDB4ZmYsMHhiZiwweGZiLDB4M2UsMHhkNywweDk2LDB4ZmUsMHg2MSwweGY3LDB4ZmYsCi0weDdmLDB4ZmYsMHgzZiwweGZkLDB4ZmYsMHhkZiwweGNmLDB4ZjcsMHhkZiwweGY3LDB4YmYsMHhmZCwweGZmLDB4ZmUsMHhlZiwweGVmLAotMHhmZSwweGZmLDB4ZjAsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGYzLDB4YmQsMHhmZCwweDRiLDB4NzQsMHhjZiwKLTB4NzMsMHg1YiwweGNiLDB4M2IsMHhkZiwweGZlLDB4ZjcsMHhmZSwweGQzLDB4NzUsMHhhYywweGExLDB4ZmIsMHhkZiwweGZlLDB4ZjcsCi0weDc2LDB4OTYsMHhiNSwweDI0LDB4YmQsMHhhNSwweGFkLDB4NDksMHgyZiwweDY5LDB4MmIsMHg1MiwweDViLDB4YmQsMHhmZiwweGZmLAotMHhmMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZmYsMHhmNiwweGZlLDB4ZmYsMHhjYywKLTB4YTcsMHhmYiwweGFkLDB4ZmYsMHg3ZiwweDZmLDB4ZmYsMHg2ZCwweDdmLDB4ZGIsMHhmMSwweGZkLDB4YmYsMHhmZiwweDZmLDB4ZmYsCi0weDZmLDB4ZmYsMHhkYiwweGZmLDB4ZGIsMHhmZiwweGY2LDB4OTcsMHhmNiwweGZmLDB4YjUsMHhiNSwweGZmLDB4ZmYsMHhmZiwweGQwLAotMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhhNSwweGJjLDB4NDMsMHhmYywweDdjLDB4MDMsMHhlNywKLTB4ZmYsMHhmZiwweDIwLDB4ZmYsMHhmZiwweGZmLDB4Y2MsMHhmZCwweDdkLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGQ1LDB4NTksCi0weGJhLDB4NTYsMHg2NiwweDZhLDB4YWQsMHg5YSwweGE5LDB4OWEsMHg5NywweGE1LDB4YWEsMHhiYiwweGZmLDB4ZmYsMHhmMCwweDBmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZlLDB4ZmIsMHhmZiwweGZkLDB4ZjcsMHhmZCwweDQzLDB4ZmYsMHhmZCwweDZiLDB4ZTcsMHhmZiwKLTB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgzZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkNSwweDU5LDB4YjUsCi0weGE2LDB4NjYsMHg2YSwweGFkLDB4OWEsMHhhOSwweDk5LDB4NmIsMHg1YSwweGFhLDB4ZmYsMHhmZiwweGI3LDB4ZjAsMHgzZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZSwweDljLDB4ZjcsMHhmZCwweGQyLDB4NDEsMHhmZiwweGZmLDB4ZjIsMHg3ZiwKLTB4OGYsMHhmZiwweGZmLDB4M2QsMHhmMywweGZmLDB4MTcsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGRmLDB4ZmMsCi0weDhmLDB4MzgsMHhmZiwweGVmLDB4MjMsMHhmZiwweGZiLDB4ZjcsMHhjOCwweGZmLDB4ZmYsMHhmZiwweGYwLDB4OWYsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZjUsMHg3ZiwweGZmLDB4ZmQsMHhmZiwweGU0LDB4ZmYsMHhlYiwweGZmLDB4Y2YsMHhiZiwweGZhLDB4ZmYsMHhhYiwKLTB4ZWYsMHhmZiwweGZiLDB4ZmYsMHhmMywweGZkLDB4NjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZhLDB4ZmYsMHhmYiwweGZkLDB4MGQsCi0weGZmLDB4ZmUsMHhmZiwweDQzLDB4N2YsMHhmZSwweGJmLDB4ZDAsMHhmZCwweGZmLDB4ZmEsMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGYzLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4MDIsMHgwMSwweDAwLDB4NjAsMHhjMCwweDQwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDM0LDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDg4LDB4MDAsCi0weDAwLDB4MDMsMHgwMCwweDAwLDB4NDAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDNjLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmZCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHg3ZiwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGZmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmUsMHg1ZiwweGZmLDB4ZmYsMHhjYiwweGYwLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYwLAotMHhmZiwweGZmLDB4ZmQsMHhmZiwweGVmLDB4ZTMsMHhkZSwweGVlLDB4ZDksMHhjNSwweDkzLDB4ZmYsMHhmZiwweGZlLDB4ZmUsMHhmZiwKLTB4ZmIsMHhlZSwweGZlLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhmZiwweGJmLDB4ZjcsMHhmZiwweGZmLDB4N2YsCi0weGFmLDB4YmQsMHhkZiwweGRmLDB4ZmIsMHhmMywweGYzLDB4ZjAsMHhmMCwweGFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmOCwweDM0LAotMHgwMCwweDA2LDB4NjEsMHgwMCwweDE4LDB4MDEsMHhhMCwweDA1LDB4MTcsMHgwMCwweDIwLDB4MDUsMHgyOCwweDIwLDB4MDAsMHgwMCwKLTB4MDUsMHgwMCwweDQxLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwOSwweDAwLDB4MDEsMHgyMCwweDg2LDB4ODIsMHgwOCwweDQwLDB4MDMsCi0weDgwLDB4MzAsMHg3MCwweDA4LDB4MTQsMHgwMiwweGMxLDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4YmQsMHhlZiwweGZiLDB4ZmYsMHhmZiwweGZiLDB4OWMsMHg3ZiwweGVmLDB4ZGYsMHhmZiwweGJmLDB4ZWIsMHhkZSwKLTB4ZmYsMHhjMSwweDdmLDB4ZmYsMHhmYiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4NWYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGJmLDB4ZWYsCi0weDNmLDB4ZjcsMHg4ZiwweGVmLDB4N2YsMHhmZiwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGJkLAotMHhkZiwweGVmLDB4N2QsMHg2ZCwweDJiLDB4NWEsMHg1ZCwweGQyLDB4ZGYsMHhmNiwweDkyLDB4YjYsMHhiMiwweGIzLDB4YWMsMHhhMSwKLTB4ZmIsMHhkZiwweGZlLDB4ZjEsMHhlZSwweGY1LDB4ZjYsMHhiYywweDZiLDB4YmQsMHg3ZCwweGFmLDB4MWEsMHhlZiwweDVmLDB4NmIsCi0weGM2LDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkYiwweGZmLAotMHhmNiwweGZmLDB4ZjYsMHhiNywweGZkLDB4YWQsMHhmZCwweGJmLDB4ZjMsMHg2ZiwweGZmLDB4NmYsMHhmZiwweGRiLDB4ZDEsMHhmZCwKLTB4YmYsMHhmZiwweDZmLDB4ZjUsMHg2YiwweGJjLDB4NWIsMHgzYywweGRhLDB4ZWYsMHgxNiwweGFmLDB4MTYsMHhmZiwweGNkLDB4YWIsCi0weGZmLDB4NmYsMHhmZiwweGQwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZjLDB4YmYsMHhmZiwweGZmLAotMHhmZiwweDZjLDB4MDMsMHgxMCwweGMxLDB4ZjMsMHhmZiwweGYzLDB4M2EsMHhmMywweGNhLDB4ZmYsMHhhZiwweGYxLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGQ5LDB4OTYsMHhhNiwweDY1LDB4YTYsMHg2NiwweDZhLDB4OTUsMHg2OSwweDY5LDB4NmEsMHg1YSwweDVhLDB4ZmYsCi0weGZmLDB4NWYsMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGJmLDB4ZmYsMHhmZiwweGZmLAotMHhlYSwweDBmLDB4NTAsMHhjMywweGYzLDB4N2YsMHhmZiwweGYzLDB4ZjMsMHhjMywweGZmLDB4YWYsMHhmMSwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhkOSwweDk2LDB4YTYsMHg2NSwweGE2LDB4NjYsMHg2YSwweDk1LDB4NjksMHg2OSwweDZhLDB4NWEsMHg1YSwweGZmLDB4ZmYsCi0weGZmLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkNywweGZmLDB4ZmYsMHg1ZiwweGMxLAotMHgzZiwweGY3LDB4NWUsMHhmNSwweGNlLDB4OWUsMHg1ZiwweDNmLDB4MTcsMHhmZiwweGYzLDB4ZTEsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZDgsMHhmZiwweGZhLDB4ZmUsMHg2NywweGZmLDB4ZmUsMHhiZiwweDVhLDB4ZmYsMHhmZiwweGFmLDB4ZjUsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY1LDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmNywweGZmLDB4ZmQsMHg0ZSwweDNkLAotMHgzZiwweGU3LDB4MGIsMHhiZiwweDhmLDB4ZjksMHhmZiwweGViLDB4ZTMsMHhmZiwweGUxLDB4ZmYsMHhmZiwweGZjLDB4ZmYsMHhjNywKLTB4OWYsMHhmZiwweDNlLDB4MzksMHhlNSwweGZmLDB4Y2YsMHg5YiwweGY5LDB4ZmYsMHhmZiwweGM1LDB4ZmYsMHhmZiwweGZhLDB4ZjAsCi0weDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHg2MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHgyMCwKLTB4MDAsMHgwMSwweDEwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweGYwLDB4NGYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmQsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGJmLAotMHgzZiwweGZmLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmNywKLTB4ZmYsMHhlZCwweGZmLDB4ZmIsMHhmZSwweGZmLDB4N2YsMHhmZiwweDdmLDB4ZGYsMHhmZiwweGZmLDB4ZGQsMHhmMCwweDNmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGYwLDB4ZmYsMHhmZiwweGYzLDB4ZmYsMHhmNywweGZmLDB4ZmUsMHg1ZiwweGZmLDB4ZjcsMHhmZiwweGZmLAotMHhkZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmUsMHg3YiwweGYxLDB4ZmYsMHhmZCwweGZkLDB4ZmYsMHhkZiwweGRmLDB4ZmYsMHg3ZCwKLTB4NzMsMHhmOSwweGZmLDB4YzMsMHg3ZSwweGZlLDB4ZmYsMHhlZiwweGQ3LDB4ZmYsMHhjZiwweGQwLDB4ZjAsMHg2ZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmOCwweDMwLDB4MDAsMHgwMCwweDQwLDB4MDQsMHgwMCwweDAxLDB4NDEsMHgyMCwweDAwLDB4MDQsMHgwMCwweDAyLAotMHhkNSwweDA5LDB4MDAsMHgwMiwweDgwLDB4MDIsMHgwMSwweDAwLDB4MDAsMHgwMCwweDBhLDB4MDQsMHgwMCwweDA3LDB4MDAsMHgwMSwKLTB4NTAsMHgwMSwweDgwLDB4MDIsMHg2MSwweDQwLDB4NDEsMHgwYywweDE0LDB4MDgsMHhjMSwweGYwLDB4OWYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGRmLDB4Y2IsMHg1ZiwweGZlLDB4ZWYsMHhmZiwweGZlLAotMHhmZiwweDNmLDB4ZmYsMHg3ZiwweGZkLDB4YzEsMHhmZiwweGZmLDB4N2YsMHhmZiwweGRmLDB4ZmQsMHhmYywweGZkLDB4ZjcsMHhlZSwKLTB4ZmYsMHhmZiwweDRlLDB4ZmYsMHhkZiwweGNmLDB4ZGIsMHhlYiwweGZmLDB4ZmYsMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgyZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4N2YsCi0weGZmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLAotMHhmNywweGZiLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHhmZiwweGYwLDB4MWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGRkLDB4ZmYsCi0weGZmLDB4ZmYsMHhhNSwweGZmLDB4NmYsMHg2YiwweGU5LDB4NmYsMHhkYSwweGNhLDB4ZmIsMHhkZCwweGVlLDB4ZjcsMHhmNiwweGIyLAotMHhiMywweGE0LDB4YTEsMHg1YiwweDViLDB4ZjYsMHhkNywweGY0LDB4ZjcsMHg3YiwweGJkLDB4YmQsMHhhZCwweGNmLDB4ZWYsMHg3ZiwKLTB4NmIsMHg3ZiwweDNiLDB4ZGYsMHhkYiwweGZmLDB4ZmYsMHgzMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGY2LDB4ZmUsMHg5NiwweGZmLDB4ZmQsMHhiNSwweGZkLDB4YmYsMHhhZCwweDdmLDB4ZmYsMHg2ZiwweGZmLAotMHhkZSwweGQxLDB4YWQsMHhhZCwweGU5LDB4ZmYsMHhmMSwweGVjLDB4ZWYsMHhkZSwweDNmLDB4Y2IsMHhmZiwweGY2LDB4ZmYsMHgzMiwKLTB4ZmYsMHhjNSwweGJkLDB4ZmYsMHhmZiwweGZmLDB4ZDAsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmUsMHhmYiwweGZmLDB4ZjQsCi0weDI4LDB4YmYsMHhmZiwweGZkLDB4ZmIsMHhkMywweGZmLDB4ZmYsMHg0MiwweGZmLDB4ZmYsMHhmZiwweGVhLDB4YjMsMHhmYywweGMzLAotMHhjMSwweGZmLDB4MzMsMHhmZiwweGMwLDB4MTUsMHg2YiwweDcwLDB4ZmYsMHhmMCwweGYyLDB4NGYsMHhmZiwweGZjLDB4M2UsMHg5NywKLTB4M2MsMHhmZiwweGZmLDB4ZmQsMHhlZiwweGYwLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZlLDB4NzgsCi0weGJmLDB4ZmYsMHhmZCwweGYzLDB4ZWYsMHg1NSwweGZmLDB4N2UsMHhmZiwweGZmLDB4ZmYsMHhlYSwweGIzLDB4ZmMsMHhjMywweGMxLAotMHhmZiwweDMzLDB4ZmYsMHhjMCwweDE1LDB4NmYsMHhmZiwweDBmLDB4ZjAsMHhmMCwweDBmLDB4ZmYsMHhmYywweDNkLDB4NmIsMHhjMywKLTB4ZmYsMHhmZiwweGZlLDB4ZjcsMHhmMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZjLDB4ZmYsCi0weGZmLDB4MjMsMHhmOCwweDdmLDB4ZmYsMHg0ZSwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZjksMHgxNywweGZmLDB4ZjYsMHhmMSwweGZmLAotMHhjZiwweGVmLDB4ZmYsMHhmZiwweDEzLDB4ZGYsMHhlNiwweDJmLDB4YzcsMHhmZiwweGZmLDB4ZTcsMHhjMSwweGZkLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg0ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjUsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGFlLDB4ZmYsCi0weGZmLDB4N2YsMHgzYiwweDNmLDB4ZmMsMHg3ZiwweGZjLDB4ZWYsMHhmZiwweGZjLDB4ZTIsMHg3YiwweGZmLDB4ZjEsMHhmZCwweGVkLAotMHhlZiwweGZmLDB4ZmYsMHgzNSwweDczLDB4ZmYsMHhmZiwweGZlLDB4ZmEsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmYSwweGYwLDB4OGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYxLDB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwNCwweDAxLDB4NDAsMHg0MCwweDAwLAotMHgwMCwweDMwLDB4MjgsMHgwNCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzgsMHhmMCwweDBmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYiwweGZmLDB4N2YsCi0weGZmLDB4ZmYsMHg5ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZGYsMHhkZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhlZCwweGZmLDB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YmYsMHhiZiwweGZmLDB4ZmYsMHhjMywKLTB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjAsMHhiZiwweGZkLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZCwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZkLDB4N2IsMHhmZiwweDdmLDB4ZmYsMHhiZCwweGZmLDB4ZjEsMHhlZiwweGZmLDB4ZmYsMHhmZCwweGRmLAotMHhmZCwweGZiLDB4ZmYsMHhmZiwweGJmLDB4YmUsMHhmZiwweGNkLDB4N2YsMHhmYywweGY3LDB4ZjcsMHg2ZiwweGJmLDB4ZDgsMHhmMCwKLTB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY4LDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHhhMCwweDAwLDB4MDAsCi0weGMwLDB4MDAsMHgwMCwweDIwLDB4MzQsMHgwMCwweDAwLDB4MDAsMHgwYywweDgxLDB4MDAsMHgyMCwweGE0LDB4MjAsMHgwMCwweDEwLAotMHgwOCwweDA0LDB4NDgsMHgwOCwweDAwLDB4NDAsMHg5MywweDAwLDB4MTAsMHgwMCwweDM4LDB4MTgsMHgyMCwweGMxLDB4ZjAsMHgzZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZiLDB4ZmYsMHhmZiwweGI5LDB4ZGYsMHhmZSwweGIzLDB4ZmYsMHhmZiwweGU3LDB4ZmQsCi0weGZmLDB4ZmYsMHgzYiwweGZmLDB4N2YsMHhmZiwweGJmLDB4ZmYsMHhjMSwweGZmLDB4ZmMsMHhmZiwweGZmLDB4M2YsMHg3NywweGZlLAotMHhmZSwweGNmLDB4ZmYsMHhiZiwweGZkLDB4YmYsMHhmZiwweGZlLDB4ZWQsMHhmMiwweGZkLDB4ZjcsMHhmZiwweGYwLDB4MmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGYzLDB4YWQsMHhjZiwweGVmLDB4NzAsMHhjOSwweDczLDB4M2IsMHhkZiwweDViLDB4NGEsCi0weGY2LDB4YjcsMHhmZSwweGQ3LDB4ZjUsMHhiYywweGMxLDB4MzMsMHhjYSwweGQ2LDB4YjcsMHg2ZSwweGY3LDB4ZmIsMHhiZCwweGM1LAotMHgyNCwweGNmLDB4NmYsMHgyZiwweDRkLDB4MmIsMHhiYSwweDVhLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhhZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjYsMHhmNiwweGQ3LDB4ZmYsMHhmZiwweGFkLDB4YmQsMHhmZiwweGZmLDB4ZmYsCi0weGVmLDB4ZjcsMHg3ZiwweGZjLDB4NWIsMHhiMSwweGZkLDB4YmQsMHg3NSwweDZmLDB4ZWYsMHg2YSwweGZkLDB4NWIsMHhmYiwweGRiLAotMHgzYSwweGJmLDB4OGUsMHg5ZiwweGZmLDB4YmYsMHhmZCwweGZmLDB4NmYsMHhmZiwweGQwLDB4NmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhiYiwweGZmLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZCwweGZiLDB4N2YsMHhkZSwweGZmLDB4ZmYsMHg1YSwweGQ2LDB4YmYsCi0weGQ4LDB4MmEsMHhiZiwweGJmLDB4ZjEsMHhlNSwweGZmLDB4Y2MsMHhjMCwweGE5LDB4NzAsMHhmZiwweGYzLDB4M2MsMHgzYywweGZkLAotMHg1NywweGZkLDB4OTgsMHgwMywweDAwLDB4YzMsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4M2QsMHhiZiwweGZmLDB4ZmQsMHhmYiwweGZmLDB4ZGIsMHhmZiwweGZmLDB4MGYsMHhmYywweDNmLDB4ZDgsCi0weDJhLDB4YmYsMHhiZiwweGYxLDB4ZWYsMHhmZiwweGNjLDB4YzAsMHg5NiwweGJlLDB4ZmYsMHhmMywweDNmLDB4ZmYsMHhmZCwweDU3LAotMHhmZCwweDk5LDB4MGYsMHhmZiwweGMzLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg0ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmMSwweGU3LDB4ZmYsMHhmZiwweGYzLDB4OGUsMHg3YiwweGZmLDB4YTgsMHhmZiwweGRmLDB4N2YsMHg4ZSwweDc4LDB4NzMsCi0weGZmLDB4ZjEsMHg1MSwweDYyLDB4ZmYsMHhmYywweDRiLDB4ZmYsMHhmMywweGZmLDB4N2UsMHhjZiwweGY5LDB4ZmYsMHhmZCwweGZmLAotMHhmZiwweDdmLDB4ZmYsMHhlMCwweGZmLDB4ZmYsMHhmZiwweGYwLDB4NGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY1LDB4ZmYsMHhmZiwKLTB4ZmIsMHhmZCwweGFlLDB4ZmYsMHhmYywweGZlLDB4NmYsMHgzZiwweGY4LDB4ZmQsMHg3NywweGFmLDB4ZmUsMHgzNywweGZlLDB4N2IsCi0weGZmLDB4YjEsMHg4YywweGZmLDB4ZWYsMHhmZCwweGY4LDB4ZTcsMHhiZiwweGZmLDB4ZjEsMHhmZSwweDNlLDB4ZjcsMHhmZSwweDk1LAotMHgzZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmEsMHhmMCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMSwweGMwLDB4MDAsMHgwMCwKLTB4MDEsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMiwweDAwLDB4MDAsMHgxMCwweDAwLDB4MTAsMHgwMCwweDEwLDB4MDgsCi0weDQxLDB4ODAsMHgxMCwweDAwLDB4MDAsMHgwOCwweDEwLDB4ODQsMHgwMCwweDBjLDB4MDQsMHgwMiwweDYxLDB4MDAsMHgwMCwweDgxLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDNkLDB4ZjAsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmQsMHhiZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmZSwweGZkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsCi0weDdmLDB4YmYsMHhmNywweDdmLDB4ZWYsMHhmZiwweGVmLDB4ZmYsMHhmNywweGZkLDB4ZmYsMHhmZiwweGZkLDB4N2YsMHhmZiwweGJlLAotMHhkZiwweGZmLDB4ZmYsMHhkOSwweGYwLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYwLDB4YmIsMHhmZiwweDdmLDB4ZmIsMHhmZiwKLTB4ZmIsMHhmZiwweGJmLDB4ZmYsMHhmMywweDdmLDB4ZmIsMHhmZCwweGViLDB4N2YsMHhkZiwweGZhLDB4ZmYsMHhkZSwweGYwLDB4ZWQsCi0weGZmLDB4YjEsMHhmNywweGY5LDB4MWYsMHhiNSwweDViLDB4ZmUsMHg3ZSwweGY3LDB4YmUsMHhmZCwweDdmLDB4NWYsMHhiNSwweGY3LAotMHhmZiwweGZmLDB4ZDAsMHhmMCwweDRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmOCwweDMwLDB4MDEsMHgwMCwweDA3LDB4NDIsMHgwMSwKLTB4MDAsMHg2YSwweDE4LDB4NTAsMHg4MCwweDAwLDB4MDAsMHgwMiwweDQwLDB4MDEsMHgwMSwweDIwLDB4MDEsMHgwMSwweDI0LDB4MTQsCi0weDIxLDB4MTAsMHgwMiwweDA4LDB4MDcsMHgwOCwweDAwLDB4NDAsMHgxMCwweDgwLDB4NTgsMHgwMCwweDg0LDB4ODAsMHgxOCwweDEwLAotMHg0MCwweGMxLDB4ZjAsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmZiwweGRiLDB4YjcsMHhmMywKLTB4ZGYsMHg3YywweGY4LDB4NzQsMHhmZiwweGZmLDB4NmYsMHg3ZCwweDNmLDB4N2UsMHhlYywweDdmLDB4YzEsMHhmNSwweGZmLDB4Y2YsCi0weDZmLDB4OWYsMHhmOSwweGRmLDB4YmUsMHhlNSwweGU3LDB4ZmYsMHhkNywweGYzLDB4ZGQsMHhmYiwweGZmLDB4ZmMsMHhmZiwweGJmLAotMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmMCwweDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhkNywweGZmLDB4ZmYsMHhmZiwweGI0LDB4Y2YsMHhlZiwweDc3LDB4NmYsMHg3MywKLTB4M2EsMHg0YSwweDNhLDB4Y2IsMHhkNCwweGY3LDB4MmUsMHhkNiwweGJkLDB4YmQsMHhhMSwweDNiLDB4ZGYsMHhkNiwweGY3LDB4ZWUsCi0weGQzLDB4MzUsMHhiZCwweGZiLDB4YmQsMHhjZSwweGViLDB4MmIsMHg0ZCwweDJmLDB4YmIsMHhkYSwweGZmLDB4ZmYsMHhmZSwweGIwLAotMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweDVmLDB4MzYsMHhhZiwweDNmLDB4ZWQsMHhiNywKLTB4ZjUsMHhmZCwweGYzLDB4MmIsMHhlZiwweDc3LDB4ZmYsMHhmYiwweGRhLDB4YjEsMHhiZCwweGEzLDB4NzcsMHg2OSwweDdmLDB4NGYsCi0weGZmLDB4ZGIsMHhmYSwweDViLDB4ZmYsMHhmMiwweGZlLDB4ZmYsMHg5NiwweGZmLDB4ZmYsMHhmZSwweGRmLDB4ZmYsMHhkMCwweGFmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZkLDB4OGYsMHhmZCwweDQwLDB4NmYsMHg5ZSwweDgzLDB4NWEsMHgwZiwKLTB4ZmEsMHhjMywweGZmLDB4ZmYsMHhmYywweGU5LDB4N2YsMHhmMywweDAxLDB4ZDAsMHgwMCwweGZlLDB4YmYsMHhjZCwweDNmLDB4ZjAsCi0weGVmLDB4ZmMsMHhjNSwweDBjLDB4M2YsMHhmZCwweDY4LDB4MGIsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGRmLDB4ZjAsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmZiwweGJiLDB4ZmYsMHhmZCwweDg1LDB4ZmYsMHhkNCwweDZmLDB4OWYsMHhjMywweDVhLDB4MGYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmMsMHhlOSwweDdmLDB4ZjMsMHgwMSwweGYwLDB4ZmIsMHhjMiwweGJmLDB4ZmMsMHgwMCwweDM3LDB4ZWYsCi0weGZjLDB4Y2QsMHhiYywweDNmLDB4ZmYsMHgwYywweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4NWYsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkOSwweGY3LDB4ZDEsMHhiNywweDdlLDB4N2YsMHhmMSwweGU0LDB4ZmQsMHhmZiwKLTB4ZmIsMHhmYiwweGZmLDB4NWYsMHhmZiwweDdmLDB4YjEsMHhiYywweDBmLDB4NjcsMHhlYiwweGI4LDB4M2YsMHhmZiwweGUyLDB4ZmYsCi0weGU5LDB4ZmYsMHhmZCwweGUzLDB4ZmYsMHgzZiwweDlmLDB4YzIsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDlmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGY1LDB4N2YsMHhmZiwweGYwLDB4M2YsMHhiYywweGZmLDB4ZDUsMHhmNSwweGNlLDB4M2YsMHhmZSwweGZmLDB4ZmUsMHg2ZCwKLTB4ZmYsMHhmMSwweGJmLDB4N2IsMHhmZiwweGYxLDB4ZmQsMHhmZiwweDRmLDB4ZmYsMHg4NywweGZmLDB4YWUsMHhmZiwweGIxLDB4ZjgsCi0weGZlLDB4ZmYsMHhmZiwweDc4LDB4MDEsMHhiOSwweGZmLDB4ZmYsMHhmZiwweGZhLDB4ZjAsMHgyZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmMywweGMwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMiwweDEzLDB4MDIsMHgwMCwweDgwLDB4NDAsMHgwMCwweDkwLDB4MTAsMHgwMCwKLTB4MTAsMHgwMCwweDAyLDB4MDAsMHgwMSwweDIwLDB4ODAsMHgxMiwweDEwLDB4MDAsMHg0MCwweDA4LDB4MDAsMHgwNCwweDAwLDB4MDAsCi0weDAyLDB4MDAsMHgwMSwweDQwLDB4MDAsMHg4MCwweDAwLDB4MDAsMHgzYywweGYwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZkLAotMHgxZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGZmLDB4N2YsMHhmNywweGRmLDB4ZjcsMHhmZiwKLTB4ZjcsMHhmYiwweGViLDB4ZDEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZjcsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZlLDB4ZmYsCi0weGZmLDB4N2UsMHhmZiwweGZiLDB4ZmYsMHhmZiwweGZmLDB4ZGIsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMCwweGZmLAotMHhmZiwweGI3LDB4ZWIsMHhmNywweGRmLDB4ZmYsMHhmZSwweGY1LDB4NmIsMHhlNywweGVkLDB4ZjcsMHgzZSwweGVjLDB4ZmYsMHg1NCwKLTB4ZWYsMHg2ZiwweGYxLDB4ZjUsMHhhZiwweDZmLDB4ZjYsMHhmZCwweGZmLDB4ZGQsMHg3YiwweGZmLDB4ZWYsMHhiZiwweDdmLDB4ZmYsCi0weGZmLDB4ZjcsMHhmZiwweGYzLDB4NWYsMHhmNywweGQwLDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjgsMHgzMCwweDAwLAotMHg4MCwweDQwLDB4MDQsMHgwMCwweDgxLDB4MmMsMHgwNCwweDI0LDB4MDAsMHgwMiwweDAxLDB4YzgsMHgwMiwweDAwLDB4MDIsMHgyNCwKLTB4MDAsMHgwMSwweGI0LDB4NDIsMHhkYywweDQ0LDB4MDIsMHgxNSwweDkwLDB4MDIsMHgwMywweDQ4LDB4MzksMHgxMCwweDAyLDB4MjQsCi0weGEwLDB4YmEsMHgwMCwweDAwLDB4NDAsMHhjMSwweGYwLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGZjLDB4ZjcsMHhmMCwweGVlLDB4YjYsMHg1ZCwweGZkLDB4ZjUsMHhmZiwweGRiLDB4ZjcsMHg3ZiwweDdmLDB4YmUsMHhmZiwKLTB4YzEsMHhmZSwweGJmLDB4ZmEsMHhmYSwweDVmLDB4ZmYsMHhhZCwweGZmLDB4ZWYsMHhmZiwweDdmLDB4ZGYsMHg3ZiwweGZlLDB4YmYsCi0weGI3LDB4OTQsMHhiZiwweGZmLDB4ZmYsMHhmMCwweDlmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg4ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZDcsMHhmZiwweGZmLDB4ZmIsMHhiNSwweGZmLAotMHhlZiwweDdjLDB4ZWIsMHgyYiwweDUyLDB4NWIsMHgzYiwweGRhLDB4ZDQsMHhmMywweDM2LDB4OTYsMHhiNSwweGJkLDB4ZjEsMHhmYiwKLTB4ZGEsMHhlZSwweGY2LDB4ZmUsMHhkMywweDM1LDB4YmQsMHhkZiwweGFkLDB4Y2YsMHhlZiwweDdlLDB4Y2QsMHg2YiwweGJiLDB4ZGYsCi0weGZmLDB4ZmYsMHhmZCwweGIwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZDMsMHg1ZiwweGY2LAotMHhmZiwweGY2LDB4ZmYsMHhmZCwweGFkLDB4ZmQsMHhmZiwweDdmLDB4ZWYsMHhmZiwweDZmLDB4N2YsMHhkYiwweGYxLDB4YTUsMHhhMywKLTB4N2YsMHg2ZiwweDZiLDB4NGYsMHhmZiwweGRiLDB4ZmIsMHhjYiwweGZmLDB4ZjYsMHhmZiwweGY0LDB4ZDcsMHhmZCwweGJmLDB4ZmUsCi0weGRmLDB4ZmYsMHhkMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmNywweGRmLDB4ZmYsMHhmZiwweGZmLAotMHgzZiwweDdmLDB4ZmMsMHhlNSwweGZmLDB4MjAsMHhmZSwweGZmLDB4ZmYsMHhkZiwweDdmLDB4ZmYsMHhmMSwweDdmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmMCwweDdjLDB4M2QsMHg0ZiwweGYzLDB4YzMsMHgzZiwweGZmLDB4ZmYsMHg2ZiwweGMzLDB4ZmYsMHgwZiwweGZmLDB4ZmYsCi0weGFmLDB4ZjAsMHgyZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZiLDB4YjcsMHhlMCwweDBmLDB4ZmYsMHhmZiwweDJiLAotMHhmZiwweDdkLDB4YmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGY4LDB4OWYsMHg3ZiwweGZmLDB4ZjEsMHg1NSwweGZmLDB4ZmYsMHhmZiwKLTB4ZmQsMHg3YywweDNjLDB4ZmYsMHhmMywweGMzLDB4M2YsMHhmZiwweGZmLDB4ZWYsMHhjMywweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4OWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZWYsMHhmZiwweGZmLDB4OWYsMHhiZiwweDdmLAotMHhmOSwweDE5LDB4NDcsMHg4ZSwweGU3LDB4OWYsMHgzZiwweDE3LDB4ZmYsMHhmYywweDgxLDB4YzEsMHg3ZSwweGYzLDB4ZDksMHhmOSwKLTB4NzMsMHhkZiwweGY0LDB4N2YsMHhmYSwweGZmLDB4ZmYsMHhmZiwweGZiLDB4N2YsMHg3NywweGM3LDB4ZmYsMHhmZiwweGZmLDB4ZjAsCi0weDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNSwweGY3LDB4ZmYsMHhmYiwweGZmLDB4ZjcsMHgzZiwweGZjLDB4YmYsMHgzZSwweDNmLAotMHhlYywweGZmLDB4ODEsMHhhZiwweGZlLDB4NGYsMHhmMywweGJiLDB4ZmYsMHhmMCwweDdlLDB4ZmYsMHg2ZiwweGZmLDB4ODcsMHhmZiwKLTB4YmIsMHhmZiwweGQ1LDB4ZmMsMHhmZiwweDdmLDB4ZmMsMHg2ZiwweGZmLDB4ZWYsMHhlNywweGZmLDB4ZmYsMHhmYSwweGYwLDB4M2YsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjMsMHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLAotMHgwMCwweDMwLDB4MTAsMHg2MCwweDIwLDB4MDAsMHgwOCwweDAwLDB4MDEsMHgyMCwweDgwLDB4MDAsMHgxMCwweDAwLDB4MDQsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHg4MCwweDQwLDB4MDAsMHgwOCwweDIwLDB4M2MsMHhmMCwweDZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGY1LDB4YmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmUsMHgzZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGYxLDB4ZGYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZGYsMHhmZiwKLTB4ZmQsMHhiZCwweGZmLDB4ZmYsMHhmZiwweGZiLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDViLDB4ZjAsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmMCwweGJmLDB4YmYsMHhiZiwweGZmLDB4ZjcsMHhmYiwweGZmLDB4ZmUsMHhlZSwweGZhLDB4ZmYsMHhmZiwweGZmLAotMHgzZCwweDNiLDB4ZmYsMHhmZiwweGZlLDB4ZmIsMHhmMSwweGZmLDB4YmYsMHg3YiwweGZmLDB4ZmYsMHhlZiwweGZmLDB4YmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZjcsMHhlZiwweGZmLDB4ZmIsMHhkMCwweGYwLDB4ZGYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZjgsMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYiwweDEwLDB4MDUsMHgwMSwweDAwLDB4MDgsMHgwMCwweDAyLAotMHgwMSwweDAxLDB4MDAsMHgwMCwweDEwLDB4MDEsMHhjOCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MiwweDAyLDB4MDAsMHgwMCwKLTB4MDAsMHg4MCwweDAyLDB4MDAsMHgwMCwweDQwLDB4MjQsMHg4MCwweDAwLDB4YzEsMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmZCwweGY3LDB4ZmEsMHhlZiwweGVlLDB4ZjksMHhmZCwweGZmLDB4ZjcsMHhmZSwweGJmLAotMHgxZiwweGZkLDB4OWUsMHhmZCwweGQxLDB4ZWYsMHhmZiwweGY3LDB4N2YsMHg5ZiwweGZmLDB4ZWYsMHhmZiwweGY2LDB4ZmYsMHhmZSwKLTB4ZmUsMHg3YiwweGZmLDB4YmQsMHhmZiwweDdlLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4YWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsCi0weGZmLDB4ZjcsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZCwweGZmLDB4ZmYsMHhkZiwweGZmLAotMHhmZiwweDVmLDB4ZjEsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGVmLDB4ZmYsCi0weGY3LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDNmLDB4ZmIsMHhmZiwweGZmLDB4ZWYsMHhmYiwweGZkLAotMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZiLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgyZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjcsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhlNywweGZmLAotMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4Y2YsMHhmZiwweGZiLDB4ZmYsMHhmYiwweGYxLAotMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3YiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmMSwweGZmLAotMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZWYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHg1NywweGZmLDB4ZmUsMHhiZiwweGZiLDB4ZjEsMHhmZiwweGZmLAotMHhmZCwweGY3LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZDcsMHhmZiwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZGIsMHhmZiwweGRiLDB4ZmQsCi0weGY2LDB4ZmYsMHhmNiwweGZmLDB4M2MsMHhiYywweGJjLDB4YmYsMHhkZiwweDZmLDB4ZWYsMHgyZiwweGYxLDB4M2MsMHhiZiwweGJjLAotMHhiZiwweGRmLDB4NmYsMHhmZiwweDZmLDB4ZjcsMHhkYiwweGZmLDB4ZGIsMHhmZCwweGY2LDB4ZmYsMHhmNiwweGZmLDB4ZmYsMHhmZiwKLTB4MDEsMHhlMiwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbTk2MDAuaCBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3lhbTk2MDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWVkMWZlNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW05NjAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotLyoKLSAqCi0gKiBGaWxlIHlhbTExMS5tY3MgY29udmVydGVkIHRvIGggZm9ybWF0IGJ5IG1jczJoCi0gKgotICogKEMpIEY2RkJCIDE5OTgKLSAqCi0gKiBUdWUgQXVnIDI1IDIwOjIzOjAzIDE5OTgKLSAqCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgYml0c185NjAwW109IHsKLTB4ZmYsMHhmMiwweDAwLDB4YTUsMHhhZCwweGZmLDB4ZmUsMHg5ZiwweGZmLDB4ZWYsMHhmYiwweGNiLDB4ZmYsMHhkYiwweGZlLDB4ZjIsCi0weGZmLDB4ZjYsMHhmZiwweDljLDB4YmYsMHhmZCwweGJmLDB4ZWYsMHgyZSwweDNmLDB4NmYsMHhmMSwweGZkLDB4YjQsMHhmZCwweGJmLAotMHhmZiwweDZmLDB4ZmYsMHg2ZiwweGZmLDB4MGIsMHhmZiwweGRiLDB4ZmYsMHhmMiwweGZmLDB4ZjYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZjAsMHg2ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmZiwweGZmLDB4ZmYsCi0weGZiLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweDdmLDB4ZjEsMHhmZiwweGZlLDB4ZmYsMHhiZiwweGJmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmMCwKLTB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZjcsCi0weGZmLDB4ZmYsMHhmNywweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4N2UsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhkZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhlZiwweGZmLDB4ZjMsMHhmYiwweGZlLDB4ZmYsMHhmMSwweGZmLDB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGYwLDB4N2YsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDBmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY1LAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgyZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHg3ZiwweGZmLDB4ZWYsCi0weGZmLDB4ZWYsMHhmZiwweDdmLDB4ZWYsMHhmMSwweGZmLDB4ZWYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4OWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4YmQsMHhmZiwweGVmLDB4N2YsMHhlZiwweDdmLDB4ZmIsMHhkZiwweGQzLDB4NWEsMHhmZSwweGQ3LDB4ZDYsCi0weGY3LDB4N2YsMHhiZCwweGYxLDB4YmIsMHg1ZCwweGQ2LDB4ZjcsMHhmZSwweDk2LDB4ZmYsMHhiZCwweGFmLDB4YWQsMHhiZiwweGVmLAotMHg3ZiwweDZiLDB4N2YsMHhmYiwweGQ2LDB4ZmUsMHhmNywweGZmLDB4MTAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4YmUsMHhlZiwKLTB4ZmYsMHhmZiwweGRiLDB4ZmYsMHhmNiwweGZmLDB4ZjYsMHhmZiwweGZkLDB4YmYsMHhmZCwweGJmLDB4ZmYsMHg3ZiwweGZmLDB4N2YsCi0weGRmLDB4ZGIsMHhmMSwweGZkLDB4MzUsMHhmZiwweDZmLDB4ZmYsMHg2ZiwweGZmLDB4ZGIsMHhmZiwweGNiLDB4ZmYsMHhmNiwweGZmLAotMHhmMiwweGZkLDB4ZmQsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGQwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg1NSwweGZmLDB4Y2MsMHhjMCwweDNmLDB4ZmYsCi0weGZmLDB4ZjEsMHgyNCwweGYwLDB4ZmYsMHhmZiwweGNmLDB4ZWYsMHgzZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmYywweDNmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4NTUsMHhmZiwweGNjLDB4YzAsMHgzZiwweGZmLDB4ZmYsCi0weGYxLDB4MDAsMHhmMCwweGZmLDB4ZmYsMHhjZiwweGRmLDB4ZmYsMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmMsMHgzZiwweGZmLAotMHhmZiwweGZmLDB4N2QsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmUsMHg3ZiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsCi0weGZmLDB4Y2YsMHhmZiwweGYzLDB4ZmYsMHg5NywweGZmLDB4ZmYsMHg4ZiwweGU3LDB4ZmYsMHhmZiwweGZjLDB4NzEsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY1LDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZTMsMHhmNywweGVmLDB4ZmYsMHhmZiwweGZjLDB4N2IsMHhmZiwweGYxLDB4M2YsCi0weGZmLDB4ZWYsMHhmZiwweGNmLDB4ZTMsMHhlMywweGZmLDB4ZmYsMHhmZiwweGZmLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhiZiwweGZmLAotMHhiZiwweGZmLDB4ZGEsMHhmMCwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMiwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMSwweDNjLDB4ZjAsMHhhZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmQsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweDlmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmNywweGZmLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhkYiwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYwLDB4YmIsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGZiLDB4ZGYsMHhiZiwweGYxLDB4ZmUsMHhmZCwweGY3LDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4NzcsMHhmZCwweGYyLAotMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmOCwweDM4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMSwweDAwLDB4MDAsMHgwNCwweDI0LDB4MDAsCi0weDQwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDEsMHhjMCwweGYwLAotMHg0ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGJmLDB4ZmYsMHhmZiwweDZmLDB4ZmYsMHhkZiwweGZmLDB4ZDEsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmIsMHhmZiwweGZiLDB4ZWYsMHhmZiwweGZmLDB4ZWUsMHhmZiwweGZmLDB4N2YsMHhmMCwweGRmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg4ZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmNSwweGFkLDB4ZmYsMHg2OSwweDJhLDB4ZWQsMHg2YiwweGZiLDB4ZGYsMHgzYSwKLTB4ZGMsMHhmNCwweDk2LDB4ZWUsMHhiMywweDNkLDB4MzUsMHhjMSwweGJiLDB4ZGQsMHhmZSwweGY2LDB4ZmUsMHhkNiwweGI1LDB4YWQsCi0weGJmLDB4YTUsMHhhZCwweDQ5LDB4MmYsMHg0ZiwweDJiLDB4ZGEsMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4MmYsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4YmYsMHhmZiwweGZmLDB4ZmIsMHg1YiwweGY3LDB4ZjYsMHhmZiwweGY2LDB4ZmYsMHhmZCwweGJmLDB4ZmQsMHhhNSwKLTB4ZjMsMHg2ZiwweGYzLDB4NmUsMHhmYSwweDdiLDB4ZDEsMHhmZCwweGI1LDB4NzcsMHg2ZiwweGU5LDB4NmYsMHhmZiwweGRiLDB4ZmIsCi0weGRiLDB4ZGYsMHhmNiwweGZmLDB4ZjYsMHhmZiwweGZkLDB4M2YsMHhmZSwweGY3LDB4ZmYsMHhkMCwweDRmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGZmLDB4OWYsMHhmZiwweGZmLDB4MGYsMHhmZiwweGMwLDB4M2YsMHg5YywweDAzLDB4ZmYsMHhmZiwweDhiLDB4YTUsMHhmZSwKLTB4ODAsMHgzZSwweGMyLDB4YmYsMHhhYywweGIxLDB4MjQsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwZiwweGZmLDB4YTMsCi0weGZmLDB4ZmQsMHg2YiwweGZmLDB4ZmYsMHhmMCwweGE1LDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhhZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweDBmLDB4ZmYsMHhjMCwweDNmLDB4ZDQsMHg2YiwweGZmLDB4ZmYsMHhkYiwweGZmLDB4ZmUsMHg4NiwKLTB4YmYsMHhjMiwweGJmLDB4MzAsMHhhMSwweDI0LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhjYywweGZmLDB4MGYsMHhmZiwweGEzLDB4ZmYsCi0weDA1LDB4NmIsMHhmZiwweGZmLDB4ZjAsMHhhNSwweGZmLDB4ZmYsMHhmZiwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLAotMHhmZiwweGZmLDB4ZmIsMHhjNywweGZmLDB4YzQsMHhmZiwweGZmLDB4N2YsMHhmZiwweGVjLDB4ZmUsMHg3ZiwweGRmLDB4ZDgsMHhiOSwKLTB4NDcsMHhmYywweDM2LDB4YzEsMHhkZiwweGZmLDB4ZmYsMHhmOSwweGZmLDB4ZjMsMHhmZiwweGY3LDB4ZmYsMHhmYywweGZmLDB4ZmQsCi0weDNmLDB4ZmYsMHhmZiwweGZmLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNSwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHg3ZSwweGJkLDB4M2YsMHhmZiwweDJiLDB4ZmUsMHgyZiwweGY1LDB4YTMsMHhmYywKLTB4NWIsMHhmZSwweDYxLDB4OWYsMHg3ZiwweGVmLDB4ZmYsMHhmZiwweGE3LDB4ZmIsMHhmZiwweGZmLDB4ZmEsMHhmZSwweGZmLDB4MzMsCi0weGYxLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZhLDB4ZjAsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjEsMHhjMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDMwLDB4MjQsMHgwNCwKLTB4MDAsMHgwMSwweDAwLDB4ODAsMHg0MCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAxLDB4MDEsMHgwMCwweDAyLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgzZCwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZkLDB4YmQsMHhmZiwweGZkLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGZmLDB4N2YsMHhmNiwweGVmLDB4YmYsMHhmNywweGZmLDB4NzMsMHhlYiwKLTB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmOSwweGZmLDB4ZmQsMHhmZSwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZDksMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMCwweGJmLDB4N2YsMHhmZiwweGZmLAotMHhmZiwweDdmLDB4ZmYsMHhmZiwweGRlLDB4ZmYsMHhmZiwweGVmLDB4ZGQsMHhkZSwweDc3LDB4ZjIsMHhmYiwweGVkLDB4ZTcsMHhmMSwKLTB4NzMsMHhmZCwweGZkLDB4ZGYsMHhmZiwweDdkLDB4YmUsMHhkZiwweGZmLDB4ZmIsMHhmZiwweGVmLDB4ZmYsMHhlZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGQwLDB4ZjAsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjgsMHgzMCwweDIwLDB4MDIsMHgwMCwweDIyLAotMHg0MCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4NDEsMHgwMiwweDEyLDB4MDAsMHgyMSwweDg3LDB4ODEsMHgwMCwKLTB4MDAsMHg4MCwweDA0LDB4MGIsMHgyOCwweDAxLDB4YjAsMHgwMCwweDgyLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHhjMSwweGYwLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZCwweGZmLAotMHhmNywweGZmLDB4ZmUsMHg3ZiwweGVkLDB4NzksMHhmZiwweGRlLDB4ZWIsMHg3ZiwweDc0LDB4ZjcsMHhmNywweGUxLDB4ZjksMHhmZiwKLTB4ZjYsMHg1ZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZDcsMHhkYiwweGVmLDB4ZmYsMHhiYiwweGZmLDB4ZmYsMHhmZiwweGNjLDB4ZmYsCi0weGZmLDB4ZmYsMHhmMCwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZjAsMHgwZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHgzZCwweGNkLDB4NDksMHg3ZiwweDZmLAotMHgyYiwweGJhLDB4NWMsMHhkMiwweGRhLDB4ZjYsMHhmMywweDNlLDB4ZjcsMHhmZiwweGJkLDB4ZjEsMHhmYSwweGRmLDB4ZmUsMHhmNywKLTB4Y2MsMHhmNiwweGJiLDB4YTUsMHhiMywweGFkLDB4YmYsMHg2ZiwweDdkLDB4NmYsMHg2YiwweGRiLDB4ZGYsMHhiZCwweGZmLDB4ZmUsCi0weGIwLDB4NWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwweGZiLDB4ZGIsMHg1NywweGY2LDB4ZmUsMHg5ZiwweGQ1LAotMHhiNywweGZmLDB4YWYsMHhlNSwweDNmLDB4ZmYsMHhmZiwweDZmLDB4ZmYsMHhkYiwweGYxLDB4ZmQsMHhiZiwweGZmLDB4NmYsMHg2OSwKLTB4NmMsMHhkZiwweGRhLDB4ZGYsMHhjYiwweGZmLDB4ZjYsMHhmZiwweDc2LDB4ZmQsMHhmZCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZDAsCi0weDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZkLDB4YmQsMHgwOCwweDAzLDB4ODksMHg0ZiwweDVhLAotMHgwZiwweGYwLDB4ZmYsMHhmOCwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweDVhLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMywKLTB4ZmEsMHhhMCwweGYwLDB4ZjIsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYywweGZkLDB4MDAsMHg2YiwweGZmLDB4ZmYsMHg1YSwweDBmLAotMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHg1YSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YjMsMHhmNSwKLTB4NTAsMHhmMCwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZDcsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDdmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZkLDB4YmMsMHhmZiwweGU0LDB4ZTcsMHg3MSwweGZmLDB4ZjksMHhjNCwweGY0LAotMHg3ZiwweDdmLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmNywweDczLDB4YmYsMHgxNCwKLTB4ZmYsMHhlNiwweGZmLDB4ZmYsMHhlMSwweDdkLDB4ZmYsMHhmZiwweGU3LDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgzZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmNSwweGZmLDB4ZmYsMHhmZSwweGQyLDB4ZmEsMHhmZiwweGM0LDB4ZjQsMHg1YywweGJmLDB4ZmEsMHhmZiwweGZmLAotMHhlYywweDdlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhlZiwweGZmLDB4ZmYsMHg2YiwweGRiLDB4ZmYsMHhkZiwKLTB4ZjksMHhmYiwweGJmLDB4ZmYsMHhmMSwweGZmLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmYiwweGYwLDB4YmYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZjMsMHhjMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMSwweDA4LDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDAxLDB4MDAsMHgwMCwweDgwLDB4MDIsMHgwMCwweDAxLDB4M2MsMHhmMCwweDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGZkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHhmZiwweGRmLDB4ZmYsMHhlZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmYiwweGZmLDB4ZmQsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGMzLDB4ZjAsMHhhZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjAsCi0weGZmLDB4ZGYsMHhmZiwweGZmLDB4ZjcsMHgyMywweGZmLDB4ZmYsMHhmZCwweGZmLDB4ZWYsMHhmZiwweGZlLDB4N2YsMHg3ZCwweGY3LAotMHhmZSwweGZmLDB4N2YsMHg3MSwweGZmLDB4ZmIsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweDZlLDB4ZmQsMHhmNywweGZkLDB4ZmYsMHhiZiwKLTB4ZmYsMHhiZiwweGY5LDB4ZmQsMHhmZiwweGRmLDB4ZWYsMHhmMCwweGYwLDB4YWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY4LDB4MzAsCi0weDQwLDB4MDEsMHgwMCwweDgzLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwNiwweDA4LDB4MDQsMHgyNiwweDI2LDB4MDAsMHgwMCwweDA2LAotMHgwMywweDAwLDB4MDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHg3MCwweDA4LDB4ODAsMHgwMCwweDIwLDB4MDEsMHgyMCwKLTB4MDAsMHgwMiwweDAwLDB4MzAsMHgwMCwweDAwLDB4YzEsMHhmMCwweDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHg3YiwweDNmLDB4ZjcsMHhmZiwweGQ3LDB4ZmUsMHhmZSwweGZiLDB4ZmUsMHgzYiwweGZlLDB4YmQsMHhmZiwweDJmLAotMHhmZiwweDcxLDB4ZmYsMHhmYiwweDdmLDB4ZTcsMHhmZiwweGY5LDB4ZWYsMHhmZiwweGQ3LDB4ZmEsMHhmZiwweGI3LDB4YmIsMHhmZSwKLTB4ZmYsMHhmZiwweDc0LDB4ZmYsMHhmNywweGZmLDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4OGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4YjUsCi0weGJkLDB4NmYsMHg3YywweGViLDB4N2YsMHhmYiwweGRiLDB4ZDMsMHg0YiwweGVlLDB4ZDYsMHhmNiwweGI3LDB4ZmQsMHhhYywweGExLAotMHhmYiwweGRmLDB4ZmUsMHhmNywweGY0LDB4OTYsMHhiZCwweGI0LDB4YzUsMHhhNSwweGFmLDB4NmYsMHg2OSwweDRmLDB4N2YsMHhiYSwKLTB4ZGIsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZmYsCi0weGY2LDB4ZmYsMHhmNiwweGZmLDB4YmQsMHhiZiwweGE1LDB4YmYsMHhmZiwweDdkLDB4N2YsMHhlZiwweGZmLDB4ZmIsMHhmMSwweGZkLAotMHhiZiwweGZmLDB4NmYsMHhmZiwweDZiLDB4N2EsMHhkYiwweGZmLDB4ZGIsMHhkZiwweGY2LDB4ZmUsMHhiNiwweGZkLDB4ZmQsMHhiZiwKLTB4ZmUsMHhmNywweGZmLDB4ZDAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNCwweDJmLDB4ZmYsCi0weGZjLDB4NDMsMHg2YiwweGZmLDB4ZmYsMHhmZiwweDBkLDB4ZmYsMHhmYywweDMzLDB4M2YsMHhmMCwweDVmLDB4ZjEsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZjksMHhkZSwweGYwLDB4NGMsMHhmZSwweDc3LDB4YWYsMHhmZiwweGZmLDB4ZWYsMHhmZiwweGYwLDB4ZmYsMHhkYiwKLTB4ZmYsMHg1ZiwweGYwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmUsMHhmNywweGZmLDB4ZjAsMHgyZiwweGZmLDB4ZmQsCi0weDQzLDB4N2YsMHhmZiwweGZmLDB4ZjEsMHgwZiwweGZmLDB4ZmMsMHgzMywweDNmLDB4ZmYsMHhhZiwweGYxLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGY2LDB4ZDcsMHhmZiwweGJjLDB4ZmQsMHhiZCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmMCwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZjLDB4ZmYsMHhmZiwweGZiLDB4ZjEsCi0weGJmLDB4ZmYsMHhmOSwweGZkLDB4Y2YsMHhmMiwweDcwLDB4ZmYsMHgxZiwweDlmLDB4ZjMsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmYywweGY3LDB4ZmYsMHgxMywweDlmLDB4ZmMsMHhmZiwweGZmLDB4ODQsMHhmNywweGZmLDB4ZmYsMHg0NywweGZmLDB4ZmYsMHhmZiwKLTB4ZjAsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjUsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZjLDB4ZmYsMHhmZSwweGZlLDB4NzksCi0weDNmLDB4ZmYsMHgxZCwweDQ2LDB4Y2YsMHhmZiwweGNmLDB4ZmMsMHg3YiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGVkLAotMHhmMywweGFiLDB4ZmYsMHhjYiwweGZmLDB4ZjgsMHhmZiwweGZjLDB4ZjUsMHhmZiwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmEsMHhmMCwKLTB4OGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYzLDB4YzIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsCi0weDAwLDB4MDAsMHgyMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MDQsMHgwOCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLAotMHgwYywweDAwLDB4MDAsMHgwNCwweDAxLDB4MDAsMHgwMSwweDAwLDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMSwweDNjLDB4ZjAsMHg3ZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZCwweGJmLDB4ZmYsMHhmZiwweGZkLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsCi0weGRmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZmLDB4ZWYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGViLAotMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZiLDB4ZjcsMHg3ZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4YmYsMHhkYiwweGYwLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwweGY3LDB4ZmYsCi0weGJmLDB4YmYsMHhjZiwweGZmLDB4ZmYsMHhmZiwweDNlLDB4ZjEsMHg3ZiwweGZmLDB4ZmYsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmZiwweGZkLDB4ZmYsMHhiZiwweGJkLDB4ZmUsMHhmZiwweGZiLDB4ZjcsMHhkZiwweGZiLDB4ZDAsMHhmMCwweDlmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGY4LDB4MzAsMHgyMCwweDAwLDB4NDAsMHgwMSwweDgwLDB4YzAsMHgzMCwweDAwLDB4MDAsMHgyMCwweDAwLDB4MTAsCi0weDUwLDB4ODgsMHgyMCwweDAwLDB4MDAsMHgxMywweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDEsMHg4MCwweDA4LDB4MDAsMHgwMCwweGEwLDB4MDAsMHgxMCwweGMxLDB4ZjAsMHhlZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhmZCwweGVmLDB4N2YsMHhmZiwweGZmLDB4YmYsMHhmZiwweGY3LDB4ZmYsMHhlZiwweGZiLDB4ZmQsMHg3NywweGVmLDB4YmYsCi0weGY3LDB4N2YsMHhmZiwweGZmLDB4YmYsMHhkMSwweDdmLDB4ZmYsMHhmZiwweGY3LDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhhZiwweGZmLAotMHhkZiwweGY3LDB4ZmIsMHhmZiwweGZkLDB4ZmYsMHhmYywweGZmLDB4ZmQsMHhmZiwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZTAsMHgzZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZGQsMHhmZiwKLTB4ZmYsMHhmZiwweGE1LDB4ZmQsMHg2ZiwweDdkLDB4NmQsMHg3ZiwweDUyLDB4ZGYsMHg1YSwweDRiLDB4ZWUsMHhiNiwweGVlLDB4ZjIsCi0weGJiLDB4YWMsMHhhMSwweDViLDB4NGQsMHhkNiwweGY3LDB4ZmUsMHhiMiwweGJkLDB4MzUsMHhiNSwweGI1LDB4ZGQsMHg2ZiwweDdmLAotMHhlOSwweDVmLDB4NTIsMHhkZiwweGJkLDB4ZmYsMHhmZiwweGYwLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhkYiwweGZlLDB4ZjYsMHhmZiwweGY2LDB4ZmYsMHhmZCwweGJmLDB4ZmQsMHhiNSwweGJmLDB4ZjksMHg3ZiwweDZmLDB4ZmYsCi0weGRiLDB4ZjEsMHhmZCwweGJmLDB4ZmYsMHg2ZiwweGZmLDB4NjksMHg3ZiwweGRiLDB4ZmYsMHhkMywweGZmLDB4ZjYsMHhmZSwweGYyLAotMHhmZiwweGFkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmNSwKLTB4MzAsMHgwZiwweGZmLDB4ZmYsMHhmZCwweDZiLDB4Y2EsMHhmZiwweGYwLDB4MGYsMHhkNiwweGJmLDB4Y2YsMHgzZiwweGZmLDB4ZmYsCi0weGYxLDB4ZmYsMHhmZiwweGZmLDB4Y2EsMHhmZSwweGJmLDB4ZmYsMHhmMCwweDA1LDB4YWYsMHgwZiwweGZmLDB4ZmMsMHhmMCwweGNmLAotMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhlZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjUsMHgzMCwKLTB4MGYsMHhmZiwweGZmLDB4ZmMsMHgzZiwweGNhLDB4ZmYsMHgwZiwweDBmLDB4ZDYsMHhiZiwweGZmLDB4ZmYsMHhmNSwweDVmLDB4ZjEsCi0weGZmLDB4OGIsMHhmZiwweGMzLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4MGYsMHhmZiwweGZjLDB4ZjAsMHhjZiwweGYwLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4M2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4Y2YsMHhmZiwKLTB4ZmYsMHhiZiwweDlmLDB4M2YsMHhmZSwweGZjLDB4ZmYsMHg0ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGYxLDB4ZmYsCi0weGRmLDB4ZmUsMHg3ZSwweDNmLDB4OWYsMHhmNCwweGZjLDB4N2YsMHhmYywweGZmLDB4ZmYsMHgzZiwweGZmLDB4M2YsMHhmZSwweDNmLAotMHhmZiwweGZmLDB4ZmYsMHhmMCwweDRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNSwweGZmLDB4ZmYsMHhmYiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4YmYsMHhmYiwweGZmLDB4ZjgsMHhlZCwweGZmLDB4OGYsMHhmZiwweGJiLDB4ZmYsMHhiMSwweGYzLDB4ZWYsCi0weDhmLDB4ZjcsMHhmZiwweGZmLDB4ZGIsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGJmLDB4ZmQsMHg3OSwweGJmLDB4YmYsMHhmZiwweGZmLAotMHhmZiwweGZiLDB4ZjAsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjMsMHhjMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDAwLDB4MDQsMHgwOCwweDA4LDB4MDEsMHgwMSwweDAwLDB4OTAsCi0weDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDA0LDB4MDAsMHgwMCwweDAxLAotMHgzYywweGYwLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZkLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg5ZiwweGZmLDB4YWYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGJmLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhlZCwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGMzLAotMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMCwweGZmLDB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhmYiwweGZmLDB4YmIsMHhmZiwKLTB4ZmYsMHhmZiwweDdmLDB4ZjYsMHhmZiwweDdmLDB4ZmIsMHhmZCwweGVkLDB4ZmYsMHhmMSwweGZmLDB4ZmUsMHg3ZiwweGZmLDB4ZmYsCi0weGZmLDB4NWYsMHhmZiwweGY3LDB4ZmYsMHg3ZSwweGZmLDB4ZmQsMHhmZiwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZWYsMHhmMCwweGYwLAotMHg4ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjgsMHgzMCwweDgwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHg0MCwweDAyLDB4MDAsMHgwMywKLTB4MDAsMHgwNSwweDA0LDB4MjAsMHgwMCwweDAwLDB4MDEsMHhkMCwweDAwLDB4ODEsMHgwMCwweDIwLDB4MDQsMHgwNCwweDAwLDB4MDAsCi0weDgxLDB4MDQsMHgwOCwweDgwLDB4MTAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDA4LDB4YzEsMHhmMCwweDZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjMsMHhmZCwweGZmLDB4ZWQsMHhmYywKLTB4ZmYsMHhmZiwweDlmLDB4ZmIsMHhmZCwweGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweDdmLDB4ZmIsMHgzZSwweGZmLDB4OWYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhmOSwweGZmLDB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg2ZiwweGZmLAotMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4Y2YsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHhiZCwweGZmLDB4ZWYsMHg3YywweGViLDB4N2YsMHhmYiwweGRiLDB4ZmEsMHhkYywKLTB4ZWUsMHhmNywweGY2LDB4ZDcsMHhmNSwweDJkLDB4YTEsMHhiYiwweGRkLDB4ZWUsMHhmNywweDU0LDB4ZjcsMHhmYiwweDJjLDB4YjUsCi0weGI0LDB4YmQsMHg2YiwweDZmLDB4ZWYsMHg2ZiwweGJiLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLAotMHhmZSwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGY2LDB4ZmYsMHhmNiwweGZmLDB4ZmQsMHhiZiwweGZmLDB4YmYsMHhlZiwKLTB4NmYsMHhmZiwweDZmLDB4ZmEsMHhkYiwweGYxLDB4YzUsMHhiZCwweGY1LDB4NmYsMHhmZiwweDZmLDB4Y2EsMHhkYiwweGZmLDB4ZGIsCi0weGZiLDB4ZjYsMHg5NywweGY2LDB4ZmYsMHhmZCwweGJmLDB4ZmUsMHhmNywweGZmLDB4ZDAsMHg5ZiwweGZmLDB4ZmYsMHhmZiwweGZlLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4OGIsMHg3ZiwweGZmLDB4ZmYsMHhlNywweDYzLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmYywweDc3LDB4ZGYsMHhmMSwweGRiLDB4ZmYsMHhkNiwweGE4LDB4M2YsMHhmZiwweGZmLDB4MDgsMHgyZiwweGYwLDB4ZmYsCi0weGMzLDB4ZmYsMHhlYiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg1ZiwweGYwLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDhiLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmMsMHhmZiwweGNmLDB4ZjEsMHhkYiwweGZmLDB4ZDYsMHhhOCwweDNmLDB4ZmYsMHhmZiwweDA4LDB4MmYsMHhmMCwweGZmLDB4YzMsCi0weGZmLDB4ZWIsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNSwweGJmLDB4ZmYsMHhjYSwweGZmLDB4OWYsMHhmZiwweGZhLDB4YjksMHhlNywKLTB4OWYsMHhmMywweDgxLDB4ZmYsMHhmZiwweGZjLDB4NzMsMHhkNywweGZmLDB4ZmYsMHg3NywweGZmLDB4ZmQsMHhmZiwweGZjLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGNmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgxZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjUsMHhmZiwweGZmLAotMHhmZiwweGY3LDB4ZGUsMHhmZiwweGZlLDB4N2UsMHhmZiwweGJmLDB4ZmYsMHhiZiwweGYxLDB4YjMsMHhmZiwweGZmLDB4ZTMsMHhmYiwKLTB4ZmYsMHhlMSwweDFmLDB4N2YsMHhmZiwweGY4LDB4NzgsMHhmZiwweGZiLDB4MWUsMHhmZiwweGY3LDB4ZmUsMHhlNywweGZmLDB4ZmYsCi0weGZmLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmYSwweGYwLDB4NGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYzLDB4YzAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwKLTB4MDEsMHg4MCwweDQwLDB4NDAsMHgyMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDMsMHgwMCwweDAwLDB4MDAsCi0weDgwLDB4MDAsMHgwMCwweDAxLDB4M2MsMHhmMCwweGFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZCwweGJmLDB4ZmYsMHhmYiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGVmLDB4ZjcsMHhmMSwKLTB4ZmQsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZWYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGRiLDB4ZjAsMHg4ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZjAsMHhmZiwweGRmLDB4ZmYsMHhmZiwweDdmLAotMHhmZiwweGZmLDB4ZmYsMHhiZSwweGQ3LDB4ZmYsMHhlZCwweGJkLDB4N2UsMHhiZiwweGZlLDB4ZjYsMHg3ZiwweGJmLDB4NzEsMHhmZiwKLTB4ZmYsMHhkYSwweGZmLDB4ZjksMHhmZiwweGJmLDB4N2YsMHhmZSwweGZmLDB4NmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weDdmLDB4ZmYsMHhkMCwweGYwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY4LDB4MzAsMHg0MiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg4MCwweGMxLDB4MDAsMHgwMCwweDkwLDB4MDAsMHhjNCwweDAwLDB4MDAsMHgxMiwweDIwLDB4NDMsMHgyMiwweDgxLDB4ODQsMHgwMCwKLTB4MDAsMHgxNCwweDAwLDB4MDEsMHgwMCwweDA4LDB4ODAsMHgwMCwweDAyLDB4MDAsMHgwMiwweDAwLDB4MDQsMHgwMiwweDAwLDB4MDAsCi0weDEwLDB4YzEsMHhmMCwweDFmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmQsMHhmZiwweGZmLDB4ZGQsMHhmZSwweGZmLAotMHhiNiwweDc2LDB4ZTUsMHhiYywweGY5LDB4ZjcsMHhhZiwweDVmLDB4YmYsMHhmYywweGRmLDB4Y2YsMHhmMSwweGZmLDB4ZWYsMHg3OSwKLTB4ZmYsMHhiZCwweGZmLDB4ZWYsMHhmZiwweGZmLDB4ZjcsMHg2ZiwweDVmLDB4ZmYsMHhmZiwweGZkLDB4ZWYsMHhlZiwweGJmLDB4ZmYsCi0weGZmLDB4ZjAsMHg5ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGRiLDB4ZmYsMHhmZiwweGZkLDB4MmQsMHhmZiwweDY5LDB4MmEsMHhlZiwweDc3LAotMHhiYiwweGRkLDB4NWEsMHhkZiwweGY2LDB4ZjYsMHhkNiwweGY3LDB4N2QsMHhiZCwweGQxLDB4YjIsMHg0YSwweGQ2LDB4YjIsMHhiZSwKLTB4OTcsMHhmNSwweGJkLDB4YjMsMHhhZCwweGZmLDB4ZWYsMHg3ZiwweDY5LDB4NmIsMHhmYiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsCi0weDJmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZmYsMHhmNiwweGZlLDB4OWYsMHhkNCwweGJmLAotMHhlZCwweGFmLDB4ZmYsMHg2YiwweDZmLDB4ZjcsMHhmZiwweGRkLDB4ZGIsMHgzMSwweGZkLDB4YmYsMHhmZiwweDZmLDB4N2YsMHhmZiwKLTB4ZmYsMHhkYiwweGZmLDB4Y2IsMHhkZiwweGY2LDB4ZmYsMHhmNiwweGZmLDB4ZmQsMHhiZiwweGZlLDB4ZjcsMHhmZiwweGQwLDB4OGYsCi0weGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmQsMHgxZiwweGZmLDB4NDYsMHgyZiwweDlmLDB4ZmYsMHhmZiwweGZmLAotMHhhNSwweGZmLDB4ZmYsMHhmZiwweGRmLDB4YjcsMHhmZiwweGZmLDB4ZjEsMHhmZiwweGZmLDB4ZmYsMHhmNywweGU5LDB4NmEsMHhiZiwKLTB4ZmYsMHhmZiwweGZkLDB4ZmYsMHhmZiwweGZkLDB4NTUsMHg1NywweGZmLDB4ZmYsMHhmZiwweGZmLDB4YWYsMHhmMCwweDRmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZSwweGZlLDB4ZGYsMHhmZiwweGZkLDB4MWYsMHhmZiwweDQ2LDB4MmYsMHg5ZiwweGZmLDB4ZmYsMHhmZiwweGE1LAotMHhmZiwweGZmLDB4ZmYsMHhjMCwweDM3LDB4ZmYsMHhmZiwweGYxLDB4OTksMHg4ZSwweGRjLDB4N2YsMHhlOSwweDZhLDB4YmYsMHhmZiwKLTB4ZjAsMHgwZiwweGZmLDB4ZmYsMHhmZCwweDU1LDB4NTcsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHgwZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDA3LDB4ZmYsMHhjMCwweGJlLDB4ZmYsMHhmZiwweGNmLDB4ZWYsMHg5ZiwweGZmLAotMHhmZiwweGZiLDB4ZmYsMHhlNywweGZmLDB4ZmYsMHhhMSwweGUzLDB4Y2UsMHgzYywweDU4LDB4M2YsMHhmMywweGZmLDB4ZmQsMHhlZiwKLTB4ZjksMHhmZiwweGZmLDB4ZjcsMHhmMSwweDdmLDB4ZmYsMHhjYiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4MmYsMHhmZiwweGZmLDB4ZmYsCi0weGZlLDB4ZjUsMHg3ZiwweGZmLDB4ZjAsMHhmZiwweGZlLDB4ZmYsMHhjNCwweDc1LDB4ZTcsMHhiOSwweGZmLDB4ZmYsMHhmZiwweGVmLAotMHhmZiwweGM3LDB4MzcsMHgzYiwweGZmLDB4ZjAsMHgxMywweDllLDB4MGYsMHhmNCwweGZmLDB4ZmUsMHhmYiwweGZmLDB4ZmYsMHhmOSwKLTB4ZmMsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmEsMHhmMCwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsCi0weGYzLDB4YzAsMHgwMSwweDAwLDB4MDAsMHgwMiwweDAwLDB4MDIsMHgyMiwweDAwLDB4MDAsMHhjMCwweDQwLDB4MDAsMHg0MCwweDAwLAotMHgwNCwweDA4LDB4MDQsMHgwYSwweDAxLDB4MDEsMHgxMCwweDIwLDB4MjAsMHgwMCwweDAwLDB4MDQsMHgwOCwweDA4LDB4MDQsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMSwweDNjLDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmQsCi0weDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHhmZiwweDdmLDB4ZmYsMHg3ZiwweGZmLDB4Y2YsMHg5ZCwweGZmLAotMHhmZiwweGY3LDB4ZmQsMHhmMSwweGZmLDB4ZmYsMHhmZiwweGVlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkYiwweGYwLDB4NmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGYwLDB4ZmYsCi0weGZmLDB4ZmYsMHhmNywweGY3LDB4ZmYsMHhmZiwweGZlLDB4YmYsMHhmNywweGZmLDB4ZmYsMHg1YiwweGZmLDB4YmYsMHhmNywweGZmLAotMHhmZCwweDdmLDB4NzEsMHhmZCwweGZmLDB4ZWQsMHhmNywweGZlLDB4ZWYsMHhmZiwweGZmLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGVmLDB4ZmYsMHg3ZiwweGZmLDB4ZDAsMHhmMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmOCwweDMwLDB4MTEsCi0weDAwLDB4NDgsMHg2MCwweDQwLDB4ODIsMHg2MCwweDI0LDB4NjAsMHgwMCwweGNjLDB4MDAsMHg4MCwweDA0LDB4MDEsMHgwMCwweDAwLAotMHgxNCwweDAxLDB4MGMsMHgwNCwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA4LDB4MDAsMHgwMSwweDAwLDB4YzIsMHgwMCwKLTB4MDAsMHgwMiwweDAwLDB4ODAsMHgwMCwweGMxLDB4ZjAsMHg1ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGY3LDB4N2IsMHhmZiwweGYzLDB4ZWIsMHhiZiwweGZmLDB4ZjcsMHhmZiwweGZmLDB4ZmYsMHhlNywweDVkLDB4M2YsMHhmZiwweGY2LAotMHhkMSwweGZkLDB4ZmYsMHhlYiwweGY3LDB4M2QsMHhmZiwweGZmLDB4ZmYsMHg1ZiwweGZmLDB4N2YsMHg3ZiwweGYzLDB4ZmYsMHhmZiwKLTB4ZWYsMHhmZCwweGJmLDB4ZmYsMHhmZiwweGYwLDB4NWYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYxLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmNSwweGI1LDB4ZGYsCi0weDZmLDB4N2QsMHg2OSwweDdmLDB4ZmIsMHhkZiwweDUyLDB4NWYsMHhmNiwweGY3LDB4ZmUsMHhmNiwweGYzLDB4YmQsMHhiMSwweGRhLAotMHhjZCwweGZlLDB4ZjYsMHhlZSwweGQyLDB4YmQsMHhhNSwweGFmLDB4YmQsMHhmZiwweDZmLDB4N2MsMHhlYiwweDJiLDB4ZmEsMHhkYSwKLTB4ZmYsMHhmZSwweGRmLDB4ZjAsMHg0ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4YmYsMHhmZiwweGZmLDB4ZmYsMHhkYiwweGZmLDB4ZjYsCi0weGZmLDB4ZjYsMHhmZiwweGJkLDB4YmYsMHhjZCwweGJmLDB4ZWIsMHg2ZiwweGY3LDB4NmYsMHhkZiwweGRiLDB4NTEsMHhmZCwweGJkLAotMHhmZiwweDZmLDB4ZmYsMHg2ZiwweGZiLDB4NWIsMHhmZiwweGRiLDB4ZmYsMHhmNiwweGZlLDB4ZjYsMHhmZCwweGZkLDB4YmYsMHhmZSwKLTB4ZjcsMHhmZiwweGQwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZhLDB4NTAsMHhmZiwweGZmLDB4ZmYsCi0weGYwLDB4NmYsMHhmZiwweGZmLDB4ZjAsMHg5NiwweGZmLDB4ZmYsMHhjNiwweDJiLDB4ZmYsMHhmZiwweGYxLDB4ZmMsMHhmZiwweGZmLAotMHhmNywweGRiLDB4YzMsMHhmZiwweDAwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGMxLDB4NGYsMHhjMywweGZmLDB4ZmYsMHhmZiwKLTB4YWYsMHhmMCwweDlmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmNSwweGEwLDB4ZmYsMHhmZiwweGZmLDB4ZjAsCi0weDZmLDB4ZmYsMHhmZiwweGYwLDB4OTYsMHhmZiwweGZmLDB4YzYsMHgyYiwweGZmLDB4ZmYsMHhmMSwweDVhLDB4ZmYsMHhmZiwweGZmLAotMHhmMywweGMzLDB4ZmYsMHgwMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhjMSwweDRmLDB4YzMsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmYywweGZmLDB4ZmYsMHg5ZiwweGYwLDB4N2YsCi0weGZmLDB4ZjksMHhmYywweDRmLDB4ZjMsMHhmZiwweDI3LDB4ZWIsMHhmZiwweGZjLDB4ODEsMHhmYywweDdmLDB4ZmUsMHg3YiwweGZmLAotMHhmNywweGZmLDB4MTIsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4MTgsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwKLTB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGY1LDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmZSwweGZmLDB4ZmMsMHg3ZSwweDdmLDB4YmYsCi0weGZmLDB4ZmYsMHhhZiwweGVmLDB4ZmYsMHhkZiwweGRmLDB4ZmIsMHhmZiwweGYxLDB4YzMsMHhmZSwweDZmLDB4ZjEsMHhjZiwweDNmLAotMHhmYiwweGZmLDB4ZmYsMHhjZiwweGZlLDB4ZmYsMHhmZiwweGZlLDB4N2YsMHhiZiwweGZmLDB4ZmYsMHhiZiwweGZhLDB4ZjAsMHhkZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmMywweGMwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsCi0weDIwLDB4MDAsMHgwMSwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4MDAsMHg4MCwweDAwLDB4MDIsMHg4MCwweDAwLDB4MDIsMHgzYywweGYwLDB4MmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZlLDB4ZmQsMHhiZiwweGZmLDB4ZmIsMHhmZCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGY1LDB4ZjEsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhlZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGIsMHhmMCwweDJmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZSwweGYwLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGJmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmNywweGJmLDB4ZmIsCi0weGZmLDB4ZmYsMHhmZiwweGRmLDB4ZjcsMHhmZiwweGYxLDB4ZjcsMHhiZiwweGZiLDB4ZmYsMHhmZiwweGZmLDB4N2YsMHhkZSwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZWQsMHhmNywweGZmLDB4ZmYsMHg3ZiwweGQwLDB4ZjAsMHgzZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmUsMHhmOCwweDMwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgwMCwweDAwLDB4ODAsCi0weDIwLDB4MDEsMHgwMSwweDkyLDB4MDAsMHgwMSwweDAxLDB4MDAsMHhlMCwweDFjLDB4NjAsMHgyMCwweDMwLDB4MDgsMHgwOCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHhjMSwweGYwLDB4NmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGRiLDB4ZmUsMHhmZiwweGZmLDB4ZGYsMHhmZiwweGZjLDB4N2YsMHhmYiwweGJmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsMHhmNiwweGZmLDB4ZjcsMHg3ZSwweDNmLDB4ZmYsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGY3LAotMHhmZiwweGZmLDB4ZmYsMHhlZCwweGZmLDB4ZGYsMHhmZiwweGI3LDB4ZmYsMHhmMCwweDNmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhkZiwweGZmLDB4ZmYsMHhmZiwweGRmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhiZiwweGZmLDB4ZGYsCi0weDU3LDB4ZWYsMHhmMSwweGZkLDB4ZmUsMHg3ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZGYsMHhmYiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4N2YsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmIsMHhmZiwweGRmLDB4ZmYsCi0weGZmLDB4ZjEsMHhmZCwweGZmLDB4N2YsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmMCwweDlmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmNywweGZkLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGYxLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjAsMHg2ZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZjEsCi0weGZmLDB4ZmYsMHhmZCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotMHhmZiwweGZmLDB4ZmYsMHhmZiwweGYwLDB4Y2YsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmYiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZiLDB4NmYsMHhmZiwweGZlLDB4YmYsMHhmZiwweGYxLDB4ZmYsCi0weGY3LDB4ZmYsMHhmZiwweDdmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZkLAotMHhmZiwweGZmLDB4ZmYsMHhmMCwweGVmLDB4ZmYsMHhmZiwweGZmLDB4ZmUsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmIsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweDU3LDB4ZmYsMHhmZCwweGJmLDB4ZmYsMHhmMSwweGZmLDB4ZWYsCi0weGZlLDB4ZmYsMHhiZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLAotMHhkZSwweGZmLDB4ZjAsMHhjZiwweGZmLDB4ZmYsMHhmZiwweGZlLDB4ZmYsMHhmZiwweGZmLDB4ZjcsMHhkYiwweGZmLDB4ZGIsMHhmZCwKLTB4ZjYsMHhmZiwweGY2LDB4ZmYsMHgzYywweGJjLDB4YmMsMHhiZiwweGRmLDB4NmYsMHhlNywweDJmLDB4ZjEsMHgzYywweGJmLDB4ZmQsCi0weGJmLDB4ZGYsMHg2ZiwweGZmLDB4NmYsMHhmNywweGRiLDB4ZmYsMHhkYiwweGZkLDB4ZjYsMHhmZiwweGY2LDB4ZmYsMHhmZiwweGZmLAotMHgwMiwweDAxLDB4ZGYsMHhmZiwweGZmLDB4ZmYsMHhmZSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0weGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCmluZGV4IGRlMmQ0ODYuLmY1MGZhYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKQEAgLTQ0OCw4ICs0NDgsMTEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogV2FpdCAxNW1zIGZvciBNQUMgdG8gY29uZmlndXJlIFBIWSBmcm9tIE5WTSBzZXR0aW5ncy4gKi8KLQltc2xlZXAoMTUpOworCS8qCisJICogV2FpdCAxMDBtcyBmb3IgTUFDIHRvIGNvbmZpZ3VyZSBQSFkgZnJvbSBOVk0gc2V0dGluZ3MsIHRvIGF2b2lkCisJICogdGltZW91dCBpc3N1ZXMgd2hlbiBMRlMgaXMgZW5hYmxlZC4KKwkgKi8KKwltc2xlZXAoMTAwKTsKIAogCS8qCiAJICogVGhlIE5WTSBzZXR0aW5ncyB3aWxsIGNvbmZpZ3VyZSBMUExVIGluIEQzIGZvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCBmYjA5YzhhLi4yN2VhZTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwpAQCAtMTQxOSw3ICsxNDE5LDYgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBjdHJsX3JlZyA9IDA7Ci0JdTMyIHN0YXRfcmVnID0gMDsKIAogCWh3LT5tYWMuYXV0b25lZyA9IGZhbHNlOwogCkBAIC0xNDQzLDE4ICsxNDQyLDExIEBACiAJY3RybF9yZWcgfD0gKEUxMDAwX0NUUkxfRlJDU1BEIHwgLyogU2V0IHRoZSBGb3JjZSBTcGVlZCBCaXQgKi8KIAkJICAgICBFMTAwMF9DVFJMX0ZSQ0RQWCB8IC8qIFNldCB0aGUgRm9yY2UgRHVwbGV4IEJpdCAqLwogCQkgICAgIEUxMDAwX0NUUkxfU1BEXzEwMDAgfC8qIEZvcmNlIFNwZWVkIHRvIDEwMDAgKi8KLQkJICAgICBFMTAwMF9DVFJMX0ZEKTsJIC8qIEZvcmNlIER1cGxleCB0byBGVUxMICovCisJCSAgICAgRTEwMDBfQ1RSTF9GRCB8CSAvKiBGb3JjZSBEdXBsZXggdG8gRlVMTCAqLworCQkgICAgIEUxMDAwX0NUUkxfU0xVKTsJIC8qIFNldCBsaW5rIHVwIGVuYWJsZSBiaXQgKi8KIAotCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIgJiYKLQkgICAgaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9tODgpCisJaWYgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfbTg4KQogCQljdHJsX3JlZyB8PSBFMTAwMF9DVFJMX0lMT1M7IC8qIEludmVydCBMb3NzIG9mIFNpZ25hbCAqLwotCWVsc2UgewotCQkvKiBTZXQgdGhlIElMT1MgYml0IG9uIHRoZSBmaWJlciBOaWMgaWYgaGFsZiBkdXBsZXggbGluayBpcwotCQkgKiBkZXRlY3RlZC4gKi8KLQkJc3RhdF9yZWcgPSByZDMyKEUxMDAwX1NUQVRVUyk7Ci0JCWlmICgoc3RhdF9yZWcgJiBFMTAwMF9TVEFUVVNfRkQpID09IDApCi0JCQljdHJsX3JlZyB8PSAoRTEwMDBfQ1RSTF9JTE9TIHwgRTEwMDBfQ1RSTF9TTFUpOwotCX0KIAogCXdyMzIoRTEwMDBfQ1RSTCwgY3RybF9yZWcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCmluZGV4IGNhODQyMTYuLjAzYWE5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCkBAIC0xMzUsOCArMTM1LDggQEAKIHN0YXRpYyBpbnQgaWdiX3NldF92Zl9tYWMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCBpbnQsIHVuc2lnbmVkIGNoYXIgKik7CiBzdGF0aWMgdm9pZCBpZ2JfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcik7CiAKLXN0YXRpYyBpbnQgaWdiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKiwgcG1fbWVzc2FnZV90KTsKICNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaWdiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKiwgcG1fbWVzc2FnZV90KTsKIHN0YXRpYyBpbnQgaWdiX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqKTsKICNlbmRpZgogc3RhdGljIHZvaWQgaWdiX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICopOwpAQCAtNDIwLDYgKzQyMCw5IEBACiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKIAkJbmV0aWZfbmFwaV9kZWwoJmFkYXB0ZXItPnJ4X3JpbmdbaV0ubmFwaSk7CiAKKwlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMDsKKwlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMDsKKwogCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOwogCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOwogfQpAQCAtMTQ3Niw5ICsxNDc5LDEwIEBACiAJCSBuZXRkZXYtPm5hbWUsCiAJCSAoKGh3LT5idXMuc3BlZWQgPT0gZTEwMDBfYnVzX3NwZWVkXzI1MDApCiAJCSAgPyAiMi41R2IvcyIgOiAidW5rbm93biIpLAotCQkgKChody0+YnVzLndpZHRoID09IGUxMDAwX2J1c193aWR0aF9wY2llX3g0KQotCQkgID8gIldpZHRoIHg0IiA6IChody0+YnVzLndpZHRoID09IGUxMDAwX2J1c193aWR0aF9wY2llX3gxKQotCQkgID8gIldpZHRoIHgxIiA6ICJ1bmtub3duIiksCisJCSAoKGh3LT5idXMud2lkdGggPT0gZTEwMDBfYnVzX3dpZHRoX3BjaWVfeDQpID8gIldpZHRoIHg0IiA6CisJCSAgKGh3LT5idXMud2lkdGggPT0gZTEwMDBfYnVzX3dpZHRoX3BjaWVfeDIpID8gIldpZHRoIHgyIiA6CisJCSAgKGh3LT5idXMud2lkdGggPT0gZTEwMDBfYnVzX3dpZHRoX3BjaWVfeDEpID8gIldpZHRoIHgxIiA6CisJCSAgICJ1bmtub3duIiksCiAJCSBuZXRkZXYtPmRldl9hZGRyKTsKIAogCWlnYl9yZWFkX3BhcnRfbnVtKGh3LCAmcGFydF9udW0pOwpAQCAtNTA1Niw3ICs1MDYwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpZ2Jfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBfX2lnYl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgYm9vbCAqZW5hYmxlX3dha2UpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtNTExNSwxNSArNTExOSw5IEBACiAJCXdyMzIoRTEwMDBfV1VGQywgMCk7CiAJfQogCi0JLyogbWFrZSBzdXJlIGFkYXB0ZXIgaXNuJ3QgYXNsZWVwIGlmIG1hbmFnZWFiaWxpdHkvd29sIGlzIGVuYWJsZWQgKi8KLQlpZiAod3VmYyB8fCBhZGFwdGVyLT5lbl9tbmdfcHQpIHsKLQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7Ci0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKLQl9IGVsc2UgeworCSplbmFibGVfd2FrZSA9IHd1ZmMgfHwgYWRhcHRlci0+ZW5fbW5nX3B0OworCWlmICghKmVuYWJsZV93YWtlKQogCQlpZ2Jfc2h1dGRvd25fZmliZXJfc2VyZGVzX2xpbmtfODI1NzUoaHcpOwotCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKLQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwotCX0KIAogCS8qIFJlbGVhc2UgY29udHJvbCBvZiBoL3cgdG8gZi93LiAgSWYgZi93IGlzIEFNVCBlbmFibGVkLCB0aGlzCiAJICogd291bGQgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkIGluIGNsb3NlIGFuZCBpcyByZWR1bmRhbnQuICovCkBAIC01MTMxLDEyICs1MTI5LDI5IEBACiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGlnYl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaW50IHJldHZhbDsKKwlib29sIHdha2U7CisKKwlyZXR2YWwgPSBfX2lnYl9zaHV0ZG93bihwZGV2LCAmd2FrZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmICh3YWtlKSB7CisJCXBjaV9wcmVwYXJlX3RvX3NsZWVwKHBkZXYpOworCX0gZWxzZSB7CisJCXBjaV93YWtlX2Zyb21fZDMocGRldiwgZmFsc2UpOworCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaWdiX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwpAQCAtNTE4OSw3ICs1MjA0LDE0IEBACiAKIHN0YXRpYyB2b2lkIGlnYl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlpZ2Jfc3VzcGVuZChwZGV2LCBQTVNHX1NVU1BFTkQpOworCWJvb2wgd2FrZTsKKworCV9faWdiX3NodXRkb3duKHBkZXYsICZ3YWtlKTsKKworCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1BPV0VSX09GRikgeworCQlwY2lfd2FrZV9mcm9tX2QzKHBkZXYsIHdha2UpOworCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisJfQogfQogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCmluZGV4IGVkMjY1YTcuLmRlNGRiMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYwpAQCAtNDExLDcgKzQxMSw4IEBACiAKIAkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgYXV0b25lZyBvciBub3QuICovCiAJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJnNwZWVkLCAmbGlua191cCwgZmFsc2UpOwotCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIgJiYgKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpKQorCWlmICghaHctPmZjLmRpc2FibGVfZmNfYXV0b25lZyAmJiBody0+cGh5Lm11bHRpc3BlZWRfZmliZXIgJiYKKwkgICAgKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpKQogCQlyZXRfdmFsID0gaXhnYmVfZmNfYXV0b25lZyhodyk7CiAKIAlpZiAocmV0X3ZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKaW5kZXggOGNmZDNmZC4uNjNhYjY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMKQEAgLTE5MzcsNyArMTkzNyw4IEBACiAKIAkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgYXV0b25lZyBvciBub3QuICovCiAJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJnNwZWVkLCAmbGlua191cCwgZmFsc2UpOwotCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIgJiYgKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpKQorCWlmICghaHctPmZjLmRpc2FibGVfZmNfYXV0b25lZyAmJiBody0+cGh5Lm11bHRpc3BlZWRfZmliZXIgJiYKKwkgICAgKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpKQogCQlyZXRfdmFsID0gaXhnYmVfZmNfYXV0b25lZyhodyk7CiAKIAlpZiAocmV0X3ZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKaW5kZXggN2U5NGQ2ZC4uMjRmNzNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKQEAgLTk2LDE0ICs5NiwxMSBAQAogI2RlZmluZSBJWEdCRV9XUklURV9GTFVTSChhKSBJWEdCRV9SRUFEX1JFRyhhLCBJWEdCRV9TVEFUVVMpCiAKICNpZmRlZiBERUJVRworZXh0ZXJuIGNoYXIgKml4Z2JlX2dldF9od19kZXZfbmFtZShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKICNkZWZpbmUgaHdfZGJnKGh3LCBmb3JtYXQsIGFyZy4uLikgXAotcHJpbnRrKEtFUk5fREVCVUcsICIlczogIiBmb3JtYXQsIGl4Z2JlX2dldF9od19kZXZfbmFtZShodyksICMjYXJnKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0LCBpeGdiZV9nZXRfaHdfZGV2X25hbWUoaHcpLCAjI2FyZykKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKLWh3X2RiZyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLQlyZXR1cm4gMDsKLX0KKyNkZWZpbmUgaHdfZGJnKGh3LCBmb3JtYXQsIGFyZy4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAogI2VuZGlmIC8qIElYR0JFX0NPTU1PTiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwppbmRleCAwYTg3MzFmLi5iZDBhMGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfbmwuYwpAQCAtOTAsNiArOTAsOCBAQAogCQkJc3JjX2RjYl9jZmctPnRjX2NvbmZpZ1tpIC0gRENCX1BGQ19VUF9BVFRSXzBdLmRjYl9wZmM7CiAJfQogCisJZHN0X2RjYl9jZmctPnBmY19tb2RlX2VuYWJsZSA9IHNyY19kY2JfY2ZnLT5wZmNfbW9kZV9lbmFibGU7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjk4LDggKzMwMCwxMCBAQAogCiAJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLnRjX2NvbmZpZ1twcmlvcml0eV0uZGNiX3BmYyA9IHNldHRpbmc7CiAJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy50Y19jb25maWdbcHJpb3JpdHldLmRjYl9wZmMgIT0KLQkgICAgYWRhcHRlci0+ZGNiX2NmZy50Y19jb25maWdbcHJpb3JpdHldLmRjYl9wZmMpCisJICAgIGFkYXB0ZXItPmRjYl9jZmcudGNfY29uZmlnW3ByaW9yaXR5XS5kY2JfcGZjKSB7CiAJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9QRkM7CisJCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5wZmNfbW9kZV9lbmFibGUgPSB0cnVlOworCX0KIH0KIAogc3RhdGljIHZvaWQgaXhnYmVfZGNibmxfZ2V0X3BmY19jZmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHByaW9yaXR5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCmluZGV4IDE4ZWNiYTcuLmFhZmMxMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKQEAgLTEyOSw2ICsxMjksMTUgQEAKIAkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsOwogCQlpZiAoaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKQogCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbDsKKwkJLyoKKwkJICogSXQncyBwb3NzaWJsZSB0aGF0IHBoeS5hdXRvbmVnX2FkdmVydGlzZWQgbWF5IG5vdCBiZQorCQkgKiBzZXQgeWV0LiAgSWYgc28gZGlzcGxheSB3aGF0IHRoZSBkZWZhdWx0IHdvdWxkIGJlIC0KKwkJICogYm90aCAxRyBhbmQgMTBHIHN1cHBvcnRlZC4KKwkJICovCisJCWlmICghKGVjbWQtPmFkdmVydGlzaW5nICYgKEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCkpKQorCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCk7CiAKIAkJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CiAJfSBlbHNlIGlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gaXhnYmVfbWVkaWFfdHlwZV9iYWNrcGxhbmUpIHsKQEAgLTIyNSw3ICsyMzQsMTYgQEAKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAotCXBhdXNlLT5hdXRvbmVnID0gKGh3LT5mYy5jdXJyZW50X21vZGUgPT0gaXhnYmVfZmNfZnVsbCA/IDEgOiAwKTsKKwkvKgorCSAqIEZsb3cgQ29udHJvbCBBdXRvbmVnIGlzbid0IG9uIGlmCisJICogIC0gd2UgZGlkbid0IGFzayBmb3IgaXQgT1IKKwkgKiAgLSBpdCBmYWlsZWQsIHdlIGtub3cgdGhpcyBieSB0eCAmIHJ4IGJlaW5nIG9mZgorCSAqLworCWlmIChody0+ZmMuZGlzYWJsZV9mY19hdXRvbmVnIHx8CisJICAgIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX25vbmUpKQorCQlwYXVzZS0+YXV0b25lZyA9IDA7CisJZWxzZQorCQlwYXVzZS0+YXV0b25lZyA9IDE7CiAKIAlpZiAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY19yeF9wYXVzZSkgewogCQlwYXVzZS0+cnhfcGF1c2UgPSAxOwpAQCAtMjQzLDggKzI2MSwxMiBAQAogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCi0JaWYgKChwYXVzZS0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKLQkgICAgKHBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1c2UpKQorCWlmIChwYXVzZS0+YXV0b25lZyAhPSBBVVRPTkVHX0VOQUJMRSkKKwkJaHctPmZjLmRpc2FibGVfZmNfYXV0b25lZyA9IHRydWU7CisJZWxzZQorCQlody0+ZmMuZGlzYWJsZV9mY19hdXRvbmVnID0gZmFsc2U7CisKKwlpZiAocGF1c2UtPnJ4X3BhdXNlICYmIHBhdXNlLT50eF9wYXVzZSkKIAkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfZnVsbDsKIAllbHNlIGlmIChwYXVzZS0+cnhfcGF1c2UgJiYgIXBhdXNlLT50eF9wYXVzZSkKIAkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfcnhfcGF1c2U7CkBAIC03MTIsOSArNzM0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgaXhnYmVfcmluZyAqdGVtcF9yaW5nOworCXN0cnVjdCBpeGdiZV9yaW5nICp0ZW1wX3R4X3JpbmcsICp0ZW1wX3J4X3Jpbmc7CiAJaW50IGksIGVycjsKIAl1MzIgbmV3X3J4X2NvdW50LCBuZXdfdHhfY291bnQ7CisJYm9vbCBuZWVkX3VwZGF0ZSA9IGZhbHNlOwogCiAJaWYgKChyaW5nLT5yeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLT5yeF9qdW1ib19wZW5kaW5nKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03MzMsODAgKzc1Niw5NCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQl0ZW1wX3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCi0JICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRlbXBfcmluZykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KIAl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKIAkJbXNsZWVwKDEpOwogCi0JaWYgKG5ld190eF9jb3VudCAhPSBhZGFwdGVyLT50eF9yaW5nLT5jb3VudCkgeworCXRlbXBfdHhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKKwkgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOworCWlmICghdGVtcF90eF9yaW5nKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3NldHVwOworCX0KKworCWlmIChuZXdfdHhfY291bnQgIT0gYWRhcHRlci0+dHhfcmluZ19jb3VudCkgeworCQltZW1jcHkodGVtcF90eF9yaW5nLCBhZGFwdGVyLT50eF9yaW5nLAorCQkgICAgICAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZykpOwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCQl0ZW1wX3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7Ci0JCQllcnIgPSBpeGdiZV9zZXR1cF90eF9yZXNvdXJjZXMoYWRhcHRlciwgJnRlbXBfcmluZ1tpXSk7CisJCQl0ZW1wX3R4X3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7CisJCQllcnIgPSBpeGdiZV9zZXR1cF90eF9yZXNvdXJjZXMoYWRhcHRlciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcF90eF9yaW5nW2ldKTsKIAkJCWlmIChlcnIpIHsKIAkJCQl3aGlsZSAoaSkgewogCQkJCQlpLS07CiAJCQkJCWl4Z2JlX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wX3JpbmdbaV0pOworCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcF90eF9yaW5nW2ldKTsKIAkJCQl9CiAJCQkJZ290byBlcnJfc2V0dXA7CiAJCQl9Ci0JCQl0ZW1wX3JpbmdbaV0udl9pZHggPSBhZGFwdGVyLT50eF9yaW5nW2ldLnZfaWR4OworCQkJdGVtcF90eF9yaW5nW2ldLnZfaWR4ID0gYWRhcHRlci0+dHhfcmluZ1tpXS52X2lkeDsKIAkJfQotCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQkJbmV0ZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RvcChuZXRkZXYpOwotCQlpeGdiZV9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKLQkJaXhnYmVfbmFwaV9kZWxfYWxsKGFkYXB0ZXIpOwotCQlJTklUX0xJU1RfSEVBRCgmbmV0ZGV2LT5uYXBpX2xpc3QpOwotCQlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKLQkJYWRhcHRlci0+dHhfcmluZyA9IHRlbXBfcmluZzsKLQkJdGVtcF9yaW5nID0gTlVMTDsKLQkJYWRhcHRlci0+dHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDsKKwkJbmVlZF91cGRhdGUgPSB0cnVlOwogCX0KIAotCXRlbXBfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKLQkgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOwotCWlmICghdGVtcF9yaW5nKSB7Ci0JCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19vcGVuKG5ldGRldik7Ci0JCXJldHVybiAtRU5PTUVNOworCXRlbXBfcnhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKKwkgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOworCWlmICgoIXRlbXBfcnhfcmluZykgJiYgKG5lZWRfdXBkYXRlKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJnRlbXBfdHhfcmluZ1tpXSk7CisJCWtmcmVlKHRlbXBfdHhfcmluZyk7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3NldHVwOwogCX0KIAotCWlmIChuZXdfcnhfY291bnQgIT0gYWRhcHRlci0+cnhfcmluZy0+Y291bnQpIHsKKwlpZiAobmV3X3J4X2NvdW50ICE9IGFkYXB0ZXItPnJ4X3JpbmdfY291bnQpIHsKKwkJbWVtY3B5KHRlbXBfcnhfcmluZywgYWRhcHRlci0+cnhfcmluZywKKwkJICAgICAgIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpKTsKIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQkJdGVtcF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OwotCQkJZXJyID0gaXhnYmVfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsICZ0ZW1wX3JpbmdbaV0pOworCQkJdGVtcF9yeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OworCQkJZXJyID0gaXhnYmVfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfcnhfcmluZ1tpXSk7CiAJCQlpZiAoZXJyKSB7CiAJCQkJd2hpbGUgKGkpIHsKIAkJCQkJaS0tOwogCQkJCQlpeGdiZV9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAmdGVtcF9yaW5nW2ldKTsKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wX3J4X3JpbmdbaV0pOwogCQkJCX0KIAkJCQlnb3RvIGVycl9zZXR1cDsKIAkJCX0KLQkJCXRlbXBfcmluZ1tpXS52X2lkeCA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0udl9pZHg7CisJCQl0ZW1wX3J4X3JpbmdbaV0udl9pZHggPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnZfaWR4OwogCQl9Ci0JCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19zdG9wKG5ldGRldik7Ci0JCWl4Z2JlX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOwotCQlpeGdiZV9uYXBpX2RlbF9hbGwoYWRhcHRlcik7Ci0JCUlOSVRfTElTVF9IRUFEKCZuZXRkZXYtPm5hcGlfbGlzdCk7Ci0JCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOwotCQlhZGFwdGVyLT5yeF9yaW5nID0gdGVtcF9yaW5nOwotCQl0ZW1wX3JpbmcgPSBOVUxMOworCQluZWVkX3VwZGF0ZSA9IHRydWU7CisJfQogCi0JCWFkYXB0ZXItPnJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7CisJLyogaWYgcmluZ3MgbmVlZCB0byBiZSB1cGRhdGVkLCBoZXJlJ3MgdGhlIHBsYWNlIHRvIGRvIGl0IGluIG9uZSBzaG90ICovCisJaWYgKG5lZWRfdXBkYXRlKSB7CisJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCQlpeGdiZV9kb3duKGFkYXB0ZXIpOworCisJCS8qIHR4ICovCisJCWlmIChuZXdfdHhfY291bnQgIT0gYWRhcHRlci0+dHhfcmluZ19jb3VudCkgeworCQkJa2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7CisJCQlhZGFwdGVyLT50eF9yaW5nID0gdGVtcF90eF9yaW5nOworCQkJdGVtcF90eF9yaW5nID0gTlVMTDsKKwkJCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CisJCX0KKworCQkvKiByeCAqLworCQlpZiAobmV3X3J4X2NvdW50ICE9IGFkYXB0ZXItPnJ4X3JpbmdfY291bnQpIHsKKwkJCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOworCQkJYWRhcHRlci0+cnhfcmluZyA9IHRlbXBfcnhfcmluZzsKKwkJCXRlbXBfcnhfcmluZyA9IE5VTEw7CisJCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OworCQl9CiAJfQogCiAJLyogc3VjY2VzcyEgKi8KIAllcnIgPSAwOwotZXJyX3NldHVwOgotCWl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQotCQluZXRkZXYtPm5ldGRldl9vcHMtPm5kb19vcGVuKG5ldGRldik7CisJCWl4Z2JlX3VwKGFkYXB0ZXIpOwogCitlcnJfc2V0dXA6CiAJY2xlYXJfYml0KF9fSVhHQkVfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggNzlhYTgxMS4uMjg2ZWNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtMTg3LDE1ICsxODcsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV90eF9idWZmZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0eF9idWZmZXJfaW5mbykKIHsKLQlpZiAodHhfYnVmZmVyX2luZm8tPmRtYSkgewotCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCB0eF9idWZmZXJfaW5mby0+ZG1hLAotCQkgICAgICAgICAgICAgICB0eF9idWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJdHhfYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCXR4X2J1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmICh0eF9idWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgdHhfYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkodHhfYnVmZmVyX2luZm8tPnNrYik7CiAJCXR4X2J1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KKwl0eF9idWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiAJLyogdHhfYnVmZmVyX2luZm8gbXVzdCBiZSBjb21wbGV0ZWx5IHNldCB1cCBpbiB0aGUgdHJhbnNtaXQgcGF0aCAqLwogfQogCkBAIC0yMDQsMTUgKzIwMywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGVvcCkKIHsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiBoZWFkLCB0YWlsOwogCiAJLyogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQogCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGVvcCAqLwotCWhlYWQgPSBJWEdCRV9SRUFEX1JFRyhodywgdHhfcmluZy0+aGVhZCk7Ci0JdGFpbCA9IElYR0JFX1JFQURfUkVHKGh3LCB0eF9yaW5nLT50YWlsKTsKIAlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IGZhbHNlOwotCWlmICgoaGVhZCAhPSB0YWlsKSAmJgotCSAgICB0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAgJiYKKwlpZiAodHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICYmCiAJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICsgSFopICYmCiAJICAgICEoSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9URkNTKSAmIElYR0JFX1RGQ1NfVFhPRkYpKSB7CiAJCS8qIGRldGVjdGVkIFR4IHVuaXQgaGFuZyAqLwpAQCAtMjI3LDcgKzIyMiw4IEBACiAJCQkiICB0aW1lX3N0YW1wICAgICAgICAgICA8JWx4PlxuIgogCQkJIiAgamlmZmllcyAgICAgICAgICAgICAgPCVseD5cbiIsCiAJCQl0eF9yaW5nLT5xdWV1ZV9pbmRleCwKLQkJCWhlYWQsIHRhaWwsCisJCQlJWEdCRV9SRUFEX1JFRyhodywgdHhfcmluZy0+aGVhZCksCisJCQlJWEdCRV9SRUFEX1JFRyhodywgdHhfcmluZy0+dGFpbCksCiAJCQl0eF9yaW5nLT5uZXh0X3RvX3VzZSwgZW9wLAogCQkJdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wLCBqaWZmaWVzKTsKIAkJcmV0dXJuIHRydWU7CkBAIC0yOTM0LDYgKzI5MzAsNyBAQAogICoqLwogc3RhdGljIGludCBpeGdiZV9zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlpbnQgZXJyID0gMDsKIAlpbnQgdmVjdG9yLCB2X2J1ZGdldDsKIApAQCAtMjk0OCwxMiArMjk0NSwxMiBAQAogCiAJLyoKIAkgKiBBdCB0aGUgc2FtZSB0aW1lLCBoYXJkd2FyZSBjYW4gb25seSBzdXBwb3J0IGEgbWF4aW11bSBvZgotCSAqIE1BWF9NU0lYX0NPVU5UIHZlY3RvcnMuICBXaXRoIGZlYXR1cmVzIHN1Y2ggYXMgUlNTIGFuZCBWTURxLAotCSAqIHdlIGNhbiBlYXNpbHkgcmVhY2ggdXB3YXJkcyBvZiA2NCBSeCBkZXNjcmlwdG9yIHF1ZXVlcyBhbmQKLQkgKiAzMiBUeCBxdWV1ZXMuICBUaHVzLCB3ZSBjYXAgaXQgb2ZmIGluIHRob3NlIHJhcmUgY2FzZXMgd2hlcmUKLQkgKiB0aGUgY3B1IGNvdW50IGFsc28gZXhjZWVkcyBvdXIgdmVjdG9yIGxpbWl0LgorCSAqIGh3Lm1hYy0+bWF4X21zaXhfdmVjdG9ycyB2ZWN0b3JzLiAgV2l0aCBmZWF0dXJlcworCSAqIHN1Y2ggYXMgUlNTIGFuZCBWTURxLCB3ZSBjYW4gZWFzaWx5IHN1cnBhc3MgdGhlIG51bWJlciBvZiBSeCBhbmQgVHgKKwkgKiBkZXNjcmlwdG9yIHF1ZXVlcyBzdXBwb3J0ZWQgYnkgb3VyIGRldmljZS4gIFRodXMsIHdlIGNhcCBpdCBvZmYgaW4KKwkgKiB0aG9zZSByYXJlIGNhc2VzIHdoZXJlIHRoZSBjcHUgY291bnQgYWxzbyBleGNlZWRzIG91ciB2ZWN0b3IgbGltaXQuCiAJICovCi0Jdl9idWRnZXQgPSBtaW4odl9idWRnZXQsIE1BWF9NU0lYX0NPVU5UKTsKKwl2X2J1ZGdldCA9IG1pbih2X2J1ZGdldCwgKGludClody0+bWFjLm1heF9tc2l4X3ZlY3RvcnMpOwogCiAJLyogQSBmYWlsdXJlIGluIE1TSS1YIGVudHJ5IGFsbG9jYXRpb24gaXNuJ3QgZmF0YWwsIGJ1dCBpdCBkb2VzCiAJICogbWVhbiB3ZSBkaXNhYmxlIE1TSS1YIGNhcGFiaWxpdGllcyBvZiB0aGUgYWRhcHRlci4gKi8KQEAgLTMxNjksMTEgKzMxNjYsMTMgQEAKICNlbmRpZgogCiAJLyogZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KLQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19ub25lOworCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX2Z1bGw7CisJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGl4Z2JlX2ZjX2Z1bGw7CS8qIGluaXQgZm9yIGV0aHRvb2wgb3V0cHV0ICovCiAJaHctPmZjLmhpZ2hfd2F0ZXIgPSBJWEdCRV9ERUZBVUxUX0ZDUlRIOwogCWh3LT5mYy5sb3dfd2F0ZXIgPSBJWEdCRV9ERUZBVUxUX0ZDUlRMOwogCWh3LT5mYy5wYXVzZV90aW1lID0gSVhHQkVfREVGQVVMVF9GQ1BBVVNFOwogCWh3LT5mYy5zZW5kX3hvbiA9IHRydWU7CisJaHctPmZjLmRpc2FibGVfZmNfYXV0b25lZyA9IGZhbHNlOwogCiAJLyogZW5hYmxlIGl0ciBieSBkZWZhdWx0IGluIGR5bmFtaWMgbW9kZSAqLwogCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gMTsKQEAgLTM0ODksMTAgKzM0ODgsMTAgQEAKIAlpeGdiZV9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CiAJaXhnYmVfZnJlZV9pcnEoYWRhcHRlcik7CiBlcnJfcmVxX2lycToKLQlpeGdiZV9mcmVlX2FsbF9yeF9yZXNvdXJjZXMoYWRhcHRlcik7CiBlcnJfc2V0dXBfcng6Ci0JaXhnYmVfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWl4Z2JlX2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKIGVycl9zZXR1cF90eDoKKwlpeGdiZV9mcmVlX2FsbF90eF9yZXNvdXJjZXMoYWRhcHRlcik7CiAJaXhnYmVfcmVzZXQoYWRhcHRlcik7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNDE2MywzMiArNDE2MiwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGZpcnN0KQogewogCXN0cnVjdCBpeGdiZV90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOwotCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAJdW5zaWduZWQgaW50IGY7Ci0KLQlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKKwlkbWFfYWRkcl90ICptYXA7CiAKIAlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CiAKKwlpZiAoc2tiX2RtYV9tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgc2tiLCBETUFfVE9fREVWSUNFKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJUWCBETUEgbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCW1hcCA9IHNrYl9zaGluZm8oc2tiKS0+ZG1hX21hcHM7CisKIAl3aGlsZSAobGVuKSB7CiAJCXR4X2J1ZmZlcl9pbmZvID0gJnR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldOwogCQlzaXplID0gbWluKGxlbiwgKHVpbnQpSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCk7CiAKIAkJdHhfYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7Ci0JCXR4X2J1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tiLT5kYXRhICsgb2Zmc2V0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgUENJX0RNQV9UT0RFVklDRSk7CisJCXR4X2J1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbMF0gKyBvZmZzZXQ7CiAJCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJdHhfYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOwogCiAJCWxlbiAtPSBzaXplOwogCQlvZmZzZXQgKz0gc2l6ZTsKIAkJY291bnQrKzsKLQkJaSsrOwotCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCWkgPSAwOworCisJCWlmIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJCWkgPSAwOworCQl9CiAJfQogCiAJZm9yIChmID0gMDsgZiA8IG5yX2ZyYWdzOyBmKyspIHsKQEAgLTQxOTYsMzMgKzQyMDIsMjcgQEAKIAogCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CiAJCWxlbiA9IGZyYWctPnNpemU7Ci0JCW9mZnNldCA9IGZyYWctPnBhZ2Vfb2Zmc2V0OworCQlvZmZzZXQgPSAwOwogCiAJCXdoaWxlIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJCWkgPSAwOworCiAJCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKIAkJCXNpemUgPSBtaW4obGVuLCAodWludClJWEdCRV9NQVhfREFUQV9QRVJfVFhEKTsKIAogCQkJdHhfYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7Ci0JCQl0eF9idWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWctPnBhZ2UsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQl0eF9idWZmZXJfaW5mby0+ZG1hID0gbWFwW2YgKyAxXSArIG9mZnNldDsKIAkJCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJCXR4X2J1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKIAogCQkJbGVuIC09IHNpemU7CiAJCQlvZmZzZXQgKz0gc2l6ZTsKIAkJCWNvdW50Kys7Ci0JCQlpKys7Ci0JCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCQlpID0gMDsKIAkJfQogCX0KLQlpZiAoaSA9PSAwKQotCQlpID0gdHhfcmluZy0+Y291bnQgLSAxOwotCWVsc2UKLQkJaSA9IGkgLSAxOworCiAJdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0uc2tiID0gc2tiOwogCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ZpcnN0XS5uZXh0X3RvX3dhdGNoID0gaTsKIApAQCAtNDM4OCwxMyArNDM4OCwxOSBAQAogCSAgICAgICAgIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkKIAkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfQ1NVTTsKIAotCWl4Z2JlX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLAotCSAgICAgICAgICAgICAgIGl4Z2JlX3R4X21hcChhZGFwdGVyLCB0eF9yaW5nLCBza2IsIGZpcnN0KSwKLQkgICAgICAgICAgICAgICBza2ItPmxlbiwgaGRyX2xlbik7CisJY291bnQgPSBpeGdiZV90eF9tYXAoYWRhcHRlciwgdHhfcmluZywgc2tiLCBmaXJzdCk7CiAKLQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlpZiAoY291bnQpIHsKKwkJaXhnYmVfdHhfcXVldWUoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsIGNvdW50LCBza2ItPmxlbiwKKwkJICAgICAgICAgICAgICAgaGRyX2xlbik7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQlpeGdiZV9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgREVTQ19ORUVERUQpOwogCi0JaXhnYmVfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIERFU0NfTkVFREVEKTsKKwl9IGVsc2UgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQl0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tmaXJzdF0udGltZV9zdGFtcCA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gZmlyc3Q7CisJfQogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTQ5ODcsOCArNDk5MywyMCBAQAogCiAJcmV0dXJuIHJldF92YWwgPyBOT1RJRllfQkFEIDogTk9USUZZX0RPTkU7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0lYR0JFX0RDQSAqLwogCisjZW5kaWYgLyogQ09ORklHX0lYR0JFX0RDQSAqLworI2lmZGVmIERFQlVHCisvKioKKyAqIGl4Z2JlX2dldF9od19kZXZfbmFtZSAtIHJldHVybiBkZXZpY2UgbmFtZSBzdHJpbmcKKyAqIHVzZWQgYnkgaGFyZHdhcmUgbGF5ZXIgdG8gcHJpbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uCisgKiovCitjaGFyICppeGdiZV9nZXRfaHdfZGV2X25hbWUoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOworCXJldHVybiBhZGFwdGVyLT5uZXRkZXYtPm5hbWU7Cit9CisKKyNlbmRpZgogbW9kdWxlX2V4aXQoaXhnYmVfZXhpdF9tb2R1bGUpOwogCiAvKiBpeGdiZV9tYWluLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAppbmRleCAyYjJlY2JhLi4wMzBmZjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCkBAIC0yMDA1LDYgKzIwMDUsNyBAQAogCXUxNiBwYXVzZV90aW1lOyAvKiBGbG93IENvbnRyb2wgUGF1c2UgdGltZXIgKi8KIAlib29sIHNlbmRfeG9uOyAvKiBGbG93IGNvbnRyb2wgc2VuZCBYT04gKi8KIAlib29sIHN0cmljdF9pZWVlOyAvKiBTdHJpY3QgSUVFRSBtb2RlICovCisJYm9vbCBkaXNhYmxlX2ZjX2F1dG9uZWc7IC8qIFR1cm4gb2ZmIGF1dG9uZWcgRkMgbW9kZSAqLwogCWVudW0gaXhnYmVfZmNfbW9kZSBjdXJyZW50X21vZGU7IC8qIEZDIG1vZGUgaW4gZWZmZWN0ICovCiAJZW51bSBpeGdiZV9mY19tb2RlIHJlcXVlc3RlZF9tb2RlOyAvKiBGQyBtb2RlIHJlcXVlc3RlZCBieSBjYWxsZXIgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9uZXRkZXYuYwppbmRleCA5ZjY2NDRhLi4zMDNjMjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VuX25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fbmV0ZGV2LmMKQEAgLTUwNSw3ICs1MDUsNyBAQAogCiBzdGF0aWMgdm9pZCBtbHg0X2VuX2RvX2dldF9zdGF0cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXkgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkZWxheSwgc3RydWN0IG1seDRfZW5fcHJpdiwKIAkJCQkJCSBzdGF0c190YXNrKTsKIAlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jIGIvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCmluZGV4IGE0MTMwZTcuLjdlNDA3NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogCiB2b2lkIG1seDRfZW5fcnhfcmVmaWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxheSA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRlbGF5LCBzdHJ1Y3QgbWx4NF9lbl9wcml2LAogCQkJCQkJIHJlZmlsbF90YXNrKTsKIAlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBwcml2LT5tZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9zZW5zZS5jIGIvZHJpdmVycy9uZXQvbWx4NC9zZW5zZS5jCmluZGV4IDZkNTA4OWUuLmYzNmFlNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvc2Vuc2UuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCiBzdGF0aWMgdm9pZCBtbHg0X3NlbnNlX3BvcnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmRlbGF5ID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogCXN0cnVjdCBtbHg0X3NlbnNlICpzZW5zZSA9IGNvbnRhaW5lcl9vZihkZWxheSwgc3RydWN0IG1seDRfc2Vuc2UsCiAJCQkJCQlzZW5zZV9wb2xsKTsKIAlzdHJ1Y3QgbWx4NF9kZXYgKmRldiA9IHNlbnNlLT5kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvb3NpdGVjaC5oIGIvZHJpdmVycy9uZXQvcGNtY2lhL29zaXRlY2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEyNmVmYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvb3NpdGVjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzU4ICswLDAgQEAKLS8qCi0gICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmaXJtd2FyZSBvZiBTZXZlbiBvZiBEaWFtb25kcyBmcm9tIE9TSVRFQ0guCi0gICAgKFNwZWNpYWwgdGhhbmtzIHRvIEtldmluIE1hY1BoZXJzb24gb2YgT1NJVEVDSCkKLQotICAgIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKLSAgICB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgotKi8KLQotICAgIHN0YXRpYyBjb25zdCB1X2NoYXIgX19YaWxpbng3T0RbXSA9IHsKLSAgICAweEZGLCAweDA0LCAweEEwLCAweDM2LCAweEYzLCAweEVDLCAweEZGLCAweEZGLCAweEZGLCAweERGLCAweEZCLCAweEZGLAotICAgIDB4RjMsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RUYsIDB4M0YsIDB4RkYsIDB4RjcsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4N0YsIDB4RkUsIDB4RkYsCi0gICAgMHhDRSwgMHhGRSwgMHhGRSwgMHhGRSwgCi0gICAgMHhGRSwgMHhERSwgMHhCRCwgMHhERCwgMHhGRCwgMHhGRiwgMHhGRCwgMHhDRiwgMHhGNywgMHhCRiwgMHg3RiwgMHhGRiwKLSAgICAweDdGLCAweDNGLCAweEZFLCAweEJGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEJDLCAweEZGLCAweEZGLCAweEJELCAweEI1LCAweDdGLCAweDdGLCAweEJGLCAweEJGLAotICAgIDB4N0YsIDB4RkYsIDB4RUYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkIsIDB4RkYsIDB4RjcsIDB4RjcsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIDB4REUsCi0gICAgMHhGRSwgMHhGRSwgMHhGQSwgMHhERSwgCi0gICAgMHhCRCwgMHhGRCwgMHhFRCwgMHhGRCwgMHhGRCwgMHhDRiwgMHhFRiwgMHhFRiwgMHhFRiwgMHhFRiwgMHhDNywgMHhERiwKLSAgICAweERGLCAweERGLCAweERGLCAweERGLCAKLSAgICAweEZGLCAweDdFLCAweEZFLCAweEZELCAweDdELCAweDZELCAweEVFLCAweEZFLCAweDdDLCAweEZCLCAweEY0LCAweEZCLAotICAgIDB4Q0YsIDB4REIsIDB4REYsIDB4RkYsIAotICAgIDB4RkYsIDB4QkIsIDB4N0YsIDB4RkYsIDB4N0YsIDB4RkYsIDB4RjcsIDB4RkYsIDB4OUUsIDB4QkYsIDB4M0IsIDB4QkYsCi0gICAgMHhCRiwgMHg3RiwgMHg3RiwgMHg3RiwgCi0gICAgMHg3RSwgMHg2RiwgMHhERiwgMHhFRiwgMHhGNSwgMHhGNiwgMHhGRCwgMHhGNiwgMHhGNSwgMHhFRCwgMHhFQiwgMHhGRiwKLSAgICAweEVGLCAweEVGLCAweEVGLCAweDdFLCAKLSAgICAweDdGLCAweDdGLCAweDZGLCAweDdGLCAweEZGLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEZFLCAweEVGLCAweEJGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkMsIDB4MUYsIDB4MUYsIDB4RUUsIDB4RkYsIDB4QkMsCi0gICAgMHhCNywgMHhGRiwgMHhERiwgMHhGRiwgCi0gICAgMHhERiwgMHhFRiwgMHgzQiwgMHhFMywgMHhEMywgMHhGRiwgMHhGQiwgMHhGRiwgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEJBLCAweEJGLCAweDJELCAKLSAgICAweERCLCAweEJELCAweEZELCAweERCLCAweERGLCAweEZBLCAweEZCLCAweEZGLCAweEVGLCAweEZCLCAweERCLCAweEYzLAotICAgIDB4RkYsIDB4REYsIDB4RkQsIDB4N0YsIAotICAgIDB4RUYsIDB4RkIsIDB4RkYsIDB4RkYsIDB4QkUsIDB4QkYsIDB4MjcsIDB4QkEsIDB4RkUsIDB4RkIsIDB4REYsIDB4RkYsCi0gICAgMHhGNiwgMHhGRiwgMHhGRiwgMHhFRiwgCi0gICAgMHhGQiwgMHhEQiwgMHhGMywgMHhEOSwgMHg5QSwgMHgzRiwgMHhGRiwgMHhBRiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhCRSwKLSAgICAweDNGLCAweDM3LCAweEJELCAweDk2LCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEFFLCAweEZCLCAweEYzLCAweEYzLCAweEVCLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RjcsIDB4RkEsIDB4QkMsIDB4QUUsIDB4RkUsIDB4QkUsIDB4RkUsIDB4QkIsIDB4N0YsIDB4RkQsIDB4RkYsCi0gICAgMHg3RiwgMHhFRiwgMHhGNywgMHhGQiwgCi0gICAgMHhCQiwgMHhENywgMHhGNywgMHg3RiwgMHhGRiwgMHhGNywgMHhGRiwgMHhGRiwgMHhGNywgMHhCQywgMHhFRCwgMHhGRCwKLSAgICAweEJELCAweDlELCAweDdELCAweDdCLCAKLSAgICAweEZCLCAweDdCLCAweDdCLCAweEZCLCAweEFGLCAweEZGLCAweEZFLCAweEZELCAweEZELCAweEZFLCAweEZFLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIAotICAgIDB4QUEsIDB4QjksIDB4QkYsIDB4OEYsIDB4QkYsIDB4REYsIDB4RkYsIDB4N0YsIDB4RkYsIDB4RkYsIDB4N0YsIDB4Q0YsCi0gICAgMHhGQiwgMHhFQiwgMHhDQiwgMHhFQiwgCi0gICAgMHhFRSwgMHhGRiwgMHhGRiwgMHhENywgMHhGRiwgMHhGRiwgMHhGRiwgMHgzRSwgMHgzMywgMHgzRiwgMHgxQywgMHg3QywKLSAgICAweEZDLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweENGLCAweEQzLCAweEYzLCAweEUzLCAweEYzLCAweEZCLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RUIsIDB4RkUsIDB4MzUsIAotICAgIDB4M0YsIDB4M0QsIDB4RkQsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RUYsIDB4NkYsIDB4RTMsCi0gICAgMHhFMywgMHhFMywgMHhFRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgMHhGNywgMHhGRSwgMHgzRSwgMHg1RSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZELCAweEZGLCAweEZGLCAKLSAgICAweEFGLCAweENGLCAweEYyLCAweENCLCAweENGLCAweDhFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZELAotICAgIDB4RkMsIDB4M0UsIDB4MUYsIDB4OUUsIAotICAgIDB4QUQsIDB4RkQsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkYsIDB4QjMsIDB4RjcsIDB4RTcsCi0gICAgMHhGNywgMHhGQSwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRSwgMHhFQiwgMHhBQiwgMHhBRiwgMHg5RiwgMHhFMywgMHg3RiwgMHhGRiwgMHhERSwKLSAgICAweEZGLCAweDdGLCAweEVFLCAweEZGLCAKLSAgICAweEZGLCAweEZCLCAweDNBLCAweEZBLCAweEZGLCAweEYyLCAweDc3LCAweEZGLCAweEZGLCAweEY3LCAweEZFLCAweEZGLAotICAgIDB4RkUsIDB4QkQsIDB4QUUsIDB4REUsIAotICAgIDB4N0QsIDB4N0QsIDB4RkQsIDB4RkYsIDB4QkYsIDB4RUUsIDB4RkYsIDB4RkQsIDB4RkYsIDB4REIsIDB4RkIsIDB4RkYsCi0gICAgMHhGNywgMHhFRiwgMHhGQiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRSwgMHhGRiwgMHgyRCwgMHhBRiwgMHhCOSwgMHhGRCwgMHg3OSwgMHhGQiwgMHhGQSwgMHhGRiwgMHhCRiwKLSAgICAweEVGLCAweEZGLCAweEZGLCAweDkxLCAKLSAgICAweEZBLCAweEZCLCAweERGLCAweEY3LCAweEY3LCAweEZGLCAweEZGLCAweEZGLCAweEZDLCAweENGLCAweDM3LCAweEJGLAotICAgIDB4QkYsIDB4RkYsIDB4N0YsIDB4N0YsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4QUYsIDB4RkYsIDB4RkYsIDB4RjMsIDB4RkIsIDB4RkIsIDB4RkYsIDB4RjUsIDB4RUYsCi0gICAgMHhGRiwgMHhGRiwgMHhGNywgMHhGQSwgCi0gICAgMHhGRiwgMHhGRiwgMHhFRSwgMHhGQSwgMHhGRSwgMHhGQiwgMHg1NSwgMHhERCwgMHhGRiwgMHg3RiwgMHhBRiwgMHhGRSwKLSAgICAweEZGLCAweEZCLCAweEZCLCAweEY1LCAKLSAgICAweEZGLCAweEY3LCAweEVGLCAweEZGLCAweEZGLCAweEZGLCAweEJFLCAweEJELCAweEJELCAweEJELCAweEJELCAweDdELAotICAgIDB4N0IsIDB4N0IsIDB4N0IsIDB4N0IsIAotICAgIDB4RkIsIDB4QUUsIDB4RkYsIDB4RkQsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGNywgMHhEQSwgMHhCNywgMHg2MSwgCi0gICAgMHhGRiwgMHhCOSwgMHg1OSwgMHhGMywgMHg3MywgMHhGMywgMHhERiwgMHg3RiwgMHg2RiwgMHhERiwgMHhFRiwgMHhGNywKLSAgICAweEVCLCAweEVCLCAweEQ3LCAweEZGLCAKLSAgICAweEQ3LCAweEZGLCAweEZGLCAweEY3LCAweEZFLCAweDdGLCAweEZCLCAweDNFLCAweDM4LCAweDczLCAweEY2LCAweDdGLAotICAgIDB4RkMsIDB4RkYsIDB4RkYsIDB4Q0YsIAotICAgIDB4RkYsIDB4QjcsIDB4RkIsIDB4QjMsIDB4QjMsIDB4NjcsIDB4RkYsIDB4RTcsIDB4RkQsIDB4RkYsIDB4RUYsIDB4RjYsCi0gICAgMHg3RiwgMHhCNywgMHhCQywgMHhGNSwgCi0gICAgMHg3QiwgMHhGNiwgMHhGNywgMHhGNSwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGRiwgMHhGNywgMHhGRiwgMHhGNywgMHhDRSwKLSAgICAweEU3LCAweEZGLCAweDlGLCAweEZGLCAKLSAgICAweEZGLCAweEY1LCAweEZFLCAweDdELCAweEZGLCAweDVGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RUYsIDB4RkYsIDB4RjYsIAotICAgIDB4Q0IsIDB4REIsIDB4RUUsIDB4RkUsIDB4RkYsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIDB4N0YsIDB4QkUsCi0gICAgMHgxRSwgMHgzRSwgMHhGRSwgMHhGRiwgCi0gICAgMHg3RCwgMHhGRSwgMHhGRiwgMHhGRiwgMHhFRiwgMHhCRiwgMHhFNywgMHhGRiwgMHhFMywgMHhFMywgMHhGRiwgMHhERiwKLSAgICAweEU3LCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEI4LCAweEVGLCAweEI3LCAweDJGLCAweEVFLCAweEZGLCAweERGLCAweEZGLCAweEJGLCAweEZGLCAweDdGLCAweEVGLAotICAgIDB4RUIsIDB4QkYsIDB4QTMsIDB4RDMsIAotICAgIDB4RkYsIDB4N0YsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4QkUsIDB4RkQsIDB4M0YsIDB4Q0YsIDB4RkQsCi0gICAgMHhGQiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhBRiwgMHhGQiwgMHhCRiwgMHhCQiwgMHhCRiwgMHhEQiwgMHhGRCwgMHhGQiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweDNFLCAweEZFLCAKLSAgICAweDNGLCAweEJBLCAweEJBLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEZGLCAweEVGLCAweEMzLCAweDdGLAotICAgIDB4QjIsIDB4OUIsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4M0MsIDB4RkYsIDB4M0YsIDB4M0MsIDB4RkYsIDB4RkUsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhBRiwgMHhGMywgMHhGRSwgMHhGMywgMHhFMywgMHhFQiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGQiwgMHhGRiwgMHhGNywKLSAgICAweDlBLCAweEZFLCAweEFGLCAweDlFLCAKLSAgICAweEJFLCAweEZFLCAweEZGLCAweERGLCAweEZGLCAweEZGLCAweDdCLCAweEVGLCAweEY3LCAweEJGLCAweEZCLCAweEZCLAotICAgIDB4RkIsIDB4RkYsIDB4RkYsIDB4N0YsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkMsIDB4QkQsIDB4RkQsIDB4QkQsIDB4REQsIDB4N0QsIDB4N0IsIDB4N0IsIDB4N0IsCi0gICAgMHg3QiwgMHhGQiwgMHhBRSwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRSwgMHhGRiwgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHg5QSwgMHhGRiwKLSAgICAweDlGLCAweEZGLCAweEFGLCAweEVGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDdGLCAweENGLCAweEYzLCAweEZGLCAweEVCLCAweEZGLCAweEVCLCAweEZGLAotICAgIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RUYsIDB4RkUsIDB4RkYsIDB4MzcsIDB4RkMsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhDRiwgMHhFRiwgMHhGRCwgMHhGMywgCi0gICAgMHhGRiwgMHhFRSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg2RSwgMHhGRCwgMHgyRiwgMHhGRCwKLSAgICAweEZGLCAweEZELCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweENGLCAweEZGLCAweEYzLCAweEJGLCAweDY5LCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkUsIAotICAgIDB4RkIsIDB4OUYsIDB4RkYsIDB4QkYsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4ODcsCi0gICAgMHhGRSwgMHhEQSwgMHhFRiwgMHhDRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhFRiwgMHhCRiwgMHhFRiwgMHhFRiwgMHhGRCwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEVGLCAweEZELCAweEZGLCAweDdCLCAweEZGLCAweEVCLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RUIsIDB4RjgsIDB4RkYsIDB4RUYsIAotICAgIDB4QUYsIDB4RkYsIDB4RkYsIDB4QkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4RUUsIDB4N0YsIDB4RUYsIDB4RkYsCi0gICAgMHhCQiwgMHhGRiwgMHhCRiwgMHhGQiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHhGNiwgMHhGQiwgMHhCRCwgMHhGRCwgMHhERCwgMHhGNSwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEFGLCAKLSAgICAweEZGLCAweDVGLCAweEY1LCAweERGLCAweEZGLCAweDdGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY2LAotICAgIDB4RjMsIDB4RkYsIDB4REUsIDB4RkUsIAotICAgIDB4RUYsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkYsIDB4REUsIDB4REYsIDB4NUYsIDB4REYsCi0gICAgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRSwgMHhGRiwgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEFGLCAweEZGLCAweEZGLCAKLSAgICAweEVGLCAweEVELCAweEZGLCAweERGLCAweEZGLCAweEZGLCAweEZCLCAweEZGLCAweEZGLCAweERBLCAweEJELCAweEJFLAotICAgIDB4QUUsIDB4RkUsIDB4N0YsIDB4RkQsIAotICAgIDB4REYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4RUYsIDB4RkYsIDB4RkIsIDB4RkIsIDB4RkIsIDB4N0YsIDB4RjcsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgCi0gICAgMHhCQywgMHhGRCwgMHhCRCwgMHhCRCwgMHhCRCwgMHhGRCwgMHg3QiwgMHg3QiwgMHg3QiwgMHg3QiwgMHhGQiwgMHhBRSwKLSAgICAweEZGLCAweEZGLCAweEZELCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZBLCAweDlGLCAweEJGLCAweEJGLCAweENGLAotICAgIDB4N0YsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4QUYsIDB4RkYsIDB4RUIsIDB4RUIsIDB4RUIsIDB4RkYsIDB4RDcsIDB4RkUsIDB4RkYsIDB4RkYsCi0gICAgMHhCRiwgMHhFNywgMHhGRSwgMHhCRiwgCi0gICAgMHg3RiwgMHhGQywgMHhGRiwgMHhGRiwgMHhFRCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg0RiwgMHhGRiwgMHhGQiwKLSAgICAweEZCLCAweEZGLCAweEZGLCAweERELCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweEJELCAweERGLCAweDlELCAweEZELCAweERGLCAweEI5LAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RUYsIDB4RkYsIDB4RkIsIDB4RUYsIDB4RUIsIDB4RkYsIDB4REUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGNiwgMHg5RiwgMHhGRiwgMHhGQywgCi0gICAgMHhGRSwgMHhGQiwgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhERiwgMHhGQSwgMHhDRCwgMHhDRiwKLSAgICAweEJGLCAweDlGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEY3LCAweEZFLCAweEJGLCAweEZGLCAweERGLCAweEVGLCAweDVGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4N0YsIDB4NkYsIDB4RkYsIAotICAgIDB4QkIsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0UsIDB4RkYsCi0gICAgMHg1RiwgMHhGRiwgMHhCRiwgMHhCRiwgCi0gICAgMHhGOSwgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwgMHg2RSwgMHg3QiwgMHhGRiwgMHhFRiwgMHhGRCwgMHhFQiwgMHhERiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEY3LCAweEI2LCAweDNFLCAweEZDLCAweEZELCAweEJGLCAweDdFLCAweEZCLCAweEZGLCAweEZGLCAweEZGLCAweEY3LAotICAgIDB4RUYsIDB4RjcsIDB4RjMsIDB4RjcsIAotICAgIDB4RkYsIDB4RkIsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4NkUsIDB4MzUsIDB4NzksIDB4RkYsCi0gICAgMHhCRiwgMHhGQywgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGQiwgMHg1MywgMHhERiwgMHhGRiwgMHhFQiwgMHhCRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEJDLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEZGLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEFGLCAweEY1LAotICAgIDB4RkYsIDB4RjcsIDB4RkYsIDB4RkIsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkEsIDB4QUEsIDB4RUUsIDB4RkUsIDB4M0YsIDB4N0QsCi0gICAgMHhGRCwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHg3RiwgMHhBRiwgMHg3NywgMHhGQiwgMHhGQiwgMHhGRiwgMHhGQiwgMHhGNywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEY3LCAweEJFLCAweEJELCAweEJELCAKLSAgICAweEJELCAweEJELCAweEZELCAweDdCLCAweDdCLCAweDdCLCAweDdCLCAweEZCLCAweEFFLCAweEZGLCAweEVGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkMsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OUEsIDB4RDksIDB4QjgsIDB4RkYsIDB4RkYsIDB4NzksIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhDRiwgCi0gICAgMHhGQiwgMHhGRiwgMHhFQiwgMHhGRiwgMHhFQiwgMHhENywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFNywgMHhERSwKLSAgICAweEY4LCAweEZCLCAweEZFLCAweDNGLCAKLSAgICAweEZCLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweENGLCAweEFELCAweEJGLCAweEZBLCAweEZGLCAweDczLAotICAgIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4M0EsIDB4RjUsIDB4QjcsIDB4RkMsIDB4M0YsIDB4RjksIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHg3RiwgMHhFRiwgMHhGMywgMHhGRiwgCi0gICAgMHhCRiwgMHhGRSwgMHhGMywgMHg5RiwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHgzRSwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEJGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEFGLCAweEQzLCAweEZFLCAweERCLCAweEZGLCAweERCLCAweERGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4M0UsIDB4RkYsIDB4QkYsIDB4RkYsIDB4N0YsIDB4RkYsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4OEYsCi0gICAgMHhGMywgMHhGRiwgMHhFRCwgMHhGRiwgCi0gICAgMHhGNywgMHhGQiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGNiwgMHgzQywgMHhGRSwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweDlGLCAweEVGLCAweEVGLCAweEQxLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4N0UsIDB4QkYsIAotICAgIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkIsIDB4RUYsIDB4REYsIDB4RjEsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRSwgMHgzRSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEJGLCAKLSAgICAweEVGLCAweEZELCAweEMzLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEJGLCAweEZGLAotICAgIDB4RkMsIDB4M0UsIDB4RkUsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4MkUsIDB4RUYsIDB4RjMsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGNywgMHhCQSwgMHhCRSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweDdGLCAweEFGLCAweEZCLCAKLSAgICAweEZCLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEYyLCAweEQ2LCAweEVELAotICAgIDB4QkQsIDB4QkQsIDB4QkQsIDB4N0QsIAotICAgIDB4N0IsIDB4N0IsIDB4N0IsIDB4N0IsIDB4RkIsIDB4QUYsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHg5MiwgMHhCRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwKLSAgICAweEFGLCAweEVCLCAweEVCLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEU3LCAweEZFLCAweDJFLCAweEZFLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4NEYsIDB4RUYsIDB4RjMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgCi0gICAgMHgzQywgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhDRSwKLSAgICAweEMzLCAweEZELCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweDVELCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RUYsIDB4Q0YsIDB4RUIsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGNywgMHhFRSwgMHgzRSwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwgMHhFRiwgMHhERiwgMHhFMiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZCLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY2LCAweEJFLCAweEZDLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4N0YsIDB4RUUsIAotICAgIDB4NUYsIDB4RTYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4M0UsCi0gICAgMHg3RCwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGMywgMHhGQiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEJGLCAweEY3LCAweDM2LCAweEJFLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RUYsIDB4RDMsIDB4RjYsIAotICAgIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkMsIDB4N0YsIDB4RUUsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhBRiwgMHhFRiwgMHhFQiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEJBLCAweEJFLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVFLAotICAgIDB4RkIsIDB4RkEsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4RDYsIDB4RkQsIDB4QkQsIDB4QkQsIDB4QkQsCi0gICAgMHg3RCwgMHg3QiwgMHg3QiwgMHg3QiwgCi0gICAgMHg3QiwgMHhGQiwgMHhBRSwgMHhGRiwgMHg3RSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEY3LCAweEJBLCAweEJGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDdGLCAweEVGLCAweEVCLCAweDZCLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4RkUsIDB4QkUsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHg0RiwgMHhFRiwgMHhGNywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwKLSAgICAweDNFLCAweDZFLCAweEZDLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEMzLCAweEM5LCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4M0UsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhFRiwgMHhGQiwgCi0gICAgMHhENSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRSwKLSAgICAweEZFLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDZGLCAweEVGLCAweEZCLCAweEZGLCAweEZGLCAweEZGLCAweEZCLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RjYsIDB4REYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4RkUsCi0gICAgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFNywgMHhGRiwgMHhGRSwgMHhGRiwgMHhGNywgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweDdGLCAweEZBLCAweEVGLCAweEJGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RTcsIDB4RkYsIDB4RkUsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4RkUsIDB4RUYsIDB4QkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhBNywgMHhGRiwgMHhGQywgMHhGNywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweDdGLCAKLSAgICAweEZFLCAweEFFLCAweEZGLCAweEZGLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEU3LAotICAgIDB4RjcsIDB4RkEsIDB4RkYsIDB4RkQsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4QUYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHhCRSwgMHhCRCwgMHhCRCwgMHhCRCwgMHhCRCwgMHg3RCwgMHg3QiwgMHg3QiwKLSAgICAweDdCLCAweDdCLCAweEZCLCAweEFGLCAKLSAgICAweDdGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweENBLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4N0YsIDB4NkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhFNywgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweENGLCAweEZFLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweERGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY3LCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkIsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhFNywgMHhGMiwgMHhGQywgCi0gICAgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHg3RiwgMHhBRSwgMHhFRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEY3LCAweDdFLCAweEZELCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RUYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkYsIDB4RkYsCi0gICAgMHhGRSwgMHhGRSwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERiwgMHhFRiwgMHhERCwgMHhGRSwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4QUYsIDB4RUYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkEsIDB4RkUsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgMHhGQSwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEY2LCAweDlDLCAweEJELCAweEJELCAweEJELCAweEJELCAweDdELCAweDdCLCAweDdCLCAweDdCLCAweDdCLCAweEZCLAotICAgIDB4QUUsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RjcsIDB4N0EsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHg2RiwgMHhFRiwgMHhGNywgMHhGRiwgMHhGRiwgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEY3LCAweEZFLCAKLSAgICAweEZFLCAweEZGLCAweEZGLCAweEZGLCAweERGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweENGLCAweEVCLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4OUUsIDB4RkMsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhFRiwgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZFLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweDdGLCAweEVGLCAweENCLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkQsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QkUsIDB4RkQsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhFRiwgCi0gICAgMHhFRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGOCwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEJGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGQiwgMHhBRiwgMHg3RiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhERiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhFRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4QkYsIDB4RkYsIAotICAgIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4QUUsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHhGQSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweDdGLCAweEVGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLAotICAgIDB4RkYsIDB4RjcsIDB4QkMsIDB4QkQsIAotICAgIDB4QkQsIDB4QkQsIDB4QkQsIDB4N0QsIDB4N0IsIDB4N0IsIDB4N0IsIDB4N0IsIDB4RkIsIDB4QUYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGNywgMHhGQSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEZGLCAweDdGLCAKLSAgICAweEFGLCAweDdGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLAotICAgIDB4RkUsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4Q0YsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRSwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGQiwgMHhGRiwKLSAgICAweEZGLCAweEZGLCAweEVGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZFLCAweEZGLAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIAotICAgIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RUYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCi0gICAgMHhCRiwgMHhGRiwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGQywgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwKLSAgICAweEVGLCAweEZGLCAweEZGLCAweEZGLCAKLSAgICAweEZGLCAweEZGLCAweEZCLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEVGLCAweEZFLCAweEZGLCAweDlGLCAweDlGLAotICAgIDB4OUYsIDB4M0YsIDB4M0YsIDB4M0YsIAotICAgIDB4M0YsIDB4M0YsIDB4RkYsIDB4RUYsIDB4REYsIDB4REYsIDB4REYsIDB4REYsIDB4Q0YsIDB4QjcsIDB4QkYsIDB4QkYsCi0gICAgMHhCRiwgMHhCRiwgMHhGRiwgMHhCQywgCi0gICAgMHhCOSwgMHg5RCwgMHhCRCwgMHhCRCwgMHg3RCwgMHg3QiwgMHg3QiwgMHg3QiwgMHg3QiwgMHhGQiwgMHhFRiwgMHhENywKLSAgICAweEY1LCAweEYzLCAweEYxLCAweEQxLCAKLSAgICAweDY1LCAweEUzLCAweEUzLCAweEUzLCAweEEzLCAweEZGLCAweEZFLCAweDdGLCAweEZFLCAweERFLCAweERFLCAweEZGLAotICAgIDB4QkQsIDB4QkQsIDB4QkQsIDB4QkQsIAotICAgIDB4REYsIDB4RUYsIDB4RkIsIDB4RjcsIDB4RjMsIDB4RjMsIDB4RjMsIDB4RTcsIDB4RTcsIDB4RTcsIDB4RTcsIDB4RTcsCi0gICAgMHhGQiwgMHhGRSwgMHhGRiwgMHhGRiwgCi0gICAgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRgotICAgIAotICAgIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IDc3NDIzMmMuLjQ4ZGJiMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CkBAIC01NSwxNyArNTYsMTggQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotLyogT3NpdGVjaCBTZXZlbiBvZiBEaWFtb25kcyBmaXJtd2FyZSAqLwotI2luY2x1ZGUgIm9zaXRlY2guaCIKLQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBjb25zdCBjaGFyICppZl9uYW1lc1tdID0geyAiYXV0byIsICIxMGJhc2VUIiwgIjEwYmFzZTIifTsKIAorLyogRmlybXdhcmUgbmFtZSAqLworI2RlZmluZSBGSVJNV0FSRV9OQU1FCQkib3NpdGVjaC9YaWxpbng3T0QuYmluIgorCiAvKiBNb2R1bGUgcGFyYW1ldGVycyAqLwogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlNNQyA5MWM5MiBzZXJpZXMgUENNQ0lBIGV0aGVybmV0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX05BTUUpOwogCiAjZGVmaW5lIElOVF9NT0RVTEVfUEFSTShuLCB2KSBzdGF0aWMgaW50IG4gPSB2OyBtb2R1bGVfcGFyYW0obiwgaW50LCAwKQogCkBAIC03NzEsNiArNzczLDI2IEBACiAgICAgcmV0dXJuIGk7CiB9CiAKK3N0YXRpYyBpbnQgb3NpX2xvYWRfZmlybXdhcmUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwlpbnQgaSwgZXJyOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIEZJUk1XQVJFX05BTUUsICZsaW5rLT5kZXYpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsIEZJUk1XQVJFX05BTUUpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIERvd25sb2FkIHRoZSBTZXZlbiBvZiBEaWFtb25kcyBmaXJtd2FyZSAqLworCWZvciAoaSA9IDA7IGkgPCBmdy0+c2l6ZTsgaSsrKSB7CisJICAgIG91dGIoZnctPmRhdGFbaV0sIGxpbmstPmlvLkJhc2VQb3J0MSArIDIpOworCSAgICB1ZGVsYXkoNTApOworCX0KKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IG9zaV9zZXR1cChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaywgdV9zaG9ydCBtYW5maWQsIHVfc2hvcnQgY2FyZGlkKQogewogICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsaW5rLT5wcml2OwpAQCAtODExLDExICs4MzMsOSBAQAogCSAoY2FyZGlkID09IFBST0RJRF9PU0lURUNIX1NFVkVOKSkgfHwKIAkoKG1hbmZpZCA9PSBNQU5GSURfUFNJT04pICYmCiAJIChjYXJkaWQgPT0gUFJPRElEX1BTSU9OX05FVDEwMCkpKSB7Ci0JLyogRG93bmxvYWQgdGhlIFNldmVuIG9mIERpYW1vbmRzIGZpcm13YXJlICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihfX1hpbGlueDdPRCk7IGkrKykgewotCSAgICBvdXRiKF9fWGlsaW54N09EW2ldLCBsaW5rLT5pby5CYXNlUG9ydDErMik7Ci0JICAgIHVkZWxheSg1MCk7Ci0JfQorCXJjID0gb3NpX2xvYWRfZmlybXdhcmUobGluayk7CisJaWYgKHJjKQorCQlnb3RvIGZyZWVfY2ZnX21lbTsKICAgICB9IGVsc2UgaWYgKG1hbmZpZCA9PSBNQU5GSURfT1NJVEVDSCkgewogCS8qIE1ha2Ugc3VyZSBib3RoIGZ1bmN0aW9ucyBhcmUgcG93ZXJlZCB1cCAqLwogCXNldF9iaXRzKDB4MzAwLCBsaW5rLT5pby5CYXNlUG9ydDEgKyBPU0lURUNIX0FVSV9QV1IpOwpAQCAtODYyLDEwICs4ODIsMTAgQEAKIAkgICAgIChzbWMtPmNhcmRpZCA9PSBQUk9ESURfT1NJVEVDSF9TRVZFTikpIHx8CiAJICAgICgoc21jLT5tYW5maWQgPT0gTUFORklEX1BTSU9OKSAmJgogCSAgICAgKHNtYy0+Y2FyZGlkID09IFBST0RJRF9QU0lPTl9ORVQxMDApKSkgewotCQkvKiBEb3dubG9hZCB0aGUgU2V2ZW4gb2YgRGlhbW9uZHMgZmlybXdhcmUgKi8KLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihfX1hpbGlueDdPRCk7IGkrKykgewotCQkJb3V0YihfX1hpbGlueDdPRFtpXSwgbGluay0+aW8uQmFzZVBvcnQxKzIpOwotCQkJdWRlbGF5KDUwKTsKKwkJaSA9IG9zaV9sb2FkX2Zpcm13YXJlKGxpbmspOworCQlpZiAoaSkgeworCQkJcHJfZXJyKCJzbWM5MWM5Ml9jczogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmVcbiIpOworCQkJcmV0dXJuIGk7CiAJCX0KIAl9CiAJaWYgKGxpbmstPm9wZW4pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwppbmRleCA1OGI3M2IwLi4zZmYxZjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCkBAIC03NTcsOCArNzU3LDcgQEAKICAqLwogc3RhdGljIHZvaWQgcGh5X3N0YXRlX21hY2hpbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0KLQkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0KIAkJCWNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IHBoeV9kZXZpY2UsIHN0YXRlX3F1ZXVlKTsKIAlpbnQgbmVlZHNfYW5lZyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYwppbmRleCBhNTAwNzg2Li45MTNiMmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIAogI2luY2x1ZGUgInFsZ2UuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggMDZjNTM1Mi4uZTFhNjM4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0yMDc1LDggKzIwNzUsNyBAQAogCWlmICghdHAtPnBjaWVfY2FwICYmIG5ldGlmX21zZ19wcm9iZSh0cCkpCiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJubyBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5XG4iKTsKIAotCS8qIFVubmVlZGVkID8gRG9uJ3QgbWVzcyB3aXRoIE1ycy4gTXVycGh5LiAqLwotCXJ0bDgxNjlfaXJxX21hc2tfYW5kX2Fjayhpb2FkZHIpOworCVJUTF9XMTYoSW50ck1hc2ssIDB4MDAwMCk7CiAKIAkvKiBTb2Z0IHJlc2V0IHRoZSBjaGlwLiAqLwogCVJUTF9XOChDaGlwQ21kLCBDbWRSZXNldCk7CkBAIC0yMDg4LDYgKzIwODcsOCBAQAogCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxKTsKIAl9CiAKKwlSVExfVzE2KEludHJTdGF0dXMsIDB4ZmZmZik7CisKIAkvKiBJZGVudGlmeSBjaGlwIGF0dGFjaGVkIHRvIGJvYXJkICovCiAJcnRsODE2OV9nZXRfbWFjX3ZlcnNpb24odHAsIGlvYWRkcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwppbmRleCA4OGRkMmUwLi5jZTc1NTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCkBAIC0yMjk5LDcgKzIyOTksNyBAQAogCWVhZGRyID0gc2MtPnNibV9od2FkZHI7CiAKIAkvKgotCSAqIFJlYWQgdGhlIGV0aGVybmV0IGFkZHJlc3MuICBUaGUgZmlyd21hcmUgbGVmdCB0aGlzIHByb2dyYW1tZWQKKwkgKiBSZWFkIHRoZSBldGhlcm5ldCBhZGRyZXNzLiAgVGhlIGZpcm13YXJlIGxlZnQgdGhpcyBwcm9ncmFtbWVkCiAJICogZm9yIHVzIGluIHRoZSBldGhlcm5ldCBhZGRyZXNzIHJlZ2lzdGVyIGZvciBlYWNoIG1hYy4KIAkgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCmluZGV4IDAwYzIzYjEuLmRlZTIzYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKQEAgLTQ0OCw2ICs0NDgsOSBAQAogCiAJCVdBUk5fT04oY2hhbm5lbC0+cnhfcGt0ICE9IE5VTEwpOwogCQllZnhfcnhfc3RyYXRlZ3koY2hhbm5lbCk7CisKKwkJbmV0aWZfbmFwaV9hZGQoY2hhbm5lbC0+bmFwaV9kZXYsICZjaGFubmVsLT5uYXBpX3N0ciwKKwkJCSAgICAgICBlZnhfcG9sbCwgbmFwaV93ZWlnaHQpOwogCX0KIH0KIApAQCAtNDYyLDEwICs0NjUsNiBAQAogCiAJRUZYX0xPRyhjaGFubmVsLT5lZngsICJzdGFydGluZyBjaGFuICVkXG4iLCBjaGFubmVsLT5jaGFubmVsKTsKIAotCWlmICghKGNoYW5uZWwtPmVmeC0+bmV0X2Rldi0+ZmxhZ3MgJiBJRkZfVVApKQotCQluZXRpZl9uYXBpX2FkZChjaGFubmVsLT5uYXBpX2RldiwgJmNoYW5uZWwtPm5hcGlfc3RyLAotCQkJICAgICAgIGVmeF9wb2xsLCBuYXBpX3dlaWdodCk7Ci0KIAkvKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoaXMgY2hhbm5lbCBtYXkgc2V0IHdvcmtfcGVuZGluZwogCSAqIGFzIHNvb24gYXMgd2UgZW5hYmxlIGl0LiAgTWFrZSBzdXJlIGl0J3MgY2xlYXJlZCBiZWZvcmUKIAkgKiB0aGVuLiAgU2ltaWxhcmx5LCBtYWtlIHN1cmUgaXQgc2VlcyB0aGUgZW5hYmxlZCBmbGFnIHNldC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaC9od210bS5oIGIvZHJpdmVycy9uZXQvc2tmcC9oL2h3bXRtLmgKaW5kZXggMWE2MDZkNC4uZTFhN2U1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9oL2h3bXRtLmgKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9oL2h3bXRtLmgKQEAgLTE0NSw3ICsxNDUsNyBAQAogCWludAlsZWF2ZV9pc3IgOwkJLyogbGVhdmUgZmRkaV9pc3IgaW1tZWRlYXRlbHkgaWYgc2V0ICovCiAJaW50CWlzcl9mbGFnIDsJCS8qIHNldCwgd2hlbiBIV00gaXMgZW50ZXJlZCBmcm9tIGlzciAqLwogCS8qCi0JICogdmFyYWlibGVzIGZvciB0aGUgY3VycmVudCB0cmFuc21pdCBmcmFtZQorCSAqIHZhcmlhYmxlcyBmb3IgdGhlIGN1cnJlbnQgdHJhbnNtaXQgZnJhbWUKIAkgKi8KIAlzdHJ1Y3Qgc19zbXRfdHhfcXVldWUgKnR4X3AgOwkvKiBwb2ludGVyIHRvIHRoZSB0cmFuc21pdCBxdWV1ZSAqLwogCXVfbG9uZwl0eF9kZXNjciA7CQkvKiB0eCBkZXNjcmlwdG9yIGZvciBGT1JNQUMrICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YzM1ODE1LmMgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKaW5kZXggYjUyYTFjMC4uZDkxZTk1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jCisrKyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwpAQCAtMTkwOCw3ICsxOTA4LDcgQEAKIAlkbyB7CiAJCXRjX3dyaXRlbChzdGF0dXMsICZ0ci0+SW50X1NyYyk7CS8qIHdyaXRlIHRvIGNsZWFyICovCiAKLQkJaGFuZGxlZCA9IHRjMzU4MTVfZG9faW50ZXJydXB0KGRldiwgc3RhdHVzLCBsaW1pdCk7CisJCWhhbmRsZWQgPSB0YzM1ODE1X2RvX2ludGVycnVwdChkZXYsIHN0YXR1cywgYnVkZ2V0IC0gcmVjZWl2ZWQpOwogCQlpZiAoaGFuZGxlZCA+PSAwKSB7CiAJCQlyZWNlaXZlZCArPSBoYW5kbGVkOwogCQkJaWYgKHJlY2VpdmVkID49IGJ1ZGdldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggMTIwNWMyYS4uNDM3NjgzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTExMjI1LDcgKzExMjI1LDcgQEAKIAkJcmV0dXJuIHRnM19waHlfaW5pdCh0cCk7CiAKIAkvKiBSZWFkaW5nIHRoZSBQSFkgSUQgcmVnaXN0ZXIgY2FuIGNvbmZsaWN0IHdpdGggQVNGCi0JICogZmlyd21hcmUgYWNjZXNzIHRvIHRoZSBQSFkgaGFyZHdhcmUuCisJICogZmlybXdhcmUgYWNjZXNzIHRvIHRoZSBQSFkgaGFyZHdhcmUuCiAJICovCiAJZXJyID0gMDsKIAlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwppbmRleCA0YTY1ZmMyLi41MzRjMGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogCkBAIC03Myw4ICs3NCwxMCBAQAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgID0gCiAiM2MzNTkuYyB2MS4yLjAgMi8xNy8wMSAtIE1pa2UgUGhpbGxpcHMgKG1pa2VwQGxpbnV4dHIubmV0KSIgOyAKIAorI2RlZmluZSBGV19OQU1FCQkiM2NvbS8zQzM1OS5iaW4iCiBNT0RVTEVfQVVUSE9SKCJNaWtlIFBoaWxsaXBzIDxtaWtlcEBsaW51eHRyLm5ldD4iKSA7IAogTU9EVUxFX0RFU0NSSVBUSU9OKCIzQ29tIDNDMzU5IFZlbG9jaXR5IFhMIFRva2VuIFJpbmcgQWRhcHRlciBEcml2ZXIgXG4iKSA7CitNT0RVTEVfRklSTVdBUkUoRldfTkFNRSk7CiAKIC8qIE1vZHVsZSBwYXJhbXRlcnMgKi8KIApAQCAtMTE0LDggKzExNyw2IEBACiAgKgl3aWxsIGJlIHN0dWNrIHdpdGggMTU1NSBsaW5lcyBvZiBoZXggIydzIGluIHRoZSBjb2RlLgogICovCiAKLSNpbmNsdWRlICIzYzM1OV9taWNyb2NvZGUuaCIgCi0KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB4bF9wY2lfdGJsW10gPQogewogCXtQQ0lfVkVORE9SX0lEXzNDT00sUENJX0RFVklDRV9JRF8zQ09NXzNDMzU5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LApAQCAtMzY0LDEwICszNjUsMzAgQEAKIAlyZXR1cm4gMDsgCiB9CiAKK3N0YXRpYyBpbnQgeGxfaW5pdF9maXJtd2FyZShzdHJ1Y3QgeGxfcHJpdmF0ZSAqeGxfcHJpdikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmeGxfcHJpdi0+ZncsIEZXX05BTUUsICZ4bF9wcml2LT5wZGV2LT5kZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsIEZXX05BTUUpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmICh4bF9wcml2LT5mdy0+c2l6ZSA8IDE2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiQm9ndXMgbGVuZ3RoICV6dSBpbiBcIiVzXCJcbiIsCisJCSAgICAgICB4bF9wcml2LT5mdy0+c2l6ZSwgRldfTkFNRSk7CisJCXJlbGVhc2VfZmlybXdhcmUoeGxfcHJpdi0+ZncpOworCQllcnIgPSAtRUlOVkFMOworCX0KKworCXJldHVybiBlcnI7Cit9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHhsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCiB7CiAJc3RydWN0IHhsX3ByaXZhdGUgKnhsX3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBlcnI7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlcyBcbiIsIHZlcnNpb24pOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBJL08gYXQgJWh4LCBNTUlPIGF0ICVwLCB1c2luZyBpcnEgJWRcbiIsCkBAIC0zNzUsOCArMzk2LDExIEBACiAKIAlzcGluX2xvY2tfaW5pdCgmeGxfcHJpdi0+eGxfbG9jaykgOyAKIAotCXJldHVybiB4bF9od19yZXNldChkZXYpIDsgCisJZXJyID0geGxfaW5pdF9maXJtd2FyZSh4bF9wcml2KTsKKwlpZiAoZXJyID09IDApCisJCWVyciA9IHhsX2h3X3Jlc2V0KGRldik7CiAKKwlyZXR1cm4gZXJyOwogfQogCiAKQEAgLTM4Niw3ICs0MTAsNyBAQAogICovCiAKIHN0YXRpYyBpbnQgeGxfaHdfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCi17IAorewogCXN0cnVjdCB4bF9wcml2YXRlICp4bF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICp4bF9tbWlvID0geGxfcHJpdi0+eGxfbW1pbyA7IAogCXVuc2lnbmVkIGxvbmcgdCA7IApAQCAtMzk2LDYgKzQyMCw5IEBACiAJdTE2IHN0YXJ0IDsgCiAJaW50IGogOwogCisJaWYgKHhsX3ByaXYtPmZ3ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyoKIAkgKiAgUmVzZXQgdGhlIGNhcmQuICBJZiB0aGUgY2FyZCBoYXMgZ290IHRoZSBtaWNyb2NvZGUgb24gYm9hcmQsIHdlIGhhdmUgCiAgICAgICAgICAqICBtaXNzZWQgdGhlIGluaXRpYWxpemF0aW9uIGludGVycnVwdCwgc28gd2UgbXVzdCBhbHdheXMgZG8gdGhpcy4KQEAgLTQ1OCwyNSArNDg1LDMwIEBACiAKIAkJLyogCiAJCSAqIE5vdyB0byB3cml0ZSB0aGUgbWljcm9jb2RlIGludG8gdGhlIHNoYXJlZCByYW0gCi0JIAkgKiBUaGUgbWljcm9jb2RlIG11c3QgZmluaXNoIGF0IHBvc2l0aW9uIDB4RkZGRiwgc28gd2UgbXVzdCBzdWJ0cmFjdAotCQkgKiB0byBnZXQgdGhlIHN0YXJ0IHBvc2l0aW9uIGZvciB0aGUgY29kZQorCSAJICogVGhlIG1pY3JvY29kZSBtdXN0IGZpbmlzaCBhdCBwb3NpdGlvbiAweEZGRkYsCisJIAkgKiBzbyB3ZSBtdXN0IHN1YnRyYWN0IHRvIGdldCB0aGUgc3RhcnQgcG9zaXRpb24gZm9yIHRoZSBjb2RlCisJIAkgKgorCQkgKiBMb29rcyBzdHJhbmdlIGJ1dCBlbnN1cmVzIGNvbXBpbGVyIG9ubHkgdXNlcworCQkgKiAxNiBiaXQgdW5zaWduZWQgaW50CiAJCSAqLworCQlzdGFydCA9ICgweEZGRkYgLSAoeGxfcHJpdi0+ZnctPnNpemUpICsgMSkgOwogCi0JCXN0YXJ0ID0gKDB4RkZGRiAtIChtY19zaXplKSArIDEgKSA7IC8qIExvb2tzIHN0cmFuZ2UgYnV0IGVuc3VyZXMgY29tcGlsZXIgb25seSB1c2VzIDE2IGJpdCB1bnNpZ25lZCBpbnQgZm9yIHRoaXMgKi8gCi0JCQogCQlwcmludGsoS0VSTl9JTkZPICIzQzM1OTogVXBsb2FkaW5nIE1pY3JvY29kZTogIik7IAotCQkKLQkJZm9yIChpID0gc3RhcnQsIGogPSAwOyBqIDwgbWNfc2l6ZTsgaSsrLCBqKyspIHsgCi0JCQl3cml0ZWwoTUVNX0JZVEVfV1JJVEUgfCAwWEQwMDAwIHwgaSwgeGxfbW1pbyArIE1NSU9fTUFDX0FDQ0VTU19DTUQpIDsgCi0JCQl3cml0ZWIobWljcm9jb2RlW2pdLHhsX21taW8gKyBNTUlPX01BQ0RBVEEpIDsgCisKKwkJZm9yIChpID0gc3RhcnQsIGogPSAwOyBqIDwgeGxfcHJpdi0+ZnctPnNpemU7IGkrKywgaisrKSB7CisJCQl3cml0ZWwoTUVNX0JZVEVfV1JJVEUgfCAwWEQwMDAwIHwgaSwKKwkJCSAgICAgICB4bF9tbWlvICsgTU1JT19NQUNfQUNDRVNTX0NNRCk7CisJCQl3cml0ZWIoeGxfcHJpdi0+ZnctPmRhdGFbal0sIHhsX21taW8gKyBNTUlPX01BQ0RBVEEpOwogCQkJaWYgKGogJSAxMDI0ID09IDApCiAJCQkJcHJpbnRrKCIuIik7CiAJCX0KIAkJcHJpbnRrKCJcbiIpIDsgCiAKLQkJZm9yIChpPTA7aSA8IDE2OyBpKyspIHsgCi0JCQl3cml0ZWwoIChNRU1fQllURV9XUklURSB8IDB4REZGRjApICsgaSwgeGxfbW1pbyArIE1NSU9fTUFDX0FDQ0VTU19DTUQpIDsgCi0JCQl3cml0ZWIobWljcm9jb2RlW21jX3NpemUgLSAxNiArIGldLCB4bF9tbWlvICsgTU1JT19NQUNEQVRBKSA7IAorCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkJd3JpdGVsKChNRU1fQllURV9XUklURSB8IDB4REZGRjApICsgaSwKKwkJCSAgICAgICB4bF9tbWlvICsgTU1JT19NQUNfQUNDRVNTX0NNRCk7CisJCQl3cml0ZWIoeGxfcHJpdi0+ZnctPmRhdGFbeGxfcHJpdi0+ZnctPnNpemUgLSAxNiArIGldLAorCQkJICAgICAgIHhsX21taW8gKyBNTUlPX01BQ0RBVEEpOwogCQl9CiAKIAkJLyoKQEAgLTE3ODIsNiArMTgxNCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgeGxfcHJpdmF0ZSAqeGxfcHJpdj1uZXRkZXZfcHJpdihkZXYpOwogCQorCXJlbGVhc2VfZmlybXdhcmUoeGxfcHJpdi0+ZncpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaW91bm1hcCh4bF9wcml2LT54bF9tbWlvKSA7IAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldikgOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5oIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmgKaW5kZXggNjZiMWZmNi4uYmNiMWE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmgKQEAgLTI4NCw1ICsyODQsOCBAQAogCXU4IHhsX2xhYVs2XSA7IAogCXUzMiByeF9yaW5nX2RtYV9hZGRyIDsgCiAJdTMyIHR4X3JpbmdfZG1hX2FkZHIgOyAKKworCS8qIGZpcm13YXJlIHNlY3Rpb24gKi8KKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5X21pY3JvY29kZS5oIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5X21pY3JvY29kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDAwYzAyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OV9taWNyb2NvZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1ODEgKzAsMCBAQAotCi0vKgotICogVGhlIGZpcm13YXJlIHRoaXMgZHJpdmVyIGRvd25sb2FkcyBpbnRvIHRoZSB0b2tlbnJpbmcgY2FyZCBpcyBhCi0gKiBzZXBhcmF0ZSBwcm9ncmFtIGFuZCBpcyBub3QgR1BMJ2Qgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoZSBMaW51eAotICogc2lkZSBkcml2ZXIgYW5kIHRoZSByb3V0aW5lIHRoYXQgbG9hZHMgdGhpcyBkYXRhIGludG8gdGhlIGNhcmQgYXJlLgotICoKLSAqIFRoaXMgZmlybXdhcmUgaXMgbGljZW5zZWQgdG8geW91IHN0cmljdGx5IGZvciB1c2UgaW4gY29uanVuY3Rpb24KLSAqIHdpdGggdGhlIHVzZSBvZiAzQ29tIDNDMzU5IFRva2VuUmluZyBhZGFwdGVycy4gVGhlcmUgaXMgbm8KLSAqIHdhcmFudHkgZXhwcmVzc2VkIG9yIGltcGxpZWQgYWJvdXQgaXRzIGZpdG5lc3MgZm9yIGFueSBwdXJwb3NlLgotICovCi0KLS8qIDNjMzU5X21pY3JvY29kZS5tYWM6IDNDb20gM0MzNTkgVG9rZW5yaW5nIG1pY3JvY29kZS4KLSAqCi0gKiBOb3RlczoKLSAqICAtIExvYWRlZCBmcm9tIHhsX2luaXQgdXBvbiBhZGFwdGVyIGluaXRpYWxpemF0aW9uLgotICoKLSAqIEF2YWlsYWJsZSBmcm9tIDNDb20gYXMgcGFydCBvZiB0aGVpciBzdGFuZGFyZCAzQzM1OSBkcml2ZXIuIAotICoKLSAqIG1jX3NpemUgKm11c3QqIG11c3QgbWF0Y2ggdGhlIG1pY3JvY29kZSBiZWluZyB1c2VkLCBlYWNoIHZlcnNpb24gaXMgYSAKLSAqIGRpZmZlcmVudCBsZW5ndGguCi0gKi8KLQotc3RhdGljIGludCBtY19zaXplID0gMjQ4ODAgOyAKLQotc3RhdGljIGNvbnN0IHU4IG1pY3JvY29kZVtdID0geyAKLSAweGZlLDB4M2EsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzMCwweDMzLDB4MmYsMHgzMCwweDMyLDB4MmYsMHgzOSwweDM5LDB4MjAsMHgzMQotLDB4MzcsMHgzYSwweDMxLDB4MzMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDMwLDB4MzEsMHgzMiwweDMzLDB4MzQsMHgzNSwweDM2LDB4MzcsMHgzOCwweDM5LDB4NDEsMHg0MiwweDQzLDB4NDQsMHg0NSwweDQ2Ci0sMHgwMCwweDAwLDB4MDcsMHhmZiwweDAyLDB4MDAsMHhmZSwweDlmLDB4MDYsMHgwMCwweDAwLDB4N2MsMHg0OCwweDAwLDB4MDAsMHg3MAotLDB4ODIsMHgwMCwweGZmLDB4ZmYsMHg4NiwweDAwLDB4ZmYsMHhmZiwweDg4LDB4MDAsMHhmZiwweGZmLDB4OWEsMHgwMCwweGZmLDB4ZmYKLSwweGZmLDB4ZmYsMHgxMSwweDAwLDB4YzAsMHgwMCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4MTEsMHgyMiwweDMzLDB4NDQsMHg1NSwweDY2Ci0sMHgzMywweDQzLDB4NGYsMHg0ZCwweDIwLDB4NDIsMHg0MSwweDQyLDB4NDUsMHgxMSwweDQwLDB4YzAsMHgwMCwweGZmLDB4ZmYsMHhmZgotLDB4ZmYsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg1MywweDc0LDB4NjEsMHg3MiwweDc0LDB4MjAsMHg2ZiwweDY2LDB4MjAKLSwweDRjLDB4NGMsMHg0MywweDIwLDB4NjYsMHg3MiwweDYxLDB4NmQsMHg2NSwweDJlLDB4MjAsMHgyMCwweDU0LDB4NmYsMHg3NCwweDYxCi0sMHg2YywweDIwLDB4NjQsMHg2MSwweDc0LDB4NjEsMHgyMCwweDczLDB4NjksMHg3YSwweDY1LDB4MjAsMHg2OSwweDczLDB4MjAsMHg3OAotLDB4NzgsMHg3OCwweDIwLDB4MjAsMHgyMCwweDQyLDB4NDEsMHg0MiwweDQ1LDB4ZTgsMHhkMiwweDAxLDB4ODMsMHgzZSwweGY3LDB4MzQKLSwweDAwLDB4NzUsMHgyMSwweGU4LDB4NDEsMHgwMCwweDgzLDB4M2UsMHhmNywweDM0LDB4MDAsMHg3NSwweDE3LDB4ZTgsMHg4MiwweDAwCi0sMHg4MywweDNlLDB4ZjcsMHgzNCwweDAwLDB4NzUsMHgwZCwweGU4LDB4YmYsMHgwMCwweDgzLDB4M2UsMHhmNywweDM0LDB4MDAsMHg3NQotLDB4MDMsMHhlOCwweDQxLDB4MDIsMHhjMywweDFlLDB4YjgsMHgwMCwweGYwLDB4OGUsMHhkOCwweDMzLDB4ZjYsMHhiOSwweDAwLDB4ODAKLSwweDMzLDB4ZGIsMHhhZCwweDAzLDB4ZDgsMHhlMiwweGZiLDB4MWYsMHhiOCwweDAwLDB4MDAsMHg4MywweGZiLDB4MDAsMHg3NCwweDAzCi0sMHhiOCwweDIyLDB4MDAsMHhhMywweGY3LDB4MzQsMHhjMywweGZhLDB4YmEsMHg1NiwweDAwLDB4YjAsMHhmZiwweGVlLDB4MzMsMHhjMAotLDB4OGUsMHhjMCwweDMzLDB4ZjYsMHhiOSwweGZmLDB4N2YsMHg4MywweDNlLDB4ZmYsMHgzNCwweDAwLDB4NzQsMHgwOCwweDhkLDB4M2UKLSwweDMwLDB4NjEsMHhkMSwweGVmLDB4MmIsMHhjZiwweDI2LDB4OGIsMHgxYywweDI2LDB4YzcsMHgwNCwweGZmLDB4ZmYsMHgyNiwweDgzCi0sMHgzYywweGZmLDB4NzUsMHgxNywweDI2LDB4YzcsMHgwNCwweDAwLDB4MDAsMHgyNiwweDgzLDB4M2MsMHgwMCwweDc1LDB4MGMsMHgyNgotLDB4ODksMHgxYywweDQ2LDB4NDYsMHhlMiwweGUwLDB4YjgsMHgwMCwweDAwLDB4ZWIsMHgwMywweGI4LDB4MjQsMHgwMCwweGEzLDB4ZjcKLSwweDM0LDB4YzMsMHhmYSwweGI0LDB4ZDcsMHg5ZSwweDczLDB4M2EsMHg3NSwweDM4LDB4NzksMHgzNiwweDdiLDB4MzQsMHg5ZiwweGIxCi0sMHgwNSwweGQyLDB4ZWMsMHg3MywweDJkLDB4YjAsMHg0MCwweGQwLDB4ZTAsMHg3MSwweDI3LDB4NzksMHgyNSwweGQwLDB4ZTAsMHg3MwotLDB4MjEsMHg3YiwweDFmLDB4MzIsMHhjMCwweDc1LDB4MWIsMHgzMiwweGU0LDB4OWUsMHg3MiwweDE2LDB4NzQsMHgxNCwweDc4LDB4MTIKLSwweDdhLDB4MTAsMHg5ZiwweGQyLDB4ZWMsMHg3MiwweDBiLDB4ZDAsMHhlNCwweDcwLDB4MDcsMHg3NSwweDA1LDB4YjgsMHgwMCwweDAwCi0sMHhlYiwweDAzLDB4YjgsMHgyNiwweDAwLDB4YTMsMHhmNywweDM0LDB4YzMsMHhmYSwweGJhLDB4NWEsMHgwMCwweDMzLDB4YzAsMHhlZgotLDB4ZWYsMHhlZiwweGVmLDB4YjAsMHgwMCwweGU2LDB4NTYsMHhiMCwweDAwLDB4ZTYsMHg1NCwweGJhLDB4NTIsMHgwMCwweGI4LDB4MDEKLSwweDAxLDB4ZWYsMHhlOCwweGNhLDB4MDAsMHgzYywweDAxLDB4NzUsMHg3ZiwweGU4LDB4ODMsMHgwMCwweGJhLDB4NTIsMHgwMCwweGI4Ci0sMHgwMiwweDAyLDB4ZWYsMHhlOCwweGI5LDB4MDAsMHgzYywweDAyLDB4NzUsMHg2ZSwweGU4LDB4N2EsMHgwMCwweGJhLDB4NTIsMHgwMAotLDB4YjgsMHgwNCwweDA0LDB4ZWYsMHhlOCwweGE4LDB4MDAsMHgzYywweDA0LDB4NzUsMHg1ZCwweGU4LDB4NzEsMHgwMCwweGJhLDB4NTIKLSwweDAwLDB4YjgsMHgwOCwweDA4LDB4ZWYsMHhlOCwweDk3LDB4MDAsMHgzYywweDA4LDB4NzUsMHg0YywweGU4LDB4NjgsMHgwMCwweGJhCi0sMHg1MiwweDAwLDB4YjgsMHgxMCwweDEwLDB4ZWYsMHhlOCwweDg2LDB4MDAsMHgzYywweDEwLDB4NzUsMHgzYiwweGU4LDB4NWYsMHgwMAotLDB4YmEsMHg1MiwweDAwLDB4YjgsMHgyMCwweDIwLDB4ZWYsMHhlOCwweDc1LDB4MDAsMHgzYywweDIwLDB4NzUsMHgyYSwweGU4LDB4NTYKLSwweDAwLDB4YmEsMHg1MiwweDAwLDB4YjgsMHg0MCwweDQwLDB4ZWYsMHhlOCwweDY0LDB4MDAsMHgzYywweDQwLDB4NzUsMHgxOSwweGU4Ci0sMHg0ZCwweDAwLDB4YmEsMHg1MiwweDAwLDB4YjgsMHg4MCwweDgwLDB4ZWYsMHhlOCwweDUzLDB4MDAsMHgzYywweDgwLDB4NzUsMHgwOAotLDB4ZTgsMHg0NCwweDAwLDB4YjgsMHgwMCwweDAwLDB4ZWIsMHgwMywweGI4LDB4MjgsMHgwMCwweGEzLDB4ZjcsMHgzNCwweGMzLDB4YmEKLSwweDVhLDB4MDAsMHhiOCwweDAwLDB4ODAsMHhlZiwweGMzLDB4YmEsMHg1YSwweDAwLDB4YjgsMHgwMSwweDgwLDB4ZWYsMHhjMywweGJhCi0sMHg1YSwweDAwLDB4YjgsMHgwMiwweDgwLDB4ZWYsMHhjMywweGJhLDB4NWEsMHgwMCwweGI4LDB4MDMsMHg4MCwweGVmLDB4YzMsMHhiYQotLDB4NWEsMHgwMCwweGI4LDB4MDQsMHg4MCwweGVmLDB4YzMsMHhiYSwweDVhLDB4MDAsMHhiOCwweDA1LDB4ODAsMHhlZiwweGMzLDB4YmEKLSwweDVhLDB4MDAsMHhiOCwweDA2LDB4ODAsMHhlZiwweGMzLDB4YmEsMHg1YSwweDAwLDB4YjgsMHgwNywweDgwLDB4ZWYsMHhjMywweGI5Ci0sMHhmZiwweGZmLDB4ZTQsMHg1OCwweGU0LDB4NTQsMHgzYywweDAwLDB4NzUsMHgwMywweDQ5LDB4NzUsMHhmNywweGMzLDB4ZmEsMHgzMgotLDB4YzAsMHhlNiwweDU2LDB4ZTQsMHg1NiwweDNjLDB4MDAsMHg3NCwweDAzLDB4ZTksMHg4MiwweDAwLDB4YjAsMHhmZiwweGU2LDB4NTYKLSwweGU0LDB4NTYsMHgzYywweGZmLDB4NzUsMHg3OCwweGJhLDB4NTIsMHgwMCwweGI4LDB4ZmYsMHhmZiwweGVmLDB4ZWQsMHgzYywweGZmCi0sMHg3NSwweDZjLDB4YjgsMHgwMCwweGZmLDB4ZWYsMHhlZCwweDNjLDB4MDAsMHg3NSwweDYzLDB4YjAsMHhmZiwweGU2LDB4NTQsMHhlNAotLDB4NTQsMHgzYywweGZmLDB4NzUsMHg1OSwweDMyLDB4YzAsMHhlNiwweDU0LDB4ZTQsMHg1NCwweDNjLDB4MDAsMHg3NSwweDRmLDB4YjAKLSwweDBmLDB4ZTYsMHg1MCwweGU0LDB4NTAsMHgyNCwweDBmLDB4M2MsMHgwZiwweDc1LDB4NDMsMHhiMCwweDAwLDB4ZTYsMHg1MCwweGU0Ci0sMHg1MCwweDI0LDB4MGYsMHgzYywweDAwLDB4NzUsMHgzNywweDhjLDB4YzgsMHg4ZSwweGMwLDB4YmUsMHg3MCwweDAwLDB4MjYsMHg4YgotLDB4MTQsMHgyNiwweDhiLDB4NWMsMHgwMiwweGI4LDB4MDAsMHgwMCwweGVmLDB4ZWQsMHgyMywweGMzLDB4M2QsMHgwMCwweDAwLDB4NzUKLSwweDFkLDB4YjgsMHhmZiwweGZmLDB4MjMsMHhjMywweGVmLDB4OGIsMHhjOCwweGVkLDB4MjMsMHhjMywweDNiLDB4YzEsMHg3NSwweDBlCi0sMHg4MywweGM2LDB4MDQsMHgyNiwweDgzLDB4M2MsMHhmZiwweDc1LDB4ZDUsMHhiOCwweDAwLDB4MDAsMHhlYiwweDAzLDB4YjgsMHgyYQotLDB4MDAsMHhhMywweGY3LDB4MzQsMHhjMywweGZhLDB4MzMsMHhjMCwweGJmLDB4MDAsMHgyMCwweGI5LDB4MTcsMHgwMCwweGYzLDB4YWIKLSwweGJmLDB4MDAsMHgzMCwweGI5LDB4MTcsMHgwMCwweGYzLDB4YWIsMHhiZiwweDAwLDB4MjIsMHhiOSwweDQwLDB4MDAsMHhmMywweGFiCi0sMHhiZiwweDAwLDB4MzIsMHhiOSwweDQwLDB4MDAsMHhmMywweGFiLDB4ZmMsMHgxZSwweDhjLDB4YzgsMHg4ZSwweGQ4LDB4MzMsMHhjMAotLDB4OGUsMHhjMCwweGJlLDB4OTIsMHgwMCwweGJmLDB4MDAsMHgyMCwweGI5LDB4MTcsMHgwMCwweGYzLDB4YTQsMHhiZSwweGE5LDB4MDAKLSwweGJmLDB4MDAsMHgyMiwweGI5LDB4NDAsMHgwMCwweGYzLDB4YTQsMHgxZiwweGM3LDB4MDYsMHhmYiwweDM0LDB4NjQsMHgwMCwweGJhCi0sMHgwOCwweDAwLDB4YjgsMHgwZiwweDAwLDB4ZWYsMHhlOCwweDgyLDB4MDEsMHhlOCwweDliLDB4MDEsMHg3MiwweDBkLDB4YzcsMHgwNgotLDB4ZjcsMHgzNCwweDJjLDB4MDAsMHhjNywweDA2LDB4ZjksMHgzNCwweDA0LDB4MDAsMHhjMywweGJhLDB4MGEsMHgwMCwweDMzLDB4YzAKLSwweGVmLDB4ZTgsMHg5OCwweDAxLDB4ZTgsMHhiNSwweDAxLDB4YjgsMHgxNywweDAwLDB4YmEsMHg5YywweDAwLDB4ZWYsMHhiOCwweDAwCi0sMHgxMCwweGJhLDB4OWEsMHgwMCwweGVmLDB4YjgsMHgxNywweDAwLDB4YTksMHgwMSwweDAwLDB4NzQsMHgwMSwweDQwLDB4YmEsMHg4YwotLDB4MDAsMHhlZiwweGI4LDB4MDAsMHgxOCwweGJhLDB4ODYsMHgwMCwweGVmLDB4YjgsMHgwYywweDAwLDB4YmEsMHg4MiwweDAwLDB4ZWYKLSwweGJhLDB4MDIsMHgwMCwweGVkLDB4MjUsMHhmOSwweGZmLDB4MGQsMHgwMiwweDAwLDB4ZWYsMHhiYSwweDA2LDB4MDAsMHgzMywweGMwCi0sMHhlZiwweGJhLDB4MDQsMHgwMCwweGI4LDB4NjAsMHgwMCwweGVmLDB4YmEsMHgwMCwweDAwLDB4YjgsMHgxOCwweDAwLDB4ZWYsMHhiYQotLDB4ODAsMHgwMCwweGI5LDB4ZmYsMHhmZiwweGVkLDB4YTksMHgwMSwweDAwLDB4NzUsMHgwNCwweGUyLDB4ZjgsMHhlYiwweDNlLDB4YmEKLSwweDBhLDB4MDAsMHhlZCwweGE5LDB4MDAsMHg0MCwweDc0LDB4MzUsMHhhOSwweDAwLDB4MjAsMHg3NCwweDMwLDB4MzMsMHhjMCwweGVmCi0sMHg1MSwweGI5LDB4YzgsMHgwMCwweGUyLDB4ZmUsMHg1OSwweDFlLDB4MDYsMHgxZiwweDI2LDB4OGIsMHgwZSwweDAyLDB4MzAsMHg4MwotLDB4ZjksMHgxNywweDc1LDB4MTgsMHg0OSwweDQ5LDB4YmUsMHgwMiwweDIwLDB4YmYsMHgwNiwweDMwLDB4ZjMsMHhhNiwweDFmLDB4MjMKLSwweGM5LDB4NzUsMHgwYSwweGZmLDB4MGUsMHhmYiwweDM0LDB4NzQsMHgxMiwweGU5LDB4NGQsMHhmZiwweDFmLDB4YjgsMHgyYywweDAwCi0sMHhiYiwweDAwLDB4MDAsMHhhMywweGY3LDB4MzQsMHg4OSwweDFlLDB4ZjksMHgzNCwweGMzLDB4YzcsMHgwNiwweGZiLDB4MzQsMHg2NAotLDB4MDAsMHhlOCwweGQzLDB4MDAsMHg3MiwweDBkLDB4YzcsMHgwNiwweGY3LDB4MzQsMHgyYywweDAwLDB4YzcsMHgwNiwweGY5LDB4MzQKLSwweDA0LDB4MDAsMHhjMywweGU4LDB4ZDYsMHgwMCwweGU4LDB4ZjMsMHgwMCwweGI4LDB4MDMsMHgwMCwweGJhLDB4ODIsMHgwMCwweGVmCi0sMHhiOCwweDQwLDB4ODAsMHhiYSwweDk4LDB4MDAsMHhlZiwweGI4LDB4MDAsMHgxMSwweGJhLDB4OTYsMHgwMCwweGVmLDB4YjgsMHg0MAotLDB4MDAsMHhhOSwweDAxLDB4MDAsMHg3NCwweDAxLDB4NDAsMHhiYSwweDkyLDB4MDAsMHhlZiwweGI4LDB4MDAsMHgxOSwweGJhLDB4OGUKLSwweDAwLDB4ZWYsMHhiYSwweDAyLDB4MDAsMHhlZCwweDI1LDB4ZjksMHhmZiwweDBkLDB4MDYsMHgwMCwweGVmLDB4YmEsMHgwNiwweDAwCi0sMHgzMywweGMwLDB4ZWYsMHhiYSwweDAwLDB4MDAsMHhiOCwweDE4LDB4MDAsMHhlZiwweGJhLDB4ODAsMHgwMCwweGI5LDB4ZmYsMHhmZgotLDB4ZWQsMHhhOSwweDIwLDB4MDAsMHg3NSwweDA0LDB4ZTIsMHhmOCwweGViLDB4NDMsMHhiYSwweDBhLDB4MDAsMHhlZCwweGE5LDB4MDAKLSwweDQwLDB4NzQsMHgzYSwweGE5LDB4MDAsMHgyMCwweDc0LDB4MzUsMHgzMywweGMwLDB4ZWYsMHg1MSwweGI5LDB4YzgsMHgwMCwweGUyCi0sMHhmZSwweDU5LDB4MWUsMHgwNiwweDFmLDB4MjYsMHg4YiwweDBlLDB4MDIsMHgzMiwweDgzLDB4ZjksMHg0MCwweDc1LDB4MWQsMHg0OQotLDB4NDksMHhiZSwweDAyLDB4MjIsMHhiZiwweDA2LDB4MzIsMHhmMywweGE2LDB4MWYsMHgyMywweGM5LDB4NzUsMHgwZiwweGZmLDB4MGUKLSwweGZiLDB4MzQsMHg3NCwweDAzLDB4ZTksMHg1YSwweGZmLDB4YjgsMHgwMCwweDAwLDB4ZWIsMHgwYiwweDFmLDB4YjgsMHgyYywweDAwCi0sMHhiYiwweDAyLDB4MDAsMHg4OSwweDFlLDB4ZjksMHgzNCwweGEzLDB4ZjcsMHgzNCwweGMzLDB4YmEsMHgwMiwweDAwLDB4YjgsMHgwMAotLDB4OWMsMHhlZiwweGJhLDB4MDAsMHgwMCwweGI4LDB4MDAsMHg4NCwweGVmLDB4MzMsMHhjMCwweGVmLDB4YmEsMHgwYSwweDAwLDB4ZWYKLSwweGJhLDB4MGUsMHgwMCwweDMzLDB4YzAsMHhlZiwweGMzLDB4YmEsMHgwYSwweDAwLDB4YjksMHhmZiwweGZmLDB4ZWQsMHgyNSwweDAwCi0sMHg2MCwweDNkLDB4MDAsMHg2MCwweDc0LDB4MDQsMHhlMiwweGY1LDB4ZjgsMHhjMywweGY5LDB4YzMsMHhiMCwweDAwLDB4ZTYsMHg1NgotLDB4YjgsMHgwMCwweGZmLDB4YmEsMHg1MiwweDAwLDB4ZWYsMHhiOSwweGZmLDB4ZmYsMHhiYSwweDU4LDB4MDAsMHhlZCwweDI1LDB4ZWYKLSwweDAwLDB4NzQsMHgwOCwweGJhLDB4NWEsMHgwMCwweDMzLDB4YzAsMHhlZiwweGUyLDB4ZWYsMHhjMywweGJhLDB4ODAsMHgwMCwweGVkCi0sMHhiYSwweDg0LDB4MDAsMHhlZiwweGJhLDB4ODAsMHgwMCwweGVkLDB4YzMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4YzYsMHgwNiwweGVjLDB4MzQsMHgxNSwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4OGUsMHhjMCwweDFlLDB4OGMsMHhjOCwweGJlLDB4NDAKLSwweDU0LDB4YmYsMHg2MCwweGZlLDB4OGUsMHhkOCwweGI5LDB4MTAsMHgwMCwweGYzLDB4YTQsMHgxZiwweGM3LDB4MDYsMHg4MCwweDM2Ci0sMHgxMCwweDM1LDB4YzcsMHgwNiwweDhjLDB4MzYsMHgzMCwweDM1LDB4OGQsMHgwNiwweDM4LDB4MzUsMHhhMywweDMwLDB4MzUsMHhhMwotLDB4MzIsMHgzNSwweDA1LDB4MzMsMHgwMSwweGEzLDB4MzQsMHgzNSwweGM3LDB4MDYsMHgzNiwweDM1LDB4NTAsMHgwMSwweGM3LDB4MDYKLSwweDg0LDB4MzYsMHg4MCwweGZlLDB4YzcsMHgwNiwweDg4LDB4MzYsMHhjMCwweGZlLDB4YzYsMHgwNiwweGMyLDB4ZmUsMHhmZiwweGM2Ci0sMHgwNiwweDkzLDB4MzYsMHg4MCwweGM2LDB4MDYsMHg5MiwweDM2LDB4MDAsMHhjNiwweDA2LDB4ODAsMHhmZSwweDgwLDB4YzcsMHgwNgotLDB4ODIsMHhmZSwweDU0LDB4NTAsMHhjNywweDA2LDB4ODQsMHhmZSwweDJiLDB4NGQsMHhlNSwweGNlLDB4YTksMHgwMiwweDAwLDB4NzUKLSwweDA4LDB4YzYsMHgwNiwweDgxLDB4ZmUsMHgyMywweGU5LDB4MDUsMHgwMCwweGM2LDB4MDYsMHg4MSwweGZlLDB4MjIsMHhhMSwweGY3Ci0sMHgzNCwweGEzLDB4ODYsMHhmZSwweGI4LDB4NDgsMHgzNCwweDg2LDB4ZTAsMHhhMywweDg4LDB4ZmUsMHg4ZCwweDA2LDB4NGUsMHgzNAotLDB4ODYsMHhlMCwweGEzLDB4OGEsMHhmZSwweGI4LDB4NTgsMHgzNCwweDg2LDB4ZTAsMHhhMywweDhjLDB4ZmUsMHhiOCwweDljLDB4MzQKLSwweDg2LDB4ZTAsMHhhMywweDhlLDB4ZmUsMHg4ZCwweDA2LDB4MjAsMHgwMywweDg2LDB4ZTAsMHhhMywweDkwLDB4ZmUsMHgzMywweGMwCi0sMHhiYSwweDcyLDB4MDAsMHhlZiwweDMzLDB4YzAsMHhiYSwweDc0LDB4MDAsMHhlZiwweGJhLDB4NzYsMHgwMCwweGVmLDB4YjgsMHg4MAotLDB4ZmUsMHg4NiwweGUwLDB4YmEsMHg3MiwweDAwLDB4ZWYsMHhlOCwweGJmLDB4MDcsMHhiYSwweDBjLDB4MDEsMHhiOCwweDQwLDB4NDAKLSwweGVmLDB4ZWQsMHhiYSwweDZhLDB4MDAsMHhiOCwweDAzLDB4MDAsMHhjMSwweGUwLDB4MDgsMHgwZCwweDAzLDB4MDAsMHhlZiwweGI5Ci0sMHgwYSwweDAwLDB4ZTgsMHg5NCwweDAwLDB4YmEsMHg2YSwweDAwLDB4YjgsMHgwMywweDAwLDB4YzEsMHhlMCwweDA4LDB4ZWYsMHhhMQotLDB4MzIsMHgzNCwweGEzLDB4YTIsMHgzMywweGM3LDB4MDYsMHhhNiwweDMzLDB4MDQsMHgwMCwweDhkLDB4MDYsMHhhMCwweDMzLDB4YzEKLSwweGU4LDB4MDQsMHhjZCwweDM5LDB4YzcsMHgwNiwweDkwLDB4MzYsMHhmZiwweGZmLDB4ZTksMHhlMywweDAwLDB4NjMsMHgwZCwweDY2Ci0sMHgwZCwweDY2LDB4MGQsMHg4YSwweDBkLDB4ZTYsMHgwZSwweDc1LDB4MTIsMHgyZSwweDBmLDB4MDMsMHgwZiwweDUwLDB4MGYsMHg2MAotLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweGVkLDB4MGYsMHhlOSwweDEyLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAKLSwweDBkLDB4NjAsMHgwZCwweDIyLDB4MTAsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4ZmUsMHgxMCwweDYwCi0sMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4YWYsMHgwZiwweDMyLDB4MTAsMHgzNwotLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAKLSwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwLDB4MGQsMHg2MCwweDBkLDB4NjAsMHgwZCwweDYwCi0sMHgwZCwweDY0LDB4MGUsMHgwMCwweDBmLDB4OTUsMHgwOSwweDYwLDB4MGEsMHg0OSwweGJiLDB4ZmYsMHhmZiwweGJhLDB4NmEsMHgwMAotLDB4ZWQsMHhhOSwweDAwLDB4MjAsMHg3NCwweDM4LDB4ODAsMHgzZSwweDgwLDB4ZmUsMHgxMiwweDc1LDB4MzEsMHhlOCwweDRhLDB4MDAKLSwweGExLDB4MzIsMHgzNCwweGEzLDB4YTIsMHgzMywweGM3LDB4MDYsMHhhNiwweDMzLDB4MDQsMHgwMCwweDhkLDB4MDYsMHhhMCwweDMzCi0sMHhjMSwweGU4LDB4MDQsMHhjZCwweDM5LDB4ZTgsMHgyMiwweDAwLDB4YzcsMHgwNiwweGYzLDB4MzQsMHg0NiwweDAwLDB4YzcsMHgwNgotLDB4ZjUsMHgzNCwweGZmLDB4ZmYsMHhjNywweDA2LDB4OTAsMHgzNiwweGZmLDB4ZmYsMHg1OCwweGU5LDB4MzIsMHgwMCwweDRiLDB4ODMKLSwweGZiLDB4MDAsMHg3NSwweGI5LDB4ODMsMHhmOSwweDAwLDB4NzUsMHhiMCwweGMzLDB4NTIsMHhiYSwweDZhLDB4MDAsMHhiOCwweDAzCi0sMHgwMCwweGMxLDB4ZTAsMHgwOCwweDBkLDB4MDMsMHgwMCwweGVmLDB4NWEsMHhjMywweDUyLDB4YmEsMHg2YSwweDAwLDB4YjgsMHgwMwotLDB4MDAsMHhjMSwweGUwLDB4MDgsMHhlZiwweDVhLDB4YzMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDY4LDB4ODAsMHgwNywweGExLDB4OTAsMHgzNiwweGNkLDB4MzUsMHg4YiwweDM2LDB4MjQsMHgwMiwweDJlLDB4ZmYsMHhhNCwweDM1Ci0sMHgwYSwweGZhLDB4OGEsMHgyNiwweDk0LDB4MzYsMHg4OCwweDI2LDB4ZTgsMHgzNCwweGM2LDB4MDYsMHg5NCwweDM2LDB4MDAsMHhmYgotLDB4MjIsMHhlNCwweDc1LDB4MDEsMHhjMywweGY2LDB4YzQsMHgyMCwweDc0LDB4N2QsMHhmNiwweGM0LDB4MDgsMHg3NCwweDA1LDB4ODAKLSwweDBlLDB4OTIsMHgzNiwweDA0LDB4ODAsMHgyNiwweGU4LDB4MzQsMHhkNywweGM0LDB4MWUsMHg4NCwweDM2LDB4MjYsMHg4YiwweDM3Ci0sMHg4MSwweGU2LDB4ZmYsMHgwMCwweDgzLDB4ZmUsMHgyMCwweDc2LDB4MDUsMHhiMCwweDAxLDB4ZTksMHgyOCwweDAwLDB4NTMsMHgwNgotLDB4ZDEsMHhlNiwweDJlLDB4ZmYsMHg5NCwweDlkLDB4MDYsMHgwNywweDViLDB4MjYsMHg4OCwweDQ3LDB4MDIsMHgzYywweGZmLDB4NzQKLSwweDA3LDB4M2MsMHhmZSwweDc1LDB4MTEsMHhlOSwweDNiLDB4MDAsMHhmNiwweDA2LDB4OTIsMHgzNiwweDA4LDB4NzUsMHgzNCwweGY2Ci0sMHgwNiwweDkyLDB4MzYsMHgwNCwweDc0LDB4MmQsMHg4MCwweDI2LDB4OTIsMHgzNiwweGYzLDB4ODAsMHgzZSwweDk1LDB4MzYsMHgwMAotLDB4NzUsMHgyMSwweDI2LDB4ODAsMHgzZiwweDA1LDB4NzUsMHgxMywweGM2LDB4MDYsMHg5NSwweDM2LDB4MDAsMHgyNiwweDgwLDB4N2YKLSwweDA2LDB4MDAsMHg3NCwweDA3LDB4MjYsMHg4YiwweDQ3LDB4MDQsMHhhMiwweDk1LDB4MzYsMHhiYSwweDBjLDB4MDEsMHhiOCwweDQwCi0sMHg0MCwweGVmLDB4ZWQsMHg4YSwweDI2LDB4ZTgsMHgzNCwweGY2LDB4YzQsMHgxMCwweDc1LDB4MDMsMHhlOSwweDViLDB4MDAsMHhmNgotLDB4YzQsMHgwNCwweDc0LDB4MDUsMHg4MCwweDBlLDB4OTIsMHgzNiwweDAxLDB4ODAsMHgyNiwweGU4LDB4MzQsMHhlYiwweGM0LDB4M2UKLSwweDg4LDB4MzYsMHgyNiwweDhiLDB4MzUsMHg4MywweGU2LDB4N2YsMHg4MywweGZlLDB4MTIsMHg3MiwweDA4LDB4MjYsMHhjNiwweDQ1Ci0sMHgwMiwweDAxLDB4ZTksMHgyNCwweDAwLDB4ODMsMHhjNiwweDIwLDB4ZDEsMHhlNiwweDJlLDB4ZmYsMHg5NCwweDlkLDB4MDYsMHhjNAotLDB4M2UsMHg4OCwweDM2LDB4MjYsMHg4OCwweDQ1LDB4MDIsMHgzYywweGZmLDB4NzUsMHgwZSwweGY2LDB4MDYsMHg5MiwweDM2LDB4MDEKLSwweDc0LDB4MTQsMHhmNiwweDA2LDB4OTIsMHgzNiwweDAyLDB4NzUsMHgwZCwweDgwLDB4MjYsMHg5MiwweDM2LDB4ZmMsMHhiYSwweDBjCi0sMHgwMSwweGI4LDB4MjAsMHgyMCwweGVmLDB4ZWQsMHg4YSwweDI2LDB4ZTgsMHgzNCwweGY2LDB4YzQsMHgwOCwweDc0LDB4MjIsMHg4MAotLDB4MjYsMHhlOCwweDM0LDB4ZjcsMHg4MCwweDBlLDB4OTIsMHgzNiwweDA0LDB4ZjYsMHgwNiwweDkyLDB4MzYsMHgwOCwweDc0LDB4MTEKLSwweDgwLDB4MjYsMHg5MiwweDM2LDB4ZjMsMHhiYSwweDBjLDB4MDEsMHhiOCwweDQwLDB4NDAsMHhlZiwweGVkLDB4OGEsMHgyNiwweGU4Ci0sMHgzNCwweGY2LDB4YzQsMHgwNCwweDc0LDB4MjIsMHg4MCwweDI2LDB4ZTgsMHgzNCwweGZiLDB4ODAsMHgwZSwweDkyLDB4MzYsMHgwMQotLDB4ZjYsMHgwNiwweDkyLDB4MzYsMHgwMiwweDc1LDB4MTEsMHg4MCwweDI2LDB4OTIsMHgzNiwweGZlLDB4YmEsMHgwYywweDAxLDB4YjgKLSwweDIwLDB4MjAsMHhlZiwweGVkLDB4OGEsMHgyNiwweGU4LDB4MzQsMHhmNiwweGM0LDB4MDEsMHg3NCwweDY3LDB4ODAsMHgyNiwweGU4Ci0sMHgzNCwweGZlLDB4ODAsMHgzZSwweGU4LDB4ZmYsMHgwMCwweDc0LDB4MzksMHg4MCwweDNlLDB4ZTgsMHhmZiwweDA0LDB4NzQsMHgzMgotLDB4ODAsMHgzZSwweGU4LDB4ZmYsMHgwMSwweDc1LDB4MjEsMHhlNSwweDgwLDB4YTksMHgwMCwweDA3LDB4NzQsMHgwYSwweGJhLDB4OWUKLSwweDAwLDB4YjgsMHgwMCwweDAyLDB4ZWYsMHhlOSwweGVmLDB4ZmYsMHhjNiwweDA2LDB4ZTgsMHhmZiwweDAzLDB4YmEsMHgwYywweDAxCi0sMHhiOCwweDA4LDB4MDgsMHhlZiwweGVkLDB4ZTksMHgyOCwweDAwLDB4ODAsMHgzZSwweGU4LDB4ZmYsMHgwMywweDc0LDB4MDYsMHhlOQotLDB4MWUsMHgwMCwweGU5LDB4MDAsMHgwMCwweGJhLDB4MTAsMHgwMSwweGI4LDB4MDIsMHgwMiwweGVmLDB4ZWQsMHhlNSwweDAwLDB4MGQKLSwweDE4LDB4MDAsMHhlNywweDAwLDB4ZTUsMHg4MiwweDBkLDB4MDIsMHgwMCwweGU3LDB4ODIsMHhjNiwweDA2LDB4ZTgsMHhmZiwweDA0Ci0sMHg4YSwweDI2LDB4ZTgsMHgzNCwweGY2LDB4YzQsMHgwMiwweDc0LDB4MGQsMHg4MCwweDI2LDB4ZTgsMHgzNCwweGZkLDB4ODAsMHgyNgotLDB4OTIsMHgzNiwweGJmLDB4ZTgsMHg0ZiwweDBiLDB4ZmEsMHhhMCwweGU4LDB4MzQsMHgwOCwweDA2LDB4OTQsMHgzNiwweGM2LDB4MDYKLSwweGU4LDB4MzQsMHgwMCwweGZiLDB4YzMsMHhlOCwweGU3LDB4MGYsMHhjNCwweDFlLDB4ODQsMHgzNiwweDJlLDB4ZmYsMHgxNiwweDAxCi0sMHgwNywweDI2LDB4ODgsMHg0NywweDAyLDB4ZTksMHg3ZSwweGZlLDB4ZTgsMHgyZCwweDEwLDB4YzQsMHgxZSwweDg0LDB4MzYsMHgyZQotLDB4ZmYsMHgxNiwweDAzLDB4MDcsMHgyNiwweDg4LDB4NDcsMHgwMiwweGU5LDB4NmIsMHhmZSwweDhlLDB4MDYsMHgyNiwweDAyLDB4MmUKLSwweGZmLDB4MTYsMHgwNywweDA3LDB4YzMsMHhjMywweDgzLDB4M2UsMHhmNSwweDM0LDB4MDAsMHg3NCwweDBmLDB4ZmYsMHgwZSwweGYzCi0sMHgzNCwweDc1LDB4MDksMHhlOCwweGM0LDB4ZmQsMHhjNywweDA2LDB4ZjUsMHgzNCwweDAwLDB4MDAsMHhmNiwweDA2LDB4OTMsMHgzNgotLDB4MjAsMHg3NCwweDMwLDB4YTEsMHhjMiwweDM0LDB4M2IsMHgwNiwweGU5LDB4MzQsMHhhMywweGU5LDB4MzQsMHg3NCwweDI0LDB4ODAKLSwweDNlLDB4OTUsMHgzNiwweDAwLDB4NzUsMHgxZCwweGY3LDB4MDYsMHhlNiwweDM0LDB4MjAsMHgwMCwweDc0LDB4MTIsMHhhOSwweDIwCi0sMHgwMCwweDc0LDB4MGQsMHg4MywweDI2LDB4YzIsMHgzNCwweGRmLDB4ODMsMHgyNiwweGU5LDB4MzQsMHhkZiwweGU5LDB4MDMsMHgwMAotLDB4ZTgsMHhkZCwweDA5LDB4YmEsMHgwNiwweDAxLDB4ZWQsMHg4YiwweGQwLDB4ODEsMHhlMiwweDAwLDB4YzAsMHhjMSwweGVhLDB4MGUKLSwweDAzLDB4MTYsMHg3NCwweDM0LDB4YzEsMHhlMCwweDAyLDB4MTEsMHgwNiwweDcyLDB4MzQsMHg3MywweDA0LDB4ZmYsMHgwNiwweDc0Ci0sMHgzNCwweGJhLDB4MDIsMHgwMSwweGVkLDB4OGIsMHhkMCwweDgxLDB4ZTIsMHgwMCwweGMwLDB4YzEsMHhlYSwweDBlLDB4MDMsMHgxNgotLDB4NzAsMHgzNCwweGMxLDB4ZTAsMHgwMiwweDExLDB4MDYsMHg2ZSwweDM0LDB4NzMsMHgwNCwweGZmLDB4MDYsMHg3MCwweDM0LDB4YzcKLSwweDA2LDB4YTYsMHgzMywweDA0LDB4MDAsMHhjNywweDA2LDB4YWEsMHgzMywweDAwLDB4MDAsMHg4ZCwweDA2LDB4YTAsMHgzMywweGMxCi0sMHhlOCwweDA0LDB4Y2QsMHgzOSwweGMzLDB4OTUsMHgwOSwweDk1LDB4MDksMHg2NSwweDA5LDB4NzgsMHgwOSwweDk1LDB4MDksMHg5NQotLDB4MDksMHg5MSwweDA3LDB4OTUsMHgwOSwweDk2LDB4MDksMHg4YiwweDA5LDB4OTUsMHgwOSwweDk1LDB4MDksMHg5NSwweDA5LDB4OTUKLSwweDA5LDB4OTUsMHgwOSwweDk1LDB4MDksMHg4YiwweGMwLDB4OGIsMHhjMCwweDhiLDB4YzAsMHg4YiwweGMwLDB4OGIsMHhjMCwweDkwCi0sMHhmNiwweDA2LDB4OTMsMHgzNiwweDIwLDB4NzUsMHgwMywweGU5LDB4Y2MsMHgwMCwweDhjLDB4YzAsMHg0MCwweDhlLDB4YzAsMHgyNgotLDB4OGIsMHgwZSwweDA2LDB4MDAsMHg4NiwweGU5LDB4MjYsMHg4OSwweDBlLDB4MDYsMHgwMCwweDhjLDB4YzIsMHhjMSwweGUyLDB4MDQKLSwweGJlLDB4MGUsMHgwMCwweDI2LDB4YTEsMHgwNCwweDAwLDB4ZDAsMHhlMCwweDI0LDB4YzAsMHg4YSwweGUwLDB4YzAsMHhlYywweDA0Ci0sMHgwYSwweGM0LDB4MjYsMHhhMiwweDA1LDB4MDAsMHgyNiwweGExLDB4MDgsMHgwMCwweGE5LDB4MDAsMHhjMCwweDc0LDB4MDMsMHhlOQotLDB4OWUsMHgwMCwweDI2LDB4ZjYsMHgwNiwweDEwLDB4MDAsMHg4MCwweDc1LDB4MDMsMHhlOSwweDBhLDB4MDAsMHgyNiwweGEwLDB4MTYKLSwweDAwLDB4MjQsMHgxZiwweDMyLDB4ZTQsMHgwMywweGYwLDB4ODAsMHgzZSwweGVjLDB4MzQsMHgwNiwweDcyLDB4NWMsMHg4MCwweDNlCi0sMHg5NSwweDM2LDB4MDAsMHg3NSwweDY2LDB4OGIsMHhmYSwweDMzLDB4ZGIsMHg4ZSwweGMzLDB4MjYsMHg4OSwweDFkLDB4MjYsMHg4OAotLDB4NWQsMHgwNCwweDUxLDB4NTAsMHhjNCwweDFlLDB4OGMsMHgzNiwweGI5LDB4MGYsMHgwMCwweDMzLDB4YzAsMHhlOCwweDIxLDB4MDkKLSwweDU4LDB4NTksMHgwYiwweGRiLDB4NzQsMHgzNCwweGZlLDB4MGUsMHhlNiwweDNhLDB4MjYsMHhjNiwweDA3LDB4ODEsMHgyNiwweGM2Ci0sMHg0NywweDAxLDB4MDAsMHgyNiwweGM2LDB4NDcsMHgwMiwweGZmLDB4MjYsMHhjNywweDQ3LDB4MDQsMHgwMCwweDAwLDB4MjYsMHg4OQotLDB4NGYsMHgwYSwweDg2LDB4ZjIsMHgyNiwweDg5LDB4NTcsMHgwNiwweDI2LDB4ODksMHg3NywweDA4LDB4MjYsMHhjNiwweDQ3LDB4MDkKLSwweDAwLDB4MjYsMHhjNiwweDQ3LDB4MGMsMHgwMiwweGU4LDB4OGMsMHgwOSwweGMzLDB4ZmYsMHgwNiwweGVjLDB4MzMsMHg4YywweGMwCi0sMHg0OCwweDhlLDB4YzAsMHhmYSwweGU4LDB4OTcsMHgxMCwweGZiLDB4ZTksMHhlYiwweGZmLDB4OGMsMHhjMCwweDQ4LDB4OGUsMHhjMAotLDB4ZmEsMHhlOCwweDhhLDB4MTAsMHhmYiwweGMzLDB4OGMsMHhjMCwweDhlLDB4YzAsMHhmYSwweGU4LDB4ODAsMHgxMCwweGZiLDB4YzMKLSwweDgwLDB4M2UsMHg5NSwweDM2LDB4MDAsMHg3NSwweDAzLDB4ZTksMHhjMiwweDAwLDB4YmYsMHgwOCwweDAwLDB4MjYsMHhmNiwweDA2Ci0sMHgxMCwweDAwLDB4ODAsMHg3NSwweDA1LDB4MDMsMHhmZSwweGU5LDB4MGMsMHgwMCwweDI2LDB4YTAsMHgxNiwweDAwLDB4MjQsMHgxZgotLDB4MzIsMHhlNCwweDAzLDB4ZjAsMHgwMywweGZlLDB4YTAsMHg5NSwweDM2LDB4M2MsMHgwMCwweDc1LDB4MDMsMHhlOSwweDljLDB4MDAKLSwweDNjLDB4MDEsMHg3NCwweDBiLDB4M2MsMHgwMiwweDc0LDB4MTQsMHgzYywweDAzLDB4NzQsMHgxZCwweGU5LDB4OGQsMHgwMCwweGM2Ci0sMHgwNiwweDk2LDB4MzYsMHgwMSwweGU4LDB4M2MsMHgwMSwweDcyLDB4MjcsMHhlOSwweDgwLDB4MDAsMHhjNiwweDA2LDB4OTYsMHgzNgotLDB4MDIsMHhlOCwweDgzLDB4MDAsMHg3MiwweDFhLDB4ZTksMHg3MywweDAwLDB4YzYsMHgwNiwweDk2LDB4MzYsMHgwMSwweGU4LDB4MjIKLSwweDAxLDB4NzIsMHgwZCwweGM2LDB4MDYsMHg5NiwweDM2LDB4MDIsMHhlOCwweDZjLDB4MDAsMHg3MiwweDAzLDB4ZTksMHg1YywweDAwCi0sMHg1MywweDA2LDB4NTAsMHhjNCwweDFlLDB4OGMsMHgzNiwweGI5LDB4MGIsMHgwMCwweDMzLDB4YzAsMHhlOCwweDQyLDB4MDgsMHg1OAotLDB4MjYsMHhjNiwweDA3LDB4ODIsMHgyNiwweGM2LDB4NDcsMHgwMiwweGZmLDB4OGQsMHgwNiwweGUwLDB4ZmUsMHg4NiwweGM0LDB4MjYKLSwweDg5LDB4NDcsMHgwNiwweGEwLDB4OTYsMHgzNiwweDI2LDB4ODgsMHg0NywweDA4LDB4ZTgsMHhjOCwweDA4LDB4MDcsMHg1YiwweDgzCi0sMHgyNiwweGFkLDB4MzYsMHhmZSwweGExLDB4YWQsMHgzNiwweGU3LDB4MDQsMHhiYSwweDEwLDB4MDEsMHhiOCwweDgwLDB4ODAsMHhlZgotLDB4ZWQsMHhiYSwweDEwLDB4MDEsMHhiOCwweDAyLDB4MDIsMHhlZiwweGVkLDB4NTIsMHhiYSwweGUwLDB4MDAsMHhiOCwweDQxLDB4MTAKLSwweGVmLDB4NWEsMHhiOCwweDljLDB4MDMsMHhjZCwweDM5LDB4YzYsMHgwNiwweDk1LDB4MzYsMHgwMCwweDhjLDB4YzAsMHg0OCwweDhlCi0sMHhjMCwweGZhLDB4ZTgsMHhhOSwweDBmLDB4ZmIsMHhjMywweDFlLDB4MDYsMHgxZiwweDA2LDB4MzMsMHhjMCwweDhlLDB4YzAsMHg4YgotLDB4ZjAsMHg4ZCwweDNlLDB4MjAsMHhmMywweDUxLDB4YjEsMHgwYSwweDI2LDB4ODMsMHg3ZCwweDBjLDB4MDEsMHg3NSwweDJhLDB4NTcKLSwweDI2LDB4ODMsMHg3ZCwweDBlLDB4MDAsMHg3NCwweDA2LDB4ZTgsMHgyZiwweDAwLDB4ZTksMHgwMywweDAwLDB4ZTgsMHg2NiwweDA3Ci0sMHg1ZiwweDczLDB4MTYsMHgzMywweGMwLDB4OGUsMHhkOCwweDI2LDB4OGIsMHg0ZCwweDEyLDB4OGQsMHg3NSwweDIwLDB4OGQsMHgzZQotLDB4ZTAsMHhmZSwweGYzLDB4YTQsMHg1OSwweDA3LDB4MWYsMHhmOSwweGMzLDB4ZmUsMHhjOSwweDc0LDB4MDcsMHg4MSwweGM3LDB4MjAKLSwweDAxLDB4ZTksMHhjNCwweGZmLDB4NTksMHgwNywweDFmLDB4ZjgsMHhjMywweDUxLDB4NTAsMHg1MywweDU2LDB4NTIsMHg1NywweDMzCi0sMHhkYiwweDI2LDB4OGEsMHg1ZCwweDBlLDB4MjYsMHg4YiwweDRkLDB4MTIsMHg4ZCwweDdkLDB4MjAsMHg1YSwweDg3LDB4ZDcsMHgyNgotLDB4OGEsMHg0NSwweDE0LDB4ODcsMHhkNywweDQyLDB4MzIsMHhmZiwweDgwLDB4ZmYsMHgwOCwweDc1LDB4MDgsMHhmZSwweGNiLDB4MjIKLSwweGRiLDB4NzUsMHhlYSwweDMzLDB4ZGIsMHgyMywweGRiLDB4NzQsMHgwNiwweGZlLDB4YzcsMHhkMCwweGM4LDB4NzMsMHgwYywweDUwCi0sMHgyNiwweDhhLDB4MDUsMHgzOCwweDA0LDB4NTgsMHg3NCwweDAzLDB4ZTksMHgwYSwweDAwLDB4NDksMHg0NiwweDQ3LDB4MjMsMHhjOQotLDB4NzQsMHgwYSwweGU5LDB4ZDMsMHhmZiwweDVhLDB4NWUsMHg1YiwweDU4LDB4NTksMHhmOCwweGMzLDB4NWEsMHg1ZSwweDViLDB4NTgKLSwweDU5LDB4ZjksMHhjMywweDFlLDB4MDYsMHgxZiwweDA2LDB4MzMsMHhjMCwweDhlLDB4YzAsMHg4NiwweGNkLDB4MmIsMHhjZSwweDhiCi0sMHhmNywweDhiLDB4YzEsMHgzMywweGM5LDB4ODAsMHgzYywweGZmLDB4NzQsMHgxNiwweDgwLDB4ZjksMHgwNiwweDczLDB4MDksMHgzMgotLDB4YzksMHg0NiwweDQ4LDB4NzQsMHgyZSwweGU5LDB4ZWQsMHhmZiwweDNkLDB4NjAsMHgwMCwweDczLDB4MGMsMHhlOSwweDIzLDB4MDAKLSwweGZlLDB4YzEsMHg0NiwweDQ4LDB4NzQsMHgxZCwweGU5LDB4ZGMsMHhmZiwweGI4LDB4MTAsMHgwMCwweDhkLDB4M2UsMHgxOCwweDM0Ci0sMHgzMiwweGVkLDB4YjEsMHgwNiwweGYzLDB4YTYsMHg3NCwweDAzLDB4ZTksMHgwOCwweDAwLDB4NDgsMHgyMywweGMwLDB4NzQsMHgwNwotLDB4ZTksMHhlOSwweGZmLDB4MDcsMHgxZiwweGY4LDB4YzMsMHg4ZCwweDM2LDB4MTgsMHgzNCwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4OGQKLSwweDNlLDB4ZTAsMHhmZSwweGI4LDB4MTAsMHgwMCwweGI5LDB4MDYsMHgwMCwweDU2LDB4ZjMsMHhhNCwweDVlLDB4NDgsMHgzZCwweDAwCi0sMHgwMCwweDc1LDB4ZjMsMHgwNywweDFmLDB4ZjksMHhjMywweGZmLDB4MDYsMHhlNCwweDMzLDB4YzYsMHgwNiwweGViLDB4MzQsMHgwMAotLDB4MjYsMHg4YiwweDQ1LDB4MDYsMHg4NiwweGUwLDB4YzEsMHhlOCwweDA0LDB4NDgsMHgwNiwweDhlLDB4YzAsMHhmZSwweDA2LDB4ZTYKLSwweDNhLDB4ZmEsMHhlOCwweDY5LDB4MGUsMHhmYiwweDA3LDB4YjAsMHhmZiwweGMzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHhiMCwweDAxLDB4YzMsMHhiMCwweDAwLDB4YzMsMHhmNiwweDA2LDB4OTMsMHgzNiwweDIwLDB4NzUsMHgwMywweGIwLDB4MDQsMHhjMwotLDB4OGIsMHgwZSwweDk3LDB4MzYsMHg4MSwweGUxLDB4ODAsMHgzMCwweDI2LDB4OGIsMHg0NywweDA0LDB4MjUsMHg3ZiwweGNmLDB4MGIKLSwweGMxLDB4YTMsMHg5NywweDM2LDB4YTMsMHhlNiwweDM0LDB4YjAsMHgwMCwweGMzLDB4ZjYsMHgwNiwweDkzLDB4MzYsMHgyMCwweDc0Ci0sMHgwMywweGIwLDB4MDMsMHhjMywweDI2LDB4OGIsMHg0NywweDA4LDB4YTMsMHg5NywweDM2LDB4YTMsMHhlNiwweDM0LDB4MjYsMHg4YQotLDB4NDcsMHgyMCwweGEyLDB4ZmQsMHgzNCwweDNjLDB4MDEsMHg3NSwweDA2LDB4YzcsMHgwNiwweGExLDB4MzYsMHgwMCwweDAwLDB4MjYKLSwweDhhLDB4NDcsMHgyMSwweGEyLDB4ZmUsMHgzNCwweDI2LDB4OGIsMHg0NywweDBhLDB4YTMsMHgxOCwweDM0LDB4YTMsMHg1OCwweDM0Ci0sMHgyNiwweDhiLDB4NDcsMHgwYywweGEzLDB4MWEsMHgzNCwweGEzLDB4NWEsMHgzNCwweDI2LDB4OGIsMHg0NywweDBlLDB4YTMsMHgxYwotLDB4MzQsMHhhMywweDVjLDB4MzQsMHhjNiwweDA2LDB4MmEsMHgzNCwweGMwLDB4MjYsMHg4YiwweDQ3LDB4MTQsMHgyNSwweDdmLDB4ZmYKLSwweDA5LDB4MDYsMHgyYywweDM0LDB4MjYsMHg4YiwweDQ3LDB4MTYsMHgyNSwweGZmLDB4ZmUsMHgyNSwweGZmLDB4ZmMsMHgwOSwweDA2Ci0sMHgyZSwweDM0LDB4YzYsMHgwNiwweDAwLDB4MzQsMHhjMCwweDI2LDB4OGIsMHg0NywweDEwLDB4YTMsMHgwMiwweDM0LDB4MjYsMHg4YgotLDB4NDcsMHgxMiwweGEzLDB4MDQsMHgzNCwweDA2LDB4NTMsMHhlOCwweDg0LDB4MGEsMHg1YiwweDA3LDB4M2QsMHgwMCwweDAwLDB4NzUKLSwweDA3LDB4ODAsMHgwZSwweDkyLDB4MzYsMHgwOCwweGIwLDB4ZmUsMHhjMywweGI5LDB4MDAsMHgwMSwweGExLDB4YWMsMHgzMywweDMzCi0sMHhkMiwweGY3LDB4ZjksMHhhMywweGFlLDB4MzMsMHg5MSwweDQ5LDB4MzMsMHhkMiwweGY3LDB4ZTksMHgwNSwweDAwLDB4M2IsMHhhMwotLDB4NDYsMHgzNCwweGJmLDB4MDAsMHgzYiwweDg5LDB4M2UsMHg0NCwweDM0LDB4YmEsMHg2OCwweDAwLDB4YjgsMHhlMCwweGUwLDB4ZWYKLSwweGExLDB4YWUsMHgzMywweGU3LDB4NjIsMHhhMSwweGFlLDB4MzMsMHhiYSwweDA4LDB4MDEsMHhlZiwweGExLDB4NDQsMHgzNCwweGU3Ci0sMHg2NCwweGExLDB4NDQsMHgzNCwweGJhLDB4MGEsMHgwMSwweGVmLDB4YjgsMHgwMCwweDAxLDB4MmQsMHgwNCwweDAwLDB4MGQsMHgwMAotLDB4MTAsMHhlNywweDkyLDB4YzMsMHgzZCwweDAwLDB4MDAsMHg3NCwweDBhLDB4MjYsMHg4OSwweDQ3LDB4MDcsMHhlOCwweDgzLDB4M2EKLSwweGIwLDB4MDcsMHhjMywweGExLDB4YWUsMHgzMywweDI2LDB4ODksMHg0NywweDJiLDB4YTEsMHg0NCwweDM0LDB4MjYsMHg4OSwweDQ3Ci0sMHgyZCwweGExLDB4NDYsMHgzNCwweDI2LDB4ODksMHg0NywweDJmLDB4ODAsMHgwZSwweDkzLDB4MzYsMHgyMCwweGExLDB4ODgsMHgzNgotLDB4ODYsMHhlMCwweDI2LDB4ODksMHg0NywweDA4LDB4YTEsMHg4NCwweDM2LDB4ODYsMHhlMCwweDI2LDB4ODksMHg0NywweDBhLDB4YTEKLSwweDgwLDB4MzYsMHg4NiwweGUwLDB4MjYsMHg4OSwweDQ3LDB4MGMsMHhiOCwweDYwLDB4ZmUsMHg4NiwweGUwLDB4MjYsMHg4OSwweDQ3Ci0sMHgwZSwweGEwLDB4YTEsMHgzNiwweDI2LDB4ODgsMHg0NywweDEwLDB4OGIsMHgzNiwweDg4LDB4MzYsMHgyNiwweGM2LDB4NDQsMHgwMgotLDB4ZmYsMHhlNSwweDllLDB4YTksMHgwMCwweDA4LDB4NzQsMHgwYywweGJhLDB4ODQsMHgwMCwweGVkLDB4MGQsMHgwOCwweDAwLDB4ZWYKLSwweGJhLDB4OGUsMHgwMCwweGVmLDB4ZTUsMHgwMiwweDI1LDB4ZjksMHhmZiwweGU3LDB4MDIsMHhiYSwweDEwLDB4MDEsMHhiOCwweDAyCi0sMHgwMiwweGVmLDB4ZWQsMHhiMCwweDAwLDB4YzMsMHhmNiwweDA2LDB4OTMsMHgzNiwweDIwLDB4NzUsMHgwMywweGIwLDB4MDEsMHhjMwotLDB4ODAsMHgyNiwweDkzLDB4MzYsMHg5ZiwweGU4LDB4OGQsMHgwYSwweDgwLDB4MGUsMHg5MiwweDM2LDB4MDgsMHhiMCwweGZlLDB4YzMKLSwweGIwLDB4MDAsMHhjMywweGY2LDB4MDYsMHg5MywweDM2LDB4MjAsMHg3NSwweDAzLDB4YjAsMHgwNCwweGMzLDB4YzYsMHgwNiwweDJhCi0sMHgzNCwweGMwLDB4MjYsMHg4YiwweDQ3LDB4MDYsMHgyNSwweDdmLDB4ZmYsMHhhMywweDJjLDB4MzQsMHgyNiwweDhiLDB4NDcsMHgwOAotLDB4MjUsMHhmZiwweGZlLDB4MjUsMHhmZiwweGZjLDB4YTMsMHgyZSwweDM0LDB4Y2QsMHg1MiwweGIwLDB4MDAsMHhjMywweGY2LDB4MDYKLSwweDkzLDB4MzYsMHgyMCwweDc1LDB4MDMsMHhiMCwweDA0LDB4YzMsMHhjNiwweDA2LDB4MDAsMHgzNCwweGMwLDB4MjYsMHg4YiwweDQ3Ci0sMHgwNiwweGEzLDB4MDIsMHgzNCwweDI2LDB4OGIsMHg0NywweDA4LDB4YTMsMHgwNCwweDM0LDB4Y2QsMHg1MiwweGIwLDB4MDAsMHhjMwotLDB4ZjYsMHgwNiwweDkzLDB4MzYsMHgyMCwweDc1LDB4MDMsMHhiMCwweDA0LDB4YzMsMHg1NywweDhkLDB4N2YsMHgwNiwweDUxLDB4YjkKLSwweDA3LDB4MDAsMHgzMywweGMwLDB4ZjMsMHhhYiwweDU5LDB4OGQsMHg3ZiwweDA2LDB4YTEsMHg3YSwweDM0LDB4MDMsMHgwNiwweDM5Ci0sMHgzNywweDI2LDB4ODgsMHgwNSwweGExLDB4OTUsMHgzNywweDI2LDB4ODgsMHg0NSwweDAyLDB4YTEsMHg4MCwweDM0LDB4MDMsMHgwNgotLDB4NzYsMHgzNCwweDI2LDB4ODgsMHg0NSwweDA3LDB4YTEsMHhjNiwweDM0LDB4MjYsMHg4OCwweDQ1LDB4MDksMHhhMSwweGQ4LDB4MzMKLSwweDI2LDB4ODgsMHg0NSwweDBhLDB4MzMsMHhjMCwweGEzLDB4N2EsMHgzNCwweGEzLDB4MzksMHgzNywweGEzLDB4OTUsMHgzNywweGEzCi0sMHg4MCwweDM0LDB4YTMsMHg3NiwweDM0LDB4YTMsMHhjNiwweDM0LDB4YTMsMHhkOCwweDMzLDB4NWYsMHhiMCwweDAwLDB4YzMsMHhmNgotLDB4MDYsMHg5MywweDM2LDB4MjAsMHg3NSwweDAzLDB4YjAsMHgwNCwweGMzLDB4MjYsMHg4YiwweDRmLDB4MDQsMHg4MywweGY5LDB4MDYKLSwweDc0LDB4MTIsMHg4MywweGY5LDB4MDQsMHg3NCwweDBkLDB4ODMsMHhmOSwweDAwLDB4NzQsMHgwOCwweDgzLDB4ZjksMHgwMiwweDc0Ci0sMHgwMywweGIwLDB4MDEsMHhjMywweDg5LDB4MGUsMHhlOCwweDNhLDB4ODMsMHgyNiwweGFiLDB4MzYsMHhmOSwweDA5LDB4MGUsMHhhYgotLDB4MzYsMHhlNSwweDAyLDB4MjUsMHhmOSwweGZmLDB4MGIsMHhjMSwweGU3LDB4MDIsMHhiMCwweDAwLDB4YzMsMHhmNiwweDA2LDB4OTMKLSwweDM2LDB4MjAsMHg3NSwweDAzLDB4YjAsMHgwNCwweGMzLDB4MjYsMHg4YiwweDRmLDB4MDQsMHg4MCwweGY5LDB4ZmYsMHg3NCwweDA4Ci0sMHg4MCwweGY5LDB4MDAsMHg3NCwweDEwLDB4YjAsMHgwMSwweGMzLDB4ODMsMHgwZSwweGFkLDB4MzYsMHgwMiwweGExLDB4YWQsMHgzNgotLDB4ZTcsMHgwNCwweGU5LDB4MGEsMHgwMCwweDgzLDB4MjYsMHhhZCwweDM2LDB4ZmQsMHhhMSwweGFkLDB4MzYsMHhlNywweDA0LDB4YjAKLSwweDAwLDB4YzMsMHhmNiwweDA2LDB4OTMsMHgzNiwweDIwLDB4NzUsMHgwMywweGIwLDB4MDQsMHhjMywweGU4LDB4ZDUsMHgwNCwweGIwCi0sMHgwMCwweGMzLDB4ZjYsMHgwNiwweDkzLDB4MzYsMHg4MCwweDc1LDB4MDMsMHhiMCwweDAxLDB4YzMsMHgyNiwweDgzLDB4N2YsMHgwNgotLDB4MDUsMHg3NSwweDAzLDB4ZTksMHg5ZCwweDAwLDB4MjYsMHg4YiwweDU3LDB4MDQsMHgyNiwweDhiLDB4NDcsMHgwOCwweDI2LDB4ODEKLSwweDdmLDB4MDYsMHgwMCwweDgwLDB4NzUsMHgwOCwweGVkLDB4MjYsMHg4OSwweDQ3LDB4MGEsMHhlOSwweDlkLDB4MDAsMHgyNiwweDgzCi0sMHg3ZiwweDA2LDB4MDEsMHg3NSwweDA0LDB4ZWYsMHhlOSwweDkyLDB4MDAsMHgyNiwweDgxLDB4N2YsMHgwNiwweDAxLDB4ODAsMHg3NQotLDB4MDksMHhlZiwweGVkLDB4MjYsMHg4OSwweDQ3LDB4MGEsMHhlOSwweDgxLDB4MDAsMHgyNiwweDgzLDB4N2YsMHgwNiwweDAyLDB4NzUKLSwweDA3LDB4MjYsMHgyMSwweDQ3LDB4MDQsMHhlOSwweDczLDB4MDAsMHgyNiwweDgxLDB4N2YsMHgwNiwweDAyLDB4ODAsMHg3NSwweDBjCi0sMHgyNiwweDIxLDB4NDcsMHgwNCwweGVkLDB4MjYsMHg4OSwweDQ3LDB4MGEsMHhlOSwweDVmLDB4MDAsMHgyNiwweDgzLDB4N2YsMHgwNgotLDB4MDMsMHg3NSwweDA3LDB4MjYsMHgwOSwweDQ3LDB4MDQsMHhlOSwweDUxLDB4MDAsMHgyNiwweDgxLDB4N2YsMHgwNiwweDAzLDB4ODAKLSwweDc1LDB4MGMsMHgyNiwweDA5LDB4NDcsMHgwNCwweGVkLDB4MjYsMHg4OSwweDQ3LDB4MGEsMHhlOSwweDNkLDB4MDAsMHgyNiwweDgzCi0sMHg3ZiwweDA2LDB4MDQsMHg3NSwweDA3LDB4MjYsMHgzMSwweDQ3LDB4MDQsMHhlOSwweDJmLDB4MDAsMHgyNiwweDgxLDB4N2YsMHgwNgotLDB4MDQsMHg4MCwweDc1LDB4MGMsMHgyNiwweDMxLDB4NDcsMHgwNCwweGVkLDB4MjYsMHg4OSwweDQ3LDB4MGEsMHhlOSwweDFiLDB4MDAKLSwweGIwLDB4MDEsMHhjMywweGZhLDB4NTMsMHgyNiwweDhiLDB4NGYsMHgwOCwweDBiLDB4YzksMHg3NCwweDBjLDB4OGQsMHgxZSwweGUwCi0sMHhmZSwweGU4LDB4NTIsMHhmZiwweDgzLDB4YzMsMHgwOCwweGUyLDB4ZjgsMHg1YiwweGZiLDB4YjAsMHgwMCwweGMzLDB4ZjYsMHgwNgotLDB4OTMsMHgzNiwweDgwLDB4NzUsMHgwYSwweGY2LDB4MDYsMHg5MywweDM2LDB4MjAsMHg3NSwweDAzLDB4YjAsMHgwMSwweGMzLDB4OGQKLSwweDNlLDB4ZTAsMHhmZSwweGU1LDB4MDAsMHgyNiwweDg5LDB4MDUsMHhlNSwweDAyLDB4MjYsMHg4OSwweDQ1LDB4MDIsMHhhMSwweGFkCi0sMHgzNiwweDI2LDB4ODksMHg0NSwweDA0LDB4ZTUsMHgwNiwweDI2LDB4ODksMHg0NSwweDA2LDB4ZTUsMHgwOCwweDI2LDB4ODksMHg0NQotLDB4MDgsMHhlNSwweDBhLDB4MjYsMHg4OSwweDQ1LDB4MGEsMHhlNSwweDBlLDB4MjYsMHg4OSwweDQ1LDB4MGMsMHhlNSwweDQ4LDB4MjYKLSwweDg5LDB4NDUsMHgwZSwweGU1LDB4NGEsMHgyNiwweDg5LDB4NDUsMHgxMCwweGU1LDB4NGMsMHgyNiwweDg5LDB4NDUsMHgxMiwweGExCi0sMHhiNywweDM2LDB4MjYsMHg4OSwweDQ1LDB4MTQsMHhlNSwweDUwLDB4MjYsMHg4OSwweDQ1LDB4MTYsMHhlNSwweDUyLDB4MjYsMHg4OQotLDB4NDUsMHgxOCwweGU1LDB4NTQsMHgyNiwweDg5LDB4NDUsMHgxYSwweGU1LDB4NTYsMHgyNiwweDg5LDB4NDUsMHgxYywweGU1LDB4NTgKLSwweDI2LDB4ODksMHg0NSwweDFlLDB4ZTUsMHg2MiwweDI2LDB4ODksMHg0NSwweDIwLDB4ZTUsMHg2NCwweDI2LDB4ODksMHg0NSwweDIyCi0sMHhlNSwweDY2LDB4MjYsMHg4OSwweDQ1LDB4MjQsMHhlNSwweDY4LDB4MjYsMHg4OSwweDQ1LDB4MjYsMHhlNSwweDZhLDB4MjYsMHg4OQotLDB4NDUsMHgyOCwweGU1LDB4NmMsMHgyNiwweDg5LDB4NDUsMHgyYSwweGU1LDB4NzAsMHgyNiwweDg5LDB4NDUsMHgyYywweGU1LDB4NzIKLSwweDI2LDB4ODksMHg0NSwweDJlLDB4ZTUsMHg3NCwweDI2LDB4ODksMHg0NSwweDMwLDB4ZTUsMHg3NiwweDI2LDB4ODksMHg0NSwweDMyCi0sMHhlNSwweDdjLDB4MjYsMHg4OSwweDQ1LDB4MzQsMHhlNSwweDdlLDB4MjYsMHg4OSwweDQ1LDB4MzYsMHhlNSwweDgwLDB4MjYsMHg4OQotLDB4NDUsMHgzOCwweGU1LDB4ODIsMHgyNiwweDg5LDB4NDUsMHgzYSwweGU1LDB4ODYsMHgyNiwweDg5LDB4NDUsMHgzYywweGU1LDB4ODgKLSwweDI2LDB4ODksMHg0NSwweDNlLDB4ZTUsMHg5YSwweDI2LDB4ODksMHg0NSwweDQwLDB4ZTUsMHg5ZSwweDI2LDB4ODksMHg0NSwweDQyCi0sMHhlNSwweGNjLDB4MjYsMHg4OSwweDQ1LDB4NDQsMHhlNSwweGNlLDB4MjYsMHg4OSwweDQ1LDB4NDYsMHhlNSwweGQwLDB4MjYsMHg4OQotLDB4NDUsMHg0OCwweGU1LDB4ZDIsMHgyNiwweDg5LDB4NDUsMHg0YSwweGJhLDB4MDAsMHgwMSwweGVkLDB4MTEsMHgwNiwweDY2LDB4MzQKLSwweDczLDB4MDQsMHhmZiwweDA2LDB4NjgsMHgzNCwweDI2LDB4ODksMHg0NSwweDRjLDB4YmEsMHgwMiwweDAxLDB4ZWQsMHhjMSwweGUwCi0sMHgwMiwweDExLDB4MDYsMHg2ZSwweDM0LDB4NzMsMHgwNCwweGZmLDB4MDYsMHg3MCwweDM0LDB4MjYsMHg4OSwweDQ1LDB4NGUsMHhiYQotLDB4MDQsMHgwMSwweGVkLDB4MTEsMHgwNiwweDZhLDB4MzQsMHg3MywweDA0LDB4ZmYsMHgwNiwweDZjLDB4MzQsMHgyNiwweDg5LDB4NDUKLSwweDUwLDB4YmEsMHgwNiwweDAxLDB4ZWQsMHhjMSwweGUwLDB4MDIsMHgxMSwweDA2LDB4NzIsMHgzNCwweDczLDB4MDQsMHhmZiwweDA2Ci0sMHg3NCwweDM0LDB4MjYsMHg4OSwweDQ1LDB4NTIsMHhiYSwweDA4LDB4MDEsMHhlZCwweDI2LDB4ODksMHg0NSwweDU0LDB4YmEsMHgwYQotLDB4MDEsMHhlZCwweDI2LDB4ODksMHg0NSwweDU2LDB4YmEsMHgwYywweDAxLDB4ZWQsMHgyNiwweDg5LDB4NDUsMHg1OCwweGJhLDB4MGUKLSwweDAxLDB4ZWQsMHgwMSwweDA2LDB4N2EsMHgzNCwweDI2LDB4ODksMHg0NSwweDVlLDB4YmEsMHgxMCwweDAxLDB4ZWQsMHgyNiwweDg5Ci0sMHg0NSwweDVjLDB4YjAsMHgwMCwweGMzLDB4ZjYsMHgwNiwweDkzLDB4MzYsMHg4MCwweDc0LDB4MDcsMHhmNiwweDA2LDB4OTMsMHgzNgotLDB4MjAsMHg3NSwweDAzLDB4YjAsMHgwMSwweGMzLDB4MjYsMHg4MCwweDdmLDB4MDYsMHgwMCwweDc1LDB4MzAsMHg4MCwweDNlLDB4OTUKLSwweDM2LDB4MDAsMHg3NCwweDUyLDB4YzYsMHgwNiwweDk1LDB4MzYsMHgwMCwweDgzLDB4MjYsMHhhZCwweDM2LDB4ZmUsMHhhMSwweGFkCi0sMHgzNiwweGU3LDB4MDQsMHhiYSwweDEwLDB4MDEsMHhiOCwweDgwLDB4ODAsMHhlZiwweGVkLDB4YmEsMHgxMCwweDAxLDB4YjgsMHgwMgotLDB4MDIsMHhlZiwweGVkLDB4YmEsMHhlMCwweDAwLDB4YjgsMHgwMCwweDEwLDB4ZWYsMHhiMCwweDAwLDB4YzMsMHgyNiwweDhiLDB4NDcKLSwweDA0LDB4M2QsMHgwMCwweDAwLDB4NzQsMHgyMCwweDNkLDB4MDMsMHgwMCwweDc3LDB4MWIsMHhiYSwweDEwLDB4MDEsMHhiOCwweDAyCi0sMHgwMCwweGVmLDB4YmEsMHhlMCwweDAwLDB4YjgsMHgwMSwweDEwLDB4ZWYsMHg4MywweDBlLDB4YWQsMHgzNiwweDAxLDB4YTEsMHhhZAotLDB4MzYsMHhlNywweDA0LDB4YjAsMHgwMCwweGMzLDB4YjAsMHgwNiwweGMzLDB4ZjYsMHgwNiwweDkzLDB4MzYsMHg4MCwweDc1LDB4MDMKLSwweGIwLDB4MDEsMHhjMywweDI2LDB4ODMsMHg3ZiwweDA0LDB4MDEsMHg3NCwweDBhLDB4MjYsMHg4MywweDdmLDB4MDQsMHgwMiwweDc0Ci0sMHgxOSwweGIwLDB4MDYsMHhjMywweDI2LDB4ODMsMHg3ZiwweDA2LDB4MGMsMHg3NywweGY2LDB4MjYsMHg4MywweDdmLDB4MGEsMHg2MAotLDB4NzcsMHhlZiwweGU4LDB4MTAsMHgwMCwweDcyLDB4MGIsMHhiMCwweDQ2LDB4YzMsMHhlOCwweDRlLDB4MDAsMHg3MiwweDAzLDB4YjAKLSwweDQ2LDB4YzMsMHhiMCwweDAwLDB4YzMsMHg1MSwweGIxLDB4MGEsMHg4YiwweDNlLDB4MjAsMHhmMywweDI2LDB4ODMsMHg3ZCwweDBjCi0sMHgwMiwweDc1LDB4MDMsMHhlOSwweDBlLDB4MDAsMHhmZSwweGM5LDB4NzQsMHgwNywweDgxLDB4YzcsMHgyMCwweDAxLDB4ZTksMHhlYgotLDB4ZmYsMHg1OSwweGY4LDB4YzMsMHg1NywweDhkLDB4N2QsMHgwZSwweDhkLDB4NzcsMHgwNiwweGI5LDB4MTIsMHgwMCwweGYzLDB4YTQKLSwweDhkLDB4N2QsMHgyMCwweDhkLDB4MzYsMHhlMCwweGZlLDB4MjYsMHg4YiwweDRkLDB4MTIsMHhmMywweGE0LDB4ZmYsMHgwNiwweDAxCi0sMHgzNSwweDVmLDB4MjYsMHhjNywweDQ1LDB4MGMsMHgwMSwweDAwLDB4NTksMHhmOSwweGMzLDB4NTEsMHhiMSwweDBhLDB4OGQsMHgzZQotLDB4MjAsMHhmMywweDhkLDB4MzYsMHhlMCwweGZlLDB4MjYsMHg4MywweDdkLDB4MGMsMHgwMSwweDc1LDB4MWIsMHg1NywweGU4LDB4MjUKLSwweDAwLDB4NWYsMHg3MywweDE0LDB4MzMsMHhjMCwweGI5LDB4MjAsMHgwMSwweGYzLDB4YWEsMHgyNiwweGM3LDB4NDUsMHgwYywweDAyCi0sMHgwMCwweGZmLDB4MGUsMHgwMSwweDM1LDB4NTksMHhmOSwweGMzLDB4ZmUsMHhjOSwweDc0LDB4MDcsMHg4MSwweGM3LDB4MjAsMHgwMQotLDB4ZTksMHhkMywweGZmLDB4NTksMHhmOCwweGMzLDB4NTEsMHgyNiwweDhiLDB4NGQsMHgxMiwweDhkLDB4N2QsMHgyMCwweGYzLDB4YTYKLSwweDc0LDB4MDMsMHg1OSwweGY4LDB4YzMsMHg1OSwweGY5LDB4YzMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHg4MCwweDNlLDB4ZWMsMHgzNCwweDA2LDB4NzIsMHgzMywweGZmLDB4MDYsMHhmMCwweDMzLDB4NTAsMHhjNCwweDFlLDB4OGMsMHgzNgotLDB4YjksMHgwZiwweDAwLDB4MzMsMHhjMCwweGU4LDB4MjksMHgwMCwweDU4LDB4ODEsMHgyNiwweGMyLDB4MzQsMHhkZiwweDdmLDB4ODEKLSwweDI2LDB4ZTksMHgzNCwweGRmLDB4N2YsMHgwYiwweGRiLDB4NzQsMHgxMSwweDI2LDB4YzYsMHgwNywweDg0LDB4MjYsMHhjNiwweDQ3Ci0sMHgwMiwweGZmLDB4MjYsMHg4OSwweDQ3LDB4MDYsMHhlOCwweGFjLDB4MDAsMHhjMywweGZmLDB4MDYsMHhlYSwweDMzLDB4ZTksMHhmNQotLDB4ZmYsMHg1NywweDI2LDB4OGIsMHgzZiwweDAzLDB4ZjksMHgyNiwweDNiLDB4N2YsMHgwMiwweDc0LDB4MTYsMHgyNiwweDNiLDB4N2YKLSwweDA0LDB4N2MsMHgyYSwweDNkLDB4MDAsMHgwMCwweDc1LDB4MTMsMHg4ZCwweDdmLDB4MDgsMHgwMywweGY5LDB4MjYsMHgzYiwweDdmCi0sMHgwMiwweDdjLDB4MTQsMHhmZiwweDA2LDB4ZGUsMHgzMywweDMzLDB4ZGIsMHg1ZiwweGMzLDB4MjYsMHg4YiwweDdmLDB4MDIsMHgyNgotLDB4ODksMHgzZiwweDAzLDB4ZjksMHhlOSwweDA2LDB4MDAsMHgyNiwweDg5LDB4M2YsMHgyNiwweDI5LDB4MGYsMHgyNiwweGM3LDB4MDUKLSwweGZmLDB4ZmYsMHgyNiwweDg3LDB4M2YsMHgyNiwweDg5LDB4MGQsMHg4ZCwweDVkLDB4MDIsMHg1MCwweDhiLDB4ZmIsMHg4MywweGU5Ci0sMHgwMiwweDMzLDB4YzAsMHhmMywweGFhLDB4NTgsMHhmZSwweDBlLDB4ZWMsMHgzNCwweDVmLDB4YzMsMHg4YiwweDdjLDB4MDIsMHgzYgotLDB4M2MsMHg3NCwweDJmLDB4ODMsMHgzZCwweGZmLDB4NzUsMHgwYiwweDhkLDB4N2MsMHgwOCwweDg5LDB4N2MsMHgwMiwweDgzLDB4M2QKLSwweGZmLDB4NzQsMHgxZSwweDhhLDB4NDUsMHgwMiwweDNjLDB4ODEsMHg3NSwweDBjLDB4ODAsMHgzZSwweGViLDB4MzQsMHgwMCwweDc0Ci0sMHgwNSwweDMzLDB4YzAsMHhlOSwweDBiLDB4MDAsMHg4YiwweDBkLDB4MDEsMHg0YywweDAyLDB4OGQsMHg3NSwweDAyLDB4ODMsMHhlOQotLDB4MDIsMHhjMywweDgwLDB4M2UsMHhlYywweDM0LDB4MDYsMHg3MiwweDA1LDB4MzMsMHhjMCwweGU5LDB4ZjMsMHhmZiwweGZmLDB4MDYKLSwweGVlLDB4MzMsMHhlOSwweGJlLDB4ZmYsMHhmNiwweDA2LDB4OTIsMHgzNiwweDQwLDB4NzQsMHgwMSwweGMzLDB4NTcsMHg1NiwweDUxCi0sMHg1MiwweDhiLDB4MzYsMHg4YywweDM2LDB4ZTgsMHhhNCwweGZmLDB4NzUsMHgwMywweGU5LDB4MWEsMHgwMCwweGU5LDB4MWMsMHgwMAotLDB4ZmUsMHgwNiwweGVjLDB4MzQsMHhjNCwweDNlLDB4ODAsMHgzNiwweGYzLDB4YTQsMHg4MCwweDBlLDB4OTIsMHgzNiwweDQwLDB4YmEKLSwweDBjLDB4MDEsMHhiOCwweDgwLDB4ODAsMHhlZiwweGVkLDB4NWEsMHg1OSwweDVlLDB4NWYsMHhjMywweGZmLDB4MDYsMHhlMCwweDMzCi0sMHg4MCwweDNjLDB4ODEsMHg3NSwweDBjLDB4ZmYsMHgwNiwweGUyLDB4MzMsMHhjNiwweDA2LDB4ZWIsMHgzNCwweDAxLDB4ZTksMHhjZgotLDB4ZmYsMHg4MCwweDNjLDB4ODQsMHg3NSwweDA3LDB4ZmYsMHgwNiwweGU2LDB4MzMsMHhlOSwweGMzLDB4ZmYsMHhmZiwweDA2LDB4ZTgKLSwweDMzLDB4ZTksMHhiYywweGZmLDB4OGQsMHgzZSwweGUwLDB4ZmUsMHhhMSwweDcyLDB4MzQsMHhjNywweDA2LDB4NzIsMHgzNCwweDAwCi0sMHgwMCwweDg5LDB4MDUsMHhhMSwweDc0LDB4MzQsMHhjNywweDA2LDB4NzQsMHgzNCwweDAwLDB4MDAsMHg4OSwweDQ1LDB4MDIsMHhiYQotLDB4MDQsMHgwMSwweGVkLDB4ODksMHg0NSwweDA0LDB4YzcsMHg0NSwweDA2LDB4MDAsMHgwMCwweGExLDB4NmUsMHgzNCwweGM3LDB4MDYKLSwweDZlLDB4MzQsMHgwMCwweDAwLDB4ODksMHg0NSwweDA4LDB4YTEsMHg3MCwweDM0LDB4YzcsMHgwNiwweDcwLDB4MzQsMHgwMCwweDAwCi0sMHg4OSwweDQ1LDB4MGEsMHhiYSwweDAwLDB4MDEsMHhlZCwweDg5LDB4NDUsMHgwYywweGM3LDB4NDUsMHgwZSwweDAwLDB4MDAsMHgzMgotLDB4ZTQsMHhiYSwweDBlLDB4MDEsMHhlYywweDg5LDB4NDUsMHgxMCwweGExLDB4N2UsMHgzNCwweGM3LDB4MDYsMHg3ZSwweDM0LDB4MDAKLSwweDAwLDB4ODksMHg0NSwweDEyLDB4YTEsMHg4YywweDM0LDB4YzcsMHgwNiwweDhjLDB4MzQsMHgwMCwweDAwLDB4ODksMHg0NSwweDE0Ci0sMHhhMSwweDhhLDB4MzQsMHhjNywweDA2LDB4OGEsMHgzNCwweDAwLDB4MDAsMHg4OSwweDQ1LDB4MTYsMHhhMSwweDdjLDB4MzQsMHhjNwotLDB4MDYsMHg3YywweDM0LDB4MDAsMHgwMCwweDg5LDB4NDUsMHgxOCwweGExLDB4ODgsMHgzNCwweGM3LDB4MDYsMHg4OCwweDM0LDB4MDAKLSwweDAwLDB4ODksMHg0NSwweDFhLDB4YTEsMHhjYSwweDMzLDB4YzcsMHgwNiwweGNhLDB4MzMsMHgwMCwweDAwLDB4ODksMHg0NSwweDFjCi0sMHhhMSwweDc4LDB4MzQsMHhjNywweDA2LDB4NzgsMHgzNCwweDAwLDB4MDAsMHg4OSwweDQ1LDB4MWUsMHhhMSwweGM2LDB4MzQsMHhjNwotLDB4MDYsMHhjNiwweDM0LDB4MDAsMHgwMCwweDg5LDB4NDUsMHgyMCwweGMzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweGZhLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHg4ZSwweGMwLDB4YjgsMHhhMCwweDAxLDB4YzEsMHhlOCwweDA0LDB4OGUsMHhkMCwweDhkCi0sMHgyNiwweDgwLDB4MDAsMHhlOCwweDAwLDB4MDEsMHhlOCwweDEwLDB4ZWIsMHg4YiwweDFlLDB4ZjcsMHgzNCwweDhiLDB4MTYsMHhmOQotLDB4MzQsMHg4YiwweDM2LDB4ZmYsMHgzNCwweDMzLDB4YzAsMHhiOSwweGVmLDB4ZmYsMHg4ZCwweDNlLDB4MTQsMHgwMCwweDJiLDB4Y2YKLSwweDJiLDB4Y2UsMHhkMSwweGU5LDB4ZjMsMHhhYiwweDg5LDB4MWUsMHhmNywweDM0LDB4ODksMHgxNiwweGY5LDB4MzQsMHg4MywweGZlCi0sMHgwMCwweDc0LDB4MGMsMHhiOSwweGVmLDB4ZmYsMHhiZiwweDgwLDB4ZmUsMHgyYiwweGNmLDB4ZDEsMHhlOSwweGYzLDB4YWIsMHhiOQotLDB4ZmYsMHhmZiwweDgxLDB4ZTksMHgwMCwweDNiLDB4ODMsMHhmZSwweDAwLDB4NzQsMHgwMywweGU5LDB4MWIsMHgwMCwweDUxLDB4MWUKLSwweGI4LDB4MDAsMHhlMCwweDhlLDB4ZDgsMHgzMywweGY2LDB4OGQsMHgzZSwweDAwLDB4ZDgsMHhiOSwweDAwLDB4MGMsMHhmMywweGE1Ci0sMHgxZiwweDU5LDB4YmUsMHhmZiwweGZmLDB4ODEsMHhlZSwweDAwLDB4ZDgsMHgyYiwweGNlLDB4ODEsMHhlMSwweDAwLDB4ZmYsMHg4OQotLDB4MGUsMHhhYywweDMzLDB4OGQsMHgwNiwweDIwLDB4MDIsMHhjMSwweGU4LDB4MDQsMHhhMywweDMyLDB4MzQsMHg4ZSwweGQwLDB4MzYKLSwweGM3LDB4MDYsMHgxZSwweDAwLDB4ODAsMHgxOCwweDM2LDB4YzcsMHgwNiwweDIyLDB4MDAsMHhmZiwweDdmLDB4MzYsMHhjNywweDA2Ci0sMHgwYSwweDAwLDB4ZmYsMHhmZiwweDM2LDB4YzcsMHgwNiwweDFjLDB4MDAsMHg4MCwweDAwLDB4OGQsMHgwNiwweGEwLDB4MDIsMHhjMQotLDB4ZTgsMHgwNCwweGEzLDB4MzAsMHgzNCwweDhlLDB4ZDAsMHgzNiwweGM3LDB4MDYsMHgxZSwweDAwLDB4NTAsMHgyOCwweDM2LDB4YzcKLSwweDA2LDB4MGEsMHgwMCwweGZmLDB4ZmYsMHgzNiwweGM3LDB4MDYsMHgxYywweDAwLDB4ODAsMHgwMCwweGI4LDB4YTAsMHgwMSwweGMxCi0sMHhlOCwweDA0LDB4YTMsMHgzNCwweDM0LDB4YTMsMHhmMiwweDMzLDB4OGUsMHhkMCwweDhkLDB4MjYsMHg4MCwweDAwLDB4YjgsMHgwMAotLDB4OTAsMHhlNywweDAyLDB4OGQsMHgzZSwweDcwLDB4MDEsMHg4YiwweGM3LDB4YzEsMHhlOCwweDA0LDB4YjksMHgwMywweDAwLDB4ODkKLSwweDQ1LDB4MGUsMHg4OSwweDQ1LDB4MDIsMHhjNywweDA1LDB4ZmYsMHhmZiwweDgzLDB4YzcsMHgxMCwweDA1LDB4MDEsMHgwMCwweGUyCi0sMHhlZSwweGU4LDB4NWIsMHgwMSwweGU1LDB4Y2UsMHhhMywweGI1LDB4MzYsMHhlOCwweDIxLDB4MDAsMHhlOCwweDQ1LDB4MDEsMHhhMQotLDB4MzIsMHgzNCwweDhjLDB4Y2IsMHhjZCwweDM3LDB4MGUsMHg1OCwweGE5LDB4MDAsMHhmMCwweDc0LDB4MDcsMHgzMywweGY2LDB4ODkKLSwweDM2LDB4ZmYsMHgzNCwweGMzLDB4OGQsMHgzNiwweDMwLDB4NjEsMHg4OSwweDM2LDB4ZmYsMHgzNCwweGMzLDB4MzMsMHhjMCwweDhiCi0sMHhkMCwweDhiLDB4ZjIsMHhiOSwweDY4LDB4MDAsMHgyZSwweDgwLDB4YmMsMHhhYywweDE3LDB4ODAsMHg3NSwweDAxLDB4ZWYsMHg4MwotLDB4YzIsMHgwMiwweDQ2LDB4ZTIsMHhmMSwweGI4LDB4MDIsMHgwMCwweGU3LDB4NTAsMHhiOSwweDVhLDB4MDAsMHgzMywweGZmLDB4YzcKLSwweDA1LDB4NjUsMHgxOCwweDhjLDB4NGQsMHgwMiwweDgzLDB4YzcsMHgwNCwweGUyLDB4ZjQsMHgzMywweGMwLDB4OGUsMHhjMCwweDhjCi0sMHhjOCwweDhlLDB4ZDgsMHg4ZCwweDNlLDB4ODAsMHgwMCwweDhkLDB4MzYsMHg5YywweDE3LDB4YjksMHgwOCwweDAwLDB4ZTgsMHgzNwotLDB4MDAsMHg4ZCwweDM2LDB4MjAsMHgyMSwweDhkLDB4M2UsMHhjMCwweDAwLDB4YjksMHgwZCwweDAwLDB4ZTgsMHgyOSwweDAwLDB4OGQKLSwweDNlLDB4NDAsMHgwMSwweGI5LDB4MGEsMHgwMCwweGU4LDB4MWYsMHgwMCwweGU4LDB4NGIsMHgwZSwweDMzLDB4YzAsMHg4ZSwweGQ4Ci0sMHhjNywweDA2LDB4NGUsMHgzNywweDZmLDB4MTcsMHhlNywweDQ4LDB4ZTcsMHg0YywweGI4LDB4NDAsMHg5YywweGU3LDB4NGEsMHhlNQotLDB4NDgsMHg5MCwweGI4LDB4MDAsMHg3MCwweGU3LDB4NDgsMHhjMywweGE1LDB4ODMsMHhjNywweDAyLDB4ZTIsMHhmYSwweGMzLDB4ZTUKLSwweDRjLDB4YzMsMHg1MCwweDUxLDB4NTYsMHg1NywweDUyLDB4MDYsMHgxZSwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4ZTUsMHg1OCwweGQxCi0sMHhlMCwweDczLDB4MTEsMHg4YiwweGYwLDB4ZDEsMHhlNiwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4OGIsMHhiNCwweDgwLDB4MDAsMHg4MwotLDB4YzYsMHgwYiwweGZmLDB4ZTYsMHgxZiwweDA3LDB4NWEsMHg1ZiwweDVlLDB4NTksMHg1OCwweGNmLDB4NTgsMHgxYywweGU0LDB4MWMKLSwweDZjLDB4MWMsMHg4ZSwweDFhLDB4YzAsMHgxZiwweDQwLDB4MWEsMHg0NCwweDFjLDB4NjUsMHgxOCwweDgwLDB4ODAsMHg4MCwweGZmCi0sMHg4MCwweDAzLDB4MDIsMHg4MCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZgotLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYKLSwweDgwLDB4MDMsMHgwMywweDQzLDB4ODAsMHg4MCwweDAyLDB4ODAsMHg0MiwweDAzLDB4MDIsMHhmZiwweDAzLDB4MDEsMHgwMywweDAxCi0sMHgwMSwweDAzLDB4MDIsMHgwMywweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMiwweDAzLDB4MDEsMHgwMwotLDB4MDMsMHhmZiwweDAxLDB4MDEsMHhmZiwweDAxLDB4ZmYsMHgwMSwweDAxLDB4MDMsMHgwMywweDAzLDB4ZmYsMHhmZiwweGZmLDB4ZmYKLSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmCi0sMHhmZiwweGZmLDB4ZmYsMHgwMiwweGI4LDB4MGYsMHgwMCwweGU3LDB4ODQsMHhiOCwweDBmLDB4ZjgsMHhlNywweDgyLDB4YzMsMHhiOQotLDB4MDgsMHgwMCwweDg5LDB4MGUsMHhlNiwweDNhLDB4OGQsMHgwNiwweDIwLDB4MDMsMHg4YiwweGQwLDB4YzEsMHhlOCwweDA0LDB4YTMKLSwweDkwLDB4MDEsMHg4YiwweGMyLDB4OGIsMHhkOCwweGMxLDB4ZTgsMHgwNCwweDhlLDB4YzAsMHgwNSwweDYxLDB4MDAsMHgyNiwweGEzCi0sMHgwMCwweDAwLDB4YTEsMHgzMCwweDM0LDB4MjYsMHhhMywweDAyLDB4MDAsMHg4MywweGMzLDB4MTQsMHhkMSwweGViLDB4MjYsMHg4OQotLDB4MWUsMHgwOCwweDAwLDB4ODEsMHhjMiwweDEwLDB4MDYsMHhlMiwweGQ5LDB4MjYsMHhjNywweDA2LDB4MDAsMHgwMCwweGZmLDB4ZmYKLSwweDhjLDB4MDYsMHg5MiwweDAxLDB4YzMsMHg1MCwweDUxLDB4NTYsMHg1NywweDUyLDB4MDYsMHgxZSwweDMzLDB4YzAsMHg4ZSwweGQ4Ci0sMHhlNywweDVhLDB4ZmYsMHgwNiwweGJlLDB4MzMsMHhiYSwweGQyLDB4MDAsMHhlZCwweGNmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4OGMsMHhjYiwweGExLDB4MzAsMHgzNCwweGNkLDB4MzcsMHhlOSwweDA2LDB4ZWQsMHhiOCwweDMyLDB4MDAsMHhjMywweGU4LDB4OGMKLSwweDAxLDB4ZmUsMHgwNiwweGUyLDB4MzQsMHhlOCwweDIxLDB4MDEsMHg3NSwweGYwLDB4ZTgsMHg1MywweDBlLDB4ODEsMHgwZSwweGFmCi0sMHgzNiwweDAwLDB4YzAsMHhjNywweDA2LDB4YWQsMHgzNiwweDYwLDB4MDAsMHhmNywweDA2LDB4ZTYsMHgzNCwweDgwLDB4MDAsMHg3NQotLDB4MWEsMHhmNywweDA2LDB4ZTYsMHgzNCwweDAwLDB4MDgsMHg3NCwweDA5LDB4YzcsMHgwNiwweGFiLDB4MzYsMHgwYiwweDAwLDB4ZTkKLSwweDBmLDB4MDAsMHhjNywweDA2LDB4YWIsMHgzNiwweDAzLDB4MDAsMHhlOSwweDA2LDB4MDAsMHhjNywweDA2LDB4YWIsMHgzNiwweDExCi0sMHg5YywweGM3LDB4MDYsMHhhOSwweDM2LDB4MTgsMHgwMCwweGY3LDB4MDYsMHhlNiwweDM0LDB4ODAsMHgwMCwweDc1LDB4MGQsMHhmNwotLDB4MDYsMHhiNSwweDM2LDB4MDIsMHgwMCwweDc0LDB4MDUsMHg4MywweDBlLDB4YTksMHgzNiwweDIwLDB4YTEsMHhhOSwweDM2LDB4ZTcKLSwweDAwLDB4YTEsMHhhYiwweDM2LDB4ZTcsMHgwMiwweGY3LDB4MDYsMHhlNiwweDM0LDB4ODAsMHgwMCwweDc0LDB4MmUsMHhlOCwweGYyCi0sMHgyZiwweDMzLDB4YzAsMHgwZCwweDQxLDB4MDAsMHhlNywweDU2LDB4YTEsMHhiMSwweDM2LDB4MGQsMHgwMCwweDEwLDB4ZTcsMHgwOAotLDB4YTEsMHhiMywweDM2LDB4ZTcsMHgwYSwweGExLDB4YWYsMHgzNiwweGU3LDB4MDYsMHhiOCwweDQwLDB4MDAsMHhlNywweDRlLDB4MzMKLSwweGMwLDB4ZTcsMHgwZSwweGM3LDB4MDYsMHgyNiwweDAyLDB4MDAsMHgwMCwweGU5LDB4MjMsMHgwMCwweGM3LDB4MDYsMHg0ZSwweDM3Ci0sMHgzZiwweDIwLDB4OGUsMHgwNiwweDMwLDB4MzQsMHgyNiwweGY3LDB4MDYsMHgwYSwweDAwLDB4MDAsMHg4MCwweDc0LDB4MDcsMHgyNgotLDB4ODEsMHgwZSwweDA4LDB4MDAsMHgwMCwweDgwLDB4YzYsMHgwNiwweGUwLDB4MzQsMHgwMSwweGI4LDB4MDAsMHgwMCwweGMzLDB4ZmUKLSwweDA2LDB4ZTEsMHgzNCwweGM2LDB4MDYsMHhlMCwweDM0LDB4MDAsMHhhMSwweDI2LDB4MDIsMHgwYiwweGMwLDB4NzQsMHgwMSwweGMzCi0sMHhlOCwweDA0LDB4MDAsMHhiOCwweDAwLDB4MDAsMHhjMywweGExLDB4YTksMHgzNiwweGU3LDB4MDAsMHg4YiwweDFlLDB4YWIsMHgzNgotLDB4ODMsMHhlMywweDA2LDB4ZTUsMHgwMiwweDI1LDB4ZjksMHhmZiwweDBiLDB4YzMsMHgwZCwweDEwLDB4MDAsMHhlNywweDAyLDB4YTEKLSwweGFkLDB4MzYsMHhlNywweDA0LDB4YzMsMHhiOCwweDBhLDB4MDAsMHhlNywweDg0LDB4ZmUsMHgwNiwweGU1LDB4MzQsMHhjNiwweDA2Ci0sMHhlMywweDM0LDB4MDEsMHg4ZSwweDA2LDB4MzAsMHgzNCwweDI2LDB4ZjcsMHgwNiwweDBhLDB4MDAsMHgwMCwweDQwLDB4NzQsMHgwNwotLDB4MjYsMHg4MSwweDBlLDB4MDgsMHgwMCwweDAwLDB4NDAsMHhjMywweGM3LDB4MDYsMHg0ZSwweDM3LDB4NmYsMHgxNywweGZlLDB4MDYKLSwweGU0LDB4MzQsMHhjNiwweDA2LDB4ZTMsMHgzNCwweDAwLDB4YzMsMHhjMywweGY2LDB4MDYsMHgxOCwweDM0LDB4ODAsMHg3NSwweDBkCi0sMHhhMSwweDE4LDB4MzQsMHgwYiwweDA2LDB4MWEsMHgzNCwweDBiLDB4MDYsMHgxYywweDM0LDB4NzUsMHgwMSwweGMzLDB4YTEsMHgyZQotLDB4MzQsMHgyNSwweGZmLDB4ZmUsMHg4YiwweDE2LDB4ZTcsMHgzNiwweDgxLDB4ZTIsMHgwMCwweDAxLDB4MGIsMHhjMiwweGEzLDB4MmUKLSwweDM0LDB4OGQsMHgxNiwweDEwLDB4MDAsMHhiZiwweDAwLDB4MDAsMHhiOSwweDA4LDB4MDAsMHg4YiwweDg1LDB4MDAsMHgzNCwweGVmCi0sMHg4MywweGMyLDB4MTAsMHg4YiwweDg1LDB4MDIsMHgzNCwweGVmLDB4ODMsMHhjMiwweDEwLDB4OGIsMHg4NSwweDA0LDB4MzQsMHhlZgotLDB4ODMsMHhjMiwweGUyLDB4ODMsMHhjNywweDA2LDB4NDksMHg3NSwweGUyLDB4YjgsMHgwMCwweDAwLDB4OGUsMHhjMCwweGJlLDB4MDAKLSwweDM0LDB4YmYsMHhiOSwweDM2LDB4YjksMHgxOCwweDAwLDB4ZjMsMHhhNSwweGI4LDB4MDAsMHgwMCwweGMzLDB4MzMsMHhjMCwweDhlCi0sMHhjMCwweDhkLDB4M2UsMHhiMCwweDMzLDB4YjksMHgwOCwweDAwLDB4ZjMsMHhhYiwweDhkLDB4M2UsMHgzZSwweDM0LDB4YjksMHgwMwotLDB4MDAsMHhmMywweGFiLDB4YzMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDUwLDB4NTEsMHg1NiwweDU3LDB4NTIsMHgwNiwweDFlLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHhlNywweDVhLDB4ZmYsMHgwNiwweGJhCi0sMHgzMywweGU1LDB4NTYsMHgwZCwweDIwLDB4MDAsMHhlNywweDU2LDB4YmEsMHg3YSwweDAwLDB4ZWQsMHgwOCwweDI2LDB4OTQsMHgzNgotLDB4MzMsMHhjMCwweGIxLDB4MDgsMHgzMiwweGVkLDB4MDYsMHg4ZSwweGMwLDB4OGQsMHgzZSwweGUwLDB4ZmYsMHhmMywweGFhLDB4OGUKLSwweDA2LDB4MzIsMHgzNCwweDI2LDB4ODEsMHgwZSwweDA4LDB4MDAsMHgwMCwweDAyLDB4MDcsMHhlNSwweDU2LDB4MjUsMHhkZiwweGZmCi0sMHhlNywweDU2LDB4ZTksMHhmOCwweGZjLDB4MDAsMHhiZCwweDFiLDB4MTAsMHgxYiwweGQ5LDB4MWEsMHhmMywweDFhLDB4NTAsMHg1MQotLDB4NTYsMHg1NywweDUyLDB4MDYsMHgxZSwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4ZTcsMHg1YSwweGZmLDB4MDYsMHhiNiwweDMzLDB4NTMKLSwweDA2LDB4NTEsMHhlNSwweDgwLDB4YTMsMHhiNCwweDMzLDB4OGIsMHhkOCwweDhiLDB4YzgsMHgyNSwweDEwLDB4MDAsMHhhMywweGVkCi0sMHgzNCwweDBiLDB4YzAsMHg3NCwweDE0LDB4ZmYsMHgwNiwweDgwLDB4MzQsMHg4MCwweDNlLDB4ZmUsMHgzNCwweDAwLDB4NzQsMHgwMwotLDB4ZTksMHgwNiwweDAwLDB4YjgsMHg4MCwweDAwLDB4ZTgsMHg5ZCwweDA0LDB4ODMsMHhlMywweDAzLDB4ZDEsMHhlMywweDJlLDB4ZmYKLSwweDk3LDB4ODYsMHgxYSwweDU5LDB4MDcsMHg1YiwweGU5LDB4YTQsMHhmYywweGJhLDB4MjAsMHgwMCwweDhlLDB4MDYsMHgzYywweDM0Ci0sMHg4MywweDNlLDB4M2MsMHgzNCwweDAwLDB4NzUsMHgwMywweGU5LDB4ZjAsMHgwMCwweGM3LDB4MDYsMHgzYywweDM0LDB4MDAsMHgwMAotLDB4ZTksMHgyYSwweDAwLDB4YmEsMHgxMCwweDAwLDB4OGUsMHgwNiwweDNhLDB4MzQsMHg4MywweDNlLDB4M2EsMHgzNCwweDAwLDB4NzUKLSwweDAzLDB4ZTksMHhkNSwweGZmLDB4YzcsMHgwNiwweDNhLDB4MzQsMHgwMCwweDAwLDB4ZTgsMHgxMCwweDAwLDB4ZTksMHhjOSwweGZmCi0sMHhiYSwweDEwLDB4MDAsMHg4ZSwweDA2LDB4M2EsMHgzNCwweGM3LDB4MDYsMHgzYSwweDM0LDB4MDAsMHgwMCwweDI2LDB4YTEsMHgxNAotLDB4MDAsMHgyNiwweGEzLDB4MGMsMHgwMCwweDI2LDB4YTEsMHgxNiwweDAwLDB4MjYsMHhhMywweDBlLDB4MDAsMHgyNiwweGM2LDB4MDYKLSwweDBhLDB4MDAsMHgwMCwweGMxLDB4ZWEsMHgwMiwweDIzLDB4ZDEsMHg3NCwweDFjLDB4YmEsMHgyMCwweDAwLDB4MjYsMHhjNywweDA2Ci0sMHgwZSwweDAwLDB4ZWEsMHgwNSwweDI2LDB4MGIsMHgxNiwweDBjLDB4MDAsMHgyNiwweDg5LDB4MTYsMHgwYywweDAwLDB4ZmYsMHgwNgotLDB4ODYsMHgzNCwweGZmLDB4MDYsMHhkYywweDMzLDB4MjYsMHhhMSwweDBjLDB4MDAsMHhhOSwweDAwLDB4MzcsMHg3NCwweDE2LDB4MjYKLSwweGM2LDB4MDYsMHgwYSwweDAwLDB4MDIsMHhhOSwweDAwLDB4MzAsMHg3NCwweDA0LDB4ZmYsMHgwNiwweDdhLDB4MzQsMHhmZiwweDA2Ci0sMHhkYSwweDMzLDB4ZTksMHg0OSwweDAwLDB4YzAsMHhlYywweDA3LDB4ODMsMHgxNiwweDhhLDB4MzQsMHgwMCwweDI0LDB4MDcsMHgzYwotLDB4MDcsMHg3NSwweDA0LDB4ZmYsMHgwNiwweDhjLDB4MzQsMHhmZiwweDA2LDB4N2UsMHgzNCwweGExLDB4MzAsMHgzNCwweDhjLDB4YzMKLSwweDhlLDB4YzAsMHg4ZSwweGRiLDB4MjYsMHg4MywweDBlLDB4MDgsMHgwMCwweDQwLDB4OGMsMHhkOCwweDI2LDB4ODcsMHgwNiwweDE2Ci0sMHgwMCwweDI2LDB4ODMsMHgzZSwweDE0LDB4MDAsMHhmZiwweDc0LDB4MGEsMHg4ZSwweGMwLDB4MjYsMHg4YywweDFlLDB4MDAsMHgwMAotLDB4ZTksMHgwNSwweDAwLDB4MjYsMHg4YywweDFlLDB4MTQsMHgwMCwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4YzMsMHhjMywweDhjLDB4YzAKLSwweDg3LDB4MDYsMHg5MiwweDAxLDB4M2QsMHhmZiwweGZmLDB4NzQsMHgwZCwweDhlLDB4ZDgsMHg4YywweDA2LDB4MDAsMHgwMCwweDMzCi0sMHhjMCwweDhlLDB4ZDgsMHhlOSwweDA0LDB4MDAsMHg4YywweDA2LDB4OTAsMHgwMSwweGU4LDB4MDEsMHgwMCwweGMzLDB4MDYsMHg4MwotLDB4M2UsMHg5MCwweDAxLDB4ZmYsMHg3NCwweDI5LDB4ODMsMHgzZSwweDNhLDB4MzQsMHgwMCwweDc1LDB4MTEsMHhiYSwweDg2LDB4MDAKLSwweGU4LDB4MWUsMHgwMCwweDhjLDB4MDYsMHgzYSwweDM0LDB4ODMsMHgzZSwweDkwLDB4MDEsMHhmZiwweDc0LDB4MTEsMHg4MywweDNlCi0sMHgzYywweDM0LDB4MDAsMHg3NSwweDBhLDB4YmEsMHg4OCwweDAwLDB4ZTgsMHgwNiwweDAwLDB4OGMsMHgwNiwweDNjLDB4MzQsMHgwNwotLDB4YzMsMHhhMSwweDkwLDB4MDEsMHg4ZSwweGMwLDB4MjYsMHhhMSwweDA4LDB4MDAsMHhlZiwweDI2LDB4YTEsMHgwMCwweDAwLDB4MjYKLSwweGM3LDB4MDYsMHgwMCwweDAwLDB4ZmYsMHhmZiwweGEzLDB4OTAsMHgwMSwweDNkLDB4ZmYsMHhmZiwweDc1LDB4MDMsMHhhMywweDkyCi0sMHgwMSwweDgzLDB4M2UsMHhlZCwweDM0LDB4MDAsMHg3NCwweDBiLDB4YjgsMHgxMCwweDAwLDB4ZTcsMHg4NCwweGM3LDB4MDYsMHhlZAotLDB4MzQsMHgwMCwweDAwLDB4YzMsMHg1MCwweDUxLDB4NTYsMHg1NywweDUyLDB4MDYsMHgxZSwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4ZTcKLSwweDVhLDB4ZmYsMHgwNiwweGJjLDB4MzMsMHhlOSwweDI1LDB4ZmIsMHg1MCwweDUxLDB4NTYsMHg1NywweDUyLDB4MDYsMHgxZSwweDMzCi0sMHhjMCwweDhlLDB4ZDgsMHhlNywweDVhLDB4ZmYsMHgwNiwweGIwLDB4MzMsMHhlOSwweDExLDB4ZmIsMHg1MCwweDUxLDB4NTYsMHg1NwotLDB4NTIsMHgwNiwweDFlLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHhlNywweDVhLDB4ZmYsMHgwNiwweGI0LDB4MzMsMHgwNiwweGZmLDB4MDYKLSwweDc2LDB4MzQsMHg4MCwweDNlLDB4ZmUsMHgzNCwweDAwLDB4NzQsMHgwNCwweDA3LDB4ZTksMHhmMCwweGZhLDB4YjgsMHg4MCwweDAwCi0sMHhlOCwweGQzLDB4MDIsMHgwNywweGU5LDB4ZTYsMHhmYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4YzYsMHgxZCwweDA4LDB4MWQsMHg5MSwweDFlLDB4NWQsMHgxZSwweDczLDB4MWUsMHg4OSwweDFlLDB4OTEsMHgxZSwweGE4LDB4MWQKLSwweDkxLDB4MWUsMHg5MSwweDFlLDB4YWYsMHgxZSwweGFmLDB4MWUsMHgxNSwweDFkLDB4MTUsMHgxZCwweDkxLDB4MWUsMHg5OSwweDFmCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwMAotLDB4MDAsMHgwMSwweDAwLDB4MTAsMHgwMCwweDAxLDB4MDAsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAKLSwweDA3LDB4ZTksMHg5OSwweGZhLDB4NTAsMHg1MSwweDU2LDB4NTcsMHg1MiwweDA2LDB4MWUsMHgzMywweGMwLDB4OGUsMHhkOCwweGU3Ci0sMHg1YSwweGZmLDB4MDYsMHhiMiwweDMzLDB4MDYsMHg2OCwweGY2LDB4MWMsMHhlNSwweDA2LDB4YTMsMHhiMiwweDMzLDB4OGIsMHhmMAotLDB4ODMsMHhlNiwweDFlLDB4MmUsMHhmZiwweGE0LDB4YTAsMHgxYywweGU1LDB4MGMsMHhhOSwweDgwLDB4MDAsMHg3NCwweDA2LDB4ZTgKLSwweGE0LDB4MDEsMHhlNSwweDA2LDB4YzMsMHg1MywweGU1LDB4MGMsMHg4YiwweGQ4LDB4YTksMHgwMSwweDAwLDB4NzQsMHgxNCwweDgzCi0sMHgzZSwweGUwLDB4M2EsMHgwMCwweDc0LDB4MGQsMHg4ZSwweDA2LDB4MzgsMHgzNCwweGU4LDB4YmYsMHgwNiwweGM3LDB4MDYsMHhlMAotLDB4M2EsMHgwMCwweDAwLDB4ZTUsMHgwMCwweDBkLDB4MTgsMHgwMCwweGU3LDB4MDAsMHhlNSwweDAyLDB4MGQsMHgxMSwweDAwLDB4ZTcKLSwweDAyLDB4OGIsMHhjMywweDViLDB4YTksMHgwMSwweDAwLDB4NzQsMHgwMSwweGMzLDB4OGIsMHhkMCwweGI4LDB4MDAsMHgwOCwweGU3Ci0sMHg4NCwweDhiLDB4YzIsMHg4ZSwweDA2LDB4MzgsMHgzNCwweDI2LDB4YTMsMHgwYywweDAwLDB4OGIsMHhkMCwweGMxLDB4ZTAsMHgwMwotLDB4ODMsMHgxNiwweDg4LDB4MzQsMHgwMCwweGZmLDB4MDYsMHg3YywweDM0LDB4MjYsMHg4MywweDNlLDB4MDYsMHgwMCwweDBhLDB4NzUKLSwweDIxLDB4OGIsMHhjMiwweDI1LDB4NDAsMHgxOCwweDNkLDB4NDAsMHgwMCwweDc0LDB4MGMsMHgzZCwweDAwLDB4MTAsMHg3NSwweDEyCi0sMHgyNiwweGZlLDB4MGUsMHgwYSwweDAwLDB4NzQsMHgwYiwweGY3LDB4MDYsMHhlZiwweDM0LDB4MjAsMHgwMCwweDc1LDB4MDMsMHhlOQotLDB4NWEsMHgwNiwweDhjLDB4YzAsMHgyNiwweDhlLDB4MDYsMHgwMiwweDAwLDB4MjYsMHg4MywweDBlLDB4MDgsMHgwMCwweDIwLDB4MjYKLSwweGEzLDB4MTIsMHgwMCwweDI2LDB4YTMsMHgxMCwweDAwLDB4YzMsMHhmZiwweDA2LDB4YzQsMHgzMywweGU1LDB4MGMsMHhhOSwweDAxCi0sMHgwMCwweDc1LDB4MDEsMHhjMywweGE5LDB4ZjAsMHgwNywweDc0LDB4MDEsMHhjMywweGZmLDB4MDYsMHhkNCwweDMzLDB4ZTUsMHgwMAotLDB4MGQsMHgxOCwweDAwLDB4ZTcsMHgwMCwweGMzLDB4ZmYsMHgwNiwweGNhLDB4MzMsMHg4MCwweDNlLDB4YTAsMHgzNiwweDA4LDB4NzUKLSwweDE0LDB4OGUsMHgwNiwweDMwLDB4MzQsMHgyNiwweGY3LDB4MDYsMHgwYSwweDAwLDB4MDAsMHgwOCwweDc0LDB4MDcsMHgyNiwweDgxCi0sMHgwZSwweDA4LDB4MDAsMHgwMCwweDA4LDB4ZTUsMHg4MiwweDI1LDB4ZmQsMHhmZiwweGU3LDB4ODIsMHhlNSwweDBjLDB4NTAsMHhlNQotLDB4ODAsMHgyNSwweDAwLDB4MDcsMHhhMywweGU0LDB4M2EsMHhlNSwweDhjLDB4MjUsMHgwMCwweDgwLDB4YTMsMHhlMiwweDNhLDB4NTgKLSwweGE5LDB4MDIsMHgwMCwweDc1LDB4MjUsMHg4MywweDNlLDB4ZTIsMHgzYSwweDAwLDB4NzUsMHgxZSwweDgzLDB4M2UsMHhlNCwweDNhCi0sMHgwMCwweDc1LDB4MTcsMHhlNSwweDA4LDB4MGQsMHgwMCwweDA0LDB4MjUsMHhmZiwweDA0LDB4ZTcsMHgwOCwweGU4LDB4NmEsMHgwMQotLDB4ZTUsMHg4MiwweDBkLDB4MDIsMHgwMCwweGU3LDB4ODIsMHhlOSwweDIxLDB4MDAsMHhlOCwweDFhLDB4MDYsMHg4MCwweDNlLDB4ZTgKLSwweGZmLDB4MDAsMHg3NCwweDBhLDB4ODAsMHgzZSwweGU4LDB4ZmYsMHgwNCwweDc0LDB4MDMsMHhlOSwweDBkLDB4MDAsMHhjNiwweDA2Ci0sMHhlOCwweGZmLDB4MDEsMHhiYSwweDBjLDB4MDEsMHhiOCwweDA4LDB4MDgsMHhlZiwweGVkLDB4ODAsMHgzZSwweDlmLDB4MzYsMHgwNgotLDB4NzUsMHgwNSwweDgzLDB4MGUsMHg5OSwweDM2LDB4NDAsMHhiOCwweDAwLDB4MDEsMHhlOSwweDA5LDB4MDEsMHhmZiwweDA2LDB4Y2MKLSwweDMzLDB4ODEsMHgyNiwweGFmLDB4MzYsMHhmZiwweGY3LDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNiwweGZmLDB4MDYsMHhjNiwweDM0Ci0sMHhlOSwweDFlLDB4MDAsMHhmZiwweDA2LDB4Y2UsMHgzMywweGZmLDB4MDYsMHg5NSwweDM3LDB4ODEsMHgyNiwweGFmLDB4MzYsMHhmZgotLDB4ZWYsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2LDB4ZTksMHgwOCwweDAwLDB4ZmYsMHgwNiwweGQwLDB4MzMsMHhmZiwweDA2LDB4N2EKLSwweDM0LDB4ZmYsMHgwNiwweGQyLDB4MzMsMHhkMSwweGU2LDB4OGUsMHgwNiwweDMwLDB4MzQsMHgyZSwweDhiLDB4ODQsMHhjMCwweDFjCi0sMHgyNiwweDA5LDB4MDYsMHgwOCwweDAwLDB4MmUsMHg4YiwweDg0LDB4YzIsMHgxYywweDA5LDB4MDYsMHg2NiwweDM3LDB4YzMsMHhlNQotLDB4MGMsMHhhOSwweDgwLDB4MDAsMHg3NCwweDU2LDB4NTAsMHhlOCwweGYwLDB4MDAsMHg1OCwweGE5LDB4MDAsMHgwMSwweDc1LDB4MDcKLSwweGZmLDB4MDYsMHhjNiwweDMzLDB4ZTksMHgwOCwweDAwLDB4ZmYsMHgwNiwweDc4LDB4MzQsMHhmZiwweDA2LDB4YzgsMHgzMywweGU1Ci0sMHg4MiwweDI1LDB4ZmQsMHhmZiwweGU3LDB4ODIsMHhlOCwweDZlLDB4MDUsMHhiYSwweDEwLDB4MDEsMHhlZCwweDgwLDB4M2UsMHhlOAotLDB4ZmYsMHgwMCwweDc0LDB4MGEsMHg4MCwweDNlLDB4ZTgsMHhmZiwweDA0LDB4NzQsMHgwMywweGU5LDB4MWQsMHgwMCwweGM2LDB4MDYKLSwweGU4LDB4ZmYsMHgwMSwweGJhLDB4MGMsMHgwMSwweGI4LDB4MDgsMHgwOCwweGVmLDB4ZWQsMHhlOSwweDBkLDB4MDAsMHhjNiwweDA2Ci0sMHhlOCwweGZmLDB4MDMsMHhiYSwweDBjLDB4MDEsMHhiOCwweDA4LDB4MDgsMHhlZiwweGVkLDB4YzMsMHhhOSwweDAxLDB4MDAsMHg3NAotLDB4MWMsMHhlOCwweDJjLDB4MDAsMHg4MywweDNlLDB4ZTAsMHgzYSwweDAwLDB4NzQsMHgwZiwweDA2LDB4OGUsMHgwNiwweDM4LDB4MzQKLSwweGU4LDB4YzksMHgwNCwweGM3LDB4MDYsMHhlMCwweDNhLDB4MDAsMHgwMCwweDA3LDB4ZTksMHg1ZCwweDAwLDB4OGIsMHhkMCwweDhlCi0sMHgwNiwweDM4LDB4MzQsMHgyNiwweGEzLDB4MGMsMHgwMCwweGU4LDB4MDYsMHgwMCwweDY4LDB4NjksMHgxZCwweGU5LDB4NGEsMHgwMAotLDB4YTksMHgwMCwweDA0LDB4NzQsMHgwYSwweGI4LDB4MDAsMHgwNCwweGZmLDB4MDYsMHhkOCwweDMzLDB4ZTksMHgxNywweDAwLDB4YTkKLSwweDAwLDB4MDEsMHg3NCwweDBhLDB4ZmYsMHgwNiwweDM5LDB4MzcsMHhiOCwweDAwLDB4MDEsMHhlOSwweDA4LDB4MDAsMHhhOSwweDEwCi0sMHgwMCwweGI4LDB4MTAsMHgwMCwweDc0LDB4MWQsMHgwOSwweDA2LDB4NjYsMHgzNywweDhjLDB4YzAsMHg4ZSwweDA2LDB4MzAsMHgzNAotLDB4MjYsMHhmNywweDA2LDB4MGEsMHgwMCwweDAwLDB4MDEsMHg3NCwweDA3LDB4MjYsMHg4MSwweDBlLDB4MDgsMHgwMCwweDAwLDB4MDEKLSwweDhlLDB4YzAsMHhjMywweGZmLDB4MDYsMHhjMiwweDMzLDB4ZTksMHhmOCwweGZmLDB4ZTUsMHgwMCwweDBkLDB4MTgsMHgwMCwweGU3Ci0sMHgwMCwweGU1LDB4MDIsMHgwZCwweDExLDB4MDAsMHhlNywweDAyLDB4YzMsMHg1OCwweGU5LDB4NDMsMHhmZCwweGU1LDB4MDgsMHgwZAotLDB4MDAsMHgwNCwweDI1LDB4ZmYsMHgwNCwweGU3LDB4MDgsMHhlOSwweGUwLDB4ZmYsMHhlNSwweDBlLDB4YTksMHgwMCwweDA4LDB4NzUKLSwweDAxLDB4YzMsMHhlOSwweGY1LDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHg1MCwweDUxLDB4NTYsMHg1NywweDUyLDB4MDYsMHgxZSwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4ZTcsMHg1YSwweGZmLDB4MDYsMHhiOAotLDB4MzMsMHhlNSwweDQ4LDB4MDYsMHg1MywweDU3LDB4ZmYsMHgxNiwweDRlLDB4MzcsMHg1ZiwweDViLDB4ODMsMHgzZSwweDgwLDB4MDEKLSwweGZmLDB4NzQsMHg1OCwweDhlLDB4MDYsMHg4MCwweDAxLDB4MjYsMHhmZiwweDBlLDB4MDgsMHgwMCwweDc1LDB4NGQsMHgyNiwweGExCi0sMHgwMCwweDAwLDB4YTMsMHg4MCwweDAxLDB4MjYsMHhjNywweDA2LDB4MDAsMHgwMCwweGZmLDB4ZmYsMHg4YywweGMwLDB4MjYsMHg4ZQotLDB4MDYsMHgwMiwweDAwLDB4MjYsMHg4MSwweDBlLDB4MDgsMHgwMCwweDgwLDB4MDAsMHg4YiwweGQwLDB4MjYsMHg4NywweDA2LDB4MWEKLSwweDAwLDB4MjYsMHg4MywweDNlLDB4MTgsMHgwMCwweGZmLDB4NzQsMHgwYSwweDhlLDB4YzAsMHgyNiwweDg5LDB4MTYsMHgwMCwweDAwCi0sMHhlOSwweDA1LDB4MDAsMHgyNiwweDg5LDB4MTYsMHgxOCwweDAwLDB4ODMsMHgzZSwweDgwLDB4MDEsMHhmZiwweDc0LDB4MGMsMHg4ZQotLDB4MDYsMHg4MCwweDAxLDB4MjYsMHg4MywweDNlLDB4MDgsMHgwMCwweDAwLDB4NzQsMHhiMywweDA3LDB4ZTksMHgzZSwweGY3LDB4ZTUKLSwweDRjLDB4OTAsMHhlNSwweDAyLDB4YTksMHgwMCwweDIwLDB4NzQsMHgwZCwweDI1LDB4ZmYsMHhkZiwweDBkLDB4MDEsMHgwMCwweGU3Ci0sMHgwMiwweDBkLDB4MDAsMHgyMCwweGU3LDB4MDIsMHhlNSwweDBhLDB4OGIsMHhkOCwweGEzLDB4ZjQsMHgzMywweDI1LDB4YzMsMHg1NwotLDB4MGQsMHgwMCwweDEwLDB4ZTcsMHgwYSwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHg4MCwweDc0LDB4MzcsMHhmNywweGMzLDB4MDAKLSwweDgwLDB4NzQsMHgwNiwweGY3LDB4YzMsMHgwMCwweDA4LDB4NzQsMHg1ZCwweDgxLDB4MjYsMHhjMiwweDM0LDB4N2YsMHhmZiwweGM3Ci0sMHgwNiwweDM1LDB4MzcsMHgwNSwweDAwLDB4YjgsMHg4MCwweDAzLDB4Y2QsMHgzOSwweDgxLDB4MjYsMHg5YiwweDM2LDB4ZmYsMHg3ZgotLDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwNCwweDAwLDB4ZjcsMHgwNiwweDliLDB4MzYsMHg0MCwweDAwLDB4NzUsMHgwNiwweGM3LDB4MDYKLSwweDBmLDB4MzcsMHgwMywweDAwLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDIwLDB4NzQsMHgyYSwweGY3LDB4YzMsMHgwMCwweDA4Ci0sMHg3NCwweDI0LDB4ODAsMHgzZSwweDlkLDB4MzYsMHgwNiwweDdjLDB4MWQsMHhmZiwweDA2LDB4OTQsMHgzNCwweDgzLDB4MGUsMHg2NgotLDB4MzcsMHgyMCwweDhlLDB4MDYsMHgzMCwweDM0LDB4MjYsMHhmNywweDA2LDB4MGEsMHgwMCwweDAwLDB4MDEsMHg3NCwweDA3LDB4MjYKLSwweDgxLDB4MGUsMHgwOCwweDAwLDB4MDAsMHgwMSwweGY3LDB4YzMsMHgwMCwweDIwLDB4NzUsMHgzYiwweGY3LDB4MDYsMHg5YSwweDM3Ci0sMHg4MCwweDAwLDB4NzQsMHgwYiwweGZmLDB4MDYsMHg4OSwweDM3LDB4MzMsMHhjMCwweGU3LDB4MGUsMHhlOSwweDA0LDB4MDAsMHhmZgotLDB4MDYsMHgzYiwweDM3LDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDIwLDB4NzQsMHgxYywweDgwLDB4MjYsMHg5ZSwweDM2LDB4ZmYKLSwweDc1LDB4MTUsMHg4ZSwweDA2LDB4MzAsMHgzNCwweDI2LDB4ZjcsMHgwNiwweDBhLDB4MDAsMHgwMCwweDA4LDB4NzQsMHgwNywweDI2Ci0sMHg4MSwweDBlLDB4MDgsMHgwMCwweDAwLDB4MDgsMHhjMywweGMzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDIsMHgyMywweDAyLDB4MjMsMHgwMiwweDIzLDB4MDIsMHgyMywweDAzLDB4MjMsMHhkZCwweDIyLDB4MDIsMHgyMywweGZkLDB4MjEKLSwweDAyLDB4MjMsMHhhNCwweDI0LDB4ZjMsMHgyNCwweDAyLDB4MjMsMHg4ZCwweDIyLDB4N2EsMHgyMywweDAyLDB4MjMsMHg5NywweDI0Ci0sMHgxYiwweDI0LDB4NzUsMHgyNCwweDAyLDB4MjMsMHgwMiwweDIzLDB4OGUsMHgyNSwweGZiLDB4OGUsMHgwNiwweDdlLDB4MDEsMHhmYgotLDB4MjYsMHg4MywweDNlLDB4MDAsMHgwMCwweGZmLDB4NzQsMHhmMiwweDI2LDB4OGUsMHgwNiwweDAwLDB4MDAsMHhmYSwweDI2LDB4OGIKLSwweDFlLDB4MDgsMHgwMCwweDI2LDB4MjMsMHgxZSwweDBhLDB4MDAsMHg3NCwweGU1LDB4OGMsMHhjMCwweDhlLDB4ZDAsMHgyNiwweDhiCi0sMHgyNiwweDAyLDB4MDAsMHg4YywweDE2LDB4ZjIsMHgzMywweDIyLDB4ZmYsMHg3NSwweDZhLDB4MjYsMHhhMSwweDFjLDB4MDAsMHg4YQotLDB4ZTMsMHg4YSwweGRjLDB4MjIsMHhkOCwweDc1LDB4MGQsMHhkMCwweGU4LDB4MjQsMHhmOCwweDBhLDB4YzAsMHg3NSwweGYyLDB4YjAKLSwweDgwLDB4ZTksMHhlZCwweGZmLDB4ZDAsMHhlOCwweDI0LDB4ZjgsMHgwYSwweGMwLDB4NzUsMHgwMiwweGIwLDB4ODAsMHgzMiwweGU0Ci0sMHgyNiwweGEzLDB4MWMsMHgwMCwweGY3LDB4YzMsMHgwOCwweDAwLDB4NzUsMHg0NywweDJlLDB4OGEsMHg5ZiwweGM1LDB4MjUsMHgyZQotLDB4OGIsMHhiZiwweGM1LDB4MjYsMHg4MCwweGMzLDB4MTAsMHgyNiwweDhlLDB4MWQsMHgyNiwweDhjLDB4MWUsMHgwNiwweDAwLDB4OGIKLSwweDE2LDB4MDAsMHgwMCwweGM3LDB4MDYsMHgwMCwweDAwLDB4ZmYsMHhmZiwweDI2LDB4ODksMHgxNSwweDgzLDB4ZmEsMHhmZiwweDc1Ci0sMHgwYSwweDJlLDB4OGIsMHg5NywweGNkLDB4MjYsMHgyNiwweDIxLDB4MTYsMHgwOCwweDAwLDB4MzMsMHhjMCwweDhlLDB4ZDgsMHgyNgotLDB4ODksMHgxZSwweDA0LDB4MDAsMHhjMywweDhhLDB4ZGYsMHhiNywweDAwLDB4MmUsMHg4YSwweDlmLDB4YzUsMHgyNSwweGU5LDB4ZTAKLSwweGZmLDB4MjYsMHg4MywweDI2LDB4MDgsMHgwMCwweGY3LDB4ODMsMHhjMywweDEwLDB4ZTksMHhkZSwweGZmLDB4NjAsMHgwNiwweDFlCi0sMHg2OCwweDg3LDB4MjUsMHg2YSwweDAwLDB4MWYsMHg4ZSwweDA2LDB4ZjIsMHgzMywweDhiLDB4MGUsMHgzNCwweDM0LDB4MzksMHgwZQotLDB4ZjIsMHgzMywweDc0LDB4MGUsMHgyNiwweDgxLDB4MGUsMHgwYSwweDAwLDB4MDAsMHgwMiwweDI2LDB4ODEsMHgwZSwweDA4LDB4MDAKLSwweDAwLDB4MDIsMHgyNiwweDg5LDB4MjYsMHgwMiwweDAwLDB4YTMsMHhmMiwweDMzLDB4OGUsMHhkMCwweDhkLDB4MjYsMHg4MCwweDAwCi0sMHgzNiwweDg5LDB4MjYsMHgwMiwweDAwLDB4MzYsMHg4OSwweDFlLDB4MjAsMHgwMCwweDM2LDB4YzcsMHgwNiwweDA4LDB4MDAsMHgwMAotLDB4MDAsMHhiOSwweDA0LDB4MDAsMHhiZSwweDAwLDB4MDAsMHgyZSwweDhiLDB4YmMsMHhjNSwweDI2LDB4MzYsMHhjNywweDA1LDB4ZmYKLSwweGZmLDB4MzYsMHhjNywweDQ1LDB4MDIsMHhmZiwweGZmLDB4ODMsMHhjNiwweDAyLDB4ZTIsMHhlYiwweDhlLDB4MDYsMHg3ZSwweDAxCi0sMHgzNiwweDhiLDB4MGUsMHgyMiwweDAwLDB4OGMsMHhjMCwweDI2LDB4ODMsMHgzZSwweDAwLDB4MDAsMHhmZiwweDI2LDB4OGUsMHgwNgotLDB4MDAsMHgwMCwweDc0LDB4MDcsMHgyNiwweDNiLDB4MGUsMHgyMiwweDAwLDB4N2QsMHhlYSwweDM2LDB4OGMsMHgwNiwweDAwLDB4MDAKLSwweDhlLDB4YzAsMHgyNiwweDhjLDB4MTYsMHgwMCwweDAwLDB4ZmIsMHgzNiwweGZmLDB4MmUsMHgxZSwweDAwLDB4MDYsMHgxZSwweDY4Ci0sMHg4YiwweDI1LDB4NmEsMHgwMCwweDFmLDB4MjYsMHgwOSwweDM2LDB4MDgsMHgwMCwweGY3LDB4YzYsMHgwMCwweGZmLDB4NzQsMHgwMQotLDB4YzMsMHg1NiwweDUyLDB4MmUsMHg4YiwweGI0LDB4YzUsMHgyNSwweDgxLDB4ZTYsMHhmZiwweDAwLDB4MmUsMHg4YiwweGI0LDB4YzUKLSwweDI2LDB4OGMsMHhjMiwweDhlLDB4YzAsMHgyNiwweGM3LDB4MDYsMHgwMCwweDAwLDB4ZmYsMHhmZiwweDhlLDB4YzIsMHgyNiwweDgzCi0sMHgzYywweGZmLDB4NzQsMHgwZiwweDhiLDB4ZDAsMHgyNiwweDg3LDB4NTQsMHgwMiwweDhlLDB4YzIsMHgyNiwweGEzLDB4MDAsMHgwMAotLDB4ZTksMHgwNywweDAwLDB4MjYsMHg4OSwweDQ0LDB4MDIsMHgyNiwweDg5LDB4MDQsMHg1YSwweDVlLDB4YzMsMHgwNiwweDFlLDB4NjgKLSwweDhiLDB4MjUsMHg2YSwweDAwLDB4MWYsMHg4ZSwweDA2LDB4ZjIsMHgzMywweDI2LDB4YTMsMHgwYSwweDAwLDB4MjYsMHg4OSwweDI2Ci0sMHgwMiwweDAwLDB4YTEsMHgzNCwweDM0LDB4OGUsMHhkMCwweDhkLDB4MjYsMHg4MCwweDAwLDB4OGMsMHgxNiwweGYyLDB4MzMsMHhlOQotLDB4NGQsMHhmZSwweGNmLDB4NTAsMHgxZSwweDUyLDB4NTMsMHgzMywweGMwLDB4OGUsMHhkOCwweDI2LDB4ODMsMHgzZSwweDA0LDB4MDAKLSwweGZmLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweDAwLDB4MDAsMHg3NCwweDAzLDB4ZTksMHgxYSwweDAwLDB4ODMsMHgzZSwweGU2Ci0sMHgzYSwweDAyLDB4NzYsMHgxMywweGZmLDB4MDYsMHhkNiwweDMzLDB4OGMsMHhjMCwweDhlLDB4MDYsMHgzMiwweDM0LDB4YmUsMHg0MAotLDB4MDAsMHg2OCwweDNhLDB4MjMsMHhlOSwweDVlLDB4ZmYsMHhlOCwweDg0LDB4ZjgsMHg1YiwweDVhLDB4MWYsMHg1OCwweGNmLDB4ZTgKLSwweGUxLDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOCwweDAwLDB4MTAsMHgyNiwweDhhLDB4MWUsMHgyOSwweDAwLDB4ODgsMHgxZSwweDFiCi0sMHgzNywweDI2LDB4YzcsMHgwNiwweDBjLDB4MDAsMHhmZiwweDdmLDB4MjYsMHhhMSwweDBlLDB4MDAsMHhlNywweDljLDB4MjYsMHhhMQotLDB4MDgsMHgwMCwweGU3LDB4OWEsMHhlNSwweDAwLDB4ODAsMHhmYiwweDA4LDB4NzQsMHgwOSwweDBkLDB4MTgsMHhhYywweGU3LDB4MDAKLSwweDA3LDB4MWYsMHg1OCwweGNmLDB4MGQsMHgxOCwweDAwLDB4ZTksMHhmNCwweGZmLDB4NTAsMHgxZSwweDA2LDB4MzMsMHhjMCwweDhlCi0sMHhkOCwweDgzLDB4M2UsMHhhMSwweDM2LDB4MDAsMHg3NSwweGI3LDB4MjYsMHg4YiwweDM2LDB4MDYsMHgwMCwweDJlLDB4ZmYsMHg5NAotLDB4ZGMsMHgyMywweDA3LDB4MWYsMHg1OCwweGNmLDB4ZTgsMHg4YSwweDAwLDB4ZTUsMHgwMCwweDBkLDB4MTgsMHgwMCwweGU3LDB4MDAKLSwweGU4LDB4NDksMHgwMCwweGMzLDB4NTMsMHhmNywweDA2LDB4ZWYsMHgzNCwweDIwLDB4MDAsMHg3NSwweDJkLDB4ZTUsMHg4YywweDI1Ci0sMHgwMCwweDcwLDB4OGIsMHhkOCwweGU1LDB4OGMsMHgyNSwweDAwLDB4NzAsMHgzYiwweGMzLDB4NzQsMHgwNSwweDhiLDB4ZDgsMHhlOQotLDB4ZjIsMHhmZiwweDNkLDB4MDAsMHgzMCwweDc1LDB4MTAsMHhlNSwweDAyLDB4MjUsMHhlZiwweGZmLDB4ZTcsMHgwMiwweGM3LDB4MDYKLSwweGUwLDB4M2EsMHhmZiwweGZmLDB4ZTksMHgwMywweDAwLDB4ZTgsMHgxMiwweDAwLDB4NWIsMHhjMywweGEzLDB4MjMsMHg5NiwweDIzCi0sMHhhNCwweDIzLDB4YTQsMHgyMywweDk2LDB4MjMsMHhhNCwweDIzLDB4OTYsMHgyMywweDk2LDB4MjMsMHgyNiwweGEwLDB4MjksMHgwMAotLDB4YTIsMHgxYiwweDM3LDB4MjYsMHhjNywweDA2LDB4MGMsMHgwMCwweGZmLDB4N2YsMHgyNiwweGExLDB4MGUsMHgwMCwweGU3LDB4OWMKLSwweDI2LDB4YTEsMHgwOCwweDAwLDB4ZTcsMHg5YSwweGU1LDB4MDAsMHgyNSwweGZmLDB4NTMsMHgyNiwweDhiLDB4MzYsMHgwNiwweDAwCi0sMHg4MywweGU2LDB4MGUsMHgyZSwweDBiLDB4ODQsMHhhZCwweDI1LDB4ZTcsMHgwMCwweGMzLDB4MDYsMHgxZSwweDY4LDB4OGIsMHgyNQotLDB4NmEsMHgwMCwweDFmLDB4ODMsMHgwZSwweGVmLDB4MzQsMHgyMCwweDgzLDB4MGUsMHg5YiwweDM2LDB4MDgsMHhlNSwweDAwLDB4MjUKLSwweGVmLDB4ZmYsMHgwZCwweDA4LDB4MDAsMHhlNywweDAwLDB4ZTUsMHgwMCwweGE5LDB4MTAsMHgwMCwweDc1LDB4MDEsMHhjMywweGU1Ci0sMHgwMCwweGE5LDB4MTAsMHgwMCwweDc1LDB4ZjksMHhjMywweDUwLDB4NTMsMHg1MSwweDU2LDB4MDYsMHgxZSwweDMzLDB4YzAsMHg4ZQotLDB4ZDgsMHhiOCwweDA1LDB4MDAsMHhlNywweDg0LDB4ZTUsMHgwOCwweDBkLDB4MDAsMHgwNCwweDI1LDB4ZmYsMHgwNCwweGU3LDB4MDgKLSwweGU1LDB4MDAsMHgwZCwweDE4LDB4MDAsMHhlNywweDAwLDB4ZTUsMHgwMiwweDBkLDB4MTEsMHgwMCwweGU3LDB4MDIsMHgxZiwweDA3Ci0sMHg1ZSwweDU5LDB4NWIsMHg1OCwweGMzLDB4NTAsMHgxZSwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4YzcsMHgwNiwweGVmLDB4MzQsMHgwMAotLDB4MDAsMHg4MywweDI2LDB4OWIsMHgzNiwweGY3LDB4ZTUsMHgwMCwweDBkLDB4MTgsMHgwMCwweGU3LDB4MDAsMHhlNSwweDAyLDB4MGQKLSwweDExLDB4MDAsMHhlNywweDAyLDB4MWYsMHg1OCwweGNmLDB4NjAsMHgwNiwweDFlLDB4NjgsMHg4NywweDI1LDB4NmEsMHgwMCwweDFmCi0sMHhlOCwweDE2LDB4ZjUsMHhjMywweDA2LDB4MWUsMHg2OCwweDhiLDB4MjUsMHg2YSwweDAwLDB4MWYsMHg4ZSwweGMwLDB4MjYsMHg4MwotLDB4M2UsMHgwYSwweDAwLDB4MDAsMHg3NCwweDAzLDB4ZTgsMHg0MywweDAwLDB4MjYsMHhjNywweDA2LDB4MGEsMHgwMCwweGZmLDB4ZmYKLSwweDI2LDB4OGIsMHgxNiwweDA2LDB4MDAsMHg4ZSwweDFlLDB4OGUsMHgwMSwweDhjLDB4ZDgsMHg4YiwweGNhLDB4ODMsMHgzZSwweDAwCi0sMHgwMCwweGZmLDB4OGUsMHgxZSwweDAwLDB4MDAsMHg3NCwweDBhLDB4MmIsMHgxNiwweDA4LDB4MDAsMHg3MywweGViLDB4MjksMHgwZQotLDB4MDgsMHgwMCwweDI2LDB4ODksMHgwZSwweDA4LDB4MDAsMHgyNiwweDhjLDB4MWUsMHgwMCwweDAwLDB4OGUsMHhkOCwweDhjLDB4MDYKLSwweDAwLDB4MDAsMHhjMywweDYwLDB4MDYsMHgxZSwweDY4LDB4ODcsMHgyNSwweDZhLDB4MDAsMHgxZiwweDhlLDB4YzAsMHg4YiwweGM4Ci0sMHg4ZSwweDFlLDB4OGUsMHgwMSwweDI2LDB4YzcsMHgwNiwweDBhLDB4MDAsMHgwMCwweDAwLDB4OGMsMHhkOCwweDgzLDB4M2UsMHgwMAotLDB4MDAsMHhmZiwweDc0LDB4MjUsMHgzYiwweDBlLDB4MDAsMHgwMCwweDhlLDB4MWUsMHgwMCwweDAwLDB4NzUsMHhlZCwweDhlLDB4ZDgKLSwweDI2LDB4YTEsMHgwMCwweDAwLDB4YTMsMHgwMCwweDAwLDB4M2QsMHhmZiwweGZmLDB4NzQsMHg1NiwweDhlLDB4ZDgsMHgyNiwweGExCi0sMHgwOCwweDAwLDB4MDEsMHgwNiwweDA4LDB4MDAsMHhlOSwweDQ5LDB4MDAsMHgyNiwweDhlLDB4MWUsMHgwMiwweDAwLDB4YmUsMHgxOAotLDB4MDAsMHg4MywweDNjLDB4ZmYsMHg3NCwweDNjLDB4MzksMHgwYywweDc0LDB4MTksMHg4ZSwweDFjLDB4YmUsMHgwMCwweDAwLDB4ODMKLSwweDNlLDB4MDAsMHgwMCwweGZmLDB4NzQsMHgyYywweDM5LDB4MGUsMHgwMCwweDAwLDB4NzQsMHgwNywweDhlLDB4MWUsMHgwMCwweDAwCi0sMHhlOSwweGVjLDB4ZmYsMHgyNiwweGExLDB4MDAsMHgwMCwweDg5LDB4MDQsMHgzMywweGM5LDB4OGUsMHhkOSwweDNkLDB4ZmYsMHhmZgotLDB4NzUsMHgxMCwweDgzLDB4ZmUsMHgxOCwweDc1LDB4MGIsMHgyNiwweDhlLDB4MWUsMHgwMiwweDAwLDB4ODEsMHgyNiwweDA4LDB4MDAKLSwweDdmLDB4ZmYsMHgzMywweGMwLDB4OGUsMHhkOCwweGMzLDB4MWYsMHgwNywweDYxLDB4Y2YsMHgxZiwweDA3LDB4Y2YsMHg2MCwweDA2Ci0sMHgxZSwweDY4LDB4ODcsMHgyNSwweDZhLDB4MDAsMHgxZiwweGU1LDB4MDYsMHgyNSwweDFlLDB4MDAsMHgzZCwweDFlLDB4MDAsMHg3NQotLDB4ZjYsMHhiOSwweDA4LDB4MDAsMHhlNSwweDU4LDB4ZTcsMHg1YSwweDIzLDB4YzAsMHhlMCwweGY4LDB4YzMsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGFjLDB4MDAsMHgwMCwweDAwLDB4YTgsMHgwMCwweDhjLDB4MDIsMHgwNCwweDAwCi0sMHgwMCwweDA4LDB4MTAsMHgyMCwweDAwLDB4ZmYsMHgwZSwweDBjLDB4MGMsMHgwYSwweDBhLDB4MGEsMHgwYSwweDA4LDB4MDgsMHgwOAotLDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYKLSwweDA2LDB4MDYsMHgwNiwweDA2LDB4MDYsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0Ci0sMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNAotLDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIKLSwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyCi0sMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMgotLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIKLSwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDAsMHgxNCwweDAwLDB4MTAsMHgwMCwweDBjLDB4MDAsMHhmZiwweDdmLDB4ZmYKLSwweGJmLDB4ZmYsMHhkZiwweGZmLDB4ZWYsMHhmZiwweGY3LDB4ZmYsMHhmYiwweGZmLDB4ZmQsMHhmZiwweGZlLDB4N2YsMHhmZiwweGJmCi0sMHhmZiwweGRmLDB4ZmYsMHhlZiwweGZmLDB4ZjcsMHhmZiwweGZiLDB4ZmYsMHhmZCwweGZmLDB4ZmUsMHhmZiwweDAwLDB4MDAsMHgwMAotLDB4ODAsMHgzZSwweGUyLDB4MzQsMHgwMSwweDc2LDB4MDMsMHhlOSwweGE1LDB4MDAsMHhiOCwweDAwLDB4MDAsMHhlNywweDRlLDB4YjkKLSwweDI4LDB4MDAsMHhlMiwweGZlLDB4YzYsMHgwNiwweDQ1LDB4MzcsMHgwMiwweGJmLDB4M2YsMHgyOCwweDJlLDB4OGIsMHg0NSwweDA4Ci0sMHhlNywweDRlLDB4YjksMHgyOCwweDAwLDB4ZTIsMHhmZSwweDJlLDB4OGIsMHgxZCwweGM3LDB4MDYsMHhiMywweDM2LDB4NDAsMHgxMQotLDB4YzcsMHgwNiwweGIxLDB4MzYsMHgyNywweDAwLDB4YzcsMHgwNiwweDQ2LDB4MzcsMHgwMiwweDAwLDB4YzcsMHgwNiwweDQ4LDB4MzcKLSwweDY0LDB4MDAsMHhmNywweDA2LDB4YjUsMHgzNiwweDAyLDB4MDAsMHg3NSwweDFjLDB4MmUsMHgwYiwweDVkLDB4MDIsMHg4MSwweDI2Ci0sMHhiMywweDM2LDB4ZmYsMHhmZSwweGM3LDB4MDYsMHhiMSwweDM2LDB4OWMsMHgwMCwweGM3LDB4MDYsMHg0NiwweDM3LDB4MDgsMHgwMAotLDB4YzcsMHgwNiwweDQ4LDB4MzcsMHg5MCwweDAxLDB4ODksMHgxZSwweGI3LDB4MzYsMHg4OSwweDFlLDB4ZmUsMHgzMywweGJlLDB4MjAKLSwweDAwLDB4OGIsMHhjMywweGU3LDB4NGUsMHhiOSwweDI4LDB4MDAsMHhlMiwweGZlLDB4MmUsMHg4YiwweDQ1LDB4MDQsMHhlNywweDRlCi0sMHhiOSwweDI4LDB4MDAsMHhlMiwweGZlLDB4ZTUsMHg0ZSwweDhiLDB4Y2IsMHgyZSwweDIzLDB4NDUsMHgwNiwweDJlLDB4MjMsMHg0ZAotLDB4MDYsMHgzYSwweGMxLDB4NzQsMHgzNiwweDRlLDB4NzUsMHhkOSwweDgwLDB4M2UsMHg0NSwweDM3LDB4MDAsMHg3NCwweDBiLDB4YzYKLSwweDA2LDB4NDUsMHgzNywweDAwLDB4YmYsMHgyZiwweDI4LDB4ZTksMHg3MiwweGZmLDB4YzYsMHgwNiwweDQ1LDB4MzcsMHgwMSwweGY3Ci0sMHgwNiwweGI1LDB4MzYsMHgwMiwweDAwLDB4NzQsMHgxNCwweGU1LDB4Y2UsMHgyNSwweGZkLDB4ZmYsMHhlNywweGNlLDB4ZTgsMHg0MwotLDB4MDAsMHhlNSwweGNlLDB4MGQsMHgwMiwweDAwLDB4ZTcsMHhjZSwweGU4LDB4MzksMHgwMCwweDgwLDB4M2UsMHhlMiwweDM0LDB4MDEKLSwweDc2LDB4MDEsMHhjMywweGI4LDB4ZWEsMHgwNSwweGU3LDB4OGMsMHhmYSwweGU4LDB4MTIsMHhmNCwweGZiLDB4OGQsMHgwNiwweGQwCi0sMHgzOSwweDhiLDB4ZDgsMHhjMSwweGU4LDB4MDQsMHhhMywweDM4LDB4MzQsMHg4ZSwweGMwLDB4YTEsMHgzMCwweDM0LDB4MjYsMHhhMwotLDB4MDIsMHgwMCwweDI2LDB4YzcsMHgwNiwweDAwLDB4MDAsMHhmZiwweGZmLDB4ODMsMHhjMywweDE4LDB4ZDEsMHhlYiwweDI2LDB4ODkKLSwweDFlLDB4MDgsMHgwMCwweGMzLDB4ZTUsMHgwMiwweDBkLDB4MDAsMHg0MCwweGU3LDB4MDIsMHhlNSwweDAwLDB4MGQsMHgwNCwweDAwCi0sMHhlNywweDAwLDB4YjgsMHgwMCwweDAwLDB4ZTcsMHgwYSwweGU1LDB4MGEsMHhhOSwweDAwLDB4ODAsMHg3NSwweDE0LDB4ZTUsMHgwOAotLDB4MGQsMHgwMCwweDEwLDB4ZTcsMHgwOCwweGU1LDB4MGEsMHgwZCwweDAwLDB4MDgsMHhiOSwweDA1LDB4MDAsMHhlNywweDBhLDB4ZTIKLSwweGZjLDB4YzMsMHhlNSwweDA4LDB4MGQsMHgwMCwweDEwLDB4YjksMHgwNSwweDAwLDB4ZTcsMHgwOCwweGUyLDB4ZmMsMHhjMywweDA0Ci0sMHgwYywweDIwLDB4MDAsMHgwMSwweDBjLDB4N2UsMHhmZiwweDAwLDB4MGMsMHgwMiwweDAwLDB4MTAsMHgwMCwweDQwLDB4MDAsMHgwYwotLDB4YzYsMHgwMSwweDAwLDB4MDAsMHhjMCwweGY3LDB4ZmYsMHgwMCwweGMwLDB4MDIsMHgwMCwweDEwLDB4MDAsMHg0MCwweDAwLDB4MDAKLSwweDMzLDB4YzAsMHg4ZSwweGQ4LDB4OGQsMHgzZSwweDcyLDB4NDksMHg4ZCwweDM2LDB4YjAsMHgzNywweGI5LDB4MTQsMHgwMCwweDhiCi0sMHgxZSwweDMwLDB4MzQsMHg4OSwweDVjLDB4MDIsMHgyZSwweDhiLDB4NDUsMHgwMiwweDg5LDB4NDQsMHgwNiwweDJlLDB4OGIsMHgwNQotLDB4ODksMHg0NCwweDA0LDB4ODMsMHhjNywweDA0LDB4ODMsMHhjNiwweDEwLDB4ZTIsMHhlOCwweGM2LDB4MDYsMHg5ZSwweDM2LDB4MGUKLSwweGU4LDB4ZmQsMHgyNiwweDY4LDB4ODMsMHgyOCwweGExLDB4YWEsMHgwMiwweGNkLDB4MzUsMHg4MywweDNlLDB4YTEsMHgzNiwweDAwCi0sMHg3NCwweDAzLDB4ZTksMHgzYiwweDI3LDB4MzMsMHhmZiwweDhlLDB4MDYsMHhhNiwweDAyLDB4OGIsMHgzNiwweGE0LDB4MDIsMHgyZQotLDB4ZmYsMHhhNCwweDJlLDB4MzAsMHg4MywweDBlLDB4OTksMHgzNiwweDA0LDB4YzcsMHgwNiwweDM3LDB4MzcsMHgwMSwweDAwLDB4YzYKLSwweDA2LDB4Y2EsMHgzNCwweDAxLDB4ZTksMHg3ZCwweDE5LDB4ODAsMHgzZSwweGEwLDB4MzYsMHgwOCwweDc0LDB4ZTYsMHg4MCwweDI2Ci0sMHg5ZSwweDM2LDB4ZmYsMHg3NSwweDFhLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDIwLDB4NzQsMHgxMiwweGY3LDB4MDYsMHg5YgotLDB4MzYsMHgwMywweDAwLDB4NzUsMHgwYSwweDgzLDB4MGUsMHg2NiwweDM3LDB4MTAsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA4LDB4ZTkKLSwweGZiLDB4MDEsMHg4MCwweDNlLDB4OWUsMHgzNiwweDAyLDB4NzUsMHhjZSwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDYsMHhlOSwweGVjCi0sMHgwMSwweGMzLDB4ZTksMHhlOCwweDAxLDB4MjYsMHhjNywweDA2LDB4MGEsMHgwMCwweDAwLDB4MDAsMHgyNiwweGZmLDB4MjYsMHgwNAotLDB4MDAsMHhhMSwweGQxLDB4MzYsMHgyNiwweDM5LDB4MDYsMHgxYSwweDAwLDB4NzUsMHgyMiwweGExLDB4ZDMsMHgzNiwweDI2LDB4MzkKLSwweDA2LDB4MWMsMHgwMCwweDc1LDB4MTgsMHhhMSwweGQ1LDB4MzYsMHgyNiwweDM5LDB4MDYsMHgxZSwweDAwLDB4NzUsMHgwZSwweDI2Ci0sMHhmNywweDA2LDB4MGMsMHgwMCwweDQwLDB4MDAsMHg3NCwweDA1LDB4ODMsMHgwZSwweDY2LDB4MzcsMHg0MCwweDgxLDB4MGUsMHhhZgotLDB4MzYsMHgwMCwweDEwLDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNiwweDgwLDB4M2UsMHg5ZCwweDM2LDB4MDIsMHg3NSwweDA2LDB4Y2QKLSwweDM0LDB4ZTksMHhhMiwweDFhLDB4YzMsMHhmNywweDA2LDB4OWIsMHgzNiwweDEwLDB4MDAsMHg3NSwweDU0LDB4MjYsMHhmNiwweDA2Ci0sMHgwYSwweDAwLDB4ZmYsMHg3NSwweDRjLDB4MjYsMHhhMCwweDE5LDB4MDAsMHgyNCwweGMwLDB4M2MsMHg0MCwweDc1LDB4MTEsMHg4MAotLDB4M2UsMHg5NSwweDM2LDB4MDAsMHg3NCwweDNiLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGZmLDB4ZmYsMHhlOSwweDMxLDB4MDAKLSwweGU4LDB4ZjEsMHgwNCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDMsMHgwMCwweDc0LDB4MmYsMHg4YiwweGQ4LDB4YjgsMHg3ZCwweDAzCi0sMHhjZCwweDNhLDB4OGIsMHhjMywweGM2LDB4MDYsMHhhMCwweDM2LDB4MDYsMHhmNywweDA2LDB4OWIsMHgzNiwweDAyLDB4MDAsMHg3NQotLDB4MDUsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA0LDB4ODEsMHgwZSwweDliLDB4MzYsMHg4MCwweDAwLDB4ODMsMHgyNiwweDliLDB4MzYKLSwweGZjLDB4ZTksMHgyMywweDAxLDB4ZTgsMHg4NywweDFkLDB4ZTksMHgzMywweDAxLDB4NTAsMHgyNiwweGExLDB4MGMsMHgwMCwweDI1Ci0sMHgwNywweDAwLDB4M2QsMHgwNywweDAwLDB4NzUsMHgwMywweGU5LDB4ODQsMHgwMCwweDNkLDB4MDUsMHgwMCwweDc1LDB4MDMsMHhlOQotLDB4N2MsMHgwMCwweDgzLDB4M2UsMHhlOCwweDNhLDB4MDQsMHg3NCwweDc1LDB4ODMsMHgzZSwweGU4LDB4M2EsMHgwMiwweDc0LDB4NmUKLSwweGY3LDB4MDYsMHhlNiwweDM0LDB4MTgsMHg4MCwweDc1LDB4MDMsMHhlOSwweDZhLDB4MDAsMHhmNywweDA2LDB4ZTYsMHgzNCwweDAwCi0sMHg4MCwweDc0LDB4MzUsMHgyNiwweDgwLDB4M2UsMHgyOSwweDAwLDB4MDIsMHg3NSwweDJkLDB4NTEsMHg1NiwweDU3LDB4OGQsMHgzNgotLDB4M2UsMHgzNCwweDhkLDB4M2UsMHgyMCwweDAwLDB4YjksMHgwNiwweDAwLDB4ZjMsMHhhNiwweDVmLDB4NWUsMHg1OSwweDc0LDB4NDUKLSwweDI2LDB4YTEsMHgyMCwweDAwLDB4YTMsMHgzZSwweDM0LDB4MjYsMHhhMSwweDIyLDB4MDAsMHhhMywweDQwLDB4MzQsMHgyNiwweGExCi0sMHgyNCwweDAwLDB4YTMsMHg0MiwweDM0LDB4ZTksMHgyNiwweDAwLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHgwOCwweDAwLDB4NzQsMHgwYgotLDB4MjYsMHg4MCwweDNlLDB4MTksMHgwMCwweDAwLDB4NzQsMHgwMywweGU5LDB4MTMsMHgwMCwweGY3LDB4MDYsMHhlNiwweDM0LDB4MTAKLSwweDAwLDB4NzQsMHgxMiwweDI2LDB4YTAsMHgyOCwweDAwLDB4YzAsMHhlOCwweDA0LDB4MjIsMHhjMCwweDc0LDB4MDcsMHgyNiwweGM3Ci0sMHgwNiwweDA0LDB4MDAsMHhmZiwweGZmLDB4NTgsMHgyMywweGMwLDB4NzQsMHgwMywweGU5LDB4NTcsMHhmZiwweDgxLDB4MjYsMHg5YgotLDB4MzYsMHhmZiwweGZlLDB4ODMsMHhmZSwweDA2LDB4N2YsMHgyNCwweDI2LDB4YTEsMHgyMCwweDAwLDB4M2IsMHgwNiwweGQxLDB4MzYKLSwweDc1LDB4MWEsMHgyNiwweGExLDB4MjIsMHgwMCwweDNiLDB4MDYsMHhkMywweDM2LDB4NzUsMHgxMCwweDI2LDB4YTEsMHgyNCwweDAwCi0sMHgzYiwweDA2LDB4ZDUsMHgzNiwweDc1LDB4MDYsMHg4MSwweDBlLDB4OWIsMHgzNiwweDAwLDB4MDEsMHgyNiwweGExLDB4MjAsMHgwMAotLDB4MjUsMHg3ZiwweGZmLDB4YTMsMHhiOCwweDM0LDB4MjYsMHhhMSwweDIyLDB4MDAsMHhhMywweGJhLDB4MzQsMHgyNiwweGExLDB4MjQKLSwweDAwLDB4YTMsMHhiYywweDM0LDB4OGIsMHhjNiwweDg2LDB4YzQsMHhhMywweGMwLDB4MzQsMHhkMSwweGU2LDB4ODAsMHhmYywweDA5Ci0sMHg3NCwweDAzLDB4ZTgsMHhhYSwweDFjLDB4OGIsMHhjNiwweDJlLDB4ZmYsMHhhNCwweDMwLDB4NDksMHgyNiwweGExLDB4MGMsMHgwMAotLDB4M2QsMHhmZiwweDdmLDB4NzQsMHgwZiwweDI2LDB4ZmYsMHgyNiwweDA0LDB4MDAsMHg4ZSwweDA2LDB4MzgsMHgzNCwweGU4LDB4MzYKLSwweDA2LDB4Y2QsMHg1MCwweGMzLDB4ZTksMHgxNiwweDAwLDB4Y2QsMHgzNCwweGU5LDB4MTEsMHgwMCwweGNkLDB4MzQsMHg4OSwweDM2Ci0sMHgzZCwweDM3LDB4YTEsMHg5ZCwweDM2LDB4YTMsMHgzZiwweDM3LDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwYywweGU4LDB4OGUsMHgwMAotLDB4YTEsMHg5ZiwweDM2LDB4MjIsMHhlNCwweDc1LDB4MzIsMHhmNywweDA2LDB4NGMsMHgzNywweDAxLDB4MDAsMHg3NSwweDJhLDB4ZjYKLSwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzQsMHgwNywweDg4LDB4MjYsMHg5ZSwweDM2LDB4ZTksMHgzMSwweDAwLDB4M2EsMHgwNiwweDlkCi0sMHgzNiwweGEzLDB4OWQsMHgzNiwweDc0LDB4MjgsMHg4YiwweGYwLDB4MmUsMHhmZiwweGE0LDB4MGQsMHgyYiwweDQ0LDB4MjksMHhlZQotLDB4NDIsMHgxOSwweDQ0LDB4Y2QsMHg0NCwweDJmLDB4NDUsMHg1YSwweDQ1LDB4M2EsMHgyNiwweDllLDB4MzYsMHg3NSwweDAxLDB4YzMKLSwweDMyLDB4YzAsMHg4NiwweGM0LDB4OGIsMHhmMCwweGEyLDB4OWUsMHgzNiwweDJlLDB4ZmYsMHhhNCwweDIwLDB4NDksMHg4YiwweDJlCi0sMHg5OSwweDM2LDB4MjMsMHhlZCwweDc1LDB4MDEsMHhjMywweGJmLDB4MDEsMHgwMCwweGJlLDB4MDAsMHgwMCwweDg1LDB4ZmQsMHg3NQotLDB4MWEsMHg0NiwweGQxLDB4ZTcsMHhlOSwweGY2LDB4ZmYsMHgyYSwweDAwLDB4MjksMHgwMCwweDI4LDB4MDAsMHgyNywweDAwLDB4MjUKLSwweDAwLDB4MDUsMHgwMCwweDA3LDB4MDAsMHgyNiwweDAwLDB4MDYsMHgwMCwweDIwLDB4MDAsMHhmNywweGQ3LDB4MjEsMHgzZSwweDk5Ci0sMHgzNiwweGQxLDB4ZTYsMHgyZSwweDhiLDB4YjQsMHg0NywweDJiLDB4ZTksMHg0ZiwweGZmLDB4ZTksMHg1NiwweGZmLDB4ODAsMHgyNgotLDB4OWUsMHgzNiwweGZmLDB4NzUsMHgxNywweGY3LDB4MDYsMHg0YywweDM3LDB4MDEsMHgwMCwweDc1LDB4MGYsMHhmNiwweDA2LDB4OWQKLSwweDM2LDB4ODAsMHg3NCwweDA4LDB4ZjcsMHgwNiwweDY2LDB4MzcsMHhmZiwweGZmLDB4NzUsMHgwNywweGM3LDB4MDYsMHg2NiwweDM3Ci0sMHgwMCwweDAwLDB4YzMsMHhmNywweDA2LDB4NDEsMHgzNywweDAxLDB4MDAsMHg3NSwweDBiLDB4YjgsMHg3ZiwweDAzLDB4Y2QsMHgzOQotLDB4YzcsMHgwNiwweDQxLDB4MzcsMHgwMSwweDAwLDB4MzMsMHhmNiwweGI4LDB4MDAsMHg0MCwweDg1LDB4MDYsMHg2NiwweDM3LDB4NzQKLSwweDIxLDB4ODAsMHhiYywweDU0LDB4MzcsMHhmZiwweDc0LDB4MDQsMHhmZSwweDg0LDB4NTQsMHgzNywweDgwLDB4YmMsMHg5NiwweDM0Ci0sMHhmZiwweDc0LDB4MDQsMHhmZSwweDg0LDB4OTYsMHgzNCwweDMxLDB4MDYsMHg2NiwweDM3LDB4ODMsMHgzZSwweDY2LDB4MzcsMHgwMAotLDB4NzQsMHgwNSwweDQ2LDB4ZDEsMHhlOCwweDczLDB4ZDQsMHhjMywweGExLDB4ZjQsMHgzMywweGE5LDB4MDAsMHg4OCwweDc0LDB4MGIKLSwweGE5LDB4MDAsMHgxMCwweDc1LDB4MDksMHg4YiwweDFlLDB4NDMsMHgzNywweGZmLDB4ZTMsMHhlOSwweGQ3LDB4MDAsMHhjNywweDA2Ci0sMHgzNSwweDM3LDB4MDUsMHgwMCwweGM3LDB4MDYsMHg0MywweDM3LDB4MWUsMHgyYywweGY3LDB4MDYsMHhmNCwweDMzLDB4MDAsMHgwOAotLDB4NzQsMHgwNiwweGM3LDB4MDYsMHg0MywweDM3LDB4MTAsMHgyYywweGI4LDB4ODAsMHgwMywweGNkLDB4MzksMHhlOSwweGNkLDB4ZmUKLSwweGE5LDB4MDAsMHgwOCwweDc0LDB4ZDksMHhmZiwweDBlLDB4MzUsMHgzNywweDc1LDB4ZWQsMHhlOSwweDY2LDB4MDAsMHhhOSwweDAwCi0sMHgwOCwweDc1LDB4Y2IsMHhmZiwweDBlLDB4MzUsMHgzNywweDc1LDB4ZGYsMHg4MSwweDBlLDB4YzIsMHgzNCwweGMwLDB4MDAsMHhmNgotLDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NCwweDQ4LDB4ODEsMHgwZSwweDliLDB4MzYsMHgwMCwweDgwLDB4ZjcsMHgwNiwweDliLDB4MzYKLSwweDAxLDB4MDAsMHg3NCwweDFlLDB4YjgsMHg3ZCwweDAzLDB4Y2QsMHgzYSwweDgxLDB4MGUsMHg5YiwweDM2LDB4ODAsMHgwMCwweDgzCi0sMHgyNiwweDliLDB4MzYsMHhmZSwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDIsMHgwMCwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDQsMHhlOQotLDB4N2IsMHhmZSwweDgwLDB4M2UsMHhhMCwweDM2LDB4MDQsMHg3NSwweDA3LDB4ODMsMHgzZSwweDBmLDB4MzcsMHgwMSwweDc1LDB4MDUKLSwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDYsMHhjNywweDA2LDB4MGYsMHgzNywweDAyLDB4MDAsMHhlOSwweDVmLDB4ZmUsMHhiZSwweDAyCi0sMHgwMCwweGU5LDB4NGEsMHhmZSwweDgwLDB4MjYsMHg5ZSwweDM2LDB4ZmYsMHg3NSwweDNhLDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MAotLDB4NzQsMHgyZCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgyMCwweDc1LDB4MmIsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA2LDB4ZmYKLSwweDA2LDB4OTQsMHgzNCwweDgzLDB4MGUsMHg2NiwweDM3LDB4MjAsMHg4ZSwweDA2LDB4MzAsMHgzNCwweDI2LDB4ZjcsMHgwNiwweDBhCi0sMHgwMCwweDAwLDB4MDEsMHg3NCwweDA3LDB4MjYsMHg4MSwweDBlLDB4MDgsMHgwMCwweDAwLDB4MDEsMHhlOSwweDA2LDB4MDAsMHhiZQotLDB4MDQsMHgwMCwweGU5LDB4MDksMHhmZSwweDgxLDB4MGUsMHhhZiwweDM2LDB4MDAsMHgwOCwweGExLDB4YWYsMHgzNiwweGU3LDB4MDYKLSwweGU1LDB4MGEsMHhhOSwweDAwLDB4ODAsMHg3NCwweDBlLDB4ODEsMHgyNiwweGFmLDB4MzYsMHhmZiwweGY3LDB4YTEsMHhhZiwweDM2Ci0sMHhlNywweDA2LDB4ZTksMHgwOSwweGZmLDB4ZTksMHhmNSwweGZkLDB4YzcsMHgwNiwweDQxLDB4MzcsMHgwMCwweDAwLDB4ODMsMHgwZQotLDB4OTksMHgzNiwweDAyLDB4ZTksMHhlNywweGZkLDB4ODAsMHgyNiwweDllLDB4MzYsMHhmZiwweDc1LDB4MWQsMHhmNywweDA2LDB4OWIKLSwweDM2LDB4MDAsMHg0MCwweDc1LDB4MDUsMHg4MywweDBlLDB4OTksMHgzNiwweDA4LDB4ODMsMHgwZSwweDk5LDB4MzYsMHgyMCwweDgxCi0sMHgyNiwweDliLDB4MzYsMHhmZiwweGJmLDB4YjgsMHg4NSwweDAzLDB4Y2QsMHgzOSwweGU5LDB4YzAsMHhmZCwweDgwLDB4M2UsMHg5ZQotLDB4MzYsMHgwNiwweDc0LDB4MDcsMHg4MCwweDNlLDB4OWUsMHgzNiwweDBhLDB4NzUsMHgzNCwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAKLSwweDc1LDB4MDYsMHhiZSwweDA3LDB4MDAsMHhlOSwweDk2LDB4ZmQsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA0LDB4ODMsMHgzZSwweDBmCi0sMHgzNywweDAyLDB4NzQsMHgxYiwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDQsMHgwMCwweDgwLDB4M2UsMHg5ZSwweDM2LDB4MDYsMHg3NQotLDB4MGUsMHhmNywweDA2LDB4OWIsMHgzNiwweDQwLDB4MDAsMHg3NSwweDA2LDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwMywweDAwLDB4ZTkKLSwweDdiLDB4ZmQsMHg4MCwweDNlLDB4OWQsMHgzNiwweDA0LDB4NzUsMHgxMiwweDgxLDB4MGUsMHhjMiwweDM0LDB4MDAsMHg0MCwweGZmCi0sMHgwNiwweDkyLDB4MzQsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA2LDB4ZTksMHg2MiwweGZkLDB4YmUsMHgwNSwweDAwLDB4ZTksMHg0ZAotLDB4ZmQsMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzUsMHgxOSwweDgzLDB4MGUsMHhjMiwweDM0LDB4MDQsMHhiZSwweDA2LDB4MDAKLSwweGU5LDB4M2IsMHhmZCwweDgwLDB4MjYsMHg5ZSwweDM2LDB4ZmYsMHg3NSwweGM1LDB4ZmYsMHgwNiwweDMxLDB4MzcsMHhlOSwweDAwCi0sMHgwMCwweDgzLDB4MjYsMHhjMiwweDM0LDB4YmYsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA2LDB4ZTksMHgyZiwweGZkLDB4ZTUsMHgwYQotLDB4NTAsMHgyNSwweGMzLDB4YmYsMHhlNywweDBhLDB4NTgsMHg4MCwweDI2LDB4OWUsMHgzNiwweGZmLDB4NzUsMHgwZCwweGE5LDB4MDAKLSwweDQwLDB4NzUsMHgwOCwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDYsMHhlOSwweDEyLDB4ZmQsMHhiOCwweDgzLDB4MDMsMHhjZCwweDM5Ci0sMHhjMywweGI4LDB4N2MsMHgwMywweGNkLDB4MzksMHhmNywweDA2LDB4ZjQsMHgzMywweDAwLDB4MTAsMHg3NSwweDA5LDB4YzcsMHgwNgotLDB4MzMsMHgzNywweDAyLDB4MDAsMHhlOSwweGY2LDB4ZmMsMHhmZiwweDBlLDB4MzMsMHgzNywweDc0LDB4MDMsMHhlOSwweGVkLDB4ZmMKLSwweGZmLDB4MDYsMHg4ZSwweDM0LDB4ZTgsMHhmNywweDE5LDB4ODMsMHgwZSwweGMyLDB4MzQsMHgwOCwweGJlLDB4MDMsMHgwMCwweGU5Ci0sMHhjYywweGZjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDA0LDB4MDQsMHgwNQotLDB4MDQsMHgwNCwweDA0LDB4MDAsMHgwMywweDAwLDB4MDMsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDQsMHgwMCwweDA4LDB4MDgsMHgwNSwweDA4LDB4MDgsMHgwOCwweDAwLDB4MDMsMHgwMCwweDAzLDB4MDMsMHgwMCwweDAwCi0sMHgwMiwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwMCwweDBhLDB4MTQsMHgwMCwweDAwLDB4MWEsMHgwMAotLDB4MWMsMHgwMCwweDFlLDB4MjAsMHgwMCwweDAwLDB4MDQsMHg0MSwweDA2LDB4MGIsMHgwOCwweGMyLDB4ZmYsMHhlNywweDA0LDB4MDMKLSwweDA2LDB4MDQsMHgwNCwweDA1LDB4MDQsMHgwNiwweDA0LDB4ODcsMHgwNCwweDAzLDB4MDYsMHgwNCwweDA0LDB4ODUsMHg0ZSwweGEyCi0sMHgwNCwweGNmLDB4MDQsMHhjZCwweGM3LDB4MDYsMHhhMiwweDM3LDB4MDAsMHgwMCwweGM3LDB4MDYsMHhhNiwweDM3LDB4MDAsMHgwMAotLDB4MjYsMHhhMSwweDIwLDB4MDAsMHgyNSwweDdmLDB4ZmYsMHhhMywweGY1LDB4MzYsMHgyNiwweGExLDB4MjIsMHgwMCwweGEzLDB4ZjcKLSwweDM2LDB4MjYsMHhhMSwweDI0LDB4MDAsMHhhMywweGY5LDB4MzYsMHhlOCwweDNiLDB4MTksMHg4YiwweGYwLDB4MjYsMHg4YiwweDBlCi0sMHgwZSwweDAwLDB4MmIsMHhjOCwweDgzLDB4ZTksMHgwZSwweGI4LDB4MDEsMHg4MCwweDgzLDB4ZjksMHgwNCwweDdjLDB4NTEsMHgyNgotLDB4OGEsMHg1NCwweDI4LDB4ODgsMHgxNiwweDFjLDB4MzcsMHg0MCwweDI2LDB4OGIsMHg2YywweDI2LDB4ODYsMHhjZCwweDNiLDB4Y2QKLSwweDg2LDB4Y2QsMHg4OSwweDBlLDB4YTQsMHgzNywweDc1LDB4MzgsMHg0MCwweDMyLDB4ZmYsMHgyNiwweDhhLDB4NWMsMHgyOSwweDgwCi0sMHhmYiwweDE1LDB4NzcsMHgyNSwweDgwLDB4ZmIsMHgwYSwweDc0LDB4MjAsMHg4MCwweGZiLDB4MDEsMHg3NCwweDFiLDB4YjgsMHgwNAotLDB4ODAsMHgyZSwweDNhLDB4OTcsMHgwMiwweDJlLDB4NzQsMHgwNywweDJlLDB4M2EsMHg5NywweDE4LDB4MmUsMHg3NSwweDExLDB4MzMKLSwweGMwLDB4ODAsMHhmYiwweDA5LDB4NzUsMHg0ZiwweDhiLDB4ZjMsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhmZiwweGZmCi0sMHg1MCwweDUyLDB4YTEsMHhhNCwweDM3LDB4ODYsMHhjNCwweDI2LDB4M2IsMHgwNiwweDI2LDB4MDAsMHg3YywweDMyLDB4MjYsMHg4MQotLDB4M2UsMHgyNiwweDAwLDB4MDAsMHgwNCwweDdlLDB4MjksMHg4ZCwweDc0LDB4MmEsMHgyNiwweDhiLDB4MTQsMHgyMiwweGQyLDB4NzQKLSwweDFmLDB4ODAsMHhlNiwweGJmLDB4ODAsMHhmZSwweDA5LDB4NzUsMHgxNywweGM3LDB4MDYsMHhhMiwweDM3LDB4MDEsMHgwMCwweDgwCi0sMHhmYSwweDA0LDB4NzUsMHgwYywweDI2LDB4OGIsMHg0NCwweDAyLDB4YTMsMHgwMywweDM3LDB4ODYsMHhjNCwweGEzLDB4ZDAsMHgzNAotLDB4NWEsMHg1OCwweGU5LDB4YjEsMHhmZiwweGJkLDB4NzIsMHgzNywweDJlLDB4OGEsMHg4NywweDJlLDB4MmUsMHgyMiwweGMwLDB4NzQKLSwweDE2LDB4MDUsMHg0NCwweDJlLDB4OGIsMHhmOCwweDJlLDB4OGIsMHgwNSwweDNlLDB4ODksMHg0NiwweDAwLDB4ODMsMHhjNSwweDAyCi0sMHg4MywweGM3LDB4MDIsMHgyMiwweGU0LDB4N2QsMHhlZiwweDhkLDB4NzQsMHgyYSwweDgzLDB4ZTksMHgwNCwweDc1LDB4MDMsMHhlOQotLDB4YTEsMHgwMCwweDI2LDB4OGIsMHgxNCwweDIyLDB4ZDIsMHg3NSwweDAzLDB4ZTksMHg3YywweDAwLDB4YzcsMHgwNiwweGE2LDB4MzcKLSwweDAxLDB4MDAsMHhiZiwweDcyLDB4MzcsMHg4YiwweDA1LDB4ODMsMHhjNywweDAyLDB4ODAsMHhlNiwweGJmLDB4ODAsMHhlNCwweDNmCi0sMHg4MCwweGZlLDB4MDksMHg3NSwweDIyLDB4ODAsMHhmYSwweDA0LDB4NzUsMHg1ZSwweGM3LDB4MDYsMHhhMiwweDM3LDB4MDEsMHgwMAotLDB4MjYsMHg4YiwweDQ0LDB4MDIsMHhhMywweDAzLDB4MzcsMHg4NiwweGM0LDB4YTMsMHhkMCwweDM0LDB4ODYsMHhjNCwweGM3LDB4MDYKLSwweGE2LDB4MzcsMHgwMCwweDAwLDB4ZTksMHg0NywweDAwLDB4M2IsMHhmZCwweDdlLDB4MTUsMHgyNiwweDhiLDB4MDQsMHhhOCwweDQwCi0sMHg3NCwweDA2LDB4YjgsMHgwNywweDgwLDB4ZTksMHgzOCwweGZmLDB4MzIsMHhjMCwweDI2LDB4OGIsMHgwNCwweGU5LDB4MmUsMHgwMAotLDB4M2EsMHhmNCwweDc1LDB4YjEsMHhjNywweDQ1LDB4ZmUsMHgwMCwweDAwLDB4ODAsMHhmZSwweDIyLDB4NzUsMHgwZCwweDNhLDB4ZDAKLSwweDc3LDB4MTYsMHhjNywweDA2LDB4YTYsMHgzNywweDAwLDB4MDAsMHhlOSwweDEzLDB4MDAsMHgzYSwweGQwLDB4NzUsMHgwOSwweGM3Ci0sMHgwNiwweGE2LDB4MzcsMHgwMCwweDAwLDB4ZTksMHgwNiwweDAwLDB4YjgsMHgwNSwweDgwLDB4ZTksMHgwMiwweGZmLDB4MzIsMHhmNgotLDB4MDMsMHhmMiwweDJiLDB4Y2EsMHhiOCwweDA1LDB4ODAsMHgyMywweGM5LDB4NzYsMHgwMywweGU5LDB4NjQsMHhmZiwweDc0LDB4MDMKLSwweGU5LDB4ZWQsMHhmZSwweDMzLDB4YzAsMHhiZiwweDcyLDB4MzcsMHg4YiwweDE1LDB4NDcsMHg0NywweDNiLDB4ZmQsMHg3ZiwweDFiCi0sMHhmNiwweGM2LDB4ODAsMHg3NCwweDE2LDB4ZjcsMHgwNiwweGE2LDB4MzcsMHgwMSwweDAwLDB4NzQsMHgwNiwweGI4LDB4MDgsMHg4MAotLDB4ZTksMHhjMywweGZlLDB4ZjYsMHhjNiwweDQwLDB4NzQsMHhlMCwweGI4LDB4MDcsMHg4MCwweGU5LDB4YjgsMHhmZSwweDdkLDB4NDIKLSwweGEzLDB4NDUsMHg0NCwweDI5LDB4NDQsMHgyOSwweGI3LDB4MjgsMHhlMiwweDI4LDB4ZWUsMHgyYiwweGYyLDB4MjgsMHhmNSwweDI4Ci0sMHgwMSwweDI5LDB4YWMsMHgyYSwweDQ0LDB4MjksMHg0NCwweDI5LDB4NDQsMHgyOSwweDQ0LDB4MjksMHg0NCwweDI5LDB4MDAsMHgwMAotLDB4NzMsMHgzNiwweDAwLDB4MDAsMHgwMywweDM2LDB4YzUsMHgzNSwweDgzLDB4MzUsMHg0NSwweDM1LDB4MDcsMHgzNSwweGQyLDB4MzQKLSwweDQ1LDB4MzQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4YTYsMHgzOCwweDAwLDB4MDAsMHhlMCwweDM4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweGYyLDB4MzMsMHgwMCwweDAwLDB4YTYsMHgzMywweDYwLDB4MzMsMHhmZCwweDMyLDB4YmMsMHgzMiwweDc3LDB4MzIsMHgzYywweDMyCi0sMHhmYiwweDMxLDB4NmEsMHgzMSwweDBhLDB4MzEsMHhlMCwweGUwLDB4MTAsMHgxMCwweDEwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4MDAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwLDB4ZTAsMHhlMCwweGUwCi0sMHhlMCwweDMzLDB4ZmYsMHgyNiwweGY2LDB4MDYsMHgxYSwweDAwLDB4ODAsMHg3NCwweDFiLDB4MjYsMHg4MCwweDI2LDB4MWEsMHgwMAotLDB4N2YsMHgyNiwweDhiLDB4M2UsMHgyNiwweDAwLDB4ODMsMHhlNywweDFmLDB4NzQsMHgwYiwweDI2LDB4ODAsMHgwZSwweDIwLDB4MDAKLSwweDgwLDB4MjYsMHgwMSwweDNlLDB4MGUsMHgwMCwweGMzLDB4NjAsMHgyZSwweDhiLDB4ODQsMHhhNiwweDMwLDB4MjYsMHhhMywweDE4Ci0sMHgwMCwweGQxLDB4ZTYsMHgyZSwweGZmLDB4OTQsMHg1MCwweDMwLDB4NjEsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhjNAotLDB4MmEsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MTYsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwNiwweDAwLDB4MjYKLSwweGM2LDB4MDYsMHgxOSwweDAwLDB4MDAsMHhlOCwweGJmLDB4MDUsMHhlOCwweDk4LDB4MDUsMHgyNiwweGM3LDB4MDYsMHgyNiwweDAwCi0sMHgwMCwweDA4LDB4MjYsMHhjNiwweDA2LDB4MjgsMHgwMCwweDQwLDB4MjYsMHhjNiwweDA2LDB4MjksMHgwMCwweDJhLDB4YmYsMHgyYQotLDB4MDAsMHgyNiwweGM2LDB4MDUsMHgwNCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MmEsMHhhMSwweDkzLDB4MzcsMHgzMywweGRiLDB4YTkKLSwweDQwLDB4MDAsMHg3NSwweDAyLDB4YjMsMHgwMSwweGE5LDB4MDAsMHgxMCwweDc0LDB4MDIsMHhiNywweDg4LDB4YTksMHgwMCwweDA4Ci0sMHg3NCwweDAzLDB4ODAsMHhjZiwweDQ0LDB4MjYsMHg4OSwweDVkLDB4MDIsMHhjMywweDgzLDB4MGUsMHhjMiwweDM0LDB4MjAsMHgyNgotLDB4YzcsMHgwNiwweDA0LDB4MDAsMHg2YiwweDJiLDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDMwLDB4MDAsMHgyNiwweGM3LDB4MDYKLSwweDA2LDB4MDAsMHgwYSwweDAwLDB4MjYsMHhjNywweDA2LDB4MGEsMHgwMCwweDA0LDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwCi0sMHgwMCwweGU4LDB4NjksMHgwNSwweGU4LDB4MmMsMHgwNSwweDI2LDB4YzcsMHgwNiwweDI2LDB4MDAsMHgwMCwweDIyLDB4MjYsMHhjNgotLDB4MDYsMHgyOCwweDAwLDB4NjAsMHgyNiwweGM2LDB4MDYsMHgyOSwweDAwLDB4MjksMHhiZiwweDJhLDB4MDAsMHgyNiwweGM2LDB4MDUKLSwweDA4LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgyZCwweDhkLDB4N2QsMHgwMiwweGJlLDB4NTQsMHgzNywweGI5LDB4MDMsMHgwMCwweGYzCi0sMHhhNSwweDI2LDB4YzYsMHgwNSwweDA4LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgyZSwweDhkLDB4N2QsMHgwMiwweGJlLDB4NWEsMHgzNwotLDB4YjksMHgwMywweDAwLDB4ZjMsMHhhNSwweGU4LDB4ZDQsMHgwNSwweGU4LDB4NjQsMHgwNSwweGI5LDB4MDYsMHgwMCwweGJlLDB4NTQKLSwweDM3LDB4OGQsMHgyZSwweDJjLDB4MDAsMHgyNiwweDhiLDB4NDYsMHgwMCwweDI5LDB4MDQsMHg4MywweGM2LDB4MDIsMHg4MywweGM1Ci0sMHgwMiwweDgzLDB4ZjksMHgwNCwweDc1LDB4MDIsMHg0NSwweDQ1LDB4ZTIsMHhlYiwweGMzLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMAotLDB4YzQsMHgyYSwweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgyNCwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA2LDB4MDAKLSwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAsMHgwMCwweGU4LDB4ZTQsMHgwNCwweGU4LDB4YTcsMHgwNCwweDI2LDB4YzcsMHgwNiwweDI2Ci0sMHgwMCwweDAwLDB4MTYsMHgyNiwweGM2LDB4MDYsMHgyOCwweDAwLDB4NjAsMHgyNiwweGM2LDB4MDYsMHgyOSwweDAwLDB4MjgsMHhiZgotLDB4MmEsMHgwMCwweGU4LDB4NWIsMHgwNiwweGU4LDB4NzQsMHgwNSwweGU4LDB4MDQsMHgwNSwweGMzLDB4MjYsMHhjNywweDA2LDB4MDQKLSwweDAwLDB4YzQsMHgyYSwweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgxYSwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA2Ci0sMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAsMHgwMCwweGU4LDB4YTMsMHgwNCwweGU4LDB4NjYsMHgwNCwweDI2LDB4YzcsMHgwNgotLDB4MjYsMHgwMCwweDAwLDB4MGMsMHgyNiwweGM2LDB4MDYsMHgyOCwweDAwLDB4NjAsMHgyNiwweGM2LDB4MDYsMHgyOSwweDAwLDB4MjcKLSwweGJmLDB4MmEsMHgwMCwweGU4LDB4MjEsMHgwNSwweGMzLDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweGM0LDB4MmEsMHgyNiwweGM3Ci0sMHgwNiwweDBlLDB4MDAsMHgyMCwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDBhLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwYQotLDB4MDAsMHgwNCwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMCwweDAwLDB4ZTgsMHg0YiwweDA0LDB4ZTgsMHgyNCwweDA0LDB4MjYKLSwweGM3LDB4MDYsMHgyNiwweDAwLDB4MDAsMHgxMiwweDI2LDB4YzYsMHgwNiwweDI4LDB4MDAsMHg0MCwweDI2LDB4YzYsMHgwNiwweDI5Ci0sMHgwMCwweDI2LDB4YmYsMHgyYSwweDAwLDB4ZTgsMHhmNCwweDA0LDB4ZTgsMHg4NCwweDA0LDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNAotLDB4MDAsMHhjNCwweDJhLDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDM0LDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDYKLSwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMCwweDAwLDB4ZTgsMHgwZCwweDA0LDB4ZTgsMHhlNiwweDAzLDB4MjYsMHhjNywweDA2Ci0sMHgyNiwweDAwLDB4MDAsMHgyNiwweDI2LDB4YzYsMHgwNiwweDI4LDB4MDAsMHg0MCwweDI2LDB4YzYsMHgwNiwweDI5LDB4MDAsMHgyNQotLDB4YmYsMHgyYSwweDAwLDB4ZTgsMHhiNiwweDA0LDB4ZTgsMHg0NiwweDA0LDB4ZTgsMHhmYSwweDA0LDB4YzMsMHgyNiwweGM3LDB4MDYKLSwweDA0LDB4MDAsMHhjNCwweDJhLDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDM4LDB4MDAsMHhhMSwweGEyLDB4MzcsMHg1MCwweDBiCi0sMHhjMCwweDc1LDB4MDcsMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MzQsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwNgotLDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOSwweDAwLDB4MDAsMHhlOCwweDk5LDB4MDMsMHhlOCwweGE0LDB4ZmQsMHgyNiwweGM3LDB4NDUKLSwweDI2LDB4MDAsMHgyYSwweDU4LDB4MGIsMHhjMCwweDc1LDB4MDYsMHgyNiwweGM3LDB4NDUsMHgyNiwweDAwLDB4MjYsMHhhMSwweDFjCi0sMHgzNywweGMxLDB4ZTAsMHgwNCwweDI2LDB4ODgsMHg0NSwweDI4LDB4MjYsMHhjNiwweDQ1LDB4MjksMHgyNCwweDgzLDB4YzcsMHgyYQotLDB4ZTgsMHgyOSwweDA0LDB4ZTgsMHhhMCwweDA0LDB4ZTgsMHgyMiwweDA1LDB4ZTgsMHhmOCwweDAzLDB4ZTgsMHgwOSwweDA0LDB4YzMKLSwweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHhjNCwweDJhLDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDMyLDB4MDAsMHgyNiwweGM3Ci0sMHgwNiwweDA2LDB4MDAsMHgwNiwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMCwweDAwLDB4ZTgsMHg0NSwweDAzLDB4ZTgsMHg1MAotLDB4ZmQsMHgyNiwweGM3LDB4NDUsMHgyNiwweDAwLDB4MjQsMHhhMSwweDFjLDB4MzcsMHhjMSwweGUwLDB4MDQsMHgyNiwweDg4LDB4NDUKLSwweDI4LDB4MjYsMHhjNiwweDQ1LDB4MjksMHgyMywweDgzLDB4YzcsMHgyYSwweGU4LDB4ZTAsMHgwMywweGU4LDB4NmMsMHgwNCwweGU4Ci0sMHg4YSwweDA0LDB4ZTgsMHg5YywweDA0LDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4YzQsMHgyYSwweDI2LDB4YzcsMHgwNgotLDB4MGUsMHgwMCwweDM0LDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDYsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAKLSwweDAwLDB4ZTgsMHhmZiwweDAyLDB4ZTgsMHgwYSwweGZkLDB4MjYsMHhjNywweDQ1LDB4MjYsMHgwMCwweDI2LDB4YTEsMHgxYywweDM3Ci0sMHhjMSwweGUwLDB4MDQsMHgyNiwweDg4LDB4NDUsMHgyOCwweDI2LDB4YzYsMHg0NSwweDI5LDB4MjIsMHg4MywweGM3LDB4MmEsMHhlOAotLDB4OWEsMHgwMywweGU4LDB4YzcsMHgwMywweGU4LDB4NTcsMHgwMywweGU4LDB4ZjgsMHgwMywweGU4LDB4NzgsMHgwNCwweGU4LDB4OGEKLSwweDA0LDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4NzQsMHg0NSwweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgzZSwweDAwCi0sMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDYsMHgwMCwweDI2LDB4YzcsMHgwNiwweDBhLDB4MDAsMHgwNCwweDAwLDB4MjYsMHhjNgotLDB4MDYsMHgxOSwweDAwLDB4MDAsMHhlOCwweGZjLDB4MDIsMHhlOCwweGE5LDB4MDIsMHg4MywweDNlLDB4OGQsMHgzNywweDAzLDB4NzUKLSwweDAxLDB4OTAsMHgyNiwweGM3LDB4MDYsMHgyNiwweDAwLDB4MDAsMHgzMCwweDI2LDB4YzYsMHgwNiwweDI4LDB4MDAsMHg1MCwweDI2Ci0sMHhjNiwweDA2LDB4MjksMHgwMCwweDIwLDB4YmYsMHgyYSwweDAwLDB4ZTgsMHhkMCwweDAzLDB4ZTgsMHgwMSwweDAzLDB4ZTgsMHhiNQotLDB4MDMsMHhlOCwweDlmLDB4MDMsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHg2MSwweDQzLDB4YjksMHhmMCwweDAwLDB4ODMKLSwweGU5LDB4MDIsMHgyNiwweDg5LDB4MGUsMHgwZSwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDAyLDB4MDAsMHgyNiwweGM2Ci0sMHgwNiwweDE5LDB4MDAsMHgwMCwweDI2LDB4YzcsMHgwNiwweDFhLDB4MDAsMHgwMCwweDAwLDB4MjYsMHhjNywweDA2LDB4MWMsMHgwMAotLDB4MDAsMHgwMCwweDI2LDB4YzcsMHgwNiwweDFlLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHg0NywweDAyLDB4ODMsMHhlOSwweDBlLDB4ODYKLSwweGNkLDB4MjYsMHg4OSwweDBlLDB4MjYsMHgwMCwweDg2LDB4Y2QsMHgyNiwweGM2LDB4MDYsMHgyOCwweDAwLDB4MDAsMHgyNiwweGM2Ci0sMHgwNiwweDI5LDB4MDAsMHgwOCwweGJmLDB4MmEsMHgwMCwweDgzLDB4ZTksMHgwNCwweDI2LDB4ODksMHgwZCwweDI2LDB4YzYsMHg0NQotLDB4MDEsMHgyNiwweDhkLDB4N2QsMHgwMiwweDgzLDB4ZTksMHgwMiwweGJiLDB4MDEsMHgwMCwweGI4LDB4MzAsMHgzMCwweDRiLDB4NzUKLSwweDE3LDB4YmIsMHgwYSwweDAwLDB4OGEsMHhjNCwweDI2LDB4ODgsMHgwNSwweGIwLDB4MzEsMHg4MCwweGM0LDB4MDEsMHg4MCwweGZjCi0sMHgzYSwweDc1LDB4MGEsMHhiNCwweDYxLDB4ZTksMHgwNSwweDAwLDB4MjYsMHg4OCwweDA1LDB4MDQsMHgwMSwweDQ3LDB4NDksMHg3NQotLDB4ZGQsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHgwNCwweDQ1LDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDEyLDB4MDAKLSwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwNiwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMCwweDAxLDB4ZTgsMHhlNSwweDAxCi0sMHhlOCwweGQwLDB4MDEsMHgyNiwweGM3LDB4MDYsMHgyNiwweDAwLDB4MDAsMHgwNCwweDI2LDB4YzYsMHgwNiwweDI4LDB4MDAsMHgwMAotLDB4MjYsMHhjNiwweDA2LDB4MjksMHgwMCwweDA3LDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4YzQsMHgyYSwweDI2LDB4YzcKLSwweDA2LDB4MGUsMHgwMCwweDIwLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDYsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5Ci0sMHgwMCwweDA2LDB4ZTgsMHgwNCwweDAyLDB4ZTgsMHg5YiwweDAxLDB4MjYsMHhjNywweDA2LDB4MjYsMHgwMCwweDAwLDB4MTIsMHgyNgotLDB4YzYsMHgwNiwweDI4LDB4MDAsMHgwMCwweDI2LDB4YzYsMHgwNiwweDI5LDB4MDAsMHgwNiwweGJmLDB4MmEsMHgwMCwweGU4LDB4NmIKLSwweDAyLDB4ZTgsMHhmYiwweDAxLDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4YzQsMHgyYSwweDI2LDB4YzcsMHgwNiwweDBlCi0sMHgwMCwweDIwLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDYsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAsMHgwNQotLDB4ZTgsMHhjNiwweDAxLDB4ZTgsMHg1ZCwweDAxLDB4MjYsMHhjNywweDA2LDB4MjYsMHgwMCwweDAwLDB4MTIsMHgyNiwweGM2LDB4MDYKLSwweDI4LDB4MDAsMHgwMCwweDI2LDB4YzYsMHgwNiwweDI5LDB4MDAsMHgwNSwweGJmLDB4MmEsMHgwMCwweGU4LDB4MmQsMHgwMiwweGU4Ci0sMHhiZCwweDAxLDB4YzMsMHhmZiwweDA2LDB4ODIsMHgzNCwweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHgzZCwweDQxLDB4MjYsMHhjNwotLDB4MDYsMHgwZSwweDAwLDB4MjAsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwZSwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTkKLSwweDAwLDB4MDQsMHhlOCwweDg0LDB4MDEsMHhlOCwweDFiLDB4MDEsMHgyNiwweGM3LDB4MDYsMHgyNiwweDAwLDB4MDAsMHgxMiwweDI2Ci0sMHhjNiwweDA2LDB4MjgsMHgwMCwweDAwLDB4MjYsMHhjNiwweDA2LDB4MjksMHgwMCwweDA0LDB4YmYsMHgyYSwweDAwLDB4ZTgsMHhlYgotLDB4MDEsMHhlOCwweDdiLDB4MDEsMHhjMywweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHg2NywweDQyLDB4MjYsMHhjNywweDA2LDB4MGUKLSwweDAwLDB4MjAsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwOCwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMCwweDAzCi0sMHhlOCwweDQ2LDB4MDEsMHhlOCwweGRkLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgyNiwweDAwLDB4MDAsMHgxMiwweDI2LDB4YzYsMHgwNgotLDB4MjgsMHgwMCwweDAwLDB4MjYsMHhjNiwweDA2LDB4MjksMHgwMCwweDAzLDB4YmYsMHgyYSwweDAwLDB4ZTgsMHhhZCwweDAxLDB4ZTgKLSwweDNkLDB4MDEsMHhjMywweGZmLDB4MDYsMHg4NCwweDM0LDB4MjYsMHhjNywweDA2LDB4MDQsMHgwMCwweDY3LDB4NDIsMHgyNiwweGM3Ci0sMHgwNiwweDBlLDB4MDAsMHgyNCwweDAwLDB4MjYsMHhjNywweDA2LDB4MDYsMHgwMCwweDA4LDB4MDAsMHgyNiwweGM2LDB4MDYsMHgxOQotLDB4MDAsMHgwMiwweGU4LDB4MDQsMHgwMSwweGU4LDB4OWIsMHgwMCwweDI2LDB4YzcsMHgwNiwweDI2LDB4MDAsMHgwMCwweDE2LDB4MjYKLSwweGM2LDB4MDYsMHgyOCwweDAwLDB4MDAsMHgyNiwweGM2LDB4MDYsMHgyOSwweDAwLDB4MDIsMHhiZiwweDJhLDB4MDAsMHgyNiwweGM2Ci0sMHgwNSwweDA0LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgwMSwweGExLDB4MGYsMHgzNywweDg2LDB4ZTAsMHhmNiwweDA2LDB4NmYsMHgzNwotLDB4MDEsMHg3NSwweDBmLDB4MzksMHgwNiwweGNjLDB4MzQsMHg3NCwweDA5LDB4OGIsMHhkOCwweGI4LDB4ODksMHgwMywweGNkLDB4MzkKLSwweDhiLDB4YzMsMHhhMywweGNjLDB4MzQsMHgyNiwweDg5LDB4NDUsMHgwMiwweDhkLDB4N2QsMHgwNCwweGU4LDB4M2QsMHgwMSwweGU4Ci0sMHhjZCwweDAwLDB4YzMsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4YzQsMHgyYSwweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgxYwotLDB4MDAsMHhhMSwweGEyLDB4MzcsMHg1MCwweDBiLDB4YzAsMHg3NSwweDA3LDB4MjYsMHhjNywweDA2LDB4MGUsMHgwMCwweDE4LDB4MDAKLSwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwNiwweDAwLDB4MjYsMHhjNiwweDA2LDB4MTksMHgwMCwweDAwLDB4ZTgsMHgyMywweDAwCi0sMHhlOCwweDJlLDB4ZmEsMHgyNiwweGM3LDB4NDUsMHgyNiwweDAwLDB4MGUsMHg1OCwweDBiLDB4YzAsMHg3NSwweDA2LDB4MjYsMHhjNwotLDB4NDUsMHgyNiwweDAwLDB4MGEsMHgyNiwweGM2LDB4NDUsMHgyOSwweDAwLDB4ODMsMHhjNywweDJhLDB4ZTgsMHhiZCwweDAwLDB4ZTgKLSwweGZmLDB4MDAsMHhjMywweDU2LDB4NTcsMHg1MSwweGI5LDB4MDMsMHgwMCwweGJlLDB4ZDEsMHgzNiwweGJmLDB4MjAsMHgwMCwweGYzCi0sMHhhNSwweDU5LDB4NWYsMHg1ZSwweGMzLDB4NTYsMHg1NywweDUxLDB4YjksMHgwMywweDAwLDB4YmUsMHhkMSwweDM2LDB4YmYsMHgxYQotLDB4MDAsMHhmMywweGE1LDB4NTksMHg1ZiwweDVlLDB4YzMsMHgyNiwweGM3LDB4MDYsMHgxYSwweDAwLDB4YzAsMHgwMCwweDI2LDB4YzcKLSwweDA2LDB4MWMsMHgwMCwweDAwLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgxZSwweDAwLDB4MDAsMHgxMCwweGMzLDB4MjYsMHhjNywweDA2Ci0sMHgxYSwweDAwLDB4YzAsMHgwMCwweDI2LDB4YzcsMHgwNiwweDFjLDB4MDAsMHgwMCwweDAwLDB4MjYsMHhjNywweDA2LDB4MWUsMHgwMAotLDB4MDAsMHgwOCwweGMzLDB4MjYsMHhjNywweDA2LDB4MWEsMHgwMCwweGMwLDB4MDAsMHgyNiwweGM3LDB4MDYsMHgxYywweDAwLDB4MDAKLSwweDAwLDB4MjYsMHhjNywweDA2LDB4MWUsMHgwMCwweDAwLDB4MDIsMHhjMywweDI2LDB4YzcsMHgwNiwweDFhLDB4MDAsMHhjMCwweDAwCi0sMHgyNiwweGM3LDB4MDYsMHgxYywweDAwLDB4ZmYsMHhmZiwweDI2LDB4YzcsMHgwNiwweDFlLDB4MDAsMHhmZiwweGZmLDB4YzMsMHgyNgotLDB4YzYsMHgwNSwweDA4LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgwMiwweDhkLDB4N2QsMHgwMiwweGJlLDB4MDUsMHgzNywweGI5LDB4MDMKLSwweDAwLDB4ZjMsMHhhNSwweGMzLDB4MjYsMHhjNiwweDA1LDB4MDQsMHgyNiwweGM2LDB4NDUsMHgwMSwweDA2LDB4YTEsMHgwZCwweDM3Ci0sMHgyNiwweDg5LDB4NDUsMHgwMiwweDhkLDB4N2QsMHgwNCwweGMzLDB4MjYsMHhjNiwweDA1LDB4MDQsMHgyNiwweGM2LDB4NDUsMHgwMQotLDB4MDcsMHhhMSwweDBiLDB4MzcsMHgyNiwweDg5LDB4NDUsMHgwMiwweDgzLDB4YzcsMHgwNCwweGMzLDB4YTEsMHhhMiwweDM3LDB4MGIKLSwweGMwLDB4NzQsMHgxMywweDI2LDB4YzYsMHgwNSwweDA0LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgwOSwweGExLDB4MDMsMHgzNywweDI2Ci0sMHg4OSwweDQ1LDB4MDIsMHg4MywweGM3LDB4MDQsMHhjMywweDI2LDB4YzYsMHgwNSwweDA4LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgwMgotLDB4OGQsMHg3ZCwweDAyLDB4YmUsMHgwNSwweDM3LDB4YjksMHgwMywweDAwLDB4ZjMsMHhhNSwweGMzLDB4MjYsMHhjNiwweDA1LDB4MDYKLSwweDI2LDB4YzYsMHg0NSwweDAxLDB4MGIsMHg4ZCwweDdkLDB4MDIsMHhiZSwweGVmLDB4MzYsMHhiOSwweDAyLDB4MDAsMHhmMywweGE1Ci0sMHhjMywweDI2LDB4YzYsMHgwNSwweDA2LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgyMCwweGExLDB4NjgsMHgzNywweDI2LDB4ODksMHg0NQotLDB4MDIsMHhhMSwweDZhLDB4MzcsMHgyNiwweDg4LDB4NjUsMHgwNSwweGMxLDB4ZTAsMHgwNCwweDI2LDB4ODgsMHg0NSwweDA0LDB4ODMKLSwweGM3LDB4MDYsMHhjMywweDI2LDB4YzYsMHgwNSwweDA0LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgyMSwweDI2LDB4YzcsMHg0NSwweDAyCi0sMHgwMCwweDAwLDB4ODMsMHhjNywweDA0LDB4YzMsMHgyNiwweGM2LDB4MDUsMHgxNCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MjIsMHg4ZAotLDB4N2QsMHgwMiwweGJlLDB4MWYsMHgzNywweGI5LDB4MDksMHgwMCwweGYzLDB4YTUsMHhjMywweDI2LDB4YzYsMHgwNSwweDBjLDB4MjYKLSwweGM2LDB4NDUsMHgwMSwweDIzLDB4OGQsMHg3ZCwweDAyLDB4MWUsMHgwZSwweDFmLDB4OGQsMHgzNiwweDQwLDB4NTQsMHhiOSwweDAzCi0sMHgwMCwweGYzLDB4YTUsMHgzMywweGMwLDB4YjksMHgwMiwweDAwLDB4ZjMsMHhhYiwweDFmLDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwOAotLDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgyOCwweDhkLDB4N2QsMHgwMiwweGJlLDB4ZDEsMHgzNiwweGI5LDB4MDMsMHgwMCwweGYzLDB4YTUKLSwweGMzLDB4MjYsMHhjNiwweDA1LDB4MDgsMHgyNiwweGM2LDB4NDUsMHgwMSwweDI5LDB4YTEsMHhjMiwweDM0LDB4ODYsMHhlMCwweDI2Ci0sMHg4OSwweDQ1LDB4MDIsMHhhMSwweDliLDB4MzYsMHgyNiwweDg5LDB4NDUsMHgwNCwweDI2LDB4ODgsMHg0NSwweDA2LDB4MjYsMHg4OAotLDB4NDUsMHgwNywweDhkLDB4N2QsMHgwOCwweGMzLDB4MjYsMHhjNiwweDA1LDB4MDYsMHgyNiwweGM2LDB4NDUsMHgwMSwweDJiLDB4OGQKLSwweDdkLDB4MDIsMHhiZSwweGJiLDB4MzYsMHhiOSwweDAyLDB4MDAsMHhmMywweGE1LDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwNiwweDI2Ci0sMHhjNiwweDQ1LDB4MDEsMHgyYywweDhkLDB4N2QsMHgwMiwweGJlLDB4ZTUsMHgzNiwweGI5LDB4MDIsMHgwMCwweGYzLDB4YTUsMHhjMwotLDB4MjYsMHhjNiwweDA1LDB4MDQsMHgyNiwweGM2LDB4NDUsMHgwMSwweDMwLDB4YTEsMHgzNywweDM3LDB4ODYsMHhlMCwweDI2LDB4ODkKLSwweDQ1LDB4MDIsMHg4ZCwweDdkLDB4MDQsMHhjMywweDI2LDB4YzcsMHgwNiwweDBlLDB4MDAsMHgxZSwweDAwLDB4MjYsMHhjNywweDA2Ci0sMHgwNiwweDAwLDB4MDIsMHgwMCwweDI2LDB4YzYsMHgwNiwweDE5LDB4MDAsMHgwMCwweGU4LDB4NmMsMHhmZSwweGU4LDB4MDMsMHhmZQotLDB4MjYsMHhjNywweDA2LDB4MjYsMHgwMCwweDAwLDB4MTAsMHgyNiwweGM2LDB4MDYsMHgyOCwweDAwLDB4MzAsMHgyNiwweGM2LDB4MDYKLSwweDI5LDB4MDAsMHgxMSwweGJmLDB4MmEsMHgwMCwweGU4LDB4MzUsMHgwMCwweGU4LDB4NDUsMHgwMCwweGU4LDB4NTUsMHgwMCwweGMzCi0sMHgyNiwweGM3LDB4MDYsMHgwZSwweDAwLDB4MTIsMHgwMCwweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwMiwweDAwLDB4MjYsMHhjNgotLDB4MDYsMHgxOSwweDAwLDB4MDAsMHhlOCwweDMyLDB4ZmUsMHhlOCwweGM5LDB4ZmQsMHgyNiwweGM3LDB4MDYsMHgyNiwweDAwLDB4MDAKLSwweDA0LDB4MjYsMHhjNiwweDA2LDB4MjgsMHgwMCwweDMwLDB4MjYsMHhjNiwweDA2LDB4MjksMHgwMCwweDEzLDB4YzMsMHgyNiwweGM2Ci0sMHgwNSwweDA0LDB4MjYsMHhjNiwweDQ1LDB4MDEsMHgwYywweDI2LDB4YzcsMHg0NSwweDAyLDB4MDAsMHgwMSwweDgzLDB4YzcsMHgwNAotLDB4YzMsMHgyNiwweGM2LDB4MDUsMHgwNCwweDI2LDB4YzYsMHg0NSwweDAxLDB4MGUsMHgyNiwweGM3LDB4NDUsMHgwMiwweDAwLDB4MDIKLSwweDgzLDB4YzcsMHgwNCwweGMzLDB4MjYsMHhjNiwweDA1LDB4MDQsMHgyNiwweGM2LDB4NDUsMHgwMSwweDIxLDB4MjYsMHhjNywweDQ1Ci0sMHgwMiwweDAwLDB4MDAsMHg4MywweGM3LDB4MDQsMHhjMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4YjMsMHgzOSwweGM5LDB4MzksMHg4MywweDNhLDB4YjMsMHgzOSwweGIzLDB4MzksMHhiMywweDM5LDB4MWMsMHgzYSwweDFjLDB4M2EKLSwweGEzLDB4YjYsMHgzNCwweGExLDB4ZTksMHgzNiwweGEzLDB4MTEsMHgzNywweGEzLDB4ZDIsMHgzNCwweGExLDB4ZWIsMHgzNiwweGEzCi0sMHgxMywweDM3LDB4YTMsMHhkNCwweDM0LDB4YTEsMHhlZCwweDM2LDB4YTMsMHgxNSwweDM3LDB4YTMsMHhkNiwweDM0LDB4YTEsMHgwMQotLDB4MzcsMHhhMywweGNlLDB4MzQsMHhhMSwweGY3LDB4MzYsMHhhMywweDE3LDB4MzcsMHhhMywweGRjLDB4MzQsMHhhMSwweGY5LDB4MzYKLSwweGEzLDB4MTksMHgzNywweGEzLDB4ZGUsMHgzNCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDIsMHgwMCwweDc1LDB4MGMsMHgzMywweGMwCi0sMHhhMCwweDllLDB4MzYsMHg4YiwweGYwLDB4MmUsMHhmZiwweGE0LDB4NTAsMHgzOSwweGU5LDB4MGYsMHgwMSwweGJlLDB4MDcsMHgwMAotLDB4ZTksMHgxOSwweGYxLDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MCwweDc0LDB4ZjMsMHhjNiwweDA2LDB4YTAsMHgzNiwweDAyLDB4YzYKLSwweDA2LDB4NmUsMHgzNywweDA4LDB4YzYsMHgwNiwweDcwLDB4MzcsMHgwMiwweGI4LDB4ODgsMHgwMywweGNkLDB4MzksMHhmNiwweDA2Ci0sMHg2ZiwweDM3LDB4MDEsMHg3NSwweDRhLDB4YTEsMHhkMSwweDM2LDB4M2EsMHgwNiwweGU5LDB4MzYsMHg3NSwweDQxLDB4M2EsMHgyNgotLDB4ZWEsMHgzNiwweDc1LDB4M2IsMHhhMSwweGQzLDB4MzYsMHgzYSwweDA2LDB4ZWIsMHgzNiwweDc1LDB4MzIsMHgzYSwweDI2LDB4ZWMKLSwweDM2LDB4NzUsMHgyYywweGExLDB4ZDUsMHgzNiwweDNhLDB4MDYsMHhlZCwweDM2LDB4NzUsMHgyMywweDNhLDB4MjYsMHhlZSwweDM2Ci0sMHg3NSwweDFkLDB4YzYsMHgwNiwweDcwLDB4MzcsMHgwMiwweGZlLDB4MGUsMHg2ZSwweDM3LDB4NzUsMHgwZiwweGI4LDB4ODgsMHgwMwotLDB4Y2QsMHgzYSwweDgzLDB4MGUsMHg5YiwweDM2LDB4MTIsMHhjNiwweDA2LDB4YTAsMHgzNiwweDBjLDB4ZTksMHhhOCwweGYwLDB4YTEKLSwweDA1LDB4MzcsMHgyNiwweDNiLDB4MDYsMHgyMCwweDAwLDB4NzUsMHg0MCwweGExLDB4MDcsMHgzNywweDI2LDB4M2IsMHgwNiwweDIyCi0sMHgwMCwweDc1LDB4MzYsMHhhMSwweDA5LDB4MzcsMHgyNiwweDNiLDB4MDYsMHgyNCwweDAwLDB4NzUsMHgyYywweGEwLDB4OWUsMHgzNgotLDB4M2MsMHgwMiwweDc1LDB4MDgsMHgyNiwweGY2LDB4MDYsMHgxOCwweDAwLDB4MDgsMHg3NSwweDQ3LDB4YzYsMHgwNiwweDZlLDB4MzcKLSwweDA4LDB4ZmUsMHgwZSwweDcwLDB4MzcsMHg3NSwweDFjLDB4YzYsMHgwNiwweDcwLDB4MzcsMHgwMiwweGU1LDB4MDIsMHgwZCwweDAxCi0sMHgwNCwweDI1LDB4ZWYsMHhmZiwweGU3LDB4MDIsMHhlOSwweDVlLDB4ZjAsMHhjNiwweDA2LDB4NzAsMHgzNywweDAyLDB4YzYsMHgwNgotLDB4NmUsMHgzNywweDA4LDB4ZTUsMHgwMiwweDI1LDB4ZmYsMHhmYiwweDBkLDB4MDEsMHgwMCwweDI1LDB4ZWYsMHhmZiwweGU3LDB4MDIKLSwweGU5LDB4NDQsMHhmMCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgwMSwweDc0LDB4MjUsMHgyNiwweGY2LDB4MDYsMHgxOCwweDAwCi0sMHgwOCwweDc1LDB4ZWQsMHg4MSwweDI2LDB4OWIsMHgzNiwweDdmLDB4ZmYsMHhiOCwweDg5LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4NAotLDB4MDMsMHhjZCwweDNhLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwNiwweDgzLDB4MjYsMHhjMiwweDM0LDB4YWYsMHhlOSwweDE3LDB4ZjAKLSwweGExLDB4MDEsMHgzNywweDNhLDB4MjYsMHgwZiwweDM3LDB4N2YsMHhjNywweGU5LDB4ZjcsMHhmZSwweDgzLDB4MjYsMHg5YiwweDM2Ci0sMHhlYywweGU4LDB4MmEsMHgwZCwweDgxLDB4MGUsMHg5YiwweDM2LDB4ODAsMHgwMCwweGJiLDB4ZmYsMHg3ZiwweGNkLDB4NTMsMHhjNgotLDB4MDYsMHhhMCwweDM2LDB4MDIsMHhlOSwweGYwLDB4ZWYsMHg4MywweDBlLDB4OWIsMHgzNiwweDExLDB4YzYsMHgwNiwweGEwLDB4MzYKLSwweDBjLDB4ZTksMHhmOSwweGVmLDB4NDQsMHgzYiwweDJjLDB4M2IsMHhjNywweDJhLDB4NmIsMHgzYiwweDQ0LDB4M2IsMHhjNywweDJhCi0sMHhjNywweDJhLDB4YzcsMHgyYSwweGEzLDB4YjYsMHgzNCwweDgxLDB4MGUsMHhjMiwweDM0LDB4MDAsMHgyMCwweGY3LDB4MDYsMHg0MQotLDB4MzcsMHgwMSwweDAwLDB4NzQsMHgxYiwweDhjLDB4YzMsMHhjNywweDA2LDB4NDEsMHgzNywweDAwLDB4MDAsMHhiOCwweDdmLDB4MDMKLSwweGNkLDB4M2EsMHgzMywweGMwLDB4OGUsMHhjMCwweGJmLDB4NTQsMHgzNywweGI5LDB4MDYsMHgwMCwweGYzLDB4YWIsMHg4ZSwweGMzCi0sMHgzMywweGMwLDB4YTAsMHg5ZSwweDM2LDB4OGIsMHhmMCwweDJlLDB4ZmYsMHhhNCwweGU0LDB4M2EsMHhmNywweDA2LDB4OWIsMHgzNgotLDB4MDAsMHgwMSwweDc1LDB4MjEsMHg4MywweDI2LDB4YzIsMHgzNCwweGJmLDB4YTEsMHhhOSwweDM2LDB4ZTcsMHgwMCwweGExLDB4OWIKLSwweDM2LDB4ZTksMHgwOSwweDAwLDB4YTEsMHg5YiwweDM2LDB4ODEsMHgyNiwweDliLDB4MzYsMHhmZiwweGRmLDB4YTksMHgwMCwweDIwCi0sMHg3NSwweDA2LDB4ZTksMHg2ZSwweDAwLDB4ZTksMHg2ZiwweGVmLDB4ODMsMHgwZSwweDk5LDB4MzYsMHgwNCwweGM3LDB4MDYsMHgzNwotLDB4MzcsMHgwMSwweDAwLDB4YzYsMHgwNiwweGNhLDB4MzQsMHgwMSwweGU5LDB4NTgsMHgwMCwweDgzLDB4MGUsMHg5YiwweDM2LDB4NDAKLSwweGU4LDB4NTgsMHgwMCwweGExLDB4MDUsMHgzNywweDNiLDB4MDYsMHhlOSwweDM2LDB4NzUsMHgzNywweGExLDB4MDcsMHgzNywweDNiCi0sMHgwNiwweGViLDB4MzYsMHg3NSwweDJlLDB4YTEsMHgwOSwweDM3LDB4M2IsMHgwNiwweGVkLDB4MzYsMHg3NSwweDI1LDB4ZmUsMHgwZQotLDB4NzEsMHgzNywweDc1LDB4MWMsMHhiOCwweDg3LDB4MDMsMHhjZCwweDNhLDB4ODMsMHgwZSwweDk5LDB4MzYsMHgxMCwweGExLDB4NTAKLSwweDM3LDB4YzcsMHgwNiwweDUwLDB4MzcsMHgwMCwweDAwLDB4MDksMHgwNiwweDk5LDB4MzYsMHhjNiwweDA2LDB4YTAsMHgzNiwweDA4Ci0sMHhlOSwweDE0LDB4ZWYsMHg4MywweDBlLDB4OTksMHgzNiwweDA0LDB4YzcsMHgwNiwweDM3LDB4MzcsMHgwMywweDAwLDB4YzYsMHgwNgotLDB4Y2EsMHgzNCwweDAzLDB4YzYsMHgwNiwweGEwLDB4MzYsMHgwYSwweGU5LDB4ZmMsMHhlZSwweGExLDB4ZDEsMHgzNiwweDI2LDB4M2IKLSwweDA2LDB4MjAsMHgwMCwweDc1LDB4MTUsMHhhMSwweGQzLDB4MzYsMHgyNiwweDNiLDB4MDYsMHgyMiwweDAwLDB4NzUsMHgxMiwweGExCi0sMHhkNSwweDM2LDB4MjYsMHgzYiwweDA2LDB4MjQsMHgwMCwweDc1LDB4MGYsMHhjMywweDhkLDB4MzYsMHgyMCwweDAwLDB4ZTksMHgwYgotLDB4MDAsMHg4ZCwweDM2LDB4MjIsMHgwMCwweGU5LDB4MDQsMHgwMCwweDhkLDB4MzYsMHgyNCwweDAwLDB4ODMsMHhjNCwweDAyLDB4ZjcKLSwweDA2LDB4ZTYsMHgzNCwweDAxLDB4MDAsMHg3NCwweDE1LDB4MjYsMHgzYSwweDA0LDB4NzcsMHgwOCwweDcyLDB4MGUsMHgyNiwweDNhCi0sMHg2NCwweDAxLDB4NzIsMHgwOCwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDYsMHhlOSwweGFiLDB4ZWUsMHhlOCwweDdjLDB4MGEsMHg4YwotLDB4YzAsMHgzZCwweGZmLDB4ZmYsMHg3NCwweDFiLDB4MjYsMHhjNiwweDA2LDB4MTgsMHgwMCwweDEwLDB4MjYsMHhjNywweDA2LDB4MDQKLSwweDAwLDB4NDksMHgzYywweDI2LDB4YzcsMHgwNiwweDA2LDB4MDAsMHgwYywweDAwLDB4Y2QsMHg1MCwweGI5LDB4NGUsMHgwMCwweGUyCi0sMHhmZSwweGM2LDB4MDYsMHhhMCwweDM2LDB4MGEsMHhlOSwweDk0LDB4ZWUsMHhlOSwweDdiLDB4ZWUsMHg4ZiwweDNjLDB4MDYsMHgzZAotLDB4MDYsMHgzZCwweDA2LDB4M2QsMHhkMiwweDNjLDB4ZWEsMHgzYywweDA2LDB4M2QsMHgwNiwweDNkLDB4YTMsMHhiNiwweDM0LDB4ODEKLSwweDI2LDB4YzIsMHgzNCwweGFmLDB4ZGYsMHhjNywweDA2LDB4NGMsMHgzNywweDAwLDB4MDAsMHhiOCwweDhhLDB4MDMsMHhjZCwweDNhCi0sMHg4MCwweDNlLDB4OWQsMHgzNiwweDA0LDB4NzUsMHgwYywweDgwLDB4M2UsMHg5ZSwweDM2LDB4MDYsMHg3NCwweDA1LDB4YzYsMHgwNgotLDB4OWYsMHgzNiwweDA2LDB4MzMsMHhjMCwweGEwLDB4OWUsMHgzNiwweDhiLDB4ZjAsMHgyZSwweGZmLDB4YTQsMHg0YywweDNjLDB4ZjcKLSwweDA2LDB4OWIsMHgzNiwweDAwLDB4MjAsMHg3NSwweDBlLDB4ODEsMHgyNiwweDliLDB4MzYsMHhmZiwweGJmLDB4YjgsMHg4YiwweDAzCi0sMHhjZCwweDNhLDB4ZTksMHg1NCwweDAwLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDAxLDB4NzQsMHgwMywweGU5LDB4MTcsMHhlZQotLDB4YzcsMHgwNiwweDM3LDB4MzcsMHgwMiwweDAwLDB4YzYsMHgwNiwweGNhLDB4MzQsMHgwMiwweDgzLDB4MGUsMHg5OSwweDM2LDB4MDQKLSwweDgzLDB4MGUsMHg1MCwweDM3LDB4MDQsMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzUsMHgyYSwweGU4LDB4MWYsMHgwYiwweGU5Ci0sMHgyNywweDAwLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDAxLDB4NzUsMHhkMywweGM3LDB4MDYsMHgzNywweDM3LDB4MDIsMHgwMAotLDB4YzYsMHgwNiwweGNhLDB4MzQsMHgwMiwweDgzLDB4MGUsMHg5OSwweDM2LDB4MDQsMHhjNiwweDA2LDB4YTAsMHgzNiwweDAwLDB4ZjYKLSwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzQsMHgwMywweGU4LDB4ZGUsMHgwYSwweDgxLDB4MjYsMHg5YiwweDM2LDB4N2MsMHhmZiwweGJiCi0sMHhmZiwweGZmLDB4Y2QsMHg1MywweGNkLDB4NTQsMHhlOSwweGJlLDB4ZWQsMHhhMywweGI2LDB4MzQsMHhlOCwweGFkLDB4MDEsMHhiOAotLDB4ODYsMHgwMywweGNkLDB4MzksMHhjNywweDA2LDB4NGMsMHgzNywweDAwLDB4MDAsMHg4MSwweDI2LDB4YzIsMHgzNCwweGFmLDB4ZGYKLSwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NCwweDM0LDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDIwLDB4NzQsMHg1NiwweGY3Ci0sMHgwNiwweDliLDB4MzYsMHgwMCwweDAxLDB4NzQsMHgyNywweGU4LDB4MzUsMHgwMSwweDcyLDB4MWMsMHhiZSwweDAwLDB4NDAsMHg4NQotLDB4MzYsMHhjMiwweDM0LDB4NzUsMHgwOCwweDA5LDB4MzYsMHhjMiwweDM0LDB4ZmYsMHgwNiwweDkyLDB4MzQsMHhlOCwweDhiLDB4MDEKLSwweDczLDB4MDYsMHg4MSwweDBlLDB4OTksMHgzNiwweDgwLDB4MDAsMHhlOSwweDZjLDB4ZWQsMHhlOSwweGI1LDB4MDAsMHhjNywweDA2Ci0sMHgzNywweDM3LDB4MDIsMHgwMCwweGM2LDB4MDYsMHhjYSwweDM0LDB4MDIsMHg4MywweDBlLDB4OTksMHgzNiwweDA0LDB4ODMsMHgwZQotLDB4NTAsMHgzNywweDA0LDB4ODAsMHgzZSwweDllLDB4MzYsMHgwOCwweDc0LDB4MDMsMHhlOCwweDVhLDB4MGEsMHhlOCwweGVmLDB4MDAKLSwweDcyLDB4ZDYsMHhlOSwweGM4LDB4ZmYsMHg4MCwweDNlLDB4OWUsMHgzNiwweDBhLDB4NzUsMHgxMiwweGM2LDB4MDYsMHhhMCwweDM2Ci0sMHgwMCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDgsMHgwMCwweDc0LDB4MDIsMHhjZCwweDU0LDB4ZTgsMHgzOSwweDBhLDB4ODEsMHgyNgotLDB4OWIsMHgzNiwweGZmLDB4YmYsMHhlOCwweGM4LDB4MDAsMHg3MiwweGFmLDB4YjgsMHg4YiwweDAzLDB4Y2QsMHgzOSwweGU5LDB4OWMKLSwweGZmLDB4ZjYsMHgwNiwweDllLDB4MzYsMHhmZiwweDc1LDB4NTgsMHhhMywweGI2LDB4MzQsMHhlOCwweGZlLDB4MDAsMHg4MSwweDI2Ci0sMHhjMiwweDM0LDB4ZmYsMHhiZiwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NCwweDQ4LDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMAotLDB4MjAsMHg3NCwweDIyLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDQwLDB4NzUsMHgwOCwweGU4LDB4OTEsMHgwMCwweDcyLDB4MzAKLSwweGU5LDB4MjIsMHgwMCwweDI2LDB4YTEsMHgwYywweDAwLDB4YTksMHg2MCwweDAwLDB4NzUsMHgyNCwweDgxLDB4MGUsMHg2NiwweDM3Ci0sMHgwMCwweDA4LDB4ZTksMHhkMiwweGVjLDB4YzcsMHgwNiwweDRjLDB4MzcsMHgwMCwweDAwLDB4ZTgsMHg3MSwweDAwLDB4NzIsMHgxMAotLDB4YjgsMHg4YiwweDAzLDB4Y2QsMHgzOSwweGU4LDB4ZDMsMHgwMCwweDczLDB4MDYsMHg4MSwweDBlLDB4OTksMHgzNiwweDgwLDB4MDAKLSwweGU5LDB4YjQsMHhlYywweDgwLDB4M2UsMHg5ZCwweDM2LDB4MDQsMHg3NSwweDBjLDB4ODAsMHgzZSwweDllLDB4MzYsMHgwNiwweDc0Ci0sMHg0NiwweGM2LDB4MDYsMHg5ZiwweDM2LDB4MDYsMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MDEsMHg3NCwweDBjLDB4ODAsMHgzZQotLDB4OWQsMHgzNiwweDA4LDB4NzUsMHgwNSwweGM2LDB4MDYsMHg5ZiwweDM2LDB4MGEsMHhlOCwweDMyLDB4MDAsMHg3MiwweGQxLDB4ZTgKLSwweDk5LDB4MDAsMHg4MCwweDNlLDB4OWQsMHgzNiwweDA4LDB4NzUsMHgxMywweDgxLDB4MGUsMHg5OSwweDM2LDB4ODAsMHgwMCwweGY3Ci0sMHgwNiwweDliLDB4MzYsMHgwMCwweDIwLDB4NzUsMHgwOCwweGI4LDB4OGIsMHgwMywweGNkLDB4MzksMHhlOSwweDY4LDB4ZWMsMHhjNgotLDB4MDYsMHg5ZiwweDM2LDB4MGEsMHhlOSwweDYwLDB4ZWMsMHhiOCwweDg2LDB4MDMsMHhjZCwweDNhLDB4ZTksMHg1OCwweGVjLDB4MjYKLSwweGExLDB4MGMsMHgwMCwweGE5LDB4NjAsMHgwMCwweDc0LDB4MDgsMHg4MSwweDI2LDB4YzIsMHgzNCwweGZmLDB4YmYsMHhmOSwweGMzCi0sMHhmNywweDA2LDB4OWIsMHgzNiwweDAwLDB4NDAsMHg3NCwweDEzLDB4ODEsMHgwZSwweDY2LDB4MzcsMHgwMCwweDA4LDB4ZTgsMHg0YQotLDB4MDAsMHg3MywweDA2LDB4ODEsMHgwZSwweDk5LDB4MzYsMHg4MCwweDAwLDB4ZjksMHhjMywweDgxLDB4MGUsMHg5YiwweDM2LDB4MDAKLSwweDQwLDB4ODAsMHgyNiwweDZmLDB4MzcsMHhmZSwweDgxLDB4MjYsMHg5YiwweDM2LDB4N2YsMHhmZiwweGM2LDB4MDYsMHhhMCwweDM2Ci0sMHgwMCwweGY4LDB4YzMsMHg4MSwweDBlLDB4OTksMHgzNiwweDAwLDB4MDEsMHhlOSwweDIxLDB4ZWMsMHgyNiwweGExLDB4MjAsMHgwMAotLDB4YTMsMHhmYiwweDM2LDB4YTMsMHhhYSwweDM0LDB4MjYsMHhhMSwweDIyLDB4MDAsMHhhMywweGZkLDB4MzYsMHhhMywweGFjLDB4MzQKLSwweDI2LDB4YTEsMHgyNCwweDAwLDB4YTMsMHhmZiwweDM2LDB4YTMsMHhhZSwweDM0LDB4YzMsMHhhMSwweDA1LDB4MzcsMHgyNiwweDNiCi0sMHgwNiwweDIwLDB4MDAsMHg3NSwweDE5LDB4YTEsMHgwNywweDM3LDB4MjYsMHgzYiwweDA2LDB4MjIsMHgwMCwweDc1LDB4MGYsMHhhMQotLDB4MDksMHgzNywweDI2LDB4M2IsMHgwNiwweDI0LDB4MDAsMHg3NSwweDA1LDB4ZTgsMHgwMiwweDAwLDB4ZjgsMHhjMywweDUxLDB4MWUKLSwweDA2LDB4OGIsMHhjNywweDhkLDB4MzYsMHgyMCwweDAwLDB4YmYsMHgwNSwweDM3LDB4YjksMHgwMywweDAwLDB4MWUsMHgwNiwweDFmCi0sMHgwNywweGYzLDB4YTUsMHg4YiwweGY4LDB4OGQsMHgzNiwweDIwLDB4MDAsMHhiZiwweGEwLDB4MzQsMHhiOSwweDAzLDB4MDAsMHhmMwotLDB4YTUsMHgwNywweDFmLDB4NTksMHg4YiwweGY4LDB4YTEsMHgwNywweDM3LDB4YTMsMHhhNiwweDM0LDB4YTEsMHgwOSwweDM3LDB4YTMKLSwweGE4LDB4MzQsMHhmOSwweGMzLDB4YzYsMHgwNiwweGI2LDB4MzQsMHgwMSwweGU5LDB4OGIsMHhlYiwweGU4LDB4ODcsMHgwOCwweDhiCi0sMHhmMCwweDA1LDB4MTIsMHgwMCwweDI2LDB4MjksMHgwNiwweDBlLDB4MDAsMHgyNiwweDhiLDB4NDQsMHgyYSwweDI2LDB4M2EsMHgwNgotLDB4MGUsMHgwMCwweDc1LDB4NWIsMHgyNiwweDgzLDB4MmUsMHgwZSwweDAwLDB4MDIsMHg4MCwweGZjLDB4MjcsMHg3NSwweDUwLDB4MjYKLSwweDhiLDB4NDQsMHgyYywweGE5LDB4ZmYsMHhmZiwweDc1LDB4NDcsMHg4YiwweGZlLDB4MzMsMHhjMCwweDI2LDB4ZjYsMHg0NSwweDNjCi0sMHg4MCwweDc0LDB4MDYsMHgyNiwweDhhLDB4NDUsMHgzYSwweDI0LDB4MWYsMHgwMywweGY4LDB4MjYsMHg4MCwweDdkLDB4NDUsMHgwOQotLDB4NzUsMHgyZCwweDhjLDB4YzIsMHg4ZSwweDA2LDB4MzgsMHgzNCwweDhlLDB4ZGEsMHg4YiwweDBlLDB4MGUsMHgwMCwweDI2LDB4ODkKLSwweDBlLDB4MGUsMHgwMCwweDhkLDB4NzQsMHgyYywweGJmLDB4MTgsMHgwMCwweGYzLDB4YTQsMHgzMywweGMwLDB4OGUsMHhkOCwweDI2Ci0sMHhjNywweDA2LDB4MDQsMHgwMCwweGI1LDB4M2YsMHgyNiwweGM3LDB4MDYsMHgwNiwweDAwLDB4MDYsMHgwMCwweGNkLDB4NTAsMHhiOAotLDB4MDYsMHg4MCwweGU5LDB4ZWYsMHhlOSwweDI2LDB4YTEsMHgwYywweDAwLDB4YTMsMHg5MywweDM3LDB4ODMsMHgwZSwweDk5LDB4MzYKLSwweDAxLDB4ZTksMHgwMCwweGViLDB4MjYsMHg4MCwweDNlLDB4MWMsMHgwMCwweGZmLDB4NzUsMHgyZiwweDI2LDB4ODAsMHgzZSwweDFlCi0sMHgwMCwweGZmLDB4NzUsMHgyNywweDI2LDB4ZjcsMHgwNiwweDBjLDB4MDAsMHg0MCwweDAwLDB4NzUsMHgxYiwweGExLDB4ZDEsMHgzNgotLDB4MjYsMHhhMywweDFhLDB4MDAsMHhhMSwweGQzLDB4MzYsMHgyNiwweGEzLDB4MWMsMHgwMCwweGExLDB4ZDUsMHgzNiwweDI2LDB4YTMKLSwweDFlLDB4MDAsMHhiOCwweDBhLDB4ODAsMHhlOCwweDM2LDB4MDcsMHhlOSwweGUyLDB4ZWEsMHhmZiwweDA2LDB4OTAsMHgzNCwweGJlCi0sMHgwYSwweDAwLDB4YzYsMHgwNiwweGI2LDB4MzQsMHgwMSwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NSwweDA1LDB4ODMsMHgwZQotLDB4YzIsMHgzNCwweDAxLDB4ZTksMHhiNiwweGVhLDB4ODAsMHgzZSwweDlkLDB4MzYsMHgwYSwweDc1LDB4MGYsMHgyNiwweGExLDB4MGMKLSwweDAwLDB4MjUsMHgwNywweDAwLDB4M2QsMHgwNCwweDAwLDB4NzUsMHgwMywweGU4LDB4NzksMHgwMCwweGExLDB4ZjMsMHgzNiwweDg2Ci0sMHhlMCwweGU3LDB4MWUsMHhhMywweGUzLDB4MzYsMHg4MSwweDI2LDB4MGIsMHgzNywweDAwLDB4MDMsMHg4MSwweDI2LDB4MGQsMHgzNwotLDB4N2IsMHg3ZiwweDgzLDB4MGUsMHgwZCwweDM3LDB4NDgsMHhlOCwweDFlLDB4MDAsMHgyNiwweGExLDB4MGMsMHgwMCwweDI1LDB4MDcKLSwweDAwLDB4M2QsMHgwNCwweDAwLDB4NzQsMHgwOSwweDI2LDB4ZjcsMHgwNiwweDBjLDB4MDAsMHgyMCwweDAwLDB4NzUsMHgwNiwweGI4Ci0sMHgwMSwweDAwLDB4ZTksMHgzZiwweGU5LDB4ZTksMHg1ZiwweGVhLDB4YzcsMHgwNiwweDQxLDB4MzcsMHgwMCwweDAwLDB4YjgsMHg3ZgotLDB4MDMsMHhjZCwweDNhLDB4YTEsMHgxZCwweDM3LDB4YTMsMHhjNCwweDM0LDB4ODYsMHhlMCwweDY4LDB4N2YsMHgwMywweDFmLDB4YTMKLSwweDA2LDB4MDAsMHgzMywweGMwLDB4OGUsMHhkOCwweGExLDB4MGIsMHgzNywweGEzLDB4YjIsMHgzNCwweGExLDB4MGQsMHgzNywweGEzCi0sMHhiNCwweDM0LDB4YTEsMHhmMywweDM2LDB4YTMsMHhjOCwweDM0LDB4YTEsMHhlZiwweDM2LDB4YTMsMHg5YywweDM0LDB4YTEsMHhmMQotLDB4MzYsMHhhMywweDllLDB4MzQsMHhjMywweDgwLDB4MGUsMHg5ZCwweDM2LDB4ODAsMHhiZSwweDAwLDB4MDAsMHhlOCwweGI0LDB4MDcKLSwweGI4LDB4N2IsMHgwMywweGNkLDB4M2EsMHhiOCwweDdjLDB4MDMsMHhjZCwweDM5LDB4YzcsMHgwNiwweDMzLDB4MzcsMHgwMiwweDAwCi0sMHhhMSwweGU1LDB4MzYsMHhlNywweDJlLDB4YTEsMHhlNywweDM2LDB4ZTcsMHgzZSwweGI4LDB4ODIsMHgwMywweGNkLDB4M2EsMHhmNwotLDB4MDYsMHg5YiwweDM2LDB4MDAsMHgyMCwweDc1LDB4MDMsMHhlOCwweGZkLDB4MDYsMHhhMSwweGQzLDB4MzYsMHhhMywweGVmLDB4MzYKLSwweGEzLDB4OWMsMHgzNCwweGExLDB4ZDUsMHgzNiwweGEzLDB4ZjEsMHgzNiwweGEzLDB4OWUsMHgzNCwweGMzLDB4ZjYsMHgwNiwweDlkCi0sMHgzNiwweDgwLDB4NzQsMHgzMSwweGJlLDB4MjIsMHgwMCwweGU5LDB4MTcsMHgwMCwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NAotLDB4MjQsMHhiZSwweDIzLDB4MDAsMHhlOSwweDBhLDB4MDAsMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzQsMHgxNywweGJlLDB4MjQKLSwweDAwLDB4NTYsMHhlOCwweGE4LDB4MDUsMHg4YywweGMwLDB4M2QsMHhmZiwweGZmLDB4NWUsMHg3NCwweDA1LDB4ZTgsMHhkNywweGVmCi0sMHhjZCwweDUwLDB4ZTksMHgxZiwweGU4LDB4ZTksMHg5ZiwweGU5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4YjgsMHg4NCwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OGEsMHgwMywweGNkLDB4MzksMHhlOSwweGY3LDB4MDAsMHg4MCwweDNlLDB4YTAKLSwweDM2LDB4MDgsMHg3NSwweDJlLDB4YTksMHhkMCwweDA3LDB4NzUsMHgyYywweGExLDB4YjEsMHgzNiwweDBkLDB4MDAsMHgwNCwweGU3Ci0sMHgwOCwweGU1LDB4MDAsMHgyNSwweGZmLDB4NzMsMHhlNywweDAwLDB4YjgsMHg4YSwweDAzLDB4Y2QsMHgzYSwweGU4LDB4YzMsMHgwNgotLDB4MzMsMHhjMCwweGU3LDB4MGUsMHhlNSwweDBhLDB4MjUsMHhjMywweDE3LDB4ZTcsMHgwYSwweGNkLDB4NTQsMHhjNiwweDA2LDB4YTAKLSwweDM2LDB4MDAsMHhlOSwweDY4LDB4ZTksMHhiZSwweDA0LDB4MDAsMHhlOSwweDNmLDB4ZTksMHg4MywweDI2LDB4OWIsMHgzNiwweGJmCi0sMHhjNiwweDA2LDB4NzEsMHgzNywweDAzLDB4YjgsMHg4NiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODgsMHgwMywweGNkLDB4M2EsMHhiOAotLDB4ODMsMHgwMywweGNkLDB4M2EsMHhiOCwweDg3LDB4MDMsMHhjZCwweDM5LDB4ODEsMHgwZSwweGMyLDB4MzQsMHgwMCwweDIwLDB4ZTkKLSwweDkyLDB4MDAsMHhlOCwweDQ5LDB4MDYsMHhiOCwweDg3LDB4MDMsMHhjZCwweDM5LDB4YmIsMHhmZiwweDdmLDB4Y2QsMHg1MywweGI4Ci0sMHg4NCwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODgsMHgwMywweGNkLDB4M2EsMHhiOCwweDhiLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4MwotLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4NiwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODUsMHgwMywweGNkLDB4M2EsMHhjMywweGU1LDB4MDAKLSwweDI1LDB4ZmYsMHg1MywweGU3LDB4MDAsMHg4MywweDBlLDB4YzIsMHgzNCwweDQwLDB4ODMsMHgyNiwweGMyLDB4MzQsMHhlZiwweGU4Ci0sMHgwYywweDA2LDB4YmIsMHhmZiwweDdmLDB4Y2QsMHg1MywweGI4LDB4OGEsMHgwMywweGNkLDB4M2EsMHhiOCwweDg1LDB4MDMsMHhjZAotLDB4M2EsMHhiOCwweDg2LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4MywweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODcsMHgwMywweGNkLDB4M2EKLSwweGI4LDB4OGIsMHgwMywweGNkLDB4M2EsMHhiOCwweDg0LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4OSwweDAzLDB4Y2QsMHgzYSwweGMzCi0sMHg4MywweDBlLDB4YzIsMHgzNCwweDUwLDB4ZTgsMHgxOCwweDA0LDB4ZTgsMHhkMywweDA1LDB4ZjYsMHgwNiwweDZmLDB4MzcsMHgwMQotLDB4NzUsMHgxMiwweGI4LDB4ODksMHgwMywweGNkLDB4MzksMHg4MywweDNlLDB4MGYsMHgzNywweDAwLDB4NzUsMHgwNiwweGM3LDB4MDYKLSwweDBmLDB4MzcsMHgwNCwweDAwLDB4YTEsMHg5ZCwweDM2LDB4ODAsMHhmYywweDA4LDB4NzQsMHgwNSwweGI4LDB4ODQsMHgwMywweGNkCi0sMHgzOSwweGU1LDB4MDIsMHgwZCwweDAxLDB4MDgsMHgyNSwweGVmLDB4ZmYsMHhlNywweDAyLDB4YTEsMHg5ZCwweDM2LDB4ODYsMHhlMAotLDB4MzIsMHhlNCwweDhiLDB4ZjAsMHhkMSwweGVlLDB4MzMsMHhjMCwweDBkLDB4MjAsMHgwMCwweDA5LDB4MDYsMHhhZCwweDM2LDB4YTEKLSwweGFkLDB4MzYsMHhlNywweDA0LDB4ZTksMHg1MywweGU4LDB4ZTksMHg1YSwweGU4LDB4MzMsMHhjMCwweGEwLDB4MWIsMHgzNywweGQxCi0sMHhlMCwweDNhLDB4MDYsMHhhMCwweDM2LDB4NzUsMHgwMywweGU5LDB4YmEsMHhmZiwweGU5LDB4NjAsMHhlOCwweGM3LDB4MDYsMHg0MQotLDB4MzcsMHgwMCwweDAwLDB4ZTgsMHhjMSwweGUxLDB4ZTgsMHg2YSwweDA2LDB4MzMsMHhjMCwweDBkLDB4NDEsMHgwMCwweGU3LDB4NTYKLSwweGExLDB4YjEsMHgzNiwweDBkLDB4MDAsMHgxMCwweGU3LDB4MDgsMHhlNSwweDAyLDB4MjUsMHhmOSwweGZmLDB4MGQsMHgwMywweDAwCi0sMHhlNywweDAyLDB4YTEsMHhiMywweDM2LDB4ZTcsMHgwYSwweGExLDB4YWYsMHgzNiwweGU3LDB4MDYsMHhhMSwweGFkLDB4MzYsMHhlNwotLDB4MDQsMHhlOCwweDdjLDB4MDMsMHhlOCwweDlmLDB4MDMsMHhjNywweDA2LDB4MWQsMHgzNywweDAwLDB4YzgsMHhjNywweDA2LDB4MGIKLSwweDM3LDB4MDAsMHgwMywweGM3LDB4MDYsMHgwZCwweDM3LDB4N2IsMHg3ZiwweDMzLDB4YzAsMHhhMywweDk5LDB4MzYsMHhhMywweDliCi0sMHgzNiwweGEzLDB4OWQsMHgzNiwweGEzLDB4OWYsMHgzNiwweGEzLDB4NGMsMHgzNywweGEzLDB4ZjMsMHgzNiwweGEzLDB4ZWYsMHgzNgotLDB4YTMsMHhmMSwweDM2LDB4ZTgsMHg4MiwweGZkLDB4YzYsMHgwNiwweDlmLDB4MzYsMHgwMiwweGU5LDB4ZWYsMHhlNywweGU1LDB4MDIKLSwweDBkLDB4MDEsMHg4OCwweDI1LDB4ZWYsMHhmZiwweDBkLDB4MDAsMHg0MCwweDBkLDB4MDAsMHgwNCwweGU3LDB4MDIsMHhlOCwweGYyCi0sMHgwNSwweGU1LDB4MGEsMHgwZCwweDQwLDB4MDAsMHhlNywweDBhLDB4MzMsMHhjMCwweGEzLDB4ODEsMHgzNywweGEzLDB4ODUsMHgzNwotLDB4YTMsMHg4MywweDM3LDB4YTMsMHg4NywweDM3LDB4YTMsMHg4OSwweDM3LDB4ZTUsMHgwMCwweDBkLDB4MDAsMHg4NCwweGU3LDB4MDAKLSwweGI4LDB4OGMsMHgwMywweGNkLDB4MzksMHhiOCwweDgwLDB4MDAsMHhjZCwweDM1LDB4YzcsMHgwNiwweGFhLDB4MDIsMHhmZiwweGZmCi0sMHhlNSwweDAwLDB4MjUsMHhmZiwweDdiLDB4ZTcsMHgwMCwweDgxLDB4MGUsMHg5YSwweDM3LDB4ODAsMHgwMCwweGI4LDB4N2UsMHgwMwotLDB4Y2QsMHgzOSwweDMzLDB4YzAsMHhlNywweDBlLDB4YmUsMHgwOCwweDAwLDB4OGUsMHgwNiwweDM4LDB4MzQsMHhlOCwweGE3LDB4ZWQKLSwweDgzLDB4MjYsMHhlZiwweDM0LDB4ZGYsMHhmZiwweDA2LDB4ODEsMHgzNywweGNkLDB4NTAsMHg4MywweDBlLDB4ZWYsMHgzNCwweDIwCi0sMHhjMywweGY3LDB4MDYsMHg5YSwweDM3LDB4ODAsMHgwMCwweDc0LDB4M2QsMHhhOSwweGQwLDB4MDcsMHg3NCwweDEwLDB4YTksMHgwMAotLDB4MDQsMHg3NCwweDEyLDB4MzMsMHhjMCwweGU3LDB4MGUsMHhmZiwweDA2LDB4ODcsMHgzNywweGU5LDB4ZDIsMHhmZiwweGZmLDB4MDYKLSwweDg1LDB4MzcsMHhlOSwweGNiLDB4ZmYsMHhmZiwweDA2LDB4ODMsMHgzNywweGU5LDB4YzQsMHhmZiwweDgzLDB4MjYsMHg5YSwweDM3Ci0sMHg3ZiwweGExLDB4ODksMHgzNywweDAzLDB4MDYsMHg4NywweDM3LDB4M2QsMHgwNSwweDAwLDB4N2YsMHgwMSwweGMzLDB4YmIsMHhmZgotLDB4N2YsMHhjZCwweDUzLDB4ZTksMHgwMCwweDAwLDB4ZTUsMHgwMiwweDI1LDB4ZmYsMHhmYiwweDI1LDB4ZWYsMHhmZiwweDBkLDB4MDEKLSwweDAwLDB4ZTcsMHgwMiwweGExLDB4ODMsMHgzNywweDNiLDB4MDYsMHg0NiwweDM3LDB4N2YsMHgyYSwweGExLDB4ODUsMHgzNywweDNiCi0sMHgwNiwweDQ4LDB4MzcsMHg3YywweDIxLDB4YTEsMHg4OSwweDM3LDB4MDMsMHgwNiwweDg3LDB4MzcsMHgzZCwweDA1LDB4MDAsMHg3ZgotLDB4MTUsMHhjNiwweDA2LDB4OWYsMHgzNiwweDA0LDB4ZTUsMHgwMiwweDI1LDB4ZmYsMHhmNywweDBkLDB4MDEsMHgwMCwweDI1LDB4ZWYKLSwweGZmLDB4ZTcsMHgwMiwweGU5LDB4ZjcsMHhlNiwweGJlLDB4MDEsMHgwMCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDMsMHgwMCwweDc0Ci0sMHgwYSwweDgzLDB4MjYsMHg5YiwweDM2LDB4ZmMsMHg4MywweDBlLDB4YzIsMHgzNCwweDA0LDB4ZTksMHhkMCwweGU2LDB4YjgsMHg3YgotLDB4MDMsMHhjZCwweDM5LDB4ZTUsMHgwMiwweDBkLDB4MDEsMHg2MCwweDI1LDB4ZWYsMHhmZiwweGU3LDB4MDIsMHhjNywweDA2LDB4ZjEKLSwweDM0LDB4MjAsMHgwMywweGI4LDB4OGUsMHgwMywweGNkLDB4MzksMHhjMywweDgxLDB4MjYsMHhjMiwweDM0LDB4N2YsMHhmZiwweDgwCi0sMHgwZSwweDZmLDB4MzcsMHgwMSwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDMsMHgwMCwweDc0LDB4ZDIsMHhiOCwweDdiLDB4MDMsMHhjZAotLDB4M2EsMHhiOCwweDdkLDB4MDMsMHhjZCwweDM5LDB4ODMsMHgyNiwweDliLDB4MzYsMHhlZiwweDMzLDB4YzAsMHhiMCwweDhhLDB4YTIKLSwweDlmLDB4MzYsMHhhMiwweDlkLDB4MzYsMHhjNywweDA2LDB4NGMsMHgzNywweDAxLDB4MDAsMHhjNywweDA2LDB4MGYsMHgzNywweDA0Ci0sMHgwMCwweGY3LDB4MDYsMHg5YiwweDM2LDB4NDAsMHgwMCwweDc1LDB4MDYsMHhjNywweDA2LDB4MGYsMHgzNywweDAzLDB4MDAsMHhiOAotLDB4OGQsMHgwMywweGNkLDB4MzksMHhlOCwweDAwLDB4ZDUsMHhlNSwweDAyLDB4MGQsMHgwMSwweDQwLDB4MjUsMHhlZiwweGZmLDB4OGIKLSwweGQ4LDB4YjgsMHg3YywweDAzLDB4Y2QsMHgzOSwweGM3LDB4MDYsMHgzMywweDM3LDB4MDIsMHgwMCwweDhiLDB4YzMsMHgwZCwweDAwCi0sMHgyMCwweDI1LDB4ZjksMHhmZiwweDBiLDB4MDYsMHhlOCwweDNhLDB4ZTcsMHgwMiwweGMzLDB4ZmYsMHgwZSwweGYxLDB4MzQsMHg3NQotLDB4MDEsMHhjMywweGU1LDB4NGUsMHhhOSwweDAxLDB4MDAsMHg3NSwweDEyLDB4ZTUsMHgwMCwweGE5LDB4MDAsMHgwNCwweDc1LDB4MDUKLSwweDBkLDB4MDAsMHgwNCwweGU3LDB4MDAsMHhiOCwweDhlLDB4MDMsMHhjZCwweDM5LDB4YzMsMHhlNSwweDAwLDB4YTksMHgwMCwweDA0Ci0sMHg3NCwweGYzLDB4MjUsMHhmZiwweGZiLDB4ZTcsMHgwMCwweGU5LDB4ZWIsMHhmZiwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDQsMHg4MwotLDB4MjYsMHg5YiwweDM2LDB4ZmMsMHg4MSwweDBlLDB4OWIsMHgzNiwweDgwLDB4MDAsMHhlOSwweDEwLDB4ZTYsMHhiOCwweDhlLDB4MDMKLSwweGNkLDB4M2EsMHhjZCwweDU0LDB4ODEsMHgwZSwweGFmLDB4MzYsMHgwMCwweDE4LDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNiwweGI4Ci0sMHg3YiwweDAzLDB4Y2QsMHgzOSwweGExLDB4ZDMsMHgzNiwweGEzLDB4OGYsMHgzNywweGExLDB4ZDUsMHgzNiwweGEzLDB4OTEsMHgzNwotLDB4YzcsMHgwNiwweDhiLDB4MzcsMHgwMiwweDAwLDB4YzcsMHgwNiwweDhkLDB4MzcsMHgwMiwweDAwLDB4ODMsMHgwZSwweDk5LDB4MzYKLSwweDQwLDB4ZTksMHhkOSwweGU1LDB4ODAsMHgzZSwweDlmLDB4MzYsMHgwNiwweDc1LDB4MTUsMHhhOSwweGQwLDB4MDcsMHg3NSwweGVjCi0sMHgyNSwweDAwLDB4MTgsMHg3NSwweDBlLDB4ZmYsMHgwZSwweDhiLDB4MzcsMHg3NSwweGUxLDB4YzYsMHgwNiwweDlmLDB4MzYsMHgwOAotLDB4ZTksMHhiYSwweGU1LDB4ZmYsMHgwZSwweDhkLDB4MzcsMHg3NSwweGQzLDB4YmUsMHgwOCwweDAwLDB4ZTksMHg5ZiwweGU1LDB4YjgKLSwweDdiLDB4MDMsMHhjZCwweDM5LDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDIwLDB4NzQsMHgwOCwweGM2LDB4MDYsMHg5ZiwweDM2Ci0sMHgwYSwweGU5LDB4MGQsMHgwMCwweGY3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHg0MCwweDc0LDB4MGIsMHhiOCwweDhiLDB4MDMsMHhjZAotLDB4MzksMHg4MSwweDBlLDB4OTksMHgzNiwweDgwLDB4MDAsMHhlOSwweDgzLDB4ZTUsMHhiOCwweDdiLDB4MDMsMHhjZCwweDM5LDB4YzcKLSwweDA2LDB4OGIsMHgzNywweDA0LDB4MDAsMHhjNywweDA2LDB4OGQsMHgzNywweDA0LDB4MDAsMHg4MSwweDBlLDB4OTksMHgzNiwweDAwCi0sMHgwMiwweGU5LDB4NjksMHhlNSwweGY2LDB4MDYsMHg5ZCwweDM2LDB4ODAsMHg3NSwweDFiLDB4YTksMHhkMCwweDA3LDB4NzUsMHhlYgotLDB4YTksMHgwMCwweDE4LDB4NzUsMHgwYywweGZmLDB4MGUsMHg4ZCwweDM3LDB4NzUsMHhlMCwweGU4LDB4MTcsMHhmYiwweGU5LDB4NGMKLSwweGU1LDB4YjgsMHg4MiwweDAzLDB4Y2QsMHgzOSwweGMzLDB4ZmYsMHgwZSwweDhiLDB4MzcsMHg3NSwweGNlLDB4YmUsMHgwOSwweDAwCi0sMHhlOSwweDJiLDB4ZTUsMHhjNywweDA2LDB4M2QsMHgzNywweDAwLDB4MDAsMHhjNywweDA2LDB4OWIsMHgzNiwweDAwLDB4MDAsMHhlOAotLDB4M2MsMHgwMiwweDgxLDB4MjYsMHhhZiwweDM2LDB4ZmYsMHhlNywweGExLDB4YWYsMHgzNiwweGU3LDB4MDYsMHg4MSwweDI2LDB4OWIKLSwweDM2LDB4ZmYsMHg3ZiwweGU1LDB4MDIsMHgwZCwweDAxLDB4MDAsMHgyNSwweGVmLDB4ZmYsMHgyNSwweGZmLDB4ZGYsMHhlNywweDAyCi0sMHhiYiwweGZmLDB4N2YsMHhjZCwweDUzLDB4MzMsMHhjMCwweGEzLDB4OWQsMHgzNiwweGEzLDB4OWYsMHgzNiwweGU4LDB4NTAsMHgwMAotLDB4ZTgsMHg3MywweDAwLDB4YjgsMHg4MSwweDAzLDB4Y2QsMHgzOSwweGMzLDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMywweDAwLDB4NzQKLSwweDBkLDB4YzYsMHgwNiwweDlmLDB4MzYsMHgwMiwweGM2LDB4MDYsMHhhMCwweDM2LDB4MDAsMHhlOSwweGRmLDB4ZTQsMHg4MywweDBlCi0sMHg5YiwweDM2LDB4MTAsMHhjNywweDA2LDB4OTksMHgzNiwweDAwLDB4MDAsMHhlOCwweGU3LDB4MDIsMHhlNSwweDU2LDB4MGQsMHgwMgotLDB4MDAsMHhlNywweDU2LDB4YzcsMHgwNiwweGE4LDB4MDIsMHgwMCwweDAwLDB4OGIsMHgzNiwweDNkLDB4MzcsMHhlOCwweDQ0LDB4MDIKLSwweGM2LDB4MDYsMHhhMCwweDM2LDB4MGUsMHhlOSwweGI1LDB4ZTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwNiwweGI4LDB4OGEsMHgwMywweGNkLDB4M2EsMHhiOCwweDg1LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4NiwweDAzLDB4Y2QsMHgzYQotLDB4YjgsMHg4MywweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODcsMHgwMywweGNkLDB4M2EsMHhiOCwweDhiLDB4MDMsMHhjZCwweDNhLDB4YjgKLSwweDg4LDB4MDMsMHhjZCwweDNhLDB4MDcsMHhjMywweDA2LDB4YjgsMHg4OCwweDAzLDB4Y2QsMHgzYSwweGI4LDB4N2IsMHgwMywweGNkCi0sMHgzYSwweGI4LDB4ODIsMHgwMywweGNkLDB4M2EsMHhiOCwweDdmLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg3YywweDAzLDB4Y2QsMHgzYQotLDB4YjgsMHg3ZSwweDAzLDB4Y2QsMHgzYSwweGI4LDB4ODAsMHgwMywweGNkLDB4M2EsMHhiOCwweDgxLDB4MDMsMHhjZCwweDNhLDB4YjgKLSwweDg0LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4OSwweDAzLDB4Y2QsMHgzYSwweGI4LDB4N2QsMHgwMywweGNkLDB4M2EsMHhiOCwweDhkCi0sMHgwMywweGNkLDB4M2EsMHhjNywweDA2LDB4NDEsMHgzNywweDAwLDB4MDAsMHgwNywweGMzLDB4MDYsMHg4ZSwweDA2LDB4MzgsMHgzNAotLDB4MWYsMHg4YiwweDBlLDB4MGUsMHgwMCwweDI2LDB4ODksMHgwZSwweDBlLDB4MDAsMHhiZSwweDE4LDB4MDAsMHhiZiwweDE4LDB4MDAKLSwweGYzLDB4YTQsMHgwNiwweDFlLDB4MDcsMHhjZCwweDM0LDB4MDcsMHgzMywweGMwLDB4OGUsMHhkOCwweGMzLDB4MjYsMHhmNiwweDA2Ci0sMHgyMCwweDAwLDB4ODAsMHg3NCwweDQ0LDB4MzMsMHhjMCwweDI2LDB4YTAsMHgyNiwweDAwLDB4MjQsMHgxZiwweDhiLDB4ZjAsMHgyNgotLDB4OGIsMHg1YywweDI4LDB4ODksMHgxZSwweDZhLDB4MzcsMHgwNiwweDhlLDB4MDYsMHgzOCwweDM0LDB4MWYsMHhjMCwweGUzLDB4MDQKLSwweDI2LDB4ODgsMHg1YywweDI4LDB4OGIsMHhjNiwweGI5LDB4MDYsMHgwMCwweGJlLDB4MjAsMHgwMCwweGJmLDB4MWEsMHgwMCwweGYzCi0sMHhhNCwweDhiLDB4YzgsMHg4MywweGM3LDB4MDYsMHhmMywweGE0LDB4MjYsMHg4MSwweDI2LDB4MjYsMHgwMCwweDFmLDB4ODAsMHgyNgotLDB4ODEsMHgzNiwweDI2LDB4MDAsMHgwMCwweDgwLDB4ZTksMHhhOSwweGZmLDB4MjYsMHg4YiwweDFlLDB4MjgsMHgwMCwweDg5LDB4MWUKLSwweDZhLDB4MzcsMHgwNiwweDhlLDB4MDYsMHgzOCwweDM0LDB4MWYsMHhjMCwweGUzLDB4MDQsMHgyNiwweDg4LDB4MWUsMHgyOCwweDAwCi0sMHhiOSwweDA2LDB4MDAsMHhiZSwweDIwLDB4MDAsMHhiZiwweDFhLDB4MDAsMHhmMywweGE0LDB4ZTksMHg4NCwweGZmLDB4ODYsMHhjNAotLDB4YTMsMHg2OCwweDM3LDB4ZTgsMHg4NywweGZmLDB4ZjcsMHgwNiwweDZhLDB4MzcsMHgwZiwweDAwLDB4NzQsMHgxMCwweDgwLDB4M2UKLSwweDllLDB4MzYsMHgwMCwweDc1LDB4MDksMHhiZSwweDAwLDB4MDAsMHhlOCwweGFjLDB4ZTksMHhjZCwweDUwLDB4YzMsMHhjMywweDUwCi0sMHg1NiwweDA2LDB4MzMsMHhjMCwweDI2LDB4ZjYsMHgwNiwweDIwLDB4MDAsMHg4MCwweDc0LDB4MDYsMHgyNiwweGEwLDB4MjYsMHgwMAotLDB4MjQsMHgxZiwweDhiLDB4ZjAsMHgyNiwweDhiLDB4NWMsMHgyNiwweDg2LDB4ZmIsMHg4MywweGViLDB4MDQsMHg3NCwweDRmLDB4ODMKLSwweGM2LDB4MmEsMHg4YywweGMwLDB4OGUsMHhkOCwweGI5LDB4MDcsMHgwMCwweDMzLDB4YzAsMHg4ZSwweGMwLDB4YmYsMHg3MiwweDM3Ci0sMHhmMywweGFiLDB4MzMsMHhjOSwweDhhLDB4MGMsMHg4MCwweGY5LDB4MDAsMHg3NSwweDAzLDB4ZTksMHgzMCwweDAwLDB4M2IsMHhkOQotLDB4NzMsMHgwMywweGU5LDB4MjksMHgwMCwweDJiLDB4ZDksMHg4YSwweDQ0LDB4MDEsMHgyNSwweDNmLDB4MDAsMHg3NCwweDE5LDB4M2QKLSwweDBiLDB4MDAsMHg3ZCwweDE0LDB4ZDEsMHhlMCwweDhiLDB4ZjgsMHgyZSwweDhiLDB4YmQsMHg1YywweDQ5LDB4OGQsMHg3NCwweDAyCi0sMHg4MywweGU5LDB4MDIsMHhmMywweGE0LDB4ZTksMHgwMiwweDAwLDB4MDMsMHhmMSwweDIzLDB4ZGIsMHg3NSwweGM0LDB4MzMsMHhjMAotLDB4OGUsMHhkOCwweDA3LDB4NWUsMHg1OCwweGMzLDB4MzMsMHhjMCwweDI2LDB4ZjYsMHgwNiwweDIwLDB4MDAsMHg4MCwweDc0LDB4MDYKLSwweDI2LDB4YTAsMHgyNiwweDAwLDB4MjQsMHgxZiwweGMzLDB4ZTUsMHgwYSwweDI1LDB4YzMsMHhiZiwweGU3LDB4MGEsMHhiOCwweDg2Ci0sMHgwMywweGNkLDB4MzksMHhiOCwweDgzLDB4MDMsMHhjZCwweDM5LDB4ODEsMHgyNiwweDliLDB4MzYsMHg3YywweGRmLDB4YjgsMHg4NQotLDB4MDMsMHhjZCwweDNhLDB4ZTUsMHgwMiwweDI1LDB4ZmYsMHhmMywweDBkLDB4MDEsMHgwMCwweDI1LDB4ZWYsMHhmZiwweGU3LDB4MDIKLSwweGU1LDB4MDAsMHgyNSwweGZmLDB4NTMsMHhlNywweDAwLDB4YTEsMHhlNywweDM2LDB4MjUsMHhmZiwweGZlLDB4YTMsMHhlNywweDM2Ci0sMHhlNywweDNlLDB4ODMsMHgyNiwweDk5LDB4MzYsMHhjZiwweDgxLDB4MGUsMHhhZiwweDM2LDB4MDAsMHgxMCwweGExLDB4YWYsMHgzNgotLDB4ZTcsMHgwNiwweGMzLDB4ZTUsMHgwMiwweDBkLDB4MDEsMHgwYywweDI1LDB4ZWYsMHhmZiwweGU3LDB4MDIsMHhhMSwweGU3LDB4MzYKLSwweDBkLDB4MDAsMHgwMSwweGU3LDB4M2UsMHhhMywweGU3LDB4MzYsMHg4MSwweDBlLDB4OWIsMHgzNiwweDAwLDB4MjAsMHg4MywweDBlCi0sMHg5OSwweDM2LDB4MjAsMHg4MSwweDI2LDB4OWIsMHgzNiwweDdjLDB4YmYsMHg4MSwweDBlLDB4YWYsMHgzNiwweDAwLDB4MTAsMHhhMQotLDB4YWYsMHgzNiwweGU3LDB4MDYsMHhiOCwweDg2LDB4MDMsMHhjZCwweDM5LDB4YjgsMHg4NSwweDAzLDB4Y2QsMHgzOSwweGI4LDB4ODMKLSwweDAzLDB4Y2QsMHgzYSwweGMzLDB4MGIsMHhmNiwweDc1LDB4NDksMHgwNiwweDhlLDB4MDYsMHgzMiwweDM0LDB4ODAsMHgzZSwweGUwCi0sMHgzNCwweDAxLDB4NzUsMHgxYiwweDI2LDB4ODksMHgzNiwweDA2LDB4MDAsMHg4ZSwweDA2LDB4MzIsMHgzNCwweDI2LDB4ZjcsMHgwNgotLDB4MGEsMHgwMCwweDAwLDB4MjAsMHg3NCwweDA3LDB4MjYsMHg4MSwweDBlLDB4MDgsMHgwMCwweDAwLDB4MjAsMHgwNywweGMzLDB4ODAKLSwweDNlLDB4ZTMsMHgzNCwweDAxLDB4NzUsMHgxOSwweDI2LDB4ODksMHgzNiwweDA2LDB4MDAsMHg4ZSwweDA2LDB4MzIsMHgzNCwweDI2Ci0sMHhmNywweDA2LDB4MGEsMHgwMCwweDAwLDB4MTAsMHg3NCwweDA3LDB4MjYsMHg4MSwweDBlLDB4MDgsMHgwMCwweDAwLDB4MTAsMHgwNwotLDB4YzMsMHhlOSwweGI0LDB4ZmYsMHg1MCwweDUxLDB4NTcsMHgzMywweGMwLDB4YjksMHgwNiwweDAwLDB4OGUsMHhjMCwweGJmLDB4ZDEKLSwweDM2LDB4ZjMsMHhhZSwweDVmLDB4NzQsMHgwYywweDI2LDB4ZjYsMHgwNiwweDAwLDB4MDAsMHhjMCwweDc1LDB4MDQsMHhmOCwweDU5Ci0sMHg1OCwweGMzLDB4ZjksMHhlOSwweGY5LDB4ZmYsMHg4YiwweDA1LDB4MGIsMHg0NSwweDAyLDB4MGIsMHg0NSwweDA0LDB4YzMsMHg1MgotLDB4NTAsMHhlNSwweDA2LDB4MjUsMHgxZSwweDAwLDB4M2QsMHgxZSwweDAwLDB4NzUsMHhmNiwweGI4LDB4MDEsMHg4MCwweGU3LDB4NWEKLSwweDU4LDB4NWEsMHhjMywweGU4LDB4ZTksMHhmZiwweDUwLDB4ZTUsMHgwMiwweDI1LDB4ZmYsMHg3ZiwweDBkLDB4MDEsMHgwMCwweDI1Ci0sMHhlZiwweGZmLDB4ZTcsMHgwMiwweDBkLDB4MDAsMHg4MCwweGU3LDB4MDIsMHhhMSwweGFkLDB4MzYsMHhlNywweDA0LDB4YTEsMHhhZgotLDB4MzYsMHhlNywweDA2LDB4NTgsMHhjMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDJlLDB4MmIsMHhjZSwweDQxLDB4MTAsMHg0MiwweDdiLDB4NDEsMHgzMCwweDQxLDB4YTIsMHg0MSwweGFmLDB4NDUsMHg0NCwweDI5Ci0sMHhjNywweDJhLDB4YzcsMHgyYSwweDYwLDB4MzksMHhmNCwweDNhLDB4NWMsMHgzYywweDA5LDB4M2QsMHhiMSwweDNkLDB4MzQsMHgzZgotLDB4YzcsMHgyYSwweDNjLDB4M2YsMHhjNywweDJhLDB4YzQsMHgzZiwweDE2LDB4NDAsMHgxNiwweDQwLDB4ZWQsMHg0MCwweGZhLDB4NDAKLSwweDA3LDB4NDEsMHhjNywweDJhLDB4YzcsMHgyYSwweGM3LDB4MmEsMHhjNywweDJhLDB4ZDYsMHg1MiwweDAwLDB4MDAsMHgwMSwweDM3Ci0sMHhlOSwweDM2LDB4ZjMsMHgzNiwweGVmLDB4MzYsMHgxZCwweDM3LDB4MGQsMHgzNywweDBiLDB4MzcsMHg5YywweDM3LDB4MDMsMHgzNwotLDB4ZmIsMHgzNiwweDYyLDB4MmQsMHg0MCwweDA2LDB4ZDEsMHgyZCwweGY0LDB4MDEsMHhiYSwweDQ0LDB4NDAsMHgwNiwweDhjLDB4NDMKLSwweDY0LDB4MDAsMHhlOCwweDJjLDB4YzgsMHgwMCwweGQ4LDB4MmIsMHgwNSwweDAwLDB4ZTksMHg0NSwweDUwLDB4MDAsMHg5NywweDQ1Ci0sMHhmYSwweDAwLDB4YWUsMHgyZCwweDA0LDB4MDEsMHg2YSwweDQyLDB4MDIsMHgwMCwweGY2LDB4MmMsMHhiYywweDAyLDB4OTMsMHgyZAotLDB4ZGMsMHgwNSwweDFkLDB4MmQsMHg2NCwweDAwLDB4YTEsMHgyZCwweDE0LDB4MDAsMHhkNywweDNhLDB4MDgsMHgwNywweDgxLDB4MmQKLSwweDY0LDB4MDAsMHhiMywweDNlLDB4MDIsMHgwMCwweDMwLDB4NDMsMHg2NCwweDAwLDB4YzUsMHgyYywweGY0LDB4MDEsMHg4YiwweDQ0Ci0sMHgwMiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4ODAsMHgzZSwweGZkLDB4MzQsMHgwMiwweDc0LDB4MGMsMHhlOCwweDIwLDB4MDUsMHhjNywweDA2LDB4YTEsMHgzNiwweDAwLDB4MDAKLSwweGU5LDB4OWEsMHhmOCwweGZmLDB4MDYsMHhjMCwweDMzLDB4ZTgsMHgxMCwweDA1LDB4OGIsMHgzNiwweDNkLDB4MzcsMHhlOCwweDczCi0sMHhmZSwweGMzLDB4Y2QsMHgzNCwweGU5LDB4ZTgsMHgwNSwweGM3LDB4MDYsMHhhMywweDM2LDB4MDAsMHgwMCwweGM3LDB4MDYsMHg0MQotLDB4MzcsMHgwMCwweDAwLDB4ZTgsMHhlZCwweGZlLDB4MzMsMHhjMCwweDBkLDB4NDEsMHgwMCwweGU3LDB4NTYsMHhhMSwweGIxLDB4MzYKLSwweDBkLDB4MDAsMHgxMCwweGU3LDB4MDgsMHhhMSwweGIzLDB4MzYsMHhlNywweDBhLDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNiwweGExCi0sMHhhZCwweDM2LDB4ZTcsMHgwNCwweGU4LDB4MmIsMHgwOSwweGM3LDB4MDYsMHgxZCwweDM3LDB4MDAsMHhjOCwweGM3LDB4MDYsMHgwYgotLDB4MzcsMHgwMCwweDAzLDB4YzcsMHgwNiwweDBkLDB4MzcsMHg3YiwweDdmLDB4MzMsMHhjMCwweGEzLDB4OWIsMHgzNiwweGEzLDB4OWQKLSwweDM2LDB4YzcsMHgwNiwweDRjLDB4MzcsMHgwMSwweDAwLDB4YzYsMHgwNiwweDllLDB4MzYsMHhmZiwweGM3LDB4MDYsMHgwNSwweDM3Ci0sMHgwMCwweDAwLDB4YzcsMHgwNiwweDA3LDB4MzcsMHgwMCwweDAwLDB4YzcsMHgwNiwweDA5LDB4MzcsMHgwMCwweDAwLDB4YTMsMHhmMwotLDB4MzYsMHhhMywweGVmLDB4MzYsMHhhMywweGYxLDB4MzYsMHhlOCwweGZlLDB4ZjUsMHhlNSwweDAyLDB4MjUsMHhmOSwweGZmLDB4MGQKLSwweDAzLDB4MDAsMHgwZCwweDAwLDB4ODgsMHgyNSwweGVmLDB4ZmYsMHgwZCwweDAwLDB4NDAsMHgwZCwweDAwLDB4MDQsMHhlNywweDAyCi0sMHhiOCwweDhmLDB4MDMsMHhjZCwweDM5LDB4YjgsMHg4MCwweDAwLDB4Y2QsMHgzNSwweGM3LDB4MDYsMHhhYSwweDAyLDB4ZmYsMHhmZgotLDB4YTEsMHhhOSwweDM2LDB4YTMsMHhhNywweDM2LDB4MGQsMHgwMCwweGE0LDB4MGQsMHgwMCwweDA4LDB4ZTcsMHgwMCwweGEzLDB4YTkKLSwweDM2LDB4YzcsMHgwNiwweGEzLDB4MzYsMHgwMSwweDAwLDB4YzcsMHgwNiwweGE1LDB4MzYsMHgwYywweDAwLDB4ODMsMHgzZSwweGE1Ci0sMHgzNiwweDAwLDB4NzUsMHgwOSwweGM3LDB4MDYsMHgzZCwweDM3LDB4MDUsMHgwMCwweGU5LDB4MTMsMHhmZiwweGZmLDB4MGUsMHhhNQotLDB4MzYsMHhiZSwweDExLDB4MDAsMHhlOCwweDIyLDB4MDUsMHhiOCwweDkwLDB4MDMsMHhjZCwweDM5LDB4YzMsMHg4MywweDNlLDB4YTMKLSwweDM2LDB4MDEsMHg3NCwweGQ5LDB4YzMsMHhiOCwweDkwLDB4MDMsMHhjZCwweDNhLDB4MjYsMHhhMCwweDJiLDB4MDAsMHgyNiwweDhiCi0sMHgxZSwweDJjLDB4MDAsMHhjZCwweDM0LDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwMSwweDc0LDB4MDMsMHhlOSwweGYwLDB4MDQsMHgzYwotLDB4MGYsMHg3NSwweDFlLDB4ODEsMHhmYiwweDAwLDB4MDIsMHg3NSwweDE4LDB4MjYsMHhhMSwweDIwLDB4MDAsMHhhMywweDA1LDB4MzcKLSwweDI2LDB4YTEsMHgyMiwweDAwLDB4YTMsMHgwNywweDM3LDB4MjYsMHhhMSwweDI0LDB4MDAsMHhhMywweDA5LDB4MzcsMHhlOSwweDA5Ci0sMHgwMCwweGM3LDB4MDYsMHgzZCwweDM3LDB4MDEsMHgwMCwweGU5LDB4YjYsMHhmZSwweGM3LDB4MDYsMHhhMywweDM2LDB4MDIsMHgwMAotLDB4YzYsMHgwNiwweDllLDB4MzYsMHhmZiwweGU4LDB4Y2IsMHhmZCwweGU4LDB4MWMsMHhkOSwweDMzLDB4YzAsMHhhMywweDg1LDB4MzcKLSwweGEzLDB4ODMsMHgzNywweGEzLDB4ODcsMHgzNywweGEzLDB4ODksMHgzNywweGI4LDB4OTEsMHgwMywweGNkLDB4MzksMHhiOCwweDgwCi0sMHgwMCwweGNkLDB4MzUsMHhjNywweDA2LDB4YWEsMHgwMiwweGZmLDB4ZmYsMHhlNSwweDAwLDB4MjUsMHhmZiwweDUzLDB4ZTcsMHgwMAotLDB4ODEsMHgwZSwweDlhLDB4MzcsMHg4MCwweDAwLDB4YjgsMHg5MiwweDAzLDB4Y2QsMHgzOSwweDMzLDB4YzAsMHhlNywweDBlLDB4YmUKLSwweDA4LDB4MDAsMHg4ZSwweDA2LDB4MzgsMHgzNCwweGU4LDB4OGUsMHhlNSwweDI2LDB4YzcsMHgwNiwweDA0LDB4MDAsMHg3ZCwweDRiCi0sMHg4MywweDI2LDB4ZWYsMHgzNCwweGRmLDB4Y2QsMHg1MCwweDgzLDB4MGUsMHhlZiwweDM0LDB4MjAsMHhjMywweGY3LDB4MDYsMHg5YQotLDB4MzcsMHg4MCwweDAwLDB4NzQsMHgzMiwweGE5LDB4ZDAsMHgwNywweDc0LDB4MGMsMHhhOSwweDAwLDB4MDQsMHg3NCwweDBlLDB4MzMKLSwweGMwLDB4ZTcsMHgwZSwweGU5LDB4ZGEsMHhmZiwweGZmLDB4MDYsMHg4NSwweDM3LDB4ZTksMHhkMywweGZmLDB4ZmYsMHgwNiwweDgzCi0sMHgzNywweGU5LDB4Y2MsMHhmZiwweGM3LDB4MDYsMHgzZCwweDM3LDB4MDEsMHgwMCwweGU5LDB4MzYsMHhmZSwweDgzLDB4MjYsMHg5YQotLDB4MzcsMHg3ZiwweGJiLDB4ZmYsMHg3ZiwweGNkLDB4NTMsMHhlNSwweDAwLDB4MGQsMHgwMCwweGFjLDB4ZTcsMHgwMCwweGU1LDB4MDIKLSwweDI1LDB4ZmYsMHhmYiwweDI1LDB4ZWYsMHhmZiwweDI1LDB4ZmYsMHhmNywweDBkLDB4MDEsMHgwMCwweGU3LDB4MDIsMHhhMSwweDgzCi0sMHgzNywweDNiLDB4MDYsMHg0NiwweDM3LDB4N2YsMHhjZCwweGExLDB4ODUsMHgzNywweDNiLDB4MDYsMHg0OCwweDM3LDB4N2MsMHhjNAotLDB4YzcsMHgwNiwweGEzLDB4MzYsMHgwMywweDAwLDB4YmUsMHgxMywweDAwLDB4ZTgsMHhmZCwweDAzLDB4YjgsMHg5MywweDAzLDB4Y2QKLSwweDM5LDB4YjgsMHg5NCwweDAzLDB4Y2QsMHgzOSwweGI4LDB4OTYsMHgwMywweGNkLDB4MzksMHhiOCwweDk1LDB4MDMsMHhjZCwweDM5Ci0sMHhiZSwweDA2LDB4MDAsMHhlOCwweGUzLDB4MDMsMHhlOSwweGQ2LDB4MDMsMHg4MywweDNlLDB4YTMsMHgzNiwweDAzLDB4NzQsMHgwMQotLDB4YzMsMHhiZSwweDEzLDB4MDAsMHhlOCwweGQyLDB4MDMsMHhiOCwweDk0LDB4MDMsMHhjZCwweDM5LDB4YzMsMHhiOCwweDk0LDB4MDMKLSwweGNkLDB4M2EsMHgyNiwweGEwLDB4MmIsMHgwMCwweDI2LDB4OGIsMHgxZSwweDJjLDB4MDAsMHhjZCwweDM0LDB4ODMsMHgzZSwweGEzCi0sMHgzNiwweDAzLDB4NzQsMHgwMywweGU5LDB4YTgsMHgwMywweDNjLDB4MGQsMHg3NSwweDNlLDB4ODMsMHhmYiwweDAwLDB4NzUsMHgzOQotLDB4ZTUsMHgwMiwweDBkLDB4MDAsMHgyMCwweGU3LDB4MDIsMHhiOCwweDkzLDB4MDMsMHhjZCwweDNhLDB4YzcsMHgwNiwweGEzLDB4MzYKLSwweDA0LDB4MDAsMHhiZSwweDAwLDB4MDAsMHhlOCwweDBjLDB4ZmMsMHhjNiwweDA2LDB4OWQsMHgzNiwweDgwLDB4YzYsMHgwNiwweDllCi0sMHgzNiwweDAwLDB4YzcsMHgwNiwweDMzLDB4MzcsMHgwMiwweDAwLDB4YjgsMHg5YSwweDAzLDB4Y2QsMHgzOSwweGU4LDB4ZmMsMHgwMAotLDB4YzcsMHgwNiwweDRjLDB4MzcsMHgwMCwweDAwLDB4ZTksMHg2NiwweDAzLDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwOCwweDAwLDB4ZTkKLSwweDYxLDB4ZmQsMHg4MywweDNlLDB4YTMsMHgzNiwweDAzLDB4NzUsMHgwOSwweGM3LDB4MDYsMHgzZCwweDM3LDB4MDUsMHgwMCwweGU5Ci0sMHg1MSwweGZkLDB4ZTksMHg0YSwweDAzLDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwNCwweDc0LDB4MTIsMHg4MywweDNlLDB4YTMsMHgzNgotLDB4MDUsMHg3NCwweDBiLDB4Y2QsMHgzNCwweGM3LDB4MDYsMHgzZCwweDM3LDB4MDcsMHgwMCwweGU5LDB4MzUsMHhmZCwweGM3LDB4MDYKLSwweGEzLDB4MzYsMHgwNiwweDAwLDB4YzYsMHgwNiwweDllLDB4MzYsMHhmZiwweGI4LDB4OWEsMHgwMywweGNkLDB4M2EsMHhiOCwweDk5Ci0sMHgwMywweGNkLDB4M2EsMHhiOCwweDk2LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg5NywweDAzLDB4Y2QsMHgzOSwweGI4LDB4OTgsMHgwMwotLDB4Y2QsMHgzOSwweGI4LDB4OWIsMHgwMywweGNkLDB4MzksMHhlOSwweDE4LDB4ZmQsMHhjZCwweDM0LDB4ODMsMHgzZSwweGEzLDB4MzYKLSwweDA0LDB4NzcsMHgxOCwweDgzLDB4M2UsMHhhMywweDM2LDB4MDMsMHg3NSwweDA4LDB4ZjcsMHgwNiwweDliLDB4MzYsMHgwMCwweDAxCi0sMHg3NSwweDA5LDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwMSwweDAwLDB4ZTksMHhlOCwweGZjLDB4ZTksMHhlMSwweDAyLDB4Y2QsMHgzNAotLDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwMiwweDc3LDB4MDksMHhjNywweDA2LDB4M2QsMHgzNywweDAxLDB4MDAsMHhlOSwweGQzLDB4ZmMKLSwweDgzLDB4M2UsMHhhMywweDM2LDB4MDQsMHg3NywweDA1LDB4YjgsMHg5NiwweDAzLDB4Y2QsMHgzOSwweGU5LDB4YzAsMHgwMiwweDgzCi0sMHgzZSwweGEzLDB4MzYsMHgwMywweDc1LDB4MTAsMHgyNiwweGExLDB4MGMsMHgwMCwweDI1LDB4MDcsMHgwMCwweDUwLDB4M2QsMHgwNAotLDB4MDAsMHg3NSwweDAzLDB4ZTgsMHgzNiwweDAwLDB4YTEsMHhmMywweDM2LDB4ODYsMHhlMCwweGU3LDB4MWUsMHhhMywweGUzLDB4MzYKLSwweDgxLDB4MjYsMHgwYiwweDM3LDB4MDAsMHgwMywweDgxLDB4MjYsMHgwZCwweDM3LDB4N2IsMHg3ZiwweDgzLDB4MGUsMHgwZCwweDM3Ci0sMHg0OCwweGU4LDB4MTQsMHhmMywweDU4LDB4M2QsMHgwNCwweDAwLDB4NzQsMHgwOSwweDI2LDB4ZjcsMHgwNiwweDBjLDB4MDAsMHgyMAotLDB4MDAsMHg3NSwweDA2LDB4YjgsMHgwMSwweDAwLDB4ZTksMHg3YSwweDAyLDB4ZTksMHg4NiwweGZjLDB4YTEsMHhlNSwweDM2LDB4ZTcKLSwweDJlLDB4YTEsMHhlNywweDM2LDB4ZTcsMHgzZSwweGExLDB4ZDMsMHgzNiwweGEzLDB4OWMsMHgzNCwweGExLDB4ZDUsMHgzNiwweGEzCi0sMHg5ZSwweDM0LDB4YzMsMHgyNiwweDgwLDB4M2UsMHgxYywweDAwLDB4ZmYsMHg3NSwweDJmLDB4MjYsMHg4MCwweDNlLDB4MWUsMHgwMAotLDB4ZmYsMHg3NSwweDI3LDB4MjYsMHhmNywweDA2LDB4MGMsMHgwMCwweDQwLDB4MDAsMHg3NSwweDFiLDB4YTEsMHhkMSwweDM2LDB4MjYKLSwweGEzLDB4MWEsMHgwMCwweGExLDB4ZDMsMHgzNiwweDI2LDB4YTMsMHgxYywweDAwLDB4YTEsMHhkNSwweDM2LDB4MjYsMHhhMywweDFlCi0sMHgwMCwweGI4LDB4MGEsMHg4MCwweGU5LDB4MmMsMHgwMiwweGU5LDB4MzgsMHhmYywweGZmLDB4MDYsMHg5MCwweDM0LDB4YmUsMHgwYQotLDB4MDAsMHhjNiwweDA2LDB4YjYsMHgzNCwweDAxLDB4ZjYsMHgwNiwweDlkLDB4MzYsMHg4MCwweDc1LDB4MDUsMHg4MywweDBlLDB4YzIKLSwweDM0LDB4MDEsMHhjZCwweDM0LDB4ZTksMHgwYywweGZjLDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwMywweDc1LDB4MDksMHhjNywweDA2Ci0sMHgzZCwweDM3LDB4MDUsMHgwMCwweGU5LDB4ZmMsMHhmYiwweGU1LDB4MDIsMHgwZCwweDAzLDB4MDAsMHgwZCwweDAwLDB4ODgsMHgwZAotLDB4MDAsMHg0MCwweDBkLDB4MDAsMHgwNCwweGU3LDB4MDIsMHhjNywweDA2LDB4YTMsMHgzNiwweDA1LDB4MDAsMHhjNiwweDA2LDB4OWUKLSwweDM2LDB4ZmYsMHhiZSwweDAyLDB4MDAsMHhlOCwweGUxLDB4MDEsMHhiOCwweDg5LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg5YSwweDAzCi0sMHhjZCwweDNhLDB4YjgsMHg5OSwweDAzLDB4Y2QsMHgzOSwweGI4LDB4OTcsMHgwMywweGNkLDB4MzksMHhiOCwweDk4LDB4MDMsMHhjZAotLDB4MzksMHhlOSwweGJiLDB4MDEsMHg4MywweDNlLDB4YTMsMHgzNiwweDAzLDB4NzQsMHgwYSwweDgzLDB4M2UsMHhhMywweDM2LDB4MDQKLSwweDc0LDB4MDMsMHhlOSwweGFhLDB4MDEsMHhiZSwweDA2LDB4MDAsMHhlOCwweGFlLDB4MDEsMHhiOCwweDk1LDB4MDMsMHhjZCwweDM5Ci0sMHhlOSwweDljLDB4MDEsMHg4MywweDNlLDB4YTMsMHgzNiwweDA1LDB4NzQsMHgwMywweGU5LDB4OTIsMHgwMSwweGJlLDB4MDIsMHgwMAotLDB4ZTgsMHg5NiwweDAxLDB4YjgsMHg5OSwweDAzLDB4Y2QsMHgzOSwweGU5LDB4ODQsMHgwMSwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDUKLSwweDAwLDB4ZTksMHg3YiwweDAxLDB4ZTUsMHgwMiwweDI1LDB4ZmYsMHhkZiwweGU3LDB4MDIsMHhjNywweDA2LDB4YTMsMHgzNiwweDA3Ci0sMHgwMCwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDUsMHgwMCwweGU5LDB4NjUsMHgwMSwweGU4LDB4ZDUsMHgwNCwweGM2LDB4MDYsMHg5ZAotLDB4MzYsMHgwMCwweGM3LDB4MDYsMHg5YiwweDM2LDB4MDAsMHgwMCwweGM3LDB4MDYsMHgwZiwweDM3LDB4MDUsMHgwMCwweGM3LDB4MDYKLSwweGE4LDB4MDIsMHgwMCwweDAwLDB4YzcsMHgwNiwweDRjLDB4MzcsMHgwMSwweDAwLDB4ZTUsMHgwMiwweDI1LDB4ZjksMHhmZiwweDBkCi0sMHgwMywweDAwLDB4MGQsMHgwMCwweDg4LDB4MjUsMHhlZiwweGZmLDB4MGQsMHgwMCwweDQwLDB4MGQsMHgwMCwweDA0LDB4ZTcsMHgwMgotLDB4ZTksMHg2NywweGZjLDB4YjgsMHg5YSwweDAzLDB4Y2QsMHgzOSwweGY3LDB4MDYsMHhmNCwweDMzLDB4MDAsMHgxMCwweDc1LDB4MDkKLSwweGM3LDB4MDYsMHgzMywweDM3LDB4MDIsMHgwMCwweGU5LDB4MTYsMHgwMSwweGZmLDB4MGUsMHgzMywweDM3LDB4NzQsMHgwMywweGU5Ci0sMHgwZCwweDAxLDB4ZmYsMHgwNiwweDhlLDB4MzQsMHg4MywweDBlLDB4YzIsMHgzNCwweDA4LDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwMwotLDB4MDAsMHhlOSwweGZmLDB4ZmEsMHhjMywweDUyLDB4NTAsMHhiYSwweGUwLDB4MDAsMHhiOCwweDAwLDB4MTAsMHhlZiwweDU4LDB4NWEKLSwweGMzLDB4YzcsMHgwNiwweDNkLDB4MzcsMHgwMCwweDAwLDB4ZTksMHhlOSwweGZhLDB4ZmEsMHhlOCwweDU0LDB4MDQsMHhiOCwweDgwCi0sMHgwMywweDhlLDB4YzAsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4ZDgsMHgyYiwweGI4LDB4N2YsMHgwMywweDhlLDB4YzAsMHgyNgotLDB4YzcsMHgwNiwweDA0LDB4MDAsMHhlOCwweDJjLDB4MzMsMHhjMCwweDhlLDB4YzAsMHhhMSwweGE3LDB4MzYsMHhhMywweGE5LDB4MzYKLSwweGExLDB4YTksMHgzNiwweGU3LDB4MDAsMHhhMSwweGFiLDB4MzYsMHhlNywweDAyLDB4YzcsMHgwNiwweDA1LDB4MzcsMHgwMCwweDAwCi0sMHhjNywweDA2LDB4MDcsMHgzNywweDAwLDB4MDAsMHhjNywweDA2LDB4MDksMHgzNywweDAwLDB4MDAsMHhjNiwweDA2LDB4OWQsMHgzNgotLDB4MDAsMHhjNiwweDA2LDB4OWUsMHgzNiwweGZmLDB4YzcsMHgwNiwweDliLDB4MzYsMHgwMCwweDAwLDB4YzcsMHgwNiwweGEzLDB4MzYKLSwweDAwLDB4MDAsMHhjNywweDA2LDB4MGYsMHgzNywweDAwLDB4MDAsMHhjNywweDA2LDB4YTgsMHgwMiwweDAwLDB4MDAsMHhjNywweDA2Ci0sMHg0YywweDM3LDB4MDEsMHgwMCwweDgxLDB4MjYsMHhhZiwweDM2LDB4ZmYsMHhlNywweGExLDB4YWYsMHgzNiwweGU3LDB4MDYsMHhiYgotLDB4ZmYsMHg3ZiwweGNkLDB4NTMsMHhlOCwweDdjLDB4ZjksMHhlNSwweDU2LDB4MGQsMHgwMiwweDAwLDB4ZTcsMHg1NiwweGZiLDB4YzMKLSwweDhkLDB4M2UsMHhjMCwweDUzLDB4OGQsMHgzNiwweGYwLDB4MzgsMHhiOSwweDBlLDB4MDAsMHg4YiwweDFlLDB4MzAsMHgzNCwweDg5Ci0sMHg1YywweDAyLDB4MmUsMHg4YiwweDQ1LDB4MDIsMHg4OSwweDQ0LDB4MDYsMHgyZSwweDhiLDB4MDUsMHg4OSwweDQ0LDB4MDQsMHg4MwotLDB4YzcsMHgwNCwweDgzLDB4YzYsMHgxMCwweGUyLDB4ZTgsMHhiOCwweDgwLDB4MDMsMHg4ZSwweGMwLDB4MjYsMHhjNywweDA2LDB4MDQKLSwweDAwLDB4ZTIsMHg1MSwweGI4LDB4N2YsMHgwMywweDhlLDB4YzAsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4YjIsMHg1MiwweDMzCi0sMHhjMCwweDhlLDB4YzAsMHhjNywweDA2LDB4YTEsMHgzNiwweDAxLDB4MDAsMHhjNywweDA2LDB4MGYsMHgzNywweDA1LDB4MDAsMHhjMwotLDB4MzMsMHhmZiwweDhlLDB4MDYsMHhhNiwweDAyLDB4OGIsMHgzNiwweGE0LDB4MDIsMHgyZSwweGZmLDB4YTQsMHhhMCwweDUzLDB4ZTgKLSwweDhjLDB4ZGIsMHhjMywweGU4LDB4NDgsMHhmNywweGU5LDB4ZjYsMHhmZiwweDhlLDB4MDYsMHgzOCwweDM0LDB4ZTgsMHgwNywweGUxCi0sMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4ZGYsMHg0ZiwweGNkLDB4NTAsMHhjMywweDI2LDB4YzcsMHgwNiwweDBhLDB4MDAsMHgwMAotLDB4MDAsMHgyNiwweGZmLDB4MjYsMHgwNCwweDAwLDB4Y2QsMHgzNCwweGU5LDB4ZDQsMHhmZiwweGExLDB4ZDEsMHgzNiwweDI2LDB4MzkKLSwweDA2LDB4MWEsMHgwMCwweDc1LDB4MjIsMHhhMSwweGQzLDB4MzYsMHgyNiwweDM5LDB4MDYsMHgxYywweDAwLDB4NzUsMHgxOCwweGExCi0sMHhkNSwweDM2LDB4MjYsMHgzOSwweDA2LDB4MWUsMHgwMCwweDc1LDB4MGUsMHgyNiwweGY3LDB4MDYsMHgwYywweDAwLDB4NDAsMHgwMAotLDB4NzQsMHgwNSwweDgzLDB4MGUsMHg2NiwweDM3LDB4NDAsMHg4MSwweDBlLDB4YWYsMHgzNiwweDAwLDB4MTAsMHhhMSwweGFmLDB4MzYKLSwweGU3LDB4MDYsMHg4MywweDNlLDB4YTMsMHgzNiwweDAyLDB4NzUsMHgwNSwweGNkLDB4MzQsMHhlOSwweDU2LDB4ZmIsMHg4MywweDNlCi0sMHhhMywweDM2LDB4MDAsMHg3NCwweGIxLDB4ODMsMHgzZSwweGEzLDB4MzYsMHgwNSwweDc3LDB4YWEsMHgyNiwweGY2LDB4MDYsMHgwYQotLDB4MDAsMHhmZiwweDc1LDB4YTIsMHhlOCwweGZkLDB4ZGQsMHg1MCwweGY2LDB4MDYsMHg5MywweDM2LDB4MjAsMHg3NSwweDAzLDB4ZTkKLSwweDhjLDB4MDAsMHgyNiwweGExLDB4MGMsMHgwMCwweDI1LDB4MDcsMHgwMCwweDNkLDB4MDcsMHgwMCwweDc1LDB4MDMsMHhlOSwweDc2Ci0sMHgwMCwweDNkLDB4MDUsMHgwMCwweDc1LDB4MDMsMHhlOSwweDZlLDB4MDAsMHhmNywweDA2LDB4ZTYsMHgzNCwweDE4LDB4ODAsMHg3NQotLDB4MDMsMHhlOSwweDZhLDB4MDAsMHhmNywweDA2LDB4ZTYsMHgzNCwweDAwLDB4ODAsMHg3NCwweDM1LDB4MjYsMHg4MCwweDNlLDB4MjkKLSwweDAwLDB4MDIsMHg3NSwweDJkLDB4NTEsMHg1NiwweDU3LDB4OGQsMHgzNiwweDNlLDB4MzQsMHg4ZCwweDNlLDB4MjAsMHgwMCwweGI5Ci0sMHgwNiwweDAwLDB4ZjMsMHhhNiwweDVmLDB4NWUsMHg1OSwweDc1LDB4NDUsMHgyNiwweGExLDB4MjAsMHgwMCwweGEzLDB4M2UsMHgzNAotLDB4MjYsMHhhMSwweDIyLDB4MDAsMHhhMywweDQwLDB4MzQsMHgyNiwweGExLDB4MjQsMHgwMCwweGEzLDB4NDIsMHgzNCwweGU5LDB4MjYKLSwweDAwLDB4ZjcsMHgwNiwweGU2LDB4MzQsMHgwOCwweDAwLDB4NzQsMHgwYiwweDI2LDB4ODAsMHgzZSwweDE5LDB4MDAsMHgwMCwweDc0Ci0sMHgwMywweGU5LDB4MTMsMHgwMCwweGY3LDB4MDYsMHhlNiwweDM0LDB4MTAsMHgwMCwweDc0LDB4MTIsMHgyNiwweGEwLDB4MjgsMHgwMAotLDB4YzAsMHhlOCwweDA0LDB4MjIsMHhjMCwweDc0LDB4MDcsMHgyNiwweGM3LDB4MDYsMHgwNCwweDAwLDB4ZmYsMHhmZiwweDU4LDB4MjMKLSwweGMwLDB4NzQsMHgwMywweGU5LDB4ZGQsMHhmZSwweDgxLDB4MjYsMHg5YiwweDM2LDB4ZmYsMHhmZSwweDI2LDB4YTEsMHgyMCwweDAwCi0sMHgzYiwweDA2LDB4ZDEsMHgzNiwweDc1LDB4MWEsMHgyNiwweGExLDB4MjIsMHgwMCwweDNiLDB4MDYsMHhkMywweDM2LDB4NzUsMHgxMAotLDB4MjYsMHhhMSwweDI0LDB4MDAsMHgzYiwweDA2LDB4ZDUsMHgzNiwweDc1LDB4MDYsMHg4MSwweDBlLDB4OWIsMHgzNiwweDAwLDB4MDEKLSwweDI2LDB4YTEsMHgyMCwweDAwLDB4MjUsMHg3ZiwweGZmLDB4YTMsMHhiOCwweDM0LDB4MjYsMHhhMSwweDIyLDB4MDAsMHhhMywweGJhCi0sMHgzNCwweDI2LDB4YTEsMHgyNCwweDAwLDB4YTMsMHhiYywweDM0LDB4OGIsMHhjNiwweDg2LDB4YzQsMHhhMywweGMwLDB4MzQsMHhkMQotLDB4ZTYsMHg4MCwweGZjLDB4MDksMHg3NCwweDAzLDB4ZTgsMHhmNiwweGY1LDB4YTEsMHgwNSwweDM3LDB4MGIsMHgwNiwweDA3LDB4MzcKLSwweDBiLDB4MDYsMHgwOSwweDM3LDB4NzQsMHgzZSwweDI2LDB4YTEsMHgyMCwweDAwLDB4M2IsMHgwNiwweDA1LDB4MzcsMHg3NSwweDE3Ci0sMHgyNiwweGExLDB4MjIsMHgwMCwweDNiLDB4MDYsMHgwNywweDM3LDB4NzUsMHgwZCwweDI2LDB4YTEsMHgyNCwweDAwLDB4M2IsMHgwNgotLDB4MDksMHgzNywweDc1LDB4MDMsMHhlOSwweDFkLDB4MDAsMHgyNiwweGEwLDB4MjgsMHgwMCwweDI0LDB4MGYsMHgzYywweDAzLDB4NzQKLSwweDFiLDB4M2MsMHgwMCwweDc1LDB4MGYsMHg4MywweDNlLDB4YTMsMHgzNiwweDA0LDB4NzQsMHgxMCwweGY3LDB4MDYsMHg5YiwweDM2Ci0sMHgwMCwweDAxLDB4NzQsMHgwOCwweDJlLDB4ZmYsMHg5NCwweGY4LDB4NTMsMHhlOSwweDMzLDB4ZmUsMHhjZCwweDM0LDB4YzcsMHgwNgotLDB4M2QsMHgzNywweDAxLDB4MDAsMHhlOSwweDJjLDB4ZjgsMHg4MywweDNlLDB4YTMsMHgzNiwweDA1LDB4NzQsMHgxMCwweDgzLDB4M2UKLSwweGEzLDB4MzYsMHgwMSwweDdlLDB4MDksMHg4MywweGVlLDB4MTYsMHgyZSwweGZmLDB4OTQsMHgyNCwweDU0LDB4YzMsMHhjZCwweDM0Ci0sMHhjMywweDI2LDB4YTEsMHgwYywweDAwLDB4M2QsMHhmZiwweDdmLDB4NzQsMHgwNSwweDI2LDB4ZmYsMHgyNiwweDA0LDB4MDAsMHhlOQotLDB4ZmQsMHhmZCwweGExLDB4ZjQsMHgzMywweGE5LDB4MDAsMHg4OCwweDc0LDB4MGIsMHhhOSwweDAwLDB4MTAsMHg3NSwweDA5LDB4OGIKLSwweDFlLDB4NDMsMHgzNywweGZmLDB4ZTMsMHhlOSwweDk3LDB4MDAsMHhjNywweDA2LDB4MzUsMHgzNywweDA1LDB4MDAsMHhjNywweDA2Ci0sMHg0MywweDM3LDB4MjgsMHg1MiwweGY3LDB4MDYsMHhmNCwweDMzLDB4MDAsMHgwOCwweDc0LDB4MDYsMHhjNywweDA2LDB4NDMsMHgzNwotLDB4MWEsMHg1MiwweGI4LDB4ODAsMHgwMywweGNkLDB4MzksMHhlOSwweGM1LDB4ZmQsMHhhOSwweDAwLDB4MDgsMHg3NCwweGQ5LDB4ZmYKLSwweDBlLDB4MzUsMHgzNywweDc1LDB4ZWQsMHhlOSwweDMwLDB4MDAsMHhhOSwweDAwLDB4MDgsMHg3NSwweGNiLDB4ZmYsMHgwZSwweDM1Ci0sMHgzNywweDc1LDB4ZGYsMHg4MSwweDBlLDB4YzIsMHgzNCwweGMwLDB4MDAsMHhmNiwweDA2LDB4OWQsMHgzNiwweDgwLDB4NzQsMHgwZgotLDB4ODEsMHgwZSwweDliLDB4MzYsMHgwMCwweDgwLDB4YzcsMHgwNiwweDBmLDB4MzcsMHgwMiwweDAwLDB4ZTksMHg5MCwweGZkLDB4YzcKLSwweDA2LDB4M2QsMHgzNywweDAyLDB4MDAsMHhlOSwweDhiLDB4ZjcsMHg4MCwweDI2LDB4OWUsMHgzNiwweGZmLDB4NzUsMHgzMCwweGY2Ci0sMHgwNiwweDlkLDB4MzYsMHg4MCwweDc0LDB4MjAsMHhmZiwweDA2LDB4OTQsMHgzNCwweDgzLDB4MGUsMHg2NiwweDM3LDB4MjAsMHg4ZQotLDB4MDYsMHgzMCwweDM0LDB4MjYsMHhmNywweDA2LDB4MGEsMHgwMCwweDAwLDB4MDEsMHg3NCwweDA3LDB4MjYsMHg4MSwweDBlLDB4MDgKLSwweDAwLDB4MDAsMHgwMSwweGU5LDB4MDksMHgwMCwweGM3LDB4MDYsMHgzZCwweDM3LDB4MDQsMHgwMCwweGU5LDB4NTQsMHhmNywweDgxCi0sMHgwZSwweGFmLDB4MzYsMHgwMCwweDA4LDB4YTEsMHhhZiwweDM2LDB4ZTcsMHgwNiwweGU1LDB4MGEsMHhhOSwweDAwLDB4ODAsMHg3NAotLDB4MGUsMHg4MSwweDI2LDB4YWYsMHgzNiwweGZmLDB4ZjcsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2LDB4ZTksMHg0OSwweGZmLDB4ZTkKLSwweDJkLDB4ZmQsMHhjNywweDA2LDB4NDEsMHgzNywweDAwLDB4MDAsMHhiZSwweDI5LDB4MDAsMHhlOCwweDJiLDB4ZmQsMHhlOSwweDFlCi0sMHhmZCwweGNkLDB4MzQsMHg4MywweDNlLDB4YTMsMHgzNiwweDA0LDB4NzcsMHgwOSwweGM3LDB4MDYsMHgzZCwweDM3LDB4MDEsMHgwMAotLDB4ZTksMHgxMCwweGY3LDB4ZTksMHgwOSwweGZkLDB4Y2QsMHgzNCwweGMzLDB4YzcsMHgwNiwweDliLDB4MzYsMHgwMCwweDAwLDB4ZTgKLSwweDBjLDB4ZjUsMHg4MSwweDI2LDB4YWYsMHgzNiwweGZmLDB4ZTcsMHhhMSwweGFmLDB4MzYsMHhlNywweDA2LDB4ODEsMHgyNiwweDliCi0sMHgzNiwweGZmLDB4N2YsMHhlNSwweDAyLDB4MGQsMHgwMSwweDAwLDB4MjUsMHhlZiwweGZmLDB4MjUsMHhmZiwweGRmLDB4ZTcsMHgwMgotLDB4YmIsMHhmZiwweDdmLDB4Y2QsMHg1MywweDMzLDB4YzAsMHhhMywweDlkLDB4MzYsMHhhMywweDlmLDB4MzYsMHhlOCwweDIwLDB4ZjMKLSwweGU4LDB4NDMsMHhmMywweDgzLDB4MGUsMHg5YiwweDM2LDB4MTAsMHhjNywweDA2LDB4OTksMHgzNiwweDAwLDB4MDAsMHhlOCwweGQyCi0sMHhmNSwweGU1LDB4NTYsMHgwZCwweDAyLDB4MDAsMHhlNywweDU2LDB4YzcsMHgwNiwweGE4LDB4MDIsMHgwMCwweDAwLDB4YmUsMHgwMAotLDB4MDAsMHhlOCwweDMwLDB4ZjUsMHhjNiwweDA2LDB4YTAsMHgzNiwweDBlLDB4YjgsMHg5YywweDAzLDB4Y2QsMHgzOSwweGI4LDB4ODAKLSwweDAwLDB4Y2QsMHgzNSwweGM3LDB4MDYsMHhhYSwweDAyLDB4ZmYsMHhmZiwweGM3LDB4MDYsMHhhMSwweDM2LDB4MDEsMHgwMCwweGU5Ci0sMHhhNSwweGY2LDB4MDYsMHhiOCwweDhmLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg5MCwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OTEsMHgwMwotLDB4Y2QsMHgzYSwweGI4LDB4OTIsMHgwMywweGNkLDB4M2EsMHhiOCwweDkzLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg5NCwweDAzLDB4Y2QKLSwweDNhLDB4YjgsMHg5NSwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OTYsMHgwMywweGNkLDB4M2EsMHhiOCwweDk3LDB4MDMsMHhjZCwweDNhCi0sMHhiOCwweDk4LDB4MDMsMHhjZCwweDNhLDB4YjgsMHg5OSwweDAzLDB4Y2QsMHgzYSwweGI4LDB4OWEsMHgwMywweGNkLDB4M2EsMHhiOAotLDB4OWIsMHgwMywweGNkLDB4M2EsMHhiOCwweDdmLDB4MDMsMHhjZCwweDNhLDB4YjgsMHg4MCwweDAzLDB4Y2QsMHgzYSwweDA3LDB4YzMKLSwweGY3LDB4NDksMHhmMSwweDRlLDB4ZGYsMHg0ZiwweGRmLDB4NGYsMHhkZiwweDRmLDB4ZGYsMHg0ZiwweGY4LDB4NTEsMHhkZiwweDRmCi0sMHhmYSwweDRmLDB4MGIsMHg1MCwweGQxLDB4NTEsMHhkZiwweDRmLDB4ZGYsMHg0ZiwweGRmLDB4NGYsMHhkZiwweDRmLDB4ZGYsMHg0ZgotLDB4ZTQsMHg0ZSwweDA2LDB4MDAsMHhjZCwweDRhLDB4MDQsMHgwMCwweGU0LDB4NGUsMHgxOSwweDAwLDB4YWQsMHg0YiwweGZhLDB4MDAKLSwweDgyLDB4NGMsMHgwOCwweDA3LDB4MDksMHg0YywweDE0LDB4MDAsMHgyNCwweDRlLDB4NjQsMHgwMCwweGQ3LDB4NGQsMHhmNCwweDAxCi0sMHg2NCwweDRlLDB4YmMsMHgwMiwweDdhLDB4NGUsMHhlOCwweDAzLDB4NDMsMHg0ZSwweDAyLDB4MDAsMHhiMywweDRlLDB4ZjQsMHgwMQotLDB4NWIsMHg0ZSwweGY0LDB4MDEsMHhlNSwweDRlLDB4MTQsMHgwMCwweDA2LDB4NTAsMHgwNiwweDUwLDB4OTUsMHg0YywweGMxLDB4NTIKLSwweGMxLDB4NTIsMHhmZSwweDRjLDB4ZGEsMHg0YywweDA2LDB4NTAsMHgwNiwweDUwLDB4MDYsMHg1MCwweDA2LDB4NTAsMHhiNywweDUxCi0sMHhiNywweDUxLDB4YjcsMHg1MSwweGI3LDB4NTEsMHhiNywweDUxLDB4YjcsMHg1MSwweDA2LDB4NTAsMHhkNSwweDRhLDB4MDYsMHg1MAotLDB4MWQsMHg0YywweDA2LDB4NTAsMHg4MywweDRkLDB4MWYsMHg0ZCwweDFmLDB4NGQsMHhlZCwweDQwLDB4ZmEsMHg0MCwweDA3LDB4NDEKLSwweDM3LDB4MzcsMHgyZSwweDM3LDB4MzcsMHgyMCwweDIwLDB4NzksMHg3OSwweDJmLDB4NzksMHg3OSwweDJmLDB4NzksMHg3OSwweDIwCi0sMHgzMCwweDMxLDB4MmUsMHgzOSwweDMwLDB4MjAsMHgyMCwweDMwLDB4MzIsMHgyZiwweDMxLDB4MzcsMHgyZiwweDM5LDB4MzksMHgyMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwCi0sMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMAotLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLSwweDkwLDB4ZWEsMHhjMCwweDE1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMywweDA2Ci19IDsgIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKaW5kZXggOTMzZmNmYi4uZDNmMzllOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGguYworKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTIyMywxMCArMjIyLDEwIEBACiAJCSAgICAoKCh1bnNpZ25lZClza2ItPmRhdGEpICYgKFVDQ19HRVRIX1JYX0RBVEFfQlVGX0FMSUdOTUVOVCAtCiAJCQkJCSAgICAgIDEpKSk7CiAKLQlza2ItPmRldiA9IHVnZXRoLT5kZXY7CisJc2tiLT5kZXYgPSB1Z2V0aC0+bmRldjsKIAogCW91dF9iZTMyKCYoKHN0cnVjdCBxZV9iZCBfX2lvbWVtICopYmQpLT5idWYsCi0JCSAgICAgIGRtYV9tYXBfc2luZ2xlKCZ1Z2V0aC0+ZGV2LT5kZXYsCisJCSAgICAgIGRtYV9tYXBfc2luZ2xlKHVnZXRoLT5kZXYsCiAJCQkJICAgICBza2ItPmRhdGEsCiAJCQkJICAgICB1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5tYXhfcnhfYnVmX2xlbmd0aCArCiAJCQkJICAgICBVQ0NfR0VUSF9SWF9EQVRBX0JVRl9BTElHTk1FTlQsCkBAIC0xODcyLDcgKzE4NzEsNyBAQAogCQkJY29udGludWU7CiAJCWZvciAoaiA9IDA7IGogPCB1Z2V0aC0+dWdfaW5mby0+YmRSaW5nTGVuVHhbaV07IGorKykgewogCQkJaWYgKHVnZXRoLT50eF9za2J1ZmZbaV1bal0pIHsKLQkJCQlkbWFfdW5tYXBfc2luZ2xlKCZ1Z2V0aC0+ZGV2LT5kZXYsCisJCQkJZG1hX3VubWFwX3NpbmdsZSh1Z2V0aC0+ZGV2LAogCQkJCQkJIGluX2JlMzIoJigoc3RydWN0IHFlX2JkIF9faW9tZW0gKiliZCktPmJ1ZiksCiAJCQkJCQkgKGluX2JlMzIoKHUzMiBfX2lvbWVtICopYmQpICYKIAkJCQkJCSAgQkRfTEVOR1RIX01BU0spLApAQCAtMTkwMCw3ICsxODk5LDcgQEAKIAkJCWJkID0gdWdldGgtPnBfcnhfYmRfcmluZ1tpXTsKIAkJCWZvciAoaiA9IDA7IGogPCB1Z2V0aC0+dWdfaW5mby0+YmRSaW5nTGVuUnhbaV07IGorKykgewogCQkJCWlmICh1Z2V0aC0+cnhfc2tidWZmW2ldW2pdKSB7Ci0JCQkJCWRtYV91bm1hcF9zaW5nbGUoJnVnZXRoLT5kZXYtPmRldiwKKwkJCQkJZG1hX3VubWFwX3NpbmdsZSh1Z2V0aC0+ZGV2LAogCQkJCQkJaW5fYmUzMigmKChzdHJ1Y3QgcWVfYmQgX19pb21lbSAqKWJkKS0+YnVmKSwKIAkJCQkJCXVnZXRoLT51Z19pbmZvLT4KIAkJCQkJCXVmX2luZm8ubWF4X3J4X2J1Zl9sZW5ndGggKwpAQCAtMzA3MSw3ICszMDcwLDcgQEAKIAogCS8qIHNldCB1cCB0aGUgYnVmZmVyIGRlc2NyaXB0b3IgKi8KIAlvdXRfYmUzMigmKChzdHJ1Y3QgcWVfYmQgX19pb21lbSAqKWJkKS0+YnVmLAotCQkgICAgICBkbWFfbWFwX3NpbmdsZSgmdWdldGgtPmRldi0+ZGV2LCBza2ItPmRhdGEsCisJCSAgICAgIGRtYV9tYXBfc2luZ2xlKHVnZXRoLT5kZXYsIHNrYi0+ZGF0YSwKIAkJCSAgICAgIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKSk7CiAKIAkvKiBwcmludGsoS0VSTl9ERUJVRyJza2ItPmRhdGEgaXMgMHgleFxuIixza2ItPmRhdGEpOyAqLwpAQCAtMzEyNyw3ICszMTI2LDcgQEAKIAogCXVnZXRoX3ZkYmcoIiVzOiBJTiIsIF9fZnVuY19fKTsKIAotCWRldiA9IHVnZXRoLT5kZXY7CisJZGV2ID0gdWdldGgtPm5kZXY7CiAKIAkvKiBjb2xsZWN0IHJlY2VpdmVkIGJ1ZmZlcnMgKi8KIAliZCA9IHVnZXRoLT5yeEJkW3J4UV07CkBAIC0zMTYxLDcgKzMxNjAsNyBAQAogCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7CiAKIAkJCS8qIFRlbGwgdGhlIHNrYiB3aGF0IGtpbmQgb2YgcGFja2V0IHRoaXMgaXMgKi8KLQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHVnZXRoLT5kZXYpOworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgdWdldGgtPm5kZXYpOwogCiAJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKIAkJCS8qIFNlbmQgdGhlIHBhY2tldCB1cCB0aGUgc3RhY2sgKi8KQEAgLTM0MzIsNyArMzQzMSw3IEBACiAKIAl1Y2NfZ2V0aF9zdG9wKHVnZXRoKTsKIAotCWZyZWVfaXJxKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLmlycSwgdWdldGgtPmRldik7CisJZnJlZV9pcnEodWdldGgtPnVnX2luZm8tPnVmX2luZm8uaXJxLCB1Z2V0aC0+bmRldik7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKQEAgLTM0NDYsNyArMzQ0NSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAogCXVnZXRoID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB1Y2NfZ2V0aF9wcml2YXRlLCB0aW1lb3V0X3dvcmspOwotCWRldiA9IHVnZXRoLT5kZXY7CisJZGV2ID0gdWdldGgtPm5kZXY7CiAKIAl1Z2V0aF92ZGJnKCIlczogSU4iLCBfX2Z1bmNfXyk7CiAKQEAgLTM3NTYsNyArMzc1NSw4IEBACiAJCW1lbWNweShkZXYtPmRldl9hZGRyLCBtYWNfYWRkciwgNik7CiAKIAl1Z2V0aC0+dWdfaW5mbyA9IHVnX2luZm87Ci0JdWdldGgtPmRldiA9IGRldjsKKwl1Z2V0aC0+ZGV2ID0gZGV2aWNlOworCXVnZXRoLT5uZGV2ID0gZGV2OwogCXVnZXRoLT5ub2RlID0gbnA7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmggYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCmluZGV4IGUzYTI1ZTYuLjJmOGVlN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGguaApAQCAtMjAsNyArMjAsNiBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CiAKICNpbmNsdWRlIDxhc20vaW1tYXBfcWUuaD4KICNpbmNsdWRlIDxhc20vcWUuaD4KQEAgLTExMjksNyArMTEyOCw4IEBACiBzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSB7CiAJc3RydWN0IHVjY19nZXRoX2luZm8gKnVnX2luZm87CiAJc3RydWN0IHVjY19mYXN0X3ByaXZhdGUgKnVjY2Y7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IHdvcmtfc3RydWN0IHRpbWVvdXRfd29yazsKIAlzdHJ1Y3QgdWNjX2dldGggX19pb21lbSAqdWdfcmVnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYwppbmRleCBhNzU1YmVhLi42ZmNiNTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggY2RlNDIzYy4uZjg0Yjc4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtNSw2ICs1LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDggT3B0aW9uIEludGVybmF0aW9uYWwKICAqICAgICAgICAgICAgICAgICAgICAgRmlsaXAgQWJlbiA8Zi5hYmVuQG9wdGlvbi5jb20+CiAgKiAgICAgICAgICAgICAgICAgICAgIERlbmlzIEpvc2VwaCBCYXJyb3cgPGQuYmFyb3dAb3B0aW9uLmNvbT4KKyAqICAgICAgICAgICAgICAgICAgICAgSmFuIER1bW9uIDxqLmR1bW9uQG9wdGlvbi5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFuZHJldyBCaXJkIChTcGhlcmUgU3lzdGVtcyBMdGQpCiAgKiAgCQkJPGFqYkBzcGhlcmVzeXN0ZW1zLmNvLnVrPgogICogIENvcHlyaWdodCAoQykgMjAwOCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgpAQCAtNDYyLDkgKzQ2MywxNiBAQAogCXtVU0JfREVWSUNFKDB4MGFmMCwgMHg3NzAxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweDc4MDEpfSwKIAl7VVNCX0RFVklDRSgweDBhZjAsIDB4NzkwMSl9LAotCXtVU0JfREVWSUNFKDB4MGFmMCwgMHg3MzYxKX0sCi0Je1VTQl9ERVZJQ0UoMHgwYWYwLCAweGQwNTcpfSwKKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4ODIwMCl9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHg4MjAxKX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweGQwMzUpfSwKIAl7VVNCX0RFVklDRSgweDBhZjAsIDB4ZDA1NSl9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMTU1KX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweGQyNTUpfSwKKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4ZDA1Nyl9LAorCXtVU0JfREVWSUNFKDB4MGFmMCwgMHhkMTU3KX0sCisJe1VTQl9ERVZJQ0UoMHgwYWYwLCAweGQyNTcpfSwKKwl7VVNCX0RFVklDRSgweDBhZjAsIDB4ZDM1Nyl9LAogCXt9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGhzb19pZHMpOwpAQCAtMjQxMCwxNCArMjQxOCw2IEBACiAJaWYgKCFoc29fbmV0KQogCQlyZXR1cm47CiAKLQkvKiBzdGFydCBmcmVlaW5nICovCi0JZm9yIChpID0gMDsgaSA8IE1VWF9CVUxLX1JYX0JVRl9DT1VOVDsgaSsrKSB7Ci0JCXVzYl9mcmVlX3VyYihoc29fbmV0LT5tdXhfYnVsa19yeF91cmJfcG9vbFtpXSk7Ci0JCWtmcmVlKGhzb19uZXQtPm11eF9idWxrX3J4X2J1Zl9wb29sW2ldKTsKLQl9Ci0JdXNiX2ZyZWVfdXJiKGhzb19uZXQtPm11eF9idWxrX3R4X3VyYik7Ci0Ja2ZyZWUoaHNvX25ldC0+bXV4X2J1bGtfdHhfYnVmKTsKLQogCXJlbW92ZV9uZXRfZGV2aWNlKGhzb19uZXQtPnBhcmVudCk7CiAKIAlpZiAoaHNvX25ldC0+bmV0KSB7CkBAIC0yNDI1LDYgKzI0MjUsMTYgQEAKIAkJZnJlZV9uZXRkZXYoaHNvX25ldC0+bmV0KTsKIAl9CiAKKwkvKiBzdGFydCBmcmVlaW5nICovCisJZm9yIChpID0gMDsgaSA8IE1VWF9CVUxLX1JYX0JVRl9DT1VOVDsgaSsrKSB7CisJCXVzYl9mcmVlX3VyYihoc29fbmV0LT5tdXhfYnVsa19yeF91cmJfcG9vbFtpXSk7CisJCWtmcmVlKGhzb19uZXQtPm11eF9idWxrX3J4X2J1Zl9wb29sW2ldKTsKKwkJaHNvX25ldC0+bXV4X2J1bGtfcnhfYnVmX3Bvb2xbaV0gPSBOVUxMOworCX0KKwl1c2JfZnJlZV91cmIoaHNvX25ldC0+bXV4X2J1bGtfdHhfdXJiKTsKKwlrZnJlZShoc29fbmV0LT5tdXhfYnVsa190eF9idWYpOworCWhzb19uZXQtPm11eF9idWxrX3R4X2J1ZiA9IE5VTEw7CisKIAlrZnJlZShoc29fZGV2KTsKIH0KIApAQCAtMjUyNiwxNCArMjUzNiwxNSBAQAogfQogCiAvKiBDcmVhdGVzIG91ciBuZXR3b3JrIGRldmljZSAqLwotc3RhdGljIHN0cnVjdCBoc29fZGV2aWNlICpoc29fY3JlYXRlX25ldF9kZXZpY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3N0YXRpYyBzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2NyZWF0ZV9uZXRfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJCQlpbnQgcG9ydF9zcGVjKQogewogCWludCByZXN1bHQsIGk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldDsKIAlzdHJ1Y3QgaHNvX25ldCAqaHNvX25ldDsKIAlzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldjsKIAotCWhzb19kZXYgPSBoc29fY3JlYXRlX2RldmljZShpbnRlcmZhY2UsIEhTT19JTlRGX01VWCB8IEhTT19QT1JUX05FVFdPUkspOworCWhzb19kZXYgPSBoc29fY3JlYXRlX2RldmljZShpbnRlcmZhY2UsIHBvcnRfc3BlYyk7CiAJaWYgKCFoc29fZGV2KQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMjYxMywxMiArMjYyNCwxMiBAQAogewogCXN0cnVjdCBoc29fdGlvY21nZXQgKnRpb2NtZ2V0ID0gc2VyaWFsLT50aW9jbWdldDsKIAlpZiAodGlvY21nZXQpIHsKLQkJa2ZyZWUodGlvY21nZXQpOwogCQlpZiAodGlvY21nZXQtPnVyYikgewogCQkJdXNiX2ZyZWVfdXJiKHRpb2NtZ2V0LT51cmIpOwogCQkJdGlvY21nZXQtPnVyYiA9IE5VTEw7CiAJCX0KIAkJc2VyaWFsLT50aW9jbWdldCA9IE5VTEw7CisJCWtmcmVlKHRpb2NtZ2V0KTsKIAogCX0KIH0KQEAgLTI5MzMsNyArMjk0NCw4IEBACiAJCWlmICgocG9ydF9zcGVjICYgSFNPX1BPUlRfTUFTSykgPT0gSFNPX1BPUlRfTkVUV09SSykgewogCQkJLyogQ3JlYXRlIHRoZSBuZXR3b3JrIGRldmljZSAqLwogCQkJaWYgKCFkaXNhYmxlX25ldCkgewotCQkJCWhzb19kZXYgPSBoc29fY3JlYXRlX25ldF9kZXZpY2UoaW50ZXJmYWNlKTsKKwkJCQloc29fZGV2ID0gaHNvX2NyZWF0ZV9uZXRfZGV2aWNlKGludGVyZmFjZSwKKwkJCQkJCQkJcG9ydF9zcGVjKTsKIAkJCQlpZiAoIWhzb19kZXYpCiAJCQkJCWdvdG8gZXhpdDsKIAkJCQl0bXBfZGV2ID0gaHNvX2RldjsKQEAgLTI5NjUsNyArMjk3Nyw3IEBACiAJCS8qIEl0J3MgYSByZWd1bGFyIGJ1bGsgaW50ZXJmYWNlICovCiAJCWlmICgoKHBvcnRfc3BlYyAmIEhTT19QT1JUX01BU0spID09IEhTT19QT1JUX05FVFdPUkspCiAJCSAgICAmJiAhZGlzYWJsZV9uZXQpCi0JCQloc29fZGV2ID0gaHNvX2NyZWF0ZV9uZXRfZGV2aWNlKGludGVyZmFjZSk7CisJCQloc29fZGV2ID0gaHNvX2NyZWF0ZV9uZXRfZGV2aWNlKGludGVyZmFjZSwgcG9ydF9zcGVjKTsKIAkJZWxzZQogCQkJaHNvX2RldiA9CiAJCQkgICAgaHNvX2NyZWF0ZV9idWxrX3NlcmlhbF9kZXZpY2UoaW50ZXJmYWNlLCBwb3J0X3NwZWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCmluZGV4IDdjYjEwYTAuLjNkMGQwYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYworKysgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKQEAgLTM2LDcgKzM2LDYgQEAKICAqIFJ1biB0ZXN0IHByb2NlZHVyZXMKICAqIEZpeCBidWdzIGZyb20gcHJldmlvdXMgdHdvIHN0ZXBzCiAgKiBTbm9vcCBvdGhlciBPU3MgZm9yIGFueSB0cmlja3Mgd2UncmUgbm90IGRvaW5nCi0gKiBTTVAgbG9ja2luZwogICogUmVkdWNlIGFyYml0cmFyeSB0aW1lb3V0cwogICogU21hcnQgbXVsdGljYXN0IHN1cHBvcnQKICAqIFRlbXBvcmFyeSBNQUMgY2hhbmdlIHN1cHBvcnQKQEAgLTc5Niw3ICs3OTUsNyBAQAogCiAJaW50IHJlczsKIAotCXNwaW5fbG9jaygma2F3ZXRoLT5kZXZpY2VfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgma2F3ZXRoLT5kZXZpY2VfbG9jayk7CiAKIAlrYXdldGhfYXN5bmNfc2V0X3J4X21vZGUoa2F3ZXRoKTsKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CkBAIC04MTQsNyArODEzLDcgQEAKIAkJaWYgKCFjb3BpZWRfc2tiKSB7CiAJCQlrYXdldGgtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJbmV0aWZfc3RhcnRfcXVldWUobmV0KTsKLQkJCXNwaW5fdW5sb2NrKCZrYXdldGgtPmRldmljZV9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgma2F3ZXRoLT5kZXZpY2VfbG9jayk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTg0OCw3ICs4NDcsNyBAQAogCQluZXQtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAl9CiAKLQlzcGluX3VubG9jaygma2F3ZXRoLT5kZXZpY2VfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZrYXdldGgtPmRldmljZV9sb2NrKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3Z4Z2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk5MmNhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACisjCisjIE1ha2VmaWxlIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTAgR2JFIFBDSWUgIyBJL08KKyMgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIgbGludXggZHJpdmVyCisKK29iai0kKENPTkZJR19WWEdFKSArPSB2eGdlLm8KKwordnhnZS1vYmpzIDo9IHZ4Z2UtY29uZmlnLm8gdnhnZS10cmFmZmljLm8gdnhnZS1ldGh0b29sLm8gdnhnZS1tYWluLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQxYzg4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCkBAIC0wLDAgKzEsNTI2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqIERyaXZlcnMgYmFzZWQgb24gb3IgZGVyaXZlZCBmcm9tIHRoaXMgY29kZSBmYWxsIHVuZGVyIHRoZSBHUEwgYW5kIG11c3QKKyAqIHJldGFpbiB0aGUgYXV0aG9yc2hpcCwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZS4gIFRoaXMgZmlsZSBpcyBub3QKKyAqIGEgY29tcGxldGUgcHJvZ3JhbSBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBlbnRpcmUgb3BlcmF0aW5nCisgKiBzeXN0ZW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTC4KKyAqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIHZ4Z2UtY29uZmlnLmM6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiAgICAgICAgICAgICAgICBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KKyAqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaG90cGx1Zy5oPgorCisjaW5jbHVkZSAidnhnZS10cmFmZmljLmgiCisjaW5jbHVkZSAidnhnZS1jb25maWcuaCIKKworLyoKKyAqIF9fdnhnZV9od19jaGFubmVsX2FsbG9jYXRlIC0gQWxsb2NhdGUgbWVtb3J5IGZvciBjaGFubmVsCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyByZXF1aXJlZCBtZW1vcnkgZm9yIHRoZSBjaGFubmVsIGFuZCB2YXJpb3VzIGFycmF5cworICogaW4gdGhlIGNoYW5uZWwKKyAqLworc3RydWN0IF9fdnhnZV9od19jaGFubmVsKgorX192eGdlX2h3X2NoYW5uZWxfYWxsb2NhdGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwaCwKKwkJCSAgIGVudW0gX192eGdlX2h3X2NoYW5uZWxfdHlwZSB0eXBlLAorCXUzMiBsZW5ndGgsIHUzMiBwZXJfZHRyX3NwYWNlLCB2b2lkICp1c2VyZGF0YSkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OworCWludCBzaXplID0gMDsKKwl1MzIgdnBfaWQ7CisKKwlobGRldiA9IHZwaC0+dnBhdGgtPmhsZGV2OworCXZwX2lkID0gdnBoLT52cGF0aC0+dnBfaWQ7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFZYR0VfSFdfQ0hBTk5FTF9UWVBFX0ZJRk86CisJCXNpemUgPSBzaXplb2Yoc3RydWN0IF9fdnhnZV9od19maWZvKTsKKwkJYnJlYWs7CisJY2FzZSBWWEdFX0hXX0NIQU5ORUxfVFlQRV9SSU5HOgorCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWNoYW5uZWwgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChjaGFubmVsID09IE5VTEwpCisJCWdvdG8gZXhpdDA7CisJSU5JVF9MSVNUX0hFQUQoJmNoYW5uZWwtPml0ZW0pOworCisJY2hhbm5lbC0+Y29tbW9uX3JlZyA9IGhsZGV2LT5jb21tb25fcmVnOworCWNoYW5uZWwtPmZpcnN0X3ZwX2lkID0gaGxkZXYtPmZpcnN0X3ZwX2lkOworCWNoYW5uZWwtPnR5cGUgPSB0eXBlOworCWNoYW5uZWwtPmRldmggPSBobGRldjsKKwljaGFubmVsLT52cGggPSB2cGg7CisJY2hhbm5lbC0+dXNlcmRhdGEgPSB1c2VyZGF0YTsKKwljaGFubmVsLT5wZXJfZHRyX3NwYWNlID0gcGVyX2R0cl9zcGFjZTsKKwljaGFubmVsLT5sZW5ndGggPSBsZW5ndGg7CisJY2hhbm5lbC0+dnBfaWQgPSB2cF9pZDsKKworCWNoYW5uZWwtPndvcmtfYXJyID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSpsZW5ndGgsIEdGUF9LRVJORUwpOworCWlmIChjaGFubmVsLT53b3JrX2FyciA9PSBOVUxMKQorCQlnb3RvIGV4aXQxOworCisJY2hhbm5lbC0+ZnJlZV9hcnIgPSBremFsbG9jKHNpemVvZih2b2lkICopKmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoYW5uZWwtPmZyZWVfYXJyID09IE5VTEwpCisJCWdvdG8gZXhpdDE7CisJY2hhbm5lbC0+ZnJlZV9wdHIgPSBsZW5ndGg7CisKKwljaGFubmVsLT5yZXNlcnZlX2FyciA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hhbm5lbC0+cmVzZXJ2ZV9hcnIgPT0gTlVMTCkKKwkJZ290byBleGl0MTsKKwljaGFubmVsLT5yZXNlcnZlX3B0ciA9IGxlbmd0aDsKKwljaGFubmVsLT5yZXNlcnZlX3RvcCA9IDA7CisKKwljaGFubmVsLT5vcmlnX2FyciA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqbGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hhbm5lbC0+b3JpZ19hcnIgPT0gTlVMTCkKKwkJZ290byBleGl0MTsKKworCXJldHVybiBjaGFubmVsOworZXhpdDE6CisJX192eGdlX2h3X2NoYW5uZWxfZnJlZShjaGFubmVsKTsKKworZXhpdDA6CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfY2hhbm5lbF9mcmVlIC0gRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBjaGFubmVsCisgKiBUaGlzIGZ1bmN0aW9uIGRlYWxsb2NhdGVzIG1lbW9yeSBmcm9tIHRoZSBjaGFubmVsIGFuZCB2YXJpb3VzIGFycmF5cworICogaW4gdGhlIGNoYW5uZWwKKyAqLwordm9pZCBfX3Z4Z2VfaHdfY2hhbm5lbF9mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlrZnJlZShjaGFubmVsLT53b3JrX2Fycik7CisJa2ZyZWUoY2hhbm5lbC0+ZnJlZV9hcnIpOworCWtmcmVlKGNoYW5uZWwtPnJlc2VydmVfYXJyKTsKKwlrZnJlZShjaGFubmVsLT5vcmlnX2Fycik7CisJa2ZyZWUoY2hhbm5lbCk7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfY2hhbm5lbF9pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSBhIGNoYW5uZWwKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYSBjaGFubmVsIGJ5IHByb3Blcmx5IHNldHRpbmcgdGhlCisgKiB2YXJpb3VzIHJlZmVyZW5jZXMKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2NoYW5uZWxfaW5pdGlhbGl6ZShzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpCit7CisJdTMyIGk7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisKKwl2cGF0aCA9IGNoYW5uZWwtPnZwaC0+dnBhdGg7CisKKwlpZiAoKGNoYW5uZWwtPnJlc2VydmVfYXJyICE9IE5VTEwpICYmIChjaGFubmVsLT5vcmlnX2FyciAhPSBOVUxMKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbC0+bGVuZ3RoOyBpKyspCisJCQljaGFubmVsLT5vcmlnX2FycltpXSA9IGNoYW5uZWwtPnJlc2VydmVfYXJyW2ldOworCX0KKworCXN3aXRjaCAoY2hhbm5lbC0+dHlwZSkgeworCWNhc2UgVlhHRV9IV19DSEFOTkVMX1RZUEVfRklGTzoKKwkJdnBhdGgtPmZpZm9oID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqKWNoYW5uZWw7CisJCWNoYW5uZWwtPnN0YXRzID0gJigoc3RydWN0IF9fdnhnZV9od19maWZvICopCisJCQkJY2hhbm5lbCktPnN0YXRzLT5jb21tb25fc3RhdHM7CisJCWJyZWFrOworCWNhc2UgVlhHRV9IV19DSEFOTkVMX1RZUEVfUklORzoKKwkJdnBhdGgtPnJpbmdoID0gKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqKWNoYW5uZWw7CisJCWNoYW5uZWwtPnN0YXRzID0gJigoc3RydWN0IF9fdnhnZV9od19yaW5nICopCisJCQkJY2hhbm5lbCktPnN0YXRzLT5jb21tb25fc3RhdHM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X2NoYW5uZWxfcmVzZXQgLSBSZXNldHMgYSBjaGFubmVsCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyBhIGNoYW5uZWwgYnkgcHJvcGVybHkgc2V0dGluZyB0aGUgdmFyaW91cyByZWZlcmVuY2VzCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19jaGFubmVsX3Jlc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsLT5sZW5ndGg7IGkrKykgeworCQlpZiAoY2hhbm5lbC0+cmVzZXJ2ZV9hcnIgIT0gTlVMTCkKKwkJCWNoYW5uZWwtPnJlc2VydmVfYXJyW2ldID0gY2hhbm5lbC0+b3JpZ19hcnJbaV07CisJCWlmIChjaGFubmVsLT5mcmVlX2FyciAhPSBOVUxMKQorCQkJY2hhbm5lbC0+ZnJlZV9hcnJbaV0gPSBOVUxMOworCQlpZiAoY2hhbm5lbC0+d29ya19hcnIgIT0gTlVMTCkKKwkJCWNoYW5uZWwtPndvcmtfYXJyW2ldID0gTlVMTDsKKwl9CisJY2hhbm5lbC0+ZnJlZV9wdHIgPSBjaGFubmVsLT5sZW5ndGg7CisJY2hhbm5lbC0+cmVzZXJ2ZV9wdHIgPSBjaGFubmVsLT5sZW5ndGg7CisJY2hhbm5lbC0+cmVzZXJ2ZV90b3AgPSAwOworCWNoYW5uZWwtPnBvc3RfaW5kZXggPSAwOworCWNoYW5uZWwtPmNvbXBsX2luZGV4ID0gMDsKKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV9wY2lfZV9pbml0CisgKiBJbml0aWFsaXplIGNlcnRhaW4gUENJL1BDSS1YIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKiB3aXRoIHJlY29tbWVuZGVkIHZhbHVlcy4gU2F2ZSBjb25maWcgc3BhY2UgZm9yIGZ1dHVyZSBodyByZXNldHMuCisgKi8KK3ZvaWQKK19fdnhnZV9od19kZXZpY2VfcGNpX2VfaW5pdChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJdTE2IGNtZCA9IDA7CisKKwkvKiBTZXQgdGhlIFBFcnIgUmVwY29uc2UgYml0IGFuZCBTRVJSIGluIFBDSSBjb21tYW5kIHJlZ2lzdGVyLiAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhsZGV2LT5wZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CisJY21kIHw9IDB4MTQwOworCXBjaV93cml0ZV9jb25maWdfd29yZChobGRldi0+cGRldiwgUENJX0NPTU1BTkQsIGNtZCk7CisKKwlwY2lfc2F2ZV9zdGF0ZShobGRldi0+cGRldik7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX3JlZ2lzdGVyX3BvbGwKKyAqIFdpbGwgcG9sbCBjZXJ0YWluIHJlZ2lzdGVyIGZvciBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUuCisgKiBXaWxsIHBvbGwgdW50aWwgbWFza2VkIGJpdCBpcyBub3QgY2xlYXJlZC4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9yZWdpc3Rlcl9wb2xsKHZvaWQgX19pb21lbSAqcmVnLCB1NjQgbWFzaywgdTMyIG1heF9taWxsaXMpCit7CisJdTY0IHZhbDY0OworCXUzMiBpID0gMDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHJldCA9IFZYR0VfSFdfRkFJTDsKKworCXVkZWxheSgxMCk7CisKKwlkbyB7CisJCXZhbDY0ID0gcmVhZHEocmVnKTsKKwkJaWYgKCEodmFsNjQgJiBtYXNrKSkKKwkJCXJldHVybiBWWEdFX0hXX09LOworCQl1ZGVsYXkoMTAwKTsKKwl9IHdoaWxlICgrK2kgPD0gOSk7CisKKwlpID0gMDsKKwlkbyB7CisJCXZhbDY0ID0gcmVhZHEocmVnKTsKKwkJaWYgKCEodmFsNjQgJiBtYXNrKSkKKwkJCXJldHVybiBWWEdFX0hXX09LOworCQltZGVsYXkoMSk7CisJfSB3aGlsZSAoKytpIDw9IG1heF9taWxsaXMpOworCisJcmV0dXJuIHJldDsKK30KKworIC8qIF9fdnhnZV9od19kZXZpY2VfdnBhdGhfcmVzZXRfaW5fcHJvZ19jaGVjayAtIENoZWNrIGlmIHZwYXRoIHJlc2V0CisgKiBpbiBwcm9ncmVzcworICogVGhpcyByb3V0aW5lIGNoZWNrcyB0aGUgdnBhdGggcmVzZXQgaW4gcHJvZ3Jlc3MgcmVnaXN0ZXIgaXMgdHVybmVkIHplcm8KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV92cGF0aF9yZXNldF9pbl9wcm9nX2NoZWNrKHU2NCBfX2lvbWVtICp2cGF0aF9yc3RfaW5fcHJvZykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX3JlZ2lzdGVyX3BvbGwodnBhdGhfcnN0X2luX3Byb2csCisJCQlWWEdFX0hXX1ZQQVRIX1JTVF9JTl9QUk9HX1ZQQVRIX1JTVF9JTl9QUk9HKDB4MWZmZmYpLAorCQkJVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV90b2NfZ2V0CisgKiBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgc3dhcHBlciBhbmQgcmVhZHMgdGhlIHRvYyBwb2ludGVyIGFuZCByZXR1cm5zIHRoZQorICogbWVtb3J5IG1hcHBlZCBhZGRyZXNzIG9mIHRoZSB0b2MKKyAqLworc3RydWN0IHZ4Z2VfaHdfdG9jX3JlZyBfX2lvbWVtICoKK19fdnhnZV9od19kZXZpY2VfdG9jX2dldCh2b2lkIF9faW9tZW0gKmJhcjApCit7CisJdTY0IHZhbDY0OworCXN0cnVjdCB2eGdlX2h3X3RvY19yZWcgX19pb21lbSAqdG9jID0gTlVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKworCXN0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcgX19pb21lbSAqbGVnYWN5X3JlZyA9CisJCShzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnIF9faW9tZW0gKiliYXIwOworCisJc3RhdHVzID0gX192eGdlX2h3X2xlZ2FjeV9zd2FwcGVyX3NldChsZWdhY3lfcmVnKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXZhbDY0ID0JcmVhZHEoJmxlZ2FjeV9yZWctPnRvY19maXJzdF9wb2ludGVyKTsKKwl0b2MgPSAoc3RydWN0IHZ4Z2VfaHdfdG9jX3JlZyBfX2lvbWVtICopKGJhcjArdmFsNjQpOworZXhpdDoKKwlyZXR1cm4gdG9jOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV9yZWdfYWRkcl9nZXQKKyAqIFRoaXMgcm91dGluZSBzZXRzIHRoZSBzd2FwcGVyIGFuZCByZWFkcyB0aGUgdG9jIHBvaW50ZXIgYW5kIGluaXRpYWxpemVzIHRoZQorICogcmVnaXN0ZXIgbG9jYXRpb24gcG9pbnRlcnMgaW4gdGhlIGRldmljZSBvYmplY3QuIEl0IHdhaXRzIHVudGlsIHRoZSByaWMgaXMKKyAqIGNvbXBsZXRlZCBpbml0aWFsaXppbmcgcmVnaXN0ZXJzLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX3JlZ19hZGRyX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJdTY0IHZhbDY0OworCXUzMiBpOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWhsZGV2LT5sZWdhY3lfcmVnID0gKHN0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcgX19pb21lbSAqKWhsZGV2LT5iYXIwOworCisJaGxkZXYtPnRvY19yZWcgPSBfX3Z4Z2VfaHdfZGV2aWNlX3RvY19nZXQoaGxkZXYtPmJhcjApOworCWlmIChobGRldi0+dG9jX3JlZyAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2YWw2NCA9IHJlYWRxKCZobGRldi0+dG9jX3JlZy0+dG9jX2NvbW1vbl9wb2ludGVyKTsKKwlobGRldi0+Y29tbW9uX3JlZyA9CisJKHN0cnVjdCB2eGdlX2h3X2NvbW1vbl9yZWcgX19pb21lbSAqKShobGRldi0+YmFyMCArIHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT50b2NfcmVnLT50b2NfbXJwY2ltX3BvaW50ZXIpOworCWhsZGV2LT5tcnBjaW1fcmVnID0KKwkJKHN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcgX19pb21lbSAqKShobGRldi0+YmFyMCArIHZhbDY0KTsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX1RJVEFOX1NSUENJTV9SRUdfU1BBQ0VTOyBpKyspIHsKKwkJdmFsNjQgPSByZWFkcSgmaGxkZXYtPnRvY19yZWctPnRvY19zcnBjaW1fcG9pbnRlcltpXSk7CisJCWhsZGV2LT5zcnBjaW1fcmVnW2ldID0KKwkJCShzdHJ1Y3QgdnhnZV9od19zcnBjaW1fcmVnIF9faW9tZW0gKikKKwkJCQkoaGxkZXYtPmJhcjAgKyB2YWw2NCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfVElUQU5fVlBNR01UX1JFR19TUEFDRVM7IGkrKykgeworCQl2YWw2NCA9IHJlYWRxKCZobGRldi0+dG9jX3JlZy0+dG9jX3ZwbWdtdF9wb2ludGVyW2ldKTsKKwkJaGxkZXYtPnZwbWdtdF9yZWdbaV0gPQorCQkoc3RydWN0IHZ4Z2VfaHdfdnBtZ210X3JlZyBfX2lvbWVtICopKGhsZGV2LT5iYXIwICsgdmFsNjQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX1RJVEFOX1ZQQVRIX1JFR19TUEFDRVM7IGkrKykgeworCQl2YWw2NCA9IHJlYWRxKCZobGRldi0+dG9jX3JlZy0+dG9jX3ZwYXRoX3BvaW50ZXJbaV0pOworCQlobGRldi0+dnBhdGhfcmVnW2ldID0KKwkJCShzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqKQorCQkJCShobGRldi0+YmFyMCArIHZhbDY0KTsKKwl9CisKKwl2YWw2NCA9IHJlYWRxKCZobGRldi0+dG9jX3JlZy0+dG9jX2tkZmMpOworCisJc3dpdGNoIChWWEdFX0hXX1RPQ19HRVRfS0RGQ19JTklUSUFMX0JJUih2YWw2NCkpIHsKKwljYXNlIDA6CisJCWhsZGV2LT5rZGZjID0gKHU4IF9faW9tZW0gKikoaGxkZXYtPmJhcjAgKworCQkJVlhHRV9IV19UT0NfR0VUX0tERkNfSU5JVElBTF9PRkZTRVQodmFsNjQpKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlobGRldi0+a2RmYyA9ICh1OCBfX2lvbWVtICopKGhsZGV2LT5iYXIxICsKKwkJCVZYR0VfSFdfVE9DX0dFVF9LREZDX0lOSVRJQUxfT0ZGU0VUKHZhbDY0KSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaGxkZXYtPmtkZmMgPSAodTggX19pb21lbSAqKShobGRldi0+YmFyMiArCisJCQlWWEdFX0hXX1RPQ19HRVRfS0RGQ19JTklUSUFMX09GRlNFVCh2YWw2NCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX3ZwYXRoX3Jlc2V0X2luX3Byb2dfY2hlY2soCisJCQkodTY0IF9faW9tZW0gKikmaGxkZXYtPmNvbW1vbl9yZWctPnZwYXRoX3JzdF9pbl9wcm9nKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfaWRfZ2V0CisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyBzZXRzIHRoZSBkZXZpY2UgaWQgYW5kIHJldmlzaW9uIG51bWJlcnMgaW50byB0aGUgZGV2aWNlCisgKiBzdHJ1Y3R1cmUKKyAqLwordm9pZCBfX3Z4Z2VfaHdfZGV2aWNlX2lkX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJdTY0IHZhbDY0OworCisJdmFsNjQgPSByZWFkcSgmaGxkZXYtPmNvbW1vbl9yZWctPnRpdGFuX2FzaWNfaWQpOworCWhsZGV2LT5kZXZpY2VfaWQgPQorCQkodTE2KVZYR0VfSFdfVElUQU5fQVNJQ19JRF9HRVRfSU5JVElBTF9ERVZJQ0VfSUQodmFsNjQpOworCisJaGxkZXYtPm1ham9yX3JldmlzaW9uID0KKwkJKHU4KVZYR0VfSFdfVElUQU5fQVNJQ19JRF9HRVRfSU5JVElBTF9NQUpPUl9SRVZJU0lPTih2YWw2NCk7CisKKwlobGRldi0+bWlub3JfcmV2aXNpb24gPQorCQkodTgpVlhHRV9IV19USVRBTl9BU0lDX0lEX0dFVF9JTklUSUFMX01JTk9SX1JFVklTSU9OKHZhbDY0KTsKKworCXJldHVybjsKK30KKworLyoKKyAqIF9fdnhnZV9od19kZXZpY2VfYWNjZXNzX3JpZ2h0c19nZXQ6IEdldCBBY2Nlc3MgUmlnaHRzIG9mIHRoZSBkcml2ZXIKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBBY2Nlc3MgUmlnaHRzIG9mIHRoZSBkcml2ZXIKKyAqLworc3RhdGljIHUzMgorX192eGdlX2h3X2RldmljZV9hY2Nlc3NfcmlnaHRzX2dldCh1MzIgaG9zdF90eXBlLCB1MzIgZnVuY19pZCkKK3sKKwl1MzIgYWNjZXNzX3JpZ2h0cyA9IFZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9WUEFUSDsKKworCXN3aXRjaCAoaG9zdF90eXBlKSB7CisJY2FzZSBWWEdFX0hXX05PX01SX05PX1NSX05PUk1BTF9GVU5DVElPTjoKKwkJaWYgKGZ1bmNfaWQgPT0gMCkgeworCQkJYWNjZXNzX3JpZ2h0cyB8PSBWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfTVJQQ0lNIHwKKwkJCQkJVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX1NSUENJTTsKKwkJfQorCQlicmVhazsKKwljYXNlIFZYR0VfSFdfTVJfTk9fU1JfVkgwX0JBU0VfRlVOQ1RJT046CisJCWFjY2Vzc19yaWdodHMgfD0gVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX01SUENJTSB8CisJCQkJVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX1NSUENJTTsKKwkJYnJlYWs7CisJY2FzZSBWWEdFX0hXX05PX01SX1NSX1ZIMF9GVU5DVElPTjA6CisJCWFjY2Vzc19yaWdodHMgfD0gVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX01SUENJTSB8CisJCQkJVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX1NSUENJTTsKKwkJYnJlYWs7CisJY2FzZSBWWEdFX0hXX05PX01SX1NSX1ZIMF9WSVJUVUFMX0ZVTkNUSU9OOgorCWNhc2UgVlhHRV9IV19TUl9WSF9WSVJUVUFMX0ZVTkNUSU9OOgorCWNhc2UgVlhHRV9IV19NUl9TUl9WSDBfSU5WQUxJRF9DT05GSUc6CisJCWJyZWFrOworCWNhc2UgVlhHRV9IV19TUl9WSF9GVU5DVElPTjA6CisJY2FzZSBWWEdFX0hXX1ZIX05PUk1BTF9GVU5DVElPTjoKKwkJYWNjZXNzX3JpZ2h0cyB8PSBWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfU1JQQ0lNOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gYWNjZXNzX3JpZ2h0czsKK30KKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2hvc3RfaW5mb19nZXQKKyAqIFRoaXMgcm91dGluZSByZXR1cm5zIHRoZSBob3N0IHR5cGUgYXNzaWdubWVudHMKKyAqLwordm9pZCBfX3Z4Z2VfaHdfZGV2aWNlX2hvc3RfaW5mb19nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXU2NCB2YWw2NDsKKwl1MzIgaTsKKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT5jb21tb25fcmVnLT5ob3N0X3R5cGVfYXNzaWdubWVudHMpOworCisJaGxkZXYtPmhvc3RfdHlwZSA9CisJICAgKHUzMilWWEdFX0hXX0hPU1RfVFlQRV9BU1NJR05NRU5UU19HRVRfSE9TVF9UWVBFX0FTU0lHTk1FTlRTKHZhbDY0KTsKKworCWhsZGV2LT52cGF0aF9hc3NpZ25tZW50cyA9IHJlYWRxKCZobGRldi0+Y29tbW9uX3JlZy0+dnBhdGhfYXNzaWdubWVudHMpOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCWlmICghKGhsZGV2LT52cGF0aF9hc3NpZ25tZW50cyAmIHZ4Z2VfbUJJVChpKSkpCisJCQljb250aW51ZTsKKworCQlobGRldi0+ZnVuY19pZCA9CisJCQlfX3Z4Z2VfaHdfdnBhdGhfZnVuY19pZF9nZXQoaSwgaGxkZXYtPnZwbWdtdF9yZWdbaV0pOworCisJCWhsZGV2LT5hY2Nlc3NfcmlnaHRzID0gX192eGdlX2h3X2RldmljZV9hY2Nlc3NfcmlnaHRzX2dldCgKKwkJCWhsZGV2LT5ob3N0X3R5cGUsIGhsZGV2LT5mdW5jX2lkKTsKKworCQlobGRldi0+Zmlyc3RfdnBfaWQgPSBpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdmVyaWZ5X3BjaV9lX2luZm8gLSBWYWxpZGF0ZSB0aGUgcGNpLWUgbGluayBwYXJhbWV0ZXJzIHN1Y2ggYXMKKyAqIGxpbmsgd2lkdGggYW5kIHNpZ25hbGxpbmcgcmF0ZS4KKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192ZXJpZnlfcGNpX2VfaW5mbyhzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJaW50IGV4cF9jYXA7CisJdTE2IGxuazsKKworCS8qIEdldCB0aGUgbmVnb3RpYXRlZCBsaW5rIHdpZHRoIGFuZCBzcGVlZCBmcm9tIFBDSSBjb25maWcgc3BhY2UgKi8KKwlleHBfY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShobGRldi0+cGRldiwgUENJX0NBUF9JRF9FWFApOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhsZGV2LT5wZGV2LCBleHBfY2FwICsgUENJX0VYUF9MTktTVEEsICZsbmspOworCisJaWYgKChsbmsgJiBQQ0lfRVhQX0xOS1NUQV9DTFMpICE9IDEpCisJCXJldHVybiBWWEdFX0hXX0VSUl9JTlZBTElEX1BDSV9JTkZPOworCisJc3dpdGNoICgobG5rICYgUENJX0VYUF9MTktTVEFfTkxXKSA+PiA0KSB7CisJY2FzZSBQQ0lFX0xOS19XSURUSF9SRVNSVjoKKwljYXNlIFBDSUVfTE5LX1gxOgorCWNhc2UgUENJRV9MTktfWDI6CisJY2FzZSBQQ0lFX0xOS19YNDoKKwljYXNlIFBDSUVfTE5LX1g4OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gVlhHRV9IV19FUlJfSU5WQUxJRF9QQ0lfSU5GTzsKKwl9CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfaXNfcHJpdmlsYWdlZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJaWYgKChobGRldi0+aG9zdF90eXBlID09IFZYR0VfSFdfTk9fTVJfTk9fU1JfTk9STUFMX0ZVTkNUSU9OIHx8CisJaGxkZXYtPmhvc3RfdHlwZSA9PSBWWEdFX0hXX01SX05PX1NSX1ZIMF9CQVNFX0ZVTkNUSU9OIHx8CisJaGxkZXYtPmhvc3RfdHlwZSA9PSBWWEdFX0hXX05PX01SX1NSX1ZIMF9GVU5DVElPTjApICYmCisJKGhsZGV2LT5mdW5jX2lkID09IDApKQorCQlyZXR1cm4gVlhHRV9IV19PSzsKKwllbHNlCisJCXJldHVybiBWWEdFX0hXX0VSUl9QUklWSUxBR0VEX09QRUFSQVRJT047Cit9CisKKy8qCisgKiB2eGdlX2h3X3dycl9yZWJhbGFuY2UgLSBSZWJhbGFuY2UgdGhlIFJYX1dSUiBhbmQgS0RGQ19XUlIgY2FsYW5kYXJzLgorICogUmViYWxhbmNlIHRoZSBSWF9XUlIgYW5kIEtERkNfV1JSIGNhbGFuZGFycy4KKyAqLworc3RhdGljIGVudW0KK3Z4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfd3JyX3JlYmFsYW5jZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJdTY0IHZhbDY0OworCXUzMiB3cnJfc3RhdGVzW1ZYR0VfSFdfV0VJR0hURURfUlJfU0VSVklDRV9TVEFURVNdOworCXUzMiBpLCBqLCBob3dfb2Z0ZW4gPSAxOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfaXNfcHJpdmlsYWdlZChobGRldik7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBSZXNldCB0aGUgcHJpb3JpdGllcyBhc3NpZ25lZCB0byB0aGUgV1JSIGFyYml0cmF0aW9uCisJcGhhc2VzIGZvciB0aGUgcmVjZWl2ZSB0cmFmZmljICovCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfV1JSX1JJTkdfQ09VTlQ7IGkrKykKKwkJd3JpdGVxKDAsICgoJmhsZGV2LT5tcnBjaW1fcmVnLT5yeF93X3JvdW5kX3JvYmluXzApICsgaSkpOworCisJLyogUmVzZXQgdGhlIHRyYW5zbWl0IEZJRk8gc2VydmljaW5nIGNhbGVuZGFyIGZvciBGSUZPcyAqLworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX1dSUl9GSUZPX0NPVU5UOyBpKyspIHsKKwkJd3JpdGVxKDAsICgoJmhsZGV2LT5tcnBjaW1fcmVnLT5rZGZjX3dfcm91bmRfcm9iaW5fMCkgKyBpKSk7CisJCXdyaXRlcSgwLCAoKCZobGRldi0+bXJwY2ltX3JlZy0+a2RmY193X3JvdW5kX3JvYmluXzIwKSArIGkpKTsKKwl9CisKKwkvKiBBc3NpZ24gV1JSIHByaW9yaXR5ICAwIGZvciBhbGwgRklGT3MgKi8KKwlmb3IgKGkgPSAxOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisJCXdyaXRlcShWWEdFX0hXX0tERkNfRklGT18wX0NUUkxfV1JSX05VTUJFUigwKSwKKwkJCQkoKCZobGRldi0+bXJwY2ltX3JlZy0+a2RmY19maWZvXzBfY3RybCkgICsgaSkpOworCisJCXdyaXRlcShWWEdFX0hXX0tERkNfRklGT18xN19DVFJMX1dSUl9OVU1CRVIoMCksCisJCQkoKCZobGRldi0+bXJwY2ltX3JlZy0+a2RmY19maWZvXzE3X2N0cmwpICsgaSkpOworCX0KKworCS8qIFJlc2V0IHRvIHNlcnZpY2Ugbm9uLW9mZmxvYWQgZG9vcmJlbGxzICovCisJd3JpdGVxKDAsICZobGRldi0+bXJwY2ltX3JlZy0+a2RmY19lbnRyeV90eXBlX3NlbF8wKTsKKwl3cml0ZXEoMCwgJmhsZGV2LT5tcnBjaW1fcmVnLT5rZGZjX2VudHJ5X3R5cGVfc2VsXzEpOworCisJLyogU2V0IHByaW9yaXR5IDAgdG8gYWxsIHJlY2VpdmUgcXVldWVzICovCisJd3JpdGVxKDAsICZobGRldi0+bXJwY2ltX3JlZy0+cnhfcXVldWVfcHJpb3JpdHlfMCk7CisJd3JpdGVxKDAsICZobGRldi0+bXJwY2ltX3JlZy0+cnhfcXVldWVfcHJpb3JpdHlfMSk7CisJd3JpdGVxKDAsICZobGRldi0+bXJwY2ltX3JlZy0+cnhfcXVldWVfcHJpb3JpdHlfMik7CisKKwkvKiBJbml0aWFsaXplIGFsbCB0aGUgc2xvdHMgYXMgdW51c2VkICovCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfV0VJR0hURURfUlJfU0VSVklDRV9TVEFURVM7IGkrKykKKwkJd3JyX3N0YXRlc1tpXSA9IC0xOworCisJLyogUHJlcGFyZSB0aGUgRmlmbyBzZXJ2aWNlIHN0YXRlcyAqLworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQlpZiAoIWhsZGV2LT5jb25maWcudnBfY29uZmlnW2ldLm1pbl9iYW5kd2lkdGgpCisJCQljb250aW51ZTsKKworCQlob3dfb2Z0ZW4gPSBWWEdFX0hXX1ZQQVRIX0JBTkRXSURUSF9NQVggLworCQkJCWhsZGV2LT5jb25maWcudnBfY29uZmlnW2ldLm1pbl9iYW5kd2lkdGg7CisJCWlmIChob3dfb2Z0ZW4pIHsKKworCQkJZm9yIChqID0gMDsgaiA8IFZYR0VfSFdfV1JSX0ZJRk9fU0VSVklDRV9TVEFURVM7KSB7CisJCQkJaWYgKHdycl9zdGF0ZXNbal0gPT0gLTEpIHsKKwkJCQkJd3JyX3N0YXRlc1tqXSA9IGk7CisJCQkJCS8qIE1ha2Ugc3VyZSBlYWNoIGZpZm8gaXMgc2VydmljZWQKKwkJCQkJICogYXRsZWFzdCBvbmNlICovCisJCQkJCWlmIChpID09IGopCisJCQkJCQlqICs9IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7CisJCQkJCWVsc2UKKwkJCQkJCWogKz0gaG93X29mdGVuOworCQkJCX0gZWxzZQorCQkJCQlqKys7CisJCQl9CisJCX0KKwl9CisKKwkvKiBGaWxsIHRoZSB1bnVzZWQgc2xvdHMgd2l0aCAwICovCisJZm9yIChqID0gMDsgaiA8IFZYR0VfSFdfV0VJR0hURURfUlJfU0VSVklDRV9TVEFURVM7IGorKykgeworCQlpZiAod3JyX3N0YXRlc1tqXSA9PSAtMSkKKwkJCXdycl9zdGF0ZXNbal0gPSAwOworCX0KKworCS8qIEFzc2lnbiBXUlIgcHJpb3JpdHkgbnVtYmVyIGZvciBGSUZPcyAqLworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKwkJd3JpdGVxKFZYR0VfSFdfS0RGQ19GSUZPXzBfQ1RSTF9XUlJfTlVNQkVSKGkpLAorCQkJCSgoJmhsZGV2LT5tcnBjaW1fcmVnLT5rZGZjX2ZpZm9fMF9jdHJsKSArIGkpKTsKKworCQl3cml0ZXEoVlhHRV9IV19LREZDX0ZJRk9fMTdfQ1RSTF9XUlJfTlVNQkVSKGkpLAorCQkJKCgmaGxkZXYtPm1ycGNpbV9yZWctPmtkZmNfZmlmb18xN19jdHJsKSArIGkpKTsKKwl9CisKKwkvKiBNb2RpZnkgdGhlIHNlcnZpY2luZyBhbGdvcml0aG0gYXBwbGllZCB0byB0aGUgMyB0eXBlcyBvZiBkb29yYmVsbHMuCisJaS5lLCBub25lLW9mZmxvYWQsIG1lc3NhZ2UgYW5kIG9mZmxvYWQgKi8KKwl3cml0ZXEoVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzAoMCkgfAorCQkJCVZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl8xKDApIHwKKwkJCQlWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfMigwKSB8CisJCQkJVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzMoMCkgfAorCQkJCVZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl80KDEpIHwKKwkJCQlWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfNSgwKSB8CisJCQkJVlhHRV9IV19LREZDX0VOVFJZX1RZUEVfU0VMXzBfTlVNQkVSXzYoMCkgfAorCQkJCVZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl83KDApLAorCQkJCSZobGRldi0+bXJwY2ltX3JlZy0+a2RmY19lbnRyeV90eXBlX3NlbF8wKTsKKworCXdyaXRlcShWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMV9OVU1CRVJfOCgxKSwKKwkJCQkmaGxkZXYtPm1ycGNpbV9yZWctPmtkZmNfZW50cnlfdHlwZV9zZWxfMSk7CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IFZYR0VfSFdfV1JSX0ZJRk9fQ09VTlQ7IGkrKykgeworCisJCXZhbDY0ID0gVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfMCh3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl8xKHdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9IFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzIod3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfMyh3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl80KHdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9IFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzUod3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfNih3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl83KHdycl9zdGF0ZXNbaisrXSk7CisKKwkJd3JpdGVxKHZhbDY0LCAoJmhsZGV2LT5tcnBjaW1fcmVnLT5rZGZjX3dfcm91bmRfcm9iaW5fMCArIGkpKTsKKwkJd3JpdGVxKHZhbDY0LCAoJmhsZGV2LT5tcnBjaW1fcmVnLT5rZGZjX3dfcm91bmRfcm9iaW5fMjAgKyBpKSk7CisJfQorCisJLyogU2V0IHVwIHRoZSBwcmlvcml0aWVzIGFzc2lnbmVkIHRvIHJlY2VpdmUgcXVldWVzICovCisJd3JpdGVxKFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl8wKDApIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl8xKDEpIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl8yKDIpIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl8zKDMpIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl80KDQpIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl81KDUpIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl82KDYpIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMF9SWF9RX05VTUJFUl83KDcpLAorCQkJJmhsZGV2LT5tcnBjaW1fcmVnLT5yeF9xdWV1ZV9wcmlvcml0eV8wKTsKKworCXdyaXRlcShWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfOCg4KSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfOSg5KSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfMTAoMTApIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl8xMSgxMSkgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzEyKDEyKSB8CisJCQlWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfMTMoMTMpIHwKKwkJCVZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl8xNCgxNCkgfAorCQkJVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzE1KDE1KSwKKwkJCSZobGRldi0+bXJwY2ltX3JlZy0+cnhfcXVldWVfcHJpb3JpdHlfMSk7CisKKwl3cml0ZXEoVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8yX1JYX1FfTlVNQkVSXzE2KDE2KSwKKwkJCQkmaGxkZXYtPm1ycGNpbV9yZWctPnJ4X3F1ZXVlX3ByaW9yaXR5XzIpOworCisJLyogSW5pdGlhbGl6ZSBhbGwgdGhlIHNsb3RzIGFzIHVudXNlZCAqLworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX1dFSUdIVEVEX1JSX1NFUlZJQ0VfU1RBVEVTOyBpKyspCisJCXdycl9zdGF0ZXNbaV0gPSAtMTsKKworCS8qIFByZXBhcmUgdGhlIFJpbmcgc2VydmljZSBzdGF0ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisKKwkJaWYgKCFobGRldi0+Y29uZmlnLnZwX2NvbmZpZ1tpXS5taW5fYmFuZHdpZHRoKQorCQkJY29udGludWU7CisKKwkJaG93X29mdGVuID0gVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfTUFYIC8KKwkJCQlobGRldi0+Y29uZmlnLnZwX2NvbmZpZ1tpXS5taW5fYmFuZHdpZHRoOworCisJCWlmIChob3dfb2Z0ZW4pIHsKKwkJCWZvciAoaiA9IDA7IGogPCBWWEdFX0hXX1dSUl9SSU5HX1NFUlZJQ0VfU1RBVEVTOykgeworCQkJCWlmICh3cnJfc3RhdGVzW2pdID09IC0xKSB7CisJCQkJCXdycl9zdGF0ZXNbal0gPSBpOworCQkJCQkvKiBNYWtlIHN1cmUgZWFjaCByaW5nIGlzCisJCQkJCSAqIHNlcnZpY2VkIGF0bGVhc3Qgb25jZSAqLworCQkJCQlpZiAoaSA9PSBqKQorCQkJCQkJaiArPSBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOworCQkJCQllbHNlCisJCQkJCQlqICs9IGhvd19vZnRlbjsKKwkJCQl9IGVsc2UKKwkJCQkJaisrOworCQkJfQorCQl9CisJfQorCisJLyogRmlsbCB0aGUgdW51c2VkIHNsb3RzIHdpdGggMCAqLworCWZvciAoaiA9IDA7IGogPCBWWEdFX0hXX1dFSUdIVEVEX1JSX1NFUlZJQ0VfU1RBVEVTOyBqKyspIHsKKwkJaWYgKHdycl9zdGF0ZXNbal0gPT0gLTEpCisJCQl3cnJfc3RhdGVzW2pdID0gMDsKKwl9CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IFZYR0VfSFdfV1JSX1JJTkdfQ09VTlQ7IGkrKykgeworCQl2YWw2NCA9ICBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzAoCisJCQkJd3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfMSgKKwkJCQl3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSAgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU18yKAorCQkJCXdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9ICBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzMoCisJCQkJd3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfNCgKKwkJCQl3cnJfc3RhdGVzW2orK10pOworCQl2YWw2NCB8PSAgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU181KAorCQkJCXdycl9zdGF0ZXNbaisrXSk7CisJCXZhbDY0IHw9ICBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzYoCisJCQkJd3JyX3N0YXRlc1tqKytdKTsKKwkJdmFsNjQgfD0gIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfNygKKwkJCQl3cnJfc3RhdGVzW2orK10pOworCisJCXdyaXRlcSh2YWw2NCwgKCgmaGxkZXYtPm1ycGNpbV9yZWctPnJ4X3dfcm91bmRfcm9iaW5fMCkgKyBpKSk7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X2RldmljZV9pbml0aWFsaXplCisgKiBJbml0aWFsaXplIFRpdGFuLVYgaGFyZHdhcmUuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X2RldmljZV9pbml0aWFsaXplKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwkvKiBWYWxpZGF0ZSB0aGUgcGNpLWUgbGluayB3aWR0aCBhbmQgc3BlZWQgKi8KKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdmVyaWZ5X3BjaV9lX2luZm8oaGxkZXYpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJdnhnZV9od193cnJfcmViYWxhbmNlKGhsZGV2KTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9od19pbmZvX2dldCAtIEdldCB0aGUgaHcgaW5mb3JtYXRpb24KKyAqIFJldHVybnMgdGhlIHZwYXRoIG1hc2sgdGhhdCBoYXMgdGhlIGJpdHMgc2V0IGZvciBlYWNoIHZwYXRoIGFsbG9jYXRlZAorICogZm9yIHRoZSBkcml2ZXIsIEZXIHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIHRoZSBmaXJzdCBtYWMgYWRkcmVzc2UgZm9yCisgKiBlYWNoIHZwYXRoCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX19kZXZpbml0Cit2eGdlX2h3X2RldmljZV9od19pbmZvX2dldCh2b2lkIF9faW9tZW0gKmJhcjAsCisJCQkgICBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbyAqaHdfaW5mbykKK3sKKwl1MzIgaTsKKwl1NjQgdmFsNjQ7CisJc3RydWN0IHZ4Z2VfaHdfdG9jX3JlZyBfX2lvbWVtICp0b2M7CisJc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZyBfX2lvbWVtICptcnBjaW1fcmVnOworCXN0cnVjdCB2eGdlX2h3X2NvbW1vbl9yZWcgX19pb21lbSAqY29tbW9uX3JlZzsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnOworCXN0cnVjdCB2eGdlX2h3X3ZwbWdtdF9yZWcgX19pb21lbSAqdnBtZ210X3JlZzsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKworCW1lbXNldChod19pbmZvLCAwLCBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8pKTsKKworCXRvYyA9IF9fdnhnZV9od19kZXZpY2VfdG9jX2dldChiYXIwKTsKKwlpZiAodG9jID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfQ1JJVElDQUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2YWw2NCA9IHJlYWRxKCZ0b2MtPnRvY19jb21tb25fcG9pbnRlcik7CisJY29tbW9uX3JlZyA9IChzdHJ1Y3QgdnhnZV9od19jb21tb25fcmVnIF9faW9tZW0gKikoYmFyMCArIHZhbDY0KTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfdnBhdGhfcmVzZXRfaW5fcHJvZ19jaGVjaygKKwkJKHU2NCBfX2lvbWVtICopJmNvbW1vbl9yZWctPnZwYXRoX3JzdF9pbl9wcm9nKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCWh3X2luZm8tPnZwYXRoX21hc2sgPSByZWFkcSgmY29tbW9uX3JlZy0+dnBhdGhfYXNzaWdubWVudHMpOworCisJdmFsNjQgPSByZWFkcSgmY29tbW9uX3JlZy0+aG9zdF90eXBlX2Fzc2lnbm1lbnRzKTsKKworCWh3X2luZm8tPmhvc3RfdHlwZSA9CisJICAgKHUzMilWWEdFX0hXX0hPU1RfVFlQRV9BU1NJR05NRU5UU19HRVRfSE9TVF9UWVBFX0FTU0lHTk1FTlRTKHZhbDY0KTsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQlpZiAoISgoaHdfaW5mby0+dnBhdGhfbWFzaykgJiB2eGdlX21CSVQoaSkpKQorCQkJY29udGludWU7CisKKwkJdmFsNjQgPSByZWFkcSgmdG9jLT50b2NfdnBtZ210X3BvaW50ZXJbaV0pOworCisJCXZwbWdtdF9yZWcgPSAoc3RydWN0IHZ4Z2VfaHdfdnBtZ210X3JlZyBfX2lvbWVtICopCisJCQkJKGJhcjAgKyB2YWw2NCk7CisKKwkJaHdfaW5mby0+ZnVuY19pZCA9IF9fdnhnZV9od192cGF0aF9mdW5jX2lkX2dldChpLCB2cG1nbXRfcmVnKTsKKwkJaWYgKF9fdnhnZV9od19kZXZpY2VfYWNjZXNzX3JpZ2h0c19nZXQoaHdfaW5mby0+aG9zdF90eXBlLAorCQkJaHdfaW5mby0+ZnVuY19pZCkgJgorCQkJVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX01SUENJTSkgeworCisJCQl2YWw2NCA9IHJlYWRxKCZ0b2MtPnRvY19tcnBjaW1fcG9pbnRlcik7CisKKwkJCW1ycGNpbV9yZWcgPSAoc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZyBfX2lvbWVtICopCisJCQkJCShiYXIwICsgdmFsNjQpOworCisJCQl3cml0ZXEoMCwgJm1ycGNpbV9yZWctPnhnbWFjX2dlbl9md19tZW1vX21hc2spOworCQkJd21iKCk7CisJCX0KKworCQl2YWw2NCA9IHJlYWRxKCZ0b2MtPnRvY192cGF0aF9wb2ludGVyW2ldKTsKKworCQl2cGF0aF9yZWcgPSAoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKikoYmFyMCArIHZhbDY0KTsKKworCQlod19pbmZvLT5mdW5jdGlvbl9tb2RlID0KKwkJCV9fdnhnZV9od192cGF0aF9wY2lfZnVuY19tb2RlX2dldChpLCB2cGF0aF9yZWcpOworCisJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9md192ZXJfZ2V0KGksIHZwYXRoX3JlZywgaHdfaW5mbyk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKworCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfY2FyZF9pbmZvX2dldChpLCB2cGF0aF9yZWcsIGh3X2luZm8pOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIGV4aXQ7CisKKwkJYnJlYWs7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCWlmICghKChod19pbmZvLT52cGF0aF9tYXNrKSAmIHZ4Z2VfbUJJVChpKSkpCisJCQljb250aW51ZTsKKworCQl2YWw2NCA9IHJlYWRxKCZ0b2MtPnRvY192cGF0aF9wb2ludGVyW2ldKTsKKwkJdnBhdGhfcmVnID0gKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICopKGJhcjAgKyB2YWw2NCk7CisKKwkJc3RhdHVzID0gIF9fdnhnZV9od192cGF0aF9hZGRyX2dldChpLCB2cGF0aF9yZWcsCisJCQkJaHdfaW5mby0+bWFjX2FkZHJzW2ldLAorCQkJCWh3X2luZm8tPm1hY19hZGRyX21hc2tzW2ldKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfZGV2aWNlX2luaXRpYWxpemUgLSBJbml0aWFsaXplIFRpdGFuIGRldmljZS4KKyAqIEluaXRpYWxpemUgVGl0YW4gZGV2aWNlLiBOb3RlIHRoYXQgYWxsIHRoZSBhcmd1bWVudHMgb2YgdGhpcyBwdWJsaWMgQVBJCisgKiBhcmUgJ0lOJywgaW5jbHVkaW5nIEBobGRldi4gRHJpdmVyIGNvb3BlcmF0ZXMgd2l0aAorICogT1MgdG8gZmluZCBuZXcgVGl0YW4gZGV2aWNlLCBsb2NhdGUgaXRzIFBDSSBhbmQgbWVtb3J5IHNwYWNlcy4KKyAqCisgKiBXaGVuIGRvbmUsIHRoZSBkcml2ZXIgYWxsb2NhdGVzIHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSkgYnl0ZXMgZm9yIEhXCisgKiB0byBlbmFibGUgdGhlIGxhdHRlciB0byBwZXJmb3JtIFRpdGFuIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fZGV2aW5pdAordnhnZV9od19kZXZpY2VfaW5pdGlhbGl6ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKmRldmgsCisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2F0dHIgKmF0dHIsCisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAqZGV2aWNlX2NvbmZpZykKK3sKKwl1MzIgaTsKKwl1MzIgbmJsb2NrcyA9IDA7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2ID0gTlVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX2NvbmZpZ19jaGVjayhkZXZpY2VfY29uZmlnKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCWhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICopCisJCQl2bWFsbG9jKHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSkpOworCWlmIChobGRldiA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1zZXQoaGxkZXYsIDAsIHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSkpOworCWhsZGV2LT5tYWdpYyA9IFZYR0VfSFdfREVWSUNFX01BR0lDOworCisJdnhnZV9od19kZXZpY2VfZGVidWdfc2V0KGhsZGV2LCBWWEdFX0VSUiwgVlhHRV9DT01QT05FTlRfQUxMKTsKKworCS8qIGFwcGx5IGNvbmZpZyAqLworCW1lbWNweSgmaGxkZXYtPmNvbmZpZywgZGV2aWNlX2NvbmZpZywKKwkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcpKTsKKworCWhsZGV2LT5iYXIwID0gYXR0ci0+YmFyMDsKKwlobGRldi0+YmFyMSA9IGF0dHItPmJhcjE7CisJaGxkZXYtPmJhcjIgPSBhdHRyLT5iYXIyOworCWhsZGV2LT5wZGV2ID0gYXR0ci0+cGRldjsKKworCWhsZGV2LT51bGRfY2FsbGJhY2tzLmxpbmtfdXAgPSBhdHRyLT51bGRfY2FsbGJhY2tzLmxpbmtfdXA7CisJaGxkZXYtPnVsZF9jYWxsYmFja3MubGlua19kb3duID0gYXR0ci0+dWxkX2NhbGxiYWNrcy5saW5rX2Rvd247CisJaGxkZXYtPnVsZF9jYWxsYmFja3MuY3JpdF9lcnIgPSBhdHRyLT51bGRfY2FsbGJhY2tzLmNyaXRfZXJyOworCisJX192eGdlX2h3X2RldmljZV9wY2lfZV9pbml0KGhsZGV2KTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfcmVnX2FkZHJfZ2V0KGhsZGV2KTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKwlfX3Z4Z2VfaHdfZGV2aWNlX2lkX2dldChobGRldik7CisKKwlfX3Z4Z2VfaHdfZGV2aWNlX2hvc3RfaW5mb19nZXQoaGxkZXYpOworCisJLyogSW5jcmVtZW50aW5nIGZvciBzdGF0cyBibG9ja3MgKi8KKwluYmxvY2tzKys7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisKKwkJaWYgKCEoaGxkZXYtPnZwYXRoX2Fzc2lnbm1lbnRzICYgdnhnZV9tQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5lbmFibGUgPT0KKwkJCVZYR0VfSFdfUklOR19FTkFCTEUpCisJCQluYmxvY2tzICs9IGRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLnJpbmdfYmxvY2tzOworCisJCWlmIChkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5lbmFibGUgPT0KKwkJCVZYR0VfSFdfRklGT19FTkFCTEUpCisJCQluYmxvY2tzICs9IGRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLmZpZm9fYmxvY2tzOworCQluYmxvY2tzKys7CisJfQorCisJaWYgKF9fdnhnZV9od19ibG9ja3Bvb2xfY3JlYXRlKGhsZGV2LAorCQkmaGxkZXYtPmJsb2NrX3Bvb2wsCisJCWRldmljZV9jb25maWctPmRtYV9ibG9ja3Bvb2xfaW5pdGlhbCArIG5ibG9ja3MsCisJCWRldmljZV9jb25maWctPmRtYV9ibG9ja3Bvb2xfbWF4ICsgbmJsb2NrcykgIT0gVlhHRV9IV19PSykgeworCisJCXZ4Z2VfaHdfZGV2aWNlX3Rlcm1pbmF0ZShobGRldik7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX2luaXRpYWxpemUoaGxkZXYpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfaHdfZGV2aWNlX3Rlcm1pbmF0ZShobGRldik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkqZGV2aCA9IGhsZGV2OworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od19kZXZpY2VfdGVybWluYXRlIC0gVGVybWluYXRlIFRpdGFuIGRldmljZS4KKyAqIFRlcm1pbmF0ZSBIVyBkZXZpY2UuCisgKi8KK3ZvaWQKK3Z4Z2VfaHdfZGV2aWNlX3Rlcm1pbmF0ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJdnhnZV9hc3NlcnQoaGxkZXYtPm1hZ2ljID09IFZYR0VfSFdfREVWSUNFX01BR0lDKTsKKworCWhsZGV2LT5tYWdpYyA9IFZYR0VfSFdfREVWSUNFX0RFQUQ7CisJX192eGdlX2h3X2Jsb2NrcG9vbF9kZXN0cm95KCZobGRldi0+YmxvY2tfcG9vbCk7CisJdmZyZWUoaGxkZXYpOworfQorCisvKgorICogdnhnZV9od19kZXZpY2Vfc3RhdHNfZ2V0IC0gR2V0IHRoZSBkZXZpY2UgaHcgc3RhdGlzdGljcy4KKyAqIFJldHVybnMgdGhlIHZwYXRoIGgvdyBzdGF0cyBmb3IgdGhlIGRldmljZS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19kZXZpY2Vfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19od19pbmZvICpod19zdGF0cykKK3sKKwl1MzIgaTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisKKwkJaWYgKCEoaGxkZXYtPnZwYXRoc19kZXBsb3llZCAmIHZ4Z2VfbUJJVChpKSkgfHwKKwkJCShobGRldi0+dmlydHVhbF9wYXRoc1tpXS52cF9vcGVuID09CisJCQkJVlhHRV9IV19WUF9OT1RfT1BFTikpCisJCQljb250aW51ZTsKKworCQltZW1jcHkoaGxkZXYtPnZpcnR1YWxfcGF0aHNbaV0uaHdfc3RhdHNfc2F2LAorCQkJCWhsZGV2LT52aXJ0dWFsX3BhdGhzW2ldLmh3X3N0YXRzLAorCQkJCXNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvKSk7CisKKwkJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3N0YXRzX2dldCgKKwkJCSZobGRldi0+dmlydHVhbF9wYXRoc1tpXSwKKwkJCWhsZGV2LT52aXJ0dWFsX3BhdGhzW2ldLmh3X3N0YXRzKTsKKwl9CisKKwltZW1jcHkoaHdfc3RhdHMsICZobGRldi0+c3RhdHMuaHdfZGV2X2luZm9fc3RhdHMsCisJCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX2h3X2luZm8pKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X2RyaXZlcl9zdGF0c19nZXQgLSBHZXQgdGhlIGRldmljZSBzdyBzdGF0aXN0aWNzLgorICogUmV0dXJucyB0aGUgdnBhdGggcy93IHN0YXRzIGZvciB0aGUgZGV2aWNlLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZHJpdmVyX3N0YXRzX2dldCgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19pbmZvICpzd19zdGF0cykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwltZW1jcHkoc3dfc3RhdHMsICZobGRldi0+c3RhdHMuc3dfZGV2X2luZm9fc3RhdHMsCisJCXNpemVvZihzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfc3dfaW5mbykpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfbXJwY2ltX3N0YXRzX2FjY2VzcyAtIEFjY2VzcyB0aGUgc3RhdGlzdGljcyBmcm9tIHRoZSBnaXZlbiBsb2NhdGlvbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgb2Zmc2V0IGFuZCBwZXJmb3JtIGFuIG9wZXJhdGlvbgorICogR2V0IHRoZSBzdGF0aXN0aWNzIGZyb20gdGhlIGdpdmVuIGxvY2F0aW9uIGFuZCBvZmZzZXQuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfbXJwY2ltX3N0YXRzX2FjY2VzcyhzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQkgICAgdTMyIG9wZXJhdGlvbiwgdTMyIGxvY2F0aW9uLCB1MzIgb2Zmc2V0LCB1NjQgKnN0YXQpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfaXNfcHJpdmlsYWdlZChobGRldik7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwl2YWw2NCA9IFZYR0VfSFdfWE1BQ19TVEFUU19TWVNfQ01EX09QKG9wZXJhdGlvbikgfAorCQlWWEdFX0hXX1hNQUNfU1RBVFNfU1lTX0NNRF9TVFJPQkUgfAorCQlWWEdFX0hXX1hNQUNfU1RBVFNfU1lTX0NNRF9MT0NfU0VMKGxvY2F0aW9uKSB8CisJCVZYR0VfSFdfWE1BQ19TVEFUU19TWVNfQ01EX09GRlNFVF9TRUwob2Zmc2V0KTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodmFsNjQsCisJCQkJJmhsZGV2LT5tcnBjaW1fcmVnLT54bWFjX3N0YXRzX3N5c19jbWQsCisJCQkJVlhHRV9IV19YTUFDX1NUQVRTX1NZU19DTURfU1RST0JFLAorCQkJCWhsZGV2LT5jb25maWcuZGV2aWNlX3BvbGxfbWlsbGlzKTsKKworCWlmICgoc3RhdHVzID09IFZYR0VfSFdfT0spICYmIChvcGVyYXRpb24gPT0gVlhHRV9IV19TVEFUU19PUF9SRUFEKSkKKwkJKnN0YXQgPSByZWFkcSgmaGxkZXYtPm1ycGNpbV9yZWctPnhtYWNfc3RhdHNfc3lzX2RhdGEpOworCWVsc2UKKwkJKnN0YXQgPSAwOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od19kZXZpY2VfeG1hY19hZ2dyX3N0YXRzX2dldCAtIEdldCB0aGUgU3RhdGlzdGljcyBvbiBhZ2dyZWdhdGUgcG9ydAorICogR2V0IHRoZSBTdGF0aXN0aWNzIG9uIGFnZ3JlZ2F0ZSBwb3J0CisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfZGV2aWNlX3htYWNfYWdncl9zdGF0c19nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgcG9ydCwKKwkJCQkgICBzdHJ1Y3QgdnhnZV9od194bWFjX2FnZ3Jfc3RhdHMgKmFnZ3Jfc3RhdHMpCit7CisJdTY0ICp2YWw2NDsKKwlpbnQgaTsKKwl1MzIgb2Zmc2V0ID0gVlhHRV9IV19TVEFUU19BR0dSbl9PRkZTRVQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJdmFsNjQgPSAodTY0ICopYWdncl9zdGF0czsKKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfaXNfcHJpdmlsYWdlZChobGRldik7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3htYWNfYWdncl9zdGF0cykgLyA4OyBpKyspIHsKKwkJc3RhdHVzID0gdnhnZV9od19tcnBjaW1fc3RhdHNfYWNjZXNzKGhsZGV2LAorCQkJCQlWWEdFX0hXX1NUQVRTX09QX1JFQUQsCisJCQkJCVZYR0VfSFdfU1RBVFNfTE9DX0FHR1IsCisJCQkJCSgob2Zmc2V0ICsgKDEwNCAqIHBvcnQpKSA+PiAzKSwgdmFsNjQpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIGV4aXQ7CisKKwkJb2Zmc2V0ICs9IDg7CisJCXZhbDY0Kys7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od19kZXZpY2VfeG1hY19wb3J0X3N0YXRzX2dldCAtIEdldCB0aGUgU3RhdGlzdGljcyBvbiBhIHBvcnQKKyAqIEdldCB0aGUgU3RhdGlzdGljcyBvbiBwb3J0CisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfZGV2aWNlX3htYWNfcG9ydF9zdGF0c19nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgcG9ydCwKKwkJCQkgICBzdHJ1Y3QgdnhnZV9od194bWFjX3BvcnRfc3RhdHMgKnBvcnRfc3RhdHMpCit7CisJdTY0ICp2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJaW50IGk7CisJdTMyIG9mZnNldCA9IDB4MDsKKwl2YWw2NCA9ICh1NjQgKikgcG9ydF9zdGF0czsKKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfaXNfcHJpdmlsYWdlZChobGRldik7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3htYWNfcG9ydF9zdGF0cykgLyA4OyBpKyspIHsKKwkJc3RhdHVzID0gdnhnZV9od19tcnBjaW1fc3RhdHNfYWNjZXNzKGhsZGV2LAorCQkJCQlWWEdFX0hXX1NUQVRTX09QX1JFQUQsCisJCQkJCVZYR0VfSFdfU1RBVFNfTE9DX0FHR1IsCisJCQkJCSgob2Zmc2V0ICsgKDYwOCAqIHBvcnQpKSA+PiAzKSwgdmFsNjQpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIGV4aXQ7CisKKwkJb2Zmc2V0ICs9IDg7CisJCXZhbDY0Kys7CisJfQorCitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X2RldmljZV94bWFjX3N0YXRzX2dldCAtIEdldCB0aGUgWE1BQyBTdGF0aXN0aWNzCisgKiBHZXQgdGhlIFhNQUMgU3RhdGlzdGljcworICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2RldmljZV94bWFjX3N0YXRzX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQkgICAgICBzdHJ1Y3QgdnhnZV9od194bWFjX3N0YXRzICp4bWFjX3N0YXRzKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwl1MzIgaTsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfZGV2aWNlX3htYWNfYWdncl9zdGF0c19nZXQoaGxkZXYsCisJCQkJCTAsICZ4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzWzBdKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJc3RhdHVzID0gdnhnZV9od19kZXZpY2VfeG1hY19hZ2dyX3N0YXRzX2dldChobGRldiwKKwkJCQkxLCAmeG1hY19zdGF0cy0+YWdncl9zdGF0c1sxXSk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlmb3IgKGkgPSAwOyBpIDw9IFZYR0VfSFdfTUFDX01BWF9NQUNfUE9SVF9JRDsgaSsrKSB7CisKKwkJc3RhdHVzID0gdnhnZV9od19kZXZpY2VfeG1hY19wb3J0X3N0YXRzX2dldChobGRldiwKKwkJCQkJaSwgJnhtYWNfc3RhdHMtPnBvcnRfc3RhdHNbaV0pOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIGV4aXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCWlmICghKGhsZGV2LT52cGF0aHNfZGVwbG95ZWQgJiB2eGdlX21CSVQoaSkpKQorCQkJY29udGludWU7CisKKwkJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3htYWNfdHhfc3RhdHNfZ2V0KAorCQkJCQkmaGxkZXYtPnZpcnR1YWxfcGF0aHNbaV0sCisJCQkJCSZ4bWFjX3N0YXRzLT52cGF0aF90eF9zdGF0c1tpXSk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKworCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfeG1hY19yeF9zdGF0c19nZXQoCisJCQkJCSZobGRldi0+dmlydHVhbF9wYXRoc1tpXSwKKwkJCQkJJnhtYWNfc3RhdHMtPnZwYXRoX3J4X3N0YXRzW2ldKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfZGV2aWNlX2RlYnVnX3NldCAtIFNldCB0aGUgZGVidWcgbW9kdWxlLCBsZXZlbCBhbmQgdGltZXN0YW1wCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBkeW5hbWljYWxseSBjaGFuZ2UgdGhlIGRlYnVnIG91dHB1dAorICovCit2b2lkIHZ4Z2VfaHdfZGV2aWNlX2RlYnVnX3NldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQkgICAgICBlbnVtIHZ4Z2VfZGVidWdfbGV2ZWwgbGV2ZWwsIHUzMiBtYXNrKQoreworCWlmIChobGRldiA9PSBOVUxMKQorCQlyZXR1cm47CisKKyNpZiBkZWZpbmVkKFZYR0VfREVCVUdfVFJBQ0VfTUFTSykgfHwgXAorCWRlZmluZWQoVlhHRV9ERUJVR19FUlJfTUFTSykKKwlobGRldi0+ZGVidWdfbW9kdWxlX21hc2sgPSBtYXNrOworCWhsZGV2LT5kZWJ1Z19sZXZlbCA9IGxldmVsOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKFZYR0VfREVCVUdfRVJSX01BU0spCisJaGxkZXYtPmxldmVsX2VyciA9IGxldmVsICYgVlhHRV9FUlI7CisjZW5kaWYKKworI2lmIGRlZmluZWQoVlhHRV9ERUJVR19UUkFDRV9NQVNLKQorCWhsZGV2LT5sZXZlbF90cmFjZSA9IGxldmVsICYgVlhHRV9UUkFDRTsKKyNlbmRpZgorfQorCisvKgorICogdnhnZV9od19kZXZpY2VfZXJyb3JfbGV2ZWxfZ2V0IC0gR2V0IHRoZSBlcnJvciBsZXZlbAorICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGN1cnJlbnQgZXJyb3IgbGV2ZWwgc2V0CisgKi8KK3UzMiB2eGdlX2h3X2RldmljZV9lcnJvcl9sZXZlbF9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworI2lmIGRlZmluZWQoVlhHRV9ERUJVR19FUlJfTUFTSykKKwlpZiAoaGxkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIFZYR0VfRVJSOworCWVsc2UKKwkJcmV0dXJuIGhsZGV2LT5sZXZlbF9lcnI7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCit9CisKKy8qCisgKiB2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQgLSBHZXQgdGhlIHRyYWNlIGxldmVsCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgY3VycmVudCB0cmFjZSBsZXZlbCBzZXQKKyAqLwordTMyIHZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisjaWYgZGVmaW5lZChWWEdFX0RFQlVHX1RSQUNFX01BU0spCisJaWYgKGhsZGV2ID09IE5VTEwpCisJCXJldHVybiBWWEdFX1RSQUNFOworCWVsc2UKKwkJcmV0dXJuIGhsZGV2LT5sZXZlbF90cmFjZTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKy8qCisgKiB2eGdlX2h3X2RldmljZV9kZWJ1Z19tYXNrX2dldCAtIEdldCB0aGUgZGVidWcgbWFzaworICogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIGN1cnJlbnQgZGVidWcgbWFzayBzZXQKKyAqLwordTMyIHZ4Z2VfaHdfZGV2aWNlX2RlYnVnX21hc2tfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKyNpZiBkZWZpbmVkKFZYR0VfREVCVUdfVFJBQ0VfTUFTSykgfHwgZGVmaW5lZChWWEdFX0RFQlVHX0VSUl9NQVNLKQorCWlmIChobGRldiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gaGxkZXYtPmRlYnVnX21vZHVsZV9tYXNrOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKgorICogdnhnZV9od19nZXRwYXVzZV9kYXRhIC1QYXVzZSBmcmFtZSBmcmFtZSBnZW5lcmF0aW9uIGFuZCByZWNlcHRpb24uCisgKiBSZXR1cm5zIHRoZSBQYXVzZSBmcmFtZSBnZW5lcmF0aW9uIGFuZCByZWNlcHRpb24gY2FwYWJpbGl0eSBvZiB0aGUgTklDLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZGV2aWNlX2dldHBhdXNlX2RhdGEoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJCQkJIHUzMiBwb3J0LCB1MzIgKnR4LCB1MzIgKnJ4KQoreworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAoKGhsZGV2ID09IE5VTEwpIHx8IChobGRldi0+bWFnaWMgIT0gVlhHRV9IV19ERVZJQ0VfTUFHSUMpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfREVWSUNFOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQgPiBWWEdFX0hXX01BQ19NQVhfTUFDX1BPUlRfSUQpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9QT1JUOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCEoaGxkZXYtPmFjY2Vzc19yaWdodHMgJiBWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfTVJQQ0lNKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9QUklWSUxBR0VEX09QRUFSQVRJT047CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2YWw2NCA9IHJlYWRxKCZobGRldi0+bXJwY2ltX3JlZy0+cnhtYWNfcGF1c2VfY2ZnX3BvcnRbcG9ydF0pOworCWlmICh2YWw2NCAmIFZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfR0VOX0VOKQorCQkqdHggPSAxOworCWlmICh2YWw2NCAmIFZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfUkNWX0VOKQorCQkqcnggPSAxOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od19kZXZpY2Vfc2V0cGF1c2VfZGF0YSAtICBzZXQvcmVzZXQgcGF1c2UgZnJhbWUgZ2VuZXJhdGlvbi4KKyAqIEl0IGNhbiBiZSB1c2VkIHRvIHNldCBvciByZXNldCBQYXVzZSBmcmFtZSBnZW5lcmF0aW9uIG9yIHJlY2VwdGlvbgorICogc3VwcG9ydCBvZiB0aGUgTklDLgorICovCisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19kZXZpY2Vfc2V0cGF1c2VfZGF0YShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQkJCQkgdTMyIHBvcnQsIHUzMiB0eCwgdTMyIHJ4KQoreworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAoKGhsZGV2ID09IE5VTEwpIHx8IChobGRldi0+bWFnaWMgIT0gVlhHRV9IV19ERVZJQ0VfTUFHSUMpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfREVWSUNFOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHBvcnQgPiBWWEdFX0hXX01BQ19NQVhfTUFDX1BPUlRfSUQpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9QT1JUOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9pc19wcml2aWxhZ2VkKGhsZGV2KTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT5tcnBjaW1fcmVnLT5yeG1hY19wYXVzZV9jZmdfcG9ydFtwb3J0XSk7CisJaWYgKHR4KQorCQl2YWw2NCB8PSBWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX0dFTl9FTjsKKwllbHNlCisJCXZhbDY0ICY9IH5WWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX0dFTl9FTjsKKwlpZiAocngpCisJCXZhbDY0IHw9IFZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfUkNWX0VOOworCWVsc2UKKwkJdmFsNjQgJj0gflZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfUkNWX0VOOworCisJd3JpdGVxKHZhbDY0LCAmaGxkZXYtPm1ycGNpbV9yZWctPnJ4bWFjX3BhdXNlX2NmZ19wb3J0W3BvcnRdKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKwordTE2IHZ4Z2VfaHdfZGV2aWNlX2xpbmtfd2lkdGhfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwlpbnQgbGlua193aWR0aCwgZXhwX2NhcDsKKwl1MTYgbG5rOworCisJZXhwX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkoaGxkZXYtPnBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChobGRldi0+cGRldiwgZXhwX2NhcCArIFBDSV9FWFBfTE5LU1RBLCAmbG5rKTsKKwlsaW5rX3dpZHRoID0gKGxuayAmIFZYR0VfSFdfUENJX0VYUF9MTktDQVBfTE5LX1dJRFRIKSA+PiA0OworCXJldHVybiBsaW5rX3dpZHRoOworfQorCisvKgorICogX192eGdlX2h3X3JpbmdfYmxvY2tfbWVtYmxvY2tfaWR4IC0gUmV0dXJuIHRoZSBtZW1ibG9jayBpbmRleAorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpbmRleCBvZiBtZW1vcnkgYmxvY2sKKyAqLworc3RhdGljIGlubGluZSB1MzIKK19fdnhnZV9od19yaW5nX2Jsb2NrX21lbWJsb2NrX2lkeCh1OCAqYmxvY2spCit7CisJcmV0dXJuICh1MzIpKigodTY0ICopKGJsb2NrICsgVlhHRV9IV19SSU5HX01FTUJMT0NLX0lEWF9PRkZTRVQpKTsKK30KKworLyoKKyAqIF9fdnhnZV9od19yaW5nX2Jsb2NrX21lbWJsb2NrX2lkeF9zZXQgLSBTZXRzIHRoZSBtZW1ibG9jayBpbmRleAorICogVGhpcyBmdW5jdGlvbiBzZXRzIGluZGV4IHRvIGEgbWVtb3J5IGJsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX192eGdlX2h3X3JpbmdfYmxvY2tfbWVtYmxvY2tfaWR4X3NldCh1OCAqYmxvY2ssIHUzMiBtZW1ibG9ja19pZHgpCit7CisJKigodTY0ICopKGJsb2NrICsgVlhHRV9IV19SSU5HX01FTUJMT0NLX0lEWF9PRkZTRVQpKSA9IG1lbWJsb2NrX2lkeDsKK30KKworLyoKKyAqIF9fdnhnZV9od19yaW5nX2Jsb2NrX25leHRfcG9pbnRlcl9zZXQgLSBTZXRzIHRoZSBuZXh0IGJsb2NrIHBvaW50ZXIKKyAqIGluIFJ4RCBibG9jaworICogU2V0cyB0aGUgbmV4dCBibG9jayBwb2ludGVyIGluIFJ4RCBibG9jaworICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19fdnhnZV9od19yaW5nX2Jsb2NrX25leHRfcG9pbnRlcl9zZXQodTggKmJsb2NrLCBkbWFfYWRkcl90IGRtYV9uZXh0KQoreworCSooKHU2NCAqKShibG9jayArIFZYR0VfSFdfUklOR19ORVhUX0JMT0NLX1BPSU5URVJfT0ZGU0VUKSkgPSBkbWFfbmV4dDsKK30KKworLyoKKyAqIF9fdnhnZV9od19yaW5nX2ZpcnN0X2Jsb2NrX2FkZHJlc3NfZ2V0IC0gUmV0dXJucyB0aGUgZG1hIGFkZHJlc3Mgb2YgdGhlCisgKiAgICAgICAgICAgICBmaXJzdCBibG9jaworICogUmV0dXJucyB0aGUgZG1hIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IFJ4RCBibG9jaworICovCit1NjQgX192eGdlX2h3X3JpbmdfZmlyc3RfYmxvY2tfYWRkcmVzc19nZXQoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nKQoreworCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICpkbWFfb2JqZWN0OworCisJZG1hX29iamVjdCA9IHJpbmctPm1lbXBvb2wtPm1lbWJsb2Nrc19kbWFfYXJyOworCXZ4Z2VfYXNzZXJ0KGRtYV9vYmplY3QgIT0gTlVMTCk7CisKKwlyZXR1cm4gZG1hX29iamVjdC0+YWRkcjsKK30KKworLyoKKyAqIF9fdnhnZV9od19yaW5nX2l0ZW1fZG1hX2FkZHIgLSBSZXR1cm4gdGhlIGRtYSBhZGRyZXNzIG9mIGFuIGl0ZW0KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZG1hIGFkZHJlc3Mgb2YgYSBnaXZlbiBpdGVtCisgKi8KK3N0YXRpYyBkbWFfYWRkcl90IF9fdnhnZV9od19yaW5nX2l0ZW1fZG1hX2FkZHIoc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbGgsCisJCQkJCSAgICAgICB2b2lkICppdGVtKQoreworCXUzMiBtZW1ibG9ja19pZHg7CisJdm9pZCAqbWVtYmxvY2s7CisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKm1lbWJsb2NrX2RtYV9vYmplY3Q7CisJcHRyZGlmZl90IGRtYV9pdGVtX29mZnNldDsKKworCS8qIGdldCBvd25lciBtZW1ibG9jayBpbmRleCAqLworCW1lbWJsb2NrX2lkeCA9IF9fdnhnZV9od19yaW5nX2Jsb2NrX21lbWJsb2NrX2lkeChpdGVtKTsKKworCS8qIGdldCBvd25lciBtZW1ibG9jayBieSBtZW1ibG9jayBpbmRleCAqLworCW1lbWJsb2NrID0gbWVtcG9vbGgtPm1lbWJsb2Nrc19hcnJbbWVtYmxvY2tfaWR4XTsKKworCS8qIGdldCBtZW1ibG9jayBETUEgb2JqZWN0IGJ5IG1lbWJsb2NrIGluZGV4ICovCisJbWVtYmxvY2tfZG1hX29iamVjdCA9IG1lbXBvb2xoLT5tZW1ibG9ja3NfZG1hX2FyciArIG1lbWJsb2NrX2lkeDsKKworCS8qIGNhbGN1bGF0ZSBvZmZzZXQgaW4gdGhlIG1lbWJsb2NrIG9mIHRoaXMgaXRlbSAqLworCWRtYV9pdGVtX29mZnNldCA9ICh1OCAqKWl0ZW0gLSAodTggKiltZW1ibG9jazsKKworCXJldHVybiBtZW1ibG9ja19kbWFfb2JqZWN0LT5hZGRyICsgZG1hX2l0ZW1fb2Zmc2V0OworfQorCisvKgorICogX192eGdlX2h3X3JpbmdfcnhkYmxvY2tfbGluayAtIExpbmsgdGhlIFJ4RCBibG9ja3MKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZG1hIGFkZHJlc3Mgb2YgYSBnaXZlbiBpdGVtCisgKi8KK3N0YXRpYyB2b2lkIF9fdnhnZV9od19yaW5nX3J4ZGJsb2NrX2xpbmsoc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbGgsCisJCQkJCSBzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHUzMiBmcm9tLAorCQkJCQkgdTMyIHRvKQoreworCXU4ICp0b19pdGVtICwgKmZyb21faXRlbTsKKwlkbWFfYWRkcl90IHRvX2RtYTsKKworCS8qIGdldCAiZnJvbSIgUnhEIGJsb2NrICovCisJZnJvbV9pdGVtID0gbWVtcG9vbGgtPml0ZW1zX2Fycltmcm9tXTsKKwl2eGdlX2Fzc2VydChmcm9tX2l0ZW0pOworCisJLyogZ2V0ICJ0byIgUnhEIGJsb2NrICovCisJdG9faXRlbSA9IG1lbXBvb2xoLT5pdGVtc19hcnJbdG9dOworCXZ4Z2VfYXNzZXJ0KHRvX2l0ZW0pOworCisJLyogcmV0dXJuIGFkZHJlc3Mgb2YgdGhlIGJlZ2lubmluZyBvZiBwcmV2aW91cyBSeEQgYmxvY2sgKi8KKwl0b19kbWEgPSBfX3Z4Z2VfaHdfcmluZ19pdGVtX2RtYV9hZGRyKG1lbXBvb2xoLCB0b19pdGVtKTsKKworCS8qIHNldCBuZXh0IHBvaW50ZXIgZm9yIHRoaXMgUnhEIGJsb2NrIHRvIHBvaW50IG9uCisJICogcHJldmlvdXMgaXRlbSdzIERNQSBzdGFydCBhZGRyZXNzICovCisJX192eGdlX2h3X3JpbmdfYmxvY2tfbmV4dF9wb2ludGVyX3NldChmcm9tX2l0ZW0sIHRvX2RtYSk7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmluZ19tZW1wb29sX2l0ZW1fYWxsb2MgLSBBbGxvY2F0ZSBMaXN0IGJsb2NrcyBmb3IgUnhECisgKiBibG9jayBjYWxsYmFjaworICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsYmFjayBwYXNzZWQgdG8gX192eGdlX2h3X21lbXBvb2xfY3JlYXRlIHRvIGNyZWF0ZSBtZW1vcnkKKyAqIHBvb2wgZm9yIFJ4RCBibG9jaworICovCitzdGF0aWMgdm9pZAorX192eGdlX2h3X3JpbmdfbWVtcG9vbF9pdGVtX2FsbG9jKHN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2xoLAorCQkJCSAgdTMyIG1lbWJsb2NrX2luZGV4LAorCQkJCSAgc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKmRtYV9vYmplY3QsCisJCQkJICB1MzIgaW5kZXgsIHUzMiBpc19sYXN0KQoreworCXUzMiBpOworCXZvaWQgKml0ZW0gPSBtZW1wb29saC0+aXRlbXNfYXJyW2luZGV4XTsKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcgPQorCQkoc3RydWN0IF9fdnhnZV9od19yaW5nICopbWVtcG9vbGgtPnVzZXJkYXRhOworCisJLyogZm9ybWF0IHJ4ZHMgYXJyYXkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmluZy0+cnhkc19wZXJfYmxvY2s7IGkrKykgeworCQl2b2lkICpyeGRibG9ja19wcml2OworCQl2b2lkICp1bGRfcHJpdjsKKwkJc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqcnhkcDsKKworCQl1MzIgcmVzZXJ2ZV9pbmRleCA9IHJpbmctPmNoYW5uZWwucmVzZXJ2ZV9wdHIgLQorCQkJCShpbmRleCAqIHJpbmctPnJ4ZHNfcGVyX2Jsb2NrICsgaSArIDEpOworCQl1MzIgbWVtYmxvY2tfaXRlbV9pZHg7CisKKwkJcmluZy0+Y2hhbm5lbC5yZXNlcnZlX2FycltyZXNlcnZlX2luZGV4XSA9ICgodTggKilpdGVtKSArCisJCQkJCQlpICogcmluZy0+cnhkX3NpemU7CisKKwkJLyogTm90ZTogbWVtYmxvY2tfaXRlbV9pZHggaXMgaW5kZXggb2YgdGhlIGl0ZW0gd2l0aGluCisJCSAqICAgICAgIHRoZSBtZW1ibG9jay4gRm9yIGluc3RhbmNlLCBpbiBjYXNlIG9mIHRocmVlIFJ4RC1ibG9ja3MKKwkJICogICAgICAgcGVyIG1lbWJsb2NrIHRoaXMgdmFsdWUgY2FuIGJlIDAsIDEgb3IgMi4gKi8KKwkJcnhkYmxvY2tfcHJpdiA9IF9fdnhnZV9od19tZW1wb29sX2l0ZW1fcHJpdihtZW1wb29saCwKKwkJCQkJbWVtYmxvY2tfaW5kZXgsIGl0ZW0sCisJCQkJCSZtZW1ibG9ja19pdGVtX2lkeCk7CisKKwkJcnhkcCA9IChzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICopCisJCQkJcmluZy0+Y2hhbm5lbC5yZXNlcnZlX2FycltyZXNlcnZlX2luZGV4XTsKKworCQl1bGRfcHJpdiA9ICgodTggKilyeGRibG9ja19wcml2ICsgcmluZy0+cnhkX3ByaXZfc2l6ZSAqIGkpOworCisJCS8qIHByZS1mb3JtYXQgSG9zdF9Db250cm9sICovCisJCXJ4ZHAtPmhvc3RfY29udHJvbCA9ICh1NjQpKHNpemVfdCl1bGRfcHJpdjsKKwl9CisKKwlfX3Z4Z2VfaHdfcmluZ19ibG9ja19tZW1ibG9ja19pZHhfc2V0KGl0ZW0sIG1lbWJsb2NrX2luZGV4KTsKKworCWlmIChpc19sYXN0KSB7CisJCS8qIGxpbmsgbGFzdCBvbmUgd2l0aCBmaXJzdCBvbmUgKi8KKwkJX192eGdlX2h3X3JpbmdfcnhkYmxvY2tfbGluayhtZW1wb29saCwgcmluZywgaW5kZXgsIDApOworCX0KKworCWlmIChpbmRleCA+IDApIHsKKwkJLyogbGluayB0aGlzIFJ4RCBibG9jayB3aXRoIHByZXZpb3VzIG9uZSAqLworCQlfX3Z4Z2VfaHdfcmluZ19yeGRibG9ja19saW5rKG1lbXBvb2xoLCByaW5nLCBpbmRleCAtIDEsIGluZGV4KTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmluZ19pbml0aWFsX3JlcGxlbmlzaCAtIEluaXRpYWwgcmVwbGVuaXNoIG9mIFJ4RHMKKyAqIFRoaXMgZnVuY3Rpb24gcmVwbGVuaXNoZXMgdGhlIFJ4RHMgZnJvbSByZXNlcnZlIGFycmF5IHRvIHdvcmsgYXJyYXkKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19yaW5nX3JlcGxlbmlzaChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHUxNiBtaW5fZmxhZykKK3sKKwl2b2lkICpyeGQ7CisJaW50IGkgPSAwOworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwljaGFubmVsID0gJnJpbmctPmNoYW5uZWw7CisKKwl3aGlsZSAodnhnZV9od19jaGFubmVsX2R0cl9jb3VudChjaGFubmVsKSA+IDApIHsKKworCQlzdGF0dXMgPSB2eGdlX2h3X3JpbmdfcnhkX3Jlc2VydmUocmluZywgJnJ4ZCk7CisKKwkJdnhnZV9hc3NlcnQoc3RhdHVzID09IFZYR0VfSFdfT0spOworCisJCWlmIChyaW5nLT5yeGRfaW5pdCkgeworCQkJc3RhdHVzID0gcmluZy0+cnhkX2luaXQocnhkLCBjaGFubmVsLT51c2VyZGF0YSk7CisJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCQl2eGdlX2h3X3JpbmdfcnhkX2ZyZWUocmluZywgcnhkKTsKKwkJCQlnb3RvIGV4aXQ7CisJCQl9CisJCX0KKworCQl2eGdlX2h3X3JpbmdfcnhkX3Bvc3QocmluZywgcnhkKTsKKwkJaWYgKG1pbl9mbGFnKSB7CisJCQlpKys7CisJCQlpZiAoaSA9PSBWWEdFX0hXX1JJTkdfTUlOX0JVRkZfQUxMT0NBVElPTikKKwkJCQlicmVhazsKKwkJfQorCX0KKwlzdGF0dXMgPSBWWEdFX0hXX09LOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3JpbmdfY3JlYXRlIC0gQ3JlYXRlIGEgUmluZworICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIFJpbmcgYW5kIGluaXRpYWxpemVzIGl0LgorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3JpbmdfY3JlYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwKKwkJICAgICAgc3RydWN0IHZ4Z2VfaHdfcmluZ19hdHRyICphdHRyKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmc7CisJdTMyIHJpbmdfbGVuZ3RoOworCXN0cnVjdCB2eGdlX2h3X3JpbmdfY29uZmlnICpjb25maWc7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OworCXUzMiB2cF9pZDsKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2NicyByaW5nX21wX2NhbGxiYWNrOworCisJaWYgKCh2cCA9PSBOVUxMKSB8fCAoYXR0ciA9PSBOVUxMKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlobGRldiA9IHZwLT52cGF0aC0+aGxkZXY7CisJdnBfaWQgPSB2cC0+dnBhdGgtPnZwX2lkOworCisJY29uZmlnID0gJmhsZGV2LT5jb25maWcudnBfY29uZmlnW3ZwX2lkXS5yaW5nOworCisJcmluZ19sZW5ndGggPSBjb25maWctPnJpbmdfYmxvY2tzICoKKwkJCXZ4Z2VfaHdfcmluZ19yeGRzX3Blcl9ibG9ja19nZXQoY29uZmlnLT5idWZmZXJfbW9kZSk7CisKKwlyaW5nID0gKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqKV9fdnhnZV9od19jaGFubmVsX2FsbG9jYXRlKHZwLAorCQkJCQkJVlhHRV9IV19DSEFOTkVMX1RZUEVfUklORywKKwkJCQkJCXJpbmdfbGVuZ3RoLAorCQkJCQkJYXR0ci0+cGVyX3J4ZF9zcGFjZSwKKwkJCQkJCWF0dHItPnVzZXJkYXRhKTsKKworCWlmIChyaW5nID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJZ290byBleGl0OworCX0KKworCXZwLT52cGF0aC0+cmluZ2ggPSByaW5nOworCXJpbmctPnZwX2lkID0gdnBfaWQ7CisJcmluZy0+dnBfcmVnID0gdnAtPnZwYXRoLT52cF9yZWc7CisJcmluZy0+Y29tbW9uX3JlZyA9IGhsZGV2LT5jb21tb25fcmVnOworCXJpbmctPnN0YXRzID0gJnZwLT52cGF0aC0+c3dfc3RhdHMtPnJpbmdfc3RhdHM7CisJcmluZy0+Y29uZmlnID0gY29uZmlnOworCXJpbmctPmNhbGxiYWNrID0gYXR0ci0+Y2FsbGJhY2s7CisJcmluZy0+cnhkX2luaXQgPSBhdHRyLT5yeGRfaW5pdDsKKwlyaW5nLT5yeGRfdGVybSA9IGF0dHItPnJ4ZF90ZXJtOworCXJpbmctPmJ1ZmZlcl9tb2RlID0gY29uZmlnLT5idWZmZXJfbW9kZTsKKwlyaW5nLT5yeGRzX2xpbWl0ID0gY29uZmlnLT5yeGRzX2xpbWl0OworCisJcmluZy0+cnhkX3NpemUgPSB2eGdlX2h3X3JpbmdfcnhkX3NpemVfZ2V0KGNvbmZpZy0+YnVmZmVyX21vZGUpOworCXJpbmctPnJ4ZF9wcml2X3NpemUgPQorCQlzaXplb2Yoc3RydWN0IF9fdnhnZV9od19yaW5nX3J4ZF9wcml2KSArIGF0dHItPnBlcl9yeGRfc3BhY2U7CisJcmluZy0+cGVyX3J4ZF9zcGFjZSA9IGF0dHItPnBlcl9yeGRfc3BhY2U7CisKKwlyaW5nLT5yeGRfcHJpdl9zaXplID0KKwkJKChyaW5nLT5yeGRfcHJpdl9zaXplICsgVlhHRV9DQUNIRV9MSU5FX1NJWkUgLSAxKSAvCisJCVZYR0VfQ0FDSEVfTElORV9TSVpFKSAqIFZYR0VfQ0FDSEVfTElORV9TSVpFOworCisJLyogaG93IG1hbnkgUnhEcyBjYW4gZml0IGludG8gb25lIGJsb2NrLiBEZXBlbmRzIG9uIGNvbmZpZ3VyZWQKKwkgKiBidWZmZXJfbW9kZS4gKi8KKwlyaW5nLT5yeGRzX3Blcl9ibG9jayA9CisJCXZ4Z2VfaHdfcmluZ19yeGRzX3Blcl9ibG9ja19nZXQoY29uZmlnLT5idWZmZXJfbW9kZSk7CisKKwkvKiBjYWxjdWxhdGUgYWN0dWFsIFJ4RCBibG9jayBwcml2YXRlIHNpemUgKi8KKwlyaW5nLT5yeGRibG9ja19wcml2X3NpemUgPSByaW5nLT5yeGRfcHJpdl9zaXplICogcmluZy0+cnhkc19wZXJfYmxvY2s7CisJcmluZ19tcF9jYWxsYmFjay5pdGVtX2Z1bmNfYWxsb2MgPSBfX3Z4Z2VfaHdfcmluZ19tZW1wb29sX2l0ZW1fYWxsb2M7CisJcmluZy0+bWVtcG9vbCA9IF9fdnhnZV9od19tZW1wb29sX2NyZWF0ZShobGRldiwKKwkJCQlWWEdFX0hXX0JMT0NLX1NJWkUsCisJCQkJVlhHRV9IV19CTE9DS19TSVpFLAorCQkJCXJpbmctPnJ4ZGJsb2NrX3ByaXZfc2l6ZSwKKwkJCQlyaW5nLT5jb25maWctPnJpbmdfYmxvY2tzLAorCQkJCXJpbmctPmNvbmZpZy0+cmluZ19ibG9ja3MsCisJCQkJJnJpbmdfbXBfY2FsbGJhY2ssCisJCQkJcmluZyk7CisKKwlpZiAocmluZy0+bWVtcG9vbCA9PSBOVUxMKSB7CisJCV9fdnhnZV9od19yaW5nX2RlbGV0ZSh2cCk7CisJCXJldHVybiBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od19jaGFubmVsX2luaXRpYWxpemUoJnJpbmctPmNoYW5uZWwpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQlfX3Z4Z2VfaHdfcmluZ19kZWxldGUodnApOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogTm90ZToKKwkgKiBTcGVjaWZ5aW5nIHJ4ZF9pbml0IGNhbGxiYWNrIG1lYW5zIHR3byB0aGluZ3M6CisJICogMSkgcnhkcyBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGJ5IGRyaXZlciBhdCBjaGFubmVsLW9wZW4gdGltZTsKKwkgKiAyKSByeGRzIG5lZWQgdG8gYmUgcG9zdGVkIGF0IGNoYW5uZWwtb3BlbiB0aW1lCisJICogICAgKHRoYXQncyB3aGF0IHRoZSBpbml0aWFsX3JlcGxlbmlzaCgpIGJlbG93IGRvZXMpCisJICogQ3VycmVudGx5IHdlIGRvbid0IGhhdmUgYSBjYXNlIHdoZW4gdGhlIDEpIGlzIGRvbmUgd2l0aG91dCB0aGUgMikuCisJICovCisJaWYgKHJpbmctPnJ4ZF9pbml0KSB7CisJCXN0YXR1cyA9IHZ4Z2VfaHdfcmluZ19yZXBsZW5pc2gocmluZywgMSk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJX192eGdlX2h3X3JpbmdfZGVsZXRlKHZwKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCS8qIGluaXRpYWwgcmVwbGVuaXNoIHdpbGwgaW5jcmVtZW50IHRoZSBjb3VudGVyIGluIGl0cyBwb3N0KCkgcm91dGluZSwKKwkgKiB3ZSBoYXZlIHRvIHJlc2V0IGl0ICovCisJcmluZy0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9jbnQgPSAwOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3JpbmdfYWJvcnQgLSBSZXR1cm5zIHRoZSBSeEQKKyAqIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB0aGUgUnhEcyBvZiByaW5nCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X3JpbmdfYWJvcnQoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nKQoreworCXZvaWQgKnJ4ZGg7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJZm9yICg7OykgeworCQl2eGdlX2h3X2NoYW5uZWxfZHRyX3RyeV9jb21wbGV0ZShjaGFubmVsLCAmcnhkaCk7CisKKwkJaWYgKHJ4ZGggPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfY29tcGxldGUoY2hhbm5lbCk7CisKKwkJaWYgKHJpbmctPnJ4ZF90ZXJtKQorCQkJcmluZy0+cnhkX3Rlcm0ocnhkaCwgVlhHRV9IV19SWERfU1RBVEVfUE9TVEVELAorCQkJCWNoYW5uZWwtPnVzZXJkYXRhKTsKKworCQl2eGdlX2h3X2NoYW5uZWxfZHRyX2ZyZWUoY2hhbm5lbCwgcnhkaCk7CisJfQorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmluZ19yZXNldCAtIFJlc2V0cyB0aGUgcmluZworICogVGhpcyBmdW5jdGlvbiByZXNldHMgdGhlIHJpbmcgZHVyaW5nIHZwYXRoIHJlc2V0IG9wZXJhdGlvbgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fdnhnZV9od19yaW5nX3Jlc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJX192eGdlX2h3X3JpbmdfYWJvcnQocmluZyk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfY2hhbm5lbF9yZXNldChjaGFubmVsKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJaWYgKHJpbmctPnJ4ZF9pbml0KSB7CisJCXN0YXR1cyA9IHZ4Z2VfaHdfcmluZ19yZXBsZW5pc2gocmluZywgMSk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfcmluZ19kZWxldGUgLSBSZW1vdmVzIHRoZSByaW5nCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWV1cCB0aGUgbWVtb3J5IHBvb2wgYW5kIHJlbW92ZXMgdGhlIHJpbmcKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyBfX3Z4Z2VfaHdfcmluZ19kZWxldGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZyA9IHZwLT52cGF0aC0+cmluZ2g7CisKKwlfX3Z4Z2VfaHdfcmluZ19hYm9ydChyaW5nKTsKKworCWlmIChyaW5nLT5tZW1wb29sKQorCQlfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KHJpbmctPm1lbXBvb2wpOworCisJdnAtPnZwYXRoLT5yaW5naCA9IE5VTEw7CisJX192eGdlX2h3X2NoYW5uZWxfZnJlZSgmcmluZy0+Y2hhbm5lbCk7CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9fdnhnZV9od19tZW1wb29sX2dyb3cKKyAqIFdpbGwgcmVzaXplIG1lbXBvb2wgdXAgdG8gJW51bV9hbGxvY2F0ZSB2YWx1ZS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X21lbXBvb2xfZ3JvdyhzdHJ1Y3QgdnhnZV9od19tZW1wb29sICptZW1wb29sLCB1MzIgbnVtX2FsbG9jYXRlLAorCQkgICAgICAgdTMyICpudW1fYWxsb2NhdGVkKQoreworCXUzMiBpLCBmaXJzdF90aW1lID0gbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZCA9PSAwID8gMSA6IDA7CisJdTMyIG5faXRlbXMgPSBtZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2s7CisJdTMyIHN0YXJ0X2Jsb2NrX2lkeCA9IG1lbXBvb2wtPm1lbWJsb2Nrc19hbGxvY2F0ZWQ7CisJdTMyIGVuZF9ibG9ja19pZHggPSBtZW1wb29sLT5tZW1ibG9ja3NfYWxsb2NhdGVkICsgbnVtX2FsbG9jYXRlOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCSpudW1fYWxsb2NhdGVkID0gMDsKKworCWlmIChlbmRfYmxvY2tfaWR4ID4gbWVtcG9vbC0+bWVtYmxvY2tzX21heCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQlnb3RvIGV4aXQ7CisJfQorCisJZm9yIChpID0gc3RhcnRfYmxvY2tfaWR4OyBpIDwgZW5kX2Jsb2NrX2lkeDsgaSsrKSB7CisJCXUzMiBqOworCQl1MzIgaXNfbGFzdCA9ICgoZW5kX2Jsb2NrX2lkeCAtIDEpID09IGkpOworCQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdCA9CisJCQltZW1wb29sLT5tZW1ibG9ja3NfZG1hX2FyciArIGk7CisJCXZvaWQgKnRoZV9tZW1ibG9jazsKKworCQkvKiBhbGxvY2F0ZSBtZW1ibG9jaydzIHByaXZhdGUgcGFydC4gRWFjaCBETUEgbWVtYmxvY2sKKwkJICogaGFzIGEgc3BhY2UgYWxsb2NhdGVkIGZvciBpdGVtJ3MgcHJpdmF0ZSB1c2FnZSB1cG9uCisJCSAqIG1lbXBvb2wncyB1c2VyIHJlcXVlc3QuIEVhY2ggdGltZSBtZW1wb29sIGdyb3dzLCBpdCB3aWxsCisJCSAqIGFsbG9jYXRlIG5ldyBtZW1ibG9jayBhbmQgaXRzIHByaXZhdGUgcGFydCBhdCBvbmNlLgorCQkgKiBUaGlzIGhlbHBzIHRvIG1pbmltaXplIG1lbW9yeSB1c2FnZSBhIGxvdC4gKi8KKwkJbWVtcG9vbC0+bWVtYmxvY2tzX3ByaXZfYXJyW2ldID0KKwkJCQl2bWFsbG9jKG1lbXBvb2wtPml0ZW1zX3ByaXZfc2l6ZSAqIG5faXRlbXMpOworCQlpZiAobWVtcG9vbC0+bWVtYmxvY2tzX3ByaXZfYXJyW2ldID09IE5VTEwpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQltZW1zZXQobWVtcG9vbC0+bWVtYmxvY2tzX3ByaXZfYXJyW2ldLCAwLAorCQkJICAgICBtZW1wb29sLT5pdGVtc19wcml2X3NpemUgKiBuX2l0ZW1zKTsKKworCQkvKiBhbGxvY2F0ZSBETUEtY2FwYWJsZSBtZW1ibG9jayAqLworCQltZW1wb29sLT5tZW1ibG9ja3NfYXJyW2ldID0KKwkJCV9fdnhnZV9od19ibG9ja3Bvb2xfbWFsbG9jKG1lbXBvb2wtPmRldmgsCisJCQkJbWVtcG9vbC0+bWVtYmxvY2tfc2l6ZSwgZG1hX29iamVjdCk7CisJCWlmIChtZW1wb29sLT5tZW1ibG9ja3NfYXJyW2ldID09IE5VTEwpIHsKKwkJCXZmcmVlKG1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FycltpXSk7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQkJZ290byBleGl0OworCQl9CisKKwkJKCpudW1fYWxsb2NhdGVkKSsrOworCQltZW1wb29sLT5tZW1ibG9ja3NfYWxsb2NhdGVkKys7CisKKwkJbWVtc2V0KG1lbXBvb2wtPm1lbWJsb2Nrc19hcnJbaV0sIDAsIG1lbXBvb2wtPm1lbWJsb2NrX3NpemUpOworCisJCXRoZV9tZW1ibG9jayA9IG1lbXBvb2wtPm1lbWJsb2Nrc19hcnJbaV07CisKKwkJLyogZmlsbCB0aGUgaXRlbXMgaGFzaCBhcnJheSAqLworCQlmb3IgKGogPSAwOyBqIDwgbl9pdGVtczsgaisrKSB7CisJCQl1MzIgaW5kZXggPSBpICogbl9pdGVtcyArIGo7CisKKwkJCWlmIChmaXJzdF90aW1lICYmIGluZGV4ID49IG1lbXBvb2wtPml0ZW1zX2luaXRpYWwpCisJCQkJYnJlYWs7CisKKwkJCW1lbXBvb2wtPml0ZW1zX2FycltpbmRleF0gPQorCQkJCSgoY2hhciAqKXRoZV9tZW1ibG9jayArIGoqbWVtcG9vbC0+aXRlbV9zaXplKTsKKworCQkJLyogbGV0IGNhbGxlciB0byBkbyBtb3JlIGpvYiBvbiBlYWNoIGl0ZW0gKi8KKwkJCWlmIChtZW1wb29sLT5pdGVtX2Z1bmNfYWxsb2MgIT0gTlVMTCkKKwkJCQltZW1wb29sLT5pdGVtX2Z1bmNfYWxsb2MobWVtcG9vbCwgaSwKKwkJCQkJZG1hX29iamVjdCwgaW5kZXgsIGlzX2xhc3QpOworCisJCQltZW1wb29sLT5pdGVtc19jdXJyZW50ID0gaW5kZXggKyAxOworCQl9CisKKwkJaWYgKGZpcnN0X3RpbWUgJiYgbWVtcG9vbC0+aXRlbXNfY3VycmVudCA9PQorCQkJCQltZW1wb29sLT5pdGVtc19pbml0aWFsKQorCQkJYnJlYWs7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od19tZW1wb29sX2NyZWF0ZQorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZSBtZW1vcnkgcG9vbCBvYmplY3QuIFBvb2wgbWF5IGdyb3cgYnV0IHdpbGwKKyAqIG5ldmVyIHNocmluay4gUG9vbCBjb25zaXN0cyBvZiBudW1iZXIgb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGJsb2NrcworICogd2l0aCBzaXplIGVub3VnaCB0byBob2xkICVpdGVtc19pbml0aWFsIG51bWJlciBvZiBpdGVtcy4gTWVtb3J5IGlzCisgKiBETUEtYWJsZSBidXQgY2xpZW50IG11c3QgbWFwL3VubWFwIGJlZm9yZSBpbnRlcm9wZXJhdGluZyB3aXRoIHRoZSBkZXZpY2UuCisgKi8KK3N0cnVjdCB2eGdlX2h3X21lbXBvb2wqCitfX3Z4Z2VfaHdfbWVtcG9vbF9jcmVhdGUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyIG1lbWJsb2NrX3NpemUsCisJdTMyIGl0ZW1fc2l6ZSwKKwl1MzIgaXRlbXNfcHJpdl9zaXplLAorCXUzMiBpdGVtc19pbml0aWFsLAorCXUzMiBpdGVtc19tYXgsCisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9jYnMgKm1wX2NhbGxiYWNrLAorCXZvaWQgKnVzZXJkYXRhKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwl1MzIgbWVtYmxvY2tzX3RvX2FsbG9jYXRlOworCXN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2wgPSBOVUxMOworCXUzMiBhbGxvY2F0ZWQ7CisKKwlpZiAobWVtYmxvY2tfc2l6ZSA8IGl0ZW1fc2l6ZSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1wb29sID0gKHN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKikKKwkJCXZtYWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X21lbXBvb2wpKTsKKwlpZiAobWVtcG9vbCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCWdvdG8gZXhpdDsKKwl9CisJbWVtc2V0KG1lbXBvb2wsIDAsIHNpemVvZihzdHJ1Y3QgdnhnZV9od19tZW1wb29sKSk7CisKKwltZW1wb29sLT5kZXZoCQkJPSBkZXZoOworCW1lbXBvb2wtPm1lbWJsb2NrX3NpemUJCT0gbWVtYmxvY2tfc2l6ZTsKKwltZW1wb29sLT5pdGVtc19tYXgJCT0gaXRlbXNfbWF4OworCW1lbXBvb2wtPml0ZW1zX2luaXRpYWwJCT0gaXRlbXNfaW5pdGlhbDsKKwltZW1wb29sLT5pdGVtX3NpemUJCT0gaXRlbV9zaXplOworCW1lbXBvb2wtPml0ZW1zX3ByaXZfc2l6ZQk9IGl0ZW1zX3ByaXZfc2l6ZTsKKwltZW1wb29sLT5pdGVtX2Z1bmNfYWxsb2MJPSBtcF9jYWxsYmFjay0+aXRlbV9mdW5jX2FsbG9jOworCW1lbXBvb2wtPnVzZXJkYXRhCQk9IHVzZXJkYXRhOworCisJbWVtcG9vbC0+bWVtYmxvY2tzX2FsbG9jYXRlZCA9IDA7CisKKwltZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2sgPSBtZW1ibG9ja19zaXplIC8gaXRlbV9zaXplOworCisJbWVtcG9vbC0+bWVtYmxvY2tzX21heCA9IChpdGVtc19tYXggKyBtZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2sgLSAxKSAvCisJCQkJCW1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jazsKKworCS8qIGFsbG9jYXRlIGFycmF5IG9mIG1lbWJsb2NrcyAqLworCW1lbXBvb2wtPm1lbWJsb2Nrc19hcnIgPQorCQkodm9pZCAqKikgdm1hbGxvYyhzaXplb2Yodm9pZCAqKSAqIG1lbXBvb2wtPm1lbWJsb2Nrc19tYXgpOworCWlmIChtZW1wb29sLT5tZW1ibG9ja3NfYXJyID09IE5VTEwpIHsKKwkJX192eGdlX2h3X21lbXBvb2xfZGVzdHJveShtZW1wb29sKTsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJbWVtcG9vbCA9IE5VTEw7CisJCWdvdG8gZXhpdDsKKwl9CisJbWVtc2V0KG1lbXBvb2wtPm1lbWJsb2Nrc19hcnIsIDAsCisJCXNpemVvZih2b2lkICopICogbWVtcG9vbC0+bWVtYmxvY2tzX21heCk7CisKKwkvKiBhbGxvY2F0ZSBhcnJheSBvZiBwcml2YXRlIHBhcnRzIG9mIGl0ZW1zIHBlciBtZW1ibG9ja3MgKi8KKwltZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnIgPQorCQkodm9pZCAqKikgdm1hbGxvYyhzaXplb2Yodm9pZCAqKSAqIG1lbXBvb2wtPm1lbWJsb2Nrc19tYXgpOworCWlmIChtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnIgPT0gTlVMTCkgeworCQlfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KG1lbXBvb2wpOworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQltZW1wb29sID0gTlVMTDsKKwkJZ290byBleGl0OworCX0KKwltZW1zZXQobWVtcG9vbC0+bWVtYmxvY2tzX3ByaXZfYXJyLCAwLAorCQkgICAgc2l6ZW9mKHZvaWQgKikgKiBtZW1wb29sLT5tZW1ibG9ja3NfbWF4KTsKKworCS8qIGFsbG9jYXRlIGFycmF5IG9mIG1lbWJsb2NrcyBETUEgb2JqZWN0cyAqLworCW1lbXBvb2wtPm1lbWJsb2Nrc19kbWFfYXJyID0gKHN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICopCisJCXZtYWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hKSAqCisJCQltZW1wb29sLT5tZW1ibG9ja3NfbWF4KTsKKworCWlmIChtZW1wb29sLT5tZW1ibG9ja3NfZG1hX2FyciA9PSBOVUxMKSB7CisJCV9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3kobWVtcG9vbCk7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCW1lbXBvb2wgPSBOVUxMOworCQlnb3RvIGV4aXQ7CisJfQorCW1lbXNldChtZW1wb29sLT5tZW1ibG9ja3NfZG1hX2FyciwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSkgKgorCQkJbWVtcG9vbC0+bWVtYmxvY2tzX21heCk7CisKKwkvKiBhbGxvY2F0ZSBoYXNoIGFycmF5IG9mIGl0ZW1zICovCisJbWVtcG9vbC0+aXRlbXNfYXJyID0KKwkJKHZvaWQgKiopIHZtYWxsb2Moc2l6ZW9mKHZvaWQgKikgKiBtZW1wb29sLT5pdGVtc19tYXgpOworCWlmIChtZW1wb29sLT5pdGVtc19hcnIgPT0gTlVMTCkgeworCQlfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KG1lbXBvb2wpOworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQltZW1wb29sID0gTlVMTDsKKwkJZ290byBleGl0OworCX0KKwltZW1zZXQobWVtcG9vbC0+aXRlbXNfYXJyLCAwLCBzaXplb2Yodm9pZCAqKSAqIG1lbXBvb2wtPml0ZW1zX21heCk7CisKKwkvKiBjYWxjdWxhdGUgaW5pdGlhbCBudW1iZXIgb2YgbWVtYmxvY2tzICovCisJbWVtYmxvY2tzX3RvX2FsbG9jYXRlID0gKG1lbXBvb2wtPml0ZW1zX2luaXRpYWwgKworCQkJCSBtZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2sgLSAxKSAvCisJCQkJCQltZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2s7CisKKwkvKiBwcmUtYWxsb2NhdGUgdGhlIG1lbXBvb2wgKi8KKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfbWVtcG9vbF9ncm93KG1lbXBvb2wsIG1lbWJsb2Nrc190b19hbGxvY2F0ZSwKKwkJCQkJJmFsbG9jYXRlZCk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCV9fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3kobWVtcG9vbCk7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCW1lbXBvb2wgPSBOVUxMOworCQlnb3RvIGV4aXQ7CisJfQorCitleGl0OgorCXJldHVybiBtZW1wb29sOworfQorCisvKgorICogdnhnZV9od19tZW1wb29sX2Rlc3Ryb3kKKyAqLwordm9pZCBfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KHN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2wpCit7CisJdTMyIGksIGo7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmggPSBtZW1wb29sLT5kZXZoOworCisJZm9yIChpID0gMDsgaSA8IG1lbXBvb2wtPm1lbWJsb2Nrc19hbGxvY2F0ZWQ7IGkrKykgeworCQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdDsKKworCQl2eGdlX2Fzc2VydChtZW1wb29sLT5tZW1ibG9ja3NfYXJyW2ldKTsKKwkJdnhnZV9hc3NlcnQobWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIgKyBpKTsKKworCQlkbWFfb2JqZWN0ID0gbWVtcG9vbC0+bWVtYmxvY2tzX2RtYV9hcnIgKyBpOworCisJCWZvciAoaiA9IDA7IGogPCBtZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2s7IGorKykgeworCQkJdTMyIGluZGV4ID0gaSAqIG1lbXBvb2wtPml0ZW1zX3Blcl9tZW1ibG9jayArIGo7CisKKwkJCS8qIHRvIHNraXAgbGFzdCBwYXJ0aWFsbHkgZmlsbGVkKGlmIGFueSkgbWVtYmxvY2sgKi8KKwkJCWlmIChpbmRleCA+PSBtZW1wb29sLT5pdGVtc19jdXJyZW50KQorCQkJCWJyZWFrOworCQl9CisKKwkJdmZyZWUobWVtcG9vbC0+bWVtYmxvY2tzX3ByaXZfYXJyW2ldKTsKKworCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2ZyZWUoZGV2aCwgbWVtcG9vbC0+bWVtYmxvY2tzX2FycltpXSwKKwkJCQltZW1wb29sLT5tZW1ibG9ja19zaXplLCBkbWFfb2JqZWN0KTsKKwl9CisKKwlpZiAobWVtcG9vbC0+aXRlbXNfYXJyKQorCQl2ZnJlZShtZW1wb29sLT5pdGVtc19hcnIpOworCisJaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19kbWFfYXJyKQorCQl2ZnJlZShtZW1wb29sLT5tZW1ibG9ja3NfZG1hX2Fycik7CisKKwlpZiAobWVtcG9vbC0+bWVtYmxvY2tzX3ByaXZfYXJyKQorCQl2ZnJlZShtZW1wb29sLT5tZW1ibG9ja3NfcHJpdl9hcnIpOworCisJaWYgKG1lbXBvb2wtPm1lbWJsb2Nrc19hcnIpCisJCXZmcmVlKG1lbXBvb2wtPm1lbWJsb2Nrc19hcnIpOworCisJdmZyZWUobWVtcG9vbCk7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2ZpZm9fY29uZmlnX2NoZWNrIC0gQ2hlY2sgZmlmbyBjb25maWd1cmF0aW9uLgorICogQ2hlY2sgdGhlIGZpZm8gY29uZmlndXJhdGlvbgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2ZpZm9fY29uZmlnX2NoZWNrKHN0cnVjdCB2eGdlX2h3X2ZpZm9fY29uZmlnICpmaWZvX2NvbmZpZykKK3sKKwlpZiAoKGZpZm9fY29uZmlnLT5maWZvX2Jsb2NrcyA8IFZYR0VfSFdfTUlOX0ZJRk9fQkxPQ0tTKSB8fAorCSAgICAgKGZpZm9fY29uZmlnLT5maWZvX2Jsb2NrcyA+IFZYR0VfSFdfTUFYX0ZJRk9fQkxPQ0tTKSkKKwkJcmV0dXJuIFZYR0VfSFdfQkFEQ0ZHX0ZJRk9fQkxPQ0tTOworCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX3ZwYXRoX2NvbmZpZ19jaGVjayAtIENoZWNrIHZwYXRoIGNvbmZpZ3VyYXRpb24uCisgKiBDaGVjayB0aGUgdnBhdGggY29uZmlndXJhdGlvbgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX3ZwYXRoX2NvbmZpZ19jaGVjayhzdHJ1Y3QgdnhnZV9od192cF9jb25maWcgKnZwX2NvbmZpZykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKworCWlmICgodnBfY29uZmlnLT5taW5fYmFuZHdpZHRoIDwgVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfTUlOKSB8fAorCQkodnBfY29uZmlnLT5taW5fYmFuZHdpZHRoID4KKwkJCQkJVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfTUFYKSkKKwkJcmV0dXJuIFZYR0VfSFdfQkFEQ0ZHX1ZQQVRIX01JTl9CQU5EV0lEVEg7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX2ZpZm9fY29uZmlnX2NoZWNrKCZ2cF9jb25maWctPmZpZm8pOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmICgodnBfY29uZmlnLT5tdHUgIT0gVlhHRV9IV19WUEFUSF9VU0VfRkxBU0hfREVGQVVMVF9JTklUSUFMX01UVSkgJiYKKwkJKCh2cF9jb25maWctPm10dSA8IFZYR0VfSFdfVlBBVEhfTUlOX0lOSVRJQUxfTVRVKSB8fAorCQkodnBfY29uZmlnLT5tdHUgPiBWWEdFX0hXX1ZQQVRIX01BWF9JTklUSUFMX01UVSkpKQorCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfVlBBVEhfTVRVOworCisJaWYgKCh2cF9jb25maWctPnJwYV9zdHJpcF92bGFuX3RhZyAhPQorCQlWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19VU0VfRkxBU0hfREVGQVVMVCkgJiYKKwkJKHZwX2NvbmZpZy0+cnBhX3N0cmlwX3ZsYW5fdGFnICE9CisJCVZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX0VOQUJMRSkgJiYKKwkJKHZwX2NvbmZpZy0+cnBhX3N0cmlwX3ZsYW5fdGFnICE9CisJCVZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX0RJU0FCTEUpKQorCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHOworCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2NvbmZpZ19jaGVjayAtIENoZWNrIGRldmljZSBjb25maWd1cmF0aW9uLgorICogQ2hlY2sgdGhlIGRldmljZSBjb25maWd1cmF0aW9uCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfY29uZmlnX2NoZWNrKHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgKm5ld19jb25maWcpCit7CisJdTMyIGk7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisKKwlpZiAoKG5ld19jb25maWctPmludHJfbW9kZSAhPSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FKSAmJgorCSAgIChuZXdfY29uZmlnLT5pbnRyX21vZGUgIT0gVlhHRV9IV19JTlRSX01PREVfTVNJWCkgJiYKKwkgICAobmV3X2NvbmZpZy0+aW50cl9tb2RlICE9IFZYR0VfSFdfSU5UUl9NT0RFX01TSVhfT05FX1NIT1QpICYmCisJICAgKG5ld19jb25maWctPmludHJfbW9kZSAhPSBWWEdFX0hXX0lOVFJfTU9ERV9ERUYpKQorCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfSU5UUl9NT0RFOworCisJaWYgKChuZXdfY29uZmlnLT5ydHNfbWFjX2VuICE9IFZYR0VfSFdfUlRTX01BQ19ESVNBQkxFKSAmJgorCSAgIChuZXdfY29uZmlnLT5ydHNfbWFjX2VuICE9IFZYR0VfSFdfUlRTX01BQ19FTkFCTEUpKQorCQlyZXR1cm4gVlhHRV9IV19CQURDRkdfUlRTX01BQ19FTjsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKwkJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV92cGF0aF9jb25maWdfY2hlY2soCisJCQkJJm5ld19jb25maWctPnZwX2NvbmZpZ1tpXSk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCXJldHVybiBzdGF0dXM7CisJfQorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiB2eGdlX2h3X2RldmljZV9jb25maWdfZGVmYXVsdF9nZXQgLSBJbml0aWFsaXplIGRldmljZSBjb25maWcgd2l0aCBkZWZhdWx0cy4KKyAqIEluaXRpYWxpemUgVGl0YW4gZGV2aWNlIGNvbmZpZyB3aXRoIGRlZmF1bHQgdmFsdWVzLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fZGV2aW5pdAordnhnZV9od19kZXZpY2VfY29uZmlnX2RlZmF1bHRfZ2V0KHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgKmRldmljZV9jb25maWcpCit7CisJdTMyIGk7CisKKwlkZXZpY2VfY29uZmlnLT5kbWFfYmxvY2twb29sX2luaXRpYWwgPQorCQkJCQlWWEdFX0hXX0lOSVRJQUxfRE1BX0JMT0NLX1BPT0xfU0laRTsKKwlkZXZpY2VfY29uZmlnLT5kbWFfYmxvY2twb29sX21heCA9IFZYR0VfSFdfTUFYX0RNQV9CTE9DS19QT09MX1NJWkU7CisJZGV2aWNlX2NvbmZpZy0+aW50cl9tb2RlID0gVlhHRV9IV19JTlRSX01PREVfREVGOworCWRldmljZV9jb25maWctPnJ0aF9lbiA9IFZYR0VfSFdfUlRIX0RFRkFVTFQ7CisJZGV2aWNlX2NvbmZpZy0+cnRoX2l0X3R5cGUgPSBWWEdFX0hXX1JUSF9JVF9UWVBFX0RFRkFVTFQ7CisJZGV2aWNlX2NvbmZpZy0+ZGV2aWNlX3BvbGxfbWlsbGlzID0gIFZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUzsKKwlkZXZpY2VfY29uZmlnLT5ydHNfbWFjX2VuID0gIFZYR0VfSFdfUlRTX01BQ19ERUZBVUxUOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS52cF9pZCA9IGk7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLm1pbl9iYW5kd2lkdGggPQorCQkJCVZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcuZW5hYmxlID0gVlhHRV9IV19SSU5HX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcucmluZ19ibG9ja3MgPQorCQkJCVZYR0VfSFdfREVGX1JJTkdfQkxPQ0tTOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLmJ1ZmZlcl9tb2RlID0KKwkJCQlWWEdFX0hXX1JJTkdfUlhEX0JVRkZFUl9NT0RFX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcuc2NhdHRlcl9tb2RlID0KKwkJCQlWWEdFX0hXX1JJTkdfU0NBVFRFUl9NT0RFX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLnJ4ZHNfbGltaXQgPQorCQkJCVZYR0VfSFdfREVGX1JJTkdfUlhEU19MSU1JVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5lbmFibGUgPSBWWEdFX0hXX0ZJRk9fRU5BQkxFOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLmZpZm9fYmxvY2tzID0KKwkJCQlWWEdFX0hXX01JTl9GSUZPX0JMT0NLUzsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0uZmlmby5tYXhfZnJhZ3MgPQorCQkJCVZYR0VfSFdfTUFYX0ZJRk9fRlJBR1M7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8ubWVtYmxvY2tfc2l6ZSA9CisJCQkJVlhHRV9IV19ERUZfRklGT19NRU1CTE9DS19TSVpFOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLmFsaWdubWVudF9zaXplID0KKwkJCQlWWEdFX0hXX0RFRl9GSUZPX0FMSUdOTUVOVF9TSVpFOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLmludHIgPQorCQkJCVZYR0VfSFdfRklGT19RVUVVRV9JTlRSX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8ubm9fc25vb3BfYml0cyA9CisJCQkJVlhHRV9IV19GSUZPX05PX1NOT09QX0RFRkFVTFQ7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkuaW50cl9lbmFibGUgPQorCQkJCVZYR0VfSFdfVElNX0lOVFJfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLmJ0aW1lcl92YWwgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS50aW1lcl9hY19lbiA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnRpbWVyX2NpX2VuID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudGltZXJfcmlfZW4gPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS5ydGltZXJfdmFsID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudXRpbF9zZWwgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS5sdGltZXJfdmFsID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudXJhbmdlX2EgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51ZWNfYSA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVyYW5nZV9iID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudWVjX2IgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS51cmFuZ2VfYyA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVlY19jID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudWVjX2QgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS5pbnRyX2VuYWJsZSA9CisJCQkJVlhHRV9IV19USU1fSU5UUl9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkuYnRpbWVyX3ZhbCA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnRpbWVyX2FjX2VuID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudGltZXJfY2lfZW4gPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS50aW1lcl9yaV9lbiA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnJ0aW1lcl92YWwgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51dGlsX3NlbCA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLmx0aW1lcl92YWwgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51cmFuZ2VfYSA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVlY19hID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudXJhbmdlX2IgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51ZWNfYiA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVyYW5nZV9jID0KKwkJCQlWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudWVjX2MgPQorCQkJCVZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51ZWNfZCA9CisJCQkJVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ubXR1ID0KKwkJCQlWWEdFX0hXX1ZQQVRIX1VTRV9GTEFTSF9ERUZBVUxUX0lOSVRJQUxfTVRVOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ycGFfc3RyaXBfdmxhbl90YWcgPQorCQkJVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfVVNFX0ZMQVNIX0RFRkFVTFQ7CisJfQorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfaHdfbGVnYWN5X3N3YXBwZXJfc2V0IC0gU2V0IHRoZSBzd2FwcGVyIGJpdHMgZm9yIHRoZSBsZWdhY3kgc2VjaW9uLgorICogU2V0IHRoZSBzd2FwcGVyIGJpdHMgYXBwcm9wcmlhdGVseSBmb3IgdGhlIGxhZ2FjeSBzZWN0aW9uLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfbGVnYWN5X3N3YXBwZXJfc2V0KHN0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcgX19pb21lbSAqbGVnYWN5X3JlZykKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJdmFsNjQgPSByZWFkcSgmbGVnYWN5X3JlZy0+dG9jX3N3YXBwZXJfZmIpOworCisJd21iKCk7CisKKwlzd2l0Y2ggKHZhbDY0KSB7CisKKwljYXNlIFZYR0VfSFdfU1dBUFBFUl9JTklUSUFMX1ZBTFVFOgorCQlyZXR1cm4gc3RhdHVzOworCisJY2FzZSBWWEdFX0hXX1NXQVBQRVJfQllURV9TV0FQUEVEX0JJVF9GTElQUEVEOgorCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1JFQURfQllURV9TV0FQX0VOQUJMRSwKKwkJCSZsZWdhY3lfcmVnLT5waWZtX3JkX3N3YXBfZW4pOworCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1JFQURfQklUX0ZMQVBfRU5BQkxFLAorCQkJJmxlZ2FjeV9yZWctPnBpZm1fcmRfZmxpcF9lbik7CisJCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfV1JJVEVfQllURV9TV0FQX0VOQUJMRSwKKwkJCSZsZWdhY3lfcmVnLT5waWZtX3dyX3N3YXBfZW4pOworCQl3cml0ZXEoVlhHRV9IV19TV0FQUEVSX1dSSVRFX0JJVF9GTEFQX0VOQUJMRSwKKwkJCSZsZWdhY3lfcmVnLT5waWZtX3dyX2ZsaXBfZW4pOworCQlicmVhazsKKworCWNhc2UgVlhHRV9IV19TV0FQUEVSX0JZVEVfU1dBUFBFRDoKKwkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9SRUFEX0JZVEVfU1dBUF9FTkFCTEUsCisJCQkmbGVnYWN5X3JlZy0+cGlmbV9yZF9zd2FwX2VuKTsKKwkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9XUklURV9CWVRFX1NXQVBfRU5BQkxFLAorCQkJJmxlZ2FjeV9yZWctPnBpZm1fd3Jfc3dhcF9lbik7CisJCWJyZWFrOworCisJY2FzZSBWWEdFX0hXX1NXQVBQRVJfQklUX0ZMSVBQRUQ6CisJCXdyaXRlcShWWEdFX0hXX1NXQVBQRVJfUkVBRF9CSVRfRkxBUF9FTkFCTEUsCisJCQkmbGVnYWN5X3JlZy0+cGlmbV9yZF9mbGlwX2VuKTsKKwkJd3JpdGVxKFZYR0VfSFdfU1dBUFBFUl9XUklURV9CSVRfRkxBUF9FTkFCTEUsCisJCQkmbGVnYWN5X3JlZy0+cGlmbV93cl9mbGlwX2VuKTsKKwkJYnJlYWs7CisJfQorCisJd21iKCk7CisKKwl2YWw2NCA9IHJlYWRxKCZsZWdhY3lfcmVnLT50b2Nfc3dhcHBlcl9mYik7CisKKwlpZiAodmFsNjQgIT0gVlhHRV9IV19TV0FQUEVSX0lOSVRJQUxfVkFMVUUpCisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1NXQVBQRVJfQ1RSTDsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfc3dhcHBlcl9zZXQgLSBTZXQgdGhlIHN3YXBwZXIgYml0cyBmb3IgdGhlIHZwYXRoLgorICogU2V0IHRoZSBzd2FwcGVyIGJpdHMgYXBwcm9wcmlhdGVseSBmb3IgdGhlIHZwYXRoLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfc3dhcHBlcl9zZXQoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZykKK3sKKyNpZm5kZWYgX19CSUdfRU5ESUFOCisJdTY0IHZhbDY0OworCisJdmFsNjQgPSByZWFkcSgmdnBhdGhfcmVnLT52cGF0aF9nZW5lcmFsX2NmZzEpOworCXdtYigpOworCXZhbDY0IHw9IFZYR0VfSFdfVlBBVEhfR0VORVJBTF9DRkcxX0NUTF9CWVRFX1NXQVBFTjsKKwl3cml0ZXEodmFsNjQsICZ2cGF0aF9yZWctPnZwYXRoX2dlbmVyYWxfY2ZnMSk7CisJd21iKCk7CisjZW5kaWYKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9fdnhnZV9od19rZGZjX3N3YXBwZXJfc2V0IC0gU2V0IHRoZSBzd2FwcGVyIGJpdHMgZm9yIHRoZSBrZGZjLgorICogU2V0IHRoZSBzd2FwcGVyIGJpdHMgYXBwcm9wcmlhdGVseSBmb3IgdGhlIHZwYXRoLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfa2RmY19zd2FwcGVyX3NldCgKKwlzdHJ1Y3QgdnhnZV9od19sZWdhY3lfcmVnIF9faW9tZW0gKmxlZ2FjeV9yZWcsCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZykKK3sKKwl1NjQgdmFsNjQ7CisKKwl2YWw2NCA9IHJlYWRxKCZsZWdhY3lfcmVnLT5waWZtX3dyX3N3YXBfZW4pOworCisJaWYgKHZhbDY0ID09IFZYR0VfSFdfU1dBUFBFUl9XUklURV9CWVRFX1NXQVBfRU5BQkxFKSB7CisJCXZhbDY0ID0gcmVhZHEoJnZwYXRoX3JlZy0+a2RmY2N0bF9jZmcwKTsKKwkJd21iKCk7CisKKwkJdmFsNjQgfD0gVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9TV0FQRU5fRklGTzAJfAorCQkJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9TV0FQRU5fRklGTzEJfAorCQkJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9TV0FQRU5fRklGTzI7CisKKwkJd3JpdGVxKHZhbDY0LCAmdnBhdGhfcmVnLT5rZGZjY3RsX2NmZzApOworCQl3bWIoKTsKKwl9CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIHZ4Z2VfaHdfbWdtdF9kZXZpY2VfY29uZmlnIC0gUmV0cmlldmUgZGV2aWNlIGNvbmZpZ3VyYXRpb24uCisgKiBHZXQgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIFBlcm1pdHMgdG8gcmV0cmlldmUgYXQgcnVuLXRpbWUgY29uZmlndXJhdGlvbgorICogdmFsdWVzIHRoYXQgd2VyZSB1c2VkIHRvIGluaXRpYWxpemUgYW5kIGNvbmZpZ3VyZSB0aGUgZGV2aWNlLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X21nbXRfZGV2aWNlX2NvbmZpZyhzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQkgICBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnICpkZXZfY29uZmlnLCBpbnQgc2l6ZSkKK3sKKworCWlmICgoaGxkZXYgPT0gTlVMTCkgfHwgKGhsZGV2LT5tYWdpYyAhPSBWWEdFX0hXX0RFVklDRV9NQUdJQykpCisJCXJldHVybiBWWEdFX0hXX0VSUl9JTlZBTElEX0RFVklDRTsKKworCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnKSkKKwkJcmV0dXJuIFZYR0VfSFdfRVJSX1ZFUlNJT05fQ09ORkxJQ1Q7CisKKwltZW1jcHkoZGV2X2NvbmZpZywgJmhsZGV2LT5jb25maWcsCisJCXNpemVvZihzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnKSk7CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIHZ4Z2VfaHdfbWdtdF9yZWdfcmVhZCAtIFJlYWQgVGl0YW4gcmVnaXN0ZXIuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfbWdtdF9yZWdfcmVhZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCSAgICAgIGVudW0gdnhnZV9od19tZ210X3JlZ190eXBlIHR5cGUsCisJCSAgICAgIHUzMiBpbmRleCwgdTMyIG9mZnNldCwgdTY0ICp2YWx1ZSkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAoKGhsZGV2ID09IE5VTEwpIHx8IChobGRldi0+bWFnaWMgIT0gVlhHRV9IV19ERVZJQ0VfTUFHSUMpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfREVWSUNFOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfbGVnYWN5OgorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQkqdmFsdWUgPSByZWFkcSgodm9pZCBfX2lvbWVtICopaGxkZXYtPmxlZ2FjeV9yZWcgKyBvZmZzZXQpOworCQlicmVhazsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV90b2M6CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdG9jX3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCSp2YWx1ZSA9IHJlYWRxKCh2b2lkIF9faW9tZW0gKilobGRldi0+dG9jX3JlZyArIG9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX2NvbW1vbjoKKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od19jb21tb25fcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJKnZhbHVlID0gcmVhZHEoKHZvaWQgX19pb21lbSAqKWhsZGV2LT5jb21tb25fcmVnICsgb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfbXJwY2ltOgorCQlpZiAoIShobGRldi0+YWNjZXNzX3JpZ2h0cyAmCisJCQlWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfTVJQQ0lNKSkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfUFJJVklMQUdFRF9PUEVBUkFUSU9OOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJKnZhbHVlID0gcmVhZHEoKHZvaWQgX19pb21lbSAqKWhsZGV2LT5tcnBjaW1fcmVnICsgb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfc3JwY2ltOgorCQlpZiAoIShobGRldi0+YWNjZXNzX3JpZ2h0cyAmCisJCQlWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfU1JQQ0lNKSkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfUFJJVklMQUdFRF9PUEVBUkFUSU9OOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGluZGV4ID4gVlhHRV9IV19USVRBTl9TUlBDSU1fUkVHX1NQQUNFUyAtIDEpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSU5ERVg7CisJCQlicmVhazsKKwkJfQorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3NycGNpbV9yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQkqdmFsdWUgPSByZWFkcSgodm9pZCBfX2lvbWVtICopaGxkZXYtPnNycGNpbV9yZWdbaW5kZXhdICsKKwkJCQlvZmZzZXQpOworCQlicmVhazsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV92cG1nbXQ6CisJCWlmICgoaW5kZXggPiBWWEdFX0hXX1RJVEFOX1ZQTUdNVF9SRUdfU1BBQ0VTIC0gMSkgfHwKKwkJCSghKGhsZGV2LT52cGF0aF9hc3NpZ25tZW50cyAmIHZ4Z2VfbUJJVChpbmRleCkpKSkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9JTkRFWDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBtZ210X3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCSp2YWx1ZSA9IHJlYWRxKCh2b2lkIF9faW9tZW0gKilobGRldi0+dnBtZ210X3JlZ1tpbmRleF0gKworCQkJCW9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX3ZwYXRoOgorCQlpZiAoKGluZGV4ID4gVlhHRV9IV19USVRBTl9WUEFUSF9SRUdfU1BBQ0VTIC0gMSkgfHwKKwkJCSghKGhsZGV2LT52cGF0aF9hc3NpZ25tZW50cyAmIHZ4Z2VfbUJJVChpbmRleCkpKSkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9JTkRFWDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChpbmRleCA+IFZYR0VfSFdfVElUQU5fVlBBVEhfUkVHX1NQQUNFUyAtIDEpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSU5ERVg7CisJCQlicmVhazsKKwkJfQorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCSp2YWx1ZSA9IHJlYWRxKCh2b2lkIF9faW9tZW0gKilobGRldi0+dnBhdGhfcmVnW2luZGV4XSArCisJCQkJb2Zmc2V0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9UWVBFOworCQlicmVhazsKKwl9CisKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfbWdtdF9yZWdfV3JpdGUgLSBXcml0ZSBUaXRhbiByZWdpc3Rlci4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19tZ210X3JlZ193cml0ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCSAgICAgIGVudW0gdnhnZV9od19tZ210X3JlZ190eXBlIHR5cGUsCisJCSAgICAgIHUzMiBpbmRleCwgdTMyIG9mZnNldCwgdTY0IHZhbHVlKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICgoaGxkZXYgPT0gTlVMTCkgfHwgKGhsZGV2LT5tYWdpYyAhPSBWWEdFX0hXX0RFVklDRV9NQUdJQykpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9ERVZJQ0U7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9sZWdhY3k6CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfbGVnYWN5X3JlZykgLSA4KSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX09GRlNFVDsKKwkJCWJyZWFrOworCQl9CisJCXdyaXRlcSh2YWx1ZSwgKHZvaWQgX19pb21lbSAqKWhsZGV2LT5sZWdhY3lfcmVnICsgb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfdG9jOgorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3RvY19yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQl3cml0ZXEodmFsdWUsICh2b2lkIF9faW9tZW0gKilobGRldi0+dG9jX3JlZyArIG9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX2NvbW1vbjoKKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od19jb21tb25fcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJd3JpdGVxKHZhbHVlLCAodm9pZCBfX2lvbWVtICopaGxkZXYtPmNvbW1vbl9yZWcgKyBvZmZzZXQpOworCQlicmVhazsKKwljYXNlIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9tcnBjaW06CisJCWlmICghKGhsZGV2LT5hY2Nlc3NfcmlnaHRzICYKKwkJCVZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9NUlBDSU0pKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9QUklWSUxBR0VEX09QRUFSQVRJT047CisJCQlicmVhazsKKwkJfQorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQl3cml0ZXEodmFsdWUsICh2b2lkIF9faW9tZW0gKilobGRldi0+bXJwY2ltX3JlZyArIG9mZnNldCk7CisJCWJyZWFrOworCWNhc2UgdnhnZV9od19tZ210X3JlZ190eXBlX3NycGNpbToKKwkJaWYgKCEoaGxkZXYtPmFjY2Vzc19yaWdodHMgJgorCQkJVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX1NSUENJTSkpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1BSSVZJTEFHRURfT1BFQVJBVElPTjsKKwkJCWJyZWFrOworCQl9CisJCWlmIChpbmRleCA+IFZYR0VfSFdfVElUQU5fU1JQQ0lNX1JFR19TUEFDRVMgLSAxKSB7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0lOREVYOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG9mZnNldCA+IHNpemVvZihzdHJ1Y3QgdnhnZV9od19zcnBjaW1fcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJd3JpdGVxKHZhbHVlLCAodm9pZCBfX2lvbWVtICopaGxkZXYtPnNycGNpbV9yZWdbaW5kZXhdICsKKwkJCW9mZnNldCk7CisKKwkJYnJlYWs7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfdnBtZ210OgorCQlpZiAoKGluZGV4ID4gVlhHRV9IV19USVRBTl9WUE1HTVRfUkVHX1NQQUNFUyAtIDEpIHx8CisJCQkoIShobGRldi0+dnBhdGhfYXNzaWdubWVudHMgJiB2eGdlX21CSVQoaW5kZXgpKSkpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSU5ERVg7CisJCQlicmVhazsKKwkJfQorCQlpZiAob2Zmc2V0ID4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwbWdtdF9yZWcpIC0gOCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQ7CisJCQlicmVhazsKKwkJfQorCQl3cml0ZXEodmFsdWUsICh2b2lkIF9faW9tZW0gKilobGRldi0+dnBtZ210X3JlZ1tpbmRleF0gKworCQkJb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSB2eGdlX2h3X21nbXRfcmVnX3R5cGVfdnBhdGg6CisJCWlmICgoaW5kZXggPiBWWEdFX0hXX1RJVEFOX1ZQQVRIX1JFR19TUEFDRVMtMSkgfHwKKwkJCSghKGhsZGV2LT52cGF0aF9hc3NpZ25tZW50cyAmIHZ4Z2VfbUJJVChpbmRleCkpKSkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9JTkRFWDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChvZmZzZXQgPiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnKSAtIDgpIHsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwkJd3JpdGVxKHZhbHVlLCAodm9pZCBfX2lvbWVtICopaGxkZXYtPnZwYXRoX3JlZ1tpbmRleF0gKworCQkJb2Zmc2V0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9UWVBFOworCQlicmVhazsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZmlmb19tZW1wb29sX2l0ZW1fYWxsb2MgLSBBbGxvY2F0ZSBMaXN0IGJsb2NrcyBmb3IgVHhECisgKiBsaXN0IGNhbGxiYWNrCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxiYWNrIHBhc3NlZCB0byBfX3Z4Z2VfaHdfbWVtcG9vbF9jcmVhdGUgdG8gY3JlYXRlIG1lbW9yeQorICogcG9vbCBmb3IgVHhEIGxpc3QKKyAqLworc3RhdGljIHZvaWQKK19fdnhnZV9od19maWZvX21lbXBvb2xfaXRlbV9hbGxvYygKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sICptZW1wb29saCwKKwl1MzIgbWVtYmxvY2tfaW5kZXgsIHN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICpkbWFfb2JqZWN0LAorCXUzMiBpbmRleCwgdTMyIGlzX2xhc3QpCit7CisJdTMyIG1lbWJsb2NrX2l0ZW1faWR4OworCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYgKnR4ZGxfcHJpdjsKKwlzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqdHhkcCA9CisJCShzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqKW1lbXBvb2xoLT5pdGVtc19hcnJbaW5kZXhdOworCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbyA9CisJCQkoc3RydWN0IF9fdnhnZV9od19maWZvICopbWVtcG9vbGgtPnVzZXJkYXRhOworCXZvaWQgKm1lbWJsb2NrID0gbWVtcG9vbGgtPm1lbWJsb2Nrc19hcnJbbWVtYmxvY2tfaW5kZXhdOworCisJdnhnZV9hc3NlcnQodHhkcCk7CisKKwl0eGRwLT5ob3N0X2NvbnRyb2wgPSAodTY0KSAoc2l6ZV90KQorCV9fdnhnZV9od19tZW1wb29sX2l0ZW1fcHJpdihtZW1wb29saCwgbWVtYmxvY2tfaW5kZXgsIHR4ZHAsCisJCQkJCSZtZW1ibG9ja19pdGVtX2lkeCk7CisKKwl0eGRsX3ByaXYgPSBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYoZmlmbywgdHhkcCk7CisKKwl2eGdlX2Fzc2VydCh0eGRsX3ByaXYpOworCisJZmlmby0+Y2hhbm5lbC5yZXNlcnZlX2FycltmaWZvLT5jaGFubmVsLnJlc2VydmVfcHRyIC0gMSAtIGluZGV4XSA9IHR4ZHA7CisKKwkvKiBwcmUtZm9ybWF0IEhXJ3MgVHhETCdzIHByaXZhdGUgKi8KKwl0eGRsX3ByaXYtPmRtYV9vZmZzZXQgPSAoY2hhciAqKXR4ZHAgLSAoY2hhciAqKW1lbWJsb2NrOworCXR4ZGxfcHJpdi0+ZG1hX2FkZHIgPSBkbWFfb2JqZWN0LT5hZGRyICsgdHhkbF9wcml2LT5kbWFfb2Zmc2V0OworCXR4ZGxfcHJpdi0+ZG1hX2hhbmRsZSA9IGRtYV9vYmplY3QtPmhhbmRsZTsKKwl0eGRsX3ByaXYtPm1lbWJsb2NrICAgPSBtZW1ibG9jazsKKwl0eGRsX3ByaXYtPmZpcnN0X3R4ZHAgPSB0eGRwOworCXR4ZGxfcHJpdi0+bmV4dF90eGRsX3ByaXYgPSBOVUxMOworCXR4ZGxfcHJpdi0+YWxsb2NfZnJhZ3MgPSAwOworCisJcmV0dXJuOworfQorCisvKgorICogX192eGdlX2h3X2ZpZm9fY3JlYXRlIC0gQ3JlYXRlIGEgRklGTworICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIEZJRk8gYW5kIGluaXRpYWxpemVzIGl0LgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZmlmb19jcmVhdGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLAorCQkgICAgICBzdHJ1Y3QgdnhnZV9od19maWZvX2F0dHIgKmF0dHIpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbzsKKwlzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZyAqY29uZmlnOworCXUzMiB0eGRsX3NpemUsIHR4ZGxfcGVyX21lbWJsb2NrOworCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfY2JzIGZpZm9fbXBfY2FsbGJhY2s7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisKKwlpZiAoKHZwID09IE5VTEwpIHx8IChhdHRyID09IE5VTEwpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCXZwYXRoID0gdnAtPnZwYXRoOworCWNvbmZpZyA9ICZ2cGF0aC0+aGxkZXYtPmNvbmZpZy52cF9jb25maWdbdnBhdGgtPnZwX2lkXS5maWZvOworCisJdHhkbF9zaXplID0gY29uZmlnLT5tYXhfZnJhZ3MgKiBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQpOworCisJdHhkbF9wZXJfbWVtYmxvY2sgPSBjb25maWctPm1lbWJsb2NrX3NpemUgLyB0eGRsX3NpemU7CisKKwlmaWZvID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqKV9fdnhnZV9od19jaGFubmVsX2FsbG9jYXRlKHZwLAorCQkJCQlWWEdFX0hXX0NIQU5ORUxfVFlQRV9GSUZPLAorCQkJCQljb25maWctPmZpZm9fYmxvY2tzICogdHhkbF9wZXJfbWVtYmxvY2ssCisJCQkJCWF0dHItPnBlcl90eGRsX3NwYWNlLCBhdHRyLT51c2VyZGF0YSk7CisKKwlpZiAoZmlmbyA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2cGF0aC0+Zmlmb2ggPSBmaWZvOworCWZpZm8tPm5vZmxfZGIgPSB2cGF0aC0+bm9mbF9kYjsKKworCWZpZm8tPnZwX2lkID0gdnBhdGgtPnZwX2lkOworCWZpZm8tPnZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisJZmlmby0+c3RhdHMgPSAmdnBhdGgtPnN3X3N0YXRzLT5maWZvX3N0YXRzOworCisJZmlmby0+Y29uZmlnID0gY29uZmlnOworCisJLyogYXBwbHkgImludGVycnVwdHMgcGVyIHR4ZGwiIGF0dHJpYnV0ZSAqLworCWZpZm8tPmludGVycnVwdF90eXBlID0gVlhHRV9IV19GSUZPX1RYRF9JTlRfVFlQRV9VVElMWjsKKworCWlmIChmaWZvLT5jb25maWctPmludHIpCisJCWZpZm8tPmludGVycnVwdF90eXBlID0gVlhHRV9IV19GSUZPX1RYRF9JTlRfVFlQRV9QRVJfTElTVDsKKworCWZpZm8tPm5vX3Nub29wX2JpdHMgPSBjb25maWctPm5vX3Nub29wX2JpdHM7CisKKwkvKgorCSAqIEZJRk8gbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3k6CisJICoKKwkgKiBUeERMIHNwbGl0IGludG8gdGhyZWUgaW5kZXBlbmRlbnQgcGFydHM6CisJICoJLSBzZXQgb2YgVHhEJ3MKKwkgKgktIFR4RCBIVyBwcml2YXRlIHBhcnQKKwkgKgktIGRyaXZlciBwcml2YXRlIHBhcnQKKwkgKgorCSAqIEFkYXB0YXRpdmUgbWVtb3J5IGFsbG9jYXRpb24gdXNlZC4gaS5lLiBNZW1vcnkgYWxsb2NhdGVkIG9uCisJICogZGVtYW5kIHdpdGggdGhlIHNpemUgd2hpY2ggd2lsbCBmaXQgaW50byBvbmUgbWVtb3J5IGJsb2NrLgorCSAqIE9uZSBtZW1vcnkgYmxvY2sgbWF5IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBUeERMLgorCSAqCisJICogRHVyaW5nICJyZXNlcnZlIiBvcGVyYXRpb25zIG1vcmUgbWVtb3J5IGNhbiBiZSBhbGxvY2F0ZWQgb24gZGVtYW5kCisJICogZm9yIGV4YW1wbGUgZHVlIHRvIEZJRk8gZnVsbCBjb25kaXRpb24uCisJICoKKwkgKiBQb29sIG9mIG1lbW9yeSBtZW1ibG9ja3MgbmV2ZXIgc2hyaW5rcyBleGNlcHQgaW4gX192eGdlX2h3X2ZpZm9fY2xvc2UKKwkgKiByb3V0aW5lIHdoaWNoIHdpbGwgZXNzZW50aWFsbHkgc3RvcCB0aGUgY2hhbm5lbCBhbmQgZnJlZSByZXNvdXJjZXMuCisJICovCisKKwkvKiBUeERMIGNvbW1vbiBwcml2YXRlIHNpemUgPT0gVHhETCBwcml2YXRlICArICBkcml2ZXIgcHJpdmF0ZSAqLworCWZpZm8tPnByaXZfc2l6ZSA9CisJCXNpemVvZihzdHJ1Y3QgX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2KSArIGF0dHItPnBlcl90eGRsX3NwYWNlOworCWZpZm8tPnByaXZfc2l6ZSA9ICgoZmlmby0+cHJpdl9zaXplICArICBWWEdFX0NBQ0hFX0xJTkVfU0laRSAtIDEpIC8KKwkJCVZYR0VfQ0FDSEVfTElORV9TSVpFKSAqIFZYR0VfQ0FDSEVfTElORV9TSVpFOworCisJZmlmby0+cGVyX3R4ZGxfc3BhY2UgPSBhdHRyLT5wZXJfdHhkbF9zcGFjZTsKKworCS8qIHJlY29tcHV0ZSB0eGRsIHNpemUgdG8gYmUgY2FjaGVsaW5lIGFsaWduZWQgKi8KKwlmaWZvLT50eGRsX3NpemUgPSB0eGRsX3NpemU7CisJZmlmby0+dHhkbF9wZXJfbWVtYmxvY2sgPSB0eGRsX3Blcl9tZW1ibG9jazsKKworCWZpZm8tPnR4ZGxfdGVybSA9IGF0dHItPnR4ZGxfdGVybTsKKwlmaWZvLT5jYWxsYmFjayA9IGF0dHItPmNhbGxiYWNrOworCisJaWYgKGZpZm8tPnR4ZGxfcGVyX21lbWJsb2NrID09IDApIHsKKwkJX192eGdlX2h3X2ZpZm9fZGVsZXRlKHZwKTsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9CTE9DS19TSVpFOworCQlnb3RvIGV4aXQ7CisJfQorCisJZmlmb19tcF9jYWxsYmFjay5pdGVtX2Z1bmNfYWxsb2MgPSBfX3Z4Z2VfaHdfZmlmb19tZW1wb29sX2l0ZW1fYWxsb2M7CisKKwlmaWZvLT5tZW1wb29sID0KKwkJX192eGdlX2h3X21lbXBvb2xfY3JlYXRlKHZwYXRoLT5obGRldiwKKwkJCWZpZm8tPmNvbmZpZy0+bWVtYmxvY2tfc2l6ZSwKKwkJCWZpZm8tPnR4ZGxfc2l6ZSwKKwkJCWZpZm8tPnByaXZfc2l6ZSwKKwkJCShmaWZvLT5jb25maWctPmZpZm9fYmxvY2tzICogZmlmby0+dHhkbF9wZXJfbWVtYmxvY2spLAorCQkJKGZpZm8tPmNvbmZpZy0+Zmlmb19ibG9ja3MgKiBmaWZvLT50eGRsX3Blcl9tZW1ibG9jayksCisJCQkmZmlmb19tcF9jYWxsYmFjaywKKwkJCWZpZm8pOworCisJaWYgKGZpZm8tPm1lbXBvb2wgPT0gTlVMTCkgeworCQlfX3Z4Z2VfaHdfZmlmb19kZWxldGUodnApOworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X2NoYW5uZWxfaW5pdGlhbGl6ZSgmZmlmby0+Y2hhbm5lbCk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCV9fdnhnZV9od19maWZvX2RlbGV0ZSh2cCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2eGdlX2Fzc2VydChmaWZvLT5jaGFubmVsLnJlc2VydmVfcHRyKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od19maWZvX2Fib3J0IC0gUmV0dXJucyB0aGUgVHhECisgKiBUaGlzIGZ1bmN0aW9uIHRlcm1pbmF0ZXMgdGhlIFR4RHMgb2YgZmlmbworICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fdnhnZV9od19maWZvX2Fib3J0KHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbykKK3sKKwl2b2lkICp0eGRsaDsKKworCWZvciAoOzspIHsKKwkJdnhnZV9od19jaGFubmVsX2R0cl90cnlfY29tcGxldGUoJmZpZm8tPmNoYW5uZWwsICZ0eGRsaCk7CisKKwkJaWYgKHR4ZGxoID09IE5VTEwpCisJCQlicmVhazsKKworCQl2eGdlX2h3X2NoYW5uZWxfZHRyX2NvbXBsZXRlKCZmaWZvLT5jaGFubmVsKTsKKworCQlpZiAoZmlmby0+dHhkbF90ZXJtKSB7CisJCQlmaWZvLT50eGRsX3Rlcm0odHhkbGgsCisJCQlWWEdFX0hXX1RYRExfU1RBVEVfUE9TVEVELAorCQkJZmlmby0+Y2hhbm5lbC51c2VyZGF0YSk7CisJCX0KKworCQl2eGdlX2h3X2NoYW5uZWxfZHRyX2ZyZWUoJmZpZm8tPmNoYW5uZWwsIHR4ZGxoKTsKKwl9CisKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIF9fdnhnZV9od19maWZvX3Jlc2V0IC0gUmVzZXRzIHRoZSBmaWZvCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgZmlmbyBkdXJpbmcgdnBhdGggcmVzZXQgb3BlcmF0aW9uCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X2ZpZm9fcmVzZXQoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCV9fdnhnZV9od19maWZvX2Fib3J0KGZpZm8pOworCXN0YXR1cyA9IF9fdnhnZV9od19jaGFubmVsX3Jlc2V0KCZmaWZvLT5jaGFubmVsKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZmlmb19kZWxldGUgLSBSZW1vdmVzIHRoZSBGSUZPCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWV1cCB0aGUgbWVtb3J5IHBvb2wgYW5kIHJlbW92ZXMgdGhlIEZJRk8KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyBfX3Z4Z2VfaHdfZmlmb19kZWxldGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbyA9IHZwLT52cGF0aC0+Zmlmb2g7CisKKwlfX3Z4Z2VfaHdfZmlmb19hYm9ydChmaWZvKTsKKworCWlmIChmaWZvLT5tZW1wb29sKQorCQlfX3Z4Z2VfaHdfbWVtcG9vbF9kZXN0cm95KGZpZm8tPm1lbXBvb2wpOworCisJdnAtPnZwYXRoLT5maWZvaCA9IE5VTEw7CisKKwlfX3Z4Z2VfaHdfY2hhbm5lbF9mcmVlKCZmaWZvLT5jaGFubmVsKTsKKworCXJldHVybiBWWEdFX0hXX09LOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3BjaV9yZWFkIC0gUmVhZCB0aGUgY29udGVudCBvZiBnaXZlbiBhZGRyZXNzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gcGNpIGNvbmZpZyBzcGFjZS4KKyAqIFJlYWQgZnJvbSB0aGUgdnBhdGggcGNpIGNvbmZpZyBzcGFjZS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3BjaV9yZWFkKHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoLAorCQkJIHUzMiBwaHlfZnVuY18wLCB1MzIgb2Zmc2V0LCB1MzIgKnZhbCkKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCisJdmFsNjQgPQlWWEdFX0hXX1BDSV9DT05GSUdfQUNDRVNTX0NGRzFfQUREUkVTUyhvZmZzZXQpOworCisJaWYgKHBoeV9mdW5jXzApCisJCXZhbDY0IHw9IFZYR0VfSFdfUENJX0NPTkZJR19BQ0NFU1NfQ0ZHMV9TRUxfRlVOQzA7CisKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnBjaV9jb25maWdfYWNjZXNzX2NmZzEpOworCXdtYigpOworCXdyaXRlcShWWEdFX0hXX1BDSV9DT05GSUdfQUNDRVNTX0NGRzJfUkVRLAorCQkJJnZwX3JlZy0+cGNpX2NvbmZpZ19hY2Nlc3NfY2ZnMik7CisJd21iKCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfZGV2aWNlX3JlZ2lzdGVyX3BvbGwoCisJCQkmdnBfcmVnLT5wY2lfY29uZmlnX2FjY2Vzc19jZmcyLAorCQkJVlhHRV9IV19JTlRSX01BU0tfQUxMLCBWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnBjaV9jb25maWdfYWNjZXNzX3N0YXR1cyk7CisKKwlpZiAodmFsNjQgJiBWWEdFX0hXX1BDSV9DT05GSUdfQUNDRVNTX1NUQVRVU19BQ0NFU1NfRVJSKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwkJKnZhbCA9IDA7CisJfSBlbHNlCisJCSp2YWwgPSAodTMyKXZ4Z2VfYlZBTG4odmFsNjQsIDMyLCAzMik7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfZnVuY19pZF9nZXQgLSBHZXQgdGhlIGZ1bmN0aW9uIGlkIG9mIHRoZSB2cGF0aC4KKyAqIFJldHVybnMgdGhlIGZ1bmN0aW9uIG51bWJlciBvZiB0aGUgdnBhdGguCisgKi8KK3UzMgorX192eGdlX2h3X3ZwYXRoX2Z1bmNfaWRfZ2V0KHUzMiB2cF9pZCwKKwlzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnIF9faW9tZW0gKnZwbWdtdF9yZWcpCit7CisJdTY0IHZhbDY0OworCisJdmFsNjQgPSByZWFkcSgmdnBtZ210X3JlZy0+dnBhdGhfdG9fZnVuY19tYXBfY2ZnMSk7CisKKwlyZXR1cm4KKwkgKHUzMilWWEdFX0hXX1ZQQVRIX1RPX0ZVTkNfTUFQX0NGRzFfR0VUX1ZQQVRIX1RPX0ZVTkNfTUFQX0NGRzEodmFsNjQpOworfQorCisvKgorICogX192eGdlX2h3X3JlYWRfcnRzX2RzIC0gUHJvZ3JhbSBSVFMgc3RlZXJpbmcgY3JpdGllcmlhCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX192eGdlX2h3X3JlYWRfcnRzX2RzKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcsCisJCSAgICAgIHU2NCBkdGFfc3RydWN0X3NlbCkKK3sKKwl3cml0ZXEoMCwgJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKKwl3bWIoKTsKKwl3cml0ZXEoZHRhX3N0cnVjdF9zZWwsICZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOworCXdyaXRlcSgwLCAmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGExKTsKKwl3bWIoKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9jYXJkX2luZm9fZ2V0IC0gR2V0IHRoZSBzZXJpYWwgbnVtYmVycywKKyAqIHBhcnQgbnVtYmVyIGFuZCBwcm9kdWN0IGRlc2NyaXB0aW9uLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfY2FyZF9pbmZvX2dldCgKKwl1MzIgdnBfaWQsCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZywKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbyAqaHdfaW5mbykKK3sKKwl1MzIgaSwgajsKKwl1NjQgdmFsNjQ7CisJdTY0IGRhdGExID0gMFVMTDsKKwl1NjQgZGF0YTIgPSAwVUxMOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwl1OCAqc2VyaWFsX251bWJlciA9IGh3X2luZm8tPnNlcmlhbF9udW1iZXI7CisJdTggKnBhcnRfbnVtYmVyID0gaHdfaW5mby0+cGFydF9udW1iZXI7CisJdTggKnByb2R1Y3RfZGVzYyA9IGh3X2luZm8tPnByb2R1Y3RfZGVzYzsKKworCV9fdnhnZV9od19yZWFkX3J0c19kcyh2cGF0aF9yZWcsCisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fU0VSSUFMX05VTUJFUik7CisKKwl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTigKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9SRUFEX01FTU9fRU5UUlkpIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8pIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKDApOworCisJc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKKwkJCQkmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCisJCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAorCQkJCVZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCXJldHVybiBzdGF0dXM7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7CisKKwlpZiAodmFsNjQgJiBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMpIHsKKwkJZGF0YTEgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKKwkJKCh1NjQgKilzZXJpYWxfbnVtYmVyKVswXSA9IGJlNjRfdG9fY3B1KGRhdGExKTsKKworCQlkYXRhMiA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOworCQkoKHU2NCAqKXNlcmlhbF9udW1iZXIpWzFdID0gYmU2NF90b19jcHUoZGF0YTIpOworCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCX0gZWxzZQorCQkqc2VyaWFsX251bWJlciA9IDA7CisKKwlfX3Z4Z2VfaHdfcmVhZF9ydHNfZHModnBhdGhfcmVnLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9QQVJUX05VTUJFUik7CisKKwl2YWw2NCA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTigKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9SRUFEX01FTU9fRU5UUlkpIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8pIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKDApOworCisJc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKKwkJCQkmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCisJCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAorCQkJCVZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCXJldHVybiBzdGF0dXM7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7CisKKwlpZiAodmFsNjQgJiBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMpIHsKKworCQlkYXRhMSA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOworCQkoKHU2NCAqKXBhcnRfbnVtYmVyKVswXSA9IGJlNjRfdG9fY3B1KGRhdGExKTsKKworCQlkYXRhMiA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOworCQkoKHU2NCAqKXBhcnRfbnVtYmVyKVsxXSA9IGJlNjRfdG9fY3B1KGRhdGEyKTsKKworCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCisJfSBlbHNlCisJCSpwYXJ0X251bWJlciA9IDA7CisKKwlqID0gMDsKKworCWZvciAoaSA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fREVTQ18wOworCSAgICAgaSA8PSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX0RFU0NfMzsgaSsrKSB7CisKKwkJX192eGdlX2h3X3JlYWRfcnRzX2RzKHZwYXRoX3JlZywgaSk7CisKKwkJdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fUkVBRF9NRU1PX0VOVFJZKSB8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUwoCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfRldfTUVNTykgfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX09GRlNFVCgwKTsKKworCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAorCQkJCSZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKKwkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCisJCQkJVlhHRV9IV19ERUZfREVWSUNFX1BPTExfTUlMTElTKTsKKworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlyZXR1cm4gc3RhdHVzOworCisJCXZhbDY0ID0gcmVhZHEoJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKKworCQlpZiAodmFsNjQgJiBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMpIHsKKworCQkJZGF0YTEgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKKwkJCSgodTY0ICopcHJvZHVjdF9kZXNjKVtqKytdID0gYmU2NF90b19jcHUoZGF0YTEpOworCisJCQlkYXRhMiA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOworCQkJKCh1NjQgKilwcm9kdWN0X2Rlc2MpW2orK10gPSBiZTY0X3RvX2NwdShkYXRhMik7CisKKwkJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisJCX0gZWxzZQorCQkJKnByb2R1Y3RfZGVzYyA9IDA7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9md192ZXJfZ2V0IC0gR2V0IHRoZSBmdyB2ZXJzaW9uCisgKiBSZXR1cm5zIEZXIFZlcnNpb24KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX2Z3X3Zlcl9nZXQoCisJdTMyIHZwX2lkLAorCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcsCisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8gKmh3X2luZm8pCit7CisJdTY0IHZhbDY0OworCXU2NCBkYXRhMSA9IDBVTEw7CisJdTY0IGRhdGEyID0gMFVMTDsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfdmVyc2lvbiAqZndfdmVyc2lvbiA9ICZod19pbmZvLT5md192ZXJzaW9uOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9kYXRlICpmd19kYXRlID0gJmh3X2luZm8tPmZ3X2RhdGU7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3ZlcnNpb24gKmZsYXNoX3ZlcnNpb24gPSAmaHdfaW5mby0+Zmxhc2hfdmVyc2lvbjsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfZGF0ZSAqZmxhc2hfZGF0ZSA9ICZod19pbmZvLT5mbGFzaF9kYXRlOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCXZhbDY0ID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OKAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fUkVBRF9FTlRSWSkgfAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUwoCisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9GV19NRU1PKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX09GRlNFVCgwKTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodmFsNjQsCisJCQkJJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsLAorCQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSwKKwkJCQlWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7CisKKwlpZiAodmFsNjQgJiBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMpIHsKKworCQlkYXRhMSA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOworCQlkYXRhMiA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOworCisJCWZ3X2RhdGUtPmRheSA9CisJCQkodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX0RBWSgKKwkJCQkJCWRhdGExKTsKKwkJZndfZGF0ZS0+bW9udGggPQorCQkJKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9NT05USCgKKwkJCQkJCWRhdGExKTsKKwkJZndfZGF0ZS0+eWVhciA9CisJCQkodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX1lFQVIoCisJCQkJCQlkYXRhMSk7CisKKwkJc25wcmludGYoZndfZGF0ZS0+ZGF0ZSwgVlhHRV9IV19GV19TVFJMRU4sICIlMi4yZC8lMi4yZC8lNC40ZCIsCisJCQlmd19kYXRlLT5tb250aCwgZndfZGF0ZS0+ZGF5LCBmd19kYXRlLT55ZWFyKTsKKworCQlmd192ZXJzaW9uLT5tYWpvciA9CisJCSAgICAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX01BSk9SKGRhdGExKTsKKwkJZndfdmVyc2lvbi0+bWlub3IgPQorCQkgICAgKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9NSU5PUihkYXRhMSk7CisJCWZ3X3ZlcnNpb24tPmJ1aWxkID0KKwkJICAgICh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9GV19WRVJfQlVJTEQoZGF0YTEpOworCisJCXNucHJpbnRmKGZ3X3ZlcnNpb24tPnZlcnNpb24sIFZYR0VfSFdfRldfU1RSTEVOLCAiJWQuJWQuJWQiLAorCQkgICAgZndfdmVyc2lvbi0+bWFqb3IsIGZ3X3ZlcnNpb24tPm1pbm9yLCBmd192ZXJzaW9uLT5idWlsZCk7CisKKwkJZmxhc2hfZGF0ZS0+ZGF5ID0KKwkJICAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX0RBWShkYXRhMik7CisJCWZsYXNoX2RhdGUtPm1vbnRoID0KKwkJICh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfTU9OVEgoZGF0YTIpOworCQlmbGFzaF9kYXRlLT55ZWFyID0KKwkJICh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfWUVBUihkYXRhMik7CisKKwkJc25wcmludGYoZmxhc2hfZGF0ZS0+ZGF0ZSwgVlhHRV9IV19GV19TVFJMRU4sCisJCQkiJTIuMmQvJTIuMmQvJTQuNGQiLAorCQkJZmxhc2hfZGF0ZS0+bW9udGgsIGZsYXNoX2RhdGUtPmRheSwgZmxhc2hfZGF0ZS0+eWVhcik7CisKKwkJZmxhc2hfdmVyc2lvbi0+bWFqb3IgPQorCQkgKHUzMilWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9NQUpPUihkYXRhMik7CisJCWZsYXNoX3ZlcnNpb24tPm1pbm9yID0KKwkJICh1MzIpVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfTUlOT1IoZGF0YTIpOworCQlmbGFzaF92ZXJzaW9uLT5idWlsZCA9CisJCSAodTMyKVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX0JVSUxEKGRhdGEyKTsKKworCQlzbnByaW50ZihmbGFzaF92ZXJzaW9uLT52ZXJzaW9uLCBWWEdFX0hXX0ZXX1NUUkxFTiwgIiVkLiVkLiVkIiwKKwkJCWZsYXNoX3ZlcnNpb24tPm1ham9yLCBmbGFzaF92ZXJzaW9uLT5taW5vciwKKwkJCWZsYXNoX3ZlcnNpb24tPmJ1aWxkKTsKKworCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCisJfSBlbHNlCisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9wY2lfZnVuY19tb2RlX2dldCAtIEdldCB0aGUgcGNpIG1vZGUKKyAqIFJldHVybnMgcGNpIGZ1bmN0aW9uIG1vZGUKKyAqLwordTY0CitfX3Z4Z2VfaHdfdnBhdGhfcGNpX2Z1bmNfbW9kZV9nZXQoCisJdTMyICB2cF9pZCwKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnKQoreworCXU2NCB2YWw2NDsKKwl1NjQgZGF0YTEgPSAwVUxMOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCV9fdnhnZV9od19yZWFkX3J0c19kcyh2cGF0aF9yZWcsCisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fUENJX01PREUpOworCisJdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fUkVBRF9NRU1PX0VOVFJZKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTCgKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9GV19NRU1PKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX09GRlNFVCgwKTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodmFsNjQsCisJCQkJJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsLAorCQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSwKKwkJCQlWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7CisKKwlpZiAodmFsNjQgJiBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMpIHsKKwkJZGF0YTEgPSByZWFkcSgmdnBhdGhfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGEwKTsKKwkJc3RhdHVzID0gVlhHRV9IV19PSzsKKwl9IGVsc2UgeworCQlkYXRhMSA9IDA7CisJCXN0YXR1cyA9IFZYR0VfSFdfRkFJTDsKKwl9CitleGl0OgorCXJldHVybiBkYXRhMTsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9mbGlja19saW5rX2xlZCAtIEZsaWNrIChibGluaykgbGluayBMRUQuCisgKiBAaGxkZXY6IEhXIGRldmljZS4KKyAqIEBvbl9vZmY6IFRSVUUgaWYgZmxpY2tlcmluZyB0byBiZSBvbiwgRkFMU0UgdG8gYmUgb2ZmCisgKgorICogRmxpY2tlciB0aGUgbGluayBMRUQuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfZGV2aWNlX2ZsaWNrX2xpbmtfbGVkKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCSAgICAgICB1NjQgb25fb2ZmKQoreworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKworCWlmIChobGRldiA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfREVWSUNFOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnBfcmVnID0gaGxkZXYtPnZwYXRoX3JlZ1tobGRldi0+Zmlyc3RfdnBfaWRdOworCisJd3JpdGVxKDAsICZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7CisJd21iKCk7CisJd3JpdGVxKG9uX29mZiwgJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CisJd3JpdGVxKDAsICZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOworCXdtYigpOworCisJdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fTEVEX0NPTlRST0wpIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMKAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0ZXX01FTU8pIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKDApOworCisJc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKKwkJCQkmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCisJCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAorCQkJCVZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUyk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX2dldCAtIEdldCB0aGUgZW50cmllcyBmcm9tIFJUUyBhY2Nlc3MgdGFibGVzCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9ydHNfdGFibGVfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwKKwl1MzIgYWN0aW9uLCB1MzIgcnRzX3RhYmxlLCB1MzIgb2Zmc2V0LCB1NjQgKmRhdGExLCB1NjQgKmRhdGEyKQoreworCXU2NCB2YWw2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2cGF0aCA9IHZwLT52cGF0aDsKKwl2cF9yZWcgPSB2cGF0aC0+dnBfcmVnOworCisJdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oYWN0aW9uKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTChydHNfdGFibGUpIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKG9mZnNldCk7CisKKwlpZiAoKHJ0c190YWJsZSA9PQorCQlWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX1NPTE9fSVQpIHx8CisJICAgIChydHNfdGFibGUgPT0KKwkJVlhHRV9IV19SVFNfQUNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NVUxUSV9JVCkgfHwKKwkgICAgKHJ0c190YWJsZSA9PQorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX01BU0spIHx8CisJICAgIChydHNfdGFibGUgPT0KKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9LRVkpKSB7CisJCXZhbDY0ID0gdmFsNjQgfAlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9UQUJMRV9TRUw7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh2YWw2NCwKKwkJCQkmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwsCisJCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFLAorCQkJCXZwYXRoLT5obGRldi0+Y29uZmlnLmRldmljZV9wb2xsX21pbGxpcyk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsKTsKKworCWlmICh2YWw2NCAmIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1JNQUNKX1NUQVRVUykgeworCisJCSpkYXRhMSA9IHJlYWRxKCZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOworCisJCWlmICgocnRzX3RhYmxlID09CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSkgfHwKKwkJKHJ0c190YWJsZSA9PQorCQlWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX01VTFRJX0lUKSkgeworCQkJKmRhdGEyID0gcmVhZHEoJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMSk7CisJCX0KKwkJc3RhdHVzID0gVlhHRV9IV19PSzsKKwl9IGVsc2UKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9zZXQgLSBTZXQgdGhlIGVudHJpZXMgb2YgUlRTIGFjY2VzcyB0YWJsZXMKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9zZXQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLCB1MzIgYWN0aW9uLCB1MzIgcnRzX3RhYmxlLAorCXUzMiBvZmZzZXQsIHU2NCBkYXRhMSwgdTY0IGRhdGEyKQoreworCXU2NCB2YWw2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKworCWlmICh2cCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnBhdGggPSB2cC0+dnBhdGg7CisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKworCXdyaXRlcShkYXRhMSwgJnZwX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9kYXRhMCk7CisJd21iKCk7CisKKwlpZiAoKHJ0c190YWJsZSA9PSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEpIHx8CisJICAgIChydHNfdGFibGUgPT0KKwkJVlhHRV9IV19SVFNfQUNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NVUxUSV9JVCkpIHsKKwkJd3JpdGVxKGRhdGEyLCAmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2RhdGExKTsKKwkJd21iKCk7CisJfQorCisJdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oYWN0aW9uKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTChydHNfdGFibGUpIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfU1RST0JFIHwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfT0ZGU0VUKG9mZnNldCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAorCQkJCSZ2cF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCwKKwkJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUsCisJCQkJdnBhdGgtPmhsZGV2LT5jb25maWcuZGV2aWNlX3BvbGxfbWlsbGlzKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5ydHNfYWNjZXNzX3N0ZWVyX2N0cmwpOworCisJaWYgKHZhbDY0ICYgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfUk1BQ0pfU1RBVFVTKQorCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCWVsc2UKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX2FkZHJfZ2V0IC0gR2V0IHRoZSBodyBhZGRyZXNzIGVudHJ5IGZvciB0aGlzIHZwYXRoCisgKiAgICAgICAgICAgICAgIGZyb20gTUFDIGFkZHJlc3MgdGFibGUuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9hZGRyX2dldCgKKwl1MzIgdnBfaWQsIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcsCisJdTggKG1hY2FkZHIpW0VUSF9BTEVOXSwgdTggKG1hY2FkZHJfbWFzaylbRVRIX0FMRU5dKQoreworCXUzMiBpOworCXU2NCB2YWw2NDsKKwl1NjQgZGF0YTEgPSAwVUxMOworCXU2NCBkYXRhMiA9IDBVTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJdmFsNjQgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04oCisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9MSVNUX0ZJUlNUX0VOVFJZKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTCgKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBKSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSB8CisJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX09GRlNFVCgwKTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19waW9fbWVtX3dyaXRlNjQodmFsNjQsCisJCQkJJnZwYXRoX3JlZy0+cnRzX2FjY2Vzc19zdGVlcl9jdHJsLAorCQkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX1NUUk9CRSwKKwkJCQlWWEdFX0hXX0RFRl9ERVZJQ0VfUE9MTF9NSUxMSVMpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfY3RybCk7CisKKwlpZiAodmFsNjQgJiBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9STUFDSl9TVEFUVVMpIHsKKworCQlkYXRhMSA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTApOworCQlkYXRhMiA9IHJlYWRxKCZ2cGF0aF9yZWctPnJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTEpOworCisJCWRhdGExID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9EQV9NQUNfQUREUihkYXRhMSk7CisJCWRhdGEyID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9EQV9NQUNfQUREUl9NQVNLKAorCQkJCQkJCWRhdGEyKTsKKworCQlmb3IgKGkgPSBFVEhfQUxFTjsgaSA+IDA7IGktLSkgeworCQkJbWFjYWRkcltpLTFdID0gKHU4KShkYXRhMSAmIDB4RkYpOworCQkJZGF0YTEgPj49IDg7CisKKwkJCW1hY2FkZHJfbWFza1tpLTFdID0gKHU4KShkYXRhMiAmIDB4RkYpOworCQkJZGF0YTIgPj49IDg7CisJCX0KKwkJc3RhdHVzID0gVlhHRV9IV19PSzsKKwl9IGVsc2UKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od192cGF0aF9ydHNfcnRoX3NldCAtIFNldC9jb25maWd1cmUgUlRTIGhhc2hpbmcuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9ydHNfcnRoX3NldCgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwKKwkJCWVudW0gdnhnZV9od19ydGhfYWxnb3JpdG1zIGFsZ29yaXRobSwKKwkJCXN0cnVjdCB2eGdlX2h3X3J0aF9oYXNoX3R5cGVzICpoYXNoX3R5cGUsCisJCQl1MTYgYnVja2V0X3NpemUpCit7CisJdTY0IGRhdGEwLCBkYXRhMTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfZ2V0KHZwLAorCQkgICAgIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9SRUFEX0VOVFJZLAorCQkgICAgIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfR0VOX0NGRywKKwkJCTAsICZkYXRhMCwgJmRhdGExKTsKKworCWRhdGEwICY9IH4oVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fQlVDS0VUX1NJWkUoMHhmKSB8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9BTEdfU0VMKDB4MykpOworCisJZGF0YTAgfD0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX0VOIHwKKwlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9CVUNLRVRfU0laRShidWNrZXRfc2l6ZSkgfAorCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0FMR19TRUwoYWxnb3JpdGhtKTsKKworCWlmIChoYXNoX3R5cGUtPmhhc2hfdHlwZV90Y3BpcHY0X2VuKQorCQlkYXRhMCB8PSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfVENQX0lQVjRfRU47CisKKwlpZiAoaGFzaF90eXBlLT5oYXNoX3R5cGVfaXB2NF9lbikKKwkJZGF0YTAgfD0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX0lQVjRfRU47CisKKwlpZiAoaGFzaF90eXBlLT5oYXNoX3R5cGVfdGNwaXB2Nl9lbikKKwkJZGF0YTAgfD0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX1RDUF9JUFY2X0VOOworCisJaWYgKGhhc2hfdHlwZS0+aGFzaF90eXBlX2lwdjZfZW4pCisJCWRhdGEwIHw9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9JUFY2X0VOOworCisJaWYgKGhhc2hfdHlwZS0+aGFzaF90eXBlX3RjcGlwdjZleF9lbikKKwkJZGF0YTAgfD0KKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX1RDUF9JUFY2X0VYX0VOOworCisJaWYgKGhhc2hfdHlwZS0+aGFzaF90eXBlX2lwdjZleF9lbikKKwkJZGF0YTAgfD0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX0lQVjZfRVhfRU47CisKKwlpZiAoVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfR0VOX0FDVElWRV9UQUJMRShkYXRhMCkpCisJCWRhdGEwICY9IH5WWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9BQ1RJVkVfVEFCTEU7CisJZWxzZQorCQlkYXRhMCB8PSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9BQ1RJVkVfVEFCTEU7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCh2cCwKKwkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1dSSVRFX0VOVFJZLAorCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX0dFTl9DRkcsCisJCTAsIGRhdGEwLCAwKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQKK3Z4Z2VfaHdfcnRzX3J0aF9kYXRhMF9kYXRhMV9nZXQodTMyIGosIHU2NCAqZGF0YTAsIHU2NCAqZGF0YTEsCisJCQkJdTE2IGZsYWcsIHU4ICppdGFibGUpCit7CisJc3dpdGNoIChmbGFnKSB7CisJY2FzZSAxOgorCQkqZGF0YTAgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0lURU0wX0JVQ0tFVF9OVU0oail8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0lURU0wX0VOVFJZX0VOIHwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSVRFTTBfQlVDS0VUX0RBVEEoCisJCQlpdGFibGVbal0pOworCWNhc2UgMjoKKwkJKmRhdGEwIHw9CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0lURU0xX0JVQ0tFVF9OVU0oail8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0lURU0xX0VOVFJZX0VOIHwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSVRFTTFfQlVDS0VUX0RBVEEoCisJCQlpdGFibGVbal0pOworCWNhc2UgMzoKKwkJKmRhdGExID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNMF9CVUNLRVRfTlVNKGopfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNMF9FTlRSWV9FTiB8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU0wX0JVQ0tFVF9EQVRBKAorCQkJaXRhYmxlW2pdKTsKKwljYXNlIDQ6CisJCSpkYXRhMSB8PQorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNMV9CVUNLRVRfTlVNKGopfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNMV9FTlRSWV9FTiB8CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU0xX0JVQ0tFVF9EQVRBKAorCQkJaXRhYmxlW2pdKTsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorfQorLyoKKyAqIHZ4Z2VfaHdfdnBhdGhfcnRzX3J0aF9pdGFibGVfc2V0IC0gU2V0L2NvbmZpZ3VyZSBpbmRpcmVjdGlvbiB0YWJsZSAoSVQpLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcnRzX3J0aF9pdGFibGVfc2V0KAorCQkJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKip2cGF0aF9oYW5kbGVzLAorCQkJdTMyIHZwYXRoX2NvdW50LAorCQkJdTggKm10YWJsZSwKKwkJCXU4ICppdGFibGUsCisJCQl1MzIgaXRhYmxlX3NpemUpCit7CisJdTMyIGksIGosIGFjdGlvbiwgcnRzX3RhYmxlOworCXU2NCBkYXRhMDsKKwl1NjQgZGF0YTE7CisJdTMyIG1heF9lbnRyaWVzOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAgPSB2cGF0aF9oYW5kbGVzWzBdOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltYXhfZW50cmllcyA9ICgoKHUzMikxKSA8PCBpdGFibGVfc2l6ZSk7CisKKwlpZiAodnAtPnZwYXRoLT5obGRldi0+Y29uZmlnLnJ0aF9pdF90eXBlCisJCQkJPT0gVlhHRV9IV19SVEhfSVRfVFlQRV9TT0xPX0lUKSB7CisJCWFjdGlvbiA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9XUklURV9FTlRSWTsKKwkJcnRzX3RhYmxlID0KKwkJCVZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfU09MT19JVDsKKworCQlmb3IgKGogPSAwOyBqIDwgbWF4X2VudHJpZXM7IGorKykgeworCisJCQlkYXRhMSA9IDA7CisKKwkJCWRhdGEwID0KKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfU09MT19JVF9CVUNLRVRfREFUQSgKKwkJCQlpdGFibGVbal0pOworCisJCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCh2cGF0aF9oYW5kbGVzWzBdLAorCQkJCWFjdGlvbiwgcnRzX3RhYmxlLCBqLCBkYXRhMCwgZGF0YTEpOworCisJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQkJZ290byBleGl0OworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IG1heF9lbnRyaWVzOyBqKyspIHsKKworCQkJZGF0YTEgPSAwOworCisJCQlkYXRhMCA9CisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX1NPTE9fSVRfRU5UUllfRU4gfAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9TT0xPX0lUX0JVQ0tFVF9EQVRBKAorCQkJCWl0YWJsZVtqXSk7CisKKwkJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0KAorCQkJCXZwYXRoX2hhbmRsZXNbbXRhYmxlW2l0YWJsZVtqXV1dLCBhY3Rpb24sCisJCQkJcnRzX3RhYmxlLCBqLCBkYXRhMCwgZGF0YTEpOworCisJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQkJZ290byBleGl0OworCQl9CisJfSBlbHNlIHsKKwkJYWN0aW9uID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1dSSVRFX0VOVFJZOworCQlydHNfdGFibGUgPQorCQkJVlhHRV9IV19SVFNfQUNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NVUxUSV9JVDsKKwkJZm9yIChpID0gMDsgaSA8IHZwYXRoX2NvdW50OyBpKyspIHsKKworCQkJZm9yIChqID0gMDsgaiA8IG1heF9lbnRyaWVzOykgeworCisJCQkJZGF0YTAgPSAwOworCQkJCWRhdGExID0gMDsKKworCQkJCXdoaWxlIChqIDwgbWF4X2VudHJpZXMpIHsKKwkJCQkJaWYgKG10YWJsZVtpdGFibGVbal1dICE9IGkpIHsKKwkJCQkJCWorKzsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCXZ4Z2VfaHdfcnRzX3J0aF9kYXRhMF9kYXRhMV9nZXQoaiwKKwkJCQkJCSZkYXRhMCwgJmRhdGExLCAxLCBpdGFibGUpOworCQkJCQlqKys7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXdoaWxlIChqIDwgbWF4X2VudHJpZXMpIHsKKwkJCQkJaWYgKG10YWJsZVtpdGFibGVbal1dICE9IGkpIHsKKwkJCQkJCWorKzsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCXZ4Z2VfaHdfcnRzX3J0aF9kYXRhMF9kYXRhMV9nZXQoaiwKKwkJCQkJCSZkYXRhMCwgJmRhdGExLCAyLCBpdGFibGUpOworCQkJCQlqKys7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXdoaWxlIChqIDwgbWF4X2VudHJpZXMpIHsKKwkJCQkJaWYgKG10YWJsZVtpdGFibGVbal1dICE9IGkpIHsKKwkJCQkJCWorKzsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCXZ4Z2VfaHdfcnRzX3J0aF9kYXRhMF9kYXRhMV9nZXQoaiwKKwkJCQkJCSZkYXRhMCwgJmRhdGExLCAzLCBpdGFibGUpOworCQkJCQlqKys7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCXdoaWxlIChqIDwgbWF4X2VudHJpZXMpIHsKKwkJCQkJaWYgKG10YWJsZVtpdGFibGVbal1dICE9IGkpIHsKKwkJCQkJCWorKzsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCXZ4Z2VfaHdfcnRzX3J0aF9kYXRhMF9kYXRhMV9nZXQoaiwKKwkJCQkJCSZkYXRhMCwgJmRhdGExLCA0LCBpdGFibGUpOworCQkJCQlqKys7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWlmIChkYXRhMCAhPSAwKSB7CisJCQkJCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0KAorCQkJCQkJCXZwYXRoX2hhbmRsZXNbaV0sCisJCQkJCQkJYWN0aW9uLCBydHNfdGFibGUsCisJCQkJCQkJMCwgZGF0YTAsIGRhdGExKTsKKworCQkJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQkJCQlnb3RvIGV4aXQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfY2hlY2tfbGVhayAtIENoZWNrIGZvciBtZW1vcnkgbGVhaworICogQHJpbmdoOiBIYW5kbGUgdG8gdGhlIHJpbmcgb2JqZWN0IHVzZWQgZm9yIHJlY2VpdmUKKyAqCisgKiBJZiBQUkNfUlhEX0RPT1JCRUxMX1ZQbi5ORVdfUVdfQ05UIGlzIGxhcmdlciBvciBlcXVhbCB0bworICogUFJDX0NGRzZfVlBuLlJYRF9TUEFUIHRoZW4gYSBsZWFrIGhhcyBvY2N1cnJlZC4KKyAqIFJldHVybnM6IFZYR0VfSFdfRkFJTCwgaWYgbGVhayBoYXMgb2NjdXJyZWQuCisgKgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX2NoZWNrX2xlYWsoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwl1NjQgcnhkX25ld19jb3VudCwgcnhkX3NwYXQ7CisKKwlpZiAocmluZyA9PSBOVUxMKQorCQlyZXR1cm4gc3RhdHVzOworCisJcnhkX25ld19jb3VudCA9IHJlYWRsKCZyaW5nLT52cF9yZWctPnByY19yeGRfZG9vcmJlbGwpOworCXJ4ZF9zcGF0ID0gcmVhZHEoJnJpbmctPnZwX3JlZy0+cHJjX2NmZzYpOworCXJ4ZF9zcGF0ID0gVlhHRV9IV19QUkNfQ0ZHNl9SWERfU1BBVChyeGRfc3BhdCk7CisKKwlpZiAocnhkX25ld19jb3VudCA+PSByeGRfc3BhdCkKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9tZ210X3JlYWQKKyAqIFRoaXMgcm91dGluZSByZWFkcyB0aGUgdnBhdGhfbWdtdCByZWdpc3RlcnMKKyAqLworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9tZ210X3JlYWQoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoKQoreworCXUzMiBpLCBtdHUgPSAwLCBtYXhfcHlsZCA9IDA7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BQ19NQVhfTUFDX1BPUlRfSUQ7IGkrKykgeworCisJCXZhbDY0ID0gcmVhZHEoJnZwYXRoLT52cG1nbXRfcmVnLT4KKwkJCQlyeG1hY19jZmcwX3BvcnRfdnBtZ210X2Nsb25lW2ldKTsKKwkJbWF4X3B5bGQgPQorCQkJKHUzMikKKwkJCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9HRVRfTUFYX1BZTERfTEVOCisJCQkodmFsNjQpOworCQlpZiAobXR1IDwgbWF4X3B5bGQpCisJCQltdHUgPSBtYXhfcHlsZDsKKwl9CisKKwl2cGF0aC0+bWF4X210dSA9IG10dSArIFZYR0VfSFdfTUFDX0hFQURFUl9NQVhfU0laRTsKKworCXZhbDY0ID0gcmVhZHEoJnZwYXRoLT52cG1nbXRfcmVnLT54bWFjX3ZzcG9ydF9jaG9pY2VzX3ZwKTsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKwkJaWYgKHZhbDY0ICYgdnhnZV9tQklUKGkpKQorCQkJdnBhdGgtPnZzcG9ydF9udW1iZXIgPSBpOworCX0KKworCXZhbDY0ID0gcmVhZHEoJnZwYXRoLT52cG1nbXRfcmVnLT54Z21hY19nZW5fc3RhdHVzX3ZwbWdtdF9jbG9uZSk7CisKKwlpZiAodmFsNjQgJiBWWEdFX0hXX1hHTUFDX0dFTl9TVEFUVVNfVlBNR01UX0NMT05FX1hNQUNKX05UV0tfT0spCisJCVZYR0VfSFdfREVWSUNFX0xJTktfU1RBVEVfU0VUKHZwYXRoLT5obGRldiwgVlhHRV9IV19MSU5LX1VQKTsKKwllbHNlCisJCVZYR0VfSFdfREVWSUNFX0xJTktfU1RBVEVfU0VUKHZwYXRoLT5obGRldiwgVlhHRV9IV19MSU5LX0RPV04pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9yZXNldF9jaGVjayAtIENoZWNrIGlmIHJlc2V0dGluZyB0aGUgdnBhdGggY29tcGxldGVkCisgKiBUaGlzIHJvdXRpbmUgY2hlY2tzIHRoZSB2cGF0aF9yc3RfaW5fcHJvZyByZWdpc3RlciB0byBzZWUgaWYKKyAqIGFkYXB0ZXIgY29tcGxldGVkIHRoZSByZXNldCBwcm9jZXNzIGZvciB0aGUgdnBhdGgKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3Jlc2V0X2NoZWNrKHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0gX192eGdlX2h3X2RldmljZV9yZWdpc3Rlcl9wb2xsKAorCQkJJnZwYXRoLT5obGRldi0+Y29tbW9uX3JlZy0+dnBhdGhfcnN0X2luX3Byb2csCisJCQlWWEdFX0hXX1ZQQVRIX1JTVF9JTl9QUk9HX1ZQQVRIX1JTVF9JTl9QUk9HKAorCQkJCTEgPDwgKDE2IC0gdnBhdGgtPnZwX2lkKSksCisJCQl2cGF0aC0+aGxkZXYtPmNvbmZpZy5kZXZpY2VfcG9sbF9taWxsaXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9yZXNldAorICogVGhpcyByb3V0aW5lIHJlc2V0cyB0aGUgdnBhdGggb24gdGhlIGRldmljZQorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfcmVzZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgdnBfaWQpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCXZhbDY0ID0gVlhHRV9IV19DTU5fUlNUSERMUl9DRkcwX1NXX1JFU0VUX1ZQQVRIKDEgPDwgKDE2IC0gdnBfaWQpKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMil2eGdlX2JWQUxuKHZhbDY0LCAwLCAzMiksCisJCQkJJmhsZGV2LT5jb21tb25fcmVnLT5jbW5fcnN0aGRscl9jZmcwKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfc3dfcmVzZXQKKyAqIFRoaXMgcm91dGluZSByZXNldHMgdGhlIHZwYXRoIHN0cnVjdHVyZXMKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3N3X3Jlc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHZwX2lkKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKworCXZwYXRoID0gKHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKikmaGxkZXYtPnZpcnR1YWxfcGF0aHNbdnBfaWRdOworCisJaWYgKHZwYXRoLT5yaW5naCkgeworCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfcmluZ19yZXNldCh2cGF0aC0+cmluZ2gpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHZwYXRoLT5maWZvaCkKKwkJc3RhdHVzID0gX192eGdlX2h3X2ZpZm9fcmVzZXQodnBhdGgtPmZpZm9oKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9wcmNfY29uZmlndXJlCisgKiBUaGlzIHJvdXRpbmUgY29uZmlndXJlcyB0aGUgcHJjIHJlZ2lzdGVycyBvZiB2aXJ0dWFsIHBhdGggdXNpbmcgdGhlIGNvbmZpZworICogcGFzc2VkCisgKi8KK3ZvaWQKK19fdnhnZV9od192cGF0aF9wcmNfY29uZmlndXJlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwgdTMyIHZwX2lkKQoreworCXU2NCB2YWw2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwlzdHJ1Y3QgdnhnZV9od192cF9jb25maWcgKnZwX2NvbmZpZzsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCisJdnBhdGggPSAmaGxkZXYtPnZpcnR1YWxfcGF0aHNbdnBfaWRdOworCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisJdnBfY29uZmlnID0gdnBhdGgtPnZwX2NvbmZpZzsKKworCWlmICh2cF9jb25maWctPnJpbmcuZW5hYmxlID09IFZYR0VfSFdfUklOR19ESVNBQkxFKQorCQlyZXR1cm47CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnByY19jZmcxKTsKKwl2YWw2NCB8PSBWWEdFX0hXX1BSQ19DRkcxX1JUSV9USU5UX0RJU0FCTEU7CisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT5wcmNfY2ZnMSk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aC0+dnBfcmVnLT5wcmNfY2ZnNik7CisJdmFsNjQgfD0gVlhHRV9IV19QUkNfQ0ZHNl9ET09SQkVMTF9NT0RFX0VOOworCXdyaXRlcSh2YWw2NCwgJnZwYXRoLT52cF9yZWctPnByY19jZmc2KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cHJjX2NmZzcpOworCisJaWYgKHZwYXRoLT52cF9jb25maWctPnJpbmcuc2NhdHRlcl9tb2RlICE9CisJCVZYR0VfSFdfUklOR19TQ0FUVEVSX01PREVfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKworCQl2YWw2NCAmPSB+VlhHRV9IV19QUkNfQ0ZHN19TQ0FUVEVSX01PREUoMHgzKTsKKworCQlzd2l0Y2ggKHZwYXRoLT52cF9jb25maWctPnJpbmcuc2NhdHRlcl9tb2RlKSB7CisJCWNhc2UgVlhHRV9IV19SSU5HX1NDQVRURVJfTU9ERV9BOgorCQkJdmFsNjQgfD0gVlhHRV9IV19QUkNfQ0ZHN19TQ0FUVEVSX01PREUoCisJCQkJCVZYR0VfSFdfUFJDX0NGRzdfU0NBVFRFUl9NT0RFX0EpOworCQkJYnJlYWs7CisJCWNhc2UgVlhHRV9IV19SSU5HX1NDQVRURVJfTU9ERV9COgorCQkJdmFsNjQgfD0gVlhHRV9IV19QUkNfQ0ZHN19TQ0FUVEVSX01PREUoCisJCQkJCVZYR0VfSFdfUFJDX0NGRzdfU0NBVFRFUl9NT0RFX0IpOworCQkJYnJlYWs7CisJCWNhc2UgVlhHRV9IV19SSU5HX1NDQVRURVJfTU9ERV9DOgorCQkJdmFsNjQgfD0gVlhHRV9IV19QUkNfQ0ZHN19TQ0FUVEVSX01PREUoCisJCQkJCVZYR0VfSFdfUFJDX0NGRzdfU0NBVFRFUl9NT0RFX0MpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnByY19jZmc3KTsKKworCXdyaXRlcShWWEdFX0hXX1BSQ19DRkc1X1JYRDBfQUREKAorCQkJCV9fdnhnZV9od19yaW5nX2ZpcnN0X2Jsb2NrX2FkZHJlc3NfZ2V0KAorCQkJCQl2cGF0aC0+cmluZ2gpID4+IDMpLCAmdnBfcmVnLT5wcmNfY2ZnNSk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnByY19jZmc0KTsKKwl2YWw2NCB8PSBWWEdFX0hXX1BSQ19DRkc0X0lOX1NWQzsKKwl2YWw2NCAmPSB+VlhHRV9IV19QUkNfQ0ZHNF9SSU5HX01PREUoMHgzKTsKKworCXZhbDY0IHw9IFZYR0VfSFdfUFJDX0NGRzRfUklOR19NT0RFKAorCQkJVlhHRV9IV19QUkNfQ0ZHNF9SSU5HX01PREVfT05FX0JVRkZFUik7CisKKwlpZiAoaGxkZXYtPmNvbmZpZy5ydGhfZW4gPT0gVlhHRV9IV19SVEhfRElTQUJMRSkKKwkJdmFsNjQgfD0gVlhHRV9IV19QUkNfQ0ZHNF9SVEhfRElTQUJMRTsKKwllbHNlCisJCXZhbDY0ICY9IH5WWEdFX0hXX1BSQ19DRkc0X1JUSF9ESVNBQkxFOworCisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT5wcmNfY2ZnNCk7CisJcmV0dXJuOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX2tkZmNfY29uZmlndXJlCisgKiBUaGlzIHJvdXRpbmUgY29uZmlndXJlcyB0aGUga2RmYyByZWdpc3RlcnMgb2YgdmlydHVhbCBwYXRoIHVzaW5nIHRoZQorICogY29uZmlnIHBhc3NlZAorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfa2RmY19jb25maWd1cmUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgdnBfaWQpCit7CisJdTY0IHZhbDY0OworCXU2NCB2cGF0aF9zdHJpZGU7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwl2cGF0aCA9ICZobGRldi0+dmlydHVhbF9wYXRoc1t2cF9pZF07CisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfa2RmY19zd2FwcGVyX3NldChobGRldi0+bGVnYWN5X3JlZywgdnBfcmVnKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5rZGZjX2RyYmxfdHJpcGxldF90b3RhbCk7CisKKwl2cGF0aC0+bWF4X2tkZmNfZGIgPQorCQkodTMyKVZYR0VfSFdfS0RGQ19EUkJMX1RSSVBMRVRfVE9UQUxfR0VUX0tERkNfTUFYX1NJWkUoCisJCQl2YWw2NCsxKS8yOworCisJaWYgKHZwYXRoLT52cF9jb25maWctPmZpZm8uZW5hYmxlID09IFZYR0VfSFdfRklGT19FTkFCTEUpIHsKKworCQl2cGF0aC0+bWF4X25vZmxfZGIgPSB2cGF0aC0+bWF4X2tkZmNfZGI7CisKKwkJaWYgKHZwYXRoLT5tYXhfbm9mbF9kYiA8CisJCQkoKHZwYXRoLT52cF9jb25maWctPmZpZm8ubWVtYmxvY2tfc2l6ZSAvCisJCQkodnBhdGgtPnZwX2NvbmZpZy0+Zmlmby5tYXhfZnJhZ3MgKgorCQkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkKSkpICoKKwkJCXZwYXRoLT52cF9jb25maWctPmZpZm8uZmlmb19ibG9ja3MpKSB7CisKKwkJCXJldHVybiBWWEdFX0hXX0JBRENGR19GSUZPX0JMT0NLUzsKKwkJfQorCQl2YWw2NCA9IFZYR0VfSFdfS0RGQ19GSUZPX1RSUExfUEFSVElUSU9OX0xFTkdUSF8wKAorCQkJCSh2cGF0aC0+bWF4X25vZmxfZGIqMiktMSk7CisJfQorCisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT5rZGZjX2ZpZm9fdHJwbF9wYXJ0aXRpb24pOworCisJd3JpdGVxKFZYR0VfSFdfS0RGQ19GSUZPX1RSUExfQ1RSTF9UUklQTEVUX0VOQUJMRSwKKwkJJnZwX3JlZy0+a2RmY19maWZvX3RycGxfY3RybCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPmtkZmNfdHJwbF9maWZvXzBfY3RybCk7CisKKwl2YWw2NCAmPSB+KFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX01PREUoMHgzKSB8CisJCSAgIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX1NFTEVDVCgweEZGKSk7CisKKwl2YWw2NCB8PSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9NT0RFKAorCQkgVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfTU9ERV9OT05fT0ZGTE9BRF9PTkxZKSB8CisjaWZuZGVmIF9fQklHX0VORElBTgorCQkgVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfU1dBUF9FTiB8CisjZW5kaWYKKwkJIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX1NFTEVDVCgwKTsKKworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+a2RmY190cnBsX2ZpZm9fMF9jdHJsKTsKKwl3cml0ZXEoKHU2NCkwLCAmdnBfcmVnLT5rZGZjX3RycGxfZmlmb18wX3diX2FkZHJlc3MpOworCXdtYigpOworCXZwYXRoX3N0cmlkZSA9IHJlYWRxKCZobGRldi0+dG9jX3JlZy0+dG9jX2tkZmNfdnBhdGhfc3RyaWRlKTsKKworCXZwYXRoLT5ub2ZsX2RiID0KKwkJKHN0cnVjdCBfX3Z4Z2VfaHdfbm9uX29mZmxvYWRfZGJfd3JhcHBlciBfX2lvbWVtICopCisJCShobGRldi0+a2RmYyArICh2cF9pZCAqCisJCVZYR0VfSFdfVE9DX0tERkNfVlBBVEhfU1RSSURFX0dFVF9UT0NfS0RGQ19WUEFUSF9TVFJJREUoCisJCQkJCXZwYXRoX3N0cmlkZSkpKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9tYWNfY29uZmlndXJlCisgKiBUaGlzIHJvdXRpbmUgY29uZmlndXJlcyB0aGUgbWFjIG9mIHZpcnR1YWwgcGF0aCB1c2luZyB0aGUgY29uZmlnIHBhc3NlZAorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfbWFjX2NvbmZpZ3VyZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiB2cF9pZCkKK3sKKwl1NjQgdmFsNjQ7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCXN0cnVjdCB2eGdlX2h3X3ZwX2NvbmZpZyAqdnBfY29uZmlnOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwl2cGF0aCA9ICZobGRldi0+dmlydHVhbF9wYXRoc1t2cF9pZF07CisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKwl2cF9jb25maWcgPSB2cGF0aC0+dnBfY29uZmlnOworCisJd3JpdGVxKFZYR0VfSFdfWE1BQ19WU1BPUlRfQ0hPSUNFX1ZTUE9SVF9OVU1CRVIoCisJCQl2cGF0aC0+dnNwb3J0X251bWJlciksICZ2cF9yZWctPnhtYWNfdnNwb3J0X2Nob2ljZSk7CisKKwlpZiAodnBfY29uZmlnLT5yaW5nLmVuYWJsZSA9PSBWWEdFX0hXX1JJTkdfRU5BQkxFKSB7CisKKwkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT54bWFjX3JwYV92Y2ZnKTsKKworCQlpZiAodnBfY29uZmlnLT5ycGFfc3RyaXBfdmxhbl90YWcgIT0KKwkJCVZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQlpZiAodnBfY29uZmlnLT5ycGFfc3RyaXBfdmxhbl90YWcpCisJCQkJdmFsNjQgfD0gVlhHRV9IV19YTUFDX1JQQV9WQ0ZHX1NUUklQX1ZMQU5fVEFHOworCQkJZWxzZQorCQkJCXZhbDY0ICY9IH5WWEdFX0hXX1hNQUNfUlBBX1ZDRkdfU1RSSVBfVkxBTl9UQUc7CisJCX0KKworCQl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnhtYWNfcnBhX3ZjZmcpOworCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKworCQlpZiAodnBfY29uZmlnLT5tdHUgIT0KKwkJCQlWWEdFX0hXX1ZQQVRIX1VTRV9GTEFTSF9ERUZBVUxUX0lOSVRJQUxfTVRVKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19SWE1BQ19WQ0ZHMF9SVFNfTUFYX0ZSTV9MRU4oMHgzZmZmKTsKKwkJCWlmICgodnBfY29uZmlnLT5tdHUgICsKKwkJCQlWWEdFX0hXX01BQ19IRUFERVJfTUFYX1NJWkUpIDwgdnBhdGgtPm1heF9tdHUpCisJCQkJdmFsNjQgfD0gVlhHRV9IV19SWE1BQ19WQ0ZHMF9SVFNfTUFYX0ZSTV9MRU4oCisJCQkJCXZwX2NvbmZpZy0+bXR1ICArCisJCQkJCVZYR0VfSFdfTUFDX0hFQURFUl9NQVhfU0laRSk7CisJCQllbHNlCisJCQkJdmFsNjQgfD0gVlhHRV9IV19SWE1BQ19WQ0ZHMF9SVFNfTUFYX0ZSTV9MRU4oCisJCQkJCXZwYXRoLT5tYXhfbXR1KTsKKwkJfQorCisJCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnhtYWNfdmNmZzEpOworCisJCXZhbDY0ICY9IH4oVlhHRV9IV19SWE1BQ19WQ0ZHMV9SVFNfUlRIX01VTFRJX0lUX0JEX01PREUoMHgzKSB8CisJCQlWWEdFX0hXX1JYTUFDX1ZDRkcxX1JUU19SVEhfTVVMVElfSVRfRU5fTU9ERSk7CisKKwkJaWYgKGhsZGV2LT5jb25maWcucnRoX2l0X3R5cGUgPT0KKwkJCQlWWEdFX0hXX1JUSF9JVF9UWVBFX01VTFRJX0lUKSB7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1JYTUFDX1ZDRkcxX1JUU19SVEhfTVVMVElfSVRfQkRfTU9ERSgKKwkJCQkweDIpIHwKKwkJCQlWWEdFX0hXX1JYTUFDX1ZDRkcxX1JUU19SVEhfTVVMVElfSVRfRU5fTU9ERTsKKwkJfQorCisJCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+cnhtYWNfdmNmZzEpOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X3ZwYXRoX3RpbV9jb25maWd1cmUKKyAqIFRoaXMgcm91dGluZSBjb25maWd1cmVzIHRoZSB0aW0gcmVnaXN0ZXJzIG9mIHZpcnR1YWwgcGF0aCB1c2luZyB0aGUgY29uZmlnCisgKiBwYXNzZWQKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3RpbV9jb25maWd1cmUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgdnBfaWQpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBfcmVnOworCXN0cnVjdCB2eGdlX2h3X3ZwX2NvbmZpZyAqY29uZmlnOworCisJdnBhdGggPSAmaGxkZXYtPnZpcnR1YWxfcGF0aHNbdnBfaWRdOworCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisJY29uZmlnID0gdnBhdGgtPnZwX2NvbmZpZzsKKworCXdyaXRlcSgodTY0KTAsICZ2cF9yZWctPnRpbV9kZXN0X2FkZHIpOworCXdyaXRlcSgodTY0KTAsICZ2cF9yZWctPnRpbV92cGF0aF9tYXApOworCXdyaXRlcSgodTY0KTAsICZ2cF9yZWctPnRpbV9iaXRtYXApOworCXdyaXRlcSgodTY0KTAsICZ2cF9yZWctPnRpbV9yZW1hcCk7CisKKwlpZiAoY29uZmlnLT5yaW5nLmVuYWJsZSA9PSBWWEdFX0hXX1JJTkdfRU5BQkxFKQorCQl3cml0ZXEoVlhHRV9IV19USU1fUklOR19BU1NOX0lOVF9OVU0oCisJCQkodnBfaWQgKiBWWEdFX0hXX01BWF9JTlRSX1BFUl9WUCkgKworCQkJVlhHRV9IV19WUEFUSF9JTlRSX1JYKSwgJnZwX3JlZy0+dGltX3JpbmdfYXNzbik7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnRpbV9wY2lfY2ZnKTsKKwl2YWw2NCB8PSBWWEdFX0hXX1RJTV9QQ0lfQ0ZHX0FERF9QQUQ7CisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fcGNpX2NmZyk7CisKKwlpZiAoY29uZmlnLT5maWZvLmVuYWJsZSA9PSBWWEdFX0hXX0ZJRk9fRU5BQkxFKSB7CisKKwkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT50aW1fY2ZnMV9pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0pOworCisJCWlmIChjb25maWctPnR0aS5idGltZXJfdmFsICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fQlRJTUVSX1ZBTCgKKwkJCQkweDNmZmZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX0JUSU1FUl9WQUwoCisJCQkJCWNvbmZpZy0+dHRpLmJ0aW1lcl92YWwpOworCQl9CisKKwkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9CSVRNUF9FTjsKKworCQlpZiAoY29uZmlnLT50dGkudGltZXJfYWNfZW4gIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJaWYgKGNvbmZpZy0+dHRpLnRpbWVyX2FjX2VuKQorCQkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9USU1FUl9BQzsKKwkJCWVsc2UKKwkJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RJTUVSX0FDOworCQl9CisKKwkJaWYgKGNvbmZpZy0+dHRpLnRpbWVyX2NpX2VuICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCWlmIChjb25maWctPnR0aS50aW1lcl9jaV9lbikKKwkJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVElNRVJfQ0k7CisJCQllbHNlCisJCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9USU1FUl9DSTsKKwkJfQorCisJCWlmIChjb25maWctPnR0aS51cmFuZ2VfYSAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQSgweDNmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0EoCisJCQkJCWNvbmZpZy0+dHRpLnVyYW5nZV9hKTsKKwkJfQorCisJCWlmIChjb25maWctPnR0aS51cmFuZ2VfYiAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQigweDNmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0IoCisJCQkJCWNvbmZpZy0+dHRpLnVyYW5nZV9iKTsKKwkJfQorCisJCWlmIChjb25maWctPnR0aS51cmFuZ2VfYyAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQygweDNmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0MoCisJCQkJCWNvbmZpZy0+dHRpLnVyYW5nZV9jKTsKKwkJfQorCisJCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzFfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdKTsKKwkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT50aW1fY2ZnMl9pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0pOworCisJCWlmIChjb25maWctPnR0aS51ZWNfYSAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19BKDB4ZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0EoCisJCQkJCQljb25maWctPnR0aS51ZWNfYSk7CisJCX0KKworCQlpZiAoY29uZmlnLT50dGkudWVjX2IgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQigweGZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19CKAorCQkJCQkJY29uZmlnLT50dGkudWVjX2IpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+dHRpLnVlY19jICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0MoMHhmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQygKKwkJCQkJCWNvbmZpZy0+dHRpLnVlY19jKTsKKwkJfQorCisJCWlmIChjb25maWctPnR0aS51ZWNfZCAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19EKDB4ZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0QoCisJCQkJCQljb25maWctPnR0aS51ZWNfZCk7CisJCX0KKworCQl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmcyX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1RYXSk7CisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dGltX2NmZzNfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdKTsKKworCQlpZiAoY29uZmlnLT50dGkudGltZXJfcmlfZW4gIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJaWYgKGNvbmZpZy0+dHRpLnRpbWVyX3JpX2VuKQorCQkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9USU1FUl9SSTsKKwkJCWVsc2UKKwkJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1RJTUVSX1JJOworCQl9CisKKwkJaWYgKGNvbmZpZy0+dHRpLnJ0aW1lcl92YWwgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9SVElNRVJfVkFMKAorCQkJCQkweDNmZmZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1JUSU1FUl9WQUwoCisJCQkJCWNvbmZpZy0+dHRpLnJ0aW1lcl92YWwpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+dHRpLnV0aWxfc2VsICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVVRJTF9TRUwoMHgzZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVVRJTF9TRUwoCisJCQkJCWNvbmZpZy0+dHRpLnV0aWxfc2VsKTsKKwkJfQorCisJCWlmIChjb25maWctPnR0aS5sdGltZXJfdmFsICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fTFRJTUVSX1ZBTCgKKwkJCQkJMHgzZmZmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9MVElNRVJfVkFMKAorCQkJCQljb25maWctPnR0aS5sdGltZXJfdmFsKTsKKwkJfQorCisJCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzNfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdKTsKKwl9CisKKwlpZiAoY29uZmlnLT5yaW5nLmVuYWJsZSA9PSBWWEdFX0hXX1JJTkdfRU5BQkxFKSB7CisKKwkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT50aW1fY2ZnMV9pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0pOworCisJCWlmIChjb25maWctPnJ0aS5idGltZXJfdmFsICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fQlRJTUVSX1ZBTCgKKwkJCQkJMHgzZmZmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9CVElNRVJfVkFMKAorCQkJCQljb25maWctPnJ0aS5idGltZXJfdmFsKTsKKwkJfQorCisJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fQklUTVBfRU47CisKKwkJaWYgKGNvbmZpZy0+cnRpLnRpbWVyX2FjX2VuICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCWlmIChjb25maWctPnJ0aS50aW1lcl9hY19lbikKKwkJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVElNRVJfQUM7CisJCQllbHNlCisJCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9USU1FUl9BQzsKKwkJfQorCisJCWlmIChjb25maWctPnJ0aS50aW1lcl9jaV9lbiAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQlpZiAoY29uZmlnLT5ydGkudGltZXJfY2lfZW4pCisJCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RJTUVSX0NJOworCQkJZWxzZQorCQkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVElNRVJfQ0k7CisJCX0KKworCQlpZiAoY29uZmlnLT5ydGkudXJhbmdlX2EgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0EoMHgzZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19BKAorCQkJCQljb25maWctPnJ0aS51cmFuZ2VfYSk7CisJCX0KKworCQlpZiAoY29uZmlnLT5ydGkudXJhbmdlX2IgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0IoMHgzZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19CKAorCQkJCQljb25maWctPnJ0aS51cmFuZ2VfYik7CisJCX0KKworCQlpZiAoY29uZmlnLT5ydGkudXJhbmdlX2MgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0MoMHgzZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19DKAorCQkJCQljb25maWctPnJ0aS51cmFuZ2VfYyk7CisJCX0KKworCQl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmcxX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1JYXSk7CisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dGltX2NmZzJfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdKTsKKworCQlpZiAoY29uZmlnLT5ydGkudWVjX2EgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQSgweGZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19BKAorCQkJCQkJY29uZmlnLT5ydGkudWVjX2EpOworCQl9CisKKwkJaWYgKGNvbmZpZy0+cnRpLnVlY19iICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0IoMHhmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQigKKwkJCQkJCWNvbmZpZy0+cnRpLnVlY19iKTsKKwkJfQorCisJCWlmIChjb25maWctPnJ0aS51ZWNfYyAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19DKDB4ZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0MoCisJCQkJCQljb25maWctPnJ0aS51ZWNfYyk7CisJCX0KKworCQlpZiAoY29uZmlnLT5ydGkudWVjX2QgIT0gVlhHRV9IV19VU0VfRkxBU0hfREVGQVVMVCkgeworCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfRCgweGZmZmYpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19EKAorCQkJCQkJY29uZmlnLT5ydGkudWVjX2QpOworCQl9CisKKwkJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fY2ZnMl9pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0pOworCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnRpbV9jZmczX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1JYXSk7CisKKwkJaWYgKGNvbmZpZy0+cnRpLnRpbWVyX3JpX2VuICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCWlmIChjb25maWctPnJ0aS50aW1lcl9yaV9lbikKKwkJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fVElNRVJfUkk7CisJCQllbHNlCisJCQkJdmFsNjQgJj0gflZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9USU1FUl9SSTsKKwkJfQorCisJCWlmIChjb25maWctPnJ0aS5ydGltZXJfdmFsICE9IFZYR0VfSFdfVVNFX0ZMQVNIX0RFRkFVTFQpIHsKKwkJCXZhbDY0ICY9IH5WWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fUlRJTUVSX1ZBTCgKKwkJCQkJMHgzZmZmZmZmKTsKKwkJCXZhbDY0IHw9IFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9SVElNRVJfVkFMKAorCQkJCQljb25maWctPnJ0aS5ydGltZXJfdmFsKTsKKwkJfQorCisJCWlmIChjb25maWctPnJ0aS51dGlsX3NlbCAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1VUSUxfU0VMKDB4M2YpOworCQkJdmFsNjQgfD0gVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1VUSUxfU0VMKAorCQkJCQljb25maWctPnJ0aS51dGlsX3NlbCk7CisJCX0KKworCQlpZiAoY29uZmlnLT5ydGkubHRpbWVyX3ZhbCAhPSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUKSB7CisJCQl2YWw2NCAmPSB+VlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX0xUSU1FUl9WQUwoCisJCQkJCTB4M2ZmZmZmZik7CisJCQl2YWw2NCB8PSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fTFRJTUVSX1ZBTCgKKwkJCQkJY29uZmlnLT5ydGkubHRpbWVyX3ZhbCk7CisJCX0KKworCQl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmczX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX1JYXSk7CisJfQorCisJdmFsNjQgPSAwOworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzFfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfRUlOVEFdKTsKKwl3cml0ZXEodmFsNjQsICZ2cF9yZWctPnRpbV9jZmcyX2ludF9udW1bVlhHRV9IV19WUEFUSF9JTlRSX0VJTlRBXSk7CisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT50aW1fY2ZnM19pbnRfbnVtW1ZYR0VfSFdfVlBBVEhfSU5UUl9FSU5UQV0pOworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzFfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfQk1BUF0pOworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzJfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfQk1BUF0pOworCXdyaXRlcSh2YWw2NCwgJnZwX3JlZy0+dGltX2NmZzNfaW50X251bVtWWEdFX0hXX1ZQQVRIX0lOVFJfQk1BUF0pOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9pbml0aWFsaXplCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGZpbmFsIHBoYXNlIG9mIGluaXQgd2hpY2ggaW5pdGlhbGl6ZXMgdGhlCisgKiByZWdpc3RlcnMgb2YgdGhlIHZwYXRoIHVzaW5nIHRoZSBjb25maWd1cmF0aW9uIHBhc3NlZC4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX2luaXRpYWxpemUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgdnBfaWQpCit7CisJdTY0IHZhbDY0OworCXUzMiB2YWwzMjsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKworCXZwYXRoID0gJmhsZGV2LT52aXJ0dWFsX3BhdGhzW3ZwX2lkXTsKKworCWlmICghKGhsZGV2LT52cGF0aF9hc3NpZ25tZW50cyAmIHZ4Z2VfbUJJVCh2cF9pZCkpKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9BVkFJTEFCTEU7CisJCWdvdG8gZXhpdDsKKwl9CisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKworCXN0YXR1cyA9ICBfX3Z4Z2VfaHdfdnBhdGhfc3dhcHBlcl9zZXQodnBhdGgtPnZwX3JlZyk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXN0YXR1cyA9ICBfX3Z4Z2VfaHdfdnBhdGhfbWFjX2NvbmZpZ3VyZShobGRldiwgdnBfaWQpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlzdGF0dXMgPSAgX192eGdlX2h3X3ZwYXRoX2tkZmNfY29uZmlndXJlKGhsZGV2LCB2cF9pZCk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF90aW1fY29uZmlndXJlKGhsZGV2LCB2cF9pZCk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXdyaXRlcSgwLCAmdnBfcmVnLT5nZW5kbWFfaW50KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+cnRkbWFfcmRfb3B0aW1pemF0aW9uX2N0cmwpOworCisJLyogR2V0IE1SUlMgdmFsdWUgZnJvbSBkZXZpY2UgY29udHJvbCAqLworCXN0YXR1cyAgPSBfX3Z4Z2VfaHdfdnBhdGhfcGNpX3JlYWQodnBhdGgsIDEsIDB4NzgsICZ2YWwzMik7CisKKwlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spIHsKKwkJdmFsMzIgPSAodmFsMzIgJiBWWEdFX0hXX1BDSV9FWFBfREVWQ1RMX1JFQURSUSkgPj4gMTI7CisJCXZhbDY0ICY9CisJCSAgICB+KFZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfRkJfRklMTF9USFJFU0goNykpOworCQl2YWw2NCB8PQorCQkgICAgVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9GQl9GSUxMX1RIUkVTSCh2YWwzMik7CisKKwkJdmFsNjQgfD0gVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9GQl9XQUlUX0ZPUl9TUEFDRTsKKwl9CisKKwl2YWw2NCAmPSB+KFZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfRkJfQUREUl9CRFJZKDcpKTsKKwl2YWw2NCB8PQorCSAgICBWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX0ZCX0FERFJfQkRSWSgKKwkJICAgIFZYR0VfSFdfTUFYX1BBWUxPQURfU0laRV81MTIpOworCisJdmFsNjQgfD0gVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9GQl9BRERSX0JEUllfRU47CisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT5ydGRtYV9yZF9vcHRpbWl6YXRpb25fY3RybCk7CisKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cF9pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSBWaXJ0dWFsIFBhdGggc3RydWN0dXJlCisgKiBUaGlzIHJvdXRpbmUgaXMgdGhlIGluaXRpYWwgcGhhc2Ugb2YgaW5pdCB3aGljaCByZXNldHMgdGhlIHZwYXRoIGFuZAorICogaW5pdGlhbGl6ZXMgdGhlIHNvZnR3YXJlIHN1cHBvcnQgc3RydWN0dXJlcy4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwX2luaXRpYWxpemUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgdnBfaWQsCisJCQlzdHJ1Y3QgdnhnZV9od192cF9jb25maWcgKmNvbmZpZykKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAoIShobGRldi0+dnBhdGhfYXNzaWdubWVudHMgJiB2eGdlX21CSVQodnBfaWQpKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfQVZBSUxBQkxFOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnBhdGggPSAmaGxkZXYtPnZpcnR1YWxfcGF0aHNbdnBfaWRdOworCisJdnBhdGgtPnZwX2lkID0gdnBfaWQ7CisJdnBhdGgtPnZwX29wZW4gPSBWWEdFX0hXX1ZQX09QRU47CisJdnBhdGgtPmhsZGV2ID0gaGxkZXY7CisJdnBhdGgtPnZwX2NvbmZpZyA9IGNvbmZpZzsKKwl2cGF0aC0+dnBfcmVnID0gaGxkZXYtPnZwYXRoX3JlZ1t2cF9pZF07CisJdnBhdGgtPnZwbWdtdF9yZWcgPSBobGRldi0+dnBtZ210X3JlZ1t2cF9pZF07CisKKwlfX3Z4Z2VfaHdfdnBhdGhfcmVzZXQoaGxkZXYsIHZwX2lkKTsKKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9yZXNldF9jaGVjayh2cGF0aCk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJbWVtc2V0KHZwYXRoLCAwLCBzaXplb2Yoc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCkpOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX21nbXRfcmVhZChobGRldiwgdnBhdGgpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCW1lbXNldCh2cGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgpKTsKKwkJZ290byBleGl0OworCX0KKworCUlOSVRfTElTVF9IRUFEKCZ2cGF0aC0+dnBhdGhfaGFuZGxlcyk7CisKKwl2cGF0aC0+c3dfc3RhdHMgPSAmaGxkZXYtPnN0YXRzLnN3X2Rldl9pbmZvX3N0YXRzLnZwYXRoX2luZm9bdnBfaWRdOworCisJVlhHRV9IV19ERVZJQ0VfVElNX0lOVF9NQVNLX1NFVChobGRldi0+dGltX2ludF9tYXNrMCwKKwkJaGxkZXYtPnRpbV9pbnRfbWFzazEsIHZwX2lkKTsKKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9pbml0aWFsaXplKGhsZGV2LCB2cF9pZCk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCV9fdnhnZV9od192cF90ZXJtaW5hdGUoaGxkZXYsIHZwX2lkKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cF90ZXJtaW5hdGUgLSBUZXJtaW5hdGUgVmlydHVhbCBQYXRoIHN0cnVjdHVyZQorICogVGhpcyByb3V0aW5lIGNsb3NlcyBhbGwgY2hhbm5lbHMgaXQgb3BlbmVkIGFuZCBmcmVldXAgbWVtb3J5CisgKi8KK3ZvaWQKK19fdnhnZV9od192cF90ZXJtaW5hdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LCB1MzIgdnBfaWQpCit7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisKKwl2cGF0aCA9ICZobGRldi0+dmlydHVhbF9wYXRoc1t2cF9pZF07CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikKKwkJZ290byBleGl0OworCisJVlhHRV9IV19ERVZJQ0VfVElNX0lOVF9NQVNLX1JFU0VUKHZwYXRoLT5obGRldi0+dGltX2ludF9tYXNrMCwKKwkJdnBhdGgtPmhsZGV2LT50aW1faW50X21hc2sxLCB2cGF0aC0+dnBfaWQpOworCWhsZGV2LT5zdGF0cy5od19kZXZfaW5mb19zdGF0cy52cGF0aF9pbmZvW3ZwYXRoLT52cF9pZF0gPSBOVUxMOworCisJbWVtc2V0KHZwYXRoLCAwLCBzaXplb2Yoc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCkpOworZXhpdDoKKwlyZXR1cm47Cit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX210dV9zZXQgLSBTZXQgTVRVLgorICogU2V0IG5ldyBNVFUgdmFsdWUuIEV4YW1wbGUsIHRvIHVzZSBqdW1ibyBmcmFtZXM6CisgKiB2eGdlX2h3X3ZwYXRoX210dV9zZXQobXlfZGV2aWNlLCA5NjAwKTsKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9tdHVfc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwgdTMyIG5ld19tdHUpCit7CisJdTY0IHZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKworCWlmICh2cCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCXZwYXRoID0gdnAtPnZwYXRoOworCisJbmV3X210dSArPSBWWEdFX0hXX01BQ19IRUFERVJfTUFYX1NJWkU7CisKKwlpZiAoKG5ld19tdHUgPCBWWEdFX0hXX01JTl9NVFUpIHx8IChuZXdfbXR1ID4gdnBhdGgtPm1heF9tdHUpKQorCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX01UVV9TSVpFOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJdmFsNjQgJj0gflZYR0VfSFdfUlhNQUNfVkNGRzBfUlRTX01BWF9GUk1fTEVOKDB4M2ZmZik7CisJdmFsNjQgfD0gVlhHRV9IV19SWE1BQ19WQ0ZHMF9SVFNfTUFYX0ZSTV9MRU4obmV3X210dSk7CisKKwl3cml0ZXEodmFsNjQsICZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisKKwl2cGF0aC0+dnBfY29uZmlnLT5tdHUgPSBuZXdfbXR1IC0gVlhHRV9IV19NQUNfSEVBREVSX01BWF9TSVpFOworCitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX29wZW4gLSBPcGVuIGEgdmlydHVhbCBwYXRoIG9uIGEgZ2l2ZW4gYWRhcHRlcgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIG9wZW4gYWNjZXNzIHRvIHZpcnR1YWwgcGF0aCBvZiBhbgorICogYWRhcHRlciBmb3Igb2ZmbG9hZCwgR1JPIG9wZXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24gcmV0dXJucworICogc3luY2hyb25vdXNseS4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9vcGVuKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJICAgc3RydWN0IHZ4Z2VfaHdfdnBhdGhfYXR0ciAqYXR0ciwKKwkJICAgc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKip2cGF0aF9oYW5kbGUpCit7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCisJdnBhdGggPSAmaGxkZXYtPnZpcnR1YWxfcGF0aHNbYXR0ci0+dnBfaWRdOworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX1NUQVRFOworCQlnb3RvIHZwYXRoX29wZW5fZXhpdDE7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X3ZwX2luaXRpYWxpemUoaGxkZXYsIGF0dHItPnZwX2lkLAorCQkJJmhsZGV2LT5jb25maWcudnBfY29uZmlnW2F0dHItPnZwX2lkXSk7CisKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gdnBhdGhfb3Blbl9leGl0MTsKKworCXZwID0gKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICopCisJCXZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlKSk7CisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJZ290byB2cGF0aF9vcGVuX2V4aXQyOworCX0KKworCW1lbXNldCh2cCwgMCwgc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlKSk7CisKKwl2cC0+dnBhdGggPSB2cGF0aDsKKworCWlmICh2cGF0aC0+dnBfY29uZmlnLT5maWZvLmVuYWJsZSA9PSBWWEdFX0hXX0ZJRk9fRU5BQkxFKSB7CisJCXN0YXR1cyA9IF9fdnhnZV9od19maWZvX2NyZWF0ZSh2cCwgJmF0dHItPmZpZm9fYXR0cik7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gdnBhdGhfb3Blbl9leGl0NjsKKwl9CisKKwlpZiAodnBhdGgtPnZwX2NvbmZpZy0+cmluZy5lbmFibGUgPT0gVlhHRV9IV19SSU5HX0VOQUJMRSkgeworCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfcmluZ19jcmVhdGUodnAsICZhdHRyLT5yaW5nX2F0dHIpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQlnb3RvIHZwYXRoX29wZW5fZXhpdDc7CisKKwkJX192eGdlX2h3X3ZwYXRoX3ByY19jb25maWd1cmUoaGxkZXYsIGF0dHItPnZwX2lkKTsKKwl9CisKKwl2cGF0aC0+Zmlmb2gtPnR4X2ludHJfbnVtID0KKwkJKGF0dHItPnZwX2lkICogVlhHRV9IV19NQVhfSU5UUl9QRVJfVlApICArCisJCQlWWEdFX0hXX1ZQQVRIX0lOVFJfVFg7CisKKwl2cGF0aC0+c3RhdHNfYmxvY2sgPSBfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FsbG9jYXRlKGhsZGV2LAorCQkJCVZYR0VfSFdfQkxPQ0tfU0laRSk7CisKKwlpZiAodnBhdGgtPnN0YXRzX2Jsb2NrID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJZ290byB2cGF0aF9vcGVuX2V4aXQ4OworCX0KKworCXZwYXRoLT5od19zdGF0cyA9IChzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvICopdnBhdGgtPgorCQkJc3RhdHNfYmxvY2stPm1lbWJsb2NrOworCW1lbXNldCh2cGF0aC0+aHdfc3RhdHMsIDAsCisJCXNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvKSk7CisKKwlobGRldi0+c3RhdHMuaHdfZGV2X2luZm9fc3RhdHMudnBhdGhfaW5mb1thdHRyLT52cF9pZF0gPQorCQkJCQkJdnBhdGgtPmh3X3N0YXRzOworCisJdnBhdGgtPmh3X3N0YXRzX3NhdiA9CisJCSZobGRldi0+c3RhdHMuaHdfZGV2X2luZm9fc3RhdHMudnBhdGhfaW5mb19zYXZbYXR0ci0+dnBfaWRdOworCW1lbXNldCh2cGF0aC0+aHdfc3RhdHNfc2F2LCAwLAorCQkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8pKTsKKworCXdyaXRlcSh2cGF0aC0+c3RhdHNfYmxvY2stPmRtYV9hZGRyLCAmdnBhdGgtPnZwX3JlZy0+c3RhdHNfY2ZnKTsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfZW5hYmxlKHZwKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gdnBhdGhfb3Blbl9leGl0ODsKKworCWxpc3RfYWRkKCZ2cC0+aXRlbSwgJnZwYXRoLT52cGF0aF9oYW5kbGVzKTsKKworCWhsZGV2LT52cGF0aHNfZGVwbG95ZWQgfD0gdnhnZV9tQklUKHZwYXRoLT52cF9pZCk7CisKKwkqdnBhdGhfaGFuZGxlID0gdnA7CisKKwlhdHRyLT5maWZvX2F0dHIudXNlcmRhdGEgPSB2cGF0aC0+Zmlmb2g7CisJYXR0ci0+cmluZ19hdHRyLnVzZXJkYXRhID0gdnBhdGgtPnJpbmdoOworCisJcmV0dXJuIFZYR0VfSFdfT0s7CisKK3ZwYXRoX29wZW5fZXhpdDg6CisJaWYgKHZwYXRoLT5yaW5naCAhPSBOVUxMKQorCQlfX3Z4Z2VfaHdfcmluZ19kZWxldGUodnApOwordnBhdGhfb3Blbl9leGl0NzoKKwlpZiAodnBhdGgtPmZpZm9oICE9IE5VTEwpCisJCV9fdnhnZV9od19maWZvX2RlbGV0ZSh2cCk7Cit2cGF0aF9vcGVuX2V4aXQ2OgorCXZmcmVlKHZwKTsKK3ZwYXRoX29wZW5fZXhpdDI6CisJX192eGdlX2h3X3ZwX3Rlcm1pbmF0ZShobGRldiwgYXR0ci0+dnBfaWQpOwordnBhdGhfb3Blbl9leGl0MToKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9yeF9kb29yYmVsbF9wb3N0IC0gQ2xvc2UgdGhlIGhhbmRsZSBnb3QgZnJvbSBwcmV2aW91cyB2cGF0aAorICogKHZwYXRoKSBvcGVuCisgKiBAdnA6IEhhbmRsZSBnb3QgZnJvbSBwcmV2aW91cyB2cGF0aCBvcGVuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsb3NlIGFjY2VzcyB0byB2aXJ0dWFsIHBhdGggb3BlbmVkCisgKiBlYXJsaWVyLgorICovCit2b2lkCit2eGdlX2h3X3ZwYXRoX3J4X2Rvb3JiZWxsX2luaXQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoID0gTlVMTDsKKwl1NjQgbmV3X2NvdW50LCB2YWw2NCwgdmFsMTY0OworCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZzsKKworCXZwYXRoID0gdnAtPnZwYXRoOworCXJpbmcgPSB2cGF0aC0+cmluZ2g7CisKKwluZXdfY291bnQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cnhkbWVtX3NpemUpOworCW5ld19jb3VudCAmPSAweDFmZmY7CisJdmFsMTY0ID0gKFZYR0VfSFdfUlhETUVNX1NJWkVfUFJDX1JYRE1FTV9TSVpFKG5ld19jb3VudCkpOworCisJd3JpdGVxKFZYR0VfSFdfUFJDX1JYRF9ET09SQkVMTF9ORVdfUVdfQ05UKHZhbDE2NCksCisJCSZ2cGF0aC0+dnBfcmVnLT5wcmNfcnhkX2Rvb3JiZWxsKTsKKwlyZWFkbCgmdnBhdGgtPnZwX3JlZy0+cHJjX3J4ZF9kb29yYmVsbCk7CisKKwl2YWwxNjQgLz0gMjsKKwl2YWw2NCA9IHJlYWRxKCZ2cGF0aC0+dnBfcmVnLT5wcmNfY2ZnNik7CisJdmFsNjQgPSBWWEdFX0hXX1BSQ19DRkc2X1JYRF9TUEFUKHZhbDY0KTsKKwl2YWw2NCAmPSAweDFmZjsKKworCS8qCisJICogRWFjaCBSeEQgaXMgb2YgNCBxd29yZHMKKwkgKi8KKwluZXdfY291bnQgLT0gKHZhbDY0ICsgMSk7CisJdmFsNjQgPSBtaW4odmFsMTY0LCBuZXdfY291bnQpIC8gNDsKKworCXJpbmctPnJ4ZHNfbGltaXQgPSBtaW4ocmluZy0+cnhkc19saW1pdCwgdmFsNjQpOworCWlmIChyaW5nLT5yeGRzX2xpbWl0IDwgNCkKKwkJcmluZy0+cnhkc19saW1pdCA9IDQ7Cit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX2Nsb3NlIC0gQ2xvc2UgdGhlIGhhbmRsZSBnb3QgZnJvbSBwcmV2aW91cyB2cGF0aCAodnBhdGgpIG9wZW4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjbG9zZSBhY2Nlc3MgdG8gdmlydHVhbCBwYXRoIG9wZW5lZAorICogZWFybGllci4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX2Nsb3NlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCA9IE5VTEw7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmggPSBOVUxMOworCXUzMiB2cF9pZCA9IHZwLT52cGF0aC0+dnBfaWQ7CisJdTMyIGlzX2VtcHR5ID0gVFJVRTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwl2cGF0aCA9IHZwLT52cGF0aDsKKwlkZXZoID0gdnBhdGgtPmhsZGV2OworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47CisJCWdvdG8gdnBhdGhfY2xvc2VfZXhpdDsKKwl9CisKKwlsaXN0X2RlbCgmdnAtPml0ZW0pOworCisJaWYgKCFsaXN0X2VtcHR5KCZ2cGF0aC0+dnBhdGhfaGFuZGxlcykpIHsKKwkJbGlzdF9hZGQoJnZwLT5pdGVtLCAmdnBhdGgtPnZwYXRoX2hhbmRsZXMpOworCQlpc19lbXB0eSA9IEZBTFNFOworCX0KKworCWlmICghaXNfZW1wdHkpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworCQlnb3RvIHZwYXRoX2Nsb3NlX2V4aXQ7CisJfQorCisJZGV2aC0+dnBhdGhzX2RlcGxveWVkICY9IH52eGdlX21CSVQodnBfaWQpOworCisJaWYgKHZwYXRoLT5yaW5naCAhPSBOVUxMKQorCQlfX3Z4Z2VfaHdfcmluZ19kZWxldGUodnApOworCisJaWYgKHZwYXRoLT5maWZvaCAhPSBOVUxMKQorCQlfX3Z4Z2VfaHdfZmlmb19kZWxldGUodnApOworCisJaWYgKHZwYXRoLT5zdGF0c19ibG9jayAhPSBOVUxMKQorCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2ZyZWUoZGV2aCwgdnBhdGgtPnN0YXRzX2Jsb2NrKTsKKworCXZmcmVlKHZwKTsKKworCV9fdnhnZV9od192cF90ZXJtaW5hdGUoZGV2aCwgdnBfaWQpOworCisJdnBhdGgtPnZwX29wZW4gPSBWWEdFX0hXX1ZQX05PVF9PUEVOOworCit2cGF0aF9jbG9zZV9leGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX3Jlc2V0IC0gUmVzZXRzIHZwYXRoCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVxdWVzdCBhIHJlc2V0IG9mIHZwYXRoCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9yZXNldChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJdTMyIHZwX2lkOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoID0gdnAtPnZwYXRoOworCisJdnBfaWQgPSB2cGF0aC0+dnBfaWQ7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9yZXNldCh2cGF0aC0+aGxkZXYsIHZwX2lkKTsKKwlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spCisJCXZwYXRoLT5zd19zdGF0cy0+c29mdF9yZXNldF9jbnQrKzsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIHZ4Z2VfaHdfdnBhdGhfcmVjb3Zlcl9mcm9tX3Jlc2V0IC0gUG9sbCBmb3IgcmVzZXQgY29tcGxldGUgYW5kIHJlLWluaXRpYWxpemUuCisgKiBUaGlzIGZ1bmN0aW9uIHBvbGwncyBmb3IgdGhlIHZwYXRoIHJlc2V0IGNvbXBsZXRpb24gYW5kIHJlIGluaXRpYWxpemVzCisgKiB0aGUgdnBhdGguCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfcmVjb3Zlcl9mcm9tX3Jlc2V0KHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCA9IE5VTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OworCXUzMiB2cF9pZDsKKworCXZwX2lkID0gdnAtPnZwYXRoLT52cF9pZDsKKwl2cGF0aCA9IHZwLT52cGF0aDsKKwlobGRldiA9IHZwYXRoLT5obGRldjsKKworCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOOworCQlnb3RvIGV4aXQ7CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3Jlc2V0X2NoZWNrKHZwYXRoKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9zd19yZXNldChobGRldiwgdnBfaWQpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX2luaXRpYWxpemUoaGxkZXYsIHZwX2lkKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCWlmICh2cGF0aC0+cmluZ2ggIT0gTlVMTCkKKwkJX192eGdlX2h3X3ZwYXRoX3ByY19jb25maWd1cmUoaGxkZXYsIHZwX2lkKTsKKworCW1lbXNldCh2cGF0aC0+aHdfc3RhdHMsIDAsCisJCXNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvKSk7CisKKwltZW1zZXQodnBhdGgtPmh3X3N0YXRzX3NhdiwgMCwKKwkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8pKTsKKworCXdyaXRlcSh2cGF0aC0+c3RhdHNfYmxvY2stPmRtYV9hZGRyLAorCQkmdnBhdGgtPnZwX3JlZy0+c3RhdHNfY2ZnKTsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfZW5hYmxlKHZwKTsKKworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdnhnZV9od192cGF0aF9lbmFibGUgLSBFbmFibGUgdnBhdGguCisgKiBUaGlzIHJvdXRpbmUgY2xlYXJzIHRoZSB2cGF0aCByZXNldCB0aGVyZWJ5IGVuYWJsaW5nIGEgdnBhdGgKKyAqIHRvIHN0YXJ0IGZvcndhcmRpbmcgZnJhbWVzIGFuZCBnZW5lcmF0aW5nIGludGVycnVwdHMuCisgKi8KK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfZW5hYmxlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CisJdTY0IHZhbDY0OworCisJaGxkZXYgPSB2cC0+dnBhdGgtPmhsZGV2OworCisJdmFsNjQgPSBWWEdFX0hXX0NNTl9SU1RIRExSX0NGRzFfQ0xSX1ZQQVRIX1JFU0VUKAorCQkxIDw8ICgxNiAtIHZwLT52cGF0aC0+dnBfaWQpKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMil2eGdlX2JWQUxuKHZhbDY0LCAwLCAzMiksCisJCSZobGRldi0+Y29tbW9uX3JlZy0+Y21uX3JzdGhkbHJfY2ZnMSk7Cit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX3N0YXRzX2VuYWJsZSAtIEVuYWJsZSB2cGF0aCBoL3dzdGF0aXN0aWNzLgorICogRW5hYmxlIHRoZSBETUEgdnBhdGggc3RhdGlzdGljcy4gVGhlIGZ1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZCB0byByZS1lbmFibGUKKyAqIHRoZSBhZGFwdGVyIHRvIHVwZGF0ZSBzdGF0cyBpbnRvIHRoZSBob3N0IG1lbW9yeQorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX3N0YXRzX2VuYWJsZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCisJdnBhdGggPSB2cC0+dnBhdGg7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweSh2cGF0aC0+aHdfc3RhdHNfc2F2LCB2cGF0aC0+aHdfc3RhdHMsCisJCQlzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbykpOworCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3N0YXRzX2dldCh2cGF0aCwgdnBhdGgtPmh3X3N0YXRzKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3MgLSBHZXQgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgZ2l2ZW4gbG9jYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG9mZnNldCBhbmQgcGVyZm9ybSBhbiBvcGVyYXRpb24KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3N0YXRzX2FjY2VzcyhzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKKwkJCSAgICAgdTMyIG9wZXJhdGlvbiwgdTMyIG9mZnNldCwgdTY0ICpzdGF0KQoreworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKworCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOOworCQlnb3RvIHZwYXRoX3N0YXRzX2FjY2Vzc19leGl0OworCX0KKworCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisKKwl2YWw2NCA9ICBWWEdFX0hXX1hNQUNfU1RBVFNfQUNDRVNTX0NNRF9PUChvcGVyYXRpb24pIHwKKwkJIFZYR0VfSFdfWE1BQ19TVEFUU19BQ0NFU1NfQ01EX1NUUk9CRSB8CisJCSBWWEdFX0hXX1hNQUNfU1RBVFNfQUNDRVNTX0NNRF9PRkZTRVRfU0VMKG9mZnNldCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTY0KHZhbDY0LAorCQkJCSZ2cF9yZWctPnhtYWNfc3RhdHNfYWNjZXNzX2NtZCwKKwkJCQlWWEdFX0hXX1hNQUNfU1RBVFNfQUNDRVNTX0NNRF9TVFJPQkUsCisJCQkJdnBhdGgtPmhsZGV2LT5jb25maWcuZGV2aWNlX3BvbGxfbWlsbGlzKTsKKworCWlmICgoc3RhdHVzID09IFZYR0VfSFdfT0spICYmIChvcGVyYXRpb24gPT0gVlhHRV9IV19TVEFUU19PUF9SRUFEKSkKKwkJKnN0YXQgPSByZWFkcSgmdnBfcmVnLT54bWFjX3N0YXRzX2FjY2Vzc19kYXRhKTsKKwllbHNlCisJCSpzdGF0ID0gMDsKKwordnBhdGhfc3RhdHNfYWNjZXNzX2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF94bWFjX3R4X3N0YXRzX2dldCAtIEdldCB0aGUgVFggU3RhdGlzdGljcyBvZiBhIHZwYXRoCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF94bWFjX3R4X3N0YXRzX2dldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKKwlzdHJ1Y3QgdnhnZV9od194bWFjX3ZwYXRoX3R4X3N0YXRzICp2cGF0aF90eF9zdGF0cykKK3sKKwl1NjQgKnZhbDY0OworCWludCBpOworCXUzMiBvZmZzZXQgPSBWWEdFX0hXX1NUQVRTX1ZQQVRIX1RYX09GRlNFVDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwl2YWw2NCA9ICh1NjQgKikgdnBhdGhfdHhfc3RhdHM7CisKKwlpZiAodnBhdGgtPnZwX29wZW4gPT0gVlhHRV9IV19WUF9OT1RfT1BFTikgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9WUEFUSF9OT1RfT1BFTjsKKwkJZ290byBleGl0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cykgLyA4OyBpKyspIHsKKwkJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3N0YXRzX2FjY2Vzcyh2cGF0aCwKKwkJCQkJVlhHRV9IV19TVEFUU19PUF9SRUFELAorCQkJCQlvZmZzZXQsIHZhbDY0KTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJZ290byBleGl0OworCQlvZmZzZXQrKzsKKwkJdmFsNjQrKzsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfeG1hY19yeF9zdGF0c19nZXQgLSBHZXQgdGhlIFJYIFN0YXRpc3RpY3Mgb2YgYSB2cGF0aAorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfeG1hY19yeF9zdGF0c19nZXQoc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGgsCisJCQlzdHJ1Y3QgdnhnZV9od194bWFjX3ZwYXRoX3J4X3N0YXRzICp2cGF0aF9yeF9zdGF0cykKK3sKKwl1NjQgKnZhbDY0OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlpbnQgaTsKKwl1MzIgb2Zmc2V0ID0gVlhHRV9IV19TVEFUU19WUEFUSF9SWF9PRkZTRVQ7CisJdmFsNjQgPSAodTY0ICopIHZwYXRoX3J4X3N0YXRzOworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47CisJCWdvdG8gZXhpdDsKKwl9CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdnhnZV9od194bWFjX3ZwYXRoX3J4X3N0YXRzKSAvIDg7IGkrKykgeworCQlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfYWNjZXNzKHZwYXRoLAorCQkJCQlWWEdFX0hXX1NUQVRTX09QX1JFQUQsCisJCQkJCW9mZnNldCA+PiAzLCB2YWw2NCk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWdvdG8gZXhpdDsKKworCQlvZmZzZXQgKz0gODsKKwkJdmFsNjQrKzsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfdnBhdGhfc3RhdHNfZ2V0IC0gR2V0IHRoZSB2cGF0aCBodyBzdGF0aXN0aWNzLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIF9fdnhnZV9od192cGF0aF9zdGF0c19nZXQoCisJCQlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKKwkJCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8gKmh3X3N0YXRzKQoreworCXU2NCB2YWw2NDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKworCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOOworCQlnb3RvIGV4aXQ7CisJfQorCXZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2RlYnVnX3N0YXRzMCk7CisJaHdfc3RhdHMtPmluaV9udW1fbXdyX3NlbnQgPQorCQkodTMyKVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMwX0dFVF9JTklfTlVNX01XUl9TRU5UKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZGVidWdfc3RhdHMxKTsKKwlod19zdGF0cy0+aW5pX251bV9tcmRfc2VudCA9CisJCSh1MzIpVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzFfR0VUX0lOSV9OVU1fTVJEX1NFTlQodmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czIpOworCWh3X3N0YXRzLT5pbmlfbnVtX2NwbF9yY3ZkID0KKwkJKHUzMilWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTMl9HRVRfSU5JX05VTV9DUExfUkNWRCh2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2RlYnVnX3N0YXRzMyk7CisJaHdfc3RhdHMtPmluaV9udW1fbXdyX2J5dGVfc2VudCA9CisJCVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMzX0dFVF9JTklfTlVNX01XUl9CWVRFX1NFTlQodmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9kZWJ1Z19zdGF0czQpOworCWh3X3N0YXRzLT5pbmlfbnVtX2NwbF9ieXRlX3JjdmQgPQorCQlWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTNF9HRVRfSU5JX05VTV9DUExfQllURV9SQ1ZEKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZGVidWdfc3RhdHM1KTsKKwlod19zdGF0cy0+d3JjcmR0YXJiX3hvZmYgPQorCQkodTMyKVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFM1X0dFVF9XUkNSRFRBUkJfWE9GRih2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2RlYnVnX3N0YXRzNik7CisJaHdfc3RhdHMtPnJkY3JkdGFyYl94b2ZmID0KKwkJKHUzMilWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTNl9HRVRfUkRDUkRUQVJCX1hPRkYodmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9nZW5zdGF0c19jb3VudDAxKTsKKwlod19zdGF0cy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQwID0KKwkodTMyKVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQwMV9HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDAoCisJCXZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQwMSk7CisJaHdfc3RhdHMtPnZwYXRoX2dlbnN0YXRzX2NvdW50MSA9CisJKHUzMilWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMDFfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQxKAorCQl2YWw2NCk7CisKKwl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnZwYXRoX2dlbnN0YXRzX2NvdW50MjMpOworCWh3X3N0YXRzLT52cGF0aF9nZW5zdGF0c19jb3VudDIgPQorCSh1MzIpVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDIzX0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMigKKwkJdmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9nZW5zdGF0c19jb3VudDAxKTsKKwlod19zdGF0cy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQzID0KKwkodTMyKVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQyM19HRVRfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDMoCisJCXZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQ0KTsKKwlod19zdGF0cy0+dnBhdGhfZ2Vuc3RhdHNfY291bnQ0ID0KKwkodTMyKVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQ0X0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNCgKKwkJdmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9nZW5zdGF0c19jb3VudDUpOworCWh3X3N0YXRzLT52cGF0aF9nZW5zdGF0c19jb3VudDUgPQorCSh1MzIpVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDVfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQ1KAorCQl2YWw2NCk7CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfeG1hY190eF9zdGF0c19nZXQodnBhdGgsICZod19zdGF0cy0+dHhfc3RhdHMpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3htYWNfcnhfc3RhdHNfZ2V0KHZwYXRoLCAmaHdfc3RhdHMtPnJ4X3N0YXRzKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCWdvdG8gZXhpdDsKKworCVZYR0VfSFdfVlBBVEhfU1RBVFNfUElPX1JFQUQoCisJCVZYR0VfSFdfU1RBVFNfVlBBVEhfUFJPR19FVkVOVF9WTlVNMF9PRkZTRVQpOworCisJaHdfc3RhdHMtPnByb2dfZXZlbnRfdm51bTAgPQorCQkJKHUzMilWWEdFX0hXX1NUQVRTX0dFVF9WUEFUSF9QUk9HX0VWRU5UX1ZOVU0wKHZhbDY0KTsKKworCWh3X3N0YXRzLT5wcm9nX2V2ZW50X3ZudW0xID0KKwkJCSh1MzIpVlhHRV9IV19TVEFUU19HRVRfVlBBVEhfUFJPR19FVkVOVF9WTlVNMSh2YWw2NCk7CisKKwlWWEdFX0hXX1ZQQVRIX1NUQVRTX1BJT19SRUFEKAorCQlWWEdFX0hXX1NUQVRTX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTJfT0ZGU0VUKTsKKworCWh3X3N0YXRzLT5wcm9nX2V2ZW50X3ZudW0yID0KKwkJCSh1MzIpVlhHRV9IV19TVEFUU19HRVRfVlBBVEhfUFJPR19FVkVOVF9WTlVNMih2YWw2NCk7CisKKwlod19zdGF0cy0+cHJvZ19ldmVudF92bnVtMyA9CisJCQkodTMyKVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTModmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5yeF9tdWx0aV9jYXN0X3N0YXRzKTsKKwlod19zdGF0cy0+cnhfbXVsdGlfY2FzdF9mcmFtZV9kaXNjYXJkID0KKwkJKHUxNilWWEdFX0hXX1JYX01VTFRJX0NBU1RfU1RBVFNfR0VUX0ZSQU1FX0RJU0NBUkQodmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5yeF9mcm1fdHJhbnNmZXJyZWQpOworCWh3X3N0YXRzLT5yeF9mcm1fdHJhbnNmZXJyZWQgPQorCQkodTMyKVZYR0VfSFdfUlhfRlJNX1RSQU5TRkVSUkVEX0dFVF9SWF9GUk1fVFJBTlNGRVJSRUQodmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5yeGRfcmV0dXJuZWQpOworCWh3X3N0YXRzLT5yeGRfcmV0dXJuZWQgPQorCQkodTE2KVZYR0VfSFdfUlhEX1JFVFVSTkVEX0dFVF9SWERfUkVUVVJORUQodmFsNjQpOworCisJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5kYmdfc3RhdHNfcnhfbXBhKTsKKwlod19zdGF0cy0+cnhfbXBhX2xlbl9mYWlsX2ZybXMgPQorCQkodTE2KVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9NUEFfTEVOX0ZBSUxfRlJNUyh2YWw2NCk7CisJaHdfc3RhdHMtPnJ4X21wYV9tcmtfZmFpbF9mcm1zID0KKwkJKHUxNilWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfTVBBX01SS19GQUlMX0ZSTVModmFsNjQpOworCWh3X3N0YXRzLT5yeF9tcGFfY3JjX2ZhaWxfZnJtcyA9CisJCSh1MTYpVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX01QQV9DUkNfRkFJTF9GUk1TKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+ZGJnX3N0YXRzX3J4X2ZhdSk7CisJaHdfc3RhdHMtPnJ4X3Blcm1pdHRlZF9mcm1zID0KKwkJKHUxNilWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfRkFVX1JYX1BFUk1JVFRFRF9GUk1TKHZhbDY0KTsKKwlod19zdGF0cy0+cnhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXMgPQorCSh1MTYpVlhHRV9IV19EQkdfU1RBVFNfR0VUX1JYX0ZBVV9SWF9WUF9SRVNFVF9ESVNDQVJERURfRlJNUyh2YWw2NCk7CisJaHdfc3RhdHMtPnJ4X3dvbF9mcm1zID0KKwkJKHUxNilWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfRkFVX1JYX1dPTF9GUk1TKHZhbDY0KTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dHhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXMpOworCWh3X3N0YXRzLT50eF92cF9yZXNldF9kaXNjYXJkZWRfZnJtcyA9CisJKHUxNilWWEdFX0hXX1RYX1ZQX1JFU0VUX0RJU0NBUkRFRF9GUk1TX0dFVF9UWF9WUF9SRVNFVF9ESVNDQVJERURfRlJNUygKKwkJdmFsNjQpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X2Jsb2NrcG9vbF9jcmVhdGUgLSBDcmVhdGUgYmxvY2sgcG9vbAorICovCisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19ibG9ja3Bvb2xfY3JlYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCSAgIHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICpibG9ja3Bvb2wsCisJCQkgICB1MzIgcG9vbF9zaXplLAorCQkJICAgdTMyIHBvb2xfbWF4KQoreworCXUzMiBpOworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICplbnRyeSA9IE5VTEw7CisJdm9pZCAqbWVtYmxvY2s7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlzdHJ1Y3QgcGNpX2RldiAqZG1hX2hhbmRsZTsKKwlzdHJ1Y3QgcGNpX2RldiAqYWNjX2hhbmRsZTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAoYmxvY2twb29sID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19GQUlMOworCQlnb3RvIGJsb2NrcG9vbF9jcmVhdGVfZXhpdDsKKwl9CisKKwlibG9ja3Bvb2wtPmhsZGV2ID0gaGxkZXY7CisJYmxvY2twb29sLT5ibG9ja19zaXplID0gVlhHRV9IV19CTE9DS19TSVpFOworCWJsb2NrcG9vbC0+cG9vbF9zaXplID0gMDsKKwlibG9ja3Bvb2wtPnBvb2xfbWF4ID0gcG9vbF9tYXg7CisJYmxvY2twb29sLT5yZXFfb3V0ID0gMDsKKworCUlOSVRfTElTVF9IRUFEKCZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBwb29sX3NpemUgKyBwb29sX21heDsgaSsrKSB7CisJCWVudHJ5ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkpLAorCQkJCUdGUF9LRVJORUwpOworCQlpZiAoZW50cnkgPT0gTlVMTCkgeworCQkJX192eGdlX2h3X2Jsb2NrcG9vbF9kZXN0cm95KGJsb2NrcG9vbCk7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQkJZ290byBibG9ja3Bvb2xfY3JlYXRlX2V4aXQ7CisJCX0KKwkJbGlzdF9hZGQoJmVudHJ5LT5pdGVtLCAmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwb29sX3NpemU7IGkrKykgeworCisJCW1lbWJsb2NrID0gdnhnZV9vc19kbWFfbWFsbG9jKAorCQkJCWhsZGV2LT5wZGV2LAorCQkJCVZYR0VfSFdfQkxPQ0tfU0laRSwKKwkJCQkmZG1hX2hhbmRsZSwKKwkJCQkmYWNjX2hhbmRsZSk7CisKKwkJaWYgKG1lbWJsb2NrID09IE5VTEwpIHsKKwkJCV9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveShibG9ja3Bvb2wpOworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gYmxvY2twb29sX2NyZWF0ZV9leGl0OworCQl9CisKKwkJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShobGRldi0+cGRldiwgbWVtYmxvY2ssCisJCQkJVlhHRV9IV19CTE9DS19TSVpFLCBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCisJCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IoaGxkZXYtPnBkZXYsCisJCQkJZG1hX2FkZHIpKSkgeworCisJCQl2eGdlX29zX2RtYV9mcmVlKGhsZGV2LT5wZGV2LCBtZW1ibG9jaywgJmFjY19oYW5kbGUpOworCQkJX192eGdlX2h3X2Jsb2NrcG9vbF9kZXN0cm95KGJsb2NrcG9vbCk7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQkJZ290byBibG9ja3Bvb2xfY3JlYXRlX2V4aXQ7CisJCX0KKworCQlpZiAoIWxpc3RfZW1wdHkoJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KSkKKwkJCWVudHJ5ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopCisJCQkJbGlzdF9maXJzdF9lbnRyeSgmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QsCisJCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5LAorCQkJCQlpdGVtKTsKKworCQlpZiAoZW50cnkgPT0gTlVMTCkKKwkJCWVudHJ5ID0KKwkJCSAgICBremFsbG9jKHNpemVvZihzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSksCisJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoZW50cnkgIT0gTlVMTCkgeworCQkJbGlzdF9kZWwoJmVudHJ5LT5pdGVtKTsKKwkJCWVudHJ5LT5sZW5ndGggPSBWWEdFX0hXX0JMT0NLX1NJWkU7CisJCQllbnRyeS0+bWVtYmxvY2sgPSBtZW1ibG9jazsKKwkJCWVudHJ5LT5kbWFfYWRkciA9IGRtYV9hZGRyOworCQkJZW50cnktPmFjY19oYW5kbGUgPSBhY2NfaGFuZGxlOworCQkJZW50cnktPmRtYV9oYW5kbGUgPSBkbWFfaGFuZGxlOworCQkJbGlzdF9hZGQoJmVudHJ5LT5pdGVtLAorCQkJCQkgICZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCk7CisJCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZSsrOworCQl9IGVsc2UgeworCQkJX192eGdlX2h3X2Jsb2NrcG9vbF9kZXN0cm95KGJsb2NrcG9vbCk7CisJCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCQkJZ290byBibG9ja3Bvb2xfY3JlYXRlX2V4aXQ7CisJCX0KKwl9CisKK2Jsb2NrcG9vbF9jcmVhdGVfZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogX192eGdlX2h3X2Jsb2NrcG9vbF9kZXN0cm95IC0gRGVhbGxvY2F0ZXMgdGhlIGJsb2NrIHBvb2wKKyAqLworCit2b2lkIF9fdnhnZV9od19ibG9ja3Bvb2xfZGVzdHJveShzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAqYmxvY2twb29sKQoreworCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpuOworCXUxNiByZXQ7CisKKwlpZiAoYmxvY2twb29sID09IE5VTEwpIHsKKwkJcmV0ID0gMTsKKwkJZ290byBleGl0OworCX0KKworCWhsZGV2ID0gYmxvY2twb29sLT5obGRldjsKKworCWxpc3RfZm9yX2VhY2hfc2FmZShwLCBuLCAmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpIHsKKworCQlwY2lfdW5tYXBfc2luZ2xlKGhsZGV2LT5wZGV2LAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5kbWFfYWRkciwKKwkJCSgoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+bGVuZ3RoLAorCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKworCQl2eGdlX29zX2RtYV9mcmVlKGhsZGV2LT5wZGV2LAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5tZW1ibG9jaywKKwkJCSYoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopIHApLT5hY2NfaGFuZGxlKTsKKworCQlsaXN0X2RlbCgKKwkJCSYoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPml0ZW0pOworCQlrZnJlZShwKTsKKwkJYmxvY2twb29sLT5wb29sX3NpemUtLTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUocCwgbiwgJmJsb2NrcG9vbC0+ZnJlZV9lbnRyeV9saXN0KSB7CisJCWxpc3RfZGVsKAorCQkJJigoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+aXRlbSk7CisJCWtmcmVlKCh2b2lkICopcCk7CisJfQorCXJldCA9IDA7CitleGl0OgorCXJldHVybjsKK30KKworLyoKKyAqIF9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX2FkZCAtIFJlcXVlc3QgYWRkaXRpb25hbCBibG9ja3MKKyAqLworc3RhdGljCit2b2lkIF9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX2FkZChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAqYmxvY2twb29sKQoreworCXUzMiBucmVxID0gMCwgaTsKKworCWlmICgoYmxvY2twb29sLT5wb29sX3NpemUgICsgIGJsb2NrcG9vbC0+cmVxX291dCkgPAorCQlWWEdFX0hXX01JTl9ETUFfQkxPQ0tfUE9PTF9TSVpFKSB7CisJCW5yZXEgPSBWWEdFX0hXX0lOQ1JfRE1BX0JMT0NLX1BPT0xfU0laRTsKKwkJYmxvY2twb29sLT5yZXFfb3V0ICs9IG5yZXE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5yZXE7IGkrKykKKwkJdnhnZV9vc19kbWFfbWFsbG9jX2FzeW5jKAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKWJsb2NrcG9vbC0+aGxkZXYpLT5wZGV2LAorCQkJYmxvY2twb29sLT5obGRldiwgVlhHRV9IV19CTE9DS19TSVpFKTsKK30KKworLyoKKyAqIF9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX3JlbW92ZSAtIEZyZWUgYWRkaXRpb25hbCBibG9ja3MKKyAqLworc3RhdGljCit2b2lkIF9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX3JlbW92ZShzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAqYmxvY2twb29sKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCkgeworCisJCWlmIChibG9ja3Bvb2wtPnBvb2xfc2l6ZSA8IGJsb2NrcG9vbC0+cG9vbF9tYXgpCisJCQlicmVhazsKKworCQlwY2lfdW5tYXBfc2luZ2xlKAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKWJsb2NrcG9vbC0+aGxkZXYpLT5wZGV2LAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5kbWFfYWRkciwKKwkJCSgoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKilwKS0+bGVuZ3RoLAorCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKworCQl2eGdlX29zX2RtYV9mcmVlKAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKWJsb2NrcG9vbC0+aGxkZXYpLT5wZGV2LAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKXApLT5tZW1ibG9jaywKKwkJCSYoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPmFjY19oYW5kbGUpOworCisJCWxpc3RfZGVsKCYoKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICopcCktPml0ZW0pOworCisJCWxpc3RfYWRkKHAsICZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCk7CisKKwkJYmxvY2twb29sLT5wb29sX3NpemUtLTsKKworCX0KK30KKworLyoKKyAqIHZ4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FkZCAtIGNhbGxiYWNrIGZvciB2eGdlX29zX2RtYV9tYWxsb2NfYXN5bmMKKyAqIEFkZHMgYSBibG9jayB0byBibG9jayBwb29sCisgKi8KK3ZvaWQgdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfYWRkKAorCQkJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCQl2b2lkICpibG9ja19hZGRyLAorCQkJdTMyIGxlbmd0aCwKKwkJCXN0cnVjdCBwY2lfZGV2ICpkbWFfaCwKKwkJCXN0cnVjdCBwY2lfZGV2ICphY2NfaGFuZGxlKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICAqYmxvY2twb29sOworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICAqZW50cnkgPSBOVUxMOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXUzMiByZXFfb3V0OworCisJYmxvY2twb29sID0gJmRldmgtPmJsb2NrX3Bvb2w7CisKKwlpZiAoYmxvY2tfYWRkciA9PSBOVUxMKSB7CisJCWJsb2NrcG9vbC0+cmVxX291dC0tOworCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGRldmgtPnBkZXYsIGJsb2NrX2FkZHIsIGxlbmd0aCwKKwkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCisJaWYgKHVubGlrZWx5KHBjaV9kbWFfbWFwcGluZ19lcnJvcihkZXZoLT5wZGV2LCBkbWFfYWRkcikpKSB7CisKKwkJdnhnZV9vc19kbWFfZnJlZShkZXZoLT5wZGV2LCBibG9ja19hZGRyLCAmYWNjX2hhbmRsZSk7CisJCWJsb2NrcG9vbC0+cmVxX291dC0tOworCQlzdGF0dXMgPSBWWEdFX0hXX0ZBSUw7CisJCWdvdG8gZXhpdDsKKwl9CisKKworCWlmICghbGlzdF9lbXB0eSgmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QpKQorCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQorCQkJbGlzdF9maXJzdF9lbnRyeSgmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QsCisJCQkJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnksCisJCQkJaXRlbSk7CisKKwlpZiAoZW50cnkgPT0gTlVMTCkKKwkJZW50cnkgPSAoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKikKKwkJCXZtYWxsb2Moc2l6ZW9mKHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5KSk7CisJZWxzZQorCQlsaXN0X2RlbCgmZW50cnktPml0ZW0pOworCisJaWYgKGVudHJ5ICE9IE5VTEwpIHsKKwkJZW50cnktPmxlbmd0aCA9IGxlbmd0aDsKKwkJZW50cnktPm1lbWJsb2NrID0gYmxvY2tfYWRkcjsKKwkJZW50cnktPmRtYV9hZGRyID0gZG1hX2FkZHI7CisJCWVudHJ5LT5hY2NfaGFuZGxlID0gYWNjX2hhbmRsZTsKKwkJZW50cnktPmRtYV9oYW5kbGUgPSBkbWFfaDsKKwkJbGlzdF9hZGQoJmVudHJ5LT5pdGVtLCAmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpOworCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZSsrOworCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCX0gZWxzZQorCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9PVVRfT0ZfTUVNT1JZOworCisJYmxvY2twb29sLT5yZXFfb3V0LS07CisKKwlyZXFfb3V0ID0gYmxvY2twb29sLT5yZXFfb3V0OworZXhpdDoKKwlyZXR1cm47Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfYmxvY2twb29sX21hbGxvYyAtIEFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIGZyb20gcG9vbAorICogQWxsb2NhdGVzIGEgYmxvY2sgb2YgbWVtb3J5IG9mIGdpdmVuIHNpemUsIGVpdGhlciBmcm9tIGJsb2NrIHBvb2wKKyAqIG9yIGJ5IGNhbGxpbmcgdnhnZV9vc19kbWFfbWFsbG9jKCkKKyAqLwordm9pZCAqCitfX3Z4Z2VfaHdfYmxvY2twb29sX21hbGxvYyhzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwgdTMyIHNpemUsCisJCQkJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKmRtYV9vYmplY3QpCit7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKmVudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCAgKmJsb2NrcG9vbDsKKwl2b2lkICptZW1ibG9jayA9IE5VTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJYmxvY2twb29sID0gJmRldmgtPmJsb2NrX3Bvb2w7CisKKwlpZiAoc2l6ZSAhPSBibG9ja3Bvb2wtPmJsb2NrX3NpemUpIHsKKworCQltZW1ibG9jayA9IHZ4Z2Vfb3NfZG1hX21hbGxvYyhkZXZoLT5wZGV2LCBzaXplLAorCQkJCQkJJmRtYV9vYmplY3QtPmhhbmRsZSwKKwkJCQkJCSZkbWFfb2JqZWN0LT5hY2NfaGFuZGxlKTsKKworCQlpZiAobWVtYmxvY2sgPT0gTlVMTCkgeworCQkJc3RhdHVzID0gVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWRtYV9vYmplY3QtPmFkZHIgPSBwY2lfbWFwX3NpbmdsZShkZXZoLT5wZGV2LCBtZW1ibG9jaywgc2l6ZSwKKwkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKworCQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGRldmgtPnBkZXYsCisJCQkJZG1hX29iamVjdC0+YWRkcikpKSB7CisJCQl2eGdlX29zX2RtYV9mcmVlKGRldmgtPnBkZXYsIG1lbWJsb2NrLAorCQkJCSZkbWFfb2JqZWN0LT5hY2NfaGFuZGxlKTsKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCX0gZWxzZSB7CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCkpCisJCQllbnRyeSA9IChzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqKQorCQkJCWxpc3RfZmlyc3RfZW50cnkoJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0LAorCQkJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSwKKwkJCQkJaXRlbSk7CisKKwkJaWYgKGVudHJ5ICE9IE5VTEwpIHsKKwkJCWxpc3RfZGVsKCZlbnRyeS0+aXRlbSk7CisJCQlkbWFfb2JqZWN0LT5hZGRyID0gZW50cnktPmRtYV9hZGRyOworCQkJZG1hX29iamVjdC0+aGFuZGxlID0gZW50cnktPmRtYV9oYW5kbGU7CisJCQlkbWFfb2JqZWN0LT5hY2NfaGFuZGxlID0gZW50cnktPmFjY19oYW5kbGU7CisJCQltZW1ibG9jayA9IGVudHJ5LT5tZW1ibG9jazsKKworCQkJbGlzdF9hZGQoJmVudHJ5LT5pdGVtLAorCQkJCSZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCk7CisJCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZS0tOworCQl9CisKKwkJaWYgKG1lbWJsb2NrICE9IE5VTEwpCisJCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19hZGQoYmxvY2twb29sKTsKKwl9CitleGl0OgorCXJldHVybiBtZW1ibG9jazsKK30KKworLyoKKyAqIF9fdnhnZV9od19ibG9ja3Bvb2xfZnJlZSAtIEZyZWVzIHRoZSBtZW1vcnkgYWxsY29hdGVkIHdpdGgKKwkJCQlfX3Z4Z2VfaHdfYmxvY2twb29sX21hbGxvYworICovCit2b2lkCitfX3Z4Z2VfaHdfYmxvY2twb29sX2ZyZWUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCQl2b2lkICptZW1ibG9jaywgdTMyIHNpemUsCisJCQlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2RtYSAqZG1hX29iamVjdCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqZW50cnkgPSBOVUxMOworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICAqYmxvY2twb29sOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWJsb2NrcG9vbCA9ICZkZXZoLT5ibG9ja19wb29sOworCisJaWYgKHNpemUgIT0gYmxvY2twb29sLT5ibG9ja19zaXplKSB7CisJCXBjaV91bm1hcF9zaW5nbGUoZGV2aC0+cGRldiwgZG1hX29iamVjdC0+YWRkciwgc2l6ZSwKKwkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJCXZ4Z2Vfb3NfZG1hX2ZyZWUoZGV2aC0+cGRldiwgbWVtYmxvY2ssICZkbWFfb2JqZWN0LT5hY2NfaGFuZGxlKTsKKwl9IGVsc2UgeworCisJCWlmICghbGlzdF9lbXB0eSgmYmxvY2twb29sLT5mcmVlX2VudHJ5X2xpc3QpKQorCQkJZW50cnkgPSAoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKikKKwkJCQlsaXN0X2ZpcnN0X2VudHJ5KCZibG9ja3Bvb2wtPmZyZWVfZW50cnlfbGlzdCwKKwkJCQkJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnksCisJCQkJCWl0ZW0pOworCisJCWlmIChlbnRyeSA9PSBOVUxMKQorCQkJZW50cnkgPSAoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKikKKwkJCQl2bWFsbG9jKHNpemVvZigKKwkJCQkJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkpKTsKKwkJZWxzZQorCQkJbGlzdF9kZWwoJmVudHJ5LT5pdGVtKTsKKworCQlpZiAoZW50cnkgIT0gTlVMTCkgeworCQkJZW50cnktPmxlbmd0aCA9IHNpemU7CisJCQllbnRyeS0+bWVtYmxvY2sgPSBtZW1ibG9jazsKKwkJCWVudHJ5LT5kbWFfYWRkciA9IGRtYV9vYmplY3QtPmFkZHI7CisJCQllbnRyeS0+YWNjX2hhbmRsZSA9IGRtYV9vYmplY3QtPmFjY19oYW5kbGU7CisJCQllbnRyeS0+ZG1hX2hhbmRsZSA9IGRtYV9vYmplY3QtPmhhbmRsZTsKKwkJCWxpc3RfYWRkKCZlbnRyeS0+aXRlbSwKKwkJCQkJJmJsb2NrcG9vbC0+ZnJlZV9ibG9ja19saXN0KTsKKwkJCWJsb2NrcG9vbC0+cG9vbF9zaXplKys7CisJCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCQl9IGVsc2UKKwkJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX09VVF9PRl9NRU1PUlk7CisKKwkJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKQorCQkJX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja3NfcmVtb3ZlKGJsb2NrcG9vbCk7CisJfQorCisJcmV0dXJuOworfQorCisvKgorICogX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hbGxvY2F0ZSAtIEFsbG9jYXRlcyBhIGJsb2NrIGZyb20gYmxvY2sgcG9vbAorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgYSBibG9jayBmcm9tIGJsb2NrIHBvb2wgb3IgZnJvbSB0aGUgc3lzdGVtCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICoKK19fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfYWxsb2NhdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsIHUzMiBzaXplKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5ICplbnRyeSA9IE5VTEw7CisJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgICpibG9ja3Bvb2w7CisKKwlibG9ja3Bvb2wgPSAmZGV2aC0+YmxvY2tfcG9vbDsKKworCWlmIChzaXplID09IGJsb2NrcG9vbC0+YmxvY2tfc2l6ZSkgeworCisJCWlmICghbGlzdF9lbXB0eSgmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpKQorCQkJZW50cnkgPSAoc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKikKKwkJCQlsaXN0X2ZpcnN0X2VudHJ5KCZibG9ja3Bvb2wtPmZyZWVfYmxvY2tfbGlzdCwKKwkJCQkJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnksCisJCQkJCWl0ZW0pOworCisJCWlmIChlbnRyeSAhPSBOVUxMKSB7CisJCQlsaXN0X2RlbCgmZW50cnktPml0ZW0pOworCQkJYmxvY2twb29sLT5wb29sX3NpemUtLTsKKwkJfQorCX0KKworCWlmIChlbnRyeSAhPSBOVUxMKQorCQlfX3Z4Z2VfaHdfYmxvY2twb29sX2Jsb2Nrc19hZGQoYmxvY2twb29sKTsKKworCXJldHVybiBlbnRyeTsKK30KKworLyoKKyAqIF9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfZnJlZSAtIEZyZWVzIGEgYmxvY2sgZnJvbSBibG9jayBwb29sCisgKiBAZGV2aDogSGFsIGRldmljZQorICogQGVudHJ5OiBFbnRyeSBvZiBibG9jayB0byBiZSBmcmVlZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgYSBibG9jayBmcm9tIGJsb2NrIHBvb2wKKyAqLwordm9pZAorX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICAqYmxvY2twb29sOworCisJYmxvY2twb29sID0gJmRldmgtPmJsb2NrX3Bvb2w7CisKKwlpZiAoZW50cnktPmxlbmd0aCA9PSBibG9ja3Bvb2wtPmJsb2NrX3NpemUpIHsKKwkJbGlzdF9hZGQoJmVudHJ5LT5pdGVtLCAmYmxvY2twb29sLT5mcmVlX2Jsb2NrX2xpc3QpOworCQlibG9ja3Bvb2wtPnBvb2xfc2l6ZSsrOworCX0KKworCV9fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tzX3JlbW92ZShibG9ja3Bvb2wpOworCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYmRmNmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmgKQEAgLTAsMCArMSwyMjU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAorICogcmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAgVGhpcyBmaWxlIGlzIG5vdAorICogYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKKyAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogdnhnZS1jb25maWcuaDogRHJpdmVyIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KKyAqICAgICAgICAgICAgICAgIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgorICogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBWWEdFX0NPTkZJR19ICisjZGVmaW5lIFZYR0VfQ09ORklHX0gKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpZm5kZWYgVlhHRV9DQUNIRV9MSU5FX1NJWkUKKyNkZWZpbmUgVlhHRV9DQUNIRV9MSU5FX1NJWkUgMTI4CisjZW5kaWYKKworI2RlZmluZSB2eGdlX29zX3ZhcHJpbnRmKGxldmVsLCBtYXNrLCBmbXQsIC4uLikgeyBcCisJY2hhciBidWZmWzI1NV07IFwKKwkJc25wcmludGYoYnVmZiwgMjU1LCBmbXQsIF9fVkFfQVJHU19fKTsgXAorCQlwcmludGsoYnVmZik7IFwKKwkJcHJpbnRrKCJcbiIpOyBcCit9CisKKyNpZm5kZWYgVlhHRV9BTElHTgorI2RlZmluZSBWWEdFX0FMSUdOKGFkcnMsIHNpemUpIFwKKwkoKChzaXplKSAtICgoKHU2NClhZHJzKSAmICgoc2l6ZSktMSkpKSAmICgoc2l6ZSktMSkpCisjZW5kaWYKKworI2RlZmluZSBWWEdFX0hXX01JTl9NVFUJCQkJNjgKKyNkZWZpbmUgVlhHRV9IV19NQVhfTVRVCQkJCTk2MDAKKyNkZWZpbmUgVlhHRV9IV19ERUZBVUxUX01UVQkJCTE1MDAKKworI2lmZGVmIFZYR0VfREVCVUdfQVNTRVJUCisKKy8qKgorICogdnhnZV9hc3NlcnQKKyAqIEB0ZXN0OiBDLWNvbmRpdGlvbiB0byBjaGVjaworICogQGZtdDogcHJpbnRmIGxpa2UgZm9ybWF0IHN0cmluZworICoKKyAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0cmFkaXRpb25hbCBhc3NlcnQuIEJ5IGRlZmF1bHQgYXNzZXJ0aW9ucworICogYXJlIGVuYWJsZWQuIEl0IGNhbiBiZSBkaXNhYmxlZCBieSB1bmRlZmluaW5nIFZYR0VfREVCVUdfQVNTRVJUIG1hY3JvIGluCisgKiBjb21waWxhdGlvbgorICogdGltZS4KKyAqLworI2RlZmluZSB2eGdlX2Fzc2VydCh0ZXN0KSB7IFwKKwlpZiAoISh0ZXN0KSkgXAorCQl2eGdlX29zX2J1ZygiYmFkIGNvbmQ6ICIjdGVzdCIgYXQgJXM6JWRcbiIsIFwKKwkJCQlfX0ZJTEVfXywgX19MSU5FX18pOyB9CisjZWxzZQorI2RlZmluZSB2eGdlX2Fzc2VydCh0ZXN0KQorI2VuZGlmIC8qIGVuZCBvZiBWWEdFX0RFQlVHX0FTU0VSVCAqLworCisvKioKKyAqIGVudW0gZW51bSB2eGdlX2RlYnVnX2xldmVsCisgKiBAVlhHRV9OT05FOiBkZWJ1ZyBkaXNhYmxlZAorICogQFZYR0VfRVJSOiBhbGwgZXJyb3JzIGdvaW5nIHRvIGJlIGxvZ2dlZCBvdXQKKyAqIEBWWEdFX1RSQUNFOiBhbGwgZXJyb3JzIHBsdXMgYWxsIGtpbmQgb2YgdmVyYm9zZSB0cmFjaW5nIHByaW50IG91dHMKKyAqICAgICAgICAgICAgICAgICBnb2luZyB0byBiZSBsb2dnZWQgb3V0LiBWZXJ5IG5vaXN5LgorICoKKyAqIFRoaXMgZW51bWVyYXRpb24gZ29pbmcgdG8gYmUgdXNlZCB0byBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQKKyAqIGRlYnVnIGxldmVscyBkdXJpbmcgcnVudGltZSBpZiBERUJVRyBtYWNybyBkZWZpbmVkIGR1cmluZworICogY29tcGlsYXRpb24uIElmIERFQlVHIG1hY3JvIG5vdCBkZWZpbmVkIHRoYW4gY29kZSB3aWxsIGJlCisgKiBjb21waWxlZCBvdXQuCisgKi8KK2VudW0gdnhnZV9kZWJ1Z19sZXZlbCB7CisJVlhHRV9OT05FICAgPSAwLAorCVZYR0VfVFJBQ0UgID0gMSwKKwlWWEdFX0VSUiAgICA9IDIKK307CisKKyNkZWZpbmUgTlVMTF9WUElECQkJCQkweEZGRkZGRkZGCisjaWZkZWYgQ09ORklHX1ZYR0VfREVCVUdfVFJBQ0VfQUxMCisjZGVmaW5lIFZYR0VfREVCVUdfTU9EVUxFX01BU0sgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgVlhHRV9ERUJVR19UUkFDRV9NQVNLICAgMHhmZmZmZmZmZgorI2RlZmluZSBWWEdFX0RFQlVHX0VSUl9NQVNLICAgICAweGZmZmZmZmZmCisjZGVmaW5lIFZYR0VfREVCVUdfTUFTSyAgICAgICAgIDB4MDAwMDAxZmYKKyNlbHNlCisjZGVmaW5lIFZYR0VfREVCVUdfTU9EVUxFX01BU0sgIDB4MjAwMDAwMDAKKyNkZWZpbmUgVlhHRV9ERUJVR19UUkFDRV9NQVNLICAgMHgyMDAwMDAwMAorI2RlZmluZSBWWEdFX0RFQlVHX0VSUl9NQVNLICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFZYR0VfREVCVUdfTUFTSyAgICAgICAgIDB4MDAwMDAwMDEKKyNlbmRpZgorCisvKgorICogQFZYR0VfQ09NUE9ORU5UX0xMOiBkbyBkZWJ1ZyBmb3IgdnhnZSBsaW5rIGxheWVyIG1vZHVsZQorICogQFZYR0VfQ09NUE9ORU5UX0FMTDogYWN0aXZhdGUgZGVidWcgZm9yIGFsbCBtb2R1bGVzIHdpdGggbm8gZXhjZXB0aW9ucworICoKKyAqIFRoaXMgZW51bWVyYXRpb24gZ29pbmcgdG8gYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBtb2R1bGVzCisgKiBvciBsaWJyYXJpZXMgZHVyaW5nIGNvbXBpbGF0aW9uIGFuZCBydW50aW1lLiAgTWFrZWZpbGUgbXVzdCBkZWNsYXJlCisgKiBWWEdFX0RFQlVHX01PRFVMRV9NQVNLIG1hY3JvIGFuZCBzZXQgaXQgdG8gcHJvcGVyIHZhbHVlLgorICovCisjZGVmaW5lCVZYR0VfQ09NUE9ORU5UX0xMCQkJCTB4MjAwMDAwMDAKKyNkZWZpbmUJVlhHRV9DT01QT05FTlRfQUxMCQkJCTB4ZmZmZmZmZmYKKworI2RlZmluZSBWWEdFX0hXX0JBU0VfSU5GCTEwMAorI2RlZmluZSBWWEdFX0hXX0JBU0VfRVJSCTIwMAorI2RlZmluZSBWWEdFX0hXX0JBU0VfQkFEQ0ZHCTMwMAorCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHsKKwlWWEdFX0hXX09LCQkJCSAgPSAwLAorCVZYR0VfSFdfRkFJTAkJCQkgID0gMSwKKwlWWEdFX0hXX1BFTkRJTkcJCQkJICA9IDIsCisJVlhHRV9IV19DT01QTEVUSU9OU19SRU1BSU4JCSAgPSAzLAorCisJVlhHRV9IV19JTkZfTk9fTU9SRV9DT01QTEVURURfREVTQ1JJUFRPUlMgPSBWWEdFX0hXX0JBU0VfSU5GICsgMSwKKwlWWEdFX0hXX0lORl9PVVRfT0ZfREVTQ1JJUFRPUlMJCSAgPSBWWEdFX0hXX0JBU0VfSU5GICsgMiwKKworCVZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDEsCisJVlhHRV9IV19FUlJfT1VUX09GX01FTU9SWQkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAyLAorCVZYR0VfSFdfRVJSX1ZQQVRIX05PVF9BVkFJTEFCTEUJICAJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAzLAorCVZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDQsCisJVlhHRV9IV19FUlJfV1JPTkdfSVJRCQkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyA1LAorCVZYR0VfSFdfRVJSX1NXQVBQRVJfQ1RSTAkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyA2LAorCVZYR0VfSFdfRVJSX0lOVkFMSURfTVRVX1NJWkUJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgNywKKwlWWEdFX0hXX0VSUl9JTlZBTElEX0lOREVYCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDgsCisJVlhHRV9IV19FUlJfSU5WQUxJRF9UWVBFCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDksCisJVlhHRV9IV19FUlJfSU5WQUxJRF9PRkZTRVQJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMTAsCisJVlhHRV9IV19FUlJfSU5WQUxJRF9ERVZJQ0UJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMTEsCisJVlhHRV9IV19FUlJfVkVSU0lPTl9DT05GTElDVAkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAxMiwKKwlWWEdFX0hXX0VSUl9JTlZBTElEX1BDSV9JTkZPCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDEzLAorCVZYR0VfSFdfRVJSX0lOVkFMSURfVENPREUgCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDE0LAorCVZYR0VfSFdfRVJSX0lOVkFMSURfQkxPQ0tfU0laRQkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAxNSwKKwlWWEdFX0hXX0VSUl9JTlZBTElEX1NUQVRFCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDE2LAorCVZYR0VfSFdfRVJSX1BSSVZJTEFHRURfT1BFQVJBVElPTgkgID0gVlhHRV9IV19CQVNFX0VSUiArIDE3LAorCVZYR0VfSFdfRVJSX0lOVkFMSURfUE9SVCAJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMTgsCisJVlhHRV9IV19FUlJfRklGTwkJIAkgID0gVlhHRV9IV19CQVNFX0VSUiArIDE5LAorCVZYR0VfSFdfRVJSX1ZQQVRICQkJICA9IFZYR0VfSFdfQkFTRV9FUlIgKyAyMCwKKwlWWEdFX0hXX0VSUl9DUklUSUNBTAkJCSAgPSBWWEdFX0hXX0JBU0VfRVJSICsgMjEsCisJVlhHRV9IV19FUlJfU0xPVF9GUkVFWkUgCQkgID0gVlhHRV9IV19CQVNFX0VSUiArIDIyLAorCisJVlhHRV9IV19CQURDRkdfUklOR19JTkRJQ0FURV9NQVhfUEtUUwkgID0gVlhHRV9IV19CQVNFX0JBRENGRyArIDEsCisJVlhHRV9IV19CQURDRkdfRklGT19CTE9DS1MJCSAgPSBWWEdFX0hXX0JBU0VfQkFEQ0ZHICsgMiwKKwlWWEdFX0hXX0JBRENGR19WUEFUSF9NVFUJCSAgPSBWWEdFX0hXX0JBU0VfQkFEQ0ZHICsgMywKKwlWWEdFX0hXX0JBRENGR19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUcJICA9IFZYR0VfSFdfQkFTRV9CQURDRkcgKyA0LAorCVZYR0VfSFdfQkFEQ0ZHX1ZQQVRIX01JTl9CQU5EV0lEVEgJICA9IFZYR0VfSFdfQkFTRV9CQURDRkcgKyA1LAorCVZYR0VfSFdfQkFEQ0ZHX0lOVFJfTU9ERQkJICA9IFZYR0VfSFdfQkFTRV9CQURDRkcgKyA2LAorCVZYR0VfSFdfQkFEQ0ZHX1JUU19NQUNfRU4JCSAgPSBWWEdFX0hXX0JBU0VfQkFEQ0ZHICsgNywKKworCVZYR0VfSFdfRU9GX1RSQUNFX0JVRgkJCSAgPSAtMQorfTsKKworLyoqCisgKiBlbnVtIGVudW0gdnhnZV9od19kZXZpY2VfbGlua19zdGF0ZSAtIExpbmsgc3RhdGUgZW51bWVyYXRpb24uCisgKiBAVlhHRV9IV19MSU5LX05PTkU6IEludmFsaWQgbGluayBzdGF0ZS4KKyAqIEBWWEdFX0hXX0xJTktfRE9XTjogTGluayBpcyBkb3duLgorICogQFZYR0VfSFdfTElOS19VUDogTGluayBpcyB1cC4KKyAqCisgKi8KK2VudW0gdnhnZV9od19kZXZpY2VfbGlua19zdGF0ZSB7CisJVlhHRV9IV19MSU5LX05PTkUsCisJVlhHRV9IV19MSU5LX0RPV04sCisJVlhHRV9IV19MSU5LX1VQCit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X2RldmljZV9kYXRlIC0gRGF0ZSBGb3JtYXQKKyAqIEBkYXk6IERheQorICogQG1vbnRoOiBNb250aAorICogQHllYXI6IFllYXIKKyAqIEBkYXRlOiBEYXRlIGluIHN0cmluZyBmb3JtYXQKKyAqCisgKiBTdHJ1Y3R1cmUgZm9yIHJldHVybmluZyBkYXRlCisgKi8KKworI2RlZmluZSBWWEdFX0hXX0ZXX1NUUkxFTgkzMgorc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2RhdGUgeworCXUzMiAgICAgZGF5OworCXUzMiAgICAgbW9udGg7CisJdTMyICAgICB5ZWFyOworCWNoYXIgICAgZGF0ZVtWWEdFX0hXX0ZXX1NUUkxFTl07Cit9OworCitzdHJ1Y3QgdnhnZV9od19kZXZpY2VfdmVyc2lvbiB7CisJdTMyICAgICBtYWpvcjsKKwl1MzIgICAgIG1pbm9yOworCXUzMiAgICAgYnVpbGQ7CisJY2hhciAgICB2ZXJzaW9uW1ZYR0VfSFdfRldfU1RSTEVOXTsKK307CisKK3U2NAorX192eGdlX2h3X3ZwYXRoX3BjaV9mdW5jX21vZGVfZ2V0KAorCXUzMiB2cF9pZCwKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnKTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZyAtIENvbmZpZ3VyYXRpb24gb2YgZmlmby4KKyAqIEBlbmFibGU6IElzIHRoaXMgZmlmbyB0byBiZSBjb21taXNzaW9uZWQKKyAqIEBmaWZvX2Jsb2NrczogTnVtYmVycyBvZiBUeERMICh0aGF0IGlzLCBsaXN0cyBvZiBUeCBkZXNjcmlwdG9ycykKKyAqIAkJYmxvY2tzIHBlciBxdWV1ZS4KKyAqIEBtYXhfZnJhZ3M6IE1heCBudW1iZXIgb2YgVHggYnVmZmVycyBwZXIgVHhETCAodGhhdCBpcywgcGVyIHNpbmdsZQorICogICAgICAgICAgICAgdHJhbnNtaXQgb3BlcmF0aW9uKS4KKyAqICAgICAgICAgICAgIE5vIG1vcmUgdGhhbiAyNTYgdHJhbnNtaXQgYnVmZmVycyBjYW4gYmUgc3BlY2lmaWVkLgorICogQG1lbWJsb2NrX3NpemU6IEZpZm8gZGVzY3JpcHRvcnMgYXJlIGFsbG9jYXRlZCBpbiBibG9ja3Mgb2YgQG1lbV9ibG9ja19zaXplCisgKiAgICAgICAgICAgICBieXRlcy4gU2V0dGluZyBAbWVtYmxvY2tfc2l6ZSB0byBwYWdlIHNpemUgZW5zdXJlcworICogICAgICAgICAgICAgYnktcGFnZSBhbGxvY2F0aW9uIG9mIGRlc2NyaXB0b3JzLiAxMjhLIGJ5dGVzIGlzIHRoZQorICogICAgICAgICAgICAgbWF4aW11bSBzdXBwb3J0ZWQgYmxvY2sgc2l6ZS4KKyAqIEBhbGlnbm1lbnRfc2l6ZTogcGVyIFR4IGZyYWdtZW50IERNQS1hYmxlIG1lbW9yeSB1c2VkIHRvIGFsaWduIHRyYW5zbWl0IGRhdGEKKyAqICAgICAgICAgICAgIChlLmcuLCB0byBhbGlnbiBvbiBhIGNhY2hlIGxpbmUpLgorICogQGludHI6IEJvb2xlYW4uIFVzZSAxIHRvIGdlbmVyYXRlIGludGVycnVwdCBmb3IgZWFjaCBjb21wbGV0ZWQgVHhETC4KKyAqICAgICAgICAgICAgIFVzZSAwIG90aGVyd2lzZS4KKyAqIEBub19zbm9vcF9iaXRzOiBJZiBub24temVybywgc3BlY2lmaWVzIG5vLXNub29wIFBDSSBvcGVyYXRpb24sCisgKiAgICAgICAgICAgICB3aGljaCBnZW5lcmFsbHkgaW1wcm92ZXMgbGF0ZW5jeSBvZiB0aGUgaG9zdCBicmlkZ2Ugb3BlcmF0aW9uCisgKiAgICAgICAgICAgICAoc2VlIFBDSSBzcGVjaWZpY2F0aW9uKS4gRm9yIHZhbGlkIHZhbHVlcyBwbGVhc2UgcmVmZXIKKyAqICAgICAgICAgICAgIHRvIHN0cnVjdCB2eGdlX2h3X2ZpZm9fY29uZmlne30gaW4gdGhlIGRyaXZlciBzb3VyY2VzLgorICogQ29uZmlndXJhdGlvbiBvZiBhbGwgVGl0YW4gZmlmb3MuCisgKiBOb3RlOiBWYWxpZCAobWluLCBtYXgpIHJhbmdlIGZvciBlYWNoIGF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQgaW4gdGhlIGJvZHkgb2YKKyAqIHRoZSBzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZ3t9IHN0cnVjdHVyZS4KKyAqLworc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWcgeworCXUzMgkJCQllbmFibGU7CisjZGVmaW5lIFZYR0VfSFdfRklGT19FTkFCTEUJCQkJMQorI2RlZmluZSBWWEdFX0hXX0ZJRk9fRElTQUJMRQkJCQkwCisKKwl1MzIJCQkJZmlmb19ibG9ja3M7CisjZGVmaW5lIFZYR0VfSFdfTUlOX0ZJRk9fQkxPQ0tTCQkJCTIKKyNkZWZpbmUgVlhHRV9IV19NQVhfRklGT19CTE9DS1MJCQkJMTI4CisKKwl1MzIJCQkJbWF4X2ZyYWdzOworI2RlZmluZSBWWEdFX0hXX01JTl9GSUZPX0ZSQUdTCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19NQVhfRklGT19GUkFHUwkJCQkyNTYKKworCXUzMgkJCQltZW1ibG9ja19zaXplOworI2RlZmluZSBWWEdFX0hXX01JTl9GSUZPX01FTUJMT0NLX1NJWkUJCQlWWEdFX0hXX0JMT0NLX1NJWkUKKyNkZWZpbmUgVlhHRV9IV19NQVhfRklGT19NRU1CTE9DS19TSVpFCQkJMTMxMDcyCisjZGVmaW5lIFZYR0VfSFdfREVGX0ZJRk9fTUVNQkxPQ0tfU0laRQkJCTgwOTYKKworCXUzMgkJICAgICAgICAgICAgICAgIGFsaWdubWVudF9zaXplOworI2RlZmluZSBWWEdFX0hXX01JTl9GSUZPX0FMSUdOTUVOVF9TSVpFCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX0ZJRk9fQUxJR05NRU5UX1NJWkUJCTY1NTM2CisjZGVmaW5lIFZYR0VfSFdfREVGX0ZJRk9fQUxJR05NRU5UX1NJWkUJCVZYR0VfQ0FDSEVfTElORV9TSVpFCisKKwl1MzIJCSAgICAgICAgICAgICAgICBpbnRyOworI2RlZmluZSBWWEdFX0hXX0ZJRk9fUVVFVUVfSU5UUl9FTkFCTEUJCQkxCisjZGVmaW5lIFZYR0VfSFdfRklGT19RVUVVRV9JTlRSX0RJU0FCTEUJCQkwCisjZGVmaW5lIFZYR0VfSFdfRklGT19RVUVVRV9JTlRSX0RFRkFVTFQJCQkwCisKKwl1MzIJCQkJbm9fc25vb3BfYml0czsKKyNkZWZpbmUgVlhHRV9IV19GSUZPX05PX1NOT09QX0RJU0FCTEVECQkJMAorI2RlZmluZSBWWEdFX0hXX0ZJRk9fTk9fU05PT1BfVFhECQkJMQorI2RlZmluZSBWWEdFX0hXX0ZJRk9fTk9fU05PT1BfRlJNCQkJMgorI2RlZmluZSBWWEdFX0hXX0ZJRk9fTk9fU05PT1BfQUxMCQkJMworI2RlZmluZSBWWEdFX0hXX0ZJRk9fTk9fU05PT1BfREVGQVVMVAkJCTAKKworfTsKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfcmluZ19jb25maWcgLSBSaW5nIGNvbmZpZ3VyYXRpb25zLgorICogQGVuYWJsZTogSXMgdGhpcyByaW5nIHRvIGJlIGNvbW1pc3Npb25lZAorICogQHJpbmdfYmxvY2tzOiBOdW1iZXJzIG9mIFJ4RCBibG9ja3MgaW4gdGhlIHJpbmcKKyAqIEBidWZmZXJfbW9kZTogUmVjZWl2ZSBidWZmZXIgbW9kZSAoMSwgMiwgMywgb3IgNSk7IGZvciBkZXRhaWxzIHBsZWFzZSByZWZlcgorICogICAgICAgICAgICAgdG8gVGl0YW4gVXNlciBHdWlkZS4KKyAqIEBzY2F0dGVyX21vZGU6IFRpdGFuIHN1cHBvcnRzIHR3byByZWNlaXZlIHNjYXR0ZXIgbW9kZXM6IEEgYW5kIEIuCisgKiAgICAgICAgICAgICBGb3IgZGV0YWlscyBwbGVhc2UgcmVmZXIgdG8gVGl0YW4gVXNlciBHdWlkZS4KKyAqIEByeF90aW1lcl92YWw6IFRoZSBudW1iZXIgb2YgMzJucyBwZXJpb2RzIHRoYXQgd291bGQgYmUgY291bnRlZCBiZXR3ZWVuIHR3bworICogICAgICAgICAgICAgdGltZXIgaW50ZXJydXB0cy4KKyAqIEBncmVlZHlfcmV0dXJuOiBJZiBTZXQgaXQgZm9yY2VzIHRoZSBkZXZpY2UgdG8gcmV0dXJuIGFic29sdXRlbHkgYWxsIFJ4RAorICogICAgICAgICAgICAgdGhhdCBhcmUgY29uc3VtZWQgYW5kIHN0aWxsIG9uIGJvYXJkIHdoZW4gYSB0aW1lciBpbnRlcnJ1cHQKKyAqICAgICAgICAgICAgIHRyaWdnZXJzLiBJZiBDbGVhciwgdGhlbiBpZiB0aGUgZGV2aWNlIGhhcyBhbHJlYWR5IHJldHVybmVkCisgKiAgICAgICAgICAgICBSeEQgYmVmb3JlIGN1cnJlbnQgdGltZXIgaW50ZXJydXB0IHRyaWdlcnJlZCBhbmQgYWZ0ZXIgdGhlCisgKiAgICAgICAgICAgICBwcmV2aW91cyB0aW1lciBpbnRlcnJ1cHQgdHJpZ2dlcmVkLCB0aGVuIHRoZSBkZXZpY2UgaXMgbm90CisgKiAgICAgICAgICAgICBmb3JjZWQgdG8gcmV0dXJuZWQgdGhlIHJlc3Qgb2YgdGhlIGNvbnN1bWVkIFJ4RCB0aGF0IGl0IGhhcworICogICAgICAgICAgICAgb24gYm9hcmQgd2hpY2ggYWNjb3VudCBmb3IgYSBieXRlIGNvdW50IGxlc3MgdGhhbiB0aGUgb25lCisgKiAgICAgICAgICAgICBwcm9ncmFtbWVkIGludG8gUFJDX0NGRzYuUlhEX0NSWERUIGZpZWxkCisgKiBAcnhfdGltZXJfY2k6IFRCRAorICogQGJhY2tvZmZfaW50ZXJ2YWxfdXM6IFRpbWUgKGluIG1pY3Jvc2Vjb25kcyksIGFmdGVyIHdoaWNoIFRpdGFuCisgKiAgICAgICAgICAgICB0cmllcyB0byBkb3dubG9hZCBSeERzIHBvc3RlZCBieSB0aGUgaG9zdC4KKyAqICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgImJhY2tvZmYiIGRvZXMgbm90IGhhcHBlbiBpZiBob3N0IHBvc3RzIHJlY2VpdmUKKyAqICAgICAgICAgICAgIGRlc2NyaXB0b3JzIGluIHRoZSB0aW1lbHkgZmFzaGlvbi4KKyAqIFJpbmcgY29uZmlndXJhdGlvbi4KKyAqLworc3RydWN0IHZ4Z2VfaHdfcmluZ19jb25maWcgeworCXUzMgkJCQllbmFibGU7CisjZGVmaW5lIFZYR0VfSFdfUklOR19FTkFCTEUJCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19SSU5HX0RJU0FCTEUJCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19SSU5HX0RFRkFVTFQJCQkJCTEKKworCXUzMgkJCQlyaW5nX2Jsb2NrczsKKyNkZWZpbmUgVlhHRV9IV19NSU5fUklOR19CTE9DS1MJCQkJMQorI2RlZmluZSBWWEdFX0hXX01BWF9SSU5HX0JMT0NLUwkJCQkxMjgKKyNkZWZpbmUgVlhHRV9IV19ERUZfUklOR19CTE9DS1MJCQkJMgorCisJdTMyCQkJCWJ1ZmZlcl9tb2RlOworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0JVRkZFUl9NT0RFXzEJCQkJMQorI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0JVRkZFUl9NT0RFXzMJCQkJMworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0JVRkZFUl9NT0RFXzUJCQkJNQorI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0JVRkZFUl9NT0RFX0RFRkFVTFQJCQkxCisKKwl1MzIJCQkJc2NhdHRlcl9tb2RlOworI2RlZmluZSBWWEdFX0hXX1JJTkdfU0NBVFRFUl9NT0RFX0EJCQkJMAorI2RlZmluZSBWWEdFX0hXX1JJTkdfU0NBVFRFUl9NT0RFX0IJCQkJMQorI2RlZmluZSBWWEdFX0hXX1JJTkdfU0NBVFRFUl9NT0RFX0MJCQkJMgorI2RlZmluZSBWWEdFX0hXX1JJTkdfU0NBVFRFUl9NT0RFX1VTRV9GTEFTSF9ERUZBVUxUCQkweGZmZmZmZmZmCisKKwl1NjQJCQkJcnhkc19saW1pdDsKKyNkZWZpbmUgVlhHRV9IV19ERUZfUklOR19SWERTX0xJTUlUCQkJCTQ0Cit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwX2NvbmZpZyAtIENvbmZpZ3VyYXRpb24gb2YgdmlydHVhbCBwYXRoCisgKiBAdnBfaWQ6IFZpcnR1YWwgUGF0aCBJZAorICogQG1pbl9iYW5kd2lkdGg6IE1pbmltdW0gR3VhcmFudGVlZCBiYW5kd2lkdGgKKyAqIEByaW5nOiBTZWUgc3RydWN0IHZ4Z2VfaHdfcmluZ19jb25maWd7fS4KKyAqIEBmaWZvOiBTZWUgc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWd7fS4KKyAqIEB0dGk6IENvbmZpZ3VyYXRpb24gb2YgaW50ZXJydXB0IGFzc29jaWF0ZWQgd2l0aCBUcmFuc21pdC4KKyAqICAgICAgICAgICAgIHNlZSBzdHJ1Y3QgdnhnZV9od190aW1faW50cl9jb25maWcoKTsKKyAqIEBydGk6IENvbmZpZ3VyYXRpb24gb2YgaW50ZXJydXB0IGFzc29jaWF0ZWQgd2l0aCBSZWNlaXZlLgorICogICAgICAgICAgICAgIHNlZSBzdHJ1Y3QgdnhnZV9od190aW1faW50cl9jb25maWcoKTsKKyAqIEBtdHU6IG10dSBzaXplIHVzZWQgb24gdGhpcyBwb3J0LgorICogQHJwYV9zdHJpcF92bGFuX3RhZzogU3RyaXAgVkxBTiBUYWcgZW5hYmxlL2Rpc2FibGUuIEluc3RydWN0cyB0aGUgZGV2aWNlIHRvCisgKiAgICAgICAgICAgICByZW1vdmUgdGhlIFZMQU4gdGFnIGZyb20gYWxsIHJlY2VpdmVkIHRhZ2dlZCBmcmFtZXMgdGhhdCBhcmUgbm90CisgKiAgICAgICAgICAgICByZXBsaWNhdGVkIGF0IHRoZSBpbnRlcm5hbCBMMiBzd2l0Y2guCisgKiAgICAgICAgICAgICAwIC0gRG8gbm90IHN0cmlwIHRoZSBWTEFOIHRhZy4KKyAqICAgICAgICAgICAgIDEgLSBTdHJpcCB0aGUgVkxBTiB0YWcuIFJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLCBWTEFOIHRhZ3MgYXJlCisgKiAgICAgICAgICAgICAgICAgYWx3YXlzIHBsYWNlZCBpbnRvIHRoZSBSeERNQSBkZXNjcmlwdG9yLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkgdGhlIGRyaXZlciB0byBwYXNzIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdG8KKyAqIGNvbmZpZ3VyZSBWaXJ0dWFsIFBhdGguCisgKi8KK3N0cnVjdCB2eGdlX2h3X3ZwX2NvbmZpZyB7CisJdTMyCQkJCXZwX2lkOworCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfUFJJT1JJVFlfTUlOCQkJMAorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1BSSU9SSVRZX01BWAkJCTE2CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfUFJJT1JJVFlfREVGQVVMVAkJCTAKKworCXUzMgkJCQltaW5fYmFuZHdpZHRoOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0JBTkRXSURUSF9NSU4JCQkwCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX01BWAkJCTEwMAorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0JBTkRXSURUSF9ERUZBVUxUCQkJMAorCisJc3RydWN0IHZ4Z2VfaHdfcmluZ19jb25maWcJCXJpbmc7CisJc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWcJCWZpZm87CisJc3RydWN0IHZ4Z2VfaHdfdGltX2ludHJfY29uZmlnCXR0aTsKKwlzdHJ1Y3QgdnhnZV9od190aW1faW50cl9jb25maWcJcnRpOworCisJdTMyCQkJCW10dTsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9NSU5fSU5JVElBTF9NVFUJCQlWWEdFX0hXX01JTl9NVFUKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9NQVhfSU5JVElBTF9NVFUJCQlWWEdFX0hXX01BWF9NVFUKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9VU0VfRkxBU0hfREVGQVVMVF9JTklUSUFMX01UVQkweGZmZmZmZmZmCisKKwl1MzIJCQkJcnBhX3N0cmlwX3ZsYW5fdGFnOworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX1JQQV9TVFJJUF9WTEFOX1RBR19FTkFCTEUJCQkxCisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX0RJU0FCTEUJCTAKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfVVNFX0ZMQVNIX0RFRkFVTFQJMHhmZmZmZmZmZgorCit9OworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnIC0gRGV2aWNlIGNvbmZpZ3VyYXRpb24uCisgKiBAZG1hX2Jsb2NrcG9vbF9pbml0aWFsOiBJbml0aWFsIHNpemUgb2YgRE1BIFBvb2wKKyAqIEBkbWFfYmxvY2twb29sX21heDogTWF4aW11bSBibG9ja3MgaW4gRE1BIHBvb2wKKyAqIEBpbnRyX21vZGU6IExpbmUsIG9yIE1TSS1YIGludGVycnVwdC4KKyAqCisgKiBAcnRoX2VuOiBFbmFibGUgUmVjZWl2ZSBUcmFmZmljIEhhc2hpbmcoUlRIKSB1c2luZyBJVChJbmRpcmVjdGlvbiBUYWJsZSkuCisgKiBAcnRoX2l0X3R5cGU6IFJUSCBJVCB0YWJsZSBwcm9ncmFtbWluZyB0eXBlCisgKiBAcnRzX21hY19lbjogRW5hYmxlIFJlY2VpdmUgVHJhZmZpYyBTdGVlcmluZyB1c2luZyBNQUMgZGVzdGluYXRpb24gYWRkcmVzcworICogQHZwX2NvbmZpZzogQ29uZmlndXJhdGlvbiBmb3IgdmlydHVhbCBwYXRocworICogQGRldmljZV9wb2xsX21pbGxpczogU3BlY2lmeSB0aGUgaW50ZXJ2YWwgKGluIG11bGxpc2Vjb25kcykKKyAqIAkJCXRvIHdhaXQgZm9yIHJlZ2lzdGVyIHJlYWRzCisgKgorICogVGl0YW4gY29uZmlndXJhdGlvbi4KKyAqIENvbnRhaW5zIHBlci1kZXZpY2UgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLCBpbmNsdWRpbmc6CisgKiAtIHN0YXRzIHNhbXBsaW5nIGludGVydmFsLCBldGMuCisgKgorICogSW4gYWRkaXRpb24sIHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWd7fSBpbmNsdWRlcyAic3Vib3JkaW5hdGUiCisgKiBjb25maWd1cmF0aW9ucywgaW5jbHVkaW5nOgorICogLSBmaWZvcyBhbmQgcmluZ3M7CisgKiAtIE1BQyAoZG9uZSBhdCBmaXJtd2FyZSBsZXZlbCkuCisgKgorICogU2VlIFRpdGFuIFVzZXIgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KKyAqIE5vdGU6IFZhbGlkIChtaW4sIG1heCkgcmFuZ2UgZm9yIGVhY2ggYXR0cmlidXRlIGlzIHNwZWNpZmllZCBpbiB0aGUgYm9keSBvZgorICogdGhlIHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWd7fSBzdHJ1Y3R1cmUuIFBsZWFzZSByZWZlciB0byB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgaW5jbHVkZSBmaWxlLgorICogU2VlIGFsc286IHN0cnVjdCB2eGdlX2h3X3RpbV9pbnRyX2NvbmZpZ3t9LgorICovCitzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnIHsKKwl1MzIJCQkJZG1hX2Jsb2NrcG9vbF9pbml0aWFsOworCXUzMgkJCQlkbWFfYmxvY2twb29sX21heDsKKyNkZWZpbmUgVlhHRV9IV19NSU5fRE1BX0JMT0NLX1BPT0xfU0laRQkJCTAKKyNkZWZpbmUgVlhHRV9IV19JTklUSUFMX0RNQV9CTE9DS19QT09MX1NJWkUJCTAKKyNkZWZpbmUgVlhHRV9IV19JTkNSX0RNQV9CTE9DS19QT09MX1NJWkUJCTQKKyNkZWZpbmUgVlhHRV9IV19NQVhfRE1BX0JMT0NLX1BPT0xfU0laRQkJCTQwOTYKKworI2RlZmluZSAgICAgICAgVlhHRV9IV19NQVhfUEFZTE9BRF9TSVpFXzUxMgkJMgorCisJdTMyCQkJCWludHJfbW9kZTsKKyNkZWZpbmUgVlhHRV9IV19JTlRSX01PREVfSVJRTElORQkJCTAKKyNkZWZpbmUgVlhHRV9IV19JTlRSX01PREVfTVNJWAkJCQkxCisjZGVmaW5lIFZYR0VfSFdfSU5UUl9NT0RFX01TSVhfT05FX1NIT1QJCQkyCisKKyNkZWZpbmUgVlhHRV9IV19JTlRSX01PREVfREVGCQkJCTAKKworCXUzMgkJCQlydGhfZW47CisjZGVmaW5lIFZYR0VfSFdfUlRIX0RJU0FCTEUJCQkJMAorI2RlZmluZSBWWEdFX0hXX1JUSF9FTkFCTEUJCQkJMQorI2RlZmluZSBWWEdFX0hXX1JUSF9ERUZBVUxUCQkJCTAKKworCXUzMgkJCQlydGhfaXRfdHlwZTsKKyNkZWZpbmUgVlhHRV9IV19SVEhfSVRfVFlQRV9TT0xPX0lUCQkJMAorI2RlZmluZSBWWEdFX0hXX1JUSF9JVF9UWVBFX01VTFRJX0lUCQkJMQorI2RlZmluZSBWWEdFX0hXX1JUSF9JVF9UWVBFX0RFRkFVTFQJCQkwCisKKwl1MzIJCQkJcnRzX21hY19lbjsKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUFDX0RJU0FCTEUJCQkwCisjZGVmaW5lIFZYR0VfSFdfUlRTX01BQ19FTkFCTEUJCQkxCisjZGVmaW5lIFZYR0VfSFdfUlRTX01BQ19ERUZBVUxUCQkJMAorCisJc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnCXZwX2NvbmZpZ1tWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXTsKKworCXUzMgkJCQlkZXZpY2VfcG9sbF9taWxsaXM7CisjZGVmaW5lIFZYR0VfSFdfTUlOX0RFVklDRV9QT0xMX01JTExJUwkJCTEKKyNkZWZpbmUgVlhHRV9IV19NQVhfREVWSUNFX1BPTExfTUlMTElTCQkJMTAwMDAwCisjZGVmaW5lIFZYR0VfSFdfREVGX0RFVklDRV9QT0xMX01JTExJUwkJCTEwMDAKKworfTsKKworLyoqCisgKiBmdW5jdGlvbiB2eGdlX3VsZF9saW5rX3VwX2YgLSBMaW5rLVVwIGNhbGxiYWNrIHByb3ZpZGVkIGJ5IGRyaXZlci4KKyAqIEBkZXZoOiBIVyBkZXZpY2UgaGFuZGxlLgorICogTGluay11cCBub3RpZmljYXRpb24gY2FsbGJhY2sgcHJvdmlkZWQgYnkgdGhlIGRyaXZlci4KKyAqIFRoaXMgaXMgb25lIG9mIHRoZSBwZXItZHJpdmVyIGNhbGxiYWNrcywgc2VlIHN0cnVjdCB2eGdlX2h3X3VsZF9jYnN7fS4KKyAqCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdWxkX2Nic3t9LCB2eGdlX3VsZF9saW5rX2Rvd25fZnt9LAorICogdnhnZV9od19kcml2ZXJfaW5pdGlhbGl6ZSgpLgorICovCisKKy8qKgorICogZnVuY3Rpb24gdnhnZV91bGRfbGlua19kb3duX2YgLSBMaW5rLURvd24gY2FsbGJhY2sgcHJvdmlkZWQgYnkKKyAqIGRyaXZlci4KKyAqIEBkZXZoOiBIVyBkZXZpY2UgaGFuZGxlLgorICoKKyAqIExpbmstRG93biBub3RpZmljYXRpb24gY2FsbGJhY2sgcHJvdmlkZWQgYnkgdGhlIGRyaXZlci4KKyAqIFRoaXMgaXMgb25lIG9mIHRoZSBwZXItZHJpdmVyIGNhbGxiYWNrcywgc2VlIHN0cnVjdCB2eGdlX2h3X3VsZF9jYnN7fS4KKyAqCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdWxkX2Nic3t9LCB2eGdlX3VsZF9saW5rX3VwX2Z7fSwKKyAqIHZ4Z2VfaHdfZHJpdmVyX2luaXRpYWxpemUoKS4KKyAqLworCisvKioKKyAqIGZ1bmN0aW9uIHZ4Z2VfdWxkX2NyaXRfZXJyX2YgLSBDcml0aWNhbCBFcnJvciBub3RpZmljYXRpb24gY2FsbGJhY2suCisgKiBAZGV2aDogSFcgZGV2aWNlIGhhbmRsZS4KKyAqICh0eXBpY2FsbHkgLSBhdCBIVyBkZXZpY2UgaWluaXRpYWxpemF0aW9uIHRpbWUpLgorICogQHR5cGU6IEVudW1lcmF0ZWQgaHcgZXJyb3IsIGUuZy46IGRvdWJsZSBFQ0MuCisgKiBAc2Vycl9kYXRhOiBUaXRhbiBzdGF0dXMuCisgKiBAZXh0X2RhdGE6IEV4dGVuZGVkIGRhdGEuIFRoZSBjb250ZW50cyBkZXBlbmRzIG9uIHRoZSBAdHlwZS4KKyAqCisgKiBMaW5rLURvd24gbm90aWZpY2F0aW9uIGNhbGxiYWNrIHByb3ZpZGVkIGJ5IHRoZSBkcml2ZXIuCisgKiBUaGlzIGlzIG9uZSBvZiB0aGUgcGVyLWRyaXZlciBjYWxsYmFja3MsIHNlZSBzdHJ1Y3QgdnhnZV9od191bGRfY2Jze30uCisgKgorICogU2VlIGFsc286IHN0cnVjdCB2eGdlX2h3X3VsZF9jYnN7fSwgZW51bSB2eGdlX2h3X2V2ZW50e30sCisgKiB2eGdlX2h3X2RyaXZlcl9pbml0aWFsaXplKCkuCisgKi8KKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od191bGRfY2JzIC0gZHJpdmVyICJzbG93LXBhdGgiIGNhbGxiYWNrcy4KKyAqIEBsaW5rX3VwOiBTZWUgdnhnZV91bGRfbGlua191cF9me30uCisgKiBAbGlua19kb3duOiBTZWUgdnhnZV91bGRfbGlua19kb3duX2Z7fS4KKyAqIEBjcml0X2VycjogU2VlIHZ4Z2VfdWxkX2NyaXRfZXJyX2Z7fS4KKyAqCisgKiBEcml2ZXIgc2xvdy1wYXRoIChwZXItZHJpdmVyKSBjYWxsYmFja3MuCisgKiBJbXBsZW1lbnRlZCBieSBkcml2ZXIgYW5kIHByb3ZpZGVkIHRvIEhXIHZpYQorICogdnhnZV9od19kcml2ZXJfaW5pdGlhbGl6ZSgpLgorICogTm90ZSB0aGF0IHRoZXNlIGNhbGxiYWNrcyBhcmUgbm90IG1hbmRhdG9yeTogSFcgd2lsbCBub3QgaW52b2tlCisgKiBhIGNhbGxiYWNrIGlmIE5VTEwgaXMgc3BlY2lmaWVkLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X2RyaXZlcl9pbml0aWFsaXplKCkuCisgKi8KK3N0cnVjdCB2eGdlX2h3X3VsZF9jYnMgeworCisJdm9pZCAoKmxpbmtfdXApKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKwl2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisJdm9pZCAoKmNyaXRfZXJyKShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwkJCWVudW0gdnhnZV9od19ldmVudCB0eXBlLCB1NjQgZXh0X2RhdGEpOworfTsKKworLyoKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5IC0gQmxvY2sgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorICogQGl0ZW06IExpc3QgaGVhZGVyIHVzZWQgdG8gbGluay4KKyAqIEBsZW5ndGg6IExlbmd0aCBvZiB0aGUgYmxvY2sKKyAqIEBtZW1ibG9jazogVmlydHVhbCBhZGRyZXNzIGJsb2NrCisgKiBAZG1hX2FkZHI6IERNQSBBZGRyZXNzIG9mIHRoZSBibG9jay4KKyAqIEBkbWFfaGFuZGxlOiBETUEgaGFuZGxlIG9mIHRoZSBibG9jay4KKyAqIEBhY2NfaGFuZGxlOiBETUEgYWNjIGhhbmRsZQorICoKKyAqIEJsb2NrIGlzIGFsbG9jYXRlZCB3aXRoIGEgaGVhZGVyIHRvIHB1dCB0aGUgYmxvY2tzIGludG8gbGlzdC4KKyAqCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWl0ZW07CisJdTMyCQkJbGVuZ3RoOworCXZvaWQJCQkqbWVtYmxvY2s7CisJZG1hX2FkZHJfdAkJZG1hX2FkZHI7CisJc3RydWN0IHBjaV9kZXYgCQkqZG1hX2hhbmRsZTsKKwlzdHJ1Y3QgcGNpX2RldiAJCSphY2NfaGFuZGxlOworfTsKKworLyoKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sIC0gQmxvY2sgUG9vbAorICogQGhsZGV2OiBIVyBkZXZpY2UKKyAqIEBibG9ja19zaXplOiBzaXplIG9mIGVhY2ggYmxvY2suCisgKiBAUG9vbF9zaXplOiBOdW1iZXIgb2YgYmxvY2tzIGluIHRoZSBwb29sCisgKiBAcG9vbF9tYXg6IE1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyBhYm92ZSB3aGljaCB0byBmcmVlIGFkZGl0aW9uYWwgYmxvY2tzCisgKiBAcmVxX291dDogTnVtYmVyIG9mIGJsb2NrIHJlcXVlc3RzIHdpdGggT1Mgb3V0IHN0YW5kaW5nCisgKiBAZnJlZV9ibG9ja19saXN0OiBMaXN0IG9mIGZyZWUgYmxvY2tzCisgKgorICogQmxvY2sgcG9vbCBjb250YWlucyB0aGUgRE1BIGJsb2NrcyBwcmVhbGxvY2F0ZWQuCisgKgorICovCitzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbCB7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2OworCXUzMgkJCQlibG9ja19zaXplOworCXUzMgkJCQlwb29sX3NpemU7CisJdTMyCQkJCXBvb2xfbWF4OworCXUzMgkJCQlyZXFfb3V0OworCXN0cnVjdCBsaXN0X2hlYWQJCWZyZWVfYmxvY2tfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlmcmVlX2VudHJ5X2xpc3Q7Cit9OworCisvKgorICogZW51bSBlbnVtIF9fdnhnZV9od19jaGFubmVsX3R5cGUgLSBFbnVtZXJhdGVkIGNoYW5uZWwgdHlwZXMuCisgKiBAVlhHRV9IV19DSEFOTkVMX1RZUEVfVU5LTk9XTjogVW5rbm93biBjaGFubmVsLgorICogQFZYR0VfSFdfQ0hBTk5FTF9UWVBFX0ZJRk86IGZpZm8uCisgKiBAVlhHRV9IV19DSEFOTkVMX1RZUEVfUklORzogcmluZy4KKyAqIEBWWEdFX0hXX0NIQU5ORUxfVFlQRV9NQVg6IE1heGltdW0gbnVtYmVyIG9mIEhXLXN1cHBvcnRlZAorICogKGFuZCByZWNvZ25pemVkKSBjaGFubmVsIHR5cGVzLiBDdXJyZW50bHk6IDIuCisgKgorICogRW51bWVyYXRlZCBjaGFubmVsIHR5cGVzLiBDdXJyZW50bHkgdGhlcmUgYXJlIG9ubHkgdHdvIGxpbmstbGF5ZXIKKyAqIGNoYW5uZWxzIC0gVGl0YW4gZmlmbyBhbmQgVGl0YW4gcmluZy4gSW4gdGhlIGZ1dHVyZSB0aGUgbGlzdCB3aWxsIGdyb3cuCisgKi8KK2VudW0gX192eGdlX2h3X2NoYW5uZWxfdHlwZSB7CisJVlhHRV9IV19DSEFOTkVMX1RZUEVfVU5LTk9XTgkJCT0gMCwKKwlWWEdFX0hXX0NIQU5ORUxfVFlQRV9GSUZPCQkJPSAxLAorCVZYR0VfSFdfQ0hBTk5FTF9UWVBFX1JJTkcJCQk9IDIsCisJVlhHRV9IV19DSEFOTkVMX1RZUEVfTUFYCQkJPSAzCit9OworCisvKgorICogc3RydWN0IF9fdnhnZV9od19jaGFubmVsCisgKiBAaXRlbTogTGlzdCBpdGVtOyB1c2VkIHRvIG1haW50YWluIGEgbGlzdCBvZiBvcGVuIGNoYW5uZWxzLgorICogQHR5cGU6IENoYW5uZWwgdHlwZS4gU2VlIGVudW0gdnhnZV9od19jaGFubmVsX3R5cGV7fS4KKyAqIEBkZXZoOiBEZXZpY2UgaGFuZGxlLiBIVyBkZXZpY2Ugb2JqZWN0IHRoYXQgY29udGFpbnMgX3RoaXNfIGNoYW5uZWwuCisgKiBAdnBoOiBWaXJ0dWFsIHBhdGggaGFuZGxlLiBWaXJ0dWFsIFBhdGggT2JqZWN0IHRoYXQgY29udGFpbnMgX3RoaXNfIGNoYW5uZWwuCisgKiBAbGVuZ3RoOiBDaGFubmVsIGxlbmd0aC4gQ3VycmVudGx5IGFsbG9jYXRlZCBudW1iZXIgb2YgZGVzY3JpcHRvcnMuCisgKiAgICAgICAgICBUaGUgY2hhbm5lbCBsZW5ndGggImdyb3dzIiB3aGVuIG1vcmUgZGVzY3JpcHRvcnMgZ2V0IGFsbG9jYXRlZC4KKyAqICAgICAgICAgIFNlZSBfaHdfbWVtcG9vbF9ncm93LgorICogQHJlc2VydmVfYXJyOiBSZXNlcnZlIGFycmF5LiBDb250YWlucyBkZXNjcmlwdG9ycyB0aGF0IGNhbiBiZSByZXNlcnZlZAorICogICAgICAgICAgICAgICBieSBkcml2ZXIgZm9yIHRoZSBzdWJzZXF1ZW50IHNlbmQgb3IgcmVjZWl2ZSBvcGVyYXRpb24uCisgKiAgICAgICAgICAgICAgIFNlZSB2eGdlX2h3X2ZpZm9fdHhkbF9yZXNlcnZlKCksCisgKiAgICAgICAgICAgICAgIHZ4Z2VfaHdfcmluZ19yeGRfcmVzZXJ2ZSgpLgorICogQHJlc2VydmVfcHRyOiBDdXJyZW50IHBvaW50ZXIgaW4gdGhlIHJlc3J2ZSBhcnJheQorICogQHJlc2VydmVfdG9wOiBSZXNlcnZlIHRvcCBnaXZlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZHRycyBhdmFpbGFibGUgaW4KKyAqICAgICAgICAgIHJlc2VydmUgYXJyYXkuCisgKiBAd29ya19hcnI6IFdvcmsgYXJyYXkuIENvbnRhaW5zIGRlc2NyaXB0b3JzIHBvc3RlZCB0byB0aGUgY2hhbm5lbC4KKyAqICAgICAgICAgICAgTm90ZSB0aGF0IGF0IGFueSBwb2ludCBpbiB0aW1lIEB3b3JrX2FyciBjb250YWlucyAzIHR5cGVzIG9mCisgKiAgICAgICAgICAgIGRlc2NyaXB0b3JzOgorICogICAgICAgICAgICAxKSBwb3N0ZWQgYnV0IG5vdCB5ZXQgY29uc3VtZWQgYnkgVGl0YW4gZGV2aWNlOworICogICAgICAgICAgICAyKSBjb25zdW1lZCBidXQgbm90IHlldCBjb21wbGV0ZWQ7CisgKiAgICAgICAgICAgIDMpIGNvbXBsZXRlZCBidXQgbm90IHlldCBmcmVlZAorICogICAgICAgICAgICAodmlhIHZ4Z2VfaHdfZmlmb190eGRsX2ZyZWUoKSBvciB2eGdlX2h3X3JpbmdfcnhkX2ZyZWUoKSkKKyAqIEBwb3N0X2luZGV4OiBQb3N0IGluZGV4LiBBdCBhbnkgcG9pbnQgaW4gdGltZSBwb2ludHMgb24gdGhlCisgKiAgICAgICAgICAgICAgcG9zaXRpb24gaW4gdGhlIGNoYW5uZWwsIHdoaWNoJ2xsIGNvbnRhaW4gbmV4dCB0by1iZS1wb3N0ZWQKKyAqICAgICAgICAgICAgICBkZXNjcmlwdG9yLgorICogQGNvbXBsX2luZGV4OiBDb21wbGV0aW9uIGluZGV4LiBBdCBhbnkgcG9pbnQgaW4gdGltZSBwb2ludHMgb24gdGhlCisgKiAgICAgICAgICAgICAgIHBvc2l0aW9uIGluIHRoZSBjaGFubmVsLCB3aGljaCB3aWxsIGNvbnRhaW4gbmV4dAorICogICAgICAgICAgICAgICB0by1iZS1jb21wbGV0ZWQgZGVzY3JpcHRvci4KKyAqIEBmcmVlX2FycjogRnJlZSBhcnJheS4gQ29udGFpbnMgY29tcGxldGVkIGRlc2NyaXB0b3JzIHRoYXQgd2VyZSBmcmVlZAorICogICAgICAgICAgICAoaS5lLiwgaGFuZGVkIG92ZXIgYmFjayB0byBIVykgYnkgZHJpdmVyLgorICogICAgICAgICAgICBTZWUgdnhnZV9od19maWZvX3R4ZGxfZnJlZSgpLCB2eGdlX2h3X3JpbmdfcnhkX2ZyZWUoKS4KKyAqIEBmcmVlX3B0cjogY3VycmVudCBwb2ludGVyIGluIGZyZWUgYXJyYXkKKyAqIEBwZXJfZHRyX3NwYWNlOiBQZXItZGVzY3JpcHRvciBzcGFjZSAoaW4gYnl0ZXMpIHRoYXQgY2hhbm5lbCB1c2VyIGNhbiB1dGlsaXplCisgKiAgICAgICAgICAgICAgICAgdG8gc3RvcmUgcGVyLW9wZXJhdGlvbiBjb250cm9sIGluZm9ybWF0aW9uLgorICogQHN0YXRzOiBQb2ludGVyIHRvIGNvbW1vbiBzdGF0aXN0aWNzCisgKiBAdXNlcmRhdGE6IFBlci1jaGFubmVsIG9wYXF1ZSAodm9pZCopIHVzZXItZGVmaW5lZCBjb250ZXh0LCB3aGljaCBtYXkgYmUKKyAqICAgICAgICAgICAgZHJpdmVyIG9iamVjdCwgVUxQIGNvbm5lY3Rpb24sIGV0Yy4KKyAqICAgICAgICAgICAgT25jZSBjaGFubmVsIGlzIG9wZW4sIEB1c2VyZGF0YSBpcyBwYXNzZWQgYmFjayB0byB1c2VyIHZpYQorICogICAgICAgICAgICB2eGdlX2h3X2NoYW5uZWxfY2FsbGJhY2tfZi4KKyAqCisgKiBIVyBjaGFubmVsIG9iamVjdC4KKyAqCisgKiBTZWUgYWxzbzogZW51bSB2eGdlX2h3X2NoYW5uZWxfdHlwZXt9LCBlbnVtIHZ4Z2VfaHdfY2hhbm5lbF9mbGFnCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCB7CisJc3RydWN0IGxpc3RfaGVhZAkJaXRlbTsKKwllbnVtIF9fdnhnZV9od19jaGFubmVsX3R5cGUJdHlwZTsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAJKmRldmg7CisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgCSp2cGg7CisJdTMyCQkJbGVuZ3RoOworCXUzMgkJCXZwX2lkOworCXZvaWQJCSoqcmVzZXJ2ZV9hcnI7CisJdTMyCQkJcmVzZXJ2ZV9wdHI7CisJdTMyCQkJcmVzZXJ2ZV90b3A7CisJdm9pZAkJKip3b3JrX2FycjsKKwl1MzIJCQlwb3N0X2luZGV4IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwl1MzIJCQljb21wbF9pbmRleCBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJdm9pZAkJKipmcmVlX2FycjsKKwl1MzIJCQlmcmVlX3B0cjsKKwl2b2lkCQkqKm9yaWdfYXJyOworCXUzMgkJCXBlcl9kdHJfc3BhY2U7CisJdm9pZAkJKnVzZXJkYXRhOworCXN0cnVjdCB2eGdlX2h3X2NvbW1vbl9yZWcJX19pb21lbSAqY29tbW9uX3JlZzsKKwl1MzIJCQlmaXJzdF92cF9pZDsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19jb21tb25faW5mbyAqc3RhdHM7CisKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCisvKgorICogc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAtIFZpcnR1YWwgUGF0aAorICoKKyAqIEB2cF9pZDogVmlydHVhbCBwYXRoIGlkCisgKiBAdnBfb3BlbjogVGhpcyBmbGFnIHNwZWNpZmllcyBpZiB2eGdlX2h3X3ZwX29wZW4gaXMgY2FsbGVkIGZyb20gTEwgRHJpdmVyCisgKiBAaGxkZXY6IEhhbCBkZXZpY2UKKyAqIEB2cF9jb25maWc6IFZpcnR1YWwgUGF0aCBDb25maWcKKyAqIEB2cF9yZWc6IFZQQVRIIFJlZ2lzdGVyIG1hcCBhZGRyZXNzIGluIEJBUjAKKyAqIEB2cG1nbXRfcmVnOiBWUEFUSF9NR01UIHJlZ2lzdGVyIG1hcCBhZGRyZXNzCisgKiBAbWF4X210dTogTWF4IG10dSB0aGF0IGNhbiBiZSBzdXBwb3J0ZWQKKyAqIEB2c3BvcnRfbnVtYmVyOiB2c3BvcnQgYXR0YWNoZWQgdG8gdGhpcyB2cGF0aAorICogQG1heF9rZGZjX2RiOiBNYXhpbXVtIGtlcm5lbCBtb2RlIGRvb3JiZWxscworICogQG1heF9ub2ZsX2RiOiBNYXhpbXVtIG5vbiBvZmZsb2FkIGRvb3JiZWxscworICogQHR4X2ludHJfbnVtOiBJbnRlcnJ1cHQgTnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgVFgKKworICogQHJpbmdoOiBSaW5nIFF1ZXVlCisgKiBAZmlmb2g6IEZJRk8gUXVldWUKKyAqIEB2cGF0aF9oYW5kbGVzOiBWaXJ0dWFsIFBhdGggaGFuZGxlcyBsaXN0CisgKiBAc3RhdHNfYmxvY2s6IE1lbW9yeSBmb3IgRE1BaW5nIHN0YXRzCisgKiBAc3RhdHM6IFZwYXRoIHN0YXRpc3RpY3MKKyAqCisgKiBWaXJ0dWFsIHBhdGggc3RydWN0dXJlIHRvIGVuY2Fwc3VsYXRlIHRoZSBkYXRhIHJlbGF0ZWQgdG8gYSB2aXJ0dWFsIHBhdGguCisgKiBWaXJ0dWFsIHBhdGhzIGFyZSBhbGxvY2F0ZWQgYnkgdGhlIEhXIHVwb24gZ2V0dGluZyBjb25maWd1cmF0aW9uIGZyb20gdGhlCisgKiBkcml2ZXIgYW5kIGluc2VydGVkIGludG8gdGhlIGxpc3Qgb2YgdmlydHVhbCBwYXRocy4KKyAqLworc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCB7CisJdTMyCQkJCXZwX2lkOworCisJdTMyCQkJCXZwX29wZW47CisjZGVmaW5lIFZYR0VfSFdfVlBfTk9UX09QRU4JMAorI2RlZmluZQlWWEdFX0hXX1ZQX09QRU4JCTEKKworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlCQkqaGxkZXY7CisJc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnCSp2cF9jb25maWc7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnCV9faW9tZW0gKnZwX3JlZzsKKwlzdHJ1Y3QgdnhnZV9od192cG1nbXRfcmVnCV9faW9tZW0gKnZwbWdtdF9yZWc7CisJc3RydWN0IF9fdnhnZV9od19ub25fb2ZmbG9hZF9kYl93cmFwcGVyCV9faW9tZW0gKm5vZmxfZGI7CisKKwl1MzIJCQkJbWF4X210dTsKKwl1MzIJCQkJdnNwb3J0X251bWJlcjsKKwl1MzIJCQkJbWF4X2tkZmNfZGI7CisJdTMyCQkJCW1heF9ub2ZsX2RiOworCisJc3RydWN0IF9fdnhnZV9od19yaW5nICpfX19fY2FjaGVsaW5lX2FsaWduZWQgcmluZ2g7CisJc3RydWN0IF9fdnhnZV9od19maWZvICpfX19fY2FjaGVsaW5lX2FsaWduZWQgZmlmb2g7CisJc3RydWN0IGxpc3RfaGVhZAkJdnBhdGhfaGFuZGxlczsKKwlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeQkJKnN0YXRzX2Jsb2NrOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8JKmh3X3N0YXRzOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8JKmh3X3N0YXRzX3NhdjsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19pbmZvCSpzd19zdGF0czsKK307CisKKy8qCisgKiBzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAtIExpc3QgaXRlbSB0byBzdG9yZSBjYWxsYmFjayBpbmZvcm1hdGlvbgorICogQGl0ZW06IExpc3QgaGVhZCB0byBrZWVwIHRoZSBpdGVtIGluIGxpbmtlZCBsaXN0CisgKiBAdnBhdGg6IFZpcnR1YWwgcGF0aCB0byB3aGljaCB0aGlzIGl0ZW0gYmVsb25ncworICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gc3RvcmUgdGhlIGNhbGxiYWNrIGluZm9ybWF0aW9uLgorICovCitzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZXsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWl0ZW07CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aAkqdnBhdGg7Cit9OworCisvKgorICogc3RydWN0IF9fdnhnZV9od19kZXZpY2UKKyAqCisgKiBIVyBkZXZpY2Ugb2JqZWN0LgorICovCisvKioKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAtIEhhbCBkZXZpY2Ugb2JqZWN0CisgKiBAbWFnaWM6IE1hZ2ljIE51bWJlcgorICogQGRldmljZV9pZDogUENJIERldmljZSBJZCBvZiB0aGUgYWRhcHRlcgorICogQG1ham9yX3JldmlzaW9uOiBQQ0kgRGV2aWNlIG1ham9yIHJldmlzaW9uCisgKiBAbWlub3JfcmV2aXNpb246IFBDSSBEZXZpY2UgbWlub3IgcmV2aXNpb24KKyAqIEBiYXIwOiBCQVIwIHZpcnR1YWwgYWRkcmVzcy4KKyAqIEBiYXIxOiBCQVIxIHZpcnR1YWwgYWRkcmVzcy4KKyAqIEBiYXIyOiBCQVIyIHZpcnR1YWwgYWRkcmVzcy4KKyAqIEBwZGV2OiBQaHlzaWNhbCBkZXZpY2UgaGFuZGxlCisgKiBAY29uZmlnOiBDb25mZ3VyYXRpb24gcGFzc2VkIGJ5IHRoZSBMTCBkcml2ZXIgYXQgaW5pdGlhbGl6YXRpb24KKyAqIEBsaW5rX3N0YXRlOiBMaW5rIHN0YXRlCisgKgorICogSFcgZGV2aWNlIG9iamVjdC4gUmVwcmVzZW50cyBUaXRhbiBhZGFwdGVyCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlIHsKKwl1MzIJCQkJbWFnaWM7CisjZGVmaW5lIFZYR0VfSFdfREVWSUNFX01BR0lDCQkweDEyMzQ1Njc4CisjZGVmaW5lIFZYR0VfSFdfREVWSUNFX0RFQUQJCTB4REVBRERFQUQKKwl1MTYJCQkJZGV2aWNlX2lkOworCXU4CQkJCW1ham9yX3JldmlzaW9uOworCXU4CQkJCW1pbm9yX3JldmlzaW9uOworCXZvaWQgX19pb21lbQkJCSpiYXIwOworCXZvaWQgX19pb21lbQkJCSpiYXIxOworCXZvaWQgX19pb21lbQkJCSpiYXIyOworCXN0cnVjdCBwY2lfZGV2CQkJKnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UJCSpuZGV2OworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcJY29uZmlnOworCWVudW0gdnhnZV9od19kZXZpY2VfbGlua19zdGF0ZQlsaW5rX3N0YXRlOworCisJc3RydWN0IHZ4Z2VfaHdfdWxkX2NicwkJdWxkX2NhbGxiYWNrczsKKworCXUzMgkJCQlob3N0X3R5cGU7CisJdTMyCQkJCWZ1bmNfaWQ7CisJdTMyCQkJCWFjY2Vzc19yaWdodHM7CisjZGVmaW5lIFZYR0VfSFdfREVWSUNFX0FDQ0VTU19SSUdIVF9WUEFUSCAgICAgIDB4MQorI2RlZmluZSBWWEdFX0hXX0RFVklDRV9BQ0NFU1NfUklHSFRfU1JQQ0lNICAgICAweDIKKyNkZWZpbmUgVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX01SUENJTSAgICAgMHg0CisJc3RydWN0IHZ4Z2VfaHdfbGVnYWN5X3JlZwlfX2lvbWVtICpsZWdhY3lfcmVnOworCXN0cnVjdCB2eGdlX2h3X3RvY19yZWcJCV9faW9tZW0gKnRvY19yZWc7CisJc3RydWN0IHZ4Z2VfaHdfY29tbW9uX3JlZwlfX2lvbWVtICpjb21tb25fcmVnOworCXN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcJX19pb21lbSAqbXJwY2ltX3JlZzsKKwlzdHJ1Y3QgdnhnZV9od19zcnBjaW1fcmVnCV9faW9tZW0gKnNycGNpbV9yZWcgXAorCQkJCQlbVlhHRV9IV19USVRBTl9TUlBDSU1fUkVHX1NQQUNFU107CisJc3RydWN0IHZ4Z2VfaHdfdnBtZ210X3JlZwlfX2lvbWVtICp2cG1nbXRfcmVnIFwKKwkJCQkJW1ZYR0VfSFdfVElUQU5fVlBNR01UX1JFR19TUEFDRVNdOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZwlfX2lvbWVtICp2cGF0aF9yZWcgXAorCQkJCQlbVlhHRV9IV19USVRBTl9WUEFUSF9SRUdfU1BBQ0VTXTsKKwl1OAkJCQlfX2lvbWVtICprZGZjOworCXU4CQkJCV9faW9tZW0gKnVzZGM7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aAl2aXJ0dWFsX3BhdGhzIFwKKwkJCQkJW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworCXU2NAkJCQl2cGF0aF9hc3NpZ25tZW50czsKKwl1NjQJCQkJdnBhdGhzX2RlcGxveWVkOworCXUzMgkJCQlmaXJzdF92cF9pZDsKKwl1NjQJCQkJdGltX2ludF9tYXNrMFs0XTsKKwl1MzIJCQkJdGltX2ludF9tYXNrMVs0XTsKKworCXN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sCWJsb2NrX3Bvb2w7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzCXN0YXRzOworCXUzMgkJCQlkZWJ1Z19tb2R1bGVfbWFzazsKKwl1MzIJCQkJZGVidWdfbGV2ZWw7CisJdTMyCQkJCWxldmVsX2VycjsKKwl1MzIJCQkJbGV2ZWxfdHJhY2U7Cit9OworCisjZGVmaW5lIFZYR0VfSFdfSU5GT19MRU4JNjQKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8gLSBEZXZpY2UgaW5mb3JtYXRpb24KKyAqIEBob3N0X3R5cGU6IEhvc3QgVHlwZQorICogQGZ1bmNfaWQ6IEZ1bmN0aW9uIElkCisgKiBAdnBhdGhfbWFzazogdnBhdGggYml0IG1hc2sKKyAqIEBmd192ZXJzaW9uOiBGaXJtd2FyZSB2ZXJzaW9uCisgKiBAZndfZGF0ZTogRmlybXdhcmUgRGF0ZQorICogQGZsYXNoX3ZlcnNpb246IEZpcm13YXJlIHZlcnNpb24KKyAqIEBmbGFzaF9kYXRlOiBGaXJtd2FyZSBEYXRlCisgKiBAbWFjX2FkZHJzOiBNYWMgYWRkcmVzc2VzIGZvciBlYWNoIHZwYXRoCisgKiBAbWFjX2FkZHJfbWFza3M6IE1hYyBhZGRyZXNzIG1hc2tzIGZvciBlYWNoIHZwYXRoCisgKgorICogUmV0dXJucyB0aGUgdnBhdGggbWFzayB0aGF0IGhhcyB0aGUgYml0cyBzZXQgZm9yIGVhY2ggdnBhdGggYWxsb2NhdGVkCisgKiBmb3IgdGhlIGRyaXZlciBhbmQgdGhlIGZpcnN0IG1hYyBhZGRyZXNzIGZvciBlYWNoIHZwYXRoCisgKi8KK3N0cnVjdCB2eGdlX2h3X2RldmljZV9od19pbmZvIHsKKwl1MzIJCWhvc3RfdHlwZTsKKyNkZWZpbmUgVlhHRV9IV19OT19NUl9OT19TUl9OT1JNQUxfRlVOQ1RJT04JCQkwCisjZGVmaW5lIFZYR0VfSFdfTVJfTk9fU1JfVkgwX0JBU0VfRlVOQ1RJT04JCQkxCisjZGVmaW5lIFZYR0VfSFdfTk9fTVJfU1JfVkgwX0ZVTkNUSU9OMAkJCQkyCisjZGVmaW5lIFZYR0VfSFdfTk9fTVJfU1JfVkgwX1ZJUlRVQUxfRlVOQ1RJT04JCQkzCisjZGVmaW5lIFZYR0VfSFdfTVJfU1JfVkgwX0lOVkFMSURfQ09ORklHCQkJNAorI2RlZmluZSBWWEdFX0hXX1NSX1ZIX0ZVTkNUSU9OMAkJCQkJNQorI2RlZmluZSBWWEdFX0hXX1NSX1ZIX1ZJUlRVQUxfRlVOQ1RJT04JCQkJNgorI2RlZmluZSBWWEdFX0hXX1ZIX05PUk1BTF9GVU5DVElPTgkJCQk3CisJdTY0CQlmdW5jdGlvbl9tb2RlOworI2RlZmluZSBWWEdFX0hXX0ZVTkNUSU9OX01PREVfTVVMVElfRlVOQ1RJT04JCQkwCisjZGVmaW5lIFZYR0VfSFdfRlVOQ1RJT05fTU9ERV9TSU5HTEVfRlVOQ1RJT04JCQkxCisjZGVmaW5lIFZYR0VfSFdfRlVOQ1RJT05fTU9ERV9TUklPVgkJCQkyCisjZGVmaW5lIFZYR0VfSFdfRlVOQ1RJT05fTU9ERV9NUklPVgkJCQkzCisJdTMyCQlmdW5jX2lkOworCXU2NAkJdnBhdGhfbWFzazsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfdmVyc2lvbiBmd192ZXJzaW9uOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9kYXRlICAgIGZ3X2RhdGU7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3ZlcnNpb24gZmxhc2hfdmVyc2lvbjsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfZGF0ZSAgICBmbGFzaF9kYXRlOworCXU4CQlzZXJpYWxfbnVtYmVyW1ZYR0VfSFdfSU5GT19MRU5dOworCXU4CQlwYXJ0X251bWJlcltWWEdFX0hXX0lORk9fTEVOXTsKKwl1OAkJcHJvZHVjdF9kZXNjW1ZYR0VfSFdfSU5GT19MRU5dOworCXU4IChtYWNfYWRkcnMpW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdW0VUSF9BTEVOXTsKKwl1OCAobWFjX2FkZHJfbWFza3MpW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdW0VUSF9BTEVOXTsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2F0dHIgLSBEZXZpY2UgbWVtb3J5IHNwYWNlcy4KKyAqIEBiYXIwOiBCQVIwIHZpcnR1YWwgYWRkcmVzcy4KKyAqIEBiYXIxOiBCQVIxIHZpcnR1YWwgYWRkcmVzcy4KKyAqIEBiYXIyOiBCQVIyIHZpcnR1YWwgYWRkcmVzcy4KKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIG9iamVjdC4KKyAqCisgKiBEZXZpY2UgbWVtb3J5IHNwYWNlcy4gSW5jbHVkZXMgY29uZmlndXJhdGlvbiwgQkFSMCwgQkFSMSwgZXRjLiBwZXIgZGV2aWNlCisgKiBtYXBwZWQgbWVtb3JpZXMuIEFsc28sIGluY2x1ZGVzIGEgcG9pbnRlciB0byBPUy1zcGVjaWZpYyBQQ0kgZGV2aWNlIG9iamVjdC4KKyAqLworc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2F0dHIgeworCXZvaWQgX19pb21lbQkJKmJhcjA7CisJdm9pZCBfX2lvbWVtCQkqYmFyMTsKKwl2b2lkIF9faW9tZW0JCSpiYXIyOworCXN0cnVjdCBwY2lfZGV2IAkJKnBkZXY7CisJc3RydWN0IHZ4Z2VfaHdfdWxkX2Nicwl1bGRfY2FsbGJhY2tzOworfTsKKworI2RlZmluZSBWWEdFX0hXX0RFVklDRV9MSU5LX1NUQVRFX1NFVChobGRldiwgbHMpCShobGRldi0+bGlua19zdGF0ZSA9IGxzKQorCisjZGVmaW5lIFZYR0VfSFdfREVWSUNFX1RJTV9JTlRfTUFTS19TRVQobTAsIG0xLCBpKSB7CVwKKwlpZiAoaSA8IDE2KSB7CQkJCVwKKwkJbTBbMF0gfD0gdnhnZV92QklUKDB4OCwgKGkqNCksIDQpOwlcCisJCW0wWzFdIHw9IHZ4Z2VfdkJJVCgweDQsIChpKjQpLCA0KTsJXAorCX0JCQkgICAgICAgCQlcCisJZWxzZSB7CQkJCQlcCisJCW0xWzBdID0gMHg4MDAwMDAwMDsJCVwKKwkJbTFbMV0gPSAweDQwMDAwMDAwOwkJXAorCX0JCQkJCVwKK30KKworI2RlZmluZSBWWEdFX0hXX0RFVklDRV9USU1fSU5UX01BU0tfUkVTRVQobTAsIG0xLCBpKSB7CVwKKwlpZiAoaSA8IDE2KSB7CQkJCQlcCisJCW0wWzBdICY9IH52eGdlX3ZCSVQoMHg4LCAoaSo0KSwgNCk7CQlcCisJCW0wWzFdICY9IH52eGdlX3ZCSVQoMHg0LCAoaSo0KSwgNCk7CQlcCisJfQkJCQkJCVwKKwllbHNlIHsJCQkJCQlcCisJCW0xWzBdID0gMDsJCQkJXAorCQltMVsxXSA9IDA7CQkJCVwKKwl9CQkJCQkJXAorfQorCisjZGVmaW5lIFZYR0VfSFdfREVWSUNFX1NUQVRTX1BJT19SRUFEKGxvYywgb2Zmc2V0KSB7CQlcCisJc3RhdHVzID0gdnhnZV9od19tcnBjaW1fc3RhdHNfYWNjZXNzKGhsZGV2LCBcCisJCQkJVlhHRV9IV19TVEFUU19PUF9SRUFELCBcCisJCQkJbG9jLCBcCisJCQkJb2Zmc2V0LCBcCisJCQkJJnZhbDY0KTsJCQlcCisJCQkJCQkJCVwKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCQkJCVwKKwkJcmV0dXJuIHN0YXR1czsJCQkJCQlcCit9CisKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9TVEFUU19QSU9fUkVBRChvZmZzZXQpIHsJCQkJXAorCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9zdGF0c19hY2Nlc3ModnBhdGgsIFwKKwkJCVZYR0VfSFdfU1RBVFNfT1BfUkVBRCwgXAorCQkJb2Zmc2V0LCBcCisJCQkmdmFsNjQpOwkJCQkJXAorCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykJCQkJCVwKKwkJcmV0dXJuIHN0YXR1czsJCQkJCQlcCit9CisKKy8qCisgKiBzdHJ1Y3QgX192eGdlX2h3X3JpbmcgLSBSaW5nIGNoYW5uZWwuCisgKiBAY2hhbm5lbDogQ2hhbm5lbCAiYmFzZSIgb2YgdGhpcyByaW5nLCB0aGUgY29tbW9uIHBhcnQgb2YgYWxsIEhXCisgKiAgICAgICAgICAgY2hhbm5lbHMuCisgKiBAbWVtcG9vbDogTWVtb3J5IHBvb2wsIHRoZSBwb29sIGZyb20gd2hpY2ggZGVzY3JpcHRvcnMgZ2V0IGFsbG9jYXRlZC4KKyAqICAgICAgICAgICAoU2VlIHZ4Z2VfaHdfbW0uaCkuCisgKiBAY29uZmlnOiBSaW5nIGNvbmZpZ3VyYXRpb24sIHBhcnQgb2YgZGV2aWNlIGNvbmZpZ3VyYXRpb24KKyAqICAgICAgICAgIChzZWUgc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZ3t9KS4KKyAqIEByaW5nX2xlbmd0aDogTGVuZ3RoIG9mIHRoZSByaW5nCisgKiBAYnVmZmVyX21vZGU6IDEsIDMsIG9yIDUuIFRoZSB2YWx1ZSBzcGVjaWZpZXMgYSByZWNlaXZlIGJ1ZmZlciBtb2RlLAorICogICAgICAgICAgYXMgcGVyIFRpdGFuIFVzZXIgR3VpZGUuCisgKiBAcnhkX3NpemU6IFJ4RCBzaXplcyBmb3IgMS0sIDMtIG9yIDUtIGJ1ZmZlciBtb2Rlcy4gQXMgcGVyIFRpdGFuIHNwZWMsCisgKiAgICAgICAgICAgIDEtYnVmZmVyIG1vZGUgZGVzY3JpcHRvciBpcyAzMiBieXRlIGxvbmcsIGV0Yy4KKyAqIEByeGRfcHJpdl9zaXplOiBQZXIgUnhEIHNpemUgcmVzZXJ2ZWQgKGJ5IEhXKSBmb3IgZHJpdmVyIHRvIGtlZXAKKyAqICAgICAgICAgICAgICAgICBwZXItZGVzY3JpcHRvciBkYXRhIChlLmcuLCBETUEgaGFuZGxlIGZvciBTb2xhcmlzKQorICogQHBlcl9yeGRfc3BhY2U6IFBlciByeGQgc3BhY2UgcmVxdWVzdGVkIGJ5IGRyaXZlcgorICogQHJ4ZHNfcGVyX2Jsb2NrOiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgcGVyIGhhcmR3YXJlLWRlZmluZWQgUnhECisgKiAgICAgICAgICAgICAgICAgIGJsb2NrLiBEZXBlbmRzIG9uIHRoZSAoMS0sIDMtLCA1LSkgYnVmZmVyIG1vZGUuCisgKiBAcnhkYmxvY2tfcHJpdl9zaXplOiBSZXNlcnZlZCBhdCB0aGUgZW5kIG9mIGVhY2ggUnhEIGJsb2NrLiBIVyBpbnRlcm5hbAorICogICAgICAgICAgICAgICAgICAgICAgdXNhZ2UuIE5vdCB0byBjb25mdXNlIHdpdGggQHJ4ZF9wcml2X3NpemUuCisgKiBAY21wbF9jbnQ6IENvbXBsZXRpb24gY291bnRlci4gSXMgcmVzZXQgdG8gemVybyB1cG9uIGVudGVyaW5nIHRoZSBJU1IuCisgKiBAY2FsbGJhY2s6IENoYW5uZWwgY29tcGxldGlvbiBjYWxsYmFjay4gSFcgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2hlbiB0aGVyZQorICogICAgICAgICAgICBhcmUgbmV3IGNvbXBsZXRpb25zIG9uIHRoYXQgY2hhbm5lbC4gSW4gbWFueSBpbXBsZW1lbnRhdGlvbnMKKyAqICAgICAgICAgICAgdGhlIEBjYWxsYmFjayBleGVjdXRlcyBpbiB0aGUgaHcgaW50ZXJydXB0IGNvbnRleHQuCisgKiBAcnhkX2luaXQ6IENoYW5uZWwncyBkZXNjcmlwdG9yLWluaXRpYWxpemUgY2FsbGJhY2suCisgKiAgICAgICAgICAgIFNlZSB2eGdlX2h3X3JpbmdfcnhkX2luaXRfZnt9LgorICogICAgICAgICAgICBJZiBub3QgTlVMTCwgSFcgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2hlbiBvcGVuaW5nCisgKiAgICAgICAgICAgIHRoZSByaW5nLgorICogQHJ4ZF90ZXJtOiBDaGFubmVsJ3MgZGVzY3JpcHRvci10ZXJtaW5hdGUgY2FsbGJhY2suIElmIG5vdCBOVUxMLAorICogICAgICAgICAgSFcgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2hlbiBjbG9zaW5nIHRoZSBjb3JyZXNwb25kaW5nIGNoYW5uZWwuCisgKiAgICAgICAgICBTZWUgYWxzbyB2eGdlX2h3X2NoYW5uZWxfcnhkX3Rlcm1fZnt9LgorICogQHN0YXRzOiBTdGF0aXN0aWNzIGZvciByaW5nCisgKiBSaW5nIGNoYW5uZWwuCisgKgorICogTm90ZTogVGhlIHN0cnVjdHVyZSBpcyBjYWNoZSBsaW5lIGFsaWduZWQgdG8gYmV0dGVyIHV0aWxpemUKKyAqICAgICAgIENQVSBjYWNoZSBwZXJmb3JtYW5jZS4KKyAqLworc3RydWN0IF9fdnhnZV9od19yaW5nIHsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwJCWNoYW5uZWw7CisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbAkJCSptZW1wb29sOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZwkJX19pb21lbQkqdnBfcmVnOworCXN0cnVjdCB2eGdlX2h3X2NvbW1vbl9yZWcJCV9faW9tZW0JKmNvbW1vbl9yZWc7CisJdTMyCQkJCQlyaW5nX2xlbmd0aDsKKwl1MzIJCQkJCWJ1ZmZlcl9tb2RlOworCXUzMgkJCQkJcnhkX3NpemU7CisJdTMyCQkJCQlyeGRfcHJpdl9zaXplOworCXUzMgkJCQkJcGVyX3J4ZF9zcGFjZTsKKwl1MzIJCQkJCXJ4ZHNfcGVyX2Jsb2NrOworCXUzMgkJCQkJcnhkYmxvY2tfcHJpdl9zaXplOworCXUzMgkJCQkJY21wbF9jbnQ7CisJdTMyCQkJCQl2cF9pZDsKKwl1MzIJCQkJCWRvb3JiZWxsX2NudDsKKwl1MzIJCQkJCXRvdGFsX2RiX2NudDsKKwl1NjQJCQkJCXJ4ZHNfbGltaXQ7CisKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzICgqY2FsbGJhY2spKAorCQkJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5naCwKKwkJCXZvaWQgKnJ4ZGgsCisJCQl1OCB0X2NvZGUsCisJCQl2b2lkICp1c2VyZGF0YSk7CisKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzICgqcnhkX2luaXQpKAorCQkJdm9pZCAqcnhkaCwKKwkJCXZvaWQgKnVzZXJkYXRhKTsKKworCXZvaWQgKCpyeGRfdGVybSkoCisJCQl2b2lkICpyeGRoLAorCQkJZW51bSB2eGdlX2h3X3J4ZF9zdGF0ZSBzdGF0ZSwKKwkJCXZvaWQgKnVzZXJkYXRhKTsKKworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X3JpbmdfaW5mbyAqc3RhdHMJX19fX2NhY2hlbGluZV9hbGlnbmVkOworCXN0cnVjdCB2eGdlX2h3X3JpbmdfY29uZmlnCQkqY29uZmlnOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKKy8qKgorICogZW51bSBlbnVtIHZ4Z2VfaHdfdHhkbF9zdGF0ZSAtIERlc2NyaXB0b3IgKFRYREwpIHN0YXRlLgorICogQFZYR0VfSFdfVFhETF9TVEFURV9OT05FOiBJbnZhbGlkIHN0YXRlLgorICogQFZYR0VfSFdfVFhETF9TVEFURV9BVkFJTDogRGVzY3JpcHRvciBpcyBhdmFpbGFibGUgZm9yIHJlc2VydmF0aW9uLgorICogQFZYR0VfSFdfVFhETF9TVEFURV9QT1NURUQ6IERlc2NyaXB0b3IgaXMgcG9zdGVkIGZvciBwcm9jZXNzaW5nIGJ5IHRoZQorICogZGV2aWNlLgorICogQFZYR0VfSFdfVFhETF9TVEFURV9GUkVFRDogRGVzY3JpcHRvciBpcyBmcmVlIGFuZCBjYW4gYmUgcmV1c2VkIGZvcgorICogZmlsbGluZy1pbiBhbmQgcG9zdGluZyBsYXRlci4KKyAqCisgKiBUaXRhbi9IVyBkZXNjcmlwdG9yIHN0YXRlcy4KKyAqCisgKi8KK2VudW0gdnhnZV9od190eGRsX3N0YXRlIHsKKwlWWEdFX0hXX1RYRExfU1RBVEVfTk9ORQk9IDAsCisJVlhHRV9IV19UWERMX1NUQVRFX0FWQUlMCT0gMSwKKwlWWEdFX0hXX1RYRExfU1RBVEVfUE9TVEVECT0gMiwKKwlWWEdFX0hXX1RYRExfU1RBVEVfRlJFRUQJPSAzCit9OworLyoKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAtIEZpZm8uCisgKiBAY2hhbm5lbDogQ2hhbm5lbCAiYmFzZSIgb2YgdGhpcyBmaWZvLCB0aGUgY29tbW9uIHBhcnQgb2YgYWxsIEhXCisgKiAgICAgICAgICAgICBjaGFubmVscy4KKyAqIEBtZW1wb29sOiBNZW1vcnkgcG9vbCwgZnJvbSB3aGljaCBkZXNjcmlwdG9ycyBnZXQgYWxsb2NhdGVkLgorICogQGNvbmZpZzogRmlmbyBjb25maWd1cmF0aW9uLCBwYXJ0IG9mIGRldmljZSBjb25maWd1cmF0aW9uCisgKiAgICAgICAgICAgICAoc2VlIHN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWd7fSkuCisgKiBAaW50ZXJydXB0X3R5cGU6IEludGVycnVwdCB0eXBlIHRvIGJlIHVzZWQKKyAqIEBub19zbm9vcF9iaXRzOiBTZWUgc3RydWN0IHZ4Z2VfaHdfZmlmb19jb25maWd7fS4KKyAqIEB0eGRsX3Blcl9tZW1ibG9jazogTnVtYmVyIG9mIFR4RExzIChUeEQgbGlzdHMpIHBlciBtZW1ibG9jay4KKyAqICAgICAgICAgICAgIG9uIFR4REwgcGxlYXNlIHJlZmVyIHRvIFRpdGFuIFVHLgorICogQHR4ZGxfc2l6ZTogQ29uZmlndXJlZCBUeERMIHNpemUgKGkuZS4sIG51bWJlciBvZiBUeERzIGluIGEgbGlzdCksIHBsdXMKKyAqICAgICAgICAgICAgIHBlci1UeERMIEhXIHByaXZhdGUgc3BhY2UgKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYpLgorICogQHByaXZfc2l6ZTogUGVyLVR4IGRlc2NyaXB0b3Igc3BhY2UgcmVzZXJ2ZWQgZm9yIGRyaXZlcgorICogICAgICAgICAgICAgdXNhZ2UuCisgKiBAcGVyX3R4ZGxfc3BhY2U6IFBlciB0eGRsIHByaXZhdGUgc3BhY2UgZm9yIHRoZSBkcml2ZXIKKyAqIEBjYWxsYmFjazogRmlmbyBjb21wbGV0aW9uIGNhbGxiYWNrLiBIVyBpbnZva2VzIHRoZSBjYWxsYmFjayB3aGVuIHRoZXJlCisgKiAgICAgICAgICAgICBhcmUgbmV3IGNvbXBsZXRpb25zIG9uIHRoYXQgZmlmby4gSW4gbWFueSBpbXBsZW1lbnRhdGlvbnMKKyAqICAgICAgICAgICAgIHRoZSBAY2FsbGJhY2sgZXhlY3V0ZXMgaW4gdGhlIGh3IGludGVycnVwdCBjb250ZXh0LgorICogQHR4ZGxfdGVybTogRmlmbydzIGRlc2NyaXB0b3ItdGVybWluYXRlIGNhbGxiYWNrLiBJZiBub3QgTlVMTCwKKyAqICAgICAgICAgICAgIEhXIGludm9rZXMgdGhlIGNhbGxiYWNrIHdoZW4gY2xvc2luZyB0aGUgY29ycmVzcG9uZGluZyBmaWZvLgorICogICAgICAgICAgICAgU2VlIGFsc28gdnhnZV9od19maWZvX3R4ZGxfdGVybV9me30uCisgKiBAc3RhdHM6IFN0YXRpc3RpY3Mgb2YgdGhpcyBmaWZvCisgKgorICogRmlmbyBjaGFubmVsLgorICogTm90ZTogVGhlIHN0cnVjdHVyZSBpcyBjYWNoZSBsaW5lIGFsaWduZWQuCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfZmlmbyB7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsCQljaGFubmVsOworCXN0cnVjdCB2eGdlX2h3X21lbXBvb2wJCQkqbWVtcG9vbDsKKwlzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZwkJKmNvbmZpZzsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcJCV9faW9tZW0gKnZwX3JlZzsKKwlzdHJ1Y3QgX192eGdlX2h3X25vbl9vZmZsb2FkX2RiX3dyYXBwZXIJX19pb21lbSAqbm9mbF9kYjsKKwl1NjQJCQkJCWludGVycnVwdF90eXBlOworCXUzMgkJCQkJbm9fc25vb3BfYml0czsKKwl1MzIJCQkJCXR4ZGxfcGVyX21lbWJsb2NrOworCXUzMgkJCQkJdHhkbF9zaXplOworCXUzMgkJCQkJcHJpdl9zaXplOworCXUzMgkJCQkJcGVyX3R4ZGxfc3BhY2U7CisJdTMyCQkJCQl2cF9pZDsKKwl1MzIJCQkJCXR4X2ludHJfbnVtOworCisJZW51bSB2eGdlX2h3X3N0YXR1cyAoKmNhbGxiYWNrKSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb19oYW5kbGUsCisJCQl2b2lkICp0eGRsaCwKKwkJCWVudW0gdnhnZV9od19maWZvX3Rjb2RlIHRfY29kZSwKKwkJCXZvaWQgKnVzZXJkYXRhLAorCQkJdm9pZCAqKnNrYl9wdHIpOworCisJdm9pZCAoKnR4ZGxfdGVybSkoCisJCQl2b2lkICp0eGRsaCwKKwkJCWVudW0gdnhnZV9od190eGRsX3N0YXRlIHN0YXRlLAorCQkJdm9pZCAqdXNlcmRhdGEpOworCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfZmlmb19pbmZvICpzdGF0cyBfX19fY2FjaGVsaW5lX2FsaWduZWQ7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworLyoKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYgLSBUcmFuc21pdCBkZXNjcmlwdG9yIEhXLXByaXZhdGUgZGF0YS4KKyAqIEBkbWFfYWRkcjogRE1BIChtYXBwZWQpIGFkZHJlc3Mgb2YgX3RoaXNfIGRlc2NyaXB0b3IuCisgKiBAZG1hX2hhbmRsZTogRE1BIGhhbmRsZSB1c2VkIHRvIG1hcCB0aGUgZGVzY3JpcHRvciBvbnRvIGRldmljZS4KKyAqIEBkbWFfb2Zmc2V0OiBEZXNjcmlwdG9yJ3Mgb2Zmc2V0IGluIHRoZSBtZW1vcnkgYmxvY2suIEhXIGFsbG9jYXRlcworICoJIGRlc2NyaXB0b3JzIGluIG1lbW9yeSBibG9ja3MgKHNlZSBzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZ3t9KQorICogICAgICAgICAgICAgRWFjaCBtZW1ibG9jayBpcyBhIGNvbnRpZ3VvdXMgYmxvY2sgb2YgRE1BLWFibGUgbWVtb3J5LgorICogQGZyYWdzOiBUb3RhbCBudW1iZXIgb2YgZnJhZ21lbnRzICh0aGF0IGlzLCBjb250aWd1b3VzIGRhdGEgYnVmZmVycykKKyAqIGNhcnJpZWQgYnkgdGhpcyBUeERMLgorICogQGFsaWduX3ZhZGRyX3N0YXJ0OiBBbGlnbmVkIHZpcnR1YWwgYWRkcmVzcyBzdGFydAorICogQGFsaWduX3ZhZGRyOiBWaXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHBlci1UeERMIGFyZWEgaW4gbWVtb3J5IHVzZWQgZm9yCisgKiAgICAgICAgICAgICBhbGlnbmVtZW50LiBVc2VkIHRvIHBsYWNlIG9uZSBvciBtb3JlIG1pcy1hbGlnbmVkIGZyYWdtZW50cworICogQGFsaWduX2RtYV9hZGRyOiBETUEgYWRkcmVzcyB0cmFuc2xhdGVkIGZyb20gdGhlIEBhbGlnbl92YWRkci4KKyAqIEBhbGlnbl9kbWFfaGFuZGxlOiBETUEgaGFuZGxlIHRoYXQgY29ycmVzcG9uZHMgdG8gQGFsaWduX2RtYV9hZGRyLgorICogQGFsaWduX2RtYV9hY2NoOiBETUEgYWNjZXNzIGhhbmRsZSBjb3JyZXNwb25kcyB0byBAYWxpZ25fZG1hX2FkZHIuCisgKiBAYWxpZ25fZG1hX29mZnNldDogVGhlIGN1cnJlbnQgb2Zmc2V0IGludG8gdGhlIEBhbGlnbl92YWRkciBhcmVhLgorICogR3Jvd3Mgd2hpbGUgZmlsbGluZyB0aGUgZGVzY3JpcHRvciwgZ2V0cyByZXNldC4KKyAqIEBhbGlnbl91c2VkX2ZyYWdzOiBOdW1iZXIgb2YgZnJhZ21lbnRzIHVzZWQuCisgKiBAYWxsb2NfZnJhZ3M6IFRvdGFsIG51bWJlciBvZiBmcmFnbWVudHMgYWxsb2NhdGVkLgorICogQHVudXNlZDogVE9ETworICogQG5leHRfdHhkbF9wcml2OiAoVE9ETykuCisgKiBAZmlyc3RfdHhkcDogKFRPRE8pLgorICogQGxpbmtlZF90eGRsX3ByaXY6IFBvaW50ZXIgdG8gYW55IGxpbmtlZCBUeERMIGZvciBjcmVhdGluZyBjb250aWd1b3VzCisgKiAgICAgICAgICAgICBUeERMIGxpc3QuCisgKiBAdHhkbGg6IENvcnJlc3BvbmRpbmcgdHhkbGggdG8gdGhpcyBUeERMLgorICogQG1lbWJsb2NrOiBQb2ludGVyIHRvIHRoZSBUeERMIG1lbW9yeSBibG9jayBvciBtZW1vcnkgcGFnZS4KKyAqICAgICAgICAgICAgIG9uIHRoZSBuZXh0IHNlbmQgb3BlcmF0aW9uLgorICogQGRtYV9vYmplY3Q6IERNQSBhZGRyZXNzIGFuZCBoYW5kbGUgb2YgdGhlIG1lbW9yeSBibG9jayB0aGF0IGNvbnRhaW5zCisgKiAgICAgICAgICAgICB0aGUgZGVzY3JpcHRvci4gVGhpcyBtZW1iZXIgaXMgdXNlZCBvbmx5IGluIHRoZSAiY2hlY2tlZCIKKyAqICAgICAgICAgICAgIHZlcnNpb24gb2YgdGhlIEhXICh0byBlbmZvcmNlIGNlcnRhaW4gYXNzZXJ0aW9ucyk7CisgKiAgICAgICAgICAgICBvdGhlcndpc2UgaXQgZ2V0cyBjb21waWxlZCBvdXQuCisgKiBAYWxsb2NhdGVkOiBUcnVlIGlmIHRoZSBkZXNjcmlwdG9yIGlzIHJlc2VydmVkLCAwIG90aGVyd2lzZS4gSW50ZXJuYWwgdXNhZ2UuCisgKgorICogUGVyLXRyYW5zbWl0IGRlY3NyaXB0b3IgSFctcHJpdmF0ZSBkYXRhLiBIVyB1c2VzIHRoZSBzcGFjZSB0byBrZWVwIERNQQorICogaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXNjcmlwdG9yLiBOb3RlIHRoYXQgZHJpdmVyIGNhbiBhc2sgSFcKKyAqIHRvIGFsbG9jYXRlIGFkZGl0aW9uYWwgcGVyLWRlc2NyaXB0b3Igc3BhY2UgZm9yIGl0cyBvd24gKGRyaXZlci1zcGVjaWZpYykKKyAqIHB1cnBvc2VzLgorICoKKyAqIFNlZSBhbHNvOiBzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF9wcml2e30uCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYgeworCWRtYV9hZGRyX3QJCWRtYV9hZGRyOworCXN0cnVjdCBwY2lfZGV2CSpkbWFfaGFuZGxlOworCXB0cmRpZmZfdAkJZG1hX29mZnNldDsKKwl1MzIJCQkJZnJhZ3M7CisJdTgJCQkJKmFsaWduX3ZhZGRyX3N0YXJ0OworCXU4CQkJCSphbGlnbl92YWRkcjsKKwlkbWFfYWRkcl90CQlhbGlnbl9kbWFfYWRkcjsKKwlzdHJ1Y3QgcGNpX2RldiAJKmFsaWduX2RtYV9oYW5kbGU7CisJc3RydWN0IHBjaV9kZXYJKmFsaWduX2RtYV9hY2NoOworCXB0cmRpZmZfdAkJYWxpZ25fZG1hX29mZnNldDsKKwl1MzIJCQkJYWxpZ25fdXNlZF9mcmFnczsKKwl1MzIJCQkJYWxsb2NfZnJhZ3M7CisJdTMyCQkJCXVudXNlZDsKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2CSpuZXh0X3R4ZGxfcHJpdjsKKwlzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZAkJKmZpcnN0X3R4ZHA7CisJdm9pZAkJCSptZW1ibG9jazsKK307CisKKy8qCisgKiBzdHJ1Y3QgX192eGdlX2h3X25vbl9vZmZsb2FkX2RiX3dyYXBwZXIgLSBOb24tb2ZmbG9hZCBEb29yYmVsbCBXcmFwcGVyCisgKiBAY29udHJvbF8wOiBCaXRzIDAgdG8gNyAtIERvb3JiZWxsIHR5cGUuCisgKiAgICAgICAgICAgICBCaXRzIDggdG8gMzEgLSBSZXNlcnZlZC4KKyAqICAgICAgICAgICAgIEJpdHMgMzIgdG8gMzkgLSBUaGUgaGlnaGVzdCBUeEQgaW4gdGhpcyBUeERMLgorICogICAgICAgICAgICAgQml0cyA0MCB0byA0NyAtIFJlc2VydmVkLgorCSoJICAgICAgIEJpdHMgNDggdG8gNTUgLSBSZXNlcnZlZC4KKyAqICAgICAgICAgICAgIEJpdHMgNTYgdG8gNjMgLSBObyBzbm9vcCBmbGFncy4KKyAqIEB0eGRsX3B0cjogIFRoZSBzdGFydGluZyBsb2NhdGlvbiBvZiB0aGUgVHhETCBpbiBob3N0IG1lbW9yeS4KKyAqCisgKiBDcmVhdGVkIGJ5IHRoZSBob3N0IGFuZCB3cml0dGVuIHRvIHRoZSBhZGFwdGVyIHZpYSBQSU8gdG8gYSBLZXJuZWwgRG9vcmJlbGwKKyAqIEZJRk8uIEFsbCBub24tb2ZmbG9hZCBkb29yYmVsbCB3cmFwcGVyIGZpZWxkcyBtdXN0IGJlIHdyaXR0ZW4gYnkgdGhlIGhvc3QgYXMKKyAqIHBhcnQgb2YgYSBkb29yYmVsbCB3cml0ZS4gQ29uc3VtZWQgYnkgdGhlIGFkYXB0ZXIgYnV0IGlzIG5vdCB3cml0dGVuIGJ5IHRoZQorICogYWRhcHRlci4KKyAqLworc3RydWN0IF9fdnhnZV9od19ub25fb2ZmbG9hZF9kYl93cmFwcGVyIHsKKwl1NjQJCWNvbnRyb2xfMDsKKyNkZWZpbmUJVlhHRV9IV19OT0RCV19HRVRfVFlQRShjdHJsMCkJCQl2eGdlX2JWQUxuKGN0cmwwLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX05PREJXX1RZUEUodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZQlWWEdFX0hXX05PREJXX1RZUEVfTk9EQlcJCQkJMAorCisjZGVmaW5lCVZYR0VfSFdfTk9EQldfR0VUX0xBU1RfVFhEX05VTUJFUihjdHJsMCkJdnhnZV9iVkFMbihjdHJsMCwgMzIsIDgpCisjZGVmaW5lIFZYR0VfSFdfTk9EQldfTEFTVF9UWERfTlVNQkVSKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDgpCisKKyNkZWZpbmUJVlhHRV9IV19OT0RCV19HRVRfTk9fU05PT1AoY3RybDApCQl2eGdlX2JWQUxuKGN0cmwwLCA1NiwgOCkKKyNkZWZpbmUgVlhHRV9IV19OT0RCV19MSVNUX05PX1NOT09QKHZhbCkgdnhnZV92QklUKHZhbCwgNTYsIDgpCisjZGVmaW5lCVZYR0VfSFdfTk9EQldfTElTVF9OT19TTk9PUF9UWERfUkVBRF9UWEQwX1dSSVRFCQkweDIKKyNkZWZpbmUJVlhHRV9IV19OT0RCV19MSVNUX05PX1NOT09QX1RYX0ZSQU1FX0RBVEFfUkVBRAkJMHgxCisKKwl1NjQJCXR4ZGxfcHRyOworfTsKKworLyoKKyAqIFRYIERlc2NyaXB0b3IKKyAqLworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkIC0gVHJhbnNtaXQgRGVzY3JpcHRvcgorICogQGNvbnRyb2xfMDogQml0cyAwIHRvIDYgLSBSZXNlcnZlZC4KKyAqICAgICAgICAgICAgIEJpdCA3IC0gTGlzdCBPd25lcnNoaXAuIFRoaXMgZmllbGQgc2hvdWxkIGJlIGluaXRpYWxpemVkCisgKiAgICAgICAgICAgICB0byAnMScgYnkgdGhlIGRyaXZlciBiZWZvcmUgdGhlIHRyYW5zbWl0IGxpc3QgcG9pbnRlciBpcworICogICAgICAgICAgICAgd3JpdHRlbiB0byB0aGUgYWRhcHRlci4gVGhpcyBmaWVsZCB3aWxsIGJlIHNldCB0byAnMCcgYnkgdGhlCisgKiAgICAgICAgICAgICBhZGFwdGVyIG9uY2UgaXQgaGFzIGNvbXBsZXRlZCB0cmFuc21pdHRpbmcgdGhlIGZyYW1lIG9yIGZyYW1lcyBpbgorICogICAgICAgICAgICAgdGhlIGxpc3QuIE5vdGUgLSBUaGlzIGZpZWxkIGlzIG9ubHkgdmFsaWQgaW4gVHhEMC4gQWRkaXRpb25hbGx5LAorICogICAgICAgICAgICAgZm9yIG11bHRpLWxpc3Qgc2VxdWVuY2VzLCB0aGUgZHJpdmVyIHNob3VsZCBub3QgcmVsZWFzZSBhbnkKKyAqICAgICAgICAgICAgIGJ1ZmZlcnMgdW50aWwgdGhlIG93bmVyc2hpcCBvZiB0aGUgbGFzdCBsaXN0IGluIHRoZSBtdWx0aS1saXN0CisgKiAgICAgICAgICAgICBzZXF1ZW5jZSBoYXMgYmVlbiByZXR1cm5lZCB0byB0aGUgaG9zdC4KKyAqICAgICAgICAgICAgIEJpdHMgOCB0byAxMSAtIFJlc2VydmVkCisgKiAgICAgICAgICAgICBCaXRzIDEyIHRvIDE1IC0gVHJhbnNmZXJfQ29kZS4gVGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIGluCisgKiAgICAgICAgICAgICBUeEQwLiBJdCBpcyB1c2VkIHRvIGRlc2NyaWJlIHRoZSBzdGF0dXMgb2YgdGhlIHRyYW5zbWl0IGRhdGEKKyAqICAgICAgICAgICAgIGJ1ZmZlciB0cmFuc2Zlci4gVGhpcyBmaWVsZCBpcyBhbHdheXMgb3ZlcndyaXR0ZW4gYnkgdGhlCisgKiAgICAgICAgICAgICBhZGFwdGVyLCBzbyB0aGlzIGZpZWxkIG1heSBiZSBpbml0aWFsaXplZCB0byBhbnkgdmFsdWUuCisgKiAgICAgICAgICAgICBCaXRzIDE2IHRvIDE3IC0gSG9zdCBzdGVlcmluZy4gVGhpcyBmaWVsZCBhbGxvd3MgdGhlIGhvc3QgdG8KKyAqICAgICAgICAgICAgIG92ZXJyaWRlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIHBoeXNpY2FsIHRyYW5zbWl0IHBvcnQuCisgKiAgICAgICAgICAgICBBdHRlbnRpb246CisgKiAgICAgICAgICAgICBOb3JtYWwgc291bmRzIGFzIGlmIGxlYXJuZWQgZnJvbSB0aGUgc3dpdGNoIHJhdGhlciB0aGFuIGZyb20KKyAqICAgICAgICAgICAgIHRoZSBhZ2dyZWdhdGlvbiBhbGdvcnl0aG1zLgorICogICAgICAgICAgICAgMDA6IE5vcm1hbC4gVXNlIERlc3RpbmF0aW9uL01BQyBBZGRyZXNzCisgKiAgICAgICAgICAgICBsb29rdXAgdG8gZGV0ZXJtaW5lIHRoZSB0cmFuc21pdCBwb3J0LgorICogICAgICAgICAgICAgMDE6IFNlbmQgb24gcGh5c2ljYWwgUG9ydDEuCisgKiAgICAgICAgICAgICAxMDogU2VuZCBvbiBwaHlzaWNhbCBQb3J0MC4KKwkqCSAgICAgICAxMTogU2VuZCBvbiBib3RoIHBvcnRzLgorICogICAgICAgICAgICAgQml0cyAxOCB0byAyMSAtIFJlc2VydmVkCisgKiAgICAgICAgICAgICBCaXRzIDIyIHRvIDIzIC0gR2F0aGVyX0NvZGUuIFRoaXMgZmllbGQgaXMgc2V0IGJ5IHRoZSBob3N0IGFuZAorICogICAgICAgICAgICAgaXMgdXNlZCB0byBkZXNjcmliZSBob3cgaW5kaXZpZHVhbCBidWZmZXJzIGNvbXByaXNlIGEgZnJhbWUuCisgKiAgICAgICAgICAgICAxMDogRmlyc3QgZGVzY3JpcHRvciBvZiBhIGZyYW1lLgorICogICAgICAgICAgICAgMDA6IE1pZGRsZSBvZiBhIG11bHRpLWRlc2NyaXB0b3IgZnJhbWUuCisgKiAgICAgICAgICAgICAwMTogTGFzdCBkZXNjcmlwdG9yIG9mIGEgZnJhbWUuCisgKiAgICAgICAgICAgICAxMTogRmlyc3QgYW5kIGxhc3QgZGVzY3JpcHRvciBvZiBhIGZyYW1lICh0aGUgZW50aXJlIGZyYW1lCisgKiAgICAgICAgICAgICByZXNpZGVzIGluIGEgc2luZ2xlIGJ1ZmZlcikuCisgKiAgICAgICAgICAgICBGb3IgbXVsdGktZGVzY3JpcHRvciBmcmFtZXMsIHRoZSBvbmx5IHZhbGlkIGdhdGhlciBjb2RlIHNlcXVlbmNlCisgKiAgICAgICAgICAgICBpcyB7MTAsIFswMF0sIDAxfS4gSW4gb3RoZXIgd29yZHMsIHRoZSBkZXNjcmlwdG9ycyBtdXN0IGJlIHBsYWNlZAorICogICAgICAgICAgICAgaW4gdGhlIGxpc3QgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCisgKiAgICAgICAgICAgICBCaXRzIDI0IHRvIDI3IC0gUmVzZXJ2ZWQKKyAqICAgICAgICAgICAgIEJpdHMgMjggdG8gMjkgLSBMU09fRnJtX0VuY2FwLiBMU08gRnJhbWUgRW5jYXBzdWxhdGlvbgorICogICAgICAgICAgICAgZGVmaW5pdGlvbi4gT25seSB2YWxpZCBpbiBUeEQwLiBUaGlzIGZpZWxkIGFsbG93cyB0aGUgaG9zdCB0bworICogICAgICAgICAgICAgaW5kaWNhdGUgdGhlIEV0aGVybmV0IGVuY2Fwc3VsYXRpb24gb2YgYW4gb3V0Ym91bmQgTFNPIHBhY2tldC4KKyAqICAgICAgICAgICAgIDAwIC0gY2xhc3NpYyBtb2RlIChiZXN0IGd1ZXNzKQorICogICAgICAgICAgICAgMDEgLSBMTEMKKyAqICAgICAgICAgICAgIDEwIC0gU05BUAorICogICAgICAgICAgICAgMTEgLSBESVgKKyAqICAgICAgICAgICAgIElmICJjbGFzc2ljIG1vZGUiIGlzIHNlbGVjdGVkLCB0aGUgYWRhcHRlciB3aWxsIGF0dGVtcHQgdG8KKyAqICAgICAgICAgICAgIGRlY29kZSB0aGUgZnJhbWUncyBFdGhlcm5ldCBlbmNhcHN1bGF0aW9uIGJ5IGV4YW1pbmluZyB0aGUgTC9UCisgKiAgICAgICAgICAgICBmaWVsZCBhcyBmb2xsb3dzOgorICogICAgICAgICAgICAgPD0gMHgwNURDIExMQy9TTkFQIGVuY29kaW5nOyBtdXN0IGV4YW1pbmUgRFNBUC9TU0FQIHRvIGRldGVybWluZQorICogICAgICAgICAgICAgaWYgcGFja2V0IGlzIElQdjQgb3IgSVB2Ni4KKyAqICAgICAgICAgICAgIDB4ODg3MCBKdW1iby1TTkFQIGVuY29kaW5nLgorICogICAgICAgICAgICAgMHgwODAwIElQdjQgRElYIGVuY29kaW5nCisgKiAgICAgICAgICAgICAweDg2REQgSVB2NiBESVggZW5jb2RpbmcKKyAqICAgICAgICAgICAgIG90aGVycyBpbGxlZ2FsIGVuY2Fwc3VsYXRpb24KKyAqICAgICAgICAgICAgIEJpdHMgMzAgLSBMU09fIEZsYWcuIExhcmdlIFNlbmQgT2ZmbG9hZCAoTFNPKSBmbGFnLgorICogICAgICAgICAgICAgU2V0IHRvIDEgdG8gcGVyZm9ybSBzZWdtZW50YXRpb24gb2ZmbG9hZCBmb3IgVENQL1VEUC4KKyAqICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgdmFsaWQgb25seSBpbiBUeEQwLgorICogICAgICAgICAgICAgQml0cyAzMSB0byAzMyAtIFJlc2VydmVkLgorICogICAgICAgICAgICAgQml0cyAzNCB0byA0NyAtIExTT19NU1MuIFRDUC9VRFAgTFNPIE1heGltdW0gU2VnbWVudCBTaXplCisgKiAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIG1lYW5pbmdmdWwgb25seSB3aGVuIExTT19Db250cm9sIGlzIG5vbi16ZXJvLgorICogICAgICAgICAgICAgV2hlbiBMU09fQ29udHJvbCBpcyBzZXQgdG8gVENQX0xTTywgdGhlIHNpbmdsZSAocG9zc2libHkgbGFyZ2UpCisgKiAgICAgICAgICAgICBUQ1Agc2VnbWVudCBkZXNjcmliZWQgYnkgdGhpcyBUeERMIHdpbGwgYmUgc2VudCBhcyBhIHNlcmllcyBvZgorICogICAgICAgICAgICAgVENQIHNlZ21lbnRzIGVhY2ggb2Ygd2hpY2ggY29udGFpbnMgbm8gbW9yZSB0aGFuIExTT19NU1MKKyAqICAgICAgICAgICAgIHBheWxvYWQgYnl0ZXMuCisgKiAgICAgICAgICAgICBXaGVuIExTT19Db250cm9sIGlzIHNldCB0byBVRFBfTFNPLCB0aGUgc2luZ2xlIChwb3NzaWJseSBsYXJnZSkKKyAqICAgICAgICAgICAgIFVEUCBkYXRhZ3JhbSBkZXNjcmliZWQgYnkgdGhpcyBUeERMIHdpbGwgYmUgc2VudCBhcyBhIHNlcmllcyBvZgorICogICAgICAgICAgICAgVURQIGRhdGFncmFtcyBlYWNoIG9mIHdoaWNoIGNvbnRhaW5zIG5vIG1vcmUgdGhhbiBMU09fTVNTCisgKiAgICAgICAgICAgICBwYXlsb2FkIGJ5dGVzLgorICogICAgICAgICAgICAgQWxsIG91dGdvaW5nIGZyYW1lcyBmcm9tIHRoaXMgVHhETCB3aWxsIGhhdmUgTFNPX01TUyBieXRlcyBvZiBVRFAKKyAqICAgICAgICAgICAgIG9yIFRDUCBwYXlsb2FkLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGxhc3QsIHdoaWNoIHdpbGwgaGF2ZQorICogICAgICAgICAgICAgPD0gTFNPX01TUyBieXRlcyBvZiBwYXlsb2FkLgorICogICAgICAgICAgICAgQml0cyA0OCB0byA2MyAtIEJ1ZmZlcl9TaXplLiBOdW1iZXIgb2YgdmFsaWQgYnl0ZXMgaW4gdGhlCisgKiAgICAgICAgICAgICBidWZmZXIgdG8gYmUgcmVhZCBieSB0aGUgYWRhcHRlci4gVGhpcyBmaWVsZCBpcyB3cml0dGVuIGJ5IHRoZQorICogICAgICAgICAgICAgaG9zdC4gQSB2YWx1ZSBvZiAwIGlzIGlsbGVnYWwuCisgKgkgICAgICAgQml0cyAzMiB0byA2MyAtIFRoaXMgdmFsdWUgaXMgd3JpdHRlbiBieSB0aGUgYWRhcHRlciB1cG9uCisgKgkgICAgICAgY29tcGxldGlvbiBvZiBhIFVEUCBvciBUQ1AgTFNPIG9wZXJhdGlvbiBhbmQgaW5kaWNhdGVzIHRoZSBudW1iZXIKKyAqICAgICAgICAgICAgIG9mIFVEUCBvciBUQ1AgcGF5bG9hZCBieXRlcyB0aGF0IHdlcmUgdHJhbnNtaXR0ZWQuIDB4MDAwMCB3aWxsIGJlCisgKiAgICAgICAgICAgICByZXR1cm5lZCBmb3IgYW55IG5vbi1MU08gb3BlcmF0aW9uLgorICogQGNvbnRyb2xfMTogQml0cyAwIHRvIDQgLSBSZXNlcnZlZC4KKyAqICAgICAgICAgICAgIEJpdCA1IC0gVHhfQ0tPX0lQdjQgU2V0IHRvIGEgJzEnIHRvIGVuYWJsZSBJUHY0IGhlYWRlciBjaGVja3N1bQorICogICAgICAgICAgICAgb2ZmbG9hZC4gVGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIGluIHRoZSBmaXJzdCBUeEQgb2YgYSBmcmFtZS4KKyAqICAgICAgICAgICAgIEJpdCA2IC0gVHhfQ0tPX1RDUCBTZXQgdG8gYSAnMScgdG8gZW5hYmxlIFRDUCBjaGVja3N1bSBvZmZsb2FkLgorICogICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIGluIHRoZSBmaXJzdCBUeEQgb2YgYSBmcmFtZSAodGhlIFR4RCdzCisgKiAgICAgICAgICAgICBnYXRoZXIgY29kZSBtdXN0IGJlIDEwIG9yIDExKS4gVGhlIGRyaXZlciBzaG91bGQgb25seSBzZXQgdGhpcworICogICAgICAgICAgICAgYml0IGlmIGl0IGNhbiBndWFyYW50ZWUgdGhhdCBUQ1AgaXMgcHJlc2VudC4KKyAqICAgICAgICAgICAgIEJpdCA3IC0gVHhfQ0tPX1VEUCBTZXQgdG8gYSAnMScgdG8gZW5hYmxlIFVEUCBjaGVja3N1bSBvZmZsb2FkLgorICogICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIGluIHRoZSBmaXJzdCBUeEQgb2YgYSBmcmFtZSAodGhlIFR4RCdzCisgKiAgICAgICAgICAgICBnYXRoZXIgY29kZSBtdXN0IGJlIDEwIG9yIDExKS4gVGhlIGRyaXZlciBzaG91bGQgb25seSBzZXQgdGhpcworICogICAgICAgICAgICAgYml0IGlmIGl0IGNhbiBndWFyYW50ZWUgdGhhdCBVRFAgaXMgcHJlc2VudC4KKyAqICAgICAgICAgICAgIEJpdHMgOCB0byAxNCAtIFJlc2VydmVkLgorICogICAgICAgICAgICAgQml0IDE1IC0gVHhfVkxBTl9FbmFibGUgVkxBTiB0YWcgaW5zZXJ0aW9uIGZsYWcuIFNldCB0byBhICcxJyB0bworICogICAgICAgICAgICAgaW5zdHJ1Y3QgdGhlIGFkYXB0ZXIgdG8gaW5zZXJ0IHRoZSBWTEFOIHRhZyBzcGVjaWZpZWQgYnkgdGhlCisgKiAgICAgICAgICAgICBUeF9WTEFOX1RhZyBmaWVsZC4gVGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIGluIHRoZSBmaXJzdCBUeEQgb2YKKyAqICAgICAgICAgICAgIGEgZnJhbWUuCisgKiAgICAgICAgICAgICBCaXRzIDE2IHRvIDMxIC0gVHhfVkxBTl9UYWcuIFZhcmlhYmxlIHBvcnRpb24gb2YgdGhlIFZMQU4gdGFnCisgKiAgICAgICAgICAgICB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBmcmFtZSBieSB0aGUgYWRhcHRlciAodGhlIGZpcnN0IHR3byBieXRlcworICogICAgICAgICAgICAgb2YgYSBWTEFOIHRhZyBhcmUgYWx3YXlzIDB4ODEwMCkuIFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCBpZiB0aGUKKyAqICAgICAgICAgICAgIFR4X1ZMQU5fRW5hYmxlIGZpZWxkIGlzIHNldCB0byAnMScuCisgKiAgICAgICAgICAgICBCaXRzIDMyIHRvIDMzIC0gUmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICBCaXRzIDM0IHRvIDM5IC0gVHhfSW50X051bWJlci4gSW5kaWNhdGVzIHdoaWNoIFR4IGludGVycnVwdAorICogICAgICAgICAgICAgbnVtYmVyIHRoZSBmcmFtZSBhc3NvY2lhdGVkIHdpdGguIFRoaXMgZmllbGQgaXMgd3JpdHRlbiBieSB0aGUKKyAqICAgICAgICAgICAgIGhvc3QuIEl0IGlzIG9ubHkgdmFsaWQgaW4gdGhlIGZpcnN0IFR4RCBvZiBhIGZyYW1lLgorICogICAgICAgICAgICAgQml0cyA0MCB0byA0MiAtIFJlc2VydmVkLgorICogICAgICAgICAgICAgQml0IDQzIC0gU2V0IHRvIDEgdG8gZXhjbHVkZSB0aGUgZnJhbWUgZnJvbSBiYW5kd2lkdGggbWV0ZXJpbmcKKyAqICAgICAgICAgICAgIGZ1bmN0aW9ucy4gVGhpcyBmaWVsZCBpcyB2YWxpZCBvbmx5IGluIHRoZSBmaXJzdCBUeEQKKyAqICAgICAgICAgICAgIG9mIGEgZnJhbWUuCisgKiAgICAgICAgICAgICBCaXRzIDQ0IHRvIDQ1IC0gUmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICBCaXQgNDYgLSBUeF9JbnRfUGVyX0xpc3QgU2V0IHRvIGEgJzEnIHRvIGluc3RydWN0IHRoZSBhZGFwdGVyIHRvCisgKiAgICAgICAgICAgICBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgYXMgc29vbiBhcyBhbGwgb2YgdGhlIGZyYW1lcyBpbiB0aGUgbGlzdAorICogICAgICAgICAgICAgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkLiBJbiBvcmRlciB0byBoYXZlIHBlci1mcmFtZSBpbnRlcnJ1cHRzLAorICogICAgICAgICAgICAgdGhlIGRyaXZlciBzaG91bGQgcGxhY2UgYSBtYXhpbXVtIG9mIG9uZSBmcmFtZSBwZXIgbGlzdC4gVGhpcworICogICAgICAgICAgICAgZmllbGQgaXMgb25seSB2YWxpZCBpbiB0aGUgZmlyc3QgVHhEIG9mIGEgZnJhbWUuCisgKiAgICAgICAgICAgICBCaXQgNDcgLSBUeF9JbnRfVXRpbGl6YXRpb24gU2V0IHRvIGEgJzEnIHRvIGluc3RydWN0IHRoZSBhZGFwdGVyCisgKiAgICAgICAgICAgICB0byBjb3VudCB0aGUgZnJhbWUgdG93YXJkIHRoZSB1dGlsaXphdGlvbiBpbnRlcnJ1cHQgc3BlY2lmaWVkIGluCisgKiAgICAgICAgICAgICB0aGUgVHhfSW50X051bWJlciBmaWVsZC4gVGhpcyBmaWVsZCBpcyBvbmx5IHZhbGlkIGluIHRoZSBmaXJzdAorICogICAgICAgICAgICAgVHhEIG9mIGEgZnJhbWUuCisgKiAgICAgICAgICAgICBCaXRzIDQ4IHRvIDYzIC0gUmVzZXJ2ZWQuCisgKiBAYnVmZmVyX3BvaW50ZXI6IEJ1ZmZlciBzdGFydCBhZGRyZXNzLgorICogQGhvc3RfY29udHJvbDogSG9zdF9Db250cm9sLk9wYXF1ZSA2NGJpdCBkYXRhIHN0b3JlZCBieSBkcml2ZXIgaW5zaWRlIHRoZQorICogICAgICAgICAgICBUaXRhbiBkZXNjcmlwdG9yIHByaW9yIHRvIHBvc3RpbmcgdGhlIGxhdHRlciBvbiB0aGUgZmlmbworICogICAgICAgICAgICB2aWEgdnhnZV9od19maWZvX3R4ZGxfcG9zdCgpLlRoZSAlaG9zdF9jb250cm9sIGlzIHJldHVybmVkIGFzIGlzCisgKiAgICAgICAgICAgIHRvIHRoZSBkcml2ZXIgd2l0aCBlYWNoIGNvbXBsZXRlZCBkZXNjcmlwdG9yLgorICoKKyAqIFRyYW5zbWl0IGRlc2NyaXB0b3IgKFR4RCkuRmlmbyBkZXNjcmlwdG9yIGNvbnRhaW5zIGNvbmZpZ3VyZWQgbnVtYmVyCisgKiAobGlzdCkgb2YgVHhEcy4gKiBGb3IgbW9yZSBkZXRhaWxzIHBsZWFzZSByZWZlciB0byBUaXRhbiBVc2VyIEd1aWRlLAorICogU2VjdGlvbiA1LjQuMiAiVHJhbnNtaXQgRGVzY3JpcHRvciAoVHhEKSBGb3JtYXQiLgorICovCitzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCB7CisJdTY0IGNvbnRyb2xfMDsKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9MSVNUX09XTl9BREFQVEVSCQl2eGdlX21CSVQoNykKKworI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX1RfQ09ERV9HRVQoY3RybDApCQl2eGdlX2JWQUxuKGN0cmwwLCAxMiwgNCkKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9UX0NPREUodmFsKSAJCQl2eGdlX3ZCSVQodmFsLCAxMiwgNCkKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9UX0NPREVfVU5VU0VECQlWWEdFX0hXX0ZJRk9fVF9DT0RFX1VOVVNFRAorCisKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9HQVRIRVJfQ09ERSh2YWwpIAkJdnhnZV92QklUKHZhbCwgMjIsIDIpCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfR0FUSEVSX0NPREVfRklSU1QJVlhHRV9IV19GSUZPX0dBVEhFUl9DT0RFX0ZJUlNUCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfR0FUSEVSX0NPREVfTEFTVAlWWEdFX0hXX0ZJRk9fR0FUSEVSX0NPREVfTEFTVAorCisKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9MU09fRU4JCQkJdnhnZV9tQklUKDMwKQorCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfTFNPX01TUyh2YWwpIAkJCXZ4Z2VfdkJJVCh2YWwsIDM0LCAxNCkKKworI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX0JVRkZFUl9TSVpFKHZhbCkgCQl2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisKKwl1NjQgY29udHJvbF8xOworI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX1RYX0NLT19JUFY0X0VOCQkJdnhnZV9tQklUKDUpCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfVFhfQ0tPX1RDUF9FTgkJCXZ4Z2VfbUJJVCg2KQorI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX1RYX0NLT19VRFBfRU4JCQl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9WTEFOX0VOQUJMRQkJCXZ4Z2VfbUJJVCgxNSkKKworI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX1ZMQU5fVEFHKHZhbCkgCQkJdnhnZV92QklUKHZhbCwgMTYsIDE2KQorCisjZGVmaW5lIFZYR0VfSFdfRklGT19UWERfSU5UX05VTUJFUih2YWwpIAkJdnhnZV92QklUKHZhbCwgMzQsIDYpCisKKyNkZWZpbmUgVlhHRV9IV19GSUZPX1RYRF9JTlRfVFlQRV9QRVJfTElTVAkJdnhnZV9tQklUKDQ2KQorI2RlZmluZSBWWEdFX0hXX0ZJRk9fVFhEX0lOVF9UWVBFX1VUSUxaCQkJdnhnZV9tQklUKDQ3KQorCisJdTY0IGJ1ZmZlcl9wb2ludGVyOworCisJdTY0IGhvc3RfY29udHJvbDsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAtIE9uZSBidWZmZXIgbW9kZSBSeEQgZm9yIHJpbmcKKyAqIEBob3N0X2NvbnRyb2w6IFRoaXMgZmllbGQgaXMgZXhjbHVzaXZlbHkgZm9yIGhvc3QgdXNlIGFuZCBpcyAicmVhZG9ubHkiCisgKiAgICAgICAgICAgICBmcm9tIHRoZSBhZGFwdGVyJ3MgcGVyc3BlY3RpdmUuCisgKiBAY29udHJvbF8wOkJpdHMgMCB0byA2IC0gUlRIX0J1Y2tldCBnZXQKKyAqCSAgICAgIEJpdCA3IC0gT3duIERlc2NyaXB0b3Igb3duZXJzaGlwIGJpdC4gVGhpcyBiaXQgaXMgc2V0IHRvIDEKKyAqICAgICAgICAgICAgYnkgdGhlIGhvc3QsIGFuZCBpcyBzZXQgdG8gMCBieSB0aGUgYWRhcHRlci4KKyAqCSAgICAgIDAgLSBIb3N0IG93bnMgUnhEIGFuZCBidWZmZXIuCisgKgkgICAgICAxIC0gVGhlIGFkYXB0ZXIgb3ducyBSeEQgYW5kIGJ1ZmZlci4KKyAqCSAgICAgIEJpdCA4IC0gRmFzdF9QYXRoX0VsaWdpYmxlIFdoZW4gc2V0LCBpbmRpY2F0ZXMgdGhhdCB0aGUKKyAqICAgICAgICAgICAgcmVjZWl2ZWQgZnJhbWUgbWVldHMgYWxsIG9mIHRoZSBjcml0ZXJpYSBmb3IgZmFzdCBwYXRoIHByb2Nlc3NpbmcuCisgKiAgICAgICAgICAgIFRoZSByZXF1aXJlZCBjcml0ZXJpYSBhcmUgYXMgZm9sbG93czoKKyAqICAgICAgICAgICAgIVNZTiAmCisgKiAgICAgICAgICAgIChUcmFuc2Zlcl9Db2RlID09ICJUcmFuc2ZlciBPSyIpICYKKyAqICAgICAgICAgICAgKCFJc19JUF9GcmFnbWVudCkgJgorICogICAgICAgICAgICAoKElzX0lQdjQgJiBjb21wdXRlZF9MM19jaGVja3N1bSA9PSAweEZGRkYpIHwKKyAqICAgICAgICAgICAgKElzX0lQdjYpKSAmCisgKiAgICAgICAgICAgICgoSXNfVENQICYgY29tcHV0ZWRfTDRfY2hlY2tzdW0gPT0gMHhGRkZGKSB8CisgKiAgICAgICAgICAgIChJc19VRFAgJiAoY29tcHV0ZWRfTDRfY2hlY2tzdW0gPT0gMHhGRkZGIHwKKyAqICAgICAgICAgICAgY29tcHV0ZWQgX0w0X2NoZWNrc3VtID09IDB4MDAwMCkpKQorICogICAgICAgICAgICAoc2FtZSBtZWFuaW5nIGZvciBhbGwgUnhEIGJ1ZmZlciBtb2RlcykKKyAqCSAgICAgIEJpdCA5IC0gTDMgQ2hlY2tzdW0gQ29ycmVjdAorICoJICAgICAgQml0IDEwIC0gTDQgQ2hlY2tzdW0gQ29ycmVjdAorICoJICAgICAgQml0IDExIC0gUmVzZXJ2ZWQKKyAqCSAgICAgIEJpdCAxMiB0byAxNSAtIFRoaXMgZmllbGQgaXMgd3JpdHRlbiBieSB0aGUgYWRhcHRlci4gSXQgaXMKKyAqICAgICAgICAgICAgdXNlZCB0byByZXBvcnQgdGhlIHN0YXR1cyBvZiB0aGUgZnJhbWUgdHJhbnNmZXIgdG8gdGhlIGhvc3QuCisgKgkgICAgICAweDAgLSBUcmFuc2ZlciBPSworICoJICAgICAgMHg0IC0gUkRBIEZhaWx1cmUgRHVyaW5nIFRyYW5zZmVyCisgKgkgICAgICAweDUgLSBVbnBhcnNlYWJsZSBQYWNrZXQsIHN1Y2ggYXMgdW5rbm93biBJUHY2IGhlYWRlci4KKyAqCSAgICAgIDB4NiAtIEZyYW1lIGludGVncml0eSBlcnJvciAoRkNTIG9yIEVDQykuCisgKgkgICAgICAweDcgLSBCdWZmZXIgU2l6ZSBFcnJvci4gVGhlIHByb3ZpZGVkIGJ1ZmZlcihzKSB3ZXJlIG5vdAorICogICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZWx5IHNpemVkIGFuZCBkYXRhIGxvc3Mgb2NjdXJyZWQuCisgKgkgICAgICAweDggLSBJbnRlcm5hbCBFQ0MgRXJyb3IuIFJ4RCBjb3JydXB0ZWQuCisgKgkgICAgICAweDkgLSBJUHY0IENoZWNrc3VtIGVycm9yCisgKgkgICAgICAweEEgLSBUQ1AvVURQIENoZWNrc3VtIGVycm9yCisgKgkgICAgICAweEYgLSBVbmtub3duIEVycm9yIG9yIE11bHRpcGxlIEVycm9yLiBJbmRpY2F0ZXMgYW4KKyAqICAgICAgICAgICAgICAgdW5rbm93biBwcm9ibGVtIG9yIHRoYXQgbW9yZSB0aGFuIG9uZSBvZiB0cmFuc2ZlciBjb2RlcyBpcyBzZXQuCisgKgkgICAgICBCaXQgMTYgLSBTWU4gVGhlIGFkYXB0ZXIgc2V0cyB0aGlzIGZpZWxkIHRvIGluZGljYXRlIHRoYXQKKyAqICAgICAgICAgICAgICAgIHRoZSBpbmNvbWluZyBmcmFtZSBjb250YWluZWQgYSBUQ1Agc2VnbWVudCB3aXRoIGl0cyBTWU4gYml0CisgKgkgICAgICAgICAgc2V0IGFuZCBpdHMgQUNLIGJpdCBOT1Qgc2V0LiAoc2FtZSBtZWFuaW5nIGZvciBhbGwgUnhEIGJ1ZmZlcgorICogICAgICAgICAgICAgICAgbW9kZXMpCisgKgkgICAgICBCaXQgMTcgLSBJcyBJQ01QCisgKgkgICAgICBCaXQgMTggLSBSVEhfU1BETV9ISVQgU2V0IHRvIDEgaWYgdGhlcmUgd2FzIGEgbWF0Y2ggaW4gdGhlCisgKiAgICAgICAgICAgICAgICBTb2NrZXQgUGFpciBEaXJlY3QgTWF0Y2ggVGFibGUgYW5kIHRoZSBmcmFtZSB3YXMgc3RlZXJlZCBiYXNlZAorICogICAgICAgICAgICAgICAgb24gU1BETS4KKyAqCSAgICAgIEJpdCAxOSAtIFJUSF9JVF9ISVQgU2V0IHRvIDEgaWYgdGhlcmUgd2FzIGEgbWF0Y2ggaW4gdGhlCisgKiAgICAgICAgICAgIEluZGlyZWN0aW9uIFRhYmxlIGFuZCB0aGUgZnJhbWUgd2FzIHN0ZWVyZWQgYmFzZWQgb24gaGFzaAorICogICAgICAgICAgICBpbmRpcmVjdGlvbi4KKyAqCSAgICAgIEJpdCAyMCB0byAyMyAtIFJUSF9IQVNIX1RZUEUgSW5kaWNhdGVzIHRoZSBmdW5jdGlvbiAoaGFzaAorICoJICAgICAgICAgIHR5cGUpIHRoYXQgd2FzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBoYXNoLgorICoJICAgICAgQml0IDE5IC0gSVNfVkxBTiBTZXQgdG8gJzEnIGlmIHRoZSBmcmFtZSB3YXMvaXMgVkxBTgorICoJICAgICAgICAgIHRhZ2dlZC4KKyAqCSAgICAgIEJpdCAyNSB0byAyNiAtIEVUSEVSX0VOQ0FQIFJlZmxlY3RzIHRoZSBFdGhlcm5ldCBlbmNhcHN1bGF0aW9uCisgKiAgICAgICAgICAgICAgICBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUuCisgKgkgICAgICAweDAgLSBFdGhlcm5ldCBESVgKKyAqCSAgICAgIDB4MSAtIExMQworICoJICAgICAgMHgyIC0gU05BUCAoaW5jbHVkZXMgSnVtYm8tU05BUCkKKyAqCSAgICAgIDB4MyAtIElQWAorICoJICAgICAgQml0IDI3IC0gSVNfSVBWNCBTZXQgdG8gJzEnIGlmIHRoZSBmcmFtZSBjb250YWlucyBhbiBJUHY0CXBhY2tldC4KKyAqCSAgICAgIEJpdCAyOCAtIElTX0lQVjYgU2V0IHRvICcxJyBpZiB0aGUgZnJhbWUgY29udGFpbnMgYW4gSVB2NiBwYWNrZXQuCisgKgkgICAgICBCaXQgMjkgLSBJU19JUF9GUkFHIFNldCB0byAnMScgaWYgdGhlIGZyYW1lIGNvbnRhaW5zIGEgZnJhZ21lbnRlZAorICogICAgICAgICAgICBJUCBwYWNrZXQuCisgKgkgICAgICBCaXQgMzAgLSBJU19UQ1AgU2V0IHRvICcxJyBpZiB0aGUgZnJhbWUgY29udGFpbnMgYSBUQ1Agc2VnbWVudC4KKyAqCSAgICAgIEJpdCAzMSAtIElTX1VEUCBTZXQgdG8gJzEnIGlmIHRoZSBmcmFtZSBjb250YWlucyBhIFVEUCBtZXNzYWdlLgorICoJICAgICAgQml0IDMyIHRvIDQ3IC0gTDNfQ2hlY2tzdW1bMDoxNV0gVGhlIElQdjQgY2hlY2tzdW0gdmFsdWUgCXRoYXQKKyAqICAgICAgICAgICAgYXJyaXZlZCB3aXRoIHRoZSBmcmFtZS4gSWYgdGhlIHJlc3VsdGluZyBjb21wdXRlZCBJUHY0IGhlYWRlcgorICogICAgICAgICAgICBjaGVja3N1bSBmb3IgdGhlIGZyYW1lIGRpZCBub3QgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgMHhGRkZGIHZhbHVlLAorICogICAgICAgICAgICB0aGVuIHRoZSB0cmFuc2ZlciBjb2RlIHdvdWxkIGJlIHNldCB0byAweDkuCisgKgkgICAgICBCaXQgNDggdG8gNjMgLSBMNF9DaGVja3N1bVswOjE1XSBUaGUgVENQL1VEUCBjaGVja3N1bSB2YWx1ZSB0aGF0CisgKiAgICAgICAgICAgIGFycml2ZWQgd2l0aCB0aGUgZnJhbWUuIElmIHRoZSByZXN1bHRpbmcgY29tcHV0ZWQgVENQL1VEUCBjaGVja3N1bQorICogICAgICAgICAgICBmb3IgdGhlIGZyYW1lIGRpZCBub3QgcHJvZHVjZSB0aGUgZXhwZWN0ZWQgMHhGRkZGIHZhbHVlLCB0aGVuIHRoZQorICogICAgICAgICAgICB0cmFuc2ZlciBjb2RlIHdvdWxkIGJlIHNldCB0byAweEEuCisgKiBAY29udHJvbF8xOkJpdHMgMCB0byAxIC0gUmVzZXJ2ZWQKKyAqICAgICAgICAgICAgQml0cyAyIHRvIDE1IC0gQnVmZmVyMF9TaXplLlRoaXMgZmllbGQgaXMgc2V0IGJ5IHRoZSBob3N0IGFuZAorICogICAgICAgICAgICBldmVudHVhbGx5IG92ZXJ3cml0dGVuIGJ5IHRoZSBhZGFwdGVyLiBUaGUgaG9zdCB3cml0ZXMgdGhlCisgKiAgICAgICAgICAgIGF2YWlsYWJsZSBidWZmZXIgc2l6ZSBpbiBieXRlcyB3aGVuIGl0IHBhc3NlcyB0aGUgZGVzY3JpcHRvciB0bworICogICAgICAgICAgICB0aGUgYWRhcHRlci4gV2hlbiBhIGZyYW1lIGlzIGRlbGl2ZXJlZCB0aGUgaG9zdCwgdGhlIGFkYXB0ZXIKKyAqICAgICAgICAgICAgcG9wdWxhdGVzIHRoaXMgZmllbGQgd2l0aCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gaW50byB0aGUKKyAqICAgICAgICAgICAgYnVmZmVyLiBUaGUgbGFyZ2VzdCBzdXBwb3J0ZWQgYnVmZmVyIGlzIDE2LCAzODMgYnl0ZXMuCisgKgkgICAgICBCaXQgMTYgdG8gNDcgLSBSVEggSGFzaCBWYWx1ZSAzMi1iaXQgUlRIIGhhc2ggdmFsdWUuIE9ubHkgdmFsaWQgaWYKKyAqCSAgICAgIFJUSF9IQVNIX1RZUEUgKENvbnRyb2xfMCwgYml0cyAyMDoyMykgaXMgbm9uemVyby4KKyAqCSAgICAgIEJpdCA0OCB0byA2MyAtIFZMQU5fVGFnWzA6MTVdIFRoZSBjb250ZW50cyBvZiB0aGUgdmFyaWFibGUgcG9ydGlvbgorICogICAgICAgICAgICBvZiB0aGUgVkxBTiB0YWcsIGlmIG9uZSB3YXMgZGV0ZWN0ZWQgYnkgdGhlIGFkYXB0ZXIuIFRoaXMgZmllbGQgaXMKKyAqICAgICAgICAgICAgcG9wdWxhdGVkIGV2ZW4gaWYgVkxBTi10YWcgc3RyaXBwaW5nIGlzIGVuYWJsZWQuCisgKiBAYnVmZmVyMF9wdHI6IFBvaW50ZXIgdG8gYnVmZmVyLiBUaGlzIGZpZWxkIGlzIHBvcHVsYXRlZCBieSB0aGUgZHJpdmVyLgorICoKKyAqIE9uZSBidWZmZXIgbW9kZSBSeEQgZm9yIHJpbmcgc3RydWN0dXJlCisgKi8KK3N0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgeworCXU2NCBob3N0X2NvbnRyb2w7CisJdTY0IGNvbnRyb2xfMDsKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9SVEhfQlVDS0VUX0dFVChjdHJsMCkJCXZ4Z2VfYlZBTG4oY3RybDAsIDAsIDcpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9MSVNUX09XTl9BREFQVEVSCQl2eGdlX21CSVQoNykKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0ZBU1RfUEFUSF9FTElHSUJMRV9HRVQoY3RybDApCXZ4Z2VfYlZBTG4oY3RybDAsIDgsIDEpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9MM19DS1NVTV9DT1JSRUNUX0dFVChjdHJsMCkJdnhnZV9iVkFMbihjdHJsMCwgOSwgMSkKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0w0X0NLU1VNX0NPUlJFQ1RfR0VUKGN0cmwwKQl2eGdlX2JWQUxuKGN0cmwwLCAxMCwgMSkKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX1RfQ09ERV9HRVQoY3RybDApCQl2eGdlX2JWQUxuKGN0cmwwLCAxMiwgNCkKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9UX0NPREUodmFsKSAJCQl2eGdlX3ZCSVQodmFsLCAxMiwgNCkKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX1RfQ09ERV9VTlVTRUQJCVZYR0VfSFdfUklOR19UX0NPREVfVU5VU0VECisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9TWU5fR0VUKGN0cmwwKQkJdnhnZV9iVkFMbihjdHJsMCwgMTYsIDEpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9JU19JQ01QX0dFVChjdHJsMCkJCXZ4Z2VfYlZBTG4oY3RybDAsIDE3LCAxKQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfUlRIX1NQRE1fSElUX0dFVChjdHJsMCkJdnhnZV9iVkFMbihjdHJsMCwgMTgsIDEpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9SVEhfSVRfSElUX0dFVChjdHJsMCkJCXZ4Z2VfYlZBTG4oY3RybDAsIDE5LCAxKQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfUlRIX0hBU0hfVFlQRV9HRVQoY3RybDApCXZ4Z2VfYlZBTG4oY3RybDAsIDIwLCA0KQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfSVNfVkxBTl9HRVQoY3RybDApCQl2eGdlX2JWQUxuKGN0cmwwLCAyNCwgMSkKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0VUSEVSX0VOQ0FQX0dFVChjdHJsMCkJCXZ4Z2VfYlZBTG4oY3RybDAsIDI1LCAyKQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfRlJBTUVfUFJPVE9fR0VUKGN0cmwwKQkJdnhnZV9iVkFMbihjdHJsMCwgMjcsIDUpCisKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF9MM19DS1NVTV9HRVQoY3RybDApCXZ4Z2VfYlZBTG4oY3RybDAsIDMyLCAxNikKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEX0w0X0NLU1VNX0dFVChjdHJsMCkJdnhnZV9iVkFMbihjdHJsMCwgNDgsIDE2KQorCisJdTY0IGNvbnRyb2xfMTsKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEXzFfQlVGRkVSMF9TSVpFX0dFVChjdHJsMSkJdnhnZV9iVkFMbihjdHJsMSwgMiwgMTQpCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfMV9CVUZGRVIwX1NJWkUodmFsKSB2eGdlX3ZCSVQodmFsLCAyLCAxNCkKKyNkZWZpbmUgVlhHRV9IV19SSU5HX1JYRF8xX0JVRkZFUjBfU0laRV9NQVNLCQl2eGdlX3ZCSVQoMHgzRkZGLCAyLCAxNCkKKworI2RlZmluZSBWWEdFX0hXX1JJTkdfUlhEXzFfUlRIX0hBU0hfVkFMX0dFVChjdHJsMSkgICAgdnhnZV9iVkFMbihjdHJsMSwgMTYsIDMyKQorCisjZGVmaW5lIFZYR0VfSFdfUklOR19SWERfVkxBTl9UQUdfR0VUKGN0cmwxKQl2eGdlX2JWQUxuKGN0cmwxLCA0OCwgMTYpCisKKwl1NjQgYnVmZmVyMF9wdHI7Cit9OworCitlbnVtIHZ4Z2VfaHdfcnRoX2FsZ29yaXRtcyB7CisJUlRIX0FMR19KRU5LSU5TID0gMCwKKwlSVEhfQUxHX01TX1JTUwk9IDEsCisJUlRIX0FMR19DUkMzMkMJPSAyCit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3J0aF9oYXNoX3R5cGVzIC0gUlRIIGhhc2ggdHlwZXMuCisgKiBAaGFzaF90eXBlX3RjcGlwdjRfZW46IEVuYWJsZXMgUlRIIGZpZWxkIHR5cGUgSGFzaFR5cGVUY3BJUHY0CisgKiBAaGFzaF90eXBlX2lwdjRfZW46IEVuYWJsZXMgUlRIIGZpZWxkIHR5cGUgSGFzaFR5cGVJUHY0CisgKiBAaGFzaF90eXBlX3RjcGlwdjZfZW46IEVuYWJsZXMgUlRIIGZpZWxkIHR5cGUgSGFzaFR5cGVUY3BJUHY2CisgKiBAaGFzaF90eXBlX2lwdjZfZW46IEVuYWJsZXMgUlRIIGZpZWxkIHR5cGUgSGFzaFR5cGVJUHY2CisgKiBAaGFzaF90eXBlX3RjcGlwdjZleF9lbjogRW5hYmxlcyBSVEggZmllbGQgdHlwZSBIYXNoVHlwZVRjcElQdjZFeAorICogQGhhc2hfdHlwZV9pcHY2ZXhfZW46IEVuYWJsZXMgUlRIIGZpZWxkIHR5cGUgSGFzaFR5cGVJUHY2RXgKKyAqCisgKiBVc2VkIHRvIHBhc3MgUlRIIGhhc2ggdHlwZXMgdG8gcnRzX3J0c19zZXQuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfcnRzX3J0aF9zZXQoKSwgdnhnZV9od192cGF0aF9ydHNfcnRoX2dldCgpLgorICovCitzdHJ1Y3QgdnhnZV9od19ydGhfaGFzaF90eXBlcyB7CisJdTggaGFzaF90eXBlX3RjcGlwdjRfZW47CisJdTggaGFzaF90eXBlX2lwdjRfZW47CisJdTggaGFzaF90eXBlX3RjcGlwdjZfZW47CisJdTggaGFzaF90eXBlX2lwdjZfZW47CisJdTggaGFzaF90eXBlX3RjcGlwdjZleF9lbjsKKwl1OCBoYXNoX3R5cGVfaXB2NmV4X2VuOworfTsKKwordTMyCit2eGdlX2h3X2RldmljZV9kZWJ1Z19tYXNrX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK3ZvaWQgdnhnZV9od19kZXZpY2VfZGVidWdfc2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCWVudW0gdnhnZV9kZWJ1Z19sZXZlbCBsZXZlbCwKKwl1MzIgbWFzayk7CisKK3UzMgordnhnZV9od19kZXZpY2VfZXJyb3JfbGV2ZWxfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKwordTMyCit2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCit1MzIKK3Z4Z2VfaHdfZGV2aWNlX2RlYnVnX21hc2tfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKworLyoqCisgKiB2eGdlX2h3X3JpbmdfcnhkX3NpemVfZ2V0CS0gR2V0IHRoZSBzaXplIG9mIHJpbmcgZGVzY3JpcHRvci4KKyAqIEBidWZfbW9kZTogQnVmZmVyIG1vZGUgKDEsIDMgb3IgNSkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNpemUgb2YgUnhEIGZvciBnaXZlbiBidWZmZXIgbW9kZQorICovCitzdGF0aWMgaW5saW5lIHUzMiB2eGdlX2h3X3JpbmdfcnhkX3NpemVfZ2V0KHUzMiBidWZfbW9kZSkKK3sKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfcmluZ19yeGRzX3Blcl9ibG9ja19nZXQgLSBHZXQgdGhlIG51bWJlciBvZiByeGRzIHBlciBibG9jay4KKyAqIEBidWZfbW9kZTogQnVmZmVyIG1vZGUgKDEgYnVmZmVyIG1vZGUgb25seSkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBSeEQgZm9yIFJ4RCBibG9jayBmb3IgZ2l2ZW4gYnVmZmVyIG1vZGUKKyAqLworc3RhdGljIGlubGluZSB1MzIgdnhnZV9od19yaW5nX3J4ZHNfcGVyX2Jsb2NrX2dldCh1MzIgYnVmX21vZGUpCit7CisJcmV0dXJuICh1MzIpKChWWEdFX0hXX0JMT0NLX1NJWkUtMTYpIC8KKwkJc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEpKTsKK30KKworLyoqCisgKiB2eGdlX2h3X3JpbmdfcnhkXzFiX3NldCAtIFByZXBhcmUgMS1idWZmZXItbW9kZSBkZXNjcmlwdG9yLgorICogQHJ4ZGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICogQGRtYV9wb2ludGVyOiBETUEgYWRkcmVzcyBvZglhIHNpbmdsZSByZWNlaXZlIGJ1ZmZlcgl0aGlzIGRlc2NyaXB0b3IKKyAqIHNob3VsZCBjYXJyeS4gTm90ZSB0aGF0IGJ5IHRoZSB0aW1lIHZ4Z2VfaHdfcmluZ19yeGRfMWJfc2V0IGlzIGNhbGxlZCwKKyAqIHRoZSByZWNlaXZlIGJ1ZmZlciBzaG91bGQgYmUgYWxyZWFkeSBtYXBwZWQgdG8gdGhlIGRldmljZQorICogQHNpemU6IFNpemUgb2YgdGhlIHJlY2VpdmUgQGRtYV9wb2ludGVyIGJ1ZmZlci4KKyAqCisgKiBQcmVwYXJlIDEtYnVmZmVyLW1vZGUgUngJZGVzY3JpcHRvciBmb3IgcG9zdGluZworICogKHZpYQl2eGdlX2h3X3JpbmdfcnhkX3Bvc3QoKSkuCisgKgorICogVGhpcwlpbmxpbmUgaGVscGVyLWZ1bmN0aW9uIGRvZXMgbm90CXJldHVybiBhbnkgcGFyYW1ldGVycyBhbmQgYWx3YXlzCisgKiBzdWNjZWVkcy4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdnhnZV9od19yaW5nX3J4ZF8xYl9zZXQoCisJdm9pZCAqcnhkaCwKKwlkbWFfYWRkcl90IGRtYV9wb2ludGVyLAorCXUzMiBzaXplKQoreworCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKnJ4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqKXJ4ZGg7CisJcnhkcC0+YnVmZmVyMF9wdHIgPSBkbWFfcG9pbnRlcjsKKwlyeGRwLT5jb250cm9sXzEJJj0gflZYR0VfSFdfUklOR19SWERfMV9CVUZGRVIwX1NJWkVfTUFTSzsKKwlyeGRwLT5jb250cm9sXzEJfD0gVlhHRV9IV19SSU5HX1JYRF8xX0JVRkZFUjBfU0laRShzaXplKTsKK30KKworLyoqCisgKiB2eGdlX2h3X3JpbmdfcnhkXzFiX2dldCAtIEdldCBkYXRhIGZyb20gdGhlIGNvbXBsZXRlZCAxLWJ1ZgorICogZGVzY3JpcHRvci4KKyAqIEB2cGF0aF9oYW5kbGU6IFZpcnR1YWwgUGF0aCBoYW5kbGUuCisgKiBAcnhkaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKiBAZG1hX3BvaW50ZXI6IERNQSBhZGRyZXNzIG9mCWEgc2luZ2xlIHJlY2VpdmUgYnVmZmVyCXRoaXMgZGVzY3JpcHRvcgorICogY2Fycmllcy4gUmV0dXJuZWQgYnkgSFcuCisgKiBAcGt0X2xlbmd0aDoJTGVuZ3RoIChpbiBieXRlcykgb2YgdGhlIGRhdGEgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIGJ5CisgKgorICogUmV0cmlldmUgcHJvdG9jb2wgZGF0YSBmcm9tIHRoZSBjb21wbGV0ZWQgMS1idWZmZXItbW9kZSBSeCBkZXNjcmlwdG9yLgorICogVGhpcwlpbmxpbmUgaGVscGVyLWZ1bmN0aW9uIHVzZXMgY29tcGxldGVkIGRlc2NyaXB0b3IgdG8gcG9wdWxhdGUgcmVjZWl2ZQorICogYnVmZmVyIHBvaW50ZXIgYW5kIG90aGVyICJvdXQiIHBhcmFtZXRlcnMuIFRoZSBmdW5jdGlvbiBhbHdheXMgc3VjY2VlZHMuCisgKgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfMWJfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ19oYW5kbGUsCisJdm9pZCAqcnhkaCwKKwl1MzIgKnBrdF9sZW5ndGgpCit7CisJc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqcnhkcCA9IChzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICopcnhkaDsKKworCSpwa3RfbGVuZ3RoID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEXzFfQlVGRkVSMF9TSVpFX0dFVChyeGRwLT5jb250cm9sXzEpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfcmluZ19yeGRfMWJfaW5mb19nZXQgLSBHZXQgZXh0ZW5kZWQgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoCisgKiBhIGNvbXBsZXRlZCByZWNlaXZlIGRlc2NyaXB0b3IgZm9yIDFiIG1vZGUuCisgKiBAdnBhdGhfaGFuZGxlOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgorICogQHJ4ZGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICogQHJ4ZF9pbmZvOiBEZXNjcmlwdG9yIGluZm9ybWF0aW9uCisgKgorICogUmV0cmlldmUgZXh0ZW5kZWQgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgY29tcGxldGVkIHJlY2VpdmUgZGVzY3JpcHRvci4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdnhnZV9od19yaW5nX3J4ZF8xYl9pbmZvX2dldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKnJ4ZGgsCisJc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfaW5mbyAqcnhkX2luZm8pCit7CisKKwlzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICpyeGRwID0gKHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKilyeGRoOworCXJ4ZF9pbmZvLT5zeW5fZmxhZyA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9TWU5fR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPmlzX2ljbXAgPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfSVNfSUNNUF9HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+ZmFzdF9wYXRoX2VsaWdpYmxlID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX0ZBU1RfUEFUSF9FTElHSUJMRV9HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+bDNfY2tzdW1fdmFsaWQgPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfTDNfQ0tTVU1fQ09SUkVDVF9HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+bDNfY2tzdW0gPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfTDNfQ0tTVU1fR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPmw0X2Nrc3VtX3ZhbGlkID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX0w0X0NLU1VNX0NPUlJFQ1RfR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPmw0X2Nrc3VtID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX0w0X0NLU1VNX0dFVChyeGRwLT5jb250cm9sXzApOzsKKwlyeGRfaW5mby0+ZnJhbWUgPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfRVRIRVJfRU5DQVBfR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPnByb3RvID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX0ZSQU1FX1BST1RPX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT5pc192bGFuID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX0lTX1ZMQU5fR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPnZsYW4gPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfVkxBTl9UQUdfR0VUKHJ4ZHAtPmNvbnRyb2xfMSk7CisJcnhkX2luZm8tPnJ0aF9idWNrZXQgPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfUlRIX0JVQ0tFVF9HRVQocnhkcC0+Y29udHJvbF8wKTsKKwlyeGRfaW5mby0+cnRoX2l0X2hpdCA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF9SVEhfSVRfSElUX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT5ydGhfc3BkbV9oaXQgPQorCQkodTMyKVZYR0VfSFdfUklOR19SWERfUlRIX1NQRE1fSElUX0dFVChyeGRwLT5jb250cm9sXzApOworCXJ4ZF9pbmZvLT5ydGhfaGFzaF90eXBlID0KKwkJKHUzMilWWEdFX0hXX1JJTkdfUlhEX1JUSF9IQVNIX1RZUEVfR0VUKHJ4ZHAtPmNvbnRyb2xfMCk7CisJcnhkX2luZm8tPnJ0aF92YWx1ZSA9CisJCSh1MzIpVlhHRV9IV19SSU5HX1JYRF8xX1JUSF9IQVNIX1ZBTF9HRVQocnhkcC0+Y29udHJvbF8xKTsKK30KKworLyoqCisgKiB2eGdlX2h3X3JpbmdfcnhkX3ByaXZhdGVfZ2V0IC0gR2V0IGRyaXZlciBwcml2YXRlIHBlci1kZXNjcmlwdG9yIGRhdGEKKyAqICAgICAgICAgICAgICAgICAgICAgIG9mIDFiIG1vZGUgM2IgbW9kZSByaW5nLgorICogQHJ4ZGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICoKKyAqIFJldHVybnM6IHByaXZhdGUgZHJpdmVyCWluZm8gYXNzb2NpYXRlZAl3aXRoIHRoZSBkZXNjcmlwdG9yLgorICogZHJpdmVyIHJlcXVlc3RzCXBlci1kZXNjcmlwdG9yIHNwYWNlIHZpYSB2eGdlX2h3X3JpbmdfYXR0ci4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqdnhnZV9od19yaW5nX3J4ZF9wcml2YXRlX2dldCh2b2lkICpyeGRoKQoreworCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKnJ4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqKXJ4ZGg7CisJcmV0dXJuICh2b2lkICopKHNpemVfdClyeGRwLT5ob3N0X2NvbnRyb2w7Cit9CisKKy8qKgorICogdnhnZV9od19maWZvX3R4ZGxfY2tzdW1fc2V0X2JpdHMgLSBPZmZsb2FkIGNoZWNrc3VtLgorICogQHR4ZGxoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqIEBja3N1bV9iaXRzOiBTcGVjaWZpZXMgd2hpY2ggY2hlY2tzdW1zIGFyZSB0byBiZSBvZmZsb2FkZWQ6IElQdjQsCisgKiAgICAgICAgICAgICAgYW5kL29yIFRDUCBhbmQvb3IgVURQLgorICoKKyAqIEFzayBUaXRhbiB0byBjYWxjdWxhdGUgSVB2NCAmIHRyYW5zcG9ydCBjaGVja3N1bXMgZm9yIF90aGlzXyB0cmFuc21pdAorICogZGVzY3JpcHRvci4KKyAqIFRoaXMgQVBJIGlzIHBhcnQgb2YgdGhlIHByZXBhcmF0aW9uIG9mIHRoZSB0cmFuc21pdCBkZXNjcmlwdG9yIGZvciBwb3N0aW5nCisgKiAodmlhIHZ4Z2VfaHdfZmlmb190eGRsX3Bvc3QoKSkuIFRoZSByZWxhdGVkICJwcmVwYXJhdGlvbiIgQVBJcyBpbmNsdWRlCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9tc3Nfc2V0KCksIHZ4Z2VfaHdfZmlmb190eGRsX2J1ZmZlcl9zZXRfYWxpZ25lZCgpLAorICogYW5kIHZ4Z2VfaHdfZmlmb190eGRsX2J1ZmZlcl9zZXQoKS4KKyAqIEFsbCB0aGVzZSBBUElzIGZpbGwgaW4gdGhlIGZpZWxkcyBvZiB0aGUgZmlmbyBkZXNjcmlwdG9yLAorICogaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBUaXRhbiBzcGVjaWZpY2F0aW9uLgorICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHZ4Z2VfaHdfZmlmb190eGRsX2Nrc3VtX3NldF9iaXRzKHZvaWQgKnR4ZGxoLCB1NjQgY2tzdW1fYml0cykKK3sKKwlzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqdHhkcCA9IChzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqKXR4ZGxoOworCXR4ZHAtPmNvbnRyb2xfMSB8PSBja3N1bV9iaXRzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZmlmb190eGRsX21zc19zZXQgLSBTZXQgTVNTLgorICogQHR4ZGxoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqIEBtc3M6IE1TUyBzaXplIGZvciBfdGhpc18gVENQIGNvbm5lY3Rpb24uIFBhc3NlZCBieSBUQ1Agc3RhY2sgZG93biB0byB0aGUKKyAqICAgICAgIGRyaXZlciwgd2hpY2ggaW4gdHVybiBpbnNlcnRzIHRoZSBNU1MgaW50byB0aGUgQHR4ZGxoLgorICoKKyAqIFRoaXMgQVBJIGlzIHBhcnQgb2YgdGhlIHByZXBhcmF0aW9uIG9mIHRoZSB0cmFuc21pdCBkZXNjcmlwdG9yIGZvciBwb3N0aW5nCisgKiAodmlhIHZ4Z2VfaHdfZmlmb190eGRsX3Bvc3QoKSkuIFRoZSByZWxhdGVkICJwcmVwYXJhdGlvbiIgQVBJcyBpbmNsdWRlCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9idWZmZXJfc2V0KCksIHZ4Z2VfaHdfZmlmb190eGRsX2J1ZmZlcl9zZXRfYWxpZ25lZCgpLAorICogYW5kIHZ4Z2VfaHdfZmlmb190eGRsX2Nrc3VtX3NldF9iaXRzKCkuCisgKiBBbGwgdGhlc2UgQVBJcyBmaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGZpZm8gZGVzY3JpcHRvciwKKyAqIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgVGl0YW4gc3BlY2lmaWNhdGlvbi4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB2eGdlX2h3X2ZpZm9fdHhkbF9tc3Nfc2V0KHZvaWQgKnR4ZGxoLCBpbnQgbXNzKQoreworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICp0eGRwID0gKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopdHhkbGg7CisKKwl0eGRwLT5jb250cm9sXzAgfD0gVlhHRV9IV19GSUZPX1RYRF9MU09fRU47CisJdHhkcC0+Y29udHJvbF8wIHw9IFZYR0VfSFdfRklGT19UWERfTFNPX01TUyhtc3MpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfZmlmb190eGRsX3ZsYW5fc2V0IC0gU2V0IFZMQU4gdGFnLgorICogQHR4ZGxoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqIEB2bGFuX3RhZzogMTZiaXQgVkxBTiB0YWcuCisgKgorICogSW5zZXJ0IFZMQU4gdGFnIGludG8gc3BlY2lmaWVkIHRyYW5zbWl0IGRlc2NyaXB0b3IuCisgKiBUaGUgYWN0dWFsIGluc2VydGlvbiBvZiB0aGUgdGFnIGludG8gb3V0Z29pbmcgZnJhbWUgaXMgZG9uZSBieSB0aGUgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB2eGdlX2h3X2ZpZm9fdHhkbF92bGFuX3NldCh2b2lkICp0eGRsaCwgdTE2IHZsYW5fdGFnKQoreworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICp0eGRwID0gKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopdHhkbGg7CisKKwl0eGRwLT5jb250cm9sXzEgfD0gVlhHRV9IV19GSUZPX1RYRF9WTEFOX0VOQUJMRTsKKwl0eGRwLT5jb250cm9sXzEgfD0gVlhHRV9IV19GSUZPX1RYRF9WTEFOX1RBRyh2bGFuX3RhZyk7Cit9CisKKy8qKgorICogdnhnZV9od19maWZvX3R4ZGxfcHJpdmF0ZV9nZXQgLSBSZXRyaWV2ZSBwZXItZGVzY3JpcHRvciBwcml2YXRlIGRhdGEuCisgKiBAdHhkbGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICoKKyAqIFJldHJpZXZlIHBlci1kZXNjcmlwdG9yIHByaXZhdGUgZGF0YS4KKyAqIE5vdGUgdGhhdCBkcml2ZXIgcmVxdWVzdHMgcGVyLWRlc2NyaXB0b3Igc3BhY2UgdmlhCisgKiBzdHJ1Y3QgdnhnZV9od19maWZvX2F0dHIgcGFzc2VkIHRvCisgKiB2eGdlX2h3X3ZwYXRoX29wZW4oKS4KKyAqCisgKiBSZXR1cm5zOiBwcml2YXRlIGRyaXZlciBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVzY3JpcHRvci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICp2eGdlX2h3X2ZpZm9fdHhkbF9wcml2YXRlX2dldCh2b2lkICp0eGRsaCkKK3sKKwlzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqdHhkcCAgPSAoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKil0eGRsaDsKKworCXJldHVybiAodm9pZCAqKShzaXplX3QpdHhkcC0+aG9zdF9jb250cm9sOworfQorCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3JpbmdfYXR0ciAtIFJpbmcgb3BlbiAidGVtcGxhdGUiLgorICogQGNhbGxiYWNrOiBSaW5nIGNvbXBsZXRpb24gY2FsbGJhY2suIEhXIGludm9rZXMgdGhlIGNhbGxiYWNrIHdoZW4gdGhlcmUKKyAqICAgICAgICAgICAgYXJlIG5ldyBjb21wbGV0aW9ucyBvbiB0aGF0IHJpbmcuIEluIG1hbnkgaW1wbGVtZW50YXRpb25zCisgKiAgICAgICAgICAgIHRoZSBAY2FsbGJhY2sgZXhlY3V0ZXMgaW4gdGhlIGh3IGludGVycnVwdCBjb250ZXh0LgorICogQHJ4ZF9pbml0OiBSaW5nJ3MgZGVzY3JpcHRvci1pbml0aWFsaXplIGNhbGxiYWNrLgorICogICAgICAgICAgICBTZWUgdnhnZV9od19yaW5nX3J4ZF9pbml0X2Z7fS4KKyAqICAgICAgICAgICAgSWYgbm90IE5VTEwsIEhXIGludm9rZXMgdGhlIGNhbGxiYWNrIHdoZW4gb3BlbmluZworICogICAgICAgICAgICB0aGUgcmluZy4KKyAqIEByeGRfdGVybTogUmluZydzIGRlc2NyaXB0b3ItdGVybWluYXRlIGNhbGxiYWNrLiBJZiBub3QgTlVMTCwKKyAqICAgICAgICAgIEhXIGludm9rZXMgdGhlIGNhbGxiYWNrIHdoZW4gY2xvc2luZyB0aGUgY29ycmVzcG9uZGluZyByaW5nLgorICogICAgICAgICAgU2VlIGFsc28gdnhnZV9od19yaW5nX3J4ZF90ZXJtX2Z7fS4KKyAqIEB1c2VyZGF0YTogVXNlci1kZWZpbmVkICJjb250ZXh0IiBvZiBfdGhhdF8gcmluZy4gUGFzc2VkIGJhY2sgdG8gdGhlCisgKiAgICAgICAgICAgIHVzZXIgYXMgb25lIG9mIHRoZSBAY2FsbGJhY2ssIEByeGRfaW5pdCwgYW5kIEByeGRfdGVybSBhcmd1bWVudHMuCisgKiBAcGVyX3J4ZF9zcGFjZTogSWYgc3BlY2lmaWVkIChpLmUuLCBncmVhdGVyIHRoYW4gemVybyk6IGV4dHJhIHNwYWNlCisgKiAgICAgICAgICAgICAgcmVzZXJ2ZWQgYnkgSFcgcGVyIGVhY2ggcmVjZWl2ZSBkZXNjcmlwdG9yLgorICogICAgICAgICAgICAgIENhbiBiZSB1c2VkIHRvIHN0b3JlCisgKiAgICAgICAgICAgICAgYW5kIHJldHJpZXZlIG9uIGNvbXBsZXRpb24sIGluZm9ybWF0aW9uIHNwZWNpZmljCisgKiAgICAgICAgICAgICAgdG8gdGhlIGRyaXZlci4KKyAqCisgKiBSaW5nIG9wZW4gInRlbXBsYXRlIi4gVXNlciBmaWxscyB0aGUgc3RydWN0dXJlIHdpdGggcmluZworICogYXR0cmlidXRlcyBhbmQgcGFzc2VzIGl0IHRvIHZ4Z2VfaHdfdnBhdGhfb3BlbigpLgorICovCitzdHJ1Y3QgdnhnZV9od19yaW5nX2F0dHIgeworCWVudW0gdnhnZV9od19zdGF0dXMgKCpjYWxsYmFjaykoCisJCQlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdoLAorCQkJdm9pZCAqcnhkaCwKKwkJCXU4IHRfY29kZSwKKwkJCXZvaWQgKnVzZXJkYXRhKTsKKworCWVudW0gdnhnZV9od19zdGF0dXMgKCpyeGRfaW5pdCkoCisJCQl2b2lkICpyeGRoLAorCQkJdm9pZCAqdXNlcmRhdGEpOworCisJdm9pZCAoKnJ4ZF90ZXJtKSgKKwkJCXZvaWQgKnJ4ZGgsCisJCQllbnVtIHZ4Z2VfaHdfcnhkX3N0YXRlIHN0YXRlLAorCQkJdm9pZCAqdXNlcmRhdGEpOworCisJdm9pZAkJKnVzZXJkYXRhOworCXUzMgkJcGVyX3J4ZF9zcGFjZTsKK307CisKKy8qKgorICogZnVuY3Rpb24gdnhnZV9od19maWZvX2NhbGxiYWNrX2YgLSBGSUZPIGNhbGxiYWNrLgorICogQHZwYXRoX2hhbmRsZTogVmlydHVhbCBwYXRoIHdob3NlIEZpZm8gImNvbnRhaW5pbmciIDEgb3IgbW9yZSBjb21wbGV0ZWQKKyAqICAgICAgICAgICAgIGRlc2NyaXB0b3JzLgorICogQHR4ZGxoOiBGaXJzdCBjb21wbGV0ZWQgZGVzY3JpcHRvci4KKyAqIEB0eGRsX3ByaXY6IFBvaW50ZXIgdG8gcGVyIHR4ZGwgc3BhY2UgYWxsb2NhdGVkCisgKiBAdF9jb2RlOiBUcmFuc2ZlciBjb2RlLCBhcyBwZXIgVGl0YW4gVXNlciBHdWlkZS4KKyAqICAgICAgICAgIFJldHVybmVkIGJ5IEhXLgorICogQGhvc3RfY29udHJvbDogT3BhcXVlIDY0Yml0IGRhdGEgc3RvcmVkIGJ5IGRyaXZlciBpbnNpZGUgdGhlIFRpdGFuCisgKiAgICAgICAgICAgIGRlc2NyaXB0b3IgcHJpb3IgdG8gcG9zdGluZyB0aGUgbGF0dGVyIG9uIHRoZSBmaWZvCisgKiAgICAgICAgICAgIHZpYSB2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0KCkuIFRoZSBAaG9zdF9jb250cm9sIGlzIHJldHVybmVkCisgKiAgICAgICAgICAgIGFzIGlzIHRvIHRoZSBkcml2ZXIgd2l0aCBlYWNoIGNvbXBsZXRlZCBkZXNjcmlwdG9yLgorICogQHVzZXJkYXRhOiBPcGFxdWUgcGVyLWZpZm8gZGF0YSBzcGVjaWZpZWQgYXQgZmlmbyBvcGVuCisgKiAgICAgICAgICAgIHRpbWUsIHZpYSB2eGdlX2h3X3ZwYXRoX29wZW4oKS4KKyAqCisgKiBGaWZvIGNvbXBsZXRpb24gY2FsbGJhY2sgKHR5cGUgZGVjbGFyYXRpb24pLiBBIHNpbmdsZSBwZXItZmlmbworICogY2FsbGJhY2sgaXMgc3BlY2lmaWVkIGF0IGZpZm8gb3BlbiB0aW1lLCB2aWEKKyAqIHZ4Z2VfaHdfdnBhdGhfb3BlbigpLiBUeXBpY2FsbHkgZ2V0cyBjYWxsZWQgYXMgcGFydCBvZiB0aGUgcHJvY2Vzc2luZworICogb2YgdGhlIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUuCisgKgorICogRmlmbyBjYWxsYmFjayBnZXRzIGNhbGxlZCBieSBIVyBpZiwgYW5kIG9ubHkgaWYsIHRoZXJlIGlzIGF0IGxlYXN0CisgKiBvbmUgbmV3IGNvbXBsZXRpb24gb24gYSBnaXZlbiBmaWZvLiBVcG9uIHByb2Nlc3NpbmcgdGhlIGZpcnN0IEB0eGRsaCBkcml2ZXIKKyAqIGlzIF9zdXBwb3NlZF8gdG8gY29udGludWUgY29uc3VtaW5nIGNvbXBsZXRpb25zIHVzaW5nOgorICogICAgLSB2eGdlX2h3X2ZpZm9fdHhkbF9uZXh0X2NvbXBsZXRlZCgpCisgKgorICogTm90ZSB0aGF0IGZhaWx1cmUgdG8gcHJvY2VzcyBuZXcgY29tcGxldGlvbnMgaW4gYSB0aW1lbHkgZmFzaGlvbgorICogbGVhZHMgdG8gVlhHRV9IV19JTkZfT1VUX09GX0RFU0NSSVBUT1JTIGNvbmRpdGlvbi4KKyAqCisgKiBOb24temVybyBAdF9jb2RlIG1lYW5zIGZhaWx1cmUgdG8gcHJvY2VzcyB0cmFuc21pdCBkZXNjcmlwdG9yLgorICoKKyAqIEluIHRoZSAidHJhbnNtaXQiIGNhc2UgdGhlIGZhaWx1cmUgY291bGQgaGFwcGVuLCBmb3IgaW5zdGFuY2UsIHdoZW4gdGhlCisgKiBsaW5rIGlzIGRvd24sIGluIHdoaWNoIGNhc2UgVGl0YW4gY29tcGxldGVzIHRoZSBkZXNjcmlwdG9yIGJlY2F1c2UgaXQKKyAqIGlzIG5vdCBhYmxlIHRvIHNlbmQgdGhlIGRhdGEgb3V0LgorICoKKyAqIEZvciBkZXRhaWxzIHBsZWFzZSByZWZlciB0byBUaXRhbiBVc2VyIEd1aWRlLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X2ZpZm9fdHhkbF9uZXh0X2NvbXBsZXRlZCgpLCB2eGdlX2h3X2ZpZm9fdHhkbF90ZXJtX2Z7fS4KKyAqLworLyoqCisgKiBmdW5jdGlvbiB2eGdlX2h3X2ZpZm9fdHhkbF90ZXJtX2YgLSBUZXJtaW5hdGUgZGVzY3JpcHRvciBjYWxsYmFjay4KKyAqIEB0eGRsaDogRmlyc3QgY29tcGxldGVkIGRlc2NyaXB0b3IuCisgKiBAdHhkbF9wcml2OiBQb2ludGVyIHRvIHBlciB0eGRsIHNwYWNlIGFsbG9jYXRlZAorICogQHN0YXRlOiBPbmUgb2YgdGhlIGVudW0gdnhnZV9od190eGRsX3N0YXRle30gZW51bWVyYXRlZCBzdGF0ZXMuCisgKiBAdXNlcmRhdGE6IFBlci1maWZvIHVzZXIgZGF0YSAoYS5rLmEuIGNvbnRleHQpIHNwZWNpZmllZCBhdAorICogZmlmbyBvcGVuIHRpbWUsIHZpYSB2eGdlX2h3X3ZwYXRoX29wZW4oKS4KKyAqCisgKiBUZXJtaW5hdGUgZGVzY3JpcHRvciBjYWxsYmFjay4gVW5sZXNzIE5VTEwgaXMgc3BlY2lmaWVkIGluIHRoZQorICogc3RydWN0IHZ4Z2VfaHdfZmlmb19hdHRye30gc3RydWN0dXJlIHBhc3NlZCB0byB2eGdlX2h3X3ZwYXRoX29wZW4oKSksCisgKiBIVyBpbnZva2VzIHRoZSBjYWxsYmFjayBhcyBwYXJ0IG9mIGNsb3NpbmcgZmlmbywgcHJpb3IgdG8KKyAqIGRlLWFsbG9jYXRpbmcgdGhlIHJpbmcgYW5kIGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzCisgKiAoaW5jbHVkaW5nIGRlc2NyaXB0b3JzKS4KKyAqIGRyaXZlciBzaG91bGQgdXRpbGl6ZSB0aGUgY2FsbGJhY2sgdG8gKGZvciBpbnN0YW5jZSkgdW5tYXAKKyAqIGFuZCBmcmVlIERNQSBkYXRhIGJ1ZmZlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBwb3N0ZWQgKHN0YXRlID0KKyAqIFZYR0VfSFdfVFhETF9TVEFURV9QT1NURUQpIGRlc2NyaXB0b3JzLAorICogYXMgd2VsbCBhcyBvdGhlciByZWxldmFudCBjbGVhbnVwIGZ1bmN0aW9ucy4KKyAqCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfZmlmb19hdHRye30KKyAqLworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19maWZvX2F0dHIgLSBGaWZvIG9wZW4gInRlbXBsYXRlIi4KKyAqIEBjYWxsYmFjazogRmlmbyBjb21wbGV0aW9uIGNhbGxiYWNrLiBIVyBpbnZva2VzIHRoZSBjYWxsYmFjayB3aGVuIHRoZXJlCisgKiAgICAgICAgICAgIGFyZSBuZXcgY29tcGxldGlvbnMgb24gdGhhdCBmaWZvLiBJbiBtYW55IGltcGxlbWVudGF0aW9ucworICogICAgICAgICAgICB0aGUgQGNhbGxiYWNrIGV4ZWN1dGVzIGluIHRoZSBodyBpbnRlcnJ1cHQgY29udGV4dC4KKyAqIEB0eGRsX3Rlcm06IEZpZm8ncyBkZXNjcmlwdG9yLXRlcm1pbmF0ZSBjYWxsYmFjay4gSWYgbm90IE5VTEwsCisgKiAgICAgICAgICBIVyBpbnZva2VzIHRoZSBjYWxsYmFjayB3aGVuIGNsb3NpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZmlmby4KKyAqICAgICAgICAgIFNlZSBhbHNvIHZ4Z2VfaHdfZmlmb190eGRsX3Rlcm1fZnt9LgorICogQHVzZXJkYXRhOiBVc2VyLWRlZmluZWQgImNvbnRleHQiIG9mIF90aGF0XyBmaWZvLiBQYXNzZWQgYmFjayB0byB0aGUKKyAqICAgICAgICAgICAgdXNlciBhcyBvbmUgb2YgdGhlIEBjYWxsYmFjaywgYW5kIEB0eGRsX3Rlcm0gYXJndW1lbnRzLgorICogQHBlcl90eGRsX3NwYWNlOiBJZiBzcGVjaWZpZWQgKGkuZS4sIGdyZWF0ZXIgdGhhbiB6ZXJvKTogZXh0cmEgc3BhY2UKKyAqICAgICAgICAgICAgICByZXNlcnZlZCBieSBIVyBwZXIgZWFjaCB0cmFuc21pdCBkZXNjcmlwdG9yLiBDYW4gYmUgdXNlZCB0bworICogICAgICAgICAgICAgIHN0b3JlLCBhbmQgcmV0cmlldmUgb24gY29tcGxldGlvbiwgaW5mb3JtYXRpb24gc3BlY2lmaWMKKyAqICAgICAgICAgICAgICB0byB0aGUgZHJpdmVyLgorICoKKyAqIEZpZm8gb3BlbiAidGVtcGxhdGUiLiBVc2VyIGZpbGxzIHRoZSBzdHJ1Y3R1cmUgd2l0aCBmaWZvCisgKiBhdHRyaWJ1dGVzIGFuZCBwYXNzZXMgaXQgdG8gdnhnZV9od192cGF0aF9vcGVuKCkuCisgKi8KK3N0cnVjdCB2eGdlX2h3X2ZpZm9fYXR0ciB7CisKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzICgqY2FsbGJhY2spKAorCQkJc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvX2hhbmRsZSwKKwkJCXZvaWQgKnR4ZGxoLAorCQkJZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgdF9jb2RlLAorCQkJdm9pZCAqdXNlcmRhdGEsCisJCQl2b2lkICoqc2tiX3B0cik7CisKKwl2b2lkICgqdHhkbF90ZXJtKSgKKwkJCXZvaWQgKnR4ZGxoLAorCQkJZW51bSB2eGdlX2h3X3R4ZGxfc3RhdGUgc3RhdGUsCisJCQl2b2lkICp1c2VyZGF0YSk7CisKKwl2b2lkCQkqdXNlcmRhdGE7CisJdTMyCQlwZXJfdHhkbF9zcGFjZTsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfYXR0ciAtIEF0dHJpYnV0ZXMgb2YgdmlydHVhbCBwYXRoCisgKiBAdnBfaWQ6IElkZW50aWZpZXIgb2YgVmlydHVhbCBQYXRoCisgKiBAcmluZ19hdHRyOiBBdHRyaWJ1dGVzIG9mIHJpbmcgZm9yIG5vbi1vZmZsb2FkIHJlY2VpdmUKKyAqIEBmaWZvX2F0dHI6IEF0dHJpYnV0ZXMgb2YgZmlmbyBmb3Igbm9uLW9mZmxvYWQgdHJhbnNtaXQKKyAqCisgKiBBdHRyaWJ1dGVzIG9mIHZpcnR1YWwgcGF0aC4gIFRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCBhcyBwYXJhbWV0ZXIKKyAqIHRvIHRoZSB2eGdlX2h3X3ZwYXRoX29wZW4oKSByb3V0aW5lIHRvIHNldCB0aGUgYXR0cmlidXRlcyBvZiByaW5nIGFuZCBmaWZvLgorICovCitzdHJ1Y3QgdnhnZV9od192cGF0aF9hdHRyIHsKKwl1MzIJCQkJdnBfaWQ7CisJc3RydWN0IHZ4Z2VfaHdfcmluZ19hdHRyCXJpbmdfYXR0cjsKKwlzdHJ1Y3QgdnhnZV9od19maWZvX2F0dHIJZmlmb19hdHRyOworfTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2Jsb2NrcG9vbF9jcmVhdGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2wgICpibG9ja3Bvb2wsCisJCQl1MzIgcG9vbF9zaXplLAorCQkJdTMyIHBvb2xfbWF4KTsKKwordm9pZAorX192eGdlX2h3X2Jsb2NrcG9vbF9kZXN0cm95KHN0cnVjdCBfX3Z4Z2VfaHdfYmxvY2twb29sICAqYmxvY2twb29sKTsKKworc3RydWN0IF9fdnhnZV9od19ibG9ja3Bvb2xfZW50cnkgKgorX192eGdlX2h3X2Jsb2NrcG9vbF9ibG9ja19hbGxvY2F0ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQl1MzIgc2l6ZSk7CisKK3ZvaWQKK19fdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfZnJlZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsCisJCQlzdHJ1Y3QgX192eGdlX2h3X2Jsb2NrcG9vbF9lbnRyeSAqZW50cnkpOworCit2b2lkICoKK19fdnhnZV9od19ibG9ja3Bvb2xfbWFsbG9jKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCXUzMiBzaXplLAorCQkJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgKmRtYV9vYmplY3QpOworCit2b2lkCitfX3Z4Z2VfaHdfYmxvY2twb29sX2ZyZWUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJdm9pZCAqbWVtYmxvY2ssCisJCQl1MzIgc2l6ZSwKKwkJCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hICpkbWFfb2JqZWN0KTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9maWZvX2NvbmZpZ19jaGVjayhzdHJ1Y3QgdnhnZV9od19maWZvX2NvbmZpZyAqZmlmb19jb25maWcpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2NvbmZpZ19jaGVjayhzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnICpuZXdfY29uZmlnKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19tZ210X2RldmljZV9jb25maWcoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCXN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcJKmRldl9jb25maWcsIGludCBzaXplKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyBfX2RldmluaXQgdnhnZV9od19kZXZpY2VfaHdfaW5mb19nZXQoCisJdm9pZCBfX2lvbWVtICpiYXIwLAorCXN0cnVjdCB2eGdlX2h3X2RldmljZV9od19pbmZvICpod19pbmZvKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX2Z3X3Zlcl9nZXQoCisJdTMyCXZwX2lkLAorCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcsCisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8gKmh3X2luZm8pOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfY2FyZF9pbmZvX2dldCgKKwl1MzIgdnBfaWQsCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZywKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfaHdfaW5mbyAqaHdfaW5mbyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgX19kZXZpbml0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZ19kZWZhdWx0X2dldCgKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnICpkZXZpY2VfY29uZmlnKTsKKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9saW5rX3N0YXRlX2dldCAtIEdldCBsaW5rIHN0YXRlLgorICogQGRldmg6IEhXIGRldmljZSBoYW5kbGUuCisgKgorICogR2V0IGxpbmsgc3RhdGUuCisgKiBSZXR1cm5zOiBsaW5rIHN0YXRlLgorICovCitzdGF0aWMgaW5saW5lCitlbnVtIHZ4Z2VfaHdfZGV2aWNlX2xpbmtfc3RhdGUgdnhnZV9od19kZXZpY2VfbGlua19zdGF0ZV9nZXQoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpCit7CisJcmV0dXJuIGRldmgtPmxpbmtfc3RhdGU7Cit9CisKK3ZvaWQgdnhnZV9od19kZXZpY2VfdGVybWluYXRlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKworY29uc3QgdTggKgordnhnZV9od19kZXZpY2Vfc2VyaWFsX251bWJlcl9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCit1MTYgdnhnZV9od19kZXZpY2VfbGlua193aWR0aF9nZXQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCitjb25zdCB1OCAqCit2eGdlX2h3X2RldmljZV9wcm9kdWN0X25hbWVfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyBfX2RldmluaXQgdnhnZV9od19kZXZpY2VfaW5pdGlhbGl6ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKmRldmgsCisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2F0dHIgKmF0dHIsCisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAqZGV2aWNlX2NvbmZpZyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19kZXZpY2VfZ2V0cGF1c2VfZGF0YSgKKwkgc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJIHUzMiBwb3J0LAorCSB1MzIgKnR4LAorCSB1MzIgKnJ4KTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2RldmljZV9zZXRwYXVzZV9kYXRhKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCXUzMiBwb3J0LAorCXUzMiB0eCwKKwl1MzIgcngpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKnZ4Z2Vfb3NfZG1hX21hbGxvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCXN0cnVjdCBwY2lfZGV2ICoqcF9kbWFoLAorCQkJc3RydWN0IHBjaV9kZXYgKipwX2RtYV9hY2NoKQoreworCWdmcF90IGZsYWdzOworCXZvaWQgKnZhZGRyOworCXVuc2lnbmVkIGxvbmcgbWlzYWxpZ25lZCA9IDA7CisJKnBfZG1hX2FjY2ggPSAqcF9kbWFoID0gTlVMTDsKKworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJZmxhZ3MgPSBHRlBfQVRPTUlDIHwgR0ZQX0RNQTsKKwllbHNlCisJCWZsYWdzID0gR0ZQX0tFUk5FTCB8IEdGUF9ETUE7CisKKwlzaXplICs9IFZYR0VfQ0FDSEVfTElORV9TSVpFOworCisJdmFkZHIgPSBrbWFsbG9jKChzaXplKSwgZmxhZ3MpOworCWlmICh2YWRkciA9PSBOVUxMKQorCQlyZXR1cm4gdmFkZHI7CisJbWlzYWxpZ25lZCA9ICh1bnNpZ25lZCBsb25nKVZYR0VfQUxJR04oKigodTY0ICopJnZhZGRyKSwKKwkJCQlWWEdFX0NBQ0hFX0xJTkVfU0laRSk7CisJKih1bnNpZ25lZCBsb25nICopcF9kbWFfYWNjaCA9IG1pc2FsaWduZWQ7CisJdmFkZHIgPSAodm9pZCAqKSgodTggKil2YWRkciArIG1pc2FsaWduZWQpOworCXJldHVybiB2YWRkcjsKK30KKworZXh0ZXJuIHZvaWQgdnhnZV9od19ibG9ja3Bvb2xfYmxvY2tfYWRkKAorCQkJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCQl2b2lkICpibG9ja19hZGRyLAorCQkJdTMyIGxlbmd0aCwKKwkJCXN0cnVjdCBwY2lfZGV2ICpkbWFfaCwKKwkJCXN0cnVjdCBwY2lfZGV2ICphY2NfaGFuZGxlKTsKKworc3RhdGljIGlubGluZSB2b2lkIHZ4Z2Vfb3NfZG1hX21hbGxvY19hc3luYyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCAqZGV2aCwKKwkJCQkJdW5zaWduZWQgbG9uZyBzaXplKQoreworCWdmcF90IGZsYWdzOworCXZvaWQgKnZhZGRyOworCisJaWYgKGluX2ludGVycnVwdCgpKQorCQlmbGFncyA9IEdGUF9BVE9NSUMgfCBHRlBfRE1BOworCWVsc2UKKwkJZmxhZ3MgPSBHRlBfS0VSTkVMIHwgR0ZQX0RNQTsKKworCXZhZGRyID0ga21hbGxvYygoc2l6ZSksIGZsYWdzKTsKKworCXZ4Z2VfaHdfYmxvY2twb29sX2Jsb2NrX2FkZChkZXZoLCB2YWRkciwgc2l6ZSwgcGRldiwgcGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2eGdlX29zX2RtYV9mcmVlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCB2b2lkICp2YWRkciwKKwkJCXN0cnVjdCBwY2lfZGV2ICoqcF9kbWFfYWNjaCkKK3sKKwl1bnNpZ25lZCBsb25nIG1pc2FsaWduZWQgPSAqKHVuc2lnbmVkIGxvbmcgKilwX2RtYV9hY2NoOworCXU4ICp0bXAgPSAodTggKil2YWRkcjsKKwl0bXAgLT0gbWlzYWxpZ25lZDsKKwlrZnJlZSgodm9pZCAqKXRtcCk7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfbWVtcG9vbF9pdGVtX3ByaXYgLSB3aWxsIHJldHVybiBwb2ludGVyIG9uIHBlciBpdGVtIHByaXZhdGUgc3BhY2UKKyAqLworc3RhdGljIGlubGluZSB2b2lkKgorX192eGdlX2h3X21lbXBvb2xfaXRlbV9wcml2KAorCXN0cnVjdCB2eGdlX2h3X21lbXBvb2wgKm1lbXBvb2wsCisJdTMyIG1lbWJsb2NrX2lkeCwKKwl2b2lkICppdGVtLAorCXUzMiAqbWVtYmxvY2tfaXRlbV9pZHgpCit7CisJcHRyZGlmZl90IG9mZnNldDsKKwl2b2lkICptZW1ibG9jayA9IG1lbXBvb2wtPm1lbWJsb2Nrc19hcnJbbWVtYmxvY2tfaWR4XTsKKworCisJb2Zmc2V0ID0gKHUzMikoKHU4ICopaXRlbSAtICh1OCAqKW1lbWJsb2NrKTsKKwl2eGdlX2Fzc2VydChvZmZzZXQgPj0gMCAmJiAodTMyKW9mZnNldCA8IG1lbXBvb2wtPm1lbWJsb2NrX3NpemUpOworCisJKCptZW1ibG9ja19pdGVtX2lkeCkgPSAodTMyKSBvZmZzZXQgLyBtZW1wb29sLT5pdGVtX3NpemU7CisJdnhnZV9hc3NlcnQoKCptZW1ibG9ja19pdGVtX2lkeCkgPCBtZW1wb29sLT5pdGVtc19wZXJfbWVtYmxvY2spOworCisJcmV0dXJuICh1OCAqKW1lbXBvb2wtPm1lbWJsb2Nrc19wcml2X2FyclttZW1ibG9ja19pZHhdICsKKwkJCSAgICAoKm1lbWJsb2NrX2l0ZW1faWR4KSAqIG1lbXBvb2wtPml0ZW1zX3ByaXZfc2l6ZTsKK30KKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X21lbXBvb2xfZ3JvdygKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sICptZW1wb29sLAorCXUzMiBudW1fYWxsb2NhdGUsCisJdTMyICpudW1fYWxsb2NhdGVkKTsKKworc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCoKK19fdnhnZV9od19tZW1wb29sX2NyZWF0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIgbWVtYmxvY2tfc2l6ZSwKKwl1MzIgaXRlbV9zaXplLAorCXUzMiBwcml2YXRlX3NpemUsCisJdTMyIGl0ZW1zX2luaXRpYWwsCisJdTMyIGl0ZW1zX21heCwKKwlzdHJ1Y3QgdnhnZV9od19tZW1wb29sX2NicyAqbXBfY2FsbGJhY2ssCisJdm9pZCAqdXNlcmRhdGEpOworCitzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwqCitfX3Z4Z2VfaHdfY2hhbm5lbF9hbGxvY2F0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBoLAorCQkJZW51bSBfX3Z4Z2VfaHdfY2hhbm5lbF90eXBlIHR5cGUsIHUzMiBsZW5ndGgsCisJCQl1MzIgcGVyX2R0cl9zcGFjZSwgdm9pZCAqdXNlcmRhdGEpOworCit2b2lkCitfX3Z4Z2VfaHdfY2hhbm5lbF9mcmVlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19jaGFubmVsX2luaXRpYWxpemUoCisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2NoYW5uZWxfcmVzZXQoCisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKTsKKworLyoKKyAqIF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdiAtIFJldHVybiB0aGUgbWF4IGZyYWdtZW50cyBhbGxvY2F0ZWQKKyAqIGZvciB0aGUgZmlmby4KKyAqIEBmaWZvOiBGaWZvCisgKiBAdHhkcDogUG9uaXRlciB0byBhIFR4RAorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYgKgorX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2KAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbywKKwlzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqdHhkcCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYgKikKKwkJCSgoKGNoYXIgKikoKHVsb25nKXR4ZHAtPmhvc3RfY29udHJvbCkpICsKKwkJCQlmaWZvLT5wZXJfdHhkbF9zcGFjZSk7Cit9CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9vcGVuKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX2F0dHIgKmF0dHIsCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKip2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX3ZwYXRoX3Jlc2V0X2luX3Byb2dfY2hlY2sodTY0IF9faW9tZW0gKnZwYXRoX3JzdF9pbl9wcm9nKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX2Nsb3NlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX3Jlc2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX3JlY292ZXJfZnJvbV9yZXNldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKwordm9pZAordnhnZV9od192cGF0aF9lbmFibGUoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9jaGVja19sZWFrKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ2gpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfbXR1X3NldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXUzMiBuZXdfbXR1KTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3N0YXRzX2VuYWJsZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3N0YXRzX2FjY2VzcygKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoCSp2cGF0aCwKKwl1MzIJCQlvcGVyYXRpb24sCisJdTMyCQkJb2Zmc2V0LAorCXU2NAkJCSpzdGF0KTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3htYWNfdHhfc3RhdHNfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgJKnZwYXRoLAorCXN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfdHhfc3RhdHMgKnZwYXRoX3R4X3N0YXRzKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3htYWNfcnhfc3RhdHNfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGgJKnZwYXRoLAorCXN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMgKnZwYXRoX3J4X3N0YXRzKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3N0YXRzX2dldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvICpod19zdGF0cyk7CisKK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfcnhfZG9vcmJlbGxfaW5pdChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX3ZwYXRoX2NvbmZpZ19jaGVjayhzdHJ1Y3QgdnhnZV9od192cF9jb25maWcgKnZwX2NvbmZpZyk7CisKK3ZvaWQKK19fdnhnZV9od19kZXZpY2VfcGNpX2VfaW5pdChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfbGVnYWN5X3N3YXBwZXJfc2V0KHN0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcgX19pb21lbSAqbGVnYWN5X3JlZyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9zd2FwcGVyX3NldChzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcgX19pb21lbSAqdnBhdGhfcmVnKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2tkZmNfc3dhcHBlcl9zZXQoc3RydWN0IHZ4Z2VfaHdfbGVnYWN5X3JlZyBfX2lvbWVtICpsZWdhY3lfcmVnLAorCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cGF0aF9yZWcpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX3JlZ2lzdGVyX3BvbGwoCisJdm9pZCBfX2lvbWVtCSpyZWcsCisJdTY0IG1hc2ssIHUzMiBtYXhfbWlsbGlzKTsKKworI2lmbmRlZiByZWFkcQorc3RhdGljIGlubGluZSB1NjQgcmVhZHEodm9pZCBfX2lvbWVtICphZGRyKQoreworCXU2NCByZXQgPSAwOworCXJldCA9IHJlYWRsKGFkZHIgKyA0KTsKKwlyZXQgPDw9IDMyOworCXJldCB8PSByZWFkbChhZGRyKTsKKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworI2lmbmRlZiB3cml0ZXEKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXEodTY0IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXdyaXRlbCgodTMyKSAodmFsKSwgYWRkcik7CisJd3JpdGVsKCh1MzIpICh2YWwgPj4gMzIpLCAoYWRkciArIDQpKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcih1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGVsKHZhbCwgYWRkciArIDQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl9sb3dlcih1MzIgdmFsLCB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJd3JpdGVsKHZhbCwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3Bpb19tZW1fd3JpdGU2NCh1NjQgdmFsNjQsIHZvaWQgX19pb21lbSAqYWRkciwKKwkJCSAgdTY0IG1hc2ssIHUzMiBtYXhfbWlsbGlzKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfbG93ZXIoKHUzMil2eGdlX2JWQUxuKHZhbDY0LCAzMiwgMzIpLCBhZGRyKTsKKwl3bWIoKTsKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpdnhnZV9iVkFMbih2YWw2NCwgMCwgMzIpLCBhZGRyKTsKKwl3bWIoKTsKKworCXN0YXR1cyA9IF9fdnhnZV9od19kZXZpY2VfcmVnaXN0ZXJfcG9sbChhZGRyLCBtYXNrLCBtYXhfbWlsbGlzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdHJ1Y3QgdnhnZV9od190b2NfcmVnIF9faW9tZW0gKgorX192eGdlX2h3X2RldmljZV90b2NfZ2V0KHZvaWQgX19pb21lbSAqYmFyMCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfcmVnX2FkZHJfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldik7CisKK3ZvaWQKK19fdnhnZV9od19kZXZpY2VfaWRfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldik7CisKK3ZvaWQKK19fdnhnZV9od19kZXZpY2VfaG9zdF9pbmZvX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2RldmljZV9mbGlja19saW5rX2xlZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwgdTY0IG9uX29mZik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19kZXZpY2VfaW5pdGlhbGl6ZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfcGNpX3JlYWQoCisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aAkqdnBhdGgsCisJdTMyCQkJcGh5X2Z1bmNfMCwKKwl1MzIJCQlvZmZzZXQsCisJdTMyCQkJKnZhbCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9hZGRyX2dldCgKKwl1MzIgdnBfaWQsCisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwYXRoX3JlZywKKwl1OCAobWFjYWRkcilbRVRIX0FMRU5dLAorCXU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSk7CisKK3UzMgorX192eGdlX2h3X3ZwYXRoX2Z1bmNfaWRfZ2V0KAorCXUzMiB2cF9pZCwgc3RydWN0IHZ4Z2VfaHdfdnBtZ210X3JlZyBfX2lvbWVtICp2cG1nbXRfcmVnKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX3Jlc2V0X2NoZWNrKHN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoKTsKKworLyoqCisgKiB2eGdlX2RlYnVnCisgKiBAbGV2ZWw6IGxldmVsIG9mIGRlYnVnIHZlcmJvc2l0eS4KKyAqIEBtYXNrOiBtYXNrIGZvciB0aGUgZGVidWcKKyAqIEBidWY6IENpcmN1bGFyIGJ1ZmZlciBmb3IgdHJhY2luZworICogQGZtdDogcHJpbnRmIGxpa2UgZm9ybWF0IHN0cmluZworICoKKyAqIFByb3ZpZGVzIGxvZ2dpbmcgZmFjaWxpdGllcy4gQ2FuIGJlIGN1c3RvbWl6ZWQgb24gcGVyLW1vZHVsZQorICogYmFzaXMgb3IvYW5kIHdpdGggZGVidWcgbGV2ZWxzLiBJbnB1dCBwYXJhbWV0ZXJzLCBleGNlcHQKKyAqIG1vZHVsZSBhbmQgbGV2ZWwsIGFyZSB0aGUgc2FtZSBhcyBwb3NpeCBwcmludGYuIFRoaXMgZnVuY3Rpb24KKyAqIG1heSBiZSBjb21waWxlZCBvdXQgaWYgREVCVUcgbWFjcm8gd2FzIG5ldmVyIGRlZmluZWQuCisgKiBTZWUgYWxzbzogZW51bSB2eGdlX2RlYnVnX2xldmVse30uCisgKi8KKworI2RlZmluZSB2eGdlX3RyYWNlX2F1eChsZXZlbCwgbWFzaywgZm10LCAuLi4pIFwKK3tcCisJCXZ4Z2Vfb3NfdmFwcmludGYobGV2ZWwsIG1hc2ssIGZtdCwgX19WQV9BUkdTX18pO1wKK30KKworI2RlZmluZSB2eGdlX2RlYnVnKG1vZHVsZSwgbGV2ZWwsIG1hc2ssIGZtdCwgLi4uKSB7IFwKK2lmICgobGV2ZWwgPj0gVlhHRV9UUkFDRSAmJiAoKG1vZHVsZSAmIFZYR0VfREVCVUdfVFJBQ0VfTUFTSykgPT0gbW9kdWxlKSkgfHwgXAorCShsZXZlbCA+PSBWWEdFX0VSUiAmJiAoKG1vZHVsZSAmIFZYR0VfREVCVUdfRVJSX01BU0spID09IG1vZHVsZSkpKSB7XAorCWlmICgobWFzayAmIFZYR0VfREVCVUdfTUFTSykgPT0gbWFzaylcCisJCXZ4Z2VfdHJhY2VfYXV4KGxldmVsLCBtYXNrLCBmbXQsIF9fVkFfQVJHU19fKTsgXAorfSBcCit9CisKKyNpZiAoVlhHRV9DT01QT05FTlRfTEwgJiBWWEdFX0RFQlVHX01PRFVMRV9NQVNLKQorI2RlZmluZSB2eGdlX2RlYnVnX2xsKGxldmVsLCBtYXNrLCBmbXQsIC4uLikgXAore1wKKwl2eGdlX2RlYnVnKFZYR0VfQ09NUE9ORU5UX0xMLCBsZXZlbCwgbWFzaywgZm10LCBfX1ZBX0FSR1NfXyk7XAorfQorCisjZWxzZQorI2RlZmluZSB2eGdlX2RlYnVnX2xsKGxldmVsLCBtYXNrLCBmbXQsIC4uLikKKyNlbmRpZgorCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcnRzX3J0aF9pdGFibGVfc2V0KAorCQkJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKip2cGF0aF9oYW5kbGVzLAorCQkJdTMyIHZwYXRoX2NvdW50LAorCQkJdTggKm10YWJsZSwKKwkJCXU4ICppdGFibGUsCisJCQl1MzIgaXRhYmxlX3NpemUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcnRzX3J0aF9zZXQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwllbnVtIHZ4Z2VfaHdfcnRoX2FsZ29yaXRtcyBhbGdvcml0aG0sCisJc3RydWN0IHZ4Z2VfaHdfcnRoX2hhc2hfdHlwZXMgKmhhc2hfdHlwZSwKKwl1MTYgYnVja2V0X3NpemUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NzM2YjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5jCkBAIC0wLDAgKzEsMTE0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqIERyaXZlcnMgYmFzZWQgb24gb3IgZGVyaXZlZCBmcm9tIHRoaXMgY29kZSBmYWxsIHVuZGVyIHRoZSBHUEwgYW5kIG11c3QKKyAqIHJldGFpbiB0aGUgYXV0aG9yc2hpcCwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZS4gIFRoaXMgZmlsZSBpcyBub3QKKyAqIGEgY29tcGxldGUgcHJvZ3JhbSBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBlbnRpcmUgb3BlcmF0aW5nCisgKiBzeXN0ZW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTC4KKyAqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIHZ4Z2UtZXRodG9vbC5jOiBEcml2ZXIgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTworICogICAgICAgICAgICAgICAgIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgorICogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGU8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ2eGdlLWV0aHRvb2wuaCIKKworLyoqCisgKiB2eGdlX2V0aHRvb2xfc3NldCAtIFNldHMgZGlmZmVyZW50IGxpbmsgcGFyYW1ldGVycy4KKyAqIEBkZXY6IGRldmljZSBwb2ludGVyLgorICogQGluZm86IHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aXRoIHBhcmFtZXRlcnMgZ2l2ZW4gYnkgZXRodG9vbCB0byBzZXQKKyAqIGxpbmsgaW5mb3JtYXRpb24uCisgKgorICogVGhlIGZ1bmN0aW9uIHNldHMgZGlmZmVyZW50IGxpbmsgcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgdXNlciBvbnRvCisgKiB0aGUgTklDLgorICogUmV0dXJuIHZhbHVlOgorICogMCBvbiBzdWNjZXNzLgorICovCisKK3N0YXRpYyBpbnQgdnhnZV9ldGh0b29sX3NzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICppbmZvKQoreworCS8qIFdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgMTBHYi9GVUxMICovCisJaWYgKChpbmZvLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB8fAorCSAgICAoaW5mby0+c3BlZWQgIT0gU1BFRURfMTAwMDApIHx8IChpbmZvLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZ4Z2VfZXRodG9vbF9nc2V0IC0gUmV0dXJuIGxpbmsgc3BlY2lmaWMgaW5mb3JtYXRpb24uCisgKiBAZGV2OiBkZXZpY2UgcG9pbnRlci4KKyAqIEBpbmZvOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgd2l0aCBwYXJhbWV0ZXJzIGdpdmVuIGJ5IGV0aHRvb2wKKyAqIHRvIHJldHVybiBsaW5rIGluZm9ybWF0aW9uLgorICoKKyAqIFJldHVybnMgbGluayBzcGVjaWZpYyBpbmZvcm1hdGlvbiBsaWtlIHNwZWVkLCBkdXBsZXggZXRjLi4gdG8gZXRodG9vbC4KKyAqIFJldHVybiB2YWx1ZSA6CisgKiByZXR1cm4gMCBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IHZ4Z2VfZXRodG9vbF9nc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqaW5mbykKK3sKKwlpbmZvLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9GSUJSRSk7CisJaW5mby0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfCBBRFZFUlRJU0VEX0ZJQlJFKTsKKwlpbmZvLT5wb3J0ID0gUE9SVF9GSUJSRTsKKworCWluZm8tPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKKworCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKKwkJaW5mby0+c3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJaW5mby0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJfSBlbHNlIHsKKwkJaW5mby0+c3BlZWQgPSAtMTsKKwkJaW5mby0+ZHVwbGV4ID0gLTE7CisJfQorCisJaW5mby0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2eGdlX2V0aHRvb2xfZ2RydmluZm8gLSBSZXR1cm5zIGRyaXZlciBzcGVjaWZpYyBpbmZvcm1hdGlvbi4KKyAqIEBkZXY6IGRldmljZSBwb2ludGVyLgorICogQGluZm86IHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aXRoIHBhcmFtZXRlcnMgZ2l2ZW4gYnkgZXRodG9vbCB0bworICogcmV0dXJuIGRyaXZlciBpbmZvcm1hdGlvbi4KKyAqCisgKiBSZXR1cm5zIGRyaXZlciBzcGVjZWZpYyBpbmZvcm1hdGlvbiBsaWtlIG5hbWUsIHZlcnNpb24gZXRjLi4gdG8gZXRodG9vbC4KKyAqLworc3RhdGljIHZvaWQgdnhnZV9ldGh0b29sX2dkcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCBWWEdFX0RSSVZFUl9OQU1FLCBzaXplb2YoVlhHRV9EUklWRVJfTkFNRSkpOworCXN0cmxjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04sIHNpemVvZihEUlZfVkVSU0lPTikpOworCXN0cmxjcHkoaW5mby0+ZndfdmVyc2lvbiwgdmRldi0+ZndfdmVyc2lvbiwgVlhHRV9IV19GV19TVFJMRU4pOworCXN0cmxjcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKHZkZXYtPnBkZXYpLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKKwlpbmZvLT5yZWdkdW1wX2xlbiA9IHNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcpCisJCQkJKiB2ZGV2LT5ub19vZl92cGF0aDsKKworCWluZm8tPm5fc3RhdHMgPSBTVEFUX0xFTjsKK30KKworLyoqCisgKiB2eGdlX2V0aHRvb2xfZ3JlZ3MgLSBkdW1wcyB0aGUgZW50aXJlIHNwYWNlIG9mIFRpdGFuIGludG8gdGhlIGJ1ZmZlci4KKyAqIEBkZXY6IGRldmljZSBwb2ludGVyLgorICogQHJlZ3M6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aXRoIHBhcmFtZXRlcnMgZ2l2ZW4gYnkgZXRodG9vbCBmb3IKKyAqIGR1bXBpbmcgdGhlIHJlZ2lzdGVycy4KKyAqIEByZWdfc3BhY2U6IFRoZSBpbnB1dCBhcmd1bW5ldCBpbnRvIHdoaWNoIGFsbCB0aGUgcmVnaXN0ZXJzIGFyZSBkdW1wZWQuCisgKgorICogRHVtcHMgdGhlIHZwYXRoIHJlZ2lzdGVyIHNwYWNlIG9mIFRpdGFuIE5JQyBpbnRvIHRoZSB1c2VyIGdpdmVuCisgKiBidWZmZXIgYXJlYS4KKyAqLworc3RhdGljIHZvaWQgdnhnZV9ldGh0b29sX2dyZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpzcGFjZSkKK3sKKwlpbnQgaW5kZXgsIG9mZnNldDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwl1NjQgcmVnOworCXU4ICpyZWdfc3BhY2UgPSAodTggKikgc3BhY2U7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKikKKwkJCQkJcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworCisJcmVncy0+bGVuID0gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZykgKiB2ZGV2LT5ub19vZl92cGF0aDsKKwlyZWdzLT52ZXJzaW9uID0gdmRldi0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB2ZGV2LT5ub19vZl92cGF0aDsgaW5kZXgrKykgeworCQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IHNpemVvZihzdHJ1Y3QgdnhnZV9od192cGF0aF9yZWcpOworCQkJCW9mZnNldCArPSA4KSB7CisJCQlzdGF0dXMgPSB2eGdlX2h3X21nbXRfcmVnX3JlYWQoaGxkZXYsCisJCQkJCXZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV92cGF0aCwKKwkJCQkJdmRldi0+dnBhdGhzW2luZGV4XS5kZXZpY2VfaWQsCisJCQkJCW9mZnNldCwgJnJlZyk7CisJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCSIlczolZCBHZXR0aW5nIHJlZyBkdW1wIEZhaWxlZCIsCisJCQkJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJbWVtY3B5KChyZWdfc3BhY2UgKyBvZmZzZXQpLCAmcmVnLCA4KTsKKwkJfQorCX0KK30KKworLyoqCisgKiB2eGdlX2V0aHRvb2xfaWRuaWMgLSBUbyBwaHlzaWNhbGx5IGlkZW50aWZ5IHRoZSBuaWMgb24gdGhlIHN5c3RlbS4KKyAqIEBkZXYgOiBkZXZpY2UgcG9pbnRlci4KKyAqIEBpZCA6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aXRoIGlkZW50aWZpY2F0aW9uIHBhcmFtZXRlcnMgZ2l2ZW4gYnkKKyAqIGV0aHRvb2wuCisgKgorICogVXNlZCB0byBwaHlzaWNhbGx5IGlkZW50aWZ5IHRoZSBOSUMgb24gdGhlIHN5c3RlbS4KKyAqIFRoZSBMaW5rIExFRCB3aWxsIGJsaW5rIGZvciBhIHRpbWUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorICogUmV0dXJuIHZhbHVlOgorICogMCBvbiBzdWNjZXNzCisgKi8KK3N0YXRpYyBpbnQgdnhnZV9ldGh0b29sX2lkbmljKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKQorCQkJcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworCisJdnhnZV9od19kZXZpY2VfZmxpY2tfbGlua19sZWQoaGxkZXYsIFZYR0VfRkxJQ0tFUl9PTik7CisJbXNsZWVwX2ludGVycnVwdGlibGUoZGF0YSA/IChkYXRhICogSFopIDogVlhHRV9NQVhfRkxJQ0tFUl9USU1FKTsKKwl2eGdlX2h3X2RldmljZV9mbGlja19saW5rX2xlZChobGRldiwgVlhHRV9GTElDS0VSX09GRik7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2eGdlX2V0aHRvb2xfZ2V0cGF1c2VfZGF0YSAtIFBhdXNlIGZyYW1lIGZyYW1lIGdlbmVyYXRpb24gYW5kIHJlY2VwdGlvbi4KKyAqIEBkZXYgOiBkZXZpY2UgcG9pbnRlci4KKyAqIEBlcCA6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZSB3aXRoIHBhdXNlIHBhcmFtZXRlcnMgZ2l2ZW4gYnkgZXRodG9vbC4KKyAqIERlc2NyaXB0aW9uOgorICogUmV0dXJucyB0aGUgUGF1c2UgZnJhbWUgZ2VuZXJhdGlvbiBhbmQgcmVjZXB0aW9uIGNhcGFiaWxpdHkgb2YgdGhlIE5JQy4KKyAqIFJldHVybiB2YWx1ZToKKyAqICB2b2lkCisgKi8KK3N0YXRpYyB2b2lkIHZ4Z2VfZXRodG9vbF9nZXRwYXVzZV9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVwKQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKQorCQkJcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworCisJdnhnZV9od19kZXZpY2VfZ2V0cGF1c2VfZGF0YShobGRldiwgMCwgJmVwLT50eF9wYXVzZSwgJmVwLT5yeF9wYXVzZSk7Cit9CisKKy8qKgorICogdnhnZV9ldGh0b29sX3NldHBhdXNlX2RhdGEgLSAgc2V0L3Jlc2V0IHBhdXNlIGZyYW1lIGdlbmVyYXRpb24uCisgKiBAZGV2IDogZGV2aWNlIHBvaW50ZXIuCisgKiBAZXAgOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgd2l0aCBwYXVzZSBwYXJhbWV0ZXJzIGdpdmVuIGJ5IGV0aHRvb2wuCisgKiBEZXNjcmlwdGlvbjoKKyAqIEl0IGNhbiBiZSB1c2VkIHRvIHNldCBvciByZXNldCBQYXVzZSBmcmFtZSBnZW5lcmF0aW9uIG9yIHJlY2VwdGlvbgorICogc3VwcG9ydCBvZiB0aGUgTklDLgorICogUmV0dXJuIHZhbHVlOgorICogaW50LCByZXR1cm5zIDAgb24gU3VjY2VzcworICovCitzdGF0aWMgaW50IHZ4Z2VfZXRodG9vbF9zZXRwYXVzZV9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVwKQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKQorCQkJcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworCisJdnhnZV9od19kZXZpY2Vfc2V0cGF1c2VfZGF0YShobGRldiwgMCwgZXAtPnR4X3BhdXNlLCBlcC0+cnhfcGF1c2UpOworCisJdmRldi0+Y29uZmlnLnR4X3BhdXNlX2VuYWJsZSA9IGVwLT50eF9wYXVzZTsKKwl2ZGV2LT5jb25maWcucnhfcGF1c2VfZW5hYmxlID0gZXAtPnJ4X3BhdXNlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZ4Z2VfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqZXN0YXRzLCB1NjQgKnRtcF9zdGF0cykKK3sKKwlpbnQgaiwgazsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN3c3RhdHVzOworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCA9IE5VTEw7CisKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9IHZkZXYtPmRldmg7CisJc3RydWN0IHZ4Z2VfaHdfeG1hY19zdGF0cyAqeG1hY19zdGF0czsKKwlzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfc3dfaW5mbyAqc3dfc3RhdHM7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX2h3X2luZm8gKmh3X3N0YXRzOworCisJdTY0ICpwdHIgPSB0bXBfc3RhdHM7CisKKwltZW1zZXQodG1wX3N0YXRzLCAwLAorCQl2eGdlX2V0aHRvb2xfZ2V0X3NzZXRfY291bnQoZGV2LCBFVEhfU1NfU1RBVFMpICogc2l6ZW9mKHU2NCkpOworCisJeG1hY19zdGF0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3htYWNfc3RhdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoeG1hY19zdGF0cyA9PSBOVUxMKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlcyA6ICVkIE1lbW9yeSBBbGxvY2F0aW9uIGZhaWxlZCBmb3IgeG1hY19zdGF0cyIsCisJCQkJIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCXJldHVybjsKKwl9CisKKwlzd19zdGF0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19pbmZvKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoc3dfc3RhdHMgPT0gTlVMTCkgeworCQlrZnJlZSh4bWFjX3N0YXRzKTsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzIDogJWQgTWVtb3J5IEFsbG9jYXRpb24gZmFpbGVkIGZvciBzd19zdGF0cyIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQlyZXR1cm47CisJfQorCisJaHdfc3RhdHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfaHdfaW5mbyksCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKGh3X3N0YXRzID09IE5VTEwpIHsKKwkJa2ZyZWUoeG1hY19zdGF0cyk7CisJCWtmcmVlKHN3X3N0YXRzKTsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzIDogJWQgTWVtb3J5IEFsbG9jYXRpb24gZmFpbGVkIGZvciBod19zdGF0cyIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQlyZXR1cm47CisJfQorCisJKnB0cisrID0gMDsKKwlzdGF0dXMgPSB2eGdlX2h3X2RldmljZV94bWFjX3N0YXRzX2dldChobGRldiwgeG1hY19zdGF0cyk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19FUlJfUFJJVklMQUdFRF9PUEVBUkFUSU9OKSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzIDogJWQgRmFpbHVyZSBpbiBnZXR0aW5nIHhtYWMgc3RhdHMiLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXyk7CisJCX0KKwl9CisJc3dzdGF0dXMgPSB2eGdlX2h3X2RyaXZlcl9zdGF0c19nZXQoaGxkZXYsIHN3X3N0YXRzKTsKKwlpZiAoc3dzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXMgOiAlZCBGYWlsdXJlIGluIGdldHRpbmcgc3cgc3RhdHMiLAorCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwl9CisKKwlzdGF0dXMgPSB2eGdlX2h3X2RldmljZV9zdGF0c19nZXQoaGxkZXYsIGh3X3N0YXRzKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzIDogJWQgaHdfc3RhdHNfZ2V0IGVycm9yIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwl9CisKKwlmb3IgKGsgPSAwOyBrIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGsrKykgeworCQlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvICp2cGF0aF9pbmZvOworCisJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1trXTsKKwkJaiA9IHZwYXRoLT5kZXZpY2VfaWQ7CisJCXZwYXRoX2luZm8gPSBod19zdGF0cy0+dnBhdGhfaW5mb1tqXTsKKwkJaWYgKCF2cGF0aF9pbmZvKSB7CisJCQltZW1zZXQocHRyLCAwLCAoVlhHRV9IV19WUEFUSF9UWF9TVEFUU19MRU4gKworCQkJCVZYR0VfSFdfVlBBVEhfUlhfU1RBVFNfTEVOKSAqIHNpemVvZih1NjQpKTsKKwkJCXB0ciArPSAoVlhHRV9IV19WUEFUSF9UWF9TVEFUU19MRU4gKworCQkJCVZYR0VfSFdfVlBBVEhfUlhfU1RBVFNfTEVOKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfdHRsX2V0aF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF90dGxfZXRoX29jdGV0czsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfZGF0YV9vY3RldHM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X21jYXN0X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X2JjYXN0X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3VjYXN0X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3RhZ2dlZF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF92bGRfaXA7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3ZsZF9pcF9vY3RldHM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X2ljbXA7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3RjcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfcnN0X3RjcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfdWRwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF91bmtub3duX3Byb3RvY29sOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF9sb3N0X2lwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT50eF9zdGF0cy50eF9wYXJzZV9lcnJvcjsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfc3RhdHMudHhfdGNwX29mZmxvYWQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X3JldHhfdGNwX29mZmxvYWQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnR4X3N0YXRzLnR4X2xvc3RfaXBfb2ZmbG9hZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdHRsX2V0aF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF92bGRfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfb2ZmbG9hZF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90dGxfZXRoX29jdGV0czsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfZGF0YV9vY3RldHM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X29mZmxvYWRfb2N0ZXRzOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF92bGRfbWNhc3RfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdmxkX2JjYXN0X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2FjY2VwdGVkX3VjYXN0X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2FjY2VwdGVkX251Y2FzdF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90YWdnZWRfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfbG9uZ19mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF91c2l6ZWRfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfb3NpemVkX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2ZyYWdfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfamFiYmVyX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3R0bF82NF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90dGxfNjVfMTI3X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3R0bF8xMjhfMjU1X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3R0bF8yNTZfNTExX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3R0bF81MTJfMTAyM19mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90dGxfMTAyNF8xNTE4X2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3R0bF8xNTE5XzQwOTVfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdHRsXzQwOTZfODE5MV9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90dGxfODE5Ml9tYXhfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfdHRsX2d0X21heF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9pcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfYWNjZXB0ZWRfaXA7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X2lwX29jdGV0czsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfZXJyX2lwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9pY21wOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF90Y3A7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3VkcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfZXJyX3RjcDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfbG9zdF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9sb3N0X2lwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9zdGF0cy5yeF9sb3N0X2lwX29mZmxvYWQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3ZhcmlvdXNfZGlzY2FyZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfc2xlZXBfZGlzY2FyZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfcmVkX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3N0YXRzLnJ4X3F1ZXVlX2Z1bGxfZGlzY2FyZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfc3RhdHMucnhfbXBhX29rX2ZybXM7CisJfQorCSpwdHIrKyA9IDA7CisJZm9yIChrID0gMDsgayA8IHZkZXYtPm1heF9jb25maWdfcG9ydDsgaysrKSB7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10udHhfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS50eF9kYXRhX29jdGV0czsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS50eF9tY2FzdF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnR4X2JjYXN0X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10udHhfZGlzY2FyZGVkX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10udHhfZXJyb3JlZF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnJ4X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10ucnhfZGF0YV9vY3RldHM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPmFnZ3Jfc3RhdHNba10ucnhfbWNhc3RfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS5yeF9iY2FzdF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnJ4X2Rpc2NhcmRlZF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5hZ2dyX3N0YXRzW2tdLnJ4X2Vycm9yZWRfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+YWdncl9zdGF0c1trXS5yeF91bmtub3duX3Nsb3dfcHJvdG9fZnJtczsKKwl9CisJKnB0cisrID0gMDsKKwlmb3IgKGsgPSAwOyBrIDwgdmRldi0+bWF4X2NvbmZpZ19wb3J0OyBrKyspIHsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF90dGxfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF90dGxfb2N0ZXRzOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X2RhdGFfb2N0ZXRzOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X21jYXN0X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfYmNhc3RfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF91Y2FzdF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3RhZ2dlZF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3ZsZF9pcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF92bGRfaXBfb2N0ZXRzOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X2ljbXA7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfdGNwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3JzdF90Y3A7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfdWRwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3BhcnNlX2Vycm9yOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3Vua25vd25fcHJvdG9jb2w7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfcGF1c2VfY3RybF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X21hcmtlcl9wZHVfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9sYWNwZHVfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9kcm9wX2lwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X21hcmtlcl9yZXNwX3BkdV9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3hnbWlpX2NoYXIyX21hdGNoOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3hnbWlpX2NoYXIxX21hdGNoOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnR4X3hnbWlpX2NvbHVtbjJfbWF0Y2g7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfeGdtaWlfY29sdW1uMV9tYXRjaDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS50eF9hbnlfZXJyX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10udHhfZHJvcF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3R0bF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3ZsZF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X29mZmxvYWRfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90dGxfb2N0ZXRzOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2RhdGFfb2N0ZXRzOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X29mZmxvYWRfb2N0ZXRzOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3ZsZF9tY2FzdF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3ZsZF9iY2FzdF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2FjY2VwdGVkX3VjYXN0X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfYWNjZXB0ZWRfbnVjYXN0X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdGFnZ2VkX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfbG9uZ19mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3VzaXplZF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X29zaXplZF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2ZyYWdfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9qYWJiZXJfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90dGxfNjRfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90dGxfNjVfMTI3X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHRsXzEyOF8yNTVfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90dGxfMjU2XzUxMV9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3R0bF81MTJfMTAyM19mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3R0bF8xMDI0XzE1MThfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF90dGxfMTUxOV80MDk1X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHRsXzQwOTZfODE5MV9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3R0bF84MTkyX21heF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3R0bF9ndF9tYXhfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9pcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9hY2NlcHRlZF9pcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9pcF9vY3RldHM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfZXJyX2lwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2ljbXA7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdGNwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3VkcDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9lcnJfdGNwOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3BhdXNlX2NvdW50OworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3BhdXNlX2N0cmxfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF91bnN1cF9jdHJsX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfZmNzX2Vycl9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2luX3JuZ19sZW5fZXJyX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfb3V0X3JuZ19sZW5fZXJyX2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfZHJvcF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2Rpc2NhcmRlZF9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2Ryb3BfaXA7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfZHJvcF91ZHA7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfbWFya2VyX3BkdV9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2xhY3BkdV9mcm1zOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3Vua25vd25fcGR1X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfbWFya2VyX3Jlc3BfcGR1X2ZybXM7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfZmNzX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfaWxsZWdhbF9wZHVfZnJtczsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9zd2l0Y2hfZGlzY2FyZDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9sZW5fZGlzY2FyZDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9ycGFfZGlzY2FyZDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9sMl9tZ210X2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfcnRzX2Rpc2NhcmQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfdHJhc2hfZGlzY2FyZDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9idWZmX2Z1bGxfZGlzY2FyZDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9yZWRfZGlzY2FyZDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF94Z21paV9jdHJsX2Vycl9jbnQ7CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfeGdtaWlfZGF0YV9lcnJfY250OworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3hnbWlpX2NoYXIxX21hdGNoOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3hnbWlpX2Vycl9zeW07CisJCSpwdHIrKyA9IHhtYWNfc3RhdHMtPnBvcnRfc3RhdHNba10ucnhfeGdtaWlfY29sdW1uMV9tYXRjaDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF94Z21paV9jaGFyMl9tYXRjaDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF9sb2NhbF9mYXVsdDsKKwkJKnB0cisrID0geG1hY19zdGF0cy0+cG9ydF9zdGF0c1trXS5yeF94Z21paV9jb2x1bW4yX21hdGNoOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X2pldHRpc29uOworCQkqcHRyKysgPSB4bWFjX3N0YXRzLT5wb3J0X3N0YXRzW2tdLnJ4X3JlbW90ZV9mYXVsdDsKKwl9CisKKwkqcHRyKysgPSAwOworCWZvciAoayA9IDA7IGsgPCB2ZGV2LT5ub19vZl92cGF0aDsgaysrKSB7CisJCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2luZm8gKnZwYXRoX2luZm87CisKKwkJdnBhdGggPSAmdmRldi0+dnBhdGhzW2tdOworCQlqID0gdnBhdGgtPmRldmljZV9pZDsKKwkJdnBhdGhfaW5mbyA9IChzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19pbmZvICopCisJCQkJJnN3X3N0YXRzLT52cGF0aF9pbmZvW2pdOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5zb2Z0X3Jlc2V0X2NudDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMudW5rbm93bl9hbGFybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLm5ldHdvcmtfc3VzdGFpbmVkX2ZhdWx0OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5uZXR3b3JrX3N1c3RhaW5lZF9vazsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMua2RmY2N0bF9maWZvMF9vdmVyd3JpdGU7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLmtkZmNjdGxfZmlmbzBfcG9pc29uOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5rZGZjY3RsX2ZpZm8wX2RtYV9lcnJvcjsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMuZGJsZ2VuX2ZpZm8wX292ZXJmbG93OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5zdGF0c2JfcGlmX2NoYWluX2Vycm9yOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy5zdGF0c2JfZHJvcF90aW1lb3V0OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5lcnJvcl9zdGF0cy50YXJnZXRfaWxsZWdhbF9hY2Nlc3M7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLmluaV9zZXJyX2RldDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMucHJjX3JpbmdfYnVtcHM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLnByY19yeGRjbV9zY19lcnI7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmVycm9yX3N0YXRzLnByY19yeGRjbV9zY19hYm9ydDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+ZXJyb3Jfc3RhdHMucHJjX3F1YW50YV9zaXplX2VycjsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cmluZ19zdGF0cy5jb21tb25fc3RhdHMuZnVsbF9jbnQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJpbmdfc3RhdHMuY29tbW9uX3N0YXRzLnVzYWdlX2NudDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cmluZ19zdGF0cy5jb21tb25fc3RhdHMudXNhZ2VfbWF4OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yaW5nX3N0YXRzLmNvbW1vbl9zdGF0cy4KKwkJCQkJcmVzZXJ2ZV9mcmVlX3N3YXBzX2NudDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cmluZ19zdGF0cy5jb21tb25fc3RhdHMudG90YWxfY29tcGxfY250OworCQlmb3IgKGogPSAwOyBqIDwgVlhHRV9IV19EVFJfTUFYX1RfQ09ERTsgaisrKQorCQkJKnB0cisrID0gdnBhdGhfaW5mby0+cmluZ19zdGF0cy5yeGRfdF9jb2RlX2Vycl9jbnRbal07CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmZpZm9fc3RhdHMuY29tbW9uX3N0YXRzLmZ1bGxfY250OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5maWZvX3N0YXRzLmNvbW1vbl9zdGF0cy51c2FnZV9jbnQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmZpZm9fc3RhdHMuY29tbW9uX3N0YXRzLnVzYWdlX21heDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+Zmlmb19zdGF0cy5jb21tb25fc3RhdHMuCisJCQkJCQlyZXNlcnZlX2ZyZWVfc3dhcHNfY250OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5maWZvX3N0YXRzLmNvbW1vbl9zdGF0cy50b3RhbF9jb21wbF9jbnQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmZpZm9fc3RhdHMudG90YWxfcG9zdHM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmZpZm9fc3RhdHMudG90YWxfYnVmZmVyczsKKwkJZm9yIChqID0gMDsgaiA8IFZYR0VfSFdfRFRSX01BWF9UX0NPREU7IGorKykKKwkJCSpwdHIrKyA9IHZwYXRoX2luZm8tPmZpZm9fc3RhdHMudHhkX3RfY29kZV9lcnJfY250W2pdOworCX0KKworCSpwdHIrKyA9IDA7CisJZm9yIChrID0gMDsgayA8IHZkZXYtPm5vX29mX3ZwYXRoOyBrKyspIHsKKwkJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbyAqdnBhdGhfaW5mbzsKKwkJdnBhdGggPSAmdmRldi0+dnBhdGhzW2tdOworCQlqID0gdnBhdGgtPmRldmljZV9pZDsKKwkJdnBhdGhfaW5mbyA9IGh3X3N0YXRzLT52cGF0aF9pbmZvW2pdOworCQlpZiAoIXZwYXRoX2luZm8pIHsKKwkJCW1lbXNldChwdHIsIDAsIFZYR0VfSFdfVlBBVEhfU1RBVFNfTEVOICogc2l6ZW9mKHU2NCkpOworCQkJcHRyICs9IFZYR0VfSFdfVlBBVEhfU1RBVFNfTEVOOworCQkJY29udGludWU7CisJCX0KKwkJKnB0cisrID0gdnBhdGhfaW5mby0+aW5pX251bV9td3Jfc2VudDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+aW5pX251bV9tcmRfc2VudDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+aW5pX251bV9jcGxfcmN2ZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+aW5pX251bV9td3JfYnl0ZV9zZW50OworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5pbmlfbnVtX2NwbF9ieXRlX3JjdmQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPndyY3JkdGFyYl94b2ZmOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yZGNyZHRhcmJfeG9mZjsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dnBhdGhfZ2Vuc3RhdHNfY291bnQwOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT52cGF0aF9nZW5zdGF0c19jb3VudDE7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnZwYXRoX2dlbnN0YXRzX2NvdW50MjsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dnBhdGhfZ2Vuc3RhdHNfY291bnQzOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT52cGF0aF9nZW5zdGF0c19jb3VudDQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnZwYXRoX2dlbnN0YXRzX2NvdW50NTsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cHJvZ19ldmVudF92bnVtMDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cHJvZ19ldmVudF92bnVtMTsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cHJvZ19ldmVudF92bnVtMjsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cHJvZ19ldmVudF92bnVtMzsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfbXVsdGlfY2FzdF9mcmFtZV9kaXNjYXJkOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9mcm1fdHJhbnNmZXJyZWQ7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4ZF9yZXR1cm5lZDsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfbXBhX2xlbl9mYWlsX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X21wYV9tcmtfZmFpbF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF9tcGFfY3JjX2ZhaWxfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+cnhfcGVybWl0dGVkX2ZybXM7CisJCSpwdHIrKyA9IHZwYXRoX2luZm8tPnJ4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zOworCQkqcHRyKysgPSB2cGF0aF9pbmZvLT5yeF93b2xfZnJtczsKKwkJKnB0cisrID0gdnBhdGhfaW5mby0+dHhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXM7CisJfQorCisJKnB0cisrID0gMDsKKwkqcHRyKysgPSB2ZGV2LT5zdGF0cy52cGF0aHNfb3BlbjsKKwkqcHRyKysgPSB2ZGV2LT5zdGF0cy52cGF0aF9vcGVuX2ZhaWw7CisJKnB0cisrID0gdmRldi0+c3RhdHMubGlua191cDsKKwkqcHRyKysgPSB2ZGV2LT5zdGF0cy5saW5rX2Rvd247CisKKwlmb3IgKGsgPSAwOyBrIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGsrKykgeworCQkqcHRyICs9IHZkZXYtPnZwYXRoc1trXS5maWZvLnN0YXRzLnR4X2ZybXM7CisJCSoocHRyICsgMSkgKz0gdmRldi0+dnBhdGhzW2tdLmZpZm8uc3RhdHMudHhfZXJyb3JzOworCQkqKHB0ciArIDIpICs9IHZkZXYtPnZwYXRoc1trXS5maWZvLnN0YXRzLnR4X2J5dGVzOworCQkqKHB0ciArIDMpICs9IHZkZXYtPnZwYXRoc1trXS5maWZvLnN0YXRzLnR4ZF9ub3RfZnJlZTsKKwkJKihwdHIgKyA0KSArPSB2ZGV2LT52cGF0aHNba10uZmlmby5zdGF0cy50eGRfb3V0X29mX2Rlc2M7CisJCSoocHRyICsgNSkgKz0gdmRldi0+dnBhdGhzW2tdLnJpbmcuc3RhdHMucnhfZnJtczsKKwkJKihwdHIgKyA2KSArPSB2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9lcnJvcnM7CisJCSoocHRyICsgNykgKz0gdmRldi0+dnBhdGhzW2tdLnJpbmcuc3RhdHMucnhfYnl0ZXM7CisJCSoocHRyICsgOCkgKz0gdmRldi0+dnBhdGhzW2tdLnJpbmcuc3RhdHMucnhfbWNhc3Q7CisJCSoocHRyICsgOSkgKz0gdmRldi0+dnBhdGhzW2tdLmZpZm8uc3RhdHMucGNpX21hcF9mYWlsICsKKwkJCQl2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5wY2lfbWFwX2ZhaWw7CisJCSoocHRyICsgMTApICs9IHZkZXYtPnZwYXRoc1trXS5yaW5nLnN0YXRzLnNrYl9hbGxvY19mYWlsOworCX0KKworCXB0ciArPSAxMjsKKworCWtmcmVlKHhtYWNfc3RhdHMpOworCWtmcmVlKHN3X3N0YXRzKTsKKwlrZnJlZShod19zdGF0cyk7Cit9CisKK3N0YXRpYyB2b2lkIHZ4Z2VfZXRodG9vbF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCit7CisJaW50IHN0YXRfc2l6ZSA9IDA7CisJaW50IGksIGo7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCXN3aXRjaCAoc3RyaW5nc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCXZ4Z2VfYWRkX3N0cmluZygiVlBBVEggU1RBVElTVElDUyVzXHRcdFx0IiwKKwkJCSZzdGF0X3NpemUsIGRhdGEsICIiKTsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdHRsX2V0aF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3R0bF9ldGhfb2N0ZWN0c18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfZGF0YV9vY3RlY3RzXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X21jYXN0X2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfYmNhc3RfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF91Y2FzdF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3RhZ2dlZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3ZsZF9pcF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF92bGRfaXBfb2N0ZWN0c18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfaWNtcF8lZFx0XHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3RjcF8lZFx0XHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3JzdF90Y3BfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdWRwXyVkXHRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdW5rbm93bl9wcm90b18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9sb3N0X2lwXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3BhcnNlX2Vycm9yXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3RjcF9vZmZsb2FkXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3JldHhfdGNwX29mZmxvYWRfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2xvc3RfaXBfb2ZmbG9hZF8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsX2V0aF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3ZsZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X29mZmxvYWRfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfZXRoX29jdGVjdHNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2RhdGFfb2N0ZWN0c18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9vZmZsb2FkX29jdGVjdHNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3ZsZF9tY2FzdF9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF92bGRfYmNhc3RfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfYWNjZXB0ZWRfdWNhc3RfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfYWNjZXB0ZWRfbnVjYXN0X2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3RhZ2dlZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2xvbmdfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF91c2l6ZWRfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9vc2l6ZWRfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9mcmFnX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfamFiYmVyX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzY0X2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzY1XzEyN19mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfMTI4XzI1NV9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfMjU2XzUxMV9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfNTEyXzEwMjNfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzEwMjRfMTUxOF9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfMTUxOV80MDk1X2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF80MDk2XzgxOTFfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzgxOTJfbWF4X2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF9ndF9tYXhfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfaXAlZFx0XHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2FjY2VwdGVkX2lwXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2lwX29jdGVjdHNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZXJyX2lwXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2ljbXBfJWRcdFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90Y3BfJWRcdFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF91ZHBfJWRcdFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9lcnJfdGNwXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2xvc3RfZnJtc18lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9sb3N0X2lwXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2xvc3RfaXBfb2ZmbG9hZF8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdmFyaW91c19kaXNjYXJkXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9zbGVlcF9kaXNjYXJkXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3JlZF9kaXNjYXJkXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3F1ZXVlX2Z1bGxfZGlzY2FyZF8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbXBhX29rX2ZybXNfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJfQorCisJCXZ4Z2VfYWRkX3N0cmluZygiXG5BR0dSIFNUQVRJU1RJQ1Mlc1x0XHRcdFx0IiwKKwkJCSZzdGF0X3NpemUsIGRhdGEsICIiKTsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm1heF9jb25maWdfcG9ydDsgaSsrKSB7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2ZybXNfJWRcdFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2RhdGFfb2N0ZWN0c18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X21jYXN0X2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9iY2FzdF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfZGlzY2FyZGVkX2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfZXJyb3JlZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZnJtc18lZFx0XHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZGF0YV9vY3RlY3RzXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbWNhc3RfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2JjYXN0X2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9kaXNjYXJkZWRfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9lcnJvcmVkX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF91bmtub3duX3Nsb3dfcHJvdG9fZnJtc18lZFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJfQorCisJCXZ4Z2VfYWRkX3N0cmluZygiXG5QT1JUIFNUQVRJU1RJQ1Mlc1x0XHRcdFx0IiwKKwkJCSZzdGF0X3NpemUsIGRhdGEsICIiKTsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm1heF9jb25maWdfcG9ydDsgaSsrKSB7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3R0bF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfdHRsX29jdGVjdHNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9kYXRhX29jdGVjdHNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9tY2FzdF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfYmNhc3RfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3VjYXN0X2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF90YWdnZWRfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3ZsZF9pcF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3ZsZF9pcF9vY3RlY3RzXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2ljbXBfJWRcdFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3RjcF8lZFx0XHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfcnN0X3RjcF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3VkcF8lZFx0XHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfcGFyc2VfZXJyb3JfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF91bmtub3duX3Byb3RvY29sXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3BhdXNlX2N0cmxfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9tYXJrZXJfcGR1X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfbGFjcGR1X2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF9kcm9wX2lwXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfbWFya2VyX3Jlc3BfcGR1X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfeGdtaWlfY2hhcjJfbWF0Y2hfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfeGdtaWlfY2hhcjFfbWF0Y2hfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidHhfeGdtaWlfY29sdW1uMl9tYXRjaF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eF94Z21paV9jb2x1bW4xX21hdGNoXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2FueV9lcnJfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X2Ryb3BfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdmxkX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9vZmZsb2FkX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfb2N0ZWN0c18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2RhdGFfb2N0ZWN0c18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X29mZmxvYWRfb2N0ZWN0c18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF92bGRfbWNhc3RfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF92bGRfYmNhc3RfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9hY2NlcHRlZF91Y2FzdF9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2FjY2VwdGVkX251Y2FzdF9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3RhZ2dlZF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbG9uZ19mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdXNpemVkX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9vc2l6ZWRfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2ZyYWdfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2phYmJlcl9mcm1zXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzY0X2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfNjVfMTI3X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzEyOF8yNTVfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfMjU2XzUxMV9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF81MTJfMTAyM19mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF8xMDI0XzE1MThfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90dGxfMTUxOV80MDk1X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfdHRsXzQwOTZfODE5MV9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF84MTkyX21heF9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3R0bF9ndF9tYXhfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9pcF8lZFx0XHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfYWNjZXB0ZWRfaXBfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9pcF9vY3RldHNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9lcnJfaXBfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9pY21wXyVkXHRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90Y3BfJWRcdFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3VkcF8lZFx0XHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZXJyX3RjcF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3BhdXNlX2NvdW50XyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfcGF1c2VfY3RybF9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3Vuc3VwX2N0cmxfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9mY3NfZXJyX2ZybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9pbl9ybmdfbGVuX2Vycl9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X291dF9ybmdfbGVuX2Vycl9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2Ryb3BfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2Rpc2NhcmRfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2Ryb3BfaXBfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9kcm9wX3VkcF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X21hcmtlcl9wZHVfZnJtc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9sYWNwZHVfZnJtc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3Vua25vd25fcGR1X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbWFya2VyX3Jlc3BfcGR1X2ZybXNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfZmNzX2Rpc2NhcmRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9pbGxlZ2FsX3BkdV9mcm1zXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3N3aXRjaF9kaXNjYXJkXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2xlbl9kaXNjYXJkXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfcnBhX2Rpc2NhcmRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9sMl9tZ210X2Rpc2NhcmRfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfcnRzX2Rpc2NhcmRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF90cmFzaF9kaXNjYXJkXyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfYnVmZl9mdWxsX2Rpc2NhcmRfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfcmVkX2Rpc2NhcmRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF94Z21paV9jdHJsX2Vycl9jbnRfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfeGdtaWlfZGF0YV9lcnJfY250XyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3hnbWlpX2NoYXIxX21hdGNoXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3hnbWlpX2Vycl9zeW1fJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF94Z21paV9jb2x1bW4xX21hdGNoXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3hnbWlpX2NoYXIyX21hdGNoXyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2xvY2FsX2ZhdWx0XyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfeGdtaWlfY29sdW1uMl9tYXRjaF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9qZXR0aXNvbl8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3JlbW90ZV9mYXVsdF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCX0KKworCQl2eGdlX2FkZF9zdHJpbmcoIlxuIFNPRlRXQVJFIFNUQVRJU1RJQ1Mlc1x0XHRcdCIsCisJCQkmc3RhdF9zaXplLCBkYXRhLCAiIik7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCQl2eGdlX2FkZF9zdHJpbmcoInNvZnRfcmVzZXRfY250XyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidW5rbm93bl9hbGFybXNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJuZXR3b3JrX3N1c3RhaW5lZF9mYXVsdF8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJuZXR3b3JrX3N1c3RhaW5lZF9va18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJrZGZjY3RsX2ZpZm8wX292ZXJ3cml0ZV8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJrZGZjY3RsX2ZpZm8wX3BvaXNvbl8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJrZGZjY3RsX2ZpZm8wX2RtYV9lcnJvcl8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJkYmxnZW5fZmlmbzBfb3ZlcmZsb3dfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygic3RhdHNiX3BpZl9jaGFpbl9lcnJvcl8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJzdGF0c2JfZHJvcF90aW1lb3V0XyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInRhcmdldF9pbGxlZ2FsX2FjY2Vzc18lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJpbmlfc2Vycl9kZXRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJwcmNfcmluZ19idW1wc18lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInByY19yeGRjbV9zY19lcnJfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJwcmNfcnhkY21fc2NfYWJvcnRfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicHJjX3F1YW50YV9zaXplX2Vycl8lZFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyaW5nX2Z1bGxfY250XyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicmluZ191c2FnZV9jbnRfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyaW5nX3VzYWdlX21heF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJpbmdfcmVzZXJ2ZV9mcmVlX3N3YXBzX2NudF8lZFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicmluZ190b3RhbF9jb21wbF9jbnRfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCWZvciAoaiA9IDA7IGogPCBWWEdFX0hXX0RUUl9NQVhfVF9DT0RFOyBqKyspCisJCQkJdnhnZV9hZGRfc3RyaW5nKCJyeGRfdF9jb2RlX2Vycl9jbnQlZF8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBqLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiZmlmb19mdWxsX2NudF8lZFx0XHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImZpZm9fdXNhZ2VfY250XyVkXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiZmlmb191c2FnZV9tYXhfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJmaWZvX3Jlc2VydmVfZnJlZV9zd2Fwc19jbnRfJWRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImZpZm9fdG90YWxfY29tcGxfY250XyVkXHRcdCIsCisJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImZpZm9fdG90YWxfcG9zdHNfJWRcdFx0XHQiLAorCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJmaWZvX3RvdGFsX2J1ZmZlcnNfJWRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCWZvciAoaiA9IDA7IGogPCBWWEdFX0hXX0RUUl9NQVhfVF9DT0RFOyBqKyspCisJCQkJdnhnZV9hZGRfc3RyaW5nKCJ0eGRfdF9jb2RlX2Vycl9jbnQlZF8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBqLCBpKTsKKwkJfQorCisJCXZ4Z2VfYWRkX3N0cmluZygiXG4gSEFSRFdBUkUgU1RBVElTVElDUyVzXHRcdFx0IiwKKwkJCQkmc3RhdF9zaXplLCBkYXRhLCAiIik7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCQl2eGdlX2FkZF9zdHJpbmcoImluaV9udW1fbXdyX3NlbnRfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiaW5pX251bV9tcmRfc2VudF8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJpbmlfbnVtX2NwbF9yY3ZkXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoImluaV9udW1fbXdyX2J5dGVfc2VudF8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygiaW5pX251bV9jcGxfYnl0ZV9yY3ZkXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ3cmNyZHRhcmJfeG9mZl8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyZGNyZHRhcmJfeG9mZl8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ2cGF0aF9nZW5zdGF0c19jb3VudDBfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInZwYXRoX2dlbnN0YXRzX2NvdW50MV8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidnBhdGhfZ2Vuc3RhdHNfY291bnQyXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJ2cGF0aF9nZW5zdGF0c19jb3VudDNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInZwYXRoX2dlbnN0YXRzX2NvdW50NF8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygidnBhdGhfZ2Vuc3RhdHNfY291bnQ1XyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJwcm9nX2V2ZW50X3ZudW0wXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInByb2dfZXZlbnRfdm51bTFfJWRcdFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicHJvZ19ldmVudF92bnVtMl8lZFx0XHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJwcm9nX2V2ZW50X3ZudW0zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X211bHRpX2Nhc3RfZnJhbWVfZGlzY2FyZF8lZFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X2ZybV90cmFuc2ZlcnJlZF8lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhkX3JldHVybmVkXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X21wYV9sZW5fZmFpbF9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF9tcGFfbXJrX2ZhaWxfZnJtc18lZFx0XHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJCXZ4Z2VfYWRkX3N0cmluZygicnhfbXBhX2NyY19mYWlsX2ZybXNfJWRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3Blcm1pdHRlZF9mcm1zXyVkXHRcdCIsCisJCQkJCSZzdGF0X3NpemUsIGRhdGEsIGkpOworCQkJdnhnZV9hZGRfc3RyaW5nKCJyeF92cF9yZXNldF9kaXNjYXJkZWRfZnJtc18lZFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInJ4X3dvbF9mcm1zXyVkXHRcdFx0IiwKKwkJCQkJJnN0YXRfc2l6ZSwgZGF0YSwgaSk7CisJCQl2eGdlX2FkZF9zdHJpbmcoInR4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zXyVkXHQiLAorCQkJCQkmc3RhdF9zaXplLCBkYXRhLCBpKTsKKwkJfQorCisJCW1lbWNweShkYXRhICsgc3RhdF9zaXplLCAmZXRodG9vbF9kcml2ZXJfc3RhdHNfa2V5cywKKwkJCXNpemVvZihldGh0b29sX2RyaXZlcl9zdGF0c19rZXlzKSk7CisJfQorfQorCitzdGF0aWMgaW50IHZ4Z2VfZXRodG9vbF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZykgKiB2ZGV2LT5ub19vZl92cGF0aDsKK30KKworc3RhdGljIHUzMiB2eGdlX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIHZkZXYtPnJ4X2NzdW07Cit9CisKK3N0YXRpYyBpbnQgdnhnZV9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisKKwlpZiAoZGF0YSkKKwkJdmRldi0+cnhfY3N1bSA9IDE7CisJZWxzZQorCQl2ZGV2LT5yeF9jc3VtID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ4Z2VfZXRodG9vbF9vcF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCWlmIChkYXRhKQorCQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CisJZWxzZQorCQlkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnhnZV9ldGh0b29sX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKworCXN3aXRjaCAoc3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlyZXR1cm4gVlhHRV9USVRMRV9MRU4gKworCQkJKHZkZXYtPm5vX29mX3ZwYXRoICogVlhHRV9IV19WUEFUSF9TVEFUU19MRU4pICsKKwkJCSh2ZGV2LT5tYXhfY29uZmlnX3BvcnQgKiBWWEdFX0hXX0FHR1JfU1RBVFNfTEVOKSArCisJCQkodmRldi0+bWF4X2NvbmZpZ19wb3J0ICogVlhHRV9IV19QT1JUX1NUQVRTX0xFTikgKworCQkJKHZkZXYtPm5vX29mX3ZwYXRoICogVlhHRV9IV19WUEFUSF9UWF9TVEFUU19MRU4pICsKKwkJCSh2ZGV2LT5ub19vZl92cGF0aCAqIFZYR0VfSFdfVlBBVEhfUlhfU1RBVFNfTEVOKSArCisJCQkodmRldi0+bm9fb2ZfdnBhdGggKiBWWEdFX1NXX1NUQVRTX0xFTikgKworCQkJRFJJVkVSX1NUQVRfTEVOOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdnhnZV9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzCQk9IHZ4Z2VfZXRodG9vbF9nc2V0LAorCS5zZXRfc2V0dGluZ3MJCT0gdnhnZV9ldGh0b29sX3NzZXQsCisJLmdldF9kcnZpbmZvCQk9IHZ4Z2VfZXRodG9vbF9nZHJ2aW5mbywKKwkuZ2V0X3JlZ3NfbGVuCQk9IHZ4Z2VfZXRodG9vbF9nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzCQk9IHZ4Z2VfZXRodG9vbF9ncmVncywKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X3BhdXNlcGFyYW0JCT0gdnhnZV9ldGh0b29sX2dldHBhdXNlX2RhdGEsCisJLnNldF9wYXVzZXBhcmFtCQk9IHZ4Z2VfZXRodG9vbF9zZXRwYXVzZV9kYXRhLAorCS5nZXRfcnhfY3N1bQkJPSB2eGdlX2dldF9yeF9jc3VtLAorCS5zZXRfcnhfY3N1bQkJPSB2eGdlX3NldF9yeF9jc3VtLAorCS5nZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX2dldF90eF9jc3VtLAorCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9od19jc3VtLAorCS5nZXRfc2cJCQk9IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAorCS5nZXRfdHNvCQk9IGV0aHRvb2xfb3BfZ2V0X3RzbywKKwkuc2V0X3RzbwkJPSB2eGdlX2V0aHRvb2xfb3Bfc2V0X3RzbywKKwkuZ2V0X3N0cmluZ3MJCT0gdnhnZV9ldGh0b29sX2dldF9zdHJpbmdzLAorCS5waHlzX2lkCQk9IHZ4Z2VfZXRodG9vbF9pZG5pYywKKwkuZ2V0X3NzZXRfY291bnQJCT0gdnhnZV9ldGh0b29sX2dldF9zc2V0X2NvdW50LAorCS5nZXRfZXRodG9vbF9zdGF0cwk9IHZ4Z2VfZ2V0X2V0aHRvb2xfc3RhdHMsCit9OworCit2b2lkIGluaXRpYWxpemVfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJU0VUX0VUSFRPT0xfT1BTKG5kZXYsICZ2eGdlX2V0aHRvb2xfb3BzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1ldGh0b29sLmggYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjM2RmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtZXRodG9vbC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKKyAqIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCisgKiBEcml2ZXJzIGJhc2VkIG9uIG9yIGRlcml2ZWQgZnJvbSB0aGlzIGNvZGUgZmFsbCB1bmRlciB0aGUgR1BMIGFuZCBtdXN0CisgKiByZXRhaW4gdGhlIGF1dGhvcnNoaXAsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBub3RpY2UuICBUaGlzIGZpbGUgaXMgbm90CisgKiBhIGNvbXBsZXRlIHByb2dyYW0gYW5kIG1heSBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgZW50aXJlIG9wZXJhdGluZworICogc3lzdGVtIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiB2eGdlLWV0aHRvb2wuaDogRHJpdmVyIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08KKyAqICAgICAgICAgICAgICAgICBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KKyAqIENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1ZYR0VfRVRIVE9PTF9ICisjZGVmaW5lIF9WWEdFX0VUSFRPT0xfSAorCisjaW5jbHVkZSAidnhnZS1tYWluLmgiCisKKy8qIEV0aHRvb2wgcmVsYXRlZCB2YXJpYWJsZXMgYW5kIE1hY3Jvcy4gKi8KK3N0YXRpYyBpbnQgdnhnZV9ldGh0b29sX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzc2V0KTsKKworc3RhdGljIGNoYXIgZXRodG9vbF9kcml2ZXJfc3RhdHNfa2V5c1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CisJeyJcbiBEUklWRVIgU1RBVElTVElDUyJ9LAorCXsidnBhdGhzX29wZW5lZCJ9LAorCXsidnBhdGhfb3Blbl9mYWlsX2NudCJ9LAorCXsibGlua191cF9jbnQifSwKKwl7ImxpbmtfZG93bl9jbnQifSwKKwl7InR4X2ZybXMifSwKKwl7InR4X2Vycm9ycyJ9LAorCXsidHhfYnl0ZXMifSwKKwl7InR4ZF9ub3RfZnJlZSJ9LAorCXsidHhkX291dF9vZl9kZXNjIn0sCisJeyJyeF9mcm1zIn0sCisJeyJyeF9lcnJvcnMifSwKKwl7InJ4X2J5dGVzIn0sCisJeyJyeF9tY2FzdCJ9LAorCXsicGNpX21hcF9mYWlsX2NudCJ9LAorCXsic2tiX2FsbG9jX2ZhaWxfY250In0KK307CisKKyNkZWZpbmUgVlhHRV9USVRMRV9MRU4JCQk1CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfU1RBVFNfTEVOIAkyNworI2RlZmluZSBWWEdFX0hXX0FHR1JfU1RBVFNfTEVOICAJMTMKKyNkZWZpbmUgVlhHRV9IV19QT1JUX1NUQVRTX0xFTiAgCTk0CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfVFhfU1RBVFNfTEVOCTE5CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfUlhfU1RBVFNfTEVOCTQyCisjZGVmaW5lIFZYR0VfU1dfU1RBVFNfTEVOCQk2MAorI2RlZmluZSBWWEdFX0hXX1NUQVRTX0xFTgkoVlhHRV9IV19WUEFUSF9TVEFUU19MRU4gK1wKKwkJCQlWWEdFX0hXX0FHR1JfU1RBVFNfTEVOICtcCisJCQkJVlhHRV9IV19QT1JUX1NUQVRTX0xFTiArXAorCQkJCVZYR0VfSFdfVlBBVEhfVFhfU1RBVFNfTEVOICtcCisJCQkJVlhHRV9IV19WUEFUSF9SWF9TVEFUU19MRU4pCisKKyNkZWZpbmUgRFJJVkVSX1NUQVRfTEVOIChzaXplb2YoZXRodG9vbF9kcml2ZXJfc3RhdHNfa2V5cykvRVRIX0dTVFJJTkdfTEVOKQorI2RlZmluZSBTVEFUX0xFTiAoVlhHRV9IV19TVEFUU19MRU4gKyBEUklWRVJfU1RBVF9MRU4gKyBWWEdFX1NXX1NUQVRTX0xFTikKKworLyogTWF4aW11bSBmbGlja2VyIHRpbWUgb2YgYWRhcHRlciBMRUQgKi8KKyNkZWZpbmUgVlhHRV9NQVhfRkxJQ0tFUl9USU1FICg2MCAqIEhaKSAvKiA2MCBzZWNvbmRzICovCisjZGVmaW5lIFZYR0VfRkxJQ0tFUl9PTgkJMQorI2RlZmluZSBWWEdFX0ZMSUNLRVJfT0ZGCTAKKworI2RlZmluZSB2eGdlX2FkZF9zdHJpbmcoZm10LCBzaXplLCBidWYsIC4uLikge1wKKwlzbnByaW50ZihidWYgKyAqc2l6ZSwgRVRIX0dTVFJJTkdfTEVOLCBmbXQsIF9fVkFfQVJHU19fKTsgXAorCSpzaXplICs9IEVUSF9HU1RSSU5HX0xFTjsgXAorfQorCisjZW5kaWYgLypfVlhHRV9FVEhUT09MX0gqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFlZjE2MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKQEAgLTAsMCArMSw0NTAyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKKyogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAorKiByZXRhaW4gdGhlIGF1dGhvcnNoaXAsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBub3RpY2UuICBUaGlzIGZpbGUgaXMgbm90CisqIGEgY29tcGxldGUgcHJvZ3JhbSBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBlbnRpcmUgb3BlcmF0aW5nCisqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyoKKyogdnhnZS1tYWluLmM6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisqICAgICAgICAgICAgICBWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlci4KKyogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisqCisqIFRoZSBtb2R1bGUgbG9hZGFibGUgcGFyYW1ldGVycyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBhbmQgYSBicmllZgorKiBleHBsYW5hdGlvbiBvZiBhbGwgdGhlIHZhcmlhYmxlczoKKyogdmxhbl90YWdfc3RyaXA6CisqCVN0cmlwIFZMQU4gVGFnIGVuYWJsZS9kaXNhYmxlLiBJbnN0cnVjdHMgdGhlIGRldmljZSB0byByZW1vdmUKKyoJdGhlIFZMQU4gdGFnIGZyb20gYWxsIHJlY2VpdmVkIHRhZ2dlZCBmcmFtZXMgdGhhdCBhcmUgbm90CisqCXJlcGxpY2F0ZWQgYXQgdGhlIGludGVybmFsIEwyIHN3aXRjaC4KKyoJCTAgLSBEbyBub3Qgc3RyaXAgdGhlIFZMQU4gdGFnLgorKgkJMSAtIFN0cmlwIHRoZSBWTEFOIHRhZy4KKyoKKyogYWRkcl9sZWFybl9lbjoKKyoJRW5hYmxlIGxlYXJuaW5nIHRoZSBtYWMgYWRkcmVzcyBvZiB0aGUgZ3Vlc3QgT1MgaW50ZXJmYWNlIGluCisqCWEgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQuCisqCQkwIC0gRElTQUJMRQorKgkJMSAtIEVOQUJMRQorKgorKiBtYXhfY29uZmlnX3BvcnQ6CisqCU1heGltdW0gbnVtYmVyIG9mIHBvcnQgdG8gYmUgc3VwcG9ydGVkLgorKgkJTUlOIC0xIGFuZCBNQVggLSAyCisqCisqIG1heF9jb25maWdfdnBhdGg6CisqCVRoaXMgY29uZmlndXJlcyB0aGUgbWF4aW11bSBubyBvZiBWUEFUSCBjb25maWd1cmVzIGZvciBlYWNoCisqIAlkZXZpY2UgZnVuY3Rpb24uCisqCQlNSU4gLSAxIGFuZCBNQVggLSAxNworKgorKiBtYXhfY29uZmlnX2RldjoKKyoJVGhpcyBjb25maWd1cmVzIG1heGltdW0gbm8gb2YgRGV2aWNlIGZ1bmN0aW9uIHRvIGJlIGVuYWJsZWQuCisqCQlNSU4gLSAxIGFuZCBNQVggLSAxNworKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPG5ldC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSAidnhnZS1tYWluLmgiCisjaW5jbHVkZSAidnhnZS1yZWcuaCIKKworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOZXRlcmlvbidzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTyIKKwkiVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIiKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZ4Z2VfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworCXtQQ0lfVkVORE9SX0lEX1MySU8sIFBDSV9ERVZJQ0VfSURfVElUQU5fV0lOLCBQQ0lfQU5ZX0lELAorCVBDSV9BTllfSUR9LAorCXtQQ0lfVkVORE9SX0lEX1MySU8sIFBDSV9ERVZJQ0VfSURfVElUQU5fVU5JLCBQQ0lfQU5ZX0lELAorCVBDSV9BTllfSUR9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHZ4Z2VfaWRfdGFibGUpOworCitWWEdFX01PRFVMRV9QQVJBTV9JTlQodmxhbl90YWdfc3RyaXAsIFZYR0VfSFdfVlBBVEhfUlBBX1NUUklQX1ZMQU5fVEFHX0VOQUJMRSk7CitWWEdFX01PRFVMRV9QQVJBTV9JTlQoYWRkcl9sZWFybl9lbiwgVlhHRV9IV19NQUNfQUREUl9MRUFSTl9ERUZBVUxUKTsKK1ZYR0VfTU9EVUxFX1BBUkFNX0lOVChtYXhfY29uZmlnX3BvcnQsIFZYR0VfTUFYX0NPTkZJR19QT1JUKTsKK1ZYR0VfTU9EVUxFX1BBUkFNX0lOVChtYXhfY29uZmlnX3ZwYXRoLCBWWEdFX1VTRV9ERUZBVUxUKTsKK1ZYR0VfTU9EVUxFX1BBUkFNX0lOVChtYXhfbWFjX3ZwYXRoLCBWWEdFX01BWF9NQUNfQUREUl9DT1VOVCk7CitWWEdFX01PRFVMRV9QQVJBTV9JTlQobWF4X2NvbmZpZ19kZXYsIFZYR0VfTUFYX0NPTkZJR19ERVYpOworCitzdGF0aWMgdTE2IHZwYXRoX3NlbGVjdG9yW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdID0KKwkJezAsIDEsIDMsIDMsIDcsIDcsIDcsIDcsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMzF9Oworc3RhdGljIHVuc2lnbmVkIGludCBid19wZXJjZW50YWdlW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdID0KKwl7WzAgLi4uKFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFMgLSAxKV0gPSAweEZGfTsKK21vZHVsZV9wYXJhbV9hcnJheShid19wZXJjZW50YWdlLCB1aW50LCBOVUxMLCAwKTsKKworc3RhdGljIHN0cnVjdCB2eGdlX2Rydl9jb25maWcgKmRyaXZlcl9jb25maWc7CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3Z4Z2VfY2FyZF91cChzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlyZXR1cm4gdGVzdF9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsICZ2ZGV2LT5zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBWWEdFX0NPTVBMRVRFX1ZQQVRIX1RYKHN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8pCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYl9wdHIgPSBOVUxMOworCXN0cnVjdCBza19idWZmICoqdGVtcCwgKmhlYWQsICpza2I7CisKKwlpZiAoc3Bpbl90cnlsb2NrX2lycXNhdmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKSkgeworCQl2eGdlX2h3X3ZwYXRoX3BvbGxfdHgoZmlmby0+aGFuZGxlLCAodm9pZCAqKikmc2tiX3B0cik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKTsKKwl9CisJLyogZnJlZSBTS0JzICovCisJaGVhZCA9IHNrYl9wdHI7CisJd2hpbGUgKGhlYWQpIHsKKwkJc2tiID0gaGVhZDsKKwkJdGVtcCA9IChzdHJ1Y3Qgc2tfYnVmZiAqKikmc2tiLT5jYjsKKwkJaGVhZCA9ICp0ZW1wOworCQkqdGVtcCA9IE5VTEw7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgVlhHRV9DT01QTEVURV9BTExfVFgoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJaW50IGk7CisKKwkvKiBDb21wbGV0ZSBhbGwgdHJhbnNtaXRzICovCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCVZYR0VfQ09NUExFVEVfVlBBVEhfVFgoJnZkZXYtPnZwYXRoc1tpXS5maWZvKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIFZYR0VfQ09NUExFVEVfQUxMX1JYKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWludCBpOworCXN0cnVjdCB2eGdlX3JpbmcgKnJpbmc7CisKKwkvKiBDb21wbGV0ZSBhbGwgcmVjZWl2ZXMqLworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCXJpbmcgPSAmdmRldi0+dnBhdGhzW2ldLnJpbmc7CisJCXZ4Z2VfaHdfdnBhdGhfcG9sbF9yeChyaW5nLT5oYW5kbGUpOworCX0KK30KKworLyoKKyAqIE11bHRpUSBtYW5pcHVsYXRpb24gaGVscGVyIGZ1bmN0aW9ucworICovCit2b2lkIHZ4Z2Vfc3RvcF9hbGxfdHhfcXVldWUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJaW50IGk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHZkZXYtPm5kZXY7CisKKwlpZiAodmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgIT0gVFhfTVVMVElRX1NURUVSSU5HKSB7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQkJdmRldi0+dnBhdGhzW2ldLmZpZm8ucXVldWVfc3RhdGUgPSBWUEFUSF9RVUVVRV9TVE9QOworCX0KKwluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTsKK30KKwordm9pZCB2eGdlX3N0b3BfdHhfcXVldWUoc3RydWN0IHZ4Z2VfZmlmbyAqZmlmbykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZmlmby0+bmRldjsKKworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IE5VTEw7CisJaWYgKGZpZm8tPnR4X3N0ZWVyaW5nX3R5cGUgPT0gVFhfTVVMVElRX1NURUVSSU5HKQorCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgZmlmby0+ZHJpdmVyX2lkKTsKKwllbHNlIHsKKwkJdHhxID0gbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIDApOworCQlmaWZvLT5xdWV1ZV9zdGF0ZSA9IFZQQVRIX1FVRVVFX1NUT1A7CisJfQorCisJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOworfQorCit2b2lkIHZ4Z2Vfc3RhcnRfYWxsX3R4X3F1ZXVlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWludCBpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB2ZGV2LT5uZGV2OworCisJaWYgKHZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlICE9IFRYX01VTFRJUV9TVEVFUklORykgeworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKKwkJCXZkZXYtPnZwYXRoc1tpXS5maWZvLnF1ZXVlX3N0YXRlID0gVlBBVEhfUVVFVUVfU1RBUlQ7CisJfQorCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoZGV2KTsKK30KKworc3RhdGljIHZvaWQgdnhnZV93YWtlX2FsbF90eF9xdWV1ZShzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdmRldi0+bmRldjsKKworCWlmICh2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSAhPSBUWF9NVUxUSVFfU1RFRVJJTkcpIHsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCQl2ZGV2LT52cGF0aHNbaV0uZmlmby5xdWV1ZV9zdGF0ZSA9IFZQQVRIX1FVRVVFX1NUQVJUOworCX0KKwluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoZGV2KTsKK30KKwordm9pZCB2eGdlX3dha2VfdHhfcXVldWUoc3RydWN0IHZ4Z2VfZmlmbyAqZmlmbywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZmlmby0+bmRldjsKKworCWludCB2cGF0aF9ubyA9IGZpZm8tPmRyaXZlcl9pZDsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBOVUxMOworCWlmIChmaWZvLT50eF9zdGVlcmluZ190eXBlID09IFRYX01VTFRJUV9TVEVFUklORykgeworCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgdnBhdGhfbm8pOworCQlpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKQorCQkJbmV0aWZfdHhfd2FrZV9xdWV1ZSh0eHEpOworCX0gZWxzZSB7CisJCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCAwKTsKKwkJaWYgKGZpZm8tPnF1ZXVlX3N0YXRlID09IFZQQVRIX1FVRVVFX1NUT1ApCisJCQlpZiAobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eHEpKSB7CisJCQkJZmlmby0+cXVldWVfc3RhdGUgPSBWUEFUSF9RVUVVRV9TVEFSVDsKKwkJCQluZXRpZl90eF93YWtlX3F1ZXVlKHR4cSk7CisJCQl9CisJfQorfQorCisvKgorICogdnhnZV9jYWxsYmFja19saW5rX3VwCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGludGVycnVwdCBjb250ZXh0IHRvIG5vdGlmeSBsaW5rIHVwIHN0YXRlCisgKiBjaGFuZ2UuCisgKi8KK3ZvaWQKK3Z4Z2VfY2FsbGJhY2tfbGlua191cChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGhsZGV2LT5uZGV2OworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQiLAorCQl2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCXByaW50ayhLRVJOX05PVElDRSAiJXM6IExpbmsgVXBcbiIsIHZkZXYtPm5kZXYtPm5hbWUpOworCXZkZXYtPnN0YXRzLmxpbmtfdXArKzsKKworCW5ldGlmX2NhcnJpZXJfb24odmRldi0+bmRldik7CisJdnhnZV93YWtlX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQgRXhpdGluZy4uLiIsIHZkZXYtPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKKy8qCisgKiB2eGdlX2NhbGxiYWNrX2xpbmtfZG93bgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBpbnRlcnJ1cHQgY29udGV4dCB0byBub3RpZnkgbGluayBkb3duIHN0YXRlCisgKiBjaGFuZ2UuCisgKi8KK3ZvaWQKK3Z4Z2VfY2FsbGJhY2tfbGlua19kb3duKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaGxkZXYtPm5kZXY7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCIsIHZkZXYtPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTGluayBEb3duXG4iLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKworCXZkZXYtPnN0YXRzLmxpbmtfZG93bisrOworCW5ldGlmX2NhcnJpZXJfb2ZmKHZkZXYtPm5kZXYpOworCXZ4Z2Vfc3RvcF9hbGxfdHhfcXVldWUodmRldik7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkIEV4aXRpbmcuLi4iLCB2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCisvKgorICogdnhnZV9yeF9hbGxvYworICoKKyAqIEFsbG9jYXRlIFNLQi4KKyAqLworc3RhdGljIHN0cnVjdCBza19idWZmKgordnhnZV9yeF9hbGxvYyh2b2lkICpkdHJoLCBzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nLCBjb25zdCBpbnQgc2tiX3NpemUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgICAgKmRldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAgICAgICAqc2tiOworCXN0cnVjdCB2eGdlX3J4X3ByaXYgKnJ4X3ByaXY7CisKKwlkZXYgPSByaW5nLT5uZGV2OworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQiLAorCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJcnhfcHJpdiA9IHZ4Z2VfaHdfcmluZ19yeGRfcHJpdmF0ZV9nZXQoZHRyaCk7CisKKwkvKiB0cnkgdG8gYWxsb2NhdGUgc2tiIGZpcnN0LiB0aGlzIG9uZSBtYXkgZmFpbCAqLworCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBza2Jfc2l6ZSArCisJVlhHRV9IV19IRUFERVJfRVRIRVJORVRfSUlfODAyXzNfQUxJR04pOworCWlmIChza2IgPT0gTlVMTCkgeworCQl2eGdlX2RlYnVnX21lbShWWEdFX0VSUiwKKwkJCSIlczogb3V0IG9mIG1lbW9yeSB0byBhbGxvY2F0ZSBTS0IiLCBkZXYtPm5hbWUpOworCQlyaW5nLT5zdGF0cy5za2JfYWxsb2NfZmFpbCsrOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl2eGdlX2RlYnVnX21lbShWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkICBTa2IgOiAweCVwIiwgcmluZy0+bmRldi0+bmFtZSwKKwkJX19mdW5jX18sIF9fTElORV9fLCBza2IpOworCisJc2tiX3Jlc2VydmUoc2tiLCBWWEdFX0hXX0hFQURFUl9FVEhFUk5FVF9JSV84MDJfM19BTElHTik7CisKKwlyeF9wcml2LT5za2IgPSBza2I7CisJcnhfcHJpdi0+ZGF0YV9zaXplID0gc2tiX3NpemU7CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCBFeGl0aW5nLi4uIiwgcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXJldHVybiBza2I7Cit9CisKKy8qCisgKiB2eGdlX3J4X21hcAorICovCitzdGF0aWMgaW50IHZ4Z2VfcnhfbWFwKHZvaWQgKmR0cmgsIHN0cnVjdCB2eGdlX3JpbmcgKnJpbmcpCit7CisJc3RydWN0IHZ4Z2VfcnhfcHJpdiAqcnhfcHJpdjsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCIsCisJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcnhfcHJpdiA9IHZ4Z2VfaHdfcmluZ19yeGRfcHJpdmF0ZV9nZXQoZHRyaCk7CisKKwlkbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHJpbmctPnBkZXYsIHJ4X3ByaXYtPnNrYi0+ZGF0YSwKKwkJCQlyeF9wcml2LT5kYXRhX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlpZiAoZG1hX2FkZHIgPT0gMCkgeworCQlyaW5nLT5zdGF0cy5wY2lfbWFwX2ZhaWwrKzsKKwkJcmV0dXJuIC1FSU87CisJfQorCXZ4Z2VfZGVidWdfbWVtKFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQgIDEgYnVmZmVyIG1vZGUgZG1hX2FkZHIgPSAweCVsbHgiLAorCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18sCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpZG1hX2FkZHIpOworCXZ4Z2VfaHdfcmluZ19yeGRfMWJfc2V0KGR0cmgsIGRtYV9hZGRyLCByeF9wcml2LT5kYXRhX3NpemUpOworCisJcnhfcHJpdi0+ZGF0YV9kbWEgPSBkbWFfYWRkcjsKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6ICVzOiVkIEV4aXRpbmcuLi4iLCByaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2eGdlX3J4X2luaXRpYWxfcmVwbGVuaXNoCisgKiBBbGxvY2F0aW9uIG9mIFJ4RCBhcyBhbiBpbml0aWFsIHJlcGxlbmlzaCBwcm9jZWR1cmUuCisgKi8KK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX3J4X2luaXRpYWxfcmVwbGVuaXNoKHZvaWQgKmR0cmgsIHZvaWQgKnVzZXJkYXRhKQoreworCXN0cnVjdCB2eGdlX3JpbmcgKnJpbmcgPSAoc3RydWN0IHZ4Z2VfcmluZyAqKXVzZXJkYXRhOworCXN0cnVjdCB2eGdlX3J4X3ByaXYgKnJ4X3ByaXY7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkIiwKKwkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKwlpZiAodnhnZV9yeF9hbGxvYyhkdHJoLCByaW5nLAorCQkJICBWWEdFX0xMX01BWF9GUkFNRV9TSVpFKHJpbmctPm5kZXYpKSA9PSBOVUxMKQorCQlyZXR1cm4gVlhHRV9IV19GQUlMOworCisJaWYgKHZ4Z2VfcnhfbWFwKGR0cmgsIHJpbmcpKSB7CisJCXJ4X3ByaXYgPSB2eGdlX2h3X3JpbmdfcnhkX3ByaXZhdGVfZ2V0KGR0cmgpOworCQlkZXZfa2ZyZWVfc2tiKHJ4X3ByaXYtPnNrYik7CisKKwkJcmV0dXJuIFZYR0VfSFdfRkFJTDsKKwl9CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCBFeGl0aW5nLi4uIiwgcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXJldHVybiBWWEdFX0hXX09LOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3Z4Z2VfcnhfY29tcGxldGUoc3RydWN0IHZ4Z2VfcmluZyAqcmluZywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHZsYW4sCisJCSBpbnQgcGt0X2xlbmd0aCwgc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfaW5mbyAqZXh0X2luZm8pCit7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkIiwKKwkJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJpbmctPmRyaXZlcl9pZCk7CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgcmluZy0+bmRldik7CisKKwlyaW5nLT5zdGF0cy5yeF9mcm1zKys7CisJcmluZy0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbmd0aDsKKworCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9NVUxUSUNBU1QpCisJCXJpbmctPnN0YXRzLnJ4X21jYXN0Kys7CisKKwl2eGdlX2RlYnVnX3J4KFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQgIHNrYiBwcm90b2NvbCA9ICVkIiwKKwkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLCBza2ItPnByb3RvY29sKTsKKworCWlmIChyaW5nLT5ncm9fZW5hYmxlKSB7CisJCWlmIChyaW5nLT52bGdycCAmJiBleHRfaW5mby0+dmxhbiAmJgorCQkJKHJpbmctPnZsYW5fdGFnX3N0cmlwID09CisJCQkJVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfRU5BQkxFKSkKKwkJCXZsYW5fZ3JvX3JlY2VpdmUoJnJpbmctPm5hcGksIHJpbmctPnZsZ3JwLAorCQkJCQlleHRfaW5mby0+dmxhbiwgc2tiKTsKKwkJZWxzZQorCQkJbmFwaV9ncm9fcmVjZWl2ZSgmcmluZy0+bmFwaSwgc2tiKTsKKwl9IGVsc2UgeworCQlpZiAocmluZy0+dmxncnAgJiYgdmxhbiAmJgorCQkJKHJpbmctPnZsYW5fdGFnX3N0cmlwID09CisJCQkJVlhHRV9IV19WUEFUSF9SUEFfU1RSSVBfVkxBTl9UQUdfRU5BQkxFKSkKKwkJCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHJpbmctPnZsZ3JwLCB2bGFuKTsKKwkJZWxzZQorCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwl9CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCBFeGl0aW5nLi4uIiwgcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZ4Z2VfcmVfcHJlX3Bvc3Qodm9pZCAqZHRyLCBzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nLAorCQkJCSAgICBzdHJ1Y3QgdnhnZV9yeF9wcml2ICpyeF9wcml2KQoreworCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShyaW5nLT5wZGV2LAorCQlyeF9wcml2LT5kYXRhX2RtYSwgcnhfcHJpdi0+ZGF0YV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJdnhnZV9od19yaW5nX3J4ZF8xYl9zZXQoZHRyLCByeF9wcml2LT5kYXRhX2RtYSwgcnhfcHJpdi0+ZGF0YV9zaXplKTsKKwl2eGdlX2h3X3JpbmdfcnhkX3ByZV9wb3N0KHJpbmctPmhhbmRsZSwgZHRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZ4Z2VfcG9zdChpbnQgKmR0cl9jbnQsIHZvaWQgKipmaXJzdF9kdHIsCisJCQkgICAgIHZvaWQgKnBvc3RfZHRyLCBzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdoKQoreworCWludCBkdHJfY291bnQgPSAqZHRyX2NudDsKKwlpZiAoKCpkdHJfY250ICUgVlhHRV9IV19SWFNZTkNfRlJFUV9DTlQpID09IDApIHsKKwkJaWYgKCpmaXJzdF9kdHIpCisJCQl2eGdlX2h3X3JpbmdfcnhkX3Bvc3RfcG9zdF93bWIocmluZ2gsICpmaXJzdF9kdHIpOworCQkqZmlyc3RfZHRyID0gcG9zdF9kdHI7CisJfSBlbHNlCisJCXZ4Z2VfaHdfcmluZ19yeGRfcG9zdF9wb3N0KHJpbmdoLCBwb3N0X2R0cik7CisJZHRyX2NvdW50Kys7CisJKmR0cl9jbnQgPSBkdHJfY291bnQ7Cit9CisKKy8qCisgKiB2eGdlX3J4XzFiX2NvbXBsCisgKgorICogSWYgdGhlIGludGVycnVwdCBpcyBiZWNhdXNlIG9mIGEgcmVjZWl2ZWQgZnJhbWUgb3IgaWYgdGhlIHJlY2VpdmUgcmluZworICogY29udGFpbnMgZnJlc2ggYXMgeWV0IHVuLXByb2Nlc3NlZCBmcmFtZXMsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX3J4XzFiX2NvbXBsKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ2gsIHZvaWQgKmR0ciwKKwkJIHU4IHRfY29kZSwgdm9pZCAqdXNlcmRhdGEpCit7CisJc3RydWN0IHZ4Z2VfcmluZyAqcmluZyA9IChzdHJ1Y3QgdnhnZV9yaW5nICopdXNlcmRhdGE7CisJc3RydWN0ICBuZXRfZGV2aWNlICpkZXYgPSByaW5nLT5uZGV2OworCXVuc2lnbmVkIGludCBkbWFfc2l6ZXM7CisJdm9pZCAqZmlyc3RfZHRyID0gTlVMTDsKKwlpbnQgZHRyX2NudCA9IDA7CisJaW50IGRhdGFfc2l6ZTsKKwlkbWFfYWRkcl90IGRhdGFfZG1hOworCWludCBwa3RfbGVuZ3RoOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHZ4Z2VfcnhfcHJpdiAqcnhfcHJpdjsKKwlzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF9pbmZvIGV4dF9pbmZvOworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQiLAorCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCXJpbmctPnBrdHNfcHJvY2Vzc2VkID0gMDsKKworCXZ4Z2VfaHdfcmluZ19yZXBsZW5pc2gocmluZ2gsIDApOworCisJZG8geworCQlyeF9wcml2ID0gdnhnZV9od19yaW5nX3J4ZF9wcml2YXRlX2dldChkdHIpOworCQlza2IgPSByeF9wcml2LT5za2I7CisJCWRhdGFfc2l6ZSA9IHJ4X3ByaXYtPmRhdGFfc2l6ZTsKKwkJZGF0YV9kbWEgPSByeF9wcml2LT5kYXRhX2RtYTsKKworCQl2eGdlX2RlYnVnX3J4KFZYR0VfVFJBQ0UsCisJCQkiJXM6ICVzOiVkICBza2IgPSAweCVwIiwKKwkJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXywgc2tiKTsKKworCQl2eGdlX2h3X3JpbmdfcnhkXzFiX2dldChyaW5naCwgZHRyLCAmZG1hX3NpemVzKTsKKwkJcGt0X2xlbmd0aCA9IGRtYV9zaXplczsKKworCQl2eGdlX2RlYnVnX3J4KFZYR0VfVFJBQ0UsCisJCQkiJXM6ICVzOiVkICBQYWNrZXQgTGVuZ3RoID0gJWQiLAorCQkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLCBwa3RfbGVuZ3RoKTsKKworCQl2eGdlX2h3X3JpbmdfcnhkXzFiX2luZm9fZ2V0KHJpbmdoLCBkdHIsICZleHRfaW5mbyk7CisKKwkJLyogY2hlY2sgc2tiIHZhbGlkaXR5ICovCisJCXZ4Z2VfYXNzZXJ0KHNrYik7CisKKwkJcHJlZmV0Y2goKGNoYXIgKilza2IgKyBMMV9DQUNIRV9CWVRFUyk7CisJCWlmICh1bmxpa2VseSh0X2NvZGUpKSB7CisKKwkJCWlmICh2eGdlX2h3X3JpbmdfaGFuZGxlX3Rjb2RlKHJpbmdoLCBkdHIsIHRfY29kZSkgIT0KKwkJCQlWWEdFX0hXX09LKSB7CisKKwkJCQlyaW5nLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQl2eGdlX2RlYnVnX3J4KFZYR0VfVFJBQ0UsCisJCQkJCSIlczogJXMgOiVkIFJ4IFRfY29kZSBpcyAlZCIsCisJCQkJCXJpbmctPm5kZXYtPm5hbWUsIF9fZnVuY19fLAorCQkJCQlfX0xJTkVfXywgdF9jb2RlKTsKKworCQkJCS8qIElmIHRoZSB0X2NvZGUgaXMgbm90IHN1cHBvcnRlZCBhbmQgaWYgdGhlCisJCQkJICogdF9jb2RlIGlzIG90aGVyIHRoYW4gMHg1ICh1bnBhcnNlYWJsZSBwYWNrZXQKKwkJCQkgKiBzdWNoIGFzIHVua25vd24gVVBWNiBoZWFkZXIpLCBEcm9wIGl0ICEhIQorCQkJCSAqLworCQkJCXZ4Z2VfcmVfcHJlX3Bvc3QoZHRyLCByaW5nLCByeF9wcml2KTsKKworCQkJCXZ4Z2VfcG9zdCgmZHRyX2NudCwgJmZpcnN0X2R0ciwgZHRyLCByaW5naCk7CisJCQkJcmluZy0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaWYgKHBrdF9sZW5ndGggPiBWWEdFX0xMX1JYX0NPUFlfVEhSRVNIT0xEKSB7CisKKwkJCWlmICh2eGdlX3J4X2FsbG9jKGR0ciwgcmluZywgZGF0YV9zaXplKSAhPSBOVUxMKSB7CisKKwkJCQlpZiAoIXZ4Z2VfcnhfbWFwKGR0ciwgcmluZykpIHsKKwkJCQkJc2tiX3B1dChza2IsIHBrdF9sZW5ndGgpOworCisJCQkJCXBjaV91bm1hcF9zaW5nbGUocmluZy0+cGRldiwgZGF0YV9kbWEsCisJCQkJCQlkYXRhX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJCQkJdnhnZV9od19yaW5nX3J4ZF9wcmVfcG9zdChyaW5naCwgZHRyKTsKKwkJCQkJdnhnZV9wb3N0KCZkdHJfY250LCAmZmlyc3RfZHRyLCBkdHIsCisJCQkJCQlyaW5naCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGV2X2tmcmVlX3NrYihyeF9wcml2LT5za2IpOworCQkJCQlyeF9wcml2LT5za2IgPSBza2I7CisJCQkJCXJ4X3ByaXYtPmRhdGFfc2l6ZSA9IGRhdGFfc2l6ZTsKKwkJCQkJdnhnZV9yZV9wcmVfcG9zdChkdHIsIHJpbmcsIHJ4X3ByaXYpOworCisJCQkJCXZ4Z2VfcG9zdCgmZHRyX2NudCwgJmZpcnN0X2R0ciwgZHRyLAorCQkJCQkJcmluZ2gpOworCQkJCQlyaW5nLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJdnhnZV9yZV9wcmVfcG9zdChkdHIsIHJpbmcsIHJ4X3ByaXYpOworCisJCQkJdnhnZV9wb3N0KCZkdHJfY250LCAmZmlyc3RfZHRyLCBkdHIsIHJpbmdoKTsKKwkJCQlyaW5nLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3VwOworCisJCQlza2JfdXAgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgcGt0X2xlbmd0aCArCisJCQkJVlhHRV9IV19IRUFERVJfRVRIRVJORVRfSUlfODAyXzNfQUxJR04pOworCQkJaWYgKHNrYl91cCAhPSBOVUxMKSB7CisJCQkJc2tiX3Jlc2VydmUoc2tiX3VwLAorCQkJCSAgICBWWEdFX0hXX0hFQURFUl9FVEhFUk5FVF9JSV84MDJfM19BTElHTik7CisKKwkJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocmluZy0+cGRldiwKKwkJCQkJZGF0YV9kbWEsIGRhdGFfc2l6ZSwKKwkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQkJCXZ4Z2VfZGVidWdfbWVtKFZYR0VfVFJBQ0UsCisJCQkJCSIlczogJXM6JWQgIHNrYl91cCA9ICVwIiwKKwkJCQkJcmluZy0+bmRldi0+bmFtZSwgX19mdW5jX18sCisJCQkJCV9fTElORV9fLCBza2IpOworCQkJCW1lbWNweShza2JfdXAtPmRhdGEsIHNrYi0+ZGF0YSwgcGt0X2xlbmd0aCk7CisKKwkJCQl2eGdlX3JlX3ByZV9wb3N0KGR0ciwgcmluZywgcnhfcHJpdik7CisKKwkJCQl2eGdlX3Bvc3QoJmR0cl9jbnQsICZmaXJzdF9kdHIsIGR0ciwKKwkJCQkJcmluZ2gpOworCQkJCS8qIHdpbGwgbmV0aWZfcnggc21hbGwgU0tCIGluc3RlYWQgKi8KKwkJCQlza2IgPSBza2JfdXA7CisJCQkJc2tiX3B1dChza2IsIHBrdF9sZW5ndGgpOworCQkJfSBlbHNlIHsKKwkJCQl2eGdlX3JlX3ByZV9wb3N0KGR0ciwgcmluZywgcnhfcHJpdik7CisKKwkJCQl2eGdlX3Bvc3QoJmR0cl9jbnQsICZmaXJzdF9kdHIsIGR0ciwgcmluZ2gpOworCQkJCXZ4Z2VfZGVidWdfcngoVlhHRV9FUlIsCisJCQkJCSIlczogdnhnZV9yeF8xYl9jb21wbDogb3V0IG9mICIKKwkJCQkJIm1lbW9yeSIsIGRldi0+bmFtZSk7CisJCQkJcmluZy0+c3RhdHMuc2tiX2FsbG9jX2ZhaWwrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICgoZXh0X2luZm8ucHJvdG8gJiBWWEdFX0hXX0ZSQU1FX1BST1RPX1RDUF9PUl9VRFApICYmCisJCSAgICAhKGV4dF9pbmZvLnByb3RvICYgVlhHRV9IV19GUkFNRV9QUk9UT19JUF9GUkFHKSAmJgorCQkgICAgcmluZy0+cnhfY3N1bSAmJiAvKiBPZmZsb2FkIFJ4IHNpZGUgQ1NVTSAqLworCQkgICAgZXh0X2luZm8ubDNfY2tzdW0gPT0gVlhHRV9IV19MM19DS1NVTV9PSyAmJgorCQkgICAgZXh0X2luZm8ubDRfY2tzdW0gPT0gVlhHRV9IV19MNF9DS1NVTV9PSykKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCWVsc2UKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCQl2eGdlX3J4X2NvbXBsZXRlKHJpbmcsIHNrYiwgZXh0X2luZm8udmxhbiwKKwkJCXBrdF9sZW5ndGgsICZleHRfaW5mbyk7CisKKwkJcmluZy0+YnVkZ2V0LS07CisJCXJpbmctPnBrdHNfcHJvY2Vzc2VkKys7CisJCWlmICghcmluZy0+YnVkZ2V0KQorCQkJYnJlYWs7CisKKwl9IHdoaWxlICh2eGdlX2h3X3JpbmdfcnhkX25leHRfY29tcGxldGVkKHJpbmdoLCAmZHRyLAorCQkmdF9jb2RlKSA9PSBWWEdFX0hXX09LKTsKKworCWlmIChmaXJzdF9kdHIpCisJCXZ4Z2VfaHdfcmluZ19yeGRfcG9zdF9wb3N0X3dtYihyaW5naCwgZmlyc3RfZHRyKTsKKworCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkJCSIlczolZCAgRXhpdGluZy4uLiIsCisJCQkJX19mdW5jX18sIF9fTElORV9fKTsKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqIHZ4Z2VfeG1pdF9jb21wbAorICoKKyAqIElmIGFuIGludGVycnVwdCB3YXMgcmFpc2VkIHRvIGluZGljYXRlIERNQSBjb21wbGV0ZSBvZiB0aGUgVHggcGFja2V0LAorICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEl0IGlkZW50aWZpZXMgdGhlIGxhc3QgVHhEIHdob3NlIGJ1ZmZlciB3YXMKKyAqIGZyZWVkIGFuZCBmcmVlcyBhbGwgc2ticyB3aG9zZSBkYXRhIGhhdmUgYWxyZWFkeSBETUEnZWQgaW50byB0aGUgTklDcworICogaW50ZXJuYWwgbWVtb3J5LgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX3htaXRfY29tcGwoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvX2h3LCB2b2lkICpkdHIsCisJCWVudW0gdnhnZV9od19maWZvX3Rjb2RlIHRfY29kZSwgdm9pZCAqdXNlcmRhdGEsCisJCXZvaWQgKipza2JfcHRyKQoreworCXN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8gPSAoc3RydWN0IHZ4Z2VfZmlmbyAqKXVzZXJkYXRhOworCXN0cnVjdCBza19idWZmICpza2IsICpoZWFkID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnRlbXA7CisJaW50IHBrdF9jbnQgPSAwOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiVkIEVudGVyZWQuLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCWRvIHsKKwkJaW50IGZyZ19jbnQ7CisJCXNrYl9mcmFnX3QgKmZyYWc7CisJCWludCBpID0gMCwgajsKKwkJc3RydWN0IHZ4Z2VfdHhfcHJpdiAqdHhkX3ByaXYgPQorCQkJdnhnZV9od19maWZvX3R4ZGxfcHJpdmF0ZV9nZXQoZHRyKTsKKworCQlza2IgPSB0eGRfcHJpdi0+c2tiOworCQlmcmdfY250ID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdOworCisJCXZ4Z2VfZGVidWdfdHgoVlhHRV9UUkFDRSwKKwkJCQkiJXM6ICVzOiVkIGZpZm9faHcgPSAlcCBkdHIgPSAlcCAiCisJCQkJInRjb2RlID0gMHgleCIsIGZpZm8tPm5kZXYtPm5hbWUsIF9fZnVuY19fLAorCQkJCV9fTElORV9fLCBmaWZvX2h3LCBkdHIsIHRfY29kZSk7CisJCS8qIGNoZWNrIHNrYiB2YWxpZGl0eSAqLworCQl2eGdlX2Fzc2VydChza2IpOworCQl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsCisJCQkiJXM6ICVzOiVkIHNrYiA9ICVwIGl0eGRfcHJpdiA9ICVwIGZyZ19jbnQgPSAlZCIsCisJCQlmaWZvLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18sCisJCQlza2IsIHR4ZF9wcml2LCBmcmdfY250KTsKKwkJaWYgKHVubGlrZWx5KHRfY29kZSkpIHsKKwkJCWZpZm8tPnN0YXRzLnR4X2Vycm9ycysrOworCQkJdnhnZV9kZWJ1Z190eChWWEdFX0VSUiwKKwkJCQkiJXM6IHR4OiBkdHIgJXAgY29tcGxldGVkIGR1ZSB0byAiCisJCQkJImVycm9yIHRfY29kZSAlMDF4IiwgZmlmby0+bmRldi0+bmFtZSwKKwkJCQlkdHIsIHRfY29kZSk7CisJCQl2eGdlX2h3X2ZpZm9faGFuZGxlX3Rjb2RlKGZpZm9faHcsIGR0ciwgdF9jb2RlKTsKKwkJfQorCisJCS8qICBmb3IgdW5mcmFnbWVudGVkIHNrYiAqLworCQlwY2lfdW5tYXBfc2luZ2xlKGZpZm8tPnBkZXYsIHR4ZF9wcml2LT5kbWFfYnVmZmVyc1tpKytdLAorCQkJCXNrYl9oZWFkbGVuKHNrYiksIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJCWZvciAoaiA9IDA7IGogPCBmcmdfY250OyBqKyspIHsKKwkJCXBjaV91bm1hcF9wYWdlKGZpZm8tPnBkZXYsCisJCQkJCXR4ZF9wcml2LT5kbWFfYnVmZmVyc1tpKytdLAorCQkJCQlmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWZyYWcgKz0gMTsKKwkJfQorCisJCXZ4Z2VfaHdfZmlmb190eGRsX2ZyZWUoZmlmb19odywgZHRyKTsKKworCQkvKiBVcGRhdGluZyB0aGUgc3RhdGlzdGljcyBibG9jayAqLworCQlmaWZvLT5zdGF0cy50eF9mcm1zKys7CisJCWZpZm8tPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCisJCXRlbXAgPSAoc3RydWN0IHNrX2J1ZmYgKiopJnNrYi0+Y2I7CisJCSp0ZW1wID0gaGVhZDsKKwkJaGVhZCA9IHNrYjsKKworCQlwa3RfY250Kys7CisJCWlmIChwa3RfY250ID4gZmlmby0+aW5kaWNhdGVfbWF4X3BrdHMpCisJCQlicmVhazsKKworCX0gd2hpbGUgKHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkKGZpZm9faHcsCisJCQkJJmR0ciwgJnRfY29kZSkgPT0gVlhHRV9IV19PSyk7CisKKwl2eGdlX3dha2VfdHhfcXVldWUoZmlmbywgc2tiKTsKKworCWlmIChza2JfcHRyKQorCQkqc2tiX3B0ciA9ICh2b2lkICopIGhlYWQ7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkJCSIlczogJXM6JWQgIEV4aXRpbmcuLi4iLAorCQkJCWZpZm8tPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qIHNlbGVjdCBhIHZwYXRoIHRvIHRyYXNtaXQgdGhlIHBhY2tldCAqLworc3RhdGljIHUzMiB2eGdlX2dldF92cGF0aF9ubyhzdHJ1Y3QgdnhnZWRldiAqdmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwlpbnQgKmRvX2xvY2spCit7CisJdTE2IHF1ZXVlX2xlbiwgY291bnRlciA9IDA7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7CisJCXN0cnVjdCBpcGhkciAqaXA7CisJCXN0cnVjdCB0Y3BoZHIgKnRoOworCisJCWlwID0gaXBfaGRyKHNrYik7CisKKwkJaWYgKChpcC0+ZnJhZ19vZmYgJiBodG9ucyhJUF9PRkZTRVR8SVBfTUYpKSA9PSAwKSB7CisJCQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKCgodW5zaWduZWQgY2hhciAqKWlwKSArCisJCQkJCWlwLT5paGwqNCk7CisKKwkJCXF1ZXVlX2xlbiA9IHZkZXYtPm5vX29mX3ZwYXRoOworCQkJY291bnRlciA9IChudG9ocyh0aC0+c291cmNlKSArCisJCQkJbnRvaHModGgtPmRlc3QpKSAmCisJCQkJdmRldi0+dnBhdGhfc2VsZWN0b3JbcXVldWVfbGVuIC0gMV07CisJCQlpZiAoY291bnRlciA+PSBxdWV1ZV9sZW4pCisJCQkJY291bnRlciA9IHF1ZXVlX2xlbiAtIDE7CisKKwkJCWlmIChpcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKKyNpZmRlZiBORVRJRl9GX0xMVFgKKwkJCQkqZG9fbG9jayA9IDA7CisjZW5kaWYKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gY291bnRlcjsKK30KKworc3RhdGljIGVudW0gdnhnZV9od19zdGF0dXMgdnhnZV9zZWFyY2hfbWFjX2FkZHJfaW5fbGlzdCgKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgsIHU2NCBkZWxfbWFjKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LCAqbmV4dDsKKwlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIG5leHQsICZ2cGF0aC0+bWFjX2FkZHJfbGlzdCkgeworCQlpZiAoKChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKillbnRyeSktPm1hY2FkZHIgPT0gZGVsX21hYykKKwkJCXJldHVybiBUUlVFOworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBpbnQgdnhnZV9sZWFybl9tYWMoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIHU4ICptYWNfaGVhZGVyKQoreworCXN0cnVjdCBtYWNJbmZvIG1hY19pbmZvOworCXU4ICptYWNfYWRkcmVzcyA9IE5VTEw7CisJdTY0IG1hY19hZGRyID0gMCwgdnBhdGhfdmVjdG9yID0gMDsKKwlpbnQgdnBhdGhfaWR4ID0gMDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoID0gTlVMTDsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CisKKwlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisKKwltYWNfYWRkcmVzcyA9ICh1OCAqKSZtYWNfYWRkcjsKKwltZW1jcHkobWFjX2FkZHJlc3MsIG1hY19oZWFkZXIsIEVUSF9BTEVOKTsKKworCS8qIElzIHRoaXMgbWFjIGFkZHJlc3MgYWxyZWFkeSBpbiB0aGUgbGlzdD8gKi8KKwlmb3IgKHZwYXRoX2lkeCA9IDA7IHZwYXRoX2lkeCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cGF0aF9pZHgrKykgeworCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbdnBhdGhfaWR4XTsKKwkJaWYgKHZ4Z2Vfc2VhcmNoX21hY19hZGRyX2luX2xpc3QodnBhdGgsIG1hY19hZGRyKSkKKwkJCXJldHVybiB2cGF0aF9pZHg7CisJfQorCisJbWVtc2V0KCZtYWNfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBtYWNJbmZvKSk7CisJbWVtY3B5KG1hY19pbmZvLm1hY2FkZHIsIG1hY19oZWFkZXIsIEVUSF9BTEVOKTsKKworCS8qIEFueSB2cGF0aCBoYXMgcm9vbSB0byBhZGQgbWFjIGFkZHJlc3MgdG8gaXRzIGRhIHRhYmxlPyAqLworCWZvciAodnBhdGhfaWR4ID0gMDsgdnBhdGhfaWR4IDwgdmRldi0+bm9fb2ZfdnBhdGg7IHZwYXRoX2lkeCsrKSB7CisJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1t2cGF0aF9pZHhdOworCQlpZiAodnBhdGgtPm1hY19hZGRyX2NudCA8IHZwYXRoLT5tYXhfbWFjX2FkZHJfY250KSB7CisJCQkvKiBBZGQgdGhpcyBtYWMgYWRkcmVzcyB0byB0aGlzIHZwYXRoICovCisJCQltYWNfaW5mby52cGF0aF9ubyA9IHZwYXRoX2lkeDsKKwkJCW1hY19pbmZvLnN0YXRlID0gVlhHRV9MTF9NQUNfQUREUl9JTl9EQV9UQUJMRTsKKwkJCXN0YXR1cyA9IHZ4Z2VfYWRkX21hY19hZGRyKHZkZXYsICZtYWNfaW5mbyk7CisJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCisJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCXJldHVybiB2cGF0aF9pZHg7CisJCX0KKwl9CisKKwltYWNfaW5mby5zdGF0ZSA9IFZYR0VfTExfTUFDX0FERFJfSU5fTElTVDsKKwl2cGF0aF9pZHggPSAwOworCW1hY19pbmZvLnZwYXRoX25vID0gdnBhdGhfaWR4OworCS8qIElzIHRoZSBmaXJzdCB2cGF0aCBhbHJlYWR5IHNlbGVjdGVkIGFzIGNhdGNoLWJhc2luID8gKi8KKwl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbdnBhdGhfaWR4XTsKKwlpZiAodnBhdGgtPm1hY19hZGRyX2NudCA+IHZwYXRoLT5tYXhfbWFjX2FkZHJfY250KSB7CisJCS8qIEFkZCB0aGlzIG1hYyBhZGRyZXNzIHRvIHRoaXMgdnBhdGggKi8KKwkJaWYgKEZBTFNFID09IHZ4Z2VfbWFjX2xpc3RfYWRkKHZwYXRoLCAmbWFjX2luZm8pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwkJcmV0dXJuIHZwYXRoX2lkeDsKKwl9CisKKwkvKiBTZWxlY3QgZmlyc3QgdnBhdGggYXMgY2F0Y2gtYmFzaW4gKi8KKwl2cGF0aF92ZWN0b3IgPSB2eGdlX21CSVQodnBhdGgtPmRldmljZV9pZCk7CisJc3RhdHVzID0gdnhnZV9od19tZ210X3JlZ193cml0ZSh2cGF0aC0+dmRldi0+ZGV2aCwKKwkJCQl2eGdlX2h3X21nbXRfcmVnX3R5cGVfbXJwY2ltLAorCQkJCTAsCisJCQkJKHVsb25nKW9mZnNldG9mKAorCQkJCQlzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnLAorCQkJCQlydHNfbWdyX2NiYXNpbl9jZmcpLAorCQkJCXZwYXRoX3ZlY3Rvcik7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfdHgoVlhHRV9FUlIsCisJCQkiJXM6IFVuYWJsZSB0byBzZXQgdGhlIHZwYXRoLSVkIGluIGNhdGNoLWJhc2luIG1vZGUiLAorCQkJVlhHRV9EUklWRVJfTkFNRSwgdnBhdGgtPmRldmljZV9pZCk7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJaWYgKEZBTFNFID09IHZ4Z2VfbWFjX2xpc3RfYWRkKHZwYXRoLCAmbWFjX2luZm8pKQorCQlyZXR1cm4gLUVQRVJNOworCisJcmV0dXJuIHZwYXRoX2lkeDsKK30KKworLyoqCisgKiB2eGdlX3htaXQKKyAqIEBza2IgOiB0aGUgc29ja2V0IGJ1ZmZlciBjb250YWluaW5nIHRoZSBUeCBkYXRhLgorICogQGRldiA6IGRldmljZSBwb2ludGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIFR4IGVudHJ5IHBvaW50IG9mIHRoZSBkcml2ZXIuIE5ldGVyaW9uIE5JQyBzdXBwb3J0cworICogY2VydGFpbiBwcm90b2NvbCBhc3Npc3QgZmVhdHVyZXMgb24gVHggc2lkZSwgbmFtZWx5ICBDU08sIFMvRywgTFNPLgorICogTk9URTogd2hlbiBkZXZpY2UgY2FudCBxdWV1ZSB0aGUgcGt0LCBqdXN0IHRoZSB0cmFuc19zdGFydCB2YXJpYWJsZSB3aWxsCisgKiBub3QgYmUgdXBhZHRlZC4KKyovCitzdGF0aWMgaW50Cit2eGdlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdnhnZV9maWZvICpmaWZvID0gTlVMTDsKKwl2b2lkICpkdHJfcHJpdjsKKwl2b2lkICpkdHIgPSBOVUxMOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gTlVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlpbnQgZnJnX2NudCwgZmlyc3RfZnJnX2xlbjsKKwlza2JfZnJhZ190ICpmcmFnOworCWludCBpID0gMCwgaiA9IDAsIGF2YWlsOworCXU2NCBkbWFfcG9pbnRlcjsKKwlzdHJ1Y3QgdnhnZV90eF9wcml2ICp0eGRsX3ByaXYgPSBOVUxMOworCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb19odzsKKwl1MzIgbWF4X21zcyA9IDB4MDsKKwlpbnQgb2ZmbG9hZF90eXBlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWludCB2cGF0aF9ubyA9IDA7CisJaW50IGRvX3NwaW5fdHhfbG9jayA9IDE7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkIiwKKwkJCWRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCS8qIEEgYnVmZmVyIHdpdGggbm8gZGF0YSB3aWxsIGJlIGRyb3BwZWQgKi8KKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPD0gMCkpIHsKKwkJdnhnZV9kZWJ1Z190eChWWEdFX0VSUiwKKwkJCSIlczogQnVmZmVyIGhhcyBubyBkYXRhLi4iLCBkZXYtPm5hbWUpOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisKKwlpZiAodW5saWtlbHkoIWlzX3Z4Z2VfY2FyZF91cCh2ZGV2KSkpIHsKKwkJdnhnZV9kZWJ1Z190eChWWEdFX0VSUiwKKwkJCSIlczogdmRldiBub3QgaW5pdGlhbGl6ZWQiLCBkZXYtPm5hbWUpOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJaWYgKHZkZXYtPmNvbmZpZy5hZGRyX2xlYXJuX2VuKSB7CisJCXZwYXRoX25vID0gdnhnZV9sZWFybl9tYWModmRldiwgc2tiLT5kYXRhICsgRVRIX0FMRU4pOworCQlpZiAodnBhdGhfbm8gPT0gLUVQRVJNKSB7CisJCQl2eGdlX2RlYnVnX3R4KFZYR0VfRVJSLAorCQkJCSIlczogRmFpbGVkIHRvIHN0b3JlIHRoZSBtYWMgYWRkcmVzcyIsCisJCQkJZGV2LT5uYW1lKTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCXJldHVybiBORVRERVZfVFhfT0s7CisJCX0KKwl9CisKKwlpZiAodmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPT0gVFhfTVVMVElRX1NURUVSSU5HKQorCQl2cGF0aF9ubyA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCWVsc2UgaWYgKHZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlID09IFRYX1BPUlRfU1RFRVJJTkcpCisJCXZwYXRoX25vID0gdnhnZV9nZXRfdnBhdGhfbm8odmRldiwgc2tiLCAmZG9fc3Bpbl90eF9sb2NrKTsKKworCXZ4Z2VfZGVidWdfdHgoVlhHRV9UUkFDRSwgIiVzOiB2cGF0aF9ubz0gJWQiLCBkZXYtPm5hbWUsIHZwYXRoX25vKTsKKworCWlmICh2cGF0aF9ubyA+PSB2ZGV2LT5ub19vZl92cGF0aCkKKwkJdnBhdGhfbm8gPSAwOworCisJZmlmbyA9ICZ2ZGV2LT52cGF0aHNbdnBhdGhfbm9dLmZpZm87CisJZmlmb19odyA9IGZpZm8tPmhhbmRsZTsKKworCWlmIChkb19zcGluX3R4X2xvY2spCisJCXNwaW5fbG9ja19pcnFzYXZlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CisJZWxzZSB7CisJCWlmICh1bmxpa2VseSghc3Bpbl90cnlsb2NrX2lycXNhdmUoJmZpZm8tPnR4X2xvY2ssIGZsYWdzKSkpCisJCQlyZXR1cm4gTkVUREVWX1RYX0xPQ0tFRDsKKwl9CisKKwlpZiAodmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPT0gVFhfTVVMVElRX1NURUVSSU5HKSB7CisJCWlmIChuZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGRldiwgc2tiKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmlmby0+dHhfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQl9CisJfSBlbHNlIGlmICh1bmxpa2VseShmaWZvLT5xdWV1ZV9zdGF0ZSA9PSBWUEFUSF9RVUVVRV9TVE9QKSkgeworCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CisJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJCX0KKwl9CisJYXZhaWwgPSB2eGdlX2h3X2ZpZm9fZnJlZV90eGRsX2NvdW50X2dldChmaWZvX2h3KTsKKwlpZiAoYXZhaWwgPT0gMCkgeworCQl2eGdlX2RlYnVnX3R4KFZYR0VfRVJSLAorCQkJIiVzOiBObyBmcmVlIFRYRHMgYXZhaWxhYmxlIiwgZGV2LT5uYW1lKTsKKwkJZmlmby0+c3RhdHMudHhkX25vdF9mcmVlKys7CisJCXZ4Z2Vfc3RvcF90eF9xdWV1ZShmaWZvKTsKKwkJZ290byBfZXhpdDI7CisJfQorCisJc3RhdHVzID0gdnhnZV9od19maWZvX3R4ZGxfcmVzZXJ2ZShmaWZvX2h3LCAmZHRyLCAmZHRyX3ByaXYpOworCWlmICh1bmxpa2VseShzdGF0dXMgIT0gVlhHRV9IV19PSykpIHsKKwkJdnhnZV9kZWJ1Z190eChWWEdFX0VSUiwKKwkJICAgIiVzOiBPdXQgb2YgZGVzY3JpcHRvcnMgLiIsIGRldi0+bmFtZSk7CisJCWZpZm8tPnN0YXRzLnR4ZF9vdXRfb2ZfZGVzYysrOworCQl2eGdlX3N0b3BfdHhfcXVldWUoZmlmbyk7CisJCWdvdG8gX2V4aXQyOworCX0KKworCXZ4Z2VfZGVidWdfdHgoVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCBmaWZvX2h3ID0gJXAgZHRyID0gJXAgZHRyX3ByaXYgPSAlcCIsCisJCWRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLAorCQlmaWZvX2h3LCBkdHIsIGR0cl9wcml2KTsKKworCWlmICh2ZGV2LT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwkJdTE2IHZsYW5fdGFnID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJCXZ4Z2VfaHdfZmlmb190eGRsX3ZsYW5fc2V0KGR0ciwgdmxhbl90YWcpOworCX0KKworCWZpcnN0X2ZyZ19sZW4gPSBza2JfaGVhZGxlbihza2IpOworCisJZG1hX3BvaW50ZXIgPSBwY2lfbWFwX3NpbmdsZShmaWZvLT5wZGV2LCBza2ItPmRhdGEsIGZpcnN0X2ZyZ19sZW4sCisJCQkJUENJX0RNQV9UT0RFVklDRSk7CisKKwlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGZpZm8tPnBkZXYsIGRtYV9wb2ludGVyKSkpIHsKKwkJdnhnZV9od19maWZvX3R4ZGxfZnJlZShmaWZvX2h3LCBkdHIpOworCQl2eGdlX3N0b3BfdHhfcXVldWUoZmlmbyk7CisJCWZpZm8tPnN0YXRzLnBjaV9tYXBfZmFpbCsrOworCQlnb3RvIF9leGl0MjsKKwl9CisKKwl0eGRsX3ByaXYgPSB2eGdlX2h3X2ZpZm9fdHhkbF9wcml2YXRlX2dldChkdHIpOworCXR4ZGxfcHJpdi0+c2tiID0gc2tiOworCXR4ZGxfcHJpdi0+ZG1hX2J1ZmZlcnNbal0gPSBkbWFfcG9pbnRlcjsKKworCWZyZ19jbnQgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCXZ4Z2VfZGVidWdfdHgoVlhHRV9UUkFDRSwKKwkJCSIlczogJXM6JWQgc2tiID0gJXAgdHhkbF9wcml2ID0gJXAgIgorCQkJImZyYWdfY250ID0gJWQgZG1hX3BvaW50ZXIgPSAweCVsbHgiLCBkZXYtPm5hbWUsCisJCQlfX2Z1bmNfXywgX19MSU5FX18sIHNrYiwgdHhkbF9wcml2LAorCQkJZnJnX2NudCwgKHVuc2lnbmVkIGxvbmcgbG9uZylkbWFfcG9pbnRlcik7CisKKwl2eGdlX2h3X2ZpZm9fdHhkbF9idWZmZXJfc2V0KGZpZm9faHcsIGR0ciwgaisrLCBkbWFfcG9pbnRlciwKKwkJZmlyc3RfZnJnX2xlbik7CisKKwlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF07CisJZm9yIChpID0gMDsgaSA8IGZyZ19jbnQ7IGkrKykgeworCQkvKiBpZ25vcmUgMCBsZW5ndGggZnJhZ21lbnQgKi8KKwkJaWYgKCFmcmFnLT5zaXplKQorCQkJY29udGludWU7CisKKwkJZG1hX3BvaW50ZXIgPQorCQkJKHU2NClwY2lfbWFwX3BhZ2UoZmlmby0+cGRldiwgZnJhZy0+cGFnZSwKKwkJCQlmcmFnLT5wYWdlX29mZnNldCwgZnJhZy0+c2l6ZSwKKwkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKworCQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGZpZm8tPnBkZXYsIGRtYV9wb2ludGVyKSkpCisJCQlnb3RvIF9leGl0MDsKKwkJdnhnZV9kZWJ1Z190eChWWEdFX1RSQUNFLAorCQkJIiVzOiAlczolZCBmcmFnID0gJWQgZG1hX3BvaW50ZXIgPSAweCVsbHgiLAorCQkJCWRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLCBpLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZG1hX3BvaW50ZXIpOworCisJCXR4ZGxfcHJpdi0+ZG1hX2J1ZmZlcnNbal0gPSBkbWFfcG9pbnRlcjsKKwkJdnhnZV9od19maWZvX3R4ZGxfYnVmZmVyX3NldChmaWZvX2h3LCBkdHIsIGorKywgZG1hX3BvaW50ZXIsCisJCQkJCWZyYWctPnNpemUpOworCQlmcmFnICs9IDE7CisJfQorCisJb2ZmbG9hZF90eXBlID0gdnhnZV9vZmZsb2FkX3R5cGUoc2tiKTsKKworCWlmIChvZmZsb2FkX3R5cGUgJiAoU0tCX0dTT19UQ1BWNCB8IFNLQl9HU09fVENQVjYpKSB7CisKKwkJaW50IG1zcyA9IHZ4Z2VfdGNwX21zcyhza2IpOworCQlpZiAobXNzKSB7CisJCQltYXhfbXNzID0gZGV2LT5tdHUgKyBFVEhfSExFTiAtCisJCQkJVlhHRV9IV19UQ1BJUF9IRUFERVJfTUFYX1NJWkU7CisJCQlpZiAobXNzID4gbWF4X21zcykKKwkJCQltc3MgPSBtYXhfbXNzOworCQkJdnhnZV9kZWJ1Z190eChWWEdFX1RSQUNFLAorCQkJCSIlczogJXM6JWQgbXNzID0gJWQiLAorCQkJCWRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fLCBtc3MpOworCQkJdnhnZV9od19maWZvX3R4ZGxfbXNzX3NldChkdHIsIG1zcyk7CisJCX0gZWxzZSB7CisJCQl2eGdlX2Fzc2VydChza2ItPmxlbiA8PQorCQkJCWRldi0+bXR1ICsgVlhHRV9IV19NQUNfSEVBREVSX01BWF9TSVpFKTsKKwkJCXZ4Z2VfYXNzZXJ0KDApOworCQkJZ290byBfZXhpdDE7CisJCX0KKwl9CisKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkKKwkJdnhnZV9od19maWZvX3R4ZGxfY2tzdW1fc2V0X2JpdHMoZHRyLAorCQkJCQlWWEdFX0hXX0ZJRk9fVFhEX1RYX0NLT19JUFY0X0VOIHwKKwkJCQkJVlhHRV9IV19GSUZPX1RYRF9UWF9DS09fVENQX0VOIHwKKwkJCQkJVlhHRV9IV19GSUZPX1RYRF9UWF9DS09fVURQX0VOKTsKKworCXZ4Z2VfaHdfZmlmb190eGRsX3Bvc3QoZmlmb19odywgZHRyKTsKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CisKKwlWWEdFX0NPTVBMRVRFX1ZQQVRIX1RYKGZpZm8pOworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQgIEV4aXRpbmcuLi4iLAorCQlkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJcmV0dXJuIDA7CisKK19leGl0MDoKKwl2eGdlX2RlYnVnX3R4KFZYR0VfVFJBQ0UsICIlczogcGNpX21hcF9wYWdlIGZhaWxlZCIsIGRldi0+bmFtZSk7CisKK19leGl0MToKKwlqID0gMDsKKwlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF07CisKKwlwY2lfdW5tYXBfc2luZ2xlKGZpZm8tPnBkZXYsIHR4ZGxfcHJpdi0+ZG1hX2J1ZmZlcnNbaisrXSwKKwkJCXNrYl9oZWFkbGVuKHNrYiksIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJZm9yICg7IGogPCBpOyBqKyspIHsKKwkJcGNpX3VubWFwX3BhZ2UoZmlmby0+cGRldiwgdHhkbF9wcml2LT5kbWFfYnVmZmVyc1tqXSwKKwkJCWZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlmcmFnICs9IDE7CisJfQorCisJdnhnZV9od19maWZvX3R4ZGxfZnJlZShmaWZvX2h3LCBkdHIpOworX2V4aXQyOgorCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaWZvLT50eF9sb2NrLCBmbGFncyk7CisJVlhHRV9DT01QTEVURV9WUEFUSF9UWChmaWZvKTsKKworCXJldHVybiAwOworfQorCisvKgorICogdnhnZV9yeF90ZXJtCisgKgorICogRnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgaHcgZnVuY3Rpb24gdG8gYWJvcnQgYWxsIG91dHN0YW5kaW5nIHJlY2VpdmUKKyAqIGRlc2NyaXB0b3JzLgorICovCitzdGF0aWMgdm9pZAordnhnZV9yeF90ZXJtKHZvaWQgKmR0cmgsIGVudW0gdnhnZV9od19yeGRfc3RhdGUgc3RhdGUsIHZvaWQgKnVzZXJkYXRhKQoreworCXN0cnVjdCB2eGdlX3JpbmcgKnJpbmcgPSAoc3RydWN0IHZ4Z2VfcmluZyAqKXVzZXJkYXRhOworCXN0cnVjdCB2eGdlX3J4X3ByaXYgKnJ4X3ByaXYgPQorCQl2eGdlX2h3X3JpbmdfcnhkX3ByaXZhdGVfZ2V0KGR0cmgpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiAlczolZCIsCisJCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCWlmIChzdGF0ZSAhPSBWWEdFX0hXX1JYRF9TVEFURV9QT1NURUQpCisJCXJldHVybjsKKworCXBjaV91bm1hcF9zaW5nbGUocmluZy0+cGRldiwgcnhfcHJpdi0+ZGF0YV9kbWEsCisJCXJ4X3ByaXYtPmRhdGFfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCWRldl9rZnJlZV9za2IocnhfcHJpdi0+c2tiKTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQgIEV4aXRpbmcuLi4iLAorCQlyaW5nLT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCisvKgorICogdnhnZV90eF90ZXJtCisgKgorICogRnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gYWJvcnQgYWxsIG91dHN0YW5kaW5nIHR4IGRlc2NyaXB0b3JzCisgKi8KK3N0YXRpYyB2b2lkCit2eGdlX3R4X3Rlcm0odm9pZCAqZHRyaCwgZW51bSB2eGdlX2h3X3R4ZGxfc3RhdGUgc3RhdGUsIHZvaWQgKnVzZXJkYXRhKQoreworCXN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8gPSAoc3RydWN0IHZ4Z2VfZmlmbyAqKXVzZXJkYXRhOworCXNrYl9mcmFnX3QgKmZyYWc7CisJaW50IGkgPSAwLCBqLCBmcmdfY250OworCXN0cnVjdCB2eGdlX3R4X3ByaXYgKnR4ZF9wcml2ID0gdnhnZV9od19maWZvX3R4ZGxfcHJpdmF0ZV9nZXQoZHRyaCk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4ZF9wcml2LT5za2I7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJaWYgKHN0YXRlICE9IFZYR0VfSFdfVFhETF9TVEFURV9QT1NURUQpCisJCXJldHVybjsKKworCS8qIGNoZWNrIHNrYiB2YWxpZGl0eSAqLworCXZ4Z2VfYXNzZXJ0KHNrYik7CisJZnJnX2NudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdOworCisJLyogIGZvciB1bmZyYWdtZW50ZWQgc2tiICovCisJcGNpX3VubWFwX3NpbmdsZShmaWZvLT5wZGV2LCB0eGRfcHJpdi0+ZG1hX2J1ZmZlcnNbaSsrXSwKKwkJc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisKKwlmb3IgKGogPSAwOyBqIDwgZnJnX2NudDsgaisrKSB7CisJCXBjaV91bm1hcF9wYWdlKGZpZm8tPnBkZXYsIHR4ZF9wcml2LT5kbWFfYnVmZmVyc1tpKytdLAorCQkJICAgICAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlmcmFnICs9IDE7CisJfQorCisJZGV2X2tmcmVlX3NrYihza2IpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworLyoqCisgKiB2eGdlX3NldF9tdWx0aWNhc3QKKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBFbnRyeSBwb2ludCBmb3IgbXVsdGljYXN0IGFkZHJlc3MgZW5hYmxlL2Rpc2FibGUKKyAqIFRoaXMgZnVuY3Rpb24gaXMgYSBkcml2ZXIgZW50cnkgcG9pbnQgd2hpY2ggZ2V0cyBjYWxsZWQgYnkgdGhlIGtlcm5lbAorICogd2hlbmV2ZXIgbXVsdGljYXN0IGFkZHJlc3NlcyBtdXN0IGJlIGVuYWJsZWQvZGlzYWJsZWQuIFRoaXMgYWxzbyBnZXRzCisgKiBjYWxsZWQgdG8gc2V0L3Jlc2V0IHByb21pc2N1b3VzIG1vZGUuIERlcGVuZGluZyBvbiB0aGUgZGVpdmNlIGZsYWcsIHdlCisgKiBkZXRlcm1pbmUsIGlmIG11bHRpY2FzdCBhZGRyZXNzIG11c3QgYmUgZW5hYmxlZCBvciBpZiBwcm9taXNjdW91cyBtb2RlCisgKiBpcyB0byBiZSBkaXNhYmxlZCBldGMuCisgKi8KK3N0YXRpYyB2b2lkIHZ4Z2Vfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCWludCBpLCBtY2FzdF9jbnQgPSAwOworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXY7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBtYWNJbmZvIG1hY19pbmZvOworCWludCB2cGF0aF9pZHggPSAwOworCXN0cnVjdCB2eGdlX21hY19hZGRycyAqbWFjX2VudHJ5OworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfaGVhZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSwgKm5leHQ7CisJdTggKm1hY19hZGRyZXNzID0gTlVMTDsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKil2ZGV2LT5kZXZoOworCisJaWYgKHVubGlrZWx5KCFpc192eGdlX2NhcmRfdXAodmRldikpKQorCQlyZXR1cm47CisKKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpICYmICghdmRldi0+YWxsX211bHRpX2ZsZykpIHsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJCXZ4Z2VfYXNzZXJ0KHZkZXYtPnZwYXRoc1tpXS5pc19vcGVuKTsKKwkJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZW5hYmxlKAorCQkJCQkJdmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJCQl2ZGV2LT5hbGxfbXVsdGlfZmxnID0gMTsKKwkJfQorCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpICYmICh2ZGV2LT5hbGxfbXVsdGlfZmxnKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQkJdnhnZV9hc3NlcnQodmRldi0+dnBhdGhzW2ldLmlzX29wZW4pOworCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9tY2FzdF9kaXNhYmxlKAorCQkJCQkJdmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJCQl2ZGV2LT5hbGxfbXVsdGlfZmxnID0gMTsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJImZhaWxlZCB0byAlcyBtdWx0aWNhc3QsIHN0YXR1cyAlZCIsCisJCQlkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJID8KKwkJCSJlbmFibGUiIDogImRpc2FibGUiLCBzdGF0dXMpOworCisJaWYgKCF2ZGV2LT5jb25maWcuYWRkcl9sZWFybl9lbikgeworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQkJCXZ4Z2VfYXNzZXJ0KHZkZXYtPnZwYXRoc1tpXS5pc19vcGVuKTsKKwkJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX3Byb21pc2NfZW5hYmxlKAorCQkJCQkJdmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQkJCXZ4Z2VfYXNzZXJ0KHZkZXYtPnZwYXRoc1tpXS5pc19vcGVuKTsKKwkJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX3Byb21pc2NfZGlzYWJsZSgKKwkJCQkJCXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQkJfQorCQl9CisJfQorCisJbWVtc2V0KCZtYWNfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBtYWNJbmZvKSk7CisJLyogVXBkYXRlIGluZGl2aWR1YWwgTV9DQVNUIGFkZHJlc3MgbGlzdCAqLworCWlmICgoIXZkZXYtPmFsbF9tdWx0aV9mbGcpICYmIGRldi0+bWNfY291bnQpIHsKKworCQltY2FzdF9jbnQgPSB2ZGV2LT52cGF0aHNbMF0ubWNhc3RfYWRkcl9jbnQ7CisJCWxpc3RfaGVhZCA9ICZ2ZGV2LT52cGF0aHNbMF0ubWFjX2FkZHJfbGlzdDsKKwkJaWYgKChkZXYtPm1jX2NvdW50ICsKKwkJCSh2ZGV2LT52cGF0aHNbMF0ubWFjX2FkZHJfY250IC0gbWNhc3RfY250KSkgPgorCQkJCXZkZXYtPnZwYXRoc1swXS5tYXhfbWFjX2FkZHJfY250KQorCQkJZ290byBfc2V0X2FsbF9tY2FzdDsKKworCQkvKiBEZWxldGUgcHJldmlvdXMgTUMncyAqLworCQlmb3IgKGkgPSAwOyBpIDwgbWNhc3RfY250OyBpKyspIHsKKwkJCWlmICghbGlzdF9lbXB0eShsaXN0X2hlYWQpKQorCQkJCW1hY19lbnRyeSA9IChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKikKKwkJCQkJbGlzdF9maXJzdF9lbnRyeShsaXN0X2hlYWQsCisJCQkJCQlzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMsCisJCQkJCQlpdGVtKTsKKworCQkJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCBuZXh0LCBsaXN0X2hlYWQpIHsKKworCQkJCW1hY19lbnRyeSA9IChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKikgZW50cnk7CisJCQkJLyogQ29weSB0aGUgbWFjIGFkZHJlc3MgdG8gZGVsZXRlICovCisJCQkJbWFjX2FkZHJlc3MgPSAodTggKikmbWFjX2VudHJ5LT5tYWNhZGRyOworCQkJCW1lbWNweShtYWNfaW5mby5tYWNhZGRyLCBtYWNfYWRkcmVzcywgRVRIX0FMRU4pOworCisJCQkJLyogSXMgdGhpcyBhIG11bHRpY2FzdCBhZGRyZXNzICovCisJCQkJaWYgKDB4MDEgJiBtYWNfaW5mby5tYWNhZGRyWzBdKSB7CisJCQkJCWZvciAodnBhdGhfaWR4ID0gMDsgdnBhdGhfaWR4IDwKKwkJCQkJCXZkZXYtPm5vX29mX3ZwYXRoOworCQkJCQkJdnBhdGhfaWR4KyspIHsKKwkJCQkJCW1hY19pbmZvLnZwYXRoX25vID0gdnBhdGhfaWR4OworCQkJCQkJc3RhdHVzID0gdnhnZV9kZWxfbWFjX2FkZHIoCisJCQkJCQkJCXZkZXYsCisJCQkJCQkJCSZtYWNfaW5mbyk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBBZGQgbmV3IG9uZXMgKi8KKwkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBpIDwgZGV2LT5tY19jb3VudDsKKwkJCWkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisKKwkJCW1lbWNweShtYWNfaW5mby5tYWNhZGRyLCBtY2xpc3QtPmRtaV9hZGRyLCBFVEhfQUxFTik7CisJCQlmb3IgKHZwYXRoX2lkeCA9IDA7IHZwYXRoX2lkeCA8IHZkZXYtPm5vX29mX3ZwYXRoOworCQkJCQl2cGF0aF9pZHgrKykgeworCQkJCW1hY19pbmZvLnZwYXRoX25vID0gdnBhdGhfaWR4OworCQkJCW1hY19pbmZvLnN0YXRlID0gVlhHRV9MTF9NQUNfQUREUl9JTl9EQV9UQUJMRTsKKwkJCQlzdGF0dXMgPSB2eGdlX2FkZF9tYWNfYWRkcih2ZGV2LCAmbWFjX2luZm8pOworCQkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCQkiJXM6JWQgU2V0dGluZyBpbmRpdmlkdWFsIgorCQkJCQkJIm11bHRpY2FzdCBhZGRyZXNzIGZhaWxlZCIsCisJCQkJCQlfX2Z1bmNfXywgX19MSU5FX18pOworCQkJCQlnb3RvIF9zZXRfYWxsX21jYXN0OworCQkJCX0KKwkJCX0KKwkJfQorCisJCXJldHVybjsKK19zZXRfYWxsX21jYXN0OgorCQltY2FzdF9jbnQgPSB2ZGV2LT52cGF0aHNbMF0ubWNhc3RfYWRkcl9jbnQ7CisJCS8qIERlbGV0ZSBwcmV2aW91cyBNQydzICovCisJCWZvciAoaSA9IDA7IGkgPCBtY2FzdF9jbnQ7IGkrKykgeworCisJCQlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIG5leHQsIGxpc3RfaGVhZCkgeworCisJCQkJbWFjX2VudHJ5ID0gKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKSBlbnRyeTsKKwkJCQkvKiBDb3B5IHRoZSBtYWMgYWRkcmVzcyB0byBkZWxldGUgKi8KKwkJCQltYWNfYWRkcmVzcyA9ICh1OCAqKSZtYWNfZW50cnktPm1hY2FkZHI7CisJCQkJbWVtY3B5KG1hY19pbmZvLm1hY2FkZHIsIG1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisKKwkJCQkvKiBJcyB0aGlzIGEgbXVsdGljYXN0IGFkZHJlc3MgKi8KKwkJCQlpZiAoMHgwMSAmIG1hY19pbmZvLm1hY2FkZHJbMF0pCisJCQkJCWJyZWFrOworCQkJfQorCisJCQlmb3IgKHZwYXRoX2lkeCA9IDA7IHZwYXRoX2lkeCA8IHZkZXYtPm5vX29mX3ZwYXRoOworCQkJCQl2cGF0aF9pZHgrKykgeworCQkJCW1hY19pbmZvLnZwYXRoX25vID0gdnBhdGhfaWR4OworCQkJCXN0YXR1cyA9IHZ4Z2VfZGVsX21hY19hZGRyKHZkZXYsICZtYWNfaW5mbyk7CisJCQl9CisJCX0KKworCQkvKiBFbmFibGUgYWxsIG11bHRpY2FzdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQkJdnhnZV9hc3NlcnQodmRldi0+dnBhdGhzW2ldLmlzX29wZW4pOworCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9tY2FzdF9lbmFibGUoCisJCQkJCQl2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJIiVzOiVkIEVuYWJsaW5nIGFsbCBtdWx0aWNhc3RzIGZhaWxlZCIsCisJCQkJCSBfX2Z1bmNfXywgX19MSU5FX18pOworCQkJfQorCQkJdmRldi0+YWxsX211bHRpX2ZsZyA9IDE7CisJCX0KKwkJZGV2LT5mbGFncyB8PSBJRkZfQUxMTVVMVEk7CisJfQorCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworLyoqCisgKiB2eGdlX3NldF9tYWNfYWRkcgorICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFVwZGF0ZSBlbnRyeSAiMCIgKGRlZmF1bHQgTUFDIGFkZHIpCisgKi8KK3N0YXRpYyBpbnQgdnhnZV9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXY7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCBtYWNJbmZvIG1hY19pbmZvX25ldywgbWFjX2luZm9fb2xkOworCWludCB2cGF0aF9pZHggPSAwOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCWhsZGV2ID0gdmRldi0+ZGV2aDsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoJm1hY19pbmZvX25ldywgMCwgc2l6ZW9mKHN0cnVjdCBtYWNJbmZvKSk7CisJbWVtc2V0KCZtYWNfaW5mb19vbGQsIDAsIHNpemVvZihzdHJ1Y3QgbWFjSW5mbykpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiVkICBFeGl0aW5nLi4uIiwKKwkJX19mdW5jX18sIF9fTElORV9fKTsKKworCS8qIEdldCB0aGUgb2xkIGFkZHJlc3MgKi8KKwltZW1jcHkobWFjX2luZm9fb2xkLm1hY2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOworCisJLyogQ29weSB0aGUgbmV3IGFkZHJlc3MgKi8KKwltZW1jcHkobWFjX2luZm9fbmV3Lm1hY2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCisJLyogRmlyc3QgZGVsZXRlIHRoZSBvbGQgbWFjIGFkZHJlc3MgZnJvbSBhbGwgdGhlIHZwYXRocworCWFzIHdlIGNhbid0IHNwZWNpZnkgdGhlIGluZGV4IHdoaWxlIGFkZGluZyBuZXcgbWFjIGFkZHJlc3MgKi8KKwlmb3IgKHZwYXRoX2lkeCA9IDA7IHZwYXRoX2lkeCA8IHZkZXYtPm5vX29mX3ZwYXRoOyB2cGF0aF9pZHgrKykgeworCQlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGggPSAmdmRldi0+dnBhdGhzW3ZwYXRoX2lkeF07CisJCWlmICghdnBhdGgtPmlzX29wZW4pIHsKKwkJCS8qIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoaXMgaW50ZXJmYWNlIGlzIGFkZGVkL3JlbW92ZWQKKwkJCXRvIHRoZSBib25kaW5nIGludGVyZmFjZS4gRGVsZXRlIHRoaXMgc3RhdGlvbiBhZGRyZXNzCisJCQlmcm9tIHRoZSBsaW5rZWQgbGlzdCAqLworCQkJdnhnZV9tYWNfbGlzdF9kZWwodnBhdGgsICZtYWNfaW5mb19vbGQpOworCisJCQkvKiBBZGQgdGhpcyBuZXcgYWRkcmVzcyB0byB0aGUgbGlua2VkIGxpc3QKKwkJCWZvciBsYXRlciByZXN0b3JpbmcgKi8KKwkJCXZ4Z2VfbWFjX2xpc3RfYWRkKHZwYXRoLCAmbWFjX2luZm9fbmV3KTsKKworCQkJY29udGludWU7CisJCX0KKwkJLyogRGVsZXRlIHRoZSBzdGF0aW9uIGFkZHJlc3MgKi8KKwkJbWFjX2luZm9fb2xkLnZwYXRoX25vID0gdnBhdGhfaWR4OworCQlzdGF0dXMgPSB2eGdlX2RlbF9tYWNfYWRkcih2ZGV2LCAmbWFjX2luZm9fb2xkKTsKKwl9CisKKwlpZiAodW5saWtlbHkoIWlzX3Z4Z2VfY2FyZF91cCh2ZGV2KSkpIHsKKwkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCQlyZXR1cm4gVlhHRV9IV19PSzsKKwl9CisKKwkvKiBTZXQgdGhpcyBtYWMgYWRkcmVzcyB0byBhbGwgdGhlIHZwYXRocyAqLworCWZvciAodnBhdGhfaWR4ID0gMDsgdnBhdGhfaWR4IDwgdmRldi0+bm9fb2ZfdnBhdGg7IHZwYXRoX2lkeCsrKSB7CisJCW1hY19pbmZvX25ldy52cGF0aF9ubyA9IHZwYXRoX2lkeDsKKwkJbWFjX2luZm9fbmV3LnN0YXRlID0gVlhHRV9MTF9NQUNfQUREUl9JTl9EQV9UQUJMRTsKKwkJc3RhdHVzID0gdnhnZV9hZGRfbWFjX2FkZHIodmRldiwgJm1hY19pbmZvX25ldyk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX3ZwYXRoX2ludHJfZW5hYmxlCisgKiBAdmRldjogcG9pbnRlciB0byB2ZGV2CisgKiBAdnBfaWQ6IHZwYXRoIGZvciB3aGljaCB0byBlbmFibGUgdGhlIGludGVycnVwdHMKKyAqCisgKiBFbmFibGVzIHRoZSBpbnRlcnJ1cHRzIGZvciB0aGUgdnBhdGgKKyovCit2b2lkIHZ4Z2VfdnBhdGhfaW50cl9lbmFibGUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIGludCB2cF9pZCkKK3sKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGggPSAmdmRldi0+dnBhdGhzW3ZwX2lkXTsKKwlpbnQgbXNpeF9pZCwgYWxhcm1fbXNpeF9pZDsKKwlpbnQgdGltX21zaXhfaWRbNF0gPSB7WzAgLi4uM10gPSAwfTsKKworCXZ4Z2VfaHdfdnBhdGhfaW50cl9lbmFibGUodnBhdGgtPmhhbmRsZSk7CisKKwlpZiAodmRldi0+Y29uZmlnLmludHJfdHlwZSA9PSBJTlRBKQorCQl2eGdlX2h3X3ZwYXRoX2ludGFfdW5tYXNrX3R4X3J4KHZwYXRoLT5oYW5kbGUpOworCWVsc2UgeworCQltc2l4X2lkID0gdnBfaWQgKiBWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFOworCQlhbGFybV9tc2l4X2lkID0KKwkJCVZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkUgKiB2ZGV2LT5ub19vZl92cGF0aCAtIDI7CisKKwkJdGltX21zaXhfaWRbMF0gPSBtc2l4X2lkOworCQl0aW1fbXNpeF9pZFsxXSA9IG1zaXhfaWQgKyAxOworCQl2eGdlX2h3X3ZwYXRoX21zaXhfc2V0KHZwYXRoLT5oYW5kbGUsIHRpbV9tc2l4X2lkLAorCQkJYWxhcm1fbXNpeF9pZCk7CisKKwkJdnhnZV9od192cGF0aF9tc2l4X3VubWFzayh2cGF0aC0+aGFuZGxlLCBtc2l4X2lkKTsKKwkJdnhnZV9od192cGF0aF9tc2l4X3VubWFzayh2cGF0aC0+aGFuZGxlLCBtc2l4X2lkICsgMSk7CisKKwkJLyogZW5hYmxlIHRoZSBhbGFybSB2ZWN0b3IgKi8KKwkJdnhnZV9od192cGF0aF9tc2l4X3VubWFzayh2cGF0aC0+aGFuZGxlLCBhbGFybV9tc2l4X2lkKTsKKwl9Cit9CisKKy8qCisgKiB2eGdlX3ZwYXRoX2ludHJfZGlzYWJsZQorICogQHZkZXY6IHBvaW50ZXIgdG8gdmRldgorICogQHZwX2lkOiB2cGF0aCBmb3Igd2hpY2ggdG8gZGlzYWJsZSB0aGUgaW50ZXJydXB0cworICoKKyAqIERpc2FibGVzIHRoZSBpbnRlcnJ1cHRzIGZvciB0aGUgdnBhdGgKKyovCit2b2lkIHZ4Z2VfdnBhdGhfaW50cl9kaXNhYmxlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2LCBpbnQgdnBfaWQpCit7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoID0gJnZkZXYtPnZwYXRoc1t2cF9pZF07CisJaW50IG1zaXhfaWQ7CisKKwl2eGdlX2h3X3ZwYXRoX2ludHJfZGlzYWJsZSh2cGF0aC0+aGFuZGxlKTsKKworCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IElOVEEpCisJCXZ4Z2VfaHdfdnBhdGhfaW50YV9tYXNrX3R4X3J4KHZwYXRoLT5oYW5kbGUpOworCWVsc2UgeworCQltc2l4X2lkID0gdnBfaWQgKiBWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFOworCQl2eGdlX2h3X3ZwYXRoX21zaXhfbWFzayh2cGF0aC0+aGFuZGxlLCBtc2l4X2lkKTsKKwkJdnhnZV9od192cGF0aF9tc2l4X21hc2sodnBhdGgtPmhhbmRsZSwgbXNpeF9pZCArIDEpOworCisJCS8qIGRpc2FibGUgdGhlIGFsYXJtIHZlY3RvciAqLworCQltc2l4X2lkID0gVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRSAqIHZkZXYtPm5vX29mX3ZwYXRoIC0gMjsKKwkJdnhnZV9od192cGF0aF9tc2l4X21hc2sodnBhdGgtPmhhbmRsZSwgbXNpeF9pZCk7CisJfQorfQorCisvKgorICogdnhnZV9yZXNldF92cGF0aAorICogQHZkZXY6IHBvaW50ZXIgdG8gdmRldgorICogQHZwX2lkOiB2cGF0aCB0byByZXNldAorICoKKyAqIFJlc2V0cyB0aGUgdnBhdGgKKyovCitzdGF0aWMgaW50IHZ4Z2VfcmVzZXRfdnBhdGgoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIGludCB2cF9pZCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJaW50IHJldCA9IDA7CisKKwkvKiBjaGVjayBpZiBkZXZpY2UgaXMgZG93biBhbHJlYWR5ICovCisJaWYgKHVubGlrZWx5KCFpc192eGdlX2NhcmRfdXAodmRldikpKQorCQlyZXR1cm4gMDsKKworCS8qIGlzIGRldmljZSByZXNldCBhbHJlYWR5IHNjaGVkdWxlZCAqLworCWlmICh0ZXN0X2JpdChfX1ZYR0VfU1RBVEVfUkVTRVRfQ0FSRCwgJnZkZXYtPnN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodmRldi0+dnBhdGhzW3ZwX2lkXS5oYW5kbGUpIHsKKwkJaWYgKHZ4Z2VfaHdfdnBhdGhfcmVzZXQodmRldi0+dnBhdGhzW3ZwX2lkXS5oYW5kbGUpCisJCQkJPT0gVlhHRV9IV19PSykgeworCQkJaWYgKGlzX3Z4Z2VfY2FyZF91cCh2ZGV2KSAmJgorCQkJCXZ4Z2VfaHdfdnBhdGhfcmVjb3Zlcl9mcm9tX3Jlc2V0KAorCQkJCQl2ZGV2LT52cGF0aHNbdnBfaWRdLmhhbmRsZSkKKwkJCQkJIT0gVlhHRV9IV19PSykgeworCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJInZ4Z2VfaHdfdnBhdGhfcmVjb3Zlcl9mcm9tX3Jlc2V0IgorCQkJCQkiZmFpbGVkIGZvciB2cGF0aDolZCIsIHZwX2lkKTsKKwkJCQlyZXR1cm4gc3RhdHVzOworCQkJfQorCQl9IGVsc2UgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSJ2eGdlX2h3X3ZwYXRoX3Jlc2V0IGZhaWxlZCBmb3IiCisJCQkJInZwYXRoOiVkIiwgdnBfaWQpOworCQkJCXJldHVybiBzdGF0dXM7CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIFZYR0VfSFdfRkFJTDsKKworCXZ4Z2VfcmVzdG9yZV92cGF0aF9tYWNfYWRkcigmdmRldi0+dnBhdGhzW3ZwX2lkXSk7CisJdnhnZV9yZXN0b3JlX3ZwYXRoX3ZpZF90YWJsZSgmdmRldi0+dnBhdGhzW3ZwX2lkXSk7CisKKwkvKiBFbmFibGUgYWxsIGJyb2FkY2FzdCAqLworCXZ4Z2VfaHdfdnBhdGhfYmNhc3RfZW5hYmxlKHZkZXYtPnZwYXRoc1t2cF9pZF0uaGFuZGxlKTsKKworCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0cyAqLworCXZ4Z2VfdnBhdGhfaW50cl9lbmFibGUodmRldiwgdnBfaWQpOworCisJc21wX3dtYigpOworCisJLyogRW5hYmxlIHRoZSBmbG93IG9mIHRyYWZmaWMgdGhyb3VnaCB0aGUgdnBhdGggKi8KKwl2eGdlX2h3X3ZwYXRoX2VuYWJsZSh2ZGV2LT52cGF0aHNbdnBfaWRdLmhhbmRsZSk7CisKKwlzbXBfd21iKCk7CisJdnhnZV9od192cGF0aF9yeF9kb29yYmVsbF9pbml0KHZkZXYtPnZwYXRoc1t2cF9pZF0uaGFuZGxlKTsKKwl2ZGV2LT52cGF0aHNbdnBfaWRdLnJpbmcubGFzdF9zdGF0dXMgPSBWWEdFX0hXX09LOworCisJLyogVnBhdGggcmVzZXQgZG9uZSAqLworCWNsZWFyX2JpdCh2cF9pZCwgJnZkZXYtPnZwX3Jlc2V0KTsKKworCS8qIFN0YXJ0IHRoZSB2cGF0aCBxdWV1ZSAqLworCXZ4Z2Vfd2FrZV90eF9xdWV1ZSgmdmRldi0+dnBhdGhzW3ZwX2lkXS5maWZvLCBOVUxMKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZG9fdnhnZV9yZXNldChzdHJ1Y3QgdnhnZWRldiAqdmRldiwgaW50IGV2ZW50KQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCWludCByZXQgPSAwLCB2cF9pZCwgaTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlpZiAoKGV2ZW50ID09IFZYR0VfTExfRlVMTF9SRVNFVCkgfHwgKGV2ZW50ID09IFZYR0VfTExfU1RBUlRfUkVTRVQpKSB7CisJCS8qIGNoZWNrIGlmIGRldmljZSBpcyBkb3duIGFscmVhZHkgKi8KKwkJaWYgKHVubGlrZWx5KCFpc192eGdlX2NhcmRfdXAodmRldikpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogaXMgcmVzZXQgYWxyZWFkeSBzY2hlZHVsZWQgKi8KKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoX19WWEdFX1NUQVRFX1JFU0VUX0NBUkQsICZ2ZGV2LT5zdGF0ZSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZXZlbnQgPT0gVlhHRV9MTF9GVUxMX1JFU0VUKSB7CisJCS8qIHdhaXQgZm9yIGFsbCB0aGUgdnBhdGggcmVzZXQgdG8gY29tcGxldGUgKi8KKwkJZm9yICh2cF9pZCA9IDA7IHZwX2lkIDwgdmRldi0+bm9fb2ZfdnBhdGg7IHZwX2lkKyspIHsKKwkJCXdoaWxlICh0ZXN0X2JpdCh2cF9pZCwgJnZkZXYtPnZwX3Jlc2V0KSkKKwkJCQltc2xlZXAoNTApOworCQl9CisKKwkJLyogaWYgZXhlY3V0aW9uIG1vZGUgaXMgc2V0IHRvIGRlYnVnLCBkb24ndCByZXNldCB0aGUgYWRhcHRlciAqLworCQlpZiAodW5saWtlbHkodmRldi0+ZXhlY19tb2RlKSkgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogZXhlY3V0aW9uIG1vZGUgaXMgZGVidWcsIHJldHVybmluZy4uIiwKKwkJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJY2xlYXJfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLCAmdmRldi0+c3RhdGUpOworCQl2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHZkZXYpOworCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWlmIChldmVudCA9PSBWWEdFX0xMX0ZVTExfUkVTRVQpIHsKKwkJdnhnZV9od19kZXZpY2VfaW50cl9kaXNhYmxlKHZkZXYtPmRldmgpOworCisJCXN3aXRjaCAodmRldi0+Y3JpY19lcnJfZXZlbnQpIHsKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX1VOS05PV046CisJCQl2eGdlX3N0b3BfYWxsX3R4X3F1ZXVlKHZkZXYpOworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSJmYXRhbDogJXM6IERpc2FibGluZyBkZXZpY2UgZHVlIHRvIgorCQkJCSJ1bmtub3duIGVycm9yIiwKKwkJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWdvdG8gb3V0OworCQljYXNlIFZYR0VfSFdfRVZFTlRfUkVTRVRfU1RBUlQ6CisJCQlicmVhazsKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX1JFU0VUX0NPTVBMRVRFOgorCQljYXNlIFZYR0VfSFdfRVZFTlRfTElOS19ET1dOOgorCQljYXNlIFZYR0VfSFdfRVZFTlRfTElOS19VUDoKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQ6CisJCWNhc2UgVlhHRV9IV19FVkVOVF9FQ0NFUlI6CisJCWNhc2UgVlhHRV9IV19FVkVOVF9NUlBDSU1fRUNDRVJSOgorCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBvdXQ7CisJCWNhc2UgVlhHRV9IV19FVkVOVF9GSUZPX0VSUjoKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX1ZQQVRIX0VSUjoKKwkJCWJyZWFrOworCQljYXNlIFZYR0VfSFdfRVZFTlRfQ1JJVElDQUxfRVJSOgorCQkJdnhnZV9zdG9wX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiZmF0YWw6ICVzOiBEaXNhYmxpbmcgZGV2aWNlIGR1ZSB0byIKKwkJCQkic2VyaW91cyBlcnJvciIsCisJCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCQkvKiBTT1Agb3IgZGV2aWNlIHJlc2V0IHJlcXVpcmVkICovCisJCQkvKiBUaGlzIGV2ZW50IGlzIG5vdCBjdXJyZW50bHkgdXNlZCAqLworCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBvdXQ7CisJCWNhc2UgVlhHRV9IV19FVkVOVF9TRVJSOgorCQkJdnhnZV9zdG9wX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiZmF0YWw6ICVzOiBEaXNhYmxpbmcgZGV2aWNlIGR1ZSB0byIKKwkJCQkic2VyaW91cyBlcnJvciIsCisJCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCQlyZXQgPSAtRVBFUk07CisJCQlnb3RvIG91dDsKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX1NSUENJTV9TRVJSOgorCQljYXNlIFZYR0VfSFdfRVZFTlRfTVJQQ0lNX1NFUlI6CisJCQlyZXQgPSAtRVBFUk07CisJCQlnb3RvIG91dDsKKwkJY2FzZSBWWEdFX0hXX0VWRU5UX1NMT1RfRlJFRVpFOgorCQkJdnhnZV9zdG9wX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiZmF0YWw6ICVzOiBEaXNhYmxpbmcgZGV2aWNlIGR1ZSB0byIKKwkJCQkic2xvdCBmcmVlemUiLAorCQkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBvdXQ7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKworCQl9CisJfQorCisJaWYgKChldmVudCA9PSBWWEdFX0xMX0ZVTExfUkVTRVQpIHx8IChldmVudCA9PSBWWEdFX0xMX1NUQVJUX1JFU0VUKSkKKwkJdnhnZV9zdG9wX2FsbF90eF9xdWV1ZSh2ZGV2KTsKKworCWlmIChldmVudCA9PSBWWEdFX0xMX0ZVTExfUkVTRVQpIHsKKwkJc3RhdHVzID0gdnhnZV9yZXNldF9hbGxfdnBhdGhzKHZkZXYpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiZmF0YWw6ICVzOiBjYW4gbm90IHJlc2V0IHZwYXRocyIsCisJCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCQlyZXQgPSAtRVBFUk07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChldmVudCA9PSBWWEdFX0xMX0NPTVBMX1JFU0VUKSB7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQkJaWYgKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpIHsKKwkJCQlpZiAodnhnZV9od192cGF0aF9yZWNvdmVyX2Zyb21fcmVzZXQoCisJCQkJCXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpCisJCQkJCQkhPSBWWEdFX0hXX09LKSB7CisJCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJCSJ2eGdlX2h3X3ZwYXRoX3JlY292ZXJfIgorCQkJCQkJImZyb21fcmVzZXQgZmFpbGVkIGZvciB2cGF0aDogIgorCQkJCQkJIiVkIiwgaSk7CisJCQkJCXJldCA9IC1FUEVSTTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJInZ4Z2VfaHdfdnBhdGhfcmVzZXQgZmFpbGVkIGZvciAiCisJCQkJCQkidnBhdGg6JWQiLCBpKTsKKwkJCQkJcmV0ID0gLUVQRVJNOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJfQorCisJaWYgKChldmVudCA9PSBWWEdFX0xMX0ZVTExfUkVTRVQpIHx8IChldmVudCA9PSBWWEdFX0xMX0NPTVBMX1JFU0VUKSkgeworCQkvKiBSZXByb2dyYW0gdGhlIERBIHRhYmxlIHdpdGggcG9wdWxhdGVkIG1hYyBhZGRyZXNzZXMgKi8KKwkJZm9yICh2cF9pZCA9IDA7IHZwX2lkIDwgdmRldi0+bm9fb2ZfdnBhdGg7IHZwX2lkKyspIHsKKwkJCXZ4Z2VfcmVzdG9yZV92cGF0aF9tYWNfYWRkcigmdmRldi0+dnBhdGhzW3ZwX2lkXSk7CisJCQl2eGdlX3Jlc3RvcmVfdnBhdGhfdmlkX3RhYmxlKCZ2ZGV2LT52cGF0aHNbdnBfaWRdKTsKKwkJfQorCisJCS8qIGVuYWJsZSB2cGF0aCBpbnRlcnJ1cHRzICovCisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQkJdnhnZV92cGF0aF9pbnRyX2VuYWJsZSh2ZGV2LCBpKTsKKworCQl2eGdlX2h3X2RldmljZV9pbnRyX2VuYWJsZSh2ZGV2LT5kZXZoKTsKKworCQlzbXBfd21iKCk7CisKKwkJLyogSW5kaWNhdGUgY2FyZCB1cCAqLworCQlzZXRfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLCAmdmRldi0+c3RhdGUpOworCisJCS8qIEdldCB0aGUgdHJhZmZpYyB0byBmbG93IHRocm91Z2ggdGhlIHZwYXRocyAqLworCQlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQkJdnhnZV9od192cGF0aF9lbmFibGUodmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJCQlzbXBfd21iKCk7CisJCQl2eGdlX2h3X3ZwYXRoX3J4X2Rvb3JiZWxsX2luaXQodmRldi0+dnBhdGhzW2ldLmhhbmRsZSk7CisJCX0KKworCQl2eGdlX3dha2VfYWxsX3R4X3F1ZXVlKHZkZXYpOworCX0KKworb3V0OgorCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwkvKiBJbmRpY2F0ZSByZXNldCBkb25lICovCisJaWYgKChldmVudCA9PSBWWEdFX0xMX0ZVTExfUkVTRVQpIHx8IChldmVudCA9PSBWWEdFX0xMX0NPTVBMX1JFU0VUKSkKKwkJY2xlYXJfYml0KF9fVlhHRV9TVEFURV9SRVNFVF9DQVJELCAmdmRldi0+c3RhdGUpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB2eGdlX3Jlc2V0CisgKiBAdmRldjogcG9pbnRlciB0byBsbCBkZXZpY2UKKyAqCisgKiBkcml2ZXIgbWF5IHJlc2V0IHRoZSBjaGlwIG9uIGV2ZW50cyBvZiBzZXJyLCBlY2NlcnIsIGV0YworICovCitpbnQgdnhnZV9yZXNldChzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlkb192eGdlX3Jlc2V0KHZkZXYsIFZYR0VfTExfRlVMTF9SRVNFVCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnhnZV9wb2xsIC0gUmVjZWl2ZSBoYW5kbGVyIHdoZW4gUmVjZWl2ZSBQb2xsaW5nIGlzIHVzZWQuCisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgorICogQGJ1ZGdldDogTnVtYmVyIG9mIHBhY2tldHMgYnVkZ2V0ZWQgdG8gYmUgcHJvY2Vzc2VkIGluIHRoaXMgaXRlcmF0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29tZXMgaW50byBwaWN0dXJlIG9ubHkgaWYgUmVjZWl2ZSBzaWRlIGlzIGJlaW5nIGhhbmRsZWQKKyAqIHRocm91Z2ggcG9sbGluZyAoY2FsbGVkIE5BUEkgaW4gbGludXgpLiBJdCBtb3N0bHkgZG9lcyB3aGF0IHRoZSBub3JtYWwKKyAqIFJ4IGludGVycnVwdCBoYW5kbGVyIGRvZXMgaW4gdGVybXMgb2YgZGVzY3JpcHRvciBhbmQgcGFja2V0IHByb2Nlc3NpbmcKKyAqIGJ1dCBub3QgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuIEFsc28gaXQgd2lsbCBwcm9jZXNzIGEgc3BlY2lmaWVkIG51bWJlcgorICogb2YgcGFja2V0cyBhdCBtb3N0IGluIG9uZSBpdGVyYXRpb24uIFRoaXMgdmFsdWUgaXMgcGFzc2VkIGRvd24gYnkgdGhlCisgKiBrZXJuZWwgYXMgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50ICdidWRnZXQnLgorICovCitzdGF0aWMgaW50IHZ4Z2VfcG9sbF9tc2l4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nID0KKwkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCB2eGdlX3JpbmcsIG5hcGkpOworCWludCBidWRnZXRfb3JnID0gYnVkZ2V0OworCXJpbmctPmJ1ZGdldCA9IGJ1ZGdldDsKKworCXZ4Z2VfaHdfdnBhdGhfcG9sbF9yeChyaW5nLT5oYW5kbGUpOworCisJaWYgKHJpbmctPnBrdHNfcHJvY2Vzc2VkIDwgYnVkZ2V0X29yZykgeworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQkvKiBSZSBlbmFibGUgdGhlIFJ4IGludGVycnVwdHMgZm9yIHRoZSB2cGF0aCAqLworCQl2eGdlX2h3X2NoYW5uZWxfbXNpeF91bm1hc2soCisJCQkJKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqKXJpbmctPmhhbmRsZSwKKwkJCQlyaW5nLT5yeF92ZWN0b3Jfbm8pOworCX0KKworCXJldHVybiByaW5nLT5wa3RzX3Byb2Nlc3NlZDsKK30KKworc3RhdGljIGludCB2eGdlX3BvbGxfaW50YShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IHZ4Z2VkZXYsIG5hcGkpOworCWludCBwa3RzX3Byb2Nlc3NlZCA9IDA7CisJaW50IGk7CisJaW50IGJ1ZGdldF9vcmcgPSBidWRnZXQ7CisJc3RydWN0IHZ4Z2VfcmluZyAqcmluZzsKKworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKikKKwkJcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJcmluZyA9ICZ2ZGV2LT52cGF0aHNbaV0ucmluZzsKKwkJcmluZy0+YnVkZ2V0ID0gYnVkZ2V0OworCQl2eGdlX2h3X3ZwYXRoX3BvbGxfcngocmluZy0+aGFuZGxlKTsKKwkJcGt0c19wcm9jZXNzZWQgKz0gcmluZy0+cGt0c19wcm9jZXNzZWQ7CisJCWJ1ZGdldCAtPSByaW5nLT5wa3RzX3Byb2Nlc3NlZDsKKwkJaWYgKGJ1ZGdldCA8PSAwKQorCQkJYnJlYWs7CisJfQorCisJVlhHRV9DT01QTEVURV9BTExfVFgodmRldik7CisKKwlpZiAocGt0c19wcm9jZXNzZWQgPCBidWRnZXRfb3JnKSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCS8qIFJlIGVuYWJsZSB0aGUgUnggaW50ZXJydXB0cyBmb3IgdGhlIHJpbmcgKi8KKwkJdnhnZV9od19kZXZpY2VfdW5tYXNrX2FsbChobGRldik7CisJCXZ4Z2VfaHdfZGV2aWNlX2ZsdXNoX2lvKGhsZGV2KTsKKwl9CisKKwlyZXR1cm4gcGt0c19wcm9jZXNzZWQ7Cit9CisKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorLyoqCisgKiB2eGdlX25ldHBvbGwgLSBuZXRwb2xsIGV2ZW50IGhhbmRsZXIgZW50cnkgcG9pbnQKKyAqIEBkZXYgOiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgorICogRGVzY3JpcHRpb246CisgKiAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgdXBwZXIgbGF5ZXIgdG8gY2hlY2sgZm9yIGV2ZW50cyBvbiB0aGUKKyAqIGludGVyZmFjZSBpbiBzaXR1YXRpb25zIHdoZXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLiBJdCBpcyB1c2VkIGZvcgorICogc3BlY2lmaWMgaW4ta2VybmVsIG5ldHdvcmtpbmcgdGFza3MsIHN1Y2ggYXMgcmVtb3RlIGNvbnNvbGVzIGFuZCBrZXJuZWwKKyAqIGRlYnVnZ2luZyBvdmVyIHRoZSBuZXR3b3JrIChleGFtcGxlIG5ldGR1bXAgaW4gUmVkSGF0KS4KKyAqLworc3RhdGljIHZvaWQgdnhnZV9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldjsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKworCXZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCWhsZGV2ID0gKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKXBjaV9nZXRfZHJ2ZGF0YSh2ZGV2LT5wZGV2KTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZSh2ZGV2LT5wZGV2KSkKKwkJcmV0dXJuOworCisJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCXZ4Z2VfaHdfZGV2aWNlX2NsZWFyX3R4X3J4KGhsZGV2KTsKKworCXZ4Z2VfaHdfZGV2aWNlX2NsZWFyX3R4X3J4KGhsZGV2KTsKKwlWWEdFX0NPTVBMRVRFX0FMTF9SWCh2ZGV2KTsKKwlWWEdFX0NPTVBMRVRFX0FMTF9UWCh2ZGV2KTsKKworCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwlyZXR1cm47Cit9CisjZW5kaWYKKworLyogUlRIIGNvbmZpZ3VyYXRpb24gKi8KK3N0YXRpYyBlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfcnRoX2NvbmZpZ3VyZShzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VfaHdfcnRoX2hhc2hfdHlwZXMgaGFzaF90eXBlczsKKwl1OCBpdGFibGVbMjU2XSA9IHswfTsgLyogaW5kaXJlY3Rpb24gdGFibGUgKi8KKwl1OCBtdGFibGVbMjU2XSA9IHswfTsgLyogQ1BVIHRvIHZwYXRoIG1hcHBpbmcgICovCisJaW50IGluZGV4OworCisJLyoKKwkgKiBGaWxsaW5nCisJICogCS0gaXRhYmxlIHdpdGggYnVja2V0IG51bWJlcnMKKwkgKiAJLSBtdGFibGUgd2l0aCBidWNrZXQtdG8tdnBhdGggbWFwcGluZworCSAqLworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8ICgxIDw8IHZkZXYtPmNvbmZpZy5ydGhfYmt0X3N6KTsgaW5kZXgrKykgeworCQlpdGFibGVbaW5kZXhdID0gaW5kZXg7CisJCW10YWJsZVtpbmRleF0gPSBpbmRleCAlIHZkZXYtPm5vX29mX3ZwYXRoOworCX0KKworCS8qIEZpbGwgUlRIIGhhc2ggdHlwZXMgKi8KKwloYXNoX3R5cGVzLmhhc2hfdHlwZV90Y3BpcHY0X2VuICAgPSB2ZGV2LT5jb25maWcucnRoX2hhc2hfdHlwZV90Y3BpcHY0OworCWhhc2hfdHlwZXMuaGFzaF90eXBlX2lwdjRfZW4gICAgICA9IHZkZXYtPmNvbmZpZy5ydGhfaGFzaF90eXBlX2lwdjQ7CisJaGFzaF90eXBlcy5oYXNoX3R5cGVfdGNwaXB2Nl9lbiAgID0gdmRldi0+Y29uZmlnLnJ0aF9oYXNoX3R5cGVfdGNwaXB2NjsKKwloYXNoX3R5cGVzLmhhc2hfdHlwZV9pcHY2X2VuICAgICAgPSB2ZGV2LT5jb25maWcucnRoX2hhc2hfdHlwZV9pcHY2OworCWhhc2hfdHlwZXMuaGFzaF90eXBlX3RjcGlwdjZleF9lbiA9CisJCQkJCXZkZXYtPmNvbmZpZy5ydGhfaGFzaF90eXBlX3RjcGlwdjZleDsKKwloYXNoX3R5cGVzLmhhc2hfdHlwZV9pcHY2ZXhfZW4gICAgPSB2ZGV2LT5jb25maWcucnRoX2hhc2hfdHlwZV9pcHY2ZXg7CisKKwkvKiBzZXQgaW5kaXJlY3Rpb24gdGFibGUsIGJ1Y2tldC10by12cGF0aCBtYXBwaW5nICovCisJc3RhdHVzID0gdnhnZV9od192cGF0aF9ydHNfcnRoX2l0YWJsZV9zZXQodmRldi0+dnBfaGFuZGxlcywKKwkJCQkJCXZkZXYtPm5vX29mX3ZwYXRoLAorCQkJCQkJbXRhYmxlLCBpdGFibGUsCisJCQkJCQl2ZGV2LT5jb25maWcucnRoX2JrdF9zeik7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSJSVEggaW5kaXJlY3Rpb24gdGFibGUgY29uZmlndXJhdGlvbiBmYWlsZWQgIgorCQkJImZvciB2cGF0aDolZCIsIHZkZXYtPnZwYXRoc1swXS5kZXZpY2VfaWQpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qCisJKiBCZWNhdXNlIHRoZSBpdGFibGVfc2V0KCkgbWV0aG9kIHVzZXMgdGhlIGFjdGl2ZV90YWJsZSBmaWVsZAorCSogZm9yIHRoZSB0YXJnZXQgdmlydHVhbCBwYXRoIHRoZSBSVEggY29uZmlnIHNob3VsZCBiZSB1cGRhdGVkCisJKiBmb3IgYWxsIFZQQVRIcy4gVGhlIGgvdyBvbmx5IHVzZXMgdGhlIGxvd2VzdCBudW1iZXJlZCBWUEFUSAorCSogd2hlbiBzdGVlcmluZyBmcmFtZXMuCisJKi8KKwkgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdmRldi0+bm9fb2ZfdnBhdGg7IGluZGV4KyspIHsKKwkJc3RhdHVzID0gdnhnZV9od192cGF0aF9ydHNfcnRoX3NldCgKKwkJCQl2ZGV2LT52cGF0aHNbaW5kZXhdLmhhbmRsZSwKKwkJCQl2ZGV2LT5jb25maWcucnRoX2FsZ29yaXRobSwKKwkJCQkmaGFzaF90eXBlcywKKwkJCQl2ZGV2LT5jb25maWcucnRoX2JrdF9zeik7CisKKwkJIGlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSJSVEggY29uZmlndXJhdGlvbiBmYWlsZWQgZm9yIHZwYXRoOiVkIiwKKwkJCQl2ZGV2LT52cGF0aHNbaW5kZXhdLmRldmljZV9pZCk7CisJCQlyZXR1cm4gc3RhdHVzOworCQkgfQorCSB9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgdnhnZV9tYWNfbGlzdF9hZGQoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoLCBzdHJ1Y3QgbWFjSW5mbyAqbWFjKQoreworCXN0cnVjdCB2eGdlX21hY19hZGRycyAqbmV3X21hY19lbnRyeTsKKwl1OCAqbWFjX2FkZHJlc3MgPSBOVUxMOworCisJaWYgKHZwYXRoLT5tYWNfYWRkcl9jbnQgPj0gVlhHRV9NQVhfTEVBUk5fTUFDX0FERFJfQ05UKQorCQlyZXR1cm4gVFJVRTsKKworCW5ld19tYWNfZW50cnkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIW5ld19tYWNfZW50cnkpIHsKKwkJdnhnZV9kZWJ1Z19tZW0oVlhHRV9FUlIsCisJCQkiJXM6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIsCisJCQlWWEdFX0RSSVZFUl9OQU1FKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCWxpc3RfYWRkKCZuZXdfbWFjX2VudHJ5LT5pdGVtLCAmdnBhdGgtPm1hY19hZGRyX2xpc3QpOworCisJLyogQ29weSB0aGUgbmV3IG1hYyBhZGRyZXNzIHRvIHRoZSBsaXN0ICovCisJbWFjX2FkZHJlc3MgPSAodTggKikmbmV3X21hY19lbnRyeS0+bWFjYWRkcjsKKwltZW1jcHkobWFjX2FkZHJlc3MsIG1hYy0+bWFjYWRkciwgRVRIX0FMRU4pOworCisJbmV3X21hY19lbnRyeS0+c3RhdGUgPSBtYWMtPnN0YXRlOworCXZwYXRoLT5tYWNfYWRkcl9jbnQrKzsKKworCS8qIElzIHRoaXMgYSBtdWx0aWNhc3QgYWRkcmVzcyAqLworCWlmICgweDAxICYgbWFjLT5tYWNhZGRyWzBdKQorCQl2cGF0aC0+bWNhc3RfYWRkcl9jbnQrKzsKKworCXJldHVybiBUUlVFOworfQorCisvKiBBZGQgYSBtYWMgYWRkcmVzcyB0byBEQSB0YWJsZSAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2FkZF9tYWNfYWRkcihzdHJ1Y3QgdnhnZWRldiAqdmRldiwgc3RydWN0IG1hY0luZm8gKm1hYykKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoOworCWVudW0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9hZGRfbW9kZSBkdXBsaWNhdGVfbW9kZTsKKworCWlmICgweDAxICYgbWFjLT5tYWNhZGRyWzBdKSAvKiBtdWx0aWNhc3QgYWRkcmVzcyAqLworCQlkdXBsaWNhdGVfbW9kZSA9IFZYR0VfSFdfVlBBVEhfTUFDX0FERFJfQUREX0RVUExJQ0FURTsKKwllbHNlCisJCWR1cGxpY2F0ZV9tb2RlID0gVlhHRV9IV19WUEFUSF9NQUNfQUREUl9SRVBMQUNFX0RVUExJQ0FURTsKKworCXZwYXRoID0gJnZkZXYtPnZwYXRoc1ttYWMtPnZwYXRoX25vXTsKKwlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2FkZCh2cGF0aC0+aGFuZGxlLCBtYWMtPm1hY2FkZHIsCisJCQkJCQltYWMtPm1hY21hc2ssIGR1cGxpY2F0ZV9tb2RlKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIkRBIGNvbmZpZyBhZGQgZW50cnkgZmFpbGVkIGZvciB2cGF0aDolZCIsCisJCQl2cGF0aC0+ZGV2aWNlX2lkKTsKKwl9IGVsc2UKKwkJaWYgKEZBTFNFID09IHZ4Z2VfbWFjX2xpc3RfYWRkKHZwYXRoLCBtYWMpKQorCQkJc3RhdHVzID0gLUVQRVJNOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IHZ4Z2VfbWFjX2xpc3RfZGVsKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCwgc3RydWN0IG1hY0luZm8gKm1hYykKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSwgKm5leHQ7CisJdTY0IGRlbF9tYWMgPSAwOworCXU4ICptYWNfYWRkcmVzcyA9ICh1OCAqKSAoJmRlbF9tYWMpOworCisJLyogQ29weSB0aGUgbWFjIGFkZHJlc3MgdG8gZGVsZXRlIGZyb20gdGhlIGxpc3QgKi8KKwltZW1jcHkobWFjX2FkZHJlc3MsIG1hYy0+bWFjYWRkciwgRVRIX0FMRU4pOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCBuZXh0LCAmdnBhdGgtPm1hY19hZGRyX2xpc3QpIHsKKwkJaWYgKCgoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopZW50cnkpLT5tYWNhZGRyID09IGRlbF9tYWMpIHsKKwkJCWxpc3RfZGVsKGVudHJ5KTsKKwkJCWtmcmVlKChzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKillbnRyeSk7CisJCQl2cGF0aC0+bWFjX2FkZHJfY250LS07CisKKwkJCS8qIElzIHRoaXMgYSBtdWx0aWNhc3QgYWRkcmVzcyAqLworCQkJaWYgKDB4MDEgJiBtYWMtPm1hY2FkZHJbMF0pCisJCQkJdnBhdGgtPm1jYXN0X2FkZHJfY250LS07CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCX0KKworCXJldHVybiBGQUxTRTsKK30KKy8qIGRlbGV0ZSBhIG1hYyBhZGRyZXNzIGZyb20gREEgdGFibGUgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9kZWxfbWFjX2FkZHIoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIHN0cnVjdCBtYWNJbmZvICptYWMpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aDsKKworCXZwYXRoID0gJnZkZXYtPnZwYXRoc1ttYWMtPnZwYXRoX25vXTsKKwlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2RlbGV0ZSh2cGF0aC0+aGFuZGxlLCBtYWMtPm1hY2FkZHIsCisJCQkJCQltYWMtPm1hY21hc2spOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiREEgY29uZmlnIGRlbGV0ZSBlbnRyeSBmYWlsZWQgZm9yIHZwYXRoOiVkIiwKKwkJCXZwYXRoLT5kZXZpY2VfaWQpOworCX0gZWxzZQorCQl2eGdlX21hY19saXN0X2RlbCh2cGF0aCwgbWFjKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBsaXN0IGFsbCBtYWMgYWRkcmVzc2VzIGZyb20gREEgdGFibGUgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3N0YXRpYyB2eGdlX3NlYXJjaF9tYWNfYWRkcl9pbl9kYV90YWJsZShzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgsCisJCQkJCXN0cnVjdCBtYWNJbmZvICptYWMpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXVuc2lnbmVkIGNoYXIgbWFjbWFza1tFVEhfQUxFTl07CisJdW5zaWduZWQgY2hhciBtYWNhZGRyW0VUSF9BTEVOXTsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0KHZwYXRoLT5oYW5kbGUsCisJCQkJbWFjYWRkciwgbWFjbWFzayk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSJEQSBjb25maWcgbGlzdCBlbnRyeSBmYWlsZWQgZm9yIHZwYXRoOiVkIiwKKwkJCXZwYXRoLT5kZXZpY2VfaWQpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXdoaWxlIChtZW1jbXAobWFjLT5tYWNhZGRyLCBtYWNhZGRyLCBFVEhfQUxFTikpIHsKKworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2dldF9uZXh0KHZwYXRoLT5oYW5kbGUsCisJCQkJbWFjYWRkciwgbWFjbWFzayk7CisJCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFN0b3JlIGFsbCB2bGFuIGlkcyBmcm9tIHRoZSBsaXN0IHRvIHRoZSB2aWQgdGFibGUgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9yZXN0b3JlX3ZwYXRoX3ZpZF90YWJsZShzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gdnBhdGgtPnZkZXY7CisJdTE2IHZpZDsKKworCWlmICh2ZGV2LT52bGdycCAmJiB2cGF0aC0+aXNfb3BlbikgeworCisJCWZvciAodmlkID0gMDsgdmlkIDwgVkxBTl9HUk9VUF9BUlJBWV9MRU47IHZpZCsrKSB7CisJCQlpZiAoIXZsYW5fZ3JvdXBfZ2V0X2RldmljZSh2ZGV2LT52bGdycCwgdmlkKSkKKwkJCQljb250aW51ZTsKKwkJCS8qIEFkZCB0aGVzZSB2bGFuIHRvIHRoZSB2aWQgdGFibGUgKi8KKwkJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfdmlkX2FkZCh2cGF0aC0+aGFuZGxlLCB2aWQpOworCQl9CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyogU3RvcmUgYWxsIG1hYyBhZGRyZXNzZXMgZnJvbSB0aGUgbGlzdCB0byB0aGUgREEgdGFibGUgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9yZXN0b3JlX3ZwYXRoX21hY19hZGRyKHN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IG1hY0luZm8gbWFjX2luZm87CisJdTggKm1hY19hZGRyZXNzID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSwgKm5leHQ7CisKKwltZW1zZXQoJm1hY19pbmZvLCAwLCBzaXplb2Yoc3RydWN0IG1hY0luZm8pKTsKKworCWlmICh2cGF0aC0+aXNfb3BlbikgeworCisJCWxpc3RfZm9yX2VhY2hfc2FmZShlbnRyeSwgbmV4dCwgJnZwYXRoLT5tYWNfYWRkcl9saXN0KSB7CisJCQltYWNfYWRkcmVzcyA9CisJCQkJKHU4ICopJgorCQkJCSgoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopZW50cnkpLT5tYWNhZGRyOworCQkJbWVtY3B5KG1hY19pbmZvLm1hY2FkZHIsIG1hY19hZGRyZXNzLCBFVEhfQUxFTik7CisJCQkoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KS0+c3RhdGUgPQorCQkJCVZYR0VfTExfTUFDX0FERFJfSU5fREFfVEFCTEU7CisJCQkvKiBkb2VzIHRoaXMgbWFjIGFkZHJlc3MgYWxyZWFkeSBleGlzdCBpbiBkYSB0YWJsZT8gKi8KKwkJCXN0YXR1cyA9IHZ4Z2Vfc2VhcmNoX21hY19hZGRyX2luX2RhX3RhYmxlKHZwYXRoLAorCQkJCSZtYWNfaW5mbyk7CisJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCQkvKiBBZGQgdGhpcyBtYWMgYWRkcmVzcyB0byB0aGUgREEgdGFibGUgKi8KKwkJCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2FkZCgKKwkJCQkJdnBhdGgtPmhhbmRsZSwgbWFjX2luZm8ubWFjYWRkciwKKwkJCQkJbWFjX2luZm8ubWFjbWFzaywKKwkJCQkgICAgVlhHRV9IV19WUEFUSF9NQUNfQUREUl9BRERfRFVQTElDQVRFKTsKKwkJCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkgICAgIkRBIGFkZCBlbnRyeSBmYWlsZWQgZm9yIHZwYXRoOiVkIiwKKwkJCQkJICAgIHZwYXRoLT5kZXZpY2VfaWQpOworCQkJCQkoKHN0cnVjdCB2eGdlX21hY19hZGRycyAqKWVudHJ5KS0+c3RhdGUKKwkJCQkJCT0gVlhHRV9MTF9NQUNfQUREUl9JTl9MSVNUOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIHJlc2V0IHZwYXRocyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX3Jlc2V0X2FsbF92cGF0aHMoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJaW50IGk7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCWlmICh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKSB7CisJCQlpZiAodnhnZV9od192cGF0aF9yZXNldCh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKQorCQkJCQk9PSBWWEdFX0hXX09LKSB7CisJCQkJaWYgKGlzX3Z4Z2VfY2FyZF91cCh2ZGV2KSAmJgorCQkJCQl2eGdlX2h3X3ZwYXRoX3JlY292ZXJfZnJvbV9yZXNldCgKKwkJCQkJCXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpCisJCQkJCQkhPSBWWEdFX0hXX09LKSB7CisJCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJCSJ2eGdlX2h3X3ZwYXRoX3JlY292ZXJfIgorCQkJCQkJImZyb21fcmVzZXQgZmFpbGVkIGZvciB2cGF0aDogIgorCQkJCQkJIiVkIiwgaSk7CisJCQkJCXJldHVybiBzdGF0dXM7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJCSJ2eGdlX2h3X3ZwYXRoX3Jlc2V0IGZhaWxlZCBmb3IgIgorCQkJCQkidnBhdGg6JWQiLCBpKTsKKwkJCQkJcmV0dXJuIHN0YXR1czsKKwkJCX0KKwkJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIGNsb3NlIHZwYXRocyAqLwordm9pZCB2eGdlX2Nsb3NlX3ZwYXRocyhzdHJ1Y3QgdnhnZWRldiAqdmRldiwgaW50IGluZGV4KQoreworCWludCBpOworCWZvciAoaSA9IGluZGV4OyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQlpZiAodmRldi0+dnBhdGhzW2ldLmhhbmRsZSAmJiB2ZGV2LT52cGF0aHNbaV0uaXNfb3BlbikgeworCQkJdnhnZV9od192cGF0aF9jbG9zZSh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJCXZkZXYtPnN0YXRzLnZwYXRoc19vcGVuLS07CisJCX0KKwkJdmRldi0+dnBhdGhzW2ldLmlzX29wZW4gPSAwOworCQl2ZGV2LT52cGF0aHNbaV0uaGFuZGxlICA9IE5VTEw7CisJfQorfQorCisvKiBvcGVuIHZwYXRocyAqLworaW50IHZ4Z2Vfb3Blbl92cGF0aHMoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXM7CisJaW50IGk7CisJdTMyIHZwX2lkID0gMDsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9hdHRyIGF0dHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQl2eGdlX2Fzc2VydCh2ZGV2LT52cGF0aHNbaV0uaXNfY29uZmlndXJlZCk7CisJCWF0dHIudnBfaWQgPSB2ZGV2LT52cGF0aHNbaV0uZGV2aWNlX2lkOworCQlhdHRyLmZpZm9fYXR0ci5jYWxsYmFjayA9IHZ4Z2VfeG1pdF9jb21wbDsKKwkJYXR0ci5maWZvX2F0dHIudHhkbF90ZXJtID0gdnhnZV90eF90ZXJtOworCQlhdHRyLmZpZm9fYXR0ci5wZXJfdHhkbF9zcGFjZSA9IHNpemVvZihzdHJ1Y3QgdnhnZV90eF9wcml2KTsKKwkJYXR0ci5maWZvX2F0dHIudXNlcmRhdGEgPSAodm9pZCAqKSZ2ZGV2LT52cGF0aHNbaV0uZmlmbzsKKworCQlhdHRyLnJpbmdfYXR0ci5jYWxsYmFjayA9IHZ4Z2VfcnhfMWJfY29tcGw7CisJCWF0dHIucmluZ19hdHRyLnJ4ZF9pbml0ID0gdnhnZV9yeF9pbml0aWFsX3JlcGxlbmlzaDsKKwkJYXR0ci5yaW5nX2F0dHIucnhkX3Rlcm0gPSB2eGdlX3J4X3Rlcm07CisJCWF0dHIucmluZ19hdHRyLnBlcl9yeGRfc3BhY2UgPSBzaXplb2Yoc3RydWN0IHZ4Z2VfcnhfcHJpdik7CisJCWF0dHIucmluZ19hdHRyLnVzZXJkYXRhID0gKHZvaWQgKikmdmRldi0+dnBhdGhzW2ldLnJpbmc7CisKKwkJdmRldi0+dnBhdGhzW2ldLnJpbmcubmRldiA9IHZkZXYtPm5kZXY7CisJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLnBkZXYgPSB2ZGV2LT5wZGV2OworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX29wZW4odmRldi0+ZGV2aCwgJmF0dHIsCisJCQkJJih2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKSk7CisJCWlmIChzdGF0dXMgPT0gVlhHRV9IV19PSykgeworCQkJdmRldi0+dnBhdGhzW2ldLmZpZm8uaGFuZGxlID0KKwkJCSAgICAoc3RydWN0IF9fdnhnZV9od19maWZvICopYXR0ci5maWZvX2F0dHIudXNlcmRhdGE7CisJCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5oYW5kbGUgPQorCQkJICAgIChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKilhdHRyLnJpbmdfYXR0ci51c2VyZGF0YTsKKwkJCXZkZXYtPnZwYXRoc1tpXS5maWZvLnR4X3N0ZWVyaW5nX3R5cGUgPQorCQkJCXZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlOworCQkJdmRldi0+dnBhdGhzW2ldLmZpZm8ubmRldiA9IHZkZXYtPm5kZXY7CisJCQl2ZGV2LT52cGF0aHNbaV0uZmlmby5wZGV2ID0gdmRldi0+cGRldjsKKwkJCXZkZXYtPnZwYXRoc1tpXS5maWZvLmluZGljYXRlX21heF9wa3RzID0KKwkJCQl2ZGV2LT5jb25maWcuZmlmb19pbmRpY2F0ZV9tYXhfcGt0czsKKwkJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLnJ4X3ZlY3Rvcl9ubyA9IDA7CisJCQl2ZGV2LT52cGF0aHNbaV0ucmluZy5yeF9jc3VtID0gdmRldi0+cnhfY3N1bTsKKwkJCXZkZXYtPnZwYXRoc1tpXS5pc19vcGVuID0gMTsKKwkJCXZkZXYtPnZwX2hhbmRsZXNbaV0gPSB2ZGV2LT52cGF0aHNbaV0uaGFuZGxlOworCQkJdmRldi0+dnBhdGhzW2ldLnJpbmcuZ3JvX2VuYWJsZSA9CisJCQkJCQl2ZGV2LT5jb25maWcuZ3JvX2VuYWJsZTsKKwkJCXZkZXYtPnZwYXRoc1tpXS5yaW5nLnZsYW5fdGFnX3N0cmlwID0KKwkJCQkJCXZkZXYtPnZsYW5fdGFnX3N0cmlwOworCQkJdmRldi0+c3RhdHMudnBhdGhzX29wZW4rKzsKKwkJfSBlbHNlIHsKKwkJCXZkZXYtPnN0YXRzLnZwYXRoX29wZW5fZmFpbCsrOworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogdnBhdGg6ICVkIGZhaWxlZCB0byBvcGVuICIKKwkJCQkid2l0aCBzdGF0dXM6ICVkIiwKKwkJCSAgICB2ZGV2LT5uZGV2LT5uYW1lLCB2ZGV2LT52cGF0aHNbaV0uZGV2aWNlX2lkLAorCQkJCXN0YXR1cyk7CisJCQl2eGdlX2Nsb3NlX3ZwYXRocyh2ZGV2LCAwKTsKKwkJCXJldHVybiAtRVBFUk07CisJCX0KKworCQl2cF9pZCA9CisJCSAgKChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqKXZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpLT4KKwkJICB2cGF0aC0+dnBfaWQ7CisJCXZkZXYtPnZwYXRoc19kZXBsb3llZCB8PSB2eGdlX21CSVQodnBfaWQpOworCX0KKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoKKyAqICB2eGdlX2lzcl9uYXBpCisgKiAgQGlycTogdGhlIGlycSBvZiB0aGUgZGV2aWNlLgorICogIEBkZXZfaWQ6IGEgdm9pZCBwb2ludGVyIHRvIHRoZSBobGRldiBzdHJ1Y3R1cmUgb2YgdGhlIFRpdGFuIGRldmljZQorICogIEBwdHJlZ3M6IHBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVycyBwdXNoZWQgb24gdGhlIHN0YWNrLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBJU1IgaGFuZGxlciBvZiB0aGUgZGV2aWNlIHdoZW4gbmFwaSBpcyBlbmFibGVkLiBJdAorICogIGlkZW50aWZpZXMgdGhlIHJlYXNvbiBmb3IgdGhlIGludGVycnVwdCBhbmQgY2FsbHMgdGhlIHJlbGV2YW50IHNlcnZpY2UKKyAqICByb3V0aW5lcy4KKyAqLworc3RhdGljIGlycXJldHVybl90IHZ4Z2VfaXNyX25hcGkoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopZGV2X2lkOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJdTY0IHJlYXNvbjsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKworCXZ4Z2VfZGVidWdfaW50cihWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJZGV2ID0gaGxkZXYtPm5kZXY7CisJdmRldiA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZSh2ZGV2LT5wZGV2KSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKHVubGlrZWx5KCFpc192eGdlX2NhcmRfdXAodmRldikpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlzdGF0dXMgPSB2eGdlX2h3X2RldmljZV9iZWdpbl9pcnEoaGxkZXYsIHZkZXYtPmV4ZWNfbW9kZSwKKwkJCSZyZWFzb24pOworCWlmIChzdGF0dXMgPT0gVlhHRV9IV19PSykgeworCQl2eGdlX2h3X2RldmljZV9tYXNrX2FsbChobGRldik7CisKKwkJaWYgKHJlYXNvbiAmCisJCQlWWEdFX0hXX1RJVEFOX0dFTkVSQUxfSU5UX1NUQVRVU19WUEFUSF9UUkFGRklDX0lOVCgKKwkJCXZkZXYtPnZwYXRoc19kZXBsb3llZCA+PgorCQkJKDY0IC0gVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUykpKSB7CisKKwkJCXZ4Z2VfaHdfZGV2aWNlX2NsZWFyX3R4X3J4KGhsZGV2KTsKKwkJCW5hcGlfc2NoZWR1bGUoJnZkZXYtPm5hcGkpOworCQkJdnhnZV9kZWJ1Z19pbnRyKFZYR0VfVFJBQ0UsCisJCQkJIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfSBlbHNlCisJCQl2eGdlX2h3X2RldmljZV91bm1hc2tfYWxsKGhsZGV2KTsKKwl9IGVsc2UgaWYgKHVubGlrZWx5KChzdGF0dXMgPT0gVlhHRV9IV19FUlJfVlBBVEgpIHx8CisJCShzdGF0dXMgPT0gVlhHRV9IV19FUlJfQ1JJVElDQUwpIHx8CisJCShzdGF0dXMgPT0gVlhHRV9IV19FUlJfRklGTykpKSB7CisJCXZ4Z2VfaHdfZGV2aWNlX21hc2tfYWxsKGhsZGV2KTsKKwkJdnhnZV9od19kZXZpY2VfZmx1c2hfaW8oaGxkZXYpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfSBlbHNlIGlmICh1bmxpa2VseShzdGF0dXMgPT0gVlhHRV9IV19FUlJfU0xPVF9GUkVFWkUpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwl2eGdlX2RlYnVnX2ludHIoVlhHRV9UUkFDRSwgIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKKyNpZmRlZiBDT05GSUdfUENJX01TSQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK3Z4Z2VfdHhfbXNpeF9oYW5kbGUoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8gPSAoc3RydWN0IHZ4Z2VfZmlmbyAqKWRldl9pZDsKKworCVZYR0VfQ09NUExFVEVfVlBBVEhfVFgoZmlmbyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAordnhnZV9yeF9tc2l4X25hcGlfaGFuZGxlKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nID0gKHN0cnVjdCB2eGdlX3JpbmcgKilkZXZfaWQ7CisKKwkvKiBNU0lYX0lEWCBmb3IgUnggaXMgMSAqLworCXZ4Z2VfaHdfY2hhbm5lbF9tc2l4X21hc2soKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqKXJpbmctPmhhbmRsZSwKKwkJCQkJcmluZy0+cnhfdmVjdG9yX25vKTsKKworCW5hcGlfc2NoZWR1bGUoJnJpbmctPm5hcGkpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90Cit2eGdlX2FsYXJtX21zaXhfaGFuZGxlKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgaTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGggPSAoc3RydWN0IHZ4Z2VfdnBhdGggKilkZXZfaWQ7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSB2cGF0aC0+dmRldjsKKwlpbnQgYWxhcm1fbXNpeF9pZCA9CisJCVZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkUgKiB2ZGV2LT5ub19vZl92cGF0aCAtIDI7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQl2eGdlX2h3X3ZwYXRoX21zaXhfbWFzayh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlLAorCQkJYWxhcm1fbXNpeF9pZCk7CisKKwkJc3RhdHVzID0gdnhnZV9od192cGF0aF9hbGFybV9wcm9jZXNzKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUsCisJCQl2ZGV2LT5leGVjX21vZGUpOworCQlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spIHsKKworCQkJdnhnZV9od192cGF0aF9tc2l4X3VubWFzayh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlLAorCQkJCWFsYXJtX21zaXhfaWQpOworCQkJY29udGludWU7CisJCX0KKwkJdnhnZV9kZWJ1Z19pbnRyKFZYR0VfRVJSLAorCQkJIiVzOiB2eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3MgZmFpbGVkICV4ICIsCisJCQlWWEdFX0RSSVZFUl9OQU1FLCBzdGF0dXMpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgdnhnZV9hbGxvY19tc2l4KHN0cnVjdCB2eGdlZGV2ICp2ZGV2KQoreworCWludCBqLCBpLCByZXQgPSAwOworCWludCBpbnRyX2NudCA9IDA7CisJaW50IGFsYXJtX21zaXhfaWQgPSAwLCBtc2l4X2ludHJfdmVjdCA9IDA7CisJdmRldi0+aW50cl9jbnQgPSAwOworCisJLyogVHgvUnggTVNJWCBWZWN0b3JzIGNvdW50ICovCisJdmRldi0+aW50cl9jbnQgPSB2ZGV2LT5ub19vZl92cGF0aCAqIDI7CisKKwkvKiBBbGFybSBNU0lYIFZlY3RvcnMgY291bnQgKi8KKwl2ZGV2LT5pbnRyX2NudCsrOworCisJaW50cl9jbnQgPSAodmRldi0+bWF4X3ZwYXRoX3N1cHBvcnRlZCAqIDIpICsgMTsKKwl2ZGV2LT5lbnRyaWVzID0ga3phbGxvYyhpbnRyX2NudCAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSksCisJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXZkZXYtPmVudHJpZXMpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzOiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiLAorCQkJVlhHRV9EUklWRVJfTkFNRSk7CisJCXJldHVybiAgLUVOT01FTTsKKwl9CisKKwl2ZGV2LT52eGdlX2VudHJpZXMgPSBremFsbG9jKGludHJfY250ICogc2l6ZW9mKHN0cnVjdCB2eGdlX21zaXhfZW50cnkpLAorCQkJCQkJCUdGUF9LRVJORUwpOworCWlmICghdmRldi0+dnhnZV9lbnRyaWVzKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwgIiVzOiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQiLAorCQkJVlhHRV9EUklWRVJfTkFNRSk7CisJCWtmcmVlKHZkZXYtPmVudHJpZXMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBMYXN0IHZlY3RvciBpbiB0aGUgbGlzdCBpcyB1c2VkIGZvciBhbGFybSAqLworCWFsYXJtX21zaXhfaWQgPSBWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFICogdmRldi0+bm9fb2ZfdnBhdGggLSAyOworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgdmRldi0+bWF4X3ZwYXRoX3N1cHBvcnRlZDsgaSsrKSB7CisKKwkJbXNpeF9pbnRyX3ZlY3QgPSBpICogVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRTsKKworCQkvKiBJbml0aWFsaXplIHRoZSBmaWZvIHZlY3RvciAqLworCQl2ZGV2LT5lbnRyaWVzW2pdLmVudHJ5ID0gbXNpeF9pbnRyX3ZlY3Q7CisJCXZkZXYtPnZ4Z2VfZW50cmllc1tqXS5lbnRyeSA9IG1zaXhfaW50cl92ZWN0OworCQl2ZGV2LT52eGdlX2VudHJpZXNbal0uaW5fdXNlID0gMDsKKwkJaisrOworCisJCS8qIEluaXRpYWxpemUgdGhlIHJpbmcgdmVjdG9yICovCisJCXZkZXYtPmVudHJpZXNbal0uZW50cnkgPSBtc2l4X2ludHJfdmVjdCArIDE7CisJCXZkZXYtPnZ4Z2VfZW50cmllc1tqXS5lbnRyeSA9IG1zaXhfaW50cl92ZWN0ICsgMTsKKwkJdmRldi0+dnhnZV9lbnRyaWVzW2pdLmluX3VzZSA9IDA7CisJCWorKzsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSBhbGFybSB2ZWN0b3IgKi8KKwl2ZGV2LT5lbnRyaWVzW2pdLmVudHJ5ID0gYWxhcm1fbXNpeF9pZDsKKwl2ZGV2LT52eGdlX2VudHJpZXNbal0uZW50cnkgPSBhbGFybV9tc2l4X2lkOworCXZkZXYtPnZ4Z2VfZW50cmllc1tqXS5pbl91c2UgPSAwOworCisJcmV0ID0gcGNpX2VuYWJsZV9tc2l4KHZkZXYtPnBkZXYsIHZkZXYtPmVudHJpZXMsIGludHJfY250KTsKKwkvKiBpZiBkcml2ZXIgcmVxdWVzdCBleGNlZWVkcyBhdmFpbGFibGUgaXJxJ3MsIHJlcXVlc3Qgd2l0aCBhIHNtYWxsCisJICogbnVtYmVyLgorCSovCisJaWYgKHJldCA+IDApIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzOiBNU0ktWCBlbmFibGUgZmFpbGVkIGZvciAlZCB2ZWN0b3JzLCBhdmFpbGFibGU6ICVkIiwKKwkJCVZYR0VfRFJJVkVSX05BTUUsIGludHJfY250LCByZXQpOworCQl2ZGV2LT5tYXhfdnBhdGhfc3VwcG9ydGVkID0gdmRldi0+bm9fb2ZfdnBhdGg7CisJCWludHJfY250ID0gKHZkZXYtPm1heF92cGF0aF9zdXBwb3J0ZWQgKiAyKSArIDE7CisKKwkJLyogUmVzZXQgdGhlIGFsYXJtIHZlY3RvciBzZXR0aW5nICovCisJCXZkZXYtPmVudHJpZXNbal0uZW50cnkgPSAwOworCQl2ZGV2LT52eGdlX2VudHJpZXNbal0uZW50cnkgPSAwOworCisJCS8qIEluaXRpYWxpemUgdGhlIGFsYXJtIHZlY3RvciB3aXRoIG5ldyBzZXR0aW5nICovCisJCXZkZXYtPmVudHJpZXNbaW50cl9jbnQgLSAxXS5lbnRyeSA9IGFsYXJtX21zaXhfaWQ7CisJCXZkZXYtPnZ4Z2VfZW50cmllc1tpbnRyX2NudCAtIDFdLmVudHJ5ID0gYWxhcm1fbXNpeF9pZDsKKwkJdmRldi0+dnhnZV9lbnRyaWVzW2ludHJfY250IC0gMV0uaW5fdXNlID0gMDsKKworCQlyZXQgPSBwY2lfZW5hYmxlX21zaXgodmRldi0+cGRldiwgdmRldi0+ZW50cmllcywgaW50cl9jbnQpOworCQlpZiAoIXJldCkKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXM6IE1TSS1YIGVuYWJsZWQgZm9yICVkIHZlY3RvcnMiLAorCQkJCVZYR0VfRFJJVkVSX05BTUUsIGludHJfY250KTsKKwl9CisKKwlpZiAocmV0KSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlczogTVNJLVggZW5hYmxlIGZhaWxlZCBmb3IgJWQgdmVjdG9ycywgcmV0OiAlZCIsCisJCQlWWEdFX0RSSVZFUl9OQU1FLCBpbnRyX2NudCwgcmV0KTsKKwkJa2ZyZWUodmRldi0+ZW50cmllcyk7CisJCWtmcmVlKHZkZXYtPnZ4Z2VfZW50cmllcyk7CisJCXZkZXYtPmVudHJpZXMgPSBOVUxMOworCQl2ZGV2LT52eGdlX2VudHJpZXMgPSBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnhnZV9lbmFibGVfbXNpeChzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKworCWludCBpLCByZXQgPSAwOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCS8qIDAgLSBUeCwgMSAtIFJ4ICAqLworCWludCB0aW1fbXNpeF9pZFs0XTsKKwlpbnQgYWxhcm1fbXNpeF9pZCA9IDAsIG1zaXhfaW50cl92ZWN0ID0gMDs7CisJdmRldi0+aW50cl9jbnQgPSAwOworCisJLyogYWxsb2NhdGUgbXNpeCB2ZWN0b3JzICovCisJcmV0ID0gdnhnZV9hbGxvY19tc2l4KHZkZXYpOworCWlmICghcmV0KSB7CisJCS8qIExhc3QgdmVjdG9yIGluIHRoZSBsaXN0IGlzIHVzZWQgZm9yIGFsYXJtICovCisJCWFsYXJtX21zaXhfaWQgPQorCQkJVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRSAqIHZkZXYtPm5vX29mX3ZwYXRoIC0gMjsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKworCQkJLyogSWYgZmlmbyBvciByaW5nIGFyZSBub3QgZW5hYmxlZAorCQkJICAgdGhlIE1TSVggdmVjdG9yIGZvciB0aGF0IHNob3VsZCBiZSBzZXQgdG8gMAorCQkJICAgSGVuY2UgaW5pdGlhbGl6ZWluZyB0aGlzIGFycmF5IHRvIGFsbCAwcy4KKwkJCSovCisJCQltZW1zZXQodGltX21zaXhfaWQsIDAsIHNpemVvZih0aW1fbXNpeF9pZCkpOworCQkJbXNpeF9pbnRyX3ZlY3QgPSBpICogVlhHRV9IV19WUEFUSF9NU0lYX0FDVElWRTsKKwkJCXRpbV9tc2l4X2lkWzBdID0gbXNpeF9pbnRyX3ZlY3Q7CisKKwkJCXRpbV9tc2l4X2lkWzFdID0gbXNpeF9pbnRyX3ZlY3QgKyAxOworCQkJdmRldi0+dnBhdGhzW2ldLnJpbmcucnhfdmVjdG9yX25vID0gdGltX21zaXhfaWRbMV07CisKKwkJCXN0YXR1cyA9IHZ4Z2VfaHdfdnBhdGhfbXNpeF9zZXQoCisJCQkJCQl2ZGV2LT52cGF0aHNbaV0uaGFuZGxlLAorCQkJCQkJdGltX21zaXhfaWQsIGFsYXJtX21zaXhfaWQpOworCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkidnhnZV9od192cGF0aF9tc2l4X3NldCAiCisJCQkJCSJmYWlsZWQgd2l0aCBzdGF0dXMgOiAleCIsIHN0YXR1cyk7CisJCQkJa2ZyZWUodmRldi0+ZW50cmllcyk7CisJCQkJa2ZyZWUodmRldi0+dnhnZV9lbnRyaWVzKTsKKwkJCQlwY2lfZGlzYWJsZV9tc2l4KHZkZXYtPnBkZXYpOworCQkJCXJldHVybiAtRU5PREVWOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdnhnZV9yZW1fbXNpeF9pc3Ioc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJaW50IGludHJfY250OworCisJZm9yIChpbnRyX2NudCA9IDA7IGludHJfY250IDwgKHZkZXYtPm1heF92cGF0aF9zdXBwb3J0ZWQgKiAyICsgMSk7CisJCWludHJfY250KyspIHsKKwkJaWYgKHZkZXYtPnZ4Z2VfZW50cmllc1tpbnRyX2NudF0uaW5fdXNlKSB7CisJCQlzeW5jaHJvbml6ZV9pcnEodmRldi0+ZW50cmllc1tpbnRyX2NudF0udmVjdG9yKTsKKwkJCWZyZWVfaXJxKHZkZXYtPmVudHJpZXNbaW50cl9jbnRdLnZlY3RvciwKKwkJCQl2ZGV2LT52eGdlX2VudHJpZXNbaW50cl9jbnRdLmFyZyk7CisJCQl2ZGV2LT52eGdlX2VudHJpZXNbaW50cl9jbnRdLmluX3VzZSA9IDA7CisJCX0KKwl9CisKKwlrZnJlZSh2ZGV2LT5lbnRyaWVzKTsKKwlrZnJlZSh2ZGV2LT52eGdlX2VudHJpZXMpOworCXZkZXYtPmVudHJpZXMgPSBOVUxMOworCXZkZXYtPnZ4Z2VfZW50cmllcyA9IE5VTEw7CisKKwlpZiAodmRldi0+Y29uZmlnLmludHJfdHlwZSA9PSBNU0lfWCkKKwkJcGNpX2Rpc2FibGVfbXNpeCh2ZGV2LT5wZGV2KTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCB2eGdlX3JlbV9pc3Ioc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldjsKKwlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikgcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlpZiAodmRldi0+Y29uZmlnLmludHJfdHlwZSA9PSBNU0lfWCkgeworCQl2eGdlX3JlbV9tc2l4X2lzcih2ZGV2KTsKKwl9IGVsc2UKKyNlbmRpZgorCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IElOVEEpIHsKKwkJCXN5bmNocm9uaXplX2lycSh2ZGV2LT5wZGV2LT5pcnEpOworCQkJZnJlZV9pcnEodmRldi0+cGRldi0+aXJxLCBobGRldik7CisJfQorfQorCitzdGF0aWMgaW50IHZ4Z2VfYWRkX2lzcihzdHJ1Y3QgdnhnZWRldiAqdmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0KKwkJKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKwlpbnQgdnBfaWR4ID0gMCwgaW50cl9pZHggPSAwLCBpbnRyX2NudCA9IDAsIG1zaXhfaWR4ID0gMCwgaXJxX3JlcSA9IDA7CisJdTY0IGZ1bmN0aW9uX21vZGUgPSB2ZGV2LT5jb25maWcuZGV2aWNlX2h3X2luZm8uZnVuY3Rpb25fbW9kZTsKKwlpbnQgcGNpX2Z1biA9IFBDSV9GVU5DKHZkZXYtPnBkZXYtPmRldmZuKTsKKworCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IE1TSV9YKQorCQlyZXQgPSB2eGdlX2VuYWJsZV9tc2l4KHZkZXYpOworCisJaWYgKHJldCkgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXM6IEVuYWJsaW5nIE1TSS1YIEZhaWxlZCIsIFZYR0VfRFJJVkVSX05BTUUpOworCQlpZiAoKGZ1bmN0aW9uX21vZGUgPT0gVlhHRV9IV19GVU5DVElPTl9NT0RFX01VTFRJX0ZVTkNUSU9OKSAmJgorCQkJdGVzdF9hbmRfc2V0X2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwKKwkJCQkmZHJpdmVyX2NvbmZpZy0+aW50YV9kZXZfb3BlbikpCisJCQlyZXR1cm4gVlhHRV9IV19GQUlMOworCQllbHNlIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXM6IERlZmF1bHRpbmcgdG8gSU5UQSIsIFZYR0VfRFJJVkVSX05BTUUpOworCQkJdmRldi0+Y29uZmlnLmludHJfdHlwZSA9IElOVEE7CisJCQl2eGdlX2h3X2RldmljZV9zZXRfaW50cl90eXBlKHZkZXYtPmRldmgsCisJCQkJVlhHRV9IV19JTlRSX01PREVfSVJRTElORSk7CisJCQl2eGdlX2Nsb3NlX3ZwYXRocyh2ZGV2LCAxKTsKKwkJCXZkZXYtPm5vX29mX3ZwYXRoID0gMTsKKwkJCXZkZXYtPnN0YXRzLnZwYXRoc19vcGVuID0gMTsKKwkJfQorCX0KKworCWlmICh2ZGV2LT5jb25maWcuaW50cl90eXBlID09IE1TSV9YKSB7CisJCWZvciAoaW50cl9pZHggPSAwOworCQkgICAgIGludHJfaWR4IDwgKHZkZXYtPm5vX29mX3ZwYXRoICoKKwkJCVZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkUpOyBpbnRyX2lkeCsrKSB7CisKKwkJCW1zaXhfaWR4ID0gaW50cl9pZHggJSBWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFOworCQkJaXJxX3JlcSA9IDA7CisKKwkJCXN3aXRjaCAobXNpeF9pZHgpIHsKKwkJCWNhc2UgMDoKKwkJCQlzbnByaW50Zih2ZGV2LT5kZXNjW2ludHJfY250XSwgVlhHRV9JTlRSX1NUUkxFTiwKKwkJCQkJIiVzOnZ4Z2UgZm46ICVkIHZwYXRoOiAlZCBUeCBNU0ktWDogJWQiLAorCQkJCQl2ZGV2LT5uZGV2LT5uYW1lLCBwY2lfZnVuLCB2cF9pZHgsCisJCQkJCXZkZXYtPmVudHJpZXNbaW50cl9jbnRdLmVudHJ5KTsKKwkJCQlyZXQgPSByZXF1ZXN0X2lycSgKKwkJCQkgICAgdmRldi0+ZW50cmllc1tpbnRyX2NudF0udmVjdG9yLAorCQkJCQl2eGdlX3R4X21zaXhfaGFuZGxlLCAwLAorCQkJCQl2ZGV2LT5kZXNjW2ludHJfY250XSwKKwkJCQkJJnZkZXYtPnZwYXRoc1t2cF9pZHhdLmZpZm8pOworCQkJCQl2ZGV2LT52eGdlX2VudHJpZXNbaW50cl9jbnRdLmFyZyA9CisJCQkJCQkmdmRldi0+dnBhdGhzW3ZwX2lkeF0uZmlmbzsKKwkJCQlpcnFfcmVxID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlzbnByaW50Zih2ZGV2LT5kZXNjW2ludHJfY250XSwgVlhHRV9JTlRSX1NUUkxFTiwKKwkJCQkJIiVzOnZ4Z2UgZm46ICVkIHZwYXRoOiAlZCBSeCBNU0ktWDogJWQiLAorCQkJCQl2ZGV2LT5uZGV2LT5uYW1lLCBwY2lfZnVuLCB2cF9pZHgsCisJCQkJCXZkZXYtPmVudHJpZXNbaW50cl9jbnRdLmVudHJ5KTsKKwkJCQlyZXQgPSByZXF1ZXN0X2lycSgKKwkJCQkgICAgdmRldi0+ZW50cmllc1tpbnRyX2NudF0udmVjdG9yLAorCQkJCQl2eGdlX3J4X21zaXhfbmFwaV9oYW5kbGUsCisJCQkJCTAsCisJCQkJCXZkZXYtPmRlc2NbaW50cl9jbnRdLAorCQkJCQkmdmRldi0+dnBhdGhzW3ZwX2lkeF0ucmluZyk7CisJCQkJCXZkZXYtPnZ4Z2VfZW50cmllc1tpbnRyX2NudF0uYXJnID0KKwkJCQkJCSZ2ZGV2LT52cGF0aHNbdnBfaWR4XS5yaW5nOworCQkJCWlycV9yZXEgPSAxOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAocmV0KSB7CisJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkiJXM6IE1TSVggLSAlZCAgUmVnaXN0cmF0aW9uIGZhaWxlZCIsCisJCQkJCXZkZXYtPm5kZXYtPm5hbWUsIGludHJfY250KTsKKwkJCQl2eGdlX3JlbV9tc2l4X2lzcih2ZGV2KTsKKwkJCQlpZiAoKGZ1bmN0aW9uX21vZGUgPT0KKwkJCQkJVlhHRV9IV19GVU5DVElPTl9NT0RFX01VTFRJX0ZVTkNUSU9OKSAmJgorCQkJCQl0ZXN0X2FuZF9zZXRfYml0KF9fVlhHRV9TVEFURV9DQVJEX1VQLAorCQkJCQkJJmRyaXZlcl9jb25maWctPmludGFfZGV2X29wZW4pKQorCQkJCQlyZXR1cm4gVlhHRV9IV19GQUlMOworCQkJCWVsc2UgeworCQkJCQl2eGdlX2h3X2RldmljZV9zZXRfaW50cl90eXBlKAorCQkJCQkJdmRldi0+ZGV2aCwKKwkJCQkJCVZYR0VfSFdfSU5UUl9NT0RFX0lSUUxJTkUpOworCQkJCQkJdmRldi0+Y29uZmlnLmludHJfdHlwZSA9IElOVEE7CisJCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJCSIlczogRGVmYXVsdGluZyB0byBJTlRBIgorCQkJCQkJLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJCQkJdnhnZV9jbG9zZV92cGF0aHModmRldiwgMSk7CisJCQkJCXZkZXYtPm5vX29mX3ZwYXRoID0gMTsKKwkJCQkJdmRldi0+c3RhdHMudnBhdGhzX29wZW4gPSAxOworCQkJCQlnb3RvIElOVEFfTU9ERTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChpcnFfcmVxKSB7CisJCQkJLyogV2UgcmVxdWVzdGVkIGZvciB0aGlzIG1zaXggaW50ZXJydXB0ICovCisJCQkJdmRldi0+dnhnZV9lbnRyaWVzW2ludHJfY250XS5pbl91c2UgPSAxOworCQkJCXZ4Z2VfaHdfdnBhdGhfbXNpeF91bm1hc2soCisJCQkJCXZkZXYtPnZwYXRoc1t2cF9pZHhdLmhhbmRsZSwKKwkJCQkJaW50cl9pZHgpOworCQkJCWludHJfY250Kys7CisJCQl9CisKKwkJCS8qIFBvaW50IHRvIG5leHQgdnBhdGggaGFuZGxlciAqLworCQkJaWYgKCgoaW50cl9pZHggKyAxKSAlIFZYR0VfSFdfVlBBVEhfTVNJWF9BQ1RJVkUgPT0gMCkKKwkJCQkmJiAodnBfaWR4IDwgKHZkZXYtPm5vX29mX3ZwYXRoIC0gMSkpKQorCQkJCQl2cF9pZHgrKzsKKwkJfQorCisJCWludHJfY250ID0gdmRldi0+bWF4X3ZwYXRoX3N1cHBvcnRlZCAqIDI7CisJCXNucHJpbnRmKHZkZXYtPmRlc2NbaW50cl9jbnRdLCBWWEdFX0lOVFJfU1RSTEVOLAorCQkJIiVzOnZ4Z2UgQWxhcm0gZm46ICVkIE1TSS1YOiAlZCIsCisJCQl2ZGV2LT5uZGV2LT5uYW1lLCBwY2lfZnVuLAorCQkJdmRldi0+ZW50cmllc1tpbnRyX2NudF0uZW50cnkpOworCQkvKiBGb3IgQWxhcm0gaW50ZXJydXB0cyAqLworCQlyZXQgPSByZXF1ZXN0X2lycSh2ZGV2LT5lbnRyaWVzW2ludHJfY250XS52ZWN0b3IsCisJCQkJCXZ4Z2VfYWxhcm1fbXNpeF9oYW5kbGUsIDAsCisJCQkJCXZkZXYtPmRlc2NbaW50cl9jbnRdLAorCQkJCQkmdmRldi0+dnBhdGhzW3ZwX2lkeF0pOworCQlpZiAocmV0KSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzOiBNU0lYIC0gJWQgUmVnaXN0cmF0aW9uIGZhaWxlZCIsCisJCQkJdmRldi0+bmRldi0+bmFtZSwgaW50cl9jbnQpOworCQkJdnhnZV9yZW1fbXNpeF9pc3IodmRldik7CisJCQlpZiAoKGZ1bmN0aW9uX21vZGUgPT0KKwkJCQlWWEdFX0hXX0ZVTkNUSU9OX01PREVfTVVMVElfRlVOQ1RJT04pICYmCisJCQkJdGVzdF9hbmRfc2V0X2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwKKwkJCQkJCSZkcml2ZXJfY29uZmlnLT5pbnRhX2Rldl9vcGVuKSkKKwkJCQlyZXR1cm4gVlhHRV9IV19GQUlMOworCQkJZWxzZSB7CisJCQkJdnhnZV9od19kZXZpY2Vfc2V0X2ludHJfdHlwZSh2ZGV2LT5kZXZoLAorCQkJCQkJVlhHRV9IV19JTlRSX01PREVfSVJRTElORSk7CisJCQkJdmRldi0+Y29uZmlnLmludHJfdHlwZSA9IElOVEE7CisJCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCQkiJXM6IERlZmF1bHRpbmcgdG8gSU5UQSIsCisJCQkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQkJCXZ4Z2VfY2xvc2VfdnBhdGhzKHZkZXYsIDEpOworCQkJCXZkZXYtPm5vX29mX3ZwYXRoID0gMTsKKwkJCQl2ZGV2LT5zdGF0cy52cGF0aHNfb3BlbiA9IDE7CisJCQkJZ290byBJTlRBX01PREU7CisJCQl9CisJCX0KKworCQl2eGdlX2h3X3ZwYXRoX21zaXhfdW5tYXNrKHZkZXYtPnZwYXRoc1t2cF9pZHhdLmhhbmRsZSwKKwkJCQkJaW50cl9pZHggLSAyKTsKKwkJdmRldi0+dnhnZV9lbnRyaWVzW2ludHJfY250XS5pbl91c2UgPSAxOworCQl2ZGV2LT52eGdlX2VudHJpZXNbaW50cl9jbnRdLmFyZyA9ICZ2ZGV2LT52cGF0aHNbdnBfaWR4XTsKKwl9CitJTlRBX01PREU6CisjZW5kaWYKKwlzbnByaW50Zih2ZGV2LT5kZXNjWzBdLCBWWEdFX0lOVFJfU1RSTEVOLCAiJXM6dnhnZSIsIHZkZXYtPm5kZXYtPm5hbWUpOworCisJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgPT0gSU5UQSkgeworCQlyZXQgPSByZXF1ZXN0X2lycSgoaW50KSB2ZGV2LT5wZGV2LT5pcnEsCisJCQl2eGdlX2lzcl9uYXBpLAorCQkJSVJRRl9TSEFSRUQsIHZkZXYtPmRlc2NbMF0sIGhsZGV2KTsKKwkJaWYgKHJldCkgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlcyAlcy0lZDogSVNSIHJlZ2lzdHJhdGlvbiBmYWlsZWQiLAorCQkJCVZYR0VfRFJJVkVSX05BTUUsICJJUlEiLCB2ZGV2LT5wZGV2LT5pcnEpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkibmV3ICVzLSVkIGxpbmUgYWxsb2NhdGVkIiwKKwkJCSJJUlEiLCB2ZGV2LT5wZGV2LT5pcnEpOworCX0KKworCXJldHVybiBWWEdFX0hXX09LOworfQorCitzdGF0aWMgdm9pZCB2eGdlX3BvbGxfdnBfcmVzZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopZGF0YTsKKwlpbnQgaSwgaiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQlpZiAodGVzdF9iaXQoaSwgJnZkZXYtPnZwX3Jlc2V0KSkgeworCQkJdnhnZV9yZXNldF92cGF0aCh2ZGV2LCBpKTsKKwkJCWorKzsKKwkJfQorCX0KKwlpZiAoaiAmJiAodmRldi0+Y29uZmlnLmludHJfdHlwZSAhPSBNU0lfWCkpIHsKKwkJdnhnZV9od19kZXZpY2VfdW5tYXNrX2FsbCh2ZGV2LT5kZXZoKTsKKwkJdnhnZV9od19kZXZpY2VfZmx1c2hfaW8odmRldi0+ZGV2aCk7CisJfQorCisJbW9kX3RpbWVyKCZ2ZGV2LT52cF9yZXNldF90aW1lciwgamlmZmllcyArIEhaIC8gMik7Cit9CisKK3N0YXRpYyB2b2lkIHZ4Z2VfcG9sbF92cF9sb2NrdXAodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopZGF0YTsKKwlpbnQgaTsKKwlzdHJ1Y3QgdnhnZV9yaW5nICpyaW5nOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCXJpbmcgPSAmdmRldi0+dnBhdGhzW2ldLnJpbmc7CisJCS8qIERpZCB0aGlzIHZwYXRoIHJlY2VpdmVkIGFueSBwYWNrZXRzICovCisJCWlmIChyaW5nLT5zdGF0cy5wcmV2X3J4X2ZybXMgPT0gcmluZy0+c3RhdHMucnhfZnJtcykgeworCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF9jaGVja19sZWFrKHJpbmctPmhhbmRsZSk7CisKKwkJCS8qIERpZCBpdCByZWNlaXZlZCBhbnkgcGFja2V0cyBsYXN0IHRpbWUgKi8KKwkJCWlmICgoVlhHRV9IV19GQUlMID09IHN0YXR1cykgJiYKKwkJCQkoVlhHRV9IV19GQUlMID09IHJpbmctPmxhc3Rfc3RhdHVzKSkgeworCisJCQkJLyogc2NoZWR1bGUgdnBhdGggcmVzZXQgKi8KKwkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaSwgJnZkZXYtPnZwX3Jlc2V0KSkgeworCisJCQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcyB2cGF0aCAqLworCQkJCQl2eGdlX3ZwYXRoX2ludHJfZGlzYWJsZSh2ZGV2LCBpKTsKKworCQkJCQkvKiBzdG9wIHRoZSBxdWV1ZSBmb3IgdGhpcyB2cGF0aCAqLworCQkJCQl2eGdlX3N0b3BfdHhfcXVldWUoJnZkZXYtPnZwYXRoc1tpXS4KKwkJCQkJCQkJZmlmbyk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJfQorCQlyaW5nLT5zdGF0cy5wcmV2X3J4X2ZybXMgPSByaW5nLT5zdGF0cy5yeF9mcm1zOworCQlyaW5nLT5sYXN0X3N0YXR1cyA9IHN0YXR1czsKKwl9CisKKwkvKiBDaGVjayBldmVyeSAxIG1pbGxpIHNlY29uZCAqLworCW1vZF90aW1lcigmdmRldi0+dnBfbG9ja3VwX3RpbWVyLCBqaWZmaWVzICsgSFogLyAxMDAwKTsKK30KKworLyoqCisgKiB2eGdlX29wZW4KKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB0aGUgb3BlbiBlbnRyeSBwb2ludCBvZiB0aGUgZHJpdmVyLiBJdCBtYWlubHkgY2FsbHMgYQorICogZnVuY3Rpb24gdG8gYWxsb2NhdGUgUnggYnVmZmVycyBhbmQgaW5zZXJ0cyB0aGVtIGludG8gdGhlIGJ1ZmZlcgorICogZGVzY3JpcHRvcnMgYW5kIHRoZW4gZW5hYmxlcyB0aGUgUnggcGFydCBvZiB0aGUgTklDLgorICogUmV0dXJuIHZhbHVlOiAnMCcgb24gc3VjY2VzcyBhbmQgYW4gYXBwcm9wcmlhdGUgKC0pdmUgaW50ZWdlciBhcworICogZGVmaW5lZCBpbiBlcnJuby5oIGZpbGUgb24gZmFpbHVyZS4KKyAqLworaW50Cit2eGdlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXY7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisJdTY0IHZhbDY0LCBmdW5jdGlvbl9tb2RlOworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczogJXM6JWQiLCBkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKSBwY2lfZ2V0X2RydmRhdGEodmRldi0+cGRldik7CisJZnVuY3Rpb25fbW9kZSA9IHZkZXYtPmNvbmZpZy5kZXZpY2VfaHdfaW5mby5mdW5jdGlvbl9tb2RlOworCisJLyogbWFrZSBzdXJlIHlvdSBoYXZlIGxpbmsgb2ZmIGJ5IGRlZmF1bHQgZXZlcnkgdGltZSBOaWMgaXMKKwkgKiBpbml0aWFsaXplZCAqLworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwkvKiBDaGVjayBmb3IgYW5vdGhlciBkZXZpY2UgYWxyZWFkeSBvcG4gd2l0aCBJTlRBICovCisJaWYgKChmdW5jdGlvbl9tb2RlID09IFZYR0VfSFdfRlVOQ1RJT05fTU9ERV9NVUxUSV9GVU5DVElPTikgJiYKKwkJdGVzdF9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsICZkcml2ZXJfY29uZmlnLT5pbnRhX2Rldl9vcGVuKSkgeworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gb3V0MDsKKwl9CisKKwkvKiBPcGVuIFZQQVRIcyAqLworCXN0YXR1cyA9IHZ4Z2Vfb3Blbl92cGF0aHModmRldik7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlczogZmF0YWw6IFZwYXRoIG9wZW4gZmFpbGVkIiwgdmRldi0+bmRldi0+bmFtZSk7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBvdXQwOworCX0KKworCXZkZXYtPm10dSA9IGRldi0+bXR1OworCisJc3RhdHVzID0gdnhnZV9hZGRfaXNyKHZkZXYpOworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXM6IGZhdGFsOiBJU1IgYWRkIGZhaWxlZCIsIGRldi0+bmFtZSk7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBvdXQxOworCX0KKworCisJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgIT0gTVNJX1gpIHsKKwkJbmV0aWZfbmFwaV9hZGQoZGV2LCAmdmRldi0+bmFwaSwgdnhnZV9wb2xsX2ludGEsCisJCQl2ZGV2LT5jb25maWcubmFwaV93ZWlnaHQpOworCQluYXBpX2VuYWJsZSgmdmRldi0+bmFwaSk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJCW5ldGlmX25hcGlfYWRkKGRldiwgJnZkZXYtPnZwYXRoc1tpXS5yaW5nLm5hcGksCisJCQkgICAgdnhnZV9wb2xsX21zaXgsIHZkZXYtPmNvbmZpZy5uYXBpX3dlaWdodCk7CisJCQluYXBpX2VuYWJsZSgmdmRldi0+dnBhdGhzW2ldLnJpbmcubmFwaSk7CisJCX0KKwl9CisKKwkvKiBjb25maWd1cmUgUlRIICovCisJaWYgKHZkZXYtPmNvbmZpZy5ydGhfc3RlZXJpbmcpIHsKKwkJc3RhdHVzID0gdnhnZV9ydGhfY29uZmlndXJlKHZkZXYpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXM6IGZhdGFsOiBSVEggY29uZmlndXJhdGlvbiBmYWlsZWQiLAorCQkJCWRldi0+bmFtZSk7CisJCQlyZXQgPSAtRVBFUk07CisJCQlnb3RvIG91dDI7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQkvKiBzZXQgaW5pdGlhbCBtdHUgYmVmb3JlIGVuYWJsaW5nIHRoZSBkZXZpY2UgKi8KKwkJc3RhdHVzID0gdnhnZV9od192cGF0aF9tdHVfc2V0KHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUsCisJCQkJCQl2ZGV2LT5tdHUpOworCQlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXM6IGZhdGFsOiBjYW4gbm90IHNldCBuZXcgTVRVIiwgZGV2LT5uYW1lKTsKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWdvdG8gb3V0MjsKKwkJfQorCX0KKworCVZYR0VfREVWSUNFX0RFQlVHX0xFVkVMX1NFVChWWEdFX1RSQUNFLCBWWEdFX0NPTVBPTkVOVF9MTCwgdmRldik7CisJdnhnZV9kZWJ1Z19pbml0KHZkZXYtPmxldmVsX3RyYWNlLAorCQkiJXM6IE1UVSBpcyAlZCIsIHZkZXYtPm5kZXYtPm5hbWUsIHZkZXYtPm10dSk7CisJVlhHRV9ERVZJQ0VfREVCVUdfTEVWRUxfU0VUKFZYR0VfRVJSLCBWWEdFX0NPTVBPTkVOVF9MTCwgdmRldik7CisKKwkvKiBSZXByb2dyYW0gdGhlIERBIHRhYmxlIHdpdGggcG9wdWxhdGVkIG1hYyBhZGRyZXNzZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQl2eGdlX3Jlc3RvcmVfdnBhdGhfbWFjX2FkZHIoJnZkZXYtPnZwYXRoc1tpXSk7CisJCXZ4Z2VfcmVzdG9yZV92cGF0aF92aWRfdGFibGUoJnZkZXYtPnZwYXRoc1tpXSk7CisJfQorCisJLyogRW5hYmxlIHZwYXRoIHRvIHNuaWZmIGFsbCB1bmljYXN0L211bHRpY2FzdCB0cmFmZmljIHRoYXQgbm90CisJICogYWRkcmVzc2VkIHRvIHRoZW0uIFdlIGFsbG93IHByb21pc2NvdXMgbW9kZSBmb3IgUEYgb25seQorCSAqLworCisJdmFsNjQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspCisJCXZhbDY0IHw9IFZYR0VfSFdfUlhNQUNfQVVUSE9SSVpFX0FMTF9BRERSX1ZQKGkpOworCisJdnhnZV9od19tZ210X3JlZ193cml0ZSh2ZGV2LT5kZXZoLAorCQl2eGdlX2h3X21nbXRfcmVnX3R5cGVfbXJwY2ltLAorCQkwLAorCQkodWxvbmcpb2Zmc2V0b2Yoc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZywKKwkJCXJ4bWFjX2F1dGhvcml6ZV9hbGxfYWRkciksCisJCXZhbDY0KTsKKworCXZ4Z2VfaHdfbWdtdF9yZWdfd3JpdGUodmRldi0+ZGV2aCwKKwkJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSwKKwkJMCwKKwkJKHVsb25nKW9mZnNldG9mKHN0cnVjdCB2eGdlX2h3X21ycGNpbV9yZWcsCisJCQlyeG1hY19hdXRob3JpemVfYWxsX3ZpZCksCisJCXZhbDY0KTsKKworCXZ4Z2Vfc2V0X211bHRpY2FzdChkZXYpOworCisJLyogRW5hYmxpbmcgQmNhc3QgYW5kIG1jYXN0IGZvciBhbGwgdnBhdGggKi8KKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX2JjYXN0X2VuYWJsZSh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlcyA6IENhbiBub3QgZW5hYmxlIGJjYXN0IGZvciB2cGF0aCAiCisJCQkJImlkICVkIiwgZGV2LT5uYW1lLCBpKTsKKwkJaWYgKHZkZXYtPmNvbmZpZy5hZGRyX2xlYXJuX2VuKSB7CisJCQlzdGF0dXMgPQorCQkJICAgIHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZW5hYmxlKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQkJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkJIiVzIDogQ2FuIG5vdCBlbmFibGUgbWNhc3QgZm9yIHZwYXRoICIKKwkJCQkJImlkICVkIiwgZGV2LT5uYW1lLCBpKTsKKwkJfQorCX0KKworCXZ4Z2VfaHdfZGV2aWNlX3NldHBhdXNlX2RhdGEodmRldi0+ZGV2aCwgMCwKKwkJdmRldi0+Y29uZmlnLnR4X3BhdXNlX2VuYWJsZSwKKwkJdmRldi0+Y29uZmlnLnJ4X3BhdXNlX2VuYWJsZSk7CisKKwlpZiAodmRldi0+dnBfcmVzZXRfdGltZXIuZnVuY3Rpb24gPT0gTlVMTCkKKwkJdnhnZV9vc190aW1lcih2ZGV2LT52cF9yZXNldF90aW1lciwKKwkJCXZ4Z2VfcG9sbF92cF9yZXNldCwgdmRldiwgKEhaLzIpKTsKKworCWlmICh2ZGV2LT52cF9sb2NrdXBfdGltZXIuZnVuY3Rpb24gPT0gTlVMTCkKKwkJdnhnZV9vc190aW1lcih2ZGV2LT52cF9sb2NrdXBfdGltZXIsCisJCQl2eGdlX3BvbGxfdnBfbG9ja3VwLCB2ZGV2LCAoSFovMikpOworCisJc2V0X2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwgJnZkZXYtPnN0YXRlKTsKKworCXNtcF93bWIoKTsKKworCWlmICh2eGdlX2h3X2RldmljZV9saW5rX3N0YXRlX2dldCh2ZGV2LT5kZXZoKSA9PSBWWEdFX0hXX0xJTktfVVApIHsKKwkJbmV0aWZfY2Fycmllcl9vbih2ZGV2LT5uZGV2KTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTGluayBVcFxuIiwgdmRldi0+bmRldi0+bmFtZSk7CisJCXZkZXYtPnN0YXRzLmxpbmtfdXArKzsKKwl9CisKKwl2eGdlX2h3X2RldmljZV9pbnRyX2VuYWJsZSh2ZGV2LT5kZXZoKTsKKworCXNtcF93bWIoKTsKKworCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKSB7CisJCXZ4Z2VfaHdfdnBhdGhfZW5hYmxlKHZkZXYtPnZwYXRoc1tpXS5oYW5kbGUpOworCQlzbXBfd21iKCk7CisJCXZ4Z2VfaHdfdnBhdGhfcnhfZG9vcmJlbGxfaW5pdCh2ZGV2LT52cGF0aHNbaV0uaGFuZGxlKTsKKwl9CisKKwl2eGdlX3N0YXJ0X2FsbF90eF9xdWV1ZSh2ZGV2KTsKKwlnb3RvIG91dDA7CisKK291dDI6CisJdnhnZV9yZW1faXNyKHZkZXYpOworCisJLyogRGlzYWJsZSBuYXBpICovCisJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgIT0gTVNJX1gpCisJCW5hcGlfZGlzYWJsZSgmdmRldi0+bmFwaSk7CisJZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQkJbmFwaV9kaXNhYmxlKCZ2ZGV2LT52cGF0aHNbaV0ucmluZy5uYXBpKTsKKwl9CisKK291dDE6CisJdnhnZV9jbG9zZV92cGF0aHModmRldiwgMCk7CitvdXQwOgorCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCQkJIiVzOiAlczolZCAgRXhpdGluZy4uLiIsCisJCQkJZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCXJldHVybiByZXQ7Cit9CisKKy8qIExvb3AgdGhyb3VnaHQgdGhlIG1hYyBhZGRyZXNzIGxpc3QgYW5kIGRlbGV0ZSBhbGwgdGhlIGVudHJpZXMgKi8KK3ZvaWQgdnhnZV9mcmVlX21hY19hZGRfbGlzdChzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgpCit7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSwgKm5leHQ7CisJaWYgKGxpc3RfZW1wdHkoJnZwYXRoLT5tYWNfYWRkcl9saXN0KSkKKwkJcmV0dXJuOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCBuZXh0LCAmdnBhdGgtPm1hY19hZGRyX2xpc3QpIHsKKwkJbGlzdF9kZWwoZW50cnkpOworCQlrZnJlZSgoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopZW50cnkpOworCX0KK30KKworc3RhdGljIHZvaWQgdnhnZV9uYXBpX2RlbF9hbGwoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpCit7CisJaW50IGk7CisJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgIT0gTVNJX1gpCisJCW5ldGlmX25hcGlfZGVsKCZ2ZGV2LT5uYXBpKTsKKwllbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCQluZXRpZl9uYXBpX2RlbCgmdmRldi0+dnBhdGhzW2ldLnJpbmcubmFwaSk7CisJfQorCXJldHVybjsKK30KKworaW50IGRvX3Z4Z2VfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRvX2lvKQoreworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldjsKKwlpbnQgaTsKKwl1NjQgdmFsNjQsIHZwYXRoX3ZlY3RvcjsKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6ICVzOiVkIiwKKwkJZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisJaGxkZXYgPSAoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKikgcGNpX2dldF9kcnZkYXRhKHZkZXYtPnBkZXYpOworCisJLyogSWYgdnhnZV9oYW5kbGVfY3JpdF9lcnIgdGFzayBpcyBleGVjdXRpbmcsCisJICogd2FpdCB0aWxsIGl0IGNvbXBsZXRlcy4gKi8KKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX1ZYR0VfU1RBVEVfUkVTRVRfQ0FSRCwgJnZkZXYtPnN0YXRlKSkKKwkJbXNsZWVwKDUwKTsKKworCWNsZWFyX2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwgJnZkZXYtPnN0YXRlKTsKKwlpZiAoZG9faW8pIHsKKwkJLyogUHV0IHRoZSB2cGF0aCBiYWNrIGluIG5vcm1hbCBtb2RlICovCisJCXZwYXRoX3ZlY3RvciA9IHZ4Z2VfbUJJVCh2ZGV2LT52cGF0aHNbMF0uZGV2aWNlX2lkKTsKKwkJc3RhdHVzID0gdnhnZV9od19tZ210X3JlZ19yZWFkKHZkZXYtPmRldmgsCisJCQkJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSwKKwkJCQkwLAorCQkJCSh1bG9uZylvZmZzZXRvZigKKwkJCQkJc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZywKKwkJCQkJcnRzX21ncl9jYmFzaW5fY2ZnKSwKKwkJCQkmdmFsNjQpOworCisJCWlmIChzdGF0dXMgPT0gVlhHRV9IV19PSykgeworCQkJdmFsNjQgJj0gfnZwYXRoX3ZlY3RvcjsKKwkJCXN0YXR1cyA9IHZ4Z2VfaHdfbWdtdF9yZWdfd3JpdGUodmRldi0+ZGV2aCwKKwkJCQkJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSwKKwkJCQkJMCwKKwkJCQkJKHVsb25nKW9mZnNldG9mKAorCQkJCQkJc3RydWN0IHZ4Z2VfaHdfbXJwY2ltX3JlZywKKwkJCQkJCXJ0c19tZ3JfY2Jhc2luX2NmZyksCisJCQkJCXZhbDY0KTsKKwkJfQorCisJCS8qIFJlbW92ZSB0aGUgZnVuY3Rpb24gMCBmcm9tIHByb21pc2NvdXMgbW9kZSAqLworCQl2eGdlX2h3X21nbXRfcmVnX3dyaXRlKHZkZXYtPmRldmgsCisJCQl2eGdlX2h3X21nbXRfcmVnX3R5cGVfbXJwY2ltLAorCQkJMCwKKwkJCSh1bG9uZylvZmZzZXRvZihzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnLAorCQkJCXJ4bWFjX2F1dGhvcml6ZV9hbGxfYWRkciksCisJCQkwKTsKKworCQl2eGdlX2h3X21nbXRfcmVnX3dyaXRlKHZkZXYtPmRldmgsCisJCQl2eGdlX2h3X21nbXRfcmVnX3R5cGVfbXJwY2ltLAorCQkJMCwKKwkJCSh1bG9uZylvZmZzZXRvZihzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnLAorCQkJCXJ4bWFjX2F1dGhvcml6ZV9hbGxfdmlkKSwKKwkJCTApOworCisJCXNtcF93bWIoKTsKKwl9CisJZGVsX3RpbWVyX3N5bmMoJnZkZXYtPnZwX2xvY2t1cF90aW1lcik7CisKKwlkZWxfdGltZXJfc3luYygmdmRldi0+dnBfcmVzZXRfdGltZXIpOworCisJLyogRGlzYWJsZSBuYXBpICovCisJaWYgKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUgIT0gTVNJX1gpCisJCW5hcGlfZGlzYWJsZSgmdmRldi0+bmFwaSk7CisJZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCB2ZGV2LT5ub19vZl92cGF0aDsgaSsrKQorCQkJbmFwaV9kaXNhYmxlKCZ2ZGV2LT52cGF0aHNbaV0ucmluZy5uYXBpKTsKKwl9CisKKwluZXRpZl9jYXJyaWVyX29mZih2ZGV2LT5uZGV2KTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBMaW5rIERvd25cbiIsIHZkZXYtPm5kZXYtPm5hbWUpOworCXZ4Z2Vfc3RvcF9hbGxfdHhfcXVldWUodmRldik7CisKKwkvKiBOb3RlIHRoYXQgYXQgdGhpcyBwb2ludCB4bWl0KCkgaXMgc3RvcHBlZCBieSB1cHBlciBsYXllciAqLworCWlmIChkb19pbykKKwkJdnhnZV9od19kZXZpY2VfaW50cl9kaXNhYmxlKHZkZXYtPmRldmgpOworCisJbWRlbGF5KDEwMDApOworCisJdnhnZV9yZW1faXNyKHZkZXYpOworCisJdnhnZV9uYXBpX2RlbF9hbGwodmRldik7CisKKwlpZiAoZG9faW8pCisJCXZ4Z2VfcmVzZXRfYWxsX3ZwYXRocyh2ZGV2KTsKKworCXZ4Z2VfY2xvc2VfdnBhdGhzKHZkZXYsIDApOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiAlczolZCAgRXhpdGluZy4uLiIsIGRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCWNsZWFyX2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwgJmRyaXZlcl9jb25maWctPmludGFfZGV2X29wZW4pOworCWNsZWFyX2JpdChfX1ZYR0VfU1RBVEVfUkVTRVRfQ0FSRCwgJnZkZXYtPnN0YXRlKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHZ4Z2VfY2xvc2UKKyAqIEBkZXY6IGRldmljZSBwb2ludGVyLgorICoKKyAqIFRoaXMgaXMgdGhlIHN0b3AgZW50cnkgcG9pbnQgb2YgdGhlIGRyaXZlci4gSXQgbmVlZHMgdG8gdW5kbyBleGFjdGx5CisgKiB3aGF0ZXZlciB3YXMgZG9uZSBieSB0aGUgb3BlbiBlbnRyeSBwb2ludCwgdGh1cyBpdCdzIHVzdWFsbHkgcmVmZXJyZWQgdG8KKyAqIGFzIHRoZSBjbG9zZSBmdW5jdGlvbi5BbW9uZyBvdGhlciB0aGluZ3MgdGhpcyBmdW5jdGlvbiBtYWlubHkgc3RvcHMgdGhlCisgKiBSeCBzaWRlIG9mIHRoZSBOSUMgYW5kIGZyZWVzIGFsbCB0aGUgUnggYnVmZmVycyBpbiB0aGUgUnggcmluZ3MuCisgKiBSZXR1cm4gdmFsdWU6ICcwJyBvbiBzdWNjZXNzIGFuZCBhbiBhcHByb3ByaWF0ZSAoLSl2ZSBpbnRlZ2VyIGFzCisgKiBkZWZpbmVkIGluIGVycm5vLmggZmlsZSBvbiBmYWlsdXJlLgorICovCitpbnQKK3Z4Z2VfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlkb192eGdlX2Nsb3NlKGRldiwgMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdnhnZV9jaGFuZ2VfbXR1CisgKiBAZGV2OiBuZXQgZGV2aWNlIHBvaW50ZXIuCisgKiBAbmV3X210dSA6dGhlIG5ldyBNVFUgc2l6ZSBmb3IgdGhlIGRldmljZS4KKyAqCisgKiBBIGRyaXZlciBlbnRyeSBwb2ludCB0byBjaGFuZ2UgTVRVIHNpemUgZm9yIHRoZSBkZXZpY2UuIEJlZm9yZSBjaGFuZ2luZworICogdGhlIE1UVSB0aGUgZGV2aWNlIG11c3QgYmUgc3RvcHBlZC4KKyAqLworc3RhdGljIGludCB2eGdlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQodmRldi0+bGV2ZWxfdHJhY2UsCisJCSIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJaWYgKChuZXdfbXR1IDwgVlhHRV9IV19NSU5fTVRVKSB8fCAobmV3X210dSA+IFZYR0VfSFdfTUFYX01UVSkpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KHZkZXYtPmxldmVsX2VyciwKKwkJCSIlczogbXR1IHNpemUgaXMgaW52YWxpZCIsIGRldi0+bmFtZSk7CisJCXJldHVybiAtRVBFUk07CisJfQorCisJLyogY2hlY2sgaWYgZGV2aWNlIGlzIGRvd24gYWxyZWFkeSAqLworCWlmICh1bmxpa2VseSghaXNfdnhnZV9jYXJkX3VwKHZkZXYpKSkgeworCQkvKiBqdXN0IHN0b3JlIG5ldyB2YWx1ZSwgd2lsbCB1c2UgbGF0ZXIgb24gb3BlbigpICovCisJCWRldi0+bXR1ID0gbmV3X210dTsKKwkJdnhnZV9kZWJ1Z19pbml0KHZkZXYtPmxldmVsX2VyciwKKwkJCSIlcyIsICJkZXZpY2UgaXMgZG93biBvbiBNVFUgY2hhbmdlIik7CisJCXJldHVybiAwOworCX0KKworCXZ4Z2VfZGVidWdfaW5pdCh2ZGV2LT5sZXZlbF90cmFjZSwKKwkJInRyeWluZyB0byBhcHBseSBuZXcgTVRVICVkIiwgbmV3X210dSk7CisKKwlpZiAodnhnZV9jbG9zZShkZXYpKQorCQlyZXR1cm4gLUVJTzsKKworCWRldi0+bXR1ID0gbmV3X210dTsKKwl2ZGV2LT5tdHUgPSBuZXdfbXR1OworCisJaWYgKHZ4Z2Vfb3BlbihkZXYpKQorCQlyZXR1cm4gLUVJTzsKKworCXZ4Z2VfZGVidWdfaW5pdCh2ZGV2LT5sZXZlbF90cmFjZSwKKwkJIiVzOiBNVFUgY2hhbmdlZCB0byAlZCIsIHZkZXYtPm5kZXYtPm5hbWUsIG5ld19tdHUpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQodmRldi0+bGV2ZWxfdHJhY2UsCisJCSIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB2eGdlX2dldF9zdGF0cworICogQGRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFVwZGF0ZXMgdGhlIGRldmljZSBzdGF0aXN0aWNzIHN0cnVjdHVyZS4gVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBkZXZpY2UKKyAqIHN0YXRpc3RpY3Mgc3RydWN0dXJlIGluIHRoZSBuZXRfZGV2aWNlIHN0cnVjdHVyZSBhbmQgcmV0dXJucyBhIHBvaW50ZXIKKyAqIHRvIHRoZSBzYW1lLgorICovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKgordnhnZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0X3N0YXRzOworCWludCBrOworCisJdmRldiA9IG5ldGRldl9wcml2KGRldik7CisKKwluZXRfc3RhdHMgPSAmdmRldi0+c3RhdHMubmV0X3N0YXRzOworCisJbWVtc2V0KG5ldF9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CisKKwlmb3IgKGsgPSAwOyBrIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGsrKykgeworCQluZXRfc3RhdHMtPnJ4X3BhY2tldHMgKz0gdmRldi0+dnBhdGhzW2tdLnJpbmcuc3RhdHMucnhfZnJtczsKKwkJbmV0X3N0YXRzLT5yeF9ieXRlcyArPSB2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9ieXRlczsKKwkJbmV0X3N0YXRzLT5yeF9lcnJvcnMgKz0gdmRldi0+dnBhdGhzW2tdLnJpbmcuc3RhdHMucnhfZXJyb3JzOworCQluZXRfc3RhdHMtPm11bHRpY2FzdCArPSB2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9tY2FzdDsKKwkJbmV0X3N0YXRzLT5yeF9kcm9wcGVkICs9CisJCQl2ZGV2LT52cGF0aHNba10ucmluZy5zdGF0cy5yeF9kcm9wcGVkOworCisJCW5ldF9zdGF0cy0+dHhfcGFja2V0cyArPSB2ZGV2LT52cGF0aHNba10uZmlmby5zdGF0cy50eF9mcm1zOworCQluZXRfc3RhdHMtPnR4X2J5dGVzICs9IHZkZXYtPnZwYXRoc1trXS5maWZvLnN0YXRzLnR4X2J5dGVzOworCQluZXRfc3RhdHMtPnR4X2Vycm9ycyArPSB2ZGV2LT52cGF0aHNba10uZmlmby5zdGF0cy50eF9lcnJvcnM7CisJfQorCisJcmV0dXJuIG5ldF9zdGF0czsKK30KKworLyoqCisgKiB2eGdlX2lvY3RsCisgKiBAZGV2OiBEZXZpY2UgcG9pbnRlci4KKyAqIEBpZnI6IEFuIElPQ1RMIHNwZWNpZmljIHN0cnVjdHVyZSwgdGhhdCBjYW4gY29udGFpbiBhIHBvaW50ZXIgdG8KKyAqICAgICAgIGEgcHJvcHJpZXRhcnkgc3RydWN0dXJlIHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiB0byB0aGUgZHJpdmVyLgorICogQGNtZDogVGhpcyBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGRpZmZlcmVudCBjb21tYW5kcyB0aGF0CisgKiAgICAgICBjYW4gYmUgcGFzc2VkIHRvIHRoZSBJT0NUTCBmdW5jdGlvbnMuCisgKgorICogRW50cnkgcG9pbnQgZm9yIHRoZSBJb2N0bC4KKyAqLworc3RhdGljIGludCB2eGdlX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCisvKioKKyAqIHZ4Z2VfdHhfd2F0Y2hkb2cKKyAqIEBkZXY6IHBvaW50ZXIgdG8gbmV0IGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBXYXRjaGRvZyBmb3IgdHJhbnNtaXQgc2lkZS4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIGlmIHRoZSBUeCBRdWV1ZSBpcyBzdG9wcGVkCisgKiBmb3IgYSBwcmUtZGVmaW5lZCBhbW91bnQgb2YgdGltZSB3aGVuIHRoZSBJbnRlcmZhY2UgaXMgc3RpbGwgdXAuCisgKi8KK3N0YXRpYyB2b2lkCit2eGdlX3R4X3dhdGNoZG9nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLCAiJXM6JWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJdmRldiA9IChzdHJ1Y3QgdnhnZWRldiAqKW5ldGRldl9wcml2KGRldik7CisKKwl2ZGV2LT5jcmljX2Vycl9ldmVudCA9IFZYR0VfSFdfRVZFTlRfUkVTRVRfU1RBUlQ7CisKKwl2eGdlX3Jlc2V0KHZkZXYpOworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsCisJCSIlczolZCAgRXhpdGluZy4uLiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKKy8qKgorICogdnhnZV92bGFuX3J4X3JlZ2lzdGVyCisgKiBAZGV2OiBuZXQgZGV2aWNlIHBvaW50ZXIuCisgKiBAZ3JwOiB2bGFuIGdyb3VwCisgKgorICogVmxhbiBncm91cCByZWdpc3RyYXRpb24KKyAqLworc3RhdGljIHZvaWQKK3Z4Z2Vfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aDsKKwlpbnQgdnA7CisJdTY0IHZpZDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlpbnQgaTsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKworCXZwYXRoID0gJnZkZXYtPnZwYXRoc1swXTsKKwlpZiAoKE5VTEwgPT0gZ3JwKSAmJiAodnBhdGgtPmlzX29wZW4pKSB7CisJCS8qIEdldCB0aGUgZmlyc3QgdmxhbiAqLworCQlzdGF0dXMgPSB2eGdlX2h3X3ZwYXRoX3ZpZF9nZXQodnBhdGgtPmhhbmRsZSwgJnZpZCk7CisKKwkJd2hpbGUgKHN0YXR1cyA9PSBWWEdFX0hXX09LKSB7CisKKwkJCS8qIERlbGV0ZSB0aGlzIHZsYW4gZnJvbSB0aGUgdmlkIHRhYmxlICovCisJCQlmb3IgKHZwID0gMDsgdnAgPCB2ZGV2LT5ub19vZl92cGF0aDsgdnArKykgeworCQkJCXZwYXRoID0gJnZkZXYtPnZwYXRoc1t2cF07CisJCQkJaWYgKCF2cGF0aC0+aXNfb3BlbikKKwkJCQkJY29udGludWU7CisKKwkJCQl2eGdlX2h3X3ZwYXRoX3ZpZF9kZWxldGUodnBhdGgtPmhhbmRsZSwgdmlkKTsKKwkJCX0KKworCQkJLyogR2V0IHRoZSBuZXh0IHZsYW4gdG8gYmUgZGVsZXRlZCAqLworCQkJdnBhdGggPSAmdmRldi0+dnBhdGhzWzBdOworCQkJc3RhdHVzID0gdnhnZV9od192cGF0aF92aWRfZ2V0KHZwYXRoLT5oYW5kbGUsICZ2aWQpOworCQl9CisJfQorCisJdmRldi0+dmxncnAgPSBncnA7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQlpZiAodmRldi0+dnBhdGhzW2ldLmlzX2NvbmZpZ3VyZWQpCisJCQl2ZGV2LT52cGF0aHNbaV0ucmluZy52bGdycCA9IGdycDsKKwl9CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChWWEdFX1RSQUNFLAorCQkiJXM6JWQgIEV4aXRpbmcuLi4iLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCisvKioKKyAqIHZ4Z2Vfdmxhbl9yeF9hZGRfdmlkCisgKiBAZGV2OiBuZXQgZGV2aWNlIHBvaW50ZXIuCisgKiBAdmlkOiB2aWQKKyAqCisgKiBBZGQgdGhlIHZsYW4gaWQgdG8gdGhlIGRldmljZXMgdmxhbiBpZCB0YWJsZQorICovCitzdGF0aWMgdm9pZAordnhnZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQoreworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCXN0cnVjdCB2eGdlX3ZwYXRoICp2cGF0aDsKKwlpbnQgdnBfaWQ7CisKKwl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIEFkZCB0aGVzZSB2bGFuIHRvIHRoZSB2aWQgdGFibGUgKi8KKwlmb3IgKHZwX2lkID0gMDsgdnBfaWQgPCB2ZGV2LT5ub19vZl92cGF0aDsgdnBfaWQrKykgeworCQl2cGF0aCA9ICZ2ZGV2LT52cGF0aHNbdnBfaWRdOworCQlpZiAoIXZwYXRoLT5pc19vcGVuKQorCQkJY29udGludWU7CisJCXZ4Z2VfaHdfdnBhdGhfdmlkX2FkZCh2cGF0aC0+aGFuZGxlLCB2aWQpOworCX0KK30KKworLyoqCisgKiB2eGdlX3ZsYW5fcnhfYWRkX3ZpZAorICogQGRldjogbmV0IGRldmljZSBwb2ludGVyLgorICogQHZpZDogdmlkCisgKgorICogUmVtb3ZlIHRoZSB2bGFuIGlkIGZyb20gdGhlIGRldmljZSdzIHZsYW4gaWQgdGFibGUKKyAqLworc3RhdGljIHZvaWQKK3Z4Z2Vfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCB2aWQpCit7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoOworCWludCB2cF9pZDsKKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwl2ZGV2ID0gKHN0cnVjdCB2eGdlZGV2ICopbmV0ZGV2X3ByaXYoZGV2KTsKKworCXZsYW5fZ3JvdXBfc2V0X2RldmljZSh2ZGV2LT52bGdycCwgdmlkLCBOVUxMKTsKKworCS8qIERlbGV0ZSB0aGlzIHZsYW4gZnJvbSB0aGUgdmlkIHRhYmxlICovCisJZm9yICh2cF9pZCA9IDA7IHZwX2lkIDwgdmRldi0+bm9fb2ZfdnBhdGg7IHZwX2lkKyspIHsKKwkJdnBhdGggPSAmdmRldi0+dnBhdGhzW3ZwX2lkXTsKKwkJaWYgKCF2cGF0aC0+aXNfb3BlbikKKwkJCWNvbnRpbnVlOworCQl2eGdlX2h3X3ZwYXRoX3ZpZF9kZWxldGUodnBhdGgtPmhhbmRsZSwgdmlkKTsKKwl9CisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwKKwkJIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2eGdlX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgICAgICAgICAgPSB2eGdlX29wZW4sCisJLm5kb19zdG9wICAgICAgICAgICAgICAgPSB2eGdlX2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzICAgICAgICAgID0gdnhnZV9nZXRfc3RhdHMsCisJLm5kb19zdGFydF94bWl0ICAgICAgICAgPSB2eGdlX3htaXQsCisJLm5kb192YWxpZGF0ZV9hZGRyICAgICAgPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHZ4Z2Vfc2V0X211bHRpY2FzdCwKKworCS5uZG9fZG9faW9jdGwgICAgICAgICAgID0gdnhnZV9pb2N0bCwKKworCS5uZG9fc2V0X21hY19hZGRyZXNzICAgID0gdnhnZV9zZXRfbWFjX2FkZHIsCisJLm5kb19jaGFuZ2VfbXR1ICAgICAgICAgPSB2eGdlX2NoYW5nZV9tdHUsCisJLm5kb192bGFuX3J4X3JlZ2lzdGVyICAgPSB2eGdlX3ZsYW5fcnhfcmVnaXN0ZXIsCisJLm5kb192bGFuX3J4X2tpbGxfdmlkICAgPSB2eGdlX3ZsYW5fcnhfa2lsbF92aWQsCisJLm5kb192bGFuX3J4X2FkZF92aWQJPSB2eGdlX3ZsYW5fcnhfYWRkX3ZpZCwKKworCS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gdnhnZV90eF93YXRjaGRvZywKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyICAgID0gdnhnZV9uZXRwb2xsLAorI2VuZGlmCit9OworCitpbnQgX19kZXZpbml0IHZ4Z2VfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiwKKwkJCQkgICBzdHJ1Y3QgdnhnZV9jb25maWcgKmNvbmZpZywKKwkJCQkgICBpbnQgaGlnaF9kbWEsIGludCBub19vZl92cGF0aCwKKwkJCQkgICBzdHJ1Y3QgdnhnZWRldiAqKnZkZXZfb3V0KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwlpbnQgaSwgcmV0ID0gMCwgbm9fb2ZfcXVldWUgPSAxOworCXU2NCBzdGF0OworCisJKnZkZXZfb3V0ID0gTlVMTDsKKwlpZiAoY29uZmlnLT50eF9zdGVlcmluZ190eXBlID09IFRYX01VTFRJUV9TVEVFUklORykKKwkJbm9fb2ZfcXVldWUgPSBub19vZl92cGF0aDsKKworCW5kZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IHZ4Z2VkZXYpLAorCQkJbm9fb2ZfcXVldWUpOworCWlmIChuZGV2ID09IE5VTEwpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KAorCQkJdnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKKwkJIiVzIDogZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkIiwgX19mdW5jX18pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIF9vdXQwOworCX0KKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KAorCQl2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoaGxkZXYpLAorCQkiJXM6ICVzOiVkICBFbnRlcmluZy4uLiIsCisJCW5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwl2ZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJbWVtc2V0KHZkZXYsIDAsIHNpemVvZihzdHJ1Y3QgdnhnZWRldikpOworCisJdmRldi0+bmRldiA9IG5kZXY7CisJdmRldi0+ZGV2aCA9IGhsZGV2OworCXZkZXYtPnBkZXYgPSBobGRldi0+cGRldjsKKwltZW1jcHkoJnZkZXYtPmNvbmZpZywgY29uZmlnLCBzaXplb2Yoc3RydWN0IHZ4Z2VfY29uZmlnKSk7CisJdmRldi0+cnhfY3N1bSA9IDE7CS8qIEVuYWJsZSBSeCBDU1VNIGJ5IGRlZmF1bHQuICovCisKKwlTRVRfTkVUREVWX0RFVihuZGV2LCAmdmRldi0+cGRldi0+ZGV2KTsKKworCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8CisJCQkJTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKKwkvKiAgRHJpdmVyIGVudHJ5IHBvaW50cyAqLworCW5kZXYtPmlycSA9IHZkZXYtPnBkZXYtPmlycTsKKwluZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZykgaGxkZXYtPmJhcjA7CisKKwluZGV2LT5uZXRkZXZfb3BzID0gJnZ4Z2VfbmV0ZGV2X29wczsKKworCW5kZXYtPndhdGNoZG9nX3RpbWVvID0gVlhHRV9MTF9XQVRDSF9ET0dfVElNRU9VVDsKKworCWluaXRpYWxpemVfZXRodG9vbF9vcHMobmRldik7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHZwYXRoICovCisJdmRldi0+dnBhdGhzID0ga3phbGxvYygoc2l6ZW9mKHN0cnVjdCB2eGdlX3ZwYXRoKSkgKgorCQkJCW5vX29mX3ZwYXRoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZkZXYtPnZwYXRocykgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXM6IHZwYXRoIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCIsCisJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBfb3V0MTsKKwl9CisKKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHOworCisJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNOworCXZ4Z2VfZGVidWdfaW5pdCh2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoaGxkZXYpLAorCQkiJXMgOiBjaGVja3N1bWluZyBlbmFibGVkIiwgX19mdW5jX18pOworCisJaWYgKGhpZ2hfZG1hKSB7CisJCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKwkJdnhnZV9kZWJ1Z19pbml0KHZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldChobGRldiksCisJCQkiJXMgOiB1c2luZyBIaWdoIERNQSIsIF9fZnVuY19fKTsKKwl9CisKKwluZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNjsKKworCWlmICh2ZGV2LT5jb25maWcuZ3JvX2VuYWJsZSkKKwkJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CisKKwlpZiAodmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPT0gVFhfTVVMVElRX1NURUVSSU5HKQorCQluZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSBub19vZl92cGF0aDsKKworI2lmZGVmIE5FVElGX0ZfTExUWAorCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IG5vX29mX3ZwYXRoOyBpKyspCisJCXNwaW5fbG9ja19pbml0KCZ2ZGV2LT52cGF0aHNbaV0uZmlmby50eF9sb2NrKTsKKworCWlmIChyZWdpc3Rlcl9uZXRkZXYobmRldikpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KHZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldChobGRldiksCisJCQkiJXM6ICVzIDogZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQhIiwKKwkJCW5kZXYtPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBfb3V0MjsKKwl9CisKKwkvKiAgU2V0IHRoZSBmYWN0b3J5IGRlZmluZWQgTUFDIGFkZHJlc3MgaW5pdGlhbGx5ICovCisJbmRldi0+YWRkcl9sZW4gPSBFVEhfQUxFTjsKKworCS8qIE1ha2UgTGluayBzdGF0ZSBhcyBvZmYgYXQgdGhpcyBwb2ludCwgd2hlbiB0aGUgTGluayBjaGFuZ2UKKwkgKiBpbnRlcnJ1cHQgY29tZXMgdGhlIHN0YXRlIHdpbGwgYmUgYXV0b21hdGljYWxseSBjaGFuZ2VkIHRvCisJICogdGhlIHJpZ2h0IHN0YXRlLgorCSAqLworCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOworCisJdnhnZV9kZWJ1Z19pbml0KHZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldChobGRldiksCisJCSIlczogRXRoZXJuZXQgZGV2aWNlIHJlZ2lzdGVyZWQiLAorCQluZGV2LT5uYW1lKTsKKworCSp2ZGV2X291dCA9IHZkZXY7CisKKwkvKiBSZXNldHRpbmcgdGhlIERldmljZSBzdGF0cyAqLworCXN0YXR1cyA9IHZ4Z2VfaHdfbXJwY2ltX3N0YXRzX2FjY2VzcygKKwkJCQlobGRldiwKKwkJCQlWWEdFX0hXX1NUQVRTX09QX0NMRUFSX0FMTF9TVEFUUywKKwkJCQkwLAorCQkJCTAsCisJCQkJJnN0YXQpOworCisJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX0VSUl9QUklWSUxBR0VEX09QRUFSQVRJT04pCisJCXZ4Z2VfZGVidWdfaW5pdCgKKwkJCXZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldChobGRldiksCisJCQkiJXM6IGRldmljZSBzdGF0cyBjbGVhciByZXR1cm5zIgorCQkJIlZYR0VfSFdfRVJSX1BSSVZJTEFHRURfT1BFQVJBVElPTiIsIG5kZXYtPm5hbWUpOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQodnhnZV9od19kZXZpY2VfdHJhY2VfbGV2ZWxfZ2V0KGhsZGV2KSwKKwkJIiVzOiAlczolZCAgRXhpdGluZy4uLiIsCisJCW5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwlyZXR1cm4gcmV0OworX291dDI6CisJa2ZyZWUodmRldi0+dnBhdGhzKTsKK19vdXQxOgorCWZyZWVfbmV0ZGV2KG5kZXYpOworX291dDA6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHZ4Z2VfZGV2aWNlX3VucmVnaXN0ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdW5yZWdpc3RlciBhbmQgZnJlZSBuZXR3b3JrIGRldmljZQorICovCit2b2lkCit2eGdlX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwlzdHJ1Y3QgdnhnZWRldiAqdmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWNoYXIgYnVmW0lGTkFNU0laXTsKKyNpZiAoKFZYR0VfREVCVUdfSU5JVCAmIFZYR0VfREVCVUdfTUFTSykgfHwgXAorCShWWEdFX0RFQlVHX0VOVFJZRVhJVCAmIFZYR0VfREVCVUdfTUFTSykpCisJdTMyIGxldmVsX3RyYWNlOworI2VuZGlmCisKKwlkZXYgPSBobGRldi0+bmRldjsKKwl2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKyNpZiAoKFZYR0VfREVCVUdfSU5JVCAmIFZYR0VfREVCVUdfTUFTSykgfHwgXAorCShWWEdFX0RFQlVHX0VOVFJZRVhJVCAmIFZYR0VfREVCVUdfTUFTSykpCisJbGV2ZWxfdHJhY2UgPSB2ZGV2LT5sZXZlbF90cmFjZTsKKyNlbmRpZgorCXZ4Z2VfZGVidWdfZW50cnlleGl0KGxldmVsX3RyYWNlLAorCQkiJXM6ICVzOiVkIiwgdmRldi0+bmRldi0+bmFtZSwgX19mdW5jX18sIF9fTElORV9fKTsKKworCW1lbWNweShidWYsIHZkZXYtPm5kZXYtPm5hbWUsIElGTkFNU0laKTsKKworCS8qIGluIDIuNiB3aWxsIGNhbGwgc3RvcCgpIGlmIGRldmljZSBpcyB1cCAqLworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJdnhnZV9kZWJ1Z19pbml0KGxldmVsX3RyYWNlLCAiJXM6IGV0aGVybmV0IGRldmljZSB1bnJlZ2lzdGVyZWQiLCBidWYpOworCXZ4Z2VfZGVidWdfZW50cnlleGl0KGxldmVsX3RyYWNlLAorCQkiJXM6ICVzOiVkICBFeGl0aW5nLi4uIiwgYnVmLCBfX2Z1bmNfXywgX19MSU5FX18pOworfQorCisvKgorICogdnhnZV9jYWxsYmFja19jcml0X2VycgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBhbGFybSBoYW5kbGVyIGluIGludGVycnVwdCBjb250ZXh0LgorICogRHJpdmVyIG11c3QgYW5hbHl6ZSBpdCBiYXNlZCBvbiB0aGUgZXZlbnQgdHlwZS4KKyAqLworc3RhdGljIHZvaWQKK3Z4Z2VfY2FsbGJhY2tfY3JpdF9lcnIoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJZW51bSB2eGdlX2h3X2V2ZW50IHR5cGUsIHU2NCB2cF9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaGxkZXYtPm5kZXY7CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXYgPSAoc3RydWN0IHZ4Z2VkZXYgKiluZXRkZXZfcHJpdihkZXYpOworCWludCB2cGF0aF9pZHg7CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdCh2ZGV2LT5sZXZlbF90cmFjZSwKKwkJIiVzOiAlczolZCIsIHZkZXYtPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwkvKiBOb3RlOiBUaGlzIGV2ZW50IHR5cGUgc2hvdWxkIGJlIHVzZWQgZm9yIGRldmljZSB3aWRlCisJICogaW5kaWNhdGlvbnMgb25seSAtIFNlcmlvdXMgZXJyb3JzLCBTbG90IGZyZWV6ZSBhbmQgY3JpdGljYWwgZXJyb3JzCisJICovCisJdmRldi0+Y3JpY19lcnJfZXZlbnQgPSB0eXBlOworCisJZm9yICh2cGF0aF9pZHggPSAwOyB2cGF0aF9pZHggPCB2ZGV2LT5ub19vZl92cGF0aDsgdnBhdGhfaWR4KyspCisJCWlmICh2ZGV2LT52cGF0aHNbdnBhdGhfaWR4XS5kZXZpY2VfaWQgPT0gdnBfaWQpCisJCQlicmVhazsKKworCWlmICghdGVzdF9iaXQoX19WWEdFX1NUQVRFX1JFU0VUX0NBUkQsICZ2ZGV2LT5zdGF0ZSkpIHsKKwkJaWYgKHR5cGUgPT0gVlhHRV9IV19FVkVOVF9TTE9UX0ZSRUVaRSkgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogU2xvdCBpcyBmcm96ZW4iLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJfSBlbHNlIGlmICh0eXBlID09IFZYR0VfSFdfRVZFTlRfU0VSUikgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlczogRW5jb3VudGVyZWQgU2VyaW91cyBFcnJvciIsCisJCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBWWEdFX0hXX0VWRU5UX0NSSVRJQ0FMX0VSUikKKwkJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCQkiJXM6IEVuY291bnRlcmVkIENyaXRpY2FsIEVycm9yIiwKKwkJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwl9CisKKwlpZiAoKHR5cGUgPT0gVlhHRV9IV19FVkVOVF9TRVJSKSB8fAorCQkodHlwZSA9PSBWWEdFX0hXX0VWRU5UX1NMT1RfRlJFRVpFKSkgeworCQlpZiAodW5saWtlbHkodmRldi0+ZXhlY19tb2RlKSkKKwkJCWNsZWFyX2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwgJnZkZXYtPnN0YXRlKTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gVlhHRV9IV19FVkVOVF9DUklUSUNBTF9FUlIpIHsKKwkJdnhnZV9od19kZXZpY2VfbWFza19hbGwoaGxkZXYpOworCQlpZiAodW5saWtlbHkodmRldi0+ZXhlY19tb2RlKSkKKwkJCWNsZWFyX2JpdChfX1ZYR0VfU1RBVEVfQ0FSRF9VUCwgJnZkZXYtPnN0YXRlKTsKKwl9IGVsc2UgaWYgKCh0eXBlID09IFZYR0VfSFdfRVZFTlRfRklGT19FUlIpIHx8CisJCSAgKHR5cGUgPT0gVlhHRV9IV19FVkVOVF9WUEFUSF9FUlIpKSB7CisKKwkJaWYgKHVubGlrZWx5KHZkZXYtPmV4ZWNfbW9kZSkpCisJCQljbGVhcl9iaXQoX19WWEdFX1NUQVRFX0NBUkRfVVAsICZ2ZGV2LT5zdGF0ZSk7CisJCWVsc2UgeworCQkJLyogY2hlY2sgaWYgdGhpcyB2cGF0aCBpcyBhbHJlYWR5IHNldCBmb3IgcmVzZXQgKi8KKwkJCWlmICghdGVzdF9hbmRfc2V0X2JpdCh2cGF0aF9pZHgsICZ2ZGV2LT52cF9yZXNldCkpIHsKKworCQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBmb3IgdGhpcyB2cGF0aCAqLworCQkJCXZ4Z2VfdnBhdGhfaW50cl9kaXNhYmxlKHZkZXYsIHZwYXRoX2lkeCk7CisKKwkJCQkvKiBzdG9wIHRoZSBxdWV1ZSBmb3IgdGhpcyB2cGF0aCAqLworCQkJCXZ4Z2Vfc3RvcF90eF9xdWV1ZSgmdmRldi0+dnBhdGhzW3ZwYXRoX2lkeF0uCisJCQkJCQkJZmlmbyk7CisJCQl9CisJCX0KKwl9CisKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdCh2ZGV2LT5sZXZlbF90cmFjZSwKKwkJIiVzOiAlczolZCAgRXhpdGluZy4uLiIsCisJCXZkZXYtPm5kZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXyk7Cit9CisKK3N0YXRpYyB2b2lkIHZlcmlmeV9iYW5kd2lkdGgodm9pZCkKK3sKKwlpbnQgaSwgYmFuZF93aWR0aCwgdG90YWwgPSAwLCBlcXVhbF9wcmlvcml0eSA9IDA7CisKKwkvKiAxLiBJZiB1c2VyIGVudGVycyAwIGZvciBzb21lIGZpZm8sIGdpdmUgZXF1YWwgcHJpb3JpdHkgdG8gYWxsICovCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCQlpZiAoYndfcGVyY2VudGFnZVtpXSA9PSAwKSB7CisJCQllcXVhbF9wcmlvcml0eSA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZXF1YWxfcHJpb3JpdHkpIHsKKwkJLyogMi4gSWYgc3VtIGV4Y2VlZHMgMTAwLCBnaXZlIGVxdWFsIHByaW9yaXR5IHRvIGFsbCAqLworCQlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisJCQlpZiAoYndfcGVyY2VudGFnZVtpXSA9PSAweEZGKQorCQkJCWJyZWFrOworCisJCQl0b3RhbCArPSBid19wZXJjZW50YWdlW2ldOworCQkJaWYgKHRvdGFsID4gVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfTUFYKSB7CisJCQkJZXF1YWxfcHJpb3JpdHkgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKCFlcXVhbF9wcmlvcml0eSkgeworCQkvKiBJcyBhbGwgdGhlIGJhbmR3aWR0aCBjb25zdW1lZD8gKi8KKwkJaWYgKHRvdGFsIDwgVlhHRV9IV19WUEFUSF9CQU5EV0lEVEhfTUFYKSB7CisJCQlpZiAoaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFMpIHsKKwkJCQkvKiBTcGxpdCByZXN0IG9mIGJ3IGVxdWFsbHkgYW1vbmcgbmV4dCBWUHMqLworCQkJCWJhbmRfd2lkdGggPQorCQkJCSAgKFZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX01BWCAgLSB0b3RhbCkgLworCQkJCQkoVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUyAtIGkpOworCQkJCWlmIChiYW5kX3dpZHRoIDwgMikgLyogbWluIG9mIDIlICovCisJCQkJCWVxdWFsX3ByaW9yaXR5ID0gMTsKKwkJCQllbHNlIHsKKwkJCQkJZm9yICg7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOworCQkJCQkJaSsrKQorCQkJCQkJYndfcGVyY2VudGFnZVtpXSA9CisJCQkJCQkJYmFuZF93aWR0aDsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFMpCisJCQllcXVhbF9wcmlvcml0eSA9IDE7CisJfQorCisJaWYgKGVxdWFsX3ByaW9yaXR5KSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlczogQXNzaWduaW5nIGVxdWFsIGJhbmR3aWR0aCB0byBhbGwgdGhlIHZwYXRocyIsCisJCQlWWEdFX0RSSVZFUl9OQU1FKTsKKwkJYndfcGVyY2VudGFnZVswXSA9IFZYR0VfSFdfVlBBVEhfQkFORFdJRFRIX01BWCAvCisJCQkJCVZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7CisJCWZvciAoaSA9IDE7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspCisJCQlid19wZXJjZW50YWdlW2ldID0gYndfcGVyY2VudGFnZVswXTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBWcGF0aCBjb25maWd1cmF0aW9uCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHZ4Z2VfY29uZmlnX3ZwYXRocygKKwkJCXN0cnVjdCB2eGdlX2h3X2RldmljZV9jb25maWcgKmRldmljZV9jb25maWcsCisJCQl1NjQgdnBhdGhfbWFzaywgc3RydWN0IHZ4Z2VfY29uZmlnICpjb25maWdfcGFyYW0pCit7CisJaW50IGksIG5vX29mX3ZwYXRocyA9IDAsIGRlZmF1bHRfbm9fdnBhdGggPSAwLCB0ZW1wOworCXUzMiB0eGRsX3NpemUsIHR4ZGxfcGVyX21lbWJsb2NrOworCisJdGVtcCA9IGRyaXZlcl9jb25maWctPnZwYXRoX3Blcl9kZXY7CisJaWYgKChkcml2ZXJfY29uZmlnLT52cGF0aF9wZXJfZGV2ID09IFZYR0VfVVNFX0RFRkFVTFQpICYmCisJCShtYXhfY29uZmlnX2RldiA9PSBWWEdFX01BWF9DT05GSUdfREVWKSkgeworCQkvKiBObyBtb3JlIENQVS4gUmV0dXJuIHZwYXRoIG51bWJlciBhcyB6ZXJvLiovCisJCWlmIChkcml2ZXJfY29uZmlnLT5nX25vX2NwdXMgPT0gLTEpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoIWRyaXZlcl9jb25maWctPmdfbm9fY3B1cykKKwkJCWRyaXZlcl9jb25maWctPmdfbm9fY3B1cyA9IG51bV9vbmxpbmVfY3B1cygpOworCisJCWRyaXZlcl9jb25maWctPnZwYXRoX3Blcl9kZXYgPSBkcml2ZXJfY29uZmlnLT5nX25vX2NwdXMgPj4gMTsKKwkJaWYgKCFkcml2ZXJfY29uZmlnLT52cGF0aF9wZXJfZGV2KQorCQkJZHJpdmVyX2NvbmZpZy0+dnBhdGhfcGVyX2RldiA9IDE7CisKKwkJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykKKwkJCWlmICghdnhnZV9iVkFMbih2cGF0aF9tYXNrLCBpLCAxKSkKKwkJCQljb250aW51ZTsKKwkJCWVsc2UKKwkJCQlkZWZhdWx0X25vX3ZwYXRoKys7CisJCWlmIChkZWZhdWx0X25vX3ZwYXRoIDwgZHJpdmVyX2NvbmZpZy0+dnBhdGhfcGVyX2RldikKKwkJCWRyaXZlcl9jb25maWctPnZwYXRoX3Blcl9kZXYgPSBkZWZhdWx0X25vX3ZwYXRoOworCisJCWRyaXZlcl9jb25maWctPmdfbm9fY3B1cyA9IGRyaXZlcl9jb25maWctPmdfbm9fY3B1cyAtCisJCQkJKGRyaXZlcl9jb25maWctPnZwYXRoX3Blcl9kZXYgKiAyKTsKKwkJaWYgKGRyaXZlcl9jb25maWctPmdfbm9fY3B1cyA8PSAwKQorCQkJZHJpdmVyX2NvbmZpZy0+Z19ub19jcHVzID0gLTE7CisJfQorCisJaWYgKGRyaXZlcl9jb25maWctPnZwYXRoX3Blcl9kZXYgPT0gMSkgeworCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAorCQkJIiVzOiBEaXNhYmxlIHR4IGFuZCByeCBzdGVlcmluZywgIgorCQkJImFzIHNpbmdsZSB2cGF0aCBpcyBjb25maWd1cmVkIiwgVlhHRV9EUklWRVJfTkFNRSk7CisJCWNvbmZpZ19wYXJhbS0+cnRoX3N0ZWVyaW5nID0gTk9fU1RFRVJJTkc7CisJCWNvbmZpZ19wYXJhbS0+dHhfc3RlZXJpbmdfdHlwZSA9IE5PX1NURUVSSU5HOworCQlkZXZpY2VfY29uZmlnLT5ydGhfZW4gPSAwOworCX0KKworCS8qIGNvbmZpZ3VyZSBiYW5kd2lkdGggKi8KKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKQorCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ubWluX2JhbmR3aWR0aCA9IGJ3X3BlcmNlbnRhZ2VbaV07CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS52cF9pZCA9IGk7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5tdHUgPSBWWEdFX0hXX0RFRkFVTFRfTVRVOworCQlpZiAobm9fb2ZfdnBhdGhzIDwgZHJpdmVyX2NvbmZpZy0+dnBhdGhfcGVyX2RldikgeworCQkJaWYgKCF2eGdlX2JWQUxuKHZwYXRoX21hc2ssIGksIDEpKSB7CisJCQkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKKwkJCQkJIiVzOiB2cGF0aDogJWQgaXMgbm90IGF2YWlsYWJsZSIsCisJCQkJCVZYR0VfRFJJVkVSX05BTUUsIGkpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAorCQkJCQkiJXM6IHZwYXRoOiAlZCBhdmFpbGFibGUiLAorCQkJCQlWWEdFX0RSSVZFUl9OQU1FLCBpKTsKKwkJCQlub19vZl92cGF0aHMrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsCisJCQkJIiVzOiB2cGF0aDogJWQgaXMgbm90IGNvbmZpZ3VyZWQsICIKKwkJCQkibWF4X2NvbmZpZ192cGF0aCBleGNlZWRlZCIsCisJCQkJVlhHRV9EUklWRVJfTkFNRSwgaSk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIENvbmZpZ3VyZSBUeCBmaWZvJ3MgKi8KKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8uZW5hYmxlID0KKwkJCQkJCVZYR0VfSFdfRklGT19FTkFCTEU7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLm1heF9mcmFncyA9CisJCQkJTUFYX1NLQl9GUkFHUzsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8ubWVtYmxvY2tfc2l6ZSA9CisJCQlWWEdFX0hXX01JTl9GSUZPX01FTUJMT0NLX1NJWkU7CisKKwkJdHhkbF9zaXplID0gTUFYX1NLQl9GUkFHUyAqIHNpemVvZihzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCk7CisJCXR4ZGxfcGVyX21lbWJsb2NrID0gVlhHRV9IV19NSU5fRklGT19NRU1CTE9DS19TSVpFIC8gdHhkbF9zaXplOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5maWZvLmZpZm9fYmxvY2tzID0KKwkJCSgoVlhHRV9ERUZfRklGT19MRU5HVEggLSAxKSAvIHR4ZGxfcGVyX21lbWJsb2NrKSArIDE7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLmZpZm8uaW50ciA9CisJCQkJVlhHRV9IV19GSUZPX1FVRVVFX0lOVFJfRElTQUJMRTsKKworCQkvKiBDb25maWd1cmUgdHRpIHByb3BlcnRpZXMgKi8KKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS5pbnRyX2VuYWJsZSA9CisJCQkJCVZYR0VfSFdfVElNX0lOVFJfRU5BQkxFOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkuYnRpbWVyX3ZhbCA9CisJCQkoVlhHRV9UVElfQlRJTUVSX1ZBTCAqIDEwMDApIC8gMjcyOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS50dGkudGltZXJfYWNfZW4gPQorCQkJCVZYR0VfSFdfVElNX1RJTUVSX0FDX0VOQUJMRTsKKworCQkvKiBGb3IgbXNpLXggd2l0aCBuYXBpIChlYWNoIHZlY3RvcgorCQloYXMgYSBoYW5kbGVyIG9mIGl0cyBvd24pIC0KKwkJU2V0IENJIHRvIE9GRiBmb3IgYWxsIHZwYXRocyAqLworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnRpbWVyX2NpX2VuID0KKwkJCVZYR0VfSFdfVElNX1RJTUVSX0NJX0RJU0FCTEU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnR0aS50aW1lcl9yaV9lbiA9CisJCQkJVlhHRV9IV19USU1fVElNRVJfUklfRElTQUJMRTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnV0aWxfc2VsID0KKwkJCVZYR0VfSFdfVElNX1VUSUxfU0VMX0xFR0FDWV9UWF9ORVRfVVRJTDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLmx0aW1lcl92YWwgPQorCQkJKFZYR0VfVFRJX0xUSU1FUl9WQUwgKiAxMDAwKSAvIDI3MjsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnJ0aW1lcl92YWwgPQorCQkJKFZYR0VfVFRJX1JUSU1FUl9WQUwgKiAxMDAwKSAvIDI3MjsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVyYW5nZV9hID0gVFRJX1RYX1VSQU5HRV9BOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVyYW5nZV9iID0gVFRJX1RYX1VSQU5HRV9COworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVyYW5nZV9jID0gVFRJX1RYX1VSQU5HRV9DOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVlY19hID0gVFRJX1RYX1VGQ19BOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVlY19iID0gVFRJX1RYX1VGQ19COworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVlY19jID0gVFRJX1RYX1VGQ19DOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0udHRpLnVlY19kID0gVFRJX1RYX1VGQ19EOworCisJCS8qIENvbmZpZ3VyZSBSeCByaW5ncyAqLworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5lbmFibGUgID0KKwkJCQkJCVZYR0VfSFdfUklOR19FTkFCTEU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJpbmcucmluZ19ibG9ja3MgID0KKwkJCQkJCVZYR0VfSFdfREVGX1JJTkdfQkxPQ0tTOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucmluZy5idWZmZXJfbW9kZSA9CisJCQlWWEdFX0hXX1JJTkdfUlhEX0JVRkZFUl9NT0RFXzE7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLnJ4ZHNfbGltaXQgID0KKwkJCQlWWEdFX0hXX0RFRl9SSU5HX1JYRFNfTElNSVQ7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5yaW5nLnNjYXR0ZXJfbW9kZSA9CisJCQkJCVZYR0VfSFdfUklOR19TQ0FUVEVSX01PREVfQTsKKworCQkvKiBDb25maWd1cmUgcnRpIHByb3BlcnRpZXMgKi8KKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS5pbnRyX2VuYWJsZSA9CisJCQkJCVZYR0VfSFdfVElNX0lOVFJfRU5BQkxFOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkuYnRpbWVyX3ZhbCA9CisJCQkoVlhHRV9SVElfQlRJTUVSX1ZBTCAqIDEwMDApLzI3MjsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnRpbWVyX2FjX2VuID0KKwkJCQkJCVZYR0VfSFdfVElNX1RJTUVSX0FDX0VOQUJMRTsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnRpbWVyX2NpX2VuID0KKwkJCQkJCVZYR0VfSFdfVElNX1RJTUVSX0NJX0RJU0FCTEU7CisKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS50aW1lcl9yaV9lbiA9CisJCQkJCQlWWEdFX0hXX1RJTV9USU1FUl9SSV9ESVNBQkxFOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudXRpbF9zZWwgPQorCQkJCVZYR0VfSFdfVElNX1VUSUxfU0VMX0xFR0FDWV9SWF9ORVRfVVRJTDsKKworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVyYW5nZV9hID0KKwkJCQkJCVJUSV9SWF9VUkFOR0VfQTsKKwkJZGV2aWNlX2NvbmZpZy0+dnBfY29uZmlnW2ldLnJ0aS51cmFuZ2VfYiA9CisJCQkJCQlSVElfUlhfVVJBTkdFX0I7CisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkudXJhbmdlX2MgPQorCQkJCQkJUlRJX1JYX1VSQU5HRV9DOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVlY19hID0gUlRJX1JYX1VGQ19BOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVlY19iID0gUlRJX1JYX1VGQ19COworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVlY19jID0gUlRJX1JYX1VGQ19DOworCQlkZXZpY2VfY29uZmlnLT52cF9jb25maWdbaV0ucnRpLnVlY19kID0gUlRJX1JYX1VGQ19EOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkucnRpbWVyX3ZhbCA9CisJCQkoVlhHRV9SVElfUlRJTUVSX1ZBTCAqIDEwMDApIC8gMjcyOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ydGkubHRpbWVyX3ZhbCA9CisJCQkoVlhHRV9SVElfTFRJTUVSX1ZBTCAqIDEwMDApIC8gMjcyOworCisJCWRldmljZV9jb25maWctPnZwX2NvbmZpZ1tpXS5ycGFfc3RyaXBfdmxhbl90YWcgPQorCQkJdmxhbl90YWdfc3RyaXA7CisJfQorCisJZHJpdmVyX2NvbmZpZy0+dnBhdGhfcGVyX2RldiA9IHRlbXA7CisJcmV0dXJuIG5vX29mX3ZwYXRoczsKK30KKworLyogaW5pdGlhbGl6ZSBkZXZpY2UgY29uZmlndXJhdHJpb25zICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgdnhnZV9kZXZpY2VfY29uZmlnX2luaXQoCisJCQkJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAqZGV2aWNlX2NvbmZpZywKKwkJCQlpbnQgKmludHJfdHlwZSkKK3sKKwkvKiBVc2VkIGZvciBDUVJRL1NSUS4gKi8KKwlkZXZpY2VfY29uZmlnLT5kbWFfYmxvY2twb29sX2luaXRpYWwgPQorCQkJVlhHRV9IV19JTklUSUFMX0RNQV9CTE9DS19QT09MX1NJWkU7CisKKwlkZXZpY2VfY29uZmlnLT5kbWFfYmxvY2twb29sX21heCA9CisJCQlWWEdFX0hXX01BWF9ETUFfQkxPQ0tfUE9PTF9TSVpFOworCisJaWYgKG1heF9tYWNfdnBhdGggPiBWWEdFX01BWF9NQUNfQUREUl9DT1VOVCkKKwkJbWF4X21hY192cGF0aCA9IFZYR0VfTUFYX01BQ19BRERSX0NPVU5UOworCisjaWZuZGVmIENPTkZJR19QQ0lfTVNJCisJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkiJXM6IFRoaXMgS2VybmVsIGRvZXMgbm90IHN1cHBvcnQgIgorCQkiTVNJLVguIERlZmF1bHRpbmcgdG8gSU5UQSIsIFZYR0VfRFJJVkVSX05BTUUpOworCSppbnRyX3R5cGUgPSBJTlRBOworI2VuZGlmCisKKwkvKiBDb25maWd1cmUgd2hldGhlciBNU0ktWCBvciBJUlFMLiAqLworCXN3aXRjaCAoKmludHJfdHlwZSkgeworCWNhc2UgSU5UQToKKwkJZGV2aWNlX2NvbmZpZy0+aW50cl9tb2RlID0gVlhHRV9IV19JTlRSX01PREVfSVJRTElORTsKKwkJYnJlYWs7CisKKwljYXNlIE1TSV9YOgorCQlkZXZpY2VfY29uZmlnLT5pbnRyX21vZGUgPSBWWEdFX0hXX0lOVFJfTU9ERV9NU0lYOworCQlicmVhazsKKwl9CisJLyogVGltZXIgcGVyaW9kIGJldHdlZW4gZGV2aWNlIHBvbGwgKi8KKwlkZXZpY2VfY29uZmlnLT5kZXZpY2VfcG9sbF9taWxsaXMgPSBWWEdFX1RJTUVSX0RFTEFZOworCisJLyogQ29uZmlndXJlIG1hYyBiYXNlZCBzdGVlcmluZy4gKi8KKwlkZXZpY2VfY29uZmlnLT5ydHNfbWFjX2VuID0gYWRkcl9sZWFybl9lbjsKKworCS8qIENvbmZpZ3VyZSBWcGF0aHMgKi8KKwlkZXZpY2VfY29uZmlnLT5ydGhfaXRfdHlwZSA9IFZYR0VfSFdfUlRIX0lUX1RZUEVfTVVMVElfSVQ7CisKKwl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLCAiJXMgOiBEZXZpY2UgQ29uZmlnIFBhcmFtcyAiLAorCQkJX19mdW5jX18pOworCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsICJkbWFfYmxvY2twb29sX2luaXRpYWwgOiAlZCIsCisJCQlkZXZpY2VfY29uZmlnLT5kbWFfYmxvY2twb29sX2luaXRpYWwpOworCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsICJkbWFfYmxvY2twb29sX21heCA6ICVkIiwKKwkJCWRldmljZV9jb25maWctPmRtYV9ibG9ja3Bvb2xfbWF4KTsKKwl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLCAiaW50cl9tb2RlIDogJWQiLAorCQkJZGV2aWNlX2NvbmZpZy0+aW50cl9tb2RlKTsKKwl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLCAiZGV2aWNlX3BvbGxfbWlsbGlzIDogJWQiLAorCQkJZGV2aWNlX2NvbmZpZy0+ZGV2aWNlX3BvbGxfbWlsbGlzKTsKKwl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLCAicnRzX21hY19lbiA6ICVkIiwKKwkJCWRldmljZV9jb25maWctPnJ0c19tYWNfZW4pOworCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsICJydGhfZW4gOiAlZCIsCisJCQlkZXZpY2VfY29uZmlnLT5ydGhfZW4pOworCXZ4Z2VfZGVidWdfbGxfY29uZmlnKFZYR0VfVFJBQ0UsICJydGhfaXRfdHlwZSA6ICVkIiwKKwkJCWRldmljZV9jb25maWctPnJ0aF9pdF90eXBlKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHZ4Z2VfcHJpbnRfcGFybShzdHJ1Y3QgdnhnZWRldiAqdmRldiwgdTY0IHZwYXRoX21hc2spCit7CisJaW50IGk7CisKKwl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJIiVzOiAlZCBWcGF0aChzKSBvcGVuZWQiLAorCQl2ZGV2LT5uZGV2LT5uYW1lLCB2ZGV2LT5ub19vZl92cGF0aCk7CisKKwlzd2l0Y2ggKHZkZXYtPmNvbmZpZy5pbnRyX3R5cGUpIHsKKwljYXNlIElOVEE6CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBJbnRlcnJ1cHQgdHlwZSBJTlRBIiwgdmRldi0+bmRldi0+bmFtZSk7CisJCWJyZWFrOworCisJY2FzZSBNU0lfWDoKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IEludGVycnVwdCB0eXBlIE1TSS1YIiwgdmRldi0+bmRldi0+bmFtZSk7CisJCWJyZWFrOworCX0KKworCWlmICh2ZGV2LT5jb25maWcucnRoX3N0ZWVyaW5nKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBSVEggc3RlZXJpbmcgZW5hYmxlZCBmb3IgVENQX0lQVjQiLAorCQkJdmRldi0+bmRldi0+bmFtZSk7CisJfSBlbHNlIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFJUSCBzdGVlcmluZyBkaXNhYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOworCX0KKworCXN3aXRjaCAodmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUpIHsKKwljYXNlIE5PX1NURUVSSU5HOgorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogVHggc3RlZXJpbmcgZGlzYWJsZWQiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBUWF9QUklPUklUWV9TVEVFUklORzoKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFVuc3VwcG9ydGVkIHR4IHN0ZWVyaW5nIG9wdGlvbiIsCisJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFR4IHN0ZWVyaW5nIGRpc2FibGVkIiwgdmRldi0+bmRldi0+bmFtZSk7CisJCXZkZXYtPmNvbmZpZy50eF9zdGVlcmluZ190eXBlID0gMDsKKwkJYnJlYWs7CisJY2FzZSBUWF9WTEFOX1NURUVSSU5HOgorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogVW5zdXBwb3J0ZWQgdHggc3RlZXJpbmcgb3B0aW9uIiwKKwkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogVHggc3RlZXJpbmcgZGlzYWJsZWQiLCB2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJdmRldi0+Y29uZmlnLnR4X3N0ZWVyaW5nX3R5cGUgPSAwOworCQlicmVhazsKKwljYXNlIFRYX01VTFRJUV9TVEVFUklORzoKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IFR4IG11bHRpcXVldWUgc3RlZXJpbmcgZW5hYmxlZCIsCisJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBUWF9QT1JUX1NURUVSSU5HOgorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogVHggcG9ydCBzdGVlcmluZyBlbmFibGVkIiwKKwkJCXZkZXYtPm5kZXYtPm5hbWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXM6IFVuc3VwcG9ydGVkIHR4IHN0ZWVyaW5nIHR5cGUiLAorCQkJdmRldi0+bmRldi0+bmFtZSk7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBUeCBzdGVlcmluZyBkaXNhYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOworCQl2ZGV2LT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9IDA7CisJfQorCisJaWYgKHZkZXYtPmNvbmZpZy5ncm9fZW5hYmxlKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlczogR2VuZXJpYyByZWNlaXZlIG9mZmxvYWQgZW5hYmxlZCIsCisJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwl9IGVsc2UKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IEdlbmVyaWMgcmVjZWl2ZSBvZmZsb2FkIGRpc2FibGVkIiwKKwkJCXZkZXYtPm5kZXYtPm5hbWUpOworCisJaWYgKHZkZXYtPmNvbmZpZy5hZGRyX2xlYXJuX2VuKQorCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogTUFDIEFkZHJlc3MgbGVhcm5pbmcgZW5hYmxlZCIsIHZkZXYtPm5kZXYtPm5hbWUpOworCisJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCSIlczogUnggZG9vcmJlbGwgbW9kZSBlbmFibGVkIiwgdmRldi0+bmRldi0+bmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisJCWlmICghdnhnZV9iVkFMbih2cGF0aF9tYXNrLCBpLCAxKSkKKwkJCWNvbnRpbnVlOworCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAorCQkJIiVzOiBNVFUgc2l6ZSAtICVkIiwgdmRldi0+bmRldi0+bmFtZSwKKwkJCSgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopKHZkZXYtPmRldmgpKS0+CisJCQkJY29uZmlnLnZwX2NvbmZpZ1tpXS5tdHUpOworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJCSIlczogVkxBTiB0YWcgc3RyaXBwaW5nICVzIiwgdmRldi0+bmRldi0+bmFtZSwKKwkJCSgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopKHZkZXYtPmRldmgpKS0+CisJCQkJY29uZmlnLnZwX2NvbmZpZ1tpXS5ycGFfc3RyaXBfdmxhbl90YWcKKwkJCT8gIkVuYWJsZWQiIDogIkRpc2FibGVkIik7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkJIiVzOiBSaW5nIGJsb2NrcyA6ICVkIiwgdmRldi0+bmRldi0+bmFtZSwKKwkJCSgoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopKHZkZXYtPmRldmgpKS0+CisJCQkJY29uZmlnLnZwX2NvbmZpZ1tpXS5yaW5nLnJpbmdfYmxvY2tzKTsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCisJCQkiJXM6IEZpZm8gYmxvY2tzIDogJWQiLCB2ZGV2LT5uZGV2LT5uYW1lLAorCQkJKChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikodmRldi0+ZGV2aCkpLT4KKwkJCQljb25maWcudnBfY29uZmlnW2ldLmZpZm8uZmlmb19ibG9ja3MpOworCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAorCQkJIiVzOiBNYXggZnJhZ3MgOiAlZCIsIHZkZXYtPm5kZXYtPm5hbWUsCisJCQkoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSh2ZGV2LT5kZXZoKSktPgorCQkJCWNvbmZpZy52cF9jb25maWdbaV0uZmlmby5tYXhfZnJhZ3MpOworCQlicmVhazsKKwl9Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKy8qKgorICogdnhnZV9wbV9zdXNwZW5kIC0gdnhnZSBwb3dlciBtYW5hZ2VtZW50IHN1c3BlbmQgZW50cnkgcG9pbnQKKyAqCisgKi8KK3N0YXRpYyBpbnQgdnhnZV9wbV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisvKioKKyAqIHZ4Z2VfcG1fcmVzdW1lIC0gdnhnZSBwb3dlciBtYW5hZ2VtZW50IHJlc3VtZSBlbnRyeSBwb2ludAorICoKKyAqLworc3RhdGljIGludCB2eGdlX3BtX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworI2VuZGlmCisKKy8qKgorICogdnhnZV9pb19lcnJvcl9kZXRlY3RlZCAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZAorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICogQHN0YXRlOiBUaGUgY3VycmVudCBwY2kgY29ubmVjdGlvbiBzdGF0ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgUENJIGJ1cyBlcnJvciBhZmZlY3RpbmcKKyAqIHRoaXMgZGV2aWNlIGhhcyBiZWVuIGRldGVjdGVkLgorICovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB2eGdlX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQkJcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2ID0KKwkJKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGhsZGV2LT5uZGV2OworCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQkvKiBCcmluZyBkb3duIHRoZSBjYXJkLCB3aGlsZSBhdm9pZGluZyBQQ0kgSS9PICovCisJCWRvX3Z4Z2VfY2xvc2UobmV0ZGV2LCAwKTsKKwl9CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKK30KKworLyoqCisgKiB2eGdlX2lvX3Nsb3RfcmVzZXQgLSBjYWxsZWQgYWZ0ZXIgdGhlIHBjaSBidXMgaGFzIGJlZW4gcmVzZXQuCisgKiBAcGRldjogUG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKgorICogUmVzdGFydCB0aGUgY2FyZCBmcm9tIHNjcmF0Y2gsIGFzIGlmIGZyb20gYSBjb2xkLWJvb3QuCisgKiBBdCB0aGlzIHBvaW50LCB0aGUgY2FyZCBoYXMgZXhwcmllbmNlZCBhIGhhcmQgcmVzZXQsCisgKiBmb2xsb3dlZCBieSBmaXh1cHMgYnkgQklPUywgYW5kIGhhcyBpdHMgY29uZmlnIHNwYWNlCisgKiBzZXQgdXAgaWRlbnRpY2FsbHkgdG8gd2hhdCBpdCB3YXMgYXQgY29sZCBib290LgorICovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCB2eGdlX2lvX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldiA9CisJCShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBobGRldi0+bmRldjsKKworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiAiCisJCQkiQ2Fubm90IHJlLWVuYWJsZSBkZXZpY2UgYWZ0ZXIgcmVzZXRcbiIsCisJCQlWWEdFX0RSSVZFUl9OQU1FKTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJdnhnZV9yZXNldCh2ZGV2KTsKKworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7Cit9CisKKy8qKgorICogdnhnZV9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLgorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscworICogdXMgdGhhdCBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHZ4Z2VfaW9fcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqaGxkZXYgPQorCQkoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gaGxkZXYtPm5kZXY7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCWlmICh2eGdlX29wZW4obmV0ZGV2KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogIgorCQkJCSJDYW4ndCBicmluZyBkZXZpY2UgYmFjayB1cCBhZnRlciByZXNldFxuIiwKKwkJCQlWWEdFX0RSSVZFUl9OQU1FKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKK30KKworLyoqCisgKiB2eGdlX3Byb2JlCisgKiBAcGRldiA6IHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBQQ0kgcmVsYXRlZCBpbmZvcm1hdGlvbiBvZiB0aGUgZGV2aWNlLgorICogQHByZTogTGlzdCBvZiBQQ0kgZGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciBsaXN0ZWQgaW4gdnhnZV9pZF90YWJsZS4KKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIG5ldyBQQ0kgZGV2aWNlIGdldHMgZGV0ZWN0ZWQgYW5kIGluaXRpYWxpemVzCisgKiBpdC4KKyAqIFJldHVybiB2YWx1ZToKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBuZWdhdGl2ZSBvbiBmYWlsdXJlLgorICoKKyAqLworc3RhdGljIGludCBfX2RldmluaXQKK3Z4Z2VfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwcmUpCit7CisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgICpobGRldjsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlpbnQgcmV0OworCWludCBoaWdoX2RtYSA9IDA7CisJdTY0IHZwYXRoX21hc2sgPSAwOworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2OworCXN0cnVjdCB2eGdlX2NvbmZpZyBsbF9jb25maWc7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2NvbmZpZyAqZGV2aWNlX2NvbmZpZyA9IE5VTEw7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2F0dHIgYXR0cjsKKwlpbnQgaSwgaiwgbm9fb2ZfdnBhdGggPSAwLCBtYXhfdnBhdGhfc3VwcG9ydGVkID0gMDsKKwl1OCAqbWFjYWRkcjsKKwlzdHJ1Y3QgdnhnZV9tYWNfYWRkcnMgKmVudHJ5OworCXN0YXRpYyBpbnQgYnVzID0gLTEsIGRldmljZSA9IC0xOworCXU4IG5ld19kZXZpY2UgPSAwOworCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQoVlhHRV9UUkFDRSwgIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsKKwlhdHRyLnBkZXYgPSBwZGV2OworCisJaWYgKGJ1cyAhPSBwZGV2LT5idXMtPm51bWJlcikKKwkJbmV3X2RldmljZSA9IDE7CisJaWYgKGRldmljZSAhPSBQQ0lfU0xPVChwZGV2LT5kZXZmbikpCisJCW5ld19kZXZpY2UgPSAxOworCisJYnVzID0gcGRldi0+YnVzLT5udW1iZXI7CisJZGV2aWNlID0gUENJX1NMT1QocGRldi0+ZGV2Zm4pOworCisJaWYgKG5ld19kZXZpY2UpIHsKKwkJaWYgKGRyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250ICYmCisJCSAgIChkcml2ZXJfY29uZmlnLT5jb25maWdfZGV2X2NudCAhPQorCQkJZHJpdmVyX2NvbmZpZy0+dG90YWxfZGV2X2NudCkpCisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzOiBDb25maWd1cmVkICVkIG9mICVkIGRldmljZXMiLAorCQkJCVZYR0VfRFJJVkVSX05BTUUsCisJCQkJZHJpdmVyX2NvbmZpZy0+Y29uZmlnX2Rldl9jbnQsCisJCQkJZHJpdmVyX2NvbmZpZy0+dG90YWxfZGV2X2NudCk7CisJCWRyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250ID0gMDsKKwkJZHJpdmVyX2NvbmZpZy0+dG90YWxfZGV2X2NudCA9IDA7CisJCWRyaXZlcl9jb25maWctPmdfbm9fY3B1cyA9IDA7CisJCWRyaXZlcl9jb25maWctPnZwYXRoX3Blcl9kZXYgPSBtYXhfY29uZmlnX3ZwYXRoOworCX0KKworCWRyaXZlcl9jb25maWctPnRvdGFsX2Rldl9jbnQrKzsKKwlpZiAoKytkcml2ZXJfY29uZmlnLT5jb25maWdfZGV2X2NudCA+IG1heF9jb25maWdfZGV2KSB7CisJCXJldCA9IDA7CisJCWdvdG8gX2V4aXQwOworCX0KKworCWRldmljZV9jb25maWcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdnhnZV9od19kZXZpY2VfY29uZmlnKSwKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZpY2VfY29uZmlnKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSJkZXZpY2VfY29uZmlnIDogbWFsbG9jIGZhaWxlZCAlcyAlZCIsCisJCQlfX0ZJTEVfXywgX19MSU5FX18pOworCQlnb3RvIF9leGl0MDsKKwl9CisKKwltZW1zZXQoJmxsX2NvbmZpZywgMCwgc2l6ZW9mKHN0cnVjdCB2eGdlX2NvbmZpZykpOworCWxsX2NvbmZpZy50eF9zdGVlcmluZ190eXBlID0gVFhfTVVMVElRX1NURUVSSU5HOworCWxsX2NvbmZpZy5pbnRyX3R5cGUgPSBNU0lfWDsKKwlsbF9jb25maWcubmFwaV93ZWlnaHQgPSBORVdfTkFQSV9XRUlHSFQ7CisJbGxfY29uZmlnLnJ0aF9zdGVlcmluZyA9IFJUSF9TVEVFUklORzsKKworCS8qIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi8KKwl2eGdlX2h3X2RldmljZV9jb25maWdfZGVmYXVsdF9nZXQoZGV2aWNlX2NvbmZpZyk7CisKKwkvKiBpbml0aWFsaXplIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLworCXZ4Z2VfZGV2aWNlX2NvbmZpZ19pbml0KGRldmljZV9jb25maWcsICZsbF9jb25maWcuaW50cl90eXBlKTsKKworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzIDogY2FuIG5vdCBlbmFibGUgUENJIGRldmljZSIsIF9fZnVuY19fKTsKKwkJZ290byBfZXhpdDA7CisJfQorCisJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4ZmZmZmZmZmZmZmZmZmZmZlVMTCkpIHsKKwkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKKwkJCSIlcyA6IHVzaW5nIDY0Yml0IERNQSIsIF9fZnVuY19fKTsKKworCQloaWdoX2RtYSA9IDE7CisKKwkJaWYgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LAorCQkJCQkJMHhmZmZmZmZmZmZmZmZmZmZmVUxMKSkgeworCQkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJCSIlcyA6IHVuYWJsZSB0byBvYnRhaW4gNjRiaXQgRE1BIGZvciAiCisJCQkJImNvbnNpc3RlbnQgYWxsb2NhdGlvbnMiLCBfX2Z1bmNfXyk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBfZXhpdDE7CisJCX0KKwl9IGVsc2UgaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIDB4ZmZmZmZmZmZVTCkpIHsKKwkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKKwkJCSIlcyA6IHVzaW5nIDMyYml0IERNQSIsIF9fZnVuY19fKTsKKwl9IGVsc2UgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIF9leGl0MTsKKwl9CisKKwlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBWWEdFX0RSSVZFUl9OQU1FKSkgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXMgOiByZXF1ZXN0IHJlZ2lvbnMgZmFpbGVkIiwgX19mdW5jX18pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIF9leGl0MTsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCWF0dHIuYmFyMCA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCAwKTsKKwlpZiAoIWF0dHIuYmFyMCkgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiJXMgOiBjYW5ub3QgcmVtYXAgaW8gbWVtb3J5IGJhcjAiLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gX2V4aXQyOworCX0KKwl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX1RSQUNFLAorCQkicGNpIGlvcmVtYXAgYmFyMDogJXA6MHglbGx4IiwKKwkJYXR0ci5iYXIwLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSk7CisKKwlhdHRyLmJhcjEgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMik7CisJaWYgKCFhdHRyLmJhcjEpIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIiVzIDogY2Fubm90IHJlbWFwIGlvIG1lbW9yeSBiYXIyIiwgX19mdW5jX18pOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIF9leGl0MzsKKwl9CisJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKKwkJInBjaSBpb3JlbWFwIGJhcjE6ICVwOjB4JWxseCIsCisJCWF0dHIuYmFyMSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMikpOworCisJc3RhdHVzID0gdnhnZV9od19kZXZpY2VfaHdfaW5mb19nZXQoYXR0ci5iYXIwLAorCQkJJmxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mbyk7CisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKSB7CisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlczogUmVhZGluZyBvZiBoYXJkd2FyZSBpbmZvIGZhaWxlZC4iCisJCQkiUGxlYXNlIHRyeSB1cGdyYWRpbmcgdGhlIGZpcm13YXJlLiIsIFZYR0VfRFJJVkVSX05BTUUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIF9leGl0NDsKKwl9CisKKwlpZiAobGxfY29uZmlnLmRldmljZV9od19pbmZvLmZ3X3ZlcnNpb24ubWFqb3IgIT0KKwkJVlhHRV9EUklWRVJfVkVSU0lPTl9NQUpPUikgeworCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkiRlcgVmVyLihtYWopOiAlZCBub3QgZHJpdmVyJ3MgZXhwZWN0ZWQgdmVyc2lvbjogJWQiLAorCQkJbGxfY29uZmlnLmRldmljZV9od19pbmZvLmZ3X3ZlcnNpb24ubWFqb3IsCisJCQlWWEdFX0RSSVZFUl9WRVJTSU9OX01BSk9SKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBfZXhpdDQ7CisJfQorCisJdnBhdGhfbWFzayA9IGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby52cGF0aF9tYXNrOworCWlmICh2cGF0aF9tYXNrID09IDApIHsKKwkJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKKwkJCSIlczogTm8gdnBhdGhzIGF2YWlsYWJsZSBpbiBkZXZpY2UiLCBWWEdFX0RSSVZFUl9OQU1FKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBfZXhpdDQ7CisJfQorCisJdnhnZV9kZWJ1Z19sbF9jb25maWcoVlhHRV9UUkFDRSwKKwkJIiVzOiVkICBWcGF0aCBtYXNrID0gJWxseCIsIF9fZnVuY19fLCBfX0xJTkVfXywKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyl2cGF0aF9tYXNrKTsKKworCS8qIENoZWNrIGhvdyBtYW55IHZwYXRocyBhcmUgYXZhaWxhYmxlICovCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCQlpZiAoISgodnBhdGhfbWFzaykgJiB2eGdlX21CSVQoaSkpKQorCQkJY29udGludWU7CisJCW1heF92cGF0aF9zdXBwb3J0ZWQrKzsKKwl9CisKKwkvKgorCSAqIENvbmZpZ3VyZSB2cGF0aHMgYW5kIGdldCBkcml2ZXIgY29uZmlndXJlZCBudW1iZXIgb2YgdnBhdGhzCisJICogd2hpY2ggaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBtYXhpbXVtIHZwYXRocyBwZXIgZnVuY3Rpb24uCisJICovCisJbm9fb2ZfdnBhdGggPSB2eGdlX2NvbmZpZ192cGF0aHMoZGV2aWNlX2NvbmZpZywgdnBhdGhfbWFzaywgJmxsX2NvbmZpZyk7CisJaWYgKCFub19vZl92cGF0aCkgeworCQl2eGdlX2RlYnVnX2xsX2NvbmZpZyhWWEdFX0VSUiwKKwkJCSIlczogTm8gbW9yZSB2cGF0aHMgdG8gY29uZmlndXJlIiwgVlhHRV9EUklWRVJfTkFNRSk7CisJCXJldCA9IDA7CisJCWdvdG8gX2V4aXQ0OworCX0KKworCS8qIFNldHRpbmcgZHJpdmVyIGNhbGxiYWNrcyAqLworCWF0dHIudWxkX2NhbGxiYWNrcy5saW5rX3VwID0gdnhnZV9jYWxsYmFja19saW5rX3VwOworCWF0dHIudWxkX2NhbGxiYWNrcy5saW5rX2Rvd24gPSB2eGdlX2NhbGxiYWNrX2xpbmtfZG93bjsKKwlhdHRyLnVsZF9jYWxsYmFja3MuY3JpdF9lcnIgPSB2eGdlX2NhbGxiYWNrX2NyaXRfZXJyOworCisJc3RhdHVzID0gdnhnZV9od19kZXZpY2VfaW5pdGlhbGl6ZSgmaGxkZXYsICZhdHRyLCBkZXZpY2VfY29uZmlnKTsKKwlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spIHsKKwkJdnhnZV9kZWJ1Z19pbml0KFZYR0VfRVJSLAorCQkJIkZhaWxlZCB0byBpbml0aWFsaXplIGRldmljZSAoJWQpIiwgc3RhdHVzKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIF9leGl0NDsKKwl9CisKKwl2eGdlX2h3X2RldmljZV9kZWJ1Z19zZXQoaGxkZXYsIFZYR0VfRVJSLCBWWEdFX0NPTVBPTkVOVF9MTCk7CisKKwkvKiBzZXQgcHJpdmF0ZSBkZXZpY2UgaW5mbyAqLworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBobGRldik7CisKKwlsbF9jb25maWcuZ3JvX2VuYWJsZSA9IFZYR0VfR1JPX0FMV0FZU19BR0dSRUdBVEU7CisJbGxfY29uZmlnLmZpZm9faW5kaWNhdGVfbWF4X3BrdHMgPSBWWEdFX0ZJRk9fSU5ESUNBVEVfTUFYX1BLVFM7CisJbGxfY29uZmlnLmFkZHJfbGVhcm5fZW4gPSBhZGRyX2xlYXJuX2VuOworCWxsX2NvbmZpZy5ydGhfYWxnb3JpdGhtID0gUlRIX0FMR19KRU5LSU5TOworCWxsX2NvbmZpZy5ydGhfaGFzaF90eXBlX3RjcGlwdjQgPSBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1RDUF9JUFY0OworCWxsX2NvbmZpZy5ydGhfaGFzaF90eXBlX2lwdjQgPSBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX05PTkU7CisJbGxfY29uZmlnLnJ0aF9oYXNoX3R5cGVfdGNwaXB2NiA9IFZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORTsKKwlsbF9jb25maWcucnRoX2hhc2hfdHlwZV9pcHY2ID0gVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9OT05FOworCWxsX2NvbmZpZy5ydGhfaGFzaF90eXBlX3RjcGlwdjZleCA9IFZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORTsKKwlsbF9jb25maWcucnRoX2hhc2hfdHlwZV9pcHY2ZXggPSBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX05PTkU7CisJbGxfY29uZmlnLnJ0aF9ia3Rfc3ogPSBSVEhfQlVDS0VUX1NJWkU7CisJbGxfY29uZmlnLnR4X3BhdXNlX2VuYWJsZSA9IFZYR0VfUEFVU0VfQ1RSTF9FTkFCTEU7CisJbGxfY29uZmlnLnJ4X3BhdXNlX2VuYWJsZSA9IFZYR0VfUEFVU0VfQ1RSTF9FTkFCTEU7CisKKwlpZiAodnhnZV9kZXZpY2VfcmVnaXN0ZXIoaGxkZXYsICZsbF9jb25maWcsIGhpZ2hfZG1hLCBub19vZl92cGF0aCwKKwkJJnZkZXYpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gX2V4aXQ1OworCX0KKworCXZ4Z2VfaHdfZGV2aWNlX2RlYnVnX3NldChobGRldiwgVlhHRV9UUkFDRSwgVlhHRV9DT01QT05FTlRfTEwpOworCVZYR0VfQ09QWV9ERUJVR19JTkZPX1RPX0xMKHZkZXYsIHZ4Z2VfaHdfZGV2aWNlX2Vycm9yX2xldmVsX2dldChobGRldiksCisJCXZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldChobGRldikpOworCisJLyogc2V0IHByaXZhdGUgSFcgZGV2aWNlIGluZm8gKi8KKwlobGRldi0+bmRldiA9IHZkZXYtPm5kZXY7CisJdmRldi0+bXR1ID0gVlhHRV9IV19ERUZBVUxUX01UVTsKKwl2ZGV2LT5iYXIwID0gYXR0ci5iYXIwOworCXZkZXYtPmJhcjEgPSBhdHRyLmJhcjE7CisJdmRldi0+bWF4X3ZwYXRoX3N1cHBvcnRlZCA9IG1heF92cGF0aF9zdXBwb3J0ZWQ7CisJdmRldi0+bm9fb2ZfdnBhdGggPSBub19vZl92cGF0aDsKKworCS8qIFZpcnR1YWwgUGF0aCBjb3VudCAqLworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUzsgaSsrKSB7CisJCWlmICghdnhnZV9iVkFMbih2cGF0aF9tYXNrLCBpLCAxKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaiA+PSB2ZGV2LT5ub19vZl92cGF0aCkKKwkJCWJyZWFrOworCisJCXZkZXYtPnZwYXRoc1tqXS5pc19jb25maWd1cmVkID0gMTsKKwkJdmRldi0+dnBhdGhzW2pdLmRldmljZV9pZCA9IGk7CisJCXZkZXYtPnZwYXRoc1tqXS5maWZvLmRyaXZlcl9pZCA9IGo7CisJCXZkZXYtPnZwYXRoc1tqXS5yaW5nLmRyaXZlcl9pZCA9IGo7CisJCXZkZXYtPnZwYXRoc1tqXS52ZGV2ID0gdmRldjsKKwkJdmRldi0+dnBhdGhzW2pdLm1heF9tYWNfYWRkcl9jbnQgPSBtYXhfbWFjX3ZwYXRoOworCQltZW1jcHkoKHU4ICopdmRldi0+dnBhdGhzW2pdLm1hY2FkZHIsCisJCQkJKHU4ICopbGxfY29uZmlnLmRldmljZV9od19pbmZvLm1hY19hZGRyc1tpXSwKKwkJCQlFVEhfQUxFTik7CisKKwkJLyogSW5pdGlhbGl6ZSB0aGUgbWFjIGFkZHJlc3MgbGlzdCBoZWFkZXIgKi8KKwkJSU5JVF9MSVNUX0hFQUQoJnZkZXYtPnZwYXRoc1tqXS5tYWNfYWRkcl9saXN0KTsKKworCQl2ZGV2LT52cGF0aHNbal0ubWFjX2FkZHJfY250ID0gMDsKKwkJdmRldi0+dnBhdGhzW2pdLm1jYXN0X2FkZHJfY250ID0gMDsKKwkJaisrOworCX0KKwl2ZGV2LT5leGVjX21vZGUgPSBWWEdFX0VYRUNfTU9ERV9ESVNBQkxFOworCXZkZXYtPm1heF9jb25maWdfcG9ydCA9IG1heF9jb25maWdfcG9ydDsKKworCXZkZXYtPnZsYW5fdGFnX3N0cmlwID0gdmxhbl90YWdfc3RyaXA7CisKKwkvKiBtYXAgdGhlIGhhc2hpbmcgc2VsZWN0b3IgdGFibGUgdG8gdGhlIGNvbmZpZ3VyZWQgdnBhdGhzICovCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspCisJCXZkZXYtPnZwYXRoX3NlbGVjdG9yW2ldID0gdnBhdGhfc2VsZWN0b3JbaV07CisKKwltYWNhZGRyID0gKHU4ICopdmRldi0+dnBhdGhzWzBdLm1hY2FkZHI7CisKKwlsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uc2VyaWFsX251bWJlcltWWEdFX0hXX0lORk9fTEVOIC0gMV0gPSAnXDAnOworCWxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5wcm9kdWN0X2Rlc2NbVlhHRV9IV19JTkZPX0xFTiAtIDFdID0gJ1wwJzsKKwlsbF9jb25maWcuZGV2aWNlX2h3X2luZm8ucGFydF9udW1iZXJbVlhHRV9IV19JTkZPX0xFTiAtIDFdID0gJ1wwJzsKKworCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLCAiJXM6IFNFUklBTCBOVU1CRVI6ICVzIiwKKwkJdmRldi0+bmRldi0+bmFtZSwgbGxfY29uZmlnLmRldmljZV9od19pbmZvLnNlcmlhbF9udW1iZXIpOworCisJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsICIlczogUEFSVCBOVU1CRVI6ICVzIiwKKwkJdmRldi0+bmRldi0+bmFtZSwgbGxfY29uZmlnLmRldmljZV9od19pbmZvLnBhcnRfbnVtYmVyKTsKKworCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLCAiJXM6IE5ldGVyaW9uICVzIFNlcnZlciBBZGFwdGVyIiwKKwkJdmRldi0+bmRldi0+bmFtZSwgbGxfY29uZmlnLmRldmljZV9od19pbmZvLnByb2R1Y3RfZGVzYyk7CisKKwl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwKKwkJIiVzOiBNQUMgQUREUjogJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlgiLAorCQl2ZGV2LT5uZGV2LT5uYW1lLCBtYWNhZGRyWzBdLCBtYWNhZGRyWzFdLCBtYWNhZGRyWzJdLAorCQltYWNhZGRyWzNdLCBtYWNhZGRyWzRdLCBtYWNhZGRyWzVdKTsKKworCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLCAiJXM6IExpbmsgV2lkdGggeCVkIiwKKwkJdmRldi0+bmRldi0+bmFtZSwgdnhnZV9od19kZXZpY2VfbGlua193aWR0aF9nZXQoaGxkZXYpKTsKKworCXZ4Z2VfZGVidWdfaW5pdChWWEdFX1RSQUNFLAorCQkiJXM6IEZpcm13YXJlIHZlcnNpb24gOiAlcyBEYXRlIDogJXMiLCB2ZGV2LT5uZGV2LT5uYW1lLAorCQlsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uZndfdmVyc2lvbi52ZXJzaW9uLAorCQlsbF9jb25maWcuZGV2aWNlX2h3X2luZm8uZndfZGF0ZS5kYXRlKTsKKworCXZ4Z2VfcHJpbnRfcGFybSh2ZGV2LCB2cGF0aF9tYXNrKTsKKworCS8qIFN0b3JlIHRoZSBmdyB2ZXJzaW9uIGZvciBldGh0dG9vbCBvcHRpb24gKi8KKwlzdHJjcHkodmRldi0+ZndfdmVyc2lvbiwgbGxfY29uZmlnLmRldmljZV9od19pbmZvLmZ3X3ZlcnNpb24udmVyc2lvbik7CisJbWVtY3B5KHZkZXYtPm5kZXYtPmRldl9hZGRyLCAodTggKil2ZGV2LT52cGF0aHNbMF0ubWFjYWRkciwgRVRIX0FMRU4pOworCW1lbWNweSh2ZGV2LT5uZGV2LT5wZXJtX2FkZHIsIHZkZXYtPm5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKKwkvKiBDb3B5IHRoZSBzdGF0aW9uIG1hYyBhZGRyZXNzIHRvIHRoZSBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsKKwkJZW50cnkgPQkoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzICopCisJCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHZ4Z2VfbWFjX2FkZHJzKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChOVUxMID09IGVudHJ5KSB7CisJCQl2eGdlX2RlYnVnX2luaXQoVlhHRV9FUlIsCisJCQkJIiVzOiBtYWNfYWRkcl9saXN0IDogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIiwKKwkJCQl2ZGV2LT5uZGV2LT5uYW1lKTsKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWdvdG8gX2V4aXQ2OworCQl9CisJCW1hY2FkZHIgPSAodTggKikmZW50cnktPm1hY2FkZHI7CisJCW1lbWNweShtYWNhZGRyLCB2ZGV2LT5uZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQlsaXN0X2FkZCgmZW50cnktPml0ZW0sICZ2ZGV2LT52cGF0aHNbaV0ubWFjX2FkZHJfbGlzdCk7CisJCXZkZXYtPnZwYXRoc1tpXS5tYWNfYWRkcl9jbnQgPSAxOworCX0KKworCXZ4Z2VfZGVidWdfZW50cnlleGl0KFZYR0VfVFJBQ0UsICIlczogJXM6JWQgIEV4aXRpbmcuLi4iLAorCQl2ZGV2LT5uZGV2LT5uYW1lLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJdnhnZV9od19kZXZpY2VfZGVidWdfc2V0KGhsZGV2LCBWWEdFX0VSUiwgVlhHRV9DT01QT05FTlRfTEwpOworCVZYR0VfQ09QWV9ERUJVR19JTkZPX1RPX0xMKHZkZXYsIHZ4Z2VfaHdfZGV2aWNlX2Vycm9yX2xldmVsX2dldChobGRldiksCisJCXZ4Z2VfaHdfZGV2aWNlX3RyYWNlX2xldmVsX2dldChobGRldikpOworCisJcmV0dXJuIDA7CisKK19leGl0NjoKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykKKwkJdnhnZV9mcmVlX21hY19hZGRfbGlzdCgmdmRldi0+dnBhdGhzW2ldKTsKKworCXZ4Z2VfZGV2aWNlX3VucmVnaXN0ZXIoaGxkZXYpOworX2V4aXQ1OgorCXZ4Z2VfaHdfZGV2aWNlX3Rlcm1pbmF0ZShobGRldik7CitfZXhpdDQ6CisJaW91bm1hcChhdHRyLmJhcjEpOworX2V4aXQzOgorCWlvdW5tYXAoYXR0ci5iYXIwKTsKK19leGl0MjoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworX2V4aXQxOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK19leGl0MDoKKwlrZnJlZShkZXZpY2VfY29uZmlnKTsKKwlkcml2ZXJfY29uZmlnLT5jb25maWdfZGV2X2NudC0tOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHZ4Z2VfcmVtX25pYyAtIEZyZWUgdGhlIFBDSSBkZXZpY2UKKyAqIEBwZGV2OiBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgUENJIHJlbGF0ZWQgaW5mb3JtYXRpb24gb2YgdGhlIGRldmljZS4KKyAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgUGNpIHN1YnN5c3RlbSB0byByZWxlYXNlIGEKKyAqIFBDSSBkZXZpY2UgYW5kIGZyZWUgdXAgYWxsIHJlc291cmNlIGhlbGQgdXAgYnkgdGhlIGRldmljZS4KKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0Cit2eGdlX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKmhsZGV2OworCXN0cnVjdCB2eGdlZGV2ICp2ZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCBpID0gMDsKKyNpZiAoKFZYR0VfREVCVUdfSU5JVCAmIFZYR0VfREVCVUdfTUFTSykgfHwgXAorCShWWEdFX0RFQlVHX0VOVFJZRVhJVCAmIFZYR0VfREVCVUdfTUFTSykpCisJdTMyIGxldmVsX3RyYWNlOworI2VuZGlmCisKKwlobGRldiA9IChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKikgcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGhsZGV2ID09IE5VTEwpCisJCXJldHVybjsKKwlkZXYgPSBobGRldi0+bmRldjsKKwl2ZGV2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworI2lmICgoVlhHRV9ERUJVR19JTklUICYgVlhHRV9ERUJVR19NQVNLKSB8fCBcCisJKFZYR0VfREVCVUdfRU5UUllFWElUICYgVlhHRV9ERUJVR19NQVNLKSkKKwlsZXZlbF90cmFjZSA9IHZkZXYtPmxldmVsX3RyYWNlOworI2VuZGlmCisJdnhnZV9kZWJ1Z19lbnRyeWV4aXQobGV2ZWxfdHJhY2UsCisJCSIlczolZCIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisKKwl2eGdlX2RlYnVnX2luaXQobGV2ZWxfdHJhY2UsCisJCSIlcyA6IHJlbW92aW5nIFBDSSBkZXZpY2UuLi4iLCBfX2Z1bmNfXyk7CisJdnhnZV9kZXZpY2VfdW5yZWdpc3RlcihobGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgdmRldi0+bm9fb2ZfdnBhdGg7IGkrKykgeworCQl2eGdlX2ZyZWVfbWFjX2FkZF9saXN0KCZ2ZGV2LT52cGF0aHNbaV0pOworCQl2ZGV2LT52cGF0aHNbaV0ubWNhc3RfYWRkcl9jbnQgPSAwOworCQl2ZGV2LT52cGF0aHNbaV0ubWFjX2FkZHJfY250ID0gMDsKKwl9CisKKwlrZnJlZSh2ZGV2LT52cGF0aHMpOworCisJaW91bm1hcCh2ZGV2LT5iYXIwKTsKKwlpb3VubWFwKHZkZXYtPmJhcjEpOworCisJLyogd2UgYXJlIHNhZmUgdG8gZnJlZSBpdCBub3cgKi8KKwlmcmVlX25ldGRldihkZXYpOworCisJdnhnZV9kZWJ1Z19pbml0KGxldmVsX3RyYWNlLAorCQkiJXM6JWQgIERldmljZSB1bnJlZ2lzdGVyZWQiLCBfX2Z1bmNfXywgX19MSU5FX18pOworCisJdnhnZV9od19kZXZpY2VfdGVybWluYXRlKGhsZGV2KTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwl2eGdlX2RlYnVnX2VudHJ5ZXhpdChsZXZlbF90cmFjZSwKKwkJIiVzOiVkICBFeGl0aW5nLi4uIiwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgdnhnZV9lcnJfaGFuZGxlciA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQgPSB2eGdlX2lvX2Vycm9yX2RldGVjdGVkLAorCS5zbG90X3Jlc2V0ID0gdnhnZV9pb19zbG90X3Jlc2V0LAorCS5yZXN1bWUgPSB2eGdlX2lvX3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB2eGdlX2RyaXZlciA9IHsKKwkubmFtZSA9IFZYR0VfRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlID0gdnhnZV9pZF90YWJsZSwKKwkucHJvYmUgPSB2eGdlX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh2eGdlX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSB2eGdlX3BtX3N1c3BlbmQsCisJLnJlc3VtZSA9IHZ4Z2VfcG1fcmVzdW1lLAorI2VuZGlmCisJLmVycl9oYW5kbGVyID0gJnZ4Z2VfZXJyX2hhbmRsZXIsCit9OworCitzdGF0aWMgaW50IF9faW5pdAordnhnZV9zdGFydGVyKHZvaWQpCit7CisJaW50IHJldCA9IDA7CisJY2hhciB2ZXJzaW9uWzMyXTsKKwlzbnByaW50Zih2ZXJzaW9uLCAzMiwgIiVzIiwgRFJWX1ZFUlNJT04pOworCisJcHJpbnRrKEtFUk5fQ1JJVCAiJXM6IENvcHlyaWdodChjKSAyMDAyLTIwMDkgTmV0ZXJpb24gSW5jXG4iLAorCQlWWEdFX0RSSVZFUl9OQU1FKTsKKwlwcmludGsoS0VSTl9DUklUICIlczogRHJpdmVyIHZlcnNpb246ICVzXG4iLAorCQkJVlhHRV9EUklWRVJfTkFNRSwgdmVyc2lvbik7CisKKwl2ZXJpZnlfYmFuZHdpZHRoKCk7CisKKwlkcml2ZXJfY29uZmlnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZ4Z2VfZHJ2X2NvbmZpZyksIEdGUF9LRVJORUwpOworCWlmICghZHJpdmVyX2NvbmZpZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ2eGdlX2RyaXZlcik7CisKKwlpZiAoZHJpdmVyX2NvbmZpZy0+Y29uZmlnX2Rldl9jbnQgJiYKKwkgICAoZHJpdmVyX2NvbmZpZy0+Y29uZmlnX2Rldl9jbnQgIT0gZHJpdmVyX2NvbmZpZy0+dG90YWxfZGV2X2NudCkpCisJCXZ4Z2VfZGVidWdfaW5pdChWWEdFX0VSUiwKKwkJCSIlczogQ29uZmlndXJlZCAlZCBvZiAlZCBkZXZpY2VzIiwKKwkJCVZYR0VfRFJJVkVSX05BTUUsIGRyaXZlcl9jb25maWctPmNvbmZpZ19kZXZfY250LAorCQkJZHJpdmVyX2NvbmZpZy0+dG90YWxfZGV2X2NudCk7CisKKwlpZiAocmV0KQorCQlrZnJlZShkcml2ZXJfY29uZmlnKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAordnhnZV9jbG9zZXIodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnZ4Z2VfZHJpdmVyKTsKKwlrZnJlZShkcml2ZXJfY29uZmlnKTsKK30KK21vZHVsZV9pbml0KHZ4Z2Vfc3RhcnRlcik7Cittb2R1bGVfZXhpdCh2eGdlX2Nsb3Nlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzA0YjJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uaApAQCAtMCwwICsxLDU1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqIERyaXZlcnMgYmFzZWQgb24gb3IgZGVyaXZlZCBmcm9tIHRoaXMgY29kZSBmYWxsIHVuZGVyIHRoZSBHUEwgYW5kIG11c3QKKyAqIHJldGFpbiB0aGUgYXV0aG9yc2hpcCwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZS4gIFRoaXMgZmlsZSBpcyBub3QKKyAqIGEgY29tcGxldGUgcHJvZ3JhbSBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBlbnRpcmUgb3BlcmF0aW5nCisgKiBzeXN0ZW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTC4KKyAqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIHZ4Z2UtbWFpbi5oOiBEcml2ZXIgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTworICogICAgICAgICAgICAgIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgorICogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBWWEdFX01BSU5fSAorI2RlZmluZSBWWEdFX01BSU5fSAorCisjaW5jbHVkZSAidnhnZS10cmFmZmljLmgiCisjaW5jbHVkZSAidnhnZS1jb25maWcuaCIKKyNpbmNsdWRlICJ2eGdlLXZlcnNpb24uaCIKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNkZWZpbmUgVlhHRV9EUklWRVJfTkFNRQkJInZ4Z2UiCisjZGVmaW5lIFZYR0VfRFJJVkVSX1ZFTkRPUgkJIk5ldGVyaW9uLCBJbmMiCisjZGVmaW5lIFZYR0VfRFJJVkVSX1ZFUlNJT05fTUFKT1IgMAorCisjZGVmaW5lIERSVl9WRVJTSU9OCVZYR0VfVkVSU0lPTl9NQUpPUiIuIlZYR0VfVkVSU0lPTl9NSU5PUiIuIlwKKwlWWEdFX1ZFUlNJT05fRklYIi4iVlhHRV9WRVJTSU9OX0JVSUxEIi0iXAorCVZYR0VfVkVSU0lPTl9GT1IKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOX1dJTgkJMHg1NzMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fVU5JCQkweDU4MzMKKyNkZWZpbmUJVlhHRV9VU0VfREVGQVVMVAkJMHhmZmZmZmZmZgorI2RlZmluZSBWWEdFX0hXX1ZQQVRIX01TSVhfQUNUSVZFCTQKKyNkZWZpbmUgVlhHRV9IV19SWFNZTkNfRlJFUV9DTlQJCTQKKyNkZWZpbmUgVlhHRV9MTF9XQVRDSF9ET0dfVElNRU9VVAkoMTUgKiBIWikKKyNkZWZpbmUgVlhHRV9MTF9SWF9DT1BZX1RIUkVTSE9MRAkyNTYKKyNkZWZpbmUgVlhHRV9ERUZfRklGT19MRU5HVEgJCTg0CisKKyNkZWZpbmUgTk9fU1RFRVJJTkcJCTAKKyNkZWZpbmUgUE9SVF9TVEVFUklORwkJMHgxCisjZGVmaW5lIFJUSF9TVEVFUklORwkJMHgyCisjZGVmaW5lIFJYX1RPU19TVEVFUklORwkJMHgzCisjZGVmaW5lIFJYX1ZMQU5fU1RFRVJJTkcJMHg0CisjZGVmaW5lIFJUSF9CVUNLRVRfU0laRQkJNAorCisjZGVmaW5lCVRYX1BSSU9SSVRZX1NURUVSSU5HCTEKKyNkZWZpbmUJVFhfVkxBTl9TVEVFUklORwkyCisjZGVmaW5lCVRYX1BPUlRfU1RFRVJJTkcJMworI2RlZmluZQlUWF9NVUxUSVFfU1RFRVJJTkcJNAorCisjZGVmaW5lIFZYR0VfSFdfTUFDX0FERFJfTEVBUk5fREVGQVVMVCBWWEdFX0hXX1JUU19NQUNfRElTQUJMRQorCisjZGVmaW5lIFZYR0VfVFRJX0JUSU1FUl9WQUwgMjUwMDAwCisKKyNkZWZpbmUgVlhHRV9UVElfTFRJTUVSX1ZBTCAxMDAwCisjZGVmaW5lIFZYR0VfVFRJX1JUSU1FUl9WQUwgMAorI2RlZmluZSBWWEdFX1JUSV9CVElNRVJfVkFMIDI1MAorI2RlZmluZSBWWEdFX1JUSV9MVElNRVJfVkFMIDEwMAorI2RlZmluZSBWWEdFX1JUSV9SVElNRVJfVkFMIDAKKyNkZWZpbmUgVlhHRV9GSUZPX0lORElDQVRFX01BWF9QS1RTIFZYR0VfREVGX0ZJRk9fTEVOR1RICisjZGVmaW5lIFZYR0VfSVNSX1BPTExJTkdfQ05UIAk4CisjZGVmaW5lIFZYR0VfTUFYX0NPTkZJR19ERVYJMHhGRgorI2RlZmluZSBWWEdFX0VYRUNfTU9ERV9ESVNBQkxFCTAKKyNkZWZpbmUgVlhHRV9FWEVDX01PREVfRU5BQkxFCTEKKyNkZWZpbmUgVlhHRV9NQVhfQ09ORklHX1BPUlQJMQorI2RlZmluZSBWWEdFX0FMTF9WSURfRElTQUJMRQkwCisjZGVmaW5lIFZYR0VfQUxMX1ZJRF9FTkFCTEUJMQorI2RlZmluZSBWWEdFX1BBVVNFX0NUUkxfRElTQUJMRQkwCisjZGVmaW5lIFZYR0VfUEFVU0VfQ1RSTF9FTkFCTEUJMQorCisjZGVmaW5lIFRUSV9UWF9VUkFOR0VfQQk1CisjZGVmaW5lIFRUSV9UWF9VUkFOR0VfQgkxNQorI2RlZmluZSBUVElfVFhfVVJBTkdFX0MJNDAKKyNkZWZpbmUgVFRJX1RYX1VGQ19BCTUKKyNkZWZpbmUgVFRJX1RYX1VGQ19CCTQwCisjZGVmaW5lIFRUSV9UWF9VRkNfQwk2MAorI2RlZmluZSBUVElfVFhfVUZDX0QJMTAwCisKKyNkZWZpbmUgUlRJX1JYX1VSQU5HRV9BCTUKKyNkZWZpbmUgUlRJX1JYX1VSQU5HRV9CCTE1CisjZGVmaW5lIFJUSV9SWF9VUkFOR0VfQwk0MAorI2RlZmluZSBSVElfUlhfVUZDX0EJMQorI2RlZmluZSBSVElfUlhfVUZDX0IJNQorI2RlZmluZSBSVElfUlhfVUZDX0MJMTAKKyNkZWZpbmUgUlRJX1JYX1VGQ19ECTE1CisKKy8qIE1pbGxpIHNlY3MgdGltZXIgcGVyaW9kICovCisjZGVmaW5lIFZYR0VfVElNRVJfREVMQVkJCTEwMDAwCisKKyNkZWZpbmUgVlhHRV9MTF9NQVhfRlJBTUVfU0laRShkZXYpICgoZGV2KS0+bXR1ICsgVlhHRV9IV19NQUNfSEVBREVSX01BWF9TSVpFKQorCitlbnVtIHZ4Z2VfcmVzZXRfZXZlbnQgeworCS8qIHJlc2V0IGV2ZW50cyAqLworCVZYR0VfTExfVlBBVEhfUkVTRVQJPSAwLAorCVZYR0VfTExfREVWSUNFX1JFU0VUCT0gMSwKKwlWWEdFX0xMX0ZVTExfUkVTRVQJPSAyLAorCVZYR0VfTExfU1RBUlRfUkVTRVQJPSAzLAorCVZYR0VfTExfQ09NUExfUkVTRVQJPSA0Cit9OworLyogVGhlc2UgZmxhZ3MgcmVwcmVzZW50IHRoZSBkZXZpY2VzIHRlbXBvcmFyeSBzdGF0ZSAqLworZW51bSB2eGdlX2RldmljZV9zdGF0ZV90IHsKK19fVlhHRV9TVEFURV9SRVNFVF9DQVJEID0gMCwKK19fVlhHRV9TVEFURV9DQVJEX1VQCit9OworCitlbnVtIHZ4Z2VfbWFjX2FkZHJfc3RhdGUgeworCS8qIG1hYyBhZGRyZXNzIHN0YXRlcyAqLworCVZYR0VfTExfTUFDX0FERFJfSU5fTElTVCAgICAgICAgPSAwLAorCVZYR0VfTExfTUFDX0FERFJfSU5fREFfVEFCTEUgICAgPSAxCit9OworCitzdHJ1Y3QgdnhnZV9kcnZfY29uZmlnIHsKKwlpbnQgY29uZmlnX2Rldl9jbnQ7CisJaW50IHRvdGFsX2Rldl9jbnQ7CisJdW5zaWduZWQgbG9uZyBpbnRhX2Rldl9vcGVuOworCWludCBnX25vX2NwdXM7CisJdW5zaWduZWQgaW50IHZwYXRoX3Blcl9kZXY7Cit9OworCitzdHJ1Y3QgbWFjSW5mbyB7CisJdW5zaWduZWQgY2hhciBtYWNhZGRyW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBjaGFyIG1hY21hc2tbRVRIX0FMRU5dOworCXVuc2lnbmVkIGludCB2cGF0aF9ubzsKKwllbnVtIHZ4Z2VfbWFjX2FkZHJfc3RhdGUgc3RhdGU7Cit9OworCitzdHJ1Y3QgdnhnZV9jb25maWcgeworCWludAkJdHhfcGF1c2VfZW5hYmxlOworCWludAkJcnhfcGF1c2VfZW5hYmxlOworCisjZGVmaW5lCU5FV19OQVBJX1dFSUdIVAk2NAorCWludAkJbmFwaV93ZWlnaHQ7CisjZGVmaW5lIFZYR0VfR1JPX0RPTk9UX0FHR1JFR0FURQkJMAorI2RlZmluZSBWWEdFX0dST19BTFdBWVNfQUdHUkVHQVRFCQkxCisJaW50CQlncm9fZW5hYmxlOworCWludAkJaW50cl90eXBlOworI2RlZmluZSBJTlRBCTAKKyNkZWZpbmUgTVNJCTEKKyNkZWZpbmUgTVNJX1gJMgorCisJaW50CQlhZGRyX2xlYXJuX2VuOworCisJaW50CQlydGhfc3RlZXJpbmc7CisJaW50CQlydGhfYWxnb3JpdGhtOworCWludAkJcnRoX2hhc2hfdHlwZV90Y3BpcHY0OworCWludAkJcnRoX2hhc2hfdHlwZV9pcHY0OworCWludAkJcnRoX2hhc2hfdHlwZV90Y3BpcHY2OworCWludAkJcnRoX2hhc2hfdHlwZV9pcHY2OworCWludAkJcnRoX2hhc2hfdHlwZV90Y3BpcHY2ZXg7CisJaW50CQlydGhfaGFzaF90eXBlX2lwdjZleDsKKwlpbnQJCXJ0aF9ia3Rfc3o7CisJaW50CQlydGhfamhhc2hfZ29sZGVuX3JhdGlvOworCWludAkJdHhfc3RlZXJpbmdfdHlwZTsKKwlpbnQgCWZpZm9faW5kaWNhdGVfbWF4X3BrdHM7CisJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX2h3X2luZm8gZGV2aWNlX2h3X2luZm87Cit9OworCitzdHJ1Y3QgdnhnZV9tc2l4X2VudHJ5IHsKKwkvKiBNaW1pY2luZyB0aGUgbXNpeF9lbnRyeSBzdHJ1Y3Qgb2YgS2VybmVsLiAqLworCXUxNiB2ZWN0b3I7CisJdTE2IGVudHJ5OworCXUxNiBpbl91c2U7CisJdm9pZCAqYXJnOworfTsKKworLyogU29mdHdhcmUgU3RhdGlzdGljcyAqLworCitzdHJ1Y3QgdnhnZV9zd19zdGF0cyB7CisJLyogTmV0d29yayBTdGF0cyAoaW50ZXJmYWNlIHN0YXRzKSAqLworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKKworCS8qIFR4ICovCisJdTY0IHR4X2ZybXM7CisJdTY0IHR4X2Vycm9yczsKKwl1NjQgdHhfYnl0ZXM7CisJdTY0IHR4ZF9ub3RfZnJlZTsKKwl1NjQgdHhkX291dF9vZl9kZXNjOworCisJLyogVmlydHVhbCBQYXRoICovCisJdTY0IHZwYXRoc19vcGVuOworCXU2NCB2cGF0aF9vcGVuX2ZhaWw7CisKKwkvKiBSeCAqLworCXU2NCByeF9mcm1zOworCXU2NCByeF9lcnJvcnM7CisJdTY0IHJ4X2J5dGVzOworCXU2NCByeF9tY2FzdDsKKworCS8qIE1pc2MuICovCisJdTY0IGxpbmtfdXA7CisJdTY0IGxpbmtfZG93bjsKKwl1NjQgcGNpX21hcF9mYWlsOworCXU2NCBza2JfYWxsb2NfZmFpbDsKK307CisKK3N0cnVjdCB2eGdlX21hY19hZGRycyB7CisJc3RydWN0IGxpc3RfaGVhZCBpdGVtOworCXU2NCBtYWNhZGRyOworCXU2NCBtYWNtYXNrOworCWVudW0gdnhnZV9tYWNfYWRkcl9zdGF0ZSBzdGF0ZTsKK307CisKK3N0cnVjdCB2eGdlZGV2OworCitzdHJ1Y3QgdnhnZV9maWZvX3N0YXRzIHsKKwl1NjQgdHhfZnJtczsKKwl1NjQgdHhfZXJyb3JzOworCXU2NCB0eF9ieXRlczsKKwl1NjQgdHhkX25vdF9mcmVlOworCXU2NCB0eGRfb3V0X29mX2Rlc2M7CisJdTY0IHBjaV9tYXBfZmFpbDsKK307CisKK3N0cnVjdCB2eGdlX2ZpZm8geworCXN0cnVjdCBuZXRfZGV2aWNlCSpuZGV2OworCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmhhbmRsZTsKKworCS8qIFRoZSB2cGF0aCBpZCBtYWludGFpbmVkIGluIHRoZSBkcml2ZXIgLQorCSAqIDAgdG8gJ21heGltdW1fdnBhdGhzX2luX2Z1bmN0aW9uIC0gMScKKwkgKi8KKwlpbnQgZHJpdmVyX2lkOworCWludCB0eF9zdGVlcmluZ190eXBlOworCWludCBpbmRpY2F0ZV9tYXhfcGt0czsKKwlzcGlubG9ja190IHR4X2xvY2s7CisJLyogZmxhZyB1c2VkIHRvIG1haW50YWluIHF1ZXVlIHN0YXRlIHdoZW4gTVVMVElRIGlzIG5vdCBlbmFibGVkICovCisjZGVmaW5lIFZQQVRIX1FVRVVFX1NUQVJUICAgICAgIDAKKyNkZWZpbmUgVlBBVEhfUVVFVUVfU1RPUCAgICAgICAgMQorCWludCBxdWV1ZV9zdGF0ZTsKKworCS8qIFR4IHN0YXRzICovCisJc3RydWN0IHZ4Z2VfZmlmb19zdGF0cyBzdGF0czsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitzdHJ1Y3QgdnhnZV9yaW5nX3N0YXRzIHsKKwl1NjQgcHJldl9yeF9mcm1zOworCXU2NCByeF9mcm1zOworCXU2NCByeF9lcnJvcnM7CisJdTY0IHJ4X2Ryb3BwZWQ7CisJdTY0IHJ4X2J5dGVzOworCXU2NCByeF9tY2FzdDsKKwl1NjQgcGNpX21hcF9mYWlsOworCXU2NCBza2JfYWxsb2NfZmFpbDsKK307CisKK3N0cnVjdCB2eGdlX3JpbmcgeworCXN0cnVjdCBuZXRfZGV2aWNlCSpuZGV2OworCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcJKmhhbmRsZTsKKwkvKiBUaGUgdnBhdGggaWQgbWFpbnRhaW5lZCBpbiB0aGUgZHJpdmVyIC0KKwkgKiAwIHRvICdtYXhpbXVtX3ZwYXRoc19pbl9mdW5jdGlvbiAtIDEnCisJICovCisJaW50IGRyaXZlcl9pZDsKKworCSAvKiBjb3B5IG9mIHRoZSBmbGFnIGluZGljYXRpbmcgd2hldGhlciByeF9jc3VtIGlzIHRvIGJlIHVzZWQgKi8KKwl1MzIgcnhfY3N1bTsKKworCWludCBwa3RzX3Byb2Nlc3NlZDsKKwlpbnQgYnVkZ2V0OworCWludCBncm9fZW5hYmxlOworCisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisKKyNkZWZpbmUgVlhHRV9NQVhfTUFDX0FERFJfQ09VTlQJCTMwCisKKwlpbnQgdmxhbl90YWdfc3RyaXA7CisJc3RydWN0IHZsYW5fZ3JvdXAgKnZsZ3JwOworCWludCByeF92ZWN0b3Jfbm87CisJZW51bSB2eGdlX2h3X3N0YXR1cyBsYXN0X3N0YXR1czsKKworCS8qIFJ4IHN0YXRzICovCisJc3RydWN0IHZ4Z2VfcmluZ19zdGF0cyBzdGF0czsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOworCitzdHJ1Y3QgdnhnZV92cGF0aCB7CisKKwlzdHJ1Y3QgdnhnZV9maWZvIGZpZm87CisJc3RydWN0IHZ4Z2VfcmluZyByaW5nOworCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKmhhbmRsZTsKKworCS8qIEFjdHVhbCB2cGF0aCBpZCBmb3IgdGhpcyB2cGF0aCBpbiB0aGUgZGV2aWNlIC0gMCB0byAxNiAqLworCWludCBkZXZpY2VfaWQ7CisJaW50IG1heF9tYWNfYWRkcl9jbnQ7CisJaW50IGlzX2NvbmZpZ3VyZWQ7CisJaW50IGlzX29wZW47CisJc3RydWN0IHZ4Z2VkZXYgKnZkZXY7CisJdTggKG1hY2FkZHIpW0VUSF9BTEVOXTsKKwl1OCAobWFjbWFzaylbRVRIX0FMRU5dOworCisjZGVmaW5lIFZYR0VfTUFYX0xFQVJOX01BQ19BRERSX0NOVAkyMDQ4CisJLyogbWFjIGFkZHJlc3NlcyBjdXJyZW50bHkgcHJvZ3JhbW1lZCBpbnRvIE5JQyAqLworCXUxNiBtYWNfYWRkcl9jbnQ7CisJdTE2IG1jYXN0X2FkZHJfY250OworCXN0cnVjdCBsaXN0X2hlYWQgbWFjX2FkZHJfbGlzdDsKKworCXUzMiBsZXZlbF9lcnI7CisJdTMyIGxldmVsX3RyYWNlOworfTsKKyNkZWZpbmUgVlhHRV9DT1BZX0RFQlVHX0lORk9fVE9fTEwodmRldiwgZXJyLCB0cmFjZSkgewlcCisJZm9yIChpID0gMDsgaSA8IHZkZXYtPm5vX29mX3ZwYXRoOyBpKyspIHsJCVwKKwkJdmRldi0+dnBhdGhzW2ldLmxldmVsX2VyciA9IGVycjsJCVwKKwkJdmRldi0+dnBhdGhzW2ldLmxldmVsX3RyYWNlID0gdHJhY2U7CQlcCisJfQkJCQkJCQlcCisJdmRldi0+bGV2ZWxfZXJyID0gZXJyOwkJCQkJXAorCXZkZXYtPmxldmVsX3RyYWNlID0gdHJhY2U7CQkJCVwKK30KKworc3RydWN0IHZ4Z2VkZXYgeworCXN0cnVjdCBuZXRfZGV2aWNlCSpuZGV2OworCXN0cnVjdCBwY2lfZGV2CQkqcGRldjsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aDsKKwlzdHJ1Y3Qgdmxhbl9ncm91cAkqdmxncnA7CisJaW50IHZsYW5fdGFnX3N0cmlwOworCXN0cnVjdCB2eGdlX2NvbmZpZwljb25maWc7CisJdW5zaWduZWQgbG9uZwlzdGF0ZTsKKworCS8qIEluZGljYXRlcyB3aGljaCB2cGF0aCB0byByZXNldCAqLworCXVuc2lnbmVkIGxvbmcgIHZwX3Jlc2V0OworCisJLyogVGltZXIgdXNlZCBmb3IgcG9sbGluZyB2cGF0aCByZXNldHMgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB2cF9yZXNldF90aW1lcjsKKworCS8qIFRpbWVyIHVzZWQgZm9yIHBvbGxpbmcgdnBhdGggbG9ja3VwICovCisJc3RydWN0IHRpbWVyX2xpc3QgdnBfbG9ja3VwX3RpbWVyOworCisJLyoKKwkgKiBGbGFncyB0byB0cmFjayB3aGV0aGVyIGRldmljZSBpcyBpbiBBbGwgTXVsdGljYXN0CisJICogb3IgaW4gcHJvbWlzY3VvdXMgbW9kZS4KKwkgKi8KKwl1MTYJCWFsbF9tdWx0aV9mbGc7CisKKwkgLyogQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciByeF9jc3VtIGlzIHRvIGJlIHVzZWQgb3Igbm90LiAqLworCXUzMglyeF9jc3VtOworCisJc3RydWN0IHZ4Z2VfbXNpeF9lbnRyeSAqdnhnZV9lbnRyaWVzOworCXN0cnVjdCBtc2l4X2VudHJ5ICplbnRyaWVzOworCS8qCisJICogNCBmb3IgZWFjaCB2cGF0aCAqIDE3OworCSAqIHRvdGFsIGlzIDY4CisJICovCisjZGVmaW5lCVZYR0VfTUFYX1JFUVVFU1RFRF9NU0lYCTY4CisjZGVmaW5lIFZYR0VfSU5UUl9TVFJMRU4gODAKKwljaGFyIGRlc2NbVlhHRV9NQVhfUkVRVUVTVEVEX01TSVhdW1ZYR0VfSU5UUl9TVFJMRU5dOworCisJZW51bSB2eGdlX2h3X2V2ZW50IGNyaWNfZXJyX2V2ZW50OworCisJaW50IG1heF92cGF0aF9zdXBwb3J0ZWQ7CisJaW50IG5vX29mX3ZwYXRoOworCisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisJLyogQSBkZWJ1ZyBvcHRpb24sIHdoZW4gZW5hYmxlZCBhbmQgaWYgZXJyb3IgY29uZGl0aW9uIG9jY3VycywKKwkgKiB0aGUgZHJpdmVyIHdpbGwgZG8gZm9sbG93aW5nIHN0ZXBzOgorCSAqIC0gbWFzayBhbGwgaW50ZXJydXB0cworCSAqIC0gTm90IGNsZWFyIHRoZSBzb3VyY2Ugb2YgdGhlIGFsYXJtCisJICogLSBncmFjZWZ1bGx5IHN0b3AgYWxsIEkvTworCSAqIEEgZGlhZ25vc3RpYyBkdW1wIG9mIHJlZ2lzdGVyIGFuZCBzdGF0cyBhdCB0aGlzIHBvaW50CisJICogcmV2ZWFscyB2ZXJ5IHVzZWZ1bCBpbmZvcm1hdGlvbi4KKwkgKi8KKwlpbnQgZXhlY19tb2RlOworCWludCBtYXhfY29uZmlnX3BvcnQ7CisJc3RydWN0IHZ4Z2VfdnBhdGgJKnZwYXRoczsKKworCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cF9oYW5kbGVzW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworCXZvaWQgX19pb21lbSAqYmFyMDsKKwl2b2lkIF9faW9tZW0gKmJhcjE7CisJc3RydWN0IHZ4Z2Vfc3dfc3RhdHMJc3RhdHM7CisJaW50CQltdHU7CisJLyogQmVsb3cgdmFyaWFibGVzIGFyZSB1c2VkIGZvciB2cGF0aCBzZWxlY3Rpb24gdG8gdHJhbnNtaXQgYSBwYWNrZXQgKi8KKwl1OCAJCXZwYXRoX3NlbGVjdG9yW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworCXU2NAkJdnBhdGhzX2RlcGxveWVkOworCisJdTMyIAkJaW50cl9jbnQ7CisJdTMyIAkJbGV2ZWxfZXJyOworCXUzMiAJCWxldmVsX3RyYWNlOworCWNoYXIJCWZ3X3ZlcnNpb25bVlhHRV9IV19GV19TVFJMRU5dOworfTsKKworc3RydWN0IHZ4Z2VfcnhfcHJpdiB7CisJc3RydWN0IHNrX2J1ZmYJCSpza2I7CisJZG1hX2FkZHJfdAkJZGF0YV9kbWE7CisJZG1hX2FkZHJfdAkJZGF0YV9zaXplOworfTsKKworc3RydWN0IHZ4Z2VfdHhfcHJpdiB7CisJc3RydWN0IHNrX2J1ZmYJCSpza2I7CisJZG1hX2FkZHJfdAkJZG1hX2J1ZmZlcnNbTUFYX1NLQl9GUkFHUysxXTsKK307CisKKyNkZWZpbmUgVlhHRV9NT0RVTEVfUEFSQU1fSU5UKHAsIHZhbCkgXAorCXN0YXRpYyBpbnQgcCA9IHZhbDsgXAorCW1vZHVsZV9wYXJhbShwLCBpbnQsIDApCisKKyNkZWZpbmUgdnhnZV9vc19idWcoZm10Li4uKQkJeyBwcmludGsoZm10KTsgQlVHKCk7IH0KKworI2RlZmluZSB2eGdlX29zX3RpbWVyKHRpbWVyLCBoYW5kbGUsIGFyZywgZXhwKSBkbyB7IFwKKwkJaW5pdF90aW1lcigmdGltZXIpOyBcCisJCXRpbWVyLmZ1bmN0aW9uID0gaGFuZGxlOyBcCisJCXRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYXJnOyBcCisJCW1vZF90aW1lcigmdGltZXIsIChqaWZmaWVzICsgZXhwKSk7IFwKKwl9IHdoaWxlICgwKTsKKworaW50IF9fZGV2aW5pdCB2eGdlX2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwkJCQkgICAgc3RydWN0IHZ4Z2VfY29uZmlnICpjb25maWcsCisJCQkJICAgIGludCBoaWdoX2RtYSwgaW50IG5vX29mX3ZwYXRoLAorCQkJCSAgICBzdHJ1Y3QgdnhnZWRldiAqKnZkZXYpOworCit2b2lkIHZ4Z2VfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCit2b2lkIHZ4Z2VfdnBhdGhfaW50cl9lbmFibGUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIGludCB2cF9pZCk7CisKK3ZvaWQgdnhnZV92cGF0aF9pbnRyX2Rpc2FibGUoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsIGludCB2cF9pZCk7CisKK3ZvaWQgdnhnZV9jYWxsYmFja19saW5rX3VwKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKwordm9pZCB2eGdlX2NhbGxiYWNrX2xpbmtfZG93bihzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9hZGRfbWFjX2FkZHIoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsCisJc3RydWN0IG1hY0luZm8gKm1hYyk7CisKK2ludCB2eGdlX21hY19saXN0X2RlbChzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgsIHN0cnVjdCBtYWNJbmZvICptYWMpOworCitpbnQgdnhnZV9yZXNldChzdHJ1Y3QgdnhnZWRldiAqdmRldik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfcnhfMWJfY29tcGwoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5naCwgdm9pZCAqZHRyLAorCXU4IHRfY29kZSwgdm9pZCAqdXNlcmRhdGEpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX3htaXRfY29tcGwoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvX2h3LCB2b2lkICpkdHIsCisJZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgdF9jb2RlLCB2b2lkICp1c2VyZGF0YSwgdm9pZCAqKnNrYl9wdHIpOworCitpbnQgdnhnZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworaW50IHZ4Z2Vfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwordm9pZCB2eGdlX2Nsb3NlX3ZwYXRocyhzdHJ1Y3QgdnhnZWRldiAqdmRldiwgaW50IGluZGV4KTsKKworaW50IHZ4Z2Vfb3Blbl92cGF0aHMoc3RydWN0IHZ4Z2VkZXYgKnZkZXYpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfcmVzZXRfYWxsX3ZwYXRocyhzdHJ1Y3QgdnhnZWRldiAqdmRldik7CisKK3ZvaWQgdnhnZV9zdG9wX2FsbF90eF9xdWV1ZShzdHJ1Y3QgdnhnZWRldiAqdmRldik7CisKK3ZvaWQgdnhnZV9zdG9wX3R4X3F1ZXVlKHN0cnVjdCB2eGdlX2ZpZm8gKmZpZm8pOworCit2b2lkIHZ4Z2Vfc3RhcnRfYWxsX3R4X3F1ZXVlKHN0cnVjdCB2eGdlZGV2ICp2ZGV2KTsKKwordm9pZCB2eGdlX3dha2VfdHhfcXVldWUoc3RydWN0IHZ4Z2VfZmlmbyAqZmlmbywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9hZGRfbWFjX2FkZHIoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsCisJc3RydWN0IG1hY0luZm8gKm1hYyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9kZWxfbWFjX2FkZHIoc3RydWN0IHZ4Z2VkZXYgKnZkZXYsCisJc3RydWN0IG1hY0luZm8gKm1hYyk7CisKK2ludCB2eGdlX21hY19saXN0X2FkZChzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgsCisJc3RydWN0IG1hY0luZm8gKm1hYyk7CisKK3ZvaWQgdnhnZV9mcmVlX21hY19hZGRfbGlzdChzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfcmVzdG9yZV92cGF0aF9tYWNfYWRkcihzdHJ1Y3QgdnhnZV92cGF0aCAqdnBhdGgpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfcmVzdG9yZV92cGF0aF92aWRfdGFibGUoc3RydWN0IHZ4Z2VfdnBhdGggKnZwYXRoKTsKKworaW50IGRvX3Z4Z2VfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGRvX2lvKTsKK2V4dGVybiB2b2lkIGluaXRpYWxpemVfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOworLyoqCisgKiAjZGVmaW5lIFZYR0VfREVCVUdfSU5JVDogZGVidWcgZm9yIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucworICogI2RlZmluZSBWWEdFX0RFQlVHX1RYCSA6IGRlYnVnIHRyYW5zbWl0IHJlbGF0ZWQgZnVuY3Rpb25zCisgKiAjZGVmaW5lIFZYR0VfREVCVUdfUlggIDogZGVidWcgcmVjZXZpY2UgcmVsYXRlZCBmdW5jdGlvbnMKKyAqICNkZWZpbmUgVlhHRV9ERUJVR19NRU0gOiBkZWJ1ZyBtZW1vcnkgbW9kdWxlCisgKiAjZGVmaW5lIFZYR0VfREVCVUdfTE9DSzogZGVidWcgbG9ja3MKKyAqICNkZWZpbmUgVlhHRV9ERUJVR19TRU0gOiBkZWJ1ZyBzZW1hcGhvcmUKKyAqICNkZWZpbmUgVlhHRV9ERUJVR19FTlRSWUVYSVQ6IGRlYnVnIGZ1bmN0aW9ucyBieSBhZGRpbmcgZW50cnkgZXhpdCBzdGF0ZW1lbnRzCisqLworI2RlZmluZSBWWEdFX0RFQlVHX0lOSVQJCTB4MDAwMDAwMDEKKyNkZWZpbmUgVlhHRV9ERUJVR19UWAkJMHgwMDAwMDAwMgorI2RlZmluZSBWWEdFX0RFQlVHX1JYCQkweDAwMDAwMDA0CisjZGVmaW5lIFZYR0VfREVCVUdfTUVNCQkweDAwMDAwMDA4CisjZGVmaW5lIFZYR0VfREVCVUdfTE9DSwkJMHgwMDAwMDAxMAorI2RlZmluZSBWWEdFX0RFQlVHX1NFTQkJMHgwMDAwMDAyMAorI2RlZmluZSBWWEdFX0RFQlVHX0VOVFJZRVhJVAkweDAwMDAwMDQwCisjZGVmaW5lIFZYR0VfREVCVUdfSU5UUgkJMHgwMDAwMDA4MAorI2RlZmluZSBWWEdFX0RFQlVHX0xMX0NPTkZJRwkweDAwMDAwMTAwCisKKy8qIERlYnVnIHRyYWNpbmcgZm9yIFZYR0UgZHJpdmVyICovCisjaWZuZGVmIFZYR0VfREVCVUdfTUFTSworI2RlZmluZSBWWEdFX0RFQlVHX01BU0sJMHgwCisjZW5kaWYKKworI2lmIChWWEdFX0RFQlVHX0xMX0NPTkZJRyAmIFZYR0VfREVCVUdfTUFTSykKKyNkZWZpbmUgdnhnZV9kZWJ1Z19sbF9jb25maWcobGV2ZWwsIGZtdCwgLi4uKSBcCisJdnhnZV9kZWJ1Z19sbChsZXZlbCwgVlhHRV9ERUJVR19MTF9DT05GSUcsIGZtdCwgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSB2eGdlX2RlYnVnX2xsX2NvbmZpZyhsZXZlbCwgZm10LCAuLi4pCisjZW5kaWYKKworI2lmIChWWEdFX0RFQlVHX0lOSVQgJiBWWEdFX0RFQlVHX01BU0spCisjZGVmaW5lIHZ4Z2VfZGVidWdfaW5pdChsZXZlbCwgZm10LCAuLi4pIFwKKwl2eGdlX2RlYnVnX2xsKGxldmVsLCBWWEdFX0RFQlVHX0lOSVQsIGZtdCwgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSB2eGdlX2RlYnVnX2luaXQobGV2ZWwsIGZtdCwgLi4uKQorI2VuZGlmCisKKyNpZiAoVlhHRV9ERUJVR19UWCAmIFZYR0VfREVCVUdfTUFTSykKKyNkZWZpbmUgdnhnZV9kZWJ1Z190eChsZXZlbCwgZm10LCAuLi4pIFwKKwl2eGdlX2RlYnVnX2xsKGxldmVsLCBWWEdFX0RFQlVHX1RYLCBmbXQsIF9fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgdnhnZV9kZWJ1Z190eChsZXZlbCwgZm10LCAuLi4pCisjZW5kaWYKKworI2lmIChWWEdFX0RFQlVHX1JYICYgVlhHRV9ERUJVR19NQVNLKQorI2RlZmluZSB2eGdlX2RlYnVnX3J4KGxldmVsLCBmbXQsIC4uLikgXAorCXZ4Z2VfZGVidWdfbGwobGV2ZWwsIFZYR0VfREVCVUdfUlgsIGZtdCwgX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSB2eGdlX2RlYnVnX3J4KGxldmVsLCBmbXQsIC4uLikKKyNlbmRpZgorCisjaWYgKFZYR0VfREVCVUdfTUVNICYgVlhHRV9ERUJVR19NQVNLKQorI2RlZmluZSB2eGdlX2RlYnVnX21lbShsZXZlbCwgZm10LCAuLi4pIFwKKwl2eGdlX2RlYnVnX2xsKGxldmVsLCBWWEdFX0RFQlVHX01FTSwgZm10LCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIHZ4Z2VfZGVidWdfbWVtKGxldmVsLCBmbXQsIC4uLikKKyNlbmRpZgorCisjaWYgKFZYR0VfREVCVUdfRU5UUllFWElUICYgVlhHRV9ERUJVR19NQVNLKQorI2RlZmluZSB2eGdlX2RlYnVnX2VudHJ5ZXhpdChsZXZlbCwgZm10LCAuLi4pIFwKKwl2eGdlX2RlYnVnX2xsKGxldmVsLCBWWEdFX0RFQlVHX0VOVFJZRVhJVCwgZm10LCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIHZ4Z2VfZGVidWdfZW50cnlleGl0KGxldmVsLCBmbXQsIC4uLikKKyNlbmRpZgorCisjaWYgKFZYR0VfREVCVUdfSU5UUiAmIFZYR0VfREVCVUdfTUFTSykKKyNkZWZpbmUgdnhnZV9kZWJ1Z19pbnRyKGxldmVsLCBmbXQsIC4uLikgXAorCXZ4Z2VfZGVidWdfbGwobGV2ZWwsIFZYR0VfREVCVUdfSU5UUiwgZm10LCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIHZ4Z2VfZGVidWdfaW50cihsZXZlbCwgZm10LCAuLi4pCisjZW5kaWYKKworI2RlZmluZSBWWEdFX0RFVklDRV9ERUJVR19MRVZFTF9TRVQobGV2ZWwsIG1hc2ssIHZkZXYpIHtcCisJdnhnZV9od19kZXZpY2VfZGVidWdfc2V0KChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAgKil2ZGV2LT5kZXZoLCBcCisJCWxldmVsLCBtYXNrKTtcCisJVlhHRV9DT1BZX0RFQlVHX0lORk9fVE9fTEwodmRldiwgXAorCQl2eGdlX2h3X2RldmljZV9lcnJvcl9sZXZlbF9nZXQoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSBcCisJCQl2ZGV2LT5kZXZoKSwgXAorCQl2eGdlX2h3X2RldmljZV90cmFjZV9sZXZlbF9nZXQoKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICAqKSBcCisJCQl2ZGV2LT5kZXZoKSk7XAorfQorCisjaWZkZWYgTkVUSUZfRl9HU08KKyNkZWZpbmUgdnhnZV90Y3BfbXNzKHNrYikgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpCisjZGVmaW5lIHZ4Z2VfdWRwX21zcyhza2IpIChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKQorI2RlZmluZSB2eGdlX29mZmxvYWRfdHlwZShza2IpIChza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXJlZy5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZjRkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtcmVnLmgKQEAgLTAsMCArMSw0NjA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAorICogcmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAgVGhpcyBmaWxlIGlzIG5vdAorICogYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKKyAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogdnhnZS1yZWcuaDogRHJpdmVyIGZvciBOZXRlcmlvbiBJbmMncyBYMzEwMCBTZXJpZXMgMTBHYkUgUENJZSBJL08gVmlydHVhbGl6ZWQKKyAqICAgICAgICAgICAgIFNlcnZlciBBZGFwdGVyLgorICogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBWWEdFX1JFR19ICisjZGVmaW5lIFZYR0VfUkVHX0gKKworLyoKKyAqIHZ4Z2VfbUJJVChsb2MpIC0gc2V0IGJpdCBhdCBvZmZzZXQKKyAqLworI2RlZmluZSB2eGdlX21CSVQobG9jKQkJKDB4ODAwMDAwMDAwMDAwMDAwMFVMTCA+PiAobG9jKSkKKworLyoKKyAqIHZ4Z2VfdkJJVCh2YWwsIGxvYywgc3opIC0gc2V0IGJpdHMgYXQgb2Zmc2V0CisgKi8KKyNkZWZpbmUgdnhnZV92QklUKHZhbCwgbG9jLCBzeikJKCgodTY0KSh2YWwpKSA8PCAoNjQtKGxvYyktKHN6KSkpCisjZGVmaW5lIHZ4Z2VfdkJJVDMyKHZhbCwgbG9jLCBzeikJKCgodTMyKSh2YWwpKSA8PCAoMzItKGxvYyktKHN6KSkpCisKKy8qCisgKiB2eGdlX2JWQUxuKGJpdHMsIGxvYywgbikgLSBHZXQgdGhlIHZhbHVlIG9mIG4gYml0cyBhdCBsb2NhdGlvbgorICovCisjZGVmaW5lIHZ4Z2VfYlZBTG4oYml0cywgbG9jLCBuKSBcCisJKCgoKHU2NCliaXRzKSA+PiAoNjQtKGxvYytuKSkpICYgKCgweDFVTEwgPDwgbikgLSAxKSkKKworI2RlZmluZQlWWEdFX0hXX1RJVEFOX0FTSUNfSURfR0VUX0lOSVRJQUxfREVWSUNFX0lEKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX1RJVEFOX0FTSUNfSURfR0VUX0lOSVRJQUxfTUFKT1JfUkVWSVNJT04oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNDgsIDgpCisjZGVmaW5lCVZYR0VfSFdfVElUQU5fQVNJQ19JRF9HRVRfSU5JVElBTF9NSU5PUl9SRVZJU0lPTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA1NiwgOCkKKworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1RPX0ZVTkNfTUFQX0NGRzFfR0VUX1ZQQVRIX1RPX0ZVTkNfTUFQX0NGRzEoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMywgNSkKKyNkZWZpbmUJVlhHRV9IV19IT1NUX1RZUEVfQVNTSUdOTUVOVFNfR0VUX0hPU1RfVFlQRV9BU1NJR05NRU5UUyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA1LCAzKQorI2RlZmluZSBWWEdFX0hXX1BGX1NXX1JFU0VUX0NPTU1BTkQJCQkJMHhBNQorCisjZGVmaW5lIFZYR0VfSFdfVElUQU5fUENJQ0ZHTUdNVF9SRUdfU1BBQ0VTCQkxNworI2RlZmluZSBWWEdFX0hXX1RJVEFOX1NSUENJTV9SRUdfU1BBQ0VTCQkJMTcKKyNkZWZpbmUgVlhHRV9IV19USVRBTl9WUE1HTVRfUkVHX1NQQUNFUwkJCTE3CisjZGVmaW5lIFZYR0VfSFdfVElUQU5fVlBBVEhfUkVHX1NQQUNFUwkJCTE3CisKKyNkZWZpbmUgVlhHRV9IV19BU0lDX01PREVfUkVTRVJWRUQJCQkJMAorI2RlZmluZSBWWEdFX0hXX0FTSUNfTU9ERV9OT19JT1YJCQkJMQorI2RlZmluZSBWWEdFX0hXX0FTSUNfTU9ERV9TUl9JT1YJCQkJMgorI2RlZmluZSBWWEdFX0hXX0FTSUNfTU9ERV9NUl9JT1YJCQkJMworCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfR0VOX0NGRzFfVE1BQ19QRVJNQV9TVE9QX0VOCQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19HRU5fQ0ZHMV9CTE9DS19CQ0FTVF9UT19XSVJFCQl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfR0VOX0NGRzFfQkxPQ0tfQkNBU1RfVE9fU1dJVENICXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19HRU5fQ0ZHMV9IT1NUX0FQUEVORF9GQ1MJCQl2eGdlX21CSVQoMzEpCisKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9JU19GSVJTVF9HRVRfVlBBVEhfSVNfRklSU1QoYml0cykJdnhnZV9iVkFMbihiaXRzLCAzLCAxKQorCisjZGVmaW5lCVZYR0VfSFdfVElNX1ZQQVRIX0FTU0lHTk1FTlRfR0VUX0JNQVBfUk9PVChiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9HRVRfTUFYX1BZTERfTEVOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDUwLCAxNCkKKworI2RlZmluZQlWWEdFX0hXX1hNQUNfVlNQT1JUX0NIT0lDRVNfVlBfR0VUX1ZTUE9SVF9WRUNUT1IoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMTcpCisKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1ZQQVRIX1RPX1ZTUE9SVF9WUE1HTVRfQ0xPTkVfR0VUX1ZTUE9SVF9OVU1CRVIoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMywgNSkKKworI2RlZmluZQlWWEdFX0hXX0tERkNfRFJCTF9UUklQTEVUX1RPVEFMX0dFVF9LREZDX01BWF9TSVpFKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE3LCAxNSkKKworI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9NT0RFX0xFR0FDWV9NT0RFCQkJMAorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9NT0RFX05PTl9PRkZMT0FEX09OTFkJCTEKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfTU9ERV9NVUxUSV9PUF9NT0RFCQkyCisKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfTU9ERV9NRVNTQUdFU19PTkxZCQkwCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX01PREVfTVVMVElfT1BfTU9ERQkJMQorCisjZGVmaW5lCVZYR0VfSFdfVE9DX0dFVF9LREZDX0lOSVRJQUxfT0ZGU0VUKHZhbCkgXAorCQkJCSh2YWwmflZYR0VfSFdfVE9DX0tERkNfSU5JVElBTF9CSVIoNykpCisjZGVmaW5lCVZYR0VfSFdfVE9DX0dFVF9LREZDX0lOSVRJQUxfQklSKHZhbCkgXAorCQkJCXZ4Z2VfYlZBTG4odmFsLCA2MSwgMykKKyNkZWZpbmUJVlhHRV9IV19UT0NfR0VUX1VTRENfSU5JVElBTF9PRkZTRVQodmFsKSBcCisJCQkJKHZhbCZ+VlhHRV9IV19UT0NfVVNEQ19JTklUSUFMX0JJUig3KSkKKyNkZWZpbmUJVlhHRV9IV19UT0NfR0VUX1VTRENfSU5JVElBTF9CSVIodmFsKSBcCisJCQkJdnhnZV9iVkFMbih2YWwsIDYxLCAzKQorCisjZGVmaW5lCVZYR0VfSFdfVE9DX0tERkNfVlBBVEhfU1RSSURFX0dFVF9UT0NfS0RGQ19WUEFUSF9TVFJJREUoYml0cykJYml0cworI2RlZmluZQlWWEdFX0hXX1RPQ19LREZDX0ZJRk9fU1RSSURFX0dFVF9UT0NfS0RGQ19GSUZPX1NUUklERShiaXRzKQliaXRzCisKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT19PRkZTRVRfR0VUX0tERkNfUkNUUjAoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxLCAxNSkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT19PRkZTRVRfR0VUX0tERkNfUkNUUjEoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNywgMTUpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fT0ZGU0VUX0dFVF9LREZDX1JDVFIyKGJpdHMpIFwKKwkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzMsIDE1KQorCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fT0ZGU0VUX0tERkNfVkFQVEhfTlVNKHZhbCkgdnhnZV92QklUKHZhbCwgNDIsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fT0ZGU0VUX0tERkNfRklGT19OVU0odmFsKSB2eGdlX3ZCSVQodmFsLCA0NywgMikKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT19PRkZTRVRfS0RGQ19GSUZPX09GRlNFVCh2YWwpIFwKKwkJCQkJdnhnZV92QklUKHZhbCwgNDksIDE1KQorCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzRfUklOR19NT0RFX09ORV9CVUZGRVIJCQkwCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzRfUklOR19NT0RFX1RIUkVFX0JVRkZFUgkJCTEKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHNF9SSU5HX01PREVfRklWRV9CVUZGRVIJCQkyCisKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHN19TQ0FUVEVSX01PREVfQQkJCQkwCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzdfU0NBVFRFUl9NT0RFX0IJCQkJMgorI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc3X1NDQVRURVJfTU9ERV9DCQkJCTEKKworI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9XRV9SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX1dFX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9WSUQgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0VUWVBFICAgICAgICAgICAgICAgMgorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUE4gICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SQU5HRV9QTiAgICAgICAgICAgIDQKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9HRU5fQ0ZHICAgICAgICAgNQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX1NPTE9fSVQgICAgICAgICA2CisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfSkhBU0hfQ0ZHICAgICAgIDcKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9NQVNLICAgICAgICAgICAgOAorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX0tFWSAgICAgICAgICAgICA5CisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9RT1MgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EUyAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQgICAgICAgIDEyCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9GV19WRVJTSU9OICAgICAgICAgIDEzCisKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0RBVEEwX0dFVF9EQV9NQUNfQUREUihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCA0OCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0RBVEEwX0RBX01BQ19BRERSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNDgpCisKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0RBVEExX0dFVF9EQV9NQUNfQUREUl9NQVNLKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDQ4KQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfREFUQTFfREFfTUFDX0FERFJfTUFTSyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQ4KQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfU1RFRVJfREFUQTFfREFfTUFDX0FERFJfQUREX1BSSVZJTEVHRURfTU9ERSBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg1NCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX1NURUVSX0RBVEExX0dFVF9EQV9NQUNfQUREUl9BRERfVlBBVEgoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNTUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9EQVRBMV9EQV9NQUNfQUREUl9BRERfVlBBVEgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9EQVRBMV9HRVRfREFfTUFDX0FERFJfQUREX01PREUoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNjIsIDIpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9TVEVFUl9EQVRBMV9EQV9NQUNfQUREUl9NT0RFKHZhbCkgdnhnZV92QklUKHZhbCwgNjIsIDIpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0FERF9FTlRSWQkJCTAKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0RFTEVURV9FTlRSWQkJMQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fTElTVF9GSVJTVF9FTlRSWQkJMgorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fTElTVF9ORVhUX0VOVFJZCQkzCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9SRUFEX0VOVFJZCQkJMAorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fV1JJVEVfRU5UUlkJCTEKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX1JFQURfTUVNT19FTlRSWQkJMworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fTEVEX0NPTlRST0wJCTQKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0FMTF9DTEVBUgkJCTE3MgorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQQkJMAorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfVklECQkxCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9FVFlQRQkJMgorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUE4JCTMKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9HRU5fQ0ZHCTUKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9TT0xPX0lUCTYKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9KSEFTSF9DRkcJNworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX01BU0sJCTgKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1JUSF9LRVkJCTkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX1FPUwkJMTAKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RTCQkxMQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfUlRIX01VTFRJX0lUCTEyCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9GV19NRU1PCQkxMworCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfREFfTUFDX0FERFIoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgNDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9EQV9NQUNfQUREUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQ4KQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfVkxBTl9JRChiaXRzKSB2eGdlX2JWQUxuKGJpdHMsIDAsIDEyKQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfVkxBTl9JRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDEyKQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRVRZUEUoYml0cykJdnhnZV9iVkFMbihiaXRzLCAwLCAxMSkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0VUWVBFKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9QTl9TUkNfREVTVF9TRUwoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMywgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1BOX1NSQ19ERVNUX1NFTAkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUE5fVENQX1VEUF9TRUwoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNywgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1BOX1RDUF9VRFBfU0VMCQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9QTl9QT1JUX05VTShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA4LCAxNikKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1BOX1BPUlRfTlVNKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgMTYpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfR0VOX1JUSF9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzLCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfRU4JCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9HRU5fQlVDS0VUX1NJWkUoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNCwgNCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fQlVDS0VUX1NJWkUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNCwgNCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfR0VOX0FMR19TRUwoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTAsIDIpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0FMR19TRUwodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTAsIDIpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0FMR19TRUxfSkVOS0lOUwkwCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX0FMR19TRUxfTVNfUlNTCTEKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fQUxHX1NFTF9DUkMzMkMJMgorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9HRU5fUlRIX1RDUF9JUFY0X0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE1LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfVENQX0lQVjRfRU4JdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9HRU5fUlRIX0lQVjRfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTksIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9JUFY0X0VOCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfR0VOX1JUSF9UQ1BfSVBWNl9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAyMywgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX1RDUF9JUFY2X0VOCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfR0VOX1JUSF9JUFY2X0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDI3LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9SVEhfSVBWNl9FTgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0dFTl9SVEhfVENQX0lQVjZfRVhfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzEsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfR0VOX1JUSF9UQ1BfSVBWNl9FWF9FTiB2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0dFTl9SVEhfSVBWNl9FWF9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzNSwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUlRIX0lQVjZfRVhfRU4JdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9HRU5fQUNUSVZFX1RBQkxFKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDM5LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0dFTl9BQ1RJVkVfVEFCTEUJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9HRU5fUkVQTF9FTlRSWV9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0MywgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9HRU5fUkVQTF9FTlRSWV9FTgl2eGdlX21CSVQoNDMpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfU09MT19JVF9FTlRSWV9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzLCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX1NPTE9fSVRfRU5UUllfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX1NPTE9fSVRfQlVDS0VUX0RBVEEoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgOSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9TT0xPX0lUX0JVQ0tFVF9EQVRBKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDksIDcpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfSVRFTTBfQlVDS0VUX05VTShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0lURU0wX0JVQ0tFVF9OVU0odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfSVRFTTBfRU5UUllfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgOCwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9JVEVNMF9FTlRSWV9FTgl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfSVRFTTBfQlVDS0VUX0RBVEEoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgOSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9JVEVNMF9CVUNLRVRfREFUQSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA5LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9JVEVNMV9CVUNLRVRfTlVNKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE2LCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0lURU0xX0JVQ0tFVF9OVU0odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0lURU0xX0VOVFJZX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDI0LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0lURU0xX0VOVFJZX0VOCXZ4Z2VfbUJJVCgyNCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfSVRFTTFfQlVDS0VUX0RBVEEoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMjUsIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSVRFTTFfQlVDS0VUX0RBVEEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjUsIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU0wX0JVQ0tFVF9OVU0oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNMF9CVUNLRVRfTlVNKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU0wX0VOVFJZX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDgsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTBfRU5UUllfRU4JdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU0wX0JVQ0tFVF9EQVRBKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDksIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTBfQlVDS0VUX0RBVEEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgOSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTFfQlVDS0VUX05VTShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNiwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNMV9CVUNLRVRfTlVNKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNMV9FTlRSWV9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAyNCwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNMV9FTlRSWV9FTgl2eGdlX21CSVQoMjQpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU0xX0JVQ0tFVF9EQVRBKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDI1LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU0xX0JVQ0tFVF9EQVRBKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI1LCA3KQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX0pIQVNIX0NGR19HT0xERU5fUkFUSU8oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfSkhBU0hfQ0ZHX0dPTERFTl9SQVRJTyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfSkhBU0hfQ0ZHX0lOSVRfVkFMVUUoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX0pIQVNIX0NGR19JTklUX1ZBTFVFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9NQVNLX0lQVjZfU0FfTUFTSyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9NQVNLX0lQVjZfU0FfTUFTSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfTUFTS19JUFY2X0RBX01BU0soYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX01BU0tfSVBWNl9EQV9NQVNLKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfTUFTS19JUFY0X1NBX01BU0soYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfTUFTS19JUFY0X1NBX01BU0sodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUlRIX01BU0tfSVBWNF9EQV9NQVNLKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDM2LCA0KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfUlRIX01BU0tfSVBWNF9EQV9NQVNLKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM2LCA0KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX1JUSF9NQVNLX0w0U1BfTUFTSyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0MCwgMikKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9NQVNLX0w0U1BfTUFTSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MCwgMikKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfTUFTS19MNERQX01BU0soYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNDIsIDIpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9SVEhfTUFTS19MNERQX01BU0sodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDIsIDIpCisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9SVEhfS0VZX0tFWShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCA2NCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1JUSF9LRVlfS0VZIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfUU9TX0VOVFJZX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9RT1NfRU5UUllfRU4JCXZ4Z2VfbUJJVCgzKQorCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRFNfRU5UUllfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMywgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0RTX0VOVFJZX0VOCQl2eGdlX21CSVQoMykKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0RBX01BQ19BRERSX01BU0soYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgNDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9EQV9NQUNfQUREUl9NQVNLKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDQ4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfREFfTUFDX0FERFJfTU9ERSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA2MiwgMikKKworI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNNF9CVUNLRVRfTlVNKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTRfQlVDS0VUX05VTSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNNF9FTlRSWV9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA4LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU00X0VOVFJZX0VOCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNNF9CVUNLRVRfREFUQShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA5LCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU00X0JVQ0tFVF9EQVRBKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDksIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU01X0JVQ0tFVF9OVU0oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTYsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTVfQlVDS0VUX05VTSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTVfRU5UUllfRU4oYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMjQsIDEpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTVfRU5UUllfRU4JdnhnZV9tQklUKDI0KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNNV9CVUNLRVRfREFUQShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAyNSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNNV9CVUNLRVRfREFUQSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNSwgNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTZfQlVDS0VUX05VTShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNNl9CVUNLRVRfTlVNKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNNl9FTlRSWV9FTihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0MCwgMSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX1JUSF9JVEVNNl9FTlRSWV9FTgl2eGdlX21CSVQoNDApCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU02X0JVQ0tFVF9EQVRBKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQxLCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU02X0JVQ0tFVF9EQVRBKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQxLCA3KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX1JUSF9JVEVNN19CVUNLRVRfTlVNKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQ4LCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU03X0JVQ0tFVF9OVU0odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDgsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfUlRIX0lURU03X0VOVFJZX0VOKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDU2LCAxKQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfUlRIX0lURU03X0VOVFJZX0VOCXZ4Z2VfbUJJVCg1NikKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9SVEhfSVRFTTdfQlVDS0VUX0RBVEEoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNTcsIDcpCisjZGVmaW5lCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9SVEhfSVRFTTdfQlVDS0VUX0RBVEEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTcsIDcpCisKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9QQVJUX05VTUJFUiAgICAgICAgICAgMAorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX1NFUklBTF9OVU1CRVIgICAgICAgICAxCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fVkVSU0lPTiAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9QQ0lfTU9ERSAgICAgICAgICAgICAgMworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX0RFU0NfMCAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9NRU1PX0lURU1fREVTQ18xICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX01FTU9fSVRFTV9ERVNDXzIgICAgICAgICAgICAgICAgNgorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTUVNT19JVEVNX0RFU0NfMyAgICAgICAgICAgICAgICA3CisKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0xFRF9DT05UUk9MX09OCQkJMQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfTEVEX0NPTlRST0xfT0ZGCQkJMAorCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX0RBWShiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfRldfVkVSX0RBWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX01PTlRIKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDgsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9GV19WRVJfTU9OVEgodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0ZXX1ZFUl9ZRUFSKGJpdHMpIFwKKwkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTYsIDE2KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfRldfVkVSX1lFQVIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDE2KQorCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX01BSk9SKGJpdHMpIFwKKwkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9GV19WRVJfTUFKT1IgdnhnZV92QklUKHZhbCwgMzIsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX01JTk9SKGJpdHMpIFwKKwkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9GV19WRVJfTUlOT1IgdnhnZV92QklUKHZhbCwgNDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfRldfVkVSX0JVSUxEKGJpdHMpIFwKKwkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNDgsIDE2KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfRldfVkVSX0JVSUxEIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9EQVkoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfRkxBU0hfVkVSX0RBWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX01PTlRIKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDgsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9GTEFTSF9WRVJfTU9OVEgodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA4KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9ZRUFSKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDE2LCAxNikKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0ZMQVNIX1ZFUl9ZRUFSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0ZMQVNIX1ZFUl9NQUpPUihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0ZMQVNIX1ZFUl9NQUpPUiB2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9GTEFTSF9WRVJfTUlOT1IoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgNDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9GTEFTSF9WRVJfTUlOT1IgdnhnZV92QklUKHZhbCwgNDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9HRVRfRkxBU0hfVkVSX0JVSUxEKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDQ4LCAxNikKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0ZMQVNIX1ZFUl9CVUlMRCB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fVE9fVlBBVEhfQUxBUk1fUkVHX0dFVF9QUElGX1NSUENJTV9UT19WUEFUSF9BTEFSTShiaXRzKVwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDE4KQorCisjZGVmaW5lCVZYR0VfSFdfUlhfTVVMVElfQ0FTVF9TVEFUU19HRVRfRlJBTUVfRElTQ0FSRChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA0OCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfUlhfRlJNX1RSQU5TRkVSUkVEX0dFVF9SWF9GUk1fVFJBTlNGRVJSRUQoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX1JYRF9SRVRVUk5FRF9HRVRfUlhEX1JFVFVSTkVEKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgNDgsIDE2KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTMF9HRVRfSU5JX05VTV9NV1JfU0VOVChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9ERUJVR19TVEFUUzFfR0VUX0lOSV9OVU1fTVJEX1NFTlQoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFMyX0dFVF9JTklfTlVNX0NQTF9SQ1ZEKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTM19HRVRfSU5JX05VTV9NV1JfQllURV9TRU5UKGJpdHMpCShiaXRzKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTNF9HRVRfSU5JX05VTV9DUExfQllURV9SQ1ZEKGJpdHMpCShiaXRzKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTNV9HRVRfV1JDUkRUQVJCX1hPRkYoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTNl9HRVRfUkRDUkRUQVJCX1hPRkYoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMDFfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQxKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMDFfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQwKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDIzX0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDIzX0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQ0X0dFVF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDVfR0VUX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQ1KGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19UWF9WUF9SRVNFVF9ESVNDQVJERURfRlJNU19HRVRfVFhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVMoYml0c1wKKykgdnhnZV9iVkFMbihiaXRzLCA0OCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9NUEFfQ1JDX0ZBSUxfRlJNUyhiaXRzKSB2eGdlX2JWQUxuKGJpdHMsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfTVBBX01SS19GQUlMX0ZSTVMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfTVBBX0xFTl9GQUlMX0ZSTVMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfRkFVX1JYX1dPTF9GUk1TKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRTX0dFVF9SWF9GQVVfUlhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVMoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUU19HRVRfUlhfRkFVX1JYX1BFUk1JVFRFRF9GUk1TKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAxNikKKworI2RlZmluZQlWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzBfR0VUX0lOSV9XUl9EUk9QKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzBfR0VUX0lOSV9SRF9EUk9QKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFMxX0dFVF9WUExBTkVfV1JDUkRUQVJCX1BIX0NSRFRfREVQTEVURUQoYml0c1wKKykgdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTMl9HRVRfVlBMQU5FX1dSQ1JEVEFSQl9QRF9DUkRUX0RFUExFVEVEKGJpdHNcCispIHZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZSBcCitWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzNfR0VUX1ZQTEFORV9SRENSRFRBUkJfTlBIX0NSRFRfREVQTEVURUQoYml0cykgXAorCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzRfR0VUX0lOSV9XUl9WUElOX0RST1AoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTNF9HRVRfSU5JX1JEX1ZQSU5fRFJPUChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfR0VOU1RBVFNfQ09VTlQwMV9HRVRfR0VOU1RBVFNfQ09VTlQxKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX0dFTlNUQVRTX0NPVU5UMDFfR0VUX0dFTlNUQVRTX0NPVU5UMChiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfR0VOU1RBVFNfQ09VTlQyM19HRVRfR0VOU1RBVFNfQ09VTlQzKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorI2RlZmluZQlWWEdFX0hXX0dFTlNUQVRTX0NPVU5UMjNfR0VUX0dFTlNUQVRTX0NPVU5UMihiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfR0VOU1RBVFNfQ09VTlQ0X0dFVF9HRU5TVEFUU19DT1VOVDQoYml0cykgXAorCQkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX0dFTlNUQVRTX0NPVU5UNV9HRVRfR0VOU1RBVFNfQ09VTlQ1KGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKworI2RlZmluZQlWWEdFX0hXX0RFQlVHX1NUQVRTMF9HRVRfUlNURFJPUF9NU0coYml0cykJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19ERUJVR19TVEFUUzBfR0VUX1JTVERST1BfQ1BMKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorI2RlZmluZQlWWEdFX0hXX0RFQlVHX1NUQVRTMV9HRVRfUlNURFJPUF9DTElFTlQwKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfREVCVUdfU1RBVFMxX0dFVF9SU1REUk9QX0NMSUVOVDEoYml0cykJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisjZGVmaW5lCVZYR0VfSFdfREVCVUdfU1RBVFMyX0dFVF9SU1REUk9QX0NMSUVOVDIoYml0cykJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19ERUJVR19TVEFUUzNfR0VUX1ZQTEFORV9ERVBMX1BIKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREVCVUdfU1RBVFMzX0dFVF9WUExBTkVfREVQTF9OUEgoYml0cykJdnhnZV9iVkFMbihiaXRzLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfREVCVUdfU1RBVFMzX0dFVF9WUExBTkVfREVQTF9DUExIKGJpdHMpCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RFQlVHX1NUQVRTNF9HRVRfVlBMQU5FX0RFUExfUEQoYml0cykJdnhnZV9iVkFMbihiaXRzLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19ERUJVR19TVEFUUzRfR0VUX1ZQTEFORV9ERVBMX05QRChiaXRzKQliVkFMKGJpdHMsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19ERUJVR19TVEFUUzRfR0VUX1ZQTEFORV9ERVBMX0NQTEQoYml0cykJdnhnZV9iVkFMbihiaXRzLCAzMiwgMTYpCisKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVFNfVFBBX1RYX1BBVEhfR0VUX1RYX1BFUk1JVFRFRF9GUk1TKGJpdHMpIFwKKwkJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDMyLCAzMikKKworI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUX1RYX0FOWV9GUk1TX0dFVF9QT1JUMF9UWF9BTllfRlJNUyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCA4KQorI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUX1RYX0FOWV9GUk1TX0dFVF9QT1JUMV9UWF9BTllfRlJNUyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA4LCA4KQorI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUX1RYX0FOWV9GUk1TX0dFVF9QT1JUMl9UWF9BTllfRlJNUyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNiwgOCkKKworI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUX1JYX0FOWV9GUk1TX0dFVF9QT1JUMF9SWF9BTllfRlJNUyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCA4KQorI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUX1JYX0FOWV9GUk1TX0dFVF9QT1JUMV9SWF9BTllfRlJNUyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCA4LCA4KQorI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUX1JYX0FOWV9GUk1TX0dFVF9QT1JUMl9SWF9BTllfRlJNUyhiaXRzKSBcCisJCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAxNiwgOCkKKworI2RlZmluZSBWWEdFX0hXX0NPTkZJR19QUklWX0gKKworI2RlZmluZSBWWEdFX0hXX1NXQVBQRVJfSU5JVElBTF9WQUxVRQkJCTB4MDEyMzQ1Njc4OWFiY2RlZlVMTAorI2RlZmluZSBWWEdFX0hXX1NXQVBQRVJfQllURV9TV0FQUEVECQkJMHhlZmNkYWI4OTY3NDUyMzAxVUxMCisjZGVmaW5lIFZYR0VfSFdfU1dBUFBFUl9CSVRfRkxJUFBFRAkJCTB4ODBjNGEyZTY5MWQ1YjNmN1VMTAorI2RlZmluZSBWWEdFX0hXX1NXQVBQRVJfQllURV9TV0FQUEVEX0JJVF9GTElQUEVECTB4ZjdiM2Q1OTFlNmEyYzQ4MFVMTAorCisjZGVmaW5lIFZYR0VfSFdfU1dBUFBFUl9SRUFEX0JZVEVfU1dBUF9FTkFCTEUJCTB4RkZGRkZGRkZGRkZGRkZGRlVMTAorI2RlZmluZSBWWEdFX0hXX1NXQVBQRVJfUkVBRF9CWVRFX1NXQVBfRElTQUJMRQkJMHgwMDAwMDAwMDAwMDAwMDAwVUxMCisKKyNkZWZpbmUgVlhHRV9IV19TV0FQUEVSX1JFQURfQklUX0ZMQVBfRU5BQkxFCQkweEZGRkZGRkZGRkZGRkZGRkZVTEwKKyNkZWZpbmUgVlhHRV9IV19TV0FQUEVSX1JFQURfQklUX0ZMQVBfRElTQUJMRQkJMHgwMDAwMDAwMDAwMDAwMDAwVUxMCisKKyNkZWZpbmUgVlhHRV9IV19TV0FQUEVSX1dSSVRFX0JZVEVfU1dBUF9FTkFCTEUJCTB4RkZGRkZGRkZGRkZGRkZGRlVMTAorI2RlZmluZSBWWEdFX0hXX1NXQVBQRVJfV1JJVEVfQllURV9TV0FQX0RJU0FCTEUJCTB4MDAwMDAwMDAwMDAwMDAwMFVMTAorCisjZGVmaW5lIFZYR0VfSFdfU1dBUFBFUl9XUklURV9CSVRfRkxBUF9FTkFCTEUJCTB4RkZGRkZGRkZGRkZGRkZGRlVMTAorI2RlZmluZSBWWEdFX0hXX1NXQVBQRVJfV1JJVEVfQklUX0ZMQVBfRElTQUJMRQkJMHgwMDAwMDAwMDAwMDAwMDAwVUxMCisKKy8qCisgKiBUaGUgcmVnaXN0ZXJzIGFyZSBtZW1vcnkgbWFwcGVkIGFuZCBhcmUgbmF0aXZlIGJpZy1lbmRpYW4gYnl0ZSBvcmRlci4gVGhlCisgKiBsaXR0bGUtZW5kaWFuIGhvc3RzIGFyZSBoYW5kbGVkIGJ5IGVuYWJsaW5nIGhhcmR3YXJlIGJ5dGUtc3dhcHBpbmcgZm9yCisgKiByZWdpc3RlciBhbmQgZG1hIG9wZXJhdGlvbnMuCisgKi8KK3N0cnVjdCB2eGdlX2h3X2xlZ2FjeV9yZWcgeworCisJdTgJdW51c2VkMDAwMTBbMHgwMDAxMF07CisKKy8qMHgwMDAxMCovCXU2NAl0b2Nfc3dhcHBlcl9mYjsKKyNkZWZpbmUgVlhHRV9IV19UT0NfU1dBUFBFUl9GQl9JTklUSUFMX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMDE4Ki8JdTY0CXBpZm1fcmRfc3dhcF9lbjsKKyNkZWZpbmUgVlhHRV9IV19QSUZNX1JEX1NXQVBfRU5fUElGTV9SRF9TV0FQX0VOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAwMjAqLwl1NjQJcGlmbV9yZF9mbGlwX2VuOworI2RlZmluZSBWWEdFX0hXX1BJRk1fUkRfRkxJUF9FTl9QSUZNX1JEX0ZMSVBfRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDAyOCovCXU2NAlwaWZtX3dyX3N3YXBfZW47CisjZGVmaW5lIFZYR0VfSFdfUElGTV9XUl9TV0FQX0VOX1BJRk1fV1JfU1dBUF9FTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMDMwKi8JdTY0CXBpZm1fd3JfZmxpcF9lbjsKKyNkZWZpbmUgVlhHRV9IV19QSUZNX1dSX0ZMSVBfRU5fUElGTV9XUl9GTElQX0VOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAwMzgqLwl1NjQJdG9jX2ZpcnN0X3BvaW50ZXI7CisjZGVmaW5lIFZYR0VfSFdfVE9DX0ZJUlNUX1BPSU5URVJfSU5JVElBTF9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDA0MCovCXU2NAlob3N0X2FjY2Vzc19lbjsKKyNkZWZpbmUgVlhHRV9IV19IT1NUX0FDQ0VTU19FTl9IT1NUX0FDQ0VTU19FTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorCit9IF9fcGFja2VkOworCitzdHJ1Y3QgdnhnZV9od190b2NfcmVnIHsKKworCXU4CXVudXNlZDAwMDUwWzB4MDAwNTBdOworCisvKjB4MDAwNTAqLwl1NjQJdG9jX2NvbW1vbl9wb2ludGVyOworI2RlZmluZSBWWEdFX0hXX1RPQ19DT01NT05fUE9JTlRFUl9JTklUSUFMX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMDU4Ki8JdTY0CXRvY19tZW1yZXBhaXJfcG9pbnRlcjsKKyNkZWZpbmUgVlhHRV9IV19UT0NfTUVNUkVQQUlSX1BPSU5URVJfSU5JVElBTF9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDA2MCovCXU2NAl0b2NfcGNpY2ZnbWdtdF9wb2ludGVyWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19UT0NfUENJQ0ZHTUdNVF9QT0lOVEVSX0lOSVRJQUxfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisJdTgJdW51c2VkMDAxZTBbMHgwMDFlMC0weDAwMGU4XTsKKworLyoweDAwMWUwKi8JdTY0CXRvY19tcnBjaW1fcG9pbnRlcjsKKyNkZWZpbmUgVlhHRV9IV19UT0NfTVJQQ0lNX1BPSU5URVJfSU5JVElBTF9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDFlOCovCXU2NAl0b2Nfc3JwY2ltX3BvaW50ZXJbMTddOworI2RlZmluZSBWWEdFX0hXX1RPQ19TUlBDSU1fUE9JTlRFUl9JTklUSUFMX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorCXU4CXVudXNlZDAwMjc4WzB4MDAyNzgtMHgwMDI3MF07CisKKy8qMHgwMDI3OCovCXU2NAl0b2NfdnBtZ210X3BvaW50ZXJbMTddOworI2RlZmluZSBWWEdFX0hXX1RPQ19WUE1HTVRfUE9JTlRFUl9JTklUSUFMX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorCXU4CXVudXNlZDAwMzkwWzB4MDAzOTAtMHgwMDMwMF07CisKKy8qMHgwMDM5MCovCXU2NAl0b2NfdnBhdGhfcG9pbnRlclsxN107CisjZGVmaW5lIFZYR0VfSFdfVE9DX1ZQQVRIX1BPSU5URVJfSU5JVElBTF9WQUwodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKwl1OAl1bnVzZWQwMDRhMFsweDAwNGEwLTB4MDA0MThdOworCisvKjB4MDA0YTAqLwl1NjQJdG9jX2tkZmM7CisjZGVmaW5lIFZYR0VfSFdfVE9DX0tERkNfSU5JVElBTF9PRkZTRVQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2MSkKKyNkZWZpbmUgVlhHRV9IV19UT0NfS0RGQ19JTklUSUFMX0JJUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYxLCAzKQorLyoweDAwNGE4Ki8JdTY0CXRvY191c2RjOworI2RlZmluZSBWWEdFX0hXX1RPQ19VU0RDX0lOSVRJQUxfT0ZGU0VUKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjEpCisjZGVmaW5lIFZYR0VfSFdfVE9DX1VTRENfSU5JVElBTF9CSVIodmFsKSB2eGdlX3ZCSVQodmFsLCA2MSwgMykKKy8qMHgwMDRiMCovCXU2NAl0b2Nfa2RmY192cGF0aF9zdHJpZGU7CisjZGVmaW5lCVZYR0VfSFdfVE9DX0tERkNfVlBBVEhfU1RSSURFX0lOSVRJQUxfVE9DX0tERkNfVlBBVEhfU1RSSURFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwNGI4Ki8JdTY0CXRvY19rZGZjX2ZpZm9fc3RyaWRlOworI2RlZmluZQlWWEdFX0hXX1RPQ19LREZDX0ZJRk9fU1RSSURFX0lOSVRJQUxfVE9DX0tERkNfRklGT19TVFJJREUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNjQpCisKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB2eGdlX2h3X2NvbW1vbl9yZWcgeworCisJdTgJdW51c2VkMDBhMDBbMHgwMGEwMF07CisKKy8qMHgwMGEwMCovCXU2NAlwcmNfc3RhdHVzMTsKKyNkZWZpbmUgVlhHRV9IV19QUkNfU1RBVFVTMV9QUkNfVlBfUVVJRVNDRU5UKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYTA4Ki8JdTY0CXJ4ZGNtX3Jlc2V0X2luX3Byb2dyZXNzOworI2RlZmluZSBWWEdFX0hXX1JYRENNX1JFU0VUX0lOX1BST0dSRVNTX1BSQ19WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGExMCovCXU2NAlyZXBsaWNxX2ZsdXNoX2luX3Byb2dyZXNzOworI2RlZmluZSBWWEdFX0hXX1JFUExJQ1FfRkxVU0hfSU5fUFJPR1JFU1NfTk9BX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYTE4Ki8JdTY0CXJ4cGVfY21kc19yZXNldF9pbl9wcm9ncmVzczsKKyNkZWZpbmUgVlhHRV9IV19SWFBFX0NNRFNfUkVTRVRfSU5fUFJPR1JFU1NfTk9BX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYTIwKi8JdTY0CW14cF9jbWRzX3Jlc2V0X2luX3Byb2dyZXNzOworI2RlZmluZSBWWEdFX0hXX01YUF9DTURTX1JFU0VUX0lOX1BST0dSRVNTX05PQV9WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGEyOCovCXU2NAlub2ZmbG9hZF9yZXNldF9pbl9wcm9ncmVzczsKKyNkZWZpbmUgVlhHRV9IV19OT0ZGTE9BRF9SRVNFVF9JTl9QUk9HUkVTU19QUkNfVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDBhMzAqLwl1NjQJcmRfcmVxX2luX3Byb2dyZXNzOworI2RlZmluZSBWWEdFX0hXX1JEX1JFUV9JTl9QUk9HUkVTU19WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGEzOCovCXU2NAlyZF9yZXFfb3V0c3RhbmRpbmc7CisjZGVmaW5lIFZYR0VfSFdfUkRfUkVRX09VVFNUQU5ESU5HX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYTQwKi8JdTY0CWtkZmNfcmVzZXRfaW5fcHJvZ3Jlc3M7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19SRVNFVF9JTl9QUk9HUkVTU19OT0FfVlAobikJdnhnZV9tQklUKG4pCisJdTgJdW51c2VkMDBiMDBbMHgwMGIwMC0weDAwYTQ4XTsKKworLyoweDAwYjAwKi8JdTY0CW9uZV9jZmdfdnA7CisjZGVmaW5lIFZYR0VfSFdfT05FX0NGR19WUF9SRFkobikJdnhnZV9tQklUKG4pCisvKjB4MDBiMDgqLwl1NjQJb25lX2NvbW1vbjsKKyNkZWZpbmUgVlhHRV9IV19PTkVfQ09NTU9OX1BFVF9WUEFUSF9SRVNFVF9JTl9QUk9HUkVTUyhuKQl2eGdlX21CSVQobikKKwl1OAl1bnVzZWQwMGI4MFsweDAwYjgwLTB4MDBiMTBdOworCisvKjB4MDBiODAqLwl1NjQJdGltX2ludF9lbjsKKyNkZWZpbmUgVlhHRV9IV19USU1fSU5UX0VOX1RJTV9WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGI4OCovCXU2NAl0aW1fc2V0X2ludF9lbjsKKyNkZWZpbmUgVlhHRV9IV19USU1fU0VUX0lOVF9FTl9WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGI5MCovCXU2NAl0aW1fY2xyX2ludF9lbjsKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0xSX0lOVF9FTl9WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMGI5OCovCXU2NAl0aW1fbWFza19pbnRfZHVyaW5nX3Jlc2V0OworI2RlZmluZSBWWEdFX0hXX1RJTV9NQVNLX0lOVF9EVVJJTkdfUkVTRVRfVlBBVEgobikJdnhnZV9tQklUKG4pCisvKjB4MDBiYTAqLwl1NjQJdGltX3Jlc2V0X2luX3Byb2dyZXNzOworI2RlZmluZSBWWEdFX0hXX1RJTV9SRVNFVF9JTl9QUk9HUkVTU19USU1fVlBBVEgobikJdnhnZV9tQklUKG4pCisvKjB4MDBiYTgqLwl1NjQJdGltX291dHN0YW5kaW5nX2JtYXA7CisjZGVmaW5lIFZYR0VfSFdfVElNX09VVFNUQU5ESU5HX0JNQVBfVElNX1ZQQVRIKG4pCXZ4Z2VfbUJJVChuKQorCXU4CXVudXNlZDAwYzAwWzB4MDBjMDAtMHgwMGJiMF07CisKKy8qMHgwMGMwMCovCXU2NAltc2dfcmVzZXRfaW5fcHJvZ3Jlc3M7CisjZGVmaW5lIFZYR0VfSFdfTVNHX1JFU0VUX0lOX1BST0dSRVNTX01TR19DT01QT1NJVEUodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGMwOCovCXU2NAltc2dfbXhwX21yX3JlYWR5OworI2RlZmluZSBWWEdFX0hXX01TR19NWFBfTVJfUkVBRFlfTVBfQk9PVEVEKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYzEwKi8JdTY0CW1zZ191eHBfbXJfcmVhZHk7CisjZGVmaW5lIFZYR0VfSFdfTVNHX1VYUF9NUl9SRUFEWV9VUF9CT09URUQobikJdnhnZV9tQklUKG4pCisvKjB4MDBjMTgqLwl1NjQJbXNnX2RtcV9ub25pX3J0bF9wcmVmZXRjaDsKKyNkZWZpbmUgVlhHRV9IV19NU0dfRE1RX05PTklfUlRMX1BSRUZFVENIX0JZUEFTU19FTkFCTEUobikJdnhnZV9tQklUKG4pCisvKjB4MDBjMjAqLwl1NjQJbXNnX3VtcV9ydGxfYndyOworI2RlZmluZSBWWEdFX0hXX01TR19VTVFfUlRMX0JXUl9QUkVGRVRDSF9ESVNBQkxFKG4pCXZ4Z2VfbUJJVChuKQorCXU4CXVudXNlZDAwZDAwWzB4MDBkMDAtMHgwMGMyOF07CisKKy8qMHgwMGQwMCovCXU2NAljbW5fcnN0aGRscl9jZmcwOworI2RlZmluZSBWWEdFX0hXX0NNTl9SU1RIRExSX0NGRzBfU1dfUkVTRVRfVlBBVEgodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGQwOCovCXU2NAljbW5fcnN0aGRscl9jZmcxOworI2RlZmluZSBWWEdFX0hXX0NNTl9SU1RIRExSX0NGRzFfQ0xSX1ZQQVRIX1JFU0VUKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBkMTAqLwl1NjQJY21uX3JzdGhkbHJfY2ZnMjsKKyNkZWZpbmUgVlhHRV9IV19DTU5fUlNUSERMUl9DRkcyX1NXX1JFU0VUX0ZJRk8wKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBkMTgqLwl1NjQJY21uX3JzdGhkbHJfY2ZnMzsKKyNkZWZpbmUgVlhHRV9IV19DTU5fUlNUSERMUl9DRkczX1NXX1JFU0VUX0ZJRk8xKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBkMjAqLwl1NjQJY21uX3JzdGhkbHJfY2ZnNDsKKyNkZWZpbmUgVlhHRV9IV19DTU5fUlNUSERMUl9DRkc0X1NXX1JFU0VUX0ZJRk8yKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisJdTgJdW51c2VkMDBkNDBbMHgwMGQ0MC0weDAwZDI4XTsKKworLyoweDAwZDQwKi8JdTY0CWNtbl9yc3RoZGxyX2NmZzg7CisjZGVmaW5lIFZYR0VfSFdfQ01OX1JTVEhETFJfQ0ZHOF9JTkNSX1ZQQVRIX0lOU1RfTlVNKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBkNDgqLwl1NjQJc3RhdHNfY2ZnMDsKKyNkZWZpbmUgVlhHRV9IV19TVEFUU19DRkcwX1NUQVRTX0VOQUJMRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorCXU4CXVudXNlZDAwZGE4WzB4MDBkYTgtMHgwMGQ1MF07CisKKy8qMHgwMGRhOCovCXU2NAljbGVhcl9tc2l4X21hc2tfdmVjdFs0XTsKKyNkZWZpbmUgVlhHRV9IV19DTEVBUl9NU0lYX01BU0tfVkVDVF9DTEVBUl9NU0lYX01BU0tfVkVDVCh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZGM4Ki8JdTY0CXNldF9tc2l4X21hc2tfdmVjdFs0XTsKKyNkZWZpbmUgVlhHRV9IV19TRVRfTVNJWF9NQVNLX1ZFQ1RfU0VUX01TSVhfTUFTS19WRUNUKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBkZTgqLwl1NjQJY2xlYXJfbXNpeF9tYXNrX2FsbF92ZWN0OworI2RlZmluZQlWWEdFX0hXX0NMRUFSX01TSVhfTUFTS19BTExfVkVDVF9DTEVBUl9NU0lYX01BU0tfQUxMX1ZFQ1QodmFsKQlcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBkZjAqLwl1NjQJc2V0X21zaXhfbWFza19hbGxfdmVjdDsKKyNkZWZpbmUJVlhHRV9IV19TRVRfTVNJWF9NQVNLX0FMTF9WRUNUX1NFVF9NU0lYX01BU0tfQUxMX1ZFQ1QodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBkZjgqLwl1NjQJbWFza192ZWN0b3JbNF07CisjZGVmaW5lIFZYR0VfSFdfTUFTS19WRUNUT1JfTUFTS19WRUNUT1IodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGUxOCovCXU2NAltc2l4X3BlbmRpbmdfdmVjdG9yWzRdOworI2RlZmluZSBWWEdFX0hXX01TSVhfUEVORElOR19WRUNUT1JfTVNJWF9QRU5ESU5HX1ZFQ1RPUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGUzOCovCXU2NAljbHJfbXNpeF9vbmVfc2hvdF92ZWNbNF07CisjZGVmaW5lCVZYR0VfSFdfQ0xSX01TSVhfT05FX1NIT1RfVkVDX0NMUl9NU0lYX09ORV9TSE9UX1ZFQyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGU1OCovCXU2NAl0aXRhbl9hc2ljX2lkOworI2RlZmluZSBWWEdFX0hXX1RJVEFOX0FTSUNfSURfSU5JVElBTF9ERVZJQ0VfSUQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUgVlhHRV9IV19USVRBTl9BU0lDX0lEX0lOSVRJQUxfTUFKT1JfUkVWSVNJT04odmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgOCkKKyNkZWZpbmUgVlhHRV9IV19USVRBTl9BU0lDX0lEX0lOSVRJQUxfTUlOT1JfUkVWSVNJT04odmFsKSB2eGdlX3ZCSVQodmFsLCA1NiwgOCkKKy8qMHgwMGU2MCovCXU2NAl0aXRhbl9nZW5lcmFsX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfVElUQU5fR0VORVJBTF9JTlRfU1RBVFVTX01SUENJTV9BTEFSTV9JTlQJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfVElUQU5fR0VORVJBTF9JTlRfU1RBVFVTX1NSUENJTV9BTEFSTV9JTlQJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfVElUQU5fR0VORVJBTF9JTlRfU1RBVFVTX1ZQQVRIX0FMQVJNX0lOVAl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19USVRBTl9HRU5FUkFMX0lOVF9TVEFUVVNfVlBBVEhfVFJBRkZJQ19JTlQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgMTcpCisJdTgJdW51c2VkMDBlNzBbMHgwMGU3MC0weDAwZTY4XTsKKworLyoweDAwZTcwKi8JdTY0CXRpdGFuX21hc2tfYWxsX2ludDsKKyNkZWZpbmUJVlhHRV9IV19USVRBTl9NQVNLX0FMTF9JTlRfQUxBUk0JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVElUQU5fTUFTS19BTExfSU5UX1RSQUZGSUMJdnhnZV9tQklUKDE1KQorCXU4CXVudXNlZDAwZTgwWzB4MDBlODAtMHgwMGU3OF07CisKKy8qMHgwMGU4MCovCXU2NAl0aW1faW50X3N0YXR1czA7CisjZGVmaW5lIFZYR0VfSFdfVElNX0lOVF9TVEFUVVMwX1RJTV9JTlRfU1RBVFVTMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwZTg4Ki8JdTY0CXRpbV9pbnRfbWFzazA7CisjZGVmaW5lIFZYR0VfSFdfVElNX0lOVF9NQVNLMF9USU1fSU5UX01BU0swKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDBlOTAqLwl1NjQJdGltX2ludF9zdGF0dXMxOworI2RlZmluZSBWWEdFX0hXX1RJTV9JTlRfU1RBVFVTMV9USU1fSU5UX1NUQVRVUzEodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0KQorLyoweDAwZTk4Ki8JdTY0CXRpbV9pbnRfbWFzazE7CisjZGVmaW5lIFZYR0VfSFdfVElNX0lOVF9NQVNLMV9USU1fSU5UX01BU0sxKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNCkKKy8qMHgwMGVhMCovCXU2NAlydGlfaW50X3N0YXR1czsKKyNkZWZpbmUgVlhHRV9IV19SVElfSU5UX1NUQVRVU19SVElfSU5UX1NUQVRVUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAwZWE4Ki8JdTY0CXJ0aV9pbnRfbWFzazsKKyNkZWZpbmUgVlhHRV9IV19SVElfSU5UX01BU0tfUlRJX0lOVF9NQVNLKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBlYjAqLwl1NjQJYWRhcHRlcl9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfUlRETUFfUlRETUFfUkVBRFkJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfV1JETUFfV1JETUFfUkVBRFkJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfS0RGQ19LREZDX1JFQURZCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX1RQQV9UTUFDX0JVRl9FTVBUWQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19SRENUTF9QSUNfUVVJRVNDRU5UCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX1hHTUFDX05FVFdPUktfRkFVTFQJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfUk9DUkNfT0ZGTE9BRF9RVUlFU0NFTlQJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfRzNJRl9GQl9HM0lGX0ZCX0dERFIzX1JFQURZCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX0czSUZfQ01fRzNJRl9DTV9HRERSM19SRUFEWQl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1NUQVRVU19SSUNfUklDX1JVTk5JTkcJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfQURBUFRFUl9TVEFUVVNfQ01HX0NfUExMX0lOX0xPQ0sJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX1hHTUFDX1hfUExMX0lOX0xPQ0sJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0FEQVBURVJfU1RBVFVTX0ZCSUZfTV9QTExfSU5fTE9DSwl2eGdlX21CSVQoMTIpCisjZGVmaW5lIFZYR0VfSFdfQURBUFRFUl9TVEFUVVNfUENDX1BDQ19JRExFKHZhbCkgdnhnZV92QklUKHZhbCwgMjQsIDgpCisjZGVmaW5lIFZYR0VfSFdfQURBUFRFUl9TVEFUVVNfUk9DUkNfUkNfUFJDX1FVSUVTQ0VOVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ0LCA4KQorLyoweDAwZWI4Ki8JdTY0CWdlbl9jdHJsOworI2RlZmluZQlWWEdFX0hXX0dFTl9DVFJMX1NQSV9NUlBDSU1fV1JfRElTCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX0dFTl9DVFJMX1NQSV9NUlBDSU1fUkRfRElTCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX0dFTl9DVFJMX1NQSV9TUlBDSU1fV1JfRElTCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX0dFTl9DVFJMX1NQSV9TUlBDSU1fUkRfRElTCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0dFTl9DVFJMX1NQSV9ERUJVR19ESVMJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfR0VOX0NUUkxfU1BJX0FQUF9MVFNTTV9USU1FUl9ESVMJdnhnZV9tQklUKDUpCisjZGVmaW5lIFZYR0VfSFdfR0VOX0NUUkxfU1BJX05PVF9VU0VEKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgNCkKKwl1OAl1bnVzZWQwMGVkMFsweDAwZWQwLTB4MDBlYzBdOworCisvKjB4MDBlZDAqLwl1NjQJYWRhcHRlcl9yZWFkeTsKKyNkZWZpbmUJVlhHRV9IV19BREFQVEVSX1JFQURZX0FEQVBURVJfUkVBRFkJdnhnZV9tQklUKDYzKQorLyoweDAwZWQ4Ki8JdTY0CW91dHN0YW5kaW5nX3JlYWQ7CisjZGVmaW5lIFZYR0VfSFdfT1VUU1RBTkRJTkdfUkVBRF9PVVRTVEFORElOR19SRUFEKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDBlZTAqLwl1NjQJdnBhdGhfcnN0X2luX3Byb2c7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfUlNUX0lOX1BST0dfVlBBVEhfUlNUX0lOX1BST0codmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMGVlOCovCXU2NAl2cGF0aF9yZWdfbW9kaWZpZWQ7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfUkVHX01PRElGSUVEX1ZQQVRIX1JFR19NT0RJRklFRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorCXU4CXVudXNlZDAwZmMwWzB4MDBmYzAtMHgwMGVmMF07CisKKy8qMHgwMGZjMCovCXU2NAljcF9yZXNldF9pbl9wcm9ncmVzczsKKyNkZWZpbmUgVlhHRV9IV19DUF9SRVNFVF9JTl9QUk9HUkVTU19DUF9WUEFUSChuKQl2eGdlX21CSVQobikKKwl1OAl1bnVzZWQwMTA4MFsweDAxMDgwLTB4MDBmYzhdOworCisvKjB4MDEwODAqLwl1NjQJeGdtYWNfcmVhZHk7CisjZGVmaW5lIFZYR0VfSFdfWEdNQUNfUkVBRFlfWE1BQ0pfUkVBRFkodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKwl1OAl1bnVzZWQwMTBjMFsweDAxMGMwLTB4MDEwODhdOworCisvKjB4MDEwYzAqLwl1NjQJZmJpZl9yZWFkeTsKKyNkZWZpbmUgVlhHRV9IV19GQklGX1JFQURZX0ZBVV9SRUFEWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorCXU4CXVudXNlZDAxMTAwWzB4MDExMDAtMHgwMTBjOF07CisKKy8qMHgwMTEwMCovCXU2NAl2cGxhbmVfYXNzaWdubWVudHM7CisjZGVmaW5lIFZYR0VfSFdfVlBMQU5FX0FTU0lHTk1FTlRTX1ZQTEFORV9BU1NJR05NRU5UUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisvKjB4MDExMDgqLwl1NjQJdnBhdGhfYXNzaWdubWVudHM7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfQVNTSUdOTUVOVFNfVlBBVEhfQVNTSUdOTUVOVFModmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMTExMCovCXU2NAlyZXNvdXJjZV9hc3NpZ25tZW50czsKKyNkZWZpbmUgVlhHRV9IV19SRVNPVVJDRV9BU1NJR05NRU5UU19SRVNPVVJDRV9BU1NJR05NRU5UUyh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAxMTE4Ki8JdTY0CWhvc3RfdHlwZV9hc3NpZ25tZW50czsKKyNkZWZpbmUJVlhHRV9IV19IT1NUX1RZUEVfQVNTSUdOTUVOVFNfSE9TVF9UWVBFX0FTU0lHTk1FTlRTKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUsIDMpCisJdTgJdW51c2VkMDExMjhbMHgwMTEyOC0weDAxMTIwXTsKKworLyoweDAxMTI4Ki8JdTY0CW1heF9yZXNvdXJjZV9hc3NpZ25tZW50czsKKyNkZWZpbmUgVlhHRV9IV19NQVhfUkVTT1VSQ0VfQVNTSUdOTUVOVFNfUENJX01BWF9WUExBTkUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19NQVhfUkVTT1VSQ0VfQVNTSUdOTUVOVFNfUENJX01BWF9WUEFUSFModmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKy8qMHgwMTEzMCovCXU2NAlwZl92cGF0aF9hc3NpZ25tZW50czsKKyNkZWZpbmUgVlhHRV9IV19QRl9WUEFUSF9BU1NJR05NRU5UU19QRl9WUEFUSF9BU1NJR05NRU5UUyh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorCXU4CXVudXNlZDAxMjAwWzB4MDEyMDAtMHgwMTEzOF07CisKKy8qMHgwMTIwMCovCXU2NAlydHNfYWNjZXNzX2ljbXA7CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19JQ01QX0VOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDEyMDgqLwl1NjQJcnRzX2FjY2Vzc190Y3BzeW47CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19UQ1BTWU5fRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMTIxMCovCXU2NAlydHNfYWNjZXNzX3psNHB5bGQ7CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19aTDRQWUxEX0VOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDEyMTgqLwl1NjQJcnRzX2FjY2Vzc19sNHBydGNsX3RjcDsKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX0w0UFJUQ0xfVENQX0VOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDEyMjAqLwl1NjQJcnRzX2FjY2Vzc19sNHBydGNsX3VkcDsKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX0w0UFJUQ0xfVURQX0VOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDEyMjgqLwl1NjQJcnRzX2FjY2Vzc19sNHBydGNsX2ZsZXg7CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19MNFBSVENMX0ZMRVhfRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwMTIzMCovCXU2NAlydHNfYWNjZXNzX2lwZnJhZzsKKyNkZWZpbmUgVlhHRV9IV19SVFNfQUNDRVNTX0lQRlJBR19FTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorCit9IF9fcGFja2VkOworCitzdHJ1Y3QgdnhnZV9od19tZW1yZXBhaXJfcmVnIHsKKwl1NjQJdW51c2VkMTsKKwl1NjQJdW51c2VkMjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB2eGdlX2h3X3BjaWNmZ21nbXRfcmVnIHsKKworLyoweDAwMDAwKi8JdTY0CXJlc291cmNlX25vOworI2RlZmluZQlWWEdFX0hXX1JFU09VUkNFX05PX1BGTl9PUl9WRglCSVQoMykKKy8qMHgwMDAwOCovCXU2NAliYXJncnBfcGZfb3JfdmZfYmFyMF9tYXNrOworI2RlZmluZQlWWEdFX0hXX0JBUkdSUF9QRl9PUl9WRl9CQVIwX01BU0tfQkFSR1JQX1BGX09SX1ZGX0JBUjBfTUFTSyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyLCA2KQorLyoweDAwMDEwKi8JdTY0CWJhcmdycF9wZl9vcl92Zl9iYXIxX21hc2s7CisjZGVmaW5lCVZYR0VfSFdfQkFSR1JQX1BGX09SX1ZGX0JBUjFfTUFTS19CQVJHUlBfUEZfT1JfVkZfQkFSMV9NQVNLKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIsIDYpCisvKjB4MDAwMTgqLwl1NjQJYmFyZ3JwX3BmX29yX3ZmX2JhcjJfbWFzazsKKyNkZWZpbmUJVlhHRV9IV19CQVJHUlBfUEZfT1JfVkZfQkFSMl9NQVNLX0JBUkdSUF9QRl9PUl9WRl9CQVIyX01BU0sodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMiwgNikKKy8qMHgwMDAyMCovCXU2NAltc2l4Z3JwX25vOworI2RlZmluZSBWWEdFX0hXX01TSVhHUlBfTk9fVEFCTEVfU0laRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUsIDExKQorCit9IF9fcGFja2VkOworCitzdHJ1Y3QgdnhnZV9od19tcnBjaW1fcmVnIHsKKy8qMHgwMDAwMCovCXU2NAlnM2ZiY3RfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19HM0ZCQ1RfSU5UX1NUQVRVU19FUlJfRzNJRl9JTlQJdnhnZV9tQklUKDApCisvKjB4MDAwMDgqLwl1NjQJZzNmYmN0X2ludF9tYXNrOworLyoweDAwMDEwKi8JdTY0CWczZmJjdF9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0czRkJDVF9FUlJfUkVHX0czSUZfU01fRVJSCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX0czRkJDVF9FUlJfUkVHX0czSUZfR0REUjNfREVDQwl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19HM0ZCQ1RfRVJSX1JFR19HM0lGX0dERFIzX1VfREVDQwl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19HM0ZCQ1RfRVJSX1JFR19HM0lGX0NUUkxfRklGT19ERUNDCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0czRkJDVF9FUlJfUkVHX0czSUZfR0REUjNfU0VDQwl2eGdlX21CSVQoMjkpCisjZGVmaW5lCVZYR0VfSFdfRzNGQkNUX0VSUl9SRUdfRzNJRl9HRERSM19VX1NFQ0MJdnhnZV9tQklUKDMwKQorI2RlZmluZQlWWEdFX0hXX0czRkJDVF9FUlJfUkVHX0czSUZfQ1RSTF9GSUZPX1NFQ0MJdnhnZV9tQklUKDMxKQorLyoweDAwMDE4Ki8JdTY0CWczZmJjdF9lcnJfbWFzazsKKy8qMHgwMDAyMCovCXU2NAlnM2ZiY3RfZXJyX2FsYXJtOworCisJdTgJdW51c2VkMDBhMDBbMHgwMGEwMC0weDAwMDI4XTsKKworLyoweDAwYTAwKi8JdTY0CXdyZG1hX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19SQ19BTEFSTV9SQ19JTlQJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19SWERSTV9TTV9FUlJfUlhEUk1fSU5UCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfUlhEQ01fU01fRVJSX1JYRENNX1NNX0lOVAl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX1JYRFdNX1NNX0VSUl9SWERXTV9JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19SREFfRVJSX1JEQV9JTlQJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19SREFfRUNDX0RCX1JEQV9FQ0NfREJfSU5UCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfUkRBX0VDQ19TR19SREFfRUNDX1NHX0lOVAl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX0ZSRl9BTEFSTV9GUkZfSU5UCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX1JPQ1JDX0FMQVJNX1JPQ1JDX0lOVAl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19XREUwX0FMQVJNX1dERTBfSU5UCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9JTlRfU1RBVFVTX1dERTFfQUxBUk1fV0RFMV9JTlQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1dSRE1BX0lOVF9TVEFUVVNfV0RFMl9BTEFSTV9XREUyX0lOVAl2eGdlX21CSVQoMTYpCisjZGVmaW5lCVZYR0VfSFdfV1JETUFfSU5UX1NUQVRVU19XREUzX0FMQVJNX1dERTNfSU5UCXZ4Z2VfbUJJVCgxNykKKy8qMHgwMGEwOCovCXU2NAl3cmRtYV9pbnRfbWFzazsKKy8qMHgwMGExMCovCXU2NAlyY19hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfUkNfQUxBUk1fUkVHX0ZUQ19TTV9FUlIJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfUkNfQUxBUk1fUkVHX0ZUQ19TTV9QSEFTRV9FUlIJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfUkNfQUxBUk1fUkVHX0JURFdNX1NNX0VSUgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19SQ19BTEFSTV9SRUdfQlRDX1NNX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SQ19BTEFSTV9SRUdfQlREQ01fU01fRVJSCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX1JDX0FMQVJNX1JFR19CVERSTV9TTV9FUlIJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfUkNfQUxBUk1fUkVHX1JNTV9SWERfUkNfRUNDX0RCX0VSUgl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19SQ19BTEFSTV9SRUdfUk1NX1JYRF9SQ19FQ0NfU0dfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JDX0FMQVJNX1JFR19SSFNfUlhEX1JIU19FQ0NfREJfRVJSCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX1JDX0FMQVJNX1JFR19SSFNfUlhEX1JIU19FQ0NfU0dfRVJSCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX1JDX0FMQVJNX1JFR19STU1fU01fRVJSCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19SQ19BTEFSTV9SRUdfQlRDX1ZQQVRIX01JU01BVENIX0VSUgl2eGdlX21CSVQoMTIpCisvKjB4MDBhMTgqLwl1NjQJcmNfYWxhcm1fbWFzazsKKy8qMHgwMGEyMCovCXU2NAlyY19hbGFybV9hbGFybTsKKy8qMHgwMGEyOCovCXU2NAlyeGRybV9zbV9lcnJfcmVnOworI2RlZmluZSBWWEdFX0hXX1JYRFJNX1NNX0VSUl9SRUdfUFJDX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYTMwKi8JdTY0CXJ4ZHJtX3NtX2Vycl9tYXNrOworLyoweDAwYTM4Ki8JdTY0CXJ4ZHJtX3NtX2Vycl9hbGFybTsKKy8qMHgwMGE0MCovCXU2NAlyeGRjbV9zbV9lcnJfcmVnOworI2RlZmluZSBWWEdFX0hXX1JYRENNX1NNX0VSUl9SRUdfUFJDX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYTQ4Ki8JdTY0CXJ4ZGNtX3NtX2Vycl9tYXNrOworLyoweDAwYTUwKi8JdTY0CXJ4ZGNtX3NtX2Vycl9hbGFybTsKKy8qMHgwMGE1OCovCXU2NAlyeGR3bV9zbV9lcnJfcmVnOworI2RlZmluZSBWWEdFX0hXX1JYRFdNX1NNX0VSUl9SRUdfUFJDX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAwYTYwKi8JdTY0CXJ4ZHdtX3NtX2Vycl9tYXNrOworLyoweDAwYTY4Ki8JdTY0CXJ4ZHdtX3NtX2Vycl9hbGFybTsKKy8qMHgwMGE3MCovCXU2NAlyZGFfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19SREFfRVJSX1JFR19SREFfU00wX0VSUl9BTEFSTQl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19SREFfRVJSX1JFR19SREFfTUlTQ19FUlIJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfUkRBX0VSUl9SRUdfUkRBX1BDSVhfRVJSCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1JEQV9FUlJfUkVHX1JEQV9SWERfRUNDX0RCX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SREFfRVJSX1JFR19SREFfRlJNX0VDQ19EQl9FUlIJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfUkRBX0VSUl9SRUdfUkRBX1VRTV9FQ0NfREJfRVJSCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX1JEQV9FUlJfUkVHX1JEQV9JTU1fRUNDX0RCX0VSUgl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19SREFfRVJSX1JFR19SREFfVElNX0VDQ19EQl9FUlIJdnhnZV9tQklUKDcpCisvKjB4MDBhNzgqLwl1NjQJcmRhX2Vycl9tYXNrOworLyoweDAwYTgwKi8JdTY0CXJkYV9lcnJfYWxhcm07CisvKjB4MDBhODgqLwl1NjQJcmRhX2VjY19kYl9yZWc7CisjZGVmaW5lIFZYR0VfSFdfUkRBX0VDQ19EQl9SRUdfUkRBX1JYRF9FUlIobikJdnhnZV9tQklUKG4pCisvKjB4MDBhOTAqLwl1NjQJcmRhX2VjY19kYl9tYXNrOworLyoweDAwYTk4Ki8JdTY0CXJkYV9lY2NfZGJfYWxhcm07CisvKjB4MDBhYTAqLwl1NjQJcmRhX2VjY19zZ19yZWc7CisjZGVmaW5lIFZYR0VfSFdfUkRBX0VDQ19TR19SRUdfUkRBX1JYRF9FUlIobikJdnhnZV9tQklUKG4pCisvKjB4MDBhYTgqLwl1NjQJcmRhX2VjY19zZ19tYXNrOworLyoweDAwYWIwKi8JdTY0CXJkYV9lY2Nfc2dfYWxhcm07CisvKjB4MDBhYjgqLwl1NjQJcnFhX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfUlFBX0VSUl9SRUdfUlFBX1NNX0VSUl9BTEFSTQl2eGdlX21CSVQoMCkKKy8qMHgwMGFjMCovCXU2NAlycWFfZXJyX21hc2s7CisvKjB4MDBhYzgqLwl1NjQJcnFhX2Vycl9hbGFybTsKKy8qMHgwMGFkMCovCXU2NAlmcmZfYWxhcm1fcmVnOworI2RlZmluZSBWWEdFX0hXX0ZSRl9BTEFSTV9SRUdfUFJDX1ZQX0ZSRl9TTV9FUlIobikJdnhnZV9tQklUKG4pCisvKjB4MDBhZDgqLwl1NjQJZnJmX2FsYXJtX21hc2s7CisvKjB4MDBhZTAqLwl1NjQJZnJmX2FsYXJtX2FsYXJtOworLyoweDAwYWU4Ki8JdTY0CXJvY3JjX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfUUNRX1FDQ19CWVBfRUNDX0RCCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19RQ1FfUUNDX0JZUF9FQ0NfU0cJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX05PQV9OTUFfU01fRVJSCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19OT0FfSU1NTV9FQ0NfREIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX05PQV9JTU1NX0VDQ19TRwl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfVURRX1VNUU1fRUNDX0RCCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19VRFFfVU1RTV9FQ0NfU0cJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX05PQV9SQ0JNX0VDQ19EQgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX05PQV9SQ0JNX0VDQ19TRwl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfUk9DUkNfQUxBUk1fUkVHX1FDUV9NVUxUSV9FR0JfUlNWRF9FUlIJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19RQ1FfTVVMVElfRUdCX09XTl9FUlIJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19RQ1FfTVVMVElfQllQX09XTl9FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19RQ1FfT1dOX05PVF9BU1NJR05FRF9FUlIJdnhnZV9tQklUKDE2KQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19RQ1FfT1dOX1JTVkRfU1lOQ19FUlIJdnhnZV9tQklUKDE3KQorI2RlZmluZQlWWEdFX0hXX1JPQ1JDX0FMQVJNX1JFR19RQ1FfTE9TVF9FR0JfRVJSCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfUkNRX0JZUFEwX09WRVJGTE9XCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfUkNRX0JZUFExX09WRVJGTE9XCXZ4Z2VfbUJJVCgyMCkKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfUkNRX0JZUFEyX09WRVJGTE9XCXZ4Z2VfbUJJVCgyMSkKKyNkZWZpbmUJVlhHRV9IV19ST0NSQ19BTEFSTV9SRUdfTk9BX1dDVF9DTURfRklGT19FUlIJdnhnZV9tQklUKDIyKQorLyoweDAwYWYwKi8JdTY0CXJvY3JjX2FsYXJtX21hc2s7CisvKjB4MDBhZjgqLwl1NjQJcm9jcmNfYWxhcm1fYWxhcm07CisvKjB4MDBiMDAqLwl1NjQJd2RlMF9hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfV0RFMF9BTEFSTV9SRUdfV0RFMF9EQ0NfU01fRVJSCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1dERTBfQUxBUk1fUkVHX1dERTBfUFJNX1NNX0VSUgl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19XREUwX0FMQVJNX1JFR19XREUwX0NQX1NNX0VSUgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19XREUwX0FMQVJNX1JFR19XREUwX0NQX0NNRF9FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfV0RFMF9BTEFSTV9SRUdfV0RFMF9QQ1JfU01fRVJSCXZ4Z2VfbUJJVCg0KQorLyoweDAwYjA4Ki8JdTY0CXdkZTBfYWxhcm1fbWFzazsKKy8qMHgwMGIxMCovCXU2NAl3ZGUwX2FsYXJtX2FsYXJtOworLyoweDAwYjE4Ki8JdTY0CXdkZTFfYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX1dERTFfQUxBUk1fUkVHX1dERTFfRENDX1NNX0VSUgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19XREUxX0FMQVJNX1JFR19XREUxX1BSTV9TTV9FUlIJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfV0RFMV9BTEFSTV9SRUdfV0RFMV9DUF9TTV9FUlIJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfV0RFMV9BTEFSTV9SRUdfV0RFMV9DUF9DTURfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1dERTFfQUxBUk1fUkVHX1dERTFfUENSX1NNX0VSUgl2eGdlX21CSVQoNCkKKy8qMHgwMGIyMCovCXU2NAl3ZGUxX2FsYXJtX21hc2s7CisvKjB4MDBiMjgqLwl1NjQJd2RlMV9hbGFybV9hbGFybTsKKy8qMHgwMGIzMCovCXU2NAl3ZGUyX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19XREUyX0FMQVJNX1JFR19XREUyX0RDQ19TTV9FUlIJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfV0RFMl9BTEFSTV9SRUdfV0RFMl9QUk1fU01fRVJSCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1dERTJfQUxBUk1fUkVHX1dERTJfQ1BfU01fRVJSCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1dERTJfQUxBUk1fUkVHX1dERTJfQ1BfQ01EX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19XREUyX0FMQVJNX1JFR19XREUyX1BDUl9TTV9FUlIJdnhnZV9tQklUKDQpCisvKjB4MDBiMzgqLwl1NjQJd2RlMl9hbGFybV9tYXNrOworLyoweDAwYjQwKi8JdTY0CXdkZTJfYWxhcm1fYWxhcm07CisvKjB4MDBiNDgqLwl1NjQJd2RlM19hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfV0RFM19BTEFSTV9SRUdfV0RFM19EQ0NfU01fRVJSCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1dERTNfQUxBUk1fUkVHX1dERTNfUFJNX1NNX0VSUgl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19XREUzX0FMQVJNX1JFR19XREUzX0NQX1NNX0VSUgl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19XREUzX0FMQVJNX1JFR19XREUzX0NQX0NNRF9FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfV0RFM19BTEFSTV9SRUdfV0RFM19QQ1JfU01fRVJSCXZ4Z2VfbUJJVCg0KQorLyoweDAwYjUwKi8JdTY0CXdkZTNfYWxhcm1fbWFzazsKKy8qMHgwMGI1OCovCXU2NAl3ZGUzX2FsYXJtX2FsYXJtOworCisJdTgJdW51c2VkMDBiZThbMHgwMGJlOC0weDAwYjYwXTsKKworLyoweDAwYmU4Ki8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMDsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU18wKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU18xKHZhbCkgdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzModmFsKSB2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU180KHZhbCkgdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8wX1JYX1dfUFJJT1JJVFlfU1NfNSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMF9SWF9XX1BSSU9SSVRZX1NTXzYodmFsKSB2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzBfUlhfV19QUklPUklUWV9TU183KHZhbCkgdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBiZjAqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8xOworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMV9SWF9XX1BSSU9SSVRZX1NTXzgodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMV9SWF9XX1BSSU9SSVRZX1NTXzkodmFsKSB2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzFfUlhfV19QUklPUklUWV9TU18xMCh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMV9SWF9XX1BSSU9SSVRZX1NTXzExKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xX1JYX1dfUFJJT1JJVFlfU1NfMTIodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzFfUlhfV19QUklPUklUWV9TU18xMyh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMV9SWF9XX1BSSU9SSVRZX1NTXzE0KHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xX1JYX1dfUFJJT1JJVFlfU1NfMTUodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGJmOCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzI7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yX1JYX1dfUFJJT1JJVFlfU1NfMTYodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMl9SWF9XX1BSSU9SSVRZX1NTXzE3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMl9SWF9XX1BSSU9SSVRZX1NTXzE4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMl9SWF9XX1BSSU9SSVRZX1NTXzE5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMl9SWF9XX1BSSU9SSVRZX1NTXzIwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMl9SWF9XX1BSSU9SSVRZX1NTXzIxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMl9SWF9XX1BSSU9SSVRZX1NTXzIyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMl9SWF9XX1BSSU9SSVRZX1NTXzIzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzAwKi8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMzsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzNfUlhfV19QUklPUklUWV9TU18yNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8zX1JYX1dfUFJJT1JJVFlfU1NfMjUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8zX1JYX1dfUFJJT1JJVFlfU1NfMjYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8zX1JYX1dfUFJJT1JJVFlfU1NfMjcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8zX1JYX1dfUFJJT1JJVFlfU1NfMjgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8zX1JYX1dfUFJJT1JJVFlfU1NfMjkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8zX1JYX1dfUFJJT1JJVFlfU1NfMzAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8zX1JYX1dfUFJJT1JJVFlfU1NfMzEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjMDgqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl80OworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNF9SWF9XX1BSSU9SSVRZX1NTXzMyKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzRfUlhfV19QUklPUklUWV9TU18zMyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzRfUlhfV19QUklPUklUWV9TU18zNCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzRfUlhfV19QUklPUklUWV9TU18zNSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzRfUlhfV19QUklPUklUWV9TU18zNih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzRfUlhfV19QUklPUklUWV9TU18zNyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzRfUlhfV19QUklPUklUWV9TU18zOCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzRfUlhfV19QUklPUklUWV9TU18zOSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGMxMCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzU7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl81X1JYX1dfUFJJT1JJVFlfU1NfNDAodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNV9SWF9XX1BSSU9SSVRZX1NTXzQxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNV9SWF9XX1BSSU9SSVRZX1NTXzQyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNV9SWF9XX1BSSU9SSVRZX1NTXzQzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNV9SWF9XX1BSSU9SSVRZX1NTXzQ0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNV9SWF9XX1BSSU9SSVRZX1NTXzQ1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNV9SWF9XX1BSSU9SSVRZX1NTXzQ2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fNV9SWF9XX1BSSU9SSVRZX1NTXzQ3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzE4Ki8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fNjsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzZfUlhfV19QUklPUklUWV9TU180OCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl82X1JYX1dfUFJJT1JJVFlfU1NfNDkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl82X1JYX1dfUFJJT1JJVFlfU1NfNTAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl82X1JYX1dfUFJJT1JJVFlfU1NfNTEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl82X1JYX1dfUFJJT1JJVFlfU1NfNTIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl82X1JYX1dfUFJJT1JJVFlfU1NfNTModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl82X1JYX1dfUFJJT1JJVFlfU1NfNTQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl82X1JYX1dfUFJJT1JJVFlfU1NfNTUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjMjAqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl83OworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fN19SWF9XX1BSSU9SSVRZX1NTXzU2KHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzdfUlhfV19QUklPUklUWV9TU181Nyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzdfUlhfV19QUklPUklUWV9TU181OCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzdfUlhfV19QUklPUklUWV9TU181OSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzdfUlhfV19QUklPUklUWV9TU182MCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzdfUlhfV19QUklPUklUWV9TU182MSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzdfUlhfV19QUklPUklUWV9TU182Mih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzdfUlhfV19QUklPUklUWV9TU182Myh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGMyOCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzg7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl84X1JYX1dfUFJJT1JJVFlfU1NfNjQodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOF9SWF9XX1BSSU9SSVRZX1NTXzY1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOF9SWF9XX1BSSU9SSVRZX1NTXzY2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOF9SWF9XX1BSSU9SSVRZX1NTXzY3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOF9SWF9XX1BSSU9SSVRZX1NTXzY4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOF9SWF9XX1BSSU9SSVRZX1NTXzY5KHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl84X1JYX1dfUFJJT1JJVFlfU1NfNzAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl84X1JYX1dfUFJJT1JJVFlfU1NfNzEodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGMzMCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzk7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl85X1JYX1dfUFJJT1JJVFlfU1NfNzIodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOV9SWF9XX1BSSU9SSVRZX1NTXzczKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOV9SWF9XX1BSSU9SSVRZX1NTXzc0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOV9SWF9XX1BSSU9SSVRZX1NTXzc1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOV9SWF9XX1BSSU9SSVRZX1NTXzc2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOV9SWF9XX1BSSU9SSVRZX1NTXzc3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOV9SWF9XX1BSSU9SSVRZX1NTXzc4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fOV9SWF9XX1BSSU9SSVRZX1NTXzc5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzM4Ki8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMTA7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMF9SWF9XX1BSSU9SSVRZX1NTXzgwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMF9SWF9XX1BSSU9SSVRZX1NTXzgxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTBfUlhfV19QUklPUklUWV9TU184Mih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEwX1JYX1dfUFJJT1JJVFlfU1NfODModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMF9SWF9XX1BSSU9SSVRZX1NTXzg0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTBfUlhfV19QUklPUklUWV9TU184NSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEwX1JYX1dfUFJJT1JJVFlfU1NfODYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMF9SWF9XX1BSSU9SSVRZX1NTXzg3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzQwKi8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMTE7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMV9SWF9XX1BSSU9SSVRZX1NTXzg4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMV9SWF9XX1BSSU9SSVRZX1NTXzg5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTFfUlhfV19QUklPUklUWV9TU185MCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzExX1JYX1dfUFJJT1JJVFlfU1NfOTEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMV9SWF9XX1BSSU9SSVRZX1NTXzkyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTFfUlhfV19QUklPUklUWV9TU185Myh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzExX1JYX1dfUFJJT1JJVFlfU1NfOTQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMV9SWF9XX1BSSU9SSVRZX1NTXzk1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzQ4Ki8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMTI7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMl9SWF9XX1BSSU9SSVRZX1NTXzk2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMl9SWF9XX1BSSU9SSVRZX1NTXzk3KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTJfUlhfV19QUklPUklUWV9TU185OCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEyX1JYX1dfUFJJT1JJVFlfU1NfOTkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMl9SWF9XX1BSSU9SSVRZX1NTXzEwMCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEyX1JYX1dfUFJJT1JJVFlfU1NfMTAxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTJfUlhfV19QUklPUklUWV9TU18xMDIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xMl9SWF9XX1BSSU9SSVRZX1NTXzEwMyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGM1MCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzEzOworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTNfUlhfV19QUklPUklUWV9TU18xMDQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEzX1JYX1dfUFJJT1JJVFlfU1NfMTA1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTNfUlhfV19QUklPUklUWV9TU18xMDYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xM19SWF9XX1BSSU9SSVRZX1NTXzEwNyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEzX1JYX1dfUFJJT1JJVFlfU1NfMTA4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTNfUlhfV19QUklPUklUWV9TU18xMDkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xM19SWF9XX1BSSU9SSVRZX1NTXzExMCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzEzX1JYX1dfUFJJT1JJVFlfU1NfMTExKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzU4Ki8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMTQ7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNF9SWF9XX1BSSU9SSVRZX1NTXzExMih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTRfUlhfV19QUklPUklUWV9TU18xMTModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNF9SWF9XX1BSSU9SSVRZX1NTXzExNCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE0X1JYX1dfUFJJT1JJVFlfU1NfMTE1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTRfUlhfV19QUklPUklUWV9TU18xMTYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNF9SWF9XX1BSSU9SSVRZX1NTXzExNyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE0X1JYX1dfUFJJT1JJVFlfU1NfMTE4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTRfUlhfV19QUklPUklUWV9TU18xMTkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjNjAqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8xNTsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE1X1JYX1dfUFJJT1JJVFlfU1NfMTIwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNV9SWF9XX1BSSU9SSVRZX1NTXzEyMSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE1X1JYX1dfUFJJT1JJVFlfU1NfMTIyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTVfUlhfV19QUklPUklUWV9TU18xMjModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNV9SWF9XX1BSSU9SSVRZX1NTXzEyNCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE1X1JYX1dfUFJJT1JJVFlfU1NfMTI1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTVfUlhfV19QUklPUklUWV9TU18xMjYodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNV9SWF9XX1BSSU9SSVRZX1NTXzEyNyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGM2OCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzE2OworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTZfUlhfV19QUklPUklUWV9TU18xMjgodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE2X1JYX1dfUFJJT1JJVFlfU1NfMTI5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTZfUlhfV19QUklPUklUWV9TU18xMzAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNl9SWF9XX1BSSU9SSVRZX1NTXzEzMSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE2X1JYX1dfUFJJT1JJVFlfU1NfMTMyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTZfUlhfV19QUklPUklUWV9TU18xMzModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xNl9SWF9XX1BSSU9SSVRZX1NTXzEzNCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE2X1JYX1dfUFJJT1JJVFlfU1NfMTM1KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzcwKi8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMTc7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xN19SWF9XX1BSSU9SSVRZX1NTXzEzNih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTdfUlhfV19QUklPUklUWV9TU18xMzcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xN19SWF9XX1BSSU9SSVRZX1NTXzEzOCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE3X1JYX1dfUFJJT1JJVFlfU1NfMTM5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTdfUlhfV19QUklPUklUWV9TU18xNDAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xN19SWF9XX1BSSU9SSVRZX1NTXzE0MSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE3X1JYX1dfUFJJT1JJVFlfU1NfMTQyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTdfUlhfV19QUklPUklUWV9TU18xNDModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjNzgqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8xODsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE4X1JYX1dfUFJJT1JJVFlfU1NfMTQ0KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOF9SWF9XX1BSSU9SSVRZX1NTXzE0NSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE4X1JYX1dfUFJJT1JJVFlfU1NfMTQ2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMThfUlhfV19QUklPUklUWV9TU18xNDcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjcsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOF9SWF9XX1BSSU9SSVRZX1NTXzE0OCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE4X1JYX1dfUFJJT1JJVFlfU1NfMTQ5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMThfUlhfV19QUklPUklUWV9TU18xNTAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOF9SWF9XX1BSSU9SSVRZX1NTXzE1MSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGM4MCovCXU2NAlyeF93X3JvdW5kX3JvYmluXzE5OworI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTlfUlhfV19QUklPUklUWV9TU18xNTIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE5X1JYX1dfUFJJT1JJVFlfU1NfMTUzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTlfUlhfV19QUklPUklUWV9TU18xNTQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOV9SWF9XX1BSSU9SSVRZX1NTXzE1NSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE5X1JYX1dfUFJJT1JJVFlfU1NfMTU2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMTlfUlhfV19QUklPUklUWV9TU18xNTcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8xOV9SWF9XX1BSSU9SSVRZX1NTXzE1OCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzE5X1JYX1dfUFJJT1JJVFlfU1NfMTU5KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYzg4Ki8JdTY0CXJ4X3dfcm91bmRfcm9iaW5fMjA7CisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yMF9SWF9XX1BSSU9SSVRZX1NTXzE2MCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMjBfUlhfV19QUklPUklUWV9TU18xNjEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yMF9SWF9XX1BSSU9SSVRZX1NTXzE2Mih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzIwX1JYX1dfUFJJT1JJVFlfU1NfMTYzKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMjBfUlhfV19QUklPUklUWV9TU18xNjQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yMF9SWF9XX1BSSU9SSVRZX1NTXzE2NSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzIwX1JYX1dfUFJJT1JJVFlfU1NfMTY2KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1dfUk9VTkRfUk9CSU5fMjBfUlhfV19QUklPUklUWV9TU18xNjcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDBjOTAqLwl1NjQJcnhfd19yb3VuZF9yb2Jpbl8yMTsKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzIxX1JYX1dfUFJJT1JJVFlfU1NfMTY4KHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfV19ST1VORF9ST0JJTl8yMV9SWF9XX1BSSU9SSVRZX1NTXzE2OSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9XX1JPVU5EX1JPQklOXzIxX1JYX1dfUFJJT1JJVFlfU1NfMTcwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorCisjZGVmaW5lIFZYR0VfSFdfV1JSX1JJTkdfU0VSVklDRV9TVEFURVMJCQkxNzEKKyNkZWZpbmUgVlhHRV9IV19XUlJfUklOR19DT1VOVAkJCQkyMgorCisvKjB4MDBjOTgqLwl1NjQJcnhfcXVldWVfcHJpb3JpdHlfMDsKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8wX1JYX1FfTlVNQkVSXzAodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfNSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfNih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzBfUlhfUV9OVU1CRVJfNyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwY2EwKi8JdTY0CXJ4X3F1ZXVlX3ByaW9yaXR5XzE7CisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl84KHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzkodmFsKSB2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzEwKHZhbCkgdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl8xMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfMTIodmFsKSB2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19SWF9RVUVVRV9QUklPUklUWV8xX1JYX1FfTlVNQkVSXzEzKHZhbCkgdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfUFJJT1JJVFlfMV9SWF9RX05VTUJFUl8xNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzFfUlhfUV9OVU1CRVJfMTUodmFsKSB2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGNhOCovCXU2NAlyeF9xdWV1ZV9wcmlvcml0eV8yOworI2RlZmluZSBWWEdFX0hXX1JYX1FVRVVFX1BSSU9SSVRZXzJfUlhfUV9OVU1CRVJfMTYodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorCXU4CXVudXNlZDAwY2M4WzB4MDBjYzgtMHgwMGNiMF07CisKKy8qMHgwMGNjOCovCXU2NAlyZXBsaWNhdGlvbl9xdWV1ZV9wcmlvcml0eTsKKyNkZWZpbmUJVlhHRV9IV19SRVBMSUNBVElPTl9RVUVVRV9QUklPUklUWV9SRVBMSUNBVElPTl9RVUVVRV9QUklPUklUWSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGNkMCovCXU2NAlyeF9xdWV1ZV9zZWxlY3Q7CisjZGVmaW5lIFZYR0VfSFdfUlhfUVVFVUVfU0VMRUNUX05VTUJFUihuKQl2eGdlX21CSVQobikKKyNkZWZpbmUJVlhHRV9IV19SWF9RVUVVRV9TRUxFQ1RfRU5BQkxFX0NPREUJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1JYX1FVRVVFX1NFTEVDVF9FTkFCTEVfSElFUkFSQ0hJQ0FMX1BSVFkJdnhnZV9tQklUKDIzKQorLyoweDAwY2Q4Ki8JdTY0CXJxYV92cGJwX2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfUlFBX1ZQQlBfQ1RSTF9XUl9YT05fRElTCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19SUUFfVlBCUF9DVFJMX1JPQ1JDX0RJUwl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfUlFBX1ZQQlBfQ1RSTF9UWFBFX0RJUwl2eGdlX21CSVQoMzEpCisvKjB4MDBjZTAqLwl1NjQJcnhfbXVsdGlfY2FzdF9jdHJsOworI2RlZmluZQlWWEdFX0hXX1JYX01VTFRJX0NBU1RfQ1RSTF9USU1FX09VVF9ESVMJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfUlhfTVVMVElfQ0FTVF9DVFJMX0ZSTV9EUk9QX0RJUwl2eGdlX21CSVQoMSkKKyNkZWZpbmUgVlhHRV9IV19SWF9NVUxUSV9DQVNUX0NUUkxfTk9fUlhEX1RJTUVfT1VUX0NOVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyLCAzMCkKKyNkZWZpbmUgVlhHRV9IV19SWF9NVUxUSV9DQVNUX0NUUkxfVElNRV9PVVRfQ05UKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDAwY2U4Ki8JdTY0CXdkZV9wcm1fY3RybDsKKyNkZWZpbmUgVlhHRV9IV19XREVfUFJNX0NUUkxfU1BBVl9USFJFU0hPTEQodmFsKSB2eGdlX3ZCSVQodmFsLCAyLCAxMCkKKyNkZWZpbmUgVlhHRV9IV19XREVfUFJNX0NUUkxfU1BMSVRfVEhSRVNIT0xEKHZhbCkgdnhnZV92QklUKHZhbCwgMTgsIDE0KQorI2RlZmluZQlWWEdFX0hXX1dERV9QUk1fQ1RSTF9TUExJVF9PTl8xU1RfUk9XCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19XREVfUFJNX0NUUkxfU1BMSVRfT05fUk9XX0JORFJZCXZ4Z2VfbUJJVCgzMykKKyNkZWZpbmUgVlhHRV9IV19XREVfUFJNX0NUUkxfRkJfUk9XX1NJWkUodmFsKSB2eGdlX3ZCSVQodmFsLCA0NiwgMikKKy8qMHgwMGNmMCovCXU2NAlub2FfY3RybDsKKyNkZWZpbmUgVlhHRV9IV19OT0FfQ1RSTF9GUk1fUFJUWV9RVU9UQSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfTk9BX0NUUkxfTk9OX0ZSTV9QUlRZX1FVT1RBKHZhbCkgdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lCVZYR0VfSFdfTk9BX0NUUkxfSUdOT1JFX0tERkNfSUZfU1RBVFVTCXZ4Z2VfbUJJVCgxNikKKyNkZWZpbmUgVlhHRV9IV19OT0FfQ1RSTF9NQVhfSk9CX0NOVF9GT1JfV0RFMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM3LCA0KQorI2RlZmluZSBWWEdFX0hXX05PQV9DVFJMX01BWF9KT0JfQ05UX0ZPUl9XREUxKHZhbCkgdnhnZV92QklUKHZhbCwgNDUsIDQpCisjZGVmaW5lIFZYR0VfSFdfTk9BX0NUUkxfTUFYX0pPQl9DTlRfRk9SX1dERTIodmFsKSB2eGdlX3ZCSVQodmFsLCA1MywgNCkKKyNkZWZpbmUgVlhHRV9IV19OT0FfQ1RSTF9NQVhfSk9CX0NOVF9GT1JfV0RFMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYwLCA0KQorLyoweDAwY2Y4Ki8JdTY0CXBoYXNlX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19QSEFTRV9DRkdfUUNDX1dSX1BIQVNFX0VOCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1BIQVNFX0NGR19RQ0NfUkRfUEhBU0VfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUEhBU0VfQ0ZHX0lNTU1fV1JfUEhBU0VfRU4JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUEhBU0VfQ0ZHX0lNTU1fUkRfUEhBU0VfRU4JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1BIQVNFX0NGR19VTVFNX1dSX1BIQVNFX0VOCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19QSEFTRV9DRkdfVU1RTV9SRF9QSEFTRV9FTgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfUEhBU0VfQ0ZHX1JDQk1fV1JfUEhBU0VfRU4JdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1BIQVNFX0NGR19SQ0JNX1JEX1BIQVNFX0VOCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19QSEFTRV9DRkdfUlhEX1JDX1dSX1BIQVNFX0VOCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19QSEFTRV9DRkdfUlhEX1JDX1JEX1BIQVNFX0VOCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19QSEFTRV9DRkdfUlhEX1JIU19XUl9QSEFTRV9FTgl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfUEhBU0VfQ0ZHX1JYRF9SSFNfUkRfUEhBU0VfRU4JdnhnZV9tQklUKDQzKQorLyoweDAwZDAwKi8JdTY0CXJjcV9ieXBxX2NmZzsKKyNkZWZpbmUgVlhHRV9IV19SQ1FfQllQUV9DRkdfT1ZFUkZMT1dfVEhSRVNIT0xEKHZhbCkgdnhnZV92QklUKHZhbCwgMTAsIDIyKQorI2RlZmluZSBWWEdFX0hXX1JDUV9CWVBRX0NGR19CWVBfT05fVEhSRVNIT0xEKHZhbCkgdnhnZV92QklUKHZhbCwgMzksIDkpCisjZGVmaW5lIFZYR0VfSFdfUkNRX0JZUFFfQ0ZHX0JZUF9PRkZfVEhSRVNIT0xEKHZhbCkgdnhnZV92QklUKHZhbCwgNTUsIDkpCisJdTgJdW51c2VkMDBlMDBbMHgwMGUwMC0weDAwZDA4XTsKKworLyoweDAwZTAwKi8JdTY0CWRvb3JiZWxsX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfRE9PUkJFTExfSU5UX1NUQVRVU19LREZDX0VSUl9SRUdfVFhETUFfS0RGQ19JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfRE9PUkJFTExfSU5UX1NUQVRVU19VU0RDX0VSUl9SRUdfVFhETUFfVVNEQ19JTlQJdnhnZV9tQklUKDE1KQorLyoweDAwZTA4Ki8JdTY0CWRvb3JiZWxsX2ludF9tYXNrOworLyoweDAwZTEwKi8JdTY0CWtkZmNfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19LREZDX0VSUl9SRUdfS0RGQ19LREZDX0VDQ19TR19FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19FUlJfUkVHX0tERkNfS0RGQ19FQ0NfREJfRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19LREZDX0VSUl9SRUdfS0RGQ19LREZDX1NNX0VSUl9BTEFSTQl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19FUlJfUkVHX0tERkNfS0RGQ19NSVNDX0VSUl8xCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19LREZDX0VSUl9SRUdfS0RGQ19LREZDX1BDSVhfRVJSCXZ4Z2VfbUJJVCgzOSkKKy8qMHgwMGUxOCovCXU2NAlrZGZjX2Vycl9tYXNrOworLyoweDAwZTIwKi8JdTY0CWtkZmNfZXJyX3JlZ19hbGFybTsKKyNkZWZpbmUJVlhHRV9IV19LREZDX0VSUl9SRUdfQUxBUk1fS0RGQ19LREZDX0VDQ19TR19FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19FUlJfUkVHX0FMQVJNX0tERkNfS0RGQ19FQ0NfREJfRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19LREZDX0VSUl9SRUdfQUxBUk1fS0RGQ19LREZDX1NNX0VSUl9BTEFSTQl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19FUlJfUkVHX0FMQVJNX0tERkNfS0RGQ19NSVNDX0VSUl8xCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19LREZDX0VSUl9SRUdfQUxBUk1fS0RGQ19LREZDX1BDSVhfRVJSCXZ4Z2VfbUJJVCgzOSkKKwl1OAl1bnVzZWQwMGU0MFsweDAwZTQwLTB4MDBlMjhdOworLyoweDAwZTQwKi8JdTY0CWtkZmNfdnBfcGFydGl0aW9uXzA7CisjZGVmaW5lCVZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMF9FTkFCTEUJdnhnZV9tQklUKDApCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMF9OVU1CRVJfMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUsIDMpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMF9MRU5HVEhfMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCAxNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8wX05VTUJFUl8xKHZhbCkgdnhnZV92QklUKHZhbCwgMzcsIDMpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMF9MRU5HVEhfMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ5LCAxNSkKKy8qMHgwMGU0OCovCXU2NAlrZGZjX3ZwX3BhcnRpdGlvbl8xOworI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzFfTlVNQkVSXzIodmFsKSB2eGdlX3ZCSVQodmFsLCA1LCAzKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzFfTEVOR1RIXzIodmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgMTUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fMV9OVU1CRVJfMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM3LCAzKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzFfTEVOR1RIXzModmFsKSB2eGdlX3ZCSVQodmFsLCA0OSwgMTUpCisvKjB4MDBlNTAqLwl1NjQJa2RmY192cF9wYXJ0aXRpb25fMjsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8yX05VTUJFUl80KHZhbCkgdnhnZV92QklUKHZhbCwgNSwgMykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8yX0xFTkdUSF80KHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDE1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzJfTlVNQkVSXzUodmFsKSB2eGdlX3ZCSVQodmFsLCAzNywgMykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8yX0xFTkdUSF81KHZhbCkgdnhnZV92QklUKHZhbCwgNDksIDE1KQorLyoweDAwZTU4Ki8JdTY0CWtkZmNfdnBfcGFydGl0aW9uXzM7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fM19OVU1CRVJfNih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUsIDMpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fM19MRU5HVEhfNih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCAxNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl8zX05VTUJFUl83KHZhbCkgdnhnZV92QklUKHZhbCwgMzcsIDMpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fM19MRU5HVEhfNyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ5LCAxNSkKKy8qMHgwMGU2MCovCXU2NAlrZGZjX3ZwX3BhcnRpdGlvbl80OworI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzRfTEVOR1RIXzgodmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgMTUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fNF9MRU5HVEhfOSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ5LCAxNSkKKy8qMHgwMGU2OCovCXU2NAlrZGZjX3ZwX3BhcnRpdGlvbl81OworI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzVfTEVOR1RIXzEwKHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDE1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzVfTEVOR1RIXzExKHZhbCkgdnhnZV92QklUKHZhbCwgNDksIDE1KQorLyoweDAwZTcwKi8JdTY0CWtkZmNfdnBfcGFydGl0aW9uXzY7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fNl9MRU5HVEhfMTIodmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgMTUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19WUF9QQVJUSVRJT05fNl9MRU5HVEhfMTModmFsKSB2eGdlX3ZCSVQodmFsLCA0OSwgMTUpCisvKjB4MDBlNzgqLwl1NjQJa2RmY192cF9wYXJ0aXRpb25fNzsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl83X0xFTkdUSF8xNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCAxNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1ZQX1BBUlRJVElPTl83X0xFTkdUSF8xNSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ5LCAxNSkKKy8qMHgwMGU4MCovCXU2NAlrZGZjX3ZwX3BhcnRpdGlvbl84OworI2RlZmluZSBWWEdFX0hXX0tERkNfVlBfUEFSVElUSU9OXzhfTEVOR1RIXzE2KHZhbCkgdnhnZV92QklUKHZhbCwgMTcsIDE1KQorLyoweDAwZTg4Ki8JdTY0CWtkZmNfd19yb3VuZF9yb2Jpbl8wOworI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl8wKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl8yKHZhbCkgdnhnZV92QklUKHZhbCwgMTksIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzModmFsKSB2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8wX05VTUJFUl81KHZhbCkgdnhnZV92QklUKHZhbCwgNDMsIDUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzBfTlVNQkVSXzYodmFsKSB2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMF9OVU1CRVJfNyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorCisJdTgJdW51c2VkMGYyOFsweDBmMjgtMHgwZTkwXTsKKworLyoweDAwZjI4Ki8JdTY0CWtkZmNfd19yb3VuZF9yb2Jpbl8yMDsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fMjBfTlVNQkVSXzAodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8yMF9OVU1CRVJfMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDExLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8yMF9OVU1CRVJfMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE5LCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8yMF9OVU1CRVJfMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8yMF9OVU1CRVJfNCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM1LCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8yMF9OVU1CRVJfNSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQzLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8yMF9OVU1CRVJfNih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZSBWWEdFX0hXX0tERkNfV19ST1VORF9ST0JJTl8yMF9OVU1CRVJfNyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorCisjZGVmaW5lIFZYR0VfSFdfV1JSX0ZJRk9fQ09VTlQJCQkJMjAKKworCXU4CXVudXNlZDBmYzhbMHgwZmM4LTB4MGYzMF07CisKKy8qMHgwMGZjOCovCXU2NAlrZGZjX3dfcm91bmRfcm9iaW5fNDA7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19XX1JPVU5EX1JPQklOXzQwX05VTUJFUl8wKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fNDBfTlVNQkVSXzEodmFsKSB2eGdlX3ZCSVQodmFsLCAxMSwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fNDBfTlVNQkVSXzIodmFsKSB2eGdlX3ZCSVQodmFsLCAxOSwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fNDBfTlVNQkVSXzModmFsKSB2eGdlX3ZCSVQodmFsLCAyNywgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fNDBfTlVNQkVSXzQodmFsKSB2eGdlX3ZCSVQodmFsLCAzNSwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fNDBfTlVNQkVSXzUodmFsKSB2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fNDBfTlVNQkVSXzYodmFsKSB2eGdlX3ZCSVQodmFsLCA1MSwgNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1dfUk9VTkRfUk9CSU5fNDBfTlVNQkVSXzcodmFsKSB2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKworCXU4CXVudXNlZDEwNjhbMHgwMTA2OC0weDBmZDBdOworCisvKjB4MDEwNjgqLwl1NjQJa2RmY19lbnRyeV90eXBlX3NlbF8wOworI2RlZmluZSBWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMF9OVU1CRVJfMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl8xKHZhbCkgdnhnZV92QklUKHZhbCwgMTQsIDIpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl8yKHZhbCkgdnhnZV92QklUKHZhbCwgMjIsIDIpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl8zKHZhbCkgdnhnZV92QklUKHZhbCwgMzAsIDIpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl80KHZhbCkgdnhnZV92QklUKHZhbCwgMzgsIDIpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl81KHZhbCkgdnhnZV92QklUKHZhbCwgNDYsIDIpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl82KHZhbCkgdnhnZV92QklUKHZhbCwgNTQsIDIpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19FTlRSWV9UWVBFX1NFTF8wX05VTUJFUl83KHZhbCkgdnhnZV92QklUKHZhbCwgNjIsIDIpCisvKjB4MDEwNzAqLwl1NjQJa2RmY19lbnRyeV90eXBlX3NlbF8xOworI2RlZmluZSBWWEdFX0hXX0tERkNfRU5UUllfVFlQRV9TRUxfMV9OVU1CRVJfOCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisvKjB4MDEwNzgqLwl1NjQJa2RmY19maWZvXzBfY3RybDsKKyNkZWZpbmUgVlhHRV9IV19LREZDX0ZJRk9fMF9DVFJMX1dSUl9OVU1CRVIodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorI2RlZmluZSBWWEdFX0hXX1dFSUdIVEVEX1JSX1NFUlZJQ0VfU1RBVEVTCQkxNzYKKyNkZWZpbmUgVlhHRV9IV19XUlJfRklGT19TRVJWSUNFX1NUQVRFUwkJCTE1MworCisJdTgJdW51c2VkMTEwMFsweDAxMTAwLTB4MTA4MF07CisKKy8qMHgwMTEwMCovCXU2NAlrZGZjX2ZpZm9fMTdfY3RybDsKKyNkZWZpbmUgVlhHRV9IV19LREZDX0ZJRk9fMTdfQ1RSTF9XUlJfTlVNQkVSKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKworCXU4CXVudXNlZDE2MDBbMHgwMTYwMC0weDExMDhdOworCisvKjB4MDE2MDAqLwl1NjQJcnhtYWNfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19JTlRfU1RBVFVTX1JYTUFDX0dFTl9FUlJfUlhNQUNfR0VOX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19JTlRfU1RBVFVTX1JYTUFDX0VDQ19FUlJfUlhNQUNfRUNDX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19JTlRfU1RBVFVTX1JYTUFDX1ZBUklPVVNfRVJSX1JYTUFDX1ZBUklPVVNfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDExKQorLyoweDAxNjA4Ki8JdTY0CXJ4bWFjX2ludF9tYXNrOworCXU4CXVudXNlZDAxNjE4WzB4MDE2MTgtMHgwMTYxMF07CisKKy8qMHgwMTYxOCovCXU2NAlyeG1hY19nZW5fZXJyX3JlZzsKKy8qMHgwMTYyMCovCXU2NAlyeG1hY19nZW5fZXJyX21hc2s7CisvKjB4MDE2MjgqLwl1NjQJcnhtYWNfZ2VuX2Vycl9hbGFybTsKKy8qMHgwMTYzMCovCXU2NAlyeG1hY19lY2NfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19STUFDX1BPUlQwX1JNQUNfUlRTX1BBUlRfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUk1BQ19QT1JUMF9STUFDX1JUU19QQVJUX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0LCA0KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JNQUNfUE9SVDFfUk1BQ19SVFNfUEFSVF9TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgOCwgNCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19STUFDX1BPUlQxX1JNQUNfUlRTX1BBUlRfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDEyLCA0KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JNQUNfUE9SVDJfUk1BQ19SVFNfUEFSVF9TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUk1BQ19QT1JUMl9STUFDX1JUU19QQVJUX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyMCwgNCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfREFfTEtQX1BSVDBfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI0LCAyKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19EQV9MS1BfUFJUMF9EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjYsIDIpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX0RBX0xLUF9QUlQxX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyOCwgMikKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfREFfTEtQX1BSVDFfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMwLCAyKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19WSURfTEtQX1NHX0VSUgl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX1ZJRF9MS1BfREJfRVJSCXZ4Z2VfbUJJVCgzMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfUE5fTEtQX1BSVDBfU0dfRVJSCXZ4Z2VfbUJJVCgzNCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfUE5fTEtQX1BSVDBfREJfRVJSCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfUE5fTEtQX1BSVDFfU0dfRVJSCXZ4Z2VfbUJJVCgzNikKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfUE5fTEtQX1BSVDFfREJfRVJSCXZ4Z2VfbUJJVCgzNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfUE5fTEtQX1BSVDJfU0dfRVJSCXZ4Z2VfbUJJVCgzOCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfUE5fTEtQX1BSVDJfREJfRVJSCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfUlRIX01BU0tfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQwLCA3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19SVEhfTUFTS19EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDcsIDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfRUNDX0VSUl9SRUdfUlRTSl9STUFDX1JUSF9MS1BfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU0LCAzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19SVEhfTEtQX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1NywgMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19FQ0NfRVJSX1JFR19SVFNKX1JNQUNfRFNfTEtQX1NHX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDYwKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0VDQ19FUlJfUkVHX1JUU0pfUk1BQ19EU19MS1BfREJfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoNjEpCisvKjB4MDE2MzgqLwl1NjQJcnhtYWNfZWNjX2Vycl9tYXNrOworLyoweDAxNjQwKi8JdTY0CXJ4bWFjX2VjY19lcnJfYWxhcm07CisvKjB4MDE2NDgqLwl1NjQJcnhtYWNfdmFyaW91c19lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX1ZBUklPVVNfRVJSX1JFR19STUFDX1JNQUNfUE9SVDBfRlNNX0VSUgl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19WQVJJT1VTX0VSUl9SRUdfUk1BQ19STUFDX1BPUlQxX0ZTTV9FUlIJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfVkFSSU9VU19FUlJfUkVHX1JNQUNfUk1BQ19QT1JUMl9GU01fRVJSCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1ZBUklPVVNfRVJSX1JFR19STUFDSl9STUFDSl9GU01fRVJSCXZ4Z2VfbUJJVCgzKQorLyoweDAxNjUwKi8JdTY0CXJ4bWFjX3ZhcmlvdXNfZXJyX21hc2s7CisvKjB4MDE2NTgqLwl1NjQJcnhtYWNfdmFyaW91c19lcnJfYWxhcm07CisvKjB4MDE2NjAqLwl1NjQJcnhtYWNfZ2VuX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19HRU5fQ0ZHX1NDQUxFX1JNQUNfVVRJTAl2eGdlX21CSVQoMTEpCisvKjB4MDE2NjgqLwl1NjQJcnhtYWNfYXV0aG9yaXplX2FsbF9hZGRyOworI2RlZmluZSBWWEdFX0hXX1JYTUFDX0FVVEhPUklaRV9BTExfQUREUl9WUChuKQl2eGdlX21CSVQobikKKy8qMHgwMTY3MCovCXU2NAlyeG1hY19hdXRob3JpemVfYWxsX3ZpZDsKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19BVVRIT1JJWkVfQUxMX1ZJRF9WUChuKQl2eGdlX21CSVQobikKKwl1OAl1bnVzZWQwMTZjMFsweDAxNmMwLTB4MDE2NzhdOworCisvKjB4MDE2YzAqLwl1NjQJcnhtYWNfcmVkX3JhdGVfcmVwbF9xdWV1ZTsKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9SRVBMX1FVRVVFX0NSQVRFX1RIUjAodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1JFUExfUVVFVUVfQ1JBVEVfVEhSMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfUkVQTF9RVUVVRV9DUkFURV9USFIyKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9SRVBMX1FVRVVFX0NSQVRFX1RIUjModmFsKSB2eGdlX3ZCSVQodmFsLCAxMiwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9SRVBMX1FVRVVFX0ZSQVRFX1RIUjAodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9SRVBMX1FVRVVFX0ZSQVRFX1RIUjEodmFsKSB2eGdlX3ZCSVQodmFsLCAyMCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9SRVBMX1FVRVVFX0ZSQVRFX1RIUjIodmFsKSB2eGdlX3ZCSVQodmFsLCAyNCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9SRVBMX1FVRVVFX0ZSQVRFX1RIUjModmFsKSB2eGdlX3ZCSVQodmFsLCAyOCwgNCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SRURfUkFURV9SRVBMX1FVRVVFX1RSSUNLTEVfRU4JdnhnZV9tQklUKDM1KQorCXU4CXVudXNlZDAxNmUwWzB4MDE2ZTAtMHgwMTZjOF07CisKKy8qMHgwMTZlMCovCXU2NAlyeG1hY19jZmcwX3BvcnRbM107CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX1JNQUNfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX1NUUklQX0ZDUwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfRElTQ0FSRF9QRlJNCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfSUdOT1JFX0ZDU19FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9JR05PUkVfTE9OR19FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9JR05PUkVfVVNJWkVEX0VSUgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX0lHTk9SRV9MRU5fTUlTTUFUQ0gJdnhnZV9tQklUKDI3KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9NQVhfUFlMRF9MRU4odmFsKSB2eGdlX3ZCSVQodmFsLCA1MCwgMTQpCisJdTgJdW51c2VkMDE3MTBbMHgwMTcxMC0weDAxNmY4XTsKKworLyoweDAxNzEwKi8JdTY0CXJ4bWFjX2NmZzJfcG9ydFszXTsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcyX1BPUlRfUFJPTV9FTgl2eGdlX21CSVQoMykKKy8qMHgwMTcyOCovCXU2NAlyeG1hY19wYXVzZV9jZmdfcG9ydFszXTsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9HRU5fRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfUkNWX0VOCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX0FDQ0VMX1NFTkQodmFsKSB2eGdlX3ZCSVQodmFsLCA5LCAzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX0RVQUxfVEhSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9ISUdIX1BUSU1FKHZhbCkgdnhnZV92QklUKHZhbCwgMjAsIDE2KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX0lHTk9SRV9QRl9GQ1NfRVJSCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9JR05PUkVfUEZfTEVOX0VSUgl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfTElNSVRFUl9FTgl2eGdlX21CSVQoNDcpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfTUFYX0xJTUlUKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfUEVSTUlUX1JBVEVNR01UX0NUUkwJdnhnZV9tQklUKDU5KQorCXU4CXVudXNlZDAxNzU4WzB4MDE3NTgtMHgwMTc0MF07CisKKy8qMHgwMTc1OCovCXU2NAlyeG1hY19yZWRfY2ZnMF9wb3J0WzNdOworI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9DRkcwX1BPUlRfUkVEX0VOX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAxNzcwKi8JdTY0CXJ4bWFjX3JlZF9jZmcxX3BvcnRbM107CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUkVEX0NGRzFfUE9SVF9GSU5FX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JFRF9DRkcxX1BPUlRfUkVEX0VOX1JFUExfUVVFVUUJdnhnZV9tQklUKDExKQorLyoweDAxNzg4Ki8JdTY0CXJ4bWFjX3JlZF9jZmcyX3BvcnRbM107CisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX0NGRzJfUE9SVF9UUklDS0xFX0VOX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAxN2EwKi8JdTY0CXJ4bWFjX2xpbmtfdXRpbF9wb3J0WzNdOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX0xJTktfVVRJTF9QT1JUX1JNQUNfUk1BQ19VVElMSVpBVElPTih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxLCA3KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX0xJTktfVVRJTF9QT1JUX1JNQUNfVVRJTF9DRkcodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX0xJTktfVVRJTF9QT1JUX1JNQUNfUk1BQ19GUkFDX1VUSUwodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTIsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfTElOS19VVElMX1BPUlRfUk1BQ19QS1RfV0VJR0hUKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfTElOS19VVElMX1BPUlRfUk1BQ19STUFDX1NDQUxFX0ZBQ1RPUgl2eGdlX21CSVQoMjMpCisJdTgJdW51c2VkMDE3ZDBbMHgwMTdkMC0weDAxN2I4XTsKKworLyoweDAxN2QwKi8JdTY0CXJ4bWFjX3N0YXR1c19wb3J0WzNdOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX1NUQVRVU19QT1JUX1JNQUNfUlhfRlJNX1JDVkQJdnhnZV9tQklUKDMpCisJdTgJdW51c2VkMDE4MDBbMHgwMTgwMC0weDAxN2U4XTsKKworLyoweDAxODAwKi8JdTY0CXJ4bWFjX3J4X3BhX2NmZzA7CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9JR05PUkVfRlJBTUVfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfU1VQUE9SVF9TTkFQX0FCX04JdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9TRUFSQ0hfRk9SX0hBTwl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9TVVBQT1JUX01PQklMRV9JUFY2X0hEUlMJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfSVBWNl9TVE9QX1NFQVJDSElORwl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9OT19QU19JRl9VTktOT1dOCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1NFQVJDSF9GT1JfRVRZUEUJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVE9TU19BTllfRlJNX0lGX0wzX0NTVU1fRVJSCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1RPU1NfT0ZGTERfRlJNX0lGX0wzX0NTVU1fRVJSCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1RPU1NfQU5ZX0ZSTV9JRl9MNF9DU1VNX0VSUgl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9UT1NTX09GRkxEX0ZSTV9JRl9MNF9DU1VNX0VSUgl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9UT1NTX0FOWV9GUk1fSUZfUlBBX0VSUgl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9UT1NTX09GRkxEX0ZSTV9JRl9SUEFfRVJSCXZ4Z2VfbUJJVCg1OSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX0pVTUJPX1NOQVBfRU4JdnhnZV9tQklUKDYzKQorLyoweDAxODA4Ki8JdTY0CXJ4bWFjX3J4X3BhX2NmZzE7CisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMV9SRVBMX0lQVjRfVENQX0lOQ0xfUEgJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMV9SRVBMX0lQVjZfVENQX0lOQ0xfUEgJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMV9SRVBMX0lQVjRfVURQX0lOQ0xfUEgJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzFfUkVQTF9JUFY2X1VEUF9JTkNMX1BICXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcxX1JFUExfTDRfSU5DTF9DRgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMV9SRVBMX1NUUklQX1ZMQU5fVEFHCXZ4Z2VfbUJJVCgyMykKKwl1OAl1bnVzZWQwMTgyOFsweDAxODI4LTB4MDE4MTBdOworCisvKjB4MDE4MjgqLwl1NjQJcnRzX21ncl9jZmcwOworI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9SVFNfRFBfU1BfUFJJT1JJVFkJdnhnZV9tQklUKDMpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9DRkcwX0ZMRVhfTDRQUlRDTF9WQUxVRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI0LCA4KQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9JQ01QX1RSQVNICXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfVENQU1lOX1RSQVNICXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfWkw0UFlMRF9UUkFTSAl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DRkcwX0w0UFJUQ0xfVENQX1RSQVNICXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfTDRQUlRDTF9VRFBfVFJBU0gJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9MNFBSVENMX0ZMRVhfVFJBU0gJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9JUEZSQUdfVFJBU0gJdnhnZV9tQklUKDU5KQorLyoweDAxODMwKi8JdTY0CXJ0c19tZ3JfY2ZnMTsKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzFfREFfQUNUSVZFX1RBQkxFCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMV9QTl9BQ1RJVkVfVEFCTEUJdnhnZV9tQklUKDcpCisvKjB4MDE4MzgqLwl1NjQJcnRzX21ncl9jcml0ZXJpYV9wcmlvcml0eTsKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX0VUWVBFKHZhbCkgdnhnZV92QklUKHZhbCwgNSwgMykKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX0lDTVBfVENQU1lOKHZhbCkgdnhnZV92QklUKHZhbCwgOSwgMykKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX0w0UE4odmFsKSB2eGdlX3ZCSVQodmFsLCAxMywgMykKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1JBTkdFX0w0UE4odmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgMykKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1JUSF9JVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIxLCAzKQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfRFModmFsKSB2eGdlX3ZCSVQodmFsLCAyNSwgMykKKyNkZWZpbmUgVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1FPUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI5LCAzKQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfWkw0UFlMRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMzLCAzKQorI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfTDRQUlRDTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM3LCAzKQorLyoweDAxODQwKi8JdTY0CXJ0c19tZ3JfZGFfcGF1c2VfY2ZnOworI2RlZmluZSBWWEdFX0hXX1JUU19NR1JfREFfUEFVU0VfQ0ZHX1ZQQVRIX1ZFQ1RPUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAxODQ4Ki8JdTY0CXJ0c19tZ3JfZGFfc2xvd19wcm90b19jZmc7CisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9EQV9TTE9XX1BST1RPX0NGR19WUEFUSF9WRUNUT1IodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisJdTgJdW51c2VkMDE4OTBbMHgwMTg5MC0weDAxODUwXTsKKy8qMHgwMTg5MCovICAgICB1NjQgICAgIHJ0c19tZ3JfY2Jhc2luX2NmZzsKKwl1OAl1bnVzZWQwMTk2OFsweDAxOTY4LTB4MDE4OThdOworCisvKjB4MDE5NjgqLwl1NjQJZGJnX3N0YXRfcnhfYW55X2ZybXM7CisjZGVmaW5lIFZYR0VfSFdfREJHX1NUQVRfUlhfQU5ZX0ZSTVNfUE9SVDBfUlhfQU5ZX0ZSTVModmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX0RCR19TVEFUX1JYX0FOWV9GUk1TX1BPUlQxX1JYX0FOWV9GUk1TKHZhbCkgdnhnZV92QklUKHZhbCwgOCwgOCkKKyNkZWZpbmUgVlhHRV9IV19EQkdfU1RBVF9SWF9BTllfRlJNU19QT1JUMl9SWF9BTllfRlJNUyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgOCkKKwl1OAl1bnVzZWQwMWEwMFsweDAxYTAwLTB4MDE5NzBdOworCisvKjB4MDFhMDAqLwl1NjQJcnhtYWNfcmVkX3JhdGVfdnBbMTddOworI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1ZQX0NSQVRFX1RIUjAodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1ZQX0NSQVRFX1RIUjEodmFsKSB2eGdlX3ZCSVQodmFsLCA0LCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1ZQX0NSQVRFX1RIUjIodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1ZQX0NSQVRFX1RIUjModmFsKSB2eGdlX3ZCSVQodmFsLCAxMiwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9WUF9GUkFURV9USFIwKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDQpCisjZGVmaW5lIFZYR0VfSFdfUlhNQUNfUkVEX1JBVEVfVlBfRlJBVEVfVEhSMSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIwLCA0KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1JFRF9SQVRFX1ZQX0ZSQVRFX1RIUjIodmFsKSB2eGdlX3ZCSVQodmFsLCAyNCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19SRURfUkFURV9WUF9GUkFURV9USFIzKHZhbCkgdnhnZV92QklUKHZhbCwgMjgsIDQpCisJdTgJdW51c2VkMDFlMDBbMHgwMWUwMC0weDAxYTg4XTsKKworLyoweDAxZTAwKi8JdTY0CXhnbWFjX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfSU5UX1NUQVRVU19YTUFDX0dFTl9FUlJfWE1BQ19HRU5fSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1hHTUFDX0lOVF9TVEFUVVNfWE1BQ19MSU5LX0VSUl9QT1JUMF9YTUFDX0xJTktfSU5UX1BPUlQwIFwKKwkJCQkJCQkJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfSU5UX1NUQVRVU19YTUFDX0xJTktfRVJSX1BPUlQxX1hNQUNfTElOS19JTlRfUE9SVDEgXAorCQkJCQkJCQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfSU5UX1NUQVRVU19YR1hTX0dFTl9FUlJfWEdYU19HRU5fSU5UCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19JTlRfU1RBVFVTX0FTSUNfTlRXS19FUlJfQVNJQ19OVFdLX0lOVAl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfSU5UX1NUQVRVU19BU0lDX0dQSU9fRVJSX0FTSUNfR1BJT19JTlQJdnhnZV9tQklUKDIzKQorLyoweDAxZTA4Ki8JdTY0CXhnbWFjX2ludF9tYXNrOworLyoweDAxZTEwKi8JdTY0CXhtYWNfZ2VuX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19MQUdDX0xBR19QT1JUMF9BQ1RPUl9DSFVSTl9ERVRFQ1RFRCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfTEFHQ19MQUdfUE9SVDBfUEFSVE5FUl9DSFVSTl9ERVRFQ1RFRCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX0xBR0NfTEFHX1BPUlQwX1JFQ0VJVkVEX0xBQ1BEVQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19MQUdDX0xBR19QT1JUMV9BQ1RPUl9DSFVSTl9ERVRFQ1RFRCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0dFTl9FUlJfUkVHX0xBR0NfTEFHX1BPUlQxX1BBUlRORVJfQ0hVUk5fREVURUNURUQgXAorCQkJCQkJCQl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fRVJSX1JFR19MQUdDX0xBR19QT1JUMV9SRUNFSVZFRF9MQUNQRFUJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWExDTV9MQUdfRkFJTE9WRVJfREVURUNURUQJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWFNUQVRTX1JNQUNfU1RBVFNfVElMRTBfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQwLCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWFNUQVRTX1JNQUNfU1RBVFNfVElMRTBfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQyLCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWFNUQVRTX1JNQUNfU1RBVFNfVElMRTFfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ0LCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWFNUQVRTX1JNQUNfU1RBVFNfVElMRTFfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ2LCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWFNUQVRTX1JNQUNfU1RBVFNfVElMRTJfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ4LCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWFNUQVRTX1JNQUNfU1RBVFNfVElMRTJfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUwLCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWFNUQVRTX1JNQUNfU1RBVFNfVElMRTNfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUyLCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWFNUQVRTX1JNQUNfU1RBVFNfVElMRTNfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU0LCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWFNUQVRTX1JNQUNfU1RBVFNfVElMRTRfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU2LCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWFNUQVRTX1JNQUNfU1RBVFNfVElMRTRfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU4LCAyKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0VSUl9SRUdfWE1BQ0pfWE1BQ19GU01fRVJSCXZ4Z2VfbUJJVCg2MykKKy8qMHgwMWUxOCovCXU2NAl4bWFjX2dlbl9lcnJfbWFzazsKKy8qMHgwMWUyMCovCXU2NAl4bWFjX2dlbl9lcnJfYWxhcm07CisvKjB4MDFlMjgqLwl1NjQJeG1hY19saW5rX2Vycl9wb3J0X3JlZ1syXTsKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNQUNKX1BPUlRfRE9XTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNQUNKX1BPUlRfVVAJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19MSU5LX0VSUl9QT1JUX1JFR19YTUFDSl9QT1JUX1dFTlRfRE9XTgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19MSU5LX0VSUl9QT1JUX1JFR19YTUFDSl9QT1JUX1dFTlRfVVAJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfWE1BQ0pfUE9SVF9SRUFGRklSTUVEX0ZBVUxUIFwKKwkJCQkJCQkJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfTElOS19FUlJfUE9SVF9SRUdfWE1BQ0pfUE9SVF9SRUFGRklSTUVEX09LCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNQUNKX0xJTktfRE9XTgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19MSU5LX0VSUl9QT1JUX1JFR19YTUFDSl9MSU5LX1VQCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1JBVEVNR01UX1JBVEVfQ0hBTkdFCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1JBVEVNR01UX0xBU0lfSU5WCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0xJTktfRVJSX1BPUlRfUkVHX1hNRElPX01ESU9fTUdSX0FDQ0VTU19DT01QTEVURSBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg0NykKKy8qMHgwMWUzMCovCXU2NAl4bWFjX2xpbmtfZXJyX3BvcnRfbWFza1syXTsKKy8qMHgwMWUzOCovCXU2NAl4bWFjX2xpbmtfZXJyX3BvcnRfYWxhcm1bMl07CisvKjB4MDFlNTgqLwl1NjQJeGd4c19nZW5fZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19YR1hTX0dFTl9FUlJfUkVHX1hHWFNfWEdYU19GU01fRVJSCXZ4Z2VfbUJJVCg2MykKKy8qMHgwMWU2MCovCXU2NAl4Z3hzX2dlbl9lcnJfbWFzazsKKy8qMHgwMWU2OCovCXU2NAl4Z3hzX2dlbl9lcnJfYWxhcm07CisvKjB4MDFlNzAqLwl1NjQJYXNpY19udHdrX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX0VSUl9SRUdfWE1BQ0pfTlRXS19ET1dOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19FUlJfUkVHX1hNQUNKX05UV0tfVVAJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX0VSUl9SRUdfWE1BQ0pfTlRXS19XRU5UX0RPV04JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19FUlJfUkVHX1hNQUNKX05UV0tfV0VOVF9VUAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX0VSUl9SRUdfWE1BQ0pfTlRXS19SRUFGRklSTUVEX0ZBVUxUCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfRVJSX1JFR19YTUFDSl9OVFdLX1JFQUZGSVJNRURfT0sJdnhnZV9tQklUKDIzKQorLyoweDAxZTc4Ki8JdTY0CWFzaWNfbnR3a19lcnJfbWFzazsKKy8qMHgwMWU4MCovCXU2NAlhc2ljX250d2tfZXJyX2FsYXJtOworLyoweDAxZTg4Ki8JdTY0CWFzaWNfZ3Bpb19lcnJfcmVnOworI2RlZmluZSBWWEdFX0hXX0FTSUNfR1BJT19FUlJfUkVHX1hNQUNKX0dQSU9fSU5UKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAxZTkwKi8JdTY0CWFzaWNfZ3Bpb19lcnJfbWFzazsKKy8qMHgwMWU5OCovCXU2NAlhc2ljX2dwaW9fZXJyX2FsYXJtOworLyoweDAxZWEwKi8JdTY0CXhnbWFjX2dlbl9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfR0VOX1NUQVRVU19YTUFDSl9OVFdLX09LCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1hHTUFDX0dFTl9TVEFUVVNfWE1BQ0pfTlRXS19EQVRBX1JBVEUJdnhnZV9tQklUKDExKQorLyoweDAxZWE4Ki8JdTY0CXhnbWFjX2dlbl9md19tZW1vX3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19HRU5fRldfTUVNT19TVEFUVVNfWE1BQ0pfRVZFTlRTX1BFTkRJTkcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisvKjB4MDFlYjAqLwl1NjQJeGdtYWNfZ2VuX2Z3X21lbW9fbWFzazsKKyNkZWZpbmUgVlhHRV9IV19YR01BQ19HRU5fRldfTUVNT19NQVNLX01BU0sodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMWViOCovCXU2NAl4Z21hY19nZW5fZndfdnBhdGhfdG9fdnNwb3J0X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19HRU5fRldfVlBBVEhfVE9fVlNQT1JUX1NUQVRVU19YTUFDSl9FVkVOVFNfUEVORElORyh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAxZWMwKi8JdTY0CXhnbWFjX21haW5fY2ZnX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfTUFJTl9DRkdfUE9SVF9QT1JUX0VOCXZ4Z2VfbUJJVCgzKQorCXU4CXVudXNlZDAxZjQwWzB4MDFmNDAtMHgwMWVkMF07CisKKy8qMHgwMWY0MCovCXU2NAl4bWFjX2dlbl9jZmc7CisjZGVmaW5lIFZYR0VfSFdfWE1BQ19HRU5fQ0ZHX1JBVEVNR01UX01BQ19SQVRFX1NFTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fQ0ZHX1RYX0hFQURfRFJPUF9XSEVOX0ZBVUxUCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0NGR19GQVVMVF9CRUhBVklPVVIJdnhnZV9tQklUKDI3KQorI2RlZmluZSBWWEdFX0hXX1hNQUNfR0VOX0NGR19QRVJJT0RfTlRXS19VUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI4LCA0KQorI2RlZmluZSBWWEdFX0hXX1hNQUNfR0VOX0NGR19QRVJJT0RfTlRXS19ET1dOKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDQpCisvKjB4MDFmNDgqLwl1NjQJeG1hY190aW1lc3RhbXA7CisjZGVmaW5lCVZYR0VfSFdfWE1BQ19USU1FU1RBTVBfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lIFZYR0VfSFdfWE1BQ19USU1FU1RBTVBfVVNFX0xJTktfSUQodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyKQorI2RlZmluZSBWWEdFX0hXX1hNQUNfVElNRVNUQU1QX0lOVEVSVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMTIsIDQpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19USU1FU1RBTVBfVElNRVJfUkVTVEFSVAl2eGdlX21CSVQoMTkpCisjZGVmaW5lIFZYR0VfSFdfWE1BQ19USU1FU1RBTVBfWE1BQ0pfUk9MTE9WRVJfQ05UKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDE2KQorLyoweDAxZjUwKi8JdTY0CXhtYWNfc3RhdHNfZ2VuX2NmZzsKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1NUQVRTX0dFTl9DRkdfUFJUQUdHUl9DVU1fVElNRVIodmFsKSB2eGdlX3ZCSVQodmFsLCA0LCA0KQorI2RlZmluZSBWWEdFX0hXX1hNQUNfU1RBVFNfR0VOX0NGR19WUEFUSF9DVU1fVElNRVIodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA0KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfU1RBVFNfR0VOX0NGR19WTEFOX0hBTkRMSU5HCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMWY1OCovCXU2NAl4bWFjX3N0YXRzX3N5c19jbWQ7CisjZGVmaW5lIFZYR0VfSFdfWE1BQ19TVEFUU19TWVNfQ01EX09QKHZhbCkgdnhnZV92QklUKHZhbCwgNSwgMykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1NUQVRTX1NZU19DTURfU1RST0JFCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1NUQVRTX1NZU19DTURfTE9DX1NFTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorI2RlZmluZSBWWEdFX0hXX1hNQUNfU1RBVFNfU1lTX0NNRF9PRkZTRVRfU0VMKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDgpCisvKjB4MDFmNjAqLwl1NjQJeG1hY19zdGF0c19zeXNfZGF0YTsKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1NUQVRTX1NZU19EQVRBX1hTTUdSX0RBVEEodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKwl1OAl1bnVzZWQwMWY4MFsweDAxZjgwLTB4MDFmNjhdOworCisvKjB4MDFmODAqLwl1NjQJYXNpY19udHdrX2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX0NUUkxfUkVRX1RFU1RfTlRXSwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfQ1RSTF9QT1JUMF9SRVFfVEVTVF9QT1JUCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19BU0lDX05UV0tfQ1RSTF9QT1JUMV9SRVFfVEVTVF9QT1JUCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMWY4OCovCXU2NAlhc2ljX250d2tfY2ZnX3Nob3dfcG9ydF9pbmZvOworI2RlZmluZSBWWEdFX0hXX0FTSUNfTlRXS19DRkdfU0hPV19QT1JUX0lORk9fVlAobikJdnhnZV9tQklUKG4pCisvKjB4MDFmOTAqLwl1NjQJYXNpY19udHdrX2NmZ19wb3J0X251bTsKKyNkZWZpbmUgVlhHRV9IV19BU0lDX05UV0tfQ0ZHX1BPUlRfTlVNX1ZQKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAxZjk4Ki8JdTY0CXhtYWNfY2ZnX3BvcnRbM107CisjZGVmaW5lCVZYR0VfSFdfWE1BQ19DRkdfUE9SVF9YR01JSV9MT09QQkFDSwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0NGR19QT1JUX1hHTUlJX1JFVkVSU0VfTE9PUEJBQ0sJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19DRkdfUE9SVF9YR01JSV9UWF9CRUhBVgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19DRkdfUE9SVF9YR01JSV9SWF9CRUhBVgl2eGdlX21CSVQoMTUpCisvKjB4MDFmYjAqLwl1NjQJeG1hY19zdGF0aW9uX2FkZHJfcG9ydFsyXTsKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1NUQVRJT05fQUREUl9QT1JUX01BQ19BRERSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNDgpCisJdTgJdW51c2VkMDIwMjBbMHgwMjAyMC0weDAxZmMwXTsKKworLyoweDAyMDIwKi8JdTY0CWxhZ19jZmc7CisjZGVmaW5lCVZYR0VfSFdfTEFHX0NGR19FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUgVlhHRV9IV19MQUdfQ0ZHX01PREUodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyKQorI2RlZmluZQlWWEdFX0hXX0xBR19DRkdfVFhfRElTQ0FSRF9CRUhBVgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0NGR19SWF9ESVNDQVJEX0JFSEFWCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfQ0ZHX1BSRUZfSU5ESVZfUE9SVF9OVU0JdnhnZV9tQklUKDE5KQorLyoweDAyMDI4Ki8JdTY0CWxhZ19zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfTEFHX1NUQVRVU19YTENNX1dBSVRJTkdfVE9fRkFJTEJBQ0sJdnhnZV9tQklUKDMpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1NUQVRVU19YTENNX1RJTUVSX1ZBTF9DT0xEX0ZBSUxPVkVSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisvKjB4MDIwMzAqLwl1NjQJbGFnX2FjdGl2ZV9wYXNzaXZlX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUNUSVZFX1BBU1NJVkVfQ0ZHX0hPVF9TVEFOREJZCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0xBR19BQ1RJVkVfUEFTU0lWRV9DRkdfTEFDUF9ERUNJREVTCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0xBR19BQ1RJVkVfUEFTU0lWRV9DRkdfUFJFRl9BQ1RJVkVfUE9SVF9OVU0JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0xBR19BQ1RJVkVfUEFTU0lWRV9DRkdfQVVUT19GQUlMQkFDSwl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0FDVElWRV9QQVNTSVZFX0NGR19GQUlMQkFDS19FTgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0FDVElWRV9QQVNTSVZFX0NGR19DT0xEX0ZBSUxPVkVSX1RJTUVPVVQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDE2KQorCXU4CXVudXNlZDAyMDQwWzB4MDIwNDAtMHgwMjAzOF07CisKKy8qMHgwMjA0MCovCXU2NAlsYWdfbGFjcF9jZmc7CisjZGVmaW5lCVZYR0VfSFdfTEFHX0xBQ1BfQ0ZHX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0xBR19MQUNQX0NGR19MQUNQX0JFR0lOCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0xBR19MQUNQX0NGR19ESVNDQVJEX0xBQ1AJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0xBR19MQUNQX0NGR19MSUJFUkFMX0xFTl9DSEsJdnhnZV9tQklUKDE1KQorLyoweDAyMDQ4Ki8JdTY0CWxhZ190aW1lcl9jZmdfMTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfVElNRVJfQ0ZHXzFfRkFTVF9QRVIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUgVlhHRV9IV19MQUdfVElNRVJfQ0ZHXzFfU0xPV19QRVIodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1RJTUVSX0NGR18xX1NIT1JUX1RJTUVPVVQodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1RJTUVSX0NGR18xX0xPTkdfVElNRU9VVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwMjA1MCovCXU2NAlsYWdfdGltZXJfY2ZnXzI7CisjZGVmaW5lIFZYR0VfSFdfTEFHX1RJTUVSX0NGR18yX0NIVVJOX0RFVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZSBWWEdFX0hXX0xBR19USU1FUl9DRkdfMl9BR0dSX1dBSVQodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1RJTUVSX0NGR18yX1NIT1JUX1RJTUVSX1NDQUxFKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDE2KQorI2RlZmluZSBWWEdFX0hXX0xBR19USU1FUl9DRkdfMl9MT05HX1RJTUVSX1NDQUxFKHZhbCkgIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwMjA1OCovCXU2NAlsYWdfc3lzX2lkOworI2RlZmluZSBWWEdFX0hXX0xBR19TWVNfSURfQUREUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQ4KQorI2RlZmluZQlWWEdFX0hXX0xBR19TWVNfSURfVVNFX1BPUlRfQUREUgl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1NZU19JRF9BRERSX1NFTAl2eGdlX21CSVQoNTUpCisvKjB4MDIwNjAqLwl1NjQJbGFnX3N5c19jZmc7CisjZGVmaW5lIFZYR0VfSFdfTEFHX1NZU19DRkdfU1lTX1BSSSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorCXU4CXVudXNlZDAyMDcwWzB4MDIwNzAtMHgwMjA2OF07CisKKy8qMHgwMjA3MCovCXU2NAlsYWdfYWdncl9hZGRyX2NmZ1syXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfQUdHUl9BRERSX0NGR19BRERSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNDgpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0FHR1JfQUREUl9DRkdfVVNFX1BPUlRfQUREUgl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0FHR1JfQUREUl9DRkdfQUREUl9TRUwJdnhnZV9tQklUKDU1KQorLyoweDAyMDgwKi8JdTY0CWxhZ19hZ2dyX2lkX2NmZ1syXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfQUdHUl9JRF9DRkdfSUQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKy8qMHgwMjA5MCovCXU2NAlsYWdfYWdncl9hZG1pbl9rZXlbMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX0FHR1JfQURNSU5fS0VZX0tFWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorLyoweDAyMGEwKi8JdTY0CWxhZ19hZ2dyX2FsdF9hZG1pbl9rZXk7CisjZGVmaW5lIFZYR0VfSFdfTEFHX0FHR1JfQUxUX0FETUlOX0tFWV9LRVkodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUdHUl9BTFRfQURNSU5fS0VZX0FMVF9BR0dSCXZ4Z2VfbUJJVCgxOSkKKy8qMHgwMjBhOCovCXU2NAlsYWdfYWdncl9vcGVyX2tleVsyXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfQUdHUl9PUEVSX0tFWV9MQUdDX0tFWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorLyoweDAyMGI4Ki8JdTY0CWxhZ19hZ2dyX3BhcnRuZXJfc3lzX2lkWzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19BR0dSX1BBUlRORVJfU1lTX0lEX0xBR0NfQUREUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQ4KQorLyoweDAyMGM4Ki8JdTY0CWxhZ19hZ2dyX3BhcnRuZXJfaW5mb1syXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfQUdHUl9QQVJUTkVSX0lORk9fTEFHQ19TWVNfUFJJKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfTEFHX0FHR1JfUEFSVE5FUl9JTkZPX0xBR0NfT1BFUl9LRVkodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisvKjB4MDIwZDgqLwl1NjQJbGFnX2FnZ3Jfc3RhdGVbMl07CisjZGVmaW5lCVZYR0VfSFdfTEFHX0FHR1JfU1RBVEVfTEFHQ19UWAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfQUdHUl9TVEFURV9MQUdDX1JYCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0xBR19BR0dSX1NUQVRFX0xBR0NfUkVBRFkJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0xBR19BR0dSX1NUQVRFX0xBR0NfSU5ESVZJRFVBTAl2eGdlX21CSVQoMTUpCisJdTgJdW51c2VkMDIwZjBbMHgwMjBmMC0weDAyMGU4XTsKKworLyoweDAyMGYwKi8JdTY0CWxhZ19wb3J0X2NmZ1syXTsKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9DRkdfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQ0ZHX0RJU0NBUkRfU0xPV19QUk9UTwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9DRkdfSE9TVF9DSE9TRU5fQUdHUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQ0ZHX0RJU0NBUkRfVU5LTk9XTl9TTE9XX1BST1RPCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMjEwMCovCXU2NAlsYWdfcG9ydF9hY3Rvcl9hZG1pbl9jZmdbMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfQURNSU5fQ0ZHX1BPUlRfTlVNKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfQURNSU5fQ0ZHX1BPUlRfUFJJKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX0FDVE9SX0FETUlOX0NGR19LRVlfMTBHKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDE2KQorI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX0FDVE9SX0FETUlOX0NGR19LRVlfMUcodmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDIxMTAqLwl1NjQJbGFnX3BvcnRfYWN0b3JfYWRtaW5fc3RhdGVbMl07CisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfQURNSU5fU1RBVEVfTEFDUF9BQ1RJVklUWQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9BRE1JTl9TVEFURV9MQUNQX1RJTUVPVVQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfQURNSU5fU1RBVEVfQUdHUkVHQVRJT04JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX0FETUlOX1NUQVRFX1NZTkNIUk9OSVpBVElPTgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfQURNSU5fU1RBVEVfQ09MTEVDVElORwl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfQURNSU5fU1RBVEVfRElTVFJJQlVUSU5HCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9BRE1JTl9TVEFURV9ERUZBVUxURUQJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX0FETUlOX1NUQVRFX0VYUElSRUQJdnhnZV9tQklUKDMxKQorLyoweDAyMTIwKi8JdTY0CWxhZ19wb3J0X3BhcnRuZXJfYWRtaW5fc3lzX2lkWzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fU1lTX0lEX0FERFIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0OCkKKy8qMHgwMjEzMCovCXU2NAlsYWdfcG9ydF9wYXJ0bmVyX2FkbWluX2NmZ1syXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX0NGR19TWVNfUFJJKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9DRkdfS0VZKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fQ0ZHX1BPUlRfTlVNKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX0NGR19QT1JUX1BSSSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDIxNDAqLwl1NjQJbGFnX3BvcnRfcGFydG5lcl9hZG1pbl9zdGF0ZVsyXTsKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX1NUQVRFX0xBQ1BfQUNUSVZJVFkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9TVEFURV9MQUNQX1RJTUVPVVQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9TVEFURV9BR0dSRUdBVElPTgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9TVEFURV9TWU5DSFJPTklaQVRJT04JdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fU1RBVEVfQ09MTEVDVElORwl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9BRE1JTl9TVEFURV9ESVNUUklCVVRJTkcJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfQURNSU5fU1RBVEVfREVGQVVMVEVECXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX0FETUlOX1NUQVRFX0VYUElSRUQJdnhnZV9tQklUKDMxKQorLyoweDAyMTUwKi8JdTY0CWxhZ19wb3J0X3RvX2FnZ3JbMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfVE9fQUdHUl9MQUdDX0FHR1JfSUQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9UT19BR0dSX0xBR0NfQUdHUl9WTERfSUQJdnhnZV9tQklUKDE5KQorLyoweDAyMTYwKi8JdTY0CWxhZ19wb3J0X2FjdG9yX29wZXJfa2V5WzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX0FDVE9SX09QRVJfS0VZX0xBR0NfS0VZKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisvKjB4MDIxNzAqLwl1NjQJbGFnX3BvcnRfYWN0b3Jfb3Blcl9zdGF0ZVsyXTsKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9PUEVSX1NUQVRFX0xBR0NfTEFDUF9BQ1RJVklUWQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9BQ1RPUl9PUEVSX1NUQVRFX0xBR0NfTEFDUF9USU1FT1VUCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX09QRVJfU1RBVEVfTEFHQ19BR0dSRUdBVElPTgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfT1BFUl9TVEFURV9MQUdDX1NZTkNIUk9OSVpBVElPTgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfQUNUT1JfT1BFUl9TVEFURV9MQUdDX0NPTExFQ1RJTkcJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX09QRVJfU1RBVEVfTEFHQ19ESVNUUklCVVRJTkcJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX09QRVJfU1RBVEVfTEFHQ19ERUZBVUxURUQJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX0FDVE9SX09QRVJfU1RBVEVfTEFHQ19FWFBJUkVECXZ4Z2VfbUJJVCgzMSkKKy8qMHgwMjE4MCovCXU2NAlsYWdfcG9ydF9wYXJ0bmVyX29wZXJfc3lzX2lkWzJdOworI2RlZmluZSBWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9TWVNfSURfTEFHQ19BRERSKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNDgpCisvKjB4MDIxOTAqLwl1NjQJbGFnX3BvcnRfcGFydG5lcl9vcGVyX2luZm9bMl07CisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX0lORk9fTEFHQ19TWVNfUFJJKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX0lORk9fTEFHQ19LRVkodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX0lORk9fTEFHQ19QT1JUX05VTSh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfSU5GT19MQUdDX1BPUlRfUFJJKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDAyMWEwKi8JdTY0CWxhZ19wb3J0X3BhcnRuZXJfb3Blcl9zdGF0ZVsyXTsKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfU1RBVEVfTEFHQ19MQUNQX0FDVElWSVRZCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9TVEFURV9MQUdDX0xBQ1BfVElNRU9VVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfU1RBVEVfTEFHQ19BR0dSRUdBVElPTgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX1NUQVRFX0xBR0NfU1lOQ0hST05JWkFUSU9OIFwKKwkJCQkJCQkJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9TVEFURV9MQUdDX0NPTExFQ1RJTkcJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1BBUlRORVJfT1BFUl9TVEFURV9MQUdDX0RJU1RSSUJVVElORwl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfUEFSVE5FUl9PUEVSX1NUQVRFX0xBR0NfREVGQVVMVEVECXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9QQVJUTkVSX09QRVJfU1RBVEVfTEFHQ19FWFBJUkVECXZ4Z2VfbUJJVCgzMSkKKy8qMHgwMjFiMCovCXU2NAlsYWdfcG9ydF9zdGF0ZV92YXJzWzJdOworI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19SRUFEWQl2eGdlX21CSVQoMykKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfU0VMRUNURUQodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyKQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19BR0dSX05VTQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX1BPUlRfTU9WRUQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19QT1JUX0VOQUJMRUQJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19QT1JUX0RJU0FCTEVECXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfTlRUCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfQUNUT1JfQ0hVUk4JdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19QQVJUTkVSX0NIVVJOCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfQUNUT1JfSU5GT19MRU5fTUlTTUFUQ0ggXAorCQkJCQkJCQl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX1BBUlRORVJfSU5GT19MRU5fTUlTTUFUQ0ggXAorCQkJCQkJCQl2eGdlX21CSVQoMzMpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX0NPTExfSU5GT19MRU5fTUlTTUFUQ0gJdnhnZV9tQklUKDM0KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19URVJNX0lORk9fTEVOX01JU01BVENICXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfUlhfRlNNX1NUQVRFKHZhbCkgdnhnZV92QklUKHZhbCwgMzcsIDMpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX01VWF9GU01fU1RBVEUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDEsIDMpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX01VWF9SRUFTT04odmFsKSB2eGdlX3ZCSVQodmFsLCA0NCwgNCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfQUNUT1JfQ0hVUk5fU1RBVEUJdnhnZV9tQklUKDU0KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1NUQVRFX1ZBUlNfTEFHQ19QQVJUTkVSX0NIVVJOX1NUQVRFCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19MQUdfUE9SVF9TVEFURV9WQVJTX0xBR0NfQUNUT1JfQ0hVUk5fQ09VTlQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTYsIDQpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfU1RBVEVfVkFSU19MQUdDX1BBUlRORVJfQ0hVUk5fQ09VTlQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNjAsIDQpCisvKjB4MDIxYzAqLwl1NjQJbGFnX3BvcnRfdGltZXJfY250clsyXTsKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9USU1FUl9DTlRSX0xBR0NfQ1VSUkVOVF9XSElMRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfVElNRVJfQ05UUl9MQUdDX1BFUklPRElDX1dISUxFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1BPUlRfVElNRVJfQ05UUl9MQUdDX1dBSVRfV0hJTEUodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgOCkKKyNkZWZpbmUgVlhHRV9IV19MQUdfUE9SVF9USU1FUl9DTlRSX0xBR0NfVFhfTEFDUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI0LCA4KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1RJTUVSX0NOVFJfTEFHQ19BQ1RPUl9TWU5DX1RSQU5TSVRJT05fQ09VTlQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDgpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfVElNRVJfQ05UUl9MQUdDX1BBUlRORVJfU1lOQ19UUkFOU0lUSU9OX0NPVU5UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQwLCA4KQorI2RlZmluZQlWWEdFX0hXX0xBR19QT1JUX1RJTUVSX0NOVFJfTEFHQ19BQ1RPUl9DSEFOR0VfQ09VTlQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDgsIDgpCisjZGVmaW5lCVZYR0VfSFdfTEFHX1BPUlRfVElNRVJfQ05UUl9MQUdDX1BBUlRORVJfQ0hBTkdFX0NPVU5UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU2LCA4KQorCXU4CXVudXNlZDAyMjA4WzB4MDI3MDAtMHgwMjFkMF07CisKKy8qMHgwMjcwMCovCXU2NAlydGRtYV9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1JURE1BX0lOVF9TVEFUVVNfUERBX0FMQVJNX1BEQV9JTlQJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfUlRETUFfSU5UX1NUQVRVU19QQ0NfRVJST1JfUENDX0lOVAl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19SVERNQV9JTlRfU1RBVFVTX0xTT19FUlJPUl9MU09fSU5UCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX1JURE1BX0lOVF9TVEFUVVNfU01fRVJST1JfU01fSU5UCXZ4Z2VfbUJJVCg1KQorLyoweDAyNzA4Ki8JdTY0CXJ0ZG1hX2ludF9tYXNrOworLyoweDAyNzEwKi8JdTY0CXBkYV9hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfUERBX0FMQVJNX1JFR19QREFfSFNDX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1BEQV9BTEFSTV9SRUdfUERBX1NNX0VSUgl2eGdlX21CSVQoMSkKKy8qMHgwMjcxOCovCXU2NAlwZGFfYWxhcm1fbWFzazsKKy8qMHgwMjcyMCovCXU2NAlwZGFfYWxhcm1fYWxhcm07CisvKjB4MDI3MjgqLwl1NjQJcGNjX2Vycm9yX3JlZzsKKyNkZWZpbmUgVlhHRV9IV19QQ0NfRVJST1JfUkVHX1BDQ19QQ0NfRlJNX0JVRl9TQkUobikJdnhnZV9tQklUKG4pCisjZGVmaW5lIFZYR0VfSFdfUENDX0VSUk9SX1JFR19QQ0NfUENDX1RYRE9fU0JFKG4pCXZ4Z2VfbUJJVChuKQorI2RlZmluZSBWWEdFX0hXX1BDQ19FUlJPUl9SRUdfUENDX1BDQ19GUk1fQlVGX0RCRShuKQl2eGdlX21CSVQobikKKyNkZWZpbmUgVlhHRV9IV19QQ0NfRVJST1JfUkVHX1BDQ19QQ0NfVFhET19EQkUobikJdnhnZV9tQklUKG4pCisjZGVmaW5lIFZYR0VfSFdfUENDX0VSUk9SX1JFR19QQ0NfUENDX0ZTTV9FUlJfQUxBUk0obikJdnhnZV9tQklUKG4pCisjZGVmaW5lIFZYR0VfSFdfUENDX0VSUk9SX1JFR19QQ0NfUENDX1NFUlIobikJdnhnZV9tQklUKG4pCisvKjB4MDI3MzAqLwl1NjQJcGNjX2Vycm9yX21hc2s7CisvKjB4MDI3MzgqLwl1NjQJcGNjX2Vycm9yX2FsYXJtOworLyoweDAyNzQwKi8JdTY0CWxzb19lcnJvcl9yZWc7CisjZGVmaW5lIFZYR0VfSFdfTFNPX0VSUk9SX1JFR19QQ0NfTFNPX0FCT1JUKG4pCXZ4Z2VfbUJJVChuKQorI2RlZmluZSBWWEdFX0hXX0xTT19FUlJPUl9SRUdfUENDX0xTT19GU01fRVJSX0FMQVJNKG4pCXZ4Z2VfbUJJVChuKQorLyoweDAyNzQ4Ki8JdTY0CWxzb19lcnJvcl9tYXNrOworLyoweDAyNzUwKi8JdTY0CWxzb19lcnJvcl9hbGFybTsKKy8qMHgwMjc1OCovCXU2NAlzbV9lcnJvcl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfU01fRVJST1JfUkVHX1NNX0ZTTV9FUlJfQUxBUk0JdnhnZV9tQklUKDE1KQorLyoweDAyNzYwKi8JdTY0CXNtX2Vycm9yX21hc2s7CisvKjB4MDI3NjgqLwl1NjQJc21fZXJyb3JfYWxhcm07CisKKwl1OAl1bnVzZWQwMjdhOFsweDAyN2E4LTB4MDI3NzBdOworCisvKjB4MDI3YTgqLwl1NjQJdHhkX293bmVyc2hpcF9jdHJsOworI2RlZmluZQlWWEdFX0hXX1RYRF9PV05FUlNISVBfQ1RSTF9LRUVQX09XTkVSU0hJUAl2eGdlX21CSVQoNykKKy8qMHgwMjdiMCovCXU2NAlwY2NfY2ZnOworI2RlZmluZSBWWEdFX0hXX1BDQ19DRkdfUENDX0VOQUJMRShuKQl2eGdlX21CSVQobikKKyNkZWZpbmUgVlhHRV9IV19QQ0NfQ0ZHX1BDQ19FQ0NfRU5BQkxFX04obikJdnhnZV9tQklUKG4pCisvKjB4MDI3YjgqLwl1NjQJcGNjX2NvbnRyb2w7CisjZGVmaW5lIFZYR0VfSFdfUENDX0NPTlRST0xfRkVfRU5BQkxFKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKKyNkZWZpbmUJVlhHRV9IV19QQ0NfQ09OVFJPTF9FQVJMWV9BU1NJR05fRU4JdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1BDQ19DT05UUk9MX1VOQkxPQ0tfREJfRVJSCXZ4Z2VfbUJJVCgzMSkKKy8qMHgwMjdjMCovCXU2NAlwZGFfc3RhdHVzMTsKKyNkZWZpbmUgVlhHRV9IV19QREFfU1RBVFVTMV9QREFfV1JBUF8wX0NUUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQsIDQpCisjZGVmaW5lIFZYR0VfSFdfUERBX1NUQVRVUzFfUERBX1dSQVBfMV9DVFIodmFsKSB2eGdlX3ZCSVQodmFsLCAxMiwgNCkKKyNkZWZpbmUgVlhHRV9IV19QREFfU1RBVFVTMV9QREFfV1JBUF8yX0NUUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIwLCA0KQorI2RlZmluZSBWWEdFX0hXX1BEQV9TVEFUVVMxX1BEQV9XUkFQXzNfQ1RSKHZhbCkgdnhnZV92QklUKHZhbCwgMjgsIDQpCisjZGVmaW5lIFZYR0VfSFdfUERBX1NUQVRVUzFfUERBX1dSQVBfNF9DVFIodmFsKSB2eGdlX3ZCSVQodmFsLCAzNiwgNCkKKyNkZWZpbmUgVlhHRV9IV19QREFfU1RBVFVTMV9QREFfV1JBUF81X0NUUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ0LCA0KQorI2RlZmluZSBWWEdFX0hXX1BEQV9TVEFUVVMxX1BEQV9XUkFQXzZfQ1RSKHZhbCkgdnhnZV92QklUKHZhbCwgNTIsIDQpCisjZGVmaW5lIFZYR0VfSFdfUERBX1NUQVRVUzFfUERBX1dSQVBfN19DVFIodmFsKSB2eGdlX3ZCSVQodmFsLCA2MCwgNCkKKy8qMHgwMjdjOCovCXU2NAlydGRtYV9id190aW1lcjsKKyNkZWZpbmUgVlhHRV9IV19SVERNQV9CV19USU1FUl9USU1FUl9DVFJMKHZhbCkgdnhnZV92QklUKHZhbCwgMTIsIDQpCisKKwl1OAl1bnVzZWQwMjkwMFsweDAyOTAwLTB4MDI3ZDBdOworLyoweDAyOTAwKi8JdTY0CWczY21jdF9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX0czQ01DVF9JTlRfU1RBVFVTX0VSUl9HM0lGX0lOVAl2eGdlX21CSVQoMCkKKy8qMHgwMjkwOCovCXU2NAlnM2NtY3RfaW50X21hc2s7CisvKjB4MDI5MTAqLwl1NjQJZzNjbWN0X2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfRzNDTUNUX0VSUl9SRUdfRzNJRl9TTV9FUlIJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfRzNDTUNUX0VSUl9SRUdfRzNJRl9HRERSM19ERUNDCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX0czQ01DVF9FUlJfUkVHX0czSUZfR0REUjNfVV9ERUNDCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX0czQ01DVF9FUlJfUkVHX0czSUZfQ1RSTF9GSUZPX0RFQ0MJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfRzNDTUNUX0VSUl9SRUdfRzNJRl9HRERSM19TRUNDCXZ4Z2VfbUJJVCgyOSkKKyNkZWZpbmUJVlhHRV9IV19HM0NNQ1RfRVJSX1JFR19HM0lGX0dERFIzX1VfU0VDQwl2eGdlX21CSVQoMzApCisjZGVmaW5lCVZYR0VfSFdfRzNDTUNUX0VSUl9SRUdfRzNJRl9DVFJMX0ZJRk9fU0VDQwl2eGdlX21CSVQoMzEpCisvKjB4MDI5MTgqLwl1NjQJZzNjbWN0X2Vycl9tYXNrOworLyoweDAyOTIwKi8JdTY0CWczY21jdF9lcnJfYWxhcm07CisJdTgJdW51c2VkMDMwMDBbMHgwMzAwMC0weDAyOTI4XTsKKworLyoweDAzMDAwKi8JdTY0CW1jX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfTUNfSU5UX1NUQVRVU19NQ19FUlJfTUNfSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01DX0lOVF9TVEFUVVNfR1JPQ1JDX0FMQVJNX1JPQ1JDX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NQ19JTlRfU1RBVFVTX0ZBVV9HRU5fRVJSX0ZBVV9HRU5fSU5UCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19NQ19JTlRfU1RBVFVTX0ZBVV9FQ0NfRVJSX0ZBVV9FQ0NfSU5UCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMzAwOCovCXU2NAltY19pbnRfbWFzazsKKy8qMHgwMzAxMCovCXU2NAltY19lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX01DX0VSUl9SRUdfTUNfWEZNRF9NRU1fRUNDX1NHX0VSUl9BCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX01DX0VSUl9SRUdfTUNfWEZNRF9NRU1fRUNDX1NHX0VSUl9CCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX01DX0VSUl9SRUdfTUNfRzNJRl9SRF9GSUZPX0VDQ19TR19FUlIJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfTUNfRVJSX1JFR19NQ19NSVJJX0VDQ19TR19FUlJfMAl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19NQ19FUlJfUkVHX01DX01JUklfRUNDX1NHX0VSUl8xCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01DX0VSUl9SRUdfTUNfWEZNRF9NRU1fRUNDX0RCX0VSUl9BCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19NQ19FUlJfUkVHX01DX1hGTURfTUVNX0VDQ19EQl9FUlJfQgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTUNfRVJSX1JFR19NQ19HM0lGX1JEX0ZJRk9fRUNDX0RCX0VSUgl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfTUNfRVJSX1JFR19NQ19NSVJJX0VDQ19EQl9FUlJfMAl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfTUNfRVJSX1JFR19NQ19NSVJJX0VDQ19EQl9FUlJfMQl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfTUNfRVJSX1JFR19NQ19TTV9FUlIJdnhnZV9tQklUKDE1KQorLyoweDAzMDE4Ki8JdTY0CW1jX2Vycl9tYXNrOworLyoweDAzMDIwKi8JdTY0CW1jX2Vycl9hbGFybTsKKy8qMHgwMzAyOCovCXU2NAlncm9jcmNfYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX0dST0NSQ19BTEFSTV9SRUdfWEZNRF9XUl9GSUZPX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19HUk9DUkNfQUxBUk1fUkVHX1dERTJNU1JfUkRfRklGT19FUlIJdnhnZV9tQklUKDcpCisvKjB4MDMwMzAqLwl1NjQJZ3JvY3JjX2FsYXJtX21hc2s7CisvKjB4MDMwMzgqLwl1NjQJZ3JvY3JjX2FsYXJtX2FsYXJtOworCXU4CXVudXNlZDAzMTAwWzB4MDMxMDAtMHgwMzA0MF07CisKKy8qMHgwMzEwMCovCXU2NAlyeF90aHJlc2hfY2ZnX3JlcGw7CisjZGVmaW5lIFZYR0VfSFdfUlhfVEhSRVNIX0NGR19SRVBMX1BBVVNFX0xPV19USFIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX1JYX1RIUkVTSF9DRkdfUkVQTF9QQVVTRV9ISUdIX1RIUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlhfVEhSRVNIX0NGR19SRVBMX1JFRF9USFJfMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCA4KQorI2RlZmluZSBWWEdFX0hXX1JYX1RIUkVTSF9DRkdfUkVQTF9SRURfVEhSXzEodmFsKSB2eGdlX3ZCSVQodmFsLCAyNCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1JFUExfUkVEX1RIUl8yKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlhfVEhSRVNIX0NGR19SRVBMX1JFRF9USFJfMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQwLCA4KQorI2RlZmluZQlWWEdFX0hXX1JYX1RIUkVTSF9DRkdfUkVQTF9HTE9CQUxfV09MX0VOCXZ4Z2VfbUJJVCg2MikKKyNkZWZpbmUJVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1JFUExfRVhBQ1RfVlBfTUFUQ0hfUkVRCXZ4Z2VfbUJJVCg2MykKKwl1OAl1bnVzZWQwMzNiOFsweDAzM2I4LTB4MDMxMDhdOworCisvKjB4MDMzYjgqLwl1NjQJZmJtY19lY2NfY2ZnOworI2RlZmluZSBWWEdFX0hXX0ZCTUNfRUNDX0NGR19FTkFCTEUodmFsKSB2eGdlX3ZCSVQodmFsLCAzLCA1KQorCXU4CXVudXNlZDAzNDAwWzB4MDM0MDAtMHgwMzNjMF07CisKKy8qMHgwMzQwMCovCXU2NAlwY2lwaWZfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19QQ0lQSUZfSU5UX1NUQVRVU19EQkVDQ19FUlJfREJFQ0NfRVJSX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19QQ0lQSUZfSU5UX1NUQVRVU19TQkVDQ19FUlJfU0JFQ0NfRVJSX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19QQ0lQSUZfSU5UX1NUQVRVU19HRU5FUkFMX0VSUl9HRU5FUkFMX0VSUl9JTlQJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1BDSVBJRl9JTlRfU1RBVFVTX1NSUENJTV9NU0dfU1JQQ0lNX01TR19JTlQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1BDSVBJRl9JTlRfU1RBVFVTX01SUENJTV9TUEFSRV9SMV9NUlBDSU1fU1BBUkVfUjFfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDE5KQorLyoweDAzNDA4Ki8JdTY0CXBjaXBpZl9pbnRfbWFzazsKKy8qMHgwMzQxMCovCXU2NAlkYmVjY19lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0RCRUNDX0VSUl9SRUdfUENJX1JFVFJZX0JVRl9EQl9FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfREJFQ0NfRVJSX1JFR19QQ0lfUkVUUllfU09UX0RCX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19EQkVDQ19FUlJfUkVHX1BDSV9QX0hEUl9EQl9FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0RCRUNDX0VSUl9SRUdfUENJX1BfREFUQV9EQl9FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0RCRUNDX0VSUl9SRUdfUENJX05QX0hEUl9EQl9FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0RCRUNDX0VSUl9SRUdfUENJX05QX0RBVEFfREJfRVJSCXZ4Z2VfbUJJVCgyMykKKy8qMHgwMzQxOCovCXU2NAlkYmVjY19lcnJfbWFzazsKKy8qMHgwMzQyMCovCXU2NAlkYmVjY19lcnJfYWxhcm07CisvKjB4MDM0MjgqLwl1NjQJc2JlY2NfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19TQkVDQ19FUlJfUkVHX1BDSV9SRVRSWV9CVUZfU0dfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1NCRUNDX0VSUl9SRUdfUENJX1JFVFJZX1NPVF9TR19FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfU0JFQ0NfRVJSX1JFR19QQ0lfUF9IRFJfU0dfRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19TQkVDQ19FUlJfUkVHX1BDSV9QX0RBVEFfU0dfRVJSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19TQkVDQ19FUlJfUkVHX1BDSV9OUF9IRFJfU0dfRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19TQkVDQ19FUlJfUkVHX1BDSV9OUF9EQVRBX1NHX0VSUgl2eGdlX21CSVQoMjMpCisvKjB4MDM0MzAqLwl1NjQJc2JlY2NfZXJyX21hc2s7CisvKjB4MDM0MzgqLwl1NjQJc2JlY2NfZXJyX2FsYXJtOworLyoweDAzNDQwKi8JdTY0CWdlbmVyYWxfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUl9SRUdfUENJX0RST1BQRURfSUxMRUdBTF9DRkcJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJfUkVHX1BDSV9JTExFR0FMX01FTV9NQVBfUFJPRwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUl9SRUdfUENJX0xJTktfUlNUX0ZTTV9FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJSX1JFR19QQ0lfUlhfSUxMRUdBTF9UTFBfVlBMQU5FCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUl9SRUdfUENJX1RSQUlOSU5HX1JFU0VUX0RFVAl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJfUkVHX1BDSV9QQ0lfTElOS19ET1dOX0RFVAl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJfUkVHX1BDSV9SRVNFVF9BQ0tfRExMUAl2eGdlX21CSVQoMjcpCisvKjB4MDM0NDgqLwl1NjQJZ2VuZXJhbF9lcnJfbWFzazsKKy8qMHgwMzQ1MCovCXU2NAlnZW5lcmFsX2Vycl9hbGFybTsKKy8qMHgwMzQ1OCovCXU2NAlzcnBjaW1fbXNnX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FMF9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkUxX1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTJfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FM19STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkU0X1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTVfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FNl9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkU3X1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORThfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FOV9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkUxMF9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FMTFfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTEyX1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkUxM19STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1JFR19TV0lGX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FMTRfUk1TR19JTlQgXAorCQkJCQkJCQl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TR19SRUdfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORTE1X1JNU0dfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0dfUkVHX1NXSUZfU1JQQ0lNX1RPX01SUENJTV9WUExBTkUxNl9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxNikKKy8qMHgwMzQ2MCovCXU2NAlzcnBjaW1fbXNnX21hc2s7CisvKjB4MDM0NjgqLwl1NjQJc3JwY2ltX21zZ19hbGFybTsKKwl1OAl1bnVzZWQwMzYwMFsweDAzNjAwLTB4MDM0NzBdOworCisvKjB4MDM2MDAqLwl1NjQJZ2NtZzFfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19HQ01HMV9JTlRfU1RBVFVTX0dTU0NDX0VSUl9HU1NDQ19JTlQJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfR0NNRzFfSU5UX1NUQVRVU19HU1NDMF9FUlIwX0dTU0MwXzBfSU5UCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX0dDTUcxX0lOVF9TVEFUVVNfR1NTQzBfRVJSMV9HU1NDMF8xX0lOVAl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19HQ01HMV9JTlRfU1RBVFVTX0dTU0MxX0VSUjBfR1NTQzFfMF9JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzFfSU5UX1NUQVRVU19HU1NDMV9FUlIxX0dTU0MxXzFfSU5UCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX0dDTUcxX0lOVF9TVEFUVVNfR1NTQzJfRVJSMF9HU1NDMl8wX0lOVAl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19HQ01HMV9JTlRfU1RBVFVTX0dTU0MyX0VSUjFfR1NTQzJfMV9JTlQJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzFfSU5UX1NUQVRVU19VUU1fRVJSX1VRTV9JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzFfSU5UX1NUQVRVU19HUUNDX0VSUl9HUUNDX0lOVAl2eGdlX21CSVQoOCkKKy8qMHgwMzYwOCovCXU2NAlnY21nMV9pbnRfbWFzazsKKwl1OAl1bnVzZWQwM2EwMFsweDAzYTAwLTB4MDM2MTBdOworCisvKjB4MDNhMDAqLwl1NjQJcGNtZzFfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19QQ01HMV9JTlRfU1RBVFVTX1BTU0NDX0VSUl9QU1NDQ19JTlQJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfUENNRzFfSU5UX1NUQVRVU19QUUNDX0VSUl9QUUNDX0lOVAl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19QQ01HMV9JTlRfU1RBVFVTX1BRQ0NfQ1FNX0VSUl9QUUNDX0NRTV9JTlQJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfUENNRzFfSU5UX1NUQVRVU19QUUNDX1NRTV9FUlJfUFFDQ19TUU1fSU5UCXZ4Z2VfbUJJVCgzKQorLyoweDAzYTA4Ki8JdTY0CXBjbWcxX2ludF9tYXNrOworCXU4CXVudXNlZDA0MDAwWzB4MDQwMDAtMHgwM2ExMF07CisKKy8qMHgwNDAwMCovCXU2NAlvbmVfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19PTkVfSU5UX1NUQVRVU19SWFBFX0VSUl9SWFBFX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19PTkVfSU5UX1NUQVRVU19UWFBFX0JDQ19NRU1fU0dfRUNDX0VSUl9UWFBFX0JDQ19NRU1fU0dfRUNDX0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX09ORV9JTlRfU1RBVFVTX1RYUEVfQkNDX01FTV9EQl9FQ0NfRVJSX1RYUEVfQkNDX01FTV9EQl9FQ0NfSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfT05FX0lOVF9TVEFUVVNfVFhQRV9FUlJfVFhQRV9JTlQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX09ORV9JTlRfU1RBVFVTX0RMTV9FUlJfRExNX0lOVAl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfT05FX0lOVF9TVEFUVVNfUEVfRVJSX1BFX0lOVAl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfT05FX0lOVF9TVEFUVVNfUlBFX0VSUl9SUEVfSU5UCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19PTkVfSU5UX1NUQVRVU19SUEVfRlNNX0VSUl9SUEVfRlNNX0lOVAl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfT05FX0lOVF9TVEFUVVNfT0VTX0VSUl9PRVNfSU5UCXZ4Z2VfbUJJVCg1NSkKKy8qMHgwNDAwOCovCXU2NAlvbmVfaW50X21hc2s7CisJdTgJdW51c2VkMDQ4MThbMHgwNDgxOC0weDA0MDEwXTsKKworLyoweDA0ODE4Ki8JdTY0CW5vYV93Y3RfY3RybDsKKyNkZWZpbmUJVlhHRV9IV19OT0FfV0NUX0NUUkxfVlBfSU5UX05VTQl2eGdlX21CSVQoMCkKKy8qMHgwNDgyMCovCXU2NAlyY19jZmcyOworI2RlZmluZSBWWEdFX0hXX1JDX0NGRzJfQlVGRjFfU0laRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZSBWWEdFX0hXX1JDX0NGRzJfQlVGRjJfU0laRSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUgVlhHRV9IV19SQ19DRkcyX0JVRkYzX1NJWkUodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfUkNfQ0ZHMl9CVUZGNF9TSVpFKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDA0ODI4Ki8JdTY0CXJjX2NmZzM7CisjZGVmaW5lIFZYR0VfSFdfUkNfQ0ZHM19CVUZGNV9TSVpFKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisvKjB4MDQ4MzAqLwl1NjQJcnhfbXVsdGlfY2FzdF9jdHJsMTsKKyNkZWZpbmUJVlhHRV9IV19SWF9NVUxUSV9DQVNUX0NUUkwxX0VOQUJMRQl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19SWF9NVUxUSV9DQVNUX0NUUkwxX0RFTEFZX0NPVU5UKHZhbCkgdnhnZV92QklUKHZhbCwgMTEsIDUpCisvKjB4MDQ4MzgqLwl1NjQJcnhkbV9kYmdfcmQ7CisjZGVmaW5lIFZYR0VfSFdfUlhETV9EQkdfUkRfQUREUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDEyKQorI2RlZmluZQlWWEdFX0hXX1JYRE1fREJHX1JEX0VOQUJMRQl2eGdlX21CSVQoMzEpCisvKjB4MDQ4NDAqLwl1NjQJcnhkbV9kYmdfcmRfZGF0YTsKKyNkZWZpbmUgVlhHRV9IV19SWERNX0RCR19SRF9EQVRBX1JNQ19SWERNX0RCR19SRF9EQVRBKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDQ4NDgqLwl1NjQJcnFhX3RvcF9wcnR5X2Zvcl92aFsxN107CisjZGVmaW5lIFZYR0VfSFdfUlFBX1RPUF9QUlRZX0ZPUl9WSF9SUUFfVE9QX1BSVFlfRk9SX1ZIKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorCXU4CXVudXNlZDA0OTAwWzB4MDQ5MDAtMHgwNDhkMF07CisKKy8qMHgwNDkwMCovCXU2NAl0aW1fc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1RJTV9TVEFUVVNfVElNX1JFU0VUX0lOX1BST0dSRVNTCXZ4Z2VfbUJJVCgwKQorLyoweDA0OTA4Ki8JdTY0CXRpbV9lY2NfZW5hYmxlOworI2RlZmluZQlWWEdFX0hXX1RJTV9FQ0NfRU5BQkxFX1ZCTFNfTgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19USU1fRUNDX0VOQUJMRV9CTUFQX04JdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1RJTV9FQ0NfRU5BQkxFX0JNQVBfTVNHX04JdnhnZV9tQklUKDIzKQorLyoweDA0OTEwKi8JdTY0CXRpbV9icF9jdHJsOworI2RlZmluZQlWWEdFX0hXX1RJTV9CUF9DVFJMX1JEX1hPTgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19USU1fQlBfQ1RSTF9XUl9YT04JdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1RJTV9CUF9DVFJMX1JPQ1JDX0JZUAl2eGdlX21CSVQoMjMpCisvKjB4MDQ5MTgqLwl1NjQJdGltX3Jlc291cmNlX2Fzc2lnbm1lbnRfdmhbMTddOworI2RlZmluZSBWWEdFX0hXX1RJTV9SRVNPVVJDRV9BU1NJR05NRU5UX1ZIX0JNQVBfUk9PVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorLyoweDA0OWEwKi8JdTY0CXRpbV9ibWFwX21hcHBpbmdfdnBfZXJyWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19USU1fQk1BUF9NQVBQSU5HX1ZQX0VSUl9USU1fREVTVF9WUEFUSCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisJdTgJdW51c2VkMDRiMDBbMHgwNGIwMC0weDA0YTI4XTsKKworLyoweDA0YjAwKi8JdTY0CWdjbWcyX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfR0NNRzJfSU5UX1NUQVRVU19HWFRNQ19FUlJfR1hUTUNfSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0dDTUcyX0lOVF9TVEFUVVNfR0NQX0VSUl9HQ1BfSU5UCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19HQ01HMl9JTlRfU1RBVFVTX0NNQ19FUlJfQ01DX0lOVAl2eGdlX21CSVQoMjMpCisvKjB4MDRiMDgqLwl1NjQJZ2NtZzJfaW50X21hc2s7CisvKjB4MDRiMTAqLwl1NjQJZ3h0bWNfZXJyX3JlZzsKKyNkZWZpbmUgVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX01FTV9EQl9FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA0KQorI2RlZmluZSBWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfTUVNX1NHX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQsIDQpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0NNQ19SRF9EQVRBX0RCX0VSUgl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfUkVRX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19SRVFfREFUQV9GSUZPX0VSUgl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX1dSX1JTUF9GSUZPX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX1JEX1JTUF9GSUZPX0VSUgl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0NNSV9XUlBfRklGT19FUlIJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19DTUlfV1JQX0VSUgl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0NNSV9SUlBfRklGT19FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19DTUlfUlJQX0VSUgl2eGdlX21CSVQoMTYpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0NNSV9EQVRBX1NNX0VSUgl2eGdlX21CSVQoMTcpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0NNSV9DTUMwX0lGX0VSUgl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9DTUlfQVJCX1NNX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9DTUlfQ0ZDX1NNX0VSUgl2eGdlX21CSVQoMjApCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9DTUlfREZFVENIX0NSRURJVF9PVkVSRkxPVyBcCisJCQkJCQkJdnhnZV9tQklUKDIxKQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfQ01JX0RGRVRDSF9DUkVESVRfVU5ERVJGTE9XIFwKKwkJCQkJCQl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9DTUlfREZFVENIX1NNX0VSUgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9DTUlfUkNUUkxfQ1JFRElUX09WRVJGTE9XIFwKKwkJCQkJCQl2eGdlX21CSVQoMjQpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9DTUlfUkNUUkxfQ1JFRElUX1VOREVSRkxPVyBcCisJCQkJCQkJdnhnZV9tQklUKDI1KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfQ01JX1JDVFJMX1NNX0VSUgl2eGdlX21CSVQoMjYpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9DTUlfV0NPTVBMX1NNX0VSUgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0JEVF9DTUlfV0NPTVBMX1RBR19FUlIJdnhnZV9tQklUKDI4KQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19CRFRfQ01JX1dSRVFfU01fRVJSCXZ4Z2VfbUJJVCgyOSkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQkRUX0NNSV9XUkVRX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgzMCkKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfQ1AyQkRUX1JGSUZPX1BPUF9FUlIJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX0dYVE1DX0VSUl9SRUdfWFRNQ19YVE1DX0JEVF9DTUlfT1BfRVJSCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19HWFRNQ19FUlJfUkVHX1hUTUNfWFRNQ19CRFRfREZFVENIX09QX0VSUgl2eGdlX21CSVQoMzMpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX1hUTUNfQkRUX0RGSUZPX0VSUgl2eGdlX21CSVQoMzQpCisjZGVmaW5lCVZYR0VfSFdfR1hUTUNfRVJSX1JFR19YVE1DX0NNSV9BUkJfU01fRVJSCXZ4Z2VfbUJJVCgzNSkKKy8qMHgwNGIxOCovCXU2NAlneHRtY19lcnJfbWFzazsKKy8qMHgwNGIyMCovCXU2NAlneHRtY19lcnJfYWxhcm07CisvKjB4MDRiMjgqLwl1NjQJY21jX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfQ01DX0VSUl9SRUdfQ01DX0NNQ19TTV9FUlIJdnhnZV9tQklUKDApCisvKjB4MDRiMzAqLwl1NjQJY21jX2Vycl9tYXNrOworLyoweDA0YjM4Ki8JdTY0CWNtY19lcnJfYWxhcm07CisvKjB4MDRiNDAqLwl1NjQJZ2NwX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfR0NQX0VSUl9SRUdfQ1BfSDJMMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX0dDUF9FUlJfUkVHX0NQX1NUQzJDUF9GSUZPX0VSUgl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19HQ1BfRVJSX1JFR19DUF9TVEUyQ1BfRklGT19FUlIJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfR0NQX0VSUl9SRUdfQ1BfVFRFMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgzKQorLyoweDA0YjQ4Ki8JdTY0CWdjcF9lcnJfbWFzazsKKy8qMHgwNGI1MCovCXU2NAlnY3BfZXJyX2FsYXJtOworCXU4CXVudXNlZDA0ZjAwWzB4MDRmMDAtMHgwNGI1OF07CisKKy8qMHgwNGYwMCovCXU2NAlwY21nMl9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1BDTUcyX0lOVF9TVEFUVVNfUFhUTUNfRVJSX1BYVE1DX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19QQ01HMl9JTlRfU1RBVFVTX0NQX0VYQ19DUF9YVF9FWENfSU5UCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19QQ01HMl9JTlRfU1RBVFVTX0NQX0VSUl9DUF9FUlJfSU5UCXZ4Z2VfbUJJVCgyMykKKy8qMHgwNGYwOCovCXU2NAlwY21nMl9pbnRfbWFzazsKKy8qMHgwNGYxMCovCXU2NAlweHRtY19lcnJfcmVnOworI2RlZmluZSBWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19YVF9QSUZfU1JBTV9EQl9FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAyKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NUFRfUkVRX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NUFRfUFJTUF9GSUZPX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVBUX1dSU1BfRklGT19FUlIJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VQVF9SRVFfRklGT19FUlIJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VQVF9QUlNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VUFRfV1JTUF9GSUZPX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1BUX1JFUV9GSUZPX0VSUgl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1BUX1BSU1BfRklGT19FUlIJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NQVF9XUlNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfUkVRX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfUkVRX0RBVEFfRklGT19FUlIJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19XUl9SU1BfRklGT19FUlIJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19SRF9SU1BfRklGT19FUlIJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NUFRfUkVRX1NIQURPV19FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NUFRfUlNQX1NIQURPV19FUlIJdnhnZV9tQklUKDE2KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VUFRfUkVRX1NIQURPV19FUlIJdnhnZV9tQklUKDE3KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VUFRfUlNQX1NIQURPV19FUlIJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DUFRfUkVRX1NIQURPV19FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DUFRfUlNQX1NIQURPV19FUlIJdnhnZV9tQklUKDIwKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19YSUxfU0hBRE9XX0VSUgl2eGdlX21CSVQoMjEpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0FSQl9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfUkFNX1NIQURPV19FUlIJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DTVdfU0hBRE9XX0VSUgl2eGdlX21CSVQoMjQpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NNUl9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgyNSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVBUX1JFUV9GU01fRVJSCXZ4Z2VfbUJJVCgyNikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfTVBUX1JTUF9GU01fRVJSCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVBUX1JFUV9GU01fRVJSCXZ4Z2VfbUJJVCgyOCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVBUX1JTUF9GU01fRVJSCXZ4Z2VfbUJJVCgyOSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1BUX1JFUV9GU01fRVJSCXZ4Z2VfbUJJVCgzMCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1BUX1JTUF9GU01fRVJSCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfWElMX0ZTTV9FUlIJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19BUkJfRlNNX0VSUgl2eGdlX21CSVQoMzMpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NNV19GU01fRVJSCXZ4Z2VfbUJJVCgzNCkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ01SX0ZTTV9FUlIJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NWFBfUkRfUFJPVF9FUlIJdnhnZV9tQklUKDM2KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VWFBfUkRfUFJPVF9FUlIJdnhnZV9tQklUKDM3KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DWFBfUkRfUFJPVF9FUlIJdnhnZV9tQklUKDM4KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NWFBfV1JfUFJPVF9FUlIJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VWFBfV1JfUFJPVF9FUlIJdnhnZV9tQklUKDQwKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DWFBfV1JfUFJPVF9FUlIJdnhnZV9tQklUKDQxKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NWFBfSU5WX0FERFJfRVJSCXZ4Z2VfbUJJVCg0MikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfVVhQX0lOVl9BRERSX0VSUgl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX0NYUF9JTlZfQUREUl9FUlIJdnhnZV9tQklUKDQ0KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NWFBfUkRfUFJPVF9JTkZPX0VSUgl2eGdlX21CSVQoNDUpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VYUF9SRF9QUk9UX0lORk9fRVJSCXZ4Z2VfbUJJVCg0NikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1hQX1JEX1BST1RfSU5GT19FUlIJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NWFBfV1JfUFJPVF9JTkZPX0VSUgl2eGdlX21CSVQoNDgpCisjZGVmaW5lCVZYR0VfSFdfUFhUTUNfRVJSX1JFR19YVE1DX1VYUF9XUl9QUk9UX0lORk9fRVJSCXZ4Z2VfbUJJVCg0OSkKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1hQX1dSX1BST1RfSU5GT19FUlIJdnhnZV9tQklUKDUwKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19NWFBfSU5WX0FERFJfSU5GT19FUlIJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19VWFBfSU5WX0FERFJfSU5GT19FUlIJdnhnZV9tQklUKDUyKQorI2RlZmluZQlWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19DWFBfSU5WX0FERFJfSU5GT19FUlIJdnhnZV9tQklUKDUzKQorI2RlZmluZSBWWEdFX0hXX1BYVE1DX0VSUl9SRUdfWFRNQ19YVF9QSUZfU1JBTV9TR19FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCA1NCwgMikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1AyQkRUX0RGSUZPX1BVU0hfRVJSCXZ4Z2VfbUJJVCg1NikKKyNkZWZpbmUJVlhHRV9IV19QWFRNQ19FUlJfUkVHX1hUTUNfQ1AyQkRUX1JGSUZPX1BVU0hfRVJSCXZ4Z2VfbUJJVCg1NykKKy8qMHgwNGYxOCovCXU2NAlweHRtY19lcnJfbWFzazsKKy8qMHgwNGYyMCovCXU2NAlweHRtY19lcnJfYWxhcm07CisvKjB4MDRmMjgqLwl1NjQJY3BfZXJyX3JlZzsKKyNkZWZpbmUgVlhHRV9IV19DUF9FUlJfUkVHX0NQX0NQX0RDQUNIRV9TR19FUlIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1BfSUNBQ0hFX1NHX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDIpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUF9EVEFHX1NHX0VSUgl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUF9JVEFHX1NHX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUF9UUkFDRV9TR19FUlIJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfRE1BMkNQX1NHX0VSUgl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9NUDJDUF9TR19FUlIJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfUUNDMkNQX1NHX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lIFZYR0VfSFdfQ1BfRVJSX1JFR19DUF9TVEMyQ1BfU0dfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDIpCisjZGVmaW5lIFZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUF9EQ0FDSEVfREJfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgMjQsIDgpCisjZGVmaW5lIFZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUF9JQ0FDSEVfREJfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDIpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUF9EVEFHX0RCX0VSUgl2eGdlX21CSVQoMzQpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUF9JVEFHX0RCX0VSUgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUF9UUkFDRV9EQl9FUlIJdnhnZV9tQklUKDM2KQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfRE1BMkNQX0RCX0VSUgl2eGdlX21CSVQoMzcpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9NUDJDUF9EQl9FUlIJdnhnZV9tQklUKDM4KQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfUUNDMkNQX0RCX0VSUgl2eGdlX21CSVQoMzkpCisjZGVmaW5lIFZYR0VfSFdfQ1BfRVJSX1JFR19DUF9TVEMyQ1BfREJfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgNDAsIDIpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9IMkwyQ1BfRklGT19FUlIJdnhnZV9tQklUKDQ4KQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfU1RDMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg0OSkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX1NURTJDUF9GSUZPX0VSUgl2eGdlX21CSVQoNTApCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9UVEUyQ1BfRklGT19FUlIJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfU1dJRjJDUF9GSUZPX0VSUgl2eGdlX21CSVQoNTIpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUDJETUFfRklGT19FUlIJdnhnZV9tQklUKDUzKQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfREFNMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1NCkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX01QMkNQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX1FDQzJDUF9GSUZPX0VSUgl2eGdlX21CSVQoNTYpCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9ETUEyQ1BfRklGT19FUlIJdnhnZV9tQklUKDU3KQorI2RlZmluZQlWWEdFX0hXX0NQX0VSUl9SRUdfQ1BfQ1BfV0FLRV9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoNjApCisjZGVmaW5lCVZYR0VfSFdfQ1BfRVJSX1JFR19DUF9DUF9QTU9OX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCg2MSkKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX0RNQV9SRF9TSEFET1dfRVJSCXZ4Z2VfbUJJVCg2MikKKyNkZWZpbmUJVlhHRV9IV19DUF9FUlJfUkVHX0NQX1BJRlRfQ1JFRElUX0VSUgl2eGdlX21CSVQoNjMpCisvKjB4MDRmMzAqLwl1NjQJY3BfZXJyX21hc2s7CisvKjB4MDRmMzgqLwl1NjQJY3BfZXJyX2FsYXJtOworCXU4CXVudXNlZDA0ZmU4WzB4MDRmNTAtMHgwNGY0MF07CisKKy8qMHgwNGY1MCovCXU2NAljcF9leGNfcmVnOworI2RlZmluZQlWWEdFX0hXX0NQX0VYQ19SRUdfQ1BfQ1BfQ0FVU0VfSU5GT19JTlQJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX0NQX0VYQ19SRUdfQ1BfQ1BfQ0FVU0VfQ1JJVF9JTlQJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX0NQX0VYQ19SRUdfQ1BfQ1BfU0VSUgl2eGdlX21CSVQoNjMpCisvKjB4MDRmNTgqLwl1NjQJY3BfZXhjX21hc2s7CisvKjB4MDRmNjAqLwl1NjQJY3BfZXhjX2FsYXJtOworLyoweDA0ZjY4Ki8JdTY0CWNwX2V4Y19jYXVzZTsKKyNkZWZpbmUgVlhHRV9IV19DUF9FWENfQ0FVU0VfQ1BfQ1BfQ0FVU0UodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisJdTgJdW51c2VkMDUyMDBbMHgwNTIwMC0weDA0ZjcwXTsKKworLyoweDA1MjAwKi8JdTY0CW1zZ19pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX01TR19JTlRfU1RBVFVTX1RJTV9FUlJfVElNX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfSU5UX1NUQVRVU19NU0dfRVhDX01TR19YVF9FWENfSU5UCXZ4Z2VfbUJJVCg2MCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfSU5UX1NUQVRVU19NU0dfRVJSM19NU0dfRVJSM19JTlQJdnhnZV9tQklUKDYxKQorI2RlZmluZQlWWEdFX0hXX01TR19JTlRfU1RBVFVTX01TR19FUlIyX01TR19FUlIyX0lOVAl2eGdlX21CSVQoNjIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0lOVF9TVEFUVVNfTVNHX0VSUl9NU0dfRVJSX0lOVAl2eGdlX21CSVQoNjMpCisvKjB4MDUyMDgqLwl1NjQJbXNnX2ludF9tYXNrOworLyoweDA1MjEwKi8JdTY0CXRpbV9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9WQkxTX1NHX0VSUgl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fQk1BUF9QQV9TR19FUlIJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX0JNQVBfUEJfU0dfRVJSCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9CTUFQX01TR19TR19FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX1ZCTFNfREJfRVJSCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fQk1BUF9QQV9EQl9FUlIJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9CTUFQX1BCX0RCX0VSUgl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX0JNQVBfTVNHX0RCX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX0JNQVBfTUVNX0NOVFJMX1NNX0VSUgl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX0JNQVBfTVNHX01FTV9DTlRSTF9TTV9FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1RJTV9FUlJfUkVHX1RJTV9NUElGX1BDSVdSX0VSUgl2eGdlX21CSVQoMjApCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX1JPQ1JDX0JNQVBfVVBEVF9GSUZPX0VSUgl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfVElNX0VSUl9SRUdfVElNX0NSRUFURV9CTUFQTVNHX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19USU1fRVJSX1JFR19USU1fUk9DUkNJRl9NSVNNQVRDSAl2eGdlX21CSVQoNDYpCisjZGVmaW5lIFZYR0VfSFdfVElNX0VSUl9SRUdfVElNX0JNQVBfTUFQUElOR19WUF9FUlIobikJdnhnZV9tQklUKG4pCisvKjB4MDUyMTgqLwl1NjQJdGltX2Vycl9tYXNrOworLyoweDA1MjIwKi8JdTY0CXRpbV9lcnJfYWxhcm07CisvKjB4MDUyMjgqLwl1NjQJbXNnX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfVVBfVVhQX1dBS0VfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVBfTVhQX1dBS0VfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9ETVFfRE1BX1JFQURfQ01EX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9ETVFfRE1BX1JFU1BfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0RNUV9PV05fRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9QREFfQUNDX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01QX01YUF9QTU9OX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX1VQX1VYUF9QTU9OX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX1VQX1VYUF9EVEFHX1NHX0VSUgl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19VUF9VWFBfSVRBR19TR19FUlIJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01QX01YUF9EVEFHX1NHX0VSUgl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVBfTVhQX0lUQUdfU0dfRVJSCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19VUF9VWFBfVFJBQ0VfU0dfRVJSCXZ4Z2VfbUJJVCgxNikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NUF9NWFBfVFJBQ0VfU0dfRVJSCXZ4Z2VfbUJJVCgxNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0NNRzJNU0dfU0dfRVJSCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1RYUEUyTVNHX1NHX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9SWFBFMk1TR19TR19FUlIJdnhnZV9tQklUKDIwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfUlBFMk1TR19TR19FUlIJdnhnZV9tQklUKDIxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfVU1RX1NHX0VSUgl2eGdlX21CSVQoMjYpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9CV1JfUEZfU0dfRVJSCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0RNUV9FQ0NfU0dfRVJSCXZ4Z2VfbUJJVCgyOSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0RNQV9SRVNQX0VDQ19TR19FUlIJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19YRk1EUVJZX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCgzMykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfRlJNUVJZX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCgzNCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1VNUV9XUklURV9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9VTVFfQldSX1BGX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDM2KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfUkVHX1JFU1BfRklGT19FUlIJdnhnZV9tQklUKDM4KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX1VQX1VYUF9EVEFHX0RCX0VSUgl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfVVBfVVhQX0lUQUdfREJfRVJSCXZ4Z2VfbUJJVCg0MSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NUF9NWFBfRFRBR19EQl9FUlIJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01QX01YUF9JVEFHX0RCX0VSUgl2eGdlX21CSVQoNDUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfVVBfVVhQX1RSQUNFX0RCX0VSUgl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVBfTVhQX1RSQUNFX0RCX0VSUgl2eGdlX21CSVQoNDgpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9DTUcyTVNHX0RCX0VSUgl2eGdlX21CSVQoNDkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9UWFBFMk1TR19EQl9FUlIJdnhnZV9tQklUKDUwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfUlhQRTJNU0dfREJfRVJSCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1JQRTJNU0dfREJfRVJSCXZ4Z2VfbUJJVCg1MikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX1JFR19SRUFEX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg1MykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX01YUDJVWFBfRklGT19FUlIJdnhnZV9tQklUKDU0KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfS0RGQ19TSUZfRklGT19FUlIJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfQ1hQMlNXSUZfRklGT19FUlIJdnhnZV9tQklUKDU2KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfVU1RX0RCX0VSUgl2eGdlX21CSVQoNTcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9CV1JfUEZfREJfRVJSCXZ4Z2VfbUJJVCg1OCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSX1JFR19NU0dfUVVFX0JXUl9TSUZfRklGT19FUlIJdnhnZV9tQklUKDU5KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfRE1RX0VDQ19EQl9FUlIJdnhnZV9tQklUKDYwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfRE1BX1JFQURfRklGT19FUlIJdnhnZV9tQklUKDYxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlJfUkVHX01TR19RVUVfRE1BX1JFU1BfRUNDX0RCX0VSUgl2eGdlX21CSVQoNjIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUl9SRUdfTVNHX1FVRV9VWFAyTVhQX0ZJRk9fRVJSCXZ4Z2VfbUJJVCg2MykKKy8qMHgwNTIzMCovCXU2NAltc2dfZXJyX21hc2s7CisvKjB4MDUyMzgqLwl1NjQJbXNnX2Vycl9hbGFybTsKKwl1OAl1bnVzZWQwNTM0MFsweDA1MzQwLTB4MDUyNDBdOworCisvKjB4MDUzNDAqLwl1NjQJbXNnX2V4Y19yZWc7CisjZGVmaW5lCVZYR0VfSFdfTVNHX0VYQ19SRUdfTVBfTVhQX0NBVVNFX0lORk9fSU5UCXZ4Z2VfbUJJVCg1MCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVhDX1JFR19NUF9NWFBfQ0FVU0VfQ1JJVF9JTlQJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX01TR19FWENfUkVHX1VQX1VYUF9DQVVTRV9JTkZPX0lOVAl2eGdlX21CSVQoNTQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VYQ19SRUdfVVBfVVhQX0NBVVNFX0NSSVRfSU5UCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVhDX1JFR19NUF9NWFBfU0VSUgl2eGdlX21CSVQoNjIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VYQ19SRUdfVVBfVVhQX1NFUlIJdnhnZV9tQklUKDYzKQorLyoweDA1MzQ4Ki8JdTY0CW1zZ19leGNfbWFzazsKKy8qMHgwNTM1MCovCXU2NAltc2dfZXhjX2FsYXJtOworLyoweDA1MzU4Ki8JdTY0CW1zZ19leGNfY2F1c2U7CisjZGVmaW5lIFZYR0VfSFdfTVNHX0VYQ19DQVVTRV9NUF9NWFAodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUgVlhHRV9IV19NU0dfRVhDX0NBVVNFX1VQX1VYUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKwl1OAl1bnVzZWQwNTM2OFsweDA1MzgwLTB4MDUzNjBdOworCisvKjB4MDUzODAqLwl1NjQJbXNnX2VycjJfcmVnOworI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0NNRzJNU0dfRElTUEFUQ0hfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0RNUV9ESVNQQVRDSF9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX1NXSUZfRElTUEFUQ0hfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9QSUNfV1JJVEVfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9TV0lGUkVHX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX1RJTV9XUklURV9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX1VNUV9UQV9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9UWFBFX1RBX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX1JYUEVfVEFfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfU1dJRl9UQV9GU01fSU5URUdSSVRZX0VSUgl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9ETUFfVEFfRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0NQX1RBX0ZTTV9JTlRFR1JJVFlfRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTE2X0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEExNV9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBMTRfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTEzX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEExMl9GU01fSU5URUdSSVRZX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDE2KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX0xPTkdURVJNVU1RX1RBMTFfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9MT05HVEVSTVVNUV9UQTEwX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEE5X0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEE4X0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMjApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEE3X0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMjEpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEE2X0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEE1X0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEE0X0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMjQpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEEzX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMjUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEEyX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMjYpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEExX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfTE9OR1RFUk1VTVFfVEEwX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMjgpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfRkJNQ19PV05fRlNNX0lOVEVHUklUWV9FUlIJdnhnZV9tQklUKDI5KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19NU0dfUVVFX1RYUEUyTVNHX0RJU1BBVENIX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMzApCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01TR19RVUVfUlhQRTJNU0dfRElTUEFUQ0hfRlNNX0lOVEVHUklUWV9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9SUEUyTVNHX0RJU1BBVENIX0ZTTV9JTlRFR1JJVFlfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMzIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX01QX01QX1BJRlRfSUZfQ1JFRElUX0NOVF9FUlIJdnhnZV9tQklUKDMzKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIyX1JFR19VUF9VUF9QSUZUX0lGX0NSRURJVF9DTlRfRVJSCXZ4Z2VfbUJJVCgzNCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSMl9SRUdfTVNHX1FVRV9VTVEyUElDX0NNRF9GSUZPX0VSUgl2eGdlX21CSVQoNjIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjJfUkVHX1RJTV9USU0yTVNHX0NNRF9GSUZPX0VSUgl2eGdlX21CSVQoNjMpCisvKjB4MDUzODgqLwl1NjQJbXNnX2VycjJfbWFzazsKKy8qMHgwNTM5MCovCXU2NAltc2dfZXJyMl9hbGFybTsKKy8qMHgwNTM5OCovCXU2NAltc2dfZXJyM19yZWc7CisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfU0dfRVJSMAl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9TR19FUlIxCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX1NHX0VSUjIJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfU0dfRVJSMwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9TR19FUlI0CXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfRENBQ0hFX1NHX0VSUjUJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9EQ0FDSEVfU0dfRVJSNgl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9TR19FUlI3CXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01TR19FUlIzX1JFR19VUF9VWFBfSUNBQ0hFX1NHX0VSUjAJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfTVNHX0VSUjNfUkVHX1VQX1VYUF9JQ0FDSEVfU0dfRVJSMQl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9TR19FUlIwCXZ4Z2VfbUJJVCgxNikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9TR19FUlIxCXZ4Z2VfbUJJVCgxNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9TR19FUlIyCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9TR19FUlIzCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9TR19FUlI0CXZ4Z2VfbUJJVCgyMCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9TR19FUlI1CXZ4Z2VfbUJJVCgyMSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9TR19FUlI2CXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9TR19FUlI3CXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0lDQUNIRV9TR19FUlIwCXZ4Z2VfbUJJVCgyNCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0lDQUNIRV9TR19FUlIxCXZ4Z2VfbUJJVCgyNSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9EQl9FUlIwCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9EQl9FUlIxCXZ4Z2VfbUJJVCgzMykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9EQl9FUlIyCXZ4Z2VfbUJJVCgzNCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9EQl9FUlIzCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9EQl9FUlI0CXZ4Z2VfbUJJVCgzNikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9EQl9FUlI1CXZ4Z2VfbUJJVCgzNykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9EQl9FUlI2CXZ4Z2VfbUJJVCgzOCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0RDQUNIRV9EQl9FUlI3CXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0lDQUNIRV9EQl9FUlIwCXZ4Z2VfbUJJVCg0MCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfVVBfVVhQX0lDQUNIRV9EQl9FUlIxCXZ4Z2VfbUJJVCg0MSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9EQl9FUlIwCXZ4Z2VfbUJJVCg0OCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9EQl9FUlIxCXZ4Z2VfbUJJVCg0OSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9EQl9FUlIyCXZ4Z2VfbUJJVCg1MCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9EQl9FUlIzCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9EQl9FUlI0CXZ4Z2VfbUJJVCg1MikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9EQl9FUlI1CXZ4Z2VfbUJJVCg1MykKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9EQl9FUlI2CXZ4Z2VfbUJJVCg1NCkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0RDQUNIRV9EQl9FUlI3CXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0lDQUNIRV9EQl9FUlIwCXZ4Z2VfbUJJVCg1NikKKyNkZWZpbmUJVlhHRV9IV19NU0dfRVJSM19SRUdfTVBfTVhQX0lDQUNIRV9EQl9FUlIxCXZ4Z2VfbUJJVCg1NykKKy8qMHgwNTNhMCovCXU2NAltc2dfZXJyM19tYXNrOworLyoweDA1M2E4Ki8JdTY0CW1zZ19lcnIzX2FsYXJtOworCXU4CXVudXNlZDA1NjAwWzB4MDU2MDAtMHgwNTNiMF07CisKKy8qMHgwNTYwMCovCXU2NAlmYXVfZ2VuX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfRkFVX0dFTl9FUlJfUkVHX0ZNUEZfUE9SVDBfUEVSTUFORU5UX1NUT1AJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0dFTl9FUlJfUkVHX0ZNUEZfUE9SVDFfUEVSTUFORU5UX1NUT1AJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0dFTl9FUlJfUkVHX0ZNUEZfUE9SVDJfUEVSTUFORU5UX1NUT1AJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9HRU5fRVJSX1JFR19GQUxSX0FVVE9fTFJPX05PVElGSUNBVElPTgl2eGdlX21CSVQoMTUpCisvKjB4MDU2MDgqLwl1NjQJZmF1X2dlbl9lcnJfbWFzazsKKy8qMHgwNTYxMCovCXU2NAlmYXVfZ2VuX2Vycl9hbGFybTsKKy8qMHgwNTYxOCovCXU2NAlmYXVfZWNjX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9QT1JUMF9GQVVfTUFDMkZfTl9TR19FUlIJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9QT1JUMF9GQVVfTUFDMkZfTl9EQl9FUlIJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9QT1JUMF9GQVVfTUFDMkZfV19TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMiwgMikKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX1BPUlQwX0ZBVV9NQUMyRl9XX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0LCAyKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfUE9SVDFfRkFVX01BQzJGX05fU0dfRVJSCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfUE9SVDFfRkFVX01BQzJGX05fREJfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfUE9SVDFfRkFVX01BQzJGX1dfU0dfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDgsIDIpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9QT1JUMV9GQVVfTUFDMkZfV19EQl9FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTAsIDIpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9QT1JUMl9GQVVfTUFDMkZfTl9TR19FUlIJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVfUE9SVDJfRkFVX01BQzJGX05fREJfRVJSCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX1BPUlQyX0ZBVV9NQUMyRl9XX1NHX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNCwgMikKKyNkZWZpbmUJVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX1BPUlQyX0ZBVV9NQUMyRl9XX0RCX0VSUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgMikKKyNkZWZpbmUgVlhHRV9IV19GQVVfRUNDX0VSUl9SRUdfRkFVX0ZBVV9YRk1EX0lOU19TR19FUlIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTgsIDIpCisjZGVmaW5lIFZYR0VfSFdfRkFVX0VDQ19FUlJfUkVHX0ZBVV9GQVVfWEZNRF9JTlNfREJfRVJSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIwLCAyKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9FQ0NfRVJSX1JFR19GQVVKX0ZBVV9GU01fRVJSCXZ4Z2VfbUJJVCgzMSkKKy8qMHgwNTYyMCovCXU2NAlmYXVfZWNjX2Vycl9tYXNrOworLyoweDA1NjI4Ki8JdTY0CWZhdV9lY2NfZXJyX2FsYXJtOworCXU4CXVudXNlZDA1NjU4WzB4MDU2NTgtMHgwNTYzMF07CisvKjB4MDU2NTgqLwl1NjQJZmF1X3BhX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19GQVVfUEFfQ0ZHX1JFUExfTDRfQ09NUF9DU1VNCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9QQV9DRkdfUkVQTF9MM19JTkNMX0NGCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0ZBVV9QQV9DRkdfUkVQTF9MM19DT01QX0NTVU0JdnhnZV9tQklUKDExKQorCXU4CXVudXNlZDA1NjY4WzB4MDU2NjgtMHgwNTY2MF07CisKKy8qMHgwNTY2OCovCXU2NAlkYmdfc3RhdHNfZmF1X3J4X3BhdGg7CisjZGVmaW5lCVZYR0VfSFdfREJHX1NUQVRTX0ZBVV9SWF9QQVRIX1JYX1BFUk1JVFRFRF9GUk1TKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorCXU4CXVudXNlZDA1NmMwWzB4MDU2YzAtMHgwNTY3MF07CisKKy8qMHgwNTZjMCovCXU2NAlmYXVfbGFnX2NmZzsKKyNkZWZpbmUgVlhHRV9IV19GQVVfTEFHX0NGR19DT0xMX0FMRyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIsIDIpCisjZGVmaW5lCVZYR0VfSFdfRkFVX0xBR19DRkdfSU5DUl9SWF9BR0dSX1NUQVRTCXZ4Z2VfbUJJVCg3KQorCXU4CXVudXNlZDA1ODAwWzB4MDU4MDAtMHgwNTZjOF07CisKKy8qMHgwNTgwMCovCXU2NAl0cGFfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19UUEFfSU5UX1NUQVRVU19PUlBfRVJSX09SUF9JTlQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1RQQV9JTlRfU1RBVFVTX1BUTV9BTEFSTV9QVE1fSU5UCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19UUEFfSU5UX1NUQVRVU19UUEFfRVJST1JfVFBBX0lOVAl2eGdlX21CSVQoMzEpCisvKjB4MDU4MDgqLwl1NjQJdHBhX2ludF9tYXNrOworLyoweDA1ODEwKi8JdTY0CW9ycF9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX09SUF9FUlJfUkVHX09SUF9GSUZPX1NHX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19PUlBfRVJSX1JFR19PUlBfRklGT19EQl9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfT1JQX0VSUl9SRUdfT1JQX1hGTURfRklGT19VRkxPV19FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX09SUF9FUlJfUkVHX09SUF9GUk1fRklGT19VRkxPV19FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX09SUF9FUlJfUkVHX09SUF9YRk1EX1JDVl9GU01fRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19PUlBfRVJSX1JFR19PUlBfT1VUUkVBRF9GU01fRVJSCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19PUlBfRVJSX1JFR19PUlBfT1VUUUVNX0ZTTV9FUlIJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX09SUF9FUlJfUkVHX09SUF9YRk1EX1JDVl9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19PUlBfRVJSX1JFR19PUlBfT1VUUkVBRF9TSEFET1dfRVJSCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19PUlBfRVJSX1JFR19PUlBfT1VUUUVNX1NIQURPV19FUlIJdnhnZV9tQklUKDM5KQorI2RlZmluZQlWWEdFX0hXX09SUF9FUlJfUkVHX09SUF9PVVRGUk1fU0hBRE9XX0VSUgl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfT1JQX0VSUl9SRUdfT1JQX09QVFBSU19TSEFET1dfRVJSCXZ4Z2VfbUJJVCg0NykKKy8qMHgwNTgxOCovCXU2NAlvcnBfZXJyX21hc2s7CisvKjB4MDU4MjAqLwl1NjQJb3JwX2Vycl9hbGFybTsKKy8qMHgwNTgyOCovCXU2NAlwdG1fYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX1BUTV9BTEFSTV9SRUdfUFRNX1JEQ1RSTF9TWU5DX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19QVE1fQUxBUk1fUkVHX1BUTV9SRENUUkxfRklGT19FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUFRNX0FMQVJNX1JFR19YRk1EX1JEX0ZJRk9fRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19QVE1fQUxBUk1fUkVHX1dERTJNU1JfV1JfRklGT19FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZSBWWEdFX0hXX1BUTV9BTEFSTV9SRUdfUFRNX0ZSTU1fRUNDX0RCX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE4LCAyKQorI2RlZmluZSBWWEdFX0hXX1BUTV9BTEFSTV9SRUdfUFRNX0ZSTU1fRUNDX1NHX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIyLCAyKQorLyoweDA1ODMwKi8JdTY0CXB0bV9hbGFybV9tYXNrOworLyoweDA1ODM4Ki8JdTY0CXB0bV9hbGFybV9hbGFybTsKKy8qMHgwNTg0MCovCXU2NAl0cGFfZXJyb3JfcmVnOworI2RlZmluZQlWWEdFX0hXX1RQQV9FUlJPUl9SRUdfVFBBX0ZTTV9FUlJfQUxBUk0JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVFBBX0VSUk9SX1JFR19UUEFfVFBBX0RBX0xLVVBfUFJUMF9EQl9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVFBBX0VSUk9SX1JFR19UUEFfVFBBX0RBX0xLVVBfUFJUMF9TR19FUlIJdnhnZV9tQklUKDExKQorLyoweDA1ODQ4Ki8JdTY0CXRwYV9lcnJvcl9tYXNrOworLyoweDA1ODUwKi8JdTY0CXRwYV9lcnJvcl9hbGFybTsKKy8qMHgwNTg1OCovCXU2NAl0cGFfZ2xvYmFsX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19UUEFfR0xPQkFMX0NGR19TVVBQT1JUX1NOQVBfQUJfTgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19UUEFfR0xPQkFMX0NGR19FQ0NfRU5BQkxFX04JdnhnZV9tQklUKDM1KQorCXU4CXVudXNlZDA1ODY4WzB4MDU4NzAtMHgwNTg2MF07CisKKy8qMHgwNTg3MCovCXU2NAlwdG1fZWNjX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19QVE1fRUNDX0NGR19QVE1fRlJNTV9FQ0NfRU5fTgl2eGdlX21CSVQoMykKKy8qMHgwNTg3OCovCXU2NAlwdG1fcGhhc2VfY2ZnOworI2RlZmluZQlWWEdFX0hXX1BUTV9QSEFTRV9DRkdfRlJNTV9XUl9QSEFTRV9FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19QVE1fUEhBU0VfQ0ZHX0ZSTU1fUkRfUEhBU0VfRU4JdnhnZV9tQklUKDcpCisJdTgJdW51c2VkMDU4OThbMHgwNTg5OC0weDA1ODgwXTsKKworLyoweDA1ODk4Ki8JdTY0CWRiZ19zdGF0c190cGFfdHhfcGF0aDsKKyNkZWZpbmUJVlhHRV9IV19EQkdfU1RBVFNfVFBBX1RYX1BBVEhfVFhfUEVSTUlUVEVEX0ZSTVModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorCXU4CXVudXNlZDA1OTAwWzB4MDU5MDAtMHgwNThhMF07CisKKy8qMHgwNTkwMCovCXU2NAl0bWFjX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfVE1BQ19JTlRfU1RBVFVTX1RYTUFDX0dFTl9FUlJfVFhNQUNfR0VOX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19UTUFDX0lOVF9TVEFUVVNfVFhNQUNfRUNDX0VSUl9UWE1BQ19FQ0NfSU5UCXZ4Z2VfbUJJVCg3KQorLyoweDA1OTA4Ki8JdTY0CXRtYWNfaW50X21hc2s7CisvKjB4MDU5MTAqLwl1NjQJdHhtYWNfZ2VuX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfR0VOX0VSUl9SRUdfVE1BQ0pfUEVSTUFORU5UX1NUT1AJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfR0VOX0VSUl9SRUdfVE1BQ0pfTk9fVkFMSURfVlNQT1JUCXZ4Z2VfbUJJVCg3KQorLyoweDA1OTE4Ki8JdTY0CXR4bWFjX2dlbl9lcnJfbWFzazsKKy8qMHgwNTkyMCovCXU2NAl0eG1hY19nZW5fZXJyX2FsYXJtOworLyoweDA1OTI4Ki8JdTY0CXR4bWFjX2VjY19lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX1RYTUFDX0VDQ19FUlJfUkVHX1RNQUNKX1RNQUNfVFBBMk1BQ19TR19FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfRUNDX0VSUl9SRUdfVE1BQ0pfVE1BQ19UUEEyTUFDX0RCX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19FQ0NfRVJSX1JFR19UTUFDSl9UTUFDX1RQQTJNX1NCX1NHX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfRUNDX0VSUl9SRUdfVE1BQ0pfVE1BQ19UUEEyTV9TQl9EQl9FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0VDQ19FUlJfUkVHX1RNQUNKX1RNQUNfVFBBMk1fREFfU0dfRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19FQ0NfRVJSX1JFR19UTUFDSl9UTUFDX1RQQTJNX0RBX0RCX0VSUgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfRUNDX0VSUl9SRUdfVE1BQ19UTUFDX1BPUlQwX0ZTTV9FUlIJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0VDQ19FUlJfUkVHX1RNQUNfVE1BQ19QT1JUMV9GU01fRVJSCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19FQ0NfRVJSX1JFR19UTUFDX1RNQUNfUE9SVDJfRlNNX0VSUgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfRUNDX0VSUl9SRUdfVE1BQ0pfVE1BQ0pfRlNNX0VSUgl2eGdlX21CSVQoMzkpCisvKjB4MDU5MzAqLwl1NjQJdHhtYWNfZWNjX2Vycl9tYXNrOworLyoweDA1OTM4Ki8JdTY0CXR4bWFjX2VjY19lcnJfYWxhcm07CisJdTgJdW51c2VkMDU5NzhbMHgwNTk3OC0weDA1OTQwXTsKKworLyoweDA1OTc4Ki8JdTY0CWRiZ19zdGF0X3R4X2FueV9mcm1zOworI2RlZmluZSBWWEdFX0hXX0RCR19TVEFUX1RYX0FOWV9GUk1TX1BPUlQwX1RYX0FOWV9GUk1TKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19EQkdfU1RBVF9UWF9BTllfRlJNU19QT1JUMV9UWF9BTllfRlJNUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisjZGVmaW5lIFZYR0VfSFdfREJHX1NUQVRfVFhfQU5ZX0ZSTVNfUE9SVDJfVFhfQU5ZX0ZSTVModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDgpCisJdTgJdW51c2VkMDU5YTBbMHgwNTlhMC0weDA1OTgwXTsKKworLyoweDA1OWEwKi8JdTY0CXR4bWFjX2xpbmtfdXRpbF9wb3J0WzNdOworI2RlZmluZQlWWEdFX0hXX1RYTUFDX0xJTktfVVRJTF9QT1JUX1RNQUNfVE1BQ19VVElMSVpBVElPTih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxLCA3KQorI2RlZmluZSBWWEdFX0hXX1RYTUFDX0xJTktfVVRJTF9QT1JUX1RNQUNfVVRJTF9DRkcodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA0KQorI2RlZmluZSBWWEdFX0hXX1RYTUFDX0xJTktfVVRJTF9QT1JUX1RNQUNfVE1BQ19GUkFDX1VUSUwodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTIsIDQpCisjZGVmaW5lIFZYR0VfSFdfVFhNQUNfTElOS19VVElMX1BPUlRfVE1BQ19QS1RfV0VJR0hUKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDQpCisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfTElOS19VVElMX1BPUlRfVE1BQ19UTUFDX1NDQUxFX0ZBQ1RPUgl2eGdlX21CSVQoMjMpCisvKjB4MDU5YjgqLwl1NjQJdHhtYWNfY2ZnMF9wb3J0WzNdOworI2RlZmluZQlWWEdFX0hXX1RYTUFDX0NGRzBfUE9SVF9UTUFDX0VOCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1RYTUFDX0NGRzBfUE9SVF9BUFBFTkRfUEFECXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX1RYTUFDX0NGRzBfUE9SVF9QQURfQllURSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisvKjB4MDU5ZDAqLwl1NjQJdHhtYWNfY2ZnMV9wb3J0WzNdOworI2RlZmluZSBWWEdFX0hXX1RYTUFDX0NGRzFfUE9SVF9BVkdfSVBHKHZhbCkgdnhnZV92QklUKHZhbCwgNDAsIDgpCisvKjB4MDU5ZTgqLwl1NjQJdHhtYWNfc3RhdHVzX3BvcnRbM107CisjZGVmaW5lCVZYR0VfSFdfVFhNQUNfU1RBVFVTX1BPUlRfVE1BQ19UWF9GUk1fU0VOVAl2eGdlX21CSVQoMykKKwl1OAl1bnVzZWQwNWEyMFsweDA1YTIwLTB4MDVhMDBdOworCisvKjB4MDVhMjAqLwl1NjQJbGFnX2Rpc3RyaWJfZGVzdDsKKyNkZWZpbmUgVlhHRV9IV19MQUdfRElTVFJJQl9ERVNUX01BUF9WUEFUSChuKQl2eGdlX21CSVQobikKKy8qMHgwNWEyOCovCXU2NAlsYWdfbWFya2VyX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19MQUdfTUFSS0VSX0NGR19HRU5fUkNWUl9FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19MQUdfTUFSS0VSX0NGR19SRVNQX0VOCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX0xBR19NQVJLRVJfQ0ZHX1JFU1BfVElNRU9VVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19MQUdfTUFSS0VSX0NGR19TTE9XX1BST1RPX01SS1JfTUlOX0lOVEVSVkFMKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKyNkZWZpbmUJVlhHRV9IV19MQUdfTUFSS0VSX0NGR19USFJPVFRMRV9NUktSX1JFU1AJdnhnZV9tQklUKDUxKQorLyoweDA1YTMwKi8JdTY0CWxhZ190eF9jZmc7CisjZGVmaW5lCVZYR0VfSFdfTEFHX1RYX0NGR19JTkNSX1RYX0FHR1JfU1RBVFMJdnhnZV9tQklUKDMpCisjZGVmaW5lIFZYR0VfSFdfTEFHX1RYX0NGR19ESVNUUklCX0FMR19TRUwodmFsKSB2eGdlX3ZCSVQodmFsLCA2LCAyKQorI2RlZmluZQlWWEdFX0hXX0xBR19UWF9DRkdfRElTVFJJQl9SRU1BUF9JRl9GQUlMCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUgVlhHRV9IV19MQUdfVFhfQ0ZHX0NPTExfTUFYX0RFTEFZKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorLyoweDA1YTM4Ki8JdTY0CWxhZ190eF9zdGF0dXM7CisjZGVmaW5lIFZYR0VfSFdfTEFHX1RYX1NUQVRVU19UTEFHX1RJTUVSX1ZBTF9FTVBUSUVEX0xJTksodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUJVlhHRV9IV19MQUdfVFhfU1RBVFVTX1RMQUdfVElNRVJfVkFMX1NMT1dfUFJPVE9fTVJLUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA4LCA4KQorI2RlZmluZQlWWEdFX0hXX0xBR19UWF9TVEFUVVNfVExBR19USU1FUl9WQUxfU0xPV19QUk9UT19NUktSUkVTUCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNiwgOCkKKwl1OAl1bnVzZWQwNWQ0OFsweDA1ZDQ4LTB4MDVhNDBdOworCisvKjB4MDVkNDgqLwl1NjQJc3JwY2ltX3RvX21ycGNpbV92cGxhbmVfcm1zZ1sxN107CisjZGVmaW5lCVwKK1ZYR0VfSEFMX1NSUENJTV9UT19NUlBDSU1fVlBMQU5FX1JNU0dfU1dJRl9TUlBDSU1fVE9fTVJQQ0lNX1ZQTEFORV9STVNHKHZhbClcCisgdnhnZV92QklUKHZhbCwgMCwgNjQpCisJCXU4CXVudXNlZDA2NDIwWzB4MDY0MjAtMHgwNWRkMF07CisKKy8qMHgwNjQyMCovCXU2NAltcnBjaW1fdG9fc3JwY2ltX3ZwbGFuZV93bXNnWzE3XTsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fVE9fU1JQQ0lNX1ZQTEFORV9XTVNHX01SUENJTV9UT19TUlBDSU1fVlBMQU5FX1dNU0codmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDY0YTgqLwl1NjQJbXJwY2ltX3RvX3NycGNpbV92cGxhbmVfd21zZ190cmlnWzE3XTsKKworLyoweDA2NTMwKi8JdTY0CWRlYnVnX3N0YXRzMDsKKyNkZWZpbmUgVlhHRV9IV19ERUJVR19TVEFUUzBfUlNURFJPUF9NU0codmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUgVlhHRV9IV19ERUJVR19TVEFUUzBfUlNURFJPUF9DUEwodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDY1MzgqLwl1NjQJZGVidWdfc3RhdHMxOworI2RlZmluZSBWWEdFX0hXX0RFQlVHX1NUQVRTMV9SU1REUk9QX0NMSUVOVDAodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUgVlhHRV9IV19ERUJVR19TVEFUUzFfUlNURFJPUF9DTElFTlQxKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDA2NTQwKi8JdTY0CWRlYnVnX3N0YXRzMjsKKyNkZWZpbmUgVlhHRV9IV19ERUJVR19TVEFUUzJfUlNURFJPUF9DTElFTlQyKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisvKjB4MDY1NDgqLwl1NjQJZGVidWdfc3RhdHMzX3ZwbGFuZVsxN107CisjZGVmaW5lIFZYR0VfSFdfREVCVUdfU1RBVFMzX1ZQTEFORV9ERVBMX1BIKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTYpCisjZGVmaW5lIFZYR0VfSFdfREVCVUdfU1RBVFMzX1ZQTEFORV9ERVBMX05QSCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUgVlhHRV9IV19ERUJVR19TVEFUUzNfVlBMQU5FX0RFUExfQ1BMSCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKy8qMHgwNjVkMCovCXU2NAlkZWJ1Z19zdGF0czRfdnBsYW5lWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19ERUJVR19TVEFUUzRfVlBMQU5FX0RFUExfUEQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUgVlhHRV9IV19ERUJVR19TVEFUUzRfVlBMQU5FX0RFUExfTlBEKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZSBWWEdFX0hXX0RFQlVHX1NUQVRTNF9WUExBTkVfREVQTF9DUExEKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDE2KQorCisJdTgJdW51c2VkMDcwMDBbMHgwNzAwMC0weDA2NjU4XTsKKworLyoweDA3MDAwKi8JdTY0CW1ycGNpbV9nZW5lcmFsX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19QSUNfSU5UCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfUENJX0lOVAl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1JURE1BX0lOVAl2eGdlX21CSVQoMikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1dSRE1BX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX0czQ01DVF9JTlQJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19HQ01HMV9JTlQJdnhnZV9tQklUKDUpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19HQ01HMl9JTlQJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19HQ01HM19JTlQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19HM0NNSUZMX0lOVAl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX0czQ01JRlVfSU5UCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfUENNRzFfSU5UCXZ4Z2VfbUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1BDTUcyX0lOVAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19QQ01HM19JTlQJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfWE1BQ19JTlQJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfUlhNQUNfSU5UCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1RNQUNfSU5UCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX0czRkJJRl9JTlQJdnhnZV9tQklUKDE2KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfRkJNQ19JTlQJdnhnZV9tQklUKDE3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfRzNGQkNUX0lOVAl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19UUEFfSU5UCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX0RSQkVMTF9JTlQJdnhnZV9tQklUKDIwKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfT05FX0lOVAl2eGdlX21CSVQoMjEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19NU0dfSU5UCXZ4Z2VfbUJJVCgyMikKKy8qMHgwNzAwOCovCXU2NAltcnBjaW1fZ2VuZXJhbF9pbnRfbWFzazsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19QSUNfSU5UCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX1BDSV9JTlQJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfUlRETUFfSU5UCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX1dSRE1BX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19HM0NNQ1RfSU5UCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX0dDTUcxX0lOVAl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19HQ01HMl9JTlQJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfR0NNRzNfSU5UCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX0czQ01JRkxfSU5UCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX0czQ01JRlVfSU5UCXZ4Z2VfbUJJVCg5KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX1BDTUcxX0lOVAl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfUENNRzJfSU5UCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19QQ01HM19JTlQJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX1hNQUNfSU5UCXZ4Z2VfbUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19SWE1BQ19JTlQJdnhnZV9tQklUKDE0KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0lOVF9NQVNLX1RNQUNfSU5UCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19HM0ZCSUZfSU5UCXZ4Z2VfbUJJVCgxNikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9JTlRfTUFTS19GQk1DX0lOVAl2eGdlX21CSVQoMTcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfRzNGQkNUX0lOVAl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfVFBBX0lOVAl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfRFJCRUxMX0lOVAl2eGdlX21CSVQoMjApCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfT05FX0lOVAl2eGdlX21CSVQoMjEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfSU5UX01BU0tfTVNHX0lOVAl2eGdlX21CSVQoMjIpCisvKjB4MDcwMTAqLwl1NjQJbXJwY2ltX3BwaWZfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0lOSV9FUlJPUlNfSU5JX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0RNQV9FUlJPUlNfRE1BX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX1RHVF9FUlJPUlNfVEdUX0lOVAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DT05GSUdfRVJST1JTX0NPTkZJR19JTlQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfQ1JEVF9JTlQJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfUExMX0VSUk9SU19QTExfSU5UCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTBfQ1JEX0lOVF9WUExBTkUwX0lOVFwKKwkJCQkJCQl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkUxX0NSRF9JTlRfVlBMQU5FMV9JTlRcCisJCQkJCQkJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FMl9DUkRfSU5UX1ZQTEFORTJfSU5UXAorCQkJCQkJCXZ4Z2VfbUJJVCgzMykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTNfQ1JEX0lOVF9WUExBTkUzX0lOVFwKKwkJCQkJCQl2eGdlX21CSVQoMzQpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkU0X0NSRF9JTlRfVlBMQU5FNF9JTlRcCisJCQkJCQkJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FNV9DUkRfSU5UX1ZQTEFORTVfSU5UXAorCQkJCQkJCXZ4Z2VfbUJJVCgzNikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTZfQ1JEX0lOVF9WUExBTkU2X0lOVFwKKwkJCQkJCQl2eGdlX21CSVQoMzcpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkU3X0NSRF9JTlRfVlBMQU5FN19JTlRcCisJCQkJCQkJdnhnZV9tQklUKDM4KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FOF9DUkRfSU5UX1ZQTEFORThfSU5UXAorCQkJCQkJCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTlfQ1JEX0lOVF9WUExBTkU5X0lOVFwKKwkJCQkJCQl2eGdlX21CSVQoNDApCisjZGVmaW5lIFwKK1ZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkUxMF9DUkRfSU5UX1ZQTEFORTEwX0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDQxKQorI2RlZmluZSBcCitWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FMTFfQ1JEX0lOVF9WUExBTkUxMV9JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0MikKKyNkZWZpbmUJXAorVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTEyX0NSRF9JTlRfVlBMQU5FMTJfSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVwKK1ZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkUxM19DUkRfSU5UX1ZQTEFORTEzX0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDQ0KQorI2RlZmluZQlcCitWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfQ1JEVF9FUlJPUlNfVlBMQU5FMTRfQ1JEX0lOVF9WUExBTkUxNF9JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0NSkKKyNkZWZpbmUJXAorVlhHRV9IV19NUlBDSU1fUFBJRl9JTlRfU1RBVFVTX0NSRFRfRVJST1JTX1ZQTEFORTE1X0NSRF9JTlRfVlBMQU5FMTVfSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoNDYpCisjZGVmaW5lCVwKK1ZYR0VfSFdfTVJQQ0lNX1BQSUZfSU5UX1NUQVRVU19DUkRUX0VSUk9SU19WUExBTkUxNl9DUkRfSU5UX1ZQTEFORTE2X0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlcCitWWEdFX0hXX01SUENJTV9QUElGX0lOVF9TVEFUVVNfVlBBVEhfVE9fTVJQQ0lNX0FMQVJNX1ZQQVRIX1RPX01SUENJTV9BTEFSTV9JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCg1NSkKKy8qMHgwNzAxOCovCXU2NAltcnBjaW1fcHBpZl9pbnRfbWFzazsKKwl1OAl1bnVzZWQwNzAyOFsweDA3MDI4LTB4MDcwMjBdOworCisvKjB4MDcwMjgqLwl1NjQJaW5pX2Vycm9yc19yZWc7CisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfU0NQTF9DUExfVElNRU9VVF9VTlVTRURfVEFHCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX1NDUExfQ1BMX1RJTUVPVVQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfRENQTF9GU01fRVJSCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19EQ1BMX1BPSVNPTgl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfRENQTF9VTlNVUFBPUlRFRAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfRENQTF9BQk9SVAl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfSU5JX1RMUF9BQk9SVAl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfSU5JX0RMTFBfQUJPUlQJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0lOSV9FQ1JDX0VSUgl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfSU5JX0JVRl9EQl9FUlIJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX0lOSV9FUlJPUlNfUkVHX0lOSV9CVUZfU0dfRVJSCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19JTklfRVJST1JTX1JFR19JTklfREFUQV9PVkVSRkxPVwl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfSU5JX0hEUl9PVkVSRkxPVwl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfSU5JX01SRF9TWVNfRFJPUAl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfSU5JX01XUl9TWVNfRFJPUAl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfSU5JX01SRF9DTElFTlRfRFJPUAl2eGdlX21CSVQoNTkpCisjZGVmaW5lCVZYR0VfSFdfSU5JX0VSUk9SU19SRUdfSU5JX01XUl9DTElFTlRfRFJPUAl2eGdlX21CSVQoNjMpCisvKjB4MDcwMzAqLwl1NjQJaW5pX2Vycm9yc19tYXNrOworLyoweDA3MDM4Ki8JdTY0CWluaV9lcnJvcnNfYWxhcm07CisvKjB4MDcwNDAqLwl1NjQJZG1hX2Vycm9yc19yZWc7CisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfUkRBUkJfRlNNX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19XUkFSQl9GU01fRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9XUkRNQV9XUl9IRFJfT1ZFUkZMT1cJdnhnZV9tQklUKDgpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1dSRE1BX1dSX0hEUl9VTkRFUkZMT1cJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1dSRE1BX1dSX0RBVEFfT1ZFUkZMT1cJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9XUkRNQV9XUl9EQVRBX1VOREVSRkxPVwl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX01TR19XUl9IRFJfT1ZFUkZMT1cJdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9NU0dfV1JfSERSX1VOREVSRkxPVwl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX01TR19XUl9EQVRBX09WRVJGTE9XCXZ4Z2VfbUJJVCgxNCkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfTVNHX1dSX0RBVEFfVU5ERVJGTE9XCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfU1RBVFNfV1JfSERSX09WRVJGTE9XCXZ4Z2VfbUJJVCgxNikKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfU1RBVFNfV1JfSERSX1VOREVSRkxPVwl2eGdlX21CSVQoMTcpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1NUQVRTX1dSX0RBVEFfT1ZFUkZMT1cJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9TVEFUU19XUl9EQVRBX1VOREVSRkxPVwl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1JURE1BX1dSX0hEUl9PVkVSRkxPVwl2eGdlX21CSVQoMjApCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfRE1BX1JURE1BX1dSX0hEUl9VTkRFUkZMT1cJdnhnZV9tQklUKDIxKQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9SVERNQV9XUl9EQVRBX09WRVJGTE9XCXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfUlRETUFfV1JfREFUQV9VTkRFUkZMT1cJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9XUkRNQV9SRF9IRFJfT1ZFUkZMT1cJdnhnZV9tQklUKDI0KQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RNQV9XUkRNQV9SRF9IRFJfVU5ERVJGTE9XCXZ4Z2VfbUJJVCgyNSkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfUlRETUFfUkRfSERSX09WRVJGTE9XCXZ4Z2VfbUJJVCgyOCkKKyNkZWZpbmUJVlhHRV9IV19ETUFfRVJST1JTX1JFR19ETUFfUlRETUFfUkRfSERSX1VOREVSRkxPVwl2eGdlX21CSVQoMjkpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfREJMR0VOX0ZTTV9FUlIJdnhnZV9tQklUKDMyKQorI2RlZmluZQlWWEdFX0hXX0RNQV9FUlJPUlNfUkVHX0RCTEdFTl9DUkVESVRfRlNNX0VSUgl2eGdlX21CSVQoMzMpCisjZGVmaW5lCVZYR0VfSFdfRE1BX0VSUk9SU19SRUdfREJMR0VOX0RNQV9XUlJfU01fRVJSCXZ4Z2VfbUJJVCgzNCkKKy8qMHgwNzA0OCovCXU2NAlkbWFfZXJyb3JzX21hc2s7CisvKjB4MDcwNTAqLwl1NjQJZG1hX2Vycm9yc19hbGFybTsKKy8qMHgwNzA1OCovCXU2NAl0Z3RfZXJyb3JzX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfVkVORE9SX01TRwl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfTVNHX1VOTE9DSwl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfSUxMRUdBTF9UTFBfQkUJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX0JPT1RfV1JJVEUJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1BJRl9XUl9DUk9TU19RV1JBTkdFCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9QSUZfUkVBRF9DUk9TU19RV1JBTkdFCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9LREZDX1JFQUQJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1VTRENfUkVBRAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfVVNEQ19XUl9DUk9TU19RV1JBTkdFCXZ4Z2VfbUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9NU0lYX0JFWU9ORF9SQU5HRQl2eGdlX21CSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfV1JfVE9fS0RGQ19QT0lTT04JdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9XUl9UT19VU0RDX1BPSVNPTgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1dSX1RPX1BJRl9QT0lTT04JdnhnZV9tQklUKDEyKQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9XUl9UT19NU0lYX1BPSVNPTgl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX1dSX1RPX01SSU9WX1BPSVNPTgl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX05PVF9NRU1fVExQCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfVU5LTk9XTl9NRU1fVExQCXZ4Z2VfbUJJVCgxNikKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfUkVRX0ZTTV9FUlIJdnhnZV9tQklUKDE3KQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9DUExfRlNNX0VSUgl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfVEdUX0VSUk9SU19SRUdfVEdUX0tERkNfUFJPVF9FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1RHVF9FUlJPUlNfUkVHX1RHVF9TV0lGX1BST1RfRVJSCXZ4Z2VfbUJJVCgyMCkKKyNkZWZpbmUJVlhHRV9IV19UR1RfRVJST1JTX1JFR19UR1RfTVJJT1ZfTUVNX01BUF9DRkdfRVJSCXZ4Z2VfbUJJVCgyMSkKKy8qMHgwNzA2MCovCXU2NAl0Z3RfZXJyb3JzX21hc2s7CisvKjB4MDcwNjgqLwl1NjQJdGd0X2Vycm9yc19hbGFybTsKKy8qMHgwNzA3MCovCXU2NAljb25maWdfZXJyb3JzX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19JMkNfSUxMRUdBTF9TVE9QX0NPTkQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfSTJDX0lMTEVHQUxfU1RBUlRfQ09ORAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19JMkNfRVhQX1JEX0NOVAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfSTJDX0VYVFJBX0NZQ0xFCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19JMkNfTUFJTl9GU01fRVJSCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19JMkNfUkVRX0NPTExJU0lPTgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfSTJDX1JFR19GU01fRVJSCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19DRkdNX0kyQ19USU1FT1VUCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19SSUNfSTJDX1RJTUVPVVQJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX0NGR01fRlNNX0VSUgl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfUklDX0ZTTV9FUlIJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX1BJRk1fSUxMRUdBTF9BQ0NFU1MJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX1BJRk1fVElNRU9VVAl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfQ09ORklHX0VSUk9SU19SRUdfUElGTV9GU01fRVJSCXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19DT05GSUdfRVJST1JTX1JFR19QSUZNX1RPX0ZTTV9FUlIJdnhnZV9tQklUKDU5KQorI2RlZmluZQlWWEdFX0hXX0NPTkZJR19FUlJPUlNfUkVHX1JJQ19SSUNfUkRfVElNRU9VVAl2eGdlX21CSVQoNjMpCisvKjB4MDcwNzgqLwl1NjQJY29uZmlnX2Vycm9yc19tYXNrOworLyoweDA3MDgwKi8JdTY0CWNvbmZpZ19lcnJvcnNfYWxhcm07CisJdTgJdW51c2VkMDcwOTBbMHgwNzA5MC0weDA3MDg4XTsKKworLyoweDA3MDkwKi8JdTY0CWNyZHRfZXJyb3JzX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19SRUdfV1JDUkRUQVJCX0ZTTV9FUlIJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1JFR19XUkNSRFRBUkJfSU5UQ1RMX0lMTEVHQUxfQ1JEX0RFQUwgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19SRUdfV1JDUkRUQVJCX1BEQV9JTExFR0FMX0NSRF9ERUFMCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19SRUdfV1JDUkRUQVJCX1BDSV9NU0dfSUxMRUdBTF9DUkRfREVBTCBcCisJCQkJCQkJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1JFR19SRENSRFRBUkJfRlNNX0VSUgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfUkVHX1JEQ1JEVEFSQl9SREFfSUxMRUdBTF9DUkRfREVBTAl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfUkVHX1JEQ1JEVEFSQl9QREFfSUxMRUdBTF9DUkRfREVBTAl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfUkVHX1JEQ1JEVEFSQl9EQkxHRU5fSUxMRUdBTF9DUkRfREVBTCBcCisJCQkJCQkJdnhnZV9tQklUKDQ3KQorLyoweDA3MDk4Ki8JdTY0CWNyZHRfZXJyb3JzX21hc2s7CisvKjB4MDcwYTAqLwl1NjQJY3JkdF9lcnJvcnNfYWxhcm07CisJdTgJdW51c2VkMDcwYjBbMHgwNzBiMC0weDA3MGE4XTsKKworLyoweDA3MGIwKi8JdTY0CW1ycGNpbV9nZW5lcmFsX2Vycm9yc19yZWc7CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19TVEFUU0JfRlNNX0VSUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX1hHRU5fRlNNX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX1hNRU1fRlNNX0VSUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19LREZDQ1RMX0ZTTV9FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfTVJJT1ZDVExfRlNNX0VSUgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19TUElfRkxTSF9FUlIJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfU1BJX0lJQ19BQ0tfRVJSCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX1NQSV9JSUNfQ0hLU1VNX0VSUgl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19JTklfU0VSUl9ERVQJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0VSUk9SU19SRUdfSU5UQ1RMX01TSVhfRlNNX0VSUgl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfRVJST1JTX1JFR19JTlRDVExfTVNJX09WRVJGTE9XCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX1BQSUZfUENJX05PVF9GTFVTSF9EVVJJTkdfU1dfUkVTRVQgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0NykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9FUlJPUlNfUkVHX1BQSUZfU1dfUkVTRVRfRlNNX0VSUgl2eGdlX21CSVQoNTEpCisvKjB4MDcwYjgqLwl1NjQJbXJwY2ltX2dlbmVyYWxfZXJyb3JzX21hc2s7CisvKjB4MDcwYzAqLwl1NjQJbXJwY2ltX2dlbmVyYWxfZXJyb3JzX2FsYXJtOworCXU4CXVudXNlZDA3MGQwWzB4MDcwZDAtMHgwNzBjOF07CisKKy8qMHgwNzBkMCovCXU2NAlwbGxfZXJyb3JzX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19QTExfRVJST1JTX1JFR19DT1JFX0NNR19QTExfT09MCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1BMTF9FUlJPUlNfUkVHX0NPUkVfRkJfUExMX09PTAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19QTExfRVJST1JTX1JFR19DT1JFX1hfUExMX09PTAl2eGdlX21CSVQoMTEpCisvKjB4MDcwZDgqLwl1NjQJcGxsX2Vycm9yc19tYXNrOworLyoweDA3MGUwKi8JdTY0CXBsbF9lcnJvcnNfYWxhcm07CisvKjB4MDcwZTgqLwl1NjQJc3JwY2ltX3RvX21ycGNpbV9hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1RPX01SUENJTV9BTEFSTV9SRUdfUFBJRl9TUlBDSU1fVE9fTVJQQ0lNX0FMQVJNKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDA3MGYwKi8JdTY0CXNycGNpbV90b19tcnBjaW1fYWxhcm1fbWFzazsKKy8qMHgwNzBmOCovCXU2NAlzcnBjaW1fdG9fbXJwY2ltX2FsYXJtX2FsYXJtOworLyoweDA3MTAwKi8JdTY0CXZwYXRoX3RvX21ycGNpbV9hbGFybV9yZWc7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfVE9fTVJQQ0lNX0FMQVJNX1JFR19QUElGX1ZQQVRIX1RPX01SUENJTV9BTEFSTSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNykKKy8qMHgwNzEwOCovCXU2NAl2cGF0aF90b19tcnBjaW1fYWxhcm1fbWFzazsKKy8qMHgwNzExMCovCXU2NAl2cGF0aF90b19tcnBjaW1fYWxhcm1fYWxhcm07CisJdTgJdW51c2VkMDcxMjhbMHgwNzEyOC0weDA3MTE4XTsKKworLyoweDA3MTI4Ki8JdTY0CWNyZHRfZXJyb3JzX3ZwbGFuZV9yZWdbMTddOworI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1ZQTEFORV9SRUdfV1JDUkRUQVJCX1BfSF9DT05TVU1FX0NSRFRfRVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19WUExBTkVfUkVHX1dSQ1JEVEFSQl9QX0RfQ09OU1VNRV9DUkRUX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfQ1JEVF9FUlJPUlNfVlBMQU5FX1JFR19XUkNSRFRBUkJfUF9IX1JFVFVSTl9DUkRUX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1ZQTEFORV9SRUdfV1JDUkRUQVJCX1BfRF9SRVRVUk5fQ1JEVF9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19WUExBTkVfUkVHX1JEQ1JEVEFSQl9OUF9IX0NPTlNVTUVfQ1JEVF9FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19WUExBTkVfUkVHX1JEQ1JEVEFSQl9OUF9IX1JFVFVSTl9DUkRUX0VSUiBcCisJCQkJCQkJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX0NSRFRfRVJST1JTX1ZQTEFORV9SRUdfUkRDUkRUQVJCX1RBR19DT05TVU1FX1RBR19FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19DUkRUX0VSUk9SU19WUExBTkVfUkVHX1JEQ1JEVEFSQl9UQUdfUkVUVVJOX1RBR19FUlIgXAorCQkJCQkJCXZ4Z2VfbUJJVCgzMSkKKy8qMHgwNzEzMCovCXU2NAljcmR0X2Vycm9yc192cGxhbmVfbWFza1sxN107CisvKjB4MDcxMzgqLwl1NjQJY3JkdF9lcnJvcnNfdnBsYW5lX2FsYXJtWzE3XTsKKwl1OAl1bnVzZWQwNzJmMFsweDA3MmYwLTB4MDcyYzBdOworCisvKjB4MDcyZjAqLwl1NjQJbXJwY2ltX3JzdF9pbl9wcm9nOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9SU1RfSU5fUFJPR19NUlBDSU1fUlNUX0lOX1BST0cJdnhnZV9tQklUKDcpCisvKjB4MDcyZjgqLwl1NjQJbXJwY2ltX3JlZ19tb2RpZmllZDsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fUkVHX01PRElGSUVEX01SUENJTV9SRUdfTU9ESUZJRUQJdnhnZV9tQklUKDcpCisKKwl1OAl1bnVzZWQwNzM3OFsweDA3Mzc4LTB4MDczMDBdOworCisvKjB4MDczNzgqLwl1NjQJd3JpdGVfYXJiX3BlbmRpbmc7CisjZGVmaW5lCVZYR0VfSFdfV1JJVEVfQVJCX1BFTkRJTkdfV1JBUkJfV1JETUEJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfV1JJVEVfQVJCX1BFTkRJTkdfV1JBUkJfUlRETUEJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfV1JJVEVfQVJCX1BFTkRJTkdfV1JBUkJfTVNHCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19XUklURV9BUkJfUEVORElOR19XUkFSQl9TVEFUU0IJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1dSSVRFX0FSQl9QRU5ESU5HX1dSQVJCX0lOVENUTAl2eGdlX21CSVQoMTkpCisvKjB4MDczODAqLwl1NjQJcmVhZF9hcmJfcGVuZGluZzsKKyNkZWZpbmUJVlhHRV9IV19SRUFEX0FSQl9QRU5ESU5HX1JEQVJCX1dSRE1BCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JFQURfQVJCX1BFTkRJTkdfUkRBUkJfUlRETUEJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfUkVBRF9BUkJfUEVORElOR19SREFSQl9EQkxHRU4JdnhnZV9tQklUKDExKQorLyoweDA3Mzg4Ki8JdTY0CWRtYWlmX2RtYWRibF9wZW5kaW5nOworI2RlZmluZQlWWEdFX0hXX0RNQUlGX0RNQURCTF9QRU5ESU5HX0RNQUlGX1dSRE1BX1dSCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX0RNQUlGX0RNQURCTF9QRU5ESU5HX0RNQUlGX1dSRE1BX1JECXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX0RNQUlGX0RNQURCTF9QRU5ESU5HX0RNQUlGX1JURE1BX1dSCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX0RNQUlGX0RNQURCTF9QRU5ESU5HX0RNQUlGX1JURE1BX1JECXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0RNQUlGX0RNQURCTF9QRU5ESU5HX0RNQUlGX01TR19XUgl2eGdlX21CSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19ETUFJRl9ETUFEQkxfUEVORElOR19ETUFJRl9TVEFUU19XUgl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19ETUFJRl9ETUFEQkxfUEVORElOR19EQkxHRU5fSU5fUFJPRyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMywgNTEpCisvKjB4MDczOTAqLwl1NjQJd3JjcmR0YXJiX3N0YXR1czBfdnBsYW5lWzE3XTsKKyNkZWZpbmUJVlhHRV9IV19XUkNSRFRBUkJfU1RBVFVTMF9WUExBTkVfV1JDUkRUQVJCX0FCU19BVkFJTF9QX0godmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgOCkKKy8qMHgwNzQxOCovCXU2NAl3cmNyZHRhcmJfc3RhdHVzMV92cGxhbmVbMTddOworI2RlZmluZQlWWEdFX0hXX1dSQ1JEVEFSQl9TVEFUVVMxX1ZQTEFORV9XUkNSRFRBUkJfQUJTX0FWQUlMX1BfRCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0LCAxMikKKwl1OAl1bnVzZWQwNzUwMFsweDA3NTAwLTB4MDc0YTBdOworCisvKjB4MDc1MDAqLwl1NjQJbXJwY2ltX2dlbmVyYWxfY2ZnMTsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcxX0NMRUFSX1NFUlIJdnhnZV9tQklUKDcpCisvKjB4MDc1MDgqLwl1NjQJbXJwY2ltX2dlbmVyYWxfY2ZnMjsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX0lOU19UWF9XUl9URAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX0lOU19UWF9SRF9URAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX0lOU19UWF9DUExfVEQJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfSU5JX1RJTUVPVVRfRU5fTVdSCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX0lOSV9USU1FT1VUX0VOX01SRAl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHMl9JR05PUkVfVlBBVEhfUlNUX0ZPUl9NU0lYCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX0ZMQVNIX1JFQURfTVNCCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX0RJU19IT1NUX1BJUEVMSU5FX1dSCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX01SUENJTV9TVEFUU19FTkFCTEUJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfTVJQQ0lNX1NUQVRTX01BUF9UT19WUEFUSCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0NywgNSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX0VOX0JMT0NLX01TSVhfRFVFX1RPX1NFUlIJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzJfRk9SQ0VfU0VORElOR19JTlRBCXZ4Z2VfbUJJVCg1OSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkcyX0RJU19TV0lGX1BST1RfT05fUkRTCXZ4Z2VfbUJJVCg2MykKKy8qMHgwNzUxMCovCXU2NAltcnBjaW1fZ2VuZXJhbF9jZmczOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzNfUFJPVEVDVElPTl9DQV9PUl9VTlNVUE4JdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHM19JTExFR0FMX1JEX0NBX09SX1VOU1VQTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkczX1JEX0JZVEVfU1dBUEVOCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzNfUkRfQklUX0ZMSVBFTgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHM19XUl9CWVRFX1NXQVBFTgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHM19XUl9CSVRfRkxJUEVOCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUgVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkczX01SX01BWF9NVkZTKHZhbCkgdnhnZV92QklUKHZhbCwgMjAsIDE2KQorI2RlZmluZQlWWEdFX0hXX01SUENJTV9HRU5FUkFMX0NGRzNfTVJfTVZGX1RCTF9TSVpFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkczX1BGMF9TV19SRVNFVF9FTgl2eGdlX21CSVQoNTUpCisjZGVmaW5lIFZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHM19SRUdfTU9ESUZJRURfQ0ZHKHZhbCkgdnhnZV92QklUKHZhbCwgNTYsIDIpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0dFTkVSQUxfQ0ZHM19DUExfRUNDX0VOQUJMRV9OCXZ4Z2VfbUJJVCg1OSkKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fR0VORVJBTF9DRkczX0JZUEFTU19EQUlTWV9DSEFJTgl2eGdlX21CSVQoNjMpCisvKjB4MDc1MTgqLwl1NjQJbXJwY2ltX3N0YXRzX3N0YXJ0X2hvc3RfYWRkcjsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fU1RBVFNfU1RBUlRfSE9TVF9BRERSX01SUENJTV9TVEFUU19TVEFSVF9IT1NUX0FERFIodmFsKVwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA1NykKKworCXU4CXVudXNlZDA3OTUwWzB4MDc5NTAtMHgwNzUyMF07CisKKy8qMHgwNzk1MCovCXU2NAlyZGNyZHRhcmJfY2ZnMDsKKyNkZWZpbmUgVlhHRV9IV19SRENSRFRBUkJfQ0ZHMF9SREFfTUFYX09VVFNUQU5ESU5HX1JEUyh2YWwpIFwKKwkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE4LCA2KQorI2RlZmluZSBWWEdFX0hXX1JEQ1JEVEFSQl9DRkcwX1BEQV9NQVhfT1VUU1RBTkRJTkdfUkRTKHZhbCkgXAorCQkJCQkJdnhnZV92QklUKHZhbCwgMjYsIDYpCisjZGVmaW5lIFZYR0VfSFdfUkRDUkRUQVJCX0NGRzBfREJMR0VOX01BWF9PVVRTVEFORElOR19SRFModmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNCwgNikKKyNkZWZpbmUgVlhHRV9IV19SRENSRFRBUkJfQ0ZHMF9XQUlUX0NOVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCA0KQorI2RlZmluZSBWWEdFX0hXX1JEQ1JEVEFSQl9DRkcwX01BWF9PVVRTVEFORElOR19SRFModmFsKSB2eGdlX3ZCSVQodmFsLCA1NCwgNikKKyNkZWZpbmUJVlhHRV9IV19SRENSRFRBUkJfQ0ZHMF9FTl9YT04JdnhnZV9tQklUKDYzKQorCXU4CXVudXNlZDA3YmU4WzB4MDdiZTgtMHgwNzk1OF07CisKKy8qMHgwN2JlOCovCXU2NAliZl9zd19yZXNldDsKKyNkZWZpbmUgVlhHRV9IV19CRl9TV19SRVNFVF9CRl9TV19SRVNFVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisvKjB4MDdiZjAqLwl1NjQJc3dfcmVzZXRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1NXX1JFU0VUX1NUQVRVU19SRVNFVF9DTVBMVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19TV19SRVNFVF9TVEFUVVNfSU5JVF9DTVBMVAl2eGdlX21CSVQoMTUpCisJdTgJdW51c2VkMDdkMzBbMHgwN2QzMC0weDA3YmY4XTsKKworLyoweDA3ZDMwKi8JdTY0CW1ycGNpbV9kZWJ1Z19zdGF0czA7CisjZGVmaW5lIFZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTMF9JTklfV1JfRFJPUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZSBWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzBfSU5JX1JEX0RST1AodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDdkMzgqLwl1NjQJbXJwY2ltX2RlYnVnX3N0YXRzMV92cGxhbmVbMTddOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9ERUJVR19TVEFUUzFfVlBMQU5FX1dSQ1JEVEFSQl9QSF9DUkRUX0RFUExFVEVEKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwN2RjMCovCXU2NAltcnBjaW1fZGVidWdfc3RhdHMyX3ZwbGFuZVsxN107CisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTMl9WUExBTkVfV1JDUkRUQVJCX1BEX0NSRFRfREVQTEVURUQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDA3ZTQ4Ki8JdTY0CW1ycGNpbV9kZWJ1Z19zdGF0czNfdnBsYW5lWzE3XTsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fREVCVUdfU1RBVFMzX1ZQTEFORV9SRENSRFRBUkJfTlBIX0NSRFRfREVQTEVURUQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDA3ZWQwKi8JdTY0CW1ycGNpbV9kZWJ1Z19zdGF0czQ7CisjZGVmaW5lIFZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTNF9JTklfV1JfVlBJTl9EUk9QKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfTVJQQ0lNX0RFQlVHX1NUQVRTNF9JTklfUkRfVlBJTl9EUk9QKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwN2VkOCovCXU2NAlnZW5zdGF0c19jb3VudDAxOworI2RlZmluZSBWWEdFX0hXX0dFTlNUQVRTX0NPVU5UMDFfR0VOU1RBVFNfQ09VTlQxKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lIFZYR0VfSFdfR0VOU1RBVFNfQ09VTlQwMV9HRU5TVEFUU19DT1VOVDAodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDdlZTAqLwl1NjQJZ2Vuc3RhdHNfY291bnQyMzsKKyNkZWZpbmUgVlhHRV9IV19HRU5TVEFUU19DT1VOVDIzX0dFTlNUQVRTX0NPVU5UMyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorI2RlZmluZSBWWEdFX0hXX0dFTlNUQVRTX0NPVU5UMjNfR0VOU1RBVFNfQ09VTlQyKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDA3ZWU4Ki8JdTY0CWdlbnN0YXRzX2NvdW50NDsKKyNkZWZpbmUgVlhHRV9IV19HRU5TVEFUU19DT1VOVDRfR0VOU1RBVFNfQ09VTlQ0KHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDA3ZWYwKi8JdTY0CWdlbnN0YXRzX2NvdW50NTsKKyNkZWZpbmUgVlhHRV9IV19HRU5TVEFUU19DT1VOVDVfR0VOU1RBVFNfQ09VTlQ1KHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorCisJdTgJdW51c2VkMDdmMDhbMHgwN2YwOC0weDA3ZWY4XTsKKworLyoweDA3ZjA4Ki8JdTY0CWdlbnN0YXRzX2NmZ1s2XTsKKyNkZWZpbmUgVlhHRV9IV19HRU5TVEFUU19DRkdfRFRZUEVfU0VMKHZhbCkgdnhnZV92QklUKHZhbCwgMywgNSkKKyNkZWZpbmUgVlhHRV9IV19HRU5TVEFUU19DRkdfQ0xJRU5UX05PX1NFTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDksIDMpCisjZGVmaW5lIFZYR0VfSFdfR0VOU1RBVFNfQ0ZHX1dSX1JEX0NQTF9TRUwodmFsKSB2eGdlX3ZCSVQodmFsLCAxNCwgMikKKyNkZWZpbmUgVlhHRV9IV19HRU5TVEFUU19DRkdfVlBBVEhfU0VMKHZhbCkgdnhnZV92QklUKHZhbCwgMzEsIDE3KQorLyoweDA3ZjM4Ki8JdTY0CWdlbnN0YXRfNjRiaXRfY2ZnOworI2RlZmluZQlWWEdFX0hXX0dFTlNUQVRfNjRCSVRfQ0ZHX0VOX0ZPUl9HRU5TVEFUUzAJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfR0VOU1RBVF82NEJJVF9DRkdfRU5fRk9SX0dFTlNUQVRTMgl2eGdlX21CSVQoNykKKwl1OAl1bnVzZWQwODAwMFsweDA4MDAwLTB4MDdmNDBdOworLyoweDA4MDAwKi8JdTY0CWdjbWczX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfR0NNRzNfSU5UX1NUQVRVU19HU1RDX0VSUjBfR1NUQzBfSU5UCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX0dDTUczX0lOVF9TVEFUVVNfR1NUQ19FUlIxX0dTVEMxX0lOVAl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19HQ01HM19JTlRfU1RBVFVTX0dIMkxfRVJSMF9HSDJMMF9JTlQJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzNfSU5UX1NUQVRVU19HSFNRX0VSUl9HSDJMMV9JTlQJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfR0NNRzNfSU5UX1NUQVRVU19HSFNRX0VSUjJfR0gyTDJfSU5UCXZ4Z2VfbUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX0dDTUczX0lOVF9TVEFUVVNfR0gyTF9TTUVSUjBfR0gyTDNfSU5UCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX0dDTUczX0lOVF9TVEFUVVNfR0hTUV9FUlIzX0dIMkw0X0lOVAl2eGdlX21CSVQoNikKKy8qMHgwODAwOCovCXU2NAlnY21nM19pbnRfbWFzazsKKwl1OAl1bnVzZWQwOTAwMFsweDA5MDAwLTB4ODAxMF07CisKKy8qMHgwOTAwMCovCXU2NAlnM2lmY21kX2ZiX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfRzNJRkNNRF9GQl9JTlRfU1RBVFVTX0VSUl9HM0lGX0lOVAl2eGdlX21CSVQoMCkKKy8qMHgwOTAwOCovCXU2NAlnM2lmY21kX2ZiX2ludF9tYXNrOworLyoweDA5MDEwKi8JdTY0CWczaWZjbWRfZmJfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19HM0lGQ01EX0ZCX0VSUl9SRUdfRzNJRl9DS19ETExfTE9DSwl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19HM0lGQ01EX0ZCX0VSUl9SRUdfRzNJRl9TTV9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfRzNJRkNNRF9GQl9FUlJfUkVHX0czSUZfUldEUVNfRExMX0xPQ0sodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNCwgOCkKKyNkZWZpbmUJVlhHRV9IV19HM0lGQ01EX0ZCX0VSUl9SRUdfRzNJRl9JT0NBTF9GQVVMVAl2eGdlX21CSVQoNTUpCisvKjB4MDkwMTgqLwl1NjQJZzNpZmNtZF9mYl9lcnJfbWFzazsKKy8qMHgwOTAyMCovCXU2NAlnM2lmY21kX2ZiX2Vycl9hbGFybTsKKworCXU4CXVudXNlZDA5NDAwWzB4MDk0MDAtMHgwOTAyOF07CisKKy8qMHgwOTQwMCovCXU2NAlnM2lmY21kX2NtdV9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX0czSUZDTURfQ01VX0lOVF9TVEFUVVNfRVJSX0czSUZfSU5UCXZ4Z2VfbUJJVCgwKQorLyoweDA5NDA4Ki8JdTY0CWczaWZjbWRfY211X2ludF9tYXNrOworLyoweDA5NDEwKi8JdTY0CWczaWZjbWRfY211X2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfRzNJRkNNRF9DTVVfRVJSX1JFR19HM0lGX0NLX0RMTF9MT0NLCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX0czSUZDTURfQ01VX0VSUl9SRUdfRzNJRl9TTV9FUlIJdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfRzNJRkNNRF9DTVVfRVJSX1JFR19HM0lGX1JXRFFTX0RMTF9MT0NLKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI0LCA4KQorI2RlZmluZQlWWEdFX0hXX0czSUZDTURfQ01VX0VSUl9SRUdfRzNJRl9JT0NBTF9GQVVMVAl2eGdlX21CSVQoNTUpCisvKjB4MDk0MTgqLwl1NjQJZzNpZmNtZF9jbXVfZXJyX21hc2s7CisvKjB4MDk0MjAqLwl1NjQJZzNpZmNtZF9jbXVfZXJyX2FsYXJtOworCisJdTgJdW51c2VkMDk4MDBbMHgwOTgwMC0weDA5NDI4XTsKKworLyoweDA5ODAwKi8JdTY0CWczaWZjbWRfY21sX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfRzNJRkNNRF9DTUxfSU5UX1NUQVRVU19FUlJfRzNJRl9JTlQJdnhnZV9tQklUKDApCisvKjB4MDk4MDgqLwl1NjQJZzNpZmNtZF9jbWxfaW50X21hc2s7CisvKjB4MDk4MTAqLwl1NjQJZzNpZmNtZF9jbWxfZXJyX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19HM0lGQ01EX0NNTF9FUlJfUkVHX0czSUZfQ0tfRExMX0xPQ0sJdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfRzNJRkNNRF9DTUxfRVJSX1JFR19HM0lGX1NNX0VSUgl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19HM0lGQ01EX0NNTF9FUlJfUkVHX0czSUZfUldEUVNfRExMX0xPQ0sodmFsKSBcCisJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNCwgOCkKKyNkZWZpbmUJVlhHRV9IV19HM0lGQ01EX0NNTF9FUlJfUkVHX0czSUZfSU9DQUxfRkFVTFQJdnhnZV9tQklUKDU1KQorLyoweDA5ODE4Ki8JdTY0CWczaWZjbWRfY21sX2Vycl9tYXNrOworLyoweDA5ODIwKi8JdTY0CWczaWZjbWRfY21sX2Vycl9hbGFybTsKKwl1OAl1bnVzZWQwOWIwMFsweDA5YjAwLTB4MDk4MjhdOworCisvKjB4MDliMDAqLwl1NjQJdnBhdGhfdG9fdnBsYW5lX21hcFsxN107CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfVE9fVlBMQU5FX01BUF9WUEFUSF9UT19WUExBTkVfTUFQKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisJdTgJdW51c2VkMDljMzBbMHgwOWMzMC0weDA5Yjg4XTsKKworLyoweDA5YzMwKi8JdTY0CXhneHNfY2ZnX3BvcnRbMl07CisjZGVmaW5lIFZYR0VfSFdfWEdYU19DRkdfUE9SVF9TSUdfREVURUNUX0ZPUkNFX0xPUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCA0KQorI2RlZmluZSBWWEdFX0hXX1hHWFNfQ0ZHX1BPUlRfU0lHX0RFVEVDVF9GT1JDRV9WQUxJRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIwLCA0KQorI2RlZmluZQlWWEdFX0hXX1hHWFNfQ0ZHX1BPUlRfU0VMX0lORk9fMAl2eGdlX21CSVQoMjcpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19DRkdfUE9SVF9TRUxfSU5GT18xKHZhbCkgdnhnZV92QklUKHZhbCwgMjksIDMpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19DRkdfUE9SVF9UWF9MQU5FMF9TS0VXKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDQpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19DRkdfUE9SVF9UWF9MQU5FMV9TS0VXKHZhbCkgdnhnZV92QklUKHZhbCwgMzYsIDQpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19DRkdfUE9SVF9UWF9MQU5FMl9TS0VXKHZhbCkgdnhnZV92QklUKHZhbCwgNDAsIDQpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19DRkdfUE9SVF9UWF9MQU5FM19TS0VXKHZhbCkgdnhnZV92QklUKHZhbCwgNDQsIDQpCisvKjB4MDljNDAqLwl1NjQJeGd4c19yeGJlcl9jZmdfcG9ydFsyXTsKKyNkZWZpbmUgVlhHRV9IV19YR1hTX1JYQkVSX0NGR19QT1JUX0lOVEVSVkFMX0RVUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDQpCisjZGVmaW5lCVZYR0VfSFdfWEdYU19SWEJFUl9DRkdfUE9SVF9SWEdYU19JTlRFUlZBTF9DTlQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDQ4KQorLyoweDA5YzUwKi8JdTY0CXhneHNfcnhiZXJfc3RhdHVzX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfWEdYU19SWEJFUl9TVEFUVVNfUE9SVF9SWEdYU19SWEdYU19MQU5FX0FfRVJSX0NOVCh2YWwpCVwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUJVlhHRV9IV19YR1hTX1JYQkVSX1NUQVRVU19QT1JUX1JYR1hTX1JYR1hTX0xBTkVfQl9FUlJfQ05UKHZhbCkJXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19YR1hTX1JYQkVSX1NUQVRVU19QT1JUX1JYR1hTX1JYR1hTX0xBTkVfQ19FUlJfQ05UKHZhbCkJXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKyNkZWZpbmUJVlhHRV9IV19YR1hTX1JYQkVSX1NUQVRVU19QT1JUX1JYR1hTX1JYR1hTX0xBTkVfRF9FUlJfQ05UKHZhbCkJXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwOWM2MCovCXU2NAl4Z3hzX3N0YXR1c19wb3J0WzJdOworI2RlZmluZSBWWEdFX0hXX1hHWFNfU1RBVFVTX1BPUlRfWE1BQ0pfUENTX1RYX0FDVElWSVRZKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNCkKKyNkZWZpbmUgVlhHRV9IV19YR1hTX1NUQVRVU19QT1JUX1hNQUNKX1BDU19SWF9BQ1RJVklUWSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQsIDQpCisjZGVmaW5lCVZYR0VfSFdfWEdYU19TVEFUVVNfUE9SVF9YTUFDSl9QQ1NfQ1RDX0ZJRk9fRVJSCUJJVCgxMSkKKyNkZWZpbmUgVlhHRV9IV19YR1hTX1NUQVRVU19QT1JUX1hNQUNKX1BDU19CWVRFX1NZTkNfTE9TVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxMiwgNCkKKyNkZWZpbmUgVlhHRV9IV19YR1hTX1NUQVRVU19QT1JUX1hNQUNKX1BDU19DVENfRVJSKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDQpCisjZGVmaW5lCVZYR0VfSFdfWEdYU19TVEFUVVNfUE9SVF9YTUFDSl9QQ1NfQUxJR05NRU5UX0VSUgl2eGdlX21CSVQoMjMpCisjZGVmaW5lIFZYR0VfSFdfWEdYU19TVEFUVVNfUE9SVF9YTUFDSl9QQ1NfREVDX0VSUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI0LCA4KQorI2RlZmluZSBWWEdFX0hXX1hHWFNfU1RBVFVTX1BPUlRfWE1BQ0pfUENTX1NLSVBfSU5TX1JFUSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgNCkKKyNkZWZpbmUgVlhHRV9IV19YR1hTX1NUQVRVU19QT1JUX1hNQUNKX1BDU19TS0lQX0RFTF9SRVEodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzYsIDQpCisvKjB4MDljNzAqLwl1NjQJeGd4c19wbWFfcmVzZXRfcG9ydFsyXTsKKyNkZWZpbmUgVlhHRV9IV19YR1hTX1BNQV9SRVNFVF9QT1JUX1NFUkRFU19SRVNFVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisJdTgJdW51c2VkMDljOTBbMHgwOWM5MC0weDA5YzgwXTsKKworLyoweDA5YzkwKi8JdTY0CXhneHNfc3RhdGljX2NmZ19wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX1hHWFNfU1RBVElDX0NGR19QT1JUX0ZXX0NUUkxfU0VSREVTCXZ4Z2VfbUJJVCgzKQorCXU4CXVudXNlZDA5ZDQwWzB4MDlkNDAtMHgwOWNhMF07CisKKy8qMHgwOWQ0MCovCXU2NAl4Z3hzX2luZm9fcG9ydFsyXTsKKyNkZWZpbmUgVlhHRV9IV19YR1hTX0lORk9fUE9SVF9YTUFDSl9JTkZPXzAodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUgVlhHRV9IV19YR1hTX0lORk9fUE9SVF9YTUFDSl9JTkZPXzEodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDlkNTAqLwl1NjQJcmF0ZW1nbXRfY2ZnX3BvcnRbMl07CisjZGVmaW5lIFZYR0VfSFdfUkFURU1HTVRfQ0ZHX1BPUlRfTU9ERSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIsIDIpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQ0ZHX1BPUlRfUkFURQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9DRkdfUE9SVF9GSVhFRF9VU0VfRlNNCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9DRkdfUE9SVF9BTlRQX1VTRV9GU00JdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0NGR19QT1JUX0FOQkVfVVNFX0ZTTQl2eGdlX21CSVQoMTkpCisvKjB4MDlkNjAqLwl1NjQJcmF0ZW1nbXRfc3RhdHVzX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfU1RBVFVTX1BPUlRfUkFURU1HTVRfQ09NUExFVEUJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfU1RBVFVTX1BPUlRfUkFURU1HTVRfUkFURQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9NQUNfTUFUQ0hFU19QSFkJdnhnZV9tQklUKDExKQorCXU4CXVudXNlZDA5ZDgwWzB4MDlkODAtMHgwOWQ3MF07CisKKy8qMHgwOWQ4MCovCXU2NAlyYXRlbWdtdF9maXhlZF9jZmdfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9GSVhFRF9DRkdfUE9SVF9SRVNUQVJUCXZ4Z2VfbUJJVCg3KQorLyoweDA5ZDkwKi8JdTY0CXJhdGVtZ210X2FudHBfY2ZnX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQU5UUF9DRkdfUE9SVF9SRVNUQVJUCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0FOVFBfQ0ZHX1BPUlRfVVNFX1BSRUFNQkxFX0VYVF9QSFkJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0FOVFBfQ0ZHX1BPUlRfVVNFX0FDVF9TRUwJdnhnZV9tQklUKDE1KQorI2RlZmluZSBWWEdFX0hXX1JBVEVNR01UX0FOVFBfQ0ZHX1BPUlRfVF9SRVRSWV9QSFlfUVVFUlkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDQpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQU5UUF9DRkdfUE9SVF9UX1dBSVRfTURJT19SRVNQT05TRSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyMCwgNCkKKyNkZWZpbmUJVlhHRV9IV19SQVRFTUdNVF9BTlRQX0NGR19QT1JUX1RfTERPV05fUkVBVVRPX1JFU1BPTlNFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI0LCA0KQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0FOVFBfQ0ZHX1BPUlRfQURWRVJUSVNFXzEwRwl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQU5UUF9DRkdfUE9SVF9BRFZFUlRJU0VfMUcJdnhnZV9tQklUKDM1KQorLyoweDA5ZGEwKi8JdTY0CXJhdGVtZ210X2FuYmVfY2ZnX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQU5CRV9DRkdfUE9SVF9SRVNUQVJUCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0FOQkVfQ0ZHX1BPUlRfUEFSQUxMRUxfREVURUNUXzEwR19LWDRfRU5BQkxFIFwKKwkJCQkJCQkJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1JBVEVNR01UX0FOQkVfQ0ZHX1BPUlRfUEFSQUxMRUxfREVURUNUXzFHX0tYX0VOQUJMRSBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUgVlhHRV9IV19SQVRFTUdNVF9BTkJFX0NGR19QT1JUX1RfU1lOQ18xMEdfS1g0KHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDQpCisjZGVmaW5lIFZYR0VfSFdfUkFURU1HTVRfQU5CRV9DRkdfUE9SVF9UX1NZTkNfMUdfS1godmFsKSB2eGdlX3ZCSVQodmFsLCAyMCwgNCkKKyNkZWZpbmUgVlhHRV9IV19SQVRFTUdNVF9BTkJFX0NGR19QT1JUX1RfRE1FX0VYQ0hBTkdFKHZhbCkgdnhnZV92QklUKHZhbCwgMjQsIDQpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQU5CRV9DRkdfUE9SVF9BRFZFUlRJU0VfMTBHX0tYNAl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfUkFURU1HTVRfQU5CRV9DRkdfUE9SVF9BRFZFUlRJU0VfMUdfS1gJdnhnZV9tQklUKDM1KQorLyoweDA5ZGIwKi8JdTY0CWFuYmVfY2ZnX3BvcnRbMl07CisjZGVmaW5lIFZYR0VfSFdfQU5CRV9DRkdfUE9SVF9SRVNFVF9DRkdfUkVHUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisjZGVmaW5lIFZYR0VfSFdfQU5CRV9DRkdfUE9SVF9BTElHTl8xMEdfS1g0X09WRVJSSURFKHZhbCkgdnhnZV92QklUKHZhbCwgMTAsIDIpCisjZGVmaW5lIFZYR0VfSFdfQU5CRV9DRkdfUE9SVF9TWU5DXzFHX0tYX09WRVJSSURFKHZhbCkgdnhnZV92QklUKHZhbCwgMTQsIDIpCisvKjB4MDlkYzAqLwl1NjQJYW5iZV9tZ3JfY3RybF9wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX0FOQkVfTUdSX0NUUkxfUE9SVF9XRQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19BTkJFX01HUl9DVFJMX1BPUlRfU1RST0JFCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX0FOQkVfTUdSX0NUUkxfUE9SVF9BRERSKHZhbCkgdnhnZV92QklUKHZhbCwgMTUsIDkpCisjZGVmaW5lIFZYR0VfSFdfQU5CRV9NR1JfQ1RSTF9QT1JUX0RBVEEodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisJdTgJdW51c2VkMDlkZTBbMHgwOWRlMC0weDA5ZGQwXTsKKworLyoweDA5ZGUwKi8JdTY0CWFuYmVfZndfbXN0cl9wb3J0WzJdOworI2RlZmluZQlWWEdFX0hXX0FOQkVfRldfTVNUUl9QT1JUX0NPTk5FQ1RfQkVBTl9UT19TRVJERVMJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9GV19NU1RSX1BPUlRfVFhfWkVST0VTX1RPX1NFUkRFUwl2eGdlX21CSVQoNykKKy8qMHgwOWRmMCovCXU2NAlhbmJlX2h3ZnNtX2dlbl9zdGF0dXNfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9DSE9TRV8xMEdfS1g0X1VTSU5HX1BEIFwKKwkJCQkJCQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9DSE9TRV8xMEdfS1g0X1VTSU5HX0RNRSBcCisJCQkJCQkJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQ0hPU0VfMUdfS1hfVVNJTkdfUEQgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9DSE9TRV8xR19LWF9VU0lOR19ETUUgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9BTkJFRlNNX1NUQVRFKHZhbCkJXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE4LCA2KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0JFQU5fTkVYVF9QQUdFX1JFQ0VJVkVEIFwKKwkJCQkJCQl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQkVBTl9CQVNFX1BBR0VfUkVDRUlWRUQgXAorCQkJCQkJCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CRUFOX0FVVE9ORUdfQ09NUExFVEUgXAorCQkJCQkJCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9VTkVYUEVDVEVEX05QX0JFRk9SRV9CUCBcCisJCQkJCQkJdnhnZV9tQklUKDQzKQorI2RlZmluZQlcCitWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX1VORVhQRUNURURfQU5fQ09NUExFVEVfQkVGT1JFX0JQIFwKKwkJCQkJCQl2eGdlX21CSVQoNDcpCisjZGVmaW5lCVwKK1ZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfVU5FWFBFQ1RFRF9BTl9DT01QTEVURV9CRUZPUkVfTlAgXAordnhnZV9tQklUKDUxKQorI2RlZmluZQlcCitWWEdFX0hXX0FOQkVfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX1VORVhQRUNURURfTU9ERV9XSEVOX0FOX0NPTVBMRVRFIFwKKwkJCQkJCQl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQ09VTlRfQlAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTYsIDQpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQ09VTlRfTlAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNjAsIDQpCisvKjB4MDllMDAqLwl1NjQJYW5iZV9od2ZzbV9icF9zdGF0dXNfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX0ZFQ19FTkFCTEUgXAorCQkJCQkJCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX0ZFQ19BQklMSVRZIFwKKwkJCQkJCQl2eGdlX21CSVQoMzMpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF8xMEdfS1JfQ0FQQUJMRSBcCisJCQkJCQkJdnhnZV9tQklUKDQwKQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfMTBHX0tYNF9DQVBBQkxFIFwKKwkJCQkJCQl2eGdlX21CSVQoNDEpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF8xR19LWF9DQVBBQkxFIFwKKwkJCQkJCQl2eGdlX21CSVQoNDIpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9UWF9OT05DRSh2YWwpCVwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0MywgNSkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX05QCXZ4Z2VfbUJJVCg0OCkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX0FDSwl2eGdlX21CSVQoNDkpCisjZGVmaW5lCVZYR0VfSFdfQU5CRV9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9SRU1PVEVfRkFVTFQgXAorCQkJCQkJCXZ4Z2VfbUJJVCg1MCkKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX0FTTV9ESVIJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfUEFVU0UJdnhnZV9tQklUKDUzKQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfRUNIT0VEX05PTkNFKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU0LCA1KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfU0VMRUNUT1JfRklFTEQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNTksIDUpCisvKjB4MDllMTAqLwl1NjQJYW5iZV9od2ZzbV9ucF9zdGF0dXNfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19BTkJFX0hXRlNNX05QX1NUQVRVU19QT1JUX1JBVEVNR01UX05QX0JJVFNfNDdfVE9fMzIodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX0FOQkVfSFdGU01fTlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfTlBfQklUU18zMV9UT18wKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKwl1OAl1bnVzZWQwOWUzMFsweDA5ZTMwLTB4MDllMjBdOworCisvKjB4MDllMzAqLwl1NjQJYW50cF9nZW5fY2ZnX3BvcnRbMl07CisvKjB4MDllNDAqLwl1NjQJYW50cF9od2ZzbV9nZW5fc3RhdHVzX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQ0hPU0VfMTBHCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0NIT1NFXzFHCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0FOVFBGU01fU1RBVEUodmFsKQlcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTAsIDYpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfQVVUT05FR19DT01QTEVURSBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9VTkVYUEVDVEVEX05PX0xQX1hOUCBcCisJCQkJCQkJdnhnZV9tQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX0dPVF9MUF9YTlAJdnhnZV9tQklUKDMxKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX1VORVhQRUNURURfTUVTU0FHRV9DT0RFIFwKKwkJCQkJCQl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfVU5FWFBFQ1RFRF9OT19IQ0QgXAorCQkJCQkJCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0dFTl9TVEFUVVNfUE9SVF9SQVRFTUdNVF9GT1VORF9IQ0QJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fR0VOX1NUQVRVU19QT1JUX1JBVEVNR01UX1VORVhQRUNURURfSU5WQUxJRF9SQVRFIFwKKwkJCQkJCQl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfVkFMSURfUkFURQl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9HRU5fU1RBVFVTX1BPUlRfUkFURU1HTVRfUEVSU0lTVEVOVF9MRE9XTiBcCisJCQkJCQkJdnhnZV9tQklUKDU5KQorLyoweDA5ZTUwKi8JdTY0CWFudHBfaHdmc21fYnBfc3RhdHVzX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9CUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9CUF9OUAl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX0FDSwl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX0JQX1NUQVRVU19QT1JUX1JBVEVNR01UX0JQX1JGCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfWE5QCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfQUJJTElUWV9GSUVMRCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0LCA3KQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fQlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfQlBfU0VMRUNUT1JfRklFTEQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTEsIDUpCisvKjB4MDllNjAqLwl1NjQJYW50cF9od2ZzbV94bnBfc3RhdHVzX3BvcnRbMl07CisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9YTlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfWE5QX05QCXZ4Z2VfbUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fWE5QX1NUQVRVU19QT1JUX1JBVEVNR01UX1hOUF9BQ0sJdnhnZV9tQklUKDEpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9YTlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfWE5QX01QCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fWE5QX1NUQVRVU19QT1JUX1JBVEVNR01UX1hOUF9BQ0syCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0FOVFBfSFdGU01fWE5QX1NUQVRVU19QT1JUX1JBVEVNR01UX1hOUF9UT0dHTEUJdnhnZV9tQklUKDQpCisjZGVmaW5lCVZYR0VfSFdfQU5UUF9IV0ZTTV9YTlBfU1RBVFVTX1BPUlRfUkFURU1HTVRfWE5QX01FU1NBR0VfQ09ERSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1LCAxMSkKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX1hOUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9YTlBfVU5GX0NPREVfRklFTEQxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUJVlhHRV9IV19BTlRQX0hXRlNNX1hOUF9TVEFUVVNfUE9SVF9SQVRFTUdNVF9YTlBfVU5GX0NPREVfRklFTEQyKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKy8qMHgwOWU3MCovCXU2NAltZGlvX21ncl9hY2Nlc3NfcG9ydFsyXTsKKyNkZWZpbmUJVlhHRV9IV19NRElPX01HUl9BQ0NFU1NfUE9SVF9TVFJPQkVfT05FCUJJVCgzKQorI2RlZmluZSBWWEdFX0hXX01ESU9fTUdSX0FDQ0VTU19QT1JUX09QX1RZUEUodmFsKSB2eGdlX3ZCSVQodmFsLCA1LCAzKQorI2RlZmluZSBWWEdFX0hXX01ESU9fTUdSX0FDQ0VTU19QT1JUX0RFVkFEKHZhbCkgdnhnZV92QklUKHZhbCwgMTEsIDUpCisjZGVmaW5lIFZYR0VfSFdfTURJT19NR1JfQUNDRVNTX1BPUlRfQUREUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKyNkZWZpbmUgVlhHRV9IV19NRElPX01HUl9BQ0NFU1NfUE9SVF9EQVRBKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDE2KQorI2RlZmluZSBWWEdFX0hXX01ESU9fTUdSX0FDQ0VTU19QT1JUX1NUX1BBVFRFUk4odmFsKSB2eGdlX3ZCSVQodmFsLCA0OSwgMikKKyNkZWZpbmUJVlhHRV9IV19NRElPX01HUl9BQ0NFU1NfUE9SVF9QUkVBTUJMRQl2eGdlX21CSVQoNTEpCisjZGVmaW5lIFZYR0VfSFdfTURJT19NR1JfQUNDRVNTX1BPUlRfUFJUQUQodmFsKSB2eGdlX3ZCSVQodmFsLCA1NSwgNSkKKyNkZWZpbmUJVlhHRV9IV19NRElPX01HUl9BQ0NFU1NfUE9SVF9TVFJPQkVfVFdPCXZ4Z2VfbUJJVCg2MykKKwl1OAl1bnVzZWQwYTIwMFsweDBhMjAwLTB4MDllODBdOworLyoweDBhMjAwKi8JdTY0CXhtYWNfdnNwb3J0X2Nob2ljZXNfdmhbMTddOworI2RlZmluZSBWWEdFX0hXX1hNQUNfVlNQT1JUX0NIT0lDRVNfVkhfVlNQT1JUX1ZFQ1RPUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorCXU4CXVudXNlZDBhNDAwWzB4MGE0MDAtMHgwYTI4OF07CisKKy8qMHgwYTQwMCovCXU2NAlyeF90aHJlc2hfY2ZnX3ZwWzE3XTsKKyNkZWZpbmUgVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1ZQX1BBVVNFX0xPV19USFIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorI2RlZmluZSBWWEdFX0hXX1JYX1RIUkVTSF9DRkdfVlBfUEFVU0VfSElHSF9USFIodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA4KQorI2RlZmluZSBWWEdFX0hXX1JYX1RIUkVTSF9DRkdfVlBfUkVEX1RIUl8wKHZhbCkgdnhnZV92QklUKHZhbCwgMTYsIDgpCisjZGVmaW5lIFZYR0VfSFdfUlhfVEhSRVNIX0NGR19WUF9SRURfVEhSXzEodmFsKSB2eGdlX3ZCSVQodmFsLCAyNCwgOCkKKyNkZWZpbmUgVlhHRV9IV19SWF9USFJFU0hfQ0ZHX1ZQX1JFRF9USFJfMih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorI2RlZmluZSBWWEdFX0hXX1JYX1RIUkVTSF9DRkdfVlBfUkVEX1RIUl8zKHZhbCkgdnhnZV92QklUKHZhbCwgNDAsIDgpCisJdTgJdW51c2VkMGFjOTBbMHgwYWM5MC0weDBhNDg4XTsKK30gX19wYWNrZWQ7CisKKy8qVlhHRV9IV19TUlBDSU1fUkVHU19IKi8KK3N0cnVjdCB2eGdlX2h3X3NycGNpbV9yZWcgeworCisvKjB4MDAwMDAqLwl1NjQJdGltX21yMnNyX3Jlc291cmNlX2Fzc2lnbm1lbnRfdmg7CisjZGVmaW5lCVZYR0VfSFdfVElNX01SMlNSX1JFU09VUkNFX0FTU0lHTk1FTlRfVkhfQk1BUF9ST09UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorCXU4CXVudXNlZDAwMTAwWzB4MDAxMDAtMHgwMDAwOF07CisKKy8qMHgwMDEwMCovCXU2NAlzcnBjaW1fcGNpcGlmX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1BDSVBJRl9JTlRfU1RBVFVTX01SUENJTV9NU0dfTVJQQ0lNX01TR19JTlQJQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1BDSVBJRl9JTlRfU1RBVFVTX1ZQQVRIX01TR19WUEFUSF9NU0dfSU5UCUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9QQ0lQSUZfSU5UX1NUQVRVU19TUlBDSU1fU1BBUkVfUjFfU1JQQ0lNX1NQQVJFX1IxX0lOVCBcCisJCQkJCQkJCQlCSVQoMTEpCisvKjB4MDAxMDgqLwl1NjQJc3JwY2ltX3BjaXBpZl9pbnRfbWFzazsKKy8qMHgwMDExMCovCXU2NAltcnBjaW1fbXNnX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19NUlBDSU1fTVNHX1JFR19TV0lGX01SUENJTV9UT19TUlBDSU1fUk1TR19JTlQJQklUKDMpCisvKjB4MDAxMTgqLwl1NjQJbXJwY2ltX21zZ19tYXNrOworLyoweDAwMTIwKi8JdTY0CW1ycGNpbV9tc2dfYWxhcm07CisvKjB4MDAxMjgqLwl1NjQJdnBhdGhfbXNnX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEgwX1RPX1NSUENJTV9STVNHX0lOVAlCSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEgxX1RPX1NSUENJTV9STVNHX0lOVAlCSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEgyX1RPX1NSUENJTV9STVNHX0lOVAlCSVQoMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEgzX1RPX1NSUENJTV9STVNHX0lOVAlCSVQoMykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEg0X1RPX1NSUENJTV9STVNHX0lOVAlCSVQoNCkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEg1X1RPX1NSUENJTV9STVNHX0lOVAlCSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEg2X1RPX1NSUENJTV9STVNHX0lOVAlCSVQoNikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEg3X1RPX1NSUENJTV9STVNHX0lOVAlCSVQoNykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEg4X1RPX1NSUENJTV9STVNHX0lOVAlCSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEg5X1RPX1NSUENJTV9STVNHX0lOVAlCSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEgxMF9UT19TUlBDSU1fUk1TR19JTlQJQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDExX1RPX1NSUENJTV9STVNHX0lOVAlCSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIMTJfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEgxM19UT19TUlBDSU1fUk1TR19JTlQJQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX01TR19SRUdfU1dJRl9WUEFUSDE0X1RPX1NSUENJTV9STVNHX0lOVAlCSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfTVNHX1JFR19TV0lGX1ZQQVRIMTVfVE9fU1JQQ0lNX1JNU0dfSU5UCUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9NU0dfUkVHX1NXSUZfVlBBVEgxNl9UT19TUlBDSU1fUk1TR19JTlQJQklUKDE2KQorLyoweDAwMTMwKi8JdTY0CXZwYXRoX21zZ19tYXNrOworLyoweDAwMTM4Ki8JdTY0CXZwYXRoX21zZ19hbGFybTsKKwl1OAl1bnVzZWQwMDE2MFsweDAwMTYwLTB4MDAxNDBdOworCisvKjB4MDAxNjAqLwl1NjQJc3JwY2ltX3RvX21ycGNpbV93bXNnOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9UT19NUlBDSU1fV01TR19TUlBDSU1fVE9fTVJQQ0lNX1dNU0codmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAxNjgqLwl1NjQJc3JwY2ltX3RvX21ycGNpbV93bXNnX3RyaWc7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1RPX01SUENJTV9XTVNHX1RSSUdfU1JQQ0lNX1RPX01SUENJTV9XTVNHX1RSSUcJQklUKDApCisvKjB4MDAxNzAqLwl1NjQJbXJwY2ltX3RvX3NycGNpbV9ybXNnOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9UT19TUlBDSU1fUk1TR19TV0lGX01SUENJTV9UT19TUlBDSU1fUk1TRyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMDE3OCovCXU2NAl2cGF0aF90b19zcnBjaW1fcm1zZ19zZWw7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfVE9fU1JQQ0lNX1JNU0dfU0VMX1ZQQVRIX1RPX1NSUENJTV9STVNHX1NFTCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA1KQorLyoweDAwMTgwKi8JdTY0CXZwYXRoX3RvX3NycGNpbV9ybXNnOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1RPX1NSUENJTV9STVNHX1NXSUZfVlBBVEhfVE9fU1JQQ0lNX1JNU0codmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNjQpCisJdTgJdW51c2VkMDAyMDBbMHgwMDIwMC0weDAwMTg4XTsKKworLyoweDAwMjAwKi8JdTY0CXNycGNpbV9nZW5lcmFsX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTkVSQUxfSU5UX1NUQVRVU19QSUNfSU5UCUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5FUkFMX0lOVF9TVEFUVVNfUENJX0lOVAlCSVQoMykKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VORVJBTF9JTlRfU1RBVFVTX1hNQUNfSU5UCUJJVCg3KQorCXU4CXVudXNlZDAwMjEwWzB4MDAyMTAtMHgwMDIwOF07CisKKy8qMHgwMDIxMCovCXU2NAlzcnBjaW1fZ2VuZXJhbF9pbnRfbWFzazsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VORVJBTF9JTlRfTUFTS19QSUNfSU5UCUJJVCgwKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5FUkFMX0lOVF9NQVNLX1BDSV9JTlQJQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTkVSQUxfSU5UX01BU0tfWE1BQ19JTlQJQklUKDcpCisJdTgJdW51c2VkMDAyMjBbMHgwMDIyMC0weDAwMjE4XTsKKworLyoweDAwMjIwKi8JdTY0CXNycGNpbV9wcGlmX2ludF9zdGF0dXM7CisKKy8qMHgwMDIyOCovCXU2NAlzcnBjaW1fcHBpZl9pbnRfbWFzazsKKy8qMHgwMDIzMCovCXU2NAlzcnBjaW1fZ2VuX2Vycm9yc19yZWc7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTl9FUlJPUlNfUkVHX1BDSUNPTkZJR19QRl9TVEFUVVNfRVJSCUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5fRVJST1JTX1JFR19QQ0lDT05GSUdfUEZfVU5DT1JfRVJSCUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5fRVJST1JTX1JFR19QQ0lDT05GSUdfUEZfQ09SX0VSUglCSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTl9FUlJPUlNfUkVHX0lOVENUUkxfU0NIRURfSU5UCUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VOX0VSUk9SU19SRUdfSU5JX1NFUlJfREVUCUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VOX0VSUk9SU19SRUdfVEdUX1BGX0lMTEVHQUxfQUNDRVNTCUJJVCgyMykKKy8qMHgwMDIzOCovCXU2NAlzcnBjaW1fZ2VuX2Vycm9yc19tYXNrOworLyoweDAwMjQwKi8JdTY0CXNycGNpbV9nZW5fZXJyb3JzX2FsYXJtOworLyoweDAwMjQ4Ki8JdTY0CW1ycGNpbV90b19zcnBjaW1fYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9UT19TUlBDSU1fQUxBUk1fUkVHX1BQSUZfTVJQQ0lNX1RPX1NSUENJTV9BTEFSTQlCSVQoMykKKy8qMHgwMDI1MCovCXU2NAltcnBjaW1fdG9fc3JwY2ltX2FsYXJtX21hc2s7CisvKjB4MDAyNTgqLwl1NjQJbXJwY2ltX3RvX3NycGNpbV9hbGFybV9hbGFybTsKKy8qMHgwMDI2MCovCXU2NAl2cGF0aF90b19zcnBjaW1fYWxhcm1fcmVnOworCisvKjB4MDAyNjgqLwl1NjQJdnBhdGhfdG9fc3JwY2ltX2FsYXJtX21hc2s7CisvKjB4MDAyNzAqLwl1NjQJdnBhdGhfdG9fc3JwY2ltX2FsYXJtX2FsYXJtOworCXU4CXVudXNlZDAwMjgwWzB4MDAyODAtMHgwMDI3OF07CisKKy8qMHgwMDI4MCovCXU2NAlwZl9zd19yZXNldDsKKyNkZWZpbmUgVlhHRV9IV19QRl9TV19SRVNFVF9QRl9TV19SRVNFVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDgpCisvKjB4MDAyODgqLwl1NjQJc3JwY2ltX2dlbmVyYWxfY2ZnMTsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VORVJBTF9DRkcxX0JPT1RfQllURV9TV0FQRU4JQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5FUkFMX0NGRzFfQk9PVF9CSVRfRkxJUEVOCUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VORVJBTF9DRkcxX01TSVhfQUREUl9TV0FQRU4JQklUKDI3KQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9HRU5FUkFMX0NGRzFfTVNJWF9BRERSX0ZMSVBFTglCSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0dFTkVSQUxfQ0ZHMV9NU0lYX0RBVEFfU1dBUEVOCUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fR0VORVJBTF9DRkcxX01TSVhfREFUQV9GTElQRU4JQklUKDM5KQorLyoweDAwMjkwKi8JdTY0CXNycGNpbV9pbnRlcnJ1cHRfY2ZnMTsKKyNkZWZpbmUgVlhHRV9IV19TUlBDSU1fSU5URVJSVVBUX0NGRzFfQUxBUk1fTUFQX1RPX01TRyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEsIDcpCisjZGVmaW5lIFZYR0VfSFdfU1JQQ0lNX0lOVEVSUlVQVF9DRkcxX1RSQUZGSUNfQ0xBU1ModmFsKSB2eGdlX3ZCSVQodmFsLCA5LCAzKQorCXU4CXVudXNlZDAwMmE4WzB4MDAyYTgtMHgwMDI5OF07CisKKy8qMHgwMDJhOCovCXU2NAlzcnBjaW1fY2xlYXJfbXNpeF9tYXNrOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9DTEVBUl9NU0lYX01BU0tfU1JQQ0lNX0NMRUFSX01TSVhfTUFTSwlCSVQoMCkKKy8qMHgwMDJiMCovCXU2NAlzcnBjaW1fc2V0X21zaXhfbWFzazsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fU0VUX01TSVhfTUFTS19TUlBDSU1fU0VUX01TSVhfTUFTSwlCSVQoMCkKKy8qMHgwMDJiOCovCXU2NAlzcnBjaW1fY2xyX21zaXhfb25lX3Nob3Q7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX0NMUl9NU0lYX09ORV9TSE9UX1NSUENJTV9DTFJfTVNJWF9PTkVfU0hPVAlCSVQoMCkKKy8qMHgwMDJjMCovCXU2NAlzcnBjaW1fcnN0X2luX3Byb2c7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1JTVF9JTl9QUk9HX1NSUENJTV9SU1RfSU5fUFJPRwlCSVQoNykKKy8qMHgwMDJjOCovCXU2NAlzcnBjaW1fcmVnX21vZGlmaWVkOworI2RlZmluZQlWWEdFX0hXX1NSUENJTV9SRUdfTU9ESUZJRURfU1JQQ0lNX1JFR19NT0RJRklFRAlCSVQoNykKKy8qMHgwMDJkMCovCXU2NAl0Z3RfcGZfaWxsZWdhbF9hY2Nlc3M7CisjZGVmaW5lIFZYR0VfSFdfVEdUX1BGX0lMTEVHQUxfQUNDRVNTX1NXSUZfUkVHSU9OKHZhbCkgdnhnZV92QklUKHZhbCwgMSwgNykKKy8qMHgwMDJkOCovCXU2NAlzcnBjaW1fbXNpeF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX01TSVhfU1RBVFVTX0lOVENUTF9TUlBDSU1fTVNJWF9NQVNLCUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1NSUENJTV9NU0lYX1NUQVRVU19JTlRDVExfU1JQQ0lNX01TSVhfUEVORElOR19WRUNUT1IJQklUKDcpCisJdTgJdW51c2VkMDA4ODBbMHgwMDg4MC0weDAwMmUwXTsKKworLyoweDAwODgwKi8JdTY0CXhnbWFjX3NyX2ludF9zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfU1JfSU5UX1NUQVRVU19BU0lDX05UV0tfU1JfRVJSX0FTSUNfTlRXS19TUl9JTlQJQklUKDMpCisvKjB4MDA4ODgqLwl1NjQJeGdtYWNfc3JfaW50X21hc2s7CisvKjB4MDA4OTAqLwl1NjQJYXNpY19udHdrX3NyX2Vycl9yZWc7CisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX1NSX0VSUl9SRUdfWE1BQ0pfTlRXS19TVVNUQUlORURfRkFVTFQJQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX1NSX0VSUl9SRUdfWE1BQ0pfTlRXS19TVVNUQUlORURfT0sJQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX1NSX0VSUl9SRUdfWE1BQ0pfTlRXS19TVVNUQUlORURfRkFVTFRfT0NDVVJSRUQgXAorCQkJCQkJCQkJQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19TUl9FUlJfUkVHX1hNQUNKX05UV0tfU1VTVEFJTkVEX09LX09DQ1VSUkVECUJJVCgxNSkKKy8qMHgwMDg5OCovCXU2NAlhc2ljX250d2tfc3JfZXJyX21hc2s7CisvKjB4MDA4YTAqLwl1NjQJYXNpY19udHdrX3NyX2Vycl9hbGFybTsKKwl1OAl1bnVzZWQwMDhjMFsweDAwOGMwLTB4MDA4YThdOworCisvKjB4MDA4YzAqLwl1NjQJeG1hY192c3BvcnRfY2hvaWNlc19zcl9jbG9uZTsKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1ZTUE9SVF9DSE9JQ0VTX1NSX0NMT05FX1ZTUE9SVF9WRUNUT1IodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMTcpCisJdTgJdW51c2VkMDA5MDBbMHgwMDkwMC0weDAwOGM4XTsKKworLyoweDAwOTAwKi8JdTY0CW1yX3JxYV90b3BfcHJ0eV9mb3Jfdmg7CisjZGVmaW5lCVZYR0VfSFdfTVJfUlFBX1RPUF9QUlRZX0ZPUl9WSF9SUUFfVE9QX1BSVFlfRk9SX1ZIKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwOTA4Ki8JdTY0CXVtcV92aF9kYXRhX2xpc3RfZW1wdHk7CisjZGVmaW5lCVZYR0VfSFdfVU1RX1ZIX0RBVEFfTElTVF9FTVBUWV9ST0NSQ19VTVFfVkhfREFUQV9MSVNUX0VNUFRZIFwKKwkJCQkJCQlCSVQoMCkKKy8qMHgwMDkxMCovCXU2NAl3ZGVfY2ZnOworI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMwX0ZPUkNFX01XQl9TVEFSVAlCSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMF9GT1JDRV9NV0JfRU5ECUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMwX0ZPUkNFX1FCX1NUQVJUCUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMwX0ZPUkNFX1FCX0VORAlCSVQoMykKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMF9GT1JDRV9NUFNCX1NUQVJUCUJJVCg0KQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMwX0ZPUkNFX01QU0JfRU5ECUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMwX01XQl9PUFRfRU4JQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzBfUUJfT1BUX0VOCUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMwX01QU0JfT1BUX0VOCUJJVCg4KQorI2RlZmluZQlWWEdFX0hXX1dERV9DRkdfTlMxX0ZPUkNFX01XQl9TVEFSVAlCSVQoOSkKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMV9GT1JDRV9NV0JfRU5ECUJJVCgxMCkKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMV9GT1JDRV9RQl9TVEFSVAlCSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzFfRk9SQ0VfUUJfRU5ECUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMV9GT1JDRV9NUFNCX1NUQVJUCUJJVCgxMykKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMV9GT1JDRV9NUFNCX0VORAlCSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzFfTVdCX09QVF9FTglCSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19OUzFfUUJfT1BUX0VOCUJJVCgxNikKKyNkZWZpbmUJVlhHRV9IV19XREVfQ0ZHX05TMV9NUFNCX09QVF9FTglCSVQoMTcpCisjZGVmaW5lCVZYR0VfSFdfV0RFX0NGR19ESVNBQkxFX1FQQURfRk9SX1VOQUxJR05FRF9BRERSCUJJVCgxOSkKKyNkZWZpbmUgVlhHRV9IV19XREVfQ0ZHX0FMSUdOTUVOVF9QUkVGRVJFTkNFKHZhbCkgdnhnZV92QklUKHZhbCwgMzAsIDIpCisjZGVmaW5lIFZYR0VfSFdfV0RFX0NGR19NRU1fV09SRF9TSVpFKHZhbCkgdnhnZV92QklUKHZhbCwgNDYsIDIpCisKK30gX19wYWNrZWQ7CisKKy8qVlhHRV9IV19WUE1HTVRfUkVHU19IKi8KK3N0cnVjdCB2eGdlX2h3X3ZwbWdtdF9yZWcgeworCisJdTgJdW51c2VkMDAwNDBbMHgwMDA0MC0weDAwMDAwXTsKKworLyoweDAwMDQwKi8JdTY0CXZwYXRoX3RvX2Z1bmNfbWFwX2NmZzE7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfVE9fRlVOQ19NQVBfQ0ZHMV9WUEFUSF9UT19GVU5DX01BUF9DRkcxKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisvKjB4MDAwNDgqLwl1NjQJdnBhdGhfaXNfZmlyc3Q7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfSVNfRklSU1RfVlBBVEhfSVNfRklSU1QJdnhnZV9tQklUKDMpCisvKjB4MDAwNTAqLwl1NjQJc3JwY2ltX3RvX3ZwYXRoX3dtc2c7CisjZGVmaW5lCVZYR0VfSFdfU1JQQ0lNX1RPX1ZQQVRIX1dNU0dfU1JQQ0lNX1RPX1ZQQVRIX1dNU0codmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDAwNTgqLwl1NjQJc3JwY2ltX3RvX3ZwYXRoX3dtc2dfdHJpZzsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fVE9fVlBBVEhfV01TR19UUklHX1NSUENJTV9UT19WUEFUSF9XTVNHX1RSSUcgXAorCQkJCQkJCQl2eGdlX21CSVQoMCkKKwl1OAl1bnVzZWQwMDEwMFsweDAwMTAwLTB4MDAwNjBdOworCisvKjB4MDAxMDAqLwl1NjQJdGltX3ZwYXRoX2Fzc2lnbm1lbnQ7CisjZGVmaW5lIFZYR0VfSFdfVElNX1ZQQVRIX0FTU0lHTk1FTlRfQk1BUF9ST09UKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisJdTgJdW51c2VkMDAxNDBbMHgwMDE0MC0weDAwMTA4XTsKKworLyoweDAwMTQwKi8JdTY0CXJxYV90b3BfcHJ0eV9mb3JfdnA7CisjZGVmaW5lIFZYR0VfSFdfUlFBX1RPUF9QUlRZX0ZPUl9WUF9SUUFfVE9QX1BSVFlfRk9SX1ZQKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorCXU4CXVudXNlZDAwMWMwWzB4MDAxYzAtMHgwMDE0OF07CisKKy8qMHgwMDFjMCovCXU2NAlyeG1hY19yeF9wYV9jZmcwX3ZwbWdtdF9jbG9uZTsKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9JR05PUkVfRlJBTUVfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX1NVUFBPUlRfU05BUF9BQl9OCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX1NFQVJDSF9GT1JfSEFPCXZ4Z2VfbUJJVCgxOCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9TVVBQT1JUX01PQklMRV9JUFY2X0hEUlMgXAorCQkJCQkJCQl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfSVBWNl9TVE9QX1NFQVJDSElORyBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9OT19QU19JRl9VTktOT1dOCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9TRUFSQ0hfRk9SX0VUWVBFCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19SWF9QQV9DRkcwX1ZQTUdNVF9DTE9ORV9UT1NTX0FOWV9GUk1fSUZfTDNfQ1NVTV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoMzkpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfVE9TU19PRkZMRF9GUk1fSUZfTDNfQ1NVTV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfVE9TU19BTllfRlJNX0lGX0w0X0NTVU1fRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX1RPU1NfT0ZGTERfRlJNX0lGX0w0X0NTVU1fRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX1RPU1NfQU5ZX0ZSTV9JRl9SUEFfRVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1JYX1BBX0NGRzBfVlBNR01UX0NMT05FX1RPU1NfT0ZGTERfRlJNX0lGX1JQQV9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoNTkpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUlhfUEFfQ0ZHMF9WUE1HTVRfQ0xPTkVfSlVNQk9fU05BUF9FTgl2eGdlX21CSVQoNjMpCisvKjB4MDAxYzgqLwl1NjQJcnRzX21ncl9jZmcwX3ZwbWdtdF9jbG9uZTsKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfVlBNR01UX0NMT05FX1JUU19EUF9TUF9QUklPUklUWQl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfVlBNR01UX0NMT05FX0ZMRVhfTDRQUlRDTF9WQUxVRSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNCwgOCkKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfVlBNR01UX0NMT05FX0lDTVBfVFJBU0gJdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9WUE1HTVRfQ0xPTkVfVENQU1lOX1RSQVNICXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfVlBNR01UX0NMT05FX1pMNFBZTERfVFJBU0gJdnhnZV9tQklUKDQzKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9WUE1HTVRfQ0xPTkVfTDRQUlRDTF9UQ1BfVFJBU0gJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9WUE1HTVRfQ0xPTkVfTDRQUlRDTF9VRFBfVFJBU0gJdnhnZV9tQklUKDUxKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ0ZHMF9WUE1HTVRfQ0xPTkVfTDRQUlRDTF9GTEVYX1RSQVNICXZ4Z2VfbUJJVCg1NSkKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NGRzBfVlBNR01UX0NMT05FX0lQRlJBR19UUkFTSAl2eGdlX21CSVQoNTkpCisvKjB4MDAxZDAqLwl1NjQJcnRzX21ncl9jcml0ZXJpYV9wcmlvcml0eV92cG1nbXRfY2xvbmU7CisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9WUE1HTVRfQ0xPTkVfRVRZUEUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNSwgMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1ZQTUdNVF9DTE9ORV9JQ01QX1RDUFNZTih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA5LCAzKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfVlBNR01UX0NMT05FX0w0UE4odmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTMsIDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9WUE1HTVRfQ0xPTkVfUkFOR0VfTDRQTih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNywgMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfTUdSX0NSSVRFUklBX1BSSU9SSVRZX1ZQTUdNVF9DTE9ORV9SVEhfSVQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjEsIDMpCisjZGVmaW5lIFZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9WUE1HTVRfQ0xPTkVfRFModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjUsIDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9WUE1HTVRfQ0xPTkVfUU9TKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI5LCAzKQorI2RlZmluZQlWWEdFX0hXX1JUU19NR1JfQ1JJVEVSSUFfUFJJT1JJVFlfVlBNR01UX0NMT05FX1pMNFBZTEQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzMsIDMpCisjZGVmaW5lCVZYR0VfSFdfUlRTX01HUl9DUklURVJJQV9QUklPUklUWV9WUE1HTVRfQ0xPTkVfTDRQUlRDTCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzNywgMykKKy8qMHgwMDFkOCovCXU2NAlyeG1hY19jZmcwX3BvcnRfdnBtZ210X2Nsb25lWzNdOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfUk1BQ19FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX1NUUklQX0ZDUwl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX0RJU0NBUkRfUEZSTQl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9JR05PUkVfRkNTX0VSUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9JR05PUkVfTE9OR19FUlIJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfSUdOT1JFX1VTSVpFRF9FUlIJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfSUdOT1JFX0xFTl9NSVNNQVRDSCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX01BWF9QWUxEX0xFTih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA1MCwgMTQpCisvKjB4MDAxZjAqLwl1NjQJcnhtYWNfcGF1c2VfY2ZnX3BvcnRfdnBtZ210X2Nsb25lWzNdOworI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9HRU5fRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX1JDVl9FTgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfQUNDRUxfU0VORCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA5LCAzKQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9EVUFMX1RIUgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX0hJR0hfUFRJTUUodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjAsIDE2KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9JR05PUkVfUEZfRkNTX0VSUiBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzOSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19QQVVTRV9DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfSUdOT1JFX1BGX0xFTl9FUlIgXAorCQkJCQkJCQl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX0xJTUlURVJfRU4JdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1BBVVNFX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9NQVhfTElNSVQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNDgsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfUEFVU0VfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX1BFUk1JVF9SQVRFTUdNVF9DVFJMIFwKKwkJCQkJCQl2eGdlX21CSVQoNTkpCisJdTgJdW51c2VkMDAyNDBbMHgwMDI0MC0weDAwMjA4XTsKKworLyoweDAwMjQwKi8JdTY0CXhtYWNfdnNwb3J0X2Nob2ljZXNfdnA7CisjZGVmaW5lIFZYR0VfSFdfWE1BQ19WU1BPUlRfQ0hPSUNFU19WUF9WU1BPUlRfVkVDVE9SKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTcpCisJdTgJdW51c2VkMDAyNjBbMHgwMDI2MC0weDAwMjQ4XTsKKworLyoweDAwMjYwKi8JdTY0CXhnbWFjX2dlbl9zdGF0dXNfdnBtZ210X2Nsb25lOworI2RlZmluZQlWWEdFX0hXX1hHTUFDX0dFTl9TVEFUVVNfVlBNR01UX0NMT05FX1hNQUNKX05UV0tfT0sJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfWEdNQUNfR0VOX1NUQVRVU19WUE1HTVRfQ0xPTkVfWE1BQ0pfTlRXS19EQVRBX1JBVEUgXAorCQkJCQkJCQl2eGdlX21CSVQoMTEpCisvKjB4MDAyNjgqLwl1NjQJeGdtYWNfc3RhdHVzX3BvcnRfdnBtZ210X2Nsb25lWzJdOworI2RlZmluZQlWWEdFX0hXX1hHTUFDX1NUQVRVU19QT1JUX1ZQTUdNVF9DTE9ORV9STUFDX1JFTU9URV9GQVVMVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1hHTUFDX1NUQVRVU19QT1JUX1ZQTUdNVF9DTE9ORV9STUFDX0xPQ0FMX0ZBVUxUCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1hHTUFDX1NUQVRVU19QT1JUX1ZQTUdNVF9DTE9ORV9YTUFDSl9NQUNfUEhZX0xBWUVSX0FWQUlMIFwKKwkJCQkJCQkJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1hHTUFDX1NUQVRVU19QT1JUX1ZQTUdNVF9DTE9ORV9YTUFDSl9QT1JUX09LCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMDI3OCovCXU2NAl4bWFjX2dlbl9jZmdfdnBtZ210X2Nsb25lOworI2RlZmluZQlWWEdFX0hXX1hNQUNfR0VOX0NGR19WUE1HTVRfQ0xPTkVfUkFURU1HTVRfTUFDX1JBVEVfU0VMKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fQ0ZHX1ZQTUdNVF9DTE9ORV9UWF9IRUFEX0RST1BfV0hFTl9GQVVMVCBcCisJCQkJCQkJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fQ0ZHX1ZQTUdNVF9DTE9ORV9GQVVMVF9CRUhBVklPVVIJdnhnZV9tQklUKDI3KQorI2RlZmluZSBWWEdFX0hXX1hNQUNfR0VOX0NGR19WUE1HTVRfQ0xPTkVfUEVSSU9EX05UV0tfVVAodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjgsIDQpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19HRU5fQ0ZHX1ZQTUdNVF9DTE9ORV9QRVJJT0RfTlRXS19ET1dOKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCA0KQorLyoweDAwMjgwKi8JdTY0CXhtYWNfdGltZXN0YW1wX3ZwbWdtdF9jbG9uZTsKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1RJTUVTVEFNUF9WUE1HTVRfQ0xPTkVfRU4JdnhnZV9tQklUKDMpCisjZGVmaW5lIFZYR0VfSFdfWE1BQ19USU1FU1RBTVBfVlBNR01UX0NMT05FX1VTRV9MSU5LX0lEKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisjZGVmaW5lIFZYR0VfSFdfWE1BQ19USU1FU1RBTVBfVlBNR01UX0NMT05FX0lOVEVSVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMTIsIDQpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19USU1FU1RBTVBfVlBNR01UX0NMT05FX1RJTUVSX1JFU1RBUlQJdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfVElNRVNUQU1QX1ZQTUdNVF9DTE9ORV9YTUFDSl9ST0xMT1ZFUl9DTlQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDE2KQorLyoweDAwMjg4Ki8JdTY0CXhtYWNfc3RhdHNfZ2VuX2NmZ192cG1nbXRfY2xvbmU7CisjZGVmaW5lCVZYR0VfSFdfWE1BQ19TVEFUU19HRU5fQ0ZHX1ZQTUdNVF9DTE9ORV9QUlRBR0dSX0NVTV9USU1FUih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0LCA0KQorI2RlZmluZQlWWEdFX0hXX1hNQUNfU1RBVFNfR0VOX0NGR19WUE1HTVRfQ0xPTkVfVlBBVEhfQ1VNX1RJTUVSKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDgsIDQpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19TVEFUU19HRU5fQ0ZHX1ZQTUdNVF9DTE9ORV9WTEFOX0hBTkRMSU5HCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMDI5MCovCXU2NAl4bWFjX2NmZ19wb3J0X3ZwbWdtdF9jbG9uZVszXTsKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9YR01JSV9MT09QQkFDSwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX0NGR19QT1JUX1ZQTUdNVF9DTE9ORV9YR01JSV9SRVZFUlNFX0xPT1BCQUNLIFwKKwkJCQkJCQkJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19DRkdfUE9SVF9WUE1HTVRfQ0xPTkVfWEdNSUlfVFhfQkVIQVYJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfQ0ZHX1BPUlRfVlBNR01UX0NMT05FX1hHTUlJX1JYX0JFSEFWCXZ4Z2VfbUJJVCgxNSkKKwl1OAl1bnVzZWQwMDJjMFsweDAwMmMwLTB4MDAyYThdOworCisvKjB4MDAyYzAqLwl1NjQJdHhtYWNfZ2VuX2NmZzBfdnBtZ210X2Nsb25lOworI2RlZmluZQlWWEdFX0hXX1RYTUFDX0dFTl9DRkcwX1ZQTUdNVF9DTE9ORV9DSE9TRU5fVFhfUE9SVAl2eGdlX21CSVQoNykKKy8qMHgwMDJjOCovCXU2NAl0eG1hY19jZmcwX3BvcnRfdnBtZ210X2Nsb25lWzNdOworI2RlZmluZQlWWEdFX0hXX1RYTUFDX0NGRzBfUE9SVF9WUE1HTVRfQ0xPTkVfVE1BQ19FTgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19UWE1BQ19DRkcwX1BPUlRfVlBNR01UX0NMT05FX0FQUEVORF9QQUQJdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfVFhNQUNfQ0ZHMF9QT1JUX1ZQTUdNVF9DTE9ORV9QQURfQllURSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisJdTgJdW51c2VkMDAzMDBbMHgwMDMwMC0weDAwMmUwXTsKKworLyoweDAwMzAwKi8JdTY0CXdvbF9tcF9jcmM7CisjZGVmaW5lIFZYR0VfSFdfV09MX01QX0NSQ19DUkModmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19XT0xfTVBfQ1JDX1JDX0VOCXZ4Z2VfbUJJVCg2MykKKy8qMHgwMDMwOCovCXU2NAl3b2xfbXBfbWFza19hOworI2RlZmluZSBWWEdFX0hXX1dPTF9NUF9NQVNLX0FfTUFTSyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwMzEwKi8JdTY0CXdvbF9tcF9tYXNrX2I7CisjZGVmaW5lIFZYR0VfSFdfV09MX01QX01BU0tfQl9NQVNLKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisJdTgJdW51c2VkMDAzNjBbMHgwMDM2MC0weDAwMzE4XTsKKworLyoweDAwMzYwKi8JdTY0CWZhdV9wYV9jZmdfdnBtZ210X2Nsb25lOworI2RlZmluZQlWWEdFX0hXX0ZBVV9QQV9DRkdfVlBNR01UX0NMT05FX1JFUExfTDRfQ09NUF9DU1VNCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0ZBVV9QQV9DRkdfVlBNR01UX0NMT05FX1JFUExfTDNfSU5DTF9DRgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19GQVVfUEFfQ0ZHX1ZQTUdNVF9DTE9ORV9SRVBMX0wzX0NPTVBfQ1NVTQl2eGdlX21CSVQoMTEpCisvKjB4MDAzNjgqLwl1NjQJcnhfZGF0YXBhdGhfdXRpbF92cF9jbG9uZTsKKyNkZWZpbmUJVlhHRV9IV19SWF9EQVRBUEFUSF9VVElMX1ZQX0NMT05FX0ZBVV9SWF9VVElMSVpBVElPTih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA3LCA5KQorI2RlZmluZQlWWEdFX0hXX1JYX0RBVEFQQVRIX1VUSUxfVlBfQ0xPTkVfUlhfVVRJTF9DRkcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDQpCisjZGVmaW5lCVZYR0VfSFdfUlhfREFUQVBBVEhfVVRJTF9WUF9DTE9ORV9GQVVfUlhfRlJBQ19VVElMKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIwLCA0KQorI2RlZmluZQlWWEdFX0hXX1JYX0RBVEFQQVRIX1VUSUxfVlBfQ0xPTkVfUlhfUEtUX1dFSUdIVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNCwgNCkKKwl1OAl1bnVzZWQwMDM4MFsweDAwMzgwLTB4MDAzNzBdOworCisvKjB4MDAzODAqLwl1NjQJdHhfZGF0YXBhdGhfdXRpbF92cF9jbG9uZTsKKyNkZWZpbmUJVlhHRV9IV19UWF9EQVRBUEFUSF9VVElMX1ZQX0NMT05FX1RQQV9UWF9VVElMSVpBVElPTih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA3LCA5KQorI2RlZmluZQlWWEdFX0hXX1RYX0RBVEFQQVRIX1VUSUxfVlBfQ0xPTkVfVFhfVVRJTF9DRkcodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDQpCisjZGVmaW5lCVZYR0VfSFdfVFhfREFUQVBBVEhfVVRJTF9WUF9DTE9ORV9UUEFfVFhfRlJBQ19VVElMKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDIwLCA0KQorI2RlZmluZQlWWEdFX0hXX1RYX0RBVEFQQVRIX1VUSUxfVlBfQ0xPTkVfVFhfUEtUX1dFSUdIVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAyNCwgNCkKKworfSBfX3BhY2tlZDsKKworc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIHsKKworCXU4CXVudXNlZDAwMzAwWzB4MDAzMDBdOworCisvKjB4MDAzMDAqLwl1NjQJdXNkY192cGF0aDsKKyNkZWZpbmUgVlhHRV9IV19VU0RDX1ZQQVRIX1NHUlBfQVNTSUdOKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisJdTgJdW51c2VkMDBhMDBbMHgwMGEwMC0weDAwMzA4XTsKKworLyoweDAwYTAwKi8JdTY0CXdyZG1hX2FsYXJtX3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19XUkRNQV9BTEFSTV9TVEFUVVNfUFJDX0FMQVJNX1BSQ19JTlQJdnhnZV9tQklUKDEpCisvKjB4MDBhMDgqLwl1NjQJd3JkbWFfYWxhcm1fbWFzazsKKwl1OAl1bnVzZWQwMGEzMFsweDAwYTMwLTB4MDBhMTBdOworCisvKjB4MDBhMzAqLwl1NjQJcHJjX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19SSU5HX0JVTVAJdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfUFJDX0FMQVJNX1JFR19QUkNfUlhEQ01fU0NfRVJSCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX1BSQ19BTEFSTV9SRUdfUFJDX1JYRENNX1NDX0FCT1JUCXZ4Z2VfbUJJVCgyKQorI2RlZmluZQlWWEdFX0hXX1BSQ19BTEFSTV9SRUdfUFJDX1FVQU5UQV9TSVpFX0VSUgl2eGdlX21CSVQoMykKKy8qMHgwMGEzOCovCXU2NAlwcmNfYWxhcm1fbWFzazsKKy8qMHgwMGE0MCovCXU2NAlwcmNfYWxhcm1fYWxhcm07CisvKjB4MDBhNDgqLwl1NjQJcHJjX2NmZzE7CisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzFfUlhfVElNRVJfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgMywgMjkpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzFfVElNX1JJTkdfQlVNUF9JTlRfRU5BQkxFCXZ4Z2VfbUJJVCgzNCkKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHMV9SVElfVElOVF9ESVNBQkxFCXZ4Z2VfbUJJVCgzNSkKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHMV9HUkVFRFlfUkVUVVJOCXZ4Z2VfbUJJVCgzNikKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHMV9RVUlDS19TSE9UCXZ4Z2VfbUJJVCgzNykKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHMV9SWF9USU1FUl9DSQl2eGdlX21CSVQoMzkpCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzFfUkVTRVRfVElNRVJfT05fUlhEX1JFVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQwLCAyKQorCXU4CXVudXNlZDAwYTYwWzB4MDBhNjAtMHgwMGE1MF07CisKKy8qMHgwMGE2MCovCXU2NAlwcmNfY2ZnNDsKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHNF9JTl9TVkMJdnhnZV9tQklUKDcpCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzRfUklOR19NT0RFKHZhbCkgdnhnZV92QklUKHZhbCwgMTQsIDIpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzRfUlhEX05PX1NOT09QCXZ4Z2VfbUJJVCgyMikKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHNF9GUk1fTk9fU05PT1AJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc0X1JUSF9ESVNBQkxFCXZ4Z2VfbUJJVCgzMSkKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHNF9JR05PUkVfT1dORVJTSElQCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHNF9TSUdOQUxfQkVOSUdOX09WRkxXCXZ4Z2VfbUJJVCgzNikKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHNF9CSU1PREFMX0lOVEVSUlVQVAl2eGdlX21CSVQoMzcpCisjZGVmaW5lIFZYR0VfSFdfUFJDX0NGRzRfQkFDS09GRl9JTlRFUlZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQwLCAyNCkKKy8qMHgwMGE2OCovCXU2NAlwcmNfY2ZnNTsKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHNV9SWEQwX0FERCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDYxKQorLyoweDAwYTcwKi8JdTY0CXByY19jZmc2OworI2RlZmluZQlWWEdFX0hXX1BSQ19DRkc2X0ZSTV9QQURfRU4JdnhnZV9tQklUKDApCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzZfUVNJWkVfQUxJR05FRF9SWEQJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzZfRE9PUkJFTExfTU9ERV9FTgl2eGdlX21CSVQoNSkKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHNl9MM19DUENfVFJTRlJfQ09ERV9FTgl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19QUkNfQ0ZHNl9MNF9DUENfVFJTRlJfQ09ERV9FTgl2eGdlX21CSVQoOSkKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHNl9SWERfQ1JYRFQodmFsKSB2eGdlX3ZCSVQodmFsLCAyMywgOSkKKyNkZWZpbmUgVlhHRV9IV19QUkNfQ0ZHNl9SWERfU1BBVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM2LCA5KQorLyoweDAwYTc4Ki8JdTY0CXByY19jZmc3OworI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc3X1NDQVRURVJfTU9ERSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzdfU01BUlRfU0NBVF9FTgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzdfUlhEX05TX0NIR19FTgl2eGdlX21CSVQoMTIpCisjZGVmaW5lCVZYR0VfSFdfUFJDX0NGRzdfTk9fSERSX1NFUEFSQVRJT04JdnhnZV9tQklUKDE0KQorI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc3X1JYRF9CVUZGX1NJWkVfTUFTSyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDIwLCA0KQorI2RlZmluZSBWWEdFX0hXX1BSQ19DRkc3X0JVRkZfU0laRTBfTUFTSyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI3LCA1KQorLyoweDAwYTgwKi8JdTY0CXRpbV9kZXN0X2FkZHI7CisjZGVmaW5lIFZYR0VfSFdfVElNX0RFU1RfQUREUl9USU1fREVTVF9BRERSKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDBhODgqLwl1NjQJcHJjX3J4ZF9kb29yYmVsbDsKKyNkZWZpbmUgVlhHRV9IV19QUkNfUlhEX0RPT1JCRUxMX05FV19RV19DTlQodmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDBhOTAqLwl1NjQJcnFhX3BydHlfZm9yX3ZwOworI2RlZmluZSBWWEdFX0hXX1JRQV9QUlRZX0ZPUl9WUF9SUUFfUFJUWV9GT1JfVlAodmFsKSB2eGdlX3ZCSVQodmFsLCA1OSwgNSkKKy8qMHgwMGE5OCovCXU2NAlyeGRtZW1fc2l6ZTsKKyNkZWZpbmUgVlhHRV9IV19SWERNRU1fU0laRV9QUkNfUlhETUVNX1NJWkUodmFsKSB2eGdlX3ZCSVQodmFsLCA1MSwgMTMpCisvKjB4MDBhYTAqLwl1NjQJZnJtX2luX3Byb2dyZXNzX2NudDsKKyNkZWZpbmUJVlhHRV9IV19GUk1fSU5fUFJPR1JFU1NfQ05UX1BSQ19GUk1fSU5fUFJPR1JFU1NfQ05UKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDU5LCA1KQorLyoweDAwYWE4Ki8JdTY0CXJ4X211bHRpX2Nhc3Rfc3RhdHM7CisjZGVmaW5lIFZYR0VfSFdfUlhfTVVMVElfQ0FTVF9TVEFUU19GUkFNRV9ESVNDQVJEKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDAwYWIwKi8JdTY0CXJ4X2ZybV90cmFuc2ZlcnJlZDsKKyNkZWZpbmUJVlhHRV9IV19SWF9GUk1fVFJBTlNGRVJSRURfUlhfRlJNX1RSQU5TRkVSUkVEKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwMGFiOCovCXU2NAlyeGRfcmV0dXJuZWQ7CisjZGVmaW5lIFZYR0VfSFdfUlhEX1JFVFVSTkVEX1JYRF9SRVRVUk5FRCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKwl1OAl1bnVzZWQwMGMwMFsweDAwYzAwLTB4MDBhYzBdOworCisvKjB4MDBjMDAqLwl1NjQJa2RmY19maWZvX3RycGxfcGFydGl0aW9uOworI2RlZmluZSBWWEdFX0hXX0tERkNfRklGT19UUlBMX1BBUlRJVElPTl9MRU5HVEhfMCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE3LCAxNSkKKyNkZWZpbmUgVlhHRV9IV19LREZDX0ZJRk9fVFJQTF9QQVJUSVRJT05fTEVOR1RIXzEodmFsKSB2eGdlX3ZCSVQodmFsLCAzMywgMTUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19GSUZPX1RSUExfUEFSVElUSU9OX0xFTkdUSF8yKHZhbCkgdnhnZV92QklUKHZhbCwgNDksIDE1KQorLyoweDAwYzA4Ki8JdTY0CWtkZmNfZmlmb190cnBsX2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfS0RGQ19GSUZPX1RSUExfQ1RSTF9UUklQTEVUX0VOQUJMRQl2eGdlX21CSVQoNykKKy8qMHgwMGMxMCovCXU2NAlrZGZjX3RycGxfZmlmb18wX2N0cmw7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX01PREUodmFsKSB2eGdlX3ZCSVQodmFsLCAxNCwgMikKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfRkxJUF9FTgl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX1NXQVBfRU4JdnhnZV9tQklUKDIzKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9JTlRfQ1RSTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI2LCAyKQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9DVFJMX1NUUlVDCXZ4Z2VfbUJJVCgyOCkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfQUREX1BBRAl2eGdlX21CSVQoMjkpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX05PX1NOT09QCXZ4Z2VfbUJJVCgzMCkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfUkxYX09SRAl2eGdlX21CSVQoMzEpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMF9DVFJMX1NFTEVDVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfQ1RSTF9JTlRfTk8odmFsKSB2eGdlX3ZCSVQodmFsLCA0MSwgNykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18wX0NUUkxfQklUX01BUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwMGMxOCovCXU2NAlrZGZjX3RycGxfZmlmb18xX2N0cmw7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX01PREUodmFsKSB2eGdlX3ZCSVQodmFsLCAxNCwgMikKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfRkxJUF9FTgl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX1NXQVBfRU4JdnhnZV9tQklUKDIzKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9JTlRfQ1RSTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI2LCAyKQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9DVFJMX1NUUlVDCXZ4Z2VfbUJJVCgyOCkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfQUREX1BBRAl2eGdlX21CSVQoMjkpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX05PX1NOT09QCXZ4Z2VfbUJJVCgzMCkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfUkxYX09SRAl2eGdlX21CSVQoMzEpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9DVFJMX1NFTEVDVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCA4KQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzFfQ1RSTF9JTlRfTk8odmFsKSB2eGdlX3ZCSVQodmFsLCA0MSwgNykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18xX0NUUkxfQklUX01BUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ4LCAxNikKKy8qMHgwMGMyMCovCXU2NAlrZGZjX3RycGxfZmlmb18yX2N0cmw7CisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMl9DVFJMX0ZMSVBfRU4JdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzJfQ1RSTF9TV0FQX0VOCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18yX0NUUkxfSU5UX0NUUkwodmFsKSB2eGdlX3ZCSVQodmFsLCAyNiwgMikKKyNkZWZpbmUJVlhHRV9IV19LREZDX1RSUExfRklGT18yX0NUUkxfQ1RSTF9TVFJVQwl2eGdlX21CSVQoMjgpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMl9DVFJMX0FERF9QQUQJdnhnZV9tQklUKDI5KQorI2RlZmluZQlWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzJfQ1RSTF9OT19TTk9PUAl2eGdlX21CSVQoMzApCisjZGVmaW5lCVZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMl9DVFJMX1JMWF9PUkQJdnhnZV9tQklUKDMxKQorI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzJfQ1RSTF9TRUxFQ1QodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18yX0NUUkxfSU5UX05PKHZhbCkgdnhnZV92QklUKHZhbCwgNDEsIDcpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMl9DVFJMX0JJVF9NQVAodmFsKSB2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisvKjB4MDBjMjgqLwl1NjQJa2RmY190cnBsX2ZpZm9fMF93Yl9hZGRyZXNzOworI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPXzBfV0JfQUREUkVTU19BREQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMGMzMCovCXU2NAlrZGZjX3RycGxfZmlmb18xX3diX2FkZHJlc3M7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fMV9XQl9BRERSRVNTX0FERCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwYzM4Ki8JdTY0CWtkZmNfdHJwbF9maWZvXzJfd2JfYWRkcmVzczsKKyNkZWZpbmUgVlhHRV9IV19LREZDX1RSUExfRklGT18yX1dCX0FERFJFU1NfQUREKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDBjNDAqLwl1NjQJa2RmY190cnBsX2ZpZm9fb2Zmc2V0OworI2RlZmluZSBWWEdFX0hXX0tERkNfVFJQTF9GSUZPX09GRlNFVF9LREZDX1JDVFIwKHZhbCkgdnhnZV92QklUKHZhbCwgMSwgMTUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fT0ZGU0VUX0tERkNfUkNUUjEodmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgMTUpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ19UUlBMX0ZJRk9fT0ZGU0VUX0tERkNfUkNUUjIodmFsKSB2eGdlX3ZCSVQodmFsLCAzMywgMTUpCisvKjB4MDBjNDgqLwl1NjQJa2RmY19kcmJsX3RyaXBsZXRfdG90YWw7CisjZGVmaW5lCVZYR0VfSFdfS0RGQ19EUkJMX1RSSVBMRVRfVE9UQUxfS0RGQ19NQVhfU0laRSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAxNywgMTUpCisJdTgJdW51c2VkMDBjNjBbMHgwMGM2MC0weDAwYzUwXTsKKworLyoweDAwYzYwKi8JdTY0CXVzZGNfZHJibF9jdHJsOworI2RlZmluZQlWWEdFX0hXX1VTRENfRFJCTF9DVFJMX0ZMSVBfRU4JdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX1VTRENfRFJCTF9DVFJMX1NXQVBfRU4JdnhnZV9tQklUKDIzKQorLyoweDAwYzY4Ki8JdTY0CXVzZGNfdnBfcmVhZHk7CisjZGVmaW5lCVZYR0VfSFdfVVNEQ19WUF9SRUFEWV9VU0RDX0hUTl9SRUFEWQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19VU0RDX1ZQX1JFQURZX1VTRENfU1JRX1JFQURZCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19VU0RDX1ZQX1JFQURZX1VTRENfQ1FSUV9SRUFEWQl2eGdlX21CSVQoMjMpCisvKjB4MDBjNzAqLwl1NjQJa2RmY19zdGF0dXM7CisjZGVmaW5lCVZYR0VfSFdfS0RGQ19TVEFUVVNfS0RGQ19XUlJfMF9SRUFEWQl2eGdlX21CSVQoMCkKKyNkZWZpbmUJVlhHRV9IV19LREZDX1NUQVRVU19LREZDX1dSUl8xX1JFQURZCXZ4Z2VfbUJJVCgxKQorI2RlZmluZQlWWEdFX0hXX0tERkNfU1RBVFVTX0tERkNfV1JSXzJfUkVBRFkJdnhnZV9tQklUKDIpCisJdTgJdW51c2VkMDBjODBbMHgwMGM4MC0weDAwYzc4XTsKKworLyoweDAwYzgwKi8JdTY0CXhtYWNfcnBhX3ZjZmc7CisjZGVmaW5lCVZYR0VfSFdfWE1BQ19SUEFfVkNGR19JUFY0X1RDUF9JTkNMX1BICXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfUlBBX1ZDRkdfSVBWNl9UQ1BfSU5DTF9QSAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1JQQV9WQ0ZHX0lQVjRfVURQX0lOQ0xfUEgJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1hNQUNfUlBBX1ZDRkdfSVBWNl9VRFBfSU5DTF9QSAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19SUEFfVkNGR19MNF9JTkNMX0NGCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19YTUFDX1JQQV9WQ0ZHX1NUUklQX1ZMQU5fVEFHCXZ4Z2VfbUJJVCgyMykKKy8qMHgwMGM4OCovCXU2NAlyeG1hY192Y2ZnMDsKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19WQ0ZHMF9SVFNfTUFYX0ZSTV9MRU4odmFsKSB2eGdlX3ZCSVQodmFsLCAyLCAxNCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19WQ0ZHMF9SVFNfVVNFX01JTl9MRU4JdnhnZV9tQklUKDE5KQorI2RlZmluZSBWWEdFX0hXX1JYTUFDX1ZDRkcwX1JUU19NSU5fRlJNX0xFTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI2LCAxNCkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19WQ0ZHMF9VQ0FTVF9BTExfQUREUl9FTgl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfUlhNQUNfVkNGRzBfTUNBU1RfQUxMX0FERFJfRU4JdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1ZDRkcwX0JDQVNUX0VOCXZ4Z2VfbUJJVCg1MSkKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19WQ0ZHMF9BTExfVklEX0VOCXZ4Z2VfbUJJVCg1NSkKKy8qMHgwMGM5MCovCXU2NAlyeG1hY192Y2ZnMTsKKyNkZWZpbmUgVlhHRV9IV19SWE1BQ19WQ0ZHMV9SVFNfUlRIX01VTFRJX0lUX0JEX01PREUodmFsKSB2eGdlX3ZCSVQodmFsLCA0MiwgMikKKyNkZWZpbmUJVlhHRV9IV19SWE1BQ19WQ0ZHMV9SVFNfUlRIX01VTFRJX0lUX0VOX01PREUJdnhnZV9tQklUKDQ3KQorI2RlZmluZQlWWEdFX0hXX1JYTUFDX1ZDRkcxX0NPTlRSSUJfTDJfRkxPVwl2eGdlX21CSVQoNTEpCisvKjB4MDBjOTgqLwl1NjQJcnRzX2FjY2Vzc19zdGVlcl9jdHJsOworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT04odmFsKSB2eGdlX3ZCSVQodmFsLCAxLCA3KQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUwodmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA0KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9TVFJPQkUJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9CRUhBVl9UQkxfU0VMCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfVEFCTEVfU0VMCXZ4Z2VfbUJJVCgyNykKKyNkZWZpbmUJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfUk1BQ0pfU1RBVFVTCXZ4Z2VfbUJJVCgwKQorI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9PRkZTRVQodmFsKSB2eGdlX3ZCSVQodmFsLCA0MCwgOCkKKy8qMHgwMGNhMCovCXU2NAlydHNfYWNjZXNzX3N0ZWVyX2RhdGEwOworI2RlZmluZSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfREFUQSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwY2E4Ki8JdTY0CXJ0c19hY2Nlc3Nfc3RlZXJfZGF0YTE7CisjZGVmaW5lIFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9EQVRBKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisJdTgJdW51c2VkMDBkMDBbMHgwMGQwMC0weDAwY2IwXTsKKworLyoweDAwZDAwKi8JdTY0CXhtYWNfdnNwb3J0X2Nob2ljZTsKKyNkZWZpbmUgVlhHRV9IV19YTUFDX1ZTUE9SVF9DSE9JQ0VfVlNQT1JUX05VTUJFUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMsIDUpCisvKjB4MDBkMDgqLwl1NjQJeG1hY19zdGF0c19jZmc7CisvKjB4MDBkMTAqLwl1NjQJeG1hY19zdGF0c19hY2Nlc3NfY21kOworI2RlZmluZSBWWEdFX0hXX1hNQUNfU1RBVFNfQUNDRVNTX0NNRF9PUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisjZGVmaW5lCVZYR0VfSFdfWE1BQ19TVEFUU19BQ0NFU1NfQ01EX1NUUk9CRQl2eGdlX21CSVQoMTUpCisjZGVmaW5lIFZYR0VfSFdfWE1BQ19TVEFUU19BQ0NFU1NfQ01EX09GRlNFVF9TRUwodmFsKSB2eGdlX3ZCSVQodmFsLCAzMiwgOCkKKy8qMHgwMGQxOCovCXU2NAl4bWFjX3N0YXRzX2FjY2Vzc19kYXRhOworI2RlZmluZSBWWEdFX0hXX1hNQUNfU1RBVFNfQUNDRVNTX0RBVEFfWFNNR1JfREFUQSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAwZDIwKi8JdTY0CWFzaWNfbnR3a192cF9jdHJsOworI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19WUF9DVFJMX1JFUV9URVNUX05UV0sJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX1ZQX0NUUkxfWE1BQ0pfU0hPV19QT1JUX0lORk8JdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTlRXS19WUF9DVFJMX1hNQUNKX1BPUlRfTlVNCXZ4Z2VfbUJJVCg2MykKKwl1OAl1bnVzZWQwMGQzMFsweDAwZDMwLTB4MDBkMjhdOworCisvKjB4MDBkMzAqLwl1NjQJeGdtYWNfdnBfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19YR01BQ19WUF9JTlRfU1RBVFVTX0FTSUNfTlRXS19WUF9FUlJfQVNJQ19OVFdLX1ZQX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzKQorLyoweDAwZDM4Ki8JdTY0CXhnbWFjX3ZwX2ludF9tYXNrOworLyoweDAwZDQwKi8JdTY0CWFzaWNfbnR3a192cF9lcnJfcmVnOworI2RlZmluZQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fRkxUCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0sJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9GTFRfT0NDVVJSIFwKKwkJCQkJCQkJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0tfT0NDVVJSIFwKKwkJCQkJCQl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX1ZQX0VSUl9SRUdfWE1BQ0pfTlRXS19SRUFGRklSTUVEX0ZBVUxUIFwKKwkJCQkJCQl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfQVNJQ19OVFdLX1ZQX0VSUl9SRUdfWE1BQ0pfTlRXS19SRUFGRklSTUVEX09LCXZ4Z2VfbUJJVCgyMykKKy8qMHgwMGQ0OCovCXU2NAlhc2ljX250d2tfdnBfZXJyX21hc2s7CisvKjB4MDBkNTAqLwl1NjQJYXNpY19udHdrX3ZwX2Vycl9hbGFybTsKKwl1OAl1bnVzZWQwMGQ4MFsweDAwZDgwLTB4MDBkNThdOworCisvKjB4MDBkODAqLwl1NjQJcnRkbWFfYndfY3RybDsKKyNkZWZpbmUJVlhHRV9IV19SVERNQV9CV19DVFJMX0JXX0NUUkxfRU4JdnhnZV9tQklUKDM5KQorI2RlZmluZSBWWEdFX0hXX1JURE1BX0JXX0NUUkxfREVTSVJFRF9CVyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQ2LCAxOCkKKy8qMHgwMGQ4OCovCXU2NAlydGRtYV9yZF9vcHRpbWl6YXRpb25fY3RybDsKKyNkZWZpbmUJVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9HRU5fSU5UX0FGVEVSX0FCT1JUCXZ4Z2VfbUJJVCgzKQorI2RlZmluZSBWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX1BBRF9NT0RFKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKKyNkZWZpbmUgVlhHRV9IV19SVERNQV9SRF9PUFRJTUlaQVRJT05fQ1RSTF9QQURfUEFUVEVSTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDgsIDgpCisjZGVmaW5lCVZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfRkJfV0FJVF9GT1JfU1BBQ0UJdnhnZV9tQklUKDE5KQorI2RlZmluZSBWWEdFX0hXX1BDSV9FWFBfREVWQ1RMX1JFQURSUSAgIDB4NzAwMCAgLyogTWF4X1JlYWRfUmVxdWVzdF9TaXplICovCisjZGVmaW5lIFZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfRkJfRklMTF9USFJFU0godmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMjEsIDMpCisjZGVmaW5lCVZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfVFhEX1BZTERfV01BUktfRU4JdnhnZV9tQklUKDI4KQorI2RlZmluZSBWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX1RYRF9QWUxEX1dNQVJLKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDI5LCAzKQorI2RlZmluZQlWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX0ZCX0FERFJfQkRSWV9FTgl2eGdlX21CSVQoMzUpCisjZGVmaW5lIFZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfRkJfQUREUl9CRFJZKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDM3LCAzKQorI2RlZmluZQlWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX1RYRF9XQUlUX0ZPUl9TUEFDRQl2eGdlX21CSVQoNDMpCisjZGVmaW5lCVZYR0VfSFdfUlRETUFfUkRfT1BUSU1JWkFUSU9OX0NUUkxfVFhEX0ZJTExfVEhSRVNIKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDUxLCA1KQorI2RlZmluZQlWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX1RYRF9BRERSX0JEUllfRU4JdnhnZV9tQklUKDU5KQorI2RlZmluZSBWWEdFX0hXX1JURE1BX1JEX09QVElNSVpBVElPTl9DVFJMX1RYRF9BRERSX0JEUlkodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgNjEsIDMpCisvKjB4MDBkOTAqLwl1NjQJcGRhX3BjY19qb2JfbW9uaXRvcjsKKyNkZWZpbmUJVlhHRV9IV19QREFfUENDX0pPQl9NT05JVE9SX1BEQV9QQ0NfSk9CX1NUQVRVUwl2eGdlX21CSVQoNykKKy8qMHgwMGQ5OCovCXU2NAl0eF9wcm90b2NvbF9hc3Npc3RfY2ZnOworI2RlZmluZQlWWEdFX0hXX1RYX1BST1RPQ09MX0FTU0lTVF9DRkdfTFNPVjJfRU4JdnhnZV9tQklUKDYpCisjZGVmaW5lCVZYR0VfSFdfVFhfUFJPVE9DT0xfQVNTSVNUX0NGR19JUFY2X0tFRVBfU0VBUkNISU5HCXZ4Z2VfbUJJVCg3KQorCXU4CXVudXNlZDAxMDAwWzB4MDEwMDAtMHgwMGRhMF07CisKKy8qMHgwMTAwMCovCXU2NAl0aW1fY2ZnMV9pbnRfbnVtWzRdOworI2RlZmluZSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fQlRJTUVSX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDI2KQorI2RlZmluZQlWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fQklUTVBfRU4JdnhnZV9tQklUKDM1KQorI2RlZmluZQlWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVFhGUk1fQ05UX0VOCXZ4Z2VfbUJJVCgzNikKKyNkZWZpbmUJVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1RYRF9DTlRfRU4JdnhnZV9tQklUKDM3KQorI2RlZmluZQlWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVElNRVJfQUMJdnhnZV9tQklUKDM4KQorI2RlZmluZQlWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVElNRVJfQ0kJdnhnZV9tQklUKDM5KQorI2RlZmluZSBWWEdFX0hXX1RJTV9DRkcxX0lOVF9OVU1fVVJOR19BKHZhbCkgdnhnZV92QklUKHZhbCwgNDEsIDcpCisjZGVmaW5lIFZYR0VfSFdfVElNX0NGRzFfSU5UX05VTV9VUk5HX0IodmFsKSB2eGdlX3ZCSVQodmFsLCA0OSwgNykKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0ZHMV9JTlRfTlVNX1VSTkdfQyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU3LCA3KQorLyoweDAxMDIwKi8JdTY0CXRpbV9jZmcyX2ludF9udW1bNF07CisjZGVmaW5lIFZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZSBWWEdFX0hXX1RJTV9DRkcyX0lOVF9OVU1fVUVDX0IodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfVElNX0NGRzJfSU5UX05VTV9VRUNfQyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAxNikKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0ZHMl9JTlRfTlVNX1VFQ19EKHZhbCkgdnhnZV92QklUKHZhbCwgNDgsIDE2KQorLyoweDAxMDQwKi8JdTY0CXRpbV9jZmczX2ludF9udW1bNF07CisjZGVmaW5lCVZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9USU1FUl9SSQl2eGdlX21CSVQoMCkKKyNkZWZpbmUgVlhHRV9IV19USU1fQ0ZHM19JTlRfTlVNX1JUSU1FUl9FVkVOVF9TRih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDEsIDQpCisjZGVmaW5lIFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9SVElNRVJfVkFMKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMjYpCisjZGVmaW5lIFZYR0VfSFdfVElNX0NGRzNfSU5UX05VTV9VVElMX1NFTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCA2KQorI2RlZmluZSBWWEdFX0hXX1RJTV9DRkczX0lOVF9OVU1fTFRJTUVSX1ZBTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDM4LCAyNikKKy8qMHgwMTA2MCovCXU2NAl0aW1fd3JrbGRfY2xjOworI2RlZmluZSBWWEdFX0hXX1RJTV9XUktMRF9DTENfV1JLTERfRVZBTF9QUkQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUgVlhHRV9IV19USU1fV1JLTERfQ0xDX1dSS0xEX0VWQUxfRElWKHZhbCkgdnhnZV92QklUKHZhbCwgMzUsIDUpCisjZGVmaW5lCVZYR0VfSFdfVElNX1dSS0xEX0NMQ19DTlRfRlJNX0JZVEUJdnhnZV9tQklUKDQwKQorI2RlZmluZSBWWEdFX0hXX1RJTV9XUktMRF9DTENfQ05UX1JYX1RYKHZhbCkgdnhnZV92QklUKHZhbCwgNDEsIDIpCisjZGVmaW5lCVZYR0VfSFdfVElNX1dSS0xEX0NMQ19DTlRfTE5LX0VOCXZ4Z2VfbUJJVCg0MykKKyNkZWZpbmUgVlhHRV9IV19USU1fV1JLTERfQ0xDX0hPU1RfVVRJTCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDU3LCA3KQorLyoweDAxMDY4Ki8JdTY0CXRpbV9iaXRtYXA7CisjZGVmaW5lIFZYR0VfSFdfVElNX0JJVE1BUF9NQVNLKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVElNX0JJVE1BUF9MTFJPT1RfUlhEX0VOCXZ4Z2VfbUJJVCgzMikKKyNkZWZpbmUJVlhHRV9IV19USU1fQklUTUFQX0xMUk9PVF9UWERfRU4JdnhnZV9tQklUKDMzKQorLyoweDAxMDcwKi8JdTY0CXRpbV9yaW5nX2Fzc247CisjZGVmaW5lIFZYR0VfSFdfVElNX1JJTkdfQVNTTl9JTlRfTlVNKHZhbCkgdnhnZV92QklUKHZhbCwgNiwgMikKKy8qMHgwMTA3OCovCXU2NAl0aW1fcmVtYXA7CisjZGVmaW5lCVZYR0VfSFdfVElNX1JFTUFQX1RYX0VOCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX1RJTV9SRU1BUF9SWF9FTgl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19USU1fUkVNQVBfT0ZGTE9BRF9FTgl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19USU1fUkVNQVBfVE9fVlBBVEhfTlVNKHZhbCkgdnhnZV92QklUKHZhbCwgMTEsIDUpCisvKjB4MDEwODAqLwl1NjQJdGltX3ZwYXRoX21hcDsKKyNkZWZpbmUgVlhHRV9IV19USU1fVlBBVEhfTUFQX0JNQVBfUk9PVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorLyoweDAxMDg4Ki8JdTY0CXRpbV9wY2lfY2ZnOworI2RlZmluZQlWWEdFX0hXX1RJTV9QQ0lfQ0ZHX0FERF9QQUQJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfVElNX1BDSV9DRkdfTk9fU05PT1AJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1RJTV9QQ0lfQ0ZHX1JFTEFYRUQJdnhnZV9tQklUKDIzKQorI2RlZmluZQlWWEdFX0hXX1RJTV9QQ0lfQ0ZHX0NUTF9TVFIJdnhnZV9tQklUKDMxKQorCXU4CXVudXNlZDAxMTAwWzB4MDExMDAtMHgwMTA5MF07CisKKy8qMHgwMTEwMCovCXU2NAlzZ3JwX2Fzc2lnbjsKKyNkZWZpbmUgVlhHRV9IV19TR1JQX0FTU0lHTl9TR1JQX0FTU0lHTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDY0KQorLyoweDAxMTA4Ki8JdTY0CXNncnBfYW9hX2FuZF9yZXN1bHQ7CisjZGVmaW5lCVZYR0VfSFdfU0dSUF9BT0FfQU5EX1JFU1VMVF9QRVRfU0dSUF9BT0FfQU5EX1JFU1VMVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMTExMCovCXU2NAlycGVfcGNpX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19QQURfTFJPX0RBVEFfRU5BQkxFCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1BBRF9MUk9fSERSX0VOQUJMRQl2eGdlX21CSVQoOCkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19QQURfTFJPX0NRRV9FTkFCTEUJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUEFEX05PTkxMX0NRRV9FTkFCTEUJdnhnZV9tQklUKDEwKQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1BBRF9CQVNFX0xMX0NRRV9FTkFCTEUJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1BBRF9MTF9DUUVfSURBVEFfRU5BQkxFCXZ4Z2VfbUJJVCgxMikKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19QQURfQ1FSUV9JUl9FTkFCTEUJdnhnZV9tQklUKDEzKQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1BBRF9DUVNRX0lSX0VOQUJMRQl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUEFEX0NRUlJfSVJfRU5BQkxFCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19OT1NOT09QX0RBVEEJdnhnZV9tQklUKDE4KQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX05PU05PT1BfTk9OTExfQ1FFCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19OT1NOT09QX0xMX0NRRQl2eGdlX21CSVQoMjApCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfTk9TTk9PUF9DUVJRX0lSCXZ4Z2VfbUJJVCgyMSkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19OT1NOT09QX0NRU1FfSVIJdnhnZV9tQklUKDIyKQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX05PU05PT1BfQ1FSUl9JUgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUkVMQVhFRF9EQVRBCXZ4Z2VfbUJJVCgyNikKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19SRUxBWEVEX05PTkxMX0NRRQl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUkVMQVhFRF9MTF9DUUUJdnhnZV9tQklUKDI4KQorI2RlZmluZQlWWEdFX0hXX1JQRV9QQ0lfQ0ZHX1JFTEFYRURfQ1FSUV9JUgl2eGdlX21CSVQoMjkpCisjZGVmaW5lCVZYR0VfSFdfUlBFX1BDSV9DRkdfUkVMQVhFRF9DUVNRX0lSCXZ4Z2VfbUJJVCgzMCkKKyNkZWZpbmUJVlhHRV9IV19SUEVfUENJX0NGR19SRUxBWEVEX0NRUlJfSVIJdnhnZV9tQklUKDMxKQorLyoweDAxMTE4Ki8JdTY0CXJwZV9scm9fY2ZnOworI2RlZmluZQlWWEdFX0hXX1JQRV9MUk9fQ0ZHX1NVUFBSRVNTX0xST19FVEhfVFJMUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19SUEVfTFJPX0NGR19BTExPV19MUk9fU05BUF9TTkFQSlVNQk9fTVJHCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19SUEVfTFJPX0NGR19BTExPV19MUk9fTExDX0xMQ0pVTUJPX01SRwl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfUlBFX0xST19DRkdfSU5DTF9BQ0tfQ05UX0lOX0NRRQl2eGdlX21CSVQoMjMpCisvKjB4MDExMjAqLwl1NjQJcGVfbXIydnBfYWNrX2Jsa19saW1pdDsKKyNkZWZpbmUgVlhHRV9IV19QRV9NUjJWUF9BQ0tfQkxLX0xJTUlUX0JMS19MSU1JVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwMTEyOCovCXU2NAlwZV9tcjJ2cF9yaXJyX2xpcnJfYmxrX2xpbWl0OworI2RlZmluZQlWWEdFX0hXX1BFX01SMlZQX1JJUlJfTElSUl9CTEtfTElNSVRfUklSUl9CTEtfTElNSVQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfUEVfTVIyVlBfUklSUl9MSVJSX0JMS19MSU1JVF9MSVJSX0JMS19MSU1JVCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDExMzAqLwl1NjQJdHhwZV9wY2lfbmNlX2NmZzsKKyNkZWZpbmUgVlhHRV9IV19UWFBFX1BDSV9OQ0VfQ0ZHX05DRV9USFJFU0godmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19UWFBFX1BDSV9OQ0VfQ0ZHX1BBRF9UT1dJX0VOQUJMRQl2eGdlX21CSVQoNTUpCisjZGVmaW5lCVZYR0VfSFdfVFhQRV9QQ0lfTkNFX0NGR19OT1NOT09QX1RPV0kJdnhnZV9tQklUKDYzKQorCXU4CXVudXNlZDAxMTgwWzB4MDExODAtMHgwMTEzOF07CisKKy8qMHgwMTE4MCovCXU2NAltc2dfcXBhZF9lbl9jZmc7CisjZGVmaW5lCVZYR0VfSFdfTVNHX1FQQURfRU5fQ0ZHX1VNUV9CV1JfUkVBRAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NU0dfUVBBRF9FTl9DRkdfRE1RX0JXUl9SRUFECXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX01TR19RUEFEX0VOX0NGR19NWFBfR0VORE1BX1JFQUQJdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX01TR19RUEFEX0VOX0NGR19VWFBfR0VORE1BX1JFQUQJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX01TR19RUEFEX0VOX0NGR19VTVFfTVNHX1dSSVRFCXZ4Z2VfbUJJVCgxOSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfUVBBRF9FTl9DRkdfVU1RRE1RX0lSX1dSSVRFCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19NU0dfUVBBRF9FTl9DRkdfTVhQX0dFTkRNQV9XUklURQl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX1FQQURfRU5fQ0ZHX1VYUF9HRU5ETUFfV1JJVEUJdnhnZV9tQklUKDMxKQorLyoweDAxMTg4Ki8JdTY0CW1zZ19wY2lfY2ZnOworI2RlZmluZQlWWEdFX0hXX01TR19QQ0lfQ0ZHX0dFTkRNQV9OT19TTk9PUAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19NU0dfUENJX0NGR19VTVFETVFfSVJfTk9fU05PT1AJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfTVNHX1BDSV9DRkdfVU1RX05PX1NOT09QCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19NU0dfUENJX0NGR19ETVFfTk9fU05PT1AJdnhnZV9tQklUKDE1KQorLyoweDAxMTkwKi8JdTY0CXVtcWRtcV9pcl9pbml0OworI2RlZmluZSBWWEdFX0hXX1VNUURNUV9JUl9JTklUX0hPU1RfV1JJVEVfQUREKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDExOTgqLwl1NjQJZG1xX2lyX2ludDsKKyNkZWZpbmUJVlhHRV9IV19ETVFfSVJfSU5UX0lNTUVEX0VOQUJMRQl2eGdlX21CSVQoNikKKyNkZWZpbmUJVlhHRV9IV19ETVFfSVJfSU5UX0VWRU5UX0VOQUJMRQl2eGdlX21CSVQoNykKKyNkZWZpbmUgVlhHRV9IV19ETVFfSVJfSU5UX05VTUJFUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDksIDcpCisjZGVmaW5lIFZYR0VfSFdfRE1RX0lSX0lOVF9CSVRNQVAodmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisvKjB4MDExYTAqLwl1NjQJZG1xX2J3cl9pbml0X2FkZDsKKyNkZWZpbmUgVlhHRV9IV19ETVFfQldSX0lOSVRfQUREX0hPU1QodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMTFhOCovCXU2NAlkbXFfYndyX2luaXRfYnl0ZTsKKyNkZWZpbmUgVlhHRV9IV19ETVFfQldSX0lOSVRfQllURV9DT1VOVCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDMyKQorLyoweDAxMWIwKi8JdTY0CWRtcV9pcjsKKyNkZWZpbmUgVlhHRV9IV19ETVFfSVJfUE9MSUNZKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKy8qMHgwMTFiOCovCXU2NAl1bXFfaW50OworI2RlZmluZQlWWEdFX0hXX1VNUV9JTlRfSU1NRURfRU5BQkxFCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX1VNUV9JTlRfRVZFTlRfRU5BQkxFCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX1VNUV9JTlRfTlVNQkVSKHZhbCkgdnhnZV92QklUKHZhbCwgOSwgNykKKyNkZWZpbmUgVlhHRV9IV19VTVFfSU5UX0JJVE1BUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKy8qMHgwMTFjMCovCXU2NAl1bXFfbXIydnBfYndyX3BmY2hfaW5pdDsKKyNkZWZpbmUgVlhHRV9IV19VTVFfTVIyVlBfQldSX1BGQ0hfSU5JVF9OVU1CRVIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA4KQorLyoweDAxMWM4Ki8JdTY0CXVtcV9id3JfcGZjaF9jdHJsOworI2RlZmluZQlWWEdFX0hXX1VNUV9CV1JfUEZDSF9DVFJMX1BPTExfRU4JdnhnZV9tQklUKDMpCisvKjB4MDExZDAqLwl1NjQJdW1xX21yMnZwX2J3cl9lb2w7CisjZGVmaW5lIFZYR0VfSFdfVU1RX01SMlZQX0JXUl9FT0xfUE9MTF9MQVRFTkNZKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDAxMWQ4Ki8JdTY0CXVtcV9id3JfaW5pdF9hZGQ7CisjZGVmaW5lIFZYR0VfSFdfVU1RX0JXUl9JTklUX0FERF9IT1NUKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDExZTAqLwl1NjQJdW1xX2J3cl9pbml0X2J5dGU7CisjZGVmaW5lIFZYR0VfSFdfVU1RX0JXUl9JTklUX0JZVEVfQ09VTlQodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAzMikKKy8qMHgwMTFlOCovCXU2NAlnZW5kbWFfaW50OworI2RlZmluZQlWWEdFX0hXX0dFTkRNQV9JTlRfSU1NRURfRU5BQkxFCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX0dFTkRNQV9JTlRfRVZFTlRfRU5BQkxFCXZ4Z2VfbUJJVCg3KQorI2RlZmluZSBWWEdFX0hXX0dFTkRNQV9JTlRfTlVNQkVSKHZhbCkgdnhnZV92QklUKHZhbCwgOSwgNykKKyNkZWZpbmUgVlhHRV9IV19HRU5ETUFfSU5UX0JJVE1BUCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCAxNikKKy8qMHgwMTFmMCovCXU2NAl1bXFkbXFfaXJfaW5pdF9ub3RpZnk7CisjZGVmaW5lCVZYR0VfSFdfVU1RRE1RX0lSX0lOSVRfTk9USUZZX1BVTFNFCXZ4Z2VfbUJJVCgzKQorLyoweDAxMWY4Ki8JdTY0CWRtcV9pbml0X25vdGlmeTsKKyNkZWZpbmUJVlhHRV9IV19ETVFfSU5JVF9OT1RJRllfUFVMU0UJdnhnZV9tQklUKDMpCisvKjB4MDEyMDAqLwl1NjQJdW1xX2luaXRfbm90aWZ5OworI2RlZmluZQlWWEdFX0hXX1VNUV9JTklUX05PVElGWV9QVUxTRQl2eGdlX21CSVQoMykKKwl1OAl1bnVzZWQwMTM4MFsweDAxMzgwLTB4MDEyMDhdOworCisvKjB4MDEzODAqLwl1NjQJdHBhX2NmZzsKKyNkZWZpbmUJVlhHRV9IV19UUEFfQ0ZHX0lHTk9SRV9GUkFNRV9FUlIJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVFBBX0NGR19JUFY2X1NUT1BfU0VBUkNISU5HCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1RQQV9DRkdfTDRfUFNIRFJfUFJFU0VOVAl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfVFBBX0NGR19TVVBQT1JUX01PQklMRV9JUFY2X0hEUlMJdnhnZV9tQklUKDE1KQorCXU4CXVudXNlZDAxNDAwWzB4MDE0MDAtMHgwMTM4OF07CisKKy8qMHgwMTQwMCovCXU2NAl0eF92cF9yZXNldF9kaXNjYXJkZWRfZnJtczsKKyNkZWZpbmUJVlhHRV9IV19UWF9WUF9SRVNFVF9ESVNDQVJERURfRlJNU19UWF9WUF9SRVNFVF9ESVNDQVJERURfRlJNUyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCA0OCwgMTYpCisJdTgJdW51c2VkMDE0ODBbMHgwMTQ4MC0weDAxNDA4XTsKKworLyoweDAxNDgwKi8JdTY0CWZhdV9ycGFfdmNmZzsKKyNkZWZpbmUJVlhHRV9IV19GQVVfUlBBX1ZDRkdfTDRfQ09NUF9DU1VNCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0ZBVV9SUEFfVkNGR19MM19JTkNMX0NGCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19GQVVfUlBBX1ZDRkdfTDNfQ09NUF9DU1VNCXZ4Z2VfbUJJVCgxNSkKKwl1OAl1bnVzZWQwMTRkMFsweDAxNGQwLTB4MDE0ODhdOworCisvKjB4MDE0ZDAqLwl1NjQJZGJnX3N0YXRzX3J4X21wYTsKKyNkZWZpbmUgVlhHRV9IV19EQkdfU1RBVFNfUlhfTVBBX0NSQ19GQUlMX0ZSTVModmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxNikKKyNkZWZpbmUgVlhHRV9IV19EQkdfU1RBVFNfUlhfTVBBX01SS19GQUlMX0ZSTVModmFsKSB2eGdlX3ZCSVQodmFsLCAxNiwgMTYpCisjZGVmaW5lIFZYR0VfSFdfREJHX1NUQVRTX1JYX01QQV9MRU5fRkFJTF9GUk1TKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDE2KQorLyoweDAxNGQ4Ki8JdTY0CWRiZ19zdGF0c19yeF9mYXU7CisjZGVmaW5lIFZYR0VfSFdfREJHX1NUQVRTX1JYX0ZBVV9SWF9XT0xfRlJNUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUU19SWF9GQVVfUlhfVlBfUkVTRVRfRElTQ0FSREVEX0ZSTVModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMTYsIDE2KQorI2RlZmluZQlWWEdFX0hXX0RCR19TVEFUU19SWF9GQVVfUlhfUEVSTUlUVEVEX0ZSTVModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMzIsIDMyKQorCXU4CXVudXNlZDAxNGYwWzB4MDE0ZjAtMHgwMTRlMF07CisKKy8qMHgwMTRmMCovCXU2NAlmYm1jX3ZwX3JkeTsKKyNkZWZpbmUJVlhHRV9IV19GQk1DX1ZQX1JEWV9RVUVVRV9TUEFWX0ZNCXZ4Z2VfbUJJVCgwKQorCXU4CXVudXNlZDAxZTAwWzB4MDFlMDAtMHgwMTRmOF07CisKKy8qMHgwMWUwMCovCXU2NAl2cGF0aF9wY2lwaWZfaW50X3N0YXR1czsKKyNkZWZpbmUgXAorVlhHRV9IV19WUEFUSF9QQ0lQSUZfSU5UX1NUQVRVU19TUlBDSU1fTVNHX1RPX1ZQQVRIX1NSUENJTV9NU0dfVE9fVlBBVEhfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfUENJUElGX0lOVF9TVEFUVVNfVlBBVEhfU1BBUkVfUjFfVlBBVEhfU1BBUkVfUjFfSU5UIFwKKwkJCQkJCQkJdnhnZV9tQklUKDcpCisvKjB4MDFlMDgqLwl1NjQJdnBhdGhfcGNpcGlmX2ludF9tYXNrOworCXU4CXVudXNlZDAxZTIwWzB4MDFlMjAtMHgwMWUxMF07CisKKy8qMHgwMWUyMCovCXU2NAlzcnBjaW1fbXNnX3RvX3ZwYXRoX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fTVNHX1RPX1ZQQVRIX1JFR19TV0lGX1NSUENJTV9UT19WUEFUSF9STVNHX0lOVCBcCisJCQkJCQkJCXZ4Z2VfbUJJVCgzKQorLyoweDAxZTI4Ki8JdTY0CXNycGNpbV9tc2dfdG9fdnBhdGhfbWFzazsKKy8qMHgwMWUzMCovCXU2NAlzcnBjaW1fbXNnX3RvX3ZwYXRoX2FsYXJtOworCXU4CXVudXNlZDAxZWEwWzB4MDFlYTAtMHgwMWUzOF07CisKKy8qMHgwMWVhMCovCXU2NAl2cGF0aF90b19zcnBjaW1fd21zZzsKKyNkZWZpbmUgVlhHRV9IV19WUEFUSF9UT19TUlBDSU1fV01TR19WUEFUSF9UT19TUlBDSU1fV01TRyh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCA2NCkKKy8qMHgwMWVhOCovCXU2NAl2cGF0aF90b19zcnBjaW1fd21zZ190cmlnOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1RPX1NSUENJTV9XTVNHX1RSSUdfVlBBVEhfVE9fU1JQQ0lNX1dNU0dfVFJJRyBcCisJCQkJCQkJdnhnZV9tQklUKDApCisJdTgJdW51c2VkMDIwMDBbMHgwMjAwMC0weDAxZWIwXTsKKworLyoweDAyMDAwKi8JdTY0CXZwYXRoX2dlbmVyYWxfaW50X3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfUElDX0lOVAl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfUENJX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfV1JETUFfSU5UCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfWE1BQ19JTlQJdnhnZV9tQklUKDE5KQorLyoweDAyMDA4Ki8JdTY0CXZwYXRoX2dlbmVyYWxfaW50X21hc2s7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfTUFTS19QSUNfSU5UCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX01BU0tfUENJX0lOVAl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9NQVNLX1dSRE1BX0lOVAl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfTUFTS19YTUFDX0lOVAl2eGdlX21CSVQoMTkpCisvKjB4MDIwMTAqLwl1NjQJdnBhdGhfcHBpZl9pbnRfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX1BQSUZfSU5UX1NUQVRVU19LREZDQ1RMX0VSUk9SU19LREZDQ1RMX0lOVCBcCisJCQkJCQkJdnhnZV9tQklUKDMpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfUFBJRl9JTlRfU1RBVFVTX0dFTkVSQUxfRVJST1JTX0dFTkVSQUxfSU5UIFwKKwkJCQkJCQl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9QUElGX0lOVF9TVEFUVVNfUENJX0NPTkZJR19FUlJPUlNfUENJX0NPTkZJR19JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUgXAorVlhHRV9IV19WUEFUSF9QUElGX0lOVF9TVEFUVVNfTVJQQ0lNX1RPX1ZQQVRIX0FMQVJNX01SUENJTV9UT19WUEFUSF9BTEFSTV9JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUgXAorVlhHRV9IV19WUEFUSF9QUElGX0lOVF9TVEFUVVNfU1JQQ0lNX1RPX1ZQQVRIX0FMQVJNX1NSUENJTV9UT19WUEFUSF9BTEFSTV9JTlQgXAorCQkJCQkJCXZ4Z2VfbUJJVCgxOSkKKy8qMHgwMjAxOCovCXU2NAl2cGF0aF9wcGlmX2ludF9tYXNrOworLyoweDAyMDIwKi8JdTY0CWtkZmNjdGxfZXJyb3JzX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMF9PVlJXUgl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMV9PVlJXUgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMl9PVlJXUgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzBfUE9JU09OCXZ4Z2VfbUJJVCgxNSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMV9QT0lTT04JdnhnZV9tQklUKDE5KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8yX1BPSVNPTgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzBfRE1BX0VSUgl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzFfRE1BX0VSUgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzJfRE1BX0VSUgl2eGdlX21CSVQoMzkpCisvKjB4MDIwMjgqLwl1NjQJa2RmY2N0bF9lcnJvcnNfbWFzazsKKy8qMHgwMjAzMCovCXU2NAlrZGZjY3RsX2Vycm9yc19hbGFybTsKKwl1OAl1bnVzZWQwMjA0MFsweDAyMDQwLTB4MDIwMzhdOworCisvKjB4MDIwNDAqLwl1NjQJZ2VuZXJhbF9lcnJvcnNfcmVnOworI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19EQkxHRU5fRklGTzBfT1ZSRkxPVwl2eGdlX21CSVQoMykKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfREJMR0VOX0ZJRk8xX09WUkZMT1cJdnhnZV9tQklUKDcpCisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX0RCTEdFTl9GSUZPMl9PVlJGTE9XCXZ4Z2VfbUJJVCgxMSkKKyNkZWZpbmUJVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfU1RBVFNCX1BJRl9DSEFJTl9FUlIJdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19TVEFUU0JfRFJPUF9USU1FT1VUX1JFUQl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX1RHVF9JTExFR0FMX0FDQ0VTUwl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX0lOSV9TRVJSX0RFVAl2eGdlX21CSVQoMzEpCisvKjB4MDIwNDgqLwl1NjQJZ2VuZXJhbF9lcnJvcnNfbWFzazsKKy8qMHgwMjA1MCovCXU2NAlnZW5lcmFsX2Vycm9yc19hbGFybTsKKy8qMHgwMjA1OCovCXU2NAlwY2lfY29uZmlnX2Vycm9yc19yZWc7CisjZGVmaW5lCVZYR0VfSFdfUENJX0NPTkZJR19FUlJPUlNfUkVHX1BDSUNPTkZJR19TVEFUVVNfRVJSCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX1BDSV9DT05GSUdfRVJST1JTX1JFR19QQ0lDT05GSUdfVU5DT1JfRVJSCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX1BDSV9DT05GSUdfRVJST1JTX1JFR19QQ0lDT05GSUdfQ09SX0VSUgl2eGdlX21CSVQoMTEpCisvKjB4MDIwNjAqLwl1NjQJcGNpX2NvbmZpZ19lcnJvcnNfbWFzazsKKy8qMHgwMjA2OCovCXU2NAlwY2lfY29uZmlnX2Vycm9yc19hbGFybTsKKy8qMHgwMjA3MCovCXU2NAltcnBjaW1fdG9fdnBhdGhfYWxhcm1fcmVnOworI2RlZmluZQlWWEdFX0hXX01SUENJTV9UT19WUEFUSF9BTEFSTV9SRUdfUFBJRl9NUlBDSU1fVE9fVlBBVEhfQUxBUk0gXAorCQkJCQkJCQl2eGdlX21CSVQoMykKKy8qMHgwMjA3OCovCXU2NAltcnBjaW1fdG9fdnBhdGhfYWxhcm1fbWFzazsKKy8qMHgwMjA4MCovCXU2NAltcnBjaW1fdG9fdnBhdGhfYWxhcm1fYWxhcm07CisvKjB4MDIwODgqLwl1NjQJc3JwY2ltX3RvX3ZwYXRoX2FsYXJtX3JlZzsKKyNkZWZpbmUJVlhHRV9IV19TUlBDSU1fVE9fVlBBVEhfQUxBUk1fUkVHX1BQSUZfU1JQQ0lNX1RPX1ZQQVRIX0FMQVJNKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDAsIDE3KQorLyoweDAyMDkwKi8JdTY0CXNycGNpbV90b192cGF0aF9hbGFybV9tYXNrOworLyoweDAyMDk4Ki8JdTY0CXNycGNpbV90b192cGF0aF9hbGFybV9hbGFybTsKKwl1OAl1bnVzZWQwMjEwOFsweDAyMTA4LTB4MDIwYTBdOworCisvKjB4MDIxMDgqLwl1NjQJa2RmY2N0bF9zdGF0dXM7CisjZGVmaW5lIFZYR0VfSFdfS0RGQ0NUTF9TVEFUVVNfS0RGQ0NUTF9GSUZPMF9QUkVTKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgOCkKKyNkZWZpbmUgVlhHRV9IV19LREZDQ1RMX1NUQVRVU19LREZDQ1RMX0ZJRk8xX1BSRVModmFsKSB2eGdlX3ZCSVQodmFsLCA4LCA4KQorI2RlZmluZSBWWEdFX0hXX0tERkNDVExfU1RBVFVTX0tERkNDVExfRklGTzJfUFJFUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDE2LCA4KQorI2RlZmluZSBWWEdFX0hXX0tERkNDVExfU1RBVFVTX0tERkNDVExfRklGTzBfT1ZSV1IodmFsKSB2eGdlX3ZCSVQodmFsLCAyNCwgOCkKKyNkZWZpbmUgVlhHRV9IV19LREZDQ1RMX1NUQVRVU19LREZDQ1RMX0ZJRk8xX09WUldSKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDgpCisjZGVmaW5lIFZYR0VfSFdfS0RGQ0NUTF9TVEFUVVNfS0RGQ0NUTF9GSUZPMl9PVlJXUih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDQwLCA4KQorLyoweDAyMTEwKi8JdTY0CXJzdGhkbHJfc3RhdHVzOworI2RlZmluZQlWWEdFX0hXX1JTVEhETFJfU1RBVFVTX1JTVEhETFJfQ1VSUkVOVF9SRVNFVAl2eGdlX21CSVQoMykKKyNkZWZpbmUgVlhHRV9IV19SU1RIRExSX1NUQVRVU19SU1RIRExSX0NVUlJFTlRfVlBJTih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDYsIDIpCisvKjB4MDIxMTgqLwl1NjQJZmlmbzBfc3RhdHVzOworI2RlZmluZSBWWEdFX0hXX0ZJRk8wX1NUQVRVU19EQkxHRU5fRklGTzBfUkRJRFgodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCAxMikKKy8qMHgwMjEyMCovCXU2NAlmaWZvMV9zdGF0dXM7CisjZGVmaW5lIFZYR0VfSFdfRklGTzFfU1RBVFVTX0RCTEdFTl9GSUZPMV9SRElEWCh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDEyKQorLyoweDAyMTI4Ki8JdTY0CWZpZm8yX3N0YXR1czsKKyNkZWZpbmUgVlhHRV9IV19GSUZPMl9TVEFUVVNfREJMR0VOX0ZJRk8yX1JESURYKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMTIpCisJdTgJdW51c2VkMDIxNThbMHgwMjE1OC0weDAyMTMwXTsKKworLyoweDAyMTU4Ki8JdTY0CXRndF9pbGxlZ2FsX2FjY2VzczsKKyNkZWZpbmUgVlhHRV9IV19UR1RfSUxMRUdBTF9BQ0NFU1NfU1dJRl9SRUdJT04odmFsKSB2eGdlX3ZCSVQodmFsLCAxLCA3KQorCXU4CXVudXNlZDAyMjAwWzB4MDIyMDAtMHgwMjE2MF07CisKKy8qMHgwMjIwMCovCXU2NAl2cGF0aF9nZW5lcmFsX2NmZzE7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfR0VORVJBTF9DRkcxX1RDX1ZBTFVFKHZhbCkgdnhnZV92QklUKHZhbCwgMSwgMykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0NGRzFfREFUQV9CWVRFX1NXQVBFTgl2eGdlX21CSVQoNykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0NGRzFfREFUQV9GTElQRU4JdnhnZV9tQklUKDExKQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfQ0ZHMV9DVExfQllURV9TV0FQRU4JdnhnZV9tQklUKDE1KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfQ0ZHMV9DVExfRkxJUEVOCXZ4Z2VfbUJJVCgyMykKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0NGRzFfTVNJWF9BRERSX1NXQVBFTgl2eGdlX21CSVQoNTEpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9DRkcxX01TSVhfQUREUl9GTElQRU4JdnhnZV9tQklUKDU1KQorI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfQ0ZHMV9NU0lYX0RBVEFfU1dBUEVOCXZ4Z2VfbUJJVCg1OSkKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0NGRzFfTVNJWF9EQVRBX0ZMSVBFTgl2eGdlX21CSVQoNjMpCisvKjB4MDIyMDgqLwl1NjQJdnBhdGhfZ2VuZXJhbF9jZmcyOworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfQ0ZHMl9TSVpFX1FVQU5UVU0odmFsKSB2eGdlX3ZCSVQodmFsLCAxLCAzKQorLyoweDAyMjEwKi8JdTY0CXZwYXRoX2dlbmVyYWxfY2ZnMzsKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0NGRzNfSUdOT1JFX1ZQQVRIX1JTVF9GT1JfSU5UQQl2eGdlX21CSVQoMykKKwl1OAl1bnVzZWQwMjIyMFsweDAyMjIwLTB4MDIyMThdOworCisvKjB4MDIyMjAqLwl1NjQJa2RmY2N0bF9jZmcwOworI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX1NXQVBFTl9GSUZPMAl2eGdlX21CSVQoMSkKKyNkZWZpbmUJVlhHRV9IV19LREZDQ1RMX0NGRzBfQllURV9TV0FQRU5fRklGTzEJdnhnZV9tQklUKDIpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfU1dBUEVOX0ZJRk8yCXZ4Z2VfbUJJVCgzKQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CSVRfRkxJUEVOX0ZJRk8wCXZ4Z2VfbUJJVCg1KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CSVRfRkxJUEVOX0ZJRk8xCXZ4Z2VfbUJJVCg2KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CSVRfRkxJUEVOX0ZJRk8yCXZ4Z2VfbUJJVCg3KQorI2RlZmluZQlWWEdFX0hXX0tERkNDVExfQ0ZHMF9CWVRFX01BU0tfQllURTBfRklGTzAJdnhnZV9tQklUKDkpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFMF9GSUZPMQl2eGdlX21CSVQoMTApCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFMF9GSUZPMgl2eGdlX21CSVQoMTEpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFMV9GSUZPMAl2eGdlX21CSVQoMTMpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFMV9GSUZPMQl2eGdlX21CSVQoMTQpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFMV9GSUZPMgl2eGdlX21CSVQoMTUpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFMl9GSUZPMAl2eGdlX21CSVQoMTcpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFMl9GSUZPMQl2eGdlX21CSVQoMTgpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFMl9GSUZPMgl2eGdlX21CSVQoMTkpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFM19GSUZPMAl2eGdlX21CSVQoMjEpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFM19GSUZPMQl2eGdlX21CSVQoMjIpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFM19GSUZPMgl2eGdlX21CSVQoMjMpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFNF9GSUZPMAl2eGdlX21CSVQoMjUpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFNF9GSUZPMQl2eGdlX21CSVQoMjYpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFNF9GSUZPMgl2eGdlX21CSVQoMjcpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFNV9GSUZPMAl2eGdlX21CSVQoMjkpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFNV9GSUZPMQl2eGdlX21CSVQoMzApCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFNV9GSUZPMgl2eGdlX21CSVQoMzEpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFNl9GSUZPMAl2eGdlX21CSVQoMzMpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFNl9GSUZPMQl2eGdlX21CSVQoMzQpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFNl9GSUZPMgl2eGdlX21CSVQoMzUpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFN19GSUZPMAl2eGdlX21CSVQoMzcpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFN19GSUZPMQl2eGdlX21CSVQoMzgpCisjZGVmaW5lCVZYR0VfSFdfS0RGQ0NUTF9DRkcwX0JZVEVfTUFTS19CWVRFN19GSUZPMgl2eGdlX21CSVQoMzkpCisKKwl1OAl1bnVzZWQwMjI2OFsweDAyMjY4LTB4MDIyMjhdOworCisvKjB4MDIyNjgqLwl1NjQJc3RhdHNfY2ZnOworI2RlZmluZSBWWEdFX0hXX1NUQVRTX0NGR19TVEFSVF9IT1NUX0FERFIodmFsKSB2eGdlX3ZCSVQodmFsLCAwLCA1NykKKy8qMHgwMjI3MCovCXU2NAlpbnRlcnJ1cHRfY2ZnMDsKKyNkZWZpbmUgVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMF9NU0lYX0ZPUl9SWFRJKHZhbCkgdnhnZV92QklUKHZhbCwgMSwgNykKKyNkZWZpbmUgVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMF9HUk9VUDBfTVNJWF9GT1JfVFhUSSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDksIDcpCisjZGVmaW5lIFZYR0VfSFdfSU5URVJSVVBUX0NGRzBfR1JPVVAxX01TSVhfRk9SX1RYVEkodmFsKSB2eGdlX3ZCSVQodmFsLCAxNywgNykKKyNkZWZpbmUgVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMF9HUk9VUDJfTVNJWF9GT1JfVFhUSSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDI1LCA3KQorI2RlZmluZSBWWEdFX0hXX0lOVEVSUlVQVF9DRkcwX0dST1VQM19NU0lYX0ZPUl9UWFRJKHZhbCkgdnhnZV92QklUKHZhbCwgMzMsIDcpCisJdTgJdW51c2VkMDIyODBbMHgwMjI4MC0weDAyMjc4XTsKKworLyoweDAyMjgwKi8JdTY0CWludGVycnVwdF9jZmcyOworI2RlZmluZSBWWEdFX0hXX0lOVEVSUlVQVF9DRkcyX0FMQVJNX01BUF9UT19NU0codmFsKSB2eGdlX3ZCSVQodmFsLCAxLCA3KQorLyoweDAyMjg4Ki8JdTY0CW9uZV9zaG90X3ZlY3QwX2VuOworI2RlZmluZQlWWEdFX0hXX09ORV9TSE9UX1ZFQ1QwX0VOX09ORV9TSE9UX1ZFQ1QwX0VOCXZ4Z2VfbUJJVCgzKQorLyoweDAyMjkwKi8JdTY0CW9uZV9zaG90X3ZlY3QxX2VuOworI2RlZmluZQlWWEdFX0hXX09ORV9TSE9UX1ZFQ1QxX0VOX09ORV9TSE9UX1ZFQ1QxX0VOCXZ4Z2VfbUJJVCgzKQorLyoweDAyMjk4Ki8JdTY0CW9uZV9zaG90X3ZlY3QyX2VuOworI2RlZmluZQlWWEdFX0hXX09ORV9TSE9UX1ZFQ1QyX0VOX09ORV9TSE9UX1ZFQ1QyX0VOCXZ4Z2VfbUJJVCgzKQorLyoweDAyMmEwKi8JdTY0CW9uZV9zaG90X3ZlY3QzX2VuOworI2RlZmluZQlWWEdFX0hXX09ORV9TSE9UX1ZFQ1QzX0VOX09ORV9TSE9UX1ZFQ1QzX0VOCXZ4Z2VfbUJJVCgzKQorCXU4CXVudXNlZDAyMmIwWzB4MDIyYjAtMHgwMjJhOF07CisKKy8qMHgwMjJiMCovCXU2NAlwY2lfY29uZmlnX2FjY2Vzc19jZmcxOworI2RlZmluZSBWWEdFX0hXX1BDSV9DT05GSUdfQUNDRVNTX0NGRzFfQUREUkVTUyh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDAsIDEyKQorI2RlZmluZQlWWEdFX0hXX1BDSV9DT05GSUdfQUNDRVNTX0NGRzFfU0VMX0ZVTkMwCXZ4Z2VfbUJJVCgxNSkKKy8qMHgwMjJiOCovCXU2NAlwY2lfY29uZmlnX2FjY2Vzc19jZmcyOworI2RlZmluZQlWWEdFX0hXX1BDSV9DT05GSUdfQUNDRVNTX0NGRzJfUkVRCXZ4Z2VfbUJJVCgwKQorLyoweDAyMmMwKi8JdTY0CXBjaV9jb25maWdfYWNjZXNzX3N0YXR1czsKKyNkZWZpbmUJVlhHRV9IV19QQ0lfQ09ORklHX0FDQ0VTU19TVEFUVVNfQUNDRVNTX0VSUgl2eGdlX21CSVQoMCkKKyNkZWZpbmUgVlhHRV9IV19QQ0lfQ09ORklHX0FDQ0VTU19TVEFUVVNfREFUQSh2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKwl1OAl1bnVzZWQwMjMwMFsweDAyMzAwLTB4MDIyYzhdOworCisvKjB4MDIzMDAqLwl1NjQJdnBhdGhfZGVidWdfc3RhdHMwOworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTMF9JTklfTlVNX01XUl9TRU5UKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisvKjB4MDIzMDgqLwl1NjQJdnBhdGhfZGVidWdfc3RhdHMxOworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTMV9JTklfTlVNX01SRF9TRU5UKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisvKjB4MDIzMTAqLwl1NjQJdnBhdGhfZGVidWdfc3RhdHMyOworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTMl9JTklfTlVNX0NQTF9SQ1ZEKHZhbCkgdnhnZV92QklUKHZhbCwgMCwgMzIpCisvKjB4MDIzMTgqLwl1NjQJdnBhdGhfZGVidWdfc3RhdHMzOworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTM19JTklfTlVNX01XUl9CWVRFX1NFTlQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDIzMjAqLwl1NjQJdnBhdGhfZGVidWdfc3RhdHM0OworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTNF9JTklfTlVNX0NQTF9CWVRFX1JDVkQodmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgNjQpCisvKjB4MDIzMjgqLwl1NjQJdnBhdGhfZGVidWdfc3RhdHM1OworI2RlZmluZSBWWEdFX0hXX1ZQQVRIX0RFQlVHX1NUQVRTNV9XUkNSRFRBUkJfWE9GRih2YWwpIHZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwMjMzMCovCXU2NAl2cGF0aF9kZWJ1Z19zdGF0czY7CisjZGVmaW5lIFZYR0VfSFdfVlBBVEhfREVCVUdfU1RBVFM2X1JEQ1JEVEFSQl9YT0ZGKHZhbCkgdnhnZV92QklUKHZhbCwgMzIsIDMyKQorLyoweDAyMzM4Ki8JdTY0CXZwYXRoX2dlbnN0YXRzX2NvdW50MDE7CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQwMV9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAwLCAzMikKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9HRU5TVEFUU19DT1VOVDAxX1BQSUZfVlBBVEhfR0VOU1RBVFNfQ09VTlQwKHZhbCkgXAorCQkJCQkJCXZ4Z2VfdkJJVCh2YWwsIDMyLCAzMikKKy8qMHgwMjM0MCovCXU2NAl2cGF0aF9nZW5zdGF0c19jb3VudDIzOworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMjNfUFBJRl9WUEFUSF9HRU5TVEFUU19DT1VOVDModmFsKSBcCisJCQkJCQkJdnhnZV92QklUKHZhbCwgMCwgMzIpCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfR0VOU1RBVFNfQ09VTlQyM19QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UMih2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDIzNDgqLwl1NjQJdnBhdGhfZ2Vuc3RhdHNfY291bnQ0OworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNF9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNCh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisvKjB4MDIzNTAqLwl1NjQJdnBhdGhfZ2Vuc3RhdHNfY291bnQ1OworI2RlZmluZQlWWEdFX0hXX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNV9QUElGX1ZQQVRIX0dFTlNUQVRTX0NPVU5UNSh2YWwpIFwKKwkJCQkJCQl2eGdlX3ZCSVQodmFsLCAzMiwgMzIpCisJdTgJdW51c2VkMDI2NDhbMHgwMjY0OC0weDAyMzU4XTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgVlhHRV9IV19FRVBST01fU0laRQkoMHgwMSA8PCAxMSkKKworLyogQ2FwYWJpbGl0eSBsaXN0cyAqLworI2RlZmluZSAgVlhHRV9IV19QQ0lfRVhQX0xOS0NBUF9MTktfU1BFRUQgICAgMHhmICAvKiBTdXBwb3J0ZWQgTGluayBzcGVlZHMgKi8KKyNkZWZpbmUgIFZYR0VfSFdfUENJX0VYUF9MTktDQVBfTE5LX1dJRFRIICAgIDB4M2YwIC8qIFN1cHBvcnRlZCBMaW5rIHNwZWVkcy4gKi8KKyNkZWZpbmUgIFZYR0VfSFdfUENJX0VYUF9MTktDQVBfTFdfUkVTICAgICAgIDB4MCAgLyogUmVzZXJ2ZWQuICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlMGFlMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdHJhZmZpYy5jCkBAIC0wLDAgKzEsMjUyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBvZgorICogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqIERyaXZlcnMgYmFzZWQgb24gb3IgZGVyaXZlZCBmcm9tIHRoaXMgY29kZSBmYWxsIHVuZGVyIHRoZSBHUEwgYW5kIG11c3QKKyAqIHJldGFpbiB0aGUgYXV0aG9yc2hpcCwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIG5vdGljZS4gIFRoaXMgZmlsZSBpcyBub3QKKyAqIGEgY29tcGxldGUgcHJvZ3JhbSBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aGVuIHRoZSBlbnRpcmUgb3BlcmF0aW5nCisgKiBzeXN0ZW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTC4KKyAqIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIHZ4Z2UtdHJhZmZpYy5jOiBEcml2ZXIgZm9yIE5ldGVyaW9uIEluYydzIFgzMTAwIFNlcmllcyAxMEdiRSBQQ0llIEkvTworICogICAgICAgICAgICAgICAgIFZpcnR1YWxpemVkIFNlcnZlciBBZGFwdGVyLgorICogQ29weXJpZ2h0KGMpIDIwMDItMjAwOSBOZXRlcmlvbiBJbmMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ2eGdlLXRyYWZmaWMuaCIKKyNpbmNsdWRlICJ2eGdlLWNvbmZpZy5oIgorI2luY2x1ZGUgInZ4Z2UtbWFpbi5oIgorCisvKgorICogdnhnZV9od192cGF0aF9pbnRyX2VuYWJsZSAtIEVuYWJsZSB2cGF0aCBpbnRlcnJ1cHRzLgorICogQHZwOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgorICoKKyAqIEVuYWJsZSB2cGF0aCBpbnRlcnJ1cHRzLiBUaGUgZnVuY3Rpb24gaXMgdG8gYmUgZXhlY3V0ZWQgdGhlIGxhc3QgaW4KKyAqIHZwYXRoIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX2ludHJfZGlzYWJsZSgpCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9pbnRyX2VuYWJsZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJdTY0IHZhbDY0OworCisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2cGF0aCA9IHZwLT52cGF0aDsKKworCWlmICh2cGF0aC0+dnBfb3BlbiA9PSBWWEdFX0hXX1ZQX05PVF9PUEVOKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX1ZQQVRIX05PVF9PUEVOOworCQlnb3RvIGV4aXQ7CisJfQorCisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKworCXdyaXRlcShWWEdFX0hXX0lOVFJfTUFTS19BTEwsICZ2cF9yZWctPmtkZmNjdGxfZXJyb3JzX3JlZyk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+Z2VuZXJhbF9lcnJvcnNfcmVnKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5wY2lfY29uZmlnX2Vycm9yc19yZWcpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPm1ycGNpbV90b192cGF0aF9hbGFybV9yZWcpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnNycGNpbV90b192cGF0aF9hbGFybV9yZWcpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnZwYXRoX3BwaWZfaW50X3N0YXR1cyk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+c3JwY2ltX21zZ190b192cGF0aF9yZWcpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnZwYXRoX3BjaXBpZl9pbnRfc3RhdHVzKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5wcmNfYWxhcm1fcmVnKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT53cmRtYV9hbGFybV9zdGF0dXMpOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPmFzaWNfbnR3a192cF9lcnJfcmVnKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT54Z21hY192cF9pbnRfc3RhdHVzKTsKKworCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+dnBhdGhfZ2VuZXJhbF9pbnRfc3RhdHVzKTsKKworCS8qIE1hc2sgdW53YW50ZWQgaW50ZXJydXB0cyAqLworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnZwYXRoX3BjaXBpZl9pbnRfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+c3JwY2ltX21zZ190b192cGF0aF9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5zcnBjaW1fdG9fdnBhdGhfYWxhcm1fbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+bXJwY2ltX3RvX3ZwYXRoX2FsYXJtX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnBjaV9jb25maWdfZXJyb3JzX21hc2spOworCisJLyogVW5tYXNrIHRoZSBpbmRpdmlkdWFsIGludGVycnVwdHMgKi8KKworCXdyaXRlcSgodTMyKXZ4Z2VfYlZBTG4oKFZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX0RCTEdFTl9GSUZPMV9PVlJGTE9XfAorCQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19EQkxHRU5fRklGTzJfT1ZSRkxPV3wKKwkJVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfU1RBVFNCX0RST1BfVElNRU9VVF9SRVF8CisJCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX1NUQVRTQl9QSUZfQ0hBSU5fRVJSKSwgMCwgMzIpLAorCQkmdnBfcmVnLT5nZW5lcmFsX2Vycm9yc19tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCSh1MzIpdnhnZV9iVkFMbigoVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMV9PVlJXUnwKKwkJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMl9PVlJXUnwKKwkJVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMV9QT0lTT058CisJCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzJfUE9JU09OfAorCQlWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8xX0RNQV9FUlJ8CisJCVZYR0VfSFdfS0RGQ0NUTF9FUlJPUlNfUkVHX0tERkNDVExfRklGTzFfRE1BX0VSUiksIDAsIDMyKSwKKwkJJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKDAsICZ2cF9yZWctPnZwYXRoX3BwaWZfaW50X21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJKHUzMil2eGdlX2JWQUxuKFZYR0VfSFdfUFJDX0FMQVJNX1JFR19QUkNfUklOR19CVU1QLCAwLCAzMiksCisJCSZ2cF9yZWctPnByY19hbGFybV9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoMCwgJnZwX3JlZy0+d3JkbWFfYWxhcm1fbWFzayk7CisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigwLCAmdnBfcmVnLT54Z21hY192cF9pbnRfbWFzayk7CisKKwlpZiAodnBhdGgtPmhsZGV2LT5maXJzdF92cF9pZCAhPSB2cGF0aC0+dnBfaWQpCisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5hc2ljX250d2tfdnBfZXJyX21hc2spOworCWVsc2UKKwkJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKXZ4Z2VfYlZBTG4oKAorCQlWWEdFX0hXX0FTSUNfTlRXS19WUF9FUlJfUkVHX1hNQUNKX05UV0tfUkVBRkZJUk1FRF9GQVVMVCB8CisJCVZYR0VfSFdfQVNJQ19OVFdLX1ZQX0VSUl9SRUdfWE1BQ0pfTlRXS19SRUFGRklSTUVEX09LKSwgMCwgMzIpLAorCQkmdnBfcmVnLT5hc2ljX250d2tfdnBfZXJyX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigwLAorCQkmdnBfcmVnLT52cGF0aF9nZW5lcmFsX2ludF9tYXNrKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKKworfQorCisvKgorICogdnhnZV9od192cGF0aF9pbnRyX2Rpc2FibGUgLSBEaXNhYmxlIHZwYXRoIGludGVycnVwdHMuCisgKiBAdnA6IFZpcnR1YWwgUGF0aCBoYW5kbGUuCisgKgorICogRGlzYWJsZSB2cGF0aCBpbnRlcnJ1cHRzLiBUaGUgZnVuY3Rpb24gaXMgdG8gYmUgZXhlY3V0ZWQgdGhlIGxhc3QgaW4KKyAqIHZwYXRoIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX2ludHJfZW5hYmxlKCkKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX2ludHJfZGlzYWJsZSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQgdmFsNjQ7CisKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZzsKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJaWYgKHZwYXRoLT52cF9vcGVuID09IFZYR0VfSFdfVlBfTk9UX09QRU4pIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfVlBBVEhfTk9UX09QRU47CisJCWdvdG8gZXhpdDsKKwl9CisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCSh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkmdnBfcmVnLT52cGF0aF9nZW5lcmFsX2ludF9tYXNrKTsKKworCXZhbDY0ID0gVlhHRV9IV19USU1fQ0xSX0lOVF9FTl9WUCgxIDw8ICgxNiAtIHZwYXRoLT52cF9pZCkpOworCisJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwgJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+Z2VuZXJhbF9lcnJvcnNfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+cGNpX2NvbmZpZ19lcnJvcnNfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+bXJwY2ltX3RvX3ZwYXRoX2FsYXJtX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnNycGNpbV90b192cGF0aF9hbGFybV9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT52cGF0aF9wcGlmX2ludF9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5zcnBjaW1fbXNnX3RvX3ZwYXRoX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnZwYXRoX3BjaXBpZl9pbnRfbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+d3JkbWFfYWxhcm1fbWFzayk7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpVlhHRV9IV19JTlRSX01BU0tfQUxMLAorCQkJJnZwX3JlZy0+cHJjX2FsYXJtX21hc2spOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKVZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCSZ2cF9yZWctPnhnbWFjX3ZwX2ludF9tYXNrKTsKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMilWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkmdnBfcmVnLT5hc2ljX250d2tfdnBfZXJyX21hc2spOworCitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od19jaGFubmVsX21zaXhfbWFzayAtIE1hc2sgTVNJWCBWZWN0b3IuCisgKiBAY2hhbm5laDogQ2hhbm5lbCBmb3Igcnggb3IgdHggaGFuZGxlCisgKiBAbXNpeF9pZDogIE1TSVggSUQKKyAqCisgKiBUaGUgZnVuY3Rpb24gbWFza3MgdGhlIG1zaXggaW50ZXJydXB0IGZvciB0aGUgZ2l2ZW4gbXNpeF9pZAorICoKKyAqIFJldHVybnM6IDAKKyAqLwordm9pZCB2eGdlX2h3X2NoYW5uZWxfbXNpeF9tYXNrKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCwgaW50IG1zaXhfaWQpCit7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKAorCQkodTMyKXZ4Z2VfYlZBTG4odnhnZV9tQklUKGNoYW5uZWwtPmZpcnN0X3ZwX2lkKyhtc2l4X2lkLzQpKSwKKwkJCTAsIDMyKSwKKwkJJmNoYW5uZWwtPmNvbW1vbl9yZWctPnNldF9tc2l4X21hc2tfdmVjdFttc2l4X2lkJTRdKTsKKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X2NoYW5uZWxfbXNpeF91bm1hc2sgLSBVbm1hc2sgdGhlIE1TSVggVmVjdG9yLgorICogQGNoYW5uZWg6IENoYW5uZWwgZm9yIHJ4IG9yIHR4IGhhbmRsZQorICogQG1zaXhfaWQ6ICBNU0kgSUQKKyAqCisgKiBUaGUgZnVuY3Rpb24gdW5tYXNrcyB0aGUgbXNpeCBpbnRlcnJ1cHQgZm9yIHRoZSBnaXZlbiBtc2l4X2lkCisgKgorICogUmV0dXJuczogMAorICovCit2b2lkCit2eGdlX2h3X2NoYW5uZWxfbXNpeF91bm1hc2soc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCBpbnQgbXNpeF9pZCkKK3sKKworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCSh1MzIpdnhnZV9iVkFMbih2eGdlX21CSVQoY2hhbm5lbC0+Zmlyc3RfdnBfaWQrKG1zaXhfaWQvNCkpLAorCQkJMCwgMzIpLAorCQkmY2hhbm5lbC0+Y29tbW9uX3JlZy0+Y2xlYXJfbXNpeF9tYXNrX3ZlY3RbbXNpeF9pZCU0XSk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogdnhnZV9od19kZXZpY2Vfc2V0X2ludHJfdHlwZSAtIFVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24KKyAqCQl3aXRoIG5ldyBpbnRlcnJ1cHQgdHlwZS4KKyAqIEBobGRldjogSFcgZGV2aWNlIGhhbmRsZS4KKyAqIEBpbnRyX21vZGU6IE5ldyBpbnRlcnJ1cHQgdHlwZQorICovCit1MzIgdnhnZV9od19kZXZpY2Vfc2V0X2ludHJfdHlwZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYsIHUzMiBpbnRyX21vZGUpCit7CisKKwlpZiAoKGludHJfbW9kZSAhPSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FKSAmJgorCSAgIChpbnRyX21vZGUgIT0gVlhHRV9IV19JTlRSX01PREVfTVNJWCkgJiYKKwkgICAoaW50cl9tb2RlICE9IFZYR0VfSFdfSU5UUl9NT0RFX01TSVhfT05FX1NIT1QpICYmCisJICAgKGludHJfbW9kZSAhPSBWWEdFX0hXX0lOVFJfTU9ERV9ERUYpKQorCQlpbnRyX21vZGUgPSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FOworCisJaGxkZXYtPmNvbmZpZy5pbnRyX21vZGUgPSBpbnRyX21vZGU7CisJcmV0dXJuIGludHJfbW9kZTsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9pbnRyX2VuYWJsZSAtIEVuYWJsZSBpbnRlcnJ1cHRzLgorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICogQG9wOiBPbmUgb2YgdGhlIGVudW0gdnhnZV9od19kZXZpY2VfaW50ciBlbnVtZXJhdGVkIHZhbHVlcyBzcGVjaWZ5aW5nCisgKiAgICAgIHRoZSB0eXBlKHMpIG9mIGludGVycnVwdHMgdG8gZW5hYmxlLgorICoKKyAqIEVuYWJsZSBUaXRhbiBpbnRlcnJ1cHRzLiBUaGUgZnVuY3Rpb24gaXMgdG8gYmUgZXhlY3V0ZWQgdGhlIGxhc3QgaW4KKyAqIFRpdGFuIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X2RldmljZV9pbnRyX2Rpc2FibGUoKQorICovCit2b2lkIHZ4Z2VfaHdfZGV2aWNlX2ludHJfZW5hYmxlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl1MzIgaTsKKwl1NjQgdmFsNjQ7CisJdTMyIHZhbDMyOworCisJZm9yIChpID0gMDsgaSA8IFZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFM7IGkrKykgeworCisJCWlmICghKGhsZGV2LT52cGF0aHNfZGVwbG95ZWQgJiB2eGdlX21CSVQoaSkpKQorCQkJY29udGludWU7CisKKwkJdnhnZV9od192cGF0aF9pbnRyX2VuYWJsZSgKKwkJCVZYR0VfSFdfVklSVFVBTF9QQVRIX0hBTkRMRSgmaGxkZXYtPnZpcnR1YWxfcGF0aHNbaV0pKTsKKwl9CisKKwlpZiAoaGxkZXYtPmNvbmZpZy5pbnRyX21vZGUgPT0gVlhHRV9IV19JTlRSX01PREVfSVJRTElORSkgeworCQl2YWw2NCA9IGhsZGV2LT50aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gfAorCQkJaGxkZXYtPnRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1JYXTsKKworCQlpZiAodmFsNjQgIT0gMCkgeworCQkJd3JpdGVxKHZhbDY0LCAmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfc3RhdHVzMCk7CisKKwkJCXdyaXRlcSh+dmFsNjQsICZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9tYXNrMCk7CisJCX0KKworCQl2YWwzMiA9IGhsZGV2LT50aW1faW50X21hc2sxW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gfAorCQkJaGxkZXYtPnRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1JYXTsKKworCQlpZiAodmFsMzIgIT0gMCkgeworCQkJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcih2YWwzMiwKKwkJCQkJJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X3N0YXR1czEpOworCisJCQlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKH52YWwzMiwKKwkJCQkJJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2sxKTsKKwkJfQorCX0KKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT5jb21tb25fcmVnLT50aXRhbl9nZW5lcmFsX2ludF9zdGF0dXMpOworCisJdnhnZV9od19kZXZpY2VfdW5tYXNrX2FsbChobGRldik7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogdnhnZV9od19kZXZpY2VfaW50cl9kaXNhYmxlIC0gRGlzYWJsZSBUaXRhbiBpbnRlcnJ1cHRzLgorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICogQG9wOiBPbmUgb2YgdGhlIGVudW0gdnhnZV9od19kZXZpY2VfaW50ciBlbnVtZXJhdGVkIHZhbHVlcyBzcGVjaWZ5aW5nCisgKiAgICAgIHRoZSB0eXBlKHMpIG9mIGludGVycnVwdHMgdG8gZGlzYWJsZS4KKyAqCisgKiBEaXNhYmxlIFRpdGFuIGludGVycnVwdHMuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfZGV2aWNlX2ludHJfZW5hYmxlKCkKKyAqLwordm9pZCB2eGdlX2h3X2RldmljZV9pbnRyX2Rpc2FibGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KQoreworCXUzMiBpOworCisJdnhnZV9od19kZXZpY2VfbWFza19hbGwoaGxkZXYpOworCisJLyogbWFzayBhbGwgdGhlIHRpbSBpbnRlcnJ1cHRzICovCisJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwgJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2swKTsKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKFZYR0VfSFdfREVGQVVMVF8zMiwKKwkJJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2sxKTsKKworCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQlpZiAoIShobGRldi0+dnBhdGhzX2RlcGxveWVkICYgdnhnZV9tQklUKGkpKSkKKwkJCWNvbnRpbnVlOworCisJCXZ4Z2VfaHdfdnBhdGhfaW50cl9kaXNhYmxlKAorCQkJVlhHRV9IV19WSVJUVUFMX1BBVEhfSEFORExFKCZobGRldi0+dmlydHVhbF9wYXRoc1tpXSkpOworCX0KKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9tYXNrX2FsbCAtIE1hc2sgYWxsIGRldmljZSBpbnRlcnJ1cHRzLgorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICoKKyAqIE1hc2sJYWxsIGRldmljZSBpbnRlcnJ1cHRzLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X2RldmljZV91bm1hc2tfYWxsKCkKKyAqLwordm9pZCB2eGdlX2h3X2RldmljZV9tYXNrX2FsbChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJdTY0IHZhbDY0OworCisJdmFsNjQgPSBWWEdFX0hXX1RJVEFOX01BU0tfQUxMX0lOVF9BTEFSTSB8CisJCVZYR0VfSFdfVElUQU5fTUFTS19BTExfSU5UX1RSQUZGSUM7CisKKwlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpdnhnZV9iVkFMbih2YWw2NCwgMCwgMzIpLAorCQkJCSZobGRldi0+Y29tbW9uX3JlZy0+dGl0YW5fbWFza19hbGxfaW50KTsKKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV91bm1hc2tfYWxsIC0gVW5tYXNrIGFsbCBkZXZpY2UgaW50ZXJydXB0cy4KKyAqIEBobGRldjogSFcgZGV2aWNlIGhhbmRsZS4KKyAqCisgKiBVbm1hc2sgYWxsIGRldmljZSBpbnRlcnJ1cHRzLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X2RldmljZV9tYXNrX2FsbCgpCisgKi8KK3ZvaWQgdnhnZV9od19kZXZpY2VfdW5tYXNrX2FsbChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJdTY0IHZhbDY0ID0gMDsKKworCWlmIChobGRldi0+Y29uZmlnLmludHJfbW9kZSA9PSBWWEdFX0hXX0lOVFJfTU9ERV9JUlFMSU5FKQorCQl2YWw2NCA9ICBWWEdFX0hXX1RJVEFOX01BU0tfQUxMX0lOVF9UUkFGRklDOworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigodTMyKXZ4Z2VfYlZBTG4odmFsNjQsIDAsIDMyKSwKKwkJCSZobGRldi0+Y29tbW9uX3JlZy0+dGl0YW5fbWFza19hbGxfaW50KTsKKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9mbHVzaF9pbyAtIEZsdXNoIGlvIHdyaXRlcy4KKyAqIEBobGRldjogSFcgZGV2aWNlIGhhbmRsZS4KKyAqCisgKiBUaGUgZnVuY3Rpb24JcGVyZm9ybXMgYSByZWFkIG9wZXJhdGlvbiB0byBmbHVzaCBpbyB3cml0ZXMuCisgKgorICogUmV0dXJuczogdm9pZAorICovCit2b2lkIHZ4Z2VfaHdfZGV2aWNlX2ZsdXNoX2lvKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldikKK3sKKwl1MzIgdmFsMzI7CisKKwl2YWwzMiA9IHJlYWRsKCZobGRldi0+Y29tbW9uX3JlZy0+dGl0YW5fZ2VuZXJhbF9pbnRfc3RhdHVzKTsKK30KKworLyoqCisgKiB2eGdlX2h3X2RldmljZV9iZWdpbl9pcnEgLSBCZWdpbiBJUlEgcHJvY2Vzc2luZy4KKyAqIEBobGRldjogSFcgZGV2aWNlIGhhbmRsZS4KKyAqIEBza2lwX2FsYXJtczogRG8gbm90IGNsZWFyIHRoZSBhbGFybXMKKyAqIEByZWFzb246ICJSZWFzb24iIGZvciB0aGUgaW50ZXJydXB0LCB0aGUgdmFsdWUgb2YgVGl0YW4ncworICoJZ2VuZXJhbF9pbnRfc3RhdHVzIHJlZ2lzdGVyLgorICoKKyAqIFRoZSBmdW5jdGlvbglwZXJmb3JtcyB0d28gYWN0aW9ucywgSXQgZmlyc3QgY2hlY2tzIHdoZXRoZXIgKHNoYXJlZCBJUlEpIHRoZQorICogaW50ZXJydXB0IHdhcyByYWlzZWQJYnkgdGhlIGRldmljZS4gTmV4dCwgaXQJbWFza3MgdGhlIGRldmljZSBpbnRlcnJ1cHRzLgorICoKKyAqIE5vdGU6CisgKiB2eGdlX2h3X2RldmljZV9iZWdpbl9pcnEoKSBkb2VzIG5vdCBmbHVzaCBNTUlPIHdyaXRlcyB0aHJvdWdoIHRoZQorICogYnJpZGdlLiBUaGVyZWZvcmUsIHR3byBiYWNrLXRvLWJhY2sgaW50ZXJydXB0cyBhcmUgcG90ZW50aWFsbHkgcG9zc2libGUuCisgKgorICogUmV0dXJuczogMCwgaWYgdGhlIGludGVycnVwdAlpcyBub3QgIm91cnMiIChub3RlIHRoYXQgaW4gdGhpcyBjYXNlIHRoZQorICogZGV2aWNlIHJlbWFpbiBlbmFibGVkKS4KKyAqIE90aGVyd2lzZSwgdnhnZV9od19kZXZpY2VfYmVnaW5faXJxKCkgcmV0dXJucyA2NGJpdCBnZW5lcmFsIGFkYXB0ZXIKKyAqIHN0YXR1cy4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2RldmljZV9iZWdpbl9pcnEoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQkJCQkgICAgIHUzMiBza2lwX2FsYXJtcywgdTY0ICpyZWFzb24pCit7CisJdTMyIGk7CisJdTY0IHZhbDY0OworCXU2NCBhZGFwdGVyX3N0YXR1czsKKwl1NjQgdnBhdGhfbWFzazsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHJldCA9IFZYR0VfSFdfT0s7CisKKwl2YWw2NCA9IHJlYWRxKCZobGRldi0+Y29tbW9uX3JlZy0+dGl0YW5fZ2VuZXJhbF9pbnRfc3RhdHVzKTsKKworCWlmICh1bmxpa2VseSghdmFsNjQpKSB7CisJCS8qIG5vdCBUaXRhbiBpbnRlcnJ1cHQJKi8KKwkJKnJlYXNvbgk9IDA7CisJCXJldCA9IFZYR0VfSFdfRVJSX1dST05HX0lSUTsKKwkJZ290byBleGl0OworCX0KKworCWlmICh1bmxpa2VseSh2YWw2NCA9PSBWWEdFX0hXX0FMTF9GT1hFUykpIHsKKworCQlhZGFwdGVyX3N0YXR1cyA9IHJlYWRxKCZobGRldi0+Y29tbW9uX3JlZy0+YWRhcHRlcl9zdGF0dXMpOworCisJCWlmIChhZGFwdGVyX3N0YXR1cyA9PSBWWEdFX0hXX0FMTF9GT1hFUykgeworCisJCQlfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9lcnJvcihobGRldiwKKwkJCQlOVUxMX1ZQSUQsIFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkUpOworCQkJKnJlYXNvbgk9IDA7CisJCQlyZXQgPSBWWEdFX0hXX0VSUl9TTE9UX0ZSRUVaRTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCWhsZGV2LT5zdGF0cy5zd19kZXZfaW5mb19zdGF0cy50b3RhbF9pbnRyX2NudCsrOworCisJKnJlYXNvbgk9IHZhbDY0OworCisJdnBhdGhfbWFzayA9IGhsZGV2LT52cGF0aHNfZGVwbG95ZWQgPj4KKwkJCQkoNjQgLSBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTKTsKKworCWlmICh2YWw2NCAmCisJICAgIFZYR0VfSFdfVElUQU5fR0VORVJBTF9JTlRfU1RBVFVTX1ZQQVRIX1RSQUZGSUNfSU5UKHZwYXRoX21hc2spKSB7CisJCWhsZGV2LT5zdGF0cy5zd19kZXZfaW5mb19zdGF0cy50cmFmZmljX2ludHJfY250Kys7CisKKwkJcmV0dXJuIFZYR0VfSFdfT0s7CisJfQorCisJaGxkZXYtPnN0YXRzLnN3X2Rldl9pbmZvX3N0YXRzLm5vdF90cmFmZmljX2ludHJfY250Kys7CisKKwlpZiAodW5saWtlbHkodmFsNjQgJgorCQkJVlhHRV9IV19USVRBTl9HRU5FUkFMX0lOVF9TVEFUVVNfVlBBVEhfQUxBUk1fSU5UKSkgeworCisJCWVudW0gdnhnZV9od19zdGF0dXMgZXJyb3JfbGV2ZWwgPSBWWEdFX0hXX09LOworCisJCWhsZGV2LT5zdGF0cy5zd19kZXZfZXJyX3N0YXRzLnZwYXRoX2FsYXJtcysrOworCisJCWZvciAoaSA9IDA7IGkgPCBWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTOyBpKyspIHsKKworCQkJaWYgKCEoaGxkZXYtPnZwYXRoc19kZXBsb3llZCAmIHZ4Z2VfbUJJVChpKSkpCisJCQkJY29udGludWU7CisKKwkJCXJldCA9IF9fdnhnZV9od192cGF0aF9hbGFybV9wcm9jZXNzKAorCQkJCSZobGRldi0+dmlydHVhbF9wYXRoc1tpXSwgc2tpcF9hbGFybXMpOworCisJCQllcnJvcl9sZXZlbCA9IFZYR0VfSFdfU0VUX0xFVkVMKHJldCwgZXJyb3JfbGV2ZWwpOworCisJCQlpZiAodW5saWtlbHkoKHJldCA9PSBWWEdFX0hXX0VSUl9DUklUSUNBTCkgfHwKKwkJCQkocmV0ID09IFZYR0VfSFdfRVJSX1NMT1RfRlJFRVpFKSkpCisJCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBlcnJvcl9sZXZlbDsKKwl9CitleGl0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX3VwX2luZAorICogQGhsZGV2OiBIVyBkZXZpY2UgaGFuZGxlLgorICoKKyAqIExpbmsgdXAgaW5kaWNhdGlvbiBoYW5kbGVyLiBUaGUgZnVuY3Rpb24gaXMgaW52b2tlZCBieSBIVyB3aGVuCisgKiBUaXRhbiBpbmRpY2F0ZXMgdGhhdCB0aGUgbGluayBpcyB1cCBmb3IgcHJvZ3JhbW1hYmxlIGFtb3VudCBvZiB0aW1lLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX3VwX2luZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJLyoKKwkgKiBJZiB0aGUgcHJldmlvdXMgbGluayBzdGF0ZSBpcyBub3QgZG93biwgcmV0dXJuLgorCSAqLworCWlmIChobGRldi0+bGlua19zdGF0ZSA9PSBWWEdFX0hXX0xJTktfVVApCisJCWdvdG8gZXhpdDsKKworCWhsZGV2LT5saW5rX3N0YXRlID0gVlhHRV9IV19MSU5LX1VQOworCisJLyogbm90aWZ5IGRyaXZlciAqLworCWlmIChobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX3VwKQorCQlobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX3VwKGhsZGV2KTsKK2V4aXQ6CisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX2Rvd25faW5kCisgKiBAaGxkZXY6IEhXIGRldmljZSBoYW5kbGUuCisgKgorICogTGluayBkb3duIGluZGljYXRpb24gaGFuZGxlci4gVGhlIGZ1bmN0aW9uIGlzIGludm9rZWQgYnkgSFcgd2hlbgorICogVGl0YW4gaW5kaWNhdGVzIHRoYXQgdGhlIGxpbmsgaXMgZG93bi4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9oYW5kbGVfbGlua19kb3duX2luZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisJLyoKKwkgKiBJZiB0aGUgcHJldmlvdXMgbGluayBzdGF0ZSBpcyBub3QgZG93biwgcmV0dXJuLgorCSAqLworCWlmIChobGRldi0+bGlua19zdGF0ZSA9PSBWWEdFX0hXX0xJTktfRE9XTikKKwkJZ290byBleGl0OworCisJaGxkZXYtPmxpbmtfc3RhdGUgPSBWWEdFX0hXX0xJTktfRE9XTjsKKworCS8qIG5vdGlmeSBkcml2ZXIgKi8KKwlpZiAoaGxkZXYtPnVsZF9jYWxsYmFja3MubGlua19kb3duKQorCQlobGRldi0+dWxkX2NhbGxiYWNrcy5saW5rX2Rvd24oaGxkZXYpOworZXhpdDoKKwlyZXR1cm4gVlhHRV9IV19PSzsKK30KKworLyoqCisgKiBfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9lcnJvciAtIEhhbmRsZSBlcnJvcgorICogQGhsZGV2OiBIVyBkZXZpY2UKKyAqIEB2cF9pZDogVnBhdGggSWQKKyAqIEB0eXBlOiBFcnJvciB0eXBlLiBQbGVhc2Ugc2VlIGVudW0gdnhnZV9od19ldmVudHt9CisgKgorICogSGFuZGxlIGVycm9yLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9lcnJvcigKKwkJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQl1MzIgdnBfaWQsCisJCWVudW0gdnhnZV9od19ldmVudCB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVlhHRV9IV19FVkVOVF9VTktOT1dOOgorCQlicmVhazsKKwljYXNlIFZYR0VfSFdfRVZFTlRfUkVTRVRfU1RBUlQ6CisJY2FzZSBWWEdFX0hXX0VWRU5UX1JFU0VUX0NPTVBMRVRFOgorCWNhc2UgVlhHRV9IV19FVkVOVF9MSU5LX0RPV046CisJY2FzZSBWWEdFX0hXX0VWRU5UX0xJTktfVVA6CisJCWdvdG8gb3V0OworCWNhc2UgVlhHRV9IV19FVkVOVF9BTEFSTV9DTEVBUkVEOgorCQlnb3RvIG91dDsKKwljYXNlIFZYR0VfSFdfRVZFTlRfRUNDRVJSOgorCWNhc2UgVlhHRV9IV19FVkVOVF9NUlBDSU1fRUNDRVJSOgorCQlnb3RvIG91dDsKKwljYXNlIFZYR0VfSFdfRVZFTlRfRklGT19FUlI6CisJY2FzZSBWWEdFX0hXX0VWRU5UX1ZQQVRIX0VSUjoKKwljYXNlIFZYR0VfSFdfRVZFTlRfQ1JJVElDQUxfRVJSOgorCWNhc2UgVlhHRV9IV19FVkVOVF9TRVJSOgorCQlicmVhazsKKwljYXNlIFZYR0VfSFdfRVZFTlRfU1JQQ0lNX1NFUlI6CisJY2FzZSBWWEdFX0hXX0VWRU5UX01SUENJTV9TRVJSOgorCQlnb3RvIG91dDsKKwljYXNlIFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkU6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZ4Z2VfYXNzZXJ0KDApOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBub3RpZnkgZHJpdmVyICovCisJaWYgKGhsZGV2LT51bGRfY2FsbGJhY2tzLmNyaXRfZXJyKQorCQlobGRldi0+dWxkX2NhbGxiYWNrcy5jcml0X2VycigKKwkJCShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqKWhsZGV2LAorCQkJdHlwZSwgdnBfaWQpOworb3V0OgorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qKgorICogdnhnZV9od19kZXZpY2VfY2xlYXJfdHhfcnggLSBBY2tub3dsZWRnZSAodGhhdCBpcywgY2xlYXIpIHRoZQorICogY29uZGl0aW9uIHRoYXQgaGFzIGNhdXNlZCB0aGUgVHggYW5kIFJYIGludGVycnVwdC4KKyAqIEBobGRldjogSFcgZGV2aWNlLgorICoKKyAqIEFja25vd2xlZGdlICh0aGF0IGlzLCBjbGVhcikgdGhlIGNvbmRpdGlvbiB0aGF0IGhhcyBjYXVzZWQKKyAqIHRoZSBUeCBhbmQgUnggaW50ZXJydXB0LgorICogU2VlIGFsc286IHZ4Z2VfaHdfZGV2aWNlX2JlZ2luX2lycSgpLAorICogdnhnZV9od19kZXZpY2VfbWFza190eF9yeCgpLCB2eGdlX2h3X2RldmljZV91bm1hc2tfdHhfcngoKS4KKyAqLwordm9pZCB2eGdlX2h3X2RldmljZV9jbGVhcl90eF9yeChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpCit7CisKKwlpZiAoKGhsZGV2LT50aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gIT0gMCkgfHwKKwkgICAoaGxkZXYtPnRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSAhPSAwKSkgeworCQl3cml0ZXEoKGhsZGV2LT50aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gfAorCQkJCSBobGRldi0+dGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdKSwKKwkJCQkmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfc3RhdHVzMCk7CisJfQorCisJaWYgKChobGRldi0+dGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdICE9IDApIHx8CisJICAgKGhsZGV2LT50aW1faW50X21hc2sxW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0gIT0gMCkpIHsKKwkJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJCQkoaGxkZXYtPnRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1RYXSB8CisJCQkJIGhsZGV2LT50aW1faW50X21hc2sxW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0pLAorCQkJCSZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9zdGF0dXMxKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiB2eGdlX2h3X2NoYW5uZWxfZHRyX2FsbG9jIC0gQWxsb2NhdGUgYSBkdHIgZnJvbSB0aGUgY2hhbm5lbAorICogQGNoYW5uZWw6IENoYW5uZWwKKyAqIEBkdHJoOiBCdWZmZXIgdG8gcmV0dXJuIHRoZSBEVFIgcG9pbnRlcgorICoKKyAqIEFsbG9jYXRlcyBhIGR0ciBmcm9tIHRoZSByZXNlcnZlIGFycmF5LiBJZiB0aGUgcmVzZXJ2ZSBhcnJheSBpcyBlbXB0eSwKKyAqIGl0IHN3YXBzIHRoZSByZXNlcnZlIGFuZCBmcmVlIGFycmF5cy4KKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfY2hhbm5lbF9kdHJfYWxsb2Moc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCB2b2lkICoqZHRyaCkKK3sKKwl2b2lkICoqdG1wX2FycjsKKworCWlmIChjaGFubmVsLT5yZXNlcnZlX3B0ciAtIGNoYW5uZWwtPnJlc2VydmVfdG9wID4gMCkgeworX2FsbG9jX2FmdGVyX3N3YXA6CisJCSpkdHJoID0JY2hhbm5lbC0+cmVzZXJ2ZV9hcnJbLS1jaGFubmVsLT5yZXNlcnZlX3B0cl07CisKKwkJcmV0dXJuIFZYR0VfSFdfT0s7CisJfQorCisJLyogc3dpdGNoIGJldHdlZW4gZW1wdHkJYW5kIGZ1bGwgYXJyYXlzCSovCisKKwkvKiB0aGUgaWRlYSBiZWhpbmQgc3VjaAlhIGRlc2lnbiBpcyB0aGF0IGJ5IGhhdmluZyBmcmVlCWFuZCByZXNlcnZlZAorCSAqIGFycmF5cyBzZXBhcmF0ZWQgd2UgYmFzaWNhbGx5IHNlcGFyYXRlZCBpcnEgYW5kIG5vbi1pcnEgcGFydHMuCisJICogaS5lLglubyBhZGRpdGlvbmFsIGxvY2sgbmVlZAl0byBiZSBkb25lIHdoZW4Jd2UgZnJlZQlhIHJlc291cmNlICovCisKKwlpZiAoY2hhbm5lbC0+bGVuZ3RoIC0gY2hhbm5lbC0+ZnJlZV9wdHIgPiAwKSB7CisKKwkJdG1wX2Fycgk9IGNoYW5uZWwtPnJlc2VydmVfYXJyOworCQljaGFubmVsLT5yZXNlcnZlX2FyciA9IGNoYW5uZWwtPmZyZWVfYXJyOworCQljaGFubmVsLT5mcmVlX2FyciA9IHRtcF9hcnI7CisJCWNoYW5uZWwtPnJlc2VydmVfcHRyID0gY2hhbm5lbC0+bGVuZ3RoOworCQljaGFubmVsLT5yZXNlcnZlX3RvcCA9IGNoYW5uZWwtPmZyZWVfcHRyOworCQljaGFubmVsLT5mcmVlX3B0ciA9IGNoYW5uZWwtPmxlbmd0aDsKKworCQljaGFubmVsLT5zdGF0cy0+cmVzZXJ2ZV9mcmVlX3N3YXBzX2NudCsrOworCisJCWdvdG8gX2FsbG9jX2FmdGVyX3N3YXA7CisJfQorCisJY2hhbm5lbC0+c3RhdHMtPmZ1bGxfY250Kys7CisKKwkqZHRyaCA9CU5VTEw7CisJcmV0dXJuIFZYR0VfSFdfSU5GX09VVF9PRl9ERVNDUklQVE9SUzsKK30KKworLyoKKyAqIHZ4Z2VfaHdfY2hhbm5lbF9kdHJfcG9zdCAtIFBvc3QgYSBkdHIgdG8gdGhlIGNoYW5uZWwKKyAqIEBjaGFubmVsaDogQ2hhbm5lbAorICogQGR0cmg6IERUUiBwb2ludGVyCisgKgorICogUG9zdHMgYSBkdHIgdG8gd29yayBhcnJheS4KKyAqCisgKi8KK3ZvaWQgdnhnZV9od19jaGFubmVsX2R0cl9wb3N0KHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCwgdm9pZCAqZHRyaCkKK3sKKwl2eGdlX2Fzc2VydChjaGFubmVsLT53b3JrX2FycltjaGFubmVsLT5wb3N0X2luZGV4XSA9PSBOVUxMKTsKKworCWNoYW5uZWwtPndvcmtfYXJyW2NoYW5uZWwtPnBvc3RfaW5kZXgrK10gPSBkdHJoOworCisJLyogd3JhcC1hcm91bmQgKi8KKwlpZiAoY2hhbm5lbC0+cG9zdF9pbmRleAk9PSBjaGFubmVsLT5sZW5ndGgpCisJCWNoYW5uZWwtPnBvc3RfaW5kZXggPSAwOworfQorCisvKgorICogdnhnZV9od19jaGFubmVsX2R0cl90cnlfY29tcGxldGUgLSBSZXR1cm5zIG5leHQgY29tcGxldGVkIGR0cgorICogQGNoYW5uZWw6IENoYW5uZWwKKyAqIEBkdHI6IEJ1ZmZlciB0byByZXR1cm4gdGhlIG5leHQgY29tcGxldGVkIERUUiBwb2ludGVyCisgKgorICogUmV0dXJucyB0aGUgbmV4dCBjb21wbGV0ZWQgZHRyIHdpdGggb3V0IHJlbW92aW5nIGl0IGZyb20gd29yayBhcnJheQorICoKKyAqLwordm9pZAordnhnZV9od19jaGFubmVsX2R0cl90cnlfY29tcGxldGUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCB2b2lkICoqZHRyaCkKK3sKKwl2eGdlX2Fzc2VydChjaGFubmVsLT5jb21wbF9pbmRleCA8IGNoYW5uZWwtPmxlbmd0aCk7CisKKwkqZHRyaCA9CWNoYW5uZWwtPndvcmtfYXJyW2NoYW5uZWwtPmNvbXBsX2luZGV4XTsKK30KKworLyoKKyAqIHZ4Z2VfaHdfY2hhbm5lbF9kdHJfY29tcGxldGUgLSBSZW1vdmVzIG5leHQgY29tcGxldGVkIGR0ciBmcm9tIHRoZSB3b3JrIGFycmF5CisgKiBAY2hhbm5lbDogQ2hhbm5lbCBoYW5kbGUKKyAqCisgKiBSZW1vdmVzIHRoZSBuZXh0IGNvbXBsZXRlZCBkdHIgZnJvbSB3b3JrIGFycmF5CisgKgorICovCit2b2lkIHZ4Z2VfaHdfY2hhbm5lbF9kdHJfY29tcGxldGUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKQoreworCWNoYW5uZWwtPndvcmtfYXJyW2NoYW5uZWwtPmNvbXBsX2luZGV4XQk9IE5VTEw7CisKKwkvKiB3cmFwLWFyb3VuZCAqLworCWlmICgrK2NoYW5uZWwtPmNvbXBsX2luZGV4ID09IGNoYW5uZWwtPmxlbmd0aCkKKwkJY2hhbm5lbC0+Y29tcGxfaW5kZXggPSAwOworCisJY2hhbm5lbC0+c3RhdHMtPnRvdGFsX2NvbXBsX2NudCsrOworfQorCisvKgorICogdnhnZV9od19jaGFubmVsX2R0cl9mcmVlIC0gRnJlZXMgYSBkdHIKKyAqIEBjaGFubmVsOiBDaGFubmVsIGhhbmRsZQorICogQGR0cjogIERUUiBwb2ludGVyCisgKgorICogUmV0dXJucyB0aGUgZHRyIHRvIGZyZWUgYXJyYXkKKyAqCisgKi8KK3ZvaWQgdnhnZV9od19jaGFubmVsX2R0cl9mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCwgdm9pZCAqZHRyaCkKK3sKKwljaGFubmVsLT5mcmVlX2FyclstLWNoYW5uZWwtPmZyZWVfcHRyXSA9IGR0cmg7Cit9CisKKy8qCisgKiB2eGdlX2h3X2NoYW5uZWxfZHRyX2NvdW50CisgKiBAY2hhbm5lbDogQ2hhbm5lbCBoYW5kbGUuIE9idGFpbmVkIHZpYSB2eGdlX2h3X2NoYW5uZWxfb3BlbigpLgorICoKKyAqIFJldHJlaXZlIG51bWJlciBvZiBEVFJzIGF2YWlsYWJsZS4gVGhpcyBmdW5jdGlvbiBjYW4gbm90IGJlIGNhbGxlZAorICogZnJvbSBkYXRhIHBhdGguIHJpbmdfaW5pdGlhbF9yZXBsZW5pc2hpKCkgaXMgdGhlIG9ubHkgdXNlci4KKyAqLworaW50IHZ4Z2VfaHdfY2hhbm5lbF9kdHJfY291bnQoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKQoreworCXJldHVybiAoY2hhbm5lbC0+cmVzZXJ2ZV9wdHIgLSBjaGFubmVsLT5yZXNlcnZlX3RvcCkgKworCQkoY2hhbm5lbC0+bGVuZ3RoIC0gY2hhbm5lbC0+ZnJlZV9wdHIpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfcmluZ19yeGRfcmVzZXJ2ZQktIFJlc2VydmUgcmluZyBkZXNjcmlwdG9yLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICogQHJ4ZGg6IFJlc2VydmVkIGRlc2NyaXB0b3IuIE9uIHN1Y2Nlc3MgSFcgZmlsbHMgdGhpcyAib3V0IiBwYXJhbWV0ZXIKKyAqIHdpdGggYSB2YWxpZCBoYW5kbGUuCisgKgorICogUmVzZXJ2ZSBSeCBkZXNjcmlwdG9yIGZvciB0aGUgc3Vic2VxdWVudCBmaWxsaW5nLWluIGRyaXZlcgorICogYW5kIHBvc3Rpbmcgb24gdGhlIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCAoQGNoYW5uZWxoKQorICogdmlhIHZ4Z2VfaHdfcmluZ19yeGRfcG9zdCgpLgorICoKKyAqIFJldHVybnM6IFZYR0VfSFdfT0sgLSBzdWNjZXNzLgorICogVlhHRV9IV19JTkZfT1VUX09GX0RFU0NSSVBUT1JTIC0gQ3VycmVudGx5IG5vIGRlc2NyaXB0b3JzIGF2YWlsYWJsZS4KKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19yaW5nX3J4ZF9yZXNlcnZlKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZywKKwl2b2lkICoqcnhkaCkKK3sKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJnJpbmctPmNoYW5uZWw7CisKKwlzdGF0dXMgPSB2eGdlX2h3X2NoYW5uZWxfZHRyX2FsbG9jKGNoYW5uZWwsIHJ4ZGgpOworCisJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKSB7CisJCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKnJ4ZHAgPQorCQkJKHN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKikqcnhkaDsKKworCQlyeGRwLT5jb250cm9sXzAJPSByeGRwLT5jb250cm9sXzEgPSAwOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9mcmVlIC0gRnJlZSBkZXNjcmlwdG9yLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICogQHJ4ZGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICoKKyAqIEZyZWUJdGhlIHJlc2VydmVkIGRlc2NyaXB0b3IuIFRoaXMgb3BlcmF0aW9uIGlzICJzeW1tZXRyaWNhbCIgdG8KKyAqIHZ4Z2VfaHdfcmluZ19yeGRfcmVzZXJ2ZS4gVGhlICJmcmVlLWluZyIgY29tcGxldGVzIHRoZSBkZXNjcmlwdG9yJ3MKKyAqIGxpZmVjeWNsZS4KKyAqCisgKiBBZnRlciBmcmVlLWluZyAoc2VlIHZ4Z2VfaHdfcmluZ19yeGRfZnJlZSgpKSB0aGUgZGVzY3JpcHRvciBhZ2FpbiBjYW4KKyAqIGJlOgorICoKKyAqIC0gcmVzZXJ2ZWQgKHZ4Z2VfaHdfcmluZ19yeGRfcmVzZXJ2ZSk7CisgKgorICogLSBwb3N0ZWQJKHZ4Z2VfaHdfcmluZ19yeGRfcG9zdCk7CisgKgorICogLSBjb21wbGV0ZWQgKHZ4Z2VfaHdfcmluZ19yeGRfbmV4dF9jb21wbGV0ZWQpOworICoKKyAqIC0gYW5kIHJlY3ljbGVkIGFnYWluCSh2eGdlX2h3X3JpbmdfcnhkX2ZyZWUpLgorICoKKyAqIEZvciBhbHRlcm5hdGl2ZSBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgbW9yZSBkZXRhaWxzIHBsZWFzZSByZWZlciB0bworICogdGhlIGRlc2lnbiBkb2MuCisgKgorICovCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfZnJlZShzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHZvaWQgKnJ4ZGgpCit7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJdnhnZV9od19jaGFubmVsX2R0cl9mcmVlKGNoYW5uZWwsIHJ4ZGgpOworCit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9wcmVfcG9zdCAtIFByZXBhcmUgcnhkIGFuZCBwb3N0CisgKiBAcmluZzogSGFuZGxlIHRvIHRoZSByaW5nIG9iamVjdCB1c2VkIGZvciByZWNlaXZlCisgKiBAcnhkaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKgorICogVGhpcyByb3V0aW5lIHByZXBhcmVzIGEgcnhkIGFuZCBwb3N0cworICovCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfcHJlX3Bvc3Qoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nLCB2b2lkICpyeGRoKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKworCWNoYW5uZWwgPSAmcmluZy0+Y2hhbm5lbDsKKworCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfcG9zdChjaGFubmVsLCByeGRoKTsKK30KKworLyoqCisgKiB2eGdlX2h3X3JpbmdfcnhkX3Bvc3RfcG9zdCAtIFByb2Nlc3MgcnhkIGFmdGVyIHBvc3QuCisgKiBAcmluZzogSGFuZGxlIHRvIHRoZSByaW5nIG9iamVjdCB1c2VkIGZvciByZWNlaXZlCisgKiBAcnhkaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKgorICogUHJvY2Vzc2VzIHJ4ZCBhZnRlciBwb3N0CisgKi8KK3ZvaWQgdnhnZV9od19yaW5nX3J4ZF9wb3N0X3Bvc3Qoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nLCB2b2lkICpyeGRoKQoreworCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKnJ4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqKXJ4ZGg7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJcnhkcC0+Y29udHJvbF8wCXw9IFZYR0VfSFdfUklOR19SWERfTElTVF9PV05fQURBUFRFUjsKKworCWlmIChyaW5nLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCA+IDApCisJCXJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250LS07Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9wb3N0IC0gUG9zdCBkZXNjcmlwdG9yIG9uIHRoZSByaW5nLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICogQHJ4ZGg6IERlc2NyaXB0b3Igb2J0YWluZWQgdmlhIHZ4Z2VfaHdfcmluZ19yeGRfcmVzZXJ2ZSgpLgorICoKKyAqIFBvc3QJZGVzY3JpcHRvciBvbiB0aGUgcmluZy4KKyAqIFByaW9yIHRvIHBvc3RpbmcgdGhlCWRlc2NyaXB0b3Igc2hvdWxkIGJlIGZpbGxlZCBpbiBhY2NvcmRhbmNlIHdpdGgKKyAqIEhvc3QvVGl0YW4gaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIGEgZ2l2ZW4gc2VydmljZSAoTEwsIGV0Yy4pLgorICoKKyAqLwordm9pZCB2eGdlX2h3X3JpbmdfcnhkX3Bvc3Qoc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nLCB2b2lkICpyeGRoKQoreworCXN0cnVjdCB2eGdlX2h3X3JpbmdfcnhkXzEgKnJ4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfcmluZ19yeGRfMSAqKXJ4ZGg7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJd21iKCk7CisJcnhkcC0+Y29udHJvbF8wCXw9IFZYR0VfSFdfUklOR19SWERfTElTVF9PV05fQURBUFRFUjsKKworCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfcG9zdChjaGFubmVsLCByeGRoKTsKKworCWlmIChyaW5nLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCA+IDApCisJCXJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfY250LS07Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9wb3N0X3Bvc3Rfd21iIC0gUHJvY2VzcyByeGQgYWZ0ZXIgcG9zdCB3aXRoIG1lbW9yeSBiYXJyaWVyLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICogQHJ4ZGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICoKKyAqIFByb2Nlc3NlcyByeGQgYWZ0ZXIgcG9zdCB3aXRoIG1lbW9yeSBiYXJyaWVyLgorICovCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfcG9zdF9wb3N0X3dtYihzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHZvaWQgKnJ4ZGgpCit7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJd21iKCk7CisJdnhnZV9od19yaW5nX3J4ZF9wb3N0X3Bvc3QocmluZywgcnhkaCk7Cit9CisKKy8qKgorICogdnhnZV9od19yaW5nX3J4ZF9uZXh0X2NvbXBsZXRlZCAtIEdldCB0aGUgX25leHRfIGNvbXBsZXRlZCBkZXNjcmlwdG9yLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICogQHJ4ZGg6IERlc2NyaXB0b3IgaGFuZGxlLiBSZXR1cm5lZCBieSBIVy4KKyAqIEB0X2NvZGU6CVRyYW5zZmVyIGNvZGUsIGFzIHBlciBUaXRhbiBVc2VyIEd1aWRlLAorICoJIFJlY2VpdmUgRGVzY3JpcHRvciBGb3JtYXQuIFJldHVybmVkIGJ5IEhXLgorICoKKyAqIFJldHJpZXZlIHRoZQlfbmV4dF8gY29tcGxldGVkIGRlc2NyaXB0b3IuCisgKiBIVyB1c2VzIHJpbmcgY2FsbGJhY2sgKCp2eGdlX2h3X3JpbmdfY2FsbGJhY2tfZikgdG8gbm90aWZpeQorICogZHJpdmVyIG9mIG5ldyBjb21wbGV0ZWQgZGVzY3JpcHRvcnMuIEFmdGVyIHRoYXQKKyAqIHRoZSBkcml2ZXIgY2FuIHVzZSB2eGdlX2h3X3JpbmdfcnhkX25leHRfY29tcGxldGVkIHRvIHJldHJpZXZlIHRoZSByZXN0CisgKiBjb21wbGV0aW9ucyAodGhlIHZlcnkgZmlyc3QgY29tcGxldGlvbiBpcyBwYXNzZWQgYnkgSFcgdmlhCisgKiB2eGdlX2h3X3JpbmdfY2FsbGJhY2tfZikuCisgKgorICogSW1wbGVtZW50YXRpb24td2lzZSwgdGhlIGRyaXZlciBpcyBmcmVlIHRvIGNhbGwKKyAqIHZ4Z2VfaHdfcmluZ19yeGRfbmV4dF9jb21wbGV0ZWQgZWl0aGVyIGltbWVkaWF0ZWx5IGZyb20gaW5zaWRlIHRoZQorICogcmluZyBjYWxsYmFjaywgb3IgaW4gYSBkZWZlcnJlZCBmYXNoaW9uIGFuZCBzZXBhcmF0ZSAoZnJvbSBIVykKKyAqIGNvbnRleHQuCisgKgorICogTm9uLXplcm8gQHRfY29kZSBtZWFucyBmYWlsdXJlIHRvIGZpbGwtaW4gcmVjZWl2ZSBidWZmZXIocykKKyAqIG9mIHRoZSBkZXNjcmlwdG9yLgorICogRm9yIGluc3RhbmNlLCBwYXJpdHkJZXJyb3IgZGV0ZWN0ZWQgZHVyaW5nIHRoZSBkYXRhIHRyYW5zZmVyLgorICogSW4gdGhpcyBjYXNlCVRpdGFuIHdpbGwgY29tcGxldGUgdGhlIGRlc2NyaXB0b3IgYW5kIGluZGljYXRlCisgKiBmb3IgdGhlIGhvc3QJdGhhdCB0aGUgcmVjZWl2ZWQgZGF0YSBpcyBub3QgdG8gYmUgdXNlZC4KKyAqIEZvciBkZXRhaWxzIHBsZWFzZSByZWZlciB0byBUaXRhbiBVc2VyIEd1aWRlLgorICoKKyAqIFJldHVybnM6IFZYR0VfSFdfT0sgLSBzdWNjZXNzLgorICogVlhHRV9IV19JTkZfTk9fTU9SRV9DT01QTEVURURfREVTQ1JJUFRPUlMgLSBObyBjb21wbGV0ZWQgZGVzY3JpcHRvcnMKKyAqIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciBwcm9jZXNzaW5nLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3JpbmdfY2FsbGJhY2tfZnt9LAorICogdnhnZV9od19maWZvX3J4ZF9uZXh0X2NvbXBsZXRlZCgpLCBlbnVtIHZ4Z2VfaHdfc3RhdHVze30uCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19yaW5nX3J4ZF9uZXh0X2NvbXBsZXRlZCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHZvaWQgKipyeGRoLCB1OCAqdF9jb2RlKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKwlzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICpyeGRwOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWNoYW5uZWwgPSAmcmluZy0+Y2hhbm5lbDsKKworCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfdHJ5X2NvbXBsZXRlKGNoYW5uZWwsIHJ4ZGgpOworCisJcnhkcCA9IChzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICopKnJ4ZGg7CisJaWYgKHJ4ZHAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0lORl9OT19NT1JFX0NPTVBMRVRFRF9ERVNDUklQVE9SUzsKKwkJZ290byBleGl0OworCX0KKworCS8qIGNoZWNrIHdoZXRoZXIgaXQgaXMgbm90IHRoZSBlbmQgKi8KKwlpZiAoIShyeGRwLT5jb250cm9sXzAgJglWWEdFX0hXX1JJTkdfUlhEX0xJU1RfT1dOX0FEQVBURVIpKSB7CisKKwkJdnhnZV9hc3NlcnQoKChzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF8xICopcnhkcCktPmhvc3RfY29udHJvbCAhPQorCQkJCTApOworCisJCSsrcmluZy0+Y21wbF9jbnQ7CisJCXZ4Z2VfaHdfY2hhbm5lbF9kdHJfY29tcGxldGUoY2hhbm5lbCk7CisKKwkJKnRfY29kZQk9ICh1OClWWEdFX0hXX1JJTkdfUlhEX1RfQ09ERV9HRVQocnhkcC0+Y29udHJvbF8wKTsKKworCQl2eGdlX2Fzc2VydCgqdF9jb2RlICE9IFZYR0VfSFdfUklOR19SWERfVF9DT0RFX1VOVVNFRCk7CisKKwkJcmluZy0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9jbnQrKzsKKwkJaWYgKHJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfbWF4IDwKKwkJCQlyaW5nLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCkKKwkJCXJpbmctPnN0YXRzLT5jb21tb25fc3RhdHMudXNhZ2VfbWF4ID0KKwkJCQlyaW5nLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudDsKKworCQlzdGF0dXMgPSBWWEdFX0hXX09LOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcmVzZXQgaXQuIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gcmV0dXJuCisJICogZ2FyYmFnZSB0byB0aGUgZHJpdmVyICovCisJKnJ4ZGggPQlOVUxMOworCXN0YXR1cyA9IFZYR0VfSFdfSU5GX05PX01PUkVfQ09NUExFVEVEX0RFU0NSSVBUT1JTOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfcmluZ19oYW5kbGVfdGNvZGUgLSBIYW5kbGUgdHJhbnNmZXIgY29kZS4KKyAqIEByaW5nOiBIYW5kbGUgdG8gdGhlIHJpbmcgb2JqZWN0IHVzZWQgZm9yIHJlY2VpdmUKKyAqIEByeGRoOiBEZXNjcmlwdG9yIGhhbmRsZS4KKyAqIEB0X2NvZGU6IE9uZSBvZiB0aGUgZW51bWVyYXRlZCAoYW5kIGRvY3VtZW50ZWQgaW4gdGhlIFRpdGFuIHVzZXIgZ3VpZGUpCisgKiAidHJhbnNmZXIgY29kZXMiLgorICoKKyAqIEhhbmRsZSBkZXNjcmlwdG9yJ3MgdHJhbnNmZXIgY29kZS4gVGhlIGxhdHRlciBjb21lcyB3aXRoIGVhY2ggY29tcGxldGVkCisgKiBkZXNjcmlwdG9yLgorICoKKyAqIFJldHVybnM6IG9uZSBvZiB0aGUgZW51bSB2eGdlX2h3X3N0YXR1c3t9IGVudW1lcmF0ZWQgdHlwZXMuCisgKiBWWEdFX0hXX09LCQkJLSBmb3Igc3VjY2Vzcy4KKyAqIFZYR0VfSFdfRVJSX0NSSVRJQ0FMICAgICAgICAgLSB3aGVuIGVuY291bnRlcnMgY3JpdGljYWwgZXJyb3IuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19yaW5nX2hhbmRsZV90Y29kZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcsIHZvaWQgKnJ4ZGgsIHU4IHRfY29kZSkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJY2hhbm5lbCA9ICZyaW5nLT5jaGFubmVsOworCisJLyogSWYgdGhlIHRfY29kZSBpcyBub3Qgc3VwcG9ydGVkIGFuZCBpZiB0aGUKKwkgKiB0X2NvZGUgaXMgb3RoZXIgdGhhbiAweDUgKHVucGFyc2VhYmxlIHBhY2tldAorCSAqIHN1Y2ggYXMgdW5rbm93biBVUFY2IGhlYWRlciksIERyb3AgaXQgISEhCisJICovCisKKwlpZiAodF9jb2RlID09IDAgfHwgdF9jb2RlID09IDUpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19PSzsKKwkJZ290byBleGl0OworCX0KKworCWlmICh0X2NvZGUgPiAweEYpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9UQ09ERTsKKwkJZ290byBleGl0OworCX0KKworCXJpbmctPnN0YXRzLT5yeGRfdF9jb2RlX2Vycl9jbnRbdF9jb2RlXSsrOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIF9fdnhnZV9od19ub25fb2ZmbG9hZF9kYl9wb3N0IC0gUG9zdCBub24gb2ZmbG9hZCBkb29yYmVsbAorICoKKyAqIEBmaWZvOiBmaWZvaGFuZGxlCisgKiBAdHhkbF9wdHI6IFRoZSBzdGFydGluZyBsb2NhdGlvbiBvZiB0aGUgVHhETCBpbiBob3N0IG1lbW9yeQorICogQG51bV90eGRzOiBUaGUgaGlnaGVzdCBUeEQgaW4gdGhpcyBUeERMICgwIHRvIDI1NSBtZWFucyAxIHRvIDI1NikKKyAqIEBub19zbm9vcDogTm8gc25vb3AgZmxhZ3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBvc3RzIGEgbm9uLW9mZmxvYWQgZG9vcmJlbGwgdG8gZG9vcmJlbGwgRklGTworICoKKyAqLworc3RhdGljIHZvaWQgX192eGdlX2h3X25vbl9vZmZsb2FkX2RiX3Bvc3Qoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvLAorCXU2NCB0eGRsX3B0ciwgdTMyIG51bV90eGRzLCB1MzIgbm9fc25vb3ApCit7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZmaWZvLT5jaGFubmVsOworCisJd3JpdGVxKFZYR0VfSFdfTk9EQldfVFlQRShWWEdFX0hXX05PREJXX1RZUEVfTk9EQlcpIHwKKwkJVlhHRV9IV19OT0RCV19MQVNUX1RYRF9OVU1CRVIobnVtX3R4ZHMpIHwKKwkJVlhHRV9IV19OT0RCV19HRVRfTk9fU05PT1Aobm9fc25vb3ApLAorCQkmZmlmby0+bm9mbF9kYi0+Y29udHJvbF8wKTsKKworCXdtYigpOworCisJd3JpdGVxKHR4ZGxfcHRyLCAmZmlmby0+bm9mbF9kYi0+dHhkbF9wdHIpOworCXdtYigpOworCit9CisKKy8qKgorICogdnhnZV9od19maWZvX2ZyZWVfdHhkbF9jb3VudF9nZXQgLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdHhkbHMgYXZhaWxhYmxlIGluCisgKiB0aGUgZmlmbworICogQGZpZm9oOiBIYW5kbGUgdG8gdGhlIGZpZm8gb2JqZWN0IHVzZWQgZm9yIG5vbiBvZmZsb2FkIHNlbmQKKyAqLwordTMyIHZ4Z2VfaHdfZmlmb19mcmVlX3R4ZGxfY291bnRfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gpCit7CisJcmV0dXJuIHZ4Z2VfaHdfY2hhbm5lbF9kdHJfY291bnQoJmZpZm9oLT5jaGFubmVsKTsKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9fdHhkbF9yZXNlcnZlIC0gUmVzZXJ2ZSBmaWZvIGRlc2NyaXB0b3IuCisgKiBAZmlmb2g6IEhhbmRsZSB0byB0aGUgZmlmbyBvYmplY3QgdXNlZCBmb3Igbm9uIG9mZmxvYWQgc2VuZAorICogQHR4ZGxoOiBSZXNlcnZlZCBkZXNjcmlwdG9yLiBPbiBzdWNjZXNzIEhXIGZpbGxzIHRoaXMgIm91dCIgcGFyYW1ldGVyCisgKiAgICAgICAgd2l0aCBhIHZhbGlkIGhhbmRsZS4KKyAqIEB0eGRsX3ByaXY6IEJ1ZmZlciB0byByZXR1cm4gdGhlIHBvaW50ZXIgdG8gcGVyIHR4ZGwgc3BhY2UKKyAqCisgKiBSZXNlcnZlIGEgc2luZ2xlIFR4REwgKHRoYXQgaXMsIGZpZm8gZGVzY3JpcHRvcikKKyAqIGZvciB0aGUgc3Vic2VxdWVudCBmaWxsaW5nLWluIGJ5IGRyaXZlcikKKyAqIGFuZCBwb3N0aW5nIG9uIHRoZSBjb3JyZXNwb25kaW5nIGNoYW5uZWwgKEBjaGFubmVsaCkKKyAqIHZpYSB2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0KCkuCisgKgorICogTm90ZTogaXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGRyaXZlciB0byByZXNlcnZlIG11bHRpcGxlIGRlc2NyaXB0b3JzCisgKiBmb3IgbGVuZ3RoeSAoZS5nLiwgTFNPKSB0cmFuc21pdCBvcGVyYXRpb24uIEEgc2luZ2xlIGZpZm8gZGVzY3JpcHRvcgorICogY2FycmllcyB1cCB0byBjb25maWd1cmVkIG51bWJlciAoZmlmby5tYXhfZnJhZ3MpIG9mIGNvbnRpZ3VvdXMgYnVmZmVycy4KKyAqCisgKiBSZXR1cm5zOiBWWEdFX0hXX09LIC0gc3VjY2VzczsKKyAqIFZYR0VfSFdfSU5GX09VVF9PRl9ERVNDUklQVE9SUyAtIEN1cnJlbnRseSBubyBkZXNjcmlwdG9ycyBhdmFpbGFibGUKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19maWZvX3R4ZGxfcmVzZXJ2ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8sCisJdm9pZCAqKnR4ZGxoLCB2b2lkICoqdHhkbF9wcml2KQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1czsKKwlpbnQgaTsKKworCWNoYW5uZWwgPSAmZmlmby0+Y2hhbm5lbDsKKworCXN0YXR1cyA9IHZ4Z2VfaHdfY2hhbm5lbF9kdHJfYWxsb2MoY2hhbm5lbCwgdHhkbGgpOworCisJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKSB7CisJCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICp0eGRwID0KKwkJCShzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqKSp0eGRsaDsKKwkJc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdiAqcHJpdjsKKworCQlwcml2ID0gX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2KGZpZm8sIHR4ZHApOworCisJCS8qIHJlc2V0IHRoZSBUeERMJ3MgcHJpdmF0ZSAqLworCQlwcml2LT5hbGlnbl9kbWFfb2Zmc2V0ID0gMDsKKwkJcHJpdi0+YWxpZ25fdmFkZHJfc3RhcnQgPSBwcml2LT5hbGlnbl92YWRkcjsKKwkJcHJpdi0+YWxpZ25fdXNlZF9mcmFncyA9IDA7CisJCXByaXYtPmZyYWdzID0gMDsKKwkJcHJpdi0+YWxsb2NfZnJhZ3MgPSBmaWZvLT5jb25maWctPm1heF9mcmFnczsKKwkJcHJpdi0+bmV4dF90eGRsX3ByaXYgPSBOVUxMOworCisJCSp0eGRsX3ByaXYgPSAodm9pZCAqKShzaXplX3QpdHhkcC0+aG9zdF9jb250cm9sOworCisJCWZvciAoaSA9IDA7IGkgPCBmaWZvLT5jb25maWctPm1heF9mcmFnczsgaSsrKSB7CisJCQl0eGRwID0gKChzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqKSp0eGRsaCkgKyBpOworCQkJdHhkcC0+Y29udHJvbF8wID0gdHhkcC0+Y29udHJvbF8xID0gMDsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od19maWZvX3R4ZGxfYnVmZmVyX3NldCAtIFNldCB0cmFuc21pdCBidWZmZXIgcG9pbnRlciBpbiB0aGUKKyAqIGRlc2NyaXB0b3IuCisgKiBAZmlmbzogSGFuZGxlIHRvIHRoZSBmaWZvIG9iamVjdCB1c2VkIGZvciBub24gb2ZmbG9hZCBzZW5kCisgKiBAdHhkbGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICogQGZyYWdfaWR4OiBJbmRleCBvZiB0aGUgZGF0YSBidWZmZXIgaW4gdGhlIGNhbGxlcidzIHNjYXR0ZXItZ2F0aGVyIGxpc3QKKyAqICAgICAgICAgICAgKG9mIGJ1ZmZlcnMpLgorICogQGRtYV9wb2ludGVyOiBETUEgYWRkcmVzcyBvZiB0aGUgZGF0YSBidWZmZXIgcmVmZXJlbmNlZCBieSBAZnJhZ19pZHguCisgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgZGF0YSBidWZmZXIgKGluIGJ5dGVzKS4KKyAqCisgKiBUaGlzIEFQSSBpcyBwYXJ0IG9mIHRoZSBwcmVwYXJhdGlvbiBvZiB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciBmb3IgcG9zdGluZworICogKHZpYSB2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0KCkpLiBUaGUgcmVsYXRlZCAicHJlcGFyYXRpb24iIEFQSXMgaW5jbHVkZQorICogdnhnZV9od19maWZvX3R4ZGxfbXNzX3NldCgpIGFuZCB2eGdlX2h3X2ZpZm9fdHhkbF9ja3N1bV9zZXRfYml0cygpLgorICogQWxsIHRocmVlIEFQSXMgZmlsbCBpbiB0aGUgZmllbGRzIG9mIHRoZSBmaWZvIGRlc2NyaXB0b3IsCisgKiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFRpdGFuIHNwZWNpZmljYXRpb24uCisgKgorICovCit2b2lkIHZ4Z2VfaHdfZmlmb190eGRsX2J1ZmZlcl9zZXQoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvLAorCQkJCSAgdm9pZCAqdHhkbGgsIHUzMiBmcmFnX2lkeCwKKwkJCQkgIGRtYV9hZGRyX3QgZG1hX3BvaW50ZXIsIHUzMiBzaXplKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYgKnR4ZGxfcHJpdjsKKwlzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqdHhkcCwgKnR4ZHBfbGFzdDsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJmZpZm8tPmNoYW5uZWw7CisKKwl0eGRsX3ByaXYgPSBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYoZmlmbywgdHhkbGgpOworCXR4ZHAgPSAoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKil0eGRsaCAgKyAgdHhkbF9wcml2LT5mcmFnczsKKworCWlmIChmcmFnX2lkeCAhPSAwKQorCQl0eGRwLT5jb250cm9sXzAgPSB0eGRwLT5jb250cm9sXzEgPSAwOworCWVsc2UgeworCQl0eGRwLT5jb250cm9sXzAgfD0gVlhHRV9IV19GSUZPX1RYRF9HQVRIRVJfQ09ERSgKKwkJCVZYR0VfSFdfRklGT19UWERfR0FUSEVSX0NPREVfRklSU1QpOworCQl0eGRwLT5jb250cm9sXzEgfD0gZmlmby0+aW50ZXJydXB0X3R5cGU7CisJCXR4ZHAtPmNvbnRyb2xfMSB8PSBWWEdFX0hXX0ZJRk9fVFhEX0lOVF9OVU1CRVIoCisJCQlmaWZvLT50eF9pbnRyX251bSk7CisJCWlmICh0eGRsX3ByaXYtPmZyYWdzKSB7CisJCQl0eGRwX2xhc3QgPSAoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKil0eGRsaCAgKworCQkJKHR4ZGxfcHJpdi0+ZnJhZ3MgLSAxKTsKKwkJCXR4ZHBfbGFzdC0+Y29udHJvbF8wIHw9IFZYR0VfSFdfRklGT19UWERfR0FUSEVSX0NPREUoCisJCQkJVlhHRV9IV19GSUZPX1RYRF9HQVRIRVJfQ09ERV9MQVNUKTsKKwkJfQorCX0KKworCXZ4Z2VfYXNzZXJ0KGZyYWdfaWR4IDwgdHhkbF9wcml2LT5hbGxvY19mcmFncyk7CisKKwl0eGRwLT5idWZmZXJfcG9pbnRlciA9ICh1NjQpZG1hX3BvaW50ZXI7CisJdHhkcC0+Y29udHJvbF8wIHw9IFZYR0VfSFdfRklGT19UWERfQlVGRkVSX1NJWkUoc2l6ZSk7CisJZmlmby0+c3RhdHMtPnRvdGFsX2J1ZmZlcnMrKzsKKwl0eGRsX3ByaXYtPmZyYWdzKys7Cit9CisKKy8qKgorICogdnhnZV9od19maWZvX3R4ZGxfcG9zdCAtIFBvc3QgZGVzY3JpcHRvciBvbiB0aGUgZmlmbyBjaGFubmVsLgorICogQGZpZm86IEhhbmRsZSB0byB0aGUgZmlmbyBvYmplY3QgdXNlZCBmb3Igbm9uIG9mZmxvYWQgc2VuZAorICogQHR4ZGxoOiBEZXNjcmlwdG9yIG9idGFpbmVkIHZpYSB2eGdlX2h3X2ZpZm9fdHhkbF9yZXNlcnZlKCkKKyAqIEBmcmFnczogTnVtYmVyIG9mIGNvbnRpZ3VvdXMgYnVmZmVycyB0aGF0IGFyZSBwYXJ0IG9mIGEgc2luZ2xlCisgKiAgICAgICAgIHRyYW5zbWl0IG9wZXJhdGlvbi4KKyAqCisgKiBQb3N0IGRlc2NyaXB0b3Igb24gdGhlICdmaWZvJyB0eXBlIGNoYW5uZWwgZm9yIHRyYW5zbWlzc2lvbi4KKyAqIFByaW9yIHRvIHBvc3RpbmcgdGhlIGRlc2NyaXB0b3Igc2hvdWxkIGJlIGZpbGxlZCBpbiBhY2NvcmRhbmNlIHdpdGgKKyAqIEhvc3QvVGl0YW4gaW50ZXJmYWNlIHNwZWNpZmljYXRpb24gZm9yIGEgZ2l2ZW4gc2VydmljZSAoTEwsIGV0Yy4pLgorICoKKyAqLwordm9pZCB2eGdlX2h3X2ZpZm9fdHhkbF9wb3N0KHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbywgdm9pZCAqdHhkbGgpCit7CisJc3RydWN0IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdiAqdHhkbF9wcml2OworCXN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICp0eGRwX2xhc3Q7CisJc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKnR4ZHBfZmlyc3Q7CisJc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9ICZmaWZvLT5jaGFubmVsOworCisJdHhkbF9wcml2ID0gX192eGdlX2h3X2ZpZm9fdHhkbF9wcml2KGZpZm8sIHR4ZGxoKTsKKwl0eGRwX2ZpcnN0ID0gKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopdHhkbGg7CisKKwl0eGRwX2xhc3QgPSAoc3RydWN0IHZ4Z2VfaHdfZmlmb190eGQgKil0eGRsaCAgKyAgKHR4ZGxfcHJpdi0+ZnJhZ3MgLSAxKTsKKwl0eGRwX2xhc3QtPmNvbnRyb2xfMCB8PQorCSAgICAgIFZYR0VfSFdfRklGT19UWERfR0FUSEVSX0NPREUoVlhHRV9IV19GSUZPX1RYRF9HQVRIRVJfQ09ERV9MQVNUKTsKKwl0eGRwX2ZpcnN0LT5jb250cm9sXzAgfD0gVlhHRV9IV19GSUZPX1RYRF9MSVNUX09XTl9BREFQVEVSOworCisJdnhnZV9od19jaGFubmVsX2R0cl9wb3N0KCZmaWZvLT5jaGFubmVsLCB0eGRsaCk7CisKKwlfX3Z4Z2VfaHdfbm9uX29mZmxvYWRfZGJfcG9zdChmaWZvLAorCQkodTY0KShzaXplX3QpdHhkbF9wcml2LT5kbWFfYWRkciwKKwkJdHhkbF9wcml2LT5mcmFncyAtIDEsCisJCWZpZm8tPm5vX3Nub29wX2JpdHMpOworCisJZmlmby0+c3RhdHMtPnRvdGFsX3Bvc3RzKys7CisJZmlmby0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9jbnQrKzsKKwlpZiAoZmlmby0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9tYXggPAorCQlmaWZvLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCkKKwkJZmlmby0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9tYXggPQorCQkJZmlmby0+c3RhdHMtPmNvbW1vbl9zdGF0cy51c2FnZV9jbnQ7Cit9CisKKy8qKgorICogdnhnZV9od19maWZvX3R4ZGxfbmV4dF9jb21wbGV0ZWQgLSBSZXRyaWV2ZSBuZXh0IGNvbXBsZXRlZCBkZXNjcmlwdG9yLgorICogQGZpZm86IEhhbmRsZSB0byB0aGUgZmlmbyBvYmplY3QgdXNlZCBmb3Igbm9uIG9mZmxvYWQgc2VuZAorICogQHR4ZGxoOiBEZXNjcmlwdG9yIGhhbmRsZS4gUmV0dXJuZWQgYnkgSFcuCisgKiBAdF9jb2RlOiBUcmFuc2ZlciBjb2RlLCBhcyBwZXIgVGl0YW4gVXNlciBHdWlkZSwKKyAqICAgICAgICAgIFRyYW5zbWl0IERlc2NyaXB0b3IgRm9ybWF0LgorICogICAgICAgICAgUmV0dXJuZWQgYnkgSFcuCisgKgorICogUmV0cmlldmUgdGhlIF9uZXh0XyBjb21wbGV0ZWQgZGVzY3JpcHRvci4KKyAqIEhXIHVzZXMgY2hhbm5lbCBjYWxsYmFjayAoKnZ4Z2VfaHdfY2hhbm5lbF9jYWxsYmFja19mKSB0byBub3RpZml5CisgKiBkcml2ZXIgb2YgbmV3IGNvbXBsZXRlZCBkZXNjcmlwdG9ycy4gQWZ0ZXIgdGhhdAorICogdGhlIGRyaXZlciBjYW4gdXNlIHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkIHRvIHJldHJpZXZlIHRoZSByZXN0CisgKiBjb21wbGV0aW9ucyAodGhlIHZlcnkgZmlyc3QgY29tcGxldGlvbiBpcyBwYXNzZWQgYnkgSFcgdmlhCisgKiB2eGdlX2h3X2NoYW5uZWxfY2FsbGJhY2tfZikuCisgKgorICogSW1wbGVtZW50YXRpb24td2lzZSwgdGhlIGRyaXZlciBpcyBmcmVlIHRvIGNhbGwKKyAqIHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkIGVpdGhlciBpbW1lZGlhdGVseSBmcm9tIGluc2lkZSB0aGUKKyAqIGNoYW5uZWwgY2FsbGJhY2ssIG9yIGluIGEgZGVmZXJyZWQgZmFzaGlvbiBhbmQgc2VwYXJhdGUgKGZyb20gSFcpCisgKiBjb250ZXh0LgorICoKKyAqIE5vbi16ZXJvIEB0X2NvZGUgbWVhbnMgZmFpbHVyZSB0byBwcm9jZXNzIHRoZSBkZXNjcmlwdG9yLgorICogVGhlIGZhaWx1cmUgY291bGQgaGFwcGVuLCBmb3IgaW5zdGFuY2UsIHdoZW4gdGhlIGxpbmsgaXMKKyAqIGRvd24sIGluIHdoaWNoIGNhc2UgVGl0YW4gY29tcGxldGVzIHRoZSBkZXNjcmlwdG9yIGJlY2F1c2UgaXQKKyAqIGlzIG5vdCBhYmxlIHRvIHNlbmQgdGhlIGRhdGEgb3V0LgorICoKKyAqIEZvciBkZXRhaWxzIHBsZWFzZSByZWZlciB0byBUaXRhbiBVc2VyIEd1aWRlLgorICoKKyAqIFJldHVybnM6IFZYR0VfSFdfT0sgLSBzdWNjZXNzLgorICogVlhHRV9IV19JTkZfTk9fTU9SRV9DT01QTEVURURfREVTQ1JJUFRPUlMgLSBObyBjb21wbGV0ZWQgZGVzY3JpcHRvcnMKKyAqIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIGZvciBwcm9jZXNzaW5nLgorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2ZpZm9fdHhkbF9uZXh0X2NvbXBsZXRlZCgKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8sIHZvaWQgKip0eGRsaCwKKwllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSAqdF9jb2RlKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKwlzdHJ1Y3QgdnhnZV9od19maWZvX3R4ZCAqdHhkcDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwljaGFubmVsID0gJmZpZm8tPmNoYW5uZWw7CisKKwl2eGdlX2h3X2NoYW5uZWxfZHRyX3RyeV9jb21wbGV0ZShjaGFubmVsLCB0eGRsaCk7CisKKwl0eGRwID0gKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopKnR4ZGxoOworCWlmICh0eGRwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19JTkZfTk9fTU9SRV9DT01QTEVURURfREVTQ1JJUFRPUlM7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBjaGVjayB3aGV0aGVyIGhvc3Qgb3ducyBpdCAqLworCWlmICghKHR4ZHAtPmNvbnRyb2xfMCAmIFZYR0VfSFdfRklGT19UWERfTElTVF9PV05fQURBUFRFUikpIHsKKworCQl2eGdlX2Fzc2VydCh0eGRwLT5ob3N0X2NvbnRyb2wgIT0gMCk7CisKKwkJdnhnZV9od19jaGFubmVsX2R0cl9jb21wbGV0ZShjaGFubmVsKTsKKworCQkqdF9jb2RlID0gKHU4KVZYR0VfSFdfRklGT19UWERfVF9DT0RFX0dFVCh0eGRwLT5jb250cm9sXzApOworCisJCWlmIChmaWZvLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudCA+IDApCisJCQlmaWZvLT5zdGF0cy0+Y29tbW9uX3N0YXRzLnVzYWdlX2NudC0tOworCisJCXN0YXR1cyA9IFZYR0VfSFdfT0s7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBubyBtb3JlIGNvbXBsZXRpb25zICovCisJKnR4ZGxoID0gTlVMTDsKKwlzdGF0dXMgPSBWWEdFX0hXX0lORl9OT19NT1JFX0NPTVBMRVRFRF9ERVNDUklQVE9SUzsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X2ZpZm9faGFuZGxlX3Rjb2RlIC0gSGFuZGxlIHRyYW5zZmVyIGNvZGUuCisgKiBAZmlmbzogSGFuZGxlIHRvIHRoZSBmaWZvIG9iamVjdCB1c2VkIGZvciBub24gb2ZmbG9hZCBzZW5kCisgKiBAdHhkbGg6IERlc2NyaXB0b3IgaGFuZGxlLgorICogQHRfY29kZTogT25lIG9mIHRoZSBlbnVtZXJhdGVkIChhbmQgZG9jdW1lbnRlZCBpbiB0aGUgVGl0YW4gdXNlciBndWlkZSkKKyAqICAgICAgICAgICJ0cmFuc2ZlciBjb2RlcyIuCisgKgorICogSGFuZGxlIGRlc2NyaXB0b3IncyB0cmFuc2ZlciBjb2RlLiBUaGUgbGF0dGVyIGNvbWVzIHdpdGggZWFjaCBjb21wbGV0ZWQKKyAqIGRlc2NyaXB0b3IuCisgKgorICogUmV0dXJuczogb25lIG9mIHRoZSBlbnVtIHZ4Z2VfaHdfc3RhdHVze30gZW51bWVyYXRlZCB0eXBlcy4KKyAqIFZYR0VfSFdfT0sgLSBmb3Igc3VjY2Vzcy4KKyAqIFZYR0VfSFdfRVJSX0NSSVRJQ0FMIC0gd2hlbiBlbmNvdW50ZXJzIGNyaXRpY2FsIGVycm9yLgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZmlmb19oYW5kbGVfdGNvZGUoc3RydWN0IF9fdnhnZV9od19maWZvICpmaWZvLAorCQkJCQkgICAgICB2b2lkICp0eGRsaCwKKwkJCQkJICAgICAgZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgdF9jb2RlKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwljaGFubmVsID0gJmZpZm8tPmNoYW5uZWw7CisKKwlpZiAoKCh0X2NvZGUgJiAweDcpIDwgMCkgfHwgKCh0X2NvZGUgJiAweDcpID4gMHg0KSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX1RDT0RFOworCQlnb3RvIGV4aXQ7CisJfQorCisJZmlmby0+c3RhdHMtPnR4ZF90X2NvZGVfZXJyX2NudFt0X2NvZGVdKys7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od19maWZvX3R4ZGxfZnJlZSAtIEZyZWUgZGVzY3JpcHRvci4KKyAqIEBmaWZvOiBIYW5kbGUgdG8gdGhlIGZpZm8gb2JqZWN0IHVzZWQgZm9yIG5vbiBvZmZsb2FkIHNlbmQKKyAqIEB0eGRsaDogRGVzY3JpcHRvciBoYW5kbGUuCisgKgorICogRnJlZSB0aGUgcmVzZXJ2ZWQgZGVzY3JpcHRvci4gVGhpcyBvcGVyYXRpb24gaXMgInN5bW1ldHJpY2FsIiB0bworICogdnhnZV9od19maWZvX3R4ZGxfcmVzZXJ2ZS4gVGhlICJmcmVlLWluZyIgY29tcGxldGVzIHRoZSBkZXNjcmlwdG9yJ3MKKyAqIGxpZmVjeWNsZS4KKyAqCisgKiBBZnRlciBmcmVlLWluZyAoc2VlIHZ4Z2VfaHdfZmlmb190eGRsX2ZyZWUoKSkgdGhlIGRlc2NyaXB0b3IgYWdhaW4gY2FuCisgKiBiZToKKyAqCisgKiAtIHJlc2VydmVkICh2eGdlX2h3X2ZpZm9fdHhkbF9yZXNlcnZlKTsKKyAqCisgKiAtIHBvc3RlZCAodnhnZV9od19maWZvX3R4ZGxfcG9zdCk7CisgKgorICogLSBjb21wbGV0ZWQgKHZ4Z2VfaHdfZmlmb190eGRsX25leHRfY29tcGxldGVkKTsKKyAqCisgKiAtIGFuZCByZWN5Y2xlZCBhZ2FpbiAodnhnZV9od19maWZvX3R4ZGxfZnJlZSkuCisgKgorICogRm9yIGFsdGVybmF0aXZlIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBtb3JlIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvCisgKiB0aGUgZGVzaWduIGRvYy4KKyAqCisgKi8KK3ZvaWQgdnhnZV9od19maWZvX3R4ZGxfZnJlZShzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm8sIHZvaWQgKnR4ZGxoKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmb190eGRsX3ByaXYgKnR4ZGxfcHJpdjsKKwl1MzIgbWF4X2ZyYWdzOworCXN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbDsKKworCWNoYW5uZWwgPSAmZmlmby0+Y2hhbm5lbDsKKworCXR4ZGxfcHJpdiA9IF9fdnhnZV9od19maWZvX3R4ZGxfcHJpdihmaWZvLAorCQkJKHN0cnVjdCB2eGdlX2h3X2ZpZm9fdHhkICopdHhkbGgpOworCisJbWF4X2ZyYWdzID0gZmlmby0+Y29uZmlnLT5tYXhfZnJhZ3M7CisKKwl2eGdlX2h3X2NoYW5uZWxfZHRyX2ZyZWUoY2hhbm5lbCwgdHhkbGgpOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkIC0gQWRkIHRoZSBtYWMgYWRkcmVzcyBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICB0byBNQUMgYWRkcmVzcyB0YWJsZS4KKyAqIEB2cDogVnBhdGggaGFuZGxlLgorICogQG1hY2FkZHI6IE1BQyBhZGRyZXNzIHRvIGJlIGFkZGVkIGZvciB0aGlzIHZwYXRoIGludG8gdGhlIGxpc3QKKyAqIEBtYWNhZGRyX21hc2s6IE1BQyBhZGRyZXNzIG1hc2sgZm9yIG1hY2FkZHIKKyAqIEBkdXBsaWNhdGVfbW9kZTogRHVwbGljYXRlIE1BQyBhZGRyZXNzIGFkZCBtb2RlLiBQbGVhc2Ugc2VlCisgKiAgICAgICAgICAgICBlbnVtIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkX21vZGV7fQorICoKKyAqIEFkZHMgdGhlIGdpdmVuIG1hYyBhZGRyZXNzIGFuZCBtYWMgYWRkcmVzcyBtYXNrIGludG8gdGhlIGxpc3QgZm9yIHRoaXMKKyAqIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZGVsZXRlLCB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2dldCBhbmQKKyAqIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwKKwl1OCAobWFjYWRkcilbRVRIX0FMRU5dLAorCXU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSwKKwllbnVtIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkX21vZGUgZHVwbGljYXRlX21vZGUpCit7CisJdTMyIGk7CisJdTY0IGRhdGExID0gMFVMTDsKKwl1NjQgZGF0YTIgPSAwVUxMOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICh2cCA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IFZYR0VfSFdfRVJSX0lOVkFMSURfSEFORExFOworCQlnb3RvIGV4aXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspIHsKKwkJZGF0YTEgPDw9IDg7CisJCWRhdGExIHw9ICh1OCltYWNhZGRyW2ldOworCisJCWRhdGEyIDw8PSA4OworCQlkYXRhMiB8PSAodTgpbWFjYWRkcl9tYXNrW2ldOworCX0KKworCXN3aXRjaCAoZHVwbGljYXRlX21vZGUpIHsKKwljYXNlIFZYR0VfSFdfVlBBVEhfTUFDX0FERFJfQUREX0RVUExJQ0FURToKKwkJaSA9IDA7CisJCWJyZWFrOworCWNhc2UgVlhHRV9IV19WUEFUSF9NQUNfQUREUl9ESVNDQVJEX0RVUExJQ0FURToKKwkJaSA9IDE7CisJCWJyZWFrOworCWNhc2UgVlhHRV9IV19WUEFUSF9NQUNfQUREUl9SRVBMQUNFX0RVUExJQ0FURToKKwkJaSA9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWkgPSAwOworCQlicmVhazsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCh2cCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9BRERfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEsCisJCQkwLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0RBX01BQ19BRERSKGRhdGExKSwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9EQV9NQUNfQUREUl9NQVNLKGRhdGEyKXwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMV9EQV9NQUNfQUREUl9NT0RFKGkpKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2dldCAtIEdldCB0aGUgZmlyc3QgbWFjIGFkZHJlc3MgZW50cnkgZm9yIHRoaXMgdnBhdGgKKyAqICAgICAgICAgICAgICAgZnJvbSBNQUMgYWRkcmVzcyB0YWJsZS4KKyAqIEB2cDogVnBhdGggaGFuZGxlLgorICogQG1hY2FkZHI6IEZpcnN0IE1BQyBhZGRyZXNzIGVudHJ5IGZvciB0aGlzIHZwYXRoIGluIHRoZSBsaXN0CisgKiBAbWFjYWRkcl9tYXNrOiBNQUMgYWRkcmVzcyBtYXNrIGZvciBtYWNhZGRyCisgKgorICogUmV0dXJucyB0aGUgZmlyc3QgbWFjIGFkZHJlc3MgYW5kIG1hYyBhZGRyZXNzIG1hc2sgaW4gdGhlIGxpc3QgZm9yIHRoaXMKKyAqIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwKKwl1OCAobWFjYWRkcilbRVRIX0FMRU5dLAorCXU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSkKK3sKKwl1MzIgaTsKKwl1NjQgZGF0YTEgPSAwVUxMOworCXU2NCBkYXRhMiA9IDBVTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX2dldCh2cCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9MSVNUX0ZJUlNUX0VOVFJZLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBLAorCQkJMCwgJmRhdGExLCAmZGF0YTIpOworCisJaWYgKHN0YXR1cyAhPSBWWEdFX0hXX09LKQorCQlnb3RvIGV4aXQ7CisKKwlkYXRhMSA9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9HRVRfREFfTUFDX0FERFIoZGF0YTEpOworCisJZGF0YTIgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfR0VUX0RBX01BQ19BRERSX01BU0soZGF0YTIpOworCisJZm9yIChpID0gRVRIX0FMRU47IGkgPiAwOyBpLS0pIHsKKwkJbWFjYWRkcltpLTFdID0gKHU4KShkYXRhMSAmIDB4RkYpOworCQlkYXRhMSA+Pj0gODsKKworCQltYWNhZGRyX21hc2tbaS0xXSA9ICh1OCkoZGF0YTIgJiAweEZGKTsKKwkJZGF0YTIgPj49IDg7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQgLSBHZXQgdGhlIG5leHQgbWFjIGFkZHJlc3MgZW50cnkgZm9yIHRoaXMKKyAqIHZwYXRoCisgKiAgICAgICAgICAgICAgIGZyb20gTUFDIGFkZHJlc3MgdGFibGUuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqIEBtYWNhZGRyOiBOZXh0IE1BQyBhZGRyZXNzIGVudHJ5IGZvciB0aGlzIHZwYXRoIGluIHRoZSBsaXN0CisgKiBAbWFjYWRkcl9tYXNrOiBNQUMgYWRkcmVzcyBtYXNrIGZvciBtYWNhZGRyCisgKgorICogUmV0dXJucyB0aGUgbmV4dCBtYWMgYWRkcmVzcyBhbmQgbWFjIGFkZHJlc3MgbWFzayBpbiB0aGUgbGlzdCBmb3IgdGhpcworICogdnBhdGguCisgKiBzZWUgYWxzbzogdnhnZV9od192cGF0aF9tYWNfYWRkcl9nZXQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLAorCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sCisJdTggKG1hY2FkZHJfbWFzaylbRVRIX0FMRU5dKQoreworCXUzMiBpOworCXU2NCBkYXRhMSA9IDBVTEw7CisJdTY0IGRhdGEyID0gMFVMTDsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfZ2V0KHZwLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0xJU1RfTkVYVF9FTlRSWSwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSwKKwkJCTAsICZkYXRhMSwgJmRhdGEyKTsKKworCWlmIChzdGF0dXMgIT0gVlhHRV9IV19PSykKKwkJZ290byBleGl0OworCisJZGF0YTEgPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTBfR0VUX0RBX01BQ19BRERSKGRhdGExKTsKKworCWRhdGEyID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEExX0dFVF9EQV9NQUNfQUREUl9NQVNLKGRhdGEyKTsKKworCWZvciAoaSA9IEVUSF9BTEVOOyBpID4gMDsgaS0tKSB7CisJCW1hY2FkZHJbaS0xXSA9ICh1OCkoZGF0YTEgJiAweEZGKTsKKwkJZGF0YTEgPj49IDg7CisKKwkJbWFjYWRkcl9tYXNrW2ktMV0gPSAodTgpKGRhdGEyICYgMHhGRik7CisJCWRhdGEyID4+PSA4OworCX0KKworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZGVsZXRlIC0gRGVsZXRlIHRoZSBtYWMgYWRkcmVzcyBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICB0byBNQUMgYWRkcmVzcyB0YWJsZS4KKyAqIEB2cDogVnBhdGggaGFuZGxlLgorICogQG1hY2FkZHI6IE1BQyBhZGRyZXNzIHRvIGJlIGFkZGVkIGZvciB0aGlzIHZwYXRoIGludG8gdGhlIGxpc3QKKyAqIEBtYWNhZGRyX21hc2s6IE1BQyBhZGRyZXNzIG1hc2sgZm9yIG1hY2FkZHIKKyAqCisgKiBEZWxldGUgdGhlIGdpdmVuIG1hYyBhZGRyZXNzIGFuZCBtYWMgYWRkcmVzcyBtYXNrIGludG8gdGhlIGxpc3QgZm9yIHRoaXMKKyAqIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfYWRkLCB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2dldCBhbmQKKyAqIHZ4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0X25leHQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZGVsZXRlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwKKwl1OCAobWFjYWRkcilbRVRIX0FMRU5dLAorCXU4IChtYWNhZGRyX21hc2spW0VUSF9BTEVOXSkKK3sKKwl1MzIgaTsKKwl1NjQgZGF0YTEgPSAwVUxMOworCXU2NCBkYXRhMiA9IDBVTEw7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykgeworCQlkYXRhMSA8PD0gODsKKwkJZGF0YTEgfD0gKHU4KW1hY2FkZHJbaV07CisKKwkJZGF0YTIgPDw9IDg7CisJCWRhdGEyIHw9ICh1OCltYWNhZGRyX21hc2tbaV07CisJfQorCisJc3RhdHVzID0gX192eGdlX2h3X3ZwYXRoX3J0c190YWJsZV9zZXQodnAsCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9BQ1RJT05fREVMRVRFX0VOVFJZLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfREFUQV9TVFJVQ1RfU0VMX0RBLAorCQkJMCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9EQVRBMF9EQV9NQUNfQUREUihkYXRhMSksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfREFUQTFfREFfTUFDX0FERFJfTUFTSyhkYXRhMikpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfdmlkX2FkZCAtIEFkZCB0aGUgdmxhbiBpZCBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICB0byB2bGFuIGlkIHRhYmxlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKiBAdmlkOiB2bGFuIGlkIHRvIGJlIGFkZGVkIGZvciB0aGlzIHZwYXRoIGludG8gdGhlIGxpc3QKKyAqCisgKiBBZGRzIHRoZSBnaXZlbiB2bGFuIGlkIGludG8gdGhlIGxpc3QgZm9yIHRoaXMgIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfdmlkX2RlbGV0ZSwgdnhnZV9od192cGF0aF92aWRfZ2V0IGFuZAorICogdnhnZV9od192cGF0aF92aWRfZ2V0X25leHQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfdmlkX2FkZChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIHU2NCB2aWQpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCh2cCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9BRERfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfVklELAorCQkJMCwgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1ZMQU5fSUQodmlkKSwgMCk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF92aWRfZ2V0IC0gR2V0IHRoZSBmaXJzdCB2aWQgZW50cnkgZm9yIHRoaXMgdnBhdGgKKyAqICAgICAgICAgICAgICAgZnJvbSB2bGFuIGlkIHRhYmxlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKiBAdmlkOiBCdWZmZXIgdG8gcmV0dXJuIHZsYW4gaWQKKyAqCisgKiBSZXR1cm5zIHRoZSBmaXJzdCB2bGFuIGlkIGluIHRoZSBsaXN0IGZvciB0aGlzIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfdmlkX2dldF9uZXh0CisgKgorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX3ZpZF9nZXQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLCB1NjQgKnZpZCkKK3sKKwl1NjQgZGF0YTsKKwllbnVtIHZ4Z2VfaHdfc3RhdHVzIHN0YXR1cyA9IFZYR0VfSFdfT0s7CisKKwlpZiAodnAgPT0gTlVMTCkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXN0YXR1cyA9IF9fdnhnZV9od192cGF0aF9ydHNfdGFibGVfZ2V0KHZwLAorCQkJVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0NUUkxfQUNUSU9OX0xJU1RfRklSU1RfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfVklELAorCQkJMCwgdmlkLCAmZGF0YSk7CisKKwkqdmlkID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9WTEFOX0lEKCp2aWQpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfdmlkX2dldF9uZXh0IC0gR2V0IHRoZSBuZXh0IHZpZCBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICBmcm9tIHZsYW4gaWQgdGFibGUuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqIEB2aWQ6IEJ1ZmZlciB0byByZXR1cm4gdmxhbiBpZAorICoKKyAqIFJldHVybnMgdGhlIG5leHQgdmxhbiBpZCBpbiB0aGUgbGlzdCBmb3IgdGhpcyB2cGF0aC4KKyAqIHNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX3ZpZF9nZXQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfdmlkX2dldF9uZXh0KHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCwgdTY0ICp2aWQpCit7CisJdTY0IGRhdGE7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX2dldCh2cCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9MSVNUX05FWFRfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfVklELAorCQkJMCwgdmlkLCAmZGF0YSk7CisKKwkqdmlkID0gVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX0dFVF9WTEFOX0lEKCp2aWQpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfdmlkX2RlbGV0ZSAtIERlbGV0ZSB0aGUgdmxhbiBpZCBlbnRyeSBmb3IgdGhpcyB2cGF0aAorICogICAgICAgICAgICAgICB0byB2bGFuIGlkIHRhYmxlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKiBAdmlkOiB2bGFuIGlkIHRvIGJlIGFkZGVkIGZvciB0aGlzIHZwYXRoIGludG8gdGhlIGxpc3QKKyAqCisgKiBBZGRzIHRoZSBnaXZlbiB2bGFuIGlkIGludG8gdGhlIGxpc3QgZm9yIHRoaXMgIHZwYXRoLgorICogc2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfdmlkX2FkZCwgdnhnZV9od192cGF0aF92aWRfZ2V0IGFuZAorICogdnhnZV9od192cGF0aF92aWRfZ2V0X25leHQKKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfdmlkX2RlbGV0ZShzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIHU2NCB2aWQpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfcnRzX3RhYmxlX3NldCh2cCwKKwkJCVZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0FDVElPTl9ERUxFVEVfRU5UUlksCisJCQlWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfVklELAorCQkJMCwgVlhHRV9IV19SVFNfQUNDRVNTX1NURUVSX0RBVEEwX1ZMQU5fSUQodmlkKSwgMCk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9wcm9taXNjX2VuYWJsZSAtIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKgorICogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgb2YgVGl0YW4tZSBvcGVyYXRpb24uCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfcHJvbWlzY19kaXNhYmxlKCkuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9wcm9taXNjX2VuYWJsZSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKCh2cCA9PSBOVUxMKSB8fCAodnAtPnZwYXRoLT5yaW5naCA9PSBOVUxMKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJLyogRW5hYmxlIHByb21pc2NvdXMgbW9kZSBmb3IgZnVuY3Rpb24gMCBvbmx5ICovCisJaWYgKCEodnBhdGgtPmhsZGV2LT5hY2Nlc3NfcmlnaHRzICYKKwkJVlhHRV9IV19ERVZJQ0VfQUNDRVNTX1JJR0hUX01SUENJTSkpCisJCXJldHVybiBWWEdFX0hXX09LOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJaWYgKCEodmFsNjQgJiBWWEdFX0hXX1JYTUFDX1ZDRkcwX1VDQVNUX0FMTF9BRERSX0VOKSkgeworCisJCXZhbDY0IHw9IFZYR0VfSFdfUlhNQUNfVkNGRzBfVUNBU1RfQUxMX0FERFJfRU4gfAorCQkJIFZYR0VfSFdfUlhNQUNfVkNGRzBfTUNBU1RfQUxMX0FERFJfRU4gfAorCQkJIFZYR0VfSFdfUlhNQUNfVkNGRzBfQkNBU1RfRU4gfAorCQkJIFZYR0VfSFdfUlhNQUNfVkNGRzBfQUxMX1ZJRF9FTjsKKworCQl3cml0ZXEodmFsNjQsICZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfcHJvbWlzY19kaXNhYmxlIC0gRGlzYWJsZSBwcm9taXNjdW91cyBtb2RlLgorICogQHZwOiBWcGF0aCBoYW5kbGUuCisgKgorICogRGlzYWJsZSBwcm9taXNjdW91cyBtb2RlIG9mIFRpdGFuLWUgb3BlcmF0aW9uLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX3Byb21pc2NfZW5hYmxlKCkuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9wcm9taXNjX2Rpc2FibGUoCisJCQlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJdTY0IHZhbDY0OworCXN0cnVjdCBfX3Z4Z2VfaHdfdmlydHVhbHBhdGggKnZwYXRoOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKworCWlmICgodnAgPT0gTlVMTCkgfHwgKHZwLT52cGF0aC0+cmluZ2ggPT0gTlVMTCkpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwl2cGF0aCA9IHZwLT52cGF0aDsKKworCXZhbDY0ID0gcmVhZHEoJnZwYXRoLT52cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKworCWlmICh2YWw2NCAmIFZYR0VfSFdfUlhNQUNfVkNGRzBfVUNBU1RfQUxMX0FERFJfRU4pIHsKKworCQl2YWw2NCAmPSB+KFZYR0VfSFdfUlhNQUNfVkNGRzBfVUNBU1RfQUxMX0FERFJfRU4gfAorCQkJICAgVlhHRV9IV19SWE1BQ19WQ0ZHMF9NQ0FTVF9BTExfQUREUl9FTiB8CisJCQkgICBWWEdFX0hXX1JYTUFDX1ZDRkcwX0FMTF9WSURfRU4pOworCisJCXdyaXRlcSh2YWw2NCwgJnZwYXRoLT52cF9yZWctPnJ4bWFjX3ZjZmcwKTsKKwl9CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX2JjYXN0X2VuYWJsZSAtIEVuYWJsZSBicm9hZGNhc3QKKyAqIEB2cDogVnBhdGggaGFuZGxlLgorICoKKyAqIEVuYWJsZSByZWNlaXZpbmcgYnJvYWRjYXN0cy4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX2JjYXN0X2VuYWJsZSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKCh2cCA9PSBOVUxMKSB8fCAodnAtPnZwYXRoLT5yaW5naCA9PSBOVUxMKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJaWYgKCEodmFsNjQgJiBWWEdFX0hXX1JYTUFDX1ZDRkcwX0JDQVNUX0VOKSkgeworCQl2YWw2NCB8PSBWWEdFX0hXX1JYTUFDX1ZDRkcwX0JDQVNUX0VOOworCQl3cml0ZXEodmFsNjQsICZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZW5hYmxlIC0gRW5hYmxlIG11bHRpY2FzdCBhZGRyZXNzZXMuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqCisgKiBFbmFibGUgVGl0YW4tZSBtdWx0aWNhc3QgYWRkcmVzc2VzLgorICogUmV0dXJuczogVlhHRV9IV19PSyBvbiBzdWNjZXNzLgorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX21jYXN0X2VuYWJsZSgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKCh2cCA9PSBOVUxMKSB8fCAodnAtPnZwYXRoLT5yaW5naCA9PSBOVUxMKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJaWYgKCEodmFsNjQgJiBWWEdFX0hXX1JYTUFDX1ZDRkcwX01DQVNUX0FMTF9BRERSX0VOKSkgeworCQl2YWw2NCB8PSBWWEdFX0hXX1JYTUFDX1ZDRkcwX01DQVNUX0FMTF9BRERSX0VOOworCQl3cml0ZXEodmFsNjQsICZ2cGF0aC0+dnBfcmVnLT5yeG1hY192Y2ZnMCk7CisJfQorZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZGlzYWJsZSAtIERpc2FibGUgIG11bHRpY2FzdCBhZGRyZXNzZXMuCisgKiBAdnA6IFZwYXRoIGhhbmRsZS4KKyAqCisgKiBEaXNhYmxlIFRpdGFuLWUgbXVsdGljYXN0IGFkZHJlc3Nlcy4KKyAqIFJldHVybnM6IFZYR0VfSFdfT0sgLSBzdWNjZXNzLgorICogVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEUgLSBJbnZhbGlkIGhhbmRsZQorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9tY2FzdF9kaXNhYmxlKHN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGg7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKCh2cCA9PSBOVUxMKSB8fCAodnAtPnZwYXRoLT5yaW5naCA9PSBOVUxMKSkgeworCQlzdGF0dXMgPSBWWEdFX0hXX0VSUl9JTlZBTElEX0hBTkRMRTsKKwkJZ290byBleGl0OworCX0KKworCXZwYXRoID0gdnAtPnZwYXRoOworCisJdmFsNjQgPSByZWFkcSgmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCisJaWYgKHZhbDY0ICYgVlhHRV9IV19SWE1BQ19WQ0ZHMF9NQ0FTVF9BTExfQUREUl9FTikgeworCQl2YWw2NCAmPSB+VlhHRV9IV19SWE1BQ19WQ0ZHMF9NQ0FTVF9BTExfQUREUl9FTjsKKwkJd3JpdGVxKHZhbDY0LCAmdnBhdGgtPnZwX3JlZy0+cnhtYWNfdmNmZzApOworCX0KK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIF9fdnhnZV9od192cGF0aF9hbGFybV9wcm9jZXNzIC0gUHJvY2VzcyBBbGFybXMuCisgKiBAdnBhdGg6IFZpcnR1YWwgUGF0aC4KKyAqIEBza2lwX2FsYXJtczogRG8gbm90IGNsZWFyIHRoZSBhbGFybXMKKyAqCisgKiBQcm9jZXNzIHZwYXRoIGFsYXJtcy4KKyAqCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgX192eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3MoCisJCQlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoICp2cGF0aCwKKwkJCXUzMiBza2lwX2FsYXJtcykKK3sKKwl1NjQgdmFsNjQ7CisJdTY0IGFsYXJtX3N0YXR1czsKKwl1NjQgcGljX3N0YXR1czsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSBOVUxMOworCWVudW0gdnhnZV9od19ldmVudCBhbGFybV9ldmVudCA9IFZYR0VfSFdfRVZFTlRfVU5LTk9XTjsKKwl1NjQgbWFzazY0OworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2luZm8gKnN3X3N0YXRzOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3JlZyBfX2lvbWVtICp2cF9yZWc7CisKKwlpZiAodnBhdGggPT0gTlVMTCkgeworCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKFZYR0VfSFdfRVZFTlRfVU5LTk9XTiwKKwkJCWFsYXJtX2V2ZW50KTsKKwkJZ290byBvdXQ7CisJfQorCisJaGxkZXYgPSB2cGF0aC0+aGxkZXY7CisJdnBfcmVnID0gdnBhdGgtPnZwX3JlZzsKKwlhbGFybV9zdGF0dXMgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9nZW5lcmFsX2ludF9zdGF0dXMpOworCisJaWYgKGFsYXJtX3N0YXR1cyA9PSBWWEdFX0hXX0FMTF9GT1hFUykgeworCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkUsCisJCQlhbGFybV9ldmVudCk7CisJCWdvdG8gb3V0OworCX0KKworCXN3X3N0YXRzID0gdnBhdGgtPnN3X3N0YXRzOworCisJaWYgKGFsYXJtX3N0YXR1cyAmIH4oCisJCVZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1BJQ19JTlQgfAorCQlWWEdFX0hXX1ZQQVRIX0dFTkVSQUxfSU5UX1NUQVRVU19QQ0lfSU5UIHwKKwkJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfV1JETUFfSU5UIHwKKwkJVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfWE1BQ19JTlQpKSB7CisJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy51bmtub3duX2FsYXJtcysrOworCisJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoVlhHRV9IV19FVkVOVF9VTktOT1dOLAorCQkJYWxhcm1fZXZlbnQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoYWxhcm1fc3RhdHVzICYgVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfWE1BQ19JTlQpIHsKKworCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnhnbWFjX3ZwX2ludF9zdGF0dXMpOworCisJCWlmICh2YWw2NCAmCisJCVZYR0VfSFdfWEdNQUNfVlBfSU5UX1NUQVRVU19BU0lDX05UV0tfVlBfRVJSX0FTSUNfTlRXS19WUF9JTlQpIHsKKworCQkJdmFsNjQgPSByZWFkcSgmdnBfcmVnLT5hc2ljX250d2tfdnBfZXJyX3JlZyk7CisKKwkJCWlmICgoKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fRkxUKSAmJgorCQkJICAgICghKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0spKSkgfHwKKwkJCSAgICAoKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fRkxUX09DQ1VSUikKKwkJCQkmJiAoISh2YWw2NCAmCisJCQkJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX09LX09DQ1VSUikKKwkJCSkpKSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLm5ldHdvcmtfc3VzdGFpbmVkX2ZhdWx0Kys7CisKKwkJCQl3cml0ZXEoCisJCQkJVlhHRV9IV19BU0lDX05XX1ZQX0VSUl9SRUdfWE1BQ0pfU1ROX0ZMVCwKKwkJCQkJJnZwX3JlZy0+YXNpY19udHdrX3ZwX2Vycl9tYXNrKTsKKworCQkJCV9fdnhnZV9od19kZXZpY2VfaGFuZGxlX2xpbmtfZG93bl9pbmQoaGxkZXYpOworCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJCVZYR0VfSFdfRVZFTlRfTElOS19ET1dOLCBhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCWlmICgoKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0spICYmCisJCQkgICAgKCEodmFsNjQgJgorCQkJCVZYR0VfSFdfQVNJQ19OV19WUF9FUlJfUkVHX1hNQUNKX1NUTl9GTFQpKSkgfHwKKwkJCSAgICAoKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0tfT0NDVVJSKQorCQkJCSYmICghKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fRkxUX09DQ1VSUikKKwkJCSkpKSB7CisKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMubmV0d29ya19zdXN0YWluZWRfb2srKzsKKworCQkJCXdyaXRlcSgKKwkJCQlWWEdFX0hXX0FTSUNfTldfVlBfRVJSX1JFR19YTUFDSl9TVE5fT0ssCisJCQkJCSZ2cF9yZWctPmFzaWNfbnR3a192cF9lcnJfbWFzayk7CisKKwkJCQlfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9saW5rX3VwX2luZChobGRldik7CisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9MSU5LX1VQLCBhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCXdyaXRlcShWWEdFX0hXX0lOVFJfTUFTS19BTEwsCisJCQkJJnZwX3JlZy0+YXNpY19udHdrX3ZwX2Vycl9yZWcpOworCisJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCVZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRCwgYWxhcm1fZXZlbnQpOworCisJCQlpZiAoc2tpcF9hbGFybXMpCisJCQkJcmV0dXJuIFZYR0VfSFdfT0s7CisJCX0KKwl9CisKKwlpZiAoYWxhcm1fc3RhdHVzICYgVlhHRV9IV19WUEFUSF9HRU5FUkFMX0lOVF9TVEFUVVNfUElDX0lOVCkgeworCisJCXBpY19zdGF0dXMgPSByZWFkcSgmdnBfcmVnLT52cGF0aF9wcGlmX2ludF9zdGF0dXMpOworCisJCWlmIChwaWNfc3RhdHVzICYKKwkJICAgIFZYR0VfSFdfVlBBVEhfUFBJRl9JTlRfU1RBVFVTX0dFTkVSQUxfRVJST1JTX0dFTkVSQUxfSU5UKSB7CisKKwkJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+Z2VuZXJhbF9lcnJvcnNfcmVnKTsKKwkJCW1hc2s2NCA9IHJlYWRxKCZ2cF9yZWctPmdlbmVyYWxfZXJyb3JzX21hc2spOworCisJCQlpZiAoKHZhbDY0ICYKKwkJCQlWWEdFX0hXX0dFTkVSQUxfRVJST1JTX1JFR19JTklfU0VSUl9ERVQpICYKKwkJCQl+bWFzazY0KSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLmluaV9zZXJyX2RldCsrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9TRVJSLCBhbGFybV9ldmVudCk7CisJCQl9CisKKwkJCWlmICgodmFsNjQgJgorCQkJICAgIFZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX0RCTEdFTl9GSUZPMF9PVlJGTE9XKSAmCisJCQkJfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5kYmxnZW5fZmlmbzBfb3ZlcmZsb3crKzsKKworCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJCVZYR0VfSFdfRVZFTlRfRklGT19FUlIsIGFsYXJtX2V2ZW50KTsKKwkJCX0KKworCQkJaWYgKCh2YWw2NCAmCisJCQkgICAgVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfU1RBVFNCX1BJRl9DSEFJTl9FUlIpICYKKwkJCQl+bWFzazY0KQorCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5zdGF0c2JfcGlmX2NoYWluX2Vycm9yKys7CisKKwkJCWlmICgodmFsNjQgJgorCQkJICAgVlhHRV9IV19HRU5FUkFMX0VSUk9SU19SRUdfU1RBVFNCX0RST1BfVElNRU9VVF9SRVEpICYKKwkJCQl+bWFzazY0KQorCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5zdGF0c2JfZHJvcF90aW1lb3V0Kys7CisKKwkJCWlmICgodmFsNjQgJgorCQkJCVZYR0VfSFdfR0VORVJBTF9FUlJPUlNfUkVHX1RHVF9JTExFR0FMX0FDQ0VTUykgJgorCQkJCX5tYXNrNjQpCisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnRhcmdldF9pbGxlZ2FsX2FjY2VzcysrOworCisJCQlpZiAoIXNraXBfYWxhcm1zKSB7CisJCQkJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCQkJJnZwX3JlZy0+Z2VuZXJhbF9lcnJvcnNfcmVnKTsKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQsCisJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKwkJfQorCisJCWlmIChwaWNfc3RhdHVzICYKKwkJICAgIFZYR0VfSFdfVlBBVEhfUFBJRl9JTlRfU1RBVFVTX0tERkNDVExfRVJST1JTX0tERkNDVExfSU5UKSB7CisKKwkJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfcmVnKTsKKwkJCW1hc2s2NCA9IHJlYWRxKCZ2cF9yZWctPmtkZmNjdGxfZXJyb3JzX21hc2spOworCisJCQlpZiAoKHZhbDY0ICYKKwkJCSAgICBWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8wX09WUldSKSAmCisJCQkJfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5rZGZjY3RsX2ZpZm8wX292ZXJ3cml0ZSsrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9GSUZPX0VSUiwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoKHZhbDY0ICYKKwkJCSAgICBWWEdFX0hXX0tERkNDVExfRVJST1JTX1JFR19LREZDQ1RMX0ZJRk8wX1BPSVNPTikgJgorCQkJCX5tYXNrNjQpIHsKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMua2RmY2N0bF9maWZvMF9wb2lzb24rKzsKKworCQkJCWFsYXJtX2V2ZW50ID0gVlhHRV9IV19TRVRfTEVWRUwoCisJCQkJCVZYR0VfSFdfRVZFTlRfRklGT19FUlIsCisJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKworCQkJaWYgKCh2YWw2NCAmCisJCQkgICAgVlhHRV9IV19LREZDQ1RMX0VSUk9SU19SRUdfS0RGQ0NUTF9GSUZPMF9ETUFfRVJSKSAmCisJCQkJfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5rZGZjY3RsX2ZpZm8wX2RtYV9lcnJvcisrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9GSUZPX0VSUiwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoIXNraXBfYWxhcm1zKSB7CisJCQkJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCQkJJnZwX3JlZy0+a2RmY2N0bF9lcnJvcnNfcmVnKTsKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQsCisJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKwkJfQorCisJfQorCisJaWYgKGFsYXJtX3N0YXR1cyAmIFZYR0VfSFdfVlBBVEhfR0VORVJBTF9JTlRfU1RBVFVTX1dSRE1BX0lOVCkgeworCisJCXZhbDY0ID0gcmVhZHEoJnZwX3JlZy0+d3JkbWFfYWxhcm1fc3RhdHVzKTsKKworCQlpZiAodmFsNjQgJiBWWEdFX0hXX1dSRE1BX0FMQVJNX1NUQVRVU19QUkNfQUxBUk1fUFJDX0lOVCkgeworCisJCQl2YWw2NCA9IHJlYWRxKCZ2cF9yZWctPnByY19hbGFybV9yZWcpOworCQkJbWFzazY0ID0gcmVhZHEoJnZwX3JlZy0+cHJjX2FsYXJtX21hc2spOworCisJCQlpZiAoKHZhbDY0ICYgVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19SSU5HX0JVTVApJgorCQkJCX5tYXNrNjQpCisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnByY19yaW5nX2J1bXBzKys7CisKKwkJCWlmICgodmFsNjQgJiBWWEdFX0hXX1BSQ19BTEFSTV9SRUdfUFJDX1JYRENNX1NDX0VSUikgJgorCQkJCX5tYXNrNjQpIHsKKwkJCQlzd19zdGF0cy0+ZXJyb3Jfc3RhdHMucHJjX3J4ZGNtX3NjX2VycisrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJVlhHRV9IV19FVkVOVF9WUEFUSF9FUlIsCisJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKworCQkJaWYgKCh2YWw2NCAmIFZYR0VfSFdfUFJDX0FMQVJNX1JFR19QUkNfUlhEQ01fU0NfQUJPUlQpCisJCQkJJiB+bWFzazY0KSB7CisJCQkJc3dfc3RhdHMtPmVycm9yX3N0YXRzLnByY19yeGRjbV9zY19hYm9ydCsrOworCisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJCVZYR0VfSFdfRVZFTlRfVlBBVEhfRVJSLAorCQkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoKHZhbDY0ICYgVlhHRV9IV19QUkNfQUxBUk1fUkVHX1BSQ19RVUFOVEFfU0laRV9FUlIpCisJCQkJICYgfm1hc2s2NCkgeworCQkJCXN3X3N0YXRzLT5lcnJvcl9zdGF0cy5wcmNfcXVhbnRhX3NpemVfZXJyKys7CisKKwkJCQlhbGFybV9ldmVudCA9IFZYR0VfSFdfU0VUX0xFVkVMKAorCQkJCQlWWEdFX0hXX0VWRU5UX1ZQQVRIX0VSUiwKKwkJCQkJYWxhcm1fZXZlbnQpOworCQkJfQorCisJCQlpZiAoIXNraXBfYWxhcm1zKSB7CisJCQkJd3JpdGVxKFZYR0VfSFdfSU5UUl9NQVNLX0FMTCwKKwkJCQkJJnZwX3JlZy0+cHJjX2FsYXJtX3JlZyk7CisJCQkJYWxhcm1fZXZlbnQgPSBWWEdFX0hXX1NFVF9MRVZFTCgKKwkJCQkJCVZYR0VfSFdfRVZFTlRfQUxBUk1fQ0xFQVJFRCwKKwkJCQkJCWFsYXJtX2V2ZW50KTsKKwkJCX0KKwkJfQorCX0KK291dDoKKwlobGRldi0+c3RhdHMuc3dfZGV2X2Vycl9zdGF0cy52cGF0aF9hbGFybXMrKzsKKworCWlmICgoYWxhcm1fZXZlbnQgPT0gVlhHRV9IV19FVkVOVF9BTEFSTV9DTEVBUkVEKSB8fAorCQkoYWxhcm1fZXZlbnQgPT0gVlhHRV9IV19FVkVOVF9VTktOT1dOKSkKKwkJcmV0dXJuIFZYR0VfSFdfT0s7CisKKwlfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9lcnJvcihobGRldiwgdnBhdGgtPnZwX2lkLCBhbGFybV9ldmVudCk7CisKKwlpZiAoYWxhcm1fZXZlbnQgPT0gVlhHRV9IV19FVkVOVF9TRVJSKQorCQlyZXR1cm4gVlhHRV9IV19FUlJfQ1JJVElDQUw7CisKKwlyZXR1cm4gKGFsYXJtX2V2ZW50ID09IFZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkUpID8KKwkJVlhHRV9IV19FUlJfU0xPVF9GUkVFWkUgOgorCQkoYWxhcm1fZXZlbnQgPT0gVlhHRV9IV19FVkVOVF9GSUZPX0VSUikgPyBWWEdFX0hXX0VSUl9GSUZPIDoKKwkJVlhHRV9IV19FUlJfVlBBVEg7Cit9CisKKy8qCisgKiB2eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3MgLSBQcm9jZXNzIEFsYXJtcy4KKyAqIEB2cGF0aDogVmlydHVhbCBQYXRoLgorICogQHNraXBfYWxhcm1zOiBEbyBub3QgY2xlYXIgdGhlIGFsYXJtcworICoKKyAqIFByb2Nlc3MgdnBhdGggYWxhcm1zLgorICoKKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX2FsYXJtX3Byb2Nlc3MoCisJCQlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsCisJCQl1MzIgc2tpcF9hbGFybXMpCit7CisJZW51bSB2eGdlX2h3X3N0YXR1cyBzdGF0dXMgPSBWWEdFX0hXX09LOworCisJaWYgKHZwID09IE5VTEwpIHsKKwkJc3RhdHVzID0gVlhHRV9IV19FUlJfSU5WQUxJRF9IQU5ETEU7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBfX3Z4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2Vzcyh2cC0+dnBhdGgsIHNraXBfYWxhcm1zKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX21zaXhfc2V0IC0gQXNzb2NpYXRlIE1TSVggdmVjdG9ycyB3aXRoIFRJTSBpbnRlcnJ1cHRzIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxybXMKKyAqIEB2cDogVmlydHVhbCBQYXRoIGhhbmRsZS4KKyAqIEB0aW1fbXNpeF9pZDogTVNJWCB2ZWN0b3JzIGFzc29jaWF0ZWQgd2l0aCBWWEdFX0hXX01BWF9JTlRSX1BFUl9WUCBudW1iZXIgb2YKKyAqICAgICAgICAgICAgIGludGVycnVwdHMoQ2FuIGJlIHJlcGVhdGVkKS4gSWYgZmlmbyBvciByaW5nIGFyZSBub3QgZW5hYmxlZAorICogICAgICAgICAgICAgdGhlIE1TSVggdmVjdG9yIGZvciB0aGF0IHNob3VsZCBiZSBzZXQgdG8gMAorICogQGFsYXJtX21zaXhfaWQ6IE1TSVggdmVjdG9yIGZvciBhbGFybS4KKyAqCisgKiBUaGlzIEFQSSB3aWxsIGFzc29jaWF0ZSBhIGdpdmVuIE1TSVggdmVjdG9yIG51bWJlcnMgd2l0aCB0aGUgZm91ciBUSU0KKyAqIGludGVycnVwdHMgYW5kIGFsYXJtIGludGVycnVwdC4KKyAqLworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF9tc2l4X3NldChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIGludCAqdGltX21zaXhfaWQsCisJCSAgICAgICBpbnQgYWxhcm1fbXNpeF9pZCkKK3sKKwl1NjQgdmFsNjQ7CisJc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aCAqdnBhdGggPSB2cC0+dnBhdGg7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfcmVnIF9faW9tZW0gKnZwX3JlZyA9IHZwYXRoLT52cF9yZWc7CisJdTMyIGZpcnN0X3ZwX2lkID0gdnBhdGgtPmhsZGV2LT5maXJzdF92cF9pZDsKKworCXZhbDY0ID0gIFZYR0VfSFdfSU5URVJSVVBUX0NGRzBfR1JPVVAwX01TSVhfRk9SX1RYVEkoCisJCSAgKGZpcnN0X3ZwX2lkICogNCkgKyB0aW1fbXNpeF9pZFswXSkgfAorCQkgVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMF9HUk9VUDFfTVNJWF9GT1JfVFhUSSgKKwkJICAoZmlyc3RfdnBfaWQgKiA0KSArIHRpbV9tc2l4X2lkWzFdKSB8CisJCSBWWEdFX0hXX0lOVEVSUlVQVF9DRkcwX0dST1VQMl9NU0lYX0ZPUl9UWFRJKAorCQkJKGZpcnN0X3ZwX2lkICogNCkgKyB0aW1fbXNpeF9pZFsyXSk7CisKKwkJdmFsNjQgfD0gVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMF9HUk9VUDNfTVNJWF9GT1JfVFhUSSgKKwkJCShmaXJzdF92cF9pZCAqIDQpICsgdGltX21zaXhfaWRbM10pOworCisJd3JpdGVxKHZhbDY0LCAmdnBfcmVnLT5pbnRlcnJ1cHRfY2ZnMCk7CisKKwl3cml0ZXEoVlhHRV9IV19JTlRFUlJVUFRfQ0ZHMl9BTEFSTV9NQVBfVE9fTVNHKAorCQkJKGZpcnN0X3ZwX2lkICogNCkgKyBhbGFybV9tc2l4X2lkKSwKKwkJCSZ2cF9yZWctPmludGVycnVwdF9jZmcyKTsKKworCWlmICh2cGF0aC0+aGxkZXYtPmNvbmZpZy5pbnRyX21vZGUgPT0KKwkJCQkJVlhHRV9IV19JTlRSX01PREVfTVNJWF9PTkVfU0hPVCkgeworCQlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpdnhnZV9iVkFMbigKKwkJCQlWWEdFX0hXX09ORV9TSE9UX1ZFQ1QxX0VOX09ORV9TSE9UX1ZFQ1QxX0VOLAorCQkJCTAsIDMyKSwgJnZwX3JlZy0+b25lX3Nob3RfdmVjdDFfZW4pOworCX0KKworCWlmICh2cGF0aC0+aGxkZXYtPmNvbmZpZy5pbnRyX21vZGUgPT0KKwkJVlhHRV9IV19JTlRSX01PREVfTVNJWF9PTkVfU0hPVCkgeworCQlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKCh1MzIpdnhnZV9iVkFMbigKKwkJCQlWWEdFX0hXX09ORV9TSE9UX1ZFQ1QyX0VOX09ORV9TSE9UX1ZFQ1QyX0VOLAorCQkJCTAsIDMyKSwgJnZwX3JlZy0+b25lX3Nob3RfdmVjdDJfZW4pOworCisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoKHUzMil2eGdlX2JWQUxuKAorCQkJCVZYR0VfSFdfT05FX1NIT1RfVkVDVDNfRU5fT05FX1NIT1RfVkVDVDNfRU4sCisJCQkJMCwgMzIpLCAmdnBfcmVnLT5vbmVfc2hvdF92ZWN0M19lbik7CisJfQorCisJcmV0dXJuIFZYR0VfSFdfT0s7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9tc2l4X21hc2sgLSBNYXNrIE1TSVggVmVjdG9yLgorICogQHZwOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgorICogQG1zaXhfaWQ6ICBNU0lYIElECisgKgorICogVGhlIGZ1bmN0aW9uIG1hc2tzIHRoZSBtc2l4IGludGVycnVwdCBmb3IgdGhlIGdpdmVuIG1zaXhfaWQKKyAqCisgKiBSZXR1cm5zOiAwLAorICogT3RoZXJ3aXNlLCBWWEdFX0hXX0VSUl9XUk9OR19JUlEgaWYgdGhlIG1zaXggaW5kZXggaXMgb3V0IG9mIHJhbmdlCisgKiBzdGF0dXMuCisgKiBTZWUgYWxzbzoKKyAqLwordm9pZAordnhnZV9od192cGF0aF9tc2l4X21hc2soc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLCBpbnQgbXNpeF9pZCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSB2cC0+dnBhdGgtPmhsZGV2OworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCSh1MzIpIHZ4Z2VfYlZBTG4odnhnZV9tQklUKGhsZGV2LT5maXJzdF92cF9pZCArCisJCQkobXNpeF9pZCAgLyA0KSksIDAsIDMyKSwKKwkJJmhsZGV2LT5jb21tb25fcmVnLT5zZXRfbXNpeF9tYXNrX3ZlY3RbbXNpeF9pZCAlIDRdKTsKKworCXJldHVybjsKK30KKworLyoqCisgKiB2eGdlX2h3X3ZwYXRoX21zaXhfY2xlYXIgLSBDbGVhciBNU0lYIFZlY3Rvci4KKyAqIEB2cDogVmlydHVhbCBQYXRoIGhhbmRsZS4KKyAqIEBtc2l4X2lkOiAgTVNJIElECisgKgorICogVGhlIGZ1bmN0aW9uIGNsZWFycyB0aGUgbXNpeCBpbnRlcnJ1cHQgZm9yIHRoZSBnaXZlbiBtc2l4X2lkCisgKgorICogUmV0dXJuczogMCwKKyAqIE90aGVyd2lzZSwgVlhHRV9IV19FUlJfV1JPTkdfSVJRIGlmIHRoZSBtc2l4IGluZGV4IGlzIG91dCBvZiByYW5nZQorICogc3RhdHVzLgorICogU2VlIGFsc286CisgKi8KK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfbXNpeF9jbGVhcihzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnAsIGludCBtc2l4X2lkKQoreworCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpobGRldiA9IHZwLT52cGF0aC0+aGxkZXY7CisJaWYgKGhsZGV2LT5jb25maWcuaW50cl9tb2RlID09CisJCQlWWEdFX0hXX0lOVFJfTU9ERV9NU0lYX09ORV9TSE9UKSB7CisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCQkodTMyKXZ4Z2VfYlZBTG4odnhnZV9tQklUKGhsZGV2LT5maXJzdF92cF9pZCArCisJCQkJKG1zaXhfaWQvNCkpLCAwLCAzMiksCisJCQkJJmhsZGV2LT5jb21tb25fcmVnLT4KKwkJCQkJY2xyX21zaXhfb25lX3Nob3RfdmVjW21zaXhfaWQlNF0pOworCX0gZWxzZSB7CisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCQkodTMyKXZ4Z2VfYlZBTG4odnhnZV9tQklUKGhsZGV2LT5maXJzdF92cF9pZCArCisJCQkJKG1zaXhfaWQvNCkpLCAwLCAzMiksCisJCQkJJmhsZGV2LT5jb21tb25fcmVnLT4KKwkJCQkJY2xlYXJfbXNpeF9tYXNrX3ZlY3RbbXNpeF9pZCU0XSk7CisJfQorCisJcmV0dXJuOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfbXNpeF91bm1hc2sgLSBVbm1hc2sgdGhlIE1TSVggVmVjdG9yLgorICogQHZwOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgorICogQG1zaXhfaWQ6ICBNU0kgSUQKKyAqCisgKiBUaGUgZnVuY3Rpb24gdW5tYXNrcyB0aGUgbXNpeCBpbnRlcnJ1cHQgZm9yIHRoZSBnaXZlbiBtc2l4X2lkCisgKgorICogUmV0dXJuczogMCwKKyAqIE90aGVyd2lzZSwgVlhHRV9IV19FUlJfV1JPTkdfSVJRIGlmIHRoZSBtc2l4IGluZGV4IGlzIG91dCBvZiByYW5nZQorICogc3RhdHVzLgorICogU2VlIGFsc286CisgKi8KK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfbXNpeF91bm1hc2soc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwLCBpbnQgbXNpeF9pZCkKK3sKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSB2cC0+dnBhdGgtPmhsZGV2OworCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCQkodTMyKXZ4Z2VfYlZBTG4odnhnZV9tQklUKGhsZGV2LT5maXJzdF92cF9pZCArCisJCQkobXNpeF9pZC80KSksIDAsIDMyKSwKKwkJCSZobGRldi0+Y29tbW9uX3JlZy0+Y2xlYXJfbXNpeF9tYXNrX3ZlY3RbbXNpeF9pZCU0XSk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9tc2l4X21hc2tfYWxsIC0gTWFzayBhbGwgTVNJWCB2ZWN0b3JzIGZvciB0aGUgdnBhdGguCisgKiBAdnA6IFZpcnR1YWwgUGF0aCBoYW5kbGUuCisgKgorICogVGhlIGZ1bmN0aW9uIG1hc2tzIGFsbCBtc2l4IGludGVycnVwdCBmb3IgdGhlIGdpdmVuIHZwYXRoCisgKgorICovCit2b2lkCit2eGdlX2h3X3ZwYXRoX21zaXhfbWFza19hbGwoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwKQoreworCisJX192eGdlX2h3X3Bpb19tZW1fd3JpdGUzMl91cHBlcigKKwkJKHUzMil2eGdlX2JWQUxuKHZ4Z2VfbUJJVCh2cC0+dnBhdGgtPnZwX2lkKSwgMCwgMzIpLAorCQkmdnAtPnZwYXRoLT5obGRldi0+Y29tbW9uX3JlZy0+c2V0X21zaXhfbWFza19hbGxfdmVjdCk7CisKKwlyZXR1cm47Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9pbnRhX21hc2tfdHhfcnggLSBNYXNrIFR4IGFuZCBSeCBpbnRlcnJ1cHRzLgorICogQHZwOiBWaXJ0dWFsIFBhdGggaGFuZGxlLgorICoKKyAqIE1hc2sgVHggYW5kIFJ4IHZwYXRoIGludGVycnVwdHMuCisgKgorICogU2VlIGFsc286IHZ4Z2VfaHdfdnBhdGhfaW50YV9tYXNrX3R4X3J4KCkKKyAqLwordm9pZCB2eGdlX2h3X3ZwYXRoX2ludGFfbWFza190eF9yeChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJdTY0CXRpbV9pbnRfbWFzazBbNF0gPSB7WzAgLi4uM10gPSAwfTsKKwl1MzIJdGltX2ludF9tYXNrMVs0XSA9IHtbMCAuLi4zXSA9IDB9OworCXU2NAl2YWw2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSB2cC0+dnBhdGgtPmhsZGV2OworCisJVlhHRV9IV19ERVZJQ0VfVElNX0lOVF9NQVNLX1NFVCh0aW1faW50X21hc2swLAorCQl0aW1faW50X21hc2sxLCB2cC0+dnBhdGgtPnZwX2lkKTsKKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2swKTsKKworCWlmICgodGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdICE9IDApIHx8CisJCSh0aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9SWF0gIT0gMCkpIHsKKwkJd3JpdGVxKCh0aW1faW50X21hc2swW1ZYR0VfSFdfVlBBVEhfSU5UUl9UWF0gfAorCQkJdGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdIHwgdmFsNjQpLAorCQkJJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2swKTsKKwl9CisKKwl2YWw2NCA9IHJlYWRsKCZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9tYXNrMSk7CisKKwlpZiAoKHRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1RYXSAhPSAwKSB8fAorCQkodGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdICE9IDApKSB7CisJCV9fdnhnZV9od19waW9fbWVtX3dyaXRlMzJfdXBwZXIoCisJCQkodGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdIHwKKwkJCXRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSB8IHZhbDY0KSwKKwkJCSZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9tYXNrMSk7CisJfQorCisJcmV0dXJuOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfaW50YV91bm1hc2tfdHhfcnggLSBVbm1hc2sgVHggYW5kIFJ4IGludGVycnVwdHMuCisgKiBAdnA6IFZpcnR1YWwgUGF0aCBoYW5kbGUuCisgKgorICogVW5tYXNrIFR4IGFuZCBSeCB2cGF0aCBpbnRlcnJ1cHRzLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX2ludGFfbWFza190eF9yeCgpCisgKi8KK3ZvaWQgdnhnZV9od192cGF0aF9pbnRhX3VubWFza190eF9yeChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnApCit7CisJdTY0CXRpbV9pbnRfbWFzazBbNF0gPSB7WzAgLi4uM10gPSAwfTsKKwl1MzIJdGltX2ludF9tYXNrMVs0XSA9IHtbMCAuLi4zXSA9IDB9OworCXU2NAl2YWw2NDsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYgPSB2cC0+dnBhdGgtPmhsZGV2OworCisJVlhHRV9IV19ERVZJQ0VfVElNX0lOVF9NQVNLX1NFVCh0aW1faW50X21hc2swLAorCQl0aW1faW50X21hc2sxLCB2cC0+dnBhdGgtPnZwX2lkKTsKKworCXZhbDY0ID0gcmVhZHEoJmhsZGV2LT5jb21tb25fcmVnLT50aW1faW50X21hc2swKTsKKworCWlmICgodGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdICE9IDApIHx8CisJICAgKHRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSAhPSAwKSkgeworCQl3cml0ZXEoKH4odGltX2ludF9tYXNrMFtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdIHwKKwkJCXRpbV9pbnRfbWFzazBbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSkpICYgdmFsNjQsCisJCQkmaGxkZXYtPmNvbW1vbl9yZWctPnRpbV9pbnRfbWFzazApOworCX0KKworCWlmICgodGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdICE9IDApIHx8CisJICAgKHRpbV9pbnRfbWFzazFbVlhHRV9IV19WUEFUSF9JTlRSX1JYXSAhPSAwKSkgeworCQlfX3Z4Z2VfaHdfcGlvX21lbV93cml0ZTMyX3VwcGVyKAorCQkJKH4odGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfVFhdIHwKKwkJCSAgdGltX2ludF9tYXNrMVtWWEdFX0hXX1ZQQVRIX0lOVFJfUlhdKSkgJiB2YWw2NCwKKwkJCSZobGRldi0+Y29tbW9uX3JlZy0+dGltX2ludF9tYXNrMSk7CisJfQorCisJcmV0dXJuOworfQorCisvKioKKyAqIHZ4Z2VfaHdfdnBhdGhfcG9sbF9yeCAtIFBvbGwgUnggVmlydHVhbCBQYXRoIGZvciBjb21wbGV0ZWQKKyAqIGRlc2NyaXB0b3JzIGFuZCBwcm9jZXNzIHRoZSBzYW1lLgorICogQHJpbmc6IEhhbmRsZSB0byB0aGUgcmluZyBvYmplY3QgdXNlZCBmb3IgcmVjZWl2ZQorICoKKyAqIFRoZSBmdW5jdGlvbglwb2xscyB0aGUgUnggZm9yIHRoZSBjb21wbGV0ZWQJZGVzY3JpcHRvcnMgYW5kCWNhbGxzCisgKiB0aGUgZHJpdmVyIHZpYSBzdXBwbGllZCBjb21wbGV0aW9uCWNhbGxiYWNrLgorICoKKyAqIFJldHVybnM6IFZYR0VfSFdfT0ssIGlmIHRoZSBwb2xsaW5nIGlzIGNvbXBsZXRlZCBzdWNjZXNzZnVsLgorICogVlhHRV9IV19DT01QTEVUSU9OU19SRU1BSU46IFRoZXJlIGFyZSBzdGlsbCBtb3JlIGNvbXBsZXRlZAorICogZGVzY3JpcHRvcnMgYXZhaWxhYmxlIHdoaWNoIGFyZSB5ZXQgdG8gYmUgcHJvY2Vzc2VkLgorICoKKyAqIFNlZSBhbHNvOiB2eGdlX2h3X3ZwYXRoX3BvbGxfcngoKQorICovCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcG9sbF9yeChzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmcpCit7CisJdTggdF9jb2RlOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwl2b2lkICpmaXJzdF9yeGRoOworCXU2NCB2YWw2NCA9IDA7CisJaW50IG5ld19jb3VudCA9IDA7CisKKwlyaW5nLT5jbXBsX2NudCA9IDA7CisKKwlzdGF0dXMgPSB2eGdlX2h3X3JpbmdfcnhkX25leHRfY29tcGxldGVkKHJpbmcsICZmaXJzdF9yeGRoLCAmdF9jb2RlKTsKKwlpZiAoc3RhdHVzID09IFZYR0VfSFdfT0spCisJCXJpbmctPmNhbGxiYWNrKHJpbmcsIGZpcnN0X3J4ZGgsCisJCQl0X2NvZGUsIHJpbmctPmNoYW5uZWwudXNlcmRhdGEpOworCisJaWYgKHJpbmctPmNtcGxfY250ICE9IDApIHsKKwkJcmluZy0+ZG9vcmJlbGxfY250ICs9IHJpbmctPmNtcGxfY250OworCQlpZiAocmluZy0+ZG9vcmJlbGxfY250ID49IHJpbmctPnJ4ZHNfbGltaXQpIHsKKwkJCS8qCisJCQkgKiBFYWNoIFJ4RCBpcyBvZiA0IHF3b3JkcywgdXBkYXRlIHRoZSBudW1iZXIgb2YKKwkJCSAqIHF3b3JkcyByZXBsZW5pc2hlZAorCQkJICovCisJCQluZXdfY291bnQgPSAocmluZy0+ZG9vcmJlbGxfY250ICogNCk7CisKKwkJCS8qIEZvciBlYWNoIGJsb2NrIGFkZCA0IG1vcmUgcXdvcmRzICovCisJCQlyaW5nLT50b3RhbF9kYl9jbnQgKz0gcmluZy0+ZG9vcmJlbGxfY250OworCQkJaWYgKHJpbmctPnRvdGFsX2RiX2NudCA+PSByaW5nLT5yeGRzX3Blcl9ibG9jaykgeworCQkJCW5ld19jb3VudCArPSA0OworCQkJCS8qIFJlc2V0IHRvdGFsIGNvdW50ICovCisJCQkJcmluZy0+dG90YWxfZGJfY250ICU9IHJpbmctPnJ4ZHNfcGVyX2Jsb2NrOworCQkJfQorCQkJd3JpdGVxKFZYR0VfSFdfUFJDX1JYRF9ET09SQkVMTF9ORVdfUVdfQ05UKG5ld19jb3VudCksCisJCQkJJnJpbmctPnZwX3JlZy0+cHJjX3J4ZF9kb29yYmVsbCk7CisJCQl2YWw2NCA9CisJCQkgIHJlYWRsKCZyaW5nLT5jb21tb25fcmVnLT50aXRhbl9nZW5lcmFsX2ludF9zdGF0dXMpOworCQkJcmluZy0+ZG9vcmJlbGxfY250ID0gMDsKKwkJfQorCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogdnhnZV9od192cGF0aF9wb2xsX3R4IC0gUG9sbCBUeCBmb3IgY29tcGxldGVkIGRlc2NyaXB0b3JzIGFuZCBwcm9jZXNzCisgKiB0aGUgc2FtZS4KKyAqIEBmaWZvOiBIYW5kbGUgdG8gdGhlIGZpZm8gb2JqZWN0IHVzZWQgZm9yIG5vbiBvZmZsb2FkIHNlbmQKKyAqCisgKiBUaGUgZnVuY3Rpb24JcG9sbHMgdGhlIFR4IGZvciB0aGUgY29tcGxldGVkCWRlc2NyaXB0b3JzIGFuZAljYWxscworICogdGhlIGRyaXZlciB2aWEgc3VwcGxpZWQgY29tcGxldGlvbiBjYWxsYmFjay4KKyAqCisgKiBSZXR1cm5zOiBWWEdFX0hXX09LLCBpZiB0aGUgcG9sbGluZyBpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bC4KKyAqIFZYR0VfSFdfQ09NUExFVElPTlNfUkVNQUlOOiBUaGVyZSBhcmUgc3RpbGwgbW9yZSBjb21wbGV0ZWQKKyAqIGRlc2NyaXB0b3JzIGF2YWlsYWJsZSB3aGljaCBhcmUgeWV0IHRvIGJlIHByb2Nlc3NlZC4KKyAqCisgKiBTZWUgYWxzbzogdnhnZV9od192cGF0aF9wb2xsX3R4KCkuCisgKi8KK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9wb2xsX3R4KHN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmbywKKwkJCQkJdm9pZCAqKnNrYl9wdHIpCit7CisJZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgdF9jb2RlOworCXZvaWQgKmZpcnN0X3R4ZGxoOworCWVudW0gdnhnZV9od19zdGF0dXMgc3RhdHVzID0gVlhHRV9IV19PSzsKKwlzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWw7CisKKwljaGFubmVsID0gJmZpZm8tPmNoYW5uZWw7CisKKwlzdGF0dXMgPSB2eGdlX2h3X2ZpZm9fdHhkbF9uZXh0X2NvbXBsZXRlZChmaWZvLAorCQkJCSZmaXJzdF90eGRsaCwgJnRfY29kZSk7CisJaWYgKHN0YXR1cyA9PSBWWEdFX0hXX09LKQorCQlpZiAoZmlmby0+Y2FsbGJhY2soZmlmbywgZmlyc3RfdHhkbGgsCisJCQl0X2NvZGUsIGNoYW5uZWwtPnVzZXJkYXRhLCBza2JfcHRyKSAhPSBWWEdFX0hXX09LKQorCQkJc3RhdHVzID0gVlhHRV9IV19DT01QTEVUSU9OU19SRU1BSU47CisKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLXRyYWZmaWMuaCBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU2N2ExMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS10cmFmZmljLmgKQEAgLTAsMCArMSwyNDA5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAorICogcmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAgVGhpcyBmaWxlIGlzIG5vdAorICogYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKKyAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogdnhnZS10cmFmZmljLmg6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiAgICAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFZYR0VfVFJBRkZJQ19ICisjZGVmaW5lIFZYR0VfVFJBRkZJQ19ICisKKyNpbmNsdWRlICJ2eGdlLXJlZy5oIgorI2luY2x1ZGUgInZ4Z2UtdmVyc2lvbi5oIgorCisjZGVmaW5lIFZYR0VfSFdfRFRSX01BWF9UX0NPREUJCTE2CisjZGVmaW5lIFZYR0VfSFdfQUxMX0ZPWEVTCQkweEZGRkZGRkZGRkZGRkZGRkZVTEwKKyNkZWZpbmUgVlhHRV9IV19JTlRSX01BU0tfQUxMCQkweEZGRkZGRkZGRkZGRkZGRkZVTEwKKyNkZWZpbmUJVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIUwkxNworCisjZGVmaW5lIFZYR0VfSFdfTUFDX01BWF9NQUNfUE9SVF9JRAkyCisKKyNkZWZpbmUgVlhHRV9IV19ERUZBVUxUXzMyCQkweGZmZmZmZmZmCisvKiBmcmFtZXMgc2l6ZXMgKi8KKyNkZWZpbmUgVlhHRV9IV19IRUFERVJfODAyXzJfU0laRQkzCisjZGVmaW5lIFZYR0VfSFdfSEVBREVSX1NOQVBfU0laRQk1CisjZGVmaW5lIFZYR0VfSFdfSEVBREVSX1ZMQU5fU0laRQk0CisjZGVmaW5lIFZYR0VfSFdfTUFDX0hFQURFUl9NQVhfU0laRSBcCisJCQkoRVRIX0hMRU4gKyBcCisJCQlWWEdFX0hXX0hFQURFUl84MDJfMl9TSVpFICsgXAorCQkJVlhHRV9IV19IRUFERVJfVkxBTl9TSVpFICsgXAorCQkJVlhHRV9IV19IRUFERVJfU05BUF9TSVpFKQorCisjZGVmaW5lIFZYR0VfSFdfVENQSVBfSEVBREVSX01BWF9TSVpFCSg2NCArIDY0KQorCisvKiAzMmJpdCBhbGlnbm1lbnRzICovCisjZGVmaW5lIFZYR0VfSFdfSEVBREVSX0VUSEVSTkVUX0lJXzgwMl8zX0FMSUdOCQkyCisjZGVmaW5lIFZYR0VfSFdfSEVBREVSXzgwMl8yX1NOQVBfQUxJR04JCQkyCisjZGVmaW5lIFZYR0VfSFdfSEVBREVSXzgwMl8yX0FMSUdOCQkJMworI2RlZmluZSBWWEdFX0hXX0hFQURFUl9TTkFQX0FMSUdOCQkJMQorCisjZGVmaW5lIFZYR0VfSFdfTDNfQ0tTVU1fT0sJCQkJMHhGRkZGCisjZGVmaW5lIFZYR0VfSFdfTDRfQ0tTVU1fT0sJCQkJMHhGRkZGCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdHJ1Y3QgX192eGdlX2h3X2RldmljZTsKK3N0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlOworc3RydWN0IHZ4Z2VfaHdfdnBfY29uZmlnOworc3RydWN0IF9fdnhnZV9od192aXJ0dWFscGF0aDsKK3N0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbDsKK3N0cnVjdCBfX3Z4Z2VfaHdfZmlmbzsKK3N0cnVjdCBfX3Z4Z2VfaHdfcmluZzsKK3N0cnVjdCB2eGdlX2h3X3JpbmdfYXR0cjsKK3N0cnVjdCB2eGdlX2h3X21lbXBvb2w7CisKKyNpZm5kZWYgVFJVRQorI2RlZmluZSBUUlVFIDEKKyNlbmRpZgorCisjaWZuZGVmIEZBTFNFCisjZGVmaW5lIEZBTFNFIDAKKyNlbmRpZgorCisvKlZYR0VfSFdfU1RBVFVTX0gqLworCisjZGVmaW5lIFZYR0VfSFdfRVZFTlRfQkFTRQkJCTAKKyNkZWZpbmUgVlhHRV9MTF9FVkVOVF9CQVNFCQkJMTAwCisKKy8qKgorICogZW51bSB2eGdlX2h3X2V2ZW50LSBFbnVtZXJhdGVzIHNsb3ctcGF0aCBIVyBldmVudHMuCisgKiBAVlhHRV9IV19FVkVOVF9VTktOT1dOOiBVbmtub3duIChhbmQgaW52YWxpZCkgZXZlbnQuCisgKiBAVlhHRV9IV19FVkVOVF9TRVJSOiBTZXJpb3VzIHZwYXRoIGhhcmR3YXJlIGVycm9yIGV2ZW50LgorICogQFZYR0VfSFdfRVZFTlRfRUNDRVJSOiB2cGF0aCBFQ0MgZXJyb3IgZXZlbnQuCisgKiBAVlhHRV9IV19FVkVOVF9WUEFUSF9FUlI6IEVycm9yIGxvY2FsIHRvIHRoZSByZXNwZWN0aXZlIHZwYXRoCisgKiBAVlhHRV9IV19FVkVOVF9GSUZPX0VSUjogRklGTyBEb29yYmVsbCBmaWZvIGVycm9yLgorICogQFZYR0VfSFdfRVZFTlRfU1JQQ0lNX1NFUlI6IHNycGNpbSBoYXJkd2FyZSBlcnJvciBldmVudC4KKyAqIEBWWEdFX0hXX0VWRU5UX01SUENJTV9TRVJSOiBtcnBjaW0gaGFyZHdhcmUgZXJyb3IgZXZlbnQuCisgKiBAVlhHRV9IV19FVkVOVF9NUlBDSU1fRUNDRVJSOiBtcnBjaW0gZWNjIGVycm9yIGV2ZW50LgorICogQFZYR0VfSFdfRVZFTlRfUkVTRVRfU1RBUlQ6IFByaXZpbGVnZWQgZW50aXR5IGlzIHN0YXJ0aW5nIGRldmljZSByZXNldAorICogQFZYR0VfSFdfRVZFTlRfUkVTRVRfQ09NUExFVEU6IERldmljZSByZXNldCBoYXMgYmVlbiBjb21wbGV0ZWQKKyAqIEBWWEdFX0hXX0VWRU5UX1NMT1RfRlJFRVpFOiBTbG90LWZyZWV6ZSBldmVudC4gRHJpdmVyIHRyaWVzIHRvIGRpc3Rpbmd1aXNoCisgKiBzbG90LWZyZWV6ZSBmcm9tIHRoZSByZXN0IGNyaXRpY2FsIGV2ZW50cyAoZS5nLiBFQ0MpIHdoZW4gaXQgaXMKKyAqIGltcG9zc2libGUgdG8gUElPIHJlYWQgInRocm91Z2giIHRoZSBidXMsIGkuZS4gd2hlbiBnZXR0aW5nIGFsbC1mb3hlcy4KKyAqCisgKiBlbnVtIHZ4Z2VfaHdfZXZlbnQgZW51bWVyYXRlcyBzbG93LXBhdGggSFcgZXZlbnRpcy4KKyAqCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdWxkX2Nic3t9LCB2eGdlX3VsZF9saW5rX3VwX2Z7fSwKKyAqIHZ4Z2VfdWxkX2xpbmtfZG93bl9me30uCisgKi8KK2VudW0gdnhnZV9od19ldmVudCB7CisJVlhHRV9IV19FVkVOVF9VTktOT1dOCQk9IDAsCisJLyogSFcgZXZlbnRzICovCisJVlhHRV9IV19FVkVOVF9SRVNFVF9TVEFSVAk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDEsCisJVlhHRV9IV19FVkVOVF9SRVNFVF9DT01QTEVURQk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDIsCisJVlhHRV9IV19FVkVOVF9MSU5LX0RPV04JCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgMywKKwlWWEdFX0hXX0VWRU5UX0xJTktfVVAJCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgNCwKKwlWWEdFX0hXX0VWRU5UX0FMQVJNX0NMRUFSRUQJPSBWWEdFX0hXX0VWRU5UX0JBU0UgKyA1LAorCVZYR0VfSFdfRVZFTlRfRUNDRVJSCQk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDYsCisJVlhHRV9IV19FVkVOVF9NUlBDSU1fRUNDRVJSCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgNywKKwlWWEdFX0hXX0VWRU5UX0ZJRk9fRVJSCQk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDgsCisJVlhHRV9IV19FVkVOVF9WUEFUSF9FUlIJCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgOSwKKwlWWEdFX0hXX0VWRU5UX0NSSVRJQ0FMX0VSUgk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDEwLAorCVZYR0VfSFdfRVZFTlRfU0VSUgkJPSBWWEdFX0hXX0VWRU5UX0JBU0UgKyAxMSwKKwlWWEdFX0hXX0VWRU5UX1NSUENJTV9TRVJSCT0gVlhHRV9IV19FVkVOVF9CQVNFICsgMTIsCisJVlhHRV9IV19FVkVOVF9NUlBDSU1fU0VSUgk9IFZYR0VfSFdfRVZFTlRfQkFTRSArIDEzLAorCVZYR0VfSFdfRVZFTlRfU0xPVF9GUkVFWkUJPSBWWEdFX0hXX0VWRU5UX0JBU0UgKyAxNCwKK307CisKKyNkZWZpbmUgVlhHRV9IV19TRVRfTEVWRUwoYSwgYikgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQorCisvKgorICogc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEgLSBSZXByZXNlbnRzIERNQSBvYmplY3RzIHBhc3NlZCB0byB0aGUKKwljYWxsZXIuCisgKi8KK3N0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hIHsKKwlkbWFfYWRkcl90CQkJYWRkcjsKKwlzdHJ1Y3QgcGNpX2RldiAqaGFuZGxlOworCXN0cnVjdCBwY2lfZGV2ICphY2NfaGFuZGxlOworfTsKKworLyoKKyAqIHZ4Z2VfaHdfbWVtcG9vbF9pdGVtX2YgIC0gTWVtcG9vbCBpdGVtIGFsbG9jL2ZyZWUgY2FsbGJhY2sKKyAqIEBtZW1wb29saDogTWVtb3J5IHBvb2wgaGFuZGxlLgorICogQG1lbWJsb2NrOiBBZGRyZXNzIG9mIG1lbW9yeSBibG9jaworICogQG1lbWJsb2NrX2luZGV4OiBJbmRleCBvZiBtZW1vcnkgYmxvY2sKKyAqIEBpdGVtOiBJdGVtIHRoYXQgZ2V0cyBhbGxvY2F0ZWQgb3IgZnJlZWQuCisgKiBAaW5kZXg6IEl0ZW0ncyBpbmRleCBpbiB0aGUgbWVtb3J5IHBvb2wuCisgKiBAaXNfbGFzdDogVHJ1ZSwgaWYgdGhpcyBpdGVtIGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcG9vbDsgZmFsc2UgLSBvdGhlcndpc2UuCisgKiB1c2VyZGF0YTogUGVyLXBvb2wgdXNlciBjb250ZXh0LgorICoKKyAqIE1lbW9yeSBwb29sIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGNhbGxiYWNrLgorICovCisKKy8qCisgKiBzdHJ1Y3QgdnhnZV9od19tZW1wb29sIC0gTWVtb3J5IHBvb2wuCisgKi8KK3N0cnVjdCB2eGdlX2h3X21lbXBvb2wgeworCisJdm9pZCAoKml0ZW1fZnVuY19hbGxvYykoCisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbGgsCisJdTMyCQkJbWVtYmxvY2tfaW5kZXgsCisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9kbWEJKmRtYV9vYmplY3QsCisJdTMyCQkJaW5kZXgsCisJdTMyCQkJaXNfbGFzdCk7CisKKwl2b2lkCQkqdXNlcmRhdGE7CisJdm9pZAkJKiptZW1ibG9ja3NfYXJyOworCXZvaWQJCSoqbWVtYmxvY2tzX3ByaXZfYXJyOworCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hCSptZW1ibG9ja3NfZG1hX2FycjsKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aDsKKwl1MzIJCQltZW1ibG9ja19zaXplOworCXUzMgkJCW1lbWJsb2Nrc19tYXg7CisJdTMyCQkJbWVtYmxvY2tzX2FsbG9jYXRlZDsKKwl1MzIJCQlpdGVtX3NpemU7CisJdTMyCQkJaXRlbXNfbWF4OworCXUzMgkJCWl0ZW1zX2luaXRpYWw7CisJdTMyCQkJaXRlbXNfY3VycmVudDsKKwl1MzIJCQlpdGVtc19wZXJfbWVtYmxvY2s7CisJdm9pZAkJKippdGVtc19hcnI7CisJdTMyCQkJaXRlbXNfcHJpdl9zaXplOworfTsKKworI2RlZmluZQlWWEdFX0hXX01BWF9JTlRSX1BFUl9WUAkJCQk0CisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfSU5UUl9UWAkJCQkwCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfSU5UUl9SWAkJCQkxCisjZGVmaW5lCVZYR0VfSFdfVlBBVEhfSU5UUl9FSU5UQQkJCTIKKyNkZWZpbmUJVlhHRV9IV19WUEFUSF9JTlRSX0JNQVAJCQkJMworCisjZGVmaW5lIFZYR0VfSFdfQkxPQ0tfU0laRQkJCQk0MDk2CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdGltX2ludHJfY29uZmlnIC0gVGl0YW4gVGltIGludGVycnVwdCBjb25maWd1cmF0aW9uLgorICogQGludHJfZW5hYmxlOiBTZXQgdG8gMSwgaWYgaW50ZXJydXB0IGlzIGVuYWJsZWQuCisgKiBAYnRpbWVyX3ZhbDogQm91bmRhcnkgVGltZXIgSW5pdGlhbGl6YXRpb24gdmFsdWUgaW4gdW5pdHMgb2YgMjcyIG5zLgorICogQHRpbWVyX2FjX2VuOiBUaW1lciBBdXRvbWF0aWMgQ2FuY2VsLiAxIDogQXV0b21hdGljIENhbmNlbGluZyBFbmFibGU6IHdoZW4KKyAqICAgICAgICAgICAgIGFzc2VydGVkLCBvdGhlciBpbnRlcnJ1cHQtZ2VuZXJhdGluZyBlbnRpdGllcyB3aWxsIGNhbmNlbCB0aGUKKyAqICAgICAgICAgICAgIHNjaGVkdWxlZCB0aW1lciBpbnRlcnJ1cHQuCisgKiBAdGltZXJfY2lfZW46IFRpbWVyIENvbnRpbnVvdXMgSW50ZXJydXB0LiAxIDogQ29udGludW91cyBJbnRlcnJ1cHRpbmcgRW5hYmxlOgorICogICAgICAgICAgICAgV2hlbiBhc3NlcnRlZCwgYW4gaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkIGV2ZXJ5IHRpbWUgdGhlCisgKiAgICAgICAgICAgICBib3VuZGFyeSB0aW1lciBleHBpcmVzLCBldmVuIGlmIG5vIHRyYWZmaWMgaGFzIGJlZW4gdHJhbnNtaXR0ZWQKKyAqICAgICAgICAgICAgIG9uIHRoaXMgaW50ZXJydXB0LgorICogQHRpbWVyX3JpX2VuOiBUaW1lciBDb25zZWN1dGl2ZSAoUmUtKSBJbnRlcnJ1cHQgMSA6IENvbnNlY3V0aXZlCisgKiAgICAgICAgICAgICAoUmUtKSBJbnRlcnJ1cHQgRW5hYmxlOiBXaGVuIGFzc2VydGVkLCBhbiBpbnRlcnJ1cHQgd2lsbCBiZQorICogICAgICAgICAgICAgZ2VuZXJhdGVkIHRoZSBuZXh0IHRpbWUgdGhlIHRpbWVyIGV4cGlyZXMsIGV2ZW4gaWYgbm8gdHJhZmZpYyBoYXMKKyAqICAgICAgICAgICAgIGJlZW4gdHJhbnNtaXR0ZWQgb24gdGhpcyBpbnRlcnJ1cHQuIChUaGlzIHdpbGwgb25seSBoYXBwZW4gb25jZQorICogICAgICAgICAgICAgZWFjaCB0aW1lIHRoYXQgdGhpcyB2YWx1ZSBpcyB3cml0dGVuIHRvIHRoZSBUSU0uKSBUaGlzIGJpdCBpcworICogICAgICAgICAgICAgY2xlYXJlZCBieSBIL1cgYXQgdGhlIGVuZCBvZiB0aGUgY3VycmVudC10aW1lci1pbnRlcnZhbCB3aGVuCisgKiAgICAgICAgICAgICB0aGUgaW50ZXJydXB0IGlzIHRyaWdnZXJlZC4KKyAqIEBydGltZXJfdmFsOiBSZXN0cmljdGlvbiBUaW1lciBJbml0aWFsaXphdGlvbiB2YWx1ZSBpbiB1bml0cyBvZiAyNzIgbnMuCisgKiBAdXRpbF9zZWw6IFV0aWxpemF0aW9uIFNlbGVjdG9yLiBTZWxlY3RzIHdoaWNoIG9mIHRoZSB3b3JrbG9hZCBhcHByb3hpbWF0aW9ucworICogICAgICAgICAgICAgdG8gdXNlIChlLmcuIGxlZ2FjeSBUeCB1dGlsaXphdGlvbiwgVHgvUnggdXRpbGl6YXRpb24sIGhvc3QKKyAqICAgICAgICAgICAgIHNwZWNpZmllZCB1dGlsaXphdGlvbiBldGMuKSwgc2VsZWN0cyBvbmUgb2YKKyAqICAgICAgICAgICAgIHRoZSAxNyBob3N0IGNvbmZpZ3VyZWQgdmFsdWVzLgorICogICAgICAgICAgICAgMC1WaXJ0dWFsIFBhdGggMAorICogICAgICAgICAgICAgMS1WaXJ0dWFsIFBhdGggMQorICogICAgICAgICAgICAgLi4uCisgKiAgICAgICAgICAgICAxNi1WaXJ0dWFsIFBhdGggMTcKKyAqICAgICAgICAgICAgIDE3LUxlZ2FjeSBUeCBuZXR3b3JrIHV0aWxpemF0aW9uLCBwcm92aWRlZCBieSBUUEEKKyAqICAgICAgICAgICAgIDE4LUxlZ2FjeSBSeCBuZXR3b3JrIHV0aWxpemF0aW9uLCBwcm92aWRlZCBieSBGQVUKKyAqICAgICAgICAgICAgIDE5LUF2ZXJhZ2Ugb2YgbGVnYWN5IFJ4IGFuZCBUeCB1dGlsaXphdGlvbiBjYWxjdWxhdGVkIGZyb20gbGluaworICogICAgICAgICAgICAgICAgdXRpbGl6YXRpb24gdmFsdWVzLgorICogICAgICAgICAgICAgMjAtMzEtSW52YWxpZCBjb25maWd1cmF0aW9ucworICogICAgICAgICAgICAgMzItSG9zdCB1dGlsaXphdGlvbiBmb3IgVmlydHVhbCBQYXRoIDAKKyAqICAgICAgICAgICAgIDMzLUhvc3QgdXRpbGl6YXRpb24gZm9yIFZpcnR1YWwgUGF0aCAxCisgKiAgICAgICAgICAgICAuLi4KKyAqICAgICAgICAgICAgIDQ4LUhvc3QgdXRpbGl6YXRpb24gZm9yIFZpcnR1YWwgUGF0aCAxNworICogICAgICAgICAgICAgNDktTGVnYWN5IFR4IG5ldHdvcmsgdXRpbGl6YXRpb24sIHByb3ZpZGVkIGJ5IFRQQQorICogICAgICAgICAgICAgNTAtTGVnYWN5IFJ4IG5ldHdvcmsgdXRpbGl6YXRpb24sIHByb3ZpZGVkIGJ5IEZBVQorICogICAgICAgICAgICAgNTEtQXZlcmFnZSBvZiBsZWdhY3kgUnggYW5kIFR4IHV0aWxpemF0aW9uIGNhbGN1bGF0ZWQgZnJvbQorICogICAgICAgICAgICAgICAgbGluayB1dGlsaXphdGlvbiB2YWx1ZXMuCisgKiAgICAgICAgICAgICA1Mi02My1JbnZhbGlkIGNvbmZpZ3VyYXRpb25zCisgKiBAbHRpbWVyX3ZhbDogTGF0ZW5jeSBUaW1lciBJbml0aWFsaXphdGlvbiBWYWx1ZSBpbiB1bml0cyBvZiAyNzIgbnMuCisgKiBAdHhkX2NudF9lbjogVHhEIFJldHVybiBFdmVudCBDb3VudCBFbmFibGUuIFRoaXMgY29uZmlndXJhdGlvbiBiaXQgd2hlbiBzZXQKKyAqICAgICAgICAgICAgIHRvIDEgZW5hYmxlcyBjb3VudGluZyBvZiBUeEQwIHJldHVybnMgKHNpZ25hbGxlZCBieSBQQ0MncyksCisgKiAgICAgICAgICAgICB0b3dhcmRzIHV0aWxpemF0aW9uIGV2ZW50IGNvdW50IHZhbHVlcy4KKyAqIEB1cmFuZ2VfYTogRGVmaW5lcyB0aGUgdXBwZXIgbGltaXQgKGluIHBlcmNlbnQpIGZvciB0aGlzIHV0aWxpemF0aW9uIHJhbmdlCisgKiAgICAgICAgICAgICB0byBiZSBhY3RpdmUuIFRoaXMgcmFuZ2UgaXMgY29uc2lkZXJlZCBhY3RpdmUKKyAqICAgICAgICAgICAgIGlmIDAgPSBVVElMID0gVVJOR19BCisgKiAgICAgICAgICAgICBhbmQgdGhlIFVFQ19BIGZpZWxkIChiZWxvdykgaXMgbm9uLXplcm8uCisgKiBAdWVjX2E6IFV0aWxpemF0aW9uIEV2ZW50IENvdW50IEEuIElmIHRoaXMgcmFuZ2UgaXMgYWN0aXZlLCB0aGUgYWRhcHRlciB3aWxsCisgKiAgICAgICAgICAgICB3YWl0IHVudGlsIFVFQ19BIGV2ZW50cyBoYXZlIG9jY3VycmVkIG9uIHRoZSBpbnRlcnJ1cHQgYmVmb3JlCisgKiAgICAgICAgICAgICBnZW5lcmF0aW5nIGFuIGludGVycnVwdC4KKyAqIEB1cmFuZ2VfYjogTGluayB1dGlsaXphdGlvbiByYW5nZSBCLgorICogQHVlY19iOiBVdGlsaXphdGlvbiBFdmVudCBDb3VudCBCLgorICogQHVyYW5nZV9jOiBMaW5rIHV0aWxpemF0aW9uIHJhbmdlIEMuCisgKiBAdWVjX2M6IFV0aWxpemF0aW9uIEV2ZW50IENvdW50IEMuCisgKiBAdXJhbmdlX2Q6IExpbmsgdXRpbGl6YXRpb24gcmFuZ2UgRC4KKyAqIEB1ZWNfZDogVXRpbGl6YXRpb24gRXZlbnQgQ291bnQgRC4KKyAqIFRyYWZmaWMgSW50ZXJydXB0IENvbnRyb2xsZXIgTW9kdWxlIGludGVycnVwdCBjb25maWd1cmF0aW9uLgorICovCitzdHJ1Y3QgdnhnZV9od190aW1faW50cl9jb25maWcgeworCisJdTMyCQkJCWludHJfZW5hYmxlOworI2RlZmluZSBWWEdFX0hXX1RJTV9JTlRSX0VOQUJMRQkJCQkxCisjZGVmaW5lIFZYR0VfSFdfVElNX0lOVFJfRElTQUJMRQkJCQkwCisjZGVmaW5lIFZYR0VfSFdfVElNX0lOVFJfREVGQVVMVAkJCQkwCisKKwl1MzIJCQkJYnRpbWVyX3ZhbDsKKyNkZWZpbmUgVlhHRV9IV19NSU5fVElNX0JUSU1FUl9WQUwJCQkJMAorI2RlZmluZSBWWEdFX0hXX01BWF9USU1fQlRJTUVSX1ZBTAkJCQk2NzEwODg2NAorI2RlZmluZSBWWEdFX0hXX1VTRV9GTEFTSF9ERUZBVUxUCQkJCTB4ZmZmZmZmZmYKKworCXUzMgkJCQl0aW1lcl9hY19lbjsKKyNkZWZpbmUgVlhHRV9IV19USU1fVElNRVJfQUNfRU5BQkxFCQkJCTEKKyNkZWZpbmUgVlhHRV9IV19USU1fVElNRVJfQUNfRElTQUJMRQkJCQkwCisKKwl1MzIJCQkJdGltZXJfY2lfZW47CisjZGVmaW5lIFZYR0VfSFdfVElNX1RJTUVSX0NJX0VOQUJMRQkJCQkxCisjZGVmaW5lIFZYR0VfSFdfVElNX1RJTUVSX0NJX0RJU0FCTEUJCQkJMAorCisJdTMyCQkJCXRpbWVyX3JpX2VuOworI2RlZmluZSBWWEdFX0hXX1RJTV9USU1FUl9SSV9FTkFCTEUJCQkJMQorI2RlZmluZSBWWEdFX0hXX1RJTV9USU1FUl9SSV9ESVNBQkxFCQkJCTAKKworCXUzMgkJCQlydGltZXJfdmFsOworI2RlZmluZSBWWEdFX0hXX01JTl9USU1fUlRJTUVSX1ZBTAkJCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX1RJTV9SVElNRVJfVkFMCQkJCTY3MTA4ODY0CisKKwl1MzIJCQkJdXRpbF9zZWw7CisjZGVmaW5lIFZYR0VfSFdfVElNX1VUSUxfU0VMX0xFR0FDWV9UWF9ORVRfVVRJTAkJMTcKKyNkZWZpbmUgVlhHRV9IV19USU1fVVRJTF9TRUxfTEVHQUNZX1JYX05FVF9VVElMCQkxOAorI2RlZmluZSBWWEdFX0hXX1RJTV9VVElMX1NFTF9MRUdBQ1lfVFhfUlhfQVZFX05FVF9VVElMCQkxOQorI2RlZmluZSBWWEdFX0hXX1RJTV9VVElMX1NFTF9QRVJfVlBBVEgJCQkJNjMKKworCXUzMgkJCQlsdGltZXJfdmFsOworI2RlZmluZSBWWEdFX0hXX01JTl9USU1fTFRJTUVSX1ZBTAkJCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX1RJTV9MVElNRVJfVkFMCQkJCTY3MTA4ODY0CisKKwkvKiBMaW5lIHV0aWxpemF0aW9uIGludGVycnVwdHMgKi8KKwl1MzIJCQkJdXJhbmdlX2E7CisjZGVmaW5lIFZYR0VfSFdfTUlOX1RJTV9VUkFOR0VfQQkJCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX1RJTV9VUkFOR0VfQQkJCQkxMDAKKworCXUzMgkJCQl1ZWNfYTsKKyNkZWZpbmUgVlhHRV9IV19NSU5fVElNX1VFQ19BCQkJCQkwCisjZGVmaW5lIFZYR0VfSFdfTUFYX1RJTV9VRUNfQQkJCQkJNjU1MzUKKworCXUzMgkJCQl1cmFuZ2VfYjsKKyNkZWZpbmUgVlhHRV9IV19NSU5fVElNX1VSQU5HRV9CCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19NQVhfVElNX1VSQU5HRV9CCQkJCTEwMAorCisJdTMyCQkJCXVlY19iOworI2RlZmluZSBWWEdFX0hXX01JTl9USU1fVUVDX0IJCQkJCTAKKyNkZWZpbmUgVlhHRV9IV19NQVhfVElNX1VFQ19CCQkJCQk2NTUzNQorCisJdTMyCQkJCXVyYW5nZV9jOworI2RlZmluZSBWWEdFX0hXX01JTl9USU1fVVJBTkdFX0MJCQkJMAorI2RlZmluZSBWWEdFX0hXX01BWF9USU1fVVJBTkdFX0MJCQkJMTAwCisKKwl1MzIJCQkJdWVjX2M7CisjZGVmaW5lIFZYR0VfSFdfTUlOX1RJTV9VRUNfQwkJCQkJMAorI2RlZmluZSBWWEdFX0hXX01BWF9USU1fVUVDX0MJCQkJCTY1NTM1CisKKwl1MzIJCQkJdWVjX2Q7CisjZGVmaW5lIFZYR0VfSFdfTUlOX1RJTV9VRUNfRAkJCQkJMAorI2RlZmluZSBWWEdFX0hXX01BWF9USU1fVUVDX0QJCQkJCTY1NTM1Cit9OworCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfT1BfUkVBRAkJCQkJMAorI2RlZmluZQlWWEdFX0hXX1NUQVRTX09QX0NMRUFSX1NUQVQJCQkJMQorI2RlZmluZQlWWEdFX0hXX1NUQVRTX09QX0NMRUFSX0FMTF9WUEFUSF9TVEFUUwkJCTIKKyNkZWZpbmUJVlhHRV9IV19TVEFUU19PUF9DTEVBUl9BTExfU1RBVFNfT0ZfTE9DCQkJMgorI2RlZmluZQlWWEdFX0hXX1NUQVRTX09QX0NMRUFSX0FMTF9TVEFUUwkJCTMKKworI2RlZmluZQlWWEdFX0hXX1NUQVRTX0xPQ19BR0dSCQkJCQkxNworI2RlZmluZSBWWEdFX0hXX1NUQVRTX0FHR1JuX09GRlNFVAkJCQkweDAwNzIwCisKKyNkZWZpbmUgVlhHRV9IV19TVEFUU19WUEFUSF9UWF9PRkZTRVQJCQkJMHgwCisjZGVmaW5lIFZYR0VfSFdfU1RBVFNfVlBBVEhfUlhfT0ZGU0VUCQkJCTB4MDAwOTAKKworI2RlZmluZQlWWEdFX0hXX1NUQVRTX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTBfT0ZGU0VUCSAgICgweDAwMWQwID4+IDMpCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTAoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAwLCAzMikKKworI2RlZmluZQlWWEdFX0hXX1NUQVRTX0dFVF9WUEFUSF9QUk9HX0VWRU5UX1ZOVU0xKGJpdHMpIFwKKwkJCQkJCXZ4Z2VfYlZBTG4oYml0cywgMzIsIDMyKQorCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfVlBBVEhfUFJPR19FVkVOVF9WTlVNMl9PRkZTRVQJICAgKDB4MDAxZDggPj4gMykKKyNkZWZpbmUJVlhHRV9IV19TVEFUU19HRVRfVlBBVEhfUFJPR19FVkVOVF9WTlVNMihiaXRzKSBcCisJCQkJCQl2eGdlX2JWQUxuKGJpdHMsIDAsIDMyKQorCisjZGVmaW5lCVZYR0VfSFdfU1RBVFNfR0VUX1ZQQVRIX1BST0dfRVZFTlRfVk5VTTMoYml0cykgXAorCQkJCQkJdnhnZV9iVkFMbihiaXRzLCAzMiwgMzIpCisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfeG1hY19hZ2dyX3N0YXRzIC0gUGVyLUFnZ3JlZ2F0b3IgWE1BQyBTdGF0aXN0aWNzCisgKgorICogQHR4X2ZybXM6IENvdW50IG9mIGRhdGEgZnJhbWVzIHRyYW5zbWl0dGVkIG9uIHRoaXMgQWdncmVnYXRvciBvbiBhbGwKKyAqICAgICAgICAgICAgIGl0cyBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBMQUNQRFVzIG9yIE1hcmtlciBQRFVzLgorICogICAgICAgICAgICAgSG93ZXZlciwgZG9lcyBpbmNsdWRlIGZyYW1lcyBkaXNjYXJkZWQgYnkgdGhlIERpc3RyaWJ1dGlvbgorICogICAgICAgICAgICAgZnVuY3Rpb24uCisgKiBAdHhfZGF0YV9vY3RldHM6IENvdW50IG9mIGRhdGEgYW5kIHBhZGRpbmcgb2N0ZXRzIG9mIGZyYW1lcyB0cmFuc21pdHRlZAorICogICAgICAgICAgICAgb24gdGhpcyBBZ2dyZWdhdG9yIG9uIGFsbCBpdHMgQWdncmVnYXRpb24gcG9ydHMuIERvZXMgbm90IGluY2x1ZGUKKyAqICAgICAgICAgICAgIG9jdGV0cyBvZiBMQUNQRFVzIG9yIE1hcmtlciBQRFVzLiBIb3dldmVyLCBkb2VzIGluY2x1ZGUgb2N0ZXRzIG9mCisgKiAgICAgICAgICAgICBmcmFtZXMgZGlzY2FyZGVkIGJ5IHRoZSBEaXN0cmlidXRpb24gZnVuY3Rpb24uCisgKiBAdHhfbWNhc3RfZnJtczogQ291bnQgb2YgZGF0YSBmcmFtZXMgdHJhbnNtaXR0ZWQgKHRvIGEgZ3JvdXAgZGVzdGluYXRpb24KKyAqICAgICAgICAgICAgIGFkZHJlc3Mgb3RoZXIgdGhhbiB0aGUgYnJvYWRjYXN0IGFkZHJlc3MpIG9uIHRoaXMgQWdncmVnYXRvciBvbgorICogICAgICAgICAgICAgYWxsIGl0cyBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBMQUNQRFVzIG9yIE1hcmtlcgorICogICAgICAgICAgICAgUERVcy4gSG93ZXZlciwgZG9lcyBpbmNsdWRlIGZyYW1lcyBkaXNjYXJkZWQgYnkgdGhlIERpc3RyaWJ1dGlvbgorICogICAgICAgICAgICAgZnVuY3Rpb24uCisgKiBAdHhfYmNhc3RfZnJtczogQ291bnQgb2YgYnJvYWRjYXN0IGRhdGEgZnJhbWVzIHRyYW5zbWl0dGVkIG9uIHRoaXMgQWdncmVnYXRvcgorICogICAgICAgICAgICAgb24gYWxsIGl0cyBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBMQUNQRFVzIG9yIE1hcmtlcgorICogICAgICAgICAgICAgUERVcy4gSG93ZXZlciwgZG9lcyBpbmNsdWRlIGZyYW1lcyBkaXNjYXJkZWQgYnkgdGhlIERpc3RyaWJ1dGlvbgorICogICAgICAgICAgICAgZnVuY3Rpb24uCisgKiBAdHhfZGlzY2FyZGVkX2ZybXM6IENvdW50IG9mIGRhdGEgZnJhbWVzIHRvIGJlIHRyYW5zbWl0dGVkIG9uIHRoaXMgQWdncmVnYXRvcgorICogICAgICAgICAgICAgdGhhdCBhcmUgZGlzY2FyZGVkIGJ5IHRoZSBEaXN0cmlidXRpb24gZnVuY3Rpb24uIFRoaXMgb2NjdXJzIHdoZW4KKyAqICAgICAgICAgICAgIGNvbnZlcnNhdGlvbiBhcmUgYWxsb2NhdGVkIHRvIGRpZmZlcmVudCBwb3J0cyBhbmQgaGF2ZSB0byBiZQorICogICAgICAgICAgICAgZmx1c2hlZCBvbiBvbGQgcG9ydHMKKyAqIEB0eF9lcnJvcmVkX2ZybXM6IENvdW50IG9mIGRhdGEgZnJhbWVzIHRyYW5zbWl0dGVkIG9uIHRoaXMgQWdncmVnYXRvciB0aGF0CisgKiAgICAgICAgICAgICBleHBlcmllbmNlIHRyYW5zbWlzc2lvbiBlcnJvcnMgb24gaXRzIEFnZ3JlZ2F0aW9uIHBvcnRzLgorICogQHJ4X2ZybXM6IENvdW50IG9mIGRhdGEgZnJhbWVzIHJlY2VpdmVkIG9uIHRoaXMgQWdncmVnYXRvciBvbiBhbGwgaXRzCisgKiAgICAgICAgICAgICBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBMQUNQRFVzIG9yIE1hcmtlciBQRFVzLgorICogICAgICAgICAgICAgQWxzbywgZG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgZGlzY2FyZGVkIGJ5IHRoZSBDb2xsZWN0aW9uCisgKiAgICAgICAgICAgICBmdW5jdGlvbi4KKyAqIEByeF9kYXRhX29jdGV0czogQ291bnQgb2YgZGF0YSBhbmQgcGFkZGluZyBvY3RldHMgb2YgZnJhbWVzIHJlY2VpdmVkIG9uIHRoaXMKKyAqICAgICAgICAgICAgIEFnZ3JlZ2F0b3Igb24gYWxsIGl0cyBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBvY3RldHMKKyAqICAgICAgICAgICAgIG9mIExBQ1BEVXMgb3IgTWFya2VyIFBEVXMuIEFsc28sIGRvZXMgbm90IGluY2x1ZGUKKyAqICAgICAgICAgICAgIG9jdGV0cyBvZiBmcmFtZXMKKyAqICAgICAgICAgICAgIGRpc2NhcmRlZCBieSB0aGUgQ29sbGVjdGlvbiBmdW5jdGlvbi4KKyAqIEByeF9tY2FzdF9mcm1zOiBDb3VudCBvZiBkYXRhIGZyYW1lcyByZWNlaXZlZCAoZnJvbSBhIGdyb3VwIGRlc3RpbmF0aW9uCisgKiAgICAgICAgICAgICBhZGRyZXNzIG90aGVyIHRoYW4gdGhlIGJyb2FkY2FzdCBhZGRyZXNzKSBvbiB0aGlzIEFnZ3JlZ2F0b3Igb24KKyAqICAgICAgICAgICAgIGFsbCBpdHMgQWdncmVnYXRpb24gcG9ydHMuIERvZXMgbm90IGluY2x1ZGUgTEFDUERVcyBvciBNYXJrZXIKKyAqICAgICAgICAgICAgIFBEVXMuIEFsc28sIGRvZXMgbm90IGluY2x1ZGUgZnJhbWVzIGRpc2NhcmRlZCBieSB0aGUgQ29sbGVjdGlvbgorICogICAgICAgICAgICAgZnVuY3Rpb24uCisgKiBAcnhfYmNhc3RfZnJtczogQ291bnQgb2YgYnJvYWRjYXN0IGRhdGEgZnJhbWVzIHJlY2VpdmVkIG9uIHRoaXMgQWdncmVnYXRvciBvbgorICogICAgICAgICAgICAgYWxsIGl0cyBBZ2dyZWdhdGlvbiBwb3J0cy4gRG9lcyBub3QgaW5jbHVkZSBMQUNQRFVzIG9yIE1hcmtlcgorICogICAgICAgICAgICAgUERVcy4gQWxzbywgZG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgZGlzY2FyZGVkIGJ5IHRoZSBDb2xsZWN0aW9uCisgKiAgICAgICAgICAgICBmdW5jdGlvbi4KKyAqIEByeF9kaXNjYXJkZWRfZnJtczogQ291bnQgb2YgZGF0YSBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcyBBZ2dyZWdhdG9yIHRoYXQgYXJlCisgKiAgICAgICAgICAgICBkaXNjYXJkZWQgYnkgdGhlIENvbGxlY3Rpb24gZnVuY3Rpb24gYmVjYXVzZSB0aGUgQ29sbGVjdGlvbgorICogICAgICAgICAgICAgZnVuY3Rpb24gd2FzIGRpc2FibGVkIG9uIHRoZSBwb3J0IHdoaWNoIHRoZSBmcmFtZXMgYXJlIHJlY2VpdmVkLgorICogQHJ4X2Vycm9yZWRfZnJtczogQ291bnQgb2YgZGF0YSBmcmFtZXMgcmVjZWl2ZWQgb24gdGhpcyBBZ2dyZWdhdG9yIHRoYXQgYXJlCisgKiAgICAgICAgICAgICBkaXNjYXJkZWQgYnkgaXRzIEFnZ3JlZ2F0aW9uIHBvcnRzLCBvciBhcmUgZGlzY2FyZGVkIGJ5IHRoZQorICogICAgICAgICAgICAgQ29sbGVjdGlvbiBmdW5jdGlvbiBvZiB0aGUgQWdncmVnYXRvciwgb3IgdGhhdCBhcmUgZGlzY2FyZGVkIGJ5CisgKiAgICAgICAgICAgICB0aGUgQWdncmVnYXRvciBkdWUgdG8gZGV0ZWN0aW9uIG9mIGFuIGlsbGVnYWwgU2xvdyBQcm90b2NvbHMgUERVLgorICogQHJ4X3Vua25vd25fc2xvd19wcm90b19mcm1zOiBDb3VudCBvZiBkYXRhIGZyYW1lcyByZWNlaXZlZCBvbiB0aGlzIEFnZ3JlZ2F0b3IKKyAqICAgICAgICAgICAgIHRoYXQgYXJlIGRpc2NhcmRlZCBieSBpdHMgQWdncmVnYXRpb24gcG9ydHMgZHVlIHRvIGRldGVjdGlvbiBvZgorICogICAgICAgICAgICAgYW4gdW5rbm93biBTbG93IFByb3RvY29scyBQRFUuCisgKgorICogUGVyIGFnZ3JlZ2F0b3IgWE1BQyBSWCBzdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgdnhnZV9od194bWFjX2FnZ3Jfc3RhdHMgeworLyoweDAwMCovCQl1NjQJdHhfZnJtczsKKy8qMHgwMDgqLwkJdTY0CXR4X2RhdGFfb2N0ZXRzOworLyoweDAxMCovCQl1NjQJdHhfbWNhc3RfZnJtczsKKy8qMHgwMTgqLwkJdTY0CXR4X2JjYXN0X2ZybXM7CisvKjB4MDIwKi8JCXU2NAl0eF9kaXNjYXJkZWRfZnJtczsKKy8qMHgwMjgqLwkJdTY0CXR4X2Vycm9yZWRfZnJtczsKKy8qMHgwMzAqLwkJdTY0CXJ4X2ZybXM7CisvKjB4MDM4Ki8JCXU2NAlyeF9kYXRhX29jdGV0czsKKy8qMHgwNDAqLwkJdTY0CXJ4X21jYXN0X2ZybXM7CisvKjB4MDQ4Ki8JCXU2NAlyeF9iY2FzdF9mcm1zOworLyoweDA1MCovCQl1NjQJcnhfZGlzY2FyZGVkX2ZybXM7CisvKjB4MDU4Ki8JCXU2NAlyeF9lcnJvcmVkX2ZybXM7CisvKjB4MDYwKi8JCXU2NAlyeF91bmtub3duX3Nsb3dfcHJvdG9fZnJtczsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfeG1hY19wb3J0X3N0YXRzIC0gWE1BQyBQb3J0IFN0YXRpc3RpY3MKKyAqCisgKiBAdHhfdHRsX2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCBNQUMgZnJhbWVzCisgKiBAdHhfdHRsX29jdGV0czogQ291bnQgb2YgdG90YWwgb2N0ZXRzIG9mIHRyYW5zbWl0dGVkIGZyYW1lcywgbm90IGluY2x1ZGluZworICogICAgICAgICAgICBmcmFtaW5nIGNoYXJhY3RlcnMgKGkuZS4gbGVzcyBmcmFtaW5nIGJpdHMpLiBUbyBkZXRlcm1pbmUgdGhlCisgKiAgICAgICAgICAgIHRvdGFsIG9jdGV0cyBvZiB0cmFuc21pdHRlZCBmcmFtZXMsIGluY2x1ZGluZyBmcmFtaW5nIGNoYXJhY3RlcnMsCisgKiAgICAgICAgICAgIG11bHRpcGx5IFBPUlRuX1RYX1RUTF9GUk1TIGJ5IDggYW5kIGFkZCBpdCB0byB0aGlzIHN0YXQgKHVubGVzcworICogICAgICAgICAgICBvdGhlcndpc2UgY29uZmlndXJlZCwgdGhpcyBzdGF0IG9ubHkgY291bnRzIGZyYW1lcyB0aGF0IGhhdmUKKyAqICAgICAgICAgICAgOCBieXRlcyBvZiBwcmVhbWJsZSBmb3IgZWFjaCBmcmFtZSkuIFRoaXMgc3RhdCBjYW4gYmUgY29uZmlndXJlZAorICogICAgICAgICAgICAoc2VlIFhNQUNfU1RBVFNfR0xPQkFMX0NGRy5UVExfRlJNU19IQU5ETElORykgdG8gY291bnQgZXZlcnl0aGluZworICogICAgICAgICAgICBpbmNsdWRpbmcgdGhlIHByZWFtYmxlIG9jdGV0cy4KKyAqIEB0eF9kYXRhX29jdGV0czogQ291bnQgb2YgZGF0YSBhbmQgcGFkZGluZyBvY3RldHMgb2Ygc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkCisgKiAgICAgICAgICAgIGZyYW1lcy4KKyAqIEB0eF9tY2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQgZnJhbWVzIHRvIGEgZ3JvdXAgYWRkcmVzcworICogICAgICAgICAgICBvdGhlciB0aGFuIHRoZSBicm9hZGNhc3QgYWRkcmVzcy4KKyAqIEB0eF9iY2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgdHJhbnNtaXR0ZWQgZnJhbWVzIHRvIHRoZSBicm9hZGNhc3QKKyAqICAgICAgICAgICAgZ3JvdXAgYWRkcmVzcy4KKyAqIEB0eF91Y2FzdF9mcm1zOiBDb3VudCBvZiB0cmFuc21pdHRlZCBmcmFtZXMgY29udGFpbmluZyBhIHVuaWNhc3QgYWRkcmVzcy4KKyAqICAgICAgICAgICAgSW5jbHVkZXMgZGlzY2FyZGVkIGZyYW1lcyB0aGF0IGFyZSBub3Qgc2VudCB0byB0aGUgbmV0d29yay4KKyAqIEB0eF90YWdnZWRfZnJtczogQ291bnQgb2YgdHJhbnNtaXR0ZWQgZnJhbWVzIGNvbnRhaW5pbmcgYSBWTEFOIHRhZy4KKyAqIEB0eF92bGRfaXA6IENvdW50IG9mIHRyYW5zbWl0dGVkIElQIGRhdGFncmFtcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIG5ldHdvcmsuCisgKiBAdHhfdmxkX2lwX29jdGV0czogQ291bnQgb2YgdG90YWwgb2N0ZXRzIG9mIHRyYW5zbWl0dGVkIElQIGRhdGFncmFtcyB0aGF0CisgKiAgICAgICAgICAgIGFyZSBwYXNzZWQgdG8gdGhlIG5ldHdvcmsuCisgKiBAdHhfaWNtcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgSUNNUCBtZXNzYWdlcy4gSW5jbHVkZXMgbWVzc2FnZXMgbm90IHNlbnQKKyAqICAgICAgICAgICAgZHVlIHRvIHByb2JsZW1zIHdpdGhpbiBJQ01QLgorICogQHR4X3RjcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgVENQIHNlZ21lbnRzLiBEb2VzIG5vdCBpbmNsdWRlIHNlZ21lbnRzCisgKiAgICAgICAgICAgIGNvbnRhaW5pbmcgcmV0cmFuc21pdHRlZCBvY3RldHMuCisgKiBAdHhfcnN0X3RjcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgVENQIHNlZ21lbnRzIGNvbnRhaW5pbmcgdGhlIFJTVCBmbGFnLgorICogQHR4X3VkcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgVURQIGRhdGFncmFtcy4KKyAqIEB0eF9wYXJzZV9lcnJvcjogSW5jcmVtZW50cyB3aGVuIHRoZSBUUEEgaXMgdW5hYmxlIHRvIHBhcnNlIGEgcGFja2V0LiBUaGlzCisgKiAgICAgICAgICAgIGdlbmVyYWxseSBvY2N1cnMgd2hlbiBhIHBhY2tldCBpcyBjb3JydXB0IHNvbWVob3csIGluY2x1ZGluZworICogICAgICAgICAgICBwYWNrZXRzIHRoYXQgaGF2ZSBJUCB2ZXJzaW9uIG1pc21hdGNoZXMsIGludmFsaWQgTGF5ZXIgMiBjb250cm9sCisgKiAgICAgICAgICAgIGZpZWxkcywgZXRjLiBMMy9MNCBjaGVja3N1bXMgYXJlIG5vdCBvZmZsb2FkZWQsIGJ1dCB0aGUgcGFja2V0CisgKiAgICAgICAgICAgIGlzIHN0aWxsIGJlIHRyYW5zbWl0dGVkLgorICogQHR4X3Vua25vd25fcHJvdG9jb2w6IEluY3JlbWVudHMgd2hlbiB0aGUgVFBBIGVuY291bnRlcnMgYW4gdW5rbm93bgorICogICAgICAgICAgICBwcm90b2NvbCwgc3VjaCBhcyBhIG5ldyBJUHY2IGV4dGVuc2lvbiBoZWFkZXIsIG9yIGFuIHVuc3VwcG9ydGVkCisgKiAgICAgICAgICAgIFJvdXRpbmcgVHlwZS4gVGhlIHBhY2tldCBzdGlsbCBoYXMgYSBjaGVja3N1bSBjYWxjdWxhdGVkIGJ1dCBpdAorICogICAgICAgICAgICBtYXkgYmUgaW5jb3JyZWN0LgorICogQHR4X3BhdXNlX2N0cmxfZnJtczogQ291bnQgb2YgTUFDIFBBVVNFIGNvbnRyb2wgZnJhbWVzIHRoYXQgYXJlIHRyYW5zbWl0dGVkLgorICogICAgICAgICAgICBTaW5jZSwgdGhlIG9ubHkgY29udHJvbCBmcmFtZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNlIGFyZQorICogICAgICAgICAgICBQQVVTRSBmcmFtZXMsIHRoaXMgcmVnaXN0ZXIgaXMgYSBjb3VudCBvZiBhbGwgdHJhbnNtaXR0ZWQgTUFDCisgKiAgICAgICAgICAgIGNvbnRyb2wgZnJhbWVzLgorICogQHR4X21hcmtlcl9wZHVfZnJtczogQ291bnQgb2YgTWFya2VyIFBEVXMgdHJhbnNtaXR0ZWQKKyAqIG9uIHRoaXMgQWdncmVnYXRpb24gcG9ydC4KKyAqIEB0eF9sYWNwZHVfZnJtczogQ291bnQgb2YgTEFDUERVcyB0cmFuc21pdHRlZCBvbiB0aGlzIEFnZ3JlZ2F0aW9uIHBvcnQuCisgKiBAdHhfZHJvcF9pcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgSVAgZGF0YWdyYW1zIHRoYXQgY291bGQgbm90IGJlIHBhc3NlZCB0bworICogICAgICAgICAgICB0aGUgbmV0d29yay4gSW5jcmVtZW50cyBiZWNhdXNlIG9mOgorICogICAgICAgICAgICAxKSBBbiBpbnRlcm5hbCBwcm9jZXNzaW5nIGVycm9yCisgKiAgICAgICAgICAgIChzdWNoIGFzIGFuIHVuY29ycmVjdGFibGUgRUNDIGVycm9yKS4gMikgQSBmcmFtZSBwYXJzaW5nIGVycm9yCisgKiAgICAgICAgICAgIGR1cmluZyBJUCBjaGVja3N1bSBjYWxjdWxhdGlvbi4KKyAqIEB0eF9tYXJrZXJfcmVzcF9wZHVfZnJtczogQ291bnQgb2YgTWFya2VyIFJlc3BvbnNlIFBEVXMgdHJhbnNtaXR0ZWQgb24gdGhpcworICogICAgICAgICAgICBBZ2dyZWdhdGlvbiBwb3J0LgorICogQHR4X3hnbWlpX2NoYXIyX21hdGNoOiBNYWludGFpbnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIFhHTUlJCisgKiAgICAgICAgICAgIGNoYXJhY3RlcnMgdGhhdCBtYXRjaCBhIHBhdHRlcm4gdGhhdCBpcyBwcm9ncmFtbWFibGUgdGhyb3VnaAorICogICAgICAgICAgICByZWdpc3RlciBYTUFDX1NUQVRTX1RYX1hHTUlJX0NIQVJfUE9SVG4uIEJ5IGRlZmF1bHQsIHRoZSBwYXR0ZXJuCisgKiAgICAgICAgICAgIGlzIHNldCB0byAvVC8gKGkuZS4gdGhlIHRlcm1pbmF0ZSBjaGFyYWN0ZXIpLCB0aHVzIHRoZSBzdGF0aXN0aWMKKyAqICAgICAgICAgICAgdHJhY2tzIHRoZSBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgVGVybWluYXRlIGNoYXJhY3RlcnMuCisgKiBAdHhfeGdtaWlfY2hhcjFfbWF0Y2g6IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgWEdNSUkKKyAqICAgICAgICAgICAgY2hhcmFjdGVycyB0aGF0IG1hdGNoIGEgcGF0dGVybiB0aGF0IGlzIHByb2dyYW1tYWJsZSB0aHJvdWdoCisgKiAgICAgICAgICAgIHJlZ2lzdGVyIFhNQUNfU1RBVFNfVFhfWEdNSUlfQ0hBUl9QT1JUbi4gQnkgZGVmYXVsdCwgdGhlIHBhdHRlcm4KKyAqICAgICAgICAgICAgaXMgc2V0IHRvIC9TLyAoaS5lLiB0aGUgc3RhcnQgY2hhcmFjdGVyKSwKKyAqICAgICAgICAgICAgdGh1cyB0aGUgc3RhdGlzdGljIHRyYWNrcworICogICAgICAgICAgICB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIFN0YXJ0IGNoYXJhY3RlcnMuCisgKiBAdHhfeGdtaWlfY29sdW1uMl9tYXRjaDogTWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBYR01JSQorICogICAgICAgICAgICBjb2x1bW5zIHRoYXQgbWF0Y2ggYSBwYXR0ZXJuIHRoYXQgaXMgcHJvZ3JhbW1hYmxlIHRocm91Z2ggcmVnaXN0ZXIKKyAqICAgICAgICAgICAgWE1BQ19TVEFUU19UWF9YR01JSV9DT0xVTU4yX1BPUlRuLiBCeSBkZWZhdWx0LCB0aGUgcGF0dGVybiBpcyBzZXQKKyAqICAgICAgICAgICAgdG8gNCB4IC9FLyAoaS5lLiBhIGNvbHVtbiBjb250YWluaW5nIGFsbCBlcnJvciBjaGFyYWN0ZXJzKSwgdGh1cworICogICAgICAgICAgICB0aGUgc3RhdGlzdGljIHRyYWNrcyB0aGUgbnVtYmVyIG9mIEVycm9yIGNvbHVtbnMgdHJhbnNtaXR0ZWQgYXQKKyAqICAgICAgICAgICAgYW55IHRpbWUuIElmIFhNQUNfU1RBVFNfVFhfWEdNSUlfQkVIQVZfQ09MVU1OMl9QT1JUbi5ORUFSX0NPTDEgaXMKKyAqICAgICAgICAgICAgc2V0IHRvIDEsIHRoZW4gdGhpcyBzdGF0IGluY3JlbWVudHMgd2hlbiBDT0xVTU4yIGlzIGZvdW5kIHdpdGhpbgorICogICAgICAgICAgICAnbicgY2xvY2tzIGFmdGVyIENPTFVNTjEuIEhlcmUsICduJyBpcyBkZWZpbmVkIGJ5CisgKiAgICAgICAgICAgIFhNQUNfU1RBVFNfVFhfWEdNSUlfQkVIQVZfQ09MVU1OMl9QT1JUbi5OVU1fQ09MIChpZiAnbicgaXMgc2V0CisgKiAgICAgICAgICAgIHRvIDAsIHRoZW4gaXQgbWVhbnMgdG8gc2VhcmNoIGFueXdoZXJlIGZvciBDT0xVTU4yKS4KKyAqIEB0eF94Z21paV9jb2x1bW4xX21hdGNoOiBNYWludGFpbnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIFhHTUlJCisgKiAgICAgICAgICAgIGNvbHVtbnMgdGhhdCBtYXRjaCBhIHBhdHRlcm4gdGhhdCBpcyBwcm9ncmFtbWFibGUgdGhyb3VnaCByZWdpc3RlcgorICogICAgICAgICAgICBYTUFDX1NUQVRTX1RYX1hHTUlJX0NPTFVNTjFfUE9SVG4uIEJ5IGRlZmF1bHQsIHRoZSBwYXR0ZXJuIGlzIHNldAorICogICAgICAgICAgICB0byA0IHggL0kvIChpLmUuIGEgY29sdW1uIGNvbnRhaW5pbmcgYWxsIGlkbGUgY2hhcmFjdGVycyksCisgKiAgICAgICAgICAgIHRodXMgdGhlIHN0YXRpc3RpYyB0cmFja3MgdGhlIG51bWJlciBvZiB0cmFuc21pdHRlZCBJZGxlIGNvbHVtbnMuCisgKiBAdHhfYW55X2Vycl9mcm1zOiBDb3VudCBvZiB0cmFuc21pdHRlZCBmcmFtZXMgY29udGFpbmluZyBhbnkgZXJyb3IgdGhhdAorICogICAgICAgICAgICBwcmV2ZW50cyB0aGVtIGZyb20gYmVpbmcgcGFzc2VkIHRvIHRoZSBuZXR3b3JrLiBJbmNyZW1lbnRzIGlmCisgKiAgICAgICAgICAgIHRoZXJlIGlzIGFuIEVDQyB3aGlsZSByZWFkaW5nIHRoZSBmcmFtZSBvdXQgb2YgdGhlIHRyYW5zbWl0CisgKiAgICAgICAgICAgIGJ1ZmZlci4gQWxzbyBpbmNyZW1lbnRzIGlmIHRoZSB0cmFuc21pdCBwcm90b2NvbCBhc3Npc3QgKFRQQSkKKyAqICAgICAgICAgICAgYmxvY2sgZGV0ZXJtaW5lcyB0aGF0IHRoZSBmcmFtZSBzaG91bGQgbm90IGJlIHNlbnQuCisgKiBAdHhfZHJvcF9mcm1zOiBDb3VudCBvZiBmcmFtZXMgdGhhdCBjb3VsZCBub3QgYmUgc2VudCBmb3Igbm8gb3RoZXIgcmVhc29uCisgKiAgICAgICAgICAgIHRoYW4gaW50ZXJuYWwgTUFDIHByb2Nlc3NpbmcuIEluY3JlbWVudHMgb25jZSB3aGVuZXZlciB0aGUKKyAqICAgICAgICAgICAgdHJhbnNtaXQgYnVmZmVyIGlzIGZsdXNoZWQgKGR1ZSB0byBhbiBFQ0MgZXJyb3Igb24gYSBtZW1vcnkKKyAqICAgICAgICAgICAgZGVzY3JpcHRvcikuCisgKiBAcnhfdHRsX2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMsIGluY2x1ZGluZyBmcmFtZXMgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLiBUaGlzIHN0YXQgY2FuIGJlCisgKiAgICAgICAgICAgIGNvbmZpZ3VyZWQgKHNlZSBYTUFDX1NUQVRTX0dMT0JBTF9DRkcuVFRMX0ZSTVNfSEFORExJTkcpIHRvIGNvdW50CisgKiAgICAgICAgICAgIGV2ZXJ5dGhpbmcsIGV2ZW4gImZyYW1lcyIgYXMgc21hbGwgb25lIGJ5dGUgb2YgcHJlYW1ibGUuCisgKiBAcnhfdmxkX2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBNQUMgZnJhbWVzLiBEb2VzIG5vdCBpbmNsdWRlCisgKiAgICAgICAgICAgIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLCBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfb2ZmbG9hZF9mcm1zOiBDb3VudCBvZiBvZmZsb2FkZWQgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIHBhc3NlZCB0bworICogICAgICAgICAgICB0aGUgaG9zdC4KKyAqIEByeF90dGxfb2N0ZXRzOiBDb3VudCBvZiB0b3RhbCBvY3RldHMgb2YgcmVjZWl2ZWQgZnJhbWVzLCBub3QgaW5jbHVkaW5nCisgKiAgICAgICAgICAgIGZyYW1pbmcgY2hhcmFjdGVycyAoaS5lLiBsZXNzIGZyYW1pbmcgYml0cykuIFRvIGRldGVybWluZSB0aGUKKyAqICAgICAgICAgICAgdG90YWwgb2N0ZXRzIG9mIHJlY2VpdmVkIGZyYW1lcywgaW5jbHVkaW5nIGZyYW1pbmcgY2hhcmFjdGVycywKKyAqICAgICAgICAgICAgbXVsdGlwbHkgUE9SVG5fUlhfVFRMX0ZSTVMgYnkgOCBhbmQgYWRkIGl0IHRvIHRoaXMgc3RhdCAodW5sZXNzCisgKiAgICAgICAgICAgIG90aGVyd2lzZSBjb25maWd1cmVkLCB0aGlzIHN0YXQgb25seSBjb3VudHMgZnJhbWVzIHRoYXQgaGF2ZSA4CisgKiAgICAgICAgICAgIGJ5dGVzIG9mIHByZWFtYmxlIGZvciBlYWNoIGZyYW1lKS4gVGhpcyBzdGF0IGNhbiBiZSBjb25maWd1cmVkCisgKiAgICAgICAgICAgIChzZWUgWE1BQ19TVEFUU19HTE9CQUxfQ0ZHLlRUTF9GUk1TX0hBTkRMSU5HKSB0byBjb3VudCBldmVyeXRoaW5nLAorICogICAgICAgICAgICBldmVuIHRoZSBwcmVhbWJsZSBvY3RldHMgb2YgImZyYW1lcyIgYXMgc21hbGwgb25lIGJ5dGUgb2YgcHJlYW1ibGUKKyAqIEByeF9kYXRhX29jdGV0czogQ291bnQgb2YgZGF0YSBhbmQgcGFkZGluZyBvY3RldHMgb2Ygc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkCisgKiAgICAgICAgICAgIGZyYW1lcy4gRG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X29mZmxvYWRfb2N0ZXRzOiBDb3VudCBvZiB0b3RhbCBvY3RldHMsIG5vdCBpbmNsdWRpbmcgZnJhbWluZworICogICAgICAgICAgICBjaGFyYWN0ZXJzLCBvZiBvZmZsb2FkZWQgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIHBhc3NlZAorICogICAgICAgICAgICB0byB0aGUgaG9zdC4KKyAqIEByeF92bGRfbWNhc3RfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIE1BQyBmcmFtZXMgY29udGFpbmluZyBhCisgKgkgICAgICBub25icm9hZGNhc3QgZ3JvdXAgYWRkcmVzcy4gRG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3ZsZF9iY2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTUFDIGZyYW1lcyBjb250YWluaW5nCisgKiAgICAgICAgICAgIHRoZSBicm9hZGNhc3QgZ3JvdXAgYWRkcmVzcy4gRG9lcyBub3QgaW5jbHVkZSBmcmFtZXMgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X2FjY2VwdGVkX3VjYXN0X2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBmcmFtZXMgY29udGFpbmluZworICogICAgICAgICAgICBhIHVuaWNhc3QgYWRkcmVzcy4gT25seSBpbmNsdWRlcyBmcmFtZXMgdGhhdCBhcmUgcGFzc2VkIHRvCisgKiAgICAgICAgICAgIHRoZSBzeXN0ZW0uCisgKiBAcnhfYWNjZXB0ZWRfbnVjYXN0X2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBmcmFtZXMgY29udGFpbmluZworICogICAgICAgICAgICBhIG5vbi11bmljYXN0IChicm9hZGNhc3Qgb3IgbXVsdGljYXN0KSBhZGRyZXNzLiBPbmx5IGluY2x1ZGVzCisgKiAgICAgICAgICAgIGZyYW1lcyB0aGF0IGFyZSBwYXNzZWQgdG8gdGhlIHN5c3RlbS4gQ291bGQgaW5jbHVkZSwgZm9yIGluc3RhbmNlLAorICogICAgICAgICAgICBub24tdW5pY2FzdCBmcmFtZXMgdGhhdCBjb250YWluIEZDUyBlcnJvcnMgaWYgdGhlIE1BQ19FUlJPUl9DRkcKKyAqICAgICAgICAgICAgcmVnaXN0ZXIgaXMgc2V0IHRvIHBhc3MgRkNTLWVycm9yZWQgZnJhbWVzIHRvIHRoZSBob3N0LgorICogQHJ4X3RhZ2dlZF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgY29udGFpbmluZyBhIFZMQU4gdGFnLgorICogQHJ4X2xvbmdfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGxvbmdlciB0aGFuIFJYX01BWF9QWUxEX0xFTgorICogICAgICAgICAgICArIDE4IGJ5dGVzICgrIDIyIGJ5dGVzIGlmIFZMQU4tdGFnZ2VkKS4KKyAqIEByeF91c2l6ZWRfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIG9mIGxlbmd0aCAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdAorICogICAgICAgICAgICBmcmFtaW5nIGJpdHMpIGxlc3MgdGhhbiA2NCBvY3RldHMsIHRoYXQgYXJlIG90aGVyd2lzZSB3ZWxsLWZvcm1lZC4KKyAqICAgICAgICAgICAgSW4gb3RoZXIgd29yZHMsIGNvdW50cyBydW50cy4KKyAqIEByeF9vc2l6ZWRfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIG9mIGxlbmd0aCAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdAorICogICAgICAgICAgICBmcmFtaW5nIGJpdHMpIG1vcmUgdGhhbiAxNTE4IG9jdGV0cywgdGhhdCBhcmUgb3RoZXJ3aXNlCisgKiAgICAgICAgICAgIHdlbGwtZm9ybWVkLiBOb3RlOiBJZiByZWdpc3RlciBYTUFDX1NUQVRTX0dMT0JBTF9DRkcuVkxBTl9IQU5ETElORworICogICAgICAgICAgICBpcyBzZXQgdG8gMSwgdGhlbiAibW9yZSB0aGFuIDE1MTggb2N0ZXRzIiBiZWNvbWVzICJtb3JlIHRoYW4gMTUxOAorICogICAgICAgICAgICAoMTUyMiBpZiBWTEFOLXRhZ2dlZCkgb2N0ZXRzIi4KKyAqIEByeF9mcmFnX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyBvZiBsZW5ndGggKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QKKyAqICAgICAgICAgICAgZnJhbWluZyBiaXRzKSBsZXNzIHRoYW4gNjQgb2N0ZXRzIHRoYXQgaGFkIGJhZCBGQ1MuIEluIG90aGVyCisgKiAgICAgICAgICAgIHdvcmRzLCBjb3VudHMgZnJhZ21lbnRzLgorICogQHJ4X2phYmJlcl9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgb2YgbGVuZ3RoIChpbmNsdWRpbmcgRkNTLCBidXQgbm90CisgKiAgICAgICAgICAgIGZyYW1pbmcgYml0cykgbW9yZSB0aGFuIDE1MTggb2N0ZXRzIHRoYXQgaGFkIGJhZCBGQ1MuIEluIG90aGVyCisgKiAgICAgICAgICAgIHdvcmRzLCBjb3VudHMgamFiYmVycy4gTm90ZTogSWYgcmVnaXN0ZXIKKyAqICAgICAgICAgICAgWE1BQ19TVEFUU19HTE9CQUxfQ0ZHLlZMQU5fSEFORExJTkcgaXMgc2V0IHRvIDEsIHRoZW4gIm1vcmUgdGhhbgorICogICAgICAgICAgICAxNTE4IG9jdGV0cyIgYmVjb21lcyAibW9yZSB0aGFuIDE1MTggKDE1MjIgaWYgVkxBTi10YWdnZWQpCisgKiAgICAgICAgICAgIG9jdGV0cyIuCisgKiBAcnhfdHRsXzY0X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGggKGluY2x1ZGluZworICogICAgICAgICAgICBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBleGFjdGx5IDY0IG9jdGV0cy4gSW5jbHVkZXMgZnJhbWVzCisgKiAgICAgICAgICAgIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfNjVfMTI3X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDY1IGFuZCAxMjcKKyAqICAgICAgICAgICAgb2N0ZXRzIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsCisgKiAgICAgICAgICAgIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfMTI4XzI1NV9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiAxMjggYW5kIDI1NQorICogICAgICAgICAgICBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF8yNTZfNTExX2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDI1NiBhbmQgNTExCisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzUxMl8xMDIzX2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDUxMiBhbmQgMTAyMworICogICAgICAgICAgICBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF8xMDI0XzE1MThfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gMTAyNCBhbmQgMTUxOAorICogICAgICAgICAgICBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF8xNTE5XzQwOTVfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gMTUxOSBhbmQgNDA5NQorICogICAgICAgICAgICBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF80MDk2XzgxOTFfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gNDA5NiBhbmQgODE5MQorICogICAgICAgICAgICBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywKKyAqICAgICAgICAgICAgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF84MTkyX21heF9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiA4MTkyIGFuZAorICogICAgICAgICAgICBSWF9NQVhfUFlMRF9MRU4rMTggb2N0ZXRzIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkCisgKiAgICAgICAgICAgIHdpdGggZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfZ3RfbWF4X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBleGNlZWRpbmcKKyAqICAgICAgICAgICAgUlhfTUFYX1BZTERfTEVOKzE4ICgrMjIgYnl0ZXMgaWYgVkxBTi10YWdnZWQpIG9jdGV0cyBpbmNsdXNpdmUuCisgKiAgICAgICAgICAgIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfaXA6IENvdW50IG9mIHJlY2VpdmVkIElQIGRhdGFncmFtcy4gSW5jbHVkZXMgZXJyb3JlZCBJUCBkYXRhZ3JhbXMuCisgKiBAcnhfYWNjZXB0ZWRfaXA6IENvdW50IG9mIHJlY2VpdmVkIElQIGRhdGFncmFtcyB0aGF0CisgKiAJCWFyZSBwYXNzZWQgdG8gdGhlIHN5c3RlbS4KKyAqIEByeF9pcF9vY3RldHM6IENvdW50IG9mIG51bWJlciBvZiBvY3RldHMgaW4gcmVjZWl2ZWQgSVAgZGF0YWdyYW1zLiBJbmNsdWRlcworICogICAgICAgICAgICBlcnJvcmVkIElQIGRhdGFncmFtcy4KKyAqIEByeF9lcnJfaXA6IAlDb3VudCBvZiByZWNlaXZlZCBJUCBkYXRhZ3JhbXMgY29udGFpbmluZyBlcnJvcnMuIEZvciBleGFtcGxlLAorICogICAgICAgICAgICBiYWQgSVAgY2hlY2tzdW0uCisgKiBAcnhfaWNtcDogQ291bnQgb2YgcmVjZWl2ZWQgSUNNUCBtZXNzYWdlcy4gSW5jbHVkZXMgZXJyb3JlZCBJQ01QIG1lc3NhZ2VzLgorICogQHJ4X3RjcDogQ291bnQgb2YgcmVjZWl2ZWQgVENQIHNlZ21lbnRzLiBJbmNsdWRlcyBlcnJvcmVkIFRDUCBzZWdtZW50cy4KKyAqICAgICAgICAgICAgTm90ZTogVGhpcyBzdGF0IGNvbnRhaW5zIGEgY291bnQgb2YgYWxsIHJlY2VpdmVkIFRDUCBzZWdtZW50cywKKyAqICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGV5IHBlcnRhaW4gdG8gYW4gZXN0YWJsaXNoZWQKKyAqICAgICAgICAgICAgY29ubmVjdGlvbi4KKyAqIEByeF91ZHA6IENvdW50IG9mIHJlY2VpdmVkIFVEUCBkYXRhZ3JhbXMuCisgKiBAcnhfZXJyX3RjcDogQ291bnQgb2YgcmVjZWl2ZWQgVENQIHNlZ21lbnRzIGNvbnRhaW5pbmcgZXJyb3JzLiBGb3IgZXhhbXBsZSwKKyAqICAgICAgICAgICAgYmFkIFRDUCBjaGVja3N1bS4KKyAqIEByeF9wYXVzZV9jb3VudDogQ291bnQgb2YgbnVtYmVyIG9mIHBhdXNlIHF1YW50YSB0aGF0IHRoZSBNQUMgaGFzIGJlZW4gaW4KKyAqICAgICAgICAgICAgdGhlIHBhdXNlZCBzdGF0ZS4gUmVjYWxsLCBvbmUgcGF1c2UgcXVhbnR1bSBlcXVhdGVzIHRvIDUxMgorICogICAgICAgICAgICBiaXQgdGltZXMuCisgKiBAcnhfcGF1c2VfY3RybF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBNQUMgUEFVU0UgY29udHJvbCBmcmFtZXMuCisgKiBAcnhfdW5zdXBfY3RybF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBNQUMgY29udHJvbCBmcmFtZXMgdGhhdCBkbyBub3QKKyAqICAgICAgICAgICAgY29udGFpbiB0aGUgUEFVU0Ugb3Bjb2RlLiBUaGUgc3VtIG9mIFJYX1BBVVNFX0NUUkxfRlJNUyBhbmQKKyAqICAgICAgICAgICAgdGhpcyByZWdpc3RlciBpcyBhIGNvdW50IG9mIGFsbCByZWNlaXZlZCBNQUMgY29udHJvbCBmcmFtZXMuCisgKiAgICAgICAgICAgIE5vdGU6IFRoaXMgc3RhdCBtYXkgYmUgY29uZmlndXJlZCB0byBjb3VudCBhbGwgbGF5ZXIgMiBlcnJvcnMKKyAqICAgICAgICAgICAgKGkuZS4gbGVuZ3RoIGVycm9ycyBhbmQgRkNTIGVycm9ycykuCisgKiBAcnhfZmNzX2Vycl9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBNQUMgZnJhbWVzIHRoYXQgZG8gbm90IHBhc3MgRkNTLiBEb2VzCisgKiAgICAgICAgICAgIG5vdCBpbmNsdWRlIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nIG9yCisgKiAgICAgICAgICAgIGZyYW1lLXRvby1zaG9ydCBlcnJvci4KKyAqIEByeF9pbl9ybmdfbGVuX2Vycl9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgd2l0aCBhIGxlbmd0aC90eXBlIGZpZWxkCisgKiAgICAgICAgICAgIHZhbHVlIGJldHdlZW4gNDYgKDQyIGZvciBWTEFOLXRhZ2dlZCBmcmFtZXMpIGFuZCAxNTAwIChhbHNvIDE1MDAKKyAqICAgICAgICAgICAgZm9yIFZMQU4tdGFnZ2VkIGZyYW1lcyksIGluY2x1c2l2ZSwgdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUKKyAqICAgICAgICAgICAgbnVtYmVyIG9mIGRhdGEgb2N0ZXRzIChpbmNsdWRpbmcgcGFkKSByZWNlaXZlZC4gQWxzbyBjb250YWlucworICogICAgICAgICAgICBhIGNvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB3aXRoIGEgbGVuZ3RoL3R5cGUgZmllbGQgbGVzcyB0aGFuCisgKiAgICAgICAgICAgIDQ2ICg0MiBmb3IgVkxBTi10YWdnZWQgZnJhbWVzKSBhbmQgdGhlIG51bWJlciBvZiBkYXRhIG9jdGV0cworICogICAgICAgICAgICAoaW5jbHVkaW5nIHBhZCkgcmVjZWl2ZWQgaXMgZ3JlYXRlciB0aGFuIDQ2ICg0MiBmb3IgVkxBTi10YWdnZWQKKyAqICAgICAgICAgICAgZnJhbWVzKS4KKyAqIEByeF9vdXRfcm5nX2xlbl9lcnJfZnJtczogIENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB3aXRoIGxlbmd0aC90eXBlIGZpZWxkCisgKiAgICAgICAgICAgIGJldHdlZW4gMTUwMSBhbmQgMTUzNSBkZWNpbWFsLCBpbmNsdXNpdmUuCisgKiBAcnhfZHJvcF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBjb3VsZCBub3QgYmUgcGFzc2VkIHRvIHRoZSBob3N0LgorICogICAgICAgICAgICBTZWUgUE9SVG5fUlhfTDJfTUdNVF9ESVNDQVJELCBQT1JUbl9SWF9SUEFfRElTQ0FSRCwKKyAqICAgICAgICAgICAgUE9SVG5fUlhfVFJBU0hfRElTQ0FSRCwgUE9SVG5fUlhfUlRTX0RJU0NBUkQsIFBPUlRuX1JYX1JFRF9ESVNDQVJECisgKiAgICAgICAgICAgIGZvciBhIGxpc3Qgb2YgcmVhc29ucy4gQmVjYXVzZSB0aGUgUk1BQyBkcm9wcyBvbmUgZnJhbWUgYXQgYSB0aW1lLAorICogICAgICAgICAgICB0aGlzIHN0YXQgYWxzbyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBkcm9wIGV2ZW50cy4KKyAqIEByeF9kaXNjYXJkZWRfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIGNvbnRhaW5pbmcKKyAqIAkJYW55IGVycm9yIHRoYXQgcHJldmVudHMKKyAqICAgICAgICAgICAgdGhlbSBmcm9tIGJlaW5nIHBhc3NlZCB0byB0aGUgc3lzdGVtLiBTZWUgUE9SVG5fUlhfRkNTX0RJU0NBUkQsCisgKiAgICAgICAgICAgIFBPUlRuX1JYX0xFTl9ESVNDQVJELCBhbmQgUE9SVG5fUlhfU1dJVENIX0RJU0NBUkQgZm9yIGEgbGlzdCBvZgorICogICAgICAgICAgICByZWFzb25zLgorICogQHJ4X2Ryb3BfaXA6IENvdW50IG9mIHJlY2VpdmVkIElQIGRhdGFncmFtcyB0aGF0IGNvdWxkIG5vdCBiZSBwYXNzZWQgdG8gdGhlCisgKiAgICAgICAgICAgIGhvc3QuIFNlZSBQT1JUbl9SWF9EUk9QX0ZSTVMgZm9yIGEgbGlzdCBvZiByZWFzb25zLgorICogQHJ4X2Ryb3BfdWRwOiBDb3VudCBvZiByZWNlaXZlZCBVRFAgZGF0YWdyYW1zIHRoYXQgYXJlIG5vdCBkZWxpdmVyZWQgdG8gdGhlCisgKiAgICAgICAgICAgIGhvc3QuIFNlZSBQT1JUbl9SWF9EUk9QX0ZSTVMgZm9yIGEgbGlzdCBvZiByZWFzb25zLgorICogQHJ4X21hcmtlcl9wZHVfZnJtczogQ291bnQgb2YgdmFsaWQgTWFya2VyIFBEVXMgcmVjZWl2ZWQgb24gdGhpcyBBZ2dyZWdhdGlvbgorICogICAgICAgICAgICBwb3J0LgorICogQHJ4X2xhY3BkdV9mcm1zOiBDb3VudCBvZiB2YWxpZCBMQUNQRFVzIHJlY2VpdmVkIG9uIHRoaXMgQWdncmVnYXRpb24gcG9ydC4KKyAqIEByeF91bmtub3duX3BkdV9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgKG9uIHRoaXMgQWdncmVnYXRpb24gcG9ydCkKKyAqICAgICAgICAgICAgdGhhdCBjYXJyeSB0aGUgU2xvdyBQcm90b2NvbHMgRXRoZXJUeXBlLCBidXQgY29udGFpbiBhbiB1bmtub3duCisgKiAgICAgICAgICAgIFBEVS4gT3IgZnJhbWVzIHRoYXQgY29udGFpbiB0aGUgU2xvdyBQcm90b2NvbHMgZ3JvdXAgTUFDIGFkZHJlc3MsCisgKiAgICAgICAgICAgIGJ1dCBkbyBub3QgY2FycnkgdGhlIFNsb3cgUHJvdG9jb2xzIEV0aGVyVHlwZS4KKyAqIEByeF9tYXJrZXJfcmVzcF9wZHVfZnJtczogQ291bnQgb2YgdmFsaWQgTWFya2VyIFJlc3BvbnNlIFBEVXMgcmVjZWl2ZWQgb24KKyAqICAgICAgICAgICAgdGhpcyBBZ2dyZWdhdGlvbiBwb3J0LgorICogQHJ4X2Zjc19kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgZGlzY2FyZGVkIGJlY2F1c2UgdGhlCisgKiAgICAgICAgICAgIEZDUyBjaGVjayBmYWlsZWQuCisgKiBAcnhfaWxsZWdhbF9wZHVfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIChvbiB0aGlzIEFnZ3JlZ2F0aW9uIHBvcnQpCisgKiAgICAgICAgICAgIHRoYXQgY2FycnkgdGhlIFNsb3cgUHJvdG9jb2xzIEV0aGVyVHlwZSwgYnV0IGNvbnRhaW4gYSBiYWRseQorICogICAgICAgICAgICBmb3JtZWQgUERVLiBPciBmcmFtZXMgdGhhdCBjYXJyeSB0aGUgU2xvdyBQcm90b2NvbHMgRXRoZXJUeXBlLAorICogICAgICAgICAgICBidXQgY29udGFpbiBhbiBpbGxlZ2FsIHZhbHVlIG9mIFByb3RvY29sIFN1YnR5cGUuCisgKiBAcnhfc3dpdGNoX2Rpc2NhcmQ6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQgYnkgdGhlCisgKiAgICAgICAgICAgIGludGVybmFsIHN3aXRjaCBiZWNhdXNlIHRoZXkgZGlkIG5vdCBoYXZlIGFuIGVudHJ5IGluIHRoZQorICogICAgICAgICAgICBGaWx0ZXJpbmcgRGF0YWJhc2UuIFRoaXMgaW5jbHVkZXMgZnJhbWVzIHRoYXQgaGFkIGFuIGludmFsaWQKKyAqICAgICAgICAgICAgZGVzdGluYXRpb24gTUFDIGFkZHJlc3Mgb3IgVkxBTiBJRC4gSXQgYWxzbyBpbmNsdWRlcyBmcmFtZXMgYXJlCisgKiAgICAgICAgICAgIGRpc2NhcmRlZCBiZWNhdXNlIHRoZXkgZGlkIG5vdCBzYXRpc2Z5IHRoZSBsZW5ndGggcmVxdWlyZW1lbnRzCisgKiAgICAgICAgICAgIG9mIHRoZSB0YXJnZXQgVlBBVEguCisgKiBAcnhfbGVuX2Rpc2NhcmQ6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQgYmVjYXVzZSBvZiBhbgorICogICAgICAgICAgICBpbnZhbGlkIGZyYW1lIGxlbmd0aCAoaW5jbHVkZXMgZnJhZ21lbnRzLCBvdmVyc2l6ZWQgZnJhbWVzIGFuZAorICogICAgICAgICAgICBtaXNtYXRjaCBiZXR3ZWVuIGZyYW1lIGxlbmd0aCBhbmQgbGVuZ3RoL3R5cGUgZmllbGQpLiBUaGlzIHN0YXQKKyAqICAgICAgICAgICAgY2FuIGJlIGNvbmZpZ3VyZWQKKyAqICAgICAgICAgICAgKHNlZSBYTUFDX1NUQVRTX0dMT0JBTF9DRkcuTEVOX0RJU0NBUkRfSEFORExJTkcpLgorICogQHJ4X3JwYV9kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCB3ZXJlIGRpc2NhcmRlZCBiZWNhdXNlIHRoZQorICogICAgICAgICAgICByZWNlaXZlIHByb3RvY29sIGFzc2lzdCAoUlBBKSBkaXNjb3ZlcmVkIGFuZCBlcnJvciBpbiB0aGUgZnJhbWUKKyAqICAgICAgICAgICAgb3Igd2FzIHVuYWJsZSB0byBwYXJzZSB0aGUgZnJhbWUuCisgKiBAcnhfbDJfbWdtdF9kaXNjYXJkOiBDb3VudCBvZiBMYXllciAyIG1hbmFnZW1lbnQgZnJhbWVzIChlZy4gcGF1c2UgZnJhbWVzLAorICogICAgICAgICAgICBMaW5rIEFnZ3JlZ2F0aW9uIENvbnRyb2wgUHJvdG9jb2wgKExBQ1ApIGZyYW1lcywgZXRjLikgdGhhdCBhcmUKKyAqICAgICAgICAgICAgZGlzY2FyZGVkLgorICogQHJ4X3J0c19kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgZGlzY2FyZGVkIGJ5IHRoZSByZWNlaXZlCisgKiAgICAgICAgICAgIHRyYWZmaWMgc3RlZXJpbmcgKFJUUykgbG9naWMuIEluY2x1ZGVzIHRob3NlIGZyYW1lIGRpc2NhcmRlZAorICogICAgICAgICAgICBiZWNhdXNlIHRoZSBTU0MgcmVzcG9uc2UgY29udHJhZGljdGVkIHRoZSBzd2l0Y2ggdGFibGUsIGJlY2F1c2UKKyAqICAgICAgICAgICAgdGhlIFNTQyB0aW1lZCBvdXQsIG9yIGJlY2F1c2UgdGhlIHRhcmdldCBxdWV1ZSBjb3VsZCBub3QgZml0IHRoZQorICogICAgICAgICAgICBmcmFtZS4KKyAqIEByeF90cmFzaF9kaXNjYXJkOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgZGlzY2FyZGVkIGJlY2F1c2UKKyAqICAgICAgICAgICAgcmVjZWl2ZSB0cmFmZmljIHN0ZWVyaW5nIChSVFMpIHN0ZWVyZWQgdGhlIGZyYW1lIHRvIHRoZSB0cmFzaAorICogICAgICAgICAgICBxdWV1ZS4KKyAqIEByeF9idWZmX2Z1bGxfZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBiZWNhdXNlCisgKiAgICAgICAgICAgIGludGVybmFsIGJ1ZmZlcnMgYXJlIGZ1bGwuIEluY2x1ZGVzIGZyYW1lcyBkaXNjYXJkZWQgYmVjYXVzZSB0aGUKKyAqICAgICAgICAgICAgUlRTIGxvZ2ljIGlzIHdhaXRpbmcgZm9yIGFuIFNTQyBsb29rdXAgdGhhdCBoYXMgbm8gdGltZW91dCBib3VuZC4KKyAqICAgICAgICAgICAgQWxzbywgaW5jbHVkZXMgZnJhbWVzIHRoYXQgYXJlIGRyb3BwZWQgYmVjYXVzZSB0aGUgTUFDMkZBVSBidWZmZXIKKyAqICAgICAgICAgICAgaXMgbmVhcmx5IGZ1bGwgLS0gdGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBleHRlcm5hbCByZWNlaXZlIGJ1ZmZlcgorICogICAgICAgICAgICBpcyBmdWxsIGFuZCB0aGUgcmVjZWl2ZSBwYXRoIGlzIGJhY2tpbmcgdXAuCisgKiBAcnhfcmVkX2Rpc2NhcmQ6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQgYmVjYXVzZSBvZiBSRUQKKyAqICAgICAgICAgICAgKFJhbmRvbSBFYXJseSBEaXNjYXJkKS4KKyAqIEByeF94Z21paV9jdHJsX2Vycl9jbnQ6IE1haW50YWlucyBhIGNvdW50IG9mIHVuZXhwZWN0ZWQgb3IgbWlzcGxhY2VkIGNvbnRyb2wKKyAqICAgICAgICAgICAgY2hhcmFjdGVycyBvY2N1cmluZyBiZXR3ZWVuIHRpbWVzIG9mIG5vcm1hbCBkYXRhIHRyYW5zbWlzc2lvbgorICogICAgICAgICAgICAoaS5lLiBub3QgaW5jbHVkZWQgaW4gUlhfWEdNSUlfREFUQV9FUlJfQ05UKS4gVGhpcyBjb3VudGVyIGlzCisgKiAgICAgICAgICAgIGluY3JlbWVudGVkIHdoZW4gZWl0aGVyIC0KKyAqICAgICAgICAgICAgMSkgVGhlIFJlY29uY2lsaWF0aW9uIFN1YmxheWVyIChSUykgaXMgZXhwZWN0aW5nIG9uZSBjb250cm9sCisgKiAgICAgICAgICAgICAgIGNoYXJhY3RlciBhbmQgZ2V0cyBhbm90aGVyIChpLmUuIGlzIGV4cGVjdGluZyBhIFN0YXJ0CisgKiAgICAgICAgICAgICAgIGNoYXJhY3RlciwgYnV0IGdldHMgYW5vdGhlciBjb250cm9sIGNoYXJhY3RlcikuCisgKiAgICAgICAgICAgIDIpIFN0YXJ0IGNvbnRyb2wgY2hhcmFjdGVyIGlzIG5vdCBpbiBsYW5lIDAKKyAqICAgICAgICAgICAgT25seSBpbmNyZW1lbnRzIHRoZSBjb3VudCBieSBvbmUgZm9yIGVhY2ggWEdNSUkgY29sdW1uLgorICogQHJ4X3hnbWlpX2RhdGFfZXJyX2NudDogTWFpbnRhaW5zIGEgY291bnQgb2YgdW5leHBlY3RlZCBjb250cm9sIGNoYXJhY3RlcnMKKyAqICAgICAgICAgICAgZHVyaW5nIG5vcm1hbCBkYXRhIHRyYW5zbWlzc2lvbi4gSWYgdGhlIFJlY29uY2lsaWF0aW9uIFN1YmxheWVyCisgKiAgICAgICAgICAgIChSUykgcmVjZWl2ZXMgYSBjb250cm9sIGNoYXJhY3Rlciwgb3RoZXIgdGhhbiBhIHRlcm1pbmF0ZSBjb250cm9sCisgKiAgICAgICAgICAgIGNoYXJhY3RlciwgZHVyaW5nIHJlY2VpcHQgb2YgZGF0YSBvY3RldHMgdGhlbiB0aGlzIHJlZ2lzdGVyIGlzCisgKiAgICAgICAgICAgIGluY3JlbWVudGVkLiBBbHNvIGluY3JlbWVudHMgaWYgdGhlIHN0YXJ0IGZyYW1lIGRlbGltaXRlciBpcyBub3QKKyAqICAgICAgICAgICAgZm91bmQgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uIE9ubHkgaW5jcmVtZW50cyB0aGUgY291bnQgYnkgb25lCisgKiAgICAgICAgICAgIGZvciBlYWNoIFhHTUlJIGNvbHVtbi4KKyAqIEByeF94Z21paV9jaGFyMV9tYXRjaDogTWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBYR01JSSBjaGFyYWN0ZXJzCisgKiAgICAgICAgICAgIHRoYXQgbWF0Y2ggYSBwYXR0ZXJuIHRoYXQgaXMgcHJvZ3JhbW1hYmxlIHRocm91Z2ggcmVnaXN0ZXIKKyAqICAgICAgICAgICAgWE1BQ19TVEFUU19SWF9YR01JSV9DSEFSX1BPUlRuLiBCeSBkZWZhdWx0LCB0aGUgcGF0dGVybiBpcyBzZXQKKyAqICAgICAgICAgICAgdG8gL0UvIChpLmUuIHRoZSBlcnJvciBjaGFyYWN0ZXIpLCB0aHVzIHRoZSBzdGF0aXN0aWMgdHJhY2tzIHRoZQorICogICAgICAgICAgICBudW1iZXIgb2YgRXJyb3IgY2hhcmFjdGVycyByZWNlaXZlZCBhdCBhbnkgdGltZS4KKyAqIEByeF94Z21paV9lcnJfc3ltOiBDb3VudCBvZiB0aGUgbnVtYmVyIG9mIHN5bWJvbCBlcnJvcnMgaW4gdGhlIHJlY2VpdmVkCisgKiAgICAgICAgICAgIFhHTUlJIGRhdGEgKGkuZS4gUEhZIGluZGljYXRlcyAiUmVjZWl2ZSBFcnJvciIgb24gdGhlIFhHTUlJKS4KKyAqICAgICAgICAgICAgT25seSBpbmNsdWRlcyBzeW1ib2wgZXJyb3JzIHRoYXQgYXJlIG9ic2VydmVkIGJldHdlZW4gdGhlIFhHTUlJCisgKiAgICAgICAgICAgIFN0YXJ0IEZyYW1lIERlbGltaXRlciBhbmQgRW5kIEZyYW1lIERlbGltaXRlciwgaW5jbHVzaXZlLiBBbmQKKyAqICAgICAgICAgICAgb25seSBpbmNyZW1lbnRzIHRoZSBjb3VudCBieSBvbmUgZm9yIGVhY2ggZnJhbWUuCisgKiBAcnhfeGdtaWlfY29sdW1uMV9tYXRjaDogTWFpbnRhaW5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBYR01JSSBjb2x1bW5zCisgKiAgICAgICAgICAgIHRoYXQgbWF0Y2ggYSBwYXR0ZXJuIHRoYXQgaXMgcHJvZ3JhbW1hYmxlIHRocm91Z2ggcmVnaXN0ZXIKKyAqICAgICAgICAgICAgWE1BQ19TVEFUU19SWF9YR01JSV9DT0xVTU4xX1BPUlRuLiBCeSBkZWZhdWx0LCB0aGUgcGF0dGVybiBpcyBzZXQKKyAqICAgICAgICAgICAgdG8gNCB4IC9FLyAoaS5lLiBhIGNvbHVtbiBjb250YWluaW5nIGFsbCBlcnJvciBjaGFyYWN0ZXJzKSwgdGh1cworICogICAgICAgICAgICB0aGUgc3RhdGlzdGljIHRyYWNrcyB0aGUgbnVtYmVyIG9mIEVycm9yIGNvbHVtbnMgcmVjZWl2ZWQgYXQgYW55CisgKiAgICAgICAgICAgIHRpbWUuCisgKiBAcnhfeGdtaWlfY2hhcjJfbWF0Y2g6IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgWEdNSUkgY2hhcmFjdGVycworICogICAgICAgICAgICB0aGF0IG1hdGNoIGEgcGF0dGVybiB0aGF0IGlzIHByb2dyYW1tYWJsZSB0aHJvdWdoIHJlZ2lzdGVyCisgKiAgICAgICAgICAgIFhNQUNfU1RBVFNfUlhfWEdNSUlfQ0hBUl9QT1JUbi4gQnkgZGVmYXVsdCwgdGhlIHBhdHRlcm4gaXMgc2V0CisgKiAgICAgICAgICAgIHRvIC9FLyAoaS5lLiB0aGUgZXJyb3IgY2hhcmFjdGVyKSwgdGh1cyB0aGUgc3RhdGlzdGljIHRyYWNrcyB0aGUKKyAqICAgICAgICAgICAgbnVtYmVyIG9mIEVycm9yIGNoYXJhY3RlcnMgcmVjZWl2ZWQgYXQgYW55IHRpbWUuCisgKiBAcnhfbG9jYWxfZmF1bHQ6IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBsaW5rCisgKiAgICAgICAgICAgIHRyYW5zaXRpb25lZCBmcm9tICJ1cCIgdG8gImRvd24iIGR1ZSB0byBhIGxvY2FsIGZhdWx0LgorICogQHJ4X3hnbWlpX2NvbHVtbjJfbWF0Y2g6IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgWEdNSUkgY29sdW1ucworICogICAgICAgICAgICB0aGF0IG1hdGNoIGEgcGF0dGVybiB0aGF0IGlzIHByb2dyYW1tYWJsZSB0aHJvdWdoIHJlZ2lzdGVyCisgKiAgICAgICAgICAgIFhNQUNfU1RBVFNfUlhfWEdNSUlfQ09MVU1OMl9QT1JUbi4gQnkgZGVmYXVsdCwgdGhlIHBhdHRlcm4gaXMgc2V0CisgKiAgICAgICAgICAgIHRvIDQgeCAvRS8gKGkuZS4gYSBjb2x1bW4gY29udGFpbmluZyBhbGwgZXJyb3IgY2hhcmFjdGVycyksIHRodXMKKyAqICAgICAgICAgICAgdGhlIHN0YXRpc3RpYyB0cmFja3MgdGhlIG51bWJlciBvZiBFcnJvciBjb2x1bW5zIHJlY2VpdmVkIGF0IGFueQorICogICAgICAgICAgICB0aW1lLiBJZiBYTUFDX1NUQVRTX1JYX1hHTUlJX0JFSEFWX0NPTFVNTjJfUE9SVG4uTkVBUl9DT0wxIGlzIHNldAorICogICAgICAgICAgICB0byAxLCB0aGVuIHRoaXMgc3RhdCBpbmNyZW1lbnRzIHdoZW4gQ09MVU1OMiBpcyBmb3VuZCB3aXRoaW4gJ24nCisgKiAgICAgICAgICAgIGNsb2NrcyBhZnRlciBDT0xVTU4xLiBIZXJlLCAnbicgaXMgZGVmaW5lZCBieQorICogICAgICAgICAgICBYTUFDX1NUQVRTX1JYX1hHTUlJX0JFSEFWX0NPTFVNTjJfUE9SVG4uTlVNX0NPTCAoaWYgJ24nIGlzIHNldCB0bworICogICAgICAgICAgICAwLCB0aGVuIGl0IG1lYW5zIHRvIHNlYXJjaCBhbnl3aGVyZSBmb3IgQ09MVU1OMikuCisgKiBAcnhfamV0dGlzb246IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBqZXR0aXNvbmVkIGJlY2F1c2UgaW50ZXJuYWwKKyAqICAgICAgICAgICAgYnVmZmVycyBhcmUgZnVsbC4KKyAqIEByeF9yZW1vdGVfZmF1bHQ6IE1haW50YWlucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBsaW5rCisgKiAgICAgICAgICAgIHRyYW5zaXRpb25lZCBmcm9tICJ1cCIgdG8gImRvd24iIGR1ZSB0byBhIHJlbW90ZSBmYXVsdC4KKyAqCisgKiBYTUFDIFBvcnQgU3RhdGlzdGljcy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfeG1hY19wb3J0X3N0YXRzIHsKKy8qMHgwMDAqLwkJdTY0CXR4X3R0bF9mcm1zOworLyoweDAwOCovCQl1NjQJdHhfdHRsX29jdGV0czsKKy8qMHgwMTAqLwkJdTY0CXR4X2RhdGFfb2N0ZXRzOworLyoweDAxOCovCQl1NjQJdHhfbWNhc3RfZnJtczsKKy8qMHgwMjAqLwkJdTY0CXR4X2JjYXN0X2ZybXM7CisvKjB4MDI4Ki8JCXU2NAl0eF91Y2FzdF9mcm1zOworLyoweDAzMCovCQl1NjQJdHhfdGFnZ2VkX2ZybXM7CisvKjB4MDM4Ki8JCXU2NAl0eF92bGRfaXA7CisvKjB4MDQwKi8JCXU2NAl0eF92bGRfaXBfb2N0ZXRzOworLyoweDA0OCovCQl1NjQJdHhfaWNtcDsKKy8qMHgwNTAqLwkJdTY0CXR4X3RjcDsKKy8qMHgwNTgqLwkJdTY0CXR4X3JzdF90Y3A7CisvKjB4MDYwKi8JCXU2NAl0eF91ZHA7CisvKjB4MDY4Ki8JCXUzMgl0eF9wYXJzZV9lcnJvcjsKKy8qMHgwNmMqLwkJdTMyCXR4X3Vua25vd25fcHJvdG9jb2w7CisvKjB4MDcwKi8JCXU2NAl0eF9wYXVzZV9jdHJsX2ZybXM7CisvKjB4MDc4Ki8JCXUzMgl0eF9tYXJrZXJfcGR1X2ZybXM7CisvKjB4MDdjKi8JCXUzMgl0eF9sYWNwZHVfZnJtczsKKy8qMHgwODAqLwkJdTMyCXR4X2Ryb3BfaXA7CisvKjB4MDg0Ki8JCXUzMgl0eF9tYXJrZXJfcmVzcF9wZHVfZnJtczsKKy8qMHgwODgqLwkJdTMyCXR4X3hnbWlpX2NoYXIyX21hdGNoOworLyoweDA4YyovCQl1MzIJdHhfeGdtaWlfY2hhcjFfbWF0Y2g7CisvKjB4MDkwKi8JCXUzMgl0eF94Z21paV9jb2x1bW4yX21hdGNoOworLyoweDA5NCovCQl1MzIJdHhfeGdtaWlfY29sdW1uMV9tYXRjaDsKKy8qMHgwOTgqLwkJdTMyCXVudXNlZDE7CisvKjB4MDljKi8JCXUxNgl0eF9hbnlfZXJyX2ZybXM7CisvKjB4MDllKi8JCXUxNgl0eF9kcm9wX2ZybXM7CisvKjB4MGEwKi8JCXU2NAlyeF90dGxfZnJtczsKKy8qMHgwYTgqLwkJdTY0CXJ4X3ZsZF9mcm1zOworLyoweDBiMCovCQl1NjQJcnhfb2ZmbG9hZF9mcm1zOworLyoweDBiOCovCQl1NjQJcnhfdHRsX29jdGV0czsKKy8qMHgwYzAqLwkJdTY0CXJ4X2RhdGFfb2N0ZXRzOworLyoweDBjOCovCQl1NjQJcnhfb2ZmbG9hZF9vY3RldHM7CisvKjB4MGQwKi8JCXU2NAlyeF92bGRfbWNhc3RfZnJtczsKKy8qMHgwZDgqLwkJdTY0CXJ4X3ZsZF9iY2FzdF9mcm1zOworLyoweDBlMCovCQl1NjQJcnhfYWNjZXB0ZWRfdWNhc3RfZnJtczsKKy8qMHgwZTgqLwkJdTY0CXJ4X2FjY2VwdGVkX251Y2FzdF9mcm1zOworLyoweDBmMCovCQl1NjQJcnhfdGFnZ2VkX2ZybXM7CisvKjB4MGY4Ki8JCXU2NAlyeF9sb25nX2ZybXM7CisvKjB4MTAwKi8JCXU2NAlyeF91c2l6ZWRfZnJtczsKKy8qMHgxMDgqLwkJdTY0CXJ4X29zaXplZF9mcm1zOworLyoweDExMCovCQl1NjQJcnhfZnJhZ19mcm1zOworLyoweDExOCovCQl1NjQJcnhfamFiYmVyX2ZybXM7CisvKjB4MTIwKi8JCXU2NAlyeF90dGxfNjRfZnJtczsKKy8qMHgxMjgqLwkJdTY0CXJ4X3R0bF82NV8xMjdfZnJtczsKKy8qMHgxMzAqLwkJdTY0CXJ4X3R0bF8xMjhfMjU1X2ZybXM7CisvKjB4MTM4Ki8JCXU2NAlyeF90dGxfMjU2XzUxMV9mcm1zOworLyoweDE0MCovCQl1NjQJcnhfdHRsXzUxMl8xMDIzX2ZybXM7CisvKjB4MTQ4Ki8JCXU2NAlyeF90dGxfMTAyNF8xNTE4X2ZybXM7CisvKjB4MTUwKi8JCXU2NAlyeF90dGxfMTUxOV80MDk1X2ZybXM7CisvKjB4MTU4Ki8JCXU2NAlyeF90dGxfNDA5Nl84MTkxX2ZybXM7CisvKjB4MTYwKi8JCXU2NAlyeF90dGxfODE5Ml9tYXhfZnJtczsKKy8qMHgxNjgqLwkJdTY0CXJ4X3R0bF9ndF9tYXhfZnJtczsKKy8qMHgxNzAqLwkJdTY0CXJ4X2lwOworLyoweDE3OCovCQl1NjQJcnhfYWNjZXB0ZWRfaXA7CisvKjB4MTgwKi8JCXU2NAlyeF9pcF9vY3RldHM7CisvKjB4MTg4Ki8JCXU2NAlyeF9lcnJfaXA7CisvKjB4MTkwKi8JCXU2NAlyeF9pY21wOworLyoweDE5OCovCQl1NjQJcnhfdGNwOworLyoweDFhMCovCQl1NjQJcnhfdWRwOworLyoweDFhOCovCQl1NjQJcnhfZXJyX3RjcDsKKy8qMHgxYjAqLwkJdTY0CXJ4X3BhdXNlX2NvdW50OworLyoweDFiOCovCQl1NjQJcnhfcGF1c2VfY3RybF9mcm1zOworLyoweDFjMCovCQl1NjQJcnhfdW5zdXBfY3RybF9mcm1zOworLyoweDFjOCovCQl1NjQJcnhfZmNzX2Vycl9mcm1zOworLyoweDFkMCovCQl1NjQJcnhfaW5fcm5nX2xlbl9lcnJfZnJtczsKKy8qMHgxZDgqLwkJdTY0CXJ4X291dF9ybmdfbGVuX2Vycl9mcm1zOworLyoweDFlMCovCQl1NjQJcnhfZHJvcF9mcm1zOworLyoweDFlOCovCQl1NjQJcnhfZGlzY2FyZGVkX2ZybXM7CisvKjB4MWYwKi8JCXU2NAlyeF9kcm9wX2lwOworLyoweDFmOCovCQl1NjQJcnhfZHJvcF91ZHA7CisvKjB4MjAwKi8JCXUzMglyeF9tYXJrZXJfcGR1X2ZybXM7CisvKjB4MjA0Ki8JCXUzMglyeF9sYWNwZHVfZnJtczsKKy8qMHgyMDgqLwkJdTMyCXJ4X3Vua25vd25fcGR1X2ZybXM7CisvKjB4MjBjKi8JCXUzMglyeF9tYXJrZXJfcmVzcF9wZHVfZnJtczsKKy8qMHgyMTAqLwkJdTMyCXJ4X2Zjc19kaXNjYXJkOworLyoweDIxNCovCQl1MzIJcnhfaWxsZWdhbF9wZHVfZnJtczsKKy8qMHgyMTgqLwkJdTMyCXJ4X3N3aXRjaF9kaXNjYXJkOworLyoweDIxYyovCQl1MzIJcnhfbGVuX2Rpc2NhcmQ7CisvKjB4MjIwKi8JCXUzMglyeF9ycGFfZGlzY2FyZDsKKy8qMHgyMjQqLwkJdTMyCXJ4X2wyX21nbXRfZGlzY2FyZDsKKy8qMHgyMjgqLwkJdTMyCXJ4X3J0c19kaXNjYXJkOworLyoweDIyYyovCQl1MzIJcnhfdHJhc2hfZGlzY2FyZDsKKy8qMHgyMzAqLwkJdTMyCXJ4X2J1ZmZfZnVsbF9kaXNjYXJkOworLyoweDIzNCovCQl1MzIJcnhfcmVkX2Rpc2NhcmQ7CisvKjB4MjM4Ki8JCXUzMglyeF94Z21paV9jdHJsX2Vycl9jbnQ7CisvKjB4MjNjKi8JCXUzMglyeF94Z21paV9kYXRhX2Vycl9jbnQ7CisvKjB4MjQwKi8JCXUzMglyeF94Z21paV9jaGFyMV9tYXRjaDsKKy8qMHgyNDQqLwkJdTMyCXJ4X3hnbWlpX2Vycl9zeW07CisvKjB4MjQ4Ki8JCXUzMglyeF94Z21paV9jb2x1bW4xX21hdGNoOworLyoweDI0YyovCQl1MzIJcnhfeGdtaWlfY2hhcjJfbWF0Y2g7CisvKjB4MjUwKi8JCXUzMglyeF9sb2NhbF9mYXVsdDsKKy8qMHgyNTQqLwkJdTMyCXJ4X3hnbWlpX2NvbHVtbjJfbWF0Y2g7CisvKjB4MjU4Ki8JCXUzMglyeF9qZXR0aXNvbjsKKy8qMHgyNWMqLwkJdTMyCXJ4X3JlbW90ZV9mYXVsdDsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cyAtIFhNQUMgVnBhdGggVHggU3RhdGlzdGljcworICoKKyAqIEB0eF90dGxfZXRoX2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCBNQUMgZnJhbWVzLgorICogQHR4X3R0bF9ldGhfb2N0ZXRzOiBDb3VudCBvZiB0b3RhbCBvY3RldHMgb2YgdHJhbnNtaXR0ZWQgZnJhbWVzLAorICogICAgICAgICAgICAgbm90IGluY2x1ZGluZyBmcmFtaW5nIGNoYXJhY3RlcnMgKGkuZS4gbGVzcyBmcmFtaW5nIGJpdHMpLgorICogICAgICAgICAgICAgVG8gZGV0ZXJtaW5lIHRoZSB0b3RhbCBvY3RldHMgb2YgdHJhbnNtaXR0ZWQgZnJhbWVzLCBpbmNsdWRpbmcKKyAqICAgICAgICAgICAgIGZyYW1pbmcgY2hhcmFjdGVycywgbXVsdGlwbHkgVFhfVFRMX0VUSF9GUk1TIGJ5IDggYW5kIGFkZCBpdCB0bworICogICAgICAgICAgICAgdGhpcyBzdGF0ICh0aGUgZGV2aWNlIGFsd2F5cyBwcmVwZW5kcyA4IGJ5dGVzIG9mIHByZWFtYmxlIGZvcgorICogICAgICAgICAgICAgZWFjaCBmcmFtZSkKKyAqIEB0eF9kYXRhX29jdGV0czogQ291bnQgb2YgZGF0YSBhbmQgcGFkZGluZyBvY3RldHMgb2Ygc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkCisgKiAgICAgICAgICAgICBmcmFtZXMuCisgKiBAdHhfbWNhc3RfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHRyYW5zbWl0dGVkIGZyYW1lcyB0byBhIGdyb3VwIGFkZHJlc3MKKyAqICAgICAgICAgICAgIG90aGVyIHRoYW4gdGhlIGJyb2FkY2FzdCBhZGRyZXNzLgorICogQHR4X2JjYXN0X2ZybXM6IENvdW50IG9mIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCBmcmFtZXMgdG8gdGhlIGJyb2FkY2FzdAorICogICAgICAgICAgICAgZ3JvdXAgYWRkcmVzcy4KKyAqIEB0eF91Y2FzdF9mcm1zOiBDb3VudCBvZiB0cmFuc21pdHRlZCBmcmFtZXMgY29udGFpbmluZyBhIHVuaWNhc3QgYWRkcmVzcy4KKyAqICAgICAgICAgICAgIEluY2x1ZGVzIGRpc2NhcmRlZCBmcmFtZXMgdGhhdCBhcmUgbm90IHNlbnQgdG8gdGhlIG5ldHdvcmsuCisgKiBAdHhfdGFnZ2VkX2ZybXM6IENvdW50IG9mIHRyYW5zbWl0dGVkIGZyYW1lcyBjb250YWluaW5nIGEgVkxBTiB0YWcuCisgKiBAdHhfdmxkX2lwOiBDb3VudCBvZiB0cmFuc21pdHRlZCBJUCBkYXRhZ3JhbXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBuZXR3b3JrLgorICogQHR4X3ZsZF9pcF9vY3RldHM6IENvdW50IG9mIHRvdGFsIG9jdGV0cyBvZiB0cmFuc21pdHRlZCBJUCBkYXRhZ3JhbXMgdGhhdAorICogICAgICAgICAgICBhcmUgcGFzc2VkIHRvIHRoZSBuZXR3b3JrLgorICogQHR4X2ljbXA6IENvdW50IG9mIHRyYW5zbWl0dGVkIElDTVAgbWVzc2FnZXMuIEluY2x1ZGVzIG1lc3NhZ2VzIG5vdCBzZW50IGR1ZQorICogICAgICAgICAgICB0byBwcm9ibGVtcyB3aXRoaW4gSUNNUC4KKyAqIEB0eF90Y3A6IENvdW50IG9mIHRyYW5zbWl0dGVkIFRDUCBzZWdtZW50cy4gRG9lcyBub3QgaW5jbHVkZSBzZWdtZW50cworICogICAgICAgICAgICBjb250YWluaW5nIHJldHJhbnNtaXR0ZWQgb2N0ZXRzLgorICogQHR4X3JzdF90Y3A6IENvdW50IG9mIHRyYW5zbWl0dGVkIFRDUCBzZWdtZW50cyBjb250YWluaW5nIHRoZSBSU1QgZmxhZy4KKyAqIEB0eF91ZHA6IENvdW50IG9mIHRyYW5zbWl0dGVkIFVEUCBkYXRhZ3JhbXMuCisgKiBAdHhfdW5rbm93bl9wcm90b2NvbDogSW5jcmVtZW50cyB3aGVuIHRoZSBUUEEgZW5jb3VudGVycyBhbiB1bmtub3duIHByb3RvY29sLAorICogICAgICAgICAgICBzdWNoIGFzIGEgbmV3IElQdjYgZXh0ZW5zaW9uIGhlYWRlciwgb3IgYW4gdW5zdXBwb3J0ZWQgUm91dGluZworICogICAgICAgICAgICBUeXBlLiBUaGUgcGFja2V0IHN0aWxsIGhhcyBhIGNoZWNrc3VtIGNhbGN1bGF0ZWQgYnV0IGl0IG1heSBiZQorICogICAgICAgICAgICBpbmNvcnJlY3QuCisgKiBAdHhfbG9zdF9pcDogQ291bnQgb2YgdHJhbnNtaXR0ZWQgSVAgZGF0YWdyYW1zIHRoYXQgY291bGQgbm90IGJlIHBhc3NlZAorICogICAgICAgICAgICB0byB0aGUgbmV0d29yay4gSW5jcmVtZW50cyBiZWNhdXNlIG9mOiAxKSBBbiBpbnRlcm5hbCBwcm9jZXNzaW5nCisgKiAgICAgICAgICAgIGVycm9yIChzdWNoIGFzIGFuIHVuY29ycmVjdGFibGUgRUNDIGVycm9yKS4gMikgQSBmcmFtZSBwYXJzaW5nCisgKiAgICAgICAgICAgIGVycm9yIGR1cmluZyBJUCBjaGVja3N1bSBjYWxjdWxhdGlvbi4KKyAqIEB0eF9wYXJzZV9lcnJvcjogSW5jcmVtZW50cyB3aGVuIHRoZSBUUEEgaXMgdW5hYmxlIHRvIHBhcnNlIGEgcGFja2V0LiBUaGlzCisgKiAgICAgICAgICAgIGdlbmVyYWxseSBvY2N1cnMgd2hlbiBhIHBhY2tldCBpcyBjb3JydXB0IHNvbWVob3csIGluY2x1ZGluZworICogICAgICAgICAgICBwYWNrZXRzIHRoYXQgaGF2ZSBJUCB2ZXJzaW9uIG1pc21hdGNoZXMsIGludmFsaWQgTGF5ZXIgMiBjb250cm9sCisgKiAgICAgICAgICAgIGZpZWxkcywgZXRjLiBMMy9MNCBjaGVja3N1bXMgYXJlIG5vdCBvZmZsb2FkZWQsIGJ1dCB0aGUgcGFja2V0CisgKiAgICAgICAgICAgIGlzIHN0aWxsIGJlIHRyYW5zbWl0dGVkLgorICogQHR4X3RjcF9vZmZsb2FkOiBGb3IgZnJhbWVzIGJlbG9uZ2luZyB0byBvZmZsb2FkZWQgc2Vzc2lvbnMgb25seSwgYSBjb3VudAorICogICAgICAgICAgICBvZiB0cmFuc21pdHRlZCBUQ1Agc2VnbWVudHMuIERvZXMgbm90IGluY2x1ZGUgc2VnbWVudHMgY29udGFpbmluZworICogICAgICAgICAgICByZXRyYW5zbWl0dGVkIG9jdGV0cy4KKyAqIEB0eF9yZXR4X3RjcF9vZmZsb2FkOiBGb3IgZnJhbWVzIGJlbG9uZ2luZyB0byBvZmZsb2FkZWQgc2Vzc2lvbnMgb25seSwgdGhlCisgKiAgICAgICAgICAgIHRvdGFsIG51bWJlciBvZiBzZWdtZW50cyByZXRyYW5zbWl0dGVkLiBSZXRyYW5zbWl0dGVkIHNlZ21lbnRzCisgKiAgICAgICAgICAgIHRoYXQgYXJlIHNvdXJjZWQgYnkgdGhlIGhvc3QgYXJlIGNvdW50ZWQgYnkgdGhlIGhvc3QuCisgKiBAdHhfbG9zdF9pcF9vZmZsb2FkOiBGb3IgZnJhbWVzIGJlbG9uZ2luZyB0byBvZmZsb2FkZWQgc2Vzc2lvbnMgb25seSwgYSBjb3VudAorICogICAgICAgICAgICBvZiB0cmFuc21pdHRlZCBJUCBkYXRhZ3JhbXMgdGhhdCBjb3VsZCBub3QgYmUgcGFzc2VkIHRvIHRoZQorICogICAgICAgICAgICBuZXR3b3JrLgorICoKKyAqIFhNQUMgVnBhdGggVFggU3RhdGlzdGljcy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cyB7CisJdTY0CXR4X3R0bF9ldGhfZnJtczsKKwl1NjQJdHhfdHRsX2V0aF9vY3RldHM7CisJdTY0CXR4X2RhdGFfb2N0ZXRzOworCXU2NAl0eF9tY2FzdF9mcm1zOworCXU2NAl0eF9iY2FzdF9mcm1zOworCXU2NAl0eF91Y2FzdF9mcm1zOworCXU2NAl0eF90YWdnZWRfZnJtczsKKwl1NjQJdHhfdmxkX2lwOworCXU2NAl0eF92bGRfaXBfb2N0ZXRzOworCXU2NAl0eF9pY21wOworCXU2NAl0eF90Y3A7CisJdTY0CXR4X3JzdF90Y3A7CisJdTY0CXR4X3VkcDsKKwl1MzIJdHhfdW5rbm93bl9wcm90b2NvbDsKKwl1MzIJdHhfbG9zdF9pcDsKKwl1MzIJdW51c2VkMTsKKwl1MzIJdHhfcGFyc2VfZXJyb3I7CisJdTY0CXR4X3RjcF9vZmZsb2FkOworCXU2NAl0eF9yZXR4X3RjcF9vZmZsb2FkOworCXU2NAl0eF9sb3N0X2lwX29mZmxvYWQ7Cit9IF9fcGFja2VkOworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMgLSBYTUFDIFZwYXRoIFJYIFN0YXRpc3RpY3MKKyAqCisgKiBAcnhfdHRsX2V0aF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTUFDIGZyYW1lcy4KKyAqIEByeF92bGRfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIE1BQyBmcmFtZXMuIERvZXMgbm90IGluY2x1ZGUKKyAqICAgICAgICAgICAgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF9vZmZsb2FkX2ZybXM6IENvdW50IG9mIG9mZmxvYWRlZCByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgcGFzc2VkIHRvCisgKiAgICAgICAgICAgIHRoZSBob3N0LgorICogQHJ4X3R0bF9ldGhfb2N0ZXRzOiBDb3VudCBvZiB0b3RhbCBvY3RldHMgb2YgcmVjZWl2ZWQgZnJhbWVzLCBub3QgaW5jbHVkaW5nCisgKiAgICAgICAgICAgIGZyYW1pbmcgY2hhcmFjdGVycyAoaS5lLiBsZXNzIGZyYW1pbmcgYml0cykuIE9ubHkgY291bnRzIG9jdGV0cworICogICAgICAgICAgICBvZiBmcmFtZXMgdGhhdCBhcmUgYXQgbGVhc3QgMTQgYnl0ZXMgKDE4IGJ5dGVzIGZvciBWTEFOLXRhZ2dlZCkKKyAqICAgICAgICAgICAgYmVmb3JlIEZDUy4gVG8gZGV0ZXJtaW5lIHRoZSB0b3RhbCBvY3RldHMgb2YgcmVjZWl2ZWQgZnJhbWVzLAorICogICAgICAgICAgICBpbmNsdWRpbmcgZnJhbWluZyBjaGFyYWN0ZXJzLCBtdWx0aXBseSBSWF9UVExfRVRIX0ZSTVMgYnkgOCBhbmQKKyAqICAgICAgICAgICAgYWRkIGl0IHRvIHRoaXMgc3RhdCAodGhlIHN0YXQgUlhfVFRMX0VUSF9GUk1TIG9ubHkgY291bnRzIGZyYW1lcworICogICAgICAgICAgICB0aGF0IGhhdmUgdGhlIHJlcXVpcmVkIDggYnl0ZXMgb2YgcHJlYW1ibGUpLgorICogQHJ4X2RhdGFfb2N0ZXRzOiBDb3VudCBvZiBkYXRhIGFuZCBwYWRkaW5nIG9jdGV0cyBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgZnJhbWVzLiBEb2VzIG5vdCBpbmNsdWRlIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfb2ZmbG9hZF9vY3RldHM6IENvdW50IG9mIHRvdGFsIG9jdGV0cywgbm90IGluY2x1ZGluZyBmcmFtaW5nIGNoYXJhY3RlcnMsCisgKiAgICAgICAgICAgIG9mIG9mZmxvYWRlZCByZWNlaXZlZCBmcmFtZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBob3N0LgorICogQHJ4X3ZsZF9tY2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgTUFDIGZyYW1lcyBjb250YWluaW5nIGEKKyAqICAgICAgICAgICAgbm9uYnJvYWRjYXN0IGdyb3VwIGFkZHJlc3MuIERvZXMgbm90IGluY2x1ZGUgZnJhbWVzIHJlY2VpdmVkIHdpdGgKKyAqICAgICAgICAgICAgZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF92bGRfYmNhc3RfZnJtczogQ291bnQgb2Ygc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIE1BQyBmcmFtZXMgY29udGFpbmluZyB0aGUKKyAqICAgICAgICAgICAgYnJvYWRjYXN0IGdyb3VwIGFkZHJlc3MuIERvZXMgbm90IGluY2x1ZGUgZnJhbWVzIHJlY2VpdmVkIHdpdGgKKyAqICAgICAgICAgICAgZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF9hY2NlcHRlZF91Y2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgZnJhbWVzIGNvbnRhaW5pbmcKKyAqICAgICAgICAgICAgYSB1bmljYXN0IGFkZHJlc3MuIE9ubHkgaW5jbHVkZXMgZnJhbWVzIHRoYXQgYXJlIHBhc3NlZCB0byB0aGUKKyAqICAgICAgICAgICAgc3lzdGVtLgorICogQHJ4X2FjY2VwdGVkX251Y2FzdF9mcm1zOiBDb3VudCBvZiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgZnJhbWVzIGNvbnRhaW5pbmcKKyAqICAgICAgICAgICAgYSBub24tdW5pY2FzdCAoYnJvYWRjYXN0IG9yIG11bHRpY2FzdCkgYWRkcmVzcy4gT25seSBpbmNsdWRlcworICogICAgICAgICAgICBmcmFtZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBzeXN0ZW0uIENvdWxkIGluY2x1ZGUsIGZvciBpbnN0YW5jZSwKKyAqICAgICAgICAgICAgbm9uLXVuaWNhc3QgZnJhbWVzIHRoYXQgY29udGFpbiBGQ1MgZXJyb3JzIGlmIHRoZSBNQUNfRVJST1JfQ0ZHCisgKiAgICAgICAgICAgIHJlZ2lzdGVyIGlzIHNldCB0byBwYXNzIEZDUy1lcnJvcmVkIGZyYW1lcyB0byB0aGUgaG9zdC4KKyAqIEByeF90YWdnZWRfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIGNvbnRhaW5pbmcgYSBWTEFOIHRhZy4KKyAqIEByeF9sb25nX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBsb25nZXIgdGhhbiBSWF9NQVhfUFlMRF9MRU4KKyAqICAgICAgICAgICAgKyAxOCBieXRlcyAoKyAyMiBieXRlcyBpZiBWTEFOLXRhZ2dlZCkuCisgKiBAcnhfdXNpemVkX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyBvZiBsZW5ndGggKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QKKyAqICAgICAgICAgICAgZnJhbWluZyBiaXRzKSBsZXNzIHRoYW4gNjQgb2N0ZXRzLCB0aGF0IGFyZSBvdGhlcndpc2Ugd2VsbC1mb3JtZWQuCisgKiAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBjb3VudHMgcnVudHMuCisgKiBAcnhfb3NpemVkX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyBvZiBsZW5ndGggKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QKKyAqICAgICAgICAgICAgZnJhbWluZyBiaXRzKSBtb3JlIHRoYW4gMTUxOCBvY3RldHMsIHRoYXQgYXJlIG90aGVyd2lzZQorICogICAgICAgICAgICB3ZWxsLWZvcm1lZC4KKyAqIEByeF9mcmFnX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyBvZiBsZW5ndGggKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QKKyAqICAgICAgICAgICAgZnJhbWluZyBiaXRzKSBsZXNzIHRoYW4gNjQgb2N0ZXRzIHRoYXQgaGFkIGJhZCBGQ1MuCisgKiAgICAgICAgICAgIEluIG90aGVyIHdvcmRzLCBjb3VudHMgZnJhZ21lbnRzLgorICogQHJ4X2phYmJlcl9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMgb2YgbGVuZ3RoIChpbmNsdWRpbmcgRkNTLCBidXQgbm90CisgKiAgICAgICAgICAgIGZyYW1pbmcgYml0cykgbW9yZSB0aGFuIDE1MTggb2N0ZXRzIHRoYXQgaGFkIGJhZCBGQ1MuIEluIG90aGVyCisgKiAgICAgICAgICAgIHdvcmRzLCBjb3VudHMgamFiYmVycy4KKyAqIEByeF90dGxfNjRfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aCAoaW5jbHVkaW5nCisgKiAgICAgICAgICAgIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGV4YWN0bHkgNjQgb2N0ZXRzLiBJbmNsdWRlcyBmcmFtZXMKKyAqICAgICAgICAgICAgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF82NV8xMjdfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcworICogCQl3aXRoIGxlbmd0aCAoaW5jbHVkaW5nCisgKiAgICAgICAgICAgIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gNjUgYW5kIDEyNyBvY3RldHMgaW5jbHVzaXZlLgorICogICAgICAgICAgICBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLAorICogICAgICAgICAgICBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF8xMjhfMjU1X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKQorICogICAgICAgICAgICBvZiBiZXR3ZWVuIDEyOCBhbmQgMjU1IG9jdGV0cworICogICAgICAgICAgICBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLCBGQ1MsCisgKiAgICAgICAgICAgIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzI1Nl81MTFfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpCisgKiAgICAgICAgICAgIG9mIGJldHdlZW4gMjU2IGFuZCA1MTEgb2N0ZXRzCisgKiAgICAgICAgICAgIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IKKyAqICAgICAgICAgICAgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF90dGxfNTEyXzEwMjNfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIG9mIGJldHdlZW4gNTEyIGFuZCAxMDIzCisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzEwMjRfMTUxOF9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiAxMDI0IGFuZCAxNTE4CisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzE1MTlfNDA5NV9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiAxNTE5IGFuZCA0MDk1CisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzQwOTZfODE5MV9mcm1zOiBDb3VudCBvZiB0b3RhbCByZWNlaXZlZCBNQUMgZnJhbWVzIHdpdGggbGVuZ3RoCisgKiAgICAgICAgICAgIChpbmNsdWRpbmcgRkNTLCBidXQgbm90IGZyYW1pbmcgYml0cykgb2YgYmV0d2VlbiA0MDk2IGFuZCA4MTkxCisgKiAgICAgICAgICAgIG9jdGV0cyBpbmNsdXNpdmUuIEluY2x1ZGVzIGZyYW1lcyByZWNlaXZlZCB3aXRoIGZyYW1lLXRvby1sb25nLAorICogICAgICAgICAgICBGQ1MsIG9yIGxlbmd0aCBlcnJvcnMuCisgKiBAcnhfdHRsXzgxOTJfbWF4X2ZybXM6IENvdW50IG9mIHRvdGFsIHJlY2VpdmVkIE1BQyBmcmFtZXMgd2l0aCBsZW5ndGgKKyAqICAgICAgICAgICAgKGluY2x1ZGluZyBGQ1MsIGJ1dCBub3QgZnJhbWluZyBiaXRzKSBvZiBiZXR3ZWVuIDgxOTIgYW5kCisgKiAgICAgICAgICAgIFJYX01BWF9QWUxEX0xFTisxOCBvY3RldHMgaW5jbHVzaXZlLiBJbmNsdWRlcyBmcmFtZXMgcmVjZWl2ZWQKKyAqICAgICAgICAgICAgd2l0aCBmcmFtZS10b28tbG9uZywgRkNTLCBvciBsZW5ndGggZXJyb3JzLgorICogQHJ4X3R0bF9ndF9tYXhfZnJtczogQ291bnQgb2YgdG90YWwgcmVjZWl2ZWQgTUFDIGZyYW1lcyB3aXRoIGxlbmd0aAorICogICAgICAgICAgICAoaW5jbHVkaW5nIEZDUywgYnV0IG5vdCBmcmFtaW5nIGJpdHMpIGV4Y2VlZGluZyBSWF9NQVhfUFlMRF9MRU4rMTgKKyAqICAgICAgICAgICAgKCsyMiBieXRlcyBpZiBWTEFOLXRhZ2dlZCkgb2N0ZXRzIGluY2x1c2l2ZS4gSW5jbHVkZXMgZnJhbWVzCisgKiAgICAgICAgICAgIHJlY2VpdmVkIHdpdGggZnJhbWUtdG9vLWxvbmcsIEZDUywgb3IgbGVuZ3RoIGVycm9ycy4KKyAqIEByeF9pcDogQ291bnQgb2YgcmVjZWl2ZWQgSVAgZGF0YWdyYW1zLiBJbmNsdWRlcyBlcnJvcmVkIElQIGRhdGFncmFtcy4KKyAqIEByeF9hY2NlcHRlZF9pcDogQ291bnQgb2YgcmVjZWl2ZWQgSVAgZGF0YWdyYW1zIHRoYXQKKyAqIAkJYXJlIHBhc3NlZCB0byB0aGUgc3lzdGVtLgorICogQHJ4X2lwX29jdGV0czogQ291bnQgb2YgbnVtYmVyIG9mIG9jdGV0cyBpbiByZWNlaXZlZCBJUCBkYXRhZ3JhbXMuCisgKiAgICAgICAgICAgIEluY2x1ZGVzIGVycm9yZWQgSVAgZGF0YWdyYW1zLgorICogQHJ4X2Vycl9pcDogQ291bnQgb2YgcmVjZWl2ZWQgSVAgZGF0YWdyYW1zIGNvbnRhaW5pbmcgZXJyb3JzLiBGb3IgZXhhbXBsZSwKKyAqICAgICAgICAgICAgYmFkIElQIGNoZWNrc3VtLgorICogQHJ4X2ljbXA6IENvdW50IG9mIHJlY2VpdmVkIElDTVAgbWVzc2FnZXMuIEluY2x1ZGVzIGVycm9yZWQgSUNNUCBtZXNzYWdlcy4KKyAqIEByeF90Y3A6IENvdW50IG9mIHJlY2VpdmVkIFRDUCBzZWdtZW50cy4gSW5jbHVkZXMgZXJyb3JlZCBUQ1Agc2VnbWVudHMuCisgKiAgICAgICAgICAgICBOb3RlOiBUaGlzIHN0YXQgY29udGFpbnMgYSBjb3VudCBvZiBhbGwgcmVjZWl2ZWQgVENQIHNlZ21lbnRzLAorICogICAgICAgICAgICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCB0aGV5IHBlcnRhaW4gdG8gYW4gZXN0YWJsaXNoZWQKKyAqICAgICAgICAgICAgIGNvbm5lY3Rpb24uCisgKiBAcnhfdWRwOiBDb3VudCBvZiByZWNlaXZlZCBVRFAgZGF0YWdyYW1zLgorICogQHJ4X2Vycl90Y3A6IENvdW50IG9mIHJlY2VpdmVkIFRDUCBzZWdtZW50cyBjb250YWluaW5nIGVycm9ycy4gRm9yIGV4YW1wbGUsCisgKiAgICAgICAgICAgICBiYWQgVENQIGNoZWNrc3VtLgorICogQHJ4X2xvc3RfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgY291bGQgbm90IGJlIHBhc3NlZCB0byB0aGUgaG9zdC4KKyAqICAgICAgICAgICAgIFNlZSBSWF9RVUVVRV9GVUxMX0RJU0NBUkQgYW5kIFJYX1JFRF9ESVNDQVJECisgKiAgICAgICAgICAgICBmb3IgYSBsaXN0IG9mIHJlYXNvbnMuCisgKiBAcnhfbG9zdF9pcDogQ291bnQgb2YgcmVjZWl2ZWQgSVAgZGF0YWdyYW1zIHRoYXQgY291bGQgbm90IGJlIHBhc3NlZCB0bworICogICAgICAgICAgICAgdGhlIGhvc3QuIFNlZSBSWF9MT1NUX0ZSTVMgZm9yIGEgbGlzdCBvZiByZWFzb25zLgorICogQHJ4X2xvc3RfaXBfb2ZmbG9hZDogRm9yIGZyYW1lcyBiZWxvbmdpbmcgdG8gb2ZmbG9hZGVkIHNlc3Npb25zIG9ubHksIGEgY291bnQKKyAqICAgICAgICAgICAgIG9mIHJlY2VpdmVkIElQIGRhdGFncmFtcyB0aGF0IGNvdWxkIG5vdCBiZSBwYXNzZWQgdG8gdGhlIGhvc3QuCisgKiAgICAgICAgICAgICBTZWUgUlhfTE9TVF9GUk1TIGZvciBhIGxpc3Qgb2YgcmVhc29ucy4KKyAqIEByeF92YXJpb3VzX2Rpc2NhcmQ6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQgYmVjYXVzZQorICogICAgICAgICAgICAgdGhlIHRhcmdldCByZWNlaXZlIHF1ZXVlIGlzIGZ1bGwuCisgKiBAcnhfc2xlZXBfZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBiZWNhdXNlIHRoZQorICogICAgICAgICAgICB0YXJnZXQgVlBBVEggaXMgYXNsZWVwIChhIFdha2Utb24tTEFOIG1hZ2ljIHBhY2tldCBjYW4gYmUgdXNlZAorICogICAgICAgICAgICB0byBhd2FrZW4gdGhlIFZQQVRIKS4KKyAqIEByeF9yZWRfZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBiZWNhdXNlIG9mIFJFRAorICogICAgICAgICAgICAoUmFuZG9tIEVhcmx5IERpc2NhcmQpLgorICogQHJ4X3F1ZXVlX2Z1bGxfZGlzY2FyZDogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZCBiZWNhdXNlCisgKiAgICAgICAgICAgICB0aGUgdGFyZ2V0IHJlY2VpdmUgcXVldWUgaXMgZnVsbC4KKyAqIEByeF9tcGFfb2tfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgcGFzcyB0aGUgTVBBIGNoZWNrcy4KKyAqCisgKiBYTUFDIFZwYXRoIFJYIFN0YXRpc3RpY3MuCisgKi8KK3N0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMgeworCXU2NAlyeF90dGxfZXRoX2ZybXM7CisJdTY0CXJ4X3ZsZF9mcm1zOworCXU2NAlyeF9vZmZsb2FkX2ZybXM7CisJdTY0CXJ4X3R0bF9ldGhfb2N0ZXRzOworCXU2NAlyeF9kYXRhX29jdGV0czsKKwl1NjQJcnhfb2ZmbG9hZF9vY3RldHM7CisJdTY0CXJ4X3ZsZF9tY2FzdF9mcm1zOworCXU2NAlyeF92bGRfYmNhc3RfZnJtczsKKwl1NjQJcnhfYWNjZXB0ZWRfdWNhc3RfZnJtczsKKwl1NjQJcnhfYWNjZXB0ZWRfbnVjYXN0X2ZybXM7CisJdTY0CXJ4X3RhZ2dlZF9mcm1zOworCXU2NAlyeF9sb25nX2ZybXM7CisJdTY0CXJ4X3VzaXplZF9mcm1zOworCXU2NAlyeF9vc2l6ZWRfZnJtczsKKwl1NjQJcnhfZnJhZ19mcm1zOworCXU2NAlyeF9qYWJiZXJfZnJtczsKKwl1NjQJcnhfdHRsXzY0X2ZybXM7CisJdTY0CXJ4X3R0bF82NV8xMjdfZnJtczsKKwl1NjQJcnhfdHRsXzEyOF8yNTVfZnJtczsKKwl1NjQJcnhfdHRsXzI1Nl81MTFfZnJtczsKKwl1NjQJcnhfdHRsXzUxMl8xMDIzX2ZybXM7CisJdTY0CXJ4X3R0bF8xMDI0XzE1MThfZnJtczsKKwl1NjQJcnhfdHRsXzE1MTlfNDA5NV9mcm1zOworCXU2NAlyeF90dGxfNDA5Nl84MTkxX2ZybXM7CisJdTY0CXJ4X3R0bF84MTkyX21heF9mcm1zOworCXU2NAlyeF90dGxfZ3RfbWF4X2ZybXM7CisJdTY0CXJ4X2lwOworCXU2NAlyeF9hY2NlcHRlZF9pcDsKKwl1NjQJcnhfaXBfb2N0ZXRzOworCXU2NAlyeF9lcnJfaXA7CisJdTY0CXJ4X2ljbXA7CisJdTY0CXJ4X3RjcDsKKwl1NjQJcnhfdWRwOworCXU2NAlyeF9lcnJfdGNwOworCXU2NAlyeF9sb3N0X2ZybXM7CisJdTY0CXJ4X2xvc3RfaXA7CisJdTY0CXJ4X2xvc3RfaXBfb2ZmbG9hZDsKKwl1MTYJcnhfdmFyaW91c19kaXNjYXJkOworCXUxNglyeF9zbGVlcF9kaXNjYXJkOworCXUxNglyeF9yZWRfZGlzY2FyZDsKKwl1MTYJcnhfcXVldWVfZnVsbF9kaXNjYXJkOworCXU2NAlyeF9tcGFfb2tfZnJtczsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfeG1hY19zdGF0cyAtIFhNQUMgU3RhdGlzdGljcworICoKKyAqIEBhZ2dyX3N0YXRzOiBTdGF0aXN0aWNzIG9uIGFnZ3JlZ2F0ZSBwb3J0KHBvcnQgMCwgcG9ydCAxKQorICogQHBvcnRfc3RhdHM6IFN0YXRpY3N0aWNzIG9uIHBvcnRzKHdpcmUgMCwgd2lyZSAxLCBsYWcpCisgKiBAdnBhdGhfdHhfc3RhdHM6IFBlciB2cGF0aCBYTUFDIFRYIHN0YXRzCisgKiBAdnBhdGhfcnhfc3RhdHM6IFBlciB2cGF0aCBYTUFDIFJYIHN0YXRzCisgKgorICogWE1BQyBTdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgdnhnZV9od194bWFjX3N0YXRzIHsKKwlzdHJ1Y3QgdnhnZV9od194bWFjX2FnZ3Jfc3RhdHMKKwkJCQlhZ2dyX3N0YXRzW1ZYR0VfSFdfTUFDX01BWF9NQUNfUE9SVF9JRF07CisJc3RydWN0IHZ4Z2VfaHdfeG1hY19wb3J0X3N0YXRzCisJCQkJcG9ydF9zdGF0c1tWWEdFX0hXX01BQ19NQVhfTUFDX1BPUlRfSUQrMV07CisJc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cworCQkJCXZwYXRoX3R4X3N0YXRzW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworCXN0cnVjdCB2eGdlX2h3X3htYWNfdnBhdGhfcnhfc3RhdHMKKwkJCQl2cGF0aF9yeF9zdGF0c1tWWEdFX0hXX01BWF9WSVJUVUFMX1BBVEhTXTsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbyAtIFRpdGFuIHZwYXRoIGhhcmR3YXJlIHN0YXRpc3RpY3MuCisgKiBAaW5pX251bV9td3Jfc2VudDogVGhlIG51bWJlciBvZiBQQ0kgbWVtb3J5IHdyaXRlcyBpbml0aWF0ZWQgYnkgdGhlIFBJQyBibG9jaworICogICAgICAgICAgICAgZm9yIHRoZSBnaXZlbiBWUEFUSAorICogQGluaV9udW1fbXJkX3NlbnQ6IFRoZSBudW1iZXIgb2YgUENJIG1lbW9yeSByZWFkcyBpbml0aWF0ZWQgYnkgdGhlIFBJQyBibG9jaworICogQGluaV9udW1fY3BsX3JjdmQ6IFRoZSBudW1iZXIgb2YgUENJIHJlYWQgY29tcGxldGlvbnMgcmVjZWl2ZWQgYnkgdGhlCisgKiAgICAgICAgICAgICBQSUMgYmxvY2sKKyAqIEBpbmlfbnVtX213cl9ieXRlX3NlbnQ6IFRoZSBudW1iZXIgb2YgUENJIG1lbW9yeSB3cml0ZSBieXRlcyBzZW50IGJ5IHRoZSBQSUMKKyAqICAgICAgICAgICAgIGJsb2NrIHRvIHRoZSBob3N0CisgKiBAaW5pX251bV9jcGxfYnl0ZV9yY3ZkOiBUaGUgbnVtYmVyIG9mIFBDSSByZWFkIGNvbXBsZXRpb24gYnl0ZXMgcmVjZWl2ZWQgYnkKKyAqICAgICAgICAgICAgIHRoZSBQSUMgYmxvY2sKKyAqIEB3cmNyZHRhcmJfeG9mZjogVEJECisgKiBAcmRjcmR0YXJiX3hvZmY6IFRCRAorICogQHZwYXRoX2dlbnN0YXRzX2NvdW50MDogVEJECisgKiBAdnBhdGhfZ2Vuc3RhdHNfY291bnQxOiBUQkQKKyAqIEB2cGF0aF9nZW5zdGF0c19jb3VudDI6IFRCRAorICogQHZwYXRoX2dlbnN0YXRzX2NvdW50MzogVEJECisgKiBAdnBhdGhfZ2Vuc3RhdHNfY291bnQ0OiBUQkQKKyAqIEB2cGF0aF9nZW5uc3RhdHNfY291bnQ1OiBUQkQKKyAqIEB0eF9zdGF0czogVHJhbnNtaXQgc3RhdHMKKyAqIEByeF9zdGF0czogUmVjZWl2ZSBzdGF0cworICogQHByb2dfZXZlbnRfdm51bTE6IFByb2dyYW1tYWJsZSBzdGF0aXN0aWMuIEluY3JlbWVudHMgd2hlbiBpbnRlcm5hbCBsb2dpYworICogICAgICAgICAgICAgZGV0ZWN0cyBhIGNlcnRhaW4gZXZlbnQuIFNlZSByZWdpc3RlcgorICogICAgICAgICAgICAgWE1BQ19TVEFUU19DRkcuRVZFTlRfVk5VTTFfQ0ZHIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICogQHByb2dfZXZlbnRfdm51bTA6IFByb2dyYW1tYWJsZSBzdGF0aXN0aWMuIEluY3JlbWVudHMgd2hlbiBpbnRlcm5hbCBsb2dpYworICogICAgICAgICAgICAgZGV0ZWN0cyBhIGNlcnRhaW4gZXZlbnQuIFNlZSByZWdpc3RlcgorICogICAgICAgICAgICAgWE1BQ19TVEFUU19DRkcuRVZFTlRfVk5VTTBfQ0ZHIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICogQHByb2dfZXZlbnRfdm51bTM6IFByb2dyYW1tYWJsZSBzdGF0aXN0aWMuIEluY3JlbWVudHMgd2hlbiBpbnRlcm5hbCBsb2dpYworICogICAgICAgICAgICAgZGV0ZWN0cyBhIGNlcnRhaW4gZXZlbnQuIFNlZSByZWdpc3RlcgorICogICAgICAgICAgICAgWE1BQ19TVEFUU19DRkcuRVZFTlRfVk5VTTNfQ0ZHIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICogQHByb2dfZXZlbnRfdm51bTI6IFByb2dyYW1tYWJsZSBzdGF0aXN0aWMuIEluY3JlbWVudHMgd2hlbiBpbnRlcm5hbCBsb2dpYworICogICAgICAgICAgICAgZGV0ZWN0cyBhIGNlcnRhaW4gZXZlbnQuIFNlZSByZWdpc3RlcgorICogICAgICAgICAgICAgWE1BQ19TVEFUU19DRkcuRVZFTlRfVk5VTTJfQ0ZHIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICogQHJ4X211bHRpX2Nhc3RfZnJhbWVfZGlzY2FyZDogVEJECisgKiBAcnhfZnJtX3RyYW5zZmVycmVkOiBUQkQKKyAqIEByeGRfcmV0dXJuZWQ6IFRCRAorICogQHJ4X21wYV9sZW5fZmFpbF9mcm1zOiBDb3VudCBvZiByZWNlaXZlZCBmcmFtZXMKKyAqIAkJdGhhdCBmYWlsIHRoZSBNUEEgbGVuZ3RoIGNoZWNrCisgKiBAcnhfbXBhX21ya19mYWlsX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkIGZyYW1lcworICogCQl0aGF0IGZhaWwgdGhlIE1QQSBtYXJrZXIgY2hlY2sKKyAqIEByeF9tcGFfY3JjX2ZhaWxfZnJtczogQ291bnQgb2YgcmVjZWl2ZWQgZnJhbWVzIHRoYXQgZmFpbCB0aGUgTVBBIENSQyBjaGVjaworICogQHJ4X3Blcm1pdHRlZF9mcm1zOiBDb3VudCBvZiBmcmFtZXMgdGhhdCBwYXNzIHRocm91Z2ggdGhlIEZBVSBhbmQgb24gdG8gdGhlCisgKiAgICAgICAgICAgICBmcmFtZSBidWZmZXIgKGFuZCBzdWJzZXF1ZW50bHkgdG8gdGhlIGhvc3QpLgorICogQHJ4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zOiBDb3VudCBvZiByZWNlaXZlIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQKKyAqICAgICAgICAgICAgIGJlY2F1c2UgdGhlIFZQQVRIIGlzIGluIHJlc2V0CisgKiBAcnhfd29sX2ZybXM6IENvdW50IG9mIHJlY2VpdmVkICJtYWdpYyBwYWNrZXQiIGZyYW1lcy4gU3RhdCBpbmNyZW1lbnRzCisgKiAgICAgICAgICAgICB3aGVuZXZlciB0aGUgcmVjZWl2ZWQgZnJhbWUgbWF0Y2hlcyB0aGUgVlBBVEgncyBXYWtlLW9uLUxBTgorICogICAgICAgICAgICAgc2lnbmF0dXJlKHMpIENSQy4KKyAqIEB0eF92cF9yZXNldF9kaXNjYXJkZWRfZnJtczogQ291bnQgb2YgdHJhbnNtaXQgZnJhbWVzIHRoYXQgYXJlIGRpc2NhcmRlZAorICogICAgICAgICAgICAgYmVjYXVzZSB0aGUgVlBBVEggaXMgaW4gcmVzZXQuIEluY2x1ZGVzIGZyYW1lcyB0aGF0IGFyZSBkaXNjYXJkZWQKKyAqICAgICAgICAgICAgIGJlY2F1c2UgdGhlIGN1cnJlbnQgVlBJTiBkb2VzIG5vdCBtYXRjaCB0aGF0IFZQSU4gb2YgdGhlIGZyYW1lCisgKgorICogVGl0YW4gdnBhdGggaGFyZHdhcmUgc3RhdGlzdGljcy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfaHdfaW5mbyB7CisvKjB4MDAwKi8JdTMyIGluaV9udW1fbXdyX3NlbnQ7CisvKjB4MDA0Ki8JdTMyIHVudXNlZDE7CisvKjB4MDA4Ki8JdTMyIGluaV9udW1fbXJkX3NlbnQ7CisvKjB4MDBjKi8JdTMyIHVudXNlZDI7CisvKjB4MDEwKi8JdTMyIGluaV9udW1fY3BsX3JjdmQ7CisvKjB4MDE0Ki8JdTMyIHVudXNlZDM7CisvKjB4MDE4Ki8JdTY0IGluaV9udW1fbXdyX2J5dGVfc2VudDsKKy8qMHgwMjAqLwl1NjQgaW5pX251bV9jcGxfYnl0ZV9yY3ZkOworLyoweDAyOCovCXUzMiB3cmNyZHRhcmJfeG9mZjsKKy8qMHgwMmMqLwl1MzIgdW51c2VkNDsKKy8qMHgwMzAqLwl1MzIgcmRjcmR0YXJiX3hvZmY7CisvKjB4MDM0Ki8JdTMyIHVudXNlZDU7CisvKjB4MDM4Ki8JdTMyIHZwYXRoX2dlbnN0YXRzX2NvdW50MDsKKy8qMHgwM2MqLwl1MzIgdnBhdGhfZ2Vuc3RhdHNfY291bnQxOworLyoweDA0MCovCXUzMiB2cGF0aF9nZW5zdGF0c19jb3VudDI7CisvKjB4MDQ0Ki8JdTMyIHZwYXRoX2dlbnN0YXRzX2NvdW50MzsKKy8qMHgwNDgqLwl1MzIgdnBhdGhfZ2Vuc3RhdHNfY291bnQ0OworLyoweDA0YyovCXUzMiB1bnVzZWQ2OworLyoweDA1MCovCXUzMiB2cGF0aF9nZW5zdGF0c19jb3VudDU7CisvKjB4MDU0Ki8JdTMyIHVudXNlZDc7CisvKjB4MDU4Ki8Jc3RydWN0IHZ4Z2VfaHdfeG1hY192cGF0aF90eF9zdGF0cyB0eF9zdGF0czsKKy8qMHgwZTgqLwlzdHJ1Y3QgdnhnZV9od194bWFjX3ZwYXRoX3J4X3N0YXRzIHJ4X3N0YXRzOworLyoweDIyMCovCXU2NCB1bnVzZWQ5OworLyoweDIyOCovCXUzMiBwcm9nX2V2ZW50X3ZudW0xOworLyoweDIyYyovCXUzMiBwcm9nX2V2ZW50X3ZudW0wOworLyoweDIzMCovCXUzMiBwcm9nX2V2ZW50X3ZudW0zOworLyoweDIzNCovCXUzMiBwcm9nX2V2ZW50X3ZudW0yOworLyoweDIzOCovCXUxNiByeF9tdWx0aV9jYXN0X2ZyYW1lX2Rpc2NhcmQ7CisvKjB4MjNhKi8JdTggdW51c2VkMTBbNl07CisvKjB4MjQwKi8JdTMyIHJ4X2ZybV90cmFuc2ZlcnJlZDsKKy8qMHgyNDQqLwl1MzIgdW51c2VkMTE7CisvKjB4MjQ4Ki8JdTE2IHJ4ZF9yZXR1cm5lZDsKKy8qMHgyNGEqLwl1OCB1bnVzZWQxMls2XTsKKy8qMHgyNTIqLwl1MTYgcnhfbXBhX2xlbl9mYWlsX2ZybXM7CisvKjB4MjU0Ki8JdTE2IHJ4X21wYV9tcmtfZmFpbF9mcm1zOworLyoweDI1NiovCXUxNiByeF9tcGFfY3JjX2ZhaWxfZnJtczsKKy8qMHgyNTgqLwl1MTYgcnhfcGVybWl0dGVkX2ZybXM7CisvKjB4MjVjKi8JdTY0IHJ4X3ZwX3Jlc2V0X2Rpc2NhcmRlZF9mcm1zOworLyoweDI1ZSovCXU2NCByeF93b2xfZnJtczsKKy8qMHgyNjAqLwl1NjQgdHhfdnBfcmVzZXRfZGlzY2FyZGVkX2ZybXM7Cit9IF9fcGFja2VkOworCisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX21ycGNpbV9pbmZvIC0gVGl0YW4gbXJwY2ltIGhhcmR3YXJlIHN0YXRpc3RpY3MuCisgKiBAcGljLmluaV9yZF9kcm9wICAJIDB4MDAwMCAgCSA0ICAJIE51bWJlciBvZiBETUEgcmVhZHMgaW5pdGlhdGVkCisgKiAgYnkgdGhlIGFkYXB0ZXIgdGhhdCB3ZXJlIGRpc2NhcmRlZCBiZWNhdXNlIHRoZSBWUEFUSCBpcyBvdXQgb2Ygc2VydmljZQorICogQHBpYy5pbmlfd3JfZHJvcCAJMHgwMDA0IAk0IAlOdW1iZXIgb2YgRE1BIHdyaXRlcyBpbml0aWF0ZWQgYnkgdGhlCisgKiAgYWRhcHRlciB0aGF0IHdlcmUgZGlzY2FyZWQgYmVjYXVzZSB0aGUgVlBBVEggaXMgb3V0IG9mIHNlcnZpY2UKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMF0gCTB4MDAwOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTFdIAkweDAwMTAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUyXSAJMHgwMDE4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lM10gCTB4MDAyMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTRdIAkweDAwMjggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmU1XSAJMHgwMDMwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lNl0gCTB4MDAzOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTddIAkweDAwNDAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmU4XSAJMHgwMDQ4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lOV0gCTB4MDA1MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTEwXSAJMHgwMDU4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMTFdIAkweDAwNjAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMl0gCTB4MDA2OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTEzXSAJMHgwMDcwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMTRdIAkweDAwNzggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNV0gCTB4MDA4MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTE2XSAJMHgwMDg4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMF0gCTB4MDA5MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxXSAJMHgwMDk4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTJdIAkweDAwYTAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgZGF0YSBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRbdnBsYW5lM10gCTB4MDBhOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmU0XSAJMHgwMGIwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZTVdIAkweDAwYjggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgZGF0YSBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRbdnBsYW5lNl0gCTB4MDBjMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmU3XSAJMHgwMGM4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgcG9zdGVkIGRhdGEgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHdyaXRlcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLndyY3JkdGFyYl9wZF9jcmR0X2RlcGxldGVkW3ZwbGFuZThdIAkweDAwZDAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBwb3N0ZWQgZGF0YSBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgd3JpdGVzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMud3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRbdnBsYW5lOV0gCTB4MDBkOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMF0gCTB4MDBlMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMV0gCTB4MDBlOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMl0gCTB4MDBmMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxM10gCTB4MDBmOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNF0gCTB4MDEwMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNV0gCTB4MDEwOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy53cmNyZHRhcmJfcGRfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNl0gCTB4MDExMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIHBvc3RlZCBkYXRhIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSB3cml0ZXMgd2VyZSBkZXBsZXRlZAorICogQHBpYy5yZGNyZHRhcmJfbnBoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lMF0gCTB4MDExOCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxXSAJMHgwMTIwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTJdIAkweDAxMjggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBub24tcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgcmVhZHMgd2VyZSBkZXBsZXRlZAorICogQHBpYy5yZGNyZHRhcmJfbnBoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lM10gCTB4MDEzMCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmU0XSAJMHgwMTM4IAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZTVdIAkweDAxNDAgCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBub24tcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgcmVhZHMgd2VyZSBkZXBsZXRlZAorICogQHBpYy5yZGNyZHRhcmJfbnBoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lNl0gCTB4MDE0OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmU3XSAJMHgwMTUwIAk0IAlOdW1iZXIgb2YgdGltZXMKKyAqICB0aGUgbm9uLXBvc3RlZCBoZWFkZXIgY3JlZGl0cyBmb3IgdXBzdHJlYW0gUENJIHJlYWRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwaWMucmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkW3ZwbGFuZThdIAkweDAxNTggCTQgCU51bWJlciBvZiB0aW1lcworICogIHRoZSBub24tcG9zdGVkIGhlYWRlciBjcmVkaXRzIGZvciB1cHN0cmVhbSBQQ0kgcmVhZHMgd2VyZSBkZXBsZXRlZAorICogQHBpYy5yZGNyZHRhcmJfbnBoX2NyZHRfZGVwbGV0ZWRbdnBsYW5lOV0gCTB4MDE2MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMF0gCTB4MDE2OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMV0gCTB4MDE3MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxMl0gCTB4MDE3OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxM10gCTB4MDE4MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNF0gCTB4MDE4OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNV0gCTB4MDE5MCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLnJkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZFt2cGxhbmUxNl0gCTB4MDE5OCAJNCAJTnVtYmVyIG9mIHRpbWVzCisgKiAgdGhlIG5vbi1wb3N0ZWQgaGVhZGVyIGNyZWRpdHMgZm9yIHVwc3RyZWFtIFBDSSByZWFkcyB3ZXJlIGRlcGxldGVkCisgKiBAcGljLmluaV9yZF92cGluX2Ryb3AgCTB4MDFhMCAJNCAJTnVtYmVyIG9mIERNQSByZWFkcyBpbml0aWF0ZWQgYnkKKyAqICB0aGUgYWRhcHRlciB0aGF0IHdlcmUgZGlzY2FyZGVkIGJlY2F1c2UgdGhlIFZQQVRIIGluc3RhbmNlIG51bWJlciBkb2VzCisgKiAgbm90IG1hdGNoCisgKiBAcGljLmluaV93cl92cGluX2Ryb3AgCTB4MDFhNCAJNCAJTnVtYmVyIG9mIERNQSB3cml0ZXMgaW5pdGlhdGVkCisgKiAgYnkgdGhlIGFkYXB0ZXIgdGhhdCB3ZXJlIGRpc2NhcmRlZCBiZWNhdXNlIHRoZSBWUEFUSCBpbnN0YW5jZSBudW1iZXIKKyAqICBkb2VzIG5vdCBtYXRjaAorICogQHBpYy5nZW5zdGF0c19jb3VudDAgCTB4MDFhOCAJNCAJQ29uZmlndXJhYmxlIHN0YXRpc3RpYyAjMS4gUmVmZXIKKyAqICB0byB0aGUgR0VOU1RBVFMwX0NGRyBmb3IgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhpcyBzdGF0aXN0aWMKKyAqIEBwaWMuZ2Vuc3RhdHNfY291bnQxIAkweDAxYWMgCTQgCUNvbmZpZ3VyYWJsZSBzdGF0aXN0aWMgIzIuIFJlZmVyCisgKiAgdG8gdGhlIEdFTlNUQVRTMV9DRkcgZm9yIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoaXMgc3RhdGlzdGljCisgKiBAcGljLmdlbnN0YXRzX2NvdW50MiAJMHgwMWIwIAk0IAlDb25maWd1cmFibGUgc3RhdGlzdGljICMzLiBSZWZlcgorICogIHRvIHRoZSBHRU5TVEFUUzJfQ0ZHIGZvciBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGlzIHN0YXRpc3RpYworICogQHBpYy5nZW5zdGF0c19jb3VudDMgCTB4MDFiNCAJNCAJQ29uZmlndXJhYmxlIHN0YXRpc3RpYyAjNC4gUmVmZXIKKyAqICB0byB0aGUgR0VOU1RBVFMzX0NGRyBmb3IgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhpcyBzdGF0aXN0aWMKKyAqIEBwaWMuZ2Vuc3RhdHNfY291bnQ0IAkweDAxYjggCTQgCUNvbmZpZ3VyYWJsZSBzdGF0aXN0aWMgIzUuIFJlZmVyCisgKiAgdG8gdGhlIEdFTlNUQVRTNF9DRkcgZm9yIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoaXMgc3RhdGlzdGljCisgKiBAcGljLmdlbnN0YXRzX2NvdW50NSAJMHgwMWMwIAk0IAlDb25maWd1cmFibGUgc3RhdGlzdGljICM2LiBSZWZlcgorICogIHRvIHRoZSBHRU5TVEFUUzVfQ0ZHIGZvciBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGlzIHN0YXRpc3RpYworICogQHBjaS5yc3Rkcm9wX2NwbCAJMHgwMWM4IAk0CisgKiBAcGNpLnJzdGRyb3BfbXNnIAkweDAxY2MgCTQKKyAqIEBwY2kucnN0ZHJvcF9jbGllbnQxIAkweDAxZDAgCTQKKyAqIEBwY2kucnN0ZHJvcF9jbGllbnQwIAkweDAxZDQgCTQKKyAqIEBwY2kucnN0ZHJvcF9jbGllbnQyIAkweDAxZDggCTQKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTBdIAkweDAxZTIgCTIgCU51bWJlciBvZiB0aW1lcyBjb21wbGV0aW9uCisgKiAgaGVhZGVyIGNyZWRpdHMgd2VyZSBkZXBsZXRlZAorICogQHBjaS5kZXBsX25waFt2cGxhbmUwXSAJMHgwMWU0IAkyIAlOdW1iZXIgb2YgdGltZXMgbm9uIHBvc3RlZAorICogIGhlYWRlciBjcmVkaXRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwY2kuZGVwbF9waFt2cGxhbmUwXSAJMHgwMWU2IAkyIAlOdW1iZXIgb2YgdGltZXMgdGhlIHBvc3RlZAorICogIGhlYWRlciBjcmVkaXRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTFdIAkweDAxZWEgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lMV0gCTB4MDFlYyAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTFdIAkweDAxZWUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTJdIAkweDAxZjIgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lMl0gCTB4MDFmNCAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTJdIAkweDAxZjYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTNdIAkweDAxZmEgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lM10gCTB4MDFmYyAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTNdIAkweDAxZmUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTRdIAkweDAyMDIgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lNF0gCTB4MDIwNCAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTRdIAkweDAyMDYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTVdIAkweDAyMGEgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lNV0gCTB4MDIwYyAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTVdIAkweDAyMGUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTZdIAkweDAyMTIgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lNl0gCTB4MDIxNCAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTZdIAkweDAyMTYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTddIAkweDAyMWEgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lN10gCTB4MDIxYyAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTddIAkweDAyMWUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZThdIAkweDAyMjIgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lOF0gCTB4MDIyNCAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZThdIAkweDAyMjYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTldIAkweDAyMmEgCTIKKyAqIEBwY2kuZGVwbF9ucGhbdnBsYW5lOV0gCTB4MDIyYyAJMgorICogQHBjaS5kZXBsX3BoW3ZwbGFuZTldIAkweDAyMmUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTEwXSAJMHgwMjMyIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTEwXSAJMHgwMjM0IAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTBdIAkweDAyMzYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTExXSAJMHgwMjNhIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTExXSAJMHgwMjNjIAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTFdIAkweDAyM2UgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTEyXSAJMHgwMjQyIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTEyXSAJMHgwMjQ0IAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTJdIAkweDAyNDYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTEzXSAJMHgwMjRhIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTEzXSAJMHgwMjRjIAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTNdIAkweDAyNGUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTE0XSAJMHgwMjUyIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTE0XSAJMHgwMjU0IAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTRdIAkweDAyNTYgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTE1XSAJMHgwMjVhIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTE1XSAJMHgwMjVjIAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTVdIAkweDAyNWUgCTIKKyAqIEBwY2kuZGVwbF9jcGxoW3ZwbGFuZTE2XSAJMHgwMjYyIAkyCisgKiBAcGNpLmRlcGxfbnBoW3ZwbGFuZTE2XSAJMHgwMjY0IAkyCisgKiBAcGNpLmRlcGxfcGhbdnBsYW5lMTZdIAkweDAyNjYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTBdIAkweDAyNmEgCTIgCU51bWJlciBvZiB0aW1lcyBjb21wbGV0aW9uIGRhdGEKKyAqICBjcmVkaXRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMF0gCTB4MDI2YyAJMiAJTnVtYmVyIG9mIHRpbWVzIG5vbiBwb3N0ZWQgZGF0YQorICogIGNyZWRpdHMgd2VyZSBkZXBsZXRlZAorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTBdIAkweDAyNmUgCTIgCU51bWJlciBvZiB0aW1lcyB0aGUgcG9zdGVkIGRhdGEKKyAqICBjcmVkaXRzIHdlcmUgZGVwbGV0ZWQKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTFdIAkweDAyNzIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMV0gCTB4MDI3NCAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTFdIAkweDAyNzYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTJdIAkweDAyN2EgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lMl0gCTB4MDI3YyAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTJdIAkweDAyN2UgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTNdIAkweDAyODIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lM10gCTB4MDI4NCAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTNdIAkweDAyODYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTRdIAkweDAyOGEgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lNF0gCTB4MDI4YyAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTRdIAkweDAyOGUgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTVdIAkweDAyOTIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lNV0gCTB4MDI5NCAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTVdIAkweDAyOTYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTZdIAkweDAyOWEgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lNl0gCTB4MDI5YyAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTZdIAkweDAyOWUgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTddIAkweDAyYTIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lN10gCTB4MDJhNCAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTddIAkweDAyYTYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZThdIAkweDAyYWEgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lOF0gCTB4MDJhYyAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZThdIAkweDAyYWUgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTldIAkweDAyYjIgCTIKKyAqIEBwY2kuZGVwbF9ucGRbdnBsYW5lOV0gCTB4MDJiNCAJMgorICogQHBjaS5kZXBsX3BkW3ZwbGFuZTldIAkweDAyYjYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTEwXSAJMHgwMmJhIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTEwXSAJMHgwMmJjIAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTBdIAkweDAyYmUgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTExXSAJMHgwMmMyIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTExXSAJMHgwMmM0IAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTFdIAkweDAyYzYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTEyXSAJMHgwMmNhIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTEyXSAJMHgwMmNjIAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTJdIAkweDAyY2UgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTEzXSAJMHgwMmQyIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTEzXSAJMHgwMmQ0IAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTNdIAkweDAyZDYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTE0XSAJMHgwMmRhIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTE0XSAJMHgwMmRjIAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTRdIAkweDAyZGUgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTE1XSAJMHgwMmUyIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTE1XSAJMHgwMmU0IAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTVdIAkweDAyZTYgCTIKKyAqIEBwY2kuZGVwbF9jcGxkW3ZwbGFuZTE2XSAJMHgwMmVhIAkyCisgKiBAcGNpLmRlcGxfbnBkW3ZwbGFuZTE2XSAJMHgwMmVjIAkyCisgKiBAcGNpLmRlcGxfcGRbdnBsYW5lMTZdIAkweDAyZWUgCTIKKyAqIEB4Z21hY19wb3J0WzNdOworICogQHhnbWFjX2FnZ3JbMl07CisgKiBAeGdtYWMuZ2xvYmFsX3Byb2dfZXZlbnRfZ251bTAgCTB4MGFlMCAJOCAJUHJvZ3JhbW1hYmxlIHN0YXRpc3RpYy4KKyAqICBJbmNyZW1lbnRzIHdoZW4gaW50ZXJuYWwgbG9naWMgZGV0ZWN0cyBhIGNlcnRhaW4gZXZlbnQuIFNlZSByZWdpc3RlcgorICogIFhNQUNfU1RBVFNfR0xPQkFMX0NGRy5FVkVOVF9HTlVNMF9DRkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKiBAeGdtYWMuZ2xvYmFsX3Byb2dfZXZlbnRfZ251bTEgCTB4MGFlOCAJOCAJUHJvZ3JhbW1hYmxlIHN0YXRpc3RpYy4KKyAqICBJbmNyZW1lbnRzIHdoZW4gaW50ZXJuYWwgbG9naWMgZGV0ZWN0cyBhIGNlcnRhaW4gZXZlbnQuIFNlZSByZWdpc3RlcgorICogIFhNQUNfU1RBVFNfR0xPQkFMX0NGRy5FVkVOVF9HTlVNMV9DRkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKiBAeGdtYWMub3JwX2xyb19ldmVudHMgCTB4MGFmOCAJOAorICogQHhnbWFjLm9ycF9ic19ldmVudHMgCTB4MGIwMCAJOAorICogQHhnbWFjLm9ycF9pd2FycF9ldmVudHMgCTB4MGIwOCAJOAorICogQHhnbWFjLnR4X3Blcm1pdHRlZF9mcm1zIAkweDBiMTQgCTQKKyAqIEB4Z21hYy5wb3J0Ml90eF9hbnlfZnJtcyAJMHgwYjFkIAkxCisgKiBAeGdtYWMucG9ydDFfdHhfYW55X2ZybXMgCTB4MGIxZSAJMQorICogQHhnbWFjLnBvcnQwX3R4X2FueV9mcm1zIAkweDBiMWYgCTEKKyAqIEB4Z21hYy5wb3J0Ml9yeF9hbnlfZnJtcyAJMHgwYjI1IAkxCisgKiBAeGdtYWMucG9ydDFfcnhfYW55X2ZybXMgCTB4MGIyNiAJMQorICogQHhnbWFjLnBvcnQwX3J4X2FueV9mcm1zIAkweDBiMjcgCTEKKyAqCisgKiBUaXRhbiBtcnBjaW0gaGFyZHdhcmUgc3RhdGlzdGljcy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX21ycGNpbV9pbmZvIHsKKy8qMHgwMDAwKi8JdTMyCXBpY19pbmlfcmRfZHJvcDsKKy8qMHgwMDA0Ki8JdTMyCXBpY19pbmlfd3JfZHJvcDsKKy8qMHgwMDA4Ki8Jc3RydWN0IHsKKwkvKjB4MDAwMCovCXUzMglwaWNfd3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWQ7CisJLyoweDAwMDQqLwl1MzIJdW51c2VkMTsKKwkJfSBwaWNfd3JjcmR0YXJiX3BoX2NyZHRfZGVwbGV0ZWRfdnBsYW5lWzE3XTsKKy8qMHgwMDkwKi8Jc3RydWN0IHsKKwkvKjB4MDAwMCovCXUzMglwaWNfd3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWQ7CisJLyoweDAwMDQqLwl1MzIJdW51c2VkMjsKKwkJfSBwaWNfd3JjcmR0YXJiX3BkX2NyZHRfZGVwbGV0ZWRfdnBsYW5lWzE3XTsKKy8qMHgwMTE4Ki8Jc3RydWN0IHsKKwkvKjB4MDAwMCovCXUzMglwaWNfcmRjcmR0YXJiX25waF9jcmR0X2RlcGxldGVkOworCS8qMHgwMDA0Ki8JdTMyCXVudXNlZDM7CisJCX0gcGljX3JkY3JkdGFyYl9ucGhfY3JkdF9kZXBsZXRlZF92cGxhbmVbMTddOworLyoweDAxYTAqLwl1MzIJcGljX2luaV9yZF92cGluX2Ryb3A7CisvKjB4MDFhNCovCXUzMglwaWNfaW5pX3dyX3ZwaW5fZHJvcDsKKy8qMHgwMWE4Ki8JdTMyCXBpY19nZW5zdGF0c19jb3VudDA7CisvKjB4MDFhYyovCXUzMglwaWNfZ2Vuc3RhdHNfY291bnQxOworLyoweDAxYjAqLwl1MzIJcGljX2dlbnN0YXRzX2NvdW50MjsKKy8qMHgwMWI0Ki8JdTMyCXBpY19nZW5zdGF0c19jb3VudDM7CisvKjB4MDFiOCovCXUzMglwaWNfZ2Vuc3RhdHNfY291bnQ0OworLyoweDAxYmMqLwl1MzIJdW51c2VkNDsKKy8qMHgwMWMwKi8JdTMyCXBpY19nZW5zdGF0c19jb3VudDU7CisvKjB4MDFjNCovCXUzMgl1bnVzZWQ1OworLyoweDAxYzgqLwl1MzIJcGNpX3JzdGRyb3BfY3BsOworLyoweDAxY2MqLwl1MzIJcGNpX3JzdGRyb3BfbXNnOworLyoweDAxZDAqLwl1MzIJcGNpX3JzdGRyb3BfY2xpZW50MTsKKy8qMHgwMWQ0Ki8JdTMyCXBjaV9yc3Rkcm9wX2NsaWVudDA7CisvKjB4MDFkOCovCXUzMglwY2lfcnN0ZHJvcF9jbGllbnQyOworLyoweDAxZGMqLwl1MzIJdW51c2VkNjsKKy8qMHgwMWUwKi8Jc3RydWN0IHsKKwkvKjB4MDAwMCovCXUxNgl1bnVzZWQ3OworCS8qMHgwMDAyKi8JdTE2CXBjaV9kZXBsX2NwbGg7CisJLyoweDAwMDQqLwl1MTYJcGNpX2RlcGxfbnBoOworCS8qMHgwMDA2Ki8JdTE2CXBjaV9kZXBsX3BoOworCQl9IHBjaV9kZXBsX2hfdnBsYW5lWzE3XTsKKy8qMHgwMjY4Ki8Jc3RydWN0IHsKKwkvKjB4MDAwMCovCXUxNgl1bnVzZWQ4OworCS8qMHgwMDAyKi8JdTE2CXBjaV9kZXBsX2NwbGQ7CisJLyoweDAwMDQqLwl1MTYJcGNpX2RlcGxfbnBkOworCS8qMHgwMDA2Ki8JdTE2CXBjaV9kZXBsX3BkOworCQl9IHBjaV9kZXBsX2RfdnBsYW5lWzE3XTsKKy8qMHgwMmYwKi8Jc3RydWN0IHZ4Z2VfaHdfeG1hY19wb3J0X3N0YXRzIHhnbWFjX3BvcnRbM107CisvKjB4MGExMCovCXN0cnVjdCB2eGdlX2h3X3htYWNfYWdncl9zdGF0cyB4Z21hY19hZ2dyWzJdOworLyoweDBhZTAqLwl1NjQJeGdtYWNfZ2xvYmFsX3Byb2dfZXZlbnRfZ251bTA7CisvKjB4MGFlOCovCXU2NAl4Z21hY19nbG9iYWxfcHJvZ19ldmVudF9nbnVtMTsKKy8qMHgwYWYwKi8JdTY0CXVudXNlZDc7CisvKjB4MGFmOCovCXU2NAl1bnVzZWQ4OworLyoweDBiMDAqLwl1NjQJdW51c2VkOTsKKy8qMHgwYjA4Ki8JdTY0CXVudXNlZDEwOworLyoweDBiMTAqLwl1MzIJdW51c2VkMTE7CisvKjB4MGIxNCovCXUzMgl4Z21hY190eF9wZXJtaXR0ZWRfZnJtczsKKy8qMHgwYjE4Ki8JdTMyCXVudXNlZDEyOworLyoweDBiMWMqLwl1OAl1bnVzZWQxMzsKKy8qMHgwYjFkKi8JdTgJeGdtYWNfcG9ydDJfdHhfYW55X2ZybXM7CisvKjB4MGIxZSovCXU4CXhnbWFjX3BvcnQxX3R4X2FueV9mcm1zOworLyoweDBiMWYqLwl1OAl4Z21hY19wb3J0MF90eF9hbnlfZnJtczsKKy8qMHgwYjIwKi8JdTMyCXVudXNlZDE0OworLyoweDBiMjQqLwl1OAl1bnVzZWQxNTsKKy8qMHgwYjI1Ki8JdTgJeGdtYWNfcG9ydDJfcnhfYW55X2ZybXM7CisvKjB4MGIyNiovCXU4CXhnbWFjX3BvcnQxX3J4X2FueV9mcm1zOworLyoweDBiMjcqLwl1OAl4Z21hY19wb3J0MF9yeF9hbnlfZnJtczsKK30gX19wYWNrZWQ7CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX2h3X2luZm8gLSBUaXRhbiBoYXJkd2FyZSBzdGF0aXN0aWNzLgorICogQHZwYXRoX2luZm86IFZQYXRoIHN0YXRpc3RpY3MKKyAqIEB2cGF0aF9pbmZvX3NhdjogVnBhdGggc3RhdGlzdGljcyBzYXZlZAorICoKKyAqIFRpdGFuIGhhcmR3YXJlIHN0YXRpc3RpY3MuCisgKi8KK3N0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19od19pbmZvIHsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19od19pbmZvCisJCSp2cGF0aF9pbmZvW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX2h3X2luZm8KKwkJdnBhdGhfaW5mb19zYXZbVlhHRV9IV19NQVhfVklSVFVBTF9QQVRIU107Cit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2NvbW1vbl9pbmZvIC0gSFcgY29tbW9uCisgKiBzdGF0aXN0aWNzIGZvciBxdWV1ZXMuCisgKiBAZnVsbF9jbnQ6IE51bWJlciBvZiB0aW1lcyB0aGUgcXVldWUgd2FzIGZ1bGwKKyAqIEB1c2FnZV9jbnQ6IHVzYWdlIGNvdW50LgorICogQHVzYWdlX21heDogTWF4aW11bSB1c2FnZQorICogQHJlc2VydmVfZnJlZV9zd2Fwc19jbnQ6IFJlc2VydmUvZnJlZSBzd2FwIGNvdW50ZXIuIEludGVybmFsIHVzYWdlLgorICogQHRvdGFsX2NvbXBsX2NudDogVG90YWwgZGVzY3JpcHRvciBjb21wbGV0aW9uIGNvdW50LgorICoKKyAqIEh3IHF1ZXVlIGNvdW50ZXJzCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfZmlmb19pbmZve30sCisgKiBzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19yaW5nX2luZm97fSwKKyAqLworc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfY29tbW9uX2luZm8geworCXUzMglmdWxsX2NudDsKKwl1MzIJdXNhZ2VfY250OworCXUzMgl1c2FnZV9tYXg7CisJdTMyCXJlc2VydmVfZnJlZV9zd2Fwc19jbnQ7CisJdTMyIHRvdGFsX2NvbXBsX2NudDsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfZmlmb19pbmZvIC0gSFcgZmlmbyBzdGF0aXN0aWNzCisgKiBAY29tbW9uX3N0YXRzOiBDb21tb24gY291bnRlcnMgZm9yIGFsbCBxdWV1ZXMKKyAqIEB0b3RhbF9wb3N0czogVG90YWwgbnVtYmVyIG9mIHBvc3RpbmdzIG9uIHRoZSBxdWV1ZS4KKyAqIEB0b3RhbF9idWZmZXJzOiBUb3RhbCBudW1iZXIgb2YgYnVmZmVycyBwb3N0ZWQuCisgKiBAdHhkX3RfY29kZV9lcnJfY250OiBBcnJheSBvZiB0cmFuc21pdCB0cmFuc2ZlciBjb2Rlcy4gVGhlIHBvc2l0aW9uCisgKiAoaW5kZXgpIGluIHRoaXMgYXJyYXkgcmVmbGVjdHMgdGhlIHRyYW5zZmVyIGNvZGUgdHlwZSwgZm9yIGluc3RhbmNlCisgKiAweEEgLSAibG9zcyBvZiBsaW5rIi4KKyAqIFZhbHVlIHR4ZF90X2NvZGVfZXJyX2NudFtpXSByZWZsZWN0cyB0aGUKKyAqIG51bWJlciBvZiB0aW1lcyB0aGUgY29ycmVzcG9uZGluZyB0cmFuc2ZlciBjb2RlIHdhcyBlbmNvdW50ZXJlZC4KKyAqCisgKiBIVyBmaWZvIGNvdW50ZXJzCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfY29tbW9uX2luZm97fSwKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X3JpbmdfaW5mb3t9LAorICovCitzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19maWZvX2luZm8geworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2NvbW1vbl9pbmZvIGNvbW1vbl9zdGF0czsKKwl1MzIgdG90YWxfcG9zdHM7CisJdTMyIHRvdGFsX2J1ZmZlcnM7CisJdTMyIHR4ZF90X2NvZGVfZXJyX2NudFtWWEdFX0hXX0RUUl9NQVhfVF9DT0RFXTsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfcmluZ19pbmZvIC0gSFcgcmluZyBzdGF0aXN0aWNzCisgKiBAY29tbW9uX3N0YXRzOiBDb21tb24gY291bnRlcnMgZm9yIGFsbCBxdWV1ZXMKKyAqIEByeGRfdF9jb2RlX2Vycl9jbnQ6IEFycmF5IG9mIHJlY2VpdmUgdHJhbnNmZXIgY29kZXMuIFRoZSBwb3NpdGlvbgorICogICAgICAgICAgICAgKGluZGV4KSBpbiB0aGlzIGFycmF5IHJlZmxlY3RzIHRoZSB0cmFuc2ZlciBjb2RlIHR5cGUsCisgKiAgICAgICAgICAgICBmb3IgaW5zdGFuY2UKKyAqICAgICAgICAgICAgIDB4NyAtIGZvciAiaW52YWxpZCByZWNlaXZlIGJ1ZmZlciBzaXplIiwgb3IgMHg4IC0gZm9yIEVDQy4KKyAqICAgICAgICAgICAgIFZhbHVlIHJ4ZF90X2NvZGVfZXJyX2NudFtpXSByZWZsZWN0cyB0aGUKKyAqICAgICAgICAgICAgIG51bWJlciBvZiB0aW1lcyB0aGUgY29ycmVzcG9uZGluZyB0cmFuc2ZlciBjb2RlIHdhcyBlbmNvdW50ZXJlZC4KKyAqCisgKiBIVyByaW5nIGNvdW50ZXJzCisgKiBTZWUgYWxzbzogc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfY29tbW9uX2luZm97fSwKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2ZpZm9faW5mb3t9LAorICovCitzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19yaW5nX2luZm8geworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2NvbW1vbl9pbmZvIGNvbW1vbl9zdGF0czsKKwl1MzIgcnhkX3RfY29kZV9lcnJfY250W1ZYR0VfSFdfRFRSX01BWF9UX0NPREVdOworCit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2VyciAtIEhXIHZwYXRoIGVycm9yIHN0YXRpc3RpY3MKKyAqIEB1bmtub3duX2FsYXJtczoKKyAqIEBuZXR3b3JrX3N1c3RhaW5lZF9mYXVsdDoKKyAqIEBuZXR3b3JrX3N1c3RhaW5lZF9vazoKKyAqIEBrZGZjY3RsX2ZpZm8wX292ZXJ3cml0ZToKKyAqIEBrZGZjY3RsX2ZpZm8wX3BvaXNvbjoKKyAqIEBrZGZjY3RsX2ZpZm8wX2RtYV9lcnJvcjoKKyAqIEBkYmxnZW5fZmlmbzBfb3ZlcmZsb3c6CisgKiBAc3RhdHNiX3BpZl9jaGFpbl9lcnJvcjoKKyAqIEBzdGF0c2JfZHJvcF90aW1lb3V0OgorICogQHRhcmdldF9pbGxlZ2FsX2FjY2VzczoKKyAqIEBpbmlfc2Vycl9kZXQ6CisgKiBAcHJjX3JpbmdfYnVtcHM6CisgKiBAcHJjX3J4ZGNtX3NjX2VycjoKKyAqIEBwcmNfcnhkY21fc2NfYWJvcnQ6CisgKiBAcHJjX3F1YW50YV9zaXplX2VycjoKKyAqCisgKiBIVyB2cGF0aCBlcnJvciBzdGF0aXN0aWNzCisgKi8KK3N0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2VyciB7CisJdTMyCXVua25vd25fYWxhcm1zOworCXUzMgluZXR3b3JrX3N1c3RhaW5lZF9mYXVsdDsKKwl1MzIJbmV0d29ya19zdXN0YWluZWRfb2s7CisJdTMyCWtkZmNjdGxfZmlmbzBfb3ZlcndyaXRlOworCXUzMglrZGZjY3RsX2ZpZm8wX3BvaXNvbjsKKwl1MzIJa2RmY2N0bF9maWZvMF9kbWFfZXJyb3I7CisJdTMyCWRibGdlbl9maWZvMF9vdmVyZmxvdzsKKwl1MzIJc3RhdHNiX3BpZl9jaGFpbl9lcnJvcjsKKwl1MzIJc3RhdHNiX2Ryb3BfdGltZW91dDsKKwl1MzIJdGFyZ2V0X2lsbGVnYWxfYWNjZXNzOworCXUzMglpbmlfc2Vycl9kZXQ7CisJdTMyCXByY19yaW5nX2J1bXBzOworCXUzMglwcmNfcnhkY21fc2NfZXJyOworCXUzMglwcmNfcnhkY21fc2NfYWJvcnQ7CisJdTMyCXByY19xdWFudGFfc2l6ZV9lcnI7Cit9OworCisvKioKKyAqIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2luZm8gLSBIVyB2cGF0aCBzdyBzdGF0aXN0aWNzCisgKiBAc29mdF9yZXNldF9jbnQ6IE51bWJlciBvZiB0aW1lcyBzb2Z0IHJlc2V0IGlzIGRvbmUgb24gdGhpcyB2cGF0aC4KKyAqIEBlcnJvcl9zdGF0czogZXJyb3IgY291bnRlcnMgZm9yIHRoZSB2cGF0aAorICogQHJpbmdfc3RhdHM6IGNvdW50ZXJzIGZvciByaW5nIGJlbG9uZ2luZyB0byB0aGUgdnBhdGgKKyAqIEBmaWZvX3N0YXRzOiBjb3VudGVycyBmb3IgZmlmbyBiZWxvbmdpbmcgdG8gdGhlIHZwYXRoCisgKgorICogSFcgdnBhdGggc3cgc3RhdGlzdGljcworICogU2VlIGFsc286IHN0cnVjdCB2eGdlX2h3X2RldmljZV9pbmZve30gfS4KKyAqLworc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfaW5mbyB7CisJdTMyICAgIHNvZnRfcmVzZXRfY250OworCXN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2VycgllcnJvcl9zdGF0czsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19yaW5nX2luZm8JcmluZ19zdGF0czsKKwlzdHJ1Y3QgdnhnZV9od192cGF0aF9zdGF0c19zd19maWZvX2luZm8JZmlmb19zdGF0czsKK307CisKKy8qKgorICogc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX3N3X2luZm8gLSBIVyBvd24gcGVyLWRldmljZSBzdGF0aXN0aWNzLgorICoKKyAqIEBub3RfdHJhZmZpY19pbnRyX2NudDogTnVtYmVyIG9mIHRpbWVzIHRoZSBob3N0IHdhcyBpbnRlcnJ1cHRlZAorICogICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IG5ldyBjb21wbGV0aW9ucy4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgIk5vbi10cmFmZmljIGludGVycnVwdCBjb3VudGVyIi4KKyAqIEB0cmFmZmljX2ludHJfY250OiBOdW1iZXIgb2YgdHJhZmZpYyBpbnRlcnJ1cHRzIGZvciB0aGUgZGV2aWNlLgorICogQHRvdGFsX2ludHJfY250OiBUb3RhbCBudW1iZXIgb2YgdHJhZmZpYyBpbnRlcnJ1cHRzIGZvciB0aGUgZGV2aWNlLgorICogICAgICAgICAgICAgICAgICBAdG90YWxfaW50cl9jbnQgPT0gQHRyYWZmaWNfaW50cl9jbnQgKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90X3RyYWZmaWNfaW50cl9jbnQKKyAqIEBzb2Z0X3Jlc2V0X2NudDogTnVtYmVyIG9mIHRpbWVzIHNvZnQgcmVzZXQgaXMgZG9uZSBvbiB0aGlzIGRldmljZS4KKyAqIEB2cGF0aF9pbmZvOiBwbGVhc2Ugc2VlIHN0cnVjdCB2eGdlX2h3X3ZwYXRoX3N0YXRzX3N3X2luZm97fQorICogSFcgcGVyLWRldmljZSBzdGF0aXN0aWNzLgorICovCitzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfc3dfaW5mbyB7CisJdTMyCW5vdF90cmFmZmljX2ludHJfY250OworCXUzMgl0cmFmZmljX2ludHJfY250OworCXUzMgl0b3RhbF9pbnRyX2NudDsKKwl1MzIJc29mdF9yZXNldF9jbnQ7CisJc3RydWN0IHZ4Z2VfaHdfdnBhdGhfc3RhdHNfc3dfaW5mbworCQl2cGF0aF9pbmZvW1ZYR0VfSFdfTUFYX1ZJUlRVQUxfUEFUSFNdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfc3dfZXJyIC0gSFcgZGV2aWNlIGVycm9yIHN0YXRpc3RpY3MuCisgKiBAdnBhdGhfYWxhcm1zOiBOdW1iZXIgb2YgdnBhdGggYWxhcm1zCisgKgorICogSFcgRGV2aWNlIGVycm9yIHN0YXRzCisgKi8KK3N0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19lcnIgeworCXUzMiAgICAgdnBhdGhfYWxhcm1zOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHMgLSBDb250YWlucyBIVyBwZXItZGV2aWNlIHN0YXRpc3RpY3MsCisgKiBpbmNsdWRpbmcgaHcuCisgKiBAZGV2aDogSFcgZGV2aWNlIGhhbmRsZS4KKyAqIEBkbWFfYWRkcjogRE1BIGFkZHJlcyBvZiB0aGUgJWh3X2luZm8uIEdpdmVuIHRvIGRldmljZSB0byBmaWxsLWluIHRoZSBzdGF0cy4KKyAqIEBod19pbmZvX2RtYWg6IERNQSBoYW5kbGUgdXNlZCB0byBtYXAgaHcgc3RhdGlzdGljcyBvbnRvIHRoZSBkZXZpY2UgbWVtb3J5CisgKiAgICAgICAgICAgICAgICBzcGFjZS4KKyAqIEBod19pbmZvX2RtYV9hY2NoOiBPbmUgbW9yZSBETUEgaGFuZGxlIHVzZWQgc3Vic2VxdWVudGx5IHRvIGZyZWUgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgRE1BIG9iamVjdC4gTm90ZSB0aGF0IHRoaXMgYW5kIHRoZSBwcmV2aW91cyBoYW5kbGUgaGF2ZQorICogICAgICAgICAgICAgICAgICAgIHBoeXNpY2FsIG1lYW5pbmcgZm9yIFNvbGFyaXM7IG9uIFdpbmRvd3MgYW5kIExpbnV4IHRoZQorICogICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdmFsdWUgd2lsbCBiZSBzaW1wbHkgcG9pbnRlciB0byBQQ0kgZGV2aWNlLgorICoKKyAqIEBod19kZXZfaW5mb19zdGF0czogVGl0YW4gc3RhdGlzdGljcyBtYWludGFpbmVkIGJ5IHRoZSBoYXJkd2FyZS4KKyAqIEBzd19kZXZfaW5mb19zdGF0czogSFcncyAic29mdCIgZGV2aWNlIGluZm9ybWF0aW9uYWwgc3RhdGlzdGljcywgZS5nLiBudW1iZXIKKyAqICAgICAgICAgICAgICAgICAgICAgb2YgY29tcGxldGlvbnMgcGVyIGludGVycnVwdC4KKyAqIEBzd19kZXZfZXJyX3N0YXRzOiBIVydzICJzb2Z0IiBkZXZpY2UgZXJyb3Igc3RhdGlzdGljcy4KKyAqCisgKiBTdHJ1Y3R1cmUtY29udGFpbmVyIG9mIEhXIHBlci1kZXZpY2Ugc3RhdGlzdGljcy4gTm90ZSB0aGF0IHBlci1jaGFubmVsCisgKiBzdGF0aXN0aWNzIGFyZSBrZXB0IGluIHNlcGFyYXRlIHN0cnVjdHVyZXMgdW5kZXIgSFcncyBmaWZvIGFuZCByaW5nCisgKiBjaGFubmVscy4KKyAqLworc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzIHsKKwkvKiBoYW5kbGVzICovCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmg7CisKKwkvKiBIVyBkZXZpY2UgaGFyZHdhcmUgc3RhdGlzdGljcyAqLworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19od19pbmZvCWh3X2Rldl9pbmZvX3N0YXRzOworCisJLyogSFcgZGV2aWNlICJzb2Z0IiBzdGF0cyAqLworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19lcnIgICBzd19kZXZfZXJyX3N0YXRzOworCXN0cnVjdCB2eGdlX2h3X2RldmljZV9zdGF0c19zd19pbmZvICBzd19kZXZfaW5mb19zdGF0czsKKworfTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2RldmljZV9od19zdGF0c19lbmFibGUoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19kZXZpY2Vfc3RhdHNfZ2V0KAorCQkJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJCQlzdHJ1Y3QgdnhnZV9od19kZXZpY2Vfc3RhdHNfaHdfaW5mbyAqaHdfc3RhdHMpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfZHJpdmVyX3N0YXRzX2dldCgKKwkJCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkJc3RydWN0IHZ4Z2VfaHdfZGV2aWNlX3N0YXRzX3N3X2luZm8gKnN3X3N0YXRzKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X21ycGNpbV9zdGF0c19lbmFibGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfbXJwY2ltX3N0YXRzX2Rpc2FibGUoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X21ycGNpbV9zdGF0c19hY2Nlc3MoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyIG9wZXJhdGlvbiwKKwl1MzIgbG9jYXRpb24sCisJdTMyIG9mZnNldCwKKwl1NjQgKnN0YXQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2RldmljZV94bWFjX2FnZ3Jfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLCB1MzIgcG9ydCwKKwkJCQkgICBzdHJ1Y3QgdnhnZV9od194bWFjX2FnZ3Jfc3RhdHMgKmFnZ3Jfc3RhdHMpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2RldmljZV94bWFjX3BvcnRfc3RhdHNfZ2V0KHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLCB1MzIgcG9ydCwKKwkJCQkgICBzdHJ1Y3QgdnhnZV9od194bWFjX3BvcnRfc3RhdHMgKnBvcnRfc3RhdHMpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2RldmljZV94bWFjX3N0YXRzX2dldChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwkJCSAgICAgIHN0cnVjdCB2eGdlX2h3X3htYWNfc3RhdHMgKnhtYWNfc3RhdHMpOworCisvKioKKyAqIGVudW0gZW51bSB2eGdlX2h3X21nbXRfcmVnX3R5cGUgLSBSZWdpc3RlciB0eXBlcy4KKyAqCisgKiBAdnhnZV9od19tZ210X3JlZ190eXBlX2xlZ2FjeTogTGVnYWN5IHJlZ2lzdGVycworICogQHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV90b2M6IFRPQyBSZWdpc3RlcnMKKyAqIEB2eGdlX2h3X21nbXRfcmVnX3R5cGVfY29tbW9uOiBDb21tb24gUmVnaXN0ZXJzCisgKiBAdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbTogbXJwY2ltIHJlZ2lzdGVycworICogQHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV9zcnBjaW06IHNycGNpbSByZWdpc3RlcnMKKyAqIEB2eGdlX2h3X21nbXRfcmVnX3R5cGVfdnBtZ210OiB2cGF0aCBtYW5hZ2VtZW50IHJlZ2lzdGVycworICogQHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZV92cGF0aDogdnBhdGggcmVnaXN0ZXJzCisgKgorICogUmVnaXN0ZXIgdHlwZSBlbnVtYXJhdGlvbgorICovCitlbnVtIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZSB7CisJdnhnZV9od19tZ210X3JlZ190eXBlX2xlZ2FjeSA9IDAsCisJdnhnZV9od19tZ210X3JlZ190eXBlX3RvYyA9IDEsCisJdnhnZV9od19tZ210X3JlZ190eXBlX2NvbW1vbiA9IDIsCisJdnhnZV9od19tZ210X3JlZ190eXBlX21ycGNpbSA9IDMsCisJdnhnZV9od19tZ210X3JlZ190eXBlX3NycGNpbSA9IDQsCisJdnhnZV9od19tZ210X3JlZ190eXBlX3ZwbWdtdCA9IDUsCisJdnhnZV9od19tZ210X3JlZ190eXBlX3ZwYXRoID0gNgorfTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od19tZ210X3JlZ19yZWFkKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkgICAgICBlbnVtIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZSB0eXBlLAorCQkgICAgICB1MzIgaW5kZXgsCisJCSAgICAgIHUzMiBvZmZzZXQsCisJCSAgICAgIHU2NCAqdmFsdWUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X21nbXRfcmVnX3dyaXRlKHN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCQkgICAgICBlbnVtIHZ4Z2VfaHdfbWdtdF9yZWdfdHlwZSB0eXBlLAorCQkgICAgICB1MzIgaW5kZXgsCisJCSAgICAgIHUzMiBvZmZzZXQsCisJCSAgICAgIHU2NCB2YWx1ZSk7CisKKy8qKgorICogZW51bSBlbnVtIHZ4Z2VfaHdfcnhkX3N0YXRlIC0gRGVzY3JpcHRvciAoUlhEKSBzdGF0ZS4KKyAqIEBWWEdFX0hXX1JYRF9TVEFURV9OT05FOiBJbnZhbGlkIHN0YXRlLgorICogQFZYR0VfSFdfUlhEX1NUQVRFX0FWQUlMOiBEZXNjcmlwdG9yIGlzIGF2YWlsYWJsZSBmb3IgcmVzZXJ2YXRpb24uCisgKiBAVlhHRV9IV19SWERfU1RBVEVfUE9TVEVEOiBEZXNjcmlwdG9yIGlzIHBvc3RlZCBmb3IgcHJvY2Vzc2luZyBieSB0aGUKKyAqIGRldmljZS4KKyAqIEBWWEdFX0hXX1JYRF9TVEFURV9GUkVFRDogRGVzY3JpcHRvciBpcyBmcmVlIGFuZCBjYW4gYmUgcmV1c2VkIGZvcgorICogZmlsbGluZy1pbiBhbmQgcG9zdGluZyBsYXRlci4KKyAqCisgKiBUaXRhbi9IVyBkZXNjcmlwdG9yIHN0YXRlcy4KKyAqCisgKi8KK2VudW0gdnhnZV9od19yeGRfc3RhdGUgeworCVZYR0VfSFdfUlhEX1NUQVRFX05PTkUJCT0gMCwKKwlWWEdFX0hXX1JYRF9TVEFURV9BVkFJTAkJPSAxLAorCVZYR0VfSFdfUlhEX1NUQVRFX1BPU1RFRAk9IDIsCisJVlhHRV9IV19SWERfU1RBVEVfRlJFRUQJCT0gMworfTsKKworLyoqCisgKiBzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF9pbmZvIC0gRXh0ZW5kZWQgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGEKKyAqIGNvbXBsZXRlZCByaW5nIGRlc2NyaXB0b3IuCisgKiBAc3luX2ZsYWc6IFNZTiBmbGFnCisgKiBAaXNfaWNtcDogSXMgSUNNUAorICogQGZhc3RfcGF0aF9lbGlnaWJsZTogRmFzdCBQYXRoIEVsaWdpYmxlIGZsYWcKKyAqIEBsM19ja3N1bTogaW4gTDMgY2hlY2tzdW0gaXMgdmFsaWQKKyAqIEBsM19ja3N1bTogUmVzdWx0IG9mIElQIGNoZWNrc3VtIGNoZWNrIChieSBUaXRhbiBoYXJkd2FyZSkuCisgKiAgICAgICAgICAgIFRoaXMgZmllbGQgY29udGFpbmluZyBWWEdFX0hXX0wzX0NLU1VNX09LIHdvdWxkIG1lYW4gdGhhdAorICogICAgICAgICAgICB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdCwgb3RoZXJ3aXNlIC0gdGhlIGRhdGFncmFtIGlzCisgKiAgICAgICAgICAgIGNvcnJ1cHRlZC4KKyAqIEBsNF9ja3N1bTogaW4gTDQgY2hlY2tzdW0gaXMgdmFsaWQKKyAqIEBsNF9ja3N1bTogUmVzdWx0IG9mIFRDUC9VRFAgY2hlY2tzdW0gY2hlY2sgKGJ5IFRpdGFuIGhhcmR3YXJlKS4KKyAqICAgICAgICAgICAgVGhpcyBmaWVsZCBjb250YWluaW5nIFZYR0VfSFdfTDRfQ0tTVU1fT0sgd291bGQgbWVhbiB0aGF0CisgKiAgICAgICAgICAgIHRoZSBjaGVja3N1bSBpcyBjb3JyZWN0LiBPdGhlcndpc2UgLSB0aGUgcGFja2V0IGlzCisgKiAgICAgICAgICAgIGNvcnJ1cHRlZC4KKyAqIEBmcmFtZTogWmVybyBvciBtb3JlIG9mIGVudW0gdnhnZV9od19mcmFtZV90eXBlIGZsYWdzLgorICogCQlTZWUgZW51bSB2eGdlX2h3X2ZyYW1lX3R5cGV7fS4KKyAqIEBwcm90bzogemVybyBvciBtb3JlIG9mIGVudW0gdnhnZV9od19mcmFtZV9wcm90byBmbGFncy4gIFJlcG9ydGluZyBiaXRzIGZvcgorICogICAgICAgICAgICB2YXJpb3VzIGhpZ2hlci1sYXllciBwcm90b2NvbHMsIGluY2x1ZGluZyAoYnV0IG5vdGUgcmVzdHJpY3RlZCB0bykKKyAqICAgICAgICAgICAgVENQIGFuZCBVRFAuIFNlZSBlbnVtIHZ4Z2VfaHdfZnJhbWVfcHJvdG97fS4KKyAqIEBpc192bGFuOiBJZiB2bGFuIHRhZyBpcyB2YWxpZAorICogQHZsYW46IFZMQU4gdGFnIGV4dHJhY3RlZCBmcm9tIHRoZSByZWNlaXZlZCBmcmFtZS4KKyAqIEBydGhfYnVja2V0OiBSVEggYnVja2V0CisgKiBAcnRoX2l0X2hpdDogU2V0LCBJZiBSVEggaGFzaCB2YWx1ZSBjYWxjdWxhdGVkIGJ5IHRoZSBUaXRhbiBoYXJkd2FyZQorICogICAgICAgICAgICAgaGFzIGEgbWF0Y2hpbmcgZW50cnkgaW4gdGhlIEluZGlyZWN0aW9uIHRhYmxlLgorICogQHJ0aF9zcGRtX2hpdDogU2V0LCBJZiBSVEggaGFzaCB2YWx1ZSBjYWxjdWxhdGVkIGJ5IHRoZSBUaXRhbiBoYXJkd2FyZQorICogICAgICAgICAgICAgaGFzIGEgbWF0Y2hpbmcgZW50cnkgaW4gdGhlIFNvY2tldCBQYWlyIERpcmVjdCBNYXRjaCB0YWJsZS4KKyAqIEBydGhfaGFzaF90eXBlOiBSVEggaGFzaCBjb2RlIG9mIHRoZSBmdW5jdGlvbiB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaGFzaC4KKyAqIEBydGhfdmFsdWU6IFJlY2VpdmUgVHJhZmZpYyBIYXNoaW5nKFJUSCkgaGFzaCB2YWx1ZS4gUHJvZHVjZWQgYnkgVGl0YW4KKyAqICAgICAgICAgICAgIGhhcmR3YXJlIGlmIFJUSCBpcyBlbmFibGVkLgorICovCitzdHJ1Y3QgdnhnZV9od19yaW5nX3J4ZF9pbmZvIHsKKwl1MzIJc3luX2ZsYWc7CisJdTMyCWlzX2ljbXA7CisJdTMyCWZhc3RfcGF0aF9lbGlnaWJsZTsKKwl1MzIJbDNfY2tzdW1fdmFsaWQ7CisJdTMyCWwzX2Nrc3VtOworCXUzMglsNF9ja3N1bV92YWxpZDsKKwl1MzIJbDRfY2tzdW07CisJdTMyCWZyYW1lOworCXUzMglwcm90bzsKKwl1MzIJaXNfdmxhbjsKKwl1MzIJdmxhbjsKKwl1MzIJcnRoX2J1Y2tldDsKKwl1MzIJcnRoX2l0X2hpdDsKKwl1MzIJcnRoX3NwZG1faGl0OworCXUzMglydGhfaGFzaF90eXBlOworCXUzMglydGhfdmFsdWU7Cit9OworCisvKioKKyAqIGVudW0gZW51bSB2eGdlX2h3X3JpbmdfaGFzaF90eXBlIC0gUlRIIGhhc2ggdHlwZXMKKyAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX05PTkU6IE5vIEhhc2gKKyAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1RDUF9JUFY0OiBUQ1AgSVB2NAorICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfVURQX0lQVjQ6IFVEUCBJUHY0CisgKiBAVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9JUFY0OiBJUHY0CisgKiBAVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9UQ1BfSVBWNjogVENQIElQdjYKKyAqIEBWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX1VEUF9JUFY2OiBVRFAgSVB2NgorICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfSVBWNjogSVB2NgorICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfVENQX0lQVjZfRVg6IFRDUCBJUHY2IGV4dGVuc2lvbgorICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfVURQX0lQVjZfRVg6IFVEUCBJUHY2IGV4dGVuc2lvbgorICogQFZYR0VfSFdfUklOR19IQVNIX1RZUEVfSVBWNl9FWDogSVB2NiBleHRlbnNpb24KKyAqCisgKiBSVEggaGFzaCB0eXBlcworICovCitlbnVtIHZ4Z2VfaHdfcmluZ19oYXNoX3R5cGUgeworCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfTk9ORQkJCT0gMHgwLAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfVENQX0lQVjQJCT0gMHgxLAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfVURQX0lQVjQJCT0gMHgyLAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfSVBWNAkJCT0gMHgzLAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfVENQX0lQVjYJCT0gMHg0LAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfVURQX0lQVjYJCT0gMHg1LAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfSVBWNgkJCT0gMHg2LAorCVZYR0VfSFdfUklOR19IQVNIX1RZUEVfVENQX0lQVjZfRVgJPSAweDcsCisJVlhHRV9IV19SSU5HX0hBU0hfVFlQRV9VRFBfSVBWNl9FWAk9IDB4OCwKKwlWWEdFX0hXX1JJTkdfSEFTSF9UWVBFX0lQVjZfRVgJCT0gMHg5Cit9OworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfcmluZ19yeGRfcmVzZXJ2ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKipyeGRoKTsKKwordm9pZAordnhnZV9od19yaW5nX3J4ZF9wcmVfcG9zdCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKnJ4ZGgpOworCit2b2lkCit2eGdlX2h3X3JpbmdfcnhkX3Bvc3RfcG9zdCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKnJ4ZGgpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3JpbmdfcmVwbGVuaXNoKHN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ19oYW5kbGUsIHUxNiBtaW5fZmxhZyk7CisKK3ZvaWQKK3Z4Z2VfaHdfcmluZ19yeGRfcG9zdF9wb3N0X3dtYigKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKnJ4ZGgpOworCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfcG9zdCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKnJ4ZGgpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfcmluZ19yeGRfbmV4dF9jb21wbGV0ZWQoCisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5nX2hhbmRsZSwKKwl2b2lkICoqcnhkaCwKKwl1OCAqdF9jb2RlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3JpbmdfaGFuZGxlX3Rjb2RlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ19oYW5kbGUsCisJdm9pZCAqcnhkaCwKKwl1OCB0X2NvZGUpOworCit2b2lkIHZ4Z2VfaHdfcmluZ19yeGRfZnJlZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdfaGFuZGxlLAorCXZvaWQgKnJ4ZGgpOworCisvKioKKyAqIGVudW0gZW51bSB2eGdlX2h3X2ZyYW1lX3Byb3RvIC0gSGlnaGVyLWxheWVyIGV0aGVybmV0IHByb3RvY29scy4KKyAqIEBWWEdFX0hXX0ZSQU1FX1BST1RPX1ZMQU5fVEFHR0VEOiBWTEFOLgorICogQFZYR0VfSFdfRlJBTUVfUFJPVE9fSVBWNDogSVB2NC4KKyAqIEBWWEdFX0hXX0ZSQU1FX1BST1RPX0lQVjY6IElQdjYuCisgKiBAVlhHRV9IV19GUkFNRV9QUk9UT19JUF9GUkFHOiBJUCBmcmFnbWVudGVkLgorICogQFZYR0VfSFdfRlJBTUVfUFJPVE9fVENQOiBUQ1AuCisgKiBAVlhHRV9IV19GUkFNRV9QUk9UT19VRFA6IFVEUC4KKyAqIEBWWEdFX0hXX0ZSQU1FX1BST1RPX1RDUF9PUl9VRFA6IFRDUCBvciBVRFAuCisgKgorICogSGlnaGVyIGxheWVyIGV0aGVybmV0IHByb3RvY29scyBhbmQgb3B0aW9ucy4KKyAqLworZW51bSB2eGdlX2h3X2ZyYW1lX3Byb3RvIHsKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX1ZMQU5fVEFHR0VEID0gMHg4MCwKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX0lQVjQJCT0gMHgxMCwKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX0lQVjYJCT0gMHgwOCwKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX0lQX0ZSQUcJCT0gMHgwNCwKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX1RDUAkJCT0gMHgwMiwKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX1VEUAkJCT0gMHgwMSwKKwlWWEdFX0hXX0ZSQU1FX1BST1RPX1RDUF9PUl9VRFAJPSAoVlhHRV9IV19GUkFNRV9QUk9UT19UQ1AgfCBcCisJCQkJCQkgICBWWEdFX0hXX0ZSQU1FX1BST1RPX1VEUCkKK307CisKKy8qKgorICogZW51bSBlbnVtIHZ4Z2VfaHdfZmlmb19nYXRoZXJfY29kZSAtIEdhdGhlciBjb2RlcyB1c2VkIGluIGZpZm8gVHhECisgKiBAVlhHRV9IV19GSUZPX0dBVEhFUl9DT0RFX0ZJUlNUOiBGaXJzdCBUeERMCisgKiBAVlhHRV9IV19GSUZPX0dBVEhFUl9DT0RFX01JRERMRTogTWlkZGxlIFR4REwKKyAqIEBWWEdFX0hXX0ZJRk9fR0FUSEVSX0NPREVfTEFTVDogTGFzdCBUeERMCisgKiBAVlhHRV9IV19GSUZPX0dBVEhFUl9DT0RFX0ZJUlNUX0xBU1Q6IEZpcnN0IGFuZCBMYXN0IFR4REwuCisgKgorICogVGhlc2UgZ2F0aGVyIGNvZGVzIGFyZSB1c2VkIHRvIGluZGljYXRlIHRoZSBwb3NpdGlvbiBvZiBhIFR4RCBpbiBhIFR4RCBsaXN0CisgKi8KK2VudW0gdnhnZV9od19maWZvX2dhdGhlcl9jb2RlIHsKKwlWWEdFX0hXX0ZJRk9fR0FUSEVSX0NPREVfRklSU1QJCT0gMHgyLAorCVZYR0VfSFdfRklGT19HQVRIRVJfQ09ERV9NSURETEUJCT0gMHgwLAorCVZYR0VfSFdfRklGT19HQVRIRVJfQ09ERV9MQVNUCQk9IDB4MSwKKwlWWEdFX0hXX0ZJRk9fR0FUSEVSX0NPREVfRklSU1RfTEFTVAk9IDB4MworfTsKKworLyoqCisgKiBlbnVtIGVudW0gdnhnZV9od19maWZvX3Rjb2RlIC0gdGNvZGVzIHVzZWQgaW4gZmlmbworICogQFZYR0VfSFdfRklGT19UX0NPREVfT0s6IFRyYW5zZmVyIE9LCisgKiBAVlhHRV9IV19GSUZPX1RfQ09ERV9QQ0lfUkVBRF9DT1JSVVBUOiBQQ0kgcmVhZCB0cmFuc2FjdGlvbiAoZWl0aGVyIFR4RCBvcgorICogICAgICAgICAgICAgZnJhbWUgZGF0YSkgcmV0dXJuZWQgd2l0aCBjb3JydXB0IGRhdGEuCisgKiBAVlhHRV9IV19GSUZPX1RfQ09ERV9QQ0lfUkVBRF9GQUlMOlBDSSByZWFkIHRyYW5zYWN0aW9uIHdhcyByZXR1cm5lZAorICogICAgICAgICAgICAgd2l0aCBubyBkYXRhLgorICogQFZYR0VfSFdfRklGT19UX0NPREVfSU5WQUxJRF9NU1M6IFRoZSBob3N0IGF0dGVtcHRlZCB0byBzZW5kIGVpdGhlciBhCisgKiAgICAgICAgICAgICBmcmFtZSBvciBMU08gTVNTIHRoYXQgd2FzIHRvbyBsb25nICg+OTgwMEIpLgorICogQFZYR0VfSFdfRklGT19UX0NPREVfTFNPX0VSUk9SOiBFcnJvciBkZXRlY3RlZCBkdXJpbmcgVENQL1VEUCBMYXJnZSBTZW5kCisJKgkgICAgICAgT2ZmbG9hZCBvcGVyYXRpb24sIGR1ZSB0byBpbXByb3BlciBoZWFkZXIgdGVtcGxhdGUsCisJKgkgICAgICAgdW5zdXBwb3J0ZWQgcHJvdG9jb2wsIGV0Yy4KKyAqIEBWWEdFX0hXX0ZJRk9fVF9DT0RFX1VOVVNFRDogVW51c2VkCisgKiBAVlhHRV9IV19GSUZPX1RfQ09ERV9NVUxUSV9FUlJPUjogU2V0IHRvIDEgYnkgdGhlIGFkYXB0ZXIgaWYgbXVsdGlwbGUKKyAqICAgICAgICAgICAgIGRhdGEgYnVmZmVyIHRyYW5zZmVyIGVycm9ycyBhcmUgZW5jb3VudGVyZWQgKHNlZSBiZWxvdykuCisgKiAgICAgICAgICAgICBPdGhlcndpc2UgaXQgaXMgc2V0IHRvIDAuCisgKgorICogVGhlc2UgdGNvZGVzIGFyZSByZXR1cm5lZCBpbiB2YXJpb3VzIEFQSSBmb3IgVHhEIHN0YXR1cworICovCitlbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSB7CisJVlhHRV9IV19GSUZPX1RfQ09ERV9PSwkJCT0gMHgwLAorCVZYR0VfSFdfRklGT19UX0NPREVfUENJX1JFQURfQ09SUlVQVAk9IDB4MSwKKwlWWEdFX0hXX0ZJRk9fVF9DT0RFX1BDSV9SRUFEX0ZBSUwJPSAweDIsCisJVlhHRV9IV19GSUZPX1RfQ09ERV9JTlZBTElEX01TUwkJPSAweDMsCisJVlhHRV9IV19GSUZPX1RfQ09ERV9MU09fRVJST1IJCT0gMHg0LAorCVZYR0VfSFdfRklGT19UX0NPREVfVU5VU0VECQk9IDB4NywKKwlWWEdFX0hXX0ZJRk9fVF9DT0RFX01VTFRJX0VSUk9SCQk9IDB4OAorfTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2ZpZm9fdHhkbF9yZXNlcnZlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gsCisJdm9pZCAqKnR4ZGxoLAorCXZvaWQgKip0eGRsX3ByaXYpOworCit2b2lkIHZ4Z2VfaHdfZmlmb190eGRsX2J1ZmZlcl9zZXQoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faGFuZGxlLAorCQkJdm9pZCAqdHhkbGgsCisJCQl1MzIgZnJhZ19pZHgsCisJCQlkbWFfYWRkcl90IGRtYV9wb2ludGVyLAorCQkJdTMyIHNpemUpOworCit2b2lkIHZ4Z2VfaHdfZmlmb190eGRsX3Bvc3QoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faGFuZGxlLAorCQkJdm9pZCAqdHhkbGgpOworCit1MzIgdnhnZV9od19maWZvX2ZyZWVfdHhkbF9jb3VudF9nZXQoCisJCQlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9faGFuZGxlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2ZpZm9fdHhkbF9uZXh0X2NvbXBsZXRlZCgKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9oLAorCXZvaWQgKip0eGRsaCwKKwllbnVtIHZ4Z2VfaHdfZmlmb190Y29kZSAqdF9jb2RlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X2ZpZm9faGFuZGxlX3Rjb2RlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gsCisJdm9pZCAqdHhkbGgsCisJZW51bSB2eGdlX2h3X2ZpZm9fdGNvZGUgdF9jb2RlKTsKKwordm9pZCB2eGdlX2h3X2ZpZm9fdHhkbF9mcmVlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gsCisJdm9pZCAqdHhkbGgpOworCisvKgorICogRGV2aWNlCisgKi8KKworI2RlZmluZSBWWEdFX0hXX1JJTkdfTkVYVF9CTE9DS19QT0lOVEVSX09GRlNFVAkoVlhHRV9IV19CTE9DS19TSVpFLTgpCisjZGVmaW5lIFZYR0VfSFdfUklOR19NRU1CTE9DS19JRFhfT0ZGU0VUCQkoVlhHRV9IV19CTE9DS19TSVpFLTE2KQorI2RlZmluZSBWWEdFX0hXX1JJTkdfTUlOX0JVRkZfQUxMT0NBVElPTgkJNjQKKworLyoKKyAqIHN0cnVjdCBfX3Z4Z2VfaHdfcmluZ19yeGRfcHJpdiAtIFJlY2VpdmUgZGVzY3JpcHRvciBIVy1wcml2YXRlIGRhdGEuCisgKiBAZG1hX2FkZHI6IERNQSAobWFwcGVkKSBhZGRyZXNzIG9mIF90aGlzXyBkZXNjcmlwdG9yLgorICogQGRtYV9oYW5kbGU6IERNQSBoYW5kbGUgdXNlZCB0byBtYXAgdGhlIGRlc2NyaXB0b3Igb250byBkZXZpY2UuCisgKiBAZG1hX29mZnNldDogRGVzY3JpcHRvcidzIG9mZnNldCBpbiB0aGUgbWVtb3J5IGJsb2NrLiBIVyBhbGxvY2F0ZXMKKyAqICAgICAgICAgICAgICBkZXNjcmlwdG9ycyBpbiBtZW1vcnkgYmxvY2tzIG9mICVWWEdFX0hXX0JMT0NLX1NJWkUKKyAqICAgICAgICAgICAgICBieXRlcy4gRWFjaCBtZW1ibG9jayBpcyBjb250aWd1b3VzIERNQS1hYmxlIG1lbW9yeS4gRWFjaAorICogICAgICAgICAgICAgIG1lbWJsb2NrIGNvbnRhaW5zIDEgb3IgbW9yZSA0S0IgUnhEIGJsb2NrcyB2aXNpYmxlIHRvIHRoZQorICogICAgICAgICAgICAgIFRpdGFuIGhhcmR3YXJlLgorICogQGRtYV9vYmplY3Q6IERNQSBhZGRyZXNzIGFuZCBoYW5kbGUgb2YgdGhlIG1lbW9yeSBibG9jayB0aGF0IGNvbnRhaW5zCisgKiAgICAgICAgICAgICAgdGhlIGRlc2NyaXB0b3IuIFRoaXMgbWVtYmVyIGlzIHVzZWQgb25seSBpbiB0aGUgImNoZWNrZWQiCisgKiAgICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGUgSFcgKHRvIGVuZm9yY2UgY2VydGFpbiBhc3NlcnRpb25zKTsKKyAqICAgICAgICAgICAgICBvdGhlcndpc2UgaXQgZ2V0cyBjb21waWxlZCBvdXQuCisgKiBAYWxsb2NhdGVkOiBUcnVlIGlmIHRoZSBkZXNjcmlwdG9yIGlzIHJlc2VydmVkLCAwIG90aGVyd2lzZS4gSW50ZXJuYWwgdXNhZ2UuCisgKgorICogUGVyLXJlY2VpdmUgZGVjc3JpcHRvciBIVy1wcml2YXRlIGRhdGEuIEhXIHVzZXMgdGhlIHNwYWNlIHRvIGtlZXAgRE1BCisgKiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGRlc2NyaXB0b3IuIE5vdGUgdGhhdCBkcml2ZXIgY2FuIGFzayBIVworICogdG8gYWxsb2NhdGUgYWRkaXRpb25hbCBwZXItZGVzY3JpcHRvciBzcGFjZSBmb3IgaXRzIG93biAoZHJpdmVyLXNwZWNpZmljKQorICogcHVycG9zZXMuCisgKi8KK3N0cnVjdCBfX3Z4Z2VfaHdfcmluZ19yeGRfcHJpdiB7CisJZG1hX2FkZHJfdAlkbWFfYWRkcjsKKwlzdHJ1Y3QgcGNpX2RldiAqZG1hX2hhbmRsZTsKKwlwdHJkaWZmX3QJZG1hX29mZnNldDsKKyNpZmRlZiBWWEdFX0RFQlVHX0FTU0VSVAorCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hCSpkbWFfb2JqZWN0OworI2VuZGlmCit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09IFJJTkcgUFJJVkFURSBBUEkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK3U2NAorX192eGdlX2h3X3JpbmdfZmlyc3RfYmxvY2tfYWRkcmVzc19nZXQoCisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5naCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19yaW5nX2NyZWF0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXN0cnVjdCB2eGdlX2h3X3JpbmdfYXR0ciAqYXR0cik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19yaW5nX2Fib3J0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfcmluZyAqcmluZ2gpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfcmluZ19yZXNldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3JpbmcgKnJpbmdoKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3JpbmdfZGVsZXRlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09IEZJRk8gUFJJVkFURSBBUEkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworc3RydWN0IHZ4Z2VfaHdfZmlmb19hdHRyOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZmlmb19jcmVhdGUoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwlzdHJ1Y3QgdnhnZV9od19maWZvX2F0dHIgKmF0dHIpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZmlmb19hYm9ydCgKKwlzdHJ1Y3QgX192eGdlX2h3X2ZpZm8gKmZpZm9oKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2ZpZm9fcmVzZXQoCisJc3RydWN0IF9fdnhnZV9od19maWZvICpyaW5naCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od19maWZvX2RlbGV0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKworc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbF9jYnMgeworCXZvaWQgKCppdGVtX2Z1bmNfYWxsb2MpKAorCQkJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbGgsCisJCQl1MzIJCQltZW1ibG9ja19pbmRleCwKKwkJCXN0cnVjdCB2eGdlX2h3X21lbXBvb2xfZG1hCSpkbWFfb2JqZWN0LAorCQkJdTMyCQkJaW5kZXgsCisJCQl1MzIJCQlpc19sYXN0KTsKK307CisKK3ZvaWQKK19fdnhnZV9od19tZW1wb29sX2Rlc3Ryb3koCisJc3RydWN0IHZ4Z2VfaHdfbWVtcG9vbCAqbWVtcG9vbCk7CisKKyNkZWZpbmUgVlhHRV9IV19WSVJUVUFMX1BBVEhfSEFORExFKHZwYXRoKQkJCQlcCisJCSgoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKikodnBhdGgpLT52cGF0aF9oYW5kbGVzLm5leHQpCisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9ydHNfdGFibGVfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTMyCQkJYWN0aW9uLAorCXUzMgkJCXJ0c190YWJsZSwKKwl1MzIJCQlvZmZzZXQsCisJdTY0CQkJKmRhdGExLAorCXU2NAkJCSpkYXRhMik7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF9ydHNfdGFibGVfc2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTMyCQkJYWN0aW9uLAorCXUzMgkJCXJ0c190YWJsZSwKKwl1MzIJCQlvZmZzZXQsCisJdTY0CQkJZGF0YTEsCisJdTY0CQkJZGF0YTIpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfcmVzZXQoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfc3dfcmVzZXQoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfZW5hYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCXUzMgkJCXZwX2lkKTsKKwordm9pZAorX192eGdlX2h3X3ZwYXRoX3ByY19jb25maWd1cmUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfa2RmY19jb25maWd1cmUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfbWFjX2NvbmZpZ3VyZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIJCQl2cF9pZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK19fdnhnZV9od192cGF0aF90aW1fY29uZmlndXJlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCXUzMgkJCXZwX2lkKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X3ZwYXRoX2luaXRpYWxpemUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBfaW5pdGlhbGl6ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwKKwl1MzIJCQl2cF9pZCwKKwlzdHJ1Y3QgdnhnZV9od192cF9jb25maWcJKmNvbmZpZyk7CisKK3ZvaWQKK19fdnhnZV9od192cF90ZXJtaW5hdGUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgsCisJdTMyCQkJdnBfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2VzcygKKwlzdHJ1Y3QgX192eGdlX2h3X3ZpcnR1YWxwYXRoCSp2cGF0aCwKKwl1MzIJCQlza2lwX2FsYXJtcyk7CisKK3ZvaWQgdnhnZV9od19kZXZpY2VfaW50cl9lbmFibGUoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCit1MzIgdnhnZV9od19kZXZpY2Vfc2V0X2ludHJfdHlwZShzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCwgdTMyIGludHJfbW9kZSk7CisKK3ZvaWQgdnhnZV9od19kZXZpY2VfaW50cl9kaXNhYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoKTsKKwordm9pZCB2eGdlX2h3X2RldmljZV9tYXNrX2FsbCgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK3ZvaWQgdnhnZV9od19kZXZpY2VfdW5tYXNrX2FsbCgKKwlzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od19kZXZpY2VfYmVnaW5faXJxKAorCXN0cnVjdCBfX3Z4Z2VfaHdfZGV2aWNlICpkZXZoLAorCXUzMiBza2lwX2FsYXJtcywKKwl1NjQgKnJlYXNvbik7CisKK3ZvaWQgdnhnZV9od19kZXZpY2VfY2xlYXJfdHhfcngoCisJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmRldmgpOworCisvKgorICogIFZpcnR1YWwgUGF0aHMKKyAqLworCit1MzIgdnhnZV9od192cGF0aF9pZCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKworZW51bSB2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2FkZF9tb2RlIHsKKwlWWEdFX0hXX1ZQQVRIX01BQ19BRERSX0FERF9EVVBMSUNBVEUgPSAwLAorCVZYR0VfSFdfVlBBVEhfTUFDX0FERFJfRElTQ0FSRF9EVVBMSUNBVEUgPSAxLAorCVZYR0VfSFdfVlBBVEhfTUFDX0FERFJfUkVQTEFDRV9EVVBMSUNBVEUgPSAyCit9OworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2FkZCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sCisJdTggKG1hY2FkZHJfbWFzaylbRVRIX0FMRU5dLAorCWVudW0gdnhnZV9od192cGF0aF9tYWNfYWRkcl9hZGRfbW9kZSBkdXBsaWNhdGVfbW9kZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbWFjX2FkZHJfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTggKG1hY2FkZHIpW0VUSF9BTEVOXSwKKwl1OCAobWFjYWRkcl9tYXNrKVtFVEhfQUxFTl0pOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2dldF9uZXh0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTggKG1hY2FkZHIpW0VUSF9BTEVOXSwKKwl1OCAobWFjYWRkcl9tYXNrKVtFVEhfQUxFTl0pOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX21hY19hZGRyX2RlbGV0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXU4IChtYWNhZGRyKVtFVEhfQUxFTl0sCisJdTggKG1hY2FkZHJfbWFzaylbRVRIX0FMRU5dKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF92aWRfYWRkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTY0CQkJdmlkKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cwordnhnZV9od192cGF0aF92aWRfZ2V0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTY0CQkJKnZpZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfdmlkX2dldF9uZXh0KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTY0CQkJKnZpZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfdmlkX2RlbGV0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXU2NAkJCXZpZCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfZXR5cGVfYWRkKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUsCisJdTY0CQkJZXR5cGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX2V0eXBlX2dldCgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXU2NAkJCSpldHlwZSk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfZXR5cGVfZ2V0X25leHQoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwl1NjQJCQkqZXR5cGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X3ZwYXRoX2V0eXBlX2RlbGV0ZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXU2NAkJCWV0eXBlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3Byb21pc2NfZW5hYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfcHJvbWlzY19kaXNhYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfYmNhc3RfZW5hYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZW5hYmxlKAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfbWNhc3RfZGlzYWJsZSgKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX3BvbGxfcngoCisJc3RydWN0IF9fdnhnZV9od19yaW5nICpyaW5naCk7CisKK2VudW0gdnhnZV9od19zdGF0dXMgdnhnZV9od192cGF0aF9wb2xsX3R4KAorCXN0cnVjdCBfX3Z4Z2VfaHdfZmlmbyAqZmlmb2gsCisJdm9pZCAqKnNrYl9wdHIpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfYWxhcm1fcHJvY2VzcygKKwlzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCXUzMiBza2lwX2FsYXJtcyk7CisKK2VudW0gdnhnZV9od19zdGF0dXMKK3Z4Z2VfaHdfdnBhdGhfbXNpeF9zZXQoc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwkJICAgICAgIGludCAqdGltX21zaXhfaWQsIGludCBhbGFybV9tc2l4X2lkKTsKKwordm9pZAordnhnZV9od192cGF0aF9tc2l4X21hc2soc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSwKKwkJCWludCBtc2l4X2lkKTsKKwordm9pZCB2eGdlX2h3X2RldmljZV9mbHVzaF9pbyhzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqZGV2aCk7CisKK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfbXNpeF9jbGVhcihzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCQkJIGludCBtc2l4X2lkKTsKKwordm9pZAordnhnZV9od192cGF0aF9tc2l4X3VubWFzayhzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlLAorCQkJICBpbnQgbXNpeF9pZCk7CisKK3ZvaWQKK3Z4Z2VfaHdfdnBhdGhfbXNpeF9tYXNrX2FsbChzdHJ1Y3QgX192eGdlX2h3X3ZwYXRoX2hhbmRsZSAqdnBhdGhfaGFuZGxlKTsKKworZW51bSB2eGdlX2h3X3N0YXR1cyB2eGdlX2h3X3ZwYXRoX2ludHJfZW5hYmxlKAorCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzIHZ4Z2VfaHdfdnBhdGhfaW50cl9kaXNhYmxlKAorCQkJCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCit2b2lkIHZ4Z2VfaHdfdnBhdGhfaW50YV9tYXNrX3R4X3J4KAorCXN0cnVjdCBfX3Z4Z2VfaHdfdnBhdGhfaGFuZGxlICp2cGF0aF9oYW5kbGUpOworCit2b2lkIHZ4Z2VfaHdfdnBhdGhfaW50YV91bm1hc2tfdHhfcngoCisJc3RydWN0IF9fdnhnZV9od192cGF0aF9oYW5kbGUgKnZwYXRoX2hhbmRsZSk7CisKK3ZvaWQKK3Z4Z2VfaHdfY2hhbm5lbF9tc2l4X21hc2soc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsaCwgaW50IG1zaXhfaWQpOworCit2b2lkCit2eGdlX2h3X2NoYW5uZWxfbXNpeF91bm1hc2soc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsaCwgaW50IG1zaXhfaWQpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCit2eGdlX2h3X2NoYW5uZWxfZHRyX2FsbG9jKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCwgdm9pZCAqKmR0cmgpOworCit2b2lkCit2eGdlX2h3X2NoYW5uZWxfZHRyX3Bvc3Qoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLCB2b2lkICpkdHJoKTsKKwordm9pZAordnhnZV9od19jaGFubmVsX2R0cl90cnlfY29tcGxldGUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsLAorCQkJCSB2b2lkICoqZHRyaCk7CisKK3ZvaWQKK3Z4Z2VfaHdfY2hhbm5lbF9kdHJfY29tcGxldGUoc3RydWN0IF9fdnhnZV9od19jaGFubmVsICpjaGFubmVsKTsKKwordm9pZAordnhnZV9od19jaGFubmVsX2R0cl9mcmVlKHN0cnVjdCBfX3Z4Z2VfaHdfY2hhbm5lbCAqY2hhbm5lbCwgdm9pZCAqZHRyaCk7CisKK2ludAordnhnZV9od19jaGFubmVsX2R0cl9jb3VudChzdHJ1Y3QgX192eGdlX2h3X2NoYW5uZWwgKmNoYW5uZWwpOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PSBQUklWQVRFIEFQSSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9oYW5kbGVfbGlua191cF9pbmQoc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2KTsKKworZW51bSB2eGdlX2h3X3N0YXR1cworX192eGdlX2h3X2RldmljZV9oYW5kbGVfbGlua19kb3duX2luZChzdHJ1Y3QgX192eGdlX2h3X2RldmljZSAqaGxkZXYpOworCitlbnVtIHZ4Z2VfaHdfc3RhdHVzCitfX3Z4Z2VfaHdfZGV2aWNlX2hhbmRsZV9lcnJvcigKKwkJc3RydWN0IF9fdnhnZV9od19kZXZpY2UgKmhsZGV2LAorCQl1MzIgdnBfaWQsCisJCWVudW0gdnhnZV9od19ldmVudCB0eXBlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtdmVyc2lvbi5oIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGEwMmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdnhnZS92eGdlLXZlcnNpb24uaApAQCAtMCwwICsxLDIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCisgKiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICogRHJpdmVycyBiYXNlZCBvbiBvciBkZXJpdmVkIGZyb20gdGhpcyBjb2RlIGZhbGwgdW5kZXIgdGhlIEdQTCBhbmQgbXVzdAorICogcmV0YWluIHRoZSBhdXRob3JzaGlwLCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2Ugbm90aWNlLiAgVGhpcyBmaWxlIGlzIG5vdAorICogYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25seSBiZSB1c2VkIHdoZW4gdGhlIGVudGlyZSBvcGVyYXRpbmcKKyAqIHN5c3RlbSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBkaXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogdnhnZS12ZXJzaW9uLmg6IERyaXZlciBmb3IgTmV0ZXJpb24gSW5jJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PCisgKiAgICAgICAgICAgICAgICAgVmlydHVhbGl6ZWQgU2VydmVyIEFkYXB0ZXIuCisgKiBDb3B5cmlnaHQoYykgMjAwMi0yMDA5IE5ldGVyaW9uIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFZYR0VfVkVSU0lPTl9ICisKKyNkZWZpbmUgVlhHRV9WRVJTSU9OX0gKKworI2RlZmluZSBWWEdFX1ZFUlNJT05fTUFKT1IJIjIiCisjZGVmaW5lIFZYR0VfVkVSU0lPTl9NSU5PUgkiMCIKKyNkZWZpbmUgVlhHRV9WRVJTSU9OX0ZJWAkiMSIKKyNkZWZpbmUgVlhHRV9WRVJTSU9OX0JVSUxECSIxNzEyOSIKKyNkZWZpbmUgVlhHRV9WRVJTSU9OX0ZPUgkiayIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKaW5kZXggMDA5NDVmNy4uMjVjOWVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYworKysgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCkBAIC02OSw3ICs2OSw3IEBACiAjZW5kaWYKIAogLyoKLSAqIE1vZHVsZXMgcGFyYW1ldGVycyBhbmQgYXNzb2NpYXRlZCB2YXJhaWJsZXMKKyAqIE1vZHVsZXMgcGFyYW1ldGVycyBhbmQgYXNzb2NpYXRlZCB2YXJpYWJsZXMKICAqLwogc3RhdGljIGludCBmc3RfdHhxX2xvdyA9IEZTVF9MT1dfV0FURVJfTUFSSzsKIHN0YXRpYyBpbnQgZnN0X3R4cV9oaWdoID0gRlNUX0hJR0hfV0FURVJfTUFSSzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKaW5kZXggMTE1YjcwNC4uZjRlOTYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKQEAgLTIzNjIsNyArMjM2Miw3IEBACiAJCSAgICAgICBpICogc2l6ZW9mKHN0cnVjdCBpcHcyMTAwX3N0YXR1cykpOwogCiAjaWZkZWYgSVBXMjEwMF9ERUJVR19DMwotCS8qIEhhbHQgdGhlIGZpbXJ3YXJlIHNvIHdlIGNhbiBnZXQgYSBnb29kIGltYWdlICovCisJLyogSGFsdCB0aGUgZmlybXdhcmUgc28gd2UgY2FuIGdldCBhIGdvb2QgaW1hZ2UgKi8KIAl3cml0ZV9yZWdpc3Rlcihwcml2LT5uZXRfZGV2LCBJUFdfUkVHX1JFU0VUX1JFRywKIAkJICAgICAgIElQV19BVVhfSE9TVF9SRVNFVF9SRUdfU1RPUF9NQVNURVIpOwogCWogPSA1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwppbmRleCA0YTkyYWYxLi5lMTdhNDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwpAQCAtODg0NCw3ICs4ODQ0LDcgQEAKICNlbmRpZgkJCQkvKiBDT05GSUdfSVBXMjIwMF9NT05JVE9SICovCiAKIAkvKiBGcmVlIHRoZSBleGlzdGluZyBmaXJtd2FyZSBhbmQgcmVzZXQgdGhlIGZ3X2xvYWRlZAotCSAqIGZsYWcgc28gaXB3X2xvYWQoKSB3aWxsIGJyaW5nIGluIHRoZSBuZXcgZmlybWF3cmUgKi8KKwkgKiBmbGFnIHNvIGlwd19sb2FkKCkgd2lsbCBicmluZyBpbiB0aGUgbmV3IGZpcm13YXJlICovCiAJZnJlZV9maXJtd2FyZSgpOwogCiAJcHJpdi0+aWVlZS0+aXdfbW9kZSA9IHdycXUtPm1vZGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDY2M2RjODMuLjM4ODkxNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0xMzM3LDcgKzEzMzcsNyBAQAogCiAJLyogYXBpX3ZlciBzaG91bGQgbWF0Y2ggdGhlIGFwaSB2ZXJzaW9uIGZvcm1pbmcgcGFydCBvZiB0aGUKIAkgKiBmaXJtd2FyZSBmaWxlbmFtZSAuLi4gYnV0IHdlIGRvbid0IGNoZWNrIGZvciB0aGF0IGFuZCBvbmx5IHJlbHkKLQkgKiBvbiB0aGUgQVBJIHZlcnNpb24gcmVhZCBmcm9tIGZpcndhcmUgaGVhZGVyIGZyb20gaGVyZSBvbiBmb3J3YXJkICovCisJICogb24gdGhlIEFQSSB2ZXJzaW9uIHJlYWQgZnJvbSBmaXJtd2FyZSBoZWFkZXIgZnJvbSBoZXJlIG9uIGZvcndhcmQgKi8KIAogCWlmIChhcGlfdmVyIDwgYXBpX21pbiB8fCBhcGlfdmVyID4gYXBpX21heCkgewogCQlJV0xfRVJSKHByaXYsICJEcml2ZXIgdW5hYmxlIHRvIHN1cHBvcnQgeW91ciBmaXJtd2FyZSBBUEkuICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCmluZGV4IGE3MWIwOGMuLjlkNWY5N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwpAQCAtMjU2Miw3ICsyNTYyLDcgQEAKIAogCS8qIGFwaV92ZXIgc2hvdWxkIG1hdGNoIHRoZSBhcGkgdmVyc2lvbiBmb3JtaW5nIHBhcnQgb2YgdGhlCiAJICogZmlybXdhcmUgZmlsZW5hbWUgLi4uIGJ1dCB3ZSBkb24ndCBjaGVjayBmb3IgdGhhdCBhbmQgb25seSByZWx5Ci0JICogb24gdGhlIEFQSSB2ZXJzaW9uIHJlYWQgZnJvbSBmaXJ3YXJlIGhlYWRlciBmcm9tIGhlcmUgb24gZm9yd2FyZCAqLworCSAqIG9uIHRoZSBBUEkgdmVyc2lvbiByZWFkIGZyb20gZmlybXdhcmUgaGVhZGVyIGZyb20gaGVyZSBvbiBmb3J3YXJkICovCiAKIAlpZiAoYXBpX3ZlciA8IGFwaV9taW4gfHwgYXBpX3ZlciA+IGFwaV9tYXgpIHsKIAkJSVdMX0VSUihwcml2LCAiRHJpdmVyIHVuYWJsZSB0byBzdXBwb3J0IHlvdXIgZmlybXdhcmUgQVBJLiAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCmluZGV4IDYzOWRkMDIuLjhjMzYwNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5jCkBAIC0xNjQ5LDcgKzE2NDksNyBAQAogCiAvKioKICAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiBleGVjdXRlcyBuZXh0IGNvbW1hbmQgaW4gY29tbWFuZAotICogIHBlbmRpbmcgcXVldWUuIEl0IHdpbGwgcHV0IGZpbXdhcmUgYmFjayB0byBQUyBtb2RlCisgKiAgcGVuZGluZyBxdWV1ZS4gSXQgd2lsbCBwdXQgZmlybXdhcmUgYmFjayB0byBQUyBtb2RlCiAgKiAgaWYgYXBwbGljYWJsZS4KICAqCiAgKiAgQHBhcmFtIHByaXYgICAgIEEgcG9pbnRlciB0byBzdHJ1Y3QgbGJzX3ByaXZhdGUgc3RydWN0dXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2Jhc2UuYyBiL2RyaXZlcnMvb2YvYmFzZS5jCmluZGV4IGNkMTcwOTIuLjQxYzVkZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvYmFzZS5jCisrKyBiL2RyaXZlcnMvb2YvYmFzZS5jCkBAIC00NDYsNiArNDQ2LDcgQEAKIH07CiBzdGF0aWMgc3RydWN0IG9mX21vZGFsaWFzX3RhYmxlIG9mX21vZGFsaWFzX3RhYmxlW10gPSB7CiAJeyAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiLCAibWN1LW1wYzgzNDllbWl0eCIgfSwKKwl7ICJtbWMtc3BpLXNsb3QiLCAibW1jX3NwaSIgfSwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCmluZGV4IDJjOWFhNDkuLjg1NzQ2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYworKysgYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKQEAgLTE1NCw2ICsxNTQsMTAgQEAKIHsKIAlpbnQgZXJyOwogCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmbWFya2VkX2NwdXMsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKKwljcHVtYXNrX2NsZWFyKG1hcmtlZF9jcHVzKTsKKwogCXN0YXJ0X2NwdV93b3JrKCk7CiAKIAllcnIgPSB0YXNrX2hhbmRvZmZfcmVnaXN0ZXIoJnRhc2tfZnJlZV9uYik7CkBAIC0xNzksNiArMTgzLDcgQEAKIAl0YXNrX2hhbmRvZmZfdW5yZWdpc3RlcigmdGFza19mcmVlX25iKTsKIG91dDE6CiAJZW5kX3N5bmMoKTsKKwlmcmVlX2NwdW1hc2tfdmFyKG1hcmtlZF9jcHVzKTsKIAlnb3RvIG91dDsKIH0KIApAQCAtMTkwLDYgKzE5NSw3IEBACiAJcHJvZmlsZV9ldmVudF91bnJlZ2lzdGVyKFBST0ZJTEVfVEFTS19FWElULCAmdGFza19leGl0X25iKTsKIAl0YXNrX2hhbmRvZmZfdW5yZWdpc3RlcigmdGFza19mcmVlX25iKTsKIAllbmRfc3luYygpOworCWZyZWVfY3B1bWFza192YXIobWFya2VkX2NwdXMpOwogfQogCiAKQEAgLTU2NSwyMCArNTcxLDYgQEAKIAltdXRleF91bmxvY2soJmJ1ZmZlcl9tdXRleCk7CiB9CiAKLWludCBfX2luaXQgYnVmZmVyX3N5bmNfaW5pdCh2b2lkKQotewotCWlmICghYWxsb2NfY3B1bWFza192YXIoJm1hcmtlZF9jcHVzLCBHRlBfS0VSTkVMKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljcHVtYXNrX2NsZWFyKG1hcmtlZF9jcHVzKTsKLQkJcmV0dXJuIDA7Ci19Ci0KLXZvaWQgYnVmZmVyX3N5bmNfY2xlYW51cCh2b2lkKQotewotCWZyZWVfY3B1bWFza192YXIobWFya2VkX2NwdXMpOwotfQotCiAvKiBUaGUgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gYWRkIGEgYnVmZmVyIHdvcnRoIG9mIGRhdGEgZGlyZWN0bHkgdG8KICAqIHRoZSBrZXJuZWwgYnVmZmVyLiBUaGUgYnVmZmVyIGlzIGFzc3VtZWQgdG8gYmUgYSBjaXJjdWxhciBidWZmZXIuCiAgKiBUYWtlIHRoZSBlbnRyaWVzIGZyb20gaW5kZXggc3RhcnQgYW5kIGVuZCBhdCBpbmRleCBlbmQsIHdyYXBwaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmggYi9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmgKaW5kZXggMGViZjVkYi4uMzExMDczMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5oCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuaApAQCAtMTksOCArMTksNCBAQAogLyogc3luYyB0aGUgZ2l2ZW4gQ1BVJ3MgYnVmZmVyICovCiB2b2lkIHN5bmNfYnVmZmVyKGludCBjcHUpOwogCi0vKiBpbml0aWFsaXplL2Rlc3Ryb3kgdGhlIGJ1ZmZlciBzeXN0ZW0uICovCi1pbnQgYnVmZmVyX3N5bmNfaW5pdCh2b2lkKTsKLXZvaWQgYnVmZmVyX3N5bmNfY2xlYW51cCh2b2lkKTsKLQogI2VuZGlmIC8qIE9QUk9GSUxFX0JVRkZFUl9TWU5DX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvY3B1X2J1ZmZlci5jIGIvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMKaW5kZXggZTc2ZDcxNS4uZjBlOTlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9jcHVfYnVmZmVyLmMKQEAgLTE2MSw3ICsxNjEsNyBAQAogewogCWVudHJ5LT5ldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZQogCQkob3BfcmluZ19idWZmZXJfd3JpdGUsIHNpemVvZihzdHJ1Y3Qgb3Bfc2FtcGxlKSArCi0JCSBzaXplICogc2l6ZW9mKGVudHJ5LT5zYW1wbGUtPmRhdGFbMF0pLCAmZW50cnktPmlycV9mbGFncyk7CisJCSBzaXplICogc2l6ZW9mKGVudHJ5LT5zYW1wbGUtPmRhdGFbMF0pKTsKIAlpZiAoZW50cnktPmV2ZW50KQogCQllbnRyeS0+c2FtcGxlID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShlbnRyeS0+ZXZlbnQpOwogCWVsc2UKQEAgLTE3OCw4ICsxNzgsNyBAQAogCiBpbnQgb3BfY3B1X2J1ZmZlcl93cml0ZV9jb21taXQoc3RydWN0IG9wX2VudHJ5ICplbnRyeSkKIHsKLQlyZXR1cm4gcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChvcF9yaW5nX2J1ZmZlcl93cml0ZSwgZW50cnktPmV2ZW50LAotCQkJCQkgZW50cnktPmlycV9mbGFncyk7CisJcmV0dXJuIHJpbmdfYnVmZmVyX3VubG9ja19jb21taXQob3BfcmluZ19idWZmZXJfd3JpdGUsIGVudHJ5LT5ldmVudCk7CiB9CiAKIHN0cnVjdCBvcF9zYW1wbGUgKm9wX2NwdV9idWZmZXJfcmVhZF9lbnRyeShzdHJ1Y3Qgb3BfZW50cnkgKmVudHJ5LCBpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vcHJvZmlsZS9vcHJvZi5jIGIvZHJpdmVycy9vcHJvZmlsZS9vcHJvZi5jCmluZGV4IGNlZDM5ZjYuLjNjZmZjZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2YuYworKysgYi9kcml2ZXJzL29wcm9maWxlL29wcm9mLmMKQEAgLTE4MywxMCArMTgzLDYgQEAKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gYnVmZmVyX3N5bmNfaW5pdCgpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAllcnIgPSBvcHJvZmlsZV9hcmNoX2luaXQoJm9wcm9maWxlX29wcyk7CiAKIAlpZiAoZXJyIDwgMCB8fCB0aW1lcikgewpAQCAtMTk1LDEwICsxOTEsOCBAQAogCX0KIAogCWVyciA9IG9wcm9maWxlZnNfcmVnaXN0ZXIoKTsKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJb3Byb2ZpbGVfYXJjaF9leGl0KCk7Ci0JCWJ1ZmZlcl9zeW5jX2NsZWFudXAoKTsKLQl9CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjA4LDcgKzIwMiw2IEBACiB7CiAJb3Byb2ZpbGVmc191bnJlZ2lzdGVyKCk7CiAJb3Byb2ZpbGVfYXJjaF9leGl0KCk7Ci0JYnVmZmVyX3N5bmNfY2xlYW51cCgpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2FzcC5jIGIvZHJpdmVycy9wYXJpc2MvYXNwLmMKaW5kZXggNzkzMTEzMzUuLjljYTIxMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2FzcC5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2FzcC5jCkBAIC04MSw3ICs4MSw3IEBACiAJYXNwLmhwYSA9IEFTUF9JTlRFUlJVUFRfQUREUjsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzIHZlcnNpb24gJWQgYXQgMHglbHggZm91bmQuXG4iLCAKLQkJYXNwLm5hbWUsIGFzcC52ZXJzaW9uLCBkZXYtPmhwYS5zdGFydCk7CisJCWFzcC5uYW1lLCBhc3AudmVyc2lvbiwgKHVuc2lnbmVkIGxvbmcpZGV2LT5ocGEuc3RhcnQpOwogCiAJLyogdGhlIElSUSBBU1Agc2hvdWxkIHVzZSAqLwogCXJldCA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMgYi9kcml2ZXJzL3BhcmlzYy9jY2lvLWRtYS5jCmluZGV4IGNkNGRkN2UuLjVkNjEwY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2NjaW8tZG1hLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvY2Npby1kbWEuYwpAQCAtNDA2LDggKzQwNiw2IEBACiAJfQogCWlvYy0+YXZnX3NlYXJjaFtpb2MtPmF2Z19pZHgrK10gPSBjcl9zdGFydDsKIAlpb2MtPmF2Z19pZHggJj0gQ0NJT19TRUFSQ0hfU0FNUExFIC0gMTsKLSNlbmRpZgotI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUwogCWlvYy0+dXNlZF9wYWdlcyArPSBwYWdlc19uZWVkZWQ7CiAjZW5kaWYKIAkvKiAKQEAgLTQ1MywxMCArNDUxLDEwIEBACiAJCXVuc2lnbmVkIGxvbmcgbWFzayA9IH4ofjBVTCA+PiBwYWdlc19tYXBwZWQpOwogCQlDQ0lPX0ZSRUVfTUFQUElOR1MoaW9jLCByZXNfaWR4LCBtYXNrLCA4KTsKICNlbHNlCi0JCUNDSU9fRlJFRV9NQVBQSU5HUyhpb2MsIHJlc19pZHgsIDB4ZmYsIDgpOworCQlDQ0lPX0ZSRUVfTUFQUElOR1MoaW9jLCByZXNfaWR4LCAweGZmVUwsIDgpOwogI2VuZGlmCiAJfSBlbHNlIGlmKHBhZ2VzX21hcHBlZCA8PSAxNikgewotCQlDQ0lPX0ZSRUVfTUFQUElOR1MoaW9jLCByZXNfaWR4LCAweGZmZmYsIDE2KTsKKwkJQ0NJT19GUkVFX01BUFBJTkdTKGlvYywgcmVzX2lkeCwgMHhmZmZmVUwsIDE2KTsKIAl9IGVsc2UgaWYocGFnZXNfbWFwcGVkIDw9IDMyKSB7CiAJCUNDSU9fRlJFRV9NQVBQSU5HUyhpb2MsIHJlc19pZHgsIH4odW5zaWduZWQgaW50KTAsIDMyKTsKICNpZmRlZiBfX0xQNjRfXwpAQCAtMTAyOCw4ICsxMDI2LDEwIEBACiAKIAl3aGlsZSAoaW9jICE9IE5VTEwpIHsKIAkJdW5zaWduZWQgaW50IHRvdGFsX3BhZ2VzID0gaW9jLT5yZXNfc2l6ZSA8PCAzOworI2lmZGVmIENDSU9fQ09MTEVDVF9TVEFUUwogCQl1bnNpZ25lZCBsb25nIGF2ZyA9IDAsIG1pbiwgbWF4OwogCQlpbnQgajsKKyNlbmRpZgogCiAJCWxlbiArPSBzZXFfcHJpbnRmKG0sICIlc1xuIiwgaW9jLT5uYW1lKTsKIAkJCkBAIC0xMDYwLDggKzEwNjAsNyBAQAogCQlhdmcgLz0gQ0NJT19TRUFSQ0hfU0FNUExFOwogCQlsZW4gKz0gc2VxX3ByaW50ZihtLCAiICBCaXRtYXAgc2VhcmNoIDogJWxkLyVsZC8lbGQgKG1pbi9hdmcvbWF4IENQVSBDeWNsZXMpXG4iLAogCQkJCSAgbWluLCBhdmcsIG1heCk7Ci0jZW5kaWYKLSNpZmRlZiBDQ0lPX0NPTExFQ1RfU1RBVFMKKwogCQlsZW4gKz0gc2VxX3ByaW50ZihtLCAicGNpX21hcF9zaW5nbGUoKTogJThsZCBjYWxscyAgJThsZCBwYWdlcyAoYXZnICVkLzEwMDApXG4iLAogCQkJCSAgaW9jLT5tc2luZ2xlX2NhbGxzLCBpb2MtPm1zaW5nbGVfcGFnZXMsCiAJCQkJICAoaW50KSgoaW9jLT5tc2luZ2xlX3BhZ2VzICogMTAwMCkvaW9jLT5tc2luZ2xlX2NhbGxzKSk7CkBAIC0xNDAwLDcgKzEzOTksNyBAQAogCXJlc3VsdCA9IGluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsIHJlcyk7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcygpIGZhaWxlZCB0byBjbGFpbSBDQ0lPIGJ1cyBhZGRyZXNzIHNwYWNlICglMDhseCwlMDhseClcbiIsIAotCQkJX19mdW5jX18sIHJlcy0+c3RhcnQsIHJlcy0+ZW5kKTsKKwkJCV9fZnVuY19fLCAodW5zaWduZWQgbG9uZylyZXMtPnN0YXJ0LCAodW5zaWduZWQgbG9uZylyZXMtPmVuZCk7CiAJfQogfQogCkBAIC0xNTUxLDcgKzE1NTAsOCBAQAogCiAJaW9jLT5uYW1lID0gZGV2LT5pZC5odmVyc2lvbiA9PSBVMl9JT0FfUlVOV0FZID8gIlUyIiA6ICJVVHVybiI7CiAKLQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCAlcyBhdCAweCVseFxuIiwgaW9jLT5uYW1lLCBkZXYtPmhwYS5zdGFydCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgJXMgYXQgMHglbHhcbiIsIGlvYy0+bmFtZSwKKwkJKHVuc2lnbmVkIGxvbmcpZGV2LT5ocGEuc3RhcnQpOwogCiAJZm9yIChpID0gMDsgaSA8IGlvY19jb3VudDsgaSsrKSB7CiAJCWlvY19wID0gJigqaW9jX3ApLT5uZXh0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZGluby5jIGIvZHJpdmVycy9wYXJpc2MvZGluby5jCmluZGV4IGJiNWExYzkuLjUyYWUwYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2Rpbm8uYworKysgYi9kcml2ZXJzL3BhcmlzYy9kaW5vLmMKQEAgLTgxOSw3ICs4MTksOSBAQAogCiAJCXJlc3VsdCA9IGNjaW9fcmVxdWVzdF9yZXNvdXJjZShkaW5vX2Rldi0+aGJhLmRldiwgJnJlc1tpXSk7CiAJCWlmIChyZXN1bHQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gY2xhaW0gUENJIEJ1cyBhZGRyZXNzIHNwYWNlICVkICgweCVseC0weCVseCkhXG4iLCBuYW1lLCBpLCByZXNbaV0uc3RhcnQsIHJlc1tpXS5lbmQpOworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGNsYWltIFBDSSBCdXMgYWRkcmVzcyAiCisJCQkgICAgICAgInNwYWNlICVkICgweCVseC0weCVseCkhXG4iLCBuYW1lLCBpLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nKXJlc1tpXS5zdGFydCwgKHVuc2lnbmVkIGxvbmcpcmVzW2ldLmVuZCk7CiAJCQlyZXR1cm4gcmVzdWx0OwogCQl9CiAJfQpAQCAtODk5LDcgKzkwMSw4IEBACiAJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgcmVzKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVxdWVzdCBJL08gUG9ydCByZWdpb24gZmFpbGVkICIKIAkJICAgICAgICIweCVseC8lbHggKGhwYSAweCVwKVxuIiwKLQkJICAgICAgIG5hbWUsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kLCBkaW5vX2Rldi0+aGJhLmJhc2VfYWRkcik7CisJCSAgICAgICBuYW1lLCAodW5zaWduZWQgbG9uZylyZXMtPnN0YXJ0LCAodW5zaWduZWQgbG9uZylyZXMtPmVuZCwKKwkJICAgICAgIGRpbm9fZGV2LT5oYmEuYmFzZV9hZGRyKTsKIAkJcmV0dXJuIDE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9laXNhLmMgYi9kcml2ZXJzL3BhcmlzYy9laXNhLmMKaW5kZXggNzg5MWRiNS4uZjQxNWZkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2MvZWlzYS5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2Vpc2EuYwpAQCAtMzE0LDcgKzMxNCw3IEBACiAJY2hhciAqbmFtZSA9IGlzX21vbmdvb3NlKGRldikgPyAiTW9uZ29vc2UiIDogIldheCI7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlcyBFSVNBIEFkYXB0ZXIgZm91bmQgYXQgMHglMDhseFxuIiwgCi0JCW5hbWUsIGRldi0+aHBhLnN0YXJ0KTsKKwkJbmFtZSwgKHVuc2lnbmVkIGxvbmcpZGV2LT5ocGEuc3RhcnQpOwogCiAJZWlzYV9kZXYuaGJhLmRldiA9IGRldjsKIAllaXNhX2Rldi5oYmEuaW9tbXUgPSBjY2lvX2dldF9pb21tdShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZWlzYV9lbnVtZXJhdG9yLmMgYi9kcml2ZXJzL3BhcmlzYy9laXNhX2VudW1lcmF0b3IuYwppbmRleCA2ZDhhYWUwLi5jNzA5ZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9laXNhX2VudW1lcmF0b3IuYworKysgYi9kcml2ZXJzL3BhcmlzYy9laXNhX2VudW1lcmF0b3IuYwpAQCAtOTgsNyArOTgsNyBAQAogCQkJcmVzLT5zdGFydCA9IG1lbV9wYXJlbnQtPnN0YXJ0ICsgZ2V0XzI0KGJ1ZitsZW4rMik7CiAJCQlyZXMtPmVuZCA9IHJlcy0+c3RhcnQgKyBnZXRfMTYoYnVmK2xlbis1KSoxMDI0OwogCQkJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwotCQkJcHJpbnRrKCJtZW1vcnkgJWx4LSVseCAiLCByZXMtPnN0YXJ0LCByZXMtPmVuZCk7CisJCQlwcmludGsoIm1lbW9yeSAlbHgtJWx4ICIsICh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nKXJlcy0+ZW5kKTsKIAkJCXJlc3VsdCA9IHJlcXVlc3RfcmVzb3VyY2UobWVtX3BhcmVudCwgcmVzKTsKIAkJCWlmIChyZXN1bHQgPCAwKSB7CiAJCQkJcHJpbnRrKCJcbiIgS0VSTl9FUlIgIkVJU0EgRW51bWVyYXRvcjogZmFpbGVkIHRvIGNsYWltIEVJU0EgQnVzIGFkZHJlc3Mgc3BhY2UhXG4iKTsKQEAgLTE4OCw3ICsxODgsNyBAQAogCQkJcmVzLT5zdGFydCA9IGdldF8xNihidWYrbGVuKzEpOwogCQkJcmVzLT5lbmQgPSBnZXRfMTYoYnVmK2xlbisxKSsoYyZIUEVFX1BPUlRfU0laRV9NQVNLKSsxOwogCQkJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfSU87Ci0JCQlwcmludGsoImlvcG9ydHMgJWx4LSVseCAiLCByZXMtPnN0YXJ0LCByZXMtPmVuZCk7CisJCQlwcmludGsoImlvcG9ydHMgJWx4LSVseCAiLCAodW5zaWduZWQgbG9uZylyZXMtPnN0YXJ0LCAodW5zaWduZWQgbG9uZylyZXMtPmVuZCk7CiAJCQlyZXN1bHQgPSByZXF1ZXN0X3Jlc291cmNlKGlvX3BhcmVudCwgcmVzKTsKIAkJCWlmIChyZXN1bHQgPCAwKSB7CiAJCQkJcHJpbnRrKCJcbiIgS0VSTl9FUlIgIkVJU0EgRW51bWVyYXRvcjogZmFpbGVkIHRvIGNsYWltIEVJU0EgQnVzIGFkZHJlc3Mgc3BhY2UhXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYyBiL2RyaXZlcnMvcGFyaXNjL2lvc2FwaWMuYwppbmRleCA1MDFhYWYxLi43MzM0OGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9pb3NhcGljLmMKKysrIGIvZHJpdmVycy9wYXJpc2MvaW9zYXBpYy5jCkBAIC03MTQsNyArNzE0LDcgQEAKIAlpZiAoZGVzdF9jcHUgPCAwKQogCQlyZXR1cm47CiAKLQlpcnFfZGVzY1tpcnFdLmFmZmluaXR5ID0gY3B1bWFza19vZl9jcHUoZGVzdF9jcHUpOworCWNwdW1hc2tfY29weShpcnFfZGVzY1tpcnFdLmFmZmluaXR5LCBjcHVtYXNrX29mKGRlc3RfY3B1KSk7CiAJdmktPnR4bl9hZGRyID0gdHhuX2FmZmluaXR5X2FkZHIoaXJxLCBkZXN0X2NwdSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaW9zYXBpY19sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9sZWQuYyBiL2RyaXZlcnMvcGFyaXNjL2xlZC5jCmluZGV4IDQ1NGI2NTMuLjk1ODFkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL2xlZC5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL2xlZC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqICAgICAgKGMpIENvcHlyaWdodCAyMDAwIFJlZCBIYXQgU29mdHdhcmUKICAqICAgICAgKGMpIENvcHlyaWdodCAyMDAwIEhlbGdlIERlbGxlciA8aGRlbGxlckByZWRoYXQuY29tPgotICogICAgICAoYykgQ29weXJpZ2h0IDIwMDEtMjAwNSBIZWxnZSBEZWxsZXIgPGRlbGxlckBnbXguZGU+CisgKiAgICAgIChjKSBDb3B5cmlnaHQgMjAwMS0yMDA5IEhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4KICAqICAgICAgKGMpIENvcHlyaWdodCAyMDAxIFJhbmRvbHBoIENodW5nIDx0YXVzcUBkZWJpYW4ub3JnPgogICoKICAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI0MywxMyArMjQzLDExIEBACiAKIAlwcm9jX3BkY19yb290ID0gcHJvY19ta2RpcigicGRjIiwgMCk7CiAJaWYgKCFwcm9jX3BkY19yb290KSByZXR1cm4gLTE7Ci0JcHJvY19wZGNfcm9vdC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgibGVkIiwgU19JRlJFR3xTX0lSVUdPfFNfSVdVU1IsIHByb2NfcGRjX3Jvb3QpOwogCWlmICghZW50KSByZXR1cm4gLTE7CiAJZW50LT5kYXRhID0gKHZvaWQgKilMRURfTk9MQ0Q7IC8qIExFRCAqLwogCWVudC0+cmVhZF9wcm9jID0gbGVkX3Byb2NfcmVhZDsKIAllbnQtPndyaXRlX3Byb2MgPSBsZWRfcHJvY193cml0ZTsKLQllbnQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlpZiAobGVkX3R5cGUgPT0gTEVEX0hBU0xDRCkKIAl7CkBAIC0yNTgsNyArMjU2LDYgQEAKIAkJZW50LT5kYXRhID0gKHZvaWQgKilMRURfSEFTTENEOyAvKiBMQ0QgKi8KIAkJZW50LT5yZWFkX3Byb2MgPSBsZWRfcHJvY19yZWFkOwogCQllbnQtPndyaXRlX3Byb2MgPSBsZWRfcHJvY193cml0ZTsKLQkJZW50LT5vd25lciA9IFRISVNfTU9EVUxFOwogCX0KIAogCXJldHVybiAwOwpAQCAtNDYzLDkgKzQ2MCwyMCBAQAogCWlmIChsaWtlbHkobGVkX2xhbnJ4dHgpKSAgY3VycmVudGxlZHMgfD0gbGVkX2dldF9uZXRfYWN0aXZpdHkoKTsKIAlpZiAobGlrZWx5KGxlZF9kaXNraW8pKSAgIGN1cnJlbnRsZWRzIHw9IGxlZF9nZXRfZGlza2lvX2FjdGl2aXR5KCk7CiAKLQkvKiBibGluayBhbGwgTEVEcyB0d2ljZSBhIHNlY29uZCBpZiB3ZSBnb3QgYW4gT29wcyAoSFBNQykgKi8KLQlpZiAodW5saWtlbHkob29wc19pbl9wcm9ncmVzcykpIAotCQljdXJyZW50bGVkcyA9IChjb3VudF9IWjw9KEhaLzIpKSA/IDAgOiAweGZmOworCS8qIGJsaW5rIExFRHMgaWYgd2UgZ290IGFuIE9vcHMgKEhQTUMpICovCisJaWYgKHVubGlrZWx5KG9vcHNfaW5fcHJvZ3Jlc3MpKSB7CisJCWlmIChib290X2NwdV9kYXRhLmNwdV90eXBlID49IHBjeGwyKSB7CisJCQkvKiBuZXdlciBtYWNoaW5lcyBkb24ndCBoYXZlIGxvYWRhdmcuIExFRHMsIHNvIHdlCisJCQkgKiBsZXQgYWxsIExFRHMgYmxpbmsgdHdpY2UgcGVyIHNlY29uZCBpbnN0ZWFkICovCisJCQljdXJyZW50bGVkcyA9IChjb3VudF9IWiA8PSAoSFovMikpID8gMCA6IDB4ZmY7CisJCX0gZWxzZSB7CisJCQkvKiBvbGQgbWFjaGluZXM6IGJsaW5rIGxvYWRhdmcuIExFRHMgdHdpY2UgcGVyIHNlY29uZCAqLworCQkJaWYgKGNvdW50X0haIDw9IChIWi8yKSkKKwkJCQljdXJyZW50bGVkcyAmPSB+KExFRDR8TEVENXxMRUQ2fExFRDcpOworCQkJZWxzZQorCQkJCWN1cnJlbnRsZWRzIHw9IChMRUQ0fExFRDV8TEVENnxMRUQ3KTsKKwkJfQorCX0KIAogCWlmIChjdXJyZW50bGVkcyAhPSBsYXN0bGVkcykKIAl7CkBAIC01MTEsNyArNTE5LDcgQEAKIAkKIAkvKiBDYW5jZWwgdGhlIHdvcmsgaXRlbSBhbmQgZGVsZXRlIHRoZSBxdWV1ZSAqLwogCWlmIChsZWRfd3EpIHsKLQkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29ya3F1ZXVlKGxlZF93cSwgJmxlZF90YXNrKTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZsZWRfdGFzayk7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGxlZF93cSk7CiAJCWxlZF93cSA9IE5VTEw7CiAJfQpAQCAtNjMwLDcgKzYzOCw3IEBACiAJCiAJLyogdGVtcG9yYXJpbHkgZGlzYWJsZSB0aGUgbGVkIHdvcmsgdGFzayAqLwogCWlmIChsZWRfd3EpCi0JCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmtxdWV1ZShsZWRfd3EsICZsZWRfdGFzayk7CisJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmbGVkX3Rhc2spOwogCiAJLyogY29weSBkaXNwbGF5IHN0cmluZyB0byBidWZmZXIgZm9yIHByb2NmcyAqLwogCXN0cmxjcHkobGNkX3RleHQsIHN0ciwgc2l6ZW9mKGxjZF90ZXh0KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zZXJpYWwuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCmluZGV4IDAzMmRiODEuLmYzNDkyMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCkBAIC0zMCw2ICszMCw3IEBACiAJdGl0YW5fMjEwbCwKIAluZXRtb3NfOXh4NV9jb21ibywKIAluZXRtb3NfOTg1NSwKKwluZXRtb3NfOTg1NV8ycCwKIAlhdmxhYl8xczFwLAogCWF2bGFiXzFzMnAsCiAJYXZsYWJfMnMxcCwKQEAgLTYyLDcgKzYzLDcgQEAKIAkJCQlzdHJ1Y3QgcGFycG9ydF9wY19wY2kgKmNhcmQsIGludCBmYWlsZWQpOwogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgbmV0bW9zX3BhcmFsbGVsX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBhcnBvcnRfcGNfcGNpICpjYXJkLCBpbnQgYXV0b2lycSwgaW50IGF1dG9kbWEpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBuZXRtb3NfcGFyYWxsZWxfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGFycG9ydF9wY19wY2kgKnBhciwgaW50IGF1dG9pcnEsIGludCBhdXRvZG1hKQogewogCS8qIHRoZSBydWxlIGRlc2NyaWJlZCBiZWxvdyBkb2Vzbid0IGhvbGQgZm9yIHRoaXMgZGV2aWNlICovCiAJaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4MzUgJiYKQEAgLTc0LDkgKzc1LDE3IEBACiAJICogYW5kIHNlcmlhbCBwb3J0cy4gIFRoZSBmb3JtIGlzIDB4MDBQUywgd2hlcmUgPFA+IGlzIHRoZSBudW1iZXIgb2YKIAkgKiBwYXJhbGxlbCBwb3J0cyBhbmQgPFM+IGlzIHRoZSBudW1iZXIgb2Ygc2VyaWFsIHBvcnRzLgogCSAqLwotCWNhcmQtPm51bXBvcnRzID0gKGRldi0+c3Vic3lzdGVtX2RldmljZSAmIDB4ZjApID4+IDQ7Ci0JaWYgKGNhcmQtPm51bXBvcnRzID4gQVJSQVlfU0laRShjYXJkLT5hZGRyKSkKLQkJY2FyZC0+bnVtcG9ydHMgPSBBUlJBWV9TSVpFKGNhcmQtPmFkZHIpOworCXBhci0+bnVtcG9ydHMgPSAoZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICYgMHhmMCkgPj4gNDsKKwlpZiAocGFyLT5udW1wb3J0cyA+IEFSUkFZX1NJWkUocGFyLT5hZGRyKSkKKwkJcGFyLT5udW1wb3J0cyA9IEFSUkFZX1NJWkUocGFyLT5hZGRyKTsKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IG9ubHkgY2FsbGVkIGZvciBjYXJkcyB3aXRoIHVwIHRvCisJICogb25lIHBhcmFsbGVsIHBvcnQuCisJICogUGFyYWxsZWwgcG9ydCBCQVIgaXMgZWl0aGVyIGJlZm9yZSBvciBhZnRlciBzZXJpYWwgcG9ydHMgQkFSUzsKKwkgKiBoZW5jZSwgbG8gc2hvdWxkIGJlIGVpdGhlciAwIG9yIGVxdWFsIHRvIHRoZSBudW1iZXIgb2Ygc2VyaWFsIHBvcnRzLgorCSAqLworCWlmIChwYXItPmFkZHJbMF0ubG8gIT0gMCkKKwkJcGFyLT5hZGRyWzBdLmxvID0gZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICYgMHhmOwogCXJldHVybiAwOwogfQogCkBAIC04NCw3ICs5Myw4IEBACiAJLyogdGl0YW5fMTEwbCAqLwkJeyAxLCB7IHsgMywgLTEgfSwgfSB9LAogCS8qIHRpdGFuXzIxMGwgKi8JCXsgMSwgeyB7IDMsIC0xIH0sIH0gfSwKIAkvKiBuZXRtb3NfOXh4NV9jb21ibyAqLwkJeyAxLCB7IHsgMiwgLTEgfSwgfSwgbmV0bW9zX3BhcmFsbGVsX2luaXQgfSwKLQkvKiBuZXRtb3NfOTg1NSAqLwkJeyAxLCB7IHsgMiwgLTEgfSwgfSwgbmV0bW9zX3BhcmFsbGVsX2luaXQgfSwKKwkvKiBuZXRtb3NfOTg1NSAqLwkJeyAxLCB7IHsgMCwgLTEgfSwgfSwgbmV0bW9zX3BhcmFsbGVsX2luaXQgfSwKKwkvKiBuZXRtb3NfOTg1NV8ycCAqLwkJeyAyLCB7IHsgMCwgLTEgfSwgeyAyLCAtMSB9LCB9IH0sCiAJLyogYXZsYWJfMXMxcCAgICAgKi8JCXsgMSwgeyB7IDEsIDJ9LCB9IH0sCiAJLyogYXZsYWJfMXMycCAgICAgKi8JCXsgMiwgeyB7IDEsIDJ9LCB7IDMsIDQgfSx9IH0sCiAJLyogYXZsYWJfMnMxcCAgICAgKi8JCXsgMSwgeyB7IDIsIDN9LCB9IH0sCkBAIC0xMTAsNiArMTIwLDEwIEBACiAJeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg0NSwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG5ldG1vc185eHg1X2NvbWJvIH0sCiAJeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTg1NSwKKwkgIDB4MTAwMCwgMHgwMDIwLCAwLCAwLCBuZXRtb3NfOTg1NV8ycCB9LAorCXsgUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NTUsCisJICAweDEwMDAsIDB4MDAyMiwgMCwgMCwgbmV0bW9zXzk4NTVfMnAgfSwKKwl7IFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODU1LAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgbmV0bW9zXzk4NTUgfSwKIAkvKiBQQ0lfVkVORE9SX0lEX0FWTEFCL0ludGVrMjEgaGFzIGFub3RoZXIgYnVuY2ggb2YgY2FyZHMgLi4uKi8KIAl7IFBDSV9WRU5ET1JfSURfQUZBVkxBQiwgMHgyMTEwLApAQCAtMTkyLDYgKzIwNiwxMiBAQAogCQkudWFydF9vZmZzZXQJPSA4LAogCX0sCiAJW25ldG1vc185ODU1XSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UyIHwgRkxfQkFTRV9CQVJTLAorCQkubnVtX3BvcnRzCT0gMSwKKwkJLmJhc2VfYmF1ZAk9IDExNTIwMCwKKwkJLnVhcnRfb2Zmc2V0CT0gOCwKKwl9LAorCVtuZXRtb3NfOTg1NV8ycF0gPSB7CiAJCS5mbGFncwkJPSBGTF9CQVNFNCB8IEZMX0JBU0VfQkFSUywKIAkJLm51bV9wb3J0cwk9IDEsCiAJCS5iYXNlX2JhdWQJPSAxMTUyMDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9LY29uZmlnIGIvZHJpdmVycy9wY2kvS2NvbmZpZwppbmRleCAyYTQ1MDFkLi5mZGM4NjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNpL0tjb25maWcKQEAgLTU5LDMgKzU5LDEzIEBACiAJICAgVGhpcyBhbGxvd3MgbmF0aXZlIGh5cGVydHJhbnNwb3J0IGRldmljZXMgdG8gdXNlIGludGVycnVwdHMuCiAKIAkgICBJZiB1bnN1cmUgc2F5IFkuCisKK2NvbmZpZyBQQ0lfSU9WCisJYm9vbCAiUENJIElPViBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJCisJaGVscAorCSAgSS9PIFZpcnR1YWxpemF0aW9uIGlzIGEgUENJIGZlYXR1cmUgc3VwcG9ydGVkIGJ5IHNvbWUgZGV2aWNlcworCSAgd2hpY2ggYWxsb3dzIHRoZW0gdG8gY3JlYXRlIHZpcnR1YWwgZGV2aWNlcyB3aGljaCBzaGFyZSB0aGVpcgorCSAgcGh5c2ljYWwgcmVzb3VyY2VzLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCAzZDA3Y2UyLi5iYTZhZjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQpAQCAtMjksNiArMjksOCBAQAogCiBvYmotJChDT05GSUdfSU5UUl9SRU1BUCkgKz0gZG1hci5vIGludHJfcmVtYXBwaW5nLm8KIAorb2JqLSQoQ09ORklHX1BDSV9JT1YpICs9IGlvdi5vCisKICMKICMgU29tZSBhcmNoaXRlY3R1cmVzIHVzZSB0aGUgZ2VuZXJpYyBQQ0kgc2V0dXAgZnVuY3Rpb25zCiAjCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9idXMuYyBiL2RyaXZlcnMvcGNpL2J1cy5jCmluZGV4IDUyYjU0ZjAuLjY4ZjkxYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2J1cy5jCisrKyBiL2RyaXZlcnMvcGNpL2J1cy5jCkBAIC0xMzMsNyArMTMzLDcgQEAKICAqCiAgKiBDYWxsIGhvdHBsdWcgZm9yIGVhY2ggbmV3IGRldmljZXMuCiAgKi8KLXZvaWQgcGNpX2J1c19hZGRfZGV2aWNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQordm9pZCBwY2lfYnVzX2FkZF9kZXZpY2VzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQ7CkBAIC0xODQsOCArMTg0LDEwIEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKIAkJaWYgKGRldi0+c3Vib3JkaW5hdGUpIHsKLQkJCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7Ci0JCQlwY2lfc2V0X21hc3RlcihkZXYpOworCQkJaWYgKGF0b21pY19yZWFkKCZkZXYtPmVuYWJsZV9jbnQpID09IDApIHsKKwkJCQlyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOworCQkJCXBjaV9zZXRfbWFzdGVyKGRldik7CisJCQl9CiAJCQlwY2lfZW5hYmxlX2JyaWRnZXMoZGV2LT5zdWJvcmRpbmF0ZSk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlfcGNpaHAuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCmluZGV4IDFjMTE0MTguLmZiYzYzZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaV9wY2locC5jCkBAIC0zMCw5ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaG90cGx1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgotI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgotI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KIAogI2RlZmluZSBNWV9OQU1FCSJhY3BpX3BjaWhwIgogCkBAIC0zMzMsMTkgKzMzMiwxNCBAQAogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX05PVF9GT1VORDsKIAlhY3BpX2hhbmRsZSBoYW5kbGUsIHBoYW5kbGU7Ci0Jc3RydWN0IHBjaV9idXMgKnBidXMgPSBidXM7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IHBjaV9idXMgKnBidXM7CiAKLQlkbyB7Ci0JCXBkZXYgPSBwYnVzLT5zZWxmOwotCQlpZiAoIXBkZXYpIHsKLQkJCWhhbmRsZSA9IGFjcGlfZ2V0X3BjaV9yb290YnJpZGdlX2hhbmRsZSgKLQkJCQlwY2lfZG9tYWluX25yKHBidXMpLCBwYnVzLT5udW1iZXIpOworCWhhbmRsZSA9IE5VTEw7CisJZm9yIChwYnVzID0gYnVzOyBwYnVzOyBwYnVzID0gcGJ1cy0+cGFyZW50KSB7CisJCWhhbmRsZSA9IGFjcGlfcGNpX2dldF9icmlkZ2VfaGFuZGxlKHBidXMpOworCQlpZiAoaGFuZGxlKQogCQkJYnJlYWs7Ci0JCX0KLQkJaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKCYocGRldi0+ZGV2KSk7Ci0JCXBidXMgPSBwYnVzLT5wYXJlbnQ7Ci0JfSB3aGlsZSAoIWhhbmRsZSk7CisJfQogCiAJLyoKIAkgKiBfSFBQIHNldHRpbmdzIGFwcGx5IHRvIGFsbCBjaGlsZCBidXNlcywgdW50aWwgYW5vdGhlciBfSFBQIGlzCkBAIC0zNzgsMTIgKzM3MiwxMCBAQAogICoKICAqIEF0dGVtcHQgdG8gdGFrZSBob3RwbHVnIGNvbnRyb2wgZnJvbSBmaXJtd2FyZS4KICAqLwotaW50IGFjcGlfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgZmxhZ3MpCitpbnQgYWNwaV9nZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgZmxhZ3MpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfaGFuZGxlIGNoYW5kbGUsIGhhbmRsZTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRldjsKLQlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50OwogCXN0cnVjdCBhY3BpX2J1ZmZlciBzdHJpbmcgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAKIAlmbGFncyAmPSAoT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MIHwKQEAgLTQwOCwzMyArNDAwLDI1IEBACiAJCWFjcGlfZ2V0X25hbWUoaGFuZGxlLCBBQ1BJX0ZVTExfUEFUSE5BTUUsICZzdHJpbmcpOwogCQlkYmcoIlRyeWluZyB0byBnZXQgaG90cGx1ZyBjb250cm9sIGZvciAlc1xuIiwKIAkJCQkoY2hhciAqKXN0cmluZy5wb2ludGVyKTsKLQkJc3RhdHVzID0gcGNpX29zY19jb250cm9sX3NldChoYW5kbGUsIGZsYWdzKTsKKwkJc3RhdHVzID0gYWNwaV9wY2lfb3NjX2NvbnRyb2xfc2V0KGhhbmRsZSwgZmxhZ3MpOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCiAJCQlnb3RvIGdvdF9vbmU7CiAJCWtmcmVlKHN0cmluZy5wb2ludGVyKTsKIAkJc3RyaW5nID0gKHN0cnVjdCBhY3BpX2J1ZmZlcil7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CiAJfQogCi0JcGRldiA9IGRldjsKLQloYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoJmRldi0+ZGV2KTsKLQl3aGlsZSAoIWhhbmRsZSkgeworCWhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRSgmcGRldi0+ZGV2KTsKKwlpZiAoIWhhbmRsZSkgewogCQkvKgogCQkgKiBUaGlzIGhvdHBsdWcgY29udHJvbGxlciB3YXMgbm90IGxpc3RlZCBpbiB0aGUgQUNQSSBuYW1lCiAJCSAqIHNwYWNlIGF0IGFsbC4gVHJ5IHRvIGdldCBhY3BpIGhhbmRsZSBvZiBwYXJlbnQgcGNpIGJ1cy4KIAkJICovCi0JCWlmICghcGRldiB8fCAhcGRldi0+YnVzLT5wYXJlbnQpCi0JCQlicmVhazsKLQkJcGFyZW50ID0gcGRldi0+YnVzLT5wYXJlbnQ7Ci0JCWRiZygiQ291bGQgbm90IGZpbmQgJXMgaW4gYWNwaSBuYW1lc3BhY2UsIHRyeWluZyBwYXJlbnRcbiIsCi0JCSAgICBwY2lfbmFtZShwZGV2KSk7Ci0JCWlmICghcGFyZW50LT5zZWxmKQotCQkJLyogUGFyZW50IG11c3QgYmUgYSBob3N0IGJyaWRnZSAqLwotCQkJaGFuZGxlID0gYWNwaV9nZXRfcGNpX3Jvb3RicmlkZ2VfaGFuZGxlKAotCQkJCQlwY2lfZG9tYWluX25yKHBhcmVudCksCi0JCQkJCXBhcmVudC0+bnVtYmVyKTsKLQkJZWxzZQotCQkJaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKCYocGFyZW50LT5zZWxmLT5kZXYpKTsKLQkJcGRldiA9IHBhcmVudC0+c2VsZjsKKwkJc3RydWN0IHBjaV9idXMgKnBidXM7CisJCWZvciAocGJ1cyA9IHBkZXYtPmJ1czsgcGJ1czsgcGJ1cyA9IHBidXMtPnBhcmVudCkgeworCQkJaGFuZGxlID0gYWNwaV9wY2lfZ2V0X2JyaWRnZV9oYW5kbGUocGJ1cyk7CisJCQlpZiAoaGFuZGxlKQorCQkJCWJyZWFrOworCQl9CiAJfQogCiAJd2hpbGUgKGhhbmRsZSkgewpAQCAtNDUzLDEzICs0MzcsMTMgQEAKIAl9CiAKIAlkYmcoIkNhbm5vdCBnZXQgY29udHJvbCBvZiBob3RwbHVnIGhhcmR3YXJlIGZvciBwY2kgJXNcbiIsCi0JICAgIHBjaV9uYW1lKGRldikpOworCSAgICBwY2lfbmFtZShwZGV2KSk7CiAKIAlrZnJlZShzdHJpbmcucG9pbnRlcik7CiAJcmV0dXJuIC1FTk9ERVY7CiBnb3Rfb25lOgotCWRiZygiR2FpbmVkIGNvbnRyb2wgZm9yIGhvdHBsdWcgSFcgZm9yIHBjaSAlcyAoJXMpXG4iLCBwY2lfbmFtZShkZXYpLAotCQkJKGNoYXIgKilzdHJpbmcucG9pbnRlcik7CisJZGJnKCJHYWluZWQgY29udHJvbCBmb3IgaG90cGx1ZyBIVyBmb3IgcGNpICVzICglcylcbiIsCisJICAgIHBjaV9uYW1lKHBkZXYpLCAoY2hhciAqKXN0cmluZy5wb2ludGVyKTsKIAlrZnJlZShzdHJpbmcucG9pbnRlcik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2Zha2VwaHAuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCmluZGV4IGQ4NjQ5ZTEuLjYxNTEzODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCkBAIC0xLDM5NSArMSwxNjMgQEAKLS8qCi0gKiBGYWtlIFBDSSBIb3QgUGx1ZyBDb250cm9sbGVyIERyaXZlcgorLyogV29ya3MgbGlrZSB0aGUgZmFrZXBocCBkcml2ZXIgdXNlZCB0bywgZXhjZXB0IGEgbGl0dGxlIGJldHRlci4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwMyBJQk0gQ29ycC4KLSAqIENvcHlyaWdodCAoQykgMjAwMyBSb2xmIEVpa2UgQmVlciA8ZWlrZS1rZXJuZWxAc2YtdGVjLmRlPgorICogLSBJdCdzIHBvc3NpYmxlIHRvIHJlbW92ZSBkZXZpY2VzIHdpdGggc3Vib3JkaW5hdGUgYnVzc2VzLgorICogLSBOZXcgUENJIGRldmljZXMgdGhhdCBhcHBlYXIgdmlhIGFueSBtZXRob2QsIG5vdCBqdXN0IGEgZmFrZXBocCB0cmlnZ2VyZWQKKyAqICAgcmVzY2FuLCB3aWxsIGJlIG5vdGljZWQuCisgKiAtIERldmljZXMgdGhhdCBhcmUgcmVtb3ZlZCB2aWEgYW55IG1ldGhvZCwgbm90IGp1c3QgYSBmYWtlcGhwIHRyaWdnZXJlZAorICogICByZW1vdmFsLCB3aWxsIGFsc28gYmUgbm90aWNlZC4KICAqCi0gKiBCYXNlZCBvbiBpZGVhcyBhbmQgY29kZSBmcm9tOgotICogCVZsYWRpbWlyIEtvbmRyYXRpZXYgPHZsYWRpbWlyLmtvbmRyYXRpZXZAaW50ZWwuY29tPgotICoJUm9sZiBFaWtlIEJlZXIgPGVpa2Uta2VybmVsQHNmLXRlYy5kZT4KKyAqIFVzZXMgbm90aGluZyBmcm9tIHRoZSBwY2ktaG90cGx1ZyBzdWJzeXN0ZW0uCiAgKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KLSAqCi0gKiBTZW5kIGZlZWRiYWNrIHRvIDxncmVnQGtyb2FoLmNvbT4KICAqLwogCi0vKgotICoKLSAqIFRoaXMgZHJpdmVyIHdpbGwgImVtdWxhdGUiIHJlbW92aW5nIFBDSSBkZXZpY2VzIGZyb20gdGhlIHN5c3RlbS4gIElmCi0gKiB0aGUgInBvd2VyIiBmaWxlIGlzIHdyaXR0ZW4gdG8gd2l0aCAiMCIgdGhlbiB0aGUgc3BlY2lmaWVkIFBDSSBkZXZpY2UKLSAqIHdpbGwgYmUgY29tcGxldGVseSByZW1vdmVkIGZyb20gdGhlIGtlcm5lbC4KLSAqCi0gKiBXQVJOSU5HLCB0aGlzIGRvZXMgTk9UIHR1cm4gb2ZmIHRoZSBwb3dlciB0byB0aGUgUENJIGRldmljZS4gIFRoaXMgaXMKLSAqIGEgImxvZ2ljYWwiIHJlbW92YWwsIG5vdCBhIHBoeXNpY2FsIG9yIGVsZWN0cmljYWwgcmVtb3ZhbC4KLSAqCi0gKiBVc2UgdGhpcyBtb2R1bGUgYXQgeW91ciBvd24gcmlzaywgeW91IGhhdmUgYmVlbiB3YXJuZWQhCi0gKgotICogRW5hYmxpbmcgUENJIGRldmljZXMgaXMgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci4uLgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaV9ob3RwbHVnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlICIuLi9wY2kuaCIKIAotI2lmICFkZWZpbmVkKE1PRFVMRSkKLQkjZGVmaW5lIE1ZX05BTUUJImZha2VwaHAiCi0jZWxzZQotCSNkZWZpbmUgTVlfTkFNRQlUSElTX01PRFVMRS0+bmFtZQotI2VuZGlmCi0KLSNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKQkJCQkJXAotCWRvIHsJCQkJCQkJXAotCQlpZiAoZGVidWcpCQkJCQlcCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0LAlcCi0JCQkJTVlfTkFNRSAsICMjIGFyZyk7IAkJXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIGVycihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpCi0jZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZykKLQotI2RlZmluZSBEUklWRVJfQVVUSE9SCSJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MJIkZha2UgUENJIEhvdCBQbHVnIENvbnRyb2xsZXIgRHJpdmVyIgotCi1zdHJ1Y3QgZHVtbXlfc2xvdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCXN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3Q7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVtb3ZlX3dvcms7Ci0JdW5zaWduZWQgbG9uZyByZW1vdmVkOworc3RydWN0IGxlZ2FjeV9zbG90IHsKKwlzdHJ1Y3Qga29iamVjdAkJa29iajsKKwlzdHJ1Y3QgcGNpX2RldgkJKmRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiB9OwogCi1zdGF0aWMgaW50IGRlYnVnOwotc3RhdGljIGludCBkdXBfc2xvdHM7Ci1zdGF0aWMgTElTVF9IRUFEKHNsb3RfbGlzdCk7Ci1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmR1bW15cGhwX3dxOworc3RhdGljIExJU1RfSEVBRChsZWdhY3lfbGlzdCk7CiAKLXN0YXRpYyB2b2lkIHBjaV9yZXNjYW5fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1zdGF0aWMgREVDTEFSRV9XT1JLKHBjaV9yZXNjYW5fd29yaywgcGNpX3Jlc2Nhbl93b3JrZXIpOwotCi1zdGF0aWMgaW50IGVuYWJsZV9zbG90IChzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90KTsKLXN0YXRpYyBpbnQgZGlzYWJsZV9zbG90IChzdHJ1Y3QgaG90cGx1Z19zbG90ICpzbG90KTsKLQotc3RhdGljIHN0cnVjdCBob3RwbHVnX3Nsb3Rfb3BzIGR1bW15X2hvdHBsdWdfc2xvdF9vcHMgPSB7Ci0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLQkuZW5hYmxlX3Nsb3QJCT0gZW5hYmxlX3Nsb3QsCi0JLmRpc2FibGVfc2xvdAkJPSBkaXNhYmxlX3Nsb3QsCi19OwotCi1zdGF0aWMgdm9pZCBkdW1teV9yZWxlYXNlKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QpCitzdGF0aWMgc3NpemVfdCBsZWdhY3lfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgZHVtbXlfc2xvdCAqZHNsb3QgPSBzbG90LT5wcml2YXRlOwotCi0JbGlzdF9kZWwoJmRzbG90LT5ub2RlKTsKLQlrZnJlZShkc2xvdC0+c2xvdC0+aW5mbyk7Ci0Ja2ZyZWUoZHNsb3QtPnNsb3QpOwotCXBjaV9kZXZfcHV0KGRzbG90LT5kZXYpOwotCWtmcmVlKGRzbG90KTsKKwlzdHJ1Y3QgbGVnYWN5X3Nsb3QgKnNsb3QgPSBjb250YWluZXJfb2Yoa29iaiwgdHlwZW9mKCpzbG90KSwga29iaik7CisJc3RyY3B5KGJ1ZiwgIjFcbiIpOworCXJldHVybiAyOwogfQogCi0jZGVmaW5lIFNMT1RfTkFNRV9TSVpFCTgKLQotc3RhdGljIGludCBhZGRfc2xvdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcmVtb3ZlX2NhbGxiYWNrKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGR1bW15X3Nsb3QgKmRzbG90OwotCXN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3Q7Ci0JY2hhciBuYW1lW1NMT1RfTkFNRV9TSVpFXTsKLQlpbnQgcmV0dmFsID0gLUVOT01FTTsKLQlzdGF0aWMgaW50IGNvdW50ID0gMTsKKwlwY2lfcmVtb3ZlX2J1c19kZXZpY2UoKHN0cnVjdCBwY2lfZGV2ICopZGF0YSk7Cit9CiAKLQlzbG90ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhvdHBsdWdfc2xvdCksIEdGUF9LRVJORUwpOwotCWlmICghc2xvdCkKLQkJZ290byBlcnJvcjsKK3N0YXRpYyBzc2l6ZV90IGxlZ2FjeV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGxlZ2FjeV9zbG90ICpzbG90ID0gY29udGFpbmVyX29mKGtvYmosIHR5cGVvZigqc2xvdCksIGtvYmopOworCXVuc2lnbmVkIGxvbmcgdmFsOwogCi0Jc2xvdC0+aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghc2xvdC0+aW5mbykKLQkJZ290byBlcnJvcl9zbG90OworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzbG90LT5pbmZvLT5wb3dlcl9zdGF0dXMgPSAxOwotCXNsb3QtPmluZm8tPm1heF9idXNfc3BlZWQgPSBQQ0lfU1BFRURfVU5LTk9XTjsKLQlzbG90LT5pbmZvLT5jdXJfYnVzX3NwZWVkID0gUENJX1NQRUVEX1VOS05PV047Ci0KLQlkc2xvdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkdW1teV9zbG90KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkc2xvdCkKLQkJZ290byBlcnJvcl9pbmZvOwotCi0JaWYgKGR1cF9zbG90cykKLQkJc25wcmludGYobmFtZSwgU0xPVF9OQU1FX1NJWkUsICJmYWtlIik7CisJaWYgKHZhbCkKKwkJcGNpX3Jlc2Nhbl9idXMoc2xvdC0+ZGV2LT5idXMpOwogCWVsc2UKLQkJc25wcmludGYobmFtZSwgU0xPVF9OQU1FX1NJWkUsICJmYWtlJWQiLCBjb3VudCsrKTsKLQlkYmcoInNsb3QtPm5hbWUgPSAlc1xuIiwgbmFtZSk7Ci0Jc2xvdC0+b3BzID0gJmR1bW15X2hvdHBsdWdfc2xvdF9vcHM7Ci0Jc2xvdC0+cmVsZWFzZSA9ICZkdW1teV9yZWxlYXNlOwotCXNsb3QtPnByaXZhdGUgPSBkc2xvdDsKKwkJc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2soJnNsb3QtPmRldi0+ZGV2LmtvYmosIHJlbW92ZV9jYWxsYmFjaywKKwkJCQkJc2xvdC0+ZGV2LCBUSElTX01PRFVMRSk7CisJcmV0dXJuIGxlbjsKK30KIAotCXJldHZhbCA9IHBjaV9ocF9yZWdpc3RlcihzbG90LCBkZXYtPmJ1cywgUENJX1NMT1QoZGV2LT5kZXZmbiksIG5hbWUpOwotCWlmIChyZXR2YWwpIHsKLQkJZXJyKCJwY2lfaHBfcmVnaXN0ZXIgZmFpbGVkIHdpdGggZXJyb3IgJWRcbiIsIHJldHZhbCk7Ci0JCWdvdG8gZXJyb3JfZHNsb3Q7Ci0JfQorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxlZ2FjeV9hdHRyc1tdID0geworCSYoc3RydWN0IGF0dHJpYnV0ZSl7IC5uYW1lID0gInBvd2VyIiwgLm1vZGUgPSAwNjQ0IH0sCisJTlVMTCwKK307CiAKLQlkYmcoInNsb3QtPm5hbWUgPSAlc1xuIiwgaG90cGx1Z19zbG90X25hbWUoc2xvdCkpOwotCWRzbG90LT5zbG90ID0gc2xvdDsKLQlkc2xvdC0+ZGV2ID0gcGNpX2Rldl9nZXQoZGV2KTsKLQlsaXN0X2FkZCAoJmRzbG90LT5ub2RlLCAmc2xvdF9saXN0KTsKLQlyZXR1cm4gcmV0dmFsOworc3RhdGljIHZvaWQgbGVnYWN5X3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IGxlZ2FjeV9zbG90ICpzbG90ID0gY29udGFpbmVyX29mKGtvYmosIHR5cGVvZigqc2xvdCksIGtvYmopOwogCi1lcnJvcl9kc2xvdDoKLQlrZnJlZShkc2xvdCk7Ci1lcnJvcl9pbmZvOgotCWtmcmVlKHNsb3QtPmluZm8pOwotZXJyb3Jfc2xvdDoKKwlwY2lfZGV2X3B1dChzbG90LT5kZXYpOwogCWtmcmVlKHNsb3QpOwotZXJyb3I6Ci0JcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcGNpX3NjYW5fYnVzZXModm9pZCkKK3N0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGxlZ2FjeV9rdHlwZSA9IHsKKwkuc3lzZnNfb3BzID0gJihzdHJ1Y3Qgc3lzZnNfb3BzKXsKKwkJLnN0b3JlID0gbGVnYWN5X3N0b3JlLCAuc2hvdyA9IGxlZ2FjeV9zaG93CisJfSwKKwkucmVsZWFzZSA9ICZsZWdhY3lfcmVsZWFzZSwKKwkuZGVmYXVsdF9hdHRycyA9IGxlZ2FjeV9hdHRycywKK307CisKK3N0YXRpYyBpbnQgbGVnYWN5X2FkZF9zbG90KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwotCWludCBsYXN0c2xvdCA9IDA7Ci0KLQl3aGlsZSAoKGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldikpICE9IE5VTEwpIHsKLQkJaWYgKFBDSV9GVU5DKGRldi0+ZGV2Zm4pID4gMCAmJgotCQkJCWxhc3RzbG90ID09IFBDSV9TTE9UKGRldi0+ZGV2Zm4pKQotCQkJY29udGludWU7Ci0JCWxhc3RzbG90ID0gUENJX1NMT1QoZGV2LT5kZXZmbik7Ci0JCWFkZF9zbG90KGRldik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZV9zbG90KHN0cnVjdCBkdW1teV9zbG90ICpkc2xvdCkKLXsKLQlpbnQgcmV0dmFsOwotCi0JZGJnKCJyZW1vdmluZyBzbG90ICVzXG4iLCBob3RwbHVnX3Nsb3RfbmFtZShkc2xvdC0+c2xvdCkpOwotCXJldHZhbCA9IHBjaV9ocF9kZXJlZ2lzdGVyKGRzbG90LT5zbG90KTsKLQlpZiAocmV0dmFsKQotCQllcnIoIlByb2JsZW0gdW5yZWdpc3RlcmluZyBhIHNsb3QgJXNcbiIsCi0JCQlob3RwbHVnX3Nsb3RfbmFtZShkc2xvdC0+c2xvdCkpOwotfQotCi0vKiBjYWxsZWQgZnJvbSB0aGUgc2luZ2xlLXRocmVhZGVkIHdvcmtxdWV1ZSBoYW5kbGVyIHRvIHJlbW92ZSBhIHNsb3QgKi8KLXN0YXRpYyB2b2lkIHJlbW92ZV9zbG90X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGR1bW15X3Nsb3QgKmRzbG90ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkdW1teV9zbG90LCByZW1vdmVfd29yayk7Ci0JcmVtb3ZlX3Nsb3QoZHNsb3QpOwotfQotCi0vKioKLSAqIHBjaV9yZXNjYW5fc2xvdCAtIFJlc2NhbiBzbG90Ci0gKiBAdGVtcDogRGV2aWNlIHRlbXBsYXRlLiBTaG91bGQgYmUgc2V0OiBidXMgYW5kIGRldmZuLgotICoKLSAqIFRyaWVzIGhhcmQgbm90IHRvIHJlLWVuYWJsZSBhbHJlYWR5IGV4aXN0aW5nIGRldmljZXM7Ci0gKiBhbHNvIGhhbmRsZXMgc2Nhbm5pbmcgb2Ygc3ViZnVuY3Rpb25zLgotICovCi1zdGF0aWMgaW50IHBjaV9yZXNjYW5fc2xvdChzdHJ1Y3QgcGNpX2RldiAqdGVtcCkKLXsKLQlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gdGVtcC0+YnVzOwotCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0JaW50IGZ1bmM7Ci0JdTggaGRyX3R5cGU7Ci0JaW50IGNvdW50ID0gMDsKLQotCWlmICghcGNpX3JlYWRfY29uZmlnX2J5dGUodGVtcCwgUENJX0hFQURFUl9UWVBFLCAmaGRyX3R5cGUpKSB7Ci0JCXRlbXAtPmhkcl90eXBlID0gaGRyX3R5cGUgJiAweDdmOwotCQlpZiAoKGRldiA9IHBjaV9nZXRfc2xvdChidXMsIHRlbXAtPmRldmZuKSkgIT0gTlVMTCkKLQkJCXBjaV9kZXZfcHV0KGRldik7Ci0JCWVsc2UgewotCQkJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIHRlbXAtPmRldmZuKTsKLQkJCWlmIChkZXYpIHsKLQkJCQlkYmcoIk5ldyBkZXZpY2Ugb24gJXMgZnVuY3Rpb24gJXg6JXhcbiIsCi0JCQkJCWJ1cy0+bmFtZSwgdGVtcC0+ZGV2Zm4gPj4gMywKLQkJCQkJdGVtcC0+ZGV2Zm4gJiA3KTsKLQkJCQljb3VudCsrOwotCQkJfQotCQl9Ci0JCS8qIG11bHRpZnVuY3Rpb24gZGV2aWNlPyAqLwotCQlpZiAoIShoZHJfdHlwZSAmIDB4ODApKQotCQkJcmV0dXJuIGNvdW50OwotCi0JCS8qIGNvbnRpbnVlIHNjYW5uaW5nIGZvciBvdGhlciBmdW5jdGlvbnMgKi8KLQkJZm9yIChmdW5jID0gMSwgdGVtcC0+ZGV2Zm4rKzsgZnVuYyA8IDg7IGZ1bmMrKywgdGVtcC0+ZGV2Zm4rKykgewotCQkJaWYgKHBjaV9yZWFkX2NvbmZpZ19ieXRlKHRlbXAsIFBDSV9IRUFERVJfVFlQRSwgJmhkcl90eXBlKSkKLQkJCQljb250aW51ZTsKLQkJCXRlbXAtPmhkcl90eXBlID0gaGRyX3R5cGUgJiAweDdmOwotCi0JCQlpZiAoKGRldiA9IHBjaV9nZXRfc2xvdChidXMsIHRlbXAtPmRldmZuKSkgIT0gTlVMTCkKLQkJCQlwY2lfZGV2X3B1dChkZXYpOwotCQkJZWxzZSB7Ci0JCQkJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIHRlbXAtPmRldmZuKTsKLQkJCQlpZiAoZGV2KSB7Ci0JCQkJCWRiZygiTmV3IGRldmljZSBvbiAlcyBmdW5jdGlvbiAleDoleFxuIiwKLQkJCQkJCWJ1cy0+bmFtZSwgdGVtcC0+ZGV2Zm4gPj4gMywKLQkJCQkJCXRlbXAtPmRldmZuICYgNyk7Ci0JCQkJCWNvdW50Kys7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIGNvdW50OwotfQotCi0KLS8qKgotICogcGNpX3Jlc2Nhbl9idXMgLSBSZXNjYW4gUENJIGJ1cwotICogQGJ1czogdGhlIFBDSSBidXMgdG8gcmVzY2FuCi0gKgotICogQ2FsbCBwY2lfcmVzY2FuX3Nsb3QgZm9yIGVhY2ggcG9zc2libGUgZnVuY3Rpb24gb2YgdGhlIGJ1cy4KLSAqLwotc3RhdGljIHZvaWQgcGNpX3Jlc2Nhbl9idXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQl1bnNpZ25lZCBpbnQgZGV2Zm47Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQlpbnQgcmV0dmFsOwotCWludCBmb3VuZCA9IDA7Ci0JZGV2ID0gYWxsb2NfcGNpX2RldigpOwotCWlmICghZGV2KQotCQlyZXR1cm47Ci0KLQlkZXYtPmJ1cyA9IChzdHJ1Y3QgcGNpX2J1cyopYnVzOwotCWRldi0+c3lzZGF0YSA9IGJ1cy0+c3lzZGF0YTsKLQlmb3IgKGRldmZuID0gMDsgZGV2Zm4gPCAweDEwMDsgZGV2Zm4gKz0gOCkgewotCQlkZXYtPmRldmZuID0gZGV2Zm47Ci0JCWZvdW5kICs9IHBjaV9yZXNjYW5fc2xvdChkZXYpOwotCX0KLQotCWlmIChmb3VuZCkgewotCQlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMoYnVzKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7Ci0JCQkvKiBTa2lwIGFscmVhZHktYWRkZWQgZGV2aWNlcyAqLwotCQkJaWYgKGRldi0+aXNfYWRkZWQpCi0JCQkJCWNvbnRpbnVlOwotCQkJcmV0dmFsID0gcGNpX2J1c19hZGRfZGV2aWNlKGRldik7Ci0JCQlpZiAocmV0dmFsKQotCQkJCWRldl9lcnIoJmRldi0+ZGV2LAotCQkJCQkiRXJyb3IgYWRkaW5nIGRldmljZSwgY29udGludWluZ1xuIik7Ci0JCQllbHNlCi0JCQkJYWRkX3Nsb3QoZGV2KTsKLQkJfQotCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7Ci0JfQotCWtmcmVlKGRldik7Ci19Ci0KLS8qIHJlY3Vyc2l2ZWx5IHNjYW4gYWxsIGJ1c2VzICovCi1zdGF0aWMgdm9pZCBwY2lfcmVzY2FuX2J1c2VzKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCi17Ci0JY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbDsKLQlsaXN0X2Zvcl9lYWNoKGwsbGlzdCkgewotCQljb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYiA9IHBjaV9idXNfYihsKTsKLQkJcGNpX3Jlc2Nhbl9idXMoYik7Ci0JCXBjaV9yZXNjYW5fYnVzZXMoJmItPmNoaWxkcmVuKTsKLQl9Ci19Ci0KLS8qIGluaXRpYXRlIHJlc2NhbiBvZiBhbGwgcGNpIGJ1c2VzICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX3Jlc2Nhbih2b2lkKSB7Ci0JcGNpX3Jlc2Nhbl9idXNlcygmcGNpX3Jvb3RfYnVzZXMpOwotfQotCi0vKiBjYWxsZWQgZnJvbSB0aGUgc2luZ2xlLXRocmVhZGVkIHdvcmtxdWV1ZSBoYW5kbGVyIHRvIHJlc2NhbiBhbGwgcGNpIGJ1c2VzICovCi1zdGF0aWMgdm9pZCBwY2lfcmVzY2FuX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0JcGNpX3Jlc2NhbigpOwotfQotCi1zdGF0aWMgaW50IGVuYWJsZV9zbG90KHN0cnVjdCBob3RwbHVnX3Nsb3QgKmhvdHBsdWdfc2xvdCkKLXsKLQkvKiBtaXMtdXNlIGVuYWJsZV9zbG90IGZvciByZXNjYW5uaW5nIG9mIHRoZSBwY2kgYnVzICovCi0JY2FuY2VsX3dvcmtfc3luYygmcGNpX3Jlc2Nhbl93b3JrKTsKLQlxdWV1ZV93b3JrKGR1bW15cGhwX3dxLCAmcGNpX3Jlc2Nhbl93b3JrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkaXNhYmxlX3Nsb3Qoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCkKLXsKLQlzdHJ1Y3QgZHVtbXlfc2xvdCAqZHNsb3Q7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQlpbnQgZnVuYzsKKwlzdHJ1Y3QgbGVnYWN5X3Nsb3QgKnNsb3QgPSBremFsbG9jKHNpemVvZigqc2xvdCksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFzbG90KQotCQlyZXR1cm4gLUVOT0RFVjsKLQlkc2xvdCA9IHNsb3QtPnByaXZhdGU7Ci0KLQlkYmcoIiVzIC0gcGh5c2ljYWxfc2xvdCA9ICVzXG4iLCBfX2Z1bmNfXywgaG90cGx1Z19zbG90X25hbWUoc2xvdCkpOwotCi0JZm9yIChmdW5jID0gNzsgZnVuYyA+PSAwOyBmdW5jLS0pIHsKLQkJZGV2ID0gcGNpX2dldF9zbG90KGRzbG90LT5kZXYtPmJ1cywgZHNsb3QtPmRldi0+ZGV2Zm4gKyBmdW5jKTsKLQkJaWYgKCFkZXYpCi0JCQljb250aW51ZTsKLQotCQlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmZHNsb3QtPnJlbW92ZWQpKSB7Ci0JCQlkYmcoIlNsb3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIHJlbW92YWxcbiIpOwotCQkJcGNpX2Rldl9wdXQoZGV2KTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0KLQkJLyogcmVtb3ZlIHRoZSBkZXZpY2UgZnJvbSB0aGUgcGNpIGNvcmUgKi8KLQkJcGNpX3JlbW92ZV9idXNfZGV2aWNlKGRldik7Ci0KLQkJLyogcXVldWUgd29yayBpdGVtIHRvIGJsb3cgYXdheSB0aGlzIHN5c2ZzIGVudHJ5IGFuZCBvdGhlcgotCQkgKiBwYXJ0cy4KLQkJICovCi0JCUlOSVRfV09SSygmZHNsb3QtPnJlbW92ZV93b3JrLCByZW1vdmVfc2xvdF93b3JrZXIpOwotCQlxdWV1ZV93b3JrKGR1bW15cGhwX3dxLCAmZHNsb3QtPnJlbW92ZV93b3JrKTsKLQotCQlwY2lfZGV2X3B1dChkZXYpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY2xlYW51cF9zbG90cyAodm9pZCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbmV4dDsKLQlzdHJ1Y3QgZHVtbXlfc2xvdCAqZHNsb3Q7Ci0KLQlkZXN0cm95X3dvcmtxdWV1ZShkdW1teXBocF93cSk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlICh0bXAsIG5leHQsICZzbG90X2xpc3QpIHsKLQkJZHNsb3QgPSBsaXN0X2VudHJ5ICh0bXAsIHN0cnVjdCBkdW1teV9zbG90LCBub2RlKTsKLQkJcmVtb3ZlX3Nsb3QoZHNsb3QpOwotCX0KLQkKLX0KLQotc3RhdGljIGludCBfX2luaXQgZHVtbXlwaHBfaW5pdCh2b2lkKQotewotCWluZm8oRFJJVkVSX0RFU0MgIlxuIik7Ci0KLQlkdW1teXBocF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKE1ZX05BTUUpOwotCWlmICghZHVtbXlwaHBfd3EpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0dXJuIHBjaV9zY2FuX2J1c2VzKCk7CisJaWYgKGtvYmplY3RfaW5pdF9hbmRfYWRkKCZzbG90LT5rb2JqLCAmbGVnYWN5X2t0eXBlLAorCQkJCSAmcGNpX3Nsb3RzX2tzZXQtPmtvYmosICIlcyIsCisJCQkJIGRldl9uYW1lKCZwZGV2LT5kZXYpKSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZWQgbGVnYWN5IGZha2Ugc2xvdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzbG90LT5kZXYgPSBwY2lfZGV2X2dldChwZGV2KTsKKworCWxpc3RfYWRkKCZzbG90LT5saXN0LCAmbGVnYWN5X2xpc3QpOworCisJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIHZvaWQgX19leGl0IGR1bW15cGhwX2V4aXQodm9pZCkKK3N0YXRpYyBpbnQgbGVnYWN5X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQogewotCWNsZWFudXBfc2xvdHMoKTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGF0YSk7CisKKwlpZiAoYWN0aW9uID09IEJVU19OT1RJRllfQUREX0RFVklDRSkgeworCQlsZWdhY3lfYWRkX3Nsb3QocGRldik7CisJfSBlbHNlIGlmIChhY3Rpb24gPT0gQlVTX05PVElGWV9ERUxfREVWSUNFKSB7CisJCXN0cnVjdCBsZWdhY3lfc2xvdCAqc2xvdDsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNsb3QsICZsZWdhY3lfbGlzdCwgbGlzdCkKKwkJCWlmIChzbG90LT5kZXYgPT0gcGRldikKKwkJCQlnb3RvIGZvdW5kOworCisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJNaXNzaW5nIGxlZ2FjeSBmYWtlIHNsb3Q/Iik7CisJCXJldHVybiAtRU5PREVWOworZm91bmQ6CisJCWtvYmplY3RfZGVsKCZzbG90LT5rb2JqKTsKKwkJbGlzdF9kZWwoJnNsb3QtPmxpc3QpOworCQlrb2JqZWN0X3B1dCgmc2xvdC0+a29iaik7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKLW1vZHVsZV9pbml0KGR1bW15cGhwX2luaXQpOwotbW9kdWxlX2V4aXQoZHVtbXlwaHBfZXhpdCk7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGxlZ2FjeV9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGxlZ2FjeV9ub3RpZnkKK307CiAKLU1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworc3RhdGljIGludCBfX2luaXQgaW5pdF9sZWdhY3kodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisKKwkvKiBBZGQgZXhpc3RpbmcgZGV2aWNlcyAqLworCXdoaWxlICgocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkZXYpKSkKKwkJbGVnYWN5X2FkZF9zbG90KHBkZXYpOworCisJLyogQmUgYWxlcnRlZCBvZiBhbnkgbmV3IG9uZXMgKi8KKwlidXNfcmVnaXN0ZXJfbm90aWZpZXIoJnBjaV9idXNfdHlwZSwgJmxlZ2FjeV9ub3RpZmllcik7CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChpbml0X2xlZ2FjeSk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCByZW1vdmVfbGVnYWN5KHZvaWQpCit7CisJc3RydWN0IGxlZ2FjeV9zbG90ICpzbG90LCAqdG1wOworCisJYnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoJnBjaV9idXNfdHlwZSwgJmxlZ2FjeV9ub3RpZmllcik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2xvdCwgdG1wLCAmbGVnYWN5X2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnNsb3QtPmxpc3QpOworCQlrb2JqZWN0X2RlbCgmc2xvdC0+a29iaik7CisJCWtvYmplY3RfcHV0KCZzbG90LT5rb2JqKTsKKwl9Cit9Cittb2R1bGVfZXhpdChyZW1vdmVfbGVnYWN5KTsKKworCitNT0RVTEVfQVVUSE9SKCJUcmVudCBQaWVwaG8gPHh5enp5QHNwZWFrZWFzeS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxlZ2FjeSB2ZXJzaW9uIG9mIHRoZSBmYWtlcGhwIGludGVyZmFjZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWdnaW5nIG1vZGUgZW5hYmxlZCBvciBub3QiKTsKLW1vZHVsZV9wYXJhbShkdXBfc2xvdHMsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MoZHVwX3Nsb3RzLCAiRm9yY2UgZHVwbGljYXRlIHNsb3QgbmFtZXMgZm9yIGRlYnVnZ2luZyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmgKaW5kZXggMzlhZTM3NS4uMGEzNjg1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCkBAIC00NiwxMCArNDYsMTAgQEAKIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcGNpZWhwX3dxOwogCiAjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAocGNpZWhwX2RlYnVnKQkJCQkJXAotCQkJcHJpbnRrKCIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOwlcCi0JfSB3aGlsZSAoMCkKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHBjaWVocF9kZWJ1ZykJCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOwlcCit9IHdoaWxlICgwKQogI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pCQkJCQkJXAogCXByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQogI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKQkJCQkJCVwKQEAgLTYwLDcgKzYwLDcgQEAKICNkZWZpbmUgY3RybF9kYmcoY3RybCwgZm9ybWF0LCBhcmcuLi4pCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAocGNpZWhwX2RlYnVnKQkJCQkJXAotCQkJZGV2X3ByaW50aygsICZjdHJsLT5wY2llLT5kZXZpY2UsCQlcCisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZjdHJsLT5wY2llLT5kZXZpY2UsCVwKIAkJCQkJZm9ybWF0LCAjIyBhcmcpOwkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIGN0cmxfZXJyKGN0cmwsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXApAQCAtMTA4LDEwICsxMDgsMTEgQEAKIAl1MzIgc2xvdF9jYXA7CiAJdTggY2FwX2Jhc2U7CiAJc3RydWN0IHRpbWVyX2xpc3QgcG9sbF90aW1lcjsKLQlpbnQgY21kX2J1c3k7CisJdW5zaWduZWQgaW50IGNtZF9idXN5OjE7CiAJdW5zaWduZWQgaW50IG5vX2NtZF9jb21wbGV0ZToxOwogCXVuc2lnbmVkIGludCBsaW5rX2FjdGl2ZV9yZXBvcnRpbmc6MTsKIAl1bnNpZ25lZCBpbnQgbm90aWZpY2F0aW9uX2VuYWJsZWQ6MTsKKwl1bnNpZ25lZCBpbnQgcG93ZXJfZmF1bHRfZGV0ZWN0ZWQ7CiB9OwogCiAjZGVmaW5lIElOVF9CVVRUT05fSUdOT1JFCQkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9hY3BpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9hY3BpLmMKaW5kZXggNDM4ZDc5NS4uOTYwNDgwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2FjcGkuYwpAQCAtNjcsMzcgKzY3LDI3IEBACiAJcmV0dXJuIFBDSUVIUF9ERVRFQ1RfREVGQVVMVDsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCBfX2luaXRkYXRhIHBvcnRfcGNpX2lkc1tdID0gewotCXsKLQkJLnZlbmRvciA9IFBDSV9BTllfSUQsCi0JCS5kZXZpY2UgPSBQQ0lfQU5ZX0lELAotCQkucG9ydF90eXBlID0gUENJRV9BTllfUE9SVCwKLQkJLnNlcnZpY2VfdHlwZSA9IFBDSUVfUE9SVF9TRVJWSUNFX0hQLAotCQkuZHJpdmVyX2RhdGEgPSAgMCwKLSAgICAgICAgfSwgeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQotfTsKLQogc3RhdGljIGludCBfX2luaXRkYXRhIGR1cF9zbG90X2lkOwogc3RhdGljIGludCBfX2luaXRkYXRhIGFjcGlfc2xvdF9kZXRlY3RlZDsKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIF9faW5pdGRhdGEgZHVtbXlfc2xvdHMgPSBMSVNUX0hFQURfSU5JVChkdW1teV9zbG90cyk7CiAKIC8qIER1bW15IGRyaXZlciBmb3IgZHVtcGxpY2F0ZSBuYW1lIGRldGVjdGlvbiAqLwotc3RhdGljIGludCBfX2luaXQgZHVtbXlfcHJvYmUoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfaWQgKmlkKQorc3RhdGljIGludCBfX2luaXQgZHVtbXlfcHJvYmUoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpCiB7CiAJaW50IHBvczsKIAl1MzIgc2xvdF9jYXA7CiAJc3RydWN0IHNsb3QgKnNsb3QsICp0bXA7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXYtPnBvcnQ7CiAJc3RydWN0IHBjaV9idXMgKnBidXMgPSBwZGV2LT5zdWJvcmRpbmF0ZTsKLQlpZiAoIShzbG90ID0ga3phbGxvYyhzaXplb2YoKnNsb3QpLCBHRlBfS0VSTkVMKSkpCi0JCXJldHVybiAtRU5PTUVNOwogCS8qIE5vdGU6IHBjaWVocF9kZXRlY3RfbW9kZSAhPSBQQ0lFSFBfREVURUNUX0FDUEkgaGVyZSAqLwogCWlmIChwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShwZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKCEocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCkpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcG9zICsgUENJX0VYUF9TTFRDQVAsICZzbG90X2NhcCk7CisJc2xvdCA9IGt6YWxsb2Moc2l6ZW9mKCpzbG90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbG90KQorCQlyZXR1cm4gLUVOT01FTTsKIAlzbG90LT5udW1iZXIgPSBzbG90X2NhcCA+PiAxOTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmR1bW15X3Nsb3RzLCBzbG90X2xpc3QpIHsKIAkJaWYgKHRtcC0+bnVtYmVyID09IHNsb3QtPm51bWJlcikKQEAgLTExMSw3ICsxMDEsOCBAQAogCiBzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBfX2luaXRkYXRhIGR1bW15X2RyaXZlciA9IHsKICAgICAgICAgLm5hbWUgICAgICAgICAgID0gInBjaWVocF9kdW1teSIsCi0gICAgICAgIC5pZF90YWJsZSAgICAgICA9IHBvcnRfcGNpX2lkcywKKwkucG9ydF90eXBlCT0gUENJRV9BTllfUE9SVCwKKwkuc2VydmljZQk9IFBDSUVfUE9SVF9TRVJWSUNFX0hQLAogICAgICAgICAucHJvYmUgICAgICAgICAgPSBkdW1teV9wcm9iZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYwppbmRleCA2ODFlMzkxLi5mYjI1NGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCkBAIC00MDEsNyArNDAxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwY2llaHBfcHJvYmUoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCAqaWQpCitzdGF0aWMgaW50IHBjaWVocF9wcm9iZShzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmM7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmw7CkBAIC00NzUsNyArNDc1LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBwY2llaHBfc3VzcGVuZCAoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcGNpZWhwX3N1c3BlbmQgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KQogewogCWRldl9pbmZvKCZkZXYtPmRldmljZSwgIiVzIEVOVFJZXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIDA7CkBAIC01MDMsMjAgKzUwMywxMiBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2lkIHBvcnRfcGNpX2lkc1tdID0geyB7Ci0JLnZlbmRvciA9IFBDSV9BTllfSUQsCi0JLmRldmljZSA9IFBDSV9BTllfSUQsCi0JLnBvcnRfdHlwZSA9IFBDSUVfQU5ZX1BPUlQsCi0JLnNlcnZpY2VfdHlwZSA9IFBDSUVfUE9SVF9TRVJWSUNFX0hQLAotCS5kcml2ZXJfZGF0YSA9CTAsCi0JfSwgeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQotfTsKKyNlbmRpZiAvKiBQTSAqLwogCiBzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBocGRyaXZlcl9wb3J0ZHJ2ID0gewogCS5uYW1lCQk9IFBDSUVfTU9EVUxFX05BTUUsCi0JLmlkX3RhYmxlCT0gJnBvcnRfcGNpX2lkc1swXSwKKwkucG9ydF90eXBlCT0gUENJRV9BTllfUE9SVCwKKwkuc2VydmljZQk9IFBDSUVfUE9SVF9TRVJWSUNFX0hQLAogCiAJLnByb2JlCQk9IHBjaWVocF9wcm9iZSwKIAkucmVtb3ZlCQk9IHBjaWVocF9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCmluZGV4IDdhMTZjNjguLjA3YmQzMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCkBAIC01NDgsMjMgKzU0OCwyMSBAQAogCiAJc2xvdF9jbWQgPSBQT1dFUl9PTjsKIAljbWRfbWFzayA9IFBDSV9FWFBfU0xUQ1RMX1BDQzsKLQkvKiBFbmFibGUgZGV0ZWN0aW9uIHRoYXQgd2UgdHVybmVkIG9mZiBhdCBzbG90IHBvd2VyLW9mZiB0aW1lICovCiAJaWYgKCFwY2llaHBfcG9sbF9tb2RlKSB7Ci0JCXNsb3RfY21kIHw9IChQQ0lfRVhQX1NMVENUTF9QRkRFIHwgUENJX0VYUF9TTFRDVExfTVJMU0NFIHwKLQkJCSAgICAgUENJX0VYUF9TTFRDVExfUERDRSk7Ci0JCWNtZF9tYXNrIHw9IChQQ0lfRVhQX1NMVENUTF9QRkRFIHwgUENJX0VYUF9TTFRDVExfTVJMU0NFIHwKLQkJCSAgICAgUENJX0VYUF9TTFRDVExfUERDRSk7CisJCS8qIEVuYWJsZSBwb3dlciBmYXVsdCBkZXRlY3Rpb24gdHVybmVkIG9mZiBhdCBwb3dlciBvZmYgdGltZSAqLworCQlzbG90X2NtZCB8PSBQQ0lfRVhQX1NMVENUTF9QRkRFOworCQljbWRfbWFzayB8PSBQQ0lfRVhQX1NMVENUTF9QRkRFOwogCX0KIAogCXJldHZhbCA9IHBjaWVfd3JpdGVfY21kKGN0cmwsIHNsb3RfY21kLCBjbWRfbWFzayk7Ci0KIAlpZiAocmV0dmFsKSB7CiAJCWN0cmxfZXJyKGN0cmwsICJXcml0ZSAleCBjb21tYW5kIGZhaWxlZCFcbiIsIHNsb3RfY21kKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gcmV0dmFsOwogCX0KIAljdHJsX2RiZyhjdHJsLCAiJXM6IFNMT1RDVFJMICV4IHdyaXRlIGNtZCAleFxuIiwKIAkJIF9fZnVuY19fLCBjdHJsLT5jYXBfYmFzZSArIFBDSV9FWFBfU0xUQ1RMLCBzbG90X2NtZCk7CiAKKwljdHJsLT5wb3dlcl9mYXVsdF9kZXRlY3RlZCA9IDA7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNjIxLDE4ICs2MTksMTAgQEAKIAogCXNsb3RfY21kID0gUE9XRVJfT0ZGOwogCWNtZF9tYXNrID0gUENJX0VYUF9TTFRDVExfUENDOwotCS8qCi0JICogSWYgd2UgZ2V0IE1STCBvciBwcmVzZW5jZSBkZXRlY3QgaW50ZXJydXB0cyBub3csIHRoZSBpc3IKLQkgKiB3aWxsIG5vdGljZSB0aGUgc3RpY2t5IHBvd2VyLWZhdWx0IGJpdCB0b28gYW5kIGlzc3VlIHBvd2VyCi0JICogaW5kaWNhdG9yIGNoYW5nZSBjb21tYW5kcy4gVGhpcyB3aWxsIGxlYWQgdG8gYW4gZW5kbGVzcyBsb29wCi0JICogb2YgY29tbWFuZCBjb21wbGV0aW9ucywgc2luY2UgdGhlIHBvd2VyLWZhdWx0IGJpdCByZW1haW5zIG9uCi0JICogdGlsbCB0aGUgc2xvdCBpcyBwb3dlcmVkIG9uIGFnYWluLgotCSAqLwogCWlmICghcGNpZWhwX3BvbGxfbW9kZSkgewotCQlzbG90X2NtZCAmPSB+KFBDSV9FWFBfU0xUQ1RMX1BGREUgfCBQQ0lfRVhQX1NMVENUTF9NUkxTQ0UgfAotCQkJICAgICAgUENJX0VYUF9TTFRDVExfUERDRSk7Ci0JCWNtZF9tYXNrIHw9IChQQ0lfRVhQX1NMVENUTF9QRkRFIHwgUENJX0VYUF9TTFRDVExfTVJMU0NFIHwKLQkJCSAgICAgUENJX0VYUF9TTFRDVExfUERDRSk7CisJCS8qIERpc2FibGUgcG93ZXIgZmF1bHQgZGV0ZWN0aW9uICovCisJCXNsb3RfY21kICY9IH5QQ0lfRVhQX1NMVENUTF9QRkRFOworCQljbWRfbWFzayB8PSBQQ0lfRVhQX1NMVENUTF9QRkRFOwogCX0KIAogCXJldHZhbCA9IHBjaWVfd3JpdGVfY21kKGN0cmwsIHNsb3RfY21kLCBjbWRfbWFzayk7CkBAIC02NzIsMTAgKzY2MiwxMSBAQAogCQlkZXRlY3RlZCAmPSAoUENJX0VYUF9TTFRTVEFfQUJQIHwgUENJX0VYUF9TTFRTVEFfUEZEIHwKIAkJCSAgICAgUENJX0VYUF9TTFRTVEFfTVJMU0MgfCBQQ0lfRVhQX1NMVFNUQV9QREMgfAogCQkJICAgICBQQ0lfRVhQX1NMVFNUQV9DQyk7CisJCWRldGVjdGVkICY9IH5pbnRyX2xvYzsKIAkJaW50cl9sb2MgfD0gZGV0ZWN0ZWQ7CiAJCWlmICghaW50cl9sb2MpCiAJCQlyZXR1cm4gSVJRX05PTkU7Ci0JCWlmIChkZXRlY3RlZCAmJiBwY2llaHBfd3JpdGV3KGN0cmwsIFBDSV9FWFBfU0xUU1RBLCBkZXRlY3RlZCkpIHsKKwkJaWYgKGRldGVjdGVkICYmIHBjaWVocF93cml0ZXcoY3RybCwgUENJX0VYUF9TTFRTVEEsIGludHJfbG9jKSkgewogCQkJY3RybF9lcnIoY3RybCwgIiVzOiBDYW5ub3Qgd3JpdGUgdG8gU0xPVFNUQVRVU1xuIiwKIAkJCQkgX19mdW5jX18pOwogCQkJcmV0dXJuIElSUV9OT05FOwpAQCAtNzA5LDkgKzcwMCwxMCBAQAogCQlwY2llaHBfaGFuZGxlX3ByZXNlbmNlX2NoYW5nZShwX3Nsb3QpOwogCiAJLyogQ2hlY2sgUG93ZXIgRmF1bHQgRGV0ZWN0ZWQgKi8KLQlpZiAoaW50cl9sb2MgJiBQQ0lfRVhQX1NMVFNUQV9QRkQpCisJaWYgKChpbnRyX2xvYyAmIFBDSV9FWFBfU0xUU1RBX1BGRCkgJiYgIWN0cmwtPnBvd2VyX2ZhdWx0X2RldGVjdGVkKSB7CisJCWN0cmwtPnBvd2VyX2ZhdWx0X2RldGVjdGVkID0gMTsKIAkJcGNpZWhwX2hhbmRsZV9wb3dlcl9mYXVsdChwX3Nsb3QpOwotCisJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKaW5kZXggNmFiYTBiNi4uOTc0ZTkyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCkBAIC00OCwxMCArNDgsMTAgQEAKIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc2hwY2hwX3dxOwogCiAjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoc2hwY2hwX2RlYnVnKQkJCQkJXAotCQkJcHJpbnRrKCIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOwlcCi0JfSB3aGlsZSAoMCkKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHNocGNocF9kZWJ1ZykJCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOwlcCit9IHdoaWxlICgwKQogI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pCQkJCQkJXAogCXByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQogI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKQkJCQkJCVwKQEAgLTYyLDcgKzYyLDcgQEAKICNkZWZpbmUgY3RybF9kYmcoY3RybCwgZm9ybWF0LCBhcmcuLi4pCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAoc2hwY2hwX2RlYnVnKQkJCQkJXAotCQkJZGV2X3ByaW50aygsICZjdHJsLT5wY2lfZGV2LT5kZXYsCQlcCisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZjdHJsLT5wY2lfZGV2LT5kZXYsCVwKIAkJCQkJZm9ybWF0LCAjIyBhcmcpOwkJXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIGN0cmxfZXJyKGN0cmwsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwppbmRleCAxMzhmMTYxLi5hYTMxNWU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQkJCQkJCWJ1c25yKSkKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQlpZiAoYnVzbnIgPj0gZW5kKSB7CisJCQlpZiAoYnVzbnIgPiBlbmQpIHsKIAkJCQljdHJsX2VycihjdHJsLAogCQkJCQkgIk5vIGZyZWUgYnVzIGZvciBob3QtYWRkZWQgYnJpZGdlXG4iKTsKIAkJCQlwY2lfZGV2X3B1dChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYyBiL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKaW5kZXggNDk0MDJjMy4uMjNlNTZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYworKysgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCkBAIC0xNjQsNyArMTY0LDggQEAKICAqIDE6IHdyaXRhYmxlCiAgKiAyLTY6IHJlc2VydmVkCiAgKiA3OiBzdXBlciBwYWdlCi0gKiA4LTExOiBhdmFpbGFibGUKKyAqIDgtMTA6IGF2YWlsYWJsZQorICogMTE6IHNub29wIGJlaGF2aW9yCiAgKiAxMi02MzogSG9zdCBwaHlzY2lhbCBhZGRyZXNzCiAgKi8KIHN0cnVjdCBkbWFfcHRlIHsKQEAgLTE4Niw2ICsxODcsMTEgQEAKIAlwdGUtPnZhbCB8PSBETUFfUFRFX1dSSVRFOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3NldF9wdGVfc25wKHN0cnVjdCBkbWFfcHRlICpwdGUpCit7CisJcHRlLT52YWwgfD0gRE1BX1BURV9TTlA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc2V0X3B0ZV9wcm90KHN0cnVjdCBkbWFfcHRlICpwdGUsIHVuc2lnbmVkIGxvbmcgcHJvdCkKIHsKIAlwdGUtPnZhbCA9IChwdGUtPnZhbCAmIH4zKSB8IChwcm90ICYgMyk7CkBAIC0yMzEsNiArMjM3LDcgQEAKIAlpbnQJCWZsYWdzOwkJLyogZmxhZ3MgdG8gZmluZCBvdXQgdHlwZSBvZiBkb21haW4gKi8KIAogCWludAkJaW9tbXVfY29oZXJlbmN5Oy8qIGluZGljYXRlIGNvaGVyZW5jeSBvZiBpb21tdSBhY2Nlc3MgKi8KKwlpbnQJCWlvbW11X3Nub29waW5nOyAvKiBpbmRpY2F0ZSBzbm9vcGluZyBjb250cm9sIGZlYXR1cmUqLwogCWludAkJaW9tbXVfY291bnQ7CS8qIHJlZmVyZW5jZSBjb3VudCBvZiBpb21tdSAqLwogCXNwaW5sb2NrX3QJaW9tbXVfbG9jazsJLyogcHJvdGVjdCBpb21tdSBzZXQgaW4gZG9tYWluICovCiAJdTY0CQltYXhfYWRkcjsJLyogbWF4aW11bSBtYXBwZWQgYWRkcmVzcyAqLwpAQCAtNDIxLDcgKzQyOCw2IEBACiAJcmV0dXJuIGdfaW9tbXVzW2lvbW11X2lkXTsKIH0KIAotLyogIkNvaGVyZW5jeSIgY2FwYWJpbGl0eSBtYXkgYmUgZGlmZmVyZW50IGFjcm9zcyBpb21tdXMgKi8KIHN0YXRpYyB2b2lkIGRvbWFpbl91cGRhdGVfaW9tbXVfY29oZXJlbmN5KHN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluKQogewogCWludCBpOwpAQCAtNDM4LDYgKzQ0NCwyOSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgZG9tYWluX3VwZGF0ZV9pb21tdV9zbm9vcGluZyhzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbikKK3sKKwlpbnQgaTsKKworCWRvbWFpbi0+aW9tbXVfc25vb3BpbmcgPSAxOworCisJaSA9IGZpbmRfZmlyc3RfYml0KCZkb21haW4tPmlvbW11X2JtcCwgZ19udW1fb2ZfaW9tbXVzKTsKKwlmb3IgKDsgaSA8IGdfbnVtX29mX2lvbW11czsgKSB7CisJCWlmICghZWNhcF9zY19zdXBwb3J0KGdfaW9tbXVzW2ldLT5lY2FwKSkgeworCQkJZG9tYWluLT5pb21tdV9zbm9vcGluZyA9IDA7CisJCQlicmVhazsKKwkJfQorCQlpID0gZmluZF9uZXh0X2JpdCgmZG9tYWluLT5pb21tdV9ibXAsIGdfbnVtX29mX2lvbW11cywgaSsxKTsKKwl9Cit9CisKKy8qIFNvbWUgY2FwYWJpbGl0aWVzIG1heSBiZSBkaWZmZXJlbnQgYWNyb3NzIGlvbW11cyAqLworc3RhdGljIHZvaWQgZG9tYWluX3VwZGF0ZV9pb21tdV9jYXAoc3RydWN0IGRtYXJfZG9tYWluICpkb21haW4pCit7CisJZG9tYWluX3VwZGF0ZV9pb21tdV9jb2hlcmVuY3koZG9tYWluKTsKKwlkb21haW5fdXBkYXRlX2lvbW11X3Nub29waW5nKGRvbWFpbik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfaW9tbXUgKmRldmljZV90b19pb21tdSh1OCBidXMsIHU4IGRldmZuKQogewogCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZCA9IE5VTEw7CkBAIC02ODksMTUgKzcxOCwxNyBAQAogc3RhdGljIHZvaWQgZG1hX3B0ZV9jbGVhcl9yYW5nZShzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwgdTY0IHN0YXJ0LCB1NjQgZW5kKQogewogCWludCBhZGRyX3dpZHRoID0gYWdhd190b193aWR0aChkb21haW4tPmFnYXcpOworCWludCBucGFnZXM7CiAKIAlzdGFydCAmPSAoKCh1NjQpMSkgPDwgYWRkcl93aWR0aCkgLSAxOwogCWVuZCAmPSAoKCh1NjQpMSkgPDwgYWRkcl93aWR0aCkgLSAxOwogCS8qIGluIGNhc2UgaXQncyBwYXJ0aWFsIHBhZ2UgKi8KIAlzdGFydCA9IFBBR0VfQUxJR04oc3RhcnQpOwogCWVuZCAmPSBQQUdFX01BU0s7CisJbnBhZ2VzID0gKGVuZCAtIHN0YXJ0KSAvIFZURF9QQUdFX1NJWkU7CiAKIAkvKiB3ZSBkb24ndCBuZWVkIGxvY2sgaGVyZSwgbm9ib2R5IGVsc2UgdG91Y2hlcyB0aGUgaW92YSByYW5nZSAqLwotCXdoaWxlIChzdGFydCA8IGVuZCkgeworCXdoaWxlIChucGFnZXMtLSkgewogCQlkbWFfcHRlX2NsZWFyX29uZShkb21haW4sIHN0YXJ0KTsKIAkJc3RhcnQgKz0gVlREX1BBR0VfU0laRTsKIAl9CkBAIC0xMjQxLDYgKzEyNzIsMTEgQEAKIAllbHNlCiAJCWRvbWFpbi0+aW9tbXVfY29oZXJlbmN5ID0gMDsKIAorCWlmIChlY2FwX3NjX3N1cHBvcnQoaW9tbXUtPmVjYXApKQorCQlkb21haW4tPmlvbW11X3Nub29waW5nID0gMTsKKwllbHNlCisJCWRvbWFpbi0+aW9tbXVfc25vb3BpbmcgPSAwOworCiAJZG9tYWluLT5pb21tdV9jb3VudCA9IDE7CiAKIAkvKiBhbHdheXMgYWxsb2NhdGUgdGhlIHRvcCBwZ2QgKi8KQEAgLTEzNjksNyArMTQwNSw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgZmxhZ3MpOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChpb21tdS0+c2VxX2lkLCAmZG9tYWluLT5pb21tdV9ibXApKSB7CiAJCWRvbWFpbi0+aW9tbXVfY291bnQrKzsKLQkJZG9tYWluX3VwZGF0ZV9pb21tdV9jb2hlcmVuY3koZG9tYWluKTsKKwkJZG9tYWluX3VwZGF0ZV9pb21tdV9jYXAoZG9tYWluKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5pb21tdV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CkBAIC0xNDY5LDYgKzE1MDUsOCBAQAogCQlCVUdfT04oZG1hX3B0ZV9hZGRyKHB0ZSkpOwogCQlkbWFfc2V0X3B0ZV9hZGRyKHB0ZSwgc3RhcnRfcGZuIDw8IFZURF9QQUdFX1NISUZUKTsKIAkJZG1hX3NldF9wdGVfcHJvdChwdGUsIHByb3QpOworCQlpZiAocHJvdCAmIERNQV9QVEVfU05QKQorCQkJZG1hX3NldF9wdGVfc25wKHB0ZSk7CiAJCWRvbWFpbl9mbHVzaF9jYWNoZShkb21haW4sIHB0ZSwgc2l6ZW9mKCpwdGUpKTsKIAkJc3RhcnRfcGZuKys7CiAJCWluZGV4Kys7CkBAIC0xNzgyLDcgKzE4MjAsNyBAQAogCXJldCA9IGlvbW11X3ByZXBhcmVfaWRlbnRpdHlfbWFwKHBkZXYsIDAsIDE2KjEwMjQqMTAyNCk7CiAKIAlpZiAocmV0KQotCQlwcmludGsoIklPTU1VOiBGYWlsZWQgdG8gY3JlYXRlIDAtNjRNIGlkZW50aXR5IG1hcCwgIgorCQlwcmludGsoS0VSTl9FUlIgIklPTU1VOiBGYWlsZWQgdG8gY3JlYXRlIDAtNjRNIGlkZW50aXR5IG1hcCwgIgogCQkJImZsb3BweSBtaWdodCBub3Qgd29ya1xuIik7CiAKIH0KQEAgLTIxMTksNyArMjE1Nyw3IEBACiBlcnJvcjoKIAlpZiAoaW92YSkKIAkJX19mcmVlX2lvdmEoJmRvbWFpbi0+aW92YWQsIGlvdmEpOwotCXByaW50ayhLRVJOX0VSUiJEZXZpY2UgJXMgcmVxdWVzdDogJWx4QCVsbHggZGlyICVkIC0tLSBmYWlsZWRcbiIsCisJcHJpbnRrKEtFUk5fRVJSIkRldmljZSAlcyByZXF1ZXN0OiAlenhAJWxseCBkaXIgJWQgLS0tIGZhaWxlZFxuIiwKIAkJcGNpX25hbWUocGRldiksIHNpemUsICh1bnNpZ25lZCBsb25nIGxvbmcpcGFkZHIsIGRpcik7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjE4LDcgKzIyNTYsNyBAQAogCXN0YXJ0X2FkZHIgPSBpb3ZhLT5wZm5fbG8gPDwgUEFHRV9TSElGVDsKIAlzaXplID0gYWxpZ25lZF9zaXplKCh1NjQpZGV2X2FkZHIsIHNpemUpOwogCi0JcHJfZGVidWcoIkRldmljZSAlcyB1bm1hcHBpbmc6ICVseEAlbGx4XG4iLAorCXByX2RlYnVnKCJEZXZpY2UgJXMgdW5tYXBwaW5nOiAlenhAJWxseFxuIiwKIAkJcGNpX25hbWUocGRldiksIHNpemUsICh1bnNpZ25lZCBsb25nIGxvbmcpc3RhcnRfYWRkcik7CiAKIAkvKiAgY2xlYXIgdGhlIHdob2xlIHBhZ2UgKi8KQEAgLTIyODIsOCArMjMyMCw2IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgb3JkZXIpOwogfQogCi0jZGVmaW5lIFNHX0VOVF9WSVJUX0FERFJFU1Moc2cpCShzZ192aXJ0KChzZykpKQotCiBzdGF0aWMgdm9pZCBpbnRlbF91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCiAJCQkgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCiAJCQkgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKQEAgLTIyOTQsNyArMjMzMCw3IEBACiAJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyOwogCXN0cnVjdCBpb3ZhICppb3ZhOwogCXNpemVfdCBzaXplID0gMDsKLQl2b2lkICphZGRyOworCXBoeXNfYWRkcl90IGFkZHI7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwogCkBAIC0yMzEwLDcgKzIzNDYsNyBAQAogCWlmICghaW92YSkKIAkJcmV0dXJuOwogCWZvcl9lYWNoX3NnKHNnbGlzdCwgc2csIG5lbGVtcywgaSkgewotCQlhZGRyID0gU0dfRU5UX1ZJUlRfQUREUkVTUyhzZyk7CisJCWFkZHIgPSBwYWdlX3RvX3BoeXMoc2dfcGFnZShzZykpICsgc2ctPm9mZnNldDsKIAkJc2l6ZSArPSBhbGlnbmVkX3NpemUoKHU2NClhZGRyLCBzZy0+bGVuZ3RoKTsKIAl9CiAKQEAgLTIzMzcsNyArMjM3Myw3IEBACiAKIAlmb3JfZWFjaF9zZyhzZ2xpc3QsIHNnLCBuZWxlbXMsIGkpIHsKIAkJQlVHX09OKCFzZ19wYWdlKHNnKSk7Ci0JCXNnLT5kbWFfYWRkcmVzcyA9IHZpcnRfdG9fYnVzKFNHX0VOVF9WSVJUX0FERFJFU1Moc2cpKTsKKwkJc2ctPmRtYV9hZGRyZXNzID0gcGFnZV90b19waHlzKHNnX3BhZ2Uoc2cpKSArIHNnLT5vZmZzZXQ7CiAJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKIAl9CiAJcmV0dXJuIG5lbGVtczsKQEAgLTIzNDYsNyArMjM4Miw3IEBACiBzdGF0aWMgaW50IGludGVsX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsCiAJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCXZvaWQgKmFkZHI7CisJcGh5c19hZGRyX3QgYWRkcjsKIAlpbnQgaTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaHdkZXYpOwogCXN0cnVjdCBkbWFyX2RvbWFpbiAqZG9tYWluOwpAQCAtMjM3MCw4ICsyNDA2LDcgQEAKIAlpb21tdSA9IGRvbWFpbl9nZXRfaW9tbXUoZG9tYWluKTsKIAogCWZvcl9lYWNoX3NnKHNnbGlzdCwgc2csIG5lbGVtcywgaSkgewotCQlhZGRyID0gU0dfRU5UX1ZJUlRfQUREUkVTUyhzZyk7Ci0JCWFkZHIgPSAodm9pZCAqKXZpcnRfdG9fcGh5cyhhZGRyKTsKKwkJYWRkciA9IHBhZ2VfdG9fcGh5cyhzZ19wYWdlKHNnKSkgKyBzZy0+b2Zmc2V0OwogCQlzaXplICs9IGFsaWduZWRfc2l6ZSgodTY0KWFkZHIsIHNnLT5sZW5ndGgpOwogCX0KIApAQCAtMjM5NCw4ICsyNDI5LDcgQEAKIAlzdGFydF9hZGRyID0gaW92YS0+cGZuX2xvIDw8IFBBR0VfU0hJRlQ7CiAJb2Zmc2V0ID0gMDsKIAlmb3JfZWFjaF9zZyhzZ2xpc3QsIHNnLCBuZWxlbXMsIGkpIHsKLQkJYWRkciA9IFNHX0VOVF9WSVJUX0FERFJFU1Moc2cpOwotCQlhZGRyID0gKHZvaWQgKil2aXJ0X3RvX3BoeXMoYWRkcik7CisJCWFkZHIgPSBwYWdlX3RvX3BoeXMoc2dfcGFnZShzZykpICsgc2ctPm9mZnNldDsKIAkJc2l6ZSA9IGFsaWduZWRfc2l6ZSgodTY0KWFkZHIsIHNnLT5sZW5ndGgpOwogCQlyZXQgPSBkb21haW5fcGFnZV9tYXBwaW5nKGRvbWFpbiwgc3RhcnRfYWRkciArIG9mZnNldCwKIAkJCSgodTY0KWFkZHIpICYgUEFHRV9NQVNLLApAQCAtMjYyOCw2ICsyNjYyLDMzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGlvbW11X2RldGFjaF9kZXBlbmRlbnRfZGV2aWNlcyhzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LAorCQkJCQkgICBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqdG1wLCAqcGFyZW50OworCisJaWYgKCFpb21tdSB8fCAhcGRldikKKwkJcmV0dXJuOworCisJLyogZGVwZW5kZW50IGRldmljZSBkZXRhY2ggKi8KKwl0bXAgPSBwY2lfZmluZF91cHN0cmVhbV9wY2llX2JyaWRnZShwZGV2KTsKKwkvKiBTZWNvbmRhcnkgaW50ZXJmYWNlJ3MgYnVzIG51bWJlciBhbmQgZGV2Zm4gMCAqLworCWlmICh0bXApIHsKKwkJcGFyZW50ID0gcGRldi0+YnVzLT5zZWxmOworCQl3aGlsZSAocGFyZW50ICE9IHRtcCkgeworCQkJaW9tbXVfZGV0YWNoX2Rldihpb21tdSwgcGFyZW50LT5idXMtPm51bWJlciwKKwkJCQlwYXJlbnQtPmRldmZuKTsKKwkJCXBhcmVudCA9IHBhcmVudC0+YnVzLT5zZWxmOworCQl9CisJCWlmICh0bXAtPmlzX3BjaWUpIC8qIHRoaXMgaXMgYSBQQ0lFLXRvLVBDSSBicmlkZ2UgKi8KKwkJCWlvbW11X2RldGFjaF9kZXYoaW9tbXUsCisJCQkJdG1wLT5zdWJvcmRpbmF0ZS0+bnVtYmVyLCAwKTsKKwkJZWxzZSAvKiB0aGlzIGlzIGEgbGVnYWN5IFBDSSBicmlkZ2UgKi8KKwkJCWlvbW11X2RldGFjaF9kZXYoaW9tbXUsCisJCQkJdG1wLT5idXMtPm51bWJlciwgdG1wLT5kZXZmbik7CisJfQorfQorCiBzdGF0aWMgdm9pZCB2bV9kb21haW5fcmVtb3ZlX29uZV9kZXZfaW5mbyhzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbiwKIAkJCQkJICBzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTI2NTMsNiArMjcxNCw3IEBACiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2VfZG9tYWluX2xvY2ssIGZsYWdzKTsKIAogCQkJaW9tbXVfZGV0YWNoX2Rldihpb21tdSwgaW5mby0+YnVzLCBpbmZvLT5kZXZmbik7CisJCQlpb21tdV9kZXRhY2hfZGVwZW5kZW50X2RldmljZXMoaW9tbXUsIHBkZXYpOwogCQkJZnJlZV9kZXZpbmZvX21lbShpbmZvKTsKIAogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZV9kb21haW5fbG9jaywgZmxhZ3MpOwpAQCAtMjY3Niw3ICsyNzM4LDcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgdG1wX2ZsYWdzKTsKIAkJY2xlYXJfYml0KGlvbW11LT5zZXFfaWQsICZkb21haW4tPmlvbW11X2JtcCk7CiAJCWRvbWFpbi0+aW9tbXVfY291bnQtLTsKLQkJZG9tYWluX3VwZGF0ZV9pb21tdV9jb2hlcmVuY3koZG9tYWluKTsKKwkJZG9tYWluX3VwZGF0ZV9pb21tdV9jYXAoZG9tYWluKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5pb21tdV9sb2NrLCB0bXBfZmxhZ3MpOwogCX0KIApAQCAtMjcwMiwxNSArMjc2NCwxNiBAQAogCiAJCWlvbW11ID0gZGV2aWNlX3RvX2lvbW11KGluZm8tPmJ1cywgaW5mby0+ZGV2Zm4pOwogCQlpb21tdV9kZXRhY2hfZGV2KGlvbW11LCBpbmZvLT5idXMsIGluZm8tPmRldmZuKTsKKwkJaW9tbXVfZGV0YWNoX2RlcGVuZGVudF9kZXZpY2VzKGlvbW11LCBpbmZvLT5kZXYpOwogCiAJCS8qIGNsZWFyIHRoaXMgaW9tbXUgaW4gaW9tbXVfYm1wLCB1cGRhdGUgaW9tbXUgY291bnQKLQkJICogYW5kIGNvaGVyZW5jeQorCQkgKiBhbmQgY2FwYWJpbGl0aWVzCiAJCSAqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZG9tYWluLT5pb21tdV9sb2NrLCBmbGFnczIpOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGlvbW11LT5zZXFfaWQsCiAJCQkJICAgICAgICZkb21haW4tPmlvbW11X2JtcCkpIHsKIAkJCWRvbWFpbi0+aW9tbXVfY291bnQtLTsKLQkJCWRvbWFpbl91cGRhdGVfaW9tbXVfY29oZXJlbmN5KGRvbWFpbik7CisJCQlkb21haW5fdXBkYXRlX2lvbW11X2NhcChkb21haW4pOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRvbWFpbi0+aW9tbXVfbG9jaywgZmxhZ3MyKTsKIApAQCAtMjkzMyw2ICsyOTk2LDggQEAKIAkJcHJvdCB8PSBETUFfUFRFX1JFQUQ7CiAJaWYgKGlvbW11X3Byb3QgJiBJT01NVV9XUklURSkKIAkJcHJvdCB8PSBETUFfUFRFX1dSSVRFOworCWlmICgoaW9tbXVfcHJvdCAmIElPTU1VX0NBQ0hFKSAmJiBkbWFyX2RvbWFpbi0+aW9tbXVfc25vb3BpbmcpCisJCXByb3QgfD0gRE1BX1BURV9TTlA7CiAKIAltYXhfYWRkciA9IChpb3ZhICYgVlREX1BBR0VfTUFTSykgKyBWVERfUEFHRV9BTElHTihzaXplKTsKIAlpZiAoZG1hcl9kb21haW4tPm1heF9hZGRyIDwgbWF4X2FkZHIpIHsKQEAgLTI5ODYsNiArMzA1MSwxNyBAQAogCXJldHVybiBwaHlzOwogfQogCitzdGF0aWMgaW50IGludGVsX2lvbW11X2RvbWFpbl9oYXNfY2FwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGNhcCkKK3sKKwlzdHJ1Y3QgZG1hcl9kb21haW4gKmRtYXJfZG9tYWluID0gZG9tYWluLT5wcml2OworCisJaWYgKGNhcCA9PSBJT01NVV9DQVBfQ0FDSEVfQ09IRVJFTkNZKQorCQlyZXR1cm4gZG1hcl9kb21haW4tPmlvbW11X3Nub29waW5nOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfb3BzIGludGVsX2lvbW11X29wcyA9IHsKIAkuZG9tYWluX2luaXQJPSBpbnRlbF9pb21tdV9kb21haW5faW5pdCwKIAkuZG9tYWluX2Rlc3Ryb3kgPSBpbnRlbF9pb21tdV9kb21haW5fZGVzdHJveSwKQEAgLTI5OTQsNiArMzA3MCw3IEBACiAJLm1hcAkJPSBpbnRlbF9pb21tdV9tYXBfcmFuZ2UsCiAJLnVubWFwCQk9IGludGVsX2lvbW11X3VubWFwX3JhbmdlLAogCS5pb3ZhX3RvX3BoeXMJPSBpbnRlbF9pb21tdV9pb3ZhX3RvX3BoeXMsCisJLmRvbWFpbl9oYXNfY2FwID0gaW50ZWxfaW9tbXVfZG9tYWluX2hhc19jYXAsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfaW9tbXVfcndiZihzdHJ1Y3QgcGNpX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW92LmMgYi9kcml2ZXJzL3BjaS9pb3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjI3ZWZjNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL2lvdi5jCkBAIC0wLDAgKzEsNjgwIEBACisvKgorICogZHJpdmVycy9wY2kvaW92LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24sIFl1IFpoYW8gPHl1LnpoYW9AaW50ZWwuY29tPgorICoKKyAqIFBDSSBFeHByZXNzIEkvTyBWaXJ0dWFsaXphdGlvbiAoSU9WKSBzdXBwb3J0LgorICogICBTaW5nbGUgUm9vdCBJT1YgMS4wCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJwY2kuaCIKKworI2RlZmluZSBWSVJURk5fSURfTEVOCTE2CisKK3N0YXRpYyBpbmxpbmUgdTggdmlydGZuX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWQpCit7CisJcmV0dXJuIGRldi0+YnVzLT5udW1iZXIgKyAoKGRldi0+ZGV2Zm4gKyBkZXYtPnNyaW92LT5vZmZzZXQgKworCQkJCSAgICBkZXYtPnNyaW92LT5zdHJpZGUgKiBpZCkgPj4gOCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggdmlydGZuX2RldmZuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZCkKK3sKKwlyZXR1cm4gKGRldi0+ZGV2Zm4gKyBkZXYtPnNyaW92LT5vZmZzZXQgKworCQlkZXYtPnNyaW92LT5zdHJpZGUgKiBpZCkgJiAweGZmOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9idXMgKnZpcnRmbl9hZGRfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBidXNucikKK3sKKwlpbnQgcmM7CisJc3RydWN0IHBjaV9idXMgKmNoaWxkOworCisJaWYgKGJ1cy0+bnVtYmVyID09IGJ1c25yKQorCQlyZXR1cm4gYnVzOworCisJY2hpbGQgPSBwY2lfZmluZF9idXMocGNpX2RvbWFpbl9ucihidXMpLCBidXNucik7CisJaWYgKGNoaWxkKQorCQlyZXR1cm4gY2hpbGQ7CisKKwljaGlsZCA9IHBjaV9hZGRfbmV3X2J1cyhidXMsIE5VTEwsIGJ1c25yKTsKKwlpZiAoIWNoaWxkKQorCQlyZXR1cm4gTlVMTDsKKworCWNoaWxkLT5zdWJvcmRpbmF0ZSA9IGJ1c25yOworCWNoaWxkLT5kZXYucGFyZW50ID0gYnVzLT5icmlkZ2U7CisJcmMgPSBwY2lfYnVzX2FkZF9jaGlsZChjaGlsZCk7CisJaWYgKHJjKSB7CisJCXBjaV9yZW1vdmVfYnVzKGNoaWxkKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGNoaWxkOworfQorCitzdGF0aWMgdm9pZCB2aXJ0Zm5fcmVtb3ZlX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgYnVzbnIpCit7CisJc3RydWN0IHBjaV9idXMgKmNoaWxkOworCisJaWYgKGJ1cy0+bnVtYmVyID09IGJ1c25yKQorCQlyZXR1cm47CisKKwljaGlsZCA9IHBjaV9maW5kX2J1cyhwY2lfZG9tYWluX25yKGJ1cyksIGJ1c25yKTsKKwlCVUdfT04oIWNoaWxkKTsKKworCWlmIChsaXN0X2VtcHR5KCZjaGlsZC0+ZGV2aWNlcykpCisJCXBjaV9yZW1vdmVfYnVzKGNoaWxkKTsKK30KKworc3RhdGljIGludCB2aXJ0Zm5fYWRkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpZCwgaW50IHJlc2V0KQoreworCWludCBpOworCWludCByYzsKKwl1NjQgc2l6ZTsKKwljaGFyIGJ1ZltWSVJURk5fSURfTEVOXTsKKwlzdHJ1Y3QgcGNpX2RldiAqdmlydGZuOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBwY2lfc3Jpb3YgKmlvdiA9IGRldi0+c3Jpb3Y7CisKKwl2aXJ0Zm4gPSBhbGxvY19wY2lfZGV2KCk7CisJaWYgKCF2aXJ0Zm4pCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfbG9jaygmaW92LT5kZXYtPnNyaW92LT5sb2NrKTsKKwl2aXJ0Zm4tPmJ1cyA9IHZpcnRmbl9hZGRfYnVzKGRldi0+YnVzLCB2aXJ0Zm5fYnVzKGRldiwgaWQpKTsKKwlpZiAoIXZpcnRmbi0+YnVzKSB7CisJCWtmcmVlKHZpcnRmbik7CisJCW11dGV4X3VubG9jaygmaW92LT5kZXYtPnNyaW92LT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXZpcnRmbi0+ZGV2Zm4gPSB2aXJ0Zm5fZGV2Zm4oZGV2LCBpZCk7CisJdmlydGZuLT52ZW5kb3IgPSBkZXYtPnZlbmRvcjsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGlvdi0+cG9zICsgUENJX1NSSU9WX1ZGX0RJRCwgJnZpcnRmbi0+ZGV2aWNlKTsKKwlwY2lfc2V0dXBfZGV2aWNlKHZpcnRmbik7CisJdmlydGZuLT5kZXYucGFyZW50ID0gZGV2LT5kZXYucGFyZW50OworCisJZm9yIChpID0gMDsgaSA8IFBDSV9TUklPVl9OVU1fQkFSUzsgaSsrKSB7CisJCXJlcyA9IGRldi0+cmVzb3VyY2UgKyBQQ0lfSU9WX1JFU09VUkNFUyArIGk7CisJCWlmICghcmVzLT5wYXJlbnQpCisJCQljb250aW51ZTsKKwkJdmlydGZuLT5yZXNvdXJjZVtpXS5uYW1lID0gcGNpX25hbWUodmlydGZuKTsKKwkJdmlydGZuLT5yZXNvdXJjZVtpXS5mbGFncyA9IHJlcy0+ZmxhZ3M7CisJCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisJCWRvX2RpdihzaXplLCBpb3YtPnRvdGFsKTsKKwkJdmlydGZuLT5yZXNvdXJjZVtpXS5zdGFydCA9IHJlcy0+c3RhcnQgKyBzaXplICogaWQ7CisJCXZpcnRmbi0+cmVzb3VyY2VbaV0uZW5kID0gdmlydGZuLT5yZXNvdXJjZVtpXS5zdGFydCArIHNpemUgLSAxOworCQlyYyA9IHJlcXVlc3RfcmVzb3VyY2UocmVzLCAmdmlydGZuLT5yZXNvdXJjZVtpXSk7CisJCUJVR19PTihyYyk7CisJfQorCisJaWYgKHJlc2V0KQorCQlwY2lfZXhlY3V0ZV9yZXNldF9mdW5jdGlvbih2aXJ0Zm4pOworCisJcGNpX2RldmljZV9hZGQodmlydGZuLCB2aXJ0Zm4tPmJ1cyk7CisJbXV0ZXhfdW5sb2NrKCZpb3YtPmRldi0+c3Jpb3YtPmxvY2spOworCisJdmlydGZuLT5waHlzZm4gPSBwY2lfZGV2X2dldChkZXYpOworCXZpcnRmbi0+aXNfdmlydGZuID0gMTsKKworCXJjID0gcGNpX2J1c19hZGRfZGV2aWNlKHZpcnRmbik7CisJaWYgKHJjKQorCQlnb3RvIGZhaWxlZDE7CisJc3ByaW50ZihidWYsICJ2aXJ0Zm4ldSIsIGlkKTsKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZkZXYtPmRldi5rb2JqLCAmdmlydGZuLT5kZXYua29iaiwgYnVmKTsKKwlpZiAocmMpCisJCWdvdG8gZmFpbGVkMTsKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZ2aXJ0Zm4tPmRldi5rb2JqLCAmZGV2LT5kZXYua29iaiwgInBoeXNmbiIpOworCWlmIChyYykKKwkJZ290byBmYWlsZWQyOworCisJa29iamVjdF91ZXZlbnQoJnZpcnRmbi0+ZGV2LmtvYmosIEtPQkpfQ0hBTkdFKTsKKworCXJldHVybiAwOworCitmYWlsZWQyOgorCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmRldi5rb2JqLCBidWYpOworZmFpbGVkMToKKwlwY2lfZGV2X3B1dChkZXYpOworCW11dGV4X2xvY2soJmlvdi0+ZGV2LT5zcmlvdi0+bG9jayk7CisJcGNpX3JlbW92ZV9idXNfZGV2aWNlKHZpcnRmbik7CisJdmlydGZuX3JlbW92ZV9idXMoZGV2LT5idXMsIHZpcnRmbl9idXMoZGV2LCBpZCkpOworCW11dGV4X3VubG9jaygmaW92LT5kZXYtPnNyaW92LT5sb2NrKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgdmlydGZuX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWQsIGludCByZXNldCkKK3sKKwljaGFyIGJ1ZltWSVJURk5fSURfTEVOXTsKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCXN0cnVjdCBwY2lfZGV2ICp2aXJ0Zm47CisJc3RydWN0IHBjaV9zcmlvdiAqaW92ID0gZGV2LT5zcmlvdjsKKworCWJ1cyA9IHBjaV9maW5kX2J1cyhwY2lfZG9tYWluX25yKGRldi0+YnVzKSwgdmlydGZuX2J1cyhkZXYsIGlkKSk7CisJaWYgKCFidXMpCisJCXJldHVybjsKKworCXZpcnRmbiA9IHBjaV9nZXRfc2xvdChidXMsIHZpcnRmbl9kZXZmbihkZXYsIGlkKSk7CisJaWYgKCF2aXJ0Zm4pCisJCXJldHVybjsKKworCXBjaV9kZXZfcHV0KHZpcnRmbik7CisKKwlpZiAocmVzZXQpIHsKKwkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKCZ2aXJ0Zm4tPmRldik7CisJCXBjaV9leGVjdXRlX3Jlc2V0X2Z1bmN0aW9uKHZpcnRmbik7CisJfQorCisJc3ByaW50ZihidWYsICJ2aXJ0Zm4ldSIsIGlkKTsKKwlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5kZXYua29iaiwgYnVmKTsKKwlzeXNmc19yZW1vdmVfbGluaygmdmlydGZuLT5kZXYua29iaiwgInBoeXNmbiIpOworCisJbXV0ZXhfbG9jaygmaW92LT5kZXYtPnNyaW92LT5sb2NrKTsKKwlwY2lfcmVtb3ZlX2J1c19kZXZpY2UodmlydGZuKTsKKwl2aXJ0Zm5fcmVtb3ZlX2J1cyhkZXYtPmJ1cywgdmlydGZuX2J1cyhkZXYsIGlkKSk7CisJbXV0ZXhfdW5sb2NrKCZpb3YtPmRldi0+c3Jpb3YtPmxvY2spOworCisJcGNpX2Rldl9wdXQoZGV2KTsKK30KKworc3RhdGljIGludCBzcmlvdl9taWdyYXRpb24oc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1MTYgc3RhdHVzOworCXN0cnVjdCBwY2lfc3Jpb3YgKmlvdiA9IGRldi0+c3Jpb3Y7CisKKwlpZiAoIWlvdi0+bnJfdmlydGZuKQorCQlyZXR1cm4gMDsKKworCWlmICghKGlvdi0+Y2FwICYgUENJX1NSSU9WX0NBUF9WRk0pKQorCQlyZXR1cm4gMDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfU1RBVFVTLCAmc3RhdHVzKTsKKwlpZiAoIShzdGF0dXMgJiBQQ0lfU1JJT1ZfU1RBVFVTX1ZGTSkpCisJCXJldHVybiAwOworCisJc2NoZWR1bGVfd29yaygmaW92LT5tdGFzayk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgc3Jpb3ZfbWlncmF0aW9uX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWludCBpOworCXU4IHN0YXRlOworCXUxNiBzdGF0dXM7CisJc3RydWN0IHBjaV9zcmlvdiAqaW92ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwY2lfc3Jpb3YsIG10YXNrKTsKKworCWZvciAoaSA9IGlvdi0+aW5pdGlhbDsgaSA8IGlvdi0+bnJfdmlydGZuOyBpKyspIHsKKwkJc3RhdGUgPSByZWFkYihpb3YtPm1zdGF0ZSArIGkpOworCQlpZiAoc3RhdGUgPT0gUENJX1NSSU9WX1ZGTV9NSSkgeworCQkJd3JpdGViKFBDSV9TUklPVl9WRk1fQVYsIGlvdi0+bXN0YXRlICsgaSk7CisJCQlzdGF0ZSA9IHJlYWRiKGlvdi0+bXN0YXRlICsgaSk7CisJCQlpZiAoc3RhdGUgPT0gUENJX1NSSU9WX1ZGTV9BVikKKwkJCQl2aXJ0Zm5fYWRkKGlvdi0+c2VsZiwgaSwgMSk7CisJCX0gZWxzZSBpZiAoc3RhdGUgPT0gUENJX1NSSU9WX1ZGTV9NTykgeworCQkJdmlydGZuX3JlbW92ZShpb3YtPnNlbGYsIGksIDEpOworCQkJd3JpdGViKFBDSV9TUklPVl9WRk1fVUEsIGlvdi0+bXN0YXRlICsgaSk7CisJCQlzdGF0ZSA9IHJlYWRiKGlvdi0+bXN0YXRlICsgaSk7CisJCQlpZiAoc3RhdGUgPT0gUENJX1NSSU9WX1ZGTV9BVikKKwkJCQl2aXJ0Zm5fYWRkKGlvdi0+c2VsZiwgaSwgMCk7CisJCX0KKwl9CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChpb3YtPnNlbGYsIGlvdi0+cG9zICsgUENJX1NSSU9WX1NUQVRVUywgJnN0YXR1cyk7CisJc3RhdHVzICY9IH5QQ0lfU1JJT1ZfU1RBVFVTX1ZGTTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoaW92LT5zZWxmLCBpb3YtPnBvcyArIFBDSV9TUklPVl9TVEFUVVMsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbnQgc3Jpb3ZfZW5hYmxlX21pZ3JhdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnJfdmlydGZuKQoreworCWludCBiaXI7CisJdTMyIHRhYmxlOworCXJlc291cmNlX3NpemVfdCBwYTsKKwlzdHJ1Y3QgcGNpX3NyaW92ICppb3YgPSBkZXYtPnNyaW92OworCisJaWYgKG5yX3ZpcnRmbiA8PSBpb3YtPmluaXRpYWwpCisJCXJldHVybiAwOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfVkZNLCAmdGFibGUpOworCWJpciA9IFBDSV9TUklPVl9WRk1fQklSKHRhYmxlKTsKKwlpZiAoYmlyID4gUENJX1NURF9SRVNPVVJDRV9FTkQpCisJCXJldHVybiAtRUlPOworCisJdGFibGUgPSBQQ0lfU1JJT1ZfVkZNX09GRlNFVCh0YWJsZSk7CisJaWYgKHRhYmxlICsgbnJfdmlydGZuID4gcGNpX3Jlc291cmNlX2xlbihkZXYsIGJpcikpCisJCXJldHVybiAtRUlPOworCisJcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBiaXIpICsgdGFibGU7CisJaW92LT5tc3RhdGUgPSBpb3JlbWFwKHBhLCBucl92aXJ0Zm4pOworCWlmICghaW92LT5tc3RhdGUpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9XT1JLKCZpb3YtPm10YXNrLCBzcmlvdl9taWdyYXRpb25fdGFzayk7CisKKwlpb3YtPmN0cmwgfD0gUENJX1NSSU9WX0NUUkxfVkZNIHwgUENJX1NSSU9WX0NUUkxfSU5UUjsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBpb3YtPnBvcyArIFBDSV9TUklPVl9DVFJMLCBpb3YtPmN0cmwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNyaW92X2Rpc2FibGVfbWlncmF0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHBjaV9zcmlvdiAqaW92ID0gZGV2LT5zcmlvdjsKKworCWlvdi0+Y3RybCAmPSB+KFBDSV9TUklPVl9DVFJMX1ZGTSB8IFBDSV9TUklPVl9DVFJMX0lOVFIpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGlvdi0+cG9zICsgUENJX1NSSU9WX0NUUkwsIGlvdi0+Y3RybCk7CisKKwljYW5jZWxfd29ya19zeW5jKCZpb3YtPm10YXNrKTsKKwlpb3VubWFwKGlvdi0+bXN0YXRlKTsKK30KKworc3RhdGljIGludCBzcmlvdl9lbmFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG5yX3ZpcnRmbikKK3sKKwlpbnQgcmM7CisJaW50IGksIGo7CisJaW50IG5yZXM7CisJdTE2IG9mZnNldCwgc3RyaWRlLCBpbml0aWFsOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBwY2lfc3Jpb3YgKmlvdiA9IGRldi0+c3Jpb3Y7CisKKwlpZiAoIW5yX3ZpcnRmbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoaW92LT5ucl92aXJ0Zm4pCisJCXJldHVybiAtRUlOVkFMOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBpb3YtPnBvcyArIFBDSV9TUklPVl9JTklUSUFMX1ZGLCAmaW5pdGlhbCk7CisJaWYgKGluaXRpYWwgPiBpb3YtPnRvdGFsIHx8CisJICAgICghKGlvdi0+Y2FwICYgUENJX1NSSU9WX0NBUF9WRk0pICYmIChpbml0aWFsICE9IGlvdi0+dG90YWwpKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobnJfdmlydGZuIDwgMCB8fCBucl92aXJ0Zm4gPiBpb3YtPnRvdGFsIHx8CisJICAgICghKGlvdi0+Y2FwICYgUENJX1NSSU9WX0NBUF9WRk0pICYmIChucl92aXJ0Zm4gPiBpbml0aWFsKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfTlVNX1ZGLCBucl92aXJ0Zm4pOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfVkZfT0ZGU0VULCAmb2Zmc2V0KTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGlvdi0+cG9zICsgUENJX1NSSU9WX1ZGX1NUUklERSwgJnN0cmlkZSk7CisJaWYgKCFvZmZzZXQgfHwgKG5yX3ZpcnRmbiA+IDEgJiYgIXN0cmlkZSkpCisJCXJldHVybiAtRUlPOworCisJbnJlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IFBDSV9TUklPVl9OVU1fQkFSUzsgaSsrKSB7CisJCXJlcyA9IGRldi0+cmVzb3VyY2UgKyBQQ0lfSU9WX1JFU09VUkNFUyArIGk7CisJCWlmIChyZXMtPnBhcmVudCkKKwkJCW5yZXMrKzsKKwl9CisJaWYgKG5yZXMgIT0gaW92LT5ucmVzKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAibm90IGVub3VnaCBNTUlPIHJlc291cmNlcyBmb3IgU1ItSU9WXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW92LT5vZmZzZXQgPSBvZmZzZXQ7CisJaW92LT5zdHJpZGUgPSBzdHJpZGU7CisKKwlpZiAodmlydGZuX2J1cyhkZXYsIG5yX3ZpcnRmbiAtIDEpID4gZGV2LT5idXMtPnN1Ym9yZGluYXRlKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiU1ItSU9WOiBidXMgbnVtYmVyIG91dCBvZiByYW5nZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChpb3YtPmxpbmsgIT0gZGV2LT5kZXZmbikgeworCQlwZGV2ID0gcGNpX2dldF9zbG90KGRldi0+YnVzLCBpb3YtPmxpbmspOworCQlpZiAoIXBkZXYpCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQlwY2lfZGV2X3B1dChwZGV2KTsKKworCQlpZiAoIXBkZXYtPmlzX3BoeXNmbikKKwkJCXJldHVybiAtRU5PREVWOworCisJCXJjID0gc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+ZGV2LmtvYmosCisJCQkJCSZwZGV2LT5kZXYua29iaiwgImRlcF9saW5rIik7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwl9CisKKwlpb3YtPmN0cmwgfD0gUENJX1NSSU9WX0NUUkxfVkZFIHwgUENJX1NSSU9WX0NUUkxfTVNFOworCXBjaV9ibG9ja191c2VyX2NmZ19hY2Nlc3MoZGV2KTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBpb3YtPnBvcyArIFBDSV9TUklPVl9DVFJMLCBpb3YtPmN0cmwpOworCW1zbGVlcCgxMDApOworCXBjaV91bmJsb2NrX3VzZXJfY2ZnX2FjY2VzcyhkZXYpOworCisJaW92LT5pbml0aWFsID0gaW5pdGlhbDsKKwlpZiAobnJfdmlydGZuIDwgaW5pdGlhbCkKKwkJaW5pdGlhbCA9IG5yX3ZpcnRmbjsKKworCWZvciAoaSA9IDA7IGkgPCBpbml0aWFsOyBpKyspIHsKKwkJcmMgPSB2aXJ0Zm5fYWRkKGRldiwgaSwgMCk7CisJCWlmIChyYykKKwkJCWdvdG8gZmFpbGVkOworCX0KKworCWlmIChpb3YtPmNhcCAmIFBDSV9TUklPVl9DQVBfVkZNKSB7CisJCXJjID0gc3Jpb3ZfZW5hYmxlX21pZ3JhdGlvbihkZXYsIG5yX3ZpcnRmbik7CisJCWlmIChyYykKKwkJCWdvdG8gZmFpbGVkOworCX0KKworCWtvYmplY3RfdWV2ZW50KCZkZXYtPmRldi5rb2JqLCBLT0JKX0NIQU5HRSk7CisJaW92LT5ucl92aXJ0Zm4gPSBucl92aXJ0Zm47CisKKwlyZXR1cm4gMDsKKworZmFpbGVkOgorCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCXZpcnRmbl9yZW1vdmUoZGV2LCBqLCAwKTsKKworCWlvdi0+Y3RybCAmPSB+KFBDSV9TUklPVl9DVFJMX1ZGRSB8IFBDSV9TUklPVl9DVFJMX01TRSk7CisJcGNpX2Jsb2NrX3VzZXJfY2ZnX2FjY2VzcyhkZXYpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGlvdi0+cG9zICsgUENJX1NSSU9WX0NUUkwsIGlvdi0+Y3RybCk7CisJc3NsZWVwKDEpOworCXBjaV91bmJsb2NrX3VzZXJfY2ZnX2FjY2VzcyhkZXYpOworCisJaWYgKGlvdi0+bGluayAhPSBkZXYtPmRldmZuKQorCQlzeXNmc19yZW1vdmVfbGluaygmZGV2LT5kZXYua29iaiwgImRlcF9saW5rIik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHNyaW92X2Rpc2FibGUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcGNpX3NyaW92ICppb3YgPSBkZXYtPnNyaW92OworCisJaWYgKCFpb3YtPm5yX3ZpcnRmbikKKwkJcmV0dXJuOworCisJaWYgKGlvdi0+Y2FwICYgUENJX1NSSU9WX0NBUF9WRk0pCisJCXNyaW92X2Rpc2FibGVfbWlncmF0aW9uKGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW92LT5ucl92aXJ0Zm47IGkrKykKKwkJdmlydGZuX3JlbW92ZShkZXYsIGksIDApOworCisJaW92LT5jdHJsICY9IH4oUENJX1NSSU9WX0NUUkxfVkZFIHwgUENJX1NSSU9WX0NUUkxfTVNFKTsKKwlwY2lfYmxvY2tfdXNlcl9jZmdfYWNjZXNzKGRldik7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfQ1RSTCwgaW92LT5jdHJsKTsKKwlzc2xlZXAoMSk7CisJcGNpX3VuYmxvY2tfdXNlcl9jZmdfYWNjZXNzKGRldik7CisKKwlpZiAoaW92LT5saW5rICE9IGRldi0+ZGV2Zm4pCisJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmRldi5rb2JqLCAiZGVwX2xpbmsiKTsKKworCWlvdi0+bnJfdmlydGZuID0gMDsKK30KKworc3RhdGljIGludCBzcmlvdl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwb3MpCit7CisJaW50IGk7CisJaW50IHJjOworCWludCBucmVzOworCXUzMiBwZ3N6OworCXUxNiBjdHJsLCB0b3RhbCwgb2Zmc2V0LCBzdHJpZGU7CisJc3RydWN0IHBjaV9zcmlvdiAqaW92OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCisJaWYgKGRldi0+cGNpZV90eXBlICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQgJiYKKwkgICAgZGV2LT5wY2llX3R5cGUgIT0gUENJX0VYUF9UWVBFX0VORFBPSU5UKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX1NSSU9WX0NUUkwsICZjdHJsKTsKKwlpZiAoY3RybCAmIFBDSV9TUklPVl9DVFJMX1ZGRSkgeworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfU1JJT1ZfQ1RSTCwgMCk7CisJCXNzbGVlcCgxKTsKKwl9CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9TUklPVl9UT1RBTF9WRiwgJnRvdGFsKTsKKwlpZiAoIXRvdGFsKQorCQlyZXR1cm4gMDsKKworCWN0cmwgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGRldiwgJmRldi0+YnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKKwkJaWYgKHBkZXYtPmlzX3BoeXNmbikKKwkJCWdvdG8gZm91bmQ7CisKKwlwZGV2ID0gTlVMTDsKKwlpZiAocGNpX2FyaV9lbmFibGVkKGRldi0+YnVzKSkKKwkJY3RybCB8PSBQQ0lfU1JJT1ZfQ1RSTF9BUkk7CisKK2ZvdW5kOgorCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9TUklPVl9DVFJMLCBjdHJsKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfU1JJT1ZfTlVNX1ZGLCB0b3RhbCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfU1JJT1ZfVkZfT0ZGU0VULCAmb2Zmc2V0KTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9TUklPVl9WRl9TVFJJREUsICZzdHJpZGUpOworCWlmICghb2Zmc2V0IHx8ICh0b3RhbCA+IDEgJiYgIXN0cmlkZSkpCisJCXJldHVybiAtRUlPOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX1NSSU9WX1NVUF9QR1NJWkUsICZwZ3N6KTsKKwlpID0gUEFHRV9TSElGVCA+IDEyID8gUEFHRV9TSElGVCAtIDEyIDogMDsKKwlwZ3N6ICY9IH4oKDEgPDwgaSkgLSAxKTsKKwlpZiAoIXBnc3opCisJCXJldHVybiAtRUlPOworCisJcGdzeiAmPSB+KHBnc3ogLSAxKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX1NSSU9WX1NZU19QR1NJWkUsIHBnc3opOworCisJbnJlcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IFBDSV9TUklPVl9OVU1fQkFSUzsgaSsrKSB7CisJCXJlcyA9IGRldi0+cmVzb3VyY2UgKyBQQ0lfSU9WX1JFU09VUkNFUyArIGk7CisJCWkgKz0gX19wY2lfcmVhZF9iYXNlKGRldiwgcGNpX2Jhcl91bmtub3duLCByZXMsCisJCQkJICAgICBwb3MgKyBQQ0lfU1JJT1ZfQkFSICsgaSAqIDQpOworCQlpZiAoIXJlcy0+ZmxhZ3MpCisJCQljb250aW51ZTsKKwkJaWYgKHJlc291cmNlX3NpemUocmVzKSAmIChQQUdFX1NJWkUgLSAxKSkgeworCQkJcmMgPSAtRUlPOworCQkJZ290byBmYWlsZWQ7CisJCX0KKwkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgcmVzb3VyY2Vfc2l6ZShyZXMpICogdG90YWwgLSAxOworCQlucmVzKys7CisJfQorCisJaW92ID0ga3phbGxvYyhzaXplb2YoKmlvdiksIEdGUF9LRVJORUwpOworCWlmICghaW92KSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBmYWlsZWQ7CisJfQorCisJaW92LT5wb3MgPSBwb3M7CisJaW92LT5ucmVzID0gbnJlczsKKwlpb3YtPmN0cmwgPSBjdHJsOworCWlvdi0+dG90YWwgPSB0b3RhbDsKKwlpb3YtPm9mZnNldCA9IG9mZnNldDsKKwlpb3YtPnN0cmlkZSA9IHN0cmlkZTsKKwlpb3YtPnBnc3ogPSBwZ3N6OworCWlvdi0+c2VsZiA9IGRldjsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfU1JJT1ZfQ0FQLCAmaW92LT5jYXApOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcG9zICsgUENJX1NSSU9WX0ZVTkNfTElOSywgJmlvdi0+bGluayk7CisKKwlpZiAocGRldikKKwkJaW92LT5kZXYgPSBwY2lfZGV2X2dldChwZGV2KTsKKwllbHNlIHsKKwkJaW92LT5kZXYgPSBkZXY7CisJCW11dGV4X2luaXQoJmlvdi0+bG9jayk7CisJfQorCisJZGV2LT5zcmlvdiA9IGlvdjsKKwlkZXYtPmlzX3BoeXNmbiA9IDE7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkOgorCWZvciAoaSA9IDA7IGkgPCBQQ0lfU1JJT1ZfTlVNX0JBUlM7IGkrKykgeworCQlyZXMgPSBkZXYtPnJlc291cmNlICsgUENJX0lPVl9SRVNPVVJDRVMgKyBpOworCQlyZXMtPmZsYWdzID0gMDsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHNyaW92X3JlbGVhc2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlCVUdfT04oZGV2LT5zcmlvdi0+bnJfdmlydGZuKTsKKworCWlmIChkZXYgPT0gZGV2LT5zcmlvdi0+ZGV2KQorCQltdXRleF9kZXN0cm95KCZkZXYtPnNyaW92LT5sb2NrKTsKKwllbHNlCisJCXBjaV9kZXZfcHV0KGRldi0+c3Jpb3YtPmRldik7CisKKwlrZnJlZShkZXYtPnNyaW92KTsKKwlkZXYtPnNyaW92ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc3Jpb3ZfcmVzdG9yZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBpOworCXUxNiBjdHJsOworCXN0cnVjdCBwY2lfc3Jpb3YgKmlvdiA9IGRldi0+c3Jpb3Y7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGlvdi0+cG9zICsgUENJX1NSSU9WX0NUUkwsICZjdHJsKTsKKwlpZiAoY3RybCAmIFBDSV9TUklPVl9DVFJMX1ZGRSkKKwkJcmV0dXJuOworCisJZm9yIChpID0gUENJX0lPVl9SRVNPVVJDRVM7IGkgPD0gUENJX0lPVl9SRVNPVVJDRV9FTkQ7IGkrKykKKwkJcGNpX3VwZGF0ZV9yZXNvdXJjZShkZXYsIGkpOworCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIGlvdi0+cG9zICsgUENJX1NSSU9WX1NZU19QR1NJWkUsIGlvdi0+cGdzeik7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfTlVNX1ZGLCBpb3YtPm5yX3ZpcnRmbik7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgaW92LT5wb3MgKyBQQ0lfU1JJT1ZfQ1RSTCwgaW92LT5jdHJsKTsKKwlpZiAoaW92LT5jdHJsICYgUENJX1NSSU9WX0NUUkxfVkZFKQorCQltc2xlZXAoMTAwKTsKK30KKworLyoqCisgKiBwY2lfaW92X2luaXQgLSBpbml0aWFsaXplIHRoZSBJT1YgY2FwYWJpbGl0eQorICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgb24gZmFpbHVyZS4KKyAqLworaW50IHBjaV9pb3ZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBwb3M7CisKKwlpZiAoIWRldi0+aXNfcGNpZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwb3MgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShkZXYsIFBDSV9FWFRfQ0FQX0lEX1NSSU9WKTsKKwlpZiAocG9zKQorCQlyZXR1cm4gc3Jpb3ZfaW5pdChkZXYsIHBvcyk7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoqCisgKiBwY2lfaW92X3JlbGVhc2UgLSByZWxlYXNlIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBJT1YgY2FwYWJpbGl0eQorICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqLwordm9pZCBwY2lfaW92X3JlbGVhc2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoZGV2LT5pc19waHlzZm4pCisJCXNyaW92X3JlbGVhc2UoZGV2KTsKK30KKworLyoqCisgKiBwY2lfaW92X3Jlc291cmNlX2JhciAtIGdldCBwb3NpdGlvbiBvZiB0aGUgU1ItSU9WIEJBUgorICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqIEByZXNubzogdGhlIHJlc291cmNlIG51bWJlcgorICogQHR5cGU6IHRoZSBCQVIgdHlwZSB0byBiZSBmaWxsZWQgaW4KKyAqCisgKiBSZXR1cm5zIHBvc2l0aW9uIG9mIHRoZSBCQVIgZW5jYXBzdWxhdGVkIGluIHRoZSBTUi1JT1YgY2FwYWJpbGl0eS4KKyAqLworaW50IHBjaV9pb3ZfcmVzb3VyY2VfYmFyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubywKKwkJCSBlbnVtIHBjaV9iYXJfdHlwZSAqdHlwZSkKK3sKKwlpZiAocmVzbm8gPCBQQ0lfSU9WX1JFU09VUkNFUyB8fCByZXNubyA+IFBDSV9JT1ZfUkVTT1VSQ0VfRU5EKQorCQlyZXR1cm4gMDsKKworCUJVR19PTighZGV2LT5pc19waHlzZm4pOworCisJKnR5cGUgPSBwY2lfYmFyX3Vua25vd247CisKKwlyZXR1cm4gZGV2LT5zcmlvdi0+cG9zICsgUENJX1NSSU9WX0JBUiArCisJCTQgKiAocmVzbm8gLSBQQ0lfSU9WX1JFU09VUkNFUyk7Cit9CisKKy8qKgorICogcGNpX3Jlc3RvcmVfaW92X3N0YXRlIC0gcmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIElPViBjYXBhYmlsaXR5CisgKiBAZGV2OiB0aGUgUENJIGRldmljZQorICovCit2b2lkIHBjaV9yZXN0b3JlX2lvdl9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWlmIChkZXYtPmlzX3BoeXNmbikKKwkJc3Jpb3ZfcmVzdG9yZV9zdGF0ZShkZXYpOworfQorCisvKioKKyAqIHBjaV9pb3ZfYnVzX3JhbmdlIC0gZmluZCBidXMgcmFuZ2UgdXNlZCBieSBWaXJ0dWFsIEZ1bmN0aW9uCisgKiBAYnVzOiB0aGUgUENJIGJ1cworICoKKyAqIFJldHVybnMgbWF4IG51bWJlciBvZiBidXNlcyAoZXhjbHVkZSBjdXJyZW50IG9uZSkgdXNlZCBieSBWaXJ0dWFsCisgKiBGdW5jdGlvbnMuCisgKi8KK2ludCBwY2lfaW92X2J1c19yYW5nZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCWludCBtYXggPSAwOworCXU4IGJ1c25yOworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJaWYgKCFkZXYtPmlzX3BoeXNmbikKKwkJCWNvbnRpbnVlOworCQlidXNuciA9IHZpcnRmbl9idXMoZGV2LCBkZXYtPnNyaW92LT50b3RhbCAtIDEpOworCQlpZiAoYnVzbnIgPiBtYXgpCisJCQltYXggPSBidXNucjsKKwl9CisKKwlyZXR1cm4gbWF4ID8gbWF4IC0gYnVzLT5udW1iZXIgOiAwOworfQorCisvKioKKyAqIHBjaV9lbmFibGVfc3Jpb3YgLSBlbmFibGUgdGhlIFNSLUlPViBjYXBhYmlsaXR5CisgKiBAZGV2OiB0aGUgUENJIGRldmljZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvciBuZWdhdGl2ZSBvbiBmYWlsdXJlLgorICovCitpbnQgcGNpX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnJfdmlydGZuKQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwlpZiAoIWRldi0+aXNfcGh5c2ZuKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBzcmlvdl9lbmFibGUoZGV2LCBucl92aXJ0Zm4pOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2VuYWJsZV9zcmlvdik7CisKKy8qKgorICogcGNpX2Rpc2FibGVfc3Jpb3YgLSBkaXNhYmxlIHRoZSBTUi1JT1YgY2FwYWJpbGl0eQorICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqLwordm9pZCBwY2lfZGlzYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCW1pZ2h0X3NsZWVwKCk7CisKKwlpZiAoIWRldi0+aXNfcGh5c2ZuKQorCQlyZXR1cm47CisKKwlzcmlvdl9kaXNhYmxlKGRldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZGlzYWJsZV9zcmlvdik7CisKKy8qKgorICogcGNpX3NyaW92X21pZ3JhdGlvbiAtIG5vdGlmeSBTUi1JT1YgY29yZSBvZiBWaXJ0dWFsIEZ1bmN0aW9uIE1pZ3JhdGlvbgorICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqCisgKiBSZXR1cm5zIElSUV9IQU5ETEVEIGlmIHRoZSBJUlEgaXMgaGFuZGxlZCwgb3IgSVJRX05PTkUgaWYgbm90LgorICoKKyAqIFBoeXNpY2FsIEZ1bmN0aW9uIGRyaXZlciBpcyByZXNwb25zaWJsZSB0byByZWdpc3RlciBJUlEgaGFuZGxlciB1c2luZworICogVkYgTWlncmF0aW9uIEludGVycnVwdCBNZXNzYWdlIE51bWJlciwgYW5kIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHRoZQorICogaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBieSB0aGUgaGFyZHdhcmUuCisgKi8KK2lycXJldHVybl90IHBjaV9zcmlvdl9taWdyYXRpb24oc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoIWRldi0+aXNfcGh5c2ZuKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlyZXR1cm4gc3Jpb3ZfbWlncmF0aW9uKGRldikgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX3NyaW92X21pZ3JhdGlvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5jCmluZGV4IGJhYmEyZWIuLjZmMmU2MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL21zaS5jCisrKyBiL2RyaXZlcnMvcGNpL21zaS5jCkBAIC0yNyw0OCArMjcsNTMgQEAKIAogLyogQXJjaCBob29rcyAqLwogCi1pbnQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKQotYXJjaF9tc2lfY2hlY2tfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKKyNpZm5kZWYgYXJjaF9tc2lfY2hlY2tfZGV2aWNlCitpbnQgYXJjaF9tc2lfY2hlY2tfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKIHsKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCi1pbnQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKQotYXJjaF9zZXR1cF9tc2lfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqZW50cnkpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX2F0dHJpYnV0ZV9fICgod2VhaykpCi1hcmNoX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudmVjLCBpbnQgdHlwZSkKKyNpZm5kZWYgYXJjaF9zZXR1cF9tc2lfaXJxcworaW50IGFyY2hfc2V0dXBfbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IG52ZWMsIGludCB0eXBlKQogewogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CiAJaW50IHJldDsKIAorCS8qCisJICogSWYgYW4gYXJjaGl0ZWN0dXJlIHdhbnRzIHRvIHN1cHBvcnQgbXVsdGlwbGUgTVNJLCBpdCBuZWVkcyB0bworCSAqIG92ZXJyaWRlIGFyY2hfc2V0dXBfbXNpX2lycXMoKQorCSAqLworCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJICYmIG52ZWMgPiAxKQorCQlyZXR1cm4gMTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7CiAJCXJldCA9IGFyY2hfc2V0dXBfbXNpX2lycShkZXYsIGVudHJ5KTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OworCQlpZiAocmV0ID4gMCkKKwkJCXJldHVybiAtRU5PU1BDOwogCX0KIAogCXJldHVybiAwOwogfQorI2VuZGlmCiAKLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKSBhcmNoX3RlYXJkb3duX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlyZXR1cm47Ci19Ci0KLXZvaWQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKQotYXJjaF90ZWFyZG93bl9tc2lfaXJxcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorI2lmbmRlZiBhcmNoX3RlYXJkb3duX21zaV9pcnFzCit2b2lkIGFyY2hfdGVhcmRvd25fbXNpX2lycXMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGVudHJ5LT5pcnEgIT0gMCkKLQkJCWFyY2hfdGVhcmRvd25fbXNpX2lycShlbnRyeS0+aXJxKTsKKwkJaW50IGksIG52ZWM7CisJCWlmIChlbnRyeS0+aXJxID09IDApCisJCQljb250aW51ZTsKKwkJbnZlYyA9IDEgPDwgZW50cnktPm1zaV9hdHRyaWIubXVsdGlwbGU7CisJCWZvciAoaSA9IDA7IGkgPCBudmVjOyBpKyspCisJCQlhcmNoX3RlYXJkb3duX21zaV9pcnEoZW50cnktPmlycSArIGkpOwogCX0KIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX21zaV9zZXRfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwb3MsIGludCBlbmFibGUpCiB7CkBAIC0xMTEsMjcgKzExNiwxNCBAQAogCXJldHVybiAoMSA8PCAoMSA8PCB4KSkgLSAxOwogfQogCi1zdGF0aWMgdm9pZCBtc2l4X2ZsdXNoX3dyaXRlcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gdTMyIG1zaV9jYXBhYmxlX21hc2sodTE2IGNvbnRyb2wpCiB7Ci0Jc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKwlyZXR1cm4gbXNpX21hc2soKGNvbnRyb2wgPj4gMSkgJiA3KTsKK30KIAotCWVudHJ5ID0gZ2V0X2lycV9kZXNjX21zaShkZXNjKTsKLQlCVUdfT04oIWVudHJ5IHx8ICFlbnRyeS0+ZGV2KTsKLQlzd2l0Y2ggKGVudHJ5LT5tc2lfYXR0cmliLnR5cGUpIHsKLQljYXNlIFBDSV9DQVBfSURfTVNJOgotCQkvKiBub3RoaW5nIHRvIGRvICovCi0JCWJyZWFrOwotCWNhc2UgUENJX0NBUF9JRF9NU0lYOgotCXsKLQkJaW50IG9mZnNldCA9IGVudHJ5LT5tc2lfYXR0cmliLmVudHJ5X25yICogUENJX01TSVhfRU5UUllfU0laRSArCi0JCQlQQ0lfTVNJWF9FTlRSWV9WRUNUT1JfQ1RSTF9PRkZTRVQ7Ci0JCXJlYWRsKGVudHJ5LT5tYXNrX2Jhc2UgKyBvZmZzZXQpOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCWJyZWFrOwotCX0KK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyB1MzIgbXNpX2VuYWJsZWRfbWFzayh1MTYgY29udHJvbCkKK3sKKwlyZXR1cm4gbXNpX21hc2soKGNvbnRyb2wgPj4gNCkgJiA3KTsKIH0KIAogLyoKQEAgLTE0Myw0OSArMTM1LDcxIEBACiAgKiBSZXR1cm5zIDEgaWYgaXQgc3VjY2VlZGVkIGluIG1hc2tpbmcgdGhlIGludGVycnVwdCBhbmQgMCBpZiB0aGUgZGV2aWNlCiAgKiBkb2Vzbid0IHN1cHBvcnQgTVNJIG1hc2tpbmcuCiAgKi8KLXN0YXRpYyBpbnQgbXNpX3NldF9tYXNrX2JpdHMoc3RydWN0IGlycV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCitzdGF0aWMgdm9pZCBtc2lfbWFza19pcnEoc3RydWN0IG1zaV9kZXNjICpkZXNjLCB1MzIgbWFzaywgdTMyIGZsYWcpCiB7Ci0Jc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKwl1MzIgbWFza19iaXRzID0gZGVzYy0+bWFza2VkOwogCi0JZW50cnkgPSBnZXRfaXJxX2Rlc2NfbXNpKGRlc2MpOwotCUJVR19PTighZW50cnkgfHwgIWVudHJ5LT5kZXYpOwotCXN3aXRjaCAoZW50cnktPm1zaV9hdHRyaWIudHlwZSkgewotCWNhc2UgUENJX0NBUF9JRF9NU0k6Ci0JCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5tYXNrYml0KSB7Ci0JCQlpbnQgcG9zOwotCQkJdTMyIG1hc2tfYml0czsKKwlpZiAoIWRlc2MtPm1zaV9hdHRyaWIubWFza2JpdCkKKwkJcmV0dXJuOwogCi0JCQlwb3MgPSAobG9uZyllbnRyeS0+bWFza19iYXNlOwotCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGVudHJ5LT5kZXYsIHBvcywgJm1hc2tfYml0cyk7Ci0JCQltYXNrX2JpdHMgJj0gfihtYXNrKTsKLQkJCW1hc2tfYml0cyB8PSBmbGFnICYgbWFzazsKLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZW50cnktPmRldiwgcG9zLCBtYXNrX2JpdHMpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBQQ0lfQ0FQX0lEX01TSVg6Ci0JewotCQlpbnQgb2Zmc2V0ID0gZW50cnktPm1zaV9hdHRyaWIuZW50cnlfbnIgKiBQQ0lfTVNJWF9FTlRSWV9TSVpFICsKLQkJCVBDSV9NU0lYX0VOVFJZX1ZFQ1RPUl9DVFJMX09GRlNFVDsKLQkJd3JpdGVsKGZsYWcsIGVudHJ5LT5tYXNrX2Jhc2UgKyBvZmZzZXQpOwotCQlyZWFkbChlbnRyeS0+bWFza19iYXNlICsgb2Zmc2V0KTsKLQkJYnJlYWs7CisJbWFza19iaXRzICY9IH5tYXNrOworCW1hc2tfYml0cyB8PSBmbGFnOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGVzYy0+ZGV2LCBkZXNjLT5tYXNrX3BvcywgbWFza19iaXRzKTsKKwlkZXNjLT5tYXNrZWQgPSBtYXNrX2JpdHM7Cit9CisKKy8qCisgKiBUaGlzIGludGVybmFsIGZ1bmN0aW9uIGRvZXMgbm90IGZsdXNoIFBDSSB3cml0ZXMgdG8gdGhlIGRldmljZS4KKyAqIEFsbCB1c2VycyBtdXN0IGVuc3VyZSB0aGF0IHRoZXkgcmVhZCBmcm9tIHRoZSBkZXZpY2UgYmVmb3JlIGVpdGhlcgorICogYXNzdW1pbmcgdGhhdCB0aGUgZGV2aWNlIHN0YXRlIGlzIHVwIHRvIGRhdGUsIG9yIHJldHVybmluZyBvdXQgb2YgdGhpcworICogZmlsZS4gIFRoaXMgc2F2ZXMgYSBmZXcgbWlsbGlzZWNvbmRzIHdoZW4gaW5pdGlhbGlzaW5nIGRldmljZXMgd2l0aCBsb3RzCisgKiBvZiBNU0ktWCBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgdm9pZCBtc2l4X21hc2tfaXJxKHN0cnVjdCBtc2lfZGVzYyAqZGVzYywgdTMyIGZsYWcpCit7CisJdTMyIG1hc2tfYml0cyA9IGRlc2MtPm1hc2tlZDsKKwl1bnNpZ25lZCBvZmZzZXQgPSBkZXNjLT5tc2lfYXR0cmliLmVudHJ5X25yICogUENJX01TSVhfRU5UUllfU0laRSArCisJCQkJCVBDSV9NU0lYX0VOVFJZX1ZFQ1RPUl9DVFJMX09GRlNFVDsKKwltYXNrX2JpdHMgJj0gfjE7CisJbWFza19iaXRzIHw9IGZsYWc7CisJd3JpdGVsKG1hc2tfYml0cywgZGVzYy0+bWFza19iYXNlICsgb2Zmc2V0KTsKKwlkZXNjLT5tYXNrZWQgPSBtYXNrX2JpdHM7Cit9CisKK3N0YXRpYyB2b2lkIG1zaV9zZXRfbWFza19iaXQodW5zaWduZWQgaXJxLCB1MzIgZmxhZykKK3sKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX21zaShpcnEpOworCisJaWYgKGRlc2MtPm1zaV9hdHRyaWIuaXNfbXNpeCkgeworCQltc2l4X21hc2tfaXJxKGRlc2MsIGZsYWcpOworCQlyZWFkbChkZXNjLT5tYXNrX2Jhc2UpOwkJLyogRmx1c2ggd3JpdGUgdG8gZGV2aWNlICovCisJfSBlbHNlIHsKKwkJdW5zaWduZWQgb2Zmc2V0ID0gaXJxIC0gZGVzYy0+ZGV2LT5pcnE7CisJCW1zaV9tYXNrX2lycShkZXNjLCAxIDw8IG9mZnNldCwgZmxhZyA8PCBvZmZzZXQpOwogCX0KLQlkZWZhdWx0OgotCQlCVUcoKTsKLQkJYnJlYWs7Ci0JfQotCWVudHJ5LT5tc2lfYXR0cmliLm1hc2tlZCA9ICEhZmxhZzsKLQlyZXR1cm4gMTsKK30KKwordm9pZCBtYXNrX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwltc2lfc2V0X21hc2tfYml0KGlycSwgMSk7Cit9CisKK3ZvaWQgdW5tYXNrX21zaV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwltc2lfc2V0X21hc2tfYml0KGlycSwgMCk7CiB9CiAKIHZvaWQgcmVhZF9tc2lfbXNnX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQogewogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnkgPSBnZXRfaXJxX2Rlc2NfbXNpKGRlc2MpOwotCXN3aXRjaChlbnRyeS0+bXNpX2F0dHJpYi50eXBlKSB7Ci0JY2FzZSBQQ0lfQ0FQX0lEX01TSToKLQl7CisJaWYgKGVudHJ5LT5tc2lfYXR0cmliLmlzX21zaXgpIHsKKwkJdm9pZCBfX2lvbWVtICpiYXNlID0gZW50cnktPm1hc2tfYmFzZSArCisJCQllbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9uciAqIFBDSV9NU0lYX0VOVFJZX1NJWkU7CisKKwkJbXNnLT5hZGRyZXNzX2xvID0gcmVhZGwoYmFzZSArIFBDSV9NU0lYX0VOVFJZX0xPV0VSX0FERFJfT0ZGU0VUKTsKKwkJbXNnLT5hZGRyZXNzX2hpID0gcmVhZGwoYmFzZSArIFBDSV9NU0lYX0VOVFJZX1VQUEVSX0FERFJfT0ZGU0VUKTsKKwkJbXNnLT5kYXRhID0gcmVhZGwoYmFzZSArIFBDSV9NU0lYX0VOVFJZX0RBVEFfT0ZGU0VUKTsKKwl9IGVsc2UgewogCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gZW50cnktPmRldjsKIAkJaW50IHBvcyA9IGVudHJ5LT5tc2lfYXR0cmliLnBvczsKIAkJdTE2IGRhdGE7CkBAIC0yMDEsMjEgKzIxNSw2IEBACiAJCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1zaV9kYXRhX3JlZyhwb3MsIDApLCAmZGF0YSk7CiAJCX0KIAkJbXNnLT5kYXRhID0gZGF0YTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgUENJX0NBUF9JRF9NU0lYOgotCXsKLQkJdm9pZCBfX2lvbWVtICpiYXNlOwotCQliYXNlID0gZW50cnktPm1hc2tfYmFzZSArCi0JCQllbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9uciAqIFBDSV9NU0lYX0VOVFJZX1NJWkU7Ci0KLQkJbXNnLT5hZGRyZXNzX2xvID0gcmVhZGwoYmFzZSArIFBDSV9NU0lYX0VOVFJZX0xPV0VSX0FERFJfT0ZGU0VUKTsKLQkJbXNnLT5hZGRyZXNzX2hpID0gcmVhZGwoYmFzZSArIFBDSV9NU0lYX0VOVFJZX1VQUEVSX0FERFJfT0ZGU0VUKTsKLQkJbXNnLT5kYXRhID0gcmVhZGwoYmFzZSArIFBDSV9NU0lYX0VOVFJZX0RBVEFfT0ZGU0VUKTsKLSAJCWJyZWFrOwotIAl9Ci0gCWRlZmF1bHQ6Ci0JCUJVRygpOwogCX0KIH0KIApAQCAtMjI5LDExICsyMjgsMjUgQEAKIHZvaWQgd3JpdGVfbXNpX21zZ19kZXNjKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IG1zaV9tc2cgKm1zZykKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5ID0gZ2V0X2lycV9kZXNjX21zaShkZXNjKTsKLQlzd2l0Y2ggKGVudHJ5LT5tc2lfYXR0cmliLnR5cGUpIHsKLQljYXNlIFBDSV9DQVBfSURfTVNJOgotCXsKKwlpZiAoZW50cnktPm1zaV9hdHRyaWIuaXNfbXNpeCkgeworCQl2b2lkIF9faW9tZW0gKmJhc2U7CisJCWJhc2UgPSBlbnRyeS0+bWFza19iYXNlICsKKwkJCWVudHJ5LT5tc2lfYXR0cmliLmVudHJ5X25yICogUENJX01TSVhfRU5UUllfU0laRTsKKworCQl3cml0ZWwobXNnLT5hZGRyZXNzX2xvLAorCQkJYmFzZSArIFBDSV9NU0lYX0VOVFJZX0xPV0VSX0FERFJfT0ZGU0VUKTsKKwkJd3JpdGVsKG1zZy0+YWRkcmVzc19oaSwKKwkJCWJhc2UgKyBQQ0lfTVNJWF9FTlRSWV9VUFBFUl9BRERSX09GRlNFVCk7CisJCXdyaXRlbChtc2ctPmRhdGEsIGJhc2UgKyBQQ0lfTVNJWF9FTlRSWV9EQVRBX09GRlNFVCk7CisJfSBlbHNlIHsKIAkJc3RydWN0IHBjaV9kZXYgKmRldiA9IGVudHJ5LT5kZXY7CiAJCWludCBwb3MgPSBlbnRyeS0+bXNpX2F0dHJpYi5wb3M7CisJCXUxNiBtc2djdGw7CisKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBtc2lfY29udHJvbF9yZWcocG9zKSwgJm1zZ2N0bCk7CisJCW1zZ2N0bCAmPSB+UENJX01TSV9GTEFHU19RU0laRTsKKwkJbXNnY3RsIHw9IGVudHJ5LT5tc2lfYXR0cmliLm11bHRpcGxlIDw8IDQ7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCBtc2djdGwpOwogCiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBtc2lfbG93ZXJfYWRkcmVzc19yZWcocG9zKSwKIAkJCQkJbXNnLT5hZGRyZXNzX2xvKTsKQEAgLTI0NiwyMyArMjU5LDYgQEAKIAkJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIG1zaV9kYXRhX3JlZyhwb3MsIDApLAogCQkJCQkJbXNnLT5kYXRhKTsKIAkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBQQ0lfQ0FQX0lEX01TSVg6Ci0JewotCQl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JCWJhc2UgPSBlbnRyeS0+bWFza19iYXNlICsKLQkJCWVudHJ5LT5tc2lfYXR0cmliLmVudHJ5X25yICogUENJX01TSVhfRU5UUllfU0laRTsKLQotCQl3cml0ZWwobXNnLT5hZGRyZXNzX2xvLAotCQkJYmFzZSArIFBDSV9NU0lYX0VOVFJZX0xPV0VSX0FERFJfT0ZGU0VUKTsKLQkJd3JpdGVsKG1zZy0+YWRkcmVzc19oaSwKLQkJCWJhc2UgKyBQQ0lfTVNJWF9FTlRSWV9VUFBFUl9BRERSX09GRlNFVCk7Ci0JCXdyaXRlbChtc2ctPmRhdGEsIGJhc2UgKyBQQ0lfTVNJWF9FTlRSWV9EQVRBX09GRlNFVCk7Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OgotCQlCVUcoKTsKIAl9CiAJZW50cnktPm1zZyA9ICptc2c7CiB9CkBAIC0yNzQsMzcgKzI3MCwxOCBAQAogCXdyaXRlX21zaV9tc2dfZGVzYyhkZXNjLCBtc2cpOwogfQogCi12b2lkIG1hc2tfbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0KLQltc2lfc2V0X21hc2tfYml0cyhkZXNjLCAxLCAxKTsKLQltc2l4X2ZsdXNoX3dyaXRlcyhkZXNjKTsKLX0KLQotdm9pZCB1bm1hc2tfbXNpX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0KLQltc2lfc2V0X21hc2tfYml0cyhkZXNjLCAxLCAwKTsKLQltc2l4X2ZsdXNoX3dyaXRlcyhkZXNjKTsKLX0KLQogc3RhdGljIGludCBtc2lfZnJlZV9pcnFzKHN0cnVjdCBwY2lfZGV2KiBkZXYpOwogCi1zdGF0aWMgc3RydWN0IG1zaV9kZXNjKiBhbGxvY19tc2lfZW50cnkodm9pZCkKK3N0YXRpYyBzdHJ1Y3QgbXNpX2Rlc2MgKmFsbG9jX21zaV9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7Ci0KLQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2lfZGVzYyksIEdGUF9LRVJORUwpOwotCWlmICghZW50cnkpCisJc3RydWN0IG1zaV9kZXNjICpkZXNjID0ga3phbGxvYyhzaXplb2YoKmRlc2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlc2MpCiAJCXJldHVybiBOVUxMOwogCi0JSU5JVF9MSVNUX0hFQUQoJmVudHJ5LT5saXN0KTsKLQllbnRyeS0+aXJxID0gMDsKLQllbnRyeS0+ZGV2ID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmZGVzYy0+bGlzdCk7CisJZGVzYy0+ZGV2ID0gZGV2OwogCi0JcmV0dXJuIGVudHJ5OworCXJldHVybiBkZXNjOwogfQogCiBzdGF0aWMgdm9pZCBwY2lfaW50eF9mb3JfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBlbmFibGUpCkBAIC0zMjgsMTUgKzMwNSwxMSBAQAogCXBjaV9pbnR4X2Zvcl9tc2koZGV2LCAwKTsKIAltc2lfc2V0X2VuYWJsZShkZXYsIDApOwogCXdyaXRlX21zaV9tc2coZGV2LT5pcnEsICZlbnRyeS0+bXNnKTsKLQlpZiAoZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCkgewotCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhkZXYtPmlycSk7Ci0JCW1zaV9zZXRfbWFza19iaXRzKGRlc2MsIGVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXRzX21hc2ssCi0JCQkJICBlbnRyeS0+bXNpX2F0dHJpYi5tYXNrZWQpOwotCX0KIAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX01TSV9GTEFHUywgJmNvbnRyb2wpOworCW1zaV9tYXNrX2lycShlbnRyeSwgbXNpX2NhcGFibGVfbWFzayhjb250cm9sKSwgZW50cnktPm1hc2tlZCk7CiAJY29udHJvbCAmPSB+UENJX01TSV9GTEFHU19RU0laRTsKLQljb250cm9sIHw9IFBDSV9NU0lfRkxBR1NfRU5BQkxFOworCWNvbnRyb2wgfD0gKGVudHJ5LT5tc2lfYXR0cmliLm11bHRpcGxlIDw8IDQpIHwgUENJX01TSV9GTEFHU19FTkFCTEU7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX01TSV9GTEFHUywgY29udHJvbCk7CiB9CiAKQEAgLTM1NCw5ICszMjcsOCBAQAogCW1zaXhfc2V0X2VuYWJsZShkZXYsIDApOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoZW50cnktPmlycSk7CiAJCXdyaXRlX21zaV9tc2coZW50cnktPmlycSwgJmVudHJ5LT5tc2cpOwotCQltc2lfc2V0X21hc2tfYml0cyhkZXNjLCAxLCBlbnRyeS0+bXNpX2F0dHJpYi5tYXNrZWQpOworCQltc2l4X21hc2tfaXJxKGVudHJ5LCBlbnRyeS0+bWFza2VkKTsKIAl9CiAKIAlCVUdfT04obGlzdF9lbXB0eSgmZGV2LT5tc2lfbGlzdCkpOwpAQCAtMzc4LDUyICszNTAsNDggQEAKIC8qKgogICogbXNpX2NhcGFiaWxpdHlfaW5pdCAtIGNvbmZpZ3VyZSBkZXZpY2UncyBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKICAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHBjaV9kZXYgZGF0YSBzdHJ1Y3R1cmUgb2YgTVNJIGRldmljZSBmdW5jdGlvbgorICogQG52ZWM6IG51bWJlciBvZiBpbnRlcnJ1cHRzIHRvIGFsbG9jYXRlCiAgKgotICogU2V0dXAgdGhlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSBvZiBkZXZpY2UgZnVuY3Rpb24gd2l0aCBhIHNpbmdsZQotICogTVNJIGlycSwgcmVnYXJkbGVzcyBvZiBkZXZpY2UgZnVuY3Rpb24gaXMgY2FwYWJsZSBvZiBoYW5kbGluZwotICogbXVsdGlwbGUgbWVzc2FnZXMuIEEgcmV0dXJuIG9mIHplcm8gaW5kaWNhdGVzIHRoZSBzdWNjZXNzZnVsIHNldHVwCi0gKiBvZiBhbiBlbnRyeSB6ZXJvIHdpdGggdGhlIG5ldyBNU0kgaXJxIG9yIG5vbi16ZXJvIGZvciBvdGhlcndpc2UuCi0gKiovCi1zdGF0aWMgaW50IG1zaV9jYXBhYmlsaXR5X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKKyAqIFNldHVwIHRoZSBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgb2YgdGhlIGRldmljZSB3aXRoIHRoZSByZXF1ZXN0ZWQKKyAqIG51bWJlciBvZiBpbnRlcnJ1cHRzLiAgQSByZXR1cm4gdmFsdWUgb2YgemVybyBpbmRpY2F0ZXMgdGhlIHN1Y2Nlc3NmdWwKKyAqIHNldHVwIG9mIGFuIGVudHJ5IHdpdGggdGhlIG5ldyBNU0kgaXJxLiAgQSBuZWdhdGl2ZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzCisgKiBhbiBlcnJvciwgYW5kIGEgcG9zaXRpdmUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGludGVycnVwdHMKKyAqIHdoaWNoIGNvdWxkIGhhdmUgYmVlbiBhbGxvY2F0ZWQuCisgKi8KK3N0YXRpYyBpbnQgbXNpX2NhcGFiaWxpdHlfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnZlYykKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwogCWludCBwb3MsIHJldDsKIAl1MTYgY29udHJvbDsKKwl1bnNpZ25lZCBtYXNrOwogCiAJbXNpX3NldF9lbmFibGUoZGV2LCAwKTsJLyogRW5zdXJlIG1zaSBpcyBkaXNhYmxlZCBhcyBJIHNldCBpdCB1cCAqLwogCiAgICAJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJKTsKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCAmY29udHJvbCk7CiAJLyogTVNJIEVudHJ5IEluaXRpYWxpemF0aW9uICovCi0JZW50cnkgPSBhbGxvY19tc2lfZW50cnkoKTsKKwllbnRyeSA9IGFsbG9jX21zaV9lbnRyeShkZXYpOwogCWlmICghZW50cnkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZW50cnktPm1zaV9hdHRyaWIudHlwZSA9IFBDSV9DQVBfSURfTVNJOworCWVudHJ5LT5tc2lfYXR0cmliLmlzX21zaXggPSAwOwogCWVudHJ5LT5tc2lfYXR0cmliLmlzXzY0ID0gaXNfNjRiaXRfYWRkcmVzcyhjb250cm9sKTsKIAllbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9uciA9IDA7CiAJZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCA9IGlzX21hc2tfYml0X3N1cHBvcnQoY29udHJvbCk7Ci0JZW50cnktPm1zaV9hdHRyaWIubWFza2VkID0gMTsKIAllbnRyeS0+bXNpX2F0dHJpYi5kZWZhdWx0X2lycSA9IGRldi0+aXJxOwkvKiBTYXZlIElPQVBJQyBJUlEgKi8KIAllbnRyeS0+bXNpX2F0dHJpYi5wb3MgPSBwb3M7Ci0JZW50cnktPmRldiA9IGRldjsKLQlpZiAoZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCkgewotCQl1bnNpZ25lZCBpbnQgYmFzZSwgbWFza2JpdHMsIHRlbXA7CiAKLQkJYmFzZSA9IG1zaV9tYXNrX2JpdHNfcmVnKHBvcywgZW50cnktPm1zaV9hdHRyaWIuaXNfNjQpOwotCQllbnRyeS0+bWFza19iYXNlID0gKHZvaWQgX19pb21lbSAqKShsb25nKWJhc2U7CisJZW50cnktPm1hc2tfcG9zID0gbXNpX21hc2tfYml0c19yZWcocG9zLCBlbnRyeS0+bXNpX2F0dHJpYi5pc182NCk7CisJLyogQWxsIE1TSXMgYXJlIHVubWFza2VkIGJ5IGRlZmF1bHQsIE1hc2sgdGhlbSBhbGwgKi8KKwlpZiAoZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCkKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgZW50cnktPm1hc2tfcG9zLCAmZW50cnktPm1hc2tlZCk7CisJbWFzayA9IG1zaV9jYXBhYmxlX21hc2soY29udHJvbCk7CisJbXNpX21hc2tfaXJxKGVudHJ5LCBtYXNrLCBtYXNrKTsKIAotCQkvKiBBbGwgTVNJcyBhcmUgdW5tYXNrZWQgYnkgZGVmYXVsdCwgTWFzayB0aGVtIGFsbCAqLwotCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBiYXNlLCAmbWFza2JpdHMpOwotCQl0ZW1wID0gbXNpX21hc2soKGNvbnRyb2wgJiBQQ0lfTVNJX0ZMQUdTX1FNQVNLKSA+PiAxKTsKLQkJbWFza2JpdHMgfD0gdGVtcDsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIGJhc2UsIG1hc2tiaXRzKTsKLQkJZW50cnktPm1zaV9hdHRyaWIubWFza2JpdHNfbWFzayA9IHRlbXA7Ci0JfQogCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCAmZGV2LT5tc2lfbGlzdCk7CiAKIAkvKiBDb25maWd1cmUgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlICovCi0JcmV0ID0gYXJjaF9zZXR1cF9tc2lfaXJxcyhkZXYsIDEsIFBDSV9DQVBfSURfTVNJKTsKKwlyZXQgPSBhcmNoX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgUENJX0NBUF9JRF9NU0kpOwogCWlmIChyZXQpIHsKIAkJbXNpX2ZyZWVfaXJxcyhkZXYpOwogCQlyZXR1cm4gcmV0OwpAQCAtNDc2LDI2ICs0NDQsMjggQEAKIAogCS8qIE1TSS1YIFRhYmxlIEluaXRpYWxpemF0aW9uICovCiAJZm9yIChpID0gMDsgaSA8IG52ZWM7IGkrKykgewotCQllbnRyeSA9IGFsbG9jX21zaV9lbnRyeSgpOworCQllbnRyeSA9IGFsbG9jX21zaV9lbnRyeShkZXYpOwogCQlpZiAoIWVudHJ5KQogCQkJYnJlYWs7CiAKICAJCWogPSBlbnRyaWVzW2ldLmVudHJ5OwotCQllbnRyeS0+bXNpX2F0dHJpYi50eXBlID0gUENJX0NBUF9JRF9NU0lYOworCQllbnRyeS0+bXNpX2F0dHJpYi5pc19tc2l4ID0gMTsKIAkJZW50cnktPm1zaV9hdHRyaWIuaXNfNjQgPSAxOwogCQllbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9uciA9IGo7Ci0JCWVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXQgPSAxOwotCQllbnRyeS0+bXNpX2F0dHJpYi5tYXNrZWQgPSAxOwogCQllbnRyeS0+bXNpX2F0dHJpYi5kZWZhdWx0X2lycSA9IGRldi0+aXJxOwogCQllbnRyeS0+bXNpX2F0dHJpYi5wb3MgPSBwb3M7Ci0JCWVudHJ5LT5kZXYgPSBkZXY7CiAJCWVudHJ5LT5tYXNrX2Jhc2UgPSBiYXNlOworCQllbnRyeS0+bWFza2VkID0gcmVhZGwoYmFzZSArIGogKiBQQ0lfTVNJWF9FTlRSWV9TSVpFICsKKwkJCQkJUENJX01TSVhfRU5UUllfVkVDVE9SX0NUUkxfT0ZGU0VUKTsKKwkJbXNpeF9tYXNrX2lycShlbnRyeSwgMSk7CiAKIAkJbGlzdF9hZGRfdGFpbCgmZW50cnktPmxpc3QsICZkZXYtPm1zaV9saXN0KTsKIAl9CiAKIAlyZXQgPSBhcmNoX3NldHVwX21zaV9pcnFzKGRldiwgbnZlYywgUENJX0NBUF9JRF9NU0lYKTsKLQlpZiAocmV0KSB7CisJaWYgKHJldCA8IDApIHsKKwkJLyogSWYgd2UgaGFkIHNvbWUgc3VjY2VzcyByZXBvcnQgdGhlIG51bWJlciBvZiBpcnFzCisJCSAqIHdlIHN1Y2NlZWRlZCBpbiBzZXR0aW5nIHVwLiAqLwogCQlpbnQgYXZhaWwgPSAwOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewogCQkJaWYgKGVudHJ5LT5pcnEgIT0gMCkgewpAQCAtNTAzLDE0ICs0NzMsMTMgQEAKIAkJCX0KIAkJfQogCi0JCW1zaV9mcmVlX2lycXMoZGV2KTsKKwkJaWYgKGF2YWlsICE9IDApCisJCQlyZXQgPSBhdmFpbDsKKwl9CiAKLQkJLyogSWYgd2UgaGFkIHNvbWUgc3VjY2VzcyByZXBvcnQgdGhlIG51bWJlciBvZiBpcnFzCi0JCSAqIHdlIHN1Y2NlZWRlZCBpbiBzZXR0aW5nIHVwLgotCQkgKi8KLQkJaWYgKGF2YWlsID09IDApCi0JCQlhdmFpbCA9IHJldDsKLQkJcmV0dXJuIGF2YWlsOworCWlmIChyZXQpIHsKKwkJbXNpX2ZyZWVfaXJxcyhkZXYpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCWkgPSAwOwpAQCAtNTc1LDM5ICs1NDQsNTQgQEAKIH0KIAogLyoqCi0gKiBwY2lfZW5hYmxlX21zaSAtIGNvbmZpZ3VyZSBkZXZpY2UncyBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKLSAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHBjaV9kZXYgZGF0YSBzdHJ1Y3R1cmUgb2YgTVNJIGRldmljZSBmdW5jdGlvbgorICogcGNpX2VuYWJsZV9tc2lfYmxvY2sgLSBjb25maWd1cmUgZGV2aWNlJ3MgTVNJIGNhcGFiaWxpdHkgc3RydWN0dXJlCisgKiBAZGV2OiBkZXZpY2UgdG8gY29uZmlndXJlCisgKiBAbnZlYzogbnVtYmVyIG9mIGludGVycnVwdHMgdG8gY29uZmlndXJlCiAgKgotICogU2V0dXAgdGhlIE1TSSBjYXBhYmlsaXR5IHN0cnVjdHVyZSBvZiBkZXZpY2UgZnVuY3Rpb24gd2l0aAotICogYSBzaW5nbGUgTVNJIGlycSB1cG9uIGl0cyBzb2Z0d2FyZSBkcml2ZXIgY2FsbCB0byByZXF1ZXN0IGZvcgotICogTVNJIG1vZGUgZW5hYmxlZCBvbiBpdHMgaGFyZHdhcmUgZGV2aWNlIGZ1bmN0aW9uLiBBIHJldHVybiBvZiB6ZXJvCi0gKiBpbmRpY2F0ZXMgdGhlIHN1Y2Nlc3NmdWwgc2V0dXAgb2YgYW4gZW50cnkgemVybyB3aXRoIHRoZSBuZXcgTVNJCi0gKiBpcnEgb3Igbm9uLXplcm8gZm9yIG90aGVyd2lzZS4KLSAqKi8KLWludCBwY2lfZW5hYmxlX21zaShzdHJ1Y3QgcGNpX2RldiogZGV2KQorICogQWxsb2NhdGUgSVJRcyBmb3IgYSBkZXZpY2Ugd2l0aCB0aGUgTVNJIGNhcGFiaWxpdHkuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBuZWdhdGl2ZSBlcnJubyBpZiBhbiBlcnJvciBvY2N1cnMuICBJZiBpdAorICogaXMgdW5hYmxlIHRvIGFsbG9jYXRlIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyByZXF1ZXN0ZWQsIGl0IHJldHVybnMKKyAqIHRoZSBudW1iZXIgb2YgaW50ZXJydXB0cyBpdCBtaWdodCBiZSBhYmxlIHRvIGFsbG9jYXRlLiAgSWYgaXQgc3VjY2Vzc2Z1bGx5CisgKiBhbGxvY2F0ZXMgYXQgbGVhc3QgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHRzIHJlcXVlc3RlZCwgaXQgcmV0dXJucyAwIGFuZAorICogdXBkYXRlcyB0aGUgQGRldidzIGlycSBtZW1iZXIgdG8gdGhlIGxvd2VzdCBuZXcgaW50ZXJydXB0IG51bWJlcjsgdGhlCisgKiBvdGhlciBpbnRlcnJ1cHQgbnVtYmVycyBhbGxvY2F0ZWQgdG8gdGhpcyBkZXZpY2UgYXJlIGNvbnNlY3V0aXZlLgorICovCitpbnQgcGNpX2VuYWJsZV9tc2lfYmxvY2soc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgaW50IG52ZWMpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzLCBwb3MsIG1heHZlYzsKKwl1MTYgbXNnY3RsOwogCi0Jc3RhdHVzID0gcGNpX21zaV9jaGVja19kZXZpY2UoZGV2LCAxLCBQQ0lfQ0FQX0lEX01TSSk7CisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfTVNJKTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfTVNJX0ZMQUdTLCAmbXNnY3RsKTsKKwltYXh2ZWMgPSAxIDw8ICgobXNnY3RsICYgUENJX01TSV9GTEFHU19RTUFTSykgPj4gMSk7CisJaWYgKG52ZWMgPiBtYXh2ZWMpCisJCXJldHVybiBtYXh2ZWM7CisKKwlzdGF0dXMgPSBwY2lfbXNpX2NoZWNrX2RldmljZShkZXYsIG52ZWMsIFBDSV9DQVBfSURfTVNJKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCiAJV0FSTl9PTighIWRldi0+bXNpX2VuYWJsZWQpOwogCi0JLyogQ2hlY2sgd2hldGhlciBkcml2ZXIgYWxyZWFkeSByZXF1ZXN0ZWQgZm9yIE1TSS1YIGlycXMgKi8KKwkvKiBDaGVjayB3aGV0aGVyIGRyaXZlciBhbHJlYWR5IHJlcXVlc3RlZCBNU0ktWCBpcnFzICovCiAJaWYgKGRldi0+bXNpeF9lbmFibGVkKSB7CiAJCWRldl9pbmZvKCZkZXYtPmRldiwgImNhbid0IGVuYWJsZSBNU0kgIgogCQkJICIoTVNJLVggYWxyZWFkeSBlbmFibGVkKVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlzdGF0dXMgPSBtc2lfY2FwYWJpbGl0eV9pbml0KGRldik7CisKKwlzdGF0dXMgPSBtc2lfY2FwYWJpbGl0eV9pbml0KGRldiwgbnZlYyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KLUVYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV9tc2kpOworRVhQT1JUX1NZTUJPTChwY2lfZW5hYmxlX21zaV9ibG9jayk7CiAKLXZvaWQgcGNpX21zaV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiogZGV2KQordm9pZCBwY2lfbXNpX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKwlzdHJ1Y3QgbXNpX2Rlc2MgKmRlc2M7CisJdTMyIG1hc2s7CisJdTE2IGN0cmw7CiAKIAlpZiAoIXBjaV9tc2lfZW5hYmxlIHx8ICFkZXYgfHwgIWRldi0+bXNpX2VuYWJsZWQpCiAJCXJldHVybjsKQEAgLTYxNywxOSArNjAxLDE1IEBACiAJZGV2LT5tc2lfZW5hYmxlZCA9IDA7CiAKIAlCVUdfT04obGlzdF9lbXB0eSgmZGV2LT5tc2lfbGlzdCkpOwotCWVudHJ5ID0gbGlzdF9lbnRyeShkZXYtPm1zaV9saXN0Lm5leHQsIHN0cnVjdCBtc2lfZGVzYywgbGlzdCk7Ci0JLyogUmV0dXJuIHRoZSB0aGUgcGNpIHJlc2V0IHdpdGggbXNpIGlycXMgdW5tYXNrZWQgKi8KLQlpZiAoZW50cnktPm1zaV9hdHRyaWIubWFza2JpdCkgewotCQl1MzIgbWFzayA9IGVudHJ5LT5tc2lfYXR0cmliLm1hc2tiaXRzX21hc2s7Ci0JCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGRldi0+aXJxKTsKLQkJbXNpX3NldF9tYXNrX2JpdHMoZGVzYywgbWFzaywgfm1hc2spOwotCX0KLQlpZiAoIWVudHJ5LT5kZXYgfHwgZW50cnktPm1zaV9hdHRyaWIudHlwZSAhPSBQQ0lfQ0FQX0lEX01TSSkKLQkJcmV0dXJuOworCWRlc2MgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkZXYtPm1zaV9saXN0LCBzdHJ1Y3QgbXNpX2Rlc2MsIGxpc3QpOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZGVzYy0+bXNpX2F0dHJpYi5wb3MgKyBQQ0lfTVNJX0ZMQUdTLCAmY3RybCk7CisJbWFzayA9IG1zaV9jYXBhYmxlX21hc2soY3RybCk7CisJbXNpX21hc2tfaXJxKGRlc2MsIG1hc2ssIH5tYXNrKTsKIAogCS8qIFJlc3RvcmUgZGV2LT5pcnEgdG8gaXRzIGRlZmF1bHQgcGluLWFzc2VydGlvbiBpcnEgKi8KLQlkZXYtPmlycSA9IGVudHJ5LT5tc2lfYXR0cmliLmRlZmF1bHRfaXJxOworCWRldi0+aXJxID0gZGVzYy0+bXNpX2F0dHJpYi5kZWZhdWx0X2lycTsKIH0KKwogdm9pZCBwY2lfZGlzYWJsZV9tc2koc3RydWN0IHBjaV9kZXYqIGRldikKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwpAQCAtNjQwLDcgKzYyMCw3IEBACiAJcGNpX21zaV9zaHV0ZG93bihkZXYpOwogCiAJZW50cnkgPSBsaXN0X2VudHJ5KGRldi0+bXNpX2xpc3QubmV4dCwgc3RydWN0IG1zaV9kZXNjLCBsaXN0KTsKLQlpZiAoIWVudHJ5LT5kZXYgfHwgZW50cnktPm1zaV9hdHRyaWIudHlwZSAhPSBQQ0lfQ0FQX0lEX01TSSkKKwlpZiAoZW50cnktPm1zaV9hdHRyaWIuaXNfbXNpeCkKIAkJcmV0dXJuOwogCiAJbXNpX2ZyZWVfaXJxcyhkZXYpOwpAQCAtNjUyLDE0ICs2MzIsMTggQEAKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5LCAqdG1wOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRldi0+bXNpX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGVudHJ5LT5pcnEpCi0JCQlCVUdfT04oaXJxX2hhc19hY3Rpb24oZW50cnktPmlycSkpOworCQlpbnQgaSwgbnZlYzsKKwkJaWYgKCFlbnRyeS0+aXJxKQorCQkJY29udGludWU7CisJCW52ZWMgPSAxIDw8IGVudHJ5LT5tc2lfYXR0cmliLm11bHRpcGxlOworCQlmb3IgKGkgPSAwOyBpIDwgbnZlYzsgaSsrKQorCQkJQlVHX09OKGlycV9oYXNfYWN0aW9uKGVudHJ5LT5pcnEgKyBpKSk7CiAJfQogCiAJYXJjaF90ZWFyZG93bl9tc2lfaXJxcyhkZXYpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsICZkZXYtPm1zaV9saXN0LCBsaXN0KSB7Ci0JCWlmIChlbnRyeS0+bXNpX2F0dHJpYi50eXBlID09IFBDSV9DQVBfSURfTVNJWCkgeworCQlpZiAoZW50cnktPm1zaV9hdHRyaWIuaXNfbXNpeCkgewogCQkJd3JpdGVsKDEsIGVudHJ5LT5tYXNrX2Jhc2UgKyBlbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9ucgogCQkJCSAgKiBQQ0lfTVNJWF9FTlRSWV9TSVpFCiAJCQkJICArIFBDSV9NU0lYX0VOVFJZX1ZFQ1RPUl9DVFJMX09GRlNFVCk7CkBAIC02NzUsNiArNjU5LDIzIEBACiB9CiAKIC8qKgorICogcGNpX21zaXhfdGFibGVfc2l6ZSAtIHJldHVybiB0aGUgbnVtYmVyIG9mIGRldmljZSdzIE1TSS1YIHRhYmxlIGVudHJpZXMKKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHBjaV9kZXYgZGF0YSBzdHJ1Y3R1cmUgb2YgTVNJLVggZGV2aWNlIGZ1bmN0aW9uCisgKi8KK2ludCBwY2lfbXNpeF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHBvczsKKwl1MTYgY29udHJvbDsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSVgpOworCWlmICghcG9zKQorCQlyZXR1cm4gMDsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgbXNpX2NvbnRyb2xfcmVnKHBvcyksICZjb250cm9sKTsKKwlyZXR1cm4gbXVsdGlfbXNpeF9jYXBhYmxlKGNvbnRyb2wpOworfQorCisvKioKICAqIHBjaV9lbmFibGVfbXNpeCAtIGNvbmZpZ3VyZSBkZXZpY2UncyBNU0ktWCBjYXBhYmlsaXR5IHN0cnVjdHVyZQogICogQGRldjogcG9pbnRlciB0byB0aGUgcGNpX2RldiBkYXRhIHN0cnVjdHVyZSBvZiBNU0ktWCBkZXZpY2UgZnVuY3Rpb24KICAqIEBlbnRyaWVzOiBwb2ludGVyIHRvIGFuIGFycmF5IG9mIE1TSS1YIGVudHJpZXMKQEAgLTY5MSw5ICs2OTIsOCBAQAogICoqLwogaW50IHBjaV9lbmFibGVfbXNpeChzdHJ1Y3QgcGNpX2RldiogZGV2LCBzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllcywgaW50IG52ZWMpCiB7Ci0JaW50IHN0YXR1cywgcG9zLCBucl9lbnRyaWVzOworCWludCBzdGF0dXMsIG5yX2VudHJpZXM7CiAJaW50IGksIGo7Ci0JdTE2IGNvbnRyb2w7CiAKIAlpZiAoIWVudHJpZXMpCiAgCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTcwMiw5ICs3MDIsNyBAQAogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKLQlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0lYKTsKLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1zaV9jb250cm9sX3JlZyhwb3MpLCAmY29udHJvbCk7Ci0JbnJfZW50cmllcyA9IG11bHRpX21zaXhfY2FwYWJsZShjb250cm9sKTsKKwlucl9lbnRyaWVzID0gcGNpX21zaXhfdGFibGVfc2l6ZShkZXYpOwogCWlmIChudmVjID4gbnJfZW50cmllcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL21zaS5oIGIvZHJpdmVycy9wY2kvbXNpLmgKaW5kZXggMzg5OGY1Mi4uNzFmNGRmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvbXNpLmgKKysrIGIvZHJpdmVycy9wY2kvbXNpLmgKQEAgLTIwLDE0ICsyMCw4IEBACiAjZGVmaW5lIG1zaV9tYXNrX2JpdHNfcmVnKGJhc2UsIGlzNjRiaXQpIFwKIAkoIChpczY0Yml0ID09IDEpID8gYmFzZStQQ0lfTVNJX01BU0tfQklUIDogYmFzZStQQ0lfTVNJX01BU0tfQklULTQpCiAjZGVmaW5lIG1zaV9kaXNhYmxlKGNvbnRyb2wpCQljb250cm9sICY9IH5QQ0lfTVNJX0ZMQUdTX0VOQUJMRQotI2RlZmluZSBtdWx0aV9tc2lfY2FwYWJsZShjb250cm9sKSBcCi0JKDEgPDwgKChjb250cm9sICYgUENJX01TSV9GTEFHU19RTUFTSykgPj4gMSkpCi0jZGVmaW5lIG11bHRpX21zaV9lbmFibGUoY29udHJvbCwgbnVtKSBcCi0JY29udHJvbCB8PSAoKChudW0gPj4gMSkgPDwgNCkgJiBQQ0lfTVNJX0ZMQUdTX1FTSVpFKTsKICNkZWZpbmUgaXNfNjRiaXRfYWRkcmVzcyhjb250cm9sKQkoISEoY29udHJvbCAmIFBDSV9NU0lfRkxBR1NfNjRCSVQpKQogI2RlZmluZSBpc19tYXNrX2JpdF9zdXBwb3J0KGNvbnRyb2wpCSghIShjb250cm9sICYgUENJX01TSV9GTEFHU19NQVNLQklUKSkKLSNkZWZpbmUgbXNpX2VuYWJsZShjb250cm9sLCBudW0pIG11bHRpX21zaV9lbmFibGUoY29udHJvbCwgbnVtKTsgXAotCWNvbnRyb2wgfD0gUENJX01TSV9GTEFHU19FTkFCTEUKIAogI2RlZmluZSBtc2l4X3RhYmxlX29mZnNldF9yZWcoYmFzZSkJKGJhc2UgKyAweDA0KQogI2RlZmluZSBtc2l4X3BiYV9vZmZzZXRfcmVnKGJhc2UpCShiYXNlICsgMHgwOCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCmluZGV4IGRlZWE4YTEuLmVhMTViMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwpAQCAtMTgsMjIxICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLWFjcGkuaD4KICNpbmNsdWRlICJwY2kuaCIKIAotc3RydWN0IGFjcGlfb3NjX2RhdGEgewotCWFjcGlfaGFuZGxlIGhhbmRsZTsKLQl1MzIgc3VwcG9ydF9zZXQ7Ci0JdTMyIGNvbnRyb2xfc2V0OwotCXUzMiBjb250cm9sX3F1ZXJ5OwotCWludCBpc19xdWVyaWVkOwotCXN0cnVjdCBsaXN0X2hlYWQgc2liaWxpbmc7Ci19Owotc3RhdGljIExJU1RfSEVBRChhY3BpX29zY19kYXRhX2xpc3QpOwotCi1zdHJ1Y3QgYWNwaV9vc2NfYXJncyB7Ci0JdTMyIGNhcGJ1ZlszXTsKLX07Ci0KLXN0YXRpYyBERUZJTkVfTVVURVgocGNpX2FjcGlfbG9jayk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYWNwaV9vc2NfZGF0YSAqYWNwaV9nZXRfb3NjX2RhdGEoYWNwaV9oYW5kbGUgaGFuZGxlKQotewotCXN0cnVjdCBhY3BpX29zY19kYXRhICpkYXRhOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkYXRhLCAmYWNwaV9vc2NfZGF0YV9saXN0LCBzaWJpbGluZykgewotCQlpZiAoZGF0YS0+aGFuZGxlID09IGhhbmRsZSkKLQkJCXJldHVybiBkYXRhOwotCX0KLQlkYXRhID0ga3phbGxvYyhzaXplb2YoKmRhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiBOVUxMOwotCUlOSVRfTElTVF9IRUFEKCZkYXRhLT5zaWJpbGluZyk7Ci0JZGF0YS0+aGFuZGxlID0gaGFuZGxlOwotCWxpc3RfYWRkX3RhaWwoJmRhdGEtPnNpYmlsaW5nLCAmYWNwaV9vc2NfZGF0YV9saXN0KTsKLQlyZXR1cm4gZGF0YTsKLX0KLQotc3RhdGljIHU4IE9TQ19VVUlEWzE2XSA9IHsweDVCLCAweDRELCAweERCLCAweDMzLCAweEY3LCAweDFGLCAweDFDLCAweDQwLAotCQkJICAweDk2LCAweDU3LCAweDc0LCAweDQxLCAweEMwLCAweDNELCAweEQ3LCAweDY2fTsKLQotc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfcnVuX29zYyhhY3BpX2hhbmRsZSBoYW5kbGUsCi0JCQkJc3RydWN0IGFjcGlfb3NjX2FyZ3MgKm9zY19hcmdzLCB1MzIgKnJldHZhbCkKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7Ci0JdW5pb24gYWNwaV9vYmplY3QgaW5fcGFyYW1zWzRdOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBvdXRwdXQgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OwotCXVuaW9uIGFjcGlfb2JqZWN0ICpvdXRfb2JqOwotCXUzMiBlcnJvcnMsIGZsYWdzID0gb3NjX2FyZ3MtPmNhcGJ1ZltPU0NfUVVFUllfVFlQRV07Ci0KLQkvKiBTZXR0aW5nIHVwIGlucHV0IHBhcmFtZXRlcnMgKi8KLQlpbnB1dC5jb3VudCA9IDQ7Ci0JaW5wdXQucG9pbnRlciA9IGluX3BhcmFtczsKLQlpbl9wYXJhbXNbMF0udHlwZSAJCT0gQUNQSV9UWVBFX0JVRkZFUjsKLQlpbl9wYXJhbXNbMF0uYnVmZmVyLmxlbmd0aCAJPSAxNjsKLQlpbl9wYXJhbXNbMF0uYnVmZmVyLnBvaW50ZXIJPSBPU0NfVVVJRDsKLQlpbl9wYXJhbXNbMV0udHlwZSAJCT0gQUNQSV9UWVBFX0lOVEVHRVI7Ci0JaW5fcGFyYW1zWzFdLmludGVnZXIudmFsdWUgCT0gMTsKLQlpbl9wYXJhbXNbMl0udHlwZSAJCT0gQUNQSV9UWVBFX0lOVEVHRVI7Ci0JaW5fcGFyYW1zWzJdLmludGVnZXIudmFsdWUJPSAzOwotCWluX3BhcmFtc1szXS50eXBlCQk9IEFDUElfVFlQRV9CVUZGRVI7Ci0JaW5fcGFyYW1zWzNdLmJ1ZmZlci5sZW5ndGggCT0gMTI7Ci0JaW5fcGFyYW1zWzNdLmJ1ZmZlci5wb2ludGVyIAk9ICh1OCAqKW9zY19hcmdzLT5jYXBidWY7Ci0KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJfT1NDIiwgJmlucHV0LCAmb3V0cHV0KTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXJldHVybiBzdGF0dXM7Ci0KLQlpZiAoIW91dHB1dC5sZW5ndGgpCi0JCXJldHVybiBBRV9OVUxMX09CSkVDVDsKLQotCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKLQlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJFdmFsdWF0ZSBfT1NDIHJldHVybnMgd3JvbmcgdHlwZVxuIik7Ci0JCXN0YXR1cyA9IEFFX1RZUEU7Ci0JCWdvdG8gb3V0X2tmcmVlOwotCX0KLQkvKiBOZWVkIHRvIGlnbm9yZSB0aGUgYml0MCBpbiByZXN1bHQgY29kZSAqLwotCWVycm9ycyA9ICooKHUzMiAqKW91dF9vYmotPmJ1ZmZlci5wb2ludGVyKSAmIH4oMSA8PCAwKTsKLQlpZiAoZXJyb3JzKSB7Ci0JCWlmIChlcnJvcnMgJiBPU0NfUkVRVUVTVF9FUlJPUikKLQkJCXByaW50ayhLRVJOX0RFQlVHICJfT1NDIHJlcXVlc3QgZmFpbHNcbiIpOyAKLQkJaWYgKGVycm9ycyAmIE9TQ19JTlZBTElEX1VVSURfRVJST1IpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyBpbnZhbGlkIFVVSURcbiIpOyAKLQkJaWYgKGVycm9ycyAmIE9TQ19JTlZBTElEX1JFVklTSU9OX0VSUk9SKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIl9PU0MgaW52YWxpZCByZXZpc2lvblxuIik7IAotCQlpZiAoZXJyb3JzICYgT1NDX0NBUEFCSUxJVElFU19NQVNLX0VSUk9SKSB7Ci0JCQlpZiAoZmxhZ3MgJiBPU0NfUVVFUllfRU5BQkxFKQotCQkJCWdvdG8gb3V0X3N1Y2Nlc3M7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiX09TQyBGVyBub3QgZ3JhbnQgcmVxLiBjb250cm9sXG4iKTsKLQkJCXN0YXR1cyA9IEFFX1NVUFBPUlQ7Ci0JCQlnb3RvIG91dF9rZnJlZTsKLQkJfQotCQlzdGF0dXMgPSBBRV9FUlJPUjsKLQkJZ290byBvdXRfa2ZyZWU7Ci0JfQotb3V0X3N1Y2Nlc3M6Ci0JKnJldHZhbCA9ICooKHUzMiAqKShvdXRfb2JqLT5idWZmZXIucG9pbnRlciArIDgpKTsKLQlzdGF0dXMgPSBBRV9PSzsKLQotb3V0X2tmcmVlOgotCWtmcmVlKG91dHB1dC5wb2ludGVyKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgYWNwaV9zdGF0dXMgX19hY3BpX3F1ZXJ5X29zYyh1MzIgZmxhZ3MsIHN0cnVjdCBhY3BpX29zY19kYXRhICpvc2NfZGF0YSkKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JdTMyIHN1cHBvcnRfc2V0LCByZXN1bHQ7Ci0Jc3RydWN0IGFjcGlfb3NjX2FyZ3Mgb3NjX2FyZ3M7Ci0KLQkvKiBkbyBfT1NDIHF1ZXJ5IGZvciBhbGwgcG9zc2libGUgY29udHJvbHMgKi8KLQlzdXBwb3J0X3NldCA9IG9zY19kYXRhLT5zdXBwb3J0X3NldCB8IChmbGFncyAmIE9TQ19TVVBQT1JUX01BU0tTKTsKLQlvc2NfYXJncy5jYXBidWZbT1NDX1FVRVJZX1RZUEVdID0gT1NDX1FVRVJZX0VOQUJMRTsKLQlvc2NfYXJncy5jYXBidWZbT1NDX1NVUFBPUlRfVFlQRV0gPSBzdXBwb3J0X3NldDsKLQlvc2NfYXJncy5jYXBidWZbT1NDX0NPTlRST0xfVFlQRV0gPSBPU0NfQ09OVFJPTF9NQVNLUzsKLQotCXN0YXR1cyA9IGFjcGlfcnVuX29zYyhvc2NfZGF0YS0+aGFuZGxlLCAmb3NjX2FyZ3MsICZyZXN1bHQpOwotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQlvc2NfZGF0YS0+c3VwcG9ydF9zZXQgPSBzdXBwb3J0X3NldDsKLQkJb3NjX2RhdGEtPmNvbnRyb2xfcXVlcnkgPSByZXN1bHQ7Ci0JCW9zY19kYXRhLT5pc19xdWVyaWVkID0gMTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKgotICogcGNpX2FjcGlfb3NjX3N1cHBvcnQ6IEludm9rZSBfT1NDIGluZGljYXRpbmcgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGZlYXR1cmUKLSAqIEBmbGFnczogQml0bWFzayBvZiBmbGFncyB0byBzdXBwb3J0Ci0gKgotICogU2VlIHRoZSBBQ1BJIHNwZWMgZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmbGFncwotICovCi1pbnQgcGNpX2FjcGlfb3NjX3N1cHBvcnQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCWFjcGlfaGFuZGxlIHRtcDsKLQlzdHJ1Y3QgYWNwaV9vc2NfZGF0YSAqb3NjX2RhdGE7Ci0JaW50IHJjID0gMDsKLQotCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShoYW5kbGUsICJfT1NDIiwgJnRtcCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm4gLUVOT1RUWTsKLQotCW11dGV4X2xvY2soJnBjaV9hY3BpX2xvY2spOwotCW9zY19kYXRhID0gYWNwaV9nZXRfb3NjX2RhdGEoaGFuZGxlKTsKLQlpZiAoIW9zY19kYXRhKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYWNwaSBvc2MgZGF0YSBhcnJheSBpcyBmdWxsXG4iKTsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlfX2FjcGlfcXVlcnlfb3NjKGZsYWdzLCBvc2NfZGF0YSk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwY2lfYWNwaV9sb2NrKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogcGNpX29zY19jb250cm9sX3NldCAtIGNvbW1pdCByZXF1ZXN0ZWQgY29udHJvbCB0byBGaXJtd2FyZQotICogQGhhbmRsZTogYWNwaV9oYW5kbGUgZm9yIHRoZSB0YXJnZXQgQUNQSSBvYmplY3QKLSAqIEBmbGFnczogZHJpdmVyJ3MgcmVxdWVzdGVkIGNvbnRyb2wgYml0cwotICoKLSAqIEF0dGVtcHQgdG8gdGFrZSBjb250cm9sIGZyb20gRmlybXdhcmUgb24gcmVxdWVzdGVkIGNvbnRyb2wgYml0cy4KLSAqKi8KLWFjcGlfc3RhdHVzIHBjaV9vc2NfY29udHJvbF9zZXQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpCi17Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCXUzMiBjb250cm9sX3JlcSwgY29udHJvbF9zZXQsIHJlc3VsdDsKLQlhY3BpX2hhbmRsZSB0bXA7Ci0Jc3RydWN0IGFjcGlfb3NjX2RhdGEgKm9zY19kYXRhOwotCXN0cnVjdCBhY3BpX29zY19hcmdzIG9zY19hcmdzOwotCi0Jc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9PU0MiLCAmdG1wKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCXJldHVybiBzdGF0dXM7Ci0KLQltdXRleF9sb2NrKCZwY2lfYWNwaV9sb2NrKTsKLQlvc2NfZGF0YSA9IGFjcGlfZ2V0X29zY19kYXRhKGhhbmRsZSk7Ci0JaWYgKCFvc2NfZGF0YSkgewotCQlwcmludGsoS0VSTl9FUlIgImFjcGkgb3NjIGRhdGEgYXJyYXkgaXMgZnVsbFxuIik7Ci0JCXN0YXR1cyA9IEFFX0VSUk9SOwotCQlnb3RvIG91dDsKLQl9Ci0KLQljb250cm9sX3JlcSA9IChmbGFncyAmIE9TQ19DT05UUk9MX01BU0tTKTsKLQlpZiAoIWNvbnRyb2xfcmVxKSB7Ci0JCXN0YXR1cyA9IEFFX1RZUEU7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIE5vIG5lZWQgdG8gZXZhbHVhdGUgX09TQyBpZiB0aGUgY29udHJvbCB3YXMgYWxyZWFkeSBncmFudGVkLiAqLwotCWlmICgob3NjX2RhdGEtPmNvbnRyb2xfc2V0ICYgY29udHJvbF9yZXEpID09IGNvbnRyb2xfcmVxKQotCQlnb3RvIG91dDsKLQotCWlmICghb3NjX2RhdGEtPmlzX3F1ZXJpZWQpIHsKLQkJc3RhdHVzID0gX19hY3BpX3F1ZXJ5X29zYyhvc2NfZGF0YS0+c3VwcG9ydF9zZXQsIG9zY19kYXRhKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKChvc2NfZGF0YS0+Y29udHJvbF9xdWVyeSAmIGNvbnRyb2xfcmVxKSAhPSBjb250cm9sX3JlcSkgewotCQlzdGF0dXMgPSBBRV9TVVBQT1JUOwotCQlnb3RvIG91dDsKLQl9Ci0KLQljb250cm9sX3NldCA9IG9zY19kYXRhLT5jb250cm9sX3NldCB8IGNvbnRyb2xfcmVxOwotCW9zY19hcmdzLmNhcGJ1ZltPU0NfUVVFUllfVFlQRV0gPSAwOwotCW9zY19hcmdzLmNhcGJ1ZltPU0NfU1VQUE9SVF9UWVBFXSA9IG9zY19kYXRhLT5zdXBwb3J0X3NldDsKLQlvc2NfYXJncy5jYXBidWZbT1NDX0NPTlRST0xfVFlQRV0gPSBjb250cm9sX3NldDsKLQlzdGF0dXMgPSBhY3BpX3J1bl9vc2MoaGFuZGxlLCAmb3NjX2FyZ3MsICZyZXN1bHQpOwotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKLQkJb3NjX2RhdGEtPmNvbnRyb2xfc2V0ID0gcmVzdWx0Owotb3V0OgotCW11dGV4X3VubG9jaygmcGNpX2FjcGlfbG9jayk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLUVYUE9SVF9TWU1CT0wocGNpX29zY19jb250cm9sX3NldCk7Ci0KIC8qCiAgKiBfU3hEIHJldHVybnMgdGhlIEQtc3RhdGUgd2l0aCB0aGUgaGlnaGVzdCBwb3dlcgogICogKGxvd2VzdCBELXN0YXRlIG51bWJlcikgc3VwcG9ydGVkIGluIHRoZSBTLXN0YXRlICJ4Ii4KQEAgLTM4NiwxMiArMTcxLDEyIEBACiB7CiAJaW50IHJldDsKIAotCWlmIChhY3BpX2dibF9GQURULmJvb3RfZmxhZ3MgJiBCQUZfTVNJX05PVF9TVVBQT1JURUQpIHsKKwlpZiAoYWNwaV9nYmxfRkFEVC5ib290X2ZsYWdzICYgQUNQSV9GQURUX05PX01TSSkgewogCQlwcmludGsoS0VSTl9JTkZPIkFDUEkgRkFEVCBkZWNsYXJlcyB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBNU0ksIHNvIGRpc2FibGUgaXRcbiIpOwogCQlwY2lfbm9fbXNpKCk7CiAJfQogCi0JaWYgKGFjcGlfZ2JsX0ZBRFQuYm9vdF9mbGFncyAmIEJBRl9QQ0lFX0FTUE1fQ09OVFJPTCkgeworCWlmIChhY3BpX2dibF9GQURULmJvb3RfZmxhZ3MgJiBBQ1BJX0ZBRFRfTk9fQVNQTSkgewogCQlwcmludGsoS0VSTl9JTkZPIkFDUEkgRkFEVCBkZWNsYXJlcyB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBQQ0llIEFTUE0sIHNvIGRpc2FibGUgaXRcbiIpOwogCQlwY2llX25vX2FzcG0oKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggMjY3ZGU4OC4uZDc2YzRjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtOTksNiArOTksNTIgQEAKIH0KIHN0YXRpYyBEUklWRVJfQVRUUihuZXdfaWQsIFNfSVdVU1IsIE5VTEwsIHN0b3JlX25ld19pZCk7CiAKKy8qKgorICogc3RvcmVfcmVtb3ZlX2lkIC0gcmVtb3ZlIGEgUENJIGRldmljZSBJRCBmcm9tIHRoaXMgZHJpdmVyCisgKiBAZHJpdmVyOiB0YXJnZXQgZGV2aWNlIGRyaXZlcgorICogQGJ1ZjogYnVmZmVyIGZvciBzY2FubmluZyBkZXZpY2UgSUQgZGF0YQorICogQGNvdW50OiBpbnB1dCBzaXplCisgKgorICogUmVtb3ZlcyBhIGR5bmFtaWMgcGNpIGRldmljZSBJRCB0byB0aGlzIGRyaXZlci4KKyAqLworc3RhdGljIHNzaXplX3QKK3N0b3JlX3JlbW92ZV9pZChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGNpX2R5bmlkICpkeW5pZCwgKm47CisJc3RydWN0IHBjaV9kcml2ZXIgKnBkcnYgPSB0b19wY2lfZHJpdmVyKGRyaXZlcik7CisJX191MzIgdmVuZG9yLCBkZXZpY2UsIHN1YnZlbmRvciA9IFBDSV9BTllfSUQsCisJCXN1YmRldmljZSA9IFBDSV9BTllfSUQsIGNsYXNzID0gMCwgY2xhc3NfbWFzayA9IDA7CisJaW50IGZpZWxkcyA9IDA7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisKKwlmaWVsZHMgPSBzc2NhbmYoYnVmLCAiJXggJXggJXggJXggJXggJXgiLAorCQkJJnZlbmRvciwgJmRldmljZSwgJnN1YnZlbmRvciwgJnN1YmRldmljZSwKKwkJCSZjbGFzcywgJmNsYXNzX21hc2spOworCWlmIChmaWVsZHMgPCAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9jaygmcGRydi0+ZHluaWRzLmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkeW5pZCwgbiwgJnBkcnYtPmR5bmlkcy5saXN0LCBub2RlKSB7CisJCXN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCA9ICZkeW5pZC0+aWQ7CisJCWlmICgoaWQtPnZlbmRvciA9PSB2ZW5kb3IpICYmCisJCSAgICAoaWQtPmRldmljZSA9PSBkZXZpY2UpICYmCisJCSAgICAoc3VidmVuZG9yID09IFBDSV9BTllfSUQgfHwgaWQtPnN1YnZlbmRvciA9PSBzdWJ2ZW5kb3IpICYmCisJCSAgICAoc3ViZGV2aWNlID09IFBDSV9BTllfSUQgfHwgaWQtPnN1YmRldmljZSA9PSBzdWJkZXZpY2UpICYmCisJCSAgICAhKChpZC0+Y2xhc3MgXiBjbGFzcykgJiBjbGFzc19tYXNrKSkgeworCQkJbGlzdF9kZWwoJmR5bmlkLT5ub2RlKTsKKwkJCWtmcmVlKGR5bmlkKTsKKwkJCXJldHZhbCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmcGRydi0+ZHluaWRzLmxvY2spOworCisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gY291bnQ7Cit9CitzdGF0aWMgRFJJVkVSX0FUVFIocmVtb3ZlX2lkLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9yZW1vdmVfaWQpOworCiBzdGF0aWMgdm9pZAogcGNpX2ZyZWVfZHluaWRzKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpCiB7CkBAIC0xMjUsNiArMTcxLDIwIEBACiB7CiAJZHJpdmVyX3JlbW92ZV9maWxlKCZkcnYtPmRyaXZlciwgJmRyaXZlcl9hdHRyX25ld19pZCk7CiB9CisKK3N0YXRpYyBpbnQKK3BjaV9jcmVhdGVfcmVtb3ZlaWRfZmlsZShzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KQoreworCWludCBlcnJvciA9IDA7CisJaWYgKGRydi0+cHJvYmUgIT0gTlVMTCkKKwkJZXJyb3IgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJmRydi0+ZHJpdmVyLCZkcml2ZXJfYXR0cl9yZW1vdmVfaWQpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgcGNpX3JlbW92ZV9yZW1vdmVpZF9maWxlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpCit7CisJZHJpdmVyX3JlbW92ZV9maWxlKCZkcnYtPmRyaXZlciwgJmRyaXZlcl9hdHRyX3JlbW92ZV9pZCk7Cit9CiAjZWxzZSAvKiAhQ09ORklHX0hPVFBMVUcgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZnJlZV9keW5pZHMoc3RydWN0IHBjaV9kcml2ZXIgKmRydikge30KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9jcmVhdGVfbmV3aWRfZmlsZShzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KQpAQCAtMTMyLDYgKzE5MiwxMSBAQAogCXJldHVybiAwOwogfQogc3RhdGljIGlubGluZSB2b2lkIHBjaV9yZW1vdmVfbmV3aWRfZmlsZShzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KSB7fQorc3RhdGljIGlubGluZSBpbnQgcGNpX2NyZWF0ZV9yZW1vdmVpZF9maWxlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3JlbW92ZV9yZW1vdmVpZF9maWxlKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpIHt9CiAjZW5kaWYKIAogLyoqCkBAIC0yMTIsMTAgKzI3Nyw5IEBACiAJbm9kZSA9IGRldl90b19ub2RlKCZkZXYtPmRldik7CiAJaWYgKG5vZGUgPj0gMCkgewogCQlpbnQgY3B1OwotCQlub2RlX3RvX2NwdW1hc2tfcHRyKG5vZGVjcHVtYXNrLCBub2RlKTsKIAogCQlnZXRfb25saW5lX2NwdXMoKTsKLQkJY3B1ID0gY3B1bWFza19hbnlfYW5kKG5vZGVjcHVtYXNrLCBjcHVfb25saW5lX21hc2spOworCQljcHUgPSBjcHVtYXNrX2FueV9hbmQoY3B1bWFza19vZl9ub2RlKG5vZGUpLCBjcHVfb25saW5lX21hc2spOwogCQlpZiAoY3B1IDwgbnJfY3B1X2lkcykKIAkJCWVycm9yID0gd29ya19vbl9jcHUoY3B1LCBsb2NhbF9wY2lfcHJvYmUsICZkZGkpOwogCQllbHNlCkBAIC04OTksMTMgKzk2MywyMyBAQAogCS8qIHJlZ2lzdGVyIHdpdGggY29yZSAqLwogCWVycm9yID0gZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CiAJaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJCWdvdG8gb3V0OwogCiAJZXJyb3IgPSBwY2lfY3JlYXRlX25ld2lkX2ZpbGUoZHJ2KTsKIAlpZiAoZXJyb3IpCi0JCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisJCWdvdG8gb3V0X25ld2lkOwogCisJZXJyb3IgPSBwY2lfY3JlYXRlX3JlbW92ZWlkX2ZpbGUoZHJ2KTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0X3JlbW92ZWlkOworb3V0OgogCXJldHVybiBlcnJvcjsKKworb3V0X3JlbW92ZWlkOgorCXBjaV9yZW1vdmVfbmV3aWRfZmlsZShkcnYpOworb3V0X25ld2lkOgorCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7CisJZ290byBvdXQ7CiB9CiAKIC8qKgpAQCAtOTIxLDYgKzk5NSw3IEBACiB2b2lkCiBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRydikKIHsKKwlwY2lfcmVtb3ZlX3JlbW92ZWlkX2ZpbGUoZHJ2KTsKIAlwY2lfcmVtb3ZlX25ld2lkX2ZpbGUoZHJ2KTsKIAlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwogCXBjaV9mcmVlX2R5bmlkcyhkcnYpOwpAQCAtMTAyMCw2ICsxMDk1LDcgQEAKIAkucmVtb3ZlCQk9IHBjaV9kZXZpY2VfcmVtb3ZlLAogCS5zaHV0ZG93bgk9IHBjaV9kZXZpY2Vfc2h1dGRvd24sCiAJLmRldl9hdHRycwk9IHBjaV9kZXZfYXR0cnMsCisJLmJ1c19hdHRycwk9IHBjaV9idXNfYXR0cnMsCiAJLnBtCQk9IFBDSV9QTV9PUFNfUFRSLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwppbmRleCBkZmM0ZTBkLi5lOWE4NzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwpAQCAtMjE5LDYgKzIxOSw4MyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorI2lmZGVmIENPTkZJR19IT1RQTFVHCitzdGF0aWMgREVGSU5FX01VVEVYKHBjaV9yZW1vdmVfcmVzY2FuX211dGV4KTsKK3N0YXRpYyBzc2l6ZV90IGJ1c19yZXNjYW5fc3RvcmUoc3RydWN0IGJ1c190eXBlICpidXMsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQlzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJc3RydWN0IHBjaV9idXMgKmIgPSBOVUxMOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwpIHsKKwkJbXV0ZXhfbG9jaygmcGNpX3JlbW92ZV9yZXNjYW5fbXV0ZXgpOworCQl3aGlsZSAoKGIgPSBwY2lfZmluZF9uZXh0X2J1cyhiKSkgIT0gTlVMTCkKKwkJCXBjaV9yZXNjYW5fYnVzKGIpOworCQltdXRleF91bmxvY2soJnBjaV9yZW1vdmVfcmVzY2FuX211dGV4KTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSBwY2lfYnVzX2F0dHJzW10gPSB7CisJX19BVFRSKHJlc2NhbiwgKFNfSVdVU1J8U19JV0dSUCksIE5VTEwsIGJ1c19yZXNjYW5fc3RvcmUpLAorCV9fQVRUUl9OVUxMCit9OworCitzdGF0aWMgc3NpemVfdAorZGV2X3Jlc2Nhbl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbCkgeworCQltdXRleF9sb2NrKCZwY2lfcmVtb3ZlX3Jlc2Nhbl9tdXRleCk7CisJCXBjaV9yZXNjYW5fYnVzKHBkZXYtPmJ1cyk7CisJCW11dGV4X3VubG9jaygmcGNpX3JlbW92ZV9yZXNjYW5fbXV0ZXgpOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9jYWxsYmFjayhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisKKwltdXRleF9sb2NrKCZwY2lfcmVtb3ZlX3Jlc2Nhbl9tdXRleCk7CisJcGNpX3JlbW92ZV9idXNfZGV2aWNlKHBkZXYpOworCW11dGV4X3VubG9jaygmcGNpX3JlbW92ZV9yZXNjYW5fbXV0ZXgpOworfQorCitzdGF0aWMgc3NpemVfdAorcmVtb3ZlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmR1bW15LAorCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHBjaV9pc19yb290X2J1cyhwZGV2LT5idXMpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogQW4gYXR0cmlidXRlIGNhbm5vdCBiZSB1bnJlZ2lzdGVyZWQgYnkgb25lIG9mIGl0cyBvd24gbWV0aG9kcywKKwkgKiBzbyB3ZSBoYXZlIHRvIHVzZSB0aGlzIHJvdW5kYWJvdXQgYXBwcm9hY2guCisJICovCisJaWYgKHZhbCkKKwkJcmV0ID0gZGV2aWNlX3NjaGVkdWxlX2NhbGxiYWNrKGRldiwgcmVtb3ZlX2NhbGxiYWNrKTsKKwlpZiAocmV0KQorCQljb3VudCA9IHJldDsKKwlyZXR1cm4gY291bnQ7Cit9CisjZW5kaWYKKwogc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcGNpX2Rldl9hdHRyc1tdID0gewogCV9fQVRUUl9STyhyZXNvdXJjZSksCiAJX19BVFRSX1JPKHZlbmRvciksCkBAIC0yMzcsMTAgKzMxNCwyNSBAQAogCV9fQVRUUihicm9rZW5fcGFyaXR5X3N0YXR1cywoU19JUlVHT3xTX0lXVVNSKSwKIAkJYnJva2VuX3Bhcml0eV9zdGF0dXNfc2hvdyxicm9rZW5fcGFyaXR5X3N0YXR1c19zdG9yZSksCiAJX19BVFRSKG1zaV9idXMsIDA2NDQsIG1zaV9idXNfc2hvdywgbXNpX2J1c19zdG9yZSksCisjaWZkZWYgQ09ORklHX0hPVFBMVUcKKwlfX0FUVFIocmVtb3ZlLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwgcmVtb3ZlX3N0b3JlKSwKKwlfX0FUVFIocmVzY2FuLCAoU19JV1VTUnxTX0lXR1JQKSwgTlVMTCwgZGV2X3Jlc2Nhbl9zdG9yZSksCisjZW5kaWYKIAlfX0FUVFJfTlVMTCwKIH07CiAKIHN0YXRpYyBzc2l6ZV90Citib290X3ZnYV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLAorCQkhIShwZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5mbGFncyAmCisJCSAgIElPUkVTT1VSQ0VfUk9NX1NIQURPVykpOworfQorc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdmdhX2F0dHIgPSBfX0FUVFJfUk8oYm9vdF92Z2EpOworCitzdGF0aWMgc3NpemVfdAogcGNpX3JlYWRfY29uZmlnKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmluX2F0dHIsCiAJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQogewpAQCAtNDkzLDYgKzU4NSwxOSBAQAogfQogCiAvKioKKyAqIHBjaV9hZGp1c3RfbGVnYWN5X2F0dHIgLSBhZGp1c3RtZW50IG9mIGxlZ2FjeSBmaWxlIGF0dHJpYnV0ZXMKKyAqIEBiOiBidXMgdG8gY3JlYXRlIGZpbGVzIHVuZGVyCisgKiBAbW1hcF90eXBlOiBJL08gcG9ydCBvciBtZW1vcnkKKyAqCisgKiBTdHViIGltcGxlbWVudGF0aW9uLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSBhcmNoIGlmIG5lY2Vzc2FyeS4KKyAqLwordm9pZCBfX3dlYWsKK3BjaV9hZGp1c3RfbGVnYWN5X2F0dHIoc3RydWN0IHBjaV9idXMgKmIsIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF90eXBlKQoreworCXJldHVybjsKK30KKworLyoqCiAgKiBwY2lfY3JlYXRlX2xlZ2FjeV9maWxlcyAtIGNyZWF0ZSBsZWdhY3kgSS9PIHBvcnQgYW5kIG1lbW9yeSBmaWxlcwogICogQGI6IGJ1cyB0byBjcmVhdGUgZmlsZXMgdW5kZXIKICAqCkBAIC01MTgsNiArNjIzLDcgQEAKIAliLT5sZWdhY3lfaW8tPnJlYWQgPSBwY2lfcmVhZF9sZWdhY3lfaW87CiAJYi0+bGVnYWN5X2lvLT53cml0ZSA9IHBjaV93cml0ZV9sZWdhY3lfaW87CiAJYi0+bGVnYWN5X2lvLT5tbWFwID0gcGNpX21tYXBfbGVnYWN5X2lvOworCXBjaV9hZGp1c3RfbGVnYWN5X2F0dHIoYiwgcGNpX21tYXBfaW8pOwogCWVycm9yID0gZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZSgmYi0+ZGV2LCBiLT5sZWdhY3lfaW8pOwogCWlmIChlcnJvcikKIAkJZ290byBsZWdhY3lfaW9fZXJyOwpAQCAtNTI4LDYgKzYzNCw3IEBACiAJYi0+bGVnYWN5X21lbS0+c2l6ZSA9IDEwMjQqMTAyNDsKIAliLT5sZWdhY3lfbWVtLT5hdHRyLm1vZGUgPSBTX0lSVVNSIHwgU19JV1VTUjsKIAliLT5sZWdhY3lfbWVtLT5tbWFwID0gcGNpX21tYXBfbGVnYWN5X21lbTsKKwlwY2lfYWRqdXN0X2xlZ2FjeV9hdHRyKGIsIHBjaV9tbWFwX21lbSk7CiAJZXJyb3IgPSBkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKCZiLT5kZXYsIGItPmxlZ2FjeV9tZW0pOwogCWlmIChlcnJvcikKIAkJZ290byBsZWdhY3lfbWVtX2VycjsKQEAgLTcxOSw4ICs4MjYsOCBAQAogCXJldHVybiAwOwogfQogI2Vsc2UgLyogIUhBVkVfUENJX01NQVAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9jcmVhdGVfcmVzb3VyY2VfZmlsZXMoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIHBjaV9yZW1vdmVfcmVzb3VyY2VfZmlsZXMoc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm47IH0KK2ludCBfX3dlYWsgcGNpX2NyZWF0ZV9yZXNvdXJjZV9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IHJldHVybiAwOyB9Cit2b2lkIF9fd2VhayBwY2lfcmVtb3ZlX3Jlc291cmNlX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgcmV0dXJuOyB9CiAjZW5kaWYgLyogSEFWRV9QQ0lfTU1BUCAqLwogCiAvKioKQEAgLTg4NCwxOCArOTkxLDI3IEBACiAJCXBkZXYtPnJvbV9hdHRyID0gYXR0cjsKIAl9CiAKKwlpZiAoKHBkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19ESVNQTEFZX1ZHQSkgeworCQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJnZnYV9hdHRyKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXJyX3JvbV9maWxlOworCX0KKwogCS8qIGFkZCBwbGF0Zm9ybS1zcGVjaWZpYyBhdHRyaWJ1dGVzICovCiAJcmV0dmFsID0gcGNpYmlvc19hZGRfcGxhdGZvcm1fZW50cmllcyhwZGV2KTsKIAlpZiAocmV0dmFsKQotCQlnb3RvIGVycl9yb21fZmlsZTsKKwkJZ290byBlcnJfdmdhX2ZpbGU7CiAKIAkvKiBhZGQgc3lzZnMgZW50cmllcyBmb3IgdmFyaW91cyBjYXBhYmlsaXRpZXMgKi8KIAlyZXR2YWwgPSBwY2lfY3JlYXRlX2NhcGFiaWxpdGllc19zeXNmcyhwZGV2KTsKIAlpZiAocmV0dmFsKQotCQlnb3RvIGVycl9yb21fZmlsZTsKKwkJZ290byBlcnJfdmdhX2ZpbGU7CiAKIAlyZXR1cm4gMDsKIAorZXJyX3ZnYV9maWxlOgorCWlmICgocGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJnZnYV9hdHRyKTsKIGVycl9yb21fZmlsZToKIAlpZiAocm9tX3NpemUpIHsKIAkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgcGRldi0+cm9tX2F0dHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCAwMTk1MDY2Li40NDVmYjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BtX3dha2V1cC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4JLyogaXNhX2RtYV9icmlkZ2VfYnVnZ3kgKi8KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlICJwY2kuaCIKIAogdW5zaWduZWQgaW50IHBjaV9wbV9kM19kZWxheSA9IFBDSV9QTV9EM19XQUlUOwpAQCAtNTkxLDcgKzU5Myw3IEBACiAgKiBAZGV2OiBQQ0kgZGV2aWNlIHRvIGhhbmRsZS4KICAqIEBzdGF0ZTogUENJIHBvd2VyIHN0YXRlIChEMCwgRDEsIEQyLCBEM2hvdCkgdG8gcHV0IHRoZSBkZXZpY2UgaW50by4KICAqCi0gKiBUcmFuc2l0aW9uIGEgZGV2aWNlIHRvIGEgbmV3IHBvd2VyIHN0YXRlLCB1c2luZyB0aGUgcGxhdGZvcm0gZm9ybXdhcmUgYW5kL29yCisgKiBUcmFuc2l0aW9uIGEgZGV2aWNlIHRvIGEgbmV3IHBvd2VyIHN0YXRlLCB1c2luZyB0aGUgcGxhdGZvcm0gZmlybXdhcmUgYW5kL29yCiAgKiB0aGUgZGV2aWNlJ3MgUENJIFBNIHJlZ2lzdGVycy4KICAqCiAgKiBSRVRVUk4gVkFMVUU6CkBAIC02NzcsNiArNjc5LDggQEAKIAogRVhQT1JUX1NZTUJPTChwY2lfY2hvb3NlX3N0YXRlKTsKIAorI2RlZmluZSBQQ0lfRVhQX1NBVkVfUkVHUwk3CisKIHN0YXRpYyBpbnQgcGNpX3NhdmVfcGNpZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCWludCBwb3MsIGkgPSAwOwpAQCAtNjg5LDcgKzY5Myw3IEBACiAKIAlzYXZlX3N0YXRlID0gcGNpX2ZpbmRfc2F2ZWRfY2FwKGRldiwgUENJX0NBUF9JRF9FWFApOwogCWlmICghc2F2ZV9zdGF0ZSkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgImJ1ZmZlciBub3QgZm91bmQgaW4gJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiYnVmZmVyIG5vdCBmb3VuZCBpbiAlc1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJY2FwID0gKHUxNiAqKSZzYXZlX3N0YXRlLT5kYXRhWzBdOwpAQCAtNjk4LDYgKzcwMiw5IEBACiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwgJmNhcFtpKytdKTsKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfU0xUQ1RMLCAmY2FwW2krK10pOwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9SVENUTCwgJmNhcFtpKytdKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfREVWQ1RMMiwgJmNhcFtpKytdKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfTE5LQ1RMMiwgJmNhcFtpKytdKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfU0xUQ1RMMiwgJmNhcFtpKytdKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzE4LDYgKzcyNSw5IEBACiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9MTktDVEwsIGNhcFtpKytdKTsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX1NMVENUTCwgY2FwW2krK10pOwogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfUlRDVEwsIGNhcFtpKytdKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX0RFVkNUTDIsIGNhcFtpKytdKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX0xOS0NUTDIsIGNhcFtpKytdKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX1NMVENUTDIsIGNhcFtpKytdKTsKIH0KIAogCkBAIC03MzIsNyArNzQyLDcgQEAKIAogCXNhdmVfc3RhdGUgPSBwY2lfZmluZF9zYXZlZF9jYXAoZGV2LCBQQ0lfQ0FQX0lEX1BDSVgpOwogCWlmICghc2F2ZV9zdGF0ZSkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgImJ1ZmZlciBub3QgZm91bmQgaW4gJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiYnVmZmVyIG5vdCBmb3VuZCBpbiAlc1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTgwNSw2ICs4MTUsNyBAQAogCX0KIAlwY2lfcmVzdG9yZV9wY2l4X3N0YXRlKGRldik7CiAJcGNpX3Jlc3RvcmVfbXNpX3N0YXRlKGRldik7CisJcGNpX3Jlc3RvcmVfaW92X3N0YXRlKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MDEsNyArMTQxMiw4IEBACiB7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBwY2lfYWRkX2NhcF9zYXZlX2J1ZmZlcihkZXYsIFBDSV9DQVBfSURfRVhQLCA0ICogc2l6ZW9mKHUxNikpOworCWVycm9yID0gcGNpX2FkZF9jYXBfc2F2ZV9idWZmZXIoZGV2LCBQQ0lfQ0FQX0lEX0VYUCwKKwkJCQkJUENJX0VYUF9TQVZFX1JFR1MgKiBzaXplb2YodTE2KSk7CiAJaWYgKGVycm9yKQogCQlkZXZfZXJyKCZkZXYtPmRldiwKIAkJCSJ1bmFibGUgdG8gcHJlYWxsb2NhdGUgUENJIEV4cHJlc3Mgc2F2ZSBidWZmZXJcbiIpOwpAQCAtMTQ3Miw3ICsxNDg0LDcgQEAKIAlpZiAoIXBpbikKIAkJcmV0dXJuIC0xOwogCi0Jd2hpbGUgKGRldi0+YnVzLT5zZWxmKSB7CisJd2hpbGUgKGRldi0+YnVzLT5wYXJlbnQpIHsKIAkJcGluID0gcGNpX3N3aXp6bGVfaW50ZXJydXB0X3BpbihkZXYsIHBpbik7CiAJCWRldiA9IGRldi0+YnVzLT5zZWxmOwogCX0KQEAgLTE0OTIsNyArMTUwNCw3IEBACiB7CiAJdTggcGluID0gKnBpbnA7CiAKLQl3aGlsZSAoZGV2LT5idXMtPnNlbGYpIHsKKwl3aGlsZSAoZGV2LT5idXMtPnBhcmVudCkgewogCQlwaW4gPSBwY2lfc3dpenpsZV9pbnRlcnJ1cHRfcGluKGRldiwgcGluKTsKIAkJZGV2ID0gZGV2LT5idXMtPnNlbGY7CiAJfQpAQCAtMjAxNiwxOCArMjAyOCwyNCBAQAogCXBjaV9ibG9ja191c2VyX2NmZ19hY2Nlc3MoZGV2KTsKIAogCS8qIFdhaXQgZm9yIFRyYW5zYWN0aW9uIFBlbmRpbmcgYml0IGNsZWFuICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBleHBwb3MgKyBQQ0lfRVhQX0RFVlNUQSwgJnN0YXR1cyk7CisJaWYgKCEoc3RhdHVzICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpKQorCQlnb3RvIHRyYW5zYWN0aW9uX2RvbmU7CisKIAltc2xlZXAoMTAwKTsKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGV4cHBvcyArIFBDSV9FWFBfREVWU1RBLCAmc3RhdHVzKTsKLQlpZiAoc3RhdHVzICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpIHsKLQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiQnVzeSBhZnRlciAxMDBtcyB3aGlsZSB0cnlpbmcgdG8gcmVzZXQ7ICIKLQkJCSJzbGVlcGluZyBmb3IgMSBzZWNvbmRcbiIpOwotCQlzc2xlZXAoMSk7Ci0JCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgZXhwcG9zICsgUENJX0VYUF9ERVZTVEEsICZzdGF0dXMpOwotCQlpZiAoc3RhdHVzICYgUENJX0VYUF9ERVZTVEFfVFJQTkQpCi0JCQlkZXZfaW5mbygmZGV2LT5kZXYsICJTdGlsbCBidXN5IGFmdGVyIDFzOyAiCi0JCQkJInByb2NlZWRpbmcgd2l0aCByZXNldCBhbnl3YXlcbiIpOwotCX0KKwlpZiAoIShzdGF0dXMgJiBQQ0lfRVhQX0RFVlNUQV9UUlBORCkpCisJCWdvdG8gdHJhbnNhY3Rpb25fZG9uZTsKIAorCWRldl9pbmZvKCZkZXYtPmRldiwgIkJ1c3kgYWZ0ZXIgMTAwbXMgd2hpbGUgdHJ5aW5nIHRvIHJlc2V0OyAiCisJCQkic2xlZXBpbmcgZm9yIDEgc2Vjb25kXG4iKTsKKwlzc2xlZXAoMSk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBleHBwb3MgKyBQQ0lfRVhQX0RFVlNUQSwgJnN0YXR1cyk7CisJaWYgKHN0YXR1cyAmIFBDSV9FWFBfREVWU1RBX1RSUE5EKQorCQlkZXZfaW5mbygmZGV2LT5kZXYsICJTdGlsbCBidXN5IGFmdGVyIDFzOyAiCisJCQkJInByb2NlZWRpbmcgd2l0aCByZXNldCBhbnl3YXlcbiIpOworCit0cmFuc2FjdGlvbl9kb25lOgogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGV4cHBvcyArIFBDSV9FWFBfREVWQ1RMLAogCQkJCVBDSV9FWFBfREVWQ1RMX0JDUl9GTFIpOwogCW1kZWxheSgxMDApOwpAQCAtMjA1NCwxOCArMjA3MiwyNCBAQAogCXBjaV9ibG9ja191c2VyX2NmZ19hY2Nlc3MoZGV2KTsKIAogCS8qIFdhaXQgZm9yIFRyYW5zYWN0aW9uIFBlbmRpbmcgYml0IGNsZWFuICovCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBjYXBwb3MgKyBQQ0lfQUZfU1RBVFVTLCAmc3RhdHVzKTsKKwlpZiAoIShzdGF0dXMgJiBQQ0lfQUZfU1RBVFVTX1RQKSkKKwkJZ290byB0cmFuc2FjdGlvbl9kb25lOworCiAJbXNsZWVwKDEwMCk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBjYXBwb3MgKyBQQ0lfQUZfU1RBVFVTLCAmc3RhdHVzKTsKLQlpZiAoc3RhdHVzICYgUENJX0FGX1NUQVRVU19UUCkgewotCQlkZXZfaW5mbygmZGV2LT5kZXYsICJCdXN5IGFmdGVyIDEwMG1zIHdoaWxlIHRyeWluZyB0byIKLQkJCQkiIHJlc2V0OyBzbGVlcGluZyBmb3IgMSBzZWNvbmRcbiIpOwotCQlzc2xlZXAoMSk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwKLQkJCQljYXBwb3MgKyBQQ0lfQUZfU1RBVFVTLCAmc3RhdHVzKTsKLQkJaWYgKHN0YXR1cyAmIFBDSV9BRl9TVEFUVVNfVFApCi0JCQlkZXZfaW5mbygmZGV2LT5kZXYsICJTdGlsbCBidXN5IGFmdGVyIDFzOyAiCi0JCQkJCSJwcm9jZWVkaW5nIHdpdGggcmVzZXQgYW55d2F5XG4iKTsKLQl9CisJaWYgKCEoc3RhdHVzICYgUENJX0FGX1NUQVRVU19UUCkpCisJCWdvdG8gdHJhbnNhY3Rpb25fZG9uZTsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgIkJ1c3kgYWZ0ZXIgMTAwbXMgd2hpbGUgdHJ5aW5nIHRvIgorCQkJIiByZXNldDsgc2xlZXBpbmcgZm9yIDEgc2Vjb25kXG4iKTsKKwlzc2xlZXAoMSk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBjYXBwb3MgKyBQQ0lfQUZfU1RBVFVTLCAmc3RhdHVzKTsKKwlpZiAoc3RhdHVzICYgUENJX0FGX1NUQVRVU19UUCkKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiU3RpbGwgYnVzeSBhZnRlciAxczsgIgorCQkJCSJwcm9jZWVkaW5nIHdpdGggcmVzZXQgYW55d2F5XG4iKTsKKwordHJhbnNhY3Rpb25fZG9uZToKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBjYXBwb3MgKyBQQ0lfQUZfQ1RSTCwgUENJX0FGX0NUUkxfRkxSKTsKIAltZGVsYXkoMTAwKTsKIApAQCAtMjMzNCwxOCArMjM1OCwxNDAgQEAKICAqLwogaW50IHBjaV9yZXNvdXJjZV9iYXIoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vLCBlbnVtIHBjaV9iYXJfdHlwZSAqdHlwZSkKIHsKKwlpbnQgcmVnOworCiAJaWYgKHJlc25vIDwgUENJX1JPTV9SRVNPVVJDRSkgewogCQkqdHlwZSA9IHBjaV9iYXJfdW5rbm93bjsKIAkJcmV0dXJuIFBDSV9CQVNFX0FERFJFU1NfMCArIDQgKiByZXNubzsKIAl9IGVsc2UgaWYgKHJlc25vID09IFBDSV9ST01fUkVTT1VSQ0UpIHsKIAkJKnR5cGUgPSBwY2lfYmFyX21lbTMyOwogCQlyZXR1cm4gZGV2LT5yb21fYmFzZV9yZWc7CisJfSBlbHNlIGlmIChyZXNubyA8IFBDSV9CUklER0VfUkVTT1VSQ0VTKSB7CisJCS8qIGRldmljZSBzcGVjaWZpYyByZXNvdXJjZSAqLworCQlyZWcgPSBwY2lfaW92X3Jlc291cmNlX2JhcihkZXYsIHJlc25vLCB0eXBlKTsKKwkJaWYgKHJlZykKKwkJCXJldHVybiByZWc7CiAJfQogCiAJZGV2X2VycigmZGV2LT5kZXYsICJCQVI6IGludmFsaWQgcmVzb3VyY2UgIyVkXG4iLCByZXNubyk7CiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgUkVTT1VSQ0VfQUxJR05NRU5UX1BBUkFNX1NJWkUgQ09NTUFORF9MSU5FX1NJWkUKK3N0YXRpYyBjaGFyIHJlc291cmNlX2FsaWdubWVudF9wYXJhbVtSRVNPVVJDRV9BTElHTk1FTlRfUEFSQU1fU0laRV0gPSB7MH07CitzcGlubG9ja190IHJlc291cmNlX2FsaWdubWVudF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworCisvKioKKyAqIHBjaV9zcGVjaWZpZWRfcmVzb3VyY2VfYWxpZ25tZW50IC0gZ2V0IHJlc291cmNlIGFsaWdubWVudCBzcGVjaWZpZWQgYnkgdXNlci4KKyAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlIHRvIGdldAorICoKKyAqIFJFVFVSTlM6IFJlc291cmNlIGFsaWdubWVudCBpZiBpdCBpcyBzcGVjaWZpZWQuCisgKiAgICAgICAgICBaZXJvIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCisgKi8KK3Jlc291cmNlX3NpemVfdCBwY2lfc3BlY2lmaWVkX3Jlc291cmNlX2FsaWdubWVudChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBzZWcsIGJ1cywgc2xvdCwgZnVuYywgYWxpZ25fb3JkZXIsIGNvdW50OworCXJlc291cmNlX3NpemVfdCBhbGlnbiA9IDA7CisJY2hhciAqcDsKKworCXNwaW5fbG9jaygmcmVzb3VyY2VfYWxpZ25tZW50X2xvY2spOworCXAgPSByZXNvdXJjZV9hbGlnbm1lbnRfcGFyYW07CisJd2hpbGUgKCpwKSB7CisJCWNvdW50ID0gMDsKKwkJaWYgKHNzY2FuZihwLCAiJWQlbiIsICZhbGlnbl9vcmRlciwgJmNvdW50KSA9PSAxICYmCisJCQkJCQkJcFtjb3VudF0gPT0gJ0AnKSB7CisJCQlwICs9IGNvdW50ICsgMTsKKwkJfSBlbHNlIHsKKwkJCWFsaWduX29yZGVyID0gLTE7CisJCX0KKwkJaWYgKHNzY2FuZihwLCAiJXg6JXg6JXguJXglbiIsCisJCQkmc2VnLCAmYnVzLCAmc2xvdCwgJmZ1bmMsICZjb3VudCkgIT0gNCkgeworCQkJc2VnID0gMDsKKwkJCWlmIChzc2NhbmYocCwgIiV4OiV4LiV4JW4iLAorCQkJCQkmYnVzLCAmc2xvdCwgJmZ1bmMsICZjb3VudCkgIT0gMykgeworCQkJCS8qIEludmFsaWQgZm9ybWF0ICovCisJCQkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IENhbid0IHBhcnNlIHJlc291cmNlX2FsaWdubWVudCBwYXJhbWV0ZXI6ICVzXG4iLAorCQkJCQlwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlwICs9IGNvdW50OworCQlpZiAoc2VnID09IHBjaV9kb21haW5fbnIoZGV2LT5idXMpICYmCisJCQlidXMgPT0gZGV2LT5idXMtPm51bWJlciAmJgorCQkJc2xvdCA9PSBQQ0lfU0xPVChkZXYtPmRldmZuKSAmJgorCQkJZnVuYyA9PSBQQ0lfRlVOQyhkZXYtPmRldmZuKSkgeworCQkJaWYgKGFsaWduX29yZGVyID09IC0xKSB7CisJCQkJYWxpZ24gPSBQQUdFX1NJWkU7CisJCQl9IGVsc2UgeworCQkJCWFsaWduID0gMSA8PCBhbGlnbl9vcmRlcjsKKwkJCX0KKwkJCS8qIEZvdW5kICovCisJCQlicmVhazsKKwkJfQorCQlpZiAoKnAgIT0gJzsnICYmICpwICE9ICcsJykgeworCQkJLyogRW5kIG9mIHBhcmFtIG9yIGludmFsaWQgZm9ybWF0ICovCisJCQlicmVhazsKKwkJfQorCQlwKys7CisJfQorCXNwaW5fdW5sb2NrKCZyZXNvdXJjZV9hbGlnbm1lbnRfbG9jayk7CisJcmV0dXJuIGFsaWduOworfQorCisvKioKKyAqIHBjaV9pc19yZWFzc2lnbmRldiAtIGNoZWNrIGlmIHNwZWNpZmllZCBQQ0kgaXMgdGFyZ2V0IGRldmljZSB0byByZWFzc2lnbgorICogQGRldjogdGhlIFBDSSBkZXZpY2UgdG8gY2hlY2sKKyAqCisgKiBSRVRVUk5TOiBub24temVybyBmb3IgUENJIGRldmljZSBpcyBhIHRhcmdldCBkZXZpY2UgdG8gcmVhc3NpZ24sCisgKiAgICAgICAgICBvciB6ZXJvIGlzIG5vdC4KKyAqLworaW50IHBjaV9pc19yZWFzc2lnbmRldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiAocGNpX3NwZWNpZmllZF9yZXNvdXJjZV9hbGlnbm1lbnQoZGV2KSAhPSAwKTsKK30KKworc3NpemVfdCBwY2lfc2V0X3Jlc291cmNlX2FsaWdubWVudF9wYXJhbShjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpZiAoY291bnQgPiBSRVNPVVJDRV9BTElHTk1FTlRfUEFSQU1fU0laRSAtIDEpCisJCWNvdW50ID0gUkVTT1VSQ0VfQUxJR05NRU5UX1BBUkFNX1NJWkUgLSAxOworCXNwaW5fbG9jaygmcmVzb3VyY2VfYWxpZ25tZW50X2xvY2spOworCXN0cm5jcHkocmVzb3VyY2VfYWxpZ25tZW50X3BhcmFtLCBidWYsIGNvdW50KTsKKwlyZXNvdXJjZV9hbGlnbm1lbnRfcGFyYW1bY291bnRdID0gJ1wwJzsKKwlzcGluX3VubG9jaygmcmVzb3VyY2VfYWxpZ25tZW50X2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3NpemVfdCBwY2lfZ2V0X3Jlc291cmNlX2FsaWdubWVudF9wYXJhbShjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXNpemVfdCBjb3VudDsKKwlzcGluX2xvY2soJnJlc291cmNlX2FsaWdubWVudF9sb2NrKTsKKwljb3VudCA9IHNucHJpbnRmKGJ1Ziwgc2l6ZSwgIiVzIiwgcmVzb3VyY2VfYWxpZ25tZW50X3BhcmFtKTsKKwlzcGluX3VubG9jaygmcmVzb3VyY2VfYWxpZ25tZW50X2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcGNpX3Jlc291cmNlX2FsaWdubWVudF9zaG93KHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHBjaV9nZXRfcmVzb3VyY2VfYWxpZ25tZW50X3BhcmFtKGJ1ZiwgUEFHRV9TSVpFKTsKK30KKworc3RhdGljIHNzaXplX3QgcGNpX3Jlc291cmNlX2FsaWdubWVudF9zdG9yZShzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHBjaV9zZXRfcmVzb3VyY2VfYWxpZ25tZW50X3BhcmFtKGJ1ZiwgY291bnQpOworfQorCitCVVNfQVRUUihyZXNvdXJjZV9hbGlnbm1lbnQsIDA2NDQsIHBjaV9yZXNvdXJjZV9hbGlnbm1lbnRfc2hvdywKKwkJCQkJcGNpX3Jlc291cmNlX2FsaWdubWVudF9zdG9yZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IHBjaV9yZXNvdXJjZV9hbGlnbm1lbnRfc3lzZnNfaW5pdCh2b2lkKQoreworCXJldHVybiBidXNfY3JlYXRlX2ZpbGUoJnBjaV9idXNfdHlwZSwKKwkJCQkJJmJ1c19hdHRyX3Jlc291cmNlX2FsaWdubWVudCk7Cit9CisKK2xhdGVfaW5pdGNhbGwocGNpX3Jlc291cmNlX2FsaWdubWVudF9zeXNmc19pbml0KTsKKwogc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaV9ub19kb21haW5zKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1BDSV9ET01BSU5TCkBAIC0yMzk0LDYgKzI1NDAsOSBAQAogCQkJCXBjaV9jYXJkYnVzX2lvX3NpemUgPSBtZW1wYXJzZShzdHIgKyA5LCAmc3RyKTsKIAkJCX0gZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiY2JtZW1zaXplPSIsIDEwKSkgewogCQkJCXBjaV9jYXJkYnVzX21lbV9zaXplID0gbWVtcGFyc2Uoc3RyICsgMTAsICZzdHIpOworCQkJfSBlbHNlIGlmICghc3RybmNtcChzdHIsICJyZXNvdXJjZV9hbGlnbm1lbnQ9IiwgMTkpKSB7CisJCQkJcGNpX3NldF9yZXNvdXJjZV9hbGlnbm1lbnRfcGFyYW0oc3RyICsgMTksCisJCQkJCQkJc3RybGVuKHN0ciArIDE5KSk7CiAJCQl9IGVsc2UgewogCQkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBVbmtub3duIG9wdGlvbiBgJXMnXG4iLAogCQkJCQkJc3RyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggMTQ5ZmZmNi4uZDAzZjZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKKysrIGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIERSSVZFUlNfUENJX0gKICNkZWZpbmUgRFJJVkVSU19QQ0lfSAogCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKICNkZWZpbmUgUENJX0NGR19TUEFDRV9TSVpFCTI1NgogI2RlZmluZSBQQ0lfQ0ZHX1NQQUNFX0VYUF9TSVpFCTQwOTYKIApAQCAtMTM1LDYgKzEzNywxMiBAQAogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBjaV9kZXZfYXR0cnNbXTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9jcHVhZmZpbml0eTsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9jcHVsaXN0YWZmaW5pdHk7CisjaWZkZWYgQ09ORklHX0hPVFBMVUcKK2V4dGVybiBzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSBwY2lfYnVzX2F0dHJzW107CisjZWxzZQorI2RlZmluZSBwY2lfYnVzX2F0dHJzCU5VTEwKKyNlbmRpZgorCiAKIC8qKgogICogcGNpX21hdGNoX29uZV9kZXZpY2UgLSBUZWxsIGlmIGEgUENJIGRldmljZSBzdHJ1Y3R1cmUgaGFzIGEgbWF0Y2hpbmcKQEAgLTE3Nyw2ICsxODUsNyBAQAogCXBjaV9iYXJfbWVtNjQsCQkvKiBBIDY0LWJpdCBtZW1vcnkgQkFSICovCiB9OwogCitleHRlcm4gaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gaW50IF9fcGNpX3JlYWRfYmFzZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHBjaV9iYXJfdHlwZSB0eXBlLAogCQkJCXN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgcmVnKTsKIGV4dGVybiBpbnQgcGNpX3Jlc291cmNlX2JhcihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8sCkBAIC0xOTQsNCArMjAzLDYwIEBACiAJcmV0dXJuIGJ1cy0+c2VsZiAmJiBidXMtPnNlbGYtPmFyaV9lbmFibGVkOwogfQogCisjaWZkZWYgQ09ORklHX1BDSV9RVUlSS1MKK2V4dGVybiBpbnQgcGNpX2lzX3JlYXNzaWduZGV2KHN0cnVjdCBwY2lfZGV2ICpkZXYpOworcmVzb3VyY2Vfc2l6ZV90IHBjaV9zcGVjaWZpZWRfcmVzb3VyY2VfYWxpZ25tZW50KHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgcGNpX2Rpc2FibGVfYnJpZGdlX3dpbmRvdyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKyNlbmRpZgorCisvKiBTaW5nbGUgUm9vdCBJL08gVmlydHVhbGl6YXRpb24gKi8KK3N0cnVjdCBwY2lfc3Jpb3YgeworCWludCBwb3M7CQkvKiBjYXBhYmlsaXR5IHBvc2l0aW9uICovCisJaW50IG5yZXM7CQkvKiBudW1iZXIgb2YgcmVzb3VyY2VzICovCisJdTMyIGNhcDsJCS8qIFNSLUlPViBDYXBhYmlsaXRpZXMgKi8KKwl1MTYgY3RybDsJCS8qIFNSLUlPViBDb250cm9sICovCisJdTE2IHRvdGFsOwkJLyogdG90YWwgVkZzIGFzc29jaWF0ZWQgd2l0aCB0aGUgUEYgKi8KKwl1MTYgaW5pdGlhbDsJCS8qIGluaXRpYWwgVkZzIGFzc29jaWF0ZWQgd2l0aCB0aGUgUEYgKi8KKwl1MTYgbnJfdmlydGZuOwkJLyogbnVtYmVyIG9mIFZGcyBhdmFpbGFibGUgKi8KKwl1MTYgb2Zmc2V0OwkJLyogZmlyc3QgVkYgUm91dGluZyBJRCBvZmZzZXQgKi8KKwl1MTYgc3RyaWRlOwkJLyogZm9sbG93aW5nIFZGIHN0cmlkZSAqLworCXUzMiBwZ3N6OwkJLyogcGFnZSBzaXplIGZvciBCQVIgYWxpZ25tZW50ICovCisJdTggbGluazsJCS8qIEZ1bmN0aW9uIERlcGVuZGVuY3kgTGluayAqLworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CS8qIGxvd2VzdCBudW1iZXJlZCBQRiAqLworCXN0cnVjdCBwY2lfZGV2ICpzZWxmOwkvKiB0aGlzIFBGICovCisJc3RydWN0IG11dGV4IGxvY2s7CS8qIGxvY2sgZm9yIFZGIGJ1cyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBtdGFzazsgLyogVkYgTWlncmF0aW9uIHRhc2sgKi8KKwl1OCBfX2lvbWVtICptc3RhdGU7CS8qIFZGIE1pZ3JhdGlvbiBTdGF0ZSBBcnJheSAqLworfTsKKworI2lmZGVmIENPTkZJR19QQ0lfSU9WCitleHRlcm4gaW50IHBjaV9pb3ZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIHBjaV9pb3ZfcmVsZWFzZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgcGNpX2lvdl9yZXNvdXJjZV9iYXIoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc25vLAorCQkJCWVudW0gcGNpX2Jhcl90eXBlICp0eXBlKTsKK2V4dGVybiB2b2lkIHBjaV9yZXN0b3JlX2lvdl9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgcGNpX2lvdl9idXNfcmFuZ2Uoc3RydWN0IHBjaV9idXMgKmJ1cyk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgcGNpX2lvdl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2lvdl9yZWxlYXNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCisKK3sKK30KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9pb3ZfcmVzb3VyY2VfYmFyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNubywKKwkJCQkgICAgICAgZW51bSBwY2lfYmFyX3R5cGUgKnR5cGUpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3Jlc3RvcmVfaW92X3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7Cit9CitzdGF0aWMgaW5saW5lIGludCBwY2lfaW92X2J1c19yYW5nZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19QQ0lfSU9WICovCisKICNlbmRpZiAvKiBEUklWRVJTX1BDSV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCmluZGV4IGUzOTA3MDcuLjMyYWRlNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCkBAIC0zOCwzMCArMzgsMTMgQEAKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGFlcl9wcm9iZSAoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsCi0JY29uc3Qgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2lkICppZCApOworc3RhdGljIGludCBfX2RldmluaXQgYWVyX3Byb2JlIChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBhZXJfcmVtb3ZlKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgYWVyX3N1c3BlbmQoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXtyZXR1cm4gMDt9Ci1zdGF0aWMgaW50IGFlcl9yZXN1bWUoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpIHtyZXR1cm4gMDt9CiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBhZXJfZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKmRldiwKIAllbnVtIHBjaV9jaGFubmVsX3N0YXRlIGVycm9yKTsKIHN0YXRpYyB2b2lkIGFlcl9lcnJvcl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldik7CiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBhZXJfcm9vdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAotLyoKLSAqIFBDSSBFeHByZXNzIGJ1cydzIEFFUiBSb290IHNlcnZpY2UgZHJpdmVyIGRhdGEgc3RydWN0dXJlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfaWQgYWVyX2lkW10gPSB7Ci0JewotCS52ZW5kb3IgCT0gUENJX0FOWV9JRCwKLQkuZGV2aWNlIAk9IFBDSV9BTllfSUQsCi0JLnBvcnRfdHlwZSAJPSBQQ0lFX1JDX1BPUlQsCi0JLnNlcnZpY2VfdHlwZSAJPSBQQ0lFX1BPUlRfU0VSVklDRV9BRVIsCi0JfSwKLQl7IC8qIGVuZDogYWxsIHplcm9lcyAqLyB9Ci19OwotCiBzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBhZXJfZXJyb3JfaGFuZGxlcnMgPSB7CiAJLmVycm9yX2RldGVjdGVkID0gYWVyX2Vycm9yX2RldGVjdGVkLAogCS5yZXN1bWUgPSBhZXJfZXJyb3JfcmVzdW1lLApAQCAtNjksMTQgKzUyLDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyIGFlcmRyaXZlciA9IHsKIAkubmFtZQkJPSAiYWVyIiwKLQkuaWRfdGFibGUJPSAmYWVyX2lkWzBdLAorCS5wb3J0X3R5cGUJPSBQQ0lFX0FOWV9QT1JULAorCS5zZXJ2aWNlCT0gUENJRV9QT1JUX1NFUlZJQ0VfQUVSLAogCiAJLnByb2JlCQk9IGFlcl9wcm9iZSwKIAkucmVtb3ZlCQk9IGFlcl9yZW1vdmUsCiAKLQkuc3VzcGVuZAk9IGFlcl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gYWVyX3Jlc3VtZSwKLQogCS5lcnJfaGFuZGxlcgk9ICZhZXJfZXJyb3JfaGFuZGxlcnMsCiAKIAkucmVzZXRfbGluawk9IGFlcl9yb290X3Jlc2V0LApAQCAtMjA3LDggKzE4OCw3IEBACiAgKgogICogSW52b2tlZCB3aGVuIFBDSSBFeHByZXNzIGJ1cyBsb2FkcyBBRVIgc2VydmljZSBkcml2ZXIuCiAgKiovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhZXJfcHJvYmUgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2LAotCQkJCWNvbnN0IHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCAqaWQgKQorc3RhdGljIGludCBfX2RldmluaXQgYWVyX3Byb2JlIChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldikKIHsKIAlpbnQgc3RhdHVzOwogCXN0cnVjdCBhZXJfcnBjICpycGM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2FjcGkuYwppbmRleCBlYmNlMjZjLi44ZWRiMmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9hY3BpLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAogCWhhbmRsZSA9IGFjcGlfZmluZF9yb290X2JyaWRnZV9oYW5kbGUocGRldik7CiAJaWYgKGhhbmRsZSkgewotCQlzdGF0dXMgPSBwY2lfb3NjX2NvbnRyb2xfc2V0KGhhbmRsZSwKKwkJc3RhdHVzID0gYWNwaV9wY2lfb3NjX2NvbnRyb2xfc2V0KGhhbmRsZSwKIAkJCQkJT1NDX1BDSV9FWFBSRVNTX0FFUl9DT05UUk9MIHwKIAkJCQkJT1NDX1BDSV9FWFBSRVNTX0NBUF9TVFJVQ1RVUkVfQ09OVFJPTCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKaW5kZXggMzgyNTc1MC4uMzA3NDUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCkBAIC0zNTEsMjEgKzM1MSwyMSBAQAogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXI7CiAJc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciAqc2VydmljZV9kcml2ZXI7Ci0Jc3RydWN0IHBjaWVfZGV2aWNlICpwY2llX2RldjsKIAlzdHJ1Y3QgZmluZF9hZXJfc2VydmljZV9kYXRhICpyZXN1bHQ7CiAKIAlyZXN1bHQgPSAoc3RydWN0IGZpbmRfYWVyX3NlcnZpY2VfZGF0YSAqKSBkYXRhOwogCiAJaWYgKGRldmljZS0+YnVzID09ICZwY2llX3BvcnRfYnVzX3R5cGUpIHsKLQkJcGNpZV9kZXYgPSB0b19wY2llX2RldmljZShkZXZpY2UpOwotCQlpZiAocGNpZV9kZXYtPmlkLnBvcnRfdHlwZSA9PSBQQ0lFX1NXX0RPV05TVFJFQU1fUE9SVCkKKwkJc3RydWN0IHBjaWVfcG9ydF9kYXRhICpwb3J0X2RhdGE7CisKKwkJcG9ydF9kYXRhID0gcGNpX2dldF9kcnZkYXRhKHRvX3BjaWVfZGV2aWNlKGRldmljZSktPnBvcnQpOworCQlpZiAocG9ydF9kYXRhLT5wb3J0X3R5cGUgPT0gUENJRV9TV19ET1dOU1RSRUFNX1BPUlQpCiAJCQlyZXN1bHQtPmlzX2Rvd25zdHJlYW0gPSAxOwogCiAJCWRyaXZlciA9IGRldmljZS0+ZHJpdmVyOwogCQlpZiAoZHJpdmVyKSB7CiAJCQlzZXJ2aWNlX2RyaXZlciA9IHRvX3NlcnZpY2VfZHJpdmVyKGRyaXZlcik7Ci0JCQlpZiAoc2VydmljZV9kcml2ZXItPmlkX3RhYmxlLT5zZXJ2aWNlX3R5cGUgPT0KLQkJCQkJUENJRV9QT1JUX1NFUlZJQ0VfQUVSKSB7CisJCQlpZiAoc2VydmljZV9kcml2ZXItPnNlcnZpY2UgPT0gUENJRV9QT1JUX1NFUlZJQ0VfQUVSKSB7CiAJCQkJcmVzdWx0LT5hZXJfZHJpdmVyID0gc2VydmljZV9kcml2ZXI7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnYuaCBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydi5oCmluZGV4IDI1MjlmM2YuLjE3YWQ1MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydi5oCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydi5oCkBAIC0yNSwxOSArMjUsMjEgQEAKICNkZWZpbmUgUENJRV9DQVBBQklMSVRJRVNfUkVHCQkweDIKICNkZWZpbmUgUENJRV9TTE9UX0NBUEFCSUxJVElFU19SRUcJMHgxNAogI2RlZmluZSBQQ0lFX1BPUlRfREVWSUNFX01BWFNFUlZJQ0VTCTQKKyNkZWZpbmUgUENJRV9QT1JUX01TSV9WRUNUT1JfTUFTSwkweDFmCisvKgorICogQWNjb3JkaW5nIHRvIHRoZSBQQ0kgRXhwcmVzcyBCYXNlIFNwZWNpZmljYXRpb24gMi4wLCB0aGUgaW5kaWNlcyBvZiB0aGUgTVNJLVgKKyAqIHRhYmxlIGVudGlyZXMgdXNlZCBieSBwb3J0IHNlcnZpY2VzIG11c3Qgbm90IGV4Y2VlZCAzMQorICovCisjZGVmaW5lIFBDSUVfUE9SVF9NQVhfTVNJWF9FTlRSSUVTCTMyCiAKICNkZWZpbmUgZ2V0X2Rlc2NyaXB0b3JfaWQodHlwZSwgc2VydmljZSkgKCgodHlwZSAtIDQpIDw8IDQpIHwgc2VydmljZSkKIAotc3RydWN0IHBjaWVfcG9ydF9kZXZpY2VfZXh0IHsKLQlpbnQgaW50ZXJydXB0X21vZGU7CS8qIFswOklOVHggfCAxOk1TSSB8IDI6TVNJLVhdICovCi19OwotCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIHBjaWVfcG9ydF9idXNfdHlwZTsKIGV4dGVybiBpbnQgcGNpZV9wb3J0X2RldmljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiBpbnQgcGNpZV9wb3J0X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKICNpZmRlZiBDT05GSUdfUE0KLWV4dGVybiBpbnQgcGNpZV9wb3J0X2RldmljZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1leHRlcm4gaW50IHBjaWVfcG9ydF9kZXZpY2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIGludCBwY2llX3BvcnRfZGV2aWNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcGNpZV9wb3J0X2RldmljZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKICNlbmRpZgogZXh0ZXJuIHZvaWQgcGNpZV9wb3J0X2RldmljZV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBwY2llX3BvcnRfYnVzX3JlZ2lzdGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2J1cy5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2J1cy5jCmluZGV4IGVlYzg5YjcuLmVmM2E0ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9idXMuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfYnVzLmMKQEAgLTI2LDIwICsyNiwyMiBAQAogc3RhdGljIGludCBwY2llX3BvcnRfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKIAlzdHJ1Y3QgcGNpZV9kZXZpY2UgKnBjaWVkZXY7CisJc3RydWN0IHBjaWVfcG9ydF9kYXRhICpwb3J0X2RhdGE7CiAJc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciAqZHJpdmVyOwogCiAJaWYgKGRydi0+YnVzICE9ICZwY2llX3BvcnRfYnVzX3R5cGUgfHwgZGV2LT5idXMgIT0gJnBjaWVfcG9ydF9idXNfdHlwZSkKIAkJcmV0dXJuIDA7Ci0JCisKIAlwY2llZGV2ID0gdG9fcGNpZV9kZXZpY2UoZGV2KTsKIAlkcml2ZXIgPSB0b19zZXJ2aWNlX2RyaXZlcihkcnYpOwotCWlmICggICAoZHJpdmVyLT5pZF90YWJsZS0+dmVuZG9yICE9IFBDSV9BTllfSUQgJiYgCi0JCWRyaXZlci0+aWRfdGFibGUtPnZlbmRvciAhPSBwY2llZGV2LT5pZC52ZW5kb3IpIHx8Ci0JICAgICAgIChkcml2ZXItPmlkX3RhYmxlLT5kZXZpY2UgIT0gUENJX0FOWV9JRCAmJgotCQlkcml2ZXItPmlkX3RhYmxlLT5kZXZpY2UgIT0gcGNpZWRldi0+aWQuZGV2aWNlKSB8fAkKLQkgICAgICAgKGRyaXZlci0+aWRfdGFibGUtPnBvcnRfdHlwZSAhPSBQQ0lFX0FOWV9QT1JUICYmCi0JCWRyaXZlci0+aWRfdGFibGUtPnBvcnRfdHlwZSAhPSBwY2llZGV2LT5pZC5wb3J0X3R5cGUpIHx8Ci0JCWRyaXZlci0+aWRfdGFibGUtPnNlcnZpY2VfdHlwZSAhPSBwY2llZGV2LT5pZC5zZXJ2aWNlX3R5cGUgKQorCisJaWYgKGRyaXZlci0+c2VydmljZSAhPSBwY2llZGV2LT5zZXJ2aWNlKQorCQlyZXR1cm4gMDsKKworCXBvcnRfZGF0YSA9IHBjaV9nZXRfZHJ2ZGF0YShwY2llZGV2LT5wb3J0KTsKKworCWlmIChkcml2ZXItPnBvcnRfdHlwZSAhPSBQQ0lFX0FOWV9QT1JUCisJICAgICAmJiBkcml2ZXItPnBvcnRfdHlwZSAhPSBwb3J0X2RhdGEtPnBvcnRfdHlwZSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCmluZGV4IDhiM2Y4YzEuLmUzOTk4MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwpAQCAtMTUsMTAgKzE1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpZXBvcnRfaWYuaD4KIAorI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInBvcnRkcnYuaCIKIAotZXh0ZXJuIGludCBwY2llX21jaF9xdWlyazsJLyogTVNJLXF1aXJrIEluZGljYXRvciAqLwotCiAvKioKICAqIHJlbGVhc2VfcGNpZV9kZXZpY2UgLSBmcmVlIFBDSSBFeHByZXNzIHBvcnQgc2VydmljZSBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAZGV2OiBQb3J0IHNlcnZpY2UgZGV2aWNlIHRvIHJlbGVhc2UKQEAgLTMxLDI2ICszMCwxNTAgQEAKIAlrZnJlZSh0b19wY2llX2RldmljZShkZXYpKTsJCQkKIH0KIAotc3RhdGljIGludCBpc19tc2lfcXVpcmtlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorLyoqCisgKiBwY2llX3BvcnRfbXNpeF9hZGRfZW50cnkgLSBhZGQgZW50cnkgdG8gZ2l2ZW4gYXJyYXkgb2YgTVNJLVggZW50cmllcworICogQGVudHJpZXM6IEFycmF5IG9mIE1TSS1YIGVudHJpZXMKKyAqIEBuZXdfZW50cnk6IEluZGV4IG9mIHRoZSBlbnRyeSB0byBhZGQgdG8gdGhlIGFycmF5CisgKiBAbnJfZW50cmllczogTnVtYmVyIG9mIGVudHJpZXMgYWxlYWR5IGluIHRoZSBhcnJheQorICoKKyAqIFJldHVybiB2YWx1ZTogUG9zaXRpb24gb2YgdGhlIGFkZGVkIGVudHJ5IGluIHRoZSBhcnJheQorICovCitzdGF0aWMgaW50IHBjaWVfcG9ydF9tc2l4X2FkZF9lbnRyeSgKKwlzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllcywgaW50IG5ld19lbnRyeSwgaW50IG5yX2VudHJpZXMpCiB7Ci0JaW50IHBvcnRfdHlwZSwgcXVpcmsgPSAwOwotCXUxNiByZWcxNjsKKwlpbnQgajsKIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgCi0JCXBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0VYUCkgKyAKLQkJUENJRV9DQVBBQklMSVRJRVNfUkVHLCAmcmVnMTYpOwotCXBvcnRfdHlwZSA9IChyZWcxNiA+PiA0KSAmIFBPUlRfVFlQRV9NQVNLOwotCXN3aXRjaChwb3J0X3R5cGUpIHsKLQljYXNlIFBDSUVfUkNfUE9SVDoKLQkJaWYgKHBjaWVfbWNoX3F1aXJrID09IDEpCi0JCQlxdWlyayA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgUENJRV9TV19VUFNUUkVBTV9QT1JUOgotCWNhc2UgUENJRV9TV19ET1dOU1RSRUFNX1BPUlQ6Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CQorCWZvciAoaiA9IDA7IGogPCBucl9lbnRyaWVzOyBqKyspCisJCWlmIChlbnRyaWVzW2pdLmVudHJ5ID09IG5ld19lbnRyeSkKKwkJCXJldHVybiBqOworCisJZW50cmllc1tqXS5lbnRyeSA9IG5ld19lbnRyeTsKKwlyZXR1cm4gajsKK30KKworLyoqCisgKiBwY2llX3BvcnRfZW5hYmxlX21zaXggLSB0cnkgdG8gc2V0IHVwIE1TSS1YIGFzIGludGVycnVwdCBtb2RlIGZvciBnaXZlbiBwb3J0CisgKiBAZGV2OiBQQ0kgRXhwcmVzcyBwb3J0IHRvIGhhbmRsZQorICogQHZlY3RvcnM6IEFycmF5IG9mIGludGVycnVwdCB2ZWN0b3JzIHRvIHBvcHVsYXRlCisgKiBAbWFzazogQml0bWFzayBvZiBwb3J0IGNhcGFiaWxpdGllcyByZXR1cm5lZCBieSBnZXRfcG9ydF9kZXZpY2VfY2FwYWJpbGl0eSgpCisgKgorICogUmV0dXJuIHZhbHVlOiAwIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IHBjaWVfcG9ydF9lbmFibGVfbXNpeChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgKnZlY3RvcnMsIGludCBtYXNrKQoreworCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CisJaW50IGlkeFtQQ0lFX1BPUlRfREVWSUNFX01BWFNFUlZJQ0VTXTsKKwlpbnQgbnJfZW50cmllcywgc3RhdHVzLCBwb3MsIGksIG52ZWM7CisJdTE2IHJlZzE2OworCXUzMiByZWczMjsKKworCW5yX2VudHJpZXMgPSBwY2lfbXNpeF90YWJsZV9zaXplKGRldik7CisJaWYgKCFucl9lbnRyaWVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobnJfZW50cmllcyA+IFBDSUVfUE9SVF9NQVhfTVNJWF9FTlRSSUVTKQorCQlucl9lbnRyaWVzID0gUENJRV9QT1JUX01BWF9NU0lYX0VOVFJJRVM7CisKKwltc2l4X2VudHJpZXMgPSBremFsbG9jKHNpemVvZigqbXNpeF9lbnRyaWVzKSAqIG5yX2VudHJpZXMsIEdGUF9LRVJORUwpOworCWlmICghbXNpeF9lbnRyaWVzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogQWxsb2NhdGUgYXMgbWFueSBlbnRyaWVzIGFzIHRoZSBwb3J0IHdhbnRzLCBzbyB0aGF0IHdlIGNhbiBjaGVjaworCSAqIHdoaWNoIG9mIHRoZW0gd2lsbCBiZSB1c2VmdWwuICBNb3Jlb3ZlciwgaWYgbnJfZW50cmllcyBpcyBjb3JyZWN0bHkKKwkgKiBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhpcyBwb3J0IGFjdHVhbGx5IHVzZXMsIHdlJ2xsIGhhcHBpbHkKKwkgKiBnbyB0aHJvdWdoIHdpdGhvdXQgYW55IHRyaWNrcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnJfZW50cmllczsgaSsrKQorCQltc2l4X2VudHJpZXNbaV0uZW50cnkgPSBpOworCisJc3RhdHVzID0gcGNpX2VuYWJsZV9tc2l4KGRldiwgbXNpeF9lbnRyaWVzLCBucl9lbnRyaWVzKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIEV4aXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJRV9QT1JUX0RFVklDRV9NQVhTRVJWSUNFUzsgaSsrKQorCQlpZHhbaV0gPSAtMTsKKwlzdGF0dXMgPSAtRUlPOworCW52ZWMgPSAwOworCisJaWYgKG1hc2sgJiAoUENJRV9QT1JUX1NFUlZJQ0VfUE1FIHwgUENJRV9QT1JUX1NFUlZJQ0VfSFApKSB7CisJCWludCBlbnRyeTsKKworCQkvKgorCQkgKiBUaGUgY29kZSBiZWxvdyBmb2xsb3dzIHRoZSBQQ0kgRXhwcmVzcyBCYXNlIFNwZWNpZmljYXRpb24gMi4wCisJCSAqIHN0YXRpbmcgaW4gU2VjdGlvbiA2LjEuNiB0aGF0ICJQTUUgYW5kIEhvdC1QbHVnIEV2ZW50CisJCSAqIGludGVycnVwdHMgKHdoZW4gYm90aCBhcmUgaW1wbGVtZW50ZWQpIGFsd2F5cyBzaGFyZSB0aGUgc2FtZQorCQkgKiBNU0kgb3IgTVNJLVggdmVjdG9yLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIEludGVycnVwdCBNZXNzYWdlCisJCSAqIE51bWJlciBmaWVsZCBpbiB0aGUgUENJIEV4cHJlc3MgQ2FwYWJpbGl0aWVzIHJlZ2lzdGVyIiwgd2hlcmUKKwkJICogYWNjb3JkaW5nIHRvIFNlY3Rpb24gNy44LjIgb2YgdGhlIHNwZWNpZmljYXRpb24gIkZvciBNU0ktWCwKKwkJICogdGhlIHZhbHVlIGluIHRoaXMgZmllbGQgaW5kaWNhdGVzIHdoaWNoIE1TSS1YIFRhYmxlIGVudHJ5IGlzCisJCSAqIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGludGVycnVwdCBtZXNzYWdlLiIKKwkJICovCisJCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJRV9DQVBBQklMSVRJRVNfUkVHLCAmcmVnMTYpOworCQllbnRyeSA9IChyZWcxNiA+PiA5KSAmIFBDSUVfUE9SVF9NU0lfVkVDVE9SX01BU0s7CisJCWlmIChlbnRyeSA+PSBucl9lbnRyaWVzKQorCQkJZ290byBFcnJvcjsKKworCQlpID0gcGNpZV9wb3J0X21zaXhfYWRkX2VudHJ5KG1zaXhfZW50cmllcywgZW50cnksIG52ZWMpOworCQlpZiAoaSA9PSBudmVjKQorCQkJbnZlYysrOworCisJCWlkeFtQQ0lFX1BPUlRfU0VSVklDRV9QTUVfU0hJRlRdID0gaTsKKwkJaWR4W1BDSUVfUE9SVF9TRVJWSUNFX0hQX1NISUZUXSA9IGk7CiAJfQotCXJldHVybiBxdWlyazsKKworCWlmIChtYXNrICYgUENJRV9QT1JUX1NFUlZJQ0VfQUVSKSB7CisJCWludCBlbnRyeTsKKworCQkvKgorCQkgKiBUaGUgY29kZSBiZWxvdyBmb2xsb3dzIFNlY3Rpb24gNy4xMC4xMCBvZiB0aGUgUENJIEV4cHJlc3MKKwkJICogQmFzZSBTcGVjaWZpY2F0aW9uIDIuMCBzdGF0aW5nIHRoYXQgYml0cyAzMS0yNyBvZiB0aGUgUm9vdAorCQkgKiBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgY29udGFpbiBhIHZhbHVlIGluZGljYXRpbmcgd2hpY2ggb2YgdGhlCisJCSAqIE1TSS9NU0ktWCB2ZWN0b3JzIGFzc2lnbmVkIHRvIHRoZSBwb3J0IGlzIGdvaW5nIHRvIGJlIHVzZWQKKwkJICogZm9yIEFFUiwgd2hlcmUgIkZvciBNU0ktWCwgdGhlIHZhbHVlIGluIHRoaXMgcmVnaXN0ZXIKKwkJICogaW5kaWNhdGVzIHdoaWNoIE1TSS1YIFRhYmxlIGVudHJ5IGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlCisJCSAqIGludGVycnVwdCBtZXNzYWdlLiIKKwkJICovCisJCXBvcyA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfRVJSKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX0VSUl9ST09UX1NUQVRVUywgJnJlZzMyKTsKKwkJZW50cnkgPSByZWczMiA+PiAyNzsKKwkJaWYgKGVudHJ5ID49IG5yX2VudHJpZXMpCisJCQlnb3RvIEVycm9yOworCisJCWkgPSBwY2llX3BvcnRfbXNpeF9hZGRfZW50cnkobXNpeF9lbnRyaWVzLCBlbnRyeSwgbnZlYyk7CisJCWlmIChpID09IG52ZWMpCisJCQludmVjKys7CisKKwkJaWR4W1BDSUVfUE9SVF9TRVJWSUNFX0FFUl9TSElGVF0gPSBpOworCX0KKworCS8qCisJICogSWYgbnZlYyBpcyBlcXVhbCB0byB0aGUgYWxsb2NhdGVkIG51bWJlciBvZiBlbnRyaWVzLCB3ZSBjYW4ganVzdCB1c2UKKwkgKiB3aGF0IHdlIGhhdmUuICBPdGhlcndpc2UsIHRoZSBwb3J0IGhhcyBzb21lIGV4dHJhIGVudHJpZXMgbm90IGZvciB0aGUKKwkgKiBzZXJ2aWNlcyB3ZSBrbm93IGFuZCB3ZSBuZWVkIHRvIHdvcmsgYXJvdW5kIHRoYXQuCisJICovCisJaWYgKG52ZWMgPT0gbnJfZW50cmllcykgeworCQlzdGF0dXMgPSAwOworCX0gZWxzZSB7CisJCS8qIERyb3AgdGhlIHRlbXBvcmFyeSBNU0ktWCBzZXR1cCAqLworCQlwY2lfZGlzYWJsZV9tc2l4KGRldik7CisKKwkJLyogTm93IGFsbG9jYXRlIHRoZSBNU0ktWCB2ZWN0b3JzIGZvciByZWFsICovCisJCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpeChkZXYsIG1zaXhfZW50cmllcywgbnZlYyk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIEV4aXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykKKwkJdmVjdG9yc1tpXSA9IGlkeFtpXSA+PSAwID8gbXNpeF9lbnRyaWVzW2lkeFtpXV0udmVjdG9yIDogLTE7CisKKyBFeGl0OgorCWtmcmVlKG1zaXhfZW50cmllcyk7CisJcmV0dXJuIHN0YXR1czsKKworIEVycm9yOgorCXBjaV9kaXNhYmxlX21zaXgoZGV2KTsKKwlnb3RvIEV4aXQ7CiB9CiAKIC8qKgpAQCAtNjQsNDcgKzE4NywzMiBAQAogICovCiBzdGF0aWMgaW50IGFzc2lnbl9pbnRlcnJ1cHRfbW9kZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgKnZlY3RvcnMsIGludCBtYXNrKQogewotCWludCBpLCBwb3MsIG52ZWMsIHN0YXR1cyA9IC1FSU5WQUw7Ci0JaW50IGludGVycnVwdF9tb2RlID0gUENJRV9QT1JUX0lOVHhfTU9ERTsKKwlzdHJ1Y3QgcGNpZV9wb3J0X2RhdGEgKnBvcnRfZGF0YSA9IHBjaV9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpcnEsIGludGVycnVwdF9tb2RlID0gUENJRV9QT1JUX05PX0lSUTsKKwlpbnQgaTsKIAotCS8qIFNldCBJTlR4IGFzIGRlZmF1bHQgKi8KLQlmb3IgKGkgPSAwLCBudmVjID0gMDsgaSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykgewotCQlpZiAobWFzayAmICgxIDw8IGkpKSAKLQkJCW52ZWMrKzsKLQkJdmVjdG9yc1tpXSA9IGRldi0+aXJxOwotCX0KLQkKIAkvKiBDaGVjayBNU0kgcXVpcmsgKi8KLQlpZiAoaXNfbXNpX3F1aXJrZWQoZGV2KSkKLQkJcmV0dXJuIGludGVycnVwdF9tb2RlOworCWlmIChwb3J0X2RhdGEtPnBvcnRfdHlwZSA9PSBQQ0lFX1JDX1BPUlQgJiYgcGNpZV9tY2hfcXVpcmspCisJCWdvdG8gRmFsbGJhY2s7CiAKLQkvKiBTZWxlY3QgTVNJLVggb3ZlciBNU0kgaWYgc3VwcG9ydGVkICovCQkKLQlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9NU0lYKTsKLQlpZiAocG9zKSB7Ci0JCXN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cmllc1tQQ0lFX1BPUlRfREVWSUNFX01BWFNFUlZJQ0VTXSA9IAotCQkJe3swLCAwfSwgezAsIDF9LCB7MCwgMn0sIHswLCAzfX07Ci0JCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpeChkZXYsIG1zaXhfZW50cmllcywgbnZlYyk7Ci0JCWlmICghc3RhdHVzKSB7Ci0JCQlpbnQgaiA9IDA7CisJLyogVHJ5IHRvIHVzZSBNU0ktWCBpZiBzdXBwb3J0ZWQgKi8KKwlpZiAoIXBjaWVfcG9ydF9lbmFibGVfbXNpeChkZXYsIHZlY3RvcnMsIG1hc2spKQorCQlyZXR1cm4gUENJRV9QT1JUX01TSVhfTU9ERTsKIAotCQkJaW50ZXJydXB0X21vZGUgPSBQQ0lFX1BPUlRfTVNJWF9NT0RFOwotCQkJZm9yIChpID0gMDsgaSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7IGkrKykgewotCQkJCWlmIChtYXNrICYgKDEgPDwgaSkpIAotCQkJCQl2ZWN0b3JzW2ldID0gbXNpeF9lbnRyaWVzW2orK10udmVjdG9yOwotCQkJfQotCQl9Ci0JfSAKLQlpZiAoc3RhdHVzKSB7Ci0JCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX01TSSk7Ci0JCWlmIChwb3MpIHsKLQkJCXN0YXR1cyA9IHBjaV9lbmFibGVfbXNpKGRldik7Ci0JCQlpZiAoIXN0YXR1cykgewotCQkJCWludGVycnVwdF9tb2RlID0gUENJRV9QT1JUX01TSV9NT0RFOwotCQkJCWZvciAoaSA9IDA7aSA8IFBDSUVfUE9SVF9ERVZJQ0VfTUFYU0VSVklDRVM7aSsrKQotCQkJCQl2ZWN0b3JzW2ldID0gZGV2LT5pcnE7Ci0JCQl9Ci0JCX0KLQl9IAorCS8qIFdlJ3JlIG5vdCBnb2luZyB0byB1c2UgTVNJLVgsIHNvIHRyeSBNU0kgYW5kIGZhbGwgYmFjayB0byBJTlR4ICovCisJaWYgKCFwY2lfZW5hYmxlX21zaShkZXYpKQorCQlpbnRlcnJ1cHRfbW9kZSA9IFBDSUVfUE9SVF9NU0lfTU9ERTsKKworIEZhbGxiYWNrOgorCWlmIChpbnRlcnJ1cHRfbW9kZSA9PSBQQ0lFX1BPUlRfTk9fSVJRICYmIGRldi0+cGluKQorCQlpbnRlcnJ1cHRfbW9kZSA9IFBDSUVfUE9SVF9JTlR4X01PREU7CisKKwlpcnEgPSBpbnRlcnJ1cHRfbW9kZSAhPSBQQ0lFX1BPUlRfTk9fSVJRID8gZGV2LT5pcnEgOiAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgUENJRV9QT1JUX0RFVklDRV9NQVhTRVJWSUNFUzsgaSsrKQorCQl2ZWN0b3JzW2ldID0gaXJxOworCisJdmVjdG9yc1tQQ0lFX1BPUlRfU0VSVklDRV9WQ19TSElGVF0gPSAtMTsKKwogCXJldHVybiBpbnRlcnJ1cHRfbW9kZTsKIH0KIApAQCAtMTMyLDEzICsyNDAsMTEgQEAKIAkJCXBvcyArIFBDSUVfU0xPVF9DQVBBQklMSVRJRVNfUkVHLCAmcmVnMzIpOwogCQlpZiAocmVnMzIgJiBTTE9UX0hQX0NBUEFCTEVfTUFTSykKIAkJCXNlcnZpY2VzIHw9IFBDSUVfUE9SVF9TRVJWSUNFX0hQOwotCX0gCi0JLyogUE1FIENhcGFibGUgLSByb290IHBvcnQgY2FwYWJpbGl0eSAqLwotCWlmICgoKHJlZzE2ID4+IDQpICYgUE9SVF9UWVBFX01BU0spID09IFBDSUVfUkNfUE9SVCkKLQkJc2VydmljZXMgfD0gUENJRV9QT1JUX1NFUlZJQ0VfUE1FOwotCisJfQorCS8qIEFFUiBjYXBhYmxlICovCiAJaWYgKHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KGRldiwgUENJX0VYVF9DQVBfSURfRVJSKSkKIAkJc2VydmljZXMgfD0gUENJRV9QT1JUX1NFUlZJQ0VfQUVSOworCS8qIFZDIHN1cHBvcnQgKi8KIAlpZiAocGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoZGV2LCBQQ0lfRVhUX0NBUF9JRF9WQykpCiAJCXNlcnZpY2VzIHw9IFBDSUVfUE9SVF9TRVJWSUNFX1ZDOwogCkBAIC0xNTIsMjAgKzI1OCwxNyBAQAogICogQHBvcnRfdHlwZTogVHlwZSBvZiB0aGUgcG9ydAogICogQHNlcnZpY2VfdHlwZTogVHlwZSBvZiBzZXJ2aWNlIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBzZXJ2aWNlIGRldmljZQogICogQGlycTogSW50ZXJydXB0IHZlY3RvciB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmljZSBkZXZpY2UKLSAqIEBpcnFfbW9kZTogSW50ZXJydXB0IG1vZGUgb2YgdGhlIHNlcnZpY2UgKElOVHgsIE1TSS1YLCBNU0kpCiAgKi8KIHN0YXRpYyB2b2lkIHBjaWVfZGV2aWNlX2luaXQoc3RydWN0IHBjaV9kZXYgKnBhcmVudCwgc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsIAotCWludCBwb3J0X3R5cGUsIGludCBzZXJ2aWNlX3R5cGUsIGludCBpcnEsIGludCBpcnFfbW9kZSkKKwlpbnQgc2VydmljZV90eXBlLCBpbnQgaXJxKQogeworCXN0cnVjdCBwY2llX3BvcnRfZGF0YSAqcG9ydF9kYXRhID0gcGNpX2dldF9kcnZkYXRhKHBhcmVudCk7CiAJc3RydWN0IGRldmljZSAqZGV2aWNlOworCWludCBwb3J0X3R5cGUgPSBwb3J0X2RhdGEtPnBvcnRfdHlwZTsKIAogCWRldi0+cG9ydCA9IHBhcmVudDsKLQlkZXYtPmludGVycnVwdF9tb2RlID0gaXJxX21vZGU7CiAJZGV2LT5pcnEgPSBpcnE7Ci0JZGV2LT5pZC52ZW5kb3IgPSBwYXJlbnQtPnZlbmRvcjsKLQlkZXYtPmlkLmRldmljZSA9IHBhcmVudC0+ZGV2aWNlOwotCWRldi0+aWQucG9ydF90eXBlID0gcG9ydF90eXBlOwotCWRldi0+aWQuc2VydmljZV90eXBlID0gKDEgPDwgc2VydmljZV90eXBlKTsKKwlkZXYtPnNlcnZpY2UgPSBzZXJ2aWNlX3R5cGU7CiAKIAkvKiBJbml0aWFsaXplIGdlbmVyaWMgZGV2aWNlIGludGVyZmFjZSAqLwogCWRldmljZSA9ICZkZXYtPmRldmljZTsKQEAgLTE4NSwxMCArMjg4LDkgQEAKICAqIEBwb3J0X3R5cGU6IFR5cGUgb2YgdGhlIHBvcnQKICAqIEBzZXJ2aWNlX3R5cGU6IFR5cGUgb2Ygc2VydmljZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2VydmljZSBkZXZpY2UKICAqIEBpcnE6IEludGVycnVwdCB2ZWN0b3IgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHNlcnZpY2UgZGV2aWNlCi0gKiBAaXJxX21vZGU6IEludGVycnVwdCBtb2RlIG9mIHRoZSBzZXJ2aWNlIChJTlR4LCBNU0ktWCwgTVNJKQogICovCiBzdGF0aWMgc3RydWN0IHBjaWVfZGV2aWNlKiBhbGxvY19wY2llX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGFyZW50LAotCWludCBwb3J0X3R5cGUsIGludCBzZXJ2aWNlX3R5cGUsIGludCBpcnEsIGludCBpcnFfbW9kZSkKKwlpbnQgc2VydmljZV90eXBlLCBpbnQgaXJxKQogewogCXN0cnVjdCBwY2llX2RldmljZSAqZGV2aWNlOwogCkBAIC0xOTYsNyArMjk4LDcgQEAKIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlwY2llX2RldmljZV9pbml0KHBhcmVudCwgZGV2aWNlLCBwb3J0X3R5cGUsIHNlcnZpY2VfdHlwZSwgaXJxLGlycV9tb2RlKTsKKwlwY2llX2RldmljZV9pbml0KHBhcmVudCwgZGV2aWNlLCBzZXJ2aWNlX3R5cGUsIGlycSk7CiAJcmV0dXJuIGRldmljZTsKIH0KIApAQCAtMjMwLDYzICszMzIsOTAgQEAKICAqLwogaW50IHBjaWVfcG9ydF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgcGNpZV9wb3J0X2RldmljZV9leHQgKnBfZXh0OwotCWludCBzdGF0dXMsIHR5cGUsIGNhcGFiaWxpdGllcywgaXJxX21vZGUsIGk7CisJc3RydWN0IHBjaWVfcG9ydF9kYXRhICpwb3J0X2RhdGE7CisJaW50IHN0YXR1cywgY2FwYWJpbGl0aWVzLCBpcnFfbW9kZSwgaSwgbnJfc2VydjsKIAlpbnQgdmVjdG9yc1tQQ0lFX1BPUlRfREVWSUNFX01BWFNFUlZJQ0VTXTsKIAl1MTYgcmVnMTY7CiAKLQkvKiBBbGxvY2F0ZSBwb3J0IGRldmljZSBleHRlbnNpb24gKi8KLQlpZiAoIShwX2V4dCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2llX3BvcnRfZGV2aWNlX2V4dCksIEdGUF9LRVJORUwpKSkKKwlwb3J0X2RhdGEgPSBremFsbG9jKHNpemVvZigqcG9ydF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3J0X2RhdGEpCiAJCXJldHVybiAtRU5PTUVNOwotCi0JcGNpX3NldF9kcnZkYXRhKGRldiwgcF9leHQpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIHBvcnRfZGF0YSk7CiAKIAkvKiBHZXQgcG9ydCB0eXBlICovCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LAogCQlwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApICsKIAkJUENJRV9DQVBBQklMSVRJRVNfUkVHLCAmcmVnMTYpOwotCXR5cGUgPSAocmVnMTYgPj4gNCkgJiBQT1JUX1RZUEVfTUFTSzsKKwlwb3J0X2RhdGEtPnBvcnRfdHlwZSA9IChyZWcxNiA+PiA0KSAmIFBPUlRfVFlQRV9NQVNLOwogCi0JLyogTm93IGdldCBwb3J0IHNlcnZpY2VzICovCiAJY2FwYWJpbGl0aWVzID0gZ2V0X3BvcnRfZGV2aWNlX2NhcGFiaWxpdHkoZGV2KTsKKwkvKiBSb290IHBvcnRzIGFyZSBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgUE1FIHRvbyAqLworCWlmIChwb3J0X2RhdGEtPnBvcnRfdHlwZSA9PSBQQ0lFX1JDX1BPUlQpCisJCWNhcGFiaWxpdGllcyB8PSBQQ0lFX1BPUlRfU0VSVklDRV9QTUU7CisKIAlpcnFfbW9kZSA9IGFzc2lnbl9pbnRlcnJ1cHRfbW9kZShkZXYsIHZlY3RvcnMsIGNhcGFiaWxpdGllcyk7Ci0JcF9leHQtPmludGVycnVwdF9tb2RlID0gaXJxX21vZGU7CisJaWYgKGlycV9tb2RlID09IFBDSUVfUE9SVF9OT19JUlEpIHsKKwkJLyoKKwkJICogRG9uJ3QgdXNlIHNlcnZpY2UgZGV2aWNlcyB0aGF0IHJlcXVpcmUgaW50ZXJydXB0cyBpZiB0aGVyZSBpcworCQkgKiBubyB3YXkgdG8gZ2VuZXJhdGUgdGhlbS4KKwkJICovCisJCWlmICghKGNhcGFiaWxpdGllcyAmIFBDSUVfUE9SVF9TRVJWSUNFX1ZDKSkgeworCQkJc3RhdHVzID0gLUVOT0RFVjsKKwkJCWdvdG8gRXJyb3I7CisJCX0KKwkJY2FwYWJpbGl0aWVzID0gUENJRV9QT1JUX1NFUlZJQ0VfVkM7CisJfQorCXBvcnRfZGF0YS0+cG9ydF9pcnFfbW9kZSA9IGlycV9tb2RlOworCisJc3RhdHVzID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIEVycm9yOworCXBjaV9zZXRfbWFzdGVyKGRldik7CiAKIAkvKiBBbGxvY2F0ZSBjaGlsZCBzZXJ2aWNlcyBpZiBhbnkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgUENJRV9QT1JUX0RFVklDRV9NQVhTRVJWSUNFUzsgaSsrKSB7CisJZm9yIChpID0gMCwgbnJfc2VydiA9IDA7IGkgPCBQQ0lFX1BPUlRfREVWSUNFX01BWFNFUlZJQ0VTOyBpKyspIHsKIAkJc3RydWN0IHBjaWVfZGV2aWNlICpjaGlsZDsKKwkJaW50IHNlcnZpY2UgPSAxIDw8IGk7CiAKLQkJaWYgKGNhcGFiaWxpdGllcyAmICgxIDw8IGkpKSB7Ci0JCQljaGlsZCA9IGFsbG9jX3BjaWVfZGV2aWNlKAotCQkJCWRldiwgCQkvKiBwYXJlbnQgKi8KLQkJCQl0eXBlLAkJLyogcG9ydCB0eXBlICovCi0JCQkJaSwJCS8qIHNlcnZpY2UgdHlwZSAqLwotCQkJCXZlY3RvcnNbaV0sCS8qIGlycSAqLwotCQkJCWlycV9tb2RlCS8qIGludGVycnVwdCBtb2RlICovKTsKLQkJCWlmIChjaGlsZCkgewotCQkJCXN0YXR1cyA9IGRldmljZV9yZWdpc3RlcigmY2hpbGQtPmRldmljZSk7Ci0JCQkJaWYgKHN0YXR1cykgewotCQkJCQlrZnJlZShjaGlsZCk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlnZXRfZGV2aWNlKCZjaGlsZC0+ZGV2aWNlKTsKLQkJCX0KKwkJaWYgKCEoY2FwYWJpbGl0aWVzICYgc2VydmljZSkpCisJCQljb250aW51ZTsKKworCQljaGlsZCA9IGFsbG9jX3BjaWVfZGV2aWNlKGRldiwgc2VydmljZSwgdmVjdG9yc1tpXSk7CisJCWlmICghY2hpbGQpCisJCQljb250aW51ZTsKKworCQlzdGF0dXMgPSBkZXZpY2VfcmVnaXN0ZXIoJmNoaWxkLT5kZXZpY2UpOworCQlpZiAoc3RhdHVzKSB7CisJCQlrZnJlZShjaGlsZCk7CisJCQljb250aW51ZTsKIAkJfQorCisJCWdldF9kZXZpY2UoJmNoaWxkLT5kZXZpY2UpOworCQlucl9zZXJ2Kys7CiAJfQorCWlmICghbnJfc2VydikgeworCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwkJZ290byBFcnJvcjsKKwl9CisKIAlyZXR1cm4gMDsKKworIEVycm9yOgorCWtmcmVlKHBvcnRfZGF0YSk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBzdXNwZW5kX2l0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgKnNlcnZpY2VfZHJpdmVyOwotCXBtX21lc3NhZ2VfdCBzdGF0ZSA9ICogKHBtX21lc3NhZ2VfdCAqKSBkYXRhOwogCiAgCWlmICgoZGV2LT5idXMgPT0gJnBjaWVfcG9ydF9idXNfdHlwZSkgJiYKICAJICAgIChkZXYtPmRyaXZlcikpIHsKICAJCXNlcnZpY2VfZHJpdmVyID0gdG9fc2VydmljZV9kcml2ZXIoZGV2LT5kcml2ZXIpOwogIAkJaWYgKHNlcnZpY2VfZHJpdmVyLT5zdXNwZW5kKQotIAkJCXNlcnZpY2VfZHJpdmVyLT5zdXNwZW5kKHRvX3BjaWVfZGV2aWNlKGRldiksIHN0YXRlKTsKKyAJCQlzZXJ2aWNlX2RyaXZlci0+c3VzcGVuZCh0b19wY2llX2RldmljZShkZXYpKTsKICAgCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTI5NCwxMSArNDIzLDEwIEBACiAvKioKICAqIHBjaWVfcG9ydF9kZXZpY2Vfc3VzcGVuZCAtIHN1c3BlbmQgcG9ydCBzZXJ2aWNlcyBhc3NvY2lhdGVkIHdpdGggYSBQQ0llIHBvcnQKICAqIEBkZXY6IFBDSSBFeHByZXNzIHBvcnQgdG8gaGFuZGxlCi0gKiBAc3RhdGU6IFJlcHJlc2VudGF0aW9uIG9mIHN5c3RlbSBwb3dlciBtYW5hZ2VtZW50IHRyYW5zaXRpb24gaW4gcHJvZ3Jlc3MKICAqLwotaW50IHBjaWVfcG9ydF9kZXZpY2Vfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitpbnQgcGNpZV9wb3J0X2RldmljZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZkZXYtPmRldiwgJnN0YXRlLCBzdXNwZW5kX2l0ZXIpOworCXJldHVybiBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoZGV2LCBOVUxMLCBzdXNwZW5kX2l0ZXIpOwogfQogCiBzdGF0aWMgaW50IHJlc3VtZV9pdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKQEAgLTMxOCwyNCArNDQ2LDE3IEBACiAgKiBwY2llX3BvcnRfZGV2aWNlX3N1c3BlbmQgLSByZXN1bWUgcG9ydCBzZXJ2aWNlcyBhc3NvY2lhdGVkIHdpdGggYSBQQ0llIHBvcnQKICAqIEBkZXY6IFBDSSBFeHByZXNzIHBvcnQgdG8gaGFuZGxlCiAgKi8KLWludCBwY2llX3BvcnRfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoraW50IHBjaWVfcG9ydF9kZXZpY2VfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZkZXYtPmRldiwgTlVMTCwgcmVzdW1lX2l0ZXIpOworCXJldHVybiBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoZGV2LCBOVUxMLCByZXN1bWVfaXRlcik7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBQTSAqLwogCiBzdGF0aWMgaW50IHJlbW92ZV9pdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyICpzZXJ2aWNlX2RyaXZlcjsKLQogCWlmIChkZXYtPmJ1cyA9PSAmcGNpZV9wb3J0X2J1c190eXBlKSB7Ci0JCWlmIChkZXYtPmRyaXZlcikgewotCQkJc2VydmljZV9kcml2ZXIgPSB0b19zZXJ2aWNlX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0JCQlpZiAoc2VydmljZV9kcml2ZXItPnJlbW92ZSkKLQkJCQlzZXJ2aWNlX2RyaXZlci0+cmVtb3ZlKHRvX3BjaWVfZGV2aWNlKGRldikpOwotCQl9Ci0JCSoodW5zaWduZWQgbG9uZyopZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKLQkJcmV0dXJuIDE7CisJCXB1dF9kZXZpY2UoZGV2KTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoZGV2KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0zNDksMjUgKzQ3MCwyMSBAQAogICovCiB2b2lkIHBjaWVfcG9ydF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2aWNlOwotCXVuc2lnbmVkIGxvbmcgZGV2aWNlX2FkZHI7Ci0JaW50IGludGVycnVwdF9tb2RlID0gUENJRV9QT1JUX0lOVHhfTU9ERTsKLQlpbnQgc3RhdHVzOworCXN0cnVjdCBwY2llX3BvcnRfZGF0YSAqcG9ydF9kYXRhID0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAKLQlkbyB7Ci0JCXN0YXR1cyA9IGRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2LT5kZXYsICZkZXZpY2VfYWRkciwgcmVtb3ZlX2l0ZXIpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQlkZXZpY2UgPSAoc3RydWN0IGRldmljZSopZGV2aWNlX2FkZHI7Ci0JCQlpbnRlcnJ1cHRfbW9kZSA9ICh0b19wY2llX2RldmljZShkZXZpY2UpKS0+aW50ZXJydXB0X21vZGU7Ci0JCQlwdXRfZGV2aWNlKGRldmljZSk7Ci0JCQlkZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQl9Ci0JfSB3aGlsZSAoc3RhdHVzKTsKLQkvKiBTd2l0Y2ggdG8gSU5UeCBieSBkZWZhdWx0IGlmIE1TSSBlbmFibGVkICovCi0JaWYgKGludGVycnVwdF9tb2RlID09IFBDSUVfUE9SVF9NU0lYX01PREUpCisJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZkZXYtPmRldiwgTlVMTCwgcmVtb3ZlX2l0ZXIpOworCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCisJc3dpdGNoIChwb3J0X2RhdGEtPnBvcnRfaXJxX21vZGUpIHsKKwljYXNlIFBDSUVfUE9SVF9NU0lYX01PREU6CiAJCXBjaV9kaXNhYmxlX21zaXgoZGV2KTsKLQllbHNlIGlmIChpbnRlcnJ1cHRfbW9kZSA9PSBQQ0lFX1BPUlRfTVNJX01PREUpCisJCWJyZWFrOworCWNhc2UgUENJRV9QT1JUX01TSV9NT0RFOgogCQlwY2lfZGlzYWJsZV9tc2koZGV2KTsKKwkJYnJlYWs7CisJfQorCisJa2ZyZWUocG9ydF9kYXRhKTsKIH0KIAogLyoqCkBAIC0zOTIsNyArNTA5LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlwY2llZGV2ID0gdG9fcGNpZV9kZXZpY2UoZGV2KTsKLQlzdGF0dXMgPSBkcml2ZXItPnByb2JlKHBjaWVkZXYsIGRyaXZlci0+aWRfdGFibGUpOworCXN0YXR1cyA9IGRyaXZlci0+cHJvYmUocGNpZWRldik7CiAJaWYgKCFzdGF0dXMpIHsKIAkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJzZXJ2aWNlIGRyaXZlciAlcyBsb2FkZWRcbiIsCiAJCQlkcml2ZXItPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCmluZGV4IDVlYTU2NmUuLmI5MjRlMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKQEAgLTMyLDExICszMiw2IEBACiAvKiBnbG9iYWwgZGF0YSAqLwogc3RhdGljIGNvbnN0IGNoYXIgZGV2aWNlX25hbWVbXSA9ICJwY2llcG9ydC1kcml2ZXIiOwogCi1zdGF0aWMgaW50IHBjaWVfcG9ydGRydl9zYXZlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXJldHVybiBwY2lfc2F2ZV9zdGF0ZShkZXYpOwotfQotCiBzdGF0aWMgaW50IHBjaWVfcG9ydGRydl9yZXN0b3JlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCWludCByZXR2YWw7CkBAIC00OSwyMSArNDQsMjEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBwY2llX3BvcnRkcnZfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JcmV0dXJuIHBjaWVfcG9ydF9kZXZpY2Vfc3VzcGVuZChkZXYsIHN0YXRlKTsKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBwY2llX3BvcnRkcnZfcG1fb3BzID0geworCS5zdXNwZW5kCT0gcGNpZV9wb3J0X2RldmljZV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcGNpZV9wb3J0X2RldmljZV9yZXN1bWUsCisJLmZyZWV6ZQkJPSBwY2llX3BvcnRfZGV2aWNlX3N1c3BlbmQsCisJLnRoYXcJCT0gcGNpZV9wb3J0X2RldmljZV9yZXN1bWUsCisJLnBvd2Vyb2ZmCT0gcGNpZV9wb3J0X2RldmljZV9zdXNwZW5kLAorCS5yZXN0b3JlCT0gcGNpZV9wb3J0X2RldmljZV9yZXN1bWUsCit9OwogCi19CisjZGVmaW5lIFBDSUVfUE9SVERSVl9QTV9PUFMJKCZwY2llX3BvcnRkcnZfcG1fb3BzKQogCi1zdGF0aWMgaW50IHBjaWVfcG9ydGRydl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlwY2lfc2V0X21hc3RlcihkZXYpOwotCXJldHVybiBwY2llX3BvcnRfZGV2aWNlX3Jlc3VtZShkZXYpOwotfQotI2Vsc2UKLSNkZWZpbmUgcGNpZV9wb3J0ZHJ2X3N1c3BlbmQgTlVMTAotI2RlZmluZSBwY2llX3BvcnRkcnZfcmVzdW1lIE5VTEwKLSNlbmRpZgorI2Vsc2UgLyogIVBNICovCisKKyNkZWZpbmUgUENJRV9QT1JURFJWX1BNX09QUwlOVUxMCisjZW5kaWYgLyogIVBNICovCiAKIC8qCiAgKiBwY2llX3BvcnRkcnZfcHJvYmUgLSBQcm9iZSBQQ0ktRXhwcmVzcyBwb3J0IGRldmljZXMKQEAgLTgyLDIwICs3NywxNSBAQAogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSA8IDApIAotCQlyZXR1cm4gLUVOT0RFVjsKLQkKLQlwY2lfc2V0X21hc3RlcihkZXYpOwogICAgICAgICBpZiAoIWRldi0+aXJxICYmIGRldi0+cGluKSB7CiAJCWRldl93YXJuKCZkZXYtPmRldiwgImRldmljZSBbJTA0eDolMDR4XSBoYXMgaW52YWxpZCBJUlE7ICIKIAkJCSAiY2hlY2sgdmVuZG9yIEJJT1NcbiIsIGRldi0+dmVuZG9yLCBkZXYtPmRldmljZSk7CiAJfQotCWlmIChwY2llX3BvcnRfZGV2aWNlX3JlZ2lzdGVyKGRldikpIHsKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlzdGF0dXMgPSBwY2llX3BvcnRfZGV2aWNlX3JlZ2lzdGVyKGRldik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKIAotCXBjaWVfcG9ydGRydl9zYXZlX2NvbmZpZyhkZXYpOworCXBjaV9zYXZlX3N0YXRlKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwNCw3ICs5NCw2IEBACiB7CiAJcGNpZV9wb3J0X2RldmljZV9yZW1vdmUoZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKLQlrZnJlZShwY2lfZ2V0X2RydmRhdGEoZGV2KSk7CiB9CiAKIHN0YXRpYyBpbnQgZXJyb3JfZGV0ZWN0ZWRfaXRlcihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHZvaWQgKmRhdGEpCkBAIC0yNzgsMTAgKzI2Nyw5IEBACiAJLnByb2JlCQk9IHBjaWVfcG9ydGRydl9wcm9iZSwKIAkucmVtb3ZlCQk9IHBjaWVfcG9ydGRydl9yZW1vdmUsCiAKLQkuc3VzcGVuZAk9IHBjaWVfcG9ydGRydl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gcGNpZV9wb3J0ZHJ2X3Jlc3VtZSwKLQogCS5lcnJfaGFuZGxlciAJPSAmcGNpZV9wb3J0ZHJ2X2Vycl9oYW5kbGVyLAorCisJLmRyaXZlci5wbSAJPSBQQ0lFX1BPUlREUlZfUE1fT1BTLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcGNpZV9wb3J0ZHJ2X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3Byb2JlLmMgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCmluZGV4IDU1ZWM0NGEuLmUyZjNkZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Byb2JlLmMKKysrIGIvZHJpdmVycy9wY2kvcHJvYmUuYwpAQCAtMjg3LDcgKzI4Nyw3IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGk7CiAKLQlpZiAoIWRldikJCS8qIEl0J3MgYSBob3N0IGJ1cywgbm90aGluZyB0byByZWFkICovCisJaWYgKCFjaGlsZC0+cGFyZW50KQkvKiBJdCdzIGEgaG9zdCBidXMsIG5vdGhpbmcgdG8gcmVhZCAqLwogCQlyZXR1cm47CiAKIAlpZiAoZGV2LT50cmFuc3BhcmVudCkgewpAQCAtNTExLDIxICs1MTEsMjEgQEAKIAogCQkvKgogCQkgKiBJZiB3ZSBhbHJlYWR5IGdvdCB0byB0aGlzIGJ1cyB0aHJvdWdoIGEgZGlmZmVyZW50IGJyaWRnZSwKLQkJICogaWdub3JlIGl0LiAgVGhpcyBjYW4gaGFwcGVuIHdpdGggdGhlIGk0NTBOWCBjaGlwc2V0LgorCQkgKiBkb24ndCByZS1hZGQgaXQuIFRoaXMgY2FuIGhhcHBlbiB3aXRoIHRoZSBpNDUwTlggY2hpcHNldC4KKwkJICoKKwkJICogSG93ZXZlciwgd2UgY29udGludWUgdG8gZGVzY2VuZCBkb3duIHRoZSBoaWVyYXJjaHkgYW5kCisJCSAqIHNjYW4gcmVtYWluaW5nIGNoaWxkIGJ1c2VzLgogCQkgKi8KLQkJaWYgKHBjaV9maW5kX2J1cyhwY2lfZG9tYWluX25yKGJ1cyksIGJ1c25yKSkgewotCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiYnVzICUwNHg6JTAyeCBhbHJlYWR5IGtub3duXG4iLAotCQkJCSBwY2lfZG9tYWluX25yKGJ1cyksIGJ1c25yKTsKLQkJCWdvdG8gb3V0OworCQljaGlsZCA9IHBjaV9maW5kX2J1cyhwY2lfZG9tYWluX25yKGJ1cyksIGJ1c25yKTsKKwkJaWYgKCFjaGlsZCkgeworCQkJY2hpbGQgPSBwY2lfYWRkX25ld19idXMoYnVzLCBkZXYsIGJ1c25yKTsKKwkJCWlmICghY2hpbGQpCisJCQkJZ290byBvdXQ7CisJCQljaGlsZC0+cHJpbWFyeSA9IGJ1c2VzICYgMHhGRjsKKwkJCWNoaWxkLT5zdWJvcmRpbmF0ZSA9IChidXNlcyA+PiAxNikgJiAweEZGOworCQkJY2hpbGQtPmJyaWRnZV9jdGwgPSBiY3RsOwogCQl9CiAKLQkJY2hpbGQgPSBwY2lfYWRkX25ld19idXMoYnVzLCBkZXYsIGJ1c25yKTsKLQkJaWYgKCFjaGlsZCkKLQkJCWdvdG8gb3V0OwotCQljaGlsZC0+cHJpbWFyeSA9IGJ1c2VzICYgMHhGRjsKLQkJY2hpbGQtPnN1Ym9yZGluYXRlID0gKGJ1c2VzID4+IDE2KSAmIDB4RkY7Ci0JCWNoaWxkLT5icmlkZ2VfY3RsID0gYmN0bDsKLQogCQljbWF4ID0gcGNpX3NjYW5fY2hpbGRfYnVzKGNoaWxkKTsKIAkJaWYgKGNtYXggPiBtYXgpCiAJCQltYXggPSBjbWF4OwpAQCAtNjc0LDYgKzY3NCwxOSBAQAogCWRldi0+aXJxID0gaXJxOwogfQogCitzdGF0aWMgdm9pZCBzZXRfcGNpZV9wb3J0X3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IHBvczsKKwl1MTYgcmVnMTY7CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuOworCXBkZXYtPmlzX3BjaWUgPSAxOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9FWFBfRkxBR1MsICZyZWcxNik7CisJcGRldi0+cGNpZV90eXBlID0gKHJlZzE2ICYgUENJX0VYUF9GTEFHU19UWVBFKSA+PiA0OworfQorCiAjZGVmaW5lIExFR0FDWV9JT19SRVNPVVJDRQkoSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfUENJX0ZJWEVEKQogCiAvKioKQEAgLTY4MywxMiArNjk2LDMzIEBACiAgKiBJbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0dXJlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRldmljZSdzIAogICogdmVuZG9yLGNsYXNzLG1lbW9yeSBhbmQgSU8tc3BhY2UgYWRkcmVzc2VzLElSUSBsaW5lcyBldGMuCiAgKiBDYWxsZWQgYXQgaW5pdGlhbGlzYXRpb24gb2YgdGhlIFBDSSBzdWJzeXN0ZW0gYW5kIGJ5IENhcmRCdXMgc2VydmljZXMuCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaWYgdW5rbm93biB0eXBlIG9mIGRldmljZSAobm90IG5vcm1hbCwgYnJpZGdlCi0gKiBvciBDYXJkQnVzKS4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCBuZWdhdGl2ZSBpZiB1bmtub3duIHR5cGUgb2YgZGV2aWNlIChub3Qgbm9ybWFsLAorICogYnJpZGdlIG9yIENhcmRCdXMpLgogICovCi1zdGF0aWMgaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKiBkZXYpCitpbnQgcGNpX3NldHVwX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUzMiBjbGFzczsKKwl1OCBoZHJfdHlwZTsKKwlzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3Q7CisKKwlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSEVBREVSX1RZUEUsICZoZHJfdHlwZSkpCisJCXJldHVybiAtRUlPOworCisJZGV2LT5zeXNkYXRhID0gZGV2LT5idXMtPnN5c2RhdGE7CisJZGV2LT5kZXYucGFyZW50ID0gZGV2LT5idXMtPmJyaWRnZTsKKwlkZXYtPmRldi5idXMgPSAmcGNpX2J1c190eXBlOworCWRldi0+aGRyX3R5cGUgPSBoZHJfdHlwZSAmIDB4N2Y7CisJZGV2LT5tdWx0aWZ1bmN0aW9uID0gISEoaGRyX3R5cGUgJiAweDgwKTsKKwlkZXYtPmVycm9yX3N0YXRlID0gcGNpX2NoYW5uZWxfaW9fbm9ybWFsOworCXNldF9wY2llX3BvcnRfdHlwZShkZXYpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzbG90LCAmZGV2LT5idXMtPnNsb3RzLCBsaXN0KQorCQlpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgPT0gc2xvdC0+bnVtYmVyKQorCQkJZGV2LT5zbG90ID0gc2xvdDsKKworCS8qIEFzc3VtZSAzMi1iaXQgUENJOyBsZXQgNjQtYml0IFBDSSBjYXJkcyAod2hpY2ggYXJlIGZhciByYXJlcikKKwkgICBzZXQgdGhpcyBoaWdoZXIsIGFzc3VtaW5nIHRoZSBzeXN0ZW0gZXZlbiBzdXBwb3J0cyBpdC4gICovCisJZGV2LT5kbWFfbWFzayA9IDB4ZmZmZmZmZmY7CiAKIAlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiJTA0eDolMDJ4OiUwMnguJWQiLCBwY2lfZG9tYWluX25yKGRldi0+YnVzKSwKIAkJICAgICBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChkZXYtPmRldmZuKSwKQEAgLTcwMywxMiArNzM3LDE0IEBACiAJZGV2X2RiZygmZGV2LT5kZXYsICJmb3VuZCBbJTA0eDolMDR4XSBjbGFzcyAlMDZ4IGhlYWRlciB0eXBlICUwMnhcbiIsCiAJCSBkZXYtPnZlbmRvciwgZGV2LT5kZXZpY2UsIGNsYXNzLCBkZXYtPmhkcl90eXBlKTsKIAorCS8qIG5lZWQgdG8gaGF2ZSBkZXYtPmNsYXNzIHJlYWR5ICovCisJZGV2LT5jZmdfc2l6ZSA9IHBjaV9jZmdfc3BhY2Vfc2l6ZShkZXYpOworCiAJLyogIlVua25vd24gcG93ZXIgc3RhdGUiICovCiAJZGV2LT5jdXJyZW50X3N0YXRlID0gUENJX1VOS05PV047CiAKIAkvKiBFYXJseSBmaXh1cHMsIGJlZm9yZSBwcm9iaW5nIHRoZSBCQVJzICovCiAJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZWFybHksIGRldik7Ci0JY2xhc3MgPSBkZXYtPmNsYXNzID4+IDg7CiAKIAlzd2l0Y2ggKGRldi0+aGRyX3R5cGUpIHsJCSAgICAvKiBoZWFkZXIgdHlwZSAqLwogCWNhc2UgUENJX0hFQURFUl9UWVBFX05PUk1BTDoJCSAgICAvKiBzdGFuZGFyZCBoZWFkZXIgKi8KQEAgLTc3MCw3ICs4MDYsNyBAQAogCWRlZmF1bHQ6CQkJCSAgICAvKiB1bmtub3duIGhlYWRlciAqLwogCQlkZXZfZXJyKCZkZXYtPmRldiwgInVua25vd24gaGVhZGVyIHR5cGUgJTAyeCwgIgogCQkJImlnbm9yaW5nIGRldmljZVxuIiwgZGV2LT5oZHJfdHlwZSk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FSU87CiAKIAliYWQ6CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiaWdub3JpbmcgY2xhc3MgJTAyeCAoZG9lc24ndCBtYXRjaCBoZWFkZXIgIgpAQCAtNzg1LDYgKzgyMSw3IEBACiBzdGF0aWMgdm9pZCBwY2lfcmVsZWFzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlwY2lfdnBkX3JlbGVhc2UoZGV2KTsKKwlwY2lfaW92X3JlbGVhc2UoZGV2KTsKIH0KIAogLyoqCkBAIC04MDMsMTkgKzg0MCw2IEBACiAJa2ZyZWUocGNpX2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9wY2llX3BvcnRfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlpbnQgcG9zOwotCXUxNiByZWcxNjsKLQotCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOwotCWlmICghcG9zKQotCQlyZXR1cm47Ci0JcGRldi0+aXNfcGNpZSA9IDE7Ci0JcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX0VYUF9GTEFHUywgJnJlZzE2KTsKLQlwZGV2LT5wY2llX3R5cGUgPSAocmVnMTYgJiBQQ0lfRVhQX0ZMQUdTX1RZUEUpID4+IDQ7Ci19Ci0KIC8qKgogICogcGNpX2NmZ19zcGFjZV9zaXplIC0gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIHNpemUgb2YgdGhlIFBDSSBkZXZpY2UuCiAgKiBAZGV2OiBQQ0kgZGV2aWNlCkBAIC04NDcsNiArODcxLDExIEBACiB7CiAJaW50IHBvczsKIAl1MzIgc3RhdHVzOworCXUxNiBjbGFzczsKKworCWNsYXNzID0gZGV2LT5jbGFzcyA+PiA4OworCWlmIChjbGFzcyA9PSBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QpCisJCXJldHVybiBwY2lfY2ZnX3NwYWNlX3NpemVfZXh0KGRldik7CiAKIAlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApOwogCWlmICghcG9zKSB7CkBAIC04OTEsOSArOTIwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqcGNpX3NjYW5fZGV2aWNlKHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBkZXZmbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCXN0cnVjdCBwY2lfc2xvdCAqc2xvdDsKIAl1MzIgbDsKLQl1OCBoZHJfdHlwZTsKIAlpbnQgZGVsYXkgPSAxOwogCiAJaWYgKHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQoYnVzLCBkZXZmbiwgUENJX1ZFTkRPUl9JRCwgJmwpKQpAQCAtOTIwLDM0ICs5NDcsMTYgQEAKIAkJfQogCX0KIAotCWlmIChwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUoYnVzLCBkZXZmbiwgUENJX0hFQURFUl9UWVBFLCAmaGRyX3R5cGUpKQotCQlyZXR1cm4gTlVMTDsKLQogCWRldiA9IGFsbG9jX3BjaV9kZXYoKTsKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7CiAKIAlkZXYtPmJ1cyA9IGJ1czsKLQlkZXYtPnN5c2RhdGEgPSBidXMtPnN5c2RhdGE7Ci0JZGV2LT5kZXYucGFyZW50ID0gYnVzLT5icmlkZ2U7Ci0JZGV2LT5kZXYuYnVzID0gJnBjaV9idXNfdHlwZTsKIAlkZXYtPmRldmZuID0gZGV2Zm47Ci0JZGV2LT5oZHJfdHlwZSA9IGhkcl90eXBlICYgMHg3ZjsKLQlkZXYtPm11bHRpZnVuY3Rpb24gPSAhIShoZHJfdHlwZSAmIDB4ODApOwogCWRldi0+dmVuZG9yID0gbCAmIDB4ZmZmZjsKIAlkZXYtPmRldmljZSA9IChsID4+IDE2KSAmIDB4ZmZmZjsKLQlkZXYtPmNmZ19zaXplID0gcGNpX2NmZ19zcGFjZV9zaXplKGRldik7Ci0JZGV2LT5lcnJvcl9zdGF0ZSA9IHBjaV9jaGFubmVsX2lvX25vcm1hbDsKLQlzZXRfcGNpZV9wb3J0X3R5cGUoZGV2KTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2xvdCwgJmJ1cy0+c2xvdHMsIGxpc3QpCi0JCWlmIChQQ0lfU0xPVChkZXZmbikgPT0gc2xvdC0+bnVtYmVyKQotCQkJZGV2LT5zbG90ID0gc2xvdDsKLQotCS8qIEFzc3VtZSAzMi1iaXQgUENJOyBsZXQgNjQtYml0IFBDSSBjYXJkcyAod2hpY2ggYXJlIGZhciByYXJlcikKLQkgICBzZXQgdGhpcyBoaWdoZXIsIGFzc3VtaW5nIHRoZSBzeXN0ZW0gZXZlbiBzdXBwb3J0cyBpdC4gICovCi0JZGV2LT5kbWFfbWFzayA9IDB4ZmZmZmZmZmY7Ci0JaWYgKHBjaV9zZXR1cF9kZXZpY2UoZGV2KSA8IDApIHsKKwlpZiAocGNpX3NldHVwX2RldmljZShkZXYpKSB7CiAJCWtmcmVlKGRldik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTk3Miw2ICs5ODEsOSBAQAogCiAJLyogQWx0ZXJuYXRpdmUgUm91dGluZy1JRCBGb3J3YXJkaW5nICovCiAJcGNpX2VuYWJsZV9hcmkoZGV2KTsKKworCS8qIFNpbmdsZSBSb290IEkvTyBWaXJ0dWFsaXphdGlvbiAqLworCXBjaV9pb3ZfaW5pdChkZXYpOwogfQogCiB2b2lkIHBjaV9kZXZpY2VfYWRkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBwY2lfYnVzICpidXMpCkBAIC0xMDA2LDYgKzEwMTgsMTIgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCisJZGV2ID0gcGNpX2dldF9zbG90KGJ1cywgZGV2Zm4pOworCWlmIChkZXYpIHsKKwkJcGNpX2Rldl9wdXQoZGV2KTsKKwkJcmV0dXJuIGRldjsKKwl9CisKIAlkZXYgPSBwY2lfc2Nhbl9kZXZpY2UoYnVzLCBkZXZmbik7CiAJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOwpAQCAtMTAyNCwzNSArMTA0MiwyNyBAQAogICogU2NhbiBhIFBDSSBzbG90IG9uIHRoZSBzcGVjaWZpZWQgUENJIGJ1cyBmb3IgZGV2aWNlcywgYWRkaW5nCiAgKiBkaXNjb3ZlcmVkIGRldmljZXMgdG8gdGhlIEBidXMtPmRldmljZXMgbGlzdC4gIE5ldyBkZXZpY2VzCiAgKiB3aWxsIG5vdCBoYXZlIGlzX2FkZGVkIHNldC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgbmV3IGRldmljZXMgZm91bmQuCiAgKi8KIGludCBwY2lfc2Nhbl9zbG90KHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBkZXZmbikKIHsKLQlpbnQgZnVuYywgbnIgPSAwOwotCWludCBzY2FuX2FsbF9mbnM7CisJaW50IGZuLCBuciA9IDA7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKIAotCXNjYW5fYWxsX2ZucyA9IHBjaWJpb3Nfc2Nhbl9hbGxfZm5zKGJ1cywgZGV2Zm4pOworCWRldiA9IHBjaV9zY2FuX3NpbmdsZV9kZXZpY2UoYnVzLCBkZXZmbik7CisJaWYgKGRldiAmJiAhZGV2LT5pc19hZGRlZCkJLyogbmV3IGRldmljZT8gKi8KKwkJbnIrKzsKIAotCWZvciAoZnVuYyA9IDA7IGZ1bmMgPCA4OyBmdW5jKyssIGRldmZuKyspIHsKLQkJc3RydWN0IHBjaV9kZXYgKmRldjsKLQotCQlkZXYgPSBwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKGJ1cywgZGV2Zm4pOwotCQlpZiAoZGV2KSB7Ci0JCQlucisrOwotCi0JCQkvKgotCQkgCSAqIElmIHRoaXMgaXMgYSBzaW5nbGUgZnVuY3Rpb24gZGV2aWNlLAotCQkgCSAqIGRvbid0IHNjYW4gcGFzdCB0aGUgZmlyc3QgZnVuY3Rpb24uCi0JCSAJICovCi0JCQlpZiAoIWRldi0+bXVsdGlmdW5jdGlvbikgewotCQkJCWlmIChmdW5jID4gMCkgewotCQkJCQlkZXYtPm11bHRpZnVuY3Rpb24gPSAxOwotCQkJCX0gZWxzZSB7Ci0gCQkJCQlicmVhazsKLQkJCQl9CisJaWYgKChkZXYgJiYgZGV2LT5tdWx0aWZ1bmN0aW9uKSB8fAorCSAgICAoIWRldiAmJiBwY2liaW9zX3NjYW5fYWxsX2ZucyhidXMsIGRldmZuKSkpIHsKKwkJZm9yIChmbiA9IDE7IGZuIDwgODsgZm4rKykgeworCQkJZGV2ID0gcGNpX3NjYW5fc2luZ2xlX2RldmljZShidXMsIGRldmZuICsgZm4pOworCQkJaWYgKGRldikgeworCQkJCWlmICghZGV2LT5pc19hZGRlZCkKKwkJCQkJbnIrKzsKKwkJCQlkZXYtPm11bHRpZnVuY3Rpb24gPSAxOwogCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGZ1bmMgPT0gMCAmJiAhc2Nhbl9hbGxfZm5zKQotCQkJCWJyZWFrOwogCQl9CiAJfQogCkBAIC0xMDc0LDEyICsxMDg0LDIxIEBACiAJZm9yIChkZXZmbiA9IDA7IGRldmZuIDwgMHgxMDA7IGRldmZuICs9IDgpCiAJCXBjaV9zY2FuX3Nsb3QoYnVzLCBkZXZmbik7CiAKKwkvKiBSZXNlcnZlIGJ1c2VzIGZvciBTUi1JT1YgY2FwYWJpbGl0eS4gKi8KKwltYXggKz0gcGNpX2lvdl9idXNfcmFuZ2UoYnVzKTsKKwogCS8qCiAJICogQWZ0ZXIgcGVyZm9ybWluZyBhcmNoLWRlcGVuZGVudCBmaXh1cCBvZiB0aGUgYnVzLCBsb29rIGJlaGluZAogCSAqIGFsbCBQQ0ktdG8tUENJIGJyaWRnZXMgb24gdGhpcyBidXMuCiAJICovCi0JcHJfZGVidWcoIlBDSTogRml4dXBzIGZvciBidXMgJTA0eDolMDJ4XG4iLCBwY2lfZG9tYWluX25yKGJ1cyksIGJ1cy0+bnVtYmVyKTsKLQlwY2liaW9zX2ZpeHVwX2J1cyhidXMpOworCWlmICghYnVzLT5pc19hZGRlZCkgeworCQlwcl9kZWJ1ZygiUENJOiBGaXh1cHMgZm9yIGJ1cyAlMDR4OiUwMnhcbiIsCisJCQkgcGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlcik7CisJCXBjaWJpb3NfZml4dXBfYnVzKGJ1cyk7CisJCWlmIChwY2lfaXNfcm9vdF9idXMoYnVzKSkKKwkJCWJ1cy0+aXNfYWRkZWQgPSAxOworCX0KKwogCWZvciAocGFzcz0wOyBwYXNzIDwgMjsgcGFzcysrKQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKIAkJCWlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UgfHwKQEAgLTExMTQsNyArMTEzMyw3IEBACiAJaWYgKCFiKQogCQlyZXR1cm4gTlVMTDsKIAotCWRldiA9IGttYWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYpewogCQlrZnJlZShiKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMTMzLDcgKzExNTIsNiBAQAogCWxpc3RfYWRkX3RhaWwoJmItPm5vZGUsICZwY2lfcm9vdF9idXNlcyk7CiAJdXBfd3JpdGUoJnBjaV9idXNfc2VtKTsKIAotCW1lbXNldChkZXYsIDAsIHNpemVvZigqZGV2KSk7CiAJZGV2LT5wYXJlbnQgPSBwYXJlbnQ7CiAJZGV2LT5yZWxlYXNlID0gcGNpX3JlbGVhc2VfYnVzX2JyaWRnZV9kZXY7CiAJZGV2X3NldF9uYW1lKGRldiwgInBjaSUwNHg6JTAyeCIsIHBjaV9kb21haW5fbnIoYiksIGJ1cyk7CkBAIC0xMTkzLDYgKzEyMTEsMzggQEAKIEVYUE9SVF9TWU1CT0wocGNpX3NjYW5fYnVzX3BhcmVudGVkKTsKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHCisvKioKKyAqIHBjaV9yZXNjYW5fYnVzIC0gc2NhbiBhIFBDSSBidXMgZm9yIGRldmljZXMuCisgKiBAYnVzOiBQQ0kgYnVzIHRvIHNjYW4KKyAqCisgKiBTY2FuIGEgUENJIGJ1cyBhbmQgY2hpbGQgYnVzZXMgZm9yIG5ldyBkZXZpY2VzLCBhZGRzIHRoZW0sCisgKiBhbmQgZW5hYmxlcyB0aGVtLgorICoKKyAqIFJldHVybnMgdGhlIG1heCBudW1iZXIgb2Ygc3Vib3JkaW5hdGUgYnVzIGRpc2NvdmVyZWQuCisgKi8KK3Vuc2lnbmVkIGludCBfX2RldmluaXQgcGNpX3Jlc2Nhbl9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwl1bnNpZ25lZCBpbnQgbWF4OworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisKKwltYXggPSBwY2lfc2Nhbl9jaGlsZF9idXMoYnVzKTsKKworCWRvd25fcmVhZCgmcGNpX2J1c19zZW0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkKKwkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSB8fAorCQkgICAgZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykKKwkJCWlmIChkZXYtPnN1Ym9yZGluYXRlKQorCQkJCXBjaV9idXNfc2l6ZV9icmlkZ2VzKGRldi0+c3Vib3JkaW5hdGUpOworCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKKworCXBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhidXMpOworCXBjaV9lbmFibGVfYnJpZGdlcyhidXMpOworCXBjaV9idXNfYWRkX2RldmljZXMoYnVzKTsKKworCXJldHVybiBtYXg7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfcmVzY2FuX2J1cyk7CisKIEVYUE9SVF9TWU1CT0wocGNpX2FkZF9uZXdfYnVzKTsKIEVYUE9SVF9TWU1CT0wocGNpX3NjYW5fc2xvdCk7CiBFWFBPUlRfU1lNQk9MKHBjaV9zY2FuX2JyaWRnZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDkyYjllZmUuLjliMmYwZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgInBjaS5oIgogCiBpbnQgaXNhX2RtYV9icmlkZ2VfYnVnZ3k7CkBAIC0zNCw2ICszNSw2NSBAQAogRVhQT1JUX1NZTUJPTChwY2llX21jaF9xdWlyayk7CiAKICNpZmRlZiBDT05GSUdfUENJX1FVSVJLUworLyoKKyAqIFRoaXMgcXVpcmsgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGRldmljZSBhbmQgcmVsZWFzZXMgcmVzb3VyY2VzCisgKiB3aGljaCBpcyBzcGVjaWZpZWQgYnkga2VybmVsJ3MgYm9vdCBwYXJhbWV0ZXIgJ3BjaT1yZXNvdXJjZV9hbGlnbm1lbnQ9Jy4KKyAqIEl0IGFsc28gcm91bmRzIHVwIHNpemUgdG8gc3BlY2lmaWVkIGFsaWdubWVudC4KKyAqIExhdGVyIG9uLCB0aGUga2VybmVsIHdpbGwgYXNzaWduIHBhZ2UtYWxpZ25lZCBtZW1vcnkgcmVzb3VyY2UgYmFjaworICogdG8gdGhhdCBkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19yZXNvdXJjZV9hbGlnbm1lbnQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJcmVzb3VyY2Vfc2l6ZV90IGFsaWduLCBzaXplOworCisJaWYgKCFwY2lfaXNfcmVhc3NpZ25kZXYoZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX05PUk1BTCAmJgorCSAgICAoZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QpIHsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJIkNhbid0IHJlYXNzaWduIHJlc291cmNlcyB0byBob3N0IGJyaWRnZS5cbiIpOworCQlyZXR1cm47CisJfQorCisJZGV2X2luZm8oJmRldi0+ZGV2LCAiRGlzYWJsaW5nIGRldmljZSBhbmQgcmVsZWFzZSByZXNvdXJjZXMuXG4iKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKworCWFsaWduID0gcGNpX3NwZWNpZmllZF9yZXNvdXJjZV9hbGlnbm1lbnQoZGV2KTsKKwlmb3IgKGk9MDsgaSA8IFBDSV9CUklER0VfUkVTT1VSQ0VTOyBpKyspIHsKKwkJciA9ICZkZXYtPnJlc291cmNlW2ldOworCQlpZiAoIShyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSkKKwkJCWNvbnRpbnVlOworCQlzaXplID0gcmVzb3VyY2Vfc2l6ZShyKTsKKwkJaWYgKHNpemUgPCBhbGlnbikgeworCQkJc2l6ZSA9IGFsaWduOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCSJSb3VuZGluZyB1cCBzaXplIG9mIHJlc291cmNlICMlZCB0byAlI2xseC5cbiIsCisJCQkJaSwgKHVuc2lnbmVkIGxvbmcgbG9uZylzaXplKTsKKwkJfQorCQlyLT5lbmQgPSBzaXplIC0gMTsKKwkJci0+c3RhcnQgPSAwOworCX0KKwkvKiBOZWVkIHRvIGRpc2FibGUgYnJpZGdlJ3MgcmVzb3VyY2Ugd2luZG93LAorCSAqIHRvIGVuYWJsZSB0aGUga2VybmVsIHRvIHJlYXNzaWduIG5ldyByZXNvdXJjZQorCSAqIHdpbmRvdyBsYXRlciBvbi4KKwkgKi8KKwlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFICYmCisJICAgIChkZXYtPmNsYXNzID4+IDgpID09IFBDSV9DTEFTU19CUklER0VfUENJKSB7CisJCWZvciAoaSA9IFBDSV9CUklER0VfUkVTT1VSQ0VTOyBpIDwgUENJX05VTV9SRVNPVVJDRVM7IGkrKykgeworCQkJciA9ICZkZXYtPnJlc291cmNlW2ldOworCQkJaWYgKCEoci0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkpCisJCQkJY29udGludWU7CisJCQlyLT5lbmQgPSByZXNvdXJjZV9zaXplKHIpIC0gMTsKKwkJCXItPnN0YXJ0ID0gMDsKKwkJfQorCQlwY2lfZGlzYWJsZV9icmlkZ2Vfd2luZG93KGRldik7CisJfQorfQorREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHF1aXJrX3Jlc291cmNlX2FsaWdubWVudCk7CisKIC8qIFRoZSBNZWxsYW5veCBUYXZvciBkZXZpY2UgZ2l2ZXMgZmFsc2UgcG9zaXRpdmUgcGFyaXR5IGVycm9ycwogICogTWFyayB0aGlzIGRldmljZSB3aXRoIGEgYnJva2VuX3Bhcml0eV9zdGF0dXMsIHRvIGFsbG93CiAgKiBQQ0kgc2Nhbm5pbmcgY29kZSB0byAic2tpcCIgdGhpcyBub3cgYmxhY2tsaXN0ZWQgZGV2aWNlLgpAQCAtMTEyNiwxMCArMTE4NiwxNSBAQAogCQkJCSAqIGl0cyBvbi1ib2FyZCBWR0EgY29udHJvbGxlciAqLwogCQkJCWFzdXNfaGlkZXNfc21idXMgPSAxOwogCQkJfQotCQllbHNlIGlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1R19JRykKKwkJZWxzZSBpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzIpCiAJCQlzd2l0Y2goZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKSB7CiAJCQljYXNlIDB4MDBiODogLyogQ29tcGFxIEV2byBENTEwIENNVCAqLwogCQkJY2FzZSAweDAwYjk6IC8qIENvbXBhcSBFdm8gRDUxMCBTRkYgKi8KKwkJCQkvKiBNb3RoZXJib2FyZCBkb2Vzbid0IGhhdmUgSG9zdCBicmlkZ2UKKwkJCQkgKiBzdWJ2ZW5kb3Ivc3ViZGV2aWNlIElEcyBhbmQgb24tYm9hcmQgVkdBCisJCQkJICogY29udHJvbGxlciBpcyBkaXNhYmxlZCBpZiBhbiBBR1AgY2FyZCBpcworCQkJCSAqIGluc2VydGVkLCB0aGVyZWZvcmUgY2hlY2tpbmcgVVNCIFVIQ0kKKwkJCQkgKiBDb250cm9sbGVyICMxICovCiAJCQkJYXN1c19oaWRlc19zbWJ1cyA9IDE7CiAJCQl9CiAJCWVsc2UgaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTVfQ0dDKQpAQCAtMTE1NCw3ICsxMjE5LDcgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTE1R01fSEIsIGFzdXNfaGlkZXNfc21idXNfaG9zdGJyaWRnZSk7CiAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODEwX0lHMywJYXN1c19oaWRlc19zbWJ1c19ob3N0YnJpZGdlKTsKLURFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1R19JRywJYXN1c19oaWRlc19zbWJ1c19ob3N0YnJpZGdlKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMiwJYXN1c19oaWRlc19zbWJ1c19ob3N0YnJpZGdlKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODE1X0NHQywJYXN1c19oaWRlc19zbWJ1c19ob3N0YnJpZGdlKTsKIAogc3RhdGljIHZvaWQgYXN1c19oaWRlc19zbWJ1c19scGMoc3RydWN0IHBjaV9kZXYgKmRldikKQEAgLTE2NjQsOSArMTcyOSwxMyBAQAogCSAqIG9mIHBhcmFsbGVsIHBvcnRzIGFuZCA8Uz4gaXMgdGhlIG51bWJlciBvZiBzZXJpYWwgcG9ydHMuCiAJICovCiAJc3dpdGNoIChkZXYtPmRldmljZSkgeworCWNhc2UgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNToKKwkJLyogV2VsbCwgdGhpcyBydWxlIGRvZXNuJ3QgaG9sZCBmb3IgdGhlIGZvbGxvd2luZyA5ODM1IGRldmljZSAqLworCQlpZiAoZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfSUJNICYmCisJCQkJZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDI5OSkKKwkJCXJldHVybjsKIAljYXNlIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3MzU6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX05FVE1PU185NzQ1OgotCWNhc2UgUENJX0RFVklDRV9JRF9ORVRNT1NfOTgzNToKIAljYXNlIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NDU6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX05FVE1PU185ODU1OgogCQlpZiAoKGRldi0+Y2xhc3MgPj4gOCkgPT0gUENJX0NMQVNTX0NPTU1VTklDQVRJT05fU0VSSUFMICYmCkBAIC0yMDc4LDYgKzIxNDcsOTIgQEAKIAkJCVBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNSwKIAkJCW52ZW5ldF9tc2lfZGlzYWJsZSk7CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGh0X2NoZWNrX21zaV9tYXBwaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHBvcywgdHRsID0gNDg7CisJaW50IGZvdW5kID0gMDsKKworCS8qIGNoZWNrIGlmIHRoZXJlIGlzIEhUIE1TSSBjYXAgb3IgZW5hYmxlZCBvbiB0aGlzIGRldmljZSAqLworCXBvcyA9IHBjaV9maW5kX2h0X2NhcGFiaWxpdHkoZGV2LCBIVF9DQVBUWVBFX01TSV9NQVBQSU5HKTsKKwl3aGlsZSAocG9zICYmIHR0bC0tKSB7CisJCXU4IGZsYWdzOworCisJCWlmIChmb3VuZCA8IDEpCisJCQlmb3VuZCA9IDE7CisJCWlmIChwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIHBvcyArIEhUX01TSV9GTEFHUywKKwkJCQkJICZmbGFncykgPT0gMCkgeworCQkJaWYgKGZsYWdzICYgSFRfTVNJX0ZMQUdTX0VOQUJMRSkgeworCQkJCWlmIChmb3VuZCA8IDIpIHsKKwkJCQkJZm91bmQgPSAyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJcG9zID0gcGNpX2ZpbmRfbmV4dF9odF9jYXBhYmlsaXR5KGRldiwgcG9zLAorCQkJCQkJICBIVF9DQVBUWVBFX01TSV9NQVBQSU5HKTsKKwl9CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhvc3RfYnJpZGdlX3dpdGhfbGVhZihzdHJ1Y3QgcGNpX2RldiAqaG9zdF9icmlkZ2UpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlpbnQgcG9zOworCWludCBpLCBkZXZfbm87CisJaW50IGZvdW5kID0gMDsKKworCWRldl9ubyA9IGhvc3RfYnJpZGdlLT5kZXZmbiA+PiAzOworCWZvciAoaSA9IGRldl9ubyArIDE7IGkgPCAweDIwOyBpKyspIHsKKwkJZGV2ID0gcGNpX2dldF9zbG90KGhvc3RfYnJpZGdlLT5idXMsIFBDSV9ERVZGTihpLCAwKSk7CisJCWlmICghZGV2KQorCQkJY29udGludWU7CisKKwkJLyogZm91bmQgbmV4dCBob3N0IGJyaWRnZSA/Ki8KKwkJcG9zID0gcGNpX2ZpbmRfaHRfY2FwYWJpbGl0eShkZXYsIEhUX0NBUFRZUEVfU0xBVkUpOworCQlpZiAocG9zICE9IDApIHsKKwkJCXBjaV9kZXZfcHV0KGRldik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChodF9jaGVja19tc2lfbWFwcGluZyhkZXYpKSB7CisJCQlmb3VuZCA9IDE7CisJCQlwY2lfZGV2X3B1dChkZXYpOworCQkJYnJlYWs7CisJCX0KKwkJcGNpX2Rldl9wdXQoZGV2KTsKKwl9CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKKyNkZWZpbmUgUENJX0hUX0NBUF9TTEFWRV9DVFJMMCAgICAgNCAgICAvKiBsaW5rIGNvbnRyb2wgKi8KKyNkZWZpbmUgUENJX0hUX0NBUF9TTEFWRV9DVFJMMSAgICAgOCAgICAvKiBsaW5rIGNvbnRyb2wgdG8gKi8KKworc3RhdGljIGludCBfX2RldmluaXQgaXNfZW5kX29mX2h0X2NoYWluKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHBvcywgY3RybF9vZmY7CisJaW50IGVuZCA9IDA7CisJdTE2IGZsYWdzLCBjdHJsOworCisJcG9zID0gcGNpX2ZpbmRfaHRfY2FwYWJpbGl0eShkZXYsIEhUX0NBUFRZUEVfU0xBVkUpOworCisJaWYgKCFwb3MpCisJCWdvdG8gb3V0OworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfQ0FQX0ZMQUdTLCAmZmxhZ3MpOworCisJY3RybF9vZmYgPSAoKGZsYWdzID4+IDEwKSAmIDEpID8KKwkJCVBDSV9IVF9DQVBfU0xBVkVfQ1RSTDAgOiBQQ0lfSFRfQ0FQX1NMQVZFX0NUUkwxOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgY3RybF9vZmYsICZjdHJsKTsKKworCWlmIChjdHJsICYgKDEgPDwgNikpCisJCWVuZCA9IDE7CisKK291dDoKKwlyZXR1cm4gZW5kOworfQorCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgbnZfaHRfZW5hYmxlX21zaV9tYXBwaW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmhvc3RfYnJpZGdlOwpAQCAtMjEwMiw2ICsyMjU3LDExIEBACiAJaWYgKCFmb3VuZCkKIAkJcmV0dXJuOwogCisJLyogZG9uJ3QgZW5hYmxlIGVuZF9kZXZpY2UvaG9zdF9icmlkZ2Ugd2l0aCBsZWFmIGRpcmVjdGx5IGhlcmUgKi8KKwlpZiAoaG9zdF9icmlkZ2UgPT0gZGV2ICYmIGlzX2VuZF9vZl9odF9jaGFpbihob3N0X2JyaWRnZSkgJiYKKwkgICAgaG9zdF9icmlkZ2Vfd2l0aF9sZWFmKGhvc3RfYnJpZGdlKSkKKwkJZ290byBvdXQ7CisKIAkvKiByb290IGRpZCB0aGF0ICEgKi8KIAlpZiAobXNpX2h0X2NhcF9lbmFibGVkKGhvc3RfYnJpZGdlKSkKIAkJZ290byBvdXQ7CkBAIC0yMTMyLDQ0ICsyMjkyLDEyIEBACiAJfQogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBodF9jaGVja19tc2lfbWFwcGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCBwb3MsIHR0bCA9IDQ4OwotCWludCBmb3VuZCA9IDA7Ci0KLQkvKiBjaGVjayBpZiB0aGVyZSBpcyBIVCBNU0kgY2FwIG9yIGVuYWJsZWQgb24gdGhpcyBkZXZpY2UgKi8KLQlwb3MgPSBwY2lfZmluZF9odF9jYXBhYmlsaXR5KGRldiwgSFRfQ0FQVFlQRV9NU0lfTUFQUElORyk7Ci0Jd2hpbGUgKHBvcyAmJiB0dGwtLSkgewotCQl1OCBmbGFnczsKLQotCQlpZiAoZm91bmQgPCAxKQotCQkJZm91bmQgPSAxOwotCQlpZiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBwb3MgKyBIVF9NU0lfRkxBR1MsCi0JCQkJCSAmZmxhZ3MpID09IDApIHsKLQkJCWlmIChmbGFncyAmIEhUX01TSV9GTEFHU19FTkFCTEUpIHsKLQkJCQlpZiAoZm91bmQgPCAyKSB7Ci0JCQkJCWZvdW5kID0gMjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXBvcyA9IHBjaV9maW5kX25leHRfaHRfY2FwYWJpbGl0eShkZXYsIHBvcywKLQkJCQkJCSAgSFRfQ0FQVFlQRV9NU0lfTUFQUElORyk7Ci0JfQotCi0JcmV0dXJuIGZvdW5kOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgbnZfbXNpX2h0X2NhcF9xdWlyayhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgX19kZXZpbml0IF9fbnZfbXNpX2h0X2NhcF9xdWlyayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgYWxsKQogewogCXN0cnVjdCBwY2lfZGV2ICpob3N0X2JyaWRnZTsKIAlpbnQgcG9zOwogCWludCBmb3VuZDsKIAotCS8qIEVuYWJsaW5nIEhUIE1TSSBtYXBwaW5nIG9uIHRoaXMgZGV2aWNlIGJyZWFrcyBNQ1A1MSAqLwotCWlmIChkZXYtPmRldmljZSA9PSAweDI3MCkKLQkJcmV0dXJuOwotCiAJLyogY2hlY2sgaWYgdGhlcmUgaXMgSFQgTVNJIGNhcCBvciBlbmFibGVkIG9uIHRoaXMgZGV2aWNlICovCiAJZm91bmQgPSBodF9jaGVja19tc2lfbWFwcGluZyhkZXYpOwogCkBAIC0yMTkzLDcgKzIzMjEsMTAgQEAKIAkJLyogSG9zdCBicmlkZ2UgaXMgdG8gSFQgKi8KIAkJaWYgKGZvdW5kID09IDEpIHsKIAkJCS8qIGl0IGlzIG5vdCBlbmFibGVkLCB0cnkgdG8gZW5hYmxlIGl0ICovCi0JCQludl9odF9lbmFibGVfbXNpX21hcHBpbmcoZGV2KTsKKwkJCWlmIChhbGwpCisJCQkJaHRfZW5hYmxlX21zaV9tYXBwaW5nKGRldik7CisJCQllbHNlCisJCQkJbnZfaHRfZW5hYmxlX21zaV9tYXBwaW5nKGRldik7CiAJCX0KIAkJcmV0dXJuOwogCX0KQEAgLTIyMDUsOCArMjMzNiwyMCBAQAogCS8qIEhvc3QgYnJpZGdlIGlzIG5vdCB0byBIVCwgZGlzYWJsZSBIVCBNU0kgbWFwcGluZyBvbiB0aGlzIGRldmljZSAqLwogCWh0X2Rpc2FibGVfbXNpX21hcHBpbmcoZGV2KTsKIH0KLURFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfQU5ZX0lELCBudl9tc2lfaHRfY2FwX3F1aXJrKTsKLURFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9BTllfSUQsIG52X21zaV9odF9jYXBfcXVpcmspOworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbnZfbXNpX2h0X2NhcF9xdWlya19hbGwoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gX19udl9tc2lfaHRfY2FwX3F1aXJrKGRldiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBudl9tc2lfaHRfY2FwX3F1aXJrX2xlYWYoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gX19udl9tc2lfaHRfY2FwX3F1aXJrKGRldiwgMCk7Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfQU5ZX0lELCBudl9tc2lfaHRfY2FwX3F1aXJrX2xlYWYpOworCitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfQU5ZX0lELCBudl9tc2lfaHRfY2FwX3F1aXJrX2FsbCk7CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19tc2lfaW50eF9kaXNhYmxlX2J1ZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcmVtb3ZlLmMgYi9kcml2ZXJzL3BjaS9yZW1vdmUuYwppbmRleCAwNDJlMDg5Li44NjUwM2MxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9yZW1vdmUuYworKysgYi9kcml2ZXJzL3BjaS9yZW1vdmUuYwpAQCAtNzEsNiArNzEsOSBAQAogCWRvd25fd3JpdGUoJnBjaV9idXNfc2VtKTsKIAlsaXN0X2RlbCgmcGNpX2J1cy0+bm9kZSk7CiAJdXBfd3JpdGUoJnBjaV9idXNfc2VtKTsKKwlpZiAoIXBjaV9idXMtPmlzX2FkZGVkKQorCQlyZXR1cm47CisKIAlwY2lfcmVtb3ZlX2xlZ2FjeV9maWxlcyhwY2lfYnVzKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBjaV9idXMtPmRldiwgJmRldl9hdHRyX2NwdWFmZmluaXR5KTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBjaV9idXMtPmRldiwgJmRldl9hdHRyX2NwdWxpc3RhZmZpbml0eSk7CkBAIC05Miw2ICs5NSw3IEBACiAgKi8KIHZvaWQgcGNpX3JlbW92ZV9idXNfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CisJcGNpX3N0b3BfYnVzX2RldmljZShkZXYpOwogCWlmIChkZXYtPnN1Ym9yZGluYXRlKSB7CiAJCXN0cnVjdCBwY2lfYnVzICpiID0gZGV2LT5zdWJvcmRpbmF0ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2VhcmNoLmMgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwppbmRleCA1YWY4YmQ1Li43MTBkNGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZWFyY2guYworKysgYi9kcml2ZXJzL3BjaS9zZWFyY2guYwpAQCAtMjksNyArMjksNyBAQAogCWlmIChwZGV2LT5pc19wY2llKQogCQlyZXR1cm4gTlVMTDsKIAl3aGlsZSAoMSkgewotCQlpZiAoIXBkZXYtPmJ1cy0+c2VsZikKKwkJaWYgKCFwZGV2LT5idXMtPnBhcmVudCkKIAkJCWJyZWFrOwogCQlwZGV2ID0gcGRldi0+YnVzLT5zZWxmOwogCQkvKiBhIHAycCBicmlkZ2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKaW5kZXggNzA0NjA4OS4uMzM0Mjg1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKIAotc3RhdGljIHZvaWQgcGJ1c19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChzdHJ1Y3QgcGNpX2J1cyAqYnVzKQorc3RhdGljIHZvaWQgcGJ1c19hc3NpZ25fcmVzb3VyY2VzX3NvcnRlZChjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CkBAIC0xNDQsNiArMTQ0LDkgQEAKIAlzdHJ1Y3QgcGNpX2J1c19yZWdpb24gcmVnaW9uOwogCXUzMiBsLCBidSwgbHUsIGlvX3VwcGVyMTY7CiAKKwlpZiAoIXBjaV9pc19yb290X2J1cyhidXMpICYmIGJ1cy0+aXNfYWRkZWQpCisJCXJldHVybjsKKwogCWRldl9pbmZvKCZicmlkZ2UtPmRldiwgIlBDSSBicmlkZ2UsIHNlY29uZGFyeSBidXMgJTA0eDolMDJ4XG4iLAogCQkgcGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlcik7CiAKQEAgLTQ5NSw3ICs0OTgsNyBAQAogfQogRVhQT1JUX1NZTUJPTChwY2lfYnVzX3NpemVfYnJpZGdlcyk7CiAKLXZvaWQgX19yZWYgcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKHN0cnVjdCBwY2lfYnVzICpidXMpCit2b2lkIF9fcmVmIHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfYnVzICpiOwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9zZXR1cC1yZXMuYyBiL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCmluZGV4IDMyZThkODguLjMwMzlmY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCisrKyBiL2RyaXZlcnMvcGNpL3NldHVwLXJlcy5jCkBAIC0xMjAsNiArMTIwLDIxIEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmZGVmIENPTkZJR19QQ0lfUVVJUktTCit2b2lkIHBjaV9kaXNhYmxlX2JyaWRnZV93aW5kb3coc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlkZXZfZGJnKCZkZXYtPmRldiwgIkRpc2FibGluZyBicmlkZ2Ugd2luZG93LlxuIik7CisKKwkvKiBNTUlPIEJhc2UvTGltaXQgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX01FTU9SWV9CQVNFLCAweDAwMDBmZmYwKTsKKworCS8qIFByZWZldGNoYWJsZSBNTUlPIEJhc2UvTGltaXQgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX1BSRUZfTElNSVRfVVBQRVIzMiwgMCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9QUkVGX01FTU9SWV9CQVNFLCAweDAwMDBmZmYwKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX1BSRUZfQkFTRV9VUFBFUjMyLCAweGZmZmZmZmZmKTsKK30KKyNlbmRpZgkvKiBDT05GSUdfUENJX1FVSVJLUyAqLworCiBpbnQgcGNpX2Fzc2lnbl9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8pCiB7CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IGRldi0+YnVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2xvdC5jIGIvZHJpdmVycy9wY2kvc2xvdC5jCmluZGV4IDVhOGNjYjQuLjIxMTg5NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Nsb3QuYworKysgYi9kcml2ZXJzL3BjaS9zbG90LmMKQEAgLTEsOCArMSw4IEBACiAvKgogICogZHJpdmVycy9wY2kvc2xvdC5jCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWF0dGhldyBXaWxjb3ggPG1hdHRoZXdAd2lsLmN4PgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KLSAqIAlBbGV4IENoaWFuZyA8YWNoaWFuZ0BocC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgorICoJQWxleCBDaGlhbmcgPGFjaGlhbmdAaHAuY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CkBAIC01Miw4ICs1Miw4IEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX3Nsb3QgKnNsb3QgPSB0b19wY2lfc2xvdChrb2JqKTsKIAotCXByX2RlYnVnKCIlczogcmVsZWFzaW5nIHBjaV9zbG90IG9uICV4OiVkXG4iLCBfX2Z1bmNfXywKLQkJIHNsb3QtPmJ1cy0+bnVtYmVyLCBzbG90LT5udW1iZXIpOworCWRldl9kYmcoJnNsb3QtPmJ1cy0+ZGV2LCAiZGV2ICUwMngsIHJlbGVhc2VkIHBoeXNpY2FsIHNsb3QgJXNcbiIsCisJCXNsb3QtPm51bWJlciwgcGNpX3Nsb3RfbmFtZShzbG90KSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnNsb3QtPmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpCiAJCWlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSBzbG90LT5udW1iZXIpCkBAIC0yNDgsOSArMjQ4LDggQEAKIAkJaWYgKFBDSV9TTE9UKGRldi0+ZGV2Zm4pID09IHNsb3RfbnIpCiAJCQlkZXYtPnNsb3QgPSBzbG90OwogCi0JLyogRG9uJ3QgY2FyZSBpZiBkZWJ1ZyBwcmludGsgaGFzIGEgLTEgZm9yIHNsb3RfbnIgKi8KLQlwcl9kZWJ1ZygiJXM6IGNyZWF0ZWQgcGNpX3Nsb3Qgb24gJTA0eDolMDJ4OiUwMnhcbiIsCi0JCSBfX2Z1bmNfXywgcGNpX2RvbWFpbl9ucihwYXJlbnQpLCBwYXJlbnQtPm51bWJlciwgc2xvdF9ucik7CisJZGV2X2RiZygmcGFyZW50LT5kZXYsICJkZXYgJTAyeCwgY3JlYXRlZCBwaHlzaWNhbCBzbG90ICVzXG4iLAorCQlzbG90X25yLCBwY2lfc2xvdF9uYW1lKHNsb3QpKTsKIAogb3V0OgogCWtmcmVlKHNsb3RfbmFtZSk7CkBAIC0yOTksOSArMjk4LDggQEAKICAqLwogdm9pZCBwY2lfZGVzdHJveV9zbG90KHN0cnVjdCBwY2lfc2xvdCAqc2xvdCkKIHsKLQlwcl9kZWJ1ZygiJXM6IGRlYyByZWZjb3VudCB0byAlZCBvbiAlMDR4OiUwMng6JTAyeFxuIiwgX19mdW5jX18sCi0JCSBhdG9taWNfcmVhZCgmc2xvdC0+a29iai5rcmVmLnJlZmNvdW50KSAtIDEsCi0JCSBwY2lfZG9tYWluX25yKHNsb3QtPmJ1cyksIHNsb3QtPmJ1cy0+bnVtYmVyLCBzbG90LT5udW1iZXIpOworCWRldl9kYmcoJnNsb3QtPmJ1cy0+ZGV2LCAiZGV2ICUwMngsIGRlYyByZWZjb3VudCB0byAlZFxuIiwKKwkJc2xvdC0+bnVtYmVyLCBhdG9taWNfcmVhZCgmc2xvdC0+a29iai5rcmVmLnJlZmNvdW50KSAtIDEpOwogCiAJZG93bl93cml0ZSgmcGNpX2J1c19zZW0pOwogCWtvYmplY3RfcHV0KCZzbG90LT5rb2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjU1LmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jCmluZGV4IDRlZDY0ZDguLjUxNDNhNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjU1LmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNTUuYwpAQCAtNjMsNyArNjMsNyBAQAogCQkJCSAgICAgICBzdHJ1Y3QgcGNtY2lhX3N0YXRlICpzdGF0ZSkKIHsKIAlpbnQgY2QgPSBza3QtPm5yID8gR1BJT19QQ01DSUFfUzFfQ0RfVkFMSUQgOiBHUElPX1BDTUNJQV9TMF9DRF9WQUxJRDsKLQlpbnQgcmR5ID0gc2t0LT5uciA/IEdQSU9fUENNQ0lBX1MwX1JEWUlOVCA6IEdQSU9fUENNQ0lBX1MxX1JEWUlOVDsKKwlpbnQgcmR5ID0gc2t0LT5uciA/IEdQSU9fUENNQ0lBX1MxX1JEWUlOVCA6IEdQSU9fUENNQ0lBX1MwX1JEWUlOVDsKIAogCXN0YXRlLT5kZXRlY3QgPSAhZ3Bpb19nZXRfdmFsdWUoY2QpOwogCXN0YXRlLT5yZWFkeSAgPSAhIWdwaW9fZ2V0X3ZhbHVlKHJkeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwppbmRleCAzNjA4MDgxLi4yODRlYmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKQEAgLTY3LDYgKzY3LDE2IEBACiAJVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciByZmtpbGwgYW5kIGJhY2tsaWdodCBjb250cm9sIHRvIERlbGwKIAlsYXB0b3BzLgogCitjb25maWcgREVMTF9XTUkKKwl0cmlzdGF0ZSAiRGVsbCBXTUkgZXh0cmFzIgorCWRlcGVuZHMgb24gQUNQSV9XTUkKKwlkZXBlbmRzIG9uIElOUFVUCisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IFdNSS1iYXNlZCBob3RrZXlzIG9uIERlbGwgbGFwdG9wcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgZGVsbC13bWkuCisKIGNvbmZpZyBGVUpJVFNVX0xBUFRPUAogCXRyaXN0YXRlICJGdWppdHN1IExhcHRvcCBFeHRyYXMiCiAJZGVwZW5kcyBvbiBBQ1BJCkBAIC0xNjUsNiArMTc1LDcgQEAKIAlkZXBlbmRzIG9uIEFDUEkKIAlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCWRlcGVuZHMgb24gSU5QVVQKKwlkZXBlbmRzIG9uIFJGS0lMTAogCSAgLS0taGVscC0tLQogCSAgVGhpcyBtaW5pLWRyaXZlciBkcml2ZXMgdGhlIFNOQyBhbmQgU1BJQyBkZXZpY2VzIHByZXNlbnQgaW4gdGhlIEFDUEkKIAkgIEJJT1Mgb2YgdGhlIFNvbnkgVmFpbyBsYXB0b3BzLgpAQCAtMjI2LDYgKzIzNywzMCBAQAogCiAJICBJZiB5b3UgYXJlIG5vdCBzdXJlLCBzYXkgTiBoZXJlLgogCitjb25maWcgVEhJTktQQURfQUNQSV9VTlNBRkVfTEVEUworCWJvb2wgIkFsbG93IGNvbnRyb2wgb2YgaW1wb3J0YW50IExFRHMgKHVuc2FmZSkiCisJZGVwZW5kcyBvbiBUSElOS1BBRF9BQ1BJCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgT3ZlcnJpZGluZyBMRUQgc3RhdGUgb24gVGhpbmtQYWRzIGNhbiBtYXNrIGltcG9ydGFudAorCSAgZmlybXdhcmUgYWxlcnRzIChsaWtlIGNyaXRpY2FsIGJhdHRlcnkgY29uZGl0aW9uKSwgb3IgbWlzbGVkCisJICB0aGUgdXNlciBpbnRvIGRhbWFnaW5nIHRoZSBoYXJkd2FyZSAodW5kb2NraW5nIG9yIGVqZWN0aW5nCisJICB0aGUgYmF5IHdoaWxlIGJ1c2VzIGFyZSBzdGlsbCBhY3RpdmUpLCBldGMuCisKKwkgIExFRCBjb250cm9sIG9uIHRoZSBUaGlua1BhZCBpcyB3cml0ZS1vbmx5ICh3aXRoIHZlcnkgZmV3CisJICBleGNlcHRpb25zIG9uIHZlcnkgYW5jaWVudCBtb2RlbHMpLCB3aGljaCBtYWtlcyBpdAorCSAgaW1wb3NzaWJsZSB0byBrbm93IGJlZm9yZWhhbmQgaWYgaW1wb3J0YW50IGluZm9ybWF0aW9uIHdpbGwKKwkgIGJlIGxvc3Qgd2hlbiBvbmUgY2hhbmdlcyBMRUQgc3RhdGUuCisKKwkgIFVzZXJzIHRoYXQga25vdyB3aGF0IHRoZXkgYXJlIGRvaW5nIGNhbiBlbmFibGUgdGhpcyBvcHRpb24KKwkgIGFuZCB0aGUgZHJpdmVyIHdpbGwgYWxsb3cgY29udHJvbCBvZiBldmVyeSBMRUQsIGluY2x1ZGluZworCSAgdGhlIG9uZXMgb24gdGhlIGRvY2sgc3RhdGlvbnMuCisKKwkgIE5ldmVyIGVuYWJsZSB0aGlzIG9wdGlvbiBvbiBhIGRpc3RyaWJ1dGlvbiBrZXJuZWwuCisKKwkgIFNheSBOIGhlcmUsIHVubGVzcyB5b3UgYXJlIGJ1aWxkaW5nIGEga2VybmVsIGZvciB5b3VyIG93bgorCSAgdXNlLCBhbmQgbmVlZCB0byBjb250cm9sIHRoZSBpbXBvcnRhbnQgZmlybXdhcmUgTEVEcy4KKwogY29uZmlnIFRISU5LUEFEX0FDUElfRE9DSwogCWJvb2wgIkxlZ2FjeSBEb2NraW5nIFN0YXRpb24gU3VwcG9ydCIKIAlkZXBlbmRzIG9uIFRISU5LUEFEX0FDUEkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L01ha2VmaWxlIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKaW5kZXggZTI5MDY1MS4uZTQwYzdiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiBvYmotJChDT05GSUdfTVNJX0xBUFRPUCkJKz0gbXNpLWxhcHRvcC5vCiBvYmotJChDT05GSUdfQ09NUEFMX0xBUFRPUCkJKz0gY29tcGFsLWxhcHRvcC5vCiBvYmotJChDT05GSUdfREVMTF9MQVBUT1ApCSs9IGRlbGwtbGFwdG9wLm8KK29iai0kKENPTkZJR19ERUxMX1dNSSkJCSs9IGRlbGwtd21pLm8KIG9iai0kKENPTkZJR19BQ0VSX1dNSSkJCSs9IGFjZXItd21pLm8KIG9iai0kKENPTkZJR19IUF9XTUkpCQkrPSBocC13bWkubwogb2JqLSQoQ09ORklHX1RDMTEwMF9XTUkpCSs9IHRjMTEwMC13bWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKaW5kZXggYTZhNDJlOC4uMGY2ZTQzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBBY2VyIFdNSSBMYXB0b3AgRXh0cmFzCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNy0yMDA4CUNhcmxvcyBDb3JiYWNobyA8Y2FybG9zQHN0cmFuZ2V3b3JsZHMuY28udWs+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkJQ2FybG9zIENvcmJhY2hvIDxjYXJsb3NAc3RyYW5nZXdvcmxkcy5jby51az4KICAqCiAgKiAgQmFzZWQgb24gYWNlcl9hY3BpOgogICogICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcJRS5NLiBTbWl0aApAQCAtMjI1LDYgKzIyNSwyNSBAQAogCS53aXJlbGVzcyA9IDIsCiB9OwogCisvKiBUaGUgQXNwaXJlIE9uZSBoYXMgYSBkdW1teSBBQ1BJLVdNSSBpbnRlcmZhY2UgLSBkaXNhYmxlIGl0ICovCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19kZXZpbml0ZGF0YSBhY2VyX2JsYWNrbGlzdFtdID0geworCXsKKwkJLmlkZW50ID0gIkFjZXIgQXNwaXJlIE9uZSAoU1NEKSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQWNlciIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBT0ExMTAiKSwKKwkJfSwKKwl9LAorCXsKKwkJLmlkZW50ID0gIkFjZXIgQXNwaXJlIE9uZSAoSEREKSIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQWNlciIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBT0ExNTAiKSwKKwkJfSwKKwl9LAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgYWNlcl9xdWlya3NbXSA9IHsKIAl7CiAJCS5jYWxsYmFjayA9IGRtaV9tYXRjaGVkLApAQCAtMTExNywxMSArMTEzNiwxNyBAQAogCX0KIAogCWVyciA9IGFjZXJfcmZraWxsX2luaXQoJmRldmljZS0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yX3Jma2lsbDsKIAogCXJldHVybiBlcnI7CiAKK2Vycm9yX3Jma2lsbDoKKwlpZiAoaGFzX2NhcChBQ0VSX0NBUF9CUklHSFRORVNTKSkKKwkJYWNlcl9iYWNrbGlnaHRfZXhpdCgpOwogZXJyb3JfYnJpZ2h0bmVzczoKLQlhY2VyX2xlZF9leGl0KCk7CisJaWYgKGhhc19jYXAoQUNFUl9DQVBfTUFJTExFRCkpCisJCWFjZXJfbGVkX2V4aXQoKTsKIGVycm9yX21haWxsZWQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTEyNTQsNiArMTI3OSwxMiBAQAogCiAJcHJpbnRrKEFDRVJfSU5GTyAiQWNlciBMYXB0b3AgQUNQSS1XTUkgRXh0cmFzXG4iKTsKIAorCWlmIChkbWlfY2hlY2tfc3lzdGVtKGFjZXJfYmxhY2tsaXN0KSkgeworCQlwcmludGsoQUNFUl9JTkZPICJCbGFja2xpc3RlZCBoYXJkd2FyZSBkZXRlY3RlZCAtICIKKwkJCQkibm90IGxvYWRpbmdcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlmaW5kX3F1aXJrcygpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLXdtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYWI5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLXdtaS5jCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogRGVsbCBXTUkgaG90a2V5cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0IDxtamdAcmVkaGF0LmNvbT4KKyAqCisgKiBQb3J0aW9ucyBiYXNlZCBvbiB3aXN0cm9uX2J0bnMuYzoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBNaWxvc2xhdiBUcm1hYyA8bWl0ckB2b2xueS5jej4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBCZXJuaGFyZCBSb3NlbmtyYWVuemVyIDxiZXJvQGFya2xpbnV4Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBEbWl0cnkgVG9yb2tob3YgPGR0b3JAbWFpbC5ydT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworTU9EVUxFX0FVVEhPUigiTWF0dGhldyBHYXJyZXR0IDxtamdAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRGVsbCBsYXB0b3AgV01JIGhvdGtleXMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNkZWZpbmUgREVMTF9FVkVOVF9HVUlEICI5REJCNTk5NC1BOTk3LTExREEtQjAxMi1CNjIyQTFFRjU0OTIiCisKK01PRFVMRV9BTElBUygid21pOiJERUxMX0VWRU5UX0dVSUQpOworCitzdHJ1Y3Qga2V5X2VudHJ5IHsKKwljaGFyIHR5cGU7CQkvKiBTZWUgS0VfKiBiZWxvdyAqLworCXUxNiBjb2RlOworCXUxNiBrZXljb2RlOworfTsKKworZW51bSB7IEtFX0tFWSwgS0VfU1csIEtFX0VORCB9OworCitzdGF0aWMgc3RydWN0IGtleV9lbnRyeSBkZWxsX3dtaV9rZXltYXBbXSA9IHsKKwl7S0VfS0VZLCAweGUwNDUsIEtFWV9QUk9HMX0sCisJe0tFX0VORCwgMH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5wdXRfZGV2ICpkZWxsX3dtaV9pbnB1dF9kZXY7CisKK3N0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICpkZWxsX3dtaV9nZXRfZW50cnlfYnlfc2NhbmNvZGUoaW50IGNvZGUpCit7CisJc3RydWN0IGtleV9lbnRyeSAqa2V5OworCisJZm9yIChrZXkgPSBkZWxsX3dtaV9rZXltYXA7IGtleS0+dHlwZSAhPSBLRV9FTkQ7IGtleSsrKQorCQlpZiAoY29kZSA9PSBrZXktPmNvZGUpCisJCQlyZXR1cm4ga2V5OworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICpkZWxsX3dtaV9nZXRfZW50cnlfYnlfa2V5Y29kZShpbnQga2V5Y29kZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisKKwlmb3IgKGtleSA9IGRlbGxfd21pX2tleW1hcDsga2V5LT50eXBlICE9IEtFX0VORDsga2V5KyspCisJCWlmIChrZXktPnR5cGUgPT0gS0VfS0VZICYmIGtleWNvZGUgPT0ga2V5LT5rZXljb2RlKQorCQkJcmV0dXJuIGtleTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGRlbGxfd21pX2dldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsCisJCQkgICAgICAgaW50ICprZXljb2RlKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleSA9IGRlbGxfd21pX2dldF9lbnRyeV9ieV9zY2FuY29kZShzY2FuY29kZSk7CisKKwlpZiAoa2V5ICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpIHsKKwkJKmtleWNvZGUgPSBrZXktPmtleWNvZGU7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGRlbGxfd21pX3NldGtleWNvZGUoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgc2NhbmNvZGUsIGludCBrZXljb2RlKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKwlpbnQgb2xkX2tleWNvZGU7CisKKwlpZiAoa2V5Y29kZSA8IDAgfHwga2V5Y29kZSA+IEtFWV9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJa2V5ID0gZGVsbF93bWlfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKHNjYW5jb2RlKTsKKwlpZiAoa2V5ICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpIHsKKwkJb2xkX2tleWNvZGUgPSBrZXktPmtleWNvZGU7CisJCWtleS0+a2V5Y29kZSA9IGtleWNvZGU7CisJCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQlpZiAoIWRlbGxfd21pX2dldF9lbnRyeV9ieV9rZXljb2RlKG9sZF9rZXljb2RlKSkKKwkJCWNsZWFyX2JpdChvbGRfa2V5Y29kZSwgZGV2LT5rZXliaXQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGxfd21pX25vdGlmeSh1MzIgdmFsdWUsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGFjcGlfYnVmZmVyIHJlc3BvbnNlID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKKworCXdtaV9nZXRfZXZlbnRfZGF0YSh2YWx1ZSwgJnJlc3BvbnNlKTsKKworCW9iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKXJlc3BvbnNlLnBvaW50ZXI7CisKKwlpZiAob2JqICYmIG9iai0+dHlwZSA9PSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCWludCAqYnVmZmVyID0gKGludCAqKW9iai0+YnVmZmVyLnBvaW50ZXI7CisJCWtleSA9IGRlbGxfd21pX2dldF9lbnRyeV9ieV9zY2FuY29kZShidWZmZXJbMV0pOworCQlpZiAoa2V5KSB7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGRlbGxfd21pX2lucHV0X2Rldiwga2V5LT5rZXljb2RlLCAxKTsKKwkJCWlucHV0X3N5bmMoZGVsbF93bWlfaW5wdXRfZGV2KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkoZGVsbF93bWlfaW5wdXRfZGV2LCBrZXktPmtleWNvZGUsIDApOworCQkJaW5wdXRfc3luYyhkZWxsX3dtaV9pbnB1dF9kZXYpOworCQl9IGVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gImRlbGwtd21pOiBVbmtub3duIGtleSAleCBwcmVzc2VkXG4iLAorCQkJICAgICAgIGJ1ZmZlclsxXSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBkZWxsX3dtaV9pbnB1dF9zZXR1cCh2b2lkKQoreworCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKKwlpbnQgZXJyOworCisJZGVsbF93bWlfaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisKKwlpZiAoIWRlbGxfd21pX2lucHV0X2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZWxsX3dtaV9pbnB1dF9kZXYtPm5hbWUgPSAiRGVsbCBXTUkgaG90a2V5cyI7CisJZGVsbF93bWlfaW5wdXRfZGV2LT5waHlzID0gIndtaS9pbnB1dDAiOworCWRlbGxfd21pX2lucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCWRlbGxfd21pX2lucHV0X2Rldi0+Z2V0a2V5Y29kZSA9IGRlbGxfd21pX2dldGtleWNvZGU7CisJZGVsbF93bWlfaW5wdXRfZGV2LT5zZXRrZXljb2RlID0gZGVsbF93bWlfc2V0a2V5Y29kZTsKKworCWZvciAoa2V5ID0gZGVsbF93bWlfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykgeworCQlzd2l0Y2ggKGtleS0+dHlwZSkgeworCQljYXNlIEtFX0tFWToKKwkJCXNldF9iaXQoRVZfS0VZLCBkZWxsX3dtaV9pbnB1dF9kZXYtPmV2Yml0KTsKKwkJCXNldF9iaXQoa2V5LT5rZXljb2RlLCBkZWxsX3dtaV9pbnB1dF9kZXYtPmtleWJpdCk7CisJCQlicmVhazsKKwkJY2FzZSBLRV9TVzoKKwkJCXNldF9iaXQoRVZfU1csIGRlbGxfd21pX2lucHV0X2Rldi0+ZXZiaXQpOworCQkJc2V0X2JpdChrZXktPmtleWNvZGUsIGRlbGxfd21pX2lucHV0X2Rldi0+c3diaXQpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoZGVsbF93bWlfaW5wdXRfZGV2KTsKKworCWlmIChlcnIpIHsKKwkJaW5wdXRfZnJlZV9kZXZpY2UoZGVsbF93bWlfaW5wdXRfZGV2KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgZGVsbF93bWlfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwlpZiAod21pX2hhc19ndWlkKERFTExfRVZFTlRfR1VJRCkpIHsKKwkJZXJyID0gZGVsbF93bWlfaW5wdXRfc2V0dXAoKTsKKworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSB3bWlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihERUxMX0VWRU5UX0dVSUQsCisJCQkJCQkgZGVsbF93bWlfbm90aWZ5LCBOVUxMKTsKKwkJaWYgKGVycikgeworCQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZGVsbF93bWlfaW5wdXRfZGV2KTsKKwkJCXByaW50ayhLRVJOX0VSUiAiZGVsbC13bWk6IFVuYWJsZSB0byByZWdpc3RlciIKKwkJCSAgICAgICAiIG5vdGlmeSBoYW5kbGVyIC0gJWRcbiIsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGVsbC13bWk6IE5vIGtub3duIFdNSSBHVUlEIGZvdW5kXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZGVsbF93bWlfZXhpdCh2b2lkKQoreworCWlmICh3bWlfaGFzX2d1aWQoREVMTF9FVkVOVF9HVUlEKSkgeworCQl3bWlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKERFTExfRVZFTlRfR1VJRCk7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGRlbGxfd21pX2lucHV0X2Rldik7CisJfQorfQorCittb2R1bGVfaW5pdChkZWxsX3dtaV9pbml0KTsKK21vZHVsZV9leGl0KGRlbGxfd21pX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYwppbmRleCBmNDExMzVmLi41MGQ5MDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocC13bWkuYwpAQCAtNTMsNiArNTMsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBocF93bWlfYmlvc19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIGludCBfX2V4aXQgaHBfd21pX2Jpb3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSk7CitzdGF0aWMgaW50IGhwX3dtaV9yZXN1bWVfaGFuZGxlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpOwogCiBzdHJ1Y3QgYmlvc19hcmdzIHsKIAl1MzIgc2lnbmF0dXJlOwpAQCAtMTAxLDYgKzEwMiw3IEBACiAJfSwKIAkucHJvYmUgPSBocF93bWlfYmlvc19zZXR1cCwKIAkucmVtb3ZlID0gaHBfd21pX2Jpb3NfcmVtb3ZlLAorCS5yZXN1bWUgPSBocF93bWlfcmVzdW1lX2hhbmRsZXIsCiB9OwogCiBzdGF0aWMgaW50IGhwX3dtaV9wZXJmb3JtX3F1ZXJ5KGludCBxdWVyeSwgaW50IHdyaXRlLCBpbnQgdmFsdWUpCkBAIC00ODcsNiArNDg5LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaHBfd21pX3Jlc3VtZV9oYW5kbGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7CisKKwkvKgorCSAqIERvY2tpbmcgc3RhdGUgbWF5IGhhdmUgY2hhbmdlZCB3aGlsZSBzdXNwZW5kZWQsIHNvIHRyaWdnZXIKKwkgKiBhbiBpbnB1dCBldmVudCBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuIEFzIHRoaXMgaXMgYSBzd2l0Y2gsCisJICogdGhlIGlucHV0IGxheWVyIHdpbGwgb25seSBhY3R1YWxseSBwYXNzIGl0IG9uIGlmIHRoZSBzdGF0ZQorCSAqIGNoYW5nZWQuCisJICovCisJZm9yIChrZXkgPSBocF93bWlfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykgeworCQlzd2l0Y2ggKGtleS0+dHlwZSkgeworCQljYXNlIEtFX1NXOgorCQkJaW5wdXRfcmVwb3J0X3N3aXRjaChocF93bWlfaW5wdXRfZGV2LCBrZXktPmtleWNvZGUsCisJCQkJCSAgICBocF93bWlfZG9ja19zdGF0ZSgpKTsKKwkJCWlucHV0X3N5bmMoaHBfd21pX2lucHV0X2Rldik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBocF93bWlfaW5pdCh2b2lkKQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9tZW5sb3cuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX21lbmxvdy5jCmluZGV4IDI3Yjc2NjIuLjI5NDMyYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX21lbmxvdy5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX21lbmxvdy5jCkBAIC01Nyw4ICs1Nyw4IEBACiAgKiBJbiB0aGF0IGNhc2UgbWF4X2NzdGF0ZSB3b3VsZCBiZSBuLTEKICAqIEdUSFMgcmV0dXJuaW5nICcwJyB3b3VsZCBtZWFuIHRoYXQgbm8gYmFuZHdpZHRoIGNvbnRyb2wgc3RhdGVzIGFyZSBzdXBwb3J0ZWQKICAqLwotc3RhdGljIGludCBtZW1vcnlfZ2V0X2ludF9tYXhfYmFuZHdpZHRoKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LAotCQkJCQl1bnNpZ25lZCBsb25nICptYXhfc3RhdGUpCitzdGF0aWMgaW50IG1lbW9yeV9nZXRfbWF4X2JhbmR3aWR0aChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqbWF4X3N0YXRlKQogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gY2Rldi0+ZGV2ZGF0YTsKIAlhY3BpX2hhbmRsZSBoYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKQEAgLTgzLDIyICs4MywxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1lbW9yeV9nZXRfbWF4X2JhbmR3aWR0aChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqY2RldiwKLQkJCQkgICAgY2hhciAqYnVmKQotewotCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0JaWYgKG1lbW9yeV9nZXRfaW50X21heF9iYW5kd2lkdGgoY2RldiwgJnZhbHVlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHZhbHVlKTsKLX0KLQogc3RhdGljIGludCBtZW1vcnlfZ2V0X2N1cl9iYW5kd2lkdGgoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsCi0JCQkJICAgIGNoYXIgKmJ1ZikKKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqdmFsdWUpCiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOwogCWFjcGlfaGFuZGxlIGhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcmVzdWx0OwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ19saXN0OwogCXVuaW9uIGFjcGlfb2JqZWN0IGFyZzsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKQEAgLTEwOCwxNSArOTgsMTYgQEAKIAlhcmcudHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOwogCWFyZy5pbnRlZ2VyLnZhbHVlID0gTUVNT1JZX0FSR19DVVJfQkFORFdJRFRIOwogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsIE1FTU9SWV9HRVRfQkFORFdJRFRILAotCQkJCSAgICAgICAmYXJnX2xpc3QsICZ2YWx1ZSk7CisJCQkJICAgICAgICZhcmdfbGlzdCwgJnJlc3VsdCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIHZhbHVlKTsKKwkqdmFsdWUgPSByZXN1bHQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbWVtb3J5X3NldF9jdXJfYmFuZHdpZHRoKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LAotCQkJCSAgICB1bnNpZ25lZCBpbnQgc3RhdGUpCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhdGUpCiB7CiAJc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UgPSBjZGV2LT5kZXZkYXRhOwogCWFjcGlfaGFuZGxlIGhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwpAQCAtMTI2LDcgKzExNyw3IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIHRlbXA7CiAJdW5zaWduZWQgbG9uZyBtYXhfc3RhdGU7CiAKLQlpZiAobWVtb3J5X2dldF9pbnRfbWF4X2JhbmR3aWR0aChjZGV2LCAmbWF4X3N0YXRlKSkKKwlpZiAobWVtb3J5X2dldF9tYXhfYmFuZHdpZHRoKGNkZXYsICZtYXhfc3RhdGUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChzdGF0ZSA+IG1heF9zdGF0ZSkKQEAgLTE0Miw3ICsxMzMsNyBAQAogCQkJCSAgJnRlbXApOwogCiAJcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiQmFuZHdpZHRoIHZhbHVlIHdhcyAlZDogc3RhdHVzIGlzICVkXG4iLCBzdGF0ZSwgc3RhdHVzKTsKKwkgICAgICAgIkJhbmR3aWR0aCB2YWx1ZSB3YXMgJWxkOiBzdGF0dXMgaXMgJWRcbiIsIHN0YXRlLCBzdGF0dXMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3BhbmFzb25pYy1sYXB0b3AuYwppbmRleCBjNDdhNDRkLi5hNWNlNGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9wYW5hc29uaWMtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvcGFuYXNvbmljLWxhcHRvcC5jCkBAIC0xODQsNiArMTg0LDcgQEAKIAl7ICJNQVQwMDE5IiwgMH0sCiAJeyAiIiwgMH0sCiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBwY2NfZGV2aWNlX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV9wY2NfZHJpdmVyID0gewogCS5uYW1lID0JCUFDUElfUENDX0RSSVZFUl9OQU1FLApAQCAtMzY2LDcgKzM2Nyw3IEBACiAJaWYgKCFhY3BpX3BjY19yZXRyaWV2ZV9iaW9zZGF0YShwY2MsIHBjYy0+c2luZikpCiAJCXJldHVybiAtRUlPOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHBjYy0+c2luZltTSU5GX05VTV9CQVRURVJJRVNdKTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgcGNjLT5zaW5mW1NJTkZfTlVNX0JBVFRFUklFU10pOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2xjZHR5cGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTM3OCw3ICszNzksNyBAQAogCWlmICghYWNwaV9wY2NfcmV0cmlldmVfYmlvc2RhdGEocGNjLCBwY2MtPnNpbmYpKQogCQlyZXR1cm4gLUVJTzsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwY2MtPnNpbmZbU0lORl9MQ0RfVFlQRV0pOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCBwY2MtPnNpbmZbU0lORl9MQ0RfVFlQRV0pOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X211dGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTM5MCw3ICszOTEsNyBAQAogCWlmICghYWNwaV9wY2NfcmV0cmlldmVfYmlvc2RhdGEocGNjLCBwY2MtPnNpbmYpKQogCQlyZXR1cm4gLUVJTzsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwY2MtPnNpbmZbU0lORl9NVVRFXSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIHBjYy0+c2luZltTSU5GX01VVEVdKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19zdGlja3koc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTQwMiw3ICs0MDMsNyBAQAogCWlmICghYWNwaV9wY2NfcmV0cmlldmVfYmlvc2RhdGEocGNjLCBwY2MtPnNpbmYpKQogCQlyZXR1cm4gLUVJTzsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwY2MtPnNpbmZbU0lORl9TVElDS1lfS0VZXSk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIHBjYy0+c2luZltTSU5GX1NUSUNLWV9LRVldKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2V0X3N0aWNreShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKaW5kZXggYmM4OTk2Yy4uYTkwZWM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCkBAIC0yLDcgKzIsNyBAQAogICogQUNQSSBTb255IE5vdGVib29rIENvbnRyb2wgRHJpdmVyIChTTkMgYW5kIFNQSUMpCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgU3RlbGlhbiBQb3AgPHN0ZWxpYW5AcG9waWVzLm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBNYXR0aWEgRG9uZ2lsaSA8bWFsYXR0aWFAbGludXguaXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBNYXR0aWEgRG9uZ2lsaSA8bWFsYXR0aWFAbGludXguaXQ+CiAgKgogICogUGFydHMgb2YgdGhpcyBkcml2ZXIgaW5zcGlyZWQgZnJvbSBhc3VzX2FjcGkuYyBhbmQgaWJtX2FjcGkuYwogICogd2hpY2ggYXJlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIHJlc3BlY3RpdmUgYXV0aG9ycy4KQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC02NCw2ICs2Myw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zb255cGkuaD4KICNpbmNsdWRlIDxsaW51eC9zb255LWxhcHRvcC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgogI2lmZGVmIENPTkZJR19TT05ZUElfQ09NUEFUCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KQEAgLTEyMyw2ICsxMjMsMTggQEAKIAkJICJkZWZhdWx0IGlzIC0xIChhdXRvbWF0aWMpIik7CiAjZW5kaWYKIAorZW51bSBzb255X25jX3Jma2lsbCB7CisJU09OWV9XSUZJLAorCVNPTllfQkxVRVRPT1RILAorCVNPTllfV1dBTiwKKwlTT05ZX1dJTUFYLAorCVNPTllfUkZLSUxMX01BWCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmZraWxsICpzb255X3Jma2lsbF9kZXZpY2VzW1NPTllfUkZLSUxMX01BWF07CitzdGF0aWMgaW50IHNvbnlfcmZraWxsX2FkZHJlc3NbU09OWV9SRktJTExfTUFYXSA9IHsweDMwMCwgMHg1MDAsIDB4NzAwLCAweDkwMH07CitzdGF0aWMgdm9pZCBzb255X25jX3Jma2lsbF91cGRhdGUodm9pZCk7CisKIC8qKioqKioqKioqKiBJbnB1dCBEZXZpY2VzICoqKioqKioqKioqLwogCiAjZGVmaW5lIFNPTllfTEFQVE9QX0JVRl9TSVpFCTEyOApAQCAtMTM0LDYgKzE0Niw3IEBACiAJc3BpbmxvY2tfdAkJZmlmb19sb2NrOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0CSp3cTsKIH07CisKIHN0YXRpYyBzdHJ1Y3Qgc29ueV9sYXB0b3BfaW5wdXRfcyBzb255X2xhcHRvcF9pbnB1dCA9IHsKIAkudXNlcnMgPSBBVE9NSUNfSU5JVCgwKSwKIH07CkBAIC0yMTEsNiArMjI0LDE0IEBACiAJNDgsCS8qIDYxIFNPTllQSV9FVkVOVF9XSVJFTEVTU19PRkYgKi8KIAk0OSwJLyogNjIgU09OWVBJX0VWRU5UX1pPT01fSU5fUFJFU1NFRCAqLwogCTUwLAkvKiA2MyBTT05ZUElfRVZFTlRfWk9PTV9PVVRfUFJFU1NFRCAqLworCTUxLAkvKiA2NCBTT05ZUElfRVZFTlRfQ0RfRUpFQ1RfUFJFU1NFRCAqLworCTUyLAkvKiA2NSBTT05ZUElfRVZFTlRfTU9ERUtFWV9QUkVTU0VEICovCisJNTMsCS8qIDY2IFNPTllQSV9FVkVOVF9QS0VZX1A0ICovCisJNTQsCS8qIDY3IFNPTllQSV9FVkVOVF9QS0VZX1A1ICovCisJNTUsCS8qIDY4IFNPTllQSV9FVkVOVF9TRVRUSU5HS0VZX1BSRVNTRUQgKi8KKwk1NiwJLyogNjkgU09OWVBJX0VWRU5UX1ZPTFVNRV9JTkNfUFJFU1NFRCAqLworCTU3LAkvKiA3MCBTT05ZUElfRVZFTlRfVk9MVU1FX0RFQ19QUkVTU0VEICovCisJLTEsCS8qIDcxIFNPTllQSV9FVkVOVF9CUklHSFRORVNTX1BSRVNTRUQgKi8KIH07CiAKIHN0YXRpYyBpbnQgc29ueV9sYXB0b3BfaW5wdXRfa2V5Y29kZV9tYXBbXSA9IHsKQEAgLTI2NCw3ICsyODUsMTQgQEAKIAlLRVlfV0xBTiwJLyogNDcgU09OWVBJX0VWRU5UX1dJUkVMRVNTX09OICovCiAJS0VZX1dMQU4sCS8qIDQ4IFNPTllQSV9FVkVOVF9XSVJFTEVTU19PRkYgKi8KIAlLRVlfWk9PTUlOLAkvKiA0OSBTT05ZUElfRVZFTlRfWk9PTV9JTl9QUkVTU0VEICovCi0JS0VZX1pPT01PVVQJLyogNTAgU09OWVBJX0VWRU5UX1pPT01fT1VUX1BSRVNTRUQgKi8KKwlLRVlfWk9PTU9VVCwJLyogNTAgU09OWVBJX0VWRU5UX1pPT01fT1VUX1BSRVNTRUQgKi8KKwlLRVlfRUpFQ1RDRCwJLyogNTEgU09OWVBJX0VWRU5UX0NEX0VKRUNUX1BSRVNTRUQgKi8KKwlLRVlfRjEzLAkvKiA1MiBTT05ZUElfRVZFTlRfTU9ERUtFWV9QUkVTU0VEICovCisJS0VZX1BST0c0LAkvKiA1MyBTT05ZUElfRVZFTlRfUEtFWV9QNCAqLworCUtFWV9GMTQsCS8qIDU0IFNPTllQSV9FVkVOVF9QS0VZX1A1ICovCisJS0VZX0YxNSwJLyogNTUgU09OWVBJX0VWRU5UX1NFVFRJTkdLRVlfUFJFU1NFRCAqLworCUtFWV9WT0xVTUVVUCwJLyogNTYgU09OWVBJX0VWRU5UX1ZPTFVNRV9JTkNfUFJFU1NFRCAqLworCUtFWV9WT0xVTUVET1dOLAkvKiA1NyBTT05ZUElfRVZFTlRfVk9MVU1FX0RFQ19QUkVTU0VEICovCiB9OwogCiAvKiByZWxlYXNlIGJ1dHRvbnMgYWZ0ZXIgYSBzaG9ydCBkZWxheSBpZiBwcmVzc2VkICovCkBAIC0zNjksNyArMzk3LDcgQEAKIAlzb255X2xhcHRvcF9pbnB1dC53cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJzb255LWxhcHRvcCIpOwogCWlmICghc29ueV9sYXB0b3BfaW5wdXQud3EpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERSVl9QRlgKLQkJCQkiVW5hYmUgdG8gY3JlYXRlIHdvcmtxdWV1ZS5cbiIpOworCQkJCSJVbmFibGUgdG8gY3JlYXRlIHdvcmtxdWV1ZS5cbiIpOwogCQllcnJvciA9IC1FTlhJTzsKIAkJZ290byBlcnJfZnJlZV9rZmlmbzsKIAl9CkBAIC02ODksNiArNzE3LDMxIEBACiAJcmV0dXJuIC0xOwogfQogCitzdGF0aWMgaW50IHNvbnlfZmluZF9zbmNfaGFuZGxlKGludCBoYW5kbGUpCit7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCWZvciAoaSA9IDB4MjA7IGkgPCAweDMwOyBpKyspIHsKKwkJYWNwaV9jYWxsc2V0ZnVuYyhzb255X25jX2FjcGlfaGFuZGxlLCAiU04wMCIsIGksICZyZXN1bHQpOworCQlpZiAocmVzdWx0ID09IGhhbmRsZSkKKwkJCXJldHVybiBpLTB4MjA7CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHNvbnlfY2FsbF9zbmNfaGFuZGxlKGludCBoYW5kbGUsIGludCBhcmd1bWVudCwgaW50ICpyZXN1bHQpCit7CisJaW50IG9mZnNldCA9IHNvbnlfZmluZF9zbmNfaGFuZGxlKGhhbmRsZSk7CisKKwlpZiAob2Zmc2V0IDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGFjcGlfY2FsbHNldGZ1bmMoc29ueV9uY19hY3BpX2hhbmRsZSwgIlNOMDciLCBvZmZzZXQgfCBhcmd1bWVudCwKKwkJCQlyZXN1bHQpOworfQorCiAvKgogICogc29ueV9uY192YWx1ZXMgaW5wdXQvb3V0cHV0IHZhbGlkYXRlIGZ1bmN0aW9ucwogICovCkBAIC04MDksODcgKzg2Miw1MyBAQAogCXU4CWV2ZW50OwogfTsKIAotc3RhdGljIHN0cnVjdCBzb255X25jX2V2ZW50ICpzb255X25jX2V2ZW50czsKLQotLyogVmFpbyBDKiAtLW1heWJlIGFsc28gRkUqLCBOKiBhbmQgQVIqID8tLSBzcGVjaWFsIGluaXQgc2VxdWVuY2UKLSAqIGZvciBGbiBrZXlzCi0gKi8KLXN0YXRpYyBpbnQgc29ueV9uY19DX2VuYWJsZShjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqaWQpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgRFJWX1BGWCAiZGV0ZWN0ZWQgJXNcbiIsIGlkLT5pZGVudCk7Ci0KLQlzb255X25jX2V2ZW50cyA9IGlkLT5kcml2ZXJfZGF0YTsKLQotCWlmIChhY3BpX2NhbGxzZXRmdW5jKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJTTjAyIiwgMHg0LCAmcmVzdWx0KSA8IDAKLQkJCXx8IGFjcGlfY2FsbHNldGZ1bmMoc29ueV9uY19hY3BpX2hhbmRsZSwgIlNOMDciLCAweDIsICZyZXN1bHQpIDwgMAotCQkJfHwgYWNwaV9jYWxsc2V0ZnVuYyhzb255X25jX2FjcGlfaGFuZGxlLCAiU04wMiIsIDB4MTAsICZyZXN1bHQpIDwgMAotCQkJfHwgYWNwaV9jYWxsc2V0ZnVuYyhzb255X25jX2FjcGlfaGFuZGxlLCAiU04wNyIsIDB4MCwgJnJlc3VsdCkgPCAwCi0JCQl8fCBhY3BpX2NhbGxzZXRmdW5jKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJTTjAzIiwgMHgyLCAmcmVzdWx0KSA8IDAKLQkJCXx8IGFjcGlfY2FsbHNldGZ1bmMoc29ueV9uY19hY3BpX2hhbmRsZSwgIlNOMDciLCAweDEwMSwgJnJlc3VsdCkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX1BGWCAiZmFpbGVkIHRvIGluaXRpYWxpemUgU05DLCBzb21lICIKLQkJCQkiZnVuY3Rpb25hbGl0aWVzIG1heSBiZSBtaXNzaW5nXG4iKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNvbnlfbmNfZXZlbnQgc29ueV9DX2V2ZW50c1tdID0geworc3RhdGljIHN0cnVjdCBzb255X25jX2V2ZW50IHNvbnlfMTAwX2V2ZW50c1tdID0geworCXsgMHg5MCwgU09OWVBJX0VWRU5UX1BLRVlfUDEgfSwKKwl7IDB4MTAsIFNPTllQSV9FVkVOVF9BTllCVVRUT05fUkVMRUFTRUQgfSwKKwl7IDB4OTEsIFNPTllQSV9FVkVOVF9QS0VZX1AyIH0sCisJeyAweDExLCBTT05ZUElfRVZFTlRfQU5ZQlVUVE9OX1JFTEVBU0VEIH0sCiAJeyAweDgxLCBTT05ZUElfRVZFTlRfRk5LRVlfRjEgfSwKIAl7IDB4MDEsIFNPTllQSV9FVkVOVF9GTktFWV9SRUxFQVNFRCB9LAorCXsgMHg4MiwgU09OWVBJX0VWRU5UX0ZOS0VZX0YyIH0sCisJeyAweDAyLCBTT05ZUElfRVZFTlRfRk5LRVlfUkVMRUFTRUQgfSwKKwl7IDB4ODMsIFNPTllQSV9FVkVOVF9GTktFWV9GMyB9LAorCXsgMHgwMywgU09OWVBJX0VWRU5UX0ZOS0VZX1JFTEVBU0VEIH0sCisJeyAweDg0LCBTT05ZUElfRVZFTlRfRk5LRVlfRjQgfSwKKwl7IDB4MDQsIFNPTllQSV9FVkVOVF9GTktFWV9SRUxFQVNFRCB9LAogCXsgMHg4NSwgU09OWVBJX0VWRU5UX0ZOS0VZX0Y1IH0sCiAJeyAweDA1LCBTT05ZUElfRVZFTlRfRk5LRVlfUkVMRUFTRUQgfSwKIAl7IDB4ODYsIFNPTllQSV9FVkVOVF9GTktFWV9GNiB9LAogCXsgMHgwNiwgU09OWVBJX0VWRU5UX0ZOS0VZX1JFTEVBU0VEIH0sCiAJeyAweDg3LCBTT05ZUElfRVZFTlRfRk5LRVlfRjcgfSwKIAl7IDB4MDcsIFNPTllQSV9FVkVOVF9GTktFWV9SRUxFQVNFRCB9LAorCXsgMHg4OSwgU09OWVBJX0VWRU5UX0ZOS0VZX0Y5IH0sCisJeyAweDA5LCBTT05ZUElfRVZFTlRfRk5LRVlfUkVMRUFTRUQgfSwKIAl7IDB4OEEsIFNPTllQSV9FVkVOVF9GTktFWV9GMTAgfSwKIAl7IDB4MEEsIFNPTllQSV9FVkVOVF9GTktFWV9SRUxFQVNFRCB9LAogCXsgMHg4QywgU09OWVBJX0VWRU5UX0ZOS0VZX0YxMiB9LAogCXsgMHgwQywgU09OWVBJX0VWRU5UX0ZOS0VZX1JFTEVBU0VEIH0sCisJeyAweDlmLCBTT05ZUElfRVZFTlRfQ0RfRUpFQ1RfUFJFU1NFRCB9LAorCXsgMHgxZiwgU09OWVBJX0VWRU5UX0FOWUJVVFRPTl9SRUxFQVNFRCB9LAogCXsgMCwgMCB9LAogfTsKIAotLyogU05DLW9ubHkgbW9kZWwgbWFwICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgc29ueV9uY19pZHNbXSA9IHsKLQkJewotCQkJLmlkZW50ID0gIlNvbnkgVmFpbyBGRSBTZXJpZXMiLAotCQkJLmNhbGxiYWNrID0gc29ueV9uY19DX2VuYWJsZSwKLQkJCS5kcml2ZXJfZGF0YSA9IHNvbnlfQ19ldmVudHMsCi0JCQkubWF0Y2hlcyA9IHsKLQkJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTb255IENvcnBvcmF0aW9uIiksCi0JCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJWR04tRkUiKSwKLQkJCX0sCi0JCX0sCi0JCXsKLQkJCS5pZGVudCA9ICJTb255IFZhaW8gRlogU2VyaWVzIiwKLQkJCS5jYWxsYmFjayA9IHNvbnlfbmNfQ19lbmFibGUsCi0JCQkuZHJpdmVyX2RhdGEgPSBzb255X0NfZXZlbnRzLAotCQkJLm1hdGNoZXMgPSB7Ci0JCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU29ueSBDb3Jwb3JhdGlvbiIpLAotCQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiVkdOLUZaIiksCi0JCQl9LAotCQl9LAotCQl7Ci0JCQkuaWRlbnQgPSAiU29ueSBWYWlvIEMgU2VyaWVzIiwKLQkJCS5jYWxsYmFjayA9IHNvbnlfbmNfQ19lbmFibGUsCi0JCQkuZHJpdmVyX2RhdGEgPSBzb255X0NfZXZlbnRzLAotCQkJLm1hdGNoZXMgPSB7Ci0JCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU29ueSBDb3Jwb3JhdGlvbiIpLAotCQkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiVkdOLUMiKSwKLQkJCX0sCi0JCX0sCi0JCXsKLQkJCS5pZGVudCA9ICJTb255IFZhaW8gTiBTZXJpZXMiLAotCQkJLmNhbGxiYWNrID0gc29ueV9uY19DX2VuYWJsZSwKLQkJCS5kcml2ZXJfZGF0YSA9IHNvbnlfQ19ldmVudHMsCi0JCQkubWF0Y2hlcyA9IHsKLQkJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTb255IENvcnBvcmF0aW9uIiksCi0JCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJWR04tTiIpLAotCQkJfSwKLQkJfSwKLQkJeyB9CitzdGF0aWMgc3RydWN0IHNvbnlfbmNfZXZlbnQgc29ueV8xMjdfZXZlbnRzW10gPSB7CisJeyAweDgxLCBTT05ZUElfRVZFTlRfTU9ERUtFWV9QUkVTU0VEIH0sCisJeyAweDAxLCBTT05ZUElfRVZFTlRfQU5ZQlVUVE9OX1JFTEVBU0VEIH0sCisJeyAweDgyLCBTT05ZUElfRVZFTlRfUEtFWV9QMSB9LAorCXsgMHgwMiwgU09OWVBJX0VWRU5UX0FOWUJVVFRPTl9SRUxFQVNFRCB9LAorCXsgMHg4MywgU09OWVBJX0VWRU5UX1BLRVlfUDIgfSwKKwl7IDB4MDMsIFNPTllQSV9FVkVOVF9BTllCVVRUT05fUkVMRUFTRUQgfSwKKwl7IDB4ODQsIFNPTllQSV9FVkVOVF9QS0VZX1AzIH0sCisJeyAweDA0LCBTT05ZUElfRVZFTlRfQU5ZQlVUVE9OX1JFTEVBU0VEIH0sCisJeyAweDg1LCBTT05ZUElfRVZFTlRfUEtFWV9QNCB9LAorCXsgMHgwNSwgU09OWVBJX0VWRU5UX0FOWUJVVFRPTl9SRUxFQVNFRCB9LAorCXsgMHg4NiwgU09OWVBJX0VWRU5UX1BLRVlfUDUgfSwKKwl7IDB4MDYsIFNPTllQSV9FVkVOVF9BTllCVVRUT05fUkVMRUFTRUQgfSwKKwl7IDB4MDYsIFNPTllQSV9FVkVOVF9BTllCVVRUT05fUkVMRUFTRUQgfSwKKwl7IDB4ODcsIFNPTllQSV9FVkVOVF9TRVRUSU5HS0VZX1BSRVNTRUQgfSwKKwl7IDB4MDcsIFNPTllQSV9FVkVOVF9BTllCVVRUT05fUkVMRUFTRUQgfSwKKwl7IDAsIDAgfSwKIH07CiAKIC8qCkBAIC04OTcsMzggKzkxNiw1OSBAQAogICovCiBzdGF0aWMgdm9pZCBzb255X2FjcGlfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBzb255X25jX2V2ZW50ICpldm1hcDsKIAl1MzIgZXYgPSBldmVudDsKLQlpbnQgcmVzdWx0OwogCi0JaWYgKGV2ID09IDB4OTIpIHsKLQkJLyogcmVhZCB0aGUga2V5IHByZXNzZWQgZnJvbSBFQy5HRUNSCi0JCSAqIEEgY2FsbCB0byBTTjA3IHdpdGggMHgwMjAyIHdpbGwgZG8gaXQgYXMgd2VsbCByZXNwZWN0aW5nCi0JCSAqIHRoZSBjdXJyZW50IHByb3RvY29sIG9uIGRpZmZlcmVudCBPU2VzCi0JCSAqCi0JCSAqIE5vdGU6IHRoZSBwYXRoIGZvciBHRUNSIG1heSBiZQotCQkgKiAgIFxfU0IuUENJMC5MUENCLkVDIChDLCBGRSwgQVIsIE4gYW5kIGZyaWVuZHMpCi0JCSAqICAgXF9TQi5QQ0kwLlBJQi5FQzAgKFZHTi1GUiBub3RpZmljYXRpb25zIGFyZSBzZW50IGRpcmVjdGx5LCBubyBHRUNSKQotCQkgKgotCQkgKiBUT0RPOiB3ZSBtYXkgd2FudCB0byBkbyB0aGUgc2FtZSBmb3IgdGhlIG9sZGVyIEdIS0UgLW5lZWQKLQkJICogICAgICAgZG1pIGxpc3QtIHNvIHRoaXMgc25pcHBldCBtYXkgYmVjb21lIG9uZSBtb3JlIGNhbGxiYWNrLgotCQkgKi8KLQkJaWYgKGFjcGlfY2FsbHNldGZ1bmMoaGFuZGxlLCAiU04wNyIsIDB4MDIwMiwgJnJlc3VsdCkgPCAwKQotCQkJZHByaW50aygic29ueV9hY3BpX25vdGlmeSwgdW5hYmxlIHRvIGRlY29kZSBldmVudCAweCUuMnhcbiIsIGV2KTsKLQkJZWxzZQotCQkJZXYgPSByZXN1bHQgJiAweEZGOwotCX0KKwlpZiAoZXYgPj0gMHg5MCkgeworCQkvKiBOZXctc3R5bGUgZXZlbnQgKi8KKwkJaW50IHJlc3VsdDsKKwkJaW50IGtleV9oYW5kbGUgPSAwOworCQlldiAtPSAweDkwOwogCi0JaWYgKHNvbnlfbmNfZXZlbnRzKQotCQlmb3IgKGV2bWFwID0gc29ueV9uY19ldmVudHM7IGV2bWFwLT5ldmVudDsgZXZtYXArKykgewotCQkJaWYgKGV2bWFwLT5kYXRhID09IGV2KSB7Ci0JCQkJZXYgPSBldm1hcC0+ZXZlbnQ7Ci0JCQkJYnJlYWs7CisJCWlmIChzb255X2ZpbmRfc25jX2hhbmRsZSgweDEwMCkgPT0gZXYpCisJCQlrZXlfaGFuZGxlID0gMHgxMDA7CisJCWlmIChzb255X2ZpbmRfc25jX2hhbmRsZSgweDEyNykgPT0gZXYpCisJCQlrZXlfaGFuZGxlID0gMHgxMjc7CisKKwkJaWYgKGtleV9oYW5kbGUpIHsKKwkJCXN0cnVjdCBzb255X25jX2V2ZW50ICprZXlfZXZlbnQ7CisKKwkJCWlmIChzb255X2NhbGxfc25jX2hhbmRsZShrZXlfaGFuZGxlLCAweDIwMCwgJnJlc3VsdCkpIHsKKwkJCQlkcHJpbnRrKCJzb255X2FjcGlfbm90aWZ5LCB1bmFibGUgdG8gZGVjb2RlIgorCQkJCQkiIGV2ZW50IDB4JS4yeCAweCUuMnhcbiIsIGtleV9oYW5kbGUsCisJCQkJCWV2KTsKKwkJCQkvKiByZXN0b3JlIHRoZSBvcmlnaW5hbCBldmVudCAqLworCQkJCWV2ID0gZXZlbnQ7CisJCQl9IGVsc2UgeworCQkJCWV2ID0gcmVzdWx0ICYgMHhGRjsKKworCQkJCWlmIChrZXlfaGFuZGxlID09IDB4MTAwKQorCQkJCQlrZXlfZXZlbnQgPSBzb255XzEwMF9ldmVudHM7CisJCQkJZWxzZQorCQkJCQlrZXlfZXZlbnQgPSBzb255XzEyN19ldmVudHM7CisKKwkJCQlmb3IgKDsga2V5X2V2ZW50LT5kYXRhOyBrZXlfZXZlbnQrKykgeworCQkJCQlpZiAoa2V5X2V2ZW50LT5kYXRhID09IGV2KSB7CisJCQkJCQlldiA9IGtleV9ldmVudC0+ZXZlbnQ7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmICgha2V5X2V2ZW50LT5kYXRhKQorCQkJCQlwcmludGsoS0VSTl9JTkZPIERSVl9QRlgKKwkJCQkJCQkiVW5rbm93biBldmVudDogMHgleCAweCV4XG4iLAorCQkJCQkJCWtleV9oYW5kbGUsCisJCQkJCQkJZXYpOworCQkJCWVsc2UKKwkJCQkJc29ueV9sYXB0b3BfcmVwb3J0X2lucHV0X2V2ZW50KGV2KTsKIAkJCX0KKwkJfSBlbHNlIGlmIChzb255X2ZpbmRfc25jX2hhbmRsZSgweDEyNCkgPT0gZXYpIHsKKwkJCXNvbnlfbmNfcmZraWxsX3VwZGF0ZSgpOworCQkJcmV0dXJuOwogCQl9CisJfSBlbHNlCisJCXNvbnlfbGFwdG9wX3JlcG9ydF9pbnB1dF9ldmVudChldik7CiAKIAlkcHJpbnRrKCJzb255X2FjcGlfbm90aWZ5LCBldmVudDogMHglLjJ4XG4iLCBldik7Ci0Jc29ueV9sYXB0b3BfcmVwb3J0X2lucHV0X2V2ZW50KGV2KTsKIAlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KHNvbnlfbmNfYWNwaV9kZXZpY2UsIDEsIGV2KTsKIH0KIApAQCAtOTUzLDkgKzk5MywyNSBAQAogLyoKICAqIEFDUEkgZGV2aWNlCiAgKi8KK3N0YXRpYyBpbnQgc29ueV9uY19mdW5jdGlvbl9zZXR1cChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgcmVzdWx0OworCisJLyogRW5hYmxlIGFsbCBldmVudHMgKi8KKwlhY3BpX2NhbGxzZXRmdW5jKHNvbnlfbmNfYWNwaV9oYW5kbGUsICJTTjAyIiwgMHhmZmZmLCAmcmVzdWx0KTsKKworCS8qIFNldHVwIGhvdGtleXMgKi8KKwlzb255X2NhbGxfc25jX2hhbmRsZSgweDAxMDAsIDAsICZyZXN1bHQpOworCXNvbnlfY2FsbF9zbmNfaGFuZGxlKDB4MDEwMSwgMCwgJnJlc3VsdCk7CisJc29ueV9jYWxsX3NuY19oYW5kbGUoMHgwMTAyLCAweDEwMCwgJnJlc3VsdCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzb255X25jX3Jlc3VtZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3Qgc29ueV9uY192YWx1ZSAqaXRlbTsKKwlhY3BpX2hhbmRsZSBoYW5kbGU7CiAKIAlmb3IgKGl0ZW0gPSBzb255X25jX3ZhbHVlczsgaXRlbS0+bmFtZTsgaXRlbSsrKSB7CiAJCWludCByZXQ7CkBAIC05NzAsMTMgKzEwMjYsMTg4IEBACiAJCX0KIAl9CiAKKwlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShzb255X25jX2FjcGlfaGFuZGxlLCAiRUNPTiIsCisJCQkJCSAmaGFuZGxlKSkpIHsKKwkJaWYgKGFjcGlfY2FsbHNldGZ1bmMoc29ueV9uY19hY3BpX2hhbmRsZSwgIkVDT04iLCAxLCBOVUxMKSkKKwkJCWRwcmludGsoIkVDT04gTWV0aG9kIGZhaWxlZFxuIik7CisJfQorCisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoc29ueV9uY19hY3BpX2hhbmRsZSwgIlNOMDAiLAorCQkJCQkgJmhhbmRsZSkpKSB7CisJCWRwcmludGsoIkRvaW5nIFNOQyBzZXR1cFxuIik7CisJCXNvbnlfbmNfZnVuY3Rpb25fc2V0dXAoZGV2aWNlKTsKKwl9CisKIAkvKiBzZXQgdGhlIGxhc3QgcmVxdWVzdGVkIGJyaWdodG5lc3MgbGV2ZWwgKi8KIAlpZiAoc29ueV9iYWNrbGlnaHRfZGV2aWNlICYmCiAJCQkhc29ueV9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzb255X2JhY2tsaWdodF9kZXZpY2UpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9QRlggInVuYWJsZSB0byByZXN0b3JlIGJyaWdodG5lc3MgbGV2ZWxcbiIpOwogCi0JLyogcmUtaW5pdGlhbGl6ZSBtb2RlbHMgd2l0aCBzcGVjaWZpYyByZXF1aXJlbWVudHMgKi8KLQlkbWlfY2hlY2tfc3lzdGVtKHNvbnlfbmNfaWRzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29ueV9uY19yZmtpbGxfY2xlYW51cCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNPTllfUkZLSUxMX01BWDsgaSsrKSB7CisJCWlmIChzb255X3Jma2lsbF9kZXZpY2VzW2ldKQorCQkJcmZraWxsX3VucmVnaXN0ZXIoc29ueV9yZmtpbGxfZGV2aWNlc1tpXSk7CisJfQorfQorCitzdGF0aWMgaW50IHNvbnlfbmNfcmZraWxsX2dldCh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSAqc3RhdGUpCit7CisJaW50IHJlc3VsdDsKKwlpbnQgYXJndW1lbnQgPSBzb255X3Jma2lsbF9hZGRyZXNzWyhsb25nKSBkYXRhXTsKKworCXNvbnlfY2FsbF9zbmNfaGFuZGxlKDB4MTI0LCAweDIwMCwgJnJlc3VsdCk7CisJaWYgKHJlc3VsdCAmIDB4MSkgeworCQlzb255X2NhbGxfc25jX2hhbmRsZSgweDEyNCwgYXJndW1lbnQsICZyZXN1bHQpOworCQlpZiAocmVzdWx0ICYgMHhmKQorCQkJKnN0YXRlID0gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDsKKwkJZWxzZQorCQkJKnN0YXRlID0gUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDsKKwl9IGVsc2UgeworCQkqc3RhdGUgPSBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNvbnlfbmNfcmZraWxsX3NldCh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZSkKK3sKKwlpbnQgcmVzdWx0OworCWludCBhcmd1bWVudCA9IHNvbnlfcmZraWxsX2FkZHJlc3NbKGxvbmcpIGRhdGFdICsgMHgxMDA7CisKKwlpZiAoc3RhdGUgPT0gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRCkKKwkJYXJndW1lbnQgfD0gMHhmZjAwMDA7CisKKwlyZXR1cm4gc29ueV9jYWxsX3NuY19oYW5kbGUoMHgxMjQsIGFyZ3VtZW50LCAmcmVzdWx0KTsKK30KKworc3RhdGljIGludCBzb255X25jX3NldHVwX3dpZmlfcmZraWxsKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCByZmtpbGwgKnNvbnlfd2lmaV9yZmtpbGw7CisKKwlzb255X3dpZmlfcmZraWxsID0gcmZraWxsX2FsbG9jYXRlKCZkZXZpY2UtPmRldiwgUkZLSUxMX1RZUEVfV0xBTik7CisJaWYgKCFzb255X3dpZmlfcmZraWxsKQorCQlyZXR1cm4gLTE7CisJc29ueV93aWZpX3Jma2lsbC0+bmFtZSA9ICJzb255LXdpZmkiOworCXNvbnlfd2lmaV9yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IHNvbnlfbmNfcmZraWxsX3NldDsKKwlzb255X3dpZmlfcmZraWxsLT5nZXRfc3RhdGUgPSBzb255X25jX3Jma2lsbF9nZXQ7CisJc29ueV93aWZpX3Jma2lsbC0+dXNlcl9jbGFpbV91bnN1cHBvcnRlZCA9IDE7CisJc29ueV93aWZpX3Jma2lsbC0+ZGF0YSA9ICh2b2lkICopU09OWV9XSUZJOworCWVyciA9IHJma2lsbF9yZWdpc3Rlcihzb255X3dpZmlfcmZraWxsKTsKKwlpZiAoZXJyKQorCQlyZmtpbGxfZnJlZShzb255X3dpZmlfcmZraWxsKTsKKwllbHNlCisJCXNvbnlfcmZraWxsX2RldmljZXNbU09OWV9XSUZJXSA9IHNvbnlfd2lmaV9yZmtpbGw7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzb255X25jX3NldHVwX2JsdWV0b290aF9yZmtpbGwoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHJma2lsbCAqc29ueV9ibHVldG9vdGhfcmZraWxsOworCisJc29ueV9ibHVldG9vdGhfcmZraWxsID0gcmZraWxsX2FsbG9jYXRlKCZkZXZpY2UtPmRldiwKKwkJCQkJCVJGS0lMTF9UWVBFX0JMVUVUT09USCk7CisJaWYgKCFzb255X2JsdWV0b290aF9yZmtpbGwpCisJCXJldHVybiAtMTsKKwlzb255X2JsdWV0b290aF9yZmtpbGwtPm5hbWUgPSAic29ueS1ibHVldG9vdGgiOworCXNvbnlfYmx1ZXRvb3RoX3Jma2lsbC0+dG9nZ2xlX3JhZGlvID0gc29ueV9uY19yZmtpbGxfc2V0OworCXNvbnlfYmx1ZXRvb3RoX3Jma2lsbC0+Z2V0X3N0YXRlID0gc29ueV9uY19yZmtpbGxfZ2V0OworCXNvbnlfYmx1ZXRvb3RoX3Jma2lsbC0+dXNlcl9jbGFpbV91bnN1cHBvcnRlZCA9IDE7CisJc29ueV9ibHVldG9vdGhfcmZraWxsLT5kYXRhID0gKHZvaWQgKilTT05ZX0JMVUVUT09USDsKKwllcnIgPSByZmtpbGxfcmVnaXN0ZXIoc29ueV9ibHVldG9vdGhfcmZraWxsKTsKKwlpZiAoZXJyKQorCQlyZmtpbGxfZnJlZShzb255X2JsdWV0b290aF9yZmtpbGwpOworCWVsc2UKKwkJc29ueV9yZmtpbGxfZGV2aWNlc1tTT05ZX0JMVUVUT09USF0gPSBzb255X2JsdWV0b290aF9yZmtpbGw7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzb255X25jX3NldHVwX3d3YW5fcmZraWxsKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCByZmtpbGwgKnNvbnlfd3dhbl9yZmtpbGw7CisKKwlzb255X3d3YW5fcmZraWxsID0gcmZraWxsX2FsbG9jYXRlKCZkZXZpY2UtPmRldiwgUkZLSUxMX1RZUEVfV1dBTik7CisJaWYgKCFzb255X3d3YW5fcmZraWxsKQorCQlyZXR1cm4gLTE7CisJc29ueV93d2FuX3Jma2lsbC0+bmFtZSA9ICJzb255LXd3YW4iOworCXNvbnlfd3dhbl9yZmtpbGwtPnRvZ2dsZV9yYWRpbyA9IHNvbnlfbmNfcmZraWxsX3NldDsKKwlzb255X3d3YW5fcmZraWxsLT5nZXRfc3RhdGUgPSBzb255X25jX3Jma2lsbF9nZXQ7CisJc29ueV93d2FuX3Jma2lsbC0+dXNlcl9jbGFpbV91bnN1cHBvcnRlZCA9IDE7CisJc29ueV93d2FuX3Jma2lsbC0+ZGF0YSA9ICh2b2lkICopU09OWV9XV0FOOworCWVyciA9IHJma2lsbF9yZWdpc3Rlcihzb255X3d3YW5fcmZraWxsKTsKKwlpZiAoZXJyKQorCQlyZmtpbGxfZnJlZShzb255X3d3YW5fcmZraWxsKTsKKwllbHNlCisJCXNvbnlfcmZraWxsX2RldmljZXNbU09OWV9XV0FOXSA9IHNvbnlfd3dhbl9yZmtpbGw7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzb255X25jX3NldHVwX3dpbWF4X3Jma2lsbChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcmZraWxsICpzb255X3dpbWF4X3Jma2lsbDsKKworCXNvbnlfd2ltYXhfcmZraWxsID0gcmZraWxsX2FsbG9jYXRlKCZkZXZpY2UtPmRldiwgUkZLSUxMX1RZUEVfV0lNQVgpOworCWlmICghc29ueV93aW1heF9yZmtpbGwpCisJCXJldHVybiAtMTsKKwlzb255X3dpbWF4X3Jma2lsbC0+bmFtZSA9ICJzb255LXdpbWF4IjsKKwlzb255X3dpbWF4X3Jma2lsbC0+dG9nZ2xlX3JhZGlvID0gc29ueV9uY19yZmtpbGxfc2V0OworCXNvbnlfd2ltYXhfcmZraWxsLT5nZXRfc3RhdGUgPSBzb255X25jX3Jma2lsbF9nZXQ7CisJc29ueV93aW1heF9yZmtpbGwtPnVzZXJfY2xhaW1fdW5zdXBwb3J0ZWQgPSAxOworCXNvbnlfd2ltYXhfcmZraWxsLT5kYXRhID0gKHZvaWQgKilTT05ZX1dJTUFYOworCWVyciA9IHJma2lsbF9yZWdpc3Rlcihzb255X3dpbWF4X3Jma2lsbCk7CisJaWYgKGVycikKKwkJcmZraWxsX2ZyZWUoc29ueV93aW1heF9yZmtpbGwpOworCWVsc2UKKwkJc29ueV9yZmtpbGxfZGV2aWNlc1tTT05ZX1dJTUFYXSA9IHNvbnlfd2ltYXhfcmZraWxsOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNvbnlfbmNfcmZraWxsX3VwZGF0ZSgpCit7CisJaW50IGk7CisJZW51bSByZmtpbGxfc3RhdGUgc3RhdGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgU09OWV9SRktJTExfTUFYOyBpKyspIHsKKwkJaWYgKHNvbnlfcmZraWxsX2RldmljZXNbaV0pIHsKKwkJCXNvbnlfcmZraWxsX2RldmljZXNbaV0tPgorCQkJCWdldF9zdGF0ZShzb255X3Jma2lsbF9kZXZpY2VzW2ldLT5kYXRhLAorCQkJCQkgICZzdGF0ZSk7CisJCQlyZmtpbGxfZm9yY2Vfc3RhdGUoc29ueV9yZmtpbGxfZGV2aWNlc1tpXSwgc3RhdGUpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHNvbnlfbmNfcmZraWxsX3NldHVwKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWludCByZXN1bHQsIHJldDsKKworCWlmIChzb255X2ZpbmRfc25jX2hhbmRsZSgweDEyNCkgPT0gLTEpCisJCXJldHVybiAtMTsKKworCXJldCA9IHNvbnlfY2FsbF9zbmNfaGFuZGxlKDB4MTI0LCAweGIwMCwgJnJlc3VsdCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9JTkZPIERSVl9QRlgKKwkJICAgICAgICJVbmFibGUgdG8gZW51bWVyYXRlIHJma2lsbCBkZXZpY2VzOiAleFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocmVzdWx0ICYgMHgxKQorCQlzb255X25jX3NldHVwX3dpZmlfcmZraWxsKGRldmljZSk7CisJaWYgKHJlc3VsdCAmIDB4MikKKwkJc29ueV9uY19zZXR1cF9ibHVldG9vdGhfcmZraWxsKGRldmljZSk7CisJaWYgKHJlc3VsdCAmIDB4MWMpCisJCXNvbnlfbmNfc2V0dXBfd3dhbl9yZmtpbGwoZGV2aWNlKTsKKwlpZiAocmVzdWx0ICYgMHgyMCkKKwkJc29ueV9uY19zZXR1cF93aW1heF9yZmtpbGwoZGV2aWNlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAyNCwxMSArMTI1NSwyNCBAQAogCQkJZHByaW50aygiX0lOSSBNZXRob2QgZmFpbGVkXG4iKTsKIAl9CiAKKwlpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShzb255X25jX2FjcGlfaGFuZGxlLCAiRUNPTiIsCisJCQkJCSAmaGFuZGxlKSkpIHsKKwkJaWYgKGFjcGlfY2FsbHNldGZ1bmMoc29ueV9uY19hY3BpX2hhbmRsZSwgIkVDT04iLCAxLCBOVUxMKSkKKwkJCWRwcmludGsoIkVDT04gTWV0aG9kIGZhaWxlZFxuIik7CisJfQorCisJaWYgKEFDUElfU1VDQ0VTUyhhY3BpX2dldF9oYW5kbGUoc29ueV9uY19hY3BpX2hhbmRsZSwgIlNOMDAiLAorCQkJCQkgJmhhbmRsZSkpKSB7CisJCWRwcmludGsoIkRvaW5nIFNOQyBzZXR1cFxuIik7CisJCXNvbnlfbmNfZnVuY3Rpb25fc2V0dXAoZGV2aWNlKTsKKwkJc29ueV9uY19yZmtpbGxfc2V0dXAoZGV2aWNlKTsKKwl9CisKIAkvKiBzZXR1cCBpbnB1dCBkZXZpY2VzIGFuZCBoZWxwZXIgZmlmbyAqLwogCXJlc3VsdCA9IHNvbnlfbGFwdG9wX3NldHVwX2lucHV0KGRldmljZSk7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX1BGWAotCQkJCSJVbmFiZSB0byBjcmVhdGUgaW5wdXQgZGV2aWNlcy5cbiIpOworCQkJCSJVbmFibGUgdG8gY3JlYXRlIGlucHV0IGRldmljZXMuXG4iKTsKIAkJZ290byBvdXR3YWxrOwogCX0KIApAQCAtMTA2Myw5ICsxMzA3LDYgQEAKIAogCX0KIAotCS8qIGluaXRpYWxpemUgbW9kZWxzIHdpdGggc3BlY2lmaWMgcmVxdWlyZW1lbnRzICovCi0JZG1pX2NoZWNrX3N5c3RlbShzb255X25jX2lkcyk7Ci0KIAlyZXN1bHQgPSBzb255X3BmX2FkZCgpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gb3V0YmFja2xpZ2h0OwpAQCAtMTEzMSw2ICsxMzcyLDcgQEAKIAlzb255X2xhcHRvcF9yZW1vdmVfaW5wdXQoKTsKIAogICAgICAgb3V0d2FsazoKKwlzb255X25jX3Jma2lsbF9jbGVhbnVwKCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTE1Niw2ICsxMzk4LDcgQEAKIAogCXNvbnlfcGZfcmVtb3ZlKCk7CiAJc29ueV9sYXB0b3BfcmVtb3ZlX2lucHV0KCk7CisJc29ueV9uY19yZmtpbGxfY2xlYW51cCgpOwogCWRwcmludGsoU09OWV9OQ19EUklWRVJfTkFNRSAiIHJlbW92ZWQuXG4iKTsKIAogCXJldHVybiAwOwpAQCAtMTE5NSw3ICsxNDM4LDYgQEAKICNkZWZpbmUgU09OWVBJX1RZUEUxX09GRlNFVAkweDA0CiAjZGVmaW5lIFNPTllQSV9UWVBFMl9PRkZTRVQJMHgxMgogI2RlZmluZSBTT05ZUElfVFlQRTNfT0ZGU0VUCTB4MTIKLSNkZWZpbmUgU09OWVBJX1RZUEU0X09GRlNFVAkweDEyCiAKIHN0cnVjdCBzb255X3BpY19pb3BvcnQgewogCXN0cnVjdCBhY3BpX3Jlc291cmNlX2lvCWlvMTsKQEAgLTEzMjgsNiArMTU3MCw3IEBACiAJeyAweDAxLCBTT05ZUElfRVZFTlRfUEtFWV9QMSB9LAogCXsgMHgwMiwgU09OWVBJX0VWRU5UX1BLRVlfUDIgfSwKIAl7IDB4MDQsIFNPTllQSV9FVkVOVF9QS0VZX1AzIH0sCisJeyAweDIwLCBTT05ZUElfRVZFTlRfUEtFWV9QMSB9LAogCXsgMCwgMCB9CiB9OwogCkBAIC0xMzcxLDYgKzE2MTQsNyBAQAogCXsgMHgzOSwgU09OWVBJX0VWRU5UX1pPT01fUFJFU1NFRCB9LAogCXsgMHgxMCwgU09OWVBJX0VWRU5UX1pPT01fSU5fUFJFU1NFRCB9LAogCXsgMHgyMCwgU09OWVBJX0VWRU5UX1pPT01fT1VUX1BSRVNTRUQgfSwKKwl7IDB4MDQsIFNPTllQSV9FVkVOVF9aT09NX1BSRVNTRUQgfSwKIAl7IDAsIDAgfQogfTsKIApAQCAtMTQwMSw2ICsxNjQ1LDE5IEBACiAJeyAwLCAwIH0KIH07CiAKKy8qIFRoZSBzZXQgb2YgcG9zc2libGUgdm9sdW1lIGV2ZW50cyAqLworc3RhdGljIHN0cnVjdCBzb255cGlfZXZlbnQgc29ueXBpX3ZvbHVtZWV2W10gPSB7CisJeyAweDAxLCBTT05ZUElfRVZFTlRfVk9MVU1FX0lOQ19QUkVTU0VEIH0sCisJeyAweDAyLCBTT05ZUElfRVZFTlRfVk9MVU1FX0RFQ19QUkVTU0VEIH0sCisJeyAwLCAwIH0KK307CisKKy8qIFRoZSBzZXQgb2YgcG9zc2libGUgYnJpZ2h0bmVzcyBldmVudHMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc29ueXBpX2V2ZW50IHNvbnlwaV9icmlnaHRuZXNzZXZbXSA9IHsKKwl7IDB4ODAsIFNPTllQSV9FVkVOVF9CUklHSFRORVNTX1BSRVNTRUQgfSwKKwl7IDAsIDAgfQorfTsKKwogc3RhdGljIHN0cnVjdCBzb255cGlfZXZlbnR0eXBlcyB0eXBlMV9ldmVudHNbXSA9IHsKIAl7IDAsIDB4ZmZmZmZmZmYsIHNvbnlwaV9yZWxlYXNlZXYgfSwKIAl7IDB4NzAsIFNPTllQSV9NRVlFX01BU0ssIHNvbnlwaV9tZXllZXYgfSwKQEAgLTE0MzgsMTcgKzE2OTUsMTEgQEAKIAl7IDB4MzEsIFNPTllQSV9NRU1PUllTVElDS19NQVNLLCBzb255cGlfbWVtb3J5c3RpY2tldiB9LAogCXsgMHg0MSwgU09OWVBJX0JBVFRFUllfTUFTSywgc29ueXBpX2JhdHRlcnlldiB9LAogCXsgMHgzMSwgU09OWVBJX1BLRVlfTUFTSywgc29ueXBpX3BrZXlldiB9LAotCXsgMCB9LAotfTsKLXN0YXRpYyBzdHJ1Y3Qgc29ueXBpX2V2ZW50dHlwZXMgdHlwZTRfZXZlbnRzW10gPSB7Ci0JeyAwLCAweGZmZmZmZmZmLCBzb255cGlfcmVsZWFzZWV2IH0sCi0JeyAweDIxLCBTT05ZUElfRk5LRVlfTUFTSywgc29ueXBpX2Zua2V5ZXYgfSwKLQl7IDB4MzEsIFNPTllQSV9XSVJFTEVTU19NQVNLLCBzb255cGlfd2xlc3NldiB9LAotCXsgMHgzMSwgU09OWVBJX01FTU9SWVNUSUNLX01BU0ssIHNvbnlwaV9tZW1vcnlzdGlja2V2IH0sCi0JeyAweDQxLCBTT05ZUElfQkFUVEVSWV9NQVNLLCBzb255cGlfYmF0dGVyeWV2IH0sCiAJeyAweDA1LCBTT05ZUElfUEtFWV9NQVNLLCBzb255cGlfcGtleWV2IH0sCiAJeyAweDA1LCBTT05ZUElfWk9PTV9NQVNLLCBzb255cGlfem9vbWV2IH0sCiAJeyAweDA1LCBTT05ZUElfQ0FQVFVSRV9NQVNLLCBzb255cGlfY2FwdHVyZWV2IH0sCisJeyAweDA1LCBTT05ZUElfUEtFWV9NQVNLLCBzb255cGlfdm9sdW1lZXYgfSwKKwl7IDB4MDUsIFNPTllQSV9QS0VZX01BU0ssIHNvbnlwaV9icmlnaHRuZXNzZXYgfSwKIAl7IDAgfSwKIH07CiAKQEAgLTE1MTEsMTEgKzE3NjIsMTEgQEAKIC8qCiAgKiBtaW5pZHJpdmVycyBmb3IgU1BJQyBtb2RlbHMKICAqLwotc3RhdGljIGludCB0eXBlNF9oYW5kbGVfaXJxKGNvbnN0IHU4IGRhdGFfbWFzaywgY29uc3QgdTggZXYpCitzdGF0aWMgaW50IHR5cGUzX2hhbmRsZV9pcnEoY29uc3QgdTggZGF0YV9tYXNrLCBjb25zdCB1OCBldikKIHsKIAkvKgogCSAqIDB4MzEgY291bGQgbWVhbiB3ZSBoYXZlIHRvIHRha2Ugc29tZSBleHRyYSBhY3Rpb24gYW5kIHdhaXQgZm9yCi0JICogdGhlIG5leHQgaXJxIGZvciBzb21lIFR5cGU0IG1vZGVscywgaXQgd2lsbCBnZW5lcmF0ZSBhIG5ldworCSAqIHRoZSBuZXh0IGlycSBmb3Igc29tZSBUeXBlMyBtb2RlbHMsIGl0IHdpbGwgZ2VuZXJhdGUgYSBuZXcKIAkgKiBpcnEgYW5kIHdlIGNhbiByZWFkIG5ldyBkYXRhIGZyb20gdGhlIGRldmljZToKIAkgKiAgLSAweDVjIGFuZCAweDVmIHJlcXVpcmVzIDB4QTAKIAkgKiAgLSAweDYxIHJlcXVpcmVzIDB4QjMKQEAgLTE1NDUsMTYgKzE3OTYsMTAgQEAKIAl9LAogCXsKIAkJLm1vZGVsID0gU09OWVBJX0RFVklDRV9UWVBFMywKLQkJLmhhbmRsZV9pcnEgPSBOVUxMLAorCQkuaGFuZGxlX2lycSA9IHR5cGUzX2hhbmRsZV9pcnEsCiAJCS5ldnBvcnRfb2Zmc2V0ID0gU09OWVBJX1RZUEUzX09GRlNFVCwKIAkJLmV2ZW50X3R5cGVzID0gdHlwZTNfZXZlbnRzLAogCX0sCi0JewotCQkubW9kZWwgPSBTT05ZUElfREVWSUNFX1RZUEU0LAotCQkuaGFuZGxlX2lycSA9IHR5cGU0X2hhbmRsZV9pcnEsCi0JCS5ldnBvcnRfb2Zmc2V0ID0gU09OWVBJX1RZUEU0X09GRlNFVCwKLQkJLmV2ZW50X3R5cGVzID0gdHlwZTRfZXZlbnRzLAotCX0sCiB9OwogCiBzdGF0aWMgdm9pZCBzb255X3BpY19kZXRlY3RfZGV2aWNlX3R5cGUoc3RydWN0IHNvbnlfcGljX2RldiAqZGV2KQpAQCAtMTU3OCwxNCArMTgyMywyMSBAQAogCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMSwgTlVMTCk7CiAJaWYgKHBjaWRldikgewotCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1szXTsKKwkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMl07CiAJCWdvdG8gb3V0OwogCX0KIAogCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfNCwgTlVMTCk7CiAJaWYgKHBjaWRldikgewotCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1szXTsKKwkJZGV2LT5jb250cm9sID0gJnNwaWNfdHlwZXNbMl07CisJCWdvdG8gb3V0OworCX0KKworCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCisJCQlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDlfMSwgTlVMTCk7CisJaWYgKHBjaWRldikgeworCQlkZXYtPmNvbnRyb2wgPSAmc3BpY190eXBlc1syXTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xNTk4LDggKzE4NTAsNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfUEZYICJkZXRlY3RlZCBUeXBlJWQgbW9kZWxcbiIsCiAJCQlkZXYtPmNvbnRyb2wtPm1vZGVsID09IFNPTllQSV9ERVZJQ0VfVFlQRTEgPyAxIDoKLQkJCWRldi0+Y29udHJvbC0+bW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMiA/IDIgOgotCQkJZGV2LT5jb250cm9sLT5tb2RlbCA9PSBTT05ZUElfREVWSUNFX1RZUEUzID8gMyA6IDQpOworCQkJZGV2LT5jb250cm9sLT5tb2RlbCA9PSBTT05ZUElfREVWSUNFX1RZUEUyID8gMiA6IDMpOwogfQogCiAvKiBjYW1lcmEgdGVzdHMgYW5kIHBvd2Vyb24vcG93ZXJvZmYgKi8KQEAgLTE3NTQsMTcgKzIwMDUsMTQgQEAKIEVYUE9SVF9TWU1CT0woc29ueV9waWNfY2FtZXJhX2NvbW1hbmQpOwogCiAvKiBncHJzL2VkZ2UgbW9kZW0gKFNaNDYwTiBhbmQgU1oyMTBQKSwgdGhhbmtzIHRvIEpvc2h1YSBXaXNlICovCi1zdGF0aWMgdm9pZCBzb255X3BpY19zZXRfd3dhbnBvd2VyKHU4IHN0YXRlKQorc3RhdGljIHZvaWQgX19zb255X3BpY19zZXRfd3dhbnBvd2VyKHU4IHN0YXRlKQogewogCXN0YXRlID0gISFzdGF0ZTsKLQltdXRleF9sb2NrKCZzcGljX2Rldi5sb2NrKTsKLQlpZiAoc3BpY19kZXYud3dhbl9wb3dlciA9PSBzdGF0ZSkgewotCQltdXRleF91bmxvY2soJnNwaWNfZGV2LmxvY2spOworCWlmIChzcGljX2Rldi53d2FuX3Bvd2VyID09IHN0YXRlKQogCQlyZXR1cm47Ci0JfQogCXNvbnlfcGljX2NhbGwyKDB4QjAsIHN0YXRlKTsKKwlzb255X3BpY19jYWxsMSgweDgyKTsKIAlzcGljX2Rldi53d2FuX3Bvd2VyID0gc3RhdGU7Ci0JbXV0ZXhfdW5sb2NrKCZzcGljX2Rldi5sb2NrKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc29ueV9waWNfd3dhbnBvd2VyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTE3NzYsNyArMjAyNCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWZmZXIsIE5VTEwsIDEwKTsKLQlzb255X3BpY19zZXRfd3dhbnBvd2VyKHZhbHVlKTsKKwltdXRleF9sb2NrKCZzcGljX2Rldi5sb2NrKTsKKwlfX3NvbnlfcGljX3NldF93d2FucG93ZXIodmFsdWUpOworCW11dGV4X3VubG9jaygmc3BpY19kZXYubG9jayk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0xOTI5LDEwICsyMTc5LDE1IEBACiBzdGF0aWMgaW50IHNvbnlwaV9taXNjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJLyogRmx1c2ggaW5wdXQgcXVldWUgb24gZmlyc3Qgb3BlbiAqLwotCWxvY2tfa2VybmVsKCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKHNvbnlwaV9jb21wYXQuZmlmby0+bG9jaywgZmxhZ3MpOworCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzb255cGlfY29tcGF0Lm9wZW5fY291bnQpID09IDEpCi0JCWtmaWZvX3Jlc2V0KHNvbnlwaV9jb21wYXQuZmlmbyk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCQlfX2tmaWZvX3Jlc2V0KHNvbnlwaV9jb21wYXQuZmlmbyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNvbnlwaV9jb21wYXQuZmlmby0+bG9jaywgZmxhZ3MpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5ODUsOCArMjI0MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc29ueXBpX21pc2NfaW9jdGwoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGZpbGUgKmZwLAotCQkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIHNvbnlwaV9taXNjX2lvY3RsKHN0cnVjdCBmaWxlICpmcCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmV0ID0gMDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKQEAgLTIxMjAsNyArMjM3NSw3IEBACiAJLm9wZW4JCT0gc29ueXBpX21pc2Nfb3BlbiwKIAkucmVsZWFzZQk9IHNvbnlwaV9taXNjX3JlbGVhc2UsCiAJLmZhc3luYwkJPSBzb255cGlfbWlzY19mYXN5bmMsCi0JLmlvY3RsCQk9IHNvbnlwaV9taXNjX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bAk9IHNvbnlwaV9taXNjX2lvY3RsLAogfTsKIAogc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHNvbnlwaV9taXNjX2RldmljZSA9IHsKQEAgLTI1NjEsNyArMjgxNiw3IEBACiAJcmVzdWx0ID0gc29ueV9waWNfcG9zc2libGVfcmVzb3VyY2VzKGRldmljZSk7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX1BGWAotCQkJCSJVbmFiZSB0byByZWFkIHBvc3NpYmxlIHJlc291cmNlcy5cbiIpOworCQkJCSJVbmFibGUgdG8gcmVhZCBwb3NzaWJsZSByZXNvdXJjZXMuXG4iKTsKIAkJZ290byBlcnJfZnJlZV9yZXNvdXJjZXM7CiAJfQogCkBAIC0yNTY5LDcgKzI4MjQsNyBAQAogCXJlc3VsdCA9IHNvbnlfbGFwdG9wX3NldHVwX2lucHV0KGRldmljZSk7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIgRFJWX1BGWAotCQkJCSJVbmFiZSB0byBjcmVhdGUgaW5wdXQgZGV2aWNlcy5cbiIpOworCQkJCSJVbmFibGUgdG8gY3JlYXRlIGlucHV0IGRldmljZXMuXG4iKTsKIAkJZ290byBlcnJfZnJlZV9yZXNvdXJjZXM7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90YzExMDAtd21pLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90YzExMDAtd21pLmMKaW5kZXggYjRhNGFhOS4uNDQxNjYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RjMTEwMC13bWkuYwpAQCAtOTQsOSArOTQsOCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCW9iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSByZXN1bHQucG9pbnRlcjsKLQlpZiAob2JqICYmIG9iai0+dHlwZSA9PSBBQ1BJX1RZUEVfQlVGRkVSICYmCi0JCW9iai0+YnVmZmVyLmxlbmd0aCA9PSBzaXplb2YodTMyKSkgewotCQl0bXAgPSAqKCh1MzIgKikgb2JqLT5idWZmZXIucG9pbnRlcik7CisJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJdG1wID0gb2JqLT5pbnRlZ2VyLnZhbHVlOwogCX0gZWxzZSB7CiAJCXRtcCA9IDA7CiAJfQpAQCAtMTA5LDcgKzEwOCw3IEBACiAJCSpvdXQgPSAodG1wID09IDMpID8gMSA6IDA7CiAJCXJldHVybiAwOwogCWNhc2UgVEMxMTAwX0lOU1RBTkNFX0pPR0RJQUw6Ci0JCSpvdXQgPSAodG1wID09IDEpID8gMSA6IDA7CisJCSpvdXQgPSAodG1wID09IDEpID8gMCA6IDE7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCmluZGV4IDNkYWQyN2EuLmE0MGIwNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBCb3Jpc2xhdiBEZWlhbm92IDxib3Jpc2xhdkB1c2Vycy5zZi5uZXQ+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMDggSGVucmlxdWUgZGUgTW9yYWVzIEhvbHNjaHVoIDxobWhAaG1oLmVuZy5icj4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBIZW5yaXF1ZSBkZSBNb3JhZXMgSG9sc2NodWggPGhtaEBobWguZW5nLmJyPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2RlZmluZSBUUEFDUElfVkVSU0lPTiAiMC4yMiIKLSNkZWZpbmUgVFBBQ1BJX1NZU0ZTX1ZFUlNJT04gMHgwMjAyMDAKKyNkZWZpbmUgVFBBQ1BJX1NZU0ZTX1ZFUlNJT04gMHgwMjAzMDAKIAogLyoKICAqICBDaGFuZ2Vsb2c6CkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0xNzIsMjkgKzE3MywyNiBAQAogCVRQQUNQSV9SRktfVVdCX1NXX0lELAogfTsKIAotLyogRGVidWdnaW5nICovCisvKiBwcmludGsgaGVhZGVycyAqLwogI2RlZmluZSBUUEFDUElfTE9HIFRQQUNQSV9GSUxFICI6ICIKLSNkZWZpbmUgVFBBQ1BJX0FMRVJUCUtFUk5fQUxFUlQgIFRQQUNQSV9MT0cKLSNkZWZpbmUgVFBBQ1BJX0NSSVQJS0VSTl9DUklUICAgVFBBQ1BJX0xPRwotI2RlZmluZSBUUEFDUElfRVJSCUtFUk5fRVJSICAgIFRQQUNQSV9MT0cKLSNkZWZpbmUgVFBBQ1BJX05PVElDRQlLRVJOX05PVElDRSBUUEFDUElfTE9HCi0jZGVmaW5lIFRQQUNQSV9JTkZPCUtFUk5fSU5GTyAgIFRQQUNQSV9MT0cKLSNkZWZpbmUgVFBBQ1BJX0RFQlVHCUtFUk5fREVCVUcgIFRQQUNQSV9MT0cKKyNkZWZpbmUgVFBBQ1BJX0VNRVJHCUtFUk5fRU1FUkcJVFBBQ1BJX0xPRworI2RlZmluZSBUUEFDUElfQUxFUlQJS0VSTl9BTEVSVAlUUEFDUElfTE9HCisjZGVmaW5lIFRQQUNQSV9DUklUCUtFUk5fQ1JJVAlUUEFDUElfTE9HCisjZGVmaW5lIFRQQUNQSV9FUlIJS0VSTl9FUlIJVFBBQ1BJX0xPRworI2RlZmluZSBUUEFDUElfV0FSTglLRVJOX1dBUk5JTkcJVFBBQ1BJX0xPRworI2RlZmluZSBUUEFDUElfTk9USUNFCUtFUk5fTk9USUNFCVRQQUNQSV9MT0cKKyNkZWZpbmUgVFBBQ1BJX0lORk8JS0VSTl9JTkZPCVRQQUNQSV9MT0cKKyNkZWZpbmUgVFBBQ1BJX0RFQlVHCUtFUk5fREVCVUcJVFBBQ1BJX0xPRwogCisvKiBEZWJ1Z2dpbmcgcHJpbnRrIGdyb3VwcyAqLwogI2RlZmluZSBUUEFDUElfREJHX0FMTAkJMHhmZmZmCisjZGVmaW5lIFRQQUNQSV9EQkdfRElTQ0xPU0VUQVNLCTB4ODAwMAogI2RlZmluZSBUUEFDUElfREJHX0lOSVQJCTB4MDAwMQogI2RlZmluZSBUUEFDUElfREJHX0VYSVQJCTB4MDAwMgotI2RlZmluZSBkYmdfcHJpbnRrKGFfZGJnX2xldmVsLCBmb3JtYXQsIGFyZy4uLikgXAotCWRvIHsgaWYgKGRiZ19sZXZlbCAmIGFfZGJnX2xldmVsKSBcCi0JCXByaW50ayhUUEFDUElfREVCVUcgIiVzOiAiIGZvcm1hdCwgX19mdW5jX18gLCAjIyBhcmcpOyBcCi0JfSB3aGlsZSAoMCkKLSNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9ERUJVRwotI2RlZmluZSB2ZGJnX3ByaW50ayhhX2RiZ19sZXZlbCwgZm9ybWF0LCBhcmcuLi4pIFwKLQlkYmdfcHJpbnRrKGFfZGJnX2xldmVsLCBmb3JtYXQsICMjIGFyZykKLXN0YXRpYyBjb25zdCBjaGFyICpzdHJfc3VwcG9ydGVkKGludCBpc19zdXBwb3J0ZWQpOwotI2Vsc2UKLSNkZWZpbmUgdmRiZ19wcmludGsoYV9kYmdfbGV2ZWwsIGZvcm1hdCwgYXJnLi4uKQotI2VuZGlmCisjZGVmaW5lIFRQQUNQSV9EQkdfUkZLSUxMCTB4MDAwNAorI2RlZmluZSBUUEFDUElfREJHX0hLRVkJCTB4MDAwOAorI2RlZmluZSBUUEFDUElfREJHX0ZBTgkJMHgwMDEwCisjZGVmaW5lIFRQQUNQSV9EQkdfQlJHSFQJMHgwMDIwCiAKICNkZWZpbmUgb25vZmYoc3RhdHVzLCBiaXQpICgoc3RhdHVzKSAmICgxIDw8IChiaXQpKSA/ICJvbiIgOiAib2ZmIikKICNkZWZpbmUgZW5hYmxlZChzdGF0dXMsIGJpdCkgKChzdGF0dXMpICYgKDEgPDwgKGJpdCkpID8gImVuYWJsZWQiIDogImRpc2FibGVkIikKQEAgLTI3Nyw3ICsyNzUsNiBAQAogCiBzdGF0aWMgc3RydWN0IHsKIAl1MTYgaG90a2V5X21hc2tfZmY6MTsKLQl1MTYgYnJpZ2h0X2Ntb3NfZWNfdW5zeW5jOjE7CiB9IHRwX3dhcm5lZDsKIAogc3RydWN0IHRoaW5rcGFkX2lkX2RhdGEgewpAQCAtMzI2LDYgKzMyMywzOSBAQAogI2VuZGlmCiAKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBEZWJ1Z2dpbmcgaGVscGVycworICovCisKKyNkZWZpbmUgZGJnX3ByaW50ayhhX2RiZ19sZXZlbCwgZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IGlmIChkYmdfbGV2ZWwgJiAoYV9kYmdfbGV2ZWwpKSBcCisJCXByaW50ayhUUEFDUElfREVCVUcgIiVzOiAiIGZvcm1hdCwgX19mdW5jX18gLCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0RFQlVHCisjZGVmaW5lIHZkYmdfcHJpbnRrIGRiZ19wcmludGsKK3N0YXRpYyBjb25zdCBjaGFyICpzdHJfc3VwcG9ydGVkKGludCBpc19zdXBwb3J0ZWQpOworI2Vsc2UKKyNkZWZpbmUgdmRiZ19wcmludGsoYV9kYmdfbGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHRwYWNwaV9sb2dfdXNlcnRhc2soY29uc3QgY2hhciAqIGNvbnN0IHdoYXQpCit7CisJcHJpbnRrKFRQQUNQSV9ERUJVRyAiJXM6IGFjY2VzcyBieSBwcm9jZXNzIHdpdGggUElEICVkXG4iLAorCQl3aGF0LCB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpKTsKK30KKworI2RlZmluZSB0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2sod2hhdCwgZm9ybWF0LCBhcmcuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKHVubGlrZWx5KCBcCisJCSAgICAoZGJnX2xldmVsICYgVFBBQ1BJX0RCR19ESVNDTE9TRVRBU0spICYmIFwKKwkJICAgICh0cGFjcGlfbGlmZWN5Y2xlID09IFRQQUNQSV9MSUZFX1JVTk5JTkcpKSkgeyBcCisJCQlwcmludGsoVFBBQ1BJX0RFQlVHICIlczogUElEICVkOiAiIGZvcm1hdCwgXAorCQkJCXdoYXQsIHRhc2tfdGdpZF92bnIoY3VycmVudCksICMjIGFyZyk7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtOTg5LDEwICsxMDE5LDEzIEBACiAJCS8qIHRyeSB0byBzZXQgdGhlIGluaXRpYWwgc3RhdGUgYXMgdGhlIGRlZmF1bHQgZm9yIHRoZSByZmtpbGwKIAkJICogdHlwZSwgc2luY2Ugd2UgYXNrIHRoZSBmaXJtd2FyZSB0byBwcmVzZXJ2ZSBpdCBhY3Jvc3MgUzUgaW4KIAkJICogTlZSQU0gKi8KLQkJcmZraWxsX3NldF9kZWZhdWx0KHJma3R5cGUsCisJCWlmIChyZmtpbGxfc2V0X2RlZmF1bHQocmZrdHlwZSwKIAkJCQkoaW5pdGlhbF9zdGF0ZSA9PSBSRktJTExfU1RBVEVfVU5CTE9DS0VEKSA/CiAJCQkJCVJGS0lMTF9TVEFURV9VTkJMT0NLRUQgOgotCQkJCQlSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEKTsKKwkJCQkJUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCkgPT0gLUVQRVJNKQorCQkJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19SRktJTEwsCisJCQkJICAgICJEZWZhdWx0IHN0YXRlIGZvciAlcyBjYW5ub3QgYmUgY2hhbmdlZFxuIiwKKwkJCQkgICAgbmFtZSk7CiAJfQogCiAJKnJmayA9IHJma2lsbF9hbGxvY2F0ZSgmdHBhY3BpX3BkZXYtPmRldiwgcmZrdHlwZSk7CkBAIC0xMDIwLDYgKzEwNTMsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcHJpbnRrX2RlcHJlY2F0ZWRfYXR0cmlidXRlKGNvbnN0IGNoYXIgKiBjb25zdCB3aGF0LAorCQkJCQljb25zdCBjaGFyICogY29uc3QgZGV0YWlscykKK3sKKwl0cGFjcGlfbG9nX3VzZXJ0YXNrKCJkZXByZWNhdGVkIHN5c2ZzIGF0dHJpYnV0ZSIpOworCXByaW50ayhUUEFDUElfV0FSTiAiV0FSTklORzogc3lzZnMgYXR0cmlidXRlICVzIGlzIGRlcHJlY2F0ZWQgYW5kICIKKwkJIndpbGwgYmUgcmVtb3ZlZC4gJXNcbiIsCisJCXdoYXQsIGRldGFpbHMpOworfQorCitzdGF0aWMgdm9pZCBwcmludGtfZGVwcmVjYXRlZF9yZmtpbGxfYXR0cmlidXRlKGNvbnN0IGNoYXIgKiBjb25zdCB3aGF0KQoreworCXByaW50a19kZXByZWNhdGVkX2F0dHJpYnV0ZSh3aGF0LAorCQkJIlBsZWFzZSBzd2l0Y2ggdG8gZ2VuZXJpYyByZmtpbGwgYmVmb3JlIHllYXIgMjAxMCIpOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogdGhpbmtwYWQtYWNwaSBkcml2ZXIgYXR0cmlidXRlcwogICovCkBAIC0xMzgyLDcgKzE0MzAsNiBAQAogCiBzdGF0aWMgaW50IGhvdGtleV9hdXRvc2xlZXBfYWNrOwogCi1zdGF0aWMgaW50IGhvdGtleV9vcmlnX3N0YXR1czsKIHN0YXRpYyB1MzIgaG90a2V5X29yaWdfbWFzazsKIHN0YXRpYyB1MzIgaG90a2V5X2FsbF9tYXNrOwogc3RhdGljIHUzMiBob3RrZXlfcmVzZXJ2ZWRfbWFzazsKQEAgLTE1MjksOSArMTU3Niw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaG90a2V5X3N0YXR1c19zZXQoaW50IHN0YXR1cykKK3N0YXRpYyBpbnQgaG90a2V5X3N0YXR1c19zZXQoYm9vbCBlbmFibGUpCiB7Ci0JaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCBOVUxMLCAiTUhLQyIsICJ2ZCIsIHN0YXR1cykpCisJaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCBOVUxMLCAiTUhLQyIsICJ2ZCIsIGVuYWJsZSA/IDEgOiAwKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlyZXR1cm4gMDsKQEAgLTE4NDcsNiArMTg5NCw5IEBACiB7CiAJaW50IHJlcywgc3RhdHVzOwogCisJcHJpbnRrX2RlcHJlY2F0ZWRfYXR0cmlidXRlKCJob3RrZXlfZW5hYmxlIiwKKwkJCSJIb3RrZXkgcmVwb3J0aW5nIGlzIGFsd2F5cyBlbmFibGVkIik7CisKIAlyZXMgPSBob3RrZXlfc3RhdHVzX2dldCgmc3RhdHVzKTsKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwpAQCAtMTg1OSwxNCArMTkwOSwxNyBAQAogCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGxvbmcgdDsKLQlpbnQgcmVzOworCisJcHJpbnRrX2RlcHJlY2F0ZWRfYXR0cmlidXRlKCJob3RrZXlfZW5hYmxlIiwKKwkJCSJIb3RrZXlzIGNhbiBiZSBkaXNhYmxlZCB0aHJvdWdoIGhvdGtleV9tYXNrIik7CiAKIAlpZiAocGFyc2Vfc3RydG91bChidWYsIDEsICZ0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXMgPSBob3RrZXlfc3RhdHVzX3NldCh0KTsKKwlpZiAodCA9PSAwKQorCQlyZXR1cm4gLUVQRVJNOwogCi0JcmV0dXJuIChyZXMpID8gcmVzIDogY291bnQ7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfaG90a2V5X2VuYWJsZSA9CkBAIC0xOTEwLDYgKzE5NjMsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZob3RrZXlfbXV0ZXgpOwogCisJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJob3RrZXlfbWFzayIsICJzZXQgdG8gMHglMDhseFxuIiwgdCk7CisKIAlyZXR1cm4gKHJlcykgPyByZXMgOiBjb3VudDsKIH0KIApAQCAtMTkyMiw3ICsxOTc3LDcgQEAKIAkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgY2hhciAqYnVmKQogewotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBob3RrZXlfb3JpZ19zdGF0dXMpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjBcbiIpOwogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfaG90a2V5X2Jpb3NfZW5hYmxlZCA9CkBAIC0xOTk2LDYgKzIwNTEsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZob3RrZXlfbXV0ZXgpOwogCisJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJob3RrZXlfc291cmNlX21hc2siLCAic2V0IHRvIDB4JTA4bHhcbiIsIHQpOworCiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0yMDI4LDYgKzIwODUsOCBAQAogCWhvdGtleV9wb2xsX3NldHVwKDEpOwogCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKIAorCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygiaG90a2V5X3BvbGxfZnJlcSIsICJzZXQgdG8gJWx1XG4iLCB0KTsKKwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMjE5NywxMSArMjI1NiwxMSBAQAogCWtmcmVlKGhvdGtleV9rZXljb2RlX21hcCk7CiAKIAlpZiAodHBfZmVhdHVyZXMuaG90a2V5KSB7Ci0JCWRiZ19wcmludGsoVFBBQ1BJX0RCR19FWElULAorCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfRVhJVCB8IFRQQUNQSV9EQkdfSEtFWSwKIAkJCSAgICJyZXN0b3Jpbmcgb3JpZ2luYWwgaG90IGtleSBtYXNrXG4iKTsKIAkJLyogbm8gc2hvcnQtY2lyY3VpdCBib29sZWFuIG9wZXJhdG9yIGJlbG93ISAqLwogCQlpZiAoKGhvdGtleV9tYXNrX3NldChob3RrZXlfb3JpZ19tYXNrKSB8Ci0JCSAgICAgaG90a2V5X3N0YXR1c19zZXQoaG90a2V5X29yaWdfc3RhdHVzKSkgIT0gMCkKKwkJICAgICBob3RrZXlfc3RhdHVzX3NldChmYWxzZSkpICE9IDApCiAJCQlwcmludGsoVFBBQ1BJX0VSUgogCQkJICAgICAgICJmYWlsZWQgdG8gcmVzdG9yZSBob3Qga2V5IG1hc2sgIgogCQkJICAgICAgICJ0byBCSU9TIGRlZmF1bHRzXG4iKTsKQEAgLTIzMjcsNyArMjM4Niw4IEBACiAJaW50IHN0YXR1czsKIAlpbnQgaGtleXY7CiAKLQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsICJpbml0aWFsaXppbmcgaG90a2V5IHN1YmRyaXZlclxuIik7CisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19IS0VZLAorCQkJImluaXRpYWxpemluZyBob3RrZXkgc3ViZHJpdmVyXG4iKTsKIAogCUJVR19PTighdHBhY3BpX2lucHV0ZGV2KTsKIAlCVUdfT04odHBhY3BpX2lucHV0ZGV2LT5vcGVuICE9IE5VTEwgfHwKQEAgLTIzNDQsNyArMjQwNCw4IEBACiAJLyogaG90a2V5IG5vdCBzdXBwb3J0ZWQgb24gNTcwICovCiAJdHBfZmVhdHVyZXMuaG90a2V5ID0gaGtleV9oYW5kbGUgIT0gTlVMTDsKIAotCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwgImhvdGtleXMgYXJlICVzXG4iLAorCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKKwkJImhvdGtleXMgYXJlICVzXG4iLAogCQlzdHJfc3VwcG9ydGVkKHRwX2ZlYXR1cmVzLmhvdGtleSkpOwogCiAJaWYgKCF0cF9mZWF0dXJlcy5ob3RrZXkpCkBAIC0yMzc2LDEwICsyNDM3LDE0IEBACiAJCQkgKiBUNHgsIFgzMSwgYW5kIGxhdGVyCiAJCQkgKi8KIAkJCXRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrID0gMTsKKwkJCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKKwkJCQkiZmlybXdhcmUgSEtFWSBpbnRlcmZhY2UgdmVyc2lvbjogMHgleFxuIiwKKwkJCQloa2V5dik7CiAJCX0KIAl9CiAKLQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsICJob3RrZXkgbWFza3MgYXJlICVzXG4iLAorCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKKwkJImhvdGtleSBtYXNrcyBhcmUgJXNcbiIsCiAJCXN0cl9zdXBwb3J0ZWQodHBfZmVhdHVyZXMuaG90a2V5X21hc2spKTsKIAogCWlmICh0cF9mZWF0dXJlcy5ob3RrZXlfbWFzaykgewpAQCAtMjM5NiwxMCArMjQ2MSw2IEBACiAKIAkvKiBob3RrZXlfc291cmNlX21hc2sgKm11c3QqIGJlIHplcm8gZm9yCiAJICogdGhlIGZpcnN0IGhvdGtleV9tYXNrX2dldCAqLwotCXJlcyA9IGhvdGtleV9zdGF0dXNfZ2V0KCZob3RrZXlfb3JpZ19zdGF0dXMpOwotCWlmIChyZXMpCi0JCWdvdG8gZXJyX2V4aXQ7Ci0KIAlpZiAodHBfZmVhdHVyZXMuaG90a2V5X21hc2spIHsKIAkJcmVzID0gaG90a2V5X21hc2tfZ2V0KCk7CiAJCWlmIChyZXMpCkBAIC0yNDIyLDcgKzI0ODMsNyBAQAogCQlob3RrZXlfc291cmNlX21hc2sgPSBUUEFDUElfSEtFWV9OVlJBTV9HT09EX01BU0s7CiAJfQogCi0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULAorCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKIAkJICAgICJob3RrZXkgc291cmNlIG1hc2sgMHglMDh4LCBwb2xsaW5nIGZyZXEgJWRcbiIsCiAJCSAgICBob3RrZXlfc291cmNlX21hc2ssIGhvdGtleV9wb2xsX2ZyZXEpOwogI2VuZGlmCkBAIC0yNDc2LDEyICsyNTM3LDEyIEBACiAJfQogCiAJaWYgKHRoaW5rcGFkX2lkLnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0xFTk9WTykgewotCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwKKwkJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0hLRVksCiAJCQkgICAidXNpbmcgTGVub3ZvIGRlZmF1bHQgaG90IGtleSBtYXBcbiIpOwogCQltZW1jcHkoaG90a2V5X2tleWNvZGVfbWFwLCAmbGVub3ZvX2tleWNvZGVfbWFwLAogCQkJVFBBQ1BJX0hPVEtFWV9NQVBfU0laRSk7CiAJfSBlbHNlIHsKLQkJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsCisJCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19IS0VZLAogCQkJICAgInVzaW5nIElCTSBkZWZhdWx0IGhvdCBrZXkgbWFwXG4iKTsKIAkJbWVtY3B5KGhvdGtleV9rZXljb2RlX21hcCwgJmlibV9rZXljb2RlX21hcCwKIAkJCVRQQUNQSV9IT1RLRVlfTUFQX1NJWkUpOwpAQCAtMjUzOCw4ICsyNTk5LDkgQEAKIAkJCXwgKDEgPDwgVFBfQUNQSV9IT1RLRVlTQ0FOX0ZORU5EKTsKIAl9CiAKLQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwgImVuYWJsaW5nIGhvdCBrZXkgaGFuZGxpbmdcbiIpOwotCXJlcyA9IGhvdGtleV9zdGF0dXNfc2V0KDEpOworCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19IS0VZLAorCQkJImVuYWJsaW5nIGZpcm13YXJlIEhLRVkgZXZlbnQgaW50ZXJmYWNlLi4uXG4iKTsKKwlyZXMgPSBob3RrZXlfc3RhdHVzX3NldCh0cnVlKTsKIAlpZiAocmVzKSB7CiAJCWhvdGtleV9leGl0KCk7CiAJCXJldHVybiByZXM7CkBAIC0yNTUyLDggKzI2MTQsOCBAQAogCQlyZXR1cm4gcmVzOwogCX0KIAotCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULAotCQkJImxlZ2FjeSBob3Qga2V5IHJlcG9ydGluZyBvdmVyIHByb2NmcyAlc1xuIiwKKwlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfSEtFWSwKKwkJCSJsZWdhY3kgaWJtL2hvdGtleSBldmVudCByZXBvcnRpbmcgb3ZlciBwcm9jZnMgJXNcbiIsCiAJCQkoaG90a2V5X3JlcG9ydF9tb2RlIDwgMikgPwogCQkJCSJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwogCkBAIC0yODg0LDkgKzI5NDYsMTcgQEAKIAlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgdm9pZCBob3RrZXlfZW5hYmxlZGlzYWJsZV93YXJuKHZvaWQpCit7CisJdHBhY3BpX2xvZ191c2VydGFzaygicHJvY2ZzIGhvdGtleSBlbmFibGUvZGlzYWJsZSIpOworCVdBUk4oMSwgVFBBQ1BJX1dBUk4KKwkgICAgICJob3RrZXkgZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbiAiCisJICAgICAicmVtb3ZlZCBmcm9tIHRoZSBkcml2ZXIuIEhvdGtleXMgYXJlIGFsd2F5cyBlbmFibGVkLlxuIik7Cit9CisKIHN0YXRpYyBpbnQgaG90a2V5X3dyaXRlKGNoYXIgKmJ1ZikKIHsKLQlpbnQgcmVzLCBzdGF0dXM7CisJaW50IHJlczsKIAl1MzIgbWFzazsKIAljaGFyICpjbWQ7CiAKQEAgLTI4OTYsMTcgKzI5NjYsMTYgQEAKIAlpZiAobXV0ZXhfbG9ja19raWxsYWJsZSgmaG90a2V5X211dGV4KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCXN0YXR1cyA9IC0xOwogCW1hc2sgPSBob3RrZXlfbWFzazsKIAogCXJlcyA9IDA7CiAJd2hpbGUgKChjbWQgPSBuZXh0X2NtZCgmYnVmKSkpIHsKIAkJaWYgKHN0cmxlbmNtcChjbWQsICJlbmFibGUiKSA9PSAwKSB7Ci0JCQlzdGF0dXMgPSAxOworCQkJaG90a2V5X2VuYWJsZWRpc2FibGVfd2FybigpOwogCQl9IGVsc2UgaWYgKHN0cmxlbmNtcChjbWQsICJkaXNhYmxlIikgPT0gMCkgewotCQkJc3RhdHVzID0gMDsKKwkJCWhvdGtleV9lbmFibGVkaXNhYmxlX3dhcm4oKTsKKwkJCXJlcyA9IC1FUEVSTTsKIAkJfSBlbHNlIGlmIChzdHJsZW5jbXAoY21kLCAicmVzZXQiKSA9PSAwKSB7Ci0JCQlzdGF0dXMgPSBob3RrZXlfb3JpZ19zdGF0dXM7CiAJCQltYXNrID0gaG90a2V5X29yaWdfbWFzazsKIAkJfSBlbHNlIGlmIChzc2NhbmYoY21kLCAiMHgleCIsICZtYXNrKSA9PSAxKSB7CiAJCQkvKiBtYXNrIHNldCAqLwpAQCAtMjkxNyw4ICsyOTg2LDEwIEBACiAJCQlnb3RvIGVycmV4aXQ7CiAJCX0KIAl9Ci0JaWYgKHN0YXR1cyAhPSAtMSkKLQkJcmVzID0gaG90a2V5X3N0YXR1c19zZXQoc3RhdHVzKTsKKworCWlmICghcmVzKQorCQl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soInByb2NmcyBob3RrZXkiLAorCQkJInNldCBtYXNrIHRvIDB4JTA4eFxuIiwgbWFzayk7CiAKIAlpZiAoIXJlcyAmJiBtYXNrICE9IGhvdGtleV9tYXNrKQogCQlyZXMgPSBob3RrZXlfbWFza19zZXQobWFzayk7CkBAIC0yOTcxLDEzICszMDQyLDE3IEBACiAJVFBfQUNQSV9CTFRIX1NBVkVfU1RBVEUJCT0gMHgwNSwgLyogU2F2ZSBzdGF0ZSBmb3IgUzQvUzUgKi8KIH07CiAKKyNkZWZpbmUgVFBBQ1BJX1JGS19CTFVFVE9PVEhfU1dfTkFNRQkidHBhY3BpX2JsdWV0b290aF9zdyIKKwogc3RhdGljIHN0cnVjdCByZmtpbGwgKnRwYWNwaV9ibHVldG9vdGhfcmZraWxsOwogCiBzdGF0aWMgdm9pZCBibHVldG9vdGhfc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJLyogVHJ5IHRvIG1ha2Ugc3VyZSByYWRpbyB3aWxsIHJlc3VtZSBwb3dlcmVkIG9mZiAqLwotCWFjcGlfZXZhbGYoTlVMTCwgTlVMTCwgIlxcQkxUSCIsICJ2ZCIsCi0JCSAgIFRQX0FDUElfQkxUSF9QV1JfT0ZGX09OX1JFU1VNRSk7CisJaWYgKCFhY3BpX2V2YWxmKE5VTEwsIE5VTEwsICJcXEJMVEgiLCAidmQiLAorCQkgICBUUF9BQ1BJX0JMVEhfUFdSX09GRl9PTl9SRVNVTUUpKQorCQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX1JGS0lMTCwKKwkJCSJibHVldG9vdGggcG93ZXIgZG93biBvbiByZXN1bWUgcmVxdWVzdCBmYWlsZWRcbiIpOwogfQogCiBzdGF0aWMgaW50IGJsdWV0b290aF9nZXRfcmFkaW9zdyh2b2lkKQpAQCAtMzAxNSw2ICszMDkwLDEwIEBACiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybjsKIAlyZmtpbGxfZm9yY2Vfc3RhdGUodHBhY3BpX2JsdWV0b290aF9yZmtpbGwsIHN0YXR1cyk7CisKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX1JGS0lMTCwKKwkJImZvcmNlZCByZmtpbGwgc3RhdGUgdG8gJWRcbiIsCisJCXN0YXR1cyk7CiB9CiAKIHN0YXRpYyBpbnQgYmx1ZXRvb3RoX3NldF9yYWRpb3N3KGludCByYWRpb19vbiwgaW50IHVwZGF0ZV9yZmspCkBAIC0zMDMwLDYgKzMxMDksOSBAQAogCSAgICAmJiByYWRpb19vbikKIAkJcmV0dXJuIC1FUEVSTTsKIAorCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfUkZLSUxMLAorCQkid2lsbCAlcyBibHVldG9vdGhcbiIsIHJhZGlvX29uID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfREVCVUdGQUNJTElUSUVTCiAJaWYgKGRiZ19ibHVldG9vdGhlbXVsKSB7CiAJCXRwYWNwaV9ibHVldG9vdGhfZW11bHN0YXRlID0gISFyYWRpb19vbjsKQEAgLTMwNjAsNiArMzE0Miw4IEBACiB7CiAJaW50IHN0YXR1czsKIAorCXByaW50a19kZXByZWNhdGVkX3Jma2lsbF9hdHRyaWJ1dGUoImJsdWV0b290aF9lbmFibGUiKTsKKwogCXN0YXR1cyA9IGJsdWV0b290aF9nZXRfcmFkaW9zdygpOwogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwpAQCAtMzA3NSw5ICszMTU5LDEzIEBACiAJdW5zaWduZWQgbG9uZyB0OwogCWludCByZXM7CiAKKwlwcmludGtfZGVwcmVjYXRlZF9yZmtpbGxfYXR0cmlidXRlKCJibHVldG9vdGhfZW5hYmxlIik7CisKIAlpZiAocGFyc2Vfc3RydG91bChidWYsIDEsICZ0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soImJsdWV0b290aF9lbmFibGUiLCAic2V0IHRvICVsZFxuIiwgdCk7CisKIAlyZXMgPSBibHVldG9vdGhfc2V0X3JhZGlvc3codCwgMSk7CiAKIAlyZXR1cm4gKHJlcykgPyByZXMgOiBjb3VudDsKQEAgLTMxMTEsNiArMzE5OSw4IEBACiAKIHN0YXRpYyBpbnQgdHBhY3BpX2JsdWV0b290aF9yZmtfc2V0KHZvaWQgKmRhdGEsIGVudW0gcmZraWxsX3N0YXRlIHN0YXRlKQogeworCWRiZ19wcmludGsoVFBBQ1BJX0RCR19SRktJTEwsCisJCSAgICJyZXF1ZXN0IHRvIGNoYW5nZSByYWRpbyBzdGF0ZSB0byAlZFxuIiwgc3RhdGUpOwogCXJldHVybiBibHVldG9vdGhfc2V0X3JhZGlvc3coKHN0YXRlID09IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpLCAwKTsKIH0KIApAQCAtMzEyMSw2ICszMjExLDkgQEAKIAkJCVRQX0FDUElfQkxUSF9TQVZFX1NUQVRFKSkKIAkJcHJpbnRrKFRQQUNQSV9OT1RJQ0UKIAkJCSJmYWlsZWQgdG8gc2F2ZSBibHVldG9vdGggc3RhdGUgdG8gTlZSQU1cbiIpOworCWVsc2UKKwkJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19SRktJTEwsCisJCQkiYmx1ZXN0b290aCBzdGF0ZSBzYXZlZCB0byBOVlJBTVxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGJsdWV0b290aF9leGl0KHZvaWQpCkBAIC0zMTM5LDcgKzMyMzIsOCBAQAogCWludCByZXM7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsICJpbml0aWFsaXppbmcgYmx1ZXRvb3RoIHN1YmRyaXZlclxuIik7CisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19SRktJTEwsCisJCQkiaW5pdGlhbGl6aW5nIGJsdWV0b290aCBzdWJkcml2ZXJcbiIpOwogCiAJVFBBQ1BJX0FDUElIQU5ETEVfSU5JVChoa2V5KTsKIApAQCAtMzE0OCw3ICszMjQyLDggQEAKIAl0cF9mZWF0dXJlcy5ibHVldG9vdGggPSBoa2V5X2hhbmRsZSAmJgogCSAgICBhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmc3RhdHVzLCAiR0JEQyIsICJxZCIpOwogCi0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAiYmx1ZXRvb3RoIGlzICVzLCBzdGF0dXMgMHglMDJ4XG4iLAorCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfUkZLSUxMLAorCQkiYmx1ZXRvb3RoIGlzICVzLCBzdGF0dXMgMHglMDJ4XG4iLAogCQlzdHJfc3VwcG9ydGVkKHRwX2ZlYXR1cmVzLmJsdWV0b290aCksCiAJCXN0YXR1cyk7CiAKQEAgLTMxNjMsNyArMzI1OCw3IEBACiAJICAgICEoc3RhdHVzICYgVFBfQUNQSV9CTFVFVE9PVEhfSFdQUkVTRU5UKSkgewogCQkvKiBubyBibHVldG9vdGggaGFyZHdhcmUgcHJlc2VudCBpbiBzeXN0ZW0gKi8KIAkJdHBfZmVhdHVyZXMuYmx1ZXRvb3RoID0gMDsKLQkJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsCisJCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19SRktJTEwsCiAJCQkgICAiYmx1ZXRvb3RoIGhhcmR3YXJlIG5vdCBpbnN0YWxsZWRcbiIpOwogCX0KIApAQCAtMzE3OCw3ICszMjczLDcgQEAKIAlyZXMgPSB0cGFjcGlfbmV3X3Jma2lsbChUUEFDUElfUkZLX0JMVUVUT09USF9TV19JRCwKIAkJCQkmdHBhY3BpX2JsdWV0b290aF9yZmtpbGwsCiAJCQkJUkZLSUxMX1RZUEVfQkxVRVRPT1RILAotCQkJCSJ0cGFjcGlfYmx1ZXRvb3RoX3N3IiwKKwkJCQlUUEFDUElfUkZLX0JMVUVUT09USF9TV19OQU1FLAogCQkJCXRydWUsCiAJCQkJdHBhY3BpX2JsdWV0b290aF9yZmtfc2V0LAogCQkJCXRwYWNwaV9ibHVldG9vdGhfcmZrX2dldCk7CkBAIC0zMjExLDE5ICszMzA2LDI3IEBACiBzdGF0aWMgaW50IGJsdWV0b290aF93cml0ZShjaGFyICpidWYpCiB7CiAJY2hhciAqY21kOworCWludCBzdGF0ZSA9IC0xOwogCiAJaWYgKCF0cF9mZWF0dXJlcy5ibHVldG9vdGgpCiAJCXJldHVybiAtRU5PREVWOwogCiAJd2hpbGUgKChjbWQgPSBuZXh0X2NtZCgmYnVmKSkpIHsKIAkJaWYgKHN0cmxlbmNtcChjbWQsICJlbmFibGUiKSA9PSAwKSB7Ci0JCQlibHVldG9vdGhfc2V0X3JhZGlvc3coMSwgMSk7CisJCQlzdGF0ZSA9IDE7CiAJCX0gZWxzZSBpZiAoc3RybGVuY21wKGNtZCwgImRpc2FibGUiKSA9PSAwKSB7Ci0JCQlibHVldG9vdGhfc2V0X3JhZGlvc3coMCwgMSk7CisJCQlzdGF0ZSA9IDA7CiAJCX0gZWxzZQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKHN0YXRlICE9IC0xKSB7CisJCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygicHJvY2ZzIGJsdWV0b290aCIsCisJCQkiYXR0ZW1wdCB0byAlc1xuIiwKKwkJCXN0YXRlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCQlibHVldG9vdGhfc2V0X3JhZGlvc3coc3RhdGUsIDEpOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zMjQ4LDEzICszMzUxLDE3IEBACiAJCQkJCQkgICBvZmYgLyBsYXN0IHN0YXRlICovCiB9OwogCisjZGVmaW5lIFRQQUNQSV9SRktfV1dBTl9TV19OQU1FCQkidHBhY3BpX3d3YW5fc3ciCisKIHN0YXRpYyBzdHJ1Y3QgcmZraWxsICp0cGFjcGlfd2FuX3Jma2lsbDsKIAogc3RhdGljIHZvaWQgd2FuX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQogewogCS8qIFRyeSB0byBtYWtlIHN1cmUgcmFkaW8gd2lsbCByZXN1bWUgcG93ZXJlZCBvZmYgKi8KLQlhY3BpX2V2YWxmKE5VTEwsIE5VTEwsICJcXFdHU1YiLCAicXZkIiwKLQkJICAgVFBfQUNQSV9XR1NWX1BXUl9PRkZfT05fUkVTVU1FKTsKKwlpZiAoIWFjcGlfZXZhbGYoTlVMTCwgTlVMTCwgIlxcV0dTViIsICJxdmQiLAorCQkgICBUUF9BQ1BJX1dHU1ZfUFdSX09GRl9PTl9SRVNVTUUpKQorCQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX1JGS0lMTCwKKwkJCSJXV0FOIHBvd2VyIGRvd24gb24gcmVzdW1lIHJlcXVlc3QgZmFpbGVkXG4iKTsKIH0KIAogc3RhdGljIGludCB3YW5fZ2V0X3JhZGlvc3codm9pZCkKQEAgLTMyOTIsNiArMzM5OSwxMCBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm47CiAJcmZraWxsX2ZvcmNlX3N0YXRlKHRwYWNwaV93YW5fcmZraWxsLCBzdGF0dXMpOworCisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19SRktJTEwsCisJCSJmb3JjZWQgcmZraWxsIHN0YXRlIHRvICVkXG4iLAorCQlzdGF0dXMpOwogfQogCiBzdGF0aWMgaW50IHdhbl9zZXRfcmFkaW9zdyhpbnQgcmFkaW9fb24sIGludCB1cGRhdGVfcmZrKQpAQCAtMzMwNyw2ICszNDE4LDkgQEAKIAkgICAgJiYgcmFkaW9fb24pCiAJCXJldHVybiAtRVBFUk07CiAKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX1JGS0lMTCwKKwkJIndpbGwgJXMgV1dBTlxuIiwgcmFkaW9fb24gPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CisKICNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9ERUJVR0ZBQ0lMSVRJRVMKIAlpZiAoZGJnX3d3YW5lbXVsKSB7CiAJCXRwYWNwaV93d2FuX2VtdWxzdGF0ZSA9ICEhcmFkaW9fb247CkBAIC0zMzM3LDYgKzM0NTEsOCBAQAogewogCWludCBzdGF0dXM7CiAKKwlwcmludGtfZGVwcmVjYXRlZF9yZmtpbGxfYXR0cmlidXRlKCJ3d2FuX2VuYWJsZSIpOworCiAJc3RhdHVzID0gd2FuX2dldF9yYWRpb3N3KCk7CiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7CkBAIC0zMzUyLDkgKzM0NjgsMTMgQEAKIAl1bnNpZ25lZCBsb25nIHQ7CiAJaW50IHJlczsKIAorCXByaW50a19kZXByZWNhdGVkX3Jma2lsbF9hdHRyaWJ1dGUoInd3YW5fZW5hYmxlIik7CisKIAlpZiAocGFyc2Vfc3RydG91bChidWYsIDEsICZ0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soInd3YW5fZW5hYmxlIiwgInNldCB0byAlbGRcbiIsIHQpOworCiAJcmVzID0gd2FuX3NldF9yYWRpb3N3KHQsIDEpOwogCiAJcmV0dXJuIChyZXMpID8gcmVzIDogY291bnQ7CkBAIC0zMzg4LDYgKzM1MDgsOCBAQAogCiBzdGF0aWMgaW50IHRwYWNwaV93YW5fcmZrX3NldCh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZSkKIHsKKwlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfUkZLSUxMLAorCQkgICAicmVxdWVzdCB0byBjaGFuZ2UgcmFkaW8gc3RhdGUgdG8gJWRcbiIsIHN0YXRlKTsKIAlyZXR1cm4gd2FuX3NldF9yYWRpb3N3KChzdGF0ZSA9PSBSRktJTExfU1RBVEVfVU5CTE9DS0VEKSwgMCk7CiB9CiAKQEAgLTMzOTgsNiArMzUyMCw5IEBACiAJCQlUUF9BQ1BJX1dHU1ZfU0FWRV9TVEFURSkpCiAJCXByaW50ayhUUEFDUElfTk9USUNFCiAJCQkiZmFpbGVkIHRvIHNhdmUgV1dBTiBzdGF0ZSB0byBOVlJBTVxuIik7CisJZWxzZQorCQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX1JGS0lMTCwKKwkJCSJXV0FOIHN0YXRlIHNhdmVkIHRvIE5WUkFNXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgd2FuX2V4aXQodm9pZCkKQEAgLTM0MTYsMTQgKzM1NDEsMTYgQEAKIAlpbnQgcmVzOwogCWludCBzdGF0dXMgPSAwOwogCi0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAiaW5pdGlhbGl6aW5nIHdhbiBzdWJkcml2ZXJcbiIpOworCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfUkZLSUxMLAorCQkJImluaXRpYWxpemluZyB3YW4gc3ViZHJpdmVyXG4iKTsKIAogCVRQQUNQSV9BQ1BJSEFORExFX0lOSVQoaGtleSk7CiAKIAl0cF9mZWF0dXJlcy53YW4gPSBoa2V5X2hhbmRsZSAmJgogCSAgICBhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmc3RhdHVzLCAiR1dBTiIsICJxZCIpOwogCi0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAid2FuIGlzICVzLCBzdGF0dXMgMHglMDJ4XG4iLAorCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfUkZLSUxMLAorCQkid2FuIGlzICVzLCBzdGF0dXMgMHglMDJ4XG4iLAogCQlzdHJfc3VwcG9ydGVkKHRwX2ZlYXR1cmVzLndhbiksCiAJCXN0YXR1cyk7CiAKQEAgLTM0MzgsNyArMzU2NSw3IEBACiAJICAgICEoc3RhdHVzICYgVFBfQUNQSV9XQU5DQVJEX0hXUFJFU0VOVCkpIHsKIAkJLyogbm8gd2FuIGhhcmR3YXJlIHByZXNlbnQgaW4gc3lzdGVtICovCiAJCXRwX2ZlYXR1cmVzLndhbiA9IDA7Ci0JCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULAorCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfUkZLSUxMLAogCQkJICAgIndhbiBoYXJkd2FyZSBub3QgaW5zdGFsbGVkXG4iKTsKIAl9CiAKQEAgLTM0NTMsNyArMzU4MCw3IEBACiAJcmVzID0gdHBhY3BpX25ld19yZmtpbGwoVFBBQ1BJX1JGS19XV0FOX1NXX0lELAogCQkJCSZ0cGFjcGlfd2FuX3Jma2lsbCwKIAkJCQlSRktJTExfVFlQRV9XV0FOLAotCQkJCSJ0cGFjcGlfd3dhbl9zdyIsCisJCQkJVFBBQ1BJX1JGS19XV0FOX1NXX05BTUUsCiAJCQkJdHJ1ZSwKIAkJCQl0cGFjcGlfd2FuX3Jma19zZXQsCiAJCQkJdHBhY3BpX3dhbl9yZmtfZ2V0KTsKQEAgLTM0NzEsNiArMzU5OCw4IEBACiAJaW50IGxlbiA9IDA7CiAJaW50IHN0YXR1cyA9IHdhbl9nZXRfcmFkaW9zdygpOwogCisJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJwcm9jZnMgd2FuIiwgInJlYWQiKTsKKwogCWlmICghdHBfZmVhdHVyZXMud2FuKQogCQlsZW4gKz0gc3ByaW50ZihwICsgbGVuLCAic3RhdHVzOlx0XHRub3Qgc3VwcG9ydGVkXG4iKTsKIAllbHNlIHsKQEAgLTM0ODYsMTkgKzM2MTUsMjcgQEAKIHN0YXRpYyBpbnQgd2FuX3dyaXRlKGNoYXIgKmJ1ZikKIHsKIAljaGFyICpjbWQ7CisJaW50IHN0YXRlID0gLTE7CiAKIAlpZiAoIXRwX2ZlYXR1cmVzLndhbikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAl3aGlsZSAoKGNtZCA9IG5leHRfY21kKCZidWYpKSkgewogCQlpZiAoc3RybGVuY21wKGNtZCwgImVuYWJsZSIpID09IDApIHsKLQkJCXdhbl9zZXRfcmFkaW9zdygxLCAxKTsKKwkJCXN0YXRlID0gMTsKIAkJfSBlbHNlIGlmIChzdHJsZW5jbXAoY21kLCAiZGlzYWJsZSIpID09IDApIHsKLQkJCXdhbl9zZXRfcmFkaW9zdygwLCAxKTsKKwkJCXN0YXRlID0gMDsKIAkJfSBlbHNlCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoc3RhdGUgIT0gLTEpIHsKKwkJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJwcm9jZnMgd2FuIiwKKwkJCSJhdHRlbXB0IHRvICVzXG4iLAorCQkJc3RhdGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CisJCXdhbl9zZXRfcmFkaW9zdyhzdGF0ZSwgMSk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1MjEsNiArMzY1OCw4IEBACiAJVFBfQUNQSV9VV0JfUkFESU9TU1cJPSAweDAyLAkvKiBVV0IgcmFkaW8gZW5hYmxlZCAqLwogfTsKIAorI2RlZmluZSBUUEFDUElfUkZLX1VXQl9TV19OQU1FCSJ0cGFjcGlfdXdiX3N3IgorCiBzdGF0aWMgc3RydWN0IHJma2lsbCAqdHBhY3BpX3V3Yl9yZmtpbGw7CiAKIHN0YXRpYyBpbnQgdXdiX2dldF9yYWRpb3N3KHZvaWQpCkBAIC0zNTU4LDYgKzM2OTcsMTAgQEAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuOwogCXJma2lsbF9mb3JjZV9zdGF0ZSh0cGFjcGlfdXdiX3Jma2lsbCwgc3RhdHVzKTsKKworCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfUkZLSUxMLAorCQkiZm9yY2VkIHJma2lsbCBzdGF0ZSB0byAlZFxuIiwKKwkJc3RhdHVzKTsKIH0KIAogc3RhdGljIGludCB1d2Jfc2V0X3JhZGlvc3coaW50IHJhZGlvX29uLCBpbnQgdXBkYXRlX3JmaykKQEAgLTM1NzMsNiArMzcxNiw5IEBACiAJICAgICYmIHJhZGlvX29uKQogCQlyZXR1cm4gLUVQRVJNOwogCisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19SRktJTEwsCisJCQkid2lsbCAlcyBVV0JcbiIsIHJhZGlvX29uID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCiAjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfREVCVUdGQUNJTElUSUVTCiAJaWYgKGRiZ191d2JlbXVsKSB7CiAJCXRwYWNwaV91d2JfZW11bHN0YXRlID0gISFyYWRpb19vbjsKQEAgLTM2MDcsNiArMzc1Myw4IEBACiAKIHN0YXRpYyBpbnQgdHBhY3BpX3V3Yl9yZmtfc2V0KHZvaWQgKmRhdGEsIGVudW0gcmZraWxsX3N0YXRlIHN0YXRlKQogeworCWRiZ19wcmludGsoVFBBQ1BJX0RCR19SRktJTEwsCisJCSAgICJyZXF1ZXN0IHRvIGNoYW5nZSByYWRpbyBzdGF0ZSB0byAlZFxuIiwgc3RhdGUpOwogCXJldHVybiB1d2Jfc2V0X3JhZGlvc3coKHN0YXRlID09IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpLCAwKTsKIH0KIApAQCAtMzYyMSwxNCArMzc2OSwxNiBAQAogCWludCByZXM7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsICJpbml0aWFsaXppbmcgdXdiIHN1YmRyaXZlclxuIik7CisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19SRktJTEwsCisJCQkiaW5pdGlhbGl6aW5nIHV3YiBzdWJkcml2ZXJcbiIpOwogCiAJVFBBQ1BJX0FDUElIQU5ETEVfSU5JVChoa2V5KTsKIAogCXRwX2ZlYXR1cmVzLnV3YiA9IGhrZXlfaGFuZGxlICYmCiAJICAgIGFjcGlfZXZhbGYoaGtleV9oYW5kbGUsICZzdGF0dXMsICJHVVdCIiwgInFkIik7CiAKLQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsICJ1d2IgaXMgJXMsIHN0YXR1cyAweCUwMnhcbiIsCisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19SRktJTEwsCisJCSJ1d2IgaXMgJXMsIHN0YXR1cyAweCUwMnhcbiIsCiAJCXN0cl9zdXBwb3J0ZWQodHBfZmVhdHVyZXMudXdiKSwKIAkJc3RhdHVzKTsKIApAQCAtMzY1Myw3ICszODAzLDcgQEAKIAlyZXMgPSB0cGFjcGlfbmV3X3Jma2lsbChUUEFDUElfUkZLX1VXQl9TV19JRCwKIAkJCQkmdHBhY3BpX3V3Yl9yZmtpbGwsCiAJCQkJUkZLSUxMX1RZUEVfVVdCLAotCQkJCSJ0cGFjcGlfdXdiX3N3IiwKKwkJCQlUUEFDUElfUkZLX1VXQl9TV19OQU1FLAogCQkJCWZhbHNlLAogCQkJCXRwYWNwaV91d2JfcmZrX3NldCwKIAkJCQl0cGFjcGlfdXdiX3Jma19nZXQpOwpAQCAtNDYwMiw2ICs0NzUyLDE2IEBACiAJInRwYWNwaTo6dW5rbm93bl9sZWQiLAogCSJ0cGFjcGk6OnN0YW5kYnkiLAogfTsKKyNkZWZpbmUgVFBBQ1BJX1NBRkVfTEVEUwkweDAwODFVCisKK3N0YXRpYyBpbmxpbmUgYm9vbCB0cGFjcGlfaXNfbGVkX3Jlc3RyaWN0ZWQoY29uc3QgdW5zaWduZWQgaW50IGxlZCkKK3sKKyNpZmRlZiBDT05GSUdfVEhJTktQQURfQUNQSV9VTlNBRkVfTEVEUworCXJldHVybiBmYWxzZTsKKyNlbHNlCisJcmV0dXJuIChUUEFDUElfU0FGRV9MRURTICYgKDEgPDwgbGVkKSkgPT0gMDsKKyNlbmRpZgorfQogCiBzdGF0aWMgaW50IGxlZF9nZXRfc3RhdHVzKGNvbnN0IHVuc2lnbmVkIGludCBsZWQpCiB7CkBAIC00NjM5LDE2ICs0Nzk5LDIwIEBACiAJc3dpdGNoIChsZWRfc3VwcG9ydGVkKSB7CiAJY2FzZSBUUEFDUElfTEVEXzU3MDoKIAkJLyogNTcwICovCi0JCWlmIChsZWQgPiA3KQorCQlpZiAodW5saWtlbHkobGVkID4gNykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHVubGlrZWx5KHRwYWNwaV9pc19sZWRfcmVzdHJpY3RlZChsZWQpKSkKKwkJCXJldHVybiAtRVBFUk07CiAJCWlmICghYWNwaV9ldmFsZihsZWRfaGFuZGxlLCBOVUxMLCBOVUxMLCAidmRkIiwKIAkJCQkoMSA8PCBsZWQpLCBsZWRfc2xlZF9hcmcxW2xlZHN0YXR1c10pKQogCQkJcmMgPSAtRUlPOwogCQlicmVhazsKIAljYXNlIFRQQUNQSV9MRURfT0xEOgogCQkvKiA2MDBlL3gsIDc3MGUsIDc3MHgsIEEyMWUsIEEyeG0vcCwgVDIwLTIyLCBYMjAgKi8KLQkJaWYgKGxlZCA+IDcpCisJCWlmICh1bmxpa2VseShsZWQgPiA3KSkKIAkJCXJldHVybiAtRUlOVkFMOworCQlpZiAodW5saWtlbHkodHBhY3BpX2lzX2xlZF9yZXN0cmljdGVkKGxlZCkpKQorCQkJcmV0dXJuIC1FUEVSTTsKIAkJcmMgPSBlY193cml0ZShUUEFDUElfTEVEX0VDX0hMTVMsICgxIDw8IGxlZCkpOwogCQlpZiAocmMgPj0gMCkKIAkJCXJjID0gZWNfd3JpdGUoVFBBQ1BJX0xFRF9FQ19ITEJMLApAQCAtNDY1OSw2ICs0ODIzLDEwIEBACiAJCWJyZWFrOwogCWNhc2UgVFBBQ1BJX0xFRF9ORVc6CiAJCS8qIGFsbCBvdGhlcnMgKi8KKwkJaWYgKHVubGlrZWx5KGxlZCA+PSBUUEFDUElfTEVEX05VTUxFRFMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICh1bmxpa2VseSh0cGFjcGlfaXNfbGVkX3Jlc3RyaWN0ZWQobGVkKSkpCisJCQlyZXR1cm4gLUVQRVJNOwogCQlpZiAoIWFjcGlfZXZhbGYobGVkX2hhbmRsZSwgTlVMTCwgTlVMTCwgInZkZCIsCiAJCQkJbGVkLCBsZWRfbGVkX2FyZzFbbGVkc3RhdHVzXSkpCiAJCQlyYyA9IC1FSU87CkBAIC00NzUxLDYgKzQ5MTksMzAgQEAKIAlrZnJlZSh0cGFjcGlfbGVkcyk7CiB9CiAKK3N0YXRpYyBpbnQgX19pbml0IHRwYWNwaV9pbml0X2xlZCh1bnNpZ25lZCBpbnQgbGVkKQoreworCWludCByYzsKKworCXRwYWNwaV9sZWRzW2xlZF0ubGVkID0gbGVkOworCisJdHBhY3BpX2xlZHNbbGVkXS5sZWRfY2xhc3NkZXYuYnJpZ2h0bmVzc19zZXQgPSAmbGVkX3N5c2ZzX3NldDsKKwl0cGFjcGlfbGVkc1tsZWRdLmxlZF9jbGFzc2Rldi5ibGlua19zZXQgPSAmbGVkX3N5c2ZzX2JsaW5rX3NldDsKKwlpZiAobGVkX3N1cHBvcnRlZCA9PSBUUEFDUElfTEVEXzU3MCkKKwkJdHBhY3BpX2xlZHNbbGVkXS5sZWRfY2xhc3NkZXYuYnJpZ2h0bmVzc19nZXQgPQorCQkJCQkJJmxlZF9zeXNmc19nZXQ7CisKKwl0cGFjcGlfbGVkc1tsZWRdLmxlZF9jbGFzc2Rldi5uYW1lID0gdHBhY3BpX2xlZF9uYW1lc1tsZWRdOworCisJSU5JVF9XT1JLKCZ0cGFjcGlfbGVkc1tsZWRdLndvcmssIGxlZF9zZXRfc3RhdHVzX3dvcmtlcik7CisKKwlyYyA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcigmdHBhY3BpX3BkZXYtPmRldiwKKwkJCQkmdHBhY3BpX2xlZHNbbGVkXS5sZWRfY2xhc3NkZXYpOworCWlmIChyYyA8IDApCisJCXRwYWNwaV9sZWRzW2xlZF0ubGVkX2NsYXNzZGV2Lm5hbWUgPSBOVUxMOworCisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBsZWRfaW5pdChzdHJ1Y3QgaWJtX2luaXRfc3RydWN0ICppaWJtKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtNDc4NCwyNyArNDk3NiwyMSBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBUUEFDUElfTEVEX05VTUxFRFM7IGkrKykgewotCQl0cGFjcGlfbGVkc1tpXS5sZWQgPSBpOwotCi0JCXRwYWNwaV9sZWRzW2ldLmxlZF9jbGFzc2Rldi5icmlnaHRuZXNzX3NldCA9ICZsZWRfc3lzZnNfc2V0OwotCQl0cGFjcGlfbGVkc1tpXS5sZWRfY2xhc3NkZXYuYmxpbmtfc2V0ID0gJmxlZF9zeXNmc19ibGlua19zZXQ7Ci0JCWlmIChsZWRfc3VwcG9ydGVkID09IFRQQUNQSV9MRURfNTcwKQotCQkJdHBhY3BpX2xlZHNbaV0ubGVkX2NsYXNzZGV2LmJyaWdodG5lc3NfZ2V0ID0KLQkJCQkJCQkmbGVkX3N5c2ZzX2dldDsKLQotCQl0cGFjcGlfbGVkc1tpXS5sZWRfY2xhc3NkZXYubmFtZSA9IHRwYWNwaV9sZWRfbmFtZXNbaV07Ci0KLQkJSU5JVF9XT1JLKCZ0cGFjcGlfbGVkc1tpXS53b3JrLCBsZWRfc2V0X3N0YXR1c193b3JrZXIpOwotCi0JCXJjID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKCZ0cGFjcGlfcGRldi0+ZGV2LAotCQkJCQkgICAmdHBhY3BpX2xlZHNbaV0ubGVkX2NsYXNzZGV2KTsKLQkJaWYgKHJjIDwgMCkgewotCQkJdHBhY3BpX2xlZHNbaV0ubGVkX2NsYXNzZGV2Lm5hbWUgPSBOVUxMOwotCQkJbGVkX2V4aXQoKTsKLQkJCXJldHVybiByYzsKKwkJaWYgKCF0cGFjcGlfaXNfbGVkX3Jlc3RyaWN0ZWQoaSkpIHsKKwkJCXJjID0gdHBhY3BpX2luaXRfbGVkKGkpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWxlZF9leGl0KCk7CisJCQkJcmV0dXJuIHJjOworCQkJfQogCQl9CiAJfQogCisjaWZkZWYgQ09ORklHX1RISU5LUEFEX0FDUElfVU5TQUZFX0xFRFMKKwlpZiAobGVkX3N1cHBvcnRlZCAhPSBUUEFDUElfTEVEX05PTkUpCisJCXByaW50ayhUUEFDUElfTk9USUNFCisJCQkid2FybmluZzogdXNlcnNwYWNlIG92ZXJyaWRlIG9mIGltcG9ydGFudCAiCisJCQkiZmlybXdhcmUgTEVEcyBpcyBlbmFibGVkXG4iKTsKKyNlbmRpZgogCXJldHVybiAobGVkX3N1cHBvcnRlZCAhPSBUUEFDUElfTEVEX05PTkUpPyAwIDogMTsKIH0KIApAQCAtNTM0MCw2ICs1NTI2LDIwIEBACiAKICNkZWZpbmUgVFBBQ1BJX0JBQ0tMSUdIVF9ERVZfTkFNRSAidGhpbmtwYWRfc2NyZWVuIgogCisvKgorICogVGhpbmtQYWRzIGNhbiByZWFkIGJyaWdodG5lc3MgZnJvbSB0d28gcGxhY2VzOiBFQyBIQlJWICgweDMxKSwgb3IKKyAqIENNT1MgTlZSQU0gYnl0ZSAweDVFLCBiaXRzIDAtMy4KKyAqCisgKiBFQyBIQlJWICgweDMxKSBoYXMgdGhlIGZvbGxvd2luZyBsYXlvdXQKKyAqICAgQml0IDc6IHVua25vd24gZnVuY3Rpb24KKyAqICAgQml0IDY6IHVua25vd24gZnVuY3Rpb24KKyAqICAgQml0IDU6IFo6IGhvbm91ciBzY2FsZSBjaGFuZ2VzLCBOWjogaWdub3JlIHNjYWxlIGNoYW5nZXMKKyAqICAgQml0IDQ6IG11c3QgYmUgc2V0IHRvIHplcm8gdG8gYXZvaWQgcHJvYmxlbXMKKyAqICAgQml0IDMtMDogYmFja2xpZ2h0IGJyaWdodG5lc3MgbGV2ZWwKKyAqCisgKiBicmlnaHRuZXNzX2dldF9yYXcgcmV0dXJucyBzdGF0dXMgZGF0YSBpbiB0aGUgSEJSViBsYXlvdXQKKyAqLworCiBlbnVtIHsKIAlUUF9FQ19CQUNLTElHSFQgPSAweDMxLAogCkBAIC01MzQ5LDEwOCArNTU0OSwxNjQgQEAKIAlUUF9FQ19CQUNLTElHSFRfTUFQU1cgPSAweDIwLAogfTsKIAorZW51bSB0cGFjcGlfYnJpZ2h0bmVzc19hY2Nlc3NfbW9kZSB7CisJVFBBQ1BJX0JSR0hUX01PREVfQVVUTyA9IDAsCS8qIE5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKwlUUEFDUElfQlJHSFRfTU9ERV9FQywJCS8qIEVDIGNvbnRyb2wgKi8KKwlUUEFDUElfQlJHSFRfTU9ERV9VQ01TX1NURVAsCS8qIFVDTVMgc3RlcC1iYXNlZCBjb250cm9sICovCisJVFBBQ1BJX0JSR0hUX01PREVfRUNOVlJBTSwJLyogRUMgY29udHJvbCB3LyBOVlJBTSBzdG9yZSAqLworCVRQQUNQSV9CUkdIVF9NT0RFX01BWAorfTsKKwogc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICppYm1fYmFja2xpZ2h0X2RldmljZTsKLXN0YXRpYyBpbnQgYnJpZ2h0bmVzc19tb2RlOworCitzdGF0aWMgZW51bSB0cGFjcGlfYnJpZ2h0bmVzc19hY2Nlc3NfbW9kZSBicmlnaHRuZXNzX21vZGUgPQorCQlUUEFDUElfQlJHSFRfTU9ERV9NQVg7CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzc19lbmFibGUgPSAyOyAvKiAyID0gYXV0bywgMCA9IG5vLCAxID0geWVzICovCiAKIHN0YXRpYyBzdHJ1Y3QgbXV0ZXggYnJpZ2h0bmVzc19tdXRleDsKIAotLyoKLSAqIFRoaW5rUGFkcyBjYW4gcmVhZCBicmlnaHRuZXNzIGZyb20gdHdvIHBsYWNlczogRUMgMHgzMSwgb3IKLSAqIENNT1MgTlZSQU0gYnl0ZSAweDVFLCBiaXRzIDAtMy4KLSAqCi0gKiBFQyAweDMxIGhhcyB0aGUgZm9sbG93aW5nIGxheW91dAotICogICBCaXQgNzogdW5rbm93biBmdW5jdGlvbgotICogICBCaXQgNjogdW5rbm93biBmdW5jdGlvbgotICogICBCaXQgNTogWjogaG9ub3VyIHNjYWxlIGNoYW5nZXMsIE5aOiBpZ25vcmUgc2NhbGUgY2hhbmdlcwotICogICBCaXQgNDogbXVzdCBiZSBzZXQgdG8gemVybyB0byBhdm9pZCBwcm9ibGVtcwotICogICBCaXQgMy0wOiBiYWNrbGlnaHQgYnJpZ2h0bmVzcyBsZXZlbAotICoKLSAqIGJyaWdodG5lc3NfZ2V0X3JhdyByZXR1cm5zIHN0YXR1cyBkYXRhIGluIHRoZSBFQyAweDMxIGxheW91dAotICovCi1zdGF0aWMgaW50IGJyaWdodG5lc3NfZ2V0X3JhdyhpbnQgKnN0YXR1cykKKy8qIE5WUkFNIGJyaWdodG5lc3MgYWNjZXNzLAorICogY2FsbCB3aXRoIGJyaWdodG5lc3NfbXV0ZXggaGVsZCEgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHBhY3BpX2JyaWdodG5lc3NfbnZyYW1fZ2V0KHZvaWQpCiB7Ci0JdTggbGVjID0gMCwgbGNtb3MgPSAwLCBsZXZlbCA9IDA7CisJdTggbG52cmFtOwogCi0JaWYgKGJyaWdodG5lc3NfbW9kZSAmIDEpIHsKLQkJaWYgKCFhY3BpX2VjX3JlYWQoVFBfRUNfQkFDS0xJR0hULCAmbGVjKSkKLQkJCXJldHVybiAtRUlPOwotCQlsZXZlbCA9IGxlYyAmIFRQX0VDX0JBQ0tMSUdIVF9MVkxNU0s7Ci0JfTsKLQlpZiAoYnJpZ2h0bmVzc19tb2RlICYgMikgewotCQlsY21vcyA9IChudnJhbV9yZWFkX2J5dGUoVFBfTlZSQU1fQUREUl9CUklHSFRORVNTKQotCQkJICYgVFBfTlZSQU1fTUFTS19MRVZFTF9CUklHSFRORVNTKQotCQkJPj4gVFBfTlZSQU1fUE9TX0xFVkVMX0JSSUdIVE5FU1M7Ci0JCWxjbW9zICY9ICh0cF9mZWF0dXJlcy5icmlnaHRfMTZsZXZlbHMpPyAweDBmIDogMHgwNzsKLQkJbGV2ZWwgPSBsY21vczsKLQl9CisJbG52cmFtID0gKG52cmFtX3JlYWRfYnl0ZShUUF9OVlJBTV9BRERSX0JSSUdIVE5FU1MpCisJCSAgJiBUUF9OVlJBTV9NQVNLX0xFVkVMX0JSSUdIVE5FU1MpCisJCSAgPj4gVFBfTlZSQU1fUE9TX0xFVkVMX0JSSUdIVE5FU1M7CisJbG52cmFtICY9ICh0cF9mZWF0dXJlcy5icmlnaHRfMTZsZXZlbHMpID8gMHgwZiA6IDB4MDc7CiAKLQlpZiAoYnJpZ2h0bmVzc19tb2RlID09IDMpIHsKLQkJKnN0YXR1cyA9IGxlYzsJLyogUHJlZmVyIEVDLCBDTU9TIGlzIGp1c3QgYSBiYWNraW5nIHN0b3JlICovCi0JCWxlYyAmPSBUUF9FQ19CQUNLTElHSFRfTFZMTVNLOwotCQlpZiAobGVjID09IGxjbW9zKQotCQkJdHBfd2FybmVkLmJyaWdodF9jbW9zX2VjX3Vuc3luYyA9IDA7Ci0JCWVsc2UgewotCQkJaWYgKCF0cF93YXJuZWQuYnJpZ2h0X2Ntb3NfZWNfdW5zeW5jKSB7Ci0JCQkJcHJpbnRrKFRQQUNQSV9FUlIKLQkJCQkJIkNNT1MgTlZSQU0gKCV1KSBhbmQgRUMgKCV1KSBkbyBub3QgIgotCQkJCQkiYWdyZWUgb24gZGlzcGxheSBicmlnaHRuZXNzIGxldmVsXG4iLAotCQkJCQkodW5zaWduZWQgaW50KSBsY21vcywKLQkJCQkJKHVuc2lnbmVkIGludCkgbGVjKTsKLQkJCQl0cF93YXJuZWQuYnJpZ2h0X2Ntb3NfZWNfdW5zeW5jID0gMTsKLQkJCX0KKwlyZXR1cm4gbG52cmFtOworfQorCitzdGF0aWMgdm9pZCB0cGFjcGlfYnJpZ2h0bmVzc19jaGVja3BvaW50X252cmFtKHZvaWQpCit7CisJdTggbGVjID0gMDsKKwl1OCBiX252cmFtOworCisJaWYgKGJyaWdodG5lc3NfbW9kZSAhPSBUUEFDUElfQlJHSFRfTU9ERV9FQ05WUkFNKQorCQlyZXR1cm47CisKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0JSR0hULAorCQkidHJ5aW5nIHRvIGNoZWNrcG9pbnQgYmFja2xpZ2h0IGxldmVsIHRvIE5WUkFNLi4uXG4iKTsKKworCWlmIChtdXRleF9sb2NrX2tpbGxhYmxlKCZicmlnaHRuZXNzX211dGV4KSA8IDApCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseSghYWNwaV9lY19yZWFkKFRQX0VDX0JBQ0tMSUdIVCwgJmxlYykpKQorCQlnb3RvIHVubG9jazsKKwlsZWMgJj0gVFBfRUNfQkFDS0xJR0hUX0xWTE1TSzsKKwliX252cmFtID0gbnZyYW1fcmVhZF9ieXRlKFRQX05WUkFNX0FERFJfQlJJR0hUTkVTUyk7CisKKwlpZiAobGVjICE9ICgoYl9udnJhbSAmIFRQX05WUkFNX01BU0tfTEVWRUxfQlJJR0hUTkVTUykKKwkJCSAgICAgPj4gVFBfTlZSQU1fUE9TX0xFVkVMX0JSSUdIVE5FU1MpKSB7CisJCS8qIE5WUkFNIG5lZWRzIHVwZGF0ZSAqLworCQliX252cmFtICY9IH4oVFBfTlZSQU1fTUFTS19MRVZFTF9CUklHSFRORVNTIDw8CisJCQkJVFBfTlZSQU1fUE9TX0xFVkVMX0JSSUdIVE5FU1MpOworCQliX252cmFtIHw9IGxlYzsKKwkJbnZyYW1fd3JpdGVfYnl0ZShiX252cmFtLCBUUF9OVlJBTV9BRERSX0JSSUdIVE5FU1MpOworCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfQlJHSFQsCisJCQkgICAidXBkYXRlZCBOVlJBTSBiYWNrbGlnaHQgbGV2ZWwgdG8gJXUgKDB4JTAyeClcbiIsCisJCQkgICAodW5zaWduZWQgaW50KSBsZWMsICh1bnNpZ25lZCBpbnQpIGJfbnZyYW0pOworCX0gZWxzZQorCQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0JSR0hULAorCQkJICAgIk5WUkFNIGJhY2tsaWdodCBsZXZlbCBhbHJlYWR5IGlzICV1ICgweCUwMngpXG4iLAorCQkJICAgKHVuc2lnbmVkIGludCkgbGVjLCAodW5zaWduZWQgaW50KSBiX252cmFtKTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmYnJpZ2h0bmVzc19tdXRleCk7Cit9CisKKworLyogY2FsbCB3aXRoIGJyaWdodG5lc3NfbXV0ZXggaGVsZCEgKi8KK3N0YXRpYyBpbnQgdHBhY3BpX2JyaWdodG5lc3NfZ2V0X3JhdyhpbnQgKnN0YXR1cykKK3sKKwl1OCBsZWMgPSAwOworCisJc3dpdGNoIChicmlnaHRuZXNzX21vZGUpIHsKKwljYXNlIFRQQUNQSV9CUkdIVF9NT0RFX1VDTVNfU1RFUDoKKwkJKnN0YXR1cyA9IHRwYWNwaV9icmlnaHRuZXNzX252cmFtX2dldCgpOworCQlyZXR1cm4gMDsKKwljYXNlIFRQQUNQSV9CUkdIVF9NT0RFX0VDOgorCWNhc2UgVFBBQ1BJX0JSR0hUX01PREVfRUNOVlJBTToKKwkJaWYgKHVubGlrZWx5KCFhY3BpX2VjX3JlYWQoVFBfRUNfQkFDS0xJR0hULCAmbGVjKSkpCiAJCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0gZWxzZSB7Ci0JCSpzdGF0dXMgPSBsZXZlbDsKKwkJKnN0YXR1cyA9IGxlYzsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTlhJTzsKIAl9Cit9CisKKy8qIGNhbGwgd2l0aCBicmlnaHRuZXNzX211dGV4IGhlbGQhICovCisvKiBkbyBOT1QgY2FsbCB3aXRoIGlsbGVnYWwgYmFja2xpZ2h0IGxldmVsIHZhbHVlICovCitzdGF0aWMgaW50IHRwYWNwaV9icmlnaHRuZXNzX3NldF9lYyh1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdTggbGVjID0gMDsKKworCWlmICh1bmxpa2VseSghYWNwaV9lY19yZWFkKFRQX0VDX0JBQ0tMSUdIVCwgJmxlYykpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmICh1bmxpa2VseSghYWNwaV9lY193cml0ZShUUF9FQ19CQUNLTElHSFQsCisJCQkJKGxlYyAmIFRQX0VDX0JBQ0tMSUdIVF9DTURNU0spIHwKKwkJCQkodmFsdWUgJiBUUF9FQ19CQUNLTElHSFRfTFZMTVNLKSkpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisvKiBjYWxsIHdpdGggYnJpZ2h0bmVzc19tdXRleCBoZWxkISAqLworc3RhdGljIGludCB0cGFjcGlfYnJpZ2h0bmVzc19zZXRfdWNtc3N0ZXAodW5zaWduZWQgaW50IHZhbHVlKQoreworCWludCBjbW9zX2NtZCwgaW5jOworCXVuc2lnbmVkIGludCBjdXJyZW50X3ZhbHVlLCBpOworCisJY3VycmVudF92YWx1ZSA9IHRwYWNwaV9icmlnaHRuZXNzX252cmFtX2dldCgpOworCisJaWYgKHZhbHVlID09IGN1cnJlbnRfdmFsdWUpCisJCXJldHVybiAwOworCisJY21vc19jbWQgPSAodmFsdWUgPiBjdXJyZW50X3ZhbHVlKSA/CisJCQlUUF9DTU9TX0JSSUdIVE5FU1NfVVAgOgorCQkJVFBfQ01PU19CUklHSFRORVNTX0RPV047CisJaW5jID0gKHZhbHVlID4gY3VycmVudF92YWx1ZSkgPyAxIDogLTE7CisKKwlmb3IgKGkgPSBjdXJyZW50X3ZhbHVlOyBpICE9IHZhbHVlOyBpICs9IGluYykKKwkJaWYgKGlzc3VlX3RoaW5rcGFkX2Ntb3NfY29tbWFuZChjbW9zX2NtZCkpCisJCQlyZXR1cm4gLUVJTzsKIAogCXJldHVybiAwOwogfQogCiAvKiBNYXkgcmV0dXJuIEVJTlRSIHdoaWNoIGNhbiBhbHdheXMgYmUgbWFwcGVkIHRvIEVSRVNUQVJUU1lTICovCi1zdGF0aWMgaW50IGJyaWdodG5lc3Nfc2V0KGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgYnJpZ2h0bmVzc19zZXQodW5zaWduZWQgaW50IHZhbHVlKQogewotCWludCBjbW9zX2NtZCwgaW5jLCBpLCByZXM7Ci0JaW50IGN1cnJlbnRfdmFsdWU7Ci0JaW50IGNvbW1hbmRfYml0czsKKwlpbnQgcmVzOwogCiAJaWYgKHZhbHVlID4gKCh0cF9mZWF0dXJlcy5icmlnaHRfMTZsZXZlbHMpPyAxNSA6IDcpIHx8CiAJICAgIHZhbHVlIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0JSR0hULAorCQkJInNldCBiYWNrbGlnaHQgbGV2ZWwgdG8gJWRcbiIsIHZhbHVlKTsKKwogCXJlcyA9IG11dGV4X2xvY2tfa2lsbGFibGUoJmJyaWdodG5lc3NfbXV0ZXgpOwogCWlmIChyZXMgPCAwKQogCQlyZXR1cm4gcmVzOwogCi0JcmVzID0gYnJpZ2h0bmVzc19nZXRfcmF3KCZjdXJyZW50X3ZhbHVlKTsKLQlpZiAocmVzIDwgMCkKLQkJZ290byBlcnJvdXQ7Ci0KLQljb21tYW5kX2JpdHMgPSBjdXJyZW50X3ZhbHVlICYgVFBfRUNfQkFDS0xJR0hUX0NNRE1TSzsKLQljdXJyZW50X3ZhbHVlICY9IFRQX0VDX0JBQ0tMSUdIVF9MVkxNU0s7Ci0KLQljbW9zX2NtZCA9IHZhbHVlID4gY3VycmVudF92YWx1ZSA/Ci0JCQlUUF9DTU9TX0JSSUdIVE5FU1NfVVAgOgotCQkJVFBfQ01PU19CUklHSFRORVNTX0RPV047Ci0JaW5jID0gKHZhbHVlID4gY3VycmVudF92YWx1ZSk/IDEgOiAtMTsKLQotCXJlcyA9IDA7Ci0JZm9yIChpID0gY3VycmVudF92YWx1ZTsgaSAhPSB2YWx1ZTsgaSArPSBpbmMpIHsKLQkJaWYgKChicmlnaHRuZXNzX21vZGUgJiAyKSAmJgotCQkgICAgaXNzdWVfdGhpbmtwYWRfY21vc19jb21tYW5kKGNtb3NfY21kKSkgewotCQkJcmVzID0gLUVJTzsKLQkJCWdvdG8gZXJyb3V0OwotCQl9Ci0JCWlmICgoYnJpZ2h0bmVzc19tb2RlICYgMSkgJiYKLQkJICAgICFhY3BpX2VjX3dyaXRlKFRQX0VDX0JBQ0tMSUdIVCwKLQkJCQkgICAoaSArIGluYykgfCBjb21tYW5kX2JpdHMpKSB7Ci0JCQlyZXMgPSAtRUlPOwotCQkJZ290byBlcnJvdXQ7OwotCQl9CisJc3dpdGNoIChicmlnaHRuZXNzX21vZGUpIHsKKwljYXNlIFRQQUNQSV9CUkdIVF9NT0RFX0VDOgorCWNhc2UgVFBBQ1BJX0JSR0hUX01PREVfRUNOVlJBTToKKwkJcmVzID0gdHBhY3BpX2JyaWdodG5lc3Nfc2V0X2VjKHZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBUUEFDUElfQlJHSFRfTU9ERV9VQ01TX1NURVA6CisJCXJlcyA9IHRwYWNwaV9icmlnaHRuZXNzX3NldF91Y21zc3RlcCh2YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlcyA9IC1FTlhJTzsKIAl9CiAKLWVycm91dDoKIAltdXRleF91bmxvY2soJmJyaWdodG5lc3NfbXV0ZXgpOwogCXJldHVybiByZXM7CiB9CkBAIC01NDU5LDIxICs1NzE1LDM0IEBACiAKIHN0YXRpYyBpbnQgYnJpZ2h0bmVzc191cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKLQkvKiBpdCBpcyB0aGUgYmFja2xpZ2h0IGNsYXNzJ3Mgam9iIChjYWxsZXIpIHRvIGhhbmRsZQotCSAqIEVJTlRSIGFuZCBvdGhlciBlcnJvcnMgcHJvcGVybHkgKi8KLQlyZXR1cm4gYnJpZ2h0bmVzc19zZXQoCisJdW5zaWduZWQgaW50IGxldmVsID0KIAkJKGJkLT5wcm9wcy5mYl9ibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LICYmCiAJCSBiZC0+cHJvcHMucG93ZXIgPT0gRkJfQkxBTktfVU5CTEFOSykgPwotCQkJCWJkLT5wcm9wcy5icmlnaHRuZXNzIDogMCk7CisJCQkJYmQtPnByb3BzLmJyaWdodG5lc3MgOiAwOworCisJZGJnX3ByaW50ayhUUEFDUElfREJHX0JSR0hULAorCQkJImJhY2tsaWdodDogYXR0ZW1wdCB0byBzZXQgbGV2ZWwgdG8gJWRcbiIsCisJCQlsZXZlbCk7CisKKwkvKiBpdCBpcyB0aGUgYmFja2xpZ2h0IGNsYXNzJ3Mgam9iIChjYWxsZXIpIHRvIGhhbmRsZQorCSAqIEVJTlRSIGFuZCBvdGhlciBlcnJvcnMgcHJvcGVybHkgKi8KKwlyZXR1cm4gYnJpZ2h0bmVzc19zZXQobGV2ZWwpOwogfQogCiBzdGF0aWMgaW50IGJyaWdodG5lc3NfZ2V0KHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAlpbnQgc3RhdHVzLCByZXM7CiAKLQlyZXMgPSBicmlnaHRuZXNzX2dldF9yYXcoJnN0YXR1cyk7CisJcmVzID0gbXV0ZXhfbG9ja19raWxsYWJsZSgmYnJpZ2h0bmVzc19tdXRleCk7CiAJaWYgKHJlcyA8IDApCi0JCXJldHVybiAwOyAvKiBGSVhNRTogdGVhY2ggYmFja2xpZ2h0IGFib3V0IGVycm9yIGhhbmRsaW5nICovCisJCXJldHVybiAwOworCisJcmVzID0gdHBhY3BpX2JyaWdodG5lc3NfZ2V0X3Jhdygmc3RhdHVzKTsKKworCW11dGV4X3VubG9jaygmYnJpZ2h0bmVzc19tdXRleCk7CisKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gc3RhdHVzICYgVFBfRUNfQkFDS0xJR0hUX0xWTE1TSzsKIH0KQEAgLTU1MjMsNyArNTc5Miw3IEBACiAJfQogCiAJaWYgKCFicmlnaHRuZXNzX2VuYWJsZSkgewotCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwKKwkJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0JSR0hULAogCQkJICAgImJyaWdodG5lc3Mgc3VwcG9ydCBkaXNhYmxlZCBieSAiCiAJCQkgICAibW9kdWxlIHBhcmFtZXRlclxuIik7CiAJCXJldHVybiAxOwpAQCAtNTUzOCwyMCArNTgwNywzOCBAQAogCWlmIChiID09IDE2KQogCQl0cF9mZWF0dXJlcy5icmlnaHRfMTZsZXZlbHMgPSAxOwogCi0JaWYgKCFicmlnaHRuZXNzX21vZGUpIHsKLQkJaWYgKHRoaW5rcGFkX2lkLnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0xFTk9WTykKLQkJCWJyaWdodG5lc3NfbW9kZSA9IDI7Ci0JCWVsc2UKLQkJCWJyaWdodG5lc3NfbW9kZSA9IDM7Ci0KLQkJZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQsICJzZWxlY3RlZCBicmlnaHRuZXNzX21vZGU9JWRcbiIsCi0JCQlicmlnaHRuZXNzX21vZGUpOwotCX0KLQotCWlmIChicmlnaHRuZXNzX21vZGUgPiAzKQorCS8qCisJICogQ2hlY2sgZm9yIG1vZHVsZSBwYXJhbWV0ZXIgYm9nb3NpdHksIG5vdGUgdGhhdCB3ZQorCSAqIGluaXQgYnJpZ2h0bmVzc19tb2RlIHRvIFRQQUNQSV9CUkdIVF9NT0RFX01BWCBpbiBvcmRlciB0byBiZQorCSAqIGFibGUgdG8gZGV0ZWN0ICJ1bnNwZWNpZmllZCIKKwkgKi8KKwlpZiAoYnJpZ2h0bmVzc19tb2RlID4gVFBBQ1BJX0JSR0hUX01PREVfTUFYKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChicmlnaHRuZXNzX2dldF9yYXcoJmIpIDwgMCkKKwkvKiBUUEFDUElfQlJHSFRfTU9ERV9BVVRPIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIGp1c3QgdXNlIGRlZmF1bHQgKi8KKwlpZiAoYnJpZ2h0bmVzc19tb2RlID09IFRQQUNQSV9CUkdIVF9NT0RFX0FVVE8gfHwKKwkgICAgYnJpZ2h0bmVzc19tb2RlID09IFRQQUNQSV9CUkdIVF9NT0RFX01BWCkgeworCQlpZiAodGhpbmtwYWRfaWQudmVuZG9yID09IFBDSV9WRU5ET1JfSURfSUJNKSB7CisJCQkvKgorCQkJICogSUJNIG1vZGVscyB0aGF0IGRlZmluZSBIQlJWIHByb2JhYmx5IGhhdmUKKwkJCSAqIEVDLWJhc2VkIGJhY2tsaWdodCBsZXZlbCBjb250cm9sCisJCQkgKi8KKwkJCWlmIChhY3BpX2V2YWxmKGVjX2hhbmRsZSwgTlVMTCwgIkhCUlYiLCAicWQiKSkKKwkJCQkvKiBUNDAtVDQzLCBSNTAtUjUyLCBSNTBlLCBSNTFlLCBYMzEtWDQxICovCisJCQkJYnJpZ2h0bmVzc19tb2RlID0gVFBBQ1BJX0JSR0hUX01PREVfRUNOVlJBTTsKKwkJCWVsc2UKKwkJCQkvKiBhbGwgb3RoZXIgSUJNIFRoaW5rUGFkcyAqLworCQkJCWJyaWdodG5lc3NfbW9kZSA9IFRQQUNQSV9CUkdIVF9NT0RFX1VDTVNfU1RFUDsKKwkJfSBlbHNlCisJCQkvKiBBbGwgTGVub3ZvIFRoaW5rUGFkcyAqLworCQkJYnJpZ2h0bmVzc19tb2RlID0gVFBBQ1BJX0JSR0hUX01PREVfVUNNU19TVEVQOworCisJCWRiZ19wcmludGsoVFBBQ1BJX0RCR19CUkdIVCwKKwkJCSAgICJzZWxlY3RlZCBicmlnaHRuZXNzX21vZGU9JWRcbiIsCisJCQkgICBicmlnaHRuZXNzX21vZGUpOworCX0KKworCWlmICh0cGFjcGlfYnJpZ2h0bmVzc19nZXRfcmF3KCZiKSA8IDApCiAJCXJldHVybiAxOwogCiAJaWYgKHRwX2ZlYXR1cmVzLmJyaWdodF8xNmxldmVscykKQEAgLTU1NjUsNyArNTg1Miw4IEBACiAJCXByaW50ayhUUEFDUElfRVJSICJDb3VsZCBub3QgcmVnaXN0ZXIgYmFja2xpZ2h0IGRldmljZVxuIik7CiAJCXJldHVybiBQVFJfRVJSKGlibV9iYWNrbGlnaHRfZGV2aWNlKTsKIAl9Ci0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAiYnJpZ2h0bmVzcyBpcyBzdXBwb3J0ZWRcbiIpOworCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfQlJHSFQsCisJCQkiYnJpZ2h0bmVzcyBpcyBzdXBwb3J0ZWRcbiIpOwogCiAJaWJtX2JhY2tsaWdodF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0KIAkJCQkodHBfZmVhdHVyZXMuYnJpZ2h0XzE2bGV2ZWxzKT8gMTUgOiA3OwpAQCAtNTU3NSwxMyArNTg2MywyNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBicmlnaHRuZXNzX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQoreworCXRwYWNwaV9icmlnaHRuZXNzX2NoZWNrcG9pbnRfbnZyYW0oKTsKK30KKworc3RhdGljIHZvaWQgYnJpZ2h0bmVzc19zaHV0ZG93bih2b2lkKQoreworCXRwYWNwaV9icmlnaHRuZXNzX2NoZWNrcG9pbnRfbnZyYW0oKTsKK30KKwogc3RhdGljIHZvaWQgYnJpZ2h0bmVzc19leGl0KHZvaWQpCiB7CiAJaWYgKGlibV9iYWNrbGlnaHRfZGV2aWNlKSB7Ci0JCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfRVhJVCwKKwkJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19FWElUIHwgVFBBQ1BJX0RCR19CUkdIVCwKIAkJCSAgICAiY2FsbGluZyBiYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoKVxuIik7CiAJCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihpYm1fYmFja2xpZ2h0X2RldmljZSk7CiAJfQorCisJdHBhY3BpX2JyaWdodG5lc3NfY2hlY2twb2ludF9udnJhbSgpOwogfQogCiBzdGF0aWMgaW50IGJyaWdodG5lc3NfcmVhZChjaGFyICpwKQpAQCAtNTYyOCw2ICs1OTI4LDkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygicHJvY2ZzIGJyaWdodG5lc3MiLAorCQkJInNldCBsZXZlbCB0byAlZFxuIiwgbGV2ZWwpOworCiAJLyoKIAkgKiBOb3cgd2Uga25vdyB3aGF0IHRoZSBmaW5hbCBsZXZlbCBzaG91bGQgYmUsIHNvIHdlIHRyeSB0byBzZXQgaXQuCiAJICogRG9pbmcgaXQgdGhpcyB3YXkgbWFrZXMgdGhlIHN5c2NhbGwgcmVzdGFydGFibGUgaW4gY2FzZSBvZiBFSU5UUgpAQCAtNTY0MSw2ICs1OTQ0LDggQEAKIAkucmVhZCA9IGJyaWdodG5lc3NfcmVhZCwKIAkud3JpdGUgPSBicmlnaHRuZXNzX3dyaXRlLAogCS5leGl0ID0gYnJpZ2h0bmVzc19leGl0LAorCS5zdXNwZW5kID0gYnJpZ2h0bmVzc19zdXNwZW5kLAorCS5zaHV0ZG93biA9IGJyaWdodG5lc3Nfc2h1dGRvd24sCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNTgxMSw3ICs2MTE2LDcgQEAKICAqCVRoaW5rUGFkcyBmcm9tIHRoaXMgc2FtZSB0aW1lIHBlcmlvZCAoYW5kIGVhcmxpZXIpIHByb2JhYmx5IGxhY2sgdGhlCiAgKgl0YWNob21ldGVyIGFzIHdlbGwuCiAgKgotICoJVW5mb3J0dW5hdGVseSBhIGxvdCBvZiBUaGlua1BhZHMgd2l0aCBuZXctc3R5bGUgRUNzIGJ1dCB3aG9zZSBmaXJ3bWFyZQorICoJVW5mb3J0dW5hdGVseSBhIGxvdCBvZiBUaGlua1BhZHMgd2l0aCBuZXctc3R5bGUgRUNzIGJ1dCB3aG9zZSBmaXJtd2FyZQogICoJd2FzIG5ldmVyIGZpeGVkIGJ5IElCTSB0byByZXBvcnQgdGhlIEVDIGZpcm13YXJlIHZlcnNpb24gc3RyaW5nCiAgKglwcm9iYWJseSBzdXBwb3J0IHRoZSB0YWNob21ldGVyIChsaWtlIHRoZSBlYXJseSBYIG1vZGVscyksIHNvCiAgKglkZXRlY3RpbmcgaXQgaXMgcXVpdGUgaGFyZC4gIFdlIG5lZWQgbW9yZSBkYXRhIHRvIGtub3cgZm9yIHN1cmUuCkBAIC02MDg2LDYgKzYzOTEsOSBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5YSU87CiAJfQorCisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19GQU4sCisJCSJmYW4gY29udHJvbDogc2V0IGZhbiBjb250cm9sIHJlZ2lzdGVyIHRvIDB4JTAyeFxuIiwgbGV2ZWwpOwogCXJldHVybiAwOwogfQogCkBAIC02MTYzLDYgKzY0NzEsMTEgQEAKIAl9CiAKIAltdXRleF91bmxvY2soJmZhbl9tdXRleCk7CisKKwlpZiAoIXJjKQorCQl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0ZBTiwKKwkJCSJmYW4gY29udHJvbDogc2V0IGZhbiBjb250cm9sIHJlZ2lzdGVyIHRvIDB4JTAyeFxuIiwKKwkJCXMpOwogCXJldHVybiByYzsKIH0KIApAQCAtNjE5OSw2ICs2NTEyLDkgQEAKIAkJcmMgPSAtRU5YSU87CiAJfQogCisJaWYgKCFyYykKKwkJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19GQU4sCisJCQkiZmFuIGNvbnRyb2w6IHNldCBmYW4gY29udHJvbCByZWdpc3RlciB0byAwXG4iKTsKIAogCW11dGV4X3VubG9jaygmZmFuX211dGV4KTsKIAlyZXR1cm4gcmM7CkBAIC02MzI3LDYgKzY2NDMsOSBAQAogCWlmIChwYXJzZV9zdHJ0b3VsKGJ1ZiwgMiwgJnQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygiaHdtb24gcHdtMV9lbmFibGUiLAorCQkJInNldCBmYW4gbW9kZSB0byAlbHVcbiIsIHQpOworCiAJc3dpdGNoICh0KSB7CiAJY2FzZSAwOgogCQlsZXZlbCA9IFRQX0VDX0ZBTl9GVUxMU1BFRUQ7CkBAIC02MzkyLDYgKzY3MTEsOSBAQAogCWlmIChwYXJzZV9zdHJ0b3VsKGJ1ZiwgMjU1LCAmcykpCiAJCXJldHVybiAtRUlOVkFMOwogCisJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJod21vbiBwd20xIiwKKwkJCSJzZXQgZmFuIHNwZWVkIHRvICVsdVxuIiwgcyk7CisKIAkvKiBzY2FsZSBkb3duIGZyb20gMC0yNTUgdG8gMC03ICovCiAJbmV3bGV2ZWwgPSAocyA+PiA1KSAmIDB4MDc7CiAKQEAgLTY0NTgsNiArNjc4MCw4IEBACiAJZmFuX3dhdGNoZG9nX21heGludGVydmFsID0gdDsKIAlmYW5fd2F0Y2hkb2dfcmVzZXQoKTsKIAorCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygiZmFuX3dhdGNoZG9nIiwgInNldCB0byAlbHVcbiIsIHQpOworCiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC02NDc5LDcgKzY4MDMsOCBAQAogewogCWludCByYzsKIAotCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwgImluaXRpYWxpemluZyBmYW4gc3ViZHJpdmVyXG4iKTsKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0lOSVQgfCBUUEFDUElfREJHX0ZBTiwKKwkJCSJpbml0aWFsaXppbmcgZmFuIHN1YmRyaXZlclxuIik7CiAKIAltdXRleF9pbml0KCZmYW5fbXV0ZXgpOwogCWZhbl9zdGF0dXNfYWNjZXNzX21vZGUgPSBUUEFDUElfRkFOX05PTkU7CkBAIC02NTM4LDcgKzY4NjMsOCBAQAogCQl9CiAJfQogCi0JdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAiZmFuIGlzICVzLCBtb2RlcyAlZCwgJWRcbiIsCisJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklUIHwgVFBBQ1BJX0RCR19GQU4sCisJCSJmYW4gaXMgJXMsIG1vZGVzICVkLCAlZFxuIiwKIAkJc3RyX3N1cHBvcnRlZChmYW5fc3RhdHVzX2FjY2Vzc19tb2RlICE9IFRQQUNQSV9GQU5fTk9ORSB8fAogCQkgIGZhbl9jb250cm9sX2FjY2Vzc19tb2RlICE9IFRQQUNQSV9GQU5fV1JfTk9ORSksCiAJCWZhbl9zdGF0dXNfYWNjZXNzX21vZGUsIGZhbl9jb250cm9sX2FjY2Vzc19tb2RlKTsKQEAgLTY1NDcsNyArNjg3Myw3IEBACiAJaWYgKCFmYW5fY29udHJvbF9hbGxvd2VkKSB7CiAJCWZhbl9jb250cm9sX2FjY2Vzc19tb2RlID0gVFBBQ1BJX0ZBTl9XUl9OT05FOwogCQlmYW5fY29udHJvbF9jb21tYW5kcyA9IDA7Ci0JCWRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULAorCQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCB8IFRQQUNQSV9EQkdfRkFOLAogCQkJICAgImZhbiBjb250cm9sIGZlYXR1cmVzIGRpc2FibGVkIGJ5IHBhcmFtZXRlclxuIik7CiAJfQogCkBAIC02NTc2LDcgKzY5MDIsNyBAQAogCiBzdGF0aWMgdm9pZCBmYW5fZXhpdCh2b2lkKQogewotCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfRVhJVCwKKwl2ZGJnX3ByaW50ayhUUEFDUElfREJHX0VYSVQgfCBUUEFDUElfREJHX0ZBTiwKIAkJICAgICJjYW5jZWxsaW5nIGFueSBwZW5kaW5nIGZhbiB3YXRjaGRvZyB0YXNrc1xuIik7CiAKIAkvKiBGSVhNRTogY2FuIHdlIHJlYWxseSBkbyB0aGlzIHVuY29uZGl0aW9uYWxseT8gKi8KQEAgLTY3NTcsNiArNzA4Myw5IEBACiAJaWYgKCpyYyA9PSAtRU5YSU8pCiAJCXByaW50ayhUUEFDUElfRVJSICJsZXZlbCBjb21tYW5kIGFjY2VwdGVkIGZvciB1bnN1cHBvcnRlZCAiCiAJCSAgICAgICAiYWNjZXNzIG1vZGUgJWQiLCBmYW5fY29udHJvbF9hY2Nlc3NfbW9kZSk7CisJZWxzZSBpZiAoISpyYykKKwkJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJwcm9jZnMgZmFuIiwKKwkJCSJzZXQgbGV2ZWwgdG8gJWRcbiIsIGxldmVsKTsKIAogCXJldHVybiAxOwogfQpAQCAtNjc3MCw2ICs3MDk5LDggQEAKIAlpZiAoKnJjID09IC1FTlhJTykKIAkJcHJpbnRrKFRQQUNQSV9FUlIgImVuYWJsZSBjb21tYW5kIGFjY2VwdGVkIGZvciB1bnN1cHBvcnRlZCAiCiAJCSAgICAgICAiYWNjZXNzIG1vZGUgJWQiLCBmYW5fY29udHJvbF9hY2Nlc3NfbW9kZSk7CisJZWxzZSBpZiAoISpyYykKKwkJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJwcm9jZnMgZmFuIiwgImVuYWJsZVxuIik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTY3ODMsNiArNzExNCw4IEBACiAJaWYgKCpyYyA9PSAtRU5YSU8pCiAJCXByaW50ayhUUEFDUElfRVJSICJkaXNhYmxlIGNvbW1hbmQgYWNjZXB0ZWQgZm9yIHVuc3VwcG9ydGVkICIKIAkJICAgICAgICJhY2Nlc3MgbW9kZSAlZCIsIGZhbl9jb250cm9sX2FjY2Vzc19tb2RlKTsKKwllbHNlIGlmICghKnJjKQorCQl0cGFjcGlfZGlzY2xvc2VfdXNlcnRhc2soInByb2NmcyBmYW4iLCAiZGlzYWJsZVxuIik7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTY4MDEsNiArNzEzNCw5IEBACiAJaWYgKCpyYyA9PSAtRU5YSU8pCiAJCXByaW50ayhUUEFDUElfRVJSICJzcGVlZCBjb21tYW5kIGFjY2VwdGVkIGZvciB1bnN1cHBvcnRlZCAiCiAJCSAgICAgICAiYWNjZXNzIG1vZGUgJWQiLCBmYW5fY29udHJvbF9hY2Nlc3NfbW9kZSk7CisJZWxzZSBpZiAoISpyYykKKwkJdHBhY3BpX2Rpc2Nsb3NlX3VzZXJ0YXNrKCJwcm9jZnMgZmFuIiwKKwkJCSJzZXQgc3BlZWQgdG8gJWRcbiIsIHNwZWVkKTsKIAogCXJldHVybiAxOwogfQpAQCAtNjgxNCw4ICs3MTUwLDEyIEBACiAKIAlpZiAoaW50ZXJ2YWwgPCAwIHx8IGludGVydmFsID4gMTIwKQogCQkqcmMgPSAtRUlOVkFMOwotCWVsc2UKKwllbHNlIHsKIAkJZmFuX3dhdGNoZG9nX21heGludGVydmFsID0gaW50ZXJ2YWw7CisJCXRwYWNwaV9kaXNjbG9zZV91c2VydGFzaygicHJvY2ZzIGZhbiIsCisJCQkic2V0IHdhdGNoZG9nIHRpbWVyIHRvICVkXG4iLAorCQkJaW50ZXJ2YWwpOworCX0KIAogCXJldHVybiAxOwogfQpAQCAtNzI0MywxMCArNzU4MywxMCBAQAogTU9EVUxFX1BBUk1fREVTQyhmYW5fY29udHJvbCwKIAkJICJFbmFibGVzIHNldHRpbmcgZmFuIHBhcmFtZXRlcnMgZmVhdHVyZXMgd2hlbiB0cnVlIik7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChicmlnaHRuZXNzX21vZGUsIGJyaWdodG5lc3NfbW9kZSwgaW50LCAwKTsKK21vZHVsZV9wYXJhbV9uYW1lZChicmlnaHRuZXNzX21vZGUsIGJyaWdodG5lc3NfbW9kZSwgdWludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGJyaWdodG5lc3NfbW9kZSwKIAkJICJTZWxlY3RzIGJyaWdodG5lc3MgY29udHJvbCBzdHJhdGVneTogIgotCQkgIjA9YXV0bywgMT1FQywgMj1DTU9TLCAzPWJvdGgiKTsKKwkJICIwPWF1dG8sIDE9RUMsIDI9VUNNUywgMz1FQytOVlJBTSIpOwogCiBtb2R1bGVfcGFyYW0oYnJpZ2h0bmVzc19lbmFibGUsIHVpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhicmlnaHRuZXNzX2VuYWJsZSwKQEAgLTc1MTUsOSArNzg1NSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFBsZWFzZSByZW1vdmUgdGhpcyBpbiB5ZWFyIDIwMDkgKi8KLU1PRFVMRV9BTElBUygiaWJtX2FjcGkiKTsKLQogTU9EVUxFX0FMSUFTKFRQQUNQSV9EUlZSX1NIT1JUTkFNRSk7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBhY3BpL2NvcmUuYyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCmluZGV4IDI4MzQ4NDYuLjlhM2E2ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvY29yZS5jCkBAIC04Myw3ICs4Myw2IEBACiAJYWNwaV9oYW5kbGUgaGFuZGxlID0gZGV2LT5kYXRhOwogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXI7CiAJaW50IHJldDsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CiAKIAlwbnBfZGJnKCZkZXYtPmRldiwgInNldCByZXNvdXJjZXNcbiIpOwogCXJldCA9IHBucGFjcGlfYnVpbGRfcmVzb3VyY2VfdGVtcGxhdGUoZGV2LCAmYnVmZmVyKTsKQEAgLTk0LDIxICs5MywzMSBAQAogCQlrZnJlZShidWZmZXIucG9pbnRlcik7CiAJCXJldHVybiByZXQ7CiAJfQotCXN0YXR1cyA9IGFjcGlfc2V0X2N1cnJlbnRfcmVzb3VyY2VzKGhhbmRsZSwgJmJ1ZmZlcik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9zZXRfY3VycmVudF9yZXNvdXJjZXMoaGFuZGxlLCAmYnVmZmVyKSkpCiAJCXJldCA9IC1FSU5WQUw7CisJZWxzZSBpZiAoYWNwaV9idXNfcG93ZXJfbWFuYWdlYWJsZShoYW5kbGUpKQorCQlyZXQgPSBhY3BpX2J1c19zZXRfcG93ZXIoaGFuZGxlLCBBQ1BJX1NUQVRFX0QwKTsKIAlrZnJlZShidWZmZXIucG9pbnRlcik7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwbnBhY3BpX2Rpc2FibGVfcmVzb3VyY2VzKHN0cnVjdCBwbnBfZGV2ICpkZXYpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfaGFuZGxlIGhhbmRsZSA9IGRldi0+ZGF0YTsKKwlpbnQgcmV0OworCisJZGV2X2RiZygmZGV2LT5kZXYsICJkaXNhYmxlIHJlc291cmNlc1xuIik7CiAKIAkvKiBhY3BpX3VucmVnaXN0ZXJfZ3NpKHBucF9pcnEoZGV2LCAwKSk7ICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoKGFjcGlfaGFuZGxlKSBkZXYtPmRhdGEsCi0JCQkJICAgICAgIl9ESVMiLCBOVUxMLCBOVUxMKTsKLQlyZXR1cm4gQUNQSV9GQUlMVVJFKHN0YXR1cykgPyAtRU5PREVWIDogMDsKKwlyZXQgPSAwOworCWlmIChhY3BpX2J1c19wb3dlcl9tYW5hZ2VhYmxlKGhhbmRsZSkpIHsKKwkJcmV0ID0gYWNwaV9idXNfc2V0X3Bvd2VyKGhhbmRsZSwgQUNQSV9TVEFURV9EMyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9ESVMiLCBOVUxMLCBOVUxMKSkpCisJCXJldCA9IC1FTk9ERVY7CisJcmV0dXJuIHJldDsKIH0KIAogI2lmZGVmIENPTkZJR19BQ1BJX1NMRUVQCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBiaW9zL2NvcmUuYyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCmluZGV4IDk5NmY2NDguLmNmZTg2ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCkBAIC05NCw3ICs5NCw2IEBACiAKICNpZmRlZiBDT05GSUdfSE9UUExVRwogCi1zdGF0aWMgaW50IHVubG9hZGluZyA9IDA7CiBzdGF0aWMgc3RydWN0IGNvbXBsZXRpb24gdW5sb2FkX3NlbTsKIAogLyoKQEAgLTE1OCw3ICsxNTcsNyBAQAogCWludCBkb2NrZWQgPSAtMSwgZCA9IDA7CiAKIAlzZXRfZnJlZXphYmxlKCk7Ci0Jd2hpbGUgKCF1bmxvYWRpbmcpIHsKKwl3aGlsZSAoMSkgewogCQlpbnQgc3RhdHVzOwogCiAJCS8qCkBAIC01NzUsOCArNTc0LDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgcG5wYmlvc190aHJlYWRfaW5pdCh2b2lkKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQogI2lmIGRlZmluZWQoQ09ORklHX1BQQykKIAlpZiAoY2hlY2tfbGVnYWN5X2lvcG9ydChQTlBCSU9TX0JBU0UpKQogCQlyZXR1cm4gMDsKQEAgLTU4NCwxMCArNTgxLDEzIEBACiAJaWYgKHBucGJpb3NfZGlzYWJsZWQpCiAJCXJldHVybiAwOwogI2lmZGVmIENPTkZJR19IT1RQTFVHCi0JaW5pdF9jb21wbGV0aW9uKCZ1bmxvYWRfc2VtKTsKLQl0YXNrID0ga3RocmVhZF9ydW4ocG5wX2RvY2tfdGhyZWFkLCBOVUxMLCAia3BucGJpb3NkIik7Ci0JaWYgKCFJU19FUlIodGFzaykpCi0JCXVubG9hZGluZyA9IDA7CisJeworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJCWluaXRfY29tcGxldGlvbigmdW5sb2FkX3NlbSk7CisJCXRhc2sgPSBrdGhyZWFkX3J1bihwbnBfZG9ja190aHJlYWQsIE5VTEwsICJrcG5wYmlvc2QiKTsKKwkJaWYgKElTX0VSUih0YXNrKSkKKwkJCXJldHVybiBQVFJfRVJSKHRhc2spOworCX0KICNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9icTI3eDAwX2JhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMKaW5kZXggMGMwNTZmYy4uNjJiYjk4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9icTI3eDAwX2JhdHRlcnkuYworKysgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCkBAIC04Myw3ICs4Myw3IEBACiB9CiAKIC8qCi0gKiBSZXR1cm4gdGhlIGJhdHRlcnkgdGVtcGVyYXR1cmUgaW4gQ2VsY2l1cyBkZWdyZWVzCisgKiBSZXR1cm4gdGhlIGJhdHRlcnkgdGVtcGVyYXR1cmUgaW4gQ2Vsc2l1cyBkZWdyZWVzCiAgKiBPciA8IDAgaWYgc29tZXRoaW5nIGZhaWxzLgogICovCiBzdGF0aWMgaW50IGJxMjd4MDBfYmF0dGVyeV90ZW1wZXJhdHVyZShzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9zeXNmcy5jIGIvZHJpdmVycy9wb3dlci9wb3dlcl9zdXBwbHlfc3lzZnMuYwppbmRleCBhYzAxZTA2Li5kYTczNTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Bvd2VyX3N1cHBseV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcG93ZXJfc3VwcGx5X3N5c2ZzLmMKQEAgLTkzLDYgKzkzLDggQEAKIAlQT1dFUl9TVVBQTFlfQVRUUih2b2x0YWdlX2F2ZyksCiAJUE9XRVJfU1VQUExZX0FUVFIoY3VycmVudF9ub3cpLAogCVBPV0VSX1NVUFBMWV9BVFRSKGN1cnJlbnRfYXZnKSwKKwlQT1dFUl9TVVBQTFlfQVRUUihwb3dlcl9ub3cpLAorCVBPV0VSX1NVUFBMWV9BVFRSKHBvd2VyX2F2ZyksCiAJUE9XRVJfU1VQUExZX0FUVFIoY2hhcmdlX2Z1bGxfZGVzaWduKSwKIAlQT1dFUl9TVVBQTFlfQVRUUihjaGFyZ2VfZW1wdHlfZGVzaWduKSwKIAlQT1dFUl9TVVBQTFlfQVRUUihjaGFyZ2VfZnVsbCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwppbmRleCBlN2UwY2YxLi5lNThjMGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKQEAgLTI5LDggKzI5LDEyIEBACiAJICBTYXkgeWVzIGhlcmUgdG8gZW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0LgogCiBjb25maWcgUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UKLQl0cmlzdGF0ZQorCXRyaXN0YXRlICJGaXhlZCB2b2x0YWdlIHJlZ3VsYXRvciBzdXBwb3J0IgogCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGZpeGVkIHZvbHRhZ2UgcmVndWxhdG9ycywKKwkgIHVzZWZ1bCBmb3Igc3lzdGVtcyB3aGljaCB1c2UgYSBjb21iaW5hdGlvbiBvZiBzb2Z0d2FyZQorCSAgbWFuYWdlZCByZWd1bGF0b3JzIGFuZCBzaW1wbGUgbm9uLWNvbmZpZ3VyYWJsZSByZWd1bGF0b3JzLgogCiBjb25maWcgUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIKIAl0cmlzdGF0ZSAiVmlydHVhbCByZWd1bGF0b3IgY29uc3VtZXIgc3VwcG9ydCIKQEAgLTUyLDYgKzU2LDEzIEBACiAJICBjaGFyZ2luZyBzZWxlY3QgYmV0d2VlbiAxMDAgbUEgYW5kIDUwMCBtQSBjaGFyZ2luZyBjdXJyZW50CiAJICBsaW1pdC4KIAorY29uZmlnIFJFR1VMQVRPUl9UV0w0MDMwCisJYm9vbCAiVEkgVFdMNDAzMC9UV0w1MDMwL1RQUzY5NXgwIFBNSUMiCisJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgdm9sdGFnZSByZWd1bGF0b3JzIHByb3ZpZGVkIGJ5CisJICB0aGlzIGZhbWlseSBvZiBjb21wYW5pb24gY2hpcHMuCisKIGNvbmZpZyBSRUdVTEFUT1JfV004MzUwCiAJdHJpc3RhdGUgIldvbGZzb24gTWljcm9lbGVjdHJvbmNpcyBXTTgzNTAgQXVkaW9QbHVzIFBNSUMiCiAJZGVwZW5kcyBvbiBNRkRfV004MzUwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9NYWtlZmlsZSBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCmluZGV4IDYxYjMwYzYuLmJhYzEzM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSKSArPSB2aXJ0dWFsLm8KIAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyKSArPSBicTI0MDIyLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfVFdMNDAzMCkgKz0gdHdsNDAzMC1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTgzNTApICs9IHdtODM1MC1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTg0MDApICs9IHdtODQwMC1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9EQTkwM1gpCSs9IGRhOTAzeC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9icTI0MDIyLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9icTI0MDIyLmMKaW5kZXggYzE3NWUzOC4uN2VjYjgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvYnEyNDAyMi5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2JxMjQwMjIuYwpAQCAtMTA1LDcgKzEwNSw4IEBACiAJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBkYXRhLT5ncGlvX2lzZXQyLCAwKTsKIAlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQocGRhdGEtPmdwaW9fbmNlLCAxKTsKIAotCWJxMjQwMjIgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmJxMjQwMjJfZGVzYywgJnBkZXYtPmRldiwgcGRhdGEpOworCWJxMjQwMjIgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmJxMjQwMjJfZGVzYywgJnBkZXYtPmRldiwKKwkJCQkgICAgIHBkYXRhLT5pbml0X2RhdGEsIHBkYXRhKTsKIAlpZiAoSVNfRVJSKGJxMjQwMjIpKSB7CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkbid0IHJlZ2lzdGVyIHJlZ3VsYXRvclxuIik7CiAJCXJldCA9IFBUUl9FUlIoYnEyNDAyMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKaW5kZXggZjUxMWE0MC4uMDFmNzcwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwpAQCAtMjgsMzMgKzI4LDcgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgocmVndWxhdG9yX2xpc3RfbXV0ZXgpOwogc3RhdGljIExJU1RfSEVBRChyZWd1bGF0b3JfbGlzdCk7CiBzdGF0aWMgTElTVF9IRUFEKHJlZ3VsYXRvcl9tYXBfbGlzdCk7Ci0KLS8qCi0gKiBzdHJ1Y3QgcmVndWxhdG9yX2RldgotICoKLSAqIFZvbHRhZ2UgLyBDdXJyZW50IHJlZ3VsYXRvciBjbGFzcyBkZXZpY2UuIE9uZSBmb3IgZWFjaCByZWd1bGF0b3IuCi0gKi8KLXN0cnVjdCByZWd1bGF0b3JfZGV2IHsKLQlzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2M7Ci0JaW50IHVzZV9jb3VudDsKLQotCS8qIGxpc3RzIHdlIGJlbG9uZyB0byAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgLyogbGlzdCBvZiBhbGwgcmVndWxhdG9ycyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgc2xpc3Q7IC8qIGxpc3Qgb2Ygc3VwcGxpZWQgcmVndWxhdG9ycyAqLwotCi0JLyogbGlzdHMgd2Ugb3duICovCi0Jc3RydWN0IGxpc3RfaGVhZCBjb25zdW1lcl9saXN0OyAvKiBjb25zdW1lcnMgd2Ugc3VwcGx5ICovCi0Jc3RydWN0IGxpc3RfaGVhZCBzdXBwbHlfbGlzdDsgLyogcmVndWxhdG9ycyB3ZSBzdXBwbHkgKi8KLQotCXN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkIG5vdGlmaWVyOwotCXN0cnVjdCBtdXRleCBtdXRleDsgLyogY29uc3VtZXIgbG9jayAqLwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCXN0cnVjdCBkZXZpY2UgZGV2OwotCXN0cnVjdCByZWd1bGF0aW9uX2NvbnN0cmFpbnRzICpjb25zdHJhaW50czsKLQlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqc3VwcGx5OwkvKiBmb3IgdHJlZSAqLwotCi0Jdm9pZCAqcmVnX2RhdGE7CQkvKiByZWd1bGF0b3JfZGV2IGRhdGEgKi8KLX07CitzdGF0aWMgaW50IGhhc19mdWxsX2NvbnN0cmFpbnRzOwogCiAvKgogICogc3RydWN0IHJlZ3VsYXRvcl9tYXAKQEAgLTc5LDcgKzUzLDYgQEAKIAlpbnQgdUFfbG9hZDsKIAlpbnQgbWluX3VWOwogCWludCBtYXhfdVY7Ci0JaW50IGVuYWJsZWQ7IC8qIGNvdW50IG9mIGNsaWVudCBlbmFibGVzICovCiAJY2hhciAqc3VwcGx5X25hbWU7CiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHI7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CkBAIC0zMTIsNiArMjg1LDQ3IEBACiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoc3RhdGUsIDA0NDQsIHJlZ3VsYXRvcl9zdGF0ZV9zaG93LCBOVUxMKTsKIAorc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX3N0YXR1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHN0YXR1czsKKwljaGFyICpsYWJlbDsKKworCXN0YXR1cyA9IHJkZXYtPmRlc2MtPm9wcy0+Z2V0X3N0YXR1cyhyZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBSRUdVTEFUT1JfU1RBVFVTX09GRjoKKwkJbGFiZWwgPSAib2ZmIjsKKwkJYnJlYWs7CisJY2FzZSBSRUdVTEFUT1JfU1RBVFVTX09OOgorCQlsYWJlbCA9ICJvbiI7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX1NUQVRVU19FUlJPUjoKKwkJbGFiZWwgPSAiZXJyb3IiOworCQlicmVhazsKKwljYXNlIFJFR1VMQVRPUl9TVEFUVVNfRkFTVDoKKwkJbGFiZWwgPSAiZmFzdCI7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX1NUQVRVU19OT1JNQUw6CisJCWxhYmVsID0gIm5vcm1hbCI7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX1NUQVRVU19JRExFOgorCQlsYWJlbCA9ICJpZGxlIjsKKwkJYnJlYWs7CisJY2FzZSBSRUdVTEFUT1JfU1RBVFVTX1NUQU5EQlk6CisJCWxhYmVsID0gInN0YW5kYnkiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgbGFiZWwpOworfQorc3RhdGljIERFVklDRV9BVFRSKHN0YXR1cywgMDQ0NCwgcmVndWxhdG9yX3N0YXR1c19zaG93LCBOVUxMKTsKKwogc3RhdGljIHNzaXplX3QgcmVndWxhdG9yX21pbl91QV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTY3OCw2ICs2OTIsNzMgQEAKIAllbHNlCiAJCW5hbWUgPSAicmVndWxhdG9yIjsKIAorCS8qIGNvbnN0cmFpbiBtYWNoaW5lLWxldmVsIHZvbHRhZ2Ugc3BlY3MgdG8gZml0CisJICogdGhlIGFjdHVhbCByYW5nZSBzdXBwb3J0ZWQgYnkgdGhpcyByZWd1bGF0b3IuCisJICovCisJaWYgKG9wcy0+bGlzdF92b2x0YWdlICYmIHJkZXYtPmRlc2MtPm5fdm9sdGFnZXMpIHsKKwkJaW50CWNvdW50ID0gcmRldi0+ZGVzYy0+bl92b2x0YWdlczsKKwkJaW50CWk7CisJCWludAltaW5fdVYgPSBJTlRfTUFYOworCQlpbnQJbWF4X3VWID0gSU5UX01JTjsKKwkJaW50CWNtaW4gPSBjb25zdHJhaW50cy0+bWluX3VWOworCQlpbnQJY21heCA9IGNvbnN0cmFpbnRzLT5tYXhfdVY7CisKKwkJLyogaXQncyBzYWZlIHRvIGF1dG9jb25maWd1cmUgZml4ZWQtdm9sdGFnZSBzdXBwbGllcyAqLworCQlpZiAoY291bnQgPT0gMSAmJiAhY21pbikgeworCQkJY21pbiA9IElOVF9NSU47CisJCQljbWF4ID0gSU5UX01BWDsKKwkJfQorCisJCS8qIHZvbHRhZ2UgY29uc3RyYWludHMgYXJlIG9wdGlvbmFsICovCisJCWlmICgoY21pbiA9PSAwKSAmJiAoY21heCA9PSAwKSkKKwkJCWdvdG8gb3V0OworCisJCS8qIGVsc2UgcmVxdWlyZSBleHBsaWNpdCBtYWNoaW5lLWxldmVsIGNvbnN0cmFpbnRzICovCisJCWlmIChjbWluIDw9IDAgfHwgY21heCA8PSAwIHx8IGNtYXggPCBjbWluKSB7CisJCQlwcl9lcnIoIiVzOiAlcyAnJXMnIHZvbHRhZ2UgY29uc3RyYWludHNcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCAiaW52YWxpZCIsIG5hbWUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogaW5pdGlhbDogW2NtaW4uLmNtYXhdIHZhbGlkLCBbbWluX3VWLi5tYXhfdVZdIG5vdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJaW50CXZhbHVlOworCisJCQl2YWx1ZSA9IG9wcy0+bGlzdF92b2x0YWdlKHJkZXYsIGkpOworCQkJaWYgKHZhbHVlIDw9IDApCisJCQkJY29udGludWU7CisKKwkJCS8qIG1heWJlIGFkanVzdCBbbWluX3VWLi5tYXhfdVZdICovCisJCQlpZiAodmFsdWUgPj0gY21pbiAmJiB2YWx1ZSA8IG1pbl91VikKKwkJCQltaW5fdVYgPSB2YWx1ZTsKKwkJCWlmICh2YWx1ZSA8PSBjbWF4ICYmIHZhbHVlID4gbWF4X3VWKQorCQkJCW1heF91ViA9IHZhbHVlOworCQl9CisKKwkJLyogZmluYWw6IFttaW5fdVYuLm1heF91Vl0gdmFsaWQgaWZmIGNvbnN0cmFpbnRzIHZhbGlkICovCisJCWlmIChtYXhfdVYgPCBtaW5fdVYpIHsKKwkJCXByX2VycigiJXM6ICVzICclcycgdm9sdGFnZSBjb25zdHJhaW50c1xuIiwKKwkJCQkgICAgICAgX19mdW5jX18sICJ1bnN1cHBvcnRhYmxlIiwgbmFtZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKiB1c2UgcmVndWxhdG9yJ3Mgc3Vic2V0IG9mIG1hY2hpbmUgY29uc3RyYWludHMgKi8KKwkJaWYgKGNvbnN0cmFpbnRzLT5taW5fdVYgPCBtaW5fdVYpIHsKKwkJCXByX2RlYnVnKCIlczogb3ZlcnJpZGUgJyVzJyAlcywgJWQgLT4gJWRcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCBuYW1lLCAibWluX3VWIiwKKwkJCQkJY29uc3RyYWludHMtPm1pbl91ViwgbWluX3VWKTsKKwkJCWNvbnN0cmFpbnRzLT5taW5fdVYgPSBtaW5fdVY7CisJCX0KKwkJaWYgKGNvbnN0cmFpbnRzLT5tYXhfdVYgPiBtYXhfdVYpIHsKKwkJCXByX2RlYnVnKCIlczogb3ZlcnJpZGUgJyVzJyAlcywgJWQgLT4gJWRcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCBuYW1lLCAibWF4X3VWIiwKKwkJCQkJY29uc3RyYWludHMtPm1heF91ViwgbWF4X3VWKTsKKwkJCWNvbnN0cmFpbnRzLT5tYXhfdVYgPSBtYXhfdVY7CisJCX0KKwl9CisKIAlyZGV2LT5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzOwogCiAJLyogZG8gd2UgbmVlZCB0byBhcHBseSB0aGUgY29uc3RyYWludCB2b2x0YWdlICovCkBAIC02OTUsMTAgKzc3Niw2IEBACiAJCQl9CiAJfQogCi0JLyogYXJlIHdlIGVuYWJsZWQgYXQgYm9vdCB0aW1lIGJ5IGZpcm13YXJlIC8gYm9vdGxvYWRlciAqLwotCWlmIChyZGV2LT5jb25zdHJhaW50cy0+Ym9vdF9vbikKLQkJcmRldi0+dXNlX2NvdW50ID0gMTsKLQogCS8qIGRvIHdlIG5lZWQgdG8gc2V0dXAgb3VyIHN1c3BlbmQgc3RhdGUgKi8KIAlpZiAoY29uc3RyYWludHMtPmluaXRpYWxfc3RhdGUpIHsKIAkJcmV0ID0gc3VzcGVuZF9wcmVwYXJlKHJkZXYsIGNvbnN0cmFpbnRzLT5pbml0aWFsX3N0YXRlKTsKQEAgLTcxMCwxMSArNzg3LDI3IEBACiAJCX0KIAl9CiAKLQkvKiBpZiBhbHdheXNfb24gaXMgc2V0IHRoZW4gdHVybiB0aGUgcmVndWxhdG9yIG9uIGlmIGl0J3Mgbm90Ci0JICogYWxyZWFkeSBvbi4gKi8KLQlpZiAoY29uc3RyYWludHMtPmFsd2F5c19vbiAmJiBvcHMtPmVuYWJsZSAmJgotCSAgICAoKG9wcy0+aXNfZW5hYmxlZCAmJiAhb3BzLT5pc19lbmFibGVkKHJkZXYpKSB8fAotCSAgICAgKCFvcHMtPmlzX2VuYWJsZWQgJiYgIWNvbnN0cmFpbnRzLT5ib290X29uKSkpIHsKKwlpZiAoY29uc3RyYWludHMtPmluaXRpYWxfbW9kZSkgeworCQlpZiAoIW9wcy0+c2V0X21vZGUpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHNldF9tb2RlIG9wZXJhdGlvbiBmb3IgJXNcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG5hbWUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gb3BzLT5zZXRfbW9kZShyZGV2LCBjb25zdHJhaW50cy0+aW5pdGlhbF9tb2RlKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogZmFpbGVkIHRvIHNldCBpbml0aWFsIG1vZGUgZm9yICVzOiAlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSwgcmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogSWYgdGhlIGNvbnN0cmFpbnRzIHNheSB0aGUgcmVndWxhdG9yIHNob3VsZCBiZSBvbiBhdCB0aGlzIHBvaW50CisJICogYW5kIHdlIGhhdmUgY29udHJvbCB0aGVuIG1ha2Ugc3VyZSBpdCBpcyBlbmFibGVkLgorCSAqLworCWlmICgoY29uc3RyYWludHMtPmFsd2F5c19vbiB8fCBjb25zdHJhaW50cy0+Ym9vdF9vbikgJiYgb3BzLT5lbmFibGUpIHsKIAkJcmV0ID0gb3BzLT5lbmFibGUocmRldik7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gZW5hYmxlICVzXG4iLApAQCAtODE3LDYgKzkxMCwxOSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgdW5zZXRfcmVndWxhdG9yX3N1cHBsaWVzKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCByZWd1bGF0b3JfbWFwICpub2RlLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuLCAmcmVndWxhdG9yX21hcF9saXN0LCBsaXN0KSB7CisJCWlmIChyZGV2ID09IG5vZGUtPnJlZ3VsYXRvcikgeworCQkJbGlzdF9kZWwoJm5vZGUtPmxpc3QpOworCQkJa2ZyZWUobm9kZSk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKICNkZWZpbmUgUkVHX1NUUl9TSVpFCTMyCiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yICpjcmVhdGVfcmVndWxhdG9yKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LApAQCAtODk4LDkgKzEwMDQsMTIgQEAKICAqIEBpZDogU3VwcGx5IG5hbWUgb3IgcmVndWxhdG9yIElELgogICoKICAqIFJldHVybnMgYSBzdHJ1Y3QgcmVndWxhdG9yIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlZ3VsYXRvciBwcm9kdWNlciwKLSAqIG9yIElTX0VSUigpIGNvbmRpdGlvbiBjb250YWluaW5nIGVycm5vLiAgVXNlIG9mIHN1cHBseSBuYW1lcwotICogY29uZmlndXJlZCB2aWEgcmVndWxhdG9yX3NldF9kZXZpY2Vfc3VwcGx5KCkgaXMgc3Ryb25nbHkKLSAqIGVuY291cmFnZWQuCisgKiBvciBJU19FUlIoKSBjb25kaXRpb24gY29udGFpbmluZyBlcnJuby4KKyAqCisgKiBVc2Ugb2Ygc3VwcGx5IG5hbWVzIGNvbmZpZ3VyZWQgdmlhIHJlZ3VsYXRvcl9zZXRfZGV2aWNlX3N1cHBseSgpIGlzCisgKiBzdHJvbmdseSBlbmNvdXJhZ2VkLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgc3VwcGx5IG5hbWUgdXNlZAorICogc2hvdWxkIG1hdGNoIHRoZSBuYW1lIHVzZWQgZm9yIHRoZSBzdXBwbHkgYW5kL29yIHRoZSByZWxldmFudAorICogZGV2aWNlIHBpbnMgaW4gdGhlIGRhdGFzaGVldC4KICAqLwogc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQogewpAQCAtOTIyLDggKzEwMzEsNiBAQAogCQkJZ290byBmb3VuZDsKIAkJfQogCX0KLQlwcmludGsoS0VSTl9FUlIgInJlZ3VsYXRvcjogVW5hYmxlIHRvIGdldCByZXF1ZXN0ZWQgcmVndWxhdG9yOiAlc1xuIiwKLQkgICAgICAgaWQpOwogCW11dGV4X3VubG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwogCXJldHVybiByZWd1bGF0b3I7CiAKQEAgLTk2MSwxMCArMTA2OCw2IEBACiAJbXV0ZXhfbG9jaygmcmVndWxhdG9yX2xpc3RfbXV0ZXgpOwogCXJkZXYgPSByZWd1bGF0b3ItPnJkZXY7CiAKLQlpZiAoV0FSTihyZWd1bGF0b3ItPmVuYWJsZWQsICJSZWxlYXNpbmcgc3VwcGx5ICVzIHdoaWxlIGVuYWJsZWRcbiIsCi0JCQkgICAgICAgcmVndWxhdG9yLT5zdXBwbHlfbmFtZSkpCi0JCV9yZWd1bGF0b3JfZGlzYWJsZShyZGV2KTsKLQogCS8qIHJlbW92ZSBhbnkgc3lzZnMgZW50cmllcyAqLwogCWlmIChyZWd1bGF0b3ItPmRldikgewogCQlzeXNmc19yZW1vdmVfbGluaygmcmRldi0+ZGV2LmtvYmosIHJlZ3VsYXRvci0+c3VwcGx5X25hbWUpOwpAQCAtMTAzOSwxMiArMTE0Miw3IEBACiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7Ci0JaWYgKHJlZ3VsYXRvci0+ZW5hYmxlZCA9PSAwKQotCQlyZXQgPSBfcmVndWxhdG9yX2VuYWJsZShyZGV2KTsKLQllbHNlIGlmIChyZWd1bGF0b3ItPmVuYWJsZWQgPCAwKQotCQlyZXQgPSAtRUlPOwotCWlmIChyZXQgPT0gMCkKLQkJcmVndWxhdG9yLT5lbmFibGVkKys7CisJcmV0ID0gX3JlZ3VsYXRvcl9lbmFibGUocmRldik7CiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwNTUsNiArMTE1MywxMSBAQAogewogCWludCByZXQgPSAwOwogCisJaWYgKFdBUk4ocmRldi0+dXNlX2NvdW50IDw9IDAsCisJCQkidW5iYWxhbmNlZCBkaXNhYmxlcyBmb3IgJXNcbiIsCisJCQlyZGV2LT5kZXNjLT5uYW1lKSkKKwkJcmV0dXJuIC1FSU87CisKIAkvKiBhcmUgd2UgdGhlIGxhc3QgdXNlciBhbmQgcGVybWl0dGVkIHRvIGRpc2FibGUgPyAqLwogCWlmIChyZGV2LT51c2VfY291bnQgPT0gMSAmJiAhcmRldi0+Y29uc3RyYWludHMtPmFsd2F5c19vbikgewogCkBAIC0xMTAzLDE2ICsxMjA2LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnJkZXYtPm11dGV4KTsKLQlpZiAocmVndWxhdG9yLT5lbmFibGVkID09IDEpIHsKLQkJcmV0ID0gX3JlZ3VsYXRvcl9kaXNhYmxlKHJkZXYpOwotCQlpZiAocmV0ID09IDApCi0JCQlyZWd1bGF0b3ItPnVBX2xvYWQgPSAwOwotCX0gZWxzZSBpZiAoV0FSTihyZWd1bGF0b3ItPmVuYWJsZWQgPD0gMCwKLQkJCSJ1bmJhbGFuY2VkIGRpc2FibGVzIGZvciBzdXBwbHkgJXNcbiIsCi0JCQlyZWd1bGF0b3ItPnN1cHBseV9uYW1lKSkKLQkJcmV0ID0gLUVJTzsKLQlpZiAocmV0ID09IDApCi0JCXJlZ3VsYXRvci0+ZW5hYmxlZC0tOworCXJldCA9IF9yZWd1bGF0b3JfZGlzYWJsZShyZGV2KTsKIAltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTE1OSw3ICsxMjUzLDYgQEAKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmcmVndWxhdG9yLT5yZGV2LT5tdXRleCk7Ci0JcmVndWxhdG9yLT5lbmFibGVkID0gMDsKIAlyZWd1bGF0b3ItPnVBX2xvYWQgPSAwOwogCXJldCA9IF9yZWd1bGF0b3JfZm9yY2VfZGlzYWJsZShyZWd1bGF0b3ItPnJkZXYpOwogCW11dGV4X3VubG9jaygmcmVndWxhdG9yLT5yZGV2LT5tdXRleCk7CkBAIC0xMjA0LDYgKzEyOTcsNTYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9pc19lbmFibGVkKTsKIAogLyoqCisgKiByZWd1bGF0b3JfY291bnRfdm9sdGFnZXMgLSBjb3VudCByZWd1bGF0b3JfbGlzdF92b2x0YWdlKCkgc2VsZWN0b3JzCisgKiBAcmVndWxhdG9yOiByZWd1bGF0b3Igc291cmNlCisgKgorICogUmV0dXJucyBudW1iZXIgb2Ygc2VsZWN0b3JzLCBvciBuZWdhdGl2ZSBlcnJuby4gIFNlbGVjdG9ycyBhcmUKKyAqIG51bWJlcmVkIHN0YXJ0aW5nIGF0IHplcm8sIGFuZCB0eXBpY2FsbHkgY29ycmVzcG9uZCB0byBiaXRmaWVsZHMKKyAqIGluIGhhcmR3YXJlIHJlZ2lzdGVycy4KKyAqLworaW50IHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyhzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYJKnJkZXYgPSByZWd1bGF0b3ItPnJkZXY7CisKKwlyZXR1cm4gcmRldi0+ZGVzYy0+bl92b2x0YWdlcyA/IDogLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyk7CisKKy8qKgorICogcmVndWxhdG9yX2xpc3Rfdm9sdGFnZSAtIGVudW1lcmF0ZSBzdXBwb3J0ZWQgdm9sdGFnZXMKKyAqIEByZWd1bGF0b3I6IHJlZ3VsYXRvciBzb3VyY2UKKyAqIEBzZWxlY3RvcjogaWRlbnRpZnkgdm9sdGFnZSB0byBsaXN0CisgKiBDb250ZXh0OiBjYW4gc2xlZXAKKyAqCisgKiBSZXR1cm5zIGEgdm9sdGFnZSB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gQHJlZ3VsYXRvcl9zZXRfdm9sdGFnZSgpLAorICogemVybyBpZiB0aGlzIHNlbGVjdG9yIGNvZGUgY2FuJ3QgYmUgdXNlZCBvbiB0aGlzIHN5dGVtLCBvciBhCisgKiBuZWdhdGl2ZSBlcnJuby4KKyAqLworaW50IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yLCB1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldgkqcmRldiA9IHJlZ3VsYXRvci0+cmRldjsKKwlzdHJ1Y3QgcmVndWxhdG9yX29wcwkqb3BzID0gcmRldi0+ZGVzYy0+b3BzOworCWludAkJCXJldDsKKworCWlmICghb3BzLT5saXN0X3ZvbHRhZ2UgfHwgc2VsZWN0b3IgPj0gcmRldi0+ZGVzYy0+bl92b2x0YWdlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CisJcmV0ID0gb3BzLT5saXN0X3ZvbHRhZ2UocmRldiwgc2VsZWN0b3IpOworCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOworCisJaWYgKHJldCA+IDApIHsKKwkJaWYgKHJldCA8IHJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdVYpCisJCQlyZXQgPSAwOworCQllbHNlIGlmIChyZXQgPiByZGV2LT5jb25zdHJhaW50cy0+bWF4X3VWKQorCQkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX2xpc3Rfdm9sdGFnZSk7CisKKy8qKgogICogcmVndWxhdG9yX3NldF92b2x0YWdlIC0gc2V0IHJlZ3VsYXRvciBvdXRwdXQgdm9sdGFnZQogICogQHJlZ3VsYXRvcjogcmVndWxhdG9yIHNvdXJjZQogICogQG1pbl91VjogTWluaW11bSByZXF1aXJlZCB2b2x0YWdlIGluIHVWCkBAIC0xMjQzLDYgKzEzODYsNyBAQAogCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+c2V0X3ZvbHRhZ2UocmRldiwgbWluX3VWLCBtYXhfdVYpOwogCiBvdXQ6CisJX25vdGlmaWVyX2NhbGxfY2hhaW4ocmRldiwgUkVHVUxBVE9SX0VWRU5UX1ZPTFRBR0VfQ0hBTkdFLCBOVUxMKTsKIAltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTU0MywyMCArMTY4NywyMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX3VucmVnaXN0ZXJfbm90aWZpZXIpOwogCi0vKiBub3RpZnkgcmVndWxhdG9yIGNvbnN1bWVycyBhbmQgZG93bnN0cmVhbSByZWd1bGF0b3IgY29uc3VtZXJzICovCisvKiBub3RpZnkgcmVndWxhdG9yIGNvbnN1bWVycyBhbmQgZG93bnN0cmVhbSByZWd1bGF0b3IgY29uc3VtZXJzLgorICogTm90ZSBtdXRleCBtdXN0IGJlIGhlbGQgYnkgY2FsbGVyLgorICovCiBzdGF0aWMgdm9pZCBfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKl9yZGV2OwogCiAJLyogY2FsbCByZGV2IGNoYWluIGZpcnN0ICovCi0JbXV0ZXhfbG9jaygmcmRldi0+bXV0ZXgpOwogCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJnJkZXYtPm5vdGlmaWVyLCBldmVudCwgTlVMTCk7Ci0JbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdXRleCk7CiAKIAkvKiBub3cgbm90aWZ5IHJlZ3VsYXRvciB3ZSBzdXBwbHkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9yZGV2LCAmcmRldi0+c3VwcGx5X2xpc3QsIHNsaXN0KQotCQlfbm90aWZpZXJfY2FsbF9jaGFpbihfcmRldiwgZXZlbnQsIGRhdGEpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoX3JkZXYsICZyZGV2LT5zdXBwbHlfbGlzdCwgc2xpc3QpIHsKKwkgIG11dGV4X2xvY2soJl9yZGV2LT5tdXRleCk7CisJICBfbm90aWZpZXJfY2FsbF9jaGFpbihfcmRldiwgZXZlbnQsIGRhdGEpOworCSAgbXV0ZXhfdW5sb2NrKCZfcmRldi0+bXV0ZXgpOworCX0KIH0KIAogLyoqCkBAIC0xNzAzLDYgKzE4NTAsNyBAQAogICoKICAqIENhbGxlZCBieSByZWd1bGF0b3IgZHJpdmVycyB0byBub3RpZnkgY2xpZW50cyBhIHJlZ3VsYXRvciBldmVudCBoYXMKICAqIG9jY3VycmVkLiBXZSBhbHNvIG5vdGlmeSByZWd1bGF0b3IgY2xpZW50cyBkb3duc3RyZWFtLgorICogTm90ZSBsb2NrIG11c3QgYmUgaGVsZCBieSBjYWxsZXIuCiAgKi8KIGludCByZWd1bGF0b3Jfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCkBAIC0xNzQ0LDYgKzE4OTIsMTEgQEAKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQlyZXR1cm4gc3RhdHVzOwogCX0KKwlpZiAob3BzLT5nZXRfc3RhdHVzKSB7CisJCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdGF0dXMpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisJfQogCiAJLyogc29tZSBhdHRyaWJ1dGVzIGFyZSB0eXBlLXNwZWNpZmljICovCiAJaWYgKHJkZXYtPmRlc2MtPnR5cGUgPT0gUkVHVUxBVE9SX0NVUlJFTlQpIHsKQEAgLTE4MjgsMTcgKzE5ODEsMTggQEAKICAqIHJlZ3VsYXRvcl9yZWdpc3RlciAtIHJlZ2lzdGVyIHJlZ3VsYXRvcgogICogQHJlZ3VsYXRvcl9kZXNjOiByZWd1bGF0b3IgdG8gcmVnaXN0ZXIKICAqIEBkZXY6IHN0cnVjdCBkZXZpY2UgZm9yIHRoZSByZWd1bGF0b3IKKyAqIEBpbml0X2RhdGE6IHBsYXRmb3JtIHByb3ZpZGVkIGluaXQgZGF0YSwgcGFzc2VkIHRocm91Z2ggYnkgZHJpdmVyCiAgKiBAZHJpdmVyX2RhdGE6IHByaXZhdGUgcmVndWxhdG9yIGRhdGEKICAqCiAgKiBDYWxsZWQgYnkgcmVndWxhdG9yIGRyaXZlcnMgdG8gcmVnaXN0ZXIgYSByZWd1bGF0b3IuCiAgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KICAqLwogc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJlZ3VsYXRvcl9yZWdpc3RlcihzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKnJlZ3VsYXRvcl9kZXNjLAotCXN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZHJpdmVyX2RhdGEpCisJc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhLAorCXZvaWQgKmRyaXZlcl9kYXRhKQogewogCXN0YXRpYyBhdG9taWNfdCByZWd1bGF0b3Jfbm8gPSBBVE9NSUNfSU5JVCgwKTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKLQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCWludCByZXQsIGk7CiAKIAlpZiAocmVndWxhdG9yX2Rlc2MgPT0gTlVMTCkKQEAgLTE5NDUsNiArMjA5OSw3IEBACiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKKwl1bnNldF9yZWd1bGF0b3Jfc3VwcGxpZXMocmRldik7CiAJbGlzdF9kZWwoJnJkZXYtPmxpc3QpOwogCWlmIChyZGV2LT5zdXBwbHkpCiAJCXN5c2ZzX3JlbW92ZV9saW5rKCZyZGV2LT5kZXYua29iaiwgInN1cHBseSIpOwpAQCAtMTk4OSw2ICsyMTQ0LDIzIEBACiBFWFBPUlRfU1lNQk9MX0dQTChyZWd1bGF0b3Jfc3VzcGVuZF9wcmVwYXJlKTsKIAogLyoqCisgKiByZWd1bGF0b3JfaGFzX2Z1bGxfY29uc3RyYWludHMgLSB0aGUgc3lzdGVtIGhhcyBmdWxseSBzcGVjaWZpZWQgY29uc3RyYWludHMKKyAqCisgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZSB0aGUgcmVndWxhdG9yIEFQSSB0byBkaXNhYmxlIGFsbAorICogcmVndWxhdG9ycyB3aGljaCBoYXZlIGEgemVybyB1c2UgY291bnQgYW5kIGRvbid0IGhhdmUgYW4gYWx3YXlzX29uCisgKiBjb25zdHJhaW50IGluIGEgbGF0ZV9pbml0Y2FsbC4KKyAqCisgKiBUaGUgaW50ZW50aW9uIGlzIHRoYXQgdGhpcyB3aWxsIGJlY29tZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgaW4gYQorICogZnV0dXJlIGtlcm5lbCByZWxlYXNlIHNvIHVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGlzIGZhY2lsaXR5CisgKiBub3cuCisgKi8KK3ZvaWQgcmVndWxhdG9yX2hhc19mdWxsX2NvbnN0cmFpbnRzKHZvaWQpCit7CisJaGFzX2Z1bGxfY29uc3RyYWludHMgPSAxOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX2hhc19mdWxsX2NvbnN0cmFpbnRzKTsKKworLyoqCiAgKiByZGV2X2dldF9kcnZkYXRhIC0gZ2V0IHJkZXYgcmVndWxhdG9yIGRyaXZlciBkYXRhCiAgKiBAcmRldjogcmVndWxhdG9yCiAgKgpAQCAtMjA1NSwzICsyMjI3LDc3IEBACiAKIC8qIGluaXQgZWFybHkgdG8gYWxsb3cgb3VyIGNvbnN1bWVycyB0byBjb21wbGV0ZSBzeXN0ZW0gYm9vdGluZyAqLwogY29yZV9pbml0Y2FsbChyZWd1bGF0b3JfaW5pdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHJlZ3VsYXRvcl9pbml0X2NvbXBsZXRlKHZvaWQpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CisJc3RydWN0IHJlZ3VsYXRvcl9vcHMgKm9wczsKKwlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqYzsKKwlpbnQgZW5hYmxlZCwgcmV0OworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwltdXRleF9sb2NrKCZyZWd1bGF0b3JfbGlzdF9tdXRleCk7CisKKwkvKiBJZiB3ZSBoYXZlIGEgZnVsbCBjb25maWd1cmF0aW9uIHRoZW4gZGlzYWJsZSBhbnkgcmVndWxhdG9ycworCSAqIHdoaWNoIGFyZSBub3QgaW4gdXNlIG9yIGFsd2F5c19vbi4gIFRoaXMgd2lsbCBiZWNvbWUgdGhlCisJICogZGVmYXVsdCBiZWhhdmlvdXIgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZyZWd1bGF0b3JfbGlzdCwgbGlzdCkgeworCQlvcHMgPSByZGV2LT5kZXNjLT5vcHM7CisJCWMgPSByZGV2LT5jb25zdHJhaW50czsKKworCQlpZiAoYy0+bmFtZSkKKwkJCW5hbWUgPSBjLT5uYW1lOworCQllbHNlIGlmIChyZGV2LT5kZXNjLT5uYW1lKQorCQkJbmFtZSA9IHJkZXYtPmRlc2MtPm5hbWU7CisJCWVsc2UKKwkJCW5hbWUgPSAicmVndWxhdG9yIjsKKworCQlpZiAoIW9wcy0+ZGlzYWJsZSB8fCBjLT5hbHdheXNfb24pCisJCQljb250aW51ZTsKKworCQltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CisKKwkJaWYgKHJkZXYtPnVzZV9jb3VudCkKKwkJCWdvdG8gdW5sb2NrOworCisJCS8qIElmIHdlIGNhbid0IHJlYWQgdGhlIHN0YXR1cyBhc3N1bWUgaXQncyBvbi4gKi8KKwkJaWYgKG9wcy0+aXNfZW5hYmxlZCkKKwkJCWVuYWJsZWQgPSBvcHMtPmlzX2VuYWJsZWQocmRldik7CisJCWVsc2UKKwkJCWVuYWJsZWQgPSAxOworCisJCWlmICghZW5hYmxlZCkKKwkJCWdvdG8gdW5sb2NrOworCisJCWlmIChoYXNfZnVsbF9jb25zdHJhaW50cykgeworCQkJLyogV2UgbG9nIHNpbmNlIHRoaXMgbWF5IGtpbGwgdGhlIHN5c3RlbSBpZiBpdAorCQkJICogZ29lcyB3cm9uZy4gKi8KKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkaXNhYmxpbmcgJXNcbiIsCisJCQkgICAgICAgX19mdW5jX18sIG5hbWUpOworCQkJcmV0ID0gb3BzLT5kaXNhYmxlKHJkZXYpOworCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICIlczogY291bGRuJ3QgZGlzYWJsZSAlczogJWRcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCBuYW1lLCByZXQpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogVGhlIGludGVudGlvbiBpcyB0aGF0IGluIGZ1dHVyZSB3ZSB3aWxsCisJCQkgKiBhc3N1bWUgdGhhdCBmdWxsIGNvbnN0cmFpbnRzIGFyZSBwcm92aWRlZAorCQkJICogc28gd2FybiBldmVuIGlmIHdlIGFyZW4ndCBnb2luZyB0byBkbworCQkJICogYW55dGhpbmcgaGVyZS4KKwkJCSAqLworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogaW5jb21wbGV0ZSBjb25zdHJhaW50cywgbGVhdmluZyAlcyBvblxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgbmFtZSk7CisJCX0KKwordW5sb2NrOgorCQltdXRleF91bmxvY2soJnJkZXYtPm11dGV4KTsKKwl9CisKKwltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKKworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChyZWd1bGF0b3JfaW5pdF9jb21wbGV0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9kYTkwM3guYyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCmluZGV4IGZlNzc3MzAuLjcyYjE1NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTAzeC5jCkBAIC00NzEsNyArNDcxLDggQEAKIAlpZiAocmktPmRlc2MuaWQgPT0gREE5MDMwX0lEX0xETzEgfHwgcmktPmRlc2MuaWQgPT0gREE5MDMwX0lEX0xETzE1KQogCQlyaS0+ZGVzYy5vcHMgPSAmZGE5MDMwX3JlZ3VsYXRvcl9sZG8xXzE1X29wczsKIAotCXJkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJnJpLT5kZXNjLCAmcGRldi0+ZGV2LCByaSk7CisJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmktPmRlc2MsICZwZGV2LT5kZXYsCisJCQkJICBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwgcmkpOwogCWlmIChJU19FUlIocmRldikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciAlc1xuIiwKIAkJCQlyaS0+ZGVzYy5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCmluZGV4IGQzMWRiM2UuLjIzZDU1NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYwpAQCAtNzMsNyArNzMsOCBAQAogCiAJZHJ2ZGF0YS0+bWljcm92b2x0cyA9IGNvbmZpZy0+bWljcm92b2x0czsKIAotCWRydmRhdGEtPmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmZHJ2ZGF0YS0+ZGVzYywgZHJ2ZGF0YSk7CisJZHJ2ZGF0YS0+ZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZkcnZkYXRhLT5kZXNjLCAmcGRldi0+ZGV2LAorCQkJCQkgIGNvbmZpZy0+aW5pdF9kYXRhLCBkcnZkYXRhKTsKIAlpZiAoSVNfRVJSKGRydmRhdGEtPmRldikpIHsKIAkJcmV0ID0gUFRSX0VSUihkcnZkYXRhLT5kZXYpOwogCQlnb3RvIGVycl9uYW1lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvcGNmNTA2MzMtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYwppbmRleCA0Y2M4NWVjLi5jZDc2MWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9wY2Y1MDYzMy1yZWd1bGF0b3IuYwpAQCAtMjg0LDcgKzI4NCw4IEBACiAJLyogQWxyZWFkeSBzZXQgYnkgY29yZSBkcml2ZXIgKi8KIAlwY2YgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCXJkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJnJlZ3VsYXRvcnNbcGRldi0+aWRdLCAmcGRldi0+ZGV2LCBwY2YpOworCXJkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJnJlZ3VsYXRvcnNbcGRldi0+aWRdLCAmcGRldi0+ZGV2LAorCQkJCSAgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsIHBjZik7CiAJaWYgKElTX0VSUihyZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIocmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3R3bDQwMzAtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci90d2w0MDMwLXJlZ3VsYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMDMyZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci90d2w0MDMwLXJlZ3VsYXRvci5jCkBAIC0wLDAgKzEsNTAwIEBACisvKgorICogdHdsNDAzMC1yZWd1bGF0b3IuYyAtLSBzdXBwb3J0IHJlZ3VsYXRvcnMgaW4gdHdsNDAzMCBmYW1pbHkgY2hpcHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGF2aWQgQnJvd25lbGwKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKworCisvKgorICogVGhlIFRXTDQwMzAvVFc1MDMwL1RQUzY1OXgwIGZhbWlseSBjaGlwcyBpbmNsdWRlIHBvd2VyIG1hbmFnZW1lbnQsIGEKKyAqIFVTQiBPVEcgdHJhbnNjZWl2ZXIsIGFuIFJUQywgQURDLCBQV00sIGFuZCBsb3RzIG1vcmUuICBTb21lIHZlcnNpb25zCisgKiBpbmNsdWRlIGFuIGF1ZGlvIGNvZGVjLCBiYXR0ZXJ5IGNoYXJnZXIsIGFuZCBtb3JlIHZvbHRhZ2UgcmVndWxhdG9ycy4KKyAqIFRoZXNlIGNoaXBzIGFyZSBvZnRlbiB1c2VkIGluIE9NQVAtYmFzZWQgc3lzdGVtcy4KKyAqCisgKiBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHNvZnR3YXJlLWJhc2VkIHJlc291cmNlIGNvbnRyb2wgZm9yIHZhcmlvdXMKKyAqIHZvbHRhZ2UgcmVndWxhdG9ycy4gIFRoaXMgaXMgdXN1YWxseSBhdWdtZW50ZWQgd2l0aCBzdGF0ZSBtYWNoaW5lCisgKiBiYXNlZCBjb250cm9sLgorICovCisKK3N0cnVjdCB0d2xyZWdfaW5mbyB7CisJLyogc3RhcnQgb2YgcmVndWxhdG9yJ3MgUE1fUkVDRUlWRVIgY29udHJvbCByZWdpc3RlciBiYW5rICovCisJdTgJCQliYXNlOworCisJLyogdHdsNDAzMCByZXNvdXJjZSBJRCwgZm9yIHJlc291cmNlIGNvbnRyb2wgc3RhdGUgbWFjaGluZSAqLworCXU4CQkJaWQ7CisKKwkvKiB2b2x0YWdlIGluIG1WID0gdGFibGVbVlNFTF07IHRhYmxlX2xlbiBtdXN0IGJlIGEgcG93ZXItb2YtdHdvICovCisJdTgJCQl0YWJsZV9sZW47CisJY29uc3QgdTE2CQkqdGFibGU7CisKKwkvKiBjaGlwIGNvbnN0cmFpbnRzIG9uIHJlZ3VsYXRvciBiZWhhdmlvciAqLworCXUxNgkJCW1pbl9tVjsKKworCS8qIHVzZWQgYnkgcmVndWxhdG9yIGNvcmUgKi8KKwlzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MJZGVzYzsKK307CisKKworLyogTERPIGNvbnRyb2wgcmVnaXN0ZXJzIC4uLiBvZmZzZXQgaXMgZnJvbSB0aGUgYmFzZSBvZiBpdHMgcmVnaXN0ZXIgYmFuay4KKyAqIFRoZSBmaXJzdCB0aHJlZSByZWdpc3RlcnMgb2YgYWxsIHBvd2VyIHJlc291cmNlIGJhbmtzIGhlbHAgaGFyZHdhcmUgdG8KKyAqIG1hbmFnZSB0aGUgdmFyaW91cyByZXNvdXJjZSBncm91cHMuCisgKi8KKyNkZWZpbmUgVlJFR19HUlAJCTAKKyNkZWZpbmUgVlJFR19UWVBFCQkxCisjZGVmaW5lIFZSRUdfUkVNQVAJCTIKKyNkZWZpbmUgVlJFR19ERURJQ0FURUQJCTMJLyogTERPIGNvbnRyb2wgKi8KKworCitzdGF0aWMgaW5saW5lIGludAordHdsNDAzMHJlZ19yZWFkKHN0cnVjdCB0d2xyZWdfaW5mbyAqaW5mbywgdW5zaWduZWQgb2Zmc2V0KQoreworCXU4IHZhbHVlOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSB0d2w0MDMwX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLAorCQkJJnZhbHVlLCBpbmZvLT5iYXNlICsgb2Zmc2V0KTsKKwlyZXR1cm4gKHN0YXR1cyA8IDApID8gc3RhdHVzIDogdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit0d2w0MDMwcmVnX3dyaXRlKHN0cnVjdCB0d2xyZWdfaW5mbyAqaW5mbywgdW5zaWduZWQgb2Zmc2V0LCB1OCB2YWx1ZSkKK3sKKwlyZXR1cm4gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsCisJCQl2YWx1ZSwgaW5mby0+YmFzZSArIG9mZnNldCk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIGdlbmVyaWMgcG93ZXIgcmVzb3VyY2Ugb3BlcmF0aW9ucywgd2hpY2ggd29yayBvbiBhbGwgcmVndWxhdG9ycyAqLworCitzdGF0aWMgaW50IHR3bDQwMzByZWdfZ3JwKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXJldHVybiB0d2w0MDMwcmVnX3JlYWQocmRldl9nZXRfZHJ2ZGF0YShyZGV2KSwgVlJFR19HUlApOworfQorCisvKgorICogRW5hYmxlL2Rpc2FibGUgcmVndWxhdG9ycyBieSBqb2luaW5nL2xlYXZpbmcgdGhlIFAxIChwcm9jZXNzb3IpIGdyb3VwLgorICogV2UgYXNzdW1lIG5vYm9keSBlbHNlIGlzIHVwZGF0aW5nIHRoZSBERVZfR1JQIHJlZ2lzdGVycy4KKyAqLworCisjZGVmaW5lIFAzX0dSUAkJQklUKDcpCQkvKiAicGVyaXBoZXJhbHMiICovCisjZGVmaW5lIFAyX0dSUAkJQklUKDYpCQkvKiBzZWNvbmRhcnkgcHJvY2Vzc29yLCBtb2RlbSwgZXRjICovCisjZGVmaW5lIFAxX0dSUAkJQklUKDUpCQkvKiBDUFUvTGludXggKi8KKworc3RhdGljIGludCB0d2w0MDMwcmVnX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJaW50CXN0YXRlID0gdHdsNDAzMHJlZ19ncnAocmRldik7CisKKwlpZiAoc3RhdGUgPCAwKQorCQlyZXR1cm4gc3RhdGU7CisKKwlyZXR1cm4gKHN0YXRlICYgUDFfR1JQKSAhPSAwOworfQorCitzdGF0aWMgaW50IHR3bDQwMzByZWdfZW5hYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB0d2xyZWdfaW5mbwkqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50CQkJZ3JwOworCisJZ3JwID0gdHdsNDAzMHJlZ19yZWFkKGluZm8sIFZSRUdfR1JQKTsKKwlpZiAoZ3JwIDwgMCkKKwkJcmV0dXJuIGdycDsKKworCWdycCB8PSBQMV9HUlA7CisJcmV0dXJuIHR3bDQwMzByZWdfd3JpdGUoaW5mbywgVlJFR19HUlAsIGdycCk7Cit9CisKK3N0YXRpYyBpbnQgdHdsNDAzMHJlZ19kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB0d2xyZWdfaW5mbwkqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50CQkJZ3JwOworCisJZ3JwID0gdHdsNDAzMHJlZ19yZWFkKGluZm8sIFZSRUdfR1JQKTsKKwlpZiAoZ3JwIDwgMCkKKwkJcmV0dXJuIGdycDsKKworCWdycCAmPSB+UDFfR1JQOworCXJldHVybiB0d2w0MDMwcmVnX3dyaXRlKGluZm8sIFZSRUdfR1JQLCBncnApOworfQorCitzdGF0aWMgaW50IHR3bDQwMzByZWdfZ2V0X3N0YXR1cyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlpbnQJc3RhdGUgPSB0d2w0MDMwcmVnX2dycChyZGV2KTsKKworCWlmIChzdGF0ZSA8IDApCisJCXJldHVybiBzdGF0ZTsKKwlzdGF0ZSAmPSAweDBmOworCisJLyogYXNzdW1lIHN0YXRlICE9IFdBUk1fUkVTRVQ7IHdlJ2Qgbm90IGJlIHJ1bm5pbmcuLi4gICovCisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIFJFR1VMQVRPUl9TVEFUVVNfT0ZGOworCXJldHVybiAoc3RhdGUgJiBCSVQoMykpCisJCT8gUkVHVUxBVE9SX1NUQVRVU19OT1JNQUwKKwkJOiBSRUdVTEFUT1JfU1RBVFVTX1NUQU5EQlk7Cit9CisKK3N0YXRpYyBpbnQgdHdsNDAzMHJlZ19zZXRfbW9kZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgbW9kZSkKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXVuc2lnbmVkCQltZXNzYWdlOworCWludAkJCXN0YXR1czsKKworCS8qIFdlIGNhbiBvbmx5IHNldCB0aGUgbW9kZSB0aHJvdWdoIHN0YXRlIG1hY2hpbmUgY29tbWFuZHMuLi4gKi8KKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX05PUk1BTDoKKwkJbWVzc2FnZSA9IE1TR19TSU5HVUxBUihERVZfR1JQX1AxLCBpbmZvLT5pZCwgUkVTX1NUQVRFX0FDVElWRSk7CisJCWJyZWFrOworCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToKKwkJbWVzc2FnZSA9IE1TR19TSU5HVUxBUihERVZfR1JQX1AxLCBpbmZvLT5pZCwgUkVTX1NUQVRFX1NMRUVQKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRW5zdXJlIHRoZSByZXNvdXJjZSBpcyBhc3NvY2lhdGVkIHdpdGggc29tZSBncm91cCAqLworCXN0YXR1cyA9IHR3bDQwMzByZWdfZ3JwKHJkZXYpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCWlmICghKHN0YXR1cyAmIChQM19HUlAgfCBQMl9HUlAgfCBQMV9HUlApKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlzdGF0dXMgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9NQVNURVIsCisJCQltZXNzYWdlID4+IDgsIDB4MTUgLyogUEJfV09SRF9NU0IgKi8gKTsKKwlpZiAoc3RhdHVzID49IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLAorCQkJbWVzc2FnZSwgMHgxNiAvKiBQQl9XT1JEX0xTQiAqLyApOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogU3VwcG9ydCBmb3IgYWRqdXN0YWJsZS12b2x0YWdlIExET3MgdXNlcyBhIGZvdXIgYml0IChvciBsZXNzKSB2b2x0YWdlCisgKiBzZWxlY3QgZmllbGQgaW4gaXRzIGNvbnRyb2wgcmVnaXN0ZXIuICAgV2UgdXNlIHRhYmxlcyBpbmRleGVkIGJ5IFZTRUwKKyAqIHRvIHJlY29yZCB2b2x0YWdlcyBpbiBtaWxsaVZvbHRzLiAgKEFjY3VyYWN5IGlzIGFib3V0IHRocmVlIHBlcmNlbnQuKQorICoKKyAqIE5vdGUgdGhhdCBWU0VMIHZhbHVlcyBmb3IgVkFVWDIgY2hhbmdlZCBpbiB0d2w1MDMwIGFuZCBuZXdlciBzaWxpY29uOworICogY3VycmVudGx5IGhhbmRsZWQgYnkgbGlzdGluZyB0d28gc2xpZ2h0bHkgZGlmZmVyZW50IFZBVVgyIHJlZ3VsYXRvcnMsCisgKiBvbmx5IG9uZSBvZiB3aGljaCB3aWxsIGJlIGNvbmZpZ3VyZWQuCisgKgorICogVlNFTCB2YWx1ZXMgZG9jdW1lbnRlZCBhcyAiVEkgY2Fubm90IHN1cHBvcnQgdGhlc2UgdmFsdWVzIiBhcmUgZmxhZ2dlZAorICogaW4gdGhlc2UgdGFibGVzIGFzIFVOU1VQKCkgdmFsdWVzOyB3ZSBub3JtYWxseSB3b24ndCBhc3NpZ24gdGhlbS4KKyAqCisgKiBWQVVYMyBhdCAzViBpcyBpbmNvcnJlY3RseSBsaXN0ZWQgaW4gc29tZSBUSSBtYW51YWxzIGFzIHVuc3VwcG9ydGVkLgorICogVEkgYXJlIHJldmlzaW5nIHRoZSB0d2w1MDMwL3RwczY1OXgwIHNwZWNzIHRvIHN1cHBvcnQgdGhhdCAzLjBWIHNldHRpbmcuCisgKi8KKyNpZmRlZiBDT05GSUdfVFdMNDAzMF9BTExPV19VTlNVUFBPUlRFRAorI2RlZmluZSBVTlNVUF9NQVNLCTB4MDAwMAorI2Vsc2UKKyNkZWZpbmUgVU5TVVBfTUFTSwkweDgwMDAKKyNlbmRpZgorCisjZGVmaW5lIFVOU1VQKHgpCShVTlNVUF9NQVNLIHwgKHgpKQorI2RlZmluZSBJU19VTlNVUCh4KQkoVU5TVVBfTUFTSyAmICh4KSkKKyNkZWZpbmUgTERPX01WKHgpCSh+VU5TVVBfTUFTSyAmICh4KSkKKworCitzdGF0aWMgY29uc3QgdTE2IFZBVVgxX1ZTRUxfdGFibGVbXSA9IHsKKwlVTlNVUCgxNTAwKSwgVU5TVVAoMTgwMCksIDI1MDAsIDI4MDAsCisJMzAwMCwgMzAwMCwgMzAwMCwgMzAwMCwKK307CitzdGF0aWMgY29uc3QgdTE2IFZBVVgyXzQwMzBfVlNFTF90YWJsZVtdID0geworCVVOU1VQKDEwMDApLCBVTlNVUCgxMDAwKSwgVU5TVVAoMTIwMCksIDEzMDAsCisJMTUwMCwgMTgwMCwgVU5TVVAoMTg1MCksIDI1MDAsCisJVU5TVVAoMjYwMCksIDI4MDAsIFVOU1VQKDI4NTApLCBVTlNVUCgzMDAwKSwKKwlVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwKK307CitzdGF0aWMgY29uc3QgdTE2IFZBVVgyX1ZTRUxfdGFibGVbXSA9IHsKKwkxNzAwLCAxNzAwLCAxOTAwLCAxMzAwLAorCTE1MDAsIDE4MDAsIDIwMDAsIDI1MDAsCisJMjEwMCwgMjgwMCwgMjIwMCwgMjMwMCwKKwkyNDAwLCAyNDAwLCAyNDAwLCAyNDAwLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVkFVWDNfVlNFTF90YWJsZVtdID0geworCTE1MDAsIDE4MDAsIDI1MDAsIDI4MDAsCisJMzAwMCwgMzAwMCwgMzAwMCwgMzAwMCwKK307CitzdGF0aWMgY29uc3QgdTE2IFZBVVg0X1ZTRUxfdGFibGVbXSA9IHsKKwk3MDAsIDEwMDAsIDEyMDAsIFVOU1VQKDEzMDApLAorCTE1MDAsIDE4MDAsIFVOU1VQKDE4NTApLCAyNTAwLAorCVVOU1VQKDI2MDApLCAyODAwLCBVTlNVUCgyODUwKSwgVU5TVVAoMzAwMCksCisJVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksCit9Oworc3RhdGljIGNvbnN0IHUxNiBWTU1DMV9WU0VMX3RhYmxlW10gPSB7CisJMTg1MCwgMjg1MCwgMzAwMCwgMzE1MCwKK307CitzdGF0aWMgY29uc3QgdTE2IFZNTUMyX1ZTRUxfdGFibGVbXSA9IHsKKwlVTlNVUCgxMDAwKSwgVU5TVVAoMTAwMCksIFVOU1VQKDEyMDApLCBVTlNVUCgxMzAwKSwKKwlVTlNVUCgxNTAwKSwgVU5TVVAoMTgwMCksIDE4NTAsIFVOU1VQKDI1MDApLAorCTI2MDAsIDI4MDAsIDI4NTAsIDMwMDAsCisJMzE1MCwgMzE1MCwgMzE1MCwgMzE1MCwKK307CitzdGF0aWMgY29uc3QgdTE2IFZQTEwxX1ZTRUxfdGFibGVbXSA9IHsKKwkxMDAwLCAxMjAwLCAxMzAwLCAxODAwLAorCVVOU1VQKDI4MDApLCBVTlNVUCgzMDAwKSwgVU5TVVAoMzAwMCksIFVOU1VQKDMwMDApLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVlBMTDJfVlNFTF90YWJsZVtdID0geworCTcwMCwgMTAwMCwgMTIwMCwgMTMwMCwKKwlVTlNVUCgxNTAwKSwgMTgwMCwgVU5TVVAoMTg1MCksIFVOU1VQKDI1MDApLAorCVVOU1VQKDI2MDApLCBVTlNVUCgyODAwKSwgVU5TVVAoMjg1MCksIFVOU1VQKDMwMDApLAorCVVOU1VQKDMxNTApLCBVTlNVUCgzMTUwKSwgVU5TVVAoMzE1MCksIFVOU1VQKDMxNTApLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVlNJTV9WU0VMX3RhYmxlW10gPSB7CisJVU5TVVAoMTAwMCksIFVOU1VQKDEyMDApLCBVTlNVUCgxMzAwKSwgMTgwMCwKKwkyODAwLCAzMDAwLCAzMDAwLCAzMDAwLAorfTsKK3N0YXRpYyBjb25zdCB1MTYgVkRBQ19WU0VMX3RhYmxlW10gPSB7CisJMTIwMCwgMTMwMCwgMTgwMCwgMTgwMCwKK307CisKKworc3RhdGljIGludCB0d2w0MDMwbGRvX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgaW5kZXgpCit7CisJc3RydWN0IHR3bHJlZ19pbmZvCSppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQJCQltViA9IGluZm8tPnRhYmxlW2luZGV4XTsKKworCXJldHVybiBJU19VTlNVUChtVikgPyAwIDogKExET19NVihtVikgKiAxMDAwKTsKK30KKworc3RhdGljIGludAordHdsNDAzMGxkb19zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludAkJCXZzZWw7CisKKwlmb3IgKHZzZWwgPSAwOyB2c2VsIDwgaW5mby0+dGFibGVfbGVuOyB2c2VsKyspIHsKKwkJaW50IG1WID0gaW5mby0+dGFibGVbdnNlbF07CisJCWludCB1VjsKKworCQlpZiAoSVNfVU5TVVAobVYpKQorCQkJY29udGludWU7CisJCXVWID0gTERPX01WKG1WKSAqIDEwMDA7CisKKwkJLyogUkVWSVNJVCBmb3IgVkFVWDIsIGZpcnN0IG1hdGNoIG1heSBub3QgYmUgYmVzdC9sb3dlc3QgKi8KKworCQkvKiB1c2UgdGhlIGZpcnN0IGluLXJhbmdlIHZhbHVlICovCisJCWlmIChtaW5fdVYgPD0gdVYgJiYgdVYgPD0gbWF4X3VWKQorCQkJcmV0dXJuIHR3bDQwMzByZWdfd3JpdGUoaW5mbywgVlJFR19ERURJQ0FURUQsIHZzZWwpOworCX0KKworCXJldHVybiAtRURPTTsKK30KKworc3RhdGljIGludCB0d2w0MDMwbGRvX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB0d2xyZWdfaW5mbwkqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50CQkJdnNlbCA9IHR3bDQwMzByZWdfcmVhZChpbmZvLCBWUkVHX0RFRElDQVRFRCk7CisKKwlpZiAodnNlbCA8IDApCisJCXJldHVybiB2c2VsOworCisJdnNlbCAmPSBpbmZvLT50YWJsZV9sZW4gLSAxOworCXJldHVybiBMRE9fTVYoaW5mby0+dGFibGVbdnNlbF0pICogMTAwMDsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHR3bDQwMzBsZG9fb3BzID0geworCS5saXN0X3ZvbHRhZ2UJPSB0d2w0MDMwbGRvX2xpc3Rfdm9sdGFnZSwKKworCS5zZXRfdm9sdGFnZQk9IHR3bDQwMzBsZG9fc2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlCT0gdHdsNDAzMGxkb19nZXRfdm9sdGFnZSwKKworCS5lbmFibGUJCT0gdHdsNDAzMHJlZ19lbmFibGUsCisJLmRpc2FibGUJPSB0d2w0MDMwcmVnX2Rpc2FibGUsCisJLmlzX2VuYWJsZWQJPSB0d2w0MDMwcmVnX2lzX2VuYWJsZWQsCisKKwkuc2V0X21vZGUJPSB0d2w0MDMwcmVnX3NldF9tb2RlLAorCisJLmdldF9zdGF0dXMJPSB0d2w0MDMwcmVnX2dldF9zdGF0dXMsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogRml4ZWQgdm9sdGFnZSBMRE9zIGRvbid0IGhhdmUgYSBWU0VMIGZpZWxkIHRvIHVwZGF0ZS4KKyAqLworc3RhdGljIGludCB0d2w0MDMwZml4ZWRfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCB1bnNpZ25lZCBpbmRleCkKK3sKKwlzdHJ1Y3QgdHdscmVnX2luZm8JKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCisJcmV0dXJuIGluZm8tPm1pbl9tViAqIDEwMDA7Cit9CisKK3N0YXRpYyBpbnQgdHdsNDAzMGZpeGVkX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCB0d2xyZWdfaW5mbwkqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKKwlyZXR1cm4gaW5mby0+bWluX21WICogMTAwMDsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHR3bDQwMzBmaXhlZF9vcHMgPSB7CisJLmxpc3Rfdm9sdGFnZQk9IHR3bDQwMzBmaXhlZF9saXN0X3ZvbHRhZ2UsCisKKwkuZ2V0X3ZvbHRhZ2UJPSB0d2w0MDMwZml4ZWRfZ2V0X3ZvbHRhZ2UsCisKKwkuZW5hYmxlCQk9IHR3bDQwMzByZWdfZW5hYmxlLAorCS5kaXNhYmxlCT0gdHdsNDAzMHJlZ19kaXNhYmxlLAorCS5pc19lbmFibGVkCT0gdHdsNDAzMHJlZ19pc19lbmFibGVkLAorCisJLnNldF9tb2RlCT0gdHdsNDAzMHJlZ19zZXRfbW9kZSwKKworCS5nZXRfc3RhdHVzCT0gdHdsNDAzMHJlZ19nZXRfc3RhdHVzLAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2RlZmluZSBUV0xfQURKVVNUQUJMRV9MRE8obGFiZWwsIG9mZnNldCwgbnVtKSB7IFwKKwkuYmFzZSA9IG9mZnNldCwgXAorCS5pZCA9IG51bSwgXAorCS50YWJsZV9sZW4gPSBBUlJBWV9TSVpFKGxhYmVsIyNfVlNFTF90YWJsZSksIFwKKwkudGFibGUgPSBsYWJlbCMjX1ZTRUxfdGFibGUsIFwKKwkuZGVzYyA9IHsgXAorCQkubmFtZSA9ICNsYWJlbCwgXAorCQkuaWQgPSBUV0w0MDMwX1JFR18jI2xhYmVsLCBcCisJCS5uX3ZvbHRhZ2VzID0gQVJSQVlfU0laRShsYWJlbCMjX1ZTRUxfdGFibGUpLCBcCisJCS5vcHMgPSAmdHdsNDAzMGxkb19vcHMsIFwKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwgXAorCQkub3duZXIgPSBUSElTX01PRFVMRSwgXAorCQl9LCBcCisJfQorCisjZGVmaW5lIFRXTF9GSVhFRF9MRE8obGFiZWwsIG9mZnNldCwgbVZvbHRzLCBudW0pIHsgXAorCS5iYXNlID0gb2Zmc2V0LCBcCisJLmlkID0gbnVtLCBcCisJLm1pbl9tViA9IG1Wb2x0cywgXAorCS5kZXNjID0geyBcCisJCS5uYW1lID0gI2xhYmVsLCBcCisJCS5pZCA9IFRXTDQwMzBfUkVHXyMjbGFiZWwsIFwKKwkJLm5fdm9sdGFnZXMgPSAxLCBcCisJCS5vcHMgPSAmdHdsNDAzMGZpeGVkX29wcywgXAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLCBcCisJCS5vd25lciA9IFRISVNfTU9EVUxFLCBcCisJCX0sIFwKKwl9CisKKy8qCisgKiBXZSBsaXN0IHJlZ3VsYXRvcnMgaGVyZSBpZiBzeXN0ZW1zIG5lZWQgc29tZSBsZXZlbCBvZgorICogc29mdHdhcmUgY29udHJvbCBvdmVyIHRoZW0gYWZ0ZXIgYm9vdC4KKyAqLworc3RhdGljIHN0cnVjdCB0d2xyZWdfaW5mbyB0d2w0MDMwX3JlZ3NbXSA9IHsKKwlUV0xfQURKVVNUQUJMRV9MRE8oVkFVWDEsIDB4MTcsIDEpLAorCVRXTF9BREpVU1RBQkxFX0xETyhWQVVYMl80MDMwLCAweDFiLCAyKSwKKwlUV0xfQURKVVNUQUJMRV9MRE8oVkFVWDIsIDB4MWIsIDIpLAorCVRXTF9BREpVU1RBQkxFX0xETyhWQVVYMywgMHgxZiwgMyksCisJVFdMX0FESlVTVEFCTEVfTERPKFZBVVg0LCAweDIzLCA0KSwKKwlUV0xfQURKVVNUQUJMRV9MRE8oVk1NQzEsIDB4MjcsIDUpLAorCVRXTF9BREpVU1RBQkxFX0xETyhWTU1DMiwgMHgyYiwgNiksCisJLyoKKwlUV0xfQURKVVNUQUJMRV9MRE8oVlBMTDEsIDB4MmYsIDcpLAorCSovCisJVFdMX0FESlVTVEFCTEVfTERPKFZQTEwyLCAweDMzLCA4KSwKKwlUV0xfQURKVVNUQUJMRV9MRE8oVlNJTSwgMHgzNywgOSksCisJVFdMX0FESlVTVEFCTEVfTERPKFZEQUMsIDB4M2IsIDEwKSwKKwkvKgorCVRXTF9BREpVU1RBQkxFX0xETyhWSU5UQU5BMSwgMHgzZiwgMTEpLAorCVRXTF9BREpVU1RBQkxFX0xETyhWSU5UQU5BMiwgMHg0MywgMTIpLAorCVRXTF9BREpVU1RBQkxFX0xETyhWSU5URElHLCAweDQ3LCAxMyksCisJVFdMX1NNUFMoVklPLCAweDRiLCAxNCksCisJVFdMX1NNUFMoVkREMSwgMHg1NSwgMTUpLAorCVRXTF9TTVBTKFZERDIsIDB4NjMsIDE2KSwKKwkgKi8KKwlUV0xfRklYRURfTERPKFZVU0IxVjUsIDB4NzEsIDE1MDAsIDE3KSwKKwlUV0xfRklYRURfTERPKFZVU0IxVjgsIDB4NzQsIDE4MDAsIDE4KSwKKwlUV0xfRklYRURfTERPKFZVU0IzVjEsIDB4NzcsIDMxMDAsIDE5KSwKKwkvKiBWVVNCQ1AgaXMgbWFuYWdlZCAqb25seSogYnkgdGhlIFVTQiBzdWJjaGlwICovCit9OworCitzdGF0aWMgaW50IHR3bDQwMzByZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQJCQkJaTsKKwlzdHJ1Y3QgdHdscmVnX2luZm8JCSppbmZvOworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhCSppbml0ZGF0YTsKKwlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cwkqYzsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldgkJKnJkZXY7CisKKwlmb3IgKGkgPSAwLCBpbmZvID0gTlVMTDsgaSA8IEFSUkFZX1NJWkUodHdsNDAzMF9yZWdzKTsgaSsrKSB7CisJCWlmICh0d2w0MDMwX3JlZ3NbaV0uZGVzYy5pZCAhPSBwZGV2LT5pZCkKKwkJCWNvbnRpbnVlOworCQlpbmZvID0gdHdsNDAzMF9yZWdzICsgaTsKKwkJYnJlYWs7CisJfQorCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbml0ZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghaW5pdGRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ29uc3RyYWluIGJvYXJkLXNwZWNpZmljIGNhcGFiaWxpdGllcyBhY2NvcmRpbmcgdG8gd2hhdAorCSAqIHRoaXMgZHJpdmVyIGFuZCB0aGUgY2hpcCBpdHNlbGYgY2FuIGFjdHVhbGx5IGRvLgorCSAqLworCWMgPSAmaW5pdGRhdGEtPmNvbnN0cmFpbnRzOworCWMtPnZhbGlkX21vZGVzX21hc2sgJj0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwgUkVHVUxBVE9SX01PREVfU1RBTkRCWTsKKwljLT52YWxpZF9vcHNfbWFzayAmPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVM7CisKKwlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZpbmZvLT5kZXNjLCAmcGRldi0+ZGV2LCBpbml0ZGF0YSwgaW5mbyk7CisJaWYgKElTX0VSUihyZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCByZWdpc3RlciAlcywgJWxkXG4iLAorCQkJCWluZm8tPmRlc2MubmFtZSwgUFRSX0VSUihyZGV2KSk7CisJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCX0KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCByZGV2KTsKKworCS8qIE5PVEU6ICBtYW55IHJlZ3VsYXRvcnMgc3VwcG9ydCBzaG9ydC1jaXJjdWl0IElSUXMgKHByZXNlbnRhYmxlCisJICogYXMgUkVHVUxBVE9SX09WRVJfQ1VSUkVOVCBub3RpZmljYXRpb25zPykgY29uZmlndXJlZCB2aWE6CisJICogIC0gU0NfQ09ORklHCisJICogIC0gU0NfREVURUNUMSAodmludGFuYTIsIHZtbWMxLzIsIHZhdXgxLzIvMy80KQorCSAqICAtIFNDX0RFVEVDVDIgKHZ1c2IsIHZkYWMsIHZpbywgdmRkMS8yLCB2cGxsMikKKwkgKiAgLSBJVF9DT05GSUcKKwkgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB0d2w0MDMwcmVnX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKKwlyZXR1cm4gMDsKK30KKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp0d2w0MDMwX3JlZyIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0d2w0MDMwcmVnX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdHdsNDAzMHJlZ19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHR3bDQwMzByZWdfcmVtb3ZlKSwKKwkvKiBOT1RFOiBzaG9ydCBuYW1lLCB0byB3b3JrIGFyb3VuZCBkcml2ZXIgbW9kZWwgdHJ1bmNhdGlvbiBvZgorCSAqICJ0d2w0MDMwX3JlZ3VsYXRvci4xMiIgKGFuZCBmcmllbmRzKSB0byAidHdsNDAzMF9yZWd1bGF0b3IuMSIuCisJICovCisJLmRyaXZlci5uYW1lCT0gInR3bDQwMzBfcmVnIiwKKwkuZHJpdmVyLm93bmVyCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0d2w0MDMwcmVnX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0d2w0MDMwcmVnX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwodHdsNDAzMHJlZ19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHR3bDQwMzByZWdfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0d2w0MDMwcmVnX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh0d2w0MDMwcmVnX2V4aXQpCisKK01PRFVMRV9ERVNDUklQVElPTigiVFdMNDAzMCByZWd1bGF0b3IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci92aXJ0dWFsLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci92aXJ0dWFsLmMKaW5kZXggNWRkYjQ2NC4uM2QwODM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdmlydHVhbC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3ZpcnR1YWwuYwpAQCAtMjI2LDEzICsyMjYsMTcgQEAKIAl1bnNpZ25lZCBpbnQgbW9kZTsKIAlpbnQgcmV0OwogCi0JaWYgKHN0cm5jbXAoYnVmLCAiZmFzdCIsIHN0cmxlbigiZmFzdCIpKSA9PSAwKQorCS8qCisJICogc3lzZnNfc3RyZXEoKSBkb2Vzbid0IG5lZWQgdGhlIFxuJ3MsIGJ1dCB3ZSBhZGQgdGhlbSBzbyB0aGUgc3RyaW5ncworCSAqIHdpbGwgYmUgc2hhcmVkIHdpdGggc2hvd19tb2RlKCksIGFib3ZlLgorCSAqLworCWlmIChzeXNmc19zdHJlcShidWYsICJmYXN0XG4iKSA9PSAwKQogCQltb2RlID0gUkVHVUxBVE9SX01PREVfRkFTVDsKLQllbHNlIGlmIChzdHJuY21wKGJ1ZiwgIm5vcm1hbCIsIHN0cmxlbigibm9ybWFsIikpID09IDApCisJZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAibm9ybWFsXG4iKSA9PSAwKQogCQltb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMOwotCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAiaWRsZSIsIHN0cmxlbigiaWRsZSIpKSA9PSAwKQorCWVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgImlkbGVcbiIpID09IDApCiAJCW1vZGUgPSBSRUdVTEFUT1JfTU9ERV9JRExFOwotCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAic3RhbmRieSIsIHN0cmxlbigic3RhbmRieSIpKSA9PSAwKQorCWVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgInN0YW5kYnlcbiIpID09IDApCiAJCW1vZGUgPSBSRUdVTEFUT1JfTU9ERV9TVEFOREJZOwogCWVsc2UgewogCQlkZXZfZXJyKGRldiwgIkNvbmZpZ3VyaW5nIGludmFsaWQgbW9kZVxuIik7CkBAIC0yNTYsNyArMjYwLDcgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihtYXhfbWljcm9hbXBzLCAwNjY2LCBzaG93X21heF91QSwgc2V0X21heF91QSk7CiBzdGF0aWMgREVWSUNFX0FUVFIobW9kZSwgMDY2Niwgc2hvd19tb2RlLCBzZXRfbW9kZSk7CiAKLXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyaWJ1dGVzW10gPSB7CitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHJpYnV0ZXNbXSA9IHsKIAkmZGV2X2F0dHJfbWluX21pY3Jvdm9sdHMsCiAJJmRldl9hdHRyX21heF9taWNyb3ZvbHRzLAogCSZkZXZfYXR0cl9taW5fbWljcm9hbXBzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCmluZGV4IDUwNTZlMjMuLjc3MWVjYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKQEAgLTI0LDYgKzI0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KIAorLyogTWF4aW11bSB2YWx1ZSBwb3NzaWJsZSBmb3IgVlNFTCAqLworI2RlZmluZSBXTTgzNTBfRENEQ19NQVhfVlNFTCAweDY2CisKIC8qIE1pY3JvYW1wcyAqLwogc3RhdGljIGNvbnN0IGludCBpc2lua19jdXJbXSA9IHsKIAk0LApAQCAtMzg1LDYgKzM4OCwxNCBAQAogCXJldHVybiB3bTgzNTBfZGNkY192YWxfdG9fbXZvbHRzKHZhbCkgKiAxMDAwOwogfQogCitzdGF0aWMgaW50IHdtODM1MF9kY2RjX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCQkgICAgdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaWYgKHNlbGVjdG9yID4gV004MzUwX0RDRENfTUFYX1ZTRUwpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiB3bTgzNTBfZGNkY192YWxfdG9fbXZvbHRzKHNlbGVjdG9yKSAqIDEwMDA7Cit9CisKIHN0YXRpYyBpbnQgd204MzUwX2RjZGNfc2V0X3N1c3BlbmRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IHVWKQogewogCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CkBAIC03NzUsNiArNzg2LDE0IEBACiAJcmV0dXJuIHdtODM1MF9sZG9fdmFsX3RvX212b2x0cyh2YWwpICogMTAwMDsKIH0KIAorc3RhdGljIGludCB3bTgzNTBfbGRvX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCQkgICAgdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaWYgKHNlbGVjdG9yID4gV004MzUwX0xETzFfVlNFTF9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gd204MzUwX2xkb192YWxfdG9fbXZvbHRzKHNlbGVjdG9yKSAqIDEwMDA7Cit9CisKIGludCB3bTgzNTBfZGNkY19zZXRfc2xvdChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBkY2RjLCB1MTYgc3RhcnQsCiAJCQkgdTE2IHN0b3AsIHUxNiBmYXVsdCkKIHsKQEAgLTEwMzEsMTggKzEwNTAsMzAgQEAKIAlpbnQgZGNkYyA9IHJkZXZfZ2V0X2lkKHJkZXYpOwogCXUxNiBtYXNrLCBzbGVlcCwgYWN0aXZlLCBmb3JjZTsKIAlpbnQgbW9kZSA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKKwlpbnQgcmVnOwogCi0JaWYgKGRjZGMgPCBXTTgzNTBfRENEQ18xIHx8IGRjZGMgPiBXTTgzNTBfRENEQ182KQorCXN3aXRjaCAoZGNkYykgeworCWNhc2UgV004MzUwX0RDRENfMToKKwkJcmVnID0gV004MzUwX0RDREMxX0ZPUkNFX1BXTTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfRENEQ18zOgorCQlyZWcgPSBXTTgzNTBfRENEQzNfRk9SQ0VfUFdNOworCQlicmVhazsKKwljYXNlIFdNODM1MF9EQ0RDXzQ6CisJCXJlZyA9IFdNODM1MF9EQ0RDNF9GT1JDRV9QV007CisJCWJyZWFrOworCWNhc2UgV004MzUwX0RDRENfNjoKKwkJcmVnID0gV004MzUwX0RDREM2X0ZPUkNFX1BXTTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZGNkYyA9PSBXTTgzNTBfRENEQ18yIHx8IGRjZGMgPT0gV004MzUwX0RDRENfNSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJbWFzayA9IDEgPDwgKGRjZGMgLSBXTTgzNTBfRENEQ18xKTsKIAlhY3RpdmUgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfRENEQ19BQ1RJVkVfT1BUSU9OUykgJiBtYXNrOworCWZvcmNlID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgcmVnKSAmIFdNODM1MF9EQ0RDMV9GT1JDRV9QV01fRU5BOwogCXNsZWVwID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDRENfU0xFRVBfT1BUSU9OUykgJiBtYXNrOwotCWZvcmNlID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RDREMxX0ZPUkNFX1BXTSkKLQkgICAgJiBXTTgzNTBfRENEQzFfRk9SQ0VfUFdNX0VOQTsKKwogCWRldl9kYmcod204MzUwLT5kZXYsICJtYXNrICV4IGFjdGl2ZSAleCBzbGVlcCAleCBmb3JjZSAleCIsCiAJCW1hc2ssIGFjdGl2ZSwgc2xlZXAsIGZvcmNlKTsKIApAQCAtMTE1MCw2ICsxMTgxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB3bTgzNTBfZGNkY19vcHMgPSB7CiAJLnNldF92b2x0YWdlID0gd204MzUwX2RjZGNfc2V0X3ZvbHRhZ2UsCiAJLmdldF92b2x0YWdlID0gd204MzUwX2RjZGNfZ2V0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZSA9IHdtODM1MF9kY2RjX2xpc3Rfdm9sdGFnZSwKIAkuZW5hYmxlID0gd204MzUwX2RjZGNfZW5hYmxlLAogCS5kaXNhYmxlID0gd204MzUwX2RjZGNfZGlzYWJsZSwKIAkuZ2V0X21vZGUgPSB3bTgzNTBfZGNkY19nZXRfbW9kZSwKQEAgLTExNzMsNiArMTIwNSw3IEBACiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgd204MzUwX2xkb19vcHMgPSB7CiAJLnNldF92b2x0YWdlID0gd204MzUwX2xkb19zZXRfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UgPSB3bTgzNTBfbGRvX2dldF92b2x0YWdlLAorCS5saXN0X3ZvbHRhZ2UgPSB3bTgzNTBfbGRvX2xpc3Rfdm9sdGFnZSwKIAkuZW5hYmxlID0gd204MzUwX2xkb19lbmFibGUsCiAJLmRpc2FibGUgPSB3bTgzNTBfbGRvX2Rpc2FibGUsCiAJLmlzX2VuYWJsZWQgPSB3bTgzNTBfbGRvX2lzX2VuYWJsZWQsCkBAIC0xMTk3LDYgKzEyMzAsNyBAQAogCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKIAkJLmlycSA9IFdNODM1MF9JUlFfVVZfREMxLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9EQ0RDX01BWF9WU0VMICsgMSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CkBAIC0xMjEzLDYgKzEyNDcsNyBAQAogCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKIAkJLmlycSA9IFdNODM1MF9JUlFfVVZfREMzLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9EQ0RDX01BWF9WU0VMICsgMSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CkBAIC0xMjIxLDYgKzEyNTYsNyBAQAogCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKIAkJLmlycSA9IFdNODM1MF9JUlFfVVZfREM0LAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9EQ0RDX01BWF9WU0VMICsgMSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CkBAIC0xMjM3LDYgKzEyNzMsNyBAQAogCQkub3BzID0gJndtODM1MF9kY2RjX29wcywKIAkJLmlycSA9IFdNODM1MF9JUlFfVVZfREM2LAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9EQ0RDX01BWF9WU0VMICsgMSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CkBAIC0xMjQ1LDYgKzEyODIsNyBAQAogCQkub3BzID0gJndtODM1MF9sZG9fb3BzLAogCQkuaXJxID0gV004MzUwX0lSUV9VVl9MRE8xLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9MRE8xX1ZTRUxfTUFTSyArIDEsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewpAQCAtMTI1Myw2ICsxMjkxLDcgQEAKIAkJLm9wcyA9ICZ3bTgzNTBfbGRvX29wcywKIAkJLmlycSA9IFdNODM1MF9JUlFfVVZfTERPMiwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm5fdm9sdGFnZXMgPSBXTTgzNTBfTERPMl9WU0VMX01BU0sgKyAxLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCXsKQEAgLTEyNjEsNiArMTMwMCw3IEBACiAJCS5vcHMgPSAmd204MzUwX2xkb19vcHMsCiAJCS5pcnEgPSBXTTgzNTBfSVJRX1VWX0xETzMsCiAJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5uX3ZvbHRhZ2VzID0gV004MzUwX0xETzNfVlNFTF9NQVNLICsgMSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAl7CkBAIC0xMjY5LDYgKzEzMDksNyBAQAogCQkub3BzID0gJndtODM1MF9sZG9fb3BzLAogCQkuaXJxID0gV004MzUwX0lSUV9VVl9MRE80LAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODM1MF9MRE80X1ZTRUxfTUFTSyArIDEsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJewpAQCAtMTI5Myw2ICsxMzM0LDcgQEAKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKWRhdGE7CiAKKwltdXRleF9sb2NrKCZyZGV2LT5tdXRleCk7CiAJaWYgKGlycSA9PSBXTTgzNTBfSVJRX0NTMSB8fCBpcnEgPT0gV004MzUwX0lSUV9DUzIpCiAJCXJlZ3VsYXRvcl9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsCiAJCQkJCSAgICAgIFJFR1VMQVRPUl9FVkVOVF9SRUdVTEFUSU9OX09VVCwKQEAgLTEzMDEsNiArMTM0Myw3IEBACiAJCXJlZ3VsYXRvcl9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsCiAJCQkJCSAgICAgIFJFR1VMQVRPUl9FVkVOVF9VTkRFUl9WT0xUQUdFLAogCQkJCQkgICAgICB3bTgzNTApOworCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IHdtODM1MF9yZWd1bGF0b3JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTEzMzMsOSArMTM3Niw5IEBACiAJCWJyZWFrOwogCX0KIAotCiAJLyogcmVnaXN0ZXIgcmVndWxhdG9yICovCiAJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3Rlcigmd204MzUwX3JlZ1twZGV2LT5pZF0sICZwZGV2LT5kZXYsCisJCQkJICBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwKIAkJCQkgIGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KSk7CiAJaWYgKElTX0VSUihyZGV2KSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci93bTg0MDAtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTg0MDAtcmVndWxhdG9yLmMKaW5kZXggNTZlMjNkNC4uMTU3NDI2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204NDAwLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODQwMC1yZWd1bGF0b3IuYwpAQCAtNDMsNiArNDMsMTggQEAKIAkJCSAgICAgICBXTTg0MDBfTERPMV9FTkEsIDApOwogfQogCitzdGF0aWMgaW50IHdtODQwMF9sZG9fbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYsCisJCQkJICAgdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaWYgKHNlbGVjdG9yID4gV004NDAwX0xETzFfVlNFTF9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzZWxlY3RvciA8IDE1KQorCQlyZXR1cm4gOTAwMDAwICsgKHNlbGVjdG9yICogNTAwMDApOworCWVsc2UKKwkJcmV0dXJuIDE2MDAwMDAgKyAoKHNlbGVjdG9yIC0gMTQpICogMTAwMDAwKTsKK30KKwogc3RhdGljIGludCB3bTg0MDBfbGRvX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHdtODQwMCAqd204NDAwID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtNTEsMTAgKzYzLDcgQEAKIAl2YWwgPSB3bTg0MDBfcmVnX3JlYWQod204NDAwLCBXTTg0MDBfTERPMV9DT05UUk9MICsgcmRldl9nZXRfaWQoZGV2KSk7CiAJdmFsICY9IFdNODQwMF9MRE8xX1ZTRUxfTUFTSzsKIAotCWlmICh2YWwgPCAxNSkKLQkJcmV0dXJuIDkwMDAwMCArICh2YWwgKiA1MDAwMCk7Ci0JZWxzZQotCQlyZXR1cm4gMTYwMDAwMCArICgodmFsIC0gMTQpICogMTAwMDAwKTsKKwlyZXR1cm4gd204NDAwX2xkb19saXN0X3ZvbHRhZ2UoZGV2LCB2YWwpOwogfQogCiBzdGF0aWMgaW50IHdtODQwMF9sZG9fc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKQEAgLTkyLDYgKzEwMSw3IEBACiAJLmlzX2VuYWJsZWQgPSB3bTg0MDBfbGRvX2lzX2VuYWJsZWQsCiAJLmVuYWJsZSA9IHdtODQwMF9sZG9fZW5hYmxlLAogCS5kaXNhYmxlID0gd204NDAwX2xkb19kaXNhYmxlLAorCS5saXN0X3ZvbHRhZ2UgPSB3bTg0MDBfbGRvX2xpc3Rfdm9sdGFnZSwKIAkuZ2V0X3ZvbHRhZ2UgPSB3bTg0MDBfbGRvX2dldF92b2x0YWdlLAogCS5zZXRfdm9sdGFnZSA9IHdtODQwMF9sZG9fc2V0X3ZvbHRhZ2UsCiB9OwpAQCAtMTI0LDYgKzEzNCwxNSBAQAogCQkJICAgICAgIFdNODQwMF9EQzFfRU5BLCAwKTsKIH0KIAorc3RhdGljIGludCB3bTg0MDBfZGNkY19saXN0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldiwKKwkJCQkgICAgdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaWYgKHNlbGVjdG9yID4gV004NDAwX0RDMV9WU0VMX01BU0spCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDg1MDAwMCArIChzZWxlY3RvciAqIDI1MDAwKTsKK30KKwogc3RhdGljIGludCB3bTg0MDBfZGNkY19nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQogewogCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IHJkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTIzNyw2ICsyNTYsNyBAQAogCS5pc19lbmFibGVkID0gd204NDAwX2RjZGNfaXNfZW5hYmxlZCwKIAkuZW5hYmxlID0gd204NDAwX2RjZGNfZW5hYmxlLAogCS5kaXNhYmxlID0gd204NDAwX2RjZGNfZGlzYWJsZSwKKwkubGlzdF92b2x0YWdlID0gd204NDAwX2RjZGNfbGlzdF92b2x0YWdlLAogCS5nZXRfdm9sdGFnZSA9IHdtODQwMF9kY2RjX2dldF92b2x0YWdlLAogCS5zZXRfdm9sdGFnZSA9IHdtODQwMF9kY2RjX3NldF92b2x0YWdlLAogCS5nZXRfbW9kZSA9IHdtODQwMF9kY2RjX2dldF9tb2RlLApAQCAtMjQ5LDYgKzI2OSw3IEBACiAJCS5uYW1lID0gIkxETzEiLAogCQkuaWQgPSBXTTg0MDBfTERPMSwKIAkJLm9wcyA9ICZ3bTg0MDBfbGRvX29wcywKKwkJLm5fdm9sdGFnZXMgPSBXTTg0MDBfTERPMV9WU0VMX01BU0sgKyAxLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LApAQCAtMjU2LDYgKzI3Nyw3IEBACiAJCS5uYW1lID0gIkxETzIiLAogCQkuaWQgPSBXTTg0MDBfTERPMiwKIAkJLm9wcyA9ICZ3bTg0MDBfbGRvX29wcywKKwkJLm5fdm9sdGFnZXMgPSBXTTg0MDBfTERPMl9WU0VMX01BU0sgKyAxLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LApAQCAtMjYzLDYgKzI4NSw3IEBACiAJCS5uYW1lID0gIkxETzMiLAogCQkuaWQgPSBXTTg0MDBfTERPMywKIAkJLm9wcyA9ICZ3bTg0MDBfbGRvX29wcywKKwkJLm5fdm9sdGFnZXMgPSBXTTg0MDBfTERPM19WU0VMX01BU0sgKyAxLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LApAQCAtMjcwLDYgKzI5Myw3IEBACiAJCS5uYW1lID0gIkxETzQiLAogCQkuaWQgPSBXTTg0MDBfTERPNCwKIAkJLm9wcyA9ICZ3bTg0MDBfbGRvX29wcywKKwkJLm5fdm9sdGFnZXMgPSBXTTg0MDBfTERPNF9WU0VMX01BU0sgKyAxLAogCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LApAQCAtMjc3LDYgKzMwMSw3IEBACiAJCS5uYW1lID0gIkRDREMxIiwKIAkJLmlkID0gV004NDAwX0RDREMxLAogCQkub3BzID0gJndtODQwMF9kY2RjX29wcywKKwkJLm5fdm9sdGFnZXMgPSBXTTg0MDBfREMxX1ZTRUxfTUFTSyArIDEsCiAJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCkBAIC0yODQsNiArMzA5LDcgQEAKIAkJLm5hbWUgPSAiRENEQzIiLAogCQkuaWQgPSBXTTg0MDBfRENEQzIsCiAJCS5vcHMgPSAmd204NDAwX2RjZGNfb3BzLAorCQkubl92b2x0YWdlcyA9IFdNODQwMF9EQzJfVlNFTF9NQVNLICsgMSwKIAkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKQEAgLTI5NCw3ICszMjAsNyBAQAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwogCiAJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmVndWxhdG9yc1twZGV2LT5pZF0sICZwZGV2LT5kZXYsCi0JCXBkZXYtPmRldi5kcml2ZXJfZGF0YSk7CisJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhLCBwZGV2LT5kZXYuZHJpdmVyX2RhdGEpOwogCiAJaWYgKElTX0VSUihyZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCA4MTQ1MGZiLi5mZmUzNGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTEyOSwxMyArMTI5LDE0IEBACiBpZiBJMkMKIAogY29uZmlnIFJUQ19EUlZfRFMxMzA3Ci0JdHJpc3RhdGUgIkRhbGxhcy9NYXhpbSBEUzEzMDcvMzcvMzgvMzkvNDAsIFNUIE00MVQwMCIKKwl0cmlzdGF0ZSAiRGFsbGFzL01heGltIERTMTMwNy8zNy8zOC8zOS80MCwgU1QgTTQxVDAwLCBFUFNPTiBSWC04MDI1IgogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB2YXJpb3VzIGNvbXBhdGlibGUgUlRDCiAJICBjaGlwcyAob2Z0ZW4gd2l0aCBiYXR0ZXJ5IGJhY2t1cCkgY29ubmVjdGVkIHdpdGggSTJDLiBUaGlzIGRyaXZlcgogCSAgc2hvdWxkIGhhbmRsZSBEUzEzMDcsIERTMTMzNywgRFMxMzM4LCBEUzEzMzksIERTMTM0MCwgU1QgTTQxVDAwLAotCSAgYW5kIHByb2JhYmx5IG90aGVyIGNoaXBzLiBJbiBzb21lIGNhc2VzIHRoZSBSVEMgbXVzdCBhbHJlYWR5Ci0JICBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgKGJ5IG1hbnVmYWN0dXJpbmcgb3IgYSBib290bG9hZGVyKS4KKwkgIEVQU09OIFJYLTgwMjUgYW5kIHByb2JhYmx5IG90aGVyIGNoaXBzLiBJbiBzb21lIGNhc2VzIHRoZSBSVEMKKwkgIG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgKGJ5IG1hbnVmYWN0dXJpbmcgb3IgYQorCSAgYm9vdGxvYWRlcikuCiAKIAkgIFRoZSBmaXJzdCBzZXZlbiByZWdpc3RlcnMgb24gdGhlc2UgY2hpcHMgaG9sZCBhbiBSVEMsIGFuZCBvdGhlcgogCSAgcmVnaXN0ZXJzIG1heSBhZGQgZmVhdHVyZXMgc3VjaCBhcyBOVlJBTSwgYSB0cmlja2xlIGNoYXJnZXIgZm9yCkBAIC0yMjQsMTEgKzIyNSwxMSBAQAogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXBjZjg1ODMuCiAKIGNvbmZpZyBSVENfRFJWX000MVQ4MAotCXRyaXN0YXRlICJTVCBNNDFUNjUvTTQxVDgwLzgxLzgyLzgzLzg0Lzg1Lzg3IgorCXRyaXN0YXRlICJTVCBNNDFUNjIvNjUvTTQxVDgwLzgxLzgyLzgzLzg0Lzg1Lzg3IgogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUgU1QgTTQxVDYwCiAJICBhbmQgTTQxVDgwIFJUQyBjaGlwcyBzZXJpZXMuIEN1cnJlbnRseSwgdGhlIGZvbGxvd2luZyBjaGlwcyBhcmUKLQkgIHN1cHBvcnRlZDogTTQxVDY1LCBNNDFUODAsIE00MVQ4MSwgTTQxVDgyLCBNNDFUODMsIE00MVNUODQsCisJICBzdXBwb3J0ZWQ6IE00MVQ2MiwgTTQxVDY1LCBNNDFUODAsIE00MVQ4MSwgTTQxVDgyLCBNNDFUODMsIE00MVNUODQsCiAJICBNNDFTVDg1LCBhbmQgTTQxU1Q4Ny4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCkBAIC00NDAsNiArNDQxLDE2IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kczE3NDIuCiAKK2NvbmZpZyBSVENfRFJWX0VGSQorCXRyaXN0YXRlICJFRkkgUlRDIgorCWRlcGVuZHMgb24gSUE2NAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRoZSBFRkkKKwkgIFJlYWwgVGltZSBDbG9jay4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtZWZpLgorCiBjb25maWcgUlRDX0RSVl9TVEsxN1RBOAogCXRyaXN0YXRlICJTaW10ZWsgU1RLMTdUQTgiCiAJZGVwZW5kcyBvbiBSVENfQ0xBU1MKQEAgLTY3NywyMiArNjg4LDE2IEBACiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBSaWNvaCBSUzVDMzEzIFJUQyBjaGlwcy4KIAotY29uZmlnIFJUQ19EUlZfUEFSSVNDCi0JdHJpc3RhdGUgIlBBLVJJU0MgZmlybXdhcmUgUlRDIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQVJJU0MKK2NvbmZpZyBSVENfRFJWX0dFTkVSSUMKKwl0cmlzdGF0ZSAiR2VuZXJpYyBSVEMgc3VwcG9ydCIKKwkjIFBsZWFzZSBjb25zaWRlciB3cml0aW5nIGEgbmV3IFJUQyBkcml2ZXIgaW5zdGVhZCBvZiB1c2luZyB0aGUgZ2VuZXJpYworCSMgUlRDIGFic3RyYWN0aW9uCisJZGVwZW5kcyBvbiBQQVJJU0MgfHwgTTY4SyB8fCBQUEMKIAloZWxwCi0JICBTYXkgWSBvciBNIGhlcmUgdG8gZW5hYmxlIFJUQyBzdXBwb3J0IG9uIFBBLVJJU0Mgc3lzdGVtcyB1c2luZwotCSAgZmlybXdhcmUgY2FsbHMuIElmIHlvdSBkbyBub3Qga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcsIHlvdSBzaG91bGQKKwkgIFNheSBZIG9yIE0gaGVyZSB0byBlbmFibGUgUlRDIHN1cHBvcnQgb24gc3lzdGVtcyB1c2luZyB0aGUgZ2VuZXJpYworCSAgUlRDIGFic3RyYWN0aW9uLiBJZiB5b3UgZG8gbm90IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLCB5b3Ugc2hvdWxkCiAJICBqdXN0IHNheSBZLgogCi1jb25maWcgUlRDX0RSVl9QUEMKLSAgICAgICB0cmlzdGF0ZSAiUG93ZXJQQyBtYWNoaW5lIGRlcGVuZGVudCBSVEMgc3VwcG9ydCIKLSAgICAgICBkZXBlbmRzIG9uIFBQQwotICAgICAgIGhlbHAKLQkgVGhlIFBvd2VyUEMga2VybmVsIGhhcyBtYWNoaW5lLXNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgYWNjZXNzaW5nCi0JIHRoZSBSVEMuIFRoaXMgZXhwb3NlcyB0aGF0IGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCB0aGUgZ2VuZXJpYyBSVEMKLQkgY2xhc3MuCi0KIGNvbmZpZyBSVENfRFJWX1BYQQogICAgICAgIHRyaXN0YXRlICJQWEEyN3gvUFhBM3h4IgogICAgICAgIGRlcGVuZHMgb24gQVJDSF9QWEEKQEAgLTczNiw0ICs3NDEsMTMgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLW12LgogCitjb25maWcgUlRDX0RSVl9QUzMKKwl0cmlzdGF0ZSAiUFMzIFJUQyIKKwlkZXBlbmRzIG9uIFBQQ19QUzMKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSB3aWxsIGdldCBzdXBwb3J0IGZvciB0aGUgUlRDIG9uIFBTMy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtcHMzLgorCiBlbmRpZiAjIFJUQ19DTEFTUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvTWFrZWZpbGUgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQppbmRleCAwZTY5N2FhLi42YzA2MzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQpAQCAtMzYsNiArMzYsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfRFMxNjcyKQkrPSBydGMtZHMxNjcyLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0RTMTc0MikJKz0gcnRjLWRzMTc0Mi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9EUzMyMzQpCSs9IHJ0Yy1kczMyMzQubworb2JqLSQoQ09ORklHX1JUQ19EUlZfRUZJKQkrPSBydGMtZWZpLm8KIG9iai0kKENPTkZJR19SVENfRFJWX0VQOTNYWCkJKz0gcnRjLWVwOTN4eC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9GTTMxMzApCSs9IHJ0Yy1mbTMxMzAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfSVNMMTIwOCkJKz0gcnRjLWlzbDEyMDgubwpAQCAtNTUsOCArNTYsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfUENGODU4MykJKz0gcnRjLXBjZjg1ODMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUEwwMzApCSs9IHJ0Yy1wbDAzMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QTDAzMSkJKz0gcnRjLXBsMDMxLm8KLW9iai0kKENPTkZJR19SVENfRFJWX1BBUklTQykJKz0gcnRjLXBhcmlzYy5vCi1vYmotJChDT05GSUdfUlRDX0RSVl9QUEMpCSs9IHJ0Yy1wcGMubworb2JqLSQoQ09ORklHX1JUQ19EUlZfR0VORVJJQykJKz0gcnRjLWdlbmVyaWMubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUFhBKQkrPSBydGMtcHhhLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1I5NzAxKQkrPSBydGMtcjk3MDEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUlM1QzMxMykJKz0gcnRjLXJzNWMzMTMubwpAQCAtNzYsMyArNzYsNCBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfV004MzUwKQkrPSBydGMtd204MzUwLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1gxMjA1KQkrPSBydGMteDEyMDUubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUENGNTA2MzMpCSs9IHJ0Yy1wY2Y1MDYzMy5vCitvYmotJChDT05GSUdfUlRDX0RSVl9QUzMpCSs9IHJ0Yy1wczMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCmluZGV4IDdlNTE1NWUuLjJjNGE2NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKQEAgLTMsNiArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBKYW1lcyBDaGFwbWFuIChkczEzMzcgY29yZSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgRGF2aWQgQnJvd25lbGwKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTWF0dGhpYXMgRnVjaHMgKHJ4ODAyNSBzdXBwb3J0KQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMzEsNiArMzIsNyBAQAogCWRzXzEzMzksCiAJZHNfMTM0MCwKIAltNDF0MDAsCisJcnhfODAyNSwKIAkvLyByczVjMzcyIHRvbz8gIGRpZmZlcmVudCBhZGRyZXNzLi4uCiB9OwogCkBAIC04Myw2ICs4NSwxMiBAQAogI2RlZmluZSBEUzEzMzlfUkVHX0FMQVJNMV9TRUNTCTB4MDcKICNkZWZpbmUgRFMxMzM5X1JFR19UUklDS0xFCTB4MTAKIAorI2RlZmluZSBSWDgwMjVfUkVHX0NUUkwxCTB4MGUKKyMJZGVmaW5lIFJYODAyNV9CSVRfMjQxMgkJMHgyMAorI2RlZmluZSBSWDgwMjVfUkVHX0NUUkwyCTB4MGYKKyMJZGVmaW5lIFJYODAyNV9CSVRfUE9OCQkweDEwCisjCWRlZmluZSBSWDgwMjVfQklUX1ZERVQJCTB4NDAKKyMJZGVmaW5lIFJYODAyNV9CSVRfWFNUCQkweDIwCiAKIAogc3RydWN0IGRzMTMwNyB7CkBAIC05NCw2ICsxMDIsMTAgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50OwogCXN0cnVjdCBydGNfZGV2aWNlCSpydGM7CiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CisJczMyICgqcmVhZF9ibG9ja19kYXRhKShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLAorCQkJICAgICAgIHU4IGxlbmd0aCwgdTggKnZhbHVlcyk7CisJczMyICgqd3JpdGVfYmxvY2tfZGF0YSkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKKwkJCQl1OCBsZW5ndGgsIGNvbnN0IHU4ICp2YWx1ZXMpOwogfTsKIAogc3RydWN0IGNoaXBfZGVzYyB7CkBAIC0xMTcsNiArMTI5LDggQEAKIFtkc18xMzQwXSA9IHsKIH0sCiBbbTQxdDAwXSA9IHsKK30sCitbcnhfODAyNV0gPSB7CiB9LCB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZHMxMzA3X2lkW10gPSB7CkBAIC0xMjYsMTIgKzE0MCw4NiBAQAogCXsgImRzMTMzOSIsIGRzXzEzMzkgfSwKIAl7ICJkczEzNDAiLCBkc18xMzQwIH0sCiAJeyAibTQxdDAwIiwgbTQxdDAwIH0sCisJeyAicng4MDI1IiwgcnhfODAyNSB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBkczEzMDdfaWQpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjZGVmaW5lIEJMT0NLX0RBVEFfTUFYX1RSSUVTIDEwCisKK3N0YXRpYyBzMzIgZHMxMzA3X3JlYWRfYmxvY2tfZGF0YV9vbmNlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IGNvbW1hbmQsCisJCQkJICB1OCBsZW5ndGgsIHU4ICp2YWx1ZXMpCit7CisJczMyIGksIGRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJZGF0YSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQgKyBpKTsKKwkJaWYgKGRhdGEgPCAwKQorCQkJcmV0dXJuIGRhdGE7CisJCXZhbHVlc1tpXSA9IGRhdGE7CisJfQorCXJldHVybiBpOworfQorCitzdGF0aWMgczMyIGRzMTMwN19yZWFkX2Jsb2NrX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggY29tbWFuZCwKKwkJCQkgIHU4IGxlbmd0aCwgdTggKnZhbHVlcykKK3sKKwl1OCBvbGR2YWx1ZXNbSTJDX1NNQlVTX0JMT0NLX01BWF07CisJczMyIHJldDsKKwlpbnQgdHJpZXMgPSAwOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJkczEzMDdfcmVhZF9ibG9ja19kYXRhIChsZW5ndGg9JWQpXG4iLCBsZW5ndGgpOworCXJldCA9IGRzMTMwN19yZWFkX2Jsb2NrX2RhdGFfb25jZShjbGllbnQsIGNvbW1hbmQsIGxlbmd0aCwgdmFsdWVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkbyB7CisJCWlmICgrK3RyaWVzID4gQkxPQ0tfREFUQV9NQVhfVFJJRVMpIHsKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJCSJkczEzMDdfcmVhZF9ibG9ja19kYXRhIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQltZW1jcHkob2xkdmFsdWVzLCB2YWx1ZXMsIGxlbmd0aCk7CisJCXJldCA9IGRzMTMwN19yZWFkX2Jsb2NrX2RhdGFfb25jZShjbGllbnQsIGNvbW1hbmQsIGxlbmd0aCwKKwkJCQkJCSAgdmFsdWVzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0gd2hpbGUgKG1lbWNtcChvbGR2YWx1ZXMsIHZhbHVlcywgbGVuZ3RoKSk7CisJcmV0dXJuIGxlbmd0aDsKK30KKworc3RhdGljIHMzMiBkczEzMDdfd3JpdGVfYmxvY2tfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLAorCQkJCSAgIHU4IGxlbmd0aCwgY29uc3QgdTggKnZhbHVlcykKK3sKKwl1OCBjdXJydmFsdWVzW0kyQ19TTUJVU19CTE9DS19NQVhdOworCWludCB0cmllcyA9IDA7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImRzMTMwN193cml0ZV9ibG9ja19kYXRhIChsZW5ndGg9JWQpXG4iLCBsZW5ndGgpOworCWRvIHsKKwkJczMyIGksIHJldDsKKworCQlpZiAoKyt0cmllcyA+IEJMT0NLX0RBVEFfTUFYX1RSSUVTKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkiZHMxMzA3X3dyaXRlX2Jsb2NrX2RhdGEgZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQgKyBpLAorCQkJCQkJCXZhbHVlc1tpXSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCXJldCA9IGRzMTMwN19yZWFkX2Jsb2NrX2RhdGFfb25jZShjbGllbnQsIGNvbW1hbmQsIGxlbmd0aCwKKwkJCQkJCSAgY3VycnZhbHVlcyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9IHdoaWxlIChtZW1jbXAoY3VycnZhbHVlcywgdmFsdWVzLCBsZW5ndGgpKTsKKwlyZXR1cm4gbGVuZ3RoOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKgogICogVGhlIElSUSBsb2dpYyBpbmNsdWRlcyBhICJyZWFsIiBoYW5kbGVyIHJ1bm5pbmcgaW4gSVJRIGNvbnRleHQganVzdAogICogbG9uZyBlbm91Z2ggdG8gc2NoZWR1bGUgdGhpcyB3b3JrcXVldWUgZW50cnkuICAgV2UgbmVlZCBhIHRhc2sgY29udGV4dApAQCAtMjAyLDcgKzI5MCw3IEBACiAJaW50CQl0bXA7CiAKIAkvKiByZWFkIHRoZSBSVEMgZGF0ZSBhbmQgdGltZSByZWdpc3RlcnMgYWxsIGF0IG9uY2UgKi8KLQl0bXAgPSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YShkczEzMDctPmNsaWVudCwKKwl0bXAgPSBkczEzMDctPnJlYWRfYmxvY2tfZGF0YShkczEzMDctPmNsaWVudCwKIAkJRFMxMzA3X1JFR19TRUNTLCA3LCBkczEzMDctPnJlZ3MpOwogCWlmICh0bXAgIT0gNykgewogCQlkZXZfZXJyKGRldiwgIiVzIGVycm9yICVkXG4iLCAicmVhZCIsIHRtcCk7CkBAIC0yNzksNyArMzY3LDcgQEAKIAkJIndyaXRlIiwgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLAogCQlidWZbNF0sIGJ1Zls1XSwgYnVmWzZdKTsKIAotCXJlc3VsdCA9IGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShkczEzMDctPmNsaWVudCwgMCwgNywgYnVmKTsKKwlyZXN1bHQgPSBkczEzMDctPndyaXRlX2Jsb2NrX2RhdGEoZHMxMzA3LT5jbGllbnQsIDAsIDcsIGJ1Zik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJZGV2X2VycihkZXYsICIlcyBlcnJvciAlZFxuIiwgIndyaXRlIiwgcmVzdWx0KTsKIAkJcmV0dXJuIHJlc3VsdDsKQEAgLTI5Nyw3ICszODUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHJlYWQgYWxsIEFMQVJNMSwgQUxBUk0yLCBhbmQgc3RhdHVzIHJlZ2lzdGVycyBhdCBvbmNlICovCi0JcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LAorCXJldCA9IGRzMTMwNy0+cmVhZF9ibG9ja19kYXRhKGNsaWVudCwKIAkJCURTMTMzOV9SRUdfQUxBUk0xX1NFQ1MsIDksIGRzMTMwNy0+cmVncyk7CiAJaWYgKHJldCAhPSA5KSB7CiAJCWRldl9lcnIoZGV2LCAiJXMgZXJyb3IgJWRcbiIsICJhbGFybSByZWFkIiwgcmV0KTsKQEAgLTM1Niw3ICs0NDQsNyBAQAogCQl0LT5lbmFibGVkLCB0LT5wZW5kaW5nKTsKIAogCS8qIHJlYWQgY3VycmVudCBzdGF0dXMgb2YgYm90aCBhbGFybXMgYW5kIHRoZSBjaGlwICovCi0JcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LAorCXJldCA9IGRzMTMwNy0+cmVhZF9ibG9ja19kYXRhKGNsaWVudCwKIAkJCURTMTMzOV9SRUdfQUxBUk0xX1NFQ1MsIDksIGJ1Zik7CiAJaWYgKHJldCAhPSA5KSB7CiAJCWRldl9lcnIoZGV2LCAiJXMgZXJyb3IgJWRcbiIsICJhbGFybSB3cml0ZSIsIHJldCk7CkBAIC0zOTEsNyArNDc5LDcgQEAKIAl9CiAJYnVmWzhdID0gc3RhdHVzICYgfihEUzEzMzdfQklUX0ExSSB8IERTMTMzN19CSVRfQTJJKTsKIAotCXJldCA9IGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjbGllbnQsCisJcmV0ID0gZHMxMzA3LT53cml0ZV9ibG9ja19kYXRhKGNsaWVudCwKIAkJCURTMTMzOV9SRUdfQUxBUk0xX1NFQ1MsIDksIGJ1Zik7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihkZXYsICJjYW4ndCBzZXQgYWxhcm0gdGltZVxuIik7CkBAIC00NzksNyArNTY3LDcgQEAKIAlpZiAodW5saWtlbHkoIWNvdW50KSkKIAkJcmV0dXJuIGNvdW50OwogCi0JcmVzdWx0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCA4ICsgb2ZmLCBjb3VudCwgYnVmKTsKKwlyZXN1bHQgPSBkczEzMDctPnJlYWRfYmxvY2tfZGF0YShjbGllbnQsIDggKyBvZmYsIGNvdW50LCBidWYpOwogCWlmIChyZXN1bHQgPCAwKQogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzIGVycm9yICVkXG4iLCAibnZyYW0gcmVhZCIsIHJlc3VsdCk7CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTQ5MCw5ICs1NzgsMTEgQEAKIAkJY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKKwlzdHJ1Y3QgZHMxMzA3CQkqZHMxMzA3OwogCWludAkJCXJlc3VsdDsKIAogCWNsaWVudCA9IGtvYmpfdG9faTJjX2NsaWVudChrb2JqKTsKKwlkczEzMDcgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCWlmICh1bmxpa2VseShvZmYgPj0gTlZSQU1fU0laRSkpCiAJCXJldHVybiAtRUZCSUc7CkBAIC01MDEsNyArNTkxLDcgQEAKIAlpZiAodW5saWtlbHkoIWNvdW50KSkKIAkJcmV0dXJuIGNvdW50OwogCi0JcmVzdWx0ID0gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgOCArIG9mZiwgY291bnQsIGJ1Zik7CisJcmVzdWx0ID0gZHMxMzA3LT53cml0ZV9ibG9ja19kYXRhKGNsaWVudCwgOCArIG9mZiwgY291bnQsIGJ1Zik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICIlcyBlcnJvciAlZFxuIiwgIm52cmFtIHdyaXRlIiwgcmVzdWx0KTsKIAkJcmV0dXJuIHJlc3VsdDsKQEAgLTUzNSw5ICs2MjUsOCBAQAogCWludAkJCXdhbnRfaXJxID0gZmFsc2U7CiAJdW5zaWduZWQgY2hhcgkJKmJ1ZjsKIAotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwKLQkJCUkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSB8Ci0JCQlJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0spKQorCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKQorCSAgICAmJiAhaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAoIShkczEzMDcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHMxMzA3KSwgR0ZQX0tFUk5FTCkpKQpAQCAtNTQ3LDYgKzYzNiwxMyBAQAogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRzMTMwNyk7CiAJZHMxMzA3LT50eXBlID0gaWQtPmRyaXZlcl9kYXRhOwogCWJ1ZiA9IGRzMTMwNy0+cmVnczsKKwlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLKSkgeworCQlkczEzMDctPnJlYWRfYmxvY2tfZGF0YSA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhOworCQlkczEzMDctPndyaXRlX2Jsb2NrX2RhdGEgPSBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGE7CisJfSBlbHNlIHsKKwkJZHMxMzA3LT5yZWFkX2Jsb2NrX2RhdGEgPSBkczEzMDdfcmVhZF9ibG9ja19kYXRhOworCQlkczEzMDctPndyaXRlX2Jsb2NrX2RhdGEgPSBkczEzMDdfd3JpdGVfYmxvY2tfZGF0YTsKKwl9CiAKIAlzd2l0Y2ggKGRzMTMwNy0+dHlwZSkgewogCWNhc2UgZHNfMTMzNzoKQEAgLTU1Nyw3ICs2NTMsNyBAQAogCQkJd2FudF9pcnEgPSB0cnVlOwogCQl9CiAJCS8qIGdldCByZWdpc3RlcnMgdGhhdCB0aGUgInJ0YyIgcmVhZCBiZWxvdyB3b24ndCByZWFkLi4uICovCi0JCXRtcCA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGRzMTMwNy0+Y2xpZW50LAorCQl0bXAgPSBkczEzMDctPnJlYWRfYmxvY2tfZGF0YShkczEzMDctPmNsaWVudCwKIAkJCQlEUzEzMzdfUkVHX0NPTlRST0wsIDIsIGJ1Zik7CiAJCWlmICh0bXAgIT0gMikgewogCQkJcHJfZGVidWcoInJlYWQgZXJyb3IgJWRcbiIsIHRtcCk7CkBAIC01ODksMTMgKzY4NSw3OSBAQAogCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiU0VUIFRJTUUhXG4iKTsKIAkJfQogCQlicmVhazsKKworCWNhc2UgcnhfODAyNToKKwkJdG1wID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoZHMxMzA3LT5jbGllbnQsCisJCQkJUlg4MDI1X1JFR19DVFJMMSA8PCA0IHwgMHgwOCwgMiwgYnVmKTsKKwkJaWYgKHRtcCAhPSAyKSB7CisJCQlwcl9kZWJ1ZygicmVhZCBlcnJvciAlZFxuIiwgdG1wKTsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGV4aXRfZnJlZTsKKwkJfQorCisJCS8qIG9zY2lsbGF0b3Igb2ZmPyAgdHVybiBpdCBvbiwgc28gY2xvY2sgY2FuIHRpY2suICovCisJCWlmICghKGRzMTMwNy0+cmVnc1sxXSAmIFJYODAyNV9CSVRfWFNUKSkgeworCQkJZHMxMzA3LT5yZWdzWzFdIHw9IFJYODAyNV9CSVRfWFNUOworCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkgIFJYODAyNV9SRUdfQ1RSTDIgPDwgNCB8IDB4MDgsCisJCQkJCQkgIGRzMTMwNy0+cmVnc1sxXSk7CisJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCisJCQkJICJvc2NpbGxhdG9yIHN0b3AgZGV0ZWN0ZWQgLSBTRVQgVElNRSFcbiIpOworCQl9CisKKwkJaWYgKGRzMTMwNy0+cmVnc1sxXSAmIFJYODAyNV9CSVRfUE9OKSB7CisJCQlkczEzMDctPnJlZ3NbMV0gJj0gflJYODAyNV9CSVRfUE9OOworCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQkgIFJYODAyNV9SRUdfQ1RSTDIgPDwgNCB8IDB4MDgsCisJCQkJCQkgIGRzMTMwNy0+cmVnc1sxXSk7CisJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJwb3dlci1vbiBkZXRlY3RlZFxuIik7CisJCX0KKworCQlpZiAoZHMxMzA3LT5yZWdzWzFdICYgUlg4MDI1X0JJVF9WREVUKSB7CisJCQlkczEzMDctPnJlZ3NbMV0gJj0gflJYODAyNV9CSVRfVkRFVDsKKwkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAorCQkJCQkJICBSWDgwMjVfUkVHX0NUUkwyIDw8IDQgfCAweDA4LAorCQkJCQkJICBkczEzMDctPnJlZ3NbMV0pOworCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAidm9sdGFnZSBkcm9wIGRldGVjdGVkXG4iKTsKKwkJfQorCisJCS8qIG1ha2Ugc3VyZSB3ZSBhcmUgcnVubmluZyBpbiAyNGhvdXIgbW9kZSAqLworCQlpZiAoIShkczEzMDctPnJlZ3NbMF0gJiBSWDgwMjVfQklUXzI0MTIpKSB7CisJCQl1OCBob3VyOworCisJCQkvKiBzd2l0Y2ggdG8gMjQgaG91ciBtb2RlICovCisJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCSAgUlg4MDI1X1JFR19DVFJMMSA8PCA0IHwgMHgwOCwKKwkJCQkJCSAgZHMxMzA3LT5yZWdzWzBdIHwKKwkJCQkJCSAgUlg4MDI1X0JJVF8yNDEyKTsKKworCQkJdG1wID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoZHMxMzA3LT5jbGllbnQsCisJCQkJCVJYODAyNV9SRUdfQ1RSTDEgPDwgNCB8IDB4MDgsIDIsIGJ1Zik7CisJCQlpZiAodG1wICE9IDIpIHsKKwkJCQlwcl9kZWJ1ZygicmVhZCBlcnJvciAlZFxuIiwgdG1wKTsKKwkJCQllcnIgPSAtRUlPOworCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJfQorCisJCQkvKiBjb3JyZWN0IGhvdXIgKi8KKwkJCWhvdXIgPSBiY2QyYmluKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX0hPVVJdKTsKKwkJCWlmIChob3VyID09IDEyKQorCQkJCWhvdXIgPSAwOworCQkJaWYgKGRzMTMwNy0+cmVnc1tEUzEzMDdfUkVHX0hPVVJdICYgRFMxMzA3X0JJVF9QTSkKKwkJCQlob3VyICs9IDEyOworCisJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCSAgRFMxMzA3X1JFR19IT1VSIDw8IDQgfCAweDA4LAorCQkJCQkJICBob3VyKTsKKwkJfQorCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKIHJlYWRfcnRjOgogCS8qIHJlYWQgUlRDIHJlZ2lzdGVycyAqLwotCXRtcCA9IGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGRzMTMwNy0+Y2xpZW50LCAwLCA4LCBidWYpOworCXRtcCA9IGRzMTMwNy0+cmVhZF9ibG9ja19kYXRhKGRzMTMwNy0+Y2xpZW50LCAwLCA4LCBidWYpOwogCWlmICh0bXAgIT0gOCkgewogCQlwcl9kZWJ1ZygicmVhZCBlcnJvciAlZFxuIiwgdG1wKTsKIAkJZXJyID0gLUVJTzsKQEAgLTY0OSw2ICs4MTEsNyBAQAogCQkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiU0VUIFRJTUUhXG4iKTsKIAkJfQogCQlicmVhazsKKwljYXNlIHJ4XzgwMjU6CiAJY2FzZSBkc18xMzM3OgogCWNhc2UgZHNfMTMzOToKIAkJYnJlYWs7CkBAIC02NjIsNiArODI1LDggQEAKIAkJICogc3lzdGVtcyB0aGF0IHdpbGwgcnVuIHRocm91Z2ggeWVhciAyMTAwLgogCQkgKi8KIAkJYnJlYWs7CisJY2FzZSByeF84MDI1OgorCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoISh0bXAgJiBEUzEzMDdfQklUXzEySFIpKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKaW5kZXggYTViMGZjMC4uNGQzMmUzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYwpAQCAtMjIyLDE2ICsyMjIsMTYgQEAKIAlydGNfdG1fdG9fdGltZSgmYWxhcm0tPnRpbWUsICZuZXdfYWxhcm0pOwogCXJ0Y190bV90b190aW1lKCZub3csICZpdGltZSk7CiAKLQluZXdfYWxhcm0gLT0gaXRpbWU7Ci0KIAkvKiBUaGlzIGNhbiBoYXBwZW4gZHVlIHRvIHJhY2VzLCBpbiBhZGRpdGlvbiB0byBkYXRlcyB0aGF0IGFyZQogCSAqIHRydWx5IGluIHRoZSBwYXN0LiAgVG8gYXZvaWQgcmVxdWlyaW5nIHRoZSBjYWxsZXIgdG8gY2hlY2sgZm9yCiAJICogcmFjZXMsIGRhdGVzIGluIHRoZSBwYXN0IGFyZSBhc3N1bWVkIHRvIGJlIGluIHRoZSByZWNlbnQgcGFzdAogCSAqIChpLmUuIG5vdCBzb21ldGhpbmcgdGhhdCB3ZSdkIHJhdGhlciB0aGUgY2FsbGVyIGtub3cgYWJvdXQgdmlhCiAJICogYW4gZXJyb3IpLCBhbmQgdGhlIGFsYXJtIGlzIHNldCB0byBnbyBvZmYgYXMgc29vbiBhcyBwb3NzaWJsZS4KIAkgKi8KLQlpZiAobmV3X2FsYXJtIDw9IDApCisJaWYgKHRpbWVfYmVmb3JlX2VxKG5ld19hbGFybSwgaXRpbWUpKQogCQluZXdfYWxhcm0gPSAxOworCWVsc2UKKwkJbmV3X2FsYXJtIC09IGl0aW1lOwogCiAJbXV0ZXhfbG9jaygmZHMxMzc0LT5tdXRleCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1lZmkuYyBiL2RyaXZlcnMvcnRjL3J0Yy1lZmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTAyOTIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLWVmaS5jCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogcnRjLWVmaTogUlRDIENsYXNzIERyaXZlciBmb3IgRUZJLWJhc2VkIHN5c3RlbXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCisgKiBBdXRob3I6IGRhbm4gZnJhemllciA8ZGFubmZAaHAuY29tPgorICogQmFzZWQgb24gZWZpcnRjLmMgYnkgU3RlcGhhbmUgRXJhbmlhbgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgorCisjZGVmaW5lIEVGSV9JU0RTVCAoRUZJX1RJTUVfQURKVVNUX0RBWUxJR0hUfEVGSV9USU1FX0lOX0RBWUxJR0hUKQorLyoKKyAqIEVGSSBFcG9jaCBpcyAxLzEvMTk5OAorICovCisjZGVmaW5lIEVGSV9SVENfRVBPQ0gJCTE5OTgKKworLyoKKyAqIHJldHVybnMgZGF5IG9mIHRoZSB5ZWFyIFswLTM2NV0KKyAqLworc3RhdGljIGlubGluZSBpbnQKK2NvbXB1dGVfeWRheShlZmlfdGltZV90ICplZnQpCit7CisJLyogZWZpX3RpbWVfdC5tb250aCBpcyBpbiB0aGUgWzEtMTJdIHNvLCB3ZSBuZWVkIC0xICovCisJcmV0dXJuIHJ0Y195ZWFyX2RheXMoZWZ0LT5kYXkgLSAxLCBlZnQtPm1vbnRoIC0gMSwgZWZ0LT55ZWFyKTsKK30KKy8qCisgKiByZXR1cm5zIGRheSBvZiB0aGUgd2VlayBbMC02XSAwPVN1bmRheQorICoKKyAqIERvbid0IHRyeSB0byBwcm92aWRlIGEgeWVhciB0aGF0J3MgYmVmb3JlIDE5OTgsIHBsZWFzZSAhCisgKi8KK3N0YXRpYyBpbnQKK2NvbXB1dGVfd2RheShlZmlfdGltZV90ICplZnQpCit7CisJaW50IHk7CisJaW50IG5kYXlzID0gMDsKKworCWlmIChlZnQtPnllYXIgPCAxOTk4KSB7CisJCXByaW50ayhLRVJOX0VSUiAiZWZpcnRjOiBFRkkgeWVhciA8IDE5OTgsIGludmFsaWQgZGF0ZVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKHkgPSBFRklfUlRDX0VQT0NIOyB5IDwgZWZ0LT55ZWFyOyB5KyspCisJCW5kYXlzICs9IDM2NSArIChpc19sZWFwX3llYXIoeSkgPyAxIDogMCk7CisKKwluZGF5cyArPSBjb21wdXRlX3lkYXkoZWZ0KTsKKworCS8qCisJICogND0xLzEvMTk5OCB3YXMgYSBUaHVyc2RheQorCSAqLworCXJldHVybiAobmRheXMgKyA0KSAlIDc7Cit9CisKK3N0YXRpYyB2b2lkCitjb252ZXJ0X3RvX2VmaV90aW1lKHN0cnVjdCBydGNfdGltZSAqd3RpbWUsIGVmaV90aW1lX3QgKmVmdCkKK3sKKwllZnQtPnllYXIJPSB3dGltZS0+dG1feWVhciArIDE5MDA7CisJZWZ0LT5tb250aAk9IHd0aW1lLT50bV9tb24gKyAxOworCWVmdC0+ZGF5CT0gd3RpbWUtPnRtX21kYXk7CisJZWZ0LT5ob3VyCT0gd3RpbWUtPnRtX2hvdXI7CisJZWZ0LT5taW51dGUJPSB3dGltZS0+dG1fbWluOworCWVmdC0+c2Vjb25kIAk9IHd0aW1lLT50bV9zZWM7CisJZWZ0LT5uYW5vc2Vjb25kID0gMDsKKwllZnQtPmRheWxpZ2h0CT0gd3RpbWUtPnRtX2lzZHN0ID8gRUZJX0lTRFNUIDogMDsKKwllZnQtPnRpbWV6b25lCT0gRUZJX1VOU1BFQ0lGSUVEX1RJTUVaT05FOworfQorCitzdGF0aWMgdm9pZAorY29udmVydF9mcm9tX2VmaV90aW1lKGVmaV90aW1lX3QgKmVmdCwgc3RydWN0IHJ0Y190aW1lICp3dGltZSkKK3sKKwltZW1zZXQod3RpbWUsIDAsIHNpemVvZigqd3RpbWUpKTsKKwl3dGltZS0+dG1fc2VjICA9IGVmdC0+c2Vjb25kOworCXd0aW1lLT50bV9taW4gID0gZWZ0LT5taW51dGU7CisJd3RpbWUtPnRtX2hvdXIgPSBlZnQtPmhvdXI7CisJd3RpbWUtPnRtX21kYXkgPSBlZnQtPmRheTsKKwl3dGltZS0+dG1fbW9uICA9IGVmdC0+bW9udGggLSAxOworCXd0aW1lLT50bV95ZWFyID0gZWZ0LT55ZWFyIC0gMTkwMDsKKworCS8qIGRheSBvZiB0aGUgd2VlayBbMC02XSwgU3VuZGF5PTAgKi8KKwl3dGltZS0+dG1fd2RheSA9IGNvbXB1dGVfd2RheShlZnQpOworCisJLyogZGF5IGluIHRoZSB5ZWFyIFsxLTM2NV0qLworCXd0aW1lLT50bV95ZGF5ID0gY29tcHV0ZV95ZGF5KGVmdCk7CisKKworCXN3aXRjaCAoZWZ0LT5kYXlsaWdodCAmIEVGSV9JU0RTVCkgeworCWNhc2UgRUZJX0lTRFNUOgorCQl3dGltZS0+dG1faXNkc3QgPSAxOworCQlicmVhazsKKwljYXNlIEVGSV9USU1FX0FESlVTVF9EQVlMSUdIVDoKKwkJd3RpbWUtPnRtX2lzZHN0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd3RpbWUtPnRtX2lzZHN0ID0gLTE7CisJfQorfQorCitzdGF0aWMgaW50IGVmaV9yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKndrYWxybSkKK3sKKwllZmlfdGltZV90IGVmdDsKKwllZmlfc3RhdHVzX3Qgc3RhdHVzOworCisJLyoKKwkgKiBBcyBvZiBFRkkgdjEuMTAsIHRoaXMgY2FsbCBhbHdheXMgcmV0dXJucyBhbiB1bnN1cHBvcnRlZCBzdGF0dXMKKwkgKi8KKwlzdGF0dXMgPSBlZmkuZ2V0X3dha2V1cF90aW1lKChlZmlfYm9vbF90ICopJndrYWxybS0+ZW5hYmxlZCwKKwkJCQkgICAgIChlZmlfYm9vbF90ICopJndrYWxybS0+cGVuZGluZywgJmVmdCk7CisKKwlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbnZlcnRfZnJvbV9lZmlfdGltZSgmZWZ0LCAmd2thbHJtLT50aW1lKTsKKworCXJldHVybiBydGNfdmFsaWRfdG0oJndrYWxybS0+dGltZSk7Cit9CisKK3N0YXRpYyBpbnQgZWZpX3NldF9hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICp3a2Fscm0pCit7CisJZWZpX3RpbWVfdCBlZnQ7CisJZWZpX3N0YXR1c190IHN0YXR1czsKKworCWNvbnZlcnRfdG9fZWZpX3RpbWUoJndrYWxybS0+dGltZSwgJmVmdCk7CisKKwkvKgorCSAqIFhYWCBGaXhtZToKKwkgKiBBcyBvZiBFRkkgMC45MiB3aXRoIHRoZSBmaXJtd2FyZSBJIGhhdmUgb24gbXkKKwkgKiBtYWNoaW5lIHRoaXMgY2FsbCBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgcXVpdGUKKwkgKiByaWdodAorCSAqCisJICogQXMgb2YgdjEuMTAsIHRoaXMgY2FsbCBhbHdheXMgcmV0dXJucyBhbiB1bnN1cHBvcnRlZCBzdGF0dXMKKwkgKi8KKwlzdGF0dXMgPSBlZmkuc2V0X3dha2V1cF90aW1lKChlZmlfYm9vbF90KXdrYWxybS0+ZW5hYmxlZCwgJmVmdCk7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJ3cml0ZSBzdGF0dXMgaXMgJWRcbiIsIChpbnQpc3RhdHVzKTsKKworCXJldHVybiBzdGF0dXMgPT0gRUZJX1NVQ0NFU1MgPyAwIDogLUVJTlZBTDsKK30KKworc3RhdGljIGludCBlZmlfcmVhZF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwllZmlfc3RhdHVzX3Qgc3RhdHVzOworCWVmaV90aW1lX3QgZWZ0OworCWVmaV90aW1lX2NhcF90IGNhcDsKKworCXN0YXR1cyA9IGVmaS5nZXRfdGltZSgmZWZ0LCAmY2FwKTsKKworCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsKKwkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlwcmludGsoS0VSTl9FUlIgImVmaXRpbWU6IGNhbid0IHJlYWQgdGltZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvbnZlcnRfZnJvbV9lZmlfdGltZSgmZWZ0LCB0bSk7CisKKwlyZXR1cm4gcnRjX3ZhbGlkX3RtKHRtKTsKK30KKworc3RhdGljIGludCBlZmlfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCWVmaV9zdGF0dXNfdCBzdGF0dXM7CisJZWZpX3RpbWVfdCBlZnQ7CisKKwljb252ZXJ0X3RvX2VmaV90aW1lKHRtLCAmZWZ0KTsKKworCXN0YXR1cyA9IGVmaS5zZXRfdGltZSgmZWZ0KTsKKworCXJldHVybiBzdGF0dXMgPT0gRUZJX1NVQ0NFU1MgPyAwIDogLUVJTlZBTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGVmaV9ydGNfb3BzID0geworCS5yZWFkX3RpbWUgPSBlZmlfcmVhZF90aW1lLAorCS5zZXRfdGltZSA9IGVmaV9zZXRfdGltZSwKKwkucmVhZF9hbGFybSA9IGVmaV9yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0gPSBlZmlfc2V0X2FsYXJtLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZWZpX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKKworCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInJ0Yy1lZmkiLCAmZGV2LT5kZXYsICZlZmlfcnRjX29wcywKKwkJCQkJVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkKKwkJcmV0dXJuIFBUUl9FUlIocnRjKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgcnRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBlZmlfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlZmlfcnRjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJydGMtZWZpIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBlZmlfcnRjX3Byb2JlLAorCS5yZW1vdmUgPSBfX2V4aXRfcChlZmlfcnRjX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlZmlfcnRjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZlZmlfcnRjX2RyaXZlciwgZWZpX3J0Y19wcm9iZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlZmlfcnRjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZWZpX3J0Y19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChlZmlfcnRjX2luaXQpOworbW9kdWxlX2V4aXQoZWZpX3J0Y19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiZGFubiBmcmF6aWVyIDxkYW5uZkBocC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkVGSSBSVEMgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZ2VuZXJpYy5jIGIvZHJpdmVycy9ydGMvcnRjLWdlbmVyaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODMyMjAwNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1nZW5lcmljLmMKQEAgLTAsMCArMSw4NCBAQAorLyogcnRjLWdlbmVyaWM6IFJUQyBkcml2ZXIgdXNpbmcgdGhlIGdlbmVyaWMgUlRDIGFic3RyYWN0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEt5bGUgTWNNYXJ0aW4gPGt5bGVAbWNtYXJ0aW4uY2E+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKworI2luY2x1ZGUgPGFzbS9ydGMuaD4KKworc3RhdGljIGludCBnZW5lcmljX2dldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0ID0gZ2V0X3J0Y190aW1lKHRtKTsKKworCWlmIChyZXQgJiBSVENfQkFUVF9CQUQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOworfQorCitzdGF0aWMgaW50IGdlbmVyaWNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCWlmIChzZXRfcnRjX3RpbWUodG0pIDwgMCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBnZW5lcmljX3J0Y19vcHMgPSB7CisJLnJlYWRfdGltZSA9IGdlbmVyaWNfZ2V0X3RpbWUsCisJLnNldF90aW1lID0gZ2VuZXJpY19zZXRfdGltZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGdlbmVyaWNfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjOworCisJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicnRjLWdlbmVyaWMiLCAmZGV2LT5kZXYsICZnZW5lcmljX3J0Y19vcHMsCisJCQkJICBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKQorCQlyZXR1cm4gUFRSX0VSUihydGMpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBydGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IGdlbmVyaWNfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZW5lcmljX3J0Y19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAicnRjLWdlbmVyaWMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5yZW1vdmUgPSBfX2V4aXRfcChnZW5lcmljX3J0Y19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZ2VuZXJpY19ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmdlbmVyaWNfcnRjX2RyaXZlciwgZ2VuZXJpY19ydGNfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZ2VuZXJpY19ydGNfZmluaSh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZnZW5lcmljX3J0Y19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChnZW5lcmljX3J0Y19pbml0KTsKK21vZHVsZV9leGl0KGdlbmVyaWNfcnRjX2ZpbmkpOworCitNT0RVTEVfQVVUSE9SKCJLeWxlIE1jTWFydGluIDxreWxlQG1jbWFydGluLmNhPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIFJUQyBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06cnRjLWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1saWIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1saWIuYwppbmRleCBkZDcwYmY3Li43NzM4NTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbGliLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWxpYi5jCkBAIC0yNiwxNCArMjYsMTMgQEAKIH07CiAKICNkZWZpbmUgTEVBUFNfVEhSVV9FTkRfT0YoeSkgKCh5KS80IC0gKHkpLzEwMCArICh5KS80MDApCi0jZGVmaW5lIExFQVBfWUVBUih5ZWFyKSAoKCEoeWVhciAlIDQpICYmICh5ZWFyICUgMTAwKSkgfHwgISh5ZWFyICUgNDAwKSkKIAogLyoKICAqIFRoZSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgbW9udGguCiAgKi8KIGludCBydGNfbW9udGhfZGF5cyh1bnNpZ25lZCBpbnQgbW9udGgsIHVuc2lnbmVkIGludCB5ZWFyKQogewotCXJldHVybiBydGNfZGF5c19pbl9tb250aFttb250aF0gKyAoTEVBUF9ZRUFSKHllYXIpICYmIG1vbnRoID09IDEpOworCXJldHVybiBydGNfZGF5c19pbl9tb250aFttb250aF0gKyAoaXNfbGVhcF95ZWFyKHllYXIpICYmIG1vbnRoID09IDEpOwogfQogRVhQT1JUX1NZTUJPTChydGNfbW9udGhfZGF5cyk7CiAKQEAgLTQyLDcgKzQxLDcgQEAKICAqLwogaW50IHJ0Y195ZWFyX2RheXModW5zaWduZWQgaW50IGRheSwgdW5zaWduZWQgaW50IG1vbnRoLCB1bnNpZ25lZCBpbnQgeWVhcikKIHsKLQlyZXR1cm4gcnRjX3lkYXlzW0xFQVBfWUVBUih5ZWFyKV1bbW9udGhdICsgZGF5LTE7CisJcmV0dXJuIHJ0Y195ZGF5c1tpc19sZWFwX3llYXIoeWVhcildW21vbnRoXSArIGRheS0xOwogfQogRVhQT1JUX1NZTUJPTChydGNfeWVhcl9kYXlzKTsKIApAQCAtNjYsNyArNjUsNyBAQAogCQktIExFQVBTX1RIUlVfRU5EX09GKDE5NzAgLSAxKTsKIAlpZiAoZGF5cyA8IDApIHsKIAkJeWVhciAtPSAxOwotCQlkYXlzICs9IDM2NSArIExFQVBfWUVBUih5ZWFyKTsKKwkJZGF5cyArPSAzNjUgKyBpc19sZWFwX3llYXIoeWVhcik7CiAJfQogCXRtLT50bV95ZWFyID0geWVhciAtIDE5MDA7CiAJdG0tPnRtX3lkYXkgPSBkYXlzICsgMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwppbmRleCA4OTNmN2RlLi42MGZlMjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCkBAIC02NCwxMCArNjQsMTIgQEAKICNkZWZpbmUgTTQxVDgwX0ZFQVRVUkVfQkwJKDEgPDwgMSkJLyogQmF0dGVyeSBsb3cgaW5kaWNhdG9yICovCiAjZGVmaW5lIE00MVQ4MF9GRUFUVVJFX1NRCSgxIDw8IDIpCS8qIFNxdWFyZXdhdmUgZmVhdHVyZSAqLwogI2RlZmluZSBNNDFUODBfRkVBVFVSRV9XRAkoMSA8PCAzKQkvKiBFeHRyYSB3YXRjaGRvZyByZXNvbHV0aW9uICovCisjZGVmaW5lIE00MVQ4MF9GRUFUVVJFX1NRX0FMVAkoMSA8PCA0KQkvKiBSU3ggYml0cyBhcmUgaW4gcmVnIDQgKi8KIAogI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4wNSIKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG00MXQ4MF9pZFtdID0geworCXsgIm00MXQ2MiIsIE00MVQ4MF9GRUFUVVJFX1NRIHwgTTQxVDgwX0ZFQVRVUkVfU1FfQUxUIH0sCiAJeyAibTQxdDY1IiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9XRCB9LAogCXsgIm00MXQ4MCIsIE00MVQ4MF9GRUFUVVJFX1NRIH0sCiAJeyAibTQxdDgxIiwgTTQxVDgwX0ZFQVRVUkVfSFQgfCBNNDFUODBfRkVBVFVSRV9TUX0sCkBAIC0zOTMsMTIgKzM5NSwxNSBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IG00MXQ4MF9kYXRhICpjbGllbnRkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IHZhbDsKKwlpbnQgdmFsLCByZWdfc3F3OwogCiAJaWYgKCEoY2xpZW50ZGF0YS0+ZmVhdHVyZXMgJiBNNDFUODBfRkVBVFVSRV9TUSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19TUVcpOworCXJlZ19zcXcgPSBNNDFUODBfUkVHX1NRVzsKKwlpZiAoY2xpZW50ZGF0YS0+ZmVhdHVyZXMgJiBNNDFUODBfRkVBVFVSRV9TUV9BTFQpCisJCXJlZ19zcXcgPSBNNDFUODBfUkVHX1dEQVk7CisJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnX3Nxdyk7CiAJaWYgKHZhbCA8IDApCiAJCXJldHVybiAtRUlPOwogCXZhbCA9ICh2YWwgPj4gNCkgJiAweGY7CkBAIC00MTksNyArNDI0LDcgQEAKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBtNDF0ODBfZGF0YSAqY2xpZW50ZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBhbG1vbiwgc3F3OworCWludCBhbG1vbiwgc3F3LCByZWdfc3F3OwogCWludCB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCiAJaWYgKCEoY2xpZW50ZGF0YS0+ZmVhdHVyZXMgJiBNNDFUODBfRkVBVFVSRV9TUSkpCkBAIC00NDAsMTMgKzQ0NSwxNiBAQAogCWFsbW9uID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19BTEFSTV9NT04pOwogCWlmIChhbG1vbiA8IDApCiAJCXJldHVybiAtRUlPOwotCXNxdyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE00MVQ4MF9SRUdfU1FXKTsKKwlyZWdfc3F3ID0gTTQxVDgwX1JFR19TUVc7CisJaWYgKGNsaWVudGRhdGEtPmZlYXR1cmVzICYgTTQxVDgwX0ZFQVRVUkVfU1FfQUxUKQorCQlyZWdfc3F3ID0gTTQxVDgwX1JFR19XREFZOworCXNxdyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZ19zcXcpOwogCWlmIChzcXcgPCAwKQogCQlyZXR1cm4gLUVJTzsKIAlzcXcgPSAoc3F3ICYgMHgwZikgfCAodmFsIDw8IDQpOwogCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19BTEFSTV9NT04sCiAJCQkJICAgICAgYWxtb24gJiB+TTQxVDgwX0FMTU9OX1NRV0UpIDwgMCB8fAotCSAgICBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19TUVcsIHNxdykgPCAwKQorCSAgICBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnX3Nxdywgc3F3KSA8IDApCiAJCXJldHVybiAtRUlPOwogCWlmICh2YWwgJiYgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE00MVQ4MF9SRUdfQUxBUk1fTU9OLAogCQkJCQkgICAgIGFsbW9uIHwgTTQxVDgwX0FMTU9OX1NRV0UpIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wYXJpc2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wYXJpc2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZiZmE2Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGFyaXNjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyogcnRjLXBhcmlzYzogUlRDIGZvciBIUCBQQS1SSVNDIGZpcm13YXJlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEt5bGUgTWNNYXJ0aW4gPGt5bGVAbWNtYXJ0aW4uY2E+Ci0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPGFzbS9ydGMuaD4KLQotLyogYXMgc2ltcGxlIGFzIGNhbiBiZSwgYW5kIG5vIHNpbXBsZXIuICovCi1zdHJ1Y3QgcGFyaXNjX3J0YyB7Ci0Jc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKLQlzcGlubG9ja190IGxvY2s7Ci19OwotCi1zdGF0aWMgaW50IHBhcmlzY19nZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCi17Ci0Jc3RydWN0IHBhcmlzY19ydGMgKnAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCByZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOwotCXJldCA9IGdldF9ydGNfdGltZSh0bSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHJldCAmIFJUQ19CQVRUX0JBRCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGFyaXNjX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKLXsKLQlzdHJ1Y3QgcGFyaXNjX3J0YyAqcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gc2V0X3J0Y190aW1lKHRtKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwYXJpc2NfcnRjX29wcyA9IHsKLQkucmVhZF90aW1lID0gcGFyaXNjX2dldF90aW1lLAotCS5zZXRfdGltZSA9IHBhcmlzY19zZXRfdGltZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IHBhcmlzY19ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBwYXJpc2NfcnRjICpwOwotCi0JcCA9IGt6YWxsb2Moc2l6ZW9mICgqcCksIEdGUF9LRVJORUwpOwotCWlmICghcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzcGluX2xvY2tfaW5pdCgmcC0+bG9jayk7Ci0KLQlwLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJydGMtcGFyaXNjIiwgJmRldi0+ZGV2LCAmcGFyaXNjX3J0Y19vcHMsCi0JCQkJCVRISVNfTU9EVUxFKTsKLQlpZiAoSVNfRVJSKHAtPnJ0YykpIHsKLQkJaW50IGVyciA9IFBUUl9FUlIocC0+cnRjKTsKLQkJa2ZyZWUocCk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBwYXJpc2NfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBhcmlzY19ydGMgKnAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JcnRjX2RldmljZV91bnJlZ2lzdGVyKHAtPnJ0Yyk7Ci0Ja2ZyZWUocCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGFyaXNjX3J0Y19kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAicnRjLXBhcmlzYyIsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlID0gcGFyaXNjX3J0Y19wcm9iZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3AocGFyaXNjX3J0Y19yZW1vdmUpLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcGFyaXNjX3J0Y19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGFyaXNjX3J0Y19kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcGFyaXNjX3J0Y19maW5pKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBhcmlzY19ydGNfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQocGFyaXNjX3J0Y19pbml0KTsKLW1vZHVsZV9leGl0KHBhcmlzY19ydGNfZmluaSk7Ci0KLU1PRFVMRV9BVVRIT1IoIkt5bGUgTWNNYXJ0aW4gPGt5bGVAbWNtYXJ0aW4uY2E+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkhQIFBBLVJJU0MgUlRDIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBwYy5jIGIvZHJpdmVycy9ydGMvcnRjLXBwYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGU5N2UyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wcGMuYworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBSVEMgZHJpdmVyIGZvciBwcGNfbWQgUlRDIGZ1bmN0aW9ucwotICoKLSAqIMKpIDIwMDcgUmVkIEhhdCwgSW5jLgotICoKLSAqIEF1dGhvcjogRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvcnRjLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLQotc3RhdGljIGludCBwcGNfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCi17Ci0JcHBjX21kLmdldF9ydGNfdGltZSh0bSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHBjX3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCi17Ci0JcmV0dXJuIHBwY19tZC5zZXRfcnRjX3RpbWUodG0pOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgcHBjX3J0Y19vcHMgPSB7Ci0JLnNldF90aW1lID0gcHBjX3J0Y19zZXRfdGltZSwKLQkucmVhZF90aW1lID0gcHBjX3J0Y19yZWFkX3RpbWUsCi19OwotCi1zdGF0aWMgc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwcGNfcnRjX3BkZXY7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBwY19ydGNfaW5pdCh2b2lkKQotewotCWlmICghcHBjX21kLmdldF9ydGNfdGltZSB8fCAhcHBjX21kLnNldF9ydGNfdGltZSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwcGNfcnRjX3BkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJwcGMtcnRjIiwgMCwgTlVMTCwgMCk7Ci0JaWYgKElTX0VSUihwcGNfcnRjX3BkZXYpKQotCQlyZXR1cm4gUFRSX0VSUihwcGNfcnRjX3BkZXYpOwotCi0JcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicHBjX21kIiwgJnBwY19ydGNfcGRldi0+ZGV2LAotCQkJCSAgJnBwY19ydGNfb3BzLCBUSElTX01PRFVMRSk7Ci0JaWYgKElTX0VSUihydGMpKSB7Ci0JCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBwY19ydGNfcGRldik7Ci0JCXJldHVybiBQVFJfRVJSKHJ0Yyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBwcGNfcnRjX2V4aXQodm9pZCkKLXsKLQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwcGNfcnRjX3BkZXYpOwotfQotCi1tb2R1bGVfaW5pdChwcGNfcnRjX2luaXQpOwotbW9kdWxlX2V4aXQocHBjX3J0Y19leGl0KTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIFJUQyBjbGFzcyBkcml2ZXIgZm9yIFBvd2VyUEMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wczMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wczMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjgxMzNjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBzMy5jCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogUFMzIFJUQyBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTb255IENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCisgKiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorCisjaW5jbHVkZSA8YXNtL2x2MWNhbGwuaD4KKyNpbmNsdWRlIDxhc20vcHMzLmg+CisKKworc3RhdGljIHU2NCByZWFkX3J0Yyh2b2lkKQoreworCWludCByZXN1bHQ7CisJdTY0IHJ0Y192YWw7CisJdTY0IHRiX3ZhbDsKKworCXJlc3VsdCA9IGx2MV9nZXRfcnRjKCZydGNfdmFsLCAmdGJfdmFsKTsKKwlCVUdfT04ocmVzdWx0KTsKKworCXJldHVybiBydGNfdmFsOworfQorCitzdGF0aWMgaW50IHBzM19nZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJcnRjX3RpbWVfdG9fdG0ocmVhZF9ydGMoKSArIHBzM19vc19hcmVhX2dldF9ydGNfZGlmZigpLCB0bSk7CisJcmV0dXJuIHJ0Y192YWxpZF90bSh0bSk7Cit9CisKK3N0YXRpYyBpbnQgcHMzX3NldF90aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKK3sKKwl1bnNpZ25lZCBsb25nIG5vdzsKKworCXJ0Y190bV90b190aW1lKHRtLCAmbm93KTsKKwlwczNfb3NfYXJlYV9zZXRfcnRjX2RpZmYobm93IC0gcmVhZF9ydGMoKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwczNfcnRjX29wcyA9IHsKKwkucmVhZF90aW1lID0gcHMzX2dldF90aW1lLAorCS5zZXRfdGltZSA9IHBzM19zZXRfdGltZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBzM19ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CisKKwlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJydGMtcHMzIiwgJmRldi0+ZGV2LCAmcHMzX3J0Y19vcHMsCisJCQkJICBUSElTX01PRFVMRSk7CisJaWYgKElTX0VSUihydGMpKQorCQlyZXR1cm4gUFRSX0VSUihydGMpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBydGMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBwczNfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwczNfcnRjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJydGMtcHMzIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucmVtb3ZlID0gX19leGl0X3AocHMzX3J0Y19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHMzX3J0Y19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmcHMzX3J0Y19kcml2ZXIsIHBzM19ydGNfcHJvYmUpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHMzX3J0Y19maW5pKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBzM19ydGNfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocHMzX3J0Y19pbml0KTsKK21vZHVsZV9leGl0KHBzM19ydGNfZmluaSk7CisKK01PRFVMRV9BVVRIT1IoIlNvbnkgQ29ycG9yYXRpb24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigicHMzIFJUQyBkcml2ZXIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06cnRjLXBzMyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNoLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwppbmRleCA0ODk4ZjdmLi45YjFmZjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2guYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwpAQCAtNzk1LDEwICs3OTUsNDYgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgdm9pZCBzaF9ydGNfc2V0X2lycV93YWtlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJc2V0X2lycV93YWtlKHJ0Yy0+cGVyaW9kaWNfaXJxLCBlbmFibGVkKTsKKwlpZiAocnRjLT5jYXJyeV9pcnEgPiAwKSB7CisJCXNldF9pcnFfd2FrZShydGMtPmNhcnJ5X2lycSwgZW5hYmxlZCk7CisJCXNldF9pcnFfd2FrZShydGMtPmFsYXJtX2lycSwgZW5hYmxlZCk7CisJfQorCit9CisKK3N0YXRpYyBpbnQgc2hfcnRjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCQlzaF9ydGNfc2V0X2lycV93YWtlKGRldiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9ydGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKKwkJc2hfcnRjX3NldF9pcnFfd2FrZShkZXYsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzaF9ydGNfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IHNoX3J0Y19zdXNwZW5kLAorCS5yZXN1bWUgPSBzaF9ydGNfcmVzdW1lLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfcnRjX3BsYXRmb3JtX2RyaXZlciA9IHsKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSBEUlZfTkFNRSwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5wbQk9ICZzaF9ydGNfZGV2X3BtX29wcywKIAl9LAogCS5wcm9iZQkJPSBzaF9ydGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzaF9ydGNfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jIGIvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKaW5kZXggMTRkNGYwMy4uYWQxNjQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXYzMDIwLmMKQEAgLTI3LDE3ICsyNywxNjIgQEAKICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMtdjMwMjAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICN1bmRlZiBERUJVRwogCitzdHJ1Y3QgdjMwMjA7CisKK3N0cnVjdCB2MzAyMF9jaGlwX29wcyB7CisJaW50ICgqbWFwX2lvKShzdHJ1Y3QgdjMwMjAgKmNoaXAsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCSAgICAgIHN0cnVjdCB2MzAyMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSk7CisJdm9pZCAoKnVubWFwX2lvKShzdHJ1Y3QgdjMwMjAgKmNoaXApOworCXVuc2lnbmVkIGNoYXIgKCpyZWFkX2JpdCkoc3RydWN0IHYzMDIwICpjaGlwKTsKKwl2b2lkICgqd3JpdGVfYml0KShzdHJ1Y3QgdjMwMjAgKmNoaXAsIHVuc2lnbmVkIGNoYXIgYml0KTsKK307CisKKyNkZWZpbmUgVjMwMjBfQ1MJMAorI2RlZmluZSBWMzAyMF9XUgkxCisjZGVmaW5lIFYzMDIwX1JECTIKKyNkZWZpbmUgVjMwMjBfSU8JMworCitzdHJ1Y3QgdjMwMjBfZ3BpbyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgZ3BpbzsKK307CisKIHN0cnVjdCB2MzAyMCB7CisJLyogTU1JTyBhY2Nlc3MgKi8KIAl2b2lkIF9faW9tZW0gKmlvYWRkcmVzczsKIAlpbnQgbGVmdHNoaWZ0OworCisJLyogR1BJTyBhY2Nlc3MgKi8KKwlzdHJ1Y3QgdjMwMjBfZ3BpbyAqZ3BpbzsKKworCXN0cnVjdCB2MzAyMF9jaGlwX29wcyAqb3BzOworCiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIH07CiAKKworc3RhdGljIGludCB2MzAyMF9tbWlvX21hcChzdHJ1Y3QgdjMwMjAgKmNoaXAsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkgIHN0cnVjdCB2MzAyMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAxKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHBkZXYtPnJlc291cmNlWzBdLmZsYWdzICE9IElPUkVTT1VSQ0VfTUVNKQorCQlyZXR1cm4gLUVCVVNZOworCisJY2hpcC0+bGVmdHNoaWZ0ID0gcGRhdGEtPmxlZnRzaGlmdDsKKwljaGlwLT5pb2FkZHJlc3MgPSBpb3JlbWFwKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LCAxKTsKKwlpZiAoY2hpcC0+aW9hZGRyZXNzID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdjMwMjBfbW1pb191bm1hcChzdHJ1Y3QgdjMwMjAgKmNoaXApCit7CisJaW91bm1hcChjaGlwLT5pb2FkZHJlc3MpOworfQorCitzdGF0aWMgdm9pZCB2MzAyMF9tbWlvX3dyaXRlX2JpdChzdHJ1Y3QgdjMwMjAgKmNoaXAsIHVuc2lnbmVkIGNoYXIgYml0KQoreworCXdyaXRlbChiaXQgPDwgY2hpcC0+bGVmdHNoaWZ0LCBjaGlwLT5pb2FkZHJlc3MpOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciB2MzAyMF9tbWlvX3JlYWRfYml0KHN0cnVjdCB2MzAyMCAqY2hpcCkKK3sKKwlyZXR1cm4gcmVhZGwoY2hpcC0+aW9hZGRyZXNzKSAmICgxIDw8IGNoaXAtPmxlZnRzaGlmdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdjMwMjBfY2hpcF9vcHMgdjMwMjBfbW1pb19vcHMgPSB7CisJLm1hcF9pbwkJPSB2MzAyMF9tbWlvX21hcCwKKwkudW5tYXBfaW8JPSB2MzAyMF9tbWlvX3VubWFwLAorCS5yZWFkX2JpdAk9IHYzMDIwX21taW9fcmVhZF9iaXQsCisJLndyaXRlX2JpdAk9IHYzMDIwX21taW9fd3JpdGVfYml0LAorfTsKKworc3RhdGljIHN0cnVjdCB2MzAyMF9ncGlvIHYzMDIwX2dwaW9bXSA9IHsKKwl7ICJSVEMgQ1MiLCAwIH0sCisJeyAiUlRDIFdSIiwgMCB9LAorCXsgIlJUQyBSRCIsIDAgfSwKKwl7ICJSVEMgSU8iLCAwIH0sCit9OworCitzdGF0aWMgaW50IHYzMDIwX2dwaW9fbWFwKHN0cnVjdCB2MzAyMCAqY2hpcCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAgc3RydWN0IHYzMDIwX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCWludCBpLCBlcnI7CisKKwl2MzAyMF9ncGlvW1YzMDIwX0NTXS5ncGlvID0gcGRhdGEtPmdwaW9fY3M7CisJdjMwMjBfZ3Bpb1tWMzAyMF9XUl0uZ3BpbyA9IHBkYXRhLT5ncGlvX3dyOworCXYzMDIwX2dwaW9bVjMwMjBfUkRdLmdwaW8gPSBwZGF0YS0+Z3Bpb19yZDsKKwl2MzAyMF9ncGlvW1YzMDIwX0lPXS5ncGlvID0gcGRhdGEtPmdwaW9faW87CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2MzAyMF9ncGlvKTsgaSsrKSB7CisJCWVyciA9IGdwaW9fcmVxdWVzdCh2MzAyMF9ncGlvW2ldLmdwaW8sIHYzMDIwX2dwaW9baV0ubmFtZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9yZXF1ZXN0OworCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dCh2MzAyMF9ncGlvW2ldLmdwaW8sIDEpOworCX0KKworCWNoaXAtPmdwaW8gPSB2MzAyMF9ncGlvOworCisJcmV0dXJuIDA7CisKK2Vycl9yZXF1ZXN0OgorCXdoaWxlICgtLWkgPj0gMCkKKwkJZ3Bpb19mcmVlKHYzMDIwX2dwaW9baV0uZ3Bpbyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCB2MzAyMF9ncGlvX3VubWFwKHN0cnVjdCB2MzAyMCAqY2hpcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHYzMDIwX2dwaW8pOyBpKyspCisJCWdwaW9fZnJlZSh2MzAyMF9ncGlvW2ldLmdwaW8pOworfQorCitzdGF0aWMgdm9pZCB2MzAyMF9ncGlvX3dyaXRlX2JpdChzdHJ1Y3QgdjMwMjAgKmNoaXAsIHVuc2lnbmVkIGNoYXIgYml0KQoreworCWdwaW9fZGlyZWN0aW9uX291dHB1dChjaGlwLT5ncGlvW1YzMDIwX0lPXS5ncGlvLCBiaXQpOworCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPmdwaW9bVjMwMjBfQ1NdLmdwaW8sIDApOworCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPmdwaW9bVjMwMjBfV1JdLmdwaW8sIDApOworCXVkZWxheSgxKTsKKwlncGlvX3NldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX1dSXS5ncGlvLCAxKTsKKwlncGlvX3NldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX0NTXS5ncGlvLCAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdjMwMjBfZ3Bpb19yZWFkX2JpdChzdHJ1Y3QgdjMwMjAgKmNoaXApCit7CisJaW50IGJpdDsKKworCWdwaW9fZGlyZWN0aW9uX2lucHV0KGNoaXAtPmdwaW9bVjMwMjBfSU9dLmdwaW8pOworCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPmdwaW9bVjMwMjBfQ1NdLmdwaW8sIDApOworCWdwaW9fc2V0X3ZhbHVlKGNoaXAtPmdwaW9bVjMwMjBfUkRdLmdwaW8sIDApOworCXVkZWxheSgxKTsKKwliaXQgPSAhIWdwaW9fZ2V0X3ZhbHVlKGNoaXAtPmdwaW9bVjMwMjBfSU9dLmdwaW8pOworCXVkZWxheSgxKTsKKwlncGlvX3NldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX1JEXS5ncGlvLCAxKTsKKwlncGlvX3NldF92YWx1ZShjaGlwLT5ncGlvW1YzMDIwX0NTXS5ncGlvLCAxKTsKKworCXJldHVybiBiaXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdjMwMjBfY2hpcF9vcHMgdjMwMjBfZ3Bpb19vcHMgPSB7CisJLm1hcF9pbwkJPSB2MzAyMF9ncGlvX21hcCwKKwkudW5tYXBfaW8JPSB2MzAyMF9ncGlvX3VubWFwLAorCS5yZWFkX2JpdAk9IHYzMDIwX2dwaW9fcmVhZF9iaXQsCisJLndyaXRlX2JpdAk9IHYzMDIwX2dwaW9fd3JpdGVfYml0LAorfTsKKwogc3RhdGljIHZvaWQgdjMwMjBfc2V0X3JlZyhzdHJ1Y3QgdjMwMjAgKmNoaXAsIHVuc2lnbmVkIGNoYXIgYWRkcmVzcywKIAkJCXVuc2lnbmVkIGNoYXIgZGF0YSkKIHsKQEAgLTQ2LDcgKzE5MSw3IEBACiAKIAl0bXAgPSBhZGRyZXNzOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJd3JpdGVsKCh0bXAgJiAxKSA8PCBjaGlwLT5sZWZ0c2hpZnQsIGNoaXAtPmlvYWRkcmVzcyk7CisJCWNoaXAtPm9wcy0+d3JpdGVfYml0KGNoaXAsICh0bXAgJiAxKSk7CiAJCXRtcCA+Pj0gMTsKIAkJdWRlbGF5KDEpOwogCX0KQEAgLTU0LDcgKzE5OSw3IEBACiAJLyogQ29tbWFuZHMgZG9udCBoYXZlIGRhdGEgKi8KIAlpZiAoIVYzMDIwX0lTX0NPTU1BTkQoYWRkcmVzcykpIHsKIAkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQkJd3JpdGVsKChkYXRhICYgMSkgPDwgY2hpcC0+bGVmdHNoaWZ0LCBjaGlwLT5pb2FkZHJlc3MpOworCQkJY2hpcC0+b3BzLT53cml0ZV9iaXQoY2hpcCwgKGRhdGEgJiAxKSk7CiAJCQlkYXRhID4+PSAxOwogCQkJdWRlbGF5KDEpOwogCQl9CkBAIC02MywxOCArMjA4LDE4IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHYzMDIwX2dldF9yZWcoc3RydWN0IHYzMDIwICpjaGlwLCB1bnNpZ25lZCBjaGFyIGFkZHJlc3MpCiB7Ci0JdW5zaWduZWQgaW50IGRhdGE9MDsKKwl1bnNpZ25lZCBpbnQgZGF0YSA9IDA7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCXdyaXRlbCgoYWRkcmVzcyAmIDEpIDw8IGNoaXAtPmxlZnRzaGlmdCwgY2hpcC0+aW9hZGRyZXNzKTsKKwkJY2hpcC0+b3BzLT53cml0ZV9iaXQoY2hpcCwgKGFkZHJlc3MgJiAxKSk7CiAJCWFkZHJlc3MgPj49IDE7CiAJCXVkZWxheSgxKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWRhdGEgPj49IDE7Ci0JCWlmIChyZWFkbChjaGlwLT5pb2FkZHJlc3MpICYgKDEgPDwgY2hpcC0+bGVmdHNoaWZ0KSkKKwkJaWYgKGNoaXAtPm9wcy0+cmVhZF9iaXQoY2hpcCkpCiAJCQlkYXRhIHw9IDB4ODA7CiAJCXVkZWxheSgxKTsKIAl9CkBAIC0xMDYsMTYgKzI1MSwxNCBAQAogCXRtcCA9IHYzMDIwX2dldF9yZWcoY2hpcCwgVjMwMjBfWUVBUik7CiAJZHQtPnRtX3llYXIgPSBiY2QyYmluKHRtcCkrMTAwOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoIlxuJXMgOiBSZWFkIFJUQyB2YWx1ZXNcbiIsX19mdW5jX18pOwotCXByaW50aygidG1faG91cjogJWlcbiIsZHQtPnRtX2hvdXIpOwotCXByaW50aygidG1fbWluIDogJWlcbiIsZHQtPnRtX21pbik7Ci0JcHJpbnRrKCJ0bV9zZWMgOiAlaVxuIixkdC0+dG1fc2VjKTsKLQlwcmludGsoInRtX3llYXI6ICVpXG4iLGR0LT50bV95ZWFyKTsKLQlwcmludGsoInRtX21vbiA6ICVpXG4iLGR0LT50bV9tb24pOwotCXByaW50aygidG1fbWRheTogJWlcbiIsZHQtPnRtX21kYXkpOwotCXByaW50aygidG1fd2RheTogJWlcbiIsZHQtPnRtX3dkYXkpOwotI2VuZGlmCisJZGV2X2RiZyhkZXYsICJcbiVzIDogUmVhZCBSVEMgdmFsdWVzXG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZyhkZXYsICJ0bV9ob3VyOiAlaVxuIiwgZHQtPnRtX2hvdXIpOworCWRldl9kYmcoZGV2LCAidG1fbWluIDogJWlcbiIsIGR0LT50bV9taW4pOworCWRldl9kYmcoZGV2LCAidG1fc2VjIDogJWlcbiIsIGR0LT50bV9zZWMpOworCWRldl9kYmcoZGV2LCAidG1feWVhcjogJWlcbiIsIGR0LT50bV95ZWFyKTsKKwlkZXZfZGJnKGRldiwgInRtX21vbiA6ICVpXG4iLCBkdC0+dG1fbW9uKTsKKwlkZXZfZGJnKGRldiwgInRtX21kYXk6ICVpXG4iLCBkdC0+dG1fbWRheSk7CisJZGV2X2RiZyhkZXYsICJ0bV93ZGF5OiAlaVxuIiwgZHQtPnRtX3dkYXkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjUsMTUgKzI2OCwxMyBAQAogewogCXN0cnVjdCB2MzAyMCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0jaWZkZWYgREVCVUcKLQlwcmludGsoIlxuJXMgOiBTZXR0aW5nIFJUQyB2YWx1ZXNcbiIsX19mdW5jX18pOwotCXByaW50aygidG1fc2VjIDogJWlcbiIsZHQtPnRtX3NlYyk7Ci0JcHJpbnRrKCJ0bV9taW4gOiAlaVxuIixkdC0+dG1fbWluKTsKLQlwcmludGsoInRtX2hvdXI6ICVpXG4iLGR0LT50bV9ob3VyKTsKLQlwcmludGsoInRtX21kYXk6ICVpXG4iLGR0LT50bV9tZGF5KTsKLQlwcmludGsoInRtX3dkYXk6ICVpXG4iLGR0LT50bV93ZGF5KTsKLQlwcmludGsoInRtX3llYXI6ICVpXG4iLGR0LT50bV95ZWFyKTsKLSNlbmRpZgorCWRldl9kYmcoZGV2LCAiXG4lcyA6IFNldHRpbmcgUlRDIHZhbHVlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcoZGV2LCAidG1fc2VjIDogJWlcbiIsIGR0LT50bV9zZWMpOworCWRldl9kYmcoZGV2LCAidG1fbWluIDogJWlcbiIsIGR0LT50bV9taW4pOworCWRldl9kYmcoZGV2LCAidG1faG91cjogJWlcbiIsIGR0LT50bV9ob3VyKTsKKwlkZXZfZGJnKGRldiwgInRtX21kYXk6ICVpXG4iLCBkdC0+dG1fbWRheSk7CisJZGV2X2RiZyhkZXYsICJ0bV93ZGF5OiAlaVxuIiwgZHQtPnRtX3dkYXkpOworCWRldl9kYmcoZGV2LCAidG1feWVhcjogJWlcbiIsIGR0LT50bV95ZWFyKTsKIAogCS8qIFdyaXRlIGFsbCB0aGUgdmFsdWVzIHRvIHJhbS4uLiAqLwogCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfU0VDT05EUywgCWJpbjJiY2QoZHQtPnRtX3NlYykpOwpAQCAtMTY4LDMwICszMDksMjggQEAKIAlpbnQgaTsKIAlpbnQgdGVtcDsKIAotCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzICE9IDEpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAocGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9NRU0pCi0JCXJldHVybiAtRUJVU1k7Ci0KIAljaGlwID0ga3phbGxvYyhzaXplb2YgKmNoaXAsIEdGUF9LRVJORUwpOwogCWlmICghY2hpcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljaGlwLT5sZWZ0c2hpZnQgPSBwZGF0YS0+bGVmdHNoaWZ0OwotCWNoaXAtPmlvYWRkcmVzcyA9IGlvcmVtYXAocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsIDEpOwotCWlmIChjaGlwLT5pb2FkZHJlc3MgPT0gTlVMTCkKKwlpZiAocGRhdGEtPnVzZV9ncGlvKQorCQljaGlwLT5vcHMgPSAmdjMwMjBfZ3Bpb19vcHM7CisJZWxzZQorCQljaGlwLT5vcHMgPSAmdjMwMjBfbW1pb19vcHM7CisKKwlyZXR2YWwgPSBjaGlwLT5vcHMtPm1hcF9pbyhjaGlwLCBwZGV2LCBwZGF0YSk7CisJaWYgKHJldHZhbCkKIAkJZ290byBlcnJfY2hpcDsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgdjMwMjAgZXhwZWN0cyBhIGNvbW11bmljYXRpb24gY3ljbGUKIAkgKiBieSByZWFkaW5nIDggdGltZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQl0ZW1wID0gcmVhZGwoY2hpcC0+aW9hZGRyZXNzKTsKKwkJdGVtcCA9IGNoaXAtPm9wcy0+cmVhZF9iaXQoY2hpcCk7CiAKIAkvKiBUZXN0IGNoaXAgYnkgZG9pbmcgYSB3cml0ZS9yZWFkIHNlcXVlbmNlCiAJICogdG8gdGhlIGNoaXAgcmFtICovCiAJdjMwMjBfc2V0X3JlZyhjaGlwLCBWMzAyMF9TRUNPTkRTLCAweDMzKTsKLQlpZih2MzAyMF9nZXRfcmVnKGNoaXAsIFYzMDIwX1NFQ09ORFMpICE9IDB4MzMpIHsKKwlpZiAodjMwMjBfZ2V0X3JlZyhjaGlwLCBWMzAyMF9TRUNPTkRTKSAhPSAweDMzKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX2lvOwogCX0KQEAgLTIwMCwxMCArMzM5LDE3IEBACiAJICogYXJlIGFsbCBkaXNhYmxlZCAqLwogCXYzMDIwX3NldF9yZWcoY2hpcCwgVjMwMjBfU1RBVFVTXzAsIDB4MCk7CiAKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQ2hpcCBhdmFpbGFibGUgYXQgcGh5c2ljYWwgYWRkcmVzcyAweCVsbHgsIgotCQkiZGF0YSBjb25uZWN0ZWQgdG8gRCVkXG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKXBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAotCQljaGlwLT5sZWZ0c2hpZnQpOworCWlmIChwZGF0YS0+dXNlX2dwaW8pCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJDaGlwIGF2YWlsYWJsZSBhdCBHUElPcyAiCisJCQkgIiVkLCAlZCwgJWQsICVkXG4iLAorCQkJIGNoaXAtPmdwaW9bVjMwMjBfQ1NdLmdwaW8sIGNoaXAtPmdwaW9bVjMwMjBfV1JdLmdwaW8sCisJCQkgY2hpcC0+Z3Bpb1tWMzAyMF9SRF0uZ3BpbywgY2hpcC0+Z3Bpb1tWMzAyMF9JT10uZ3Bpbyk7CisJZWxzZQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQ2hpcCBhdmFpbGFibGUgYXQgIgorCQkJICJwaHlzaWNhbCBhZGRyZXNzIDB4JWxseCwiCisJCQkgImRhdGEgY29ubmVjdGVkIHRvIEQlZFxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAorCQkJIGNoaXAtPmxlZnRzaGlmdCk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjaGlwKTsKIApAQCAtMjE4LDcgKzM2NCw3IEBACiAJcmV0dXJuIDA7CiAKIGVycl9pbzoKLQlpb3VubWFwKGNoaXAtPmlvYWRkcmVzcyk7CisJY2hpcC0+b3BzLT51bm1hcF9pbyhjaGlwKTsKIGVycl9jaGlwOgogCWtmcmVlKGNoaXApOwogCkBAIC0yMzMsNyArMzc5LDcgQEAKIAlpZiAocnRjKQogCQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIAotCWlvdW5tYXAoY2hpcC0+aW9hZGRyZXNzKTsKKwljaGlwLT5vcHMtPnVubWFwX2lvKGNoaXApOwogCWtmcmVlKGNoaXApOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtd204MzUwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtd204MzUwLmMKaW5kZXggNWM1ZTNhYS4uYzkxZWRjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXdtODM1MC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy13bTgzNTAuYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJZG8gewogCQlydGNfY3RybCA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9SVENfVElNRV9DT05UUk9MKTsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygxKSk7Ci0JfSB3aGlsZSAocmV0cmllcy0tICYmICEocnRjX2N0cmwgJiBXTTgzNTBfUlRDX1NUUykpOworCX0gd2hpbGUgKC0tcmV0cmllcyAmJiAhKHJ0Y19jdHJsICYgV004MzUwX1JUQ19TVFMpKTsKIAogCWlmICghcmV0cmllcykgewogCQlkZXZfZXJyKGRldiwgInRpbWVkIG91dCBvbiBzZXQgY29uZmlybWF0aW9uXG4iKTsKQEAgLTIzNiw2ICsyMzYsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB3bTgzNTBfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChlbmFibGVkKQorCQlyZXR1cm4gd204MzUwX3J0Y19zdGFydF9hbGFybSh3bTgzNTApOworCWVsc2UKKwkJcmV0dXJuIHdtODM1MF9ydGNfc3RvcF9hbGFybSh3bTgzNTApOworfQorCiBzdGF0aWMgaW50IHdtODM1MF9ydGNfc2V0YWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxybSkKIHsKIAlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTI5MSwzMCArMzAyLDE1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIEhhbmRsZSBjb21tYW5kcyBmcm9tIHVzZXItc3BhY2UKLSAqLwotc3RhdGljIGludCB3bTgzNTBfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgd204MzUwX3J0Y191cGRhdGVfaXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlyZXR1cm4gd204MzUwX3J0Y19zdG9wX2FsYXJtKHdtODM1MCk7Ci0JY2FzZSBSVENfQUlFX09OOgotCQlyZXR1cm4gd204MzUwX3J0Y19zdGFydF9hbGFybSh3bTgzNTApOwotCi0JY2FzZSBSVENfVUlFX09GRjoKLQkJd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9SVENfU0VDKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfVUlFX09OOgorCWlmIChlbmFibGVkKQogCQl3bTgzNTBfdW5tYXNrX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfUlRDX1NFQyk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9CisJZWxzZQorCQl3bTgzNTBfbWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX1JUQ19TRUMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNDUsMTEgKzM0MSwxMiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgd204MzUwX3J0Y19vcHMgPSB7Ci0JLmlvY3RsID0gd204MzUwX3J0Y19pb2N0bCwKIAkucmVhZF90aW1lID0gd204MzUwX3J0Y19yZWFkdGltZSwKIAkuc2V0X3RpbWUgPSB3bTgzNTBfcnRjX3NldHRpbWUsCiAJLnJlYWRfYWxhcm0gPSB3bTgzNTBfcnRjX3JlYWRhbGFybSwKIAkuc2V0X2FsYXJtID0gd204MzUwX3J0Y19zZXRhbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHdtODM1MF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKKwkudXBkYXRlX2lycV9lbmFibGUgPSB3bTgzNTBfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlLAogfTsKIAogI2lmZGVmIENPTkZJR19QTQpAQCAtNDQwLDcgKzQzNyw3IEBACiAJCWRvIHsKIAkJCXRpbWVjdGwgPSB3bTgzNTBfcmVnX3JlYWQod204MzUwLAogCQkJCQkJICBXTTgzNTBfUlRDX1RJTUVfQ09OVFJPTCk7Ci0JCX0gd2hpbGUgKHRpbWVjdGwgJiBXTTgzNTBfUlRDX1NUUyAmJiByZXRyaWVzLS0pOworCQl9IHdoaWxlICh0aW1lY3RsICYgV004MzUwX1JUQ19TVFMgJiYgLS1yZXRyaWVzKTsKIAogCQlpZiAocmV0cmllcyA9PSAwKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc3RhcnQ6IHRpbWVvdXRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggMmZkNjRlNS4uMDU3MDc5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC0yMzYzLDYgKzIzNjMsNyBAQAogCXJldCA9IDA7CiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQ0lPX0dPTkU6CisJY2FzZSBDSU9fQk9YRUQ6CiAJY2FzZSBDSU9fTk9fUEFUSDoKIAkJLyogRmlyc3Qgb2YgYWxsIGNhbGwgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nLiAqLwogCQlkYXNkX2Vlcl93cml0ZShkZXZpY2UsIE5VTEwsIERBU0RfRUVSX05PUEFUSCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYwppbmRleCBjNGQyZjY2Ny4uMzU0NDFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC0zMTAsOCArMzEwLDYgQEAKIAlwdXRfZGV2aWNlKCZjZGV2LT5kZXYpOwogfQogCi1zdGF0aWMgdm9pZCBjY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQogc3RhdGljIHZvaWQKIGNjd19kZXZpY2VfcmVtb3ZlX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKQEAgLTMzNSwxMSArMzMzLDEwIEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoY2Rldi0+Y2N3bG9jaywgZmxhZ3MpOwogCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKIAkJCQljY3dfZGV2aWNlX3JlbW92ZV9vcnBoYW5fY2IpOworCQlxdWV1ZV93b3JrKHNsb3dfcGF0aF93cSwgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CiAJfSBlbHNlCiAJCS8qIERlcmVnaXN0ZXIgc3ViY2hhbm5lbCwgd2hpY2ggd2lsbCBraWxsIHRoZSBjY3cgZGV2aWNlLiAqLwotCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJCQljY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIpOwotCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKKwkJY2N3X2RldmljZV9zY2hlZHVsZV9zY2hfdW5yZWdpc3RlcihjZGV2KTsKIH0KIAogLyoqCkBAIC00NzEsNyArNDY4LDcgQEAKIAlpbnQgcmV0OwogCiAJLyogRG8gZGV2aWNlIHJlY29nbml0aW9uLCBpZiBuZWVkZWQuICovCi0JaWYgKGNkZXYtPmlkLmN1X3R5cGUgPT0gMCkgeworCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfQk9YRUQpIHsKIAkJcmV0ID0gY2N3X2RldmljZV9yZWNvZ25pdGlvbihjZGV2KTsKIAkJaWYgKHJldCkgewogCQkJQ0lPX01TR19FVkVOVCgwLCAiQ291bGRuJ3Qgc3RhcnQgcmVjb2duaXRpb24gIgpAQCAtNDgyLDE3ICs0NzksMjEgQEAKIAkJfQogCQl3YWl0X2V2ZW50KGNkZXYtPnByaXZhdGUtPndhaXRfcSwKIAkJCSAgIGNkZXYtPnByaXZhdGUtPmZsYWdzLnJlY29nX2RvbmUpOworCQlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX09GRkxJTkUpCisJCQkvKiByZWNvZ25pdGlvbiBmYWlsZWQgKi8KKwkJCXJldHVybiAtRUFHQUlOOwogCX0KIAlpZiAoY2Rldi0+ZHJ2ICYmIGNkZXYtPmRydi0+c2V0X29ubGluZSkKIAkJY2N3X2RldmljZV9zZXRfb25saW5lKGNkZXYpOwogCXJldHVybiAwOwogfQorCiBzdGF0aWMgaW50IG9ubGluZV9zdG9yZV9oYW5kbGVfb25saW5lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBpbnQgZm9yY2UpCiB7CiAJaW50IHJldDsKIAogCXJldCA9IG9ubGluZV9zdG9yZV9yZWNvZ19hbmRfb25saW5lKGNkZXYpOwotCWlmIChyZXQpCisJaWYgKHJldCAmJiAhZm9yY2UpCiAJCXJldHVybiByZXQ7CiAJaWYgKGZvcmNlICYmIGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9CT1hFRCkgewogCQlyZXQgPSBjY3dfZGV2aWNlX3N0bGNrKGNkZXYpOwpAQCAtNTAwLDcgKzUwMSw5IEBACiAJCQlyZXR1cm4gcmV0OwogCQlpZiAoY2Rldi0+aWQuY3VfdHlwZSA9PSAwKQogCQkJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfTk9UX09QRVI7Ci0JCW9ubGluZV9zdG9yZV9yZWNvZ19hbmRfb25saW5lKGNkZXYpOworCQlyZXQgPSBvbmxpbmVfc3RvcmVfcmVjb2dfYW5kX29ubGluZShjZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTEyLDcgKzUxNSwxMSBAQAogCWludCBmb3JjZSwgcmV0OwogCXVuc2lnbmVkIGxvbmcgaTsKIAotCWlmIChhdG9taWNfY21weGNoZygmY2Rldi0+cHJpdmF0ZS0+b25vZmYsIDAsIDEpICE9IDApCisJaWYgKChjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfT0ZGTElORSAmJgorCSAgICAgY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX09OTElORSAmJgorCSAgICAgY2Rldi0+cHJpdmF0ZS0+c3RhdGUgIT0gREVWX1NUQVRFX0JPWEVEICYmCisJICAgICBjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfRElTQ09OTkVDVEVEKSB8fAorCSAgICBhdG9taWNfY21weGNoZygmY2Rldi0+cHJpdmF0ZS0+b25vZmYsIDAsIDEpICE9IDApCiAJCXJldHVybiAtRUFHQUlOOwogCiAJaWYgKGNkZXYtPmRydiAmJiAhdHJ5X21vZHVsZV9nZXQoY2Rldi0+ZHJ2LT5vd25lcikpIHsKQEAgLTEwMTQsNiArMTAyMSwxMyBAQAogCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKIH0KIAordm9pZCBjY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQoreworCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLAorCQkgICAgIGNjd19kZXZpY2VfY2FsbF9zY2hfdW5yZWdpc3Rlcik7CisJcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOworfQorCiAvKgogICogc3ViY2hhbm5lbCByZWNvZ25pdGlvbiBkb25lLiBDYWxsZWQgZnJvbSB0aGUgc3RhdGUgbWFjaGluZS4KICAqLwpAQCAtMTAyNSwxOSArMTAzOSwxNyBAQAogCQlyZXR1cm47CiAJfQogCXN3aXRjaCAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUpIHsKKwljYXNlIERFVl9TVEFURV9CT1hFRDoKKwkJLyogRGV2aWNlIGRpZCBub3QgcmVzcG9uZCBpbiB0aW1lLiAqLwogCWNhc2UgREVWX1NUQVRFX05PVF9PUEVSOgogCQljZGV2LT5wcml2YXRlLT5mbGFncy5yZWNvZ19kb25lID0gMTsKIAkJLyogUmVtb3ZlIGRldmljZSBmb3VuZCBub3Qgb3BlcmF0aW9uYWwuICovCiAJCWlmICghZ2V0X2RldmljZSgmY2Rldi0+ZGV2KSkKIAkJCWJyZWFrOwotCQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJCSAgICAgY2N3X2RldmljZV9jYWxsX3NjaF91bnJlZ2lzdGVyKTsKLQkJcXVldWVfd29yayhzbG93X3BhdGhfd3EsICZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmspOworCQljY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKGNkZXYpOwogCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2N3X2RldmljZV9pbml0X2NvdW50KSkKIAkJCXdha2VfdXAoJmNjd19kZXZpY2VfaW5pdF93cSk7CiAJCWJyZWFrOwotCWNhc2UgREVWX1NUQVRFX0JPWEVEOgotCQkvKiBEZXZpY2UgZGlkIG5vdCByZXNwb25kIGluIHRpbWUuICovCiAJY2FzZSBERVZfU1RBVEVfT0ZGTElORToKIAkJLyogCiAJCSAqIFdlIGNhbid0IHJlZ2lzdGVyIHRoZSBkZXZpY2UgaW4gaW50ZXJydXB0IGNvbnRleHQgc28KQEAgLTE1NTEsOCArMTU2Myw3IEBACiAJCWdvdG8gb3V0OwogCUNJT19NU0dfRVZFTlQoMywgImNjdzogcHVyZ2luZyAwLiV4LiUwNHhcbiIsIHByaXYtPmRldl9pZC5zc2lkLAogCQkgICAgICBwcml2LT5kZXZfaWQuZGV2bm8pOwotCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLCBjY3dfZGV2aWNlX2NhbGxfc2NoX3VucmVnaXN0ZXIpOwotCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKKwljY3dfZGV2aWNlX3NjaGVkdWxlX3NjaF91bnJlZ2lzdGVyKGNkZXYpOwogCiBvdXQ6CiAJLyogQWJvcnQgbG9vcCBpbiBjYXNlIG9mIHBlbmRpbmcgc2lnbmFsLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaCBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKaW5kZXggODVlMDE4NC4uZjFjYmJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCkBAIC04Nyw2ICs4Nyw3IEBACiBpbnQgY2N3X2RldmljZV9yZWNvZ25pdGlvbihzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIGludCBjY3dfZGV2aWNlX29ubGluZShzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIGludCBjY3dfZGV2aWNlX29mZmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKik7Cit2b2lkIGNjd19kZXZpY2Vfc2NoZWR1bGVfc2NoX3VucmVnaXN0ZXIoc3RydWN0IGNjd19kZXZpY2UgKik7CiBpbnQgY2N3X3B1cmdlX2JsYWNrbGlzdGVkKHZvaWQpOwogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZvciBkZXZpY2Ugc3RhdHVzIGFuZCBiYXNpYyBzZW5zZSBzdHVmZi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKaW5kZXggODdiNGJmYy4uZTQ2MDQ5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMKQEAgLTI1NiwxMyArMjU2LDEyIEBACiAJCW9sZF9scG0gPSAwOwogCWlmIChzY2gtPmxwbSAhPSBvbGRfbHBtKQogCQlfX3JlY292ZXJfbG9zdF9jaHBpZHMoc2NoLCBvbGRfbHBtKTsKLQlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX0RJU0NPTk5FQ1RFRF9TRU5TRV9JRCkgewotCQlpZiAoc3RhdGUgPT0gREVWX1NUQVRFX05PVF9PUEVSKSB7Ci0JCQljZGV2LT5wcml2YXRlLT5mbGFncy5yZWNvZ19kb25lID0gMTsKLQkJCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX0RJU0NPTk5FQ1RFRDsKLQkJCXJldHVybjsKLQkJfQotCQkvKiBCb3hlZCBkZXZpY2VzIGRvbid0IG5lZWQgZXh0cmEgdHJlYXRtZW50LiAqLworCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSA9PSBERVZfU1RBVEVfRElTQ09OTkVDVEVEX1NFTlNFX0lEICYmCisJICAgIChzdGF0ZSA9PSBERVZfU1RBVEVfTk9UX09QRVIgfHwgc3RhdGUgPT0gREVWX1NUQVRFX0JPWEVEKSkgeworCQljZGV2LT5wcml2YXRlLT5mbGFncy5yZWNvZ19kb25lID0gMTsKKwkJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfRElTQ09OTkVDVEVEOworCQl3YWtlX3VwKCZjZGV2LT5wcml2YXRlLT53YWl0X3EpOworCQlyZXR1cm47CiAJfQogCW5vdGlmeSA9IDA7CiAJc2FtZV9kZXYgPSAwOyAvKiBLZWVwIHRoZSBjb21waWxlciBxdWlldC4uLiAqLwpAQCAtMjc0LDcgKzI3Myw3IEBACiAJCQkgICAgICBzY2gtPnNjaGlkLnNzaWQsIHNjaC0+c2NoaWQuc2NoX25vKTsKIAkJYnJlYWs7CiAJY2FzZSBERVZfU1RBVEVfT0ZGTElORToKLQkJaWYgKGNkZXYtPnByaXZhdGUtPnN0YXRlID09IERFVl9TVEFURV9ESVNDT05ORUNURURfU0VOU0VfSUQpIHsKKwkJaWYgKGNkZXYtPm9ubGluZSkgewogCQkJc2FtZV9kZXYgPSBjY3dfZGV2aWNlX2hhbmRsZV9vcGVyKGNkZXYpOwogCQkJbm90aWZ5ID0gMTsKIAkJfQpAQCAtMzA3LDEyICszMDYsMTcgQEAKIAkJCSAgICAgICIgc3ViY2hhbm5lbCAwLiV4LiUwNHhcbiIsCiAJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sCiAJCQkgICAgICBzY2gtPnNjaGlkLnNzaWQsIHNjaC0+c2NoaWQuc2NoX25vKTsKKwkJaWYgKGNkZXYtPmlkLmN1X3R5cGUgIT0gMCkgeyAvKiBkZXZpY2Ugd2FzIHJlY29nbml6ZWQgYmVmb3JlICovCisJCQljZGV2LT5wcml2YXRlLT5mbGFncy5yZWNvZ19kb25lID0gMTsKKwkJCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX0JPWEVEOworCQkJd2FrZV91cCgmY2Rldi0+cHJpdmF0ZS0+d2FpdF9xKTsKKwkJCXJldHVybjsKKwkJfQogCQlicmVhazsKIAl9CiAJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBzdGF0ZTsKIAlpb19zdWJjaGFubmVsX3JlY29nX2RvbmUoY2Rldik7Ci0JaWYgKHN0YXRlICE9IERFVl9TVEFURV9OT1RfT1BFUikKLQkJd2FrZV91cCgmY2Rldi0+cHJpdmF0ZS0+d2FpdF9xKTsKKwl3YWtlX3VwKCZjZGV2LT5wcml2YXRlLT53YWl0X3EpOwogfQogCiAvKgpAQCAtMzkwLDEwICszOTQsMTMgQEAKIAogCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gc3RhdGU7CiAKLQotCWlmIChzdGF0ZSA9PSBERVZfU1RBVEVfQk9YRUQpCisJaWYgKHN0YXRlID09IERFVl9TVEFURV9CT1hFRCkgewogCQlDSU9fTVNHX0VWRU5UKDAsICJCb3hlZCBkZXZpY2UgJTA0eCBvbiBzdWJjaGFubmVsICUwNHhcbiIsCiAJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuZGV2bm8sIHNjaC0+c2NoaWQuc2NoX25vKTsKKwkJaWYgKGNkZXYtPm9ubGluZSAmJiAhY2N3X2RldmljZV9ub3RpZnkoY2RldiwgQ0lPX0JPWEVEKSkKKwkJCWNjd19kZXZpY2Vfc2NoZWR1bGVfc2NoX3VucmVnaXN0ZXIoY2Rldik7CisJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvbm90aWZ5ID0gMDsKKwl9CiAKIAlpZiAoY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkpIHsKIAkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZG9ub3RpZnkgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX29mZmwuYworKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9vZmZsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfb2ZmbC5oCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCmluZGV4IDFmZTFlMmUuLmNmYjBkY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwpAQCAtMTc2LDYgKzE3NiwxMSBAQAogCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCBaRkNQX1NUQVRVU19DT01NT05fRVJQX0ZBSUxFRCwKIAkJCQkJImNjbm90aTQiLCBOVUxMKTsKIAkJYnJlYWs7CisJY2FzZSBDSU9fQk9YRUQ6CisJCWRldl93YXJuKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYsCisJCQkgIlRoZSBjY3cgZGV2aWNlIGRpZCBub3QgcmVzcG9uZCBpbiB0aW1lLlxuIik7CisJCXpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oYWRhcHRlciwgMCwgImNjbm90aTUiLCBOVUxMKTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mYy5jCmluZGV4IGFhYjgxMjMuLmU4ZDAzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZmMuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZjLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAogc3RhdGljIHZvaWQgemZjcF93a2FfcG9ydF9vZmZsaW5lKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkdyA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgemZjcF93a2FfcG9ydCAqd2thX3BvcnQgPQogCQkJY29udGFpbmVyX29mKGR3LCBzdHJ1Y3QgemZjcF93a2FfcG9ydCwgd29yayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9LY29uZmlnIGIvZHJpdmVycy9zY3NpL0tjb25maWcKaW5kZXggZTJmNDRlNi4uMjAyOTdjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL0tjb25maWcKQEAgLTEzODAsNyArMTM4MCw3IEBACiAJYm9vbCAiRW11bGV4IExpZ2h0UHVsc2UgRmlicmUgQ2hhbm5lbCBkZWJ1Z2ZzIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTQ1NJX0xQRkMgJiYgREVCVUdfRlMKIAloZWxwCi0JICBUaGlzIG1ha2VzIGRlYnVnZ2luZyBpbmZvbWF0aW9uIGZyb20gdGhlIGxwZmMgZHJpdmVyCisJICBUaGlzIG1ha2VzIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBscGZjIGRyaXZlcgogCSAgYXZhaWxhYmxlIHZpYSB0aGUgZGVidWdmcyBmaWxlc3lzdGVtLgogCiBjb25maWcgU0NTSV9TSU03MTAKQEAgLTEzODgsNyArMTM4OCw3IEBACiAJZGVwZW5kcyBvbiAoRUlTQSB8fCBNQ0EpICYmIFNDU0kKIAlzZWxlY3QgU0NTSV9TUElfQVRUUlMKIAktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBmb3IgTkNSNTNjNzEwIGJhc2VkIFNDU0kgaG9zdCBhZGFwdGVycy4KKwkgIFRoaXMgZHJpdmVyIGlzIGZvciBOQ1I1M2M3MTAgYmFzZWQgU0NTSSBob3N0IGFkYXB0ZXJzLgogCiAJICBJdCBjdXJyZW50bHkgc3VwcG9ydHMgQ29tcGFxIEVJU0EgY2FyZHMgYW5kIE5DUiBNQ0EgY2FyZHMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggOWJlMTFiMC4uYWE5ZDNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC0xMzc0LDcgKzEzNzQsNyBAQAogCWRlcGVuZHMgb24gQkxBQ0tGSU4gJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAJaGVscAotCSAgRW5ibGUgc3VwcG9ydCBTUE9SVCBlbXVsYXRlIFVBUlQgb24gQmxhY2tmaW4gc2VyaWVzLgorCSAgRW5hYmxlIFNQT1JUIGVtdWxhdGUgVUFSVCBvbiBCbGFja2ZpbiBzZXJpZXMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJmaW5fc3BvcnRfdWFydC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKaW5kZXggOGY1OGY3Zi4uYjM0OTdkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTEwMjAsNyArMTAyMCw4IEBACiAKIAkvKiBHZXQgY3VycmVudCBtb2RlIHJlZ2lzdGVyICovCiAJbW9kZSA9IFVBUlRfR0VUX01SKHBvcnQpICYgfihBVE1FTF9VU19VU0NMS1MgfCBBVE1FTF9VU19DSFJMCi0JCQkJCXwgQVRNRUxfVVNfTkJTVE9QIHwgQVRNRUxfVVNfUEFSKTsKKwkJCQkJfCBBVE1FTF9VU19OQlNUT1AgfCBBVE1FTF9VU19QQVIKKwkJCQkJfCBBVE1FTF9VU19VU01PREUpOwogCiAJYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIHBvcnQtPnVhcnRjbGsgLyAxNik7CiAJcXVvdCA9IHVhcnRfZ2V0X2Rpdmlzb3IocG9ydCwgYmF1ZCk7CkBAIC0xMDY1LDYgKzEwNjYsMTIgQEAKIAl9IGVsc2UKIAkJbW9kZSB8PSBBVE1FTF9VU19QQVJfTk9ORTsKIAorCS8qIGhhcmR3YXJlIGhhbmRzaGFrZSAoUlRTL0NUUykgKi8KKwlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpCisJCW1vZGUgfD0gQVRNRUxfVVNfVVNNT0RFX0hXSFM7CisJZWxzZQorCQltb2RlIHw9IEFUTUVMX1VTX1VTTU9ERV9OT1JNQUw7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCiAJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IEFUTUVMX1VTX09WUkU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tY2YuYyBiL2RyaXZlcnMvc2VyaWFsL21jZi5jCmluZGV4IDU2ODQxZmUuLjBlZWZiMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21jZi5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21jZi5jCkBAIC01MTMsNyArNTEzLDcgQEAKIAlpbnQgcGFyaXR5ID0gJ24nOwogCWludCBmbG93ID0gJ24nOwogCi0JaWYgKChjby0+aW5kZXggPj0gMCkgJiYgKGNvLT5pbmRleCA8PSBNQ0ZfTUFYUE9SVFMpKQorCWlmICgoY28tPmluZGV4IDwgMCkgfHwgKGNvLT5pbmRleCA+PSBNQ0ZfTUFYUE9SVFMpKQogCQljby0+aW5kZXggPSAwOwogCXBvcnQgPSAmbWNmX3BvcnRzW2NvLT5pbmRleF0ucG9ydDsKIAlpZiAocG9ydC0+bWVtYmFzZSA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKaW5kZXggNDJmNGU2Ni4uYjBiYjI5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMTY4MiwyMCArMTY4NCwyMCBAQAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAotc3RhdGljIGludCB1YXJ0X2xpbmVfaW5mbyhjaGFyICpidWYsIHN0cnVjdCB1YXJ0X2RyaXZlciAqZHJ2LCBpbnQgaSkKK3N0YXRpYyB2b2lkIHVhcnRfbGluZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIGludCBpKQogewogCXN0cnVjdCB1YXJ0X3N0YXRlICpzdGF0ZSA9IGRydi0+c3RhdGUgKyBpOwogCWludCBwbV9zdGF0ZTsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gc3RhdGUtPnBvcnQ7CiAJY2hhciBzdGF0X2J1ZlszMl07CiAJdW5zaWduZWQgaW50IHN0YXR1czsKLQlpbnQgbW1pbywgcmV0OworCWludCBtbWlvOwogCiAJaWYgKCFwb3J0KQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCiAJbW1pbyA9IHBvcnQtPmlvdHlwZSA+PSBVUElPX01FTTsKLQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVkOiB1YXJ0OiVzICVzJTA4bGxYIGlycTolZCIsCisJc2VxX3ByaW50ZihtLCAiJWQ6IHVhcnQ6JXMgJXMlMDhsbFggaXJxOiVkIiwKIAkJCXBvcnQtPmxpbmUsIHVhcnRfdHlwZShwb3J0KSwKIAkJCW1taW8gPyAibW1pbzoweCIgOiAicG9ydDoiLAogCQkJbW1pbyA/ICh1bnNpZ25lZCBsb25nIGxvbmcpcG9ydC0+bWFwYmFzZQpAQCAtMTcwMyw4ICsxNzA1LDggQEAKIAkJCXBvcnQtPmlycSk7CiAKIAlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1VOS05PV04pIHsKLQkJc3RyY2F0KGJ1ZiwgIlxuIik7Ci0JCXJldHVybiByZXQgKyAxOworCQlzZXFfcHV0YyhtLCAnXG4nKTsKKwkJcmV0dXJuOwogCX0KIAogCWlmIChjYXBhYmxlKENBUF9TWVNfQURNSU4pKSB7CkBAIC0xNzE5LDE5ICsxNzIxLDE5IEBACiAJCQl1YXJ0X2NoYW5nZV9wbShzdGF0ZSwgcG1fc3RhdGUpOwogCQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CiAKLQkJcmV0ICs9IHNwcmludGYoYnVmICsgcmV0LCAiIHR4OiVkIHJ4OiVkIiwKKwkJc2VxX3ByaW50ZihtLCAiIHR4OiVkIHJ4OiVkIiwKIAkJCQlwb3J0LT5pY291bnQudHgsIHBvcnQtPmljb3VudC5yeCk7CiAJCWlmIChwb3J0LT5pY291bnQuZnJhbWUpCi0JCQlyZXQgKz0gc3ByaW50ZihidWYgKyByZXQsICIgZmU6JWQiLAorCQkJc2VxX3ByaW50ZihtLCAiIGZlOiVkIiwKIAkJCQlwb3J0LT5pY291bnQuZnJhbWUpOwogCQlpZiAocG9ydC0+aWNvdW50LnBhcml0eSkKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZiArIHJldCwgIiBwZTolZCIsCisJCQlzZXFfcHJpbnRmKG0sICIgcGU6JWQiLAogCQkJCXBvcnQtPmljb3VudC5wYXJpdHkpOwogCQlpZiAocG9ydC0+aWNvdW50LmJyaykKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZiArIHJldCwgIiBicms6JWQiLAorCQkJc2VxX3ByaW50ZihtLCAiIGJyazolZCIsCiAJCQkJcG9ydC0+aWNvdW50LmJyayk7CiAJCWlmIChwb3J0LT5pY291bnQub3ZlcnJ1bikKLQkJCXJldCArPSBzcHJpbnRmKGJ1ZiArIHJldCwgIiBvZTolZCIsCisJCQlzZXFfcHJpbnRmKG0sICIgb2U6JWQiLAogCQkJCXBvcnQtPmljb3VudC5vdmVycnVuKTsKIAogI2RlZmluZSBJTkZPQklUKGJpdCwgc3RyKSBcCkBAIC0xNzUzLDQ1ICsxNzU1LDM5IEBACiAJCVNUQVRCSVQoVElPQ01fUk5HLCAifFJJIik7CiAJCWlmIChzdGF0X2J1ZlswXSkKIAkJCXN0YXRfYnVmWzBdID0gJyAnOwotCQlzdHJjYXQoc3RhdF9idWYsICJcbiIpOwogCi0JCXJldCArPSBzcHJpbnRmKGJ1ZiArIHJldCwgc3RhdF9idWYpOwotCX0gZWxzZSB7Ci0JCXN0cmNhdChidWYsICJcbiIpOwotCQlyZXQrKzsKKwkJc2VxX3B1dHMobSwgc3RhdF9idWYpOwogCX0KKwlzZXFfcHV0YyhtLCAnXG4nKTsKICN1bmRlZiBTVEFUQklUCiAjdW5kZWYgSU5GT0JJVAotCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdWFydF9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IHVhcnRfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgdHR5X2RyaXZlciAqdHR5ZHJ2ID0gZGF0YTsKKwlzdHJ1Y3QgdHR5X2RyaXZlciAqdHR5ZHJ2ID0gbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgdWFydF9kcml2ZXIgKmRydiA9IHR0eWRydi0+ZHJpdmVyX3N0YXRlOwotCWludCBpLCBsZW4gPSAwLCBsOwotCW9mZl90IGJlZ2luID0gMDsKKwlpbnQgaTsKIAotCWxlbiArPSBzcHJpbnRmKHBhZ2UsICJzZXJpbmZvOjEuMCBkcml2ZXIlcyVzIHJldmlzaW9uOiVzXG4iLAorCXNlcV9wcmludGYobSwgInNlcmluZm86MS4wIGRyaXZlciVzJXMgcmV2aXNpb246JXNcbiIsCiAJCQkiIiwgIiIsICIiKTsKLQlmb3IgKGkgPSAwOyBpIDwgZHJ2LT5uciAmJiBsZW4gPCBQQUdFX1NJWkUgLSA5NjsgaSsrKSB7Ci0JCWwgPSB1YXJ0X2xpbmVfaW5mbyhwYWdlICsgbGVuLCBkcnYsIGkpOwotCQlsZW4gKz0gbDsKLQkJaWYgKGxlbiArIGJlZ2luID4gb2ZmICsgY291bnQpCi0JCQlnb3RvIGRvbmU7Ci0JCWlmIChsZW4gKyBiZWdpbiA8IG9mZikgewotCQkJYmVnaW4gKz0gbGVuOwotCQkJbGVuID0gMDsKLQkJfQotCX0KLQkqZW9mID0gMTsKLSBkb25lOgotCWlmIChvZmYgPj0gbGVuICsgYmVnaW4pCi0JCXJldHVybiAwOwotCSpzdGFydCA9IHBhZ2UgKyAob2ZmIC0gYmVnaW4pOwotCXJldHVybiAoY291bnQgPCBiZWdpbiArIGxlbiAtIG9mZikgPyBjb3VudCA6IChiZWdpbiArIGxlbiAtIG9mZik7CisJZm9yIChpID0gMDsgaSA8IGRydi0+bnI7IGkrKykKKwkJdWFydF9saW5lX2luZm8obSwgZHJ2LCBpKTsKKwlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCB1YXJ0X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdWFydF9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YXJ0X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdWFydF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEUpIHx8IGRlZmluZWQoQ09ORklHX0NPTlNPTEVfUE9MTCkKQEAgLTIyOTksNyArMjI5NSw3IEBACiAJLmJyZWFrX2N0bAk9IHVhcnRfYnJlYWtfY3RsLAogCS53YWl0X3VudGlsX3NlbnQ9IHVhcnRfd2FpdF91bnRpbF9zZW50LAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JLnJlYWRfcHJvYwk9IHVhcnRfcmVhZF9wcm9jLAorCS5wcm9jX2ZvcHMJPSAmdWFydF9wcm9jX2ZvcHMsCiAjZW5kaWYKIAkudGlvY21nZXQJPSB1YXJ0X3Rpb2NtZ2V0LAogCS50aW9jbXNldAk9IHVhcnRfdGlvY21zZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL2ludGMuYyBiL2RyaXZlcnMvc2gvaW50Yy5jCmluZGV4IDIyNjlmYmMuLjdmYjliNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvaW50Yy5jCisrKyBiL2RyaXZlcnMvc2gvaW50Yy5jCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX2ludGMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKICNkZWZpbmUgX0lOVENfTUsoZm4sIG1vZGUsIGFkZHJfZSwgYWRkcl9kLCB3aWR0aCwgc2hpZnQpIFwKIAkoKHNoaWZ0KSB8ICgod2lkdGgpIDw8IDUpIHwgKChmbikgPDwgOSkgfCAoKG1vZGUpIDw8IDEzKSB8IFwKQEAgLTQwLDYgKzQyLDggQEAKIH07CiAKIHN0cnVjdCBpbnRjX2Rlc2NfaW50IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHN5c19kZXZpY2Ugc3lzZGV2OwogCXVuc2lnbmVkIGxvbmcgKnJlZzsKICNpZmRlZiBDT05GSUdfU01QCiAJdW5zaWduZWQgbG9uZyAqc21wOwpAQCAtNTIsNiArNTYsOCBAQAogCXN0cnVjdCBpcnFfY2hpcCBjaGlwOwogfTsKIAorc3RhdGljIExJU1RfSEVBRChpbnRjX2xpc3QpOworCiAjaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBJU19TTVAoeCkgeC5zbXAKICNkZWZpbmUgSU5UQ19SRUcoZCwgeCwgYykgKGQtPnJlZ1soeCldICsgKChkLT5zbXBbKHgpXSAmIDB4ZmYpICogYykpCkBAIC0yMzIsNiArMjM4LDExIEBACiAJfQogfQogCitzdGF0aWMgaW50IGludGNfc2V0X3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQoreworCXJldHVybiAwOyAvKiBhbGxvdyB3YWtldXAsIGJ1dCBzZXR1cCBoYXJkd2FyZSBpbiBpbnRjX3N1c3BlbmQoKSAqLworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NINEEpCiBzdGF0aWMgdm9pZCBpbnRjX21hc2tfYWNrKHVuc2lnbmVkIGludCBpcnEpCiB7CkBAIC02NjQsNiArNjc1LDkgQEAKIAogCWQgPSBhbGxvY19ib290bWVtKHNpemVvZigqZCkpOwogCisJSU5JVF9MSVNUX0hFQUQoJmQtPmxpc3QpOworCWxpc3RfYWRkKCZkLT5saXN0LCAmaW50Y19saXN0KTsKKwogCWQtPm5yX3JlZyA9IGRlc2MtPm1hc2tfcmVncyA/IGRlc2MtPm5yX21hc2tfcmVncyAqIDIgOiAwOwogCWQtPm5yX3JlZyArPSBkZXNjLT5wcmlvX3JlZ3MgPyBkZXNjLT5ucl9wcmlvX3JlZ3MgKiAyIDogMDsKIAlkLT5ucl9yZWcgKz0gZGVzYy0+c2Vuc2VfcmVncyA/IGRlc2MtPm5yX3NlbnNlX3JlZ3MgOiAwOwpAQCAtNzA3LDcgKzcyMSwxMSBAQAogCWQtPmNoaXAubWFzayA9IGludGNfZGlzYWJsZTsKIAlkLT5jaGlwLnVubWFzayA9IGludGNfZW5hYmxlOwogCWQtPmNoaXAubWFza19hY2sgPSBpbnRjX2Rpc2FibGU7CisJZC0+Y2hpcC5lbmFibGUgPSBpbnRjX2VuYWJsZTsKKwlkLT5jaGlwLmRpc2FibGUgPSBpbnRjX2Rpc2FibGU7CisJZC0+Y2hpcC5zaHV0ZG93biA9IGludGNfZGlzYWJsZTsKIAlkLT5jaGlwLnNldF90eXBlID0gaW50Y19zZXRfc2Vuc2U7CisJZC0+Y2hpcC5zZXRfd2FrZSA9IGludGNfc2V0X3dha2U7CiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU0g0QSkKIAlpZiAoZGVzYy0+YWNrX3JlZ3MpIHsKQEAgLTc1OCwzICs3NzYsNTMgQEAKIAkJaW50Y19yZWdpc3Rlcl9pcnEoZGVzYywgZCwgdmVjdC0+ZW51bV9pZCwgZXZ0MmlycSh2ZWN0LT52ZWN0KSk7CiAJfQogfQorCitzdGF0aWMgaW50IGludGNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGludGNfZGVzY19pbnQgKmQ7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCWludCBpcnE7CisKKwkvKiBnZXQgaW50YyBjb250cm9sbGVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN5c2RldiAqLworCWQgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaW50Y19kZXNjX2ludCwgc3lzZGV2KTsKKworCS8qIGVuYWJsZSB3YWtldXAgaXJxcyBiZWxvbmdpbmcgdG8gdGhpcyBpbnRjIGNvbnRyb2xsZXIgKi8KKwlmb3JfZWFjaF9pcnFfZGVzYyhpcnEsIGRlc2MpIHsKKwkJaWYgKChkZXNjLT5zdGF0dXMgJiBJUlFfV0FLRVVQKSAmJiAoZGVzYy0+Y2hpcCA9PSAmZC0+Y2hpcCkpCisJCQlpbnRjX2VuYWJsZShpcnEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBpbnRjX3N5c2Rldl9jbGFzcyA9IHsKKwkubmFtZSA9ICJpbnRjIiwKKwkuc3VzcGVuZCA9IGludGNfc3VzcGVuZCwKK307CisKKy8qIHJlZ2lzdGVyIHRoaXMgaW50YyBhcyBzeXNkZXYgdG8gYWxsb3cgc3VzcGVuZC9yZXN1bWUgKi8KK3N0YXRpYyBpbnQgX19pbml0IHJlZ2lzdGVyX2ludGNfc3lzZGV2cyh2b2lkKQoreworCXN0cnVjdCBpbnRjX2Rlc2NfaW50ICpkOworCWludCBlcnJvcjsKKwlpbnQgaWQgPSAwOworCisJZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmludGNfc3lzZGV2X2NsYXNzKTsKKwlpZiAoIWVycm9yKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZCwgJmludGNfbGlzdCwgbGlzdCkgeworCQkJZC0+c3lzZGV2LmlkID0gaWQ7CisJCQlkLT5zeXNkZXYuY2xzID0gJmludGNfc3lzZGV2X2NsYXNzOworCQkJZXJyb3IgPSBzeXNkZXZfcmVnaXN0ZXIoJmQtPnN5c2Rldik7CisJCQlpZiAoZXJyb3IpCisJCQkJYnJlYWs7CisJCQlpZCsrOworCQl9CisJfQorCisJaWYgKGVycm9yKQorCQlwcl93YXJuaW5nKCJpbnRjOiBzeXNkZXYgcmVnaXN0cmF0aW9uIGVycm9yXG4iKTsKKworCXJldHVybiBlcnJvcjsKK30KKworZGV2aWNlX2luaXRjYWxsKHJlZ2lzdGVyX2ludGNfc3lzZGV2cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jIGIvZHJpdmVycy9zcGkvc3BpX2dwaW8uYwppbmRleCBkMjg2NmMyLi4yNmJkMDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9ncGlvLmMKQEAgLTE3OCw4ICsxNzgsMTAgQEAKIAlpZiAoaXNfYWN0aXZlKQogCQlzZXRzY2soc3BpLCBzcGktPm1vZGUgJiBTUElfQ1BPTCk7CiAKLQkvKiBTUEkgaXMgbm9ybWFsbHkgYWN0aXZlLWxvdyAqLwotCWdwaW9fc2V0X3ZhbHVlKGNzLCAoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpID8gaXNfYWN0aXZlIDogIWlzX2FjdGl2ZSk7CisJaWYgKGNzICE9IFNQSV9HUElPX05PX0NISVBTRUxFQ1QpIHsKKwkJLyogU1BJIGlzIG5vcm1hbGx5IGFjdGl2ZS1sb3cgKi8KKwkJZ3Bpb19zZXRfdmFsdWUoY3MsIChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCkgPyBpc19hY3RpdmUgOiAhaXNfYWN0aXZlKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgc3BpX2dwaW9fc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKQEAgLTE5MSwxNSArMTkzLDE3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFzcGktPmNvbnRyb2xsZXJfc3RhdGUpIHsKLQkJc3RhdHVzID0gZ3Bpb19yZXF1ZXN0KGNzLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKLQkJaWYgKHN0YXR1cykKLQkJCXJldHVybiBzdGF0dXM7Ci0JCXN0YXR1cyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChjcywgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOworCQlpZiAoY3MgIT0gU1BJX0dQSU9fTk9fQ0hJUFNFTEVDVCkgeworCQkJc3RhdHVzID0gZ3Bpb19yZXF1ZXN0KGNzLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJcmV0dXJuIHN0YXR1czsKKwkJCXN0YXR1cyA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChjcywgc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpOworCQl9CiAJfQogCWlmICghc3RhdHVzKQogCQlzdGF0dXMgPSBzcGlfYml0YmFuZ19zZXR1cChzcGkpOwogCWlmIChzdGF0dXMpIHsKLQkJaWYgKCFzcGktPmNvbnRyb2xsZXJfc3RhdGUpCisJCWlmICghc3BpLT5jb250cm9sbGVyX3N0YXRlICYmIGNzICE9IFNQSV9HUElPX05PX0NISVBTRUxFQ1QpCiAJCQlncGlvX2ZyZWUoY3MpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwpAQCAtMjA5LDcgKzIxMyw4IEBACiB7CiAJdW5zaWduZWQgbG9uZwljcyA9ICh1bnNpZ25lZCBsb25nKSBzcGktPmNvbnRyb2xsZXJfZGF0YTsKIAotCWdwaW9fZnJlZShjcyk7CisJaWYgKGNzICE9IFNQSV9HUElPX05PX0NISVBTRUxFQ1QpCisJCWdwaW9fZnJlZShjcyk7CiAJc3BpX2JpdGJhbmdfY2xlYW51cChzcGkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jIGIvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYwppbmRleCA0NGEyYjQ2Li5mNDU3M2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtMjMsNyArMjUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpX2JpdGJhbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3NwaS5oPgogCisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9zb2MuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTc5LDcgKzg3LDcgQEAKIAl1MzIoKmdldF90eCkgKHN0cnVjdCBtcGM4M3h4X3NwaSAqKTsKIAogCXVuc2lnbmVkIGludCBjb3VudDsKLQlpbnQgaXJxOworCXVuc2lnbmVkIGludCBpcnE7CiAKIAl1bnNpZ25lZCBuc2VjczsJCS8qIChjbG9jayBjeWNsZSB0aW1lKS8yICovCiAKQEAgLTg5LDkgKzk3LDYgQEAKIAogCWJvb2wgcWVfbW9kZTsKIAotCXZvaWQgKCphY3RpdmF0ZV9jcykgKHU4IGNzLCB1OCBwb2xhcml0eSk7Ci0Jdm9pZCAoKmRlYWN0aXZhdGVfY3MpICh1OCBjcywgdTggcG9sYXJpdHkpOwotCiAJdTggYnVzeTsKIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrcXVldWU7CkBAIC0xMjMsNiArMTI4LDcgQEAKIH0KIAogI2RlZmluZSBNUEM4M1hYX1NQSV9SWF9CVUYodHlwZSkgCQkJCQkgIFwKK3N0YXRpYwkJCQkJCQkJCSAgXAogdm9pZCBtcGM4M3h4X3NwaV9yeF9idWZfIyN0eXBlKHUzMiBkYXRhLCBzdHJ1Y3QgbXBjODN4eF9zcGkgKm1wYzgzeHhfc3BpKSBcCiB7CQkJCQkJCQkJICBcCiAJdHlwZSAqIHJ4ID0gbXBjODN4eF9zcGktPnJ4OwkJCQkJICBcCkBAIC0xMzEsNiArMTM3LDcgQEAKIH0KIAogI2RlZmluZSBNUEM4M1hYX1NQSV9UWF9CVUYodHlwZSkJCQkJXAorc3RhdGljCQkJCQkJCQlcCiB1MzIgbXBjODN4eF9zcGlfdHhfYnVmXyMjdHlwZShzdHJ1Y3QgbXBjODN4eF9zcGkgKm1wYzgzeHhfc3BpKQlcCiB7CQkJCQkJCQlcCiAJdTMyIGRhdGE7CQkJCQkJXApAQCAtMTUxLDE1ICsxNTgsMTQgQEAKIAogc3RhdGljIHZvaWQgbXBjODN4eF9zcGlfY2hpcHNlbGVjdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBpbnQgdmFsdWUpCiB7Ci0Jc3RydWN0IG1wYzgzeHhfc3BpICptcGM4M3h4X3NwaTsKLQl1OCBwb2wgPSBzcGktPm1vZGUgJiBTUElfQ1NfSElHSCA/IDEgOiAwOworCXN0cnVjdCBtcGM4M3h4X3NwaSAqbXBjODN4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKwlzdHJ1Y3QgZnNsX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YTsKKwlib29sIHBvbCA9IHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIOwogCXN0cnVjdCBzcGlfbXBjODN4eF9jcwkqY3MgPSBzcGktPmNvbnRyb2xsZXJfc3RhdGU7CiAKLQltcGM4M3h4X3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCiAJaWYgKHZhbHVlID09IEJJVEJBTkdfQ1NfSU5BQ1RJVkUpIHsKLQkJaWYgKG1wYzgzeHhfc3BpLT5kZWFjdGl2YXRlX2NzKQotCQkJbXBjODN4eF9zcGktPmRlYWN0aXZhdGVfY3Moc3BpLT5jaGlwX3NlbGVjdCwgcG9sKTsKKwkJaWYgKHBkYXRhLT5jc19jb250cm9sKQorCQkJcGRhdGEtPmNzX2NvbnRyb2woc3BpLCAhcG9sKTsKIAl9CiAKIAlpZiAodmFsdWUgPT0gQklUQkFOR19DU19BQ1RJVkUpIHsKQEAgLTE3Miw3ICsxNzgsNyBAQAogCiAJCWlmIChjcy0+aHdfbW9kZSAhPSByZWd2YWwpIHsKIAkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCQl2b2lkICp0bXBfcHRyID0gJm1wYzgzeHhfc3BpLT5iYXNlLT5tb2RlOworCQkJX19iZTMyIF9faW9tZW0gKm1vZGUgPSAmbXBjODN4eF9zcGktPmJhc2UtPm1vZGU7CiAKIAkJCXJlZ3ZhbCA9IGNzLT5od19tb2RlOwogCQkJLyogVHVybiBvZmYgSVJRcyBsb2NhbGx5IHRvIG1pbmltaXplIHRpbWUgdGhhdApAQCAtMTgwLDEyICsxODYsMTIgQEAKIAkJCSAqLwogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQkJLyogVHVybiBvZmYgU1BJIHVuaXQgcHJpb3IgY2hhbmdpbmcgbW9kZSAqLwotCQkJbXBjODN4eF9zcGlfd3JpdGVfcmVnKHRtcF9wdHIsIHJlZ3ZhbCAmIH5TUE1PREVfRU5BQkxFKTsKLQkJCW1wYzgzeHhfc3BpX3dyaXRlX3JlZyh0bXBfcHRyLCByZWd2YWwpOworCQkJbXBjODN4eF9zcGlfd3JpdGVfcmVnKG1vZGUsIHJlZ3ZhbCAmIH5TUE1PREVfRU5BQkxFKTsKKwkJCW1wYzgzeHhfc3BpX3dyaXRlX3JlZyhtb2RlLCByZWd2YWwpOwogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQl9Ci0JCWlmIChtcGM4M3h4X3NwaS0+YWN0aXZhdGVfY3MpCi0JCQltcGM4M3h4X3NwaS0+YWN0aXZhdGVfY3Moc3BpLT5jaGlwX3NlbGVjdCwgcG9sKTsKKwkJaWYgKHBkYXRhLT5jc19jb250cm9sKQorCQkJcGRhdGEtPmNzX2NvbnRyb2woc3BpLCBwb2wpOwogCX0KIH0KIApAQCAtMjg0LDcgKzI5MCw3IEBACiAJcmVndmFsID0gIG1wYzgzeHhfc3BpX3JlYWRfcmVnKCZtcGM4M3h4X3NwaS0+YmFzZS0+bW9kZSk7CiAJaWYgKGNzLT5od19tb2RlICE9IHJlZ3ZhbCkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQl2b2lkICp0bXBfcHRyID0gJm1wYzgzeHhfc3BpLT5iYXNlLT5tb2RlOworCQlfX2JlMzIgX19pb21lbSAqbW9kZSA9ICZtcGM4M3h4X3NwaS0+YmFzZS0+bW9kZTsKIAogCQlyZWd2YWwgPSBjcy0+aHdfbW9kZTsKIAkJLyogVHVybiBvZmYgSVJRcyBsb2NhbGx5IHRvIG1pbmltaXplIHRpbWUKQEAgLTI5Miw4ICsyOTgsOCBAQAogCQkgKi8KIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQkvKiBUdXJuIG9mZiBTUEkgdW5pdCBwcmlvciBjaGFuZ2luZyBtb2RlICovCi0JCW1wYzgzeHhfc3BpX3dyaXRlX3JlZyh0bXBfcHRyLCByZWd2YWwgJiB+U1BNT0RFX0VOQUJMRSk7Ci0JCW1wYzgzeHhfc3BpX3dyaXRlX3JlZyh0bXBfcHRyLCByZWd2YWwpOworCQltcGM4M3h4X3NwaV93cml0ZV9yZWcobW9kZSwgcmVndmFsICYgflNQTU9ERV9FTkFCTEUpOworCQltcGM4M3h4X3NwaV93cml0ZV9yZWcobW9kZSwgcmVndmFsKTsKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQ4Myw3ICs0ODksNyBAQAogCXJldHVybiAwOwogfQogCi1pcnFyZXR1cm5fdCBtcGM4M3h4X3NwaV9pcnEoczMyIGlycSwgdm9pZCAqY29udGV4dF9kYXRhKQorc3RhdGljIGlycXJldHVybl90IG1wYzgzeHhfc3BpX2lycShzMzIgaXJxLCB2b2lkICpjb250ZXh0X2RhdGEpCiB7CiAJc3RydWN0IG1wYzgzeHhfc3BpICptcGM4M3h4X3NwaSA9IGNvbnRleHRfZGF0YTsKIAl1MzIgZXZlbnQ7CkBAIC01NDUsNDMgKzU1MSwyOCBAQAogCWtmcmVlKHNwaS0+Y29udHJvbGxlcl9zdGF0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IG1wYzgzeHhfc3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3Qgc3BpX21hc3RlciAqIF9fZGV2aW5pdAorbXBjODN4eF9zcGlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwgdW5zaWduZWQgaW50IGlycSkKIHsKKwlzdHJ1Y3QgZnNsX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOwogCXN0cnVjdCBtcGM4M3h4X3NwaSAqbXBjODN4eF9zcGk7Ci0Jc3RydWN0IGZzbF9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0Jc3RydWN0IHJlc291cmNlICpyOwogCXUzMiByZWd2YWw7CiAJaW50IHJldCA9IDA7CiAKLQkvKiBHZXQgcmVzb3VyY2VzKG1lbW9yeSwgSVJRKSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSAqLwotCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJmRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IG1wYzgzeHhfc3BpKSk7Ci0KKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKGRldiwgc2l6ZW9mKHN0cnVjdCBtcGM4M3h4X3NwaSkpOwogCWlmIChtYXN0ZXIgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycjsKIAl9CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIG1hc3Rlcik7Ci0JcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG1hc3Rlcik7CiAKLQlpZiAocGRhdGEgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfbWFzdGVyOwotCX0KLQotCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKHIgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGZyZWVfbWFzdGVyOwotCX0KIAltYXN0ZXItPnNldHVwID0gbXBjODN4eF9zcGlfc2V0dXA7CiAJbWFzdGVyLT50cmFuc2ZlciA9IG1wYzgzeHhfc3BpX3RyYW5zZmVyOwogCW1hc3Rlci0+Y2xlYW51cCA9IG1wYzgzeHhfc3BpX2NsZWFudXA7CiAKIAltcGM4M3h4X3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKLQltcGM4M3h4X3NwaS0+YWN0aXZhdGVfY3MgPSBwZGF0YS0+YWN0aXZhdGVfY3M7Ci0JbXBjODN4eF9zcGktPmRlYWN0aXZhdGVfY3MgPSBwZGF0YS0+ZGVhY3RpdmF0ZV9jczsKIAltcGM4M3h4X3NwaS0+cWVfbW9kZSA9IHBkYXRhLT5xZV9tb2RlOwogCW1wYzgzeHhfc3BpLT5nZXRfcnggPSBtcGM4M3h4X3NwaV9yeF9idWZfdTg7CiAJbXBjODN4eF9zcGktPmdldF90eCA9IG1wYzgzeHhfc3BpX3R4X2J1Zl91ODsKQEAgLTU5NiwxOCArNTg3LDEzIEBACiAKIAlpbml0X2NvbXBsZXRpb24oJm1wYzgzeHhfc3BpLT5kb25lKTsKIAotCW1wYzgzeHhfc3BpLT5iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwltcGM4M3h4X3NwaS0+YmFzZSA9IGlvcmVtYXAobWVtLT5zdGFydCwgbWVtLT5lbmQgLSBtZW0tPnN0YXJ0ICsgMSk7CiAJaWYgKG1wYzgzeHhfc3BpLT5iYXNlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBwdXRfbWFzdGVyOwogCX0KIAotCW1wYzgzeHhfc3BpLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7Ci0KLQlpZiAobXBjODN4eF9zcGktPmlycSA8IDApIHsKLQkJcmV0ID0gLUVOWElPOwotCQlnb3RvIHVubWFwX2lvOwotCX0KKwltcGM4M3h4X3NwaS0+aXJxID0gaXJxOwogCiAJLyogUmVnaXN0ZXIgZm9yIFNQSSBJbnRlcnJ1cHQgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShtcGM4M3h4X3NwaS0+aXJxLCBtcGM4M3h4X3NwaV9pcnEsCkBAIC02NDksOSArNjM1LDkgQEAKIAogCXByaW50ayhLRVJOX0lORk8KIAkgICAgICAgIiVzOiBNUEM4M3h4IFNQSSBDb250cm9sbGVyIGRyaXZlciBhdCAweCVwIChpcnEgPSAlZClcbiIsCi0JICAgICAgIGRldl9uYW1lKCZkZXYtPmRldiksIG1wYzgzeHhfc3BpLT5iYXNlLCBtcGM4M3h4X3NwaS0+aXJxKTsKKwkgICAgICAgZGV2X25hbWUoZGV2KSwgbXBjODN4eF9zcGktPmJhc2UsIG1wYzgzeHhfc3BpLT5pcnEpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbWFzdGVyOwogCiB1bnJlZ19tYXN0ZXI6CiAJZGVzdHJveV93b3JrcXVldWUobXBjODN4eF9zcGktPndvcmtxdWV1ZSk7CkBAIC02NjEsMTggKzY0NywxNiBAQAogCWlvdW5tYXAobXBjODN4eF9zcGktPmJhc2UpOwogcHV0X21hc3RlcjoKIAlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwotZnJlZV9tYXN0ZXI6Ci0Ja2ZyZWUobWFzdGVyKTsKIGVycjoKLQlyZXR1cm4gcmV0OworCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IG1wYzgzeHhfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtcGM4M3h4X3NwaV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBtcGM4M3h4X3NwaSAqbXBjODN4eF9zcGk7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKIAotCW1hc3RlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJbXBjODN4eF9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CiAKIAlmbHVzaF93b3JrcXVldWUobXBjODN4eF9zcGktPndvcmtxdWV1ZSk7CkBAIC02ODUsMjMgKzY2OSwyOTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RydWN0IG1wYzgzeHhfc3BpX3Byb2JlX2luZm8geworCXN0cnVjdCBmc2xfc3BpX3BsYXRmb3JtX2RhdGEgcGRhdGE7CisJaW50ICpncGlvczsKKwlib29sICphbG93X2ZsYWdzOworfTsKKworc3RhdGljIHN0cnVjdCBtcGM4M3h4X3NwaV9wcm9iZV9pbmZvICoKK3RvX29mX3BpbmZvKHN0cnVjdCBmc2xfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXJldHVybiBjb250YWluZXJfb2YocGRhdGEsIHN0cnVjdCBtcGM4M3h4X3NwaV9wcm9iZV9pbmZvLCBwZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzgzeHhfc3BpX2NzX2NvbnRyb2woc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgYm9vbCBvbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBzcGktPmRldi5wYXJlbnQ7CisJc3RydWN0IG1wYzgzeHhfc3BpX3Byb2JlX2luZm8gKnBpbmZvID0gdG9fb2ZfcGluZm8oZGV2LT5wbGF0Zm9ybV9kYXRhKTsKKwl1MTYgY3MgPSBzcGktPmNoaXBfc2VsZWN0OworCWludCBncGlvID0gcGluZm8tPmdwaW9zW2NzXTsKKwlib29sIGFsb3cgPSBwaW5mby0+YWxvd19mbGFnc1tjc107CisKKwlncGlvX3NldF92YWx1ZShncGlvLCBvbiBeIGFsb3cpOworfQorCitzdGF0aWMgaW50IG9mX21wYzgzeHhfc3BpX2dldF9jaGlwc2VsZWN0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldl9hcmNoZGF0YV9nZXRfbm9kZSgmZGV2LT5hcmNoZGF0YSk7CisJc3RydWN0IGZzbF9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG1wYzgzeHhfc3BpX3Byb2JlX2luZm8gKnBpbmZvID0gdG9fb2ZfcGluZm8ocGRhdGEpOworCXVuc2lnbmVkIGludCBuZ3Bpb3M7CisJaW50IGkgPSAwOworCWludCByZXQ7CisKKwluZ3Bpb3MgPSBvZl9ncGlvX2NvdW50KG5wKTsKKwlpZiAoIW5ncGlvcykgeworCQkvKgorCQkgKiBTUEkgdy9vIGNoaXAtc2VsZWN0IGxpbmUuIE9uZSBTUEkgZGV2aWNlIGlzIHN0aWxsIHBlcm1pdHRlZAorCQkgKiB0aG91Z2guCisJCSAqLworCQlwZGF0YS0+bWF4X2NoaXBzZWxlY3QgPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlwaW5mby0+Z3Bpb3MgPSBrbWFsbG9jKG5ncGlvcyAqIHNpemVvZihwaW5mby0+Z3Bpb3MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBpbmZvLT5ncGlvcykKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KHBpbmZvLT5ncGlvcywgLTEsIG5ncGlvcyAqIHNpemVvZihwaW5mby0+Z3Bpb3MpKTsKKworCXBpbmZvLT5hbG93X2ZsYWdzID0ga3phbGxvYyhuZ3Bpb3MgKiBzaXplb2YocGluZm8tPmFsb3dfZmxhZ3MpLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXBpbmZvLT5hbG93X2ZsYWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jX2ZsYWdzOworCX0KKworCWZvciAoOyBpIDwgbmdwaW9zOyBpKyspIHsKKwkJaW50IGdwaW87CisJCWVudW0gb2ZfZ3Bpb19mbGFncyBmbGFnczsKKworCQlncGlvID0gb2ZfZ2V0X2dwaW9fZmxhZ3MobnAsIGksICZmbGFncyk7CisJCWlmICghZ3Bpb19pc192YWxpZChncGlvKSkgeworCQkJZGV2X2VycihkZXYsICJpbnZhbGlkIGdwaW8gIyVkOiAlZFxuIiwgaSwgZ3Bpbyk7CisJCQlnb3RvIGVycl9sb29wOworCQl9CisKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIGRldl9uYW1lKGRldikpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwgImNhbid0IHJlcXVlc3QgZ3BpbyAjJWQ6ICVkXG4iLCBpLCByZXQpOworCQkJZ290byBlcnJfbG9vcDsKKwkJfQorCisJCXBpbmZvLT5ncGlvc1tpXSA9IGdwaW87CisJCXBpbmZvLT5hbG93X2ZsYWdzW2ldID0gZmxhZ3MgJiBPRl9HUElPX0FDVElWRV9MT1c7CisKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHBpbmZvLT5ncGlvc1tpXSwKKwkJCQkJICAgIHBpbmZvLT5hbG93X2ZsYWdzW2ldKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICJjYW4ndCBzZXQgb3V0cHV0IGRpcmVjdGlvbiBmb3IgZ3BpbyAiCisJCQkJIiMlZDogJWRcbiIsIGksIHJldCk7CisJCQlnb3RvIGVycl9sb29wOworCQl9CisJfQorCisJcGRhdGEtPm1heF9jaGlwc2VsZWN0ID0gbmdwaW9zOworCXBkYXRhLT5jc19jb250cm9sID0gbXBjODN4eF9zcGlfY3NfY29udHJvbDsKKworCXJldHVybiAwOworCitlcnJfbG9vcDoKKwl3aGlsZSAoaSA+PSAwKSB7CisJCWlmIChncGlvX2lzX3ZhbGlkKHBpbmZvLT5ncGlvc1tpXSkpCisJCQlncGlvX2ZyZWUocGluZm8tPmdwaW9zW2ldKTsKKwkJaS0tOworCX0KKworCWtmcmVlKHBpbmZvLT5hbG93X2ZsYWdzKTsKKwlwaW5mby0+YWxvd19mbGFncyA9IE5VTEw7CitlcnJfYWxsb2NfZmxhZ3M6CisJa2ZyZWUocGluZm8tPmdwaW9zKTsKKwlwaW5mby0+Z3Bpb3MgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2ZfbXBjODN4eF9zcGlfZnJlZV9jaGlwc2VsZWN0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZzbF9zcGlfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG1wYzgzeHhfc3BpX3Byb2JlX2luZm8gKnBpbmZvID0gdG9fb2ZfcGluZm8ocGRhdGEpOworCWludCBpOworCisJaWYgKCFwaW5mby0+Z3Bpb3MpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5tYXhfY2hpcHNlbGVjdDsgaSsrKSB7CisJCWlmIChncGlvX2lzX3ZhbGlkKHBpbmZvLT5ncGlvc1tpXSkpCisJCQlncGlvX2ZyZWUocGluZm8tPmdwaW9zW2ldKTsKKwl9CisKKwlrZnJlZShwaW5mby0+Z3Bpb3MpOworCWtmcmVlKHBpbmZvLT5hbG93X2ZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgb2ZfbXBjODN4eF9zcGlfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJCSAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZpZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb2ZkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7CisJc3RydWN0IG1wYzgzeHhfc3BpX3Byb2JlX2luZm8gKnBpbmZvOworCXN0cnVjdCBmc2xfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IHJlc291cmNlIG1lbTsKKwlzdHJ1Y3QgcmVzb3VyY2UgaXJxOworCWNvbnN0IHZvaWQgKnByb3A7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlwaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCpwaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghcGluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJcGRhdGEgPSAmcGluZm8tPnBkYXRhOworCWRldi0+cGxhdGZvcm1fZGF0YSA9IHBkYXRhOworCisJLyogQWxsb2NhdGUgYnVzIG51bSBkeW5hbWljYWxseS4gKi8KKwlwZGF0YS0+YnVzX251bSA9IC0xOworCisJLyogU1BJIGNvbnRyb2xsZXIgaXMgZWl0aGVyIGNsb2NrZWQgZnJvbSBRRSBvciBTb0MgY2xvY2suICovCisJcGRhdGEtPnN5c2NsayA9IGdldF9icmdmcmVxKCk7CisJaWYgKHBkYXRhLT5zeXNjbGsgPT0gLTEpIHsKKwkJcGRhdGEtPnN5c2NsayA9IGZzbF9nZXRfc3lzX2ZyZXEoKTsKKwkJaWYgKHBkYXRhLT5zeXNjbGsgPT0gLTEpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGVycl9jbGs7CisJCX0KKwl9CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAibW9kZSIsIE5VTEwpOworCWlmIChwcm9wICYmICFzdHJjbXAocHJvcCwgImNwdS1xZSIpKQorCQlwZGF0YS0+cWVfbW9kZSA9IDE7CisKKwlyZXQgPSBvZl9tcGM4M3h4X3NwaV9nZXRfY2hpcHNlbGVjdHMoZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZtZW0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gb2ZfaXJxX3RvX3Jlc291cmNlKG5wLCAwLCAmaXJxKTsKKwlpZiAoIXJldCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisKKwltYXN0ZXIgPSBtcGM4M3h4X3NwaV9wcm9iZShkZXYsICZtZW0sIGlycS5zdGFydCk7CisJaWYgKElTX0VSUihtYXN0ZXIpKSB7CisJCXJldCA9IFBUUl9FUlIobWFzdGVyKTsKKwkJZ290byBlcnI7CisJfQorCisJb2ZfcmVnaXN0ZXJfc3BpX2RldmljZXMobWFzdGVyLCBucCk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCW9mX21wYzgzeHhfc3BpX2ZyZWVfY2hpcHNlbGVjdHMoZGV2KTsKK2Vycl9jbGs6CisJa2ZyZWUocGluZm8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9mX21wYzgzeHhfc3BpX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbXBjODN4eF9zcGlfcmVtb3ZlKCZvZmRldi0+ZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCW9mX21wYzgzeHhfc3BpX2ZyZWVfY2hpcHNlbGVjdHMoJm9mZGV2LT5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9tcGM4M3h4X3NwaV9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLHNwaSIgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9tcGM4M3h4X3NwaV9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG9mX21wYzgzeHhfc3BpX2RyaXZlciA9IHsKKwkubmFtZQkJPSAibXBjODN4eF9zcGkiLAorCS5tYXRjaF90YWJsZQk9IG9mX21wYzgzeHhfc3BpX21hdGNoLAorCS5wcm9iZQkJPSBvZl9tcGM4M3h4X3NwaV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG9mX21wYzgzeHhfc3BpX3JlbW92ZSksCit9OworCisjaWZkZWYgQ09ORklHX01QQzgzMnhfUkRCCisvKgorICogCQkJCVhYWCBYWFggWFhYCisgKiBUaGlzIGlzICJsZWdhY3kiIHBsYXRmb3JtIGRyaXZlciwgd2FzIHVzZWQgYnkgdGhlIE1QQzgzMjNFLVJEQiBib2FyZHMKKyAqIG9ubHkuIFRoZSBkcml2ZXIgc2hvdWxkIGdvIGF3YXkgc29vbiwgc2luY2UgbmV3ZXIgTVBDODMyM0UtUkRCJ3MgZGV2aWNlCisgKiB0cmVlIGNhbiB3b3JrIHdpdGggT3BlbkZpcm13YXJlIGRyaXZlci4gQnV0IGZvciBub3cgd2Ugc3VwcG9ydCBvbGQgdHJlZXMKKyAqIGFzIHdlbGwuCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IHBsYXRfbXBjODN4eF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwl1bnNpZ25lZCBpbnQgaXJxOworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisKKwlpZiAoIXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFtZW0pCisJCXJldHVybiAtRUlOVkFMOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoIWlycSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltYXN0ZXIgPSBtcGM4M3h4X3NwaV9wcm9iZSgmcGRldi0+ZGV2LCBtZW0sIGlycSk7CisJaWYgKElTX0VSUihtYXN0ZXIpKQorCQlyZXR1cm4gUFRSX0VSUihtYXN0ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwbGF0X21wYzgzeHhfc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBtcGM4M3h4X3NwaV9yZW1vdmUoJnBkZXYtPmRldik7Cit9CisKIE1PRFVMRV9BTElBUygicGxhdGZvcm06bXBjODN4eF9zcGkiKTsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wYzgzeHhfc3BpX2RyaXZlciA9IHsKLQkucmVtb3ZlID0gX19leGl0X3AobXBjODN4eF9zcGlfcmVtb3ZlKSwKKwkucHJvYmUgPSBwbGF0X21wYzgzeHhfc3BpX3Byb2JlLAorCS5yZW1vdmUgPSBfX2V4aXRfcChwbGF0X21wYzgzeHhfc3BpX3JlbW92ZSksCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAibXBjODN4eF9zcGkiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIAorc3RhdGljIGJvb2wgbGVnYWN5X2RyaXZlcl9mYWlsZWQ7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBsZWdhY3lfZHJpdmVyX3JlZ2lzdGVyKHZvaWQpCit7CisJbGVnYWN5X2RyaXZlcl9mYWlsZWQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1wYzgzeHhfc3BpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsZWdhY3lfZHJpdmVyX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlpZiAobGVnYWN5X2RyaXZlcl9mYWlsZWQpCisJCXJldHVybjsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBjODN4eF9zcGlfZHJpdmVyKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgbGVnYWN5X2RyaXZlcl9yZWdpc3Rlcih2b2lkKSB7fQorc3RhdGljIHZvaWQgX19leGl0IGxlZ2FjeV9kcml2ZXJfdW5yZWdpc3Rlcih2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19NUEM4MzJ4X1JEQiAqLworCiBzdGF0aWMgaW50IF9faW5pdCBtcGM4M3h4X3NwaV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbXBjODN4eF9zcGlfZHJpdmVyLCBtcGM4M3h4X3NwaV9wcm9iZSk7CisJbGVnYWN5X2RyaXZlcl9yZWdpc3RlcigpOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm9mX21wYzgzeHhfc3BpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtcGM4M3h4X3NwaV9leGl0KHZvaWQpCiB7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1wYzgzeHhfc3BpX2RyaXZlcik7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm9mX21wYzgzeHhfc3BpX2RyaXZlcik7CisJbGVnYWN5X2RyaXZlcl91bnJlZ2lzdGVyKCk7CiB9CiAKIG1vZHVsZV9pbml0KG1wYzgzeHhfc3BpX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCAyMTFhZjg2Li4wZGNmOWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtNCw3ICs0LDcgQEAKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNlbGVjdCBhIG51bWJlciBvZiBkcml2ZXJzIHRoYXQgYXJlCiAJICBub3Qgb2YgdGhlICJub3JtYWwiIExpbnV4IGtlcm5lbCBxdWFsaXR5IGxldmVsLiAgVGhlc2UgZHJpdmVycwotCSAgYXJlIHBsYWNlZCBoZXJlIGluIG9yZGVyIHRvIGdldCBhIHdpZGVyIGF1ZGllbmNlIGZvciB1c2Ugb2YKKwkgIGFyZSBwbGFjZWQgaGVyZSBpbiBvcmRlciB0byBnZXQgYSB3aWRlciBhdWRpZW5jZSB0byBtYWtlIHVzZSBvZgogCSAgdGhlbS4gIFBsZWFzZSBub3RlIHRoYXQgdGhlc2UgZHJpdmVycyBhcmUgdW5kZXIgaGVhdnkKIAkgIGRldmVsb3BtZW50LCBtYXkgb3IgbWF5IG5vdCB3b3JrLCBhbmQgbWF5IGNvbnRhaW4gdXNlcnNwYWNlCiAJICBpbnRlcmZhY2VzIHRoYXQgbW9zdCBsaWtlbHkgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBuZWFyCkBAIC0xMiw3ICsxMiw3IEBACiAKIAkgIFVzaW5nIGFueSBvZiB0aGVzZSBkcml2ZXJzIHdpbGwgdGFpbnQgeW91ciBrZXJuZWwgd2hpY2ggbWlnaHQKIAkgIGFmZmVjdCBzdXBwb3J0IG9wdGlvbnMgZnJvbSBib3RoIHRoZSBjb21tdW5pdHksIGFuZCB2YXJpb3VzCi0JICBjb21tZXJjaWFsIHN1cHBvcnQgb3JnaW5pemF0aW9ucy4KKwkgIGNvbW1lcmNpYWwgc3VwcG9ydCBvcmdhbml6YXRpb25zLgogCiAJICBJZiB5b3Ugd2lzaCB0byB3b3JrIG9uIHRoZXNlIGRyaXZlcnMsIHRvIGhlbHAgaW1wcm92ZSB0aGVtLCBvcgogCSAgdG8gcmVwb3J0IHByb2JsZW1zIHlvdSBoYXZlIHdpdGggdGhlbSwgcGxlYXNlIHNlZSB0aGUKQEAgLTczLDYgKzczLDggQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9LY29uZmlnIgorCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYXN1c19vbGVkL0tjb25maWciCkBAIC05Myw1ICs5NSwyNSBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2RzdC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy91YzIzMjIvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYjNkZmcvS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcGhpc29uL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9oZWNpL0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2xpbmU2L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9LY29uZmlnIgorCiBlbmRpZiAjICFTVEFHSU5HX0VYQ0xVREVfQlVJTEQKIGVuZGlmICMgU1RBR0lORwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCmluZGV4IDQ3YTU2ZjUuLjQ3ZGZkNWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBACiBvYmotJChDT05GSUdfT1RVUykJCSs9IG90dXMvCiBvYmotJChDT05GSUdfUlQyODYwKQkJKz0gcnQyODYwLwogb2JqLSQoQ09ORklHX1JUMjg3MCkJCSs9IHJ0Mjg3MC8KK29iai0kKENPTkZJR19SVDMwNzApCQkrPSBydDMwNzAvCiBvYmotJChDT05GSUdfQ09NRURJKQkJKz0gY29tZWRpLwogb2JqLSQoQ09ORklHX0FTVVNfT0xFRCkJCSs9IGFzdXNfb2xlZC8KIG9iai0kKENPTkZJR19QQU5FTCkJCSs9IHBhbmVsLwpAQCAtMjksMyArMzAsMTMgQEAKIG9iai0kKENPTkZJR19UUkFOWlBPUlQpCQkrPSBmcm9udGllci8KIG9iai0kKENPTkZJR19FUEwpCQkrPSBlcGwvCiBvYmotJChDT05GSUdfQU5EUk9JRCkJCSs9IGFuZHJvaWQvCitvYmotJChDT05GSUdfRFNUKQkJKz0gZHN0Lworb2JqLSQoQ09ORklHX1BPSE1FTEZTKQkJKz0gcG9obWVsZnMvCitvYmotJChDT05GSUdfU1RMQzQ1WFgpCQkrPSBzdGxjNDV4eC8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX0FURU4yMDExKQkrPSB1YzIzMjIvCitvYmotJChDT05GSUdfQjNERkcpCQkrPSBiM2RmZy8KK29iai0kKENPTkZJR19JREVfUEhJU09OKQkrPSBwaGlzb24vCitvYmotJChDT05GSUdfUExBTjlBVVRIKQkJKz0gcDlhdXRoLworb2JqLSQoQ09ORklHX0hFQ0kpCQkrPSBoZWNpLworb2JqLSQoQ09ORklHX0xJTkU2X1VTQikJCSs9IGxpbmU2Lworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfUVVBVEVDSF9FU1UxMDApCSs9IHNlcnF0X3VzYi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2FnbnguaCBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L2FnbnguaAppbmRleCAyMGYzNmRhLi4zOTYzZDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9hZ254LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvYWdueC5oCkBAIC00MSwxNiArNDEsMTYgQEAKIC8qIAl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDIsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sICovCiAvKiAJeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAzLCAuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSB9LCAqLwogLyogCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDQsIC5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFIH0sICovCi0gCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMSwgfSwKLSAJeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSAyLCB9LAotIAl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDMsIH0sCi0gCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDQsfSwKKwl7IC5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IDEsIH0sCisJeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSAyLCB9LAorCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMywgfSwKKwl7IC5iaXRyYXRlID0gMTEwLCAuaHdfdmFsdWUgPSA0LH0sCiAKIAl7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDB4QiwgfSwKIAl7IC5iaXRyYXRlID0gOTAsIC5od192YWx1ZSA9IDB4RiwgfSwKIAl7IC5iaXRyYXRlID0gMTIwLCAuaHdfdmFsdWUgPSAweEEgfSwKIAl7IC5iaXRyYXRlID0gMTgwLCAuaHdfdmFsdWUgPSAweEUsIH0sCi0vLwl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSAweGQsIH0sCisvKgl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSAweGQsIH0sICovCiAJeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gMHhELCB9LAogCXsgLmJpdHJhdGUgPSA0ODAsIC5od192YWx1ZSA9IDB4OCwgfSwKIAl7IC5iaXRyYXRlID0gNTQwLCAuaHdfdmFsdWUgPSAweEMsIH0sCkBAIC0xMTAsMTAgKzExMCwxMCBAQAogCS8qIE5lZWQgdm9sYXRpbGU/ICovCiAJdTMyIGlycV9zdGF0dXM7CiAKLSAgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayBwZXJpb2RpY193b3JrOyAvKiBQZXJpb2RpYyB0YXNrcyBsaWtlIHJlY2FsaWJyYXRlKi8KKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHBlcmlvZGljX3dvcms7IC8qIFBlcmlvZGljIHRhc2tzIGxpa2UgcmVjYWxpYnJhdGUgKi8KIAlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyBzdGF0czsKIAotLy8gICAgICAgIHVuc2lnbmVkIGludCBwaHltb2RlOworCS8qIHVuc2lnbmVkIGludCBwaHltb2RlOyAqLwogCWludCBtb2RlOwogCWludCBjaGFubmVsOwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2RlYnVnLmggYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9kZWJ1Zy5oCmluZGV4IGUzZTI1ZGQuLjc2MWQ5OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L2RlYnVnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvZGVidWcuaApAQCAtMjMsNyArMjMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWdueF9wcmludF9kZXNjKHN0cnVjdCBhZ254X2Rlc2MgKmRlc2MpCiB7Ci0gICAgICAgIHUzMiByZWcgPSBiZTMyX3RvX2NwdShkZXNjLT5mcmFnKTsKKwl1MzIgcmVnID0gYmUzMl90b19jcHUoZGVzYy0+ZnJhZyk7CiAKIAlQUklOVEtfQklUUyhERVNDLCBQQUNLRVRfTEVOKTsKIApAQCAtMjkxLDcgKzI5MSw3IEBACiAJUFJJTlRLX0xFMzIoU1RBLCBzdGEtPnBoeV9zdGF0c19oaWdoKTsKIAlQUklOVEtfTEUzMihTVEEsIHN0YS0+cGh5X3N0YXRzX2xvdyk7CiAKLS8vCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJLyogZm9yIChpID0gMDsgaSA8IDg7IGkrKykgKi8KIAlhZ254X3ByaW50X3N0YV90cmFmZmljKHN0YS0+dHJhZmZpYyArIDApOwogCiAJUFJJTlRLX0xFMTYoU1RBLCBzdGEtPnRyYWZmaWNfY2xhc3MwX2ZyYWdfc3VjY2Vzcyk7CkBAIC0zMTEsMTAgKzMxMSwxMCBAQAogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfaWVlZTgwMjExX2hkcihzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCBjaGFyICp0YWcpCiB7CiAJdTE2IGZjdGw7Ci0gICAgICAgIGludCBoZHJsZW47CisJaW50IGhkcmxlbjsKIAlERUNMQVJFX01BQ19CVUYobWFjKTsKIAotICAgICAgICBmY3RsID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwlmY3RsID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlzd2l0Y2ggKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgewogCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6CiAJCXByaW50ayhQRlggIiVzIERBVEEgIiwgdGFnKTsKQEAgLTMyNCw3ICszMjQsNyBAQAogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9GVFlQRV9NR01UOgogCQlwcmludGsoUEZYICIlcyBNR01UICIsIHRhZyk7Ci0JCXN3aXRjaChmY3RsICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwkJc3dpdGNoIChmY3RsICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVROgogCQkJcHJpbnRrKCJTdWJUeXBlOiBBU1NPQ19SRVEgIik7CiAJCQlicmVhazsKQEAgLTM2OSw3ICszNjksNyBAQAogCQlwcmludGsoUEZYICIlcyBQYWNrZXQgdHlwZTogVW5rbm93XG4iLCB0YWcpOwogCX0KIAotICAgICAgICBoZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjdGwpOworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmN0bCk7CiAKIAlpZiAoaGRybGVuID49IDQpCiAJCXByaW50aygiRkM9MHglMDR4IERVUj0weCUwNHgiLApAQCAtMzg5LDI5ICszODksMjggQEAKIHsKIAl2b2lkIF9faW9tZW0gKmN0bCA9IHByaXYtPmN0bDsKIAlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDw9MHgxZTg7IGkgKz0gNCkgeworCWZvciAoaSA9IDA7IGkgPD0gMHgxZTg7IGkgKz0gNCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJUWE06ICV4LS0tPiAweCUuOHhcbiIsIGksIGlvcmVhZDMyKGN0bCArIGkpKTsKLQl9CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9yeG1fcmVnaXN0ZXJzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCiB7CiAJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8PTB4MTA4OyBpICs9IDQpCisJZm9yIChpID0gMDsgaSA8PSAweDEwODsgaSArPSA0KQogCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIlJYTTogJXgtLS0+IDB4JS44eFxuIiwgaSwgaW9yZWFkMzIoY3RsICsgMHgyMDAwICsgaSkpOwogfQogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfYm1fcmVnaXN0ZXJzKHN0cnVjdCBhZ254X3ByaXYgKnByaXYpCiB7CiAJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8PTB4OTA7IGkgKz0gNCkKKwlmb3IgKGkgPSAwOyBpIDw9IDB4OTA7IGkgKz0gNCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJCTTogJXgtLS0+IDB4JS44eFxuIiwgaSwgaW9yZWFkMzIoY3RsICsgMHgyYzAwICsgaSkpOwogfQogc3RhdGljIGlubGluZSB2b2lkIGR1bXBfY2lyX3JlZ2lzdGVycyhzdHJ1Y3QgYWdueF9wcml2ICpwcml2KQogewogCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPD0weGI4OyBpICs9IDQpCisJZm9yIChpID0gMDsgaSA8PSAweGI4OyBpICs9IDQpCiAJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiQ0lSOiAleC0tLT4gMHglLjh4XG4iLCBpLCBpb3JlYWQzMihjdGwgKyAweDMwMDAgKyBpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BjaS5jIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvcGNpLmMKaW5kZXggODU0NjMwYy4uNGZmNGMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FnbngvcGNpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvcGNpLmMKQEAgLTM5LDM0ICszOSwzNCBAQAogCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwogCXUzMiByZWc7CiAKLQlpZiAoICpyZWFzb24gJiBBR05YX1NUQVRfUlggKSB7CisJaWYgKCpyZWFzb24gJiBBR05YX1NUQVRfUlgpIHsKIAkJLyogTWFyayBjb21wbGV0ZSBSWCAqLwogCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0NJUl9SWENUTCk7CiAJCXJlZyB8PSAweDQ7CiAJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfQ0lSX1JYQ1RMKTsKIAkJLyogZGlzYWJsZSBSeCBpbnRlcnJ1cHQgKi8KIAl9Ci0JaWYgKCAqcmVhc29uICYgQUdOWF9TVEFUX1RYICkgeworCWlmICgqcmVhc29uICYgQUdOWF9TVEFUX1RYKSB7CiAJCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1RYRENUTCk7CiAJCWlmIChyZWcgJiAweDQpIHsKIAkJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfQ0lSX1RYRENUTCk7CiAJCQkqcmVhc29uIHw9IEFHTlhfU1RBVF9UWEQ7CiAJCX0KLSAJCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1RYTUNUTCk7CisJCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfQ0lSX1RYTUNUTCk7CiAJCWlmIChyZWcgJiAweDQpIHsKIAkJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfQ0lSX1RYTUNUTCk7CiAJCQkqcmVhc29uIHw9IEFHTlhfU1RBVF9UWE07CiAJCX0KIAl9Ci0JaWYgKCAqcmVhc29uICYgQUdOWF9TVEFUX1ggKSB7Ci0vKiAJCXJlZyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfSU5UX1NUQVQpOyAqLwotLyogCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX0lOVF9TVEFUKTsgKi8KLS8qIAkJL1wqIEZJWE1FIHJlaW5pdCBpbnRlcnJ1cHQgbWFzayAqXC8gKi8KLS8qIAkJcmVnID0gMHhjMzkwYmY5ICYgfklSUV9UWF9CRUFDT047ICovCi0vKiAJCXJlZyAmPSB+SVJRX1RYX0RJU0FCTEU7ICovCi0vKiAJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfSU5UX01BU0spOyAqLwotLyogCQlpb3dyaXRlMzIoMHg4MDAsIGN0bCArIEFHTlhfQ0lSX0JMS0NUTCk7ICovCi0JfQorLyoJaWYgKCpyZWFzb24gJiBBR05YX1NUQVRfWCkgeworCQlyZWcgPSBpb3JlYWQzMihjdGwgKyBBR05YX0lOVF9TVEFUKTsKKwkJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9JTlRfU1RBVCk7CisJCS8qIEZJWE1FIHJlaW5pdCBpbnRlcnJ1cHQgbWFzayAqXC8KKwkJcmVnID0gMHhjMzkwYmY5ICYgfklSUV9UWF9CRUFDT047CisJCXJlZyAmPSB+SVJRX1RYX0RJU0FCTEU7CisJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfSU5UX01BU0spOworCQlpb3dyaXRlMzIoMHg4MDAsIGN0bCArIEFHTlhfQ0lSX0JMS0NUTCk7CisJfSAqLwogfSAvKiBhZ254X2ludGVycnVwdF9hY2sgKi8KIAogc3RhdGljIGlycXJldHVybl90IGFnbnhfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtNzksNyArNzksNyBAQAogCiAJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAotLy8JcHJpbnRrKEtFUk5fRVJSIFBGWCAiR2V0IGEgaW50ZXJydXB0ICVzXG4iLCBfX2Z1bmNfXyk7CisvKglwcmludGsoS0VSTl9FUlIgUEZYICJHZXQgYSBpbnRlcnJ1cHQgJXNcbiIsIF9fZnVuY19fKTsgKi8KIAogCWlmIChwcml2LT5pbml0X3N0YXR1cyAhPSBBR05YX1NUQVJUKQogCQlnb3RvIG91dDsKQEAgLTkyLDcgKzkyLDcgQEAKIAlyZXQgPSBJUlFfSEFORExFRDsKIAlwcml2LT5pcnFfc3RhdHVzID0gaW9yZWFkMzIoY3RsICsgQUdOWF9JTlRfU1RBVCk7CiAKLS8vCXByaW50ayhQRlggIkludGVycnVwdCByZWFzb24gaXMgMHgleFxuIiwgaXJxX3JlYXNvbik7CisvKglwcmludGsoUEZYICJJbnRlcnJ1cHQgcmVhc29uIGlzIDB4JXhcbiIsIGlycV9yZWFzb24pOyAqLwogCS8qIE1ha2Ugc3VyZSB0aGUgdHhtIGFuZCB0eGQgZmxhZ3MgZG9uJ3QgY29uZmxpY3Qgd2l0aCBvdGhlciB1bmtub3duCiAJICAgaW50ZXJydXB0IGZsYWcsIG1heWJlIGlzIG5vdCBuZWNlc3NhcnkgKi8KIAlpcnFfcmVhc29uICY9IDB4RjsKQEAgLTEwMSwxMyArMTAxLDEzIEBACiAJLyogVE9ETyBNYWtlIHN1cmUgdGhlIGNhcmQgZmluaXNoZWQgaW5pdGlhbGl6ZWQgKi8KIAlhZ254X2ludGVycnVwdF9hY2socHJpdiwgJmlycV9yZWFzb24pOwogCi0JaWYgKCBpcnFfcmVhc29uICYgQUdOWF9TVEFUX1JYICkKKwlpZiAoaXJxX3JlYXNvbiAmIEFHTlhfU1RBVF9SWCkKIAkJaGFuZGxlX3J4X2lycShwcml2KTsKLQlpZiAoIGlycV9yZWFzb24gJiBBR05YX1NUQVRfVFhEICkKKwlpZiAoaXJxX3JlYXNvbiAmIEFHTlhfU1RBVF9UWEQpCiAJCWhhbmRsZV90eGRfaXJxKHByaXYpOwotCWlmICggaXJxX3JlYXNvbiAmIEFHTlhfU1RBVF9UWE0gKQorCWlmIChpcnFfcmVhc29uICYgQUdOWF9TVEFUX1RYTSkKIAkJaGFuZGxlX3R4bV9pcnEocHJpdik7Ci0JaWYgKCBpcnFfcmVhc29uICYgQUdOWF9TVEFUX1ggKQorCWlmIChpcnFfcmVhc29uICYgQUdOWF9TVEFUX1gpCiAJCWhhbmRsZV9vdGhlcl9pcnEocHJpdik7CiAKIAllbmFibGVfcnhfaW50ZXJydXB0KHByaXYpOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAKIAlsZW4gPSBwcml2LT5yeC5zaXplICsgcHJpdi0+dHhtLnNpemUgKyBwcml2LT50eGQuc2l6ZTsKIAotLy8JcHJpdi0+cnguaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZ254X2luZm8pICogbGVuLCBHRlBfS0VSTkVMKTsKKy8qCXByaXYtPnJ4LmluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWdueF9pbmZvKSAqIGxlbiwgR0ZQX0tFUk5FTCk7ICovCiAJcHJpdi0+cnguaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZ254X2luZm8pICogbGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXByaXYtPnJ4LmluZm8pCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjEwLDI4ICsyMTAsMjcgQEAKICNpZiAwCiBzdGF0aWMgdm9pZCBhZ254X3BlcmlvZGljX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWdueF9wcml2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyaW9kaWNfd29yay53b3JrKTsKLS8vCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWdueF9wcml2LCBwZXJpb2RpY193b3JrLndvcmspOworLyoJdW5zaWduZWQgbG9uZyBmbGFnczsgKi8KIAl1bnNpZ25lZCBsb25nIGRlbGF5OwogCiAJLyogZml4bWU6IHVzaW5nIG11dGV4Pz8gKi8KLS8vCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisvKglzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOyAqLwogCiAJLyogVE9ETyBSZWNhbGlicmF0ZSovCi0vLwljYWxpYnJhdGVfb3NjaWxsYXRvcihwcml2KTsKLS8vCWFudGVubmFfY2FsaWJyYXRlKHByaXYpOwotLy8JYWdueF9zZW5kX3BhY2tldChwcml2LCA5OTcpOworLyoJY2FsaWJyYXRlX29zY2lsbGF0b3IocHJpdik7ICovCisvKglhbnRlbm5hX2NhbGlicmF0ZShwcml2KTsgKi8KKy8qCWFnbnhfc2VuZF9wYWNrZXQocHJpdiwgOTk3KTsgLwogCS8qIEZJWE1FICovCiAvKiAJaWYgKGRlYnVnID09IDMpICovCiAvKiAgICAgICAgICAgICAgICAgZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzKEFHTlhfUEVSSU9ESUNfREVMQVkpOyAqLwogLyogCWVsc2UgKi8KIAlkZWxheSA9IG1zZWNzX3RvX2ppZmZpZXMoQUdOWF9QRVJJT0RJQ19ERUxBWSk7Ci0vLwkJZGVsYXkgPSByb3VuZF9qaWZmaWVzKEhaICogMTUpOworLyoJZGVsYXkgPSByb3VuZF9qaWZmaWVzKEhaICogMTUpOyAqLwogCiAJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT5wZXJpb2RpY193b3JrLCBkZWxheSk7CiAKLS8vCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKy8qCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsgKi8KIH0KICNlbmRpZgogCkBAIC0yNTUsMTIgKzI1NCwxMiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLS8vCW1kZWxheSg1MDApOworLyoJbWRlbGF5KDUwMCk7ICovCiAKIAltaWdodF9zbGVlcCgpOwogCWFnbnhfaHdfaW5pdChwcml2KTsKIAotLy8JbWRlbGF5KDUwMCk7CisvKgltZGVsYXkoNTAwKTsgKi8KIAltaWdodF9zbGVlcCgpOwogCiAJcHJpdi0+aW5pdF9zdGF0dXMgPSBBR05YX1NUQVJUOwpAQCAtMjgwLDE2ICsyNzksMTYgQEAKIAkvKiBtYWtlIHN1cmUgaGFyZHdhcmUgd2lsbCBub3QgZ2VuZXJhdGUgaXJxICovCiAJYWdueF9od19yZXNldChwcml2KTsKIAlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGRldik7Ci0gICAgICAgIGZsdXNoX3dvcmtxdWV1ZShwcml2LT5ody0+d29ya3F1ZXVlKTsKLS8vCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+cGVyaW9kaWNfd29yayk7CisJZmx1c2hfd29ya3F1ZXVlKHByaXYtPmh3LT53b3JrcXVldWUpOworLyoJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5wZXJpb2RpY193b3JrKTsgKi8KIAl1bmZpbGxfcmluZ3MocHJpdik7CiAJcmluZ3NfZnJlZShwcml2KTsKIH0KIAotc3RhdGljIGludCBhZ254X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCitzdGF0aWMgaW50IGFnbnhfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IGFnbnhfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmZGV2LT5jb25mOwogCWludCBjaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAlBR05YX1RSQUNFOwogCkBAIC0zMTUsNyArMzE0LDYgQEAKIAlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCiAJaWYgKG1lbWNtcChjb25mLT5ic3NpZCwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOKSkgewotLy8JCXUzMiByZWdoaSwgcmVnbG87CiAJCWFnbnhfc2V0X2Jzc2lkKHByaXYsIGNvbmYtPmJzc2lkKTsKIAkJbWVtY3B5KHByaXYtPmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOwogCQloYXNoX3dyaXRlKHByaXYsIGNvbmYtPmJzc2lkLCBCU1NJRF9TVEFJRCk7CkBAIC00MjUsNyArNDIzLDcgQEAKIAkucmVtb3ZlX2ludGVyZmFjZQk9IGFnbnhfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnCQkJPSBhZ254X2NvbmZpZywKIAkuY29uZmlnX2ludGVyZmFjZQk9IGFnbnhfY29uZmlnX2ludGVyZmFjZSwKLSAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBhZ254X2NvbmZpZ3VyZV9maWx0ZXIsCisJLmNvbmZpZ3VyZV9maWx0ZXIJPSBhZ254X2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmdldF9zdGF0cwkJPSBhZ254X2dldF9zdGF0cywKIAkuZ2V0X3R4X3N0YXRzCQk9IGFnbnhfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IGFnbnhfZ2V0X3RzZnQKQEAgLTQzNCwxMSArNDMyLDEyIEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgYWdueF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgYWdueF9wcml2ICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBhZ254X3ByaXYgKnByaXY7CiAJQUdOWF9UUkFDRTsKIAogCWlmICghZGV2KQogCQlyZXR1cm47CisJcHJpdiA9IGRldi0+cHJpdjsKIAlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhkZXYpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmN0bCk7CiAJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+ZGF0YSk7CkBAIC01MDQsNyArNTAzLDcgQEAKIAogCS8qIE1hcCBtZW0gIzEgYW5kICMyICovCiAJcHJpdi0+Y3RsID0gcGNpX2lvbWFwKHBkZXYsIDAsIG1lbV9sZW4wKTsKLS8vCXByaW50ayhLRVJOX0RFQlVHIFBGWCJNRU0xIG1hcHBlZCBhZGRyZXNzIGlzIDB4JXBcbiIsIHByaXYtPmN0bCk7CisvKglwcmludGsoS0VSTl9ERUJVRyBQRlgiTUVNMSBtYXBwZWQgYWRkcmVzcyBpcyAweCVwXG4iLCBwcml2LT5jdGwpOyAqLwogCWlmICghcHJpdi0+Y3RsKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbid0IG1hcCBkZXZpY2UgbWVtb3J5XG4iKTsKIAkJZ290byBlcnJfZnJlZV9kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9waHkuYyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BoeS5jCmluZGV4IGRhOGYxMGMuLjJiZTYzMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BoeS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hZ254L3BoeS5jCkBAIC0xMTQsNyArMTE0LDcgQEAKIAkvKiBGSVhNRSAqLwogCXJlZyA9IChtYWNfYWRkclswXSA8PCAyNCkgfCAobWFjX2FkZHJbMV0gPDwgMTYpIHwgbWFjX2FkZHJbMl0gPDwgOCB8IG1hY19hZGRyWzNdOwogCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX01BQ0hJKTsKLSAJcmVnID0gKG1hY19hZGRyWzRdIDw8IDgpIHwgbWFjX2FkZHJbNV07CisJcmVnID0gKG1hY19hZGRyWzRdIDw8IDgpIHwgbWFjX2FkZHJbNV07CiAJaW93cml0ZTMyKHJlZywgY3RsICsgQUdOWF9SWE1fTUFDTE8pOwogfQogCkBAIC0xMjcsNyArMTI3LDcgQEAKIAkvKiBGSVhNRSAqLwogCXJlZyA9IGJzc2lkWzBdIDw8IDI0IHwgKGJzc2lkWzFdIDw8IDE2KSB8IChic3NpZFsyXSA8PCA4KSB8IGJzc2lkWzNdOwogCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfUlhNX0JTU0lESEkpOwotIAlyZWcgPSAoYnNzaWRbNF0gPDwgOCkgfCBic3NpZFs1XTsKKwlyZWcgPSAoYnNzaWRbNF0gPDwgOCkgfCBic3NpZFs1XTsKIAlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX1JYTV9CU1NJRExPKTsKIAogCS8qIEVuYWJsZSB0aGUgcmVjZWl2ZXIgKi8KQEAgLTQwMSw5ICs0MDEsOSBAQAogCQlhZ254X3dyaXRlMzIoY3RsLCAweDIwNzQsIDB4MWYxNzE3MTApOwogCQlhZ254X3dyaXRlMzIoY3RsLCAweDIwNzgsIDB4MTAxMDBkMGQpOwogCQlhZ254X3dyaXRlMzIoY3RsLCAweDIwN2MsIDB4MTExMTEwMTApOwotCX0KLQllbHNlCisJfSBlbHNlIHsKIAkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fREVMQVkxMSwgMHgwKTsKKwl9CiAJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9SWE1fUkVRUkFURSwgMHg4MTk1ZTAwKTsKIH0KIApAQCAtNDc2LDcgKzQ3Niw3IEBACiAJLyogSXQgc2VlbWVkIGlmIHdlIHNldCBvdGhlciBiaXQgdG8gMSB0aGUgYml0IDAgd2lsbAogCSAgIGJlIGF1dG8gY2hhbmdlIHRvIDAgKi8KIAlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0JNX1RYVE9QRUVSLCAweDIgfCAweDEpOwotLy8JYWdueF93cml0ZTMyKGN0bCwgQUdOWF9CTV9UWFRPUEVFUiwgMHgxKTsKKy8qCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQk1fVFhUT1BFRVIsIDB4MSk7ICovCiB9IC8qIGdhaW5fY3RsY250X2luaXQgKi8KIAogCkBAIC00OTAsNyArNDkwLDcgQEAKIAkvKiBMb2FkIEluaXRpYWxHYWluVGFibGUgKi8KIAlnYWluX3RhYmxlX2luaXQocHJpdik7CiAKLSAgCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfQ0lSX0FERFJXSU4sIDB4MjAwMDAwMCk7CisJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9DSVJfQUREUldJTiwgMHgyMDAwMDAwKTsKIAogCS8qIENsZWFyIHRoZSBmb2xsb3dpbmcgb2Zmc2V0cyBpbiBNZW1vcnkgUmFuZ2UgIzI6ICovCiAJbWVtc2V0X2lvKGRhdGEgKyAweDUwNDAsIDAsIDB4YSAqIDQpOwpAQCAtNTg2LDcgKzU4Niw3IEBACiAJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJRlNUMTFCLCAweDI4KTsKIAkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQ1dERVRFQywgMHgwKTsKIAkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfMFgzOCwgMHgxZSk7Ci0vLwkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfQk9BQ1QsIDB4MjYpOworLyoJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX0JPQUNULCAweDI2KTsqLwogCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9ESVNDT1ZNT0QsIDB4Myk7CiAKIAkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhDQVAxMUEsIDB4MzIpOwpAQCAtODEwLDEwICs4MTAsMTAgQEAKIAkJfQogCQlwcmludF9oZXhfZHVtcF9ieXRlcyhQRlggIkVFUFJPTTogIiwgRFVNUF9QUkVGSVhfTk9ORSwgZWVwcm9tLAogCQkJCSAgICAgQVJSQVlfU0laRShlZXByb20pKTsKLQl9IHdoaWxlKDApOworCX0gd2hpbGUgKDApOwogCiAJc3BpX3JjX3dyaXRlKGN0bCwgUkZfQ0hJUDAsIDB4MjYpOwotICAgICAgICByZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX1JMU1cpOworCXJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfUkxTVyk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBzeXN0ZW0gaW50ZXJmYWNlICovCiAJc3lzdGVtX2l0Zl9pbml0KHByaXYpOwpAQCAtODc0LDE5ICs4NzQsMTkgQEAKIAkvKiBGSVhNRSBFbmFibGUgdGhlIHJlcXVlc3QgKi8KIAkvKiBDaGVjayBwYWNrZXQgbGVuZ3RoICovCiAJLyogU2V0IG1heGltdW0gcGFja2V0IGxlbmd0aCAqLwotLyogCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUsIDB4ODgxOTVlMDApOyAqLwotLyogCWVuYWJsZV9yZWNlaXZlcihwcml2KTsgKi8KKy8qCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfUlhNX1JFUVJBVEUsIDB4ODgxOTVlMDApOyAqLworLyoJZW5hYmxlX3JlY2VpdmVyKHByaXYpOyAqLwogCiAJLyogU2V0IHRoZSBSZWNlaXZlciBCU1NJRCAqLwogCXJlY2VpdmVyX2Jzc2lkX3NldChwcml2LCBic3NpZCk7CiAKIAkvKiBGSVhNRSBTZXQgdG8gbWFuYWdlZCBtb2RlICovCiAJc2V0X21hbmFnZWRfbW9kZShwcml2KTsKLS8vCXNldF9wcm9taXNjdW91c19tb2RlKHByaXYpOwotLyogCXNldF9zY2FuX21vZGUocHJpdik7ICovCi0vKiAJc2V0X2xlYXJuX21vZGUocHJpdik7ICovCi0vLyAJc2V0X3Byb21pc19hbmRfbWFuYWdlZChwcml2KTsKLS8vIAlzZXRfYWRob2NfbW9kZShwcml2KTsKKy8qCXNldF9wcm9taXNjdW91c19tb2RlKHByaXYpOyAqLworLyoJc2V0X3NjYW5fbW9kZShwcml2KTsgKi8KKy8qCXNldF9sZWFybl9tb2RlKHByaXYpOyAqLworLyoJc2V0X3Byb21pc19hbmRfbWFuYWdlZChwcml2KTsgKi8KKy8qCXNldF9hZGhvY19tb2RlKHByaXYpOyAqLwogCiAJLyogU2V0IHRoZSByZWNpZXZlIHJlcXVlc3QgcmF0ZSAqLwogCS8qIENoZWNrIHBhY2tldCBsZW5ndGggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3JmLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9yZi5jCmluZGV4IDgyOTRiNmUuLjQyZTQ1N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3JmLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvcmYuYwpAQCAtMTA5LDEyICsxMDksMTIgQEAKIAl9CiAKIAkvKiBTZXQgU1BJIGNsb2NrIHNwZWVkIHRvIDIwME5TICovCi0gICAgICAgIHJlZyA9IGFnbnhfcmVhZDMyKGN0bCwgQUdOWF9TUElfQ0ZHKTsKLSAgICAgICAgcmVnICY9IH4weEY7Ci0gICAgICAgIHJlZyB8PSAweDM7Ci0gICAgICAgIGFnbnhfd3JpdGUzMihjdGwsIEFHTlhfU1BJX0NGRywgcmVnKTsKKwlyZWcgPSBhZ254X3JlYWQzMihjdGwsIEFHTlhfU1BJX0NGRyk7CisJcmVnICY9IH4weEY7CisJcmVnIHw9IDB4MzsKKwlhZ254X3dyaXRlMzIoY3RsLCBBR05YX1NQSV9DRkcsIHJlZyk7CiAKLSAgICAgICAgLyogU2V0IFNQSSBjbG9jayBzcGVlZCB0byA1ME5TICovCisJLyogU2V0IFNQSSBjbG9jayBzcGVlZCB0byA1ME5TICovCiAJcmVnID0gYWdueF9yZWFkMzIoY3RsLCBBR05YX1NQSV9DRkcpOwogCXJlZyAmPSB+MHhGOwogCXJlZyB8PSAweDE7CkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJYWdueF93cml0ZTMyKGN0bCwgQUdOWF9HQ1JfVEhEMEJURkVTVCwgNzApOwogCQlhZ254X3dyaXRlMzIoY3RsLCBBR05YX0dDUl9TSUdIVEgsIDEwMCk7CiAJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0xUSCwgNDgpOwotLy8JCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0xUSCwgMTYpOworLyoJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1NJR0xUSCwgMTYpOyAqLwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5rbm93IGFudGVubmEgbnVtYmVyXG4iKTsKQEAgLTI3NSw4ICsyNzUsOCBAQAogCWlmIChyZWcgPT0gMHg0KQogCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMSwgcmVnfDB4MTAwMCk7CiAJZWxzZSBpZiAocmVnICE9IDB4MCkKLSAgICAgCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgcmVnfDB4MTAwMCk7Ci0gICAgICAgIGVsc2UgeworCQlzcGlfcmZfd3JpdGUoY3RsLCBSRl9DSElQMHxSRl9DSElQMXxSRl9DSElQMiwgcmVnfDB4MTAwMCk7CisJZWxzZSB7CiAJCWlmIChjaGFpbiA9PSAzIHx8IGNoYWluID09IDYpIHsKIAkJCXNwaV9yZl93cml0ZShjdGwsIFJGX0NISVAwfFJGX0NISVAxfFJGX0NISVAyLCByZWd8MHgxMDAwKTsKIAkJCWFnbnhfd3JpdGUzMihjdGwsIEFHTlhfR0NSX1JYT1ZFUklERSwgMHgwKTsKQEAgLTYzNCw4ICs2MzQsNyBAQAogCX0KIH0gLyogY2hhaW5fY2FsaWJyYXRlICovCiAKLQotc3RhdGljIHZvaWQgaW5saW5lIGdldF9jYWxpYnJldGVfdmFsdWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGNoYWlucyAqY2hhaW5zLAorc3RhdGljIGlubGluZSB2b2lkIGdldF9jYWxpYnJldGVfdmFsdWUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGNoYWlucyAqY2hhaW5zLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtKQogewogCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwpAQCAtNjUyLDcgKzY1MSw3IEBACiAJfQogCiAJaWYgKG51bSA9PSAwIHx8IG51bSA9PSAxIHx8IG51bSA9PSAyKSB7Ci0JCWlmICggMCA9PSBjaGFpbnNbbnVtXS5jYWxpKQorCQlpZiAoMCA9PSBjaGFpbnNbbnVtXS5jYWxpKQogCQkJY2hhaW5zW251bV0uY2FsaSA9IDB4ZmY7CiAJCWVsc2UKIAkJCWNoYWluc1tudW1dLmNhbGktLTsKQEAgLTY2OSw3ICs2NjgsNyBAQAogCXVuc2lnbmVkIGludCBpID0gMTAwOwogCiAJd21iKCk7Ci0Jd2hpbGUgKGktLSkgeworCXdoaWxlICgtLWkpIHsKIAkJcmVnID0gKGlvcmVhZDMyKGN0bCArIEFHTlhfQUNJX1NUQVRVUykpOwogCQlpZiAocmVnID09IDB4NDAwMCkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuYwppbmRleCBkM2FjNjc1Li41YjJkNTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC9zdGEuYwpAQCAtMTgsNyArMTgsNyBAQAogCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKIAogCXJlZ2hpID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0gICAgICAgIHJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKKwlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7CiAJcHJpbnRrKFBGWCAiUlggaGFzaCBjbWQgYXJlIDogJS44eCUuOHhcbiIsIHJlZ2hpLCByZWdsbyk7CiB9CiAKQEAgLTQwLDcgKzQwLDcgQEAKIAlpb3dyaXRlMzIocmVnaGksIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gpOwogCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKIAotICAgICAgICByZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7CisJcmVnbG8gPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9MT1cpOwogCWlmICghKHJlZ2xvICYgMHg4MDAwMDAwMCkpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVcGRhdGUgaGFzaCB0YWJsZSBmYWlsZWRcbiIpOwogfQpAQCAtNTksNyArNTksNyBAQAogCWlvd3JpdGUzMihyZWdsbywgY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKIAlyZWdoaSA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0hJR0gpOwogCi0gICAgICAgIHJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKKwlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7CiAJcHJpbnRrKFBGWCAiUlggaGFzaCBjbWQgYXJlIDogJS44eCUuOHhcbiIsIHJlZ2hpLCByZWdsbyk7CiAKIH0KQEAgLTY5LDE1ICs2OSwxNCBAQAogCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwogCXUzMiByZWdoaSwgcmVnbG87CiAKLQlyZWdsbyA9IDB4MDsJCS8qIGR1bXAgY29tbWFuZCAqLwotCXJlZ2xvfD0gMHg0MDAwMDAwMDsgIAkvKiBzdGF0dXMgYml0ICovCisJcmVnbG8gPSAweDQwMDAwMDAwOyAgCS8qIHN0YXR1cyBiaXQgKi8KIAlpb3dyaXRlMzIocmVnbG8sIGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7CiAJaW93cml0ZTMyKHN0YV9pZCA8PCAxNiwgY3RsICsgQUdOWF9SWE1fSEFTSF9EVU1QX0RBVEEpOwogCiAJdWRlbGF5KDgwKTsKIAogCXJlZ2hpID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfSElHSCk7Ci0gICAgICAgIHJlZ2xvID0gaW9yZWFkMzIoY3RsICsgQUdOWF9SWE1fSEFTSF9DTURfTE9XKTsKKwlyZWdsbyA9IGlvcmVhZDMyKGN0bCArIEFHTlhfUlhNX0hBU0hfQ01EX0xPVyk7CiAJcHJpbnRrKFBGWCAiaGFzaCBjbWQgYXJlIDogJS44eCUuOHhcbiIsIHJlZ2hpLCByZWdsbyk7CiAJcmVnaGkgPSBpb3JlYWQzMihjdGwgKyBBR05YX1JYTV9IQVNIX0NNRF9GTEFHKTsKIAlwcmludGsoUEZYICJoYXNoIGZsYWcgaXMgOiAlLjh4XG4iLCByZWdoaSk7CkBAIC05MSw3ICs5MCw3IEBACiB2b2lkIGdldF9zdGFfcG93ZXIoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfc3RhX3Bvd2VyICpwb3dlciwgdW5zaWduZWQgaW50IHN0YV9pZHgpCiB7CiAJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7Ci0gICAgICAgIG1lbWNweV9mcm9taW8ocG93ZXIsIGN0bCArIEFHTlhfVFhNX1NUQVBPV1RFTVAgKyBzaXplb2YoKnBvd2VyKSAqIHN0YV9pZHgsCisJbWVtY3B5X2Zyb21pbyhwb3dlciwgY3RsICsgQUdOWF9UWE1fU1RBUE9XVEVNUCArIHNpemVvZigqcG93ZXIpICogc3RhX2lkeCwKIAkJICAgICAgc2l6ZW9mKCpwb3dlcikpOwogfQogCkBAIC0xMDAsNyArOTksNyBAQAogewogCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOwogCS8qIEZJWE1FICAgMi4gV3JpdGUgVGVtcGxhdGUgdG8gb2Zmc2V0ICsgc3RhdGlvbiBudW1iZXIgICovCi0gICAgICAgIG1lbWNweV90b2lvKGN0bCArIEFHTlhfVFhNX1NUQVBPV1RFTVAgKyBzaXplb2YoKnBvd2VyKSAqIHN0YV9pZHgsCisJbWVtY3B5X3RvaW8oY3RsICsgQUdOWF9UWE1fU1RBUE9XVEVNUCArIHNpemVvZigqcG93ZXIpICogc3RhX2lkeCwKIAkJICAgIHBvd2VyLCBzaXplb2YoKnBvd2VyKSk7CiB9CiAKQEAgLTEzNSw3ICsxMzQsNyBAQAogewogCXZvaWQgX19pb21lbSAqZGF0YSA9IHByaXYtPmRhdGE7CiAKLSAgICAgICAgbWVtY3B5X3RvaW8oZGF0YSArIEFHTlhfUERVUE9PTCArIHNpemVvZigqc3RhKSAqIHN0YV9pZHgsCisJbWVtY3B5X3RvaW8oZGF0YSArIEFHTlhfUERVUE9PTCArIHNpemVvZigqc3RhKSAqIHN0YV9pZHgsCiAJCSAgICBzdGEsIHNpemVvZigqc3RhKSk7CiB9CiAKQEAgLTE2NSw3ICsxNjQsNyBAQAogCiAJcmVnID0gYWdueF9zZXRfYml0cyhXT1JLX1FVRVVFX1ZBTElELCBXT1JLX1FVRVVFX1ZBTElEX1NISUZULCAxKTsKIAlyZWcgfD0gYWdueF9zZXRfYml0cyhXT1JLX1FVRVVFX0FDS19UWVBFLCBXT1JLX1FVRVVFX0FDS19UWVBFX1NISUZULCAxKTsKLS8vCXJlZyB8PSBhZ254X3NldF9iaXRzKFdPUktfUVVFVUVfQUNLX1RZUEUsIFdPUktfUVVFVUVfQUNLX1RZUEVfU0hJRlQsIDApOworLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoV09SS19RVUVVRV9BQ0tfVFlQRSwgV09SS19RVUVVRV9BQ0tfVFlQRV9TSElGVCwgMCk7ICovCiAJdHhfd3EucmVnMiB8PSBjcHVfdG9fbGUzMihyZWcpOwogCiAJLyogU3VwcG9zZSBhbGwgOCB0cmFmZmljIGNsYXNzIGFyZSB1c2VkICovCkBAIC0xODEsNyArMTgwLDcgQEAKIAogCXJlZyA9IGFnbnhfc2V0X2JpdHMoTkVXX1BBQ0tFVCwgTkVXX1BBQ0tFVF9TSElGVCwgMSk7CiAJcmVnIHw9IGFnbnhfc2V0X2JpdHMoVFJBRkZJQ19WQUxJRCwgVFJBRkZJQ19WQUxJRF9TSElGVCwgMSk7Ci0vLwlyZWcgfD0gYWdueF9zZXRfYml0cyhUUkFGRklDX0FDS19UWVBFLCBUUkFGRklDX0FDS19UWVBFX1NISUZULCAxKTsKKy8qCXJlZyB8PSBhZ254X3NldF9iaXRzKFRSQUZGSUNfQUNLX1RZUEUsIFRSQUZGSUNfQUNLX1RZUEVfU0hJRlQsIDEpOyAqLwogCXRyYWZmaWMtPnJlZzAgPSBjcHVfdG9fbGUzMihyZWcpOwogCiAJLyogCTMuIHNldHRpbmcgUlggU2VxdWVuY2UgTnVtYmVyIHRvIDQwOTUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3N0YS5oIGIvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmgKaW5kZXggNThkMGIxMi4uOTRlMmNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Fnbngvc3RhLmgKQEAgLTE2LDcgKzE2LDcgQEAKICNkZWZpbmUgUEFTUwkJMHgwMDAwMDAwMQogI2RlZmluZSBQQVNTX1NISUZUCTEKIAlfX2JlMzIgY21kbG87Ci19X19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CiAKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC90YWJsZS5jCmluZGV4IGM2MDA0ODQuLmI1MmZlZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3RhYmxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FnbngvdGFibGUuYwpAQCAtODAsNyArODAsNyBAQAogCiAJZGlzYWJsZV9yZWNlaXZlcihwcml2KTsKIAotCWZvciAoIHR5cGUgPSAwOyB0eXBlIDwgMHgzOyB0eXBlKysgKSB7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IDB4MzsgdHlwZSsrKSB7CiAJCWZvciAoc3VidHlwZSA9IDA7IHN1YnR5cGUgPCAweDEwOyBzdWJ0eXBlKyspIHsKIAkJCS8qIDEuIFNldCBSb3V0aW5nIHRhYmxlIHRvIFIvVyBhbmQgdG8gUmV0dXJuIHN0YXR1cyBvbiBSZWFkICovCiAJCQlyZWcgPSAodHlwZSA8PCBST1VUQUJfVFlQRV9TSElGVCkgfApAQCAtODksNyArODksNyBAQAogCQkJaWYgKHR5cGUgPT0gUk9VVEFCX1RZUEVfREFUQSkgewogCQkJCS8qIE5VTEwgZ29lcyB0byBSRlAgKi8KIAkJCQlpZiAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9OVUxMKQotLy8JCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfUkZQOworLyoJCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfUkZQOyAqLwogCQkJCQlyZWcgfD0gUk9VVEFCX1JPVVRFX0NQVTsKIAkJCQkvKiBRT1MgTlVMTCBnb2VzIHRvIENQVSAqLwogCQkJCWVsc2UgaWYgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TTlVMTCkKQEAgLTEwNCw3ICsxMDQsNyBAQAogCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfUU9TREFUQVBPTEwpIHx8CiAJCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NEQVRBQUNLUE9MTCkpCiAJCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfRU5DUlk7Ci0vLwkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9DUFU7CisvKgkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9DUFU7ICovCiAJCQkJLypEcm9wIE5VTEwgYW5kIFFPUyBOVUxMIGFjaywgcG9sbCBhbmQgcG9sbCBhY2sqLwogCQkJCWVsc2UgaWYgKChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX05VTExBQ0spIHx8CiAJCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NOVUxMQUNLKSB8fApAQCAtMTEyLDExICsxMTIsMTEgQEAKIAkJCQkJIChzdWJ0eXBlID09IFJPVVRBQl9TVUJUWVBFX1FPU05VTExQT0xMKSB8fAogCQkJCQkgKHN1YnR5cGUgPT0gUk9VVEFCX1NVQlRZUEVfTlVMTFBPTExBQ0spIHx8CiAJCQkJCSAoc3VidHlwZSA9PSBST1VUQUJfU1VCVFlQRV9RT1NOVUxMUE9MTEFDSykpCi0vLwkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9EUk9QOworLyoJCQkJCXJlZyB8PSBST1VUQUJfUk9VVEVfRFJPUDsgKi8KIAkJCQkJcmVnIHw9IFJPVVRBQl9ST1VURV9DUFU7Ci0JCQl9Ci0JCQllbHNlCisJCQl9IGVsc2UgewogCQkJCXJlZyB8PSAoUk9VVEFCX1JPVVRFX0NQVSk7CisJCQl9CiAJCQlpb3dyaXRlMzIocmVnLCBjdGwgKyBBR05YX1JYTV9ST1VUQUIpOwogCQkJLyogQ2hlY2sgdG8gdmVyaWZ5IHRoYXQgdGhlIHN0YXR1cyBiaXQgY2xlYXJlZCAqLwogCQkJcm91dGluZ190YWJsZV9kZWxheSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5jIGIvZHJpdmVycy9zdGFnaW5nL2FnbngveG1pdC5jCmluZGV4IDdmMDE1MjguLjBlMDM0MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hZ254L3htaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYWdueC94bWl0LmMKQEAgLTE3LDggKzE3LDggQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInBoeS5oIgogCi11bnNpZ25lZCBpbnQgcnhfZnJhbWVfY250ID0gMDsKLS8vdW5zaWduZWQgaW50IGxvY2FsX3R4X3NlbnRfY250ID0gMDsKK3Vuc2lnbmVkIGludCByeF9mcmFtZV9jbnQ7CisvKiB1bnNpZ25lZCBpbnQgbG9jYWxfdHhfc2VudF9jbnQgPSAwOyAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9yeF9lbmdpbmUoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKIHsKQEAgLTI0MiwxNSArMjQyLDE1IEBACiAJbWVtc2V0KHN0YXQsIDAsIHNpemVvZigqc3RhdCkpOwogCS8qIFJTU0kgKi8KIAlyc3NpID0gKHU4ICopJmhkci0+cGh5X3N0YXRzX2xvOwotLy8Jc3RhdC0+c3NpID0gKHJzc2lbMF0gKyByc3NpWzFdICsgcnNzaVsyXSkgLyAzOworLyoJc3RhdC0+c3NpID0gKHJzc2lbMF0gKyByc3NpWzFdICsgcnNzaVsyXSkgLyAzOyAqLwogCS8qIE5vaXNlICovCiAJbm9pc2UgPSBpb3JlYWQzMihjdGwgKyBBR05YX0dDUl9OT0lTRTApOwogCW5vaXNlICs9IGlvcmVhZDMyKGN0bCArIEFHTlhfR0NSX05PSVNFMSk7CiAJbm9pc2UgKz0gaW9yZWFkMzIoY3RsICsgQUdOWF9HQ1JfTk9JU0UyKTsKIAlzdGF0LT5ub2lzZSA9IG5vaXNlIC8gMzsKIAkvKiBTaWduYWwgcXVhbGl0eSAqLwotCS8vc25yID0gc3RhdC0+c3NpIC0gc3RhdC0+bm9pc2U7Ci0JaWYgKHNuciA+PTAgJiYgc25yIDwgNDApCisvKglzbnIgPSBzdGF0LT5zc2kgLSBzdGF0LT5ub2lzZTsgKi8KKwlpZiAoc25yID49IDAgJiYgc25yIDwgNDApCiAJCXN0YXQtPnNpZ25hbCA9IDUgKiBzbnIgLyAyOwogCWVsc2UgaWYgKHNuciA+PSA0MCkKIAkJc3RhdC0+c2lnbmFsID0gMTAwOwpAQCAtMjY5LDEwICsyNjksOSBAQAogCiAJc3RhdC0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAJc3RhdC0+ZnJlcSA9IGFnbnhfY2hhbm5lbHNbcHJpdi0+Y2hhbm5lbCAtIDFdLmNlbnRlcl9mcmVxOwotLy8Jc3RhdC0+YW50ZW5uYSA9IDM7Ci0vLwlzdGF0LT5tYWN0aW1lID0gYmUzMl90b19jcHUoaGRyLT50aW1lX3N0YW1wKTsKLS8vCXN0YXQtPmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOwotCisvKglzdGF0LT5hbnRlbm5hID0gMzsKKwlzdGF0LT5tYWN0aW1lID0gYmUzMl90b19jcHUoaGRyLT50aW1lX3N0YW1wKTsKKwlzdGF0LT5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsgKi8KIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNvbWJpbmVfaGRyX2ZyYWcoc3RydWN0IGllZWU4MDIxMV9oZHIgKmllZWVoZHIsCkBAIC0yOTYsNyArMjk1LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGFnbnhfcGFja2V0X2NoZWNrKHN0cnVjdCBhZ254X3ByaXYgKnByaXYsIHN0cnVjdCBhZ254X2hkciAqYWdueGhkciwKIAkJCQkgICAgdW5zaWduZWQgcGFja2V0X2xlbikKIHsKLQlpZiAoYWdueF9nZXRfYml0cyhDUkNfRkFJTCwgQ1JDX0ZBSUxfU0hJRlQsIGJlMzJfdG9fY3B1KGFnbnhoZHItPnJlZzEpKSA9PSAxKXsKKwlpZiAoYWdueF9nZXRfYml0cyhDUkNfRkFJTCwgQ1JDX0ZBSUxfU0hJRlQsIGJlMzJfdG9fY3B1KGFnbnhoZHItPnJlZzEpKSA9PSAxKSB7CiAJCXByaW50ayhQRlggIlJYOiBDUkMgY2hlY2sgZmFpbFxuIik7CiAJCWdvdG8gZHJvcDsKIAl9CkBAIC0zMjAsNyArMzE5LDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0dXM7CiAJdW5zaWduZWQgaW50IGxlbjsKLS8vCUFHTlhfVFJBQ0U7CisvKglBR05YX1RSQUNFOyAqLwogCiAJZG8gewogCQlzdHJ1Y3QgYWdueF9kZXNjICpkZXNjOwpAQCAtMzQxLDU0ICszNDAsNTQgQEAKIAogCQlsZW4gPSAoZnJhZyAmIFBBQ0tFVF9MRU4pID4+IFBBQ0tFVF9MRU5fU0hJRlQ7CiAJCWlmIChhZ254X3BhY2tldF9jaGVjayhwcml2LCBoZHIsIGxlbikgPT0gLTEpIHsKLSAJCQlyeF9kZXNjX3JldXNpbmcocHJpdiwgaSk7CisJCQlyeF9kZXNjX3JldXNpbmcocHJpdiwgaSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlza2JfcHV0KHNrYiwgbGVuKTsKIAogCQlkbyB7Ci0JCQl1MTYgZmN0bDsKKwkJCQl1MTYgZmN0bDsKIAkJCWZjdGwgPSBsZTE2X3RvX2NwdSgoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopaGRyLT5tYWNfaGRyKS0+ZnJhbWVfY29udHJvbCk7Ci0JCQlpZiAoKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgIT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikvLyAmJiAhKGZjdGwgJiBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKSkKKwkJCWlmICgoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSAhPSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKS8qICYmICEoZmN0bCAmIElFRUU4MDIxMV9TVFlQRV9CRUFDT04pKSAqLwogCQkJCWR1bXBfaWVlZTgwMjExX2hkcigoc3RydWN0IGllZWU4MDIxMV9oZHIgKiloZHItPm1hY19oZHIsICJSWCIpOwogCQl9IHdoaWxlICgwKTsKIAogCQlpZiAoaGRyLT5fMTFiMCAmJiAhaGRyLT5fMTFnMCkgewotLyogCQkJaW50IGo7ICovCi0vKiAJCQl1MTYgZmN0bCA9IGxlMTZfdG9fY3B1KCgoc3RydWN0IGllZWU4MDIxMV9oZHIgKiloZHItPm1hY19oZHIpICovCi0vKiAJCQkJCSAgICAgICAtPmZyYW1lX2NvbnRyb2wpOyAqLwotLyogCQkJaWYgKCAoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSAgSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHsgKi8KLS8qIAkJCQlhZ254X3ByaW50X3J4X2hkcihoZHIpOyAqLwotLy8gCQkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIEJTU0lEX1NUQUlEKTsKLS8qIAkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLwotLyogCQkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgaik7CQkgKi8KLS8qIAkJCX0gKi8KKy8qCQkJaW50IGo7CisJCQl1MTYgZmN0bCA9IGxlMTZfdG9fY3B1KCgoc3RydWN0IGllZWU4MDIxMV9oZHIgKiloZHItPm1hY19oZHIpCisJCQkJCSAgICAgICAtPmZyYW1lX2NvbnRyb2wpOworCQkJaWYgKCAoZmN0bCAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA9PSAgSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHsKKwkJCQlhZ254X3ByaW50X3J4X2hkcihoZHIpOworCQkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIEJTU0lEX1NUQUlEKTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQorCQkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgaik7CisJCQl9ICovCiAKIAkJCWdldF9yeF9zdGF0cyhwcml2LCBoZHIsICZzdGF0dXMpOwogCQkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhkcikpOwogCQkJY29tYmluZV9oZHJfZnJhZygoc3RydWN0IGllZWU4MDIxMV9oZHIgKiloZHItPm1hY19oZHIsIHNrYik7CiAJCX0gZWxzZSBpZiAoIWhkci0+XzExYjAgJiYgaGRyLT5fMTFnMCkgewotLy8JCQlpbnQgajsKKy8qCQkJaW50IGo7ICovCiAJCQlhZ254X3ByaW50X3J4X2hkcihoZHIpOwogCQkJYWdueF9wcmludF9zdGEocHJpdiwgQlNTSURfU1RBSUQpOwotLy8JCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQorLyoJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLwogCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIDApOwogCiAJCQlwcmludF9oZXhfZHVtcF9ieXRlcygiYWdueDogUlhfUEFDS0VUOiAiLCBEVU1QX1BSRUZJWF9OT05FLAogCQkJCQkgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4gKyA4KTsKIAotLy8JCQlpZiAoYWdueF9wbGNwX2dldF9iaXRyYXRlX29mZG0oJmhkci0+XzExZzApID09IDApCisvKgkJCWlmIChhZ254X3BsY3BfZ2V0X2JpdHJhdGVfb2ZkbSgmaGRyLT5fMTFnMCkgPT0gMCkgKi8KIAkJCWdldF9yeF9zdGF0cyhwcml2LCBoZHIsICZzdGF0dXMpOwogCQkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhkcikpOwogCQkJY29tYmluZV9oZHJfZnJhZygoc3RydWN0IGllZWU4MDIxMV9oZHIgKikKIAkJCQkJICgodm9pZCAqKSZoZHItPm1hY19oZHIpLCBza2IpOwotLy8JCQlkdW1wX2llZWU4MDIxMV9oZHIoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhLCAiUlggRyIpOworLyoJCQlkdW1wX2llZWU4MDIxMV9oZHIoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhLCAiUlggRyIpOyAqLwogCQl9IGVsc2UKIAkJCWFnbnhfYnVnKCJVbmtub3duIHBhY2tldHMgdHlwZSIpOwogCQlpZWVlODAyMTFfcnhfaXJxc2FmZShwcml2LT5odywgc2tiLCAmc3RhdHVzKTsKIAkJcnhfZGVzY19yZWluaXQocHJpdiwgaSk7CiAKLQl9IHdoaWxlICggcHJpdi0+cnguaWR4KysgKTsKKwl9IHdoaWxlIChwcml2LT5yeC5pZHgrKyk7CiB9IC8qIGhhbmRsZV9yeF9pcnEgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV90eF9pcnEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdiwgc3RydWN0IGFnbnhfcmluZyAqcmluZykKQEAgLTQxNSw0MCArNDE0LDQwIEBACiAJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgaW5mby0+bWFwcGluZywgaW5mby0+ZG1hX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAKIAkJZG8gewotLy8JCQlpbnQgajsKKy8qCQkJaW50IGo7ICovCiAJCQlzaXplX3QgbGVuOwogCQkJbGVuID0gaW5mby0+c2tiLT5sZW4gLSBzaXplb2Yoc3RydWN0IGFnbnhfaGRyKSArIGluZm8tPmhkcl9sZW47Ci0JCQkvLwlpZiAobGVuID09IDYxNCkgewotLy8JCQkJYWdueF9wcmludF9kZXNjKGRlc2MpOworLyoJCQlpZiAobGVuID09IDYxNCkgeyAqLworLyoJCQkJYWdueF9wcmludF9kZXNjKGRlc2MpOyAqLwogCQkJCWlmIChpbmZvLT50eXBlID09IFBBQ0tFVCkgewotLy8JCQkJCWFnbnhfcHJpbnRfdHhfaGRyKChzdHJ1Y3QgYWdueF9oZHIgKilpbmZvLT5za2ItPmRhdGEpOwotLyogCQkJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBMT0NBTF9TVEFJRCk7ICovCi0vKiAJCQkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KLS8qIC8vCQkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLwotLyogCQkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBMT0NBTF9TVEFJRCwgMCk7ICovCi0vLwkJCQkJYWdueF9wcmludF9zdGFfcG93ZXIocHJpdiwgQlNTSURfU1RBSUQpOwotLy8JCQkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIEJTU0lEX1NUQUlEKTsKLS8vCQkJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKQotLy8JCQkJCWFnbnhfcHJpbnRfc3RhX3R4X3dxKHByaXYsIEJTU0lEX1NUQUlELCAwKTsKKy8qCQkJCQlhZ254X3ByaW50X3R4X2hkcigoc3RydWN0IGFnbnhfaGRyICopaW5mby0+c2tiLT5kYXRhKTsgKi8KKy8qCQkJCQlhZ254X3ByaW50X3N0YV9wb3dlcihwcml2LCBMT0NBTF9TVEFJRCk7ICovCisvKgkJCQkJYWdueF9wcmludF9zdGEocHJpdiwgTE9DQUxfU1RBSUQpOyAqLworLyoJCQkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCisvKgkJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgTE9DQUxfU1RBSUQsIDApOyAqLworLyoJCQkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIEJTU0lEX1NUQUlEKTsgKi8KKy8qCQkJCQlhZ254X3ByaW50X3N0YShwcml2LCBCU1NJRF9TVEFJRCk7ICovCisvKgkJCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KKy8qCQkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgMCk7ICovCiAJCQkJfQotLy8JCQl9CisvKgkJCX0gKi8KIAkJfSB3aGlsZSAoMCk7CiAKIAkJaWYgKGluZm8tPnR5cGUgPT0gUEFDS0VUKSB7Ci0vLwkJCWR1bXBfdHhtX3JlZ2lzdGVycyhwcml2KTsKLS8vCQkJZHVtcF9yeG1fcmVnaXN0ZXJzKHByaXYpOwotLy8JCQlkdW1wX2JtX3JlZ2lzdGVycyhwcml2KTsKLS8vCQkJZHVtcF9jaXJfcmVnaXN0ZXJzKHByaXYpOworLyoJCQlkdW1wX3R4bV9yZWdpc3RlcnMocHJpdik7CisJCQlkdW1wX3J4bV9yZWdpc3RlcnMocHJpdik7CisJCQlkdW1wX2JtX3JlZ2lzdGVycyhwcml2KTsKKwkJCWR1bXBfY2lyX3JlZ2lzdGVycyhwcml2KTsgKi8KIAkJfQogCiAJCWlmIChpbmZvLT50eXBlID09IFBBQ0tFVCkgewotLy8JCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworLyoJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOyAqLwogCQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eGkgPSBJRUVFODAyMTFfU0tCX0NCKGluZm8tPnNrYik7CiAKIAkJCXNrYl9wdWxsKGluZm8tPnNrYiwgc2l6ZW9mKHN0cnVjdCBhZ254X2hkcikpOwogCQkJbWVtY3B5KHNrYl9wdXNoKGluZm8tPnNrYiwgaW5mby0+aGRyX2xlbiksICZpbmZvLT5oZHIsIGluZm8tPmhkcl9sZW4pOwogCi0vLwkJCWR1bXBfaWVlZTgwMjExX2hkcigoc3RydWN0IGllZWU4MDIxMV9oZHIgKilpbmZvLT5za2ItPmRhdGEsICJUWF9IQU5ETEUiKTsKKy8qCQkJZHVtcF9pZWVlODAyMTFfaGRyKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWluZm8tPnNrYi0+ZGF0YSwgIlRYX0hBTkRMRSIpOyAqLwogLyogCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFnbng6IFRYX0hBTkRMRTogIiwgRFVNUF9QUkVGSVhfTk9ORSwgKi8KIC8qIAkJCQkJICAgICBpbmZvLT5za2ItPmRhdGEsIGluZm8tPnNrYi0+bGVuKTsgKi8KIApAQCAtNDYyLDcgKzQ2MSw3IEBACiAvKiAJCQkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKHByaXYtPmh3LCBpbmZvLT5za2IsICYoaW5mby0+dHhfc3RhdHVzKSk7ICovCiAvKiAJCQl9IGVsc2UgKi8KIC8qIAkJCQlkZXZfa2ZyZWVfc2tiX2lycShpbmZvLT5za2IpOyAqLwotIAkJfQorCQl9CiAJCW1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKIAkJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOwogCX0KQEAgLTQ4NSw3ICs0ODQsNyBAQAogCiB2b2lkIGhhbmRsZV9vdGhlcl9pcnEoc3RydWN0IGFnbnhfcHJpdiAqcHJpdikKIHsKLS8vCXZvaWQgX19pb21lbSAqY3RsID0gcHJpdi0+Y3RsOworLyoJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7ICovCiAJdTMyIHN0YXR1cyA9IHByaXYtPmlycV9zdGF0dXM7CiAJdm9pZCBfX2lvbWVtICpjdGwgPSBwcml2LT5jdGw7CiAJdTMyIHJlZzsKQEAgLTUyNiwxMSArNTI1LDExIEBACiAJCWlvd3JpdGUzMihyZWcsIGN0bCArIEFHTlhfSU5UX01BU0spOwogCQlpb3dyaXRlMzIoSVJRX1JYX0ZSQU1FLCBjdGwgKyBBR05YX0lOVF9TVEFUKTsKIAkJcHJpbnRrKFBGWCAiSVJROiBSWCBGcmFtZVxuIik7Ci0gCQlyeF9mcmFtZV9jbnQrKzsKKwkJcnhfZnJhbWVfY250Kys7CiAJfQogCWlmIChzdGF0dXMgJiBJUlFfRVJSX0lOVCkgewogCQlpb3dyaXRlMzIoSVJRX0VSUl9JTlQsIGN0bCArIEFHTlhfSU5UX1NUQVQpOwotLy8JCWFnbnhfaHdfcmVzZXQocHJpdik7CisvKgkJYWdueF9od19yZXNldChwcml2KTsgKi8KIAkJcHJpbnRrKFBGWCAiSVJROiBFcnJvciBJbnRlcnJ1cHRcbiIpOwogCX0KIAlpZiAoc3RhdHVzICYgSVJRX1RYX1FVRV9GVUxMKQpAQCAtNTU4LDE0ICs1NTcsMTQgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHJvdXRlX2ZsYWdfc2V0KHN0cnVjdCBhZ254X2hkciAqdHhoZHIpCiB7Ci0vLwl1MzIgcmVnID0gMDsKKy8qCXUzMiByZWcgPSAwOyAqLwogCiAJLyogRklYTUUgKi8KLS8qICAJcmVnID0gKDB4NyA8PCBST1VURV9DT01QUkVTU0lPTl9TSElGVCkgJiBST1VURV9DT01QUkVTU0lPTjsgKi8KLS8qIAl0eGhkci0+cmVnNSA9IGNwdV90b19iZTMyKHJlZyk7ICovCi0gCXR4aGRyLT5yZWc1ID0gKDB4YSA8PCAweDApIHwgKDB4NyA8PCAweDE4KTsKLS8vIAl0eGhkci0+cmVnNSA9IGNwdV90b19iZTMyKCgweGEgPDwgMHgwKSB8ICgweDcgPDwgMHgxOCkpOwotLy8gCXR4aGRyLT5yZWc1ID0gY3B1X3RvX2JlMzIoMHg3IDw8IDB4MCk7CisvKglyZWcgPSAoMHg3IDw8IFJPVVRFX0NPTVBSRVNTSU9OX1NISUZUKSAmIFJPVVRFX0NPTVBSRVNTSU9OOyAqLworLyoJdHhoZHItPnJlZzUgPSBjcHVfdG9fYmUzMihyZWcpOyAqLworCXR4aGRyLT5yZWc1ID0gKDB4YSA8PCAweDApIHwgKDB4NyA8PCAweDE4KTsKKy8qCXR4aGRyLT5yZWc1ID0gY3B1X3RvX2JlMzIoKDB4YSA8PCAweDApIHwgKDB4NyA8PCAweDE4KSk7ICovCisvKgl0eGhkci0+cmVnNSA9IGNwdV90b19iZTMyKDB4NyA8PCAweDApOyAqLwogfQogCiAvKiBSZXR1cm4gMCBpZiBubyBtYXRjaCAqLwpAQCAtNTc5LDEyICs1NzgsMjkgQEAKIAljYXNlIDU1OgogCWNhc2UgNjA6CiAJY2FzZSA5MDoKLQljYXNlIDEyMDogcG93ZXJfbGV2ZWwgPSAyMjsgYnJlYWs7Ci0JY2FzZSAxODA6IHBvd2VyX2xldmVsID0gMTk7IGJyZWFrOwotCWNhc2UgMjQwOiBwb3dlcl9sZXZlbCA9IDE4OyBicmVhazsKLQljYXNlIDM2MDogcG93ZXJfbGV2ZWwgPSAxNjsgYnJlYWs7Ci0JY2FzZSA0ODA6IHBvd2VyX2xldmVsID0gMTU7IGJyZWFrOwotCWNhc2UgNTQwOiBwb3dlcl9sZXZlbCA9IDE0OyBicmVhazsKKwljYXNlIDEyMDoKKwkJcG93ZXJfbGV2ZWwgPSAyMjsKKwkJYnJlYWs7CisKKwljYXNlIDE4MDoKKwkJcG93ZXJfbGV2ZWwgPSAxOTsKKwkJYnJlYWs7CisKKwljYXNlIDI0MDoKKwkJcG93ZXJfbGV2ZWwgPSAxODsKKwkJYnJlYWs7CisKKwljYXNlIDM2MDoKKwkJcG93ZXJfbGV2ZWwgPSAxNjsKKwkJYnJlYWs7CisKKwljYXNlIDQ4MDoKKwkJcG93ZXJfbGV2ZWwgPSAxNTsKKwkJYnJlYWs7CisKKwljYXNlIDU0MDoKKwkJcG93ZXJfbGV2ZWwgPSAxNDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYWdueF9idWcoIkVycm9yIHJhdGUgc2V0dGluZ1xuIik7CiAJfQpAQCAtNjA0LDMwICs2MjAsMzAgQEAKIAogCW1lbXNldCh0eGhkciwgMCwgc2l6ZW9mKCp0eGhkcikpOwogCi0vLwlyZWcgPSBhZ254X3NldF9iaXRzKFNUQVRJT05fSUQsIFNUQVRJT05fSURfU0hJRlQsIExPQ0FMX1NUQUlEKTsKKy8qCXJlZyA9IGFnbnhfc2V0X2JpdHMoU1RBVElPTl9JRCwgU1RBVElPTl9JRF9TSElGVCwgTE9DQUxfU1RBSUQpOyAqLwogCXJlZyA9IGFnbnhfc2V0X2JpdHMoU1RBVElPTl9JRCwgU1RBVElPTl9JRF9TSElGVCwgQlNTSURfU1RBSUQpOwogCXJlZyB8PSBhZ254X3NldF9iaXRzKFdPUktRVUVVRV9JRCwgV09SS1FVRVVFX0lEX1NISUZULCAwKTsKIAl0eGhkci0+cmVnNCA9IGNwdV90b19iZTMyKHJlZyk7CiAKIAkvKiBTZXQgdGhlIEhhcmR3YXJlIFNlcXVlbmNlIE51bWJlciB0byAxPyAqLwogCXJlZyA9IGFnbnhfc2V0X2JpdHMoU0VRVUVOQ0VfTlVNQkVSLCBTRVFVRU5DRV9OVU1CRVJfU0hJRlQsIDApOwotLy8JcmVnID0gYWdueF9zZXRfYml0cyhTRVFVRU5DRV9OVU1CRVIsIFNFUVVFTkNFX05VTUJFUl9TSElGVCwgMSk7CisvKglyZWcgPSBhZ254X3NldF9iaXRzKFNFUVVFTkNFX05VTUJFUiwgU0VRVUVOQ0VfTlVNQkVSX1NISUZULCAxKTsgKi8KIAlyZWcgfD0gYWdueF9zZXRfYml0cyhNQUNfSERSX0xFTiwgTUFDX0hEUl9MRU5fU0hJRlQsIHR4X2luZm8tPmhkcl9sZW4pOwogCXR4aGRyLT5yZWcxID0gY3B1X3RvX2JlMzIocmVnKTsKIAkvKiBTZXQgdGhlIGFnbnhfaGRyJ3MgTUFDIGhlYWRlciAqLwogCW1lbWNweSh0eGhkci0+bWFjX2hkciwgJnR4X2luZm8tPmhkciwgdHhfaW5mby0+aGRyX2xlbik7CiAKIAlyZWcgPSBhZ254X3NldF9iaXRzKEFDSywgQUNLX1NISUZULCAxKTsKLS8vCXJlZyA9IGFnbnhfc2V0X2JpdHMoQUNLLCBBQ0tfU0hJRlQsIDApOworLyoJcmVnID0gYWdueF9zZXRfYml0cyhBQ0ssIEFDS19TSElGVCwgMCk7ICovCiAJcmVnIHw9IGFnbnhfc2V0X2JpdHMoTVVMVElDQVNULCBNVUxUSUNBU1RfU0hJRlQsIDApOwotLy8JcmVnIHw9IGFnbnhfc2V0X2JpdHMoTVVMVElDQVNULCBNVUxUSUNBU1RfU0hJRlQsIDEpOworLyoJcmVnIHw9IGFnbnhfc2V0X2JpdHMoTVVMVElDQVNULCBNVUxUSUNBU1RfU0hJRlQsIDEpOyAqLwogCXJlZyB8PSBhZ254X3NldF9iaXRzKFJFTEFZLCBSRUxBWV9TSElGVCwgMCk7CiAJcmVnIHw9IGFnbnhfc2V0X2JpdHMoVE0sIFRNX1NISUZULCAwKTsKIAl0eGhkci0+cmVnMCA9IGNwdV90b19iZTMyKHJlZyk7CiAKIAkvKiBTZXQgdGhlIGxvbmcgYW5kIHNob3J0IHJldHJ5IGxpbWl0cyAqLwotIAl0eGhkci0+dHguc2hvcnRfcmV0cnlfbGltaXQgPSB0eF9pbmZvLT50eGktPmNvbnRyb2wucmF0ZXNbMF0uY291bnQ7Ci0gCXR4aGRyLT50eC5sb25nX3JldHJ5X2xpbWl0ID0gdHhfaW5mby0+dHhpLT5jb250cm9sLnJhdGVzWzBdLmNvdW50OworCXR4aGRyLT50eC5zaG9ydF9yZXRyeV9saW1pdCA9IHR4X2luZm8tPnR4aS0+Y29udHJvbC5yYXRlc1swXS5jb3VudDsKKwl0eGhkci0+dHgubG9uZ19yZXRyeV9saW1pdCA9IHR4X2luZm8tPnR4aS0+Y29udHJvbC5yYXRlc1swXS5jb3VudDsKIAogCS8qIEZJWE1FICovCiAJbGVuID0gdHhfaW5mby0+c2tiLT5sZW4gLSBzaXplb2YoKnR4aGRyKSArIHR4X2luZm8tPmhkcl9sZW4gKyBGQ1NfTEVOOwpAQCAtNjUyLDIzICs2NjgsMjMgQEAKIAlpZiAodHhpLT5jb250cm9sLnJhdGVzWzBdLmlkeCA8IDApIHsKIAkJLyogRm9yIEIgbW9kZSBTaG9ydCBQcmVhbWJsZSAqLwogCQlyZWcgPSBhZ254X3NldF9iaXRzKFBIWV9NT0RFLCBQSFlfTU9ERV9TSElGVCwgQUdOWF9NT0RFXzgwMjExQl9TSE9SVCk7Ci0vLwkJY29udHJvbC0+dHhfcmF0ZSA9IC1jb250cm9sLT50eF9yYXRlOworLyoJCWNvbnRyb2wtPnR4X3JhdGUgPSAtY29udHJvbC0+dHhfcmF0ZTsgKi8KIAl9IGVsc2UKIAkJcmVnID0gYWdueF9zZXRfYml0cyhQSFlfTU9ERSwgUEhZX01PREVfU0hJRlQsIEFHTlhfTU9ERV84MDIxMUcpOwotLy8JCXJlZyA9IGFnbnhfc2V0X2JpdHMoUEhZX01PREUsIFBIWV9NT0RFX1NISUZULCBBR05YX01PREVfODAyMTFCX0xPTkcpOworLyoJCXJlZyA9IGFnbnhfc2V0X2JpdHMoUEhZX01PREUsIFBIWV9NT0RFX1NISUZULCBBR05YX01PREVfODAyMTFCX0xPTkcpOyAqLwogCXJlZyB8PSBhZ254X3NldF9iaXRzKFNJR05BTCwgU0lHTkFMX1NISUZULCAweEIpOwogCXJlZyB8PSBhZ254X3NldF9iaXRzKFJBVEUsIFJBVEVfU0hJRlQsIDB4Qik7Ci0vLwlyZWcgfD0gYWdueF9zZXRfYml0cyhQT1dFUl9MRVZFTCwgUE9XRVJfTEVWRUxfU0hJRlQsIDE1KTsKKy8qCXJlZyB8PSBhZ254X3NldF9iaXRzKFBPV0VSX0xFVkVMLCBQT1dFUl9MRVZFTF9TSElGVCwgMTUpOyAqLwogCXJlZyB8PSBhZ254X3NldF9iaXRzKFBPV0VSX0xFVkVMLCBQT1dFUl9MRVZFTF9TSElGVCwgMjApOwogCS8qIGlmIHJhdGUgPCAxMU0gc2V0IGl0IHRvIDAgKi8KIAlyZWcgfD0gYWdueF9zZXRfYml0cyhOVU1fVFJBTlNNSVRURVJTLCBOVU1fVFJBTlNNSVRURVJTX1NISUZULCAxKTsKLS8vCXJlZyB8PSBhZ254X3NldF9iaXRzKEVEQ0YsIEVEQ0ZfU0hJRlQsIDEpOwotLy8JcmVnIHw9IGFnbnhfc2V0X2JpdHMoVElGUywgVElGU19TSElGVCwgMSk7CisvKglyZWcgfD0gYWdueF9zZXRfYml0cyhFRENGLCBFRENGX1NISUZULCAxKTsgKi8KKy8qCXJlZyB8PSBhZ254X3NldF9iaXRzKFRJRlMsIFRJRlNfU0hJRlQsIDEpOyAqLwogCiAJcG93ZXIucmVnID0gcmVnOwotLy8JcG93ZXIucmVnID0gY3B1X3RvX2xlMzIocmVnKTsKKy8qCXBvd2VyLnJlZyA9IGNwdV90b19sZTMyKHJlZyk7ICovCiAKLS8vCXNldF9zdGFfcG93ZXIocHJpdiwgJnBvd2VyLCBMT0NBTF9TVEFJRCk7CisvKglzZXRfc3RhX3Bvd2VyKHByaXYsICZwb3dlciwgTE9DQUxfU1RBSUQpOyAqLwogCXNldF9zdGFfcG93ZXIocHJpdiwgJnBvd2VyLCBCU1NJRF9TVEFJRCk7CiB9CiAKQEAgLTc1OSwyNCArNzc1LDI0IEBACiAKIAl0eG1fcG93ZXJfc2V0KHByaXYsIHR4aSk7CiAKLS8qIAlkbyB7ICovCi0vKiAJCWludCBqOyAqLwotLyogCQlzaXplX3QgbGVuOyAqLwotLyogCQlsZW4gPSBza2ItPmxlbiAtIGhkcl9pbmZvLT5kbWFfbGVuICsgaGRyX2luZm8tPmhkcl9sZW47ICAqLwotLyogLy8JCWlmIChsZW4gPT0gNjE0KSB7ICovCi0vKiAJCQlhZ254X3ByaW50X2Rlc2MoaGRyX2Rlc2MpOyAqLwotLyogCQkJYWdueF9wcmludF9kZXNjKGZyYWdfZGVzYyk7ICovCi0vKiAJCQlhZ254X3ByaW50X3R4X2hkcigoc3RydWN0IGFnbnhfaGRyICopc2tiLT5kYXRhKTsgKi8KLS8qIAkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KLS8qIAkJCWFnbnhfcHJpbnRfc3RhKHByaXYsIExPQ0FMX1NUQUlEKTsgKi8KLS8qIAkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCi0vKiAJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgTE9DQUxfU1RBSUQsIGopOyAqLwotLyogCQkJYWdueF9wcmludF9zdGFfcG93ZXIocHJpdiwgQlNTSURfU1RBSUQpOyAqLwotLyogCQkJYWdueF9wcmludF9zdGEocHJpdiwgQlNTSURfU1RBSUQpOyAqLwotLyogCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgKi8KLS8qIAkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBCU1NJRF9TVEFJRCwgaik7ICovCi0vKiAJCQkvLwl9ICovCi0vKiAJfSB3aGlsZSAoMCk7ICovCisvKglkbyB7ICovCisvKgkJaW50IGo7ICovCisvKgkJc2l6ZV90IGxlbjsgKi8KKy8qCQlsZW4gPSBza2ItPmxlbiAtIGhkcl9pbmZvLT5kbWFfbGVuICsgaGRyX2luZm8tPmhkcl9sZW47ICAqLworLyoJCWlmIChsZW4gPT0gNjE0KSB7ICovCisvKgkJCWFnbnhfcHJpbnRfZGVzYyhoZHJfZGVzYyk7ICovCisvKgkJCWFnbnhfcHJpbnRfZGVzYyhmcmFnX2Rlc2MpOyAqLworLyoJCQlhZ254X3ByaW50X3R4X2hkcigoc3RydWN0IGFnbnhfaGRyICopc2tiLT5kYXRhKTsgKi8KKy8qCQkJYWdueF9wcmludF9zdGFfcG93ZXIocHJpdiwgTE9DQUxfU1RBSUQpOyAqLworLyoJCQlhZ254X3ByaW50X3N0YShwcml2LCBMT0NBTF9TVEFJRCk7ICovCisvKgkJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspICovCisvKgkJCQlhZ254X3ByaW50X3N0YV90eF93cShwcml2LCBMT0NBTF9TVEFJRCwgaik7ICovCisvKgkJCWFnbnhfcHJpbnRfc3RhX3Bvd2VyKHByaXYsIEJTU0lEX1NUQUlEKTsgKi8KKy8qCQkJYWdueF9wcmludF9zdGEocHJpdiwgQlNTSURfU1RBSUQpOyAqLworLyoJCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSAqLworLyoJCQkJYWdueF9wcmludF9zdGFfdHhfd3EocHJpdiwgQlNTSURfU1RBSUQsIGopOyAqLworLyoJCQl9ICovCisvKgl9IHdoaWxlICgwKTsgKi8KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIApAQCAtNzg3LDcgKzgwMyw3IEBACiAJCXJlZyA9IChpb3JlYWQzMihwcml2LT5jdGwgKyBBR05YX0NJUl9UWE1DVEwpKTsKIAkJcmVnIHw9IDB4ODsKIAkJaW93cml0ZTMyKChyZWcpLCBwcml2LT5jdGwgKyBBR05YX0NJUl9UWE1DVEwpOwotCX13aGlsZSAoMCk7CisJfSB3aGlsZSAoMCk7CiAKIAkvKiBUcmlnZ2VyIFRYRCAqLwogCWRvIHsKQEAgLTc5NSw3ICs4MTEsNyBAQAogCQlyZWcgPSAoaW9yZWFkMzIocHJpdi0+Y3RsICsgQUdOWF9DSVJfVFhEQ1RMKSk7CiAJCXJlZyB8PSAweDg7CiAJCWlvd3JpdGUzMigocmVnKSwgcHJpdi0+Y3RsICsgQUdOWF9DSVJfVFhEQ1RMKTsKLQl9d2hpbGUgKDApOworCX0gd2hpbGUgKDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04MDcsMTIgKzgyMywxMiBAQAogCWlmICh0eF9wYWNrZXRfY2hlY2soc2tiKSkKIAkJcmV0dXJuIDA7CiAKLS8qIAlwcmludF9oZXhfZHVtcF9ieXRlcygiYWdueDogVFhfUEFDS0VUOiAiLCBEVU1QX1BSRUZJWF9OT05FLCAqLwotLyogCQkJICAgICBza2ItPmRhdGEsIHNrYi0+bGVuKTsgKi8KKy8qCXByaW50X2hleF9kdW1wX2J5dGVzKCJhZ254OiBUWF9QQUNLRVQ6ICIsIERVTVBfUFJFRklYX05PTkUsICovCisvKgkJCSAgICAgc2tiLT5kYXRhLCBza2ItPmxlbik7ICovCiAKLSAgICAgICAgZmN0bCA9IGxlMTZfdG9fY3B1KCooKF9fbGUxNiAqKXNrYi0+ZGF0YSkpOworCWZjdGwgPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKilza2ItPmRhdGEpKTsKIAotCWlmICggKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgID09IElFRUU4MDIxMV9GVFlQRV9EQVRBICkKKwlpZiAoKGZjdGwgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpCiAJCXJldHVybiBfX2FnbnhfdHgocHJpdiwgc2tiLCAmcHJpdi0+dHhkKTsKIAllbHNlCiAJCXJldHVybiBfX2FnbnhfdHgocHJpdiwgc2tiLCAmcHJpdi0+dHhtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvYWx0cGNpZWNoZG1hLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWx0cGNpZWNoZG1hL2FsdHBjaWVjaGRtYS5jCmluZGV4IGY1MTYxNDAuLjNlNDFlMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvYWx0cGNpZWNoZG1hLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9hbHRwY2llY2hkbWEuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTMxMywxNSArMzEyLDE2IEBACiAJCQljb250aW51ZTsKIAkJLyogZG8gbm90IG1hcCBCQVJzIHdpdGggYWRkcmVzcyAwICovCiAJCWlmICghYmFyX3N0YXJ0IHx8ICFiYXJfZW5kKSB7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiQkFSICMlZCBpcyBub3QgcHJlc2VudD8hXG4iLCBpKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJCQVIgIyVkIGlzIG5vdCBwcmVzZW50PyFcbiIsIGkpOwogCQkJcmMgPSAtMTsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCQliYXJfbGVuZ3RoID0gYmFyX2VuZCAtIGJhcl9zdGFydCArIDE7CiAJCS8qIEJBUiBsZW5ndGggaXMgbGVzcyB0aGFuIGRyaXZlciByZXF1aXJlcz8gKi8KIAkJaWYgKGJhcl9sZW5ndGggPCBiYXJfbWluX2xlbltpXSkgewotICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIkJBUiAjJWQgbGVuZ3RoID0gJWx1IGJ5dGVzIGJ1dCBkcml2ZXIgIgotICAgICAgICAgICAgInJlcXVpcmVzIGF0IGxlYXN0ICVsdSBieXRlc1xuIiwgaSwgYmFyX2xlbmd0aCwgYmFyX21pbl9sZW5baV0pOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIkJBUiAjJWQgbGVuZ3RoID0gJWx1IGJ5dGVzIGJ1dCBkcml2ZXIgIgorCQkJInJlcXVpcmVzIGF0IGxlYXN0ICVsdSBieXRlc1xuIiwKKwkJCWksIGJhcl9sZW5ndGgsIGJhcl9taW5fbGVuW2ldKTsKIAkJCXJjID0gLTE7CiAJCQlnb3RvIGZhaWw7CiAJCX0KQEAgLTMzMyw4ICszMzMsOCBAQAogCQkJcmMgPSAtMTsKIAkJCWdvdG8gZmFpbDsKIAkJfQotICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiQkFSWyVkXSBtYXBwZWQgYXQgMHglcCB3aXRoIGxlbmd0aCAlbHUoLyVsdSkuXG4iLCBpLAotCQkJYXBlLT5iYXJbaV0sIGJhcl9taW5fbGVuW2ldLCBiYXJfbGVuZ3RoKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJBUlslZF0gbWFwcGVkIGF0IDB4JXAgd2l0aCBsZW5ndGggJWx1KC8lbHUpLlxuIiwgaSwKKwkJYXBlLT5iYXJbaV0sIGJhcl9taW5fbGVuW2ldLCBiYXJfbGVuZ3RoKTsKIAl9CiAJLyogc3VjY2VzZnVsbHkgbWFwcGVkIGFsbCByZXF1aXJlZCBCQVIgcmVnaW9ucyAqLwogCXJjID0gMDsKQEAgLTQyNywxMSArNDI3LDEzIEBACiAJCWRtYV9hZGRyX3QgbmV4dCA9IHNnX2RtYV9hZGRyZXNzKCZzZ2xbaSArIDFdKTsKIAkJLyogbGVuZ3RoIG9mIHRoaXMgZW50cnkgaSAqLwogCQlsZW4gPSBzZ19kbWFfbGVuKCZzZ2xbaV0pOwotCQlwcmludGsoS0VSTl9ERUJVRyAiJTA0ZDogYWRkcj0weCUwOHggbGVuZ3RoPTB4JTA4eFxuIiwgaSwgYWRkciwgbGVuKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiUwNGQ6IGFkZHI9MHglTHggbGVuZ3RoPTB4JTA4eFxuIiwgaSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgbGVuKTsKIAkJLyogZW50cnkgaSArIDEgaXMgbm9uLWNvbnRpZ3VvdXMgd2l0aCBlbnRyeSBpPyAqLwogCQlpZiAobmV4dCAhPSBhZGRyICsgbGVuKSB7CiAJCQkvKiBUT0RPIGNyZWF0ZSBlbnRyeSBoZXJlICh3ZSBjb3VsZCBvdmVyd3JpdGUgaSkgKi8KLQkJCXByaW50ayhLRVJOX0RFQlVHICIlNGQ6IGNvbnRfYWRkcj0weCUwOHggY29udF9sZW49MHglMDh4XG4iLCBqLCBjb250X2FkZHIsIGNvbnRfbGVuKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlNGQ6IGNvbnRfYWRkcj0weCVMeCBjb250X2xlbj0weCUwOHhcbiIsIGosCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb250X2FkZHIsIGNvbnRfbGVuKTsKIAkJCS8qIHNldCBkZXNjcmlwdG9yIGZvciBjb250aWd1b3VzIHRyYW5zZmVyICovCiAJCQlhcGVfY2hkbWFfZGVzY19zZXQoJmRlc2Nbal0sIGNvbnRfYWRkciwgZXBfYWRkciwgY29udF9sZW4pOwogCQkJLyogbmV4dCBlbmQgcG9pbnQgbWVtb3J5IGFkZHJlc3MgKi8KQEAgLTQ0Nyw4ICs0NDksMTAgQEAKIAkJYWRkciA9IG5leHQ7CiAJfQogCS8qIFRPRE8gY3JlYXRlIGVudHJ5IGhlcmUgICh3ZSBjb3VsZCBvdmVyd3JpdGUgaSkgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiJTA0ZDogYWRkcj0weCUwOHggbGVuZ3RoPTB4JTA4eFxuIiwgaSwgYWRkciwgbGVuKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJTRkOiBjb250X2FkZHI9MHglMDh4IGxlbmd0aD0weCUwOHhcbiIsIGosIGNvbnRfYWRkciwgY29udF9sZW4pOworCXByaW50ayhLRVJOX0RFQlVHICIlMDRkOiBhZGRyPTB4JUx4IGxlbmd0aD0weCUwOHhcbiIsIGksCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgbGVuKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJTRkOiBjb250X2FkZHI9MHglTHggbGVuZ3RoPTB4JTA4eFxuIiwgaiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb250X2FkZHIsIGNvbnRfbGVuKTsKIAlqKys7CiAJcmV0dXJuIGo7CiB9CkBAIC00NjcsMTUgKzQ3MSwxNCBAQAogCQl9IGVsc2UgewogCQkJZmFpbCsrOwogCQkJLyogc2hvdyB0aGUgZmlyc3QgZmV3IG1pc2NvbXBhcmVzICovCi0JCQlpZiAoZmFpbCA8IDEwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIlslcF0gPSAweCUwOHggIT0gWyVwXSA9IDB4JTA4eCA/IVxuIiwgcCwgKnAsIHEsICpxKTsKLSAgICAgICAgICAgIC8qIGJ1dCBzdG9wIGFmdGVyIGEgd2hpbGUgKi8KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZmFpbCA9PSAxMCkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICItLS1tb3JlIGVycm9ycyBmb2xsb3chIG5vdCBwcmludGVkLS0tXG4iKTsKLQkJICAJfSBlbHNlIHsKKwkJCWlmIChmYWlsIDwgMTApCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIlslcF0gPSAweCUwOHggIT0gWyVwXSA9IDB4JTA4eCA/IVxuIiwgcCwgKnAsIHEsICpxKTsKKwkJCQkvKiBidXQgc3RvcCBhZnRlciBhIHdoaWxlICovCisJCQllbHNlIGlmIChmYWlsID09IDEwKQorCQkJCXByaW50ayhLRVJOX0RFQlVHICItLS1tb3JlIGVycm9ycyBmb2xsb3chIG5vdCBwcmludGVkLS0tXG4iKTsKKwkJCWVsc2UKIAkJCQkvKiBzdG9wIGNvbXBhcmUgYWZ0ZXIgdGhpcyBtYW55IGVycm9ycyAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorCQkJYnJlYWs7CiAJCX0KIAkJcCsrOwogCQlxKys7CkBAIC01MjgsNyArNTMxLDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiYXBlLT50YWJsZV92aXJ0ID0gMHglcC5cbiIsIGFwZS0+dGFibGVfdmlydCk7CiAKIAlpZiAoIXdyaXRlX2hlYWRlciB8fCAhcmVhZF9oZWFkZXIgfHwgIWFwZS0+dGFibGVfdmlydCkKLSAgICAgICAgZ290byBmYWlsOworCQlnb3RvIGZhaWw7CiAKIAkvKiBhbGxvY2F0ZSBhbmQgbWFwIGNvaGVyZW50bHktY2FjaGVkIG1lbW9yeSBmb3IgYSBETUEtYWJsZSBidWZmZXIgKi8KIAkvKiBAc2VlIERvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQsIG5lYXIgbGluZSAzMTggKi8KQEAgLTU2NSw5ICs1NjgsOCBAQAogCS8qIHJlYWQgODE5MiBieXRlcyBmcm9tIFJDIGJ1ZmZlciB0byBFUCBhZGRyZXNzIDQwOTYgKi8KIAlhcGVfY2hkbWFfZGVzY19zZXQoJmFwZS0+dGFibGVfdmlydC0+ZGVzY1tuXSwgYnVmZmVyX2J1cywgNDA5NiwgMiAqIFBBR0VfU0laRSk7CiAjaWYgMQotCWZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykKIAkJYXBlX2NoZG1hX2Rlc2Nfc2V0KCZhcGUtPnRhYmxlX3ZpcnQtPmRlc2NbaV0sIGJ1ZmZlcl9idXMsIDQwOTYsIDIgKiBQQUdFX1NJWkUpOwotCX0KIAkvKiBpbmRleCBvZiBsYXN0IGRlc2NyaXB0b3IgKi8KIAluID0gaSAtIDE7CiAjZW5kaWYKQEAgLTY0Nyw3ICs2NDksNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiRVBMQVNUID0gJXUsIG4gPSAlZFxuIiwgZXBsYXN0LCBuKTsKIAkJaWYgKGVwbGFzdCA9PSBuKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiRE9ORVxuIik7Ci0gICAgICAgICAgICAvKiBwcmludCBJUlEgY291bnQgYmVmb3JlIHRoZSB0cmFuc2ZlciAqLworCQkJLyogcHJpbnQgSVJRIGNvdW50IGJlZm9yZSB0aGUgdHJhbnNmZXIgKi8KIAkJCXByaW50ayhLRVJOX0RFQlVHICIjSVJRcyBkdXJpbmcgdHJhbnNmZXI6ICVkXG4iLCBhcGUtPmlycV9jb3VudCAtIGlycV9jb3VudCk7CiAJCQlicmVhazsKIAkJfQpAQCAtNjYxLDkgKzY2Myw5IEBACiAJbiA9IDA7CiAJYXBlX2NoZG1hX2Rlc2Nfc2V0KCZhcGUtPnRhYmxlX3ZpcnQtPmRlc2Nbbl0sIGJ1ZmZlcl9idXMgKyA4MTkyLCA0MDk2LCAyICogUEFHRV9TSVpFKTsKICNpZiAxCi0JZm9yIChpID0gMDsgaSA8IDI1NTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IDI1NTsgaSsrKQogCQlhcGVfY2hkbWFfZGVzY19zZXQoJmFwZS0+dGFibGVfdmlydC0+ZGVzY1tpXSwgYnVmZmVyX2J1cyArIDgxOTIsIDQwOTYsIDIgKiBQQUdFX1NJWkUpOwotCX0KKwogCS8qIGluZGV4IG9mIGxhc3QgZGVzY3JpcHRvciAqLwogCW4gPSBpIC0gMTsKICNlbmRpZgpAQCAtNjkxLDcgKzY5Myw3IEBACiAJdyA9ICh1MzIpKG4gKyAxKTsKIAkvKiBlbmFibGUgdXBkYXRlcyBvZiBlcGxhc3QgZm9yIGVhY2ggZGVzY3JpcHRvciBjb21wbGV0aW9uICovCiAJdyB8PSAodTMyKSgxVUwgPDwgMTgpLypnbG9iYWwgRVBMQVNUX0VOKi87Ci0jaWYgMCAvLyB0ZXN0IHZhcmlhYmxlLCBtYWtlIGEgbW9kdWxlIG9wdGlvbiBsYXRlcgorI2lmIDAgICAvKiB0ZXN0IHZhcmlhYmxlLCBtYWtlIGEgbW9kdWxlIG9wdGlvbiBsYXRlciAqLwogCS8qIGVuYWJsZSBNU0kgZm9yIGVhY2ggZGVzY3JpcHRvciBjb21wbGV0aW9uICovCiAJaWYgKGFwZS0+bXNpX2VuYWJsZWQpCiAJCXcgfD0gKDFVTCA8PCAxNykvKmdsb2JhbCBNU0kqLzsKQEAgLTcxNSw3ICs3MTcsNyBAQAogCS8qKiBtZW1vcnkgd3JpdGUgYmFycmllciAqLwogCXdtYigpOwogCS8qKiBkdW1teSByZWFkIHRvIGZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KLQkvLyh2b2lkKWlvcmVhZDMyKCk7CisJLyogKHZvaWQpIGlvcmVhZDMyKCk7ICovCiAKIAlwcmludGsoS0VSTl9ERUJVRyAiUE9MTCBGT1IgV1JJVEU6XG4iKTsKIAkvKiBwb2xsIGZvciBjb21wbGV0aW9uLCAxMDAwIHRpbWVzIDEgbWlsbGlzZWNvbmQgKi8KQEAgLTg0NCw3ICs4NDYsNyBAQAogCX0KIAlhcGUtPmdvdF9yZWdpb25zID0gMTsKIAotI2lmIDEgLy8gQHRvZG8gRm9yIG5vdywgZGlzYWJsZSA2NC1iaXQsIGJlY2F1c2UgSSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIChEQUMhKQorI2lmIDEgICAvKiBAdG9kbyBGb3Igbm93LCBkaXNhYmxlIDY0LWJpdCwgYmVjYXVzZSBJIGRvIG5vdCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgKERBQyEpICovCiAJLyogcXVlcnkgZm9yIERNQSB0cmFuc2ZlciAqLwogCS8qIEBzZWUgRG9jdW1lbnRhdGlvbi9QQ0kvUENJLURNQS1tYXBwaW5nLnR4dCAqLwogCWlmICghcGNpX3NldF9kbWFfbWFzayhkZXYsIERNQV82NEJJVF9NQVNLKSkgewpAQCAtOTQ3LDcgKzk0OSw4IEBACiAJc3RydWN0IGFwZV9kZXYgKmFwZTsKIAlwcmludGsoS0VSTl9ERUJVRyAicmVtb3ZlKDB4JXApXG4iLCBkZXYpOwogCWlmICgoZGV2ID09IDApIHx8IChkZXYtPmRldi5kcml2ZXJfZGF0YSA9PSAwKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAicmVtb3ZlKGRldiA9IDB4JXApIGRldi0+ZGV2LmRyaXZlcl9kYXRhID0gMHglcFxuIiwgZGV2LCBkZXYtPmRldi5kcml2ZXJfZGF0YSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJyZW1vdmUoZGV2ID0gMHglcCkgZGV2LT5kZXYuZHJpdmVyX2RhdGEgPSAweCVwXG4iLAorCQkJZGV2LCAoZGV2PyBkZXYtPmRldi5kcml2ZXJfZGF0YTogTlVMTCkpOwogCQlyZXR1cm47CiAJfQogCWFwZSA9IChzdHJ1Y3QgYXBlX2RldiAqKWRldi0+ZGV2LmRyaXZlcl9kYXRhOwpAQCAtMTA0OCwxMCArMTA1MSw5IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUgIl93cml0ZShidWY9MHglcCwgY291bnQ9JWxsZCwgcG9zPSVsbHUpXG4iLAogCQlidWYsIChzNjQpY291bnQsICh1NjQpKnBvcyk7CiAJLyogVE9ETyB0cmFuc2ZlciBib3VuZGFyaWVzIGF0IFBBR0VfU0laRSBncmFudWxhcml0eSAqLwotCXdoaWxlIChyZW1haW5pbmcgPiAwKQotCXsKKwl3aGlsZSAocmVtYWluaW5nID4gMCkgewogCQkvKiBsaW1pdCBETUEgdHJhbnNmZXIgc2l6ZSAqLwotCQl0cmFuc2Zlcl9sZW4gPSAocmVtYWluaW5nIDwgQVBFX0NIRE1BX01BWF9UUkFOU0ZFUl9MRU4pPyByZW1haW5pbmc6CisJCXRyYW5zZmVyX2xlbiA9IChyZW1haW5pbmcgPCBBUEVfQ0hETUFfTUFYX1RSQU5TRkVSX0xFTikgPyByZW1haW5pbmcgOgogCQkJQVBFX0NIRE1BX01BWF9UUkFOU0ZFUl9MRU47CiAJCS8qIGdldCBhbGwgdXNlciBzcGFjZSBidWZmZXIgcGFnZXMgYW5kIGNyZWF0ZSBhIHNjYXR0ZXJnYXRoZXIgbGlzdCAqLwogCQlzZ21fbWFwX3VzZXJfcGFnZXMoYXBlLT5zZ20sIHRyYW5zZmVyX2FkZHIsIHRyYW5zZmVyX2xlbiwgMC8qcmVhZCBmcm9tIHVzZXJzcGFjZSovKTsKQEAgLTEwODUsMTIgKzEwODcsMTIgQEAKIC8qCiAgKiBjaGFyYWN0ZXIgZGV2aWNlIGZpbGUgb3BlcmF0aW9ucwogICovCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZ19mb3BzID0gewotICAub3duZXIgPSBUSElTX01PRFVMRSwKLSAgLm9wZW4gPSBzZ19vcGVuLAotICAucmVsZWFzZSA9IHNnX2Nsb3NlLAotICAucmVhZCA9IHNnX3JlYWQsCi0gIC53cml0ZSA9IHNnX3dyaXRlLAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2dfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHNnX29wZW4sCisJLnJlbGVhc2UgPSBzZ19jbG9zZSwKKwkucmVhZCA9IHNnX3JlYWQsCisJLndyaXRlID0gc2dfd3JpdGUsCiB9OwogCiAvKiBzZ19pbml0KCkgLSBJbml0aWFsaXplIGNoYXJhY3RlciBkZXZpY2UKQEAgLTExNTgsMTIgKzExNjAsMTIgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgYWx0ZXJhcGNpZWNoZG1hX2luaXQodm9pZCkKIHsKLSAgaW50IHJjID0gMDsKKwlpbnQgcmMgPSAwOwogCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICIgaW5pdCgpLCBidWlsdCBhdCAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiXG4iKTsKIAkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBQQ0kgYnVzIGRyaXZlciAqLwogCXJjID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGNpX2RyaXZlcik7CiAJaWYgKHJjIDwgMCkKLQkgIHJldHVybiByYzsKKwkJcmV0dXJuIHJjOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9iaW5kZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2JpbmRlci5jCmluZGV4IDc1ODEzMWMuLjc5ZTkwZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2JpbmRlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2JpbmRlci5jCkBAIC0yNjQ5LDE0ICsyNjQ5LDIyIEBACiB7CiAJc3RydWN0IGJpbmRlcl9wcm9jICpwcm9jID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CiAJaWYgKGJpbmRlcl9kZWJ1Z19tYXNrICYgQklOREVSX0RFQlVHX09QRU5fQ0xPU0UpCi0JCXByaW50ayhLRVJOX0lORk8gImJpbmRlcjogJWQgb3BlbiB2bSBhcmVhICVseC0lbHggKCVsZCBLKSB2bWEgJWx4IHBhZ2VwICVseFxuIiwgcHJvYy0+cGlkLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgLyBTWl8xSywgdm1hLT52bV9mbGFncywgcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkpOworCQlwcmludGsoS0VSTl9JTkZPCisJCQkiYmluZGVyOiAlZCBvcGVuIHZtIGFyZWEgJWx4LSVseCAoJWxkIEspIHZtYSAlbHggcGFnZXAgJWx4XG4iLAorCQkJcHJvYy0+cGlkLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKKwkJCSh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpIC8gU1pfMUssIHZtYS0+dm1fZmxhZ3MsCisJCQkodW5zaWduZWQgbG9uZylwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSk7CiAJZHVtcF9zdGFjaygpOwogfQogc3RhdGljIHZvaWQgYmluZGVyX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgYmluZGVyX3Byb2MgKnByb2MgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKIAlpZiAoYmluZGVyX2RlYnVnX21hc2sgJiBCSU5ERVJfREVCVUdfT1BFTl9DTE9TRSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYmluZGVyOiAlZCBjbG9zZSB2bSBhcmVhICVseC0lbHggKCVsZCBLKSB2bWEgJWx4IHBhZ2VwICVseFxuIiwgcHJvYy0+cGlkLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgLyBTWl8xSywgdm1hLT52bV9mbGFncywgcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkpOworCQlwcmludGsoS0VSTl9JTkZPCisJCQkiYmluZGVyOiAlZCBjbG9zZSB2bSBhcmVhICVseC0lbHggKCVsZCBLKSB2bWEgJWx4IHBhZ2VwICVseFxuIiwKKwkJCXByb2MtPnBpZCwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCisJCQkodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSAvIFNaXzFLLCB2bWEtPnZtX2ZsYWdzLAorCQkJKHVuc2lnbmVkIGxvbmcpcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkpOwogCXByb2MtPnZtYSA9IE5VTEw7CiB9CiAKQEAgLTI2NzcsNyArMjY4NSwxMSBAQAogCQl2bWEtPnZtX2VuZCA9IHZtYS0+dm1fc3RhcnQgKyBTWl80TTsKIAogCWlmIChiaW5kZXJfZGVidWdfbWFzayAmIEJJTkRFUl9ERUJVR19PUEVOX0NMT1NFKQotCQlwcmludGsoS0VSTl9JTkZPICJiaW5kZXJfbW1hcDogJWQgJWx4LSVseCAoJWxkIEspIHZtYSAlbHggcGFnZXAgJWx4XG4iLCBwcm9jLT5waWQsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSAvIFNaXzFLLCB2bWEtPnZtX2ZsYWdzLCBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSk7CisJCXByaW50ayhLRVJOX0lORk8KKwkJCSJiaW5kZXJfbW1hcDogJWQgJWx4LSVseCAoJWxkIEspIHZtYSAlbHggcGFnZXAgJWx4XG4iLAorCQkJcHJvYy0+cGlkLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKKwkJCSh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpIC8gU1pfMUssIHZtYS0+dm1fZmxhZ3MsCisJCQkodW5zaWduZWQgbG9uZylwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSk7CiAKIAlpZiAodm1hLT52bV9mbGFncyAmIEZPUkJJRERFTl9NTUFQX0ZMQUdTKSB7CiAJCXJldCA9IC1FUEVSTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3JhbV9jb25zb2xlLmMgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9yYW1fY29uc29sZS5jCmluZGV4IDY0M2FjNWMuLjMzNzVjMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3JhbV9jb25zb2xlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvcmFtX2NvbnNvbGUuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiAJCWJ1ZmZlcl9zaXplIC0gc2l6ZW9mKHN0cnVjdCByYW1fY29uc29sZV9idWZmZXIpOwogCiAJaWYgKHJhbV9jb25zb2xlX2J1ZmZlcl9zaXplID4gYnVmZmVyX3NpemUpIHsKLQkJcHJfZXJyKCJyYW1fY29uc29sZTogYnVmZmVyICVwLCBpbnZhbGlkIHNpemUgJWQsIGRhdGFzaXplICVkXG4iLAorCQlwcl9lcnIoInJhbV9jb25zb2xlOiBidWZmZXIgJXAsIGludmFsaWQgc2l6ZSAlenUsIGRhdGFzaXplICV6dVxuIiwKIAkJICAgICAgIGJ1ZmZlciwgYnVmZmVyX3NpemUsIHJhbV9jb25zb2xlX2J1ZmZlcl9zaXplKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjM1LDggKzIzNSw4IEBACiAJCQkJCQlFQ0NfQkxPQ0tfU0laRSkgKyAxKSAqIEVDQ19TSVpFOwogCiAJaWYgKHJhbV9jb25zb2xlX2J1ZmZlcl9zaXplID4gYnVmZmVyX3NpemUpIHsKLQkJcHJfZXJyKCJyYW1fY29uc29sZTogYnVmZmVyICVwLCBpbnZhbGlkIHNpemUgJWQsICIKLQkJICAgICAgICJub24tZWNjIGRhdGFzaXplICVkXG4iLAorCQlwcl9lcnIoInJhbV9jb25zb2xlOiBidWZmZXIgJXAsIGludmFsaWQgc2l6ZSAlenUsICIKKwkJICAgICAgICJub24tZWNjIGRhdGFzaXplICV6dVxuIiwKIAkJICAgICAgIGJ1ZmZlciwgYnVmZmVyX3NpemUsIHJhbV9jb25zb2xlX2J1ZmZlcl9zaXplKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzIyLDcgKzMyMiw3IEBACiAJfQogCWJ1ZmZlcl9zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKIAlzdGFydCA9IHJlcy0+c3RhcnQ7Ci0JcHJpbnRrKEtFUk5fSU5GTyAicmFtX2NvbnNvbGU6IGdvdCBidWZmZXIgYXQgJXgsIHNpemUgJXhcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyAicmFtX2NvbnNvbGU6IGdvdCBidWZmZXIgYXQgJXp4LCBzaXplICV6eFxuIiwKIAkgICAgICAgc3RhcnQsIGJ1ZmZlcl9zaXplKTsKIAlidWZmZXIgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIGJ1ZmZlcl9zaXplKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hc3VzX29sZWQvYXN1c19vbGVkLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXN1c19vbGVkL2FzdXNfb2xlZC5jCmluZGV4IDY2NmExODYuLjA0ZGRlNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hc3VzX29sZWQvYXN1c19vbGVkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FzdXNfb2xlZC9hc3VzX29sZWQuYwpAQCAtNTYsMTAgKzU2LDEwIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkFzdXMgT0xFRCBEcml2ZXIgdiIgQVNVU19PTEVEX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgc3RydWN0IGNsYXNzICpvbGVkX2NsYXNzID0gMDsKLXN0YXRpYyBpbnQgb2xlZF9udW0gPSAwOworc3RhdGljIHN0cnVjdCBjbGFzcyAqb2xlZF9jbGFzczsKK3N0YXRpYyBpbnQgb2xlZF9udW07CiAKLXN0YXRpYyB1aW50IHN0YXJ0X29mZiA9IDA7CitzdGF0aWMgdWludCBzdGFydF9vZmY7CiAKIG1vZHVsZV9wYXJhbShzdGFydF9vZmYsIHVpbnQsIDA2NDQpOwogCkBAIC04MCwyMCArODAsMjAgQEAKIH07CiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcyNikgfSwgLy8gQXN1cyBHMS9HMiAoYW5kIHZhcmlhbnRzKQogCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc1YikgfSwgLy8gQXN1cyBHNTBWIChhbmQgcG9zc2libHkgb3RoZXJzIC0gRzcwPyBHNzE/KQogCXsgfSwKIH07CiAKIC8qIHBhcmFtZXRlcnMgb2Ygc3BlY2lmaWMgZGV2aWNlcyAqLwotc3RhdGljIHN0cnVjdCBvbGVkX2Rldl9kZXNjX3N0ciBvbGVkX2Rldl9kZXNjX3RhYmxlIFtdID0geworc3RhdGljIHN0cnVjdCBvbGVkX2Rldl9kZXNjX3N0ciBvbGVkX2Rldl9kZXNjX3RhYmxlW10gPSB7CiAJeyAweDBiMDUsIDB4MTcyNiwgMTI4LCBQQUNLX01PREVfRzEsICJHMS9HMiIgfSwKIAl7IDB4MGIwNSwgMHgxNzViLCAyNTYsIFBBQ0tfTU9ERV9HNTAsICJHNTAiIH0sCiAJeyB9LAogfTsKIAotTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpZF90YWJsZSk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwogCiAjZGVmaW5lIFNFVFVQX1BBQ0tFVF9IRUFERVIocGFja2V0LCB2YWwxLCB2YWwyLCB2YWwzLCB2YWw0LCB2YWw1LCB2YWw2LCB2YWw3KSBcCiAJZG8gewkJCQkJXApAQCAtMTA3LDcgKzEwNyw3IEBACiAJCXBhY2tldC0+aGVhZGVyLnZhbHVlNiA9IHZhbDU7CQlcCiAJCXBhY2tldC0+aGVhZGVyLnZhbHVlNyA9IHZhbDY7CQlcCiAJCXBhY2tldC0+aGVhZGVyLnZhbHVlOCA9IHZhbDc7CQlcCi0JfSB3aGlsZSgwKTsKKwl9IHdoaWxlICgwKTsKIAogc3RydWN0IGFzdXNfb2xlZF9oZWFkZXIgewogCXVpbnQ4X3QJCW1hZ2ljMTsKQEAgLTE2MCwxMCArMTYwLDEyIEBACiAKIAlTRVRVUF9QQUNLRVRfSEVBREVSKHBhY2tldCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCk7CiAKLQlpZiAoZW5hYmwpIHBhY2tldC0+Yml0bWFwWzBdID0gMHhhZjsKLQllbHNlIHBhY2tldC0+Yml0bWFwWzBdID0gMHhhZTsKKwlpZiAoZW5hYmwpCisJCXBhY2tldC0+Yml0bWFwWzBdID0gMHhhZjsKKwllbHNlCisJCXBhY2tldC0+Yml0bWFwWzBdID0gMHhhZTsKIAotCWZvciAoYT0wOyBhPDE7IGErKykgeworCWZvciAoYSA9IDA7IGEgPCAxOyBhKyspIHsKIAkJcmV0dmFsID0gdXNiX2J1bGtfbXNnKG9kZXYtPnVkZXYsCiAJCQl1c2Jfc25kYnVsa3BpcGUob2Rldi0+dWRldiwgMiksCiAJCQlwYWNrZXQsCkBAIC0yNTIsNyArMjU0LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHNlbmRfcGFja2V0KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgYXN1c19vbGVkX3BhY2tldCAqcGFja2V0LCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuLCBjaGFyICpidWYsIHVpbnQ4X3QgYjEsIHVpbnQ4X3QgYjIsIHVpbnQ4X3QgYjMsIHVpbnQ4X3QgYjQsIHVpbnQ4X3QgYjUsIHVpbnQ4X3QgYjYpeworc3RhdGljIHZvaWQgc2VuZF9wYWNrZXQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCBhc3VzX29sZWRfcGFja2V0ICpwYWNrZXQsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4sIGNoYXIgKmJ1ZiwgdWludDhfdCBiMSwgdWludDhfdCBiMiwgdWludDhfdCBiMywgdWludDhfdCBiNCwgdWludDhfdCBiNSwgdWludDhfdCBiNikgewogCWludCByZXR2YWw7CiAJaW50IGFjdF9sZW47CiAKQEAgLTI5NCw3ICsyOTYsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKG9kZXYtPnBhY2tfbW9kZT09UEFDS19NT0RFX0cxKXsKKwlpZiAob2Rldi0+cGFja19tb2RlID09IFBBQ0tfTU9ERV9HMSkgewogCQkvLyBXaGVuIHNlbmRpbmcgcm9sbC1tb2RlIGRhdGEgdGhlIGRpc3BsYXkgdXBkYXRlZCBvbmx5IGZpcnN0IHBhY2tldC4KIAkJLy8gSSBoYXZlIG5vIGlkZWEgd2h5LCBidXQgd2hlbiBzdGF0aWMgcGljdHVyZSBpcyBzZW5kIGp1c3QgYmVmb3JlCiAJCS8vIHJvbGxpbmcgcGljdHVyZSAtIGV2ZXJ5dGhpbmcgd29ya3MgZmluZS4KQEAgLTMwOCw3ICszMTAsNyBAQAogCQlzZW5kX3BhY2tldHMob2Rldi0+dWRldiwgcGFja2V0LCBvZGV2LT5idWYsIG9kZXYtPnBpY19tb2RlLCBwYWNrZXRfbnVtKTsKIAl9CiAJZWxzZQotCWlmIChvZGV2LT5wYWNrX21vZGU9PVBBQ0tfTU9ERV9HNTApeworCWlmIChvZGV2LT5wYWNrX21vZGUgPT0gUEFDS19NT0RFX0c1MCkgewogCQlzZW5kX3BhY2tldHNfZzUwKG9kZXYtPnVkZXYsIHBhY2tldCwgb2Rldi0+YnVmKTsKIAl9CiAKQEAgLTMyNiw3ICszMjgsNyBAQAogCQkJeCArPSBvZGV2LT54X3NoaWZ0OwogCQkJeSArPSBvZGV2LT55X3NoaWZ0OwogCi0JCQlzd2l0Y2gob2Rldi0+cGFja19tb2RlKQorCQkJc3dpdGNoIChvZGV2LT5wYWNrX21vZGUpCiAJCQl7CiAJCQkJY2FzZSBQQUNLX01PREVfRzE6CiAJCQkJCS8vIGkgPSAoeC8xMjgpKjY0MCArIDEyNyAtIHggKyAoeS84KSoxMjg7CkBAIC0zNzcsMzAgKzM3OSwzMiBAQAogewogCXNpemVfdCBvZmZzID0gMCwgbWF4X29mZnM7CiAKLQlpZiAoY291bnQgPCAxKSByZXR1cm4gMDsKKwlpZiAoY291bnQgPCAxKQorCQlyZXR1cm4gMDsKIAotCWlmICh0b2xvd2VyKGJ1ZlswXSkgPT0gJ2InKXsKKwlpZiAodG9sb3dlcihidWZbMF0pID09ICdiJykgewogCSAgICAvLyBiaW5hcnkgbW9kZSwgc2V0IHRoZSBlbnRpcmUgbWVtb3J5CiAKIAkgICAgc2l6ZV90IGk7CiAKIAkgICAgb2Rldi0+YnVmX3NpemUgPSAob2Rldi0+ZGV2X3dpZHRoICogQVNVU19PTEVEX0RJU1BfSEVJR0hUKSAvIDg7CiAKLQkgICAgaWYgKG9kZXYtPmJ1Zikga2ZyZWUob2Rldi0+YnVmKTsKKwkgICAgaWYgKG9kZXYtPmJ1ZikKKwkJICAgIGtmcmVlKG9kZXYtPmJ1Zik7CiAJICAgIG9kZXYtPmJ1ZiA9IGttYWxsb2Mob2Rldi0+YnVmX3NpemUsIEdGUF9LRVJORUwpOwogCiAJICAgIG1lbXNldChvZGV2LT5idWYsIDB4ZmYsIG9kZXYtPmJ1Zl9zaXplKTsKIAotCSAgICBmb3IgKGk9MTsgaSA8IGNvdW50ICYmIGk8PTMyKjMyOyBpKyspeworCSAgICBmb3IgKGkgPSAxOyBpIDwgY291bnQgJiYgaSA8PSAzMiAqIDMyOyBpKyspIHsKIAkJb2Rldi0+YnVmW2ktMV0gPSBidWZbaV07CiAJCW9kZXYtPmJ1Zl9vZmZzID0gaS0xOwogCSAgICB9CiAKLQkgICAgb2Rldi0+d2lkdGg9b2Rldi0+ZGV2X3dpZHRoIC8gODsKLQkgICAgb2Rldi0+aGVpZ2h0PUFTVVNfT0xFRF9ESVNQX0hFSUdIVDsKLQkgICAgb2Rldi0+eF9zaGlmdD0wOwotCSAgICBvZGV2LT55X3NoaWZ0PTA7Ci0JICAgIG9kZXYtPmxhc3RfdmFsPTA7CisJICAgIG9kZXYtPndpZHRoID0gb2Rldi0+ZGV2X3dpZHRoIC8gODsKKwkgICAgb2Rldi0+aGVpZ2h0ID0gQVNVU19PTEVEX0RJU1BfSEVJR0hUOworCSAgICBvZGV2LT54X3NoaWZ0ID0gMDsKKwkgICAgb2Rldi0+eV9zaGlmdCA9IDA7CisJICAgIG9kZXYtPmxhc3RfdmFsID0gIDA7CiAKIAkgICAgc2VuZF9kYXRhKG9kZXYpOwogCkBAIC00MTYsNyArNDIwLDcgQEAKIAkJCWdvdG8gZXJyb3JfaGVhZGVyOwogCQl9CiAKLQkJc3dpdGNoKHRvbG93ZXIoYnVmWzFdKSkgeworCQlzd2l0Y2ggKHRvbG93ZXIoYnVmWzFdKSkgewogCQkJY2FzZSBBU1VTX09MRURfU1RBVElDOgogCQkJY2FzZSBBU1VTX09MRURfUk9MTDoKIAkJCWNhc2UgQVNVU19PTEVEX0ZMQVNIOgpAQCAtNDMyLDI3ICs0MzYsMzYgQEAKIAkJCWlmIChidWZbaV0gPj0gJzAnICYmIGJ1ZltpXSA8PSAnOScpIHsKIAkJCQl3ID0gMTAqdyArIChidWZbaV0gLSAnMCcpOwogCi0JCQkJaWYgKHcgPiBBU1VTX09MRURfTUFYX1dJRFRIKSBnb3RvIGVycm9yX3dpZHRoOworCQkJCWlmICh3ID4gQVNVU19PTEVEX01BWF9XSURUSCkKKwkJCQkJZ290byBlcnJvcl93aWR0aDsKIAkJCX0KLQkJCWVsc2UgaWYgKHRvbG93ZXIoYnVmW2ldKSA9PSAneCcpIGJyZWFrOwotCQkJZWxzZSBnb3RvIGVycm9yX3dpZHRoOworCQkJZWxzZSBpZiAodG9sb3dlcihidWZbaV0pID09ICd4JykKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQlnb3RvIGVycm9yX3dpZHRoOwogCQl9CiAKIAkJZm9yICgrK2k7IGkgPCBjb3VudDsgKytpKSB7CiAJCQlpZiAoYnVmW2ldID49ICcwJyAmJiBidWZbaV0gPD0gJzknKSB7CiAJCQkJaCA9IDEwKmggKyAoYnVmW2ldIC0gJzAnKTsKIAotCQkJCWlmIChoID4gQVNVU19PTEVEX0RJU1BfSEVJR0hUKSBnb3RvIGVycm9yX2hlaWdodDsKKwkJCQlpZiAoaCA+IEFTVVNfT0xFRF9ESVNQX0hFSUdIVCkKKwkJCQkJZ290byBlcnJvcl9oZWlnaHQ7CiAJCQl9Ci0JCQllbHNlIGlmICh0b2xvd2VyKGJ1ZltpXSkgPT0gJz4nKSBicmVhazsKLQkJCWVsc2UgZ290byBlcnJvcl9oZWlnaHQ7CisJCQllbHNlIGlmICh0b2xvd2VyKGJ1ZltpXSkgPT0gJz4nKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCWdvdG8gZXJyb3JfaGVpZ2h0OwogCQl9CiAKLQkJaWYgKHcgPCAxIHx8IHcgPiBBU1VTX09MRURfTUFYX1dJRFRIKSBnb3RvIGVycm9yX3dpZHRoOworCQlpZiAodyA8IDEgfHwgdyA+IEFTVVNfT0xFRF9NQVhfV0lEVEgpCisJCQlnb3RvIGVycm9yX3dpZHRoOwogCi0JCWlmIChoIDwgMSB8fCBoID4gQVNVU19PTEVEX0RJU1BfSEVJR0hUKSBnb3RvIGVycm9yX2hlaWdodDsKKwkJaWYgKGggPCAxIHx8IGggPiBBU1VTX09MRURfRElTUF9IRUlHSFQpCisJCQlnb3RvIGVycm9yX2hlaWdodDsKIAotCQlpZiAoaSA+PSBjb3VudCB8fCBidWZbaV0gIT0gJz4nKSBnb3RvIGVycm9yX2hlYWRlcjsKKwkJaWYgKGkgPj0gY291bnQgfHwgYnVmW2ldICE9ICc+JykKKwkJCWdvdG8gZXJyb3JfaGVhZGVyOwogCiAJCW9mZnMgPSBpKzE7CiAKQEAgLTQ2OCw3ICs0ODEsOCBAQAogCiAJCW9kZXYtPmJ1Zl9zaXplID0gd19tZW0gKiBoX21lbSAvIDg7CiAKLQkJaWYgKG9kZXYtPmJ1Zikga2ZyZWUob2Rldi0+YnVmKTsKKwkJaWYgKG9kZXYtPmJ1ZikKKwkJCWtmcmVlKG9kZXYtPmJ1Zik7CiAJCW9kZXYtPmJ1ZiA9IGttYWxsb2Mob2Rldi0+YnVmX3NpemUsIEdGUF9LRVJORUwpOwogCiAJCWlmIChvZGV2LT5idWYgPT0gTlVMTCkgewpAQCAtNTA1LDIzICs1MTksMzAgQEAKIAkJaW50IHJldDsKIAogCQlpZiAoYnVmW29mZnNdID09ICcxJyB8fCBidWZbb2Zmc10gPT0gJyMnKSB7Ci0JCQlpZiAoIChyZXQgPSBhcHBlbmRfdmFsdWVzKG9kZXYsIDEsIDEpKSA8IDApIHJldHVybiByZXQ7CisJCQlyZXQgPSBhcHBlbmRfdmFsdWVzKG9kZXYsIDEsIDEpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKIAkJfQogCQllbHNlIGlmIChidWZbb2Zmc10gPT0gJzAnIHx8IGJ1ZltvZmZzXSA9PSAnICcpIHsKLQkJCWlmICggKHJldCA9IGFwcGVuZF92YWx1ZXMob2RldiwgMCwgMSkpIDwgMCkgcmV0dXJuIHJldDsKKwkJCXJldCA9IGFwcGVuZF92YWx1ZXMob2RldiwgMCwgMSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OwogCQl9CiAJCWVsc2UgaWYgKGJ1ZltvZmZzXSA9PSAnXG4nKSB7CiAJCQkvLyBOZXcgbGluZSBkZXRlY3RlZC4gTGV0cyBhc3N1bWUsIHRoYXQgYWxsIGNoYXJhY3RlcnMgdGlsbCB0aGUgZW5kIG9mIHRoZQogCQkJLy8gbGluZSB3ZXJlIGVxdWFsIHRvIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGlzIGxpbmUuCiAJCQlpZiAob2Rldi0+YnVmX29mZnMgJSBvZGV2LT53aWR0aCAhPSAwKQotCQkJCWlmICggKHJldCA9IGFwcGVuZF92YWx1ZXMob2Rldiwgb2Rldi0+bGFzdF92YWwsCi0JCQkJICAgICAgb2Rldi0+d2lkdGggLSAob2Rldi0+YnVmX29mZnMgJSBvZGV2LT53aWR0aCkpKSA8IDApIHJldHVybiByZXQ7CisJCQkJcmV0ID0gYXBwZW5kX3ZhbHVlcyhvZGV2LCBvZGV2LT5sYXN0X3ZhbCwKKwkJCQkgICAgICBvZGV2LT53aWR0aCAtIChvZGV2LT5idWZfb2ZmcyAlIG9kZXYtPndpZHRoKSk7CisJCQkJaWYgKHJldCA8IDApCisJCQkJCXJldHVybiByZXQ7CiAJCX0KIAogCQlvZmZzKys7CiAJfQogCi0JaWYgKG9kZXYtPmJ1Zl9vZmZzID49IG1heF9vZmZzKSBzZW5kX2RhdGEob2Rldik7CisJaWYgKG9kZXYtPmJ1Zl9vZmZzID49IG1heF9vZmZzKQorCQlzZW5kX2RhdGEob2Rldik7CiAKIAlyZXR1cm4gY291bnQ7CiAKQEAgLTU2Niw5ICs1ODcsOSBAQAogCXVpbnQxNl90IGRldl93aWR0aCA9IDA7CiAJb2xlZF9wYWNrX21vZGVfdCBwYWNrX21vZGUgPSBQQUNLX01PREVfTEFTVDsKIAljb25zdCBzdHJ1Y3Qgb2xlZF9kZXZfZGVzY19zdHIgKiBkZXZfZGVzYyA9IG9sZWRfZGV2X2Rlc2NfdGFibGU7Ci0JY29uc3QgY2hhciAqZGVzYyA9IDA7CisJY29uc3QgY2hhciAqZGVzYyA9IE5VTEw7CiAKLQlpZiAoaWQgPT0gMCkgeworCWlmICghaWQpIHsKIAkJLy8gRXZlbiBwb3NzaWJsZT8gSnVzdCB0byBtYWtlIHN1cmUuLi4KIAkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJObyB1c2JfZGV2aWNlX2lkIHByb3ZpZGVkIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTg2LDcgKzYwNyw3IEBACiAJCX0KIAl9CiAKLQlpZiAoICFkZXNjIHx8IGRldl93aWR0aCA8IDEgfHwgcGFja19tb2RlID09IFBBQ0tfTU9ERV9MQVNUKSB7CisJaWYgKCFkZXNjIHx8IGRldl93aWR0aCA8IDEgfHwgcGFja19tb2RlID09IFBBQ0tfTU9ERV9MQVNUKSB7CiAJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiTWlzc2luZyBvciBpbmNvbXBsZXRlIGRldmljZSBkZXNjcmlwdGlvbiFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC02MTEsMjAgKzYzMiwyMCBAQAogCW9kZXYtPmxhc3RfdmFsID0gMDsKIAlvZGV2LT5idWYgPSBOVUxMOwogCW9kZXYtPmVuYWJsZWQgPSAxOwotCW9kZXYtPmRldiA9IDA7CisJb2Rldi0+ZGV2ID0gTlVMTDsKIAotCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgb2Rldik7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIG9kZXYpOwogCi0JaWYgKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmQVNVU19PTEVEX0RFVklDRV9BVFRSKGVuYWJsZWQpKSkpIHsKKwlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmQVNVU19PTEVEX0RFVklDRV9BVFRSKGVuYWJsZWQpKTsKKwlpZiAocmV0dmFsKQogCQlnb3RvIGVycl9maWxlczsKLQl9CiAKLQlpZiAoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZBU1VTX09MRURfREVWSUNFX0FUVFIocGljdHVyZSkpKSkgeworCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZBU1VTX09MRURfREVWSUNFX0FUVFIocGljdHVyZSkpOworCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyX2ZpbGVzOwotCX0KIAotCW9kZXYtPmRldiA9IGRldmljZV9jcmVhdGUob2xlZF9jbGFzcywgJmludGVyZmFjZS0+ZGV2LCBNS0RFVigwLDApLAotCQkJCU5VTEwsIm9sZWRfJWQiLCArK29sZWRfbnVtKTsKKwlvZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKG9sZWRfY2xhc3MsICZpbnRlcmZhY2UtPmRldiwgTUtERVYoMCwgMCksCisJCQkJTlVMTCwgIm9sZWRfJWQiLCArK29sZWRfbnVtKTsKIAogCWlmIChJU19FUlIob2Rldi0+ZGV2KSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKG9kZXYtPmRldik7CkBAIC02MzMsMTMgKzY1NCwxMyBAQAogCiAJZGV2X3NldF9kcnZkYXRhKG9kZXYtPmRldiwgb2Rldik7CiAKLQlpZiAoIChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUob2Rldi0+ZGV2LCAmZGV2X2F0dHJfZW5hYmxlZCkpKSB7CisJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKG9kZXYtPmRldiwgJmRldl9hdHRyX2VuYWJsZWQpOworCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyX2NsYXNzX2VuYWJsZWQ7Ci0JfQogCi0JaWYgKCAocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKG9kZXYtPmRldiwgJmRldl9hdHRyX3BpY3R1cmUpKSkgeworCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZShvZGV2LT5kZXYsICZkZXZfYXR0cl9waWN0dXJlKTsKKwlpZiAocmV0dmFsKQogCQlnb3RvIGVycl9jbGFzc19waWN0dXJlOwotCX0KIAogCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkF0dGFjaGVkIEFzdXMgT0xFRCBkZXZpY2U6ICVzIFt3aWR0aCAldSwgcGFja19tb2RlICVkXVxuIiwgZGVzYywgb2Rldi0+ZGV2X3dpZHRoLCBvZGV2LT5wYWNrX21vZGUpOwogCkBAIC02NTksNyArNjgwLDcgQEAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmQVNVU19PTEVEX0RFVklDRV9BVFRSKGVuYWJsZWQpKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmQVNVU19PTEVEX0RFVklDRV9BVFRSKHBpY3R1cmUpKTsKIAotCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgTlVMTCk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCXVzYl9wdXRfZGV2KG9kZXYtPnVkZXYpOwogCWtmcmVlKG9kZXYpOwogCkBAIC02NzAsMTkgKzY5MSwyMCBAQAogewogCXN0cnVjdCBhc3VzX29sZWRfZGV2ICpvZGV2OwogCi0Jb2RldiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGVyZmFjZSk7Ci0JdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBOVUxMKTsKKwlvZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKIAogCWRldmljZV9yZW1vdmVfZmlsZShvZGV2LT5kZXYsICZkZXZfYXR0cl9waWN0dXJlKTsKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUob2Rldi0+ZGV2LCAmZGV2X2F0dHJfZW5hYmxlZCk7CiAJZGV2aWNlX3VucmVnaXN0ZXIob2Rldi0+ZGV2KTsKIAotCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICYgQVNVU19PTEVEX0RFVklDRV9BVFRSKHBpY3R1cmUpKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmIEFTVVNfT0xFRF9ERVZJQ0VfQVRUUihlbmFibGVkKSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJkFTVVNfT0xFRF9ERVZJQ0VfQVRUUihwaWN0dXJlKSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJkFTVVNfT0xFRF9ERVZJQ0VfQVRUUihlbmFibGVkKSk7CiAKIAl1c2JfcHV0X2RldihvZGV2LT51ZGV2KTsKIAotCWlmIChvZGV2LT5idWYpIGtmcmVlKG9kZXYtPmJ1Zik7CisJaWYgKG9kZXYtPmJ1ZikKKwkJa2ZyZWUob2Rldi0+YnVmKTsKIAogCWtmcmVlKG9kZXYpOwogCkBAIC03MTMsNyArNzM1LDggQEAKIAkJcmV0dXJuIFBUUl9FUlIob2xlZF9jbGFzcyk7CiAJfQogCi0JaWYgKChyZXR2YWwgPSBjbGFzc19jcmVhdGVfZmlsZShvbGVkX2NsYXNzLCAmY2xhc3NfYXR0cl92ZXJzaW9uKSkpIHsKKwlyZXR2YWwgPSBjbGFzc19jcmVhdGVfZmlsZShvbGVkX2NsYXNzLCAmY2xhc3NfYXR0cl92ZXJzaW9uKTsKKwlpZiAocmV0dmFsKSB7CiAJCWVycigiRXJyb3IgY3JlYXRpbmcgY2xhc3MgdmVyc2lvbiBmaWxlIik7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtNzQwLDYgKzc2Myw2IEBACiAJdXNiX2RlcmVnaXN0ZXIoJm9sZWRfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQgKGFzdXNfb2xlZF9pbml0KTsKLW1vZHVsZV9leGl0IChhc3VzX29sZWRfZXhpdCk7Cittb2R1bGVfaW5pdChhc3VzX29sZWRfaW5pdCk7Cittb2R1bGVfZXhpdChhc3VzX29sZWRfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hdDc2X3VzYi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL1RPRE8KaW5kZXggNjkxMWNhNy4uMGM3ZWQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL1RPRE8KKysrIGIvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL1RPRE8KQEAgLTEsMiArMSw3IEBACi1yZXdyaXRlIHRoZSBkcml2ZXIgdG8gdXNlIHRoZSBwcm9wZXIgaW4ta2VybmVsIHdpcmVsZXNzIHN0YWNrCi1pbnN0ZWFkIG9mIHVzaW5nIGl0cyBvd24uCitGaXggdGhlIG1hYzgwMjExIHBvcnQgb2YgYXQ3Nl91c2IgKHRoZSBwcm9wZXIgaW4ta2VybmVsIHdpcmVsZXNzCitzdGFjaykgYW5kIGdldCBpdCBpbmNsdWRlZCB0byB0aGUgbWFpbmxpbmUuIFBhdGNoZXMgYXZhaWxhYmxlIGhlcmU6CisKK2h0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1saW51eC9rZXJuZWwvZ2l0L2xpbnZpbGxlL3dpcmVsZXNzLWxlZ2FjeS5naXQ7YT1zaG9ydGxvZztoPWF0NzYKKworQ29udGFjdCBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQGlraS5maT4gYW5kIGxpbnV4LXdpcmVsZXNzIGxpc3QKKzxsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmc+IGZvciBtb3JlIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuYwppbmRleCBjOGU0ZDMxLi42ZjZlMzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuYwpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTFfcmFkaW90YXAuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAKICNpbmNsdWRlICJhdDc2X3VzYi5oIgogCkBAIC0xNzI3LDEyICsxNzI3LDEyIEBACiAKIAkvKiB3cml0ZSBUTFYgZGF0YSBlbGVtZW50cyAqLwogCi0JaWUtPmlkID0gTUZJRV9UWVBFX1NTSUQ7CisJaWUtPmlkID0gV0xBTl9FSURfU1NJRDsKIAlpZS0+bGVuID0gYnNzLT5zc2lkX2xlbjsKIAltZW1jcHkoaWUtPmRhdGEsIGJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbik7CiAJbmV4dF9pZSgmaWUpOwogCi0JaWUtPmlkID0gTUZJRV9UWVBFX1JBVEVTOworCWllLT5pZCA9IFdMQU5fRUlEX1NVUFBfUkFURVM7CiAJaWUtPmxlbiA9IHNpemVvZihod19yYXRlcyk7CiAJbWVtY3B5KGllLT5kYXRhLCBod19yYXRlcywgc2l6ZW9mKGh3X3JhdGVzKSk7CiAJbmV4dF9pZSgmaWUpOwkJLyogaWUgcG9pbnRzIGJlaGluZCB0aGUgc3VwcF9yYXRlcyBmaWVsZCAqLwpAQCAtNDM5Nyw3ICs0Mzk3LDcgQEAKIAogCQlzd2l0Y2ggKGllLT5pZCkgewogCi0JCWNhc2UgTUZJRV9UWVBFX1NTSUQ6CisJCWNhc2UgV0xBTl9FSURfU1NJRDoKIAkJCWlmIChoYXZlX3NzaWQpCiAJCQkJYnJlYWs7CiAKQEAgLTQ0MjAsNyArNDQyMCw3IEBACiAJCQloYXZlX3NzaWQgPSAxOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfUkFURVM6CisJCWNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKIAkJCWlmIChoYXZlX3JhdGVzKQogCQkJCWJyZWFrOwogCkBAIC00NDMzLDcgKzQ0MzMsNyBAQAogCQkJCSBoZXgyc3RyKGllLT5kYXRhLCBpZS0+bGVuKSk7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9EU19TRVQ6CisJCWNhc2UgV0xBTl9FSURfRFNfUEFSQU1TOgogCQkJaWYgKGhhdmVfY2hhbm5lbCkKIAkJCQlicmVhazsKIApAQCAtNDQ0Myw5ICs0NDQzLDkgQEAKIAkJCQkgcHJpdi0+bmV0ZGV2LT5uYW1lLCBtYXRjaC0+Y2hhbm5lbCk7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9DRl9TRVQ6Ci0JCWNhc2UgTUZJRV9UWVBFX1RJTToKLQkJY2FzZSBNRklFX1RZUEVfSUJTU19TRVQ6CisJCWNhc2UgV0xBTl9FSURfQ0ZfUEFSQU1TOgorCQljYXNlIFdMQU5fRUlEX1RJTToKKwkJY2FzZSBXTEFOX0VJRF9JQlNTX1BBUkFNUzoKIAkJZGVmYXVsdDoKIAkJCWF0NzZfZGJnKERCR19SWF9CRUFDT04sICIlczogYmVhY29uIElFIGlkICVkIGxlbiAlZCAlcyIsCiAJCQkJIHByaXYtPm5ldGRldi0+bmFtZSwgaWUtPmlkLCBpZS0+bGVuLApAQCAtNTM3MCw4ICs1MzcwLDcgQEAKIAogCWF0NzZfZGJnKERCR19QUk9DX0VOVFJZLCAiJXM6IHVubGlua2VkIHVyYnMiLCBfX2Z1bmNfXyk7CiAKLQlpZiAocHJpdi0+cnhfc2tiKQotCQlrZnJlZV9za2IocHJpdi0+cnhfc2tiKTsKKwlrZnJlZV9za2IocHJpdi0+cnhfc2tiKTsKIAogCWF0NzZfZnJlZV9ic3NfbGlzdChwcml2KTsKIAlkZWxfdGltZXJfc3luYygmcHJpdi0+YnNzX2xpc3RfdGltZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0NzZfdXNiL2F0NzZfdXNiLmggYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuaAppbmRleCBiMjBiZTlkLi42ZDYwYzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXQ3Nl91c2IvYXQ3Nl91c2IuaApAQCAtMjIsNiArMjIsOTMgQEAKICNpZm5kZWYgX0FUNzZfVVNCX0gKICNkZWZpbmUgX0FUNzZfVVNCX0gKIAorLyoKKyAqIGllZWU4MDIxMSBkZWZpbml0aW9ucyBjb3BpZWQgZnJvbSBuZXQvaWVlZTgwMjExLmgKKyAqLworCisjZGVmaW5lIFdFUF9LRVlfTEVOCQkxMworI2RlZmluZSBXRVBfS0VZUwkJNAorCisjZGVmaW5lIElFRUU4MDIxMV9EQVRBX0xFTgkJMjMwNAorLyogTWF4aW11bSBzaXplIGZvciB0aGUgTUEtVU5JVERBVEEgcHJpbWl0aXZlLCA4MDIuMTEgc3RhbmRhcmQgc2VjdGlvbgorICAgNi4yLjEuMS4yLgorCisgICBUaGUgZmlndXJlIGluIHNlY3Rpb24gNy4xLjIgc3VnZ2VzdHMgYSBib2R5IHNpemUgb2YgdXAgdG8gMjMxMgorICAgYnl0ZXMgaXMgYWxsb3dlZCwgd2hpY2ggaXMgYSBiaXQgY29uZnVzaW5nLCBJIHN1c3BlY3QgdGhpcworICAgcmVwcmVzZW50cyB0aGUgMjMwNCBieXRlcyBvZiByZWFsIGRhdGEsIHBsdXMgYSBwb3NzaWJsZSA4IGJ5dGVzIG9mCisgICBXRVAgSVYgYW5kIElDVi4gKHRoaXMgaW50ZXJwcmV0YXRpb24gc3VnZ2VzdGVkIGJ5IFJhbWlybyBCYXJyZWlybykgKi8KKworI2RlZmluZSBJRUVFODAyMTFfMUFERFJfTEVOIDEwCisjZGVmaW5lIElFRUU4MDIxMV8yQUREUl9MRU4gMTYKKyNkZWZpbmUgSUVFRTgwMjExXzNBRERSX0xFTiAyNAorI2RlZmluZSBJRUVFODAyMTFfNEFERFJfTEVOIDMwCisjZGVmaW5lIElFRUU4MDIxMV9GQ1NfTEVOICAgIDQKKyNkZWZpbmUgSUVFRTgwMjExX0hMRU4JCQkoSUVFRTgwMjExXzRBRERSX0xFTikKKyNkZWZpbmUgSUVFRTgwMjExX0ZSQU1FX0xFTgkJKElFRUU4MDIxMV9EQVRBX0xFTiArIElFRUU4MDIxMV9ITEVOKQorCisjZGVmaW5lIE1JTl9GUkFHX1RIUkVTSE9MRCAgICAgMjU2VQorI2RlZmluZQlNQVhfRlJBR19USFJFU0hPTEQgICAgIDIzNDZVCisKK3N0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IHsKKwl1OCBpZDsKKwl1OCBsZW47CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciB7CisJX19sZTE2IGZyYW1lX2N0bDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbRVRIX0FMRU5dOworCXU4IGFkZHIyW0VUSF9BTEVOXTsKKwl1OCBhZGRyM1tFVEhfQUxFTl07CisJX19sZTE2IHNlcV9jdGw7CisJdTggcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX2F1dGggeworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMTYgYWxnb3JpdGhtOworCV9fbGUxNiB0cmFuc2FjdGlvbjsKKwlfX2xlMTYgc3RhdHVzOworCS8qIGNoYWxsZW5nZSAqLworCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3QgeworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMTYgY2FwYWJpbGl0eTsKKwlfX2xlMTYgbGlzdGVuX2ludGVydmFsOworCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcywgUlNOICovCisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgeworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMzIgdGltZV9zdGFtcFsyXTsKKwlfX2xlMTYgYmVhY29uX2ludGVydmFsOworCV9fbGUxNiBjYXBhYmlsaXR5OworCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcywgRkggcGFyYW1zLCBEUyBwYXJhbXMsCisJICogQ0YgcGFyYW1zLCBJQlNTIHBhcmFtcywgVElNIChpZiBiZWFjb24pLCBSU04gKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQWxpYXMgYmVhY29uIGZvciBwcm9iZV9yZXNwb25zZSAqLworI2RlZmluZSBpZWVlODAyMTFfYmVhY29uIGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZQorCitzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7CisJX19sZTE2IGNhcGFiaWxpdHk7CisJX19sZTE2IHN0YXR1czsKKwlfX2xlMTYgYWlkOworCS8qIHN1cHBvcnRlZCByYXRlcyAqLworCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7CisJX19sZTE2IHJlYXNvbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKiBCb2FyZCB0eXBlcyAqLwogZW51bSBib2FyZF90eXBlIHsKIAlCT0FSRF81MDNfSVNMMzg2MSA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDIzMTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvS2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK2NvbmZpZyBCM0RGRworICAgICAgIHRyaXN0YXRlICJCcm9udGVzIDNkIEZyYW1lIEZyYW1lZ3JhYmJlciIKKyAgICAgICBkZWZhdWx0IG4KKyAgICAgICAtLS1oZWxwLS0tCisgICAgICAgICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgQnJvbnRlcyAzZCBGcmFtZWdyYWJiZXIKKyAgICAgICAgIFBDSSBjYXJkLgorCisgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCisgICAgICAgICB3aWxsIGJlIGNhbGxlZCBiM2RmZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWY0MzlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19CM0RGRykgKz0gYjNkZmcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2IzZGZnL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWE5Mjk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL1RPRE8KQEAgLTAsMCArMSw0IEBACisKKyAtIHF1ZXVlL3dhaXQgYnVmZmVyIHByZXNlbnRzIGZpbGx0aW1lIHJlc3VsdHMgZm9yIGVhY2ggZnJhbWU/CisgLSBjb3VudGluZyBvZiBkcm9wcGVkIGZyYW1lcworIC0gcmV2aWV3IGVuZGlhbm5lc3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL2IzZGZnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0ODA3MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9iM2RmZy5jCkBAIC0wLDAgKzEsMTExOSBAQAorIC8qCisgKiBCcm9udGVzIFBDSSBmcmFtZSBncmFiYmVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCAzTSBDb21wYW55CisgKiBDb250YWN0OiBKdXN0aW4gQnJvbmRlciA8anNicm9uZGVyQGJyb250ZXMzZC5jb20+CisgKiBPcmlnaW5hbCBBdXRob3JzOiBEYW5pZWwgRHJha2UgPGRkcmFrZUBicm9udGVzM2QuY29tPgorICogICAgICAgICAgICAgICAgICAgRHVhbmUgR3JpZmZpbiA8ZHVhbmVnQGRnaGRhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYjNkZmdfbmJ1ZiA9IDI7CisKK21vZHVsZV9wYXJhbV9uYW1lZChidWZmZXJfY291bnQsIGIzZGZnX25idWYsIHVpbnQsIDA0NDQpOworCitNT0RVTEVfUEFSTV9ERVNDKGJ1ZmZlcl9jb3VudCwgIk51bWJlciBvZiBidWZmZXJzIChtaW4gMiwgZGVmYXVsdCAyKVxuIik7CisKK01PRFVMRV9BVVRIT1IoIkRhbmllbCBEcmFrZSA8ZGRyYWtlQGJyb250ZXMzZC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkJyb250ZXMgZnJhbWUgZ3JhYmJlciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBEUklWRVJfTkFNRSAiYjNkZmciCisjZGVmaW5lIEIzREZHX01BWF9ERVZTIDQKKyNkZWZpbmUgQjNERkdfRlJBTUVTX1BFUl9CVUZGRVIgMworCisjZGVmaW5lIEIzREZHX0JBUl9SRUdTCTAKKyNkZWZpbmUgQjNERkdfUkVHU19MRU5HVEggMHgxMDAwMAorCisjZGVmaW5lIEIzREZHX0lPQ19NQUdJQwkJMHhiMyAvKiBkZmcgOi0pICovCisjZGVmaW5lIEIzREZHX0lPQ0dGUk1TWgkJX0lPUihCM0RGR19JT0NfTUFHSUMsIDEsIGludCkKKyNkZWZpbmUgQjNERkdfSU9DVE5VTUJVRlMJX0lPKEIzREZHX0lPQ19NQUdJQywgMikKKyNkZWZpbmUgQjNERkdfSU9DVFRSQU5TCQlfSU8oQjNERkdfSU9DX01BR0lDLCAzKQorI2RlZmluZSBCM0RGR19JT0NUUVVFVUVCVUYJX0lPKEIzREZHX0lPQ19NQUdJQywgNCkKKyNkZWZpbmUgQjNERkdfSU9DVFBPTExCVUYJX0lPV1IoQjNERkdfSU9DX01BR0lDLCA1LCBzdHJ1Y3QgYjNkZmdfcG9sbCkKKyNkZWZpbmUgQjNERkdfSU9DVFdBSVRCVUYJX0lPV1IoQjNERkdfSU9DX01BR0lDLCA2LCBzdHJ1Y3QgYjNkZmdfd2FpdCkKKyNkZWZpbmUgQjNERkdfSU9DR1dBTkRTVEFUCV9JT1IoQjNERkdfSU9DX01BR0lDLCA3LCBpbnQpCisKK2VudW0geworCS8qIG51bWJlciBvZiA0a2IgcGFnZXMgcGVyIGZyYW1lICovCisJQjNEX1JFR19GUk1fU0laRSA9IDB4MCwKKworCS8qIGJpdCAwOiBzZXQgdG8gZW5hYmxlIGludGVycnVwdHMKKwkgKiBiaXQgMTogc2V0IHRvIGVuYWJsZSBjYWJsZSBzdGF0dXMgY2hhbmdlIGludGVycnVwdHMgKi8KKwlCM0RfUkVHX0hXX0NUUkwgPSAweDQsCisKKwkvKiBiaXQgMC0xIC0gMS1iYXNlZCBJRCBvZiBuZXh0IHBlbmRpbmcgZnJhbWUgdHJhbnNmZXIgKDAgPSBub25lKQorCSAqIGJpdCAyIGluZGljYXRlcyB0aGUgcHJldmlvdXMgRE1BIHRyYW5zZmVyIGhhcyBjb21wbGV0ZWQKKwkgKiBiaXQgMyBpbmRpY2F0ZXMgd2FuZCBjYWJsZSBzdGF0dXMgY2hhbmdlCisJICogYml0IDg6MTUgLSBjb3VudGVyIG9mIG51bWJlciBvZiBkaXNjYXJkZWQgdHJpcGxldHMgKi8KKwlCM0RfUkVHX0RNQV9TVFMgPSAweDgsCisKKwkvKiBiaXQgMDogd2FuZCBzdGF0dXMgKDEgPSBwcmVzZW50LCAwID0gZGlzY29ubmVjdGVkKSAqLworCUIzRF9SRUdfV0FORF9TVFMgPSAweGMsCisKKwkvKiBidXMgYWRkcmVzcyBmb3IgRE1BIHRyYW5zZmVycy4gbG93ZXIgMiBiaXRzIG11c3QgYmUgemVybyBiZWNhdXNlIERNQQorCSAqIHdvcmtzIHdpdGggMzIgYml0IHdvcmQgc2l6ZS4gKi8KKwlCM0RfUkVHX0VDMjIwX0RNQV9BRERSID0gMHg4MDAwLAorCisJLyogYml0IDIwOjAgLSBudW1iZXIgb2YgMzIgYml0IHdvcmRzIHRvIGJlIHRyYW5zZmVycmVkCisJICogYml0IDIxOjMxIC0gcmVzZXJ2ZWQgKi8KKwlCM0RfUkVHX0VDMjIwX1RSRl9TSVpFID0gMHg4MDA0LAorCisJLyogYml0IDAgLSBlcnJvciBiaXQKKwkgKiBiaXQgMSAtIGludGVycnVwdCBiaXQgKHNldCB0byBnZW5lcmF0ZSBpbnRlcnJ1cHQgYXQgZW5kIG9mIHRyYW5zZmVyKQorCSAqIGJpdCAyIC0gc3RhcnQgYml0IChzZXQgdG8gc3RhcnQgdHJhbnNmZXIpCisJICogYml0IDMgLSBkaXJlY3Rpb24gKDAgPSBETUFfVE9fREVWSUNFLCAxID0gRE1BX0ZST01fREVWSUNFCisJICogYml0IDQ6MzEgLSByZXNlcnZlZCAqLworCUIzRF9SRUdfRUMyMjBfRE1BX1NUUyA9IDB4ODAwOCwKK307CisKK2VudW0gYjNkZmdfYnVmZmVyX3N0YXRlIHsKKwlCM0RGR19CVUZGRVJfUE9MTEVEID0gMCwKKwlCM0RGR19CVUZGRVJfUEVORElORywKKwlCM0RGR19CVUZGRVJfUE9QVUxBVEVELAorfTsKKworc3RydWN0IGIzZGZnX2J1ZmZlciB7CisJdW5zaWduZWQgY2hhciAqZnJhbWVbQjNERkdfRlJBTUVTX1BFUl9CVUZGRVJdOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1OCBzdGF0ZTsKK307CisKK3N0cnVjdCBiM2RmZ19kZXYgeworCisJLyogbm8gcHJvdGVjdGlvbiBuZWVkZWQ6IGFsbCBmaW5hbGl6ZWQgYXQgaW5pdGlhbGl6YXRpb24gdGltZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBjZGV2IGNoYXJkZXY7CisJc3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqcmVnczsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZTsKKworCS8qCisJICogUHJvdGVjdHMgYnVmZmVyIHN0YXRlLCBpbmNsdWRpbmcgYnVmZmVyX3F1ZXVlLCB0cmlwbGV0X3JlYWR5LAorCSAqIGN1cl9kbWFfZnJhbWVfaWR4ICYgY3VyX2RtYV9mcmFtZV9hZGRyLgorCSAqLworCXNwaW5sb2NrX3QgYnVmZmVyX2xvY2s7CisJc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmZmVyczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJ1ZmZlcl9xdWV1ZTsKKworCS8qIExhc3QgZnJhbWUgaW4gdHJpcGxldCB0cmFuc2ZlcnJlZCAoLTEgaWYgbm9uZSkuICovCisJaW50IGN1cl9kbWFfZnJhbWVfaWR4OworCisJLyogQ3VycmVudCBmcmFtZSdzIGFkZHJlc3MgZm9yIERNQS4gKi8KKwlkbWFfYWRkcl90IGN1cl9kbWFfZnJhbWVfYWRkcjsKKworCS8qCisJICogUHJvdGVjdHMgY3N0YXRlX3RzdGFtcC4KKwkgKiBOZXN0cyBpbnNpZGUgYnVmZmVyX2xvY2suCisJICovCisJc3BpbmxvY2tfdCBjc3RhdGVfbG9jazsKKwl1bnNpZ25lZCBsb25nIGNzdGF0ZV90c3RhbXA7CisKKwkvKgorCSAqIFByb3RlY3RzIHRyaXBsZXRzX2Ryb3BwZWQuCisJICogTmVzdHMgaW5zaWRlIGJ1ZmZlcnNfbG9jay4KKwkgKi8KKwlzcGlubG9ja190IHRyaXBsZXRzX2Ryb3BwZWRfbG9jazsKKwl1bnNpZ25lZCBpbnQgdHJpcGxldHNfZHJvcHBlZDsKKworCXdhaXRfcXVldWVfaGVhZF90IGJ1ZmZlcl93YWl0cXVldWU7CisKKwl1bnNpZ25lZCBpbnQgdHJhbnNtaXNzaW9uX2VuYWJsZWQ6MTsKKwl1bnNpZ25lZCBpbnQgdHJpcGxldF9yZWFkeToxOworfTsKKworc3RhdGljIHU4IGIzZGZnX2RldmljZXNbQjNERkdfTUFYX0RFVlNdOworCitzdGF0aWMgc3RydWN0IGNsYXNzICpiM2RmZ19jbGFzczsKK3N0YXRpYyBkZXZfdCBiM2RmZ19kZXZ0OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYjNkZmdfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IFBDSV9ERVZJQ0UoMHgwYjNkLCAweDAwMDEpIH0sCisJeyB9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGIzZGZnX2lkcyk7CisKKy8qKioqKiB1c2VyLXZpc2libGUgdHlwZXMgKioqKiovCisKK3N0cnVjdCBiM2RmZ19wb2xsIHsKKwlpbnQgYnVmZmVyX2lkeDsKKwl1bnNpZ25lZCBpbnQgdHJpcGxldHNfZHJvcHBlZDsKK307CisKK3N0cnVjdCBiM2RmZ193YWl0IHsKKwlpbnQgYnVmZmVyX2lkeDsKKwl1bnNpZ25lZCBpbnQgdGltZW91dDsKKwl1bnNpZ25lZCBpbnQgdHJpcGxldHNfZHJvcHBlZDsKK307CisKKy8qKioqIHJlZ2lzdGVyIEkvTyAqKioqLworCitzdGF0aWMgdTMyIGIzZGZnX3JlYWQzMihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiwgdTE2IHJlZykKK3sKKwlyZXR1cm4gaW9yZWFkMzIoZmdkZXYtPnJlZ3MgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBiM2RmZ193cml0ZTMyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCB1MTYgcmVnLCB1MzIgdmFsdWUpCit7CisJaW93cml0ZTMyKHZhbHVlLCBmZ2Rldi0+cmVncyArIHJlZyk7Cit9CisKKy8qKioqIGJ1ZmZlciBtYW5hZ2VtZW50ICoqKiovCisKKy8qCisgKiBQcm9ncmFtIEVDMjIwIGZvciB0cmFuc2ZlciBvZiBhIHNwZWNpZmljIGZyYW1lLgorICogQ2FsbGVkIHdpdGggYnVmZmVyX2xvY2sgaGVsZC4KKyAqLworc3RhdGljIGludCBzZXR1cF9mcmFtZV90cmFuc2ZlcihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiwKKwlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWYsIGludCBmcmFtZSkKK3sKKwl1bnNpZ25lZCBjaGFyICpmcm1fYWRkcjsKKwlkbWFfYWRkcl90IGZybV9hZGRyX2RtYTsKKwl1bnNpZ25lZCBpbnQgZnJtX3NpemUgPSBmZ2Rldi0+ZnJhbWVfc2l6ZTsKKworCWZybV9hZGRyID0gYnVmLT5mcmFtZVtmcmFtZV07CisJZnJtX2FkZHJfZG1hID0gcGNpX21hcF9zaW5nbGUoZmdkZXYtPnBkZXYsIGZybV9hZGRyLAorCQkJCQkgIGZybV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoZmdkZXYtPnBkZXYsIGZybV9hZGRyX2RtYSkpCisJCXJldHVybiAtRU5PTUVNOworCisJZmdkZXYtPmN1cl9kbWFfZnJhbWVfYWRkciA9IGZybV9hZGRyX2RtYTsKKwlmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggPSBmcmFtZTsKKworCWIzZGZnX3dyaXRlMzIoZmdkZXYsIEIzRF9SRUdfRUMyMjBfRE1BX0FERFIsCisJCQkJCWNwdV90b19sZTMyKGZybV9hZGRyX2RtYSkpOworCWIzZGZnX3dyaXRlMzIoZmdkZXYsIEIzRF9SRUdfRUMyMjBfVFJGX1NJWkUsCisJCQkJCWNwdV90b19sZTMyKGZybV9zaXplID4+IDIpKTsKKwliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0VDMjIwX0RNQV9TVFMsIDB4Zik7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVyIHNob3VsZCBob2xkIGJ1ZmZlciBsb2NrICovCitzdGF0aWMgdm9pZCBkZXF1ZXVlX2FsbF9idWZmZXJzKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBiM2RmZ19uYnVmOyBpKyspIHsKKwkJc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmID0gJmZnZGV2LT5idWZmZXJzW2ldOworCQlidWYtPnN0YXRlID0gQjNERkdfQlVGRkVSX1BPTExFRDsKKwkJbGlzdF9kZWxfaW5pdCgmYnVmLT5saXN0KTsKKwl9Cit9CisKKy8qIHF1ZXVlIGEgYnVmZmVyIHRvIHJlY2VpdmUgZGF0YSAqLworc3RhdGljIGludCBxdWV1ZV9idWZmZXIoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsIGludCBidWZpZHgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7CisJc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHIgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCWlmIChidWZpZHggPCAwIHx8IGJ1ZmlkeCA+PSBiM2RmZ19uYnVmKSB7CisJCWRldl9kYmcoZGV2LCAiSW52YWxpZCBidWZmZXIgaW5kZXgsICVkXG4iLCBidWZpZHgpOworCQlyID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCWJ1ZiA9ICZmZ2Rldi0+YnVmZmVyc1tidWZpZHhdOworCisJaWYgKHVubGlrZWx5KGJ1Zi0+c3RhdGUgPT0gQjNERkdfQlVGRkVSX1BFTkRJTkcpKSB7CisJCWRldl9kYmcoZGV2LCAiYnVmZmVyICVkIGlzIGFscmVhZHkgcXVldWVkXG4iLCBidWZpZHgpOworCQlyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJYnVmLT5zdGF0ZSA9IEIzREZHX0JVRkZFUl9QRU5ESU5HOworCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJmZnZGV2LT5idWZmZXJfcXVldWUpOworCisJaWYgKGZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCAmJiBmZ2Rldi0+dHJpcGxldF9yZWFkeSkgeworCQlkZXZfZGJnKGRldiwgInRyaXBsZXQgaXMgcmVhZHksIHB1c2hpbmcgaW1tZWRpYXRlbHlcbiIpOworCQlmZ2Rldi0+dHJpcGxldF9yZWFkeSA9IDA7CisJCXIgPSBzZXR1cF9mcmFtZV90cmFuc2ZlcihmZ2RldiwgYnVmLCAwKTsKKwkJaWYgKHIpCisJCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBtYXAgRE1BIGJ1ZmZlclxuIik7CisJfQorCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHI7Cit9CisKKy8qIG5vbi1ibG9ja2luZyBidWZmZXIgcG9sbC4gcmV0dXJucyAxIGlmIGRhdGEgaXMgcHJlc2VudCBpbiB0aGUgYnVmZmVyLAorICogMCBvdGhlcndpc2UgKi8KK3N0YXRpYyBpbnQgcG9sbF9idWZmZXIoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7CisJc3RydWN0IGIzZGZnX3BvbGwgcDsKKwlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgciA9IDE7CisJaW50IGFyZ19vdXQgPSAwOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZwLCBhcmcsIHNpemVvZihwKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHVubGlrZWx5KCFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQpKSB7CisJCWRldl9kYmcoZGV2LCAiY2Fubm90IHBvbGwsIHRyYW5zbWlzc2lvbiBkaXNhYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwLmJ1ZmZlcl9pZHggPCAwIHx8IHAuYnVmZmVyX2lkeCA+PSBiM2RmZ19uYnVmKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWJ1ZiA9ICZmZ2Rldi0+YnVmZmVyc1twLmJ1ZmZlcl9pZHhdOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJaWYgKGxpa2VseShidWYtPnN0YXRlID09IEIzREZHX0JVRkZFUl9QT1BVTEFURUQpKSB7CisJCWFyZ19vdXQgPSAxOworCQlidWYtPnN0YXRlID0gQjNERkdfQlVGRkVSX1BPTExFRDsKKworCQkvKiBJUlFzIGFscmVhZHkgZGlzYWJsZWQgYnkgc3Bpbl9sb2NrX2lycXNhdmUgYWJvdmUuICovCisJCXNwaW5fbG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7CisJCXAudHJpcGxldHNfZHJvcHBlZCA9IGZnZGV2LT50cmlwbGV0c19kcm9wcGVkOworCQlmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZCA9IDA7CisJCXNwaW5fdW5sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKKwl9IGVsc2UgeworCQlyID0gMDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCWlmIChhcmdfb3V0ICYmIGNvcHlfdG9fdXNlcihhcmcsICZwLCBzaXplb2YocCkpKQorCQlyID0gLUVGQVVMVDsKKworCXJldHVybiByOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfY3N0YXRlX2NoYW5nZShzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB3aGVuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZnZGV2LT5jc3RhdGVfbG9jaywgZmxhZ3MpOworCXdoZW4gPSBmZ2Rldi0+Y3N0YXRlX3RzdGFtcDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+Y3N0YXRlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gd2hlbjsKK30KKworc3RhdGljIGludCBpc19ldmVudF9yZWFkeShzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2Rldiwgc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmLAorCQkJICB1bnNpZ25lZCBsb25nIHdoZW4pCit7CisJaW50IHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmZmdkZXYtPmNzdGF0ZV9sb2NrKTsKKwlyZXN1bHQgPSAoIWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCB8fAorCQkgIGJ1Zi0+c3RhdGUgPT0gQjNERkdfQlVGRkVSX1BPUFVMQVRFRCB8fAorCQkgIHdoZW4gIT0gZmdkZXYtPmNzdGF0ZV90c3RhbXApOworCXNwaW5fdW5sb2NrKCZmZ2Rldi0+Y3N0YXRlX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogc2xlZXAgdW50aWwgYSBzcGVjaWZpYyBidWZmZXIgYmVjb21lcyBwb3B1bGF0ZWQgKi8KK3N0YXRpYyBpbnQgd2FpdF9idWZmZXIoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7CisJc3RydWN0IGIzZGZnX3dhaXQgdzsKKwlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWY7CisJdW5zaWduZWQgbG9uZyBmbGFncywgd2hlbjsKKwlpbnQgcjsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmdywgYXJnLCBzaXplb2YodykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICghZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkKSB7CisJCWRldl9kYmcoZGV2LCAiY2Fubm90IHdhaXQsIHRyYW5zbWlzc2lvbiBkaXNhYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh3LmJ1ZmZlcl9pZHggPCAwIHx8IHcuYnVmZmVyX2lkeCA+PSBiM2RmZ19uYnVmKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWJ1ZiA9ICZmZ2Rldi0+YnVmZmVyc1t3LmJ1ZmZlcl9pZHhdOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJaWYgKGJ1Zi0+c3RhdGUgPT0gQjNERkdfQlVGRkVSX1BPUFVMQVRFRCkgeworCQlyID0gdy50aW1lb3V0OworCQlnb3RvIG91dF90cmlwbGV0c19kcm9wcGVkOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJd2hlbiA9IGdldF9jc3RhdGVfY2hhbmdlKGZnZGV2KTsKKwlpZiAody50aW1lb3V0ID4gMCkgeworCQlyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZmdkZXYtPmJ1ZmZlcl93YWl0cXVldWUsCisJCQlpc19ldmVudF9yZWFkeShmZ2RldiwgYnVmLCB3aGVuKSwKKwkJCSh3LnRpbWVvdXQgKiBIWikgLyAxMDAwKTsKKworCQlpZiAodW5saWtlbHkociA8IDApKQorCQkJZ290byBvdXQ7CisKKwkJdy50aW1lb3V0ID0gciAqIDEwMDAgLyBIWjsKKwl9IGVsc2UgeworCQlyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZnZGV2LT5idWZmZXJfd2FpdHF1ZXVlLAorCQkJaXNfZXZlbnRfcmVhZHkoZmdkZXYsIGJ1Ziwgd2hlbikpOworCisJCWlmICh1bmxpa2VseShyKSkgeworCQkJciA9IC1FUkVTVEFSVFNZUzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogVE9ETzogSW5mb3JtIHRoZSB1c2VyIHZpYSBmaWVsZChzKSBpbiB3PyAqLworCWlmICghZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkIHx8IHdoZW4gIT0gZ2V0X2NzdGF0ZV9jaGFuZ2UoZmdkZXYpKSB7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwlpZiAoYnVmLT5zdGF0ZSAhPSBCM0RGR19CVUZGRVJfUE9QVUxBVEVEKSB7CisJCXIgPSAtRVRJTUVET1VUOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJYnVmLT5zdGF0ZSA9IEIzREZHX0JVRkZFUl9QT0xMRUQ7CisKK291dF90cmlwbGV0c19kcm9wcGVkOgorCisJLyogSVJRcyBhbHJlYWR5IGRpc2FibGVkIGJ5IHNwaW5fbG9ja19pcnFzYXZlIGFib3ZlLiAqLworCXNwaW5fbG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7CisJdy50cmlwbGV0c19kcm9wcGVkID0gZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWQ7CisJZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWQgPSAwOworCXNwaW5fdW5sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwlpZiAoY29weV90b191c2VyKGFyZywgJncsIHNpemVvZih3KSkpCisJCXIgPSAtRUZBVUxUOworb3V0OgorCXJldHVybiByOworfQorCisvKiBtbWFwIHBhZ2UgZmF1bHQgaGFuZGxlciAqLworc3RhdGljIGludCBiM2RmZ192bWFfZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJc3RydWN0IHZtX2ZhdWx0ICp2bWYpCit7CisJc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIG9mZiA9IHZtZi0+cGdvZmYgPDwgUEFHRV9TSElGVDsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfc2l6ZSA9IGZnZGV2LT5mcmFtZV9zaXplOworCXVuc2lnbmVkIGludCBidWZfc2l6ZSA9IGZyYW1lX3NpemUgKiBCM0RGR19GUkFNRVNfUEVSX0JVRkZFUjsKKwl1bnNpZ25lZCBjaGFyICphZGRyOworCisJLyogZGV0ZXJtaW5lIHdoaWNoIGJ1ZmZlciB0aGUgb2Zmc2V0IGxpZXMgd2l0aGluICovCisJdW5zaWduZWQgaW50IGJ1Zl9pZHggPSBvZmYgLyBidWZfc2l6ZTsKKwkvKiBhbmQgdGhlIG9mZnNldCBpbnRvIHRoZSBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQgYnVmX29mZiA9IG9mZiAlIGJ1Zl9zaXplOworCisJLyogZGV0ZXJtaW5lIHdoaWNoIGZyYW1lIGluc2lkZSB0aGUgYnVmZmVyIHRoZSBvZmZzZXQgbGllcyBpbiAqLworCXVuc2lnbmVkIGludCBmcm1faWR4ID0gYnVmX29mZiAvIGZyYW1lX3NpemU7CisJLyogYW5kIHRoZSBvZmZzZXQgaW50byB0aGUgZnJhbWUgKi8KKwl1bnNpZ25lZCBpbnQgZnJtX29mZiA9IGJ1Zl9vZmYgJSBmcmFtZV9zaXplOworCisJaWYgKHVubGlrZWx5KGJ1Zl9pZHggPj0gYjNkZmdfbmJ1ZikpCisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisKKwlhZGRyID0gZmdkZXYtPmJ1ZmZlcnNbYnVmX2lkeF0uZnJhbWVbZnJtX2lkeF0gKyBmcm1fb2ZmOworCXZtX2luc2VydF9wZm4odm1hLCAodW5zaWduZWQgbG9uZyl2bWYtPnZpcnR1YWxfYWRkcmVzcywKKwkJCSAgdmlydF90b19waHlzKGFkZHIpID4+IFBBR0VfU0hJRlQpOworCisJcmV0dXJuIFZNX0ZBVUxUX05PUEFHRTsKK30KKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBiM2RmZ192bV9vcHMgPSB7CisJLmZhdWx0ID0gYjNkZmdfdm1hX2ZhdWx0LAorfTsKKworc3RhdGljIGludCBnZXRfd2FuZF9zdGF0dXMoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsIGludCBfX3VzZXIgKmFyZykKK3sKKwl1MzIgd25kc3RhdCA9IGIzZGZnX3JlYWQzMihmZ2RldiwgQjNEX1JFR19XQU5EX1NUUyk7CisJZGV2X2RiZygmZmdkZXYtPnBkZXYtPmRldiwgIndhbmQgc3RhdHVzICV4XG4iLCB3bmRzdGF0KTsKKwlyZXR1cm4gX19wdXRfdXNlcih3bmRzdGF0ICYgMHgxLCBhcmcpOworfQorCitzdGF0aWMgaW50IGVuYWJsZV90cmFuc21pc3Npb24oc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCit7CisJdTE2IGNvbW1hbmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKKworCWRldl9kYmcoZGV2LCAiZW5hYmxlIHRyYW5zbWlzc2lvblxuIik7CisKKwkvKiBjaGVjayB0aGUgY2FibGUgaXMgcGx1Z2dlZCBpbi4gKi8KKwlpZiAoIWIzZGZnX3JlYWQzMihmZ2RldiwgQjNEX1JFR19XQU5EX1NUUykpIHsKKwkJZGV2X2RiZyhkZXYsICJjYW5ub3Qgc3RhcnQgdHJhbnNtaXNzaW9uIHdpdGhvdXQgd2FuZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogQ2hlY2sgd2UncmUgYSBidXMgbWFzdGVyLgorCSAqIFRPRE86IEkgdGhpbmsgd2UgY2FuIHJlbW92ZSB0aGlzIGhhdmluZyBhZGRlZCB0aGUgcGNpX3NldF9tYXN0ZXIgY2FsbAorCSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGZnZGV2LT5wZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOworCWlmICghKGNvbW1hbmQgJiBQQ0lfQ09NTUFORF9NQVNURVIpKSB7CisJCWRldl9lcnIoZGV2LCAibm90IGEgYnVzIG1hc3RlciwgZm9yY2UtZW5hYmxpbmdcbiIpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZmdkZXYtPnBkZXYsIFBDSV9DT01NQU5ELAorCQkJY29tbWFuZCB8IFBDSV9DT01NQU5EX01BU1RFUik7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJLyogSGFuZGxlIHJhY2luZyBlbmFibGVfdHJhbnNtaXNzaW9uIGNhbGxzLiAqLworCWlmIChmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCWdvdG8gb3V0OworCX0KKworCXNwaW5fbG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7CisJZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWQgPSAwOworCXNwaW5fdW5sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKKworCWZnZGV2LT50cmlwbGV0X3JlYWR5ID0gMDsKKwlmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggPSAtMTsKKwlmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgPSAxOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwkvKiBFbmFibGUgRE1BIGFuZCBjYWJsZSBzdGF0dXMgaW50ZXJydXB0cy4gKi8KKwliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0hXX0NUUkwsIDB4MDMpOworCitvdXQ6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfdHJhbnNtaXNzaW9uKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRtcDsKKworCWRldl9kYmcoZGV2LCAiZGlzYWJsZSB0cmFuc21pc3Npb25cbiIpOworCisJLyogZ3VhcmFudGVlIHRoYXQgbm8gbW9yZSBpbnRlcnJ1cHRzIHdpbGwgYmUgc2VydmljZWQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkID0gMDsKKworCWIzZGZnX3dyaXRlMzIoZmdkZXYsIEIzRF9SRUdfSFdfQ1RSTCwgMCk7CisKKwkvKiBGSVhNRTogdGVtcG9yYXJ5IGRlYnVnZ2luZyBvbmx5LiBpZiB0aGUgYm9hcmQgc3RvcHMgdHJhbnNtaXR0aW5nLAorCSAqIGhpdHRpbmcgY3RybCtjIGFuZCBzZWVpbmcgdGhpcyBtZXNzYWdlIGlzIHVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcKKwkgKiB0aGUgc3RhdGUgb2YgdGhlIGJvYXJkLiAqLworCXRtcCA9IGIzZGZnX3JlYWQzMihmZ2RldiwgQjNEX1JFR19ETUFfU1RTKTsKKwlkZXZfZGJnKGRldiwgIkRNQV9TVFMgcmVhZHMgJXggYWZ0ZXIgVFggc3RvcHBlZFxuIiwgdG1wKTsKKworCWRlcXVldWVfYWxsX2J1ZmZlcnMoZmdkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3RyYW5zbWlzc2lvbihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiwgaW50IGVuYWJsZWQpCit7CisJaW50IHJlcyA9IDA7CisKKwlpZiAoZW5hYmxlZCAmJiAhZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkKQorCQlyZXMgPSBlbmFibGVfdHJhbnNtaXNzaW9uKGZnZGV2KTsKKwllbHNlIGlmICghZW5hYmxlZCAmJiBmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQpCisJCWRpc2FibGVfdHJhbnNtaXNzaW9uKGZnZGV2KTsKKworCXJldHVybiByZXM7Cit9CisKKy8qIENhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4gKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9jc3RhdGVfdW5wbHVnKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQoreworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMuICovCisJYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19IV19DVFJMLCAwKTsKKworCS8qIFN0b3AgdHJhbnNtaXNzaW9uLiAqLworCXNwaW5fbG9jaygmZmdkZXYtPmJ1ZmZlcl9sb2NrKTsKKwlmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgPSAwOworCisJZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ID0gLTE7CisJZmdkZXYtPnRyaXBsZXRfcmVhZHkgPSAwOworCWlmIChmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9hZGRyKSB7CisJCXBjaV91bm1hcF9zaW5nbGUoZmdkZXYtPnBkZXYsIGZnZGV2LT5jdXJfZG1hX2ZyYW1lX2FkZHIsCisJCQkJIGZnZGV2LT5mcmFtZV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9hZGRyID0gMDsKKwl9CisJZGVxdWV1ZV9hbGxfYnVmZmVycyhmZ2Rldik7CisJc3Bpbl91bmxvY2soJmZnZGV2LT5idWZmZXJfbG9jayk7Cit9CisKKy8qIENhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4gKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9jc3RhdGVfY2hhbmdlKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQoreworCXUzMiBjc3RhdGUgPSBiM2RmZ19yZWFkMzIoZmdkZXYsIEIzRF9SRUdfV0FORF9TVFMpOworCXVuc2lnbmVkIGxvbmcgd2hlbjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKKworCWRldl9kYmcoZGV2LCAiY2FibGUgc3RhdGUgY2hhbmdlOiAldVxuIiwgY3N0YXRlKTsKKworCS8qCisJICogV2hlbiB0aGUgd2FuZCBpcyB1bnBsdWdnZWQgd2UgcmVzZXQgb3VyIHN0YXRlLiBUaGUgaGFyZHdhcmUgd2lsbAorCSAqIGhhdmUgZG9uZSB0aGUgc2FtZSBpbnRlcm5hbGx5LgorCSAqCisJICogTm90ZSB3ZSBzaG91bGQgbmV2ZXIgc2VlIGEgY2FibGUgKnBsdWdnZWQqIGV2ZW50LCBhcyBpbnRlcnJ1cHRzCisJICogc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHRyYW5zbWl0dGluZywgd2hpY2ggcmVxdWlyZXMgdGhlIGNhYmxlCisJICogdG8gYmUgcGx1Z2dlZC4gSWYgd2UgZG8gc2VlIG9uZSBpdCBwcm9iYWJseSBtZWFucyB0aGUgY2FibGUgaGFzIGJlZW4KKwkgKiB1bnBsdWdnZWQgYW5kIHJlLXBsdWdnZWQgdmVyeSByYXBpZGx5LiBQb3NzaWJseSBiZWNhdXNlIGl0IGhhcyBhCisJICogYnJva2VuIHdpcmUgYW5kIGlzIG1vbWVudGFyaWx5IGxvc2luZyBjb250YWN0LgorCSAqCisJICogVE9ETzogQXQgdGhlIG1vbWVudCBpZiB5b3UgcGx1ZyBpbiB0aGUgY2FibGUgdGhlbiBlbmFibGUgdHJhbnNtaXNzaW9uCisJICogdGhlIGhhcmR3YXJlIHdpbGwgcmFpc2UgYSBjb3VwbGUgb2Ygc3B1cmlvdXMgaW50ZXJydXB0cywgc28KKwkgKiBqdXN0IGlnbm9yZSB0aGVtIGZvciBub3cuCisJICoKKwkgKiBPbmNlIHRoZSBoYXJkd2FyZSBpcyBmaXhlZCB3ZSBzaG91bGQgY29tcGxhaW4gYW5kIHRyZWF0IGl0IGFzIGFuCisJICogdW5wbHVnLiBPciBhdCBsZWFzdCB0cmFjayBob3cgZnJlcXVlbnRseSBpdCBpcyBoYXBwZW5pbmcgYW5kIGRvCisJICogc28gaWYgdG9vIG1hbnkgY29tZSBpbi4KKwkgKi8KKwlpZiAoY3N0YXRlKSB7CisJCWRldl93YXJuKGRldiwgImlnbm9yaW5nIHVuZXhwZWN0ZWQgcGx1ZyBldmVudFxuIik7CisJCXJldHVybjsKKwl9CisJaGFuZGxlX2NzdGF0ZV91bnBsdWcoZmdkZXYpOworCisJLyoKKwkgKiBSZWNvcmQgY2FibGUgc3RhdGUgY2hhbmdlIHRpbWVzdGFtcCAmIHdha2UgYW55b25lIHdhaXRpbmcKKwkgKiBvbiBhIGNhYmxlIHN0YXRlIGNoYW5nZS4gQmUgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgZXZlbnRzCisJICogYXJlIG5vdCBtaXNzZWQgaWYgd2Ugc29tZWhvdyBnZXQgdHdvIGludGVycnVwdHMgaW4gYSBqaWZmeS4KKwkgKi8KKwlzcGluX2xvY2soJmZnZGV2LT5jc3RhdGVfbG9jayk7CisJd2hlbiA9IGppZmZpZXNfNjQ7CisJaWYgKHdoZW4gPD0gZmdkZXYtPmNzdGF0ZV90c3RhbXApCisJCXdoZW4gPSBmZ2Rldi0+Y3N0YXRlX3RzdGFtcCArIDE7CisJZmdkZXYtPmNzdGF0ZV90c3RhbXAgPSB3aGVuOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZmdkZXYtPmJ1ZmZlcl93YWl0cXVldWUpOworCXNwaW5fdW5sb2NrKCZmZ2Rldi0+Y3N0YXRlX2xvY2spOworfQorCisvKiBDYWxsZWQgd2l0aCBidWZmZXJfbG9jayBoZWxkLiAqLworc3RhdGljIHZvaWQgdHJhbnNmZXJfY29tcGxldGUoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCit7CisJc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OworCisJcGNpX3VubWFwX3NpbmdsZShmZ2Rldi0+cGRldiwgZmdkZXYtPmN1cl9kbWFfZnJhbWVfYWRkciwKKwkJCSBmZ2Rldi0+ZnJhbWVfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9hZGRyID0gMDsKKworCWJ1ZiA9IGxpc3RfZW50cnkoZmdkZXYtPmJ1ZmZlcl9xdWV1ZS5uZXh0LCBzdHJ1Y3QgYjNkZmdfYnVmZmVyLCBsaXN0KTsKKwlpZiAoYnVmKSB7CisJCWRldl9kYmcoZGV2LCAiaGFuZGxlIGZyYW1lIGNvbXBsZXRpb25cbiIpOworCQlpZiAoZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ID09IEIzREZHX0ZSQU1FU19QRVJfQlVGRkVSIC0gMSkgeworCisJCQkvKiBsYXN0IGZyYW1lIG9mIHRoYXQgdHJpcGxldCBjb21wbGV0ZWQgKi8KKwkJCWRldl9kYmcoZGV2LCAidHJpcGxldCBjb21wbGV0ZWRcbiIpOworCQkJYnVmLT5zdGF0ZSA9IEIzREZHX0JVRkZFUl9QT1BVTEFURUQ7CisJCQlsaXN0X2RlbF9pbml0KCZidWYtPmxpc3QpOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSk7CisJCX0KKwl9IGVsc2UgeworCQlkZXZfZXJyKGRldiwgImdvdCBmcmFtZSBidXQgbm8gYnVmZmVyIVxuIik7CisJfQorfQorCisvKgorICogQ2FsbGVkIHdpdGggYnVmZmVyX2xvY2sgaGVsZC4KKyAqCisgKiBOb3RlIHRoYXQgaWR4IGlzIHRoZSAoMS1iYXNlZCkgKm5leHQqIGZyYW1lIHRvIGJlIHRyYW5zZmVycmVkLCB3aGlsZQorICogY3VyX2RtYV9mcmFtZV9pZHggaXMgdGhlICgwLWJhc2VkKSAqbGFzdCogZnJhbWUgdG8gaGF2ZSBiZWVuIHRyYW5zZmVycmVkIChvcgorICogLTEgaWYgbm9uZSkuIFRodXMgdGhlcmUgc2hvdWxkIGJlIGEgZGlmZmVyZW5jZSBvZiAyIGJldHdlZW4gdGhlbS4KKyAqLworc3RhdGljIGJvb2wgc2V0dXBfbmV4dF9mcmFtZV90cmFuc2ZlcihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7CisJYm9vbCBuZWVkX2FjayA9IDE7CisKKwlkZXZfZGJnKGRldiwgInByb2dyYW0gRE1BIHRyYW5zZmVyIGZvciBuZXh0IGZyYW1lOiAlZFxuIiwgaWR4KTsKKworCWJ1ZiA9IGxpc3RfZW50cnkoZmdkZXYtPmJ1ZmZlcl9xdWV1ZS5uZXh0LCBzdHJ1Y3QgYjNkZmdfYnVmZmVyLCBsaXN0KTsKKwlpZiAoYnVmKSB7CisJCWlmIChpZHggPT0gZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ICsgMikgeworCQkJaWYgKHNldHVwX2ZyYW1lX3RyYW5zZmVyKGZnZGV2LCBidWYsIGlkeCAtIDEpKQorCQkJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIG1hcCBETUEgYnVmZmVyXG4iKTsKKwkJCW5lZWRfYWNrID0gMDsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoZGV2LCAiZnJhbWUgbWlzbWF0Y2gsIGdvdCAlZCwgZXhwZWN0ZWQgJWRcbiIsCisJCQkJaWR4LCBmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggKyAyKTsKKworCQkJLyogRklYTUU6IGhhbmRsZSBkcm9wcGVkIHRyaXBsZXRzIGhlcmUgKi8KKwkJfQorCX0gZWxzZSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IHNldHVwIERNQSwgbm8gYnVmZmVyXG4iKTsKKwl9CisKKwlyZXR1cm4gbmVlZF9hY2s7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBiM2RmZ19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IGRldl9pZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKKwl1MzIgc3RzOworCXU4IGRyb3BwZWQ7CisJYm9vbCBuZWVkX2FjayA9IDE7CisJaXJxcmV0dXJuX3QgcmVzID0gSVJRX0hBTkRMRUQ7CisKKwlzdHMgPSBiM2RmZ19yZWFkMzIoZmdkZXYsIEIzRF9SRUdfRE1BX1NUUyk7CisJaWYgKHVubGlrZWx5KHN0cyA9PSAwKSkgeworCQlkZXZfd2FybihkZXYsICJpZ25vcmUgaW50ZXJydXB0LCBETUEgc3RhdHVzIGlzIDBcbiIpOworCQlyZXMgPSBJUlFfTk9ORTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHVubGlrZWx5KCFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQpKSB7CisJCWRldl93YXJuKGRldiwgImlnbm9yZSBpbnRlcnJ1cHQsIFRYIGRpc2FibGVkXG4iKTsKKwkJcmVzID0gSVJRX0hBTkRMRUQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEhhbmRsZSBkcm9wcGVkIGZyYW1lcywgYXMgcmVwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiAqLworCWRyb3BwZWQgPSAoc3RzID4+IDgpICYgMHhmZjsKKwlkZXZfZGJnKGRldiwgImludHI6IERNQV9TVFM9JTA4eCAoZHJvcD0lZCBjb21wPSVkIG5leHQ9JWQpXG4iLAorCQlzdHMsIGRyb3BwZWQsICEhKHN0cyAmIDB4NCksIHN0cyAmIDB4Myk7CisJaWYgKHVubGlrZWx5KGRyb3BwZWQgPiAwKSkgeworCQlzcGluX2xvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOworCQlmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZCArPSBkcm9wcGVkOworCQlzcGluX3VubG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7CisJfQorCisJLyogSGFuZGxlIGEgY2FibGUgc3RhdGUgY2hhbmdlIChpLmUuIHRoZSB3YW5kIGJlaW5nIHVucGx1Z2dlZCkuICovCisJaWYgKHN0cyAmIDB4MDgpIHsKKwkJaGFuZGxlX2NzdGF0ZV9jaGFuZ2UoZmdkZXYpOworCQlnb3RvIG91dDsKKwl9CisKKwlzcGluX2xvY2soJmZnZGV2LT5idWZmZXJfbG9jayk7CisJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJmZnZGV2LT5idWZmZXJfcXVldWUpKSkgeworCisJCS8qIEZJWE1FIG5lZWQgbW9yZSBzYW5pdHkgY2hlY2tpbmcgaGVyZSAqLworCQlkZXZfaW5mbyhkZXYsICJidWZmZXIgbm90IHJlYWR5IGZvciBuZXh0IHRyYW5zZmVyXG4iKTsKKwkJZmdkZXYtPnRyaXBsZXRfcmVhZHkgPSAxOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJLyogSGFzIGEgZnJhbWUgdHJhbnNmZXIgYmVlbiBjb21wbGV0ZWQ/ICovCisJaWYgKHN0cyAmIDB4NCkgeworCQl1MzIgZG1hX3N0YXR1cyA9IGIzZGZnX3JlYWQzMihmZ2RldiwgQjNEX1JFR19FQzIyMF9ETUFfU1RTKTsKKworCQkvKiBDaGVjayBmb3IgRE1BIGVycm9ycyByZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUuICovCisJCWlmICh1bmxpa2VseShkbWFfc3RhdHVzICYgMHgxKSkgeworCQkJZGV2X2VycihkZXYsICJFQzIyMCBlcnJvcjogJTA4eFxuIiwgZG1hX3N0YXR1cyk7CisKKwkJCS8qIEZJWE1FIGZsZXNoIG91dCBlcnJvciBoYW5kbGluZyAqLworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisKKwkJLyogU2FuaXR5IGNoZWNrLCB3ZSBzaG91bGQgaGF2ZSBhIGZyYW1lIGluZGV4IGF0IHRoaXMgcG9pbnQuICovCisJCWlmICh1bmxpa2VseShmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggPT0gLTEpKSB7CisJCQlkZXZfZXJyKGRldiwgImNvbXBsZXRlZCBidXQgbm8gbGFzdCBpZHg/XG4iKTsKKworCQkJLyogRklYTUUgZmxlc2ggb3V0IGVycm9yIGhhbmRsaW5nICovCisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKworCQl0cmFuc2Zlcl9jb21wbGV0ZShmZ2Rldik7CisJfQorCisJLyogSXMgdGhlcmUgYW5vdGhlciBmcmFtZSB0cmFuc2ZlciBwZW5kaW5nPyAqLworCWlmIChzdHMgJiAweDMpCisJCW5lZWRfYWNrID0gc2V0dXBfbmV4dF9mcmFtZV90cmFuc2ZlcihmZ2Rldiwgc3RzICYgMHgzKTsKKwllbHNlCisJCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCA9IC0xOworCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZmZ2Rldi0+YnVmZmVyX2xvY2spOworb3V0OgorCWlmIChuZWVkX2FjaykgeworCQlkZXZfZGJnKGRldiwgImFja25vd2xlZGdpbmcgaW50ZXJydXB0XG4iKTsKKwkJYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19FQzIyMF9ETUFfU1RTLCAweDBiKTsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBiM2RmZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0KKwkJY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBiM2RmZ19kZXYsIGNoYXJkZXYpOworCisJZGV2X2RiZygmZmdkZXYtPnBkZXYtPmRldiwgIm9wZW5cbiIpOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGZnZGV2OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGIzZGZnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZGV2X2RiZygmZmdkZXYtPnBkZXYtPmRldiwgInJlbGVhc2VcbiIpOworCWRpc2FibGVfdHJhbnNtaXNzaW9uKGZnZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgYjNkZmdfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEIzREZHX0lPQ0dGUk1TWjoKKwkJcmV0dXJuIF9fcHV0X3VzZXIoZmdkZXYtPmZyYW1lX3NpemUsIChpbnQgX191c2VyICopIGFyZyk7CisJY2FzZSBCM0RGR19JT0NHV0FORFNUQVQ6CisJCXJldHVybiBnZXRfd2FuZF9zdGF0dXMoZmdkZXYsIChpbnQgX191c2VyICopIGFyZyk7CisJY2FzZSBCM0RGR19JT0NUVFJBTlM6CisJCXJldHVybiBzZXRfdHJhbnNtaXNzaW9uKGZnZGV2LCAoaW50KSBhcmcpOworCWNhc2UgQjNERkdfSU9DVFFVRVVFQlVGOgorCQlyZXR1cm4gcXVldWVfYnVmZmVyKGZnZGV2LCAoaW50KSBhcmcpOworCWNhc2UgQjNERkdfSU9DVFBPTExCVUY6CisJCXJldHVybiBwb2xsX2J1ZmZlcihmZ2RldiwgKHZvaWQgX191c2VyICopIGFyZyk7CisJY2FzZSBCM0RGR19JT0NUV0FJVEJVRjoKKwkJcmV0dXJuIHdhaXRfYnVmZmVyKGZnZGV2LCAodm9pZCBfX3VzZXIgKikgYXJnKTsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKCZmZ2Rldi0+cGRldi0+ZGV2LCAidW5yZWNvZ25pc2VkIGlvY3RsICV4XG4iLCBjbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYjNkZmdfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqcG9sbF90YWJsZSkKK3sKKwlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB3aGVuOworCWludCBpOworCWludCByID0gMDsKKworCXdoZW4gPSBnZXRfY3N0YXRlX2NoYW5nZShmZ2Rldik7CisJcG9sbF93YWl0KGZpbHAsICZmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSwgcG9sbF90YWJsZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IGIzZGZnX25idWY7IGkrKykgeworCQlpZiAoZmdkZXYtPmJ1ZmZlcnNbaV0uc3RhdGUgPT0gQjNERkdfQlVGRkVSX1BPUFVMQVRFRCkgeworCQkJciA9IFBPTExJTiB8IFBPTExSRE5PUk07CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCS8qIFRPRE86IENvbmZpcm0gdGhpcyBpcyBob3cgd2Ugd2FudCB0byBjb21tdW5pY2F0ZSB0aGUgY2hhbmdlLiAqLworCWlmICghZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkIHx8IHdoZW4gIT0gZ2V0X2NzdGF0ZV9jaGFuZ2UoZmdkZXYpKQorCQlyID0gUE9MTEVSUjsKKworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IGIzZGZnX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgdnNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBidWZkYXRhbGVuID0gYjNkZmdfbmJ1ZiAqIGZnZGV2LT5mcmFtZV9zaXplICogMzsKKwl1bnNpZ25lZCBsb25nIHBzaXplID0gYnVmZGF0YWxlbiAtIG9mZnNldDsKKwlpbnQgciA9IDA7CisKKwlpZiAodnNpemUgPD0gcHNpemUpIHsKKwkJdm1hLT52bV9mbGFncyB8PSBWTV9JTyB8IFZNX1JFU0VSVkVEIHwgVk1fQ0FOX05PTkxJTkVBUiB8CisJCQkJIFZNX1BGTk1BUDsKKwkJdm1hLT52bV9vcHMgPSAmYjNkZmdfdm1fb3BzOworCX0gZWxzZSB7CisJCXIgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiM2RmZ19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gYjNkZmdfb3BlbiwKKwkucmVsZWFzZSA9IGIzZGZnX3JlbGVhc2UsCisJLnVubG9ja2VkX2lvY3RsID0gYjNkZmdfaW9jdGwsCisJLnBvbGwgPSBiM2RmZ19wb2xsLAorCS5tbWFwID0gYjNkZmdfbW1hcCwKK307CisKK3N0YXRpYyB2b2lkIGZyZWVfYWxsX2ZyYW1lX2J1ZmZlcnMoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCit7CisJaW50IGksIGo7CisJZm9yIChpID0gMDsgaSA8IGIzZGZnX25idWY7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IEIzREZHX0ZSQU1FU19QRVJfQlVGRkVSOyBqKyspCisJCQlrZnJlZShmZ2Rldi0+YnVmZmVyc1tpXS5mcmFtZVtqXSk7CisJa2ZyZWUoZmdkZXYtPmJ1ZmZlcnMpOworfQorCisvKiBpbml0aWFsaXplIGRldmljZSBhbmQgYW55IGRhdGEgc3RydWN0dXJlcy4gY2FsbGVkIGJlZm9yZSBhbnkgaW50ZXJydXB0cworICogYXJlIGVuYWJsZWQuICovCitzdGF0aWMgaW50IGIzZGZnX2luaXRfZGV2KHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQoreworCWludCBpLCBqOworCXUzMiBmcm1fc2l6ZSA9IGIzZGZnX3JlYWQzMihmZ2RldiwgQjNEX1JFR19GUk1fU0laRSk7CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMuIEluIGFibm9ybWFsIGNpcmN1bXN0YW5jZXMgKGUuZy4gYWZ0ZXIgYSBjcmFzaCkKKwkgKiB0aGUgYm9hcmQgbWF5IHN0aWxsIGJlIHRyYW5zbWl0dGluZyBmcm9tIHRoZSBwcmV2aW91cyBzZXNzaW9uLiBJZiB3ZQorCSAqIGVuc3VyZSB0aGF0IGludGVycnVwdHMgYXJlIGRpc2FibGVkIGJlZm9yZSB3ZSBsYXRlciBlbmFibGUgdGhlbSwgd2UKKwkgKiBhcmUgc3VyZSB0byBjYXB0dXJlIGEgdHJpcGxldCBmcm9tIHRoZSBzdGFydCwgcmF0aGVyIHRoYW4gc3RhcnRpbmcKKwkgKiBmcm9tIGZyYW1lIDIgb3IgMy4gRGlzYWJsaW5nIGludGVycnVwdHMgY2F1c2VzIHRoZSBGRyB0byB0aHJvdyBhd2F5CisJICogYWxsIGJ1ZmZlcmVkIGRhdGEgYW5kIHN0b3AgYnVmZmVyaW5nIG1vcmUgdW50aWwgaW50ZXJydXB0cyBhcmUKKwkgKiBlbmFibGVkIGFnYWluLgorCSAqLworCWIzZGZnX3dyaXRlMzIoZmdkZXYsIEIzRF9SRUdfSFdfQ1RSTCwgMCk7CisKKwlmZ2Rldi0+ZnJhbWVfc2l6ZSA9IGZybV9zaXplICogNDA5NjsKKwlmZ2Rldi0+YnVmZmVycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiM2RmZ19idWZmZXIpICogYjNkZmdfbmJ1ZiwKKwkJCQkgR0ZQX0tFUk5FTCk7CisJaWYgKCFmZ2Rldi0+YnVmZmVycykKKwkJZ290byBlcnJfbm9fYnVmOworCWZvciAoaSA9IDA7IGkgPCBiM2RmZ19uYnVmOyBpKyspIHsKKwkJc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmID0gJmZnZGV2LT5idWZmZXJzW2ldOworCQlmb3IgKGogPSAwOyBqIDwgQjNERkdfRlJBTUVTX1BFUl9CVUZGRVI7IGorKykgeworCQkJYnVmLT5mcmFtZVtqXSA9IGttYWxsb2MoZmdkZXYtPmZyYW1lX3NpemUsIEdGUF9LRVJORUwpOworCQkJaWYgKCFidWYtPmZyYW1lW2pdKQorCQkJCWdvdG8gZXJyX25vX21lbTsKKwkJfQorCQlJTklUX0xJU1RfSEVBRCgmYnVmLT5saXN0KTsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmZmdkZXYtPmJ1ZmZlcl9xdWV1ZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZmdkZXYtPmJ1ZmZlcl93YWl0cXVldWUpOworCXNwaW5fbG9ja19pbml0KCZmZ2Rldi0+YnVmZmVyX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZmZ2Rldi0+Y3N0YXRlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKKwlyZXR1cm4gMDsKKworZXJyX25vX21lbToKKwlmcmVlX2FsbF9mcmFtZV9idWZmZXJzKGZnZGV2KTsKK2Vycl9ub19idWY6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qIGZpbmQgbmV4dCBmcmVlIG1pbm9yIG51bWJlciwgcmV0dXJucyAtMSBpZiBub25lIGFyZSBhdmFpbGFiaWxlICovCitzdGF0aWMgaW50IGdldF9mcmVlX21pbm9yKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEIzREZHX01BWF9ERVZTOyBpKyspIHsKKwkJaWYgKGIzZGZnX2RldmljZXNbaV0gPT0gMCkKKwkJCXJldHVybiBpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGIzZGZnX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IGt6YWxsb2Moc2l6ZW9mKCpmZ2RldiksIEdGUF9LRVJORUwpOworCWludCByID0gMDsKKwlpbnQgbWlub3IgPSBnZXRfZnJlZV9taW5vcigpOworCWRldl90IGRldm5vID0gTUtERVYoTUFKT1IoYjNkZmdfZGV2dCksIG1pbm9yKTsKKwl1bnNpZ25lZCBsb25nIHJlc19sZW47CisJcmVzb3VyY2Vfc2l6ZV90IHJlc19iYXNlOworCisJaWYgKGZnZGV2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKG1pbm9yIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ0b28gbWFueSBkZXZpY2VzIGZvdW5kIVxuIik7CisJCXIgPSAtRUlPOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWIzZGZnX2RldmljZXNbbWlub3JdID0gMTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAicHJvYmUgZGV2aWNlIHdpdGggSVJRICVkXG4iLCBwZGV2LT5pcnEpOworCisJY2Rldl9pbml0KCZmZ2Rldi0+Y2hhcmRldiwgJmIzZGZnX2ZvcHMpOworCWZnZGV2LT5jaGFyZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlyID0gY2Rldl9hZGQoJmZnZGV2LT5jaGFyZGV2LCBkZXZubywgMSk7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGFkZCBjaGFyIGRldmljZVxuIik7CisJCWdvdG8gZXJyX3JlbGVhc2VfbWlub3I7CisJfQorCisJZmdkZXYtPmRldiA9IGRldmljZV9jcmVhdGUoCisJCWIzZGZnX2NsYXNzLAorCQkmcGRldi0+ZGV2LAorCQlkZXZubywKKwkJZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpLAorCQlEUklWRVJfTkFNRSAiJWQiLCBtaW5vcik7CisKKwlpZiAoSVNfRVJSKGZnZGV2LT5kZXYpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBjcmVhdGUgZGV2aWNlXG4iKTsKKwkJciA9IFBUUl9FUlIoZmdkZXYtPmRldik7CisJCWdvdG8gZXJyX2RlbF9jZGV2OworCX0KKworCXIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9kZXZfdW5yZWc7CisJfQorCisJcmVzX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgQjNERkdfQkFSX1JFR1MpOworCWlmIChyZXNfbGVuICE9IEIzREZHX1JFR1NfTEVOR1RIKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgcmVnaXN0ZXIgcmVzb3VyY2Ugc2l6ZVxuIik7CisJCXIgPSAtRUlPOworCQlnb3RvIGVycl9kaXNhYmxlOworCX0KKworCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgQjNERkdfQkFSX1JFR1MpCisJCQkJIT0gKElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9TSVpFQUxJR04pKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgcmVzb3VyY2UgZmxhZ3NcbiIpOworCQlyID0gLUVJTzsKKwkJZ290byBlcnJfZGlzYWJsZTsKKwl9CisJciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJJVkVSX05BTUUpOworCWlmIChyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyX2Rpc2FibGU7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iKTsKKwkJZ290byBlcnJfZnJlZV9yZXM7CisJfQorCisJcmVzX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgQjNERkdfQkFSX1JFR1MpOworCWZnZGV2LT5yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHJlc19iYXNlLCByZXNfbGVuKTsKKwlpZiAoIWZnZGV2LT5yZWdzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ3MgaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyID0gLUVJTzsKKwkJZ290byBlcnJfZnJlZV9yZXM7CisJfQorCisJZmdkZXYtPnBkZXYgPSBwZGV2OworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBmZ2Rldik7CisJciA9IGIzZGZnX2luaXRfZGV2KGZnZGV2KTsKKwlpZiAociA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRhbGl6ZSBkZXZpY2VcbiIpOworCQlnb3RvIGVycl91bm1hcDsKKwl9CisKKwlyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBiM2RmZ19pbnRyLCBJUlFGX1NIQVJFRCwgRFJJVkVSX05BTUUsIGZnZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZG4ndCByZXF1ZXN0IGlycSAlZFxuIiwgcGRldi0+aXJxKTsKKwkJZ290byBlcnJfZnJlZV9idWZzOworCX0KKworCXJldHVybiAwOworCitlcnJfZnJlZV9idWZzOgorCWZyZWVfYWxsX2ZyYW1lX2J1ZmZlcnMoZmdkZXYpOworZXJyX3VubWFwOgorCWlvdW5tYXAoZmdkZXYtPnJlZ3MpOworZXJyX2ZyZWVfcmVzOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CitlcnJfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitlcnJfZGV2X3VucmVnOgorCWRldmljZV9kZXN0cm95KGIzZGZnX2NsYXNzLCBkZXZubyk7CitlcnJfZGVsX2NkZXY6CisJY2Rldl9kZWwoJmZnZGV2LT5jaGFyZGV2KTsKK2Vycl9yZWxlYXNlX21pbm9yOgorCWIzZGZnX2RldmljZXNbbWlub3JdID0gMDsKK2Vycl9mcmVlOgorCWtmcmVlKGZnZGV2KTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGIzZGZnX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBNSU5PUihmZ2Rldi0+Y2hhcmRldi5kZXYpOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVtb3ZlXG4iKTsKKworCWZyZWVfaXJxKHBkZXYtPmlycSwgZmdkZXYpOworCWlvdW5tYXAoZmdkZXYtPnJlZ3MpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCWRldmljZV9kZXN0cm95KGIzZGZnX2NsYXNzLCBNS0RFVihNQUpPUihiM2RmZ19kZXZ0KSwgbWlub3IpKTsKKwljZGV2X2RlbCgmZmdkZXYtPmNoYXJkZXYpOworCWZyZWVfYWxsX2ZyYW1lX2J1ZmZlcnMoZmdkZXYpOworCWtmcmVlKGZnZGV2KTsKKwliM2RmZ19kZXZpY2VzW21pbm9yXSA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBiM2RmZ19kcml2ZXIgPSB7CisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkuaWRfdGFibGUgPSBiM2RmZ19pZHMsCisJLnByb2JlID0gYjNkZmdfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGIzZGZnX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBiM2RmZ19tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByOworCisJaWYgKGIzZGZnX25idWYgPCAyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRQorCQkJICAgIjogYnVmZmVyX2NvdW50IGlzIG91dCBvZiByYW5nZSAobXVzdCBiZSA+PSAyKSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IGxvYWRlZFxuIik7CisKKwliM2RmZ19jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgRFJJVkVSX05BTUUpOworCWlmIChJU19FUlIoYjNkZmdfY2xhc3MpKQorCQlyZXR1cm4gUFRSX0VSUihiM2RmZ19jbGFzcyk7CisKKwlyID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmYjNkZmdfZGV2dCwgMCwgQjNERkdfTUFYX0RFVlMsIERSSVZFUl9OQU1FKTsKKwlpZiAocikKKwkJZ290byBlcnIxOworCisJciA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmIzZGZnX2RyaXZlcik7CisJaWYgKHIpCisJCWdvdG8gZXJyMjsKKworCXJldHVybiByOworCitlcnIyOgorCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihiM2RmZ19kZXZ0LCBCM0RGR19NQVhfREVWUyk7CitlcnIxOgorCWNsYXNzX2Rlc3Ryb3koYjNkZmdfY2xhc3MpOworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYjNkZmdfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IHVubG9hZGVkXG4iKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmIzZGZnX2RyaXZlcik7CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGIzZGZnX2RldnQsIEIzREZHX01BWF9ERVZTKTsKKwljbGFzc19kZXN0cm95KGIzZGZnX2NsYXNzKTsKK30KKworbW9kdWxlX2luaXQoYjNkZmdfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoYjNkZmdfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCmluZGV4IGI0N2NhMWUuLjJkODE5ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKQEAgLTEsMTEgKzEsMTggQEAKIGNvbmZpZyBDT01FREkKLQl0cmlzdGF0ZSAiRGF0YSBBY3F1aXNpb24gc3VwcG9ydCAoY29tZWRpKSIKKwl0cmlzdGF0ZSAiRGF0YSBhY3F1aXNpdGlvbiBzdXBwb3J0IChjb21lZGkpIgogCWRlZmF1bHQgTgogCWRlcGVuZHMgb24gbQogCS0tLWhlbHAtLS0KLQkgIEVuYWJsZSBzdXBwb3J0IGEgd2lkZSByYW5nZSBvZiBkYXRhIGFjcXVpc2lvbiBkZXZpY2VzCisJICBFbmFibGUgc3VwcG9ydCBhIHdpZGUgcmFuZ2Ugb2YgZGF0YSBhY3F1aXNpdGlvbiBkZXZpY2VzCiAJICBmb3IgTGludXguCiAKK2NvbmZpZyBDT01FRElfREVCVUcKKwlib29sICJDb21lZGkgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gQ09NRURJICE9IG4KKwloZWxwCisJICBUaGlzIGlzIGFuIG9wdGlvbiBmb3IgdXNlIGJ5IGRldmVsb3BlcnM7IG1vc3QgcGVvcGxlIHNob3VsZAorCSAgc2F5IE4gaGVyZS4gVGhpcyBlbmFibGVzIGNvbWVkaSBjb3JlIGFuZCBkcml2ZXIgZGVidWdnaW5nLgorCiBjb25maWcgQ09NRURJX1JUCiAJdHJpc3RhdGUgIkNvbWVkaSBSZWFsLXRpbWUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENPTUVESSAmJiBSVApAQCAtMjAsNiArMjcsMTMgQEAKIAktLS1oZWxwLS0tCiAJICBFbmFibGUgbG90cyBvZiBjb21lZGkgUENJIGRyaXZlcnMgdG8gYmUgYnVpbHQKIAorY29uZmlnIENPTUVESV9QQ01DSUFfRFJJVkVSUworCXRyaXN0YXRlICJDb21lZGkgUENNQ0lBIGRyaXZlcnMiCisJZGVwZW5kcyBvbiBDT01FREkgJiYgUENNQ0lBSQorCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZSBsb3RzIG9mIGNvbWVkaSBQQ01DSUEgZHJpdmVycyB0byBiZSBidWlsdAorCiBjb25maWcgQ09NRURJX1VTQl9EUklWRVJTCiAJdHJpc3RhdGUgIkNvbWVkaSBVU0IgZHJpdmVycyIKIAlkZXBlbmRzIG9uIENPTUVESSAmJiBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaS5oCmluZGV4IDM2ZDJlMWIuLmU2YjVmMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGkuaApAQCAtNTcsOSArNTcsNiBAQAogLyogbWF4IGxlbmd0aCBvZiBkZXZpY2UgYW5kIGRyaXZlciBuYW1lcyAqLwogI2RlZmluZSBDT01FRElfTkFNRUxFTiAyMAogCi0JdHlwZWRlZiB1bnNpZ25lZCBpbnQgbHNhbXBsX3Q7Ci0JdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBzYW1wbF90OwotCiAvKiBwYWNrcyBhbmQgdW5wYWNrcyBhIGNoYW5uZWwvcmFuZ2UgbnVtYmVyICovCiAKICNkZWZpbmUgQ1JfUEFDSyhjaGFuLCBybmcsIGFyZWYpCQkoKCgoYXJlZikmMHgzKTw8MjQpIHwgKCgocm5nKSYweGZmKTw8MTYpIHwgKGNoYW4pKQpAQCAtMjYxLDEwICsyNTgsMTEgQEAKIAlJTlNOX0NPTkZJR19HRVRfQ0xPQ0tfU1JDID0gMjAwNCwJLyogR2V0IG1hc3RlciBjbG9jayBzb3VyY2UgKi8KIAlJTlNOX0NPTkZJR19TRVRfT1RIRVJfU1JDID0gMjAwNSwJLyogU2V0IG90aGVyIHNvdXJjZSAqLwogLyoJSU5TTl9DT05GSUdfR0VUX09USEVSX1NSQyA9IDIwMDYsKi8JLyogR2V0IG90aGVyIHNvdXJjZSAqLwotCUlOU05fQ09ORklHX0dFVF9IQVJEV0FSRV9CVUZGRVJfU0laRSwJLyogR2V0IHNpemUgaW4gYnl0ZXMgb2YKLQkJCQkJCSAgc3ViZGV2aWNlJ3Mgb24tYm9hcmQgZmlmb3MKLQkJCQkJCSAgdXNlZCBkdXJpbmcgc3RyZWFtaW5nCi0JCQkJCQkgIGlucHV0L291dHB1dCAqLworCUlOU05fQ09ORklHX0dFVF9IQVJEV0FSRV9CVUZGRVJfU0laRSA9IDIwMDYsCS8qIEdldCBzaXplIGluIGJ5dGVzIG9mCisJCQkJCQkJICAgc3ViZGV2aWNlJ3Mgb24tYm9hcmQKKwkJCQkJCQkgICBmaWZvcyB1c2VkIGR1cmluZworCQkJCQkJCSAgIHN0cmVhbWluZworCQkJCQkJCSAgIGlucHV0L291dHB1dCAqLwogCUlOU05fQ09ORklHX1NFVF9DT1VOVEVSX01PREUgPSA0MDk3LAogCUlOU05fQ09ORklHXzgyNTRfU0VUX01PREUgPSBJTlNOX0NPTkZJR19TRVRfQ09VTlRFUl9NT0RFLAkvKiBkZXByZWNhdGVkICovCiAJSU5TTl9DT05GSUdfODI1NF9SRUFEX1NUQVRVUyA9IDQwOTgsCkBAIC0yOTMsNDUgKzI5MSwzMiBAQAogLyogaW9jdGxzICovCiAKICNkZWZpbmUgQ0lPICdkJwotI2RlZmluZSBDT01FRElfREVWQ09ORklHIF9JT1coQ0lPLCAwLCBjb21lZGlfZGV2Y29uZmlnKQotI2RlZmluZSBDT01FRElfREVWSU5GTyBfSU9SKENJTywgMSwgY29tZWRpX2RldmluZm8pCi0jZGVmaW5lIENPTUVESV9TVUJESU5GTyBfSU9SKENJTywgMiwgY29tZWRpX3N1YmRpbmZvKQotI2RlZmluZSBDT01FRElfQ0hBTklORk8gX0lPUihDSU8sIDMsIGNvbWVkaV9jaGFuaW5mbykKKyNkZWZpbmUgQ09NRURJX0RFVkNPTkZJRyBfSU9XKENJTywgMCwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcpCisjZGVmaW5lIENPTUVESV9ERVZJTkZPIF9JT1IoQ0lPLCAxLCBzdHJ1Y3QgY29tZWRpX2RldmluZm8pCisjZGVmaW5lIENPTUVESV9TVUJESU5GTyBfSU9SKENJTywgMiwgc3RydWN0IGNvbWVkaV9zdWJkaW5mbykKKyNkZWZpbmUgQ09NRURJX0NIQU5JTkZPIF9JT1IoQ0lPLCAzLCBzdHJ1Y3QgY29tZWRpX2NoYW5pbmZvKQogI2RlZmluZSBDT01FRElfVFJJRyBfSU9XUihDSU8sIDQsIGNvbWVkaV90cmlnKQogI2RlZmluZSBDT01FRElfTE9DSyBfSU8oQ0lPLCA1KQogI2RlZmluZSBDT01FRElfVU5MT0NLIF9JTyhDSU8sIDYpCiAjZGVmaW5lIENPTUVESV9DQU5DRUwgX0lPKENJTywgNykKLSNkZWZpbmUgQ09NRURJX1JBTkdFSU5GTyBfSU9SKENJTywgOCwgY29tZWRpX3JhbmdlaW5mbykKLSNkZWZpbmUgQ09NRURJX0NNRCBfSU9SKENJTywgOSwgY29tZWRpX2NtZCkKLSNkZWZpbmUgQ09NRURJX0NNRFRFU1QgX0lPUihDSU8sIDEwLCBjb21lZGlfY21kKQotI2RlZmluZSBDT01FRElfSU5TTkxJU1QgX0lPUihDSU8sIDExLCBjb21lZGlfaW5zbmxpc3QpCi0jZGVmaW5lIENPTUVESV9JTlNOIF9JT1IoQ0lPLCAxMiwgY29tZWRpX2luc24pCi0jZGVmaW5lIENPTUVESV9CVUZDT05GSUcgX0lPUihDSU8sIDEzLCBjb21lZGlfYnVmY29uZmlnKQotI2RlZmluZSBDT01FRElfQlVGSU5GTyBfSU9XUihDSU8sIDE0LCBjb21lZGlfYnVmaW5mbykKKyNkZWZpbmUgQ09NRURJX1JBTkdFSU5GTyBfSU9SKENJTywgOCwgc3RydWN0IGNvbWVkaV9yYW5nZWluZm8pCisjZGVmaW5lIENPTUVESV9DTUQgX0lPUihDSU8sIDksIHN0cnVjdCBjb21lZGlfY21kKQorI2RlZmluZSBDT01FRElfQ01EVEVTVCBfSU9SKENJTywgMTAsIHN0cnVjdCBjb21lZGlfY21kKQorI2RlZmluZSBDT01FRElfSU5TTkxJU1QgX0lPUihDSU8sIDExLCBzdHJ1Y3QgY29tZWRpX2luc25saXN0KQorI2RlZmluZSBDT01FRElfSU5TTiBfSU9SKENJTywgMTIsIHN0cnVjdCBjb21lZGlfaW5zbikKKyNkZWZpbmUgQ09NRURJX0JVRkNPTkZJRyBfSU9SKENJTywgMTMsIHN0cnVjdCBjb21lZGlfYnVmY29uZmlnKQorI2RlZmluZSBDT01FRElfQlVGSU5GTyBfSU9XUihDSU8sIDE0LCBzdHJ1Y3QgY29tZWRpX2J1ZmluZm8pCiAjZGVmaW5lIENPTUVESV9QT0xMIF9JTyhDSU8sIDE1KQogCiAvKiBzdHJ1Y3R1cmVzICovCiAKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV90cmlnX3N0cnVjdCBjb21lZGlfdHJpZzsKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9jbWRfc3RydWN0IGNvbWVkaV9jbWQ7Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfaW5zbl9zdHJ1Y3QgY29tZWRpX2luc247Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfaW5zbmxpc3Rfc3RydWN0IGNvbWVkaV9pbnNubGlzdDsKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9jaGFuaW5mb19zdHJ1Y3QgY29tZWRpX2NoYW5pbmZvOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX3N1YmRpbmZvX3N0cnVjdCBjb21lZGlfc3ViZGluZm87Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfZGV2aW5mb19zdHJ1Y3QgY29tZWRpX2RldmluZm87Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnX3N0cnVjdCBjb21lZGlfZGV2Y29uZmlnOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX3JhbmdlaW5mb19zdHJ1Y3QgY29tZWRpX3JhbmdlaW5mbzsKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9rcmFuZ2Vfc3RydWN0IGNvbWVkaV9rcmFuZ2U7Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfYnVmY29uZmlnX3N0cnVjdCBjb21lZGlfYnVmY29uZmlnOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX2J1ZmluZm9fc3RydWN0IGNvbWVkaV9idWZpbmZvOwotCi1zdHJ1Y3QgY29tZWRpX3RyaWdfc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfdHJpZyB7CiAJdW5zaWduZWQgaW50IHN1YmRldjsJLyogc3ViZGV2aWNlICovCiAJdW5zaWduZWQgaW50IG1vZGU7CS8qIG1vZGUgKi8KIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdW5zaWduZWQgaW50IG5fY2hhbjsJLyogbnVtYmVyIG9mIGNoYW5uZWxzICovCiAJdW5zaWduZWQgaW50ICpjaGFubGlzdDsJLyogY2hhbm5lbC9yYW5nZSBsaXN0ICovCi0Jc2FtcGxfdCAqZGF0YTsJLyogZGF0YSBsaXN0LCBzaXplIGRlcGVuZHMgb24gc3ViZCBmbGFncyAqLworCXNob3J0ICpkYXRhOwkvKiBkYXRhIGxpc3QsIHNpemUgZGVwZW5kcyBvbiBzdWJkIGZsYWdzICovCiAJdW5zaWduZWQgaW50IG47CS8qIG51bWJlciBvZiBzY2FucyAqLwogCXVuc2lnbmVkIGludCB0cmlnc3JjOwogCXVuc2lnbmVkIGludCB0cmlndmFyOwpAQCAtMzQwLDIxICszMjUsMjEgQEAKIAl1bnNpZ25lZCBpbnQgdW51c2VkWzNdOwogfTsKIAotc3RydWN0IGNvbWVkaV9pbnNuX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX2luc24gewogCXVuc2lnbmVkIGludCBpbnNuOwogCXVuc2lnbmVkIGludCBuOwotCWxzYW1wbF90ICpkYXRhOworCXVuc2lnbmVkIGludCAqZGF0YTsKIAl1bnNpZ25lZCBpbnQgc3ViZGV2OwogCXVuc2lnbmVkIGludCBjaGFuc3BlYzsKIAl1bnNpZ25lZCBpbnQgdW51c2VkWzNdOwogfTsKIAotc3RydWN0IGNvbWVkaV9pbnNubGlzdF9zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaV9pbnNubGlzdCB7CiAJdW5zaWduZWQgaW50IG5faW5zbnM7Ci0JY29tZWRpX2luc24gKmluc25zOworCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbnM7CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2NtZF9zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaV9jbWQgewogCXVuc2lnbmVkIGludCBzdWJkZXY7CiAJdW5zaWduZWQgaW50IGZsYWdzOwogCkBAIC0zNzYsMzcgKzM2MSwzNyBAQAogCXVuc2lnbmVkIGludCAqY2hhbmxpc3Q7CS8qIGNoYW5uZWwvcmFuZ2UgbGlzdCAqLwogCXVuc2lnbmVkIGludCBjaGFubGlzdF9sZW47CiAKLQlzYW1wbF90ICpkYXRhOwkvKiBkYXRhIGxpc3QsIHNpemUgZGVwZW5kcyBvbiBzdWJkIGZsYWdzICovCisJc2hvcnQgKmRhdGE7CS8qIGRhdGEgbGlzdCwgc2l6ZSBkZXBlbmRzIG9uIHN1YmQgZmxhZ3MgKi8KIAl1bnNpZ25lZCBpbnQgZGF0YV9sZW47CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2NoYW5pbmZvX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX2NoYW5pbmZvIHsKIAl1bnNpZ25lZCBpbnQgc3ViZGV2OwotCWxzYW1wbF90ICptYXhkYXRhX2xpc3Q7CisJdW5zaWduZWQgaW50ICptYXhkYXRhX2xpc3Q7CiAJdW5zaWduZWQgaW50ICpmbGFnbGlzdDsKIAl1bnNpZ25lZCBpbnQgKnJhbmdlbGlzdDsKIAl1bnNpZ25lZCBpbnQgdW51c2VkWzRdOwogfTsKIAotc3RydWN0IGNvbWVkaV9yYW5nZWluZm9fc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfcmFuZ2VpbmZvIHsKIAl1bnNpZ25lZCBpbnQgcmFuZ2VfdHlwZTsKIAl2b2lkICpyYW5nZV9wdHI7CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2tyYW5nZV9zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaV9rcmFuZ2UgewogCWludCBtaW47CS8qIGZpeGVkIHBvaW50LCBtdWx0aXBseSBieSAxZS02ICovCiAJaW50IG1heDsJLyogZml4ZWQgcG9pbnQsIG11bHRpcGx5IGJ5IDFlLTYgKi8KIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9OwogCiAKLXN0cnVjdCBjb21lZGlfc3ViZGluZm9fc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfc3ViZGluZm8gewogCXVuc2lnbmVkIGludCB0eXBlOwogCXVuc2lnbmVkIGludCBuX2NoYW47CiAJdW5zaWduZWQgaW50IHN1YmRfZmxhZ3M7CiAJdW5zaWduZWQgaW50IHRpbWVyX3R5cGU7CiAJdW5zaWduZWQgaW50IGxlbl9jaGFubGlzdDsKLQlsc2FtcGxfdCBtYXhkYXRhOworCXVuc2lnbmVkIGludCBtYXhkYXRhOwogCXVuc2lnbmVkIGludCBmbGFnczsJLyogY2hhbm5lbCBmbGFncyAqLwogCXVuc2lnbmVkIGludCByYW5nZV90eXBlOwkvKiBsb29rdXAgaW4ga2VybmVsICovCiAJdW5zaWduZWQgaW50IHNldHRsaW5nX3RpbWVfMDsKQEAgLTQxNCw3ICszOTksNyBAQAogCXVuc2lnbmVkIGludCB1bnVzZWRbOF07CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2RldmluZm9fc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfZGV2aW5mbyB7CiAJdW5zaWduZWQgaW50IHZlcnNpb25fY29kZTsKIAl1bnNpZ25lZCBpbnQgbl9zdWJkZXZzOwogCWNoYXIgZHJpdmVyX25hbWVbQ09NRURJX05BTUVMRU5dOwpAQCAtNDI0LDEyICs0MDksMTIgQEAKIAlpbnQgdW51c2VkWzMwXTsKIH07CiAKLXN0cnVjdCBjb21lZGlfZGV2Y29uZmlnX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyB7CiAJY2hhciBib2FyZF9uYW1lW0NPTUVESV9OQU1FTEVOXTsKIAlpbnQgb3B0aW9uc1tDT01FRElfTkRFVkNPTkZPUFRTXTsKIH07CiAKLXN0cnVjdCBjb21lZGlfYnVmY29uZmlnX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpX2J1ZmNvbmZpZyB7CiAJdW5zaWduZWQgaW50IHN1YmRldmljZTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKQEAgLTQzOSw3ICs0MjQsNyBAQAogCXVuc2lnbmVkIGludCB1bnVzZWRbNF07CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2J1ZmluZm9fc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfYnVmaW5mbyB7CiAJdW5zaWduZWQgaW50IHN1YmRldmljZTsKIAl1bnNpZ25lZCBpbnQgYnl0ZXNfcmVhZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfY29tcGF0MzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2NvbXBhdDMyLmMKaW5kZXggN2QwMTE2Yi4uMWI5YzJhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfY29tcGF0MzIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9jb21wYXQzMi5jCkBAIC0zNywzMSArMzcsMzEgQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+CS8qIGZvciAodW4pcmVnaXN0ZXJfaW9jdGwzMl9jb252ZXJzaW9uICovCiAjZW5kaWYKIAotI2RlZmluZSBDT01FREkzMl9DSEFOSU5GTyBfSU9SKENJTywzLGNvbWVkaTMyX2NoYW5pbmZvKQotI2RlZmluZSBDT01FREkzMl9SQU5HRUlORk8gX0lPUihDSU8sOCxjb21lZGkzMl9yYW5nZWluZm8pCisjZGVmaW5lIENPTUVESTMyX0NIQU5JTkZPIF9JT1IoQ0lPLCAzLCBzdHJ1Y3QgY29tZWRpMzJfY2hhbmluZm9fc3RydWN0KQorI2RlZmluZSBDT01FREkzMl9SQU5HRUlORk8gX0lPUihDSU8sIDgsIHN0cnVjdCBjb21lZGkzMl9yYW5nZWluZm9fc3RydWN0KQogLyogTi5CLiBDT01FREkzMl9DTUQgYW5kIENPTUVESV9DTUQgb3VnaHQgdG8gdXNlIF9JT1dSLCBub3QgX0lPUi4KICAqIEl0J3MgdG9vIGxhdGUgdG8gY2hhbmdlIGl0IG5vdywgYnV0IGl0IG9ubHkgYWZmZWN0cyB0aGUgY29tbWFuZCBudW1iZXIuICovCi0jZGVmaW5lIENPTUVESTMyX0NNRCBfSU9SKENJTyw5LGNvbWVkaTMyX2NtZCkKKyNkZWZpbmUgQ09NRURJMzJfQ01EIF9JT1IoQ0lPLCA5LCBzdHJ1Y3QgY29tZWRpMzJfY21kX3N0cnVjdCkKIC8qIE4uQi4gQ09NRURJMzJfQ01EVEVTVCBhbmQgQ09NRURJX0NNRFRFU1Qgb3VnaHQgdG8gdXNlIF9JT1dSLCBub3QgX0lPUi4KICAqIEl0J3MgdG9vIGxhdGUgdG8gY2hhbmdlIGl0IG5vdywgYnV0IGl0IG9ubHkgYWZmZWN0cyB0aGUgY29tbWFuZCBudW1iZXIuICovCi0jZGVmaW5lIENPTUVESTMyX0NNRFRFU1QgX0lPUihDSU8sMTAsY29tZWRpMzJfY21kKQotI2RlZmluZSBDT01FREkzMl9JTlNOTElTVCBfSU9SKENJTywxMSxjb21lZGkzMl9pbnNubGlzdCkKLSNkZWZpbmUgQ09NRURJMzJfSU5TTiBfSU9SKENJTywxMixjb21lZGkzMl9pbnNuKQorI2RlZmluZSBDT01FREkzMl9DTURURVNUIF9JT1IoQ0lPLCAxMCwgc3RydWN0IGNvbWVkaTMyX2NtZF9zdHJ1Y3QpCisjZGVmaW5lIENPTUVESTMyX0lOU05MSVNUIF9JT1IoQ0lPLCAxMSwgc3RydWN0IGNvbWVkaTMyX2luc25saXN0X3N0cnVjdCkKKyNkZWZpbmUgQ09NRURJMzJfSU5TTiBfSU9SKENJTywgMTIsIHN0cnVjdCBjb21lZGkzMl9pbnNuX3N0cnVjdCkKIAotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpMzJfY2hhbmluZm9fc3RydWN0IHsKK3N0cnVjdCBjb21lZGkzMl9jaGFuaW5mb19zdHJ1Y3QgewogCXVuc2lnbmVkIGludCBzdWJkZXY7Ci0JY29tcGF0X3VwdHJfdCBtYXhkYXRhX2xpc3Q7CS8qIDMyLWJpdCAnbHNhbXBsX3QgKicgKi8KKwljb21wYXRfdXB0cl90IG1heGRhdGFfbGlzdDsJLyogMzItYml0ICd1bnNpZ25lZCBpbnQgKicgKi8KIAljb21wYXRfdXB0cl90IGZsYWdsaXN0OwkJLyogMzItYml0ICd1bnNpZ25lZCBpbnQgKicgKi8KIAljb21wYXRfdXB0cl90IHJhbmdlbGlzdDsJLyogMzItYml0ICd1bnNpZ25lZCBpbnQgKicgKi8KIAl1bnNpZ25lZCBpbnQgdW51c2VkWzRdOwotfSBjb21lZGkzMl9jaGFuaW5mbzsKK307CiAKLXR5cGVkZWYgc3RydWN0IGNvbWVkaTMyX3JhbmdlaW5mb19zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaTMyX3JhbmdlaW5mb19zdHJ1Y3QgewogCXVuc2lnbmVkIGludCByYW5nZV90eXBlOwogCWNvbXBhdF91cHRyX3QgcmFuZ2VfcHRyOwkvKiAzMi1iaXQgJ3ZvaWQgKicgKi8KLX0gY29tZWRpMzJfcmFuZ2VpbmZvOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpMzJfY21kX3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpMzJfY21kX3N0cnVjdCB7CiAJdW5zaWduZWQgaW50IHN1YmRldjsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHN0YXJ0X3NyYzsKQEAgLTc2LDM3ICs3NiwzNiBAQAogCXVuc2lnbmVkIGludCBzdG9wX2FyZzsKIAljb21wYXRfdXB0cl90IGNoYW5saXN0OwkJLyogMzItYml0ICd1bnNpZ25lZCBpbnQgKicgKi8KIAl1bnNpZ25lZCBpbnQgY2hhbmxpc3RfbGVuOwotCWNvbXBhdF91cHRyX3QgZGF0YTsJCS8qIDMyLWJpdCAnc2FtcGxfdCAqJyAqLworCWNvbXBhdF91cHRyX3QgZGF0YTsJCS8qIDMyLWJpdCAnc2hvcnQgKicgKi8KIAl1bnNpZ25lZCBpbnQgZGF0YV9sZW47Ci19IGNvbWVkaTMyX2NtZDsKK307CiAKLXR5cGVkZWYgc3RydWN0IGNvbWVkaTMyX2luc25fc3RydWN0IHsKK3N0cnVjdCBjb21lZGkzMl9pbnNuX3N0cnVjdCB7CiAJdW5zaWduZWQgaW50IGluc247CiAJdW5zaWduZWQgaW50IG47Ci0JY29tcGF0X3VwdHJfdCBkYXRhOwkJLyogMzItYml0ICdsc2FtcGxfdCAqJyAqLworCWNvbXBhdF91cHRyX3QgZGF0YTsJCS8qIDMyLWJpdCAndW5zaWduZWQgaW50IConICovCiAJdW5zaWduZWQgaW50IHN1YmRldjsKIAl1bnNpZ25lZCBpbnQgY2hhbnNwZWM7CiAJdW5zaWduZWQgaW50IHVudXNlZFszXTsKLX0gY29tZWRpMzJfaW5zbjsKK307CiAKLXR5cGVkZWYgc3RydWN0IGNvbWVkaTMyX2luc25saXN0X3N0cnVjdCB7CitzdHJ1Y3QgY29tZWRpMzJfaW5zbmxpc3Rfc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgbl9pbnNuczsKLQljb21wYXRfdXB0cl90IGluc25zOwkJLyogMzItYml0ICdjb21lZGlfaW5zbiAqJyAqLwotfSBjb21lZGkzMl9pbnNubGlzdDsKKwljb21wYXRfdXB0cl90IGluc25zOwkJLyogMzItYml0ICdzdHJ1Y3QgY29tZWRpX2luc24gKicgKi8KK307CiAKIC8qIEhhbmRsZSB0cmFuc2xhdGVkIGlvY3RsLiAqLwogc3RhdGljIGludCB0cmFuc2xhdGVkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlpZiAoIWZpbGUtPmZfb3ApIHsKKwlpZiAoIWZpbGUtPmZfb3ApCiAJCXJldHVybiAtRU5PVFRZOwotCX0KKwogI2lmZGVmIEhBVkVfVU5MT0NLRURfSU9DVEwKIAlpZiAoZmlsZS0+Zl9vcC0+dW5sb2NrZWRfaW9jdGwpIHsKIAkJaW50IHJjID0gKGludCkoKmZpbGUtPmZfb3AtPnVubG9ja2VkX2lvY3RsKShmaWxlLCBjbWQsIGFyZyk7Ci0JCWlmIChyYyA9PSAtRU5PSU9DVExDTUQpIHsKKwkJaWYgKHJjID09IC1FTk9JT0NUTENNRCkKIAkJCXJjID0gLUVOT1RUWTsKLQkJfQogCQlyZXR1cm4gcmM7CiAJfQogI2VuZGlmCkBAIC0xMjQsOCArMTIzLDggQEAKIC8qIEhhbmRsZSAzMi1iaXQgQ09NRURJX0NIQU5JTkZPIGlvY3RsLiAqLwogc3RhdGljIGludCBjb21wYXRfY2hhbmluZm8oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWNvbWVkaV9jaGFuaW5mbyBfX3VzZXIgKmNoYW5pbmZvOwotCWNvbWVkaTMyX2NoYW5pbmZvIF9fdXNlciAqY2hhbmluZm8zMjsKKwlzdHJ1Y3QgY29tZWRpX2NoYW5pbmZvIF9fdXNlciAqY2hhbmluZm87CisJc3RydWN0IGNvbWVkaTMyX2NoYW5pbmZvX3N0cnVjdCBfX3VzZXIgKmNoYW5pbmZvMzI7CiAJaW50IGVycjsKIAl1bmlvbiB7CiAJCXVuc2lnbmVkIGludCB1aW50OwpAQCAtMTUwLDkgKzE0OSw4IEBACiAJZXJyIHw9IF9fcHV0X3VzZXIoY29tcGF0X3B0cih0ZW1wLnVwdHIpLCAmY2hhbmluZm8tPmZsYWdsaXN0KTsKIAllcnIgfD0gX19nZXRfdXNlcih0ZW1wLnVwdHIsICZjaGFuaW5mbzMyLT5yYW5nZWxpc3QpOwogCWVyciB8PSBfX3B1dF91c2VyKGNvbXBhdF9wdHIodGVtcC51cHRyKSwgJmNoYW5pbmZvLT5yYW5nZWxpc3QpOwotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9CiAKIAlyZXR1cm4gdHJhbnNsYXRlZF9pb2N0bChmaWxlLCBDT01FRElfQ0hBTklORk8sICh1bnNpZ25lZCBsb25nKWNoYW5pbmZvKTsKIH0KQEAgLTE2MCw4ICsxNTgsOCBAQAogLyogSGFuZGxlIDMyLWJpdCBDT01FRElfUkFOR0VJTkZPIGlvY3RsLiAqLwogc3RhdGljIGludCBjb21wYXRfcmFuZ2VpbmZvKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQljb21lZGlfcmFuZ2VpbmZvIF9fdXNlciAqcmFuZ2VpbmZvOwotCWNvbWVkaTMyX3JhbmdlaW5mbyBfX3VzZXIgKnJhbmdlaW5mbzMyOworCXN0cnVjdCBjb21lZGlfcmFuZ2VpbmZvIF9fdXNlciAqcmFuZ2VpbmZvOworCXN0cnVjdCBjb21lZGkzMl9yYW5nZWluZm9fc3RydWN0IF9fdXNlciAqcmFuZ2VpbmZvMzI7CiAJaW50IGVycjsKIAl1bmlvbiB7CiAJCXVuc2lnbmVkIGludCB1aW50OwpAQCAtMTgyLDE3ICsxODAsMTYgQEAKIAllcnIgfD0gX19wdXRfdXNlcih0ZW1wLnVpbnQsICZyYW5nZWluZm8tPnJhbmdlX3R5cGUpOwogCWVyciB8PSBfX2dldF91c2VyKHRlbXAudXB0ciwgJnJhbmdlaW5mbzMyLT5yYW5nZV9wdHIpOwogCWVyciB8PSBfX3B1dF91c2VyKGNvbXBhdF9wdHIodGVtcC51cHRyKSwgJnJhbmdlaW5mby0+cmFuZ2VfcHRyKTsKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQogCiAJcmV0dXJuIHRyYW5zbGF0ZWRfaW9jdGwoZmlsZSwgQ09NRURJX1JBTkdFSU5GTywKIAkJCSh1bnNpZ25lZCBsb25nKXJhbmdlaW5mbyk7CiB9CiAKIC8qIENvcHkgMzItYml0IGNtZCBzdHJ1Y3R1cmUgdG8gbmF0aXZlIGNtZCBzdHJ1Y3R1cmUuICovCi1zdGF0aWMgaW50IGdldF9jb21wYXRfY21kKGNvbWVkaV9jbWQgX191c2VyICpjbWQsCi0JCWNvbWVkaTMyX2NtZCBfX3VzZXIgKmNtZDMyKQorc3RhdGljIGludCBnZXRfY29tcGF0X2NtZChzdHJ1Y3QgY29tZWRpX2NtZCBfX3VzZXIgKmNtZCwKKwkJc3RydWN0IGNvbWVkaTMyX2NtZF9zdHJ1Y3QgX191c2VyICpjbWQzMikKIHsKIAlpbnQgZXJyOwogCXVuaW9uIHsKQEAgLTI0Miw3ICsyMzksNyBAQAogfQogCiAvKiBDb3B5IG5hdGl2ZSBjbWQgc3RydWN0dXJlIHRvIDMyLWJpdCBjbWQgc3RydWN0dXJlLiAqLwotc3RhdGljIGludCBwdXRfY29tcGF0X2NtZChjb21lZGkzMl9jbWQgX191c2VyICpjbWQzMiwgY29tZWRpX2NtZCBfX3VzZXIgKmNtZCkKK3N0YXRpYyBpbnQgcHV0X2NvbXBhdF9jbWQoc3RydWN0IGNvbWVkaTMyX2NtZF9zdHJ1Y3QgX191c2VyICpjbWQzMiwgc3RydWN0IGNvbWVkaV9jbWQgX191c2VyICpjbWQpCiB7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgdGVtcDsKQEAgLTI5MiwxNyArMjg5LDE2IEBACiAvKiBIYW5kbGUgMzItYml0IENPTUVESV9DTUQgaW9jdGwuICovCiBzdGF0aWMgaW50IGNvbXBhdF9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWNvbWVkaV9jbWQgX191c2VyICpjbWQ7Ci0JY29tZWRpMzJfY21kIF9fdXNlciAqY21kMzI7CisJc3RydWN0IGNvbWVkaV9jbWQgX191c2VyICpjbWQ7CisJc3RydWN0IGNvbWVkaTMyX2NtZF9zdHJ1Y3QgX191c2VyICpjbWQzMjsKIAlpbnQgcmM7CiAKIAljbWQzMiA9IGNvbXBhdF9wdHIoYXJnKTsKIAljbWQgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmNtZCkpOwogCiAJcmMgPSBnZXRfY29tcGF0X2NtZChjbWQsIGNtZDMyKTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCXJldHVybiByYzsKLQl9CiAKIAlyZXR1cm4gdHJhbnNsYXRlZF9pb2N0bChmaWxlLCBDT01FRElfQ01ELCAodW5zaWduZWQgbG9uZyljbWQpOwogfQpAQCAtMzEwLDMzICszMDYsMzEgQEAKIC8qIEhhbmRsZSAzMi1iaXQgQ09NRURJX0NNRFRFU1QgaW9jdGwuICovCiBzdGF0aWMgaW50IGNvbXBhdF9jbWR0ZXN0KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQljb21lZGlfY21kIF9fdXNlciAqY21kOwotCWNvbWVkaTMyX2NtZCBfX3VzZXIgKmNtZDMyOworCXN0cnVjdCBjb21lZGlfY21kIF9fdXNlciAqY21kOworCXN0cnVjdCBjb21lZGkzMl9jbWRfc3RydWN0IF9fdXNlciAqY21kMzI7CiAJaW50IHJjLCBlcnI7CiAKIAljbWQzMiA9IGNvbXBhdF9wdHIoYXJnKTsKIAljbWQgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2YoKmNtZCkpOwogCiAJcmMgPSBnZXRfY29tcGF0X2NtZChjbWQsIGNtZDMyKTsKLQlpZiAocmMpIHsKKwlpZiAocmMpCiAJCXJldHVybiByYzsKLQl9CiAKIAlyYyA9IHRyYW5zbGF0ZWRfaW9jdGwoZmlsZSwgQ09NRURJX0NNRFRFU1QsICh1bnNpZ25lZCBsb25nKWNtZCk7Ci0JaWYgKHJjIDwgMCkgeworCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKLQl9CiAKIAllcnIgPSBwdXRfY29tcGF0X2NtZChjbWQzMiwgY21kKTsKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJcmMgPSBlcnI7Ci0JfQorCiAJcmV0dXJuIHJjOwogfQogCiAvKiBDb3B5IDMyLWJpdCBpbnNuIHN0cnVjdHVyZSB0byBuYXRpdmUgaW5zbiBzdHJ1Y3R1cmUuICovCi1zdGF0aWMgaW50IGdldF9jb21wYXRfaW5zbihjb21lZGlfaW5zbiBfX3VzZXIgKmluc24sCi0JCWNvbWVkaTMyX2luc24gX191c2VyICppbnNuMzIpCitzdGF0aWMgaW50IGdldF9jb21wYXRfaW5zbihzdHJ1Y3QgY29tZWRpX2luc24gX191c2VyICppbnNuLAorCQlzdHJ1Y3QgY29tZWRpMzJfaW5zbl9zdHJ1Y3QgX191c2VyICppbnNuMzIpCiB7CiAJaW50IGVycjsKIAl1bmlvbiB7CkBAIC0zNDcsOSArMzQxLDkgQEAKIAkvKiBDb3B5IGluc24gc3RydWN0dXJlLiAgSWdub3JlIHRoZSB1bnVzZWQgbWVtYmVycy4gKi8KIAllcnIgPSAwOwogCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBpbnNuMzIsIHNpemVvZigqaW5zbjMyKSkKLQkJCXx8ICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBpbnNuLCBzaXplb2YoKmluc24pKSkgeworCQkJfHwgIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGluc24sIHNpemVvZigqaW5zbikpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9CisKIAllcnIgfD0gX19nZXRfdXNlcih0ZW1wLnVpbnQsICZpbnNuMzItPmluc24pOwogCWVyciB8PSBfX3B1dF91c2VyKHRlbXAudWludCwgJmluc24tPmluc24pOwogCWVyciB8PSBfX2dldF91c2VyKHRlbXAudWludCwgJmluc24zMi0+bik7CkBAIC0zNjcsMTEgKzM2MSwxMSBAQAogc3RhdGljIGludCBjb21wYXRfaW5zbmxpc3Qoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBjb21iaW5lZF9pbnNubGlzdCB7Ci0JCWNvbWVkaV9pbnNubGlzdCBpbnNubGlzdDsKLQkJY29tZWRpX2luc24gaW5zblsxXTsKKwkJc3RydWN0IGNvbWVkaV9pbnNubGlzdCBpbnNubGlzdDsKKwkJc3RydWN0IGNvbWVkaV9pbnNuIGluc25bMV07CiAJfSBfX3VzZXIgKnM7Ci0JY29tZWRpMzJfaW5zbmxpc3QgX191c2VyICppbnNubGlzdDMyOwotCWNvbWVkaTMyX2luc24gX191c2VyICppbnNuMzI7CisJc3RydWN0IGNvbWVkaTMyX2luc25saXN0X3N0cnVjdCBfX3VzZXIgKmluc25saXN0MzI7CisJc3RydWN0IGNvbWVkaTMyX2luc25fc3RydWN0IF9fdXNlciAqaW5zbjMyOwogCWNvbXBhdF91cHRyX3QgdXB0cjsKIAl1bnNpZ25lZCBpbnQgbl9pbnNucywgbjsKIAlpbnQgZXJyLCByYzsKQEAgLTM4Niw5ICszODAsOCBAQAogCWVyciB8PSBfX2dldF91c2VyKG5faW5zbnMsICZpbnNubGlzdDMyLT5uX2luc25zKTsKIAllcnIgfD0gX19nZXRfdXNlcih1cHRyLCAmaW5zbmxpc3QzMi0+aW5zbnMpOwogCWluc24zMiA9IGNvbXBhdF9wdHIodXB0cik7Ci0JaWYgKGVycikgeworCWlmIChlcnIpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KIAogCS8qIEFsbG9jYXRlIHVzZXIgbWVtb3J5IHRvIGNvcHkgaW5zbmxpc3QgYW5kIGluc25zIGludG8uICovCiAJcyA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKG9mZnNldG9mKHN0cnVjdCBjb21iaW5lZF9pbnNubGlzdCwKQEAgLTQwMCwxNiArMzkzLDE0IEBACiAJfQogCWVyciB8PSBfX3B1dF91c2VyKG5faW5zbnMsICZzLT5pbnNubGlzdC5uX2luc25zKTsKIAllcnIgfD0gX19wdXRfdXNlcigmcy0+aW5zblswXSwgJnMtPmluc25saXN0Lmluc25zKTsKLQlpZiAoZXJyKSB7CisJaWYgKGVycikKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQogCiAJLyogQ29weSBpbnNuIHN0cnVjdHVyZXMuICovCiAJZm9yIChuID0gMDsgbiA8IG5faW5zbnM7IG4rKykgewogCQlyYyA9IGdldF9jb21wYXRfaW5zbigmcy0+aW5zbltuXSwgJmluc24zMltuXSk7Ci0JCWlmIChyYykgeworCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gdHJhbnNsYXRlZF9pb2N0bChmaWxlLCBDT01FRElfSU5TTkxJU1QsCkBAIC00MTksMTcgKzQxMCwxNiBAQAogLyogSGFuZGxlIDMyLWJpdCBDT01FRElfSU5TTiBpb2N0bC4gKi8KIHN0YXRpYyBpbnQgY29tcGF0X2luc24oc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWNvbWVkaV9pbnNuIF9fdXNlciAqaW5zbjsKLQljb21lZGkzMl9pbnNuIF9fdXNlciAqaW5zbjMyOworCXN0cnVjdCBjb21lZGlfaW5zbiBfX3VzZXIgKmluc247CisJc3RydWN0IGNvbWVkaTMyX2luc25fc3RydWN0IF9fdXNlciAqaW5zbjMyOwogCWludCByYzsKIAogCWluc24zMiA9IGNvbXBhdF9wdHIoYXJnKTsKIAlpbnNuID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCppbnNuKSk7CiAKIAlyYyA9IGdldF9jb21wYXRfaW5zbihpbnNuLCBpbnNuMzIpOwotCWlmIChyYykgeworCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCX0KIAogCXJldHVybiB0cmFuc2xhdGVkX2lvY3RsKGZpbGUsIENPTUVESV9JTlNOLCAodW5zaWduZWQgbG9uZylpbnNuKTsKIH0KQEAgLTUxMiwxNCArNTAyLDE0IEBACiAJaW50IHJjOwogCiAJLyogTWFrZSBzdXJlIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBDb21lZGkgZGV2aWNlLiAqLwotCWlmIChpbWFqb3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpICE9IENPTUVESV9NQUpPUikgeworCWlmIChpbWFqb3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpICE9IENPTUVESV9NQUpPUikKIAkJcmV0dXJuIC1FTk9UVFk7Ci0JfQorCiAJcmMgPSByYXdfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCS8qIERvIG5vdCByZXR1cm4gLUVOT0lPQ1RMQ01ELiAqLwotCWlmIChyYyA9PSAtRU5PSU9DVExDTUQpIHsKKwlpZiAocmMgPT0gLUVOT0lPQ1RMQ01EKQogCQlyYyA9IC1FTk9UVFk7Ci0JfQorCiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKaW5kZXggMDE4Yzk2NC4uMTlkY2UyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYwpAQCAtNTksMzMgKzU5LDM5IEBACiBtb2R1bGVfcGFyYW0oY29tZWRpX2RlYnVnLCBpbnQsIDA2NDQpOwogI2VuZGlmCiAKK2ludCBjb21lZGlfYXV0b2NvbmZpZyA9IDE7Cittb2R1bGVfcGFyYW0oY29tZWRpX2F1dG9jb25maWcsIGJvb2wsIDA0NDQpOworCitpbnQgY29tZWRpX251bV9sZWdhY3lfbWlub3JzID0gMDsKK21vZHVsZV9wYXJhbShjb21lZGlfbnVtX2xlZ2FjeV9taW5vcnMsIGludCwgMDQ0NCk7CisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29tZWRpX2ZpbGVfaW5mb190YWJsZV9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8KICAgICAqY29tZWRpX2ZpbGVfaW5mb190YWJsZVtDT01FRElfTlVNX01JTk9SU107CiAKLXN0YXRpYyBpbnQgZG9fZGV2Y29uZmlnX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqYXJnKTsKLXN0YXRpYyBpbnQgZG9fYnVmY29uZmlnX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnKTsKLXN0YXRpYyBpbnQgZG9fZGV2aW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZpbmZvICphcmcsCitzdGF0aWMgaW50IGRvX2RldmNvbmZpZ19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqYXJnKTsKK3N0YXRpYyBpbnQgZG9fYnVmY29uZmlnX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZyk7CitzdGF0aWMgaW50IGRvX2RldmluZm9faW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZpbmZvICphcmcsCiAJCQkgICAgc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIGludCBkb19zdWJkaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkaW5mbyAqYXJnLAorc3RhdGljIGludCBkb19zdWJkaW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRpbmZvICphcmcsCiAJCQkgICAgIHZvaWQgKmZpbGUpOwotc3RhdGljIGludCBkb19jaGFuaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9jaGFuaW5mbyAqYXJnKTsKLXN0YXRpYyBpbnQgZG9fYnVmaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZyk7Ci1zdGF0aWMgaW50IGRvX2NtZF9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSk7Ci1zdGF0aWMgaW50IGRvX2xvY2tfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKTsKLXN0YXRpYyBpbnQgZG9fdW5sb2NrX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSk7Ci1zdGF0aWMgaW50IGRvX2NhbmNlbF9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpOwotc3RhdGljIGludCBkb19jbWR0ZXN0X2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKTsKLXN0YXRpYyBpbnQgZG9faW5zbmxpc3RfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpOwotc3RhdGljIGludCBkb19pbnNuX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKTsKLXN0YXRpYyBpbnQgZG9fcG9sbF9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBzdWJkLCB2b2lkICpmaWxlKTsKK3N0YXRpYyBpbnQgZG9fY2hhbmluZm9faW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9jaGFuaW5mbyAqYXJnKTsKK3N0YXRpYyBpbnQgZG9fYnVmaW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcpOworc3RhdGljIGludCBkb19jbWRfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKTsKK3N0YXRpYyBpbnQgZG9fbG9ja19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKTsKK3N0YXRpYyBpbnQgZG9fdW5sb2NrX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpOworc3RhdGljIGludCBkb19jYW5jZWxfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSk7CitzdGF0aWMgaW50IGRvX2NtZHRlc3RfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKTsKK3N0YXRpYyBpbnQgZG9faW5zbmxpc3RfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKTsKK3N0YXRpYyBpbnQgZG9faW5zbl9pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpOworc3RhdGljIGludCBkb19wb2xsX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBzdWJkLCB2b2lkICpmaWxlKTsKIAotZXh0ZXJuIHZvaWQgZG9fYmVjb21lX25vbmJ1c3koY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKTsKLXN0YXRpYyBpbnQgZG9fY2FuY2VsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcyk7CitleHRlcm4gdm9pZCBkb19iZWNvbWVfbm9uYnVzeShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitzdGF0aWMgaW50IGRvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CiAKIHN0YXRpYyBpbnQgY29tZWRpX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pOwogCi1zdGF0aWMgaW50IGlzX2RldmljZV9idXN5KGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGlzX2RldmljZV9idXN5KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogCiAjaWZkZWYgSEFWRV9VTkxPQ0tFRF9JT0NUTAogc3RhdGljIGxvbmcgY29tZWRpX3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLApAQCAtOTgsOSArMTA0LDEzIEBACiAJY29uc3QgdW5zaWduZWQgbWlub3IgPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9CiAJICAgIGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhtaW5vcik7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXY7CiAJaW50IHJjOwogCisJaWYgKGRldl9maWxlX2luZm8gPT0gTlVMTCB8fCBkZXZfZmlsZV9pbmZvLT5kZXZpY2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOworCiAJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CiAKIAkvKiBEZXZpY2UgY29uZmlnIGlzIHNwZWNpYWwsIGJlY2F1c2UgaXQgbXVzdCB3b3JrIG9uCkBAIC0xODIsOSArMTkyLDkgQEAKIAl3cml0ZXM6CiAJCW5vbmUKICovCi1zdGF0aWMgaW50IGRvX2RldmNvbmZpZ19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKmFyZykKK3N0YXRpYyBpbnQgZG9fZGV2Y29uZmlnX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICphcmcpCiB7Ci0JY29tZWRpX2RldmNvbmZpZyBpdDsKKwlzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyBpdDsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgKmF1eF9kYXRhID0gTlVMTDsKIAlpbnQgYXV4X2xlbjsKQEAgLTIwMyw3ICsyMTMsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJml0LCBhcmcsIHNpemVvZihjb21lZGlfZGV2Y29uZmlnKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZpdCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9kZXZjb25maWcpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpdC5ib2FyZF9uYW1lW0NPTUVESV9OQU1FTEVOIC0gMV0gPSAwOwpAQCAtMjYyLDE0ICsyNzIsMTQgQEAKIAkJbW9kaWZpZWQgYnVmY29uZmlnIGF0IGFyZwogCiAqLwotc3RhdGljIGludCBkb19idWZjb25maWdfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcpCitzdGF0aWMgaW50IGRvX2J1ZmNvbmZpZ19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcpCiB7Ci0JY29tZWRpX2J1ZmNvbmZpZyBiYzsKLQljb21lZGlfYXN5bmMgKmFzeW5jOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9idWZjb25maWcgYmM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJmJjLCBhcmcsIHNpemVvZihjb21lZGlfYnVmY29uZmlnKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZiYywgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9idWZjb25maWcpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoYmMuc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzIHx8IGJjLnN1YmRldmljZSA8IDApCkBAIC0zMzAsNyArMzQwLDcgQEAKIAliYy5tYXhpbXVtX3NpemUgPSBhc3luYy0+bWF4X2J1ZnNpemU7CiAKIGNvcHliYWNrOgotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYmMsIHNpemVvZihjb21lZGlfYnVmY29uZmlnKSkpCisJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZiYywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfYnVmY29uZmlnKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CkBAIC0zNTAsMTYgKzM2MCwxNiBAQAogCQlkZXZpbmZvIHN0cnVjdHVyZQogCiAqLwotc3RhdGljIGludCBkb19kZXZpbmZvX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmluZm8gKmFyZywKK3N0YXRpYyBpbnQgZG9fZGV2aW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmluZm8gKmFyZywKIAkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljb21lZGlfZGV2aW5mbyBkZXZpbmZvOworCXN0cnVjdCBjb21lZGlfZGV2aW5mbyBkZXZpbmZvOwogCWNvbnN0IHVuc2lnbmVkIG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmRldl9maWxlX2luZm8gPQogCSAgICBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwotCWNvbWVkaV9zdWJkZXZpY2UgKnJlYWRfc3ViZGV2ID0KKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcmVhZF9zdWJkZXYgPQogCSAgICBjb21lZGlfZ2V0X3JlYWRfc3ViZGV2aWNlKGRldl9maWxlX2luZm8pOwotCWNvbWVkaV9zdWJkZXZpY2UgKndyaXRlX3N1YmRldiA9CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKndyaXRlX3N1YmRldiA9CiAJICAgIGNvbWVkaV9nZXRfd3JpdGVfc3ViZGV2aWNlKGRldl9maWxlX2luZm8pOwogCiAJbWVtc2V0KCZkZXZpbmZvLCAwLCBzaXplb2YoZGV2aW5mbykpOwpAQCAtMzgwLDcgKzM5MCw3IEBACiAJZWxzZQogCQlkZXZpbmZvLndyaXRlX3N1YmRldmljZSA9IC0xOwogCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZkZXZpbmZvLCBzaXplb2YoY29tZWRpX2RldmluZm8pKSkKKwlpZiAoY29weV90b191c2VyKGFyZywgJmRldmluZm8sIHNpemVvZihzdHJ1Y3QgY29tZWRpX2RldmluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKQEAgLTQwMCwxNCArNDEwLDE0IEBACiAJCWFycmF5IG9mIHN1YmRldmljZSBpbmZvIHN0cnVjdHVyZXMgYXQgYXJnCiAKICovCi1zdGF0aWMgaW50IGRvX3N1YmRpbmZvX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRpbmZvICphcmcsCitzdGF0aWMgaW50IGRvX3N1YmRpbmZvX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGluZm8gKmFyZywKIAkJCSAgICAgdm9pZCAqZmlsZSkKIHsKIAlpbnQgcmV0LCBpOwotCWNvbWVkaV9zdWJkaW5mbyAqdG1wLCAqdXM7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRpbmZvICp0bXAsICp1czsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAotCXRtcCA9IGtjYWxsb2MoZGV2LT5uX3N1YmRldmljZXMsIHNpemVvZihjb21lZGlfc3ViZGluZm8pLCBHRlBfS0VSTkVMKTsKKwl0bXAgPSBrY2FsbG9jKGRldi0+bl9zdWJkZXZpY2VzLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9zdWJkaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghdG1wKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNDU5LDcgKzQ2OSw3IEBACiAJfQogCiAJcmV0ID0gY29weV90b191c2VyKGFyZywgdG1wLAotCQkJICAgZGV2LT5uX3N1YmRldmljZXMgKiBzaXplb2YoY29tZWRpX3N1YmRpbmZvKSk7CisJCQkgICBkZXYtPm5fc3ViZGV2aWNlcyAqIHNpemVvZihzdHJ1Y3QgY29tZWRpX3N1YmRpbmZvKSk7CiAKIAlrZnJlZSh0bXApOwogCkBAIC00ODAsMTIgKzQ5MCwxMiBAQAogCQlhcnJheXMgYXQgZWxlbWVudHMgb2YgY2hhbmluZm8gc3RydWN0dXJlCiAKICovCi1zdGF0aWMgaW50IGRvX2NoYW5pbmZvX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2NoYW5pbmZvICphcmcpCitzdGF0aWMgaW50IGRvX2NoYW5pbmZvX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfY2hhbmluZm8gKmFyZykKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOwotCWNvbWVkaV9jaGFuaW5mbyBpdDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2NoYW5pbmZvIGl0OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZpdCwgYXJnLCBzaXplb2YoY29tZWRpX2NoYW5pbmZvKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZpdCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9jaGFuaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChpdC5zdWJkZXYgPj0gZGV2LT5uX3N1YmRldmljZXMpCkBAIC00OTYsNyArNTA2LDcgQEAKIAkJaWYgKHMtPm1heGRhdGEgfHwgIXMtPm1heGRhdGFfbGlzdCkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZiAoY29weV90b191c2VyKGl0Lm1heGRhdGFfbGlzdCwgcy0+bWF4ZGF0YV9saXN0LAotCQkJCSBzLT5uX2NoYW4gKiBzaXplb2YobHNhbXBsX3QpKSkKKwkJCQkgcy0+bl9jaGFuICogc2l6ZW9mKHVuc2lnbmVkIGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC01NDQsMTMgKzU1NCwxMyBAQAogICAgIG1vZGlmaWVkIGJ1ZmluZm8gYXQgYXJnCiAKICAgKi8KLXN0YXRpYyBpbnQgZG9fYnVmaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgZG9fYnVmaW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcpCiB7Ci0JY29tZWRpX2J1ZmluZm8gYmk7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfYnVmaW5mbyBiaTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmYmksIGFyZywgc2l6ZW9mKGNvbWVkaV9idWZpbmZvKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZiaSwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9idWZpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKGJpLnN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcyB8fCBiaS5zdWJkZXZpY2UgPCAwKQpAQCAtNTkxLDEzICs2MDEsMTMgQEAKIAliaS5idWZfcmVhZF9wdHIgPSBhc3luYy0+YnVmX3JlYWRfcHRyOwogCiBjb3B5YmFjazoKLQlpZiAoY29weV90b191c2VyKGFyZywgJmJpLCBzaXplb2YoY29tZWRpX2J1ZmluZm8pKSkKKwlpZiAoY29weV90b191c2VyKGFyZywgJmJpLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9idWZpbmZvKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcGFyc2VfaW5zbihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSwKK3N0YXRpYyBpbnQgcGFyc2VfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSwKIAkJICAgICAgdm9pZCAqZmlsZSk7CiAvKgogICogCUNPTUVESV9JTlNOTElTVApAQCAtNjE2LDI1ICs2MjYsMjUgQEAKICAqLwogLyogYXJiaXRyYXJ5IGxpbWl0cyAqLwogI2RlZmluZSBNQVhfU0FNUExFUyAyNTYKLXN0YXRpYyBpbnQgZG9faW5zbmxpc3RfaW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpCitzdGF0aWMgaW50IGRvX2luc25saXN0X2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSkKIHsKLQljb21lZGlfaW5zbmxpc3QgaW5zbmxpc3Q7Ci0JY29tZWRpX2luc24gKmluc25zID0gTlVMTDsKLQlsc2FtcGxfdCAqZGF0YSA9IE5VTEw7CisJc3RydWN0IGNvbWVkaV9pbnNubGlzdCBpbnNubGlzdDsKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc25zID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgKmRhdGEgPSBOVUxMOwogCWludCBpID0gMDsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zbmxpc3QsIGFyZywgc2l6ZW9mKGNvbWVkaV9pbnNubGlzdCkpKQorCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zbmxpc3QsIGFyZywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfaW5zbmxpc3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlkYXRhID0ga21hbGxvYyhzaXplb2YobHNhbXBsX3QpICogTUFYX1NBTVBMRVMsIEdGUF9LRVJORUwpOworCWRhdGEgPSBrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBpbnQpICogTUFYX1NBTVBMRVMsIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkgewogCQlEUFJJTlRLKCJrbWFsbG9jIGZhaWxlZFxuIik7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JaW5zbnMgPSBrbWFsbG9jKHNpemVvZihjb21lZGlfaW5zbikgKiBpbnNubGlzdC5uX2luc25zLCBHRlBfS0VSTkVMKTsKKwlpbnNucyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21lZGlfaW5zbikgKiBpbnNubGlzdC5uX2luc25zLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluc25zKSB7CiAJCURQUklOVEsoImttYWxsb2MgZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTY0Miw3ICs2NTIsNyBAQAogCX0KIAogCWlmIChjb3B5X2Zyb21fdXNlcihpbnNucywgaW5zbmxpc3QuaW5zbnMsCi0JCQkgICBzaXplb2YoY29tZWRpX2luc24pICogaW5zbmxpc3Qubl9pbnNucykpIHsKKwkJCSAgIHNpemVvZihzdHJ1Y3QgY29tZWRpX2luc24pICogaW5zbmxpc3Qubl9pbnNucykpIHsKIAkJRFBSSU5USygiY29weV9mcm9tX3VzZXIgZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBlcnJvcjsKQEAgLTY1Niw3ICs2NjYsNyBAQAogCQl9CiAJCWlmIChpbnNuc1tpXS5pbnNuICYgSU5TTl9NQVNLX1dSSVRFKSB7CiAJCQlpZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgaW5zbnNbaV0uZGF0YSwKLQkJCQkJICAgaW5zbnNbaV0ubiAqIHNpemVvZihsc2FtcGxfdCkpKSB7CisJCQkJCSAgIGluc25zW2ldLm4gKiBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKIAkJCQlEUFJJTlRLKCJjb3B5X2Zyb21fdXNlciBmYWlsZWRcbiIpOwogCQkJCXJldCA9IC1FRkFVTFQ7CiAJCQkJZ290byBlcnJvcjsKQEAgLTY2Nyw3ICs2NzcsNyBAQAogCQkJZ290byBlcnJvcjsKIAkJaWYgKGluc25zW2ldLmluc24gJiBJTlNOX01BU0tfUkVBRCkgewogCQkJaWYgKGNvcHlfdG9fdXNlcihpbnNuc1tpXS5kYXRhLCBkYXRhLAotCQkJCQkgaW5zbnNbaV0ubiAqIHNpemVvZihsc2FtcGxfdCkpKSB7CisJCQkJCSBpbnNuc1tpXS5uICogc2l6ZW9mKHVuc2lnbmVkIGludCkpKSB7CiAJCQkJRFBSSU5USygiY29weV90b191c2VyIGZhaWxlZFxuIik7CiAJCQkJcmV0ID0gLUVGQVVMVDsKIAkJCQlnb3RvIGVycm9yOwpAQCAtNjg2LDcgKzY5Niw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfaW5zbl9jb25maWdfbGVuZ3RoKGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgY2hlY2tfaW5zbl9jb25maWdfbGVuZ3RoKHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWlmIChpbnNuLT5uIDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NDcsMTAgKzc1NywxMCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHBhcnNlX2luc24oY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEsCitzdGF0aWMgaW50IHBhcnNlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEsCiAJCSAgICAgIHZvaWQgKmZpbGUpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaTsKIApAQCAtODE1LDcgKzgyNSw3IEBACiAJCX0KIAl9IGVsc2UgewogCQkvKiBhIHN1YmRldmljZSBpbnN0cnVjdGlvbiAqLwotCQlsc2FtcGxfdCBtYXhkYXRhOworCQl1bnNpZ25lZCBpbnQgbWF4ZGF0YTsKIAogCQlpZiAoaW5zbi0+c3ViZGV2ID49IGRldi0+bl9zdWJkZXZpY2VzKSB7CiAJCQlEUFJJTlRLKCJzdWJkZXZpY2UgJWQgb3V0IG9mIHJhbmdlXG4iLCBpbnNuLT5zdWJkZXYpOwpAQCAtOTAxLDI1ICs5MTEsMjUgQEAKICAqIAkJcG9pbnRlciB0byBpbnNuCiAgKgogICogCXJlYWRzOgotICogCQljb21lZGlfaW5zbiBzdHJ1Y3QgYXQgYXJnCisgKiAJCXN0cnVjdCBjb21lZGlfaW5zbiBzdHJ1Y3QgYXQgYXJnCiAgKiAJCWRhdGEgKGZvciB3cml0ZXMpCiAgKgogICogCXdyaXRlczoKICAqIAkJZGF0YSAoZm9yIHJlYWRzKQogICovCi1zdGF0aWMgaW50IGRvX2luc25faW9jdGwoY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpCitzdGF0aWMgaW50IGRvX2luc25faW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKQogewotCWNvbWVkaV9pbnNuIGluc247Ci0JbHNhbXBsX3QgKmRhdGEgPSBOVUxMOworCXN0cnVjdCBjb21lZGlfaW5zbiBpbnNuOworCXVuc2lnbmVkIGludCAqZGF0YSA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAKLQlkYXRhID0ga21hbGxvYyhzaXplb2YobHNhbXBsX3QpICogTUFYX1NBTVBMRVMsIEdGUF9LRVJORUwpOworCWRhdGEgPSBrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBpbnQpICogTUFYX1NBTVBMRVMsIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zbiwgYXJnLCBzaXplb2YoY29tZWRpX2luc24pKSkgeworCWlmIChjb3B5X2Zyb21fdXNlcigmaW5zbiwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9pbnNuKSkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC05MjgsNyArOTM4LDcgQEAKIAlpZiAoaW5zbi5uID4gTUFYX1NBTVBMRVMpCiAJCWluc24ubiA9IE1BWF9TQU1QTEVTOwogCWlmIChpbnNuLmluc24gJiBJTlNOX01BU0tfV1JJVEUpIHsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIGluc24uZGF0YSwgaW5zbi5uICogc2l6ZW9mKGxzYW1wbF90KSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIGluc24uZGF0YSwgaW5zbi5uICogc2l6ZW9mKHVuc2lnbmVkIGludCkpKSB7CiAJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtOTM3LDcgKzk0Nyw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3I7CiAJaWYgKGluc24uaW5zbiAmIElOU05fTUFTS19SRUFEKSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIoaW5zbi5kYXRhLCBkYXRhLCBpbnNuLm4gKiBzaXplb2YobHNhbXBsX3QpKSkgeworCQlpZiAoY29weV90b191c2VyKGluc24uZGF0YSwgZGF0YSwgaW5zbi5uICogc2l6ZW9mKHVuc2lnbmVkIGludCkpKSB7CiAJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtOTY1LDE1ICs5NzUsMTUgQEAKIAkJbW9kaWZpZWQgY21kIHN0cnVjdHVyZSBhdCBhcmcKIAogKi8KLXN0YXRpYyBpbnQgZG9fY21kX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKQorc3RhdGljIGludCBkb19jbWRfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdm9pZCAqYXJnLCB2b2lkICpmaWxlKQogewotCWNvbWVkaV9jbWQgdXNlcl9jbWQ7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kIHVzZXJfY21kOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGludCAqY2hhbmxpc3Rfc2F2ZXIgPSBOVUxMOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX2NtZCwgYXJnLCBzaXplb2YoY29tZWRpX2NtZCkpKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX2NtZCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9jbWQpKSkgewogCQlEUFJJTlRLKCJiYWQgY21kIGFkZHJlc3NcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC0xMDYyLDcgKzEwNzIsNyBAQAogCQkvKiByZXN0b3JlIGNoYW5saXN0IHBvaW50ZXIgYmVmb3JlIGNvcHlpbmcgYmFjayAqLwogCQl1c2VyX2NtZC5jaGFubGlzdCA9IGNoYW5saXN0X3NhdmVyOwogCQl1c2VyX2NtZC5kYXRhID0gTlVMTDsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ1c2VyX2NtZCwgc2l6ZW9mKGNvbWVkaV9jbWQpKSkgeworCQlpZiAoY29weV90b191c2VyKGFyZywgJnVzZXJfY21kLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9jbWQpKSkgewogCQkJRFBSSU5USygiZmF1bHQgd3JpdGluZyBjbWRcbiIpOwogCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWdvdG8gY2xlYW51cDsKQEAgLTExMTksMTUgKzExMjksMTUgQEAKIAkJbW9kaWZpZWQgY21kIHN0cnVjdHVyZSBhdCBhcmcKIAogKi8KLXN0YXRpYyBpbnQgZG9fY21kdGVzdF9pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHZvaWQgKmFyZywgdm9pZCAqZmlsZSkKK3N0YXRpYyBpbnQgZG9fY21kdGVzdF9pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB2b2lkICphcmcsIHZvaWQgKmZpbGUpCiB7Ci0JY29tZWRpX2NtZCB1c2VyX2NtZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfY21kIHVzZXJfY21kOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGludCAqY2hhbmxpc3QgPSBOVUxMOwogCXVuc2lnbmVkIGludCAqY2hhbmxpc3Rfc2F2ZXIgPSBOVUxMOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX2NtZCwgYXJnLCBzaXplb2YoY29tZWRpX2NtZCkpKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX2NtZCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9jbWQpKSkgewogCQlEUFJJTlRLKCJiYWQgY21kIGFkZHJlc3NcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC0xMTkxLDcgKzEyMDEsNyBAQAogCS8qIHJlc3RvcmUgY2hhbmxpc3QgcG9pbnRlciBiZWZvcmUgY29weWluZyBiYWNrICovCiAJdXNlcl9jbWQuY2hhbmxpc3QgPSBjaGFubGlzdF9zYXZlcjsKIAotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdXNlcl9jbWQsIHNpemVvZihjb21lZGlfY21kKSkpIHsKKwlpZiAoY29weV90b191c2VyKGFyZywgJnVzZXJfY21kLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9jbWQpKSkgewogCQlEUFJJTlRLKCJiYWQgY21kIGFkZHJlc3NcbiIpOwogCQlyZXQgPSAtRUZBVUxUOwogCQlnb3RvIGNsZWFudXA7CkBAIC0xMjE3LDExICsxMjI3LDExIEBACiAKICovCiAKLXN0YXRpYyBpbnQgZG9fbG9ja19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpCitzdGF0aWMgaW50IGRvX2xvY2tfaW9jdGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpZiAoYXJnID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyNjEsOSArMTI3MSw5IEBACiAJVGhpcyBmdW5jdGlvbiBpc24ndCBwcm90ZWN0ZWQgYnkgdGhlIHNlbWFwaG9yZSwgc2luY2UKIAl3ZSBhbHJlYWR5IG93biB0aGUgbG9jay4KICovCi1zdGF0aWMgaW50IGRvX3VubG9ja19pb2N0bChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpCitzdGF0aWMgaW50IGRvX3VubG9ja19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpZiAoYXJnID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMDEsOSArMTMxMSw5IEBACiAJCW5vdGhpbmcKIAogKi8KLXN0YXRpYyBpbnQgZG9fY2FuY2VsX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSkKK3N0YXRpYyBpbnQgZG9fY2FuY2VsX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBhcmcsIHZvaWQgKmZpbGUpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCWlmIChhcmcgPj0gZGV2LT5uX3N1YmRldmljZXMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMzNyw5ICsxMzQ3LDkgQEAKIAkJbm90aGluZwogCiAqLwotc3RhdGljIGludCBkb19wb2xsX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGFyZywgdm9pZCAqZmlsZSkKK3N0YXRpYyBpbnQgZG9fcG9sbF9pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYXJnLCB2b2lkICpmaWxlKQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpZiAoYXJnID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzNjAsNyArMTM3MCw3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgZG9fY2FuY2VsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgZG9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCWludCByZXQgPSAwOwogCkBAIC0xMzc0LDggKzEzODQsOCBAQAogCiB2b2lkIGNvbWVkaV91bm1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpCiB7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKLQljb21lZGlfZGV2aWNlICpkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldjsKIAogCWFzeW5jID0gYXJlYS0+dm1fcHJpdmF0ZV9kYXRhOwogCWRldiA9IGFzeW5jLT5zdWJkZXZpY2UtPmRldmljZTsKQEAgLTEzOTQsMTQgKzE0MDQsMTQgQEAKIAljb25zdCB1bnNpZ25lZCBtaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvID0KIAkgICAgY29tZWRpX2dldF9kZXZpY2VfZmlsZV9pbmZvKG1pbm9yKTsKLQljb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7Ci0JY29tZWRpX2FzeW5jICphc3luYyA9IE5VTEw7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCWludCBuX3BhZ2VzOwogCWludCBpOwogCWludCByZXR2YWw7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwogCWlmICghZGV2LT5hdHRhY2hlZCkgewpAQCAtMTQ3MCw5ICsxNDgwLDkgQEAKIAljb25zdCB1bnNpZ25lZCBtaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvID0KIAkgICAgY29tZWRpX2dldF9kZXZpY2VfZmlsZV9pbmZvKG1pbm9yKTsKLQljb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7Ci0JY29tZWRpX3N1YmRldmljZSAqcmVhZF9zdWJkZXY7Ci0JY29tZWRpX3N1YmRldmljZSAqd3JpdGVfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICp3cml0ZV9zdWJkZXY7CiAKIAltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAlpZiAoIWRldi0+YXR0YWNoZWQpIHsKQEAgLTE1MTMsMTQgKzE1MjMsMTQgQEAKIHN0YXRpYyBzc2l6ZV90IGNvbWVkaV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLAogCQkJICAgIGxvZmZfdCAqb2Zmc2V0KQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7Ci0JY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAlpbnQgbiwgbSwgY291bnQgPSAwLCByZXR2YWwgPSAwOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCWNvbnN0IHVuc2lnbmVkIG1pbm9yID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmRldl9maWxlX2luZm8gPQogCSAgICBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwotCWNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOwogCiAJaWYgKCFkZXYtPmF0dGFjaGVkKSB7CiAJCURQUklOVEsoIm5vIGRyaXZlciBjb25maWd1cmVkIG9uIGNvbWVkaSVpXG4iLCBkZXYtPm1pbm9yKTsKQEAgLTE2MTUsMTQgKzE2MjUsMTQgQEAKIHN0YXRpYyBzc2l6ZV90IGNvbWVkaV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsCiAJCQkgICBsb2ZmX3QgKm9mZnNldCkKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAJaW50IG4sIG0sIGNvdW50ID0gMCwgcmV0dmFsID0gMDsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAljb25zdCB1bnNpZ25lZCBtaW5vciA9IGltaW5vcihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSk7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvID0KIAkgICAgY29tZWRpX2dldF9kZXZpY2VfZmlsZV9pbmZvKG1pbm9yKTsKLQljb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKIAogCWlmICghZGV2LT5hdHRhY2hlZCkgewogCQlEUFJJTlRLKCJubyBkcml2ZXIgY29uZmlndXJlZCBvbiBjb21lZGklaVxuIiwgZGV2LT5taW5vcik7CkBAIC0xNzIzLDkgKzE3MzMsOSBAQAogLyoKICAgIFRoaXMgZnVuY3Rpb24gcmVzdG9yZXMgYSBzdWJkZXZpY2UgdG8gYW4gaWRsZSBzdGF0ZS4KICAqLwotdm9pZCBkb19iZWNvbWVfbm9uYnVzeShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCit2b2lkIGRvX2JlY29tZV9ub25idXN5KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewotCWNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwogCiAJY29tZWRpX3NldF9zdWJkZXZpY2VfcnVuZmxhZ3MocywgU1JGX1JVTk5JTkcsIDApOwogI2lmZGVmIENPTkZJR19DT01FRElfUlQKQEAgLTE3NDcsMTEgKzE3NTcsMTEgQEAKIAogc3RhdGljIGludCBjb21lZGlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQljaGFyIG1vZFszMl07CiAJY29uc3QgdW5zaWduZWQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9CiAJICAgIGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhtaW5vcik7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvID8gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlIDogTlVMTDsKKwogCWlmIChkZXYgPT0gTlVMTCkgewogCQlEUFJJTlRLKCJpbnZhbGlkIG1pbm9yIG51bWJlclxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTc4MywxMCArMTc5Myw5IEBACiAKIAlkZXYtPmluX3JlcXVlc3RfbW9kdWxlID0gMTsKIAotCXNwcmludGYobW9kLCAiY2hhci1tYWpvci0laS0laSIsIENPTUVESV9NQUpPUiwgZGV2LT5taW5vcik7CiAjaWZkZWYgQ09ORklHX0tNT0QKIAltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCXJlcXVlc3RfbW9kdWxlKG1vZCk7CisJcmVxdWVzdF9tb2R1bGUoImNoYXItbWFqb3ItJWktJWkiLCBDT01FRElfTUFKT1IsIGRldi0+bWlub3IpOwogCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwogI2VuZGlmCiAKQEAgLTE4MjMsOCArMTgzMiw4IEBACiAJY29uc3QgdW5zaWduZWQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9CiAJICAgIGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhtaW5vcik7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2ZpbGVfaW5mby0+ZGV2aWNlOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBOVUxMOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBOVUxMOwogCWludCBpOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CkBAIC0xODYyLDcgKzE4NzEsNyBAQAogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9CiAJICAgIGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhtaW5vcik7CiAKLQljb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKIAogCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmRldi0+YXN5bmNfcXVldWUpOwogfQpAQCAtMTg5Myw3ICsxOTAyLDcgQEAKIHsKIAl1bnNpZ25lZCBpOwogCi0JZm9yIChpID0gMDsgaSA8IENPTUVESV9OVU1fTEVHQUNZX01JTk9SUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBjb21lZGlfbnVtX2xlZ2FjeV9taW5vcnM7IGkrKykKIAkJY29tZWRpX2ZyZWVfYm9hcmRfbWlub3IoaSk7CiB9CiAKQEAgLTE5MDUsNiArMTkxNCwyMiBAQAogCXByaW50ayhLRVJOX0lORk8gImNvbWVkaTogdmVyc2lvbiAiIENPTUVESV9SRUxFQVNFCiAJICAgICAgICIgLSBodHRwOi8vd3d3LmNvbWVkaS5vcmdcbiIpOwogCisJaWYgKGNvbWVkaV9udW1fbGVnYWN5X21pbm9ycyA8IDAgfHwKKwkgICAgY29tZWRpX251bV9sZWdhY3lfbWlub3JzID4gQ09NRURJX05VTV9CT0FSRF9NSU5PUlMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGk6IGVycm9yOiBpbnZhbGlkIHZhbHVlIGZvciBtb2R1bGUgIgorCQkgICAgICAgInBhcmFtZXRlciBcImNvbWVkaV9udW1fbGVnYWN5X21pbm9yc1wiLiAgVmFsaWQgdmFsdWVzICIKKwkJICAgICAgICJhcmUgMCB0aHJvdWdoICVpLlxuIiwgQ09NRURJX05VTV9CT0FSRF9NSU5PUlMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIGNvbWVkaSBpcyB1bnVzYWJsZSBpZiBib3RoIGNvbWVkaV9hdXRvY29uZmlnIGFuZAorCSAqIGNvbWVkaV9udW1fbGVnYWN5X21pbm9ycyBhcmUgemVybywgc28gd2UgbWlnaHQgYXMgd2VsbCBhZGp1c3QgdGhlCisJICogZGVmYXVsdHMgaW4gdGhhdCBjYXNlCisJICovCisJaWYgKGNvbWVkaV9hdXRvY29uZmlnID09IDAgJiYgY29tZWRpX251bV9sZWdhY3lfbWlub3JzID09IDApCisJCWNvbWVkaV9udW1fbGVnYWN5X21pbm9ycyA9IDE2OworCiAJbWVtc2V0KGNvbWVkaV9maWxlX2luZm9fdGFibGUsIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKikgKiBDT01FRElfTlVNX01JTk9SUyk7CiAKQEAgLTE5MzMsNyArMTk1OCw3IEBACiAJY29tZWRpX3Byb2NfaW5pdCgpOwogCiAJLyogY3JlYXRlIGRldmljZXMgZmlsZXMgZm9yIGxlZ2FjeS9tYW51YWwgdXNlICovCi0JZm9yIChpID0gMDsgaSA8IENPTUVESV9OVU1fTEVHQUNZX01JTk9SUzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGNvbWVkaV9udW1fbGVnYWN5X21pbm9yczsgaSsrKSB7CiAJCWludCBtaW5vcjsKIAkJbWlub3IgPSBjb21lZGlfYWxsb2NfYm9hcmRfbWlub3IoTlVMTCk7CiAJCWlmIChtaW5vciA8IDApIHsKQEAgLTE5NzUsMTUgKzIwMDAsMTUgQEAKIG1vZHVsZV9pbml0KGNvbWVkaV9pbml0KTsKIG1vZHVsZV9leGl0KGNvbWVkaV9jbGVhbnVwKTsKIAotdm9pZCBjb21lZGlfZXJyb3IoY29uc3QgY29tZWRpX2RldmljZSAqZGV2LCBjb25zdCBjaGFyICpzKQordm9pZCBjb21lZGlfZXJyb3IoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcykKIHsKIAlydF9wcmludGsoImNvbWVkaSVkOiAlczogJXNcbiIsIGRldi0+bWlub3IsIGRldi0+ZHJpdmVyLT5kcml2ZXJfbmFtZSwKIAkJICBzKTsKIH0KIAotdm9pZCBjb21lZGlfZXZlbnQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQordm9pZCBjb21lZGlfZXZlbnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CiAJdW5zaWduZWQgcnVuZmxhZ3MgPSAwOwogCXVuc2lnbmVkIHJ1bmZsYWdzX21hc2sgPSAwOwogCkBAIC0yMDQyLDcgKzIwNjcsNyBAQAogCXMtPmFzeW5jLT5ldmVudHMgPSAwOwogfQogCi12b2lkIGNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIG1hc2ssCit2b2lkIGNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBtYXNrLAogCQkJCSAgIHVuc2lnbmVkIGJpdHMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIwNTMsNyArMjA3OCw3IEBACiAJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPnNwaW5fbG9jaywgZmxhZ3MpOwogfQogCi11bnNpZ25lZCBjb21lZGlfZ2V0X3N1YmRldmljZV9ydW5mbGFncyhjb21lZGlfc3ViZGV2aWNlICpzKQordW5zaWduZWQgY29tZWRpX2dldF9zdWJkZXZpY2VfcnVuZmxhZ3Moc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBydW5mbGFnczsKQEAgLTIwNjQsOSArMjA4OSw5IEBACiAJcmV0dXJuIHJ1bmZsYWdzOwogfQogCi1zdGF0aWMgaW50IGlzX2RldmljZV9idXN5KGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaXNfZGV2aWNlX2J1c3koc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCWludCBpOwogCiAJaWYgKCFkZXYtPmF0dGFjaGVkKQpAQCAtMjA4MywxNSArMjEwOCwxNSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGNvbWVkaV9kZXZpY2VfaW5pdChjb21lZGlfZGV2aWNlICpkZXYpCit2b2lkIGNvbWVkaV9kZXZpY2VfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCW1lbXNldChkZXYsIDAsIHNpemVvZihjb21lZGlfZGV2aWNlKSk7CisJbWVtc2V0KGRldiwgMCwgc2l6ZW9mKHN0cnVjdCBjb21lZGlfZGV2aWNlKSk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c3BpbmxvY2spOwogCW11dGV4X2luaXQoJmRldi0+bXV0ZXgpOwogCWRldi0+bWlub3IgPSAtMTsKIH0KIAotdm9pZCBjb21lZGlfZGV2aWNlX2NsZWFudXAoY29tZWRpX2RldmljZSAqZGV2KQordm9pZCBjb21lZGlfZGV2aWNlX2NsZWFudXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlpZiAoZGV2ID09IE5VTEwpCiAJCXJldHVybjsKQEAgLTIxMDUsMTMgKzIxMzAsMTMgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqaW5mbzsKLQlkZXZpY2VfY3JlYXRlX3Jlc3VsdF90eXBlICpjc2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpjc2RldjsKIAl1bnNpZ25lZCBpOwogCiAJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWluZm8tPmRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKGNvbWVkaV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpbmZvLT5kZXZpY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmIChpbmZvLT5kZXZpY2UgPT0gTlVMTCkgewogCQlrZnJlZShpbmZvKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMTU1LDcgKzIxODAsNyBAQAogCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb21lZGlfZmlsZV9pbmZvX3RhYmxlX2xvY2ssIGZsYWdzKTsKIAogCWlmIChpbmZvKSB7Ci0JCWNvbWVkaV9kZXZpY2UgKmRldiA9IGluZm8tPmRldmljZTsKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGluZm8tPmRldmljZTsKIAkJaWYgKGRldikgewogCQkJaWYgKGRldi0+Y2xhc3NfZGV2KSB7CiAJCQkJZGV2aWNlX2Rlc3Ryb3koY29tZWRpX2NsYXNzLApAQCAtMjE2OCwxMSArMjE5MywxMSBAQAogCX0KIH0KIAotaW50IGNvbWVkaV9hbGxvY19zdWJkZXZpY2VfbWlub3IoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQoraW50IGNvbWVkaV9hbGxvY19zdWJkZXZpY2VfbWlub3Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmluZm87Ci0JZGV2aWNlX2NyZWF0ZV9yZXN1bHRfdHlwZSAqY3NkZXY7CisJc3RydWN0IGRldmljZSAqY3NkZXY7CiAJdW5zaWduZWQgaTsKIAogCWluZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8pLCBHRlBfS0VSTkVMKTsKQEAgLTIxODIsNyArMjIwNyw3IEBACiAJaW5mby0+cmVhZF9zdWJkZXZpY2UgPSBzOwogCWluZm8tPndyaXRlX3N1YmRldmljZSA9IHM7CiAJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZjb21lZGlfZmlsZV9pbmZvX3RhYmxlX2xvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSBDT01FRElfRklSU1RfU1VCREVWSUNFX01JTk9SOyBpIDwgQ09NRURJX05VTV9CT0FSRF9NSU5PUlM7ICsraSkgeworCWZvciAoaSA9IENPTUVESV9GSVJTVF9TVUJERVZJQ0VfTUlOT1I7IGkgPCBDT01FRElfTlVNX01JTk9SUzsgKytpKSB7CiAJCWlmIChjb21lZGlfZmlsZV9pbmZvX3RhYmxlW2ldID09IE5VTEwpIHsKIAkJCWNvbWVkaV9maWxlX2luZm9fdGFibGVbaV0gPSBpbmZvOwogCQkJYnJlYWs7CkBAIC0yMjA2LDcgKzIyMzEsNyBAQAogCXJldHVybiBpOwogfQogCi12b2lkIGNvbWVkaV9mcmVlX3N1YmRldmljZV9taW5vcihjb21lZGlfc3ViZGV2aWNlICpzKQordm9pZCBjb21lZGlfZnJlZV9zdWJkZXZpY2VfbWlub3Ioc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmluZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmgKaW5kZXggNjNmOGRmNS4uY2I1MDNjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuaApAQCAtNCw1ICs0LDYgQEAKIAogZXh0ZXJuIHN0cnVjdCBjbGFzcyAqY29tZWRpX2NsYXNzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29tZWRpX2ZvcHM7CitleHRlcm4gaW50IGNvbWVkaV9hdXRvY29uZmlnOwogCiAjZW5kaWYgLyogX0NPTUVESV9GT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2tzeW1zLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9rc3ltcy5jCmluZGV4IDkwZDU3MjguLjZlNmZiOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2tzeW1zLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfa3N5bXMuYwpAQCAtMzEsMTIgKzMxLDEyIEBACiAvKiBmb3IgZHJpdmVycyAqLwogRVhQT1JUX1NZTUJPTChjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKTsKIEVYUE9SVF9TWU1CT0woY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKTsKLS8vRVhQT1JUX1NZTUJPTChjb21lZGlfYnVmY2hlY2spOwotLy9FWFBPUlRfU1lNQk9MKGNvbWVkaV9kb25lKTsKLS8vRVhQT1JUX1NZTUJPTChjb21lZGlfZXJyb3JfZG9uZSk7CisvKiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9idWZjaGVjayk7ICovCisvKiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9kb25lKTsgKi8KKy8qIEVYUE9SVF9TWU1CT0woY29tZWRpX2Vycm9yX2RvbmUpOyAqLwogRVhQT1JUX1NZTUJPTChjb21lZGlfZXJyb3IpOwotLy9FWFBPUlRfU1lNQk9MKGNvbWVkaV9lb2J1Zik7Ci0vL0VYUE9SVF9TWU1CT0woY29tZWRpX2Vvcyk7CisvKiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9lb2J1Zik7ICovCisvKiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9lb3MpOyAqLwogRVhQT1JUX1NZTUJPTChjb21lZGlfZXZlbnQpOwogRVhQT1JUX1NZTUJPTChjb21lZGlfZ2V0X3N1YmRldmljZV9ydW5mbGFncyk7CiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKTsKQEAgLTYwLDYgKzYwLDggQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGNvbWVkaV9mcmVlX2JvYXJkX21pbm9yKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGNvbWVkaV9wY2lfYXV0b19jb25maWcpOwogRVhQT1JUX1NZTUJPTF9HUEwoY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGNvbWVkaV91c2JfYXV0b19jb25maWcpOworRVhQT1JUX1NZTUJPTF9HUEwoY29tZWRpX3VzYl9hdXRvX3VuY29uZmlnKTsKIAogLyogZm9yIGtjb21lZGlsaWIgKi8KIEVYUE9SVF9TWU1CT0woY2hlY2tfY2hhbmxpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfcnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX3J0LmgKaW5kZXggNjE4NTJiZi4uMTY5Y2E5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfcnQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9ydC5oCkBAIC0yOCw3ICsyOCw2IEBACiAjZXJyb3IgY29tZWRpX3J0Lmggc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkgY29tZWRpZGV2LmgKICNlbmRpZgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNTksMTIgKzU4LDEyIEBACiAKIGludCBjb21lZGlfcmVxdWVzdF9pcnEodW5zaWduZWQgaW50IGlycSwgaXJxcmV0dXJuX3QoKmhhbmRsZXIpIChpbnQsCiAJCXZvaWQgKlBUX1JFR1NfQVJHKSwgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqZGV2aWNlLAotCQljb21lZGlfZGV2aWNlICpkZXZfaWQpOwotdm9pZCBjb21lZGlfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgY29tZWRpX2RldmljZSAqZGV2X2lkKTsKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldl9pZCk7Cit2b2lkIGNvbWVkaV9mcmVlX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2X2lkKTsKIHZvaWQgY29tZWRpX3J0X2luaXQodm9pZCk7CiB2b2lkIGNvbWVkaV9ydF9jbGVhbnVwKHZvaWQpOwotaW50IGNvbWVkaV9zd2l0Y2hfdG9fcnQoY29tZWRpX2RldmljZSAqZGV2KTsKLXZvaWQgY29tZWRpX3N3aXRjaF90b19ub25fcnQoY29tZWRpX2RldmljZSAqZGV2KTsKK2ludCBjb21lZGlfc3dpdGNoX3RvX3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwordm9pZCBjb21lZGlfc3dpdGNoX3RvX25vbl9ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIHZvaWQgY29tZWRpX3J0X3BlbmRfd2FrZXVwKHdhaXRfcXVldWVfaGVhZF90ICpxKTsKIGV4dGVybiBpbnQgcnRfcGVuZF9jYWxsKHZvaWQgKCpmdW5jKSAoaW50IGFyZzEsIHZvaWQgKmFyZzIpLCBpbnQgYXJnMSwKIAl2b2lkICphcmcyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaWRldi5oCmluZGV4IDM3MzUzNTUuLmVhMzE5MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpZGV2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlkZXYuaApAQCAtMjYsNyArMjYsNiBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMzYsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgImludGVycnVwdC5oIgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgpAQCAtNTUsOSArNTMsOSBAQAogCiAjZGVmaW5lIENPTUVESV9JTklUQ0xFQU5VUF9OT01PRFVMRSh4KQkJCQkJXAogCXN0YXRpYyBpbnQgX19pbml0IHggIyMgX2luaXRfbW9kdWxlKHZvaWQpCQkJXAotCQl7cmV0dXJuIGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJih4KSk7fQkJCVwKKwkJe3JldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCYoeCkpOyB9CQkJXAogCXN0YXRpYyB2b2lkIF9fZXhpdCB4ICMjIF9jbGVhbnVwX21vZHVsZSh2b2lkKQkJCVwKLQkJe2NvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmKHgpKTt9IAkJCVwKKwkJe2NvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmKHgpKTsgfSAJCQlcCiAJbW9kdWxlX2luaXQoeCAjIyBfaW5pdF9tb2R1bGUpOwkJCQkJXAogCW1vZHVsZV9leGl0KHggIyMgX2NsZWFudXBfbW9kdWxlKTsJCQkJCVwKIApAQCAtMTIwLDIzICsxMTgsMTQgQEAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NRUlMSEFVUwkJMHgxNDAyCiAKICNkZWZpbmUgQ09NRURJX05VTV9NSU5PUlMgMHgxMDAKLSNkZWZpbmUgQ09NRURJX05VTV9MRUdBQ1lfTUlOT1JTIDB4MTAKICNkZWZpbmUgQ09NRURJX05VTV9CT0FSRF9NSU5PUlMgMHgzMAogI2RlZmluZSBDT01FRElfRklSU1RfU1VCREVWSUNFX01JTk9SIENPTUVESV9OVU1fQk9BUkRfTUlOT1JTCiAKLXR5cGVkZWYgc3RydWN0IGNvbWVkaV9kZXZpY2Vfc3RydWN0IGNvbWVkaV9kZXZpY2U7Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlX3N0cnVjdCBjb21lZGlfc3ViZGV2aWNlOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX2FzeW5jX3N0cnVjdCBjb21lZGlfYXN5bmM7Ci10eXBlZGVmIHN0cnVjdCBjb21lZGlfZHJpdmVyX3N0cnVjdCBjb21lZGlfZHJpdmVyOwotdHlwZWRlZiBzdHJ1Y3QgY29tZWRpX2xyYW5nZV9zdHJ1Y3QgY29tZWRpX2xyYW5nZTsKLQotdHlwZWRlZiBzdHJ1Y3QgZGV2aWNlIGRldmljZV9jcmVhdGVfcmVzdWx0X3R5cGU7Ci0KICNkZWZpbmUgQ09NRURJX0RFVklDRV9DUkVBVEUoY3MsIHBhcmVudCwgZGV2dCwgZHJ2ZGF0YSwgZGV2aWNlLCBmbXQuLi4pIFwKIAlkZXZpY2VfY3JlYXRlKGNzLCAoKHBhcmVudCkgPyAocGFyZW50KSA6IChkZXZpY2UpKSwgZGV2dCwgZHJ2ZGF0YSwgZm10KQogCi1zdHJ1Y3QgY29tZWRpX3N1YmRldmljZV9zdHJ1Y3QgewotCWNvbWVkaV9kZXZpY2UgKmRldmljZTsKK3N0cnVjdCBjb21lZGlfc3ViZGV2aWNlIHsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2aWNlOwogCWludCB0eXBlOwogCWludCBuX2NoYW47CiAJdm9sYXRpbGUgaW50IHN1YmRldl9mbGFnczsKQEAgLTE0NCw3ICsxMzMsNyBAQAogCiAJdm9pZCAqcHJpdmF0ZTsKIAotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAKIAl2b2lkICpsb2NrOwogCXZvaWQgKmJ1c3k7CkBAIC0xNTMsNDYgKzE0Miw0NiBAQAogCiAJaW50IGlvX2JpdHM7CiAKLQlsc2FtcGxfdCBtYXhkYXRhOwkvKiBpZiBtYXhkYXRhPT0wLCB1c2UgbGlzdCAqLwotCWNvbnN0IGxzYW1wbF90ICptYXhkYXRhX2xpc3Q7CS8qIGxpc3QgaXMgY2hhbm5lbCBzcGVjaWZpYyAqLworCXVuc2lnbmVkIGludCBtYXhkYXRhOwkvKiBpZiBtYXhkYXRhPT0wLCB1c2UgbGlzdCAqLworCWNvbnN0IHVuc2lnbmVkIGludCAqbWF4ZGF0YV9saXN0OwkvKiBsaXN0IGlzIGNoYW5uZWwgc3BlY2lmaWMgKi8KIAogCXVuc2lnbmVkIGludCBmbGFnczsKIAljb25zdCB1bnNpZ25lZCBpbnQgKmZsYWdsaXN0OwogCiAJdW5zaWduZWQgaW50IHNldHRsaW5nX3RpbWVfMDsKIAotCWNvbnN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlX3RhYmxlOwotCWNvbnN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0ICpyYW5nZV90YWJsZV9saXN0OworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZV90YWJsZTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgKnJhbmdlX3RhYmxlX2xpc3Q7CiAKIAl1bnNpZ25lZCBpbnQgKmNoYW5saXN0OwkvKiBkcml2ZXItb3duZWQgY2hhbmxpc3QgKG5vdCB1c2VkKSAqLwogCi0JaW50ICgqaW5zbl9yZWFkKSAoY29tZWRpX2RldmljZSAqLCBjb21lZGlfc3ViZGV2aWNlICosIGNvbWVkaV9pbnNuICosCi0JCWxzYW1wbF90ICopOwotCWludCAoKmluc25fd3JpdGUpIChjb21lZGlfZGV2aWNlICosIGNvbWVkaV9zdWJkZXZpY2UgKiwgY29tZWRpX2luc24gKiwKLQkJbHNhbXBsX3QgKik7Ci0JaW50ICgqaW5zbl9iaXRzKSAoY29tZWRpX2RldmljZSAqLCBjb21lZGlfc3ViZGV2aWNlICosIGNvbWVkaV9pbnNuICosCi0JCWxzYW1wbF90ICopOwotCWludCAoKmluc25fY29uZmlnKSAoY29tZWRpX2RldmljZSAqLCBjb21lZGlfc3ViZGV2aWNlICosIGNvbWVkaV9pbnNuICosCi0JCWxzYW1wbF90ICopOworCWludCAoKmluc25fcmVhZCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCQl1bnNpZ25lZCBpbnQgKik7CisJaW50ICgqaW5zbl93cml0ZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCQl1bnNpZ25lZCBpbnQgKik7CisJaW50ICgqaW5zbl9iaXRzKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9pbnNuICosCisJCXVuc2lnbmVkIGludCAqKTsKKwlpbnQgKCppbnNuX2NvbmZpZykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCQl1bnNpZ25lZCBpbnQgKik7CiAKLQlpbnQgKCpkb19jbWQpIChjb21lZGlfZGV2aWNlICosIGNvbWVkaV9zdWJkZXZpY2UgKik7Ci0JaW50ICgqZG9fY21kdGVzdCkgKGNvbWVkaV9kZXZpY2UgKiwgY29tZWRpX3N1YmRldmljZSAqLCBjb21lZGlfY21kICopOwotCWludCAoKnBvbGwpIChjb21lZGlfZGV2aWNlICosIGNvbWVkaV9zdWJkZXZpY2UgKik7Ci0JaW50ICgqY2FuY2VsKSAoY29tZWRpX2RldmljZSAqLCBjb21lZGlfc3ViZGV2aWNlICopOwotCS8qIGludCAoKmRvX2xvY2spKGNvbWVkaV9kZXZpY2UgKixjb21lZGlfc3ViZGV2aWNlICopOyAqLwotCS8qIGludCAoKmRvX3VubG9jaykoY29tZWRpX2RldmljZSAqLGNvbWVkaV9zdWJkZXZpY2UgKik7ICovCisJaW50ICgqZG9fY21kKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKik7CisJaW50ICgqZG9fY21kdGVzdCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfY21kICopOworCWludCAoKnBvbGwpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqKTsKKwlpbnQgKCpjYW5jZWwpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqKTsKKwkvKiBpbnQgKCpkb19sb2NrKShzdHJ1Y3QgY29tZWRpX2RldmljZSAqLHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICopOyAqLworCS8qIGludCAoKmRvX3VubG9jaykoc3RydWN0IGNvbWVkaV9kZXZpY2UgKixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqKTsgKi8KIAogCS8qIGNhbGxlZCB3aGVuIHRoZSBidWZmZXIgY2hhbmdlcyAqLwotCWludCAoKmJ1Zl9jaGFuZ2UpIChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJaW50ICgqYnVmX2NoYW5nZSkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQl1bnNpZ25lZCBsb25nIG5ld19zaXplKTsKIAotCXZvaWQgKCptdW5nZSkgKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywgdm9pZCAqZGF0YSwKKwl2b2lkICgqbXVuZ2UpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdm9pZCAqZGF0YSwKIAkJdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW5faW5kZXgpOwogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGFzeW5jX2RtYV9kaXI7CiAKIAl1bnNpZ25lZCBpbnQgc3RhdGU7CiAKLQlkZXZpY2VfY3JlYXRlX3Jlc3VsdF90eXBlICpjbGFzc19kZXY7CisJc3RydWN0IGRldmljZSAqY2xhc3NfZGV2OwogCWludCBtaW5vcjsKIH07CiAKQEAgLTIwMSw4ICsxOTAsOCBAQAogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2FzeW5jX3N0cnVjdCB7Ci0JY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlOworc3RydWN0IGNvbWVkaV9hc3luYyB7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZTsKIAogCXZvaWQgKnByZWFsbG9jX2J1ZjsJLyogcHJlLWFsbG9jYXRlZCBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQgcHJlYWxsb2NfYnVmc3o7CS8qIGJ1ZmZlciBzaXplLCBpbiBieXRlcyAqLwpAQCAtMjMyLDcgKzIyMSw3IEBACiAKIAl1bnNpZ25lZCBpbnQgZXZlbnRzOwkvKiBldmVudHMgdGhhdCBoYXZlIG9jY3VycmVkICovCiAKLQljb21lZGlfY21kIGNtZDsKKwlzdHJ1Y3QgY29tZWRpX2NtZCBjbWQ7CiAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X2hlYWQ7CiAKQEAgLTI0MSwxNyArMjMwLDE3IEBACiAJaW50ICgqY2JfZnVuYykgKHVuc2lnbmVkIGludCBmbGFncywgdm9pZCAqKTsKIAl2b2lkICpjYl9hcmc7CiAKLQlpbnQgKCppbnR0cmlnKSAoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAorCWludCAoKmludHRyaWcpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAkJCXVuc2lnbmVkIGludCB4KTsKIH07CiAKLXN0cnVjdCBjb21lZGlfZHJpdmVyX3N0cnVjdCB7Ci0Jc3RydWN0IGNvbWVkaV9kcml2ZXJfc3RydWN0ICpuZXh0Oworc3RydWN0IGNvbWVkaV9kcml2ZXIgeworCXN0cnVjdCBjb21lZGlfZHJpdmVyICpuZXh0OwogCiAJY29uc3QgY2hhciAqZHJpdmVyX25hbWU7CiAJc3RydWN0IG1vZHVsZSAqbW9kdWxlOwotCWludCAoKmF0dGFjaCkgKGNvbWVkaV9kZXZpY2UgKiwgY29tZWRpX2RldmNvbmZpZyAqKTsKLQlpbnQgKCpkZXRhY2gpIChjb21lZGlfZGV2aWNlICopOworCWludCAoKmF0dGFjaCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICopOworCWludCAoKmRldGFjaCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICopOwogCiAJLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIGJvYXJkX25hbWUgYW5kIGJvYXJkX2lkIGFycmF5cyAqLwogCXVuc2lnbmVkIGludCBudW1fbmFtZXM7CkBAIC0yNjAsMTIgKzI0OSwxMiBAQAogCWludCBvZmZzZXQ7CiB9OwogCi1zdHJ1Y3QgY29tZWRpX2RldmljZV9zdHJ1Y3Qgeworc3RydWN0IGNvbWVkaV9kZXZpY2UgewogCWludCB1c2VfY291bnQ7Ci0JY29tZWRpX2RyaXZlciAqZHJpdmVyOworCXN0cnVjdCBjb21lZGlfZHJpdmVyICpkcml2ZXI7CiAJdm9pZCAqcHJpdmF0ZTsKIAotCWRldmljZV9jcmVhdGVfcmVzdWx0X3R5cGUgKmNsYXNzX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpjbGFzc19kZXY7CiAJaW50IG1pbm9yOwogCS8qIGh3X2RldiBpcyBwYXNzZWQgdG8gZG1hX2FsbG9jX2NvaGVyZW50IHdoZW4gYWxsb2NhdGluZyBhc3luYyBidWZmZXJzCiAJICogZm9yIHN1YmRldmljZXMgdGhhdCBoYXZlIGFzeW5jX2RtYV9kaXIgc2V0IHRvIHNvbWV0aGluZyBvdGhlciB0aGFuCkBAIC0yODEsMjUgKzI3MCwyNSBAQAogCWludCBpbl9yZXF1ZXN0X21vZHVsZTsKIAogCWludCBuX3N1YmRldmljZXM7Ci0JY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlczsKIAogCS8qIGR1bWIgKi8KIAl1bnNpZ25lZCBsb25nIGlvYmFzZTsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCi0JY29tZWRpX3N1YmRldmljZSAqcmVhZF9zdWJkZXY7Ci0JY29tZWRpX3N1YmRldmljZSAqd3JpdGVfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpyZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqd3JpdGVfc3ViZGV2OwogCiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmFzeW5jX3F1ZXVlOwogCi0Jdm9pZCAoKm9wZW4pIChjb21lZGlfZGV2aWNlICpkZXYpOwotCXZvaWQgKCpjbG9zZSkgKGNvbWVkaV9kZXZpY2UgKmRldik7CisJdm9pZCAoKm9wZW4pIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKKwl2b2lkICgqY2xvc2UpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIH07CiAKIHN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyB7Ci0JY29tZWRpX2RldmljZSAqZGV2aWNlOwotCWNvbWVkaV9zdWJkZXZpY2UgKnJlYWRfc3ViZGV2aWNlOwotCWNvbWVkaV9zdWJkZXZpY2UgKndyaXRlX3N1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpyZWFkX3N1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqd3JpdGVfc3ViZGV2aWNlOwogfTsKIAogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKQEAgLTMxMiw4ICszMDEsOCBAQAogICogZnVuY3Rpb24gcHJvdG90eXBlcwogICovCiAKLXZvaWQgY29tZWRpX2V2ZW50KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcyk7Ci12b2lkIGNvbWVkaV9lcnJvcihjb25zdCBjb21lZGlfZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKnMpOwordm9pZCBjb21lZGlfZXZlbnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOwordm9pZCBjb21lZGlfZXJyb3IoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqcyk7CiAKIC8qIHdlIGNhbiBleHBhbmQgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gZW5jb2RlIGRldmljZXMvc3ViZGV2aWNlcyBpbnRvCiAgdGhlIG1pbm9yIG51bWJlciBzb29uLCBhZnRlciBtb3JlIGRpc3Ryb3Mgc3VwcG9ydCA+IDggYml0IG1pbm9yIG51bWJlcnMKQEAgLTMyNyw3ICszMTYsNyBAQAogCiBzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyh1bnNpZ25lZCBtaW5vcik7CiAKLXN0YXRpYyBpbmxpbmUgY29tZWRpX3N1YmRldmljZSAqY29tZWRpX2dldF9yZWFkX3N1YmRldmljZSgKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKmNvbWVkaV9nZXRfcmVhZF9zdWJkZXZpY2UoCiAJCQkJY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICppbmZvKQogewogCWlmIChpbmZvLT5yZWFkX3N1YmRldmljZSkKQEAgLTMzNyw3ICszMjYsNyBAQAogCXJldHVybiBpbmZvLT5kZXZpY2UtPnJlYWRfc3ViZGV2OwogfQogCi1zdGF0aWMgaW5saW5lIGNvbWVkaV9zdWJkZXZpY2UgKmNvbWVkaV9nZXRfd3JpdGVfc3ViZGV2aWNlKAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqY29tZWRpX2dldF93cml0ZV9zdWJkZXZpY2UoCiAJCQkJY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICppbmZvKQogewogCWlmIChpbmZvLT53cml0ZV9zdWJkZXZpY2UpCkBAIC0zNDcsMTcgKzMzNiwxNyBAQAogCXJldHVybiBpbmZvLT5kZXZpY2UtPndyaXRlX3N1YmRldjsKIH0KIAotdm9pZCBjb21lZGlfZGV2aWNlX2RldGFjaChjb21lZGlfZGV2aWNlICpkZXYpOwotaW50IGNvbWVkaV9kZXZpY2VfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpOwotaW50IGNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoY29tZWRpX2RyaXZlciAqKTsKLWludCBjb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoY29tZWRpX2RyaXZlciAqKTsKK3ZvaWQgY29tZWRpX2RldmljZV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitpbnQgY29tZWRpX2RldmljZV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKK2ludCBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBjb21lZGlfZHJpdmVyICopOworaW50IGNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgY29tZWRpX2RyaXZlciAqKTsKIAogdm9pZCBpbml0X3BvbGxpbmcodm9pZCk7CiB2b2lkIGNsZWFudXBfcG9sbGluZyh2b2lkKTsKLXZvaWQgc3RhcnRfcG9sbGluZyhjb21lZGlfZGV2aWNlICopOwotdm9pZCBzdG9wX3BvbGxpbmcoY29tZWRpX2RldmljZSAqKTsKK3ZvaWQgc3RhcnRfcG9sbGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqKTsKK3ZvaWQgc3RvcF9wb2xsaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICopOwogCi1pbnQgY29tZWRpX2J1Zl9hbGxvYyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIGxvbmcKK2ludCBjb21lZGlfYnVmX2FsbG9jKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBsb25nCiAJbmV3X3NpemUpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTM4NiwxMyArMzc1LDEzIEBACiAgICB2YXJpb3VzIGludGVybmFsIGNvbWVkaSBmdW5jdGlvbnMKICAqLwogCi1pbnQgZG9fcmFuZ2VpbmZvX2lvY3RsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3JhbmdlaW5mbyAqYXJnKTsKLWludCBjaGVja19jaGFubGlzdChjb21lZGlfc3ViZGV2aWNlICpzLCBpbnQgbiwgdW5zaWduZWQgaW50ICpjaGFubGlzdCk7Ci12b2lkIGNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKGNvbWVkaV9zdWJkZXZpY2UgKnMsIHVuc2lnbmVkIG1hc2ssCitpbnQgZG9fcmFuZ2VpbmZvX2lvY3RsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfcmFuZ2VpbmZvICphcmcpOworaW50IGNoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBpbnQgbiwgdW5zaWduZWQgaW50ICpjaGFubGlzdCk7Cit2b2lkIGNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBtYXNrLAogCXVuc2lnbmVkIGJpdHMpOwotdW5zaWduZWQgY29tZWRpX2dldF9zdWJkZXZpY2VfcnVuZmxhZ3MoY29tZWRpX3N1YmRldmljZSAqcyk7Ci1pbnQgaW5zbl9pbnZhbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKTsKK3Vuc2lnbmVkIGNvbWVkaV9nZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK2ludCBpbnNuX2ludmFsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIAogLyogcmFuZ2Ugc3R1ZmYgKi8KIApAQCAtNDAzLDEyICszOTIsMTIgQEAKICNkZWZpbmUgQklQX1JBTkdFKGEpCQl7LShhKSoxZTYsIChhKSoxZTYsIDB9CiAjZGVmaW5lIFVOSV9SQU5HRShhKQkJezAsIChhKSoxZTYsIDB9CiAKLWV4dGVybiBjb25zdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXIxMDsKLWV4dGVybiBjb25zdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXI1OwotZXh0ZXJuIGNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjJfNTsKLWV4dGVybiBjb25zdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VuaXBvbGFyMTA7Ci1leHRlcm4gY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmlwb2xhcjU7Ci1leHRlcm4gY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmtub3duOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXIxMDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyNTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyMl81OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VuaXBvbGFyMTA7CitleHRlcm4gY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdW5pcG9sYXI1OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3Vua25vd247CiAKICNkZWZpbmUgcmFuZ2VfZGlnaXRhbAkJcmFuZ2VfdW5pcG9sYXI1CiAKQEAgLTQxOCwyMSArNDA3LDIxIEBACiAjZGVmaW5lIEdDQ19aRVJPX0xFTkdUSF9BUlJBWSAwCiAjZW5kaWYKIAotc3RydWN0IGNvbWVkaV9scmFuZ2Vfc3RydWN0IHsKK3N0cnVjdCBjb21lZGlfbHJhbmdlIHsKIAlpbnQgbGVuZ3RoOwotCWNvbWVkaV9rcmFuZ2UgcmFuZ2VbR0NDX1pFUk9fTEVOR1RIX0FSUkFZXTsKKwlzdHJ1Y3QgY29tZWRpX2tyYW5nZSByYW5nZVtHQ0NfWkVST19MRU5HVEhfQVJSQVldOwogfTsKIAogLyogc29tZSBzaWxseSBsaXR0bGUgaW5saW5lIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgaW5saW5lIGludCBhbGxvY19zdWJkZXZpY2VzKGNvbWVkaV9kZXZpY2UgKmRldiwKK3N0YXRpYyBpbmxpbmUgaW50IGFsbG9jX3N1YmRldmljZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3N1YmRldmljZXMpCiB7CiAJdW5zaWduZWQgaTsKIAogCWRldi0+bl9zdWJkZXZpY2VzID0gbnVtX3N1YmRldmljZXM7CiAJZGV2LT5zdWJkZXZpY2VzID0KLQkJa2NhbGxvYyhudW1fc3ViZGV2aWNlcywgc2l6ZW9mKGNvbWVkaV9zdWJkZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwkJa2NhbGxvYyhudW1fc3ViZGV2aWNlcywgc2l6ZW9mKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYtPnN1YmRldmljZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCWZvciAoaSA9IDA7IGkgPCBudW1fc3ViZGV2aWNlczsgKytpKSB7CkBAIC00NDQsNyArNDMzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYWxsb2NfcHJpdmF0ZShjb21lZGlfZGV2aWNlICpkZXYsIGludCBzaXplKQorc3RhdGljIGlubGluZSBpbnQgYWxsb2NfcHJpdmF0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgc2l6ZSkKIHsKIAlkZXYtPnByaXZhdGUgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghZGV2LT5wcml2YXRlKQpAQCAtNDUyLDE3ICs0NDEsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3NhbXBsZShjb25zdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnl0ZXNfcGVyX3NhbXBsZShjb25zdCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCkKIHsKIAlpZiAoc3ViZC0+c3ViZGV2X2ZsYWdzICYgU0RGX0xTQU1QTCkKLQkJcmV0dXJuIHNpemVvZihsc2FtcGxfdCk7CisJCXJldHVybiBzaXplb2YodW5zaWduZWQgaW50KTsKIAllbHNlCi0JCXJldHVybiBzaXplb2Yoc2FtcGxfdCk7CisJCXJldHVybiBzaXplb2Yoc2hvcnQpOwogfQogCiAvKiBtdXN0IGJlIHVzZWQgaW4gYXR0YWNoIHRvIHNldCBkZXYtPmh3X2RldiBpZiB5b3Ugd2lzaCB0byBkbWEgZGlyZWN0bHkKIGludG8gY29tZWRpJ3MgYnVmZmVyICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY29tZWRpX3NldF9od19kZXYoY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpod19kZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgY29tZWRpX3NldF9od19kZXYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqaHdfZGV2KQogewogCWlmIChkZXYtPmh3X2RldikKIAkJcHV0X2RldmljZShkZXYtPmh3X2Rldik7CkBAIC00NzQsMzEgKzQ2MywzMSBAQAogCX0KIH0KIAotaW50IGNvbWVkaV9idWZfcHV0KGNvbWVkaV9hc3luYyAqYXN5bmMsIHNhbXBsX3QgeCk7Ci1pbnQgY29tZWRpX2J1Zl9nZXQoY29tZWRpX2FzeW5jICphc3luYywgc2FtcGxfdCAqeCk7CitpbnQgY29tZWRpX2J1Zl9wdXQoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHNob3J0IHgpOworaW50IGNvbWVkaV9idWZfZ2V0KHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCBzaG9ydCAqeCk7CiAKLXVuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX25fYXZhaWxhYmxlKGNvbWVkaV9hc3luYyAqYXN5bmMpOwotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfd3JpdGVfYWxsb2MoY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG5ieXRlcyk7Ci11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9hbGxvY19zdHJpY3QoY29tZWRpX2FzeW5jICphc3luYywKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX25fYXZhaWxhYmxlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKTsKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX2FsbG9jKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX2FsbG9jX3N0cmljdChzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywKIAl1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKLXVuc2lnbmVkIGNvbWVkaV9idWZfd3JpdGVfZnJlZShjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKLXVuc2lnbmVkIGNvbWVkaV9idWZfcmVhZF9hbGxvYyhjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBuYnl0ZXMpOwotdW5zaWduZWQgY29tZWRpX2J1Zl9yZWFkX2ZyZWUoY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG5ieXRlcyk7Ci11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKGNvbWVkaV9hc3luYyAqYXN5bmMpOwotdm9pZCBjb21lZGlfYnVmX21lbWNweV90byhjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAordW5zaWduZWQgY29tZWRpX2J1Zl93cml0ZV9mcmVlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKK3Vuc2lnbmVkIGNvbWVkaV9idWZfcmVhZF9hbGxvYyhzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgbmJ5dGVzKTsKK3Vuc2lnbmVkIGNvbWVkaV9idWZfcmVhZF9mcmVlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpOwordm9pZCBjb21lZGlfYnVmX21lbWNweV90byhzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG9mZnNldCwKIAljb25zdCB2b2lkICpzb3VyY2UsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpOwotdm9pZCBjb21lZGlfYnVmX21lbWNweV9mcm9tKGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCit2b2lkIGNvbWVkaV9idWZfbWVtY3B5X2Zyb20oc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJdm9pZCAqZGVzdGluYXRpb24sIHVuc2lnbmVkIGludCBudW1fYnl0ZXMpOwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjb21lZGlfYnVmX3dyaXRlX25fYWxsb2NhdGVkKGNvbWVkaV9hc3luYyAqYXN5bmMpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNvbWVkaV9idWZfd3JpdGVfbl9hbGxvY2F0ZWQoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpCiB7CiAJcmV0dXJuIGFzeW5jLT5idWZfd3JpdGVfYWxsb2NfY291bnQgLSBhc3luYy0+YnVmX3dyaXRlX2NvdW50OwogfQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjb21lZGlfYnVmX3JlYWRfbl9hbGxvY2F0ZWQoY29tZWRpX2FzeW5jICphc3luYykKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY29tZWRpX2J1Zl9yZWFkX25fYWxsb2NhdGVkKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQogewogCXJldHVybiBhc3luYy0+YnVmX3JlYWRfYWxsb2NfY291bnQgLSBhc3luYy0+YnVmX3JlYWRfY291bnQ7CiB9CiAKLXZvaWQgY29tZWRpX3Jlc2V0X2FzeW5jX2J1Zihjb21lZGlfYXN5bmMgKmFzeW5jKTsKK3ZvaWQgY29tZWRpX3Jlc2V0X2FzeW5jX2J1ZihzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqY29tZWRpX2F1eF9kYXRhKGludCBvcHRpb25zW10sIGludCBuKQogewpAQCAtNTI3LDEwICs1MTYsMTMgQEAKIAogaW50IGNvbWVkaV9hbGxvY19ib2FyZF9taW5vcihzdHJ1Y3QgZGV2aWNlICpoYXJkd2FyZV9kZXZpY2UpOwogdm9pZCBjb21lZGlfZnJlZV9ib2FyZF9taW5vcih1bnNpZ25lZCBtaW5vcik7Ci1pbnQgY29tZWRpX2FsbG9jX3N1YmRldmljZV9taW5vcihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpOwotdm9pZCBjb21lZGlfZnJlZV9zdWJkZXZpY2VfbWlub3IoY29tZWRpX3N1YmRldmljZSAqcyk7CitpbnQgY29tZWRpX2FsbG9jX3N1YmRldmljZV9taW5vcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7Cit2b2lkIGNvbWVkaV9mcmVlX3N1YmRldmljZV9taW5vcihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CiBpbnQgY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LCBjb25zdCBjaGFyICpib2FyZF9uYW1lKTsKIHZvaWQgY29tZWRpX3BjaV9hdXRvX3VuY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpOworc3RydWN0IHVzYl9kZXZpY2U7CS8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KK2ludCBjb21lZGlfdXNiX2F1dG9fY29uZmlnKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsIGNvbnN0IGNoYXIgKmJvYXJkX25hbWUpOwordm9pZCBjb21lZGlfdXNiX2F1dG9fdW5jb25maWcoc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldik7CiAKICNpbmNsdWRlICJjb21lZGlfcnQuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlsaWIuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpbGliLmgKaW5kZXggZmM1ZmMwMS4uYzI3MjkzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlsaWIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaWxpYi5oCkBAIC0zNiwxOCArMzYsMTYgQEAKIAogI2lmbmRlZiBLQ09NRURJTElCX0RFUFJFQ0FURUQKIAotdHlwZWRlZiB2b2lkIGNvbWVkaV90OwotCiAvKiB0aGVzZSBmdW5jdGlvbnMgbWF5IG5vdCBiZSBjYWxsZWQgYXQgcmVhbC10aW1lIHByaW9yaXR5ICovCiAKLWNvbWVkaV90ICpjb21lZGlfb3Blbihjb25zdCBjaGFyICpwYXRoKTsKLWludCBjb21lZGlfY2xvc2UoY29tZWRpX3QgKmRldik7Cit2b2lkICpjb21lZGlfb3Blbihjb25zdCBjaGFyICpwYXRoKTsKK2ludCBjb21lZGlfY2xvc2Uodm9pZCAqZGV2KTsKIAogLyogdGhlc2UgZnVuY3Rpb25zIG1heSBiZSBjYWxsZWQgYXQgYW55IHByaW9yaXR5LCBidXQgbWF5IGZhaWwgYXQKICAgIHJlYWwtdGltZSBwcmlvcml0eSAqLwogCi1pbnQgY29tZWRpX2xvY2soY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldik7Ci1pbnQgY29tZWRpX3VubG9jayhjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2KTsKK2ludCBjb21lZGlfbG9jayh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOworaW50IGNvbWVkaV91bmxvY2sodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2KTsKIAogLyogdGhlc2UgZnVuY3Rpb25zIG1heSBiZSBjYWxsZWQgYXQgYW55IHByaW9yaXR5LCBidXQgeW91IG11c3QgaG9sZAogICAgdGhlIGxvY2sgZm9yIHRoZSBzdWJkZXZpY2UgKi8KQEAgLTU2LDY4ICs1NCw2OCBAQAogdm9pZCBjb21lZGlfcGVycm9yKGNvbnN0IGNoYXIgKnMpOwogY2hhciAqY29tZWRpX3N0cmVycm9yKGludCBlcnJudW0pOwogaW50IGNvbWVkaV9lcnJubyh2b2lkKTsKLWludCBjb21lZGlfZmlsZW5vKGNvbWVkaV90ICpkZXYpOworaW50IGNvbWVkaV9maWxlbm8odm9pZCAqZGV2KTsKIAotaW50IGNvbWVkaV9jYW5jZWwoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldik7Ci1pbnQgY29tZWRpX3JlZ2lzdGVyX2NhbGxiYWNrKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCitpbnQgY29tZWRpX2NhbmNlbCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOworaW50IGNvbWVkaV9yZWdpc3Rlcl9jYWxsYmFjayh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCiAJdW5zaWduZWQgaW50IG1hc2ssIGludCAoKmNiKSAodW5zaWduZWQgaW50LCB2b2lkICopLCB2b2lkICphcmcpOwogCi1pbnQgY29tZWRpX2NvbW1hbmQoY29tZWRpX3QgKmRldiwgY29tZWRpX2NtZCAqY21kKTsKLWludCBjb21lZGlfY29tbWFuZF90ZXN0KGNvbWVkaV90ICpkZXYsIGNvbWVkaV9jbWQgKmNtZCk7Ci1pbnQgY29tZWRpX3RyaWdnZXIoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgY29tZWRpX3RyaWcgKml0KTsKLWludCBfX2NvbWVkaV90cmlnZ2VyKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIGNvbWVkaV90cmlnICppdCk7Ci1pbnQgY29tZWRpX2RhdGFfd3JpdGUoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCi0JdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgYXJlZiwgbHNhbXBsX3QgZGF0YSk7Ci1pbnQgY29tZWRpX2RhdGFfcmVhZChjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKLQl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCBsc2FtcGxfdCAqZGF0YSk7Ci1pbnQgY29tZWRpX2RhdGFfcmVhZF9oaW50KGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCitpbnQgY29tZWRpX2NvbW1hbmQodm9pZCAqZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKK2ludCBjb21lZGlfY29tbWFuZF90ZXN0KHZvaWQgKmRldiwgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CitpbnQgY29tZWRpX3RyaWdnZXIodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCBzdHJ1Y3QgY29tZWRpX3RyaWcgKml0KTsKK2ludCBfX2NvbWVkaV90cmlnZ2VyKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgc3RydWN0IGNvbWVkaV90cmlnICppdCk7CitpbnQgY29tZWRpX2RhdGFfd3JpdGUodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKKwl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCB1bnNpZ25lZCBpbnQgZGF0YSk7CitpbnQgY29tZWRpX2RhdGFfcmVhZCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAorCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgY29tZWRpX2RhdGFfcmVhZF9oaW50KHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwKIAl1bnNpZ25lZCBpbnQgY2hhbiwgdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgYXJlZik7Ci1pbnQgY29tZWRpX2RhdGFfcmVhZF9kZWxheWVkKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCitpbnQgY29tZWRpX2RhdGFfcmVhZF9kZWxheWVkKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwKIAl1bnNpZ25lZCBpbnQgY2hhbiwgdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgYXJlZiwKLQlsc2FtcGxfdCAqZGF0YSwgdW5zaWduZWQgaW50IG5hbm9fc2VjKTsKLWludCBjb21lZGlfZGlvX2NvbmZpZyhjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKKwl1bnNpZ25lZCBpbnQgKmRhdGEsIHVuc2lnbmVkIGludCBuYW5vX3NlYyk7CitpbnQgY29tZWRpX2Rpb19jb25maWcodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKIAl1bnNpZ25lZCBpbnQgaW8pOwotaW50IGNvbWVkaV9kaW9fcmVhZChjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKK2ludCBjb21lZGlfZGlvX3JlYWQodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKIAl1bnNpZ25lZCBpbnQgKnZhbCk7Ci1pbnQgY29tZWRpX2Rpb193cml0ZShjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKK2ludCBjb21lZGlfZGlvX3dyaXRlKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCiAJdW5zaWduZWQgaW50IHZhbCk7Ci1pbnQgY29tZWRpX2Rpb19iaXRmaWVsZChjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgbWFzaywKK2ludCBjb21lZGlfZGlvX2JpdGZpZWxkKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IG1hc2ssCiAJdW5zaWduZWQgaW50ICpiaXRzKTsKLWludCBjb21lZGlfZ2V0X25fc3ViZGV2aWNlcyhjb21lZGlfdCAqZGV2KTsKLWludCBjb21lZGlfZ2V0X3ZlcnNpb25fY29kZShjb21lZGlfdCAqZGV2KTsKLWNvbnN0IGNoYXIgKmNvbWVkaV9nZXRfZHJpdmVyX25hbWUoY29tZWRpX3QgKmRldik7Ci1jb25zdCBjaGFyICpjb21lZGlfZ2V0X2JvYXJkX25hbWUoY29tZWRpX3QgKmRldik7Ci1pbnQgY29tZWRpX2dldF9zdWJkZXZpY2VfdHlwZShjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKTsKLWludCBjb21lZGlfZmluZF9zdWJkZXZpY2VfYnlfdHlwZShjb21lZGlfdCAqZGV2LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHN1YmQpOwotaW50IGNvbWVkaV9nZXRfbl9jaGFubmVscyhjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKTsKLWxzYW1wbF90IGNvbWVkaV9nZXRfbWF4ZGF0YShjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB1bnNpZ25lZAoraW50IGNvbWVkaV9nZXRfbl9zdWJkZXZpY2VzKHZvaWQgKmRldik7CitpbnQgY29tZWRpX2dldF92ZXJzaW9uX2NvZGUodm9pZCAqZGV2KTsKK2NvbnN0IGNoYXIgKmNvbWVkaV9nZXRfZHJpdmVyX25hbWUodm9pZCAqZGV2KTsKK2NvbnN0IGNoYXIgKmNvbWVkaV9nZXRfYm9hcmRfbmFtZSh2b2lkICpkZXYpOworaW50IGNvbWVkaV9nZXRfc3ViZGV2aWNlX3R5cGUodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKTsKK2ludCBjb21lZGlfZmluZF9zdWJkZXZpY2VfYnlfdHlwZSh2b2lkICpkZXYsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgc3ViZCk7CitpbnQgY29tZWRpX2dldF9uX2NoYW5uZWxzKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7Cit1bnNpZ25lZCBpbnQgY29tZWRpX2dldF9tYXhkYXRhKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQKIAlpbnQgY2hhbik7Ci1pbnQgY29tZWRpX2dldF9uX3Jhbmdlcyhjb21lZGlfdCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB1bnNpZ25lZCBpbnQKK2ludCBjb21lZGlfZ2V0X25fcmFuZ2VzKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50CiAJY2hhbik7Ci1pbnQgY29tZWRpX2RvX2luc24oY29tZWRpX3QgKmRldiwgY29tZWRpX2luc24gKmluc24pOwotaW50IGNvbWVkaV9wb2xsKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOworaW50IGNvbWVkaV9kb19pbnNuKHZvaWQgKmRldiwgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuKTsKK2ludCBjb21lZGlfcG9sbCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOwogCiAvKiBERVBSRUNBVEVEIGZ1bmN0aW9ucyAqLwotaW50IGNvbWVkaV9nZXRfcmFuZ2V0eXBlKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCitpbnQgY29tZWRpX2dldF9yYW5nZXR5cGUodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAogCXVuc2lnbmVkIGludCBjaGFuKTsKIAogLyogQUxQSEEgZnVuY3Rpb25zICovCi11bnNpZ25lZCBpbnQgY29tZWRpX2dldF9zdWJkZXZpY2VfZmxhZ3MoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7Ci1pbnQgY29tZWRpX2dldF9sZW5fY2hhbmxpc3QoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7Ci1pbnQgY29tZWRpX2dldF9rcmFuZ2UoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50Ci0JY2hhbiwgdW5zaWduZWQgaW50IHJhbmdlLCBjb21lZGlfa3JhbmdlICprcmFuZ2UpOwotdW5zaWduZWQgaW50IGNvbWVkaV9nZXRfYnVmX2hlYWRfcG9zKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOwotaW50IGNvbWVkaV9zZXRfdXNlcl9pbnRfY291bnQoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKK3Vuc2lnbmVkIGludCBjb21lZGlfZ2V0X3N1YmRldmljZV9mbGFncyh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOworaW50IGNvbWVkaV9nZXRfbGVuX2NoYW5saXN0KHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7CitpbnQgY29tZWRpX2dldF9rcmFuZ2Uodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB1bnNpZ25lZCBpbnQKKwljaGFuLCB1bnNpZ25lZCBpbnQgcmFuZ2UsIHN0cnVjdCBjb21lZGlfa3JhbmdlICprcmFuZ2UpOwordW5zaWduZWQgaW50IGNvbWVkaV9nZXRfYnVmX2hlYWRfcG9zKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7CitpbnQgY29tZWRpX3NldF91c2VyX2ludF9jb3VudCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCiAJdW5zaWduZWQgaW50IGJ1Zl91c2VyX2NvdW50KTsKLWludCBjb21lZGlfbWFwKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHZvaWQgKnB0cik7Ci1pbnQgY29tZWRpX3VubWFwKGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYpOwotaW50IGNvbWVkaV9nZXRfYnVmZmVyX3NpemUoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldik7Ci1pbnQgY29tZWRpX21hcmtfYnVmZmVyX3JlYWQoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKK2ludCBjb21lZGlfbWFwKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdm9pZCAqcHRyKTsKK2ludCBjb21lZGlfdW5tYXAodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2KTsKK2ludCBjb21lZGlfZ2V0X2J1ZmZlcl9zaXplKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldik7CitpbnQgY29tZWRpX21hcmtfYnVmZmVyX3JlYWQodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAogCXVuc2lnbmVkIGludCBudW1fYnl0ZXMpOwotaW50IGNvbWVkaV9tYXJrX2J1ZmZlcl93cml0dGVuKGNvbWVkaV90ICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLAoraW50IGNvbWVkaV9tYXJrX2J1ZmZlcl93cml0dGVuKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCiAJdW5zaWduZWQgaW50IG51bV9ieXRlcyk7Ci1pbnQgY29tZWRpX2dldF9idWZmZXJfY29udGVudHMoY29tZWRpX3QgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7Ci1pbnQgY29tZWRpX2dldF9idWZmZXJfb2Zmc2V0KGNvbWVkaV90ICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOworaW50IGNvbWVkaV9nZXRfYnVmZmVyX2NvbnRlbnRzKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7CitpbnQgY29tZWRpX2dldF9idWZmZXJfb2Zmc2V0KHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldmljZSk7CiAKICNlbHNlCiAKQEAgLTEzOSwxNCArMTM3LDE0IEBACiBpbnQgY29tZWRpX3JlZ2lzdGVyX2NhbGxiYWNrKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IHN1YmRldiwKIAl1bnNpZ25lZCBpbnQgbWFzaywgaW50ICgqY2IpICh1bnNpZ25lZCBpbnQsIHZvaWQgKiksIHZvaWQgKmFyZyk7CiAKLWludCBjb21lZGlfY29tbWFuZCh1bnNpZ25lZCBpbnQgbWlub3IsIGNvbWVkaV9jbWQgKmNtZCk7Ci1pbnQgY29tZWRpX2NvbW1hbmRfdGVzdCh1bnNpZ25lZCBpbnQgbWlub3IsIGNvbWVkaV9jbWQgKmNtZCk7Ci1pbnQgY29tZWRpX3RyaWdnZXIodW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2LCBjb21lZGlfdHJpZyAqaXQpOwotaW50IF9fY29tZWRpX3RyaWdnZXIodW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2LCBjb21lZGlfdHJpZyAqaXQpOworaW50IGNvbWVkaV9jb21tYW5kKHVuc2lnbmVkIGludCBtaW5vciwgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CitpbnQgY29tZWRpX2NvbW1hbmRfdGVzdCh1bnNpZ25lZCBpbnQgbWlub3IsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOworaW50IGNvbWVkaV90cmlnZ2VyKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IHN1YmRldiwgc3RydWN0IGNvbWVkaV90cmlnICppdCk7CitpbnQgX19jb21lZGlfdHJpZ2dlcih1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXYsIHN0cnVjdCBjb21lZGlfdHJpZyAqaXQpOwogaW50IGNvbWVkaV9kYXRhX3dyaXRlKHVuc2lnbmVkIGludCBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAotCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIGxzYW1wbF90IGRhdGEpOworCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIHVuc2lnbmVkIGludCBkYXRhKTsKIGludCBjb21lZGlfZGF0YV9yZWFkKHVuc2lnbmVkIGludCBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAotCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIGxzYW1wbF90ICpkYXRhKTsKKwl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogaW50IGNvbWVkaV9kaW9fY29uZmlnKHVuc2lnbmVkIGludCBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAogCXVuc2lnbmVkIGludCBpbyk7CiBpbnQgY29tZWRpX2Rpb19yZWFkKHVuc2lnbmVkIGludCBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLApAQCAtMTYzLDExICsxNjEsMTEgQEAKIGludCBjb21lZGlfZmluZF9zdWJkZXZpY2VfYnlfdHlwZSh1bnNpZ25lZCBpbnQgbWlub3IsIGludCB0eXBlLAogCXVuc2lnbmVkIGludCBzdWJkKTsKIGludCBjb21lZGlfZ2V0X25fY2hhbm5lbHModW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKTsKLWxzYW1wbF90IGNvbWVkaV9nZXRfbWF4ZGF0YSh1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkCit1bnNpZ25lZCBpbnQgY29tZWRpX2dldF9tYXhkYXRhKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQKIAlpbnQgY2hhbik7CiBpbnQgY29tZWRpX2dldF9uX3Jhbmdlcyh1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkIGludAogCWNoYW4pOwotaW50IGNvbWVkaV9kb19pbnNuKHVuc2lnbmVkIGludCBtaW5vciwgY29tZWRpX2luc24gKmluc24pOworaW50IGNvbWVkaV9kb19pbnNuKHVuc2lnbmVkIGludCBtaW5vciwgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuKTsKIGludCBjb21lZGlfcG9sbCh1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXYpOwogCiAvKiBERVBSRUNBVEVEIGZ1bmN0aW9ucyAqLwpAQCAtMTc5LDcgKzE3Nyw3IEBACiAJc3ViZGV2aWNlKTsKIGludCBjb21lZGlfZ2V0X2xlbl9jaGFubGlzdCh1bnNpZ25lZCBpbnQgbWlub3IsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpOwogaW50IGNvbWVkaV9nZXRfa3JhbmdlKHVuc2lnbmVkIGludCBtaW5vciwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50Ci0JY2hhbiwgdW5zaWduZWQgaW50IHJhbmdlLCBjb21lZGlfa3JhbmdlICprcmFuZ2UpOworCWNoYW4sIHVuc2lnbmVkIGludCByYW5nZSwgc3RydWN0IGNvbWVkaV9rcmFuZ2UgKmtyYW5nZSk7CiB1bnNpZ25lZCBpbnQgY29tZWRpX2dldF9idWZfaGVhZF9wb3ModW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQKIAlzdWJkZXZpY2UpOwogaW50IGNvbWVkaV9zZXRfdXNlcl9pbnRfY291bnQodW5zaWduZWQgaW50IG1pbm9yLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMuYwppbmRleCAzNmE5M2I5Li42ZTEzZTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTQ2LDI2ICs0NywyNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotc3RhdGljIGludCBwb3N0Y29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYpOwotc3RhdGljIGludCBpbnNuX3J3X2VtdWxhdGVfYml0cyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7Ci1zdGF0aWMgdm9pZCAqY29tZWRpX3JlY29nbml6ZShjb21lZGlfZHJpdmVyICogZHJpdiwgY29uc3QgY2hhciAqbmFtZSk7Ci1zdGF0aWMgdm9pZCBjb21lZGlfcmVwb3J0X2JvYXJkcyhjb21lZGlfZHJpdmVyICogZHJpdik7Ci1zdGF0aWMgaW50IHBvbGxfaW52YWxpZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcyk7Ci1pbnQgY29tZWRpX2J1Zl9hbGxvYyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKK3N0YXRpYyBpbnQgcG9zdGNvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgaW5zbl9yd19lbXVsYXRlX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIHZvaWQgKmNvbWVkaV9yZWNvZ25pemUoc3RydWN0IGNvbWVkaV9kcml2ZXIgKiBkcml2LCBjb25zdCBjaGFyICpuYW1lKTsKK3N0YXRpYyB2b2lkIGNvbWVkaV9yZXBvcnRfYm9hcmRzKHN0cnVjdCBjb21lZGlfZHJpdmVyICpkcml2KTsKK3N0YXRpYyBpbnQgcG9sbF9pbnZhbGlkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK2ludCBjb21lZGlfYnVmX2FsbG9jKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpOwogCi1jb21lZGlfZHJpdmVyICpjb21lZGlfZHJpdmVyczsKK3N0cnVjdCBjb21lZGlfZHJpdmVyICpjb21lZGlfZHJpdmVyczsKIAogaW50IGNvbWVkaV9tb2Rwcm9iZShpbnQgbWlub3IpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBfZGV2aWNlKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBjbGVhbnVwX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCWludCBpOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpZiAoZGV2LT5zdWJkZXZpY2VzKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CkBAIC04MCwxMCArODEsOCBAQAogCQlkZXYtPnN1YmRldmljZXMgPSBOVUxMOwogCQlkZXYtPm5fc3ViZGV2aWNlcyA9IDA7CiAJfQotCWlmIChkZXYtPnByaXZhdGUpIHsKLQkJa2ZyZWUoZGV2LT5wcml2YXRlKTsKLQkJZGV2LT5wcml2YXRlID0gTlVMTDsKLQl9CisJa2ZyZWUoZGV2LT5wcml2YXRlKTsKKwlkZXYtPnByaXZhdGUgPSBOVUxMOwogCWRldi0+ZHJpdmVyID0gMDsKIAlkZXYtPmJvYXJkX25hbWUgPSBOVUxMOwogCWRldi0+Ym9hcmRfcHRyID0gTlVMTDsKQEAgLTk2LDcgKzk1LDcgQEAKIAljb21lZGlfc2V0X2h3X2RldihkZXYsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCBfX2NvbWVkaV9kZXZpY2VfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBfX2NvbWVkaV9kZXZpY2VfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5hdHRhY2hlZCA9IDA7CiAJaWYgKGRldi0+ZHJpdmVyKSB7CkBAIC0xMDcsMTYgKzEwNiwxNiBAQAogCWNsZWFudXBfZGV2aWNlKGRldik7CiB9CiAKLXZvaWQgY29tZWRpX2RldmljZV9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldikKK3ZvaWQgY29tZWRpX2RldmljZV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlpZiAoIWRldi0+YXR0YWNoZWQpCiAJCXJldHVybjsKIAlfX2NvbWVkaV9kZXZpY2VfZGV0YWNoKGRldik7CiB9CiAKLWludCBjb21lZGlfZGV2aWNlX2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpCitpbnQgY29tZWRpX2RldmljZV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewotCWNvbWVkaV9kcml2ZXIgKmRyaXY7CisJc3RydWN0IGNvbWVkaV9kcml2ZXIgKmRyaXY7CiAJaW50IHJldDsKIAogCWlmIChkZXYtPmF0dGFjaGVkKQpAQCAtMTM5LDcgKzEzOCw3IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCX0KLQkJLy9pbml0aWFsaXplIGRldi0+ZHJpdmVyIGhlcmUgc28gY29tZWRpX2Vycm9yKCkgY2FuIGJlIGNhbGxlZCBmcm9tIGF0dGFjaAorCQkvKiBpbml0aWFsaXplIGRldi0+ZHJpdmVyIGhlcmUgc28gY29tZWRpX2Vycm9yKCkgY2FuIGJlIGNhbGxlZCBmcm9tIGF0dGFjaCAqLwogCQlkZXYtPmRyaXZlciA9IGRyaXY7CiAJCXJldCA9IGRyaXYtPmF0dGFjaChkZXYsIGl0KTsKIAkJaWYgKHJldCA8IDApIHsKQEAgLTE1MCw4ICsxNDksOCBAQAogCQlnb3RvIGF0dGFjaGVkOwogCX0KIAotCS8vIHJlY29nbml6ZSBoYXMgZmFpbGVkIGlmIHdlIGdldCBoZXJlCi0JLy8gcmVwb3J0IHZhbGlkIGJvYXJkIG5hbWVzIGJlZm9yZSByZXR1cm5pbmcgZXJyb3IKKwkvKiAgcmVjb2duaXplIGhhcyBmYWlsZWQgaWYgd2UgZ2V0IGhlcmUgKi8KKwkvKiAgcmVwb3J0IHZhbGlkIGJvYXJkIG5hbWVzIGJlZm9yZSByZXR1cm5pbmcgZXJyb3IgKi8KIAlmb3IgKGRyaXYgPSBjb21lZGlfZHJpdmVyczsgZHJpdjsgZHJpdiA9IGRyaXYtPm5leHQpIHsKIAkJaWYgKCF0cnlfbW9kdWxlX2dldChkcml2LT5tb2R1bGUpKSB7CiAJCQlwcmludGsoImNvbWVkaTogZmFpbGVkIHRvIGluY3JlbWVudCBtb2R1bGUgY291bnRcbiIpOwpAQCAtMTgxLDcgKzE4MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKGNvbWVkaV9kcml2ZXIgKiBkcml2ZXIpCitpbnQgY29tZWRpX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgY29tZWRpX2RyaXZlciAqZHJpdmVyKQogewogCWRyaXZlci0+bmV4dCA9IGNvbWVkaV9kcml2ZXJzOwogCWNvbWVkaV9kcml2ZXJzID0gZHJpdmVyOwpAQCAtMTg5LDE1ICsxODgsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGNvbWVkaV9kcml2ZXJfdW5yZWdpc3Rlcihjb21lZGlfZHJpdmVyICogZHJpdmVyKQoraW50IGNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgY29tZWRpX2RyaXZlciAqZHJpdmVyKQogewotCWNvbWVkaV9kcml2ZXIgKnByZXY7CisJc3RydWN0IGNvbWVkaV9kcml2ZXIgKnByZXY7CiAJaW50IGk7CiAKIAkvKiBjaGVjayBmb3IgZGV2aWNlcyB1c2luZyB0aGlzIGRyaXZlciAqLwogCWZvciAoaSA9IDA7IGkgPCBDT01FRElfTlVNX0JPQVJEX01JTk9SUzsgaSsrKSB7CiAJCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbyA9IGNvbWVkaV9nZXRfZGV2aWNlX2ZpbGVfaW5mbyhpKTsKLQkJY29tZWRpX2RldmljZSAqZGV2OworCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2OwogCiAJCWlmKGRldl9maWxlX2luZm8gPT0gTlVMTCkgY29udGludWU7CiAJCWRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKQEAgLTIyNSwxMSArMjI0LDExIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgcG9zdGNvbmZpZyhjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIGludCBwb3N0Y29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKLQljb21lZGlfYXN5bmMgKmFzeW5jID0gTlVMTDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IE5VTEw7CiAJaW50IHJldDsKIAogCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CkBAIC0yNDYsNyArMjQ1LDcgQEAKIAkJCQlTREZfQ01EX1dSSVRFKSkgPT0gMCk7CiAJCQlCVUdfT04oIXMtPmRvX2NtZHRlc3QpOwogCi0JCQlhc3luYyA9IGt6YWxsb2Moc2l6ZW9mKGNvbWVkaV9hc3luYyksIEdGUF9LRVJORUwpOworCQkJYXN5bmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2FzeW5jKSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoYXN5bmMgPT0gTlVMTCkgewogCQkJCXByaW50aygiZmFpbGVkIHRvIGFsbG9jYXRlIGFzeW5jIHN0cnVjdFxuIik7CiAJCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0yOTgsOCArMjk3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotLy8gZ2VuZXJpYyByZWNvZ25pemUgZnVuY3Rpb24gZm9yIGRyaXZlcnMgdGhhdCByZWdpc3RlciB0aGVpciBzdXBwb3J0ZWQgYm9hcmQgbmFtZXMKLXZvaWQgKmNvbWVkaV9yZWNvZ25pemUoY29tZWRpX2RyaXZlciAqIGRyaXYsIGNvbnN0IGNoYXIgKm5hbWUpCisvKiAgZ2VuZXJpYyByZWNvZ25pemUgZnVuY3Rpb24gZm9yIGRyaXZlcnMgdGhhdCByZWdpc3RlciB0aGVpciBzdXBwb3J0ZWQgYm9hcmQgbmFtZXMgKi8KK3ZvaWQgKmNvbWVkaV9yZWNvZ25pemUoc3RydWN0IGNvbWVkaV9kcml2ZXIgKiBkcml2LCBjb25zdCBjaGFyICpuYW1lKQogewogCXVuc2lnbmVkIGk7CiAJY29uc3QgY2hhciAqY29uc3QgKm5hbWVfcHRyID0gZHJpdi0+Ym9hcmRfbmFtZTsKQEAgLTMxNCw3ICszMTMsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkIGNvbWVkaV9yZXBvcnRfYm9hcmRzKGNvbWVkaV9kcml2ZXIgKiBkcml2KQordm9pZCBjb21lZGlfcmVwb3J0X2JvYXJkcyhzdHJ1Y3QgY29tZWRpX2RyaXZlciAqZHJpdikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAljb25zdCBjaGFyICpjb25zdCAqbmFtZV9wdHI7CkBAIC0zMzIsMjggKzMzMSwyOCBAQAogCQlwcmludGsoIiAlc1xuIiwgZHJpdi0+ZHJpdmVyX25hbWUpOwogfQogCi1zdGF0aWMgaW50IHBvbGxfaW52YWxpZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgcG9sbF9pbnZhbGlkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCXJldHVybiAtRUlOVkFMOwogfQogCi1pbnQgaW5zbl9pbnZhbChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK2ludCBpbnNuX2ludmFsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IGluc25fcndfZW11bGF0ZV9iaXRzKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBpbnNuX3J3X2VtdWxhdGVfYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKLQljb21lZGlfaW5zbiBuZXdfaW5zbjsKKwlzdHJ1Y3QgY29tZWRpX2luc24gbmV3X2luc247CiAJaW50IHJldDsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhbm5lbHNfcGVyX2JpdGZpZWxkID0gMzI7CiAKIAl1bnNpZ25lZCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJY29uc3QgdW5zaWduZWQgYmFzZV9iaXRmaWVsZF9jaGFubmVsID0KIAkJKGNoYW4gPCBjaGFubmVsc19wZXJfYml0ZmllbGQpID8gMCA6IGNoYW47Ci0JbHNhbXBsX3QgbmV3X2RhdGFbMl07CisJdW5zaWduZWQgaW50IG5ld19kYXRhWzJdOwogCW1lbXNldChuZXdfZGF0YSwgMCwgc2l6ZW9mKG5ld19kYXRhKSk7CiAJbWVtc2V0KCZuZXdfaW5zbiwgMCwgc2l6ZW9mKG5ld19pbnNuKSk7CiAJbmV3X2luc24uaW5zbiA9IElOU05fQklUUzsKQEAgLTM4MCw3ICszNzksNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdXZpcnRfdG9fa3ZhKHBnZF90ICogcGdkLCB1bnNpZ25lZCBsb25nIGFkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1dmlydF90b19rdmEocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZHIpCiB7CiAJdW5zaWduZWQgbG9uZyByZXQgPSAwVUw7CiAJcG1kX3QgKnBtZDsKQEAgLTQxMywxMCArNDEyLDEwIEBACiAJcmV0dXJuIGt2YTsKIH0KIAotaW50IGNvbWVkaV9idWZfYWxsb2MoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCitpbnQgY29tZWRpX2J1Zl9hbGxvYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAl1bnNpZ25lZCBsb25nIG5ld19zaXplKQogewotCWNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOwogCiAJLyogUm91bmQgdXAgbmV3X3NpemUgdG8gbXVsdGlwbGUgb2YgUEFHRV9TSVpFICovCiAJbmV3X3NpemUgPSAobmV3X3NpemUgKyBQQUdFX1NJWkUgLSAxKSAmIFBBR0VfTUFTSzsKQEAgLTQyNSw3ICs0MjQsNyBAQAogCWlmIChhc3luYy0+cHJlYWxsb2NfYnVmICYmIGFzeW5jLT5wcmVhbGxvY19idWZzeiA9PSBuZXdfc2l6ZSkgewogCQlyZXR1cm4gMDsKIAl9Ci0JLy8gZGVhbGxvY2F0ZSBvbGQgYnVmZmVyCisJLyogIGRlYWxsb2NhdGUgb2xkIGJ1ZmZlciAqLwogCWlmIChhc3luYy0+cHJlYWxsb2NfYnVmKSB7CiAJCXZ1bm1hcChhc3luYy0+cHJlYWxsb2NfYnVmKTsKIAkJYXN5bmMtPnByZWFsbG9jX2J1ZiA9IE5VTEw7CkBAIC00NTQsNyArNDUzLDcgQEAKIAkJYXN5bmMtPmJ1Zl9wYWdlX2xpc3QgPSBOVUxMOwogCQlhc3luYy0+bl9idWZfcGFnZXMgPSAwOwogCX0KLQkvLyBhbGxvY2F0ZSBuZXcgYnVmZmVyCisJLyogIGFsbG9jYXRlIG5ldyBidWZmZXIgKi8KIAlpZiAobmV3X3NpemUpIHsKIAkJdW5zaWduZWQgaSA9IDA7CiAJCXVuc2lnbmVkIG5fcGFnZXMgPSBuZXdfc2l6ZSA+PiBQQUdFX1NISUZUOwpAQCAtNTM3LDE2ICs1MzYsMTUgQEAKIAogLyogbXVuZ2luZyBpcyBhcHBsaWVkIHRvIGRhdGEgYnkgY29yZSBhcyBpdCBwYXNzZXMgYmV0d2VlbiB1c2VyCiAgKiBhbmQga2VybmVsIHNwYWNlICovCi11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl9tdW5nZShjb21lZGlfYXN5bmMgKiBhc3luYywgdW5zaWduZWQgaW50IG51bV9ieXRlcykKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX211bmdlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBhc3luYy0+c3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gYXN5bmMtPnN1YmRldmljZTsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwogCWNvbnN0IHVuc2lnbmVkIG51bV9zYW1wbGVfYnl0ZXMgPSBieXRlc19wZXJfc2FtcGxlKHMpOwogCiAJaWYgKHMtPm11bmdlID09IE5VTEwgfHwgKGFzeW5jLT5jbWQuZmxhZ3MgJiBDTURGX1JBV0RBVEEpKSB7CiAJCWFzeW5jLT5tdW5nZV9jb3VudCArPSBudW1fYnl0ZXM7Ci0JCWlmICgoaW50KShhc3luYy0+bXVuZ2VfY291bnQgLSBhc3luYy0+YnVmX3dyaXRlX2NvdW50KSA+IDApCi0JCQlCVUcoKTsKKwkJQlVHX09OKChpbnQpKGFzeW5jLT5tdW5nZV9jb3VudCAtIGFzeW5jLT5idWZfd3JpdGVfY291bnQpID4gMCk7CiAJCXJldHVybiBudW1fYnl0ZXM7CiAJfQogCS8qIGRvbid0IG11bmdlIHBhcnRpYWwgc2FtcGxlcyAqLwpAQCAtNTY3LDcgKzU2NSw3IEBACiAJCXMtPm11bmdlKHMtPmRldmljZSwgcywgYXN5bmMtPnByZWFsbG9jX2J1ZiArIGFzeW5jLT5tdW5nZV9wdHIsCiAJCQlibG9ja19zaXplLCBhc3luYy0+bXVuZ2VfY2hhbik7CiAKLQkJc21wX3dtYigpOwkvL2JhcnJpZXIgaW5zdXJlcyBkYXRhIGlzIG11bmdlZCBpbiBidWZmZXIgYmVmb3JlIG11bmdlX2NvdW50IGlzIGluY3JlbWVudGVkCisJCXNtcF93bWIoKTsJLyogYmFycmllciBpbnN1cmVzIGRhdGEgaXMgbXVuZ2VkIGluIGJ1ZmZlciBiZWZvcmUgbXVuZ2VfY291bnQgaXMgaW5jcmVtZW50ZWQgKi8KIAogCQlhc3luYy0+bXVuZ2VfY2hhbiArPSBibG9ja19zaXplIC8gbnVtX3NhbXBsZV9ieXRlczsKIAkJYXN5bmMtPm11bmdlX2NoYW4gJT0gYXN5bmMtPmNtZC5jaGFubGlzdF9sZW47CkBAIC01NzYsMTIgKzU3NCwxMSBAQAogCQlhc3luYy0+bXVuZ2VfcHRyICU9IGFzeW5jLT5wcmVhbGxvY19idWZzejsKIAkJY291bnQgKz0gYmxvY2tfc2l6ZTsKIAl9Ci0JaWYgKChpbnQpKGFzeW5jLT5tdW5nZV9jb3VudCAtIGFzeW5jLT5idWZfd3JpdGVfY291bnQpID4gMCkKLQkJQlVHKCk7CisJQlVHX09OKChpbnQpKGFzeW5jLT5tdW5nZV9jb3VudCAtIGFzeW5jLT5idWZfd3JpdGVfY291bnQpID4gMCk7CiAJcmV0dXJuIGNvdW50OwogfQogCi11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9uX2F2YWlsYWJsZShjb21lZGlfYXN5bmMgKiBhc3luYykKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX25fYXZhaWxhYmxlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQogewogCXVuc2lnbmVkIGludCBmcmVlX2VuZDsKIAl1bnNpZ25lZCBpbnQgbmJ5dGVzOwpAQCAtNjAxLDcgKzU5OCw3IEBACiB9CiAKIC8qIGFsbG9jYXRlcyBjaHVuayBmb3IgdGhlIHdyaXRlciBmcm9tIGZyZWUgYnVmZmVyIHNwYWNlICovCi11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhjb21lZGlfYXN5bmMgKiBhc3luYywgdW5zaWduZWQgaW50IG5ieXRlcykKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3dyaXRlX2FsbG9jKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewogCXVuc2lnbmVkIGludCBmcmVlX2VuZCA9IGFzeW5jLT5idWZfcmVhZF9jb3VudCArIGFzeW5jLT5wcmVhbGxvY19idWZzejsKIApAQCAtNjE2LDcgKzYxMyw3IEBACiB9CiAKIC8qIGFsbG9jYXRlcyBub3RoaW5nIHVubGVzcyBpdCBjYW4gY29tcGxldGVseSBmdWxmaWxsIHRoZSByZXF1ZXN0ICovCi11bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9hbGxvY19zdHJpY3QoY29tZWRpX2FzeW5jICogYXN5bmMsCit1bnNpZ25lZCBpbnQgY29tZWRpX2J1Zl93cml0ZV9hbGxvY19zdHJpY3Qoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsCiAJdW5zaWduZWQgaW50IG5ieXRlcykKIHsKIAl1bnNpZ25lZCBpbnQgZnJlZV9lbmQgPSBhc3luYy0+YnVmX3JlYWRfY291bnQgKyBhc3luYy0+cHJlYWxsb2NfYnVmc3o7CkBAIC02MzIsNyArNjI5LDcgQEAKIH0KIAogLyogdHJhbnNmZXJzIGEgY2h1bmsgZnJvbSB3cml0ZXIgdG8gZmlsbGVkIGJ1ZmZlciBzcGFjZSAqLwotdW5zaWduZWQgY29tZWRpX2J1Zl93cml0ZV9mcmVlKGNvbWVkaV9hc3luYyAqIGFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQordW5zaWduZWQgY29tZWRpX2J1Zl93cml0ZV9mcmVlKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewogCWlmICgoaW50KShhc3luYy0+YnVmX3dyaXRlX2NvdW50ICsgbmJ5dGVzIC0KIAkJCWFzeW5jLT5idWZfd3JpdGVfYWxsb2NfY291bnQpID4gMCkgewpAQCAtNjUwLDcgKzY0Nyw3IEBACiB9CiAKIC8qIGFsbG9jYXRlcyBhIGNodW5rIGZvciB0aGUgcmVhZGVyIGZyb20gZmlsbGVkIChhbmQgbXVuZ2VkKSBidWZmZXIgc3BhY2UgKi8KLXVuc2lnbmVkIGNvbWVkaV9idWZfcmVhZF9hbGxvYyhjb21lZGlfYXN5bmMgKiBhc3luYywgdW5zaWduZWQgbmJ5dGVzKQordW5zaWduZWQgY29tZWRpX2J1Zl9yZWFkX2FsbG9jKHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCB1bnNpZ25lZCBuYnl0ZXMpCiB7CiAJaWYgKChpbnQpKGFzeW5jLT5idWZfcmVhZF9hbGxvY19jb3VudCArIG5ieXRlcyAtIGFzeW5jLT5tdW5nZV9jb3VudCkgPgogCQkwKSB7CkBAIC02NjQsOSArNjYxLDkgQEAKIH0KIAogLyogdHJhbnNmZXJzIGNvbnRyb2wgb2YgYSBjaHVuayBmcm9tIHJlYWRlciB0byBmcmVlIGJ1ZmZlciBzcGFjZSAqLwotdW5zaWduZWQgY29tZWRpX2J1Zl9yZWFkX2ZyZWUoY29tZWRpX2FzeW5jICogYXN5bmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCit1bnNpZ25lZCBjb21lZGlfYnVmX3JlYWRfZnJlZShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKLQkvLyBiYXJyaWVyIGluc3VyZXMgZGF0YSBoYXMgYmVlbiByZWFkIG91dCBvZiBidWZmZXIgYmVmb3JlIHJlYWQgY291bnQgaXMgaW5jcmVtZW50ZWQKKwkvKiAgYmFycmllciBpbnN1cmVzIGRhdGEgaGFzIGJlZW4gcmVhZCBvdXQgb2YgYnVmZmVyIGJlZm9yZSByZWFkIGNvdW50IGlzIGluY3JlbWVudGVkICovCiAJc21wX21iKCk7CiAJaWYgKChpbnQpKGFzeW5jLT5idWZfcmVhZF9jb3VudCArIG5ieXRlcyAtCiAJCQlhc3luYy0+YnVmX3JlYWRfYWxsb2NfY291bnQpID4gMCkgewpAQCAtNjgwLDcgKzY3Nyw3IEBACiAJcmV0dXJuIG5ieXRlczsKIH0KIAotdm9pZCBjb21lZGlfYnVmX21lbWNweV90byhjb21lZGlfYXN5bmMgKiBhc3luYywgdW5zaWduZWQgaW50IG9mZnNldCwKK3ZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfdG8oc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IG51bV9ieXRlcykKIHsKIAl1bnNpZ25lZCBpbnQgd3JpdGVfcHRyID0gYXN5bmMtPmJ1Zl93cml0ZV9wdHIgKyBvZmZzZXQ7CkBAIC03MDUsNyArNzAyLDcgQEAKIAl9CiB9CiAKLXZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfZnJvbShjb21lZGlfYXN5bmMgKiBhc3luYywgdW5zaWduZWQgaW50IG9mZnNldCwKK3ZvaWQgY29tZWRpX2J1Zl9tZW1jcHlfZnJvbShzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYywgdW5zaWduZWQgaW50IG9mZnNldCwKIAl2b2lkICpkZXN0LCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewogCXZvaWQgKnNyYzsKQEAgLTczMSw3ICs3MjgsNyBAQAogCX0KIH0KIAotdW5zaWduZWQgaW50IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShjb21lZGlfYXN5bmMgKiBhc3luYykKK3Vuc2lnbmVkIGludCBjb21lZGlfYnVmX3JlYWRfbl9hdmFpbGFibGUoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpCiB7CiAJdW5zaWduZWQgbnVtX2J5dGVzOwogCkBAIC03NDYsMzIgKzc0MywzMiBAQAogCXJldHVybiBudW1fYnl0ZXM7CiB9CiAKLWludCBjb21lZGlfYnVmX2dldChjb21lZGlfYXN5bmMgKiBhc3luYywgc2FtcGxfdCAqIHgpCitpbnQgY29tZWRpX2J1Zl9nZXQoc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMsIHNob3J0ICp4KQogewogCXVuc2lnbmVkIGludCBuID0gY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKGFzeW5jKTsKIAotCWlmIChuIDwgc2l6ZW9mKHNhbXBsX3QpKQorCWlmIChuIDwgc2l6ZW9mKHNob3J0KSkKIAkJcmV0dXJuIDA7Ci0JY29tZWRpX2J1Zl9yZWFkX2FsbG9jKGFzeW5jLCBzaXplb2Yoc2FtcGxfdCkpOwotCSp4ID0gKihzYW1wbF90ICopIChhc3luYy0+cHJlYWxsb2NfYnVmICsgYXN5bmMtPmJ1Zl9yZWFkX3B0cik7Ci0JY29tZWRpX2J1Zl9yZWFkX2ZyZWUoYXN5bmMsIHNpemVvZihzYW1wbF90KSk7CisJY29tZWRpX2J1Zl9yZWFkX2FsbG9jKGFzeW5jLCBzaXplb2Yoc2hvcnQpKTsKKwkqeCA9ICooc2hvcnQgKikgKGFzeW5jLT5wcmVhbGxvY19idWYgKyBhc3luYy0+YnVmX3JlYWRfcHRyKTsKKwljb21lZGlfYnVmX3JlYWRfZnJlZShhc3luYywgc2l6ZW9mKHNob3J0KSk7CiAJcmV0dXJuIDE7CiB9CiAKLWludCBjb21lZGlfYnVmX3B1dChjb21lZGlfYXN5bmMgKiBhc3luYywgc2FtcGxfdCB4KQoraW50IGNvbWVkaV9idWZfcHV0KHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jLCBzaG9ydCB4KQogewotCXVuc2lnbmVkIGludCBuID0gY29tZWRpX2J1Zl93cml0ZV9hbGxvY19zdHJpY3QoYXN5bmMsIHNpemVvZihzYW1wbF90KSk7CisJdW5zaWduZWQgaW50IG4gPSBjb21lZGlfYnVmX3dyaXRlX2FsbG9jX3N0cmljdChhc3luYywgc2l6ZW9mKHNob3J0KSk7CiAKLQlpZiAobiA8IHNpemVvZihzYW1wbF90KSkgeworCWlmIChuIDwgc2l6ZW9mKHNob3J0KSkgewogCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKIAkJcmV0dXJuIDA7CiAJfQotCSooc2FtcGxfdCAqKSAoYXN5bmMtPnByZWFsbG9jX2J1ZiArIGFzeW5jLT5idWZfd3JpdGVfcHRyKSA9IHg7Ci0JY29tZWRpX2J1Zl93cml0ZV9mcmVlKGFzeW5jLCBzaXplb2Yoc2FtcGxfdCkpOworCSooc2hvcnQgKikgKGFzeW5jLT5wcmVhbGxvY19idWYgKyBhc3luYy0+YnVmX3dyaXRlX3B0cikgPSB4OworCWNvbWVkaV9idWZfd3JpdGVfZnJlZShhc3luYywgc2l6ZW9mKHNob3J0KSk7CiAJcmV0dXJuIDE7CiB9CiAKLXZvaWQgY29tZWRpX3Jlc2V0X2FzeW5jX2J1Zihjb21lZGlfYXN5bmMgKiBhc3luYykKK3ZvaWQgY29tZWRpX3Jlc2V0X2FzeW5jX2J1ZihzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYykKIHsKIAlhc3luYy0+YnVmX3dyaXRlX2FsbG9jX2NvdW50ID0gMDsKIAlhc3luYy0+YnVmX3dyaXRlX2NvdW50ID0gMDsKQEAgLTc5MiwxNCArNzg5LDI3IEBACiAKIGludCBjb21lZGlfYXV0b19jb25maWcoc3RydWN0IGRldmljZSAqaGFyZHdhcmVfZGV2aWNlLCBjb25zdCBjaGFyICpib2FyZF9uYW1lLCBjb25zdCBpbnQgKm9wdGlvbnMsIHVuc2lnbmVkIG51bV9vcHRpb25zKQogewotCWNvbWVkaV9kZXZjb25maWcgaXQ7CisJc3RydWN0IGNvbWVkaV9kZXZjb25maWcgaXQ7CiAJaW50IG1pbm9yOwogCXN0cnVjdCBjb21lZGlfZGV2aWNlX2ZpbGVfaW5mbyAqZGV2X2ZpbGVfaW5mbzsKIAlpbnQgcmV0dmFsOworCXVuc2lnbmVkICpwcml2YXRlX2RhdGEgPSBOVUxMOworCisJaWYgKCFjb21lZGlfYXV0b2NvbmZpZykgeworCQlkZXZfc2V0X2RydmRhdGEoaGFyZHdhcmVfZGV2aWNlLCBOVUxMKTsKKwkJcmV0dXJuIDA7CisJfQogCiAJbWlub3IgPSBjb21lZGlfYWxsb2NfYm9hcmRfbWlub3IoaGFyZHdhcmVfZGV2aWNlKTsKIAlpZihtaW5vciA8IDApIHJldHVybiBtaW5vcjsKLQlkZXZfc2V0X2RydmRhdGEoaGFyZHdhcmVfZGV2aWNlLCAodm9pZCopKHVuc2lnbmVkIGxvbmcpbWlub3IpOworCisJcHJpdmF0ZV9kYXRhID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdmF0ZV9kYXRhID09IE5VTEwpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBjbGVhbnVwOworCX0KKwkqcHJpdmF0ZV9kYXRhID0gbWlub3I7CisJZGV2X3NldF9kcnZkYXRhKGhhcmR3YXJlX2RldmljZSwgcHJpdmF0ZV9kYXRhKTsKIAogCWRldl9maWxlX2luZm8gPSBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwogCkBAIC04MTIsOCArODIyLDExIEBACiAJbXV0ZXhfbG9jaygmZGV2X2ZpbGVfaW5mby0+ZGV2aWNlLT5tdXRleCk7CiAJcmV0dmFsID0gY29tZWRpX2RldmljZV9hdHRhY2goZGV2X2ZpbGVfaW5mby0+ZGV2aWNlLCAmaXQpOwogCW11dGV4X3VubG9jaygmZGV2X2ZpbGVfaW5mby0+ZGV2aWNlLT5tdXRleCk7CisKK2NsZWFudXA6CiAJaWYocmV0dmFsIDwgMCkKIAl7CisJCWtmcmVlKHByaXZhdGVfZGF0YSk7CiAJCWNvbWVkaV9mcmVlX2JvYXJkX21pbm9yKG1pbm9yKTsKIAl9CiAJcmV0dXJuIHJldHZhbDsKQEAgLTgyMSwyMCArODM0LDIzIEBACiAKIHZvaWQgY29tZWRpX2F1dG9fdW5jb25maWcoc3RydWN0IGRldmljZSAqaGFyZHdhcmVfZGV2aWNlKQogewotCXVuc2lnbmVkIGxvbmcgbWlub3IgPSAodW5zaWduZWQgbG9uZylkZXZfZ2V0X2RydmRhdGEoaGFyZHdhcmVfZGV2aWNlKTsKKwl1bnNpZ25lZCAqbWlub3IgPSAodW5zaWduZWQgKilkZXZfZ2V0X2RydmRhdGEoaGFyZHdhcmVfZGV2aWNlKTsKKwlpZihtaW5vciA9PSBOVUxMKSByZXR1cm47CiAKLQlCVUdfT04obWlub3IgPj0gQ09NRURJX05VTV9CT0FSRF9NSU5PUlMpOworCUJVR19PTigqbWlub3IgPj0gQ09NRURJX05VTV9CT0FSRF9NSU5PUlMpOwogCi0JY29tZWRpX2ZyZWVfYm9hcmRfbWlub3IobWlub3IpOworCWNvbWVkaV9mcmVlX2JvYXJkX21pbm9yKCptaW5vcik7CisJZGV2X3NldF9kcnZkYXRhKGhhcmR3YXJlX2RldmljZSwgTlVMTCk7CisJa2ZyZWUobWlub3IpOwogfQogCiBpbnQgY29tZWRpX3BjaV9hdXRvX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LCBjb25zdCBjaGFyICpib2FyZF9uYW1lKQogewogCWludCBvcHRpb25zWzJdOwogCi0JLy8gcGNpIGJ1cworCS8qICBwY2kgYnVzICovCiAJb3B0aW9uc1swXSA9IHBjaWRldi0+YnVzLT5udW1iZXI7Ci0JLy8gcGNpIHNsb3QKKwkvKiAgcGNpIHNsb3QgKi8KIAlvcHRpb25zWzFdID0gUENJX1NMT1QocGNpZGV2LT5kZXZmbik7CiAKIAlyZXR1cm4gY29tZWRpX2F1dG9fY29uZmlnKCZwY2lkZXYtPmRldiwgYm9hcmRfbmFtZSwgb3B0aW9ucywgc2l6ZW9mKG9wdGlvbnMpIC8gc2l6ZW9mKG9wdGlvbnNbMF0pKTsKQEAgLTg0NCwzICs4NjAsMTYgQEAKIHsKIAljb21lZGlfYXV0b191bmNvbmZpZygmcGNpZGV2LT5kZXYpOwogfQorCitpbnQgY29tZWRpX3VzYl9hdXRvX2NvbmZpZyhzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LAorCWNvbnN0IGNoYXIgKmJvYXJkX25hbWUpCit7CisJQlVHX09OKHVzYmRldiA9PSBOVUxMKTsKKwlyZXR1cm4gY29tZWRpX2F1dG9fY29uZmlnKCZ1c2JkZXYtPmRldiwgYm9hcmRfbmFtZSwgTlVMTCwgMCk7Cit9CisKK3ZvaWQgY29tZWRpX3VzYl9hdXRvX3VuY29uZmlnKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYpCit7CisJQlVHX09OKHVzYmRldiA9PSBOVUxMKTsKKwljb21lZGlfYXV0b191bmNvbmZpZygmdXNiZGV2LT5kZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzLzgyNTMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjUzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhhMTFhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjUzLmgKQEAgLTAsMCArMSw0MjAgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvODI1My5oCisgICAgSGVhZGVyIGZpbGUgZm9yIDgyNTMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworI2lmbmRlZiBfODI1M19ICisjZGVmaW5lIF84MjUzX0gKKworI2lmbmRlZiBDTURURVNUCisjaW5jbHVkZSAiLi4vY29tZWRpLmgiCisjZWxzZQorI2luY2x1ZGUgIi4uL2NvbWVkaS5oIgorI2VuZGlmCisKKyNkZWZpbmUgaTgyNTNfY2FzY2FkZV9uc190b190aW1lciBpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYKKworc3RhdGljIGlubGluZSB2b2lkIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdl9vbGQoaW50IGk4MjUzX29zY19iYXNlLAorCXVuc2lnbmVkIGludCAqZDEsIHVuc2lnbmVkIGludCAqZDIsIHVuc2lnbmVkIGludCAqbmFub3NlYywKKwlpbnQgcm91bmRfbW9kZSkKK3sKKwlpbnQgZGl2aWRlcjsKKwlpbnQgZGl2MSwgZGl2MjsKKwlpbnQgZGl2MV9nbGIsIGRpdjJfZ2xiLCBuc19nbGI7CisJaW50IGRpdjFfbHViLCBkaXYyX2x1YiwgbnNfbHViOworCWludCBuczsKKworCWRpdmlkZXIgPSAoKm5hbm9zZWMgKyBpODI1M19vc2NfYmFzZSAvIDIpIC8gaTgyNTNfb3NjX2Jhc2U7CisKKwkvKiBmaW5kIDIgaW50ZWdlcnMgMTw9e3gseX08PTY1NTM2IHN1Y2ggdGhhdCB4KnkgaXMKKwkgICBjbG9zZSB0byBkaXZpZGVyICovCisKKwlkaXYxX2x1YiA9IGRpdjJfbHViID0gMDsKKwlkaXYxX2dsYiA9IGRpdjJfZ2xiID0gMDsKKworCW5zX2dsYiA9IDA7CisJbnNfbHViID0gMHhmZmZmZmZmZjsKKworCWRpdjIgPSAweDEwMDAwOworCWZvciAoZGl2MSA9IGRpdmlkZXIgLyA2NTUzNiArIDE7IGRpdjEgPCBkaXYyOyBkaXYxKyspIHsKKwkJZGl2MiA9IGRpdmlkZXIgLyBkaXYxOworCisJCW5zID0gaTgyNTNfb3NjX2Jhc2UgKiBkaXYxICogZGl2MjsKKwkJaWYgKG5zIDw9ICpuYW5vc2VjICYmIG5zID4gbnNfZ2xiKSB7CisJCQluc19nbGIgPSBuczsKKwkJCWRpdjFfZ2xiID0gZGl2MTsKKwkJCWRpdjJfZ2xiID0gZGl2MjsKKwkJfQorCisJCWRpdjIrKzsKKwkJaWYgKGRpdjIgPD0gNjU1MzYpIHsKKwkJCW5zID0gaTgyNTNfb3NjX2Jhc2UgKiBkaXYxICogZGl2MjsKKwkJCWlmIChucyA+ICpuYW5vc2VjICYmIG5zIDwgbnNfbHViKSB7CisJCQkJbnNfbHViID0gbnM7CisJCQkJZGl2MV9sdWIgPSBkaXYxOworCQkJCWRpdjJfbHViID0gZGl2MjsKKwkJCX0KKwkJfQorCX0KKworCSpuYW5vc2VjID0gZGl2MV9sdWIgKiBkaXYyX2x1YiAqIGk4MjUzX29zY19iYXNlOworCSpkMSA9IGRpdjFfbHViICYgMHhmZmZmOworCSpkMiA9IGRpdjJfbHViICYgMHhmZmZmOworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfcG93ZXIoaW50IGk4MjUzX29zY19iYXNlLAorCXVuc2lnbmVkIGludCAqZDEsIHVuc2lnbmVkIGludCAqZDIsIHVuc2lnbmVkIGludCAqbmFub3NlYywKKwlpbnQgcm91bmRfbW9kZSkKK3sKKwlpbnQgZGl2MSwgZGl2MjsKKwlpbnQgYmFzZTsKKworCWZvciAoZGl2MSA9IDI7IGRpdjEgPD0gKDEgPDwgMTYpOyBkaXYxIDw8PSAxKSB7CisJCWJhc2UgPSBpODI1M19vc2NfYmFzZSAqIGRpdjE7CisJCXJvdW5kX21vZGUgJj0gVFJJR19ST1VORF9NQVNLOworCQlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKKwkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJCWRlZmF1bHQ6CisJCQlkaXYyID0gKCpuYW5vc2VjICsgYmFzZSAvIDIpIC8gYmFzZTsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJCWRpdjIgPSAoKm5hbm9zZWMpIC8gYmFzZTsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfVVA6CisJCQlkaXYyID0gKCpuYW5vc2VjICsgYmFzZSAtIDEpIC8gYmFzZTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChkaXYyIDwgMikKKwkJCWRpdjIgPSAyOworCQlpZiAoZGl2MiA8PSA2NTUzNikgeworCQkJKm5hbm9zZWMgPSBkaXYyICogYmFzZTsKKwkJCSpkMSA9IGRpdjEgJiAweGZmZmY7CisJCQkqZDIgPSBkaXYyICYgMHhmZmZmOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogc2hvdWxkbid0IGdldCBoZXJlICovCisJZGl2MSA9IDB4MTAwMDA7CisJZGl2MiA9IDB4MTAwMDA7CisJKm5hbm9zZWMgPSBkaXYxICogZGl2MiAqIGk4MjUzX29zY19iYXNlOworCSpkMSA9IGRpdjEgJiAweGZmZmY7CisJKmQyID0gZGl2MiAmIDB4ZmZmZjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihpbnQgaTgyNTNfb3NjX2Jhc2UsCisJdW5zaWduZWQgaW50ICpkMSwgdW5zaWduZWQgaW50ICpkMiwgdW5zaWduZWQgaW50ICpuYW5vc2VjLAorCWludCByb3VuZF9tb2RlKQoreworCXVuc2lnbmVkIGludCBkaXZpZGVyOworCXVuc2lnbmVkIGludCBkaXYxLCBkaXYyOworCXVuc2lnbmVkIGludCBkaXYxX2dsYiwgZGl2Ml9nbGIsIG5zX2dsYjsKKwl1bnNpZ25lZCBpbnQgZGl2MV9sdWIsIGRpdjJfbHViLCBuc19sdWI7CisJdW5zaWduZWQgaW50IG5zOworCXVuc2lnbmVkIGludCBzdGFydDsKKwl1bnNpZ25lZCBpbnQgbnNfbG93LCBuc19oaWdoOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWF4X2NvdW50ID0gMHgxMDAwMDsKKwkvKiBleGl0IGVhcmx5IGlmIGV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3JyZWN0ICh0aGlzIGNhbiBzYXZlIHRpbWUKKwkgKiBzaW5jZSB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgcmVwZWF0ZWRseSBkdXJpbmcgY29tbWFuZCB0ZXN0cworCSAqIGFuZCBleGVjdXRpb24pICovCisJZGl2MSA9ICpkMSA/ICpkMSA6IG1heF9jb3VudDsKKwlkaXYyID0gKmQyID8gKmQyIDogbWF4X2NvdW50OworCWRpdmlkZXIgPSBkaXYxICogZGl2MjsKKwlpZiAoZGl2MSAqIGRpdjIgKiBpODI1M19vc2NfYmFzZSA9PSAqbmFub3NlYyAmJgorCQlkaXYxID4gMSAmJiBkaXYxIDw9IG1heF9jb3VudCAmJgorCQlkaXYyID4gMSAmJiBkaXYyIDw9IG1heF9jb3VudCAmJgorCQkvKiBjaGVjayBmb3Igb3ZlcmZsb3cgKi8KKwkJZGl2aWRlciA+IGRpdjEgJiYgZGl2aWRlciA+IGRpdjIgJiYKKwkJZGl2aWRlciAqIGk4MjUzX29zY19iYXNlID4gZGl2aWRlciAmJgorCQlkaXZpZGVyICogaTgyNTNfb3NjX2Jhc2UgPiBpODI1M19vc2NfYmFzZSkgeworCQlyZXR1cm47CisJfQorCisJZGl2aWRlciA9ICpuYW5vc2VjIC8gaTgyNTNfb3NjX2Jhc2U7CisKKwlkaXYxX2x1YiA9IGRpdjJfbHViID0gMDsKKwlkaXYxX2dsYiA9IGRpdjJfZ2xiID0gMDsKKworCW5zX2dsYiA9IDA7CisJbnNfbHViID0gMHhmZmZmZmZmZjsKKworCWRpdjIgPSBtYXhfY291bnQ7CisJc3RhcnQgPSBkaXZpZGVyIC8gZGl2MjsKKwlpZiAoc3RhcnQgPCAyKQorCQlzdGFydCA9IDI7CisJZm9yIChkaXYxID0gc3RhcnQ7IGRpdjEgPD0gZGl2aWRlciAvIGRpdjEgKyAxICYmIGRpdjEgPD0gbWF4X2NvdW50OworCQlkaXYxKyspIHsKKwkJZm9yIChkaXYyID0gZGl2aWRlciAvIGRpdjE7CisJCQlkaXYxICogZGl2MiA8PSBkaXZpZGVyICsgZGl2MSArIDEgJiYgZGl2MiA8PSBtYXhfY291bnQ7CisJCQlkaXYyKyspIHsKKwkJCW5zID0gaTgyNTNfb3NjX2Jhc2UgKiBkaXYxICogZGl2MjsKKwkJCWlmIChucyA8PSAqbmFub3NlYyAmJiBucyA+IG5zX2dsYikgeworCQkJCW5zX2dsYiA9IG5zOworCQkJCWRpdjFfZ2xiID0gZGl2MTsKKwkJCQlkaXYyX2dsYiA9IGRpdjI7CisJCQl9CisJCQlpZiAobnMgPj0gKm5hbm9zZWMgJiYgbnMgPCBuc19sdWIpIHsKKwkJCQluc19sdWIgPSBuczsKKwkJCQlkaXYxX2x1YiA9IGRpdjE7CisJCQkJZGl2Ml9sdWIgPSBkaXYyOworCQkJfQorCQl9CisJfQorCisJcm91bmRfbW9kZSAmPSBUUklHX1JPVU5EX01BU0s7CisJc3dpdGNoIChyb3VuZF9tb2RlKSB7CisJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJZGVmYXVsdDoKKwkJbnNfaGlnaCA9IGRpdjFfbHViICogZGl2Ml9sdWIgKiBpODI1M19vc2NfYmFzZTsKKwkJbnNfbG93ID0gZGl2MV9nbGIgKiBkaXYyX2dsYiAqIGk4MjUzX29zY19iYXNlOworCQlpZiAobnNfaGlnaCAtICpuYW5vc2VjIDwgKm5hbm9zZWMgLSBuc19sb3cpIHsKKwkJCWRpdjEgPSBkaXYxX2x1YjsKKwkJCWRpdjIgPSBkaXYyX2x1YjsKKwkJfSBlbHNlIHsKKwkJCWRpdjEgPSBkaXYxX2dsYjsKKwkJCWRpdjIgPSBkaXYyX2dsYjsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfVVA6CisJCWRpdjEgPSBkaXYxX2x1YjsKKwkJZGl2MiA9IGRpdjJfbHViOworCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJZGl2MSA9IGRpdjFfZ2xiOworCQlkaXYyID0gZGl2Ml9nbGI7CisJCWJyZWFrOworCX0KKworCSpuYW5vc2VjID0gZGl2MSAqIGRpdjIgKiBpODI1M19vc2NfYmFzZTsKKwkqZDEgPSBkaXYxICYgMHhmZmZmOwkvLyBtYXNraW5nIGlzIGRvbmUgc2luY2UgY291bnRlciBtYXBzIHplcm8gdG8gMHgxMDAwMAorCSpkMiA9IGRpdjIgJiAweGZmZmY7CisJcmV0dXJuOworfQorCisjaWZuZGVmIENNRFRFU1QKKy8qIGk4MjU0X2xvYWQgcHJvZ3JhbXMgODI1NCBjb3VudGVyIGNoaXAuICBJdCBzaG91bGQgYWxzbyB3b3JrIGZvciB0aGUgODI1My4KKyAqIGJhc2VfYWRkcmVzcyBpcyB0aGUgbG93ZXN0IGlvIGFkZHJlc3MgZm9yIHRoZSBjaGlwICh0aGUgYWRkcmVzcyBvZiBjb3VudGVyIDApLgorICogY291bnRlcl9udW1iZXIgaXMgdGhlIGNvdW50ZXIgeW91IHdhbnQgdG8gbG9hZCAoMCwxIG9yIDIpCisgKiBjb3VudCBpcyB0aGUgbnVtYmVyIHRvIGxvYWQgaW50byB0aGUgY291bnRlci4KKyAqCisgKiBZb3UgcHJvYmFibHkgd2FudCB0byB1c2UgbW9kZSAyLgorICoKKyAqIFVzZSBpODI1NF9tbV9sb2FkKCkgaWYgeW91IGJvYXJkIHVzZXMgbWVtb3J5LW1hcHBlZCBpbywgaXQgaXMKKyAqIHRoZSBzYW1lIGFzIGk4MjU0X2xvYWQoKSBleGNlcHQgaXQgdXNlcyB3cml0ZWIoKSBpbnN0ZWFkIG9mIG91dGIoKS4KKyAqCisgKiBOZWl0aGVyIGk4MjU0X2xvYWQoKSBvciBpODI1NF9yZWFkKCkgZG8gdGhlaXIgbG9hZGluZy9yZWFkaW5nCisgKiBhdG9taWNhbGx5LiAgVGhlIDE2IGJpdCByZWFkL3dyaXRlcyBhcmUgcGVyZm9ybWVkIHdpdGggdHdvIHN1Y2Nlc3NpdmUKKyAqIDggYml0IHJlYWQvd3JpdGVzLiAgU28gaWYgdHdvIHBhcnRzIG9mIHlvdXIgZHJpdmVyIGRvIGEgbG9hZC9yZWFkIG9uCisgKiB0aGUgc2FtZSBjb3VudGVyLCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHByb3RlY3QgdGhlc2UgZnVuY3Rpb25zCisgKiB3aXRoIGEgc3BpbmxvY2suCisgKgorICogRk1ICisgKi8KKworI2RlZmluZSBpODI1NF9jb250cm9sX3JlZwkzCisKK3N0YXRpYyBpbmxpbmUgaW50IGk4MjU0X2xvYWQodW5zaWduZWQgbG9uZyBiYXNlX2FkZHJlc3MsIHVuc2lnbmVkIGludCByZWdzaGlmdCwKKwl1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIsIHVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IGJ5dGU7CisKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm4gLTE7CisJaWYgKGNvdW50ID4gMHhmZmZmKQorCQlyZXR1cm4gLTE7CisJaWYgKG1vZGUgPiA1KQorCQlyZXR1cm4gLTE7CisJaWYgKChtb2RlID09IDIgfHwgbW9kZSA9PSAzKSAmJiBjb3VudCA9PSAxKQorCQlyZXR1cm4gLTE7CisKKwlieXRlID0gY291bnRlcl9udW1iZXIgPDwgNjsKKwlieXRlIHw9IDB4MzA7CQkvLyBsb2FkIGxvdyB0aGVuIGhpZ2ggYnl0ZQorCWJ5dGUgfD0gKG1vZGUgPDwgMSk7CS8vIHNldCBjb3VudGVyIG1vZGUKKwlvdXRiKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChpODI1NF9jb250cm9sX3JlZyA8PCByZWdzaGlmdCkpOworCWJ5dGUgPSBjb3VudCAmIDB4ZmY7CS8vIGxzYiBvZiBjb3VudGVyIHZhbHVlCisJb3V0YihieXRlLCBiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKTsKKwlieXRlID0gKGNvdW50ID4+IDgpICYgMHhmZjsJLy8gbXNiIG9mIGNvdW50ZXIgdmFsdWUKKwlvdXRiKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGk4MjU0X21tX2xvYWQodm9pZCAqYmFzZV9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgcmVnc2hpZnQsCisJdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLCB1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCBtb2RlKQoreworCXVuc2lnbmVkIGludCBieXRlOworCisJaWYgKGNvdW50ZXJfbnVtYmVyID4gMikKKwkJcmV0dXJuIC0xOworCWlmIChjb3VudCA+IDB4ZmZmZikKKwkJcmV0dXJuIC0xOworCWlmIChtb2RlID4gNSkKKwkJcmV0dXJuIC0xOworCWlmICgobW9kZSA9PSAyIHx8IG1vZGUgPT0gMykgJiYgY291bnQgPT0gMSkKKwkJcmV0dXJuIC0xOworCisJYnl0ZSA9IGNvdW50ZXJfbnVtYmVyIDw8IDY7CisJYnl0ZSB8PSAweDMwOwkJLy8gbG9hZCBsb3cgdGhlbiBoaWdoIGJ5dGUKKwlieXRlIHw9IChtb2RlIDw8IDEpOwkvLyBzZXQgY291bnRlciBtb2RlCisJd3JpdGViKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChpODI1NF9jb250cm9sX3JlZyA8PCByZWdzaGlmdCkpOworCWJ5dGUgPSBjb3VudCAmIDB4ZmY7CS8vIGxzYiBvZiBjb3VudGVyIHZhbHVlCisJd3JpdGViKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworCWJ5dGUgPSAoY291bnQgPj4gOCkgJiAweGZmOwkvLyBtc2Igb2YgY291bnRlciB2YWx1ZQorCXdyaXRlYihieXRlLCBiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKTsKKworCXJldHVybiAwOworfQorCisvKiBSZXR1cm5zIDE2IGJpdCBjb3VudGVyIHZhbHVlLCBzaG91bGQgd29yayBmb3IgODI1MyBhbHNvLiovCitzdGF0aWMgaW5saW5lIGludCBpODI1NF9yZWFkKHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyZXNzLCB1bnNpZ25lZCBpbnQgcmVnc2hpZnQsCisJdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyKQoreworCXVuc2lnbmVkIGludCBieXRlOworCWludCByZXQ7CisKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm4gLTE7CisKKwkvLyBsYXRjaCBjb3VudGVyCisJYnl0ZSA9IGNvdW50ZXJfbnVtYmVyIDw8IDY7CisJb3V0YihieXRlLCBiYXNlX2FkZHJlc3MgKyAoaTgyNTRfY29udHJvbF9yZWcgPDwgcmVnc2hpZnQpKTsKKworCS8vIHJlYWQgbHNiCisJcmV0ID0gaW5iKGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworCS8vIHJlYWQgbXNiCisJcmV0ICs9IGluYihiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKSA8PCA4OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaTgyNTRfbW1fcmVhZCh2b2lkICpiYXNlX2FkZHJlc3MsIHVuc2lnbmVkIGludCByZWdzaGlmdCwKKwl1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIpCit7CisJdW5zaWduZWQgaW50IGJ5dGU7CisJaW50IHJldDsKKworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybiAtMTsKKworCS8vIGxhdGNoIGNvdW50ZXIKKwlieXRlID0gY291bnRlcl9udW1iZXIgPDwgNjsKKwl3cml0ZWIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGk4MjU0X2NvbnRyb2xfcmVnIDw8IHJlZ3NoaWZ0KSk7CisKKwkvLyByZWFkIGxzYgorCXJldCA9IHJlYWRiKGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworCS8vIHJlYWQgbXNiCisJcmV0ICs9IHJlYWRiKGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpIDw8IDg7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBMb2FkcyAxNiBiaXQgaW5pdGlhbCBjb3VudGVyIHZhbHVlLCBzaG91bGQgd29yayBmb3IgODI1MyBhbHNvLiAqLworc3RhdGljIGlubGluZSB2b2lkIGk4MjU0X3dyaXRlKHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyZXNzLAorCXVuc2lnbmVkIGludCByZWdzaGlmdCwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgaW50IGJ5dGU7CisKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm47CisKKwlieXRlID0gY291bnQgJiAweGZmOwkvLyBsc2Igb2YgY291bnRlciB2YWx1ZQorCW91dGIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGNvdW50ZXJfbnVtYmVyIDw8IHJlZ3NoaWZ0KSk7CisJYnl0ZSA9IChjb3VudCA+PiA4KSAmIDB4ZmY7CS8vIG1zYiBvZiBjb3VudGVyIHZhbHVlCisJb3V0YihieXRlLCBiYXNlX2FkZHJlc3MgKyAoY291bnRlcl9udW1iZXIgPDwgcmVnc2hpZnQpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGk4MjU0X21tX3dyaXRlKHZvaWQgKmJhc2VfYWRkcmVzcywKKwl1bnNpZ25lZCBpbnQgcmVnc2hpZnQsIHVuc2lnbmVkIGludCBjb3VudGVyX251bWJlciwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXVuc2lnbmVkIGludCBieXRlOworCisJaWYgKGNvdW50ZXJfbnVtYmVyID4gMikKKwkJcmV0dXJuOworCisJYnl0ZSA9IGNvdW50ICYgMHhmZjsJLy8gbHNiIG9mIGNvdW50ZXIgdmFsdWUKKwl3cml0ZWIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGNvdW50ZXJfbnVtYmVyIDw8IHJlZ3NoaWZ0KSk7CisJYnl0ZSA9IChjb3VudCA+PiA4KSAmIDB4ZmY7CS8vIG1zYiBvZiBjb3VudGVyIHZhbHVlCisJd3JpdGViKGJ5dGUsIGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworfQorCisvKiBTZXQgY291bnRlciBtb2RlLCBzaG91bGQgd29yayBmb3IgODI1MyBhbHNvLgorICogTm90ZTogdGhlICdtb2RlJyB2YWx1ZSBpcyBkaWZmZXJlbnQgdG8gdGhhdCBmb3IgaTgyNTRfbG9hZCgpIGFuZCBjb21lcworICogZnJvbSB0aGUgSU5TTl9DT05GSUdfODI1NF9TRVRfTU9ERSBjb21tYW5kOgorICogICBJODI1NF9NT0RFMCwgSTgyNTRfTU9ERTEsIC4uLiwgSTgyNTRfTU9ERTUKKyAqIE9SJ2VkIHdpdGg6CisgKiAgIEk4MjU0X0JDRCwgSTgyNTRfQklOQVJZCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGk4MjU0X3NldF9tb2RlKHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyZXNzLAorCXVuc2lnbmVkIGludCByZWdzaGlmdCwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgYnl0ZTsKKworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybiAtMTsKKwlpZiAobW9kZSA+IChJODI1NF9NT0RFNSB8IEk4MjU0X0JJTkFSWSkpCisJCXJldHVybiAtMTsKKworCWJ5dGUgPSBjb3VudGVyX251bWJlciA8PCA2OworCWJ5dGUgfD0gMHgzMDsJCS8vIGxvYWQgbG93IHRoZW4gaGlnaCBieXRlCisJYnl0ZSB8PSBtb2RlOwkJLy8gc2V0IGNvdW50ZXIgbW9kZSBhbmQgQkNEfGJpbmFyeQorCW91dGIoYnl0ZSwgYmFzZV9hZGRyZXNzICsgKGk4MjU0X2NvbnRyb2xfcmVnIDw8IHJlZ3NoaWZ0KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaTgyNTRfbW1fc2V0X21vZGUodm9pZCAqYmFzZV9hZGRyZXNzLAorCXVuc2lnbmVkIGludCByZWdzaGlmdCwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgYnl0ZTsKKworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybiAtMTsKKwlpZiAobW9kZSA+IChJODI1NF9NT0RFNSB8IEk4MjU0X0JJTkFSWSkpCisJCXJldHVybiAtMTsKKworCWJ5dGUgPSBjb3VudGVyX251bWJlciA8PCA2OworCWJ5dGUgfD0gMHgzMDsJCS8vIGxvYWQgbG93IHRoZW4gaGlnaCBieXRlCisJYnl0ZSB8PSBtb2RlOwkJLy8gc2V0IGNvdW50ZXIgbW9kZSBhbmQgQkNEfGJpbmFyeQorCXdyaXRlYihieXRlLCBiYXNlX2FkZHJlc3MgKyAoaTgyNTRfY29udHJvbF9yZWcgPDwgcmVnc2hpZnQpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBpODI1NF9zdGF0dXModW5zaWduZWQgbG9uZyBiYXNlX2FkZHJlc3MsCisJdW5zaWduZWQgaW50IHJlZ3NoaWZ0LCB1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIpCit7CisJb3V0YigweEUwIHwgKDIgPDwgY291bnRlcl9udW1iZXIpLAorCQliYXNlX2FkZHJlc3MgKyAoaTgyNTRfY29udHJvbF9yZWcgPDwgcmVnc2hpZnQpKTsKKwlyZXR1cm4gaW5iKGJhc2VfYWRkcmVzcyArIChjb3VudGVyX251bWJlciA8PCByZWdzaGlmdCkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBpODI1NF9tbV9zdGF0dXModm9pZCAqYmFzZV9hZGRyZXNzLAorCXVuc2lnbmVkIGludCByZWdzaGlmdCwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyKQoreworCXdyaXRlYigweEUwIHwgKDIgPDwgY291bnRlcl9udW1iZXIpLAorCQliYXNlX2FkZHJlc3MgKyAoaTgyNTRfY29udHJvbF9yZWcgPDwgcmVnc2hpZnQpKTsKKwlyZXR1cm4gcmVhZGIoYmFzZV9hZGRyZXNzICsgKGNvdW50ZXJfbnVtYmVyIDw8IHJlZ3NoaWZ0KSk7Cit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjU1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjljN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5jCkBAIC0wLDAgKzEsNDQyIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzLzgyNTUuYworICAgIERyaXZlciBmb3IgODI1NQorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogODI1NQorRGVzY3JpcHRpb246IGdlbmVyaWMgODI1NSBzdXBwb3J0CitEZXZpY2VzOiBbc3RhbmRhcmRdIDgyNTUgKDgyNTUpCitBdXRob3I6IGRzCitTdGF0dXM6IHdvcmtzCitVcGRhdGVkOiBGcmksICA3IEp1biAyMDAyIDEyOjU2OjQ1IC0wNzAwCisKK1RoZSBjbGFzc2ljIGluIGRpZ2l0YWwgSS9PLiAgVGhlIDgyNTUgYXBwZWFycyBpbiBDb21lZGkgYXMgYSBzaW5nbGUKK2RpZ2l0YWwgSS9PIHN1YmRldmljZSB3aXRoIDI0IGNoYW5uZWxzLiAgVGhlIGNoYW5uZWwgMCBjb3JyZXNwb25kcwordG8gdGhlIDgyNTUncyBwb3J0IEEsIGJpdCAwOyBjaGFubmVsIDIzIGNvcnJlc3BvbmRzIHRvIHBvcnQgQywgYml0Cis3LiAgRGlyZWN0aW9uIGNvbmZpZ3VyYXRpb24gaXMgZG9uZSBpbiBibG9ja3MsIHdpdGggY2hhbm5lbHMgMC03LAorOC0xNSwgMTYtMTksIGFuZCAyMC0yMyBtYWtpbmcgdXAgdGhlIDQgYmxvY2tzLiAgVGhlIG9ubHkgODI1NSBtb2RlCitzdXBwb3J0ZWQgaXMgbW9kZSAwLgorCitZb3Ugc2hvdWxkIGVuYWJsZSBjb21waWxhdGlvbiB0aGlzIGRyaXZlciBpZiB5b3UgcGxhbiB0byB1c2UgYSBib2FyZAordGhhdCBoYXMgYW4gODI1NSBjaGlwLiAgRm9yIG11bHRpZnVuY3Rpb24gYm9hcmRzLCB0aGUgbWFpbiBkcml2ZXIgd2lsbAorY29uZmlndXJlIHRoZSA4MjU1IHN1YmRldmljZSBhdXRvbWF0aWNhbGx5LgorCitUaGlzIGRyaXZlciBhbHNvIHdvcmtzIGluZGVwZW5kZW50bHkgd2l0aCBJU0EgYW5kIFBDSSBjYXJkcyB0aGF0CitkaXJlY3RseSBtYXAgdGhlIDgyNTUgcmVnaXN0ZXJzIHRvIEkvTyBwb3J0cywgaW5jbHVkaW5nIGNhcmRzIHdpdGgKK211bHRpcGxlIDgyNTUgY2hpcHMuICBUbyBjb25maWd1cmUgdGhlIGRyaXZlciBmb3Igc3VjaCBhIGNhcmQsIHRoZQorb3B0aW9uIGxpc3Qgc2hvdWxkIGJlIGEgbGlzdCBvZiB0aGUgSS9PIHBvcnQgYmFzZXMgZm9yIGVhY2ggb2YgdGhlCis4MjU1IGNoaXBzLiAgRm9yIGV4YW1wbGUsCisKKyAgY29tZWRpX2NvbmZpZyAvZGV2L2NvbWVkaTAgODI1NSAweDIwMCwweDIwNCwweDIwOCwweDIwYworCitOb3RlIHRoYXQgbW9zdCBQQ0kgODI1NSBib2FyZHMgZG8gTk9UIHdvcmsgd2l0aCB0aGlzIGRyaXZlciwgYW5kCituZWVkIGEgc2VwYXJhdGUgZHJpdmVyIGFzIGEgd3JhcHBlci4gIEZvciB0aG9zZSB0aGF0IGRvIHdvcmssIHRoZQorSS9PIHBvcnQgYmFzZSBhZGRyZXNzIGNhbiBiZSBmb3VuZCBpbiB0aGUgb3V0cHV0IG9mICdsc3BjaSAtdicuCisKKyovCisKKy8qCisgICBUaGlzIGZpbGUgY29udGFpbnMgYW4gZXhwb3J0ZWQgc3ViZGV2aWNlIGZvciBkcml2aW5nIGFuIDgyNTUuCisKKyAgIFRvIHVzZSB0aGlzIHN1YmRldmljZSBhcyBwYXJ0IG9mIGFub3RoZXIgZHJpdmVyLCB5b3UgbmVlZCB0bworICAgc2V0IHVwIHRoZSBzdWJkZXZpY2UgaW4gdGhlIGF0dGFjaCBmdW5jdGlvbiBvZiB0aGUgZHJpdmVyIGJ5CisgICBjYWxsaW5nOgorCisgICAgIHN1YmRldl84MjU1X2luaXQoZGV2aWNlLCBzdWJkZXZpY2UsIGNhbGxiYWNrX2Z1bmN0aW9uLCBhcmcpCisKKyAgIGRldmljZSBhbmQgc3ViZGV2aWNlIGFyZSBwb2ludGVycyB0byB0aGUgZGV2aWNlIGFuZCBzdWJkZXZpY2UKKyAgIHN0cnVjdHVyZXMuICBjYWxsYmFja19mdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB0byBwcm92aWRlIHRoZQorICAgbG93LWxldmVsIGlucHV0L291dHB1dCB0byB0aGUgZGV2aWNlLCBpLmUuLCBhY3R1YWwgcmVnaXN0ZXIKKyAgIGFjY2Vzcy4gIGNhbGxiYWNrX2Z1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHZhbHVlIG9mIGFyZworICAgYXMgdGhlIGxhc3QgcGFyYW1ldGVyLiAgSWYgdGhlIDgyNTUgZGV2aWNlIGlzIG1hcHBlZCBhcyA0CisgICBjb25zZWN1dGl2ZSBJL08gcG9ydHMsIHlvdSBjYW4gdXNlIE5VTEwgZm9yIGNhbGxiYWNrX2Z1bmN0aW9uCisgICBhbmQgdGhlIEkvTyBwb3J0IGJhc2UgZm9yIGFyZywgYW5kIGFuIGludGVybmFsIGZ1bmN0aW9uIHdpbGwKKyAgIGhhbmRsZSB0aGUgcmVnaXN0ZXIgYWNjZXNzLgorCisgICBJbiBhZGRpdGlvbiwgaWYgdGhlIG1haW4gZHJpdmVyIGhhbmRsZXMgaW50ZXJydXB0cywgeW91IGNhbgorICAgZW5hYmxlIGNvbW1hbmRzIG9uIHRoZSBzdWJkZXZpY2UgYnkgY2FsbGluZyBzdWJkZXZfODI1NV9pbml0X2lycSgpCisgICBpbnN0ZWFkLiAgVGhlbiwgd2hlbiB5b3UgZ2V0IGFuIGludGVycnVwdCB0aGF0IGlzIGxpa2VseSB0byBiZQorICAgZnJvbSB0aGUgODI1NSwgeW91IHNob3VsZCBjYWxsIHN1YmRldl84MjU1X2ludGVycnVwdCgpLCB3aGljaAorICAgd2lsbCBjb3B5IHRoZSBsYXRjaGVkIHZhbHVlIHRvIGEgQ29tZWRpIGJ1ZmZlci4KKyAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBfODI1NV9TSVpFIDQKKworI2RlZmluZSBfODI1NV9EQVRBIDAKKyNkZWZpbmUgXzgyNTVfQ1IgMworCisjZGVmaW5lIENSX0NfTE9fSU8JMHgwMQorI2RlZmluZSBDUl9CX0lPCQkweDAyCisjZGVmaW5lIENSX0JfTU9ERQkweDA0CisjZGVmaW5lIENSX0NfSElfSU8JMHgwOAorI2RlZmluZSBDUl9BX0lPCQkweDEwCisjZGVmaW5lIENSX0FfTU9ERShhKQkoKGEpPDw1KQorI2RlZmluZSBDUl9DVwkJMHg4MAorCitzdHJ1Y3Qgc3ViZGV2XzgyNTVfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGNiX2FyZzsKKwlpbnQgKCpjYl9mdW5jKSAoaW50LCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7CisJaW50IGhhdmVfaXJxOworfTsKKworI2RlZmluZSBDQUxMQkFDS19BUkcJKCgoc3RydWN0IHN1YmRldl84MjU1X3N0cnVjdCAqKXMtPnByaXZhdGUpLT5jYl9hcmcpCisjZGVmaW5lIENBTExCQUNLX0ZVTkMJKCgoc3RydWN0IHN1YmRldl84MjU1X3N0cnVjdCAqKXMtPnByaXZhdGUpLT5jYl9mdW5jKQorI2RlZmluZSBzdWJkZXZwcml2CSgoc3RydWN0IHN1YmRldl84MjU1X3N0cnVjdCAqKXMtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgZGV2XzgyNTVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkZXZfODI1NV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyXzgyNTUgPSB7CisgICAgICBkcml2ZXJfbmFtZToiODI1NSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGV2XzgyNTVfYXR0YWNoLAorICAgICAgZGV0YWNoOmRldl84MjU1X2RldGFjaCwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfODI1NSk7CisKK3N0YXRpYyB2b2lkIGRvX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCit2b2lkIHN1YmRldl84MjU1X2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc2hvcnQgZDsKKworCWQgPSBDQUxMQkFDS19GVU5DKDAsIF84MjU1X0RBVEEsIDAsIENBTExCQUNLX0FSRyk7CisJZCB8PSAoQ0FMTEJBQ0tfRlVOQygwLCBfODI1NV9EQVRBICsgMSwgMCwgQ0FMTEJBQ0tfQVJHKSA8PCA4KTsKKworCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBkKTsKKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT1M7CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworc3RhdGljIGludCBzdWJkZXZfODI1NV9jYihpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gYXJnOworCisJaWYgKGRpcikgeworCQlvdXRiKGRhdGEsIGlvYmFzZSArIHBvcnQpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gaW5iKGlvYmFzZSArIHBvcnQpOworCX0KK30KKworc3RhdGljIGludCBzdWJkZXZfODI1NV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCisJCWlmIChkYXRhWzBdICYgMHhmZikKKwkJCUNBTExCQUNLX0ZVTkMoMSwgXzgyNTVfREFUQSwgcy0+c3RhdGUgJiAweGZmLAorCQkJCUNBTExCQUNLX0FSRyk7CisJCWlmIChkYXRhWzBdICYgMHhmZjAwKQorCQkJQ0FMTEJBQ0tfRlVOQygxLCBfODI1NV9EQVRBICsgMSwgKHMtPnN0YXRlID4+IDgpICYgMHhmZiwKKwkJCQlDQUxMQkFDS19BUkcpOworCQlpZiAoZGF0YVswXSAmIDB4ZmYwMDAwKQorCQkJQ0FMTEJBQ0tfRlVOQygxLCBfODI1NV9EQVRBICsgMiwKKwkJCQkocy0+c3RhdGUgPj4gMTYpICYgMHhmZiwgQ0FMTEJBQ0tfQVJHKTsKKwl9CisKKwlkYXRhWzFdID0gQ0FMTEJBQ0tfRlVOQygwLCBfODI1NV9EQVRBLCAwLCBDQUxMQkFDS19BUkcpOworCWRhdGFbMV0gfD0gKENBTExCQUNLX0ZVTkMoMCwgXzgyNTVfREFUQSArIDEsIDAsIENBTExCQUNLX0FSRykgPDwgOCk7CisJZGF0YVsxXSB8PSAoQ0FMTEJBQ0tfRlVOQygwLCBfODI1NV9EQVRBICsgMiwgMCwgQ0FMTEJBQ0tfQVJHKSA8PCAxNik7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBzdWJkZXZfODI1NV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwl1bnNpZ25lZCBpbnQgYml0czsKKworCW1hc2sgPSAxIDw8IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmIChtYXNrICYgMHgwMDAwZmYpIHsKKwkJYml0cyA9IDB4MDAwMGZmOworCX0gZWxzZSBpZiAobWFzayAmIDB4MDBmZjAwKSB7CisJCWJpdHMgPSAweDAwZmYwMDsKKwl9IGVsc2UgaWYgKG1hc2sgJiAweDBmMDAwMCkgeworCQliaXRzID0gMHgwZjAwMDA7CisJfSBlbHNlIHsKKwkJYml0cyA9IDB4ZjAwMDAwOworCX0KKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH5iaXRzOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gYml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIGJpdHMpID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRvX2NvbmZpZyhkZXYsIHMpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IGNvbmZpZzsKKworCWNvbmZpZyA9IENSX0NXOworCS8qIDEgaW4gaW9fYml0cyBpbmRpY2F0ZXMgb3V0cHV0LCAxIGluIGNvbmZpZyBpbmRpY2F0ZXMgaW5wdXQgKi8KKwlpZiAoIShzLT5pb19iaXRzICYgMHgwMDAwZmYpKQorCQljb25maWcgfD0gQ1JfQV9JTzsKKwlpZiAoIShzLT5pb19iaXRzICYgMHgwMGZmMDApKQorCQljb25maWcgfD0gQ1JfQl9JTzsKKwlpZiAoIShzLT5pb19iaXRzICYgMHgwZjAwMDApKQorCQljb25maWcgfD0gQ1JfQ19MT19JTzsKKwlpZiAoIShzLT5pb19iaXRzICYgMHhmMDAwMDApKQorCQljb25maWcgfD0gQ1JfQ19ISV9JTzsKKwlDQUxMQkFDS19GVU5DKDEsIF84MjU1X0NSLCBjb25maWcsIENBTExCQUNLX0FSRyk7Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzgyNTVfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIHN0ZXAgMSAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDIgKi8KKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSAxKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJY21kLT5zdG9wX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0ICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1YmRldl84MjU1X2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLyogRklYTUUgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1YmRldl84MjU1X2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLyogRklYTUUgKi8KKworCXJldHVybiAwOworfQorCitpbnQgc3ViZGV2XzgyNTVfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIGludCAoKmNiKSAoaW50LAorCQlpbnQsIGludCwgdW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDI0OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+bWF4ZGF0YSA9IDE7CisKKwlzLT5wcml2YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN1YmRldl84MjU1X3N0cnVjdCksIEdGUF9LRVJORUwpOworCWlmICghcy0+cHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlDQUxMQkFDS19BUkcgPSBhcmc7CisJaWYgKGNiID09IE5VTEwpIHsKKwkJQ0FMTEJBQ0tfRlVOQyA9IHN1YmRldl84MjU1X2NiOworCX0gZWxzZSB7CisJCUNBTExCQUNLX0ZVTkMgPSBjYjsKKwl9CisJcy0+aW5zbl9iaXRzID0gc3ViZGV2XzgyNTVfaW5zbjsKKwlzLT5pbnNuX2NvbmZpZyA9IHN1YmRldl84MjU1X2luc25fY29uZmlnOworCisJcy0+c3RhdGUgPSAwOworCXMtPmlvX2JpdHMgPSAwOworCWRvX2NvbmZpZyhkZXYsIHMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzdWJkZXZfODI1NV9pbml0X2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50ICgqY2IpIChpbnQsIGludCwgaW50LCB1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJldDsKKworCXJldCA9IHN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBjYiwgYXJnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMtPmRvX2NtZHRlc3QgPSBzdWJkZXZfODI1NV9jbWR0ZXN0OworCXMtPmRvX2NtZCA9IHN1YmRldl84MjU1X2NtZDsKKwlzLT5jYW5jZWwgPSBzdWJkZXZfODI1NV9jYW5jZWw7CisKKwlzdWJkZXZwcml2LT5oYXZlX2lycSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzdWJkZXZfODI1NV9jbGVhbnVwKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpZiAocy0+cHJpdmF0ZSkgeworCQlpZiAoc3ViZGV2cHJpdi0+aGF2ZV9pcnEpIHsKKwkJfQorCisJCWtmcmVlKHMtPnByaXZhdGUpOworCX0KK30KKworLyoKKworICAgU3RhcnQgb2YgdGhlIDgyNTUgc3RhbmRhbG9uZSBkZXZpY2UKKworICovCisKK3N0YXRpYyBpbnQgZGV2XzgyNTVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6IDgyNTU6IiwgZGV2LT5taW5vcik7CisKKwlkZXYtPmJvYXJkX25hbWUgPSAiODI1NSI7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ09NRURJX05ERVZDT05GT1BUUzsgaSsrKSB7CisJCWlvYmFzZSA9IGl0LT5vcHRpb25zW2ldOworCQlpZiAoIWlvYmFzZSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSAwKSB7CisJCXByaW50aygiIG5vIGRldmljZXMgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgaSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CisJCWlvYmFzZSA9IGl0LT5vcHRpb25zW2ldOworCisJCXByaW50aygiIDB4JTA0bHgiLCBpb2Jhc2UpOworCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgXzgyNTVfU0laRSwgIjgyNTUiKSkgeworCQkJcHJpbnRrKCIgKEkvTyBwb3J0IGNvbmZsaWN0KSIpOworCisJCQlkZXYtPnN1YmRldmljZXNbaV0udHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwkJfSBlbHNlIHsKKwkJCXN1YmRldl84MjU1X2luaXQoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBpLCBOVUxMLAorCQkJCWlvYmFzZSk7CisJCX0KKwl9CisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZXZfODI1NV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCXByaW50aygiY29tZWRpJWQ6IDgyNTU6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgaTsKKwkJaWYgKHMtPnR5cGUgIT0gQ09NRURJX1NVQkRfVU5VU0VEKSB7CisJCQlpb2Jhc2UgPSBDQUxMQkFDS19BUkc7CisJCQlyZWxlYXNlX3JlZ2lvbihpb2Jhc2UsIF84MjU1X1NJWkUpOworCQl9CisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChzdWJkZXZfODI1NV9pbml0KTsKK0VYUE9SVF9TWU1CT0woc3ViZGV2XzgyNTVfaW5pdF9pcnEpOworRVhQT1JUX1NZTUJPTChzdWJkZXZfODI1NV9jbGVhbnVwKTsKK0VYUE9SVF9TWU1CT0woc3ViZGV2XzgyNTVfaW50ZXJydXB0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy84MjU1LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OTMxMWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvODI1NS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgICAgbW9kdWxlLzgyNTUuaAorICAgIEhlYWRlciBmaWxlIGZvciA4MjU1CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpZm5kZWYgXzgyNTVfSAorI2RlZmluZSBfODI1NV9ICisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2lmIGRlZmluZWQoQ09ORklHX0NPTUVESV84MjU1KSB8fCBkZWZpbmVkKENPTkZJR19DT01FRElfODI1NV9NT0RVTEUpCisKK2ludCBzdWJkZXZfODI1NV9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50ICgqY2IpIChpbnQsIGludCwgaW50LCB1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBhcmcpOworaW50IHN1YmRldl84MjU1X2luaXRfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50ICgqY2IpIChpbnQsIGludCwgaW50LCB1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBhcmcpOwordm9pZCBzdWJkZXZfODI1NV9jbGVhbnVwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOwordm9pZCBzdWJkZXZfODI1NV9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHN1YmRldl84MjU1X2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl2b2lkICp4LCB1bnNpZ25lZCBsb25nIHkpCit7CisJcHJpbnRrKCI4MjU1IHN1cHBvcnQgbm90IGNvbmZpZ3VyZWQgLS0gZGlzYWJsaW5nIHN1YmRldmljZVxuIik7CisKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdWJkZXZfODI1NV9jbGVhbnVwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL01ha2VmaWxlCmluZGV4IGViN2E2MTUuLjEyZDZlNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTgsMTIgKzgsMTIxIEBACiBvYmotJChDT05GSUdfQ09NRURJKQkJCSs9IGNvbWVkaV9wYXJwb3J0Lm8KIAogIyBDb21lZGkgUENJIGRyaXZlcnMKLW9iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG1pdGUubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gODI1NS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhY2w3MjI1Yi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZGRpX2FwY2lfMDM1Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8xMDMyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8xNTAwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8xNTE2Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8xNTY0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8xNnh4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8yMDE2Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8yMDMyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8yMjAwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8zMDAxLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8zMTIwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8zNTAxLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkZGlfYXBjaV8zeHh4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkbF9wY2k2MjA4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkbF9wY2k3Mjk2Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkbF9wY2k3NDMyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkbF9wY2k4MTY0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkbF9wY2k5MTExLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkbF9wY2k5MTE4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFkcTEyYi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZHZfcGNpMTcxMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZHZfcGNpMTcyMy5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhZHZfcGNpX2Rpby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhaW9fYWlvMTJfOC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhaW9faWlyb18xNi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBhbXBsY19kaW8yMDAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYW1wbGNfcGMyMzYubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYW1wbGNfcGMyNjMubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gYW1wbGNfcGNpMjI0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGFtcGxjX3BjaTIzMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBjNnhkaWdpby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBjYl9wY2lkYXM2NC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBjYl9wY2lkYXMubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY2JfcGNpZGRhLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGNiX3BjaWRpby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBjYl9wY2ltZGFzLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGNiX3BjaW1kZGEubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY29tZWRpX2JvbmQubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY29tZWRpX3BhcnBvcnQubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY29tZWRpX3Rlc3Qubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gY29udGVjX3BjaV9kaW8ubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZGFxYm9hcmQyMDAwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGRhczA4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGRhczE2bTEubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZGFzMTYubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZGFzMTgwMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkYXM2NDAyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGRhczgwMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkbW0zMmF0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGR0MjgwMS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkdDI4MTEubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZHQyODE0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGR0MjgxNS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBkdDI4MTcubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gZHQyODJ4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGR0MzAwMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBmbDUxMi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBnc2NfaHBkaS5vCiBvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBpY3BfbXVsdGkubwotb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbWVfZGFxLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IGlpX3BjaTIwa2Mubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0ganIzX3BjaS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBrZV9jb3VudGVyLm8KIG9iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG1lNDAwMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBtZV9kYXEubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbWl0ZS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBtcGM2MjQubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbXVsdGlxMy5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV82NTI3Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pXzY1eHgubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbmlfNjYweC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV82NzB4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX2F0X2EyMTUwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX2F0X2FvLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX2F0bWlvMTZkLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX2F0bWlvLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX2xhYnBjLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX3BjaWRpby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBuaV9wY2ltaW8ubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gbmlfdGlvY21kLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IG5pX3Rpby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY2w3MTEubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNsNzI0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBjbDcyNS5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY2w3MjYubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNsNzMwLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBjbDgxMi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY2w4MTYubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNsODE4Lm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBjbTM3MjQubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcGNtMzczMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY21hZC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY21kYTEyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHBjbW1pby5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBwY211aW8ubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcG9jLm8KIG9iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHJ0ZDUyMC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBydGk4MDAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gcnRpODAyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHM1MjYubwogb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gczYyNi5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSBzZXJpYWwyMDAyLm8KK29iai0kKENPTkZJR19DT01FRElfUENJX0RSSVZFUlMpCSs9IHNrZWwubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ0lfRFJJVkVSUykJKz0gc3N2X2RucC5vCitvYmotJChDT05GSUdfQ09NRURJX1BDSV9EUklWRVJTKQkrPSB1bmlveHg1Lm8KKworIyBDb21lZGkgUENNQ0lBIGRyaXZlcnMKK29iai0kKENPTkZJR19DT01FRElfUENNQ0lBX0RSSVZFUlMpCSs9IGNiX2RhczE2X2NzLm8KK29iai0kKENPTkZJR19DT01FRElfUENNQ0lBX0RSSVZFUlMpCSs9IGRhczA4X2NzLm8KK29iai0kKENPTkZJR19DT01FRElfUENNQ0lBX0RSSVZFUlMpCSs9IG5pX2RhcV83MDAubworb2JqLSQoQ09ORklHX0NPTUVESV9QQ01DSUFfRFJJVkVSUykJKz0gbmlfZGFxX2RpbzI0Lm8KK29iai0kKENPTkZJR19DT01FRElfUENNQ0lBX0RSSVZFUlMpCSs9IG5pX2xhYnBjX2NzLm8KK29iai0kKENPTkZJR19DT01FRElfUENNQ0lBX0RSSVZFUlMpCSs9IG5pX21pb19jcy5vCitvYmotJChDT05GSUdfQ09NRURJX1BDTUNJQV9EUklWRVJTKQkrPSBxdWF0ZWNoX2RhcXBfY3MubwogCiAjIENvbWVkaSBVU0IgZHJpdmVycwogb2JqLSQoQ09ORklHX0NPTUVESV9VU0JfRFJJVkVSUykJKz0gdXNiZHV4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hY2w3MjI1Yi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FjbDcyMjViLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIxMzIwZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hY2w3MjI1Yi5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogY29tZWRpL2RyaXZlcnMvYWNsNzIyNWIuYworICogRHJpdmVyIGZvciBBZGxpbmsgTnVEQVEgQUNMLTcyMjViIGFuZCBjbG9uZXMKKyAqIEpvc8OpIEx1aXMgU8OhbmNoZXoKKyAqLworLyoKK0RyaXZlcjogYWNsNzIyNWIKK0Rlc2NyaXB0aW9uOiBBZGxpbmsgTnVEQVEgQUNMLTcyMjViICYgY29tcGF0aWJsZXMKK0F1dGhvcjogSm9zw6kgTHVpcyBTw6FuY2hleiAoanNhbmNoZXp2QHRlbGVsaW5lLmVzKQorU3RhdHVzOiB0ZXN0aW5nCitEZXZpY2VzOiBbQWRsaW5rXSBBQ0wtNzIyNWIgKGFjbDcyMjViKSwgW0lDUF0gUDE2UjE2RElPIChwMTZyMTZkaW8pCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBBQ0w3MjI1X1NJWkUgICA4CS8qIFJlcXVpcmVzIDggaW9wb3J0cywgYnV0IG9ubHkgNCBhcmUgdXNlZCAqLworI2RlZmluZSBQMTZSMTZESU9fU0laRSA0CisjZGVmaW5lIEFDTDcyMjVfUklPX0xPIDAJLyogUmVsYXlzIGlucHV0L291dHB1dCBsb3cgYnl0ZSAoUjAtUjcpICovCisjZGVmaW5lIEFDTDcyMjVfUklPX0hJIDEJLyogUmVsYXlzIGlucHV0L291dHB1dCBoaWdoIGJ5dGUgKFI4LVIxNSkgKi8KKyNkZWZpbmUgQUNMNzIyNV9ESV9MTyAgMgkvKiBEaWdpdGFsIGlucHV0IGxvdyBieXRlIChESTAtREk3KSAqLworI2RlZmluZSBBQ0w3MjI1X0RJX0hJICAzCS8qIERpZ2l0YWwgaW5wdXQgaGlnaCBieXRlIChESTgtREkxNSkgKi8KKworc3RhdGljIGludCBhY2w3MjI1Yl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGFjbDcyMjViX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKKworc3RydWN0IGJvYXJkdHlwZSB7CisJY29uc3QgY2hhciAqbmFtZTsJLy8gZHJpdmVyIG5hbWUKKwlpbnQgaW9fcmFuZ2U7CQkvLyBsZW4gb2YgSS9PIHNwYWNlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJvYXJkdHlwZSBib2FyZHR5cGVzW10gPSB7CisJeyJhY2w3MjI1YiIsIEFDTDcyMjVfU0laRSx9LAorCXsicDE2cjE2ZGlvIiwgUDE2UjE2RElPX1NJWkUsfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBib2FyZHR5cGUpKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IGJvYXJkdHlwZSAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FjbDcyMjViID0geworICAgICAgZHJpdmVyX25hbWU6ImFjbDcyMjViIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphY2w3MjI1Yl9hdHRhY2gsCisgICAgICBkZXRhY2g6YWNsNzIyNWJfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IGJvYXJkdHlwZSksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2FjbDcyMjViKTsKKworc3RhdGljIGludCBhY2w3MjI1Yl9kb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJfQorCWlmIChkYXRhWzBdICYgMHgwMGZmKQorCQlvdXRiKHMtPnN0YXRlICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyAodW5zaWduZWQgbG9uZylzLT5wcml2YXRlKTsKKwlpZiAoZGF0YVswXSAmIDB4ZmYwMCkKKwkJb3V0Yigocy0+c3RhdGUgPj4gOCksCisJCQlkZXYtPmlvYmFzZSArICh1bnNpZ25lZCBsb25nKXMtPnByaXZhdGUgKyAxKTsKKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFjbDcyMjViX2RpX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgKHVuc2lnbmVkIGxvbmcpcy0+cHJpdmF0ZSkgfAorCQkoaW5iKGRldi0+aW9iYXNlICsgKHVuc2lnbmVkIGxvbmcpcy0+cHJpdmF0ZSArIDEpIDw8IDgpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWNsNzIyNWJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGlvYmFzZSwgaW9yYW5nZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlvcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKKwlwcmludGsoImNvbWVkaSVkOiBhY2w3MjI1YjogYm9hcmQ9JXMgMHglMDR4ICIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIGlvcmFuZ2UsICJhY2w3MjI1YiIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmlycSA9IDA7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDMpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBSZWxheXMgb3V0cHV0cyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gYWNsNzIyNWJfZG9faW5zbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKUFDTDcyMjVfUklPX0xPOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogUmVsYXlzIHN0YXR1cyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gYWNsNzIyNWJfZGlfaW5zbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKUFDTDcyMjVfUklPX0xPOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogSXNvbGF0ZWQgZGlnaXRhbCBpbnB1dHMgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDE2OworCXMtPmluc25fYml0cyA9IGFjbDcyMjViX2RpX2luc247CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilBQ0w3MjI1X0RJX0xPOworCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWNsNzIyNWJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogYWNsNzIyNWI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzX2JvYXJkLT5pb19yYW5nZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfODJ4NTQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfODJ4NTQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTZhZWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF84Mng1NC5jCkBAIC0wLDAgKzEsMTA0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisvKgorICB8IERlc2NyaXB0aW9uIDogICBBUENJLTE3MTAgODJYNTQgdGltZXIgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8CisqLworCisjaW5jbHVkZSAiQVBDSTE3MTBfODJ4NTQuaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgICBpX0FQQ0kxNzEwX0luaXRUaW1lciAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX1RpbWVyTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltZXJNb2RlLCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HXyB1bF9SZWxvYWRWYWx1ZSwgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0lucHV0Q2xvY2tTZWxlY3Rpb24sICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfSW5wdXRDbG9ja0xldmVsLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9PdXRwdXRMZXZlbCwgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0hhcmR3YXJlR2F0ZUxldmVsKQorSU5UIGlfSW5zbkNvbmZpZ19Jbml0VGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQorfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlIHRoZSBUaW1lciAoYl9UaW1lck5icikgb3BlcmF0aW5nIG1vZGUgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9UaW1lck1vZGUpIGZyb20gc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgYW55ICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgb3RoZXIgZnVuY3Rpb24gd2l0Y2ggYWNjZXNzIG9mIHRoZSB0aW1lci4gICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICBUaW1lciBtb2RlIGRlc2NyaXB0aW9uIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8fFNlbGVjdGVkKyAgICAgIE1vZGUgZGVzY3JpcHRpb24gICAgICAgK3VfUmVsb2FkVmFsdWUgfCBIYXJkd2FyZSBnYXRlIGlucHV0fHwKK3x8ICBtb2RlICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBkZXNjcmlwdGlvbiB8ICAgICAgYWN0aW9uICAgICAgICB8fAorfCstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8fCAgICAgICAgfE1vZGUgMCBpcyB0eXBpY2FsbHkgdXNlZCAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8Zm9yIGV2ZW50IGNvdW50aW5nLiBBZnRlciAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHx0aGUgaW5pdGlhbGlzYXRpb24sIE9VVCAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGlzIGluaXRpYWxseSBsb3csIGFuZCAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgMCAgICB8d2lsbCByZW1haW4gbG93IHVudGlsIHRoZSAgICB8U3RhcnQgY291bnRpbmd8ICAgSGFyZHdhcmUgZ2F0ZSAgICB8fAorfHwgICAgICAgIHxjb3VudGVyIHJlYWNoZXMgemVyby4gICAgICAgIHwgICB2YWx1ZSAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfE9VVCB0aGVuIGdvZXMgaGlnaCBhbmQgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8cmVtYWlucyBoaWdoIHVudGlsIGEgbmV3ICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxjb3VudCBpcyB3cml0dGVuLiBTZWUgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfCJpX0FQQ0kxNzEwX1dyaXRlVGltZXJWYWx1ZSIgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8ZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfCstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8fCAgICAgICAgfE1vZGUgMSBpcyBzaW1pbGFyIHRvIG1vZGUgMCAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8ZXhjZXB0IGZvciB0aGUgZ2F0ZSBpbnB1dCAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAxICAgIHxhY3Rpb24uIFRoZSBnYXRlIGlucHV0IGlzIG5vdHxTdGFydCBjb3VudGluZ3wgIEhhcmR3YXJlIHRyaWdnZXIgIHx8Cit8fCAgICAgICAgfHVzZWQgZm9yIGVuYWJsZWQgb3IgZGlzYWJsZWQgfCAgIHZhbHVlICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8dGhlIHRpbWVyLiAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxUaGUgZ2F0ZSBpbnB1dCBpcyB1c2VkIGZvciAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfHRyaWdnZXJlZCB0aGUgdGltZXIuICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3wrLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rfAorfHwgICAgICAgIHxUaGlzIG1vZGUgZnVuY3Rpb25zIGxpa2UgYSAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGRpdmlkZS1ieS11bF9SZWxvYWRWYWx1ZSAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8Y291bnRlci4gSXQgaXMgdHlwaWNhbGx5IHVzZWR8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHx0byBnZW5lcmF0ZSBhIHJlYWwgdGltZSBjbG9ja3wgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGludGVycnVwdC4gT1VUIHdpbGwgaW5pdGlhbGx5fCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgMiAgICB8YmUgaGlnaCBhZnRlciB0aGUgICAgICAgICAgICB8ICAgRGl2aXNpb24gICB8ICBIYXJkd2FyZSBnYXRlICAgICB8fAorfHwgICAgICAgIHxpbml0aWFsaXNhdGlvbi4gV2hlbiB0aGUgICAgIHwgICAgZmFjdG9yICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGluaXRpYWwgY291bnQgaGFzIGRlY3JlbWVudGVkfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8dG8gMSwgT1VUIGdvZXMgbG93IGZvciBvbmUgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxDTEsgcHVsZS4gT1VUIHRoZW4gZ29lcyBoaWdoIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGFnYWluLCB0aGUgY291bnRlciByZWxvYWRzICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8dGhlIGluaXRpYWwgY291bnQgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHwodWxfUmVsb2FkVmFsdWUpIGFuZCB0aGUgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfHByb2Nlc3MgaXMgcmVwZWF0ZWQuICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8VGhpcyBhY3Rpb24gY2FuIGdlbmVyYXRlZCBhICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxpbnRlcnJ1cHQuIFNlZSBmdW5jdGlvbiAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfCJpX0FQQ0kxNzEwX1NldEJvYXJkSW50LSAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8Um91dGluZVgiICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxhbmQgImlfQVBDSTE3MTBfRW5hYmxlVGltZXIiIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8Ky0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tK3wKK3x8ICAgICAgICB8TW9kZSAzIGlzIHR5cGljYWxseSB1c2VkIGZvciB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxiYXVkIHJhdGUgZ2VuZXJhdGlvbi4gVGhpcyAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfG1vZGUgaXMgc2ltaWxhciB0byBtb2RlIDIgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8ZXhjZXB0IGZvciB0aGUgZHV0eSBjeWNsZSBvZiB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAzICAgIHxPVVQuIE9VVCB3aWxsIGluaXRpYWxseSBiZSAgIHwgIERpdmlzaW9uICAgIHwgICBIYXJkd2FyZSBnYXRlICAgIHx8Cit8fCAgICAgICAgfGhpZ2ggYWZ0ZXIgdGhlIGluaXRpYWxpc2F0aW9ufCAgIGZhY3RvciAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8V2hlbiBoYWxmIHRoZSBpbml0aWFsIGNvdW50ICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHwodWxfUmVsb2FkVmFsdWUpIGhhcyBleHBpcmVkLHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfE9VVCBnb2VzIGxvdyBmb3IgdGhlICAgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8cmVtYWluZGVyIG9mIHRoZSBjb3VudC4gVGhlICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxtb2RlIGlzIHBlcmlvZGljOyB0aGUgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfHNlcXVlbmNlIGFib3ZlIGlzIHJlcGVhdGVkICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8aW5kZWZpbml0ZWx5LiAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfCstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8fCAgICAgICAgfE9VVCB3aWxsIGJlIGluaXRpYWxseSBoaWdoICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8YWZ0ZXIgdGhlIGluaXRpYWxpc2F0aW9uLiAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxXaGVuIHRoZSBpbml0aWFsIGNvdW50ICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgIDQgICAgfGV4cGlyZXMgT1VUIHdpbGwgZ28gbG93IGZvciAgfFN0YXJ0IGNvdW50aW5nfCAgSGFyZHdhcmUgZ2F0ZSAgICAgfHwKK3x8ICAgICAgICB8b25lIENMSyBwdWxzZSBhbmQgdGhlbiBnbyAgICB8ICAgIHZhbHVlICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxoaWdoIGFnYWluLiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfFRoZSBjb3VudGluZyBzZXF1ZW5jZXMgaXMgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8dHJpZ2dlcmVkIGJ5IHdyaXRpbmcgYSBuZXcgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHx2YWx1ZS4gU2VlICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfCJpX0FQQ0kxNzEwX1dyaXRlVGltZXJWYWx1ZSIgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8ZnVuY3Rpb24uIElmIGEgbmV3IGNvdW50IGlzICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHx3cml0dGVuIGR1cmluZyBjb3VudGluZywgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgICAgICAgfGl0IHdpbGwgYmUgbG9hZGVkIG9uIHRoZSAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8bmV4dCBDTEsgcHVsc2UgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfCstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSt8Cit8fCAgICAgICAgfE1vZGUgNSBpcyBzaW1pbGFyIHRvIG1vZGUgNCAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfHwKK3x8ICAgICAgICB8ZXhjZXB0IGZvciB0aGUgZ2F0ZSBpbnB1dCAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHxhY3Rpb24uIFRoZSBnYXRlIGlucHV0IGlzIG5vdHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8fCAgIDUgICAgfHVzZWQgZm9yIGVuYWJsZWQgb3IgZGlzYWJsZWQgfFN0YXJ0IGNvdW50aW5nfCAgSGFyZHdhcmUgdHJpZ2dlciAgfHwKK3x8ICAgICAgICB8dGhlIHRpbWVyLiBUaGUgZ2F0ZSBpbnB1dCBpcyB8ICAgIHZhbHVlICAgICB8ICAgICAgICAgICAgICAgICAgICB8fAorfHwgICAgICAgIHx1c2VkIGZvciB0cmlnZ2VyZWQgdGhlIHRpbWVyLnwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHx8Cit8Ky0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tK3wKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgSW5wdXQgY2xvY2sgc2VsZWN0aW9uIHRhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHwKK3wgIHwgICAgICAgYl9JbnB1dENsb2NrU2VsZWN0aW9uICAgIHwgICAgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICB8ICAgfAorfCAgfCAgICAgICAgICAgcGFyYW1ldGVyICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8Cit8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHwKK3wgIHwgICAgQVBDSTE3MTBfUENJX0JVU19DTE9DSyAgICAgIHwgRm9yIHRoZSB0aW1lciBpbnB1dCBjbG9jaywgdGhlIFBDSSB8ICAgfAorfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBidXMgY2xvY2sgLyA0IGlzIHVzZWQuIFRoaXMgUENJIGJ1c3wgICB8Cit8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNsb2NrIGNhbiBiZSAzME1IeiBvciAzM01Iei4gRm9yICAgfCAgIHwKK3wgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGltZXIgMCBvbmx5IHRoaXMgc2VsZWN0aW9uIGFyZSAgICB8ICAgfAorfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhdmFpbGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8Cit8ICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIHwKK3wgIHwgQVBDSTE3MTBfIEZST05UX0NPTk5FQ1RPUl9JTlBVVHwgT2YgdGhlIGZyb250IGNvbm5lY3RvciB5b3UgaGF2ZSB0aGV8ICAgfAorfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwb3NzaWJpbGl0eSB0byBpbmplY3QgYSBpbnB1dCBjbG9ja3wgICB8Cit8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvciBUaW1lciAxIG9yIFRpbWVyIDIuIFRoZSBzb3VyY2UgfCAgIHwKK3wgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnJvbSB0aGlzIGNsb2NrIGNhbiBlYXQgdGhlIG91dHB1dCB8ICAgfAorfCAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjbG9jayBmcm9tIFRpbWVyIDAgb3IgYW55IG90aGVyICAgIHwgICB8Cit8ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNsb2NrIHNvdXJjZS4gICAgICAgICAgICAgICAgICAgICAgfCAgIHwKK3wgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgICAgICAgIDogSGFuZGxlIG9mIGJvYXJkICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJLTE3MTAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9UaW1lck5iciAgICAgICAgICAgOiBUaW1lciBudW1iZXIgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSAoMCB0byAyKSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltZXJNb2RlICAgICAgICAgIDogVGltZXIgbW9kZSBzZWxlY3Rpb24gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byA1KSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6IEludGVycnVwdCBvbiB0ZXJtaW5hbHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiBIYXJkd2FyZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJpZ2dlcmFibGUgb25lLSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOiBSYXRlIGdlbmVyYXRvciAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM6IFNxdWFyZSB3YXZlIG1vZGUgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDogU29mdHdhcmUgdHJpZ2dlcmVkICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJvYmUgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU6IEhhcmR3YXJlIHRyaWdnZXJlZCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2JlICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGltZXIgbW9kZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIHRhYmxlLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVTE9OR18gdWxfUmVsb2FkVmFsdWUgICAgICAgICA6IFN0YXJ0IGNvdW50aW5nIHZhbHVlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZGl2aXNpb24gZmFjdG9yICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgdGltZXIgbW9kZSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIHRhYmxlLiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9JbnB1dENsb2NrU2VsZWN0aW9uIDogU2VsZWN0aW9uIGZyb20gaW5wdXQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lciBjbG9jay4gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBpbnB1dCBjbG9jayAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uIHRhYmxlLiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0lucHV0Q2xvY2tMZXZlbCAgICAgOiBTZWxlY3Rpb24gZnJvbSBpbnB1dCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrIGxldmVsLiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IExvdyBhY3RpdmUgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElucHV0IGludmVydGVkKSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBIaWdoIGFjdGl2ZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9PdXRwdXRMZXZlbCwgICAgICAgIDogU2VsZWN0aW9uIGZyb20gb3V0cHV0ICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayBsZXZlbC4gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBMb3cgYWN0aXZlICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEhpZ2ggYWN0aXZlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE91dHB1dCBpbnZlcnRlZCkgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfSGFyZHdhcmVHYXRlTGV2ZWwgICA6IFNlbGVjdGlvbiBmcm9tICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgZ2F0ZSBsZXZlbC4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogTG93IGFjdGl2ZSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5wdXQgaW52ZXJ0ZWQpICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEhpZ2ggYWN0aXZlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2lsbCBub3QgdXNlZCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBoYXJkd2FyZSBnYXRlIHNldCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB2YWx1ZSB0byAwLgorfGJfTW9kdWxOYnIgICAgICAgID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfVGltZXJOYnIJCSAgPSAoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJYl9UaW1lck1vZGUJCSAgPSAoQllURSkgZGF0YVswXTsKKwl1bF9SZWxvYWRWYWx1ZQkgID0gKFVMT05HKSBkYXRhWzFdOworCWJfSW5wdXRDbG9ja1NlbGVjdGlvbgk9KEJZVEUpIGRhdGFbMl07CisJYl9JbnB1dENsb2NrTGV2ZWwJCT0oQllURSkgZGF0YVszXTsKKwliX091dHB1dExldmVsCQkJPShCWVRFKSBkYXRhWzRdOworCWJfSGFyZHdhcmVHYXRlTGV2ZWwJCT0oQllURSkgZGF0YVs1XTsKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaW1lciBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGltZXIgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC02OiBJbnB1dCB0aW1lciBjbG9jayBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTc6IFNlbGVjdGlvbiBmcm9tIGlucHV0IGNsb2NrIGxldmVsIGlzIHdyb25nICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtODogU2VsZWN0aW9uIGZyb20gb3V0cHV0IGNsb2NrIGxldmVsIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC05OiBTZWxlY3Rpb24gZnJvbSBoYXJkd2FyZSBnYXRlIGxldmVsIGlzIHdyb25nICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX1RpbWVyTmJyOworCUJZVEUgYl9UaW1lck1vZGU7CisJVUxPTkcgdWxfUmVsb2FkVmFsdWU7CisJQllURSBiX0lucHV0Q2xvY2tTZWxlY3Rpb247CisJQllURSBiX0lucHV0Q2xvY2tMZXZlbDsKKwlCWVRFIGJfT3V0cHV0TGV2ZWw7CisJQllURSBiX0hhcmR3YXJlR2F0ZUxldmVsOworCisJLy9CRUdJTiBKSyAyNy4xMC4yMDAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJRFdPUkQgZHdfVGVzdCA9IDA7CisJLy9FTkQgSksgMjcuMTAuMjAwMyA6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGEgNDAgTWh6IHF1YXJ0egorCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1RpbWVyTmJyID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWJfVGltZXJNb2RlID0gKEJZVEUpIGRhdGFbMF07CisJdWxfUmVsb2FkVmFsdWUgPSAoVUxPTkcpIGRhdGFbMV07CisJYl9JbnB1dENsb2NrU2VsZWN0aW9uID0gKEJZVEUpIGRhdGFbMl07CisJYl9JbnB1dENsb2NrTGV2ZWwgPSAoQllURSkgZGF0YVszXTsKKwliX091dHB1dExldmVsID0gKEJZVEUpIGRhdGFbNF07CisJYl9IYXJkd2FyZUdhdGVMZXZlbCA9IChCWVRFKSBkYXRhWzVdOworCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCQkvKiBUZXN0IGlmIDgyWDU0IHRpbWVyICovCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF84Mlg1NF9USU1FUikgeworCQkJLyogVGVzdCB0aGUgdGltZXIgbnVtYmVyICovCisKKwkJCWlmIChiX1RpbWVyTmJyIDw9IDIpIHsKKwkJCQkvKiBUZXN0IHRoZSB0aW1lciBtb2RlICovCisJCQkJaWYgKGJfVGltZXJNb2RlIDw9IDUpIHsKKwkJCQkJLy9CRUdJTiBKSyAyNy4xMC4yMDAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJCQkJCS8qIFRlc3QgdGUgaW1wdXQgY2xvY2sgc2VsZWN0aW9uICovCisJCQkJCS8qCisJCQkJCSAgIGlmICgoKGJfVGltZXJOYnIgPT0gMCkgJiYgKGJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9PSAwKSkgfHwKKwkJCQkJICAgKChiX1RpbWVyTmJyICE9IDApICYmICgoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IDApIHx8IChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gPT0gMSkpKSkKKwkJCQkJICovCisKKwkJCQkJaWYgKCgoYl9UaW1lck5iciA9PSAwKSAmJgorCQkJCQkgICAgIChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfUENJX0JVU19DTE9DSykpIHx8CisJCQkJCSAgICAoKGJfVGltZXJOYnIgPT0gMCkgJiYKKwkJCQkJICAgICAoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzEwTUhaKSkgfHwKKwkJCQkJICAgICgoYl9UaW1lck5iciAhPSAwKSAmJgorCQkJCQkgICAgICgoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwX1BDSV9CVVNfQ0xPQ0spIHx8CisJCQkJCSAgICAgIChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfRlJPTlRfQ09OTkVDVE9SX0lOUFVUKSB8fAorCQkJCQkgICAgICAoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzEwTUhaKSkpKSB7CisJCQkJCQkvL0JFR0lOIEpLIDI3LjEwLjIwMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHoKKwkJCQkJCWlmICgoKGJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8xME1IWikgJiYKKwkJCQkJCSAgICAgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweDAwMDBGRkZGVUwpID49IDB4MzEzMSkpIHx8CisJCQkJCQkgICAgIChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfMTBNSFopKSB7CisJCQkJCQkJLy9FTkQgSksgMjcuMTAuMjAwMyA6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGEgNDAgTWh6IHF1YXJ0egorCQkJCQkJCS8qIFRlc3QgdGhlIGlucHV0IGNsb2NrIGxldmVsIHNlbGVjdGlvbiAqLworCisJCQkJCQkJaWYgKChiX0lucHV0Q2xvY2tMZXZlbCA9PSAwKSB8fAorCQkJCQkJCSAgICAoYl9JbnB1dENsb2NrTGV2ZWwgPT0gMSkpIHsKKwkJCQkJCQkJLyogVGVzdCB0aGUgb3V0cHV0IGNsb2NrIGxldmVsIHNlbGVjdGlvbiAqLworCQkJCQkJCQlpZiAoKGJfT3V0cHV0TGV2ZWwgPT0gMCkgfHwgKGJfT3V0cHV0TGV2ZWwgPT0gMSkpIHsKKwkJCQkJCQkJCS8qIFRlc3QgdGhlIGhhcmR3YXJlIGdhdGUgbGV2ZWwgc2VsZWN0aW9uICovCisJCQkJCQkJCQlpZiAoKGJfSGFyZHdhcmVHYXRlTGV2ZWwgPT0gMCkgfHwgKGJfSGFyZHdhcmVHYXRlTGV2ZWwgPT0gMSkpIHsKKwkJCQkJCQkJCQkvL0JFR0lOIEpLIDI3LjEwLjAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJCQkJCQkJCQkJLyogVGVzdCBpZiB2ZXJzaW9uID4gMS4xIGFuZCBjbG9jayBzZWxlY3Rpb24gPSAxME1IeiAqLworCQkJCQkJCQkJCWlmICgoYl9JbnB1dENsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzEwTUhaKSAmJiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4MDAwMEZGRkZVTCkgPiAweDMxMzEpKSB7CisJCQkJCQkJCQkJCS8qIFRlc3QgaWYgNDBNSHogcXVhcnR6IG9uIGJvYXJkICovCisJCQkJCQkJCQkJCWR3X1Rlc3QgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAoMTYgKyAoYl9UaW1lck5iciAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpKTsKKworCQkJCQkJCQkJCQlkd19UZXN0ID0gKGR3X1Rlc3QgPj4gMTYpICYgMTsKKwkJCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJCQlkd19UZXN0ID0gMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkvKiBUZXN0IGlmIGRldGVjdGlvbiBPSyAqLworCQkJCQkJCQkJCWlmIChkd19UZXN0ID09IDEpIHsKKwkJCQkJCQkJCQkJLy9FTkQgSksgMjcuMTAuMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHoKKwkJCQkJCQkJCQkJLyogSW5pdGlhbGlzYXRpb24gT0sgKi8KKwkJCQkJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uYl84Mlg1NEluaXQgPSAxOworCisJCQkJCQkJCQkJCS8qIFNhdmUgdGhlIGlucHV0IGNsb2NrIHNlbGVjdGlvbiAqLworCQkJCQkJCQkJCQlkZXZwcml2LT4gc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uYl9JbnB1dENsb2NrU2VsZWN0aW9uID0gYl9JbnB1dENsb2NrU2VsZWN0aW9uOworCisJCQkJCQkJCQkJCS8qIFNhdmUgdGhlIGlucHV0IGNsb2NrIGxldmVsICovCisJCQkJCQkJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmJfSW5wdXRDbG9ja0xldmVsID0gfmJfSW5wdXRDbG9ja0xldmVsICYgMTsKKworCQkJCQkJCQkJCQkvKiBTYXZlIHRoZSBvdXRwdXQgbGV2ZWwgKi8KKwkJCQkJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uYl9PdXRwdXRMZXZlbCA9IH5iX091dHB1dExldmVsICYgMTsKKworCQkJCQkJCQkJCQkvKiBTYXZlIHRoZSBnYXRlIGxldmVsICovCisJCQkJCQkJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmJfSGFyZHdhcmVHYXRlTGV2ZWwgPSBiX0hhcmR3YXJlR2F0ZUxldmVsOworCisJCQkJCQkJCQkJCS8qIFNldCB0aGUgY29uZmlndXJhdGlvbiB3b3JkIGFuZCBkaXNhYmxlIHRoZSB0aW1lciAqLworCQkJCQkJCQkJCQkvL0JFR0lOIEpLIDI3LjEwLjAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJCQkJCQkJCQkJCS8qCisJCQkJCQkJCQkJCSAgIGRldnByaXYtPnNfTW9kdWxlSW5mbyBbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJCSAgIHNfODJYNTRNb2R1bGVJbmZvLgorCQkJCQkJCQkJCQkgICBzXzgyWDU0VGltZXJJbmZvICBbYl9UaW1lck5icl0uCisJCQkJCQkJCQkJCSAgIGR3X0NvbmZpZ3VyYXRpb25Xb3JkID0gKERXT1JEKSAoKChiX0hhcmR3YXJlR2F0ZUxldmVsICAgICAgICAgPDwgMCkgJiAweDEpIHwKKwkJCQkJCQkJCQkJICAgKChiX0lucHV0Q2xvY2tMZXZlbCAgICAgICAgICAgPDwgMSkgJiAweDIpIHwKKwkJCQkJCQkJCQkJICAgKCgofmJfT3V0cHV0TGV2ZWwgICAgICAgJiAxKSAgPDwgMikgJiAweDQpIHwKKwkJCQkJCQkJCQkJICAgKChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gICAgICAgPDwgNCkgJiAweDEwKSk7CisJCQkJCQkJCQkJCSAqLworCQkJCQkJCQkJCQkvKiBUZXN0IGlmIDEwTUh6IHNlbGVjdGVkICovCisJCQkJCQkJCQkJCWlmIChiX0lucHV0Q2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMTBNSFopIHsKKwkJCQkJCQkJCQkJCWJfSW5wdXRDbG9ja1NlbGVjdGlvbiA9IDI7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCA9IChEV09SRCkoKChiX0hhcmR3YXJlR2F0ZUxldmVsIDw8IDApICYgMHgxKSB8ICgoYl9JbnB1dENsb2NrTGV2ZWwgPDwgMSkgJiAweDIpIHwgKCgofmJfT3V0cHV0TGV2ZWwgJiAxKSA8PCAyKSAmIDB4NCkgfCAoKGJfSW5wdXRDbG9ja1NlbGVjdGlvbiA8PCA0KSAmIDB4MzApKTsKKwkJCQkJCQkJCQkJLy9FTkQgSksgMjcuMTAuMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHoKKwkJCQkJCQkJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAzMiArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJCQkJLyogSW5pdGlhbGlzZSB0aGUgODJYNTQgVGltZXIgKi8KKwkJCQkJCQkJCQkJb3V0bCgoRFdPUkQpIGJfVGltZXJNb2RlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDE2ICsgKGJfVGltZXJOYnIgKiA0KSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkJCQkvKiBXcml0ZSB0aGUgcmVsb2FkIHZhbHVlICovCisJCQkJCQkJCQkJCW91dGwodWxfUmVsb2FkVmFsdWUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMCArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJCQkJCS8vQkVHSU4gSksgMjcuMTAuMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHoKKwkJCQkJCQkJCQl9CS8vIGlmIChkd19UZXN0ID09IDEpCisJCQkJCQkJCQkJZWxzZSB7CisJCQkJCQkJCQkJCS8qIElucHV0IHRpbWVyIGNsb2NrIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkJCQkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQkJCQkJfQkvLyBpZiAoZHdfVGVzdCA9PSAxKQorCQkJCQkJCQkJCS8vRU5EIEpLIDI3LjEwLjAzIDogQWRkIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgYSA0MCBNaHogcXVhcnR6CisJCQkJCQkJCQl9CS8vIGlmICgoYl9IYXJkd2FyZUdhdGVMZXZlbCA9PSAwKSB8fCAoYl9IYXJkd2FyZUdhdGVMZXZlbCA9PSAxKSkKKwkJCQkJCQkJCWVsc2UgeworCQkJCQkJCQkJCS8qIFNlbGVjdGlvbiBmcm9tIGhhcmR3YXJlIGdhdGUgbGV2ZWwgaXMgd3JvbmcgKi8KKwkJCQkJCQkJCQlEUFJJTlRLKCJTZWxlY3Rpb24gZnJvbSBoYXJkd2FyZSBnYXRlIGxldmVsIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJCQlpX1JldHVyblZhbHVlID0gLTk7CisJCQkJCQkJCQl9CS8vIGlmICgoYl9IYXJkd2FyZUdhdGVMZXZlbCA9PSAwKSB8fCAoYl9IYXJkd2FyZUdhdGVMZXZlbCA9PSAxKSkKKwkJCQkJCQkJfQkvLyBpZiAoKGJfT3V0cHV0TGV2ZWwgPT0gMCkgfHwgKGJfT3V0cHV0TGV2ZWwgPT0gMSkpCisJCQkJCQkJCWVsc2UgeworCQkJCQkJCQkJLyogU2VsZWN0aW9uIGZyb20gb3V0cHV0IGNsb2NrIGxldmVsIGlzIHdyb25nICovCisJCQkJCQkJCQlEUFJJTlRLKCJTZWxlY3Rpb24gZnJvbSBvdXRwdXQgY2xvY2sgbGV2ZWwgaXMgd3JvbmdcbiIpOworCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC04OworCQkJCQkJCQl9CS8vIGlmICgoYl9PdXRwdXRMZXZlbCA9PSAwKSB8fCAoYl9PdXRwdXRMZXZlbCA9PSAxKSkKKwkJCQkJCQl9CS8vIGlmICgoYl9JbnB1dENsb2NrTGV2ZWwgPT0gMCkgfHwgKGJfSW5wdXRDbG9ja0xldmVsID09IDEpKQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQkvKiBTZWxlY3Rpb24gZnJvbSBpbnB1dCBjbG9jayBsZXZlbCBpcyB3cm9uZyAqLworCQkJCQkJCQlEUFJJTlRLKCJTZWxlY3Rpb24gZnJvbSBpbnB1dCBjbG9jayBsZXZlbCBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNzsKKwkJCQkJCQl9CS8vIGlmICgoYl9JbnB1dENsb2NrTGV2ZWwgPT0gMCkgfHwgKGJfSW5wdXRDbG9ja0xldmVsID09IDEpKQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvKiBJbnB1dCB0aW1lciBjbG9jayBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCQkJCQlEUFJJTlRLKCJJbnB1dCB0aW1lciBjbG9jayBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8qIElucHV0IHRpbWVyIGNsb2NrIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkJCQkJRFBSSU5USygiSW5wdXQgdGltZXIgY2xvY2sgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJfQorCQkJCX0JLy8gaWYgKChiX1RpbWVyTW9kZSA+PSAwKSAmJiAoYl9UaW1lck1vZGUgPD0gNSkpCisJCQkJZWxzZSB7CisJCQkJCS8qIFRpbWVyIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkJCURQUklOVEsoIlRpbWVyIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0JLy8gaWYgKChiX1RpbWVyTW9kZSA+PSAwKSAmJiAoYl9UaW1lck1vZGUgPD0gNSkpCisJCQl9CS8vIGlmICgoYl9UaW1lck5iciA+PSAwKSAmJiAoYl9UaW1lck5iciA8PSAyKSkKKwkJCWVsc2UgeworCQkJCS8qIFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAqLworCQkJCURQUklOVEsoIlRpbWVyIHNlbGVjdGlvbiB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJfQkvLyBpZiAoKGJfVGltZXJOYnIgPj0gMCkgJiYgKGJfVGltZXJOYnIgPD0gMikpCisJCX0gZWxzZSB7CisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZSAqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQl9CisJfSBlbHNlIHsKKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgICAgaV9BUENJMTcxMF9FbmFibGVUaW1lciAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfVGltZXJOYnIsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnRlcnJ1cHRFbmFibGUpCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBFbmFibGUgT1IgRGlzYWJsZSB0aGUgVGltZXIgKGJfVGltZXJOYnIpIGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiBZb3UgbXVzdCBjYWxsaW5nIHRoZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VGltZXIiIGZ1bmN0aW9uIGJlIGZvciB5b3UgY2FsbCB0aGlzICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiBJZiB5b3UgZW5hYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQsIHRoZSB0aW1lciB8Cit8ICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGUgYSBpbnRlcnJ1cHQgYWZ0ZXIgdGhlIHRpbWVyIHZhbHVlIHJlYWNoICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aGUgemVyby4gU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX1NldEJvYXJkSW50Um91dGluZVgifAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSS0xNzEwICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciAgICAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltZXJOYnIgICAgICAgIDogVGltZXIgbnVtYmVyIHRvIGVuYWJsZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAyKSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0ludGVycnVwdEVuYWJsZSA6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXIgaW50ZXJydXB0LiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9FTkFCTEUgOiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSB0aGUgdGltZXIgaW50ZXJydXB0IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRElTQUJMRSA6ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHR8CitpX1JldHVyblZhbHVlPWluc24tPm47CisJYl9Nb2R1bE5iciAgICAgICAgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9UaW1lck5icgkJICA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwliX0FjdGlvblR5cGUgICAgICA9IChCWVRFKSBkYXRhWzBdOyAvLyBlbmFibGUgZGlzYWJsZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUaW1lciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNjogSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC03OiBJbnRlcnJ1cHQgZnVuY3Rpb24gbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCQkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19EdW1teVJlYWQ7CisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9UaW1lck5icjsKKwlCWVRFIGJfQWN0aW9uVHlwZTsKKwlCWVRFIGJfSW50ZXJydXB0RW5hYmxlOworCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1RpbWVyTmJyID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWJfQWN0aW9uVHlwZSA9IChCWVRFKSBkYXRhWzBdOwkvLyBlbmFibGUgZGlzYWJsZQorCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCQkvKiBUZXN0IGlmIDgyWDU0IHRpbWVyICovCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF84Mlg1NF9USU1FUikgeworCQkJLyogVGVzdCB0aGUgdGltZXIgbnVtYmVyICovCisJCQlpZiAoYl9UaW1lck5iciA8PSAyKSB7CisJCQkJLyogVGVzdCBpZiB0aW1lciBpbml0aWFsaXNlZCAqLworCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5iXzgyWDU0SW5pdCA9PSAxKSB7CisKKwkJCQkJc3dpdGNoIChiX0FjdGlvblR5cGUpIHsKKwkJCQkJY2FzZSBBUENJMTcxMF9FTkFCTEU6CisJCQkJCQliX0ludGVycnVwdEVuYWJsZSA9IChCWVRFKSBkYXRhWzFdOworCQkJCQkJLyogVGVzdCB0aGUgaW50ZXJydXB0IHNlbGVjdGlvbiAqLworCQkJCQkJaWYgKChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpIHx8CisJCQkJCQkgICAgKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0RJU0FCTEUpKSB7CisJCQkJCQkJaWYgKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSkgeworCisJCQkJCQkJCWR3X0R1bW15UmVhZCA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDEyICsgKGJfVGltZXJOYnIgKiA0KSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkvKiBFbmFibGUgdGhlIGludGVycnVwdCAqLworCQkJCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCA9IGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmR3X0NvbmZpZ3VyYXRpb25Xb3JkIHwgMHg4OworCisJCQkJCQkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uZHdfQ29uZmlndXJhdGlvbldvcmQsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMzIgKyAoYl9UaW1lck5iciAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CS8vIFNhdmUgdGhlIGN1cnJlbnQgcHJvY2VzcyB0YXNrIHN0cnVjdHVyZQorCisJCQkJCQkJfQkvLyBpZiAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKQorCQkJCQkJCWVsc2UgeworCQkJCQkJCQkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwkJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uZHdfQ29uZmlndXJhdGlvbldvcmQgPSBkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCAmIDB4Rjc7CisKKwkJCQkJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAzMiArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJLyogU2F2ZSB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLmJfSW50ZXJydXB0TWFzayA9IGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5iX0ludGVycnVwdE1hc2sgJiAoMHhGRiAtICgxIDw8IGJfVGltZXJOYnIpKTsKKwkJCQkJCQl9CS8vIGlmIChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpCisKKwkJCQkJCQkvKiBUZXN0IGlmIGVycm9yIG9jY3VyICovCisJCQkJCQkJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCQkJCQkJCQkvKiBTYXZlIHRoZSBpbnRlcnJ1cHQgZmxhZyAqLworCQkJCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uYl9JbnRlcnJ1cHRNYXNrID0gZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLmJfSW50ZXJydXB0TWFzayB8ICgoMSAmIGJfSW50ZXJydXB0RW5hYmxlKSA8PCBiX1RpbWVyTmJyKTsKKworCQkJCQkJCQkvKiBFbmFibGUgdGhlIHRpbWVyICovCisJCQkJCQkJCW91dGwoMSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0NCArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvKiBJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nICovCisJCQkJCQkJRFBSSU5USygiXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBBUENJMTcxMF9ESVNBQkxFOgorCQkJCQkJLyogVGVzdCB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkJCQkJCWlmICgoKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5iX0ludGVycnVwdE1hc2sgPj4gYl9UaW1lck5icikgJiAxKSA9PSAxKSB7CisJCQkJCQkJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCisKKwkJCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS4gZHdfQ29uZmlndXJhdGlvbldvcmQgPSBkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5kd19Db25maWd1cmF0aW9uV29yZCAmIDB4Rjc7CisKKwkJCQkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmR3X0NvbmZpZ3VyYXRpb25Xb3JkLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDMyICsgKGJfVGltZXJOYnIgKiA0KSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCS8qIFNhdmUgdGhlIGludGVycnVwdCBmbGFnICovCisJCQkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLmJfSW50ZXJydXB0TWFzayA9IGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5iX0ludGVycnVwdE1hc2sgJiAoMHhGRiAtICgxIDw8IGJfVGltZXJOYnIpKTsKKwkJCQkJCX0KKworCQkJCQkJLyogRGlzYWJsZSB0aGUgdGltZXIgKi8KKwkJCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0NCArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQkvLyBTd2l0Y2ggZW5kCisJCQkJfSBlbHNlIHsKKwkJCQkJLyogVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJCQlEUFJJTlRLICgiVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvblxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAqLworCQkJCURQUklOVEsoIlRpbWVyIHNlbGVjdGlvbiB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJfQkvLyBpZiAoKGJfVGltZXJOYnIgPj0gMCkgJiYgKGJfVGltZXJOYnIgPD0gMikpCisJCX0gZWxzZSB7CisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZSAqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQl9CisJfSBlbHNlIHsKKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgICAgaV9BUENJMTcxMF9SZWFkQWxsVGltZXJWYWx1ZSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfVGltZXJWYWx1ZUFycmF5KQorSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRBbGxUaW1lclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgYWxsIHRpbWVyIHZhbHVlcyBmcm9tIHNlbGVjdGVkIHRpbWVyICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0ktMTcxMCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIgICAgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQVUxPTkdfIHB1bF9UaW1lclZhbHVlQXJyYXkgOiBUaW1lciB2YWx1ZSBhcnJheS4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgMCBjb250YWluIHRoZSB0aW1lciAwIHZhbHVlLiAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCAxIGNvbnRhaW4gdGhlIHRpbWVyIDEgdmFsdWUuICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50IDIgY29udGFpbiB0aGUgdGltZXIgMiB2YWx1ZS4gICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUaW1lciAwIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUaW1lciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGltZXIgMSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VGltZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6IFRpbWVyIDIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFRpbWVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRBbGxUaW1lclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCUJZVEUgYl9Nb2R1bE5iciwgYl9SZWFkVHlwZTsKKwlQVUxPTkcgcHVsX1RpbWVyVmFsdWVBcnJheTsKKworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1JlYWRUeXBlID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcHVsX1RpbWVyVmFsdWVBcnJheSA9IChQVUxPTkcpIGRhdGE7CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisKKwlzd2l0Y2ggKGJfUmVhZFR5cGUpIHsKKwljYXNlIEFQQ0kxNzEwX1RJTUVSX1JFQURJTlRFUlJVUFQ6CisKKwkJZGF0YVswXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy5zX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS5iX09sZE1vZHVsZU1hc2s7CisJCWRhdGFbMV0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0udWxfT2xkSW50ZXJydXB0TWFzazsKKwkJZGF0YVsyXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy5zX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS51bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZTsKKworCQkvKiBJbmNyZW1lbnQgdGhlIHJlYWQgRklGTyAqLworCQlkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZCA9IChkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZCArIDEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX1RJTUVSX1JFQURBTExUSU1FUjoKKwkJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCQlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkJCS8qIFRlc3QgaWYgODJYNTQgdGltZXIgKi8KKwkJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF84Mlg1NF9USU1FUikgeworCQkJCS8qIFRlc3QgaWYgdGltZXIgMCBpbml1dGlhbGlzZWQgKi8KKwkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bMF0uYl84Mlg1NEluaXQgPT0gMSkgeworCQkJCQkvKiBUZXN0IGlmIHRpbWVyIDEgaW5pdXRpYWxpc2VkICovCisJCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1sxXS5iXzgyWDU0SW5pdCA9PSAxKSB7CisJCQkJCQkvKiBUZXN0IGlmIHRpbWVyIDIgaW5pdXRpYWxpc2VkICovCisJCQkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bMl0uYl84Mlg1NEluaXQgPT0gMSkgeworCQkJCQkJCS8qIExhdGNoIGFsbCBjb3VudGVyICovCisJCQkJCQkJb3V0bCgweDE3LCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDEyICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJLyogUmVhZCB0aGUgdGltZXIgMCB2YWx1ZSAqLworCQkJCQkJCXB1bF9UaW1lclZhbHVlQXJyYXlbMF0gPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAwICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJLyogUmVhZCB0aGUgdGltZXIgMSB2YWx1ZSAqLworCQkJCQkJCXB1bF9UaW1lclZhbHVlQXJyYXlbMV0gPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJLyogUmVhZCB0aGUgdGltZXIgMiB2YWx1ZSAqLworCQkJCQkJCXB1bF9UaW1lclZhbHVlQXJyYXlbMl0gPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA4ICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkvKiBUaW1lciAyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCQkJCQlEUFJJTlRLKCJUaW1lciAyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb25cbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8qIFRpbWVyIDEgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJCQkJRFBSSU5USygiVGltZXIgMSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8qIFRpbWVyIDAgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJCQlEUFJJTlRLKCJUaW1lciAwIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb25cbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZSAqLworCQkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwkJfQorCisJfQkJCS8vIEVuZCBvZiBTd2l0Y2gKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDpJTlQgaV9BUENJMTcxMF9JbnNuQml0c1RpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCitzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHdyaXRlIGZ1bmN0aW9ucyBmb3IgVGltZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlCWVRFIGJfQml0c1R5cGU7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCWJfQml0c1R5cGUgPSBkYXRhWzBdOworCisJcHJpbnRrKCJcbjgyWDU0Iik7CisKKwlzd2l0Y2ggKGJfQml0c1R5cGUpIHsKKwljYXNlIEFQQ0kxNzEwX1RJTUVSX1JFQURWQUxVRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfUmVhZFRpbWVyVmFsdWUoZGV2LAorCQkJCQkJCSAgKEJZVEUpQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkJCQkJICAoQllURSlDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwKKwkJCQkJCQkgIChQVUxPTkcpICYgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9USU1FUl9HRVRPVVRQVVRMRVZFTDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfR2V0VGltZXJPdXRwdXRMZXZlbChkZXYsCisJCQkJCQkJICAgICAgIChCWVRFKUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJCQkJCSAgICAgICAoQllURSlDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwKKwkJCQkJCQkgICAgICAgKFBCWVRFKSAmZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9USU1FUl9HRVRQUk9HUkVTU1NUQVRVUzoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfR2V0VGltZXJQcm9ncmVzc1N0YXR1cyhkZXYsCisJCQkJCQkJCSAgKEJZVEUpQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkJCQkJCSAgKEJZVEUpQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksCisJCQkJCQkJCSAgKFBCWVRFKSZkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX1RJTUVSX1dSSVRFVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1dyaXRlVGltZXJWYWx1ZShkZXYsCisJCQkJCQkJICAgKEJZVEUpQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkJCQkJICAgKEJZVEUpQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksCisJCQkJCQkJICAgKFVMT05HKWRhdGFbMV0pOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJCaXRzIENvbmZpZyBQYXJhbWV0ZXIgV3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTE7CisJfQorCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkKKwkJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgICBpX0FQQ0kxNzEwX1JlYWRUaW1lclZhbHVlICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9UaW1lck5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX1RpbWVyVmFsdWUpICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgdGltZXIgdmFsdWUgZnJvbSBzZWxlY3RlZCBkaWdpdGFsIHRpbWVyICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfVGltZXJOYnIpIGZyb20gc2VsZWN0ZWQgdGltZXIgIG1vZHVsZSAoYl9Nb2R1bE5icikuIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0ktMTcxMCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIgICAgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX1RpbWVyTmJyICAgICAgICA6IFRpbWVyIG51bWJlciB0byByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMikgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyBwdWxfVGltZXJWYWx1ZSAgICA6IFRpbWVyIHZhbHVlICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUaW1lciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1JlYWRUaW1lclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCQkJICAgICAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfVGltZXJOYnIsCisJCQkgICAgICBQVUxPTkcgcHVsX1RpbWVyVmFsdWUpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCQkvKiBUZXN0IGlmIDgyWDU0IHRpbWVyICovCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkgICAgIGR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJICAgICAweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwXzgyWDU0X1RJTUVSKSB7CisJCQkvKiBUZXN0IHRoZSB0aW1lciBudW1iZXIgKi8KKwkJCWlmIChiX1RpbWVyTmJyIDw9IDIpIHsKKwkJCQkvKiBUZXN0IGlmIHRpbWVyIGluaXRpYWxpc2VkICovCisJCQkJaWYgKGRldnByaXYtPgorCQkJCSAgICBzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJICAgIHNfODJYNTRNb2R1bGVJbmZvLgorCQkJCSAgICBzXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLgorCQkJCSAgICBiXzgyWDU0SW5pdCA9PSAxKSB7CisJCQkJCS8qIExhdGNoIHRoZSB0aW1lciB2YWx1ZSAqLworCQkJCQlvdXRsKCgyIDw8IGJfVGltZXJOYnIpIHwgMHhEMCwKKwkJCQkJICAgICBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCSAgICAgdWlfQWRkcmVzcyArIDEyICsKKwkJCQkJICAgICAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJLyogUmVhZCB0aGUgY291bnRlciB2YWx1ZSAqLworCQkJCQkqcHVsX1RpbWVyVmFsdWUgPQorCQkJCQkgICAgaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAoYl9UaW1lck5iciAqIDQpICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkJCURQUklOVEsoIlRpbWVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb25cbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBUaW1lciBzZWxlY3Rpb24gd3JvbmcgKi8KKwkJCQlEUFJJTlRLKCJUaW1lciBzZWxlY3Rpb24gd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0JLy8gaWYgKChiX1RpbWVyTmJyID49IDApICYmIChiX1RpbWVyTmJyIDw9IDIpKQorCQl9IGVsc2UgeworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisJLyoKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gICAgIGlfQVBDSTE3MTBfR2V0VGltZXJPdXRwdXRMZXZlbCAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1RpbWVyTmJyLCAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX091dHB1dExldmVsKSAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBvdXRwdXQgc2lnbmFsIGxldmVsIChwYl9PdXRwdXRMZXZlbCkgZnJvbSAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgZGlnaXRhbCB0aW1lciAoYl9UaW1lck5icikgZnJvbSBzZWxlY3RlZCB0aW1lcnwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0ktMTcxMCAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX1RpbWVyTmJyICAgICAgICA6IFRpbWVyIG51bWJlciB0byB0ZXN0ICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDIpICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX091dHB1dExldmVsICAgICA6IE91dHB1dCBzaWduYWwgbGV2ZWwgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaGUgb3V0cHV0IGlzIGxvdyAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBUaGUgb3V0cHV0IGlzIGhpZ2ggICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAtMzogVGltZXIgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAtNTogVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFRpbWVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgKi8KKworSU5UIGlfQVBDSTE3MTBfR2V0VGltZXJPdXRwdXRMZXZlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwkJCQkgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9UaW1lck5iciwKKwkJCQkgICBQQllURSBwYl9PdXRwdXRMZXZlbCkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfVGltZXJTdGF0dXM7CisKKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJCS8qIFRlc3QgaWYgODJYNTQgdGltZXIgKi8KKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwXzgyWDU0X1RJTUVSKSB7CisJCQkvKiBUZXN0IHRoZSB0aW1lciBudW1iZXIgKi8KKwkJCWlmIChiX1RpbWVyTmJyIDw9IDIpIHsKKwkJCQkvKiBUZXN0IGlmIHRpbWVyIGluaXRpYWxpc2VkICovCisJCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zXzgyWDU0TW9kdWxlSW5mby5zXzgyWDU0VGltZXJJbmZvW2JfVGltZXJOYnJdLmJfODJYNTRJbml0ID09IDEpIHsKKwkJCQkJLyogTGF0Y2ggdGhlIHRpbWVyIHZhbHVlICovCisJCQkJCW91dGwoKDIgPDwgYl9UaW1lck5icikgfCAweEUwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDEyICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCS8qIFJlYWQgdGhlIHRpbWVyIHN0YXR1cyAqLworCQkJCQlkd19UaW1lclN0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDE2ICsgKGJfVGltZXJOYnIgKiA0KSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkqcGJfT3V0cHV0TGV2ZWwgPSAoQllURSkgKCgoZHdfVGltZXJTdGF0dXMgPj4gNykgJiAxKSBeIGRldnByaXYtPiBzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5iX091dHB1dExldmVsKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkJCURQUklOVEsoIlRpbWVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb25cbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBUaW1lciBzZWxlY3Rpb24gd3JvbmcgKi8KKwkJCQlEUFJJTlRLKCJUaW1lciBzZWxlY3Rpb24gd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0JLy8gaWYgKChiX1RpbWVyTmJyID49IDApICYmIChiX1RpbWVyTmJyIDw9IDIpKQorCQl9IGVsc2UgeworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gICAgIGlfQVBDSTE3MTBfR2V0VGltZXJQcm9ncmVzc1N0YXR1cyAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1RpbWVyTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfVGltZXJTdGF0dXMpICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBwcm9ncmVzcyBzdGF0dXMgKHBiX1RpbWVyU3RhdHVzKSBmcm9tICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBkaWdpdGFsIHRpbWVyIChiX1RpbWVyTmJyKSBmcm9tIHNlbGVjdGVkIHRpbWVyfAorfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJLTE3MTAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9UaW1lck5iciAgICAgICAgOiBUaW1lciBudW1iZXIgdG8gdGVzdCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDIpICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyBwYl9UaW1lclN0YXR1cyAgICAgOiBPdXRwdXQgc2lnbmFsIGxldmVsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaW1lciBub3QgaW4gcHJvZ3Jlc3MgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IFRpbWVyIGluIHByb2dyZXNzICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGltZXIgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IFRpbWVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFRpbWVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfR2V0VGltZXJQcm9ncmVzc1N0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1RpbWVyTmJyLAorCQkJCSAgICAgIFBCWVRFIHBiX1RpbWVyU3RhdHVzKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19UaW1lclN0YXR1czsKKworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkJLyogVGVzdCBpZiA4Mlg1NCB0aW1lciAqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF84Mlg1NF9USU1FUikgeworCQkJLyogVGVzdCB0aGUgdGltZXIgbnVtYmVyICovCisJCQlpZiAoYl9UaW1lck5iciA8PSAyKSB7CisJCQkJLyogVGVzdCBpZiB0aW1lciBpbml0aWFsaXNlZCAqLworCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc184Mlg1NE1vZHVsZUluZm8uc184Mlg1NFRpbWVySW5mb1tiX1RpbWVyTmJyXS5iXzgyWDU0SW5pdCA9PSAxKSB7CisJCQkJCS8qIExhdGNoIHRoZSB0aW1lciB2YWx1ZSAqLworCQkJCQlvdXRsKCgyIDw8IGJfVGltZXJOYnIpIHwgMHhFMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxMiArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkvKiBSZWFkIHRoZSB0aW1lciBzdGF0dXMgKi8KKwkJCQkJZHdfVGltZXJTdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxNiArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJKnBiX1RpbWVyU3RhdHVzID0gKEJZVEUpICgoZHdfVGltZXJTdGF0dXMpID4+IDgpICYgMTsKKwkJCQkJcHJpbnRrKCJQcm9ncmVzc1N0YXR1cyA6ICVkIiwgKnBiX1RpbWVyU3RhdHVzKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAqLworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0JLy8gaWYgKChiX1RpbWVyTmJyID49IDApICYmIChiX1RpbWVyTmJyIDw9IDIpKQorCQl9IGVsc2UgeworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgKi8KKworCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQl9CisJfSBlbHNlIHsKKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gaV9SZXR1cm5WYWx1ZTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgICBpX0FQQ0kxNzEwX1dyaXRlVGltZXJWYWx1ZSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltZXJOYnIsICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HXyB1bF9Xcml0ZVZhbHVlKSAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlIHRoZSB2YWx1ZSAodWxfV3JpdGVWYWx1ZSkgaW50byB0aGUgc2VsZWN0ZWQgdGltZXJ8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfVGltZXJOYnIpIGZyb20gc2VsZWN0ZWQgdGltZXIgbW9kdWxlIChiX01vZHVsTmJyKS4gIHwKK3wgICAgICAgICAgICAgICAgICAgICBUaGUgYWN0aW9uIGluIGRlcGVuZCBvZiB0aGUgdGltZSBtb2RlIHNlbGVjdGlvbi4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFNlZSB0aW1lciBtb2RlIGRlc2NyaXB0aW9uIHRhYmxlLiAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJLTE3MTAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9UaW1lck5iciAgICAgICAgOiBUaW1lciBudW1iZXIgdG8gd3JpdGUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDIpICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVTE9OR18gdWxfV3JpdGVWYWx1ZSAgICAgIDogVmFsdWUgdG8gd3JpdGUgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRpbWVyIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIG1vZHVsZSBpcyBub3QgYSBUSU1FUiBtb2R1bGUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUaW1lciIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1dyaXRlVGltZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwkJCSAgICAgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9UaW1lck5iciwKKwkJCSAgICAgICBVTE9ORyB1bF9Xcml0ZVZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkJLyogVGVzdCBpZiA4Mlg1NCB0aW1lciAqLworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfODJYNTRfVElNRVIpIHsKKwkJCS8qIFRlc3QgdGhlIHRpbWVyIG51bWJlciAqLworCQkJaWYgKGJfVGltZXJOYnIgPD0gMikgeworCQkJCS8qIFRlc3QgaWYgdGltZXIgaW5pdGlhbGlzZWQgKi8KKwkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLnNfODJYNTRNb2R1bGVJbmZvLnNfODJYNTRUaW1lckluZm9bYl9UaW1lck5icl0uYl84Mlg1NEluaXQgPT0gMSkgeworCQkJCQkvKiBXcml0ZSB0aGUgdmFsdWUgKi8KKwkJCQkJb3V0bCh1bF9Xcml0ZVZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIChiX1RpbWVyTmJyICogNCkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogVGltZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJCQlEUFJJTlRLKCJUaW1lciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogVGltZXIgc2VsZWN0aW9uIHdyb25nICovCisJCQkJRFBSSU5USygiVGltZXIgc2VsZWN0aW9uIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQl9CS8vIGlmICgoYl9UaW1lck5iciA+PSAwKSAmJiAoYl9UaW1lck5iciA8PSAyKSkKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgVElNRVIgbW9kdWxlICovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFRJTUVSIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCX0KKwl9IGVsc2UgeworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIGlfUmV0dXJuVmFsdWU7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwXzgyeDU0LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwXzgyeDU0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc5N2MwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfODJ4NTQuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwX1BDSV9CVVNfQ0xPQ0sgCQkJMAorI2RlZmluZSBBUENJMTcxMF9GUk9OVF9DT05ORUNUT1JfSU5QVVQgCQkxCisjZGVmaW5lIEFQQ0kxNzEwX1RJTUVSX1JFQURWQUxVRQkJMAorI2RlZmluZSBBUENJMTcxMF9USU1FUl9HRVRPVVRQVVRMRVZFTAkJMQorI2RlZmluZSBBUENJMTcxMF9USU1FUl9HRVRQUk9HUkVTU1NUQVRVUwkyCisjZGVmaW5lIEFQQ0kxNzEwX1RJTUVSX1dSSVRFVkFMVUUJCTMKKworI2RlZmluZSBBUENJMTcxMF9USU1FUl9SRUFESU5URVJSVVBUCQkxCisjZGVmaW5lIEFQQ0kxNzEwX1RJTUVSX1JFQURBTExUSU1FUgkJMgorCisvKiBCRUdJTiBKSyAyNy4xMC4wMyA6IEFkZCB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGEgNDAgTWh6IHF1YXJ0eiAqLworI2lmbmRlZiBBUENJMTcxMF8xME1IWgorI2RlZmluZSBBUENJMTcxMF8xME1IWgkxMAorI2VuZGlmCisvKiBFTkQgSksgMjcuMTAuMDMgOiBBZGQgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIDQwIE1oeiBxdWFydHogKi8KKworLyoKKyAqIDgyWDU0IFRJTUVSIElOSVNJQUxJU0FUSU9OIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0VGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyoKKyAqIDgyWDU0IFJFQUQgRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRBbGxUaW1lclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1RpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisgKiA4Mlg1NCBSRUFEICYgV1JJVEUgRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfUmVhZFRpbWVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1RpbWVyTmJyLAorCQkJICAgICAgUFVMT05HIHB1bF9UaW1lclZhbHVlKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0VGltZXJPdXRwdXRMZXZlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1RpbWVyTmJyLAorCQkJCSAgIFBCWVRFIHBiX091dHB1dExldmVsKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0VGltZXJQcm9ncmVzc1N0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1RpbWVyTmJyLAorCQkJCSAgICAgIFBCWVRFIHBiX1RpbWVyU3RhdHVzKTsKKworLyoKKyAqIDgyWDU0IFdSSVRFIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX1dyaXRlVGltZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1RpbWVyTmJyLAorCQkJICAgICAgIFVMT05HIHVsX1dyaXRlVmFsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE1NGQzYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmMKQEAgLTAsMCArMSwyMDMyIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQSSBBUENJMTcxMCAgICB8IENvbXBpbGVyIDogZ2NjICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogQ0hST05PLkMgICAgICAgIHwgVmVyc2lvbiAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEFQQ0ktMTcxMCBjaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDI5LzA2Lzk4IHwgUy4gV2ViZXIgIHwgRGlnaXRhbCBpbnB1dCAvIG91dHB1dCBpbXBsZW1lbnRhdGlvbiAgICAgICAgICB8CisgIHwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgfCAwOC8wNS8wMCB8IEd1aW5vdCBDICB8IC0gMDQwMC8wMjI4IEFsbCBGdW5jdGlvbiBpbiBSSU5HIDAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICBhdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworI2luY2x1ZGUgIkFQQ0kxNzEwX0Nocm9uby5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gICAgIGlfQVBDSTE3MTBfSW5pdENocm9ubyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX0Nocm9ub01vZGUsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfUENJSW5wdXRDbG9jaywgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9UaW1pbmdVbml0LCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HXyAgIHVsX1RpbWluZ0ludGVydmFsLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfUmVhbFRpbWluZ0ludGVydmFsKQorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmUgdGhlIGNocm9ub21ldGVyIG9wZXJhdGluZyBtb2RlIChiX0Nocm9ub01vZGUpfAorfCAgICAgICAgICAgICAgICAgICAgIGZyb20gc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIHVsX1RpbWluZ0ludGVydmFsIGFuZCB1bF9UaW1pbmdVbml0IGRldGVybWluZSB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aW1pbmcgYmFzZSBmb3IgdGhlIG1lYXN1cmVtZW50LiAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSBwdWxfUmVhbFRpbWluZ0ludGVydmFsIHJldHVybiB0aGUgcmVhbCB0aW1pbmcgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdmFsdWUuIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgIHwKK3wgICAgICAgICAgICAgICAgICAgICBhbnkgb3RoZXIgZnVuY3Rpb24gd2l0Y2ggYWNjZXNzIG9mIHRoZSBjaHJvbm9tZXRlci4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgV2l0Y2ggdGhpcyBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIEFQQ0ktMTcxMCB5b3UgaGF2ZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aGUgcG9zc2liaWxpdHkgdG8gbWVhc3VyZSB0aGUgdGltaW5nIHdpdGNoIHR3byBldmVudC4gfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIG1vZGUgMCBhbmQgMSBpcyBhcHByb3ByaWF0ZSBmb3IgcGVyaW9kIG1lYXN1cmVtZW50LnwKK3wgICAgICAgICAgICAgICAgICAgICBUaGUgbW9kZSAyIGFuZCAzIGlzIGFwcHJvcHJpYXRlIGZvciBmcmVxdWVudCAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVtZW50LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIG1vZGUgNCB0byA3IGlzIGFwcHJvcHJpYXRlIGZvciBtZWFzdXJpbmcgdGhlIHRpbWluZ3wKK3wgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuICB0d28gZXZlbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgIHwKK3wgQllURV8gICBiX01vZHVsTmJyICBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICB8Cit8IEJZVEVfICAgYl9DaHJvbm9Nb2RlCQkJCWRhdGFbMF0gICAgOiBDaHJvbm9tZXRlciBhY3Rpb24gbW9kZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDcpLiAgICAgICAgICAgICAgICAgICB8Cit8IEJZVEVfICAgYl9QQ0lJbnB1dENsb2NrCQkJZGF0YVsxXSA6IFNlbGVjdGlvbiBmcm9tIFBDSSBidXMgY2xvY2t8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zME1IWiA6ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgUENJIGJ1cyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgZnJvbSAzMCBNSHogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zM01IWiA6ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgUENJIGJ1cyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgZnJvbSAzMyBNSHogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF80ME1IWiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBBUENJLTE3MTAgaGF2ZSBhICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdyYXRlZCA0ME1oeiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFydHouICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICBCWVRFXyAgIGJfVGltaW5nVW5pdAlkYXRhWzJdICAgIDogQmFzZSB0aW1pbmcgdW5pdHkgKDAgdG8gNCkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogbnMgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiDCtXMgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBtcyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA6IHMgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IDogbW4gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgVUxPTkdfIHVsX1RpbWluZ0ludGVydmFsIDogZGF0YVszXQkgQmFzZSB0aW1pbmcgdmFsdWUuICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gIHB1bF9SZWFsVGltaW5nSW50ZXJ2YWwgOiBSZWFsICBiYXNlIHRpbWluZyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLgorfCAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IENocm9ub21ldGVyIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZyAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC02OiBUaW1pbmcgdW5pdHkgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTc6IEJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtODogWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpY2ggICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGJvYXJkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTk6IFlvdSBjYW4gbm90IHVzZWQgdGhlIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiB3aWNoICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBDSFJPTk9TIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdENocm9ubyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCVVMT05HIHVsX1RpbWVyVmFsdWUgPSAwOworCVVMT05HIHVsX1RpbWluZ0ludGVydmFsID0gMDsKKwlVTE9ORyB1bF9SZWFsVGltaW5nSW50ZXJ2YWwgPSAwOworCWRvdWJsZSBkX1JlYWxUaW1pbmdJbnRlcnZhbCA9IDA7CisJRFdPUkQgZHdfTW9kZUFycmF5WzhdID0KKwkJeyAweDAxLCAweDA1LCAweDAwLCAweDA0LCAweDAyLCAweDBFLCAweDBBLCAweDA2IH07CisJQllURSBiX01vZHVsTmJyLCBiX0Nocm9ub01vZGUsIGJfUENJSW5wdXRDbG9jaywgYl9UaW1pbmdVbml0OworCisJYl9Nb2R1bE5iciA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfQ2hyb25vTW9kZSA9IChCWVRFKSBkYXRhWzBdOworCWJfUENJSW5wdXRDbG9jayA9IChCWVRFKSBkYXRhWzFdOworCWJfVGltaW5nVW5pdCA9IChCWVRFKSBkYXRhWzJdOworCXVsX1RpbWluZ0ludGVydmFsID0gKFVMT05HKSBkYXRhWzNdOworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfQ0hST05PTUVURVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBjaHJvbm9tZXRlciBtb2RlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9DaHJvbm9Nb2RlIDw9IDcpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBQQ0kgYnVzIGNsb2NrICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgfHwKKwkJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgfHwKKwkJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSB0aW1pbmcgdW5pdHkgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX1RpbWluZ1VuaXQgPD0gNCkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IHRoZSBiYXNlIHRpbWluZyBzZWxlY3Rpb24gKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMCkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDY2KSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMHhGRkZGRkZGRlVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAxNDMxNjU1NzZVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDIpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMTQzMTY1VUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAzKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDE0M1VMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gNCkgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAyVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAwKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gNjApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDEzMDE1MDI0MFVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAxMzAxNTBVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMTMwVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDJVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSA1MCkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDB4RkZGRkZGRkZVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMTA3Mzc0MTgyVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAyKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDEwNzM3NFVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMykgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAxMDdVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDQpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gMVVMKSkpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIGJvYXJkIHZlcnNpb24gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKCgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmJfQm9hcmRWZXJzaW9uID4gMCkpIHx8IChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgdGhlIFRPUiB2ZXJzaW9uICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKCgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRikgPj0gMHgzMTMxKSkgfHwgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikpIHsKKwkJCQkJCQkJCWZwdV9iZWdpbgorCQkJCQkJCQkJCSgpOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWVyIDAgZGl2aXNpb24gZmF0b3IgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJc3dpdGNoIChiX1RpbWluZ1VuaXQpIHsKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIG5zICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAwOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgwLjAwMSAqIGJfUENJSW5wdXRDbG9jaykpOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWluZ0ludGVydmFsICogKDAuMDAxICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgwLjAwMSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDAuMDAxCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgLyAoMC4wMDEgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisJCQkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkwLjk5MzkyKTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgIC8qKioqKiovCisJCQkJCQkJCQkJLyogw6ZzICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAxOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgxLjAgKiBiX1BDSUlucHV0Q2xvY2spKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1pbmdJbnRlcnZhbCAqICgxLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDEuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkxLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgxLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisJCQkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkwLjk5MzkyKTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgIC8qKioqKiovCisJCQkJCQkJCQkJLyogbXMgKi8KKwkJCQkgICAvKioqKioqLworCisJCQkJCQkJCQljYXNlIDI6CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDEwMDAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWluZ0ludGVydmFsICogKDEwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMTAwMC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKTsKKwkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMTAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgLyAoMTAwMC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxUaW1pbmdJbnRlcnZhbCArIDAuNSkpIHsKKwkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkyOworCQkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMC45OTM5Mik7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKiovCisJCQkJCQkJCQkJLyogcyAqLworCQkJCSAgIC8qKioqKi8KKworCQkJCQkJCQkJY2FzZSAzOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgxMDAwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaykpOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWluZ0ludGVydmFsICogKDEwMDAwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMTAwMDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDEwMDAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jayk7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDEwMDAwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKwkJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTAuOTkzOTIpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgLyoqKioqKi8KKwkJCQkJCQkJCQkvKiBtbiAqLworCQkJCSAgIC8qKioqKiovCisKKwkJCQkJCQkJCWNhc2UgNDoKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCSh1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJNjApCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDEwMDAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSk7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpKHVsX1RpbWluZ0ludGVydmFsICogNjAuMCkgKiAoMTAwMDAwMC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgxMDAwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spKQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCTYwOworCQkJCQkJCQkJCWRfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDAuMDAxICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSAvIDYwLjA7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgxMDAwMDAwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpIC8gNjAuMCkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKwkJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTAuOTkzOTIpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlmcHVfZW5kKCk7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNhdmUgdGhlIFBDSSBpbnB1dCBjbG9jayAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2s7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNhdmUgdGhlIHRpbWluZyB1bml0eSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCWJfVGltaW5nVW5pdAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1RpbWluZ1VuaXQ7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgYmFzZSB0aW1pbmcgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCWRfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWw7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCB0aGUgY2hyb25vbWV0ZXIgbW9kZSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkd19Nb2RlQXJyYXkKKwkJCQkJCQkJCQlbYl9DaHJvbm9Nb2RlXTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRlc3QgaWYgNDAgTUh6IHVzZWQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCQlkd19Db25maWdSZWcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCQlkd19Db25maWdSZWcKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkweDgwOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zX0Nocm9ub01vZHVsZUluZm8uZHdfQ29uZmlnUmVnLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDE2ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogV3JpdGUgdGltZXIgMCB2YWx1ZSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bCh1bF9UaW1lclZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDaHJvbm9tZXRlciBpbml0LiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQkJCQkJYl9DaHJvbm9Jbml0CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVE9SIHZlcnNpb24gZXJyb3IgZm9yIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJRFBSSU5USygiVE9SIHZlcnNpb24gZXJyb3IgZm9yIDQwTUh6IGNsb2NrIHNlbGVjdGlvblxuIik7CisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS05OworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCB0aGlzIGJvYXJkICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCB0aGlzIGJvYXJkXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktODsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNzsKKwkJCQkJCX0KKwkJCQkJfQkvLyBpZiAoKGJfVGltaW5nVW5pdCA+PSAwKSAmJiAoYl9UaW1pbmdVbml0IDw9IDQpKQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRpbWluZyB1bml0eSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGltaW5nIHVuaXR5IHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0JLy8gaWYgKChiX1RpbWluZ1VuaXQgPj0gMCkgJiYgKGJfVGltaW5nVW5pdCA8PSA0KSkKKwkJCQl9CS8vIGlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQkvLyBpZiAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgfHwgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikpCisJCQl9CS8vIGlmIChiX0Nocm9ub01vZGUgPj0gMCAmJiBiX0Nocm9ub01vZGUgPD0gNykKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDaHJvbm9tZXRlciBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIkNocm9ub21ldGVyIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CS8vIGlmIChiX0Nocm9ub01vZGUgPj0gMCAmJiBiX0Nocm9ub01vZGUgPD0gNykKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKwlkYXRhWzBdID0gdWxfUmVhbFRpbWluZ0ludGVydmFsOworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0VuYWJsZUNocm9ubyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciwgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0N5Y2xlTW9kZSwgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW50ZXJydXB0RW5hYmxlKQorSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlRW5hYmxlRGlzYWJsZUNocm9ubyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRW5hYmxlIHRoZSBjaHJvbm9tZXRlciBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikuIFlvdSBtdXN0IGNhbGxpbmcgdGhlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iIGZ1bmN0aW9uIGJlIGZvciB5b3UgY2FsbCB0aGlzICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZW5hYmxlIHRoZSBjaHJvbm9tZXRlciBpbnRlcnJ1cHQsIHRoZSAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGNocm9ub21ldGVyIGdlbmVyYXRlIGEgaW50ZXJydXB0IGFmdGVyIHRoZSBzdG9wIHNpZ25hbC58Cit8ICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX1NldEJvYXJkSW50Um91dGluZVgiIGFuZCB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgbWFzayBkZXNjcmlwdGlvbiBjaGFwdGVyIGZyb20gdGhpcyBtYW51YWwuICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSBiX0N5Y2xlTW9kZSBwYXJhbWV0ZXIgZGV0ZXJtaW5lIGlmIHlvdSB3aWxsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZWQgYSBzaW5nbGUgb3IgbW9yZSBjeWNsZS4KKworfAkJCQkJICBEaXNhYmxlIHRoZSBjaHJvbm9tZXRlciBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gSWYgeW91IGRpc2FibGUgdGhlIGNocm9ub21ldGVyIGFmdGVyIGEgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RhcnQgc2lnbmFsIG9jY3VyIGFuZCB5b3UgcmVzdGFydCB0aGUgY2hyb25vbWV0ZXIgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB3aXRjaCB0aGUgIiBpX0FQQ0kxNzEwX0VuYWJsZUNocm9ubyIgZnVuY3Rpb24sIGlmIG5vICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0b3Agc2lnbmFsIG9jY3VyIHRoaXMgc3RhcnQgc2lnbmFsIGlzIGlnbm9yZWQuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICBDUl9BUkVGKGNoYW5zcGVjKSAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICBFTkFCbGUvRGlzYWJsZSBjaHJvbm8KK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0N5Y2xlTW9kZSAgICA6IFNlbGVjdGVkIHRoZSBjaHJvbm9tZXRlciAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgICAgICAgICBhY3F1aXNpdGlvbiBtb2RlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0ludGVycnVwdEVuYWJsZSA6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsyXSAgICAgICAgICAgIGNocm9ub21ldGVyIGludGVycnVwdC4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRU5BQkxFOiAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIGNocm9ub21ldGVyICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRElTQUJMRTogICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNhYmxlIHRoZSBjaHJvbm9tZXRlciAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENocm9ubyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBDaHJvbm9tZXRlciBhY3F1aXNpdGlvbiBtb2RlIGN5Y2xlIGlzIHdyb25nICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNzogSW50ZXJydXB0IGZ1bmN0aW9uIG5vdCBpbml0aWFsaXNlZC4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIKKyAgICAgICAgICAgICAgICAgICAgICAtODogZGF0YVswXSB3cm9uZyBpbnB1dCAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVDaHJvbm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlCWVRFIGJfTW9kdWxOYnIsIGJfQ3ljbGVNb2RlLCBiX0ludGVycnVwdEVuYWJsZSwgYl9BY3Rpb247CisJYl9Nb2R1bE5iciA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfQWN0aW9uID0gKEJZVEUpIGRhdGFbMF07CisJYl9DeWNsZU1vZGUgPSAoQllURSkgZGF0YVsxXTsKKwliX0ludGVycnVwdEVuYWJsZSA9IChCWVRFKSBkYXRhWzJdOworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfQ0hST05PTUVURVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGNocm9ub21ldGVyIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfQ2hyb25vTW9kdWxlSW5mby5iX0Nocm9ub0luaXQgPT0gMSkgeworCisJCQkJc3dpdGNoIChiX0FjdGlvbikgeworCisJCQkJY2FzZSBBUENJMTcxMF9FTkFCTEU6CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIGN5Y2xlIG1vZGUgcGFyYW1ldGVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfU0lOR0xFKQorCQkJCQkJfHwgKGJfQ3ljbGVNb2RlID09CisJCQkJCQkJQVBDSTE3MTBfQ09OVElOVU9VUykpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IHRoZSBpbnRlcnJ1cHQgZmxhZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKChiX0ludGVycnVwdEVuYWJsZSA9PQorCQkJCQkJCQlBUENJMTcxMF9FTkFCTEUpCisJCQkJCQkJfHwgKGJfSW50ZXJydXB0RW5hYmxlID09CisJCQkJCQkJCUFQQ0kxNzEwX0RJU0FCTEUpKQorCQkJCQkJeworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogU2F2ZSB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQkJCWJfSW50ZXJydXB0TWFzaworCQkJCQkJCQk9CisJCQkJCQkJCWJfSW50ZXJydXB0RW5hYmxlOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBTYXZlIHRoZSBjeWNsZSBtb2RlICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQkJCWJfQ3ljbGVNb2RlID0KKwkJCQkJCQkJYl9DeWNsZU1vZGU7CisKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQlkd19Db25maWdSZWcgPQorCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJZHdfQ29uZmlnUmVnICYKKwkJCQkJCQkJMHg4RikgfCAoKDEgJgorCQkJCQkJCQkJYl9JbnRlcnJ1cHRFbmFibGUpCisJCQkJCQkJCTw8IDUpIHwgKCgxICYKKwkJCQkJCQkJCWJfQ3ljbGVNb2RlKQorCQkJCQkJCQk8PCA2KSB8IDB4MTA7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IGVuYWJsZWQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfSW50ZXJydXB0RW5hYmxlID09CisJCQkJCQkJCUFQQ0kxNzEwX0VOQUJMRSkKKwkJCQkJCQl7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJb3V0bChkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfQ29uZmlnUmVnLAorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkrIDMyICsKKwkJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQkJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKwkJCQkJCQl9CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwkJCQkJCQkvKiBFbmFibGUgdGhlIGNocm9ub21ldGVyICAgICAgICAgICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCW91dGwoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJZHdfQ29uZmlnUmVnLAorCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJMTYgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogQ2xlYXIgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJb3V0bCgwLCBkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJMzYgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCX0JLy8gaWYgKChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpIHx8IChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9ESVNBQkxFKSkKKwkJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIkludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJCX0JLy8gaWYgKChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpIHx8IChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9ESVNBQkxFKSkKKwkJCQkJfQkvLyBpZiAoKGJfQ3ljbGVNb2RlID09IEFQQ0kxNzEwX1NJTkdMRSkgfHwgKGJfQ3ljbGVNb2RlID09IEFQQ0kxNzEwX0NPTlRJTlVPVVMpKQorCQkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIENocm9ub21ldGVyIGFjcXVpc2l0aW9uIG1vZGUgY3ljbGUgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiQ2hyb25vbWV0ZXIgYWNxdWlzaXRpb24gbW9kZSBjeWNsZSBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0JLy8gaWYgKChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9TSU5HTEUpIHx8IChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9DT05USU5VT1VTKSkKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEFQQ0kxNzEwX0RJU0FCTEU6CisKKwkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJYl9JbnRlcnJ1cHRNYXNrID0gMDsKKworCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQlkd19Db25maWdSZWcgPQorCQkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQlkd19Db25maWdSZWcgJiAweDJGOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgICAqLworCQkJCQkvKiBEaXNhYmxlIHRoZSBjaHJvbm9tZXRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby5kd19Db25maWdSZWcsCisJCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgMTYgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGNvbnRpbnVvdXMgbW9kZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQkJYl9DeWNsZU1vZGUgPT0KKwkJCQkJCUFQQ0kxNzEwX0NPTlRJTlVPVVMpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogQ2xlYXIgc3RhdHVzIHJlZ2lzdGVyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDM2ICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQlEUFJJTlRLKCJJbnB1dHMgd3JvbmchIEVuYWJsZSBvciBEaXNhYmxlIGNocm9ub1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtODsKKwkJCQl9CS8vIHN3aXRjaCBFTkFCTEUvRElTQUJMRQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOklOVAlpX0FQQ0kxNzEwX0luc25SZWFkQ2hyb25vKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCitzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkICBmdW5jdGlvbnMgZm9yIFRpbWVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRDaHJvbm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUJZVEUgYl9SZWFkVHlwZTsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisKKwliX1JlYWRUeXBlID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGJfUmVhZFR5cGUpIHsKKwljYXNlIEFQQ0kxNzEwX0NIUk9OT19QUk9HUkVTU19TVEFUVVM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0dldENocm9ub1Byb2dyZXNzU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKFBCWVRFKSAmIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfQ0hST05PX1JFQURWQUxVRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfUmVhZENocm9ub1ZhbHVlKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShVSU5UKSBpbnNuLT51bnVzZWRbMF0sCisJCQkoUEJZVEUpICYgZGF0YVswXSwgKFBVTE9ORykgJiBkYXRhWzFdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0NIUk9OT19DT05WRVJUVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0NvbnZlcnRDaHJvbm9WYWx1ZShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoVUxPTkcpIGluc24tPnVudXNlZFswXSwKKwkJCShQVUxPTkcpICYgZGF0YVswXSwKKwkJCShQQllURSkgJiBkYXRhWzFdLAorCQkJKFBCWVRFKSAmIGRhdGFbMl0sCisJCQkoUFVJTlQpICYgZGF0YVszXSwKKwkJCShQVUlOVCkgJiBkYXRhWzRdLCAoUFVJTlQpICYgZGF0YVs1XSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9DSFJPTk9fUkVBRElOVEVSUlVQVDoKKwkJcHJpbnRrKCJJbiBDaHJvbm8gUmVhZCBJbnRlcnJ1cHRcbiIpOworCisJCWRhdGFbMF0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLmJfT2xkTW9kdWxlTWFzazsKKwkJZGF0YVsxXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0udWxfT2xkSW50ZXJydXB0TWFzazsKKwkJZGF0YVsyXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0udWxfT2xkQ291bnRlckxhdGNoVmFsdWU7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBJbmNyZW1lbnQgdGhlIHJlYWQgRklGTyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWRldnByaXYtPgorCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJdWlfUmVhZCA9IChkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXVpX1JlYWQgKyAxKSAlIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiUmVhZFR5cGUgUGFyYW1ldGVyIHdyb25nXG4iKTsKKwl9CisKKwlpZiAoaV9SZXR1cm5WYWx1ZSA+PSAwKQorCQlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldENocm9ub1Byb2dyZXNzU3RhdHVzICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfQ2hyb25vU3RhdHVzKSAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBjaHJvbm9tZXRlciBzdGF0dXMgKHBiX0Nocm9ub1N0YXR1cykgZnJvbSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBjaHJvbm9tZXRlciBtb2R1bGUgKGJfTW9kdWxOYnIpLiAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMykgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyAgcGJfQ2hyb25vU3RhdHVzIDogUmV0dXJuIHRoZSBjaHJvbm9tZXRlciAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBNZWFzdXJlbWVudCBub3Qgc3RhcnRlZC58Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHN0YXJ0IHNpZ25hbCBvY2N1ci4gIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogTWVhc3VyZW1lbnQgc3RhcnRlZC4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0YXJ0IHNpZ25hbCBvY2N1ci4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IE1lYXN1cmVtZW50IHN0b3BwZWQuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdG9wIHNpZ25hbCBvY2N1ci4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWVhc3VyZW1lbnQgaXMgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZS4gICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOiBBIG92ZXJmbG93IG9jY3VyLiBZb3UgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgY2hhbmdlIHRoZSBiYXNlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nIHdpdGNoIHRoZSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfR2V0Q2hyb25vUHJvZ3Jlc3NTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9DaHJvbm9TdGF0dXMpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1czsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNocm9ub21ldGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0NIUk9OT01FVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBjaHJvbm9tZXRlciBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX0Nocm9ub01vZHVsZUluZm8uYl9DaHJvbm9Jbml0ID09IDEpIHsKKworCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyA4ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBvdmVyZmxvdyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChkd19TdGF0dXMgJiA4KSA9PSA4KSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBPdmVyZmxvdyBvY2N1ciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkqcGJfQ2hyb25vU3RhdHVzID0gMzsKKwkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgOCkgPT0gOCkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIG1lYXN1cmVtZW50IHN0b3BwZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoZHdfU3RhdHVzICYgMikgPT0gMikgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogQSBzdG9wIHNpZ25hbCBvY2N1ciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkqcGJfQ2hyb25vU3RhdHVzID0gMjsKKwkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDIpID09IDIpCisJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIG1lYXN1cmVtZW50IHN0YXJ0ZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBBIHN0YXJ0IHNpZ25hbCBvY2N1ciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJKnBiX0Nocm9ub1N0YXR1cyA9IDE7CisJCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgMSkgPT0gMSkKKwkJCQkJCWVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIE1lYXN1cmVtZW50IG5vdCBzdGFydGVkICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkqcGJfQ2hyb25vU3RhdHVzID0gMDsKKwkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiAxKSA9PSAxKQorCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgMikgPT0gMikKKwkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgOCkgPT0gOCkKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCURQUklOVEsoIkNocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9SZWFkQ2hyb25vVmFsdWUgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UXyAgICB1aV9UaW1lT3V0LCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX0Nocm9ub1N0YXR1cywgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfQ2hyb25vVmFsdWUpICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIGNocm9ub21ldGVyIHN0YXR1cyAocGJfQ2hyb25vU3RhdHVzKSBhbmQgdGhlfAorfCAgICAgICAgICAgICAgICAgICAgIHRpbWluZyB2YWx1ZSAocHVsX0Nocm9ub1ZhbHVlKSBhZnRlciBhIHN0b3Agc2lnbmFsICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgb2NjdXIgZnJvbSBzZWxlY3RlZCBjaHJvbm9tZXRlciBtb2R1bGUgKGJfTW9kdWxOYnIpLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGFyZSBvbmx5IGF2YWlibGUgaWYgeW91IGhhdmUgZGlzYWJsZWQgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnRlcnJ1cHQgZnVuY3Rpb25hbGl0eS4gU2VlIGZ1bmN0aW9uICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRW5hYmxlQ2hyb25vIiBhbmQgdGhlIEludGVycnVwdCBtYXNrICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiBjaGFwdGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFlvdSBjYW4gdGVzdCB0aGUgY2hyb25vbWV0ZXIgc3RhdHVzIHdpdGNoIHRoZSAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfR2V0Q2hyb25vUHJvZ3Jlc3NTdGF0dXMiIGZ1bmN0aW9uLiAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIHB1bF9DaHJvbm9WYWx1ZSBwYXJhbWV0ZXIgaXMgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbm90IHJlYWwgbWVhc3VyZWQgdGltaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCB1c2VkIHRoZSAiaV9BUENJMTcxMF9Db252ZXJ0Q2hyb25vVmFsdWUiICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9yIG1ha2UgdGhpcyBvcGVyYXRpb24gZm9yIGNhbGN1bGF0ZSB0aGUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGltaW5nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRpbWluZyA9IHB1bF9DaHJvbm9WYWx1ZSAqIHB1bF9SZWFsVGltaW5nSW50ZXJ2YWwuICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBwdWxfUmVhbFRpbWluZ0ludGVydmFsIGlzIHRoZSByZXR1cm5lZCBwYXJhbWV0ZXIgZnJvbSAgfAorfCAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iIGZ1bmN0aW9uIGFuZCB0aGUgdGltZSB1bml0eSBpcyB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIGJfVGltaW5nVW5pdCBmcm9tICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iIGZ1bmN0aW9ufAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMykgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyAgcGJfQ2hyb25vU3RhdHVzIDogUmV0dXJuIHRoZSBjaHJvbm9tZXRlciAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBNZWFzdXJlbWVudCBub3Qgc3RhcnRlZC58Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHN0YXJ0IHNpZ25hbCBvY2N1ci4gIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogTWVhc3VyZW1lbnQgc3RhcnRlZC4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0YXJ0IHNpZ25hbCBvY2N1ci4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IE1lYXN1cmVtZW50IHN0b3BwZWQuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdG9wIHNpZ25hbCBvY2N1ci4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWVhc3VyZW1lbnQgaXMgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZS4gICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOiBBIG92ZXJmbG93IG9jY3VyLiBZb3UgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgY2hhbmdlIHRoZSBiYXNlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltaW5nIHdpdGNoIHRoZSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICB8Cit8ICAgICAgICAgICAgICAgICAgICAgUFVMT05HICBwdWxfQ2hyb25vVmFsdWUgIDogQ2hyb25vbWV0ZXIgdGltaW5nIHZhbHVlLiAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENocm9ubyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBUaW1lb3V0IHBhcmFtZXRlciBpcyB3cm9uZyAoMCB0byA2NTUzNSkgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IEludGVycnVwdCByb3V0aW5lIGluc3RhbGxlZC4gWW91IGNhbiBub3QgcmVhZCAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0bHkgdGhlIGNocm9ub21ldGVyIG1lYXN1cmVkIHRpbWluZy4gICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9SZWFkQ2hyb25vVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLAorCVVJTlQgdWlfVGltZU91dCwgUEJZVEUgcGJfQ2hyb25vU3RhdHVzLCBQVUxPTkcgcHVsX0Nocm9ub1ZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXM7CisJRFdPUkQgZHdfVGltZU91dCA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjaHJvbm9tZXRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9DSFJPTk9NRVRFUikgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLmJfQ2hyb25vSW5pdCA9PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgdGltb3V0IHBhcmFtZXRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKCh1aV9UaW1lT3V0ID49IDApCisJCQkJCSYmICh1aV9UaW1lT3V0IDw9IDY1NTM1VUwpKSB7CisKKwkJCQkJZm9yICg7OykgeworCQkJICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFJlYWQgdGhlIHN0YXR1cyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyA4ICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBvdmVyZmxvdyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgoZHdfU3RhdHVzICYgOCkgPT0gOCkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIE92ZXJmbG93IG9jY3VyICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkqcGJfQ2hyb25vU3RhdHVzID0gMzsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgY29udGludW91cyBtb2RlICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby4KKwkJCQkJCQkJYl9DeWNsZU1vZGUgPT0KKwkJCQkJCQkJQVBDSTE3MTBfQ09OVElOVU9VUykKKwkJCQkJCQl7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIENsZWFyIHN0YXR1cyByZWdpc3RlciAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAzNiArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQl9CisKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiA4KSA9PSA4KQorCQkJCQkJZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgbWVhc3VyZW1lbnQgc3RvcHBlZCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgoZHdfU3RhdHVzICYgMikgPT0KKwkJCQkJCQkJMikgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogQSBzdG9wIHNpZ25hbCBvY2N1ciAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkqcGJfQ2hyb25vU3RhdHVzCisJCQkJCQkJCQk9IDI7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IGlmIGNvbnRpbm5vdXMgbW9kZSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uCisJCQkJCQkJCQliX0N5Y2xlTW9kZQorCQkJCQkJCQkJPT0KKwkJCQkJCQkJCUFQQ0kxNzEwX0NPTlRJTlVPVVMpCisJCQkJCQkJCXsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENsZWFyIHN0YXR1cyByZWdpc3RlciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlvdXRsKDAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMzYgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJCX0KKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDIpID09IDIpCisJCQkJCQkJZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgbWVhc3VyZW1lbnQgc3RhcnRlZCAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoZHdfU3RhdHVzICYgMSkgPT0gMSkgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBBIHN0YXJ0IHNpZ25hbCBvY2N1ciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCSpwYl9DaHJvbm9TdGF0dXMKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpCisJCQkJCQkJCWVsc2UgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBNZWFzdXJlbWVudCBub3Qgc3RhcnRlZCAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCSpwYl9DaHJvbm9TdGF0dXMKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJMDsKKwkJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpCisJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDIpID09IDIpCisJCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgOCkgPT0gOCkKKworCQkJCQkJaWYgKGR3X1RpbWVPdXQgPT0gdWlfVGltZU91dCkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGltZW91dCBvY2N1ciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIEluY3JlbWVudCB0aGUgdGltZW91dCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWR3X1RpbWVPdXQgPQorCQkJCQkJCQlkd19UaW1lT3V0ICsgMTsKKwkJCQkJCQltZGVsYXkoMTAwMCk7CisKKwkJCQkJCX0KKwkJCQkJfQkvLyBmb3IgKDs7KQorCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgc3RvcCBzaWduYWwgb2NjdXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKnBiX0Nocm9ub1N0YXR1cyA9PSAyKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUmVhZCB0aGUgbWVhc3VyZWQgdGltaW5nIHZhbHVlICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkqcHVsX0Nocm9ub1ZhbHVlID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyA0ICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCWlmICgqcHVsX0Nocm9ub1ZhbHVlICE9IDApIHsKKwkJCQkJCQkqcHVsX0Nocm9ub1ZhbHVlID0KKwkJCQkJCQkJKnB1bF9DaHJvbm9WYWx1ZQorCQkJCQkJCQktIDE7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiB0aW1lb3V0IG9jY3VyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKCpwYl9DaHJvbm9TdGF0dXMgIT0gMykKKwkJCQkJCQkmJiAoZHdfVGltZU91dCA9PQorCQkJCQkJCQl1aV9UaW1lT3V0KQorCQkJCQkJCSYmICh1aV9UaW1lT3V0ICE9IDApKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUaW1lb3V0IG9jY3VyICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCSpwYl9DaHJvbm9TdGF0dXMgPSA0OworCQkJCQkJfQorCQkJCQl9CisKKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGltZW91dCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCURQUklOVEsoIlRpbWVvdXQgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCURQUklOVEsoIkNocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Db252ZXJ0Q2hyb25vVmFsdWUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gICB1bF9DaHJvbm9WYWx1ZSwgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX0hvdXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfTWludXRlLCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9TZWNvbmQsICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVSU5UXyAgcHVpX01pbGxpU2Vjb25kLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVJTlRfICBwdWlfTWljcm9TZWNvbmQsICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUlOVF8gIHB1aV9OYW5vU2Vjb25kKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbnZlcnQgdGhlIGNocm9ub21ldGVyIG1lYXN1cmVkIHRpbWluZyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKHVsX0Nocm9ub1ZhbHVlKSBpbiB0byBoLCBtbiwgcywgbXMsIMK1cywgbnMuICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMyl8Cit8ICAgICAgICAgICAgICAgICAgICAgVUxPTkdfIHVsX0Nocm9ub1ZhbHVlIDogTWVhc3VyZWQgY2hyb25vbWV0ZXIgdGltaW5nICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSJpX0FQQ0kxNzEwX1JlYWRDaHJvbm9WYWx1ZSJ8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQVUxPTkdfICAgcHVsX0hvdXIgICAgICAgIDogQ2hyb25vbWV0ZXIgdGltaW5nIGhvdXIgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgICAgcGJfTWludXRlICAgICAgOiBDaHJvbm9tZXRlciB0aW1pbmcgbWludXRlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgICBwYl9TZWNvbmQgICAgICA6IENocm9ub21ldGVyIHRpbWluZyBzZWNvbmQgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQVUlOVF8gICAgcHVpX01pbGxpU2Vjb25kICA6IENocm9ub21ldGVyIHRpbWluZyBtaW5pICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmQgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgUFVJTlRfICAgIHB1aV9NaWNyb1NlY29uZCA6IENocm9ub21ldGVyIHRpbWluZyBtaWNybyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBVSU5UXyAgICBwdWlfTmFub1NlY29uZCAgOiBDaHJvbm9tZXRlciB0aW1pbmcgbmFubyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZCAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENocm9ubyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9Db252ZXJ0Q2hyb25vVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLAorCVVMT05HIHVsX0Nocm9ub1ZhbHVlLAorCVBVTE9ORyBwdWxfSG91ciwKKwlQQllURSBwYl9NaW51dGUsCisJUEJZVEUgcGJfU2Vjb25kLAorCVBVSU5UIHB1aV9NaWxsaVNlY29uZCwgUFVJTlQgcHVpX01pY3JvU2Vjb25kLCBQVUlOVCBwdWlfTmFub1NlY29uZCkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJZG91YmxlIGRfSG91cjsKKwlkb3VibGUgZF9NaW51dGU7CisJZG91YmxlIGRfU2Vjb25kOworCWRvdWJsZSBkX01pbGxpU2Vjb25kOworCWRvdWJsZSBkX01pY3JvU2Vjb25kOworCWRvdWJsZSBkX05hbm9TZWNvbmQ7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjaHJvbm9tZXRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9DSFJPTk9NRVRFUikgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLmJfQ2hyb25vSW5pdCA9PSAxKSB7CisJCQkJZnB1X2JlZ2luKCk7CisKKwkJCQlkX0hvdXIgPSAoZG91YmxlKXVsX0Nocm9ub1ZhbHVlICooZG91YmxlKQorCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfQ2hyb25vTW9kdWxlSW5mby5kX1RpbWluZ0ludGVydmFsOworCisJCQkJc3dpdGNoIChkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uYl9UaW1pbmdVbml0KSB7CisJCQkJY2FzZSAwOgorCQkJCQlkX0hvdXIgPSBkX0hvdXIgLyAoZG91YmxlKTEwMDAuMDsKKworCQkJCWNhc2UgMToKKwkJCQkJZF9Ib3VyID0gZF9Ib3VyIC8gKGRvdWJsZSkxMDAwLjA7CisKKwkJCQljYXNlIDI6CisJCQkJCWRfSG91ciA9IGRfSG91ciAvIChkb3VibGUpMTAwMC4wOworCisJCQkJY2FzZSAzOgorCQkJCQlkX0hvdXIgPSBkX0hvdXIgLyAoZG91YmxlKTYwLjA7CisKKwkJCQljYXNlIDQ6CisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENhbGN1bGF0ZSB0aGUgaG91ciAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRfSG91ciA9IGRfSG91ciAvIChkb3VibGUpNjAuMDsKKwkJCQkJKnB1bF9Ib3VyID0gKFVMT05HKSBkX0hvdXI7CisKKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxjdWxhdGUgdGhlIG1pbnV0ZSAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZF9NaW51dGUgPSBkX0hvdXIgLSAqcHVsX0hvdXI7CisJCQkJCWRfTWludXRlID0gZF9NaW51dGUgKiA2MDsKKwkJCQkJKnBiX01pbnV0ZSA9IChCWVRFKSBkX01pbnV0ZTsKKworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENhbGN1bGF0ZSB0aGUgc2Vjb25kICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkX1NlY29uZCA9IGRfTWludXRlIC0gKnBiX01pbnV0ZTsKKwkJCQkJZF9TZWNvbmQgPSBkX1NlY29uZCAqIDYwOworCQkJCQkqcGJfU2Vjb25kID0gKEJZVEUpIGRfU2Vjb25kOworCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxjdWxhdGUgdGhlIG1pbmkgc2Vjb25kICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRfTWlsbGlTZWNvbmQgPSBkX1NlY29uZCAtICpwYl9TZWNvbmQ7CisJCQkJCWRfTWlsbGlTZWNvbmQgPSBkX01pbGxpU2Vjb25kICogMTAwMDsKKwkJCQkJKnB1aV9NaWxsaVNlY29uZCA9IChVSU5UKSBkX01pbGxpU2Vjb25kOworCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2FsY3VsYXRlIHRoZSBtaWNybyBzZWNvbmQgKi8KKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRfTWljcm9TZWNvbmQgPQorCQkJCQkJZF9NaWxsaVNlY29uZCAtCisJCQkJCQkqcHVpX01pbGxpU2Vjb25kOworCQkJCQlkX01pY3JvU2Vjb25kID0gZF9NaWNyb1NlY29uZCAqIDEwMDA7CisJCQkJCSpwdWlfTWljcm9TZWNvbmQgPSAoVUlOVCkgZF9NaWNyb1NlY29uZDsKKworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENhbGN1bGF0ZSB0aGUgbWljcm8gc2Vjb25kICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkX05hbm9TZWNvbmQgPQorCQkJCQkJZF9NaWNyb1NlY29uZCAtCisJCQkJCQkqcHVpX01pY3JvU2Vjb25kOworCQkJCQlkX05hbm9TZWNvbmQgPSBkX05hbm9TZWNvbmQgKiAxMDAwOworCQkJCQkqcHVpX05hbm9TZWNvbmQgPSAoVUlOVCkgZF9OYW5vU2Vjb25kOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlmcHVfZW5kKCk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ2hyb25vbWV0ZXIgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlEUFJJTlRLKCJDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCBpX0FQQ0kxNzEwX0luc25CaXRzQ2hyb25vRGlnaXRhbElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFNldHMgdGhlIG91dHB1dCB3aXRjaCBoYXMgYmVlbiBwYXNzZWQgd2l0aCB0aGUgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGJfQ2hhbm5lbC4gU2V0dGluZyBhbiBvdXRwdXQgbWVhbnMgc2V0dGluZyBhbnwKK3wgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgaGlnaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfT3V0cHV0Q2hhbm5lbCA6IFNlbGVjdGlvbiBmcm9tIGRpZ2l0YWwgb3V0cHV0ICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JfQ0hBTigpICAgICAgICAgICAgICAgICAgY2hhbm5lbCAoMCB0byAyKSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IENoYW5uZWwgSCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5lbCBBICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBDaGFubmVsIEIgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgZGlnaXRhbCBvdXRwdXQgaXMgd3JvbmcgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENocm9ubyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9TZXRDaHJvbm9DaGxPZmYgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9PdXRwdXRDaGFubmVsKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlc2V0cyB0aGUgb3V0cHV0IHdpdGNoIGhhcyBiZWVuIHBhc3NlZCB3aXRoIHRoZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGJfQ2hhbm5lbC4gUmVzZXR0aW5nIGFuIG91dHB1dCBtZWFucyBzZXR0aW5nIHwKK3wgICAgICAgICAgICAgICAgICAgICBhbiBvdXRwdXQgbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSA6IENobCBPTiwgQ2hsIE9GRiAsIENobCBSZWFkICwgUG9ydCBSZWFkCisKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICBDUl9BUkVGICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKXwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX091dHB1dENoYW5uZWwgQ1JfQ0hBTiA6IFNlbGVjdGlvbiBmcm9tIGRpZ2l0YWwgb3V0cHV0ICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCAoMCB0byAyKSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IENoYW5uZWwgSCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5lbCBBICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBDaGFubmVsIEIgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgZGlnaXRhbCBvdXRwdXQgaXMgd3JvbmcgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENocm9ubyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9SZWFkQ2hyb25vQ2hsVmFsdWUgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfSW5wdXRDaGFubmVsLCAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9DaGFubmVsU3RhdHVzKSAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBzdGF0dXMgZnJvbSBzZWxlY3RlZCBkaWdpdGFsIGlucHV0ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9JbnB1dENoYW5uZWwpIGZyb20gc2VsZWN0ZWQgY2hyb25vbWV0ZXIgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMyl8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnB1dENoYW5uZWwgIDogU2VsZWN0aW9uIGZyb20gZGlnaXRhbCBpbnB1dCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsICgwIHRvIDIpICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JfQ0hBTigpICAgICAgICAgICAgIDAgOiBDaGFubmVsIEUgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5uZWwgRiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogQ2hhbm5lbCBHICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX0NoYW5uZWxTdGF0dXMgOiBEaWdpdGFsIGlucHV0IGNoYW5uZWwgc3RhdHVzLnwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgICAgICAgMCA6IENoYW5uZWwgaXMgbm90IGFjdGl2ZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5lbCBpcyBhY3RpdmUgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgQ2hyb25vbWV0ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgaW5wdXQgaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfUmVhZENocm9ub1BvcnRWYWx1ZSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfIHBiX1BvcnRWYWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBmcm9tIGRpZ2l0YWwgaW5wdXRzIHBvcnQgZnJvbSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkICAoYl9Nb2R1bE5icikgY2hyb25vbWV0ZXIgbW9kdWxlLiAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMyl8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfUG9ydFZhbHVlICAgOiBEaWdpdGFsIGlucHV0cyBwb3J0IHN0YXR1cy4KK3wgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDaHJvbm8iICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNDaHJvbm9EaWdpdGFsSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlCWVRFIGJfTW9kdWxOYnIsIGJfT3V0cHV0Q2hhbm5lbCwgYl9JbnB1dENoYW5uZWwsIGJfSU9UeXBlOworCURXT1JEIGR3X1N0YXR1czsKKwlQQllURSBwYl9DaGFubmVsU3RhdHVzOworCVBCWVRFIHBiX1BvcnRWYWx1ZTsKKworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwliX0lPVHlwZSA9IChCWVRFKSBkYXRhWzBdOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfQ0hST05PTUVURVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGNocm9ub21ldGVyIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfQ2hyb25vTW9kdWxlSW5mby5iX0Nocm9ub0luaXQgPT0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGRpZ2l0YWwgb3V0cHV0IGNoYW5uZWwgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlzd2l0Y2ggKGJfSU9UeXBlKSB7CisKKwkJCQljYXNlIEFQQ0kxNzEwX0NIUk9OT19TRVRfQ0hBTk5FTE9GRjoKKworCQkJCQliX091dHB1dENoYW5uZWwgPQorCQkJCQkJKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCQkJCQlpZiAoYl9PdXRwdXRDaGFubmVsIDw9IDIpIHsKKworCQkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDIwICsKKwkJCQkJCQkoYl9PdXRwdXRDaGFubmVsICogNCkgKworCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJfQkvLyBpZiAoKGJfT3V0cHV0Q2hhbm5lbCA+PSAwKSAmJiAoYl9PdXRwdXRDaGFubmVsIDw9IDIpKQorCQkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKworCQkJCQl9CS8vIGlmICgoYl9PdXRwdXRDaGFubmVsID49IDApICYmIChiX091dHB1dENoYW5uZWwgPD0gMikpCisKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEFQQ0kxNzEwX0NIUk9OT19TRVRfQ0hBTk5FTE9OOgorCisJCQkJCWJfT3V0cHV0Q2hhbm5lbCA9CisJCQkJCQkoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJCQkJCWlmIChiX091dHB1dENoYW5uZWwgPD0gMikgeworCisJCQkJCQlvdXRsKDEsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCQl1aV9BZGRyZXNzICsgMjAgKworCQkJCQkJCShiX091dHB1dENoYW5uZWwgKiA0KSArCisJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQl9CS8vIGlmICgoYl9PdXRwdXRDaGFubmVsID49IDApICYmIChiX091dHB1dENoYW5uZWwgPD0gMikpCisJCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaGUgc2VsZWN0ZWQgZGlnaXRhbCBvdXRwdXQgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgZGlnaXRhbCBvdXRwdXQgaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCisJCQkJCX0JLy8gaWYgKChiX091dHB1dENoYW5uZWwgPj0gMCkgJiYgKGJfT3V0cHV0Q2hhbm5lbCA8PSAyKSkKKworCQkJCQlicmVhazsKKworCQkJCWNhc2UgQVBDSTE3MTBfQ0hST05PX1JFQURfQ0hBTk5FTDoKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBkaWdpdGFsIGlucHV0IGNoYW5uZWwgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlwYl9DaGFubmVsU3RhdHVzID0gKFBCWVRFKSAmIGRhdGFbMF07CisJCQkJCWJfSW5wdXRDaGFubmVsID0KKwkJCQkJCShCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCQkJCQlpZiAoYl9JbnB1dENoYW5uZWwgPD0gMikgeworCisJCQkJCQlkd19TdGF0dXMgPQorCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDEyICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCSpwYl9DaGFubmVsU3RhdHVzID0KKwkJCQkJCQkoQllURSkgKCgoZHdfU3RhdHVzID4+CisJCQkJCQkJCQliX0lucHV0Q2hhbm5lbCkKKwkJCQkJCQkJJiAxKSBeIDEpOworCQkJCQl9CS8vIGlmICgoYl9JbnB1dENoYW5uZWwgPj0gMCkgJiYgKGJfSW5wdXRDaGFubmVsIDw9IDIpKQorCQkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaGUgc2VsZWN0ZWQgZGlnaXRhbCBpbnB1dCBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGRpZ2l0YWwgaW5wdXQgaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCQl9CS8vIGlmICgoYl9JbnB1dENoYW5uZWwgPj0gMCkgJiYgKGJfSW5wdXRDaGFubmVsIDw9IDIpKQorCisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBBUENJMTcxMF9DSFJPTk9fUkVBRF9QT1JUOgorCisJCQkJCXBiX1BvcnRWYWx1ZSA9IChQQllURSkgJiBkYXRhWzBdOworCisJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDEyICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkqcGJfUG9ydFZhbHVlID0KKwkJCQkJCShCWVRFKSAoKGR3X1N0YXR1cyAmIDB4NykgXiA3KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENocm9ub21ldGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJDaHJvbm9tZXRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBDaHJvbm9tZXRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIENocm9ub21ldGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0Nocm9uby5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmI1MGNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwXzMwTUhaCQkJMzAKKyNkZWZpbmUgQVBDSTE3MTBfMzNNSFoJCQkzMworI2RlZmluZSBBUENJMTcxMF80ME1IWgkJCTQwCisKKyNkZWZpbmUgQVBDSTE3MTBfU0lOR0xFCQkJMAorI2RlZmluZSBBUENJMTcxMF9DT05USU5VT1VTCQkxCisKKyNkZWZpbmUgQVBDSTE3MTBfQ0hST05PX1BST0dSRVNTX1NUQVRVUwkwCisjZGVmaW5lIEFQQ0kxNzEwX0NIUk9OT19SRUFEVkFMVUUJMQorI2RlZmluZSBBUENJMTcxMF9DSFJPTk9fQ09OVkVSVFZBTFVFCTIKKyNkZWZpbmUgQVBDSTE3MTBfQ0hST05PX1JFQURJTlRFUlJVUFQJMworCisjZGVmaW5lIEFQQ0kxNzEwX0NIUk9OT19TRVRfQ0hBTk5FTE9OCTAKKyNkZWZpbmUgQVBDSTE3MTBfQ0hST05PX1NFVF9DSEFOTkVMT0ZGCTEKKyNkZWZpbmUgQVBDSTE3MTBfQ0hST05PX1JFQURfQ0hBTk5FTAkyCisjZGVmaW5lIEFQQ0kxNzEwX0NIUk9OT19SRUFEX1BPUlQJMworCisvKgorICogQ0hST05PTUVURVIgSU5JU0lBTElTQVRJT04gRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRDaHJvbm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlRW5hYmxlRGlzYWJsZUNocm9ubyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvKgorICogQ0hST05PTUVURVIgUkVBRCBGVU5DVElPTgorICovCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZENocm9ubyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0Q2hyb25vUHJvZ3Jlc3NTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9DaHJvbm9TdGF0dXMpOworCitJTlQgaV9BUENJMTcxMF9SZWFkQ2hyb25vVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBCWVRFIGJfTW9kdWxOYnIsCisJCQkgICAgICAgVUlOVCB1aV9UaW1lT3V0LCBQQllURSBwYl9DaHJvbm9TdGF0dXMsCisJCQkgICAgICAgUFVMT05HIHB1bF9DaHJvbm9WYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX0NvbnZlcnRDaHJvbm9WYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgQllURSBiX01vZHVsTmJyLAorCQkJCSAgVUxPTkcgdWxfQ2hyb25vVmFsdWUsCisJCQkJICBQVUxPTkcgcHVsX0hvdXIsCisJCQkJICBQQllURSBwYl9NaW51dGUsCisJCQkJICBQQllURSBwYl9TZWNvbmQsCisJCQkJICBQVUlOVCBwdWlfTWlsbGlTZWNvbmQsIFBVSU5UIHB1aV9NaWNyb1NlY29uZCwKKwkJCQkgIFBVSU5UIHB1aV9OYW5vU2Vjb25kKTsKKworLyoKKyAqIENIUk9OT01FVEVSIERJR0lUQUwgSU5QVVQgT1VUUFVUIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzQ2hyb25vRGlnaXRhbElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0RpZ19pby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmUyN2FlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uYwpAQCAtMCwwICsxLDEwMjAgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBJIEFQQ0kxNzEwICAgIHwgQ29tcGlsZXIgOiBnY2MgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBESUdfSU8uQyAgICAgICAgfCBWZXJzaW9uICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgQVBDSS0xNzEwIGRpZ2l0YWwgSS9PIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMTYvMDYvOTggfCBTLiBXZWJlciAgfCBEaWdpdGFsIGlucHV0IC8gb3V0cHV0IGltcGxlbWVudGF0aW9uICAgICAgICAgIHwKKyAgfC0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICB8IDA4LzA1LzAwIHwgR3Vpbm90IEMgIHwgLSAwNDAwLzAyMjggQWxsIEZ1bmN0aW9uIGluIFJJTkcgMCAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgIGF2YWlsYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisjaW5jbHVkZSAiQVBDSTE3MTBfRGlnX2lvLmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnRGlnaXRhbElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHwKK3wJCQkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKXwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZSB0aGUgZGlnaXRhbCBJL08gb3BlcmF0aW5nIG1vZGUgZnJvbSBzZWxlY3RlZCB8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlICAoYl9Nb2R1bE5icikuIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZXwKK3wgICAgICAgICAgICAgICAgICAgICBmb3IgeW91IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiBkaWdpdGFsfAorfCAgICAgICAgICAgICAgICAgICAgIEkvTy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgkJCQkJCQkJCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgZGF0YVswXTogTW9kdWxlIG51bWJlciB0byAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMykgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQ2hhbm5lbEFNb2RlIGRhdGFbMV0gIDogQ2hhbm5lbCBBIG1vZGUgc2VsZWN0aW9uICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogQ2hhbm5lbCB1c2VkIGZvciBkaWdpdGFsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5uZWwgdXNlZCBmb3IgZGlnaXRhbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQ2hhbm5lbEJNb2RlIGRhdGFbMl0gOiBDaGFubmVsIEIgbW9kZSBzZWxlY3Rpb24gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBDaGFubmVsIHVzZWQgZm9yIGRpZ2l0YWwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5lbCB1c2VkIGZvciBkaWdpdGFsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQJCQkJCSB8CisJCQkJCQlkYXRhWzBdCSAgbWVtb3J5IG9uL29mZgorQWN0aXZhdGVzIGFuZCBkZWFjdGl2YXRlcyB0aGUgZGlnaXRhbCBvdXRwdXQgbWVtb3J5LgorCQkJCQkJQWZ0ZXIgaGF2aW5nICAgICAgfAorfCAgICAgICAgICAgICAgICAgY2FsbGVkIHVwIHRoaXMgZnVuY3Rpb24gd2l0aCBtZW1vcnkgb24sdGhlIG91dHB1dCB5b3UgaGF2ZSBwcmV2aW91c2x5fAorfCAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlZCB3aXRoIHRoZSBmdW5jdGlvbiBhcmUgbm90IHJlc2V0CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBkaWdpdGFsIEkvTyBtb2R1bGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBCaS1kaXJlY3Rpb25hbCBjaGFubmVsIEEgY29uZmlndXJhdGlvbiBlcnJvciAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IEJpLWRpcmVjdGlvbmFsIGNoYW5uZWwgQiBjb25maWd1cmF0aW9uIGVycm9yICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdEaWdpdGFsSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUJZVEUgYl9Nb2R1bE5iciwgYl9DaGFubmVsQU1vZGUsIGJfQ2hhbm5lbEJNb2RlOworCUJZVEUgYl9NZW1vcnlPbk9mZiwgYl9Db25maWdUeXBlOworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19Xcml0ZUNvbmZpZyA9IDA7CisKKwliX01vZHVsTmJyID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfQ29uZmlnVHlwZSA9IChCWVRFKSBkYXRhWzBdOwkvLyBNZW1vcnkgb3IgIEluaXQKKwliX0NoYW5uZWxBTW9kZSA9IChCWVRFKSBkYXRhWzFdOworCWJfQ2hhbm5lbEJNb2RlID0gKEJZVEUpIGRhdGFbMl07CisJYl9NZW1vcnlPbk9mZiA9IChCWVRFKSBkYXRhWzFdOwkvLyBpZiBtZW1vcnkgb3BlcmF0aW9uCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPj0gNCkgeworCQlEUFJJTlRLKCJNb2R1bGUgTnVtYmVyIGludmFsaWRcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJCXJldHVybiBpX1JldHVyblZhbHVlOworCX0KKwlzd2l0Y2ggKGJfQ29uZmlnVHlwZSkgeworCWNhc2UgQVBDSTE3MTBfRElHSU9fTUVNT1JZT05PRkY6CisKKwkJaWYgKGJfTWVtb3J5T25PZmYpCS8vIElmIE1lbW9yeSBPTgorCQl7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNldCB0aGUgb3V0cHV0IG1lbW9yeSBvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX0RpZ2l0YWxJT0luZm8uYl9PdXRwdXRNZW1vcnlFbmFibGVkID0gMTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENsZWFyIHRoZSBvdXRwdXQgbWVtb3J5ICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfRGlnaXRhbElPSW5mby5kd19PdXRwdXRNZW1vcnkgPSAwOworCQl9IGVsc2UJCS8vIElmIG1lbW9yeSBvZmYKKwkJeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2V0IHRoZSBvdXRwdXQgbWVtb3J5IG9mZiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19EaWdpdGFsSU9JbmZvLmJfT3V0cHV0TWVtb3J5RW5hYmxlZCA9IDA7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0RJR0lPX0lOSVQ6CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBkaWdpdGFsIEkvTyBjb3VudGVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfRElHSVRBTF9JTykgeworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGJpLWRpcmVjdGlvbmFsIGNoYW5uZWwgQSBjb25maWd1cmF0aW9uICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChiX0NoYW5uZWxBTW9kZSA9PSAwKSB8fCAoYl9DaGFubmVsQU1vZGUgPT0gMSkpIHsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGJpLWRpcmVjdGlvbmFsIGNoYW5uZWwgQiBjb25maWd1cmF0aW9uICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoYl9DaGFubmVsQk1vZGUgPT0gMCkKKwkJCQkJfHwgKGJfQ2hhbm5lbEJNb2RlID09IDEpKSB7CisJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfRGlnaXRhbElPSW5mby5iX0RpZ2l0YWxJbml0ID0KKwkJCQkJCTE7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNhdmUgY2hhbm5lbCBBIGNvbmZpZ3VyYXRpb24gKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJYl9DaGFubmVsQU1vZGUgPSBiX0NoYW5uZWxBTW9kZTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2F2ZSBjaGFubmVsIEIgY29uZmlndXJhdGlvbiAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQliX0NoYW5uZWxCTW9kZSA9IGJfQ2hhbm5lbEJNb2RlOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgdGhlIGNoYW5uZWwgQSBhbmQgQiBjb25maWd1cmF0aW9uICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWR3X1dyaXRlQ29uZmlnID0KKwkJCQkJCShEV09SRCkgKGJfQ2hhbm5lbEFNb2RlIHwKKwkJCQkJCShiX0NoYW5uZWxCTW9kZSAqIDIpKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFdyaXRlIHRoZSBjb25maWd1cmF0aW9uICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKGR3X1dyaXRlQ29uZmlnLAorCQkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDQgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJfSBlbHNlIHsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBCaS1kaXJlY3Rpb25hbCBjaGFubmVsIEIgY29uZmlndXJhdGlvbiBlcnJvciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCURQUklOVEsoIkJpLWRpcmVjdGlvbmFsIGNoYW5uZWwgQiBjb25maWd1cmF0aW9uIGVycm9yXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKworCQkJfSBlbHNlIHsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEJpLWRpcmVjdGlvbmFsIGNoYW5uZWwgQSBjb25maWd1cmF0aW9uIGVycm9yICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlEUFJJTlRLKCJCaS1kaXJlY3Rpb25hbCBjaGFubmVsIEEgY29uZmlndXJhdGlvbiBlcnJvclxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCisJCQl9CisKKwkJfSBlbHNlIHsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBkaWdpdGFsIEkvTyBtb2R1bGUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBkaWdpdGFsIEkvTyBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfQkJCS8vIGVuZCBvZiBTd2l0Y2gKKwlwcmludGsoIlJldHVybiBWYWx1ZSAlZFxuIiwgaV9SZXR1cm5WYWx1ZSk7CisJcmV0dXJuIGlfUmV0dXJuVmFsdWU7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5QVVQgRlVOQ1RJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3xJTlQgaV9BUENJMTcxMF9JbnNuUmVhZERpZ2l0YWxJT0NobFZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsY29tZWRpX3N1YmRldmljZQorKnMsCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgdGhlIHN0YXR1cyBmcm9tIHNlbGVjdGVkIGRpZ2l0YWwgSS9PIGRpZ2l0YWwgaW5wdXR8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfSW5wdXRDaGFubmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCisKK3wKK3wgIEJZVEVfIGJfTW9kdWxOYnIgIENSX0FSRUYoY2hhbnNwZWMpICAgICAgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgfAorfCAgQllURV8gYl9JbnB1dENoYW5uZWwgQ1JfQ0hBTihjaGFuc3BlYykgICAgICAgIDogU2VsZWN0aW9uIGZyb20gZGlnaXRhbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCAoIDAgdG8gNikgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBDaGFubmVsIEMgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5uZWwgRCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogQ2hhbm5lbCBFICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgOiBDaGFubmVsIEYgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA6IENoYW5uZWwgRyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1IDogQ2hhbm5lbCBBICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYgOiBDaGFubmVsIEIKKworCisJfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJCQkJCSBkYXRhWzBdICAgOiBEaWdpdGFsIGlucHV0IGNoYW5uZWwgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IENoYW5ubGUgaXMgbm90IGFjdGl2ZXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5sZSBpcyBhY3RpdmUgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBkaWdpdGFsIEkvTyBtb2R1bGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgZGlnaXRhbCBJL08gZGlnaXRhbCBpbnB1dCBpcyB3cm9uZyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTU6IERpZ2l0YWwgSS9PIG5vdCBpbml0aWFsaXNlZCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNjogVGhlIGRpZ2l0YWwgY2hhbm5lbCBBIGlzIHVzZWQgZm9yIG91dHB1dCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC03OiBUaGUgZGlnaXRhbCBjaGFubmVsIEIgaXMgdXNlZCBmb3Igb3V0cHV0ICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvL19JTlRfICAgaV9BUENJMTcxMF9SZWFkRGlnaXRhbElPQ2hsVmFsdWUgICAgICAoQllURV8gICAgYl9Cb2FyZEhhbmRsZSwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgYl9Nb2R1bE5iciwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgYl9JbnB1dENoYW5uZWwsCisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gIHBiX0NoYW5uZWxTdGF0dXMpCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZERpZ2l0YWxJT0NobFZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnOworCUJZVEUgYl9Nb2R1bE5iciwgYl9JbnB1dENoYW5uZWw7CisJUEJZVEUgcGJfQ2hhbm5lbFN0YXR1czsKKwliX01vZHVsTmJyID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfSW5wdXRDaGFubmVsID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWRhdGFbMF0gPSAwOworCXBiX0NoYW5uZWxTdGF0dXMgPSAoUEJZVEUpICYgZGF0YVswXTsKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgZGlnaXRhbCBJL08gY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0RJR0lUQUxfSU8pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgZGlnaXRhbCBpbW5wdXQgY2hhbm5lbCBudW1iZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9JbnB1dENoYW5uZWwgPD0gNikgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiB0aGUgZGlnaXRhbCBJL08gbW9kdWxlIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfRGlnaXRhbElPSW5mby5iX0RpZ2l0YWxJbml0ID09IDEpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGNoYW5uZWwgQSBvciBjaGFubmVsIEIgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX0lucHV0Q2hhbm5lbCA+IDQpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIGNoYW5uZWwgQSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGJfSW5wdXRDaGFubmVsID09IDUpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBjaGFubmVsIEEgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCWJfQ2hhbm5lbEFNb2RlCisJCQkJCQkJCSE9IDApIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUaGUgZGlnaXRhbCBjaGFubmVsIEEgaXMgdXNlZCBmb3Igb3V0cHV0ICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS02OworCQkJCQkJCX0KKwkJCQkJCX0JLy8gaWYgKGJfSW5wdXRDaGFubmVsID09IDUpCisJCQkJCQllbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBjaGFubmVsIEIgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCWJfQ2hhbm5lbEJNb2RlCisJCQkJCQkJCSE9IDApIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUaGUgZGlnaXRhbCBjaGFubmVsIEIgaXMgdXNlZCBmb3Igb3V0cHV0ICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS03OworCQkJCQkJCX0KKwkJCQkJCX0JLy8gaWYgKGJfSW5wdXRDaGFubmVsID09IDUpCisJCQkJCX0JLy8gaWYgKGJfSW5wdXRDaGFubmVsID4gNCkKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGVycm9yIG9jY3VyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUmVhZCBhbGwgZGlnaXRhbCBpbnB1dCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkvL0lOUERXIChwc19BUENJMTcxMFZhcmlhYmxlLT4KKwkJCQkJCS8vICAgc19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uCisJCQkJCQkvLyAgIHNfQm9hcmRJbmZvcy4KKwkJCQkJCS8vICB1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5iciksCisJCQkJCQkvLyAmZHdfU3RhdHVzUmVnKTsKKworCQkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKworCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJKnBiX0NoYW5uZWxTdGF0dXMgPQorCQkJCQkJCShCWVRFKSAoKGR3X1N0YXR1c1JlZyBeCisJCQkJCQkJCTB4MUMpID4+CisJCQkJCQkJYl9JbnB1dENoYW5uZWwpICYgMTsKKworCQkJCQl9CS8vIGlmIChpX1JldHVyblZhbHVlID09IDApCisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBEaWdpdGFsIEkvTyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlEUFJJTlRLKCJEaWdpdGFsIEkvTyBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RlZCBkaWdpdGFsIGlucHV0IGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiU2VsZWN0ZWQgZGlnaXRhbCBpbnB1dCBlcnJvclxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIGRpZ2l0YWwgSS9PIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIGRpZ2l0YWwgSS9PIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZURpZ2l0YWxJT0NobE9uT2ZmKGNvbWVkaV9kZXZpY2UKK3wqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFNldHMgb3IgcmVzZXRzIHRoZSBvdXRwdXQgd2l0Y2ggaGFzIGJlZW4gcGFzc2VkIHdpdGggdGhlICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBiX0NoYW5uZWwuIFNldHRpbmcgYW4gb3V0cHV0IG1lYW5zIHNldHRpbmcgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYW4gb3VwdXQgaGlnaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAoYXJlZiApICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKXwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX091dHB1dENoYW5uZWwgKENSX0NIQU4pIDogU2VsZWN0aW9uIGZyb20gZGlnaXRhbCBvdXRwdXQgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsICgwIHRvIDIpICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBDaGFubmVsIEggICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IENoYW5uZWwgQSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogQ2hhbm5lbCBCICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgZGlnaXRhbCBJL08gbW9kdWxlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBkaWdpdGFsIEkvTyBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICIgaV9BUENJMTcxMF9Jbml0RGlnaXRhbElPIiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNjogVGhlIGRpZ2l0YWwgY2hhbm5lbCBBIGlzIHVzZWQgZm9yIGlucHV0ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC03OiBUaGUgZGlnaXRhbCBjaGFubmVsIEIgaXMgdXNlZCBmb3IgaW5wdXQKKwkJCQkJIC04OiBEaWdpdGFsIE91dHB1dCBNZW1vcnkgT0ZGLiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBwcmV2aW91c2x5IHRoZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfU2V0RGlnaXRhbElPTWVtb3J5T24iLiAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLy9fSU5UXyAgIGlfQVBDSTE3MTBfU2V0RGlnaXRhbElPQ2hsT24gICAgKEJZVEVfIGJfQm9hcmRIYW5kbGUsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfT3V0cHV0Q2hhbm5lbCkKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZURpZ2l0YWxJT0NobE9uT2ZmKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfV3JpdGVWYWx1ZSA9IDA7CisJQllURSBiX01vZHVsTmJyLCBiX091dHB1dENoYW5uZWw7CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfT3V0cHV0Q2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBkaWdpdGFsIEkvTyBjb3VudGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfRElHSVRBTF9JTykgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiB0aGUgZGlnaXRhbCBJL08gbW9kdWxlIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19EaWdpdGFsSU9JbmZvLmJfRGlnaXRhbEluaXQgPT0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBkaWdpdGFsIG91dHB1dCBjaGFubmVsIG51bWJlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXN3aXRjaCAoYl9PdXRwdXRDaGFubmVsKSB7CisJCSAgICAvKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2hhbm5lbCBIICovCisJCSAgICAvKioqKioqKioqKioqKi8KKworCQkJCWNhc2UgMDoKKwkJCQkJYnJlYWs7CisKKwkJICAgIC8qKioqKioqKioqKioqLworCQkJCQkvKiBDaGFubmVsIEEgKi8KKwkJICAgIC8qKioqKioqKioqKioqLworCisJCQkJY2FzZSAxOgorCQkJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJYl9DaGFubmVsQU1vZGUgIT0gMSkgeworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIGRpZ2l0YWwgY2hhbm5lbCBBIGlzIHVzZWQgZm9yIGlucHV0ICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkgICAgLyoqKioqKioqKioqKiovCisJCQkJCS8qIENoYW5uZWwgQiAqLworCQkgICAgLyoqKioqKioqKioqKiovCisKKwkJCQljYXNlIDI6CisJCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQliX0NoYW5uZWxCTW9kZSAhPSAxKSB7CisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaGUgZGlnaXRhbCBjaGFubmVsIEIgaXMgdXNlZCBmb3IgaW5wdXQgKi8KKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC03OworCQkJCQl9CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICovCisJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIGVycm9yIG9jY3VyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoaV9SZXR1cm5WYWx1ZSA+PSAwKSB7CisKKwkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgc2V0IGNoYW5uZWwgT04gICAgICAgICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlpZiAoZGF0YVswXSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgb3V0cHV0IG1lbW9yeSBlbmFibGVkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCQliX091dHB1dE1lbW9yeUVuYWJsZWQgPT0KKwkJCQkJCQkxKSB7CisJCQkJCQkJZHdfV3JpdGVWYWx1ZSA9CisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCWR3X091dHB1dE1lbW9yeQorCQkJCQkJCQl8ICgxIDw8CisJCQkJCQkJCWJfT3V0cHV0Q2hhbm5lbCk7CisKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQlkd19PdXRwdXRNZW1vcnkKKwkJCQkJCQkJPSBkd19Xcml0ZVZhbHVlOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlkd19Xcml0ZVZhbHVlID0KKwkJCQkJCQkJMSA8PAorCQkJCQkJCQliX091dHB1dENoYW5uZWw7CisJCQkJCQl9CisJCQkJCX0JLy8gc2V0IGNoYW5uZWwgb2ZmCisJCQkJCWVsc2UgeworCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJYl9PdXRwdXRNZW1vcnlFbmFibGVkID09CisJCQkJCQkJMSkgeworCQkJCQkJCWR3X1dyaXRlVmFsdWUgPQorCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQlkd19PdXRwdXRNZW1vcnkKKwkJCQkJCQkJJiAoMHhGRkZGRkZGRlVMCisJCQkJCQkJCS0KKwkJCQkJCQkJKDEgPDwgYl9PdXRwdXRDaGFubmVsKSk7CisKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQlkd19PdXRwdXRNZW1vcnkKKwkJCQkJCQkJPSBkd19Xcml0ZVZhbHVlOworCQkJCQkJfSBlbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBEaWdpdGFsIE91dHB1dCBNZW1vcnkgT0ZGICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLy8gK1VzZSBwcmV2aW91c2x5IHRoZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXREaWdpdGFsSU9NZW1vcnlPbiIKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTg7CisJCQkJCQl9CisKKwkJCQkJfQorCQkgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFdyaXRlIHRoZSB2YWx1ZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJLy9PVVRQRFcgKHBzX0FQQ0kxNzEwVmFyaWFibGUtPgorCQkJCQkvLyAgICBzX0JvYXJkIFtiX0JvYXJkSGFuZGxlXS4KKwkJCQkJLy8gICBzX0JvYXJkSW5mb3MuCisJCQkJCS8vICAgdWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxOYnIpLAorCQkJCQkvLyAgIGR3X1dyaXRlVmFsdWUpOworCQkJCQlvdXRsKGR3X1dyaXRlVmFsdWUsCisJCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBEaWdpdGFsIEkvTyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIGRpZ2l0YWwgSS9PIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3xJTlQgaV9BUENJMTcxMF9JbnNuQml0c0RpZ2l0YWxJT1BvcnRPbk9mZihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LGNvbWVkaV9zdWJkZXZpY2UKKwkqcywJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IHdyaXRlOgorCQkJCQkgIFNldHMgb3IgcmVzZXRzIG9uZSBvciBzZXZlcmFsIG91dHB1dHMgZnJvbSBwb3J0LiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFNldHRpbmcgYW4gb3V0cHV0IG1lYW5zIHNldHRpbmcgYW4gb3V0cHV0IGhpZ2guICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGhhdmUgc3dpdGNoZWQgT0ZGIHRoZSBkaWdpdGFsIG91dHB1dCBtZW1vcnkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoT0ZGKSwgYWxsIHRoZSBvdGhlciBvdXRwdXQgYXJlIHNldCB0byAiMCIuCisKK3wgICAgICAgICAgICAgICAgICAgICAgcmVhZDoKKwkJCQkJICBSZWFkIHRoZSBzdGF0dXMgZnJvbSBkaWdpdGFsIGlucHV0IHBvcnQgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZyb20gc2VsZWN0ZWQgZGlnaXRhbCBJL08gbW9kdWxlIChiX01vZHVsTmJyKQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDoKKwlCWVRFXyBiX0JvYXJkSGFuZGxlICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgfAorfCAgIEJZVEVfIGJfTW9kdWxOYnIgIENSX0FSRUYoYXJlZikgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpfAorfCAgIEJZVEVfIGJfUG9ydFZhbHVlIENSX0NIQU4oY2hhbnNwZWMpIDogT3V0cHV0IFZhbHVlICggMCBUbyA3ICkKK3wgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgIHJlYWQgb3Igd3JpdGUgcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgIGlmIHdyaXRlIHRoZW4gaW5kaWNhdGUgT04gb3IgT0ZGCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlYWQgOiBkYXRhWzFdIHdpbGwgcmV0dXJuIHBvcnQgc3RhdHVzLgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisKKyAgICAgICAgICAgICAgICBJTlBVVCA6CisKKwkJCQkJICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogVGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIGRpZ2l0YWwgSS9PIG1vZHVsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IERpZ2l0YWwgSS9PIG5vdCBpbml0aWFsaXNlZAorCisJCQkJT1VUUFVUOgkgIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgZGlnaXRhbCBJL08gbW9kdWxlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogT3V0cHV0IHZhbHVlIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBkaWdpdGFsIEkvTyBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICIgaV9BUENJMTcxMF9Jbml0RGlnaXRhbElPIiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNjogVGhlIGRpZ2l0YWwgY2hhbm5lbCBBIGlzIHVzZWQgZm9yIGlucHV0ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC03OiBUaGUgZGlnaXRhbCBjaGFubmVsIEIgaXMgdXNlZCBmb3IgaW5wdXQKKwkJCQkJLTg6IERpZ2l0YWwgT3V0cHV0IE1lbW9yeSBPRkYuICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgVXNlIHByZXZpb3VzbHkgdGhlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9TZXREaWdpdGFsSU9NZW1vcnlPbiIuICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvL19JTlRfICAgaV9BUENJMTcxMF9TZXREaWdpdGFsSU9Qb3J0T24gICAoQllURV8gYl9Cb2FyZEhhbmRsZSwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Qb3J0VmFsdWUpCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c0RpZ2l0YWxJT1BvcnRPbk9mZihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1dyaXRlVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZzsKKwlCWVRFIGJfTW9kdWxOYnIsIGJfUG9ydFZhbHVlOworCUJZVEUgYl9Qb3J0T3BlcmF0aW9uLCBiX1BvcnRPbk9GRjsKKworCVBCWVRFIHBiX1BvcnRWYWx1ZTsKKworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9Qb3J0T3BlcmF0aW9uID0gKEJZVEUpIGRhdGFbMF07CS8vIElucHV0IG9yIG91dHB1dAorCWJfUG9ydE9uT0ZGID0gKEJZVEUpIGRhdGFbMV07CS8vIGlmIG91dHB1dCB0aGVuIE9uIG9yIE9mZgorCWJfUG9ydFZhbHVlID0gKEJZVEUpIGRhdGFbMl07CS8vIGlmIG91dCBwdXQgdGhlbiBWYWx1ZQorCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXBiX1BvcnRWYWx1ZSA9IChQQllURSkgJiBkYXRhWzBdOworLy8gaWYgaW5wdXQgdGhlbiByZWFkIHZhbHVlCisKKwlzd2l0Y2ggKGJfUG9ydE9wZXJhdGlvbikgeworCWNhc2UgQVBDSTE3MTBfSU5QVVQ6CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBkaWdpdGFsIEkvTyBjb3VudGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfRElHSVRBTF9JTykgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgdGhlIGRpZ2l0YWwgSS9PIG1vZHVsZSBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19EaWdpdGFsSU9JbmZvLmJfRGlnaXRhbEluaXQgPT0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIGFsbCBkaWdpdGFsIGlucHV0ICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJLy9JTlBEVyAocHNfQVBDSTE3MTBWYXJpYWJsZS0+CisJCQkJCS8vICAgICAgc19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uCisJCQkJCS8vICAgICAgc19Cb2FyZEluZm9zLgorCQkJCQkvLyAgICAgIHVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsTmJyKSwKKwkJCQkJLy8gICAgICAmZHdfU3RhdHVzUmVnKTsKKworCQkJCQlkd19TdGF0dXNSZWcgPQorCQkJCQkJaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCSpwYl9Qb3J0VmFsdWUgPQorCQkJCQkJKEJZVEUpIChkd19TdGF0dXNSZWcgXiAweDFDKTsKKworCQkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRGlnaXRhbCBJL08gbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgZGlnaXRhbCBJL08gbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpX1JldHVyblZhbHVlID0gLTI7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfT1VUUFVUOgorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgZGlnaXRhbCBJL08gY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0RJR0lUQUxfSU8pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHRoZSBkaWdpdGFsIEkvTyBtb2R1bGUgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfRGlnaXRhbElPSW5mby5iX0RpZ2l0YWxJbml0ID09IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgcG9ydCB2YWx1ZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX1BvcnRWYWx1ZSA8PSA3KSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IHRoZSBkaWdpdGFsIG91dHB1dCBjaGFubmVsICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgY2hhbm5lbCBBIHVzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKChiX1BvcnRWYWx1ZSAmIDIpID09IDIpIHsKKwkJCQkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCQkJYl9DaGFubmVsQU1vZGUKKwkJCQkJCQkJIT0gMSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGhlIGRpZ2l0YWwgY2hhbm5lbCBBIGlzIHVzZWQgZm9yIGlucHV0ICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTY7CisJCQkJCQkJfQorCQkJCQkJfQkvLyBpZiAoKGJfUG9ydFZhbHVlICYgMikgPT0gMikKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBjaGFubmVsIEIgdXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKGJfUG9ydFZhbHVlICYgNCkgPT0gNCkgeworCQkJCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19EaWdpdGFsSU9JbmZvLgorCQkJCQkJCQliX0NoYW5uZWxCTW9kZQorCQkJCQkJCQkhPSAxKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUaGUgZGlnaXRhbCBjaGFubmVsIEIgaXMgdXNlZCBmb3IgaW5wdXQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNzsKKwkJCQkJCQl9CisJCQkJCQl9CS8vIGlmICgoYl9Qb3J0VmFsdWUgJiA0KSA9PSA0KQorCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIGVycm9yIG9jY3VyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChpX1JldHVyblZhbHVlID49IDApIHsKKworCQkJCQkJCS8vaWYoZGF0YVsxXSkKKwkJCQkJCQkvL3sKKwkJCQkJCQlzd2l0Y2ggKGJfUG9ydE9uT0ZGKSB7CisJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IGlmIHNldCBQb3J0IE9OICAgICAgICAgICAgICAgICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJY2FzZSBBUENJMTcxMF9PTjoKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiBvdXRwdXQgbWVtb3J5IGVuYWJsZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCQliX091dHB1dE1lbW9yeUVuYWJsZWQKKwkJCQkJCQkJCT09IDEpIHsKKwkJCQkJCQkJCWR3X1dyaXRlVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCQkJCQlkd19PdXRwdXRNZW1vcnkKKwkJCQkJCQkJCQl8CisJCQkJCQkJCQkJYl9Qb3J0VmFsdWU7CisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCQkJZHdfT3V0cHV0TWVtb3J5CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWR3X1dyaXRlVmFsdWU7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCQlkd19Xcml0ZVZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWJfUG9ydFZhbHVlOworCQkJCQkJCQl9CisJCQkJCQkJCWJyZWFrOworCisJCQkJCQkJCS8vIElmIFNldCBQT1JUICBPRkYKKwkJCQkJCQljYXNlIEFQQ0kxNzEwX09GRjoKKworCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiBvdXRwdXQgbWVtb3J5IGVuYWJsZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCQliX091dHB1dE1lbW9yeUVuYWJsZWQKKwkJCQkJCQkJCT09IDEpIHsKKwkJCQkJCQkJCWR3X1dyaXRlVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfRGlnaXRhbElPSW5mby4KKwkJCQkJCQkJCQlkd19PdXRwdXRNZW1vcnkKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJKDB4RkZGRkZGRkZVTAorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQliX1BvcnRWYWx1ZSk7CisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX0RpZ2l0YWxJT0luZm8uCisJCQkJCQkJCQkJZHdfT3V0cHV0TWVtb3J5CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWR3X1dyaXRlVmFsdWU7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIERpZ2l0YWwgT3V0cHV0IE1lbW9yeSBPRkYgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS04OworCQkJCQkJCQl9CisJCQkJCQkJfQkvLyBzd2l0Y2gKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogV3JpdGUgdGhlIHZhbHVlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCS8vICBPVVRQRFcgKHBzX0FQQ0kxNzEwVmFyaWFibGUtPgorCQkJCQkJCS8vICAgICAgc19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uCisJCQkJCQkJLy8gICAgICBzX0JvYXJkSW5mb3MuCisJCQkJCQkJLy8gICAgICB1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5iciksCisJCQkJCQkJLy8gICAgICBkd19Xcml0ZVZhbHVlKTsKKwkJCQkJCQlvdXRsKGR3X1dyaXRlVmFsdWUsCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCXVpX0FkZHJlc3MgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIE91dHB1dCB2YWx1ZSB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRGlnaXRhbCBJL08gbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgZGlnaXRhbCBJL08gbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpX1JldHVyblZhbHVlID0gLTI7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpX1JldHVyblZhbHVlID0gLTk7CisJCURQUklOVEsoIk5PIElOUFVUL09VVFBVVCBzcGVjaWZpZWRcbiIpOworCX0JCQkvL3N3aXRjaCBJTlBVVCAvIE9VVFBVVAorCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0RpZ19pby5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWYxNTdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwX09OCQkJMQkvKiBEaWdpdGFsICBPdXRwdXQgT04gb3IgT0ZGICovCisjZGVmaW5lIEFQQ0kxNzEwX09GRgkJCTAKKworI2RlZmluZSBBUENJMTcxMF9JTlBVVAkJCTAJLyogRGlnaXRhbCBJL08gKi8KKyNkZWZpbmUgQVBDSTE3MTBfT1VUUFVUCQkJMQorCisjZGVmaW5lIEFQQ0kxNzEwX0RJR0lPX01FTU9SWU9OT0ZGCTB4MTAKKyNkZWZpbmUgQVBDSTE3MTBfRElHSU9fSU5JVAkJMHgxMQorCisvKgorICogRElHSVRBTCBJL08gSU5JU0lBTElTQVRJT04gRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0RpZ2l0YWxJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisgKiBJTlBVVCBPVVRQVVQgIEZVTkNUSU9OUworICovCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZERpZ2l0YWxJT0NobFZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlRGlnaXRhbElPQ2hsT25PZmYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzRGlnaXRhbElPUG9ydE9uT2ZmKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JTkNDUFQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSU5DQ1BULmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2MmYyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSU5DQ1BULmMKQEAgLTAsMCArMSw1MzYzIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUEkgQVBDSTE3MTAgICAgfCBDb21waWxlciA6IGdjYyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IElOQ19DUFQuQyAgICAgICB8IFZlcnNpb24gIDogMi45NiAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBBUENJLTE3MTAgaW5jcmVtZW50YWwgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8LS0tLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgIHwgMDgvMDUvMDAgfCBHdWlub3QgQyAgfCAtIDA0MDAvMDIyOCBBbGwgRnVuY3Rpb24gaW4gUklORyAwICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMjkvMDYvMDEgfCBHdWlub3QgQy4gfCAtIDExMDAvMDIzMSAtPiAwNzAxLzAyMzIgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8IFNlZSBpX0FQQ0kxNzEwX0Rpc2FibGVGcmVxdWVuY3lNZWFzdXJlbWVudCAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgIkFQQ0kxNzEwX0lOQ0NQVC5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElOVAlpX0FQQ0kxNzEwX0luc25Db25maWdJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKK3N0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyYXRpb24gZnVuY3Rpb24gZm9yIElOQ19DUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6CQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogKmRhdGEKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfQ29uZmlnVHlwZTsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJdWlfQ29uZmlnVHlwZSA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJcHJpbnRrKCJcbklOQ19DUFQiKTsKKworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsJLy8gU2F2ZSB0aGUgY3VycmVudCBwcm9jZXNzIHRhc2sgc3RydWN0dXJlCisJc3dpdGNoICh1aV9Db25maWdUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9JTkNDUFRfSU5JVENPVU5URVI6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0luaXRDb3VudGVyKGRldiwKKwkJCUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJKEJZVEUpIGRhdGFbMF0sCisJCQkoQllURSkgZGF0YVsxXSwKKwkJCShCWVRFKSBkYXRhWzJdLCAoQllURSkgZGF0YVszXSwgKEJZVEUpIGRhdGFbNF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0NPVU5URVJBVVRPVEVTVDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfQ291bnRlckF1dG9UZXN0KGRldiwKKwkJCShQQllURSkgJiBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9JTklUSU5ERVg6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0luaXRJbmRleChkZXYsCisJCQlDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBkYXRhWzBdLAorCQkJKEJZVEUpIGRhdGFbMV0sIChCWVRFKSBkYXRhWzJdLCAoQllURSkgZGF0YVszXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfSU5JVFJFRkVSRU5DRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfSW5pdFJlZmVyZW5jZShkZXYsCisJCQlDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKEJZVEUpIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0lOSVRFWFRFUk5BTFNUUk9CRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfSW5pdEV4dGVybmFsU3Ryb2JlKGRldiwKKwkJCUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJKEJZVEUpIGRhdGFbMF0sIChCWVRFKSBkYXRhWzFdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9JTklUQ09NUEFSRUxPR0lDOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9Jbml0Q29tcGFyZUxvZ2ljKGRldiwKKwkJCUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLCAoVUlOVCkgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfSU5JVEZSRVFVRU5DWU1FQVNVUkVNRU5UOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9Jbml0RnJlcXVlbmN5TWVhc3VyZW1lbnQoZGV2LAorCQkJQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoQllURSkgZGF0YVswXSwKKwkJCShCWVRFKSBkYXRhWzFdLCAoVUxPTkcpIGRhdGFbMl0sIChQVUxPTkcpICYgZGF0YVswXSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJJbnNuIENvbmZpZyA6IENvbmZpZyBQYXJhbWV0ZXIgV3JvbmdcbiIpOworCisJfQorCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkKKwkJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfSW5pdENvdW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICAgICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgYl9Db3VudGVyUmFuZ2UsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICBiX0ZpcnN0Q291bnRlck1vZHVzLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICAgICAgIGJfRmlyc3RDb3VudGVyT3B0aW9uLCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgYl9TZWNvbmRDb3VudGVyTW9kdXMsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICBiX1NlY29uZENvdW50ZXJPcHRpb24pICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZSB0aGUgY291bnRlciBvcGVyYXRpbmcgbW9kZSBmcm9tIHNlbGVjdGVkICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gWW91IG11c3QgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGJlIHwKK3wgICAgICAgICAgICAgICAgICAgICBmb3IgeW91IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgIENvdW50ZXIgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwKK3wgfCBQYXJhbWV0ZXIgICAgICAgUGFzc2VkIHZhbHVlICAgICAgIHwgICAgICAgIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgIHwgfAorfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Cit8IHxiX01vZHVsTmJyICAgQVBDSTE3MTBfMTZCSVRfQ09VTlRFUiB8ICBUaGUgbW9kdWxlIGlzIGNvbmZpZ3VyZWQgZm9yICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHR3byAxNi1iaXQgY291bnRlci4gICAgICAgICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgLSBiX0ZpcnN0Q291bnRlck1vZHVzIGFuZCAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIGJfRmlyc3RDb3VudGVyT3B0aW9uICAgICAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgY29uZmlndXJlIHRoZSBmaXJzdCAxNiBiaXQgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBjb3VudGVyLiAgICAgICAgICAgICAgICAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAtIGJfU2Vjb25kQ291bnRlck1vZHVzIGFuZCAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgYl9TZWNvbmRDb3VudGVyT3B0aW9uICAgICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBjb25maWd1cmUgdGhlIHNlY29uZCAxNiBiaXQgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIGNvdW50ZXIuICAgICAgICAgICAgICAgICAgICAgICB8IHwKK3wgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorfCB8Yl9Nb2R1bE5iciAgIEFQQ0kxNzEwXzMyQklUX0NPVU5URVIgfCAgVGhlIG1vZHVsZSBpcyBjb25maWd1cmVkIGZvciBvbmUgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMi1iaXQgY291bnRlci4gICAgICAgICAgICAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIC0gYl9GaXJzdENvdW50ZXJNb2R1cyBhbmQgICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBiX0ZpcnN0Q291bnRlck9wdGlvbiAgICAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIGNvbmZpZ3VyZSB0aGUgMzIgYml0IGNvdW50ZXIuICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIC0gYl9TZWNvbmRDb3VudGVyTW9kdXMgYW5kICAgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBiX1NlY29uZENvdW50ZXJPcHRpb24gICAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIGFyZSBub3QgdXNlZCBhbmQgaGF2ZSBubyAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgaW1wb3J0YW5jZS4gICAgICAgICAgICAgICAgICAgIHwgfAorfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgQ291bnRlciBvcGVyYXRpbmcgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorfCB8ICAgIFBhcmFtZXRlciAgICAgICB8ICAgICBQYXNzZWQgdmFsdWUgICAgICAgIHwgICAgRGVzY3JpcHRpb24gICAgICAgICAgfCB8Cit8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKK3wgfGJfRmlyc3RDb3VudGVyTW9kdXMgfCBBUENJMTcxMF9RVUFEUlVQTEVfTU9ERSB8IEluIHRoZSBxdWFkcnVwbGUgbW9kZSwgIHwgfAorfCB8ICAgICAgIG9yICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGVkZ2UgYW5hbHlzaXMgICAgICAgfCB8Cit8IHxiX1NlY29uZENvdW50ZXJNb2R1c3wgICAgICAgICAgICAgICAgICAgICAgICAgfCBjaXJjdWl0IGdlbmVyYXRlcyBhICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvdW50aW5nIHB1bHNlIGZyb20gICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgZWFjaCBlZGdlIG9mIDIgc2lnbmFscyAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGljaCBhcmUgcGhhc2Ugc2hpZnRlZCB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGluIHJlbGF0aW9uIHRvIGVhY2ggICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3RoZXIuICAgICAgICAgICAgICAgICAgfCB8Cit8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKK3wgfGJfRmlyc3RDb3VudGVyTW9kdXMgfCAgIEFQQ0kxNzEwX0RPVUJMRV9NT0RFICB8IEZ1bmN0aW9ucyBpbiB0aGUgc2FtZSAgIHwgfAorfCB8ICAgICAgIG9yICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2F5IGFzIHRoZSBxdWFkcnVwbGUgICAgfCB8Cit8IHxiX1NlY29uZENvdW50ZXJNb2R1c3wgICAgICAgICAgICAgICAgICAgICAgICAgfCBtb2RlLCBleGNlcHQgdGhhdCBvbmx5ICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHR3byBvZiB0aGUgZm91ciBlZGdlcyAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJlIGFuYWx5c2VkIHBlciAgICAgICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBwZXJpb2QgICAgICAgICAgICAgICAgICB8IHwKK3wgfC0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorfCB8Yl9GaXJzdENvdW50ZXJNb2R1cyB8ICAgQVBDSTE3MTBfU0lNUExFX01PREUgIHwgRnVuY3Rpb25zIGluIHRoZSBzYW1lICAgfCB8Cit8IHwgICAgICAgb3IgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCB3YXkgYXMgdGhlIHF1YWRydXBsZSAgICB8IHwKK3wgfGJfU2Vjb25kQ291bnRlck1vZHVzfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vZGUsIGV4Y2VwdCB0aGF0IG9ubHkgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgb25lIG9mIHRoZSBmb3VyIGVkZ2VzICAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBpcyBhbmFseXNlZCBwZXIgICAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHBlcmlvZC4gICAgICAgICAgICAgICAgIHwgfAorfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Cit8IHxiX0ZpcnN0Q291bnRlck1vZHVzIHwgICBBUENJMTcxMF9ESVJFQ1RfTU9ERSAgfCBJbiB0aGUgZGlyZWN0IG1vZGUgdGhlICB8IHwKK3wgfCAgICAgICBvciAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGJvdGggZWRnZSBhbmFseXNpcyAgICAgIHwgfAorfCB8Yl9TZWNvbmRDb3VudGVyTW9kdXN8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2lyY3VpdHMgYXJlIGluYWN0aXZlLiAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGUgaW5wdXRzIEEsIEIgaW4gdGhlICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IDMyLWJpdCBtb2RlIG9yIEEsIEIgYW5kIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgQywgRCBpbiB0aGUgMTYtYml0IG1vZGUgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXByZXNlbnQsIGVhY2gsIG9uZSAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGNsb2NrIHB1bHNlIGdhdGUgY2lyY3VpdHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhlcmUgYnkgZnJlcXVlbmN5IGFuZCAgfCB8Cit8IHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBwdWxzZSBkdXJhdGlvbiAgICAgICAgICB8IHwKK3wgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG1lYXN1cmVtZW50cyBjYW4gYmUgICAgIHwgfAorfCB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGVyZm9ybWVkLiAgICAgICAgICAgICAgfCB8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgIElNUE9SVEFOVCEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgSWYgeW91IGhhdmUgY29uZmlndXJlZCB0aGUgbW9kdWxlIGZvciB0d28gMTYtYml0IGNvdW50ZXIsIGEgbWl4ZWQgICAgfAorfCAgICAgICBtb2RlIHdpdGggYSBjb3VudGVyIGluIHF1YWRydXBsZS9kb3VibGUvc2luZ2xlIG1vZGUgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgIGFuZCB0aGUgb3RoZXIgY291bnRlciBpbiBkaXJlY3QgbW9kZSBpcyBub3QgcG9zc2libGUhICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgQ291bnRlciBvcGVyYXRpbmcgb3B0aW9uIGZvciBxdWFkcnVwbGUvZG91YmxlL3NpbXBsZSBtb2RlICAgICAgICAgIHwKK3wgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK3wKK3wgfCAgICAgICBQYXJhbWV0ZXIgICAgICB8ICAgICBQYXNzZWQgdmFsdWUgICAgICAgIHwgIERlc2NyaXB0aW9uICAgICAgICAgICB8fAorfCB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXx8Cit8IHxiX0ZpcnN0Q291bnRlck9wdGlvbiAgfCBBUENJMTcxMF9IWVNURVJFU0lTX09OICB8IEluIGJvdGggZWRnZSBhbmFseXNpcyAgfHwKK3wgfCAgICAgICAgb3IgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2lyY3VpdHMgaXMgYXZhaWxhYmxlICB8fAorfCB8Yl9TZWNvbmRDb3VudGVyT3B0aW9uIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBvbmUgaHlzdGVyZXNpcyBjaXJjdWl0Lnx8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IEl0IHN1cHByZXNzZXMgZWFjaCAgICAgfHwKK3wgfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGltZSB0aGUgZmlyc3QgY291bnRpbmd8fAorfCB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBwdWxzZSBhZnRlciBhIGNoYW5nZSAgIHx8Cit8IHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG9mIHJvdGF0aW9uLiAgICAgICAgICAgfHwKK3wgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18fAorfCB8Yl9GaXJzdENvdW50ZXJPcHRpb24gIHwgQVBDSTE3MTBfSFlTVEVSRVNJU19PRkYgfCBUaGUgZmlyc3QgY291bnRpbmcgICAgIHx8Cit8IHwgICAgICAgb3IgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHB1bHNlIGlzIG5vdCBzdXBwcmVzcyAgfHwKK3wgfGJfU2Vjb25kQ291bnRlck9wdGlvbiB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWZ0ZXIgYSBjaGFuZ2Ugb2YgICAgICB8fAorfCB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCByb3RhdGlvbi4gICAgICAgICAgICAgIHx8Cit8ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK3wKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgIElNUE9SVEFOVCEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgVGhpcyBvcHRpb24gYXJlIG9ubHkgYXZhaWJsZSBpZiB5b3UgaGF2ZSBzZWxlY3RlZCB0aGUgZGlyZWN0IG1vZGUuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICBDb3VudGVyIG9wZXJhdGluZyBvcHRpb24gZm9yIGRpcmVjdCBtb2RlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorfCB8ICAgICAgUGFyYW1ldGVyICAgICAgIHwgICAgIFBhc3NlZCB2YWx1ZSAgIHwgICAgICAgRGVzY3JpcHRpb24gICAgICAgICAgfCB8Cit8IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKK3wgfGJfRmlyc3RDb3VudGVyT3B0aW9uICB8IEFQQ0kxNzEwX0lOQ1JFTUVOVCB8IFRoZSBjb3VudGVyIGluY3JlbWVudCBmb3IgIHwgfAorfCB8ICAgICAgIG9yICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgZWFjaCBjb3VudGluZyBwdWxzZSAgICAgICAgfCB8Cit8IHxiX1NlY29uZENvdW50ZXJPcHRpb24gfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwKK3wgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorfCB8Yl9GaXJzdENvdW50ZXJPcHRpb24gIHwgQVBDSTE3MTBfREVDUkVNRU5UIHwgVGhlIGNvdW50ZXIgZGVjcmVtZW50IGZvciAgfCB8Cit8IHwgICAgICAgb3IgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCBlYWNoIGNvdW50aW5nIHB1bHNlICAgICAgICB8IHwKK3wgfGJfU2Vjb25kQ291bnRlck9wdGlvbiB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgfAorfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgICAgIDogTW9kdWxlIG51bWJlciB0byAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMykgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQ291bnRlclJhbmdlICAgICAgICA6IFNlbGVjdGlvbiBmb3JtIGNvdW50ZXIgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UuICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0ZpcnN0Q291bnRlck1vZHVzICAgOiBGaXJzdCBjb3VudGVyIG9wZXJhdGluZyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUuICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9GaXJzdENvdW50ZXJPcHRpb24gIDogRmlyc3QgY291bnRlciAgb3B0aW9uLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1NlY29uZENvdW50ZXJNb2R1cyAgOiBTZWNvbmQgY291bnRlciBvcGVyYXRpbmcgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUuICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9TZWNvbmRDb3VudGVyT3B0aW9uIDogU2Vjb25kIGNvdW50ZXIgIG9wdGlvbi4gIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZSAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgc2VsZWN0ZWQgY291bnRlciByYW5nZSBpcyB3cm9uZy4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCBmaXJzdCBjb3VudGVyIG9wZXJhdGluZyBtb2RlIGlzIHdyb25nLiB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGhlIHNlbGVjdGVkIGZpcnN0IGNvdW50ZXIgb3BlcmF0aW5nIG9wdGlvbiBpcyB3cm9uZ3wKK3wgICAgICAgICAgICAgICAgICAgIC02OiBUaGUgc2VsZWN0ZWQgc2Vjb25kIGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUgaXMgd3JvbmcufAorfCAgICAgICAgICAgICAgICAgICAgLTc6IFRoZSBzZWxlY3RlZCBzZWNvbmQgY291bnRlciBvcGVyYXRpbmcgb3B0aW9uIGlzICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgd3JvbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdENvdW50ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLAorCUJZVEUgYl9Db3VudGVyUmFuZ2UsCisJQllURSBiX0ZpcnN0Q291bnRlck1vZHVzLAorCUJZVEUgYl9GaXJzdENvdW50ZXJPcHRpb24sCisJQllURSBiX1NlY29uZENvdW50ZXJNb2R1cywgQllURSBiX1NlY29uZENvdW50ZXJPcHRpb24pCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBpbmNyZW1lbnRhbCBjb3VudGVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGMDAwMFVMKSA9PQorCQlBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjb3VudGVyIHJhbmdlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChiX0NvdW50ZXJSYW5nZSA9PSBBUENJMTcxMF8xNkJJVF9DT1VOVEVSCisJCQl8fCBiX0NvdW50ZXJSYW5nZSA9PSBBUENJMTcxMF8zMkJJVF9DT1VOVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgZmlyc3QgY291bnRlciBtb2R1cyAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfRmlyc3RDb3VudGVyTW9kdXMgPT0gQVBDSTE3MTBfUVVBRFJVUExFX01PREUgfHwKKwkJCQliX0ZpcnN0Q291bnRlck1vZHVzID09IEFQQ0kxNzEwX0RPVUJMRV9NT0RFIHx8CisJCQkJYl9GaXJzdENvdW50ZXJNb2R1cyA9PSBBUENJMTcxMF9TSU1QTEVfTU9ERSB8fAorCQkJCWJfRmlyc3RDb3VudGVyTW9kdXMgPT0gQVBDSTE3MTBfRElSRUNUX01PREUpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgZmlyc3QgY291bnRlciBvcHRpb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGJfRmlyc3RDb3VudGVyTW9kdXMgPT0gQVBDSTE3MTBfRElSRUNUX01PREUKKwkJCQkJCSYmIChiX0ZpcnN0Q291bnRlck9wdGlvbiA9PQorCQkJCQkJCUFQQ0kxNzEwX0lOQ1JFTUVOVAorCQkJCQkJCXx8IGJfRmlyc3RDb3VudGVyT3B0aW9uCisJCQkJCQkJPT0gQVBDSTE3MTBfREVDUkVNRU5UKSkKKwkJCQkJfHwgKGJfRmlyc3RDb3VudGVyTW9kdXMgIT0KKwkJCQkJCUFQQ0kxNzEwX0RJUkVDVF9NT0RFCisJCQkJCQkmJiAoYl9GaXJzdENvdW50ZXJPcHRpb24gPT0KKwkJCQkJCQlBUENJMTcxMF9IWVNURVJFU0lTX09OCisJCQkJCQkJfHwgYl9GaXJzdENvdW50ZXJPcHRpb24KKwkJCQkJCQk9PQorCQkJCQkJCUFQQ0kxNzEwX0hZU1RFUkVTSVNfT0ZGKSkpCisJCQkJeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIDE2LWJpdCBjb3VudGVyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGJfQ291bnRlclJhbmdlID09CisJCQkJCQlBUENJMTcxMF8xNkJJVF9DT1VOVEVSKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgc2Vjb25kIGNvdW50ZXIgbW9kdXMgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgoYl9GaXJzdENvdW50ZXJNb2R1cyAhPQorCQkJCQkJCQlBUENJMTcxMF9ESVJFQ1RfTU9ERQorCQkJCQkJCQkmJgorCQkJCQkJCQkoYl9TZWNvbmRDb3VudGVyTW9kdXMKKwkJCQkJCQkJCT09CisJCQkJCQkJCQlBUENJMTcxMF9RVUFEUlVQTEVfTU9ERQorCQkJCQkJCQkJfHwKKwkJCQkJCQkJCWJfU2Vjb25kQ291bnRlck1vZHVzCisJCQkJCQkJCQk9PQorCQkJCQkJCQkJQVBDSTE3MTBfRE9VQkxFX01PREUKKwkJCQkJCQkJCXx8CisJCQkJCQkJCQliX1NlY29uZENvdW50ZXJNb2R1cworCQkJCQkJCQkJPT0KKwkJCQkJCQkJCUFQQ0kxNzEwX1NJTVBMRV9NT0RFKSkKKwkJCQkJCQl8fCAoYl9GaXJzdENvdW50ZXJNb2R1cworCQkJCQkJCQk9PQorCQkJCQkJCQlBUENJMTcxMF9ESVJFQ1RfTU9ERQorCQkJCQkJCQkmJgorCQkJCQkJCQliX1NlY29uZENvdW50ZXJNb2R1cworCQkJCQkJCQk9PQorCQkJCQkJCQlBUENJMTcxMF9ESVJFQ1RfTU9ERSkpCisJCQkJCQl7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIHNlY29uZCBjb3VudGVyIG9wdGlvbiAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgoYl9TZWNvbmRDb3VudGVyTW9kdXMgPT0gQVBDSTE3MTBfRElSRUNUX01PREUgJiYgKGJfU2Vjb25kQ291bnRlck9wdGlvbiA9PSBBUENJMTcxMF9JTkNSRU1FTlQgfHwgYl9TZWNvbmRDb3VudGVyT3B0aW9uID09IEFQQ0kxNzEwX0RFQ1JFTUVOVCkpIHx8IChiX1NlY29uZENvdW50ZXJNb2R1cyAhPSBBUENJMTcxMF9ESVJFQ1RfTU9ERSAmJiAoYl9TZWNvbmRDb3VudGVyT3B0aW9uID09IEFQQ0kxNzEwX0hZU1RFUkVTSVNfT04gfHwgYl9TZWNvbmRDb3VudGVyT3B0aW9uID09IEFQQ0kxNzEwX0hZU1RFUkVTSVNfT0ZGKSkpIHsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQkwOworCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRoZSBzZWxlY3RlZCBzZWNvbmQgY291bnRlciBvcGVyYXRpbmcgb3B0aW9uIGlzIHdyb25nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIHNlY29uZCBjb3VudGVyIG9wZXJhdGluZyBvcHRpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS03OworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRoZSBzZWxlY3RlZCBzZWNvbmQgY291bnRlciBvcGVyYXRpbmcgbW9kZSBpcyB3cm9uZyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBzZWNvbmQgY291bnRlciBvcGVyYXRpbmcgbW9kZSBpcyB3cm9uZ1xuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQkJfQorCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIGZpcnN0IGNvdW50ZXIgb3BlcmF0aW5nIG9wdGlvbiBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBmaXJzdCBjb3VudGVyIG9wZXJhdGluZyBvcHRpb24gaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIGZpcnN0IGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGZpcnN0IGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIHNlbGVjdGVkIGNvdW50ZXIgcmFuZ2UgaXMgd3JvbmcgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgY291bnRlciByYW5nZSBpcyB3cm9uZ1xuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGEgZXJyb3Igb2NjdXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoaV9SZXR1cm5WYWx1ZSA9PSAwKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiAxNi1CaXQgY291bnRlciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfQ291bnRlclJhbmdlID09IEFQQ0kxNzEwXzMyQklUX0NPVU5URVIpIHsKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIxID0gYl9Db3VudGVyUmFuZ2UgfAorCQkJCQliX0ZpcnN0Q291bnRlck1vZHVzIHwKKwkJCQkJYl9GaXJzdENvdW50ZXJPcHRpb247CisJCQl9IGVsc2UgeworCQkJCWRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjEgPSBiX0NvdW50ZXJSYW5nZSB8CisJCQkJCShiX0ZpcnN0Q291bnRlck1vZHVzICYgMHg1KSB8CisJCQkJCShiX0ZpcnN0Q291bnRlck9wdGlvbiAmIDB4MjApIHwKKwkJCQkJKGJfU2Vjb25kQ291bnRlck1vZHVzICYgMHhBKSB8CisJCQkJCShiX1NlY29uZENvdW50ZXJPcHRpb24gJiAweDQwKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgZGlyZWN0IG1vZGUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChiX0ZpcnN0Q291bnRlck1vZHVzID09IEFQQ0kxNzEwX0RJUkVDVF9NT0RFKSB7CisJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyMSA9IGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyMSB8CisJCQkJCQlBUENJMTcxMF9ESVJFQ1RfTU9ERTsKKwkJCQl9CisJCQl9CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMjAgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCWRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX0luaXRGbGFnLmJfQ291bnRlckluaXQgPSAxOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGUgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZVxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Db3VudGVyQXV0b1Rlc3QgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX1Rlc3RTdGF0dXMpICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBBIHRlc3QgbW9kZSBpcyBpbnRlbmRlZCBmb3IgdGVzdGluZyB0aGUgY29tcG9uZW50IGFuZCAgfAorfCAgICAgICAgICAgICAgICAgICAgIHRoZSBjb25uZWN0ZWQgcGVyaXBoZXJ5LiBBbGwgdGhlIDgtYml0IGNvdW50ZXIgY2hhaW5zICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYXJlIG9wZXJhdGVkIGludGVybmFsbHkgYXMgZG93biBjb3VudGVycy4gICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJbmRlcGVuZGVudGx5IGZyb20gdGhlIGV4dGVybmFsIHNpZ25hbHMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGFsbCB0aGUgZm91ciA4LWJpdCBjb3VudGVyIGNoYWlucyBhcmUgZGVjcmVtZW50ZWQgaW4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgcGFyYWxsZWwgYnkgZWFjaCBuZWdhdGl2ZSBjbG9jayBwdWxzZSBlZGdlIG9mIENMS1guICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlciBhdXRvIHRlc3QgY29uY2x1c2lvbiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgfCBwYl9UZXN0U3RhdHVzICAgfCAgICBFcnJvciBkZXNjcmlwdGlvbiAgICAgICAgfCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICB8ICAgICBtYXNrICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgfCAgICAwMDAwICAgICAgICAgfCAgICAgTm8gZXJyb3IgZGV0ZWN0ZWQgICAgICAgfCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIHwgICAgMDAwMSAgICAgICAgIHwgRXJyb3IgZGV0ZWN0ZWQgb2YgY291bnRlciAwIHwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICB8ICAgIDAwMTAgICAgICAgICB8IEVycm9yIGRldGVjdGVkIG9mIGNvdW50ZXIgMSB8ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgfCAgICAwMTAwICAgICAgICAgfCBFcnJvciBkZXRlY3RlZCBvZiBjb3VudGVyIDIgfCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIHwgICAgMTAwMCAgICAgICAgIHwgRXJyb3IgZGV0ZWN0ZWQgb2YgY291bnRlciAzIHwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgIGJfQm9hcmRIYW5kbGUgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgfCAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX1Rlc3RTdGF0dXMgIDogQXV0byB0ZXN0IGNvbmNsdXNpb24uIFNlZSB0YWJsZXwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9Db3VudGVyQXV0b1Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIFBCWVRFIHBiX1Rlc3RTdGF0dXMpCit7CisJQllURSBiX01vZHVsQ3B0ID0gMDsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfTGF0aGNoVmFsdWU7CisKKwkqcGJfVGVzdFN0YXR1cyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBjb3VudGVyIG1vZHVsZSBmb3VuZCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bMF0gJiAweEZGRkYwMDAwVUwpID09CisJCUFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIKKwkJfHwgKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uWzFdICYgMHhGRkZGMDAwMFVMKSA9PQorCQlBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSCisJCXx8IChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvblsyXSAmIDB4RkZGRjAwMDBVTCkgPT0KKwkJQVBDSTE3MTBfSU5DUkVNRU5UQUxfQ09VTlRFUgorCQl8fCAoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bM10gJiAweEZGRkYwMDAwVUwpID09CisJCUFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIpIHsKKwkJZm9yIChiX01vZHVsQ3B0ID0gMDsgYl9Nb2R1bENwdCA8IDQ7IGJfTW9kdWxDcHQrKykgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbmNyZW1lbnRhbCBjb3VudGVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsQ3B0XSAmCisJCQkJCTB4RkZGRjAwMDBVTCkgPT0KKwkJCQlBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSKSB7CisJCSAvKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFN0YXJ0IHRoZSB0ZXN0ICovCisJCSAvKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0bCgzLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAxNiArICg2NCAqIGJfTW9kdWxDcHQpKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUYXRjaCB0aGUgY291bnRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bENwdCkpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWQgdGhlIGxhdGNoIHZhbHVlICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZHdfTGF0aGNoVmFsdWUgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgNCArICg2NCAqIGJfTW9kdWxDcHQpKTsKKworCQkJCWlmICgoZHdfTGF0aGNoVmFsdWUgJiAweEZGKSAhPQorCQkJCQkoKGR3X0xhdGhjaFZhbHVlID4+IDgpICYgMHhGRikKKwkJCQkJJiYgKGR3X0xhdGhjaFZhbHVlICYgMHhGRikgIT0KKwkJCQkJKChkd19MYXRoY2hWYWx1ZSA+PiAxNikgJiAweEZGKQorCQkJCQkmJiAoZHdfTGF0aGNoVmFsdWUgJiAweEZGKSAhPQorCQkJCQkoKGR3X0xhdGhjaFZhbHVlID4+IDI0KSAmIDB4RkYpKSB7CisJCQkJCSpwYl9UZXN0U3RhdHVzID0KKwkJCQkJCSpwYl9UZXN0U3RhdHVzIHwgKDEgPDwKKwkJCQkJCWJfTW9kdWxDcHQpOworCQkJCX0KKworCQkgLyoqKioqKioqKioqKioqKioqLworCQkJCS8qIFN0b3AgdGhlIHRlc3QgKi8KKwkJIC8qKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTYgKyAoNjQgKiBiX01vZHVsQ3B0KSk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJObyBjb3VudGVyIG1vZHVsZSBmb3VuZFxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Jbml0SW5kZXggKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciwgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1JlZmVyZW5jZUFjdGlvbiwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW5kZXhPcGVyYXRpb24sICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9BdXRvTW9kZSwgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0ludGVycnVwdEVuYWJsZSkgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBJbml0aWFsaXNlIHRoZSBpbmRleCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzZWxlY3RlZCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuIElmIGEgSU5ERVggZmxhZyBvY2N1ciwgeW91IGhhdmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIHBvc3NpYmlsaXR5IHRvIGNsZWFyIHRoZSAzMi1CaXQgY291bnRlciBvciB0byBsYXRjaHwKK3wgICAgICAgICAgICAgICAgICAgICB0aGUgY3VycmVudCAzMi1CaXQgdmFsdWUgaW4gdG8gdGhlIGZpcnN0IGxhdGNoICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyLiBUaGUgYl9JbmRleE9wZXJhdGlvbiBwYXJhbWV0ZXIgZ2l2ZSB0aGUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgcG9zc2liaWxpdHkgdG8gY2hvaWNlIHRoZSBJTkRFWCBhY3Rpb24uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgaGF2ZSBlbmFibGVkIHRoZSBhdXRvbWF0aWMgbW9kZSwgZWFjaCBJTkRFWCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiBpcyBjbGVhcmVkIGF1dG9tYXRpY2FsbHksIGVsc2UgeW91IG11c3QgcmVhZCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIGluZGV4IHN0YXR1cyAoImlfQVBDSTE3MTBfUmVhZEluZGV4U3RhdHVzIikgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBhZnRlciBlYWNoIElOREVYIGFjdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgfAorfCAgICAgICAgICAgfCAgIGJfSW5kZXhPcGVyYXRpb24gICAgIHwgICAgICAgICBPcGVyYXRpb24gICAgICAgICAgICAgICAgICB8ICB8Cit8ICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgIHwKK3wgICAgICAgICAgIHxBUENJMTcxMF9MQVRDSF9DT1VOVEVSICB8IEFmdGVyIGEgaW5kZXggc2lnbmFsLCB0aGUgY291bnRlciAgfCAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgdmFsdWUgKDMyLUJpdCkgaXMgbGF0Y2hlZCBpbiB0byAgICB8ICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGUgZmlyc3QgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgIHwgIHwKK3wgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgfAorfCAgICAgICAgICAgfEFQQ0kxNzEwX0NMRUFSX0NPVU5URVIgIHwgQWZ0ZXIgYSBpbmRleCBzaWduYWwsIHRoZSBjb3VudGVyICB8ICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCB2YWx1ZSBpcyBjbGVhcmVkICgzMi1CaXQpICAgICAgICAgIHwgIHwKK3wgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9SZWZlcmVuY2VBY3Rpb24gOiBEZXRlcm1pbmUgaWYgdGhlIHJlZmVyZW5jZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3Qgc2V0IG9yIG5vIGZvciB0aGUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0YW5jZSBmcm9tIGluZGV4ICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9FTkFCTEUgOiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZSBtdXN0IGJlIHNldCBmb3IgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQgdGhlIGluZGV4ICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9ESVNBQkxFIDogICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZSBoYXZlIG5vdCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0YW5jZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbmRleE9wZXJhdGlvbiAgOiBJbmRleCBvcGVyYXRpbmcgbW9kZS4gICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSB0YWJsZS4gICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQXV0b01vZGUgICAgICAgIDogRW5hYmxlIG9yIGRpc2FibGUgdGhlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbWF0aWMgaW5kZXggcmVzZXQuICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0VOQUJMRSA6ICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIGF1dG9tYXRpYyBtb2RlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9ESVNBQkxFIDogICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSB0aGUgYXV0b21hdGljIG1vZGUgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW50ZXJydXB0RW5hYmxlIDogRW5hYmxlIG9yIGRpc2FibGUgdGhlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQuICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0VOQUJMRSA6ICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSBpbnRlcnJ1cHQgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9ESVNBQkxFIDogICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgdGhlIGludGVycnVwdCAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNCAgVGhlIHJlZmVyZW5jZSBhY3Rpb24gcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBUaGUgaW5kZXggb3BlcmF0aW5nIG1vZGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IFRoZSBhdXRvIG1vZGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNzogSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC04OiBJbnRlcnJ1cHQgZnVuY3Rpb24gbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdEluZGV4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwKKwlCWVRFIGJfUmVmZXJlbmNlQWN0aW9uLAorCUJZVEUgYl9JbmRleE9wZXJhdGlvbiwgQllURSBiX0F1dG9Nb2RlLCBCWVRFIGJfSW50ZXJydXB0RW5hYmxlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgcmVmZXJlbmNlIHBhcmFtZXRlciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfUmVmZXJlbmNlQWN0aW9uID09IEFQQ0kxNzEwX0VOQUJMRSB8fAorCQkJCWJfUmVmZXJlbmNlQWN0aW9uID09IEFQQ0kxNzEwX0RJU0FCTEUpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGluZGV4IHBhcmFtZXRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoYl9JbmRleE9wZXJhdGlvbiA9PQorCQkJCQlBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQ09VTlRFUgorCQkJCQl8fCBiX0luZGV4T3BlcmF0aW9uID09CisJCQkJCUFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0NPVU5URVIKKwkJCQkJfHwgYl9JbmRleE9wZXJhdGlvbiA9PQorCQkJCQlBUENJMTcxMF9ISUdIX0VER0VfQ0xFQVJfQ09VTlRFUgorCQkJCQl8fCBiX0luZGV4T3BlcmF0aW9uID09CisJCQkJCUFQQ0kxNzEwX0xPV19FREdFX0NMRUFSX0NPVU5URVIKKwkJCQkJfHwgYl9JbmRleE9wZXJhdGlvbiA9PQorCQkJCQlBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIKKwkJCQkJfHwgYl9JbmRleE9wZXJhdGlvbiA9PQorCQkJCQlBUENJMTcxMF9MT1dfRURHRV9MQVRDSF9BTkRfQ0xFQVJfQ09VTlRFUikKKwkJCQl7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIGF1dG8gbW9kZSBwYXJhbWV0ZXIgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9BdXRvTW9kZSA9PSBBUENJMTcxMF9FTkFCTEUgfHwKKwkJCQkJCWJfQXV0b01vZGUgPT0gQVBDSTE3MTBfRElTQUJMRSkKKwkJCQkJeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIGludGVycnVwdCBtb2RlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoYl9JbnRlcnJ1cHRFbmFibGUgPT0KKwkJCQkJCQlBUENJMTcxMF9FTkFCTEUKKwkJCQkJCQl8fCBiX0ludGVycnVwdEVuYWJsZSA9PQorCQkJCQkJCUFQQ0kxNzEwX0RJU0FCTEUpIHsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIE1ha3RlIHRoZSBjb25maWd1cmF0aW9uIGNvbW1hbmRvICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoYl9SZWZlcmVuY2VBY3Rpb24gPT0KKwkJCQkJCQkJQVBDSTE3MTBfRU5BQkxFKQorCQkJCQkJCXsKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjIKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQl8CisJCQkJCQkJCQlBUENJMTcxMF9FTkFCTEVfSU5ERVhfQUNUSU9OOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJJgorCQkJCQkJCQkJQVBDSTE3MTBfRElTQUJMRV9JTkRFWF9BQ1RJT047CisJCQkJCQkJfQorCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgbG93IGxldmVsIGxhdGNoIG9yL2FuZCBjbGVhciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmIChiX0luZGV4T3BlcmF0aW9uID09CisJCQkJCQkJCUFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0NPVU5URVIKKwkJCQkJCQkJfHwKKwkJCQkJCQkJYl9JbmRleE9wZXJhdGlvbgorCQkJCQkJCQk9PQorCQkJCQkJCQlBUENJMTcxMF9MT1dfRURHRV9DTEVBUl9DT1VOVEVSCisJCQkJCQkJCXx8CisJCQkJCQkJCWJfSW5kZXhPcGVyYXRpb24KKwkJCQkJCQkJPT0KKwkJCQkJCQkJQVBDSTE3MTBfTE9XX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIpCisJCQkJCQkJeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTZXQgdGhlIGluZGV4IGxldmVsIHRvIGxvdyAoRFEyNikgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCXwKKwkJCQkJCQkJCUFQQ0kxNzEwX1NFVF9MT1dfSU5ERVhfTEVWRUw7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgaW5kZXggbGV2ZWwgdG8gaGlnaCAoRFEyNikgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQkmCisJCQkJCQkJCQlBUENJMTcxMF9TRVRfSElHSF9JTkRFWF9MRVZFTDsKKwkJCQkJCQl9CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgbGF0Y2ggYW5kIGNsZWFyIGNvdW50ZXIgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfSW5kZXhPcGVyYXRpb24gPT0KKwkJCQkJCQkJQVBDSTE3MTBfSElHSF9FREdFX0xBVENIX0FORF9DTEVBUl9DT1VOVEVSCisJCQkJCQkJCXx8CisJCQkJCQkJCWJfSW5kZXhPcGVyYXRpb24KKwkJCQkJCQkJPT0KKwkJCQkJCQkJQVBDSTE3MTBfTE9XX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIpCisJCQkJCQkJeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgbGF0Y2ggYW5kIGNsZWFyIGZsYWcgKERRMjcpICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCXwKKwkJCQkJCQkJCUFQQ0kxNzEwX0VOQUJMRV9MQVRDSF9BTkRfQ0xFQVI7CisJCQkJCQkJfQkvLyBpZiAoYl9JbmRleE9wZXJhdGlvbiA9PSBBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIgfHwgYl9JbmRleE9wZXJhdGlvbiA9PSBBUENJMTcxMF9MT1dfRURHRV9MQVRDSF9BTkRfQ0xFQVJfQ09VTlRFUikKKwkJCQkJCQllbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIENsZWFyIHRoZSBsYXRjaCBhbmQgY2xlYXIgZmxhZyAoRFEyNykgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQkmCisJCQkJCQkJCQlBUENJMTcxMF9ESVNBQkxFX0xBVENIX0FORF9DTEVBUjsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IGlmIGxhdGNoIGNvdW50ZXIgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoYl9JbmRleE9wZXJhdGlvbiA9PSBBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQ09VTlRFUiB8fCBiX0luZGV4T3BlcmF0aW9uID09IEFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0NPVU5URVIpIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogRW5hYmxlIHRoZSBsYXRjaCBmcm9tIGNvdW50ZXIgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQlBUENJMTcxMF9JTkRFWF9MQVRDSF9DT1VOVEVSOworCQkJCQkJCQl9IGVsc2UgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBFbmFibGUgdGhlIGNsZWFyIGZyb20gY291bnRlciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCSh+QVBDSTE3MTBfSU5ERVhfTEFUQ0hfQ09VTlRFUik7CisJCQkJCQkJCX0KKwkJCQkJCQl9CS8vIC8vIGlmIChiX0luZGV4T3BlcmF0aW9uID09IEFQQ0kxNzEwX0hJR0hfRURHRV9MQVRDSF9BTkRfQ0xFQVJfQ09VTlRFUiB8fCBiX0luZGV4T3BlcmF0aW9uID09IEFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0FORF9DTEVBUl9DT1VOVEVSKQorCisJCQkJCQkJaWYgKGJfQXV0b01vZGUgPT0KKwkJCQkJCQkJQVBDSTE3MTBfRElTQUJMRSkKKwkJCQkJCQl7CisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJfAorCQkJCQkJCQkJQVBDSTE3MTBfSU5ERVhfQVVUT19NT0RFOworCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMgorCQkJCQkJCQkJJgorCQkJCQkJCQkJKH5BUENJMTcxMF9JTkRFWF9BVVRPX01PREUpOworCQkJCQkJCX0KKworCQkJCQkJCWlmIChiX0ludGVycnVwdEVuYWJsZSA9PQorCQkJCQkJCQlBUENJMTcxMF9FTkFCTEUpCisJCQkJCQkJeworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyMworCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjMKKwkJCQkJCQkJCXwKKwkJCQkJCQkJCUFQQ0kxNzEwX0VOQUJMRV9JTkRFWF9JTlQ7CisJCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjMKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXIzCisJCQkJCQkJCQkmCisJCQkJCQkJCQlBUENJMTcxMF9ESVNBQkxFX0lOREVYX0lOVDsKKwkJCQkJCQl9CisKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCXNfSW5pdEZsYWcuCisJCQkJCQkJCWJfSW5kZXhJbml0ID0gMTsKKworCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCURQUklOVEsoIkludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNzsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaGUgYXV0byBtb2RlIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGhlIGF1dG8gbW9kZSBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIGluZGV4IG9wZXJhdGluZyBtb2RlIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlRoZSBpbmRleCBvcGVyYXRpbmcgbW9kZSBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSByZWZlcmVuY2UgYWN0aW9uIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJUaGUgcmVmZXJlbmNlIGFjdGlvbiBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Jbml0UmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyLCAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfUmVmZXJlbmNlTGV2ZWwpICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEluaXRpYWxpc2UgdGhlIHJlZmVyZW5jZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzZWxlY3RlZCB8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICB8IGJfUmVmZXJlbmNlTGV2ZWwgICB8ICAgICAgICAgT3BlcmF0aW9uICAgICAgIHwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgfCAgIEFQQ0kxNzEwX0xPVyAgICAgfCAgUmVmZXJlbmNlIG9jY3VyIGlmICIwIiB8ICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgIHwgICBBUENJMTcxMF9ISUdIICAgIHwgIFJlZmVyZW5jZSBvY2N1ciBpZiAiMSIgfCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9SZWZlcmVuY2VMZXZlbCAgOiBSZWZlcmVuY2UgbGV2ZWwuICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFJlZmVyZW5jZSBsZXZlbCBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdFJlZmVyZW5jZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9SZWZlcmVuY2VMZXZlbCkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHJlZmVyZW5jZSBsZXZlbCBwYXJhbWV0ZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1JlZmVyZW5jZUxldmVsID09IDAgfHwgYl9SZWZlcmVuY2VMZXZlbCA9PSAxKSB7CisJCQkJaWYgKGJfUmVmZXJlbmNlTGV2ZWwgPT0gMSkgeworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjIgPSBkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjIgfAorCQkJCQkJQVBDSTE3MTBfUkVGRVJFTkNFX0hJR0g7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyID0gZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXIyICYKKwkJCQkJCUFQQ0kxNzEwX1JFRkVSRU5DRV9MT1c7CisJCQkJfQorCisJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCwKKwkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAyMCArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCWRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX0luaXRGbGFnLmJfUmVmZXJlbmNlSW5pdCA9IDE7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlZmVyZW5jZSBsZXZlbCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlJlZmVyZW5jZSBsZXZlbCBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8JaV9BUENJMTcxMF9Jbml0RXh0ZXJuYWxTdHJvYmUgICAgICAgICAgICAgICAgfAorfAkJCQkJKEJZVEVfIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgIHwKK3wJCQkJCSBCWVRFXyBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgQllURV8gYl9FeHRlcm5hbFN0cm9iZSwgICAgICAgICAgICAgfAorfAkJCQkJIEJZVEVfIGJfRXh0ZXJuYWxTdHJvYmVMZXZlbCkgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEluaXRpYWxpc2VzIHRoZSBleHRlcm5hbCBzdHJvYmUgbGV2ZWwgY29ycmVzcG9uZGluZyB0byB8Cit8CQkgICAgICB0aGUgc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICBCWVRFXyBiX0V4dGVybmFsU3Ryb2JlICA6IEV4dGVybmFsIHN0cm9iZSBzZWxlY3Rpb24gICAgfAorfAkJCQkJCTAgOiBFeHRlcm5hbCBzdHJvYmUgQSAgICAgICAgfAorfAkJCQkJCTEgOiBFeHRlcm5hbCBzdHJvYmUgQiAgICAgICAgfAorfAkJICAgICAgQllURV8gYl9FeHRlcm5hbFN0cm9iZUxldmVsIDogRXh0ZXJuYWwgc3Ryb2JlIGxldmVsICAgIHwKK3wJCQkJCQlBUENJMTcxMF9MT1cgOiAgICAgICAgICAgICAgIHwKK3wJCQkJCQlFeHRlcm5hbCBsYXRjaCBvY2N1cnMgaWYgIjAiIHwKK3wJCQkJCQlBUENJMTcxMF9ISUdIIDogICAgICAgICAgICAgIHwKK3wJCQkJCQlFeHRlcm5hbCBsYXRjaCBvY2N1cnMgaWYgIjEiIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBFeHRlcm5hbCBzdHJvYmUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IEV4dGVybmFsIHN0cm9iZSBsZXZlbCBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdEV4dGVybmFsU3Ryb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgQllURSBiX0V4dGVybmFsU3Ryb2JlLCBCWVRFIGJfRXh0ZXJuYWxTdHJvYmVMZXZlbCkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGV4dGVybmFsIHN0cm9iZSBzZWxlY3Rpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX0V4dGVybmFsU3Ryb2JlID09IDAgfHwgYl9FeHRlcm5hbFN0cm9iZSA9PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGxldmVsICovCisJCSAvKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChiX0V4dGVybmFsU3Ryb2JlTGV2ZWwgPT0gQVBDSTE3MTBfSElHSCkgfHwKKwkJCQkJKChiX0V4dGVybmFsU3Ryb2JlTGV2ZWwgPT0gQVBDSTE3MTBfTE9XCisJCQkJCQkJJiYgKGRldnByaXYtPgorCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uCisJCQkJCQkJCVtiX01vZHVsTmJyXSAmCisJCQkJCQkJCTB4RkZGRikgPj0KKwkJCQkJCQkweDMxMzUpKSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgdGhlIGxldmVsICovCisJCSAgICAvKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0ID0gKGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyNCAmICgweEZGIC0KKwkJCQkJCQkoMHgxMCA8PCBiX0V4dGVybmFsU3Ryb2JlKSkpIHwgKChiX0V4dGVybmFsU3Ryb2JlTGV2ZWwgXiAxKSA8PCAoNCArIGJfRXh0ZXJuYWxTdHJvYmUpKTsKKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBFeHRlcm5hbCBzdHJvYmUgbGV2ZWwgcGFyYW1ldGVyIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiRXh0ZXJuYWwgc3Ryb2JlIGxldmVsIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9CS8vIGlmIChiX0V4dGVybmFsU3Ryb2JlID09IDAgfHwgYl9FeHRlcm5hbFN0cm9iZSA9PSAxKQorCQkJZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRXh0ZXJuYWwgc3Ryb2JlIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiRXh0ZXJuYWwgc3Ryb2JlIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQkvLyBpZiAoYl9FeHRlcm5hbFN0cm9iZSA9PSAwIHx8IGJfRXh0ZXJuYWxTdHJvYmUgPT0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisJLyoKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9Jbml0Q29tcGFyZUxvZ2ljICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UXyAgdWlfQ29tcGFyZVZhbHVlKSAgICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFRhc2sgICAgICAgICAgICAgIDogU2V0IHRoZSAzMi1CaXQgY29tcGFyZSB2YWx1ZS4gQXQgdGhhdCBtb21lbnQgdGhhdCB0aGUgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50YWwgY291bnRlciBhcnJpdmUgdG8gdGhlIGNvbXBhcmUgdmFsdWUgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgKHVpX0NvbXBhcmVWYWx1ZSkgYSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLiAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gIGJfQm9hcmRIYW5kbGUgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVF8gdWlfQ29tcGFyZVZhbHVlICAgOiAzMi1CaXQgY29tcGFyZSB2YWx1ZSAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IE91dHB1dCBQYXJhbWV0ZXJzIDogLQorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAgIHwgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorCSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCSAqLworCitJTlQgaV9BUENJMTcxMF9Jbml0Q29tcGFyZUxvZ2ljKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgVUlOVCB1aV9Db21wYXJlVmFsdWUpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKworCQkJb3V0bCh1aV9Db21wYXJlVmFsdWUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMjggKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCWRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX0luaXRGbGFnLmJfQ29tcGFyZUxvZ2ljSW5pdCA9IDE7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50ICAgICAgICAgICAgICB8Cit8CQkJCShCWVRFXwkJIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICB8Cit8CQkJCSBCWVRFXwkJIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICB8Cit8CQkJCSBCWVRFXwkJIGJfUENJSW5wdXRDbG9jaywgICAgICAgICAgICB8Cit8CQkJCSBCWVRFXwkJIGJfVGltaW5nVW5pdHksICAgICAgICAgICAgICB8Cit8CQkJCSBVTE9OR18gCXVsX1RpbWluZ0ludGVydmFsLCAgICAgICAgICAgfAorfAkJCQkgUFVMT05HXyAgICAgICBwdWxfUmVhbFRpbWluZ0ludGVydmFsKSAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXRzIHRoZSB0aW1lIGZvciB0aGUgZnJlcXVlbmN5IG1lYXN1cmVtZW50LiAgICAgICAgICAgfAorfAkJICAgICAgQ29uZmlndXJlcyB0aGUgc2VsZWN0ZWQgVE9SIGluY3JlbWVudGFsIGNvdW50ZXIgb2YgdGhlIHwKK3wJCSAgICAgIHNlbGVjdGVkIG1vZHVsZSAoYl9Nb2R1bE5icikuIFRoZSB1bF9UaW1pbmdJbnRlcnZhbCBhbmR8Cit8CQkgICAgICB1bF9UaW1pbmdVbml0eSBkZXRlcm1pbmUgdGhlIHRpbWUgYmFzZSBmb3IgdGhlICAgICAgICAgfAorfAkJICAgICAgbWVhc3VyZW1lbnQuIFRoZSBwdWxfUmVhbFRpbWluZ0ludGVydmFsIHJldHVybnMgdGhlICAgIHwKK3wJCSAgICAgIHJlYWwgdGltZSB2YWx1ZS4gWW91IG11c3QgY2FsbCB1cCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSB8Cit8CQkgICAgICB5b3UgY2FsbCB1cCBhbnkgb3RoZXIgZnVuY3Rpb24gd2hpY2ggZ2l2ZXMgYWNjZXNzIHRvICAgfAorfAkJICAgICAgdGhlIGZyZXF1ZW5jeSBtZWFzdXJlbWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8CQkgICAgICBCWVRFXyAgYl9Nb2R1bE5icgkgICAgICA6CU51bWJlciBvZiB0aGUgbW9kdWxlIHRvIGJlICAgfAorfAkJCQkJCWNvbmZpZ3VyZWQgKDAgdG8gMykgICAgICAgICAgfAorfAkJICAgICAgQllURV8gIGJfUENJSW5wdXRDbG9jayAgOglTZWxlY3Rpb24gb2YgdGhlIFBDSSBidXMgICAgIHwKK3wJCQkJCQljbG9jayAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQktIEFQQ0kxNzEwXzMwTUhaIDogICAgICAgICAgIHwKK3wJCQkJCQkgIFRoZSBQQyBoYXMgYSBQQ0kgYnVzIGNsb2NrIHwKK3wJCQkJCQkgIG9mIDMwIE1IeiAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQktIEFQQ0kxNzEwXzMzTUhaIDogICAgICAgICAgIHwKK3wJCQkJCQkgIFRoZSBQQyBoYXMgYSBQQ0kgYnVzIGNsb2NrIHwKK3wJCQkJCQkgIG9mIDMzIE1IeiAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgIEJZVEVfICBiX1RpbWluZ1VuaXR5ICAgIDogQmFzZSB0aW1lIHVuaXQgKDAgdG8gMikgICAgICB8Cit8CQkJCQkJICAwIDogbnMgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJICAxIDogw6ZzICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCSAgMiA6IG1zICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgVUxPTkdfIHVsX1RpbWluZ0ludGVydmFsOiBCYXNlIHRpbWUgdmFsdWUuICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCA6IFJlYWwgYmFzZSB0aW1lIHZhbHVlLiB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIGlzIHdyb25nICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfAkJCSAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IFRpbWluZyB1bml0eSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogQmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgLTc6IDQwTUh6IHF1YXJ0eiBub3Qgb24gYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwKKwlCWVRFIGJfUENJSW5wdXRDbG9jaywKKwlCWVRFIGJfVGltaW5nVW5pdHksCisJVUxPTkcgdWxfVGltaW5nSW50ZXJ2YWwsIFBVTE9ORyBwdWxfUmVhbFRpbWluZ0ludGVydmFsKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlVTE9ORyB1bF9UaW1lclZhbHVlID0gMDsKKwlkb3VibGUgZF9SZWFsVGltaW5nSW50ZXJ2YWw7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgUENJIGJ1cyBjbG9jayAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopIHx8CisJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgfHwKKwkJCQkoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSB0aW1pbmcgdW5pdCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChiX1RpbWluZ1VuaXR5IDw9IDIpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBiYXNlIHRpbWluZyBzZWxlY3Rpb24gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikKKwkJCQkJCQkmJiAoYl9UaW1pbmdVbml0eSA9PSAwKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PQorCQkJCQkJCQkyNjYpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9CisJCQkJCQkJCTg3MzgxMzNVTCkpCisJCQkJCQl8fCAoKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCQlBUENJMTcxMF8zME1IWikKKwkJCQkJCQkmJiAoYl9UaW1pbmdVbml0eSA9PSAxKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PQorCQkJCQkJCQkxKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PQorCQkJCQkJCQk4NzM4VUwpKQorCQkJCQkJfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCQkJQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJJiYgKGJfVGltaW5nVW5pdHkgPT0gMikKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0KKwkJCQkJCQkJMSkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0KKwkJCQkJCQkJOFVMKSkKKwkJCQkJCXx8ICgoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCSYmIChiX1RpbWluZ1VuaXR5ID09IDApCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsID49CisJCQkJCQkJCTI0MikKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0KKwkJCQkJCQkJNzk0Mzc1N1VMKSkKKwkJCQkJCXx8ICgoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCSYmIChiX1RpbWluZ1VuaXR5ID09IDEpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsID49CisJCQkJCQkJCTEpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9CisJCQkJCQkJCTc5NDNVTCkpCisJCQkJCQl8fCAoKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkmJiAoYl9UaW1pbmdVbml0eSA9PSAyKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PQorCQkJCQkJCQkxKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PQorCQkJCQkJCQk3VUwpKQorCQkJCQkJfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJJiYgKGJfVGltaW5nVW5pdHkgPT0gMCkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0KKwkJCQkJCQkJMjAwKQorCQkJCQkJCSYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PQorCQkJCQkJCQk2NTUzNTAwVUwpKQorCQkJCQkJfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJJiYgKGJfVGltaW5nVW5pdHkgPT0gMSkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0KKwkJCQkJCQkJMSkKKwkJCQkJCQkmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0KKwkJCQkJCQkJNjU1M1VMKSkKKwkJCQkJCXx8ICgoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCSYmIChiX1RpbWluZ1VuaXR5ID09IDIpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsID49CisJCQkJCQkJCTEpCisJCQkJCQkJJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9CisJCQkJCQkJCTZVTCkpKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgNDBNSHogdXNlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgPT0KKwkJCQkJCQlBUENJMTcxMF80ME1IWikgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgZmlybXdhcmUgPj0gUmV2MS41ICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRikgPj0gMHgzMTM1KSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgNDBNSHogcXVhcnR6IG9uIGJvYXJkICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJLypJTlBEVyAocHNfQVBDSTE3MTBWYXJpYWJsZS0+CisJCQkJCQkJCSAgIHNfQm9hcmQgW2JfQm9hcmRIYW5kbGVdLgorCQkJCQkJCQkgICBzX0JvYXJkSW5mb3MuCisJCQkJCQkJCSAgIHVpX0FkZHJlc3MgKyAzNiArICg2NCAqIGJfTW9kdWxOYnIpLCAmZHdfU3RhdHVzKTsgKi8KKwkJCQkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCQkJCWlubAorCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJKyAzNiArCisJCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCB0aGUgcXVhcnR6IGZsYWcgKERRMCkgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDEpICE9IDEpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiA0ME1IeiBxdWFydHogbm90IG9uIGJvYXJkICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlEUFJJTlRLKCI0ME1IeiBxdWFydHogbm90IG9uIGJvYXJkXG4iKTsKKwkJCQkJCQkJCWlfUmV0dXJuVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJLTc7CisJCQkJCQkJCX0KKwkJCQkJCQl9IGVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIDQwTUh6IHF1YXJ0eiBub3Qgb24gYm9hcmQgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQlEUFJJTlRLKCI0ME1IeiBxdWFydHogbm90IG9uIGJvYXJkXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNzsKKwkJCQkJCQl9CisJCQkJCQl9CS8vIGlmIChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopCisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIG5vdCBlcnJvciBvY2N1ciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGlfUmV0dXJuVmFsdWUgPT0gMCkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBJTkNfQ1BUIHZlcnNpb24gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmIDB4RkZGRikgPj0gMHgzMTMxKSB7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiA0ME1IeiB1c2VkICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBFbmFibGUgdGhlIDQwTUh6IHF1YXJ6IChEUTMwKSAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQkJfAorCQkJCQkJCQkJCUFQQ0kxNzEwX0VOQUJMRV80ME1IWl9GUkVRVUVOQ1k7CisJCQkJCQkJCX0JLy8gaWYgKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikKKwkJCQkJCQkJZWxzZSB7CisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBEaXNhYmxlIHRoZSA0ME1IeiBxdWFyeiAoRFEzMCkgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJQVBDSTE3MTBfRElTQUJMRV80ME1IWl9GUkVRVUVOQ1k7CisKKwkJCQkJCQkJfQkvLyBpZiAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKQorCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSBkaXZpc2lvbiBmYXRvciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZnB1X2JlZ2luKCk7CisJCQkJCQkJCXN3aXRjaCAoYl9UaW1pbmdVbml0eSkgeworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiBucyAqLworCQkJCS8qKioqKiovCisKKwkJCQkJCQkJY2FzZSAwOgorCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKDAuMDAwMjUgKiBiX1BDSUlucHV0Q2xvY2spKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltaW5nSW50ZXJ2YWwgKiAoMC4wMDAyNSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDAuMDAwMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjAwMDI1CisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgwLjAwMDI1ICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCSpwdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCWJyZWFrOworCisJCQkJLyoqKioqKi8KKwkJCQkJCQkJCS8qIMOmcyAqLworCQkJCS8qKioqKiovCisKKwkJCQkJCQkJY2FzZSAxOgorCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKDAuMjUgKiBiX1BDSUlucHV0Q2xvY2spKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltaW5nSW50ZXJ2YWwgKiAoMC4yNSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDAuMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJZF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCTAuMjUKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spOworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDAuMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49IChkb3VibGUpKChkb3VibGUpKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkvKioqKioqLworCQkJCQkJCQkJLyogbXMgKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgMjoKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltaW5nSW50ZXJ2YWwgKiAoMjUwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJKnB1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MC4wCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgyNTAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbCArIDAuNSkpIHsKKwkJCQkJCQkJCQkqcHVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCSpwdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkyOworCisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJfQorCisJCQkJCQkJCWZwdV9lbmQoKTsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFdyaXRlIHRoZSB0aW1lciB2YWx1ZSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlvdXRsKHVsX1RpbWVyVmFsdWUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMzIgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgaW5pdGlhbGlzYXRpb24gZmxhZyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX0luaXRGbGFnLgorCQkJCQkJCQkJYl9GcmVxdWVuY3lNZWFzdXJlbWVudEluaXQKKwkJCQkJCQkJCT0gMTsKKwkJCQkJCQl9IGVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktMzsKKwkJCQkJCQl9CisJCQkJCQl9CS8vIGlmIChpX1JldHVyblZhbHVlID09IDApCisJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIEJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIkJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUaW1pbmcgdW5pdHkgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiVGltaW5nIHVuaXR5IHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworCisJCQkJCQkJLy9JTlNOIEJJVFMKKy8qIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOklOVAlpX0FQQ0kxNzEwX0luc25CaXRzSU5DQ1BUKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCitzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXQgJiBDbGVhciBGdW5jdGlvbnMgZm9yIElOQ19DUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzSU5DQ1BUKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX0JpdHNUeXBlOworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwl1aV9CaXRzVHlwZSA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsJLy8gU2F2ZSB0aGUgY3VycmVudCBwcm9jZXNzIHRhc2sgc3RydWN0dXJlCisKKwlzd2l0Y2ggKHVpX0JpdHNUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9JTkNDUFRfQ0xFQVJDT1VOVEVSVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0NsZWFyQ291bnRlclZhbHVlKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfQ0xFQVJBTExDT1VOVEVSVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0NsZWFyQWxsQ291bnRlclZhbHVlKGRldik7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfU0VUSU5QVVRGSUxURVI6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1NldElucHV0RmlsdGVyKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBkYXRhWzBdLCAoQllURSkgZGF0YVsxXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfTEFUQ0hDT1VOVEVSOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9MYXRjaENvdW50ZXIoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLCAoQllURSkgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfU0VUSU5ERVhBTkRSRUZFUkVOQ0VTT1VSQ0U6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1NldEluZGV4QW5kUmVmZXJlbmNlU291cmNlKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKEJZVEUpIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX1NFVERJR0lUQUxDSExPTjoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfU2V0RGlnaXRhbENobE9uKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfU0VURElHSVRBTENITE9GRjoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfU2V0RGlnaXRhbENobE9mZihkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiQml0cyBDb25maWcgUGFyYW1ldGVyIFdyb25nXG4iKTsKKwl9CisKKwlpZiAoaV9SZXR1cm5WYWx1ZSA+PSAwKQorCQlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9DbGVhckNvdW50ZXJWYWx1ZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgYl9Nb2R1bE5icikgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDbGVhciB0aGUgY291bnRlciB2YWx1ZSBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0NsZWFyQ291bnRlclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBCWVRFIGJfTW9kdWxOYnIpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ2xlYXIgdGhlIGNvdW50ZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKDEsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMTYgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfQ2xlYXJBbGxDb3VudGVyVmFsdWUgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgIGJfQm9hcmRIYW5kbGUpICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENsZWFyIGFsbCBjb3VudGVyIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9DbGVhckFsbENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlCWVRFIGJfTW9kdWxDcHQgPSAwOworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIGNvdW50ZXIgbW9kdWxlIGZvdW5kICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvblswXSAmIDB4RkZGRjAwMDBVTCkgPT0KKwkJQVBDSTE3MTBfSU5DUkVNRU5UQUxfQ09VTlRFUgorCQl8fCAoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bMV0gJiAweEZGRkYwMDAwVUwpID09CisJCUFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIKKwkJfHwgKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uWzJdICYgMHhGRkZGMDAwMFVMKSA9PQorCQlBUENJMTcxMF9JTkNSRU1FTlRBTF9DT1VOVEVSCisJCXx8IChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvblszXSAmIDB4RkZGRjAwMDBVTCkgPT0KKwkJQVBDSTE3MTBfSU5DUkVNRU5UQUxfQ09VTlRFUikgeworCQlmb3IgKGJfTW9kdWxDcHQgPSAwOyBiX01vZHVsQ3B0IDwgNDsgYl9Nb2R1bENwdCsrKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGluY3JlbWVudGFsIGNvdW50ZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxDcHRdICYKKwkJCQkJMHhGRkZGMDAwMFVMKSA9PQorCQkJCUFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ2xlYXIgdGhlIGNvdW50ZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKDEsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDE2ICsgKDY0ICogYl9Nb2R1bENwdCkpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTm8gY291bnRlciBtb2R1bGUgZm91bmRcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfU2V0SW5wdXRGaWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgfAorfAkJCQkJIEJZVEVfIGJfTW9kdWxlLCAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSBCWVRFXyBiX1BDSUlucHV0Q2xvY2ssICAgICAgICAgICAgICB8Cit8CQkJCQkgQllURV8gYl9GaWx0ZXIpICAgICAJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRGlzYWJsZSBvciBlbmFibGUgdGhlIHNvZnR3YXJlIGZpbHRlciBmcm9tIHNlbGVjdGVkICAgIHwKK3wJCSAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuIGJfRmlsdGVyIGRldGVybWluZSB0aGUgZmlsdGVyIHRpbWV8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgYl9Cb2FyZEhhbmRsZSAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfAkJICAgICAgQllURV8gIGJfTW9kdWxOYnIJICAgICAgOglOdW1iZXIgb2YgdGhlIG1vZHVsZSB0byBiZSAgIHwKK3wJCQkJCQljb25maWd1cmVkICgwIHRvIDMpICAgICAgICAgIHwKK3wJCSAgICAgIEJZVEVfICBiX1BDSUlucHV0Q2xvY2sgIDoJU2VsZWN0aW9uIG9mIHRoZSBQQ0kgYnVzICAgICB8Cit8CQkJCQkJY2xvY2sgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJLSBBUENJMTcxMF8zME1IWiA6ICAgICAgICAgICB8Cit8CQkJCQkJICBUaGUgUEMgaGFzIGEgUENJIGJ1cyBjbG9jayB8Cit8CQkJCQkJICBvZiAzMCBNSHogICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJLSBBUENJMTcxMF8zM01IWiA6ICAgICAgICAgICB8Cit8CQkJCQkJICBUaGUgUEMgaGFzIGEgUENJIGJ1cyBjbG9jayB8Cit8CQkJCQkJICBvZiAzMyBNSHogICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJLSBBUENJMTcxMF80ME1IWiA6ICAgICAgICAgICB8Cit8CQkJCQkJICBUaGUgQVBDSTE3MTAgaGFzIGEgNDBNSHogICAgfAorfAkJCQkJCSAgcXVhcnR6CQkgICAgIHwKK3wJCSAgICAgIEJZVEVfICBiX0ZpbHRlcgkgICAgICA6IEZpbHRlciBzZWxlY3Rpb24gICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCTMwIE1IeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJMDogIFNvZnR3YXJlIGZpbHRlciBub3QgdXNlZCAgICAgICAgIHwKK3wJCQkJCTE6ICBGaWx0ZXIgZnJvbSAyNjZucyAgKDMuNzUwMDAwTUh6KSB8Cit8CQkJCQkyOiAgRmlsdGVyIGZyb20gNDAwbnMgICgyLjUwMDAwME1IeikgfAorfAkJCQkJMzogIEZpbHRlciBmcm9tIDUzM25zICAoMS44NzYxNzBNSHopIHwKK3wJCQkJCTQ6ICBGaWx0ZXIgZnJvbSA2NjZucyAgKDEuNTAxNTAxTUh6KSB8Cit8CQkJCQk1OiAgRmlsdGVyIGZyb20gODAwbnMgICgxLjI1MDAwME1IeikgfAorfAkJCQkJNjogIEZpbHRlciBmcm9tIDkzM25zICAoMS4wNzE4MDBNSHopIHwKK3wJCQkJCTc6ICBGaWx0ZXIgZnJvbSAxMDY2bnMgKDAuOTM4MDgwTUh6KSB8Cit8CQkJCQk4OiAgRmlsdGVyIGZyb20gMTIwMG5zICgwLjgzMzMzM01IeikgfAorfAkJCQkJOTogIEZpbHRlciBmcm9tIDEzMzNucyAoMC43NTAwMDBNSHopIHwKK3wJCQkJCTEwOiBGaWx0ZXIgZnJvbSAxNDY2bnMgKDAuNjgyMTAwTUh6KSB8Cit8CQkJCQkxMTogRmlsdGVyIGZyb20gMTYwMG5zICgwLjYyNTAwME1IeikgfAorfAkJCQkJMTI6IEZpbHRlciBmcm9tIDE3MzNucyAoMC41Nzc3NzdNSHopIHwKK3wJCQkJCTEzOiBGaWx0ZXIgZnJvbSAxODY2bnMgKDAuNTM1OTAwTUh6KSB8Cit8CQkJCQkxNDogRmlsdGVyIGZyb20gMjAwMG5zICgwLjUwMDAwME1IeikgfAorfAkJCQkJMTU6IEZpbHRlciBmcm9tIDIxMzNucyAoMC40Njg4MDBNSHopIHwKK3wJCQkJCQkJCQkgICAgIHwKK3wJCQkJMzMgTUh6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQktLS0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkwOiAgU29mdHdhcmUgZmlsdGVyIG5vdCB1c2VkICAgICAgICAgfAorfAkJCQkJMTogIEZpbHRlciBmcm9tIDI0Mm5zICAoNC4xMjUwMDBNSHopIHwKK3wJCQkJCTI6ICBGaWx0ZXIgZnJvbSAzNjNucyAgKDIuNzU0ODIwTUh6KSB8Cit8CQkJCQkzOiAgRmlsdGVyIGZyb20gNDg0bnMgICgyLjA2NjExNU1IeikgfAorfAkJCQkJNDogIEZpbHRlciBmcm9tIDYwNW5zICAoMS42NTI4OTJNSHopIHwKK3wJCQkJCTU6ICBGaWx0ZXIgZnJvbSA3MjZucyAgKDEuMzU3NzQxTUh6KSB8Cit8CQkJCQk2OiAgRmlsdGVyIGZyb20gODQ3bnMgICgxLjE4MDYzN01IeikgfAorfAkJCQkJNzogIEZpbHRlciBmcm9tIDk2OG5zICAoMS4wMzMwNTVNSHopIHwKK3wJCQkJCTg6ICBGaWx0ZXIgZnJvbSAxMDg5bnMgKDAuOTE4MjczTUh6KSB8Cit8CQkJCQk5OiAgRmlsdGVyIGZyb20gMTIxMG5zICgwLjgyNjQ0Nk1IeikgfAorfAkJCQkJMTA6IEZpbHRlciBmcm9tIDEzMzFucyAoMC43NTEzMTRNSHopIHwKK3wJCQkJCTExOiBGaWx0ZXIgZnJvbSAxNDUybnMgKDAuNjg4NzA1TUh6KSB8Cit8CQkJCQkxMjogRmlsdGVyIGZyb20gMTU3M25zICgwLjYzNTcyN01IeikgfAorfAkJCQkJMTM6IEZpbHRlciBmcm9tIDE2OTRucyAoMC41OTAzMThNSHopIHwKK3wJCQkJCTE0OiBGaWx0ZXIgZnJvbSAxODE1bnMgKDAuNTUwOTY0TUh6KSB8Cit8CQkJCQkxNTogRmlsdGVyIGZyb20gMTkzNm5zICgwLjUxNjUyOE1IeikgfAorfAkJCQkJCQkJCSAgICAgfAorfAkJCQk0MCBNSHogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCS0tLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCTA6ICBTb2Z0d2FyZSBmaWx0ZXIgbm90IHVzZWQgICAgICAgICB8Cit8CQkJCQkxOiAgRmlsdGVyIGZyb20gMjAwbnMgICg1LjAwMDAwME1IeikgfAorfAkJCQkJMjogIEZpbHRlciBmcm9tIDMwMG5zICAoMy4zMzMzMzNNSHopIHwKK3wJCQkJCTM6ICBGaWx0ZXIgZnJvbSA0MDBucyAgKDIuNTAwMDAwTUh6KSB8Cit8CQkJCQk0OiAgRmlsdGVyIGZyb20gNTAwbnMgICgyLjAwMDAwME1IeikgfAorfAkJCQkJNTogIEZpbHRlciBmcm9tIDYwMG5zICAoMS42NjY2NjZNSHopIHwKK3wJCQkJCTY6ICBGaWx0ZXIgZnJvbSA3MDBucyAgKDEuNDI4NTAwTUh6KSB8Cit8CQkJCQk3OiAgRmlsdGVyIGZyb20gODAwbnMgICgxLjI1MDAwME1IeikgfAorfAkJCQkJODogIEZpbHRlciBmcm9tIDkwMG5zICAoMS4xMTExMTFNSHopIHwKK3wJCQkJCTk6ICBGaWx0ZXIgZnJvbSAxMDAwbnMgKDEuMDAwMDAwTUh6KSB8Cit8CQkJCQkxMDogRmlsdGVyIGZyb20gMTEwMG5zICgwLjkwOTA5ME1IeikgfAorfAkJCQkJMTE6IEZpbHRlciBmcm9tIDEyMDBucyAoMC44MzMzMzNNSHopIHwKK3wJCQkJCTEyOiBGaWx0ZXIgZnJvbSAxMzAwbnMgKDAuNzY5MjAwTUh6KSB8Cit8CQkJCQkxMzogRmlsdGVyIGZyb20gMTQwMG5zICgwLjcxNDIwME1IeikgfAorfAkJCQkJMTQ6IEZpbHRlciBmcm9tIDE1MDBucyAoMC42NjY2NjZNSHopIHwKK3wJCQkJCTE1OiBGaWx0ZXIgZnJvbSAxNjAwbnMgKDAuNjI1MDAwTUh6KSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgLTQ6IFRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmcgICAgICAgICAgICAgIHwKK3wJCQkJCSAgLTU6IFRoZSBzZWxlY3RlZCBmaWx0ZXIgdmFsdWUgaXMgd3JvbmcgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgLTY6IDQwTUh6IHF1YXJ0eiBub3Qgb24gYm9hcmQgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfU2V0SW5wdXRGaWx0ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBCWVRFIGJfUENJSW5wdXRDbG9jaywgQllURSBiX0ZpbHRlcikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgaW5jcmVtZW50YWwgY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBmaXJtd2FyZSA+PSBSZXYxLjUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCQkweEZGRkYpID49IDB4MzEzNSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIFBDSSBidXMgY2xvY2sgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fAorCQkJCQkoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSB8fAorCQkJCQkoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIGZpbHRlciB2YWx1ZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGJfRmlsdGVyIDwgMTYpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiA0ME1IeiB1c2VkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiA0ME1IeiBxdWFydHogb24gYm9hcmQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJMzYgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBxdWFydHogZmxhZyAoRFEwKSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKChkd19TdGF0dXMgJiAxKSAhPQorCQkJCQkJCQkxKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogNDBNSHogcXVhcnR6IG5vdCBvbiBib2FyZCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJRFBSSU5USygiNDBNSHogcXVhcnR6IG5vdCBvbiBib2FyZFxuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTY7CisJCQkJCQkJfQorCQkJCQkJfQkvLyBpZiAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKQorCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBlcnJvciBub3Qgb2NjdXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChpX1JldHVyblZhbHVlID09IDApIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiA0ME1IeiB1c2VkICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJCQlBUENJMTcxMF80ME1IWikKKwkJCQkJCQl7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIEVuYWJsZSB0aGUgNDBNSHogcXVhcnogKERRMzEpICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJCQliX01vZGVSZWdpc3RlcjQKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQl8CisJCQkJCQkJCQlBUENJMTcxMF9FTkFCTEVfNDBNSFpfRklMVEVSOworCisJCQkJCQkJfQkvLyBpZiAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCWVsc2UgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogRGlzYWJsZSB0aGUgNDBNSHogcXVhcnogKERRMzEpICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNAorCQkJCQkJCQkJJgorCQkJCQkJCQkJQVBDSTE3MTBfRElTQUJMRV80ME1IWl9GSUxURVI7CisKKwkJCQkJCQl9CS8vIGlmIChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopCisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBTZXQgdGhlIGZpbHRlciB2YWx1ZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQliX01vZGVSZWdpc3RlcjMKKwkJCQkJCQkJPQorCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQliX01vZGVSZWdpc3RlcjMKKwkJCQkJCQkJJiAweDFGKSB8CisJCQkJCQkJCSgoYl9GaWx0ZXIgJgorCQkJCQkJCQkJMHg3KSA8PAorCQkJCQkJCQk1KTsKKworCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCT0KKwkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0CisJCQkJCQkJCSYgMHhGRSkgfAorCQkJCQkJCQkoKGJfRmlsdGVyICYKKwkJCQkJCQkJCTB4OCkgPj4KKwkJCQkJCQkJMyk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJb3V0bChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJMjAgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQl9CS8vIGlmIChpX1JldHVyblZhbHVlID09IDApCisJCQkJCX0JLy8gaWYgKGJfRmlsdGVyIDwgMTYpCisJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIGZpbHRlciB2YWx1ZSBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgZmlsdGVyIHZhbHVlIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQkvLyBpZiAoYl9GaWx0ZXIgPCAxNikKKwkJCQl9CS8vIGlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gNDsKKwkJCQl9CS8vIGlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSkKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZVxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0xhdGNoQ291bnRlciAoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyLCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTGF0Y2hSZWcpICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IExhdGNoIHRoZSBjb3VyYW50IHZhbHVlIGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpIGluIHRvIHRoZSBzZWxlY3RlZCBsYXRjaCByZWdpc3RlciAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9MYXRjaFJlZykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9MYXRjaFJlZyAgICA6IFNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IGZvciB0aGUgZmlyc3QgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogZm9yIHRoZSBzZWNvbmQgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgbGF0Y2ggcmVnaXN0ZXIgcGFyYW1ldGVyIGlzIHdyb25nICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0xhdGNoQ291bnRlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9MYXRjaFJlZykKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgbGF0Y2ggcmVnaXN0ZXIgcGFyYW1ldGVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX0xhdGNoUmVnIDwgMikgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUYXRjaCB0aGUgY291bnRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMSA8PCAoYl9MYXRjaFJlZyAqIDQpLAorCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXwlpX0FQQ0kxNzEwX1NldEluZGV4QW5kUmVmZXJlbmNlU291cmNlICAgICAgICB8Cit8CQkJCQkoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgfAorfAkJCQkJIEJZVEVfIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSBCWVRFXyBiX1NvdXJjZVNlbGVjdGlvbikgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBEZXRlcm1pbmUgdGhlIGhhcmR3YXJlIHNvdXJjZSBmb3IgdGhlIGluZGV4IGFuZCB0aGUgICAgfAorfAkJICAgICAgcmVmZXJlbmNlIGxvZ2ljLiBQZXIgZGVmYXVsdCB0aGUgaW5kZXggbG9naWMgaXMgICAgICAgIHwKK3wJCSAgICAgIGNvbm5lY3RlZCB0byB0aGUgZGlmZmVyZW5jZSBpbnB1dCBDIGFuZCB0aGUgcmVmZXJlbmNlICB8Cit8CQkgICAgICBsb2dpYyBpcyBjb25uZWN0ZWQgdG8gdGhlIDI0ViBpbnB1dCBFICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICBCWVRFXyBiX1NvdXJjZVNlbGVjdGlvbiA6IEFQQ0kxNzEwX1NPVVJDRV8wIDogICAgICAgICAgfAorfAkJCQkJCVRoZSBpbmRleCBsb2dpYyBpcyBjb25uZWN0ZWQgfAorfAkJCQkJCXRvIHRoZSBkaWZmZXJlbmNlIGlucHV0IEMgYW5kfAorfAkJCQkJCXRoZSByZWZlcmVuY2UgbG9naWMgaXMgICAgICAgfAorfAkJCQkJCWNvbm5lY3RlZCB0byB0aGUgMjRWIGlucHV0IEUufAorfAkJCQkJCVRoaXMgaXMgdGhlIGRlZmF1bHQgICAgICAgICAgfAorfAkJCQkJCWNvbmZpZ3VyYXRpb24uICAgICAgICAgICAgICAgfAorfAkJCQkJCUFQQ0kxNzEwX1NPVVJDRV8xIDogICAgICAgICAgfAorfAkJCQkJCVRoZSByZWZlcmVuY2UgbG9naWMgaXMgICAgICAgfAorfAkJCQkJCWNvbm5lY3RlZCB0byB0aGUgZGlmZmVyZW5jZSAgfAorfAkJCQkJCWlucHV0IEMgYW5kIHRoZSBpbmRleCBsb2dpYyAgfAorfAkJCQkJCWlzIGNvbm5lY3RlZCB0byB0aGUgMjRWICAgICAgfAorfAkJCQkJCWlucHV0IEUgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wJCSAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZS4gICAgICAgICAgICAgICAgfAorfAkJICAgICAgLTQ6IFRoZSBzb3VyY2Ugc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfU2V0SW5kZXhBbmRSZWZlcmVuY2VTb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBCWVRFIGJfU291cmNlU2VsZWN0aW9uKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgaW5jcmVtZW50YWwgY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBmaXJtd2FyZSA+PSBSZXYxLjUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCQkweEZGRkYpID49IDB4MzEzNSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIHNvdXJjZSBzZWxlY3Rpb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChiX1NvdXJjZVNlbGVjdGlvbiA9PSBBUENJMTcxMF9TT1VSQ0VfMCB8fAorCQkJCQliX1NvdXJjZVNlbGVjdGlvbiA9PSBBUENJMTcxMF9TT1VSQ0VfMSkKKwkJCQl7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGludmVydCB0aGUgaW5kZXggYW5kIHJlZmVyZW5jZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9Tb3VyY2VTZWxlY3Rpb24gPT0KKwkJCQkJCUFQQ0kxNzEwX1NPVVJDRV8xKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBJbnZlcnQgaW5kZXggYW5kIHJlZmVyZW5jZSBzb3VyY2UgKERRMjUpICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQkJYl9Nb2RlUmVnaXN0ZXI0ID0KKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNCB8CisJCQkJCQkJQVBDSTE3MTBfSU5WRVJUX0lOREVYX1JGRVJFTkNFOworCQkJCQl9IGVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBTZXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoRFEyNSkgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJCWJfTW9kZVJlZ2lzdGVyNCA9CisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQliX01vZGVSZWdpc3RlcjQgJgorCQkJCQkJCUFQQ0kxNzEwX0RFRkFVTFRfSU5ERVhfUkZFUkVOQ0U7CisJCQkJCX0KKwkJCQl9CS8vIGlmIChiX1NvdXJjZVNlbGVjdGlvbiA9PSBBUENJMTcxMF9TT1VSQ0VfMCB8fGJfU291cmNlU2VsZWN0aW9uID09IEFQQ0kxNzEwX1NPVVJDRV8xKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNvdXJjZSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiVGhlIHNvdXJjZSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJfQkvLyBpZiAoYl9Tb3VyY2VTZWxlY3Rpb24gPT0gQVBDSTE3MTBfU09VUkNFXzAgfHxiX1NvdXJjZVNlbGVjdGlvbiA9PSBBUENJMTcxMF9TT1VSQ0VfMSkKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBjb3VudGVyIG1vZHVsZVxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgY291bnRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfCWlfQVBDSTE3MTBfU2V0RGlnaXRhbENobE9uICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJICAgKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkgICAgQllURV8gIGJfTW9kdWxOYnIpICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXRzIHRoZSBkaWdpdGFsIG91dHB1dCBIIFNldHRpbmcgYW4gb3V0cHV0IG1lYW5zICAgICAgfAorfAkJICAgICAgc2V0dGluZyBhbiBvdXB1dCBoaWdoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8CQkgICAgICBCWVRFXyAgYl9Nb2R1bE5icgkgICAgICA6CU51bWJlciBvZiB0aGUgbW9kdWxlIHRvIGJlICAgfAorfAkJCQkJCWNvbmZpZ3VyZWQgKDAgdG8gMykgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8CQkJICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1NldERpZ2l0YWxDaGxPbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgQllURSBiX01vZHVsTmJyKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJCQlkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCWJfTW9kZVJlZ2lzdGVyMyA9IGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuYl9Nb2RlUmVnaXN0ZXIzIHwgMHgxMDsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZXQgdGhlIG91dHB1dCBPbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCWR3X01vZGVSZWdpc3RlcjFfMl8zXzQsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMjAgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfCWlfQVBDSTE3MTBfU2V0RGlnaXRhbENobE9mZiAgICAgICAgICAgICAgICAgIHwKK3wJCQkJICAgKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkgICAgQllURV8gIGJfTW9kdWxOYnIpICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXNldHMgdGhlIGRpZ2l0YWwgb3V0cHV0IEguIFJlc2V0dGluZyBhbiBvdXRwdXQgbWVhbnMgfAorfAkJICAgICAgc2V0dGluZyBhbiBvdXB1dCBsb3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8CQkgICAgICBCWVRFXyAgYl9Nb2R1bE5icgkgICAgICA6CU51bWJlciBvZiB0aGUgbW9kdWxlIHRvIGJlICAgfAorfAkJCQkJCWNvbmZpZ3VyZWQgKDAgdG8gMykgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8CQkJICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1NldERpZ2l0YWxDaGxPZmYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIEJZVEUgYl9Nb2R1bE5icikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCQkJZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQliX01vZGVSZWdpc3RlcjMgPSBkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLmJfTW9kZVJlZ2lzdGVyMyAmIDB4RUY7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNldCB0aGUgb3V0cHV0IE9mZiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDIwICsgKDY0ICogYl9Nb2R1bE5icikpOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisKKwkJCQkJCQkvLyBJTlNOIFdSSVRFCisvKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDpJTlQJaV9BUENJMTcxMF9JbnNuV3JpdGVJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKK3N0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSBEaXNhYmxlIGZ1bmN0aW9ucyBmb3IgSU5DX0NQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUlOQ0NQVChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9Xcml0ZVR5cGU7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJdWlfV3JpdGVUeXBlID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKworCXN3aXRjaCAodWlfV3JpdGVUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9JTkNDUFRfRU5BQkxFTEFUQ0hJTlRFUlJVUFQ6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0VuYWJsZUxhdGNoSW50ZXJydXB0KGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfRElTQUJMRUxBVENISU5URVJSVVBUOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9EaXNhYmxlTGF0Y2hJbnRlcnJ1cHQoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9XUklURTE2QklUQ09VTlRFUlZBTFVFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9Xcml0ZTE2Qml0Q291bnRlclZhbHVlKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBkYXRhWzBdLCAoVUlOVCkgZGF0YVsxXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfV1JJVEUzMkJJVENPVU5URVJWQUxVRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfV3JpdGUzMkJpdENvdW50ZXJWYWx1ZShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChVTE9ORykgZGF0YVswXSk7CisKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9FTkFCTEVJTkRFWDoKKwkJaV9BUENJMTcxMF9FbmFibGVJbmRleChkZXYsIChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfRElTQUJMRUlOREVYOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9EaXNhYmxlSW5kZXgoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9FTkFCTEVDT01QQVJFTE9HSUM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0VuYWJsZUNvbXBhcmVMb2dpYyhkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykpOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0RJU0FCTEVDT01QQVJFTE9HSUM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0Rpc2FibGVDb21wYXJlTG9naWMoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9FTkFCTEVGUkVRVUVOQ1lNRUFTVVJFTUVOVDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfRW5hYmxlRnJlcXVlbmN5TWVhc3VyZW1lbnQoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLCAoQllURSkgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfRElTQUJMRUZSRVFVRU5DWU1FQVNVUkVNRU5UOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9EaXNhYmxlRnJlcXVlbmN5TWVhc3VyZW1lbnQoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoIldyaXRlIENvbmZpZyBQYXJhbWV0ZXIgV3JvbmdcbiIpOworCX0KKworCWlmIChpX1JldHVyblZhbHVlID49IDApCisJCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0VuYWJsZUxhdGNoSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSB0aGUgbGF0Y2ggaW50ZXJydXB0IGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiBFYWNoIHNvZnR3YXJlIG9yIGhhcmR3YXJlIGxhdGNoIG9jY3VyIGEgIHwKK3wgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBJbnRlcnJ1cHQgcm91dGluZSBub3QgaW5zdGFsbGVkIHNlZSBmdW5jdGlvbiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX1NldEJvYXJkSW50Um91dGluZSIgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfRW5hYmxlTGF0Y2hJbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIEJZVEUgYl9Nb2R1bE5icikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqLworCQkJLyogRW5hYmxlIGludGVycnVwdCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCWJfTW9kZVJlZ2lzdGVyMiA9IGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJYl9Nb2RlUmVnaXN0ZXIyIHwgQVBDSTE3MTBfRU5BQkxFX0xBVENIX0lOVDsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFdyaXRlIHRoZSBjb25maWd1cmF0aW9uICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDIwICsgKDY0ICogYl9Nb2R1bE5icikpOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0Rpc2FibGVMYXRjaEludGVycnVwdCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IERpc2FibGUgdGhlIGxhdGNoIGludGVycnVwdCBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogSW50ZXJydXB0IHJvdXRpbmUgbm90IGluc3RhbGxlZCBzZWUgZnVuY3Rpb24gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmUiICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVMYXRjaEludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgQllURSBiX01vZHVsTmJyKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCAmCisJCQkJKChBUENJMTcxMF9ESVNBQkxFX0xBVENIX0lOVCA8PCA4KSB8IDB4RkYpLAorCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjAgKworCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJbWRlbGF5KDEwMDApOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJYl9Nb2RlUmVnaXN0ZXIyID0gZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQliX01vZGVSZWdpc3RlcjIgJiBBUENJMTcxMF9ESVNBQkxFX0xBVENIX0lOVDsKKworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1dyaXRlMTZCaXRDb3VudGVyVmFsdWUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICBiX0JvYXJkSGFuZGxlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIsICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9TZWxlY3RlZENvdW50ZXIsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlRfIHVpX1dyaXRlVmFsdWUpICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZSBhIDE2LUJpdCB2YWx1ZSAodWlfV3JpdGVWYWx1ZSkgaW4gdG8gdGhlIHNlbGVjdGVkfAorfCAgICAgICAgICAgICAgICAgICAgIDE2LUJpdCBjb3VudGVyIChiX1NlbGVjdGVkQ291bnRlcikgZnJvbSBzZWxlY3RlZCBtb2R1bGV8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfU2VsZWN0ZWRDb3VudGVyIDogU2VsZWN0ZWQgMTYtQml0IGNvdW50ZXIgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCBvciAxKSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UXyB1aV9Xcml0ZVZhbHVlICAgICA6IDE2LUJpdCB3cml0ZSB2YWx1ZSAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIDE2LUJpdCBjb3VudGVyIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9Xcml0ZTE2Qml0Q291bnRlclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1NlbGVjdGVkQ291bnRlciwgVUlOVCB1aV9Xcml0ZVZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGNvdW50ZXIgc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfU2VsZWN0ZWRDb3VudGVyIDwgMikgeworCQkgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGUgdGhlIHZhbHVlICovCisJCSAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoKFVMT05HKSAoKFVMT05HKSAodWlfV3JpdGVWYWx1ZSkgPDwgKDE2ICoKKwkJCQkJCQliX1NlbGVjdGVkQ291bnRlcikpLAorCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDggKworCQkJCQkoYl9TZWxlY3RlZENvdW50ZXIgKiA0KSArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIDE2LUJpdCBjb3VudGVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIDE2LUJpdCBjb3VudGVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1dyaXRlMzJCaXRDb3VudGVyVmFsdWUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gdWxfV3JpdGVWYWx1ZSkgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogV3JpdGUgYSAzMi1CaXQgdmFsdWUgKHVpX1dyaXRlVmFsdWUpIGluIHRvIHRoZSBzZWxlY3RlZHwKK3wgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUxPTkdfIHVsX1dyaXRlVmFsdWUgICAgOiAzMi1CaXQgd3JpdGUgdmFsdWUgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1dyaXRlMzJCaXRDb3VudGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBVTE9ORyB1bF9Xcml0ZVZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkvKiBXcml0ZSB0aGUgdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0bCh1bF9Xcml0ZVZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDQgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRW5hYmxlSW5kZXggKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIpICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSB0aGUgSU5ERVggYWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IEluZGV4IG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdEluZGV4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9FbmFibGVJbmRleChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgQllURSBiX01vZHVsTmJyKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlVTE9ORyB1bF9JbnRlcnJ1cHRMYXRjaFJlZzsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbmRleCBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfSW5kZXhJbml0KSB7CisJCQkJZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMiA9IGRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjIgfCBBUENJMTcxMF9FTkFCTEVfSU5ERVg7CisKKwkJCQl1bF9JbnRlcnJ1cHRMYXRjaFJlZyA9CisJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArCisJCQkJCTI0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJb3V0bChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNCwKKwkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAyMCArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBJbmRleCBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRJbmRleCIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiSW5kZXggbm90IGluaXRpYWxpc2VkIFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0Rpc2FibGVJbmRleCAoQllURV8gIGJfQm9hcmRIYW5kbGUsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5icikgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBEaXNhYmxlIHRoZSBJTkRFWCBhY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBJbmRleCBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRJbmRleCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfRGlzYWJsZUluZGV4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBCWVRFIGJfTW9kdWxOYnIpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGluZGV4IGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9JbmRleEluaXQpIHsKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIyID0gZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMiAmCisJCQkJCUFQQ0kxNzEwX0RJU0FCTEVfSU5ERVg7CisKKwkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDIwICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEluZGV4IG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdEluZGV4IiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJJbmRleCBub3QgaW5pdGlhbGlzZWQgIFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0VuYWJsZUNvbXBhcmVMb2dpYyAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIpICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSB0aGUgMzItQml0IGNvbXBhcmUgbG9naWMuIEF0IHRoYXQgbW9tZW50IHRoYXQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIGluY3JlbWVudGFsIGNvdW50ZXIgYXJyaXZlIHRvIHRoZSBjb21wYXJlIHZhbHVlIGEgIHwKK3wgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gIGJfQm9hcmRIYW5kbGUgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5iciAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IENvbXBhcmUgbG9naWMgbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRDb21wYXJlTG9naWMiICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBJbnRlcnJ1cHQgZnVuY3Rpb24gbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfRW5hYmxlQ29tcGFyZUxvZ2ljKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBCWVRFIGJfTW9kdWxOYnIpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgY29tcGFyZSBsb2dpYyBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCXNfSW5pdEZsYWcuYl9Db21wYXJlTG9naWNJbml0ID09IDEpIHsKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIzID0gZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMyB8CisJCQkJCUFQQ0kxNzEwX0VOQUJMRV9DT01QQVJFX0lOVDsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCWR3X01vZGVSZWdpc3RlcjFfMl8zXzQsCisJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjAgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDb21wYXJlIGxvZ2ljIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIkNvbXBhcmUgbG9naWMgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRGlzYWJsZUNvbXBhcmVMb2dpYyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5icikgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRGlzYWJsZSB0aGUgMzItQml0IGNvbXBhcmUgbG9naWMuCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyAgYl9Cb2FyZEhhbmRsZSAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0KKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogQ29tcGFyZSBsb2dpYyBub3QgaW5pdGlhbGlzZWQuICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdENvbXBhcmVMb2dpYyIgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVDb21wYXJlTG9naWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIEJZVEUgYl9Nb2R1bE5icikKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBjb21wYXJlIGxvZ2ljIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Jbml0RmxhZy5iX0NvbXBhcmVMb2dpY0luaXQgPT0gMSkgeworCQkJCWRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjMgPSBkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIzICYKKwkJCQkJQVBDSTE3MTBfRElTQUJMRV9DT01QQVJFX0lOVDsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCWR3X01vZGVSZWdpc3RlcjFfMl8zXzQsCisJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjAgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDb21wYXJlIGxvZ2ljIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIkNvbXBhcmUgbG9naWMgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworCS8qCisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRW5hYmxlRnJlcXVlbmN5TWVhc3VyZW1lbnQgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0ludGVycnVwdEVuYWJsZSkgICAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZXMgdGhlIGZyZXF1ZW5jeSBtZWFzdXJlbWVudCBmdW5jdGlvbiAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyICAgICAgIDogTnVtYmVyIG9mIHRoZSBtb2R1bGUgdG8gYmUgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCAoMCB0byAzKSAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgIEJZVEVfICBiX0ludGVycnVwdEVuYWJsZTogRW5hYmxlIG9yIGRpc2FibGUgdGhlICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LiAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRU5BQkxFOiAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSBpbnRlcnJ1cHQgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE3MTBfRElTQUJMRTogICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSB0aGUgaW50ZXJydXB0ICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC00OiBGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkLiAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50IiB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC01OiBJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC02OiBJbnRlcnJ1cHQgZnVuY3Rpb24gbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICovCisKK0lOVCBpX0FQQ0kxNzEwX0VuYWJsZUZyZXF1ZW5jeU1lYXN1cmVtZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgQllURSBiX0ludGVycnVwdEVuYWJsZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgZnJlcXVlbmN5IG1lc3VyZW1lbnQgaW5pdGlhbGlzZWQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Jbml0RmxhZy5iX0ZyZXF1ZW5jeU1lYXN1cmVtZW50SW5pdCA9PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGludGVycnVwdCBtb2RlICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChiX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9ESVNBQkxFKSB8fAorCQkJCQkoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKSkKKwkJCQl7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEVuYWJsZSB0aGUgZnJlcXVlbmN5IG1lYXN1cmVtZW50ICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyMyA9IGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCWJfTW9kZVJlZ2lzdGVyMyB8CisJCQkJCQlBUENJMTcxMF9FTkFCTEVfRlJFUVVFTkNZOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBEaXNhYmxlIG9yIGVuYWJsZSB0aGUgZnJlcXVlbmN5IGludGVycnVwdCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjMgPSAoZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQkJYl9Nb2RlUmVnaXN0ZXIzICYKKwkJCQkJCUFQQ0kxNzEwX0RJU0FCTEVfRlJFUVVFTkNZX0lOVCkKKwkJCQkJCXwgKGJfSW50ZXJydXB0RW5hYmxlIDw8IDMpOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDIwICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Jbml0RmxhZy4KKwkJCQkJCWJfRnJlcXVlbmN5TWVhc3VyZW1lbnRFbmFibGUgPQorCQkJCQkJMTsKKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEZyZXF1ZW5jeSBtZWFzdXJlbWVudCBsb2dpYyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIkZyZXF1ZW5jeSBtZWFzdXJlbWVudCBsb2dpYyBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisJLyoKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9EaXNhYmxlRnJlcXVlbmN5TWVhc3VyZW1lbnQgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIpICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFRhc2sgICAgICAgICAgICAgIDogRGlzYWJsZXMgdGhlIGZyZXF1ZW5jeSBtZWFzdXJlbWVudCBmdW5jdGlvbiAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyICAgICAgIDogTnVtYmVyIG9mIHRoZSBtb2R1bGUgdG8gYmUgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCAoMCB0byAzKSAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICAgfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBpcyB3cm9uZyAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgIC00OiBGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkLiAgICAgICB8CisJICAgfCAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50IiB8CisJICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICovCisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVGcmVxdWVuY3lNZWFzdXJlbWVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgQllURSBiX01vZHVsTmJyKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBmcmVxdWVuY3kgbWVzdXJlbWVudCBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX0luaXRGbGFnLmJfRnJlcXVlbmN5TWVhc3VyZW1lbnRJbml0ID09IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIERpc2FibGUgdGhlIGZyZXF1ZW5jeSBtZWFzdXJlbWVudCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIzID0gZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMyAmCisJCQkJCUFQQ0kxNzEwX0RJU0FCTEVfRlJFUVVFTkNZCisJCQkJCS8vIEJlZ2luIENHIDI5LzA2LzAxIENHIDExMDAvMDIzMSAtPiAwNzAxLzAyMzIgRnJlcXVlbmNlIG1lYXN1cmUgSVJRIG11c3QgYmUgY2xlYXJlZAorCQkJCQkmIEFQQ0kxNzEwX0RJU0FCTEVfRlJFUVVFTkNZX0lOVDsKKwkJCQkvLyBFbmQgQ0cgMjkvMDYvMDEgQ0cgMTEwMC8wMjMxIC0+IDA3MDEvMDIzMiBGcmVxdWVuY2UgbWVhc3VyZSBJUlEgbXVzdCBiZSBjbGVhcmVkCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDIwICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBEaXNhYmxlIHRoZSBmcmVxdWVuY3kgbWVhc3VyZW1lbnQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfSW5pdEZsYWcuCisJCQkJCWJfRnJlcXVlbmN5TWVhc3VyZW1lbnRFbmFibGUgPSAwOworCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKworCQkJCQkJCS8vIElOU04gUkVBRAorCisvKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDpJTlQJaV9BUENJMTcxMF9JbnNuV3JpdGVJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKK3N0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgYW5kIEdldCBmdW5jdGlvbnMgZm9yIElOQ19DUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZElOQ0NQVChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9SZWFkVHlwZTsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisKKwl1aV9SZWFkVHlwZSA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKwlzd2l0Y2ggKHVpX1JlYWRUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9JTkNDUFRfUkVBRExBVENIUkVHSVNURVJTVEFUVVM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1JlYWRMYXRjaFJlZ2lzdGVyU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyksIChQQllURSkgJiBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9SRUFETEFUQ0hSRUdJU1RFUlZBTFVFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9SZWFkTGF0Y2hSZWdpc3RlclZhbHVlKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyksIChQVUxPTkcpICYgZGF0YVswXSk7CisJCXByaW50aygiTGF0Y2ggUmVnaXN0ZXIgVmFsdWUgJWRcbiIsIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX1JFQUQxNkJJVENPVU5URVJWQUxVRToKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfUmVhZDE2Qml0Q291bnRlclZhbHVlKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyksIChQVUlOVCkgJiBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9SRUFEMzJCSVRDT1VOVEVSVkFMVUU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX1JlYWQzMkJpdENvdW50ZXJWYWx1ZShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChQVUxPTkcpICYgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfR0VUSU5ERVhTVEFUVVM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0dldEluZGV4U3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKFBCWVRFKSAmIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0dFVFJFRkVSRU5DRVNUQVRVUzoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfR2V0UmVmZXJlbmNlU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKFBCWVRFKSAmIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0dFVFVBU1NUQVRVUzoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfR2V0VUFTU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKFBCWVRFKSAmIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfSU5DQ1BUX0dFVENCU1RBVFVTOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9HZXRDQlN0YXR1cyhkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksIChQQllURSkgJiBkYXRhWzBdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9HRVQxNkJJVENCU1RBVFVTOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9HZXQxNkJpdENCU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShQQllURSkgJiBkYXRhWzBdLCAoUEJZVEUpICYgZGF0YVsxXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfR0VUVURTVEFUVVM6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0dldFVEU3RhdHVzKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKFBCWVRFKSAmIGRhdGFbMF0pOworCisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfR0VUSU5URVJSVVBUVURMQVRDSEVEU1RBVFVTOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9HZXRJbnRlcnJ1cHRVRExhdGNoZWRTdGF0dXMoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLCAoUEJZVEUpICYgZGF0YVswXSk7CisJCWJyZWFrOworCisJY2FzZSBBUENJMTcxMF9JTkNDUFRfUkVBREZSRVFVRU5DWU1FQVNVUkVNRU5UOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9SZWFkRnJlcXVlbmN5TWVhc3VyZW1lbnQoZGV2LAorCQkJKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpLAorCQkJKFBCWVRFKSAmIGRhdGFbMF0sCisJCQkoUEJZVEUpICYgZGF0YVsxXSwgKFBVTE9ORykgJiBkYXRhWzJdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX0lOQ0NQVF9SRUFESU5URVJSVVBUOgorCQlkYXRhWzBdID0gZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS5iX09sZE1vZHVsZU1hc2s7CisJCWRhdGFbMV0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZEludGVycnVwdE1hc2s7CisJCWRhdGFbMl0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZENvdW50ZXJMYXRjaFZhbHVlOworCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogSW5jcmVtZW50IHRoZSByZWFkIEZJRk8gKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXVpX1JlYWQgPSAoZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJdWlfUmVhZCArIDEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoIlJlYWRUeXBlIFBhcmFtZXRlciB3cm9uZ1xuIik7CisJfQorCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkKKwkJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKKworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9SZWFkTGF0Y2hSZWdpc3RlclN0YXR1cyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9MYXRjaFJlZywgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfIHBiX0xhdGNoU3RhdHVzKSAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgbGF0Y2ggcmVnaXN0ZXIgc3RhdHVzIGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikgYW5kIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIChiX0xhdGNoUmVnKS4gfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9MYXRjaFJlZyAgICA6IFNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IGZvciB0aGUgZmlyc3QgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogZm9yIHRoZSBzZWNvbmQgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfTGF0Y2hTdGF0dXMgOiAgIExhdGNoIHJlZ2lzdGVyIHN0YXR1cy4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IE5vIGxhdGNoIG9jY3VyICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQSBzb2Z0d2FyZSBsYXRjaCBvY2N1ciAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBBIGhhcmR3YXJlIGxhdGNoIG9jY3VyICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA6IEEgc29mdHdhcmUgYW5kIGhhcmR3YXJlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0Y2ggb2NjdXIgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9SZWFkTGF0Y2hSZWdpc3RlclN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9MYXRjaFJlZywgUEJZVEUgcGJfTGF0Y2hTdGF0dXMpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X0xhdGNoUmVnOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9MYXRjaFJlZyA8IDIpIHsKKwkJCQlkd19MYXRjaFJlZyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkqcGJfTGF0Y2hTdGF0dXMgPQorCQkJCQkoQllURSkgKChkd19MYXRjaFJlZyA+PiAoYl9MYXRjaFJlZyAqCisJCQkJCQkJNCkpICYgMHgzKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1JlYWRMYXRjaFJlZ2lzdGVyVmFsdWUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSx8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTGF0Y2hSZWcsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9MYXRjaFZhbHVlKSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBsYXRjaCByZWdpc3RlciB2YWx1ZSBmcm9tIHNlbGVjdGVkIG1vZHVsZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKSBhbmQgc2VsZWN0ZWQgbGF0Y2ggcmVnaXN0ZXIgKGJfTGF0Y2hSZWcpLiB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0xhdGNoUmVnICAgIDogU2VsZWN0ZWQgbGF0Y2ggcmVnaXN0ZXIgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogZm9yIHRoZSBmaXJzdCBsYXRjaCByZWdpc3RlciAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBmb3IgdGhlIHNlY29uZCBsYXRjaCByZWdpc3RlciAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gcHVsX0xhdGNoVmFsdWUgOiBMYXRjaCByZWdpc3RlciB2YWx1ZSAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCBsYXRjaCByZWdpc3RlciBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfUmVhZExhdGNoUmVnaXN0ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9MYXRjaFJlZywgUFVMT05HIHB1bF9MYXRjaFZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBsYXRjaCByZWdpc3RlciBwYXJhbWV0ZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfTGF0Y2hSZWcgPCAyKSB7CisJCQkJKnB1bF9MYXRjaFZhbHVlID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArICgoYl9MYXRjaFJlZyArIDEpICogNCkgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGxhdGNoIHJlZ2lzdGVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1JlYWQxNkJpdENvdW50ZXJWYWx1ZSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfU2VsZWN0ZWRDb3VudGVyLCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUlOVF8gICBwdWlfQ291bnRlclZhbHVlKSAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBMYXRjaCB0aGUgc2VsZWN0ZWQgMTYtQml0IGNvdW50ZXIgKGJfU2VsZWN0ZWRDb3VudGVyKSAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZyb20gc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKSBpbiB0byB0aGUgZmlyc3QgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbGF0Y2ggcmVnaXN0ZXIgYW5kIHJldHVybiB0aGUgbGF0Y2hlZCB2YWx1ZS4gICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfU2VsZWN0ZWRDb3VudGVyIDogU2VsZWN0ZWQgMTYtQml0IGNvdW50ZXIgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCBvciAxKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVSU5UXyBwdWlfQ291bnRlclZhbHVlIDogMTYtQml0IGNvdW50ZXIgdmFsdWUgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCAxNi1CaXQgY291bnRlciBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfUmVhZDE2Qml0Q291bnRlclZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1NlbGVjdGVkQ291bnRlciwgUFVJTlQgcHVpX0NvdW50ZXJWYWx1ZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfTGF0aGNoVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgY291bnRlciBzZWxlY3Rpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9TZWxlY3RlZENvdW50ZXIgPCAyKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIExhdGNoIHRoZSBjb3VudGVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0bCgxLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCB0aGUgbGF0Y2ggdmFsdWUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkd19MYXRoY2hWYWx1ZSA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyA0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJKnB1aV9Db3VudGVyVmFsdWUgPQorCQkJCQkoVUlOVCkgKChkd19MYXRoY2hWYWx1ZSA+PiAoMTYgKgorCQkJCQkJCWJfU2VsZWN0ZWRDb3VudGVyKSkgJgorCQkJCQkweEZGRkZVKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIDE2LUJpdCBjb3VudGVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIDE2LUJpdCBjb3VudGVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1JlYWQzMkJpdENvdW50ZXJWYWx1ZSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfQ291bnRlclZhbHVlKSAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogTGF0Y2ggdGhlIDMyLUJpdCBjb3VudGVyIGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikgaW4gdG8gdGhlIGZpcnN0IGxhdGNoIHJlZ2lzdGVyIGFuZCByZXR1cm4gfAorfCAgICAgICAgICAgICAgICAgICAgIHRoZSBsYXRjaGVkIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gIHB1bF9Db3VudGVyVmFsdWUgOiAzMi1CaXQgY291bnRlciB2YWx1ZSAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX1JlYWQzMkJpdENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIFBVTE9ORyBwdWxfQ291bnRlclZhbHVlKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRhdGNoIHRoZSBjb3VudGVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0bCgxLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBSZWFkIHRoZSBsYXRjaCB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCSpwdWxfQ291bnRlclZhbHVlID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgNCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9HZXRJbmRleFN0YXR1cyAoQllURV8gICBiX0JvYXJkSGFuZGxlLHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9JbmRleFN0YXR1cyl8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIGluZGV4IHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfSW5kZXhTdGF0dXMgICA6IDAgOiBObyBJTkRFWCBvY2N1ciAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEEgSU5ERVggb2NjdXIgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IEluZGV4IG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdEluZGV4IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRJbmRleFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX0luZGV4U3RhdHVzKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWcgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIGluZGV4IGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+CisJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9JbmRleEluaXQpIHsKKwkJCQlkd19TdGF0dXNSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTIgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkqcGJfSW5kZXhTdGF0dXMgPSAoQllURSkgKGR3X1N0YXR1c1JlZyAmIDEpOworCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEluZGV4IG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdEluZGV4IiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJJbmRleCBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9HZXRSZWZlcmVuY2VTdGF0dXMgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9SZWZlcmVuY2VTdGF0dXMpIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgcmVmZXJlbmNlIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyBwYl9SZWZlcmVuY2VTdGF0dXMgICA6IDAgOiBObyBSRUZFUkVOQ0Ugb2NjdXIgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEEgUkVGRVJFTkNFIG9jY3VyICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogUmVmZXJlbmNlIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0UmVmZXJlbmNlIiAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0dldFJlZmVyZW5jZVN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX1JlZmVyZW5jZVN0YXR1cykKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgcmVmZXJlbmNlIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX0luaXRGbGFnLmJfUmVmZXJlbmNlSW5pdCkgeworCQkJCWR3X1N0YXR1c1JlZyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAyNCArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCSpwYl9SZWZlcmVuY2VTdGF0dXMgPQorCQkJCQkoQllURSkgKH5kd19TdGF0dXNSZWcgJiAxKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlZmVyZW5jZSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRSZWZlcmVuY2UiICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiUmVmZXJlbmNlIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldFVBU1N0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9VQVNTdGF0dXMpICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBlcnJvciBzaWduYWwgKFVBUykgc3RhdHVzICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX1VBU1N0YXR1cyAgICAgIDogMCA6IFVBUyBpcyBsb3cgIjAiICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogVUFTIGlzIGhpZ2ggIjEiICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRVQVNTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9VQVNTdGF0dXMpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGV2cHJpdi0+CisJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQlzX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkgeworCQkJZHdfU3RhdHVzUmVnID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMjQgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSpwYl9VQVNTdGF0dXMgPSAoQllURSkgKChkd19TdGF0dXNSZWcgPj4gMSkgJiAxKTsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldENCU3RhdHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9DQlN0YXR1cykgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBjb3VudGVyIG92ZXJmbG93IHN0YXR1cyAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX0NCU3RhdHVzICAgICAgOiAwIDogQ291bnRlciBubyBvdmVyZmxvdyAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBDb3VudGVyIG92ZXJmbG93ICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRDQlN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX0NCU3RhdHVzKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWcgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkJCWR3X1N0YXR1c1JlZyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDE2ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkqcGJfQ0JTdGF0dXMgPSAoQllURSkgKGR3X1N0YXR1c1JlZyAmIDEpOworCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfR2V0MTZCaXRDQlN0YXR1cyAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfAkJCQkJIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wJCQkJCSBQQllURV8gcGJfQ0JTdGF0dXNDb3VudGVyMCwgICAgICAgICB8Cit8CQkJCQkgUEJZVEVfIHBiX0NCU3RhdHVzQ291bnRlcjEpICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJucyB0aGUgY291bnRlciBvdmVyZmxvdyAoY291bnRlciBpbml0aWFsaXNlZCB0byAgIHwKK3wJCSAgICAgIDIqMTYtYml0KSBzdGF0dXMgZnJvbSBzZWxlY3RlZCBpbmNyZW1lbnRhbCBjb3VudGVyICAgICB8Cit8CQkgICAgICBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfQ0JTdGF0dXNDb3VudGVyMCA6IDAgOiBObyBvdmVyZmxvdyBvY2N1ciBmb3IgfAorfAkJCQkJCSAgICAgICB0aGUgZmlyc3QgMTYtYml0ICAgICAgfAorfAkJCQkJCSAgICAgICBjb3VudGVyICAgICAgICAgICAgICAgfAorfAkJCQkJCSAgIDEgOiBPdmVyZmxvdyBvY2N1ciBmb3IgdGhlfAorfAkJCQkJCSAgICAgICBmaXJzdCAxNi1iaXQgY291bnRlciAgfAorfAkJICAgICAgUEJZVEVfIHBiX0NCU3RhdHVzQ291bnRlcjEgOiAwIDogTm8gb3ZlcmZsb3cgb2NjdXIgZm9yIHwKK3wJCQkJCQkgICAgICAgdGhlIHNlY29uZCAxNi1iaXQgICAgIHwKK3wJCQkJCQkgICAgICAgY291bnRlciAgICAgICAgICAgICAgIHwKK3wJCQkJCQkgICAxIDogT3ZlcmZsb3cgb2NjdXIgZm9yIHRoZXwKK3wJCQkJCQkgICAgICAgc2Vjb25kIDE2LWJpdCBjb3VudGVyIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTm8gY291bnRlciBtb2R1bGUgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgdG8gMioxNi1iaXQgbW9kZS4gICAgICAgICAgfAorfAkJCSAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBGaXJtd2FyZSByZXZpc2lvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0dldDE2Qml0Q0JTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9DQlN0YXR1c0NvdW50ZXIwLCBQQllURSBwYl9DQlN0YXR1c0NvdW50ZXIxKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWcgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgMioxNi1CaXQgbW9kZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCWJfTW9kZVJlZ2lzdGVyMSAmIDB4MTApID09IDB4MTApIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBGaXJtd2FyZSB2ZXJzaW9uICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uCisJCQkJCQlbYl9Nb2R1bE5icl0gJiAweEZGRkYpID49CisJCQkJCTB4MzEzNikgeworCQkJCQlkd19TdGF0dXNSZWcgPQorCQkJCQkJaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAxNiArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJKnBiX0NCU3RhdHVzQ291bnRlcjEgPQorCQkJCQkJKEJZVEUpICgoZHdfU3RhdHVzUmVnID4+IDApICYKKwkJCQkJCTEpOworCQkJCQkqcGJfQ0JTdGF0dXNDb3VudGVyMCA9CisJCQkJCQkoQllURSkgKChkd19TdGF0dXNSZWcgPj4gMSkgJgorCQkJCQkJMSk7CisJCQkJfQkvLyBpZiAoKHBzX0FQQ0kxNzEwVmFyaWFibGUtPnNfQm9hcmQgW2JfQm9hcmRIYW5kbGVdLnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvbiBbYl9Nb2R1bE5icl0gJiAweEZGRkYpID49IDB4MzEzNikKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBGaXJtd2FyZSByZXZpc2lvbiBlcnJvciAgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CS8vIGlmICgocHNfQVBDSTE3MTBWYXJpYWJsZS0+c19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uc19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uIFtiX01vZHVsTmJyXSAmIDB4RkZGRikgPj0gMHgzMTM2KQorCQkJfQkvLyBpZiAoKHBzX0FQQ0kxNzEwVmFyaWFibGUtPnNfQm9hcmQgW2JfQm9hcmRIYW5kbGVdLnNfTW9kdWxlSW5mbyBbYl9Nb2R1bE5icl0uc19TaWVtZW5zQ291bnRlckluZm8uc19Nb2RlUmVnaXN0ZXIuc19CeXRlTW9kZVJlZ2lzdGVyLmJfTW9kZVJlZ2lzdGVyMSAmIDB4MTApID09IDB4MTApCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCB0byAyKjE2LWJpdCBtb2RlICovCisJCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKChwc19BUENJMTcxMFZhcmlhYmxlLT5zX0JvYXJkIFtiX0JvYXJkSGFuZGxlXS5zX01vZHVsZUluZm8gW2JfTW9kdWxOYnJdLnNfU2llbWVuc0NvdW50ZXJJbmZvLnNfTW9kZVJlZ2lzdGVyLnNfQnl0ZU1vZGVSZWdpc3Rlci5iX01vZGVSZWdpc3RlcjEgJiAweDEwKSA9PSAweDEwKQorCQl9CQkvLyBpZiAocHNfQVBDSTE3MTBWYXJpYWJsZS0+c19Cb2FyZCBbYl9Cb2FyZEhhbmRsZV0uc19Nb2R1bGVJbmZvIFtiX01vZHVsTmJyXS5zX1NpZW1lbnNDb3VudGVySW5mby5zX0luaXRGbGFnLmJfQ291bnRlckluaXQgPT0gMSkKKwkJZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0JCS8vIGlmIChwc19BUENJMTcxMFZhcmlhYmxlLT5zX0JvYXJkIFtiX0JvYXJkSGFuZGxlXS5zX01vZHVsZUluZm8gW2JfTW9kdWxOYnJdLnNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKQorCX0JCQkvLyBpZiAoYl9Nb2R1bE5iciA8IDQpCisJZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CQkJLy8gaWYgKGJfTW9kdWxOYnIgPCA0KQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfR2V0VURTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfIHBiX1VEU3RhdHVzKSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIGNvdW50ZXIgcHJvZ3Jlc3Mgc3RhdHVzICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfVURTdGF0dXMgICAgICA6IDAgOiBDb3VudGVyIHByb2dyZXNzIGluIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIG1vZGUgZG93biAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ291bnRlciBwcm9ncmVzcyBpbiB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBtb2RlIHVwICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBObyBjb3VudGVyIG1vZHVsZSBmb3VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRVRFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX1VEU3RhdHVzKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXNSZWcgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPgorCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJc19TaWVtZW5zQ291bnRlckluZm8uc19Jbml0RmxhZy5iX0NvdW50ZXJJbml0ID09IDEpIHsKKwkJCWR3X1N0YXR1c1JlZyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDI0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkqcGJfVURTdGF0dXMgPSAoQllURSkgKChkd19TdGF0dXNSZWcgPj4gMikgJiAxKTsKKworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICovCisJCQkvKiAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiQ291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiVGhlIHNlbGVjdGVkIG1vZHVsZSBudW1iZXIgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldEludGVycnVwdFVETGF0Y2hlZFN0YXR1cyAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9VRFN0YXR1cykgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBjb3VudGVyIHByb2dyZXNzIGxhdGNoZWQgc3RhdHVzIGFmdGVyIGEgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBpbmRleCBpbnRlcnJ1cHQgb2NjdXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfVURTdGF0dXMgICAgICA6IDAgOiBDb3VudGVyIHByb2dyZXNzIGluIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkIG1vZGUgZG93biAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ291bnRlciBwcm9ncmVzcyBpbiB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBtb2RlIHVwICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IE5vIGluZGV4IGludGVycnVwdCBvY2N1ciB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE5vIGNvdW50ZXIgbW9kdWxlIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogQ291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0Q291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IEludGVycnVwdCBmdW5jdGlvbiBub3QgaW5pdGlhbGlzZWQuICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX1NldEJvYXJkSW50Um91dGluZVgiICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRJbnRlcnJ1cHRVRExhdGNoZWRTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9VRFN0YXR1cykKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbmRleCBpbnRlcnJ1cHQgb2NjdXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJc19Jbml0RmxhZy5iX0luZGV4SW50ZXJydXB0T2NjdXIgPT0gMSkgeworCQkJCWRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX0luaXRGbGFnLmJfSW5kZXhJbnRlcnJ1cHRPY2N1ciA9IDA7CisKKwkJCQlkd19TdGF0dXNSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTIgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkqcGJfVURTdGF0dXMgPSAoQllURSkgKChkd19TdGF0dXNSZWcgPj4gMSkgJiAxKTsKKwkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBObyBpbmRleCBpbnRlcnJ1cHQgb2NjdXIgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJKnBiX1VEU3RhdHVzID0gMjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAqLworCQkJLyogImlfQVBDSTE3MTBfSW5pdENvdW50ZXIiICAgICAgICAgICAgICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIkNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisJLyoKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9SZWFkRnJlcXVlbmN5TWVhc3VyZW1lbnQgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgICAgICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICAgICAgICAgcGJfU3RhdHVzLCAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfICAgICAgICBwdWxfUmVhZFZhbHVlKSAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJucyB0aGUgc3RhdHVzIChwYl9TdGF0dXMpIGFuZCB0aGUgbnVtYmVyIG9mICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgaW5jcmVtZW50cyBpbiB0aGUgc2V0IHRpbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICIgaV9BUENJMTcxMF9Jbml0RnJlcXVlbmN5TWVhc3VyZW1lbnQgIiAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gIGJfQm9hcmRIYW5kbGUgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIgICAgICAgOiBOdW1iZXIgb2YgdGhlIG1vZHVsZSB0byBiZSAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVkICgwIHRvIDMpICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfIHBiX1N0YXR1cyAgICAgOiBSZXR1cm5zIHRoZSBmcmVxdWVuY3kgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlbWVudCBzdGF0dXMgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogQ291bnRpbmcgY3ljbGUgbm90ICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZC4gICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ291bnRpbmcgY3ljbGUgc3RhcnRlZC4gIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogQ291bnRpbmcgY3ljbGUgc3RvcHBlZC4gIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG1lYXN1cmVtZW50IGN5Y2xlIGlzIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkLiAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgUEJZVEVfIHBiX1VEU3RhdHVzICAgICAgOiAwIDogQ291bnRlciBwcm9ncmVzcyBpbiB0aGUgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbW9kZSBkb3duICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ291bnRlciBwcm9ncmVzcyBpbiB0aGUgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbW9kZSB1cCAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfUmVhZFZhbHVlICAgOiBSZXR1cm4gdGhlIG51bWJlciBvZiAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRzIGluIHRoZSBkZWZpbmVkICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lIGJhc2UuICAgICAgICAgICAgICAgICAgIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgICB8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyIGlzIHdyb25nICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgLTM6IENvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgLTQ6IEZyZXF1ZW5jeSBtZWFzdXJlbWVudCBsb2dpYyBub3QgaW5pdGlhbGlzZWQuICAgICAgIHwKKwkgICB8ICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9Jbml0RnJlcXVlbmN5TWVhc3VyZW1lbnQiIHwKKwkgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkgKi8KKworSU5UIGlfQVBDSTE3MTBfUmVhZEZyZXF1ZW5jeU1lYXN1cmVtZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwKKwlQQllURSBwYl9TdGF0dXMsIFBCWVRFIHBiX1VEU3RhdHVzLCBQVUxPTkcgcHVsX1JlYWRWYWx1ZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJVUlOVCB1aV8xNkJpdFZhbHVlOworCURXT1JEIGR3X1N0YXR1c1JlZzsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChkZXZwcml2LT4KKwkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLnNfSW5pdEZsYWcuYl9Db3VudGVySW5pdCA9PSAxKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBmcmVxdWVuY3kgbWVzdXJlbWVudCBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPgorCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQlzX0luaXRGbGFnLmJfRnJlcXVlbmN5TWVhc3VyZW1lbnRJbml0ID09IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBlbmFibGUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19TaWVtZW5zQ291bnRlckluZm8uCisJCQkJCXNfSW5pdEZsYWcuCisJCQkJCWJfRnJlcXVlbmN5TWVhc3VyZW1lbnRFbmFibGUgPT0gMSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIHN0YXR1cyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgMzIgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgZnJlcXVlbmN5IHN0b3AgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoZHdfU3RhdHVzUmVnICYgMSkgeworCQkJCQkJKnBiX1N0YXR1cyA9IDI7CisJCQkJCQkqcGJfVURTdGF0dXMgPQorCQkJCQkJCShCWVRFKSAoKGR3X1N0YXR1c1JlZyA+PgorCQkJCQkJCQkxKSAmIDMpOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUmVhZCB0aGUgdmFsdWUgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCSpwdWxfUmVhZFZhbHVlID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyAyOCArCisJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQlpZiAoKnBiX1VEU3RhdHVzID09IDApIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgY291bnRlciBtb2RlICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc19TaWVtZW5zQ291bnRlckluZm8uc19Nb2RlUmVnaXN0ZXIuc19CeXRlTW9kZVJlZ2lzdGVyLmJfTW9kZVJlZ2lzdGVyMSAmIEFQQ0kxNzEwXzE2QklUX0NPVU5URVIpID09IEFQQ0kxNzEwXzE2QklUX0NPVU5URVIpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgMTYtYml0IGNvdW50ZXIgMSBwdWxzZSBvY2N1ciAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKCpwdWxfUmVhZFZhbHVlICYgMHhGRkZGVSkgIT0gMCkgeworCQkJCQkJCQkJdWlfMTZCaXRWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUlOVCkKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCSYKKwkJCQkJCQkJCQkweEZGRkZVOworCQkJCQkJCQkJKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKCpwdWxfUmVhZFZhbHVlCisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCTB4RkZGRjAwMDBVTCkKKwkJCQkJCQkJCQl8CisJCQkJCQkJCQkJKDB4RkZGRlUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJdWlfMTZCaXRWYWx1ZSk7CisJCQkJCQkJCX0KKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiAxNi1iaXQgY291bnRlciAyIHB1bHNlIG9jY3VyICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoKnB1bF9SZWFkVmFsdWUgJiAweEZGRkYwMDAwVUwpICE9IDApIHsKKwkJCQkJCQkJCXVpXzE2Qml0VmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVJTlQpCisJCQkJCQkJCQkJKAorCQkJCQkJCQkJCSgqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCQk+PgorCQkJCQkJCQkJCQkxNikKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJMHhGRkZGVSk7CisJCQkJCQkJCQkqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJMHhGRkZGVUwpCisJCQkJCQkJCQkJfAorCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoMHhGRkZGVSAtIHVpXzE2Qml0VmFsdWUpIDw8IDE2KTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWlmICgqcHVsX1JlYWRWYWx1ZSAhPSAwKSB7CisJCQkJCQkJCQkqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkweEZGRkZGRkZGVUwKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJKnB1bF9SZWFkVmFsdWU7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWlmICgqcGJfVURTdGF0dXMgPT0gMSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCBpZiAxNi1iaXQgY291bnRlciAyIHB1bHNlIG9jY3VyICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoKnB1bF9SZWFkVmFsdWUgJiAweEZGRkYwMDAwVUwpICE9IDApIHsKKwkJCQkJCQkJCXVpXzE2Qml0VmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVJTlQpCisJCQkJCQkJCQkJKAorCQkJCQkJCQkJCSgqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCQk+PgorCQkJCQkJCQkJCQkxNikKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJMHhGRkZGVSk7CisJCQkJCQkJCQkqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoKnB1bF9SZWFkVmFsdWUKKwkJCQkJCQkJCQkmCisJCQkJCQkJCQkJMHhGRkZGVUwpCisJCQkJCQkJCQkJfAorCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoMHhGRkZGVSAtIHVpXzE2Qml0VmFsdWUpIDw8IDE2KTsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkJCQkJCWlmICgqcGJfVURTdGF0dXMKKwkJCQkJCQkJCT09IDIpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRlc3QgaWYgMTYtYml0IGNvdW50ZXIgMSBwdWxzZSBvY2N1ciAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoKCpwdWxfUmVhZFZhbHVlICYgMHhGRkZGVSkgIT0gMCkgeworCQkJCQkJCQkJCXVpXzE2Qml0VmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUlOVCkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQlwdWxfUmVhZFZhbHVlCisJCQkJCQkJCQkJCSYKKwkJCQkJCQkJCQkJMHhGRkZGVTsKKwkJCQkJCQkJCQkqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCSgqcHVsX1JlYWRWYWx1ZQorCQkJCQkJCQkJCQkmCisJCQkJCQkJCQkJCTB4RkZGRjAwMDBVTCkKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkoMHhGRkZGVQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCXVpXzE2Qml0VmFsdWUpOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJKnBiX1N0YXR1cyA9IDE7CisJCQkJCQkqcGJfVURTdGF0dXMgPSAwOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJKnBiX1N0YXR1cyA9IDA7CisJCQkJCSpwYl9VRFN0YXR1cyA9IDA7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJGcmVxdWVuY3kgbWVhc3VyZW1lbnQgbG9naWMgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb3VudGVyIG5vdCBpbml0aWFsaXNlZCBzZWUgZnVuY3Rpb24gKi8KKwkJCS8qICJpX0FQQ0kxNzEwX0luaXRDb3VudGVyIiAgICAgICAgICAgICAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJDb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSU5DQ1BULmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lOQ0NQVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNTNjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lOQ0NQVC5oCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwXzE2QklUX0NPVU5URVIJCQkweDEwCisjZGVmaW5lIEFQQ0kxNzEwXzMyQklUX0NPVU5URVIJCQkweDAKKyNkZWZpbmUgQVBDSTE3MTBfUVVBRFJVUExFX01PREUJCQkweDAKKyNkZWZpbmUgQVBDSTE3MTBfRE9VQkxFX01PREUJCQkweDMKKyNkZWZpbmUgQVBDSTE3MTBfU0lNUExFX01PREUJCQkweEYKKyNkZWZpbmUgQVBDSTE3MTBfRElSRUNUX01PREUJCQkweDgwCisjZGVmaW5lIEFQQ0kxNzEwX0hZU1RFUkVTSVNfT04JCQkweDYwCisjZGVmaW5lIEFQQ0kxNzEwX0hZU1RFUkVTSVNfT0ZGCQkJMHgwCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ1JFTUVOVAkJCTB4NjAKKyNkZWZpbmUgQVBDSTE3MTBfREVDUkVNRU5UCQkJMHgwCisjZGVmaW5lIEFQQ0kxNzEwX0xBVENIX0NPVU5URVIJCQkweDEKKyNkZWZpbmUgQVBDSTE3MTBfQ0xFQVJfQ09VTlRFUgkJCTB4MAorI2RlZmluZSBBUENJMTcxMF9MT1cJCQkJMHgwCisjZGVmaW5lIEFQQ0kxNzEwX0hJR0gJCQkJMHgxCisKKy8qKioqKioqKioqKioqKioqKioqKiovCisvKiBWZXJzaW9uIDA2MDAtMDIyOSAqLworLyoqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgQVBDSTE3MTBfSElHSF9FREdFX0NMRUFSX0NPVU5URVIJCTB4MAorI2RlZmluZSBBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQ09VTlRFUgkJMHgxCisjZGVmaW5lIEFQQ0kxNzEwX0xPV19FREdFX0NMRUFSX0NPVU5URVIJCQkweDIKKyNkZWZpbmUgQVBDSTE3MTBfTE9XX0VER0VfTEFUQ0hfQ09VTlRFUgkJCTB4MworI2RlZmluZSBBUENJMTcxMF9ISUdIX0VER0VfTEFUQ0hfQU5EX0NMRUFSX0NPVU5URVIJMHg0CisjZGVmaW5lIEFQQ0kxNzEwX0xPV19FREdFX0xBVENIX0FORF9DTEVBUl9DT1VOVEVSCTB4NQorI2RlZmluZSBBUENJMTcxMF9TT1VSQ0VfMAkJCQkweDAKKyNkZWZpbmUgQVBDSTE3MTBfU09VUkNFXzEJCQkJMHgxCisKKyNkZWZpbmUgQVBDSTE3MTBfMzBNSFoJCQkJMzAKKyNkZWZpbmUgQVBDSTE3MTBfMzNNSFoJCQkJMzMKKyNkZWZpbmUgQVBDSTE3MTBfNDBNSFoJCQkJNDAKKworI2RlZmluZSBBUENJMTcxMF9FTkFCTEVfTEFUQ0hfSU5UICAgIAkJMHg4MAorI2RlZmluZSBBUENJMTcxMF9ESVNBQkxFX0xBVENIX0lOVCAgIAkJKH5BUENJMTcxMF9FTkFCTEVfTEFUQ0hfSU5UKQorCisjZGVmaW5lIEFQQ0kxNzEwX0lOREVYX0xBVENIX0NPVU5URVIJCTB4MTAKKyNkZWZpbmUgQVBDSTE3MTBfSU5ERVhfQVVUT19NT0RFCQkweDgKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFX0lOREVYCQkJMHg0CisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfSU5ERVgJCQkofkFQQ0kxNzEwX0VOQUJMRV9JTkRFWCkKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFX0xBVENIX0FORF9DTEVBUgkJMHg4CisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfTEFUQ0hfQU5EX0NMRUFSCSh+QVBDSTE3MTBfRU5BQkxFX0xBVENIX0FORF9DTEVBUikKKyNkZWZpbmUgQVBDSTE3MTBfU0VUX0xPV19JTkRFWF9MRVZFTAkJMHg0CisjZGVmaW5lIEFQQ0kxNzEwX1NFVF9ISUdIX0lOREVYX0xFVkVMCQkofkFQQ0kxNzEwX1NFVF9MT1dfSU5ERVhfTEVWRUwpCisjZGVmaW5lIEFQQ0kxNzEwX0lOVkVSVF9JTkRFWF9SRkVSRU5DRQkJMHgyCisjZGVmaW5lIEFQQ0kxNzEwX0RFRkFVTFRfSU5ERVhfUkZFUkVOQ0UgICAgICAgICAofkFQQ0kxNzEwX0lOVkVSVF9JTkRFWF9SRkVSRU5DRSkKKworI2RlZmluZSBBUENJMTcxMF9FTkFCTEVfSU5ERVhfSU5UCQkweDEKKyNkZWZpbmUgQVBDSTE3MTBfRElTQUJMRV9JTkRFWF9JTlQJCSh+QVBDSTE3MTBfRU5BQkxFX0lOREVYX0lOVCkKKworI2RlZmluZSBBUENJMTcxMF9FTkFCTEVfRlJFUVVFTkNZCQkweDQKKyNkZWZpbmUgQVBDSTE3MTBfRElTQUJMRV9GUkVRVUVOQ1kJCSh+QVBDSTE3MTBfRU5BQkxFX0ZSRVFVRU5DWSkKKworI2RlZmluZSBBUENJMTcxMF9FTkFCTEVfRlJFUVVFTkNZX0lOVAkJMHg4CisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfRlJFUVVFTkNZX0lOVAkJKH5BUENJMTcxMF9FTkFCTEVfRlJFUVVFTkNZX0lOVCkKKworI2RlZmluZSBBUENJMTcxMF9FTkFCTEVfNDBNSFpfRlJFUVVFTkNZCQkweDQwCisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfNDBNSFpfRlJFUVVFTkNZCSh+QVBDSTE3MTBfRU5BQkxFXzQwTUhaX0ZSRVFVRU5DWSkKKworI2RlZmluZSBBUENJMTcxMF9FTkFCTEVfNDBNSFpfRklMVEVSCQkweDgwCisjZGVmaW5lIEFQQ0kxNzEwX0RJU0FCTEVfNDBNSFpfRklMVEVSCQkofkFQQ0kxNzEwX0VOQUJMRV80ME1IWl9GSUxURVIpCisKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFX0NPTVBBUkVfSU5UCQkweDIKKyNkZWZpbmUgQVBDSTE3MTBfRElTQUJMRV9DT01QQVJFX0lOVAkJKH5BUENJMTcxMF9FTkFCTEVfQ09NUEFSRV9JTlQpCisKKyNkZWZpbmUgQVBDSTE3MTBfRU5BQkxFX0lOREVYX0FDVElPTgkJMHgyMAorI2RlZmluZSBBUENJMTcxMF9ESVNBQkxFX0lOREVYX0FDVElPTgkJKH5BUENJMTcxMF9FTkFCTEVfSU5ERVhfQUNUSU9OKQorI2RlZmluZSBBUENJMTcxMF9SRUZFUkVOQ0VfSElHSAkJCTB4NDAKKyNkZWZpbmUgQVBDSTE3MTBfUkVGRVJFTkNFX0xPVwkJCSh+QVBDSTE3MTBfUkVGRVJFTkNFX0hJR0gpCisKKyNkZWZpbmUgQVBDSTE3MTBfVE9SX0dBVEVfTE9XCQkJMHg0MAorI2RlZmluZSBBUENJMTcxMF9UT1JfR0FURV9ISUdICQkJKH5BUENJMTcxMF9UT1JfR0FURV9MT1cpCisKKy8qIElOU04gQ09ORklHICovCisjZGVmaW5lCUFQQ0kxNzEwX0lOQ0NQVF9JTklUQ09VTlRFUgkJCQkxMDAKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0NPVU5URVJBVVRPVEVTVAkJCQkxMDEKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0lOSVRJTkRFWAkJCQkxMDIKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0lOSVRSRUZFUkVOQ0UJCQkJMTAzCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9JTklURVhURVJOQUxTVFJPQkUJCQkxMDQKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0lOSVRDT01QQVJFTE9HSUMJCQkxMDUKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0lOSVRGUkVRVUVOQ1lNRUFTVVJFTUVOVAkJMTA2CisKKy8qIElOU04gUkVBRCAqLworI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfUkVBRExBVENIUkVHSVNURVJTVEFUVVMJCQkyMDAKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX1JFQURMQVRDSFJFR0lTVEVSVkFMVUUJCQkyMDEKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX1JFQUQxNkJJVENPVU5URVJWQUxVRQkJCTIwMgorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfUkVBRDMyQklUQ09VTlRFUlZBTFVFCQkJMjAzCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9HRVRJTkRFWFNUQVRVUwkJCQkyMDQKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0dFVFJFRkVSRU5DRVNUQVRVUwkJCTIwNQorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfR0VUVUFTU1RBVFVTCQkJCTIwNgorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfR0VUQ0JTVEFUVVMJCQkJMjA3CisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9HRVQxNkJJVENCU1RBVFVTCQkJMjA4CisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9HRVRVRFNUQVRVUwkJCQkyMDkKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0dFVElOVEVSUlVQVFVETEFUQ0hFRFNUQVRVUwkJMjEwCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9SRUFERlJFUVVFTkNZTUVBU1VSRU1FTlQJCTIxMQorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfUkVBRElOVEVSUlVQVAkJCQkyMTIKKworLyogSU5TTiBCSVRTICovCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9DTEVBUkNPVU5URVJWQUxVRQkJCTMwMAorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfQ0xFQVJBTExDT1VOVEVSVkFMVUUJCQkzMDEKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX1NFVElOUFVURklMVEVSCQkJCTMwMgorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfTEFUQ0hDT1VOVEVSCQkJCTMwMworI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfU0VUSU5ERVhBTkRSRUZFUkVOQ0VTT1VSQ0UJCTMwNAorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfU0VURElHSVRBTENITE9OCQkJCTMwNQorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfU0VURElHSVRBTENITE9GRgkJCTMwNgorCisvKiBJTlNOIFdSSVRFICovCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9FTkFCTEVMQVRDSElOVEVSUlVQVAkJCTQwMAorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfRElTQUJMRUxBVENISU5URVJSVVBUCQkJNDAxCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9XUklURTE2QklUQ09VTlRFUlZBTFVFCQkJNDAyCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9XUklURTMyQklUQ09VTlRFUlZBTFVFCQkJNDAzCisjZGVmaW5lIEFQQ0kxNzEwX0lOQ0NQVF9FTkFCTEVJTkRFWAkJCQk0MDQKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0RJU0FCTEVJTkRFWAkJCQk0MDUKKyNkZWZpbmUgQVBDSTE3MTBfSU5DQ1BUX0VOQUJMRUNPTVBBUkVMT0dJQwkJCTQwNgorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfRElTQUJMRUNPTVBBUkVMT0dJQwkJCTQwNworI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfRU5BQkxFRlJFUVVFTkNZTUVBU1VSRU1FTlQJCTQwOAorI2RlZmluZSBBUENJMTcxMF9JTkNDUFRfRElTQUJMRUZSRVFVRU5DWU1FQVNVUkVNRU5UCQk0MDkKKworLyoqKioqKioqKioqKiBNYWluIEZ1bmN0aW9ucyAqKioqKioqKioqKioqLworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0lOQ0NQVChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c0lOQ0NQVChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVJTkNDUFQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkSU5DQ1BUKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qKioqKioqKioqKiBTdXBwbGVtZW50YXJ5IEZ1bmN0aW9ucyoqKioqKioqLworCisvKiBJTlNOIENPTkZJRyAqLworSU5UIGlfQVBDSTE3MTBfSW5pdENvdW50ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgIEJZVEUgYl9Nb2R1bE5iciwKKwkJCSAgIEJZVEUgYl9Db3VudGVyUmFuZ2UsCisJCQkgICBCWVRFIGJfRmlyc3RDb3VudGVyTW9kdXMsCisJCQkgICBCWVRFIGJfRmlyc3RDb3VudGVyT3B0aW9uLAorCQkJICAgQllURSBiX1NlY29uZENvdW50ZXJNb2R1cywKKwkJCSAgIEJZVEUgYl9TZWNvbmRDb3VudGVyT3B0aW9uKTsKKworSU5UIGlfQVBDSTE3MTBfQ291bnRlckF1dG9UZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIFBCWVRFIHBiX1Rlc3RTdGF0dXMpOworCitJTlQgaV9BUENJMTcxMF9Jbml0SW5kZXgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSBCWVRFIGJfTW9kdWxOYnIsCisJCQkgQllURSBiX1JlZmVyZW5jZUFjdGlvbiwKKwkJCSBCWVRFIGJfSW5kZXhPcGVyYXRpb24sIEJZVEUgYl9BdXRvTW9kZSwKKwkJCSBCWVRFIGJfSW50ZXJydXB0RW5hYmxlKTsKKworSU5UIGlfQVBDSTE3MTBfSW5pdFJlZmVyZW5jZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9SZWZlcmVuY2VMZXZlbCk7CisKK0lOVCBpX0FQQ0kxNzEwX0luaXRFeHRlcm5hbFN0cm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfRXh0ZXJuYWxTdHJvYmUsCisJCQkJICBCWVRFIGJfRXh0ZXJuYWxTdHJvYmVMZXZlbCk7CisKK0lOVCBpX0FQQ0kxNzEwX0luaXRDb21wYXJlTG9naWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQlCWVRFIGJfTW9kdWxOYnIsIFVJTlQgdWlfQ29tcGFyZVZhbHVlKTsKKworSU5UIGlfQVBDSTE3MTBfSW5pdEZyZXF1ZW5jeU1lYXN1cmVtZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCUJZVEUgYl9Nb2R1bE5iciwKKwkJCQkJQllURSBiX1BDSUlucHV0Q2xvY2ssCisJCQkJCUJZVEUgYl9UaW1pbmdVbml0eSwKKwkJCQkJVUxPTkcgdWxfVGltaW5nSW50ZXJ2YWwsCisJCQkJCVBVTE9ORyBwdWxfUmVhbFRpbWluZ0ludGVydmFsKTsKKworLyogSU5TTiBCSVRTICovCitJTlQgaV9BUENJMTcxMF9DbGVhckNvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBCWVRFIGJfTW9kdWxOYnIpOworCitJTlQgaV9BUENJMTcxMF9DbGVhckFsbENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKKworSU5UIGlfQVBDSTE3MTBfU2V0SW5wdXRGaWx0ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1BDSUlucHV0Q2xvY2ssCisJCQkgICAgICBCWVRFIGJfRmlsdGVyKTsKKworSU5UIGlfQVBDSTE3MTBfTGF0Y2hDb3VudGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfTGF0Y2hSZWcpOworCitJTlQgaV9BUENJMTcxMF9TZXRJbmRleEFuZFJlZmVyZW5jZVNvdXJjZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgIEJZVEUgYl9Nb2R1bE5iciwKKwkJCQkJICBCWVRFIGJfU291cmNlU2VsZWN0aW9uKTsKKworSU5UIGlfQVBDSTE3MTBfU2V0RGlnaXRhbENobE9uKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIEJZVEUgYl9Nb2R1bE5icik7CisKK0lOVCBpX0FQQ0kxNzEwX1NldERpZ2l0YWxDaGxPZmYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgQllURSBiX01vZHVsTmJyKTsKKworLyogSU5TTiBXUklURSAqLworSU5UIGlfQVBDSTE3MTBfRW5hYmxlTGF0Y2hJbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgQllURSBiX01vZHVsTmJyKTsKKworSU5UIGlfQVBDSTE3MTBfRGlzYWJsZUxhdGNoSW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIEJZVEUgYl9Nb2R1bE5icik7CisKK0lOVCBpX0FQQ0kxNzEwX1dyaXRlMTZCaXRDb3VudGVyVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9TZWxlY3RlZENvdW50ZXIsCisJCQkJICAgICAgVUlOVCB1aV9Xcml0ZVZhbHVlKTsKKworSU5UIGlfQVBDSTE3MTBfV3JpdGUzMkJpdENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgVUxPTkcgdWxfV3JpdGVWYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX0VuYWJsZUluZGV4KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIEJZVEUgYl9Nb2R1bE5icik7CisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVJbmRleChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBCWVRFIGJfTW9kdWxOYnIpOworCitJTlQgaV9BUENJMTcxMF9FbmFibGVDb21wYXJlTG9naWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgQllURSBiX01vZHVsTmJyKTsKKworSU5UIGlfQVBDSTE3MTBfRGlzYWJsZUNvbXBhcmVMb2dpYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBCWVRFIGJfTW9kdWxOYnIpOworCitJTlQgaV9BUENJMTcxMF9FbmFibGVGcmVxdWVuY3lNZWFzdXJlbWVudChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgIEJZVEUgYl9Nb2R1bE5iciwKKwkJCQkJICBCWVRFIGJfSW50ZXJydXB0RW5hYmxlKTsKKworSU5UIGlfQVBDSTE3MTBfRGlzYWJsZUZyZXF1ZW5jeU1lYXN1cmVtZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgIEJZVEUgYl9Nb2R1bE5icik7CisKKy8qIElOU04gUkVBRCAqLworSU5UIGlfQVBDSTE3MTBfUmVhZExhdGNoUmVnaXN0ZXJTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfTGF0Y2hSZWcsCisJCQkJICAgICAgIFBCWVRFIHBiX0xhdGNoU3RhdHVzKTsKKworSU5UIGlfQVBDSTE3MTBfUmVhZExhdGNoUmVnaXN0ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX0xhdGNoUmVnLAorCQkJCSAgICAgIFBVTE9ORyBwdWxfTGF0Y2hWYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX1JlYWQxNkJpdENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgQllURSBiX01vZHVsTmJyLCBCWVRFIGJfU2VsZWN0ZWRDb3VudGVyLAorCQkJCSAgICAgUFVJTlQgcHVpX0NvdW50ZXJWYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX1JlYWQzMkJpdENvdW50ZXJWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgQllURSBiX01vZHVsTmJyLCBQVUxPTkcgcHVsX0NvdW50ZXJWYWx1ZSk7CisKK0lOVCBpX0FQQ0kxNzEwX0dldEluZGV4U3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICAgICBCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX0luZGV4U3RhdHVzKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0UmVmZXJlbmNlU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICBCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX1JlZmVyZW5jZVN0YXR1cyk7CisKK0lOVCBpX0FQQ0kxNzEwX0dldFVBU1N0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgIEJZVEUgYl9Nb2R1bE5iciwgUEJZVEUgcGJfVUFTU3RhdHVzKTsKKworSU5UIGlfQVBDSTE3MTBfR2V0Q0JTdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgIEJZVEUgYl9Nb2R1bE5iciwgUEJZVEUgcGJfQ0JTdGF0dXMpOworCitJTlQgaV9BUENJMTcxMF9HZXQxNkJpdENCU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9DQlN0YXR1c0NvdW50ZXIwLAorCQkJCVBCWVRFIHBiX0NCU3RhdHVzQ291bnRlcjEpOworCitJTlQgaV9BUENJMTcxMF9HZXRVRFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgQllURSBiX01vZHVsTmJyLCBQQllURSBwYl9VRFN0YXR1cyk7CisKK0lOVCBpX0FQQ0kxNzEwX0dldEludGVycnVwdFVETGF0Y2hlZFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICBCWVRFIGJfTW9kdWxOYnIsIFBCWVRFIHBiX1VEU3RhdHVzKTsKKworSU5UIGlfQVBDSTE3MTBfUmVhZEZyZXF1ZW5jeU1lYXN1cmVtZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCUJZVEUgYl9Nb2R1bE5iciwKKwkJCQkJUEJZVEUgcGJfU3RhdHVzLCBQQllURSBwYl9VRFN0YXR1cywKKwkJCQkJUFVMT05HIHB1bF9SZWFkVmFsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JbnBfY3B0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lucF9jcHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWM2YTI2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JbnBfY3B0LmMKQEAgLTAsMCArMSw4NjEgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBJIEFQQ0kxNzEwICAgIHwgQ29tcGlsZXIgOiBnY2MgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBJbnBfQ1BULkMgICAgICAgfCBWZXJzaW9uICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgQVBDSS0xNzEwIHB1bHNlIGVuY29kZXIgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfC0tLS0tLS0tLS18LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorICB8IDA4LzA1LzAwIHwgR3Vpbm90IEMgIHwgLSAwNDAwLzAyMjggQWxsIEZ1bmN0aW9uIGluIFJJTkcgMCAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgIGF2YWlsYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKyNpbmNsdWRlICJBUENJMTcxMF9JbnBfY3B0LmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0luaXRQdWxzZUVuY29kZXIgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgICAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICAgICAgIGJfUHVsc2VFbmNvZGVyTmJyLCAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgYl9JbnB1dExldmVsU2VsZWN0aW9uLCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICBiX1RyaWdnZXJPdXRwdXRBY3Rpb24sICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HXyAgICAgICAgdWxfU3RhcnRWYWx1ZSkgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlIHRoZSBwdWxzZSBlbmNvZGVyIG9wZXJhdGluZyBtb2RlIHNlbGVjdGVkIHZpYXwKK3wgICAgICAgICAgICAgICAgICAgICBiX01vZHVsTmJyIGFuZCBiX1B1bHNlRW5jb2Rlck5ici4gVGhlIHB1bHNlIGVuY29kZXIgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGFmdGVyIGVhY2ggcHVsc2UgZGVjcmVtZW50IHRoZSBjb3VudGVyIHZhbHVlIGZyb20gMS4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBZb3UgbXVzdCBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYmUgZm9yIHlvdSBjYWxsIGFueSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiBwdWxzZSBlbmNvZGVycy4gICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1B1bHNlRW5jb2Rlck5iciAgICAgOiBQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnB1dExldmVsU2VsZWN0aW9uIDogSW5wdXQgbGV2ZWwgc2VsZWN0aW9uICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCBvciAxKSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogU2V0IHB1bHNlIGVuY29kZXJ8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCB0aGUgdGhlIGxvd3wKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsIHB1bHNlLiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogU2V0IHB1bHNlIGVuY29kZXJ8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCB0aGUgdGhlICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2ggbGV2ZWwgcHVsc2UufAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfVHJpZ2dlck91dHB1dEFjdGlvbiA6IERpZ2l0YWwgVFJJR0dFUiBvdXRwdXQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IE5vIGFjdGlvbiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogU2V0IHRoZSB0cmlnZ2VyICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgdG8gIjEiICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWdoKSBhZnRlciB0aGUgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2FnZSBmcm9tIDEgdG98Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIGZyb20gcHVsc2UgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIuICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogU2V0IHRoZSB0cmlnZ2VyICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgdG8gIjAiICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb3cpIGFmdGVyIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2FnZSBmcm9tIDEgdG98Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIGZyb20gcHVsc2UgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVMT05HXyB1bF9TdGFydFZhbHVlICAgICAgICA6IFB1bHNlIGVuY29kZXIgc3RhcnQgdmFsdWV8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgdG8gNDI5NDk2NzI5NSkKKwliX01vZHVsTmJyCQkJCT0oQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9QdWxzZUVuY29kZXJOYnIJCT0oQllURSkgZGF0YVswXTsKKwliX0lucHV0TGV2ZWxTZWxlY3Rpb24JPShCWVRFKSBkYXRhWzFdOworCWJfVHJpZ2dlck91dHB1dEFjdGlvbgk9KEJZVEUpIGRhdGFbMl07CisJdWxfU3RhcnRWYWx1ZQkJCT0oVUxPTkcpIGRhdGFbM107CisgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIGlzIG5vdCBhIHB1bHNlIGVuY29kZXIgbW9kdWxlICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFB1bHNlIGVuY29kZXIgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogSW5wdXQgbGV2ZWwgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBEaWdpdGFsIFRSSUdHRVIgb3V0cHV0IGFjdGlvbiBzZWxlY3Rpb24gaXMgd3JvbmcgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6IFB1bHNlIGVuY29kZXIgc3RhcnQgdmFsdWUgaXMgd3JvbmcgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0UHVsc2VFbmNvZGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfSW50UmVnaXN0ZXI7CisKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX1B1bHNlRW5jb2Rlck5icjsKKwlCWVRFIGJfSW5wdXRMZXZlbFNlbGVjdGlvbjsKKwlCWVRFIGJfVHJpZ2dlck91dHB1dEFjdGlvbjsKKwlVTE9ORyB1bF9TdGFydFZhbHVlOworCisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1B1bHNlRW5jb2Rlck5iciA9IChCWVRFKSBkYXRhWzBdOworCWJfSW5wdXRMZXZlbFNlbGVjdGlvbiA9IChCWVRFKSBkYXRhWzFdOworCWJfVHJpZ2dlck91dHB1dEFjdGlvbiA9IChCWVRFKSBkYXRhWzJdOworCXVsX1N0YXJ0VmFsdWUgPSAoVUxPTkcpIGRhdGFbM107CisKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBzZWxlY3RlZCBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPD0gMykgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIHB1bHNlIGVuY29kZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJQVBDSTE3MTBfUFVMU0VfRU5DT0RFUikgPT0KKwkJCUFQQ0kxNzEwX1BVTFNFX0VOQ09ERVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgc2VsZWN0ZWQgcHVsc2UgZW5jb2RlciBudW1iZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9QdWxzZUVuY29kZXJOYnIgPD0gMykgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBpbnB1dCBsZXZlbCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoYl9JbnB1dExldmVsU2VsZWN0aW9uID09IDApCisJCQkJCXx8IChiX0lucHV0TGV2ZWxTZWxlY3Rpb24gPT0gMSkpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBvdXB1dCBUUklHR0VSIGFjdGlvbiBzZWxlY3Rpb24gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoYl9UcmlnZ2VyT3V0cHV0QWN0aW9uIDw9IDIpCisJCQkJCQl8fCAoYl9QdWxzZUVuY29kZXJOYnIgPiAwKSkgeworCQkJCQkJaWYgKHVsX1N0YXJ0VmFsdWUgPiAxKSB7CisKKwkJCQkJCQlkd19JbnRSZWdpc3RlciA9CisJCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJMjAgKworCQkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFNldCB0aGUgc3RhcnQgdmFsdWUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJb3V0bCh1bF9TdGFydFZhbHVlLAorCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJKGJfUHVsc2VFbmNvZGVyTmJyCisJCQkJCQkJCQkqIDQpICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBTZXQgdGhlIGlucHV0IGxldmVsICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQlkd19TZXRSZWdpc3RlciA9CisJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQlkd19TZXRSZWdpc3RlciAmCisJCQkJCQkJCSgweEZGRkZGRkZGVUwgLQorCQkJCQkJCQkJKDFVTCA8PCAoOCArIGJfUHVsc2VFbmNvZGVyTmJyKSkpKSB8ICgoMVVMICYgKH5iX0lucHV0TGV2ZWxTZWxlY3Rpb24pKSA8PCAoOCArIGJfUHVsc2VFbmNvZGVyTmJyKSk7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBvdXRwdXQgdHJpZ2dlciB1c2VkICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKChiX1RyaWdnZXJPdXRwdXRBY3Rpb24gPiAwKSAmJiAoYl9QdWxzZUVuY29kZXJOYnIgPiAxKSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogRW5hYmxlIHRoZSBvdXRwdXQgYWN0aW9uICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlcgorCQkJCQkJCQkJPQorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X1NldFJlZ2lzdGVyCisJCQkJCQkJCQl8ICgxVUwKKwkJCQkJCQkJCTw8ICg0ICsgYl9QdWxzZUVuY29kZXJOYnIpKTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTZXQgdGhlIG91dHB1dCBUUklHR0VSIGFjdGlvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlcgorCQkJCQkJCQkJPQorCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlcgorCQkJCQkJCQkJJgorCQkJCQkJCQkJKDB4RkZGRkZGRkZVTAorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkoMVVMIDw8ICgxMiArIGJfUHVsc2VFbmNvZGVyTmJyKSkpKSB8ICgoMVVMICYgKGJfVHJpZ2dlck91dHB1dEFjdGlvbiAtIDEpKSA8PCAoMTIgKyBiX1B1bHNlRW5jb2Rlck5icikpOworCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogRGlzYWJsZSB0aGUgb3V0cHV0IGFjdGlvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X1NldFJlZ2lzdGVyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIKKwkJCQkJCQkJCSYKKwkJCQkJCQkJCSgweEZGRkZGRkZGVUwKKwkJCQkJCQkJCS0KKwkJCQkJCQkJCSgxVUwgPDwgKDQgKyBiX1B1bHNlRW5jb2Rlck5icikpKTsKKwkJCQkJCQl9CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogU2V0IHRoZSBjb25maWd1cmF0aW9uICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJb3V0bChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQlkd19TZXRSZWdpc3RlciwKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJCTIwICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJc19QdWxzZUVuY29kZXJJbmZvCisJCQkJCQkJCVtiX1B1bHNlRW5jb2Rlck5icl0uCisJCQkJCQkJCWJfUHVsc2VFbmNvZGVySW5pdAorCQkJCQkJCQk9IDE7CisJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogUHVsc2UgZW5jb2RlciBzdGFydCB2YWx1ZSBpcyB3cm9uZyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJQdWxzZSBlbmNvZGVyIHN0YXJ0IHZhbHVlIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIERpZ2l0YWwgVFJJR0dFUiBvdXRwdXQgYWN0aW9uIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIkRpZ2l0YWwgVFJJR0dFUiBvdXRwdXQgYWN0aW9uIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIElucHV0IGxldmVsIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiSW5wdXQgbGV2ZWwgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFB1bHNlIGVuY29kZXIgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiUHVsc2UgZW5jb2RlciBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIHB1bHNlIGVuY29kZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIHB1bHNlIGVuY29kZXIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIHB1bHNlIGVuY29kZXIgbW9kdWxlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgcHVsc2UgZW5jb2RlciBtb2R1bGVcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRW5hYmxlUHVsc2VFbmNvZGVyICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9QdWxzZUVuY29kZXJOYnIsICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX0N5Y2xlU2VsZWN0aW9uLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfSW50ZXJydXB0SGFuZGxpbmcpICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRW5hYmxlb3IgZGlzYWJsZSAgdGhlIHNlbGVjdGVkIHB1bHNlIGVuY29kZXIgKGJfUHVsc2VFbmNvZGVyTmJyKSAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZyb20gc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gRWFjaCBpbnB1dCBwdWxzZSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZGVjcmVtZW50IHRoZSBwdWxzZSBlbmNvZGVyIGNvdW50ZXIgdmFsdWUgZnJvbSAxLiAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBJZiB5b3UgZW5hYmxlZCB0aGUgaW50ZXJydXB0IChiX0ludGVycnVwdEhhbmRsaW5nKSwgYSAgfAorfCAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgd2hlbiB0aGUgcHVsc2UgZW5jb2RlciBoYXMgcnVuICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZG93bi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX01vZHVsTmJyICAgICAgICAgIDogTW9kdWxlIG51bWJlciB0byAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMykgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgYl9QdWxzZUVuY29kZXJOYnIgICA6IFB1bHNlIGVuY29kZXIgc2VsZWN0aW9uICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgIGJfQ3ljbGVTZWxlY3Rpb24gICAgOiBBUENJMTcxMF9DT05USU5VT1VTOiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHRpbWUgdGhlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50aW5nIHZhbHVlIGlzIHNldHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gIjAiLCB0aGUgcHVsc2UgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyIGxvYWQgdGhlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0IHZhbHVlIGFmdGVyICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5leHQgcHVsc2UuICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX1NJTkdMRTogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBjb3VudGVyIGlzIHNldHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gIjAiLCB0aGUgcHVsc2UgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyIGlzIHN0b3BwZWQuICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICBiX0ludGVycnVwdEhhbmRsaW5nIDogSW50ZXJydXB0cyBjYW4gYmUgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQsIHdoZW4gdGhlIHB1bHNlfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIgaGFzIHJ1biBkb3duLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2l0aCB0aGlzIHBhcmFtZXRlciB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyIGRlY2lkZXMgaWYgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMgYXJlIHVzZWQgb3IgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90LiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0VOQUJMRTogICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0cyBhcmUgZW5hYmxlZCB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9ESVNBQkxFOiAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdHMgYXJlIGRpc2FibGVkCisKKyAgCWJfTW9kdWxOYnIJCQk9KEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfQWN0aW9uCQkJPShCWVRFKSBkYXRhWzBdOworCWJfUHVsc2VFbmNvZGVyTmJyCT0oQllURSkgZGF0YVsxXTsKKwliX0N5Y2xlU2VsZWN0aW9uCT0oQllURSkgZGF0YVsyXTsKKwliX0ludGVycnVwdEhhbmRsaW5nCT0oQllURSkgZGF0YVszXTt8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFB1bHNlIGVuY29kZXIgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogUHVsc2UgZW5jb2RlciBub3QgaW5pdGlhbGlzZWQuICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfSW5pdFB1bHNlRW5jb2RlciIgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IEN5Y2xlIHNlbGVjdGlvbiBtb2RlIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogSW50ZXJydXB0IGhhbmRsaW5nIG1vZGUgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC03OiBJbnRlcnJ1cHQgcm91dGluZSBub3QgaW5zdGFsbGVkLiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlRW5hYmxlRGlzYWJsZVB1bHNlRW5jb2RlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCUJZVEUgYl9Nb2R1bE5icjsKKwlCWVRFIGJfUHVsc2VFbmNvZGVyTmJyOworCUJZVEUgYl9DeWNsZVNlbGVjdGlvbjsKKwlCWVRFIGJfSW50ZXJydXB0SGFuZGxpbmc7CisJQllURSBiX0FjdGlvbjsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9BY3Rpb24gPSAoQllURSkgZGF0YVswXTsKKwliX1B1bHNlRW5jb2Rlck5iciA9IChCWVRFKSBkYXRhWzFdOworCWJfQ3ljbGVTZWxlY3Rpb24gPSAoQllURSkgZGF0YVsyXTsKKwliX0ludGVycnVwdEhhbmRsaW5nID0gKEJZVEUpIGRhdGFbM107CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDw9IDMpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBzZWxlY3RlZCBwdWxzZSBlbmNvZGVyIG51bWJlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfUHVsc2VFbmNvZGVyTmJyIDw9IDMpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgcHVsc2UgZW5jb2RlciBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQlzX1B1bHNlRW5jb2RlckluZm9bYl9QdWxzZUVuY29kZXJOYnJdLgorCQkJCWJfUHVsc2VFbmNvZGVySW5pdCA9PSAxKSB7CisJCQkJc3dpdGNoIChiX0FjdGlvbikgeworCisJCQkJY2FzZSBBUENJMTcxMF9FTkFCTEU6CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgY3ljbGUgc2VsZWN0aW9uICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9DeWNsZVNlbGVjdGlvbiA9PQorCQkJCQkJQVBDSTE3MTBfQ09OVElOVU9VUworCQkJCQkJfHwgYl9DeWNsZVNlbGVjdGlvbiA9PQorCQkJCQkJQVBDSTE3MTBfU0lOR0xFKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIGludGVycnVwdCBoYW5kbGluZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChiX0ludGVycnVwdEhhbmRsaW5nID09CisJCQkJCQkJQVBDSTE3MTBfRU5BQkxFCisJCQkJCQkJfHwgYl9JbnRlcnJ1cHRIYW5kbGluZworCQkJCQkJCT09IEFQQ0kxNzEwX0RJU0FCTEUpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBpbnRlcnJ1cHQgbm90IHVzZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoYl9JbnRlcnJ1cHRIYW5kbGluZworCQkJCQkJCQk9PQorCQkJCQkJCQlBUENJMTcxMF9ESVNBQkxFKQorCQkJCQkJCXsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIERpc2FibGUgdGhlIGludGVycnVwdCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlcgorCQkJCQkJCQkJJgorCQkJCQkJCQkJKDB4RkZGRkZGRkZVTAorCQkJCQkJCQkJLQorCQkJCQkJCQkJKDFVTCA8PCBiX1B1bHNlRW5jb2Rlck5icikpOworCQkJCQkJCX0gZWxzZSB7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogRW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfU2V0UmVnaXN0ZXIKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQkJCQlkd19TZXRSZWdpc3RlcgorCQkJCQkJCQkJfCAoMVVMCisJCQkJCQkJCQk8PAorCQkJCQkJCQkJYl9QdWxzZUVuY29kZXJOYnIpOworCQkJCQkJCQlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CS8vIFNhdmUgdGhlIGN1cnJlbnQgcHJvY2VzcyB0YXNrIHN0cnVjdHVyZQorCisJCQkJCQkJfQorCisJCQkJCQkJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCW91dGwoZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X1NldFJlZ2lzdGVyLAorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkrIDIwICsKKwkJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogRW5hYmxlIHRoZSBwdWxzZSBlbmNvZGVyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfQ29udHJvbFJlZ2lzdGVyCisJCQkJCQkJCQk9CisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfQ29udHJvbFJlZ2lzdGVyCisJCQkJCQkJCQl8ICgxVUwKKwkJCQkJCQkJCTw8CisJCQkJCQkJCQliX1B1bHNlRW5jb2Rlck5icik7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgY3ljbGUgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfQ29udHJvbFJlZ2lzdGVyCisJCQkJCQkJCQk9CisJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCWR3X0NvbnRyb2xSZWdpc3RlcgorCQkJCQkJCQkJJgorCQkJCQkJCQkJKDB4RkZGRkZGRkZVTAorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkoMSA8PCAoYl9QdWxzZUVuY29kZXJOYnIgKyA0KSkpKSB8ICgoYl9DeWNsZVNlbGVjdGlvbiAmIDFVTCkgPDwgKDQgKyBiX1B1bHNlRW5jb2Rlck5icikpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBFbmFibGUgdGhlIHB1bHNlIGVuY29kZXIgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJb3V0bChkZXZwcml2LT4KKwkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJZHdfQ29udHJvbFJlZ2lzdGVyLAorCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkrIDE2ICsKKwkJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBJbnRlcnJ1cHQgaGFuZGxpbmcgbW9kZSBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIkludGVycnVwdCBoYW5kbGluZyBtb2RlIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogQ3ljbGUgc2VsZWN0aW9uIG1vZGUgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIkN5Y2xlIHNlbGVjdGlvbiBtb2RlIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWNhc2UgQVBDSTE3MTBfRElTQUJMRToKKwkJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJZHdfQ29udHJvbFJlZ2lzdGVyID0KKwkJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJZHdfQ29udHJvbFJlZ2lzdGVyICYKKwkJCQkJCSgweEZGRkZGRkZGVUwgLQorCQkJCQkJKDFVTCA8PCBiX1B1bHNlRW5jb2Rlck5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpc2FibGUgdGhlIHB1bHNlIGVuY29kZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCWR3X0NvbnRyb2xSZWdpc3RlciwKKwkJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAxNiArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJYnJlYWs7CisJCQkJfQkvLyBzd2l0Y2ggRW5kCisKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFB1bHNlIGVuY29kZXIgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiUHVsc2UgZW5jb2RlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUHVsc2UgZW5jb2RlciBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1JlYWRQdWxzZUVuY29kZXJTdGF0dXMgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfUHVsc2VFbmNvZGVyTmJyLCAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gcGJfU3RhdHVzKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICBBUENJMTcxMF9QVUxTRUVOQ09ERVJfUkVBRCAgICAgICAgICA6IFJlYWRzIHRoZSBwdWxzZSBlbmNvZGVyIHN0YXR1cworCQkJCQkJCQkJCQlhbmQgdmFsdWVmcm9tIHNlbGVjdGVkIHB1bHNlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZW5jb2RlciAoYl9QdWxzZUVuY29kZXJOYnIpIGZyb20gc2VsZWN0ZWQgbW9kdWxlICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJQllURSAgIGJfVHlwZTsgZGF0YVswXQorICAgQVBDSTE3MTBfUFVMU0VFTkNPREVSX1dSSVRFCisgV3JpdGVzIGEgMzItYml0IHZhbHVlICh1bF9Xcml0ZVZhbHVlKSBpbnRvIHRoZSBzZWxlY3RlZHwKK3wgICAgICAgICAgICAgICAgICAgICBwdWxzZSBlbmNvZGVyIChiX1B1bHNlRW5jb2Rlck5icikgZnJvbSBzZWxlY3RlZCBtb2R1bGUgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gVGhpcyBvcGVyYXRpb24gc2V0IHRoZSBuZXcgc3RhcnQgcHVsc2UgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZW5jb2RlciB2YWx1ZS4KKyBBUENJMTcxMF9QVUxTRUVOQ09ERVJfUkVBRAorfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgYl9Cb2FyZEhhbmRsZSAgICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTB8Cit8ICAgICAgICAgICAgQ1JBUkVGKCkgICAgICAgICBCWVRFXyAgIGJfTW9kdWxOYnIgICAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSAoMCB0byAzKSAgICAgICB8Cit8ICAgICAgICAgICAgICBkYXRhWzFdICAgICAgIEJZVEVfICAgYl9QdWxzZUVuY29kZXJOYnIgICA6IFB1bHNlIGVuY29kZXIgc2VsZWN0aW9uICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykKKyAgIEFQQ0kxNzEwX1BVTFNFRU5DT0RFUl9XUklURQorCQkJCWRhdGFbMl0JCVVMT05HXyB1bF9Xcml0ZVZhbHVlICAgICAgICA6IDMyLWJpdCB2YWx1ZSB0byBiZSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlbiAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBQQllURV8gcGJfU3RhdHVzICAgICAgICAgICAgOiBQdWxzZSBlbmNvZGVyIHN0YXR1cy4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogTm8gb3ZlcmZsb3cgb2NjdXJ8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBPdmVyZmxvdyBvY2N1cgorCQkJCQkJUFVMT05HXyBwdWxfUmVhZFZhbHVlICAgICAgIDogUHVsc2UgZW5jb2RlciB2YWx1ZSAgICAgIHwgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFB1bHNlIGVuY29kZXIgbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0luaXRQdWxzZUVuY29kZXIiICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKl9JTlRfICAgaV9BUENJMTcxMF9SZWFkUHVsc2VFbmNvZGVyU3RhdHVzICAgICAgIChCWVRFXyAgIGJfQm9hcmRIYW5kbGUsCisJCQkJCQkgQllURV8gICBiX01vZHVsTmJyLAorCQkJCQkJIEJZVEVfICAgYl9QdWxzZUVuY29kZXJOYnIsCisKKyAgIAkJCQkJCSBQQllURV8gcGJfU3RhdHVzKQorCQkJCQkJICovCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1JlYWRXcml0ZVB1bHNlRW5jb2RlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZ2lzdGVyOworCUJZVEUgYl9Nb2R1bE5icjsKKwlCWVRFIGJfUHVsc2VFbmNvZGVyTmJyOworCVBCWVRFIHBiX1N0YXR1czsKKwlCWVRFIGJfVHlwZTsKKwlQVUxPTkcgcHVsX1JlYWRWYWx1ZTsKKwlVTE9ORyB1bF9Xcml0ZVZhbHVlOworCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1R5cGUgPSAoQllURSkgZGF0YVswXTsKKwliX1B1bHNlRW5jb2Rlck5iciA9IChCWVRFKSBkYXRhWzFdOworCXBiX1N0YXR1cyA9IChQQllURSkgJiBkYXRhWzBdOworCXB1bF9SZWFkVmFsdWUgPSAoUFVMT05HKSAmIGRhdGFbMV07CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgc2VsZWN0ZWQgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDw9IDMpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBzZWxlY3RlZCBwdWxzZSBlbmNvZGVyIG51bWJlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfUHVsc2VFbmNvZGVyTmJyIDw9IDMpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgcHVsc2UgZW5jb2RlciBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQlzX1B1bHNlRW5jb2RlckluZm9bYl9QdWxzZUVuY29kZXJOYnJdLgorCQkJCWJfUHVsc2VFbmNvZGVySW5pdCA9PSAxKSB7CisKKwkJCQlzd2l0Y2ggKGJfVHlwZSkgeworCQkJCWNhc2UgQVBDSTE3MTBfUFVMU0VFTkNPREVSX1JFQUQ6CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19TdGF0dXNSZWdpc3RlciA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDE2ICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQlkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1B1bHNlRW5jb2Rlck1vZHVsZUluZm8uCisJCQkJCQlkd19TdGF0dXNSZWdpc3RlciA9IGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJZHdfU3RhdHVzUmVnaXN0ZXIgfAorCQkJCQkJZHdfU3RhdHVzUmVnaXN0ZXI7CisKKwkJCQkJKnBiX1N0YXR1cyA9CisJCQkJCQkoQllURSkgKGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJZHdfU3RhdHVzUmVnaXN0ZXIgPj4gKDEgKworCQkJCQkJCWJfUHVsc2VFbmNvZGVyTmJyKSkgJiAxOworCisJCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCWR3X1N0YXR1c1JlZ2lzdGVyID0KKwkJCQkJCWRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLgorCQkJCQkJZHdfU3RhdHVzUmVnaXN0ZXIgJgorCQkJCQkJKDB4RkZGRkZGRkZVTCAtICgxIDw8ICgxICsKKwkJCQkJCQkJYl9QdWxzZUVuY29kZXJOYnIpKSk7CisKKwkJIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIHZhbHVlICovCisJCSAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCSpwdWxfUmVhZFZhbHVlID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCSg0ICogYl9QdWxzZUVuY29kZXJOYnIpICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEFQQ0kxNzEwX1BVTFNFRU5DT0RFUl9XUklURToKKwkJCQkJdWxfV3JpdGVWYWx1ZSA9IChVTE9ORykgZGF0YVsyXTsKKwkJCS8qKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBXcml0ZSB0aGUgdmFsdWUgKi8KKwkJCS8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCW91dGwodWxfV3JpdGVWYWx1ZSwKKwkJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKworCQkJCQkJKDQgKiBiX1B1bHNlRW5jb2Rlck5icikgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJfQkvL2VuZCBvZiBzd2l0Y2gKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFB1bHNlIGVuY29kZXIgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiUHVsc2UgZW5jb2RlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUHVsc2UgZW5jb2RlciBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJQdWxzZSBlbmNvZGVyIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkSW50ZXJydXB0UHVsc2VFbmNvZGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCWRhdGFbMF0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS5iX09sZE1vZHVsZU1hc2s7CisJZGF0YVsxXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZEludGVycnVwdE1hc2s7CisJZGF0YVsyXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZENvdW50ZXJMYXRjaFZhbHVlOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBJbmNyZW1lbnQgdGhlIHJlYWQgRklGTyAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCXVpX1JlYWQgPSAoZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkICsgMSkgJSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCXJldHVybiBpbnNuLT5uOworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lucF9jcHQuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSW5wX2NwdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MjUyODcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lucF9jcHQuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwX1NJTkdMRQkJCTAKKyNkZWZpbmUgQVBDSTE3MTBfQ09OVElOVU9VUwkJMQorCisjZGVmaW5lIEFQQ0kxNzEwX1BVTFNFRU5DT0RFUl9SRUFECTAKKyNkZWZpbmUgQVBDSTE3MTBfUFVMU0VFTkNPREVSX1dSSVRFCTEKKworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRQdWxzZUVuY29kZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVQdWxzZUVuY29kZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJCSAgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyoKKyAqIFJFQUQgUFVMU0UgRU5DT0RFUiBGVU5DVElPTlMKKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRJbnRlcnJ1cHRQdWxzZUVuY29kZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyoKKyAqIFdSSVRFIFBVTFNFIEVOQ09ERVIgRlVOQ1RJT05TCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzUmVhZFdyaXRlUHVsc2VFbmNvZGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1B3bS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Qd20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGRkMDkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Qd20uYwpAQCAtMCwwICsxLDM1ODggQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBJIEFQQ0kxNzEwICAgIHwgQ29tcGlsZXIgOiBnY2MgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBQV00uQyAgICAgICAgICAgfCBWZXJzaW9uICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgQVBDSS0xNzEwIFd1bHNlIHdpZGUgbW9kdWxhdGlvbiBtb2R1bGUgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMDgvMDUvMDAgfCBHdWlub3QgQyAgfCAtIDA0MDAvMDIyOCBBbGwgRnVuY3Rpb24gaW4gUklORyAwICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgIkFQQ0kxNzEwX1B3bS5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDpJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnUFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCitzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFB3bSBJbml0IGFuZCBHZXQgUHdtIEluaXRpYWxpc2F0aW9uICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdQV00oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUJZVEUgYl9Db25maWdUeXBlOworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwliX0NvbmZpZ1R5cGUgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYl9Db25maWdUeXBlKSB7CisJY2FzZSBBUENJMTcxMF9QV01fSU5JVDoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfSW5pdFBXTShkZXYsIChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwJLy8gIGJfTW9kdWxOYnIKKwkJCShCWVRFKSBkYXRhWzBdLAkvL2JfUFdNCisJCQkoQllURSkgZGF0YVsxXSwJLy8gYl9DbG9ja1NlbGVjdGlvbgorCQkJKEJZVEUpIGRhdGFbMl0sCS8vIGJfVGltaW5nVW5pdAorCQkJKFVMT05HKSBkYXRhWzNdLAkvL3VsX0xvd1RpbWluZworCQkJKFVMT05HKSBkYXRhWzRdLAkvL3VsX0hpZ2hUaW1pbmcKKwkJCShQVUxPTkcpICYgZGF0YVswXSwJLy9wdWxfUmVhbExvd1RpbWluZworCQkJKFBVTE9ORykgJiBkYXRhWzFdCS8vcHVsX1JlYWxIaWdoVGltaW5nCisJCQkpOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfUFdNX0dFVElOSVREQVRBOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9HZXRQV01Jbml0aWFsaXNhdGlvbihkZXYsIChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwJLy8gYl9Nb2R1bE5icgorCQkJKEJZVEUpIGRhdGFbMF0sCS8vYl9QV00KKwkJCShQQllURSkgJiBkYXRhWzBdLAkvL3BiX1RpbWluZ1VuaXQKKwkJCShQVUxPTkcpICYgZGF0YVsxXSwJLy9wdWxfTG93VGltaW5nCisJCQkoUFVMT05HKSAmIGRhdGFbMl0sCS8vcHVsX0hpZ2hUaW1pbmcKKwkJCShQQllURSkgJiBkYXRhWzNdLAkvLyBwYl9TdGFydExldmVsCisJCQkoUEJZVEUpICYgZGF0YVs0XSwJLy8gcGJfU3RvcE1vZGUKKwkJCShQQllURSkgJiBkYXRhWzVdLAkvLyBwYl9TdG9wTGV2ZWwKKwkJCShQQllURSkgJiBkYXRhWzZdLAkvLyBwYl9FeHRlcm5HYXRlCisJCQkoUEJZVEUpICYgZGF0YVs3XSwJLy8gcGJfSW50ZXJydXB0RW5hYmxlCisJCQkoUEJZVEUpICYgZGF0YVs4XQkvLyBwYl9FbmFibGUKKwkJCSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCIgQ29uZmlnIFBhcmFtZXRlciBXcm9uZ1xuIik7CisJfQorCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkKKwkJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfSW5pdFBXTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9QV00sICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX0Nsb2NrU2VsZWN0aW9uLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfVGltaW5nVW5pdCwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gICB1bF9Mb3dUaW1pbmcsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVMT05HXyAgIHVsX0hpZ2hUaW1pbmcsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfUmVhbExvd1RpbWluZywgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9SZWFsSGlnaFRpbWluZykgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmUgdGhlIHNlbGVjdGVkIFBXTSAoYl9QV00pIGZyb20gc2VsZWN0ZWQgbW9kdWxlfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsTmJyKS4gVGhlIHVsX0xvd1RpbWluZywgdWxfSGlnaFRpbWluZyBhbmQgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdWxfVGltaW5nVW5pdCBkZXRlcm1pbmUgdGhlIGxvdy9oaWdoIHRpbWluZyBiYXNlIGZvciAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aGUgcGVyaW9kLiBwdWxfUmVhbExvd1RpbWluZywgcHVsX1JlYWxIaWdoVGltaW5nICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGUgcmVhbCB0aW1pbmcgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgWW91IG11c3QgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGJlIGZvciB5b3UgY2FsbCBhbnkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBvdGhlciBmdW5jdGlvbiB3aXRjaCBhY2Nlc3Mgb2YgdGhlIFBXTS4gICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gICAgIGJfQm9hcmRIYW5kbGUgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gY29uZmlndXJlfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAgdG8gMykgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfUFdNICAgICAgICAgICAgOiBTZWxlY3RlZCBQV00gKDAgb3IgMSkuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9DbG9ja1NlbGVjdGlvbiA6IFNlbGVjdGlvbiBmcm9tIFBDSSBidXMgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zME1IWiA6ICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgMzAgTUh6ICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJIGJ1cyBjbG9jayAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zM01IWiA6ICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgMzMgTUh6ICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJIGJ1cyBjbG9jayAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF80ME1IWiAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBBUENJLTE3MTAgaGF2ZSBhICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdyYXRlZCA0ME1oeiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFydHouICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9UaW1pbmdVbml0ICAgICA6IEJhc2UgdGltaW5nIFVuaXQgKDAgdG8gNCkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogbnMgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiDDpnMgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBtcyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA6IHMgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IDogbW4gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICAgIHVsX0xvd1RpbWluZyAgICAgOiBMb3cgYmFzZSB0aW1pbmcgdmFsdWUuICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVTE9OR18gICAgdWxfSGlnaFRpbWluZyAgICA6IEhpZ2ggYmFzZSB0aW1pbmcgdmFsdWUuICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyAgcHVsX1JlYWxMb3dUaW1pbmcgIDogUmVhbCBsb3cgYmFzZSB0aW1pbmcgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4gICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gIHB1bF9SZWFsSGlnaFRpbWluZyA6IFJlYWwgaGlnaCBiYXNlIHRpbWluZyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBUaGUgc2VsZWN0ZWQgaW5wdXQgY2xvY2sgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6IFRpbWluZyBVbml0IHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNzogTG93IGJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC04OiBIaWdoIGJhc2UgdGltaW5nIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTk6IFlvdSBjYW4gbm90IHVzZWQgdGhlIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiB3aXRoICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5pdFBXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsCisJQllURSBiX1BXTSwKKwlCWVRFIGJfQ2xvY2tTZWxlY3Rpb24sCisJQllURSBiX1RpbWluZ1VuaXQsCisJVUxPTkcgdWxfTG93VGltaW5nLAorCVVMT05HIHVsX0hpZ2hUaW1pbmcsCisJUFVMT05HIHB1bF9SZWFsTG93VGltaW5nLCBQVUxPTkcgcHVsX1JlYWxIaWdoVGltaW5nKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlVTE9ORyB1bF9Mb3dUaW1lclZhbHVlID0gMDsKKwlVTE9ORyB1bF9IaWdoVGltZXJWYWx1ZSA9IDA7CisJRFdPUkQgZHdfQ29tbWFuZDsKKwlkb3VibGUgZF9SZWFsTG93VGltaW5nID0gMDsKKwlkb3VibGUgZF9SZWFsSGlnaFRpbWluZyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgUFdNICovCisJICAgLyoqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9QV00pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBQV00gc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9QV00gPD0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBjbG9jayAqLworCQkgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zME1IWikgfHwKKwkJCQkJKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzNNSFopIHx8CisJCQkJCShiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzQwTUhaKSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgdGltaW5nIHVuaXQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGJfVGltaW5nVW5pdCA8PSA0KSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgbG93IHRpbWluZyBzZWxlY3Rpb24gKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAwKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAyNjYpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQkweEZGRkZGRkZGVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk1NzEyMzA2NTBVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMikKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTU3MTIzMFVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAzKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNTcxVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDQpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9IDlVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMjQyKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJMHhGRkZGRkZGRlVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNTE5NjkxMDQzVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzNNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDIpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk1MTk2OTFVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMykKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTUyMFVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSA0KQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PSA4VUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDApCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDIwMCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTB4RkZGRkZGRkZVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF80ME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTQyOTQ5NjcyOVVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAyKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNDI5NDk2VUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDMpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk0MjlVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF80ME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gNCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTdVTCkpKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIEhpZ2ggdGltaW5nIHNlbGVjdGlvbiAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMCkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMjY2KSAmJiAodWxfSGlnaFRpbWluZyA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNTcxMjMwNjUwVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNTcxMjMwVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMykgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNTcxVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gNCkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gOVVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9IaWdoVGltaW5nID49IDI0MikgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gMHhGRkZGRkZGRlVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDEpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDUxOTY5MTA0M1VMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDIpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDUxOTY5MVVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDUyMFVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDQpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDhVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAwKSAmJiAodWxfSGlnaFRpbWluZyA+PSAyMDApICYmICh1bF9IaWdoVGltaW5nIDw9IDB4RkZGRkZGRkZVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA0Mjk0OTY3MjlVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAyKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA0Mjk0OTZVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAzKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA0MjlVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA3VUwpKSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgdGhlIGJvYXJkIHZlcnNpb24gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChkZXZwcml2LT5zX0JvYXJkSW5mb3MuYl9Cb2FyZFZlcnNpb24gPiAwKSkgfHwgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopKSB7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSBsb3cgZGl2aXNpb24gZmF0b3IgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlmcHVfYmVnaW4KKwkJCQkJCQkJCQkoKTsKKworCQkJCQkJCQkJc3dpdGNoIChiX1RpbWluZ1VuaXQpIHsKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIG5zICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAwOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMC4wMDAyNSAqIGJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1pbmcgKiAoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDAuMDAwMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDAuMDAwMjUKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgLyAoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpKnB1bF9SZWFsTG93VGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgIC8qKioqKiovCisJCQkJCQkJCQkJLyogw6ZzICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAxOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMC4yNSAqIGJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1pbmcgKiAoMC4yNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkwLjI1CisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlIC8gKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbExvd1RpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIG1zICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAyOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1pbmcgKiAoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJCWRfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgLyAoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbExvd1RpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKiovCisJCQkJCQkJCQkJLyogcyAqLworCQkJCSAgIC8qKioqKi8KKworCQkJCQkJCQkJY2FzZSAzOgorCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfTG93VGltaW5nCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltaW5nICogKDI1MDAwMC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpKnB1bF9SZWFsTG93VGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgIC8qKioqKiovCisJCQkJCQkJCQkJLyogbW4gKi8KKwkJCQkgICAvKioqKioqLworCisJCQkJCQkJCQljYXNlIDQ6CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkodWxfTG93VGltaW5nCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQk2MCkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSkodWxfTG93VGltaW5nICogNjAuMCkgKiAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCTYwOworCQkJCQkJCQkJCWRfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCTYwLjA7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpIC8gNjAuMCkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxMb3dUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKnB1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQkJfQorCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIGhpZ2ggZGl2aXNpb24gZmF0b3IgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJc3dpdGNoIChiX1RpbWluZ1VuaXQpIHsKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIG5zICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSAwOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgwLjAwMDI1ICogYl9DbG9ja1NlbGVjdGlvbikpOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1pbmcgKiAoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgwLjAwMDI1CisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSAvICgwLjAwMDI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgLyoqKioqKi8KKwkJCQkJCQkJCQkvKiDDpnMgKi8KKwkJCQkgICAvKioqKioqLworCisJCQkJCQkJCQljYXNlIDE6CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKDAuMjUgKiBiX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWluZyAqICgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQkJZF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkwLjI1CisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSAvICgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgLyoqKioqKi8KKwkJCQkJCQkJCQkvKiBtcyAqLworCQkJCSAgIC8qKioqKiovCisKKwkJCQkJCQkJCWNhc2UgMjoKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltaW5nICogKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgLyAoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbEhpZ2hUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKiovCisJCQkJCQkJCQkJLyogcyAqLworCQkJCSAgIC8qKioqKi8KKworCQkJCQkJCQkJY2FzZSAzOgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1pbmcgKiAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnB1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgLyAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKSpwdWxfUmVhbEhpZ2hUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAvKioqKioqLworCQkJCQkJCQkJCS8qIG1uICovCisJCQkJICAgLyoqKioqKi8KKworCQkJCQkJCQkJY2FzZSA0OgorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQk2MCkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSkodWxfSGlnaFRpbWluZyAqIDYwLjApICogKDI1MDAwMC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJfQorCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKQorCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCTYwOworCQkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpCisJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJNjAuMDsKKworCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpIC8gNjAuMCkgPj0gKGRvdWJsZSkoKGRvdWJsZSkqcHVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlmcHVfZW5kKCk7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTYXZlIHRoZSBjbG9jayBzZWxlY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb247CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgdGltaW5nIHVuaXQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCXNfUFdNSW5mbworCQkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQkJYl9UaW1pbmdVbml0CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWJfVGltaW5nVW5pdDsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgbG93IGJhc2UgdGltaW5nICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQkJW2JfUFdNXS4KKwkJCQkJCQkJCQlkX0xvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmc7CisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQkJW2JfUFdNXS4KKwkJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCSpwdWxfUmVhbExvd1RpbWluZzsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgaGlnaCBiYXNlIHRpbWluZyAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQkJCQkJCXNfUFdNSW5mbworCQkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQkJZF9IaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmc7CisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQkJW2JfUFdNXS4KKwkJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkqcHVsX1JlYWxIaWdoVGltaW5nOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFdyaXRlIHRoZSBsb3cgdGltaW5nICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bCh1bF9Mb3dUaW1lclZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDAgKyAoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFdyaXRlIHRoZSBoaWdoIHRpbWluZyAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlvdXRsKHVsX0hpZ2hUaW1lclZhbHVlLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDQgKyAoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2V0IHRoZSBjbG9jayBzZWxlY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQk4CisJCQkJCQkJCQkJKworCQkJCQkJCQkJCSgyMCAqIGJfUFdNKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCTB4N0Y7CisKKwkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkweDgwOworCQkJCQkJCQkJfQorCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCB0aGUgY2xvY2sgc2VsZWN0aW9uICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bChkd19Db21tYW5kLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDggKyAoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkvKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFBXTSBpbml0LiAqLworCQkJCS8qKioqKioqKioqKioqLworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCQlbYl9QV01dLgorCQkJCQkJCQkJCWJfUFdNSW5pdAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQl9IGVsc2UgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2l0aCAqLworCQkJCQkJCQkJLyogdGhpcyBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJRFBSSU5USygiWW91IGNhbiBub3QgdXNlZCB0aGUgNDBNSHogY2xvY2sgc2VsZWN0aW9uIHdpdGggdGhpcyBib2FyZFxuIik7CisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS05OworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogSGlnaCBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJRFBSSU5USygiSGlnaCBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS04OworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBMb3cgYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQlEUFJJTlRLKCJMb3cgYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTc7CisJCQkJCQl9CisJCQkJCX0JLy8gaWYgKChiX1RpbWluZ1VuaXQgPj0gMCkgJiYgKGJfVGltaW5nVW5pdCA8PSA0KSkKKwkJCQkJZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRpbWluZyB1bml0IHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQlEUFJJTlRLKCJUaW1pbmcgdW5pdCBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CS8vIGlmICgoYl9UaW1pbmdVbml0ID49IDApICYmIChiX1RpbWluZ1VuaXQgPD0gNCkpCisJCQkJfQkvLyBpZiAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfMzBNSFopIHx8IChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMzTUhaKSB8fCAoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF80ME1IWikpCisJCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIGNsb2NrIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIGNsb2NrIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0JLy8gaWYgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgfHwgKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopKQorCQkJfQkvLyBpZiAoYl9QV00gPj0gMCAmJiBiX1BXTSA8PSAxKQorCQkJZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRvciBQV00gc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCURQUklOVEsoIlRvciBQV00gc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CS8vIGlmIChiX1BXTSA+PSAwICYmIGJfUFdNIDw9IDEpCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9HZXRQV01Jbml0aWFsaXNhdGlvbiAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1BXTSwgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfVGltaW5nVW5pdCwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9Mb3dUaW1pbmcsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX0hpZ2hUaW1pbmcsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfU3RhcnRMZXZlbCwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9TdG9wTW9kZSwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX1N0b3BMZXZlbCwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfRXh0ZXJuR2F0ZSwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9JbnRlcnJ1cHRFbmFibGUsICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX0VuYWJsZSkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgUFdNIChiX1BXTSkgaW5pdGlhbGlzYXRpb24gZnJvbSBzZWxlY3RlZCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIChiX01vZHVsTmJyKS4gWW91IG11c3QgY2FsbGluZyB0aGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0UFdNIiBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgdGhpcyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9QV00gICAgICAgICA6IFNlbGVjdGVkIFBXTSAoMCBvciAxKSAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyAgcGJfVGltaW5nVW5pdCAgICAgIDogQmFzZSB0aW1pbmcgVW5pdCAoMCB0byA0KSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBucyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IMOmcyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IG1zICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIDogcyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgOiBtbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9Mb3dUaW1pbmcgICAgICA6IExvdyBiYXNlIHRpbWluZyB2YWx1ZS4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX0hpZ2hUaW1pbmcgICAgIDogSGlnaCBiYXNlIHRpbWluZyB2YWx1ZS4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICBwYl9TdGFydExldmVsICAgICAgOiBTdGFydCBwZXJpb2QgbGV2ZWwgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogVGhlIHBlcmlvZCBzdGFydCB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgbG93IGxldmVsIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IFRoZSBwZXJpb2Qgc3RhcnQgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhIGhpZ2ggbGV2ZWx8Cit8ICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICBwYl9TdG9wTW9kZSAgICAgICAgOiBTdG9wIG1vZGUgc2VsZWN0aW9uICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaGUgUFdNIGlzIHN0b3BwZWQgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGFmdGVyIHRoZSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNInwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhbmQgYnJlYWsgdGhlfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgcGVyaW9kICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQWZ0ZXIgdGhlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0Rpc2FibGVQV00ifAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRoZSBQV00gaXMgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHBlZCBhdCB0aGUgZW5kICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIGxhc3QgcGVyaW9kIGN5Y2xlfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfU3RvcExldmVsICAgICAgICA6IFN0b3AgUFdNIGxldmVsIHNlbGVjdGlvbiB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaGUgb3V0cHV0IHNpZ25hbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXAgdGhlIGxldmVsIGFmdGVyfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNInwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogVGhlIG91dHB1dCBzaWduYWwgaXN8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgdG8gbG93IGFmdGVyIHRoZXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0Rpc2FibGVQV00ifAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgOiBUaGUgb3V0cHV0IHNpZ25hbCBpc3wKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0byBoaWdoIGFmdGVyICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNInwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfRXh0ZXJuR2F0ZSAgICAgIDogRXh0ZXJuIGdhdGUgYWN0aW9uICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogRXh0ZXJuIGdhdGUgc2lnbmFsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgdXNlZC4gICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IEV4dGVybiBnYXRlIHNpZ25hbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZC4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfSW50ZXJydXB0RW5hYmxlIDogRW5hYmxlIG9yIGRpc2FibGUgdGhlIFBXTSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQuICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfRU5BQkxFIDogICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIFBXTSBpbnRlcnJ1cHR8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgaW50ZXJydXB0IG9jY3VyIGFmdGVyIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBwZXJpb2QgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF9ESVNBQkxFIDogICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgdGhlIFBXTSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfRW5hYmxlICAgICAgICAgIDogSW5kaWNhdGUgaWYgdGhlIFBXTSBpcyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkIG9yIG5vICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IFBXTSBub3QgZW5hYmxlZCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogUFdNIGVuYWJsZWQgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBQV00gc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IFBXTSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFBXTSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9HZXRQV01Jbml0aWFsaXNhdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsCisJQllURSBiX1BXTSwKKwlQQllURSBwYl9UaW1pbmdVbml0LAorCVBVTE9ORyBwdWxfTG93VGltaW5nLAorCVBVTE9ORyBwdWxfSGlnaFRpbWluZywKKwlQQllURSBwYl9TdGFydExldmVsLAorCVBCWVRFIHBiX1N0b3BNb2RlLAorCVBCWVRFIHBiX1N0b3BMZXZlbCwKKwlQQllURSBwYl9FeHRlcm5HYXRlLCBQQllURSBwYl9JbnRlcnJ1cHRFbmFibGUsIFBCWVRFIHBiX0VuYWJsZSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzOworCURXT1JEIGR3X0NvbW1hbmQ7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgUFdNICovCisJICAgLyoqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9QV00pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBQV00gc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9QV00gPD0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIFBXTSBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAxMiArICgyMCAqIGJfUFdNKSArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCWlmIChkd19TdGF0dXMgJiAweDEwKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIGxvdyB0aW1pbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkqcHVsX0xvd1RpbWluZyA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDAgKyAoMjAgKiBiX1BXTSkgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHRoZSBoaWdoIHRpbWluZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkqcHVsX0hpZ2hUaW1pbmcgPQorCQkJCQkJaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyA0ICsgKDIwICogYl9QV00pICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHRoZSBjb21tYW5kICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfQ29tbWFuZCA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgOCArICgyMCAqIGJfUFdNKSArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJKnBiX1N0YXJ0TGV2ZWwgPQorCQkJCQkJKEJZVEUpICgoZHdfQ29tbWFuZCA+PiA1KSAmIDEpOworCQkJCQkqcGJfU3RvcE1vZGUgPQorCQkJCQkJKEJZVEUpICgoZHdfQ29tbWFuZCA+PiAwKSAmIDEpOworCQkJCQkqcGJfU3RvcExldmVsID0KKwkJCQkJCShCWVRFKSAoKGR3X0NvbW1hbmQgPj4gMSkgJiAxKTsKKwkJCQkJKnBiX0V4dGVybkdhdGUgPQorCQkJCQkJKEJZVEUpICgoZHdfQ29tbWFuZCA+PiA0KSAmIDEpOworCQkJCQkqcGJfSW50ZXJydXB0RW5hYmxlID0KKwkJCQkJCShCWVRFKSAoKGR3X0NvbW1hbmQgPj4gMykgJiAxKTsKKworCQkJCQlpZiAoKnBiX1N0b3BMZXZlbCkgeworCQkJCQkJKnBiX1N0b3BMZXZlbCA9CisJCQkJCQkJKnBiX1N0b3BMZXZlbCArCisJCQkJCQkJKEJZVEUpICgoZHdfQ29tbWFuZCA+PgorCQkJCQkJCQkyKSAmIDEpOworCQkJCQl9CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCB0aGUgY29tbWFuZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWR3X0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDggKyAoMjAgKiBiX1BXTSkgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCSpwYl9FbmFibGUgPQorCQkJCQkJKEJZVEUpICgoZHdfQ29tbWFuZCA+PiAwKSAmIDEpOworCisJCQkJCSpwYl9UaW1pbmdVbml0ID0gZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQlzX1BXTUluZm9bYl9QV01dLmJfVGltaW5nVW5pdDsKKwkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBQV00gbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCURQUklOVEsoIlBXTSBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUb3IgUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlEUFJJTlRLKCJUb3IgUFdNIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQkvLyBpZiAoYl9QV00gPj0gMCAmJiBiX1BXTSA8PSAxKQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6SU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlUFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCitzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFB3bSBFbmFibGUgRGlzYWJsZSBhbmQgU2V0IE5ldyBUaW1pbmcgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZVBXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJQllURSBiX1dyaXRlVHlwZTsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJYl9Xcml0ZVR5cGUgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYl9Xcml0ZVR5cGUpIHsKKwljYXNlIEFQQ0kxNzEwX1BXTV9FTkFCTEU6CisJCWlfUmV0dXJuVmFsdWUgPSBpX0FQQ0kxNzEwX0VuYWJsZVBXTShkZXYsCisJCQkoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyksCisJCQkoQllURSkgZGF0YVswXSwKKwkJCShCWVRFKSBkYXRhWzFdLAorCQkJKEJZVEUpIGRhdGFbMl0sCisJCQkoQllURSkgZGF0YVszXSwgKEJZVEUpIGRhdGFbNF0sIChCWVRFKSBkYXRhWzVdKTsKKwkJYnJlYWs7CisKKwljYXNlIEFQQ0kxNzEwX1BXTV9ESVNBQkxFOgorCQlpX1JldHVyblZhbHVlID0gaV9BUENJMTcxMF9EaXNhYmxlUFdNKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwgKEJZVEUpIGRhdGFbMF0pOworCQlicmVhazsKKworCWNhc2UgQVBDSTE3MTBfUFdNX05FV1RJTUlORzoKKwkJaV9SZXR1cm5WYWx1ZSA9IGlfQVBDSTE3MTBfU2V0TmV3UFdNVGltaW5nKGRldiwKKwkJCShCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKSwKKwkJCShCWVRFKSBkYXRhWzBdLAorCQkJKEJZVEUpIGRhdGFbMV0sIChVTE9ORykgZGF0YVsyXSwgKFVMT05HKSBkYXRhWzNdKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoIldyaXRlIENvbmZpZyBQYXJhbWV0ZXIgV3JvbmdcbiIpOworCX0KKworCWlmIChpX1JldHVyblZhbHVlID49IDApCisJCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgICAgaV9BUENJMTcxMF9FbmFibGVQV00gICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfUFdNLCAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9TdGFydExldmVsLCAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX1N0b3BNb2RlLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfU3RvcExldmVsLCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9FeHRlcm5HYXRlLCAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX0ludGVycnVwdEVuYWJsZSkgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSB0aGUgc2VsZWN0ZWQgUFdNIChiX1BXTSkgZnJvbSBzZWxlY3RlZCBtb2R1bGUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxOYnIpLiBZb3UgbXVzdCBjYWxsaW5nIHRoZSAiaV9BUENJMTcxMF9Jbml0UFdNInwKK3wgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgdGhpcyBmdW5jdGlvbi4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBlbmFibGUgdGhlIFBXTSBpbnRlcnJ1cHQsIHRoZSBQV00gZ2VuZXJhdGUgYSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IGFmdGVyIGVhY2ggcGVyaW9kLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIgYW5kIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBtYXNrIGRlc2NyaXB0aW9uIGNoYXB0ZXIuICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1BXTSAgICAgICAgICAgICA6IFNlbGVjdGVkIFBXTSAoMCBvciAxKSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfU3RhcnRMZXZlbCAgICAgIDogU3RhcnQgcGVyaW9kIGxldmVsIHNlbGVjdGlvbiB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IFRoZSBwZXJpb2Qgc3RhcnQgd2l0aCBhIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93IGxldmVsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBUaGUgcGVyaW9kIHN0YXJ0IHdpdGggYSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2ggbGV2ZWwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX1N0b3BNb2RlICAgICAgICA6IFN0b3AgbW9kZSBzZWxlY3Rpb24gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBUaGUgUFdNIGlzIHN0b3BwZWQgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGx5IGFmdGVyIHRoZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRGlzYWJsZVBXTSIgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhbmQgYnJlYWsgdGhlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgcGVyaW9kICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQWZ0ZXIgdGhlICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNIiB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0aGUgUFdNIGlzICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BwZWQgYXQgdGhlIGVuZCBmcm9tfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBwZXJpb2QgY3ljbGUuICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9TdG9wTGV2ZWwgICAgICAgOiBTdG9wIFBXTSBsZXZlbCBzZWxlY3Rpb24gICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogVGhlIG91dHB1dCBzaWduYWwga2VlcCAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGV2ZWwgYWZ0ZXIgdGhlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0Rpc2FibGVQV00iIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBUaGUgb3V0cHV0IHNpZ25hbCBpcyBzZXR8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGxvdyBhZnRlciB0aGUgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRGlzYWJsZVBXTSIgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IFRoZSBvdXRwdXQgc2lnbmFsIGlzIHNldHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gaGlnaCBhZnRlciB0aGUgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9EaXNhYmxlUFdNIiB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0V4dGVybkdhdGUgICAgICA6IEV4dGVybiBnYXRlIGFjdGlvbiBzZWxlY3Rpb24gfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBFeHRlcm4gZ2F0ZSBzaWduYWwgbm90ICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQuICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogRXh0ZXJuIGdhdGUgc2lnbmFsIHVzZWQufAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW50ZXJydXB0RW5hYmxlIDogRW5hYmxlIG9yIGRpc2FibGUgdGhlIFBXTSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQuICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfRU5BQkxFIDogICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmFibGUgdGhlIFBXTSBpbnRlcnJ1cHQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgaW50ZXJydXB0IG9jY3VyIGFmdGVyICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBwZXJpb2QgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF9ESVNBQkxFIDogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgdGhlIFBXTSBpbnRlcnJ1cHQgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiAgTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6ICBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogIE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiAgVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6ICBQV00gc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogIFBXTSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFBXTSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6ICBQV00gc3RhcnQgbGV2ZWwgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNzogIFBXTSBzdG9wIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC04OiAgUFdNIHN0b3AgbGV2ZWwgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTk6ICBFeHRlcm4gZ2F0ZSBzaWduYWwgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTA6IEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMTogSW50ZXJydXB0IGZ1bmN0aW9uIG5vdCBpbml0aWFsaXNlZC4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0VuYWJsZVBXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlCWVRFIGJfTW9kdWxOYnIsCisJQllURSBiX1BXTSwKKwlCWVRFIGJfU3RhcnRMZXZlbCwKKwlCWVRFIGJfU3RvcE1vZGUsCisJQllURSBiX1N0b3BMZXZlbCwgQllURSBiX0V4dGVybkdhdGUsIEJZVEUgYl9JbnRlcnJ1cHRFbmFibGUpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1czsKKwlEV09SRCBkd19Db21tYW5kOworCisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgUFdNICovCisJICAgLyoqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9QV00pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBQV00gc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9QV00gPD0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIFBXTSBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAxMiArICgyMCAqIGJfUFdNKSArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCWlmIChkd19TdGF0dXMgJiAweDEwKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgc3RhcnQgbGV2ZWwgc2VsZWN0aW9uICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9TdGFydExldmVsIDw9IDEpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgc3RvcCBtb2RlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGJfU3RvcE1vZGUgPD0gMSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgc3RvcCBsZXZlbCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoYl9TdG9wTGV2ZWwgPD0gMikgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgdGhlIGV4dGVybiBnYXRlIG1vZGUgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmIChiX0V4dGVybkdhdGUKKwkJCQkJCQkJCTw9IDEpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUZXN0IHRoZSBpbnRlcnJ1cHQgYWN0aW9uICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFIHx8IGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0RJU0FCTEUpIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IGZ1bmN0aW9uIGluaXRpYWxpc2VkICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSZWFkIHRoZSBjb21tYW5kICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTgKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQkmCisJCQkJCQkJCQkJCTB4ODA7CisKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogTWFrZSB0aGUgY29tbWFuZCAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJYl9TdG9wTW9kZQorCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCShiX0ludGVycnVwdEVuYWJsZQorCQkJCQkJCQkJCQk8PAorCQkJCQkJCQkJCQkzKQorCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCShiX0V4dGVybkdhdGUKKwkJCQkJCQkJCQkJPDwKKwkJCQkJCQkJCQkJNCkKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkoYl9TdGFydExldmVsCisJCQkJCQkJCQkJCTw8CisJCQkJCQkJCQkJCTUpOworCisJCQkJCQkJCQkJaWYgKGJfU3RvcExldmVsICYgMykgeworCQkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJCWlmIChiX1N0b3BMZXZlbCAmIDIpIHsKKwkJCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJCQk0OworCQkJCQkJCQkJCQl9CisJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJCQkJCQkJc19QV01JbmZvCisJCQkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQkJCWJfSW50ZXJydXB0RW5hYmxlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJYl9JbnRlcnJ1cHRFbmFibGU7CisKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBTZXQgdGhlIGNvbW1hbmQgKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCW91dGwoZHdfQ29tbWFuZCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA4ICsgKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBFbmFibGUgdGhlIFBXTSAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJb3V0bCgxLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDEyICsgKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQkJfQkvLyBpZiAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFIHx8IGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0RJU0FCTEUpCisJCQkJCQkJCQllbHNlIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQlEUFJJTlRLKCJJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJLTEwOworCQkJCQkJCQkJfQkvLyBpZiAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFIHx8IGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0RJU0FCTEUpCisJCQkJCQkJCX0JLy8gaWYgKGJfRXh0ZXJuR2F0ZSA+PSAwICYmIGJfRXh0ZXJuR2F0ZSA8PSAxKQorCQkJCQkJCQllbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBFeHRlcm4gZ2F0ZSBzaWduYWwgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJRFBSSU5USygiRXh0ZXJuIGdhdGUgc2lnbmFsIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS05OworCQkJCQkJCQl9CS8vIGlmIChiX0V4dGVybkdhdGUgPj0gMCAmJiBiX0V4dGVybkdhdGUgPD0gMSkKKwkJCQkJCQl9CS8vIGlmIChiX1N0b3BMZXZlbCA+PSAwICYmIGJfU3RvcExldmVsIDw9IDIpCisJCQkJCQkJZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBQV00gc3RvcCBsZXZlbCBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCURQUklOVEsoIlBXTSBzdG9wIGxldmVsIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTg7CisJCQkJCQkJfQkvLyBpZiAoYl9TdG9wTGV2ZWwgPj0gMCAmJiBiX1N0b3BMZXZlbCA8PSAyKQorCQkJCQkJfQkvLyBpZiAoYl9TdG9wTW9kZSA+PSAwICYmIGJfU3RvcE1vZGUgPD0gMSkKKwkJCQkJCWVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFBXTSBzdG9wIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJRFBSSU5USygiUFdNIHN0b3AgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNzsKKwkJCQkJCX0JLy8gaWYgKGJfU3RvcE1vZGUgPj0gMCAmJiBiX1N0b3BNb2RlIDw9IDEpCisJCQkJCX0JLy8gaWYgKGJfU3RhcnRMZXZlbCA+PSAwICYmIGJfU3RhcnRMZXZlbCA8PSAxKQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFBXTSBzdGFydCBsZXZlbCBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCURQUklOVEsoIlBXTSBzdGFydCBsZXZlbCBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CS8vIGlmIChiX1N0YXJ0TGV2ZWwgPj0gMCAmJiBiX1N0YXJ0TGV2ZWwgPD0gMSkKKwkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBQV00gbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCURQUklOVEsoIlBXTSBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUb3IgUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlEUFJJTlRLKCJUb3IgUFdNIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQkvLyBpZiAoYl9QV00gPj0gMCAmJiBiX1BXTSA8PSAxKQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRGlzYWJsZVBXTSAoQllURV8gIGJfQm9hcmRIYW5kbGUsICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5iciwgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICBiX1BXTSkgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRGlzYWJsZSB0aGUgc2VsZWN0ZWQgUFdNIChiX1BXTSkgZnJvbSBzZWxlY3RlZCBtb2R1bGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikuIFRoZSBvdXRwdXQgc2lnbmFsIGxldmVsIGRlcGVuZCBvZiB0aGUgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpc2F0aW9uIGJ5IHRoZSAiaV9BUENJMTcxMF9FbmFibGVQV00iLiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgU2VlIHRoZSBiX1N0YXJ0TGV2ZWwsIGJfU3RvcE1vZGUgYW5kIGJfU3RvcExldmVsICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzIGZyb20gdGhpcyBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDpCWVRFXyBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpICAgfAorfCAgICAgICAgICAgICAgICAgICAgQllURV8gYl9QV00gICAgICAgICA6IFNlbGVjdGVkIFBXTSAoMCBvciAxKSAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogUFdNIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBQV00gbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRQV00iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogUFdNIG5vdCBlbmFibGVkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9FbmFibGVQV00iICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0Rpc2FibGVQV00oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIEJZVEUgYl9Nb2R1bE5iciwgQllURSBiX1BXTSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFBXTSAqLworCSAgIC8qKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfUFdNKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgUFdNIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfUFdNIDw9IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBQV00gaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTIgKyAoMjAgKiBiX1BXTSkgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQlpZiAoZHdfU3RhdHVzICYgMHgxMCkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIFBXTSBlbmFibGVkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGR3X1N0YXR1cyAmIDB4MSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBEaXNhYmxlIHRoZSBQV00gKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDEyICsKKwkJCQkJCQkoMjAgKiBiX1BXTSkgKworCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxKQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUFdNIG5vdCBlbmFibGVkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCURQUklOVEsoIlBXTSBub3QgZW5hYmxlZFxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MSkKKwkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBQV00gbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCURQUklOVEsoIiBQV00gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MTApCisJCQl9CS8vIGlmIChiX1BXTSA+PSAwICYmIGJfUFdNIDw9IDEpCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX1NldE5ld1BXTVRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfUFdNLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9DbG9ja1NlbGVjdGlvbiwgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1RpbWluZ1VuaXQsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICAgdWxfTG93VGltaW5nLCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gICB1bF9IaWdoVGltaW5nKSAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXQgYSBuZXcgdGltaW5nLiBUaGUgdWxfTG93VGltaW5nLCB1bF9IaWdoVGltaW5nIGFuZCAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVsX1RpbWluZ1VuaXQgZGV0ZXJtaW5lIHRoZSBsb3cvaGlnaCB0aW1pbmcgYmFzZSBmb3IgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdGhlIHBlcmlvZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICAgICBiX0JvYXJkSGFuZGxlICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvIGNvbmZpZ3VyZXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIHRvIDMpICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1BXTSAgICAgICAgICAgIDogU2VsZWN0ZWQgUFdNICgwIG9yIDEpLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfVGltaW5nVW5pdCAgICAgOiBCYXNlIHRpbWluZyBVbml0ICgwIHRvIDQpIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IG5zICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogw6ZzICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogbXMgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgOiBzICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA6IG1uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVMT05HXyAgICB1bF9Mb3dUaW1pbmcgICAgIDogTG93IGJhc2UgdGltaW5nIHZhbHVlLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICAgIHVsX0hpZ2hUaW1pbmcgICAgOiBIaWdoIGJhc2UgdGltaW5nIHZhbHVlLiAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFBXTSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogUFdNIG5vdCBpbml0aWFsaXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC02OiBUaW1pbmcgVW5pdCBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTc6IExvdyBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtODogSGlnaCBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfU2V0TmV3UFdNVGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCUJZVEUgYl9Nb2R1bE5iciwKKwlCWVRFIGJfUFdNLCBCWVRFIGJfVGltaW5nVW5pdCwgVUxPTkcgdWxfTG93VGltaW5nLCBVTE9ORyB1bF9IaWdoVGltaW5nKQoreworCUJZVEUgYl9DbG9ja1NlbGVjdGlvbjsKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJVUxPTkcgdWxfTG93VGltZXJWYWx1ZSA9IDA7CisJVUxPTkcgdWxfSGlnaFRpbWVyVmFsdWUgPSAwOworCVVMT05HIHVsX1JlYWxMb3dUaW1pbmcgPSAwOworCVVMT05HIHVsX1JlYWxIaWdoVGltaW5nID0gMDsKKwlEV09SRCBkd19TdGF0dXM7CisJRFdPUkQgZHdfQ29tbWFuZDsKKwlkb3VibGUgZF9SZWFsTG93VGltaW5nID0gMDsKKwlkb3VibGUgZF9SZWFsSGlnaFRpbWluZyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgUFdNICovCisJICAgLyoqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9QV00pIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBQV00gc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9QV00gPD0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIFBXTSBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyAxMiArICgyMCAqIGJfUFdNKSArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCWlmIChkd19TdGF0dXMgJiAweDEwKSB7CisJCQkJCWJfQ2xvY2tTZWxlY3Rpb24gPSBkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJCWJfQ2xvY2tTZWxlY3Rpb247CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIHRpbWluZyB1bml0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX1RpbWluZ1VuaXQgPD0gNCkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIGxvdyB0aW1pbmcgc2VsZWN0aW9uICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMjY2KQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJMHhGRkZGRkZGRlVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNTcxMjMwNjUwVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDIpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk1NzEyMzBVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMykKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTU3MVVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSA0KQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PSA5VUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzNNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDApCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDI0MikKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTB4RkZGRkZGRkZVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTUxOTY5MTA0M1VMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzMzTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAyKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNTE5NjkxVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfMzNNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDMpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk1MjBVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gNCkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0gOFVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAwKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAyMDApCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQkweEZGRkZGRkZGVUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk0Mjk0OTY3MjlVTCkpCisJCQkJCQkJfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09CisJCQkJCQkJCQlBUENJMTcxMF80ME1IWikKKwkJCQkJCQkJJiYgKGJfVGltaW5nVW5pdAorCQkJCQkJCQkJPT0gMikKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPj0gMSkKKwkJCQkJCQkJJiYgKHVsX0xvd1RpbWluZworCQkJCQkJCQkJPD0KKwkJCQkJCQkJCTQyOTQ5NlVMKSkKKwkJCQkJCQl8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0KKwkJCQkJCQkJCUFQQ0kxNzEwXzQwTUhaKQorCQkJCQkJCQkmJiAoYl9UaW1pbmdVbml0CisJCQkJCQkJCQk9PSAzKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk+PSAxKQorCQkJCQkJCQkmJiAodWxfTG93VGltaW5nCisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNDI5VUwpKQorCQkJCQkJCXx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PQorCQkJCQkJCQkJQVBDSTE3MTBfNDBNSFopCisJCQkJCQkJCSYmIChiX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT09IDQpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCT49IDEpCisJCQkJCQkJCSYmICh1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCTw9CisJCQkJCQkJCQk3VUwpKSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBIaWdoIHRpbWluZyBzZWxlY3Rpb24gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9IaWdoVGltaW5nID49IDI2NikgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gMHhGRkZGRkZGRlVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDEpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDU3MTIzMDY1MFVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDIpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDU3MTIzMFVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDU3MVVMKSkgfHwgKChiX0Nsb2NrU2VsZWN0aW9uID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDQpICYmICh1bF9IaWdoVGltaW5nID49IDEpICYmICh1bF9IaWdoVGltaW5nIDw9IDlVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAwKSAmJiAodWxfSGlnaFRpbWluZyA+PSAyNDIpICYmICh1bF9IaWdoVGltaW5nIDw9IDB4RkZGRkZGRkZVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA1MTk2OTEwNDNVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAyKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA1MTk2OTFVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAzKSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA1MjBVTCkpIHx8ICgoYl9DbG9ja1NlbGVjdGlvbiA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfSGlnaFRpbWluZyA+PSAxKSAmJiAodWxfSGlnaFRpbWluZyA8PSA4VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMCkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMjAwKSAmJiAodWxfSGlnaFRpbWluZyA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNDI5NDk2NzI5VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNDI5NDk2VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMykgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gNDI5VUwpKSB8fCAoKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gNCkgJiYgKHVsX0hpZ2hUaW1pbmcgPj0gMSkgJiYgKHVsX0hpZ2hUaW1pbmcgPD0gN1VMKSkpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSBsb3cgZGl2aXNpb24gZmF0b3IgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlmcHVfYmVnaW4oKTsKKwkJCQkJCQkJc3dpdGNoIChiX1RpbWluZ1VuaXQpIHsKKwkJCQkvKioqKioqLworCQkJCQkJCQkJLyogbnMgKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgMDoKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0xvd1RpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMC4wMDAyNSAqIGJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltaW5nICogKDAuMDAwMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjAwMDI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjAwMDI1CisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgLyAoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbExvd1RpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkyOworCisJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlicmVhazsKKworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiDDpnMgKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgMToKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0xvd1RpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMC4yNSAqIGJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltaW5nICogKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQlkX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCTAuMjUKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSAvICgwLjI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsTG93VGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCWJyZWFrOworCisJCQkJLyoqKioqKi8KKwkJCQkJCQkJCS8qIG1zICovCisJCQkJLyoqKioqKi8KKworCQkJCQkJCQljYXNlIDI6CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCSgyNTAuMAorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltaW5nICogKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCWRfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MC4wCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgLyAoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxMb3dUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkvKioqKiovCisJCQkJCQkJCQkvKiBzICovCisJCQkJLyoqKioqLworCisJCQkJCQkJCWNhc2UgMzoKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0xvd1RpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWluZyAqICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfTG93VGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbExvd1RpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX0xvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltZXJWYWx1ZQorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkyOworCisJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlicmVhazsKKworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiBtbiAqLworCQkJCS8qKioqKiovCisKKwkJCQkJCQkJY2FzZSA0OgorCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkoCisJCQkJCQkJCQkJKHVsX0xvd1RpbWluZworCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTYwKQorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKSh1bF9Mb3dUaW1pbmcgKiA2MC4wKSAqICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0xvd1RpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCTYwOworCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCTYwLjA7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoKGRvdWJsZSl1bF9Mb3dUaW1lclZhbHVlIC8gKDI1MDAwMC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgLyA2MC4wKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxMb3dUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbExvd1RpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1JlYWxMb3dUaW1pbmcKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9Mb3dUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfTG93VGltaW5nCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0xvd1RpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9Mb3dUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCSh1bF9Mb3dUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSBoaWdoIGRpdmlzaW9uIGZhdG9yICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCXN3aXRjaCAoYl9UaW1pbmdVbml0KSB7CisJCQkJLyoqKioqKi8KKwkJCQkJCQkJCS8qIG5zICovCisJCQkJLyoqKioqKi8KKworCQkJCQkJCQljYXNlIDA6CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMC4wMDAyNSAqIGJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWluZyAqICgwLjAwMDI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgKyAwLjUpKSkgeworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIENhbGN1bGF0ZSB0aGUgcmVhbCB0aW1pbmcgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgwLjAwMDI1ICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDAuMDAwMjUKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKTsKKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgLyAoMC4wMDAyNSAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbEhpZ2hUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlicmVhazsKKworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiDDpnMgKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgMToKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCSgwLjI1ICogYl9DbG9ja1NlbGVjdGlvbikpOworCisJCQkJCS8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltaW5nICogKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKTsKKwkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoCisJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkwLjI1CisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlIC8gKDAuMjUgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxIaWdoVGltaW5nICsgMC41KSkgeworCQkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCWlmIChiX0Nsb2NrU2VsZWN0aW9uICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJKHVsX0hpZ2hUaW1lclZhbHVlKQorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkvKioqKioqLworCQkJCQkJCQkJLyogbXMgKi8KKwkJCQkvKioqKioqLworCisJCQkJCQkJCWNhc2UgMjoKKworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMjUwLjAKKwkJCQkJCQkJCQkqCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1pbmcgKiAoMjUwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSk7CisJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MC4wCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbik7CisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlIC8gKDI1MC4wICogKGRvdWJsZSliX0Nsb2NrU2VsZWN0aW9uKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsSGlnaFRpbWluZyArIDAuNSkpIHsKKwkJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJLQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkyOworCisJCQkJCQkJCQlpZiAoYl9DbG9ja1NlbGVjdGlvbiAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCWJyZWFrOworCisJCQkJLyoqKioqLworCQkJCQkJCQkJLyogcyAqLworCQkJCS8qKioqKi8KKworCQkJCQkJCQljYXNlIDM6CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWluZworCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSk7CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1pbmcgKiAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJYl9DbG9ja1NlbGVjdGlvbikpOworCQkJCQkJCQkJZF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pOworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9IaWdoVGltZXJWYWx1ZSAvICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbEhpZ2hUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlicmVhazsKKworCQkJCS8qKioqKiovCisJCQkJCQkJCQkvKiBtbiAqLworCQkJCS8qKioqKiovCisKKwkJCQkJCQkJY2FzZSA0OgorCisJCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUaW1lciAwIGZhY3RvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJKAorCQkJCQkJCQkJCSh1bF9IaWdoVGltaW5nCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJNjApCisJCQkJCQkJCQkJKgorCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKTsKKworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpKHVsX0hpZ2hUaW1pbmcgKiA2MC4wKSAqICgyNTAwMDAuMCAqIChkb3VibGUpYl9DbG9ja1NlbGVjdGlvbikpID49ICgoZG91YmxlKSgoZG91YmxlKXVsX0hpZ2hUaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCX0KKworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCSh1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQliX0Nsb2NrU2VsZWN0aW9uKSkKKwkJCQkJCQkJCQkvCisJCQkJCQkJCQkJNjA7CisJCQkJCQkJCQlkX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCXVsX0hpZ2hUaW1lclZhbHVlCisJCQkJCQkJCQkJLworCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCWJfQ2xvY2tTZWxlY3Rpb24pKQorCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQk2MC4wOworCisJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKChkb3VibGUpdWxfSGlnaFRpbWVyVmFsdWUgLyAoMjUwMDAwLjAgKiAoZG91YmxlKWJfQ2xvY2tTZWxlY3Rpb24pKSAvIDYwLjApID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbEhpZ2hUaW1pbmcgKyAwLjUpKSB7CisJCQkJCQkJCQkJdWxfUmVhbEhpZ2hUaW1pbmcKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQl9CisKKwkJCQkJCQkJCXVsX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWluZworCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJdWxfSGlnaFRpbWVyVmFsdWUKKwkJCQkJCQkJCQktCisJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQl1bF9IaWdoVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkodWxfSGlnaFRpbWVyVmFsdWUpCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJfQorCisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJfQorCisJCQkJCQkJCWZwdV9lbmQoKTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTYXZlIHRoZSB0aW1pbmcgdW5pdCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQliX1RpbWluZ1VuaXQKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWJfVGltaW5nVW5pdDsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogU2F2ZSB0aGUgbG93IGJhc2UgdGltaW5nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQlkX0xvd1RpbWluZworCQkJCQkJCQkJPQorCQkJCQkJCQkJZF9SZWFsTG93VGltaW5nOworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nCisJCQkJCQkJCQk9CisJCQkJCQkJCQl1bF9SZWFsTG93VGltaW5nOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBTYXZlIHRoZSBoaWdoIGJhc2UgdGltaW5nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQlzX1BXTU1vZHVsZUluZm8uCisJCQkJCQkJCQlzX1BXTUluZm8KKwkJCQkJCQkJCVtiX1BXTV0uCisJCQkJCQkJCQlkX0hpZ2hUaW1pbmcKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWRfUmVhbEhpZ2hUaW1pbmc7CisKKwkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCXNfUFdNTW9kdWxlSW5mby4KKwkJCQkJCQkJCXNfUFdNSW5mbworCQkJCQkJCQkJW2JfUFdNXS4KKwkJCQkJCQkJCXVsX1JlYWxIaWdoVGltaW5nCisJCQkJCQkJCQk9CisJCQkJCQkJCQl1bF9SZWFsSGlnaFRpbWluZzsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBXcml0ZSB0aGUgbG93IHRpbWluZyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCW91dGwodWxfTG93VGltZXJWYWx1ZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAwICsgKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBXcml0ZSB0aGUgaGlnaCB0aW1pbmcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJb3V0bCh1bF9IaWdoVGltZXJWYWx1ZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0ICsgKDIwICogYl9QV00pICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgY2xvY2sgc2VsZWN0aW9uICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZHdfQ29tbWFuZCA9CisJCQkJCQkJCQlpbmwKKwkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCSsgOCArCisJCQkJCQkJCQkoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJZHdfQ29tbWFuZCA9CisJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkmIDB4N0Y7CisKKwkJCQkJCQkJaWYgKGJfQ2xvY2tTZWxlY3Rpb24gPT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkweDgwOworCQkJCQkJCQl9CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogU2V0IHRoZSBjbG9jayBzZWxlY3Rpb24gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlvdXRsKGR3X0NvbW1hbmQsCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCXVpX0FkZHJlc3MKKwkJCQkJCQkJCSsgOCArCisJCQkJCQkJCQkoMjAgKiBiX1BXTSkgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogSGlnaCBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJRFBSSU5USygiSGlnaCBiYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS04OworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBMb3cgYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQlEUFJJTlRLKCJMb3cgYmFzZSB0aW1pbmcgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTc7CisJCQkJCQl9CisJCQkJCX0JLy8gaWYgKChiX1RpbWluZ1VuaXQgPj0gMCkgJiYgKGJfVGltaW5nVW5pdCA8PSA0KSkKKwkJCQkJZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRpbWluZyB1bml0IHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQlEUFJJTlRLKCJUaW1pbmcgdW5pdCBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQl9CS8vIGlmICgoYl9UaW1pbmdVbml0ID49IDApICYmIChiX1RpbWluZ1VuaXQgPD0gNCkpCisJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKwkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUFdNIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlEUFJJTlRLKCJQV00gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MTApCisJCQl9CS8vIGlmIChiX1BXTSA+PSAwICYmIGJfUFdNIDw9IDEpCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldFBXTVN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgIGJfUFdNLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICBwYl9QV01PdXRwdXRTdGF0dXMsICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gIHBiX0V4dGVybkdhdGVTdGF0dXMpICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgc3RhdHVzIGZyb20gc2VsZWN0ZWQgUFdNIChiX1BXTSkgZnJvbSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfICBiX0JvYXJkSGFuZGxlIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfUFdNICAgICAgICAgOiBTZWxlY3RlZCBQV00gKDAgb3IgMSkgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9Nb2R1bE5iciAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMykKKwliX01vZHVsTmJyCQkJPShCWVRFKSAgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9QV00JCQkJPShCWVRFKSAgZGF0YVswXTsKKworIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyAgcGJfUFdNT3V0cHV0U3RhdHVzICA6IFJldHVybiB0aGUgUFdNIG91dHB1dCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgc3RhdHVzLiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IFRoZSBQV00gb3V0cHV0IGxldmVsfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbG93LiAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBUaGUgUFdNIG91dHB1dCBsZXZlbHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGhpZ2guICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgcGJfRXh0ZXJuR2F0ZVN0YXR1cyA6IFJldHVybiB0aGUgZXh0ZXJuIGdhdGUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgc3RhdHVzLiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IFRoZSBleHRlcm4gZ2F0ZSBpcyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93LiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBUaGUgZXh0ZXJuIGdhdGUgaXMgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2guCisgICAgcGJfUFdNT3V0cHV0U3RhdHVzCT0oUEJZVEUpIGRhdGFbMF07CisJcGJfRXh0ZXJuR2F0ZVN0YXR1cyA9KFBCWVRFKSBkYXRhWzFdOyAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBQV00gbW9kdWxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBQV00gc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IFBXTSBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFBXTSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC02OiBQV00gbm90IGVuYWJsZWQgc2VlIGZ1bmN0aW9uICJpX0FQQ0kxNzEwX0VuYWJsZVBXTSJ8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkR2V0UFdNU3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzOworCisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9QV007CisJUEJZVEUgcGJfUFdNT3V0cHV0U3RhdHVzOworCVBCWVRFIHBiX0V4dGVybkdhdGVTdGF0dXM7CisKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwliX01vZHVsTmJyID0gKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfUFdNID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXBiX1BXTU91dHB1dFN0YXR1cyA9IChQQllURSkgJiBkYXRhWzBdOworCXBiX0V4dGVybkdhdGVTdGF0dXMgPSAoUEJZVEUpICYgZGF0YVsxXTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBQV00gKi8KKwkgICAvKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1BXTSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIFBXTSBzZWxlY3Rpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1BXTSA8PSAxKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgUFdNIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDEyICsgKDIwICogYl9QV00pICsKKwkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJaWYgKGR3X1N0YXR1cyAmIDB4MTApIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBQV00gZW5hYmxlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChkd19TdGF0dXMgJiAweDEpIHsKKwkJCQkJCSpwYl9QV01PdXRwdXRTdGF0dXMgPQorCQkJCQkJCShCWVRFKSAoKGR3X1N0YXR1cyA+PiA3KQorCQkJCQkJCSYgMSk7CisJCQkJCQkqcGJfRXh0ZXJuR2F0ZVN0YXR1cyA9CisJCQkJCQkJKEJZVEUpICgoZHdfU3RhdHVzID4+IDYpCisJCQkJCQkJJiAxKTsKKwkJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxKQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUFdNIG5vdCBlbmFibGVkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiUFdNIG5vdCBlbmFibGVkIFxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MSkKKwkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBQV00gbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiUFdNIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJfQkvLyBpZiAoYl9QV00gPj0gMCAmJiBiX1BXTSA8PSAxKQorCQkJZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRvciBQV00gc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVG9yIFBXTSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfUFdNID49IDAgJiYgYl9QV00gPD0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgUFdNIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFBXTSBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1JlYWRQV01JbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS5iX09sZE1vZHVsZU1hc2s7CisJZGF0YVsxXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZEludGVycnVwdE1hc2s7CisJZGF0YVsyXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWRdLnVsX09sZENvdW50ZXJMYXRjaFZhbHVlOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBJbmNyZW1lbnQgdGhlIHJlYWQgRklGTyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJZGV2cHJpdi0+CisJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJdWlfUmVhZCA9IChkZXZwcml2LT4KKwkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLnVpX1JlYWQgKyAxKSAlIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCisJcmV0dXJuIGluc24tPm47CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfUHdtLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1B3bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjdmNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1B3bS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgQVBDSTE3MTBfMzBNSFoJCTMwCisjZGVmaW5lIEFQQ0kxNzEwXzMzTUhaCQkzMworI2RlZmluZSBBUENJMTcxMF80ME1IWgkJNDAKKworI2RlZmluZSBBUENJMTcxMF9QV01fSU5JVAkJMAorI2RlZmluZSBBUENJMTcxMF9QV01fR0VUSU5JVERBVEEJMQorCisjZGVmaW5lIEFQQ0kxNzEwX1BXTV9ESVNBQkxFCQkwCisjZGVmaW5lIEFQQ0kxNzEwX1BXTV9FTkFCTEUJCTEKKyNkZWZpbmUgQVBDSTE3MTBfUFdNX05FV1RJTUlORwkJMgorCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnUFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luaXRQV00oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJICAgICAgIEJZVEUgYl9Nb2R1bE5iciwKKwkJICAgICAgIEJZVEUgYl9QV00sCisJCSAgICAgICBCWVRFIGJfQ2xvY2tTZWxlY3Rpb24sCisJCSAgICAgICBCWVRFIGJfVGltaW5nVW5pdCwKKwkJICAgICAgIFVMT05HIHVsX0xvd1RpbWluZywKKwkJICAgICAgIFVMT05HIHVsX0hpZ2hUaW1pbmcsCisJCSAgICAgICBQVUxPTkcgcHVsX1JlYWxMb3dUaW1pbmcsIFBVTE9ORyBwdWxfUmVhbEhpZ2hUaW1pbmcpOworCitJTlQgaV9BUENJMTcxMF9HZXRQV01Jbml0aWFsaXNhdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICBCWVRFIGJfTW9kdWxOYnIsCisJCQkJICAgIEJZVEUgYl9QV00sCisJCQkJICAgIFBCWVRFIHBiX1RpbWluZ1VuaXQsCisJCQkJICAgIFBVTE9ORyBwdWxfTG93VGltaW5nLAorCQkJCSAgICBQVUxPTkcgcHVsX0hpZ2hUaW1pbmcsCisJCQkJICAgIFBCWVRFIHBiX1N0YXJ0TGV2ZWwsCisJCQkJICAgIFBCWVRFIHBiX1N0b3BNb2RlLAorCQkJCSAgICBQQllURSBwYl9TdG9wTGV2ZWwsCisJCQkJICAgIFBCWVRFIHBiX0V4dGVybkdhdGUsCisJCQkJICAgIFBCWVRFIHBiX0ludGVycnVwdEVuYWJsZSwgUEJZVEUgcGJfRW5hYmxlKTsKKworSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlUFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTE3MTBfRW5hYmxlUFdNKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgQllURSBiX01vZHVsTmJyLAorCQkJIEJZVEUgYl9QV00sCisJCQkgQllURSBiX1N0YXJ0TGV2ZWwsCisJCQkgQllURSBiX1N0b3BNb2RlLAorCQkJIEJZVEUgYl9TdG9wTGV2ZWwsIEJZVEUgYl9FeHRlcm5HYXRlLAorCQkJIEJZVEUgYl9JbnRlcnJ1cHRFbmFibGUpOworCitJTlQgaV9BUENJMTcxMF9TZXROZXdQV01UaW1pbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBCWVRFIGJfTW9kdWxOYnIsCisJCQkgICAgICAgQllURSBiX1BXTSwgQllURSBiX1RpbWluZ1VuaXQsCisJCQkgICAgICAgVUxPTkcgdWxfTG93VGltaW5nLCBVTE9ORyB1bF9IaWdoVGltaW5nKTsKKworSU5UIGlfQVBDSTE3MTBfRGlzYWJsZVBXTShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBCWVRFIGJfTW9kdWxOYnIsIEJZVEUgYl9QV00pOworCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZEdldFBXTVN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1JlYWRQV01JbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfU3NpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1NzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmUxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1NzaS5jCkBAIC0wLDAgKzEsODQ4IEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQSSBBUENJMTcxMCAgICB8IENvbXBpbGVyIDogZ2NjICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogU1NJLkMgICAgICAgICAgIHwgVmVyc2lvbiAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEFQQ0ktMTcxMCBTU0kgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDEzLzA1Lzk4IHwgUy4gV2ViZXIgIHwgU1NJIGRpZ2l0YWwgaW5wdXQgLyBvdXRwdXQgaW1wbGVtZW50YXRpb24gICAgICB8CisgIHwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgfCAyMi8wMy8wMCB8IEMuR3Vpbm90ICB8IDAxMDAvMDIyNiAtPiAwMjAwLzAyMjcgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgw4RuZGVydW5nIGluIEluaXRTU0kgRnVua3Rpb24gICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgYl9TU0lQcm9maWxlID49IDIgYW5zdGF0dCBiX1NTSVByb2ZpbGUgPiAyICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDA4LzA1LzAwIHwgR3Vpbm90IEMgIHwgLSAwNDAwLzAyMjggQWxsIEZ1bmN0aW9uIGluIFJJTkcgMCAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgIGF2YWlsYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKyNpbmNsdWRlICJBUENJMTcxMF9Tc2kuaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfSW5pdFNTSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgYl9TU0lQcm9maWxlLCAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICBiX1Bvc2l0aW9uVHVybkxlbmd0aCwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgIGJfVHVybkNwdExlbmd0aCwgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgYl9QQ0lJbnB1dENsb2NrLCAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTE9OR18gIHVsX1NTSU91dHB1dENsb2NrLCAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgIGJfU1NJQ291bnRpbmdNb2RlKSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlIHRoZSBTU0kgb3BlcmF0aW5nIG1vZGUgZnJvbSBzZWxlY3RlZCBtb2R1bGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9Nb2R1bE5icikuIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSBmb3IgeW91fAorfCAgICAgICAgICAgICAgICAgICAgIGNhbGwgYW55IG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiBTU0kuICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgYl9TU0lQcm9maWxlICAgICAgICAgOiBTZWxlY3Rpb24gZnJvbSBTU0kgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUgbGVuZ3RoICgyIHRvIDMyKS58Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfUG9zaXRpb25UdXJuTGVuZ3RoIDogU2VsZWN0aW9uIGZyb20gU1NJICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiBkYXRhIGxlbmd0aCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHRvIDMxKS4gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfVHVybkNwdExlbmd0aCAgICAgIDogU2VsZWN0aW9uIGZyb20gU1NJIHR1cm4gIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyIGRhdGEgbGVuZ3RoICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHRvIDMxKS4gICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURSAgIGJfUENJSW5wdXRDbG9jayAgICAgIDogU2VsZWN0aW9uIGZyb20gUENJIGJ1cyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFQQ0kxNzEwXzMwTUhaIDogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFBDIGhhdmUgYSBQQ0kgYnVzICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayBmcm9tIDMwIE1IeiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFQQ0kxNzEwXzMzTUhaIDogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIFBDIGhhdmUgYSBQQ0kgYnVzICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayBmcm9tIDMzIE1IeiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVMT05HXyB1bF9TU0lPdXRwdXRDbG9jayAgICA6IFNlbGVjdGlvbiBmcm9tIFNTSSBvdXRwdXR8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2suICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9tICAyMjkgdG8gNSAwMDAgMDAwIEh6fAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAzMCBNSHogc2VsZWN0aW9uLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbSAgMjUyIHRvIDUgMDAwIDAwMCBIenwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgMzMgTUh6IHNlbGVjdGlvbi4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEUgICBiX1NTSUNvdW50aW5nTW9kZSAgICA6IFNTSSBjb3VudGluZyBtb2RlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF9CSU5BUllfTU9ERSA6ICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaW5hcnkgY291bnRpbmcgbW9kZS4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gQVBDSTE3MTBfR1JBWV9NT0RFIDogICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JheSBjb3VudGluZyBtb2RlLgorCisJYl9Nb2R1bE5icgkJCT0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9TU0lQcm9maWxlCQk9IChCWVRFKSBkYXRhWzBdOworCWJfUG9zaXRpb25UdXJuTGVuZ3RoPSAoQllURSkgZGF0YVsxXTsKKwliX1R1cm5DcHRMZW5ndGgJCT0gKEJZVEUpIGRhdGFbMl07CisJYl9QQ0lJbnB1dENsb2NrCQk9IChCWVRFKSBkYXRhWzNdOworCXVsX1NTSU91dHB1dENsb2NrCT0gKFVMT05HKSBkYXRhWzRdOworCWJfU1NJQ291bnRpbmdNb2RlCT0gKEJZVEUpICBkYXRhWzVdOyAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0yOiBUaGUgbW9kdWxlIHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgU1NJIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNDogVGhlIHNlbGVjdGVkIFNTSSBwcm9maWxlIGxlbmd0aCBpcyB3cm9uZyAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC01OiBUaGUgc2VsZWN0ZWQgU1NJIHBvc2l0aW9uIGRhdGEgbGVuZ3RoIGlzIHdyb25nICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTY6IFRoZSBzZWxlY3RlZCBTU0kgdHVybiBjb3VudGVyIGRhdGEgbGVuZ3RoIGlzIHdyb25nICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNzogVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC04OiBUaGUgc2VsZWN0ZWQgU1NJIG91dHB1dCBjbG9jayBpcyB3cm9uZyAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTk6IFRoZSBzZWxlY3RlZCBTU0kgY291bnRpbmcgbW9kZSBwYXJhbWV0ZXIgaXMgd3JvbmcgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0U1NJKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJVUlOVCB1aV9UaW1lclZhbHVlOworCUJZVEUgYl9Nb2R1bE5iciwgYl9TU0lQcm9maWxlLCBiX1Bvc2l0aW9uVHVybkxlbmd0aCwgYl9UdXJuQ3B0TGVuZ3RoLAorCQliX1BDSUlucHV0Q2xvY2ssIGJfU1NJQ291bnRpbmdNb2RlOworCVVMT05HIHVsX1NTSU91dHB1dENsb2NrOworCisJYl9Nb2R1bE5iciA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfU1NJUHJvZmlsZSA9IChCWVRFKSBkYXRhWzBdOworCWJfUG9zaXRpb25UdXJuTGVuZ3RoID0gKEJZVEUpIGRhdGFbMV07CisJYl9UdXJuQ3B0TGVuZ3RoID0gKEJZVEUpIGRhdGFbMl07CisJYl9QQ0lJbnB1dENsb2NrID0gKEJZVEUpIGRhdGFbM107CisJdWxfU1NJT3V0cHV0Q2xvY2sgPSAoVUxPTkcpIGRhdGFbNF07CisJYl9TU0lDb3VudGluZ01vZGUgPSAoQllURSkgZGF0YVs1XTsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFNTSSBjb3VudGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1NTSV9DT1VOVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBTU0kgcHJvZmlsZSBsZW5ndGggKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJLy8gQ0cgMjIvMDMvMDAgYl9TU0lQcm9maWxlID49IDIgYW5zdGF0dCBiX1NTSVByb2ZpbGUgPiAyCisJCQlpZiAoYl9TU0lQcm9maWxlID49IDIgJiYgYl9TU0lQcm9maWxlIDwgMzMpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIFNTSSBwb3NpdGlvbiBkYXRhIGxlbmd0aCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoYl9Qb3NpdGlvblR1cm5MZW5ndGggPiAwCisJCQkJCSYmIGJfUG9zaXRpb25UdXJuTGVuZ3RoIDwgMzIpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgU1NJIHR1cm4gY291bnRlciBkYXRhIGxlbmd0aCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChiX1R1cm5DcHRMZW5ndGggPiAwCisJCQkJCQkmJiBiX1R1cm5DcHRMZW5ndGggPCAzMikgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIHByb2ZpbGUgbGVuZ3RoICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKGJfVHVybkNwdExlbmd0aCArCisJCQkJCQkJCWJfUG9zaXRpb25UdXJuTGVuZ3RoKQorCQkJCQkJCTw9IGJfU1NJUHJvZmlsZSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IHRoZSBQQ0kgaW5wdXQgY2xvY2sgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJCUFQQ0kxNzEwXzMwTUhaCisJCQkJCQkJCXx8CisJCQkJCQkJCWJfUENJSW5wdXRDbG9jaworCQkJCQkJCQk9PQorCQkJCQkJCQlBUENJMTcxMF8zM01IWikKKwkJCQkJCQl7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IHRoZSBvdXRwdXQgY2xvY2sgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJaWYgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFogJiYgKHVsX1NTSU91dHB1dENsb2NrID4gMjI4ICYmIHVsX1NTSU91dHB1dENsb2NrIDw9IDUwMDAwMDBVTCkpIHx8IChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFogJiYgKHVsX1NTSU91dHB1dENsb2NrID4gMjUxICYmIHVsX1NTSU91dHB1dENsb2NrIDw9IDUwMDAwMDBVTCkpKSB7CisJCQkJCQkJCQlpZiAoYl9TU0lDb3VudGluZ01vZGUgPT0gQVBDSTE3MTBfQklOQVJZX01PREUgfHwgYl9TU0lDb3VudGluZ01vZGUgPT0gQVBDSTE3MTBfR1JBWV9NT0RFKSB7CisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogU2F2ZSBjb25maWd1cmF0aW9uICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQkJCQkJCWJfU1NJUHJvZmlsZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWJfU1NJUHJvZmlsZTsKKworCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCQkJCQliX1Bvc2l0aW9uVHVybkxlbmd0aAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWJfUG9zaXRpb25UdXJuTGVuZ3RoOworCisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQkJCQkJCWJfVHVybkNwdExlbmd0aAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWJfVHVybkNwdExlbmd0aDsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogSW5pdGlhbGlzZSB0aGUgcHJvZmlsZSBsZW5ndGggKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJaWYgKGJfU1NJQ291bnRpbmdNb2RlID09IEFQQ0kxNzEwX0JJTkFSWV9NT0RFKSB7CisKKwkJCQkJCQkJCQkJb3V0bChiX1NTSVByb2ZpbGUgKyAxLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDQgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJCQkJfSBlbHNlIHsKKworCQkJCQkJCQkJCQlvdXRsKGJfU1NJUHJvZmlsZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA0ICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQkJCX0KKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSBvdXRwdXQgY2xvY2sgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWlfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCShVSU5UKQorCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCSgoVUxPTkcpIChiX1BDSUlucHV0Q2xvY2spICogNTAwMDAwVUwpIC8gdWxfU1NJT3V0cHV0Q2xvY2spOworCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBJbml0aWFsaXNlIHRoZSB0aW1lciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlvdXRsKHVpX1RpbWVyVmFsdWUsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIEluaXRpYWxpc2UgdGhlIGNvdW50aW5nIG1vZGUgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlvdXRsKDcgKiBiX1NTSUNvdW50aW5nTW9kZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxMiArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCQkJCQliX1NTSUluaXQKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJfSBlbHNlIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGhlIHNlbGVjdGVkIFNTSSBjb3VudGluZyBtb2RlIHBhcmFtZXRlciBpcyB3cm9uZyAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBTU0kgY291bnRpbmcgbW9kZSBwYXJhbWV0ZXIgaXMgd3JvbmdcbiIpOworCQkJCQkJCQkJCWlfUmV0dXJuVmFsdWUKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQktOTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfSBlbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGhlIHNlbGVjdGVkIFNTSSBvdXRwdXQgY2xvY2sgaXMgd3JvbmcgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgU1NJIG91dHB1dCBjbG9jayBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS04OworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNzsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGhlIHNlbGVjdGVkIFNTSSBwcm9maWxlIGxlbmd0aCBpcyB3cm9uZyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgU1NJIHByb2ZpbGUgbGVuZ3RoIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIFNTSSB0dXJuIGNvdW50ZXIgZGF0YSBsZW5ndGggaXMgd3JvbmcgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlRoZSBzZWxlY3RlZCBTU0kgdHVybiBjb3VudGVyIGRhdGEgbGVuZ3RoIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRoZSBzZWxlY3RlZCBTU0kgcG9zaXRpb24gZGF0YSBsZW5ndGggaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgU1NJIHBvc2l0aW9uIGRhdGEgbGVuZ3RoIGlzIHdyb25nXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIFNTSSBwcm9maWxlIGxlbmd0aCBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIFNTSSBwcm9maWxlIGxlbmd0aCBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBTU0kgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgU1NJIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgaV9BUENJMTcxMF9SZWFkMVNTSVZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgIGJfQm9hcmRIYW5kbGUsICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9Nb2R1bE5iciwgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1NlbGVjdGVkU1NJLCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfUG9zaXRpb24sICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9UdXJuQ3B0KQorIElOVCBpX0FQQ0kxNzEwX1JlYWRTU0lWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOgorCisKKwkJCQkJCVJlYWQgdGhlIHNlbGVjdGVkIFNTSSBjb3VudGVyIChiX1NlbGVjdGVkU1NJKSBmcm9tICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4KKwkJCQkJCW9yIFJlYWQgYWxsIFNTSSBjb3VudGVyIChiX1NlbGVjdGVkU1NJKSBmcm9tICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSAoMCB0byAzKSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9TZWxlY3RlZFNTSSAgICAgICAgIDogU2VsZWN0aW9uIGZyb20gU1NJICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyICgwIHRvIDIpCisKKyAgICBiX01vZHVsTmJyCQk9ICAgKEJZVEUpIENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfU2VsZWN0ZWRTU0kJPQkoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7IChpbiBjYXNlIG9mIHNpbmdsZSBzc2kpCisJYl9SZWFkVHlwZQkJPQkoQllURSkgQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyAgcHVsX1Bvc2l0aW9uICAgICAgIDogU1NJIHBvc2l0aW9uIGluIHRoZSB0dXJuIHwKK3wgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfICBwdWxfVHVybkNwdCAgICAgICAgOiBOdW1iZXIgb2YgdHVybnMKKworcHVsX1Bvc2l0aW9uCT0JKFBVTE9ORykgJmRhdGFbMF07CisJcHVsX1R1cm5DcHQJCT0JKFBVTE9ORykgJmRhdGFbMV07ICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBTU0kgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBTU0kgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRTU0kiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGhlIHNlbGVjdGVkIFNTSSBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRTU0lWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCUJZVEUgYl9DcHQ7CisJQllURSBiX0xlbmd0aDsKKwlCWVRFIGJfU2NoaWZ0OworCUJZVEUgYl9TU0lDcHQ7CisJRFdPUkQgZHdfQW5kOworCURXT1JEIGR3X0FuZDE7CisJRFdPUkQgZHdfQW5kMjsKKwlEV09SRCBkd19TdGF0dXNSZWc7CisJRFdPUkQgZHdfQ291bnRlclZhbHVlOworCUJZVEUgYl9Nb2R1bE5icjsKKwlCWVRFIGJfU2VsZWN0ZWRTU0k7CisJQllURSBiX1JlYWRUeXBlOworCVBVTE9ORyBwdWxfUG9zaXRpb247CisJUFVMT05HIHB1bF9UdXJuQ3B0OworCVBVTE9ORyBwdWxfUG9zaXRpb24xOworCVBVTE9ORyBwdWxfVHVybkNwdDE7CisKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlwdWxfUG9zaXRpb24xID0gKFBVTE9ORykgJiBkYXRhWzBdOworLy8gRm9yIFJlYWQxCisJcHVsX1R1cm5DcHQxID0gKFBVTE9ORykgJiBkYXRhWzFdOworLy8gRm9yIFJlYWQgYWxsCisJcHVsX1Bvc2l0aW9uID0gKFBVTE9ORykgJiBkYXRhWzBdOwkvLzAtMgorCXB1bF9UdXJuQ3B0ID0gKFBVTE9ORykgJiBkYXRhWzNdOwkvLzMtNQorCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9TZWxlY3RlZFNTSSA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwliX1JlYWRUeXBlID0gKEJZVEUpIENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFNTSSBjb3VudGVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1NTSV9DT1VOVEVSKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgU1NJIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1NTSUNvdW50ZXJJbmZvLmJfU1NJSW5pdCA9PSAxKSB7CisKKwkJCQlzd2l0Y2ggKGJfUmVhZFR5cGUpIHsKKworCQkJCWNhc2UgQVBDSTE3MTBfU1NJX1JFQUQxVkFMVUU6CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgc2VsZWN0ZWQgU1NJIGNvdW50ZXIgbnVtYmVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9TZWxlY3RlZFNTSSA8IDMpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBTdGFydCB0aGUgY29udmVyc2lvbiAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDggKworCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJZG8geworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogUmVhZCB0aGUgc3RhdHVzICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWR3X1N0YXR1c1JlZyA9CisJCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJfQorCQkJCQkJd2hpbGUgKChkd19TdGF0dXNSZWcgJiAweDEpICE9CisJCQkJCQkJMCk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBSZWFkIHRoZSBTU0kgY291bnRlciB2YWx1ZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJZHdfQ291bnRlclZhbHVlID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCXVpX0FkZHJlc3MgKyA0ICsKKwkJCQkJCQkoYl9TZWxlY3RlZFNTSSAqIDQpICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCWJfTGVuZ3RoID0KKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQliX1NTSVByb2ZpbGUgLyAyOworCisJCQkJCQlpZiAoKGJfTGVuZ3RoICogMikgIT0KKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQliX1NTSVByb2ZpbGUpIHsKKwkJCQkJCQliX0xlbmd0aCsrOworCQkJCQkJfQorCisJCQkJCQliX1NjaGlmdCA9CisJCQkJCQkJYl9MZW5ndGggLQorCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCWJfUG9zaXRpb25UdXJuTGVuZ3RoOworCisJCQkJCQkqcHVsX1Bvc2l0aW9uMSA9CisJCQkJCQkJZHdfQ291bnRlclZhbHVlID4+CisJCQkJCQkJYl9TY2hpZnQ7CisKKwkJCQkJCWR3X0FuZCA9IDE7CisKKwkJCQkJCWZvciAoYl9DcHQgPSAwOworCQkJCQkJCWJfQ3B0IDwKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQliX1Bvc2l0aW9uVHVybkxlbmd0aDsKKwkJCQkJCQliX0NwdCsrKSB7CisJCQkJCQkJZHdfQW5kID0gZHdfQW5kICogMjsKKwkJCQkJCX0KKworCQkJCQkJKnB1bF9Qb3NpdGlvbjEgPQorCQkJCQkJCSpwdWxfUG9zaXRpb24xICYKKwkJCQkJCQkoKGR3X0FuZCkgLSAxKTsKKworCQkJCQkJKnB1bF9UdXJuQ3B0MSA9CisJCQkJCQkJZHdfQ291bnRlclZhbHVlID4+CisJCQkJCQkJYl9MZW5ndGg7CisKKwkJCQkJCWR3X0FuZCA9IDE7CisKKwkJCQkJCWZvciAoYl9DcHQgPSAwOworCQkJCQkJCWJfQ3B0IDwKKwkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJc19TU0lDb3VudGVySW5mby4KKwkJCQkJCQliX1R1cm5DcHRMZW5ndGg7CisJCQkJCQkJYl9DcHQrKykgeworCQkJCQkJCWR3X0FuZCA9IGR3X0FuZCAqIDI7CisJCQkJCQl9CisKKwkJCQkJCSpwdWxfVHVybkNwdDEgPQorCQkJCQkJCSpwdWxfVHVybkNwdDEgJgorCQkJCQkJCSgoZHdfQW5kKSAtIDEpOworCQkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIFNTSSBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgU1NJIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWNhc2UgQVBDSTE3MTBfU1NJX1JFQURBTExWQUxVRToKKwkJCQkJZHdfQW5kMSA9IDE7CisKKwkJCQkJZm9yIChiX0NwdCA9IDA7CisJCQkJCQliX0NwdCA8CisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQliX1Bvc2l0aW9uVHVybkxlbmd0aDsgYl9DcHQrKykgeworCQkJCQkJZHdfQW5kMSA9IGR3X0FuZDEgKiAyOworCQkJCQl9CisKKwkJCQkJZHdfQW5kMiA9IDE7CisKKwkJCQkJZm9yIChiX0NwdCA9IDA7CisJCQkJCQliX0NwdCA8CisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQliX1R1cm5DcHRMZW5ndGg7IGJfQ3B0KyspIHsKKwkJCQkJCWR3X0FuZDIgPSBkd19BbmQyICogMjsKKwkJCQkJfQorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTdGFydCB0aGUgY29udmVyc2lvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKDAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyA4ICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQlkbyB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFJlYWQgdGhlIHN0YXR1cyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWR3X1N0YXR1c1JlZyA9CisJCQkJCQkJaW5sKGRldnByaXYtPgorCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCX0KKwkJCQkJd2hpbGUgKChkd19TdGF0dXNSZWcgJiAweDEpICE9IDApOworCisJCQkJCWZvciAoYl9TU0lDcHQgPSAwOyBiX1NTSUNwdCA8IDM7CisJCQkJCQliX1NTSUNwdCsrKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogUmVhZCB0aGUgU1NJIGNvdW50ZXIgdmFsdWUgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWR3X0NvdW50ZXJWYWx1ZSA9CisJCQkJCQkJaW5sKGRldnByaXYtPgorCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQl1aV9BZGRyZXNzICsgNCArCisJCQkJCQkJKGJfU1NJQ3B0ICogNCkgKworCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJYl9MZW5ndGggPQorCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCWJfU1NJUHJvZmlsZSAvIDI7CisKKwkJCQkJCWlmICgoYl9MZW5ndGggKiAyKSAhPQorCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQlzX1NTSUNvdW50ZXJJbmZvLgorCQkJCQkJCWJfU1NJUHJvZmlsZSkgeworCQkJCQkJCWJfTGVuZ3RoKys7CisJCQkJCQl9CisKKwkJCQkJCWJfU2NoaWZ0ID0KKwkJCQkJCQliX0xlbmd0aCAtCisJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfU1NJQ291bnRlckluZm8uCisJCQkJCQkJYl9Qb3NpdGlvblR1cm5MZW5ndGg7CisKKwkJCQkJCXB1bF9Qb3NpdGlvbltiX1NTSUNwdF0gPQorCQkJCQkJCWR3X0NvdW50ZXJWYWx1ZSA+PgorCQkJCQkJCWJfU2NoaWZ0OworCQkJCQkJcHVsX1Bvc2l0aW9uW2JfU1NJQ3B0XSA9CisJCQkJCQkJcHVsX1Bvc2l0aW9uW2JfU1NJQ3B0XSAmCisJCQkJCQkJKChkd19BbmQxKSAtIDEpOworCisJCQkJCQlwdWxfVHVybkNwdFtiX1NTSUNwdF0gPQorCQkJCQkJCWR3X0NvdW50ZXJWYWx1ZSA+PgorCQkJCQkJCWJfTGVuZ3RoOworCQkJCQkJcHVsX1R1cm5DcHRbYl9TU0lDcHRdID0KKwkJCQkJCQlwdWxfVHVybkNwdFtiX1NTSUNwdF0gJgorCQkJCQkJCSgoZHdfQW5kMikgLSAxKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCXByaW50aygiUmVhZCBUeXBlIElucHV0cyBXcm9uZ1xuIik7CisKKwkJCQl9CS8vIHN3aXRjaCAgZW5kaW5nCisKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU1NJIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiU1NJIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBTU0kgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgU1NJIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgaV9BUENJMTcxMF9SZWFkU1NJMURpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9JbnB1dENoYW5uZWwsICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX0NoYW5uZWxTdGF0dXMpICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6CisJCQkJCSgwKSBTZXQgdGhlIGRpZ2l0YWwgb3V0cHV0IGZyb20gc2VsZWN0ZWQgU1NJIG1vdWxlICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX01vZHVsZU5icikgT04KKyAgICAgICAgICAgICAgICAgICAgKDEpIFNldCB0aGUgZGlnaXRhbCBvdXRwdXQgZnJvbSBzZWxlY3RlZCBTU0kgbW91bGUgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKGJfTW9kdWxlTmJyKSBPRkYKKwkJCQkJKDIpUmVhZCB0aGUgc3RhdHVzIGZyb20gc2VsZWN0ZWQgU1NJIGRpZ2l0YWwgaW5wdXQgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9JbnB1dENoYW5uZWwpCisgICAgICAgICAgICAgICAgICAgICgzKVJlYWQgdGhlIHN0YXR1cyBmcm9tIGFsbCBTU0kgZGlnaXRhbCBpbnB1dHMgZnJvbSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgU1NJIG1vZHVsZSAoYl9Nb2R1bE5icikgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgIENSX0FSRUYgICAgICAgIDogTW9kdWxlIG51bWJlciB0byAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMykgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfSW5wdXRDaGFubmVsIENSX0NIQU4gICAgICAgOiBTZWxlY3Rpb24gZnJvbSBkaWdpdGFsICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gd2hpY2ggSU9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgKCAwIHRvIDIpICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyAgcGJfQ2hhbm5lbFN0YXR1cyAgICA6IERpZ2l0YWwgaW5wdXQgY2hhbm5lbCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICAgICAgIHN0YXR1cyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IENoYW5ubGUgaXMgbm90IGFjdGl2ZXwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5sZSBpcyBhY3RpdmUgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBTU0kgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUaGUgc2VsZWN0ZWQgU1NJIGRpZ2l0YWwgaW5wdXQgaXMgd3JvbmcgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1NTSURpZ2l0YWxJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZzsKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX0lucHV0Q2hhbm5lbDsKKwlQQllURSBwYl9DaGFubmVsU3RhdHVzOworCVBCWVRFIHBiX0lucHV0U3RhdHVzOworCUJZVEUgYl9JT1R5cGU7CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX0lPVHlwZSA9IChCWVRFKSBkYXRhWzBdOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgU1NJIGNvdW50ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfU1NJX0NPVU5URVIpIHsKKwkJCXN3aXRjaCAoYl9JT1R5cGUpIHsKKwkJCWNhc2UgQVBDSTE3MTBfU1NJX1NFVF9DSEFOTkVMT046CisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZXQgdGhlIGRpZ2l0YWwgb3V0cHV0IE9OICovCisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxNiArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBUENJMTcxMF9TU0lfU0VUX0NIQU5ORUxPRkY6CisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IHRoZSBkaWdpdGFsIG91dHB1dCBPRkYgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGwoMCwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxNiArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBUENJMTcxMF9TU0lfUkVBRF8xQ0hBTk5FTDoKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIGRpZ2l0YWwgaW1ucHV0IGNoYW5uZWwgbnVtYmVyICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWJfSW5wdXRDaGFubmVsID0gKEJZVEUpIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCQkJCXBiX0NoYW5uZWxTdGF0dXMgPSAoUEJZVEUpICYgZGF0YVswXTsKKworCQkJCWlmIChiX0lucHV0Q2hhbm5lbCA8PSAyKSB7CisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCBhbGwgZGlnaXRhbCBpbnB1dCAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkqcGJfQ2hhbm5lbFN0YXR1cyA9CisJCQkJCQkoQllURSkgKCgofmR3X1N0YXR1c1JlZykgPj4gKDQgKworCQkJCQkJCQliX0lucHV0Q2hhbm5lbCkpCisJCQkJCQkmIDEpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0ZWQgZGlnaXRhbCBpbnB1dCBlcnJvciAqLworCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiU2VsZWN0ZWQgZGlnaXRhbCBpbnB1dCBlcnJvclxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVBDSTE3MTBfU1NJX1JFQURfQUxMQ0hBTk5FTDoKKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWQgYWxsIGRpZ2l0YWwgaW5wdXQgKi8KKwkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCXBiX0lucHV0U3RhdHVzID0gKFBCWVRFKSAmIGRhdGFbMF07CisKKwkJCQlkd19TdGF0dXNSZWcgPQorCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJKnBiX0lucHV0U3RhdHVzID0KKwkJCQkJKEJZVEUpICgoKH5kd19TdGF0dXNSZWcpID4+IDQpICYgNyk7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKCJJTyB0eXBlIHdyb25nXG4iKTsKKworCQkJfQkvL3N3aXRjaCBlbmQKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgU1NJIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFNTSSBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Tc2kuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfU3NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhkYWFkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfU3NpLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBBUENJMTcxMF8zME1IWgkJMzAKKyNkZWZpbmUgQVBDSTE3MTBfMzNNSFoJCTMzCisjZGVmaW5lIEFQQ0kxNzEwXzQwTUhaCQk0MAorCisjZGVmaW5lIEFQQ0kxNzEwX0JJTkFSWV9NT0RFCTB4MQorI2RlZmluZSBBUENJMTcxMF9HUkFZX01PREUJMHgwCisKKyNkZWZpbmUgQVBDSTE3MTBfU1NJX1JFQUQxVkFMVUUJCTEKKyNkZWZpbmUgQVBDSTE3MTBfU1NJX1JFQURBTExWQUxVRQkyCisKKyNkZWZpbmUgQVBDSTE3MTBfU1NJX1NFVF9DSEFOTkVMT04JMAorI2RlZmluZSBBUENJMTcxMF9TU0lfU0VUX0NIQU5ORUxPRkYJMQorI2RlZmluZSBBUENJMTcxMF9TU0lfUkVBRF8xQ0hBTk5FTAkyCisjZGVmaW5lIEFQQ0kxNzEwX1NTSV9SRUFEX0FMTENIQU5ORUwJMworCisvKgorICogU1NJIElOSVNJQUxJU0FUSU9OIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0U1NJKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK0lOVCBpX0FQQ0kxNzEwX0luc25SZWFkU1NJVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1NTSURpZ2l0YWxJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Ub3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAzMTZlMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVG9yLmMKQEAgLTAsMCArMSwyMDQ5IEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQSSBBUENJMTcxMCAgICB8IENvbXBpbGVyIDogZ2NjICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogVE9SLkMgICAgICAgICAgIHwgVmVyc2lvbiAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEFQQ0ktMTcxMCB0b3IgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDI3LzAxLzk5IHwgUy4gV2ViZXIgIHwgNDAgTUh6IGltcGxlbWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAyOC8wNC8wMCB8IFMuIFdlYmVyICB8IFNpbXBsZSxkb3VibGUgYW5kIHF1YWRydXBsZSBtb2RlIGltcGxlbWVudGF0aW9ufAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgRXh0ZXJuIGNsb2NrIGltcGxlbWVudGF0aW9uICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAwOC8wNS8wMCB8IEd1aW5vdCBDICB8IC0gMDQwMC8wMjI4IEFsbCBGdW5jdGlvbiBpbiBSSU5HIDAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICBhdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSAiQVBDSTE3MTBfVG9yLmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyAgICAgaV9BUENJMTcxMF9Jbml0VG9yQ291bnRlciAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfVG9yQ291bnRlciwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9QQ0lJbnB1dENsb2NrLCAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX1RpbWluZ1VuaXQsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUxPTkdfICAgdWxfVGltaW5nSW50ZXJ2YWwsICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVUxPTkdfIHB1bF9SZWFsVGltaW5nSW50ZXJ2YWwpICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmUgdGhlIHNlbGVjdGVkIHRvciBjb3VudGVyIChiX1RvckNvdW50ZXIpICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZyb20gc2VsZWN0ZWQgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIHVsX1RpbWluZ0ludGVydmFsIGFuZCB1bF9UaW1pbmdVbml0IGRldGVybWluZSB0aGUgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0aW1pbmcgYmFzZSBmb3IgdGhlIG1lYXN1cmVtZW50LiAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSBwdWxfUmVhbFRpbWluZ0ludGVydmFsIHJldHVybiB0aGUgcmVhbCB0aW1pbmcgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdmFsdWUuIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgIHwKK3wgICAgICAgICAgICAgICAgICAgICBhbnkgb3RoZXIgZnVuY3Rpb24gd2l0Y2ggYWNjZXNzIG9mIHRoZSB0b3IgY291bnRlci4gICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICB8Cit8CisJCUNSX0FSRUYJQllURV8gICBiX01vZHVsTmJyICAgICAgIDogTW9kdWxlIG51bWJlciB0byBjb25maWd1cmUgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCB0byAzKSAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgZGF0YVswXSBCWVRFXyAgIGJfVG9yQ291bnRlciAgICAgOiBUb3IgY291bnRlciBzZWxlY3Rpb24gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwIG9yIDEpLiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICBkYXRhWzFdIEJZVEVfICAgYl9QQ0lJbnB1dENsb2NrICA6IFNlbGVjdGlvbiBmcm9tIFBDSSBidXMgY2xvY2t8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zME1IWiA6ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgUENJIGJ1cyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgZnJvbSAzMCBNSHogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF8zM01IWiA6ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBQQyBoYXZlIGEgUENJIGJ1cyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2sgZnJvbSAzMyBNSHogICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBUENJMTcxMF80ME1IWiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBBUENJLTE3MTAgaGF2ZSBhICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdyYXRlZCA0ME1oeiAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFydHouICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIEFQQ0kxNzEwX0dBVEVfSU5QVVQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZCB0aGUgZ2F0ZSBpbnB1dCBmb3IgICB8Cit8CQkJCQkJICAgdGhlIGJhc2UgY2xvY2suIElmIHlvdSAgICB8Cit8CQkJCQkJICAgaGF2ZSBzZWxlY3RlZCB0aGlzIG9wdGlvbix8Cit8CQkJCQkJICAgdGhhbiBpdCBpcyBub3QgcG9zc2libCB0byB8Cit8CQkJCQkJICAgdXNlZCB0aGUgZ2F0ZSBpbnB1dCBmb3IgICB8Cit8CQkJCQkJICAgZW5hYmxlZCB0aGUgYWNxdWlzaXRpb24gICB8Cit8ICAgICAgICAgICBkYXRhWzJdIEJZVEVfICAgYl9UaW1pbmdVbml0ICAgIDogQmFzZSB0aW1pbmcgdW5pdCAoMCB0byA0KSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBucyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IMK1cyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IG1zICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzIDogcyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgOiBtbiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgIGRhdGFbM10gICAgICAgICAgVUxPTkdfIHVsX1RpbWluZ0ludGVydmFsIDogQmFzZSB0aW1pbmcgdmFsdWUuICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBVTE9OR18gIHB1bF9SZWFsVGltaW5nSW50ZXJ2YWwgOiBSZWFsICBiYXNlIHRpbWluZyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4gICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTI6IE1vZHVsZSBzZWxlY3Rpb24gd3JvbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSB0b3IgY291bnRlciBtb2R1bGUgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC00OiBUb3IgY291bnRlciBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTU6IFRoZSBzZWxlY3RlZCBQQ0kgaW5wdXQgY2xvY2sgaXMgd3JvbmcgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogVGltaW5nIHVuaXQgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC03OiBCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTg6IFlvdSBjYW4gbm90IHVzZWQgdGhlIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiB3aWNoICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBib2FyZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC05OiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgVE9SIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRUb3JDb3VudGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJVUxPTkcgdWxfVGltZXJWYWx1ZSA9IDA7CisJRFdPUkQgZHdfQ29tbWFuZDsKKwlkb3VibGUgZF9SZWFsVGltaW5nSW50ZXJ2YWwgPSAwOworCUJZVEUgYl9Nb2R1bE5icjsKKwlCWVRFIGJfVG9yQ291bnRlcjsKKwlCWVRFIGJfUENJSW5wdXRDbG9jazsKKwlCWVRFIGJfVGltaW5nVW5pdDsKKwlVTE9ORyB1bF9UaW1pbmdJbnRlcnZhbDsKKwlVTE9ORyB1bF9SZWFsVGltaW5nSW50ZXJ2YWwgPSAwOworCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKworCWJfVG9yQ291bnRlciA9IChCWVRFKSBkYXRhWzBdOworCWJfUENJSW5wdXRDbG9jayA9IChCWVRFKSBkYXRhWzFdOworCWJfVGltaW5nVW5pdCA9IChCWVRFKSBkYXRhWzJdOworCXVsX1RpbWluZ0ludGVydmFsID0gKFVMT05HKSBkYXRhWzNdOworCXByaW50aygiSU5QVVQgY2xvY2sgJWRcbiIsIGJfUENJSW5wdXRDbG9jayk7CisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiB0b3IgY291bnRlciAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfVE9SX0NPVU5URVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHRvciBjb3VudGVyIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9Ub3JDb3VudGVyIDw9IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBQQ0kgYnVzIGNsb2NrICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgfHwKKwkJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgfHwKKwkJCQkJKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgfHwKKwkJCQkJKGJfUENJSW5wdXRDbG9jayA9PQorCQkJCQkJQVBDSTE3MTBfR0FURV9JTlBVVCkpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIHRpbWluZyB1bml0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoYl9UaW1pbmdVbml0IDw9IDQpCisJCQkJCQl8fCAoYl9QQ0lJbnB1dENsb2NrID09CisJCQkJCQkJQVBDSTE3MTBfR0FURV9JTlBVVCkpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgYmFzZSB0aW1pbmcgc2VsZWN0aW9uICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKCgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxMzMpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDU3MTIzMDY1MFVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSA1NzEyMzBVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gNTcxVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDlVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxMjEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDUxOTY5MTA0M1VMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSA1MTk2OTFVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gNTIwVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF8zM01IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDhVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxMDApICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSAweEZGRkZGRkZGVUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDQyOTQ5NjcyOVVMKSkgfHwgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopICYmIChiX1RpbWluZ1VuaXQgPT0gMikgJiYgKHVsX1RpbWluZ0ludGVydmFsID49IDEpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA8PSA0Mjk0OTZVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzQwTUhaKSAmJiAoYl9UaW1pbmdVbml0ID09IDMpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAxKSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPD0gNDI5VUwpKSB8fCAoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGJfVGltaW5nVW5pdCA9PSA0KSAmJiAodWxfVGltaW5nSW50ZXJ2YWwgPj0gMSkgJiYgKHVsX1RpbWluZ0ludGVydmFsIDw9IDdVTCkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwX0dBVEVfSU5QVVQpICYmICh1bF9UaW1pbmdJbnRlcnZhbCA+PSAyKSkpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgYm9hcmQgdmVyc2lvbiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmICgoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKGRldnByaXYtPnNfQm9hcmRJbmZvcy5iX0JvYXJkVmVyc2lvbiA+IDApKSB8fCAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwXzQwTUhaKSkgeworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IHRoZSBUT1IgdmVyc2lvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoKGJfUENJSW5wdXRDbG9jayA9PSBBUENJMTcxMF80ME1IWikgJiYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweEZGRkYpID49IDB4MzEzMSkpIHx8ICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwX0dBVEVfSU5QVVQpICYmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGKSA+PSAweDMxMzIpKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSkgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUZXN0IGlmIG5vdCBleHRlcm4gY2xvY2sgdXNlZCAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfR0FURV9JTlBVVCkgeworCQkJCQkJCQkJCWZwdV9iZWdpbgorCQkJCQkJCQkJCQkoKTsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHRpbWVyIDAgZGl2aXNpb24gZmF0b3IgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCXN3aXRjaCAoYl9UaW1pbmdVbml0KSB7CisJCQkJICAgICAgLyoqKioqKi8KKwkJCQkJCQkJCQkJLyogbnMgKi8KKwkJCQkgICAgICAvKioqKioqLworCisJCQkJCQkJCQkJY2FzZSAwOgorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKHVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoMC4wMDAyNSAqIGJfUENJSW5wdXRDbG9jaykpOworCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBSb3VuZCB0aGUgdmFsdWUgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltaW5nSW50ZXJ2YWwgKiAoMC4wMDAyNSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJKDAuMDAwMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCSgwLjAwMDI1CisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDAuMDAwMjUgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQlicmVhazsKKworCQkJCSAgICAgIC8qKioqKiovCisJCQkJCQkJCQkJCS8qIMOmcyAqLworCQkJCSAgICAgIC8qKioqKiovCisKKwkJCQkJCQkJCQljYXNlIDE6CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkodWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCSgwLjI1ICogYl9QQ0lJbnB1dENsb2NrKSk7CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1pbmdJbnRlcnZhbCAqICgwLjI1ICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl9CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCQkoMC4yNSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQkJCWRfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCTAuMjUKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2spOworCisJCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWVyVmFsdWUgLyAoMC4yNSAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgICAgLyoqKioqKi8KKwkJCQkJCQkJCQkJLyogbXMgKi8KKwkJCQkgICAgICAvKioqKioqLworCisJCQkJCQkJCQkJY2FzZSAyOgorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCSgyNTAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogUm91bmQgdGhlIHZhbHVlICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoZG91YmxlKXVsX1RpbWluZ0ludGVydmFsICogKDI1MC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlICsgMC41KSkpIHsKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl9CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBDYWxjdWxhdGUgdGhlIHJlYWwgdGltaW5nICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCQkoMjUwLjAgKiAoZG91YmxlKWJfUENJSW5wdXRDbG9jaykpOworCQkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCSgyNTAuMAorCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jayk7CisKKwkJCQkJCQkJCQkJaWYgKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSAvICgyNTAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKGRvdWJsZSkoKGRvdWJsZSl1bF9SZWFsVGltaW5nSW50ZXJ2YWwgKyAwLjUpKSB7CisJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJCTE7CisJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJCTI7CisKKwkJCQkJCQkJCQkJaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF80ME1IWikgeworCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkJKHVsX1RpbWVyVmFsdWUpCisJCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJCTEuMDA3NzUyMjg4KTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJCWJyZWFrOworCisJCQkJICAgICAgLyoqKioqLworCQkJCQkJCQkJCQkvKiBzICovCisJCQkJICAgICAgLyoqKioqLworCisJCQkJCQkJCQkJY2FzZSAzOgorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFRpbWVyIDAgZmFjdG9yICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJKHVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSk7CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1pbmdJbnRlcnZhbCAqICgyNTAwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSk7CisJCQkJCQkJCQkJCWRfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKTsKKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDI1MDAwMC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSA+PSAoZG91YmxlKSgoZG91YmxlKXVsX1JlYWxUaW1pbmdJbnRlcnZhbCArIDAuNSkpIHsKKwkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLQorCQkJCQkJCQkJCQkJMjsKKworCQkJCQkJCQkJCQlpZiAoYl9QQ0lJbnB1dENsb2NrICE9IEFQQ0kxNzEwXzQwTUhaKSB7CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCShVTE9ORykKKwkJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZSkKKwkJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkJMS4wMDc3NTIyODgpOworCQkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkgICAgICAvKioqKioqLworCQkJCQkJCQkJCQkvKiBtbiAqLworCQkJCSAgICAgIC8qKioqKiovCisKKwkJCQkJCQkJCQljYXNlIDQ6CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogVGltZXIgMCBmYWN0b3IgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkoCisJCQkJCQkJCQkJCQkodWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkJNjApCisJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkoMjUwMDAwLjAKKwkJCQkJCQkJCQkJCQkqCisJCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSk7CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFJvdW5kIHRoZSB2YWx1ZSAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQlpZiAoKGRvdWJsZSkoKGRvdWJsZSkodWxfVGltaW5nSW50ZXJ2YWwgKiA2MC4wKSAqICgyNTAwMDAuMCAqIChkb3VibGUpYl9QQ0lJbnB1dENsb2NrKSkgPj0gKChkb3VibGUpKChkb3VibGUpdWxfVGltZXJWYWx1ZSArIDAuNSkpKSB7CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkJMTsKKwkJCQkJCQkJCQkJfQorCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogQ2FsY3VsYXRlIHRoZSByZWFsIHRpbWluZyAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkoVUxPTkcpCisJCQkJCQkJCQkJCQkodWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQkJLworCQkJCQkJCQkJCQkJKDI1MDAwMC4wCisJCQkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQkJCShkb3VibGUpCisJCQkJCQkJCQkJCQkJYl9QQ0lJbnB1dENsb2NrKSkKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCTYwOworCQkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJKAorCQkJCQkJCQkJCQkJKGRvdWJsZSkKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCS8KKwkJCQkJCQkJCQkJCSgyNTAwMDAuMAorCQkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaykpCisJCQkJCQkJCQkJCQkvCisJCQkJCQkJCQkJCQk2MC4wOworCisJCQkJCQkJCQkJCWlmICgoZG91YmxlKSgoKGRvdWJsZSl1bF9UaW1lclZhbHVlIC8gKDI1MDAwMC4wICogKGRvdWJsZSliX1BDSUlucHV0Q2xvY2spKSAvIDYwLjApID49IChkb3VibGUpKChkb3VibGUpdWxfUmVhbFRpbWluZ0ludGVydmFsICsgMC41KSkgeworCQkJCQkJCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQkJdWxfVGltaW5nSW50ZXJ2YWwKKwkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQl1bF9UaW1lclZhbHVlCisJCQkJCQkJCQkJCQktCisJCQkJCQkJCQkJCQkyOworCisJCQkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkJCQkJCQkJCXVsX1RpbWVyVmFsdWUKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJKFVMT05HKQorCQkJCQkJCQkJCQkJCSgKKwkJCQkJCQkJCQkJCQkoZG91YmxlKQorCQkJCQkJCQkJCQkJCSh1bF9UaW1lclZhbHVlKQorCQkJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJCQkxLjAwNzc1MjI4OCk7CisJCQkJCQkJCQkJCX0KKworCQkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlmcHVfZW5kKCk7CisJCQkJCQkJCQl9CS8vIGlmIChiX1BDSUlucHV0Q2xvY2sgIT0gQVBDSTE3MTBfR0FURV9JTlBVVCkKKwkJCQkJCQkJCWVsc2UgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIDIgQ2xvY2sgdXNlZCBmb3IgdGhlIG92ZXJmbG93IGFuZCB0aGUgcmVsb2FkIGZyb20gY291bnRlciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJdWxfVGltZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCXVsX1RpbWluZ0ludGVydmFsCisJCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkJMjsKKwkJCQkJCQkJCX0JLy8gaWYgKGJfUENJSW5wdXRDbG9jayAhPSBBUENJMTcxMF9HQVRFX0lOUFVUKQorCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTYXZlIHRoZSBQQ0kgaW5wdXQgY2xvY2sgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJCWJfUENJSW5wdXRDbG9jaworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1BDSUlucHV0Q2xvY2s7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2F2ZSB0aGUgdGltaW5nIHVuaXQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19Ub3JDb3VudGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCQlzX1RvckNvdW50ZXJJbmZvCisJCQkJCQkJCQkJW2JfVG9yQ291bnRlcl0uCisJCQkJCQkJCQkJYl9UaW1pbmdVbml0CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWJfVGltaW5nVW5pdDsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTYXZlIHRoZSBiYXNlIHRpbWluZyAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19Ub3JDb3VudGVyTW9kdWxlSW5mby4KKwkJCQkJCQkJCQlzX1RvckNvdW50ZXJJbmZvCisJCQkJCQkJCQkJW2JfVG9yQ291bnRlcl0uCisJCQkJCQkJCQkJZF9UaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkX1JlYWxUaW1pbmdJbnRlcnZhbDsKKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfVG9yQ291bnRlck1vZHVsZUluZm8uCisJCQkJCQkJCQkJc19Ub3JDb3VudGVySW5mbworCQkJCQkJCQkJCVtiX1RvckNvdW50ZXJdLgorCQkJCQkJCQkJCXVsX1JlYWxUaW1pbmdJbnRlcnZhbAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQl1bF9SZWFsVGltaW5nSW50ZXJ2YWw7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIEdldCB0aGUgY29tbWFuZCAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQk0CisJCQkJCQkJCQkJKworCQkJCQkJCQkJCSgxNiAqIGJfVG9yQ291bnRlcikgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJKGR3X0NvbW1hbmQKKwkJCQkJCQkJCQk+PgorCQkJCQkJCQkJCTQpCisJCQkJCQkJCQkJJgorCQkJCQkJCQkJCTB4RjsKKworCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUZXN0IGlmIDQwIE1IeiAqLworCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfNDBNSFopIHsKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBTZXQgdGhlIDQwIE1IeiBzZWxlY3Rpb24gKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQlkd19Db21tYW5kCisJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJMHgxMDsKKwkJCQkJCQkJCX0KKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRlc3QgaWYgZXh0ZXJuIGNsb2NrIHVzZWQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmIChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfR0FURV9JTlBVVCkgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFNldCB0aGUgNDAgTUh6IHNlbGVjdGlvbiAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJZHdfQ29tbWFuZAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWR3X0NvbW1hbmQKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkweDIwOworCQkJCQkJCQkJfQorCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBXcml0ZSB0aGUgbmV3IGNvbW1hbmQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bChkd19Db21tYW5kLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDQgKyAoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJLyoqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBEaXNhYmxlIHRoZSB0b3IgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bCgwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDggKyAoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2V0IHRoZSB0aW1lciAxIHZhbHVlICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCW91dGwodWxfVGltZXJWYWx1ZSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAwICsgKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBUb3IgY291bnRlciBpbml0LiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQkJCQkJCXNfVG9yQ291bnRlckluZm8KKwkJCQkJCQkJCQlbYl9Ub3JDb3VudGVyXS4KKwkJCQkJCQkJCQliX1RvckNvdW50ZXJJbml0CisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCTE7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVE9SIHZlcnNpb24gZXJyb3IgZm9yIDQwTUh6IGNsb2NrIHNlbGVjdGlvbiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJRFBSSU5USygiVE9SIHZlcnNpb24gZXJyb3IgZm9yIDQwTUh6IGNsb2NrIHNlbGVjdGlvblxuIik7CisJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCS05OworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCB0aGlzIGJvYXJkICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJZb3UgY2FuIG5vdCB1c2VkIHRoZSA0ME1IeiBjbG9jayBzZWxlY3Rpb24gd2ljaCB0aGlzIGJvYXJkXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktODsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlEUFJJTlRLKCJCYXNlIHRpbWluZyBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNzsKKwkJCQkJCX0KKwkJCQkJfQkvLyBpZiAoKGJfVGltaW5nVW5pdCA+PSAwKSAmJiAoYl9UaW1pbmdVbml0IDw9IDQpKQorCQkJCQllbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGltaW5nIHVuaXQgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVGltaW5nIHVuaXQgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJfQkvLyBpZiAoKGJfVGltaW5nVW5pdCA+PSAwKSAmJiAoYl9UaW1pbmdVbml0IDw9IDQpKQorCQkJCX0JLy8gaWYgKChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzBNSFopIHx8IChiX1BDSUlucHV0Q2xvY2sgPT0gQVBDSTE3MTBfMzNNSFopKQorCQkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUaGUgc2VsZWN0ZWQgUENJIGlucHV0IGNsb2NrIGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiVGhlIHNlbGVjdGVkIFBDSSBpbnB1dCBjbG9jayBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQl9CS8vIGlmICgoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMwTUhaKSB8fCAoYl9QQ0lJbnB1dENsb2NrID09IEFQQ0kxNzEwXzMzTUhaKSkKKwkJCX0JLy8gaWYgKGJfVG9yQ291bnRlck1vZGUgPj0gMCAmJiBiX1RvckNvdW50ZXJNb2RlIDw9IDcpCisJCQllbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRvciBDb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlEUFJJTlRLKCJUb3IgQ291bnRlciBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfVG9yQ291bnRlck1vZGUgPj0gMCAmJiBiX1RvckNvdW50ZXJNb2RlIDw9IDcpCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSB0b3IgY291bnRlciBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisJZGF0YVswXSA9IChVSU5UKSB1bF9SZWFsVGltaW5nSW50ZXJ2YWw7CisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfRW5hYmxlVG9yQ291bnRlciAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gYl9Cb2FyZEhhbmRsZSwgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyLCAgICAgICAgICAgfAorfAkJCQkJCSBCWVRFXyBiX1RvckNvdW50ZXIsICAgICAgICAgfAorfAkJCQkJCSBCWVRFXyBiX0lucHV0TW9kZSwgICAgICAgICAgfAorfAkJCQkJCSBCWVRFXyBiX0V4dGVybkdhdGUsICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQ3ljbGVNb2RlLCAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnRlcnJ1cHRFbmFibGUpICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEVuYWJsZSB0aGUgdG9yIGNvdW50ZXIgKGJfVG9yQ291bnRlcikgZnJvbSBzZWxlY3RlZCAgICB8Cit8CQkgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpLiBZb3UgbXVzdCBjYWxsaW5nIHRoZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUb3JDb3VudGVyIiBmdW5jdGlvbiBiZSBmb3IgeW91IGNhbGwgICB8Cit8CQkgICAgICB0aGlzIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIElmIHlvdSBlbmFibGUgdGhlIHRvciBjb3VudGVyIGludGVycnVwdCwgdGhlICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdG9yIGNvdW50ZXIgZ2VuZXJhdGUgYSBpbnRlcnJ1cHQgYWZ0ZXIgdGhlIHRpbWluZyBjeWNsZXwKK3wgICAgICAgICAgICAgICAgICAgICBTZWUgZnVuY3Rpb24gImlfQVBDSTE3MTBfU2V0Qm9hcmRJbnRSb3V0aW5lWCIgYW5kIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgIEludGVycnVwdCBtYXNrIGRlc2NyaXB0aW9uIGNoYXB0ZXIgZnJvbSB0aGlzIG1hbnVhbC4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhlIGJfQ3ljbGVNb2RlIHBhcmFtZXRlciBkZXRlcm1pbmUgaWYgeW91IHdpbGwgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBtZWFzdXJlZCBhIHNpbmdsZSBvciBtb3JlIGN5Y2xlLiAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMykgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfVG9yQ291bnRlciAgIDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uICgwIG9yIDEpLiB8Cit8CQkgICAgICBCWVRFXyBiX0lucHV0TW9kZSAgICA6IElucHV0IHNpZ25hbCBsZXZlbCBzZWxlY3Rpb24gICAgfAorfAkJCQkJCTAgOiBUb3IgY291bnQgZWFjaCBsb3cgbGV2ZWwgfAorfAkJCQkJCTEgOiBUb3IgY291bnQgZWFjaCBoaWdoIGxldmVsfAorfAkJICAgICAgQllURV8gYl9FeHRlcm5HYXRlICAgOiBFeHRlcm4gZ2F0ZSBhY3Rpb24gc2VsZWN0aW9uICAgIHwKK3wJCQkJCQkwIDogRXh0ZXJuIGdhdGUgc2lnbmFsIG5vdCAgIHwKK3wJCQkJCQkgICAgdXNlZCAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkxIDogRXh0ZXJuIGdhdGUgc2lnbmFsIHVzZWQuIHwKK3wJCQkJCQkgICAgSWYgeW91IHNlbGVjdGVkIHRoZSAgICAgIHwKK3wJCQkJCQkgICAgc2luZ2xlIG1vZGUsIGVhY2ggaGlnaCAgIHwKK3wJCQkJCQkgICAgbGV2ZWwgc2lnbmFsIHN0YXJ0IHRoZSAgIHwKK3wJCQkJCQkgICAgY291bnRlci4gICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkgICAgSWYgeW91IHNlbGVjdGVkIHRoZSAgICAgIHwKK3wJCQkJCQkgICAgY29udGludW91cyBtb2RlLCB0aGUgICAgIHwKK3wJCQkJCQkgICAgZmlyc3QgaGlnaCBsZXZlbCBzaWduYWwgIHwKK3wJCQkJCQkgICAgc3RhcnQgdGhlIHRvciBjb3VudGVyICAgIHwKK3wJCQkJCQkJCQkgICAgIHwKK3wJCQkJCSAgICAgIEFQQ0kxNzEwX1RPUl9RVUFEUlVQTEUgX01PREUgOiB8Cit8CQkJCQkgICAgICBJbiB0aGUgcXVhZHJ1cGxlIG1vZGUsIHRoZSBlZGdlfAorfAkJCQkJICAgICAgYW5hbHlzaXMgY2lyY3VpdCBnZW5lcmF0ZXMgYSAgIHwKK3wJCQkJCSAgICAgIGNvdW50aW5nIHB1bHNlIGZyb20gZWFjaCBlZGdlICB8Cit8CQkJCQkgICAgICBvZiAyIHNpZ25hbHMgd2hpY2ggYXJlIHBoYXNlICAgfAorfAkJCQkJICAgICAgc2hpZnRlZCBpbiByZWxhdGlvbiB0byBlYWNoICAgIHwKK3wJCQkJCSAgICAgIG90aGVyLiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgICAgICBUaGUgZ2F0ZSBpbnB1dCBpcyB1c2VkIGZvciB0aGUgfAorfAkJCQkJICAgICAgc2lnbmFsIEIgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkgICAgIHwKK3wJCQkJCSAgICAgIEFQQ0kxNzEwX1RPUl9ET1VCTEVfTU9ERTogICAgICB8Cit8CQkJCQkgICAgICBGdW5jdGlvbnMgaW4gdGhlIHNhbWUgd2F5IGFzICAgfAorfAkJCQkJICAgICAgdGhlIHF1YWRydXBsZSBtb2RlLCBleGNlcHQgdGhhdHwKK3wJCQkJCSAgICAgIG9ubHkgdHdvIG9mIHRoZSBmb3VyIGVkZ2VzIGFyZSB8Cit8CQkJCQkgICAgICBhbmFseXNlZCBwZXIgcGVyaW9kLiAgICAgICAgICAgfAorfAkJCQkJICAgICAgVGhlIGdhdGUgaW5wdXQgaXMgdXNlZCBmb3IgdGhlIHwKK3wJCQkJCSAgICAgIHNpZ25hbCBCICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJICAgICB8Cit8CQkJCQkgICAgICBBUENJMTcxMF9UT1JfU0lNUExFX01PREU6ICAgICAgfAorfAkJCQkJICAgICAgRnVuY3Rpb25zIGluIHRoZSBzYW1lIHdheSBhcyAgIHwKK3wJCQkJCSAgICAgIHRoZSBxdWFkcnVwbGUgbW9kZSwgZXhjZXB0IHRoYXR8Cit8CQkJCQkgICAgICBvbmx5IG9uZSBvZiB0aGUgZm91ciBlZGdlcyBpcyAgfAorfAkJCQkJICAgICAgYW5hbHlzZWQgcGVyIHBlcmlvZC4gICAgICAgICAgIHwKK3wJCQkJCSAgICAgIFRoZSBnYXRlIGlucHV0IGlzIHVzZWQgZm9yIHRoZSB8Cit8CQkJCQkgICAgICBzaWduYWwgQiAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfQ3ljbGVNb2RlICAgIDogU2VsZWN0ZWQgdGhlIHRvciBjb3VudGVyICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3F1aXNpdGlvbiBtb2RlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX0ludGVycnVwdEVuYWJsZSA6IEVuYWJsZSBvciBkaXNhYmxlIHRoZSAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9yIGNvdW50ZXIgaW50ZXJydXB0LiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9FTkFCTEU6ICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuYWJsZSB0aGUgdG9yIGNvdW50ZXIgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUENJMTcxMF9ESVNBQkxFOiAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc2FibGUgdGhlIHRvciBjb3VudGVyICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBUb3IgY291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUb3JDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogVG9yIGlucHV0IHNpZ25hbCBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC03OiBFeHRlcm4gZ2F0ZSBzaWduYWwgbW9kZSBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTg6IFRvciBjb3VudGVyIGFjcXVpc2l0aW9uIG1vZGUgY3ljbGUgaXMgd3JvbmcgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtOTogSW50ZXJydXB0IHBhcmFtZXRlciBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0xMDpJbnRlcnJ1cHQgZnVuY3Rpb24gbm90IGluaXRpYWxpc2VkLiAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0Rpc2FibGVUb3JDb3VudGVyICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICBiX0JvYXJkSGFuZGxlLCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gIGJfTW9kdWxOYnIsICAgICAgICAgIHwKK3wJCQkJCQkgQllURV8gIGJfVG9yQ291bnRlcikgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IERpc2FibGUgdGhlIHRvciBjb3VudGVyIChiX1RvckNvdW50ZXIpIGZyb20gc2VsZWN0ZWQgICB8Cit8CQkgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpLiBJZiB5b3UgZGlzYWJsZSB0aGUgdG9yIGNvdW50ZXIgICAgfAorfAkJICAgICAgYWZ0ZXIgYSBzdGFydCBjeWNsZSBvY2N1ciBhbmQgeW91IHJlc3RhcnQgdGhlIHRvciAgICAgIHwKK3wJCSAgICAgIGNvdW50ZXIgd2l0Y2ggdGhlICIgaV9BUENJMTcxMF9FbmFibGVUb3JDb3VudGVyIiAgICAgICB8Cit8CQkgICAgICBmdW5jdGlvbiwgdGhlIHN0YXR1cyByZWdpc3RlciBpcyBjbGVhcmVkICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICA6IFNlbGVjdGVkIG1vZHVsZSBudW1iZXIgKDAgdG8gMykgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfVG9yQ291bnRlciAgIDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uICgwIG9yIDEpLiB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBUb3IgY291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUb3JDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNjogVG9yIGNvdW50ZXIgbm90IGVuYWJsZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9FbmFibGVUb3JDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVUb3JDb3VudGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzOworCURXT1JEIGR3X0R1bW15UmVhZDsKKwlEV09SRCBkd19Db25maWdSZWc7CisJQllURSBiX01vZHVsTmJyLCBiX0FjdGlvbjsKKwlCWVRFIGJfVG9yQ291bnRlcjsKKwlCWVRFIGJfSW5wdXRNb2RlOworCUJZVEUgYl9FeHRlcm5HYXRlOworCUJZVEUgYl9DeWNsZU1vZGU7CisJQllURSBiX0ludGVycnVwdEVuYWJsZTsKKworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9BY3Rpb24gPSAoQllURSkgZGF0YVswXTsJLy8gZW5hYmxlIG9yIGRpc2FibGUKKwliX1RvckNvdW50ZXIgPSAoQllURSkgZGF0YVsxXTsKKwliX0lucHV0TW9kZSA9IChCWVRFKSBkYXRhWzJdOworCWJfRXh0ZXJuR2F0ZSA9IChCWVRFKSBkYXRhWzNdOworCWJfQ3ljbGVNb2RlID0gKEJZVEUpIGRhdGFbNF07CisJYl9JbnRlcnJ1cHRFbmFibGUgPSAoQllURSkgZGF0YVs1XTsKKwlpX1JldHVyblZhbHVlID0gaW5zbi0+bjs7CisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiB0b3IgY291bnRlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9UT1JfQ09VTlRFUikgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgdG9yIGNvdW50ZXIgc2VsZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1RvckNvdW50ZXIgPD0gMSkgeworCQkJCXN3aXRjaCAoYl9BY3Rpb24pCS8vIEVuYWJsZSBvciBEaXNhYmxlCisJCQkJeworCQkJCWNhc2UgQVBDSTE3MTBfRU5BQkxFOgorCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHRvciBjb3VudGVyIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgOCArCisJCQkJCQkoMTYgKiBiX1RvckNvdW50ZXIpICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQlpZiAoZHdfU3RhdHVzICYgMHgxMCkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgdGhlIGlucHV0IHNpZ25hbCBtb2RlICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoYl9JbnB1dE1vZGUgPT0gMCB8fAorCQkJCQkJCWJfSW5wdXRNb2RlID09IDEgfHwKKwkJCQkJCQliX0lucHV0TW9kZSA9PQorCQkJCQkJCUFQQ0kxNzEwX1RPUl9TSU1QTEVfTU9ERQorCQkJCQkJCXx8IGJfSW5wdXRNb2RlID09CisJCQkJCQkJQVBDSTE3MTBfVE9SX0RPVUJMRV9NT0RFCisJCQkJCQkJfHwgYl9JbnB1dE1vZGUgPT0KKwkJCQkJCQlBUENJMTcxMF9UT1JfUVVBRFJVUExFX01PREUpCisJCQkJCQl7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgdGhlIGV4dGVybiBnYXRlIHNpZ25hbCBtb2RlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfRXh0ZXJuR2F0ZSA9PSAwCisJCQkJCQkJCXx8IGJfRXh0ZXJuR2F0ZQorCQkJCQkJCQk9PSAxCisJCQkJCQkJCXx8IGJfSW5wdXRNb2RlID4KKwkJCQkJCQkJMSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBUZXN0IHRoZSBjeWNsZSBtb2RlIHBhcmFtZXRlciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCWlmICgoYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfU0lOR0xFKSB8fCAoYl9DeWNsZU1vZGUgPT0gQVBDSTE3MTBfQ09OVElOVU9VUykpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRlc3QgdGhlIGludGVycnVwdCBmbGFnICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKSB8fCAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRElTQUJMRSkpIHsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogU2F2ZSB0aGUgaW50ZXJydXB0IG1vZGUgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJCXNfVG9yQ291bnRlck1vZHVsZUluZm8uCisJCQkJCQkJCQkJCXNfVG9yQ291bnRlckluZm8KKwkJCQkJCQkJCQkJW2JfVG9yQ291bnRlcl0uCisJCQkJCQkJCQkJCWJfSW50ZXJydXB0RW5hYmxlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJYl9JbnRlcnJ1cHRFbmFibGU7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBHZXQgdGhlIGNvbW1hbmQgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTQKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJCQkJZHdfQ29uZmlnUmVnCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJKGR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQk+PgorCQkJCQkJCQkJCQk0KQorCQkJCQkJCQkJCQkmCisJCQkJCQkJCQkJCTB4MzA7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogVGVzdCBpZiBub3QgZGlyZWN0IG1vZGUgdXNlZCAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmIChiX0lucHV0TW9kZSA+IDEpIHsKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogRXh0ZXJuIGdhdGUgY2FuIG5vdCBiZSB1c2VkICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJYl9FeHRlcm5HYXRlCisJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkwOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIEVuYWJsZSB0aGUgZXh0ZXJuIGdhdGUgZm9yIHRoZSBTaWduYWwgQiAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJZHdfQ29uZmlnUmVnCisJCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCQkweDQwOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBUZXN0IGlmIHNpbXBsZSBtb2RlICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCWlmIChiX0lucHV0TW9kZSA9PSBBUENJMTcxMF9UT1JfU0lNUExFX01PREUpIHsKKwkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJCS8qIEVuYWJsZSB0aGUgc2lucGxlIG1vZGUgKi8KKwkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQkJZHdfQ29uZmlnUmVnCisJCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJCQkweDc4MDsKKworCQkJCQkJCQkJCQl9CS8vIGlmIChiX0lucHV0TW9kZSA9PSBBUENJMTcxMF9UT1JfU0lNUExFX01PREUpCisKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFRlc3QgaWYgZG91YmxlIG1vZGUgKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkJaWYgKGJfSW5wdXRNb2RlID09IEFQQ0kxNzEwX1RPUl9ET1VCTEVfTU9ERSkgeworCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkJLyogRW5hYmxlIHRoZSBkb3VibGUgbW9kZSAqLworCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCQlkd19Db25maWdSZWcKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJZHdfQ29uZmlnUmVnCisJCQkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkJCTB4MTgwOworCisJCQkJCQkJCQkJCX0JLy8gaWYgKGJfSW5wdXRNb2RlID09IEFQQ0kxNzEwX1RPUl9ET1VCTEVfTU9ERSkKKworCQkJCQkJCQkJCQliX0lucHV0TW9kZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJMDsKKwkJCQkJCQkJCQl9CS8vIGlmIChiX0lucHV0TW9kZSA+IDEpCisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBTZXQgdGhlIGNvbW1hbmQgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWR3X0NvbmZpZ1JlZworCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCWJfQ3ljbGVNb2RlCisJCQkJCQkJCQkJCXwKKwkJCQkJCQkJCQkJKGJfSW50ZXJydXB0RW5hYmxlCisJCQkJCQkJCQkJCSoKKwkJCQkJCQkJCQkJMikKKwkJCQkJCQkJCQkJfAorCQkJCQkJCQkJCQkoYl9JbnB1dE1vZGUKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQk0KQorCQkJCQkJCQkJCQl8CisJCQkJCQkJCQkJCShiX0V4dGVybkdhdGUKKwkJCQkJCQkJCQkJKgorCQkJCQkJCQkJCQk4KTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBDbGVhciB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJZHdfRHVtbXlSZWFkCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJaW5sCisJCQkJCQkJCQkJCShkZXZwcml2LT4KKwkJCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJMAorCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCSgxNiAqIGJfVG9yQ291bnRlcikgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWR3X0R1bW15UmVhZAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTEyCisJCQkJCQkJCQkJCSsKKwkJCQkJCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBTZXQgdGhlIGNvbW1hbmRvICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJb3V0bChkd19Db25maWdSZWcsIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgNCArICgxNiAqIGJfVG9yQ291bnRlcikgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBTZXQgdGhlIGdhdGUgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCW91dGwoMSwgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA4ICsgKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCQkJfQkvLyBpZiAoKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSkgfHwgKGJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0RJU0FCTEUpKQorCQkJCQkJCQkJZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIEludGVycnVwdCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQlEUFJJTlRLKCJJbnRlcnJ1cHQgcGFyYW1ldGVyIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJCQlpX1JldHVyblZhbHVlCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJLTk7CisJCQkJCQkJCQl9CS8vIGlmICgoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRU5BQkxFKSB8fCAoYl9JbnRlcnJ1cHRFbmFibGUgPT0gQVBDSTE3MTBfRElTQUJMRSkpCisJCQkJCQkJCX0JLy8gaWYgKChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9TSU5HTEUpIHx8IChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9DT05USU5VT1VTKSkKKwkJCQkJCQkJZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRvciBjb3VudGVyIGFjcXVpc2l0aW9uIG1vZGUgY3ljbGUgaXMgd3JvbmcgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlEUFJJTlRLKCJUb3IgY291bnRlciBhY3F1aXNpdGlvbiBtb2RlIGN5Y2xlIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJCWlfUmV0dXJuVmFsdWUKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJLTg7CisJCQkJCQkJCX0JLy8gaWYgKChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9TSU5HTEUpIHx8IChiX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9DT05USU5VT1VTKSkKKwkJCQkJCQl9CS8vIGlmIChiX0V4dGVybkdhdGUgPj0gMCAmJiBiX0V4dGVybkdhdGUgPD0gMSkKKwkJCQkJCQllbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBFeHRlcm4gZ2F0ZSBpbnB1dCBtb2RlIGlzIHdyb25nICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJFeHRlcm4gZ2F0ZSBpbnB1dCBtb2RlIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNzsKKwkJCQkJCQl9CS8vIGlmIChiX0V4dGVybkdhdGUgPj0gMCAmJiBiX0V4dGVybkdhdGUgPD0gMSkKKwkJCQkJCX0JLy8gaWYgKGJfSW5wdXRNb2RlID49IDAgJiYgYl9JbnB1dE1vZGUgPD0gMSkKKwkJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUb3IgaW5wdXQgc2lnbmFsIHNlbGVjdGlvbiBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIlRvciBpbnB1dCBzaWduYWwgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRvciBjb3VudGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlRvciBjb3VudGVyIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEFQQ0kxNzEwX0RJU0FCTEU6CisJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHRvciBjb3VudGVyIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyA4ICsKKwkJCQkJCSgxNiAqIGJfVG9yQ291bnRlcikgKworCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBjb3VudGVyIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoZHdfU3RhdHVzICYgMHgxMCkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgY291bnRlciBlbmFibGVkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoZHdfU3RhdHVzICYgMHgxKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBDbGVhciB0aGUgaW50ZXJydXB0IG1vZGUgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQkJCQlzX1RvckNvdW50ZXJJbmZvCisJCQkJCQkJCVtiX1RvckNvdW50ZXJdLgorCQkJCQkJCQliX0ludGVycnVwdEVuYWJsZQorCQkJCQkJCQk9CisJCQkJCQkJCUFQQ0kxNzEwX0RJU0FCTEU7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogQ2xlYXIgdGhlIGdhdGUgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlvdXRsKDAsIGRldnByaXYtPgorCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCXVpX0FkZHJlc3MgKyA4ICsKKwkJCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MSkKKwkJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUb3IgY291bnRlciBub3QgZW5hYmxlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIlRvciBjb3VudGVyIG5vdCBlbmFibGVkIFxuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHgxKQorCQkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEwKQorCQkJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQkvLyAvLyBpZiAoZHdfU3RhdHVzICYgMHgxMCkKKworCQkJCX0JLy8gc3dpdGNoCisJCQl9CS8vIGlmIChiX1RvckNvdW50ZXIgPD0gMSkKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRvciBjb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJfQkvLyBpZiAoYl9Ub3JDb3VudGVyIDw9IDEpCisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSB0b3IgY291bnRlciBtb2R1bGUgXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3IgXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0dldFRvckNvdW50ZXJJbml0aWFsaXNhdGlvbiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgIHwKK3wJCQkJCQkgQllURV8gICAgIGJfVG9yQ291bnRlciwgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSBQQllURV8gICBwYl9UaW1pbmdVbml0LCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJIFBVTE9OR18gcHVsX1RpbWluZ0ludGVydmFsLCB8Cit8CQkJCQkJIFBCWVRFXyAgIHBiX0lucHV0TW9kZSwgICAgICB8Cit8CQkJCQkJIFBCWVRFXyAgIHBiX0V4dGVybkdhdGUsICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfQ3ljbGVNb2RlLCAgICAgIHwKK3wJCQkJCQkgUEJZVEVfICAgcGJfRW5hYmxlLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQllURV8gICBwYl9JbnRlcnJ1cHRFbmFibGUpfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRW5hYmxlIHRoZSB0b3IgY291bnRlciAoYl9Ub3JDb3VudGVyKSBmcm9tIHNlbGVjdGVkICAgIHwKK3wJCSAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuIFlvdSBtdXN0IGNhbGxpbmcgdGhlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfSW5pdFRvckNvdW50ZXIiIGZ1bmN0aW9uIGJlIGZvciB5b3UgY2FsbCAgIHwKK3wJCSAgICAgIHRoaXMgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgSWYgeW91IGVuYWJsZSB0aGUgdG9yIGNvdW50ZXIgaW50ZXJydXB0LCB0aGUgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB0b3IgY291bnRlciBnZW5lcmF0ZSBhIGludGVycnVwdCBhZnRlciB0aGUgdGltaW5nIGN5Y2xlfAorfCAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiAiaV9BUENJMTcxMF9TZXRCb2FyZEludFJvdXRpbmVYIiBhbmQgdGhlICB8Cit8ICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IG1hc2sgZGVzY3JpcHRpb24gY2hhcHRlciBmcm9tIHRoaXMgbWFudWFsLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBUaGUgYl9DeWNsZU1vZGUgcGFyYW1ldGVyIGRldGVybWluZSBpZiB5b3Ugd2lsbCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmVkIGEgc2luZ2xlIG9yIG1vcmUgY3ljbGUuICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKSB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Ub3JDb3VudGVyICAgOiBUb3IgY291bnRlciBzZWxlY3Rpb24gKDAgb3IgMSkKKworCWJfTW9kdWxOYnIJCQk9CUNSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfVG9yQ291bnRlcgkJPQlDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKy4gfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUEJZVEVfICBwYl9UaW1pbmdVbml0ICAgIDogQmFzZSB0aW1pbmcgdW5pdCAoMCB0byA0KSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IG5zICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogwrVzICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogbXMgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgOiBzICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCA6IG1uICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFBVTE9OR18gcHVsX1RpbWluZ0ludGVydmFsIDogQmFzZSB0aW1pbmcgdmFsdWUuICAgICAgICB8Cit8CQkgICAgICBQQllURV8gcGJfSW5wdXRNb2RlICAgICAgICA6IElucHV0IHNpZ25hbCBsZXZlbCAgICAgICAgfAorfAkJCQkJCSAgIHNlbGVjdGlvbiAgCQkgICAgIHwKK3wJCQkJCQkwIDogVG9yIGNvdW50IGVhY2ggbG93IGxldmVsIHwKK3wJCQkJCQkxIDogVG9yIGNvdW50IGVhY2ggaGlnaCBsZXZlbHwKK3wJCSAgICAgIFBCWVRFXyBwYl9FeHRlcm5HYXRlCTogRXh0ZXJuIGdhdGUgYWN0aW9uICAgICAgICAgfAorfAkJCQkJCSAgc2VsZWN0aW9uICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCSAgMCA6IEV4dGVybiBnYXRlIHNpZ25hbCBub3QgfAorfAkJCQkJCSAgICAgIHVzZWQgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCSAgMSA6IEV4dGVybiBnYXRlIHNpZ25hbCB1c2VkfAorfCAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyBwYl9DeWNsZU1vZGUgICAgICAgOiBUb3IgY291bnRlciBhY3F1aXNpdGlvbiAgICB8Cit8CQkJCQkJICBtb2RlICAgICAgICAgICAJICAgICB8Cit8CQkgICAgICBQQllURV8gcGJfRW5hYmxlCQk6IEluZGljYXRlIGlmIHRoZSB0b3IgY291bnRlcnwKK3wJCQkJCQkgIGlzIGVuYWJsZWQgb3Igbm8gICAgICAgICAgIHwKK3wJCQkJCQkgIDAgOiBUb3IgY291bnRlciBkaXNhYmxlZCAgIHwKK3wJCQkJCQkgIDEgOiBUb3IgY291bnRlciBlbmFibGVkICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQQllURV8gcGJfSW50ZXJydXB0RW5hYmxlIDogRW5hYmxlIG9yIGRpc2FibGUgdGhlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3IgY291bnRlciBpbnRlcnJ1cHQuICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0VOQUJMRTogICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHRoZSB0b3IgY291bnRlciAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQQ0kxNzEwX0RJU0FCTEU6ICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGlzYWJsZSB0aGUgdG9yIGNvdW50ZXIgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHQKKwlwYl9UaW1pbmdVbml0CQk9CShQQllURSkgJmRhdGFbMF07CisJcHVsX1RpbWluZ0ludGVydmFsCT0gIChQVUxPTkcpICZkYXRhWzFdOworCXBiX0lucHV0TW9kZQkJPQkoUEJZVEUpICZkYXRhWzJdOworCXBiX0V4dGVybkdhdGUJCT0JKFBCWVRFKSAmZGF0YVszXTsKKwlwYl9DeWNsZU1vZGUJCT0JKFBCWVRFKSAmZGF0YVs0XTsKKwlwYl9FbmFibGUJCQk9CShQQllURSkgJmRhdGFbNV07CisJcGJfSW50ZXJydXB0RW5hYmxlCT0JKFBCWVRFKSAmZGF0YVs2XTsKKyAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMTogVGhlIGhhbmRsZSBwYXJhbWV0ZXIgb2YgdGhlIGJvYXJkIGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0yOiBNb2R1bGUgc2VsZWN0aW9uIHdyb25nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTM6IFRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNDogVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC01OiBUb3IgY291bnRlciBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUb3JDb3VudGVyIiAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRHZXRUb3JDb3VudGVySW5pdGlhbGlzYXRpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXM7CisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9Ub3JDb3VudGVyOworCVBCWVRFIHBiX1RpbWluZ1VuaXQ7CisJUFVMT05HIHB1bF9UaW1pbmdJbnRlcnZhbDsKKwlQQllURSBwYl9JbnB1dE1vZGU7CisJUEJZVEUgcGJfRXh0ZXJuR2F0ZTsKKwlQQllURSBwYl9DeWNsZU1vZGU7CisJUEJZVEUgcGJfRW5hYmxlOworCVBCWVRFIHBiX0ludGVycnVwdEVuYWJsZTsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX1RvckNvdW50ZXIgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXBiX1RpbWluZ1VuaXQgPSAoUEJZVEUpICYgZGF0YVswXTsKKwlwdWxfVGltaW5nSW50ZXJ2YWwgPSAoUFVMT05HKSAmIGRhdGFbMV07CisJcGJfSW5wdXRNb2RlID0gKFBCWVRFKSAmIGRhdGFbMl07CisJcGJfRXh0ZXJuR2F0ZSA9IChQQllURSkgJiBkYXRhWzNdOworCXBiX0N5Y2xlTW9kZSA9IChQQllURSkgJiBkYXRhWzRdOworCXBiX0VuYWJsZSA9IChQQllURSkgJiBkYXRhWzVdOworCXBiX0ludGVycnVwdEVuYWJsZSA9IChQQllURSkgJiBkYXRhWzZdOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgdG9yIGNvdW50ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfVE9SX0NPVU5URVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHRvciBjb3VudGVyIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9Ub3JDb3VudGVyIDw9IDEpIHsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgdG9yIGNvdW50ZXIgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCXVpX0FkZHJlc3MgKyA4ICsgKDE2ICogYl9Ub3JDb3VudGVyKSArCisJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCWlmIChkd19TdGF0dXMgJiAweDEwKSB7CisJCQkJCSpwYl9FbmFibGUgPSBkd19TdGF0dXMgJiAxOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEdldCB0aGUgY29tbWFuZG8gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDQgKworCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArCisJCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJCQkJKnBiX0N5Y2xlTW9kZSA9CisJCQkJCQkoQllURSkgKChkd19TdGF0dXMgPj4gNCkgJiAxKTsKKwkJCQkJKnBiX0ludGVycnVwdEVuYWJsZSA9CisJCQkJCQkoQllURSkgKChkd19TdGF0dXMgPj4gNSkgJiAxKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBleHRlcm4gZ2F0ZSB1c2VkIGZvciBjbG9jayBvciBmb3Igc2lnbmFsIEIgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGR3X1N0YXR1cyAmIDB4NjAwKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIGV4dGVybiBnYXRlIHVzZWQgZm9yIHNpZ25hbCBCICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmIChkd19TdGF0dXMgJiAweDQwMCkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBzaW1wbGUgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDB4NzgwMCkKKwkJCQkJCQkJPT0gMHg3ODAwKSB7CisJCQkJCQkJCSpwYl9JbnB1dE1vZGUgPQorCQkJCQkJCQkJQVBDSTE3MTBfVE9SX1NJTVBMRV9NT0RFOworCQkJCQkJCX0KKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBkb3VibGUgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDB4NzgwMCkKKwkJCQkJCQkJPT0gMHgxODAwKSB7CisJCQkJCQkJCSpwYl9JbnB1dE1vZGUgPQorCQkJCQkJCQkJQVBDSTE3MTBfVE9SX0RPVUJMRV9NT0RFOworCQkJCQkJCX0KKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCBpZiBxdWFkcnVwbGUgbW9kZSAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDB4NzgwMCkKKwkJCQkJCQkJPT0gMHgwMDAwKSB7CisJCQkJCQkJCSpwYl9JbnB1dE1vZGUgPQorCQkJCQkJCQkJQVBDSTE3MTBfVE9SX1FVQURSVVBMRV9NT0RFOworCQkJCQkJCX0KKwkJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4NDAwKQorCQkJCQkJZWxzZSB7CisJCQkJCQkJKnBiX0lucHV0TW9kZSA9IDE7CisJCQkJCQl9CS8vIC8vIGlmIChkd19TdGF0dXMgJiAweDQwMCkKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIEV4dGVybiBnYXRlIG5vdCB1c2VkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkqcGJfRXh0ZXJuR2F0ZSA9IDA7CisJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4NjAwKQorCQkJCQllbHNlIHsKKwkJCQkJCSpwYl9JbnB1dE1vZGUgPQorCQkJCQkJCShCWVRFKSAoKGR3X1N0YXR1cyA+PiA2KQorCQkJCQkJCSYgMSk7CisJCQkJCQkqcGJfRXh0ZXJuR2F0ZSA9CisJCQkJCQkJKEJZVEUpICgoZHdfU3RhdHVzID4+IDcpCisJCQkJCQkJJiAxKTsKKwkJCQkJfQkvLyBpZiAoZHdfU3RhdHVzICYgMHg2MDApCisKKwkJCQkJKnBiX1RpbWluZ1VuaXQgPQorCQkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQkJc19Ub3JDb3VudGVySW5mb1tiX1RvckNvdW50ZXJdLgorCQkJCQkJYl9UaW1pbmdVbml0OworCisJCQkJCSpwdWxfVGltaW5nSW50ZXJ2YWwgPQorCQkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQkJc19Ub3JDb3VudGVySW5mb1tiX1RvckNvdW50ZXJdLgorCQkJCQkJdWxfUmVhbFRpbWluZ0ludGVydmFsOworCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJUb3IgY291bnRlciBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJfQorCisJCQl9CS8vIGlmIChiX1RvckNvdW50ZXIgPD0gMSkKKwkJCWVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRvciBjb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZyBcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCX0JLy8gaWYgKGJfVG9yQ291bnRlciA8PSAxKQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaGUgbW9kdWxlIGlzIG5vdCBhIHRvciBjb3VudGVyIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCURQUklOVEsoIlRoZSBtb2R1bGUgaXMgbm90IGEgdG9yIGNvdW50ZXIgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCURQUklOVEsoIk1vZHVsZSBudW1iZXIgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTI7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfIGlfQVBDSTE3MTBfUmVhZFRvckNvdW50ZXJWYWx1ZSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCWVRFXyAgICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkgQllURV8gICAgIGJfVG9yQ291bnRlciwgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UXyAgICB1aV9UaW1lT3V0LCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBCWVRFXyAgIHBiX1RvckNvdW50ZXJTdGF0dXMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVMT05HXyBwdWxfVG9yQ291bnRlclZhbHVlKSAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgCWNhc2UgQVBDSTE3MTBfVE9SX0dFVFBST0dSRVNTU1RBVFVTOiBSZXR1cm4gdGhlIHRvciBjb3VudGVyCisoYl9Ub3JDb3VudGVyKSBzdGF0dXMgKHBiX1RvckNvdW50ZXJTdGF0dXMpIGZyb20gc2VsZWN0ZWQgdG9yIGNvdW50ZXIgICAgICAgIHwKK3wJCSAgICAgIG1vZHVsZSAoYl9Nb2R1bE5icikuCisKKwkJCQkgY2FzZSBBUENJMTcxMF9UT1JfR0VUQ09VTlRFUlZBTFVFIDoKKyAgUmV0dXJuIHRoZSB0b3IgY291bnRlciAoYl9Ub3JDb3VudGVyKSBzdGF0dXMgICAgICAgICAgIHwKK3wJCSAgICAgIChwYl9Ub3JDb3VudGVyU3RhdHVzKSBhbmQgdGhlIHRpbWluZyB2YWx1ZSAgICAgICAgICAgICB8Cit8CQkgICAgICAocHVsX1RvckNvdW50ZXJWYWx1ZSkgYWZ0ZXIgYSBjb250aW5nIGN5Y2xlIHN0b3AgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGZyb20gc2VsZWN0ZWQgdG9yIGNvdW50ZXIgbW9kdWxlIChiX01vZHVsTmJyKS4gICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgIDogU2VsZWN0ZWQgbW9kdWxlIG51bWJlciAoMCB0byAzKSB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Ub3JDb3VudGVyICAgOiBUb3IgY291bnRlciBzZWxlY3Rpb24gKDAgb3IgMSkuCisJYl9Nb2R1bE5iciAgICA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfUmVhZFR5cGUgICAgPSAoQllURSkgZGF0YVswXTsKKwliX1RvckNvdW50ZXIgID0JKEJZVEUpIGRhdGFbMV07CisJdWlfVGltZU91dAkgID0gKFVJTlQpIGRhdGFbMl07IHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IFBCWVRFXyAgcGJfVG9yQ291bnRlclN0YXR1cyA6IFJldHVybiB0aGUgdG9yIGNvdW50ZXIgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy4gICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBDb250aW5nIGN5Y2xlIG5vdCBzdGFydGVkfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIGdhdGUgbm90IHNldC4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ29udGluZyBjeWNsZSBzdGFydGVkLiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBnYXRlIHNldC4gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA6IENvbnRpbmcgY3ljbGUgc3RvcHBlZC4gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGNvbnRpbmcgY3ljbGUgaXMgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUuICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA6IEEgb3ZlcmZsb3cgb2NjdXIuIFlvdSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBjaGFuZ2UgdGhlIGJhc2UgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1pbmcgd2l0Y2ggdGhlICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpX0FQQ0kxNzEwX0luaXRUb3JDb3VudGVyInwKK3wJCQkJCQk0IDogVGltZWVvdXQgb2NjdXIgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBQVUxPTkcgIHB1bF9Ub3JDb3VudGVyVmFsdWUgIDogVG9yIGNvdW50ZXIgdmFsdWUuCisJcGJfVG9yQ291bnRlclN0YXR1cz0oUEJZVEUpICZkYXRhWzBdOworCXB1bF9Ub3JDb3VudGVyVmFsdWU9KFBVTE9ORykgJmRhdGFbMV07ICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtMjogTW9kdWxlIHNlbGVjdGlvbiB3cm9uZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIHRvciBjb3VudGVyIG1vZHVsZSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTQ6IFRvciBjb3VudGVyIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAtNTogVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAiaV9BUENJMTcxMF9Jbml0VG9yQ291bnRlciIgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLTY6IFRvciBjb3VudGVyIG5vdCBlbmFibGVkIHNlZSBmdW5jdGlvbiAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgImlfQVBDSTE3MTBfRW5hYmxlVG9yQ291bnRlciIgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC03OiBUaW1lb3V0IHBhcmFtZXRlciBpcyB3cm9uZyAoMCB0byA2NTUzNSkgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNzEwX0luc25CaXRzR2V0VG9yQ291bnRlclByb2dyZXNzU3RhdHVzQW5kVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gMDsKKwlEV09SRCBkd19TdGF0dXM7CisJRFdPUkQgZHdfVGltZU91dCA9IDA7CisKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX1RvckNvdW50ZXI7CisJQllURSBiX1JlYWRUeXBlOworCVVJTlQgdWlfVGltZU91dDsKKwlQQllURSBwYl9Ub3JDb3VudGVyU3RhdHVzOworCVBVTE9ORyBwdWxfVG9yQ291bnRlclZhbHVlOworCisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJYl9Nb2R1bE5iciA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfUmVhZFR5cGUgPSAoQllURSkgZGF0YVswXTsKKwliX1RvckNvdW50ZXIgPSAoQllURSkgZGF0YVsxXTsKKwl1aV9UaW1lT3V0ID0gKFVJTlQpIGRhdGFbMl07CisJcGJfVG9yQ291bnRlclN0YXR1cyA9IChQQllURSkgJiBkYXRhWzBdOworCXB1bF9Ub3JDb3VudGVyVmFsdWUgPSAoUFVMT05HKSAmIGRhdGFbMV07CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX1JlYWRUeXBlID09IEFQQ0kxNzEwX1RPUl9SRUFESU5URVJSVVBUKSB7CisKKwkJZGF0YVswXSA9IGRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMudWlfUmVhZF0uYl9PbGRNb2R1bGVNYXNrOworCQlkYXRhWzFdID0gZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS51bF9PbGRJbnRlcnJ1cHRNYXNrOworCQlkYXRhWzJdID0gZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy51aV9SZWFkXS51bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZTsKKworCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBJbmNyZW1lbnQgdGhlIHJlYWQgRklGTyAqLworCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkZXZwcml2LT4KKwkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCXVpX1JlYWQgPSAoZGV2cHJpdi0+CisJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQl1aV9SZWFkICsgMSkgJSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCQlyZXR1cm4gaW5zbi0+bjsKKwl9CisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgdG9yIGNvdW50ZXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfVE9SX0NPVU5URVIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHRvciBjb3VudGVyIHNlbGVjdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9Ub3JDb3VudGVyIDw9IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHRvciBjb3VudGVyIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgOCArICgxNiAqIGJfVG9yQ291bnRlcikgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgY291bnRlciBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoZHdfU3RhdHVzICYgMHgxMCkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBjb3VudGVyIGVuYWJsZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGR3X1N0YXR1cyAmIDB4MSkgeworCisJCQkJCQlzd2l0Y2ggKGJfUmVhZFR5cGUpIHsKKworCQkJCQkJY2FzZSBBUENJMTcxMF9UT1JfR0VUUFJPR1JFU1NTVEFUVVM6CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBSZWFkIHRoZSBzdGF0dXMgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCQkJaW5sKGRldnByaXYtPgorCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCXVpX0FkZHJlc3MgKyA0ICsKKwkJCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQkJCWR3X1N0YXR1cyAmIDB4RjsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRlc3QgaWYgc3RhcnQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWlmIChkd19TdGF0dXMgJiAxKSB7CisJCQkJCQkJCWlmIChkd19TdGF0dXMgJgorCQkJCQkJCQkJMikgeworCQkJCQkJCQkJaWYgKGR3X1N0YXR1cyAmIDQpIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRvciBjb3VudGVyIG93ZXJmbG93ICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCSpwYl9Ub3JDb3VudGVyU3RhdHVzCisJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJMzsKKwkJCQkJCQkJCX0gZWxzZSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIFRvciBjb3VudGVyIHN0YXJ0ZWQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCTI7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRvciBjb3VudGVyIHN0YXJ0ZWQgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkxOworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVG9yIGNvdW50ZXIgbm90IHN0YXJ0ZWQgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJPSAwOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKworCQkJCQkJY2FzZSBBUENJMTcxMF9UT1JfR0VUQ09VTlRFUlZBTFVFOgorCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgdGltb3V0IHBhcmFtZXRlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKCh1aV9UaW1lT3V0ID49IDApCisJCQkJCQkJCSYmICh1aV9UaW1lT3V0CisJCQkJCQkJCQk8PQorCQkJCQkJCQkJNjU1MzVVTCkpCisJCQkJCQkJeworCQkJCQkJCQlmb3IgKDs7KSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogUmVhZCB0aGUgc3RhdHVzICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkd19TdGF0dXMKKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJaW5sCisJCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkJKworCQkJCQkJCQkJCTQKKwkJCQkJCQkJCQkrCisJCQkJCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyKSArICg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogVGVzdCBpZiBvdmVyZmxvdyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWlmICgoZHdfU3RhdHVzICYgNCkgPT0gNCkgeworCQkJCS8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJLyogT3ZlcmZsb3cgb2NjdXIgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJKnBiX1RvckNvdW50ZXJTdGF0dXMKKwkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkzOworCisJCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBSZWFkIHRoZSB2YWx1ZSAqLworCQkJCS8qKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCQkqcHVsX1RvckNvdW50ZXJWYWx1ZQorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWlubAorCQkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCTAKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDQpID09IDQpCisJCQkJCQkJCQllbHNlIHsKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUZXN0IGlmIG1lYXN1cmVtZW50IHN0b3BwZWQgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCWlmICgoZHdfU3RhdHVzICYgMikgPT0gMikgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJLyogQSBzdG9wIHNpZ25hbCBvY2N1ciAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJMjsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkJCS8qIFJlYWQgdGhlIHZhbHVlICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQkqcHVsX1RvckNvdW50ZXJWYWx1ZQorCQkJCQkJCQkJCQkJPQorCQkJCQkJCQkJCQkJaW5sCisJCQkJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJCQkJCQl1aV9BZGRyZXNzCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkwCisJCQkJCQkJCQkJCQkrCisJCQkJCQkJCQkJCQkoMTYgKiBiX1RvckNvdW50ZXIpICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQkJCX0JLy8gaWYgKChkd19TdGF0dXMgJiAyKSA9PSAyKQorCQkJCQkJCQkJCWVsc2UgeworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkvKiBUZXN0IGlmIG1lYXN1cmVtZW50IHN0YXJ0ZWQgKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQlpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpIHsKKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCQkJLyogQSBzdGFydCBzaWduYWwgb2NjdXIgKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkJCQkxOworCQkJCQkJCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgMSkgPT0gMSkKKwkJCQkJCQkJCQkJZWxzZSB7CisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkJCS8qIE1lYXN1cmVtZW50IG5vdCBzdGFydGVkICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJCQkJKnBiX1RvckNvdW50ZXJTdGF0dXMKKwkJCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCQkJMDsKKwkJCQkJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDEpID09IDEpCisJCQkJCQkJCQkJfQkvLyBpZiAoKGR3X1N0YXR1cyAmIDIpID09IDIpCisJCQkJCQkJCQl9CS8vIGlmICgoZHdfU3RhdHVzICYgOCkgPT0gOCkKKworCQkJCQkJCQkJaWYgKGR3X1RpbWVPdXQgPT0gdWlfVGltZU91dCkgeworCQkJCS8qKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCQkvKiBUaW1lb3V0IG9jY3VyICovCisJCQkJLyoqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCQl9IGVsc2UgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJCS8qIEluY3JlbWVudCB0aGUgdGltZW91dCAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkJZHdfVGltZU91dAorCQkJCQkJCQkJCQk9CisJCQkJCQkJCQkJCWR3X1RpbWVPdXQKKwkJCQkJCQkJCQkJKworCQkJCQkJCQkJCQkxOworCisJCQkJCQkJCQkJbWRlbGF5KDEwMDApOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CS8vIGZvciAoOzspCisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFRlc3QgaWYgdGltZW91dCBvY2N1ciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKCpwYl9Ub3JDb3VudGVyU3RhdHVzICE9IDMpICYmIChkd19UaW1lT3V0ID09IHVpX1RpbWVPdXQpICYmICh1aV9UaW1lT3V0ICE9IDApKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFRpbWVvdXQgb2NjdXIgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQkqcGJfVG9yQ291bnRlclN0YXR1cworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQk0OworCQkJCQkJCQl9CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGltZW91dCBwYXJhbWV0ZXIgaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJUaW1lb3V0IHBhcmFtZXRlciBpcyB3cm9uZ1xuIik7CisJCQkJCQkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCQkJCQkJLTc7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCisJCQkJCQlkZWZhdWx0OgorCQkJCQkJCXByaW50aygiSW5wdXRzIHdyb25nXG4iKTsKKwkJCQkJCX0JLy8gc3dpdGNoIGVuZAorCQkJCQl9CS8vIGlmIChkd19TdGF0dXMgJiAweDEpCisJCQkJCWVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRvciBjb3VudGVyIG5vdCBlbmFibGVkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJUb3IgY291bnRlciBub3QgZW5hYmxlZFxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTY7CisJCQkJCX0JLy8gaWYgKGR3X1N0YXR1cyAmIDB4MSkKKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRvciBjb3VudGVyIG5vdCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiVG9yIGNvdW50ZXIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCX0KKwkJCX0JLy8gaWYgKGJfVG9yQ291bnRlciA8PSAxKQorCQkJZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUb3IgY291bnRlciBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJRFBSSU5USygiVG9yIGNvdW50ZXIgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQl9CS8vIGlmIChiX1RvckNvdW50ZXIgPD0gMSkKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSB0b3IgY291bnRlciBtb2R1bGUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIHRvciBjb3VudGVyIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1Rvci5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Ub3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjQ1ZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Ub3IuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwXzMwTUhaCQkzMAorI2RlZmluZSBBUENJMTcxMF8zM01IWgkJMzMKKyNkZWZpbmUgQVBDSTE3MTBfNDBNSFoJCTQwCisKKyNkZWZpbmUgQVBDSTE3MTBfR0FURV9JTlBVVAkxMAorCisjZGVmaW5lIEFQQ0kxNzEwX1RPUl9TSU1QTEVfTU9ERQkyCisjZGVmaW5lIEFQQ0kxNzEwX1RPUl9ET1VCTEVfTU9ERQkzCisjZGVmaW5lIEFQQ0kxNzEwX1RPUl9RVUFEUlVQTEVfTU9ERQk0CisKKyNkZWZpbmUgQVBDSTE3MTBfU0lOR0xFCQkJMAorI2RlZmluZSBBUENJMTcxMF9DT05USU5VT1VTCQkxCisKKyNkZWZpbmUgQVBDSTE3MTBfVE9SX0dFVFBST0dSRVNTU1RBVFVTCTAKKyNkZWZpbmUgQVBDSTE3MTBfVE9SX0dFVENPVU5URVJWQUxVRQkxCisjZGVmaW5lIEFQQ0kxNzEwX1RPUl9SRUFESU5URVJSVVBUCTIKKworLyoKKyAqIFRPUl9DT1VOVEVSIElOSVNJQUxJU0FUSU9OIEZVTkNUSU9OCisgKi8KK0lOVCBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0VG9yQ291bnRlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlVG9yQ291bnRlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCQl1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZEdldFRvckNvdW50ZXJJbml0aWFsaXNhdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCQkgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworLyoKKyAqIFRPUl9DT1VOVEVSIFJFQUQgRlVOQ1RJT04KKyAqLworSU5UIGlfQVBDSTE3MTBfSW5zbkJpdHNHZXRUb3JDb3VudGVyUHJvZ3Jlc3NTdGF0dXNBbmRWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJCQkgICB1bnNpZ25lZCBpbnQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9UdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVHRsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiMWQyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVHRsLmMKQEAgLTAsMCArMSwxMDM4IEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQSSBBUENJMTcxMCAgICB8IENvbXBpbGVyIDogZ2NjICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogVFRMLkMgICAgICAgICAgIHwgVmVyc2lvbiAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEFQQ0ktMTcxMCBUVEwgSS9PIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDEzLzA1Lzk4IHwgUy4gV2ViZXIgIHwgVFRMIGRpZ2l0YWwgaW5wdXQgLyBvdXRwdXQgaW1wbGVtZW50YXRpb24gICAgICB8CisgIHwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgfCAwOC8wNS8wMCB8IEd1aW5vdCBDICB8IC0gMDQwMC8wMjI4IEFsbCBGdW5jdGlvbiBpbiBSSU5HIDAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICBhdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSAiQVBDSTE3MTBfVHRsLmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgICAgOiBfSU5UXyBpX0FQQ0kxNzEwX0luaXRUVExJT0RpcmVjdGlvbiAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQllURV8gICAgYl9Cb2FyZEhhbmRsZSwgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCSBCWVRFXyAgICBiX01vZHVsTmJyLCAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJIEJZVEVfICAgIGJfUG9ydEFNb2RlLCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkgQllURV8gICAgYl9Qb3J0Qk1vZGUsICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCSBCWVRFXyAgICBiX1BvcnRDTW9kZSwgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJIEJZVEVfICAgIGJfUG9ydERNb2RlKSAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgIEFQQ0kxNzEwX1RUTF9JTklUICh1c2luZyBkZWZhdWx0cykgICA6IENvbmZpZ3VyZSB0aGUgVFRMIEkvTyBvcGVyYXRpbmcgbW9kZSBmcm9tIHNlbGVjdGVkICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgbW9kdWxlICAoYl9Nb2R1bE5icikuIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZXwKK3wgICAgICAgICAgICAgICAgICAgICBmb3IgeW91IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiBUVEwuICAgfAorCQkJCSBBUENJMTcxMF9UVExfSU5JVERJUkVDVElPTih1c2VyIGlucHV0cyBmb3IgZGlyZWN0aW9uKQorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBCWVRFXyBiX0JvYXJkSGFuZGxlICAgICAgICAgOiBIYW5kbGUgb2YgYm9hcmQgQVBDSS0xNzEwfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfTW9kdWxOYnIgICAgICAgICAgICA6IE1vZHVsZSBudW1iZXIgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlICgwIHRvIDMpCisJCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJCWJfSW5pdFR5cGUgPSAoQllURSkgZGF0YVswXTsKKwkJYl9Qb3J0QU1vZGUJPSAoQllURSkgZGF0YVsxXTsKKwkJYl9Qb3J0Qk1vZGUgPSAoQllURSkgZGF0YVsyXTsKKwkJYl9Qb3J0Q01vZGUgPSAoQllURSkgZGF0YVszXTsKKwkJYl9Qb3J0RE1vZGUJPSAoQllURSkgZGF0YVs0XTt8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgLTQ6IEZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdmVyc2lvbiAgICAgICAgICAgICB8Cit8CQkgICAgIC01OiBQb3J0IEEgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAtNjogUG9ydCBCIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgLTc6IFBvcnQgQyBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgIC04OiBQb3J0IEQgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFRUTElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJQllURSBiX01vZHVsTmJyOworCUJZVEUgYl9Jbml0VHlwZTsKKwlCWVRFIGJfUG9ydEFNb2RlOworCUJZVEUgYl9Qb3J0Qk1vZGU7CisJQllURSBiX1BvcnRDTW9kZTsKKwlCWVRFIGJfUG9ydERNb2RlOworCisJYl9Nb2R1bE5iciA9IChCWVRFKSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX0luaXRUeXBlID0gKEJZVEUpIGRhdGFbMF07CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgbW9kdWxlIG51bWJlciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX01vZHVsTmJyIDwgNCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBUVEwgSS9PIG1vZHVsZSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsTmJyXSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9UVExfSU8pIHsKKwkJCXN3aXRjaCAoYl9Jbml0VHlwZSkgeworCQkJY2FzZSBBUENJMTcxMF9UVExfSU5JVDoKKworCQkJCWRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJc19UVExJT0luZm8uYl9UVExJbml0ID0gMTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IFRUTCBwb3J0IEEgdG8gaW5wdXQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1RUTElPSW5mby5iX1BvcnRDb25maWd1cmF0aW9uWzBdID0gMDsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IFRUTCBwb3J0IEIgdG8gaW5wdXQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1RUTElPSW5mby5iX1BvcnRDb25maWd1cmF0aW9uWzFdID0gMDsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IFRUTCBwb3J0IEMgdG8gaW5wdXQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1RUTElPSW5mby5iX1BvcnRDb25maWd1cmF0aW9uWzJdID0gMDsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCBUVEwgcG9ydCBEIHRvIG91dHB1dCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQlzX1RUTElPSW5mby5iX1BvcnRDb25maWd1cmF0aW9uWzNdID0gMTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCB0aGUgY29uZmlndXJhdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0bCgweDgsCisJCQkJCWRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjAgKworCQkJCQkoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVBDSTE3MTBfVFRMX0lOSVRESVJFQ1RJT046CisKKwkJCQliX1BvcnRBTW9kZSA9IChCWVRFKSBkYXRhWzFdOworCQkJCWJfUG9ydEJNb2RlID0gKEJZVEUpIGRhdGFbMl07CisJCQkJYl9Qb3J0Q01vZGUgPSAoQllURSkgZGF0YVszXTsKKwkJCQliX1BvcnRETW9kZSA9IChCWVRFKSBkYXRhWzRdOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIHZlcnNpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uCisJCQkJCQlbYl9Nb2R1bE5icl0gJiAweEZGRkYpID49CisJCQkJCTB4MzIzMCkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgcG9ydCBBIG1vZGUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKChiX1BvcnRBTW9kZSA9PSAwKQorCQkJCQkJfHwgKGJfUG9ydEFNb2RlID09IDEpKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCB0aGUgcG9ydCBCIG1vZGUgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgoYl9Qb3J0Qk1vZGUgPT0gMCkKKwkJCQkJCQl8fCAoYl9Qb3J0Qk1vZGUgPT0gMSkpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogVGVzdCB0aGUgcG9ydCBDIG1vZGUgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKGJfUG9ydENNb2RlID09IDApCisJCQkJCQkJCXx8IChiX1BvcnRDTW9kZQorCQkJCQkJCQkJPT0gMSkpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogVGVzdCB0aGUgcG9ydCBEIG1vZGUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlpZiAoKGJfUG9ydERNb2RlID09IDApIHx8IChiX1BvcnRETW9kZSA9PSAxKSkgeworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJCQkJCWJfVFRMSW5pdAorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkxOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCBUVEwgcG9ydCBBIG1vZGUgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvbgorCQkJCQkJCQkJCVswXQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1BvcnRBTW9kZTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCQkvKiBTZXQgVFRMIHBvcnQgQiBtb2RlICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb24KKwkJCQkJCQkJCQlbMV0KKwkJCQkJCQkJCQk9CisJCQkJCQkJCQkJYl9Qb3J0Qk1vZGU7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogU2V0IFRUTCBwb3J0IEMgbW9kZSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJCQlzX1RUTElPSW5mby4KKwkJCQkJCQkJCQliX1BvcnRDb25maWd1cmF0aW9uCisJCQkJCQkJCQkJWzJdCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWJfUG9ydENNb2RlOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCBUVEwgcG9ydCBEIG1vZGUgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvbgorCQkJCQkJCQkJCVszXQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQliX1BvcnRETW9kZTsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJCS8qIFNldCB0aGUgY29uZmlndXJhdGlvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQkJb3V0bCgoYl9Qb3J0QU1vZGUgPDwgMCkgfCAoYl9Qb3J0Qk1vZGUgPDwgMSkgfCAoYl9Qb3J0Q01vZGUgPDwgMikgfCAoYl9Qb3J0RE1vZGUgPDwgMyksIGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjAgKyAoNjQgKiBiX01vZHVsTmJyKSk7CisJCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkJLyogUG9ydCBEIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJCQlEUFJJTlRLKCJQb3J0IEQgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJCQkJaV9SZXR1cm5WYWx1ZQorCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQktODsKKwkJCQkJCQkJfQorCQkJCQkJCX0gZWxzZSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCQkvKiBQb3J0IEMgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJRFBSSU5USygiUG9ydCBDIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nXG4iKTsKKwkJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9CisJCQkJCQkJCQktNzsKKwkJCQkJCQl9CisJCQkJCQl9IGVsc2UgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJLyogUG9ydCBCIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCURQUklOVEsoIlBvcnQgQiBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZ1xuIik7CisJCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC02OworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBQb3J0IEEgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlEUFJJTlRLKCJQb3J0IEEgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmdcbiIpOworCQkJCQkJaV9SZXR1cm5WYWx1ZSA9IC01OworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBGdW5jdGlvbiBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHZlcnNpb24gKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCURQUklOVEsoIkZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgdmVyc2lvblxuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCQlEUFJJTlRLKCJcbiIpOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoIkJhZCBDb25maWcgVHlwZVxuIik7CisJCQl9CS8vIHN3aXRjaCBlbmQKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgVFRMIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFRUTCBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IF9JTlRfICAgaV9BUENJMTcxMF9SZWFkVFRMSU9DaGFubmVsVmFsdWUgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgYl9TZWxlY3RlZFBvcnQsICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEVfICAgICBiX0lucHV0Q2hhbm5lbCwgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEJZVEVfICAgcGJfQ2hhbm5lbFN0YXR1cykgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgc3RhdHVzIGZyb20gc2VsZWN0ZWQgVFRMIGRpZ2l0YWwgaW5wdXQgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAoYl9JbnB1dENoYW5uZWwpCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBzdGF0dXMgZnJvbSBkaWdpdGFsIGlucHV0IHBvcnQgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX1NlbGVjdGVkUG9ydCkgZnJvbSBzZWxlY3RlZCBUVEwgbW9kdWxlIChiX01vZHVsTmJyKSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgICAgICAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgICAgICAgOiBNb2R1bGUgbnVtYmVyIHRvICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSAoMCB0byA3KSAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9TZWxlY3RlZFBvcnQsICAgICAgIDogU2VsZWN0aW9uIGZyb20gVFRMIEkvTyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0ICgwIHRvIDIpICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBQb3J0IEEgc2VsZWN0aW9uICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA6IFBvcnQgQiBzZWxlY3Rpb24gIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogUG9ydCBDIHNlbGVjdGlvbiAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgOiBQb3J0IEQgc2VsZWN0aW9uICB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9JbnB1dENoYW5uZWwgICAgICAgIDogU2VsZWN0aW9uIGZyb20gZGlnaXRhbCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCAoIDAgdG8gMikKK0FQQ0kxNzEwX1RUTF9SRUFEQ0hBTk5FTAorCWJfTW9kdWxOYnIJICA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfU2VsZWN0ZWRQb3J0PSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJYl9JbnB1dENoYW5uZWw9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWJfUmVhZFR5cGUJICA9IChCWVRFKSBkYXRhWzBdOworCisgQVBDSTE3MTBfVFRMX1JFQURQT1JUfAorCWJfTW9kdWxOYnIJICA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfU2VsZWN0ZWRQb3J0PSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJYl9SZWFkVHlwZQkgID0gKEJZVEUpIGRhdGFbMF07CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMF0KKworCVBCWVRFXyAgcGJfQ2hhbm5lbFN0YXR1cyAgICA6IERpZ2l0YWwgaW5wdXQgY2hhbm5lbCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogQ2hhbm5sZSBpcyBub3QgYWN0aXZlfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBDaGFubmxlIGlzIGFjdGl2ZSAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogVGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRUTCBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCBUVEwgaW5wdXQgcG9ydCBpcyB3cm9uZyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVGhlIHNlbGVjdGVkIFRUTCBkaWdpdGFsIGlucHV0IGlzIHdyb25nICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC02OiBUVEwgSS9PIG5vdCBpbml0aWFsaXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1JlYWRUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSAwOworCURXT1JEIGR3X1N0YXR1c1JlZzsKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX1NlbGVjdGVkUG9ydDsKKwlCWVRFIGJfSW5wdXRDaGFubmVsOworCUJZVEUgYl9SZWFkVHlwZTsKKwlQQllURSBwYl9DaGFubmVsU3RhdHVzOworCVBCWVRFIHBiX1BvcnRWYWx1ZTsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfUmVhZFR5cGUgPSAoQllURSkgZGF0YVswXTsKKwliX01vZHVsTmJyID0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJYl9TZWxlY3RlZFBvcnQgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJYl9JbnB1dENoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFRUTCBJL08gbW9kdWxlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1RUTF9JTykgeworCQkJc3dpdGNoIChiX1JlYWRUeXBlKSB7CisKKwkJCWNhc2UgQVBDSTE3MTBfVFRMX1JFQURDSEFOTkVMOgorCQkJCXBiX0NoYW5uZWxTdGF0dXMgPSAoUEJZVEUpICYgZGF0YVswXTsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCB0aGUgVFRMIEkvTyBwb3J0IG51bWJlciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoKGJfU2VsZWN0ZWRQb3J0IDw9IDIpCisJCQkJCQkmJiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCQkJW2JfTW9kdWxOYnJdICYKKwkJCQkJCQkJMHhGRkZGKSA9PQorCQkJCQkJCTB4MzEzMCkpCisJCQkJCXx8ICgoYl9TZWxlY3RlZFBvcnQgPD0gMykKKwkJCQkJCSYmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJCQlbYl9Nb2R1bE5icl0gJgorCQkJCQkJCQkweEZGRkYpID49CisJCQkJCQkJMHgzMjMwKSkpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIGRpZ2l0YWwgaW1ucHV0IGNoYW5uZWwgbnVtYmVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoKGJfSW5wdXRDaGFubmVsIDw9IDcpCisJCQkJCQkJJiYgKGJfU2VsZWN0ZWRQb3J0IDwgMykpCisJCQkJCQl8fCAoKGJfSW5wdXRDaGFubmVsIDw9IDEpCisJCQkJCQkJJiYgKGJfU2VsZWN0ZWRQb3J0ID09CisJCQkJCQkJCTMpKSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgdGhlIFRUTCBJL08gbW9kdWxlIGluaXRpYWxpc2VkICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCXNfVFRMSU9JbmZvLmJfVFRMSW5pdCA9PQorCQkJCQkJCTEpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIFRUTCBwb3J0IHVzZWQgZm9yIGlucHV0ICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlpZiAoKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweEZGRkYpID09IDB4MzEzMCkgfHwgKCgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYgMHhGRkZGKSA+PSAweDMyMzApICYmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uc19UVExJT0luZm8uYl9Qb3J0Q29uZmlndXJhdGlvbltiX1NlbGVjdGVkUG9ydF0gPT0gMCkpKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogUmVhZCBhbGwgZGlnaXRhbCBpbnB1dCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCQkJCWlubAorCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJKworCQkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCisJCQkJCQkJCSpwYl9DaGFubmVsU3RhdHVzCisJCQkJCQkJCQk9CisJCQkJCQkJCQkoQllURSkgKAorCQkJCQkJCQkJKGR3X1N0YXR1c1JlZworCQkJCQkJCQkJCT4+CisJCQkJCQkJCQkJKDggKiBiX1NlbGVjdGVkUG9ydCkpID4+IGJfSW5wdXRDaGFubmVsKSAmIDE7CisJCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNlbGVjdGVkIFRUTCBJL08gcG9ydCBlcnJvciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlEUFJJTlRLKCJTZWxlY3RlZCBUVEwgSS9PIHBvcnQgZXJyb3JcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS00OworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFRUTCBJL08gbm90IGluaXRpYWxpc2VkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJRFBSSU5USygiVFRMIEkvTyBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNjsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFNlbGVjdGVkIGRpZ2l0YWwgaW5wdXQgZXJyb3IgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiU2VsZWN0ZWQgZGlnaXRhbCBpbnB1dCBlcnJvclxuIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdGVkIFRUTCBJL08gcG9ydCBlcnJvciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJRFBSSU5USygiU2VsZWN0ZWQgVFRMIEkvTyBwb3J0IGVycm9yXG4iKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBUENJMTcxMF9UVExfUkVBRFBPUlQ6CisJCQkJcGJfUG9ydFZhbHVlID0gKFBCWVRFKSAmIGRhdGFbMF07CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBUVEwgSS9PIHBvcnQgbnVtYmVyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoKGJfU2VsZWN0ZWRQb3J0IDw9IDIpCisJCQkJCQkmJiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCQkJW2JfTW9kdWxOYnJdICYKKwkJCQkJCQkJMHhGRkZGKSA9PQorCQkJCQkJCTB4MzEzMCkpCisJCQkJCXx8ICgoYl9TZWxlY3RlZFBvcnQgPD0gMykKKwkJCQkJCSYmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJCQlbYl9Nb2R1bE5icl0gJgorCQkJCQkJCQkweEZGRkYpID49CisJCQkJCQkJMHgzMjMwKSkpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgdGhlIFRUTCBJL08gbW9kdWxlIGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1RUTElPSW5mby5iX1RUTEluaXQgPT0gMSkgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiBUVEwgcG9ydCB1c2VkIGZvciBpbnB1dCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpZiAoKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJCQkJW2JfTW9kdWxOYnJdCisJCQkJCQkJCQkmCisJCQkJCQkJCQkweEZGRkYpCisJCQkJCQkJCT09IDB4MzEzMCkKKwkJCQkJCQl8fCAoKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJiAweEZGRkYpID49IDB4MzIzMCkgJiYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS5zX1RUTElPSW5mby5iX1BvcnRDb25maWd1cmF0aW9uW2JfU2VsZWN0ZWRQb3J0XSA9PSAwKSkpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBSZWFkIGFsbCBkaWdpdGFsIGlucHV0ICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlkd19TdGF0dXNSZWcgPQorCQkJCQkJCQlpbmwoZGV2cHJpdi0+CisJCQkJCQkJCXNfQm9hcmRJbmZvcy4KKwkJCQkJCQkJdWlfQWRkcmVzcyArCisJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKworCQkJCQkJCSpwYl9Qb3J0VmFsdWUgPQorCQkJCQkJCQkoQllURSkgKAorCQkJCQkJCQkoZHdfU3RhdHVzUmVnID4+CisJCQkJCQkJCQkoOCAqIGJfU2VsZWN0ZWRQb3J0KSkgJiAweEZGKTsKKwkJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBTZWxlY3RlZCBUVEwgSS9PIHBvcnQgZXJyb3IgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJRFBSSU5USygiU2VsZWN0ZWQgVFRMIEkvTyBwb3J0IGVycm9yXG4iKTsKKwkJCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVFRMIEkvTyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCURQUklOVEsoIlRUTCBJL08gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0ZWQgVFRMIEkvTyBwb3J0IGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJTZWxlY3RlZCBUVEwgSS9PIHBvcnQgZXJyb3JcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCXByaW50aygiQmFkIFJlYWRUeXBlXG4iKTsKKworCQkJfQkvL0VuZCBTd2l0Y2gKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgVFRMIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlEUFJJTlRLKCJUaGUgbW9kdWxlIGlzIG5vdCBhIFRUTCBtb2R1bGVcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE1vZHVsZSBudW1iZXIgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJRFBSSU5USygiTW9kdWxlIG51bWJlciBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMjsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZShjb21lZGlfZGV2aWNlCisqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBzdGF0dXMgZnJvbSBhbGwgZGlnaXRhbCBpbnB1dCBwb3J0cyAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChwb3J0IEEsIHBvcnQgQiBhbmQgcG9ydCBDKSBmcm9tIHNlbGVjdGVkIFRUTCAgICAgICAgICB8Cit8CQkgICAgICBtb2R1bGUgKGJfTW9kdWxOYnIpIAkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IEJZVEVfIGJfQm9hcmRIYW5kbGUgICAgICAgICA6IEhhbmRsZSBvZiBib2FyZCBBUENJLTE3MTB8Cit8ICAgICAgICAgICAgICAgICAgICAgQllURV8gYl9Nb2R1bE5iciAgICAgICAgICAgIDogTW9kdWxlIG51bWJlciB0byAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgKDAgdG8gMykgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFVMT05HXyAgcHVsX1BvcnRWYWx1ZSAgICAgIDogRGlnaXRhbCBUVEwgaW5wdXRzIHBvcnQgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xOiBUaGUgaGFuZGxlIHBhcmFtZXRlciBvZiB0aGUgYm9hcmQgaXMgd3JvbmcgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTI6IFRoZSBtb2R1bGUgcGFyYW1ldGVyIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMzogVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00OiBUVEwgSS9PIG5vdCBpbml0aWFsaXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuUmVhZFRUTElPQWxsUG9ydFZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnOworCUJZVEUgYl9Nb2R1bE5icjsKKwlQVUxPTkcgcHVsX1BvcnRWYWx1ZTsKKworCWJfTW9kdWxOYnIgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJcHVsX1BvcnRWYWx1ZSA9IChQVUxPTkcpICYgZGF0YVswXTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBtb2R1bGUgbnVtYmVyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfTW9kdWxOYnIgPCA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFRUTCBJL08gbW9kdWxlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxOYnJdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1RUTF9JTykgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIHRoZSBUVEwgSS9PIG1vZHVsZSBpbml0aWFsaXNlZCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkZXZwcml2LT4KKwkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJc19UVExJT0luZm8uYl9UVExJbml0ID09IDEpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWFkIGFsbCBkaWdpdGFsIGlucHV0ICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkd19TdGF0dXNSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgKDY0ICogYl9Nb2R1bE5icikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIFRUTCBSZXYxLjAgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJW2JfTW9kdWxOYnJdICYgMHhGRkZGKSA9PQorCQkJCQkweDMxMzApIHsKKwkJCQkJKnB1bF9Qb3J0VmFsdWUgPQorCQkJCQkJZHdfU3RhdHVzUmVnICYgMHhGRkZGRkZVTDsKKwkJCQl9IGVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHBvcnQgQSBub3QgdXNlZCBmb3Igb3V0cHV0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvblswXSA9PSAxKSB7CisJCQkJCQkqcHVsX1BvcnRWYWx1ZSA9CisJCQkJCQkJZHdfU3RhdHVzUmVnICYKKwkJCQkJCQkweDNGRkZGMDBVTDsKKwkJCQkJfQorCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgcG9ydCBCIG5vdCB1c2VkIGZvciBvdXRwdXQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoZGV2cHJpdi0+CisJCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bE5icl0uCisJCQkJCQlzX1RUTElPSW5mby4KKwkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb25bMV0gPT0gMSkgeworCQkJCQkJKnB1bF9Qb3J0VmFsdWUgPQorCQkJCQkJCWR3X1N0YXR1c1JlZyAmCisJCQkJCQkJMHgzRkYwMEZGVUw7CisJCQkJCX0KKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHBvcnQgQyBub3QgdXNlZCBmb3Igb3V0cHV0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxOYnJdLgorCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQliX1BvcnRDb25maWd1cmF0aW9uWzJdID09IDEpIHsKKwkJCQkJCSpwdWxfUG9ydFZhbHVlID0KKwkJCQkJCQlkd19TdGF0dXNSZWcgJgorCQkJCQkJCTB4MzAwRkZGRlVMOworCQkJCQl9CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiBwb3J0IEQgbm90IHVzZWQgZm9yIG91dHB1dCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJCXNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvblszXSA9PSAxKSB7CisJCQkJCQkqcHVsX1BvcnRWYWx1ZSA9CisJCQkJCQkJZHdfU3RhdHVzUmVnICYKKwkJCQkJCQkweEZGRkZGRlVMOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVFRMIEkvTyBub3QgaW5pdGlhbGlzZWQgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJRFBSSU5USygiVFRMIEkvTyBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtNTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRoZSBtb2R1bGUgaXMgbm90IGEgVFRMIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgbW9kdWxlXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBNb2R1bGUgbnVtYmVyIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogX0lOVF8gaV9BUENJMTcxMF9TZXRUVExJT0NobE9uICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJZVEVfICAgICAgICAgICBiX0JvYXJkSGFuZGxlLCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQllURV8gICAgICAgICAgIGJfTW9kdWxOYnIsICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCWVRFXyAgICAgICAgICAgYl9PdXRwdXRDaGFubmVsKQorSU5UIGlfQVBDSTE3MTBfSW5zbldyaXRlU2V0VFRMSU9DaGxPbk9mZihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXRzIG9yIHJlc2V0cyAgdGhlIG91dHB1dCB3aXRjaCBoYXMgYmVlbiBwYXNzZWQgd2l0aCB0aGUgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGJfQ2hhbm5lbC4gU2V0dGluZyBhbiBvdXRwdXQgbWVhbnMgc2V0dGluZyAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBhbiBvdXB1dCBoaWdoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURV8gYl9Cb2FyZEhhbmRsZSAgIDogSGFuZGxlIG9mIGJvYXJkIEFQQ0ktMTcxMCAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBCWVRFXyBiX01vZHVsTmJyICAgICAgOiBTZWxlY3RlZCBtb2R1bGUgbnVtYmVyICgwIHRvIDMpfAorfCAgICAgICAgICAgICAgICAgICAgIEJZVEVfIGJfT3V0cHV0Q2hhbm5lbCA6IFNlbGVjdGlvbiBmcm9tIGRpZ2l0YWwgb3V0cHV0ICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCAoMCBvciAxKSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgICAgOiBQRDAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgICA6IFBEMSAgICAgICAgICAgICAgICB8Cit8CQkJCQkJIDIgdG8gOSA6IFBBICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJMTAgdG8gMTc6IFBCICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJMTggdG8gMjU6IFBDICAgICAgICAgICAgICAgICB8CisKKyAgYl9Nb2R1bE5icgkgICA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWJfT3V0cHV0Q2hhbm5lbD0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdWlfU3RhdGUJICAgPSBkYXRhWzBdOyAvLyBPTiBvciBPRkYKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFRoZSBoYW5kbGUgcGFyYW1ldGVyIG9mIHRoZSBib2FyZCBpcyB3cm9uZyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogVGhlIG1vZHVsZSBwYXJhbWV0ZXIgaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBUaGUgbW9kdWxlIGlzIG5vdCBhIFRUTCBJL08gbW9kdWxlICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFRoZSBzZWxlY3RlZCBkaWdpdGFsIG91dHB1dCBpcyB3cm9uZyAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNTogVFRMIEkvTyBub3QgaW5pdGlhbGlzZWQgc2VlIGZ1bmN0aW9uICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAiIGlfQVBDSTE3MTBfSW5pdFRUTElPIgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVTZXRUVExJT0NobE9uT2ZmKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzUmVnID0gMDsKKwlCWVRFIGJfTW9kdWxOYnI7CisJQllURSBiX091dHB1dENoYW5uZWw7CisJVUlOVCB1aV9TdGF0ZTsKKworCWlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCWJfTW9kdWxOYnIgPSBDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwliX091dHB1dENoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1aV9TdGF0ZSA9IGRhdGFbMF07CS8vIE9OIG9yIE9GRgorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIG1vZHVsZSBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoYl9Nb2R1bE5iciA8IDQpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgVFRMIEkvTyBtb2R1bGUgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bE5icl0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfVFRMX0lPKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgdGhlIFRUTCBJL08gbW9kdWxlIGluaXRpYWxpc2VkICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRldnByaXYtPnNfTW9kdWxlSW5mb1tiX01vZHVsTmJyXS4KKwkJCQlzX1RUTElPSW5mby5iX1RUTEluaXQgPT0gMSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgdGhlIFRUTCBJL08gY2hhbm5lbCBudW1iZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoKGJfT3V0cHV0Q2hhbm5lbCA8PSAxKQorCQkJCQkJJiYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uCisJCQkJCQkJCVtiX01vZHVsTmJyXSAmCisJCQkJCQkJCTB4RkZGRikgPT0KKwkJCQkJCQkweDMxMzApKQorCQkJCQl8fCAoKGJfT3V0cHV0Q2hhbm5lbCA8PSAyNSkKKwkJCQkJCSYmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbgorCQkJCQkJCQlbYl9Nb2R1bE5icl0gJgorCQkJCQkJCQkweEZGRkYpID49CisJCQkJCQkJMHgzMjMwKSkpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIHRoZSBzZWxlY3RlZCBjaGFubmVsIGlzIGEgb3V0cHV0IGNoYW5uZWwgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoKGJfT3V0cHV0Q2hhbm5lbCA8PSAxKQorCQkJCQkJCSYmIChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb24KKwkJCQkJCQkJWzNdID09IDEpKQorCQkJCQkJfHwgKChiX091dHB1dENoYW5uZWwgPj0gMikKKwkJCQkJCQkmJiAoYl9PdXRwdXRDaGFubmVsIDw9CisJCQkJCQkJCTkpCisJCQkJCQkJJiYgKGRldnByaXYtPgorCQkJCQkJCQlzX01vZHVsZUluZm8KKwkJCQkJCQkJW2JfTW9kdWxOYnJdLgorCQkJCQkJCQlzX1RUTElPSW5mby4KKwkJCQkJCQkJYl9Qb3J0Q29uZmlndXJhdGlvbgorCQkJCQkJCQlbMF0gPT0gMSkpCisJCQkJCQl8fCAoKGJfT3V0cHV0Q2hhbm5lbCA+PSAxMCkKKwkJCQkJCQkmJiAoYl9PdXRwdXRDaGFubmVsIDw9CisJCQkJCQkJCTE3KQorCQkJCQkJCSYmIChkZXZwcml2LT4KKwkJCQkJCQkJc19Nb2R1bGVJbmZvCisJCQkJCQkJCVtiX01vZHVsTmJyXS4KKwkJCQkJCQkJc19UVExJT0luZm8uCisJCQkJCQkJCWJfUG9ydENvbmZpZ3VyYXRpb24KKwkJCQkJCQkJWzFdID09IDEpKQorCQkJCQkJfHwgKChiX091dHB1dENoYW5uZWwgPj0gMTgpCisJCQkJCQkJJiYgKGJfT3V0cHV0Q2hhbm5lbCA8PQorCQkJCQkJCQkyNSkKKwkJCQkJCQkmJiAoZGV2cHJpdi0+CisJCQkJCQkJCXNfTW9kdWxlSW5mbworCQkJCQkJCQlbYl9Nb2R1bE5icl0uCisJCQkJCQkJCXNfVFRMSU9JbmZvLgorCQkJCQkJCQliX1BvcnRDb25maWd1cmF0aW9uCisJCQkJCQkJCVsyXSA9PSAxKSkpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUZXN0IGlmIFBEMCBzZWxlY3RlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKGJfT3V0cHV0Q2hhbm5lbCA9PSAwKSB7CisKKwkJCQkJCQlvdXRsKHVpX1N0YXRlLAorCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQl1aV9BZGRyZXNzICsKKwkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJfSBlbHNlIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIFBEMSBzZWxlY3RlZCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGJfT3V0cHV0Q2hhbm5lbCA9PQorCQkJCQkJCQkxKSB7CisKKwkJCQkJCQkJb3V0bCh1aV9TdGF0ZSwKKwkJCQkJCQkJCWRldnByaXYtPgorCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJKyA0ICsKKwkJCQkJCQkJCSg2NCAqIGJfTW9kdWxOYnIpKTsKKwkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQliX091dHB1dENoYW5uZWwKKwkJCQkJCQkJCT0KKwkJCQkJCQkJCWJfT3V0cHV0Q2hhbm5lbAorCQkJCQkJCQkJLSAyOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogUmVhZCBhbGwgY2hhbm5lbCAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJZHdfU3RhdHVzUmVnID0KKwkJCQkJCQkJCWlubAorCQkJCQkJCQkJKGRldnByaXYtPgorCQkJCQkJCQkJc19Cb2FyZEluZm9zLgorCQkJCQkJCQkJdWlfQWRkcmVzcworCQkJCQkJCQkJKworCQkJCQkJCQkJKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCQlpZiAodWlfU3RhdGUpCS8vIE9OCisJCQkJCQkJCXsKKwkJCQkJCQkJCWR3X1N0YXR1c1JlZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQkoZHdfU3RhdHVzUmVnCisJCQkJCQkJCQkJPj4KKwkJCQkJCQkJCQkoKGJfT3V0cHV0Q2hhbm5lbCAvIDgpICogOCkpICYgMHhGRjsKKwkJCQkJCQkJCWR3X1N0YXR1c1JlZworCQkJCQkJCQkJCT0KKwkJCQkJCQkJCQlkd19TdGF0dXNSZWcKKwkJCQkJCQkJCQl8CisJCQkJCQkJCQkJKDEKKwkJCQkJCQkJCQk8PAorCQkJCQkJCQkJCShiX091dHB1dENoYW5uZWwKKwkJCQkJCQkJCQkJJQorCQkJCQkJCQkJCQk4KSk7CisJCQkJCQkJCX0gZWxzZQkvLyBPZmYKKwkJCQkJCQkJeworCQkJCQkJCQkJZHdfU3RhdHVzUmVnCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCShkd19TdGF0dXNSZWcKKwkJCQkJCQkJCQk+PgorCQkJCQkJCQkJCSgoYl9PdXRwdXRDaGFubmVsIC8gOCkgKiA4KSkgJiAweEZGOworCQkJCQkJCQkJZHdfU3RhdHVzUmVnCisJCQkJCQkJCQkJPQorCQkJCQkJCQkJCWR3X1N0YXR1c1JlZworCQkJCQkJCQkJCSYKKwkJCQkJCQkJCQkoMHhGRgorCQkJCQkJCQkJCS0KKwkJCQkJCQkJCQkoMSA8PCAoYl9PdXRwdXRDaGFubmVsICUgOCkpKTsKKworCQkJCQkJCQl9CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIFNldCB0aGUgbmV3IG91dHB1dCB2YWx1ZSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlvdXRsKGR3X1N0YXR1c1JlZywgZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyA4ICsgKChiX091dHB1dENoYW5uZWwgLyA4KSAqIDQpICsgKDY0ICogYl9Nb2R1bE5icikpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaGUgc2VsZWN0ZWQgVFRMIG91dHB1dCBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJRFBSSU5USygiIFRoZSBzZWxlY3RlZCBUVEwgb3V0cHV0IGlzIHdyb25nXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUaGUgc2VsZWN0ZWQgVFRMIG91dHB1dCBpcyB3cm9uZyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlEUFJJTlRLKCJUaGUgc2VsZWN0ZWQgVFRMIG91dHB1dCBpcyB3cm9uZ1xuIik7CisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUVEwgSS9PIG5vdCBpbml0aWFsaXNlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCURQUklOVEsoIlRUTCBJL08gbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTU7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgSS9PIG1vZHVsZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJRFBSSU5USygiVGhlIG1vZHVsZSBpcyBub3QgYSBUVEwgSS9PIG1vZHVsZVxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogTW9kdWxlIG51bWJlciBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlEUFJJTlRLKCJNb2R1bGUgbnVtYmVyIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0yOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1R0bC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9UdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDkxNWRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9UdGwuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEFQQ0kxNzEwX1RUTF9JTklUCQkwCisjZGVmaW5lIEFQQ0kxNzEwX1RUTF9JTklURElSRUNUSU9OCTEKKworI2RlZmluZSBBUENJMTcxMF9UVExfUkVBRENIQU5ORUwJMAorI2RlZmluZSBBUENJMTcxMF9UVExfUkVBRFBPUlQJCTEKKworLyoKKyAqIFRUTCBJTklTSUFMSVNBVElPTiBGVU5DVElPTgorICovCitJTlQgaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdFRUTElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyoKKyAqIFRUTCBJTlBVVCBGVU5DVElPTgorICovCitJTlQgaV9BUENJMTcxMF9JbnNuQml0c1JlYWRUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTE3MTBfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisgKiBUVEwgT1VUUFVUIEZVTkNUSU9OUworICovCitJTlQgaV9BUENJMTcxMF9JbnNuV3JpdGVTZXRUVExJT0NobE9uT2ZmKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19TNTkyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOTA3ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19TNTkyMC5jCkBAIC0wLDAgKzEsMjAzIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCA6IEFEREkgSEVBREVSIFJFQUQgV1JJVEVSIHwgICAgIENvbXBpbGVyICAgOiBWaXN1YWwgQysrICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IFM1OTIwLmNwcCAgICAgICAgICAgfCAgICAgVmVyc2lvbiAgICA6IDYuMCAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgQXV0aG9yIDogRS4gTElCUyAgICAgICAgICAgICAgICAgICAgICBEYXRlIDogMDIvMDUvMjAwMiAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uICAgOiBETEwgd2l0aCB0aGUgUzU5MjAgUENJIENvbnRyb2xsZXIgZnVuY3Rpb25zICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFJ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDI4LzA4LzAyIHwgTElCUyBFcmljIHwgQWRkIHJldHVybiBjb2RlcyBlYWNoIHRpbWUgYSBmdW5jdGlvbiBvZiB0aGUgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCBBZGRpIExpYnJhcnkgaXMgY2FsbGVkICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IDMxLzA3LzAzIHwgS1JBVVRIIEouIHwgQ2hhbmdlcyBmb3IgdGhlIE1TWC1Cb3ggICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKyNpbmNsdWRlICJhZGRpX2FtY2NfUzU5MjAuaCIKKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IEZ1bmN0aW9uICAgTmFtZSAgIDogSU5UIGlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20gICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJTlQgICAgaV9OYk9mV29yZHNUb1JlYWQsICAgICAgICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT1JEICAgd19FZXByb21TdGFydEFkZHJlc3MsICAgICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQV09SRCBwd19EYXRhUmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB3b3JkIGZyb20gdGhlIDU5MjAgZWVwcm9tLiAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IElucHV0IFBhcmFtZXRlcnMgIDogSU5UICAgIGlfTmJPZldvcmRzVG9SZWFkIDogTmJyLiBvZiB3b3JkIHRvIHJlYWQgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogQWRkcmVzcyBvZiB0aGUgZWVwcm9tIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgV09SRCAgIHdfRWVwcm9tU3RhcnRBZGRyZXNzIDogRWVwcm9tIHN0cmF0IGFkZHJlc3MgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFdPUkQgcHdfRGF0YVJlYWQgOiBSZWFkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IFJldHVybiBWYWx1ZSAgICAgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworCitJTlQgaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbShJTlQgaV9OYk9mV29yZHNUb1JlYWQsCisJRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCVdPUkQgd19FZXByb21TdGFydEFkZHJlc3MsIFBXT1JEIHB3X0RhdGFSZWFkKQoreworCURXT1JEIGR3X2VlcHJvbV9idXN5ID0gMDsKKwlJTlQgaV9Db3VudGVyID0gMDsKKwlJTlQgaV9Xb3JkQ291bnRlcjsKKwlJTlQgaTsKKwlCWVRFIHBiX1JlYWRCeXRlWzFdOworCUJZVEUgYl9SZWFkTG93Qnl0ZSA9IDA7CisJQllURSBiX1JlYWRIaWdoQnl0ZSA9IDA7CisJQllURSBiX1NlbGVjdGVkQWRkcmVzc0xvdyA9IDA7CisJQllURSBiX1NlbGVjdGVkQWRkcmVzc0hpZ2ggPSAwOworCVdPUkQgd19SZWFkV29yZCA9IDA7CisKKwlmb3IgKGlfV29yZENvdW50ZXIgPSAwOyBpX1dvcmRDb3VudGVyIDwgaV9OYk9mV29yZHNUb1JlYWQ7CisJCWlfV29yZENvdW50ZXIrKykgeworCQlkbyB7CisJCQlkd19lZXByb21fYnVzeSA9CisJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCX0KKwkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQlmb3IgKGlfQ291bnRlciA9IDA7IGlfQ291bnRlciA8IDI7IGlfQ291bnRlcisrKSB7CisJCQliX1NlbGVjdGVkQWRkcmVzc0xvdyA9ICh3X0VlcHJvbVN0YXJ0QWRkcmVzcyArIGlfQ291bnRlcikgJSAyNTY7CS8vUmVhZCB0aGUgbG93IDggYml0IHBhcnQKKwkJCWJfU2VsZWN0ZWRBZGRyZXNzSGlnaCA9ICh3X0VlcHJvbVN0YXJ0QWRkcmVzcyArIGlfQ291bnRlcikgLyAyNTY7CS8vUmVhZCB0aGUgaGlnaCA4IGJpdCBwYXJ0CisKKwkJCS8vU2VsZWN0IHRoZSBsb2FkIGxvdyBhZGRyZXNzIG1vZGUKKwkJCW91dGIoTlZDTURfTE9BRF9MT1csCisJCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgQU1DQ19PUF9SRUdfTUNTUiArCisJCQkJMyk7CisKKwkJCS8vV2FpdCBvbiBidXN5CisJCQlkbyB7CisJCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCQlpbmwoZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQkJfQorCQkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQkJLy9Mb2FkIHRoZSBsb3cgYWRkcmVzcworCQkJb3V0YihiX1NlbGVjdGVkQWRkcmVzc0xvdywKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyBBTUNDX09QX1JFR19NQ1NSICsKKwkJCQkyKTsKKworCQkJLy9XYWl0IG9uIGJ1c3kKKwkJCWRvIHsKKwkJCQlkd19lZXByb21fYnVzeSA9CisJCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCQlBTUNDX09QX1JFR19NQ1NSKTsKKwkJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCQl9CisJCQl3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOworCisJCQkvL1NlbGVjdCB0aGUgbG9hZCBoaWdoIGFkZHJlc3MgbW9kZQorCQkJb3V0YihOVkNNRF9MT0FEX0hJR0gsCisJCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgQU1DQ19PUF9SRUdfTUNTUiArCisJCQkJMyk7CisKKwkJCS8vV2FpdCBvbiBidXN5CisJCQlkbyB7CisJCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCQlpbmwoZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQkJfQorCQkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQkJLy9Mb2FkIHRoZSBoaWdoIGFkZHJlc3MKKwkJCW91dGIoYl9TZWxlY3RlZEFkZHJlc3NIaWdoLAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIEFNQ0NfT1BfUkVHX01DU1IgKworCQkJCTIpOworCisJCQkvL1dhaXQgb24gYnVzeQorCQkJZG8geworCQkJCWR3X2VlcHJvbV9idXN5ID0KKwkJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJCWR3X2VlcHJvbV9idXN5ID0gZHdfZWVwcm9tX2J1c3kgJiBFRVBST01fQlVTWTsKKwkJCX0KKwkJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJCS8vU2VsZWN0IHRoZSBSRUFEIG1vZGUKKwkJCW91dGIoTlZDTURfQkVHSU5fUkVBRCwKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyBBTUNDX09QX1JFR19NQ1NSICsKKwkJCQkzKTsKKworCQkJLy9XYWl0IG9uIGJ1c3kKKwkJCWRvIHsKKwkJCQlkd19lZXByb21fYnVzeSA9CisJCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCQlBTUNDX09QX1JFR19NQ1NSKTsKKwkJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCQl9CisJCQl3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOworCisJCQkvL1JlYWQgZGF0YSBpbnRvIHRoZSBFRVBST00KKwkJCSpwYl9SZWFkQnl0ZSA9CisJCQkJaW5iKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJQU1DQ19PUF9SRUdfTUNTUiArIDIpOworCisJCQkvL1dhaXQgb24gYnVzeQorCQkJZG8geworCQkJCWR3X2VlcHJvbV9idXN5ID0KKwkJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJCWR3X2VlcHJvbV9idXN5ID0gZHdfZWVwcm9tX2J1c3kgJiBFRVBST01fQlVTWTsKKwkJCX0KKwkJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJCS8vU2VsZWN0IHRoZSB1cHBlciBhZGRyZXNzIHBhcnQKKwkJCWlmIChpX0NvdW50ZXIgPT0gMCkgeworCQkJCWJfUmVhZExvd0J5dGUgPSBwYl9SZWFkQnl0ZVswXTsKKwkJCX0gZWxzZSB7CisJCQkJYl9SZWFkSGlnaEJ5dGUgPSBwYl9SZWFkQnl0ZVswXTsKKwkJCX0KKworCQkJLy9TbGVlcAorCQkJZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspIDsKKworCQl9CisJCXdfUmVhZFdvcmQgPQorCQkJKGJfUmVhZExvd0J5dGUgfCAoKCh1bnNpZ25lZCBzaG9ydCliX1JlYWRIaWdoQnl0ZSkgKgorCQkJCTI1NikpOworCisJCXB3X0RhdGFSZWFkW2lfV29yZENvdW50ZXJdID0gd19SZWFkV29yZDsKKworCQl3X0VlcHJvbVN0YXJ0QWRkcmVzcyArPSAyOwkvLyB0byByZWFkIHRoZSBuZXh0IHdvcmQKKworCX0JCQkvLyBmb3IgKC4uLikgaV9OYk9mV29yZHNUb1JlYWQKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfUzU5MjAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFlNTZiYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTUNTUgkweDNjCisjZGVmaW5lIEVFUFJPTV9CVVNZCQkweDgwMDAwMDAwCisjZGVmaW5lIE5WQ01EX0xPQURfTE9XCQkoMHg0IDw8IDUpCS8qIG52UmFtIGxvYWQgbG93IGNvbW1hbmQgKi8KKyNkZWZpbmUgTlZDTURfTE9BRF9ISUdICQkoMHg1IDw8IDUpCS8qIG52UmFtIGxvYWQgaGlnaCBjb21tYW5kICovCisjZGVmaW5lIE5WQ01EX0JFR0lOX1JFQUQJKDB4NyA8PCA1KQkvKiBudlJhbSBiZWdpbiByZWFkIGNvbW1hbmQgKi8KKyNkZWZpbmUgTlZDTURfQkVHSU5fV1JJVEUJKDB4NiA8PCA1KQkvKiBFRVBST00gYmVnaW4gd3JpdGUgY29tbWFuZCAqLworCitJTlQgaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbShJTlQgaV9OYk9mV29yZHNUb1JlYWQsCisJCQkgICAgICBEV09SRCBkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQkgICAgICBXT1JEIHdfRWVwcm9tU3RhcnRBZGRyZXNzLCBQV09SRCBwd19EYXRhUmVhZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19zNTkzMy5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfczU5MzMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTA3NzRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfczU5MzMuaApAQCAtMCwwICsxLDQ3NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qIEhlYWRlciBmaWxlIGZvciBBTUNDICBzIDU5MzMgKi8KKworI2lmbmRlZiBfQU1DQ19TNTkzM19IXworI2RlZmluZSBfQU1DQ19TNTkzM19IXworCisjaW5jbHVkZSAiLi4vLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICIuLi9jb21lZGlfcGNpLmgiCisKKyNpZmRlZiBQQ0lfU1VQUE9SVF9WRVIxCisjZXJyb3IgICAgIE5vIHN1cHBvcnQgZm9yIDIuMS41NSBhbmQgb2xkZXIKKyNlbmRpZgorCisvKiB3cml0dGVuIG9uIGJhc2UwICovCisjZGVmaW5lIEZJRk9fQURWQU5DRV9PTl9CWVRFXzIJMHgyMDAwMDAwMAorCisvKiBhZGRlZCBmb3Igc3RlcCA2IGRtYSB3cml0dGVuIG9uIGJhc2UyICovCisjZGVmaW5lIEFNV0VOX0VOQUJMRQkJMHgwMgorCisjZGVmaW5lIEEyUF9GSUZPX1dSSVRFX0VOQUJMRQkweDAxCisKKy8qIGZvciB0cmFuc2ZlciBjb3VudCBlbmFibGUgYml0ICovCisjZGVmaW5lIEFHQ1NUU19UQ19FTkFCTEUJMHgxMDAwMDAwMAorCisvKgorICogQURET04gUkVMQVRFRCBBRERJVElPTlMKKyAqLworLyogQ29uc3RhbnQgKi8KKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9MT1cJCTB4MDAKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9ISUdICQkweDEyMDAKKyNkZWZpbmUgQVBDSTMxMjBfQTJQX0ZJRk9fTUFOQUdFTUVOVAkJCTB4MDQwMDA0MDBMCisjZGVmaW5lIEFQQ0kzMTIwX0FNV0VOX0VOQUJMRQkJCQkweDAyCisjZGVmaW5lIEFQQ0kzMTIwX0EyUF9GSUZPX1dSSVRFX0VOQUJMRQkJCTB4MDEKKyNkZWZpbmUgQVBDSTMxMjBfRklGT19BRFZBTkNFX09OX0JZVEVfMgkJCTB4MjAwMDAwMDBMCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9XUklURV9UQ19JTlQJCQkweDAwMDA0MDAwTAorI2RlZmluZSBBUENJMzEyMF9DTEVBUl9XUklURV9UQ19JTlQJCQkweDAwMDQwMDAwTAorI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX0FNV0VOX0FORF9BMlBfRklGT19XUklURQkweDAKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9CVVNfTUFTVEVSX0FERF9PTgkJMHgwCisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfQlVTX01BU1RFUl9QQ0kJCQkweDAKKworLyogQUREX09OIDo6OiB0aGlzIG5lZWRlZCBzaW5jZSBhcGNpIHN1cHBvcnRzIDE2IGJpdCBpbnRlcmZhY2UgdG8gYWRkIG9uICovCisjZGVmaW5lIEFQQ0kzMTIwX0FERF9PTl9BR0NTVFNfTE9XCTB4M0MKKyNkZWZpbmUgQVBDSTMxMjBfQUREX09OX0FHQ1NUU19ISUdICShBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVyArIDIpCisjZGVmaW5lIEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVwkweDI0CisjZGVmaW5lIEFQQ0kzMTIwX0FERF9PTl9NV0FSX0hJR0gJKEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVyArIDIpCisjZGVmaW5lIEFQQ0kzMTIwX0FERF9PTl9NV1RDX0xPVwkweDA1OAorI2RlZmluZSBBUENJMzEyMF9BRERfT05fTVdUQ19ISUdICShBUENJMzEyMF9BRERfT05fTVdUQ19MT1cgKyAyKQorCisvKiBBTUNDICovCisjZGVmaW5lIEFQQ0kzMTIwX0FNQ0NfT1BfTUNTUgkJMHgzQworI2RlZmluZSBBUENJMzEyMF9BTUNDX09QX1JFR19JTlRDU1IJMHgzOAorCisvKgorICogQU1DQyBPcGVyYXRpb24gUmVnaXN0ZXIgT2Zmc2V0cyAtIFBDSQorICovCisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjEJCTB4MDAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfT01CMgkJMHgwNAorI2RlZmluZSBBTUNDX09QX1JFR19PTUIzCQkweDA4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjQJCTB4MGMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfSU1CMQkJMHgxMAorI2RlZmluZSBBTUNDX09QX1JFR19JTUIyCQkweDE0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lNQjMJCTB4MTgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfSU1CNAkJMHgxYworI2RlZmluZSBBTUNDX09QX1JFR19GSUZPCQkweDIwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01XQVIJCTB4MjQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTVdUQwkJMHgyOAorI2RlZmluZSBBTUNDX09QX1JFR19NUkFSCQkweDJjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01SVEMJCTB4MzAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTUJFRgkJMHgzNAorI2RlZmluZSBBTUNDX09QX1JFR19JTlRDU1IJCTB4MzgKKy8qIElOVCBzb3VyY2UgKi8KKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX0lOVENTUl9TUkMJCShBTUNDX09QX1JFR19JTlRDU1IgKyAyKQorLyogRklGTyBjdHJsICovCisjZGVmaW5lICBBTUNDX09QX1JFR19JTlRDU1JfRkVDCQkoQU1DQ19PUF9SRUdfSU5UQ1NSICsgMykKKyNkZWZpbmUgQU1DQ19PUF9SRUdfTUNTUgkJMHgzYworLyogRGF0YSBpbiBieXRlIDIgKi8KKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX01DU1JfTlZEQVRBCShBTUNDX09QX1JFR19NQ1NSICsgMikKKy8qIENvbW1hbmQgaW4gYnl0ZSAzICovCisjZGVmaW5lICBBTUNDX09QX1JFR19NQ1NSX05WQ01ECQkoQU1DQ19PUF9SRUdfTUNTUiArIDMpCisKKyNkZWZpbmUgQU1DQ19GSUZPX0RFUFRIX0RXT1JECTgKKyNkZWZpbmUgQU1DQ19GSUZPX0RFUFRIX0JZVEVTCSg4ICogc2l6ZW9mKHUzMikpCisKKy8qCisgKiBBTUNDIE9wZXJhdGlvbiBSZWdpc3RlcnMgU2l6ZSAtIFBDSQorICovCisjZGVmaW5lIEFNQ0NfT1BfUkVHX1NJWkUJIDY0CS8qIGluIGJ5dGVzICovCisKKy8qCisgKiBBTUNDIE9wZXJhdGlvbiBSZWdpc3RlciBPZmZzZXRzIC0gQWRkLW9uCisgKi8KKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjEJMHgwMAorI2RlZmluZSBBTUNDX09QX1JFR19BSU1CMgkweDA0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FJTUIzCTB4MDgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjQJMHgwYworI2RlZmluZSBBTUNDX09QX1JFR19BT01CMQkweDEwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUIyCTB4MTQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU9NQjMJMHgxOAorI2RlZmluZSBBTUNDX09QX1JFR19BT01CNAkweDFjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FGSUZPCTB4MjAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1XQVIJMHgyNAorI2RlZmluZSBBTUNDX09QX1JFR19BUFRBCTB4MjgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQVBURAkweDJjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNUkFSCTB4MzAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1CRUYJMHgzNAorI2RlZmluZSBBTUNDX09QX1JFR19BSU5UCTB4MzgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUdDU1RTCTB4M2MKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1XVEMJMHg1OAorI2RlZmluZSBBTUNDX09QX1JFR19BTVJUQwkweDVjCisKKy8qCisgKiBBTUNDIC0gQWRkLW9uIEdlbmVyYWwgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBBR0NTVFNfQ09OVFJPTF9NQVNLCTB4ZmZmZmYwMDAKKyNkZWZpbmUgIEFHQ1NUU19OVl9BQ0NfTUFTSwkweGUwMDAwMDAwCisjZGVmaW5lICBBR0NTVFNfUkVTRVRfTUFTSwkweDBlMDAwMDAwCisjZGVmaW5lICBBR0NTVFNfTlZfREFfTUFTSwkweDAwZmYwMDAwCisjZGVmaW5lICBBR0NTVFNfQklTVF9NQVNLCTB4MDAwMGYwMDAKKyNkZWZpbmUgQUdDU1RTX1NUQVRVU19NQVNLCTB4MDAwMDAwZmYKKyNkZWZpbmUgIEFHQ1NUU19UQ1pFUk9fTUFTSwkweDAwMDAwMGMwCisjZGVmaW5lICBBR0NTVFNfRklGT19TVF9NQVNLCTB4MDAwMDAwM2YKKworI2RlZmluZSBBR0NTVFNfUkVTRVRfTUJGTEFHUwkweDA4MDAwMDAwCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9QMkFfRklGTwkweDA0MDAwMDAwCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9BMlBfRklGTwkweDAyMDAwMDAwCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9GSUZPUwkoQUdDU1RTX1JFU0VUX0EyUF9GSUZPIHwgQUdDU1RTX1JFU0VUX1AyQV9GSUZPKQorCisjZGVmaW5lIEFHQ1NUU19BMlBfVENPVU5UCTB4MDAwMDAwODAKKyNkZWZpbmUgQUdDU1RTX1AyQV9UQ09VTlQJMHgwMDAwMDA0MAorCisjZGVmaW5lIEFHQ1NUU19GU19QMkFfRU1QVFkJMHgwMDAwMDAyMAorI2RlZmluZSBBR0NTVFNfRlNfUDJBX0hBTEYJMHgwMDAwMDAxMAorI2RlZmluZSBBR0NTVFNfRlNfUDJBX0ZVTEwJMHgwMDAwMDAwOAorCisjZGVmaW5lIEFHQ1NUU19GU19BMlBfRU1QVFkJMHgwMDAwMDAwNAorI2RlZmluZSBBR0NTVFNfRlNfQTJQX0hBTEYJMHgwMDAwMDAwMgorI2RlZmluZSBBR0NTVFNfRlNfQTJQX0ZVTEwJMHgwMDAwMDAwMQorCisvKgorICogQU1DQyAtIEFkZC1vbiBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIKKyAqLworI2RlZmluZSBBSU5UX0lOVF9NQVNLCQkweDAwZmYwMDAwCisjZGVmaW5lIEFJTlRfU0VMX01BU0sJCTB4MDAwMGZmZmYKKyNkZWZpbmUgIEFJTlRfSVNfRU5TRUxfTUFTSwkweDAwMDAxZjFmCisKKyNkZWZpbmUgQUlOVF9JTlRfQVNTRVJURUQJMHgwMDgwMDAwMAorI2RlZmluZSBBSU5UX0JNX0VSUk9SCQkweDAwMjAwMDAwCisjZGVmaW5lIEFJTlRfQklTVF9JTlQJCTB4MDAxMDAwMDAKKworI2RlZmluZSBBSU5UX1JUX0NPTVBMRVRFCTB4MDAwODAwMDAKKyNkZWZpbmUgQUlOVF9XVF9DT01QTEVURQkweDAwMDQwMDAwCisKKyNkZWZpbmUgQUlOVF9PVVRfTUJfSU5UCQkweDAwMDIwMDAwCisjZGVmaW5lIEFJTlRfSU5fTUJfSU5UCQkweDAwMDEwMDAwCisKKyNkZWZpbmUgQUlOVF9SRUFEX0NPTVBMCQkweDAwMDA4MDAwCisjZGVmaW5lIEFJTlRfV1JJVEVfQ09NUEwJMHgwMDAwNDAwMAorCisjZGVmaW5lIEFJTlRfT01CX0VOQUJMRSAJMHgwMDAwMTAwMAorI2RlZmluZSBBSU5UX09NQl9TRUxFQ1QgCTB4MDAwMDBjMDAKKyNkZWZpbmUgQUlOVF9PTUJfQllURQkJMHgwMDAwMDMwMAorCisjZGVmaW5lIEFJTlRfSU1CX0VOQUJMRSAJMHgwMDAwMDAxMAorI2RlZmluZSBBSU5UX0lNQl9TRUxFQ1QgCTB4MDAwMDAwMGMKKyNkZWZpbmUgQUlOVF9JTUJfQllURQkJMHgwMDAwMDAwMworCisvKiBFbmFibGUgQnVzIE1hc3RlcmluZyAqLworI2RlZmluZSBFTl9BMlBfVFJBTlNGRVJTCTB4MDAwMDA0MDAKKy8qIEZJRk8gRmxhZyBSZXNldCAqLworI2RlZmluZSBSRVNFVF9BMlBfRkxBR1MJCTB4MDQwMDAwMDBMCisvKiBGSUZPIFJlbGF0aXZlIFByaW9yaXR5ICovCisjZGVmaW5lIEEyUF9ISV9QUklPUklUWQkJMHgwMDAwMDEwMEwKKy8qIElkZW50aWZ5IEludGVycnVwdCBTb3VyY2VzICovCisjZGVmaW5lIEFOWV9TNTkzWF9JTlQJCTB4MDA4MDAwMDBMCisjZGVmaW5lIFJFQURfVENfSU5UCQkweDAwMDgwMDAwTAorI2RlZmluZSBXUklURV9UQ19JTlQJCTB4MDAwNDAwMDBMCisjZGVmaW5lIElOX01CX0lOVAkJMHgwMDAyMDAwMEwKKyNkZWZpbmUgTUFTVEVSX0FCT1JUX0lOVAkweDAwMTAwMDAwTAorI2RlZmluZSBUQVJHRVRfQUJPUlRfSU5UCTB4MDAyMDAwMDBMCisjZGVmaW5lIEJVU19NQVNURVJfSU5UCQkweDAwMjAwMDAwTAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgeworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICpuZXh0OworCWludCB1c2VkOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJdW5zaWduZWQgc2hvcnQgdmVuZG9yOworCXVuc2lnbmVkIHNob3J0IGRldmljZTsKKwl1bnNpZ25lZCBjaGFyIHBjaV9idXM7CisJdW5zaWduZWQgY2hhciBwY2lfc2xvdDsKKwl1bnNpZ25lZCBjaGFyIHBjaV9mdW5jOworCXJlc291cmNlX3NpemVfdCBpb19hZGRyWzVdOworCXVuc2lnbmVkIGludCBpcnE7Cit9OworCisvKiBwdHIgdG8gcm9vdCBsaXN0IG9mIGFsbCBhbWNjIGRldmljZXMgKi8KK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjX2RldmljZXM7CisKK3N0YXRpYyBjb25zdCBpbnQgaV9BRERJREFUQURldmljZUlEW10gPSB7IDB4MTVCOCwgMHgxMEU4IH07CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHZfcGNpX2NhcmRfbGlzdF9pbml0KHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IsIGNoYXIgZGlzcGxheSk7Cit2b2lkIHZfcGNpX2NhcmRfbGlzdF9jbGVhbnVwKHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IpOworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKnB0cl9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfZGV2aWNlKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydAorCQkJCQkJICAgICAgIGRldmljZV9pZCk7CitpbnQgaV9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfcG9zaXRpb24odW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcGNpX2J1cywKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHBjaV9zbG90LAorCQkJCSAgICAgc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKipjYXJkKTsKK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICpwdHJfc2VsZWN0X2FuZF9hbGxvY19wY2lfY2FyZCh1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IHBjaV9idXMsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgcGNpX3Nsb3QsCisJCQkJCQkgICAgaW50IGlfTWFzdGVyKTsKKworaW50IHBjaV9jYXJkX2FsbG9jKHN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCBpbnQgbWFzdGVyKTsKK2ludCBpX3BjaV9jYXJkX2ZyZWUoc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MpOwordm9pZCB2X3BjaV9jYXJkX2xpc3RfZGlzcGxheSh2b2lkKTsKK2ludCBpX3BjaV9jYXJkX2RhdGEoc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsCisJCSAgICB1bnNpZ25lZCBjaGFyICpwY2lfYnVzLCB1bnNpZ25lZCBjaGFyICpwY2lfc2xvdCwKKwkJICAgIHVuc2lnbmVkIGNoYXIgKnBjaV9mdW5jLCByZXNvdXJjZV9zaXplX3QgKiBpb19hZGRyLAorCQkgICAgdW5zaWduZWQgaW50ICppcnEpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogYnVpbGQgbGlzdCBvZiBhbWNjIGNhcmRzIGluIHRoaXMgc3lzdGVtICovCit2b2lkIHZfcGNpX2NhcmRfbGlzdF9pbml0KHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IsIGNoYXIgZGlzcGxheSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCAqbGFzdDsKKwlpbnQgaTsKKwlpbnQgaV9Db3VudCA9IDA7CisJYW1jY19kZXZpY2VzID0gTlVMTDsKKwlsYXN0ID0gTlVMTDsKKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJICAgICBwY2lkZXYgIT0gTlVMTDsKKwkgICAgIHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwkJZm9yIChpX0NvdW50ID0gMDsgaV9Db3VudCA8IDI7IGlfQ291bnQrKykgeworCQkJcGNpX3ZlbmRvciA9IGlfQURESURBVEFEZXZpY2VJRFtpX0NvdW50XTsKKwkJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBwY2lfdmVuZG9yKSB7CisJCQkJYW1jYyA9IGttYWxsb2Moc2l6ZW9mKCphbWNjKSwgR0ZQX0tFUk5FTCk7CisJCQkJbWVtc2V0KGFtY2MsIDAsIHNpemVvZigqYW1jYykpOworCisJCQkJYW1jYy0+cGNpZGV2ID0gcGNpZGV2OworCQkJCWlmIChsYXN0KQorCQkJCQlsYXN0LT5uZXh0ID0gYW1jYzsKKwkJCQllbHNlCisJCQkJCWFtY2NfZGV2aWNlcyA9IGFtY2M7CisJCQkJbGFzdCA9IGFtY2M7CisKKwkJCQlhbWNjLT52ZW5kb3IgPSBwY2lkZXYtPnZlbmRvcjsKKwkJCQlhbWNjLT5kZXZpY2UgPSBwY2lkZXYtPmRldmljZTsKKwkJCQlhbWNjLT5wY2lfYnVzID0gcGNpZGV2LT5idXMtPm51bWJlcjsKKwkJCQlhbWNjLT5wY2lfc2xvdCA9IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pOworCQkJCWFtY2MtPnBjaV9mdW5jID0gUENJX0ZVTkMocGNpZGV2LT5kZXZmbik7CisJCQkJLyogTm90ZTogcmVzb3VyY2VzIG1heSBiZSBpbnZhbGlkIGlmIFBDSSBkZXZpY2UKKwkJCQkgKiBub3QgZW5hYmxlZCwgYnV0IHRoZXkgYXJlIGNvcnJlY3RlZCBpbgorCQkJCSAqIHBjaV9jYXJkX2FsbG9jLiAqLworCQkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCQkJCWFtY2MtPmlvX2FkZHJbaV0gPQorCQkJCQkgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgaSk7CisJCQkJYW1jYy0+aXJxID0gcGNpZGV2LT5pcnE7CisKKwkJCX0KKwkJfQorCX0KKworCWlmIChkaXNwbGF5KQorCQl2X3BjaV9jYXJkX2xpc3RfZGlzcGxheSgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGZyZWUgdXAgbGlzdCBvZiBhbWNjIGNhcmRzIGluIHRoaXMgc3lzdGVtICovCit2b2lkIHZfcGNpX2NhcmRfbGlzdF9jbGVhbnVwKHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IpCit7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsICpuZXh0OworCisJZm9yIChhbWNjID0gYW1jY19kZXZpY2VzOyBhbWNjOyBhbWNjID0gbmV4dCkgeworCQluZXh0ID0gYW1jYy0+bmV4dDsKKwkJa2ZyZWUoYW1jYyk7CisJfQorCisJYW1jY19kZXZpY2VzID0gTlVMTDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBmaW5kIGZpcnN0IHVudXNlZCBjYXJkIHdpdGggdGhpcyBkZXZpY2VfaWQgKi8KK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICpwdHJfZmluZF9mcmVlX3BjaV9jYXJkX2J5X2RldmljZSh1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQsCisJCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkKQoreworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCAqbmV4dDsKKworCWZvciAoYW1jYyA9IGFtY2NfZGV2aWNlczsgYW1jYzsgYW1jYyA9IG5leHQpIHsKKwkJbmV4dCA9IGFtY2MtPm5leHQ7CisJCWlmICgoIWFtY2MtPnVzZWQpICYmIChhbWNjLT5kZXZpY2UgPT0gZGV2aWNlX2lkKQorCQkgICAgJiYgKGFtY2MtPnZlbmRvciA9PSB2ZW5kb3JfaWQpKQorCQkJcmV0dXJuIGFtY2M7CisKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBmaW5kIGNhcmQgb24gcmVxdWVzdGVkIHBvc2l0aW9uICovCitpbnQgaV9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfcG9zaXRpb24odW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcGNpX2J1cywKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHBjaV9zbG90LAorCQkJCSAgICAgc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKipjYXJkKQoreworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCAqbmV4dDsKKworCSpjYXJkID0gTlVMTDsKKwlmb3IgKGFtY2MgPSBhbWNjX2RldmljZXM7IGFtY2M7IGFtY2MgPSBuZXh0KSB7CisJCW5leHQgPSBhbWNjLT5uZXh0OworCQlpZiAoKGFtY2MtPnZlbmRvciA9PSB2ZW5kb3JfaWQpICYmIChhbWNjLT5kZXZpY2UgPT0gZGV2aWNlX2lkKQorCQkgICAgJiYgKGFtY2MtPnBjaV9idXMgPT0gcGNpX2J1cykKKwkJICAgICYmIChhbWNjLT5wY2lfc2xvdCA9PSBwY2lfc2xvdCkpIHsKKwkJCWlmICghKGFtY2MtPnVzZWQpKSB7CisJCQkJKmNhcmQgPSBhbWNjOworCQkJCXJldHVybiAwOwkvKiBvaywgY2FyZCBpcyBmb3VuZCAqLworCQkJfSBlbHNlIHsKKwkJCQlydF9wcmludGsoIiAtIFxuQ2FyZCBvbiByZXF1ZXN0ZWQgcG9zaXRpb24gaXMgdXNlZCBiOnMgJWQ6JWQhXG4iLAorCQkJCQkgIHBjaV9idXMsIHBjaV9zbG90KTsKKwkJCQlyZXR1cm4gMjsJLyogY2FyZCBleGlzdCBidXQgaXMgdXNlZCAqLworCQkJfQorCQl9CisJfQorCisJLyogbm8gY2FyZCBmb3VuZCAqLworCXJldHVybiAxOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIG1hcmsgY2FyZCBhcyB1c2VkICovCitpbnQgcGNpX2NhcmRfYWxsb2Moc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsIGludCBtYXN0ZXIpCit7CisJaW50IGk7CisKKwlpZiAoIWFtY2MpCisJCXJldHVybiAtMTsKKworCWlmIChhbWNjLT51c2VkKQorCQlyZXR1cm4gMTsKKwlpZiAoY29tZWRpX3BjaV9lbmFibGUoYW1jYy0+cGNpZGV2LCAiYWRkaV9hbWNjX3M1OTMzIikpCisJCXJldHVybiAtMTsKKwkvKiBSZXNvdXJjZXMgd2lsbCBiZSBhY2N1cmF0ZSBub3cuICovCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJYW1jYy0+aW9fYWRkcltpXSA9IHBjaV9yZXNvdXJjZV9zdGFydChhbWNjLT5wY2lkZXYsIGkpOworCWlmIChtYXN0ZXIpCisJCXBjaV9zZXRfbWFzdGVyKGFtY2MtPnBjaWRldik7CisJYW1jYy0+dXNlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBtYXJrIGNhcmQgYXMgZnJlZSAqLworaW50IGlfcGNpX2NhcmRfZnJlZShzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYykKK3sKKwlpZiAoIWFtY2MpCisJCXJldHVybiAtMTsKKworCWlmICghYW1jYy0+dXNlZCkKKwkJcmV0dXJuIDE7CisJYW1jYy0+dXNlZCA9IDA7CisJY29tZWRpX3BjaV9kaXNhYmxlKGFtY2MtPnBjaWRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZGlzcGxheSBsaXN0IG9mIGZvdW5kIGNhcmRzICovCit2b2lkIHZfcGNpX2NhcmRfbGlzdF9kaXNwbGF5KHZvaWQpCit7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsICpuZXh0OworCisJcHJpbnRrKEtFUk5fREVCVUcgIkxpc3Qgb2YgcGNpIGNhcmRzXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiYnVzOnNsb3Q6ZnVuYyB2ZW5kb3IgZGV2aWNlIGlvX2FtY2MgaW9fZGFxIGlycSB1c2VkXG4iKTsKKworCWZvciAoYW1jYyA9IGFtY2NfZGV2aWNlczsgYW1jYzsgYW1jYyA9IG5leHQpIHsKKwkJbmV4dCA9IGFtY2MtPm5leHQ7CisJCXByaW50aworCQkgICAgKCIlMmQgICAlMmQgICAlMmQgIDB4JTR4IDB4JTR4ICAgMHglOGxseCAweCU4bGx4ICAlMnUgICUyZFxuIiwKKwkJICAgICBhbWNjLT5wY2lfYnVzLCBhbWNjLT5wY2lfc2xvdCwgYW1jYy0+cGNpX2Z1bmMsCisJCSAgICAgYW1jYy0+dmVuZG9yLCBhbWNjLT5kZXZpY2UsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylhbWNjLT5pb19hZGRyWzBdLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYW1jYy0+aW9fYWRkclsyXSwgYW1jYy0+aXJxLAorCQkgICAgIGFtY2MtPnVzZWQpOworCisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHJldHVybiBhbGwgY2FyZCBpbmZvcm1hdGlvbiBmb3IgZHJpdmVyICovCitpbnQgaV9wY2lfY2FyZF9kYXRhKHN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLAorCQkgICAgdW5zaWduZWQgY2hhciAqcGNpX2J1cywgdW5zaWduZWQgY2hhciAqcGNpX3Nsb3QsCisJCSAgICB1bnNpZ25lZCBjaGFyICpwY2lfZnVuYywgcmVzb3VyY2Vfc2l6ZV90ICogaW9fYWRkciwKKwkJICAgIHVuc2lnbmVkIGludCAqaXJxKQoreworCWludCBpOworCisJaWYgKCFhbWNjKQorCQlyZXR1cm4gLTE7CisJKnBjaV9idXMgPSBhbWNjLT5wY2lfYnVzOworCSpwY2lfc2xvdCA9IGFtY2MtPnBjaV9zbG90OworCSpwY2lfZnVuYyA9IGFtY2MtPnBjaV9mdW5jOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCWlvX2FkZHJbaV0gPSBhbWNjLT5pb19hZGRyW2ldOworCSppcnEgPSBhbWNjLT5pcnE7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogc2VsZWN0IGFuZCBhbGxvYyBjYXJkICovCitzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqcHRyX3NlbGVjdF9hbmRfYWxsb2NfcGNpX2NhcmQodW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IGRldmljZV9pZCwKKwkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBwY2lfYnVzLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IHBjaV9zbG90LAorCQkJCQkJICAgIGludCBpX01hc3RlcikKK3sKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZDsKKworCWlmICgocGNpX2J1cyA8IDEpICYgKHBjaV9zbG90IDwgMSkpIHsKKwkJLyogdXNlIGF1dG9kZXRlY3Rpb24gKi8KKwkJY2FyZCA9IHB0cl9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfZGV2aWNlKHZlbmRvcl9pZCwgZGV2aWNlX2lkKTsKKwkJaWYgKGNhcmQgPT0gTlVMTCkgeworCQkJcnRfcHJpbnRrKCIgLSBVbnVzZWQgY2FyZCBub3QgZm91bmQgaW4gc3lzdGVtIVxuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoaV9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfcG9zaXRpb24odmVuZG9yX2lkLCBkZXZpY2VfaWQsCisJCQkJCQkJIHBjaV9idXMsIHBjaV9zbG90LAorCQkJCQkJCSAmY2FyZCkpIHsKKwkJY2FzZSAxOgorCQkJcnRfcHJpbnRrKCIgLSBDYXJkIG5vdCBmb3VuZCBvbiByZXF1ZXN0ZWQgcG9zaXRpb24gYjpzICVkOiVkIVxuIiwKKwkJCQkgIHBjaV9idXMsIHBjaV9zbG90KTsKKwkJCXJldHVybiBOVUxMOworCQljYXNlIDI6CisJCQlydF9wcmludGsoIiAtIENhcmQgb24gcmVxdWVzdGVkIHBvc2l0aW9uIGlzIHVzZWQgYjpzICVkOiVkIVxuIiwKKwkJCQkgIHBjaV9idXMsIHBjaV9zbG90KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJaWYgKHBjaV9jYXJkX2FsbG9jKGNhcmQsIGlfTWFzdGVyKSAhPSAwKSB7CisJCXJ0X3ByaW50aygiIC0gQ2FuJ3QgYWxsb2NhdGUgY2FyZCFcbiIpOworCQlyZXR1cm4gTlVMTDsKKworCX0KKworCXJldHVybiBjYXJkOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE4YzY5YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uYwpAQCAtMCwwICsxLDMwNjIgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYXNzZSAzICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgIDogQURESSBEQVRBICAgICAgICAgfCBDb21waWxlciA6IEdDQyAJCSAgICAgICAgICB8CisgIHwgTW9kdWxuYW1lIDogYWRkaV9jb21tb24uYyAgICAgfCBWZXJzaW9uICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEF1dGhvciAgICA6ICAgICAgICAgICB8IERhdGUgICAgIDogICAgICAgICAgICAgICAgICAgIAkJICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6IEFEREkgQ09NTU9OIE1haW4gTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgQ09ORklHIE9QVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAlvcHRpb25bMF0gLSBQQ0kgYnVzIG51bWJlciAtIGlmIGJ1cyBudW1iZXIgYW5kIHNsb3QgbnVtYmVyIGFyZSAwLCB8CisgIHwJCQkgICAgICAgICB0aGVuIGRyaXZlciBzZWFyY2ggZm9yIGZpcnN0IHVudXNlZCBjYXJkIHwKKyAgfAlvcHRpb25bMV0gLSBQQ0kgc2xvdCBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkJCQkJICAgICAgICAgICAgICAgICAgfAorICB8CW9wdGlvblsyXSA9IDAgIC0gRE1BIEVOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgID0gMSAgLSBETUEgRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgIi4uLy4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2lmIGRlZmluZWQoQ09ORklHX0FQQ0lfMTcxMCkgfHwgZGVmaW5lZChDT05GSUdfQVBDSV8zMjAwKSB8fCBkZWZpbmVkKENPTkZJR19BUENJXzMzMDApCisjaW5jbHVkZSA8YXNtL2kzODcuaD4KKyNlbmRpZgorI2luY2x1ZGUgIi4uL2NvbWVkaV9mYy5oIgorCisjaW5jbHVkZSAiYWRkaV9jb21tb24uaCIKKyNpbmNsdWRlICJhZGRpX2FtY2NfczU5MzMuaCIKKworLy9VcGRhdGUtMC43LjU3LT4wLjcuNjhNT0RVTEVfQVVUSE9SKCJBRERJLURBVEEgR21iSCA8aW5mb0BhZGRpLWRhdGEuY29tPiIpOworLy9VcGRhdGUtMC43LjU3LT4wLjcuNjhNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBBRERJLURBVEEgbW9kdWxlIik7CisvL1VwZGF0ZS0wLjcuNTctPjAuNy42OE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBkZXZwcml2ICgoYWRkaV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSB0aGlzX2JvYXJkICgoYm9hcmR0eXBlICopZGV2LT5ib2FyZF9wdHIpCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUENJXzE3MTApIHx8IGRlZmluZWQoQ09ORklHX0FQQ0lfMzIwMCkgfHwgZGVmaW5lZChDT05GSUdfQVBDSV8zMzAwKQorLy9CWVRFIGJfU2F2ZUZQVVJlZyBbOTRdOworCit2b2lkIGZwdV9iZWdpbih2b2lkKQoreworCS8vYXNtICgiZnN0ZW52IGJfU2F2ZUZQVVJlZyIpOworCWtlcm5lbF9mcHVfYmVnaW4oKTsKK30KKwordm9pZCBmcHVfZW5kKHZvaWQpCit7CisJLy8gYXNtICgiZnJzdG9yIGJfU2F2ZUZQVVJlZyIpOworCWtlcm5lbF9mcHVfZW5kKCk7Cit9CisjZW5kaWYKKworI2luY2x1ZGUgImFkZGlfZWVwcm9tLmMiCisjaWYgKGRlZmluZWQgKENPTkZJR19BUENJXzMxMjApIHx8IGRlZmluZWQgKENPTkZJR19BUENJXzMwMDEpKQorI2luY2x1ZGUgImh3ZHJ2X2FwY2kzMTIwLmMiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xMDMyCisjaW5jbHVkZSAiaHdkcnZfYXBjaTEwMzIuYyIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE1MTYKKyNpbmNsdWRlICJod2Rydl9hcGNpMTUxNi5jIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMjAxNgorI2luY2x1ZGUgImh3ZHJ2X2FwY2kyMDE2LmMiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8yMDMyCisjaW5jbHVkZSAiaHdkcnZfYXBjaTIwMzIuYyIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzIyMDAKKyNpbmNsdWRlICJod2Rydl9hcGNpMjIwMC5jIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTU2NAorI2luY2x1ZGUgImh3ZHJ2X2FwY2kxNTY0LmMiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNTAwCisjaW5jbHVkZSAiaHdkcnZfYXBjaTE1MDAuYyIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzM1MDEKKyNpbmNsdWRlICJod2Rydl9hcGNpMzUwMS5jIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMDM1CisjaW5jbHVkZSAiaHdkcnZfYXBjaTAzNS5jIgorI2VuZGlmCisjaWYgKGRlZmluZWQgKENPTkZJR19BUENJXzMyMDApIHx8IGRlZmluZWQgKENPTkZJR19BUENJXzMzMDApKQorI2luY2x1ZGUgImh3ZHJ2X2FwY2kzMjAwLmMiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNzEwCisjaW5jbHVkZSAiaHdkcnZfQVBDSTE3MTAuYyIKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE2WFgKKyNpbmNsdWRlICJod2Rydl9hcGNpMTZ4eC5jIgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfM1hYWAorI2luY2x1ZGUgImh3ZHJ2X2FwY2kzeHh4LmMiCisjZW5kaWYKKworI2lmbmRlZiBDT01FRElfU1VCRF9UVExJTworI2RlZmluZSBDT01FRElfU1VCRF9UVExJTyAgIDExCS8qIERpZ2l0YWwgSW5wdXQgT3V0cHV0IEJ1dCBUVEwgKi8KKyNlbmRpZgorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYWRkaV9hcGNpX3RibCkgPSB7CisjaWZkZWYgQ09ORklHX0FQQ0lfMzEyMAorCXtBUENJMzEyMF9CT0FSRF9WRU5ET1JfSUQsIDB4ODE4RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xMDMyCisJe0FQQ0kxMDMyX0JPQVJEX1ZFTkRPUl9JRCwgMHgxMDAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzE1MTYKKwl7QVBDSTE1MTZfQk9BUkRfVkVORE9SX0lELCAweDEwMDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMjAxNgorCXtBUENJMjAxNl9CT0FSRF9WRU5ET1JfSUQsIDB4MTAwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8yMDMyCisJe0FQQ0kyMDMyX0JPQVJEX1ZFTkRPUl9JRCwgMHgxMDA0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzIyMDAKKwl7QVBDSTIyMDBfQk9BUkRfVkVORE9SX0lELCAweDEwMDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTU2NAorCXtBUENJMTU2NF9CT0FSRF9WRU5ET1JfSUQsIDB4MTAwNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNTAwCisJe0FQQ0kxNTAwX0JPQVJEX1ZFTkRPUl9JRCwgMHg4MGZjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzMwMDEKKwl7QVBDSTMxMjBfQk9BUkRfVkVORE9SX0lELCAweDgyOEQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMzUwMQorCXtBUENJMzUwMV9CT0FSRF9WRU5ET1JfSUQsIDB4MzAwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8wMzUKKwl7QVBDSTAzNV9CT0FSRF9WRU5ET1JfSUQsIDB4MDMwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8zMjAwCisJe0FQQ0kzMjAwX0JPQVJEX1ZFTkRPUl9JRCwgMHgzMDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzMzMDAKKwl7QVBDSTMyMDBfQk9BUkRfVkVORE9SX0lELCAweDMwMDcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTcxMAorCXtBUENJMTcxMF9CT0FSRF9WRU5ET1JfSUQsIEFQQ0kxNzEwX0JPQVJEX0RFVklDRV9JRCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNlhYCisJezB4MTVCOCwgMHgxMDA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDEwMEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfM1hYWAorCXsweDE1QjgsIDB4MzAxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDBGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMEUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDE0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDE3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDFBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMUIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxQywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDFELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMUUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAxRiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDIzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMEIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB4MTVCOCwgMHgzMDAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MHgxNUI4LCAweDMwMDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsweDE1QjgsIDB4MzAyNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisjZW5kaWYKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZGRpX2FwY2lfdGJsKTsKKworc3RhdGljIGNvbnN0IGJvYXJkdHlwZSBib2FyZHR5cGVzW10gPSB7CisjaWZkZWYgQ09ORklHX0FQQ0lfMzEyMAorCXsiYXBjaTMxMjAiLAorCQkJQVBDSTMxMjBfQk9BUkRfVkVORE9SX0lELAorCQkJMHg4MThELAorCQkJQU1DQ19PUF9SRUdfU0laRSwKKwkJCUFQQ0kzMTIwX0FERFJFU1NfUkFOR0UsCisJCQk4LAorCQkJMCwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCU5VTEwsCisJCQkxNiwKKwkJCTgsCisJCQkxNiwKKwkJCTgsCisJCQkweGZmZmYsCisJCQkweDNmZmYsCisJCQkmcmFuZ2VfYXBjaTMxMjBfYWksCisJCQkmcmFuZ2VfYXBjaTMxMjBfYW8sCisJCQk0LAorCQkJNCwKKwkJCTB4MGYsCisJCQkwLAorCQkJTlVMTCwKKwkJCTEsCisJCQkxLAorCQkJMSwKKwkJCTEwMDAwLAorCQkJMTAwMDAwLAorCQkJdl9BUENJMzEyMF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzMTIwX1Jlc2V0LAorCQkJaV9BUENJMzEyMF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMTIwX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTMxMjBfQ29tbWFuZFRlc3RBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMxMjBfQ29tbWFuZEFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzEyMF9TdG9wQ3ljbGljQWNxdWlzaXRpb24sCisJCQlOVUxMLAorCQkJaV9BUENJMzEyMF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTMxMjBfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJMzEyMF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTMxMjBfSW5zbkNvbmZpZ0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzMTIwX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzMTIwX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzMTIwX0luc25Db25maWdUaW1lciwKKwkJCWlfQVBDSTMxMjBfSW5zbldyaXRlVGltZXIsCisJCQlpX0FQQ0kzMTIwX0luc25SZWFkVGltZXIsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzEwMzIKKwl7ImFwY2kxMDMyIiwKKwkJCUFQQ0kxMDMyX0JPQVJEX1ZFTkRPUl9JRCwKKwkJCTB4MTAwMywKKwkJCTQsCisJCQlBUENJMTAzMl9BRERSRVNTX1JBTkdFLAorCQkJMCwKKwkJCTAsCisJCQlBRERJREFUQV9FRVBST00sCisJCQlBRERJREFUQV85M0M3NiwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMzIsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQl2X0FQQ0kxMDMyX0ludGVycnVwdCwKKwkJCWlfQVBDSTEwMzJfUmVzZXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMTAzMl9Db25maWdEaWdpdGFsSW5wdXQsCisJCQlpX0FQQ0kxMDMyX1JlYWQxRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTEwMzJfUmVhZE1vcmVEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8xNTE2CisJeyJhcGNpMTUxNiIsCisJCQlBUENJMTUxNl9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDEwMDEsCisJCQkxMjgsCisJCQlBUENJMTUxNl9BRERSRVNTX1JBTkdFLAorCQkJMzIsCisJCQkwLAorCQkJQURESURBVEFfRUVQUk9NLAorCQkJQURESURBVEFfUzU5MjAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTgsCisJCQk4LAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTEsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJaV9BUENJMTUxNl9SZXNldCwKKwkJCU5VTEwsIE5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kxNTE2X1JlYWQxRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTE1MTZfUmVhZE1vcmVEaWdpdGFsSW5wdXQsCisJCQlpX0FQQ0kxNTE2X0NvbmZpZ0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kxNTE2X1dyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTE1MTZfUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJaV9BUENJMTUxNl9Db25maWdXYXRjaGRvZywKKwkJCWlfQVBDSTE1MTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZywKKwkJCWlfQVBDSTE1MTZfUmVhZFdhdGNoZG9nLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8yMDE2CisJeyJhcGNpMjAxNiIsCisJCQlBUENJMjAxNl9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDEwMDIsCisJCQkxMjgsCisJCQlBUENJMjAxNl9BRERSRVNTX1JBTkdFLAorCQkJMzIsCisJCQkwLAorCQkJQURESURBVEFfRUVQUk9NLAorCQkJQURESURBVEFfUzU5MjAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxNiwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCWlfQVBDSTIwMTZfUmVzZXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTIwMTZfQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTIwMTZfV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMjAxNl9CaXRzRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kyMDE2X0NvbmZpZ1dhdGNoZG9nLAorCQkJaV9BUENJMjAxNl9TdGFydFN0b3BXcml0ZVdhdGNoZG9nLAorCQkJaV9BUENJMjAxNl9SZWFkV2F0Y2hkb2csCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzIwMzIKKwl7ImFwY2kyMDMyIiwKKwkJCUFQQ0kyMDMyX0JPQVJEX1ZFTkRPUl9JRCwKKwkJCTB4MTAwNCwKKwkJCTQsCisJCQlBUENJMjAzMl9BRERSRVNTX1JBTkdFLAorCQkJMCwKKwkJCTAsCisJCQlBRERJREFUQV9FRVBST00sCisJCQlBRERJREFUQV85M0M3NiwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJMCwKKwkJCTMyLAorCQkJMHhmZmZmZmZmZiwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTEsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQl2X0FQQ0kyMDMyX0ludGVycnVwdCwKKwkJCWlfQVBDSTIwMzJfUmVzZXQsCisJCQlOVUxMLCBOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMjAzMl9Db25maWdEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMjAzMl9Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kyMDMyX1JlYWREaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMjAzMl9SZWFkSW50ZXJydXB0U3RhdHVzLAorCQkJaV9BUENJMjAzMl9Db25maWdXYXRjaGRvZywKKwkJCWlfQVBDSTIwMzJfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZywKKwkJCWlfQVBDSTIwMzJfUmVhZFdhdGNoZG9nLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8yMjAwCisJeyJhcGNpMjIwMCIsCisJCQlBUENJMjIwMF9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDEwMDUsCisJCQk0LAorCQkJQVBDSTIyMDBfQUREUkVTU19SQU5HRSwKKwkJCTAsCisJCQkwLAorCQkJQURESURBVEFfRUVQUk9NLAorCQkJQURESURBVEFfOTNDNzYsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTgsCisJCQkxNiwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCWlfQVBDSTIyMDBfUmVzZXQsCisJCQlOVUxMLCBOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMjIwMF9SZWFkMURpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kyMjAwX1JlYWRNb3JlRGlnaXRhbElucHV0LAorCQkJaV9BUENJMjIwMF9Db25maWdEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMjIwMF9Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kyMjAwX1JlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTIyMDBfQ29uZmlnV2F0Y2hkb2csCisJCQlpX0FQQ0kyMjAwX1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2csCisJCQlpX0FQQ0kyMjAwX1JlYWRXYXRjaGRvZywKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTU2NAorCXsiYXBjaTE1NjQiLAorCQkJQVBDSTE1NjRfQk9BUkRfVkVORE9SX0lELAorCQkJMHgxMDA2LAorCQkJMTI4LAorCQkJQVBDSTE1NjRfQUREUkVTU19SQU5HRSwKKwkJCTAsCisJCQkwLAorCQkJQURESURBVEFfRUVQUk9NLAorCQkJQURESURBVEFfOTNDNzYsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTMyLAorCQkJMzIsCisJCQkweGZmZmZmZmZmLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMSwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCXZfQVBDSTE1NjRfSW50ZXJydXB0LAorCQkJaV9BUENJMTU2NF9SZXNldCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kxNTY0X0NvbmZpZ0RpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTE1NjRfUmVhZDFEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJMTU2NF9SZWFkTW9yZURpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTE1NjRfQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTE1NjRfV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMTU2NF9SZWFkRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTE1NjRfUmVhZEludGVycnVwdFN0YXR1cywKKwkJCWlfQVBDSTE1NjRfQ29uZmlnVGltZXJDb3VudGVyV2F0Y2hkb2csCisJCQlpX0FQQ0kxNTY0X1N0YXJ0U3RvcFdyaXRlVGltZXJDb3VudGVyV2F0Y2hkb2csCisJCQlpX0FQQ0kxNTY0X1JlYWRUaW1lckNvdW50ZXJXYXRjaGRvZywKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTUwMAorCXsiYXBjaTE1MDAiLAorCQkJQVBDSTE1MDBfQk9BUkRfVkVORE9SX0lELAorCQkJMHg4MGZjLAorCQkJMTI4LAorCQkJQVBDSTE1MDBfQUREUkVTU19SQU5HRSwKKwkJCTQsCisJCQkwLAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJMTYsCisJCQkxNiwKKwkJCTB4ZmZmZiwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTEsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQl2X0FQQ0kxNTAwX0ludGVycnVwdCwKKwkJCWlfQVBDSTE1MDBfUmVzZXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMTUwMF9Db25maWdEaWdpdGFsSW5wdXRFdmVudCwKKwkJCWlfQVBDSTE1MDBfSW5pdGlhbGlzYXRpb24sCisJCQlpX0FQQ0kxNTAwX1N0YXJ0U3RvcElucHV0RXZlbnQsCisJCQlpX0FQQ0kxNTAwX1JlYWRNb3JlRGlnaXRhbElucHV0LAorCQkJaV9BUENJMTUwMF9Db25maWdEaWdpdGFsT3V0cHV0RXJyb3JJbnRlcnJ1cHQsCisJCQlpX0FQQ0kxNTAwX1dyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTE1MDBfQ29uZmlndXJlSW50ZXJydXB0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTE1MDBfQ29uZmlnQ291bnRlclRpbWVyV2F0Y2hkb2csCisJCQlpX0FQQ0kxNTAwX1N0YXJ0U3RvcFRyaWdnZXJUaW1lckNvdW50ZXJXYXRjaGRvZywKKwkJCWlfQVBDSTE1MDBfUmVhZEludGVycnVwdE1hc2ssCisJCQlpX0FQQ0kxNTAwX1JlYWRDb3VudGVyVGltZXJXYXRjaGRvZywKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8zMDAxCisJeyJhcGNpMzAwMSIsCisJCQlBUENJMzEyMF9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDgyOEQsCisJCQlBTUNDX09QX1JFR19TSVpFLAorCQkJQVBDSTMxMjBfQUREUkVTU19SQU5HRSwKKwkJCTgsCisJCQkwLAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJTlVMTCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJMCwKKwkJCTB4ZmZmLAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpMzEyMF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTB4MGYsCisJCQkwLAorCQkJTlVMTCwKKwkJCTEsCisJCQkxLAorCQkJMSwKKwkJCTEwMDAwLAorCQkJMTAwMDAwLAorCQkJdl9BUENJMzEyMF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzMTIwX1Jlc2V0LAorCQkJaV9BUENJMzEyMF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMTIwX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTMxMjBfQ29tbWFuZFRlc3RBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMxMjBfQ29tbWFuZEFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzEyMF9TdG9wQ3ljbGljQWNxdWlzaXRpb24sCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMzEyMF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzMTIwX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJaV9BUENJMzEyMF9JbnNuQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTMxMjBfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTMxMjBfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTMxMjBfSW5zbkNvbmZpZ1RpbWVyLAorCQkJaV9BUENJMzEyMF9JbnNuV3JpdGVUaW1lciwKKwkJCWlfQVBDSTMxMjBfSW5zblJlYWRUaW1lciwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMzUwMQorCXsiYXBjaTM1MDEiLAorCQkJQVBDSTM1MDFfQk9BUkRfVkVORE9SX0lELAorCQkJMHgzMDAxLAorCQkJNjQsCisJCQlBUENJMzUwMV9BRERSRVNTX1JBTkdFLAorCQkJMCwKKwkJCTAsCisJCQlBRERJREFUQV9FRVBST00sCisJCQlBRERJREFUQV9TNTkzMywKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTgsCisJCQkwLAorCQkJMTYzODMsCisJCQlOVUxMLAorCQkJJnJhbmdlX2FwY2kzNTAxX2FvLAorCQkJMiwKKwkJCTIsCisJCQkweDMsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJdl9BUENJMzUwMV9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzNTAxX1Jlc2V0LAorCQkJTlVMTCwgTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMzUwMV9Db25maWdBbmFsb2dPdXRwdXQsCisJCQlpX0FQQ0kzNTAxX1dyaXRlQW5hbG9nT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTM1MDFfUmVhZERpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTM1MDFfQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTM1MDFfV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMzUwMV9SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzNTAxX0NvbmZpZ1RpbWVyQ291bnRlcldhdGNoZG9nLAorCQkJaV9BUENJMzUwMV9TdGFydFN0b3BXcml0ZVRpbWVyQ291bnRlcldhdGNoZG9nLAorCQkJaV9BUENJMzUwMV9SZWFkVGltZXJDb3VudGVyV2F0Y2hkb2csCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzAzNQorCXsiYXBjaTAzNSIsCisJCQlBUENJMDM1X0JPQVJEX1ZFTkRPUl9JRCwKKwkJCTB4MDMwMCwKKwkJCTEyNywKKwkJCUFQQ0kwMzVfQUREUkVTU19SQU5HRSwKKwkJCTAsCisJCQkwLAorCQkJMSwKKwkJCUFERElEQVRBX1M1OTIwLAorCQkJMTYsCisJCQk4LAorCQkJMTYsCisJCQkwLAorCQkJMHhmZiwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTAzNV9haSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkxLAorCQkJMCwKKwkJCTEwMDAwLAorCQkJMTAwMDAwLAorCQkJdl9BUENJMDM1X0ludGVycnVwdCwKKwkJCWlfQVBDSTAzNV9SZXNldCwKKwkJCWlfQVBDSTAzNV9Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTAzNV9SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMDM1X0NvbmZpZ1RpbWVyV2F0Y2hkb2csCisJCQlpX0FQQ0kwMzVfU3RhcnRTdG9wV3JpdGVUaW1lcldhdGNoZG9nLAorCQkJaV9BUENJMDM1X1JlYWRUaW1lcldhdGNoZG9nLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVBDSV8zMjAwCisJeyJhcGNpMzIwMCIsCisJCQlBUENJMzIwMF9CT0FSRF9WRU5ET1JfSUQsCisJCQkweDMwMDAsCisJCQkxMjgsCisJCQkyNTYsCisJCQk0LAorCQkJNCwKKwkJCUFERElEQVRBX0VFUFJPTSwKKwkJCUFERElEQVRBX1M1OTIwLAorCQkJMTYsCisJCQk4LAorCQkJMTYsCisJCQkwLAorCQkJMHgzZmZmZiwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTMyMDBfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkxMDAwMCwKKwkJCTEwMDAwMCwKKwkJCXZfQVBDSTMyMDBfSW50ZXJydXB0LAorCQkJaV9BUENJMzIwMF9SZXNldCwKKwkJCWlfQVBDSTMyMDBfQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMjAwX1JlYWRBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMyMDBfSW5zbldyaXRlUmVsZWFzZUFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzIwMF9JbnNuQml0c19BbmFsb2dJbnB1dF9UZXN0LAorCQkJaV9BUENJMzIwMF9Db21tYW5kVGVzdEFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzIwMF9Db21tYW5kQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMjAwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbiwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTMyMDBfUmVhZERpZ2l0YWxJbnB1dCwKKwkJCWlfQVBDSTMyMDBfQ29uZmlnRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTMyMDBfV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMzIwMF9SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUENJXzMzMDAKKwkvL0JlZ2luIEpLIDIwLjEwLjIwMDQ6IEFQQ0ktMzMwMCBpbnRlZ3JhdGlvbgorCXsiYXBjaTMzMDAiLAorCQkJQVBDSTMyMDBfQk9BUkRfVkVORE9SX0lELAorCQkJMHgzMDA3LAorCQkJMTI4LAorCQkJMjU2LAorCQkJNCwKKwkJCTQsCisJCQlBRERJREFUQV9FRVBST00sCisJCQlBRERJREFUQV9TNTkyMCwKKwkJCTAsCisJCQk4LAorCQkJOCwKKwkJCTAsCisJCQkweDNmZmZmLAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpMzMwMF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTEwMDAwLAorCQkJMTAwMDAwLAorCQkJdl9BUENJMzIwMF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzMjAwX1Jlc2V0LAorCQkJaV9BUENJMzIwMF9Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMyMDBfUmVhZEFuYWxvZ0lucHV0LAorCQkJaV9BUENJMzIwMF9JbnNuV3JpdGVSZWxlYXNlQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMjAwX0luc25CaXRzX0FuYWxvZ0lucHV0X1Rlc3QsCisJCQlpX0FQQ0kzMjAwX0NvbW1hbmRUZXN0QW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzMjAwX0NvbW1hbmRBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTMyMDBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMzIwMF9SZWFkRGlnaXRhbElucHV0LAorCQkJaV9BUENJMzIwMF9Db25maWdEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJMzIwMF9Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzMjAwX1JlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTcxMAorCXsiYXBjaTE3MTAiLCBBUENJMTcxMF9CT0FSRF9WRU5ET1JfSUQsIEFQQ0kxNzEwX0JPQVJEX0RFVklDRV9JRCwKKwkJCTEyOCwKKwkJCTgsCisJCQkyNTYsCisJCQkwLAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCXZfQVBDSTE3MTBfSW50ZXJydXB0LAorCQkJaV9BUENJMTcxMF9SZXNldCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfMTZYWAorCXsiYXBjaTE2NDgiLAorCQkJMHgxNUI4LAorCQkJMHgxMDA5LAorCQkJMTI4LAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJNDgsCisJCQkmcmFuZ2VfYXBjaTE2eHhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJaV9BUENJMTZYWF9SZXNldCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kxNlhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kxNlhYX0luc25CaXRzUmVhZFRUTElPLAorCQkJaV9BUENJMTZYWF9JbnNuUmVhZFRUTElPQWxsUG9ydFZhbHVlLAorCQlpX0FQQ0kxNlhYX0luc25CaXRzV3JpdGVUVExJT30sCisKKwl7ImFwY2kxNjk2IiwKKwkJCTB4MTVCOCwKKwkJCTB4MTAwQSwKKwkJCTEyOCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTk2LAorCQkJJnJhbmdlX2FwY2kxNnh4X3R0bCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJTlVMTCwKKwkJCWlfQVBDSTE2WFhfUmVzZXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJMTZYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJMTZYWF9JbnNuQml0c1JlYWRUVExJTywKKwkJCWlfQVBDSTE2WFhfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZSwKKwkJaV9BUENJMTZYWF9JbnNuQml0c1dyaXRlVFRMSU99LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FQQ0lfM1hYWAorCXsiYXBjaTMwMDAtMTYiLAorCQkJMHgxNUI4LAorCQkJMHgzMDEwLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJMCwKKwkJCTQwOTUsCisJCQkwLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTEwMDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzAwMC04IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAwRiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQk4LAorCQkJNCwKKwkJCTgsCisJCQkwLAorCQkJNDA5NSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJMTAwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMDAwLTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDBFLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTQsCisJCQkyLAorCQkJNCwKKwkJCTAsCisJCQk0MDk1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMDYtMTYiLAorCQkJMHgxNUI4LAorCQkJMHgzMDEzLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMDYtOCIsCisJCQkweDE1QjgsCisJCQkweDMwMTQsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMDYtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMTUsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJNCwKKwkJCTIsCisJCQk0LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMTAtMTYiLAorCQkJMHgxNUI4LAorCQkJMHgzMDE2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJMCwKKwkJCTQwOTUsCisJCQkwLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJTlVMTCwKKwkJCTQsCisJCQk0LAorCQkJMSwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTUwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzAxMC04IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAxNywKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQk4LAorCQkJNCwKKwkJCTgsCisJCQkwLAorCQkJNDA5NSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMDEwLTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDE4LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTQsCisJCQkyLAorCQkJNCwKKwkJCTAsCisJCQk0MDk1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMTYtMTYiLAorCQkJMHgxNUI4LAorCQkJMHgzMDE5LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTE2LAorCQkJOCwKKwkJCTE2LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMTYtOCIsCisJCQkweDE1QjgsCisJCQkweDMwMUEsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMTYtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMUIsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJNCwKKwkJCTIsCisJCQk0LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMxMDAtMTYtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMUMsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJMTYsCisJCQk4LAorCQkJMTYsCisJCQk0LAorCQkJNDA5NSwKKwkJCTQwOTUsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQkmcmFuZ2VfYXBjaTNYWFhfYW8sCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlQW5hbG9nT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMTAwLTgtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMUQsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJNCwKKwkJCTQwOTUsCisJCQk0MDk1LAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FvLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJMTAwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZUFuYWxvZ091dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzEwNi0xNi00IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAxRSwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQkxNiwKKwkJCTgsCisJCQkxNiwKKwkJCTQsCisJCQk2NTUzNSwKKwkJCTQwOTUsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQkmcmFuZ2VfYXBjaTNYWFhfYW8sCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQkxMDAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlQW5hbG9nT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMTA2LTgtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMUYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJNCwKKwkJCTY1NTM1LAorCQkJNDA5NSwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCSZyYW5nZV9hcGNpM1hYWF9hbywKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTEwMDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMxMTAtMTYtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMjAsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJMTYsCisJCQk4LAorCQkJMTYsCisJCQk0LAorCQkJNDA5NSwKKwkJCTQwOTUsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQkmcmFuZ2VfYXBjaTNYWFhfYW8sCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMTEwLTgtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMjEsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJNCwKKwkJCTQwOTUsCisJCQk0MDk1LAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FvLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMjQsCisJCQkmcmFuZ2VfYXBjaTNYWFhfdHRsLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlQW5hbG9nT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorCisJeyJhcGNpMzExNi0xNi00IiwKKwkJCTB4MTVCOCwKKwkJCTB4MzAyMiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCTI1NiwKKwkJCUFERElEQVRBX05PX0VFUFJPTSwKKwkJCUFERElEQVRBXzkwNTQsCisJCQkxNiwKKwkJCTgsCisJCQkxNiwKKwkJCTQsCisJCQk2NTUzNSwKKwkJCTQwOTUsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQkmcmFuZ2VfYXBjaTNYWFhfYW8sCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkyNCwKKwkJCSZyYW5nZV9hcGNpM1hYWF90dGwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNUVExJTywKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRUVExJTywKKwkJaV9BUENJM1hYWF9JbnNuV3JpdGVUVExJT30sCisKKwl7ImFwY2kzMTE2LTgtNCIsCisJCQkweDE1QjgsCisJCQkweDMwMjMsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJOCwKKwkJCTQsCisJCQk4LAorCQkJNCwKKwkJCTY1NTM1LAorCQkJNDA5NSwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCSZyYW5nZV9hcGNpM1hYWF9hbywKKwkJCTQsCisJCQk0LAorCQkJMSwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTUwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZUFuYWxvZ091dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnSW5pdFRUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c1RUTElPLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZFRUTElPLAorCQlpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPfSwKKworCXsiYXBjaTMwMDMiLAorCQkJMHgxNUI4LAorCQkJMHgzMDBCLAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTAsCisJCQk0LAorCQkJNCwKKwkJCTAsCisJCQk2NTUzNSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTcsCisJCQkyNTAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorCisJeyJhcGNpMzAwMi0xNiIsCisJCQkweDE1QjgsCisJCQkweDMwMDIsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJMCwKKwkJCTE2LAorCQkJMTYsCisJCQkwLAorCQkJNjU1MzUsCisJCQkwLAorCQkJJnJhbmdlX2FwY2kzWFhYX2FpLAorCQkJTlVMTCwKKwkJCTQsCisJCQk0LAorCQkJMSwKKwkJCTAsCisJCQlOVUxMLAorCQkJMCwKKwkJCTAsCisJCQk2LAorCQkJNTAwMCwKKwkJCTAsCisJCQl2X0FQQ0kzWFhYX0ludGVycnVwdCwKKwkJCWlfQVBDSTNYWFhfUmVzZXQsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdBbmFsb2dJbnB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsT3V0cHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQlOVUxMfSwKKworCXsiYXBjaTMwMDItOCIsCisJCQkweDE1QjgsCisJCQkweDMwMDMsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJMCwKKwkJCTgsCisJCQk4LAorCQkJMCwKKwkJCTY1NTM1LAorCQkJMCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9haSwKKwkJCU5VTEwsCisJCQk0LAorCQkJNCwKKwkJCTEsCisJCQkwLAorCQkJTlVMTCwKKwkJCTAsCisJCQkwLAorCQkJNiwKKwkJCTUwMDAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkQW5hbG9nSW5wdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQsCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJTlVMTH0sCisKKwl7ImFwY2kzMDAyLTQiLAorCQkJMHgxNUI4LAorCQkJMHgzMDA0LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJMjU2LAorCQkJQURESURBVEFfTk9fRUVQUk9NLAorCQkJQURESURBVEFfOTA1NCwKKwkJCTAsCisJCQk0LAorCQkJNCwKKwkJCTAsCisJCQk2NTUzNSwKKwkJCTAsCisJCQkmcmFuZ2VfYXBjaTNYWFhfYWksCisJCQlOVUxMLAorCQkJNCwKKwkJCTQsCisJCQkxLAorCQkJMCwKKwkJCU5VTEwsCisJCQkwLAorCQkJMCwKKwkJCTYsCisJCQk1MDAwLAorCQkJMCwKKwkJCXZfQVBDSTNYWFhfSW50ZXJydXB0LAorCQkJaV9BUENJM1hYWF9SZXNldCwKKwkJCWlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZEFuYWxvZ0lucHV0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxJbnB1dCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbElucHV0LAorCQkJTlVMTCwKKwkJCWlfQVBDSTNYWFhfSW5zbldyaXRlRGlnaXRhbE91dHB1dCwKKwkJCWlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsT3V0cHV0LAorCQkJaV9BUENJM1hYWF9JbnNuUmVhZERpZ2l0YWxPdXRwdXQsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCU5VTEx9LAorCisJeyJhcGNpMzUwMCIsCisJCQkweDE1QjgsCisJCQkweDMwMjQsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQkyNTYsCisJCQlBRERJREFUQV9OT19FRVBST00sCisJCQlBRERJREFUQV85MDU0LAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJNCwKKwkJCTAsCisJCQk0MDk1LAorCQkJTlVMTCwKKwkJCSZyYW5nZV9hcGNpM1hYWF9hbywKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTI0LAorCQkJJnJhbmdlX2FwY2kzWFhYX3R0bCwKKwkJCTAsCisJCQkwLAorCQkJMCwKKwkJCTAsCisJCQkwLAorCQkJdl9BUENJM1hYWF9JbnRlcnJ1cHQsCisJCQlpX0FQQ0kzWFhYX1Jlc2V0LAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Xcml0ZUFuYWxvZ091dHB1dCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlOVUxMLAorCQkJTlVMTCwKKwkJCU5VTEwsCisJCQlpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8sCisJCQlpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8sCisJCWlfQVBDSTNYWFhfSW5zbldyaXRlVFRMSU99LAorI2VuZGlmCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihib2FyZHR5cGUpKQorCitzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYWRkaSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJhZGRpX2NvbW1vbiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6aV9BRERJX0F0dGFjaCwKKyAgICAgIGRldGFjaDppX0FERElfRGV0YWNoLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ucGNfRHJpdmVyTmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2YoYm9hcmR0eXBlKSwKK307CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FkZGksIGFkZGlfYXBjaV90YmwpOworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDpzdGF0aWMgaW50IGlfQURESV9BdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCXN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6RGV0ZWN0cyB0aGUgY2FyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAJCQkgQ29uZmlndXJlIHRoZSBkcml2ZXIgZm9yIGEgcGFydGljdWxhciBib2FyZC4gICAgICAgICAgICB8Cit8ICAJCQkgVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCB0aGUgaW5pdGlhbGl6YXRpb25zIGFuZCBtZW1vcnkgICB8Cit8CQkJIGFsbG9jYXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgZHJpdmVyLgkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOnN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIDAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworc3RhdGljIGludCBpX0FERElfQXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQsIHBhZ2VzLCBpLCBuX3N1YmRldmljZXM7CisJRFdPUkQgZHdfRHVtbXk7CisJcmVzb3VyY2Vfc2l6ZV90IGlvX2FkZHJbNV07CisJdW5zaWduZWQgaW50IGlycTsKKwlyZXNvdXJjZV9zaXplX3QgaW9iYXNlX2EsIGlvYmFzZV9tYWluLCBpb2Jhc2VfYWRkb24sIGlvYmFzZV9yZXNlcnZlZDsKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZCA9IE5VTEw7CisJdW5zaWduZWQgY2hhciBwY2lfYnVzLCBwY2lfc2xvdCwgcGNpX2Z1bmM7CisJaW50IGlfRG1hID0gMDsKKwlzdGF0aWMgY2hhciBjX0lkZW50aWZpZXJbMTUwXTsKKworCXNwcmludGYoY19JZGVudGlmaWVyLCAiQWRkaS1EYXRhIEdtYkggQ29tZWRpICVzIiwKKwkJdGhpc19ib2FyZC0+cGNfRHJpdmVyTmFtZSk7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YoYWRkaV9wcml2YXRlKSkpIDwgMCkgeworCSAgCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmICghcGNpX2xpc3RfYnVpbGRlZCkgeworCQl2X3BjaV9jYXJkX2xpc3RfaW5pdCh0aGlzX2JvYXJkLT5pX1ZlbmRvcklkLCAxKTsJLy8xIGZvciBkaXNwbGF5aW5nIHRoZSBsaXN0Li4KKwkJcGNpX2xpc3RfYnVpbGRlZCA9IDE7CisJfQorCS8vcnRfcHJpbnRrKCJjb21lZGklZDogYWRkaV9jb21tb246IGJvYXJkPSVzIixkZXYtPm1pbm9yLHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUpOworCisJaWYgKCh0aGlzX2JvYXJkLT5pX0RtYSkgJiYgKGl0LT5vcHRpb25zWzJdID09IDApKSB7CisJCWlfRG1hID0gMTsKKwl9CisKKwlpZiAoKGNhcmQgPSBwdHJfc2VsZWN0X2FuZF9hbGxvY19wY2lfY2FyZCh0aGlzX2JvYXJkLT5pX1ZlbmRvcklkLAorCQkJCXRoaXNfYm9hcmQtPmlfRGV2aWNlSWQsCisJCQkJaXQtPm9wdGlvbnNbMF0sCisJCQkJaXQtPm9wdGlvbnNbMV0sIGlfRG1hKSkgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2cHJpdi0+YWxsb2NhdGVkID0gMTsKKworCWlmICgoaV9wY2lfY2FyZF9kYXRhKGNhcmQsICZwY2lfYnVzLCAmcGNpX3Nsb3QsICZwY2lfZnVuYywgJmlvX2FkZHJbMF0sCisJCQkJJmlycSkpIDwgMCkgeworCQlpX3BjaV9jYXJkX2ZyZWUoY2FyZCk7CisJCXByaW50aygiIC0gQ2FuJ3QgZ2V0IEFNQ0MgZGF0YSFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpb2Jhc2VfYSA9IGlvX2FkZHJbMF07CisJaW9iYXNlX21haW4gPSBpb19hZGRyWzFdOworCWlvYmFzZV9hZGRvbiA9IGlvX2FkZHJbMl07CisJaW9iYXNlX3Jlc2VydmVkID0gaW9fYWRkclszXTsKKwlwcmludGsoIlxuQnVzICVkOiBTbG90ICVkOiBGdW5jdCVkXG5CYXNlMDogMHglOGxseFxuQmFzZTE6IDB4JThsbHhcbkJhc2UyOiAweCU4bGx4XG5CYXNlMzogMHglOGxseFxuIiwgcGNpX2J1cywgcGNpX3Nsb3QsIHBjaV9mdW5jLCAodW5zaWduZWQgbG9uZyBsb25nKWlvX2FkZHJbMF0sICh1bnNpZ25lZCBsb25nIGxvbmcpaW9fYWRkclsxXSwgKHVuc2lnbmVkIGxvbmcgbG9uZylpb19hZGRyWzJdLCAodW5zaWduZWQgbG9uZyBsb25nKWlvX2FkZHJbM10pOworCisJaWYgKCh0aGlzX2JvYXJkLT5wY19FZXByb21DaGlwID09IE5VTEwpCisJCXx8IChzdHJjbXAodGhpc19ib2FyZC0+cGNfRWVwcm9tQ2hpcCwgQURESURBVEFfOTA1NCkgIT0gMCkpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIG1vcmUgdGhhdCAxIGFkZHJlc3MgdXNlZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKHRoaXNfYm9hcmQtPmlfSW9yYW5nZUJhc2UxICE9IDApIHsKKwkJCWRldi0+aW9iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9iYXNlX21haW47CS8vIERBUSBiYXNlIGFkZHJlc3MuLi4KKwkJfSBlbHNlIHsKKwkJCWRldi0+aW9iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9iYXNlX2E7CS8vIERBUSBiYXNlIGFkZHJlc3MuLi4KKwkJfQorCisJCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWU7CisJCWRldnByaXYtPmFtY2MgPSBjYXJkOworCQlkZXZwcml2LT5pb2Jhc2UgPSAoSU5UKSBkZXYtPmlvYmFzZTsKKwkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjID0gKElOVCkgaW9iYXNlX2E7CS8vQU1DQyBiYXNlIGFkZHJlc3MuLi4KKwkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiA9IChJTlQpIGlvYmFzZV9hZGRvbjsJLy9BREQgT04gYmFzZSBhZGRyZXNzLi4uLgorCQlkZXZwcml2LT5pX0lvYmFzZVJlc2VydmVkID0gKElOVCkgaW9iYXNlX3Jlc2VydmVkOworCQlkZXZwcml2LT5wc19Cb2FyZEluZm8gPSB0aGlzX2JvYXJkOworCX0gZWxzZSB7CisJCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWU7CisJCWRldi0+aW9iYXNlID0gKHVuc2lnbmVkIGxvbmcpaW9fYWRkclsyXTsKKwkJZGV2cHJpdi0+YW1jYyA9IGNhcmQ7CisJCWRldnByaXYtPmlvYmFzZSA9IChJTlQpIGlvX2FkZHJbMl07CisJCWRldnByaXYtPnBzX0JvYXJkSW5mbyA9IHRoaXNfYm9hcmQ7CisJCWRldnByaXYtPmlfSW9iYXNlUmVzZXJ2ZWQgPSAoSU5UKSBpb19hZGRyWzNdOworCQlwcmludGsoIlxuaW9yZW1hcCBiZWdpbiIpOworCQlkZXZwcml2LT5kd19BaUJhc2UgPQorCQkJKFVMT05HX1BUUikgaW9yZW1hcChpb19hZGRyWzNdLAorCQkJdGhpc19ib2FyZC0+aV9Jb3JhbmdlQmFzZTMpOworCQlwcmludGsoIlxuaW9yZW1hcCBlbmQiKTsKKwl9CisKKwkvLyMjCisKKwlpZiAoaXJxID4gMCkgeworCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgdl9BRERJX0ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkJY19JZGVudGlmaWVyLCBkZXYpIDwgMCkgeworCQkJcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJXUsIERJU0FCTElORyBJVCIsCisJCQkJaXJxKTsKKwkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KKwkJfSBlbHNlIHsKKwkJCXJ0X3ByaW50aygiXG5pcnE9JXUiLCBpcnEpOworCQl9CisJfSBlbHNlIHsKKwkJcnRfcHJpbnRrKCIsIElSUSBkaXNhYmxlZCIpOworCX0KKworCXByaW50aygiXG5PcHRpb24gJWQgJWQgJWRcbiIsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSwKKwkJaXQtPm9wdGlvbnNbMl0pOworCWRldi0+aXJxID0gaXJxOworCisJLy8gUmVhZCBlZXBlb20gYW5kIGZpbGwgYm9hcmR0eXBlIFN0cnVjdHVyZQorCisJaWYgKHRoaXNfYm9hcmQtPmlfUENJRWVwcm9tKSB7CisJCXByaW50aygiXG5QQ0kgRWVwcm9tIHVzZWQiKTsKKwkJaWYgKCEoc3RyY21wKHRoaXNfYm9hcmQtPnBjX0VlcHJvbUNoaXAsICJTNTkyMCIpKSkgeworCQkJLy8gU2V0IDMgd2FpdCBzdGFpdAorCQkJaWYgKCEoc3RyY21wKHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUsICJhcGNpMDM1IikpKSB7CisJCQkJb3V0bCgweDgwODA4MDgyLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDYwKTsKKwkJCX0gZWxzZSB7CisJCQkJb3V0bCgweDgzODM4MzgzLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDYwKTsKKwkJCX0KKwkJCS8vIEVuYWJsZSB0aGUgaW50ZXJydXB0IGZvciB0aGUgY29udHJvbGVyCisJCQlkd19EdW1teSA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDM4KTsKKwkJCW91dGwoZHdfRHVtbXkgfCAweDIwMDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCQkJcHJpbnRrKCJcbkVuYWJsZSB0aGUgaW50ZXJydXB0IGZvciB0aGUgY29udHJvbGVyIik7CisJCX0KKwkJcHJpbnRrKCJcblJlYWQgRWVwcm9tIik7CisJCWlfRWVwcm9tUmVhZE1haW5IZWFkZXIoaW9fYWRkclswXSwgdGhpc19ib2FyZC0+cGNfRWVwcm9tQ2hpcCwKKwkJCWRldik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCJcblBDSSBFZXByb20gdW51c2VkIik7CisJfQorCisJaWYgKGl0LT5vcHRpb25zWzJdID4gMCkgeworCQlkZXZwcml2LT51c19Vc2VEbWEgPSBBRERJX0RJU0FCTEU7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+dXNfVXNlRG1hID0gQURESV9FTkFCTEU7CisJfQorCisJaWYgKHRoaXNfYm9hcmQtPmlfRG1hKSB7CisJCXByaW50aygiXG5ETUEgdXNlZCIpOworCQlpZiAoZGV2cHJpdi0+dXNfVXNlRG1hID09IEFERElfRU5BQkxFKSB7CisJCQkvLyBhbGxvYyBETUEgYnVmZmVycworCQkJZGV2cHJpdi0+Yl9EbWFEb3VibGVCdWZmZXIgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJCWZvciAocGFnZXMgPSA0OyBwYWdlcyA+PSAwOyBwYWdlcy0tKSB7CisJCQkJCWlmICgoZGV2cHJpdi0+dWxfRG1hQnVmZmVyVmlydHVhbFtpXSA9CisJCQkJCQkJKHZvaWQgKikKKwkJCQkJCQlfX2dldF9mcmVlX3BhZ2VzCisJCQkJCQkJKEdGUF9LRVJORUwsIHBhZ2VzKSkpIHsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChkZXZwcml2LT51bF9EbWFCdWZmZXJWaXJ0dWFsW2ldKSB7CisJCQkJCWRldnByaXYtPnVpX0RtYUJ1ZmZlclBhZ2VzW2ldID0gcGFnZXM7CisJCQkJCWRldnByaXYtPnVpX0RtYUJ1ZmZlclNpemVbaV0gPQorCQkJCQkJUEFHRV9TSVpFICogcGFnZXM7CisJCQkJCWRldnByaXYtPnVpX0RtYUJ1ZmZlclNhbXBsZXNbaV0gPQorCQkJCQkJZGV2cHJpdi0+CisJCQkJCQl1aV9EbWFCdWZmZXJTaXplW2ldID4+IDE7CisJCQkJCWRldnByaXYtPnVsX0RtYUJ1ZmZlckh3W2ldID0KKwkJCQkJCXZpcnRfdG9fYnVzKCh2b2lkICopZGV2cHJpdi0+CisJCQkJCQl1bF9EbWFCdWZmZXJWaXJ0dWFsW2ldKTsKKwkJCQl9CisJCQl9CisJCQlpZiAoIWRldnByaXYtPnVsX0RtYUJ1ZmZlclZpcnR1YWxbMF0pIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCIsIENhbid0IGFsbG9jYXRlIERNQSBidWZmZXIsIERNQSBkaXNhYmxlZCEiKTsKKwkJCQlkZXZwcml2LT51c19Vc2VEbWEgPSBBRERJX0RJU0FCTEU7CisJCQl9CisKKwkJCWlmIChkZXZwcml2LT51bF9EbWFCdWZmZXJWaXJ0dWFsWzFdKSB7CisJCQkJZGV2cHJpdi0+Yl9EbWFEb3VibGVCdWZmZXIgPSAxOworCQkJfQorCQl9CisKKwkJaWYgKChkZXZwcml2LT51c19Vc2VEbWEgPT0gQURESV9FTkFCTEUpKSB7CisJCQlydF9wcmludGsoIlxuRE1BIEVOQUJMRURcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCJcbkRNQSBESVNBQkxFRFxuIik7CisJCX0KKwl9CisKKwlpZiAoIXN0cmNtcCh0aGlzX2JvYXJkLT5wY19Ecml2ZXJOYW1lLCAiYXBjaTE3MTAiKSkgeworI2lmZGVmIENPTkZJR19BUENJXzE3MTAKKwkJaV9BRERJX0F0dGFjaFBDSTE3MTAoZGV2KTsKKworCQkvLyBzYXZlIGJhc2UgYWRkcmVzcworCQlkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyA9IGlvX2FkZHJbMl07CisjZW5kaWYKKwl9IGVsc2UgeworCQkvL1VwZGF0ZS0wLjcuNTctPjAuNy42OGRldi0+bl9zdWJkZXZpY2VzID0gNzsKKwkJbl9zdWJkZXZpY2VzID0gNzsKKwkJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZpY2VzKSkgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQkvLyBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBBSSBTdWJkZXZpY2UgU3RydWN0dXJlcworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkJaWYgKCh0aGlzX2JvYXJkLT5pX05ickFpQ2hhbm5lbCkKKwkJCXx8ICh0aGlzX2JvYXJkLT5pX05ickFpQ2hhbm5lbERpZmYpKSB7CisJCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJCXMtPnN1YmRldl9mbGFncyA9CisJCQkJU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0NPTU1PTiB8IFNERl9HUk9VTkQKKwkJCQl8IFNERl9ESUZGOworCQkJaWYgKHRoaXNfYm9hcmQtPmlfTmJyQWlDaGFubmVsKSB7CisJCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWw7CisJCQkJZGV2cHJpdi0+Yl9TaW5nZWxEaWZmID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWxEaWZmOworCQkJCWRldnByaXYtPmJfU2luZ2VsRGlmZiA9IDE7CisJCQl9CisJCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+aV9BaU1heGRhdGE7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5pX0FpQ2hhbm5lbExpc3Q7CisJCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnByX0FpUmFuZ2VsaXN0OworCisJCQkvKiBTZXQgdGhlIGluaXRpYWxpc2F0aW9uIGZsYWcgKi8KKwkJCWRldnByaXYtPmJfQWlJbml0aWFsaXNhdGlvbiA9IDE7CisKKwkJCXMtPmluc25fY29uZmlnID0KKwkJCQl0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25Db25maWdBbmFsb2dJbnB1dDsKKwkJCXMtPmluc25fcmVhZCA9IHRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zblJlYWRBbmFsb2dJbnB1dDsKKwkJCXMtPmluc25fd3JpdGUgPQorCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbldyaXRlQW5hbG9nSW5wdXQ7CisJCQlzLT5pbnNuX2JpdHMgPSB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25CaXRzQW5hbG9nSW5wdXQ7CisJCQlzLT5kb19jbWR0ZXN0ID0KKwkJCQl0aGlzX2JvYXJkLT5pX2h3ZHJ2X0NvbW1hbmRUZXN0QW5hbG9nSW5wdXQ7CisJCQlzLT5kb19jbWQgPSB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0NvbW1hbmRBbmFsb2dJbnB1dDsKKwkJCXMtPmNhbmNlbCA9IHRoaXNfYm9hcmQtPmlfaHdkcnZfQ2FuY2VsQW5hbG9nSW5wdXQ7CisKKwkJfSBlbHNlIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCX0KKworCQkvLyBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBBTyBTdWJkZXZpY2UgU3RydWN0dXJlcworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkJaWYgKHRoaXNfYm9hcmQtPmlfTmJyQW9DaGFubmVsKSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJCVNERl9XUklURUFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTiB8CisJCQkJU0RGX1JUOworCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+aV9OYnJBb0NoYW5uZWw7CisJCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+aV9Bb01heGRhdGE7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5pX05ickFvQ2hhbm5lbDsKKwkJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cHJfQW9SYW5nZWxpc3Q7CisJCQlzLT5pbnNuX2NvbmZpZyA9CisJCQkJdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQ29uZmlnQW5hbG9nT3V0cHV0OworCQkJcy0+aW5zbl93cml0ZSA9CisJCQkJdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuV3JpdGVBbmFsb2dPdXRwdXQ7CisJCX0gZWxzZSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQl9CisJCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIERJIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCQlpZiAodGhpc19ib2FyZC0+aV9OYnJEaUNoYW5uZWwpIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJCXMtPnN1YmRldl9mbGFncyA9CisJCQkJU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5pX05ickRpQ2hhbm5lbDsKKwkJCXMtPm1heGRhdGEgPSAxOworCQkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+aV9OYnJEaUNoYW5uZWw7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQkJcy0+aW9fYml0cyA9IDA7CS8qIGFsbCBiaXRzIGlucHV0ICovCisJCQlzLT5pbnNuX2NvbmZpZyA9CisJCQkJdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQ29uZmlnRGlnaXRhbElucHV0OworCQkJcy0+aW5zbl9yZWFkID0gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuUmVhZERpZ2l0YWxJbnB1dDsKKwkJCXMtPmluc25fd3JpdGUgPQorCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbldyaXRlRGlnaXRhbElucHV0OworCQkJcy0+aW5zbl9iaXRzID0gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQml0c0RpZ2l0YWxJbnB1dDsKKwkJfSBlbHNlIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCX0KKwkJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgRE8gU3ViZGV2aWNlIFN0cnVjdHVyZXMKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJCWlmICh0aGlzX2JvYXJkLT5pX05ickRvQ2hhbm5lbCkgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCQlTREZfUkVBREFCTEUgfCBTREZfV1JJVEVBQkxFIHwgU0RGX1JUIHwKKwkJCQlTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPmlfTmJyRG9DaGFubmVsOworCQkJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmlfRG9NYXhkYXRhOworCQkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+aV9OYnJEb0NoYW5uZWw7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQkJcy0+aW9fYml0cyA9IDB4ZjsJLyogYWxsIGJpdHMgb3V0cHV0ICovCisKKwkJCXMtPmluc25fY29uZmlnID0gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQ29uZmlnRGlnaXRhbE91dHB1dDsJLy9mb3IgZGlnaXRhbCBvdXRwdXQgbWVtb3J5Li4KKwkJCXMtPmluc25fd3JpdGUgPQorCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbldyaXRlRGlnaXRhbE91dHB1dDsKKwkJCXMtPmluc25fYml0cyA9CisJCQkJdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQml0c0RpZ2l0YWxPdXRwdXQ7CisJCQlzLT5pbnNuX3JlYWQgPQorCQkJCXRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zblJlYWREaWdpdGFsT3V0cHV0OworCQl9IGVsc2UgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwkJfQorCisJCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIFRpbWVyIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyA0OworCQlpZiAodGhpc19ib2FyZC0+aV9UaW1lcikgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RJTUVSOworCQkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8CisJCQkJU0RGX0NPTU1PTjsKKwkJCXMtPm5fY2hhbiA9IDE7CisJCQlzLT5tYXhkYXRhID0gMDsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJCQlzLT5pbnNuX3dyaXRlID0gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuV3JpdGVUaW1lcjsKKwkJCXMtPmluc25fcmVhZCA9IHRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zblJlYWRUaW1lcjsKKwkJCXMtPmluc25fY29uZmlnID0gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQ29uZmlnVGltZXI7CisJCQlzLT5pbnNuX2JpdHMgPSB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25CaXRzVGltZXI7CisJCX0gZWxzZSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQl9CisKKwkJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgVFRMCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyA1OworCQlpZiAodGhpc19ib2FyZC0+aV9OYnJUVExDaGFubmVsKSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVFRMSU87CisJCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJCVNERl9XUklURUFCTEUgfCBTREZfUkVBREFCTEUgfCBTREZfUlQgfAorCQkJCVNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+aV9OYnJUVExDaGFubmVsOworCQkJcy0+bWF4ZGF0YSA9IDE7CisJCQlzLT5pb19iaXRzID0gMDsJLyogYWxsIGJpdHMgaW5wdXQgKi8KKwkJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPmlfTmJyVFRMQ2hhbm5lbDsKKwkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCQlzLT5pbnNuX2NvbmZpZyA9IHRoaXNfYm9hcmQtPmlfaHdkcl9Db25maWdJbml0VFRMSU87CisJCQlzLT5pbnNuX2JpdHMgPSB0aGlzX2JvYXJkLT5pX2h3ZHJfUmVhZFRUTElPQml0czsKKwkJCXMtPmluc25fcmVhZCA9IHRoaXNfYm9hcmQtPmlfaHdkcl9SZWFkVFRMSU9BbGxQb3J0VmFsdWU7CisJCQlzLT5pbnNuX3dyaXRlID0gdGhpc19ib2FyZC0+aV9od2RyX1dyaXRlVFRMSU9DaGxPbk9mZjsKKwkJfSBlbHNlIHsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCX0KKworCQkvKiBFRVBST00gKi8KKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDY7CisJCWlmICh0aGlzX2JvYXJkLT5pX1BDSUVlcHJvbSkgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX01FTU9SWTsKKwkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9JTlRFUk5BTDsKKwkJCXMtPm5fY2hhbiA9IDI1NjsKKwkJCXMtPm1heGRhdGEgPSAweGZmZmY7CisJCQlzLT5pbnNuX3JlYWQgPSBpX0FERElEQVRBX0luc25SZWFkRWVwcm9tOworCQl9IGVsc2UgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwkJfQorCX0KKworCXByaW50aygiXG5pX0FERElfQXR0YWNoIGVuZFxuIik7CisJaV9BRERJX1Jlc2V0KGRldik7CisJZGV2cHJpdi0+Yl9WYWxpZERyaXZlciA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOiBzdGF0aWMgaW50IGlfQURESV9EZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IERlYWxsb2NhdGVzIHJlc291cmNlcyBvZiB0aGUgYWRkaV9jb21tb24gZHJpdmVyICAgICAgICB8Cit8CQkJICBGcmVlIHRoZSBETUEgYnVmZmVycywgdW5yZWdpc3RlciBpcnEuCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitzdGF0aWMgaW50IGlfQURESV9EZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKwlpZiAoZGV2LT5wcml2YXRlKSB7CisJCWlmIChkZXZwcml2LT5iX1ZhbGlkRHJpdmVyKSB7CisJCQlpX0FERElfUmVzZXQoZGV2KTsKKwkJfQorCisJCWlmIChkZXYtPmlycSkgeworCQkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCQl9CisKKwkJaWYgKChkZXZwcml2LT5wc19Cb2FyZEluZm8tPnBjX0VlcHJvbUNoaXAgPT0gTlVMTCkKKwkJCXx8IChzdHJjbXAoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5wY19FZXByb21DaGlwLAorCQkJCQlBRERJREFUQV85MDU0KSAhPSAwKSkgeworCQkJaWYgKGRldnByaXYtPmFsbG9jYXRlZCkgeworCQkJCWlfcGNpX2NhcmRfZnJlZShkZXZwcml2LT5hbWNjKTsKKwkJCX0KKworCQkJaWYgKGRldnByaXYtPnVsX0RtYUJ1ZmZlclZpcnR1YWxbMF0pIHsKKwkJCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWRldnByaXYtPgorCQkJCQl1bF9EbWFCdWZmZXJWaXJ0dWFsWzBdLAorCQkJCQlkZXZwcml2LT51aV9EbWFCdWZmZXJQYWdlc1swXSk7CisJCQl9CisKKwkJCWlmIChkZXZwcml2LT51bF9EbWFCdWZmZXJWaXJ0dWFsWzFdKSB7CisJCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylkZXZwcml2LT4KKwkJCQkJdWxfRG1hQnVmZmVyVmlydHVhbFsxXSwKKwkJCQkJZGV2cHJpdi0+dWlfRG1hQnVmZmVyUGFnZXNbMV0pOworCQkJfQorCQl9IGVsc2UgeworCQkJaW91bm1hcCgodm9pZCAqKWRldnByaXYtPmR3X0FpQmFzZSk7CisKKwkJCWlmIChkZXZwcml2LT5hbGxvY2F0ZWQpIHsKKwkJCQlpX3BjaV9jYXJkX2ZyZWUoZGV2cHJpdi0+YW1jYyk7CisJCQl9CisJCX0KKworCQlpZiAocGNpX2xpc3RfYnVpbGRlZCkgeworCQkJLy92X3BjaV9jYXJkX2xpc3RfY2xlYW51cChQQ0lfVkVORE9SX0lEX0FNQ0MpOworCQkJdl9wY2lfY2FyZF9saXN0X2NsZWFudXAodGhpc19ib2FyZC0+aV9WZW5kb3JJZCk7CisJCQlwY2lfbGlzdF9idWlsZGVkID0gMDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogc3RhdGljIGludCBpX0FERElfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRGlzYWJsZXMgYWxsIGludGVycnVwdHMsIFJlc2V0cyBkaWdpdGFsIG91dHB1dCB0byBsb3csIHwKK3wJCQkJU2V0IGFsbCBhbmFsb2cgb3V0cHV0IHRvIGxvdwkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworc3RhdGljIGludCBpX0FERElfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKwl0aGlzX2JvYXJkLT5pX2h3ZHJ2X1Jlc2V0KGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8vIEludGVycnVwdCBmdW5jdGlvbgorLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8c3RhdGljIHZvaWQgdl9BRERJX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkICBQVF9SRUdTX0FSRykgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlZ2lzdGVyZCBpbnRlcnJ1cHQgcm91dGluZQkJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IAlpbnQgaXJxCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworc3RhdGljIGlycXJldHVybl90IHZfQURESV9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwl0aGlzX2JvYXJkLT52X2h3ZHJ2X0ludGVycnVwdChpcnEsIGQpOworCXJldHVybiBJUlFfUkVUVkFMKDEpOworfQorCisvLyBFRVBST00gUmVhZCBGdW5jdGlvbgorLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8SU5UIGlfQURESURBVEFfSW5zblJlYWRFZXByb20oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCAyNTYgd29yZHMgZnJvbSBFRVBST00gICAgICAgICAgCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitzdGF0aWMgaW50IGlfQURESURBVEFfSW5zblJlYWRFZXByb20oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVdPUkQgd19EYXRhOworCVdPUkQgd19BZGRyZXNzOworCXdfQWRkcmVzcyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBhZGRyZXNzIHRvIGJlIHJlYWQgYXMgMCwxLDIsMy4uLjI1NQorCisJd19EYXRhID0gd19FZXByb21SZWFkV29yZChkZXZwcml2LT5pX0lvYmFzZUFtY2MsCisJCXRoaXNfYm9hcmQtPnBjX0VlcHJvbUNoaXAsIDB4MTAwICsgKDIgKiB3X0FkZHJlc3MpKTsKKwlkYXRhWzBdID0gd19EYXRhOworCS8vbXVsdGlwbGllZCBieSAyIGJjb3ppbnB1dCB3aWxsIGJlIGxpa2UgMCwxLDIuLi4yNTUKKwlyZXR1cm4gaW5zbi0+bjsKKworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZGY1YzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmgKQEAgLTAsMCArMSw0NjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlICIuLi8uLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlICJhZGRpX2FtY2NfczU5MzMuaCIKKworI2RlZmluZSBFUlJPUgktMQorI2RlZmluZSBTVUNDRVNTCTEKKworLyogdmFyaWFibGUgdHlwZSBkZWZpbml0aW9uICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQllURSwgKlBCWVRFOwordHlwZWRlZiBzaG9ydCBTSE9SVCwgKlBTSE9SVDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVVNIT1JULCAqUFVTSE9SVDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgV09SRCwgKlBXT1JEOwordHlwZWRlZiBpbnQgSU5ULCAqUElOVDs7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBVSU5ULCAqUFVJTlQ7Cit0eXBlZGVmIGludCBMT05HLCAqUExPTkc7CQkvKiAzMi1iaXQgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IFVMT05HLCAqUFVMT05HOwkvKiAzMi1iaXQgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IERXT1JELCAqUERXT1JEOwkvKiAzMi1iaXQgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBVTE9OR19QVFI7CisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKlBDUkFOR0U7CisKKyNkZWZpbmUgTE9CWVRFKFcpCShCWVRFKSgoVykgJiAweEZGKQorI2RlZmluZSBISUJZVEUoVykJKEJZVEUpKCgoVykgPj4gOCkgJiAweEZGKQorI2RlZmluZSBNQUtFV09SRChILCBMKQkoVVNIT1JUKSgoTCkgfCAoKEgpIDw8IDgpKQorI2RlZmluZSBMT1dPUkQoVykJKFVTSE9SVCkoKFcpICYgMHhGRkZGKQorI2RlZmluZSBISVdPUkQoVykJKFVTSE9SVCkoKChXKSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lIE1BS0VEV09SRChILCBMKQkoVUlOVCkoKEwpIHwgKChIKSA8PCAxNikpCisKKyNkZWZpbmUgQURESV9FTkFCTEUJCTEKKyNkZWZpbmUgQURESV9ESVNBQkxFCQkwCisjZGVmaW5lIEFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUCTEKKworI2RlZmluZSBBRERJREFUQV9FRVBST00JCTEKKyNkZWZpbmUgQURESURBVEFfTk9fRUVQUk9NCTAKKyNkZWZpbmUgQURESURBVEFfOTNDNzYJCSI5M0M3NiIKKyNkZWZpbmUgQURESURBVEFfUzU5MjAJCSJTNTkyMCIKKyNkZWZpbmUgQURESURBVEFfUzU5MzMJCSJTNTkzMyIKKyNkZWZpbmUgQURESURBVEFfOTA1NAkJIjkwNTQiCisKKy8qIEFERElEQVRBIEVuYWJsZSBEaXNhYmxlICovCisjZGVmaW5lIEFERElEQVRBX0VOQUJMRQkJMQorI2RlZmluZSBBRERJREFUQV9ESVNBQkxFCTAKKworLyogU3RydWN0dXJlcyAqLworCisvKiBzdHJ1Y3R1cmUgZm9yIHRoZSBib2FyZHR5cGUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyICpwY19Ecml2ZXJOYW1lOwkvLyBkcml2ZXIgbmFtZQorCUlOVCBpX1ZlbmRvcklkOwkJLy9QQ0kgdmVuZG9yIGEgZGV2aWNlIElEIG9mIGNhcmQKKwlJTlQgaV9EZXZpY2VJZDsKKwlJTlQgaV9Jb3JhbmdlQmFzZTA7CisJSU5UIGlfSW9yYW5nZUJhc2UxOworCUlOVCBpX0lvcmFuZ2VCYXNlMjsJLy8gIGJhc2UgMiByYW5nZQorCUlOVCBpX0lvcmFuZ2VCYXNlMzsJLy8gIGJhc2UgMyByYW5nZQorCUlOVCBpX1BDSUVlcHJvbTsJLy8gZWVwcm9tIHByZXNlbnQgb3Igbm90CisJY2hhciAqcGNfRWVwcm9tQ2hpcDsJLy8gdHlwZSBvZiBjaGlwCisJSU5UIGlfTmJyQWlDaGFubmVsOwkvLyBudW0gb2YgQS9EIGNoYW5zCisJSU5UIGlfTmJyQWlDaGFubmVsRGlmZjsJLy8gbnVtIG9mIEEvRCBjaGFucyBpbiBkaWZmIG1vZGUKKwlJTlQgaV9BaUNoYW5uZWxMaXN0OwkvLyBsZW4gb2YgY2hhbmxpc3QKKwlJTlQgaV9OYnJBb0NoYW5uZWw7CS8vIG51bSBvZiBEL0EgY2hhbnMKKwlJTlQgaV9BaU1heGRhdGE7CS8vIHJlc29sdXRpb24gb2YgQS9ECisJSU5UIGlfQW9NYXhkYXRhOwkvLyByZXNvbHV0aW9uIG9mIEQvQQorCVBDUkFOR0UgcHJfQWlSYW5nZWxpc3Q7CS8vIHJhbmdlbGlzdCBmb3IgQS9ECisJUENSQU5HRSBwcl9Bb1JhbmdlbGlzdDsJLy8gcmFuZ2VsaXN0IGZvciBEL0EKKworCUlOVCBpX05ickRpQ2hhbm5lbDsJLy8gTnVtYmVyIG9mIERJIGNoYW5uZWxzCisJSU5UIGlfTmJyRG9DaGFubmVsOwkvLyBOdW1iZXIgb2YgRE8gY2hhbm5lbHMKKwlJTlQgaV9Eb01heGRhdGE7CS8vIGRhdGEgdG8gc2V0IGFsbCBjaGFuZWxzIGhpZ2gKKworCUlOVCBpX05iclRUTENoYW5uZWw7CS8vIE51bWJlciBvZiBUVEwgY2hhbm5lbHMKKwlQQ1JBTkdFIHByX1RUTFJhbmdlbGlzdDsJLy8gcmFuZ2VsaXN0IGZvciBUVEwKKworCUlOVCBpX0RtYTsJCS8vIGRtYSBwcmVzZW50IG9yIG5vdAorCUlOVCBpX1RpbWVyOwkJLy8gICB0aW1lciBzdWJkZXZpY2UgcHJlc2VudCBvciBub3QKKwlCWVRFIGJfQXZhaWxhYmxlQ29udmVydFVuaXQ7CisJVUlOVCB1aV9NaW5BY3F1aXNpdGlvbnRpbWVOczsJLy8gTWluaW11bSBBY3F1aXNpdGlvbiBpbiBOYW5vIHNlY3MKKwlVSU5UIHVpX01pbkRlbGF5dGltZU5zOwkvLyBNaW5pbXVtIERlbGF5IGluIE5hbm8gc2VjcworCisJLyogaW50ZXJydXB0IGFuZCByZXNldCAqLworCXZvaWQgKCp2X2h3ZHJ2X0ludGVycnVwdCkoaW50IGlycSwgdm9pZCAqZCk7CisJaW50ICgqaV9od2Rydl9SZXNldCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisKKwkvKiBTdWJkZXZpY2UgZnVuY3Rpb25zICovCisKKwkvKiBBTkFMT0cgSU5QVVQgKi8KKwlpbnQgKCppX2h3ZHJ2X0luc25Db25maWdBbmFsb2dJbnB1dCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25SZWFkQW5hbG9nSW5wdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9JbnNuV3JpdGVBbmFsb2dJbnB1dCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25CaXRzQW5hbG9nSW5wdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9Db21tYW5kVGVzdEFuYWxvZ0lucHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CisJaW50ICgqaV9od2Rydl9Db21tYW5kQW5hbG9nSW5wdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOworCWludCAoKmlfaHdkcnZfQ2FuY2VsQW5hbG9nSW5wdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CisKKwkvKiBBbmFsb2cgT3V0cHV0ICovCisJaW50ICgqaV9od2Rydl9JbnNuQ29uZmlnQW5hbG9nT3V0cHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zbldyaXRlQW5hbG9nT3V0cHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zbkJpdHNBbmFsb2dPdXRwdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKwkvKiBEaWdpdGFsIElucHV0ICovCisJaW50ICgqaV9od2Rydl9JbnNuQ29uZmlnRGlnaXRhbElucHV0KSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25SZWFkRGlnaXRhbElucHV0KSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25Xcml0ZURpZ2l0YWxJbnB1dCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9JbnNuQml0c0RpZ2l0YWxJbnB1dCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKwkvKiBEaWdpdGFsIE91dHB1dCAqLworCWludCAoKmlfaHdkcnZfSW5zbkNvbmZpZ0RpZ2l0YWxPdXRwdXQpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisJaW50ICgqaV9od2Rydl9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zbkJpdHNEaWdpdGFsT3V0cHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zblJlYWREaWdpdGFsT3V0cHV0KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisJLyogVElNRVIgKi8KKwlpbnQgKCppX2h3ZHJ2X0luc25Db25maWdUaW1lcikoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25Xcml0ZVRpbWVyKShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJ2X0luc25SZWFkVGltZXIpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcnZfSW5zbkJpdHNUaW1lcikoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKwkvKiBUVEwgSU8gKi8KKwlpbnQgKCppX2h3ZHJfQ29uZmlnSW5pdFRUTElPKShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJfUmVhZFRUTElPQml0cykoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKwlpbnQgKCppX2h3ZHJfUmVhZFRUTElPQWxsUG9ydFZhbHVlKShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworCWludCAoKmlfaHdkcl9Xcml0ZVRUTElPQ2hsT25PZmYpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK30gYm9hcmR0eXBlOworCisvL01PRFVMRSBJTkZPIFNUUlVDVFVSRQorCit0eXBlZGVmIHVuaW9uIHsKKwkvKiBJbmNyZW1lbnRhbCBjb3VudGVyIGluZm9zICovCisJc3RydWN0IHsKKwkJdW5pb24geworCQkJc3RydWN0IHsKKwkJCQlCWVRFIGJfTW9kZVJlZ2lzdGVyMTsKKwkJCQlCWVRFIGJfTW9kZVJlZ2lzdGVyMjsKKwkJCQlCWVRFIGJfTW9kZVJlZ2lzdGVyMzsKKwkJCQlCWVRFIGJfTW9kZVJlZ2lzdGVyNDsKKwkJCX0gc19CeXRlTW9kZVJlZ2lzdGVyOworCQkJRFdPUkQgZHdfTW9kZVJlZ2lzdGVyMV8yXzNfNDsKKwkJfSBzX01vZGVSZWdpc3RlcjsKKworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IGJfSW5kZXhJbml0OjE7CisJCQl1bnNpZ25lZCBpbnQgYl9Db3VudGVySW5pdDoxOworCQkJdW5zaWduZWQgaW50IGJfUmVmZXJlbmNlSW5pdDoxOworCQkJdW5zaWduZWQgaW50IGJfSW5kZXhJbnRlcnJ1cHRPY2N1cjoxOworCQkJdW5zaWduZWQgaW50IGJfQ29tcGFyZUxvZ2ljSW5pdDoxOworCQkJdW5zaWduZWQgaW50IGJfRnJlcXVlbmN5TWVhc3VyZW1lbnRJbml0OjE7CisJCQl1bnNpZ25lZCBpbnQgYl9GcmVxdWVuY3lNZWFzdXJlbWVudEVuYWJsZToxOworCQl9IHNfSW5pdEZsYWc7CisKKwl9IHNfU2llbWVuc0NvdW50ZXJJbmZvOworCisJLyogU1NJIGluZm9zICovCisJc3RydWN0IHsKKwkJQllURSBiX1NTSVByb2ZpbGU7CisJCUJZVEUgYl9Qb3NpdGlvblR1cm5MZW5ndGg7CisJCUJZVEUgYl9UdXJuQ3B0TGVuZ3RoOworCQlCWVRFIGJfU1NJSW5pdDsKKwl9IHNfU1NJQ291bnRlckluZm87CisKKwkvKiBUVEwgSS9PIGluZm9zICovCisJc3RydWN0IHsKKwkJQllURSBiX1RUTEluaXQ7CisJCUJZVEUgYl9Qb3J0Q29uZmlndXJhdGlvbls0XTsKKwl9IHNfVFRMSU9JbmZvOworCisJLyogRGlnaXRhbCBJL08gaW5mb3MgKi8KKwlzdHJ1Y3QgeworCQlCWVRFIGJfRGlnaXRhbEluaXQ7CisJCUJZVEUgYl9DaGFubmVsQU1vZGU7CisJCUJZVEUgYl9DaGFubmVsQk1vZGU7CisJCUJZVEUgYl9PdXRwdXRNZW1vcnlFbmFibGVkOworCQlEV09SRCBkd19PdXRwdXRNZW1vcnk7CisJfSBzX0RpZ2l0YWxJT0luZm87CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisJLyogODJYNTQgdGltZXIgaW5mb3MgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeworCQkJQllURSBiXzgyWDU0SW5pdDsKKwkJCUJZVEUgYl9JbnB1dENsb2NrU2VsZWN0aW9uOworCQkJQllURSBiX0lucHV0Q2xvY2tMZXZlbDsKKwkJCUJZVEUgYl9PdXRwdXRMZXZlbDsKKwkJCUJZVEUgYl9IYXJkd2FyZUdhdGVMZXZlbDsKKwkJCURXT1JEIGR3X0NvbmZpZ3VyYXRpb25Xb3JkOworCQl9IHNfODJYNTRUaW1lckluZm9bM107CisJCUJZVEUgYl9JbnRlcnJ1cHRNYXNrOworCX0gc184Mlg1NE1vZHVsZUluZm87CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisJLyogQ2hyb25vbWV0ZXIgaW5mb3MgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwlzdHJ1Y3QgeworCQlCWVRFIGJfQ2hyb25vSW5pdDsKKwkJQllURSBiX0ludGVycnVwdE1hc2s7CisJCUJZVEUgYl9QQ0lJbnB1dENsb2NrOworCQlCWVRFIGJfVGltaW5nVW5pdDsKKwkJQllURSBiX0N5Y2xlTW9kZTsKKwkJZG91YmxlIGRfVGltaW5nSW50ZXJ2YWw7CisJCURXT1JEIGR3X0NvbmZpZ1JlZzsKKwl9IHNfQ2hyb25vTW9kdWxlSW5mbzsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFB1bHNlIGVuY29kZXIgaW5mb3MgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCXN0cnVjdCB7CisJCXN0cnVjdCB7CisJCQlCWVRFIGJfUHVsc2VFbmNvZGVySW5pdDsKKwkJfSBzX1B1bHNlRW5jb2RlckluZm9bNF07CisJCURXT1JEIGR3X1NldFJlZ2lzdGVyOworCQlEV09SRCBkd19Db250cm9sUmVnaXN0ZXI7CisJCURXT1JEIGR3X1N0YXR1c1JlZ2lzdGVyOworCX0gc19QdWxzZUVuY29kZXJNb2R1bGVJbmZvOworCisJLyogVG9yIGNvbnRlciBpbmZvcyAqLworCXN0cnVjdCB7CisJCXN0cnVjdCB7CisJCQlCWVRFIGJfVG9yQ291bnRlckluaXQ7CisJCQlCWVRFIGJfVGltaW5nVW5pdDsKKwkJCUJZVEUgYl9JbnRlcnJ1cHRFbmFibGU7CisJCQlkb3VibGUgZF9UaW1pbmdJbnRlcnZhbDsKKwkJCVVMT05HIHVsX1JlYWxUaW1pbmdJbnRlcnZhbDsKKwkJfSBzX1RvckNvdW50ZXJJbmZvWzJdOworCQlCWVRFIGJfUENJSW5wdXRDbG9jazsKKwl9IHNfVG9yQ291bnRlck1vZHVsZUluZm87CisKKwkvKiBQV00gaW5mb3MgKi8KKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgeworCQkJQllURSBiX1BXTUluaXQ7CisJCQlCWVRFIGJfVGltaW5nVW5pdDsKKwkJCUJZVEUgYl9JbnRlcnJ1cHRFbmFibGU7CisJCQlkb3VibGUgZF9Mb3dUaW1pbmc7CisJCQlkb3VibGUgZF9IaWdoVGltaW5nOworCQkJVUxPTkcgdWxfUmVhbExvd1RpbWluZzsKKwkJCVVMT05HIHVsX1JlYWxIaWdoVGltaW5nOworCQl9IHNfUFdNSW5mb1syXTsKKwkJQllURSBiX0Nsb2NrU2VsZWN0aW9uOworCX0gc19QV01Nb2R1bGVJbmZvOworCisJLyogRVRNIGluZm9zICovCisJc3RydWN0IHsKKwkJc3RydWN0IHsKKwkJCUJZVEUgYl9FVE1FbmFibGU7CisJCQlCWVRFIGJfRVRNSW50ZXJydXB0OworCQl9IHNfRVRNSW5mb1syXTsKKwkJQllURSBiX0VUTUluaXQ7CisJCUJZVEUgYl9UaW1pbmdVbml0OworCQlCWVRFIGJfQ2xvY2tTZWxlY3Rpb247CisJCWRvdWJsZSBkX1RpbWluZ0ludGVydmFsOworCQlVTE9ORyB1bF9UaW1pbmc7CisJfSBzX0VUTU1vZHVsZUluZm87CisKKwkvKiBDREEgaW5mb3MgKi8KKwlzdHJ1Y3QgeworCQlCWVRFIGJfQ0RBRW5hYmxlOworCQlCWVRFIGJfQ0RBSW50ZXJydXB0OworCQlCWVRFIGJfQ0RBSW5pdDsKKwkJQllURSBiX0ZjdFNlbGVjdGlvbjsKKwkJQllURSBiX0NEQVJlYWRGSUZPT3ZlcmZsb3c7CisJfSBzX0NEQU1vZHVsZUluZm87CisKK30gc3RyX01vZHVsZUluZm87CisKKy8qIFByaXZhdGUgc3RydWN0dXJlIGZvciB0aGUgYWRkaV9hcGNpMzEyMCBkcml2ZXIgKi8KK3R5cGVkZWYgc3RydWN0IHsKKworCUlOVCBpb2Jhc2U7CisJSU5UIGlfSW9iYXNlQW1jYzsJLy8gYmFzZStzaXplIGZvciBBTUNDIGNoaXAKKwlJTlQgaV9Jb2Jhc2VBZGRvbjsJLy9hZGRvbiBiYXNlIGFkZHJlc3MKKwlJTlQgaV9Jb2Jhc2VSZXNlcnZlZDsKKwlVTE9OR19QVFIgZHdfQWlCYXNlOworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjOwkvLyBwdHIgdG9vIEFNQ0MgZGF0YQorCUJZVEUgYWxsb2NhdGVkOwkJLy8gd2UgaGF2ZSBibG9ja2VkIGNhcmQKKwlCWVRFIGJfVmFsaWREcml2ZXI7CS8vIGRyaXZlciBpcyBvaworCUJZVEUgYl9BaUNvbnRpbnVvdXM7CS8vIHdlIGRvIHVubGltaXRlZCBBSQorCUJZVEUgYl9BaUluaXRpYWxpc2F0aW9uOworCVVJTlQgdWlfQWlBY3R1YWxTY2FuOwkvL2hvdyBtYW55IHNjYW5zIHdlIGZpbmlzaGVkCisJVUlOVCB1aV9BaUJ1ZmZlclB0cjsJLy8gZGF0YSBidWZmZXIgcHRyIGluIHNhbXBsZXMKKwlVSU5UIHVpX0FpTmJyb2ZDaGFubmVsczsJLy8gaG93IG1hbnkgY2hhbm5lbHMgaXMgbWVhc3VyZWQKKwlVSU5UIHVpX0FpU2Nhbkxlbmd0aDsJLy8gTGVuZ3RoIG9mIGFjdHVhbCBzY2FubGlzdAorCVVJTlQgdWlfQWlBY3R1YWxTY2FuUG9zaXRpb247CS8vIHBvc2l0aW9uIGluIGFjdHVhbCBzY2FuCisJUFVJTlQgcHVpX0FpQ2hhbm5lbExpc3Q7CS8vIGFjdHVhbCBjaGFubGlzdAorCVVJTlQgdWlfQWlDaGFubmVsTGlzdFszMl07CS8vIGFjdHVhbCBjaGFubGlzdAorCUJZVEUgYl9BaUNoYW5uZWxDb25maWd1cmF0aW9uWzMyXTsJLy8gYWN0dWFsIGNoYW5saXN0CisJVUlOVCB1aV9BaVJlYWREYXRhWzMyXTsKKwlEV09SRCBkd19BaUluaXRpYWxpc2VkOworCVVJTlQgdWlfQWlUaW1lcjA7CS8vVGltZXIgQ29uc3RhbnQgZm9yIFRpbWVyMAorCVVJTlQgdWlfQWlUaW1lcjE7CS8vVGltZXIgY29uc3RhbnQgZm9yIFRpbWVyMQorCVVJTlQgdWlfQWlGbGFnczsKKwlVSU5UIHVpX0FpRGF0YUxlbmd0aDsKKwlzaG9ydCAqQWlEYXRhOwkvLyBQb2ludGVyIHRvIHNhbXBsZSBkYXRhCisJVUlOVCB1aV9BaU5icm9mU2NhbnM7CS8vIG51bWJlciBvZiBzY2FucyB0byBkbworCVVTSE9SVCB1c19Vc2VEbWE7CS8vIFRvIHVzZSBEbWEgb3Igbm90CisJQllURSBiX0RtYURvdWJsZUJ1ZmZlcjsJLy8gd2UgY2FuIHVzZSBkb3VibGUgYnVmZmVyaW5nCisJVUlOVCB1aV9EbWFBY3R1YWxCdWZmZXI7CS8vIHdoaWNoIGJ1ZmZlciBpcyB1c2VkIG5vdworCS8vKlVQREFURS0wLjcuNTctPjAuNy42OAorCS8vVUxPTkcgICAgICAgICAgICAgICB1bF9EbWFCdWZmZXJWaXJ0dWFsWzJdOy8vIHBvaW50ZXJzIHRvIGJlZ2luIG9mIERNQSBidWZmZXIKKwlzaG9ydCAqdWxfRG1hQnVmZmVyVmlydHVhbFsyXTsJLy8gcG9pbnRlcnMgdG8gYmVnaW4gb2YgRE1BIGJ1ZmZlcgorCVVMT05HIHVsX0RtYUJ1ZmZlckh3WzJdOwkvLyBodyBhZGRyZXNzIG9mIERNQSBidWZmCisJVUlOVCB1aV9EbWFCdWZmZXJTaXplWzJdOwkvLyBzaXplIG9mIGRtYSBidWZmZXIgaW4gYnl0ZXMKKwlVSU5UIHVpX0RtYUJ1ZmZlclVzZXNpemVbMl07CS8vIHdoaWNoIHNpemUgd2UgbWF5IG5vdyB1c2VkIGZvciB0cmFuc2ZlcgorCVVJTlQgdWlfRG1hQnVmZmVyU2FtcGxlc1syXTsJLy8gc2l6ZSBpbiBzYW1wbGVzCisJVUlOVCB1aV9EbWFCdWZmZXJQYWdlc1syXTsJLy8gbnVtYmVyIG9mIHBhZ2VzIGluIGJ1ZmZlcgorCUJZVEUgYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXI7CS8vIERpZ2l0YWwgT3V0cHV0IFJlZ2lzdGVyCisJQllURSBiX091dHB1dE1lbW9yeVN0YXR1czsKKwlCWVRFIGJfQW5hbG9nSW5wdXRDaGFubmVsTmJyOwkvLyBBbmFsb2cgaW5wdXQgY2hhbm5lbCBOYnIKKwlCWVRFIGJfQW5hbG9nT3V0cHV0Q2hhbm5lbE5icjsJLy8gQW5hbG9nIGlucHV0IE91dHB1dCAgTmJyCisJQllURSBiX1RpbWVyU2VsZWN0TW9kZTsJLy8gQ29udGFpbiBkYXRhIHdyaXR0ZW4gYXQgaW9iYXNlICsgMEMKKwlCWVRFIGJfTW9kZVNlbGVjdFJlZ2lzdGVyOwkvLyBDb250YWluIGRhdGEgd3JpdHRlbiBhdCBpb2Jhc2UgKyAwRQorCVVTSE9SVCB1c19PdXRwdXRSZWdpc3RlcjsJLy8gQ29udGFpbiBkYXRhIHdyaXR0ZW4gYXQgaW9iYXNlICsgMAorCUJZVEUgYl9JbnRlcnJ1cHRTdGF0ZTsKKwlCWVRFIGJfVGltZXJJbml0OwkvLyBTcGVjaWZ5IGlmIEluaXRUaW1lcldhdGNoZG9nIHdhcyBsb2FkCisJQllURSBiX1RpbWVyU3RhcnRlZDsJLy8gU3BlY2lmeSBpZiB0aW1lciAyIGlzIHJ1bm5pbmcgb3Igbm90CisJQllURSBiX1RpbWVyMk1vZGU7CS8vIFNwZWNpZnkgdGhlIHRpbWVyIDIgbW9kZQorCUJZVEUgYl9UaW1lcjJJbnRlcnJ1cHQ7CS8vVGltZXIyICBpbnRlcnJ1cHQgZW5hYmxlIG9yIGRpc2FibGUKKwlCWVRFIGJfQWlDeWNsaWNBY3F1aXNpdGlvbjsJLy8gaW5kaWNhdGUgY3ljbGljIGFjcXVpc2l0aW9uCisJQllURSBiX0ludGVycnVwdE1vZGU7CS8vIGVvYyBlb3Mgb3IgZG1hCisJQllURSBiX0VvY0Vvc0ludGVycnVwdDsJLy8gRW5hYmxlIGRpc2FibGUgZW9jIGVvcyBpbnRlcnJ1cHQKKwlVSU5UIHVpX0VvY0Vvc0NvbnZlcnNpb25UaW1lOworCUJZVEUgYl9Fb2NFb3NDb252ZXJzaW9uVGltZUJhc2U7CisJQllURSBiX1NpbmdlbERpZmY7CisJQllURSBiX0V4dHRyaWdFbmFibGU7CS8qIFRvIGVuYWJsZSBvciBkaXNhYmxlIGV4dGVybmFsIHRyaWdnZXIgKi8KKworCS8qIFBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgcHJvY2VzcyAqLworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrX0N1cnJlbnQ7CisJYm9hcmR0eXBlICpwc19Cb2FyZEluZm87CisKKwkvKiBIYXJkd2FyZSBib2FyZCBpbmZvcyBmb3IgMTcxMCAqLworCXN0cnVjdCB7CisJCVVJTlQgdWlfQWRkcmVzczsJLyogQm9hcmQgYWRkcmVzcyAqLworCQlVSU5UIHVpX0ZsYXNoQWRkcmVzczsKKwkJQllURSBiX0ludGVycnVwdE5icjsJLyogQm9hcmQgaW50ZXJydXB0IG51bWJlciAqLworCQlCWVRFIGJfU2xvdE51bWJlcjsJLyogUENJIHNsb3QgbnVtYmVyICovCisJCUJZVEUgYl9Cb2FyZFZlcnNpb247CisJCURXT1JEIGR3X01vbGR1bGVDb25maWd1cmF0aW9uWzRdOwkvKiBNb2R1bGUgY29uZmlnICovCisJfSBzX0JvYXJkSW5mb3M7CisKKwkvKiBJbnRlcnJ1cHQgaW5mb3MgKi8KKwlzdHJ1Y3QgeworCQlVTE9ORyB1bF9JbnRlcnJ1cHRPY2N1cjsJLyogMCAgIDogTm8gaW50ZXJydXB0IG9jY3VyICovCisJCQkJCQkvKiA+IDAgOiBJbnRlcnJ1cHQgb2NjdXIgKi8KKwkJVUlOVCB1aV9SZWFkOwkvKiBSZWFkIEZJRk8gKi8KKwkJVUlOVCB1aV9Xcml0ZTsJLyogV3JpdGUgRklGTyAqLworCQlzdHJ1Y3QgeworCQkJQllURSBiX09sZE1vZHVsZU1hc2s7CisJCQlVTE9ORyB1bF9PbGRJbnRlcnJ1cHRNYXNrOwkvKiBJbnRlcnJ1cHQgbWFzayAqLworCQkJVUxPTkcgdWxfT2xkQ291bnRlckxhdGNoVmFsdWU7CS8qIEludGVycnVwdCBjb3VudGVyIHZhbHVlICovCisJCX0gc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tBUENJMTcxMF9TQVZFX0lOVEVSUlVQVF07CisJfSBzX0ludGVycnVwdFBhcmFtZXRlcnM7CisKKwlzdHJfTW9kdWxlSW5mbyBzX01vZHVsZUluZm9bNF07CisJVUxPTkcgdWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMTBdOworCit9IGFkZGlfcHJpdmF0ZTsKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IHBjaV9saXN0X2J1aWxkZWQ7CS8qIHNldCB0byAxIHdoZW4gbGlzdCBvZiBjYXJkIGlzIGtub3duICovCisKKy8qIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLworc3RhdGljIGludCBpX0FERElfQXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IGlfQURESV9EZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGlfQURESV9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKKworc3RhdGljIGlycXJldHVybl90IHZfQURESV9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7CitzdGF0aWMgaW50IGlfQURESURBVEFfSW5zblJlYWRFZXByb20oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfZWVwcm9tLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfZWVwcm9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhMWJiMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9lZXByb20uYwpAQCAtMCwwICsxLDExNTggQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYXNzZSAzICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgIDogQURESSBEQVRBICAgICAgICAgfCBDb21waWxlciA6IEdDQyAJCQkgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bG5hbWUgOiBhZGRpX2VlcHJvbS5jICAgICB8IFZlcnNpb24gIDogMi45NiAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogQURESSBFRVBST00gIE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFJ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgCQkgfCAJCQkJCQkgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8IAkJCQkJCSAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjZGVmaW5lIE5WQ01EX0JFR0lOX1JFQUQgCSgweDcgPDwgNSApCS8vIG52UmFtIGJlZ2luIHJlYWQgY29tbWFuZAorI2RlZmluZSBOVkNNRF9MT0FEX0xPVyAgIAkoMHg0IDw8IDUgKQkvLyBudlJhbSBsb2FkIGxvdyBjb21tYW5kCisjZGVmaW5lIE5WQ01EX0xPQURfSElHSCAgCSgweDUgPDwgNSApCS8vIG52UmFtIGxvYWQgaGlnaCBjb21tYW5kCisjZGVmaW5lIEVFNzZfQ01EX0xFTiAgICAJMTMJLy8gYml0cyBpbiBpbnN0cnVjdGlvbnMKKyNkZWZpbmUgRUVfUkVBRCAgICAgICAgIAkweDAxODAJLy8gMDEgMTAwMCAwMDAwIHJlYWQgaW5zdHJ1Y3Rpb24KKworI2RlZmluZQlXT1JECQkJCXVuc2lnbmVkIHNob3J0CisjZGVmaW5lIFBXT1JECQkJCXVuc2lnbmVkIHNob3J0ICoKKyNkZWZpbmUgUERXT1JECQkJCXVuc2lnbmVkIGludCAgKgorCisjaWZuZGVmIERXT1JECisjZGVmaW5lCURXT1JECQkJCXVuc2lnbmVkIGludAorI2VuZGlmCisKKyNkZWZpbmUgRUVQUk9NX0RJR0lUQUxJTlBVVCAJCQkwCisjZGVmaW5lIEVFUFJPTV9ESUdJVEFMT1VUUFVUCQkJMQorI2RlZmluZSBFRVBST01fQU5BTE9HSU5QVVQJCQkJMgorI2RlZmluZSBFRVBST01fQU5BTE9HT1VUUFVUCQkJCTMKKyNkZWZpbmUgRUVQUk9NX1RJTUVSCQkJCQk0CisjZGVmaW5lIEVFUFJPTV9XQVRDSERPRwkJCQkJNQorI2RlZmluZSBFRVBST01fVElNRVJfV0FUQ0hET0dfQ09VTlRFUgkxMAorCitzdHJ1Y3Qgc3RyX0Z1bmN0aW9uYWxpdHkgeworCUJZVEUgYl9UeXBlOworCVdPUkQgd19BZGRyZXNzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdPUkQgd19IZWFkZXJTaXplOworCUJZVEUgYl9OZnVuY3Rpb25zOworCXN0cnVjdCBzdHJfRnVuY3Rpb25hbGl0eSBzX0Z1bmN0aW9uc1s3XTsKK30gc3RyX01haW5IZWFkZXI7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlXT1JEIHdfTmNoYW5uZWw7CisJQllURSBiX0ludGVycnVwdGlibGU7CisJV09SRCB3X05pbnRlcnJ1cHRMb2dpYzsKK30gc3RyX0RpZ2l0YWxJbnB1dEhlYWRlcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdPUkQgd19OY2hhbm5lbDsKK30gc3RyX0RpZ2l0YWxPdXRwdXRIZWFkZXI7CisKKy8vIHVzZWQgZm9yIHRpbWVyIGFzIHdlbGwgYXMgd2F0Y2hkb2cKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdPUkQgd19IZWFkZXJTaXplOworCUJZVEUgYl9SZXNvbHV0aW9uOworCUJZVEUgYl9Nb2RlOwkJLy8gaW4gY2FzZSBvZiBXYXRjaGRvZyBpdCBpcyBmdW5jdGlvbmFsaXR5CisJV09SRCB3X01pblRpbWluZzsKKwlCWVRFIGJfVGltZUJhc2U7Cit9IHN0cl9UaW1lckRldGFpbHM7Cit0eXBlZGVmIHN0cnVjdCB7CisKKwlXT1JEIHdfTnRpbWVyOworCXN0cl9UaW1lckRldGFpbHMgc19UaW1lckRldGFpbHNbNF07CS8vICBzdXBwb3J0cyA0IHRpbWVycworfSBzdHJfVGltZXJNYWluSGVhZGVyOworCit0eXBlZGVmIHN0cnVjdCB7CisJV09SRCB3X05jaGFubmVsOworCUJZVEUgYl9SZXNvbHV0aW9uOworfSBzdHJfQW5hbG9nT3V0cHV0SGVhZGVyOworCit0eXBlZGVmIHN0cnVjdCB7CisJV09SRCB3X05jaGFubmVsOworCVdPUkQgd19NaW5Db252ZXJ0VGltaW5nOworCVdPUkQgd19NaW5EZWxheVRpbWluZzsKKwlCWVRFIGJfSGFzRG1hOworCUJZVEUgYl9SZXNvbHV0aW9uOworfSBzdHJfQW5hbG9nSW5wdXRIZWFkZXI7CisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiAgICAgICAgICAgIFJlYWQgSGVhZGVyIEZ1bmN0aW9ucyAgICAgICAgICAgICAgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitJTlQgaV9FZXByb21SZWFkTWFpbkhlYWRlcihXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCWNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisKK0lOVCBpX0VlcHJvbVJlYWREaWdpdGFsSW5wdXRIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIFdPUkQgd19BZGRyZXNzLAorCXN0cl9EaWdpdGFsSW5wdXRIZWFkZXIgKiBzX0hlYWRlcik7CisKK0lOVCBpX0VlcHJvbVJlYWREaWdpdGFsT3V0cHV0SGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfRGlnaXRhbE91dHB1dEhlYWRlciAqIHNfSGVhZGVyKTsKKworSU5UIGlfRWVwcm9tUmVhZFRpbWVySGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfVGltZXJNYWluSGVhZGVyICogc19IZWFkZXIpOworCitJTlQgaV9FZXByb21SZWFkQW5sb2dPdXRwdXRIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIFdPUkQgd19BZGRyZXNzLAorCXN0cl9BbmFsb2dPdXRwdXRIZWFkZXIgKiBzX0hlYWRlcik7CisKK0lOVCBpX0VlcHJvbVJlYWRBbmxvZ0lucHV0SGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfQW5hbG9nSW5wdXRIZWFkZXIgKiBzX0hlYWRlcik7CisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogICAgICBFZXByb20gU3BlY2lmaWMgRnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitXT1JEIHdfRWVwcm9tUmVhZFdvcmQoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCVdPUkQgd19FZXByb21TdGFydEFkZHJlc3MpOwordm9pZCB2X0VlcHJvbVdhaXRCdXN5KFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MpOwordm9pZCB2X0VlcHJvbUNsb2NrNzYoRFdPUkQgZHdfQWRkcmVzcywgRFdPUkQgZHdfUmVnaXN0ZXJWYWx1ZSk7Cit2b2lkIHZfRWVwcm9tV2FpdEJ1c3koV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyk7Cit2b2lkIHZfRWVwcm9tU2VuZENvbW1hbmQ3NihEV09SRCBkd19BZGRyZXNzLCBEV09SRCBkd19FZXByb21Db21tYW5kLAorCUJZVEUgYl9EYXRhTGVuZ3RoSW5CaXRzKTsKK3ZvaWQgdl9FZXByb21Dczc2UmVhZChEV09SRCBkd19BZGRyZXNzLCBXT1JEIHdfb2Zmc2V0LCBQV09SRCBwd19WYWx1ZSk7CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBXT1JEIHdfRWVwcm9tUmVhZFdvcmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkoV09SRAl3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgICAgICAgICAgICAgCQkgfAorfAkJCQkgY2hhciAqCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgICAgICAgICAgICAgICAJCSB8Cit8CQkJCSBXT1JEICAgd19FZXByb21TdGFydEFkZHJlc3MpICAgICAgICAgICAgICAgIAkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgZnJvbSBlZXByb21uIGEgd29yZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogUENJIGVlcHJvbSBhZGRyZXNzICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCSAgICAgIGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiAgOiBQQ0kgQ2hpcCBUeXBlLiAgICAgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJICAgICAgV09SRCB3X0VlcHJvbVN0YXJ0QWRkcmVzcyAgICA6IFNlbGVjdGVkIGVlcHJvbSBhZGRyZXNzIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBSZWFkIHdvcmQgdmFsdWUgZnJvbSBlZXByb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitXT1JEIHdfRWVwcm9tUmVhZFdvcmQoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCVdPUkQgd19FZXByb21TdGFydEFkZHJlc3MpCit7CisKKwlCWVRFIGJfQ291bnRlciA9IDA7CisKKwlCWVRFIGJfUmVhZEJ5dGUgPSAwOworCisJQllURSBiX1JlYWRMb3dCeXRlID0gMDsKKworCUJZVEUgYl9SZWFkSGlnaEJ5dGUgPSAwOworCisJQllURSBiX1NlbGVjdGVkQWRkcmVzc0xvdyA9IDA7CisKKwlCWVRFIGJfU2VsZWN0ZWRBZGRyZXNzSGlnaCA9IDA7CisKKwlXT1JEIHdfUmVhZFdvcmQgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogVGVzdCB0aGUgUENJIGNoaXAgdHlwZSAqLworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKCghc3RyY21wKHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgIlM1OTIwIikpIHx8CisJCSghc3RyY21wKHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgIlM1OTMzIikpKQorCXsKKworCQlmb3IgKGJfQ291bnRlciA9IDA7IGJfQ291bnRlciA8IDI7IGJfQ291bnRlcisrKQorCQl7CisKKwkJCWJfU2VsZWN0ZWRBZGRyZXNzTG93ID0gKHdfRWVwcm9tU3RhcnRBZGRyZXNzICsgYl9Db3VudGVyKSAlIDI1NjsJLy9SZWFkIHRoZSBsb3cgOCBiaXQgcGFydAorCisJCQliX1NlbGVjdGVkQWRkcmVzc0hpZ2ggPSAod19FZXByb21TdGFydEFkZHJlc3MgKyBiX0NvdW50ZXIpIC8gMjU2OwkvL1JlYWQgdGhlIGhpZ2ggOCBiaXQgcGFydAorCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJLyogU2VsZWN0IHRoZSBsb2FkIGxvdyBhZGRyZXNzIG1vZGUgKi8KKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGIoTlZDTURfTE9BRF9MT1csIHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgMHgzRik7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKi8KKworCQkJLyogV2FpdCBvbiBidXN5ICovCisKKwkgICAgICAvKioqKioqKioqKioqKioqKi8KKworCQkJdl9FZXByb21XYWl0QnVzeSh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkvKiBMb2FkIHRoZSBsb3cgYWRkcmVzcyAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0YihiX1NlbGVjdGVkQWRkcmVzc0xvdywKKwkJCQl3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIDB4M0UpOworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCS8qIFdhaXQgb24gYnVzeSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCXZfRWVwcm9tV2FpdEJ1c3kod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCS8qIFNlbGVjdCB0aGUgbG9hZCBoaWdoIGFkZHJlc3MgbW9kZSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGIoTlZDTURfTE9BRF9ISUdILCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIDB4M0YpOworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCS8qIFdhaXQgb24gYnVzeSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCXZfRWVwcm9tV2FpdEJ1c3kod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCS8qIExvYWQgdGhlIGhpZ2ggYWRkcmVzcyAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGIoYl9TZWxlY3RlZEFkZHJlc3NIaWdoLAorCQkJCXdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgMHgzRSk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKi8KKworCQkJLyogV2FpdCBvbiBidXN5ICovCisKKwkgICAgICAvKioqKioqKioqKioqKioqKi8KKworCQkJdl9FZXByb21XYWl0QnVzeSh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkvKiBTZWxlY3QgdGhlIFJFQUQgbW9kZSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJb3V0YihOVkNNRF9CRUdJTl9SRUFELCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIDB4M0YpOworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCS8qIFdhaXQgb24gYnVzeSAqLworCisJICAgICAgLyoqKioqKioqKioqKioqKiovCisKKwkJCXZfRWVwcm9tV2FpdEJ1c3kod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkvKiBSZWFkIGRhdGEgaW50byB0aGUgRUVQUk9NICovCisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWJfUmVhZEJ5dGUgPSBpbmIod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyAweDNFKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqLworCisJCQkvKiBXYWl0IG9uIGJ1c3kgKi8KKworCSAgICAgIC8qKioqKioqKioqKioqKioqLworCisJCQl2X0VlcHJvbVdhaXRCdXN5KHdfUENJQm9hcmRFZXByb21BZGRyZXNzKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCS8qIFNlbGVjdCB0aGUgdXBwZXIgYWRkcmVzcyBwYXJ0ICovCisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoYl9Db3VudGVyID09IDApCisJCQl7CisKKwkJCQliX1JlYWRMb3dCeXRlID0gYl9SZWFkQnl0ZTsKKworCQkJfQkvLyBpZihiX0NvdW50ZXI9PTApCisKKwkJCWVsc2UKKwkJCXsKKworCQkJCWJfUmVhZEhpZ2hCeXRlID0gYl9SZWFkQnl0ZTsKKworCQkJfQkvLyBpZihiX0NvdW50ZXI9PTApCisKKwkJfQkJLy8gZm9yIChiX0NvdW50ZXI9MDsgYl9Db3VudGVyPDI7IGJfQ291bnRlcisrKQorCisJCXdfUmVhZFdvcmQgPSAoYl9SZWFkTG93Qnl0ZSB8ICgoKFdPUkQpIGJfUmVhZEhpZ2hCeXRlKSAqIDI1NikpOworCisJfQkJCS8vIGVuZCBvZiBpZiAoKCFzdHJjbXAocGNfUENJQ2hpcEluZm9ybWF0aW9uLCAiUzU5MjAiKSkgfHwgKCFzdHJjbXAocGNfUENJQ2hpcEluZm9ybWF0aW9uLCAiUzU5MzMiKSkpCisKKwlpZiAoIXN0cmNtcChwY19QQ0lDaGlwSW5mb3JtYXRpb24sICI5M0M3NiIpKQorCXsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8qIFJlYWQgMTYgYml0IGZyb20gdGhlIEVFUFJPTSA5M0M3NiAqLworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJdl9FZXByb21Dczc2UmVhZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19FZXByb21TdGFydEFkZHJlc3MsCisJCQkmd19SZWFkV29yZCk7CisKKwl9CisKKwlyZXR1cm4gKHdfUmVhZFdvcmQpOworCit9CisKKy8qCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogdm9pZCB2X0VlcHJvbVdhaXRCdXN5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworfAkJCShXT1JECXdfUENJQm9hcmRFZXByb21BZGRyZXNzKSAgICAgICAgICAgICAgICAgICAgCSB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IFRhc2sgICAgICAgICAgICAgIDogV2FpdCB0aGUgYnVzeSBmbGFnIGZyb20gUENJIGNvbnRyb2xsZXIgICAgICAgICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogUENJIGVlcHJvbSBiYXNlIGFkZHJlc3MgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IFJldHVybiBWYWx1ZSAgICAgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyovCisKK3ZvaWQgdl9FZXByb21XYWl0QnVzeShXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzKQoreworCisJQllURSBiX0VlcHJvbUJ1c3kgPSAwOworCisJZG8KKwl7CisKKwkgICAvKioqKioqKioqKioqKi8KKworCQkvKiBJTVBPUlRBTlQgKi8KKworCSAgIC8qKioqKioqKioqKioqLworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkvKiBBbiBlcnJvciBoYXMgYmVlbiB3cml0dGVuIGluIHRoZSBBTUNDIDU5MzMgYm9vayBhdCB0aGUgcGFnZSBCLTEzICovCisKKwkJLyogRXg6IGlmIHlvdSByZWFkIGEgYnl0ZSBhbmQgbG9vayBmb3IgdGhlIGJ1c3kgc3RhdHVzRUVQUk9NPTB4ODAgYW5kICAgKi8KKworCQkvKiAgICAgIHRoZSBvcGVyYXRvciByZWdpc3RlciBpcyBBTUNDX09QX1JFR19NQ1NSKzMgKi8KKworCQkvKiAgICAgIFdPUkQgcmVhZCAgRUVQUk9NPTB4ODAwMCBhbmRBTUNDX09QX1JFR19NQ1NSKzIgICAgICAgICAgICAgICAgICAqLworCisJCS8qICAgICAgRFdPUkQgcmVhZCAgRUVQUk9NPTB4ODAwMDAwMDAgYW5kIEFNQ0NfT1BfUkVHX01DU1IgKi8KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJYl9FZXByb21CdXN5ID0gaW5iKHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgMHgzRik7CisJCWJfRWVwcm9tQnVzeSA9IGJfRWVwcm9tQnVzeSAmIDB4ODA7CisKKwl9CisJd2hpbGUgKGJfRWVwcm9tQnVzeSA9PSAweDgwKTsKKworfQorCisvKgorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogdm9pZCB2X0VlcHJvbUNsb2NrNzYoRFdPUkQgZHdfQWRkcmVzcywgICAgICAgICAgICAgICAgICAgICAgfAorCit8CQkJCQkgICBEV09SRCBkd19SZWdpc3RlclZhbHVlKSAgICAgICAgICAgICAgICAgCQkJICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgVGFzayAgICAgICAgICAgICAgOiBUaGlzIGZ1bmN0aW9uIHNlbmRzIHRoZSBjbG9ja2luZyBzZXF1ZW5jZSB0byB0aGUgRUVQUk9NLiAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBEV09SRCBkd19BZGRyZXNzIDogUENJIGVlcHJvbSBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgICAgICB8CisKK3wJCSAgICAgIERXT1JEIGR3X1JlZ2lzdGVyVmFsdWUgOiBQQ0kgZWVwcm9tIHJlZ2lzdGVyIHZhbHVlIHRvIHdyaXRlLnwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBSZXR1cm4gVmFsdWUgICAgICA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworKi8KKwordm9pZCB2X0VlcHJvbUNsb2NrNzYoRFdPUkQgZHdfQWRkcmVzcywgRFdPUkQgZHdfUmVnaXN0ZXJWYWx1ZSkKK3sKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIFNldCBFRVBST00gY2xvY2sgTG93ICovCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlvdXRsKGR3X1JlZ2lzdGVyVmFsdWUgJiAweDYsIGR3X0FkZHJlc3MpOworCisgICAvKioqKioqKioqKioqKioqLworCisJLyogV2FpdCAwLjEgbXMgKi8KKworICAgLyoqKioqKioqKioqKioqKi8KKworCXVkZWxheSgxMDApOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIFNldCBFRVBST00gY2xvY2sgSGlnaCAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCW91dGwoZHdfUmVnaXN0ZXJWYWx1ZSB8IDB4MSwgZHdfQWRkcmVzcyk7CisKKyAgIC8qKioqKioqKioqKioqKiovCisKKwkvKiBXYWl0IDAuMSBtcyAqLworCisgICAvKioqKioqKioqKioqKioqLworCisJdWRlbGF5KDEwMCk7CisKK30KKworLyoKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IHZvaWQgdl9FZXByb21TZW5kQ29tbWFuZDc2KERXT1JEIGR3X0FkZHJlc3MsICAgICAgICAgICAgICAgIHwKKworfAkJCQkJICAgRFdPUkQgICBkd19FZXByb21Db21tYW5kLCAgICAgICAgICAgICAgICAJCSAgfAorCit8CQkJCQkgICBCWVRFICAgIGJfRGF0YUxlbmd0aEluQml0cykgICAgICAgICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgVGFzayAgICAgICAgICAgICAgOiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGEgQ29tbWFuZCB0byB0aGUgRUVQUk9NIDkzQzc2LiAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBEV09SRCBkd19BZGRyZXNzIDogUENJIGVlcHJvbSBiYXNlIGFkZHJlc3MgICAgICAgICAgICAgICAgICB8CisKK3wJCSAgICAgIERXT1JEIGR3X0VlcHJvbUNvbW1hbmQgOiBQQ0kgZWVwcm9tIGNvbW1hbmQgdG8gd3JpdGUuICAgICAgIHwKKworfAkJICAgICAgQllURSAgYl9EYXRhTGVuZ3RoSW5CaXRzIDogUENJIGVlcHJvbSBjb21tYW5kIGRhdGEgbGVuZ3RoLiAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCit8IFJldHVybiBWYWx1ZSAgICAgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisqLworCit2b2lkIHZfRWVwcm9tU2VuZENvbW1hbmQ3NihEV09SRCBkd19BZGRyZXNzLCBEV09SRCBkd19FZXByb21Db21tYW5kLAorCUJZVEUgYl9EYXRhTGVuZ3RoSW5CaXRzKQoreworCisJY2hhciBjX0JpdFBvcyA9IDA7CisKKwlEV09SRCBkd19SZWdpc3RlclZhbHVlID0gMDsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogRW5hYmxlIEVFUFJPTSBDaGlwIFNlbGVjdCAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlkd19SZWdpc3RlclZhbHVlID0gMHgyOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvKiBUb2dnbGUgRUVQUk9NJ3MgQ2hpcCBzZWxlY3QgdG8gZ2V0IGl0IG91dCBvZiBTaGlmdCBSZWdpc3RlciBNb2RlICovCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCW91dGwoZHdfUmVnaXN0ZXJWYWx1ZSwgZHdfQWRkcmVzcyk7CisKKyAgIC8qKioqKioqKioqKioqKiovCisKKwkvKiBXYWl0IDAuMSBtcyAqLworCisgICAvKioqKioqKioqKioqKioqLworCisJdWRlbGF5KDEwMCk7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogU2VuZCBFRVBST00gY29tbWFuZCAtIG9uZSBiaXQgYXQgYSB0aW1lICovCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJZm9yIChjX0JpdFBvcyA9IChiX0RhdGFMZW5ndGhJbkJpdHMgLSAxKTsgY19CaXRQb3MgPj0gMDsgY19CaXRQb3MtLSkKKwl7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8qIENoZWNrIGlmIGN1cnJlbnQgYml0IGlzIDAgb3IgMSAqLworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZHdfRWVwcm9tQ29tbWFuZCAmICgxIDw8IGNfQml0UG9zKSkKKwkJeworCisJIC8qKioqKioqKioqKi8KKworCQkJLyogV3JpdGUgMSAqLworCisJIC8qKioqKioqKioqKi8KKworCQkJZHdfUmVnaXN0ZXJWYWx1ZSA9IGR3X1JlZ2lzdGVyVmFsdWUgfCAweDQ7CisKKwkJfQorCisJCWVsc2UKKwkJeworCisJIC8qKioqKioqKioqKi8KKworCQkJLyogV3JpdGUgMCAqLworCisJIC8qKioqKioqKioqKi8KKworCQkJZHdfUmVnaXN0ZXJWYWx1ZSA9IGR3X1JlZ2lzdGVyVmFsdWUgJiAweDM7CisKKwkJfQorCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqLworCisJCS8qIFdyaXRlIHRoZSBjb21tYW5kICovCisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJb3V0bChkd19SZWdpc3RlclZhbHVlLCBkd19BZGRyZXNzKTsKKworICAgICAgLyoqKioqKioqKioqKioqKi8KKworCQkvKiBXYWl0IDAuMSBtcyAqLworCisgICAgICAvKioqKioqKioqKioqKioqLworCisJCXVkZWxheSgxMDApOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkvKiBUcmlnZ2VyIHRoZSBFRVBST00gY2xvY2sgKi8KKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJdl9FZXByb21DbG9jazc2KGR3X0FkZHJlc3MsIGR3X1JlZ2lzdGVyVmFsdWUpOworCisJfQorCit9CisKKy8qCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgRnVuY3Rpb24gICBOYW1lICAgOiB2b2lkIHZfRWVwcm9tQ3M3NlJlYWQoRFdPUkQgZHdfQWRkcmVzcywgICAgICAgICAgICAgICAgICAgICB8CisKK3wJCQkJCSAgIFdPUkQgICAgd19vZmZzZXQsICAgICAgICAgICAgICAgICAgICAgIAkJCSAgfAorCit8CQkJCQkgICBQV09SRCAgIHB3X1ZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAJCQkgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBUYXNrICAgICAgICAgICAgICA6IFRoaXMgZnVuY3Rpb24gcmVhZCBhIHZhbHVlIGZyb20gdGhlIEVFUFJPTSA5M0M3Ni4gICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IERXT1JEIGR3X0FkZHJlc3MgOiBQQ0kgZWVwcm9tIGJhc2UgYWRkcmVzcyAgICAgICAgICAgICAgICAgIHwKKworfAkJICAgICAgV09SRCAgICB3X29mZnNldCA6IE9mZnNldCBvZiB0aGUgYWRyZXNzIHRvIHJlYWQgICAgICAgICAgICAgfAorCit8CQkgICAgICBQV09SRCAgIHB3X1ZhbHVlIDogUENJIGVlcHJvbSAxNiBiaXQgcmVhZCB2YWx1ZS4gICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyovCisKK3ZvaWQgdl9FZXByb21Dczc2UmVhZChEV09SRCBkd19BZGRyZXNzLCBXT1JEIHdfb2Zmc2V0LCBQV09SRCBwd19WYWx1ZSkKK3sKKworICAgICAgICBjaGFyIGNfQml0UG9zID0gMDsKKworCURXT1JEIGR3X1JlZ2lzdGVyVmFsdWUgPSAwOworCisJRFdPUkQgZHdfUmVnaXN0ZXJWYWx1ZVJlYWQgPSAwOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIFNlbmQgRUVQUk9NIHJlYWQgY29tbWFuZCBhbmQgb2Zmc2V0IHRvIEVFUFJPTSAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCXZfRWVwcm9tU2VuZENvbW1hbmQ3Nihkd19BZGRyZXNzLCAoRUVfUkVBRCA8PCA0KSB8ICh3X29mZnNldCAvIDIpLAorCQlFRTc2X0NNRF9MRU4pOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8qIEdldCB0aGUgbGFzdCByZWdpc3RlciB2YWx1ZSAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWR3X1JlZ2lzdGVyVmFsdWUgPSAoKCh3X29mZnNldCAvIDIpICYgMHgxKSA8PCAyKSB8IDB4MjsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogU2V0IHRoZSAxNi1iaXQgdmFsdWUgb2YgMCAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkqcHdfVmFsdWUgPSAwOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogR2V0IHRoZSAxNi1iaXQgdmFsdWUgKi8KKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWZvciAoY19CaXRQb3MgPSAwOyBjX0JpdFBvcyA8IDE2OyBjX0JpdFBvcysrKQorCXsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLyogVHJpZ2dlciB0aGUgRUVQUk9NIGNsb2NrICovCisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCXZfRWVwcm9tQ2xvY2s3Nihkd19BZGRyZXNzLCBkd19SZWdpc3RlclZhbHVlKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLyogR2V0IHRoZSByZXN1bHQgYml0ICovCisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCWR3X1JlZ2lzdGVyVmFsdWVSZWFkID0gaW5sKGR3X0FkZHJlc3MpOworCisgICAgICAvKioqKioqKioqKioqKioqLworCisJCS8qIFdhaXQgMC4xIG1zICovCisKKyAgICAgIC8qKioqKioqKioqKioqKiovCisKKwkJdWRlbGF5KDEwMCk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLyogR2V0IGJpdCB2YWx1ZSBhbmQgc2hpZnQgaW50byByZXN1bHQgKi8KKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZHdfUmVnaXN0ZXJWYWx1ZVJlYWQgJiAweDgpCisJCXsKKworCSAvKioqKioqKioqKi8KKworCQkJLyogUmVhZCAxICovCisKKwkgLyoqKioqKioqKiovCisKKwkJCSpwd19WYWx1ZSA9ICgqcHdfVmFsdWUgPDwgMSkgfCAweDE7CisKKwkJfQorCisJCWVsc2UKKwkJeworCisJIC8qKioqKioqKioqLworCisJCQkvKiBSZWFkIDAgKi8KKworCSAvKioqKioqKioqKi8KKworCQkJKnB3X1ZhbHVlID0gKCpwd19WYWx1ZSA8PCAxKTsKKworCQl9CisKKwl9CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogQ2xlYXIgYWxsIEVFUFJPTSBiaXRzICovCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJZHdfUmVnaXN0ZXJWYWx1ZSA9IDB4MDsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLyogVG9nZ2xlIEVFUFJPTSdzIENoaXAgc2VsZWN0IHRvIGdldCBpdCBvdXQgb2YgU2hpZnQgUmVnaXN0ZXIgTW9kZSAqLworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlvdXRsKGR3X1JlZ2lzdGVyVmFsdWUsIGR3X0FkZHJlc3MpOworCisgICAvKioqKioqKioqKioqKioqLworCisJLyogV2FpdCAwLjEgbXMgKi8KKworICAgLyoqKioqKioqKioqKioqKi8KKworCXVkZWxheSgxMDApOworCit9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qICAgICAgRUVQUk9NIEhFQURFUiBSRUFEIEZVTkNUSU9OUyAgICAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICA6IElOVCBpX0VlcHJvbVJlYWRNYWluSGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsICB8Cit8CQkJCWNoYXIgKglwY19QQ0lDaGlwSW5mb3JtYXRpb24sc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBmcm9tIGVlcHJvbSBNYWluIEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgOiBQQ0kgZWVwcm9tIGFkZHJlc3MgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJICAgICAgY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uICA6IFBDSSBDaGlwIFR5cGUuICAgICAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkJICBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkgICA6IGNvbWVkaSBkZXZpY2Ugc3RydWN0dXJlIHwKK3wJCQkJCQkJCQkJCSBwb2ludGVyCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMAkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfRWVwcm9tUmVhZE1haW5IZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCit7CisJV09SRCB3X1RlbXAsIGksIHdfQ291bnQgPSAwOworCVVJTlQgdWlfVGVtcDsKKwlzdHJfTWFpbkhlYWRlciBzX01haW5IZWFkZXI7CisJc3RyX0RpZ2l0YWxJbnB1dEhlYWRlciBzX0RpZ2l0YWxJbnB1dEhlYWRlcjsKKwlzdHJfRGlnaXRhbE91dHB1dEhlYWRlciBzX0RpZ2l0YWxPdXRwdXRIZWFkZXI7CisJLy9zdHJfVGltZXJNYWluSGVhZGVyICAgICBzX1RpbWVyTWFpbkhlYWRlcixzX1dhdGNoZG9nTWFpbkhlYWRlcjsKKwlzdHJfQW5hbG9nT3V0cHV0SGVhZGVyIHNfQW5hbG9nT3V0cHV0SGVhZGVyOworCXN0cl9BbmFsb2dJbnB1dEhlYWRlciBzX0FuYWxvZ0lucHV0SGVhZGVyOworCisJLy8gUmVhZCBzaXplCisJc19NYWluSGVhZGVyLndfSGVhZGVyU2l6ZSA9CisJCXdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJMHgxMDAgKyA4KTsKKworCS8vIFJlYWQgbmJyIG9mIGZ1bmN0aW9uYWxpdHkKKwl3X1RlbXAgPSB3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sIDB4MTAwICsgMTApOworCXNfTWFpbkhlYWRlci5iX05mdW5jdGlvbnMgPSAoQllURSkgd19UZW1wICYgMHgwMEZGOworCisJLy8gUmVhZCBmdW5jdGlvbmFsaXR5IGRldGFpbHMKKwlmb3IgKGkgPSAwOyBpIDwgc19NYWluSGVhZGVyLmJfTmZ1bmN0aW9uczsgaSsrKSB7CisJCS8vIFJlYWQgVHlwZQorCQl3X1RlbXAgPSB3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIDEyICsgd19Db3VudCk7CisJCXNfTWFpbkhlYWRlci5zX0Z1bmN0aW9uc1tpXS5iX1R5cGUgPSAoQllURSkgd19UZW1wICYgMHgzRjsKKwkJd19Db3VudCA9IHdfQ291bnQgKyAyOworCQkvL1JlYWQgQWRkcmVzcworCQlzX01haW5IZWFkZXIuc19GdW5jdGlvbnNbaV0ud19BZGRyZXNzID0KKwkJCXdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sIDB4MTAwICsgMTIgKyB3X0NvdW50KTsKKwkJd19Db3VudCA9IHdfQ291bnQgKyAyOworCX0KKworCS8vIERpc3BsYXkgbWFpbiBoZWFkZXIgaW5mbworCWZvciAoaSA9IDA7IGkgPCBzX01haW5IZWFkZXIuYl9OZnVuY3Rpb25zOyBpKyspIHsKKworCQlzd2l0Y2ggKHNfTWFpbkhlYWRlci5zX0Z1bmN0aW9uc1tpXS5iX1R5cGUpIHsKKwkJY2FzZSBFRVBST01fRElHSVRBTElOUFVUOgorCQkJaV9FZXByb21SZWFkRGlnaXRhbElucHV0SGVhZGVyKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJCQlzX01haW5IZWFkZXIuc19GdW5jdGlvbnNbaV0ud19BZGRyZXNzLAorCQkJCSZzX0RpZ2l0YWxJbnB1dEhlYWRlcik7CisJCQl0aGlzX2JvYXJkLT5pX05ickRpQ2hhbm5lbCA9CisJCQkJc19EaWdpdGFsSW5wdXRIZWFkZXIud19OY2hhbm5lbDsKKwkJCWJyZWFrOworCisJCWNhc2UgRUVQUk9NX0RJR0lUQUxPVVRQVVQ6CisJCQlpX0VlcHJvbVJlYWREaWdpdGFsT3V0cHV0SGVhZGVyKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJCQlzX01haW5IZWFkZXIuc19GdW5jdGlvbnNbaV0ud19BZGRyZXNzLAorCQkJCSZzX0RpZ2l0YWxPdXRwdXRIZWFkZXIpOworCQkJdGhpc19ib2FyZC0+aV9OYnJEb0NoYW5uZWwgPQorCQkJCXNfRGlnaXRhbE91dHB1dEhlYWRlci53X05jaGFubmVsOworCQkJdWlfVGVtcCA9IDB4ZmZmZmZmZmY7CisJCQl0aGlzX2JvYXJkLT5pX0RvTWF4ZGF0YSA9CisJCQkJdWlfVGVtcCA+PiAoMzIgLSB0aGlzX2JvYXJkLT5pX05ickRvQ2hhbm5lbCk7CisJCQlicmVhazsKKworCQljYXNlIEVFUFJPTV9BTkFMT0dJTlBVVDoKKwkJCWlfRWVwcm9tUmVhZEFubG9nSW5wdXRIZWFkZXIod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCQkJCXNfTWFpbkhlYWRlci5zX0Z1bmN0aW9uc1tpXS53X0FkZHJlc3MsCisJCQkJJnNfQW5hbG9nSW5wdXRIZWFkZXIpOworCQkJaWYgKCEoc3RyY21wKHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUsICJhcGNpMzIwMCIpKSkKKwkJCQl0aGlzX2JvYXJkLT5pX05ickFpQ2hhbm5lbCA9CisJCQkJCXNfQW5hbG9nSW5wdXRIZWFkZXIud19OY2hhbm5lbCAqIDQ7CisJCQllbHNlCisJCQkJdGhpc19ib2FyZC0+aV9OYnJBaUNoYW5uZWwgPQorCQkJCQlzX0FuYWxvZ0lucHV0SGVhZGVyLndfTmNoYW5uZWw7CisJCQl0aGlzX2JvYXJkLT5pX0RtYSA9IHNfQW5hbG9nSW5wdXRIZWFkZXIuYl9IYXNEbWE7CisJCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOcyA9CisJCQkJKFVJTlQpIHNfQW5hbG9nSW5wdXRIZWFkZXIud19NaW5Db252ZXJ0VGltaW5nICoKKwkJCQkxMDAwOworCQkJdGhpc19ib2FyZC0+dWlfTWluRGVsYXl0aW1lTnMgPQorCQkJCShVSU5UKSBzX0FuYWxvZ0lucHV0SGVhZGVyLndfTWluRGVsYXlUaW1pbmcgKgorCQkJCTEwMDA7CisJCQl1aV9UZW1wID0gMHhmZmZmOworCQkJdGhpc19ib2FyZC0+aV9BaU1heGRhdGEgPQorCQkJCXVpX1RlbXAgPj4gKDE2IC0KKwkJCQlzX0FuYWxvZ0lucHV0SGVhZGVyLmJfUmVzb2x1dGlvbik7CisJCQlicmVhazsKKworCQljYXNlIEVFUFJPTV9BTkFMT0dPVVRQVVQ6CisJCQlpX0VlcHJvbVJlYWRBbmxvZ091dHB1dEhlYWRlcih3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCQkJc19NYWluSGVhZGVyLnNfRnVuY3Rpb25zW2ldLndfQWRkcmVzcywKKwkJCQkmc19BbmFsb2dPdXRwdXRIZWFkZXIpOworCQkJdGhpc19ib2FyZC0+aV9OYnJBb0NoYW5uZWwgPQorCQkJCXNfQW5hbG9nT3V0cHV0SGVhZGVyLndfTmNoYW5uZWw7CisJCQl1aV9UZW1wID0gMHhmZmZmOworCQkJdGhpc19ib2FyZC0+aV9Bb01heGRhdGEgPQorCQkJCXVpX1RlbXAgPj4gKDE2IC0KKwkJCQlzX0FuYWxvZ091dHB1dEhlYWRlci5iX1Jlc29sdXRpb24pOworCQkJYnJlYWs7CisKKwkJY2FzZSBFRVBST01fVElNRVI6CisJCQl0aGlzX2JvYXJkLT5pX1RpbWVyID0gMTsJLy9UaW1lciBzdWJkZXZpY2UgcHJlc2VudAorCQkJYnJlYWs7CisKKwkJY2FzZSBFRVBST01fV0FUQ0hET0c6CisJCQl0aGlzX2JvYXJkLT5pX1RpbWVyID0gMTsJLy9UaW1lciBzdWJkZXZpY2UgcHJlc2VudAorCQkJYnJlYWs7CisKKwkJY2FzZSBFRVBST01fVElNRVJfV0FUQ0hET0dfQ09VTlRFUjoKKwkJCXRoaXNfYm9hcmQtPmlfVGltZXIgPSAxOwkvL1RpbWVyIHN1YmRldmljZSBwcmVzZW50CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICA6IElOVCBpX0VlcHJvbVJlYWREaWdpdGFsSW5wdXRIZWFkZXIoV09SRCAJCQkJCSB8Cit8CQkJd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLAkgfAorfAkJCVdPUkQgd19BZGRyZXNzLHN0cl9EaWdpdGFsSW5wdXRIZWFkZXIgKnNfSGVhZGVyKQkJIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIERpZ2l0YWwgSW5wdXQgSGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyA6IFBDSSBlZXByb20gYWRkcmVzcyAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkgICAgICBjaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24gIDogUENJIENoaXAgVHlwZS4gICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCQkgc3RyX0RpZ2l0YWxJbnB1dEhlYWRlciAqc19IZWFkZXI6IERpZ2l0YSBJbnB1dCBIZWFkZXIgICB8Cit8CQkJCQkJCQkJCQkJICAgUG9pbnRlcgkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMAkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0VlcHJvbVJlYWREaWdpdGFsSW5wdXRIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIFdPUkQgd19BZGRyZXNzLAorCXN0cl9EaWdpdGFsSW5wdXRIZWFkZXIgKiBzX0hlYWRlcikKK3sKKwlXT1JEIHdfVGVtcDsKKworCS8vIHJlYWQgbmJyIG9mIGNoYW5uZWxzCisJc19IZWFkZXItPndfTmNoYW5uZWwgPQorCQl3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCBwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCTB4MTAwICsgd19BZGRyZXNzICsgNik7CisKKwkvLyBpbnRlcnJ1cHRpYmxlIG9yIG5vdAorCXdfVGVtcCA9IHdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwgMHgxMDAgKyB3X0FkZHJlc3MgKyA4KTsKKwlzX0hlYWRlci0+Yl9JbnRlcnJ1cHRpYmxlID0gKEJZVEUpICh3X1RlbXAgPj4gNykgJiAweDAxOworCisvLyBIb3cgbWFueSBpbnRlcnJ1cHRpYmxlIGxvZ2ljCisJc19IZWFkZXItPndfTmludGVycnVwdExvZ2ljID0KKwkJd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCQkweDEwMCArIHdfQWRkcmVzcyArIDEwKTsKKworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgIDogSU5UIGlfRWVwcm9tUmVhZERpZ2l0YWxPdXRwdXRIZWFkZXIoV09SRCAJCQkJIHwKK3wJCQl3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyxjaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sCSB8Cit8CQkJV09SRCB3X0FkZHJlc3Msc3RyX0RpZ2l0YWxPdXRwdXRIZWFkZXIgKnNfSGVhZGVyKQkgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIERpZ2l0YWwgT3V0cHV0IEhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyA6IFBDSSBlZXByb20gYWRkcmVzcyAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkgICAgICBjaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24gIDogUENJIENoaXAgVHlwZS4gICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCQkgc3RyX0RpZ2l0YWxPdXRwdXRIZWFkZXIgKnNfSGVhZGVyOiBEaWdpdGFsIE91dHB1dCBIZWFkZXJ8Cit8CQkJCQkJCQkJCQkgICBQb2ludGVyCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMAkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0VlcHJvbVJlYWREaWdpdGFsT3V0cHV0SGVhZGVyKFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCBXT1JEIHdfQWRkcmVzcywKKwlzdHJfRGlnaXRhbE91dHB1dEhlYWRlciAqIHNfSGVhZGVyKQoreworLy8gUmVhZCBOYnIgY2hhbm5lbHMKKwlzX0hlYWRlci0+d19OY2hhbm5lbCA9CisJCXdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJMHgxMDAgKyB3X0FkZHJlc3MgKyA2KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICA6IElOVCBpX0VlcHJvbVJlYWRUaW1lckhlYWRlcihXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCB8Cit8CQkJY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLFdPUkQgd19BZGRyZXNzLAkJCQkgfAorfAkJCXN0cl9UaW1lck1haW5IZWFkZXIgKnNfSGVhZGVyKQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaW1lciBvciBXYXRjaGRvZyBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IFdPUkQgd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgOiBQQ0kgZWVwcm9tIGFkZHJlc3MgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJICAgICAgY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uICA6IFBDSSBDaGlwIFR5cGUuICAgICAgICAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8CQkJIHN0cl9UaW1lck1haW5IZWFkZXIgKnNfSGVhZGVyOiBUaW1lciBIZWFkZXIJCQkgfAorfAkJCQkJCQkJCQkJICAgUG9pbnRlcgkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDAJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9FZXByb21SZWFkVGltZXJIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIFdPUkQgd19BZGRyZXNzLAorCXN0cl9UaW1lck1haW5IZWFkZXIgKiBzX0hlYWRlcikKK3sKKworCVdPUkQgaSwgd19TaXplID0gMCwgd19UZW1wOworCisvL1JlYWQgTm8gb2YgVGltZXIKKwlzX0hlYWRlci0+d19OdGltZXIgPQorCQl3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCBwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCTB4MTAwICsgd19BZGRyZXNzICsgNik7CisvL1JlYWQgaGVhZGVyIHNpemUKKworCWZvciAoaSA9IDA7IGkgPCBzX0hlYWRlci0+d19OdGltZXI7IGkrKykgeworCQlzX0hlYWRlci0+c19UaW1lckRldGFpbHNbaV0ud19IZWFkZXJTaXplID0KKwkJCXdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sCisJCQkweDEwMCArIHdfQWRkcmVzcyArIDggKyB3X1NpemUgKyAwKTsKKwkJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJCXBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJCTB4MTAwICsgd19BZGRyZXNzICsgOCArIHdfU2l6ZSArIDIpOworCisJCS8vUmVhZCBSZXNvbHV0aW9uCisJCXNfSGVhZGVyLT5zX1RpbWVyRGV0YWlsc1tpXS5iX1Jlc29sdXRpb24gPQorCQkJKEJZVEUpICh3X1RlbXAgPj4gMTApICYgMHgzRjsKKworCQkvL1JlYWQgTW9kZQorCQlzX0hlYWRlci0+c19UaW1lckRldGFpbHNbaV0uYl9Nb2RlID0KKwkJCShCWVRFKSAod19UZW1wID4+IDQpICYgMHgzRjsKKworCQl3X1RlbXAgPSB3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCQkJMHgxMDAgKyB3X0FkZHJlc3MgKyA4ICsgd19TaXplICsgNCk7CisKKwkJLy9SZWFkIE1pblRpbWluZworCQlzX0hlYWRlci0+c19UaW1lckRldGFpbHNbaV0ud19NaW5UaW1pbmcgPSAod19UZW1wID4+IDYpICYgMHgzRkY7CisKKwkJLy9SZWFkIFRpbWViYXNlCisJCXNfSGVhZGVyLT5zX1RpbWVyRGV0YWlsc1tpXS5iX1RpbWVCYXNlID0gKEJZVEUpICh3X1RlbXApICYgMHgzRjsKKwkJd19TaXplICs9IHNfSGVhZGVyLT5zX1RpbWVyRGV0YWlsc1tpXS53X0hlYWRlclNpemU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gTmFtZSAgOiBJTlQgaV9FZXByb21SZWFkQW5sb2dPdXRwdXRIZWFkZXIoV09SRCAJCQkJCSB8Cit8CQkJd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLAkgfAorfAkJCVdPUkQgd19BZGRyZXNzLHN0cl9BbmFsb2dPdXRwdXRIZWFkZXIgKnNfSGVhZGVyKSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgTmFsb2cgT3V0cHV0ICBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogUENJIGVlcHJvbSBhZGRyZXNzICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCSAgICAgIGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiAgOiBQQ0kgQ2hpcCBUeXBlLiAgICAgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJCSBzdHJfQW5hbG9nT3V0cHV0SGVhZGVyICpzX0hlYWRlcjpBbmxvZyBPdXRwdXQgSGVhZGVyICAgIHwKK3wJCQkJCQkJCQkJCSAgIFBvaW50ZXIJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9FZXByb21SZWFkQW5sb2dPdXRwdXRIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIFdPUkQgd19BZGRyZXNzLAorCXN0cl9BbmFsb2dPdXRwdXRIZWFkZXIgKiBzX0hlYWRlcikKK3sKKwlXT1JEIHdfVGVtcDsKKwkvLyBObyBvZiBjaGFubmVscyBmb3IgMXN0IGhhcmQgY29tcG9uZW50CisJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIHdfQWRkcmVzcyArIDEwKTsKKwlzX0hlYWRlci0+d19OY2hhbm5lbCA9ICh3X1RlbXAgPj4gNCkgJiAweDAzRkY7CisJLy8gUmVzb2x1dGlvbiBmb3IgMXN0IGhhcmQgY29tcG9uZW50CisJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIHdfQWRkcmVzcyArIDE2KTsKKwlzX0hlYWRlci0+Yl9SZXNvbHV0aW9uID0gKEJZVEUpICh3X1RlbXAgPj4gOCkgJiAweEZGOworCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgIDogSU5UIGlfRWVwcm9tUmVhZEFubG9nSW5wdXRIZWFkZXIoV09SRCAJCQkJCSB8Cit8CQkJd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsY2hhciAqcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAgICAgfAorfAkJCVdPUkQgd19BZGRyZXNzLHN0cl9BbmFsb2dJbnB1dEhlYWRlciAqc19IZWFkZXIpICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgTmFsb2cgT3V0cHV0ICBIZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBXT1JEIHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogUENJIGVlcHJvbSBhZGRyZXNzICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKK3wJCSAgICAgIGNoYXIgKnBjX1BDSUNoaXBJbmZvcm1hdGlvbiAgOiBQQ0kgQ2hpcCBUeXBlLiAgICAgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorfAkJCSBzdHJfQW5hbG9nSW5wdXRIZWFkZXIgKnNfSGVhZGVyOkFubG9nIElucHV0IEhlYWRlciAgICAgIHwKK3wJCQkJCQkJCQkJCSAgIFBvaW50ZXIJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvLyBSZWFkcyBvbmx5IGZvciBPTkUgIGhhcmR3YXJlIGNvbXBvbmVudAorSU5UIGlfRWVwcm9tUmVhZEFubG9nSW5wdXRIZWFkZXIoV09SRCB3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwljaGFyICpwY19QQ0lDaGlwSW5mb3JtYXRpb24sIFdPUkQgd19BZGRyZXNzLAorCXN0cl9BbmFsb2dJbnB1dEhlYWRlciAqIHNfSGVhZGVyKQoreworCVdPUkQgd19UZW1wLCB3X09mZnNldDsKKwl3X1RlbXAgPSB3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCQlwY19QQ0lDaGlwSW5mb3JtYXRpb24sIDB4MTAwICsgd19BZGRyZXNzICsgMTApOworCXNfSGVhZGVyLT53X05jaGFubmVsID0gKHdfVGVtcCA+PiA0KSAmIDB4MDNGRjsKKwlzX0hlYWRlci0+d19NaW5Db252ZXJ0VGltaW5nID0KKwkJd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgcGNfUENJQ2hpcEluZm9ybWF0aW9uLAorCQkweDEwMCArIHdfQWRkcmVzcyArIDE2KTsKKwlzX0hlYWRlci0+d19NaW5EZWxheVRpbWluZyA9CisJCXdfRWVwcm9tUmVhZFdvcmQod19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHBjX1BDSUNoaXBJbmZvcm1hdGlvbiwKKwkJMHgxMDAgKyB3X0FkZHJlc3MgKyAzMCk7CisJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIHdfQWRkcmVzcyArIDIwKTsKKwlzX0hlYWRlci0+Yl9IYXNEbWEgPSAod19UZW1wID4+IDEzKSAmIDB4MDE7CS8vIHdoZXRoZXIgZG1hIHByZXNlbnQgb3Igbm90CisKKwl3X1RlbXAgPSB3X0VlcHJvbVJlYWRXb3JkKHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCBwY19QQ0lDaGlwSW5mb3JtYXRpb24sIDB4MTAwICsgd19BZGRyZXNzICsgNzIpOwkvLyByZWFkaW5nIFkKKwl3X1RlbXAgPSB3X1RlbXAgJiAweDAwRkY7CisJaWYgKHdfVGVtcCkJCS8vWT4wCisJeworCQl3X09mZnNldCA9IDc0ICsgKDIgKiB3X1RlbXApICsgKDEwICogKDEgKyAod19UZW1wIC8gMTYpKSk7CS8vIG9mZnNldCBvZiBmaXJzdCBhbmFsb2cgaW5wdXQgc2luZ2xlIGhlYWRlcgorCQl3X09mZnNldCA9IHdfT2Zmc2V0ICsgMjsJLy8gcmVzb2x1dGlvbgorCX0gZWxzZQkJCS8vWT0wCisJeworCQl3X09mZnNldCA9IDc0OworCQl3X09mZnNldCA9IHdfT2Zmc2V0ICsgMjsJLy8gcmVzb2x1dGlvbgorCX0KKworLy8gcmVhZCBSZXNvbHV0aW9uCisJd19UZW1wID0gd19FZXByb21SZWFkV29yZCh3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJcGNfUENJQ2hpcEluZm9ybWF0aW9uLCAweDEwMCArIHdfQWRkcmVzcyArIHdfT2Zmc2V0KTsKKwlzX0hlYWRlci0+Yl9SZXNvbHV0aW9uID0gd19UZW1wICYgMHgwMDFGOwkvLyBsYXN0IDUgYml0cworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FtY2NfczU5MzNfNTguaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYW1jY19zNTkzM181OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxN2RjMDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FtY2NfczU5MzNfNTguaApAQCAtMCwwICsxLDQ1NyBAQAorLyoKKwlNb2RpZmllZCBieSB1bWVzaCBvbiAxNnRoIG1heSAyMDAxCisJTW9kaWZpZWQgYnkgc2FyYXRoIG9uIDIybmQgbWF5IDIwMDEKKyovCisKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvYW1jY19zNTkzM192XzU4LmgKKworICAgIFN0dWZmIGZvciBBTUNDIFM1OTMzIFBDSSBDb250cm9sbGVyCisKKyAgICBBdXRob3I6IE1pY2hhbCBEb2JlcyA8bWFqa2xAdGVzbmV0LmN6PgorCisgICAgSW5zcGlyYXRlZCBmcm9tIGdlbmVyYWwtcHVycG9zZSBBTUNDIFM1OTMzIFBDSSBNYXRjaG1ha2VyIGRyaXZlcgorICAgIG1hZGUgYnkgQW5kcmVhIENpc3Rlcm5pbm8gIDxhY2lzdGVyQHBjYXBlMS5waS5pbmZuLml0PgorICAgIGFuZCBhcyByZXN1bHQgb2YgZXNwaW9uYWdlIGZyb20gTUlURSBjb2RlIG1hZGUgYnkgRGF2aWQgQS4gU2NobGVlZi4KKyAgICBUaGFua3MgdG8gQU1DQyBmb3IgdGhlaXIgb24tbGluZSBkb2N1bWVudGF0aW9uIGFuZCBidXMgbWFzdGVyIERNQQorICAgIGV4YW1wbGUuCisqLworCisjaWZuZGVmIF9BTUNDX1M1OTMzX0hfCisjZGVmaW5lIF9BTUNDX1M1OTMzX0hfCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICIuLi8uLi9jb21lZGlkZXYuaCIKKworI2lmZGVmIFBDSV9TVVBQT1JUX1ZFUjEKKyNlcnJvciAgICBTb3JyeSwgbm8gc3VwcG9ydCBmb3IgMi4xLjU1IGFuZCBvbGRlciEgOi0oKCgoCisjZW5kaWYKKworLyoqKioqKioqKioqQWRkZWQgYnkgc2FyYXRoIGZvciBjb21wYXRpYmlsaXR5IHdpdGggQVBDSTMxMjAKKworKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBGSUZPX0FEVkFOQ0VfT05fQllURV8yICAgICAweDIwMDAwMDAwCS8vIHdyaXR0ZW4gb24gYmFzZTAKKworI2RlZmluZSBBTVdFTl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAweDAyCS8vIGFkZGVkIGZvciBzdGVwIDYgZG1hIHdyaXR0ZW4gb24gYmFzZTIKKyNkZWZpbmUgQTJQX0ZJRk9fV1JJVEVfRU5BQkxFICAgICAgICAgICAgMHgwMQorCisjZGVmaW5lIEFHQ1NUU19UQ19FTkFCTEUJCSAgIDB4MTAwMDAwMDAJLy8gQWRkZWQgZm9yIHRyYW5zZmVyIGNvdW50IGVuYWJsZSBiaXQKKworLy8gIEFERE9OIFJFTEFURUQgQURESVRJT05TCisvLyBDb25zdGFudAorI2RlZmluZSAgICAgQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9MT1cgICAgICAgMHgwMAorI2RlZmluZSAgICAgQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9ISUdIICAgICAgMHgxMjAwCisjZGVmaW5lICAgICBBUENJMzEyMF9BMlBfRklGT19NQU5BR0VNRU5UICAgICAgICAgICAgICAweDA0MDAwNDAwTAorI2RlZmluZSAgICAgQVBDSTMxMjBfQU1XRU5fRU5BQkxFICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSAgICAgQVBDSTMxMjBfQTJQX0ZJRk9fV1JJVEVfRU5BQkxFICAgICAgICAgICAgMHgwMQorI2RlZmluZSAgICAgQVBDSTMxMjBfRklGT19BRFZBTkNFX09OX0JZVEVfMiAgICAgICAgICAgMHgyMDAwMDAwMEwKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0VOQUJMRV9XUklURV9UQ19JTlQgICAgICAgICAgICAgIDB4MDAwMDQwMDBMCisjZGVmaW5lICAgICBBUENJMzEyMF9DTEVBUl9XUklURV9UQ19JTlQgICAgICAgICAgICAgICAweDAwMDQwMDAwTAorI2RlZmluZSAgICAgQVBDSTMxMjBfRElTQUJMRV9BTVdFTl9BTkRfQTJQX0ZJRk9fV1JJVEUgMHgwCisjZGVmaW5lICAgICBBUENJMzEyMF9ESVNBQkxFX0JVU19NQVNURVJfQUREX09OICAgICAgICAweDAKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0RJU0FCTEVfQlVTX01BU1RFUl9QQ0kgICAgICAgICAgIDB4MAorCisgLy8gQUREX09OIDo6OiB0aGlzIG5lZWRlZCBzaW5jZSBhcGNpIHN1cHBvcnRzIDE2IGJpdCBpbnRlcmZhY2UgdG8gYWRkIG9uCisjZGVmaW5lICAgICBBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVyAgICAgICAweDNDCisjZGVmaW5lICAgICBBUENJMzEyMF9BRERfT05fQUdDU1RTX0hJR0ggICAgICBBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVyArIDIKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVyAgICAgICAgIDB4MjQKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0FERF9PTl9NV0FSX0hJR0ggICAgICAgIEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVyArIDIKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0FERF9PTl9NV1RDX0xPVyAgICAgICAgIDB4MDU4CisjZGVmaW5lICAgICBBUENJMzEyMF9BRERfT05fTVdUQ19ISUdIICAgICAgICBBUENJMzEyMF9BRERfT05fTVdUQ19MT1cgKyAyCisKKy8vIEFNQ0MKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0FNQ0NfT1BfTUNTUiAgICAgICAgICAgIDB4M0MKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0FNQ0NfT1BfUkVHX0lOVENTUiAgICAgIDB4MzgKKworLyoqKioqKipmcm9tIGhlcmUgYWxsIHVwd2FyZCBkZWZpbml0aW9ucyBhcmUgYWRkZWQgYnkgc2FyYXRoICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyBPcGVyYXRpb24gUmVnaXN0ZXIgT2Zmc2V0cyAtIFBDSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBTUNDX09QX1JFR19PTUIxICAgICAgICAgMHgwMAorI2RlZmluZSBBTUNDX09QX1JFR19PTUIyICAgICAgICAgMHgwNAorI2RlZmluZSBBTUNDX09QX1JFR19PTUIzICAgICAgICAgMHgwOAorI2RlZmluZSBBTUNDX09QX1JFR19PTUI0ICAgICAgICAgMHgwYworI2RlZmluZSBBTUNDX09QX1JFR19JTUIxICAgICAgICAgMHgxMAorI2RlZmluZSBBTUNDX09QX1JFR19JTUIyICAgICAgICAgMHgxNAorI2RlZmluZSBBTUNDX09QX1JFR19JTUIzICAgICAgICAgMHgxOAorI2RlZmluZSBBTUNDX09QX1JFR19JTUI0ICAgICAgICAgMHgxYworI2RlZmluZSBBTUNDX09QX1JFR19GSUZPICAgICAgICAgMHgyMAorI2RlZmluZSBBTUNDX09QX1JFR19NV0FSICAgICAgICAgMHgyNAorI2RlZmluZSBBTUNDX09QX1JFR19NV1RDICAgICAgICAgMHgyOAorI2RlZmluZSBBTUNDX09QX1JFR19NUkFSICAgICAgICAgMHgyYworI2RlZmluZSBBTUNDX09QX1JFR19NUlRDICAgICAgICAgMHgzMAorI2RlZmluZSBBTUNDX09QX1JFR19NQkVGICAgICAgICAgMHgzNAorI2RlZmluZSBBTUNDX09QX1JFR19JTlRDU1IgICAgICAgMHgzOAorI2RlZmluZSAgQU1DQ19PUF9SRUdfSU5UQ1NSX1NSQyAgKEFNQ0NfT1BfUkVHX0lOVENTUiArIDIpCS8qIElOVCBzb3VyY2UgKi8KKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX0lOVENTUl9GRUMgIChBTUNDX09QX1JFR19JTlRDU1IgKyAzKQkvKiBGSUZPIGN0cmwgKi8KKyNkZWZpbmUgQU1DQ19PUF9SRUdfTUNTUiAgICAgICAgIDB4M2MKKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX01DU1JfTlZEQVRBIChBTUNDX09QX1JFR19NQ1NSICsgMikJLyogRGF0YSBpbiBieXRlIDIgKi8KKyNkZWZpbmUgIEFNQ0NfT1BfUkVHX01DU1JfTlZDTUQgIChBTUNDX09QX1JFR19NQ1NSICsgMykJLyogQ29tbWFuZCBpbiBieXRlIDMgKi8KKworI2RlZmluZSBBTUNDX0ZJRk9fREVQVEhfRFdPUkQJOAorI2RlZmluZSBBTUNDX0ZJRk9fREVQVEhfQllURVMJKDggKiBzaXplb2YgKHUzMikpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyBPcGVyYXRpb24gUmVnaXN0ZXJzIFNpemUgLSBQQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBTUNDX09QX1JFR19TSVpFCSA2NAkvKiBpbiBieXRlcyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFNQ0MgT3BlcmF0aW9uIFJlZ2lzdGVyIE9mZnNldHMgLSBBZGQtb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjEgICAgICAgICAweDAwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FJTUIyICAgICAgICAgMHgwNAorI2RlZmluZSBBTUNDX09QX1JFR19BSU1CMyAgICAgICAgIDB4MDgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjQgICAgICAgICAweDBjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUIxICAgICAgICAgMHgxMAorI2RlZmluZSBBTUNDX09QX1JFR19BT01CMiAgICAgICAgIDB4MTQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU9NQjMgICAgICAgICAweDE4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUI0ICAgICAgICAgMHgxYworI2RlZmluZSBBTUNDX09QX1JFR19BRklGTyAgICAgICAgIDB4MjAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1XQVIgICAgICAgICAweDI0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FQVEEgICAgICAgICAgMHgyOAorI2RlZmluZSBBTUNDX09QX1JFR19BUFREICAgICAgICAgIDB4MmMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1SQVIgICAgICAgICAweDMwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNQkVGICAgICAgICAgMHgzNAorI2RlZmluZSBBTUNDX09QX1JFR19BSU5UICAgICAgICAgIDB4MzgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUdDU1RTICAgICAgICAweDNjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNV1RDICAgICAgICAgMHg1OAorI2RlZmluZSBBTUNDX09QX1JFR19BTVJUQyAgICAgICAgIDB4NWMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBTUNDIC0gQWRkLW9uIEdlbmVyYWwgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFHQ1NUU19DT05UUk9MX01BU0sJMHhmZmZmZjAwMAorI2RlZmluZSAgQUdDU1RTX05WX0FDQ19NQVNLCTB4ZTAwMDAwMDAKKyNkZWZpbmUgIEFHQ1NUU19SRVNFVF9NQVNLCTB4MGUwMDAwMDAKKyNkZWZpbmUgIEFHQ1NUU19OVl9EQV9NQVNLCTB4MDBmZjAwMDAKKyNkZWZpbmUgIEFHQ1NUU19CSVNUX01BU0sJMHgwMDAwZjAwMAorI2RlZmluZSBBR0NTVFNfU1RBVFVTX01BU0sJMHgwMDAwMDBmZgorI2RlZmluZSAgQUdDU1RTX1RDWkVST19NQVNLCTB4MDAwMDAwYzAKKyNkZWZpbmUgIEFHQ1NUU19GSUZPX1NUX01BU0sJMHgwMDAwMDAzZgorCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9NQkZMQUdTCTB4MDgwMDAwMDAKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX1AyQV9GSUZPCTB4MDQwMDAwMDAKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX0EyUF9GSUZPCTB4MDIwMDAwMDAKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX0ZJRk9TCShBR0NTVFNfUkVTRVRfQTJQX0ZJRk8gfCBBR0NTVFNfUkVTRVRfUDJBX0ZJRk8pCisKKyNkZWZpbmUgQUdDU1RTX0EyUF9UQ09VTlQJMHgwMDAwMDA4MAorI2RlZmluZSBBR0NTVFNfUDJBX1RDT1VOVAkweDAwMDAwMDQwCisKKyNkZWZpbmUgQUdDU1RTX0ZTX1AyQV9FTVBUWQkweDAwMDAwMDIwCisjZGVmaW5lIEFHQ1NUU19GU19QMkFfSEFMRgkweDAwMDAwMDEwCisjZGVmaW5lIEFHQ1NUU19GU19QMkFfRlVMTAkweDAwMDAwMDA4CisKKyNkZWZpbmUgQUdDU1RTX0ZTX0EyUF9FTVBUWQkweDAwMDAwMDA0CisjZGVmaW5lIEFHQ1NUU19GU19BMlBfSEFMRgkweDAwMDAwMDAyCisjZGVmaW5lIEFHQ1NUU19GU19BMlBfRlVMTAkweDAwMDAwMDAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyAtIEFkZC1vbiBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFJTlRfSU5UX01BU0sJCTB4MDBmZjAwMDAKKyNkZWZpbmUgQUlOVF9TRUxfTUFTSwkJMHgwMDAwZmZmZgorI2RlZmluZSAgQUlOVF9JU19FTlNFTF9NQVNLCTB4MDAwMDFmMWYKKworI2RlZmluZSBBSU5UX0lOVF9BU1NFUlRFRAkweDAwODAwMDAwCisjZGVmaW5lIEFJTlRfQk1fRVJST1IJCTB4MDAyMDAwMDAKKyNkZWZpbmUgQUlOVF9CSVNUX0lOVAkJMHgwMDEwMDAwMAorCisjZGVmaW5lIEFJTlRfUlRfQ09NUExFVEUJMHgwMDA4MDAwMAorI2RlZmluZSBBSU5UX1dUX0NPTVBMRVRFCTB4MDAwNDAwMDAKKworI2RlZmluZSBBSU5UX09VVF9NQl9JTlQJCTB4MDAwMjAwMDAKKyNkZWZpbmUgQUlOVF9JTl9NQl9JTlQJCTB4MDAwMTAwMDAKKworI2RlZmluZSBBSU5UX1JFQURfQ09NUEwJCTB4MDAwMDgwMDAKKyNkZWZpbmUgQUlOVF9XUklURV9DT01QTAkweDAwMDA0MDAwCisKKyNkZWZpbmUgQUlOVF9PTUJfRU5BQkxFIAkweDAwMDAxMDAwCisjZGVmaW5lIEFJTlRfT01CX1NFTEVDVCAJMHgwMDAwMGMwMAorI2RlZmluZSBBSU5UX09NQl9CWVRFCQkweDAwMDAwMzAwCisKKyNkZWZpbmUgQUlOVF9JTUJfRU5BQkxFIAkweDAwMDAwMDEwCisjZGVmaW5lIEFJTlRfSU1CX1NFTEVDVCAJMHgwMDAwMDAwYworI2RlZmluZSBBSU5UX0lNQl9CWVRFCQkweDAwMDAwMDAzCisKKy8qIEVuYWJsZSBCdXMgTWFzdGVyaW5nICovCisjZGVmaW5lIEVOX0EyUF9UUkFOU0ZFUlMJMHgwMDAwMDQwMAorLyogRklGTyBGbGFnIFJlc2V0ICovCisjZGVmaW5lIFJFU0VUX0EyUF9GTEFHUwkJMHgwNDAwMDAwMEwKKy8qIEZJRk8gUmVsYXRpdmUgUHJpb3JpdHkgKi8KKyNkZWZpbmUgQTJQX0hJX1BSSU9SSVRZCQkweDAwMDAwMTAwTAorLyogSWRlbnRpZnkgSW50ZXJydXB0IFNvdXJjZXMgKi8KKyNkZWZpbmUgQU5ZX1M1OTNYX0lOVAkJMHgwMDgwMDAwMEwKKyNkZWZpbmUgUkVBRF9UQ19JTlQJCTB4MDAwODAwMDBMCisjZGVmaW5lIFdSSVRFX1RDX0lOVAkJMHgwMDA0MDAwMEwKKyNkZWZpbmUgSU5fTUJfSU5UCQkweDAwMDIwMDAwTAorI2RlZmluZSBNQVNURVJfQUJPUlRfSU5UCTB4MDAxMDAwMDBMCisjZGVmaW5lIFRBUkdFVF9BQk9SVF9JTlQJMHgwMDIwMDAwMEwKKyNkZWZpbmUgQlVTX01BU1RFUl9JTlQJCTB4MDAyMDAwMDBMCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgcGNpbHN0X3N0cnVjdCB7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKm5leHQ7CisJaW50IHVzZWQ7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwl1bnNpZ25lZCBzaG9ydCB2ZW5kb3I7CisJdW5zaWduZWQgc2hvcnQgZGV2aWNlOworCXVuc2lnbmVkIGludCBtYXN0ZXI7CisJdW5zaWduZWQgY2hhciBwY2lfYnVzOworCXVuc2lnbmVkIGNoYXIgcGNpX3Nsb3Q7CisJdW5zaWduZWQgY2hhciBwY2lfZnVuYzsKKwl1bnNpZ25lZCBpbnQgaW9fYWRkcls1XTsKKwl1bnNpZ25lZCBpbnQgaXJxOworfTsKKworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2NfZGV2aWNlczsJLy8gcHRyIHRvIHJvb3QgbGlzdCBvZiBhbGwgYW1jYyBkZXZpY2VzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHZfcGNpX2NhcmRfbGlzdF9pbml0KHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IsIGNoYXIgZGlzcGxheSk7Cit2b2lkIHZfcGNpX2NhcmRfbGlzdF9jbGVhbnVwKHVuc2lnbmVkIHNob3J0IHBjaV92ZW5kb3IpOworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKnB0cl9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfZGV2aWNlKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkJCSAgICAgICB1bnNpZ25lZCBzaG9ydAorCQkJCQkJICAgICAgIGRldmljZV9pZCk7CitpbnQgaV9maW5kX2ZyZWVfcGNpX2NhcmRfYnlfcG9zaXRpb24odW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkLAorCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgcGNpX2J1cywKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHBjaV9zbG90LAorCQkJCSAgICAgc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKipjYXJkKTsKK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICpwdHJfc2VsZWN0X2FuZF9hbGxvY19wY2lfY2FyZCh1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfaWQsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkLAorCQkJCQkJICAgIHVuc2lnbmVkIHNob3J0IHBjaV9idXMsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgcGNpX3Nsb3QpOworCitpbnQgaV9wY2lfY2FyZF9hbGxvYyhzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYyk7CitpbnQgaV9wY2lfY2FyZF9mcmVlKHN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjKTsKK3ZvaWQgdl9wY2lfY2FyZF9saXN0X2Rpc3BsYXkodm9pZCk7CitpbnQgaV9wY2lfY2FyZF9kYXRhKHN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLAorCQkgICAgdW5zaWduZWQgY2hhciAqcGNpX2J1cywgdW5zaWduZWQgY2hhciAqcGNpX3Nsb3QsCisJCSAgICB1bnNpZ25lZCBjaGFyICpwY2lfZnVuYywgdW5zaWduZWQgc2hvcnQgKmlvX2FkZHIsCisJCSAgICB1bnNpZ25lZCBzaG9ydCAqaXJxLCB1bnNpZ25lZCBzaG9ydCAqbWFzdGVyKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGJ1aWxkIGxpc3Qgb2YgYW1jYyBjYXJkcyBpbiB0aGlzIHN5c3RlbSAqLwordm9pZCB2X3BjaV9jYXJkX2xpc3RfaW5pdCh1bnNpZ25lZCBzaG9ydCBwY2lfdmVuZG9yLCBjaGFyIGRpc3BsYXkpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywgKmxhc3Q7CisJaW50IGk7CisKKwlhbWNjX2RldmljZXMgPSBOVUxMOworCWxhc3QgPSBOVUxMOworCisJcGNpX2Zvcl9lYWNoX2RldihwY2lkZXYpIHsKKwkJaWYgKHBjaWRldi0+dmVuZG9yID09IHBjaV92ZW5kb3IpIHsKKwkJCWFtY2MgPSBrbWFsbG9jKHNpemVvZigqYW1jYyksIEdGUF9LRVJORUwpOworCQkJbWVtc2V0KGFtY2MsIDAsIHNpemVvZigqYW1jYykpOworCisJCQlhbWNjLT5wY2lkZXYgPSBwY2lkZXY7CisJCQlpZiAobGFzdCkgeworCQkJCWxhc3QtPm5leHQgPSBhbWNjOworCQkJfSBlbHNlIHsKKwkJCQlhbWNjX2RldmljZXMgPSBhbWNjOworCQkJfQorCQkJbGFzdCA9IGFtY2M7CisKKwkJCWFtY2MtPnZlbmRvciA9IHBjaWRldi0+dmVuZG9yOworCQkJYW1jYy0+ZGV2aWNlID0gcGNpZGV2LT5kZXZpY2U7CisjaWYgMAorCQkJYW1jYy0+bWFzdGVyID0gcGNpZGV2LT5tYXN0ZXI7CS8vIGhvdyBnZXQgdGhpcyBpbmZvcm1hdGlvbiB1bmRlciAyLjQga2VybmVscz8KKyNlbmRpZgorCQkJYW1jYy0+cGNpX2J1cyA9IHBjaWRldi0+YnVzLT5udW1iZXI7CisJCQlhbWNjLT5wY2lfc2xvdCA9IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pOworCQkJYW1jYy0+cGNpX2Z1bmMgPSBQQ0lfRlVOQyhwY2lkZXYtPmRldmZuKTsKKwkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCQkJYW1jYy0+aW9fYWRkcltpXSA9CisJCQkJICAgIHBjaWRldi0+cmVzb3VyY2VbaV0uc3RhcnQgJiB+M1VMOworCQkJYW1jYy0+aXJxID0gcGNpZGV2LT5pcnE7CisJCX0KKwl9CisKKwlpZiAoZGlzcGxheSkKKwkJdl9wY2lfY2FyZF9saXN0X2Rpc3BsYXkoKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBmcmVlIHVwIGxpc3Qgb2YgYW1jYyBjYXJkcyBpbiB0aGlzIHN5c3RlbSAqLwordm9pZCB2X3BjaV9jYXJkX2xpc3RfY2xlYW51cCh1bnNpZ25lZCBzaG9ydCBwY2lfdmVuZG9yKQoreworCXN0cnVjdCBwY2lsc3Rfc3RydWN0ICphbWNjLCAqbmV4dDsKKworCWZvciAoYW1jYyA9IGFtY2NfZGV2aWNlczsgYW1jYzsgYW1jYyA9IG5leHQpIHsKKwkJbmV4dCA9IGFtY2MtPm5leHQ7CisJCWtmcmVlKGFtY2MpOworCX0KKworCWFtY2NfZGV2aWNlcyA9IE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZmluZCBmaXJzdCB1bnVzZWQgY2FyZCB3aXRoIHRoaXMgZGV2aWNlX2lkICovCitzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqcHRyX2ZpbmRfZnJlZV9wY2lfY2FyZF9ieV9kZXZpY2UodW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLAorCQkJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0IGRldmljZV9pZCkKK3sKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywgKm5leHQ7CisKKwlmb3IgKGFtY2MgPSBhbWNjX2RldmljZXM7IGFtY2M7IGFtY2MgPSBuZXh0KSB7CisJCW5leHQgPSBhbWNjLT5uZXh0OworCQlpZiAoKCFhbWNjLT51c2VkKSAmJiAoYW1jYy0+ZGV2aWNlID09IGRldmljZV9pZCkKKwkJICAgICYmIChhbWNjLT52ZW5kb3IgPT0gdmVuZG9yX2lkKSkKKwkJCXJldHVybiBhbWNjOworCisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZmluZCBjYXJkIG9uIHJlcXVlc3RlZCBwb3NpdGlvbiAqLworaW50IGlfZmluZF9mcmVlX3BjaV9jYXJkX2J5X3Bvc2l0aW9uKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IGRldmljZV9pZCwKKwkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHBjaV9idXMsCisJCQkJICAgICB1bnNpZ25lZCBzaG9ydCBwY2lfc2xvdCwKKwkJCQkgICAgIHN0cnVjdCBwY2lsc3Rfc3RydWN0ICoqY2FyZCkKK3sKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYywgKm5leHQ7CisKKwkqY2FyZCA9IE5VTEw7CisJZm9yIChhbWNjID0gYW1jY19kZXZpY2VzOyBhbWNjOyBhbWNjID0gbmV4dCkgeworCQluZXh0ID0gYW1jYy0+bmV4dDsKKwkJaWYgKChhbWNjLT52ZW5kb3IgPT0gdmVuZG9yX2lkKSAmJiAoYW1jYy0+ZGV2aWNlID09IGRldmljZV9pZCkKKwkJICAgICYmIChhbWNjLT5wY2lfYnVzID09IHBjaV9idXMpCisJCSAgICAmJiAoYW1jYy0+cGNpX3Nsb3QgPT0gcGNpX3Nsb3QpKSB7CisJCQlpZiAoIShhbWNjLT51c2VkKSkgeworCQkJCSpjYXJkID0gYW1jYzsKKwkJCQlyZXR1cm4gMDsJLy8gb2ssIGNhcmQgaXMgZm91bmQKKwkJCX0gZWxzZSB7CisJCQkJcnRfcHJpbnRrCisJCQkJICAgICgiIC0gXG5DYXJkIG9uIHJlcXVlc3RlZCBwb3NpdGlvbiBpcyB1c2VkIGI6cyAlZDolZCFcbiIsCisJCQkJICAgICBwY2lfYnVzLCBwY2lfc2xvdCk7CisJCQkJcmV0dXJuIDI7CS8vIGNhcmQgZXhpc3QgYnV0IGlzIHVzZWQKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAxOwkJLy8gbm8gY2FyZCBmb3VuZAorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIG1hcmsgY2FyZCBhcyB1c2VkICovCitpbnQgaV9wY2lfY2FyZF9hbGxvYyhzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYykKK3sKKwlpZiAoIWFtY2MpCisJCXJldHVybiAtMTsKKworCWlmIChhbWNjLT51c2VkKQorCQlyZXR1cm4gMTsKKwlhbWNjLT51c2VkID0gMTsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBtYXJrIGNhcmQgYXMgZnJlZSAqLworaW50IGlfcGNpX2NhcmRfZnJlZShzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqYW1jYykKK3sKKwlpZiAoIWFtY2MpCisJCXJldHVybiAtMTsKKworCWlmICghYW1jYy0+dXNlZCkKKwkJcmV0dXJuIDE7CisJYW1jYy0+dXNlZCA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogZGlzcGxheSBsaXN0IG9mIGZvdW5kIGNhcmRzICovCit2b2lkIHZfcGNpX2NhcmRfbGlzdF9kaXNwbGF5KHZvaWQpCit7CisJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsICpuZXh0OworCisJcHJpbnRrKCJMaXN0IG9mIHBjaSBjYXJkc1xuIik7CisJcHJpbnRrKCJidXM6c2xvdDpmdW5jIHZlbmRvciBkZXZpY2UgbWFzdGVyIGlvX2FtY2MgaW9fZGFxIGlycSB1c2VkXG4iKTsKKworCWZvciAoYW1jYyA9IGFtY2NfZGV2aWNlczsgYW1jYzsgYW1jYyA9IG5leHQpIHsKKwkJbmV4dCA9IGFtY2MtPm5leHQ7CisJCXByaW50aworCQkgICAgKCIlMmQgICAlMmQgICAlMmQgIDB4JTR4IDB4JTR4ICAgJTNzICAgMHglNHggMHglNHggICUyZCAgJTJkXG4iLAorCQkgICAgIGFtY2MtPnBjaV9idXMsIGFtY2MtPnBjaV9zbG90LCBhbWNjLT5wY2lfZnVuYywKKwkJICAgICBhbWNjLT52ZW5kb3IsIGFtY2MtPmRldmljZSwgYW1jYy0+bWFzdGVyID8gInllcyIgOiAibm8iLAorCQkgICAgIGFtY2MtPmlvX2FkZHJbMF0sIGFtY2MtPmlvX2FkZHJbMl0sIGFtY2MtPmlycSwgYW1jYy0+dXNlZCk7CisKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogcmV0dXJuIGFsbCBjYXJkIGluZm9ybWF0aW9uIGZvciBkcml2ZXIgKi8KK2ludCBpX3BjaV9jYXJkX2RhdGEoc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmFtY2MsCisJCSAgICB1bnNpZ25lZCBjaGFyICpwY2lfYnVzLCB1bnNpZ25lZCBjaGFyICpwY2lfc2xvdCwKKwkJICAgIHVuc2lnbmVkIGNoYXIgKnBjaV9mdW5jLCB1bnNpZ25lZCBzaG9ydCAqaW9fYWRkciwKKwkJICAgIHVuc2lnbmVkIHNob3J0ICppcnEsIHVuc2lnbmVkIHNob3J0ICptYXN0ZXIpCit7CisJaW50IGk7CisKKwlpZiAoIWFtY2MpCisJCXJldHVybiAtMTsKKwkqcGNpX2J1cyA9IGFtY2MtPnBjaV9idXM7CisJKnBjaV9zbG90ID0gYW1jYy0+cGNpX3Nsb3Q7CisJKnBjaV9mdW5jID0gYW1jYy0+cGNpX2Z1bmM7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJaW9fYWRkcltpXSA9IGFtY2MtPmlvX2FkZHJbaV07CisJKmlycSA9IGFtY2MtPmlycTsKKwkqbWFzdGVyID0gYW1jYy0+bWFzdGVyOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHNlbGVjdCBhbmQgYWxsb2MgY2FyZCAqLworc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKnB0cl9zZWxlY3RfYW5kX2FsbG9jX3BjaV9jYXJkKHVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZCwKKwkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQsCisJCQkJCQkgICAgdW5zaWduZWQgc2hvcnQgcGNpX2J1cywKKwkJCQkJCSAgICB1bnNpZ25lZCBzaG9ydCBwY2lfc2xvdCkKK3sKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZDsKKworCWlmICgocGNpX2J1cyA8IDEpICYgKHBjaV9zbG90IDwgMSkpIHsJLy8gdXNlIGF1dG9kZXRlY3Rpb24KKwkJaWYgKChjYXJkID0gcHRyX2ZpbmRfZnJlZV9wY2lfY2FyZF9ieV9kZXZpY2UodmVuZG9yX2lkLAorCQkJCQkJCSAgICAgZGV2aWNlX2lkKSkgPT0KKwkJICAgIE5VTEwpIHsKKwkJCXJ0X3ByaW50aygiIC0gVW51c2VkIGNhcmQgbm90IGZvdW5kIGluIHN5c3RlbSFcbiIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGlfZmluZF9mcmVlX3BjaV9jYXJkX2J5X3Bvc2l0aW9uKHZlbmRvcl9pZCwgZGV2aWNlX2lkLAorCQkJCQkJCSBwY2lfYnVzLCBwY2lfc2xvdCwKKwkJCQkJCQkgJmNhcmQpKSB7CisJCWNhc2UgMToKKwkJCXJ0X3ByaW50aworCQkJICAgICgiIC0gQ2FyZCBub3QgZm91bmQgb24gcmVxdWVzdGVkIHBvc2l0aW9uIGI6cyAlZDolZCFcbiIsCisJCQkgICAgIHBjaV9idXMsIHBjaV9zbG90KTsKKwkJCXJldHVybiBOVUxMOworCQljYXNlIDI6CisJCQlydF9wcmludGsKKwkJCSAgICAoIiAtIENhcmQgb24gcmVxdWVzdGVkIHBvc2l0aW9uIGlzIHVzZWQgYjpzICVkOiVkIVxuIiwKKwkJCSAgICAgcGNpX2J1cywgcGNpX3Nsb3QpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlpZiAoaV9wY2lfY2FyZF9hbGxvYyhjYXJkKSAhPSAwKSB7CisJCXJ0X3ByaW50aygiIC0gQ2FuJ3QgYWxsb2NhdGUgY2FyZCFcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gY2FyZDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X0FQQ0kxNzEwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X0FQQ0kxNzEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4OTI5YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfQVBDSTE3MTAuYwpAQCAtMCwwICsxLDEyNjUgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQQ0ktMTcxMCAgICAgICB8IENvbXBpbGVyICAgOiBHQ0MgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogaHdkcnZfYXBjaTE3MTAuY3wgVmVyc2lvbiAgICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEhhcmR3YXJlIExheWVyIEFjY2VzIEZvciBBUENJLTE3MTAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisjaW5jbHVkZSAiaHdkcnZfQVBDSTE3MTAuaCIKKyNpbmNsdWRlICJBUENJMTcxMF9JbnBfY3B0LmMiCisKKyNpbmNsdWRlICJBUENJMTcxMF9Tc2kuYyIKKyNpbmNsdWRlICJBUENJMTcxMF9Ub3IuYyIKKyNpbmNsdWRlICJBUENJMTcxMF9UdGwuYyIKKyNpbmNsdWRlICJBUENJMTcxMF9EaWdfaW8uYyIKKyNpbmNsdWRlICJBUENJMTcxMF84Mng1NC5jIgorI2luY2x1ZGUgIkFQQ0kxNzEwX0Nocm9uby5jIgorI2luY2x1ZGUgIkFQQ0kxNzEwX1B3bS5jIgorI2luY2x1ZGUgIkFQQ0kxNzEwX0lOQ0NQVC5jIgorCit2b2lkIGlfQURESV9BdHRhY2hQQ0kxNzEwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQgPSAwOworCWludCBuX3N1YmRldmljZXMgPSA5OworCisJLy9VcGRhdGUtMC43LjU3LT4wLjcuNjhkZXYtPm5fc3ViZGV2aWNlcyA9IDk7CisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZpY2VzKSkgPCAwKQorCQlyZXR1cm47CisKKwkvLyBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBUaW1lciBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RJTUVSOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEUgfCBTREZfUlQgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwlzLT5uX2NoYW4gPSAzOworCXMtPm1heGRhdGEgPSAwOworCXMtPmxlbl9jaGFubGlzdCA9IDM7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX3dyaXRlID0gaV9BUENJMTcxMF9JbnNuV3JpdGVFbmFibGVEaXNhYmxlVGltZXI7CisJcy0+aW5zbl9yZWFkID0gaV9BUENJMTcxMF9JbnNuUmVhZEFsbFRpbWVyVmFsdWU7CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0VGltZXI7CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c1RpbWVyOworCisJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgRElPIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9CisJCVNERl9XUklURUFCTEUgfCBTREZfUkVBREFCTEUgfCBTREZfUlQgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwlzLT5uX2NoYW4gPSA3OworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDc7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2NvbmZpZyA9IGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0RpZ2l0YWxJTzsKKwlzLT5pbnNuX3JlYWQgPSBpX0FQQ0kxNzEwX0luc25SZWFkRGlnaXRhbElPQ2hsVmFsdWU7CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c0RpZ2l0YWxJT1BvcnRPbk9mZjsKKwlzLT5pbnNuX3dyaXRlID0gaV9BUENJMTcxMF9JbnNuV3JpdGVEaWdpdGFsSU9DaGxPbk9mZjsKKworCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIENocm9ubyBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NIUk9OTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMDsKKwlzLT5sZW5fY2hhbmxpc3QgPSA0OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl93cml0ZSA9IGlfQVBDSTE3MTBfSW5zbldyaXRlRW5hYmxlRGlzYWJsZUNocm9ubzsKKwlzLT5pbnNuX3JlYWQgPSBpX0FQQ0kxNzEwX0luc25SZWFkQ2hyb25vOworCXMtPmluc25fY29uZmlnID0gaV9BUENJMTcxMF9JbnNuQ29uZmlnSW5pdENocm9ubzsKKwlzLT5pbnNuX2JpdHMgPSBpX0FQQ0kxNzEwX0luc25CaXRzQ2hyb25vRGlnaXRhbElPOworCisJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgUFdNIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1BXTTsKKwlzLT5zdWJkZXZfZmxhZ3MgPQorCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gMzsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSAzOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW9fYml0cyA9IDA7CQkvL2FsbCBiaXRzIGlucHV0CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdQV007CisJcy0+aW5zbl9yZWFkID0gaV9BUENJMTcxMF9JbnNuUmVhZEdldFBXTVN0YXR1czsKKwlzLT5pbnNuX3dyaXRlID0gaV9BUENJMTcxMF9JbnNuV3JpdGVQV007CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c1JlYWRQV01JbnRlcnJ1cHQ7CisKKwkvLyBBbGxvY2F0ZSBhbmQgSW5pdGlhbGlzZSBUVExJTyBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA0OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9UVExJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPQorCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSA4OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2FwY2kxNzEwX3R0bDsJLy8gdG8gcGFzcyBhcmd1bWVudHMgaW4gcmFuZ2UKKwlzLT5pbnNuX2NvbmZpZyA9IGlfQVBDSTE3MTBfSW5zbkNvbmZpZ0luaXRUVExJTzsKKwlzLT5pbnNuX2JpdHMgPSBpX0FQQ0kxNzEwX0luc25CaXRzUmVhZFRUTElPOworCXMtPmluc25fd3JpdGUgPSBpX0FQQ0kxNzEwX0luc25Xcml0ZVNldFRUTElPQ2hsT25PZmY7CisJcy0+aW5zbl9yZWFkID0gaV9BUENJMTcxMF9JbnNuUmVhZFRUTElPQWxsUG9ydFZhbHVlOworCisJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgVE9SIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDU7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RPUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPQorCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSA4OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW9fYml0cyA9IDA7CQkvL2FsbCBiaXRzIGlucHV0CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0VG9yQ291bnRlcjsKKwlzLT5pbnNuX3JlYWQgPSBpX0FQQ0kxNzEwX0luc25SZWFkR2V0VG9yQ291bnRlckluaXRpYWxpc2F0aW9uOworCXMtPmluc25fd3JpdGUgPSBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVUb3JDb3VudGVyOworCXMtPmluc25fYml0cyA9IGlfQVBDSTE3MTBfSW5zbkJpdHNHZXRUb3JDb3VudGVyUHJvZ3Jlc3NTdGF0dXNBbmRWYWx1ZTsKKworCS8vIEFsbG9jYXRlIGFuZCBJbml0aWFsaXNlIFNTSSBTdWJkZXZpY2UgU3RydWN0dXJlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA2OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9TU0k7CisJcy0+c3ViZGV2X2ZsYWdzID0KKwkJU0RGX1dSSVRFQUJMRSB8IFNERl9SRUFEQUJMRSB8IFNERl9SVCB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hcGNpMTcxMF9zc2k7CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0U1NJOworCXMtPmluc25fcmVhZCA9IGlfQVBDSTE3MTBfSW5zblJlYWRTU0lWYWx1ZTsKKwlzLT5pbnNuX2JpdHMgPSBpX0FQQ0kxNzEwX0luc25CaXRzU1NJRGlnaXRhbElPOworCisJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgUFVMU0VFTkNPREVSIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDc7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1BVTFNFRU5DT0RFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPQorCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSA0OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdJbml0UHVsc2VFbmNvZGVyOworCXMtPmluc25fd3JpdGUgPSBpX0FQQ0kxNzEwX0luc25Xcml0ZUVuYWJsZURpc2FibGVQdWxzZUVuY29kZXI7CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c1JlYWRXcml0ZVB1bHNlRW5jb2RlcjsKKwlzLT5pbnNuX3JlYWQgPSBpX0FQQ0kxNzEwX0luc25SZWFkSW50ZXJydXB0UHVsc2VFbmNvZGVyOworCisJLy8gQWxsb2NhdGUgYW5kIEluaXRpYWxpc2UgSU5DUkVNRU5UQUxDT1VOVEVSIFN1YmRldmljZSBTdHJ1Y3R1cmVzCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDg7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0lOQ1JFTUVOVEFMQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPQorCQlTREZfV1JJVEVBQkxFIHwgU0RGX1JFQURBQkxFIHwgU0RGX1JUIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gNTAwOworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDUwMDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hcGNpMTcxMF9pbmNjcHQ7CisJcy0+aW5zbl9jb25maWcgPSBpX0FQQ0kxNzEwX0luc25Db25maWdJTkNDUFQ7CisJcy0+aW5zbl93cml0ZSA9IGlfQVBDSTE3MTBfSW5zbldyaXRlSU5DQ1BUOworCXMtPmluc25fcmVhZCA9IGlfQVBDSTE3MTBfSW5zblJlYWRJTkNDUFQ7CisJcy0+aW5zbl9iaXRzID0gaV9BUENJMTcxMF9JbnNuQml0c0lOQ0NQVDsKK30KKworaW50IGlfQVBDSTE3MTBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOwordm9pZCB2X0FQQ0kxNzEwX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKTsKKy8vZm9yIDE3MTAKKworaW50IGlfQVBDSTE3MTBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IHJldDsKKwlEV09SRCBkd19EdW1teTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogUmVhZCBhbGwgbW9kdWxlIGNvbmZpZ3VyYXRpb24gKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXJldCA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDYwKTsKKwlkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bMF0gPSByZXQ7CisKKwlyZXQgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAxMjQpOworCWRldnByaXYtPnNfQm9hcmRJbmZvcy5kd19Nb2xkdWxlQ29uZmlndXJhdGlvblsxXSA9IHJldDsKKworCXJldCA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDE4OCk7CisJZGV2cHJpdi0+c19Cb2FyZEluZm9zLmR3X01vbGR1bGVDb25maWd1cmF0aW9uWzJdID0gcmV0OworCisJcmV0ID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy51aV9BZGRyZXNzICsgMjUyKTsKKwlkZXZwcml2LT5zX0JvYXJkSW5mb3MuZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bM10gPSByZXQ7CisKKwkvLyBvdXRsKDB4ODA4MDgwODIsZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MrMHg2MCk7CisJb3V0bCgweDgzODM4MzgzLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDB4NjApOworCisJZGV2cHJpdi0+c19Cb2FyZEluZm9zLmJfQm9hcmRWZXJzaW9uID0gMTsKKworCS8vIEVuYWJsZSB0aGUgaW50ZXJydXB0IGZvciB0aGUgY29udHJvbGVyCisJZHdfRHVtbXkgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLnVpX0FkZHJlc3MgKyAweDM4KTsKKwlvdXRsKGR3X0R1bW15IHwgMHgyMDAwLCBkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArIDB4MzgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24ncyBOYW1lICAgOiBfX3ZvaWRfXyB2X0FQQ0kxNzEwX0ludGVycnVwdEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgfAorfAkJCQkoQllURSBiX0ludGVycnVwdCwgX19DUFBBUkdTKSAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBBUENJLTE3MTAgaW50ZXJydXB0IGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogQllURSBiX0ludGVycnVwdCA6IEludGVycnVwdCBudW1iZXIgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwIDogT0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEgOiBFcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK3ZvaWQgdl9BUENJMTcxMF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlCWVRFIGJfTW9kdWxlQ3B0ID0gMDsKKwlCWVRFIGJfSW50ZXJydXB0RmxhZyA9IDA7CisJQllURSBiX1BXTUNwdCA9IDA7CisJQllURSBiX1RvckNvdW50ZXJDcHQgPSAwOworCUJZVEUgYl9QdWxzZUluY29kZXJDcHQgPSAwOworCVVJTlQgdWlfMTZCaXRWYWx1ZTsKKwlVTE9ORyB1bF9JbnRlcnJ1cHRMYXRjaFJlZyA9IDA7CisJVUxPTkcgdWxfTGF0Y2hSZWdpc3RlclZhbHVlID0gMDsKKwlVTE9ORyB1bF84Mlg1NEludGVycnVwdFN0YXR1czsKKwlVTE9ORyB1bF9TdGF0dXNSZWdpc3RlcjsKKworCXN0cl9Nb2R1bGVJbmZvICpwc19Nb2R1bGVJbmZvOworCisJcHJpbnRrKCJBUENJMTcxMCBJbnRlcnJ1cHRcbiIpOworCWZvciAoYl9Nb2R1bGVDcHQgPSAwOyBiX01vZHVsZUNwdCA8IDQ7IGJfTW9kdWxlQ3B0KyssIHBzX01vZHVsZUluZm8rKykgeworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIDExOTkvMDIyNSB0byAwMTAwLzAyMjYgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJcHNfTW9kdWxlSW5mbyA9ICZkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bGVDcHRdOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgODJYNTQgdGltZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsZUNwdF0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfODJYNTRfVElNRVIpIHsKKworCQkJLy9wcmludGsoIlRJTUVSIEludGVycnVwdCBPY2N1cnJlZFxuIik7CisJCQl1bF84Mlg1NEludGVycnVwdFN0YXR1cyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDEyICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKHVsXzgyWDU0SW50ZXJydXB0U3RhdHVzICYgcHNfTW9kdWxlSW5mby0+CisJCQkJCXNfODJYNTRNb2R1bGVJbmZvLgorCQkJCQliX0ludGVycnVwdE1hc2spICE9IDApIHsKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVpX1dyaXRlXS4KKwkJCQkJdWxfT2xkSW50ZXJydXB0TWFzayA9CisJCQkJCSh1bF84Mlg1NEludGVycnVwdFN0YXR1cyAmCisJCQkJCXBzX01vZHVsZUluZm8tPnNfODJYNTRNb2R1bGVJbmZvLgorCQkJCQliX0ludGVycnVwdE1hc2spIDw8IDQ7CisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVpX1dyaXRlXS4KKwkJCQkJYl9PbGRNb2R1bGVNYXNrID0gMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCWRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJdWlfV3JpdGVdLnVsX09sZENvdW50ZXJMYXRjaFZhbHVlID0gMDsKKworCQkJCWRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVsX0ludGVycnVwdE9jY3VyKys7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEluY3JlbWVudCB0aGUgd3JpdGUgRklGTyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1aV9Xcml0ZSArIDEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQliX0ludGVycnVwdEZsYWcgPSAxOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENhbGwgdXNlciBmdW5jdGlvbiAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisKKwkJCX0JLy8gaWYgKCh1bF84Mlg1NEludGVycnVwdFN0YXR1cyAmIDB4NykgIT0gMCkKKwkJfQkJLy8gODJYNTQgdGltZXIKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBpbmNyZW0uIGNvdW50ZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bGVDcHRdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX0lOQ1JFTUVOVEFMX0NPVU5URVIpIHsKKworCQkJdWxfSW50ZXJydXB0TGF0Y2hSZWcgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCXVpX0FkZHJlc3MgKyAoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbnRlcnJ1cHQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgodWxfSW50ZXJydXB0TGF0Y2hSZWcgJiAweDIyKSAmJiAocHNfTW9kdWxlSW5mby0+CisJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQlzX01vZGVSZWdpc3Rlci4KKwkJCQkJc19CeXRlTW9kZVJlZ2lzdGVyLgorCQkJCQliX01vZGVSZWdpc3RlcjIgJiAweDgwKSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHN0cm9iZSBsYXRjaCBJIGludGVycnVwdCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICh1bF9JbnRlcnJ1cHRMYXRjaFJlZyAmIDIpIHsKKwkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgNCArCisJCQkJCQkoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS51bF9PbGRJbnRlcnJ1cHRNYXNrID0KKwkJCQkJCTFVTDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uYl9PbGRNb2R1bGVNYXNrID0KKwkJCQkJCTEgPDwgYl9Nb2R1bGVDcHQ7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJdWxfT2xkQ291bnRlckxhdGNoVmFsdWUgPQorCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWxfSW50ZXJydXB0T2NjdXIrKzsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogMDg5OS8wMjI0IHRvIDExOTkvMDIyNSAgICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCTEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LAorCQkJCQkJMCk7CisKKwkJCQl9CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgc3Ryb2JlIGxhdGNoIElJIGludGVycnVwdCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAodWxfSW50ZXJydXB0TGF0Y2hSZWcgJiAweDIwKSB7CisKKwkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgOCArCisJCQkJCQkoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS51bF9PbGRJbnRlcnJ1cHRNYXNrID0KKwkJCQkJCTJVTDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uYl9PbGRNb2R1bGVNYXNrID0KKwkJCQkJCTEgPDwgYl9Nb2R1bGVDcHQ7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJdWxfT2xkQ291bnRlckxhdGNoVmFsdWUgPQorCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWxfSW50ZXJydXB0T2NjdXIrKzsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogMDg5OS8wMjI0IHRvIDExOTkvMDIyNSAgICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCTEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LAorCQkJCQkJMCk7CisKKwkJCQl9CisJCQl9CisKKwkJCXVsX0ludGVycnVwdExhdGNoUmVnID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQl1aV9BZGRyZXNzICsgMjQgKyAoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBpbmRleCBpbnRlcnJ1cHQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICh1bF9JbnRlcnJ1cHRMYXRjaFJlZyAmIDB4OCkgeworCQkJCXBzX01vZHVsZUluZm8tPgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Jbml0RmxhZy5iX0luZGV4SW50ZXJydXB0T2NjdXIgPSAxOworCisJCQkJaWYgKHBzX01vZHVsZUluZm8tPgorCQkJCQlzX1NpZW1lbnNDb3VudGVySW5mby4KKwkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJYl9Nb2RlUmVnaXN0ZXIyICYKKwkJCQkJQVBDSTE3MTBfSU5ERVhfQVVUT19NT0RFKSB7CisKKwkJCQkJb3V0bChwc19Nb2R1bGVJbmZvLT4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlkd19Nb2RlUmVnaXN0ZXIxXzJfM180LAorCQkJCQkJZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDIwICsKKwkJCQkJCSg2NCAqIGJfTW9kdWxlQ3B0KSk7CisJCQkJfQorCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBpbnRlcnJ1cHQgZW5hYmxlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChwc19Nb2R1bGVJbmZvLT4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjMgJgorCQkJCQkJQVBDSTE3MTBfRU5BQkxFX0lOREVYX0lOVCkgPT0KKwkJCQkJQVBDSTE3MTBfRU5BQkxFX0lOREVYX0lOVCkgeworCQkJCQlkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLnVsX09sZEludGVycnVwdE1hc2sgPQorCQkJCQkJNFVMOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS5iX09sZE1vZHVsZU1hc2sgPQorCQkJCQkJMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uCisJCQkJCQl1bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZSA9CisJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWU7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1bF9JbnRlcnJ1cHRPY2N1cisrOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiAwODk5LzAyMjQgdG8gMTE5OS8wMjI1ICAgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEluY3JlbWVudCB0aGUgd3JpdGUgRklGTyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlID0gKGRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGUgKworCQkJCQkJMSkgJSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCQkJCQliX0ludGVycnVwdEZsYWcgPSAxOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENhbGwgdXNlciBmdW5jdGlvbiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsCisJCQkJCQkwKTsKKworCQkJCX0KKwkJCX0KKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBjb21wYXJlIGludGVycnVwdCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAodWxfSW50ZXJydXB0TGF0Y2hSZWcgJiAweDEwKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBpbnRlcnJ1cHQgZW5hYmxlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChwc19Nb2R1bGVJbmZvLT4KKwkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJc19Nb2RlUmVnaXN0ZXIuCisJCQkJCQlzX0J5dGVNb2RlUmVnaXN0ZXIuCisJCQkJCQliX01vZGVSZWdpc3RlcjMgJgorCQkJCQkJQVBDSTE3MTBfRU5BQkxFX0NPTVBBUkVfSU5UKSA9PQorCQkJCQlBUENJMTcxMF9FTkFCTEVfQ09NUEFSRV9JTlQpIHsKKwkJCQkJZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS51bF9PbGRJbnRlcnJ1cHRNYXNrID0KKwkJCQkJCThVTDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uYl9PbGRNb2R1bGVNYXNrID0KKwkJCQkJCTEgPDwgYl9Nb2R1bGVDcHQ7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJdWxfT2xkQ291bnRlckxhdGNoVmFsdWUgPQorCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWxfSW50ZXJydXB0T2NjdXIrKzsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogMDg5OS8wMjI0IHRvIDExOTkvMDIyNSAgICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCTEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LAorCQkJCQkJMCk7CisKKwkJCQl9CisJCQl9CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBmcmVxdWVuY3kgbWVhc3VyZW1lbnQgaW50ZXJydXB0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKHVsX0ludGVycnVwdExhdGNoUmVnICYgMHgyMCkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCB0aGUgc3RhdHVzICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXVsX1N0YXR1c1JlZ2lzdGVyID0gaW5sKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDMyICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWFkIHRoZSB2YWx1ZSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZSA9CisJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArCisJCQkJCTI4ICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkJCXN3aXRjaCAoKHVsX1N0YXR1c1JlZ2lzdGVyID4+IDEpICYgMykgeworCQkJCWNhc2UgMDoKKwkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCB0aGUgY291bnRlciBtb2RlICovCisJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bGVDcHRdLgorCQkJCQkJCXNfU2llbWVuc0NvdW50ZXJJbmZvLgorCQkJCQkJCXNfTW9kZVJlZ2lzdGVyLgorCQkJCQkJCXNfQnl0ZU1vZGVSZWdpc3Rlci4KKwkJCQkJCQliX01vZGVSZWdpc3RlcjEgJgorCQkJCQkJCUFQQ0kxNzEwXzE2QklUX0NPVU5URVIpCisJCQkJCQk9PSBBUENJMTcxMF8xNkJJVF9DT1VOVEVSKSB7CisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFRlc3QgaWYgMTYtYml0IGNvdW50ZXIgMSBwdWxzZSBvY2N1ciAqLworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWlmICgodWxfTGF0Y2hSZWdpc3RlclZhbHVlICYKKwkJCQkJCQkJMHhGRkZGVSkgIT0gMCkgeworCQkJCQkJCXVpXzE2Qml0VmFsdWUgPQorCQkJCQkJCQkoVUlOVCkKKwkJCQkJCQkJdWxfTGF0Y2hSZWdpc3RlclZhbHVlCisJCQkJCQkJCSYgMHhGRkZGVTsKKwkJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQkJCQkodWxfTGF0Y2hSZWdpc3RlclZhbHVlCisJCQkJCQkJCSYgMHhGRkZGMDAwMFVMKQorCQkJCQkJCQl8ICgweEZGRkZVIC0KKwkJCQkJCQkJdWlfMTZCaXRWYWx1ZSk7CisJCQkJCQl9CisKKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGVzdCBpZiAxNi1iaXQgY291bnRlciAyIHB1bHNlIG9jY3VyICovCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJaWYgKCh1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgJgorCQkJCQkJCQkweEZGRkYwMDAwVUwpICE9CisJCQkJCQkJMCkgeworCQkJCQkJCXVpXzE2Qml0VmFsdWUgPQorCQkJCQkJCQkoVUlOVCkgKAorCQkJCQkJCQkodWxfTGF0Y2hSZWdpc3RlclZhbHVlCisJCQkJCQkJCQk+PiAxNikgJgorCQkJCQkJCQkweEZGRkZVKTsKKwkJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQkJCQkodWxfTGF0Y2hSZWdpc3RlclZhbHVlCisJCQkJCQkJCSYgMHhGRkZGVUwpIHwKKwkJCQkJCQkJKCgweEZGRkZVIC0KKwkJCQkJCQkJCXVpXzE2Qml0VmFsdWUpCisJCQkJCQkJCTw8IDE2KTsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlmICh1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgIT0gMCkgeworCQkJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZSA9CisJCQkJCQkJCTB4RkZGRkZGRkZVTCAtCisJCQkJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCWNhc2UgMToKKwkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGVzdCBpZiAxNi1iaXQgY291bnRlciAyIHB1bHNlIG9jY3VyICovCisJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKCh1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgJgorCQkJCQkJCTB4RkZGRjAwMDBVTCkgIT0gMCkgeworCQkJCQkJdWlfMTZCaXRWYWx1ZSA9CisJCQkJCQkJKFVJTlQpICgKKwkJCQkJCQkodWxfTGF0Y2hSZWdpc3RlclZhbHVlCisJCQkJCQkJCT4+IDE2KSAmCisJCQkJCQkJMHhGRkZGVSk7CisJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQkJCSh1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgJgorCQkJCQkJCTB4RkZGRlVMKSB8ICgoMHhGRkZGVSAtCisJCQkJCQkJCXVpXzE2Qml0VmFsdWUpCisJCQkJCQkJPDwgMTYpOworCQkJCQl9CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSAyOgorCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIDE2LWJpdCBjb3VudGVyIDEgcHVsc2Ugb2NjdXIgKi8KKwkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKHVsX0xhdGNoUmVnaXN0ZXJWYWx1ZSAmIDB4RkZGRlUpICE9CisJCQkJCQkwKSB7CisJCQkJCQl1aV8xNkJpdFZhbHVlID0KKwkJCQkJCQkoVUlOVCkKKwkJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgJgorCQkJCQkJCTB4RkZGRlU7CisJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQkJCSh1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgJgorCQkJCQkJCTB4RkZGRjAwMDBVTCkgfCAoMHhGRkZGVQorCQkJCQkJCS0gdWlfMTZCaXRWYWx1ZSk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJZGV2cHJpdi0+CisJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVyc1tkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQl1aV9Xcml0ZV0uCisJCQkJCXVsX09sZEludGVycnVwdE1hc2sgPSAweDEwMDAwVUw7CisKKwkJCQlkZXZwcml2LT4KKwkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzW2RldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVpX1dyaXRlXS4KKwkJCQkJYl9PbGRNb2R1bGVNYXNrID0gMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCWRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnNbZGV2cHJpdi0+CisJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJdWlfV3JpdGVdLgorCQkJCQl1bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZSA9CisJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZTsKKworCQkJCWRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVsX0ludGVycnVwdE9jY3VyKys7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIDA4OTkvMDIyNCB0byAxMTk5LzAyMjUgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogSW5jcmVtZW50IHRoZSB3cml0ZSBGSUZPICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVpX1dyaXRlID0gKGRldnByaXYtPgorCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCXVpX1dyaXRlICsgMSkgJSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCQkJCWJfSW50ZXJydXB0RmxhZyA9IDE7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ2FsbCB1c2VyIGZ1bmN0aW9uICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCQkJfQorCQl9CQkvLyBJbmNyZW1lbnRhbCBjb3VudGVyCisKKwkJIC8qKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgQ0RBICovCisJCSAvKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxlQ3B0XSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9DREEpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IGlmIENEQSBlbmFibGUgYW5kIGZ1bmN0aW9uYWxpdHkgMCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChkZXZwcml2LT5zX01vZHVsZUluZm9bYl9Nb2R1bGVDcHRdLgorCQkJCQlzX0NEQU1vZHVsZUluZm8uCisJCQkJCWJfQ0RBRW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSkKKwkJCQkmJiAoZGV2cHJpdi0+c19Nb2R1bGVJbmZvW2JfTW9kdWxlQ3B0XS4KKwkJCQkJc19DREFNb2R1bGVJbmZvLmJfRmN0U2VsZWN0aW9uID09IDApKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBHZXQgdGhlIGludGVycnVwdCBzdGF0dXMgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJdWxfU3RhdHVzUmVnaXN0ZXIgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQl1aV9BZGRyZXNzICsgMTYgKyAoNjQgKiBiX01vZHVsZUNwdCkpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIGludGVycnVwdCBvY2N1ciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICh1bF9TdGF0dXNSZWdpc3RlciAmIDEpIHsKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLnVsX09sZEludGVycnVwdE1hc2sgPQorCQkJCQkJMHg4MDAwMFVMOworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS5iX09sZE1vZHVsZU1hc2sgPQorCQkJCQkJMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCVtkZXZwcml2LT5zX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZV0uCisJCQkJCQl1bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZSA9IDA7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1bF9JbnRlcnJ1cHRPY2N1cisrOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCTEpICUgQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsCisJCQkJCQkwKTsKKworCQkJCX0JLy8gaWYgKHVsX1N0YXR1c1JlZ2lzdGVyICYgMSkKKworCQkJfQorCQl9CQkvLyBDREEKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIFBXTSBjb3VudGVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bGVDcHRdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1BXTSkgeworCQkJZm9yIChiX1BXTUNwdCA9IDA7IGJfUFdNQ3B0IDwgMjsgYl9QV01DcHQrKykgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBQV00gaW50ZXJydXB0IGluaXRpYWxpc2VkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChkZXZwcml2LT4KKwkJCQkJc19Nb2R1bGVJbmZvW2JfTW9kdWxlQ3B0XS4KKwkJCQkJc19QV01Nb2R1bGVJbmZvLgorCQkJCQlzX1BXTUluZm9bYl9QV01DcHRdLgorCQkJCQliX0ludGVycnVwdEVuYWJsZSA9PSBBUENJMTcxMF9FTkFCTEUpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQl1bF9TdGF0dXNSZWdpc3RlciA9CisJCQkJCQlpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCQkJdWlfQWRkcmVzcyArIDE2ICsKKwkJCQkJCSgyMCAqIGJfUFdNQ3B0KSArCisJCQkJCQkoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKHVsX1N0YXR1c1JlZ2lzdGVyICYgMHgxKSB7CisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJCVtkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJCXVsX09sZEludGVycnVwdE1hc2sgPQorCQkJCQkJCTB4NDAwMFVMIDw8IGJfUFdNQ3B0OworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJCVtkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJCWJfT2xkTW9kdWxlTWFzayA9CisJCQkJCQkJMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVsX0ludGVycnVwdE9jY3VyKys7CisKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBJbmNyZW1lbnQgdGhlIHdyaXRlIEZJRk8gKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZSA9IChkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGUgKworCQkJCQkJCTEpICUKKwkJCQkJCQlBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCQkJCQkJYl9JbnRlcnJ1cHRGbGFnID0gMTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogQ2FsbCB1c2VyIGZ1bmN0aW9uICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCQkJc2VuZF9zaWcoU0lHSU8sCisJCQkJCQkJZGV2cHJpdi0+dHNrX0N1cnJlbnQsCisJCQkJCQkJMCk7CisKKwkJCQkJfQkvLyBpZiAodWxfU3RhdHVzUmVnaXN0ZXIgJiAweDEpCisJCQkJfQkvLyBpZiAoQVBDSTE3MTBfRU5BQkxFKQorCQkJfQkvLyBmb3IgKGJfUFdNQ3B0ID09IDA7IGJfUFdNQ3B0IDwgMDsgYl9QV01DcHQgKyspCisJCX0JCS8vIFBXTSBjb3VudGVyCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiB0b3IgY291bnRlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCWR3X01vbGR1bGVDb25maWd1cmF0aW9uW2JfTW9kdWxlQ3B0XSAmCisJCQkJMHhGRkZGMDAwMFVMKSA9PSBBUENJMTcxMF9UT1JfQ09VTlRFUikgeworCQkJZm9yIChiX1RvckNvdW50ZXJDcHQgPSAwOyBiX1RvckNvdW50ZXJDcHQgPCAyOworCQkJCWJfVG9yQ291bnRlckNwdCsrKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIHRvciBpbnRlcnJ1cHQgaW5pdGlhbGlzZWQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGRldnByaXYtPgorCQkJCQlzX01vZHVsZUluZm9bYl9Nb2R1bGVDcHRdLgorCQkJCQlzX1RvckNvdW50ZXJNb2R1bGVJbmZvLgorCQkJCQlzX1RvckNvdW50ZXJJbmZvW2JfVG9yQ291bnRlckNwdF0uCisJCQkJCWJfSW50ZXJydXB0RW5hYmxlID09IEFQQ0kxNzEwX0VOQUJMRSkgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIGludGVycnVwdCBzdGF0dXMgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXVsX1N0YXR1c1JlZ2lzdGVyID0KKwkJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJCQl1aV9BZGRyZXNzICsgMTIgKworCQkJCQkJKDE2ICogYl9Ub3JDb3VudGVyQ3B0KSArCisJCQkJCQkoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaWYgKHVsX1N0YXR1c1JlZ2lzdGVyICYgMHgxKSB7CisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBSZWFkIHRoZSB0b3IgY291bnRlciB2YWx1ZSAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQl1bF9MYXRjaFJlZ2lzdGVyVmFsdWUgPQorCQkJCQkJCWlubChkZXZwcml2LT4KKwkJCQkJCQlzX0JvYXJkSW5mb3MuCisJCQkJCQkJdWlfQWRkcmVzcyArIDAgKworCQkJCQkJCSgxNiAqIGJfVG9yQ291bnRlckNwdCkgKworCQkJCQkJCSg2NCAqIGJfTW9kdWxlQ3B0KSk7CisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQkJW2RldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZV0uCisJCQkJCQkJdWxfT2xkSW50ZXJydXB0TWFzayA9CisJCQkJCQkJMHgxMDAwVUwgPDwKKwkJCQkJCQliX1RvckNvdW50ZXJDcHQ7CisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQkJW2RldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZV0uCisJCQkJCQkJYl9PbGRNb2R1bGVNYXNrID0KKwkJCQkJCQkxIDw8IGJfTW9kdWxlQ3B0OworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJCVtkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJCXVsX09sZENvdW50ZXJMYXRjaFZhbHVlCisJCQkJCQkJPSB1bF9MYXRjaFJlZ2lzdGVyVmFsdWU7CisKKwkJCQkJCWRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1bF9JbnRlcnJ1cHRPY2N1cisrOworCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogSW5jcmVtZW50IHRoZSB3cml0ZSBGSUZPICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGUgPSAoZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVpX1dyaXRlICsKKwkJCQkJCQkxKSAlCisJCQkJCQkJQVBDSTE3MTBfU0FWRV9JTlRFUlJVUFQ7CisKKwkJCQkJCWJfSW50ZXJydXB0RmxhZyA9IDE7CisKKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIENhbGwgdXNlciBmdW5jdGlvbiAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCQkJc2VuZF9zaWcoU0lHSU8sCisJCQkJCQkJZGV2cHJpdi0+dHNrX0N1cnJlbnQsCisJCQkJCQkJMCk7CisJCQkJCX0JLy8gaWYgKHVsX1N0YXR1c1JlZ2lzdGVyICYgMHgxKQorCQkJCX0JLy8gaWYgKEFQQ0kxNzEwX0VOQUJMRSkKKwkJCX0JLy8gZm9yIChiX1RvckNvdW50ZXJDcHQgPT0gMDsgYl9Ub3JDb3VudGVyQ3B0IDwgMDsgYl9Ub3JDb3VudGVyQ3B0ICsrKQorCQl9CQkvLyBUb3IgY291bnRlcgorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgY2hyb25vbWV0ZXIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQlkd19Nb2xkdWxlQ29uZmlndXJhdGlvbltiX01vZHVsZUNwdF0gJgorCQkJCTB4RkZGRjAwMDBVTCkgPT0gQVBDSTE3MTBfQ0hST05PTUVURVIpIHsKKworCQkJLy9wcmludGsoIkFQQ0kxNzEwIENocm9ubyBJbnRlcnJ1cHRcbiIpOworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQl1bF9JbnRlcnJ1cHRMYXRjaFJlZyA9IGlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJdWlfQWRkcmVzcyArIDEyICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKHVsX0ludGVycnVwdExhdGNoUmVnICYgMHg4KSA9PSAweDgpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgZmxhZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRsKDAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJdWlfQWRkcmVzcyArIDMyICsgKDY0ICogYl9Nb2R1bGVDcHQpKTsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIGNvbnRpbnVvdXMgbW9kZSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmIChwc19Nb2R1bGVJbmZvLT4KKwkJCQkJc19DaHJvbm9Nb2R1bGVJbmZvLgorCQkJCQliX0N5Y2xlTW9kZSA9PSBBUENJMTcxMF9FTkFCTEUpIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDbGVhciB0aGUgc3RhdHVzICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlvdXRsKDAsIGRldnByaXYtPnNfQm9hcmRJbmZvcy4KKwkJCQkJCXVpX0FkZHJlc3MgKyAzNiArCisJCQkJCQkoNjQgKiBiX01vZHVsZUNwdCkpOworCQkJCX0KKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCB0aGUgdGltaW5nIHZhbHVlICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZSA9CisJCQkJCWlubChkZXZwcml2LT5zX0JvYXJkSW5mb3MudWlfQWRkcmVzcyArCisJCQkJCTQgKyAoNjQgKiBiX01vZHVsZUNwdCkpOworCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBpbnRlcnJ1cHQgZW5hYmxlZCAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKHBzX01vZHVsZUluZm8tPgorCQkJCQlzX0Nocm9ub01vZHVsZUluZm8uYl9JbnRlcnJ1cHRNYXNrKSB7CisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS51bF9PbGRJbnRlcnJ1cHRNYXNrID0KKwkJCQkJCTB4ODA7CisKKwkJCQkJZGV2cHJpdi0+CisJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQlbZGV2cHJpdi0+c19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGVdLmJfT2xkTW9kdWxlTWFzayA9CisJCQkJCQkxIDw8IGJfTW9kdWxlQ3B0OworCisJCQkJCWRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJW2RldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlXS4KKwkJCQkJCXVsX09sZENvdW50ZXJMYXRjaFZhbHVlID0KKwkJCQkJCXVsX0xhdGNoUmVnaXN0ZXJWYWx1ZTsKKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVsX0ludGVycnVwdE9jY3VyKys7CisKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEluY3JlbWVudCB0aGUgd3JpdGUgRklGTyAqLworCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkZXZwcml2LT4KKwkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCXVpX1dyaXRlID0gKGRldnByaXYtPgorCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJdWlfV3JpdGUgKworCQkJCQkJMSkgJSBBUENJMTcxMF9TQVZFX0lOVEVSUlVQVDsKKworCQkJCQliX0ludGVycnVwdEZsYWcgPSAxOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENhbGwgdXNlciBmdW5jdGlvbiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsCisJCQkJCQkwKTsKKworCQkJCX0KKwkJCX0KKwkJfQkJLy8gQ2hyb25vbWV0ZXIKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgcHVsc2UgZW5jb2RlciAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkZXZwcml2LT5zX0JvYXJkSW5mb3MuCisJCQkJZHdfTW9sZHVsZUNvbmZpZ3VyYXRpb25bYl9Nb2R1bGVDcHRdICYKKwkJCQkweEZGRkYwMDAwVUwpID09IEFQQ0kxNzEwX1BVTFNFX0VOQ09ERVIpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJdWxfU3RhdHVzUmVnaXN0ZXIgPSBpbmwoZGV2cHJpdi0+c19Cb2FyZEluZm9zLgorCQkJCXVpX0FkZHJlc3MgKyAyMCArICg2NCAqIGJfTW9kdWxlQ3B0KSk7CisKKwkJCWlmICh1bF9TdGF0dXNSZWdpc3RlciAmIDB4RikgeworCQkJCWZvciAoYl9QdWxzZUluY29kZXJDcHQgPSAwOworCQkJCQliX1B1bHNlSW5jb2RlckNwdCA8IDQ7CisJCQkJCWJfUHVsc2VJbmNvZGVyQ3B0KyspIHsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgcHVsc2UgZW5jb2RlciBpbml0aWFsaXNlZCAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKHBzX01vZHVsZUluZm8tPgorCQkJCQkJCXNfUHVsc2VFbmNvZGVyTW9kdWxlSW5mby4KKwkJCQkJCQlzX1B1bHNlRW5jb2RlckluZm8KKwkJCQkJCQlbYl9QdWxzZUluY29kZXJDcHRdLgorCQkJCQkJCWJfUHVsc2VFbmNvZGVySW5pdCA9PSAxKQorCQkJCQkJJiYgKCgocHNfTW9kdWxlSW5mby0+c19QdWxzZUVuY29kZXJNb2R1bGVJbmZvLmR3X1NldFJlZ2lzdGVyID4+IGJfUHVsc2VJbmNvZGVyQ3B0KSAmIDEpID09IDEpICYmICgoKHVsX1N0YXR1c1JlZ2lzdGVyID4+IChiX1B1bHNlSW5jb2RlckNwdCkpICYgMSkgPT0gMSkpIHsKKwkJCQkJCWRldnByaXYtPnNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQlzX0ZJRk9JbnRlcnJ1cHRQYXJhbWV0ZXJzCisJCQkJCQkJW2RldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZV0uCisJCQkJCQkJdWxfT2xkSW50ZXJydXB0TWFzayA9CisJCQkJCQkJMHgxMDBVTCA8PAorCQkJCQkJCWJfUHVsc2VJbmNvZGVyQ3B0OworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJc19GSUZPSW50ZXJydXB0UGFyYW1ldGVycworCQkJCQkJCVtkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWlfV3JpdGVdLgorCQkJCQkJCWJfT2xkTW9kdWxlTWFzayA9CisJCQkJCQkJMSA8PCBiX01vZHVsZUNwdDsKKworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXNfRklGT0ludGVycnVwdFBhcmFtZXRlcnMKKwkJCQkJCQlbZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVpX1dyaXRlXS4KKwkJCQkJCQl1bF9PbGRDb3VudGVyTGF0Y2hWYWx1ZQorCQkJCQkJCT0gdWxfTGF0Y2hSZWdpc3RlclZhbHVlOworCisJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQlzX0ludGVycnVwdFBhcmFtZXRlcnMuCisJCQkJCQkJdWxfSW50ZXJydXB0T2NjdXIrKzsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIDA4OTkvMDIyNCB0byAxMTk5LzAyMjUgICAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIEluY3JlbWVudCB0aGUgd3JpdGUgRklGTyAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJZGV2cHJpdi0+CisJCQkJCQkJc19JbnRlcnJ1cHRQYXJhbWV0ZXJzLgorCQkJCQkJCXVpX1dyaXRlID0gKGRldnByaXYtPgorCQkJCQkJCXNfSW50ZXJydXB0UGFyYW1ldGVycy4KKwkJCQkJCQl1aV9Xcml0ZSArCisJCQkJCQkJMSkgJQorCQkJCQkJCUFQQ0kxNzEwX1NBVkVfSU5URVJSVVBUOworCisJCQkJCQliX0ludGVycnVwdEZsYWcgPSAxOworCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBDYWxsIHVzZXIgZnVuY3Rpb24gKi8KKwkJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8vU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlCisJCQkJCQlzZW5kX3NpZyhTSUdJTywKKwkJCQkJCQlkZXZwcml2LT50c2tfQ3VycmVudCwKKwkJCQkJCQkwKTsKKworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CQkvL3B1bHNlIGVuY29kZXIKKworCX0KKwlyZXR1cm47CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfQVBDSTE3MTAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfQVBDSTE3MTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OThjYmJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9BUENJMTcxMC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgQ09NRURJX1NVQkRfVFRMSU8JCTExCS8qIERpZ2l0YWwgSW5wdXQgT3V0cHV0IEJ1dCBUVEwgKi8KKyNkZWZpbmUgQ09NRURJX1NVQkRfUFdNCQkJMTIJLyogUHVsc2Ugd2lkdGggTWVhc3VyZW1lbnQgKi8KKyNkZWZpbmUgQ09NRURJX1NVQkRfU1NJCQkJMTMJLyogU3luY2hyb25vdXMgc2VyaWFsIGludGVyZmFjZSAqLworI2RlZmluZSBDT01FRElfU1VCRF9UT1IJCQkxNAkvKiBUb3IgY291bnRlciAqLworI2RlZmluZSBDT01FRElfU1VCRF9DSFJPTk8JCTE1CS8qIENocm9ubyBtZXRlciAqLworI2RlZmluZSBDT01FRElfU1VCRF9QVUxTRUVOQ09ERVIJMTYJLyogUHVsc2UgRW5jb2RlciBJTlAgQ1BUICovCisjZGVmaW5lIENPTUVESV9TVUJEX0lOQ1JFTUVOVEFMQ09VTlRFUgkxNwkvKiBJbmNyZW1lbnRhbCBDb3VudGVyICovCisKKyNkZWZpbmUgQVBDSTE3MTBfQk9BUkRfTkFNRQkJImFwY2kxNzEwIgorI2RlZmluZSBBUENJMTcxMF9CT0FSRF9WRU5ET1JfSUQJMHgxMEU4CisjZGVmaW5lIEFQQ0kxNzEwX0JPQVJEX0RFVklDRV9JRAkweDgxOEYKKyNkZWZpbmUgQVBDSTE3MTBfQUREUkVTU19SQU5HRQkJMjU2CisjZGVmaW5lIEFQQ0kxNzEwX0NPTkZJR19BRERSRVNTX1JBTkdFCTgKKyNkZWZpbmUgQVBDSTE3MTBfSU5DUkVNRU5UQUxfQ09VTlRFUgkweDUzNDMwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfU1NJX0NPVU5URVIJCTB4NTM0OTAwMDBVTAorI2RlZmluZSBBUENJMTcxMF9UVExfSU8JCQkweDU0NEMwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfRElHSVRBTF9JTwkJMHg0NDQ5MDAwMFVMCisjZGVmaW5lIEFQQ0kxNzEwXzgyWDU0X1RJTUVSCQkweDQ5NDMwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfQ0hST05PTUVURVIJCTB4NDM0ODAwMDBVTAorI2RlZmluZSBBUENJMTcxMF9QVUxTRV9FTkNPREVSCQkweDQ5NUEwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfVE9SX0NPVU5URVIJCTB4NTQ0RjAwMDBVTAorI2RlZmluZSBBUENJMTcxMF9QV00JCQkweDUwNTcwMDAwVUwKKyNkZWZpbmUgQVBDSTE3MTBfRVRNCQkJMHg0NTU0MDAwMFVMCisjZGVmaW5lIEFQQ0kxNzEwX0NEQQkJCTB4NDM0NDAwMDBVTAorI2RlZmluZSBBUENJMTcxMF9ESVNBQkxFCQkwCisjZGVmaW5lIEFQQ0kxNzEwX0VOQUJMRQkJCTEKKyNkZWZpbmUgQVBDSTE3MTBfU1lOQ0hST05PVVNfTU9ERQkxCisjZGVmaW5lIEFQQ0kxNzEwX0FTWU5DSFJPTk9VU19NT0RFCTAKKworLy9NT0RVTEUgSU5GTyBTVFJVQ1RVUkUKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kxNzEwX3R0bCA9IHsgNCwgeworCQkJCQkJICAgICAgQklQX1JBTkdFKDEwKSwKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSg1KSwKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSgyKSwKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSgxKQorCQkJCQkJICAgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kxNzEwX3NzaSA9IHsgNCwgeworCQkJCQkJICAgICAgQklQX1JBTkdFKDEwKSwKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSg1KSwKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSgyKSwKKwkJCQkJCSAgICAgIEJJUF9SQU5HRSgxKQorCQkJCQkJICAgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kxNzEwX2luY2NwdCA9IHsgNCwgeworCQkJCQkJCSBCSVBfUkFOR0UoMTApLAorCQkJCQkJCSBCSVBfUkFOR0UoNSksCisJCQkJCQkJIEJJUF9SQU5HRSgyKSwKKwkJCQkJCQkgQklQX1JBTkdFKDEpCisJCQkJCQkJIH0KK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kwMzUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTAzNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTI3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kwMzUuYwpAQCAtMCwwICsxLDYwMCBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTAzNSAgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kwMzUuYyB8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0wMzUgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKyNpbmNsdWRlICJod2Rydl9hcGNpMDM1LmgiCitJTlQgaV9XYXRjaGRvZ05iciA9IDA7CitJTlQgaV9UZW1wID0gMDsKK0lOVCBpX0ZsYWcgPSAxOworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kwMzVfQ29uZmlnVGltZXJXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgVGltZXIgLCBDb3VudGVyIG9yIFdhdGNoZG9nICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzBdICAgICAgICAgICAgOiAwIENvbmZpZ3VyZSBBcyBUaW1lciAgICAgIHwKK3wJCQkJCQkJCQkJICAgMSBDb25maWd1cmUgQXMgV2F0Y2hkb2cgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgICAgICAgICAgOiBXYXRjaGRvZyBudW1iZXIKK3wJCQkJCSAgZGF0YVsyXSAgICAgICAgICAgIDogVGltZSBiYXNlIFVuaXQgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbM10JCQkgOiBSZWxvYWQgVmFsdWUJCQkgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNF0gICAgICAgICAgICA6IEV4dGVybmFsIFRyaWdnZXIgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTpFbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6RGlzYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs1XSAgICAgICAgICAgIDpFeHRlcm5hbCBUcmlnZ2VyIExldmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwIFRyaWdnZXIgRGlzYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDEgVHJpZ2dlciBFbmFibGVkIChMb3cgbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwIFRyaWdnZXIgRW5hYmxlZCAoSGlnaCBMZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEgVHJpZ2dlciBFbmFibGVkIChIaWdoL0xvdyBsZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNl0gICAgICAgICAgICA6IEV4dGVybmFsIEdhdGUgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOkVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpEaXNhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzddICAgICAgICAgICAgOiBFeHRlcm5hbCBHYXRlIGxldmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwIEdhdGUgRGlzYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDEgR2F0ZSBFbmFibGVkIChMb3cgbGV2ZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwIEdhdGUgRW5hYmxlZCAoSGlnaCBMZXZlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbOF0gICAgICAgICAgICA6V2FybmluZyBSZWxheQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxOiBFTkFCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDogRElTQUJMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs5XSAgICAgICAgICAgIDpXYXJuaW5nIERlbGF5IGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxMF0gICAgICAgICAgIDpXYXJuaW5nIFJlbGF5IFRpbWUgdW5pdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxMV0gICAgICAgICAgIDpXYXJuaW5nIFJlbGF5IFRpbWUgUmVsb2FkIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzEyXSAgICAgICAgICAgOlJlc2V0IFJlbGF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBFTkFCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IERJU0FCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMTNdICAgICAgICAgICA6SW50ZXJydXB0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgOiBFTkFCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IERJU0FCTEUKKworfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kwMzVfQ29uZmlnVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9TdGF0dXMgPSAwOworCVVJTlQgdWlfQ29tbWFuZCA9IDA7CisJVUlOVCB1aV9Nb2RlID0gMDsKKwlpX1RlbXAgPSAwOworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKwlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IGRhdGFbMF07CisJaV9XYXRjaGRvZ05iciA9IGRhdGFbMV07CisJaWYgKGRhdGFbMF0gPT0gMCkgeworCQl1aV9Nb2RlID0gMjsKKwl9IGVsc2UgeworCQl1aV9Nb2RlID0gMDsKKwl9CisvL3VpX0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlKygoaV9XYXRjaGRvZ05ici0xKSozMikrMTIpOworCXVpX0NvbW1hbmQgPSAwOworLy91aV9Db21tYW5kID0gdWlfQ29tbWFuZCAmIDB4RkZGRkY5RkVVTDsKKwlvdXRsKHVpX0NvbW1hbmQsIGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMTIpOworCXVpX0NvbW1hbmQgPSAwOworCXVpX0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisvKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU2V0IHRoZSByZWxvYWQgdmFsdWUgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0bChkYXRhWzNdLCBkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDQpOworLyoqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNldCB0aGUgdGltZSB1bml0ICovCisvKioqKioqKioqKioqKioqKioqKioqLworCW91dGwoZGF0YVsyXSwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyA4KTsKKwlpZiAoZGF0YVswXSA9PSBBRERJREFUQV9USU1FUikgeworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZXQgdGhlIG1vZGUgOiAgICAgICAgICAgICAqLworCQkvKiAtIERpc2FibGUgdGhlIGhhcmR3YXJlICAgICAqLworCQkvKiAtIERpc2FibGUgdGhlIGNvdW50ZXIgbW9kZSAqLworCQkvKiAtIERpc2FibGUgdGhlIHdhcm5pbmcgICAgICAqLworCQkvKiAtIERpc2FibGUgdGhlIHJlc2V0ICAgICAgICAqLworCQkvKiAtIEVuYWJsZSB0aGUgdGltZXIgbW9kZSAgICAqLworCQkvKiAtIFNldCB0aGUgdGltZXIgbW9kZSAgICAgICAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQl1aV9Db21tYW5kID0KKwkJCSh1aV9Db21tYW5kICYgMHhGRkY3MTlFMlVMKSB8IHVpX01vZGUgPDwgMTNVTCB8IDB4MTBVTDsKKworCX0JCQkvL2lmIChkYXRhWzBdID09IEFERElEQVRBX1RJTUVSKQorCWVsc2UgeworCQlpZiAoZGF0YVswXSA9PSBBRERJREFUQV9XQVRDSERPRykgeworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2V0IHRoZSBtb2RlIDogICAgICAgICAgICAgKi8KKwkJCS8qIC0gRGlzYWJsZSB0aGUgaGFyZHdhcmUgICAgICovCisJCQkvKiAtIERpc2FibGUgdGhlIGNvdW50ZXIgbW9kZSAqLworCQkJLyogLSBEaXNhYmxlIHRoZSB3YXJuaW5nICAgICAgKi8KKwkJCS8qIC0gRGlzYWJsZSB0aGUgcmVzZXQgICAgICAgICovCisJCQkvKiAtIERpc2FibGUgdGhlIHRpbWVyIG1vZGUgICAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJdWlfQ29tbWFuZCA9IHVpX0NvbW1hbmQgJiAweEZGRjgxOUUyVUw7CisKKwkJfSBlbHNlIHsKKwkJCXByaW50aygiXG4gVGhlIHBhcmFtZXRlciBmb3IgVGltZXIvd2F0Y2hkb2cgc2VsZWN0aW9uIGlzIGluIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCW91dGwodWlfQ29tbWFuZCwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisJdWlfQ29tbWFuZCA9IDA7CisJdWlfQ29tbWFuZCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERpc2FibGUgdGhlIGhhcmR3YXJlIHRyaWdnZXIgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kID0gdWlfQ29tbWFuZCAmIDB4RkZGRkY4OUZVTDsKKwlpZiAoZGF0YVs0XSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2V0IHRoZSBoYXJkd2FyZSB0cmlnZ2VyIGxldmVsICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXVpX0NvbW1hbmQgPSB1aV9Db21tYW5kIHwgKGRhdGFbNV0gPDwgNSk7CisJfQorCW91dGwodWlfQ29tbWFuZCwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisJdWlfQ29tbWFuZCA9IDA7CisJdWlfQ29tbWFuZCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERpc2FibGUgdGhlIGhhcmR3YXJlIGdhdGUgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kID0gdWlfQ29tbWFuZCAmIDB4RkZGRkY4N0ZVTDsKKwlpZiAoZGF0YVs2XSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU2V0IHRoZSBoYXJkd2FyZSBnYXRlIGxldmVsICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfQ29tbWFuZCA9IHVpX0NvbW1hbmQgfCAoZGF0YVs3XSA8PCA3KTsKKwl9CisJb3V0bCh1aV9Db21tYW5kLCBkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwl1aV9Db21tYW5kID0gMDsKKwl1aV9Db21tYW5kID0gaW5sKGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMTIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEaXNhYmxlIHRoZSBoYXJkd2FyZSBvdXRwdXQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmQgPSB1aV9Db21tYW5kICYgMHhGRkZGRjlGQlVMOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNldCB0aGUgaGFyZHdhcmUgb3V0cHV0IGxldmVsICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmQgPSB1aV9Db21tYW5kIHwgKGRhdGFbOF0gPDwgMik7CisJb3V0bCh1aV9Db21tYW5kLCBkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwlpZiAoZGF0YVs5XSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNldCB0aGUgcmVsb2FkIHZhbHVlICovCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRsKGRhdGFbMTFdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAyNCk7CisgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2V0IHRoZSB0aW1lIHVuaXRlICovCisgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0bChkYXRhWzEwXSwKKwkJCWRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMjgpOworCX0KKworCXVpX0NvbW1hbmQgPSAwOworCXVpX0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRGlzYWJsZSB0aGUgaGFyZHdhcmUgb3V0cHV0ICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfQ29tbWFuZCA9IHVpX0NvbW1hbmQgJiAweEZGRkZGOUY3VUw7CisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgaGFyZHdhcmUgb3V0cHV0IGxldmVsICovCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmQgPSB1aV9Db21tYW5kIHwgKGRhdGFbMTJdIDw8IDMpOworCW91dGwodWlfQ29tbWFuZCwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyoqICBFbmFibGUgdGhlIHdhdGNoZG9nIGludGVycnVwdCAgKiovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfQ29tbWFuZCA9IDA7CisJdWlfQ29tbWFuZCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU2V0IHRoZSBpbnRlcnJ1cHQgc2VsZWN0aW9uICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxNik7CisKKwl1aV9Db21tYW5kID0gKHVpX0NvbW1hbmQgJiAweEZGRkZGOUZEVUwpIHwgKGRhdGFbMTNdIDw8IDEpOworCW91dGwodWlfQ29tbWFuZCwgZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kwMzVfU3RhcnRTdG9wV3JpdGVUaW1lcldhdGNoZG9nICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU3RhcnQgLyBTdG9wIFRoZSBTZWxlY3RlZCBUaW1lciAsIG9yIFdhdGNoZG9nICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzBdIDogMCAtIFN0b3AgU2VsZWN0ZWQgVGltZXIvV2F0Y2hkb2cgICAgIHwKK3wJCQkJCSAgICAgICAgICAgIDEgLSBTdGFydCBTZWxlY3RlZCBUaW1lci9XYXRjaGRvZyAgICB8Cit8CQkJCQkgICAgICAgICAgICAyIC0gVHJpZ2dlciBTZWxlY3RlZCBUaW1lci9XYXRjaGRvZyAgfAorfAkJCQkJICAgICAgICAgICAgMyAtIFN0b3AgQWxsIFRpbWVyL1dhdGNoZG9nICAgICAgICAgIHwKK3wJCQkJCSAgICAgICAgICAgIDQgLSBTdGFydCBBbGwgVGltZXIvV2F0Y2hkb2cgICAgICAgICB8Cit8CQkJCQkgICAgICAgICAgICA1IC0gVHJpZ2dlciBBbGwgVGltZXIvV2F0Y2hkb2cgICAgICAgfAorfAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yCQkJIHwKK3wJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMDM1X1N0YXJ0U3RvcFdyaXRlVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9Db21tYW5kID0gMDsKKwlJTlQgaV9Db3VudCA9IDA7CisJaWYgKGRhdGFbMF0gPT0gMSkgeworCQl1aV9Db21tYW5kID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwkgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFN0YXJ0IHRoZSBoYXJkd2FyZSAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfQ29tbWFuZCA9ICh1aV9Db21tYW5kICYgMHhGRkZGRjlGRlVMKSB8IDB4MVVMOworCQlvdXRsKHVpX0NvbW1hbmQsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwl9CQkJLy8gaWYgIChkYXRhWzBdPT0xKQorCWlmIChkYXRhWzBdID09IDIpIHsKKwkJdWlfQ29tbWFuZCA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAxMik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNldCB0aGUgdHJpZ2dlciBjb21tYW5kICovCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXVpX0NvbW1hbmQgPSAodWlfQ29tbWFuZCAmIDB4RkZGRkY5RkZVTCkgfCAweDIwMFVMOworCQlvdXRsKHVpX0NvbW1hbmQsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwl9CisKKwlpZiAoZGF0YVswXSA9PSAwKQkvL1N0b3AgVGhlIFdhdGNoZG9nCisJeworCQkvL1N0b3AgVGhlIFdhdGNoZG9nCisJCXVpX0NvbW1hbmQgPSAwOworCQkvL3VpX0NvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlKygoaV9XYXRjaGRvZ05ici0xKSozMikrMTIpOworCQkvL3VpX0NvbW1hbmQgPSB1aV9Db21tYW5kICYgMHhGRkZGRjlGRVVMOworCQlvdXRsKHVpX0NvbW1hbmQsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDEyKTsKKwl9CQkJLy8gIGlmIChkYXRhWzFdPT0wKQorCWlmIChkYXRhWzBdID09IDMpCS8vc3RvcCBhbGwgV2F0Y2hkb2dzCisJeworCQl1aV9Db21tYW5kID0gMDsKKwkJZm9yIChpX0NvdW50ID0gMTsgaV9Db3VudCA8PSA0OyBpX0NvdW50KyspIHsKKwkJCWlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9XQVRDSERPRykgeworCQkJCXVpX0NvbW1hbmQgPSAweDJVTDsKKwkJCX0gZWxzZSB7CisJCQkJdWlfQ29tbWFuZCA9IDB4MTBVTDsKKwkJCX0KKwkJCWlfV2F0Y2hkb2dOYnIgPSBpX0NvdW50OworCQkJb3V0bCh1aV9Db21tYW5kLAorCQkJCWRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsKKwkJCQkwKTsKKwkJfQorCisJfQorCWlmIChkYXRhWzBdID09IDQpCS8vc3RhcnQgYWxsIFdhdGNoZG9ncworCXsKKwkJdWlfQ29tbWFuZCA9IDA7CisJCWZvciAoaV9Db3VudCA9IDE7IGlfQ291bnQgPD0gNDsgaV9Db3VudCsrKSB7CisJCQlpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPT0gQURESURBVEFfV0FUQ0hET0cpIHsKKwkJCQl1aV9Db21tYW5kID0gMHgxVUw7CisJCQl9IGVsc2UgeworCQkJCXVpX0NvbW1hbmQgPSAweDhVTDsKKwkJCX0KKwkJCWlfV2F0Y2hkb2dOYnIgPSBpX0NvdW50OworCQkJb3V0bCh1aV9Db21tYW5kLAorCQkJCWRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsKKwkJCQkwKTsKKwkJfQorCX0KKwlpZiAoZGF0YVswXSA9PSA1KQkvL3RyaWdnZXIgYWxsIFdhdGNoZG9ncworCXsKKwkJdWlfQ29tbWFuZCA9IDA7CisJCWZvciAoaV9Db3VudCA9IDE7IGlfQ291bnQgPD0gNDsgaV9Db3VudCsrKSB7CisJCQlpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPT0gQURESURBVEFfV0FUQ0hET0cpIHsKKwkJCQl1aV9Db21tYW5kID0gMHg0VUw7CisJCQl9IGVsc2UgeworCQkJCXVpX0NvbW1hbmQgPSAweDIwVUw7CisJCQl9CisKKwkJCWlfV2F0Y2hkb2dOYnIgPSBpX0NvdW50OworCQkJb3V0bCh1aV9Db21tYW5kLAorCQkJCWRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsKKwkJCQkwKTsKKwkJfQorCQlpX1RlbXAgPSAxOworCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kwMzVfUmVhZFRpbWVyV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaGUgU2VsZWN0ZWQgVGltZXIgLCBDb3VudGVyIG9yIFdhdGNoZG9nICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgCQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJZGF0YVswXSAgICAgICAgICAgIDogc29mdHdhcmUgdHJpZ2dlciBzdGF0dXMKKyAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgIDogaGFyZHdhcmUgdHJpZ2dlciBzdGF0dXMKK3wgICAgIAkJCQlkYXRhWzJdICAgICAgICAgICAgOiBTb2Z0d2FyZSBjbGVhciBzdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbM10gICAgICAgICAgICA6IE92ZXJmbG93IHN0YXR1cworICAgICAgICAgICAgICAgICAgICAgZGF0YVs0XSAgICAgICAgICAgIDogVGltZXIgYWN0dWFsIHZhbHVlCisKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTAzNV9SZWFkVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9TdGF0dXMgPSAwOwkvLyBTdGF0dXMgcmVnaXN0ZXIKKwlpX1dhdGNoZG9nTmJyID0gaW5zbi0+dW51c2VkWzBdOworCSAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJLyogR2V0IHRoZSBzdGF0dXMgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqLworCXVpX1N0YXR1cyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDE2KTsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBHZXQgdGhlIHNvZnR3YXJlIHRyaWdnZXIgc3RhdHVzICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJZGF0YVswXSA9ICgodWlfU3RhdHVzID4+IDEpICYgMSk7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogR2V0IHRoZSBoYXJkd2FyZSB0cmlnZ2VyIHN0YXR1cyAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWRhdGFbMV0gPSAoKHVpX1N0YXR1cyA+PiAyKSAmIDEpOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBHZXQgdGhlIHNvZnR3YXJlIGNsZWFyIHN0YXR1cyAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlkYXRhWzJdID0gKCh1aV9TdGF0dXMgPj4gMykgJiAxKTsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogR2V0IHRoZSBvdmVyZmxvdyBzdGF0dXMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJZGF0YVszXSA9ICgodWlfU3RhdHVzID4+IDApICYgMSk7CisJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1RJTUVSKSB7CisJCWRhdGFbNF0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChpX1dhdGNoZG9nTmJyIC0gMSkgKiAzMikgKyAwKTsKKworCX0JCQkvLyAgaWYgIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZT09QURESURBVEFfVElNRVIpCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IElOVCBpX0FQQ0kwMzVfQ29uZmlnQW5hbG9nSW5wdXQgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgQW5hbG9nIElucHV0IFN1YmRldmljZSAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzICAgICA6IFN1YmRldmljZSBQb2ludGVyICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICA6IEluc24gU3RydWN0dXJlIFBvaW50ZXIgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICAgICAgIDogV2FybmluZyBkZWxheSB2YWx1ZQorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTAzNV9Db25maWdBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OworCW91dGwoMHgyMDAgfCAwLCBkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyAweDQpOworCW91dGwoMCwgZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbml0aWFsaXNlIHRoZSB3YXJuaW5nIHZhbHVlICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0bCgweDMwMCB8IDAsIGRldnByaXYtPmlvYmFzZSArIDEyOCArIDB4NCk7CisJb3V0bCgoZGF0YVswXSA8PCA4KSwgZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMCk7CisJb3V0bCgweDIwMDAwMFVMLCBkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyAxMik7CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kwMzVfUmVhZEFuYWxvZ0lucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCAgdmFsdWUgIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKK3wJCQkgICAgICAgICAgZGF0YVswXSAgOiBEaWdpdGFsIFZhbHVlIE9mIElucHV0ICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTAzNV9SZWFkQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfQ29tbWFuZFJlZ2lzdGVyID0gMDsKKy8qKioqKioqKioqKioqKioqKiovCisvKiAgU2V0IHRoZSBzdGFydCAqLworLyoqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSAweDgwMDAwOworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogV3JpdGUgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGwodWlfQ29tbWFuZFJlZ2lzdGVyLCBkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyA4KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJlYWQgdGhlIGRpZ2l0YWwgdmFsdWUgb2YgdGhlIGlucHV0ICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWRhdGFbMF0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMjgpOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogIGludCBpX0FQQ0kwMzVfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikJCQkgICAgIHwKK3wJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6UmVzZXRzIHRoZSByZWdpc3RlcnMgb2YgdGhlIGNhcmQgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMDM1X1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCUlOVCBpX0NvdW50ID0gMDsKKwlmb3IgKGlfQ291bnQgPSAxOyBpX0NvdW50IDw9IDQ7IGlfQ291bnQrKykgeworCQlpX1dhdGNoZG9nTmJyID0gaV9Db3VudDsKKwkJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArICgoaV9XYXRjaGRvZ05iciAtIDEpICogMzIpICsgMCk7CS8vc3RvcCBhbGwgdGltZXJzCisJfQorCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyAxMik7CS8vRGlzYWJsZSB0aGUgd2FybmluZyBkZWxheQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBzdGF0aWMgdm9pZCB2X0FQQ0kwMzVfSW50ZXJydXB0CQkJCQkgICAgIHwKK3wJCQkJCSAgKGludCBpcnEgLCB2b2lkICpkKSAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEludGVycnVwdCBwcm9jZXNzaW5nIFJvdXRpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBpbnQgaXJxICAgICAgICAgICAgICAgICA6IGlycSBudW1iZXIgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmQgICAgICAgICAgICAgICAgIDogdm9pZCBwb2ludGVyICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworc3RhdGljIHZvaWQgdl9BUENJMDM1X0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCVVJTlQgdWlfU3RhdHVzUmVnaXN0ZXIxID0gMDsKKwlVSU5UIHVpX1N0YXR1c1JlZ2lzdGVyMiA9IDA7CisJVUlOVCB1aV9SZWFkQ29tbWFuZCA9IDA7CisJVUlOVCB1aV9DaGFubmVsTnVtYmVyID0gMDsKKwlVSU5UIHVpX0RpZ2l0YWxUZW1wZXJhdHVyZSA9IDA7CisJaWYgKGlfVGVtcCA9PSAxKSB7CisJCWlfV2F0Y2hkb2dOYnIgPSBpX0ZsYWc7CisJCWlfRmxhZyA9IGlfRmxhZyArIDE7CisJfQorICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBvZiB0ZW1wZXJhdHVyZSBXYXJuaW5nICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9TdGF0dXNSZWdpc3RlcjEgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMTYpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciBmb3IgV2F0Y2hkb2cvdGltZXIgKi8KKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCXVpX1N0YXR1c1JlZ2lzdGVyMiA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGlfV2F0Y2hkb2dOYnIgLSAxKSAqIDMyKSArIDIwKTsKKworCWlmICgoKCh1aV9TdGF0dXNSZWdpc3RlcjEpICYgMHg4KSA9PSAweDgpKQkvL1Rlc3QgaWYgd2FybmluZyByZWxheSBpbnRlcnJ1cHQKKwl7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIERpc2FibGUgdGhlIHRlbXBlcmF0dXJlIHdhcm5pbmcgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfUmVhZENvbW1hbmQgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgMTIpOworCQl1aV9SZWFkQ29tbWFuZCA9IHVpX1JlYWRDb21tYW5kICYgMHhGRkRGMDAwMFVMOworCQlvdXRsKHVpX1JlYWRDb21tYW5kLCBkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyAxMik7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBSZWFkIHRoZSBjaGFubmVsIG51bWJlciAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfQ2hhbm5lbE51bWJlciA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyAxMjggKyA2MCk7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBSZWFkIHRoZSBkaWdpdGFsIHRlbXBlcmF0dXJlIHZhbHVlICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQl1aV9EaWdpdGFsVGVtcGVyYXR1cmUgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMTI4ICsgNjApOworCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJfQkJCS8vaWYgKCgodWlfU3RhdHVzUmVnaXN0ZXIxICYgMHg4KSA9PSAweDgpKQorCisJZWxzZSB7CisJCWlmICgodWlfU3RhdHVzUmVnaXN0ZXIyICYgMHgxKSA9PSAweDEpIHsKKwkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CS8vIHNlbmQgc2lnbmFsIHRvIHRoZSBzYW1wbGUKKwkJfQorCX0JCQkvL2Vsc2UgaWYgKCgodWlfU3RhdHVzUmVnaXN0ZXIxICYgMHg4KSA9PSAweDgpKQorCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMDM1LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kwMzUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGQ3YzBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMDM1LmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qIENhcmQgU3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgQVBDSTAzNV9CT0FSRF9WRU5ET1JfSUQJCTB4MTVCOAorI2RlZmluZSBBUENJMDM1X0FERFJFU1NfUkFOR0UJCTI1NQorCitJTlQgaV9UV19OdW1iZXI7CitzdHJ1Y3QgeworCUlOVCBpX0dhaW47CisJSU5UIGlfUG9sYXJpdHk7CisJSU5UIGlfT2Zmc2V0UmFuZ2U7CisJSU5UIGlfQ291cGxpbmc7CisJSU5UIGlfU2luZ2xlRGlmZjsKKwlJTlQgaV9BdXRvQ2FsaWJyYXRpb247CisJVUlOVCB1aV9SZWxvYWRWYWx1ZTsKKwlVSU5UIHVpX1RpbWVVbml0UmVsb2FkVmFsOworCUlOVCBpX0ludGVycnVwdDsKKwlJTlQgaV9Nb2R1bGVTZWxlY3Rpb247Cit9IENvbmZpZ19QYXJhbWV0ZXJzX01haW47CisKKy8qIEFOQUxPRyBJTlBVVCBSQU5HRSAqLworc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXBjaTAzNV9haSA9IHsgOCwgeworCQkJCSAgICAgICBCSVBfUkFOR0UoMTApLAorCQkJCSAgICAgICBCSVBfUkFOR0UoNSksCisJCQkJICAgICAgIEJJUF9SQU5HRSgyKSwKKwkJCQkgICAgICAgQklQX1JBTkdFKDEpLAorCQkJCSAgICAgICBVTklfUkFOR0UoMTApLAorCQkJCSAgICAgICBVTklfUkFOR0UoNSksCisJCQkJICAgICAgIFVOSV9SQU5HRSgyKSwKKwkJCQkgICAgICAgVU5JX1JBTkdFKDEpCisJCQkJICAgICAgIH0KK307CisKKy8qIFRpbWVyIC8gV2F0Y2hkb2cgUmVsYXRlZCBEZWZpbmVzICovCisjZGVmaW5lIEFQQ0kwMzVfVENXX1NZTkNfRU5BQkxFRElTQUJMRQkwCisjZGVmaW5lIEFQQ0kwMzVfVENXX1JFTE9BRF9WQUxVRQk0CisjZGVmaW5lIEFQQ0kwMzVfVENXX1RJTUVCQVNFCQk4CisjZGVmaW5lIEFQQ0kwMzVfVENXX1BST0cJCTEyCisjZGVmaW5lIEFQQ0kwMzVfVENXX1RSSUdfU1RBVFVTCQkxNgorI2RlZmluZSBBUENJMDM1X1RDV19JUlEJCQkyMAorI2RlZmluZSBBUENJMDM1X1RDV19XQVJOX1RJTUVWQUwJMjQKKyNkZWZpbmUgQVBDSTAzNV9UQ1dfV0FSTl9USU1FQkFTRQkyOAorCisjZGVmaW5lIEFERElEQVRBX1RJTUVSCQkJMAorLyogI2RlZmluZSBBRERJREFUQV9XQVRDSERPRwkJMSAqLworCisjZGVmaW5lIEFQQ0kwMzVfVFcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTAzNV9UVzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgQVBDSTAzNV9UVzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQKKyNkZWZpbmUgQVBDSTAzNV9UVzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTYKKworI2RlZmluZSBBUENJMDM1X0FJX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTAzNV9URU1QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjgKKyNkZWZpbmUgQVBDSTAzNV9BTFJfU0VRICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kwMzVfU1RBUlRfU1RPUF9JTkRFWCAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBUENJMDM1X0FMUl9TVEFSVF9TVE9QICAgICAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFQQ0kwMzVfQUxSX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVBDSTAzNV9FT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBBUENJMDM1X0NIQU5fTk8gICAgICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEFQQ0kwMzVfQ0hBTl9WQUwgICAgICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQVBDSTAzNV9DT05WX1RJTUVfVElNRV9CQVNFCTM2CisjZGVmaW5lIEFQQ0kwMzVfUkVMT0FEX0NPTlZfVElNRV9WQUwJMzIKKyNkZWZpbmUgQVBDSTAzNV9ERUxBWV9USU1FX1RJTUVfQkFTRQk0NAorI2RlZmluZSBBUENJMDM1X1JFTE9BRF9ERUxBWV9USU1FX1ZBTAk0MAorI2RlZmluZSBFTkFCTEVfRVhUX1RSSUcJCQkxCisjZGVmaW5lIEVOQUJMRV9FWFRfR0FURQkJCTIKKyNkZWZpbmUgRU5BQkxFX0VYVF9UUklHX0dBVEUJCTMKKworI2RlZmluZSBBTkFMT0dfSU5QVVQJCQkwCisjZGVmaW5lIFRFTVBFUkFUVVJFCQkJMQorI2RlZmluZSBSRVNJU1RBTkNFCQkJMgorCisjZGVmaW5lIEFERElEQVRBX0dSRUFURVJfVEhBTl9URVNUCTAKKyNkZWZpbmUgQURESURBVEFfTEVTU19USEFOX1RFU1QJCTEKKworI2RlZmluZSBBUENJMDM1X01BWFZPTFQgICAgICAgICAgICAgICAgICAgICAgICAgMi41CisKKyNkZWZpbmUgQURESURBVEFfVU5JUE9MQVIgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFERElEQVRBX0JJUE9MQVIgICAgICAgICAgICAgICAgICAgICAgICAgMgorCisvKiBBRERJREFUQSBFbmFibGUgRGlzYWJsZSAqLworI2RlZmluZSBBRERJREFUQV9FTkFCTEUJCQkJMQorI2RlZmluZSBBRERJREFUQV9ESVNBQkxFCQkJMAorCisvKiBIYXJkd2FyZSBMYXllciBmdW5jdGlvbnMgZm9yIEFwY2kwMzUgKi8KKworLyogVElNRVIgKi8KKy8qIHRpbWVyIHZhbHVlIGlzIHBhc3NlZCBhcyB1IHNlY29uZHMgKi8KK0lOVCBpX0FQQ0kwMzVfQ29uZmlnVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kwMzVfU3RhcnRTdG9wV3JpdGVUaW1lcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTAzNV9SZWFkVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qIFRlbXBlcmF0dXJlIFJlbGF0ZWQgRGVmaW5lcyAoQW5hbG9nIElucHV0IFN1YmRldmljZSkgKi8KKworSU5UIGlfQVBDSTAzNV9Db25maWdBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMDM1X1JlYWRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyogSW50ZXJydXB0ICovCitzdGF0aWMgdm9pZCB2X0FQQ0kwMzVfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpOworCisvKiBSZXNldCBmdW5jdGlvbnMgKi8KK0lOVCBpX0FQQ0kwMzVfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxMDMyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxMDMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3OTZjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTEwMzIuYwpAQCAtMCwwICsxLDI4NSBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTEwMzIgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kxMDMyLmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0xMDMyICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKyNpbmNsdWRlICJod2Rydl9hcGNpMTAzMi5oIgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisvL0dsb2JhbCB2YXJpYWJsZXMKK1VJTlQgdWlfSW50ZXJydXB0U3RhdHVzID0gMDsKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxMDMyX0NvbmZpZ0RpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyB0aGUgZGlnaXRhbCBpbnB1dCBTdWJkZXZpY2UgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIGRhdGFbMF0gICAgICAgICAgICA6IDEgRW5hYmxlICBEaWdpdGFsIElucHV0IEludGVycnVwdCB8Cit8CQkJCQkJCQkgICAwIERpc2FibGUgRGlnaXRhbCBJbnB1dCBJbnRlcnJ1cHQgfAorfAkJCSAgZGF0YVsxXSAgICAgICAgICAgIDogMCBBRERJREFUQSBJbnRlcnJ1cHQgT1IgTE9HSUMJIHwKK3wJCQkJCQkJCSA6IDEgQURESURBVEEgSW50ZXJydXB0IEFORCBMT0dJQyAgICB8Cit8CQkJICBkYXRhWzJdCQkJIDogSW50ZXJydXB0IG1hc2sgZm9yIHRoZSBtb2RlIDEJIHwKK3wJCQkgIGRhdGFbM10JCQkgOiBJbnRlcnJ1cHQgbWFzayBmb3IgdGhlIG1vZGUgMgkgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxMDMyX0NvbmZpZ0RpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UbXBWYWx1ZTsKKworCVVMT05HIHVsX0NvbW1hbmQxID0gMDsKKwlVTE9ORyB1bF9Db21tYW5kMiA9IDA7CisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgZGlnaXRhbCBpbnB1dCBsb2dpYyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpZiAoZGF0YVswXSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKwkJdWxfQ29tbWFuZDEgPSB1bF9Db21tYW5kMSB8IGRhdGFbMl07CisJCXVsX0NvbW1hbmQyID0gdWxfQ29tbWFuZDIgfCBkYXRhWzNdOworCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTEpOworCQlvdXRsKHVsX0NvbW1hbmQyLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTIpOworCQlpZiAoZGF0YVsxXSA9PSBBRERJREFUQV9PUikgeworCQkJb3V0bCgweDQsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSVJRKTsKKwkJCXVpX1RtcFZhbHVlID0KKwkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JUlEpOworCQl9CQkvL2lmIChkYXRhWzFdID09IEFERElEQVRBX09SKQorCQllbHNlIHsKKwkJCW91dGwoMHg2LCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lSUSk7CisJCX0JCS8vZWxzZSBpZihkYXRhWzFdID09IEFERElEQVRBX09SKQorCX0JCQkvLyBpZiggZGF0YVswXSA9PSBBRERJREFUQV9FTkFCTEUpCisJZWxzZSB7CisJCXVsX0NvbW1hbmQxID0gdWxfQ29tbWFuZDEgJiAweEZGRkYwMDAwOworCQl1bF9Db21tYW5kMiA9IHVsX0NvbW1hbmQyICYgMHhGRkZGMDAwMDsKKwkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUxKTsKKwkJb3V0bCh1bF9Db21tYW5kMiwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUyKTsKKwkJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSVJRKTsKKwl9CQkJLy9lbHNlIGlmICAoIGRhdGFbMF0gPT0gQURESURBVEFfRU5BQkxFKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTAzMl9SZWFkMURpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBkaWdpdGFsIGlucHV0ICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgICAgVUlOVCB1aV9DaGFubmVsIDogQ2hhbm5lbCBudW1iZXIgdG8gcmVhZCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTEwMzJfUmVhZDFEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVG1wVmFsdWUgPSAwOworCVVJTlQgdWlfQ2hhbm5lbDsKKwl1aV9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9IDMxKSB7CisJCXVpX1RtcFZhbHVlID0gKFVJTlQpIGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQKTsKKwkJLy8gIHNpbmNlIG9ubHkgMSBjaGFubmVsIHJlcWQgIHRvIGJyaW5nIGl0IHRvIGxhc3QgYml0IGl0IGlzIHJvdGF0ZWQKKwkJLy8gIDggKyhjaGFuIC0gMSkgdGltZXMgdGhlbiBBTkRlZCB3aXRoIDEgZm9yIGxhc3QgYml0LgorCQkqZGF0YSA9ICh1aV9UbXBWYWx1ZSA+PiB1aV9DaGFubmVsKSAmIDB4MTsKKwl9CQkJLy9pZih1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PTMxKQorCWVsc2UgeworCQkvL2NvbWVkaV9lcnJvcihkZXYsIiBcbiBjaGFuIHNwZWMgd3JvbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJfQkJCS8vZWxzZSBpZih1aV9DaGFubmVsID49IDAgJiYgdWlfQ2hhbm5lbCA8PTMxKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTEwMzJfUmVhZE1vcmVEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgUmVxdWVzdGVkIGRpZ2l0YWwgaW5wdXRzICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyBiZSBSZWFkICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTEwMzJfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfUG9ydFZhbHVlID0gZGF0YVswXTsKKwlVSU5UIHVpX01hc2sgPSAwOworCVVJTlQgdWlfTm9PZkNoYW5uZWxzOworCisJdWlfTm9PZkNoYW5uZWxzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkqZGF0YSA9IChVSU5UKSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUCk7CisJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWxzKSB7CisJCWNhc2UgMjoKKwkJCXVpX01hc2sgPSAzOworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJdWlfTWFzayA9IDE1OworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDQgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJdWlfTWFzayA9IDI1NTsKKwkJCSpkYXRhID0gKCpkYXRhID4+ICg4ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgMTY6CisJCQl1aV9NYXNrID0gNjU1MzU7CisJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMTYgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSAzMToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLy9jb21lZGlfZXJyb3IoZGV2LCIgXG5jaGFuIHNwZWMgd3JvbmdcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQkJYnJlYWs7CisJCX0JCS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwl9CQkJLy9pZihkYXRhWzFdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkqZGF0YSA9IHVpX0ludGVycnVwdFN0YXR1czsKKwkJfQkJLy9pZihkYXRhWzFdPT0xKQorCX0JCQkvL2Vsc2UgaWYoZGF0YVsxXT09MCkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IHN0YXRpYyB2b2lkIHZfQVBDSTEwMzJfSW50ZXJydXB0CQkJCQkgICAgIHwKK3wJCQkJCSAgKGludCBpcnEgLCB2b2lkICpkKSAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgaW50ZXJydXB0aWJsZSBkaWdpdGFsIGlucHV0cyB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBpbnQgaXJxICAgICAgICAgICAgICAgICA6IGlycSBudW1iZXIgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmQgICAgICAgICAgICAgICAgIDogdm9pZCBwb2ludGVyICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitzdGF0aWMgdm9pZCB2X0FQQ0kxMDMyX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCisJVUlOVCB1aV9UZW1wOworCS8vZGlzYWJsZSB0aGUgaW50ZXJydXB0CisJdWlfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lSUSk7CisJb3V0bCh1aV9UZW1wICYgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfRElTQUJMRSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JUlEpOworCXVpX0ludGVycnVwdFN0YXR1cyA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9TVEFUVVMpOworCXVpX0ludGVycnVwdFN0YXR1cyA9IHVpX0ludGVycnVwdFN0YXR1cyAmIDBYMDAwMEZGRkY7CisJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsJLy8gc2VuZCBzaWduYWwgdG8gdGhlIHNhbXBsZQorCW91dGwodWlfVGVtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JUlEpOwkvL2VuYWJsZSB0aGUgaW50ZXJydXB0CisJcmV0dXJuOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTEwMzJfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6cmVzZXRzIGFsbCB0aGUgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxMDMyX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lSUSk7CS8vZGlzYWJsZSB0aGUgaW50ZXJydXB0cworCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9TVEFUVVMpOwkvL1Jlc2V0IHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyCisJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUxKTsJLy9EaXNhYmxlIHRoZSBhbmQvb3IgaW50ZXJydXB0CisJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUyKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTEwMzIuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTEwMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTllZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTAzMi5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qKioqKioqKiogICAgICBEZWZpbml0aW9ucyBmb3IgQVBDSS0xMDMyIGNhcmQgICoqKioqLworCisjZGVmaW5lIEFQQ0kxMDMyX0JPQVJEX1ZFTkRPUl9JRCAweDE1QjgKKyNkZWZpbmUgQVBDSTEwMzJfQUREUkVTU19SQU5HRSAgMjAKKy8vRElHSVRBTCBJTlBVVCBERUZJTkUKKworI2RlZmluZSBBUENJMTAzMl9ESUdJVEFMX0lQICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMSAgICAgNAorI2RlZmluZSBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMiAgICAgOAorI2RlZmluZSBBUENJMTAzMl9ESUdJVEFMX0lQX0lSUSAgICAgICAgICAgICAgICAgMTYKKworLy9EaWdpdGFsIElucHV0IElSUSBGdW5jdGlvbiBTZWxlY3Rpb24KKyNkZWZpbmUgQURESURBVEFfT1IgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFERElEQVRBX0FORCAgICAgICAgICAgICAgICAgMQorCisvL0RpZ2l0YWwgSW5wdXQgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9TVEFUVVMgICAgMTIKKworLy9EaWdpdGFsIElucHV0IEludGVycnVwdCBFbmFibGUgRGlzYWJsZS4KKyNkZWZpbmUgQVBDSTEwMzJfRElHSVRBTF9JUF9JTlRFUlJVUFRfRU5BQkxFICAgIDB4NAorI2RlZmluZSBBUENJMTAzMl9ESUdJVEFMX0lQX0lOVEVSUlVQVF9ESVNBQkxFICAgMHhGRkZGRkZGQgorCisvL0FERElEQVRBIEVuYWJsZSBEaXNhYmxlCisKKyNkZWZpbmUgQURESURBVEFfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURESURBVEFfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8gSGFyZHdhcmUgTGF5ZXIgIGZ1bmN0aW9ucyBmb3IgQXBjaTEwMzIKKworLy9ESQorLy8gZm9yIGRpIHJlYWQKKworSU5UIGlfQVBDSTEwMzJfQ29uZmlnRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTAzMl9SZWFkMURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitJTlQgaV9BUENJMTAzMl9SZWFkTW9yZURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvLyBJbnRlcnJ1cHQgZnVuY3Rpb25zLi4uLi4KKworc3RhdGljIHZvaWQgdl9BUENJMTAzMl9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCk7CisvL1Jlc2V0CitJTlQgaV9BUENJMTAzMl9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDZhZGNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUwMC5jCkBAIC0wLDAgKzEsMzA0NSBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTE1MDAgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kxNTAwLmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0xNTAwICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworI2luY2x1ZGUgImh3ZHJ2X2FwY2kxNTAwLmgiCisKK2ludCBpX1RpbWVyQ291bnRlcjFJbml0ID0gMDsKK2ludCBpX1RpbWVyQ291bnRlcjJJbml0ID0gMDsKK2ludCBpX1dhdGNoZG9nQ291bnRlcjNJbml0ID0gMDsKK2ludCBpX0V2ZW50MVN0YXR1cyA9IDAsIGlfRXZlbnQyU3RhdHVzID0gMDsKK2ludCBpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0ID0gMDsKK2ludCBpX0xvZ2ljID0gMCwgaV9Db3VudGVyTG9naWMgPSAwOworaW50IGlfSW50ZXJydXB0TWFzayA9IDA7CitpbnQgaV9JbnB1dENoYW5uZWwgPSAwOworaW50IGlfVGltZXJDb3VudGVyMUVuYWJsZWQgPSAwLCBpX1RpbWVyQ291bnRlcjJFbmFibGVkID0KKwkwLCBpX1dhdGNoZG9nQ291bnRlcjNFbmFibGVkID0gMDsKKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfQ29uZmlnRGlnaXRhbElucHV0RXZlbnQgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBBbiBldmVudCBjYW4gYmUgZ2VuZXJhdGVkIGZvciBlYWNoIHBvcnQuICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBldmVudCBpcyByZWxhdGVkIHRvIHRoZSBmaXJzdCA4IGNoYW5uZWxzICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgKHBvcnQgMSkgYW5kIHRoZSBzZWNvbmQgdG8gdGhlIGZvbGxvd2luZyA2IGNoYW5uZWxzICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAocG9ydCAyKS4gQW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCB3aGVuIG9uZSBvciBib3RoICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGV2ZW50cyBoYXZlIG9jY3VycmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICBkYXRhWzBdICAgICAgICAgICAgOk51bWJlciBvZiB0aGUgaW5wdXQgcG9ydCBvbiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdGhlIGV2ZW50IHdpbGwgdGFrZSBwbGFjZSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSBvciAyKQorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgICAgICAgICA6IFRoZSBldmVudCBsb2dpYyBmb3IgcG9ydCAxIGhhcyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlZSBwb3NzaWJpbGl0aWVzICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjAgIEFQQ0kxNTAwX0FORCAgICAgICA6VGhpcyBsb2dpYyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rcyAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnB1dHMgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhbiBBTkQgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpYy4gICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBBUENJMTUwMF9PUiAgICAgICAgOlRoaXMgbG9naWMgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua3MgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaW5wdXRzICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1IgbG9naWMuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgQVBDSTE1MDBfT1JfUFJJT1JJVFkgICAgICAgIHwKK3wJCQkJCQkJCTpUaGlzIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGlucHV0cyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5ICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1IgbG9naWMuICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCAxICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcyB0aGUgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsIGFuZCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgICA4ICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc21hbGxlc3R8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdGhlIHNlY29uZCBwb3J0IHRoZSB1c2VyIGhhc3wKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgcG9zc2liaWxpdHk6ICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVBDSTE1MDBfT1IgICAgICAgIDpUaGlzIGxvZ2ljICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtzICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGlucHV0cyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGEgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGFyaXR5ICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1IgbG9naWMgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGRhdGFbMl0gICAgICAgICAgICAgIDogVGhlc2UgOC1jaGFyYWN0ZXIgd29yZCBmb3IgcG9ydDF8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgNi1jaGFyYWN0ZXIgd29yZCBmb3IgcG9ydCAyIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmUgdGhlIG1hc2sgb2YgdGhlIGV2ZW50LiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBwbGFjZSBnaXZlcyB0aGUgc3RhdGUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgaW5wdXQgY2hhbm5lbHMgYW5kIGNhbiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgb25lIG9mIHRoZXNlIHNpeCBjaGFyYWN0ZXJzfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIDogVGhpcyBpbnB1dCBtdXN0IGJlIG9uIDAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgOiBUaGlzIGlucHV0IG11c3QgYmUgb24gMSAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICA6IFRoaXMgaW5wdXQgcmVhY3RzIHRvICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBmYWxsaW5nIGVkZ2UgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAgOiBUaGlzIGlucHV0IHJlYWN0cyB0byBhICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpc2luZyBlZGdlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgIDogVGhpcyBpbnB1dCByZWFjdHMgdG8gYm90aCBlZGdlcyB8Cit8Cit8CQkJCQkJCQk1ICA6IFRoaXMgaW5wdXQgaXMgbm90ICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCBmb3IgZXZlbnQgICAJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNTAwX0NvbmZpZ0RpZ2l0YWxJbnB1dEV2ZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaV9QYXR0ZXJuUG9sYXJpdHkgPSAwLCBpX1BhdHRlcm5UcmFuc2l0aW9uID0gMCwgaV9QYXR0ZXJuTWFzayA9IDA7CisJaW50IGlfTWF4Q2hhbm5lbCA9IDAsIGlfQ291bnQgPSAwLCBpX0V2ZW50TWFzayA9IDA7CisJaW50IGlfUGF0dGVyblRyYW5zaXRpb25Db3VudCA9IDAsIGlfUmVnVmFsdWU7CisJaW50IGk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19NQVNURVJfSU5URVJSVVBUX0NPTlRST0wsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRGlzYWJsZXMgIHRoZSBtYWluIGludGVycnVwdCBvbiB0aGUgYm9hcmQgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoMHgwMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwlpZiAoZGF0YVswXSA9PSAxKSB7CisJCWlfTWF4Q2hhbm5lbCA9IDg7CisJfQkJCS8vIGlmIChkYXRhWzBdID09IDEpCisJZWxzZSB7CisJCWlmIChkYXRhWzBdID09IDIpIHsKKwkJCWlfTWF4Q2hhbm5lbCA9IDY7CisJCX0JCS8vIGlmKGRhdGFbMF09PTIpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgcG9ydCBldmVudCAgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vZWxzZSBpZihkYXRhWzBdPT0yKQorCX0JCQkvL2Vsc2UgIGlmIChkYXRhWzBdID09IDEpCisJc3dpdGNoIChkYXRhWzFdKSB7CisJY2FzZSAwOgorCQlkYXRhWzFdID0gQVBDSTE1MDBfQU5EOworCQlicmVhazsKKwljYXNlIDE6CisJCWRhdGFbMV0gPSBBUENJMTUwMF9PUjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkYXRhWzFdID0gQVBDSTE1MDBfT1JfUFJJT1JJVFk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgc3BlY2lmaWVkIGludGVycnVwdCBsb2dpYyBkb2VzIG5vdCBleGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvL3N3aXRjaChkYXRhWzFdKTsKKworCWlfTG9naWMgPSBkYXRhWzFdOworCWZvciAoaV9Db3VudCA9IGlfTWF4Q2hhbm5lbCwgaSA9IDA7IGlfQ291bnQgPiAwOyBpX0NvdW50LS0sIGkrKykgeworCQlpX0V2ZW50TWFzayA9IGRhdGFbMiArIGldOworCQlzd2l0Y2ggKGlfRXZlbnRNYXNrKSB7CisJCWNhc2UgMDoKKwkJCWlfUGF0dGVybk1hc2sgPQorCQkJCWlfUGF0dGVybk1hc2sgfCAoMSA8PCAoaV9NYXhDaGFubmVsIC0gaV9Db3VudCkpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlfUGF0dGVybk1hc2sgPQorCQkJCWlfUGF0dGVybk1hc2sgfCAoMSA8PCAoaV9NYXhDaGFubmVsIC0gaV9Db3VudCkpOworCQkJaV9QYXR0ZXJuUG9sYXJpdHkgPQorCQkJCWlfUGF0dGVyblBvbGFyaXR5IHwgKDEgPDwgKGlfTWF4Q2hhbm5lbCAtCisJCQkJCWlfQ291bnQpKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpX1BhdHRlcm5NYXNrID0KKwkJCQlpX1BhdHRlcm5NYXNrIHwgKDEgPDwgKGlfTWF4Q2hhbm5lbCAtIGlfQ291bnQpKTsKKwkJCWlfUGF0dGVyblRyYW5zaXRpb24gPQorCQkJCWlfUGF0dGVyblRyYW5zaXRpb24gfCAoMSA8PCAoaV9NYXhDaGFubmVsIC0KKwkJCQkJaV9Db3VudCkpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWlfUGF0dGVybk1hc2sgPQorCQkJCWlfUGF0dGVybk1hc2sgfCAoMSA8PCAoaV9NYXhDaGFubmVsIC0gaV9Db3VudCkpOworCQkJaV9QYXR0ZXJuUG9sYXJpdHkgPQorCQkJCWlfUGF0dGVyblBvbGFyaXR5IHwgKDEgPDwgKGlfTWF4Q2hhbm5lbCAtCisJCQkJCWlfQ291bnQpKTsKKwkJCWlfUGF0dGVyblRyYW5zaXRpb24gPQorCQkJCWlfUGF0dGVyblRyYW5zaXRpb24gfCAoMSA8PCAoaV9NYXhDaGFubmVsIC0KKwkJCQkJaV9Db3VudCkpOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWlfUGF0dGVyblRyYW5zaXRpb24gPQorCQkJCWlfUGF0dGVyblRyYW5zaXRpb24gfCAoMSA8PCAoaV9NYXhDaGFubmVsIC0KKwkJCQkJaV9Db3VudCkpOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoZSBvcHRpb24gaW5kaWNhdGVkIGluIHRoZSBldmVudCBtYXNrIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBzd2l0Y2goaV9FdmVudE1hc2spCisJfQkJCS8vZm9yIChpX0NvdW50ID0gaV9NYXhDaGFubmVsOyBpX0NvdW50ID4wO2lfQ291bnQgLS0pCisKKwlpZiAoZGF0YVswXSA9PSAxKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgaW50ZXJydXB0IGxvZ2ljICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGF0YVsxXSA9PSBBUENJMTUwMF9BTkQgfHwKKwkJCWRhdGFbMV0gPT0gQVBDSTE1MDBfT1IgfHwKKwkJCWRhdGFbMV0gPT0gQVBDSTE1MDBfT1JfUFJJT1JJVFkpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3RzIGlmIGEgdHJhbnNpdGlvbiB3YXMgZGVjbGFyZWQgKi8KKwkJCS8qIGZvciBhIE9SIFBSSU9SSVRZIGxvZ2ljICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGRhdGFbMV0gPT0gQVBDSTE1MDBfT1JfUFJJT1JJVFkKKwkJCQkmJiBpX1BhdHRlcm5UcmFuc2l0aW9uICE9IDApIHsKKwkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUcmFuc2l0aW9uIGVycm9yIG9uIGFuIE9SIFBSSU9SSVRZIGxvZ2ljICovCisJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJcHJpbnRrKCJcblRyYW5zaXRpb24gZXJyb3Igb24gYW4gT1IgUFJJT1JJVFkgbG9naWNcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQkvLyBpZiAoZGF0YVsxXT09IEFQQ0kxNTAwX09SX1BSSU9SSVRZICYmIGlfUGF0dGVyblRyYW5zaXRpb24gIT0gMCkKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0cyBpZiBtb3JlIHRoYW4gb25lIHRyYW5zaXRpb24gKi8KKwkJCS8qIHdhcyBkZWNsYXJlZCBmb3IgYW4gQU5EIGxvZ2ljICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChkYXRhWzFdID09IEFQQ0kxNTAwX0FORCkgeworCQkJCWZvciAoaV9Db3VudCA9IDA7IGlfQ291bnQgPCA4OyBpX0NvdW50KyspIHsKKwkJCQkJaV9QYXR0ZXJuVHJhbnNpdGlvbkNvdW50ID0KKwkJCQkJCWlfUGF0dGVyblRyYW5zaXRpb25Db3VudCArCisJCQkJCQkoKGlfUGF0dGVyblRyYW5zaXRpb24gPj4KKwkJCQkJCQlpX0NvdW50KSAmIDB4MSk7CisKKwkJCQl9CS8vZm9yIChpX0NvdW50ID0gMDsgaV9Db3VudCA8IDg7IGlfQ291bnQrKykKKworCQkJCWlmIChpX1BhdHRlcm5UcmFuc2l0aW9uQ291bnQgPiAxKSB7CisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVHJhbnNpdGlvbiBlcnJvciBvbiBhbiBBTkQgbG9naWMgICAgICovCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJcHJpbnRrKCJcbiBUcmFuc2l0aW9uIGVycm9yIG9uIGFuIEFORCBsb2dpY1xuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0JLy8gaWYgKGlfUGF0dGVyblRyYW5zaXRpb25Db3VudCA+IDEpCisJCQl9CS8vIGlmIChkYXRhWzFdPT0gQVBDSTE1MDBfQU5EKQorCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJLyoqKioqKioqKioqKioqKioqKi8KKwkJCS8qIERpc2FibGUgUG9ydCBBICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoMHhGMCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBwb2xhcml0eSByZWdpc3RlciBvZiBwb3J0IDEgICAgKi8KKwkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX1BBVFRFUk5fUE9MQVJJVFksCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoaV9QYXR0ZXJuUG9sYXJpdHksCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIHBhdHRlcm4gbWFzayByZWdpc3RlciBvZiAgICAgICovCisJCQkvKiBwb3J0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9QQVRURVJOX01BU0ssCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoaV9QYXR0ZXJuTWFzaywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgcGF0dGVybiB0cmFuc2l0aW9uIHJlZ2lzdGVyICAqLworCQkJLyogb2YgcG9ydCAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX1BBVFRFUk5fVFJBTlNJVElPTiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJb3V0YihpX1BhdHRlcm5UcmFuc2l0aW9uLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIG1vZGUgc3BlY2lmaWNhdGlvbiBtYXNrICAgICovCisJCQkvKiByZWdpc3RlciBvZiBwb3J0IDEgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfU1BFQ0lGSUNBVElPTiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9SZWdWYWx1ZSA9CisJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIG1vZGUgc3BlY2lmaWNhdGlvbiBtYXNrICAgICovCisJCQkvKiByZWdpc3RlciBvZiBwb3J0IDEgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfU1BFQ0lGSUNBVElPTiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUG9ydCBBIG5ldyBtb2RlICAgICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweEY5KSB8IGRhdGFbMV0gfCAweDk7CisJCQlvdXRiKGlfUmVnVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJaV9FdmVudDFTdGF0dXMgPSAxOworCisJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJLyogRW5hYmxlIFBvcnQgQSAqLworCQkJICAvKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKDB4RjQsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQl9CQkvLyBpZihkYXRhWzFdPT1BUENJMTUwMF9BTkR8fGRhdGFbMV09PUFQQ0kxNTAwX09SfHxkYXRhWzFdPT1BUENJMTUwMF9PUl9QUklPUklUWSkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuVGhlIGNob2ljZSBmb3IgaW50ZXJydXB0IGxvZ2ljIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBlbHNlIH0vLyBpZihkYXRhWzFdPT1BUENJMTUwMF9BTkR8fGRhdGFbMV09PUFQQ0kxNTAwX09SfHxkYXRhWzFdPT1BUENJMTUwMF9PUl9QUklPUklUWSkKKwl9CQkJLy8gICBpZiAoZGF0YVswXT09IDEpCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBldmVudCBzZXR0aW5nIGZvciBwb3J0IDIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoZGF0YVswXSA9PSAyKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBldmVudCBsb2dpYyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoZGF0YVsxXSA9PSBBUENJMTUwMF9PUikgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJLyogRGlzYWJsZSBQb3J0IEIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKDB4NzQsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgbW9kZSBzcGVjaWZpY2F0aW9uIG1hc2sgICovCisJCQkvKiByZWdpc3RlciBvZiBwb3J0IEIgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfU1BFQ0lGSUNBVElPTiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9SZWdWYWx1ZSA9CisJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gbWFzayAgICAqLworCQkJLyogcmVnaXN0ZXIgb2YgcG9ydCBCICAgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9TUEVDSUZJQ0FUSU9OLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX1JlZ1ZhbHVlID0gaV9SZWdWYWx1ZSAmIDB4Rjk7CisJCQlvdXRiKGlfUmVnVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIGVycm9yIGNoYW5uZWxzIDEgYW5kIDIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpX1BhdHRlcm5NYXNrID0gKGlfUGF0dGVybk1hc2sgfCAweEMwKTsKKwkJCWlfUGF0dGVyblBvbGFyaXR5ID0gKGlfUGF0dGVyblBvbGFyaXR5IHwgMHhDMCk7CisJCQlpX1BhdHRlcm5UcmFuc2l0aW9uID0gKGlfUGF0dGVyblRyYW5zaXRpb24gfCAweEMwKTsKKworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBwb2xhcml0eSByZWdpc3RlciBvZiBwb3J0IDIgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9QT0xBUklUWSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJb3V0YihpX1BhdHRlcm5Qb2xhcml0eSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBwYXR0ZXJuIHRyYW5zaXRpb24gcmVnaXN0ZXIgICAgKi8KKwkJCS8qIG9mIHBvcnQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9QQVRURVJOX1RSQU5TSVRJT04sCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoaV9QYXR0ZXJuVHJhbnNpdGlvbiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBwYXR0ZXJuIE1hc2sgcmVnaXN0ZXIgICAgKi8KKwkJCS8qIG9mIHBvcnQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX1BBVFRFUk5fTUFTSywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJb3V0YihpX1BhdHRlcm5NYXNrLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gbWFzayAgICAqLworCQkJLyogcmVnaXN0ZXIgb2YgcG9ydCAyICAgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9TUEVDSUZJQ0FUSU9OLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX1JlZ1ZhbHVlID0KKwkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gbWFzayAgICAqLworCQkJLyogcmVnaXN0ZXIgb2YgcG9ydCAyICAgICAgICAgICAgICAgICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9TUEVDSUZJQ0FUSU9OLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweEY5KSB8IDQ7CisJCQlvdXRiKGlfUmVnVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJaV9FdmVudDJTdGF0dXMgPSAxOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCS8qIEVuYWJsZSBQb3J0IEIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKworCQkJb3V0YigweEY0LAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCX0JCS8vICBpZiAoZGF0YVsxXSA9PSBBUENJMTUwMF9PUikKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuVGhlIGNob2ljZSBmb3IgaW50ZXJydXB0IGxvZ2ljIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2Vsc2VpZiAoZGF0YVsxXSA9PSBBUENJMTUwMF9PUikKKwl9CQkJLy9pZihkYXRhWzBdPT0yKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTUwMF9TdGFydFN0b3BJbnB1dEV2ZW50ICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6ICBBbGxvd3Mgb3IgZGlzYWxsb3dzIGEgcG9ydCBldmVudCAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgICAgVUlOVCB1aV9DaGFubmVsIDogQ2hhbm5lbCBudW1iZXIgdG8gcmVhZCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICAgICAgOjAgU3RhcnQgaW5wdXQgZXZlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBTdG9wIGlucHV0IGV2ZW50CisgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgICAgICAgOk5vIG9mIHBvcnQgKDEgb3IgMikKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMTUwMF9TdGFydFN0b3BJbnB1dEV2ZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaV9FdmVudDFJbnRlcnJ1cHRTdGF0dXMgPSAwLCBpX0V2ZW50MkludGVycnVwdFN0YXR1cyA9CisJCTAsIGlfUmVnVmFsdWU7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBTVEFSVDoKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdHMgdGhlIHBvcnQgbnVtYmVyICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRhdGFbMV0gPT0gMSB8fCBkYXRhWzFdID09IDIpIHsKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBwb3J0IDEgc2VsZWN0ZWQgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBldmVudCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCWlmIChpX0V2ZW50MVN0YXR1cyA9PSAxKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpc2FibGUgUG9ydCBBICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4RjAsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgICAgICAqLworCQkJCQkvKiBwb3J0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBBbGxvd3MgdGhlIHBhdHRlcm4gaW50ZXJydXB0ICAgICAgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4QzAsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRW5hYmxlIFBvcnQgQSAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4RjQsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJCWlfRXZlbnQxSW50ZXJydXB0U3RhdHVzID0gMTsKKwkJCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfU1BFQ0lGSUNBVElPTiwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJaV9SZWdWYWx1ZSA9CisJCQkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0lOVEVSUlVQVF9DT05UUk9MLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBBdXRob3JpemVzIHRoZSBtYWluIGludGVycnVwdCBvbiB0aGUgYm9hcmQgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4RDAsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQl9CS8vIGlmKGlfRXZlbnQxU3RhdHVzPT0xKQorCQkJCWVsc2UgeworCQkJCQlwcmludGsoIlxuRXZlbnQgMSBub3QgaW5pdGlhbGlzZWRcbiIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCQl9CS8vZWxzZSBpZihpX0V2ZW50MVN0YXR1cz09MSkKKwkJCX0JLy9pZiAoZGF0YVsxXT09MSkKKwkJCWlmIChkYXRhWzFdID09IDIpIHsKKworCQkJCWlmIChpX0V2ZW50MlN0YXR1cyA9PSAxKSB7CisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MIHJlZ2lzdGVyICovCisJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogRGlzYWJsZSBQb3J0IEIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHg3NCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiAgICAgICovCisJCQkJCS8qIHBvcnQgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEFsbG93cyB0aGUgcGF0dGVybiBpbnRlcnJ1cHQgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHhDMCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQkvKiBFbmFibGUgUG9ydCBCICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHhGNCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQXV0aG9yaXplcyB0aGUgbWFpbiBpbnRlcnJ1cHQgb24gdGhlIGJvYXJkICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweEQwLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCQlpX0V2ZW50MkludGVycnVwdFN0YXR1cyA9IDE7CisJCQkJfQkvLyBpZihpX0V2ZW50MlN0YXR1cz09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcbkV2ZW50IDIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQkvL2Vsc2UgaWYoaV9FdmVudDJTdGF0dXM9PTEpCisJCQl9CS8vIGlmKGRhdGFbMV09PTIpCisJCX0JCS8vIGlmIChkYXRhWzFdID09IDEgfHwgZGF0YVswXSA9PSAyKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5UaGUgcG9ydCBwYXJhbWV0ZXIgaXMgaW4gZXJyb3JcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vZWxzZSBpZiAoZGF0YVsxXSA9PSAxIHx8IGRhdGFbMF0gPT0gMikKKworCQlicmVhazsKKworCWNhc2UgU1RPUDoKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdHMgdGhlIHBvcnQgbnVtYmVyICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRhdGFbMV0gPT0gMSB8fCBkYXRhWzFdID09IDIpIHsKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBwb3J0IDEgc2VsZWN0ZWQgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBldmVudCBpbml0aWFsaXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCWlmIChpX0V2ZW50MVN0YXR1cyA9PSAxKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wgcmVnaXN0ZXIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpc2FibGUgUG9ydCBBICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKDB4RjAsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgICAgICAqLworCQkJCQkvKiBwb3J0IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBJbmhpYml0cyB0aGUgcGF0dGVybiBpbnRlcnJ1cHQgICAgICAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHhFMCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqLworCQkJCQkvKiBFbmFibGUgUG9ydCBBICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHhGNCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJaV9FdmVudDFJbnRlcnJ1cHRTdGF0dXMgPSAwOworCQkJCX0JLy8gaWYoaV9FdmVudDFTdGF0dXM9PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5FdmVudCAxIG5vdCBpbml0aWFsaXNlZFxuIik7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0JLy9lbHNlIGlmKGlfRXZlbnQxU3RhdHVzPT0xKQorCQkJfQkvL2lmIChkYXRhWzFdPT0xKQorCQkJaWYgKGRhdGFbMV0gPT0gMikgeworCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IGlmIGV2ZW50IGluaXRpYWxpc2VkICovCisJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCWlmIChpX0V2ZW50MlN0YXR1cyA9PSAxKSB7CisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCByZWdpc3RlciAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpc2FibGUgUG9ydCBCICovCisJCQkgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoMHg3NCwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mICAgICAgKi8KKwkJCQkJLyogcG9ydCAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEluaGliaXRzIHRoZSBwYXR0ZXJuIGludGVycnVwdCAgICAgICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweEUwLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MIHJlZ2lzdGVyICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEVuYWJsZSBQb3J0IEIgKi8KKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweEY0LAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCQlpX0V2ZW50MkludGVycnVwdFN0YXR1cyA9IDA7CisJCQkJfQkvLyBpZihpX0V2ZW50MlN0YXR1cz09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcbkV2ZW50IDIgbm90IGluaXRpYWxpc2VkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQkvL2Vsc2UgaWYoaV9FdmVudDJTdGF0dXM9PTEpCisJCQl9CS8vaWYoZGF0YVsxXT09MikKKworCQl9CQkvLyBpZiAoZGF0YVsxXSA9PSAxIHx8IGRhdGFbMV0gPT0gMikKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuVGhlIHBvcnQgcGFyYW1ldGVyIGlzIGluIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2Vsc2UgaWYgKGRhdGFbMV0gPT0gMSB8fCBkYXRhWzFdID09IDIpCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgb3B0aW9uIG9mIFNUQVJUL1NUT1AgbG9naWMgZG9lcyBub3QgZXhpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9zd2l0Y2goZGF0YVswXSkKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfSW5pdGlhbGlzYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgZGlnaXRhbCBpbnB1dCAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICAgIFVJTlQgdWlfQ2hhbm5lbCA6IENoYW5uZWwgbnVtYmVyIHRvIHJlYWQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTAwX0luaXRpYWxpc2F0aW9uKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaV9EdW1teVJlYWQgPSAwOworICAgIC8qKioqKioqKioqKioqKioqKiovCisJLyogU29mdHdhcmUgcmVzZXQgKi8KKyAgICAvKioqKioqKioqKioqKioqKioqLworCWlfRHVtbXlSZWFkID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJaV9EdW1teVJlYWQgPSBpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDEsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgbWFzdGVyIGNvbmZpZ3VyYXRpb24gY29udHJvbCByZWdpc3RlciAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMHhGNCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgbW9kZSBzcGVjaWZpY2F0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9TUEVDSUZJQ0FUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDB4MTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJLyogU2VsZWN0cyB0aGUgZGF0YSBwYXRoIHBvbGFyaXR5IHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0RBVEFfUENJVENIX1BPTEFSSVRZLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBIaWdoIGxldmVsIG9mIHBvcnQgQSBtZWFucyAxICovCisJb3V0YigweEZGLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCS8qIFNlbGVjdHMgdGhlIGRhdGEgZGlyZWN0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0RBVEFfRElSRUNUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBBbGwgYml0cyB1c2VkIGFzIGlucHV0cyAqLworCW91dGIoMHhGRiwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBJUCBhbmQgSVVTICovCisJb3V0YigweDIwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiAgU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVhY3RpdmF0ZXMgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50IG9mIHBvcnQgQTogICovCisJb3V0YigweEUwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBoYW5kc2hha2Ugc3BlY2lmaWNhdGlvbiByZWdpc3RlciBvZiBwb3J0IEEgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9IQU5EU0hBS0VfU1BFQ0lGSUNBVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyB0aGUgcmVnaXN0ZXIgKi8KKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9TUEVDSUZJQ0FUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDB4MTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGRhdGEgcGF0aCBwb2xhcml0eSByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9EQVRBX1BDSVRDSF9QT0xBUklUWSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogQSBoaWdoIGxldmVsIG9mIHBvcnQgQiBtZWFucyAxICovCisJb3V0YigweDdGLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBkYXRhIGRpcmVjdGlvbiByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9EQVRBX0RJUkVDVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogQWxsIGJpdHMgdXNlZCBhcyBpbnB1dHMgKi8KKwlvdXRiKDB4RkYsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgSVAgYW5kIElVUyAqLworCW91dGIoMHgyMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVhY3RpdmF0ZXMgdGhlIGludGVycnVwdCBtYW5hZ2VtZW50IG9mIHBvcnQgQjogICAgICAgICAqLworCW91dGIoMHhFMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgaGFuZHNoYWtlIHNwZWNpZmljYXRpb24gcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfSEFORFNIQUtFX1NQRUNJRklDQVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgdGhlIHJlZ2lzdGVyICovCisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBkYXRhIHBhdGggcG9sYXJpdHkgcmVnaXN0ZXIgb2YgcG9ydCBDICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9DX0RBVEFfUENJVENIX1BPTEFSSVRZLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBIaWdoIGxldmVsIG9mIHBvcnQgQyBtZWFucyAxICovCisJb3V0YigweDksIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGRhdGEgZGlyZWN0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQyAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9DX0RBVEFfRElSRUNUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBBbGwgYml0cyB1c2VkIGFzIGlucHV0cyBleGNlcHQgY2hhbm5lbCAxICovCisJb3V0YigweDBFLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBzcGVjaWFsIElPIHJlZ2lzdGVyIG9mIHBvcnQgQyAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9DX1NQRUNJQUxfSU9fQ09OVFJPTCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBpdCAqLworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIElQIGFuZCBJVVMgKi8KKwlvdXRiKDB4MjAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAxICovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWFjdGl2YXRlcyB0aGUgaW50ZXJydXB0IG1hbmFnZW1lbnQgb2YgdGltZXIgMSAgICAgICAgICovCisJb3V0YigweEUwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgSVAgYW5kIElVUyAqLworCW91dGIoMHgyMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlYWN0aXZhdGVzIFRpbWVyIDIgaW50ZXJydXB0IG1hbmFnZW1lbnQ6ICAgICAgICAgICAgICAgKi8KKwlvdXRiKDB4RTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMyAqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgSVAgYW5kIElVUyAqLworCW91dGIoMHgyMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIFRpbWVyIDMgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlYWN0aXZhdGVzIGludGVycnVwdCBtYW5hZ2VtZW50IG9mIHRpbWVyIDM6ICAgICAgICAgICAgKi8KKwlvdXRiKDB4RTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19NQVNURVJfSU5URVJSVVBUX0NPTlRST0wsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgYWxsIGludGVycnVwdHMgKi8KKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfUmVhZE1vcmVEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgUmVxdWVzdGVkIGRpZ2l0YWwgaW5wdXRzICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyBiZSBSZWFkICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICA6IERhdGEgUG9pbnRlcgorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgICAgICAgIDogMCBSZWFkIGEgc2luZ2xlIGNoYW5uZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgcmVhZCBhIHBvcnQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgICAgICAgICAgICAgICA6IHBvcnQgdmFsdWUKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCWRhdGFbMF0gICAgOlRoZSByZWFkIHN0YXR1cyB2YWx1ZQorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTUwMF9SZWFkTW9yZURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9Qb3J0VmFsdWUgPSBkYXRhWzFdOworCVVJTlQgdWlfTWFzayA9IDA7CisJVUlOVCB1aV9DaGFubmVsOworCVVJTlQgdWlfVG1wVmFsdWUgPSAwOworCXVpX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgMDoKKwkJaWYgKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9IDE1KSB7CisJCQl1aV9UbXBWYWx1ZSA9CisJCQkJKFVJTlQpIGludyhkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCQlBUENJMTUwMF9ESUdJVEFMX0lQKTsKKwkJCSpkYXRhID0gKHVpX1RtcFZhbHVlID4+IHVpX0NoYW5uZWwpICYgMHgxOworCQl9CQkvL2lmKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9MTUpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblRoZSBjaGFubmVsIHNwZWNpZmljYXRpb24gYXJlIGluIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJfQkJLy9lbHNlIGlmKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9MTUpCisJCWJyZWFrOworCWNhc2UgMToKKworCQkqZGF0YSA9IChVSU5UKSBpbncoZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQlBUENJMTUwMF9ESUdJVEFMX0lQKTsKKwkJc3dpdGNoICh1aV9DaGFubmVsKSB7CisJCWNhc2UgMjoKKwkJCXVpX01hc2sgPSAzOworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJdWlfTWFzayA9IDE1OworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDQgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJdWlfTWFzayA9IDI1NTsKKwkJCSpkYXRhID0gKCpkYXRhID4+ICg4ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgMTU6CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIGNhbm5vdCBiZSByZWFkIFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCQlicmVhazsKKwkJfQkJLy9zd2l0Y2godWlfQ2hhbm5lbCkKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvL3N3aXRjaChkYXRhWzBdKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfQ29uZmlnRGlnaXRhbE91dHB1dEVycm9ySW50ZXJydXB0CisgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgc3RydWN0IGNvbWVkaV9pbnNuCisgICAgICAgICAgICAgICAgICAgICAgKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyB0aGUgZGlnaXRhbCBvdXRwdXQgbWVtb3J5IGFuZCB0aGUgZGlnaXRhbAorICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBlcnJvciBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVswXSAgOjE6TWVtb3J5IG9uICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgICAgICAgICAgICAwOk1lbW9yeSBvZmYgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgOjEgRW5hYmxlIHRoZSB2b2x0YWdlIGVycm9yIGludGVycnVwdAorfAkJCQkJCQkgICA6MCBEaXNhYmxlIHRoZSB2b2x0YWdlIGVycm9yIGludGVycnVwdCAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kxNTAwX0NvbmZpZ0RpZ2l0YWxPdXRwdXRFcnJvckludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBkYXRhWzBdOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfV3JpdGVEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZXMgcG9ydCB2YWx1ZSAgVG8gdGhlIHNlbGVjdGVkIHBvcnQgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyBXcml0ZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE1MDBfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdGF0aWMgVUlOVCB1aV9UZW1wID0gMDsKKwlVSU5UIHVpX1RlbXAxOworCisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKworCWlmICghZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMpIHsKKwkJdWlfVGVtcCA9IDA7CisKKwl9CQkJLy9pZighZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWlmIChkYXRhWzNdID09IDApIHsKKwkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSB8IHVpX1RlbXA7CisJCQlvdXR3KGRhdGFbMF0sCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kxNTAwX0RJR0lUQUxfT1ApOworCQl9CQkvL2lmKGRhdGFbMV09PTApCisJCWVsc2UgeworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCWNhc2UgMjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDQ6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSA4OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICg4ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMTU6CisJCQkJCWRhdGFbMF0gPSBkYXRhWzBdIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisKKwkJCQlkZWZhdWx0OgorCQkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisKKwkJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKworCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQkJCUFQQ0kxNTAwX0RJR0lUQUxfT1ApOworCQkJfQkvLyBpZihkYXRhWzFdPT0xKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJfQkvL2Vsc2UgaWYoZGF0YVsxXT09MSkKKwkJfQkJLy9lbHNlaWYoZGF0YVsxXT09MCkKKwl9CQkJLy9pZihkYXRhWzNdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVszXSA9PSAxKSB7CisJCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgxOworCQkJCXVpX1RlbXAxID0gMTsKKwkJCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IHVpX05vT2ZDaGFubmVsOworCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJZGF0YVswXSA9CisJCQkJCShkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSBeCisJCQkJCTB4ZmZmZmZmZmY7CisJCQkJZGF0YVswXSA9IGRhdGFbMF0gJiB1aV9UZW1wOworCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQkJCUFQQ0kxNTAwX0RJR0lUQUxfT1ApOworCQkJfQkvL2lmKGRhdGFbMV09PTApCisJCQllbHNlIHsKKwkJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCQljYXNlIDI6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDM7CisJCQkJCQl1aV9UZW1wMSA9IDM7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgMiAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICgyICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIDQ6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweGY7CisJCQkJCQl1aV9UZW1wMSA9IDE1OworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDQgKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoNCAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSA4OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmZjsKKwkJCQkJCXVpX1RlbXAxID0gMjU1OworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDggKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoOCAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSAxNToKKwkJCQkJCWJyZWFrOworCisJCQkJCWRlZmF1bHQ6CisJCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJCSIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisKKwkJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQkJb3V0dyhkYXRhWzBdLAorCQkJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArCisJCQkJCQlBUENJMTUwMF9ESUdJVEFMX09QKTsKKwkJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQkJfQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCQl9CQkvL2lmKGRhdGFbM109PTEpOworCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9pZiBlbHNlIGRhdGFbM109PTEpCisJfQkJCS8vaWYgZWxzZSBkYXRhWzNdPT0wKQorCXVpX1RlbXAgPSBkYXRhWzBdOworCXJldHVybiAoaW5zbi0+bik7OworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfQ29uZmlnQ291bnRlclRpbWVyV2F0Y2hkb2coY29tZWRpX2RldmljZQorICAgICAgICAgICAgICAgICAgICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSl8Cit8CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICAgICAgICAgICAgICAgIDogMiAgICAgQVBDSTE1MDBfMV84X0tIWgorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICBBUENJMTUwMF8zXzZfS0haICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgIEFQQ0kxNTAwXzExNV9LSFoKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgICAgICAgICAgICAgIDogMCAgICAgQ291bnRlcjEvVGltZXIxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgIENvdW50ZXIyL1RpbWVyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgICBDb3VudGVyMy9XYXRjaGRvZworICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMl0gICAgICAgICAgICAgICAgOiAwICAgICBDb3VudGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgIFRpbWVyL1dhdGNoZG9nCisgICAgICAgICAgICAgICAgICAgICAgZGF0YVszXSAgICAgICAgICAgICAgICA6ICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaGFzICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0d28gbWVhbmluZ3MuICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIElmIHRoZSBjb3VudGVyL3RpbWVyICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZCBhcyBhIGNvdW50ZXIgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbGltaXQgdmFsdWUgb2YgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjb3VudGVyIGlzIGdpdmVuICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJZiB0aGUgY291bnRlci90aW1lciAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQgYXMgYSB0aW1lciwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpdmlkZXIgZmFjdG9yICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIG91dHB1dCBpcyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuLgorICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzRdICAgICAgICAgICAgICAgICA6IDAgICAgQVBDSTE1MDBfQ09OVElOVU9VUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgQVBDSTE1MDBfU0lOR0xFCisgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNV0gICAgICAgICAgICAgICAgIDogMCAgICBTb2Z0d2FyZSBUcmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICBIYXJkd2FyZSBUcmlnZ2VyCisKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs2XSAgICAgICAgICAgICAgICAgIDowICAgIFNvZnR3YXJlIGdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgIEhhcmR3YXJlIGdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs3XSAgICAgICAgICAgICAgICAgIDowICAgIEludGVycnVwdCBEaXNhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICBJbnRlcnJ1cHQgRW5hYmxlCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTUwMF9Db25maWdDb3VudGVyVGltZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGlfVGltZXJDb3VudGVyTW9kZSwgaV9NYXN0ZXJDb25maWd1cmF0aW9uOworCisJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OworCisvL1NlbGVjdGlvbiBvZiB0aGUgaW5wdXQgY2xvY2sKKwlpZiAoZGF0YVswXSA9PSAwIHx8IGRhdGFbMF0gPT0gMSB8fCBkYXRhWzBdID09IDIpIHsKKwkJb3V0dyhkYXRhWzBdLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTE1MDBfQ0xLX1NFTEVDVCk7CisJfQkJCS8vIGlmKGRhdGFbMF09PTB8fGRhdGFbMF09PTF8fGRhdGFbMF09PTIpCisJZWxzZSB7CisJCWlmIChkYXRhWzBdICE9IDMpIHsKKwkJCXByaW50aygiXG5UaGUgb3B0aW9uIGZvciBpbnB1dCBjbG9jayBzZWxlY3Rpb24gZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIGlmKGRhdGFbMF0hPTMpCisJfQkJCS8vZWxzZWlmKGRhdGFbMF09PTB8fGRhdGFbMF09PTF8fGRhdGFbMF09PTIpCisJLy9TZWxlY3QgdGhlIGNvdW50ZXIvdGltZXIKKwlzd2l0Y2ggKGRhdGFbMV0pIHsKKwljYXNlIENPVU5URVIxOgorCQkvL3NlbGVjdGluZyBjb3VudGVyIG9yIHRpbWVyCisJCXN3aXRjaCAoZGF0YVsyXSkgeworCQljYXNlIDA6CisJCQlkYXRhWzJdID0gQVBDSTE1MDBfQ09VTlRFUjsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlkYXRhWzJdID0gQVBDSTE1MDBfVElNRVI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5UaGlzIGNob2ljZSBpcyBub3QgYSB0aW1lciBub3IgYSBjb3VudGVyXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBzd2l0Y2goZGF0YVsyXSkKKworCQkvL1NlbGVjdGluZyAgc2luZ2xlIG9yIGNvbnRpbnVvdXMgbW9kZQorCQlzd2l0Y2ggKGRhdGFbNF0pIHsKKwkJY2FzZSAwOgorCQkJZGF0YVs0XSA9IEFQQ0kxNTAwX0NPTlRJTlVPVVM7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZGF0YVs0XSA9IEFQQ0kxNTAwX1NJTkdMRTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoaXMgb3B0aW9uIGZvciBzaW5nbGUvY29udGludW91cyBtb2RlIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBzd2l0Y2goZGF0YVs0XSkKKworCQlpX1RpbWVyQ291bnRlck1vZGUgPSBkYXRhWzJdIHwgZGF0YVs0XSB8IDc7CisJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIHJlbG9hZCB2YWx1ZSAqLworCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGF0YVszXSA+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpIHsKKwkJCWlmIChkYXRhWzddID09IEFQQ0kxNTAwX0VOQUJMRQorCQkJCXx8IGRhdGFbN10gPT0gQVBDSTE1MDBfRElTQUJMRSkgeworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHJlZ2lzdGVyIG9mIHRpbWVyL2NvdW50ZXIgMSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9NT0RFX1NQRUNJRklDQVRJT04sCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIG5ldyBtb2RlICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoaV9UaW1lckNvdW50ZXJNb2RlLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbnN0YW50IHJlZ2lzdGVyIG9mIHRpbWVyL2NvdW50ZXIgMSAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9USU1FX0NTVF9MT1csCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIGxvdyB2YWx1ZSAgKi8KKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihkYXRhWzNdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbnN0YW50IHJlZ2lzdGVyIG9mIHRpbWVyL2NvdW50ZXIgMSAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9USU1FX0NTVF9ISUdILAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlcyB0aGUgaGlnaCB2YWx1ZSAgKi8KKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRhdGFbM10gPSBkYXRhWzNdID4+IDg7CisJCQkJb3V0YihkYXRhWzNdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWRzIHRoZSByZWdpc3RlciAqLworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX01hc3RlckNvbmZpZ3VyYXRpb24gPQorCQkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEVuYWJsZXMgdGltZXIvY291bnRlciAxIGFuZCB0cmlnZ2VycyB0aW1lci9jb3VudGVyIDEgKi8KKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9NYXN0ZXJDb25maWd1cmF0aW9uID0KKwkJCQkJaV9NYXN0ZXJDb25maWd1cmF0aW9uIHwgMHg0MDsKKworCQkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisJCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIG5ldyBjb25maWd1cmF0aW9uICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoaV9NYXN0ZXJDb25maWd1cmF0aW9uLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIHJlZ2lzdGVyIG9mICAgICAqLworCQkJCS8qIHRpbWVyL2NvdW50ZXIgMSAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRGlzYWJsZSB0aW1lci9jb3VudGVyIDEgKi8KKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoMHgwLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyByZWdpc3RlciBvZiAgICAgKi8KKwkJCQkvKiB0aW1lci9jb3VudGVyIDEgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUcmlnZ2VyIHRpbWVyL2NvdW50ZXIgMSAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YigweDIsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJfQkvL2lmKGRhdGFbN109PSBBUENJMTUwMF9FTkFCTEUgfHxkYXRhWzddPT0gQVBDSTE1MDBfRElTQUJMRSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5FcnJvciBpbiBzZWxlY3Rpb24gb2YgaW50ZXJydXB0IGVuYWJsZSBvciBkaXNhYmxlXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0JLy9lbHNlaWYoZGF0YVs3XT09IEFQQ0kxNTAwX0VOQUJMRSB8fGRhdGFbN109PSBBUENJMTUwMF9ESVNBQkxFKQorCQl9CQkvLyBpZiAoKGRhdGFbM10+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcbkVycm9yIGluIHNlbGVjdGlvbiBvZiByZWxvYWQgdmFsdWVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vZWxzZSBpZiAoKGRhdGFbM10+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpCisJCWlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQgPSBkYXRhWzddOworCQlpX1RpbWVyQ291bnRlcjFJbml0ID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIENPVU5URVIyOgkJLy9zZWxlY3RpbmcgY291bnRlciBvciB0aW1lcgorCQlzd2l0Y2ggKGRhdGFbMl0pIHsKKwkJY2FzZSAwOgorCQkJZGF0YVsyXSA9IEFQQ0kxNTAwX0NPVU5URVI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZGF0YVsyXSA9IEFQQ0kxNTAwX1RJTUVSOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhpcyBjaG9pY2UgaXMgbm90IGEgdGltZXIgbm9yIGEgY291bnRlclxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbMl0pCisKKwkJLy9TZWxlY3RpbmcgIHNpbmdsZSBvciBjb250aW51b3VzIG1vZGUKKwkJc3dpdGNoIChkYXRhWzRdKSB7CisJCWNhc2UgMDoKKwkJCWRhdGFbNF0gPSBBUENJMTUwMF9DT05USU5VT1VTOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRhdGFbNF0gPSBBUENJMTUwMF9TSU5HTEU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5UaGlzIG9wdGlvbiBmb3Igc2luZ2xlL2NvbnRpbnVvdXMgbW9kZSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbNF0pCisKKwkJLy9TZWxlY3RpbmcgIHNvZnR3YXJlIG9yIGhhcmR3YXJlIHRyaWdnZXIKKwkJc3dpdGNoIChkYXRhWzVdKSB7CisJCWNhc2UgMDoKKwkJCWRhdGFbNV0gPSBBUENJMTUwMF9TT0ZUV0FSRV9UUklHR0VSOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRhdGFbNV0gPSBBUENJMTUwMF9IQVJEV0FSRV9UUklHR0VSOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhpcyBjaG9pY2UgZm9yIHNvZnR3YXJlIG9yIGhhcmR3YXJlIHRyaWdnZXIgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIHN3aXRjaChkYXRhWzVdKQorCisJCS8vU2VsZWN0aW5nICBzb2Z0d2FyZSBvciBoYXJkd2FyZSBnYXRlCisJCXN3aXRjaCAoZGF0YVs2XSkgeworCQljYXNlIDA6CisJCQlkYXRhWzZdID0gQVBDSTE1MDBfU09GVFdBUkVfR0FURTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlkYXRhWzZdID0gQVBDSTE1MDBfSEFSRFdBUkVfR0FURTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoaXMgY2hvaWNlIGZvciBzb2Z0d2FyZSBvciBoYXJkd2FyZSBnYXRlIGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvLyBzd2l0Y2goZGF0YVs2XSkKKworCQlpX1RpbWVyQ291bnRlck1vZGUgPSBkYXRhWzJdIHwgZGF0YVs0XSB8IGRhdGFbNV0gfCBkYXRhWzZdIHwgNzsKKworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgcmVsb2FkIHZhbHVlICovCisJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGF0YVszXSA+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpIHsKKwkJCWlmIChkYXRhWzddID09IEFQQ0kxNTAwX0VOQUJMRQorCQkJCXx8IGRhdGFbN10gPT0gQVBDSTE1MDBfRElTQUJMRSkgeworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBtb2RlIHJlZ2lzdGVyIG9mIHRpbWVyL2NvdW50ZXIgMiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9NT0RFX1NQRUNJRklDQVRJT04sCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIG5ldyBtb2RlICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoaV9UaW1lckNvdW50ZXJNb2RlLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbnN0YW50IHJlZ2lzdGVyIG9mIHRpbWVyL2NvdW50ZXIgMiAqLworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9USU1FX0NTVF9MT1csCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIGxvdyB2YWx1ZSAgKi8KKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihkYXRhWzNdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbnN0YW50IHJlZ2lzdGVyIG9mIHRpbWVyL2NvdW50ZXIgMiAqLworCQkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9USU1FX0NTVF9ISUdILAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlcyB0aGUgaGlnaCB2YWx1ZSAgKi8KKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRhdGFbM10gPSBkYXRhWzNdID4+IDg7CisJCQkJb3V0YihkYXRhWzNdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWRzIHRoZSByZWdpc3RlciAqLworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX01hc3RlckNvbmZpZ3VyYXRpb24gPQorCQkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIEVuYWJsZXMgdGltZXIvY291bnRlciAyIGFuZCB0cmlnZ2VycyB0aW1lci9jb3VudGVyIDIgKi8KKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9NYXN0ZXJDb25maWd1cmF0aW9uID0KKwkJCQkJaV9NYXN0ZXJDb25maWd1cmF0aW9uIHwgMHgyMDsKKworCQkJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisJCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBXcml0ZXMgdGhlIG5ldyBjb25maWd1cmF0aW9uICovCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoaV9NYXN0ZXJDb25maWd1cmF0aW9uLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIHJlZ2lzdGVyIG9mICAgICAqLworCQkJCS8qIHRpbWVyL2NvdW50ZXIgMiAgICAgICAgICAgICAgICAgICAgICAqLworCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRGlzYWJsZSB0aW1lci9jb3VudGVyIDIgKi8KKwkJCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCW91dGIoMHgwLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyByZWdpc3RlciBvZiAgICAgKi8KKwkJCQkvKiB0aW1lci9jb3VudGVyIDIgICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUcmlnZ2VyIHRpbWVyL2NvdW50ZXIgMSAqLworCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YigweDIsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJfQkvL2lmKGRhdGFbN109PSBBUENJMTUwMF9FTkFCTEUgfHxkYXRhWzddPT0gQVBDSTE1MDBfRElTQUJMRSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5FcnJvciBpbiBzZWxlY3Rpb24gb2YgaW50ZXJydXB0IGVuYWJsZSBvciBkaXNhYmxlXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0JLy9lbHNlaWYoZGF0YVs3XT09IEFQQ0kxNTAwX0VOQUJMRSB8fGRhdGFbN109PSBBUENJMTUwMF9ESVNBQkxFKQorCQl9CQkvLyBpZiAoKGRhdGFbM10+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcbkVycm9yIGluIHNlbGVjdGlvbiBvZiByZWxvYWQgdmFsdWVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vZWxzZSBpZiAoKGRhdGFbM10+PSAwKSAmJiAoZGF0YVszXSA8PSA2NTUzNSkpCisJCWlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQgPSBkYXRhWzddOworCQlpX1RpbWVyQ291bnRlcjJJbml0ID0gMTsKKwkJYnJlYWs7CisKKwljYXNlIENPVU5URVIzOgkJLy9zZWxlY3RpbmcgY291bnRlciBvciB3YXRjaGRvZworCQlzd2l0Y2ggKGRhdGFbMl0pIHsKKwkJY2FzZSAwOgorCQkJZGF0YVsyXSA9IEFQQ0kxNTAwX0NPVU5URVI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZGF0YVsyXSA9IEFQQ0kxNTAwX1dBVENIRE9HOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhpcyBjaG9pY2UgaXMgbm90IGEgd2F0Y2hkb2cgbm9yIGEgY291bnRlclxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbMl0pCisKKwkJLy9TZWxlY3RpbmcgIHNpbmdsZSBvciBjb250aW51b3VzIG1vZGUKKwkJc3dpdGNoIChkYXRhWzRdKSB7CisJCWNhc2UgMDoKKwkJCWRhdGFbNF0gPSBBUENJMTUwMF9DT05USU5VT1VTOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRhdGFbNF0gPSBBUENJMTUwMF9TSU5HTEU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiXG5UaGlzIG9wdGlvbiBmb3Igc2luZ2xlL2NvbnRpbnVvdXMgbW9kZSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbNF0pCisKKwkJLy9TZWxlY3RpbmcgIHNvZnR3YXJlIG9yIGhhcmR3YXJlIGdhdGUKKwkJc3dpdGNoIChkYXRhWzZdKSB7CisJCWNhc2UgMDoKKwkJCWRhdGFbNl0gPSBBUENJMTUwMF9TT0ZUV0FSRV9HQVRFOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWRhdGFbNl0gPSBBUENJMTUwMF9IQVJEV0FSRV9HQVRFOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhpcyBjaG9pY2UgZm9yIHNvZnR3YXJlIG9yIGhhcmR3YXJlIGdhdGUgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIHN3aXRjaChkYXRhWzZdKQorCisJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiB1c2VkIGZvciB3YXRjaGRvZyAqLworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRhdGFbMl0gPT0gQVBDSTE1MDBfV0FUQ0hET0cpIHsKKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogLSBFbmFibGVzIHRoZSBvdXRwdXQgbGluZSAqLworCQkJLyogLSBFbmFibGVzIHJldHJpZ2dlciAgICAgICAqLworCQkJLyogLSBQdWxzZXMgb3V0cHV0ICAgICAgICAgICAqLworCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlpX1RpbWVyQ291bnRlck1vZGUgPSBkYXRhWzJdIHwgZGF0YVs0XSB8IDB4NTQ7CisJCX0JCS8vaWYgKGRhdGFbMl0gPT0gQVBDSTE1MDBfV0FUQ0hET0cpCisJCWVsc2UgeworCQkJaV9UaW1lckNvdW50ZXJNb2RlID0gZGF0YVsyXSB8IGRhdGFbNF0gfCBkYXRhWzZdIHwgNzsKKwkJfQkJLy9lbHNlaWYgKGRhdGFbMl0gPT0gQVBDSTE1MDBfV0FUQ0hET0cpCisJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSByZWxvYWQgdmFsdWUgKi8KKwkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChkYXRhWzNdID49IDApICYmIChkYXRhWzNdIDw9IDY1NTM1KSkgeworCQkJaWYgKGRhdGFbN10gPT0gQVBDSTE1MDBfRU5BQkxFCisJCQkJfHwgZGF0YVs3XSA9PSBBUENJMTUwMF9ESVNBQkxFKSB7CisKKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIG1vZGUgcmVnaXN0ZXIgb2Ygd2F0Y2hkb2cvY291bnRlciAzICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX01PREVfU1BFQ0lGSUNBVElPTiwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlcyB0aGUgbmV3IG1vZGUgKi8KKwkJCQkvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihpX1RpbWVyQ291bnRlck1vZGUsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29uc3RhbnQgcmVnaXN0ZXIgb2Ygd2F0Y2hkb2cvY291bnRlciAzICovCisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX1RJTUVfQ1NUX0xPVywKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlcyB0aGUgbG93IHZhbHVlICAqLworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKGRhdGFbM10sCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29uc3RhbnQgcmVnaXN0ZXIgb2Ygd2F0Y2hkb2cvY291bnRlciAzICovCisJCQkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX1RJTUVfQ1NUX0hJR0gsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGVzIHRoZSBoaWdoIHZhbHVlICAqLworCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZGF0YVszXSA9IGRhdGFbM10gPj4gODsKKwkJCQlvdXRiKGRhdGFbM10sCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisJCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJb3V0YihBUENJMTUwMF9SV19NQVNURVJfQ09ORklHVVJBVElPTl9DT05UUk9MLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZHMgdGhlIHJlZ2lzdGVyICovCisJCQkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfTWFzdGVyQ29uZmlndXJhdGlvbiA9CisJCQkJCWluYihkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRW5hYmxlcyB3YXRjaGRvZy9jb3VudGVyIDMgYW5kIHRyaWdnZXJzIHdhdGNoZG9nL2NvdW50ZXIgMyAqLworCQkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX01hc3RlckNvbmZpZ3VyYXRpb24gPQorCQkJCQlpX01hc3RlckNvbmZpZ3VyYXRpb24gfCAweDEwOworCisJCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgbWFzdGVyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKwkJCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFdyaXRlcyB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gKi8KKwkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihpX01hc3RlckNvbmZpZ3VyYXRpb24sCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgQ09VTlRFUiAqLworCQkJCQkgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJCQlpZiAoZGF0YVsyXSA9PSBBUENJMTUwMF9DT1VOVEVSKSB7CisKKwkJCQkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIHJlZ2lzdGVyIG9mICAgKi8KKwkJCQkJLyogd2F0Y2hkb2cvY291bnRlciAzICAgICAgICAgICAgICAgICovCisJCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIERpc2FibGUgdGhlICB3YXRjaGRvZy9jb3VudGVyIDMgYW5kIHN0YXJ0cyBpdCAqLworCQkJCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweDAsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgb2YgICAqLworCQkJCQkvKiB3YXRjaGRvZy9jb3VudGVyIDMgICAgICAgICAgICAgICAgKi8KKwkJCQkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUcmlnZ2VyIHRoZSAgd2F0Y2hkb2cvY291bnRlciAzIGFuZCBzdGFydHMgaXQgKi8KKwkJCQkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YigweDIsCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQl9CS8vZWxzZWlmKGRhdGFbMl09PUFQQ0kxNTAwX0NPVU5URVIpCisKKwkJCX0JLy9pZihkYXRhWzddPT0gQVBDSTE1MDBfRU5BQkxFIHx8ZGF0YVs3XT09IEFQQ0kxNTAwX0RJU0FCTEUpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuRXJyb3IgaW4gc2VsZWN0aW9uIG9mIGludGVycnVwdCBlbmFibGUgb3IgZGlzYWJsZVxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CS8vZWxzZWlmKGRhdGFbN109PSBBUENJMTUwMF9FTkFCTEUgfHxkYXRhWzddPT0gQVBDSTE1MDBfRElTQUJMRSkKKwkJfQkJLy8gaWYgKChkYXRhWzNdPj0gMCkgJiYgKGRhdGFbM10gPD0gNjU1MzUpKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5FcnJvciBpbiBzZWxlY3Rpb24gb2YgcmVsb2FkIHZhbHVlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2Vsc2UgaWYgKChkYXRhWzNdPj0gMCkgJiYgKGRhdGFbM10gPD0gNjU1MzUpKQorCQlpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0ID0gZGF0YVs3XTsKKwkJaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdCA9IDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgY291bnRlclx0aW1lciBvcHRpb24gZG9lcyBub3QgZXhpc3RcbiIpOworCX0JCQkvL3N3aXRjaChkYXRhWzFdKQorCWlfQ291bnRlckxvZ2ljID0gZGF0YVsyXTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTAwX1N0YXJ0U3RvcFRyaWdnZXJUaW1lckNvdW50ZXJXYXRjaGRvZyAgICAgIHwKK3wJCQkJKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSk7ICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU3RhcnQgLyBTdG9wIG9yIHRyaWdnZXIgdGhlIHRpbWVyIGNvdW50ZXIgb3IgV2F0Y2hkb2cgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgIHwKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICAgICAgICAgICAgICAgIDogMCAgICAgQ291bnRlcjEvVGltZXIxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgIENvdW50ZXIyL1RpbWVyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgICBDb3VudGVyMy9XYXRjaGRvZworICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgICAgICAgICAgICAgOiAwICAgICBzdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICBzdG9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgIFRyaWdnZXIKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzJdICAgICAgICAgICAgICAgIDogMCAgICAgQ291bnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICBUaW1lci9XYXRjaGRvZworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kxNTAwX1N0YXJ0U3RvcFRyaWdnZXJUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBDT1VOVEVSMToKKwkJc3dpdGNoIChkYXRhWzFdKSB7CisJCWNhc2UgU1RBUlQ6CisJCQlpZiAoaV9UaW1lckNvdW50ZXIxSW5pdCA9PSAxKSB7CisJCQkJaWYgKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQgPT0gMSkgeworCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4QzQ7CS8vRW5hYmxlIHRoZSBpbnRlcnJ1cHQKKwkJCQl9CS8vIGlmKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQ9PTEpCisJCQkJZWxzZSB7CisJCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHhFNDsJLy9kaXNhYmxlIHRoZSBpbnRlcnJ1cHQKKwkJCQl9CS8vZWxzZWlmKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQ9PTEpCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTdGFydHMgdGltZXIvY291bnRlciAxICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlpX1RpbWVyQ291bnRlcjFFbmFibGVkID0gMTsKKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQlvdXRiKGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCX0JLy9pZiggaV9UaW1lckNvdW50ZXIxSW5pdD09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5Db3VudGVyL1RpbWVyMSBub3QgY29uZmlndXJlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFNUT1A6CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU3RvcCB0aW1lci9jb3VudGVyIDEgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoMHgwMCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9UaW1lckNvdW50ZXIxRW5hYmxlZCA9IDA7CisJCQlicmVhazsKKworCQljYXNlIFRSSUdHRVI6CisJCQlpZiAoaV9UaW1lckNvdW50ZXIxSW5pdCA9PSAxKSB7CisJCQkJaWYgKGlfVGltZXJDb3VudGVyMUVuYWJsZWQgPT0gMSkgeworCQkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNldCBUcmlnZ2VyIGFuZCBnYXRlICovCisJCQkJCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4NjsKKwkJCQl9CS8vaWYoIGlfVGltZXJDb3VudGVyMUVuYWJsZWQ9PTEpCisJCQkJZWxzZSB7CisJCQkJCQkgICAvKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgVHJpZ2dlciAqLworCQkJCQkJICAgLyoqKioqKioqKioqKioqKi8KKworCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4MjsKKwkJCQl9CS8vZWxzZWlmKGlfVGltZXJDb3VudGVyMUVuYWJsZWQ9PTEpCisKKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQlvdXRiKGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCX0JLy9pZiggaV9UaW1lckNvdW50ZXIxSW5pdD09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5Db3VudGVyL1RpbWVyMSBub3QgY29uZmlndXJlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgb3B0aW9uIGZvciBzdGFydC9zdG9wL3RyaWdnZXIgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vc3dpdGNoKGRhdGFbMV0pCisJCWJyZWFrOworCisJY2FzZSBDT1VOVEVSMjoKKwkJc3dpdGNoIChkYXRhWzFdKSB7CisJCWNhc2UgU1RBUlQ6CisJCQlpZiAoaV9UaW1lckNvdW50ZXIySW5pdCA9PSAxKSB7CisJCQkJaWYgKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQgPT0gMSkgeworCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4QzQ7CS8vRW5hYmxlIHRoZSBpbnRlcnJ1cHQKKwkJCQl9CS8vIGlmKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQ9PTEpCisJCQkJZWxzZSB7CisJCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHhFNDsJLy9kaXNhYmxlIHRoZSBpbnRlcnJ1cHQKKwkJCQl9CS8vZWxzZWlmKGlfVGltZXJDb3VudGVyV2F0Y2hkb2dJbnRlcnJ1cHQ9PTEpCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTdGFydHMgdGltZXIvY291bnRlciAyICovCisJCQkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlpX1RpbWVyQ291bnRlcjJFbmFibGVkID0gMTsKKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQlvdXRiKGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCX0JLy9pZiggaV9UaW1lckNvdW50ZXIySW5pdD09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5Db3VudGVyL1RpbWVyMiBub3QgY29uZmlndXJlZFxuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFNUT1A6CisKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU3RvcCB0aW1lci9jb3VudGVyIDIgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIyX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoMHgwMCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJaV9UaW1lckNvdW50ZXIyRW5hYmxlZCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBUUklHR0VSOgorCQkJaWYgKGlfVGltZXJDb3VudGVyMkluaXQgPT0gMSkgeworCQkJCWlmIChpX1RpbWVyQ291bnRlcjJFbmFibGVkID09IDEpIHsKKwkJCQkJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgVHJpZ2dlciBhbmQgZ2F0ZSAqLworCQkJCQkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweDY7CisJCQkJfQkvL2lmKCBpX1RpbWVyQ291bnRlcjJFbmFibGVkPT0xKQorCQkJCWVsc2UgeworCQkJCQkJICAgLyoqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2V0IFRyaWdnZXIgKi8KKwkJCQkJCSAgIC8qKioqKioqKioqKioqKiovCisKKwkJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweDI7CisJCQkJfQkvL2Vsc2VpZihpX1RpbWVyQ291bnRlcjJFbmFibGVkPT0xKQorCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZHMgYW5kIHN0YXR1cyByZWdpc3RlciAqLworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQkJb3V0YihpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQl9CS8vaWYoIGlfVGltZXJDb3VudGVyMkluaXQ9PTEpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuQ291bnRlci9UaW1lcjIgbm90IGNvbmZpZ3VyZWRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuVGhlIHNwZWNpZmllZCBvcHRpb24gZm9yIHN0YXJ0L3N0b3AvdHJpZ2dlciBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9zd2l0Y2goZGF0YVsxXSkKKwkJYnJlYWs7CisJY2FzZSBDT1VOVEVSMzoKKwkJc3dpdGNoIChkYXRhWzFdKSB7CisJCWNhc2UgU1RBUlQ6CisJCQlpZiAoaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdCA9PSAxKSB7CisKKwkJCQlpZiAoaV9UaW1lckNvdW50ZXJXYXRjaGRvZ0ludGVycnVwdCA9PSAxKSB7CisJCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHhDNDsJLy9FbmFibGUgdGhlIGludGVycnVwdAorCQkJCX0JLy8gaWYoaV9UaW1lckNvdW50ZXJXYXRjaGRvZ0ludGVycnVwdD09MSkKKwkJCQllbHNlIHsKKwkJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweEU0OwkvL2Rpc2FibGUgdGhlIGludGVycnVwdAorCQkJCX0JLy9lbHNlaWYoaV9UaW1lckNvdW50ZXJXYXRjaGRvZ0ludGVycnVwdD09MSkKKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFN0YXJ0cyBXYXRjaGRvZy9jb3VudGVyIDMgKi8KKwkJCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCWlfV2F0Y2hkb2dDb3VudGVyM0VuYWJsZWQgPSAxOworCQkJCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCW91dGIoaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCQl9CS8vIGlmKCBpX1dhdGNoZG9nQ291bnRlcjNpbml0PT0xKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcbldhdGNoZG9nL0NvdW50ZXIzIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU1RPUDoKKworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTdG9wIFdhdGNoZG9nL2NvdW50ZXIgMyAqLworCQkJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJb3V0YigweDAwLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX1dhdGNoZG9nQ291bnRlcjNFbmFibGVkID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgVFJJR0dFUjoKKwkJCXN3aXRjaCAoZGF0YVsyXSkgeworCQkJY2FzZSAwOgkvL3RyaWdnZXJpbmcgY291bnRlciAzCisJCQkJaWYgKGlfV2F0Y2hkb2dDb3VudGVyM0luaXQgPT0gMSkgeworCQkJCQlpZiAoaV9XYXRjaGRvZ0NvdW50ZXIzRW5hYmxlZCA9PSAxKSB7CisJCQkJCQkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBTZXQgVHJpZ2dlciBhbmQgZ2F0ZSAqLworCQkJCQkJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4NjsKKwkJCQkJfQkvL2lmKCBpX1dhdGNoZG9nQ291bnRlcjNFbmFibGVkPT0xKQorCQkJCQllbHNlIHsKKwkJCQkJCQkgICAvKioqKioqKioqKioqKioqLworCQkJCQkJLyogU2V0IFRyaWdnZXIgKi8KKwkJCQkJCQkgICAvKioqKioqKioqKioqKioqLworCisJCQkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4MjsKKwkJCQkJfQkvL2Vsc2VpZihpX1dhdGNoZG9nQ291bnRlcjNFbmFibGVkPT0xKQorCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCQlvdXRiKGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCX0JLy9pZiggaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdD09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcbkNvdW50ZXIzIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCS8vdHJpZ2dlcmluZyBXYXRjaGRvZyAzCisJCQkJaWYgKGlfV2F0Y2hkb2dDb3VudGVyM0luaXQgPT0gMSkgeworCisJCQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCQlvdXRiKDB4NiwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQl9CS8vaWYoIGlfV2F0Y2hkb2dDb3VudGVyM0luaXQ9PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5XYXRjaGRvZyAzIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlwcmludGsoIlxuV3JvbmcgY2hvaWNlIG9mIHdhdGNoZG9nL2NvdW50ZXIzXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0JLy9zd2l0Y2goZGF0YVsyXSkKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgb3B0aW9uIGZvciBzdGFydC9zdG9wL3RyaWdnZXIgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vc3dpdGNoKGRhdGFbMV0pCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgc3BlY2lmaWVkIGNob2ljZSBmb3IgY291bnRlci93YXRjaGRvZy90aW1lciBkb2VzIG5vdCBleGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvL3N3aXRjaChkYXRhWzBdKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfUmVhZENvdW50ZXJUaW1lcldhdGNoZG9nICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7IAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdICAgICAgICAgICAgICAgIDogMCAgICAgQ291bnRlcjEvVGltZXIxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgIENvdW50ZXIyL1RpbWVyMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICAgICBDb3VudGVyMy9XYXRjaGRvZworCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTUwMF9SZWFkQ291bnRlclRpbWVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZTsKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIENPVU5URVIxOgorCQkvL1JlYWQgY291bnRlci90aW1lcjEKKwkJaWYgKGlfVGltZXJDb3VudGVyMUluaXQgPT0gMSkgeworCQkJaWYgKGlfVGltZXJDb3VudGVyMUVuYWJsZWQgPT0gMSkgeworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IFJDQyBhbmQgZ2F0ZSAqLworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4QzsKKwkJCX0JLy9pZiggaV9UaW1lckNvdW50ZXIxSW5pdD09MSkKKwkJCWVsc2UgeworCQkgICAgLyoqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZXQgUkNDICovCisJCSAgICAvKioqKioqKioqKioqKioqLworCisJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweDg7CisJCQl9CS8vZWxzZWlmKGlfVGltZXJDb3VudGVyMUluaXQ9PTEpCisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZHMgYW5kIHN0YXR1cyByZWdpc3RlciAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCW91dGIoaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIGNvdW50ZXIgcmVnaXN0ZXIgKGhpZ2gpICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SX0NQVF9UTVIxX1ZBTFVFX0hJR0gsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWRhdGFbMF0gPQorCQkJCWluYihkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJZGF0YVswXSA9IGRhdGFbMF0gPDwgODsKKwkJCWRhdGFbMF0gPSBkYXRhWzBdICYgMHhmZjAwOworCQkJb3V0YihBUENJMTUwMF9SX0NQVF9UTVIxX1ZBTFVFX0xPVywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJZGF0YVswXSA9CisJCQkJZGF0YVswXSB8IGluYihkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQl9CQkvL2lmKCBpX1RpbWVyQ291bnRlcjFJbml0PT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5UaW1lci9Db3VudGVyMSBub3QgY29uZmlndXJlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9lbHNlaWYoIGlfVGltZXJDb3VudGVyMUluaXQ9PTEpCisJCWJyZWFrOworCWNhc2UgQ09VTlRFUjI6CisJCS8vUmVhZCBjb3VudGVyL3RpbWVyMgorCQlpZiAoaV9UaW1lckNvdW50ZXIySW5pdCA9PSAxKSB7CisJCQlpZiAoaV9UaW1lckNvdW50ZXIyRW5hYmxlZCA9PSAxKSB7CisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZXQgUkNDIGFuZCBnYXRlICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHhDOworCQkJfQkvL2lmKCBpX1RpbWVyQ291bnRlcjJJbml0PT0xKQorCQkJZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCBSQ0MgKi8KKwkJICAgIC8qKioqKioqKioqKioqKiovCisKKwkJCQlpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSA9IDB4ODsKKwkJCX0JLy9lbHNlaWYoaV9UaW1lckNvdW50ZXIySW5pdD09MSkKKworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kcyBhbmQgc3RhdHVzIHJlZ2lzdGVyICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJb3V0YihpX0NvbW1hbmRBbmRTdGF0dXNWYWx1ZSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY291bnRlciByZWdpc3RlciAoaGlnaCkgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JfQ1BUX1RNUjJfVkFMVUVfSElHSCwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJZGF0YVswXSA9CisJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlkYXRhWzBdID0gZGF0YVswXSA8PCA4OworCQkJZGF0YVswXSA9IGRhdGFbMF0gJiAweGZmMDA7CisJCQlvdXRiKEFQQ0kxNTAwX1JfQ1BUX1RNUjJfVkFMVUVfTE9XLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlkYXRhWzBdID0KKwkJCQlkYXRhWzBdIHwgaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCX0JCS8vaWYoIGlfVGltZXJDb3VudGVyMkluaXQ9PTEpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblRpbWVyL0NvdW50ZXIyIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2Vsc2VpZiggaV9UaW1lckNvdW50ZXIySW5pdD09MSkKKwkJYnJlYWs7CisJY2FzZSBDT1VOVEVSMzoKKwkJLy9SZWFkIGNvdW50ZXIvd2F0Y2hkb2cyCisJCWlmIChpX1dhdGNoZG9nQ291bnRlcjNJbml0ID09IDEpIHsKKwkJCWlmIChpX1dhdGNoZG9nQ291bnRlcjNFbmFibGVkID09IDEpIHsKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFNldCBSQ0MgYW5kIGdhdGUgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9Db21tYW5kQW5kU3RhdHVzVmFsdWUgPSAweEM7CisJCQl9CS8vaWYoIGlfVGltZXJDb3VudGVyMkluaXQ9PTEpCisJCQllbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKiovCisJCQkJLyogU2V0IFJDQyAqLworCQkgICAgLyoqKioqKioqKioqKioqKi8KKworCQkJCWlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlID0gMHg4OworCQkJfQkvL2Vsc2VpZihpX1dhdGNoZG9nQ291bnRlcjNJbml0PT0xKQorCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmRzIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlvdXRiKGlfQ29tbWFuZEFuZFN0YXR1c1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb3VudGVyIHJlZ2lzdGVyIChoaWdoKSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUl9DUFRfVE1SM19WQUxVRV9ISUdILAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlkYXRhWzBdID0KKwkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWRhdGFbMF0gPSBkYXRhWzBdIDw8IDg7CisJCQlkYXRhWzBdID0gZGF0YVswXSAmIDB4ZmYwMDsKKwkJCW91dGIoQVBDSTE1MDBfUl9DUFRfVE1SM19WQUxVRV9MT1csCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWRhdGFbMF0gPQorCQkJCWRhdGFbMF0gfCBpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJfQkJLy9pZiggaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdD09MSkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuV2F0Y2hkb2dDb3VudGVyMyBub3QgY29uZmlndXJlZFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9lbHNlaWYoIGlfV2F0Y2hkb2dDb3VudGVyM0luaXQ9PTEpCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgY2hvaWNlIG9mIHRpbWVyL2NvdW50ZXIvd2F0Y2hkb2cgZG9lcyBub3QgZXhpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9zd2l0Y2goZGF0YVswXSkKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50ICBpX0FQQ0kxNTAwX1JlYWRJbnRlcnJ1cHRNYXNrICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7IAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgaW50ZXJydXB0IG1hc2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKworCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQlkYXRhWzBdOlRoZSBpbnRlcnJ1cHQgbWFzayB2YWx1ZQkJCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV06Q2hhbm5lbCBubworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTE1MDBfUmVhZEludGVycnVwdE1hc2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBpX0ludGVycnVwdE1hc2s7CisJZGF0YVsxXSA9IGlfSW5wdXRDaGFubmVsOworCWlfSW50ZXJydXB0TWFzayA9IDA7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgIGlfQVBDSTE1MDBfQ29uZmlndXJlSW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgfAorfAkJCShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIHRoZSBpbnRlcnJ1cHQgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciAgICAgICAgICAgICAgICAgfAorCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMTUwMF9Db25maWd1cmVJbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfU3RhdHVzOworCWludCBpX1JlZ1ZhbHVlOworCWludCBpX0NvbnN0YW50OworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHgzOCk7CisJaWYgKGRhdGFbMF0gPT0gMSkgeworCQlpX0NvbnN0YW50ID0gMHhDMDsKKwl9CQkJLy9pZihkYXRhWzBdPT0xKQorCWVsc2UgeworCQlpZiAoZGF0YVswXSA9PSAwKSB7CisJCQlpX0NvbnN0YW50ID0gMHgwMDsKKwkJfQkJLy9pZntkYXRhWzBdPT0wKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5UaGUgcGFyYW1ldGVyIHBhc3NlZCB0byBkcml2ZXIgaXMgaW4gZXJyb3IgZm9yIGVuYWJsaW5nIHRoZSB2b2x0YWdlIGludGVycnVwdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9lbHNlIGlmKGRhdGFbMF09PTApCisJfQkJCS8vZWxzZWlmKGRhdGFbMF09PTEpCisKKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1vZGUgc3BlY2lmaWNhdGlvbiByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX1NQRUNJRklDQVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCWlfUmVnVmFsdWUgPSBpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfU1BFQ0lGSUNBVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFdyaXRlcyB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gKEFQQ0kxNTAwX09SKSAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweEY5KSB8IEFQQ0kxNTAwX09SOworCisJb3V0YihpX1JlZ1ZhbHVlLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKyAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBBdXRob3Jpc2VzIHRoZSBpbnRlcnJ1cHQgb24gdGhlIGJvYXJkICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoMHhDMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBwYXR0ZXJuIHBvbGFyaXR5IHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9QT0xBUklUWSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YihpX0NvbnN0YW50LCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgcGF0dGVybiB0cmFuc2l0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9QQVRURVJOX1RSQU5TSVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoaV9Db25zdGFudCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIHBhdHRlcm4gbWFzayByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9NQVNLLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKGlfQ29uc3RhbnQsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEEgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlpX1JlZ1ZhbHVlID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgcG9ydCBBICovCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlfUmVnVmFsdWUgPSAoaV9SZWdWYWx1ZSAmIDB4MEYpIHwgMHgyMDsKKwlvdXRiKGlfUmVnVmFsdWUsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCAgQiAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCWlfUmVnVmFsdWUgPSBpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIERlbGV0ZXMgdGhlIGludGVycnVwdCBvZiBwb3J0IEIgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHgwRikgfCAweDIwOworCW91dGIoaV9SZWdWYWx1ZSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDEgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMV9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlpX1JlZ1ZhbHVlID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgdGltZXIgMSAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweDBGKSB8IDB4MjA7CisJb3V0YihpX1JlZ1ZhbHVlLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlpX1JlZ1ZhbHVlID0gaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgdGltZXIgMiAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweDBGKSB8IDB4MjA7CisJb3V0YihpX1JlZ1ZhbHVlLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMyAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCWlfUmVnVmFsdWUgPSBpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIERlbGV0ZXMgdGhlIGludGVycnVwdCBvZiB0aW1lciAzICovCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlfUmVnVmFsdWUgPSAoaV9SZWdWYWx1ZSAmIDB4MEYpIHwgMHgyMDsKKwlvdXRiKGlfUmVnVmFsdWUsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQXV0aG9yaXplcyB0aGUgbWFpbiBpbnRlcnJ1cHQgb24gdGhlIGJvYXJkICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YigweEQwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBFbmFibGVzIHRoZSBQQ0kgaW50ZXJydXB0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0bCgweDMwMDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCXVpX1N0YXR1cyA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDEwKTsKKwl1aV9TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHgzOCk7CisJb3V0bCgweDIzMDAwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyAweDM4KTsKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogc3RhdGljIHZvaWQgdl9BUENJMTUwMF9JbnRlcnJ1cHQJCQkJCSAgICAgfAorfAkJCQkJICAoaW50IGlycSAsIHZvaWQgKmQpICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogSW50ZXJydXB0IGhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGludCBpcnEgICAgICAgICAgICAgICAgIDogaXJxIG51bWJlciAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZCAgICAgICAgICAgICAgICAgOiB2b2lkIHBvaW50ZXIgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitzdGF0aWMgdm9pZCB2X0FQQ0kxNTAwX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQoreworCisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJVUlOVCB1aV9JbnRlcnJ1cHRTdGF0dXMgPSAwOworCWludCBpX1JlZ1ZhbHVlID0gMDsKKwlpX0ludGVycnVwdE1hc2sgPSAwOworCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFJlYWQgdGhlIGJvYXJkIGludGVycnVwdCBzdGF0dXMgKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfSW50ZXJydXB0U3RhdHVzID0gaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBib2FyZCBnZW5lcmF0ZWQgYSBpbnRlcnJ1cHQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpZiAoKHVpX0ludGVycnVwdFN0YXR1cyAmIDB4ODAwMDAwKSA9PSAweDgwMDAwMCkgeworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGlzYWJsZSBhbGwgSW50ZXJydXB0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8vb3V0YihBUENJMTUwMF9SV19NQVNURVJfSU5URVJSVVBUX0NPTlRST0wsZGV2cHJpdi0+aW9iYXNlK0FQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBEaXNhYmxlcyAgdGhlIG1haW4gaW50ZXJydXB0IG9uIHRoZSBib2FyZCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvL291dGIoMHgwMCxkZXZwcml2LT5pb2Jhc2UrQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9DT01NQU5EX0FORF9TVEFUVVMsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJaV9SZWdWYWx1ZSA9CisJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCWlmICgoaV9SZWdWYWx1ZSAmIDB4NjApID09IDB4NjApIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIERlbGV0ZXMgdGhlIGludGVycnVwdCBvZiBwb3J0IEEgKi8KKwkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHgwRikgfCAweDIwOworCQkJb3V0YihpX1JlZ1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX0ludGVycnVwdE1hc2sgPSBpX0ludGVycnVwdE1hc2sgfCAxOworCQkJaWYgKGlfTG9naWMgPT0gQVBDSTE1MDBfT1JfUFJJT1JJVFkpIHsKKwkJCQlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQV9TUEVDSUZJQ0FUSU9OLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCQlpX1JlZ1ZhbHVlID0KKwkJCQkJaW5iKGRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZWxlY3RzIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfSU5URVJSVVBUX0NPTlRST0wsCisJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkJCWlfUmVnVmFsdWUgPQorCQkJCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkJCQlpX0lucHV0Q2hhbm5lbCA9IDEgKyAoaV9SZWdWYWx1ZSA+PiAxKTsKKworCQkJfQkvLyBpZihpX0xvZ2ljPT1BUENJMTUwMF9PUl9QUklPUklUWSkKKwkJCWVsc2UgeworCQkJCWlfSW5wdXRDaGFubmVsID0gMDsKKwkJCX0JLy9lbHNlaWYoaV9Mb2dpYz09QVBDSTE1MDBfT1JfUFJJT1JJVFkpCisJCX0JCS8vIGlmICgoaV9SZWdWYWx1ZSAmIDB4NjApID09IDB4NjApCisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQlpX1JlZ1ZhbHVlID0KKwkJCWluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJaWYgKChpX1JlZ1ZhbHVlICYgMHg2MCkgPT0gMHg2MCkgeworCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCSAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgcG9ydCBCICovCisJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweDBGKSB8IDB4MjA7CisJCQlvdXRiKGlfUmVnVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCXByaW50aygiXG5cblxuIik7CisJICAgICAvKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWRzIHBvcnQgQiAqLworCSAgICAgLyoqKioqKioqKioqKioqKiovCisJCQlpX1JlZ1ZhbHVlID0KKwkJCQlpbmIoKFVJTlQpIGRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfUE9SVF9CKTsKKworCQkJaV9SZWdWYWx1ZSA9IGlfUmVnVmFsdWUgJiAweEMwOworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3RzIGlmIHRoaXMgaXMgYW4gZXh0ZXJuYWwgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChpX1JlZ1ZhbHVlKSB7CisJCQkJLy9EaXNhYmxlIHRoZSBpbnRlcnJ1cHQKKwkJICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCQkgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHgzOCk7CisKKwkJCQlpZiAoaV9SZWdWYWx1ZSAmIDB4ODApIHsKKwkJCQkJaV9JbnRlcnJ1cHRNYXNrID0KKwkJCQkJCWlfSW50ZXJydXB0TWFzayB8IDB4NDA7CisJCQkJfQkvL2lmIChpX1JlZ1ZhbHVlICYgMHg4MCkKKworCQkJCWlmIChpX1JlZ1ZhbHVlICYgMHg0MCkgeworCQkJCQlpX0ludGVycnVwdE1hc2sgPQorCQkJCQkJaV9JbnRlcnJ1cHRNYXNrIHwgMHg4MDsKKwkJCQl9CS8vaWYgKGlfUmVnVmFsdWUgJiAweDQwKQorCQkJfQkvLyBpZiAoaV9SZWdWYWx1ZSkKKwkJCWVsc2UgeworCQkJCWlfSW50ZXJydXB0TWFzayA9IGlfSW50ZXJydXB0TWFzayB8IDI7CisJCQl9CS8vIGlmIChpX1JlZ1ZhbHVlKQorCQl9CQkvL2lmICgoaV9SZWdWYWx1ZSAmIDB4NjApID09IDB4NjApCisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMSAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfQ01EX1NUQVRVUywKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQlpX1JlZ1ZhbHVlID0KKwkJCWluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJaWYgKChpX1JlZ1ZhbHVlICYgMHg2MCkgPT0gMHg2MCkgeworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMSAqLworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogRGVsZXRlcyB0aGUgaW50ZXJydXB0IG9mIHRpbWVyIDEgKi8KKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHgwRikgfCAweDIwOworCQkJb3V0YihpX1JlZ1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpX0ludGVycnVwdE1hc2sgPSBpX0ludGVycnVwdE1hc2sgfCA0OworCQl9CQkvLyBpZiAoKGlfUmVnVmFsdWUgJiAweDYwKSA9PSAweDYwKQorCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAyICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCWlfUmVnVmFsdWUgPQorCQkJaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQlpZiAoKGlfUmVnVmFsdWUgJiAweDYwKSA9PSAweDYwKSB7CisJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAyICovCisJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKworCQkJCUFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBEZWxldGVzIHRoZSBpbnRlcnJ1cHQgb2YgdGltZXIgMiAqLworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlpX1JlZ1ZhbHVlID0gKGlfUmVnVmFsdWUgJiAweDBGKSB8IDB4MjA7CisJCQlvdXRiKGlfUmVnVmFsdWUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJCWlfSW50ZXJydXB0TWFzayA9IGlfSW50ZXJydXB0TWFzayB8IDg7CisJCX0JCS8vIGlmICgoaV9SZWdWYWx1ZSAmIDB4NjApID09IDB4NjApCisKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMyAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCQlpX1JlZ1ZhbHVlID0KKwkJCWluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJaWYgKChpX1JlZ1ZhbHVlICYgMHg2MCkgPT0gMHg2MCkgeworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMyAqLworCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogRGVsZXRlcyB0aGUgaW50ZXJydXB0IG9mIHRpbWVyIDMgKi8KKwkJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJaV9SZWdWYWx1ZSA9IChpX1JlZ1ZhbHVlICYgMHgwRikgfCAweDIwOworCQkJb3V0YihpX1JlZ1ZhbHVlLAorCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJCQlpZiAoaV9Db3VudGVyTG9naWMgPT0gQVBDSTE1MDBfQ09VTlRFUikgeworCQkJCWlfSW50ZXJydXB0TWFzayA9IGlfSW50ZXJydXB0TWFzayB8IDB4MTA7CisJCQl9CS8vaWYoaV9Db3VudGVyTG9naWM9PUFQQ0kxNTAwX0NPVU5URVIpCisJCQllbHNlIHsKKwkJCQlpX0ludGVycnVwdE1hc2sgPSBpX0ludGVycnVwdE1hc2sgfCAweDIwOworCQkJfQorCQl9CQkvLyBpZiAoKGlfUmVnVmFsdWUgJiAweDYwKSA9PSAweDYwKQorCisJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CS8vIHNlbmQgc2lnbmFsIHRvIHRoZSBzYW1wbGUKKwkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBFbmFibGUgYWxsIEludGVycnVwdHMgKi8KKwkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgaW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0lOVEVSUlVQVF9DT05UUk9MLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBBdXRob3JpemVzIHRoZSBtYWluIGludGVycnVwdCBvbiB0aGUgYm9hcmQgKi8KKwkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dGIoMHhEMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJfQkJCS8vICBpZiAoKHVpX0ludGVycnVwdFN0YXR1cyAmIDB4ODAwMDAwKSA9PSAweDgwMDAwMCkKKwllbHNlIHsKKwkJcHJpbnRrKCJcbkludGVycnVwdCBmcm9tIHVua25vd24gc291cmNlXG4iKTsKKworCX0JCQkvL2Vsc2UgaWYgKCh1aV9JbnRlcnJ1cHRTdGF0dXMgJiAweDgwMDAwMCkgPT0gMHg4MDAwMDApCisJcmV0dXJuOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MDBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6cmVzZXRzIGFsbCB0aGUgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNTAwX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpX0R1bW15UmVhZCA9IDA7CisJaV9UaW1lckNvdW50ZXIxSW5pdCA9IDA7CisJaV9UaW1lckNvdW50ZXIySW5pdCA9IDA7CisJaV9XYXRjaGRvZ0NvdW50ZXIzSW5pdCA9IDA7CisJaV9FdmVudDFTdGF0dXMgPSAwOworCWlfRXZlbnQyU3RhdHVzID0gMDsKKwlpX1RpbWVyQ291bnRlcldhdGNoZG9nSW50ZXJydXB0ID0gMDsKKwlpX0xvZ2ljID0gMDsKKwlpX0NvdW50ZXJMb2dpYyA9IDA7CisJaV9JbnRlcnJ1cHRNYXNrID0gMDsKKwlpX0lucHV0Q2hhbm5lbCA9IDA7OworCWlfVGltZXJDb3VudGVyMUVuYWJsZWQgPSAwOworCWlfVGltZXJDb3VudGVyMkVuYWJsZWQgPSAwOworCWlfV2F0Y2hkb2dDb3VudGVyM0VuYWJsZWQgPSAwOworCisgICAgLyoqKioqKioqKioqKioqKioqKi8KKwkvKiBTb2Z0d2FyZSByZXNldCAqLworICAgIC8qKioqKioqKioqKioqKioqKiovCisJaV9EdW1teVJlYWQgPSBpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlpX0R1bW15UmVhZCA9IGluYihkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtYXN0ZXIgY29uZmlndXJhdGlvbiBjb250cm9sIHJlZ2lzdGVyICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfTUFTVEVSX0NPTkZJR1VSQVRJT05fQ09OVFJPTCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJb3V0YigweEY0LCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBtb2RlIHNwZWNpZmljYXRpb24gcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX1NQRUNJRklDQVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMHgxMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkvKiBTZWxlY3RzIHRoZSBkYXRhIHBhdGggcG9sYXJpdHkgcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfREFUQV9QQ0lUQ0hfUE9MQVJJVFksCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIEhpZ2ggbGV2ZWwgb2YgcG9ydCBBIG1lYW5zIDEgKi8KKwlvdXRiKDB4RkYsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJLyogU2VsZWN0cyB0aGUgZGF0YSBkaXJlY3Rpb24gcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfREFUQV9ESVJFQ1RJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIEFsbCBiaXRzIHVzZWQgYXMgaW5wdXRzICovCisJb3V0YigweEZGLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIElQIGFuZCBJVVMgKi8KKwlvdXRiKDB4MjAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qICBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBBICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0FfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWFjdGl2YXRlcyB0aGUgaW50ZXJydXB0IG1hbmFnZW1lbnQgb2YgcG9ydCBBOiAgKi8KKwlvdXRiKDB4RTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGhhbmRzaGFrZSBzcGVjaWZpY2F0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQSAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0hBTkRTSEFLRV9TUEVDSUZJQ0FUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIHRoZSByZWdpc3RlciAqLworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisKKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1vZGUgc3BlY2lmaWNhdGlvbiByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX1NQRUNJRklDQVRJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCW91dGIoMHgxMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgZGF0YSBwYXRoIHBvbGFyaXR5IHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0RBVEFfUENJVENIX1BPTEFSSVRZLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBBIGhpZ2ggbGV2ZWwgb2YgcG9ydCBCIG1lYW5zIDEgKi8KKwlvdXRiKDB4N0YsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIGRhdGEgZGlyZWN0aW9uIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0RBVEFfRElSRUNUSU9OLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBBbGwgYml0cyB1c2VkIGFzIGlucHV0cyAqLworCW91dGIoMHhGRiwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9CX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBJUCBhbmQgSVVTICovCisJb3V0YigweDIwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBCICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWFjdGl2YXRlcyB0aGUgaW50ZXJydXB0IG1hbmFnZW1lbnQgb2YgcG9ydCBCOiAgICAgICAgICovCisJb3V0YigweEUwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBoYW5kc2hha2Ugc3BlY2lmaWNhdGlvbiByZWdpc3RlciBvZiBwb3J0IEIgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9IQU5EU0hBS0VfU1BFQ0lGSUNBVElPTiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyB0aGUgcmVnaXN0ZXIgKi8KKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGRhdGEgcGF0aCBwb2xhcml0eSByZWdpc3RlciBvZiBwb3J0IEMgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0NfREFUQV9QQ0lUQ0hfUE9MQVJJVFksCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIEhpZ2ggbGV2ZWwgb2YgcG9ydCBDIG1lYW5zIDEgKi8KKwlvdXRiKDB4OSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgZGF0YSBkaXJlY3Rpb24gcmVnaXN0ZXIgb2YgcG9ydCBDICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0NfREFUQV9ESVJFQ1RJT04sCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIEFsbCBiaXRzIHVzZWQgYXMgaW5wdXRzIGV4Y2VwdCBjaGFubmVsIDEgKi8KKwlvdXRiKDB4MEUsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIFNlbGVjdHMgdGhlIHNwZWNpYWwgSU8gcmVnaXN0ZXIgb2YgcG9ydCBDICovCisJb3V0YihBUENJMTUwMF9SV19QT1JUX0NfU1BFQ0lBTF9JT19DT05UUk9MLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBEZWxldGVzIGl0ICovCisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAxICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlbGV0ZXMgSVAgYW5kIElVUyAqLworCW91dGIoMHgyMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDEgKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCS8qIERlYWN0aXZhdGVzIHRoZSBpbnRlcnJ1cHQgbWFuYWdlbWVudCBvZiB0aW1lciAxICAgICAgICAgKi8KKwlvdXRiKDB4RTAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBJUCBhbmQgSVVTICovCisJb3V0YigweDIwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgdGltZXIgMiAqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVhY3RpdmF0ZXMgVGltZXIgMiBpbnRlcnJ1cHQgbWFuYWdlbWVudDogICAgICAgICAgICAgICAqLworCW91dGIoMHhFMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAzICovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBJUCBhbmQgSVVTICovCisJb3V0YigweDIwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgVGltZXIgMyAqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjNfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVhY3RpdmF0ZXMgaW50ZXJydXB0IG1hbmFnZW1lbnQgb2YgdGltZXIgMzogICAgICAgICAgICAqLworCW91dGIoMHhFMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIG1hc3RlciBpbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAqLworCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX01BU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLyogRGVsZXRlcyBhbGwgaW50ZXJydXB0cyAqLworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisJLy9yZXNldCBhbGwgdGhlIGRpZ2l0YWwgb3V0cHV0cworCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTE1MDBfRElHSVRBTF9PUCk7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERpc2FibGUgdGhlIGJvYXJkIGludGVycnVwdCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgbWFzdGVyIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19NQVNURVJfSU5URVJSVVBUX0NPTlRST0wsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWFjdGl2YXRlcyBhbGwgaW50ZXJydXB0cyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZWxlY3RzIHRoZSBjb21tYW5kIGFuZCBzdGF0dXMgcmVnaXN0ZXIgb2YgcG9ydCBBICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlYWN0aXZhdGVzIGFsbCBpbnRlcnJ1cHRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoMHgwMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHBvcnQgQiAqLworIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX1BPUlRfQl9DT01NQU5EX0FORF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWFjdGl2YXRlcyBhbGwgaW50ZXJydXB0cyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKDB4MDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAxICovCisgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoQVBDSTE1MDBfUldfQ1BUX1RNUjFfQ01EX1NUQVRVUywKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlYWN0aXZhdGVzIGFsbCBpbnRlcnJ1cHRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCW91dGIoMHgwMCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MDBfWjg1MzZfQ09OVFJPTF9SRUdJU1RFUik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2VsZWN0cyB0aGUgY29tbWFuZCBhbmQgc3RhdHVzIHJlZ2lzdGVyIG9mIHRpbWVyIDIgKi8KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YihBUENJMTUwMF9SV19DUFRfVE1SMl9DTURfU1RBVFVTLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGVhY3RpdmF0ZXMgYWxsIGludGVycnVwdHMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0YigweDAwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSKTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNlbGVjdHMgdGhlIGNvbW1hbmQgYW5kIHN0YXR1cyByZWdpc3RlciBvZiB0aW1lciAzKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKEFQQ0kxNTAwX1JXX0NQVF9UTVIzX0NNRF9TVEFUVVMsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEZWFjdGl2YXRlcyBhbGwgaW50ZXJydXB0cyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlvdXRiKDB4MDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTAwX1o4NTM2X0NPTlRST0xfUkVHSVNURVIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUwMC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOTYwYjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTAwLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qKioqKioqKiogICAgICBEZWZpbml0aW9ucyBmb3IgQVBDSS0xNTAwIGNhcmQgICoqKioqLworCisvLyBDYXJkIFNwZWNpZmljIGluZm9ybWF0aW9uCisjZGVmaW5lIEFQQ0kxNTAwX0JPQVJEX1ZFTkRPUl9JRCAgICAgICAgICAgMHgxMGU4CisjZGVmaW5lIEFQQ0kxNTAwX0FERFJFU1NfUkFOR0UgICAgICAgICAgICAgIDQKKworLy9ESUdJVEFMIElOUFVULU9VVFBVVCBERUZJTkUKKworI2RlZmluZSAgQVBDSTE1MDBfRElHSVRBTF9PUCAgICAgICAgICAgICAgICAgCTIKKyNkZWZpbmUgIEFQQ0kxNTAwX0RJR0lUQUxfSVAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgIEFQQ0kxNTAwX0FORCAgICAgICAgICAgICAgIAkJICAgIDIKKyNkZWZpbmUgIEFQQ0kxNTAwX09SICAgICAgICAgICAgICAgIAkJICAgIDQKKyNkZWZpbmUgIEFQQ0kxNTAwX09SX1BSSU9SSVRZICAgICAgIAkJICAgIDYKKyNkZWZpbmUgIEFQQ0kxNTAwX0NMS19TRUxFQ1QgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgIENPVU5URVIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgIENPVU5URVIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgIENPVU5URVIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgIEFQQ0kxNTAwX0NPVU5URVIgICAgICAgICAgICAgICAgCQkweDIwCisjZGVmaW5lICBBUENJMTUwMF9USU1FUiAgICAgICAgICAgICAgICAgIAkJMAorI2RlZmluZSAgQVBDSTE1MDBfV0FUQ0hET0cgICAgICAgICAgCQkgICAgMAorI2RlZmluZSAgQVBDSTE1MDBfU0lOR0xFICAgICAgICAgICAgCQkgICAgMAorI2RlZmluZSAgQVBDSTE1MDBfQ09OVElOVU9VUyAgICAgICAgCQkgICAgMHg4MAorI2RlZmluZSAgQVBDSTE1MDBfRElTQUJMRSAgICAgICAgICAgICAgICAJCTAKKyNkZWZpbmUgIEFQQ0kxNTAwX0VOQUJMRSAgICAgICAgICAgICAgICAJCTEKKyNkZWZpbmUgIEFQQ0kxNTAwX1NPRlRXQVJFX1RSSUdHRVIgIAkJICAgIDB4NAorI2RlZmluZSAgQVBDSTE1MDBfSEFSRFdBUkVfVFJJR0dFUiAgCQkgICAgMHgxMAorI2RlZmluZSAgQVBDSTE1MDBfU09GVFdBUkVfR0FURSAgICAgCQkgICAgMAorI2RlZmluZSAgQVBDSTE1MDBfSEFSRFdBUkVfR0FURSAgICAgCQkgICAgMHg4CisjZGVmaW5lICBTVEFSVCAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgMAorI2RlZmluZSAgU1RPUCAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgMQorI2RlZmluZSAgVFJJR0dFUiAgICAgICAgICAgICAgICAgICAgICAgCQkgICAgMgorCisvKgorICogWmlsbG9nIEkvTyBlbnVtZXJhdGlvbgorICovCitlbnVtIHsKKwlBUENJMTUwMF9aODUzNl9QT1JUX0MsCisJQVBDSTE1MDBfWjg1MzZfUE9SVF9CLAorCUFQQ0kxNTAwX1o4NTM2X1BPUlRfQSwKKwlBUENJMTUwMF9aODUzNl9DT05UUk9MX1JFR0lTVEVSCit9OworCisvKgorICogWjg1MzYgQ0lPIEludGVybmFsIEFkZHJlc3MKKyAqLworZW51bSB7CisJQVBDSTE1MDBfUldfTUFTVEVSX0lOVEVSUlVQVF9DT05UUk9MLAorCUFQQ0kxNTAwX1JXX01BU1RFUl9DT05GSUdVUkFUSU9OX0NPTlRST0wsCisJQVBDSTE1MDBfUldfUE9SVF9BX0lOVEVSUlVQVF9DT05UUk9MLAorCUFQQ0kxNTAwX1JXX1BPUlRfQl9JTlRFUlJVUFRfQ09OVFJPTCwKKwlBUENJMTUwMF9SV19USU1FUl9DT1VOVEVSX0lOVEVSUlVQVF9WRUNUT1IsCisJQVBDSTE1MDBfUldfUE9SVF9DX0RBVEFfUENJVENIX1BPTEFSSVRZLAorCUFQQ0kxNTAwX1JXX1BPUlRfQ19EQVRBX0RJUkVDVElPTiwKKwlBUENJMTUwMF9SV19QT1JUX0NfU1BFQ0lBTF9JT19DT05UUk9MLAorCisJQVBDSTE1MDBfUldfUE9SVF9BX0NPTU1BTkRfQU5EX1NUQVRVUywKKwlBUENJMTUwMF9SV19QT1JUX0JfQ09NTUFORF9BTkRfU1RBVFVTLAorCUFQQ0kxNTAwX1JXX0NQVF9UTVIxX0NNRF9TVEFUVVMsCisJQVBDSTE1MDBfUldfQ1BUX1RNUjJfQ01EX1NUQVRVUywKKwlBUENJMTUwMF9SV19DUFRfVE1SM19DTURfU1RBVFVTLAorCUFQQ0kxNTAwX1JXX1BPUlRfQV9EQVRBLAorCUFQQ0kxNTAwX1JXX1BPUlRfQl9EQVRBLAorCUFQQ0kxNTAwX1JXX1BPUlRfQ19EQVRBLAorCisJQVBDSTE1MDBfUl9DUFRfVE1SMV9WQUxVRV9ISUdILAorCUFQQ0kxNTAwX1JfQ1BUX1RNUjFfVkFMVUVfTE9XLAorCUFQQ0kxNTAwX1JfQ1BUX1RNUjJfVkFMVUVfSElHSCwKKwlBUENJMTUwMF9SX0NQVF9UTVIyX1ZBTFVFX0xPVywKKwlBUENJMTUwMF9SX0NQVF9UTVIzX1ZBTFVFX0hJR0gsCisJQVBDSTE1MDBfUl9DUFRfVE1SM19WQUxVRV9MT1csCisJQVBDSTE1MDBfUldfQ1BUX1RNUjFfVElNRV9DU1RfSElHSCwKKwlBUENJMTUwMF9SV19DUFRfVE1SMV9USU1FX0NTVF9MT1csCisJQVBDSTE1MDBfUldfQ1BUX1RNUjJfVElNRV9DU1RfSElHSCwKKwlBUENJMTUwMF9SV19DUFRfVE1SMl9USU1FX0NTVF9MT1csCisJQVBDSTE1MDBfUldfQ1BUX1RNUjNfVElNRV9DU1RfSElHSCwKKwlBUENJMTUwMF9SV19DUFRfVE1SM19USU1FX0NTVF9MT1csCisJQVBDSTE1MDBfUldfQ1BUX1RNUjFfTU9ERV9TUEVDSUZJQ0FUSU9OLAorCUFQQ0kxNTAwX1JXX0NQVF9UTVIyX01PREVfU1BFQ0lGSUNBVElPTiwKKwlBUENJMTUwMF9SV19DUFRfVE1SM19NT0RFX1NQRUNJRklDQVRJT04sCisJQVBDSTE1MDBfUl9DVVJSRU5UX1ZFQ1RPUiwKKworCUFQQ0kxNTAwX1JXX1BPUlRfQV9TUEVDSUZJQ0FUSU9OLAorCUFQQ0kxNTAwX1JXX1BPUlRfQV9IQU5EU0hBS0VfU1BFQ0lGSUNBVElPTiwKKwlBUENJMTUwMF9SV19QT1JUX0FfREFUQV9QQ0lUQ0hfUE9MQVJJVFksCisJQVBDSTE1MDBfUldfUE9SVF9BX0RBVEFfRElSRUNUSU9OLAorCUFQQ0kxNTAwX1JXX1BPUlRfQV9TUEVDSUFMX0lPX0NPTlRST0wsCisJQVBDSTE1MDBfUldfUE9SVF9BX1BBVFRFUk5fUE9MQVJJVFksCisJQVBDSTE1MDBfUldfUE9SVF9BX1BBVFRFUk5fVFJBTlNJVElPTiwKKwlBUENJMTUwMF9SV19QT1JUX0FfUEFUVEVSTl9NQVNLLAorCisJQVBDSTE1MDBfUldfUE9SVF9CX1NQRUNJRklDQVRJT04sCisJQVBDSTE1MDBfUldfUE9SVF9CX0hBTkRTSEFLRV9TUEVDSUZJQ0FUSU9OLAorCUFQQ0kxNTAwX1JXX1BPUlRfQl9EQVRBX1BDSVRDSF9QT0xBUklUWSwKKwlBUENJMTUwMF9SV19QT1JUX0JfREFUQV9ESVJFQ1RJT04sCisJQVBDSTE1MDBfUldfUE9SVF9CX1NQRUNJQUxfSU9fQ09OVFJPTCwKKwlBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9QT0xBUklUWSwKKwlBUENJMTUwMF9SV19QT1JUX0JfUEFUVEVSTl9UUkFOU0lUSU9OLAorCUFQQ0kxNTAwX1JXX1BPUlRfQl9QQVRURVJOX01BU0sKK307CisKKyAvKi0tLS0tLS0tLS1ESUdJVEFMIElOUFVULS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IGlfQVBDSTE1MDBfSW5pdGlhbGlzYXRpb24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfQ29uZmlnRGlnaXRhbElucHV0RXZlbnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsKKworc3RhdGljIGludCBpX0FQQ0kxNTAwX1N0YXJ0U3RvcElucHV0RXZlbnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyotLS0tLS0tLS0tCURJR0lUQUwgT1VUUFVULS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgaV9BUENJMTUwMF9Db25maWdEaWdpdGFsT3V0cHV0RXJyb3JJbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJCQkJdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgaV9BUENJMTUwMF9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvKi0tLS0tLS0tLS1USU1FUi0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBpX0FQQ0kxNTAwX0NvbmZpZ0NvdW50ZXJUaW1lcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCQkgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkJIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfU3RhcnRTdG9wVHJpZ2dlclRpbWVyQ291bnRlcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkJCSAgIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfUmVhZENvdW50ZXJUaW1lcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfUmVhZEludGVycnVwdE1hc2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyotLS0tLS0tLS0tSU5URVJSVVBUIEhBTkRMRVItLS0tLS0qLworc3RhdGljIHZvaWQgdl9BUENJMTUwMF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCk7CitzdGF0aWMgaW50IGlfQVBDSTE1MDBfQ29uZmlndXJlSW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKy8qLS0tLS0tLS0tLVJFU0VULS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBpbnQgaV9BUENJMTUwMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWU5YTkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUxNi5jCkBAIC0wLDAgKzEsNTQyIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQQ0ktMTUxNiAgICAgICB8IENvbXBpbGVyICAgOiBHQ0MgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogaHdkcnZfYXBjaTE1MTYuY3wgVmVyc2lvbiAgICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEhhcmR3YXJlIExheWVyIEFjY2VzIEZvciBBUENJLTE1MTYgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworI2luY2x1ZGUgImh3ZHJ2X2FwY2kxNTE2LmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTUxNl9SZWFkMURpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBkaWdpdGFsIGlucHV0ICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE1MTZfUmVhZDFEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVG1wVmFsdWUgPSAwOworCVVJTlQgdWlfQ2hhbm5lbDsKKwl1aV9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9IDcpIHsKKwkJdWlfVG1wVmFsdWUgPSAoVUlOVCkgaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTE2X0RJR0lUQUxfSVApOworCQkvLyAgc2luY2Ugb25seSAxIGNoYW5uZWwgcmVxZCAgdG8gYnJpbmcgaXQgdG8gbGFzdCBiaXQgaXQgaXMgcm90YXRlZAorCQkvLyAgOCArKGNoYW4gLSAxKSB0aW1lcyB0aGVuIEFORGVkIHdpdGggMSBmb3IgbGFzdCBiaXQuCisJCSpkYXRhID0gKHVpX1RtcFZhbHVlID4+IHVpX0NoYW5uZWwpICYgMHgxOworCX0JCQkvL2lmKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9NykKKwllbHNlIHsKKwkJLy9jb21lZGlfZXJyb3IoZGV2LCIgXG4gY2hhbiBzcGVjIHdyb25nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCX0JCQkvL2Vsc2UgaWYodWlfQ2hhbm5lbCA+PSAwICYmIHVpX0NoYW5uZWwgPD03KQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTUxNl9SZWFkTW9yZURpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBSZXF1ZXN0ZWQgZGlnaXRhbCBpbnB1dHMgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE1MTZfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJVUlOVCB1aV9Qb3J0VmFsdWUgPSBkYXRhWzBdOworCVVJTlQgdWlfTWFzayA9IDA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbHM7CisKKwl1aV9Ob09mQ2hhbm5lbHMgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCSpkYXRhID0gKFVJTlQpIGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX0lQKTsKKwlzd2l0Y2ggKHVpX05vT2ZDaGFubmVscykgeworCWNhc2UgMjoKKwkJdWlfTWFzayA9IDM7CisJCSpkYXRhID0gKCpkYXRhID4+ICgyICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQlicmVhazsKKwljYXNlIDQ6CisJCXVpX01hc2sgPSAxNTsKKwkJKmRhdGEgPSAoKmRhdGEgPj4gKDQgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuV3JvbmcgcGFyYW1ldGVyc1xuIik7CisJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJYnJlYWs7CisJfQkJCS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MTZfQ29uZmlnRGlnaXRhbE91dHB1dCAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgfAorfAkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIERpZ2l0YWwgT3V0cHV0IFN1YmRldmljZS4gICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbMF0gIDoxOk1lbW9yeSBvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICAgICAgICAgICAgMDpNZW1vcnkgb2ZmICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kxNTE2X0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gZGF0YVswXTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTE2X1dyaXRlRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogV3JpdGVzIHBvcnQgdmFsdWUgIFRvIHRoZSBzZWxlY3RlZCBwb3J0ICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNTE2X1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wLCB1aV9UZW1wMTsKKwlVSU5UIHVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8vIGdldCB0aGUgY2hhbm5lbAorCisJcHJpbnRrKCJFTDMxMTAwMyA6IEA9JXhcbiIsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTE2X0RJR0lUQUxfT1ApOworCisJaWYgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzKSB7CisJCXVpX1RlbXAgPSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MTZfRElHSVRBTF9PUCk7CisKKwl9CQkJLy9pZihkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApCisJZWxzZSB7CisJCXVpX1RlbXAgPSAwOworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwlpZiAoZGF0YVszXSA9PSAwKSB7CisJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgfCB1aV9UZW1wOworCQkJb3V0dyhkYXRhWzBdLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX09QKTsKKworCQkJcHJpbnRrKCJFTDMxMTAwMyA6IGQ9JWQgQD0leFxuIiwgZGF0YVswXSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX09QKTsKKworCQl9CQkvL2lmKGRhdGFbMV09PTApCisJCWVsc2UgeworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCWNhc2UgMjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDQ6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSA3OgorCQkJCQlkYXRhWzBdID0gZGF0YVswXSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQlvdXR3KGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTE2X0RJR0lUQUxfT1ApOworCisJCQkJcHJpbnRrKCJFTDMxMTAwMyA6IGQ9JWQgQD0leFxuIiwgZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MTZfRElHSVRBTF9PUCk7CisJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQllbHNlIHsKKwkJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZFxuIik7CisJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQl9CQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCX0JCQkvL2lmKGRhdGFbM109PTApCisJZWxzZSB7CisJCWlmIChkYXRhWzNdID09IDEpIHsKKwkJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDE7CisJCQkJdWlfVGVtcDEgPSAxOworCQkJCXVpX1RlbXAxID0gdWlfVGVtcDEgPDwgdWlfTm9PZkNoYW5uZWw7CisJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIF4gMHhmZjsKKwkJCQlkYXRhWzBdID0gZGF0YVswXSAmIHVpX1RlbXA7CisJCQkJb3V0dyhkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX09QKTsKKworCQkJCXByaW50aygiRUwzMTEwMDMgOiBkPSVkIEA9JXhcbiIsIGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTE2X0RJR0lUQUxfT1ApOworCisJCQl9CS8vaWYoZGF0YVsxXT09MCkKKwkJCWVsc2UgeworCQkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCisJCQkJCWNhc2UgMjoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MzsKKwkJCQkJCXVpX1RlbXAxID0gMzsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAyICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgNDoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZjsKKwkJCQkJCXVpX1RlbXAxID0gMTU7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgNCAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICg0ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIDc6CisJCQkJCQlicmVhazsKKworCQkJCQlkZWZhdWx0OgorCQkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCQkiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCisJCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUxNl9ESUdJVEFMX09QKTsKKworCQkJCQlwcmludGsoIkVMMzExMDAzIDogZD0lZCBAPSV4XG4iLAorCQkJCQkJZGF0YVswXSwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMTUxNl9ESUdJVEFMX09QKTsKKwkJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQkJfQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCQl9CQkvL2lmKGRhdGFbM109PTEpOworCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9pZiBlbHNlIGRhdGFbM109PTEpCisJfQkJCS8vaWYgZWxzZSBkYXRhWzNdPT0wKQorCXJldHVybiAoaW5zbi0+bik7OworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MTZfUmVhZERpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgb3IgcG9ydCAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTE1MTZfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJVUlOVCB1aV9UZW1wOworCVVJTlQgdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLy8gZ2V0IHRoZSBjaGFubmVsCisJdWlfVGVtcCA9IGRhdGFbMF07CisJKmRhdGEgPSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1MTZfRElHSVRBTF9PUF9SVyk7CisJaWYgKHVpX1RlbXAgPT0gMCkgeworCQkqZGF0YSA9ICgqZGF0YSA+PiB1aV9Ob09mQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vaWYodWlfVGVtcD09MCkKKwllbHNlIHsKKwkJaWYgKHVpX1RlbXAgPT0gMSkgeworCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCisJCQljYXNlIDI6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiBkYXRhWzFdKSkgJiAzOworCQkJCWJyZWFrOworCisJCQljYXNlIDQ6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDQgKiBkYXRhWzFdKSkgJiAxNTsKKwkJCQlicmVhazsKKworCQkJY2FzZSA3OgorCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWNvbWVkaV9lcnJvcihkZXYsICIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwkJfQkJLy9pZih1aV9UZW1wPT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkIFxuIik7CisJCX0JCS8vZWxzZWlmKHVpX1RlbXA9PTEpCisJfQkJCS8vZWxzZWlmKHVpX1RlbXA9PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTUxNl9Db25maWdXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICB8Cit8CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kxNTE2X0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoZGF0YVswXSA9PSAwKSB7CisJCS8vRGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwkJb3V0dygweDAsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kxNTE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQkvL0xvYWRpbmcgdGhlIFJlbG9hZCB2YWx1ZQorCQlvdXR3KGRhdGFbMV0sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kxNTE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSk7CisJCWRhdGFbMV0gPSBkYXRhWzFdID4+IDE2OworCQlvdXR3KGRhdGFbMV0sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kxNTE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSArIDIpOworCX0JCQkvL2lmKGRhdGFbMF09PTApCisJZWxzZSB7CisJCXByaW50aygiXG5UaGUgaW5wdXQgcGFyYW1ldGVycyBhcmUgd3JvbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9lbHNlaWYoZGF0YVswXT09MCkKKworCXJldHVybiBpbnNuLT5uOworfQorCisgLyoKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyAgICAgICAgICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSk7ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IFRhc2sgICAgICAgICAgICAgIDogU3RhcnQgLyBTdG9wIFRoZSBXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBPdXRwdXQgUGFyYW1ldGVycyA6ICAgICAgIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAqLworCitpbnQgaV9BUENJMTUxNl9TdGFydFN0b3BXcml0ZVdhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIDA6CQkvL3N0b3AgdGhlIHdhdGNoZG9nCisJCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTE1MTZfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CS8vZGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwkJYnJlYWs7CisJY2FzZSAxOgkJLy9zdGFydCB0aGUgd2F0Y2hkb2cKKwkJb3V0dygweDAwMDEsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kxNTE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQlicmVhazsKKwljYXNlIDI6CQkvL1NvZnR3YXJlIHRyaWdnZXIKKwkJb3V0dygweDAyMDEsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kxNTE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuU3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gc3dpdGNoKGRhdGFbMF0pCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTUxNl9SZWFkV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKTsgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIFRoZSBXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE1MTZfUmVhZFdhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gaW53KGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyBBUENJMTUxNl9XQVRDSERPR19TVEFUVVMpICYgMHgxOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1MTZfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6cmVzZXRzIGFsbCB0aGUgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kxNTE2X1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCW91dHcoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTUxNl9ESUdJVEFMX09QKTsJLy9SRVNFVFMgVEhFIERJR0lUQUwgT1VUUFVUUworCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTE1MTZfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CisJb3V0dygweDAsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyBBUENJMTUxNl9XQVRDSERPR19SRUxPQURfVkFMVUUpOworCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTE1MTZfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFICsgMik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTE2LmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTE2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk4YmFhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MTYuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvKioqKioqKioqICAgICAgRGVmaW5pdGlvbnMgZm9yIEFQQ0ktMTUxNiBjYXJkICAqKioqKi8KKworLy8gQ2FyZCBTcGVjaWZpYyBpbmZvcm1hdGlvbgorI2RlZmluZSBBUENJMTUxNl9CT0FSRF9WRU5ET1JfSUQgICAgICAgICAgICAgICAgIDB4MTVCOAorI2RlZmluZSBBUENJMTUxNl9BRERSRVNTX1JBTkdFICAgICAgICAgICAgICAgICAgIDgKKworLy9ESUdJVEFMIElOUFVULU9VVFBVVCBERUZJTkUKKworI2RlZmluZSBBUENJMTUxNl9ESUdJVEFMX09QICAgICAgICAgICAgICAgICAJNAorI2RlZmluZSBBUENJMTUxNl9ESUdJVEFMX09QX1JXICAgICAgICAgICAgICAgICAJNAorI2RlZmluZSBBUENJMTUxNl9ESUdJVEFMX0lQICAgICAgICAgICAgICAgICAgICAgMAorCisvLyBUSU1FUiBDT1VOVEVSIFdBVENIRE9HIERFRklORVMKKworI2RlZmluZSBBRERJREFUQV9XQVRDSERPRyAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUENJMTUxNl9ESUdJVEFMX09QX1dBVENIRE9HICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMTUxNl9XQVRDSERPR19FTkFCTEVESVNBQkxFICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBDSTE1MTZfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVBDSTE1MTZfV0FUQ0hET0dfU1RBVFVTICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEhhcmR3YXJlIExheWVyICBmdW5jdGlvbnMgZm9yIEFwY2kxNTE2CisKKy8vRGlnaXRhbCBJbnB1dAorSU5UIGlfQVBDSTE1MTZfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kxNTE2X1JlYWQxRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vRGlnaXRhbCBPdXRwdXQKK2ludCBpX0FQQ0kxNTE2X0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTE1MTZfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTE1MTZfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy8gVElNRVIKKy8vIHRpbWVyIHZhbHVlIGlzIHBhc3NlZCBhcyB1IHNlY29uZHMKK2ludCBpX0FQQ0kxNTE2X0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTE1MTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMTUxNl9SZWFkV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvL3Jlc2V0CitJTlQgaV9BUENJMTUxNl9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1NjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmI1MDRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTU2NC5jCkBAIC0wLDAgKzEsMTEwNSBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTE1NjQgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kxNTY0LmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0xNTY0ICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAiaHdkcnZfYXBjaTE1NjQuaCIKKworLy9HbG9iYWwgdmFyaWFibGVzCitVSU5UIHVpX0ludGVycnVwdFN0YXR1c18xNTY0ID0gMDsKK1VJTlQgdWlfSW50ZXJydXB0RGF0YSwgdWlfVHlwZTsKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTY0X0NvbmZpZ0RpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyB0aGUgZGlnaXRhbCBpbnB1dCBTdWJkZXZpY2UgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIGRhdGFbMF0gICAgICAgICAgICA6IDEgRW5hYmxlICBEaWdpdGFsIElucHV0IEludGVycnVwdCB8Cit8CQkJCQkJCQkgICAwIERpc2FibGUgRGlnaXRhbCBJbnB1dCBJbnRlcnJ1cHQgfAorfAkJCSAgZGF0YVsxXSAgICAgICAgICAgIDogMCBBRERJREFUQSBJbnRlcnJ1cHQgT1IgTE9HSUMJIHwKK3wJCQkJCQkJCSA6IDEgQURESURBVEEgSW50ZXJydXB0IEFORCBMT0dJQyAgICB8Cit8CQkJICBkYXRhWzJdCQkJIDogSW50ZXJydXB0IG1hc2sgZm9yIHRoZSBtb2RlIDEJIHwKK3wJCQkgIGRhdGFbM10JCQkgOiBJbnRlcnJ1cHQgbWFzayBmb3IgdGhlIG1vZGUgMgkgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMTU2NF9Db25maWdEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgZGlnaXRhbCBpbnB1dCBsb2dpYyAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaWYgKGRhdGFbMF0gPT0gQURESURBVEFfRU5BQkxFKSB7CisJCWRhdGFbMl0gPSBkYXRhWzJdIDw8IDQ7CisJCWRhdGFbM10gPSBkYXRhWzNdIDw8IDQ7CisJCW91dGwoZGF0YVsyXSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKworCQkJQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfTU9ERTEpOworCQlvdXRsKGRhdGFbM10sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQICsKKwkJCUFQQ0kxNTY0X0RJR0lUQUxfSVBfSU5URVJSVVBUX01PREUyKTsKKwkJaWYgKGRhdGFbMV0gPT0gQURESURBVEFfT1IpIHsKKwkJCW91dGwoMHg0LAorCQkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKworCQkJCUFQQ0kxNTY0X0RJR0lUQUxfSVBfSVJRKTsKKwkJfQkJLy8gaWYgIChkYXRhWzFdID09IEFERElEQVRBX09SKQorCQllbHNlIHsKKwkJCW91dGwoMHg2LAorCQkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKworCQkJCUFQQ0kxNTY0X0RJR0lUQUxfSVBfSVJRKTsKKwkJfQkJLy8gZWxzZSBpZiAgKGRhdGFbMV0gPT0gQURESURBVEFfT1IpCisJfQkJCS8vIGlmICAoZGF0YVswXSA9PSBBRERJREFUQV9FTkFCTEUpCisJZWxzZSB7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMSk7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMik7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSk7CisJfQkJCS8vIGVsc2UgaWYgIChkYXRhWzBdID09IEFERElEQVRBX0VOQUJMRSkKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1NjRfUmVhZDFEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgZGlnaXRhbCBpbnB1dCAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICAgIFVJTlQgdWlfQ2hhbm5lbCA6IENoYW5uZWwgbnVtYmVyIHRvIHJlYWQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTY0X1JlYWQxRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RtcFZhbHVlID0gMDsKKwlVSU5UIHVpX0NoYW5uZWw7CisKKwl1aV9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9IDMxKSB7CisJCXVpX1RtcFZhbHVlID0KKwkJCShVSU5UKSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCk7CisJCS8vICBzaW5jZSBvbmx5IDEgY2hhbm5lbCByZXFkICB0byBicmluZyBpdCB0byBsYXN0IGJpdCBpdCBpcyByb3RhdGVkCisJCS8vICA4ICsoY2hhbiAtIDEpIHRpbWVzIHRoZW4gQU5EZWQgd2l0aCAxIGZvciBsYXN0IGJpdC4KKwkJKmRhdGEgPSAodWlfVG1wVmFsdWUgPj4gdWlfQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vIGlmICAodWlfQ2hhbm5lbCA+PSAwICYmIHVpX0NoYW5uZWwgPD0zMSkKKwllbHNlIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgIk5vdCBhIHZhbGlkIGNoYW5uZWwgbnVtYmVyICEhISBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJfQkJCS8vZWxzZSBpZiAgKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9MzEpCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9SZWFkTW9yZURpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBSZXF1ZXN0ZWQgZGlnaXRhbCBpbnB1dHMgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIGJlIFJlYWQgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE1NjRfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfUG9ydFZhbHVlID0gZGF0YVswXTsKKwlVSU5UIHVpX01hc2sgPSAwOworCVVJTlQgdWlfTm9PZkNoYW5uZWxzOworCisJdWlfTm9PZkNoYW5uZWxzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkqZGF0YSA9IChVSU5UKSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCk7CisJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWxzKSB7CisJCWNhc2UgMjoKKwkJCXVpX01hc2sgPSAzOworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJdWlfTWFzayA9IDE1OworCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDQgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJdWlfTWFzayA9IDI1NTsKKwkJCSpkYXRhID0gKCpkYXRhID4+ICg4ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQkJYnJlYWs7CisJCWNhc2UgMTY6CisJCQl1aV9NYXNrID0gNjU1MzU7CisJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMTYgKiB1aV9Qb3J0VmFsdWUpKSAmIHVpX01hc2s7CisJCQlicmVhazsKKwkJY2FzZSAzMToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29tZWRpX2Vycm9yKGRldiwgIk5vdCBhIHZhbGlkIENoYW5uZWwgbnVtYmVyICEhIVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCQlicmVhazsKKwkJfQkJLy8gc3dpdGNoICAodWlfTm9PZkNoYW5uZWxzKQorCX0JCQkvLyBpZiAgKGRhdGFbMV09PTApCisJZWxzZSB7CisJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCSpkYXRhID0gdWlfSW50ZXJydXB0U3RhdHVzXzE1NjQ7CisJCX0JCS8vIGlmICAoZGF0YVsxXT09MSkKKwl9CQkJLy8gZWxzZSBpZiAgKGRhdGFbMV09PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9Db25maWdEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIERpZ2l0YWwgT3V0cHV0IFN1YmRldmljZS4gICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVsxXSAgICAgICAgICAgIDogMSBFbmFibGUgIFZDQyAgSW50ZXJydXB0ICB8Cit8CQkJCQkJCQkJCSAgIDAgRGlzYWJsZSBWQ0MgIEludGVycnVwdCAgfAorfAkJCQkJICBkYXRhWzJdICAgICAgICAgICAgOiAxIEVuYWJsZSAgQ0MgIEludGVycnVwdCAgIHwKK3wJCQkJCQkJCQkJICAgMCBEaXNhYmxlIENDICBJbnRlcnJ1cHQgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTY0X0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVMT05HIHVsX0NvbW1hbmQgPSAwOworCisJaWYgKChkYXRhWzBdICE9IDApICYmIChkYXRhWzBdICE9IDEpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiTm90IGEgdmFsaWQgRGF0YSAhISEgLERhdGEgc2hvdWxkIGJlIDEgb3IgMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvLyBpZiAgKChkYXRhWzBdIT0wKSAmJiAoZGF0YVswXSE9MSkpCisJaWYgKGRhdGFbMF0pIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9FTkFCTEU7CisJfQkJCS8vIGlmICAoZGF0YVswXSkKKwllbHNlIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9ESVNBQkxFOworCX0JCQkvLyBlbHNlIGlmICAoZGF0YVswXSkKKwlpZiAoZGF0YVsxXSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKwkJdWxfQ29tbWFuZCA9IHVsX0NvbW1hbmQgfCAweDE7CisJfQkJCS8vIGlmICAoZGF0YVsxXSA9PSBBRERJREFUQV9FTkFCTEUpCisJZWxzZSB7CisJCXVsX0NvbW1hbmQgPSB1bF9Db21tYW5kICYgMHhGRkZGRkZGRTsKKwl9CQkJLy8gZWxzZSBpZiAgKGRhdGFbMV0gPT0gQURESURBVEFfRU5BQkxFKQorCWlmIChkYXRhWzJdID09IEFERElEQVRBX0VOQUJMRSkgeworCQl1bF9Db21tYW5kID0gdWxfQ29tbWFuZCB8IDB4MjsKKwl9CQkJLy8gaWYgIChkYXRhWzJdID09IEFERElEQVRBX0VOQUJMRSkKKwllbHNlIHsKKwkJdWxfQ29tbWFuZCA9IHVsX0NvbW1hbmQgJiAweEZGRkZGRkZEOworCX0JCQkvLyBlbHNlIGlmICAoZGF0YVsyXSA9PSBBRERJREFUQV9FTkFCTEUpCisJb3V0bCh1bF9Db21tYW5kLAorCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJQVBDSTE1NjRfRElHSVRBTF9PUF9JTlRFUlJVUFQpOworCXVpX0ludGVycnVwdERhdGEgPQorCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUCArCisJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfSU5URVJSVVBUKTsKKwlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9Xcml0ZURpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlcyBwb3J0IHZhbHVlICBUbyB0aGUgc2VsZWN0ZWQgcG9ydCAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIFdyaXRlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE1NjRfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXAsIHVpX1RlbXAxOworCVVJTlQgdWlfTm9PZkNoYW5uZWw7CisKKwl1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmIChkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cykgeworCQl1aV9UZW1wID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfUlcpOworCX0JCQkvLyBpZiAgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwllbHNlIHsKKwkJdWlfVGVtcCA9IDA7CisJfQkJCS8vIGVsc2UgaWYgIChkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApCisJaWYgKGRhdGFbM10gPT0gMCkgeworCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIHwgdWlfVGVtcDsKKwkJCW91dGwoZGF0YVswXSwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCQlBUENJMTU2NF9ESUdJVEFMX09QX1JXKTsKKwkJfQkJLy8gaWYgIChkYXRhWzFdPT0wKQorCQllbHNlIHsKKwkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisJCQkJY2FzZSAyOgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICgyICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgODoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoOCAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxNjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMTYgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzE6CisJCQkJCWRhdGFbMF0gPSBkYXRhWzBdIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQkJCX0JLy8gc3dpdGNoICh1aV9Ob09mQ2hhbm5lbHMpCisJCQkJb3V0bChkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJCQlBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9SVyk7CisJCQl9CS8vIGlmICAoZGF0YVsxXT09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCX0JLy8gZWxzZSBpZiAgKGRhdGFbMV09PTEpCisJCX0JCS8vIGVsc2UgaWYgKGRhdGFbMV09PTApCisJfQkJCS8vaWYoZGF0YVszXT09MCkKKwllbHNlIHsKKwkJaWYgKGRhdGFbM10gPT0gMSkgeworCQkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MTsKKwkJCQl1aV9UZW1wMSA9IDE7CisJCQkJdWlfVGVtcDEgPSB1aV9UZW1wMSA8PCB1aV9Ob09mQ2hhbm5lbDsKKwkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCWRhdGFbMF0gPQorCQkJCQkoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgXgorCQkJCQkweGZmZmZmZmZmOworCQkJCWRhdGFbMF0gPSBkYXRhWzBdICYgdWlfVGVtcDsKKwkJCQlvdXRsKGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArCisJCQkJCUFQQ0kxNTY0X0RJR0lUQUxfT1AgKworCQkJCQlBUENJMTU2NF9ESUdJVEFMX09QX1JXKTsKKwkJCX0JLy8gaWYgIChkYXRhWzFdPT0wKQorCQkJZWxzZSB7CisJCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisJCQkJCWNhc2UgMjoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MzsKKwkJCQkJCXVpX1RlbXAxID0gMzsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAyICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZmZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDQ6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweGY7CisJCQkJCQl1aV9UZW1wMSA9IDE1OworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDQgKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoNCAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgODoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZmY7CisJCQkJCQl1aV9UZW1wMSA9IDI1NTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCA4ICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDggKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZmZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDE2OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmZmZmOworCQkJCQkJdWlfVGVtcDEgPSA2NTUzNTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAxNiAqCisJCQkJCQkJZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDE2ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAzMToKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCQkiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQkJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwkJCQkJb3V0bChkYXRhWzBdLAorCQkJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsKKwkJCQkJCUFQQ0kxNTY0X0RJR0lUQUxfT1AgKworCQkJCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9SVyk7CisJCQkJfQkvLyBpZiAgKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vIGVsc2UgaWYgIChkYXRhWzFdPT0xKQorCQkJfQkvLyBlbHNlIGlmICAoZGF0YVsxXT09MCkKKwkJfQkJLy8gaWYgIChkYXRhWzNdPT0xKTsKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIGVsc2UgaWYgKGRhdGFbM109PTEpCisJfQkJCS8vIGVsc2UgaWYgKGRhdGFbM109PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9SZWFkRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBvciBwb3J0ICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIHJlYWQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE1NjRfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVGVtcDsKKwlVSU5UIHVpX05vT2ZDaGFubmVsOworCisJdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1aV9UZW1wID0gZGF0YVswXTsKKwkqZGF0YSA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJQVBDSTE1NjRfRElHSVRBTF9PUF9SVyk7CisJaWYgKHVpX1RlbXAgPT0gMCkgeworCQkqZGF0YSA9ICgqZGF0YSA+PiB1aV9Ob09mQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vIGlmICAodWlfVGVtcD09MCkKKwllbHNlIHsKKwkJaWYgKHVpX1RlbXAgPT0gMSkgeworCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCQkJY2FzZSAyOgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICgyICogZGF0YVsxXSkpICYgMzsKKwkJCQlicmVhazsKKworCQkJY2FzZSA0OgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICg0ICogZGF0YVsxXSkpICYgMTU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgODoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoOCAqIGRhdGFbMV0pKSAmIDI1NTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxNjoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMTYgKiBkYXRhWzFdKSkgJiA2NTUzNTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAzMToKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJCQlicmVhazsKKwkJCX0JLy8gc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwkJfQkJLy8gaWYgICh1aV9UZW1wPT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkIFxuIik7CisJCX0JCS8vIGVsc2UgaWYgKHVpX1RlbXA9PTEpCisJfQkJCS8vIGVsc2UgaWYgICh1aV9UZW1wPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTE1NjRfQ29uZmlnVGltZXJDb3VudGVyV2F0Y2hkb2cgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBUaW1lciAsIENvdW50ZXIgb3IgV2F0Y2hkb2cgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbMF0gICAgICAgICAgICA6IDAgQ29uZmlndXJlIEFzIFRpbWVyICAgICAgfAorfAkJCQkJCQkJCQkgICAxIENvbmZpZ3VyZSBBcyBDb3VudGVyICAgIHwKK3wJCQkJCQkJCQkJICAgMiBDb25maWd1cmUgQXMgV2F0Y2hkb2cgICB8Cit8CQkJCQkgIGRhdGFbMV0gICAgICAgICAgICA6IDEgRW5hYmxlICBJbnRlcnJ1cHQgICAgICAgfAorfAkJCQkJCQkJCQkgICAwIERpc2FibGUgSW50ZXJydXB0IAkgICAgIHwKK3wJCQkJCSAgZGF0YVsyXSAgICAgICAgICAgIDogVGltZSBVbml0ICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbM10JCQkgOiBSZWxvYWQgVmFsdWUJCQkgICAgIHwKK3wJCQkJCSAgZGF0YVs0XSAgICAgICAgICAgIDogVGltZXIgTW9kZSAgICAgICAgICAgICAJIHwKK3wJCQkJCSAgZGF0YVs1XQkJCSA6IFRpbWVyIENvdW50ZXIgV2F0Y2hkb2cgTnVtYmVyfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs2XSAgICAgICAgICAgIDogIENvdW50ZXIgRGlyZWN0aW9uCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTE1NjRfQ29uZmlnVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVMT05HIHVsX0NvbW1hbmQxID0gMDsKKwlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisJaWYgKGRhdGFbMF0gPT0gQURESURBVEFfV0FUQ0hET0cpIHsKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBBRERJREFUQV9XQVRDSERPRzsKKworCQkvL0Rpc2FibGUgdGhlIHdhdGNoZG9nCisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCS8vTG9hZGluZyB0aGUgUmVsb2FkIHZhbHVlCisJCW91dGwoZGF0YVszXSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQkJQVBDSTE1NjRfVENXX1JFTE9BRF9WQUxVRSk7CisJfQkJCS8vIGlmICAoZGF0YVswXT09QURESURBVEFfV0FUQ0hET0cpCisJZWxzZSBpZiAoZGF0YVswXSA9PSBBRERJREFUQV9USU1FUikgeworCQkvL0ZpcnN0IFN0b3AgVGhlIFRpbWVyCisJCXVsX0NvbW1hbmQxID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCXVsX0NvbW1hbmQxID0gdWxfQ29tbWFuZDEgJiAweEZGRkZGOUZFVUw7CisJCW91dGwodWxfQ29tbWFuZDEsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsgQVBDSTE1NjRfVENXX1BST0cpOwkvL1N0b3AgVGhlIFRpbWVyCisKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBBRERJREFUQV9USU1FUjsKKwkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJb3V0bCgweDAyLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArIEFQQ0kxNTY0X1RDV19QUk9HKTsJLy9FbmFibGUgVElNRVIgaW50ICYgRElTQUJMRSBBTEwgVEhFIE9USEVSIGludCBTT1VSQ0VTCisJCQlvdXRsKDB4MCwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQICsKKwkJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSk7CisJCQlvdXRsKDB4MCwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCQlBUENJMTU2NF9ESUdJVEFMX09QX0lSUSk7CisJCQlvdXRsKDB4MCwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQkJCUFQQ0kxNTY0X1RDV19JUlEpOworCQkJb3V0bCgweDAsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjEgKworCQkJCUFQQ0kxNTY0X1RDV19JUlEpOworCQkJb3V0bCgweDAsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjIgKworCQkJCUFQQ0kxNTY0X1RDV19JUlEpOworCQkJb3V0bCgweDAsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjMgKworCQkJCUFQQ0kxNTY0X1RDV19JUlEpOworCQkJb3V0bCgweDAsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjQgKworCQkJCUFQQ0kxNTY0X1RDV19JUlEpOworCQl9CQkvLyBpZiAgKGRhdGFbMV09PTEpCisJCWVsc2UgeworCQkJb3V0bCgweDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsgQVBDSTE1NjRfVENXX1BST0cpOwkvL2Rpc2FibGUgVGltZXIgaW50ZXJydXB0CisJCX0JCS8vIGVsc2UgaWYgIChkYXRhWzFdPT0xKQorCisJCS8vIExvYWRpbmcgVGltZWJhc2UKKworCQlvdXRsKGRhdGFbMl0sCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfVElNRUJBU0UpOworCisJCS8vTG9hZGluZyB0aGUgUmVsb2FkIHZhbHVlCisJCW91dGwoZGF0YVszXSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsKKwkJCUFQQ0kxNTY0X1RDV19SRUxPQURfVkFMVUUpOworCisJCXVsX0NvbW1hbmQxID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCXVsX0NvbW1hbmQxID0KKwkJCSh1bF9Db21tYW5kMSAmIDB4RkZGNzE5RTJVTCkgfCAyVUwgPDwgMTNVTCB8IDB4MTBVTDsKKwkJb3V0bCh1bF9Db21tYW5kMSwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKyBBUENJMTU2NF9UQ1dfUFJPRyk7CS8vbW9kZSAyCisJfQkJCS8vIGVsc2UgaWYgIChkYXRhWzBdPT1BRERJREFUQV9USU1FUikKKwllbHNlIGlmIChkYXRhWzBdID09IEFERElEQVRBX0NPVU5URVIpIHsKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBBRERJREFUQV9DT1VOVEVSOworCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9IGRhdGFbNV07CisKKwkJLy9GaXJzdCBTdG9wIFRoZSBDb3VudGVyCisJCXVsX0NvbW1hbmQxID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGRhdGFbNV0gLSAxKSAqIDB4MjApICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJdWxfQ29tbWFuZDEgPSB1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkVVTDsKKwkJb3V0bCh1bF9Db21tYW5kMSwgZGV2cHJpdi0+aW9iYXNlICsgKChkYXRhWzVdIC0gMSkgKiAweDIwKSArIEFQQ0kxNTY0X1RDV19QUk9HKTsJLy9TdG9wIFRoZSBUaW1lcgorCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBTZXQgdGhlIHJlbG9hZCB2YWx1ZSAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0bChkYXRhWzNdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgKChkYXRhWzVdIC0gMSkgKiAweDIwKSArCisJCQlBUENJMTU2NF9UQ1dfUkVMT0FEX1ZBTFVFKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2V0IHRoZSBtb2RlIDogICAgICAgICAgICAgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSBoYXJkd2FyZSAgICAgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSBjb3VudGVyIG1vZGUgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSB3YXJuaW5nICAgICAgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSByZXNldCAgICAgICAgKi8KKwkJLyogLSBEaXNhYmxlIHRoZSB0aW1lciBtb2RlICAgKi8KKwkJLyogLSBFbmFibGUgdGhlIGNvdW50ZXIgbW9kZSAgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXVsX0NvbW1hbmQxID0KKwkJCSh1bF9Db21tYW5kMSAmIDB4RkZGQzE5RTJVTCkgfCAweDgwMDAwVUwgfAorCQkJKFVMT05HKSAoKFVMT05HKSBkYXRhWzRdIDw8IDE2VUwpOworCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgKChkYXRhWzVdIC0gMSkgKiAweDIwKSArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisKKwkJLy8gRW5hYmxlIG9yIERpc2FibGUgSW50ZXJydXB0CisJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRCkgfCAoZGF0YVsxXSA8PCAxKTsKKwkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCWRldnByaXYtPmlvYmFzZSArICgoZGF0YVs1XSAtIDEpICogMHgyMCkgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFNldCB0aGUgVXAvRG93biBzZWxlY3Rpb24gKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWxfQ29tbWFuZDEgPSAodWxfQ29tbWFuZDEgJiAweEZGRkJGOUZGVUwpIHwgKGRhdGFbNl0gPDwgMTgpOworCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgKChkYXRhWzVdIC0gMSkgKiAweDIwKSArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJfQkJCS8vIGVsc2UgaWYgIChkYXRhWzBdPT1BRERJREFUQV9DT1VOVEVSKQorCWVsc2UgeworCQlwcmludGsoIiBJbnZhbGlkIHN1YmRldmljZS4iKTsKKwl9CQkJLy8gZWxzZSBpZiAgKGRhdGFbMF09PUFERElEQVRBX1dBVENIRE9HKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9TdGFydFN0b3BXcml0ZVRpbWVyQ291bnRlcldhdGNoZG9nICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFN0YXJ0IC8gU3RvcCBUaGUgU2VsZWN0ZWQgVGltZXIgLCBDb3VudGVyIG9yIFdhdGNoZG9nICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVswXSAgICAgICAgICAgIDogMCBUaW1lciAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCSAgIDEgQ291bnRlciAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCQkgICAyIFdhdGNoZG9nICAgICAgICAJCSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CQkJCQkgICAgICAgICBkYXRhWzFdICAgICAgICAgICAgOiAxIFN0YXJ0ICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkJICAgMCBTdG9wICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIFRyaWdnZXIgICAgICAgICAgICAgCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsZWFyIChPbmx5IENvdW50ZXIpICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMTU2NF9TdGFydFN0b3BXcml0ZVRpbWVyQ291bnRlcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVTE9ORyB1bF9Db21tYW5kMSA9IDA7CisJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1dBVENIRE9HKSB7CisJCXN3aXRjaCAoZGF0YVsxXSkgeworCQljYXNlIDA6CS8vc3RvcCB0aGUgd2F0Y2hkb2cKKwkJCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QX1dBVENIRE9HICsgQVBDSTE1NjRfVENXX1BST0cpOwkvL2Rpc2FibGUgdGhlIHdhdGNoZG9nCisJCQlicmVhazsKKwkJY2FzZSAxOgkvL3N0YXJ0IHRoZSB3YXRjaGRvZworCQkJb3V0bCgweDAwMDEsCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsKKwkJCQlBUENJMTU2NF9ESUdJVEFMX09QX1dBVENIRE9HICsKKwkJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisJCQlicmVhazsKKwkJY2FzZSAyOgkvL1NvZnR3YXJlIHRyaWdnZXIKKwkJCW91dGwoMHgwMjAxLAorCQkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArCisJCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyArCisJCQkJQVBDSTE1NjRfVENXX1BST0cpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0JCS8vIHN3aXRjaCAoZGF0YVsxXSkKKwl9CQkJLy8gaWYgIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZT09QURESURBVEFfV0FUQ0hET0cpCisJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1RJTUVSKSB7CisJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCXVsX0NvbW1hbmQxID0KKwkJCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRlVMKSB8IDB4MVVMOworCisJCQkvL0VuYWJsZSB0aGUgVGltZXIKKwkJCW91dGwodWxfQ29tbWFuZDEsCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJfQkJLy8gaWYgIChkYXRhWzFdPT0xKQorCQllbHNlIGlmIChkYXRhWzFdID09IDApIHsKKwkJCS8vU3RvcCBUaGUgVGltZXIKKworCQkJdWxfQ29tbWFuZDEgPQorCQkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQkJQVBDSTE1NjRfVENXX1BST0cpOworCQkJdWxfQ29tbWFuZDEgPSB1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkVVTDsKKwkJCW91dGwodWxfQ29tbWFuZDEsCisJCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfVElNRVIgKworCQkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJfQkJLy8gZWxzZSBpZihkYXRhWzFdPT0wKQorCX0JCQkvLyBpZiAgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9USU1FUikKKwlpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPT0gQURESURBVEFfQ09VTlRFUikgeworCQl1bF9Db21tYW5kMSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgKChkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciAtCisJCQkJCTEpICogMHgyMCkgKyBBUENJMTU2NF9UQ1dfUFJPRyk7CisJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCS8vU3RhcnQgdGhlIENvdW50ZXIgc3ViZGV2aWNlCisJCQl1bF9Db21tYW5kMSA9ICh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkZVTCkgfCAweDFVTDsKKwkJfQkJLy8gaWYgIChkYXRhWzFdID09IDEpCisJCWVsc2UgaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJLy8gU3RvcHMgdGhlIENvdW50ZXIgc3ViZGV2aWNlCisJCQl1bF9Db21tYW5kMSA9IDA7CisKKwkJfQkJLy8gZWxzZSBpZiAgKGRhdGFbMV0gPT0gMCkKKwkJZWxzZSBpZiAoZGF0YVsxXSA9PSAyKSB7CisJCQkvLyBDbGVhcnMgdGhlIENvdW50ZXIgc3ViZGV2aWNlCisJCQl1bF9Db21tYW5kMSA9ICh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkZVTCkgfCAweDQwMDsKKwkJfQkJLy8gZWxzZSBpZiAgKGRhdGFbMV0gPT0gMykKKwkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCWRldnByaXYtPmlvYmFzZSArICgoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgLQorCQkJCQkxKSAqIDB4MjApICsgQVBDSTE1NjRfVENXX1BST0cpOworCX0JCQkvLyBpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGU9PUFERElEQVRBX0NPVU5URVIpCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMTU2NF9SZWFkVGltZXJDb3VudGVyV2F0Y2hkb2cgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgVGhlIFNlbGVjdGVkIFRpbWVyICwgQ291bnRlciBvciBXYXRjaGRvZyAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kxNTY0X1JlYWRUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUxPTkcgdWxfQ29tbWFuZDEgPSAwOworCisJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1dBVENIRE9HKSB7CisJCS8vIFN0b3JlcyB0aGUgc3RhdHVzIG9mIHRoZSBXYXRjaGRvZworCQlkYXRhWzBdID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyArCisJCQlBUENJMTU2NF9UQ1dfVFJJR19TVEFUVVMpICYgMHgxOworCQlkYXRhWzFdID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyk7CisJfQkJCS8vIGlmICAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGU9PUFERElEQVRBX1dBVENIRE9HKQorCWVsc2UgaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1RJTUVSKSB7CisJCS8vIFN0b3JlcyB0aGUgc3RhdHVzIG9mIHRoZSBUaW1lcgorCQlkYXRhWzBdID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfVFJJR19TVEFUVVMpICYgMHgxOworCisJCS8vIFN0b3JlcyB0aGUgQWN0dWFsIHZhbHVlIG9mIHRoZSBUaW1lcgorCQlkYXRhWzFdID0gaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSKTsKKwl9CQkJLy8gZWxzZSBpZiAgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9USU1FUikKKwllbHNlIGlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9DT1VOVEVSKSB7CisJCS8vIFJlYWQgdGhlIENvdW50ZXIgQWN0dWFsIFZhbHVlLgorCQlkYXRhWzBdID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyAoKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyIC0KKwkJCQkJMSkgKiAweDIwKSArCisJCQlBUENJMTU2NF9UQ1dfU1lOQ19FTkFCTEVESVNBQkxFKTsKKwkJdWxfQ29tbWFuZDEgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArICgoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgLQorCQkJCQkxKSAqIDB4MjApICsgQVBDSTE1NjRfVENXX1RSSUdfU1RBVFVTKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIHNvZnR3YXJlIHRyaWdnZXIgc3RhdHVzICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWRhdGFbMV0gPSAoQllURSkgKCh1bF9Db21tYW5kMSA+PiAxKSAmIDEpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgaGFyZHdhcmUgdHJpZ2dlciBzdGF0dXMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJZGF0YVsyXSA9IChCWVRFKSAoKHVsX0NvbW1hbmQxID4+IDIpICYgMSk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgc29mdHdhcmUgY2xlYXIgc3RhdHVzICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlkYXRhWzNdID0gKEJZVEUpICgodWxfQ29tbWFuZDEgPj4gMykgJiAxKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBvdmVyZmxvdyBzdGF0dXMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWRhdGFbNF0gPSAoQllURSkgKCh1bF9Db21tYW5kMSA+PiAwKSAmIDEpOworCX0JCQkvLyBlbHNlICBpZiAgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9DT1VOVEVSKQorCWVsc2UgaWYgKChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSAhPSBBRERJREFUQV9USU1FUikKKwkJJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlICE9IEFERElEQVRBX1dBVENIRE9HKQorCQkmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgIT0gQURESURBVEFfQ09VTlRFUikpIHsKKwkJcHJpbnRrKCJcbiBJbnZhbGlkIFN1YmRldmljZSAhISFcbiIpOworCX0JCQkvLyBlbHNlIGlmICgoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUhPUFERElEQVRBX1RJTUVSKSAmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUhPUFERElEQVRBX1dBVENIRE9HKSYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSE9QURESURBVEFfQ09VTlRFUikpCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiAgaW50IGlfQVBDSTE1NjRfUmVhZEludGVycnVwdFN0YXR1cyAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6UmVhZHMgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTU2NF9SZWFkSW50ZXJydXB0U3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwkqZGF0YSA9IHVpX1R5cGU7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBzdGF0aWMgdm9pZCB2X0FQQ0kxNTY0X0ludGVycnVwdAkJCQkJICAgICB8Cit8CQkJCQkgIChpbnQgaXJxICwgdm9pZCAqZCkgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIGludGVycnVwdGlibGUgZGlnaXRhbCBpbnB1dHMgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogaW50IGlycSAgICAgICAgICAgICAgICAgOiBpcnEgbnVtYmVyICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB2b2lkICpkICAgICAgICAgICAgICAgICA6IHZvaWQgcG9pbnRlciAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK3N0YXRpYyB2b2lkIHZfQVBDSTE1NjRfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJVUlOVCB1aV9ETywgdWlfREk7CisJVUlOVCB1aV9UaW1lcjsKKwlVSU5UIHVpX0MxLCB1aV9DMiwgdWlfQzMsIHVpX0M0OworCVVMT05HIHVsX0NvbW1hbmQyID0gMDsKKwl1aV9ESSA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQICsKKwkJQVBDSTE1NjRfRElHSVRBTF9JUF9JUlEpICYgMHgwMTsKKwl1aV9ETyA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJQVBDSTE1NjRfRElHSVRBTF9PUF9JUlEpICYgMHgwMTsKKwl1aV9UaW1lciA9CisJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCUFQQ0kxNTY0X1RDV19JUlEpICYgMHgwMTsKKwl1aV9DMSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMSArCisJCUFQQ0kxNTY0X1RDV19JUlEpICYgMHgxOworCXVpX0MyID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIyICsKKwkJQVBDSTE1NjRfVENXX0lSUSkgJiAweDE7CisJdWlfQzMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjMgKworCQlBUENJMTU2NF9UQ1dfSVJRKSAmIDB4MTsKKwl1aV9DNCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSNCArCisJCUFQQ0kxNTY0X1RDV19JUlEpICYgMHgxOworCWlmICh1aV9ESSA9PSAwICYmIHVpX0RPID09IDAgJiYgdWlfVGltZXIgPT0gMCAmJiB1aV9DMSA9PSAwCisJCSYmIHVpX0MyID09IDAgJiYgdWlfQzMgPT0gMCAmJiB1aV9DNCA9PSAwKSB7CisJCXByaW50aygiXG5JbnRlcnJ1cHQgZnJvbSB1bmtub3duIHNvdXJjZVxuIik7CisJfQkJCS8vIGlmKHVpX0RJPT0wICYmIHVpX0RPPT0wICYmIHVpX1RpbWVyPT0wICYmIHVpX0MxPT0wICYmIHVpX0MyPT0wICYmIHVpX0MzPT0wICYmIHVpX0M0PT0wKQorCisJaWYgKHVpX0RJID09IDEpIHsKKwkJdWlfREkgPSBpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSk7CisJCW91dGwoMHgwLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUCArCisJCQlBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSk7CisJCXVpX0ludGVycnVwdFN0YXR1c18xNTY0ID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQICsKKwkJCUFQQ0kxNTY0X0RJR0lUQUxfSVBfSU5URVJSVVBUX1NUQVRVUyk7CisJCXVpX0ludGVycnVwdFN0YXR1c18xNTY0ID0gdWlfSW50ZXJydXB0U3RhdHVzXzE1NjQgJiAwWDAwMEZGRkYwOworCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJCW91dGwodWlfREksIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfSVAgKyBBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSk7CS8vZW5hYmxlIHRoZSBpbnRlcnJ1cHQKKwkJcmV0dXJuOworCX0KKworCWlmICh1aV9ETyA9PSAxKSB7CisJCS8vIENoZWNrIGZvciBEaWdpdGFsIE91dHB1dCBpbnRlcnJ1cHQgVHlwZSAtIDE6IFZjYyBpbnRlcnJ1cHQgMjogQ0MgaW50ZXJydXB0LgorCQl1aV9UeXBlID0KKwkJCWlubChkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QICsKKwkJCUFQQ0kxNTY0X0RJR0lUQUxfT1BfSU5URVJSVVBUX1NUQVRVUykgJiAweDM7CisJCS8vRGlzYWJsZSB0aGUgIEludGVycnVwdAorCQlvdXRsKDB4MCwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X0RJR0lUQUxfT1AgKworCQkJQVBDSTE1NjRfRElHSVRBTF9PUF9JTlRFUlJVUFQpOworCisJCS8vU2VuZHMgc2lnbmFsIHRvIHVzZXIgc3BhY2UKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCX0JCQkvLyBpZiAgKHVpX0RPKQorCisJaWYgKCh1aV9UaW1lciA9PSAxKSAmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPSBBRERJREFUQV9USU1FUikpIHsKKwkJLy8gRGlzYWJsZSBUaW1lciBJbnRlcnJ1cHQKKwkJdWxfQ29tbWFuZDIgPQorCQkJaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUiArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisKKwkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCQkvLyBFbmFibGUgVGltZXIgSW50ZXJydXB0CisKKwkJb3V0bCh1bF9Db21tYW5kMiwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwl9CQkJLy8gaWYgICgodWlfVGltZXIgPT0gMSkgJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID1BRERJREFUQV9USU1FUikpCisKKwlpZiAoKHVpX0MxID09IDEpICYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IEFERElEQVRBX0NPVU5URVIpKSB7CisJCS8vIERpc2FibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJdWxfQ29tbWFuZDIgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIxICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMSArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisKKwkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCQkvLyBFbmFibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJb3V0bCh1bF9Db21tYW5kMiwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIxICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwl9CQkJLy8gaWYgICgodWlfQzEgPT0gMSkgJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0gQURESURBVEFfQ09VTlRFUikpCisKKwlpZiAoKHVpX0MyID09IDEpICYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IEFERElEQVRBX0NPVU5URVIpKSB7CisJCS8vIERpc2FibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJdWxfQ29tbWFuZDIgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIyICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMiArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisKKwkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCQkvLyBFbmFibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJb3V0bCh1bF9Db21tYW5kMiwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIyICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwl9CQkJLy8gaWYgICgodWlfQzIgPT0gMSkgJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID1BRERJREFUQV9DT1VOVEVSKSkKKworCWlmICgodWlfQzMgPT0gMSkgJiYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0gQURESURBVEFfQ09VTlRFUikpIHsKKwkJLy8gRGlzYWJsZSBDb3VudGVyIEludGVycnVwdAorCQl1bF9Db21tYW5kMiA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjMgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCQlvdXRsKDB4MCwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIzICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKworCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOworCisJCS8vIEVuYWJsZSBDb3VudGVyIEludGVycnVwdAorCQlvdXRsKHVsX0NvbW1hbmQyLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjMgKworCQkJQVBDSTE1NjRfVENXX1BST0cpOworCX0JCQkvLyBpZiAoKHVpX0MzID09IDEpICYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9QURESURBVEFfQ09VTlRFUikpCisKKwlpZiAoKHVpX0M0ID09IDEpICYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IEFERElEQVRBX0NPVU5URVIpKSB7CisJCS8vIERpc2FibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJdWxfQ29tbWFuZDIgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVI0ICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSNCArCisJCQlBUENJMTU2NF9UQ1dfUFJPRyk7CisKKwkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKworCQkvLyBFbmFibGUgQ291bnRlciBJbnRlcnJ1cHQKKwkJb3V0bCh1bF9Db21tYW5kMiwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVI0ICsKKwkJCUFQQ0kxNTY0X1RDV19QUk9HKTsKKwl9CQkJLy8gaWYgKCh1aV9DNCA9PSAxKSAmJiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPUFERElEQVRBX0NPVU5URVIpKQorCXJldHVybjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kxNTY0X1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOnJlc2V0cyBhbGwgdGhlIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMTU2NF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUF9JUlEpOwkvL2Rpc2FibGUgdGhlIGludGVycnVwdHMKKwlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfU1RBVFVTKTsJLy9SZXNldCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgorCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMSk7CS8vRGlzYWJsZSB0aGUgYW5kL29yIGludGVycnVwdAorCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMik7CisJZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIgPSAwOworCXVpX1R5cGUgPSAwOworCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QKTsJLy9SZXNldHMgdGhlIG91dHB1dCBjaGFubmVscworCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9ESUdJVEFMX09QX0lOVEVSUlVQVCk7CS8vRGlzYWJsZXMgdGhlIGludGVycnVwdC4KKwlvdXRsKDB4MCwKKwkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyArCisJCUFQQ0kxNTY0X1RDV19SRUxPQURfVkFMVUUpOworCW91dGwoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBUENJMTU2NF9USU1FUik7CisJb3V0bCgweDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kxNTY0X1RJTUVSICsgQVBDSTE1NjRfVENXX1BST0cpOworCisJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVIxICsgQVBDSTE1NjRfVENXX1BST0cpOworCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMTU2NF9DT1VOVEVSMiArIEFQQ0kxNTY0X1RDV19QUk9HKTsKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTE1NjRfQ09VTlRFUjMgKyBBUENJMTU2NF9UQ1dfUFJPRyk7CisJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kxNTY0X0NPVU5URVI0ICsgQVBDSTE1NjRfVENXX1BST0cpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTU2NC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTU2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYzQ2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTY0LmgKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qKioqKioqKiogICAgICBEZWZpbml0aW9ucyBmb3IgQVBDSS0xNTY0IGNhcmQgICoqKioqLworCisjZGVmaW5lIEFQQ0kxNTY0X0JPQVJEX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAweDE1QjgKKyNkZWZpbmUgQVBDSTE1NjRfQUREUkVTU19SQU5HRSAgICAgICAgICAgICAgICAgIDEyOAorCisvL0RJR0lUQUwgSU5QVVQtT1VUUFVUIERFRklORQorLy8gSW5wdXQgZGVmaW5lcworI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX0lQICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMSAgICAgNAorI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9NT0RFMiAgICAgOAorI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX0lQX0lSUSAgICAgICAgICAgICAgICAgMTYKKworLy8gT3V0cHV0IGRlZmluZXMKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9PUCAgICAgICAgICAgICAgICAgCTB4MTgKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9PUF9SVyAgICAgICAgICAgICAgIAkwCisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1BfSU5URVJSVVBUICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1BfSVJRICAgICAgICAgICAgICAgICAxMgorCisvL0RpZ2l0YWwgSW5wdXQgSVJRIEZ1bmN0aW9uIFNlbGVjdGlvbgorI2RlZmluZSBBRERJREFUQV9PUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRERJREFUQV9BTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvL0RpZ2l0YWwgSW5wdXQgSW50ZXJydXB0IFN0YXR1cworI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX0lQX0lOVEVSUlVQVF9TVEFUVVMgICAgMTIKKworLy9EaWdpdGFsIE91dHB1dCBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1BfSU5URVJSVVBUX1NUQVRVUyAgICA4CisKKy8vRGlnaXRhbCBJbnB1dCBJbnRlcnJ1cHQgRW5hYmxlIERpc2FibGUuCisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfSVBfSU5URVJSVVBUX0VOQUJMRSAgICAweDQKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9JUF9JTlRFUlJVUFRfRElTQUJMRSAgIDB4RkZGRkZGRkIKKworLy9EaWdpdGFsIE91dHB1dCBJbnRlcnJ1cHQgRW5hYmxlIERpc2FibGUuCisjZGVmaW5lIEFQQ0kxNTY0X0RJR0lUQUxfT1BfVkNDX0lOVEVSUlVQVF9FTkFCTEUgICAweDEKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9PUF9WQ0NfSU5URVJSVVBUX0RJU0FCTEUgIDB4RkZGRkZGRkUKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9PUF9DQ19JTlRFUlJVUFRfRU5BQkxFICAgIDB4MgorI2RlZmluZSBBUENJMTU2NF9ESUdJVEFMX09QX0NDX0lOVEVSUlVQVF9ESVNBQkxFICAgMHhGRkZGRkZGRAorCisvL0FERElEQVRBIEVuYWJsZSBEaXNhYmxlCisKKyNkZWZpbmUgQURESURBVEFfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURESURBVEFfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8gVElNRVIgQ09VTlRFUiBXQVRDSERPRyBERUZJTkVTCisKKyNkZWZpbmUgQURESURBVEFfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQURESURBVEFfQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURESURBVEFfV0FUQ0hET0cgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVBDSTE1NjRfRElHSVRBTF9PUF9XQVRDSERPRyAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgQVBDSTE1NjRfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDgKKyNkZWZpbmUgQVBDSTE1NjRfQ09VTlRFUjEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAorI2RlZmluZSBBUENJMTU2NF9DT1VOVEVSMiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBBUENJMTU2NF9DT1VOVEVSMyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBBUENJMTU2NF9DT1VOVEVSNCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2MAorI2RlZmluZSBBUENJMTU2NF9UQ1dfU1lOQ19FTkFCTEVESVNBQkxFICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMTU2NF9UQ1dfUkVMT0FEX1ZBTFVFICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBUENJMTU2NF9UQ1dfVElNRUJBU0UgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBUENJMTU2NF9UQ1dfUFJPRyAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBDSTE1NjRfVENXX1RSSUdfU1RBVFVTICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFQQ0kxNTY0X1RDV19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBBUENJMTU2NF9UQ1dfV0FSTl9USU1FVkFMICAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQVBDSTE1NjRfVENXX1dBUk5fVElNRUJBU0UgICAgICAgICAgICAgICAgIDI4CisKKy8vIEhhcmR3YXJlIExheWVyICBmdW5jdGlvbnMgZm9yIEFwY2kxNTY0CisKKy8vREkKKy8vIGZvciBkaSByZWFkCitJTlQgaV9BUENJMTU2NF9Db25maWdEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMTU2NF9SZWFkMURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTE1NjRfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy9ETworaW50IGlfQVBDSTE1NjRfQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMTU2NF9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMTU2NF9SZWFkRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTE1NjRfUmVhZEludGVycnVwdFN0YXR1cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vIFRJTUVSCisvLyB0aW1lciB2YWx1ZSBpcyBwYXNzZWQgYXMgdSBzZWNvbmRzCitJTlQgaV9BUENJMTU2NF9Db25maWdUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kxNTY0X1N0YXJ0U3RvcFdyaXRlVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkJCSAgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kxNTY0X1JlYWRUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvLyBJTlRFUlJVUFQKK3N0YXRpYyB2b2lkIHZfQVBDSTE1NjRfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpOworCisvLyBSRVNFVAorSU5UIGlfQVBDSTE1NjRfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNnh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNnh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2ZDYzNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE2eHguYwpAQCAtMCwwICsxLDc4MCBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUEkgQVBDSTE2NDggICAgfCBDb21waWxlciA6IGdjYyAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IFRUTC5DICAgICAgICAgICB8IFZlcnNpb24gIDogMi45NiAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBTLiBXZWJlciAgICAgfCBEYXRlICAgICA6ICAyNS8wNS8yMDA1ICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBBUENJLTE2WFggVFRMIEkvTyBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfDI1LjA1LjIwMDV8IFMuV2ViZXIgICB8IENyZWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSAiaHdkcnZfYXBjaTE2eHguaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgIGlfQVBDSTE2WFhfSW5zbkNvbmZpZ0luaXRUVExJTyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgQVBDSTE2WFhfVFRMX0lOSVQgKHVzaW5nIGRlZmF1bHRzKSAgIDogICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICBDb25maWd1cmUgdGhlIFRUTCBJL08gb3BlcmF0aW5nIG1vZGUgZnJvbSBhbGwgcG9ydHMgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgIFlvdSBtdXN0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBiZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgZm9yIHlvdSBjYWxsIGFueSBvdGhlciBmdW5jdGlvbiB3aXRjaCBhY2Nlc3Mgb2YgVFRMLiAgICAgICAgfAorfCAgICAgICAgICAgICAgICBBUENJMTZYWF9UVExfSU5JVERJUkVDVElPTih1c2VyIGlucHV0cyBmb3IgZGlyZWN0aW9uKSAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBiX0luaXRUeXBlICAgID0gKEJZVEUpIGRhdGFbMF07ICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGJfUG9ydDBNb2RlICAgPSAoQllURSkgZGF0YVsxXTsgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYl9Qb3J0MU1vZGUgICA9IChCWVRFKSBkYXRhWzJdOyAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX1BvcnQyTW9kZSAgID0gKEJZVEUpIGRhdGFbM107ICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGJfUG9ydDNNb2RlICAgPSAoQllURSkgZGF0YVs0XTsgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLi4uLi4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOj4wOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFBvcnQgMCBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMjogUG9ydCAxIG1vZGUgc2VsZWN0aW9uIGlzIHdyb25nICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zOiBQb3J0IDIgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQ6IFBvcnQgMyBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtWDogUG9ydCBYLTEgbW9kZSBzZWxlY3Rpb24gaXMgd3JvbmcgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMCA6IENvbmZpZyBjb21tYW5kIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE2WFhfSW5zbkNvbmZpZ0luaXRUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9Db21tYW5kID0gMDsKKwlCWVRFIGJfQ3B0ID0gMDsKKwlCWVRFIGJfTnVtYmVyT2ZQb3J0ID0KKwkJKEJZVEUpIChkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyVFRMQ2hhbm5lbCAvIDgpOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaW5zbi0+biA+PSAxKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgY29tbWFuZCAqLworCQkvKiAqKioqKioqKioqKioqKioqICovCisKKwkJYl9Db21tYW5kID0gKEJZVEUpIGRhdGFbMF07CisKKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNvbW1hbmQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX0lOSVQpIHx8CisJCQkoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9JTklURElSRUNUSU9OKSB8fAorCQkJKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfT1VUUFVUTUVNT1JZKSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBpbml0aWFsaXNhdGlvbiBidWZmZXIgc2l6ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9JTklURElSRUNUSU9OKQorCQkJCSYmICgoQllURSkgKGluc24tPm4gLSAxKSAhPSBiX051bWJlck9mUG9ydCkpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqLworCQkJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCQkgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCQlwcmludGsoIlxuQnVmZmVyIHNpemUgZXJyb3IiKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwkJCX0KKworCQkJaWYgKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX09VVFBVVE1FTU9SWSkKKwkJCQkmJiAoKEJZVEUpIChpbnNuLT5uKSAhPSAyKSkgeworCQkgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRGF0YSBzaXplIGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXByaW50aygiXG5CdWZmZXIgc2l6ZSBlcnJvciIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb25maWcgY29tbWFuZCBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXByaW50aygiXG5Db21tYW5kIHNlbGVjdGlvbiBlcnJvciIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDA7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIlxuQnVmZmVyIHNpemUgZXJyb3IiKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgbm8gZXJyb3Igb2NjdXIgYW5kIEFQQ0kxNlhYX1RUTF9JTklURElSRUNUSU9OIGNvbW1hbmQgc2VsZWN0ZWQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoKGlfUmV0dXJuVmFsdWUgPj0gMCkgJiYgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfSU5JVERJUkVDVElPTikpIHsKKwkJbWVtc2V0KGRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uLCAwLAorCQkJc2l6ZW9mKGRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uKSk7CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgcG9ydCBkaXJlY3Rpb24gc2VsZWN0aW9uICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJZm9yIChiX0NwdCA9IDE7CisJCQkoYl9DcHQgPD0gYl9OdW1iZXJPZlBvcnQpICYmIChpX1JldHVyblZhbHVlID49IDApOworCQkJYl9DcHQrKykgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgZGlyZWN0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoZGF0YVtiX0NwdF0gIT0gMCkgJiYgKGRhdGFbYl9DcHRdICE9IDB4RkYpKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFBvcnQgZGlyZWN0aW9uIGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJcHJpbnRrKCJcblBvcnQgJWQgZGlyZWN0aW9uIHNlbGVjdGlvbiBlcnJvciIsCisJCQkJCShJTlQpIGJfQ3B0KTsKKwkJCQlpX1JldHVyblZhbHVlID0gLShJTlQpIGJfQ3B0OworCQkJfQorCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2F2ZSB0aGUgY29uZmlndXJhdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bKGJfQ3B0IC0gMSkgLyA0XSA9CisJCQkJZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bKGJfQ3B0IC0KKwkJCQkJMSkgLyA0XSB8IChkYXRhW2JfQ3B0XSA8PCAoOCAqICgoYl9DcHQgLQorCQkJCQkJCTEpICUgNCkpKTsKKwkJfQorCX0KKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIG5vIGVycm9yIG9jY3VyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBUVEwgcG9ydCBpbml0aWxhaXNhdGlvbiAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfSU5JVCkKKwkJCXx8IChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX0lOSVRESVJFQ1RJT04pKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNldCBhbGwgcG9ydCBjb25maWd1cmF0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJZm9yIChiX0NwdCA9IDA7IGJfQ3B0IDw9IGJfTnVtYmVyT2ZQb3J0OyBiX0NwdCsrKSB7CisJCQkJaWYgKChiX0NwdCAlIDQpID09IDApIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCW91dGwoZGV2cHJpdi0+CisJCQkJCQl1bF9UVExQb3J0Q29uZmlndXJhdGlvbltiX0NwdCAvCisJCQkJCQkJNF0sCisJCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyAzMiArIGJfQ3B0KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgb3V0cHV0IG1lbW9yeSBpbml0aWFsaXNhdGlvbiBjb21tYW5kICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX09VVFBVVE1FTU9SWSkgeworCQlpZiAoZGF0YVsxXSkgeworCQkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9FTkFCTEU7CisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IEFERElEQVRBX0RJU0FCTEU7CisJCX0KKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgICAgaV9BUENJMTZYWF9JbnNuQml0c1JlYWRUVExJTyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBzdGF0dXMgZnJvbSBzZWxlY3RlZCBUVEwgZGlnaXRhbCBpbnB1dCAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX0lucHV0Q2hhbm5lbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBzdGF0dXMgZnJvbSBkaWdpdGFsIGlucHV0IHBvcnQgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX1NlbGVjdGVkUG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgQVBDSTE2WFhfVFRMX1JFQURDSEFOTkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICBiX1NlbGVjdGVkUG9ydD0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOyAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIGJfSW5wdXRDaGFubmVsPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgYl9SZWFkVHlwZQkgID0gKEJZVEUpIGRhdGFbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIEFQQ0kxNlhYX1RUTF9SRUFEUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgYl9TZWxlY3RlZFBvcnQ9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICBiX1JlYWRUeXBlCSAgPSAoQllURSkgZGF0YVswXTsgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMF0gICAgMCA6IENoYW5ubGUgaXMgbm90IGFjdGl2ZSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDogQ2hhbm5sZSBpcyBhY3RpdmUgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ID4wICA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAwIDogQ29uZmlnIGNvbW1hbmQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMiA6IFRoZSBzZWxlY3RlZCBUVEwgaW5wdXQgcG9ydCBpcyB3cm9uZyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAzIDogVGhlIHNlbGVjdGVkIFRUTCBkaWdpdGFsIGlucHV0IGlzIHdyb25nICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE2WFhfSW5zbkJpdHNSZWFkVFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ29tbWFuZCA9IDA7CisJQllURSBiX051bWJlck9mUG9ydCA9CisJCShCWVRFKSAoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05iclRUTENoYW5uZWwgLyA4KTsKKwlCWVRFIGJfU2VsZWN0ZWRQb3J0ID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCUJZVEUgYl9JbnB1dENoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlCWVRFICpwYl9TdGF0dXM7CisJRFdPUkQgZHdfU3RhdHVzOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaW5zbi0+biA+PSAxKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgY29tbWFuZCAqLworCQkvKiAqKioqKioqKioqKioqKioqICovCisKKwkJYl9Db21tYW5kID0gKEJZVEUpIGRhdGFbMF07CisKKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNvbW1hbmQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1JFQURDSEFOTkVMKQorCQkJfHwgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfUkVBRFBPUlQpKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgc2VsZWN0ZWQgcG9ydCAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGJfU2VsZWN0ZWRQb3J0IDwgYl9OdW1iZXJPZlBvcnQpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgaW5wdXQgcG9ydCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKChkZXZwcml2LT51bF9UVExQb3J0Q29uZmlndXJhdGlvbgorCQkJCQkJCVtiX1NlbGVjdGVkUG9ydCAvCisJCQkJCQkJCTRdID4+ICg4ICoKKwkJCQkJCQkJKGJfU2VsZWN0ZWRQb3J0CisJCQkJCQkJCQklCisJCQkJCQkJCQk0KSkpICYKKwkJCQkJCTB4RkYpID09IDApIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoYl9Db21tYW5kID09CisJCQkJCQkJQVBDSTE2WFhfVFRMX1JFQURDSEFOTkVMKQorCQkJCQkJJiYgKGJfSW5wdXRDaGFubmVsID4gNykpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIFRUTCBkaWdpdGFsIGlucHV0IGlzIHdyb25nICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJcHJpbnRrKCJcbkNoYW5uZWwgc2VsZWN0aW9uIGVycm9yIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTEwMzsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogVGhlIHNlbGVjdGVkIFRUTCBpbnB1dCBwb3J0IGlzIHdyb25nICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwcmludGsoIlxuUG9ydCBzZWxlY3Rpb24gZXJyb3IiKTsKKwkJCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDI7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRoZSBzZWxlY3RlZCBUVEwgaW5wdXQgcG9ydCBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlwcmludGsoIlxuUG9ydCBzZWxlY3Rpb24gZXJyb3IiKTsKKwkJCQlpX1JldHVyblZhbHVlID0gLTEwMjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ29uZmlnIGNvbW1hbmQgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIlxuQ29tbWFuZCBzZWxlY3Rpb24gZXJyb3IiKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMTAwOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJcbkJ1ZmZlciBzaXplIGVycm9yIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCX0KKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIG5vIGVycm9yIG9jY3VyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCQlwYl9TdGF0dXMgPSAoUEJZVEUpICYgZGF0YVswXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIGRpZ2l0YWwgaW5wdSBzdGF0dXMgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkd19TdGF0dXMgPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIDggKyAoKGJfU2VsZWN0ZWRQb3J0IC8gNCkgKiA0KSk7CisJCWR3X1N0YXR1cyA9IChkd19TdGF0dXMgPj4gKDggKiAoYl9TZWxlY3RlZFBvcnQgJSA0KSkpICYgMHhGRjsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogU2F2ZSB0aGUgcG9ydCB2YWx1ZSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkqcGJfU3RhdHVzID0gKEJZVEUpIGR3X1N0YXR1czsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgcmVhZCBjaGFubmVsIHN0YXR1cyBjb21tYW5kICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9SRUFEQ0hBTk5FTCkgeworCQkJKnBiX1N0YXR1cyA9ICgqcGJfU3RhdHVzID4+IGJfSW5wdXRDaGFubmVsKSAmIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogSU5UIGlfQVBDSTE2WFhfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAgICAqZGV2LCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gICAgICAqaW5zbiwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgdGhlIHN0YXR1cyBmcm9tIGFsbCBkaWdpdGFsIGlucHV0IHBvcnRzICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogZGF0YVswXSA6IFBvcnQgMCB0byAzIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdIDogUG9ydCA0IHRvIDcgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIC4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMCA6IFJlYWQgY29tbWFuZCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTE2WFhfSW5zblJlYWRUVExJT0FsbFBvcnRWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJQllURSBiX0NvbW1hbmQgPSAoQllURSkgQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9DcHQgPSAwOworCUJZVEUgYl9OdW1iZXJPZlBvcnQgPSAwOworCXVuc2lnbmVkIGludCAqcGxzX1JlYWREYXRhID0gZGF0YTsKKworCS8qKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBjb21tYW5kICovCisJLyoqKioqKioqKioqKioqKioqKioqLworCisJaWYgKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1JFQURfQUxMX0lOUFVUUykKKwkJfHwgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfUkVBRF9BTExfT1VUUFVUUykpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBudW1iZXIgb2YgMzItQml0IHBvcnRzICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJYl9OdW1iZXJPZlBvcnQgPQorCQkJKEJZVEUpIChkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyVFRMQ2hhbm5lbCAvIDMyKTsKKwkJaWYgKChiX051bWJlck9mUG9ydCAqIDMyKSA8CisJCQlkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyVFRMQ2hhbm5lbCkgeworCQkJYl9OdW1iZXJPZlBvcnQgPSBiX051bWJlck9mUG9ydCArIDE7CisJCX0KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoaW5zbi0+biA+PSBiX051bWJlck9mUG9ydCkgeworCQkJaWYgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfUkVBRF9BTExfSU5QVVRTKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCBhbGwgZGlnaXRhbCBpbnB1dCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZm9yIChiX0NwdCA9IDA7IGJfQ3B0IDwgYl9OdW1iZXJPZlBvcnQ7IGJfQ3B0KyspIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgdGhlIDMyLUJpdCBwb3J0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXBsc19SZWFkRGF0YVtiX0NwdF0gPQorCQkJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIDggKworCQkJCQkJKGJfQ3B0ICogNCkpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIE1hc2sgYWxsIGNoYW5uZWxzIHVzZWQgYWxzIG91dHB1dHMgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwbHNfUmVhZERhdGFbYl9DcHRdID0KKwkJCQkJCXBsc19SZWFkRGF0YVtiX0NwdF0gJgorCQkJCQkJKH5kZXZwcml2LT4KKwkJCQkJCXVsX1RUTFBvcnRDb25maWd1cmF0aW9uW2JfQ3B0XSk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFJlYWQgYWxsIGRpZ2l0YWwgb3V0cHV0cyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlmb3IgKGJfQ3B0ID0gMDsgYl9DcHQgPCBiX051bWJlck9mUG9ydDsgYl9DcHQrKykgeworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCB0aGUgMzItQml0IHBvcnQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJcGxzX1JlYWREYXRhW2JfQ3B0XSA9CisJCQkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgMjAgKworCQkJCQkJKGJfQ3B0ICogNCkpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIE1hc2sgYWxsIGNoYW5uZWxzIHVzZWQgYWxzIG91dHB1dHMgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwbHNfUmVhZERhdGFbYl9DcHRdID0KKwkJCQkJCXBsc19SZWFkRGF0YVtiX0NwdF0gJiBkZXZwcml2LT4KKwkJCQkJCXVsX1RUTFBvcnRDb25maWd1cmF0aW9uW2JfQ3B0XTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJcHJpbnRrKCJcbkJ1ZmZlciBzaXplIGVycm9yIik7CisJCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqLworCQkvKiBDb21tYW5kIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiXG5Db21tYW5kIHNlbGVjdGlvbiBlcnJvciIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMDsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVFBVVCBGVU5DVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgICAgaV9BUENJMTZYWF9JbnNuQml0c1dyaXRlVFRMSU8gICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXQgdGhlIHN0YXRlIGZyb20gc2VsZWN0ZWQgVFRMIGRpZ2l0YWwgb3V0cHV0ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX091dHB1dENoYW5uZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTZXQgdGhlIHN0YXRlIGZyb20gZGlnaXRhbCBvdXRwdXQgcG9ydCAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIChiX1NlbGVjdGVkUG9ydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PTiB8IEFQQ0kxNlhYX1RUTF9XUklURUNIQU5ORUxfT0ZGICB8Cit8ICAgICAgICAgICAgICAgICAgICBiX1NlbGVjdGVkUG9ydCA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIGJfT3V0cHV0Q2hhbm5lbD0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7ICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgYl9Db21tYW5kICAgICAgPSAoQllURSkgZGF0YVswXTsgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgIEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT04gfCBBUENJMTZYWF9UVExfV1JJVEVQT1JUX09GRiAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgYl9TZWxlY3RlZFBvcnQgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7ICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICBiX0NvbW1hbmQgICAgICA9IChCWVRFKSBkYXRhWzBdOyAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMF0gOiBUVEwgb3V0cHV0IHBvcnQgMCB0byAzIGRhdGEgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSA6IFRUTCBvdXRwdXQgcG9ydCA0IHRvIDcgZGF0YSAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogPjAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDAgOiBDb21tYW5kIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAyIDogVGhlIHNlbGVjdGVkIFRUTCBvdXRwdXQgcG9ydCBpcyB3cm9uZyAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDMgOiBUaGUgc2VsZWN0ZWQgVFRMIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwNCA6IE91dHB1dCBtZW1vcnkgZGlzYWJsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kxNlhYX0luc25CaXRzV3JpdGVUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9Db21tYW5kID0gMDsKKwlCWVRFIGJfTnVtYmVyT2ZQb3J0ID0KKwkJKEJZVEUpIChkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyVFRMQ2hhbm5lbCAvIDgpOworCUJZVEUgYl9TZWxlY3RlZFBvcnQgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJQllURSBiX091dHB1dENoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlEV09SRCBkd19TdGF0dXMgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaW5zbi0+biA+PSAxKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgY29tbWFuZCAqLworCQkvKiAqKioqKioqKioqKioqKioqICovCisKKwkJYl9Db21tYW5kID0gKEJZVEUpIGRhdGFbMF07CisKKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNvbW1hbmQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PTikgfHwKKwkJCShiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFUE9SVF9PTikgfHwKKwkJCShiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PRkYpIHx8CisJCQkoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT0ZGKSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgdGhlIHNlbGVjdGVkIHBvcnQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1NlbGVjdGVkUG9ydCA8IGJfTnVtYmVyT2ZQb3J0KSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBvdXRwdXQgcG9ydCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKCgoZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb24KKwkJCQkJCQlbYl9TZWxlY3RlZFBvcnQgLworCQkJCQkJCQk0XSA+PiAoOCAqCisJCQkJCQkJCShiX1NlbGVjdGVkUG9ydAorCQkJCQkJCQkJJQorCQkJCQkJCQkJNCkpKSAmCisJCQkJCQkweEZGKSA9PSAweEZGKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBjaGFubmVsIG51bWJlciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PTikgfHwgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfV1JJVEVDSEFOTkVMX09GRikpICYmIChiX091dHB1dENoYW5uZWwgPiA3KSkgeworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogVGhlIHNlbGVjdGVkIFRUTCBkaWdpdGFsIG91dHB1dCBpcyB3cm9uZyAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQlwcmludGsoIlxuQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IiKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTAzOworCQkJCQl9CisKKwkJCQkJaWYgKCgoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURUNIQU5ORUxfT0ZGKSB8fCAoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT0ZGKSkgJiYgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID09IEFERElEQVRBX0RJU0FCTEUpKSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBUaGUgc2VsZWN0ZWQgVFRMIGRpZ2l0YWwgb3V0cHV0IGlzIHdyb25nICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCXByaW50aygiXG5PdXRwdXQgbWVtb3J5IGRpc2FibGVkIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTEwNDsKKwkJCQkJfQorCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoKChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFUE9SVF9PTikgfHwgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfV1JJVEVQT1JUX09GRikpICYmIChpbnNuLT5uIDwgMikpIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJCQkJLyogRGF0YSBzaXplIGVycm9yICovCisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJcHJpbnRrKCJcbkJ1ZmZlciBzaXplIGVycm9yIik7CisJCQkJCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRoZSBzZWxlY3RlZCBUVEwgb3V0cHV0IHBvcnQgaXMgd3JvbmcgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwcmludGsoIlxuUG9ydCBzZWxlY3Rpb24gZXJyb3IgJWxYIiwKKwkJCQkJCSh1bnNpZ25lZCBsb25nKWRldnByaXYtPgorCQkJCQkJdWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMF0pOworCQkJCQlpX1JldHVyblZhbHVlID0gLTEwMjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGhlIHNlbGVjdGVkIFRUTCBvdXRwdXQgcG9ydCBpcyB3cm9uZyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlwcmludGsoIlxuUG9ydCBzZWxlY3Rpb24gZXJyb3IgJWQgJWQiLAorCQkJCQliX1NlbGVjdGVkUG9ydCwgYl9OdW1iZXJPZlBvcnQpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTAyOworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb25maWcgY29tbWFuZCBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXByaW50aygiXG5Db21tYW5kIHNlbGVjdGlvbiBlcnJvciIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDA7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIlxuQnVmZmVyIHNpemUgZXJyb3IiKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgbm8gZXJyb3Igb2NjdXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaV9SZXR1cm5WYWx1ZSA+PSAwKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIGRpZ2l0YWwgb3V0cHV0IHN0YXRlICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWR3X1N0YXR1cyA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgMjAgKyAoKGJfU2VsZWN0ZWRQb3J0IC8gNCkgKiA0KSk7CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBvdXRwdXQgbWVtb3J5IG5vdCB1c2VkICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID09IEFERElEQVRBX0RJU0FCTEUpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ2xlYXIgdGhlIHNlbGVjdGVkIHBvcnQgdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkd19TdGF0dXMgPQorCQkJCWR3X1N0YXR1cyAmICgweEZGRkZGRkZGVUwgLQorCQkJCSgweEZGVUwgPDwgKDggKiAoYl9TZWxlY3RlZFBvcnQgJSA0KSkpKTsKKwkJfQorCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBzZXR0aW5nIGNoYW5uZWwgT04gKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChiX0NvbW1hbmQgPT0gQVBDSTE2WFhfVFRMX1dSSVRFQ0hBTk5FTF9PTikgeworCQkJZHdfU3RhdHVzID0KKwkJCQlkd19TdGF0dXMgfCAoMVVMIDw8ICgoOCAqIChiX1NlbGVjdGVkUG9ydCAlCisJCQkJCQkJNCkpICsgYl9PdXRwdXRDaGFubmVsKSk7CisJCX0KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgc2V0dGluZyBwb3J0IE9OICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT04pIHsKKwkJCWR3X1N0YXR1cyA9CisJCQkJZHdfU3RhdHVzIHwgKChkYXRhWzFdICYgMHhGRikgPDwgKDggKgorCQkJCQkoYl9TZWxlY3RlZFBvcnQgJSA0KSkpOworCQl9CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiBzZXR0aW5nIGNoYW5uZWwgT0ZGICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ29tbWFuZCA9PSBBUENJMTZYWF9UVExfV1JJVEVDSEFOTkVMX09GRikgeworCQkJZHdfU3RhdHVzID0KKwkJCQlkd19TdGF0dXMgJiAoMHhGRkZGRkZGRlVMIC0KKwkJCQkoMVVMIDw8ICgoOCAqIChiX1NlbGVjdGVkUG9ydCAlIDQpKSArCisJCQkJCQliX091dHB1dENoYW5uZWwpKSk7CisJCX0KKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IGlmIHNldHRpbmcgcG9ydCBPRkYgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Db21tYW5kID09IEFQQ0kxNlhYX1RUTF9XUklURVBPUlRfT0ZGKSB7CisJCQlkd19TdGF0dXMgPQorCQkJCWR3X1N0YXR1cyAmICgweEZGRkZGRkZGVUwgLQorCQkJCSgoZGF0YVsxXSAmIDB4RkYpIDw8ICg4ICogKGJfU2VsZWN0ZWRQb3J0ICUKKwkJCQkJCQk0KSkpKTsKKwkJfQorCisJCW91dGwoZHdfU3RhdHVzLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgMjAgKyAoKGJfU2VsZWN0ZWRQb3J0IC8gNCkgKiA0KSk7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMjAwX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6cmVzZXRzIGFsbCB0aGUgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTZYWF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE2eHguaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE2eHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmY5MWUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTZ4eC5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgQ09NRURJX1NVQkRfVFRMSU8KKyNkZWZpbmUgQ09NRURJX1NVQkRfVFRMSU8gICAxMQkvKiBEaWdpdGFsIElucHV0IE91dHB1dCBCdXQgVFRMICovCisjZW5kaWYKKworI2lmbmRlZiBBRERJREFUQV9FTkFCTEUKKyNkZWZpbmUgQURESURBVEFfRU5BQkxFICAxCisjZGVmaW5lIEFERElEQVRBX0RJU0FCTEUgMAorI2VuZGlmCisKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX0lOSVQgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX0lOSVRESVJFQ1RJT04gIDEKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX09VVFBVVE1FTU9SWSAgIDIKKworI2RlZmluZSBBUENJMTZYWF9UVExfUkVBRENIQU5ORUwgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kxNlhYX1RUTF9SRUFEUE9SVCAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBBUENJMTZYWF9UVExfV1JJVEVDSEFOTkVMX09OICAgICAgICAwCisjZGVmaW5lIEFQQ0kxNlhYX1RUTF9XUklURUNIQU5ORUxfT0ZGICAgICAgIDEKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX1dSSVRFUE9SVF9PTiAgICAgICAgICAgMgorI2RlZmluZSBBUENJMTZYWF9UVExfV1JJVEVQT1JUX09GRiAgICAgICAgICAzCisKKyNkZWZpbmUgQVBDSTE2WFhfVFRMX1JFQURfQUxMX0lOUFVUUyAgICAgICAgMAorI2RlZmluZSBBUENJMTZYWF9UVExfUkVBRF9BTExfT1VUUFVUUyAgICAgICAxCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpMTZ4eF90dGwgPSB7IDEyLAorCXtCSVBfUkFOR0UoMSksCisJIEJJUF9SQU5HRSgxKSwKKwkgQklQX1JBTkdFKDEpLAorCSBCSVBfUkFOR0UoMSksCisJIEJJUF9SQU5HRSgxKSwKKwkgQklQX1JBTkdFKDEpLAorCSBCSVBfUkFOR0UoMSksCisJIEJJUF9SQU5HRSgxKSwKKwkgQklQX1JBTkdFKDEpLAorCSBCSVBfUkFOR0UoMSksCisJIEJJUF9SQU5HRSgxKSwKKwkgQklQX1JBTkdFKDEpfQorfTsKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgVFRMIElOSVNJQUxJU0FUSU9OIEZVTkNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kxNlhYX0luc25Db25maWdJbml0VFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgIFRUTCBJTlBVVCBGVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMTZYWF9JbnNuQml0c1JlYWRUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitpbnQgaV9BUENJMTZYWF9JbnNuUmVhZFRUTElPQWxsUG9ydFZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVEwgT1VUUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kxNlhYX0luc25CaXRzV3JpdGVUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkgIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK2ludCBpX0FQQ0kxNlhYX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFmNTVkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMTYuYwpAQCAtMCwwICsxLDQ2MCBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTIwMTYgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kyMDE2LmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0yMDE2ICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKyNpbmNsdWRlICJod2Rydl9hcGNpMjAxNi5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIwMTZfQ29uZmlnRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBEaWdpdGFsIE91dHB1dCBTdWJkZXZpY2UuICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICBkYXRhWzBdICAgICAgICAgICAgOiAxIERpZ2l0YWwgTWVtb3J5IE9uICAgICAgICAgICAgICAgfAorfAkJCQkgICAgIAkJCSAgIDAgRGlnaXRhbCBNZW1vcnkgT2ZmICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTIwMTZfQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKChkYXRhWzBdICE9IDApICYmIChkYXRhWzBdICE9IDEpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiTm90IGEgdmFsaWQgRGF0YSAhISEgLERhdGEgc2hvdWxkIGJlIDEgb3IgMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvLyBpZiAgKChkYXRhWzBdIT0wKSAmJiAoZGF0YVswXSE9MSkpCisJaWYgKGRhdGFbMF0pIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9FTkFCTEU7CisJfQkJCS8vIGlmICAoZGF0YVswXQorCWVsc2UgeworCQlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IEFERElEQVRBX0RJU0FCTEU7CisJfQkJCS8vIGVsc2UgaWYgIChkYXRhWzBdCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjAxNl9Xcml0ZURpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlcyBwb3J0IHZhbHVlICBUbyB0aGUgc2VsZWN0ZWQgcG9ydCAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIFdyaXRlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTIwMTZfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX05vT2ZDaGFubmVsOworCVVJTlQgdWlfVGVtcCwgdWlfVGVtcDE7CisJdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAoKHVpX05vT2ZDaGFubmVsIDwgMCkgfHwgKHVpX05vT2ZDaGFubmVsID4gMTUpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiSW52YWxpZCBDaGFubmVsIE51bWJlcnMgISEhLCBDaGFubmVsIE51bWJlcnMgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDE1XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vIGlmICAoKHVpX05vT2ZDaGFubmVsPDApIHx8ICh1aV9Ob09mQ2hhbm5lbD4xNSkpCisJaWYgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzKSB7CisJCXVpX1RlbXAgPSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMTZfRElHSVRBTF9PUCk7CisJfQkJCS8vIGlmICAoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWVsc2UgeworCQl1aV9UZW1wID0gMDsKKwl9CQkJLy8gZWxzZSBpZiAgKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwlpZiAoKGRhdGFbMV0gIT0gMCkgJiYgKGRhdGFbMV0gIT0gMSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJJbnZhbGlkIERhdGFbMV0gdmFsdWUgISEhLCBEYXRhWzFdIHNob3VsZCBiZSAwIG9yIDFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gaWYgICgoZGF0YVsxXSE9MCkgJiYgKGRhdGFbMV0hPTEpKQorCisJaWYgKGRhdGFbM10gPT0gMCkgeworCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIHwgdWlfVGVtcDsKKwkJCW91dHcoZGF0YVswXSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMTZfRElHSVRBTF9PUCk7CisJCX0JCS8vIGlmIChkYXRhWzFdPT0wKQorCQllbHNlIHsKKwkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisJCQkJY2FzZSAyOgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICgyICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgODoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoOCAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxNToKKwkJCQkJZGF0YVswXSA9IGRhdGFbMF0gfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisJCQkJb3V0dyhkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAxNl9ESUdJVEFMX09QKTsKKwkJCX0JLy8gaWYgIChkYXRhWzFdPT0xKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJfQkvLyBlbHNlIGlmICAoZGF0YVsxXT09MSkKKwkJfQkJLy8gZWxzZSBpZiAoZGF0YVsxXT09MCkKKwl9CQkJLy8gaWYgKGRhdGFbM109PTApCisJZWxzZSB7CisJCWlmIChkYXRhWzNdID09IDEpIHsKKwkJCWlmIChkYXRhWzFdID09IDApIHsKKwkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweDE7CisJCQkJdWlfVGVtcDEgPSAxOworCQkJCXVpX1RlbXAxID0gdWlfVGVtcDEgPDwgdWlfTm9PZkNoYW5uZWw7CisJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgdWlfTm9PZkNoYW5uZWwpIF4gMHhmZmZmOworCQkJCWRhdGFbMF0gPSBkYXRhWzBdICYgdWlfVGVtcDsKKwkJCQlvdXR3KGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDE2X0RJR0lUQUxfT1ApOworCQkJfQkvLyBpZiAgKGRhdGFbMV09PTApCisJCQllbHNlIHsKKwkJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKwkJCQkJY2FzZSAyOgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgzOworCQkJCQkJdWlfVGVtcDEgPSAzOworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDIgKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA0OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmOworCQkJCQkJdWlfVGVtcDEgPSAxNTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCA0ICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgODoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZmY7CisJCQkJCQl1aV9UZW1wMSA9IDI1NTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCA4ICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDggKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMTU6CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCQkJIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisJCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMjAxNl9ESUdJVEFMX09QKTsKKwkJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQkJfQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCQl9CQkvL2lmKGRhdGFbM109PTEpOworCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9pZiBlbHNlIGRhdGFbM109PTEpCisJfQkJCS8vaWYgZWxzZSBkYXRhWzNdPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIwMTZfQml0c0RpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgb3IgcG9ydCAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kyMDE2X0JpdHNEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbDsKKwl1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmICgodWlfTm9PZkNoYW5uZWwgPCAwKSB8fCAodWlfTm9PZkNoYW5uZWwgPiAxNSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJJbnZhbGlkIENoYW5uZWwgTnVtYmVycyAhISEsIENoYW5uZWwgTnVtYmVycyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gaWYgICgodWlfTm9PZkNoYW5uZWw8MCkgfHwgKHVpX05vT2ZDaGFubmVsPjE1KSkKKwlpZiAoKGRhdGFbMF0gIT0gMCkgJiYgKGRhdGFbMF0gIT0gMSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJJbnZhbGlkIERhdGFbMF0gdmFsdWUgISEhLCBEYXRhWzBdIHNob3VsZCBiZSAwIG9yIDFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gaWYgICgoZGF0YVswXSE9MCkgJiYgKGRhdGFbMF0hPTEpKQorCXVpX1RlbXAgPSBkYXRhWzBdOworCSpkYXRhID0gaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDE2X0RJR0lUQUxfT1BfUlcpOworCWlmICh1aV9UZW1wID09IDApIHsKKwkJKmRhdGEgPSAoKmRhdGEgPj4gdWlfTm9PZkNoYW5uZWwpICYgMHgxOworCX0JCQkvLyBpZiAgKHVpX1RlbXA9PTApCisJZWxzZSB7CisJCWlmICh1aV9UZW1wID09IDEpIHsKKwkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKwkJCWNhc2UgMjoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMiAqIGRhdGFbMV0pKSAmIDM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNDoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoNCAqIGRhdGFbMV0pKSAmIDE1OworCQkJCWJyZWFrOworCisJCQljYXNlIDg6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDggKiBkYXRhWzFdKSkgJiAyNTU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTU6CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVsKQorCQl9CQkvLyBpZiAgKHVpX1RlbXA9PTEpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWQgXG4iKTsKKwkJfQkJLy8gZWxzZSBpZiAgKHVpX1RlbXA9PTEpCisJfQkJCS8vIGlmICAodWlfVGVtcD09MCkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMDE2X0NvbmZpZ1dhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kyMDE2X0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCWlmIChkYXRhWzBdID09IDApIHsKKwkJLy9EaXNhYmxlIHRoZSB3YXRjaGRvZworCQlvdXR3KDB4MCwKKwkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKworCQkJQVBDSTIwMTZfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CisJCS8vTG9hZGluZyB0aGUgUmVsb2FkIHZhbHVlCisJCW91dHcoZGF0YVsxXSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKworCQkJQVBDSTIwMTZfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFKTsKKwkJZGF0YVsxXSA9IGRhdGFbMV0gPj4gMTY7CisJCW91dHcoZGF0YVsxXSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQWRkb24gKworCQkJQVBDSTIwMTZfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFICsgMik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCJcblRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFyZSB3cm9uZ1xuIik7CisJfQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIwMTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBTdGFydCAvIFN0b3AgVGhlIFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTIwMTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIDA6CQkvL3N0b3AgdGhlIHdhdGNoZG9nCisJCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTIwMTZfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CS8vZGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwkJYnJlYWs7CisJY2FzZSAxOgkJLy9zdGFydCB0aGUgd2F0Y2hkb2cKKwkJb3V0dygweDAwMDEsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kyMDE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQlicmVhazsKKwljYXNlIDI6CQkvL1NvZnR3YXJlIHRyaWdnZXIKKwkJb3V0dygweDAyMDEsCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsKKwkJCUFQQ0kyMDE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuU3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkgZG9lcyBub3QgZXhpc3RcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy8gc3dpdGNoKGRhdGFbMF0pCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMDE2X1JlYWRXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTIwMTZfUmVhZFdhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1ZGVsYXkoNSk7CisJZGF0YVswXSA9IGludyhkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTIwMTZfV0FUQ0hET0dfU1RBVFVTKSAmIDB4MTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMDE2X1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOnJlc2V0cyBhbGwgdGhlIHJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMjAxNl9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlvdXR3KDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMTZfRElHSVRBTF9PUCk7CS8vIFJlc2V0cyB0aGUgZGlnaXRhbCBvdXRwdXQgY2hhbm5lbHMKKwlvdXR3KDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kyMDE2X1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCW91dHcoMHgwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQVBDSTIwMTZfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFKTsKKwlvdXR3KDB4MCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIEFQQ0kyMDE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSArIDIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAxNi5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAxNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjFhYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDE2LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKy8qKioqKioqKiogICAgICBEZWZpbml0aW9ucyBmb3IgQVBDSS0yMDE2IGNhcmQgICoqKioqLworCisjZGVmaW5lIEFQQ0kyMDE2X0JPQVJEX1ZFTkRPUl9JRCAweDE1QjgKKyNkZWZpbmUgQVBDSTIwMTZfQUREUkVTU19SQU5HRSAgIDgKKworLy9ESUdJVEFMIElOUFVULU9VVFBVVCBERUZJTkUKKworI2RlZmluZSBBUENJMjAxNl9ESUdJVEFMX09QICAgICAgICAgICAgICAgICAJMHgwNAorI2RlZmluZSBBUENJMjAxNl9ESUdJVEFMX09QX1JXICAgICAgICAgICAgICAgICAJNAorCisvL0FERElEQVRBIEVuYWJsZSBEaXNhYmxlCisKKyNkZWZpbmUgQURESURBVEFfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURESURBVEFfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworLy8gVElNRVIgQ09VTlRFUiBXQVRDSERPRyBERUZJTkVTCisKKyNkZWZpbmUgQURESURBVEFfV0FUQ0hET0cgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVBDSTIwMTZfRElHSVRBTF9PUF9XQVRDSERPRyAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTIwMTZfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSAgICAgICAgICAgIDEyCisjZGVmaW5lIEFQQ0kyMDE2X1dBVENIRE9HX1JFTE9BRF9WQUxVRSAgICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kyMDE2X1dBVENIRE9HX1NUQVRVUyAgICAgICAgICAgICAgICAgICAxNgorCisvLyBIYXJkd2FyZSBMYXllciAgZnVuY3Rpb25zIGZvciBBcGNpMjAxNgorCisvL0RPCitpbnQgaV9BUENJMjAxNl9Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworaW50IGlfQVBDSTIwMTZfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCitpbnQgaV9BUENJMjAxNl9CaXRzRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvLyBUSU1FUgorLy8gdGltZXIgdmFsdWUgaXMgcGFzc2VkIGFzIHUgc2Vjb25kcworCitpbnQgaV9BUENJMjAxNl9Db25maWdXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworaW50IGlfQVBDSTIwMTZfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKK2ludCBpX0FQQ0kyMDE2X1JlYWRXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vIEludGVycnVwdCBmdW5jdGlvbnMuLi4uLgorCisvLyB2b2lkIHZfQVBDSTIwMTZfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpIDsKKworIC8vdm9pZCB2X0FQQ0kyMDE2X0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKTsKKy8vIFJFU0VUCitJTlQgaV9BUENJMjAxNl9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzQ3YmMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAzMi5jCkBAIC0wLDAgKzEsNTc5IEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgKEMpIEFEREktREFUQSBHbWJIICAgICAgICAgIERpZXNlbHN0cmHDn2UgMyAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQQ0ktMjAzMiAgICAgICB8IENvbXBpbGVyICAgOiBHQ0MgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogaHdkcnZfYXBjaTIwMzIuY3wgVmVyc2lvbiAgICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IEVyaWMgU3RvbHogICB8IERhdGUgICAgICAgOiAgMDIvMTIvMjAwMiAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOiAgIEhhcmR3YXJlIExheWVyIEFjY2VzIEZvciBBUENJLTIwMzIgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZWQgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisjaW5jbHVkZSAiaHdkcnZfYXBjaTIwMzIuaCIKK1VJTlQgdWlfSW50ZXJydXB0RGF0YSwgdWlfVHlwZTsKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjAzMl9Db25maWdEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIERpZ2l0YWwgT3V0cHV0IFN1YmRldmljZS4gICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2IDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgZGF0YVsxXSAgICAgICAgICAgIDogMSBFbmFibGUgIFZDQyAgSW50ZXJydXB0ICB8Cit8CQkJCQkJCQkJCSAgIDAgRGlzYWJsZSBWQ0MgIEludGVycnVwdCAgfAorfAkJCQkJICBkYXRhWzJdICAgICAgICAgICAgOiAxIEVuYWJsZSAgQ0MgIEludGVycnVwdCAgIHwKK3wJCQkJCQkJCQkJICAgMCBEaXNhYmxlIENDICBJbnRlcnJ1cHQgICB8Cit8CQkJCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kyMDMyX0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVMT05HIHVsX0NvbW1hbmQgPSAwOworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKworCWlmICgoZGF0YVswXSAhPSAwKSAmJiAoZGF0YVswXSAhPSAxKSkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIk5vdCBhIHZhbGlkIERhdGEgISEhICxEYXRhIHNob3VsZCBiZSAxIG9yIDBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9pZiAgKCAoZGF0YVswXSE9MCkgJiYgKGRhdGFbMF0hPTEpICkKKwlpZiAoZGF0YVswXSkgeworCQlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IEFERElEQVRBX0VOQUJMRTsKKwl9CQkJLy8gaWYgIChkYXRhWzBdKQorCWVsc2UgeworCQlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IEFERElEQVRBX0RJU0FCTEU7CisJfQkJCS8vZWxzZSBpZiAgKGRhdGFbMF0pCisKKwlpZiAoZGF0YVsxXSA9PSBBRERJREFUQV9FTkFCTEUpIHsKKwkJdWxfQ29tbWFuZCA9IHVsX0NvbW1hbmQgfCAweDE7CisJfQkJCS8vaWYgIChkYXRhWzFdID09IEFERElEQVRBX0VOQUJMRSkKKwllbHNlIHsKKwkJdWxfQ29tbWFuZCA9IHVsX0NvbW1hbmQgJiAweEZGRkZGRkZFOworCX0JCQkvL2Vsc2VpZiAgKGRhdGFbMV0gPT0gQURESURBVEFfRU5BQkxFKQorCWlmIChkYXRhWzJdID09IEFERElEQVRBX0VOQUJMRSkgeworCQl1bF9Db21tYW5kID0gdWxfQ29tbWFuZCB8IDB4MjsKKwl9CQkJLy9pZiAgKGRhdGFbMl0gPT0gQURESURBVEFfRU5BQkxFKQorCWVsc2UgeworCQl1bF9Db21tYW5kID0gdWxfQ29tbWFuZCAmIDB4RkZGRkZGRkQ7CisJfQkJCS8vZWxzZWlmICAoZGF0YVsyXSA9PSBBRERJREFUQV9FTkFCTEUpCisJb3V0bCh1bF9Db21tYW5kLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX0lOVEVSUlVQVCk7CisJdWlfSW50ZXJydXB0RGF0YSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX0lOVEVSUlVQVCk7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjAzMl9Xcml0ZURpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlcyBwb3J0IHZhbHVlICBUbyB0aGUgc2VsZWN0ZWQgcG9ydCAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIFdyaXRlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMjAzMl9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVGVtcCwgdWlfVGVtcDE7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKwlpZiAoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMpIHsKKwkJdWlfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QKTsKKworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwllbHNlIHsKKwkJdWlfVGVtcCA9IDA7CisJfQkJCS8vaWYoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWlmIChkYXRhWzNdID09IDApIHsKKwkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSB8IHVpX1RlbXA7CisJCQlvdXRsKGRhdGFbMF0sIGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1ApOworCQl9CQkvL2lmKGRhdGFbMV09PTApCisJCWVsc2UgeworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCWNhc2UgMjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDQ6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSA4OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICg4ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKworCQkJCWNhc2UgMTY6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDE2ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQljYXNlIDMxOgorCQkJCQlkYXRhWzBdID0gZGF0YVswXSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQlvdXRsKGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1ApOworCQkJfQkvLyBpZihkYXRhWzFdPT0xKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJfQkvL2Vsc2UgaWYoZGF0YVsxXT09MSkKKwkJfQkJLy9lbHNlaWYoZGF0YVsxXT09MCkKKwl9CQkJLy9pZihkYXRhWzNdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVszXSA9PSAxKSB7CisJCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgxOworCQkJCXVpX1RlbXAxID0gMTsKKwkJCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IHVpX05vT2ZDaGFubmVsOworCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJZGF0YVswXSA9CisJCQkJCShkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSBeCisJCQkJCTB4ZmZmZmZmZmY7CisJCQkJZGF0YVswXSA9IGRhdGFbMF0gJiB1aV9UZW1wOworCQkJCW91dGwoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUCk7CisJCQl9CS8vaWYoZGF0YVsxXT09MCkKKwkJCWVsc2UgeworCQkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCisJCQkJCWNhc2UgMjoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MzsKKwkJCQkJCXVpX1RlbXAxID0gMzsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAyICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZmZmZmYpICYgdWlfVGVtcDsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgNDoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4ZjsKKwkJCQkJCXVpX1RlbXAxID0gMTU7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgNCAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICg0ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIDg6CisJCQkJCQlkYXRhWzBdID0gfmRhdGFbMF0gJiAweGZmOworCQkJCQkJdWlfVGVtcDEgPSAyNTU7CisJCQkJCQl1aV9UZW1wMSA9CisJCQkJCQkJdWlfVGVtcDEgPDwgOCAqIGRhdGFbMl07CisJCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQkJZGF0YVswXSA9CisJCQkJCQkJKChkYXRhWzBdIDw8ICg4ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIDE2OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmZmZmOworCQkJCQkJdWlfVGVtcDEgPSA2NTUzNTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAxNiAqCisJCQkJCQkJZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDE2ICoKKwkJCQkJCQkJCWRhdGEKKwkJCQkJCQkJCVsyXSkpIF4KKwkJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIDMxOgorCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJCSIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisKKwkJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQkJb3V0bChkYXRhWzBdLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kyMDMyX0RJR0lUQUxfT1ApOworCQkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCQl9CS8vZWxzZWlmKGRhdGFbMV09PTApCisJCX0JCS8vaWYoZGF0YVszXT09MSk7CisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2lmIGVsc2UgZGF0YVszXT09MSkKKwl9CQkJLy9pZiBlbHNlIGRhdGFbM109PTApCisJcmV0dXJuIChpbnNuLT5uKTs7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjAzMl9SZWFkRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBvciBwb3J0ICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIHJlYWQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMjAzMl9SZWFkRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wOworCVVJTlQgdWlfTm9PZkNoYW5uZWw7CisJdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1aV9UZW1wID0gZGF0YVswXTsKKwkqZGF0YSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX1JXKTsKKwlpZiAodWlfVGVtcCA9PSAwKSB7CisJCSpkYXRhID0gKCpkYXRhID4+IHVpX05vT2ZDaGFubmVsKSAmIDB4MTsKKwl9CQkJLy9pZiAgKHVpX1RlbXA9PTApCisJZWxzZSB7CisJCWlmICh1aV9UZW1wID09IDEpIHsKKwkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJY2FzZSAyOgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICgyICogZGF0YVsxXSkpICYgMzsKKwkJCQlicmVhazsKKworCQkJY2FzZSA0OgorCQkJCSpkYXRhID0gKCpkYXRhID4+ICg0ICogZGF0YVsxXSkpICYgMTU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgODoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoOCAqIGRhdGFbMV0pKSAmIDI1NTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAxNjoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMTYgKiBkYXRhWzFdKSkgJiA2NTUzNTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAzMToKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKworCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisJCX0JCS8vaWYgICh1aV9UZW1wPT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkIFxuIik7CisJCX0JCS8vZWxzZWlmICAodWlfVGVtcD09MSkKKwl9CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBJTlQgaV9BUENJMjAzMl9Db25maWdXYXRjaGRvZyhjb21lZGlfZGV2aWNlCisgICAgICAgICAgICAgICAgICAgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKXwKK3wJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTIwMzJfQ29uZmlnV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChkYXRhWzBdID09IDApIHsKKwkJLy9EaXNhYmxlIHRoZSB3YXRjaGRvZworCQlvdXRsKDB4MCwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQkJQVBDSTIwMzJfVENXX1BST0cpOworCQkvL0xvYWRpbmcgdGhlIFJlbG9hZCB2YWx1ZQorCQlvdXRsKGRhdGFbMV0sCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX1dBVENIRE9HICsKKwkJCUFQQ0kyMDMyX1RDV19SRUxPQURfVkFMVUUpOworCX0gZWxzZSB7CisJCXByaW50aygiXG5UaGUgaW5wdXQgcGFyYW1ldGVycyBhcmUgd3JvbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworIC8qCisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMDMyX1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2cgICAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOyAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBUYXNrICAgICAgICAgICAgICA6IFN0YXJ0IC8gU3RvcCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOiAgICAgICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgKi8KKworaW50IGlfQVBDSTIwMzJfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAwOgkJLy9zdG9wIHRoZSB3YXRjaGRvZworCQlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9XQVRDSERPRyArIEFQQ0kyMDMyX1RDV19QUk9HKTsJLy9kaXNhYmxlIHRoZSB3YXRjaGRvZworCQlicmVhazsKKwljYXNlIDE6CQkvL3N0YXJ0IHRoZSB3YXRjaGRvZworCQlvdXRsKDB4MDAwMSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQkJQVBDSTIwMzJfVENXX1BST0cpOworCQlicmVhazsKKwljYXNlIDI6CQkvL1NvZnR3YXJlIHRyaWdnZXIKKwkJb3V0bCgweDAyMDEsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX1dBVENIRE9HICsKKwkJCUFQQ0kyMDMyX1RDV19QUk9HKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIwMzJfUmVhZFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7IAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kyMDMyX1JlYWRXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlkYXRhWzBdID0KKwkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1BfV0FUQ0hET0cgKworCQlBUENJMjAzMl9UQ1dfVFJJR19TVEFUVVMpICYgMHgxOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogIHZvaWQgdl9BUENJMjAzMl9JbnRlcnJ1cHQJCQkJCSAgICAgICAgIHwKK3wJCQkJCSAgKGludCBpcnEgLCB2b2lkICpkKSAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlcyBwb3J0IHZhbHVlICBUbyB0aGUgc2VsZWN0ZWQgcG9ydCAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBpbnQgaXJxICAgICAgICAgICAgICAgICA6IGlycSBudW1iZXIgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmQgICAgICAgICAgICAgICAgIDogdm9pZCBwb2ludGVyICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLwordm9pZCB2X0FQQ0kyMDMyX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXVuc2lnbmVkIGludCB1aV9ETzsKKworCXVpX0RPID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMDMyX0RJR0lUQUxfT1BfSVJRKSAmIDB4MTsJLy9DaGVjayBpZiBWQ0MgT1IgQ0MgaW50ZXJydXB0IGhhcyBvY2N1cmVkLgorCisJaWYgKHVpX0RPID09IDApIHsKKwkJcHJpbnRrKCJcbkludGVycnVwdCBmcm9tIHVuS25vd24gc291cmNlXG4iKTsKKwl9CQkJLy8gaWYodWlfRE89PTApCisJaWYgKHVpX0RPKSB7CisJCS8vIENoZWNrIGZvciBEaWdpdGFsIE91dHB1dCBpbnRlcnJ1cHQgVHlwZSAtIDE6IFZjYyBpbnRlcnJ1cHQgMjogQ0MgaW50ZXJydXB0LgorCQl1aV9UeXBlID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJQVBDSTIwMzJfRElHSVRBTF9PUF9JTlRFUlJVUFRfU1RBVFVTKSAmIDB4MzsKKwkJb3V0bCgweDAsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QICsKKwkJCUFQQ0kyMDMyX0RJR0lUQUxfT1BfSU5URVJSVVBUKTsKKwkJaWYgKHVpX1R5cGUgPT0gMSkgeworCQkJLy9TZW5kcyBzaWduYWwgdG8gdXNlciBzcGFjZQorCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKwkJfQkJLy8gaWYgKHVpX1R5cGU9PTEpCisJCWVsc2UgeworCQkJaWYgKHVpX1R5cGUgPT0gMikgeworCQkJCS8vIFNlbmRzIHNpZ25hbCB0byB1c2VyIHNwYWNlCisJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKwkJCX0JLy9pZiAodWlfVHlwZT09MikKKwkJfQkJLy9lbHNlIGlmICh1aV9UeXBlPT0xKQorCX0JCQkvL2lmKHVpX0RPKQorCisJcmV0dXJuOworCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiAgaW50IGlfQVBDSTIwMzJfUmVhZEludGVycnVwdFN0YXR1cyAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6UmVhZHMgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMjAzMl9SZWFkSW50ZXJydXB0U3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwkqZGF0YSA9IHVpX1R5cGU7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiAgaW50IGlfQVBDSTIwMzJfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikJCQkgICAgIHwKK3wJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOlJlc2V0cyB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBjYXJkICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTIwMzJfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIgPSAwOworCXVpX1R5cGUgPSAwOworCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QKTsJLy9SZXNldHMgdGhlIG91dHB1dCBjaGFubmVscworCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX0lOVEVSUlVQVCk7CS8vRGlzYWJsZXMgdGhlIGludGVycnVwdC4KKwlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIwMzJfRElHSVRBTF9PUF9XQVRDSERPRyArIEFQQ0kyMDMyX1RDV19QUk9HKTsJLy9kaXNhYmxlIHRoZSB3YXRjaGRvZworCW91dGwoMHgwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjAzMl9ESUdJVEFMX09QX1dBVENIRE9HICsgQVBDSTIwMzJfVENXX1JFTE9BRF9WQUxVRSk7CS8vcmVsb2FkPTAKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTAwMmUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAzMi5oCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qKioqKioqKiogICAgICBEZWZpbml0aW9ucyBmb3IgQVBDSS0yMDMyIGNhcmQgICoqKioqLworCisvLyBDYXJkIFNwZWNpZmljIGluZm9ybWF0aW9uCisjZGVmaW5lIEFQQ0kyMDMyX0JPQVJEX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAgMHgxNUI4CisjZGVmaW5lIEFQQ0kyMDMyX0FERFJFU1NfUkFOR0UgICAgICAgICAgICAgICAgICAgNjMKKworLy9ESUdJVEFMIElOUFVULU9VVFBVVCBERUZJTkUKKworI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QICAgICAgICAgICAgICAgICAJMAorI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QX1JXICAgICAgICAgICAgICAgICAJMAorI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QX0lOVEVSUlVQVCAgICAgICAgICAgNAorI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QX0lSUSAgICAgICAgICAgICAgICAgMTIKKworLy9EaWdpdGFsIE91dHB1dCBJbnRlcnJ1cHQgU3RhdHVzCisjZGVmaW5lIEFQQ0kyMDMyX0RJR0lUQUxfT1BfSU5URVJSVVBUX1NUQVRVUyAgICA4CisKKy8vRGlnaXRhbCBPdXRwdXQgSW50ZXJydXB0IEVuYWJsZSBEaXNhYmxlLgorI2RlZmluZSBBUENJMjAzMl9ESUdJVEFMX09QX1ZDQ19JTlRFUlJVUFRfRU5BQkxFICAgMHgxCisjZGVmaW5lIEFQQ0kyMDMyX0RJR0lUQUxfT1BfVkNDX0lOVEVSUlVQVF9ESVNBQkxFICAweEZGRkZGRkZFCisjZGVmaW5lIEFQQ0kyMDMyX0RJR0lUQUxfT1BfQ0NfSU5URVJSVVBUX0VOQUJMRSAgICAweDIKKyNkZWZpbmUgQVBDSTIwMzJfRElHSVRBTF9PUF9DQ19JTlRFUlJVUFRfRElTQUJMRSAgIDB4RkZGRkZGRkQKKworLy9BRERJREFUQSBFbmFibGUgRGlzYWJsZQorCisjZGVmaW5lIEFERElEQVRBX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFERElEQVRBX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8vIFRJTUVSIENPVU5URVIgV0FUQ0hET0cgREVGSU5FUworCisjZGVmaW5lIEFERElEQVRBX1dBVENIRE9HICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEFQQ0kyMDMyX0RJR0lUQUxfT1BfV0FUQ0hET0cgICAgICAgICAgICAgICAxNgorI2RlZmluZSBBUENJMjAzMl9UQ1dfUkVMT0FEX1ZBTFVFICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBBUENJMjAzMl9UQ1dfVElNRUJBU0UgICAgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBBUENJMjAzMl9UQ1dfUFJPRyAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBDSTIwMzJfVENXX1RSSUdfU1RBVFVTICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFQQ0kyMDMyX1RDV19JUlEgICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorCisvLyBIYXJkd2FyZSBMYXllciAgZnVuY3Rpb25zIGZvciBBcGNpMjAzMgorCisvL0RPCitpbnQgaV9BUENJMjAzMl9Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kyMDMyX1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kyMDMyX1JlYWREaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMjAzMl9SZWFkSW50ZXJydXB0U3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy8gVElNRVIKKy8vIHRpbWVyIHZhbHVlIGlzIHBhc3NlZCBhcyB1IHNlY29uZHMKK0lOVCBpX0FQQ0kyMDMyX0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTIwMzJfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMjAzMl9SZWFkV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvLyBJbnRlcnJ1cHQgZnVuY3Rpb25zLi4uLi4KKwordm9pZCB2X0FQQ0kyMDMyX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKTsKKworLy9SZXNldCBmdW5jdGlvbnMKK2ludCBpX0FQQ0kyMDMyX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0N2UxOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMjAwLmMKQEAgLTAsMCArMSw1NDkgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBDSS0yMjAwICAgICAgIHwgQ29tcGlsZXIgICA6IEdDQyAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBod2Rydl9hcGNpMjIwMC5jfCBWZXJzaW9uICAgIDogMi45NiAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgSGFyZHdhcmUgTGF5ZXIgQWNjZXMgRm9yIEFQQ0ktMjIwMCAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmNsdWRlZCBmaWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisjaW5jbHVkZSAiaHdkcnZfYXBjaTIyMDAuaCIKKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMjAwX1JlYWQxRGlnaXRhbElucHV0ICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmV0dXJuIHRoZSBzdGF0dXMgb2YgdGhlIGRpZ2l0YWwgaW5wdXQgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfAkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMjIwMF9SZWFkMURpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UbXBWYWx1ZSA9IDA7CisJVUlOVCB1aV9DaGFubmVsOworCXVpX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAodWlfQ2hhbm5lbCA+PSAwICYmIHVpX0NoYW5uZWwgPD0gNykgeworCQl1aV9UbXBWYWx1ZSA9IChVSU5UKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfRElHSVRBTF9JUCk7CisJCSpkYXRhID0gKHVpX1RtcFZhbHVlID4+IHVpX0NoYW5uZWwpICYgMHgxOworCX0JCQkvL2lmKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9NykKKwllbHNlIHsKKwkJcHJpbnRrKCJcblRoZSBzcGVjaWZpZWQgY2hhbm5lbCBkb2VzIG5vdCBleGlzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwl9CQkJLy9lbHNlIGlmKHVpX0NoYW5uZWwgPj0gMCAmJiB1aV9DaGFubmVsIDw9NykKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIyMDBfUmVhZE1vcmVEaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZXR1cm4gdGhlIHN0YXR1cyBvZiB0aGUgUmVxdWVzdGVkIGRpZ2l0YWwgaW5wdXRzICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK0lOVCBpX0FQQ0kyMjAwX1JlYWRNb3JlRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCVVJTlQgdWlfUG9ydFZhbHVlID0gZGF0YVswXTsKKwlVSU5UIHVpX01hc2sgPSAwOworCVVJTlQgdWlfTm9PZkNoYW5uZWxzOworCisJdWlfTm9PZkNoYW5uZWxzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkqZGF0YSA9IChVSU5UKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfRElHSVRBTF9JUCk7CisJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbHMpIHsKKwljYXNlIDI6CisJCXVpX01hc2sgPSAzOworCQkqZGF0YSA9ICgqZGF0YSA+PiAoMiAqIHVpX1BvcnRWYWx1ZSkpICYgdWlfTWFzazsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl1aV9NYXNrID0gMTU7CisJCSpkYXRhID0gKCpkYXRhID4+ICg0ICogdWlfUG9ydFZhbHVlKSkgJiB1aV9NYXNrOworCQlicmVhazsKKwljYXNlIDc6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcbldyb25nIHBhcmFtZXRlcnNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisJCWJyZWFrOworCX0JCQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMjAwX0NvbmZpZ0RpZ2l0YWxPdXRwdXQgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgIHwKK3wJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBEaWdpdGFsIE91dHB1dCBTdWJkZXZpY2UuICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzBdICA6MTpNZW1vcnkgb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAgICAgICAgICAgIDA6TWVtb3J5IG9mZiAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMjIwMF9Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IGRhdGFbMF07CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjIwMF9Xcml0ZURpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlcyBwb3J0IHZhbHVlICBUbyB0aGUgc2VsZWN0ZWQgcG9ydCAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMjIwMF9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfVGVtcCwgdWlfVGVtcDE7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKwlpZiAoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMpIHsKKwkJdWlfVGVtcCA9IGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9ESUdJVEFMX09QKTsKKworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwllbHNlIHsKKwkJdWlfVGVtcCA9IDA7CisJfQkJCS8vaWYoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWlmIChkYXRhWzNdID09IDApIHsKKwkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSB8IHVpX1RlbXA7CisJCQlvdXR3KGRhdGFbMF0sIGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX0RJR0lUQUxfT1ApOworCQl9CQkvL2lmKGRhdGFbMV09PTApCisJCWVsc2UgeworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCWNhc2UgMjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIDQ6CisJCQkJCWRhdGFbMF0gPQorCQkJCQkJKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCWRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSA4OgorCQkJCQlkYXRhWzBdID0KKwkJCQkJCShkYXRhWzBdIDw8ICg4ICoKKwkJCQkJCQlkYXRhWzJdKSkgfCB1aV9UZW1wOworCQkJCQlicmVhazsKKwkJCQljYXNlIDE1OgorCQkJCQlkYXRhWzBdID0gZGF0YVswXSB8IHVpX1RlbXA7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWNvbWVkaV9lcnJvcihkZXYsICIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKworCQkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCisJCQkJb3V0dyhkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9ESUdJVEFMX09QKTsKKwkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCX0JCS8vZWxzZWlmKGRhdGFbMV09PTApCisJfQkJCS8vaWYoZGF0YVszXT09MCkKKwllbHNlIHsKKwkJaWYgKGRhdGFbM10gPT0gMSkgeworCQkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MTsKKwkJCQl1aV9UZW1wMSA9IDE7CisJCQkJdWlfVGVtcDEgPSB1aV9UZW1wMSA8PCB1aV9Ob09mQ2hhbm5lbDsKKwkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgXiAweGZmZmY7CisJCQkJZGF0YVswXSA9IGRhdGFbMF0gJiB1aV9UZW1wOworCQkJCW91dHcoZGF0YVswXSwKKwkJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfRElHSVRBTF9PUCk7CisJCQl9CS8vaWYoZGF0YVsxXT09MCkKKwkJCWVsc2UgeworCQkJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCisJCQkJCWNhc2UgMjoKKwkJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MzsKKwkJCQkJCXVpX1RlbXAxID0gMzsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCAyICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDIgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSA0OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmOworCQkJCQkJdWlfVGVtcDEgPSAxNTsKKwkJCQkJCXVpX1RlbXAxID0KKwkJCQkJCQl1aV9UZW1wMSA8PCA0ICogZGF0YVsyXTsKKwkJCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJCQlkYXRhWzBdID0KKwkJCQkJCQkoKGRhdGFbMF0gPDwgKDQgKgorCQkJCQkJCQkJZGF0YQorCQkJCQkJCQkJWzJdKSkgXgorCQkJCQkJCTB4ZmZmZikgJiB1aV9UZW1wOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSA4OgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHhmZjsKKwkJCQkJCXVpX1RlbXAxID0gMjU1OworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDggKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoOCAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmZmZmKSAmIHVpX1RlbXA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAxNToKKwkJCQkJCWJyZWFrOworCisJCQkJCWRlZmF1bHQ6CisJCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJCSIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisKKwkJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQkJb3V0dyhkYXRhWzBdLAorCQkJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCUFQQ0kyMjAwX0RJR0lUQUxfT1ApOworCQkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCQl9CS8vZWxzZWlmKGRhdGFbMV09PTApCisJCX0JCS8vaWYoZGF0YVszXT09MSk7CisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2lmIGVsc2UgZGF0YVszXT09MSkKKwl9CQkJLy9pZiBlbHNlIGRhdGFbM109PTApCisJcmV0dXJuIChpbnNuLT5uKTs7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjIwMF9SZWFkRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKSAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBvciBwb3J0ICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMjIwMF9SZWFkRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlVSU5UIHVpX1RlbXA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKwl1aV9UZW1wID0gZGF0YVswXTsKKwkqZGF0YSA9IGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9ESUdJVEFMX09QKTsKKwlpZiAodWlfVGVtcCA9PSAwKSB7CisJCSpkYXRhID0gKCpkYXRhID4+IHVpX05vT2ZDaGFubmVsKSAmIDB4MTsKKwl9CQkJLy9pZih1aV9UZW1wPT0wKQorCWVsc2UgeworCQlpZiAodWlfVGVtcCA9PSAxKSB7CisJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisKKwkJCWNhc2UgMjoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMiAqIGRhdGFbMV0pKSAmIDM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgNDoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoNCAqIGRhdGFbMV0pKSAmIDE1OworCQkJCWJyZWFrOworCisJCQljYXNlIDg6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDggKiBkYXRhWzFdKSkgJiAyNTU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMTU6CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJY29tZWRpX2Vycm9yKGRldiwgIiBjaGFuIHNwZWMgd3JvbmciKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsJLy8gInNvcnJ5IGNoYW5uZWwgc3BlYyB3cm9uZyAiCisKKwkJCX0JLy9zd2l0Y2godWlfTm9PZkNoYW5uZWxzKQorCQl9CQkvL2lmKHVpX1RlbXA9PTEpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWQgXG4iKTsKKwkJfQkJLy9lbHNlaWYodWlfVGVtcD09MSkKKwl9CQkJLy9lbHNlaWYodWlfVGVtcD09MCkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMjAwX0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgIHwKK3wJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBXYXRjaGRvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogICBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgOnBvaW50ZXIgdG8gc3ViZGV2aWNlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgIDpwb2ludGVyIHRvIGluc24gc3RydWN0dXJlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMjIwMF9Db25maWdXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGRhdGFbMF0gPT0gMCkgeworCQkvL0Rpc2FibGUgdGhlIHdhdGNoZG9nCisJCW91dHcoMHgwLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfV0FUQ0hET0cgKworCQkJQVBDSTIyMDBfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CisJCS8vTG9hZGluZyB0aGUgUmVsb2FkIHZhbHVlCisJCW91dHcoZGF0YVsxXSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX1dBVENIRE9HICsKKwkJCUFQQ0kyMjAwX1dBVENIRE9HX1JFTE9BRF9WQUxVRSk7CisJCWRhdGFbMV0gPSBkYXRhWzFdID4+IDE2OworCQlvdXR3KGRhdGFbMV0sCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9XQVRDSERPRyArCisJCQlBUENJMjIwMF9XQVRDSERPR19SRUxPQURfVkFMVUUgKyAyKTsKKwl9CQkJLy9pZihkYXRhWzBdPT0wKQorCWVsc2UgeworCQlwcmludGsoIlxuVGhlIGlucHV0IHBhcmFtZXRlcnMgYXJlIHdyb25nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vZWxzZWlmKGRhdGFbMF09PTApCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworIC8qCisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kyMjAwX1N0YXJ0U3RvcFdyaXRlV2F0Y2hkb2cgICAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOyAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBUYXNrICAgICAgICAgICAgICA6IFN0YXJ0IC8gU3RvcCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICAgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICA6cG9pbnRlciB0byBzdWJkZXZpY2Ugc3RydWN0dXJlCisgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgOnBvaW50ZXIgdG8gaW5zbiBzdHJ1Y3R1cmUgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOiAgICAgICAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgfCAgICAgICAgICAgICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgKi8KKworaW50IGlfQVBDSTIyMDBfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSAwOgkJLy9zdG9wIHRoZSB3YXRjaGRvZworCQlvdXR3KDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfV0FUQ0hET0cgKyBBUENJMjIwMF9XQVRDSERPR19FTkFCTEVESVNBQkxFKTsJLy9kaXNhYmxlIHRoZSB3YXRjaGRvZworCQlicmVhazsKKwljYXNlIDE6CQkvL3N0YXJ0IHRoZSB3YXRjaGRvZworCQlvdXR3KDB4MDAwMSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX1dBVENIRE9HICsKKwkJCUFQQ0kyMjAwX1dBVENIRE9HX0VOQUJMRURJU0FCTEUpOworCQlicmVhazsKKwljYXNlIDI6CQkvL1NvZnR3YXJlIHRyaWdnZXIKKwkJb3V0dygweDAyMDEsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9XQVRDSERPRyArCisJCQlBUENJMjIwMF9XQVRDSERPR19FTkFCTEVESVNBQkxFKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vIHN3aXRjaChkYXRhWzBdKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTIyMDBfUmVhZFdhdGNoZG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7IAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBUaGUgV2F0Y2hkb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgIDpwb2ludGVyIHRvIHN1YmRldmljZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICA6cG9pbnRlciB0byBpbnNuIHN0cnVjdHVyZSAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kyMjAwX1JlYWRXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9CisJCWludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMjIwMF9XQVRDSERPRyArCisJCUFQQ0kyMjAwX1dBVENIRE9HX1NUQVRVUykgJiAweDE7CisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMjIwMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpyZXNldHMgYWxsIHRoZSByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTIyMDBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJb3V0dygweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX0RJR0lUQUxfT1ApOwkvL1JFU0VUUyBUSEUgRElHSVRBTCBPVVRQVVRTCisJb3V0dygweDAsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX1dBVENIRE9HICsKKwkJQVBDSTIyMDBfV0FUQ0hET0dfRU5BQkxFRElTQUJMRSk7CisJb3V0dygweDAsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kyMjAwX1dBVENIRE9HICsKKwkJQVBDSTIyMDBfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFKTsKKwlvdXR3KDB4MCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTIyMDBfV0FUQ0hET0cgKworCQlBUENJMjIwMF9XQVRDSERPR19SRUxPQURfVkFMVUUgKyAyKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIyMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTExNWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjIwMC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qKioqKioqKiogICAgICBEZWZpbml0aW9ucyBmb3IgQVBDSS0yMjAwIGNhcmQgICoqKioqLworCisvLyBDYXJkIFNwZWNpZmljIGluZm9ybWF0aW9uCisjZGVmaW5lIEFQQ0kyMjAwX0JPQVJEX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAgMHgxNWI4CisjZGVmaW5lIEFQQ0kyMjAwX0FERFJFU1NfUkFOR0UgICAgICAgICAgICAgICAgICAgNjQKKworLy9ESUdJVEFMIElOUFVULU9VVFBVVCBERUZJTkUKKworI2RlZmluZSBBUENJMjIwMF9ESUdJVEFMX09QICAgICAgICAgICAgICAgICAJNAorI2RlZmluZSBBUENJMjIwMF9ESUdJVEFMX0lQICAgICAgICAgICAgICAgICAgICAgMAorCisvLyBUSU1FUiBDT1VOVEVSIFdBVENIRE9HIERFRklORVMKKworI2RlZmluZSBBUENJMjIwMF9XQVRDSERPRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBBUENJMjIwMF9XQVRDSERPR19FTkFCTEVESVNBQkxFICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBDSTIyMDBfV0FUQ0hET0dfUkVMT0FEX1ZBTFVFICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVBDSTIyMDBfV0FUQ0hET0dfU1RBVFVTICAgICAgICAgICAgICAgICAgIDE2CisKKy8vIEhhcmR3YXJlIExheWVyICBmdW5jdGlvbnMgZm9yIEFwY2kyMjAwCisKKy8vRGlnaXRhbCBJbnB1dAorSU5UIGlfQVBDSTIyMDBfUmVhZE1vcmVEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kyMjAwX1JlYWQxRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vRGlnaXRhbCBPdXRwdXQKK2ludCBpX0FQQ0kyMjAwX0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTIyMDBfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTIyMDBfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy8gVElNRVIKK2ludCBpX0FQQ0kyMjAwX0NvbmZpZ1dhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTIyMDBfU3RhcnRTdG9wV3JpdGVXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMjIwMF9SZWFkV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvL3Jlc2V0CitJTlQgaV9BUENJMjIwMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGViOGRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jCkBAIC0wLDAgKzEsMjY5NyBAQAorLyoqCitAdmVyYmF0aW0KKworQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisKKyAgICAgICAgQURESS1EQVRBIEdtYkgKKyAgICAgICAgRGllc2Vsc3RyYXNzZSAzCisgICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAgICAgICAgVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICAgICAgICBGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICAgICAgICBodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAgICAgICAgaW5mb0BhZGRpLWRhdGEuY29tCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKworWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCisKK0BlbmR2ZXJiYXRpbQorKi8KKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYXNzZSAzICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTMxMjAgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kzMTIwLmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDpBUENJMzEyMCBNb2R1bGUuICBIYXJkd2FyZSBhYnN0cmFjdGlvbiBMYXllciBmb3IgQVBDSTMxMjB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFJ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgCQkgfCAJCQkJCQkgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8CQkJCQkJICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKyNpbmNsdWRlICJod2Rydl9hcGNpMzEyMC5oIgorc3RhdGljIFVJTlQgdWlfVGVtcCA9IDA7CisKKy8vIEZVTkNUSU9OIERFRklOSVRJT05TCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBBTkFMT0cgSU5QVVQgU1VCREVWSUNFICAgCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsfAorfCAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDYWxscyBjYXJkIHNwZWNpZmljIGZ1bmN0aW9uICAJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAJCQkJCSAgICAgICAgIAkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0luc25Db25maWdBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCBpOworCisJaWYgKChkYXRhWzBdICE9IEFQQ0kzMTIwX0VPQ19NT0RFKSAmJiAoZGF0YVswXSAhPSBBUENJMzEyMF9FT1NfTU9ERSkpCisJCXJldHVybiAtMTsKKworCS8vIENoZWNrIGZvciBDb252ZXJzaW9uIHRpbWUgdG8gYmUgYWRkZWQgPz8KKwlkZXZwcml2LT51aV9Fb2NFb3NDb252ZXJzaW9uVGltZSA9IGRhdGFbMl07CisKKwlpZiAoZGF0YVswXSA9PSBBUENJMzEyMF9FT1NfTU9ERSkgeworCisJCS8vVGVzdCB0aGUgbnVtYmVyIG9mIHRoZSBjaGFubmVsCisJCWZvciAoaSA9IDA7IGkgPCBkYXRhWzNdOyBpKyspIHsKKworCQkJaWYgKENSX0NIQU4oZGF0YVs0ICsgaV0pID49IHRoaXNfYm9hcmQtPmlfTmJyQWlDaGFubmVsKSB7CisJCQkJcHJpbnRrKCJiYWQgY2hhbm5lbCBsaXN0XG4iKTsKKwkJCQlyZXR1cm4gLTI7CisJCQl9CisJCX0KKworCQlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9FT1NfTU9ERTsKKworCQlpZiAoZGF0YVsxXSkgeworCQkJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9FTkFCTEU7CisJCX0gZWxzZQorCQkJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9ESVNBQkxFOworCQkvLyBDb3B5IGNoYW5uZWwgbGlzdCBhbmQgUmFuZ2UgTGlzdCB0byBkZXZwcml2CisKKwkJZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzID0gZGF0YVszXTsKKwkJZm9yIChpID0gMDsgaSA8IGRldnByaXYtPnVpX0FpTmJyb2ZDaGFubmVsczsgaSsrKSB7CisJCQlkZXZwcml2LT51aV9BaUNoYW5uZWxMaXN0W2ldID0gZGF0YVs0ICsgaV07CisJCX0KKworCX0gZWxzZQkJCS8vIEVPQworCXsKKwkJZGV2cHJpdi0+Yl9JbnRlcnJ1cHRNb2RlID0gQVBDSTMxMjBfRU9DX01PREU7CisJCWlmIChkYXRhWzFdKSB7CisJCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0VOQUJMRTsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gQVBDSTMxMjBfRElTQUJMRTsKKwkJfQorCX0KKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnNuUmVhZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICB8Cit8CQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiAgY2FyZCBzcGVjaWZpYyBmdW5jdGlvbgkJCQkJCQkJIHwKK3wJCQkJUmVhZHMgYW5hbG9nIGlucHV0IGluIHN5bmNocm9ub3VzIG1vZGUgICAgICAgICAgICAgICB8Cit8CQkJICBFT0MgYW5kIEVPUyBpcyBzZWxlY3RlZCBhcyBwZXIgY29uZmlndXJlZCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGlmIG5vIGNvbnZlcnNpb24gdGltZSBpcyBzZXQgdXNlcyBkZWZhdWx0IGNvbnZlcnNpb24gICB8Cit8CQkJICB0aW1lIDEwIG1pY3Jvc2VjLgkJCQkJICAgICAgCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0luc25SZWFkQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVTSE9SVCB1c19Db252ZXJ0VGltaW5nLCB1c19UbXBWYWx1ZSwgaTsKKwlCWVRFIGJfVG1wOworCisJLy8gZml4IGNvbnZlcnRpb24gdGltZSB0byAxMCB1cworCWlmICghZGV2cHJpdi0+dWlfRW9jRW9zQ29udmVyc2lvblRpbWUpIHsKKwkJcHJpbnRrKCJObyB0aW1lcjAgVmFsdWUgdXNpbmcgMTAgdXNcbiIpOworCQl1c19Db252ZXJ0VGltaW5nID0gMTA7CisJfSBlbHNlCisJCXVzX0NvbnZlcnRUaW1pbmcgPSAoVVNIT1JUKSAoZGV2cHJpdi0+dWlfRW9jRW9zQ29udmVyc2lvblRpbWUgLyAxMDAwKTsJLy8gbmFubyB0byB1c2Vjb25kcworCisJLy8gdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuUmVhZEFuYWxvZ0lucHV0KGRldix1c19Db252ZXJ0VGltaW5nLGluc24tPm4sJmluc24tPmNoYW5zcGVjLGRhdGEsaW5zbi0+dW51c2VkWzBdKTsKKworCS8vIENsZWFyIHNvZnR3YXJlIHJlZ2lzdGVycworCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0gMDsKKwlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9IDA7CisJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPSAwOworLy8gICAgICAgIGRldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyPTA7CisKKwlpZiAoaW5zbi0+dW51c2VkWzBdID09IDIyMikJLy8gc2Vjb25kIGluc24gcmVhZAorCXsKKworCQlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCQlkYXRhW2ldID0gZGV2cHJpdi0+dWlfQWlSZWFkRGF0YVtpXTsKKwkJfQorCisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+dHNrX0N1cnJlbnQgPSBjdXJyZW50OwkvLyBTYXZlIHRoZSBjdXJyZW50IHByb2Nlc3MgdGFzayBzdHJ1Y3R1cmUKKwkJLy9UZXN0aW5nIGlmIGJvYXJkIGhhdmUgdGhlIG5ldyBRdWFydHogYW5kIGNhbGN1bGF0ZSB0aGUgdGltZSB2YWx1ZQorCQkvL3RvIHNldCBpbiB0aGUgdGltZXIKKworCQl1c19UbXBWYWx1ZSA9CisJCQkoVVNIT1JUKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfUkRfU1RBVFVTKTsKKworCQkvL0VMMjUwODA0OiBUZXN0aW5nIGlmIGJvYXJkIEFQQ0kzMTIwIGhhdmUgdGhlIG5ldyBRdWFydHogb3IgaWYgaXQgaXMgYW4gQVBDSTMwMDEKKwkJaWYgKCh1c19UbXBWYWx1ZSAmIDB4MDBCMCkgPT0gMHgwMEIwCisJCQl8fCAhc3RyY21wKHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUsICJhcGNpMzAwMSIpKSB7CisJCQl1c19Db252ZXJ0VGltaW5nID0gKHVzX0NvbnZlcnRUaW1pbmcgKiAyKSAtIDI7CisJCX0gZWxzZSB7CisJCQl1c19Db252ZXJ0VGltaW5nID0KKwkJCQkoKHVzX0NvbnZlcnRUaW1pbmcgKiAxMjkyNikgLyAxMDAwMCkgLSAxOworCQl9CisKKwkJdXNfVG1wVmFsdWUgPSAoVVNIT1JUKSBkZXZwcml2LT5iX0ludGVycnVwdE1vZGU7CisKKwkJc3dpdGNoICh1c19UbXBWYWx1ZSkgeworCisJCWNhc2UgQVBDSTMxMjBfRU9DX01PREU6CisKKwkJCS8vIFRlc3RpbmcgdGhlIGludGVycnVwdCBmbGFnIGFuZCBzZXQgdGhlIEVPQyBiaXQKKwkJCS8vIENsZWFycyB0aGUgRklGTworCQkJaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JFU0VUX0ZJRk8pOworCisJCQkvLyBJbml0aWFsaXplIHRoZSBzZXF1ZW5jZSBhcnJheQorCisJCQkvL2lmICghaV9BUENJMzEyMF9TZXR1cENoYW5uZWxMaXN0KGRldixzLDEsY2hhbmxpc3QsMCkpICByZXR1cm4gLUVJTlZBTDsKKworCQkJaWYgKCFpX0FQQ0kzMTIwX1NldHVwQ2hhbm5lbExpc3QoZGV2LCBzLCAxLAorCQkJCQkmaW5zbi0+Y2hhbnNwZWMsIDApKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQkvL0luaXRpYWxpemUgVGltZXIgMCBtb2RlIDQKKwkJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJYl9UaW1lclNlbGVjdE1vZGUgJiAweEZDKSB8CisJCQkJQVBDSTMxMjBfVElNRVJfMF9NT0RFXzQ7CisJCQlvdXRiKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDEpOworCisJCQkvLyBSZXNldCB0aGUgc2NhbiBiaXQgYW5kIERpc2FibGVzIHRoZSAgRU9TLCBETUEsIEVPQyBpbnRlcnJ1cHQKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfU0NBTjsKKworCQkJaWYgKGRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID09IEFQQ0kzMTIwX0VOQUJMRSkgeworCisJCQkJLy9EaXNhYmxlcyB0aGUgRU9TLERNQSBhbmQgZW5hYmxlcyB0aGUgRU9DIGludGVycnVwdAorCQkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQkJKGRldnByaXYtPgorCQkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJCUFQQ0kzMTIwX0RJU0FCTEVfRU9TX0lOVCkgfAorCQkJCQlBUENJMzEyMF9FTkFCTEVfRU9DX0lOVDsKKwkJCQlpbncoZGV2cHJpdi0+aW9iYXNlKTsKKworCQkJfSBlbHNlIHsKKwkJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJCWRldnByaXYtPgorCQkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJCUFQQ0kzMTIwX0RJU0FCTEVfQUxMX0lOVEVSUlVQVF9XSVRIT1VUX1RJTUVSOworCQkJfQorCisJCQlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQkJLy8gU2V0cyBnYXRlIDAKKwkJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJdXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9DTEVBUl9QQV9QUikgfAorCQkJCUFQQ0kzMTIwX0VOQUJMRV9USU1FUjA7CisJCQlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJCQkvLyBTZWxlY3QgVGltZXIgMAorCQkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzBfV09SRDsKKwkJCW91dGIoYl9UbXAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCisJCQkvL1NldCB0aGUgY29udmVydGlvbiB0aW1lCisJCQlvdXR3KHVzX0NvbnZlcnRUaW1pbmcsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCisJCQl1c19UbXBWYWx1ZSA9CisJCQkJKFVTSE9SVCkgaW53KGRldi0+aW9iYXNlICsgQVBDSTMxMjBfUkRfU1RBVFVTKTsKKworCQkJaWYgKGRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID09IEFQQ0kzMTIwX0RJU0FCTEUpIHsKKworCQkJCWRvIHsKKwkJCQkJLy8gV2FpdGluZyBmb3IgdGhlIGVuZCBvZiBjb252ZXJzaW9uCisJCQkJCXVzX1RtcFZhbHVlID0KKwkJCQkJCWludyhkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTMxMjBfUkRfU1RBVFVTKTsKKwkJCQl9IHdoaWxlICgodXNfVG1wVmFsdWUgJiBBUENJMzEyMF9FT0MpID09CisJCQkJCUFQQ0kzMTIwX0VPQyk7CisKKwkJCQkvL1JlYWQgdGhlIHJlc3VsdCBpbiBGSUZPICBhbmQgcHV0IGl0IGluIGluc24gZGF0YSBwb2ludGVyCisJCQkJdXNfVG1wVmFsdWUgPSBpbncoZGV2cHJpdi0+aW9iYXNlICsgMCk7CisJCQkJKmRhdGEgPSB1c19UbXBWYWx1ZTsKKworCQkJCWludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRVNFVF9GSUZPKTsKKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBBUENJMzEyMF9FT1NfTU9ERToKKworCQkJaW53KGRldnByaXYtPmlvYmFzZSk7CisJCQkvLyBDbGVhcnMgdGhlIEZJRk8KKwkJCWludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRVNFVF9GSUZPKTsKKwkJCS8vIGNsZWFyIFBBIFBSICBhbmQgZGlzYWJsZSB0aW1lciAwCisKKwkJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJdXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9DTEVBUl9QQV9QUikgfAorCQkJCUFQQ0kzMTIwX0RJU0FCTEVfVElNRVIwOworCisJCQlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJCQlpZiAoIWlfQVBDSTMxMjBfU2V0dXBDaGFubmVsTGlzdChkZXYsIHMsCisJCQkJCWRldnByaXYtPnVpX0FpTmJyb2ZDaGFubmVscywKKwkJCQkJZGV2cHJpdi0+dWlfQWlDaGFubmVsTGlzdCwgMCkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCS8vSW5pdGlhbGl6ZSBUaW1lciAwIG1vZGUgMgorCQkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPQorCQkJCShkZXZwcml2LT4KKwkJCQliX1RpbWVyU2VsZWN0TW9kZSAmIDB4RkMpIHwKKwkJCQlBUENJMzEyMF9USU1FUl8wX01PREVfMjsKKwkJCW91dGIoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMSk7CisKKwkJCS8vU2VsZWN0IFRpbWVyIDAKKwkJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8wX1dPUkQ7CisJCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKworCQkJLy9TZXQgdGhlIGNvbnZlcnRpb24gdGltZQorCQkJb3V0dyh1c19Db252ZXJ0VGltaW5nLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQkJLy9TZXQgdGhlIHNjYW4gYml0CisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgfCBBUENJMzEyMF9FTkFCTEVfU0NBTjsKKwkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCisJCQkvL0lmIEludGVycnVwdCBmdW5jdGlvbiBpcyBsb2FkZWQKKwkJCWlmIChkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9PSBBUENJMzEyMF9FTkFCTEUpIHsKKwkJCQkvL0Rpc2FibGVzIHRoZSBFT0MsRE1BIGFuZCBlbmFibGVzIHRoZSBFT1MgaW50ZXJydXB0CisJCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCQkoZGV2cHJpdi0+CisJCQkJCWJfTW9kZVNlbGVjdFJlZ2lzdGVyICYKKwkJCQkJQVBDSTMxMjBfRElTQUJMRV9FT0NfSU5UKSB8CisJCQkJCUFQQ0kzMTIwX0VOQUJMRV9FT1NfSU5UOworCQkJCWludyhkZXZwcml2LT5pb2Jhc2UpOworCisJCQl9IGVsc2UKKwkJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJCWRldnByaXYtPgorCQkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJCUFQQ0kzMTIwX0RJU0FCTEVfQUxMX0lOVEVSUlVQVF9XSVRIT1VUX1RJTUVSOworCisJCQlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQkJaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CisKKwkJCS8vU2V0cyBnYXRlIDAKKworCQkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCXVzX091dHB1dFJlZ2lzdGVyIHwgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMDsKKwkJCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisKKwkJCS8vU3RhcnQgY29udmVyc2lvbgorCQkJb3V0dygwLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9TVEFSVF9DT05WRVJTSU9OKTsKKworCQkJLy9XYWl0aW5nIG9mIGVuZCBvZiBjb252ZXJ0aW9uIGlmIGludGVycnVwdCBpcyBub3QgaW5zdGFsbGVkCisJCQlpZiAoZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPT0gQVBDSTMxMjBfRElTQUJMRSkgeworCQkJCS8vV2FpdGluZyB0aGUgZW5kIG9mIGNvbnZlcnRpb24KKwkJCQlkbyB7CisJCQkJCXVzX1RtcFZhbHVlID0KKwkJCQkJCWludyhkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJQVBDSTMxMjBfUkRfU1RBVFVTKTsKKwkJCQl9CisJCQkJd2hpbGUgKCh1c19UbXBWYWx1ZSAmIEFQQ0kzMTIwX0VPUykgIT0KKwkJCQkJQVBDSTMxMjBfRU9TKTsKKworCQkJCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHM7CisJCQkJCWkrKykgeworCQkJCQkvL1JlYWQgdGhlIHJlc3VsdCBpbiBGSUZPIGFuZCB3cml0ZSB0aGVtIGluIHNoYXJlZCBtZW1vcnkKKwkJCQkJdXNfVG1wVmFsdWUgPSBpbncoZGV2cHJpdi0+aW9iYXNlKTsKKwkJCQkJZGF0YVtpXSA9IChVSU5UKSB1c19UbXBWYWx1ZTsKKwkJCQl9CisKKwkJCQlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9FT0NfTU9ERTsJLy8gUmVzdG9yZSBkZWZhdWx0cy4KKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcmludGsoImlucHV0cyB3cm9uZ1xuIik7CisKKwkJfQorCQlkZXZwcml2LT51aV9Fb2NFb3NDb252ZXJzaW9uVGltZSA9IDA7CS8vIHJlIGluaXRpYWxpemluZyB0aGUgdmFyaWFibGU7CisJfQorCisJcmV0dXJuIGluc24tPm47CisKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsfAorfCAJCQkJCQkJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU3RvcHMgQ3ljbGljIGFjcXVpc2l0aW9uICAJCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDowICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLy8gRGlzYWJsZSBBMlAgRmlmbyB3cml0ZSBhbmQgQU1XRU4gc2lnbmFsCisJb3V0dygwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgNCk7CisKKwkvL0Rpc2FibGUgQnVzIE1hc3RlciBBREQgT04KKwlvdXR3KEFQQ0kzMTIwX0FERF9PTl9BR0NTVFNfTE9XLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJb3V0dygwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisJb3V0dyhBUENJMzEyMF9BRERfT05fQUdDU1RTX0hJR0gsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwlvdXR3KDAsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKKworCS8vRGlzYWJsZSBCVVMgTWFzdGVyIFBDSQorCW91dGwoMCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQU1DQ19PUF9SRUdfTUNTUik7CisKKwkvL291dGwoaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYytBTUNDX09QX1JFR19JTlRDU1IpJih+QUlOVF9XUklURV9DT01QTCksIGRldnByaXYtPmlfSW9iYXNlQW1jYytBTUNDX09QX1JFR19JTlRDU1IpOyAgICAvLyBzdG9wIGFtY2MgaXJxcworCS8vb3V0bChpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjK0FNQ0NfT1BfUkVHX01DU1IpJih+RU5fQTJQX1RSQU5TRkVSUyksIGRldnByaXYtPmlfSW9iYXNlQW1jYytBTUNDX09QX1JFR19NQ1NSKTsgLy8gc3RvcCBETUEKKworCS8vRGlzYWJsZSBleHQgdHJpZ2dlcgorCWlfQVBDSTMxMjBfRXh0dHJpZ0Rpc2FibGUoZGV2KTsKKworCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0gMDsKKwkvL3N0b3AgIGNvdW50ZXJzCisJb3V0dyhkZXZwcml2LT4KKwkJdXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMCAmCisJCUFQQ0kzMTIwX0RJU0FCTEVfVElNRVIxLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJb3V0dyhBUENJMzEyMF9ESVNBQkxFX0FMTF9USU1FUiwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKworCS8vRElTQUJMRV9BTExfSU5URVJSVVBUCisJb3V0YihBUENJMzEyMF9ESVNBQkxFX0FMTF9JTlRFUlJVUFQsCisJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCS8vRmx1c2ggRklGTworCWluYihkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JFU0VUX0ZJRk8pOworCWludyhkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CisJZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuID0gMDsKKwlkZXZwcml2LT51aV9BaUFjdHVhbFNjYW5Qb3NpdGlvbiA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwlkZXZwcml2LT51aV9BaUJ1ZmZlclB0ciA9IDA7CisJZGV2cHJpdi0+Yl9BaUNvbnRpbnVvdXMgPSAwOworCWRldnByaXYtPnVpX0RtYUFjdHVhbEJ1ZmZlciA9IDA7CisKKwlkZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb24gPSBBUENJMzEyMF9ESVNBQkxFOworCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0VPQ19NT0RFOworCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gQVBDSTMxMjBfRElTQUJMRTsKKwlpX0FQQ0kzMTIwX1Jlc2V0KGRldik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0NvbW1hbmRUZXN0QW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldnwKK3wJCQksc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBUZXN0IHZhbGlkaXR5IGZvciBhIGNvbW1hbmQgZm9yIGN5Y2xpYyBhbmxvZyBpbnB1dCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgYWNxdWlzaXRpb24gIAkJCQkJCSAgICAgCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOjAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9Db21tYW5kVGVzdEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsJCS8vIGRpdmlzb3IxLGRpdmlzb3IyOworCisJLy8gc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQKKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLy9zdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZQorCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKSB7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykKKwkJZXJyKys7CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSKQorCQllcnIrKzsKKworCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKSB7CisJCWNtZC0+c2Nhbl9lbmRfc3JjID0gVFJJR19DT1VOVDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8vIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUKKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikJLy8gVGVzdCBEZWxheSB0aW1pbmcKKwl7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgdGhpc19ib2FyZC0+dWlfTWluRGVsYXl0aW1lTnMpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSB0aGlzX2JvYXJkLT51aV9NaW5EZWxheXRpbWVOczsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikJLy8gVGVzdCBBY3F1aXNpdGlvbiB0aW1pbmcKKwl7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJCWlmICgoY21kLT5jb252ZXJ0X2FyZykKKwkJCQkmJiAoY21kLT5jb252ZXJ0X2FyZyA8CisJCQkJCXRoaXNfYm9hcmQtPnVpX01pbkFjcXVpc2l0aW9udGltZU5zKSkgeworCQkJCWNtZC0+Y29udmVydF9hcmcgPQorCQkJCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOczsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwKKwkJCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOcykgeworCQkJCWNtZC0+Y29udmVydF9hcmcgPQorCQkJCQl0aGlzX2JvYXJkLT51aV9NaW5BY3F1aXNpdGlvbnRpbWVOczsKKwkJCQllcnIrKzsKKworCQkJfQorCQl9CisJfQorCisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiB0aGlzX2JvYXJkLT5pX0FpQ2hhbm5lbExpc3QpIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSB0aGlzX2JvYXJkLT5pX0FpQ2hhbm5lbExpc3Q7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmICghY21kLT5zdG9wX2FyZykgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CQkvLyBUUklHX05PTkUKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLy8gc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIgJiYKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPAorCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOiBpbnQgaV9BUENJMzEyMF9Db21tYW5kQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgIHwKK3wJCQkJCQkJCQkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogRG9lcyBhc3luY2hyb25vdXMgYWNxdWlzaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBtb2RlIDEgb3IgMi4JCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfQ29tbWFuZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJLy9sb2FkaW5nIHByaXZhdGUgc3RydWN0dXJlIHdpdGggY21kIHN0cnVjdHVyZSBpbnB1dHMKKwlkZXZwcml2LT51aV9BaUZsYWdzID0gY21kLT5mbGFnczsKKwlkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHMgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwlkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggPSBjbWQtPnNjYW5fZW5kX2FyZzsKKwlkZXZwcml2LT5wdWlfQWlDaGFubmVsTGlzdCA9IGNtZC0+Y2hhbmxpc3Q7CisKKwkvL1VQREFURS0wLjcuNTctPjAuNy42OGRldnByaXYtPkFpRGF0YT1zLT5hc3luYy0+ZGF0YTsKKwlkZXZwcml2LT5BaURhdGEgPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmOworCS8vVVBEQVRFLTAuNy41Ny0+MC43LjY4ZGV2cHJpdi0+dWlfQWlEYXRhTGVuZ3RoPXMtPmFzeW5jLT5kYXRhX2xlbjsKKwlkZXZwcml2LT51aV9BaURhdGFMZW5ndGggPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3o7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyA9IGNtZC0+c3RvcF9hcmc7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zID0gMDsKKwl9CisKKwlkZXZwcml2LT51aV9BaVRpbWVyMCA9IDA7CS8vIHZhcmlhYmxlcyBjaGFuZ2VkIHRvIHRpbWVyMCx0aW1lcjEKKwlkZXZwcml2LT51aV9BaVRpbWVyMSA9IDA7CisJaWYgKChkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgPT0gMCkgfHwgKGRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyA9PSAtMSkpCisJCWRldnByaXYtPmJfQWlDb250aW51b3VzID0gMTsJLy8gdXNlciB3YW50IG5ldmVyZW5kaW5nIGFuYWxvZyBhY3F1aXNpdGlvbgorCS8vIHN0b3BwZWQgdXNpbmcgY2FuY2VsCisKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpCisJCWRldnByaXYtPmJfRXh0dHJpZ0VuYWJsZSA9IEFQQ0kzMTIwX0VOQUJMRTsKKwllbHNlCisJCWRldnByaXYtPmJfRXh0dHJpZ0VuYWJsZSA9IEFQQ0kzMTIwX0RJU0FCTEU7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkvLyBtb2RlIDEgb3IgMworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQkvLyBtb2RlIDEKKworCQkJZGV2cHJpdi0+dWlfQWlUaW1lcjAgPSBjbWQtPmNvbnZlcnRfYXJnOwkvLyB0aW1lciBjb25zdGFudCBpbiBuYW5vIHNlY29uZHMKKwkJCS8vcmV0dXJuIHRoaXNfYm9hcmQtPmlfaHdkcnZfQ29tbWFuZEFuYWxvZ0lucHV0KDEsZGV2LHMpOworCQkJcmV0dXJuIGlfQVBDSTMxMjBfQ3ljbGljQW5hbG9nSW5wdXQoMSwgZGV2LCBzKTsKKwkJfQorCisJfQorCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKQorCQkmJiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSkgeworCQkvLyBtb2RlIDIKKwkJZGV2cHJpdi0+dWlfQWlUaW1lcjEgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlkZXZwcml2LT51aV9BaVRpbWVyMCA9IGNtZC0+Y29udmVydF9hcmc7CS8vIHZhcmlhYmxlIGNoYW5nZWQgdGltZXIyIHRvIHRpbWVyMAorCQkvL3JldHVybiB0aGlzX2JvYXJkLT5pX2h3ZHJ2X0NvbW1hbmRBbmFsb2dJbnB1dCgyLGRldixzKTsKKwkJcmV0dXJuIGlfQVBDSTMxMjBfQ3ljbGljQW5hbG9nSW5wdXQoMiwgZGV2LCBzKTsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogIGludCBpX0FQQ0kzMTIwX0N5Y2xpY0FuYWxvZ0lucHV0KGludCBtb2RlLCAgICAgICAgICAgIHwKK3wJCSAJICAgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBUaGlzIGlzIHVzZWQgZm9yIGFuYWxvZyBpbnB1dCBjeWNsaWMgYWNxdWlzaXRpb24gICAgICAgfAorfAkJCSAgUGVyZm9ybXMgdGhlIGNvbW1hbmQgb3BlcmF0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIElmIERNQSBpcyBjb25maWd1cmVkIGRvZXMgRE1BIGluaXRpYWxpemF0aW9uICAgICAgICAgICB8Cit8CQkJICBvdGhlcndpc2UgZG9lcyB0aGUgYWNxdWlzaXRpb24gd2l0aCBFT1MgaW50ZXJydXB0LiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IAkJCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfQ3ljbGljQW5hbG9nSW5wdXQoaW50IG1vZGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlCWVRFIGJfVG1wOworCVVJTlQgdWlfVG1wLCB1aV9EZWxheVRpbWluZyA9IDAsIHVpX1RpbWVyVmFsdWUxID0gMCwgZG1hbGVuMCA9CisJCTAsIGRtYWxlbjEgPSAwLCB1aV9UaW1lclZhbHVlMiA9CisJCTAsIHVpX1RpbWVyVmFsdWUwLCB1aV9Db252ZXJ0VGltaW5nOworCVVTSE9SVCB1c19UbXBWYWx1ZTsKKworCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJLy9kZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb249QVBDSTMxMjBfRU5BQkxFOworCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCisJLyoqKioqKioqKioqKioqKioqKiovCisJLyogUmVzZXRzIHRoZSBGSUZPICovCisJLyoqKioqKioqKioqKioqKioqKiovCisJaW5iKGRldi0+aW9iYXNlICsgQVBDSTMxMjBfUkVTRVRfRklGTyk7CisKKwkvL0JFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCS8vaW53KGRldi0+aW9iYXNlK0FQQ0kzMTIwX1JEX1NUQVRVUyk7CisJLy9FTkQgSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIEFjcXVpc2l0aW9uIGluaXRpYWxpemVkICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL0JFR0lOIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCWRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9IEFQQ0kzMTIwX0VOQUJMRTsKKwkvL0VORCBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKworCS8vIGNsZWFyIHNvZnR3YXJlICByZWdpc3RlcnMKKwlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IDA7CisJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPSAwOworCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0gMDsKKwkvL2RldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyPTA7CisKKwkvL0NPTU1FTlQgSksgMDcuMDUuMDQ6IEZvbGxvd2luZ3MgY2FsbHMgYXJlIGluIGlfQVBDSTMxMjBfU3RhcnRBbmFsb2dJbnB1dEFjcXVpc2l0aW9uCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIENsZWFyIFRpbWVyIFdyaXRlIFRDIElOVCAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJb3V0bChBUENJMzEyMF9DTEVBUl9XUklURV9UQ19JTlQsCisJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFQQ0kzMTIwX0FNQ0NfT1BfUkVHX0lOVENTUik7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQ2xlYXJzIHRoZSB0aW1lciBzdGF0dXMgcmVnaXN0ZXIgKi8KKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9CRUdJTiBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKwkvL2ludyhkZXYtPmlvYmFzZStBUENJMzEyMF9USU1FUl9TVEFUVVNfUkVHSVNURVIpOworCWluYihkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7CisJLy9FTkQgSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBEaXNhYmxlcyBBbGwgVGltZXIgICAgICovCisJLyogU2V0cyBQUiBhbmQgUEEgdG8gMCAgICAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0gZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgJgorCQlBUENJMzEyMF9ESVNBQkxFX1RJTUVSMCAmCisJCUFQQ0kzMTIwX0RJU0FCTEVfVElNRVIxICYgQVBDSTMxMjBfQ0xFQVJfUEFfUFI7CisKKwlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisgICAvKioqKioqKioqKioqKioqKioqKi8KKwkvKiBSZXNldHMgdGhlIEZJRk8gKi8KKyAgIC8qKioqKioqKioqKioqKioqKioqLworCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JFU0VUX0ZJRk8pOworCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCisJZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuID0gMDsKKwlkZXZwcml2LT51aV9BaUFjdHVhbFNjYW5Qb3NpdGlvbiA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwlkZXZwcml2LT51aV9BaUJ1ZmZlclB0ciA9IDA7CisJZGV2cHJpdi0+dWlfRG1hQWN0dWFsQnVmZmVyID0gMDsKKworCS8vIHZhbHVlIGZvciB0aW1lcjIgIG1pbnVzIC0yIGhhcyB0byBiZSBkb25lIC4uLi4uZHVubm8geT8/CisJdWlfVGltZXJWYWx1ZTIgPSBkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgLSAyOworCXVpX0NvbnZlcnRUaW1pbmcgPSBkZXZwcml2LT51aV9BaVRpbWVyMDsKKworCWlmIChtb2RlID09IDIpCisJCXVpX0RlbGF5VGltaW5nID0gZGV2cHJpdi0+dWlfQWlUaW1lcjE7CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIEluaXRpYWxpemVzIHRoZSBzZXF1ZW5jZSBhcnJheSAqLworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJaWYgKCFpX0FQQ0kzMTIwX1NldHVwQ2hhbm5lbExpc3QoZGV2LCBzLCBkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHMsCisJCQlkZXZwcml2LT5wdWlfQWlDaGFubmVsTGlzdCwgMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJdXNfVG1wVmFsdWUgPSAoVVNIT1JUKSBpbncoZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRF9TVEFUVVMpOworLyoqKiBFTDI0MTAwMyA6IGFkZCB0aGlzIHNlY3Rpb24gaW4gY29tbWVudCBiZWNhdXNlIGZsb2F0cyBtdXN0IG5vdCBiZSB1c2VkCisJIGlmKCh1c19UbXBWYWx1ZSAmIDB4MDBCMCk9PTB4MDBCMCkKKwkgeworICAgICAgICAgICBmX0NvbnZlcnRWYWx1ZT0oKChmbG9hdCl1aV9Db252ZXJ0VGltaW5nICogMC4wMDIpIC0gMik7CisJCXVpX1RpbWVyVmFsdWUwPShVSU5UKWZfQ29udmVydFZhbHVlOworCQlpZiAobW9kZT09MikKKwkJeworCQkJZl9EZWxheVZhbHVlICAgICA9ICgoKGZsb2F0KXVpX0RlbGF5VGltaW5nICogMC4wMDAwMikgLSAyKTsKKwkJCXVpX1RpbWVyVmFsdWUxICA9ICAgKFVJTlQpIGZfRGVsYXlWYWx1ZTsKKwkJfQorCSB9CisgICAJIGVsc2UKKwkgeworCQlmX0NvbnZlcnRWYWx1ZT0oKChmbG9hdCl1aV9Db252ZXJ0VGltaW5nICogMC4wMDEyOTI2KSAtIDEpOworCQl1aV9UaW1lclZhbHVlMD0oVUlOVClmX0NvbnZlcnRWYWx1ZTsKKwkJaWYgKG1vZGUgPT0gMikKKwkJeworCQkgICAgIGZfRGVsYXlWYWx1ZSAgICAgPSAoKChmbG9hdCl1aV9EZWxheVRpbWluZyAqIDAuMDAwMDEyOTI2KSAtIDEpOworCQkgICAgIHVpX1RpbWVyVmFsdWUxICA9ICAgKFVJTlQpIGZfRGVsYXlWYWx1ZTsKKwkJfQorCX0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKiBFTDI0MTAwMyBCZWdpbiA6IGFkZCB0aGlzIHNlY3Rpb24gdG8gcmVwbGFjZSBmbG9hdHMgY2FsY3VsYXRpb24gYnkgaW50ZWdlciBjYWxjdWxhdGlvbnMgKiovCisJLy9FTDI1MDgwNDogVGVzdGluZyBpZiBib2FyZCBBUENJMzEyMCBoYXZlIHRoZSBuZXcgUXVhcnR6IG9yIGlmIGl0IGlzIGFuIEFQQ0kzMDAxCisJaWYgKCh1c19UbXBWYWx1ZSAmIDB4MDBCMCkgPT0gMHgwMEIwCisJCXx8ICFzdHJjbXAodGhpc19ib2FyZC0+cGNfRHJpdmVyTmFtZSwgImFwY2kzMDAxIikpIHsKKwkJdWlfVGltZXJWYWx1ZTAgPSB1aV9Db252ZXJ0VGltaW5nICogMiAtIDIwMDA7CisJCXVpX1RpbWVyVmFsdWUwID0gdWlfVGltZXJWYWx1ZTAgLyAxMDAwOworCisJCWlmIChtb2RlID09IDIpIHsKKwkJCXVpX0RlbGF5VGltaW5nID0gdWlfRGVsYXlUaW1pbmcgLyAxMDAwOworCQkJdWlfVGltZXJWYWx1ZTEgPSB1aV9EZWxheVRpbWluZyAqIDIgLSAyMDA7CisJCQl1aV9UaW1lclZhbHVlMSA9IHVpX1RpbWVyVmFsdWUxIC8gMTAwOworCQl9CisJfSBlbHNlIHsKKwkJdWlfQ29udmVydFRpbWluZyA9IHVpX0NvbnZlcnRUaW1pbmcgLyAxMDAwOworCQl1aV9UaW1lclZhbHVlMCA9IHVpX0NvbnZlcnRUaW1pbmcgKiAxMjkyNiAtIDEwMDAwOworCQl1aV9UaW1lclZhbHVlMCA9IHVpX1RpbWVyVmFsdWUwIC8gMTAwMDA7CisKKwkJaWYgKG1vZGUgPT0gMikgeworCQkJdWlfRGVsYXlUaW1pbmcgPSB1aV9EZWxheVRpbWluZyAvIDEwMDA7CisJCQl1aV9UaW1lclZhbHVlMSA9IHVpX0RlbGF5VGltaW5nICogMTI5MjYgLSAxOworCQkJdWlfVGltZXJWYWx1ZTEgPSB1aV9UaW1lclZhbHVlMSAvIDEwMDAwMDA7CisJCX0KKwl9CisvKioqIEVMMjQxMDAzIEVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoZGV2cHJpdi0+Yl9FeHR0cmlnRW5hYmxlID09IEFQQ0kzMTIwX0VOQUJMRSkgeworCQlpX0FQQ0kzMTIwX0V4dHRyaWdFbmFibGUoZGV2KTsJLy8gYWN0aXZhdGUgRVhUIHRyaWdnZXIKKwl9CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAxOgorCQkvLyBpbml0IHRpbWVyMCBpbiBtb2RlIDIKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPQorCQkJKGRldnByaXYtPgorCQkJYl9UaW1lclNlbGVjdE1vZGUgJiAweEZDKSB8IEFQQ0kzMTIwX1RJTUVSXzBfTU9ERV8yOworCQlvdXRiKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlLAorCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQxKTsKKworCQkvL1NlbGVjdCBUaW1lciAwCisJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMF9XT1JEOworCQlvdXRiKGJfVG1wLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCQkvL1NldCB0aGUgY29udmVydGlvbiB0aW1lCisJCW91dHcoKChVU0hPUlQpIHVpX1RpbWVyVmFsdWUwKSwKKwkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCQlicmVhazsKKworCWNhc2UgMjoKKwkJLy8gaW5pdCB0aW1lcjEgaW4gbW9kZSAyCisJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0KKwkJCShkZXZwcml2LT4KKwkJCWJfVGltZXJTZWxlY3RNb2RlICYgMHhGMykgfCBBUENJMzEyMF9USU1FUl8xX01PREVfMjsKKwkJb3V0YihkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSwKKwkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMSk7CisKKwkJLy9TZWxlY3QgVGltZXIgMQorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzFfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKwkJLy9TZXQgdGhlIGNvbnZlcnRpb24gdGltZQorCQlvdXR3KCgoVVNIT1JUKSB1aV9UaW1lclZhbHVlMSksCisJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQkvLyBpbml0IHRpbWVyMCBpbiBtb2RlIDIKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPQorCQkJKGRldnByaXYtPgorCQkJYl9UaW1lclNlbGVjdE1vZGUgJiAweEZDKSB8IEFQQ0kzMTIwX1RJTUVSXzBfTU9ERV8yOworCQlvdXRiKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlLAorCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQxKTsKKworCQkvL1NlbGVjdCBUaW1lciAwCisJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMF9XT1JEOworCQlvdXRiKGJfVG1wLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCisJCS8vU2V0IHRoZSBjb252ZXJ0aW9uIHRpbWUKKwkJb3V0dygoKFVTSE9SVCkgdWlfVGltZXJWYWx1ZTApLAorCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisJCWJyZWFrOworCisJfQorCS8vICAgIyMjIyMjIyMjI2NvbW1vbiBmb3IgYWxsIG1vZGVzIyMjIyMjIyMjIyMjIyMjIyMKKworCS8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBDbGVhcnMgdGhlIFNDQU4gYml0ICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqLworCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJLy9kZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3Rlcj1kZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciB8IEFQQ0kzMTIwX0RJU0FCTEVfU0NBTjsKKwlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9IGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyICYKKwkJQVBDSTMxMjBfRElTQUJMRV9TQ0FOOworCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCisJLy8gSWYgRE1BIGlzIGRpc2FibGVkCisJaWYgKGRldnByaXYtPnVzX1VzZURtYSA9PSBBUENJMzEyMF9ESVNBQkxFKSB7CisJCS8vIGRpc2FibGUgRU9DIGFuZCBlbmFibGUgRU9TCisJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0VPU19NT0RFOworCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0VOQUJMRTsKKworCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkoZGV2cHJpdi0+CisJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfRU9DX0lOVCkgfAorCQkJQVBDSTMxMjBfRU5BQkxFX0VPU19JTlQ7CisJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQlpZiAoIWRldnByaXYtPmJfQWlDb250aW51b3VzKSB7CisJCQkvLyBjb25maWd1cmUgVGltZXIyIEZvciBjb3VudGluZyAgRU9TCisJCQkvL1Jlc2V0IGdhdGUgMiBvZiBUaW1lciAyIHRvIGRpc2FibGUgaXQgKFNldCBCaXQgRDE0IHRvIDApCisJCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJdXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMjsKKwkJCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsCisJCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKworCQkJLy8gRElTQUJMRSBUSU1FUiBJTlRFUlJVUFQKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJQVBDSTMxMjBfRElTQUJMRV9USU1FUl9JTlQgJiAweEVGOworCQkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQkJLy8oMSkgSW5pdCB0aW1lciAyIGluIG1vZGUgMCBhbmQgd3JpdGUgdGltZXIgdmFsdWUKKwkJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJYl9UaW1lclNlbGVjdE1vZGUgJiAweDBGKSB8CisJCQkJQVBDSTMxMjBfVElNRVJfMl9NT0RFXzA7CisJCQlvdXRiKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlLAorCQkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMSk7CisKKwkJCS8vV3JpdGluZyBMT1cgV09SRAorCQkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfTE9XX1dPUkQ7CisJCQlvdXRiKGJfVG1wLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCQkJb3V0dyhMT1dPUkQodWlfVGltZXJWYWx1ZTIpLAorCQkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCisJCQkvL1dyaXRpbmcgSElHSCBXT1JECisJCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJCWJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyKSAmIDB4RjApIHwKKwkJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMl9ISUdIX1dPUkQ7CisJCQlvdXRiKGJfVG1wLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCQkJb3V0dyhISVdPUkQodWlfVGltZXJWYWx1ZTIpLAorCQkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCisJCQkvLygyKSBSZXNldCBGQ19USU1FUiBCSVQgIENsZWFyaW5nIHRpbWVyIHN0YXR1cyByZWdpc3RlcgorCQkJaW5iKGRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfU1RBVFVTX1JFR0lTVEVSKTsKKwkJCS8vIGVuYWJsZSB0aW1lciBjb3VudGVyIGFuZCBkaXNhYmxlIHdhdGNoIGRvZworCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCShkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciB8CisJCQkJQVBDSTMxMjBfRU5BQkxFX1RJTUVSX0NPVU5URVIpICYKKwkJCQlBUENJMzEyMF9ESVNBQkxFX1dBVENIRE9HOworCQkJLy8gc2VsZWN0IEVPUyBjbG9jayBpbnB1dCBmb3IgdGltZXIgMgorCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCWJfTW9kZVNlbGVjdFJlZ2lzdGVyIHwKKwkJCQlBUENJMzEyMF9USU1FUjJfU0VMRUNUX0VPUzsKKwkJCS8vIEVuYWJsZSB0aW1lcjIgIGludGVycnVwdAorCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCWJfTW9kZVNlbGVjdFJlZ2lzdGVyIHwKKwkJCQlBUENJMzEyMF9FTkFCTEVfVElNRVJfSU5UOworCQkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKwkJCWRldnByaXYtPmJfVGltZXIyTW9kZSA9IEFQQ0kzMTIwX0NPVU5URVI7CisJCQlkZXZwcml2LT5iX1RpbWVyMkludGVycnVwdCA9IEFQQ0kzMTIwX0VOQUJMRTsKKwkJfQorCX0gZWxzZSB7CisJCS8vIElmIERNQSBFbmFibGVkCisJCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJCS8vaW53KGRldi0+aW9iYXNlKzApOy8vIHJlc2V0IEVPQyBiaXQKKwkJLy9FTkQgSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0RNQV9NT0RFOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBEaXNhYmxlcyB0aGUgRU9DLCBFT1MgaW50ZXJydXB0ICAqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPSBkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQlBUENJMzEyMF9ESVNBQkxFX0VPQ19JTlQgJiBBUENJMzEyMF9ESVNBQkxFX0VPU19JTlQ7CisKKwkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCisJCWRtYWxlbjAgPSBkZXZwcml2LT51aV9EbWFCdWZmZXJTaXplWzBdOworCQlkbWFsZW4xID0gZGV2cHJpdi0+dWlfRG1hQnVmZmVyU2l6ZVsxXTsKKworCQlpZiAoIWRldnByaXYtPmJfQWlDb250aW51b3VzKSB7CisKKwkJCWlmIChkbWFsZW4wID4gKGRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyAqIGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDIpKSB7CS8vIG11c3Qgd2UgZmlsbCBmdWxsIGZpcnN0IGJ1ZmZlcj8KKwkJCQlkbWFsZW4wID0KKwkJCQkJZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zICoKKwkJCQkJZGV2cHJpdi0+dWlfQWlTY2FuTGVuZ3RoICogMjsKKwkJCX0gZWxzZSBpZiAoZG1hbGVuMSA+IChkZXZwcml2LT51aV9BaU5icm9mU2NhbnMgKiBkZXZwcml2LT51aV9BaVNjYW5MZW5ndGggKiAyIC0gZG1hbGVuMCkpCS8vIGFuZCBtdXN0IHdlIGZpbGwgZnVsbCBzZWNvbmQgYnVmZmVyIHdoZW4gZmlyc3QgaXMgb25jZSBmaWxsZWQ/CisJCQkJZG1hbGVuMSA9CisJCQkJCWRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyAqCisJCQkJCWRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDIgLSBkbWFsZW4wOworCQl9CisKKwkJaWYgKGRldnByaXYtPnVpX0FpRmxhZ3MgJiBUUklHX1dBS0VfRU9TKSB7CisJCQkvLyBkb24ndCB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8KKwkJCWlmIChkbWFsZW4wID4gKGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDIpKSB7CisJCQkJZG1hbGVuMCA9IGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDI7CisJCQkJaWYgKGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAmIDEpCisJCQkJCWRtYWxlbjAgKz0gMjsKKwkJCX0KKwkJCWlmIChkbWFsZW4xID4gKGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDIpKSB7CisJCQkJZG1hbGVuMSA9IGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAqIDI7CisJCQkJaWYgKGRldnByaXYtPnVpX0FpU2Nhbkxlbmd0aCAmIDEpCisJCQkJCWRtYWxlbjEgLT0gMjsKKwkJCQlpZiAoZG1hbGVuMSA8IDQpCisJCQkJCWRtYWxlbjEgPSA0OworCQkJfQorCQl9IGVsc2UgewkvLyBpc24ndCBvdXRwdXQgYnVmZiBzbWFsbGVyIHRoYXQgb3VyIERNQSBidWZmPworCQkJaWYgKGRtYWxlbjAgPiAoZGV2cHJpdi0+dWlfQWlEYXRhTGVuZ3RoKSkgeworCQkJCWRtYWxlbjAgPSBkZXZwcml2LT51aV9BaURhdGFMZW5ndGg7CisJCQl9CisJCQlpZiAoZG1hbGVuMSA+IChkZXZwcml2LT51aV9BaURhdGFMZW5ndGgpKSB7CisJCQkJZG1hbGVuMSA9IGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aDsKKwkJCX0KKwkJfQorCQlkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplWzBdID0gZG1hbGVuMDsKKwkJZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVsxXSA9IGRtYWxlbjE7CisKKwkJLy9Jbml0aWFsaXplIERNQQorCisJCS8vIFNldCBUcmFuc2ZlciBjb3VudCBlbmFibGUgYml0IGFuZCBBMlBfZmlmbyByZXNldCBiaXQgaW4gQUdDU1RTIHJlZ2lzdGVyCisJCS8vMQorCQl1aV9UbXAgPSBBR0NTVFNfVENfRU5BQkxFIHwgQUdDU1RTX1JFU0VUX0EyUF9GSUZPOworCQlvdXRsKHVpX1RtcCwgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQU1DQ19PUF9SRUdfQUdDU1RTKTsKKworCQkvLyBjaGFuZ2VkICBzaW5jZSAxNiBiaXQgaW50ZXJmYWNlIGZvciBhZGQgb24KKwkJLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRU5BQkxFIEJVUyBNQVNURVIgKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0dyhBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fTE9XLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCW91dHcoQVBDSTMxMjBfQUREX09OX0FHQ1NUU19ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9ISUdILAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCS8vIFRPIFZFUklGSUVECisJCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJCW91dHcoMHgxMDAwLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisJCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCisJCS8vMiAgTm8gY2hhbmdlCisJCS8vIEEyUCBGSUZPIE1BTkFHRU1FTlQKKwkJLy8gQTJQIGZpZm8gcmVzZXQgICYgdHJhbnNmZXIgY29udHJvbCBlbmFibGUKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogQTJQIEZJRk8gTUFOQUdFTUVOVCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRsKEFQQ0kzMTIwX0EyUF9GSUZPX01BTkFHRU1FTlQsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArCisJCQlBUENJMzEyMF9BTUNDX09QX01DU1IpOworCisJCS8vMworCQkvL2JlZ2lubmluZyBhZGRyZXNzIG9mIGRtYSBidWYKKwkJLy9UaGUgMzIgYml0IGFkZHJlc3Mgb2YgZG1hIGJ1ZmZlciBpcyBjb252ZXJ0ZWQgaW50byB0d28gMTYgYml0IGFkZHJlc3NlcworCQkvLyBDYW4gZG9uZSBieSB1c2luZyBfYXR0YWNoIGFuZCBwdXQgaW50byBpbnRvIGFuIGFycmF5CisJCS8vIGFycmF5IHVzZWQgbWF5IGJlIGZvciBkaWZmZXJuZXQgcGFnZXMKKworCQkvLyBETUEgU3RhcnQgQWRyZXNzIExvdworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KChkZXZwcml2LT51bF9EbWFCdWZmZXJId1swXSAmIDB4RkZGRiksCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBETUEgU3RhcnQgQWRyZXNzIEhpZ2ggKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV0FSX0hJR0gsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dygoZGV2cHJpdi0+dWxfRG1hQnVmZmVySHdbMF0gLyA2NTUzNiksCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJLy80CisJCS8vIGFtb3VudCBvZiBieXRlcyB0byBiZSB0cmFuc2ZlcmVkICBzZXQgdHJhbnNmZXIgY291bnQKKwkJLy8gdXNlZCBBRERPTiBNV1RDIHJlZ2lzdGVyCisJCS8vY29tbWVudGVkIHRlc3RpbmcgICAgICAgICAgICAgb3V0bChkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplWzBdLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uK0FNQ0NfT1BfUkVHX0FNV1RDKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBOYnIgb2YgYWNxdWlzaXRpb24gTE9XICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCW91dHcoQVBDSTMxMjBfQUREX09OX01XVENfTE9XLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoKGRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbMF0gJiAweEZGRkYpLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBOYnIgb2YgYWNxdWlzaXRpb24gSElHSCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdUQ19ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoKGRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbMF0gLyA2NTUzNiksCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJLy81CisJCS8vIFRvIGNvbmZpZ3VyZSBBMlAgRklGTworCQkvLyB0ZXN0aW5nIG91dGwoIEZJRk9fQURWQU5DRV9PTl9CWVRFXzIsZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjK0FNQ0NfT1BfUkVHX0lOVENTUik7CisKKwkJLyoqKioqKioqKioqKioqKioqKi8KKwkJLyogQTJQIEZJRk8gUkVTRVQgKi8KKwkJLyoqKioqKioqKioqKioqKioqKi8KKwkJLy8gVE8gVkVSSUZZCisJCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJCW91dGwoMHgwNDAwMDAwMFVMLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBTUNDX09QX1JFR19NQ1NSKTsKKwkJLy9FTkQgSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisKKwkJLy82CisJCS8vRU5BQkxFIEEyUCBGSUZPIFdSSVRFIEFORCBFTkFCTEUgQU1XRU4KKwkJLy8gQU1XRU5fRU5BQkxFIHwgQTJQX0ZJRk9fV1JJVEVfRU5BQkxFICgweDAxfDB4MDIpPTB4MDMKKwkJLy9CRUdJTiBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKwkJLy9vdXR3KDMsZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDQpOworCQkvL0VORCBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKworCQkvLzcKKwkJLy9pbml0aWFsaXNlIGVuZCBvZiBkbWEgaW50ZXJydXB0ICBBSU5UX1dSSVRFX0NPTVBMID0gRU5BQkxFX1dSSVRFX1RDX0lOVChBRERJKQorCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBBMlAgRklGTyBDT05GSUdVUkFURSwgRU5EIE9GIERNQSBJTlRFUlJVUFQgSU5JVCAqLworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlvdXRsKChBUENJMzEyMF9GSUZPX0FEVkFOQ0VfT05fQllURV8yIHwKKwkJCQlBUENJMzEyMF9FTkFCTEVfV1JJVEVfVENfSU5UKSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFNQ0NfT1BfUkVHX0lOVENTUik7CisKKwkJLy9CRUdJTiBKSyAwNy4wNS4wNDogQ29tcGFyaXNvbiBiZXR3ZWVuIFdJTjMyIGFuZCBMaW51eCBkcml2ZXIKKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRU5BQkxFIEEyUCBGSUZPIFdSSVRFIEFORCBFTkFCTEUgQU1XRU4gKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJb3V0dygzLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgNCk7CisJCS8vRU5EIEpLIDA3LjA1LjA0OiBDb21wYXJpc29uIGJldHdlZW4gV0lOMzIgYW5kIExpbnV4IGRyaXZlcgorCisJCS8qKioqKioqKioqKioqKioqKiovCisJCS8qIEEyUCBGSUZPIFJFU0VUICovCisJCS8qKioqKioqKioqKioqKioqKiovCisJCS8vQkVHSU4gSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJCW91dGwoMHgwNDAwMDAwMFVMLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTMxMjBfQU1DQ19PUF9NQ1NSKTsKKwkJLy9FTkQgSksgMDcuMDUuMDQ6IENvbXBhcmlzb24gYmV0d2VlbiBXSU4zMiBhbmQgTGludXggZHJpdmVyCisJfQorCisJaWYgKChkZXZwcml2LT51c19Vc2VEbWEgPT0gQVBDSTMxMjBfRElTQUJMRSkKKwkJJiYgIWRldnByaXYtPmJfQWlDb250aW51b3VzKSB7CisJCS8vIHNldCBnYXRlIDIgICB0byBzdGFydCBjb252ZXJzaW9uCisJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyIHwgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMjsKKwkJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwKKwkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisJfQorCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSAxOgorCQkvLyBzZXQgZ2F0ZSAwICAgdG8gc3RhcnQgY29udmVyc2lvbgorCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CisJCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciB8IEFQQ0kzMTIwX0VOQUJMRV9USU1FUjA7CisJCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsCisJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCQlicmVhazsKKwljYXNlIDI6CisJCS8vIHNldCAgZ2F0ZSAwIGFuZCBnYXRlIDEKKwkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgfCBBUENJMzEyMF9FTkFCTEVfVElNRVIxOworCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CisJCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciB8IEFQQ0kzMTIwX0VOQUJMRV9USU1FUjA7CisJCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsCisJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCQlicmVhazsKKworCX0KKworCXJldHVybiAwOworCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgCQkJSU5URVJOQUwgRlVOQ1RJT05TCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOiBpbnQgaV9BUENJMzEyMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KSAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IEhhcmR3YXJlIHJlc2V0IGZ1bmN0aW9uICAgCQkJCQkJICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBzaG9ydCB1c19UbXBWYWx1ZTsKKworCWRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9IEFQQ0kzMTIwX0RJU0FCTEU7CisJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9ESVNBQkxFOworCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0VPQ19NT0RFOworCWRldnByaXYtPnVpX0VvY0Vvc0NvbnZlcnNpb25UaW1lID0gMDsJLy8gc2V0IGVvYyBlb3MgY29udiB0aW1lIHRvIDAKKwlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IDA7CisKKwkvLyB2YXJpYWJsZXMgdXNlZCBpbiB0aW1lciBzdWJkZXZpY2UKKwlkZXZwcml2LT5iX1RpbWVyMk1vZGUgPSAwOworCWRldnByaXYtPmJfVGltZXIySW50ZXJydXB0ID0gMDsKKwlkZXZwcml2LT5iX0V4dHRyaWdFbmFibGUgPSAwOwkvLyBEaXNhYmxlIGV4dCB0cmlnZ2VyCisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLCB3YXRjaGRvZyBmb3IgdGhlIGFub2xvZyBvdXRwdXQgKi8KKwlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9IDA7CisJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkvLyBEaXNhYmxlcyBhbGwgY291bnRlcnMsIGV4dCB0cmlnZ2VyIGFuZCBjbGVhcnMgUEEsIFBSCisJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPSAwOworCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisKKwkvL0NvZGUgdG8gc2V0IHRoZSBhbGwgYW5vbG9nIG8vcCBjaGFubmVsIHRvIDB2CisJLy84MTkxIGlzIGRlY2ltYWwgdmFsdWUgZm9yIHplcm8oMCB2KXZvbHQgaW4gYmlwb2xhciBtb2RlKGRlZmF1bHQpCisJb3V0dyg4MTkxIHwgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfMSwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzEpOwkvL2NoYW5uZWwgMQorCW91dHcoODE5MSB8IEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzIsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8xKTsJLy9jaGFubmVsIDIKKwlvdXR3KDgxOTEgfCBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF8zLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX0FOQUxPR19PVVRQVVRfMSk7CS8vY2hhbm5lbCAzCisJb3V0dyg4MTkxIHwgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfNCwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzEpOwkvL2NoYW5uZWwgNAorCisJb3V0dyg4MTkxIHwgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfNSwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzIpOwkvL2NoYW5uZWwgNQorCW91dHcoODE5MSB8IEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzYsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8yKTsJLy9jaGFubmVsIDYKKwlvdXR3KDgxOTEgfCBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF83LCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX0FOQUxPR19PVVRQVVRfMik7CS8vY2hhbm5lbCA3CisJb3V0dyg4MTkxIHwgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfOCwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzIpOwkvL2NoYW5uZWwgOAorCisJLy8gIFJlc2V0IGRpZ2l0YWwgb3V0cHV0IHRvIEwwVworCisvL0VTMDUgIG91dGIoMHgwLGRldi0+aW9iYXNlK0FQQ0kzMTIwX0RJR0lUQUxfT1VUUFVUKTsKKwl1ZGVsYXkoMTApOworCisJaW53KGRldi0+aW9iYXNlICsgMCk7CS8vbWFrZSBhIGR1bW15IHJlYWQKKwlpbmIoZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRVNFVF9GSUZPKTsJLy8gZmx1c2ggRklGTworCWludyhkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CS8vIGZsdXNoIEEvRCBzdGF0dXMgcmVnaXN0ZXIKKworCS8vY29kZSB0byByZXNldCB0aGUgUkFNIHNlcXVlbmNlCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJdXNfVG1wVmFsdWUgPSBpIDw8IDg7CS8vc2VsZWN0IHRoZSBsb2NhdGlvbgorCQlvdXR3KHVzX1RtcFZhbHVlLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1NFUV9SQU1fQUREUkVTUyk7CisJfQorCXJldHVybiAwOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogaW50IGlfQVBDSTMxMjBfU2V0dXBDaGFubmVsTGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBpbnQgbl9jaGFuLHVuc2lnbmVkIGludCAqY2hhbmxpc3R8Cit8CQkJICAsY2hhciBjaGVjaykJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOlRoaXMgZnVuY3Rpb24gd2lsbCBmaXJzdCBjaGVjayBjaGFubmVsIGxpc3QgaXMgb2sgb3Igbm90fAorfGFuZCB0aGVuIGluaXRpYWxpemUgdGhlIHNlcXVlbmNlIFJBTSB3aXRoIHRoZSBwb2xhcml0eSwgR2FpbixDaGFubmVsIG51bWJlciB8Cit8SWYgdGhlIGxhc3QgYXJndW1lbnQgb2YgZnVuY3Rpb24gImNoZWNrImlzIDEgdGhlbiBpdCBvbmx5IGNoZWNrcyB0aGUgY2hhbm5lbHwKK3xsaXN0IGlzIG9rIG9yIG5vdC4JCQkJCQkJCQkJCQkgICAgIAkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBpbnQgbl9jaGFuICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorCQkJICB1bnNpZ25lZCBpbnQgKmNoYW5saXN0CisJCQkgIGNoYXIgY2hlY2sKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX1NldHVwQ2hhbm5lbExpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCBjaGFyIGNoZWNrKQoreworCXVuc2lnbmVkIGludCBpOwkJLy8sIGRpZmZlcmVuY2lhbD0wLCBiaXBvbGFyPTA7CisJdW5zaWduZWQgaW50IGdhaW47CisJdW5zaWduZWQgc2hvcnQgdXNfVG1wVmFsdWU7CisKKwkvKiBjb3JyZWN0IGNoYW5uZWwgYW5kIHJhbmdlIG51bWJlciBjaGVjayBpdHNlbGYgY29tZWRpL3JhbmdlLmMgKi8KKwlpZiAobl9jaGFuIDwgMSkgeworCQlpZiAoIWNoZWNrKQorCQkJY29tZWRpX2Vycm9yKGRldiwgInJhbmdlL2NoYW5uZWwgbGlzdCBpcyBlbXB0eSEiKTsKKwkJcmV0dXJuIDA7CisJfQorCS8vIEFsbCBpcyBvaywgc28gd2UgY2FuIHNldHVwIGNoYW5uZWwvcmFuZ2UgbGlzdAorCWlmIChjaGVjaykKKwkJcmV0dXJuIDE7CisKKwkvL0NvZGUgIHRvIHNldCB0aGUgUEEgYW5kIFBSLi4uSGVyZSBpdCBzZXQgUEEgdG8gMC4uCisJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciAmIEFQQ0kzMTIwX0NMRUFSX1BBX1BSOworCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0gKChuX2NoYW4gLSAxKSAmIDB4ZikgPDwgODsKKwlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLCBkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJZm9yIChpID0gMDsgaSA8IG5fY2hhbjsgaSsrKSB7CisJCS8vIHN0b3JlIHJhbmdlIGxpc3QgdG8gY2FyZAorCQl1c19UbXBWYWx1ZSA9IENSX0NIQU4oY2hhbmxpc3RbaV0pOwkvLyBnZXQgY2hhbm5lbCBudW1iZXI7CisKKwkJaWYgKENSX1JBTkdFKGNoYW5saXN0W2ldKSA8IEFQQ0kzMTIwX0JJUE9MQVJfUkFOR0VTKSB7CisJCQl1c19UbXBWYWx1ZSAmPSAoKH5BUENJMzEyMF9VTklQT0xBUikgJiAweGZmKTsJLy8gc2V0IGJpcG9sYXIKKwkJfSBlbHNlIHsKKwkJCXVzX1RtcFZhbHVlIHw9IEFQQ0kzMTIwX1VOSVBPTEFSOwkvLyBlbmFibGUgdW5pcG9sYXIuLi4uLi4KKwkJfQorCisJCWdhaW4gPSBDUl9SQU5HRShjaGFubGlzdFtpXSk7CS8vIGdldCBnYWluIG51bWJlcgorCQl1c19UbXBWYWx1ZSB8PSAoKGdhaW4gJiAweDAzKSA8PCA0KTsJLy88PDQgZm9yIEcwIGFuZCBHMSBiaXQgaW4gUkFNCisJCXVzX1RtcFZhbHVlIHw9IGkgPDwgODsJLy9UbyBzZWxlY3QgdGhlIFJBTSBMT0NBVElPTi4uLi4KKwkJb3V0dyh1c19UbXBWYWx1ZSwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9TRVFfUkFNX0FERFJFU1MpOworCisJCXByaW50aygiXG4gR2FpbiA9ICVpIiwKKwkJCSgoKHVuc2lnbmVkIGNoYXIpQ1JfUkFOR0UoY2hhbmxpc3RbaV0pICYgMHgwMykgPDwgMikpOworCQlwcmludGsoIlxuIENoYW5uZWwgPSAlaSIsIENSX0NIQU4oY2hhbmxpc3RbaV0pKTsKKwkJcHJpbnRrKCJcbiBQb2xhcml0eSA9ICVpIiwgdXNfVG1wVmFsdWUgJiBBUENJMzEyMF9VTklQT0xBUik7CisJfQorCXJldHVybiAxOwkJLy8gd2UgY2FuIHNlcnZlIHRoaXMgd2l0aCBzY2FuIGxvZ2ljCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOglpbnQgaV9BUENJMzEyMF9FeHR0cmlnRW5hYmxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiAJRW5hYmxlIHRoZSBleHRlcm5hbCB0cmlnZ2VyCQkJCQkJICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogCXN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAwICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0V4dHRyaWdFbmFibGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKwlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciB8PSBBUENJMzEyMF9FTkFCTEVfRVhUX1RSSUdHRVI7CisJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwgZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6IAlpbnQgaV9BUENJMzEyMF9FeHR0cmlnRGlzYWJsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiAJRGlzYWJsZXMgdGhlIGV4dGVybmFsIHRyaWdnZXIJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IAlzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgIDAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9FeHR0cmlnRGlzYWJsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciAmPSB+QVBDSTMxMjBfRU5BQkxFX0VYVF9UUklHR0VSOworCW91dHcoZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIsIGRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgIElOVEVSUlVQVCBGVU5DVElPTlMJCSAgICAJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogdm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKSAJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOkludGVycnVwdCBoYW5kbGVyIGZvciBBUENJMzEyMCAgICAgICAgICAgICAgICAgICAgICAgIAkgfAorfAkJCSBXaGVuIGludGVycnVwdCBvY2N1cnMgdGhpcyBnZXRzIGNhbGxlZC4gICAgICAgICAgICAgICAgIHwKK3wJCQkgRmlyc3QgaXQgZmluZHMgd2hpY2ggaW50ZXJydXB0IGhhcyBiZWVuIGdlbmVyYXRlZCBhbmQgICB8Cit8CQkJIGhhbmRsZXMgIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0ICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IAlpbnQgaXJxIAkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkCQkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IHZvaWQgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK3ZvaWQgdl9BUENJMzEyMF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlVU0hPUlQgaW50X2RhcTsKKworCXVuc2lnbmVkIGludCBpbnRfYW1jYywgdWlfQ2hlY2ssIGk7CisJVVNIT1JUIHVzX1RtcFZhbHVlOworCUJZVEUgYl9EdW1teVJlYWQ7CisKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJdWlfQ2hlY2sgPSAxOworCisJaW50X2RhcSA9IGludyhkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUykgJiAweGYwMDA7CS8vIGdldCBJUlEgcmVhc29ucworCWludF9hbWNjID0gaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFNQ0NfT1BfUkVHX0lOVENTUik7CS8vIGdldCBBTUNDIElOVCByZWdpc3RlcgorCisJaWYgKCghaW50X2RhcSkgJiYgKCEoaW50X2FtY2MgJiBBTllfUzU5M1hfSU5UKSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgIklSUSBmcm9tIHVua25vdyBzb3VyY2UiKTsKKwkJcmV0dXJuOworCX0KKworCW91dGwoaW50X2FtY2MgfCAweDAwZmYwMDAwLCBkZXZwcml2LT5pX0lvYmFzZUFtY2MgKyBBTUNDX09QX1JFR19JTlRDU1IpOwkvLyBzaHV0ZG93biBJUlEgcmVhc29ucyBpbiBBTUNDCisKKwlpbnRfZGFxID0gKGludF9kYXEgPj4gMTIpICYgMHhGOworCisJaWYgKGRldnByaXYtPmJfRXh0dHJpZ0VuYWJsZSA9PSBBUENJMzEyMF9FTkFCTEUpIHsKKwkJLy9EaXNhYmxlIGV4dCB0cmlnZ2VyCisJCWlfQVBDSTMxMjBfRXh0dHJpZ0Rpc2FibGUoZGV2KTsKKwkJZGV2cHJpdi0+Yl9FeHR0cmlnRW5hYmxlID0gQVBDSTMxMjBfRElTQUJMRTsKKwl9CisJLy9jbGVhciB0aGUgdGltZXIgMiBpbnRlcnJ1cHQKKwlpbmIoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQVBDSTMxMjBfVElNRVJfU1RBVFVTX1JFR0lTVEVSKTsKKworCWlmIChpbnRfYW1jYyAmIE1BU1RFUl9BQk9SVF9JTlQpCisJCWNvbWVkaV9lcnJvcihkZXYsICJBTUNDIElSUSAtIE1BU1RFUiBETUEgQUJPUlQhIik7CisJaWYgKGludF9hbWNjICYgVEFSR0VUX0FCT1JUX0lOVCkKKwkJY29tZWRpX2Vycm9yKGRldiwgIkFNQ0MgSVJRIC0gVEFSR0VUIERNQSBBQk9SVCEiKTsKKworCS8vIENrZWNrIGlmIEVPQyBpbnRlcnJ1cHQKKwlpZiAoKChpbnRfZGFxICYgMHg4KSA9PSAwKQorCQkmJiAoZGV2cHJpdi0+Yl9JbnRlcnJ1cHRNb2RlID09IEFQQ0kzMTIwX0VPQ19NT0RFKSkgeworCQlpZiAoZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPT0gQVBDSTMxMjBfRU5BQkxFKSB7CisKKwkJCS8vIFJlYWQgdGhlIEFJIFZhbHVlCisKKwkJCWRldnByaXYtPnVpX0FpUmVhZERhdGFbMF0gPQorCQkJCShVSU5UKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgMCk7CisJCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0RJU0FCTEU7CisJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJCX0gZWxzZSB7CisJCQkvL0Rpc2FibGUgRU9DIEludGVycnVwdAorCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCWJfTW9kZVNlbGVjdFJlZ2lzdGVyICYgQVBDSTMxMjBfRElTQUJMRV9FT0NfSU5UOworCQkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJfQorCX0KKworCS8vIENoZWNrIElmIEVPUyBpbnRlcnJ1cHQKKwlpZiAoKGludF9kYXEgJiAweDIpICYmIChkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPT0gQVBDSTMxMjBfRU9TX01PREUpKSB7CisKKwkJaWYgKGRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID09IEFQQ0kzMTIwX0VOQUJMRSkJLy8gZW5hYmxlIHRoaXMgaW4gd2l0aG91dCBETUEgPz8/CisJCXsKKworCQkJaWYgKGRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9PSBBUENJMzEyMF9FTkFCTEUpIHsKKwkJCQl1aV9DaGVjayA9IDA7CisJCQkJaV9BUENJMzEyMF9JbnRlcnJ1cHRIYW5kbGVFb3MoZGV2KTsKKwkJCQlkZXZwcml2LT51aV9BaUFjdHVhbFNjYW4rKzsKKwkJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJCWRldnByaXYtPgorCQkJCQliX01vZGVTZWxlY3RSZWdpc3RlciB8CisJCQkJCUFQQ0kzMTIwX0VOQUJMRV9FT1NfSU5UOworCQkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJCWRldi0+aW9iYXNlICsKKwkJCQkJQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QpOworCQkJfSBlbHNlIHsKKwkJCQl1aV9DaGVjayA9IDA7CisJCQkJZm9yIChpID0gMDsgaSA8IGRldnByaXYtPnVpX0FpTmJyb2ZDaGFubmVsczsKKwkJCQkJaSsrKSB7CisJCQkJCXVzX1RtcFZhbHVlID0gaW53KGRldnByaXYtPmlvYmFzZSArIDApOworCQkJCQlkZXZwcml2LT51aV9BaVJlYWREYXRhW2ldID0KKwkJCQkJCShVSU5UKSB1c19UbXBWYWx1ZTsKKwkJCQl9CisJCQkJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9ESVNBQkxFOworCQkJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0VPQ19NT0RFOworCisJCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsJLy8gc2VuZCBzaWduYWwgdG8gdGhlIHNhbXBsZQorCisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfRU9TX0lOVDsKKwkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisJCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0RJU0FCTEU7CS8vRGVmYXVsdCBzZXR0aW5ncworCQkJZGV2cHJpdi0+Yl9JbnRlcnJ1cHRNb2RlID0gQVBDSTMxMjBfRU9DX01PREU7CisJCX0KKworCX0KKwkvL1RpbWVyMiBpbnRlcnJ1cHQKKwlpZiAoaW50X2RhcSAmIDB4MSkgeworCisJCXN3aXRjaCAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlKSB7CisJCWNhc2UgQVBDSTMxMjBfQ09VTlRFUjoKKworCQkJZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uID0gQVBDSTMxMjBfRElTQUJMRTsKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfRU9TX0lOVDsKKwkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJCS8vIHN0b3AgdGltZXIgMgorCQkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQkJCWRldnByaXYtPgorCQkJCXVzX091dHB1dFJlZ2lzdGVyICYgQVBDSTMxMjBfRElTQUJMRV9BTExfVElNRVI7CisJCQlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLAorCQkJCWRldi0+aW9iYXNlICsgQVBDSTMxMjBfV1JfQUREUkVTUyk7CisKKwkJCS8vc3RvcCB0aW1lciAwIGFuZCB0aW1lciAxCisJCQlpX0FQQ0kzMTIwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihkZXYsIHMpOworCQkJZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uID0gQVBDSTMxMjBfRElTQUJMRTsKKworCQkJLy9VUERBVEUtMC43LjU3LT4wLjcuNjhjb21lZGlfZG9uZShkZXYscyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBBUENJMzEyMF9USU1FUjoKKworCQkJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisJCQlicmVhazsKKworCQljYXNlIEFQQ0kzMTIwX1dBVENIRE9HOgorCisJCQkvL1NlbmQgYSBzaWduYWwgdG8gZnJvbSBrZXJuZWwgdG8gdXNlciBzcGFjZQorCQkJc2VuZF9zaWcoU0lHSU8sIGRldnByaXYtPnRza19DdXJyZW50LCAwKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisKKwkJCS8vIGRpc2FibGUgVGltZXIgSW50ZXJydXB0CisKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJQVBDSTMxMjBfRElTQUJMRV9USU1FUl9JTlQ7CisKKwkJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCisJCQkJZGV2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJfQorCisJCWJfRHVtbXlSZWFkID0gaW5iKGRldi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfU1RBVFVTX1JFR0lTVEVSKTsKKworCX0KKworCWlmICgoaW50X2RhcSAmIDB4NCkgJiYgKGRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9PSBBUENJMzEyMF9ETUFfTU9ERSkpIHsKKwkJaWYgKGRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9PSBBUENJMzEyMF9FTkFCTEUpIHsKKworCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDbGVhciBUaW1lciBXcml0ZSBUQyBJTlQgKi8KKwkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKEFQQ0kzMTIwX0NMRUFSX1dSSVRFX1RDX0lOVCwKKwkJCQlkZXZwcml2LT5pX0lvYmFzZUFtY2MgKworCQkJCUFQQ0kzMTIwX0FNQ0NfT1BfUkVHX0lOVENTUik7CisKKwkJCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDbGVhcnMgdGhlIHRpbWVyIHN0YXR1cyByZWdpc3RlciAqLworCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCWludyhkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7CisJCQl2X0FQQ0kzMTIwX0ludGVycnVwdERtYShpcnEsIGQpOwkvLyBkbyBzb21lIGRhdGEgdHJhbnNmZXIKKwkJfSBlbHNlIHsKKwkJCS8qIFN0b3BzIHRoZSBUaW1lciAqLworCQkJb3V0dyhkZXZwcml2LT4KKwkJCQl1c19PdXRwdXRSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVIwICYKKwkJCQlBUENJMzEyMF9ESVNBQkxFX1RJTUVSMSwKKwkJCQlkZXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCQl9CisKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0ludGVycnVwdEhhbmRsZUVvcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KSAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBFT1MgaW50ZXJydXB0LiAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGFjcXVpcmVkIGRhdGEoZnJvbSBGSUZPKSAgICAgIHwKK3wJCQkJdG8gQ29tZWRpIGJ1ZmZlci4JCSAJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMCAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKyAqIGludCBpX0FQQ0kzMTIwX0ludGVycnVwdEhhbmRsZUVvcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQoreworICAgICAgIGludCBuX2NoYW4saTsKKyAgICAgICBzaG9ydCAqZGF0YTsKKyAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcz1kZXYtPnN1YmRldmljZXMrMDsKKyAgICAgICBzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworICAgICAgIGRhdGE9YXN5bmMtPmRhdGErYXN5bmMtPmJ1Zl9pbnRfcHRyOworICAgICAgICBuX2NoYW49ZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzOworCisgICAgICAgZm9yKGk9MDtpPG5fY2hhbjtpKyspCisgICAgICAgICB7CisgICAgICAgICAgIGRhdGFbaV09aW53KGRldi0+aW9iYXNlKzApOworICAgICAgICAgfQorICAgICAgIGFzeW5jLT5idWZfaW50X2NvdW50Kz1uX2NoYW4qc2l6ZW9mKHNob3J0KTsKKyAgICAgICBhc3luYy0+YnVmX2ludF9wdHIrPW5fY2hhbipzaXplb2Yoc2hvcnQpOworICAgICAgIGNvbWVkaV9lb3MoZGV2LHMpOworICAgICAgIGlmIChzLT5hc3luYy0+YnVmX2ludF9wdHI+PXMtPmFzeW5jLT5kYXRhX2xlbikgLy8gIGZvciBidWZmZXIgcm9vbCBvdmVyCisJCSAgICAgICAgIHsKKyovLyogYnVmZmVyIHJvbGxvdmVyICovCisvKgkgICAgICAgIHMtPmFzeW5jLT5idWZfaW50X3B0cj0wOworCQljb21lZGlfZW9idWYoZGV2LHMpOworICAgICAgICAgfQorIAlyZXR1cm4gMDsKK30qLworaW50IGlfQVBDSTMxMjBfSW50ZXJydXB0SGFuZGxlRW9zKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBuX2NoYW4sIGk7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWludCBlcnIgPSAxOworCisJbl9jaGFuID0gZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzOworCisJcy0+YXN5bmMtPmV2ZW50cyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuOyBpKyspCisJCWVyciAmPSBjb21lZGlfYnVmX3B1dChzLT5hc3luYywgaW53KGRldi0+aW9iYXNlICsgMCkpOworCisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOworCisJaWYgKGVyciA9PSAwKQorCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOiB2b2lkIHZfQVBDSTMxMjBfSW50ZXJydXB0RG1hKGludCBpcnEsIHZvaWQgKmQpIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBUaGlzIGlzIGEgaGFuZGxlciBmb3IgdGhlIERNQSBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgfAorfAkJCSAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGRhdGEgdG8gQ29tZWRpIEJ1ZmZlci4gICAgICAgIHwKK3wJCQkgIEZvciBjb250aW51b3VzIERNQSBpdCByZWluaXRpYWxpemVzIHRoZSBETUEgb3BlcmF0aW9uLiB8Cit8CQkJICBGb3Igc2luZ2xlIG1vZGUgRE1BIGl0IHN0b3AgdGhlIGFjcXVpc2l0aW9uLiAgICAgICAgICAgfAorfAkJCQkJCQkJCQkJCQkgICAgIAkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBpbnQgaXJxLCB2b2lkICpkCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogIHZvaWQgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKwordm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdERtYShpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwl1bnNpZ25lZCBpbnQgbmV4dF9kbWFfYnVmLCBzYW1wbGVzaW5idWY7CisJdW5zaWduZWQgbG9uZyBsb3dfd29yZCwgaGlnaF93b3JkLCB2YXI7CisKKwlVSU5UIHVpX1RtcDsKKwlzYW1wbGVzaW5idWYgPQorCQlkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplW2RldnByaXYtPnVpX0RtYUFjdHVhbEJ1ZmZlcl0gLQorCQlpbmwoZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQU1DQ19PUF9SRUdfTVdUQyk7CisKKwlpZiAoc2FtcGxlc2luYnVmIDwKKwkJZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVtkZXZwcml2LT51aV9EbWFBY3R1YWxCdWZmZXJdKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJJbnRlcnJ1cHRlZCBETUEgdHJhbnNmZXIhIik7CisJfQorCWlmIChzYW1wbGVzaW5idWYgJiAxKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJPZGQgY291bnQgb2YgYnl0ZXMgaW4gRE1BIHJpbmchIik7CisJCWlfQVBDSTMxMjBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uKGRldiwgcyk7CisJCWRldnByaXYtPmJfQWlDeWNsaWNBY3F1aXNpdGlvbiA9IEFQQ0kzMTIwX0RJU0FCTEU7CisKKwkJcmV0dXJuOworCX0KKwlzYW1wbGVzaW5idWYgPSBzYW1wbGVzaW5idWYgPj4gMTsJLy8gbnVtYmVyIG9mIHJlY2VpdmVkIHNhbXBsZXMKKwlpZiAoZGV2cHJpdi0+Yl9EbWFEb3VibGVCdWZmZXIpIHsKKwkJLy8gc3dpdGNoIERNQSBidWZmZXJzIGlmIGlzIHVzZWQgZG91YmxlIGJ1ZmZlcmluZworCQluZXh0X2RtYV9idWYgPSAxIC0gZGV2cHJpdi0+dWlfRG1hQWN0dWFsQnVmZmVyOworCisJCXVpX1RtcCA9IEFHQ1NUU19UQ19FTkFCTEUgfCBBR0NTVFNfUkVTRVRfQTJQX0ZJRk87CisJCW91dGwodWlfVG1wLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgQU1DQ19PUF9SRUdfQUdDU1RTKTsKKworCQkvLyBjaGFuZ2VkICBzaW5jZSAxNiBiaXQgaW50ZXJmYWNlIGZvciBhZGQgb24KKwkJb3V0dyhBUENJMzEyMF9BRERfT05fQUdDU1RTX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fTE9XLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9BR0NTVFNfSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KEFQQ0kzMTIwX0VOQUJMRV9UUkFOU0ZFUl9BRERfT05fSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOwkvLyAweDEwMDAgaXMgb3V0IHB1dHRlZCBpbiB3aW5kb3dzIGRyaXZlcgorCisJCXZhciA9IGRldnByaXYtPnVsX0RtYUJ1ZmZlckh3W25leHRfZG1hX2J1Zl07CisJCWxvd193b3JkID0gdmFyICYgMHhmZmZmOworCQl2YXIgPSBkZXZwcml2LT51bF9EbWFCdWZmZXJId1tuZXh0X2RtYV9idWZdOworCQloaWdoX3dvcmQgPSB2YXIgLyA2NTUzNjsKKworCQkvKiBETUEgU3RhcnQgQWRyZXNzIExvdyAqLworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV0FSX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KGxvd193b3JkLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJLyogRE1BIFN0YXJ0IEFkcmVzcyBIaWdoICovCisJCW91dHcoQVBDSTMxMjBfQUREX09OX01XQVJfSElHSCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KGhpZ2hfd29yZCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCisJCXZhciA9IGRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbbmV4dF9kbWFfYnVmXTsKKwkJbG93X3dvcmQgPSB2YXIgJiAweGZmZmY7CisJCXZhciA9IGRldnByaXYtPnVpX0RtYUJ1ZmZlclVzZXNpemVbbmV4dF9kbWFfYnVmXTsKKwkJaGlnaF93b3JkID0gdmFyIC8gNjU1MzY7CisKKwkJLyogTmJyIG9mIGFjcXVpc2l0aW9uIExPVyAqLworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV1RDX0xPVywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDApOworCQlvdXR3KGxvd193b3JkLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJLyogTmJyIG9mIGFjcXVpc2l0aW9uIEhJR0ggKi8KKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdUQ19ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoaGlnaF93b3JkLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJLy8gVG8gY29uZmlndXJlIEEyUCBGSUZPCisJCS8vIEVOQUJMRSBBMlAgRklGTyBXUklURSBBTkQgRU5BQkxFIEFNV0VOCisJCS8vIEFNV0VOX0VOQUJMRSB8IEEyUF9GSUZPX1dSSVRFX0VOQUJMRSAoMHgwMXwweDAyKT0weDAzCisJCW91dHcoMywgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDQpOworCQkvL2luaXRpYWxpc2UgZW5kIG9mIGRtYSBpbnRlcnJ1cHQgIEFJTlRfV1JJVEVfQ09NUEwgPSBFTkFCTEVfV1JJVEVfVENfSU5UKEFEREkpCisJCW91dGwoKEFQQ0kzMTIwX0ZJRk9fQURWQU5DRV9PTl9CWVRFXzIgfAorCQkJCUFQQ0kzMTIwX0VOQUJMRV9XUklURV9UQ19JTlQpLAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKworCX0KKy8qVVBEQVRFLTAuNy41Ny0+MC43LjY4CisJcHRyPShzaG9ydCAqKWRldnByaXYtPnVsX0RtYUJ1ZmZlclZpcnR1YWxbZGV2cHJpdi0+dWlfRG1hQWN0dWFsQnVmZmVyXTsKKworCisJLy8gaWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBsZWZ0IGluIHRoZSBidWZmZXIgdG8gY29weSBhbGwgZGF0YSBjb250YWluZWQgaW4gdGhlIERNQUJ1ZmZlclZpcnR1YWwKKwlpZihzLT5hc3luYy0+YnVmX2ludF9wdHIrc2FtcGxlc2luYnVmKnNpemVvZihzaG9ydCk+PWRldnByaXYtPnVpX0FpRGF0YUxlbmd0aCkKKwl7CisJCW09KGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aC1zLT5hc3luYy0+YnVmX2ludF9wdHIpL3NpemVvZihzaG9ydCk7CisJCXZfQVBDSTMxMjBfSW50ZXJydXB0RG1hTW92ZUJsb2NrMTZiaXQoZGV2LHMsKHZvaWQgKilwdHIsKCh2b2lkICopKGRldnByaXYtPkFpRGF0YSkpK3MtPmFzeW5jLT5idWZfaW50X3B0cixtKTsKKwkJcy0+YXN5bmMtPmJ1Zl9pbnRfY291bnQrPW0qc2l6ZW9mKHNob3J0KTsKKwkJcHRyKz1tKnNpemVvZihzaG9ydCk7CisgICAgICAgICAgICAgICAgc2FtcGxlc2luYnVmLT1tOworCQlzLT5hc3luYy0+YnVmX2ludF9wdHI9MDsKKwkJY29tZWRpX2VvYnVmKGRldixzKTsKKwl9CisKKwlpZiAoc2FtcGxlc2luYnVmKQorCXsKKwkgICAgICAgIHZfQVBDSTMxMjBfSW50ZXJydXB0RG1hTW92ZUJsb2NrMTZiaXQoZGV2LHMsKHZvaWQgKilwdHIsKCh2b2lkICopKGRldnByaXYtPkFpRGF0YSkpK3MtPmFzeW5jLT5idWZfaW50X3B0cixzYW1wbGVzaW5idWYpOworCisJCXMtPmFzeW5jLT5idWZfaW50X2NvdW50Kz1zYW1wbGVzaW5idWYqc2l6ZW9mKHNob3J0KTsKKwkJcy0+YXN5bmMtPmJ1Zl9pbnRfcHRyKz1zYW1wbGVzaW5idWYqc2l6ZW9mKHNob3J0KTsKKwkJaWYgKCEoZGV2cHJpdi0+dWlfQWlGbGFncyAmIFRSSUdfV0FLRV9FT1MpKQorCQl7CisJCQljb21lZGlfYnVmY2hlY2soZGV2LHMpOworICAgICAgICAgICAgICAgIH0KKwl9CisJaWYgKCFkZXZwcml2LT5iX0FpQ29udGludW91cykKKwlpZiAoIGRldnByaXYtPnVpX0FpQWN0dWFsU2Nhbj49ZGV2cHJpdi0+dWlfQWlOYnJvZlNjYW5zICkKKwl7CisJICAgIC8vIGFsbCBkYXRhIHNhbXBsZWQKKwkgICAgaV9BUENJMzEyMF9TdG9wQ3ljbGljQWNxdWlzaXRpb24oZGV2LHMpOworICAgICAgICAgICAgZGV2cHJpdi0+Yl9BaUN5Y2xpY0FjcXVpc2l0aW9uPUFQQ0kzMTIwX0RJU0FCTEU7CisJICAgIC8vRFBSSU5USygiXG4gU2luZ2xlIERNQSBjb21wbGV0ZWQuLlxuIik7CisJCWNvbWVkaV9kb25lKGRldixzKTsKKyAgICAgICAgICAgIAlyZXR1cm47CisJfQorKi8KKwlpZiAoc2FtcGxlc2luYnVmKSB7CisJCXZfQVBDSTMxMjBfSW50ZXJydXB0RG1hTW92ZUJsb2NrMTZiaXQoZGV2LCBzLAorCQkJZGV2cHJpdi0+dWxfRG1hQnVmZmVyVmlydHVhbFtkZXZwcml2LT4KKwkJCQl1aV9EbWFBY3R1YWxCdWZmZXJdLCBzYW1wbGVzaW5idWYpOworCisJCWlmICghKGRldnByaXYtPnVpX0FpRmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgeworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCX0KKwl9CisJaWYgKCFkZXZwcml2LT5iX0FpQ29udGludW91cykKKwkJaWYgKGRldnByaXYtPnVpX0FpQWN0dWFsU2NhbiA+PSBkZXZwcml2LT51aV9BaU5icm9mU2NhbnMpIHsKKwkJCS8vIGFsbCBkYXRhIHNhbXBsZWQKKwkJCWlfQVBDSTMxMjBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uKGRldiwgcyk7CisJCQlkZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb24gPSBBUENJMzEyMF9ESVNBQkxFOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQlyZXR1cm47CisJCX0KKworCWlmIChkZXZwcml2LT5iX0RtYURvdWJsZUJ1ZmZlcikgewkvLyBzd2l0Y2ggZG1hIGJ1ZmZlcnMKKwkJZGV2cHJpdi0+dWlfRG1hQWN0dWFsQnVmZmVyID0gMSAtIGRldnByaXYtPnVpX0RtYUFjdHVhbEJ1ZmZlcjsKKwl9IGVsc2UgeworCQkvLyByZXN0YXJ0IERNQSBpZiBpcyBub3QgdXNlZCBkb3VibGUgYnVmZmVyaW5nCisJCS8vQURERUQgUkVJTklUSUFMSVNFIFRIRSBETUEKKwkJdWlfVG1wID0gQUdDU1RTX1RDX0VOQUJMRSB8IEFHQ1NUU19SRVNFVF9BMlBfRklGTzsKKwkJb3V0bCh1aV9UbXAsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyBBTUNDX09QX1JFR19BR0NTVFMpOworCisJCS8vIGNoYW5nZWQgIHNpbmNlIDE2IGJpdCBpbnRlcmZhY2UgZm9yIGFkZCBvbgorCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9BR0NTVFNfTE9XLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9MT1csCisJCQlkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisJCW91dHcoQVBDSTMxMjBfQUREX09OX0FHQ1NUU19ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoQVBDSTMxMjBfRU5BQkxFX1RSQU5TRkVSX0FERF9PTl9ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CS8vCisJCS8vIEEyUCBGSUZPIE1BTkFHRU1FTlQKKwkJLy8gQTJQIGZpZm8gcmVzZXQgICYgdHJhbnNmZXIgY29udHJvbCBlbmFibGUKKwkJb3V0bChBUENJMzEyMF9BMlBfRklGT19NQU5BR0VNRU5ULAorCQkJZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgQU1DQ19PUF9SRUdfTUNTUik7CisKKwkJdmFyID0gZGV2cHJpdi0+dWxfRG1hQnVmZmVySHdbMF07CisJCWxvd193b3JkID0gdmFyICYgMHhmZmZmOworCQl2YXIgPSBkZXZwcml2LT51bF9EbWFCdWZmZXJId1swXTsKKwkJaGlnaF93b3JkID0gdmFyIC8gNjU1MzY7CisJCW91dHcoQVBDSTMxMjBfQUREX09OX01XQVJfTE9XLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcobG93X3dvcmQsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdBUl9ISUdILCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMCk7CisJCW91dHcoaGlnaF93b3JkLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uICsgMik7CisKKwkJdmFyID0gZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVswXTsKKwkJbG93X3dvcmQgPSB2YXIgJiAweGZmZmY7CS8vY2hhbmdlZAorCQl2YXIgPSBkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplWzBdOworCQloaWdoX3dvcmQgPSB2YXIgLyA2NTUzNjsKKwkJb3V0dyhBUENJMzEyMF9BRERfT05fTVdUQ19MT1csIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dyhsb3dfd29yZCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbiArIDIpOworCQlvdXR3KEFQQ0kzMTIwX0FERF9PTl9NV1RDX0hJR0gsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAwKTsKKwkJb3V0dyhoaWdoX3dvcmQsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyAyKTsKKworCQkvLyBUbyBjb25maWd1cmUgQTJQIEZJRk8KKwkJLy9FTkFCTEUgQTJQIEZJRk8gV1JJVEUgQU5EIEVOQUJMRSBBTVdFTgorCQkvLyBBTVdFTl9FTkFCTEUgfCBBMlBfRklGT19XUklURV9FTkFCTEUgKDB4MDF8MHgwMik9MHgwMworCQlvdXR3KDMsIGRldnByaXYtPmlfSW9iYXNlQWRkb24gKyA0KTsKKwkJLy9pbml0aWFsaXNlIGVuZCBvZiBkbWEgaW50ZXJydXB0ICBBSU5UX1dSSVRFX0NPTVBMID0gRU5BQkxFX1dSSVRFX1RDX0lOVChBRERJKQorCQlvdXRsKChBUENJMzEyMF9GSUZPX0FEVkFOQ0VfT05fQllURV8yIHwKKwkJCQlBUENJMzEyMF9FTkFCTEVfV1JJVEVfVENfSU5UKSwKKwkJCWRldnByaXYtPmlfSW9iYXNlQW1jYyArIEFNQ0NfT1BfUkVHX0lOVENTUik7CisJfQorfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDp2b2lkIHZfQVBDSTMxMjBfSW50ZXJydXB0RG1hTW92ZUJsb2NrMTZiaXQoY29tZWRpX2RldmljZXwKK3wqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHNob3J0ICpkbWEsc2hvcnQgKmRhdGEsaW50IG4pCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGRhdGEgZnJvbSBETUEgYnVmZmVyIHRvIHRoZSAgIHwKK3wJCQkJIENvbWVkaSBidWZmZXIgIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHNob3J0ICpkbWEJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc2hvcnQgKmRhdGEsaW50IG4gICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiB2b2lkICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKnZvaWQgdl9BUENJMzEyMF9JbnRlcnJ1cHREbWFNb3ZlQmxvY2sxNmJpdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHNob3J0ICpkbWEsc2hvcnQgKmRhdGEsaW50IG4pCit7CisJaW50IGksaixtOworCisJaj1zLT5hc3luYy0+Y3VyX2NoYW47CisJbT1kZXZwcml2LT51aV9BaUFjdHVhbFNjYW5Qb3NpdGlvbjsKKyAgICAgICAgZm9yKGk9MDtpPG47aSsrKQorCXsKKwkJKmRhdGE9KmRtYTsKKyAgIAkJZGF0YSsrOyBkbWErKzsKKwkJaisrOworCQlpZihqPj1kZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHMpCisJCXsKKwkJCW0rPWo7CisJCQlqPTA7CisJCQlpZihtPj1kZXZwcml2LT51aV9BaVNjYW5MZW5ndGgpCisJCQl7CisJCQkJbT0wOworCQkJICAgICAgICBkZXZwcml2LT51aV9BaUFjdHVhbFNjYW4rKzsKKwkJCQlpZiAoZGV2cHJpdi0+dWlfQWlGbGFncyAmIFRSSUdfV0FLRV9FT1MpCis7Ly9VUERBVEUtMC43LjU3LT4wLjcuNjgJCQkJCWNvbWVkaV9lb3MoZGV2LHMpOworCQkJfQorCQl9CisJfQorICAgICAgICBkZXZwcml2LT51aV9BaUFjdHVhbFNjYW5Qb3NpdGlvbj1tOworCXMtPmFzeW5jLT5jdXJfY2hhbj1qOworCit9CisqLwordm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdERtYU1vdmVCbG9jazE2Yml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc2hvcnQgKiBkbWFfYnVmZmVyLCB1bnNpZ25lZCBpbnQgbnVtX3NhbXBsZXMpCit7CisJZGV2cHJpdi0+dWlfQWlBY3R1YWxTY2FuICs9CisJCShzLT5hc3luYy0+Y3VyX2NoYW4gKyBudW1fc2FtcGxlcykgLyBkZXZwcml2LT51aV9BaVNjYW5MZW5ndGg7CisJcy0+YXN5bmMtPmN1cl9jaGFuICs9IG51bV9zYW1wbGVzOworCXMtPmFzeW5jLT5jdXJfY2hhbiAlPSBkZXZwcml2LT51aV9BaVNjYW5MZW5ndGg7CisKKwljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRtYV9idWZmZXIsIG51bV9zYW1wbGVzICogc2l6ZW9mKHNob3J0KSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FUiBTVUJERVZJQ0UgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0luc25Db25maWdUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCAgICAgICAgICB8Cit8CXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpIAkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpDb25maWd1cmUgVGltZXIgMiAgCQkJCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhIAkJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXT0gVElNRVIgIGNvbmZpZ3VyZSBhcyB0aW1lciAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgCQkJCSA9IFdBVENIRE9HIGNvbmZpZ3VyZSBhcyB3YXRjaGRvZwkJCQkgfAorfCAgICAgICAJCQkgIGRhdGFbMV0gPSBUaW1lciBjb25zdGFudAkJCQkJCQkgfAorfCAgICAgICAJCQkgIGRhdGFbMl0gPSBUaW1lcjIgaW50ZXJydXB0ICgxKWVuYWJsZSBvcigwKSBkaXNhYmxlIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9JbnNuQ29uZmlnVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJVUlOVCB1aV9UaW1lcnZhbHVlMjsKKwlVU0hPUlQgdXNfVG1wVmFsdWU7CisJQllURSBiX1RtcDsKKworCWlmICghZGF0YVsxXSkKKwkJY29tZWRpX2Vycm9yKGRldiwgImNvbmZpZzpObyB0aW1lciBjb25zdGFudCAhIik7CisKKwlkZXZwcml2LT5iX1RpbWVyMkludGVycnVwdCA9IChCWVRFKSBkYXRhWzJdOwkvLyBzYXZlIGluZm8gd2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZSBpbnRlcnJ1cHQKKworCXVpX1RpbWVydmFsdWUyID0gZGF0YVsxXSAvIDEwMDA7CS8vIGNvbnZlcnQgbmFubyBzZWNvbmRzICB0byB1IHNlY29uZHMKKworCS8vdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuQ29uZmlnVGltZXIoZGV2LCB1aV9UaW1lcnZhbHVlMiwoQllURSlkYXRhWzBdKTsKKwl1c19UbXBWYWx1ZSA9IChVU0hPUlQpIGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRF9TVEFUVVMpOworCisJLy9FTDI1MDgwNDogVGVzdGluZyBpZiBib2FyZCBBUENJMzEyMCBoYXZlIHRoZSBuZXcgUXVhcnR6IG9yIGlmIGl0IGlzIGFuIEFQQ0kzMDAxCisJLy8gYW5kIGNhbGN1bGF0ZSB0aGUgdGltZSB2YWx1ZSB0byBzZXQgaW4gdGhlIHRpbWVyCisJaWYgKCh1c19UbXBWYWx1ZSAmIDB4MDBCMCkgPT0gMHgwMEIwCisJCXx8ICFzdHJjbXAodGhpc19ib2FyZC0+cGNfRHJpdmVyTmFtZSwgImFwY2kzMDAxIikpIHsKKwkJLy9DYWxjdWxhdGUgdGhlIHRpbWUgdmFsdWUgdG8gc2V0IGluIHRoZSB0aW1lcgorCQl1aV9UaW1lcnZhbHVlMiA9IHVpX1RpbWVydmFsdWUyIC8gNTA7CisJfSBlbHNlIHsKKwkJLy9DYWxjdWxhdGUgdGhlIHRpbWUgdmFsdWUgdG8gc2V0IGluIHRoZSB0aW1lcgorCQl1aV9UaW1lcnZhbHVlMiA9IHVpX1RpbWVydmFsdWUyIC8gNzA7CisJfQorCisJLy9SZXNldCBnYXRlIDIgb2YgVGltZXIgMiB0byBkaXNhYmxlIGl0IChTZXQgQml0IEQxNCB0byAwKQorCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KKwkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMjsKKwlvdXR3KGRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKworCS8vIERpc2FibGUgVElNRVIgSW50ZXJydXB0CisJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQlkZXZwcml2LT4KKwkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSX0lOVCAmIDB4RUY7CisKKwkvLyBEaXNhYmxlIEVvYyBhbmQgRW9zIEludGVycnVwdHMKKwlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCWRldnByaXYtPgorCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfRU9DX0lOVCAmCisJCUFQQ0kzMTIwX0RJU0FCTEVfRU9TX0lOVDsKKwlvdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisJaWYgKGRhdGFbMF0gPT0gQVBDSTMxMjBfVElNRVIpCS8vaW5pdGlhbGl6ZSB0aW1lcgorCXsKKworCQkvL2RldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyPWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyfCBBUENJMzEyMF9FTkFCTEVfVElNRVJfSU5UIDsKKwkJLy9vdXRiKGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyLGRldnByaXYtPmlvYmFzZStBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CisKKwkJLy9TZXQgdGhlIFRpbWVyIDIgaW4gbW9kZSAyKFRpbWVyKQorCQlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9CisJCQkoZGV2cHJpdi0+CisJCQliX1RpbWVyU2VsZWN0TW9kZSAmIDB4MEYpIHwgQVBDSTMxMjBfVElNRVJfMl9NT0RFXzI7CisJCW91dGIoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQxKTsKKworCQkvL0NvbmZpZ3VyZSB0aGUgdGltZXIgMiBmb3Igd3JpdGluZyB0aGUgTE9XIFdPUkQgb2YgdGltZXIgaXMgRGVsYXkgdmFsdWUKKwkJLy9Zb3UgbXVzdCBtYWtlIGEgYl90bXAgdmFyaWFibGUgd2l0aCBEaWdpdGFsT3V0UHV0UmVnaXN0ZXIgYmVjYXVzZSBhdCBBZGRyZXNzXzErQVBDSTMxMjBfVElNRVJfQ1JUMAorCQkvL3lvdSBjYW4gc2V0IHRoZSBkaWdpdGFsIG91dHB1dCBhbmQgY29uZmlndXJlIHRoZSB0aW1lciAyLGFuZCBpZiB5b3UgZG9uJ3QgbWFrZSB0aGlzLCBkaWdpdGFsIG91dHB1dAorCQkvL2FyZSBlcmFzZSAoU2V0IHRvIDApCisKKwkJLy9Xcml0aW5nIExPVyBXT1JECisJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMl9MT1dfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CisJCW91dHcoTE9XT1JEKHVpX1RpbWVydmFsdWUyKSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQkvL1dyaXRpbmcgSElHSCBXT1JECisJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMl9ISUdIX1dPUkQ7CisJCW91dGIoYl9UbXAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCQlvdXR3KEhJV09SRCh1aV9UaW1lcnZhbHVlMiksCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisJCS8vIHRpbWVyMiBpbiBUaW1lciBtb2RlIGVuYWJsZWQKKwkJZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID0gQVBDSTMxMjBfVElNRVI7CisKKwl9IGVsc2UJCQkvLyBJbml0aWFsaXplIFdhdGNoIGRvZworCXsKKworCQkvL1NldCB0aGUgVGltZXIgMiBpbiBtb2RlIDUoV2F0Y2hkb2cpCisKKwkJZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPQorCQkJKGRldnByaXYtPgorCQkJYl9UaW1lclNlbGVjdE1vZGUgJiAweDBGKSB8IEFQQ0kzMTIwX1RJTUVSXzJfTU9ERV81OworCQlvdXRiKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMSk7CisKKwkJLy9Db25maWd1cmUgdGhlIHRpbWVyIDIgZm9yIHdyaXRpbmcgdGhlIExPVyBXT1JEIG9mIHRpbWVyIGlzIERlbGF5IHZhbHVlCisJCS8vWW91IG11c3QgbWFrZSBhIGJfdG1wIHZhcmlhYmxlIHdpdGggRGlnaXRhbE91dFB1dFJlZ2lzdGVyIGJlY2F1c2UgYXQgQWRkcmVzc18xK0FQQ0kzMTIwX1RJTUVSX0NSVDAKKwkJLy95b3UgY2FuIHNldCB0aGUgZGlnaXRhbCBvdXRwdXQgYW5kIGNvbmZpZ3VyZSB0aGUgdGltZXIgMixhbmQgaWYgeW91IGRvbid0IG1ha2UgdGhpcywgZGlnaXRhbCBvdXRwdXQKKwkJLy9hcmUgZXJhc2UgKFNldCB0byAwKQorCisJCS8vV3JpdGluZyBMT1cgV09SRAorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfTE9XX1dPUkQ7CisJCW91dGIoYl9UbXAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX0NSVDApOworCQlvdXR3KExPV09SRCh1aV9UaW1lcnZhbHVlMiksCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisKKwkJLy9Xcml0aW5nIEhJR0ggV09SRAorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfSElHSF9XT1JEOworCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKworCQlvdXR3KEhJV09SRCh1aV9UaW1lcnZhbHVlMiksCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisJCS8vd2F0Y2hkb2cgZW5hYmxlZAorCQlkZXZwcml2LT5iX1RpbWVyMk1vZGUgPSBBUENJMzEyMF9XQVRDSERPRzsKKworCX0KKworCXJldHVybiBpbnNuLT5uOworCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0luc25Xcml0ZVRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6ICAgIFRvIHN0YXJ0IGFuZCBzdG9wIHRoZSB0aW1lcgkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJZGF0YVswXSA9IDEgKHN0YXJ0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCWRhdGFbMF0gPSAwIChzdG9wICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkgCQkJZGF0YVswXSA9IDIgICh3cml0ZSBuZXcgdmFsdWUpICAgICAgICAgICAgICAgICAgICAgICB8Cit8CSAgIAkJCWRhdGFbMV09IG5ldyB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgIAkJCQlkZXZwcml2LT5iX1RpbWVyMk1vZGUgPSAgMCBESVNBQkxFICAgICAgICAgICAgICAgICAgIHwKK3wJICAgICAgICAgICAgICAgICAgICAgCQkJCQkgMSBUaW1lciAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCSAJCQkJCSAyIFdhdGNoIGRvZwkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMTIwX0luc25Xcml0ZVRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCVVJTlQgdWlfVGltZXJ2YWx1ZTIgPSAwOworCVVTSE9SVCB1c19UbXBWYWx1ZTsKKwlCWVRFIGJfVG1wOworCisJaWYgKChkZXZwcml2LT5iX1RpbWVyMk1vZGUgIT0gQVBDSTMxMjBfV0FUQ0hET0cpCisJCSYmIChkZXZwcml2LT5iX1RpbWVyMk1vZGUgIT0gQVBDSTMxMjBfVElNRVIpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJcbndyaXRlOnRpbWVyMiAgbm90IGNvbmZpZ3VyZWQgIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkYXRhWzBdID09IDIpCS8vIHdyaXRlIG5ldyB2YWx1ZQorCXsKKwkJaWYgKGRldnByaXYtPmJfVGltZXIyTW9kZSAhPSBBUENJMzEyMF9USU1FUikgeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkid3JpdGUgOnRpbWVyMiAgbm90IGNvbmZpZ3VyZWQgIGluIFRJTUVSIE1PREUiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKGRhdGFbMV0pCisJCQl1aV9UaW1lcnZhbHVlMiA9IGRhdGFbMV07CisJCWVsc2UKKwkJCXVpX1RpbWVydmFsdWUyID0gMDsKKwl9CisKKwkvL3RoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbldyaXRlVGltZXIoZGV2LGRhdGFbMF0sdWlfVGltZXJ2YWx1ZTIpOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBBUENJMzEyMF9TVEFSVDoKKworCQkvLyBSZXNldCBGQ19USU1FUiBCSVQKKwkJaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7CisJCWlmIChkZXZwcml2LT5iX1RpbWVyMk1vZGUgPT0gQVBDSTMxMjBfVElNRVIpCS8vc3RhcnQgdGltZXIKKwkJeworCQkJLy9FbmFibGUgVGltZXIKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciAmIDB4MEI7CisJCX0gZWxzZQkJLy9zdGFydCB3YXRjaCBkb2cKKwkJeworCQkJLy9FbmFibGUgV2F0Y2hEb2cKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJiAweDBCKSB8CisJCQkJQVBDSTMxMjBfRU5BQkxFX1dBVENIRE9HOworCQl9CisKKwkJLy9lbmFibGUgZGlzYWJsZSBpbnRlcnJ1cHQKKwkJaWYgKChkZXZwcml2LT5iX1RpbWVyMkludGVycnVwdCkgPT0gQVBDSTMxMjBfRU5BQkxFKSB7CisKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciB8CisJCQkJQVBDSTMxMjBfRU5BQkxFX1RJTUVSX0lOVDsKKwkJCS8vIHNhdmUgdGhlIHRhc2sgc3RydWN0dXJlIHRvIHBhc3MgaW5mbyB0byB1c2VyCisJCQlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisJCX0gZWxzZSB7CisKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJQVBDSTMxMjBfRElTQUJMRV9USU1FUl9JTlQ7CisJCX0KKwkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQlpZiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID09IEFQQ0kzMTIwX1RJTUVSKQkvL3N0YXJ0IHRpbWVyCisJCXsKKwkJCS8vRm9yIFRpbWVyIG1vZGUgaXMgIEdhdGUyIG11c3QgYmUgYWN0aXZhdGVkICAgKip0aW1lciBzdGFydGVkCisJCQlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJdXNfT3V0cHV0UmVnaXN0ZXIgfCBBUENJMzEyMF9FTkFCTEVfVElNRVIyOworCQkJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUl9BRERSRVNTKTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBBUENJMzEyMF9TVE9QOgorCQlpZiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID09IEFQQ0kzMTIwX1RJTUVSKSB7CisJCQkvL0Rpc2FibGUgdGltZXIKKwkJCWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyID0KKwkJCQlkZXZwcml2LT4KKwkJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmCisJCQkJQVBDSTMxMjBfRElTQUJMRV9USU1FUl9DT1VOVEVSOworCQl9IGVsc2UgeworCQkJLy9EaXNhYmxlIFdhdGNoRG9nCisJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CisJCQkJZGV2cHJpdi0+CisJCQkJYl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJgorCQkJCUFQQ0kzMTIwX0RJU0FCTEVfV0FUQ0hET0c7CisJCX0KKwkJLy8gRGlzYWJsZSB0aW1lciBpbnRlcnJ1cHQKKwkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQorCQkJZGV2cHJpdi0+CisJCQliX01vZGVTZWxlY3RSZWdpc3RlciAmIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVJfSU5UOworCisJCS8vIFdyaXRlIGFib3ZlIHN0YXRlcyAgdG8gcmVnaXN0ZXIKKwkJb3V0YihkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKKworCQkvLyBSZXNldCBHYXRlIDIKKwkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgPQorCQkJZGV2cHJpdi0+dXNfT3V0cHV0UmVnaXN0ZXIgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSX0lOVDsKKwkJb3V0dyhkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSX0FERFJFU1MpOworCisJCS8vIFJlc2V0IEZDX1RJTUVSIEJJVAorCQlpbmIoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfU1RBVFVTX1JFR0lTVEVSKTsKKworCQkvLyBEaXNhYmxlIHRpbWVyCisJCS8vZGV2cHJpdi0+Yl9UaW1lcjJNb2RlPUFQQ0kzMTIwX0RJU0FCTEU7CisKKwkJYnJlYWs7CisKKwljYXNlIDI6CQkvL3dyaXRlIG5ldyB2YWx1ZSB0byBUaW1lcgorCQlpZiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlICE9IEFQQ0kzMTIwX1RJTUVSKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJ3cml0ZSA6dGltZXIyICBub3QgY29uZmlndXJlZCAgaW4gVElNRVIgTU9ERSIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLy8gdWlfVGltZXJ2YWx1ZTI9ZGF0YVsxXTsgLy8gcGFzc2VkIGFzIGFyZ3VtZW50CisJCXVzX1RtcFZhbHVlID0KKwkJCShVU0hPUlQpIGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9SRF9TVEFUVVMpOworCisJCS8vRUwyNTA4MDQ6IFRlc3RpbmcgaWYgYm9hcmQgQVBDSTMxMjAgaGF2ZSB0aGUgbmV3IFF1YXJ0eiBvciBpZiBpdCBpcyBhbiBBUENJMzAwMQorCQkvLyBhbmQgY2FsY3VsYXRlIHRoZSB0aW1lIHZhbHVlIHRvIHNldCBpbiB0aGUgdGltZXIKKwkJaWYgKCh1c19UbXBWYWx1ZSAmIDB4MDBCMCkgPT0gMHgwMEIwCisJCQl8fCAhc3RyY21wKHRoaXNfYm9hcmQtPnBjX0RyaXZlck5hbWUsICJhcGNpMzAwMSIpKSB7CisJCQkvL0NhbGN1bGF0ZSB0aGUgdGltZSB2YWx1ZSB0byBzZXQgaW4gdGhlIHRpbWVyCisJCQl1aV9UaW1lcnZhbHVlMiA9IHVpX1RpbWVydmFsdWUyIC8gNTA7CisJCX0gZWxzZSB7CisJCQkvL0NhbGN1bGF0ZSB0aGUgdGltZSB2YWx1ZSB0byBzZXQgaW4gdGhlIHRpbWVyCisJCQl1aV9UaW1lcnZhbHVlMiA9IHVpX1RpbWVydmFsdWUyIC8gNzA7CisJCX0KKwkJLy9Xcml0aW5nIExPVyBXT1JECisJCWJfVG1wID0gKChkZXZwcml2LT4KKwkJCQliX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcikgJiAweEYwKSB8CisJCQlBUENJMzEyMF9TRUxFQ1RfVElNRVJfMl9MT1dfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CisKKwkJb3V0dyhMT1dPUkQodWlfVGltZXJ2YWx1ZTIpLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCisJCS8vV3JpdGluZyBISUdIIFdPUkQKKwkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCWJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyKSAmIDB4RjApIHwKKwkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8yX0hJR0hfV09SRDsKKwkJb3V0YihiX1RtcCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfQ1JUMCk7CisKKwkJb3V0dyhISVdPUkQodWlfVGltZXJ2YWx1ZTIpLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfVElNRVJfVkFMVUUpOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwkvLyBOb3QgYSB2YWxpZCBpbnB1dAorCX0KKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogaW50IGlfQVBDSTMxMjBfSW5zblJlYWRUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCAgICAgICAgICAgfAorfAkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpIAkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCSAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IHJlYWQgdGhlIFRpbWVyIHZhbHVlIAkJCQkgICAgICAgICAgICAgICAgIAkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAJCQkJCQkJCQkJCQkJIHwKK3wJCQlmb3IgVGltZXI6CWRhdGFbMF09IFRpbWVyIGNvbnN0YW50CQkJCQkJIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgCQlmb3Igd2F0Y2hkb2c6IGRhdGFbMF09MCAoc3RpbGwgcnVubmluZykgICAgICAgICAgICAgICAgICB8Cit8CSAgICAgICAgICAgICAgIAkJCSAgZGF0YVswXT0xICAocnVuIGRvd24pICAgICAgICAgICAgCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kzMTIwX0luc25SZWFkVGltZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUJZVEUgYl9UbXA7CisJVVNIT1JUIHVzX1RtcFZhbHVlLCB1c19UbXBWYWx1ZV8yLCB1c19TdGF0dXNWYWx1ZTsKKworCWlmICgoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlICE9IEFQQ0kzMTIwX1dBVENIRE9HKQorCQkmJiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlICE9IEFQQ0kzMTIwX1RJTUVSKSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiXG5yZWFkOnRpbWVyMiAgbm90IGNvbmZpZ3VyZWQgIik7CisJfQorCisJLy90aGlzX2JvYXJkLT5pX2h3ZHJ2X0luc25SZWFkVGltZXIoZGV2LGRhdGEpOworCWlmIChkZXZwcml2LT5iX1RpbWVyMk1vZGUgPT0gQVBDSTMxMjBfVElNRVIpIHsKKworCQkvL1JlYWQgdGhlIExPVyBXT1JEIG9mIFRpbWVyIDIgcmVnaXN0ZXIKKwkJYl9UbXAgPSAoKGRldnByaXYtPgorCQkJCWJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyKSAmIDB4RjApIHwKKwkJCUFQQ0kzMTIwX1NFTEVDVF9USU1FUl8yX0xPV19XT1JEOworCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKworCQl1c19UbXBWYWx1ZSA9IGludyhkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9WQUxVRSk7CisKKwkJLy9SZWFkIHRoZSBISUdIIFdPUkQgb2YgVGltZXIgMiByZWdpc3RlcgorCQliX1RtcCA9ICgoZGV2cHJpdi0+CisJCQkJYl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIpICYgMHhGMCkgfAorCQkJQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfSElHSF9XT1JEOworCQlvdXRiKGJfVG1wLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9USU1FUl9DUlQwKTsKKworCQl1c19UbXBWYWx1ZV8yID0gaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFKTsKKworCQkvLyBjb21iaW5pbmcgYm90aCB3b3JkcworCQlkYXRhWzBdID0gKFVJTlQpICgodXNfVG1wVmFsdWUpIHwgKCh1c19UbXBWYWx1ZV8yKSA8PCAxNikpOworCisJfSBlbHNlCQkJLy8gUmVhZCB3YXRjaCBkb2cgc3RhdHVzCisJeworCisJCXVzX1N0YXR1c1ZhbHVlID0gaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CisJCXVzX1N0YXR1c1ZhbHVlID0KKwkJCSgodXNfU3RhdHVzVmFsdWUgJiBBUENJMzEyMF9GQ19USU1FUikgPj4gMTIpICYgMTsKKwkJaWYgKHVzX1N0YXR1c1ZhbHVlID09IDEpIHsKKwkJCS8vIFJFU0VUIEZDX1RJTUVSIEJJVAorCQkJaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7CisJCX0KKwkJZGF0YVswXSA9IHVzX1N0YXR1c1ZhbHVlOwkvLyB3aGVuIGRhdGFbMF0gPSAxIHRoZW4gdGhlIHdhdGNoIGRvZyBoYXMgcnVuZG93bgorCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgICAgICAgICAgICAgICAgIERJR0lUQUwgSU5QVVQgU1VCREVWSUNFICAgCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfSW5zblJlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgIHwKK3wJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkcyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCAgRGlnaXRhbCBpbnB1dCBjaGFubmVsfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9JbnNuUmVhZERpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisJVUlOVCB1aV9DaGFuLCB1aV9UbXBWYWx1ZTsKKworCXVpX0NoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsJLy8gY2hhbm5lbCBzcGVjaWZpZWQKKworCS8vdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuUmVhZERpZ2l0YWxJbnB1dChkZXYsdWlfQ2hhbixkYXRhKTsKKwlpZiAodWlfQ2hhbiA+PSAwICYmIHVpX0NoYW4gPD0gMykgeworCQl1aV9UbXBWYWx1ZSA9IChVSU5UKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfUkRfU1RBVFVTKTsKKworCQkvLyAgICAgIHNpbmNlIG9ubHkgMSBjaGFubmVsIHJlcWQgIHRvIGJyaW5nIGl0IHRvIGxhc3QgYml0IGl0IGlzIHJvdGF0ZWQKKwkJLy8gIDggKyhjaGFuIC0gMSkgdGltZXMgdGhlbiBBTkRlZCB3aXRoIDEgZm9yIGxhc3QgYml0LgorCQkqZGF0YSA9ICh1aV9UbXBWYWx1ZSA+PiAodWlfQ2hhbiArIDgpKSAmIDE7CisJCS8vcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJLy8gICAgICBjb21lZGlfZXJyb3IoZGV2LCIgY2hhbiBzcGVjIHdyb25nIik7CisJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwl9CisJcmV0dXJuIGluc24tPm47CisKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTMxMjBfSW5zbkJpdHNEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgfAorfHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkcyB0aGUgdmFsdWUgb2YgdGhlIERpZ2l0YWwgaW5wdXQgUG9ydCBpLmUuNGNoYW5uZWxzfAorfCAgIHZhbHVlIGlzIHJldHVybmVkIGluIGRhdGFbMF0JCQkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMzEyMF9JbnNuQml0c0RpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UbXBWYWx1ZTsKKwl1aV9UbXBWYWx1ZSA9IChVSU5UKSBpbncoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfUkRfU1RBVFVTKTsKKwkvKioqKioJc3RhdGUgb2YgNCBjaGFubmVscyAgaW4gdGhlIDExLCAxMCwgOSwgOCAgIGJpdHMgb2Ygc3RhdHVzIHJlZworCQkJcm90YXRlZCByaWdodCA4IHRpbWVzIHRvIGJyaW5nIHRoZW0gdG8gbGFzdCBmb3VyIGJpdHMKKwkJCUFORGVkIHdpdGggb3hmIGZvciAgdmFsdWUuCisJKioqKiovCisKKwkqZGF0YSA9ICh1aV9UbXBWYWx1ZSA+PiA4KSAmIDB4ZjsKKwkvL3RoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbkJpdHNEaWdpdGFsSW5wdXQoZGV2LGRhdGEpOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgRElHSVRBTCBPVVRQVVQgU1VCREVWSUNFICAgCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMTIwX0luc25Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICAgIHwKK3wgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpDb25maWd1cmUgdGhlIG91dHB1dCBtZW1vcnkgT04gb3IgT0ZGCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6c3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSAJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhIAkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfSW5zbkNvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCisJaWYgKChkYXRhWzBdICE9IDApICYmIChkYXRhWzBdICE9IDEpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiTm90IGEgdmFsaWQgRGF0YSAhISEgLERhdGEgc2hvdWxkIGJlIDEgb3IgMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoZGF0YVswXSkgeworCQlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IEFQQ0kzMTIwX0VOQUJMRTsKKworCX0gZWxzZSB7CisJCWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzID0gQVBDSTMxMjBfRElTQUJMRTsKKwkJZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIgPSAwOworCX0KKwlpZiAoIWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzKSB7CisJCXVpX1RlbXAgPSAwOworCisJfQkJCS8vaWYoIWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgfAorfAkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpIAkJIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IHdyaXRlIGRpYXRhbCBvdXRwdXQgcG9ydAkJCQkJCQkgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhIAkJCQkJCQkJCQkgfAorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgIFZhbHVlIHRvIGJlIHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgIDoxIFNldCBkaWdpdGFsIG8vcCBPTgorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgIDIgU2V0IGRpZ2l0YWwgby9wIE9GRiB3aXRoIG1lbW9yeSBPTgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfSW5zbkJpdHNEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisJaWYgKChkYXRhWzBdID4gdGhpc19ib2FyZC0+aV9Eb01heGRhdGEpIHx8IChkYXRhWzBdIDwgMCkpIHsKKworCQljb21lZGlfZXJyb3IoZGV2LCAiRGF0YSBpcyBub3QgdmFsaWQgISEhIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZGF0YVsxXSkgeworCWNhc2UgMToKKwkJZGF0YVswXSA9IChkYXRhWzBdIDw8IDQpIHwgZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXI7CisJCWJyZWFrOworCisJY2FzZSAyOgorCQlkYXRhWzBdID0gZGF0YVswXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCJcblRoZSBwYXJhbWV0ZXIgcGFzc2VkIGlzIGluIGVycm9yIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0JCQkvLyBzd2l0Y2goZGF0YVsxXSkKKwlvdXRiKGRhdGFbMF0sIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX0RJR0lUQUxfT1VUUFVUKTsKKworCWRldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyID0gZGF0YVswXSAmIDB4RjA7CisKKwlyZXR1cm4gaW5zbi0+bjsKKworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsfAorfHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpIAkJCSAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZSBkaWdpYXRsIG91dHB1dAkJCQkJCQkJICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJIAkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgCQkJCQkJCQkJCSB8CisgICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgVmFsdWUgdG8gYmUgd3JpdHRlbgorICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgOjEgU2V0IGRpZ2l0YWwgby9wIE9OCisgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICAgMiBTZXQgZGlnaXRhbCBvL3AgT0ZGIHdpdGggbWVtb3J5IE9OCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkKK3sKKworCVVJTlQgdWlfVGVtcDE7CisKKwlVSU5UIHVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8vIGdldCB0aGUgY2hhbm5lbAorCisJaWYgKChkYXRhWzBdICE9IDApICYmIChkYXRhWzBdICE9IDEpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiTm90IGEgdmFsaWQgRGF0YSAhISEgLERhdGEgc2hvdWxkIGJlIDEgb3IgMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoKHVpX05vT2ZDaGFubmVsID4gKHRoaXNfYm9hcmQtPmlfTmJyRG9DaGFubmVsIC0gMSkpCisJCXx8ICh1aV9Ob09mQ2hhbm5lbCA8IDApKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiVGhpcyBib2FyZCBkb2Vzbid0IGhhdmUgc3BlY2lmaWVkIGNoYW5uZWwgISEhIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZGF0YVsxXSkgeworCWNhc2UgMToKKwkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKTsKKy8vRVMwNSAgICAgICAgICAgICAgICAgICBkYXRhWzBdPShkYXRhWzBdPDw0KXx1aV9UZW1wOworCQlkYXRhWzBdID0gKGRhdGFbMF0gPDwgNCkgfCBkZXZwcml2LT5iX0RpZ2l0YWxPdXRwdXRSZWdpc3RlcjsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MTsKKwkJdWlfVGVtcDEgPSAxOworCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IHVpX05vT2ZDaGFubmVsOworCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IDQ7CisvL0VTMDUgICAgICAgICAgICAgICAgICAgdWlfVGVtcD11aV9UZW1wfHVpX1RlbXAxOworCQlkZXZwcml2LT5iX0RpZ2l0YWxPdXRwdXRSZWdpc3RlciA9CisJCQlkZXZwcml2LT5iX0RpZ2l0YWxPdXRwdXRSZWdpc3RlciB8IHVpX1RlbXAxOworCisJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgXiAweGY7CisJCWRhdGFbMF0gPSBkYXRhWzBdIDw8IDQ7CisvL0VTMDUgICAgICAgICAgICAgICAgICAgZGF0YVswXT1kYXRhWzBdJiB1aV9UZW1wOworCQlkYXRhWzBdID0gZGF0YVswXSAmIGRldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlxuVGhlIHBhcmFtZXRlciBwYXNzZWQgaXMgaW4gZXJyb3IgXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vIHN3aXRjaChkYXRhWzFdKQorCW91dGIoZGF0YVswXSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfRElHSVRBTF9PVVRQVVQpOworCisvL0VTMDUgICAgICAgIHVpX1RlbXA9ZGF0YVswXSAmIDB4ZjA7CisJZGV2cHJpdi0+Yl9EaWdpdGFsT3V0cHV0UmVnaXN0ZXIgPSBkYXRhWzBdICYgMHhmMDsKKwlyZXR1cm4gKGluc24tPm4pOworCit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5BTE9HIE9VVFBVVCBTVUJERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldix8Cit8c3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCQkJICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlICBhbmFsb2cgb3V0cHV0ICAgCQkJCQkJCSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgIAkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMxMjBfSW5zbldyaXRlQW5hbG9nT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YSkKK3sKKwlVSU5UIHVpX1JhbmdlLCB1aV9DaGFubmVsOworCVVTSE9SVCB1c19UbXBWYWx1ZTsKKworCXVpX1JhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCXVpX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8vdGhpc19ib2FyZC0+aV9od2Rydl9JbnNuV3JpdGVBbmFsb2dPdXRwdXQoZGV2LCB1aV9SYW5nZSwgdWlfQ2hhbm5lbCxkYXRhWzBdKTsKKwlpZiAodWlfUmFuZ2UpCQkvLyBpZiAxIHRoZW4gdW5pcG9sYXIKKwl7CisKKwkJaWYgKGRhdGFbMF0gIT0gMCkKKwkJCWRhdGFbMF0gPQorCQkJCSgoKCh1aV9DaGFubmVsICYgMHgwMykgPDwgMTQpICYgMHhDMDAwKSB8ICgxIDw8CisJCQkJCTEzKSB8IChkYXRhWzBdICsgODE5MSkpOworCQllbHNlCisJCQlkYXRhWzBdID0KKwkJCQkoKCgodWlfQ2hhbm5lbCAmIDB4MDMpIDw8IDE0KSAmIDB4QzAwMCkgfCAoMSA8PAorCQkJCQkxMykgfCA4MTkyKTsKKworCX0gZWxzZQkJCS8vIGlmIDAgdGhlbiAgIGJpcG9sYXIKKwl7CisJCWRhdGFbMF0gPQorCQkJKCgoKHVpX0NoYW5uZWwgJiAweDAzKSA8PCAxNCkgJiAweEMwMDApIHwgKDAgPDwgMTMpIHwKKwkJCWRhdGFbMF0pOworCisJfQorCisJLy9vdXQgcHV0IG4gdmFsdWVzIGF0IHRoZSBnaXZlbiBjaGFubmVsLgorCS8vIHJ0X3ByaW50aygiXG53YWl0aW5nIGZvciBEQV9SRUFEWSBCSVQiKTsKKwlkbwkJCS8vV2FpdGluZyBvZiBEQV9SRUFEWSBCSVQKKwl7CisJCXVzX1RtcFZhbHVlID0KKwkJCSgoVVNIT1JUKSBpbncoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlBUENJMzEyMF9SRF9TVEFUVVMpKSAmIDB4MDAwMTsKKwl9IHdoaWxlICh1c19UbXBWYWx1ZSAhPSAweDAwMDEpOworCisJaWYgKHVpX0NoYW5uZWwgPD0gMykKKwkJLy8gZm9yIGNoYW5uZWwgMC0zIG91dCBhdCAgdGhlIHJlZ2lzdGVyIDEgKHdyRGFjMS04KQorCQkvLyBkYXRhW2ldIHR5cGVjYXN0ZWQgdG8gdXNob3J0IHNpbmNlICB3b3JkIHdyaXRlIGlzIHRvIGJlIGRvbmUKKwkJb3V0dygoVVNIT1JUKSBkYXRhWzBdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8xKTsKKwllbHNlCisJCS8vIGZvciBjaGFubmVsIDQtNyBvdXQgYXQgdGhlIHJlZ2lzdGVyIDIgKHdyRGFjNS04KQorCQkvL2RhdGFbaV0gdHlwZWNhc3RlZCB0byB1c2hvcnQgc2luY2UgIHdvcmQgd3JpdGUgaXMgdG8gYmUgZG9uZQorCQlvdXR3KChVU0hPUlQpIGRhdGFbMF0sCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzIpOworCisJcmV0dXJuIGluc24tPm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkNWQ4NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuaApAQCAtMCwwICsxLDI0MSBAQAorCisvLyBod2Rydl9hcGNpMzEyMC5oCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKyAqCisgKglBRERJLURBVEEgR21iSAorICoJRGllc2Vsc3RyYXNzZSAzCisgKglELTc3ODMzIE90dGVyc3dlaWVyCisgKglUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgKglGYXg6ICs0OSgwKTcyMjMvOTQ5My05MgorICoJaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgKglpbmZvQGFkZGktZGF0YS5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8vIGNvbWVkaSByZWxhdGVkIGRlZmluZXMKKworLy9BTkFMT0cgSU5QVVQgUkFOR0UKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpMzEyMF9haSA9IHsgOCwgeworCQkJCQkJICAgICBCSVBfUkFOR0UoMTApLAorCQkJCQkJICAgICBCSVBfUkFOR0UoNSksCisJCQkJCQkgICAgIEJJUF9SQU5HRSgyKSwKKwkJCQkJCSAgICAgQklQX1JBTkdFKDEpLAorCQkJCQkJICAgICBVTklfUkFOR0UoMTApLAorCQkJCQkJICAgICBVTklfUkFOR0UoNSksCisJCQkJCQkgICAgIFVOSV9SQU5HRSgyKSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDEpCisJCQkJCQkgICAgIH0KK307CisKKy8vIEFOQUxPRyBPVVRQVVQgUkFOR0UKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpMzEyMF9hbyA9IHsgMiwgeworCQkJCQkJICAgICBCSVBfUkFOR0UoMTApLAorCQkJCQkJICAgICBVTklfUkFOR0UoMTApCisJCQkJCQkgICAgIH0KK307CisKKyNkZWZpbmUgQVBDSTMxMjBfQklQT0xBUl9SQU5HRVMJNAkvLyB1c2VkIGZvciB0ZXN0IG9uIG1peHR1cmUgb2YgQklQL1VOSSByYW5nZXMKKworI2RlZmluZSBBUENJMzEyMF9CT0FSRF9WRU5ET1JfSUQgICAgICAgICAgICAgICAgIDB4MTBFOAorI2RlZmluZSBBUENJMzEyMF9BRERSRVNTX1JBTkdFICAgICAgICAgICAgCQkJMTYKKworI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQVBDSTMxMjBfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFQQ0kzMTIwX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lICAgICBBUENJMzEyMF9FT0NfTU9ERSAgICAgICAgIDEKKyNkZWZpbmUgICAgIEFQQ0kzMTIwX0VPU19NT0RFICAgICAgICAgMgorI2RlZmluZSAgICAgQVBDSTMxMjBfRE1BX01PREUgICAgICAgICAzCisKKy8vRElHSVRBTCBJTlBVVC1PVVRQVVQgREVGSU5FCisKKyNkZWZpbmUgQVBDSTMxMjBfRElHSVRBTF9PVVRQVVQgICAgICAgICAgICAgICAgICAJMHgwRAorI2RlZmluZSBBUENJMzEyMF9SRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgIAkweDAyCisjZGVmaW5lIEFQQ0kzMTIwX1JEX0ZJRk8gICAgICAgICAgICAgICAgICAgICAJCTB4MDAKKworLy8gZGlnaXRhbCBvdXRwdXQgaW5zbl93cml0ZSBPTiAvT0ZGIHNlbGVjdGlvbgorI2RlZmluZQlBUENJMzEyMF9TRVQ0RElHSVRBTE9VVFBVVE9OCQkJCTEKKyNkZWZpbmUgQVBDSTMxMjBfU0VUNERJR0lUQUxPVVRQVVRPRkYJCQkJMAorCisvLyBhbmFsb2cgb3V0cHV0IFNFTEVDVCBCSVQKKyNkZWZpbmUgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfMSAgIDB4MDAwMAorI2RlZmluZSBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF8yICAgMHg0MDAwCisjZGVmaW5lIEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzMgICAweDgwMDAKKyNkZWZpbmUgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfNCAgIDB4QzAwMAorI2RlZmluZSBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF81ICAgMHgwMDAwCisjZGVmaW5lIEFQQ0kzMTIwX0FOQUxPR19PUF9DSEFOTkVMXzYgICAweDQwMDAKKyNkZWZpbmUgQVBDSTMxMjBfQU5BTE9HX09QX0NIQU5ORUxfNyAgIDB4ODAwMAorI2RlZmluZSBBUENJMzEyMF9BTkFMT0dfT1BfQ0hBTk5FTF84ICAgMHhDMDAwCisKKy8vIEVuYWJsZSBleHRlcm5hbCB0cmlnZ2VyIGJpdCBpbiBuV3JBZGRyZXNzCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9FWFRfVFJJR0dFUiAgICAweDgwMDAKKworLy9BTkFMT0cgT1VUUFVUIEFORCBJTlBVVCBERUZJTkUKKyNkZWZpbmUgQVBDSTMxMjBfVU5JUE9MQVIgMHg4MAkvLyQkIFJBTSBzZXF1ZW5jZSBwb2xhcml0eSBCSVQKKyNkZWZpbmUgQVBDSTMxMjBfQklQT0xBUiAgMHgwMAkvLyQkIFJBTSBzZXF1ZW5jZSBwb2xhcml0eSBCSVQKKyNkZWZpbmUgQVBDSTMxMjBfQU5BTE9HX09VVFBVVF8xIDB4MDgJLy8gKEFERFJFU1MgKQorI2RlZmluZSBBUENJMzEyMF9BTkFMT0dfT1VUUFVUXzIgMHgwQQkvLyAoQUREUkVTUyApCisjZGVmaW5lIEFQQ0kzMTIwXzFfR0FJTiAgICAgICAgICAgICAgMHgwMAkvLyQkIFJBTSBzZXF1ZW5jZSBHYWluIEJpdHMgZm9yIGdhaW4gMQorI2RlZmluZSBBUENJMzEyMF8yX0dBSU4gICAgICAgICAgICAgIDB4MTAJLy8kJCBSQU0gc2VxdWVuY2UgR2FpbiBCaXRzIGZvciBnYWluIDIKKyNkZWZpbmUgQVBDSTMxMjBfNV9HQUlOICAgICAgICAgICAgICAweDIwCS8vJCQgUkFNIHNlcXVlbmNlIEdhaW4gQml0cyBmb3IgZ2FpbiA1CisjZGVmaW5lIEFQQ0kzMTIwXzEwX0dBSU4gICAgICAgICAgICAgMHgzMAkvLyQkIFJBTSBzZXF1ZW5jZSBHYWluIEJpdHMgZm9yIGdhaW4gMTAKKyNkZWZpbmUgQVBDSTMxMjBfU0VRX1JBTV9BRERSRVNTICAgICAgICAweDA2CS8vJCQgRUFSTElFUiBOQU1FRCBBUENJMzEyMF9GSUZPX0FERFJFU1MKKyNkZWZpbmUgQVBDSTMxMjBfUkVTRVRfRklGTyAgICAgICAgICAweDBDCS8vKEFERFJFU1MpCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSXzBfTU9ERV8yICAgICAgMHgwMQkvLyQkIEJpdHMgZm9yIHRpbWVyIG1vZGUKKyNkZWZpbmUgQVBDSTMxMjBfVElNRVJfMF9NT0RFXzQgICAgICAgMHgyCisjZGVmaW5lIEFQQ0kzMTIwX1NFTEVDVF9USU1FUl8wX1dPUkQgMHgwMAorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfVElNRVIwICAgICAweDEwMDAJLy8kJEdhdGViaXQgMCBpbiBuV3JBZGRyZXNzCisjZGVmaW5lIEFQQ0kzMTIwX0NMRUFSX1BSICAgICAgICAgIDB4RjBGRgorI2RlZmluZSBBUENJMzEyMF9DTEVBUl9QQSAgICAgICAgICAweEZGRjAKKyNkZWZpbmUgQVBDSTMxMjBfQ0xFQVJfUEFfUFIgICAgICAgKEFQQ0kzMTIwX0NMRUFSX1BSICYgQVBDSTMxMjBfQ0xFQVJfUEEpCisKKy8vIG5Xck1vZGVfU2VsZWN0CisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9TQ0FOICAgICAgICAgIDB4OAkvLyQkIGJpdCBpbiBuV3JNb2RlX1NlbGVjdAorI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX1NDQU4gICAgICAofkFQQ0kzMTIwX0VOQUJMRV9TQ0FOKQorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfRU9TX0lOVCAgICAgICAweDIJLy8kJCBiaXQgaW4gbldyTW9kZV9TZWxlY3QKKworI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX0VPU19JTlQgICAofkFQQ0kzMTIwX0VOQUJMRV9FT1NfSU5UKQorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfRU9DX0lOVCAgICAgICAweDEKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9FT0NfSU5UICAgKH5BUENJMzEyMF9FTkFCTEVfRU9DX0lOVCkKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9BTExfSU5URVJSVVBUX1dJVEhPVVRfVElNRVIgICAoQVBDSTMxMjBfRElTQUJMRV9FT1NfSU5UICYgQVBDSTMxMjBfRElTQUJMRV9FT0NfSU5UKQorI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX0FMTF9JTlRFUlJVUFQgICAoQVBDSTMxMjBfRElTQUJMRV9USU1FUl9JTlQgJiBBUENJMzEyMF9ESVNBQkxFX0VPU19JTlQgJiBBUENJMzEyMF9ESVNBQkxFX0VPQ19JTlQpCisKKy8vc3RhdHVzIHJlZ2lzdGVyIGJpdHMKKyNkZWZpbmUgQVBDSTMxMjBfRU9DICAgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIEFQQ0kzMTIwX0VPUyAgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorCisvLyBzb2Z0d2FyZSB0cmlnZ2VyIGR1bW15IHJlZ2lzdGVyCisjZGVmaW5lIEFQQ0kzMTIwX1NUQVJUX0NPTlZFUlNJT04gICAgICAgIDB4MDIJLy8oQUREUkVTUykKKworLy9USU1FUiBERUZJTkUKKyNkZWZpbmUgQVBDSTMxMjBfUVVBUlRaX0EJCQkJICA3MAorI2RlZmluZSBBUENJMzEyMF9RVUFSVFpfQgkJCQkgIDUwCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVBDSTMxMjBfV0FUQ0hET0cgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUENJMzEyMF9USU1FUl9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMiAgICAgICAgICAgICAgICAgICAgMHg0MDAwCS8vJCQgZ2F0ZWJpdCAyIGluIG5XckFkZHJlc3MKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9USU1FUjIgICAgICAgICAgICAgICAgICAgKH5BUENJMzEyMF9FTkFCTEVfVElNRVIyKQorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfVElNRVJfSU5UICAgICAgICAgICAgICAgICAweDA0CS8vJCQgRU5BSVJRX0ZDX0JpdCBpbiBuV3JNb2RlU2VsZWN0CisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVJfSU5UICAgICAgICAgICAgICAgICh+QVBDSTMxMjBfRU5BQkxFX1RJTUVSX0lOVCkKKyNkZWZpbmUgQVBDSTMxMjBfV1JJVEVfTU9ERV9TRUxFQ1QgICAgICAgICAgICAgICAgMHgwRQkvLyAoQUREUkVTUykKKyNkZWZpbmUgQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzBfV09SRCAgMHgwMAorI2RlZmluZSBBUENJMzEyMF9TRUxFQ1RfVElNRVJfMV9XT1JEICAweDAxCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSXzFfTU9ERV8yICAgICAgIDB4NAorCisvLyQkIEJJVCBGT1IgTU9ERSBJTiBuQ3NUaW1lckN0cjEKKyNkZWZpbmUgQVBDSTMxMjBfVElNRVJfMl9NT0RFXzAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSXzJfTU9ERV8yICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQVBDSTMxMjBfVElNRVJfMl9NT0RFXzUgICAgICAgICAgICAgICAgICAgMHgzMAorCisvLyQkIEJJVCBGT1IgTU9ERSBJTiBuQ3NUaW1lckN0cjAKKyNkZWZpbmUgQVBDSTMxMjBfU0VMRUNUX1RJTUVSXzJfTE9XX1dPUkQgICAgICAgICAgMHgwMgorI2RlZmluZSBBUENJMzEyMF9TRUxFQ1RfVElNRVJfMl9ISUdIX1dPUkQgICAgICAgICAweDAzCisKKyNkZWZpbmUgQVBDSTMxMjBfVElNRVJfQ1JUMCAgICAgICAgICAgICAgICAgICAgICAgMHgwRAkvLyhBRERSRVNTIGZvciBjQ3NUaW1lckN0cjApCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSX0NSVDEgICAgICAgICAgICAgICAgICAgICAgIDB4MEMJLy8oQUREUkVTUyBmb3IgY0NzVGltZXJDdHIxKQorCisjZGVmaW5lIEFQQ0kzMTIwX1RJTUVSX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgIDB4MDQJLy9BRERSRVNTIGZvciBuQ3NUaW1lcldlcnQKKyNkZWZpbmUgQVBDSTMxMjBfVElNRVJfU1RBVFVTX1JFR0lTVEVSICAgICAgICAgICAgMHgwRAkvL0FERFJFU1MgZm9yIGRlbGV0ZSB0aW1lciAyIGludGVycnVwdAorI2RlZmluZSBBUENJMzEyMF9SRF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAweDAyCS8vQUREUkVTUworI2RlZmluZSBBUENJMzEyMF9XUl9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAweDAwCS8vQUREUkVTUworI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfV0FUQ0hET0cgICAgICAgICAgICAgICAgICAweDIwCS8vJCRCSVQgaW4gbldyTW9kZV9TZWxlY3QKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9XQVRDSERPRyAgICAgICAgICAgICAgICAgKH5BUENJMzEyMF9FTkFCTEVfV0FUQ0hET0cpCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9USU1FUl9DT1VOVEVSICAgIAkJICAweDEwCS8vJCRCSVQgaW4gbldyTW9kZV9TZWxlY3QKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9USU1FUl9DT1VOVEVSICAgICAgICAgICAgKH5BUENJMzEyMF9FTkFCTEVfVElNRVJfQ09VTlRFUikKKyNkZWZpbmUgQVBDSTMxMjBfRkNfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAwCS8vYml0IGluICBzdGF0dXMgcmVnaXN0ZXIKKyNkZWZpbmUgQVBDSTMxMjBfRU5BQkxFX1RJTUVSMCAgICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIEFQQ0kzMTIwX0VOQUJMRV9USU1FUjEgICAgICAgICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBBUENJMzEyMF9FTkFCTEVfVElNRVIyICAgICAgICAgICAgICAgICAgICAweDQwMDAKKyNkZWZpbmUgQVBDSTMxMjBfRElTQUJMRV9USU1FUjAJCQkgICAgICAgICAgKH5BUENJMzEyMF9FTkFCTEVfVElNRVIwKQorI2RlZmluZSBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMQkJICAgICAgICAgICAgICAofkFQQ0kzMTIwX0VOQUJMRV9USU1FUjEpCisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVIyCSAgICAgICAgICAgICAgICAgICh+QVBDSTMxMjBfRU5BQkxFX1RJTUVSMikKKworI2RlZmluZSBBUENJMzEyMF9USU1FUjJfU0VMRUNUX0VPUyAgICAgICAgICAgICAgICAweEMwCS8vIEFEREVEIG9uIDIwLTYKKyNkZWZpbmUgQVBDSTMxMjBfQ09VTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgMwkvLyBvbiAyMC02CisjZGVmaW5lIEFQQ0kzMTIwX0RJU0FCTEVfQUxMX1RJTUVSICAgICAgICAgICAgICAgICggQVBDSTMxMjBfRElTQUJMRV9USU1FUjAgJiBBUENJMzEyMF9ESVNBQkxFX1RJTUVSMSAmIEFQQ0kzMTIwX0RJU0FCTEVfVElNRVIyICkJLy8gb24gMjAtNgorCisjZGVmaW5lIE1BWF9BTkFMT0dJTlBVVF9DSEFOTkVMUyAgICAzMgorCit0eXBlZGVmIHN0cnVjdCB7CisJQllURSBiX1R5cGU7CQkvKiBFT0Mgb3IgRU9TICovCisJQllURSBiX0ludGVycnVwdEZsYWc7CS8qIEludGVycnVwdCB1c2Ugb3Igbm90ICAgICAgICAgICAgICAgICAgICAqLworCVVJTlQgdWlfQ29udmVydFRpbWluZzsJLyogU2VsZWN0aW9uIG9mIHRoZSBjb252ZXJ0aW9uIHRpbWUgICAgICAgICovCisJQllURSBiX05ick9mQ2hhbm5lbDsJLyogTnVtYmVyIG9mIGNoYW5uZWwgdG8gcmVhZCAgICAgICAgICAgICAgICovCisJVUlOVCB1aV9DaGFubmVsTGlzdFtNQVhfQU5BTE9HSU5QVVRfQ0hBTk5FTFNdOwkvKiBOdW1iZXIgb2YgdGhlIGNoYW5uZWwgdG8gYmUgcmVhZCAgICAgICAgKi8KKwlVSU5UIHVpX1JhbmdlTGlzdFtNQVhfQU5BTE9HSU5QVVRfQ0hBTk5FTFNdOwkvKiBHYWluIG9mIGVhY2ggY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgKi8KKworfSBzdHJfQW5hbG9nUmVhZEluZm9ybWF0aW9uOworCisvLyBGdW5jdGlvbiBEZWNsYXJhdGlvbiBGb3IgQVBDSS0zMTIwCisKKy8vIEludGVybmFsIGZ1bmN0aW9ucworaW50IGlfQVBDSTMxMjBfU2V0dXBDaGFubmVsTGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCBjaGFyIGNoZWNrKTsKK2ludCBpX0FQQ0kzMTIwX0V4dHRyaWdFbmFibGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitpbnQgaV9BUENJMzEyMF9FeHR0cmlnRGlzYWJsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK2ludCBpX0FQQ0kzMTIwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitpbnQgaV9BUENJMzEyMF9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK2ludCBpX0FQQ0kzMTIwX0N5Y2xpY0FuYWxvZ0lucHV0KGludCBtb2RlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CisvLyBJbnRlcnJ1cHQgZnVuY3Rpb25zCit2b2lkIHZfQVBDSTMxMjBfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpOworLy9VUERBVEUtMC43LjU3LT4wLjcuNjggdm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdERtYU1vdmVCbG9jazE2Yml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc2hvcnQgKmRtYSxzaG9ydCAqZGF0YSxpbnQgbik7Cit2b2lkIHZfQVBDSTMxMjBfSW50ZXJydXB0RG1hTW92ZUJsb2NrMTZiaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgIHNob3J0ICpkbWFfYnVmZmVyLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgbnVtX3NhbXBsZXMpOworaW50IGlfQVBDSTMxMjBfSW50ZXJydXB0SGFuZGxlRW9zKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwordm9pZCB2X0FQQ0kzMTIwX0ludGVycnVwdERtYShpbnQgaXJxLCB2b2lkICpkKTsKKworLy8gVElNRVIKKworaW50IGlfQVBDSTMxMjBfSW5zbkNvbmZpZ1RpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzMTIwX0luc25Xcml0ZVRpbWVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTMxMjBfSW5zblJlYWRUaW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvL0RJCisvLyBmb3IgZGkgcmVhZAorCitpbnQgaV9BUENJMzEyMF9JbnNuQml0c0RpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTMxMjBfSW5zblJlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy9ETworLy9pbnQgaV9BUENJMzEyMF9Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgQllURSBkYXRhKTsKK2ludCBpX0FQQ0kzMTIwX0luc25Db25maWdEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sCisJCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMzEyMF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy9BTworLy9pbnQgaV9BUENJMzEyMF9Xcml0ZTFBbmFsb2dWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LFVJTlQgdWlfUmFuZ2UsVUlOVCB1aV9DaGFubmVsLFVJTlQgZGF0YSApOworaW50IGlfQVBDSTMxMjBfSW5zbldyaXRlQW5hbG9nT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvL0FJIEhBcmR3YXJlIGxheWVyCisKK2ludCBpX0FQQ0kzMTIwX0luc25Db25maWdBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzMTIwX0luc25SZWFkQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTMxMjBfQ29tbWFuZFRlc3RBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKK2ludCBpX0FQQ0kzMTIwX0NvbW1hbmRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CisvL2ludCBpX0FQQ0kzMTIwX0NhbmNlbEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK2ludCBpX0FQQ0kzMTIwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmNjZiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuYwpAQCAtMCwwICsxLDM2NDIgQEAKKy8qKgorQHZlcmJhdGltCisKK0NvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorCisgICAgICAgIEFEREktREFUQSBHbWJICisgICAgICAgIERpZXNlbHN0cmFzc2UgMworICAgICAgICBELTc3ODMzIE90dGVyc3dlaWVyCisgICAgICAgIFRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAgICAgICAgRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAgICAgICAgaHR0cDovL3d3dy5hZGRpLWRhdGEtY29tCisgICAgICAgIGluZm9AYWRkaS1kYXRhLmNvbQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK1lvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorCitAZW5kdmVyYmF0aW0KKyovCisvKgorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAoQykgQURESS1EQVRBIEdtYkggICAgICAgICAgRGllc2Vsc3RyYcOfZSAzICAgICAgIEQtNzc4MzMgT3R0ZXJzd2VpZXIgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRlbCA6ICs0OSAoMCkgNzIyMy85NDkzLTAgICAgIHwgZW1haWwgICAgOiBpbmZvQGFkZGktZGF0YS5jb20gICAgICAgICB8CisgIHwgRmF4IDogKzQ5ICgwKSA3MjIzLzk0OTMtOTIgICAgfCBJbnRlcm5ldCA6IGh0dHA6Ly93d3cuYWRkaS1kYXRhLmNvbSAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgICAgIDogQVBDSS0zMjAwICAgICAgIHwgQ29tcGlsZXIgICA6IEdDQyAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgTW9kdWxlIG5hbWUgOiBod2Rydl9hcGNpMzIwMC5jfCBWZXJzaW9uICAgIDogMi45NiAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFByb2plY3QgbWFuYWdlcjogRXJpYyBTdG9seiAgIHwgRGF0ZSAgICAgICA6ICAwMi8xMi8yMDAyICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBEZXNjcmlwdGlvbiA6ICAgSGFyZHdhcmUgTGF5ZXIgQWNjZXMgRm9yIEFQQ0ktMzIwMCAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVQREFURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgRGF0ZSAgIHwgICBBdXRob3IgIHwgICAgICAgICAgRGVzY3JpcHRpb24gb2YgdXBkYXRlcyAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAwMi4wNy4wNCB8IEouIEtyYXV0aCB8IE1vZGlmaWNhdGlvbiBmcm9tIHRoZSBkcml2ZXIgaW4gb3JkZXIgdG8gICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgY29ycmVjdCBzb21lIGVycm9ycyB3aGVuIHVzaW5nIHNldmVyYWwgYm9hcmRzLiB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgMjYuMTAuMDQgfCBKLiBLcmF1dGggfCAtIFVwZGF0ZSBmb3IgQ09NRURJIDAuNy42OCAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8IC0gUmVhZCBlZXByb20gdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgLSBBcHBlbmQgQVBDSS0zMzAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworI2luY2x1ZGUgImh3ZHJ2X2FwY2kzMjAwLmgiCisvL0JlZ2luIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKyNpbmNsdWRlICJhZGRpX2FtY2NfUzU5MjAuaCIKKy8vI2RlZmluZSBQUklOVF9JTkZPCisKKy8vRW5kIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKworLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworLyoKKyAgSU5UIGlfQ0pDQXZhaWxhYmxlPTE7CisgIElOVCBpX0NKQ1BvbGFyaXR5PTA7CisgIElOVCBpX0NKQ0dhaW49MjsvL2NoYW5nZWQgZnJvbSAwIHRvIDIKKyAgSU5UIGlfSW50ZXJydXB0RmxhZz0wOworICBJTlQgaV9BRERJREFUQVBvbGFyaXR5OworICBJTlQgaV9BRERJREFUQUdhaW47CisgIElOVCBpX0F1dG9DYWxpYnJhdGlvbj0wOyAgIC8vOiBhdXRvIGNhbGlicmF0aW9uCisgIElOVCBpX0FERElEQVRBQ29udmVyc2lvblRpbWU7CisgIElOVCBpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0OworICBJTlQgaV9BRERJREFUQVR5cGU7CisgIElOVCBpX0NoYW5uZWxObzsKKyAgSU5UIGlfQ2hhbm5lbENvdW50PTA7CisgIElOVCBpX1NjYW5UeXBlOworICBJTlQgaV9GaXJzdENoYW5uZWw7CisgIElOVCBpX0xhc3RDaGFubmVsOworICBJTlQgaV9TdW09MDsKKyAgSU5UIGlfT2Zmc2V0OworICBVSU5UIHVpX0NoYW5uZWxfbnVtPTA7CisgIHN0YXRpYyBpbnQgaV9Db3VudD0wOworICBJTlQgaV9Jbml0aWFsaXNlZD0wOworICBVSU5UIHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVs5Nl07IC8vQnVmZmVyCisqLworc3RyX0JvYXJkSW5mb3Mgc19Cb2FyZEluZm9zWzEwMF07CS8vIDEwMCB3aWxsIGJlIHRoZSBtYXggbnVtYmVyIG9mIGJvYXJkcyB0byBiZSB1c2VkCisvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisvL0JlZ2luIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IEZ1bmN0aW9uICAgTmFtZSAgIDogSU5UIGlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20gICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJTlQgICAgaV9OYk9mV29yZHNUb1JlYWQsICAgICAgICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXT1JEICAgd19FZXByb21TdGFydEFkZHJlc3MsICAgICAgICAgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQV09SRCBwd19EYXRhUmVhZCkgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB3b3JkIGZyb20gdGhlIDU5MjAgZWVwcm9tLiAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IElucHV0IFBhcmFtZXRlcnMgIDogSU5UICAgIGlfTmJPZldvcmRzVG9SZWFkIDogTmJyLiBvZiB3b3JkIHRvIHJlYWQgICAgICAgIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzIDogQWRkcmVzcyBvZiB0aGUgZWVwcm9tIHwqLworLyp8ICAgICAgICAgICAgICAgICAgICAgV09SRCAgIHdfRWVwcm9tU3RhcnRBZGRyZXNzIDogRWVwcm9tIHN0cmF0IGFkZHJlc3MgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IE91dHB1dCBQYXJhbWV0ZXJzIDogUFdPUkQgcHdfRGF0YVJlYWQgOiBSZWFkIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworLyp8IFJldHVybiBWYWx1ZSAgICAgIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwqLworLyorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsqLworCitJTlQgaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbShJTlQgaV9OYk9mV29yZHNUb1JlYWQsCisJRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCVdPUkQgd19FZXByb21TdGFydEFkZHJlc3MsIFBXT1JEIHB3X0RhdGFSZWFkKQoreworCURXT1JEIGR3X2VlcHJvbV9idXN5ID0gMDsKKwlJTlQgaV9Db3VudGVyID0gMDsKKwlJTlQgaV9Xb3JkQ291bnRlcjsKKwlJTlQgaTsKKwlCWVRFIHBiX1JlYWRCeXRlWzFdOworCUJZVEUgYl9SZWFkTG93Qnl0ZSA9IDA7CisJQllURSBiX1JlYWRIaWdoQnl0ZSA9IDA7CisJQllURSBiX1NlbGVjdGVkQWRkcmVzc0xvdyA9IDA7CisJQllURSBiX1NlbGVjdGVkQWRkcmVzc0hpZ2ggPSAwOworCVdPUkQgd19SZWFkV29yZCA9IDA7CisKKwlmb3IgKGlfV29yZENvdW50ZXIgPSAwOyBpX1dvcmRDb3VudGVyIDwgaV9OYk9mV29yZHNUb1JlYWQ7CisJCWlfV29yZENvdW50ZXIrKykgeworCQlkbyB7CisJCQlkd19lZXByb21fYnVzeSA9CisJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCX0KKwkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQlmb3IgKGlfQ291bnRlciA9IDA7IGlfQ291bnRlciA8IDI7IGlfQ291bnRlcisrKSB7CisJCQliX1NlbGVjdGVkQWRkcmVzc0xvdyA9ICh3X0VlcHJvbVN0YXJ0QWRkcmVzcyArIGlfQ291bnRlcikgJSAyNTY7CS8vUmVhZCB0aGUgbG93IDggYml0IHBhcnQKKwkJCWJfU2VsZWN0ZWRBZGRyZXNzSGlnaCA9ICh3X0VlcHJvbVN0YXJ0QWRkcmVzcyArIGlfQ291bnRlcikgLyAyNTY7CS8vUmVhZCB0aGUgaGlnaCA4IGJpdCBwYXJ0CisKKwkJCS8vU2VsZWN0IHRoZSBsb2FkIGxvdyBhZGRyZXNzIG1vZGUKKwkJCW91dGIoTlZDTURfTE9BRF9MT1csCisJCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgQU1DQ19PUF9SRUdfTUNTUiArCisJCQkJMyk7CisKKwkJCS8vV2FpdCBvbiBidXN5CisJCQlkbyB7CisJCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCQlpbmwoZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQkJfQorCQkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQkJLy9Mb2FkIHRoZSBsb3cgYWRkcmVzcworCQkJb3V0YihiX1NlbGVjdGVkQWRkcmVzc0xvdywKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyBBTUNDX09QX1JFR19NQ1NSICsKKwkJCQkyKTsKKworCQkJLy9XYWl0IG9uIGJ1c3kKKwkJCWRvIHsKKwkJCQlkd19lZXByb21fYnVzeSA9CisJCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCQlBTUNDX09QX1JFR19NQ1NSKTsKKwkJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCQl9CisJCQl3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOworCisJCQkvL1NlbGVjdCB0aGUgbG9hZCBoaWdoIGFkZHJlc3MgbW9kZQorCQkJb3V0YihOVkNNRF9MT0FEX0hJR0gsCisJCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsgQU1DQ19PUF9SRUdfTUNTUiArCisJCQkJMyk7CisKKwkJCS8vV2FpdCBvbiBidXN5CisJCQlkbyB7CisJCQkJZHdfZWVwcm9tX2J1c3kgPQorCQkJCQlpbmwoZHdfUENJQm9hcmRFZXByb21BZGRyZXNzICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUik7CisJCQkJZHdfZWVwcm9tX2J1c3kgPSBkd19lZXByb21fYnVzeSAmIEVFUFJPTV9CVVNZOworCQkJfQorCQkJd2hpbGUgKGR3X2VlcHJvbV9idXN5ID09IEVFUFJPTV9CVVNZKTsKKworCQkJLy9Mb2FkIHRoZSBoaWdoIGFkZHJlc3MKKwkJCW91dGIoYl9TZWxlY3RlZEFkZHJlc3NIaWdoLAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArIEFNQ0NfT1BfUkVHX01DU1IgKworCQkJCTIpOworCisJCQkvL1dhaXQgb24gYnVzeQorCQkJZG8geworCQkJCWR3X2VlcHJvbV9idXN5ID0KKwkJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJCWR3X2VlcHJvbV9idXN5ID0gZHdfZWVwcm9tX2J1c3kgJiBFRVBST01fQlVTWTsKKwkJCX0KKwkJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJCS8vU2VsZWN0IHRoZSBSRUFEIG1vZGUKKwkJCW91dGIoTlZDTURfQkVHSU5fUkVBRCwKKwkJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKyBBTUNDX09QX1JFR19NQ1NSICsKKwkJCQkzKTsKKworCQkJLy9XYWl0IG9uIGJ1c3kKKwkJCWRvIHsKKwkJCQlkd19lZXByb21fYnVzeSA9CisJCQkJCWlubChkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MgKworCQkJCQlBTUNDX09QX1JFR19NQ1NSKTsKKwkJCQlkd19lZXByb21fYnVzeSA9IGR3X2VlcHJvbV9idXN5ICYgRUVQUk9NX0JVU1k7CisJCQl9CisJCQl3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOworCisJCQkvL1JlYWQgZGF0YSBpbnRvIHRoZSBFRVBST00KKwkJCSpwYl9SZWFkQnl0ZSA9CisJCQkJaW5iKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJQU1DQ19PUF9SRUdfTUNTUiArIDIpOworCisJCQkvL1dhaXQgb24gYnVzeQorCQkJZG8geworCQkJCWR3X2VlcHJvbV9idXN5ID0KKwkJCQkJaW5sKGR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcyArCisJCQkJCUFNQ0NfT1BfUkVHX01DU1IpOworCQkJCWR3X2VlcHJvbV9idXN5ID0gZHdfZWVwcm9tX2J1c3kgJiBFRVBST01fQlVTWTsKKwkJCX0KKwkJCXdoaWxlIChkd19lZXByb21fYnVzeSA9PSBFRVBST01fQlVTWSk7CisKKwkJCS8vU2VsZWN0IHRoZSB1cHBlciBhZGRyZXNzIHBhcnQKKwkJCWlmIChpX0NvdW50ZXIgPT0gMCkgeworCQkJCWJfUmVhZExvd0J5dGUgPSBwYl9SZWFkQnl0ZVswXTsKKwkJCX0gZWxzZSB7CisJCQkJYl9SZWFkSGlnaEJ5dGUgPSBwYl9SZWFkQnl0ZVswXTsKKwkJCX0KKworCQkJLy9TbGVlcAorCQkJZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspIDsKKworCQl9CisJCXdfUmVhZFdvcmQgPQorCQkJKGJfUmVhZExvd0J5dGUgfCAoKCh1bnNpZ25lZCBzaG9ydCliX1JlYWRIaWdoQnl0ZSkgKgorCQkJCTI1NikpOworCisJCXB3X0RhdGFSZWFkW2lfV29yZENvdW50ZXJdID0gd19SZWFkV29yZDsKKworCQl3X0VlcHJvbVN0YXJ0QWRkcmVzcyArPSAyOwkvLyB0byByZWFkIHRoZSBuZXh0IHdvcmQKKworCX0JCQkvLyBmb3IgKC4uLikgaV9OYk9mV29yZHNUb1JlYWQKKwlyZXR1cm4gKDApOworfQorCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCisvKnwgRnVuY3Rpb24gICBOYW1lICAgOiB2b2lkIHZfR2V0QVBDSTMyMDBFZXByb21DYWxpYnJhdGlvblZhbHVlICh2b2lkKSAgICAgICAgfCovCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCisvKnwgVGFzayAgICAgICAgICAgICAgOiBSZWFkIGNhbGlicmF0aW9uIHZhbHVlIGZyb20gdGhlIEFQQ0ktMzIwMCBlZXByb20uICAgICAgfCovCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCisvKnwgSW5wdXQgUGFyYW1ldGVycyAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCovCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCisvKnwgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCovCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCisvKnwgUmV0dXJuIFZhbHVlICAgICAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCovCisvKistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyovCisKK3ZvaWQgdl9HZXRBUENJMzIwMEVlcHJvbUNhbGlicmF0aW9uVmFsdWUoRFdPUkQgZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLAorCXN0cl9Cb2FyZEluZm9zICogQm9hcmRJbmZvcm1hdGlvbnMpCit7CisJV09SRCB3X0FuYWxvZ0lucHV0TWFpbkhlYWRlckFkZHJlc3M7CisJV09SRCB3X0FuYWxvZ0lucHV0Q29tcG9uZW50QWRkcmVzczsKKwlXT1JEIHdfTnVtYmVyT2ZNb2R1bHMgPSAwOworCVdPUkQgd19DdXJyZW50U291cmNlc1syXTsKKwlXT1JEIHdfTW9kdWxDb3VudGVyID0gMDsKKwlXT1JEIHdfRmlyc3RIZWFkZXJTaXplID0gMDsKKwlXT1JEIHdfTnVtYmVyT2ZJbnB1dHMgPSAwOworCVdPUkQgd19DSkNGbGFnID0gMDsKKwlXT1JEIHdfTnVtYmVyT2ZHYWluVmFsdWUgPSAwOworCVdPUkQgd19TaW5nbGVIZWFkZXJBZGRyZXNzID0gMDsKKwlXT1JEIHdfU2luZ2xlSGVhZGVyU2l6ZSA9IDA7CisJV09SRCB3X0lucHV0ID0gMDsKKwlXT1JEIHdfR2FpbkZhY3RvckFkZHJlc3MgPSAwOworCVdPUkQgd19HYWluRmFjdG9yVmFsdWVbMl07CisJV09SRCB3X0dhaW5JbmRleCA9IDA7CisJV09SRCB3X0dhaW5WYWx1ZSA9IDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiogR2V0IHRoZSBBbmFsb2cgaW5wdXQgaGVhZGVyIGFkZHJlc3MgKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDEsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCAweDExNiwJLy93X0VlcHJvbVN0YXJ0QWRkcmVzczogQW5hbG9nIGlucHV0IGhlYWRlciBhZGRyZXNzCisJCSZ3X0FuYWxvZ0lucHV0TWFpbkhlYWRlckFkZHJlc3MpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiogQ29tcHV0ZSB0aGUgcmVhbCBhbmFsb2cgaW5wdXQgYWRkcmVzcyAqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJd19BbmFsb2dJbnB1dE1haW5IZWFkZXJBZGRyZXNzID0gd19BbmFsb2dJbnB1dE1haW5IZWFkZXJBZGRyZXNzICsgMHgxMDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqIEdldCB0aGUgbnVtYmVyIG9mIG1vZHVscyAqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDEsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCB3X0FuYWxvZ0lucHV0TWFpbkhlYWRlckFkZHJlc3MgKyAweDAyLAkvL3dfRWVwcm9tU3RhcnRBZGRyZXNzOiBOdW1iZXIgb2YgY29ucG9ubWVudAorCQkmd19OdW1iZXJPZk1vZHVscyk7CisKKwlmb3IgKHdfTW9kdWxDb3VudGVyID0gMDsgd19Nb2R1bENvdW50ZXIgPCB3X051bWJlck9mTW9kdWxzOworCQl3X01vZHVsQ291bnRlcisrKSB7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogQ29tcHV0ZSB0aGUgY29tcG9uZW50IGFkZHJlc3MgKiovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCXdfQW5hbG9nSW5wdXRDb21wb25lbnRBZGRyZXNzID0KKwkJCXdfQW5hbG9nSW5wdXRNYWluSGVhZGVyQWRkcmVzcyArCisJCQkod19GaXJzdEhlYWRlclNpemUgKiB3X01vZHVsQ291bnRlcikgKyAweDA0OworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qKiBSZWFkIGZpcnN0IGhlYWRlciBzaXplICoqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oMSwJLy9pX05iT2ZXb3Jkc1RvUmVhZAorCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCB3X0FuYWxvZ0lucHV0Q29tcG9uZW50QWRkcmVzcywJLy8gQWRkcmVzcyBvZiB0aGUgZmlyc3QgaGVhZGVyCisJCQkmd19GaXJzdEhlYWRlclNpemUpOworCisJCXdfRmlyc3RIZWFkZXJTaXplID0gd19GaXJzdEhlYWRlclNpemUgPj4gNDsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qKiBSZWFkIG51bWJlciBvZiBpbnB1dHMgKiovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDEsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3MgKyAweDA2LAkvLyBOdW1iZXIgb2YgaW5wdXRzIGZvciB0aGUgZmlyc3QgbW9kdWwKKwkJCSZ3X051bWJlck9mSW5wdXRzKTsKKworCQl3X051bWJlck9mSW5wdXRzID0gd19OdW1iZXJPZklucHV0cyA+PiA0OworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogUmVhZCB0aGUgQ0pDIGZsYWcgKiovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisJCWlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oMSwJLy9pX05iT2ZXb3Jkc1RvUmVhZAorCQkJZHdfUENJQm9hcmRFZXByb21BZGRyZXNzLCB3X0FuYWxvZ0lucHV0Q29tcG9uZW50QWRkcmVzcyArIDB4MDgsCS8vIENKQyBmbGFnCisJCQkmd19DSkNGbGFnKTsKKworCQl3X0NKQ0ZsYWcgPSAod19DSkNGbGFnID4+IDMpICYgMHgxOwkvLyBHZXQgb25seSB0aGUgQ0pDIGZsYWcKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogUmVhZCBudW1iZXIgb2YgZ2FpbiB2YWx1ZSAqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQlpX0FkZGlIZWFkZXJSV19SZWFkRWVwcm9tKDEsCS8vaV9OYk9mV29yZHNUb1JlYWQKKwkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3MgKyAweDQ0LAkvLyBOdW1iZXIgb2YgZ2FpbiB2YWx1ZQorCQkJJndfTnVtYmVyT2ZHYWluVmFsdWUpOworCisJCXdfTnVtYmVyT2ZHYWluVmFsdWUgPSB3X051bWJlck9mR2FpblZhbHVlICYgMHhGRjsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqIENvbXB1dGUgc2luZ2xlIGhlYWRlciBhZGRyZXNzICoqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQl3X1NpbmdsZUhlYWRlckFkZHJlc3MgPQorCQkJd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3MgKyAweDQ2ICsKKwkJCSgoKHdfTnVtYmVyT2ZHYWluVmFsdWUgLyAxNikgKyAxKSAqIDIpICsKKwkJCSg2ICogd19OdW1iZXJPZkdhaW5WYWx1ZSkgKworCQkJKDQgKiAoKCh3X051bWJlck9mR2FpblZhbHVlIC8gMTYpICsgMSkgKiAyKSk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgIC8qKiBSZWFkIGN1cnJlbnQgc291cmNlcyB2YWx1ZSBmb3IgaW5wdXQgMSAqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbSgxLAkvL2lfTmJPZldvcmRzVG9SZWFkCisJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsIHdfU2luZ2xlSGVhZGVyQWRkcmVzcywJLy93X0VlcHJvbVN0YXJ0QWRkcmVzczogU2luZ2xlIGhlYWRlciBhZGRyZXNzCisJCQkmd19TaW5nbGVIZWFkZXJTaXplKTsKKworCQl3X1NpbmdsZUhlYWRlclNpemUgPSB3X1NpbmdsZUhlYWRlclNpemUgPj4gNDsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogUmVhZCBnYWluIGZhY3RvciBmb3IgdGhlIG1vZHVsZSAqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQl3X0dhaW5GYWN0b3JBZGRyZXNzID0gd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3M7CisKKwkJZm9yICh3X0dhaW5JbmRleCA9IDA7IHdfR2FpbkluZGV4IDwgd19OdW1iZXJPZkdhaW5WYWx1ZTsKKwkJCXdfR2FpbkluZGV4KyspIHsKKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJICAvKiogUmVhZCBnYWluIHZhbHVlIGZvciB0aGUgbW9kdWxlICoqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCWlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oMSwJLy9pX05iT2ZXb3Jkc1RvUmVhZAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3MgKyA3MCArICgyICogKDEgKyAod19OdW1iZXJPZkdhaW5WYWx1ZSAvIDE2KSkpICsgKDB4MDIgKiB3X0dhaW5JbmRleCksCS8vIEdhaW4gdmFsdWUKKwkJCQkmd19HYWluVmFsdWUpOworCisJCQlCb2FyZEluZm9ybWF0aW9ucy0+c19Nb2R1bGVbd19Nb2R1bENvdW50ZXJdLgorCQkJCXdfR2FpblZhbHVlW3dfR2FpbkluZGV4XSA9IHdfR2FpblZhbHVlOworCisjICAgICAgICAgICAgIGlmZGVmIFBSSU5UX0lORk8KKwkJCXByaW50aygiXG4gR2FpbiB2YWx1ZSA9ICVkIiwKKwkJCQlCb2FyZEluZm9ybWF0aW9ucy0+c19Nb2R1bGVbd19Nb2R1bENvdW50ZXJdLgorCQkJCXdfR2FpblZhbHVlW3dfR2FpbkluZGV4XSk7CisjICAgICAgICAgICAgIGVuZGlmCisKKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCSAgLyoqIFJlYWQgZ2FpbiBmYWN0b3IgZm9yIHRoZSBtb2R1bGUgKiovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCWlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oMiwJLy9pX05iT2ZXb3Jkc1RvUmVhZAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywgd19BbmFsb2dJbnB1dENvbXBvbmVudEFkZHJlc3MgKyA3MCArICgoMiAqIHdfTnVtYmVyT2ZHYWluVmFsdWUpICsgKDIgKiAoMSArICh3X051bWJlck9mR2FpblZhbHVlIC8gMTYpKSkpICsgKDB4MDQgKiB3X0dhaW5JbmRleCksCS8vIEdhaW4gZmFjdG9yCisJCQkJd19HYWluRmFjdG9yVmFsdWUpOworCisJCQlCb2FyZEluZm9ybWF0aW9ucy0+c19Nb2R1bGVbd19Nb2R1bENvdW50ZXJdLgorCQkJCXVsX0dhaW5GYWN0b3Jbd19HYWluSW5kZXhdID0KKwkJCQkod19HYWluRmFjdG9yVmFsdWVbMV0gPDwgMTYpICsKKwkJCQl3X0dhaW5GYWN0b3JWYWx1ZVswXTsKKworIyAgICAgICAgICAgICBpZmRlZiBQUklOVF9JTkZPCisJCQlwcmludGsoIlxuIHdfR2FpbkZhY3RvclZhbHVlIFslZF0gPSAlbHUiLCB3X0dhaW5JbmRleCwKKwkJCQlCb2FyZEluZm9ybWF0aW9ucy0+c19Nb2R1bGVbd19Nb2R1bENvdW50ZXJdLgorCQkJCXVsX0dhaW5GYWN0b3Jbd19HYWluSW5kZXhdKTsKKyMgICAgICAgICAgICAgZW5kaWYKKwkJfQorCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgLyoqIFJlYWQgY3VycmVudCBzb3VyY2UgdmFsdWUgZm9yIGVhY2ggY2hhbm5lbHMgb2YgdGhlIG1vZHVsZSAqKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWZvciAod19JbnB1dCA9IDA7IHdfSW5wdXQgPCB3X051bWJlck9mSW5wdXRzOyB3X0lucHV0KyspIHsKKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkgIC8qKiBSZWFkIGN1cnJlbnQgc291cmNlcyB2YWx1ZSBmb3IgaW5wdXQgMSAqKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCWlfQWRkaUhlYWRlclJXX1JlYWRFZXByb20oMiwJLy9pX05iT2ZXb3Jkc1RvUmVhZAorCQkJCWR3X1BDSUJvYXJkRWVwcm9tQWRkcmVzcywKKwkJCQkod19JbnB1dCAqIHdfU2luZ2xlSGVhZGVyU2l6ZSkgKworCQkJCXdfU2luZ2xlSGVhZGVyQWRkcmVzcyArIDB4MEMsIHdfQ3VycmVudFNvdXJjZXMpOworCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCSAgLyoqIFNhdmUgdGhlIGN1cnJlbnQgc291cmNlcyB2YWx1ZSAqKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQlCb2FyZEluZm9ybWF0aW9ucy0+c19Nb2R1bGVbd19Nb2R1bENvdW50ZXJdLgorCQkJCXVsX0N1cnJlbnRTb3VyY2Vbd19JbnB1dF0gPQorCQkJCSh3X0N1cnJlbnRTb3VyY2VzWzBdICsKKwkJCQkoKHdfQ3VycmVudFNvdXJjZXNbMV0gJiAweEZGRikgPDwgMTYpKTsKKworIyAgICAgICAgICAgICBpZmRlZiBQUklOVF9JTkZPCisJCQlwcmludGsoIlxuIEN1cnJlbnQgc291cmNlcyBbJWRdID0gJWx1Iiwgd19JbnB1dCwKKwkJCQlCb2FyZEluZm9ybWF0aW9ucy0+c19Nb2R1bGVbd19Nb2R1bENvdW50ZXJdLgorCQkJCXVsX0N1cnJlbnRTb3VyY2Vbd19JbnB1dF0pOworIyAgICAgICAgICAgICBlbmRpZgorCQl9CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogUmVhZCB0aGUgQ0pDIGN1cnJlbnQgc291cmNlIHZhbHVlICoqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJaV9BZGRpSGVhZGVyUldfUmVhZEVlcHJvbSgyLAkvL2lfTmJPZldvcmRzVG9SZWFkCisJCQlkd19QQ0lCb2FyZEVlcHJvbUFkZHJlc3MsCisJCQkod19JbnB1dCAqIHdfU2luZ2xlSGVhZGVyU2l6ZSkgKyB3X1NpbmdsZUhlYWRlckFkZHJlc3MgKworCQkJMHgwQywgd19DdXJyZW50U291cmNlcyk7CisKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAvKiogU2F2ZSB0aGUgY3VycmVudCBzb3VyY2VzIHZhbHVlICoqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJQm9hcmRJbmZvcm1hdGlvbnMtPnNfTW9kdWxlW3dfTW9kdWxDb3VudGVyXS4KKwkJCXVsX0N1cnJlbnRTb3VyY2VDSkMgPQorCQkJKHdfQ3VycmVudFNvdXJjZXNbMF0gKworCQkJKCh3X0N1cnJlbnRTb3VyY2VzWzFdICYgMHhGRkYpIDw8IDE2KSk7CisKKyMgICAgICAgICAgaWZkZWYgUFJJTlRfSU5GTworCQlwcmludGsoIlxuIEN1cnJlbnQgc291cmNlcyBDSkMgPSAlbHUiLAorCQkJQm9hcmRJbmZvcm1hdGlvbnMtPnNfTW9kdWxlW3dfTW9kdWxDb3VudGVyXS4KKwkJCXVsX0N1cnJlbnRTb3VyY2VDSkMpOworIyAgICAgICAgICBlbmRpZgorCX0KK30KKworSU5UIGlfQVBDSTMyMDBfR2V0Q2hhbm5lbENhbGlicmF0aW9uVmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgaW50IHVpX0NoYW5uZWxfbnVtLCB1bnNpZ25lZCBpbnQgKiBDSkNDdXJyZW50U291cmNlLAorCXVuc2lnbmVkIGludCAqIENoYW5uZWxDdXJyZW50U291cmNlLCB1bnNpZ25lZCBpbnQgKiBDaGFubmVsR2FpbkZhY3RvcikKK3sKKwlpbnQgaV9EaWZmQ2hhbm5lbCA9IDA7CisJaW50IGlfTW9kdWxlID0gMDsKKworI2lmZGVmIFBSSU5UX0lORk8KKwlwcmludGsoIlxuIENoYW5uZWwgPSAldSIsIHVpX0NoYW5uZWxfbnVtKTsKKyNlbmRpZgorCisJLy9UZXN0IGlmIHNpbmdsZSBvciBkaWZmZXJlbnRpYWwgbW9kZQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db25uZWN0aW9uVHlwZSA9PSAxKSB7CisJCS8vaWYgZGlmZgorCisJCWlmICgodWlfQ2hhbm5lbF9udW0gPj0gMCkgJiYgKHVpX0NoYW5uZWxfbnVtIDw9IDEpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IHVpX0NoYW5uZWxfbnVtLCBpX01vZHVsZSA9IDA7CisJCWVsc2UgaWYgKCh1aV9DaGFubmVsX251bSA+PSAyKSAmJiAodWlfQ2hhbm5lbF9udW0gPD0gMykpCisJCQlpX0RpZmZDaGFubmVsID0gdWlfQ2hhbm5lbF9udW0gLSAyLCBpX01vZHVsZSA9IDE7CisJCWVsc2UgaWYgKCh1aV9DaGFubmVsX251bSA+PSA0KSAmJiAodWlfQ2hhbm5lbF9udW0gPD0gNSkpCisJCQlpX0RpZmZDaGFubmVsID0gdWlfQ2hhbm5lbF9udW0gLSA0LCBpX01vZHVsZSA9IDI7CisJCWVsc2UgaWYgKCh1aV9DaGFubmVsX251bSA+PSA2KSAmJiAodWlfQ2hhbm5lbF9udW0gPD0gNykpCisJCQlpX0RpZmZDaGFubmVsID0gdWlfQ2hhbm5lbF9udW0gLSA2LCBpX01vZHVsZSA9IDM7CisKKwl9IGVsc2UgeworCQkvLyBpZiBzaW5nbGUKKwkJaWYgKCh1aV9DaGFubmVsX251bSA9PSAwKSB8fCAodWlfQ2hhbm5lbF9udW0gPT0gMSkpCisJCQlpX0RpZmZDaGFubmVsID0gMCwgaV9Nb2R1bGUgPSAwOworCQllbHNlIGlmICgodWlfQ2hhbm5lbF9udW0gPT0gMikgfHwgKHVpX0NoYW5uZWxfbnVtID09IDMpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IDEsIGlfTW9kdWxlID0gMDsKKwkJZWxzZSBpZiAoKHVpX0NoYW5uZWxfbnVtID09IDQpIHx8ICh1aV9DaGFubmVsX251bSA9PSA1KSkKKwkJCWlfRGlmZkNoYW5uZWwgPSAwLCBpX01vZHVsZSA9IDE7CisJCWVsc2UgaWYgKCh1aV9DaGFubmVsX251bSA9PSA2KSB8fCAodWlfQ2hhbm5lbF9udW0gPT0gNykpCisJCQlpX0RpZmZDaGFubmVsID0gMSwgaV9Nb2R1bGUgPSAxOworCQllbHNlIGlmICgodWlfQ2hhbm5lbF9udW0gPT0gOCkgfHwgKHVpX0NoYW5uZWxfbnVtID09IDkpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IDAsIGlfTW9kdWxlID0gMjsKKwkJZWxzZSBpZiAoKHVpX0NoYW5uZWxfbnVtID09IDEwKSB8fCAodWlfQ2hhbm5lbF9udW0gPT0gMTEpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IDEsIGlfTW9kdWxlID0gMjsKKwkJZWxzZSBpZiAoKHVpX0NoYW5uZWxfbnVtID09IDEyKSB8fCAodWlfQ2hhbm5lbF9udW0gPT0gMTMpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IDAsIGlfTW9kdWxlID0gMzsKKwkJZWxzZSBpZiAoKHVpX0NoYW5uZWxfbnVtID09IDE0KSB8fCAodWlfQ2hhbm5lbF9udW0gPT0gMTUpKQorCQkJaV9EaWZmQ2hhbm5lbCA9IDEsIGlfTW9kdWxlID0gMzsKKwl9CisKKwkvL1Rlc3QgaWYgdGhlcm1vY291cGxlIG9yIFJURCBtb2RlCisJKkNKQ0N1cnJlbnRTb3VyY2UgPQorCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uc19Nb2R1bGVbaV9Nb2R1bGVdLnVsX0N1cnJlbnRTb3VyY2VDSkM7CisjaWZkZWYgUFJJTlRfSU5GTworCXByaW50aygiXG4gQ0pDQ3VycmVudFNvdXJjZSA9ICVsdSIsICpDSkNDdXJyZW50U291cmNlKTsKKyNlbmRpZgorCisJKkNoYW5uZWxDdXJyZW50U291cmNlID0KKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnNfTW9kdWxlW2lfTW9kdWxlXS4KKwkJdWxfQ3VycmVudFNvdXJjZVtpX0RpZmZDaGFubmVsXTsKKyNpZmRlZiBQUklOVF9JTkZPCisJcHJpbnRrKCJcbiBDaGFubmVsQ3VycmVudFNvdXJjZSA9ICVsdSIsICpDaGFubmVsQ3VycmVudFNvdXJjZSk7CisjZW5kaWYKKwkvLyAgICAgIH0KKwkvLyAgIH0KKworCS8vQ2hhbm5sZSBnYWluIGZhY3RvcgorCSpDaGFubmVsR2FpbkZhY3RvciA9CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5zX01vZHVsZVtpX01vZHVsZV0uCisJCXVsX0dhaW5GYWN0b3Jbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFHYWluXTsKKyNpZmRlZiBQUklOVF9JTkZPCisJcHJpbnRrKCJcbiBDaGFubmVsR2FpbkZhY3RvciA9ICVsdSIsICpDaGFubmVsR2FpbkZhY3Rvcik7CisjZW5kaWYKKwkvL0VuZCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKwlyZXR1cm4gKDApOworfQorCisvL0VuZCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZERpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCAgdmFsdWUgIG9mIHRoZSBzZWxlY3RlZCBjaGFubmVsIG9yIHBvcnQgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgdWlfTm9PZkNoYW5uZWxzICAgIDogTm8gT2YgQ2hhbm5lbHMgVG8gcmVhZCAgZm9yIFBvcnQKKyAgQ2hhbm5lbCBOdW1iZXJmb3Igc2luZ2xlIGNoYW5uZWwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgZGF0YVswXSAgICAgICAgICAgIDogMDogUmVhZCBzaW5nbGUgY2hhbm5lbAorICAxOiBSZWFkIHBvcnQgdmFsdWUKKyAgZGF0YVsxXSAgICAgICAgICAgICAgUG9ydCBudW1iZXIKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQlkYXRhWzBdIDpSZWFkIHN0YXR1cyB2YWx1ZQorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworSU5UIGlfQVBDSTMyMDBfUmVhZERpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wID0gMDsKKwlVSU5UIHVpX05vT2ZDaGFubmVsID0gMDsKKwl1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVpX1RlbXAgPSBkYXRhWzBdOworCSpkYXRhID0gaW5sKGRldnByaXYtPmlfSW9iYXNlUmVzZXJ2ZWQpOworCisJaWYgKHVpX1RlbXAgPT0gMCkgeworCQkqZGF0YSA9ICgqZGF0YSA+PiB1aV9Ob09mQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vaWYgICh1aV9UZW1wPT0wKQorCWVsc2UgeworCQlpZiAodWlfVGVtcCA9PSAxKSB7CisJCQlpZiAoZGF0YVsxXSA8IDAgfHwgZGF0YVsxXSA+IDEpIHsKKwkJCQlwcmludGsoIlxuVGhlIHBvcnQgbnVtYmVyIGlzIGluIGVycm9yXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0JLy9pZihkYXRhWzFdIDwgMCB8fCBkYXRhWzFdID4xKQorCQkJc3dpdGNoICh1aV9Ob09mQ2hhbm5lbCkgeworCisJCQljYXNlIDI6CisJCQkJKmRhdGEgPSAoKmRhdGEgPj4gKDIgKiBkYXRhWzFdKSkgJiAweDM7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJKmRhdGEgPSAoKmRhdGEgJiAxNSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWNvbWVkaV9lcnJvcihkZXYsICIgY2hhbiBzcGVjIHdyb25nIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCisJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwkJfQkJLy9pZiAgKHVpX1RlbXA9PTEpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWQgXG4iKTsKKwkJfQkJLy9lbHNlaWYgICh1aV9UZW1wPT0xKQorCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzIwMF9Db25maWdEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBEaWdpdGFsIE91dHB1dCBTdWJkZXZpY2UuICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICBkYXRhWzBdICA6MSAgTWVtb3J5IGVuYWJsZQorICAwICBNZW1vcnkgRGlzYWJsZQorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yCQkJIHwKKyAgfAkJCQkJCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTMyMDBfQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlpZiAoKGRhdGFbMF0gIT0gMCkgJiYgKGRhdGFbMF0gIT0gMSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJOb3QgYSB2YWxpZCBEYXRhICEhISAsRGF0YSBzaG91bGQgYmUgMSBvciAwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vaWYgICggKGRhdGFbMF0hPTApICYmIChkYXRhWzBdIT0xKSApCisJaWYgKGRhdGFbMF0pIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9FTkFCTEU7CisJfQkJCS8vIGlmICAoZGF0YVswXSkKKwllbHNlIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9ESVNBQkxFOworCX0JCQkvL2Vsc2UgaWYgIChkYXRhWzBdKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzMjAwX1dyaXRlRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAkJCQkgfAorICB8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IHdyaXRlcyBUbyB0aGUgZGlnaXRhbCBPdXRwdXQgU3ViZGV2aWNlICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyAgICAgOiBTdWJkZXZpY2UgUG9pbnRlciAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICA6IEluc24gU3RydWN0dXJlIFBvaW50ZXIgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorICB8ICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICAgICAgICAgICA6VmFsdWUgdG8gb3V0cHV0CisgIGRhdGFbMV0gICAgICAgICAgICAgOiAwIG8vcCBzaW5nbGUgY2hhbm5lbAorICAxIG8vcCBwb3J0CisgIGRhdGFbMl0gICAgICAgICAgICAgOiBwb3J0IG5vCisgIGRhdGFbM10gICAgICAgICAgICAgOjAgc2V0IHRoZSBkaWdpdGFsIG8vcCBvbgorICAxIHNldCB0aGUgZGlnaXRhbCBvL3Agb2ZmCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IJICAgICAJIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTMyMDBfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXAgPSAwLCB1aV9UZW1wMSA9IDA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBnZXQgdGhlIGNoYW5uZWwKKwlpZiAoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMpIHsKKwkJdWlfVGVtcCA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFkZG9uKTsKKworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwllbHNlIHsKKwkJdWlfVGVtcCA9IDA7CisJfQkJCS8vaWYoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWlmIChkYXRhWzNdID09IDApIHsKKwkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSB8IHVpX1RlbXA7CisJCQlvdXRsKGRhdGFbMF0sIGRldnByaXYtPmlfSW9iYXNlQWRkb24pOworCQl9CQkvL2lmKGRhdGFbMV09PTApCisJCWVsc2UgeworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKworCQkJCWNhc2UgMjoKKwkJCQkJZGF0YVswXSA9CisJCQkJCQkoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJZGF0YVsyXSkpIHwgdWlfVGVtcDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOgorCQkJCQlkYXRhWzBdID0gKGRhdGFbMF0gfCB1aV9UZW1wKTsKKwkJCQkJYnJlYWs7CisJCQkJfQkvL3N3aXRjaCh1aV9Ob09mQ2hhbm5lbHMpCisKKwkJCQlvdXRsKGRhdGFbMF0sIGRldnByaXYtPmlfSW9iYXNlQWRkb24pOworCQkJfQkvLyBpZihkYXRhWzFdPT0xKQorCQkJZWxzZSB7CisJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJfQkvL2Vsc2UgaWYoZGF0YVsxXT09MSkKKwkJfQkJLy9lbHNlaWYoZGF0YVsxXT09MCkKKwl9CQkJLy9pZihkYXRhWzNdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVszXSA9PSAxKSB7CisJCQlpZiAoZGF0YVsxXSA9PSAwKSB7CisJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgxOworCQkJCXVpX1RlbXAxID0gMTsKKwkJCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IHVpX05vT2ZDaGFubmVsOworCQkJCXVpX1RlbXAgPSB1aV9UZW1wIHwgdWlfVGVtcDE7CisJCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSBeIDB4ZjsKKwkJCQlkYXRhWzBdID0gZGF0YVswXSAmIHVpX1RlbXA7CisJCQkJb3V0bChkYXRhWzBdLCBkZXZwcml2LT5pX0lvYmFzZUFkZG9uKTsKKwkJCX0JLy9pZihkYXRhWzFdPT0wKQorCQkJZWxzZSB7CisJCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCQlzd2l0Y2ggKHVpX05vT2ZDaGFubmVsKSB7CisKKwkJCQkJY2FzZSAyOgorCQkJCQkJZGF0YVswXSA9IH5kYXRhWzBdICYgMHgzOworCQkJCQkJdWlfVGVtcDEgPSAzOworCQkJCQkJdWlfVGVtcDEgPQorCQkJCQkJCXVpX1RlbXAxIDw8IDIgKiBkYXRhWzJdOworCQkJCQkJdWlfVGVtcCA9IHVpX1RlbXAgfCB1aV9UZW1wMTsKKwkJCQkJCWRhdGFbMF0gPQorCQkJCQkJCSgoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJCQlkYXRhCisJCQkJCQkJCQlbMl0pKSBeCisJCQkJCQkJMHhmKSAmIHVpX1RlbXA7CisKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDM6CisJCQkJCQlicmVhazsKKworCQkJCQlkZWZhdWx0OgorCQkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCQkiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCQkJcmV0dXJuIC1FSU5WQUw7CS8vICJzb3JyeSBjaGFubmVsIHNwZWMgd3JvbmcgIgorCQkJCQl9CS8vc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKworCQkJCQlvdXRsKGRhdGFbMF0sIGRldnByaXYtPmlfSW9iYXNlQWRkb24pOworCQkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCQllbHNlIHsKKwkJCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCQl9CS8vZWxzZWlmKGRhdGFbMV09PTApCisJCX0JCS8vaWYoZGF0YVszXT09MSk7CisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IGV4aXN0XG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CQkvL2lmIGVsc2UgZGF0YVszXT09MSkKKwl9CQkJLy9pZiBlbHNlIGRhdGFbM109PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZERpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBvciBwb3J0ICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIHJlYWQgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKyAgZGF0YVswXSAgICAgICAgICAgICAgICAgOjAgcmVhZCBzaW5nbGUgY2hhbm5lbAorICAxIHJlYWQgcG9ydCB2YWx1ZQorICBkYXRhWzFdICAgICAgICAgICAgICAgICAgcG9ydCBubworCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMzIwMF9SZWFkRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wOworCVVJTlQgdWlfTm9PZkNoYW5uZWw7CisJdWlfTm9PZkNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1aV9UZW1wID0gZGF0YVswXTsKKwkqZGF0YSA9IGlubChkZXZwcml2LT5pX0lvYmFzZUFkZG9uKTsKKwlpZiAodWlfVGVtcCA9PSAwKSB7CisJCSpkYXRhID0gKCpkYXRhID4+IHVpX05vT2ZDaGFubmVsKSAmIDB4MTsKKwl9CQkJLy8gaWYgICh1aV9UZW1wPT0wKQorCWVsc2UgeworCQlpZiAodWlfVGVtcCA9PSAxKSB7CisJCQlpZiAoZGF0YVsxXSA8IDAgfHwgZGF0YVsxXSA+IDEpIHsKKwkJCQlwcmludGsoIlxuVGhlIHBvcnQgc2VsZWN0aW9uIGlzIGluIGVycm9yXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0JLy9pZihkYXRhWzFdIDwwIHx8ZGF0YVsxXSA+MSkKKwkJCXN3aXRjaCAodWlfTm9PZkNoYW5uZWwpIHsKKwkJCWNhc2UgMjoKKwkJCQkqZGF0YSA9ICgqZGF0YSA+PiAoMiAqIGRhdGFbMV0pKSAmIDM7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgMzoKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiIGNoYW4gc3BlYyB3cm9uZyIpOworCQkJCXJldHVybiAtRUlOVkFMOwkvLyAic29ycnkgY2hhbm5lbCBzcGVjIHdyb25nICIKKwkJCQlicmVhazsKKwkJCX0JLy8gc3dpdGNoKHVpX05vT2ZDaGFubmVscykKKwkJfQkJLy8gaWYgICh1aV9UZW1wPT0xKQorCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkIFxuIik7CisJCX0JCS8vIGVsc2UgaWYgKHVpX1RlbXA9PTEpCisJfQkJCS8vIGVsc2UgaWYgICh1aV9UZW1wPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IElOVCBpX0FQQ0kzMjAwX0NvbmZpZ0FuYWxvZ0lucHV0ICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBBbmFsb2cgSW5wdXQgU3ViZGV2aWNlICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgICAgIDogU3ViZGV2aWNlIFBvaW50ZXIgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgOiBJbnNuIFN0cnVjdHVyZSBQb2ludGVyICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkJCWRhdGFbMF0KKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpOb3JtYWwgQUkgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6UlREICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyOlRIRVJNT0NPVVBMRSAgICAgICAgICAgICAgIHwKKyAgfAkJCQkgICAgZGF0YVsxXSAgICAgICAgICAgIDogR2FpbiBUbyBVc2UgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzJdICAgICAgICAgICAgOiBQb2xhcml0eQorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpCaXBvbGFyICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6VW5pcG9sYXIgICAgICAgICAgICAgICAgICB8CisgIHwJCQkJCQkJCQkJCQkJCQkgICAgCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzNdICAgICAgICAgICAgOiBPZmZzZXQgUmFuZ2UKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzRdICAgICAgICAgICAgOiBDb3VwbGluZworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpEQyBDb3VwbGluZyAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6QUMgQ291cGxpbmcgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs1XSAgICAgICAgICAgIDpEaWZmZXJlbnRpYWwvU2luZ2xlCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwOlNpbmdsZSAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTpEaWZmZXJlbnRpYWwgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzZdICAgICAgICAgICAgOlRpbWVyUmVsb2FkVmFsdWUKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzddICAgICAgICAgICAgOkNvbnZlcnRpbmdUaW1lVW5pdAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbOF0gICAgICAgICAgICAgOjAgQW5hbG9nIHZvbHRhZ2UgbWVhc3VyZW1lbnQKKyAgMSBSZXNpc3RhbmNlIG1lYXN1cmVtZW50CisgIDIgVGVtcGVyYXR1cmUgbWVhc3VyZW1lbnQKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbOV0gICAgICAgICAgICA6SW50ZXJydXB0CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDpEaXNhYmxlCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTpFbmFibGUKKyAgZGF0YVsxMF0gICAgICAgICAgIDpUeXBlIG9mIFRoZXJtb2NvdXBsZQorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzExXSAgICAgICAgICAgOiAwOiBzaW5nbGUgY2hhbm5lbAorICBNb2R1bGUgTnVtYmVyCisgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxMl0KKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6U2luZ2xlIFJlYWQKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6UmVhZCBtb3JlIGNoYW5uZWwKKyAgMjpTaW5nbGUgc2NhbgorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzpDb250aW5vdXMgU2NhbgorICBkYXRhWzEzXSAgICAgICAgICA6TnVtYmVyIG9mIGNoYW5uZWxzIHRvIHJlYWQKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxNF0gICAgICAgICAgOlJURCBjb25uZWN0aW9uIHR5cGUKKyAgOjA6UlREIG5vdCB1c2VkCisgIDE6UlREIDIgd2lyZSBjb25uZWN0aW9uCisgIDI6UlREIDMgd2lyZSBjb25uZWN0aW9uCisgIDM6UlREIDQgd2lyZSBjb25uZWN0aW9uCisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMzIwMF9Db25maWdBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlVSU5UIHVsX0NvbmZpZyA9IDAsIHVsX1RlbXAgPSAwOworCVVJTlQgdWlfQ2hhbm5lbE5vID0gMDsKKwlVSU5UIHVpX0R1bW15ID0gMDsKKwlJTlQgaV9lcnIgPSAwOworCisJLy9CZWdpbiBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKyNpZmRlZiBQUklOVF9JTkZPCisJSU5UIGkgPSAwLCBpMiA9IDA7CisjZW5kaWYKKwkvL0VuZCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy8gSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5iX1N0cnVjdEluaXRpYWxpemVkICE9IDEpIHsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ0pDQXZhaWxhYmxlID0gMTsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ0pDUG9sYXJpdHkgPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DSkNHYWluID0gMjsJLy9jaGFuZ2VkIGZyb20gMCB0byAyCisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BdXRvQ2FsaWJyYXRpb24gPSAwOwkvLzogYXV0byBjYWxpYnJhdGlvbgorCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsQ291bnQgPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9TdW0gPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0udWlfQ2hhbm5lbF9udW0gPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCA9IDA7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0luaXRpYWxpc2VkID0gMDsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmJfU3RydWN0SW5pdGlhbGl6ZWQgPSAxOworCisJCS8vQmVnaW4gSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db25uZWN0aW9uVHlwZSA9IDA7CisJCS8vRW5kIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKworCQkvL0JlZ2luIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwkJbWVtc2V0KHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5zX01vZHVsZSwgMCwKKwkJCXNpemVvZihzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uc19Nb2R1bGVbTUFYX01PRFVMRV0pKTsKKworCQl2X0dldEFQQ0kzMjAwRWVwcm9tQ2FsaWJyYXRpb25WYWx1ZShkZXZwcml2LT5pX0lvYmFzZUFtY2MsCisJCQkmc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdKTsKKworI2lmZGVmIFBSSU5UX0lORk8KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9NT0RVTEU7IGkrKykgeworCQkJcHJpbnRrKCJcbiBzX01vZHVsZVslaV0udWxfQ3VycmVudFNvdXJjZUNKQyA9ICVsdSIsIGksCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnNfTW9kdWxlW2ldLgorCQkJCXVsX0N1cnJlbnRTb3VyY2VDSkMpOworCisJCQlmb3IgKGkyID0gMDsgaTIgPCA1OyBpMisrKSB7CisJCQkJcHJpbnRrKCJcbiBzX01vZHVsZVslaV0udWxfQ3VycmVudFNvdXJjZSBbJWldID0gJWx1IiwgaSwgaTIsIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5zX01vZHVsZVtpXS51bF9DdXJyZW50U291cmNlW2kyXSk7CisJCQl9CisKKwkJCWZvciAoaTIgPSAwOyBpMiA8IDg7IGkyKyspIHsKKwkJCQlwcmludGsoIlxuIHNfTW9kdWxlWyVpXS51bF9HYWluRmFjdG9yIFslaV0gPSAlbHUiLCBpLCBpMiwgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnNfTW9kdWxlW2ldLnVsX0dhaW5GYWN0b3JbaTJdKTsKKwkJCX0KKworCQkJZm9yIChpMiA9IDA7IGkyIDwgODsgaTIrKykgeworCQkJCXByaW50aygiXG4gc19Nb2R1bGVbJWldLndfR2FpblZhbHVlIFslaV0gPSAldSIsCisJCQkJCWksIGkyLAorCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uc19Nb2R1bGVbaV0uCisJCQkJCXdfR2FpblZhbHVlW2kyXSk7CisJCQl9CisJCX0KKyNlbmRpZgorCQkvL0VuZCBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJfQorCisJaWYgKGRhdGFbMF0gIT0gMCAmJiBkYXRhWzBdICE9IDEgJiYgZGF0YVswXSAhPSAyKSB7CisJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIGFjcXVpc2l0aW9uIHR5cGUgaXMgaW4gZXJyb3JcbiIpOworCQlpX2VycisrOworCX0JCQkvL2lmKGRhdGFbMF0hPTAgJiYgZGF0YVswXSE9MSAmJiBkYXRhWzBdIT0yKQorCWlmIChkYXRhWzBdID09IDEpIHsKKwkJaWYgKGRhdGFbMTRdICE9IDAgJiYgZGF0YVsxNF0gIT0gMSAmJiBkYXRhWzE0XSAhPSAyCisJCQkmJiBkYXRhWzE0XSAhPSA0KSB7CisJCQlwcmludGsoIlxuIEVycm9yIGluIHNlbGVjdGlvbiBvZiBSVEQgY29ubmVjdGlvbiB0eXBlXG4iKTsKKwkJCWlfZXJyKys7CisJCX0JCS8vaWYoZGF0YVsxNF0hPTAgJiYgZGF0YVsxNF0hPTEgJiYgZGF0YVsxNF0hPTIgJiYgZGF0YVsxNF0hPTQpCisJfQkJCS8vaWYoZGF0YVswXT09MSApCisJaWYgKGRhdGFbMV0gPCAwIHx8IGRhdGFbMV0gPiA3KSB7CisJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIGdhaW4gaXMgaW4gZXJyb3JcbiIpOworCQlpX2VycisrOworCX0JCQkvLyBpZihkYXRhWzFdPDAgfHwgZGF0YVsxXT43KQorCWlmIChkYXRhWzJdICE9IDAgJiYgZGF0YVsyXSAhPSAxKSB7CisJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIHBvbGFyaXR5IGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy9pZihkYXRhWzJdIT0wICYmICBkYXRhWzJdIT0xKQorCWlmIChkYXRhWzNdICE9IDApIHsKKwkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2Ygb2Zmc2V0IHJhbmdlICBpcyBpbiBlcnJvclxuIik7CisJCWlfZXJyKys7CisJfQkJCS8vIGlmKGRhdGFbM10hPTApCisJaWYgKGRhdGFbNF0gIT0gMCAmJiBkYXRhWzRdICE9IDEpIHsKKwkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2YgY291cGxpbmcgaXMgaW4gZXJyb3JcbiIpOworCQlpX2VycisrOworCX0JCQkvL2lmKGRhdGFbNF0hPTAgJiYgIGRhdGFbNF0hPTEpCisJaWYgKGRhdGFbNV0gIT0gMCAmJiBkYXRhWzVdICE9IDEpIHsKKwkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2Ygc2luZ2xlL2RpZmZlcmVudGlhbCBtb2RlIGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy9pZihkYXRhWzVdIT0wICYmICBkYXRhWzVdIT0xKQorCWlmIChkYXRhWzhdICE9IDAgJiYgZGF0YVs4XSAhPSAxICYmIGRhdGFbMl0gIT0gMikgeworCQlwcmludGsoIlxuRXJyb3IgaW4gc2VsZWN0aW9uIG9mIGZ1bmN0aW9uYWxpdHlcbiIpOworCX0JCQkvL2lmKGRhdGFbOF0hPTAgJiYgZGF0YVs4XSE9MSAmJiBkYXRhWzJdIT0yKQorCWlmIChkYXRhWzEyXSA9PSAwIHx8IGRhdGFbMTJdID09IDEpIHsKKwkJaWYgKGRhdGFbNl0gIT0gMjAgJiYgZGF0YVs2XSAhPSA0MCAmJiBkYXRhWzZdICE9IDgwCisJCQkmJiBkYXRhWzZdICE9IDE2MCkgeworCQkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2YgY29udmVyc2lvbiB0aW1lIHJlbG9hZCB2YWx1ZSBpcyBpbiBlcnJvclxuIik7CisJCQlpX2VycisrOworCQl9CQkvLyBpZiAoZGF0YVs2XSE9MjAgJiYgZGF0YVs2XSE9NDAgJiYgZGF0YVs2XSE9ODAgJiYgZGF0YVs2XSE9MTYwICkKKwkJaWYgKGRhdGFbN10gIT0gMikgeworCQkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2YgY29udmVyc2lvbiB0aW1lIHVuaXQgIGlzIGluIGVycm9yXG4iKTsKKwkJCWlfZXJyKys7CisJCX0JCS8vIGlmKGRhdGFbN10hPTIpCisJfQorCWlmIChkYXRhWzldICE9IDAgJiYgZGF0YVs5XSAhPSAxKSB7CisJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIGludGVycnVwdCBlbmFibGUgaXMgaW4gZXJyb3JcbiIpOworCQlpX2VycisrOworCX0JCQkvL2lmKGRhdGFbOV0hPTAgJiYgIGRhdGFbOV0hPTEpCisJaWYgKGRhdGFbMTFdIDwgMCB8fCBkYXRhWzExXSA+IDQpIHsKKwkJcHJpbnRrKCJcblRoZSBzZWxlY3Rpb24gb2YgbW9kdWxlIGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy9pZihkYXRhWzExXSA8MCB8fCAgZGF0YVsxMV0+MSkKKwlpZiAoZGF0YVsxMl0gPCAwIHx8IGRhdGFbMTJdID4gMykgeworCQlwcmludGsoIlxuVGhlIHNlbGVjdGlvbiBvZiBzaW5nbGVjaGFubmVsL3NjYW4gc2VsZWN0aW9uIGlzIGluIGVycm9yXG4iKTsKKwkJaV9lcnIrKzsKKwl9CQkJLy9pZihkYXRhWzEyXSA8IDAgfHwgIGRhdGFbMTJdPiAzKQorCWlmIChkYXRhWzEzXSA8IDAgfHwgZGF0YVsxM10gPiAxNikgeworCQlwcmludGsoIlxuVGhlIHNlbGVjdGlvbiBvZiBudW1iZXIgb2YgY2hhbm5lbHMgaXMgaW4gZXJyb3JcbiIpOworCQlpX2VycisrOworCX0JCQkvLyBpZihkYXRhWzEzXSA8MCB8fGRhdGFbMTNdID4xNSkKKworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvKgorCSAgIGlfQ2hhbm5lbENvdW50PWRhdGFbMTNdOworCSAgIGlfU2NhblR5cGU9ZGF0YVsxMl07CisJICAgaV9BRERJREFUQVBvbGFyaXR5ID0gZGF0YVsyXTsKKwkgICBpX0FERElEQVRBR2Fpbj1kYXRhWzFdOworCSAgIGlfQURESURBVEFDb252ZXJzaW9uVGltZT1kYXRhWzZdOworCSAgIGlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQ9ZGF0YVs3XTsKKwkgICBpX0FERElEQVRBVHlwZT1kYXRhWzBdOworCSAqLworCisJLy8gU2F2ZSBhY3F1aXNpdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgYWN0dWFsIGJvYXJkCisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ2hhbm5lbENvdW50ID0gZGF0YVsxM107CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU2NhblR5cGUgPSBkYXRhWzEyXTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQVBvbGFyaXR5ID0gZGF0YVsyXTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUdhaW4gPSBkYXRhWzFdOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWUgPSBkYXRhWzZdOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0ID0gZGF0YVs3XTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQVR5cGUgPSBkYXRhWzBdOworCS8vQmVnaW4gSksgMTkuMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0Nvbm5lY3Rpb25UeXBlID0gZGF0YVs1XTsKKwkvL0VuZCBKSyAxOS4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCS8vQmVnaW4gSksgMTkuMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCW1lbXNldChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0udWlfU2NhblZhbHVlQXJyYXksIDAsICg3ICsgMTIpICogc2l6ZW9mKHVuc2lnbmVkIGludCkpOwkvLyA3IGlzIHRoZSBtYXhpbWFsIG51bWJlciBvZiBjaGFubmVscworCS8vRW5kIEpLIDE5LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKworCS8vQkVHSU4gSksgMDIuMDcuMDQgOiBUaGlzIHdoaWxlIGNhbid0IGJlIGRvLCBpdCBibG9jayB0aGUgcHJvY2VzcyB3aGVuIHVzaW5nIHNldmVyYWxzIGJvYXJkcworCS8vd2hpbGUoaV9JbnRlcnJ1cHRGbGFnPT0xKQorCXdoaWxlIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IDEpIHsKKyNpZm5kZWYgTVNYQk9YCisJCXVkZWxheSgxKTsKKyNlbHNlCisJCS8vIEluIHRoZSBjYXNlIHdoZXJlIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQgZm9yIHRoZSBNU1gtQm94CisJCS8vIHdlIHVzZWQgYSBwcmludGsgdG8gaGF2ZSBhIGxpdHRsZSBkZWxheSBiZWNhdXNlIHVkZWxheQorCQkvLyBzZWVtcyB0byBiZSBicm9rZW4gdW5kZXIgdGhlIE1TWC1Cb3guCisJCS8vIFRoaXMgc29sdXRpb24gaGF0IHRvIGJlIHN0dWRpZWQuCisJCXByaW50aygiIik7CisjZW5kaWYKKwl9CisJLy9FTkQgSksgMDIuMDcuMDQgOiBUaGlzIHdoaWxlIGNhbid0IGJlIGRvLCBpdCBibG9jayB0aGUgcHJvY2VzcyB3aGVuIHVzaW5nIHNldmVyYWxzIGJvYXJkcworCisJdWlfQ2hhbm5lbE5vID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8vIGdldCB0aGUgY2hhbm5lbAorCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL2lfQ2hhbm5lbE5vPXVpX0NoYW5uZWxObzsKKwkvL3VpX0NoYW5uZWxfbnVtID11aV9DaGFubmVsTm87CisKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8gPSB1aV9DaGFubmVsTm87CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX0NoYW5uZWxfbnVtID0gdWlfQ2hhbm5lbE5vOworCisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCWlmIChkYXRhWzVdID09IDApIHsKKwkJaWYgKHVpX0NoYW5uZWxObyA8IDAgfHwgdWlfQ2hhbm5lbE5vID4gMTUpIHsKKwkJCXByaW50aygiXG5UaGUgU2VsZWN0aW9uIG9mIHRoZSBjaGFubmVsIGlzIGluIGVycm9yXG4iKTsKKwkJCWlfZXJyKys7CisJCX0JCS8vIGlmKHVpX0NoYW5uZWxObzwwIHx8IHVpX0NoYW5uZWxObz4xNSkKKwl9CQkJLy9pZihkYXRhWzVdPT0wKQorCWVsc2UgeworCQlpZiAoZGF0YVsxNF0gPT0gMikgeworCQkJaWYgKHVpX0NoYW5uZWxObyA8IDAgfHwgdWlfQ2hhbm5lbE5vID4gMykgeworCQkJCXByaW50aygiXG5UaGUgU2VsZWN0aW9uIG9mIHRoZSBjaGFubmVsIGlzIGluIGVycm9yXG4iKTsKKwkJCQlpX2VycisrOworCQkJfQkvLyBpZih1aV9DaGFubmVsTm88MCB8fCB1aV9DaGFubmVsTm8+MykKKwkJfQkJLy9pZihkYXRhWzE0XT09MikKKwkJZWxzZSB7CisJCQlpZiAodWlfQ2hhbm5lbE5vIDwgMCB8fCB1aV9DaGFubmVsTm8gPiA3KSB7CisJCQkJcHJpbnRrKCJcblRoZSBTZWxlY3Rpb24gb2YgdGhlIGNoYW5uZWwgaXMgaW4gZXJyb3JcbiIpOworCQkJCWlfZXJyKys7CisJCQl9CS8vIGlmKHVpX0NoYW5uZWxObzwwIHx8IHVpX0NoYW5uZWxObz43KQorCQl9CQkvL2Vsc2VpZihkYXRhWzE0XT09MikKKwl9CQkJLy9lbHNlaWYoZGF0YVs1XT09MCkKKwlpZiAoZGF0YVsxMl0gPT0gMCB8fCBkYXRhWzEyXSA9PSAxKSB7CisJCXN3aXRjaCAoZGF0YVs1XSkgeworCQljYXNlIDA6CisJCQlpZiAodWlfQ2hhbm5lbE5vID49IDAgJiYgdWlfQ2hhbm5lbE5vIDw9IDMpIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pX09mZnNldD0wOworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDA7CisJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCX0JLy9pZih1aV9DaGFubmVsTm8gPj0wICYmIHVpX0NoYW5uZWxObyA8PTMpCisJCQlpZiAodWlfQ2hhbm5lbE5vID49IDQgJiYgdWlfQ2hhbm5lbE5vIDw9IDcpIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pX09mZnNldD02NDsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSA2NDsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJfQkvL2lmKHVpX0NoYW5uZWxObyA+PTQgJiYgdWlfQ2hhbm5lbE5vIDw9NykKKwkJCWlmICh1aV9DaGFubmVsTm8gPj0gOCAmJiB1aV9DaGFubmVsTm8gPD0gMTEpIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pX09mZnNldD0xMjg7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTI4OworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQl9CS8vaWYodWlfQ2hhbm5lbE5vID49OCAmJiB1aV9DaGFubmVsTm8gPD0xMSkKKwkJCWlmICh1aV9DaGFubmVsTm8gPj0gMTIgJiYgdWlfQ2hhbm5lbE5vIDw9IDE1KSB7CisJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCS8vaV9PZmZzZXQ9MTkyOworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDE5MjsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJfQkvL2lmKHVpX0NoYW5uZWxObyA+PTEyICYmIHVpX0NoYW5uZWxObyA8PTE1KQorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlmIChkYXRhWzE0XSA9PSAyKSB7CisJCQkJaWYgKHVpX0NoYW5uZWxObyA9PSAwKSB7CisJCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkJLy9pX09mZnNldD0wOworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSAwOworCQkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCX0JLy9pZih1aV9DaGFubmVsTm8gPT0wICkKKwkJCQlpZiAodWlfQ2hhbm5lbE5vID09IDEpIHsKKwkJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCQkvL2lfT2Zmc2V0PTA7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDY0OworCQkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCX0JLy8gaWYodWlfQ2hhbm5lbE5vID09MSkKKwkJCQlpZiAodWlfQ2hhbm5lbE5vID09IDIpIHsKKwkJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCQkvL2lfT2Zmc2V0PTEyODsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTI4OworCQkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCX0JLy9pZih1aV9DaGFubmVsTm8gPT0yICkKKwkJCQlpZiAodWlfQ2hhbm5lbE5vID09IDMpIHsKKwkJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCQkvL2lfT2Zmc2V0PTE5MjsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTkyOworCQkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCX0JLy9pZih1aV9DaGFubmVsTm8gPT0zKQorCisJCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCS8vaV9DaGFubmVsTm89MDsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8gPSAwOworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJdWlfQ2hhbm5lbE5vID0gMDsKKwkJCQlicmVhazsKKwkJCX0JLy9pZihkYXRhWzE0XT09MikKKwkJCWlmICh1aV9DaGFubmVsTm8gPj0gMCAmJiB1aV9DaGFubmVsTm8gPD0gMSkgeworCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkvL2lfT2Zmc2V0PTA7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMDsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJfQkvL2lmKHVpX0NoYW5uZWxObyA+PTAgJiYgdWlfQ2hhbm5lbE5vIDw9MSkKKwkJCWlmICh1aV9DaGFubmVsTm8gPj0gMiAmJiB1aV9DaGFubmVsTm8gPD0gMykgeworCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkvL2lfQ2hhbm5lbE5vPWlfQ2hhbm5lbE5vLTI7CisJCQkJLy9pX09mZnNldD02NDsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8gPQorCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8gLQorCQkJCQkyOworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDY0OworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJdWlfQ2hhbm5lbE5vID0gdWlfQ2hhbm5lbE5vIC0gMjsKKwkJCX0JLy9pZih1aV9DaGFubmVsTm8gPj0yICYmIHVpX0NoYW5uZWxObyA8PTMpCisJCQlpZiAodWlfQ2hhbm5lbE5vID49IDQgJiYgdWlfQ2hhbm5lbE5vIDw9IDUpIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pX0NoYW5uZWxObz1pX0NoYW5uZWxOby00OworCQkJCS8vaV9PZmZzZXQ9MTI4OworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObyA9CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObyAtCisJCQkJCTQ7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTI4OworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJdWlfQ2hhbm5lbE5vID0gdWlfQ2hhbm5lbE5vIC0gNDsKKwkJCX0JLy9pZih1aV9DaGFubmVsTm8gPj00ICYmIHVpX0NoYW5uZWxObyA8PTUpCisJCQlpZiAodWlfQ2hhbm5lbE5vID49IDYgJiYgdWlfQ2hhbm5lbE5vIDw9IDcpIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy9pX0NoYW5uZWxObz1pX0NoYW5uZWxOby02OworCQkJCS8vaV9PZmZzZXQ9MTkyOworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObyA9CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObyAtCisJCQkJCTY7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTkyOworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJdWlfQ2hhbm5lbE5vID0gdWlfQ2hhbm5lbE5vIC0gNjsKKwkJCX0JLy9pZih1aV9DaGFubmVsTm8gPj02ICYmIHVpX0NoYW5uZWxObyA8PTcpCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcbiBUaGlzIHNlbGVjdGlvbiBvZiBwb2xhcml0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlpX2VycisrOworCQl9CQkvL3N3aXRjaChkYXRhWzJdKQorCX0JCQkvL2lmKGRhdGFbMTJdPT0wIHx8IGRhdGFbMTJdPT0xKQorCWVsc2UgeworCQlzd2l0Y2ggKGRhdGFbMTFdKSB7CisJCWNhc2UgMToKKwkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCS8vaV9PZmZzZXQ9MDsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCA9IDA7CisJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCS8vaV9PZmZzZXQ9NjQ7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSA2NDsKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJLy9pX09mZnNldD0xMjg7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgPSAxMjg7CisJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCS8vaV9PZmZzZXQ9MTkyOworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ID0gMTkyOworCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJcbkVycm9yIGluIG1vZHVsZSBzZWxlY3Rpb25cbiIpOworCQkJaV9lcnIrKzsKKwkJfQkJLy8gc3dpdGNoKGRhdGFbMTFdKQorCX0JCQkvLyBlbHNlaWYoZGF0YVsxMl09PTAgfHwgZGF0YVsxMl09PTEpCisJaWYgKGlfZXJyKSB7CisJCWlfQVBDSTMyMDBfUmVzZXQoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8vaWYoaV9TY2FuVHlwZSE9MSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU2NhblR5cGUgIT0gMSkgeworCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCS8vaV9Db3VudD0wOworCQkvL2lfU3VtPTA7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ID0gMDsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU3VtID0gMDsKKwkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwl9CQkJLy9pZihpX1NjYW5UeXBlIT0xKQorCisJdWxfQ29uZmlnID0KKwkJZGF0YVsxXSB8IChkYXRhWzJdIDw8IDYpIHwgKGRhdGFbNV0gPDwgNykgfCAoZGF0YVszXSA8PCA4KSB8CisJCShkYXRhWzRdIDw8IDkpOworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFdyaXRlIHRoZSBjaGFubmVsIHRvIGNvbmZpZ3VyZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL291dGwoMCB8IHVpX0NoYW5uZWxObyAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDB4NCk7CisJb3V0bCgwIHwgdWlfQ2hhbm5lbE5vLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAweDQpOworCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFJlc2V0IHRoZSBjb25maWd1cmF0aW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy9vdXRsKDAgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAweDApOworCW91dGwoMCwgZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHgwKTsKKwkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL291dGwodWxfQ29uZmlnICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMHgwKTsKKwlvdXRsKHVsX0NvbmZpZywKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHgwKTsKKwkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypSZXNldCB0aGUgY2FsaWJyYXRpb24gYml0ICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vdWxfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxMik7CisJdWxfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAxMik7CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vb3V0bCgodWxfVGVtcCAmIDB4RkZGOUZGRkYpICwgZGV2cHJpdi0+aW9iYXNlKy5pX09mZnNldCArIDEyKTsKKwlvdXRsKCh1bF9UZW1wICYgMHhGRkY5RkZGRiksCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDEyKTsKKwkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisJaWYgKGRhdGFbOV0gPT0gMSkgeworCQlkZXZwcml2LT50c2tfQ3VycmVudCA9IGN1cnJlbnQ7CisJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJLy9pX0ludGVycnVwdEZsYWc9MTsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IDE7CisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJfQkJCS8vIGlmKGRhdGFbOV09PTEpCisJZWxzZSB7CisJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJLy9pX0ludGVycnVwdEZsYWc9MDsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IDA7CisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJfQkJCS8vZWxzZSAgaWYoZGF0YVs5XT09MSkKKworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL2lfSW5pdGlhbGlzZWQ9MTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Jbml0aWFsaXNlZCA9IDE7CisJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkvL2lmKGlfU2NhblR5cGU9PTEpCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1NjYW5UeXBlID09IDEpCisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJeworCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCS8vaV9TdW09aV9TdW0rMTsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU3VtID0KKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1N1bSArIDE7CisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKwkJaW5zbi0+dW51c2VkWzBdID0gMDsKKwkJaV9BUENJMzIwMF9SZWFkQW5hbG9nSW5wdXQoZGV2LCBzLCBpbnNuLCAmdWlfRHVtbXkpOworCX0KKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzMjAwX1JlYWRBbmFsb2dJbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwJCQkgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIHJlYWQgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgdG8gcmVhZCBzdGF0dXMgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorICB8CQkJCWRhdGFbMF0gIDogRGlnaXRhbCBWYWx1ZSBPZiBJbnB1dCAgICAgICAgICAgICB8CisgIHwJCQkJZGF0YVsxXSAgOiBDYWxpYnJhdGlvbiBPZmZzZXQgVmFsdWUgICAgICAgICAgIHwKKyAgfAkJCQlkYXRhWzJdICA6IENhbGlicmF0aW9uIEdhaW4gVmFsdWUKKyAgfAkJCQlkYXRhWzNdICA6IENKQyB2YWx1ZQorICB8CQkJCWRhdGFbNF0gIDogQ0pDIG9mZnNldCB2YWx1ZQorICB8CQkJCWRhdGFbNV0gIDogQ0pDIGdhaW4gdmFsdWUKKyAgfCBCZWdpbiBKSyAyMS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisgIHwJCQkJZGF0YVs2XSA6IENKQyBjdXJyZW50IHNvdXJjZSBmcm9tIGVlcHJvbQorICB8CQkJCWRhdGFbN10gOiBDaGFubmVsIGN1cnJlbnQgc291cmNlIGZyb20gZWVwcm9tCisgIHwJCQkJZGF0YVs4XSA6IENoYW5ubGUgZ2FpbiBmYWN0b3IgZnJvbSBlZXByb20KKyAgfCBFbmQgSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kzMjAwX1JlYWRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9EdW1teVZhbHVlID0gMDsKKwlpbnQgaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb247CisJaW50IGkgPSAwOworCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vaWYoaV9Jbml0aWFsaXNlZD09MCkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW5pdGlhbGlzZWQgPT0gMCkKKwkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwl7CisJCWlfQVBDSTMyMDBfUmVzZXQoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vaWYoaV9Jbml0aWFsaXNlZD09MCk7CisKKyNpZmRlZiBQUklOVF9JTkZPCisJcHJpbnRrKCJcbiBpbnNuLT51bnVzZWRbMF0gPSAlaSIsIGluc24tPnVudXNlZFswXSk7CisjZW5kaWYKKworCXN3aXRjaCAoaW5zbi0+dW51c2VkWzBdKSB7CisJY2FzZSAwOgorCisJCWlfQVBDSTMyMDBfUmVhZDFBbmFsb2dJbnB1dENoYW5uZWwoZGV2LCBzLCBpbnNuLAorCQkJJnVpX0R1bW15VmFsdWUpOworCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQrMF09dWlfRHVtbXlWYWx1ZTsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCWlfQ291bnQgKyAwXSA9IHVpX0R1bW15VmFsdWU7CisJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisKKwkJLy9CZWdpbiBKSyAyNS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCWlfQVBDSTMyMDBfR2V0Q2hhbm5lbENhbGlicmF0aW9uVmFsdWUoZGV2LAorCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX0NoYW5uZWxfbnVtLAorCQkJJnNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJaV9Db3VudCArIDZdLAorCQkJJnNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJaV9Db3VudCArIDddLAorCQkJJnNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJaV9Db3VudCArIDhdKTsKKworI2lmZGVmIFBSSU5UX0lORk8KKwkJcHJpbnRrKCJcbiBzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLnVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQrNl0gPSAlbHUiLCBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0udWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ICsgNl0pOworCisJCXByaW50aygiXG4gc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50KzddID0gJWx1Iiwgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCArIDddKTsKKworCQlwcmludGsoIlxuIHNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0udWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudCs4XSA9ICVsdSIsIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgKyA4XSk7CisjZW5kaWYKKworCQkvL0VuZCBKSyAyNS4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKwkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkvL2lmKChpX0FERElEQVRBVHlwZT09MikgJiYgKGlfSW50ZXJydXB0RmxhZyA9PSBGQUxTRSkgJiYgKGlfQ0pDQXZhaWxhYmxlPT0xKSkKKwkJaWYgKChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQVR5cGUgPT0gMikKKwkJCSYmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKQorCQkJJiYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NKQ0F2YWlsYWJsZSA9PSAxKSkKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCXsKKwkJCWlfQVBDSTMyMDBfUmVhZENKQ1ZhbHVlKGRldiwgJnVpX0R1bW15VmFsdWUpOworCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDNdPXVpX0R1bW15VmFsdWU7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQltaW5vcl0uaV9Db3VudCArIDNdID0gdWlfRHVtbXlWYWx1ZTsKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCX0JCS8vaWYoKGlfQURESURBVEFUeXBlPT0yKSAmJiAoaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKSkKKwkJZWxzZSB7CisJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgM109MDsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJCW1pbm9yXS5pX0NvdW50ICsgM10gPSAwOworCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJfQkJLy9lbHNlaWYoKGlfQURESURBVEFUeXBlPT0yKSAmJiAoaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKSAmJiAoaV9DSkNBdmFpbGFibGU9PTEpKQorCisJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJLy9pZiAoKCBpX0F1dG9DYWxpYnJhdGlvbiA9PSBGQUxTRSkgJiYgKGlfSW50ZXJydXB0RmxhZyA9PSBGQUxTRSkpCisJCWlmICgoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQXV0b0NhbGlicmF0aW9uID09IEZBTFNFKQorCQkJJiYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPT0gRkFMU0UpKQorCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJeworCQkJaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25PZmZzZXRWYWx1ZShkZXYsCisJCQkJJnVpX0R1bW15VmFsdWUpOworCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDFdPXVpX0R1bW15VmFsdWU7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQltaW5vcl0uaV9Db3VudCArIDFdID0gdWlfRHVtbXlWYWx1ZTsKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQlpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbkdhaW5WYWx1ZShkZXYsCisJCQkJJnVpX0R1bW15VmFsdWUpOworCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDJdPXVpX0R1bW15VmFsdWU7CisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQltaW5vcl0uaV9Db3VudCArIDJdID0gdWlfRHVtbXlWYWx1ZTsKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCX0JCS8vaWYgKCggaV9BdXRvQ2FsaWJyYXRpb24gPT0gRkFMU0UpICYmIChpX0ludGVycnVwdEZsYWcgPT0gRkFMU0UpKQorCisJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJLy9pZigoaV9BRERJREFUQVR5cGU9PTIpICYmIChpX0ludGVycnVwdEZsYWcgPT0gRkFMU0UpJiYgKGlfQ0pDQXZhaWxhYmxlPT0xKSkKKwkJaWYgKChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQVR5cGUgPT0gMikKKwkJCSYmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKQorCQkJJiYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NKQ0F2YWlsYWJsZSA9PSAxKSkKKwkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCXsKKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLypUZXN0IGlmIHRoZSBDYWxpYnJhdGlvbiBjaGFubmVsIG11c3QgYmUgcmVhZCBmb3IgdGhlIENKQyAqLworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qVGVzdCBpZiB0aGUgcG9sYXJpdHkgaXMgdGhlIHNhbWUgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJLy9pZihpX0NKQ1BvbGFyaXR5IT1pX0FERElEQVRBUG9sYXJpdHkpCisJCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ0pDUG9sYXJpdHkgIT0KKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQVBvbGFyaXR5KQorCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQl7CisJCQkJaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb24gPSAxOworCQkJfQkvL2lmKGlfQ0pDUG9sYXJpdHkhPWlfQURESURBVEFQb2xhcml0eSkKKwkJCWVsc2UgeworCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkvL2lmKGlfQ0pDR2Fpbj09aV9BRERJREFUQUdhaW4pCisJCQkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NKQ0dhaW4gPT0KKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFHYWluKQorCQkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQkJCXsKKwkJCQkJaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb24gPSAwOworCQkJCX0JLy9pZihpX0NKQ0dhaW49PWlfQURESURBVEFHYWluKQorCQkJCWVsc2UgeworCQkJCQlpX0NvbnZlcnRDSkNDYWxpYnJhdGlvbiA9IDE7CisJCQkJfQkvL2Vsc2VpZihpX0NKQ0dhaW49PWlfQURESURBVEFHYWluKQorCQkJfQkvL2Vsc2VpZihpX0NKQ1BvbGFyaXR5IT1pX0FERElEQVRBUG9sYXJpdHkpCisJCQlpZiAoaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb24gPT0gMSkgeworCQkJCWlfQVBDSTMyMDBfUmVhZENKQ0NhbE9mZnNldChkZXYsCisJCQkJCSZ1aV9EdW1teVZhbHVlKTsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCs0XT11aV9EdW1teVZhbHVlOworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvcworCQkJCQlbZGV2LT5taW5vcl0uaV9Db3VudCArIDRdID0KKwkJCQkJdWlfRHVtbXlWYWx1ZTsKKwkJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisJCQkJaV9BUENJMzIwMF9SZWFkQ0pDQ2FsR2FpbihkZXYsICZ1aV9EdW1teVZhbHVlKTsKKworCQkJCS8vQkVHSU4gSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50KzVdPXVpX0R1bW15VmFsdWU7CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zCisJCQkJCVtkZXYtPm1pbm9yXS5pX0NvdW50ICsgNV0gPQorCQkJCQl1aV9EdW1teVZhbHVlOworCQkJCS8vRU5EIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQl9CS8vaWYoaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb249PTEpCisJCQllbHNlIHsKKwkJCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCs0XT0wOworCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQrNV09MDsKKworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvcworCQkJCQlbZGV2LT5taW5vcl0uaV9Db3VudCArIDRdID0gMDsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3MKKwkJCQkJW2Rldi0+bWlub3JdLmlfQ291bnQgKyA1XSA9IDA7CisJCQkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKwkJCX0JLy9lbHNlaWYoaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb249PTEpCisJCX0JCS8vaWYoKGlfQURESURBVEFUeXBlPT0yKSAmJiAoaV9JbnRlcnJ1cHRGbGFnID09IEZBTFNFKSkKKworCQkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJCS8vaWYoaV9TY2FuVHlwZSE9MSkKKwkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1NjYW5UeXBlICE9IDEpIHsKKwkJCS8vaV9Db3VudD0wOworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgPSAwOworCQl9CQkvL2lmKGlfU2NhblR5cGUhPTEpCisJCWVsc2UgeworCQkJLy9pX0NvdW50PWlfQ291bnQgKzY7CisJCQkvL0JlZ2luIEpLIDIyLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwkJCS8vc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50PXNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudCArNjsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ID0KKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCArIDk7CisJCQkvL0VuZCBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCX0JCS8vZWxzZSBpZihpX1NjYW5UeXBlIT0xKQorCisJCS8vaWYoKGlfU2NhblR5cGU9PTEpICYmKGlfSW50ZXJydXB0RmxhZz09MSkpCisJCWlmICgoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU2NhblR5cGUgPT0gMSkKKwkJCSYmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IDEpKSB7CisJCQkvL2lfQ291bnQ9aV9Db3VudC02OworCQkJLy9CZWdpbiBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCQkvL3NfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudD1zX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQtNjsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ID0KKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCAtIDk7CisJCQkvL0VuZCBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCX0KKwkJLy9pZihpX1NjYW5UeXBlPT0wKQorCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU2NhblR5cGUgPT0gMCkgeworCQkJLyoKKwkJCSAgIGRhdGFbMF09IHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVswXTsKKwkJCSAgIGRhdGFbMV09IHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVsxXTsKKwkJCSAgIGRhdGFbMl09IHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVsyXTsKKwkJCSAgIGRhdGFbM109IHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVszXTsKKwkJCSAgIGRhdGFbNF09IHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVs0XTsKKwkJCSAgIGRhdGFbNV09IHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVs1XTsKKwkJCSAqLworI2lmZGVmIFBSSU5UX0lORk8KKwkJCXByaW50aygiXG4gZGF0YVswXT0gc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbMF07Iik7CisjZW5kaWYKKwkJCWRhdGFbMF0gPQorCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbMF07CisJCQlkYXRhWzFdID0KKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlWzFdOworCQkJZGF0YVsyXSA9CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVsyXTsKKwkJCWRhdGFbM10gPQorCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbM107CisJCQlkYXRhWzRdID0KKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlWzRdOworCQkJZGF0YVs1XSA9CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVs1XTsKKworCQkJLy9CZWdpbiBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCQkvL3ByaW50aygiXG4gMCAtIGlfQVBDSTMyMDBfR2V0Q2hhbm5lbENhbGlicmF0aW9uVmFsdWUgZGF0YSBbNl0gPSAlbHUsIGRhdGEgWzddID0gJWx1LCBkYXRhIFs4XSA9ICVsdSIsIGRhdGEgWzZdLCBkYXRhIFs3XSwgZGF0YSBbOF0pOworCQkJaV9BUENJMzIwMF9HZXRDaGFubmVsQ2FsaWJyYXRpb25WYWx1ZShkZXYsCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX0NoYW5uZWxfbnVtLAorCQkJCSZkYXRhWzZdLCAmZGF0YVs3XSwgJmRhdGFbOF0pOworCQkJLy9FbmQgSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQl9CisJCWJyZWFrOworCWNhc2UgMToKKworCQlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCQkvL2RhdGFbaV09dWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2ldOworCQkJZGF0YVtpXSA9CisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpXTsKKwkJfQorCisJCS8vaV9Db3VudD0wOworCQkvL2lfU3VtPTA7CisJCS8vaWYoaV9TY2FuVHlwZT09MSkKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgPSAwOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9TdW0gPSAwOworCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfU2NhblR5cGUgPT0gMSkgeworCQkJLy9pX0luaXRpYWxpc2VkPTA7CisJCQkvL2lfSW50ZXJydXB0RmxhZz0wOworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW5pdGlhbGlzZWQgPSAwOworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IDA7CisJCQkvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiXG5UaGUgcGFyYW1ldGVycyBwYXNzZWQgYXJlIGluIGVycm9yXG4iKTsKKwkJaV9BUENJMzIwMF9SZXNldChkZXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9zd2l0Y2goaW5zbi0+dW51c2VkWzBdKQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZDFBbmFsb2dJbnB1dENoYW5uZWwgICAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbAkJCSAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgdWlfTm9PZkNoYW5uZWwgICAgOiBDaGFubmVsIE5vIHRvIHJlYWQgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgIHwJCQkgICAgICAgICAgZGF0YVswXSAgOiBEaWdpdGFsIFZhbHVlIHJlYWQgICAgICAgICAgICAgICAgICAgfAorICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworSU5UIGlfQVBDSTMyMDBfUmVhZDFBbmFsb2dJbnB1dENoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVJTlQgdWlfRU9DID0gMDsKKwlVSU5UIHVpX0NoYW5uZWxObyA9IDA7CisJVUlOVCB1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworCisJLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCS8vdWlfQ2hhbm5lbE5vPWlfQ2hhbm5lbE5vOworCXVpX0NoYW5uZWxObyA9IHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObzsKKworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFdyaXRlIHRoZSBjaGFubmVsIHRvIGNvbmZpZ3VyZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vQmVnaW4gSksgMjAuMTAuMjAwNDogQmFkIGNoYW5uZWwgdmFsdWUgaXMgdXNlZCB3aGVuIHVzaW5nIGRpZmZlcmVudGlhbCBtb2RlCisJLy9vdXRsKDAgfCB1aV9DaGFubmVsX251bSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDB4NCk7CisJLy9vdXRsKDAgfCBzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLnVpX0NoYW5uZWxfbnVtICwgZGV2cHJpdi0+aW9iYXNlK3NfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAweDQpOworCW91dGwoMCB8IHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObywKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHg0KTsKKwkvL0VuZCBKSyAyMC4xMC4yMDA0OiBCYWQgY2hhbm5lbCB2YWx1ZSBpcyB1c2VkIHdoZW4gdXNpbmcgZGlmZmVyZW50aWFsIG1vZGUKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nIHVuaXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDM2KTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0LAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzNik7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgY29udmVydCB0aW1pbmcgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDMyKTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWUsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDMyKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2V0IHRoZSBzdGFydCBlbmQgc3RvcCBpbmRleCB0byB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBhbmQgc2V0IHRoZSBzdGFydCAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9DaGFubmVsTm8gfCAodWlfQ2hhbm5lbE5vIDw8IDgpIHwgMHg4MDAwMDsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpIHsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEVuYWJsZSB0aGUgaW50ZXJydXB0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9Db21tYW5kUmVnaXN0ZXIgfCAweDAwMTAwMDAwOworCX0JCQkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRU5BQkxFKQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogV3JpdGUgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKworCS8vb3V0bCh1aV9Db21tYW5kUmVnaXN0ZXIsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDgpOworCW91dGwodWlfQ29tbWFuZFJlZ2lzdGVyLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA4KTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypUZXN0IGlmIGludGVycnVwdCBpcyBlbmFibGUgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpIHsKKwkJZG8geworCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKlJlYWQgdGhlIEVPQyBTdGF0dXMgYml0ICovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJLy91aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjApICYgMTsKKwkJCXVpX0VPQyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDIwKSAmIDE7CisKKwkJfSB3aGlsZSAodWlfRU9DICE9IDEpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBSZWFkIHRoZSBkaWdpdGFsIHZhbHVlIG9mIHRoZSBpbnB1dCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkvL2RhdGFbMF0gPSBpbmwgKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI4KTsKKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDI4KTsKKwkJLy9FTkQgSksgMDYuMDcuMDQ6IE1hbmFnZW1lbnQgb2Ygc2V2cmFscyBib2FyZHMKKworCX0JCQkvLyBpZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJcmV0dXJuIDA7Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uT2Zmc2V0VmFsdWUgICAgICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgY2FsaWJyYXRpb24gb2Zmc2V0ICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWx8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgIHwJCQkgICAgICAgICAgZGF0YVswXSAgOiBDYWxpYnJhdGlvbiBvZmZzZXQgVmFsdWUgICB8CisgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25PZmZzZXRWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgVUlOVCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wID0gMCwgdWlfRU9DID0gMDsKKwlVSU5UIHVpX0NvbW1hbmRSZWdpc3RlciA9IDA7CisKKwkvL0JFR0lOIEpLIDA2LjA3LjA0OiBNYW5hZ2VtZW50IG9mIHNldnJhbHMgYm9hcmRzCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogV3JpdGUgdGhlIGNoYW5uZWwgdG8gY29uZmlndXJlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9CZWdpbiBKSyAyMC4xMC4yMDA0OiBUaGlzIHNlZW1zIG5vdCBuZWNlc3NhcnkgIQorCS8vb3V0bCgwIHwgdWlfQ2hhbm5lbF9udW0gLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAweDQpOworCS8vb3V0bCgwIHwgc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9DaGFubmVsX251bSAsIGRldnByaXYtPmlvYmFzZStzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHg0KTsKKwkvL0VuZCBKSyAyMC4xMC4yMDA0OiBUaGlzIHNlZW1zIG5vdCBuZWNlc3NhcnkgIQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgY29udmVydCB0aW1pbmcgdW5pdCAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDM2KTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0LAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzNik7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzIpOworCW91dGwoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFDb252ZXJzaW9uVGltZSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzIpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypSZWFkIHRoZSBjYWxpYnJhdGlvbiBvZmZzZXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vdWlfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxMik7CisJdWlfVGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAxMik7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkNvbmZpZ3VyZSB0aGUgT2Zmc2V0IENvbnZlcnNpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoKHVpX1RlbXAgfCAweDAwMDIwMDAwKSwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTIpOworCW91dGwoKHVpX1RlbXAgfCAweDAwMDIwMDAwKSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMTIpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkluaXRpYWxpc2UgdWlfQ29tbWFuZFJlZ2lzdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJdWlfQ29tbWFuZFJlZ2lzdGVyID0gMDsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpIHsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCS8qRW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCXVpX0NvbW1hbmRSZWdpc3RlciA9IHVpX0NvbW1hbmRSZWdpc3RlciB8IDB4MDAxMDAwMDA7CisKKwl9CQkJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKworICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlN0YXJ0IHRoZSBjb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmRSZWdpc3RlciA9IHVpX0NvbW1hbmRSZWdpc3RlciB8IDB4MDAwODAwMDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBjb21tYW5kIHJlZ2l0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwodWlfQ29tbWFuZFJlZ2lzdGVyLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA4KTsKKwlvdXRsKHVpX0NvbW1hbmRSZWdpc3RlciwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgOCk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiBpbnRlcnJ1cHQgaXMgZW5hYmxlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpIHsKKworCQlkbyB7CisJICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qUmVhZCB0aGUgRU9DIGZsYWcgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkvL3VpX0VPQyA9IGlubCAoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjApICYgMTsKKwkJCXVpX0VPQyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDIwKSAmIDE7CisKKwkJfSB3aGlsZSAodWlfRU9DICE9IDEpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qUmVhZCB0aGUgZGlnaXRhbCB2YWx1ZSBvZiB0aGUgY2FsaWJyYXRpb24gT2Zmc2V0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLy9kYXRhWzBdID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsgMjgpOworCQlkYXRhWzBdID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjgpOworCX0JCQkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25HYWluVmFsdWUgICAgICAgICAgICAgICAgfAorICB8CQkJICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBjYWxpYnJhdGlvbiBnYWluICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgfAkJCSAgICAgICAgICBkYXRhWzBdICA6IENhbGlicmF0aW9uIGdhaW4gVmFsdWUgT2YgSW5wdXQgICAgIHwKKyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbkdhaW5WYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgVUlOVCAqIGRhdGEpCit7CisJVUlOVCB1aV9FT0MgPSAwOworCUlOVCB1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogV3JpdGUgdGhlIGNoYW5uZWwgdG8gY29uZmlndXJlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9CZWdpbiBKSyAyMC4xMC4yMDA0OiBUaGlzIHNlZW1zIG5vdCBuZWNlc3NhcnkgIQorCS8vb3V0bCgwIHwgdWlfQ2hhbm5lbF9udW0gLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAweDQpOworCS8vb3V0bCgwIHwgc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9DaGFubmVsX251bSAsIGRldnByaXYtPmlvYmFzZStzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHg0KTsKKwkvL0VuZCBKSyAyMC4xMC4yMDA0OiBUaGlzIHNlZW1zIG5vdCBuZWNlc3NhcnkgIQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypSZWFkIHRoZSBjYWxpYnJhdGlvbiBnYWluICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgY29udmVydCB0aW1pbmcgdW5pdCAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDM2KTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0LAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzNik7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzIpOworCW91dGwoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFDb252ZXJzaW9uVGltZSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzIpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkNvbmZpZ3VyZSB0aGUgR2FpbiBDb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCgweDAwMDQwMDAwICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTIpOworCW91dGwoMHgwMDA0MDAwMCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMTIpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qSW5pdGlhbGlzZSB1aV9Db21tYW5kUmVnaXN0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypUZXN0IGlmIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRU5BQkxFKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkgeworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypFbmFibGUgdGhlIGludGVycnVwdCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwkJdWlfQ29tbWFuZFJlZ2lzdGVyID0gdWlfQ29tbWFuZFJlZ2lzdGVyIHwgMHgwMDEwMDAwMDsKKworCX0JCQkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRU5BQkxFKQorCisgIC8qKioqKioqKioqKioqKioqKioqKioqLworCS8qU3RhcnQgdGhlIGNvbnZlcnNpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKiovCisKKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9Db21tYW5kUmVnaXN0ZXIgfCAweDAwMDgwMDAwOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qV3JpdGUgdGhlIGNvbW1hbmQgcmVnaXRlciAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCh1aV9Db21tYW5kUmVnaXN0ZXIgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA4KTsKKwlvdXRsKHVpX0NvbW1hbmRSZWdpc3RlciwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgOCk7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiBpbnRlcnJ1cHQgaXMgZW5hYmxlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8vaWYgKGlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpIHsKKworCQlkbyB7CisKKwkgIC8qKioqKioqKioqKioqKioqKioqLworCQkJLypSZWFkIHRoZSBFT0MgZmxhZyAqLworCSAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCS8vdWlfRU9DID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDIwKSAmIDE7CisJCQl1aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyMCkgJiAxOworCisJCX0gd2hpbGUgKHVpX0VPQyAhPSAxKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypSZWFkIHRoZSBkaWdpdGFsIHZhbHVlIG9mIHRoZSBjYWxpYnJhdGlvbiBHYWluICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCS8vZGF0YVswXSA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyOCk7CisJCWRhdGFbMF0gPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyOCk7CisKKwl9CQkJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJcmV0dXJuIDA7Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfUmVhZENKQ1ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgQ0pDICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisgIHwJCQkgICAgICAgICAgZGF0YVswXSAgOiBDSkMgVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMjAwX1JlYWRDSkNWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX0VPQyA9IDA7CisJSU5UIHVpX0NvbW1hbmRSZWdpc3RlciA9IDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlNldCB0aGUgY29udmVydGluZyB0aW1lIHVuaXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAzNik7CisJb3V0bChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzYpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzIpOworCW91dGwoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFDb252ZXJzaW9uVGltZSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzIpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypDb25maWd1cmUgdGhlIENKQyBDb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisKKwkvL291dGwoIDB4MDAwMDA0MDAgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA0KTsKKwlvdXRsKDB4MDAwMDA0MDAsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDQpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkluaXRpYWxpc2UgZHdfQ29tbWFuZFJlZ2lzdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmRSZWdpc3RlciA9IDA7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypUZXN0IGlmIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpIHsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkvKkVuYWJsZSB0aGUgaW50ZXJydXB0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfQ29tbWFuZFJlZ2lzdGVyID0gdWlfQ29tbWFuZFJlZ2lzdGVyIHwgMHgwMDEwMDAwMDsKKwl9CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJLypTdGFydCB0aGUgY29udmVyc2lvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCXVpX0NvbW1hbmRSZWdpc3RlciA9IHVpX0NvbW1hbmRSZWdpc3RlciB8IDB4MDAwODAwMDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBjb21tYW5kIHJlZ2l0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwodWlfQ29tbWFuZFJlZ2lzdGVyICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgOCk7CisJb3V0bCh1aV9Db21tYW5kUmVnaXN0ZXIsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDgpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlRlc3QgaWYgaW50ZXJydXB0IGlzIGVuYWJsZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKSB7CisJCWRvIHsKKworCSAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkvKlJlYWQgdGhlIEVPQyBmbGFnICovCisJICAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJLy91aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjApICYgMTsKKwkJCXVpX0VPQyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDIwKSAmIDE7CisKKwkJfSB3aGlsZSAodWlfRU9DICE9IDEpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qUmVhZCB0aGUgZGlnaXRhbCB2YWx1ZSBvZiB0aGUgQ0pDICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLy9kYXRhWzBdID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI4KTsKKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDI4KTsKKworCX0JCQkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzIwMF9SZWFkQ0pDQ2FsT2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBDSkMgY2FsaWJyYXRpb24gb2Zmc2V0ICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgfAkJCSAgICAgICAgICBkYXRhWzBdICA6IENKQyBjYWxpYnJhdGlvbiBvZmZzZXQgVmFsdWUKKyAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kzMjAwX1JlYWRDSkNDYWxPZmZzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9FT0MgPSAwOworCUlOVCB1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlJlYWQgY2FsaWJyYXRpb24gb2Zmc2V0IHZhbHVlIGZvciB0aGUgQ0pDICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nIHVuaXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAzNik7CisJb3V0bChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzYpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKGlfQURESURBVEFDb252ZXJzaW9uVGltZSAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDMyKTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWUsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDMyKTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKkNvbmZpZ3VyZSB0aGUgQ0pDIENvbnZlcnNpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoMHgwMDAwMDQwMCAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQpOworCW91dGwoMHgwMDAwMDQwMCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgNCk7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypDb25maWd1cmUgdGhlIE9mZnNldCBDb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKDB4MDAwMjAwMDAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDEyKTsKKwlvdXRsKDB4MDAwMjAwMDAsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDEyKTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypJbml0aWFsaXNlIHVpX0NvbW1hbmRSZWdpc3RlciAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSAwOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qVGVzdCBpZiB0aGUgaW50ZXJydXB0IGlzIGVuYWJsZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9FTkFCTEUpIHsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkvKkVuYWJsZSB0aGUgaW50ZXJydXB0ICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkJdWlfQ29tbWFuZFJlZ2lzdGVyID0gdWlfQ29tbWFuZFJlZ2lzdGVyIHwgMHgwMDEwMDAwMDsKKworCX0KKworICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlN0YXJ0IHRoZSBjb252ZXJzaW9uICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqLworCXVpX0NvbW1hbmRSZWdpc3RlciA9IHVpX0NvbW1hbmRSZWdpc3RlciB8IDB4MDAwODAwMDA7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypXcml0ZSB0aGUgY29tbWFuZCByZWdpdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKHVpX0NvbW1hbmRSZWdpc3RlcixkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA4KTsKKwlvdXRsKHVpX0NvbW1hbmRSZWdpc3RlciwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgOCk7CisJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkgeworCQlkbyB7CisJICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qUmVhZCB0aGUgRU9DIGZsYWcgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqLworCQkJLy91aV9FT0MgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjApICYgMTsKKwkJCXVpX0VPQyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDIwKSAmIDE7CisJCX0gd2hpbGUgKHVpX0VPQyAhPSAxKTsKKworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKlJlYWQgdGhlIGRpZ2l0YWwgdmFsdWUgb2YgdGhlIGNhbGlicmF0aW9uIE9mZnNldCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvL2RhdGFbMF0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjgpOworCQlkYXRhWzBdID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjgpOworCX0JCQkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzIwMF9SZWFkQ0pDR2FpblZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCBDSkMgY2FsaWJyYXRpb24gZ2FpbiB2YWx1ZQorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgfAkJCSAgICAgICAgICBkYXRhWzBdICA6IENKQyBjYWxpYnJhdGlvbiBnYWluIHZhbHVlCisgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorICB8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitpbnQgaV9BUENJMzIwMF9SZWFkQ0pDQ2FsR2FpbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX0VPQyA9IDA7CisJSU5UIHVpX0NvbW1hbmRSZWdpc3RlciA9IDA7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFNldCB0aGUgY29udmVydCB0aW1pbmcgdW5pdCAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lVW5pdCAsIGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDM2KTsKKwlvdXRsKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0LAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzNik7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBTZXQgdGhlIGNvbnZlcnQgdGltaW5nICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoaV9BRERJREFUQUNvbnZlcnNpb25UaW1lICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzIpOworCW91dGwoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFDb252ZXJzaW9uVGltZSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMzIpOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qQ29uZmlndXJlIHRoZSBDSkMgQ29udmVyc2lvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCgweDAwMDAwNDAwLGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQpOworCW91dGwoMHgwMDAwMDQwMCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgNCk7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qQ29uZmlndXJlIHRoZSBHYWluIENvbnZlcnNpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKDB4MDAwNDAwMDAsZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTIpOworCW91dGwoMHgwMDA0MDAwMCwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMTIpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qSW5pdGlhbGlzZSBkd19Db21tYW5kUmVnaXN0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJdWlfQ29tbWFuZFJlZ2lzdGVyID0gMDsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlRlc3QgaWYgdGhlIGludGVycnVwdCBpcyBlbmFibGUgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRU5BQkxFKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0VOQUJMRSkgeworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCS8qRW5hYmxlIHRoZSBpbnRlcnJ1cHQgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9Db21tYW5kUmVnaXN0ZXIgfCAweDAwMTAwMDAwOworCX0KKyAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJLypTdGFydCB0aGUgY29udmVyc2lvbiAqLworICAvKioqKioqKioqKioqKioqKioqKioqKi8KKwl1aV9Db21tYW5kUmVnaXN0ZXIgPSB1aV9Db21tYW5kUmVnaXN0ZXIgfCAweDAwMDgwMDAwOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qV3JpdGUgdGhlIGNvbW1hbmQgcmVnaXRlciAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCh1aV9Db21tYW5kUmVnaXN0ZXIgLGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDgpOworCW91dGwodWlfQ29tbWFuZFJlZ2lzdGVyLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA4KTsKKwkvL2lmIChpX0ludGVycnVwdEZsYWcgPT0gQURESURBVEFfRElTQUJMRSkKKwlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9PSBBRERJREFUQV9ESVNBQkxFKSB7CisJCWRvIHsKKwkgIC8qKioqKioqKioqKioqKioqKioqLworCQkJLypSZWFkIHRoZSBFT0MgZmxhZyAqLworCSAgLyoqKioqKioqKioqKioqKioqKiovCisJCQkvL3VpX0VPQyA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyMCkgJiAxOworCQkJdWlfRU9DID0gaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjApICYgMTsKKwkJfSB3aGlsZSAodWlfRU9DICE9IDEpOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypSZWFkIHRoZSBkaWdpdGFsIHZhbHVlIG9mIHRoZSBjYWxpYnJhdGlvbiBHYWluICovCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvL2RhdGFbMF0gPSBpbmwgKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI4KTsKKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDI4KTsKKwl9CQkJLy9pZiAoaV9JbnRlcnJ1cHRGbGFnID09IEFERElEQVRBX0RJU0FCTEUpCisJcmV0dXJuIDA7Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTMyMDBfSW5zbkJpdHNfQW5hbG9nSW5wdXRfVGVzdCAgICAgICAgICAgICAgIHwKKyAgfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFRlc3RzIHRoZSBTZWxlY3RlZCBBbmxvZyBJbnB1dCBDaGFubmVsICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyAgICAgOiBTdWJkZXZpY2UgUG9pbnRlciAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICA6IEluc24gU3RydWN0dXJlIFBvaW50ZXIgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorICB8CisgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgICAgICAgICA6IDAgVGVzdEFuYWxvZ0lucHV0U2hvcnRDaXJjdWl0CisgIHwJCQkJCQkJCQkgICAgIDEgVGVzdEFuYWxvZ0lucHV0Q29ubmVjdGlvbgkJCQkJCQkgCQkJCQkJCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICB8CisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorICB8CQkJICAgICAgICBkYXRhWzBdICAgICAgICAgICAgOiBEaWdpdGFsIHZhbHVlIG9idGFpbmVkICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSAgICAgICAgICAgIDogY2FsaWJyYXRpb24gb2Zmc2V0ICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMl0gICAgICAgICAgICA6IGNhbGlicmF0aW9uIGdhaW4gICAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMzIwMF9JbnNuQml0c19BbmFsb2dJbnB1dF9UZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX0NvbmZpZ3VyYXRpb24gPSAwOworCUlOVCBpX1RlbXA7CQkvLyxpX1RpbWVVbml0OworCS8vaWYoaV9Jbml0aWFsaXNlZD09MCkKKworCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Jbml0aWFsaXNlZCA9PSAwKSB7CisJCWlfQVBDSTMyMDBfUmVzZXQoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vaWYoaV9Jbml0aWFsaXNlZD09MCk7CisJaWYgKGRhdGFbMF0gIT0gMCAmJiBkYXRhWzBdICE9IDEpIHsKKwkJcHJpbnRrKCJcbkVycm9yIGluIHNlbGVjdGlvbiBvZiBmdW5jdGlvbmFsaXR5XG4iKTsKKwkJaV9BUENJMzIwMF9SZXNldChkZXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CQkJLy9pZihkYXRhWzBdIT0wICYmIGRhdGFbMF0hPTEpCisKKwlpZiAoZGF0YVswXSA9PSAxKQkvL1BlcmZvcm0gU2hvcnQgQ2lyY3VpdCBURVNUCisJeworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKlNldCB0aGUgc2hvcnQtY2ljdWl0IGJpdCAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwkJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfT2Zmc2V0ICsgMTIpID4+IDE5KSAmIDEpICE9CisJCQkxKSA7CisJCS8vb3V0bCgoMHgwMDAwMTAwMCB8aV9DaGFubmVsTm8pICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgNCk7CisJCW91dGwoKDB4MDAwMDEwMDAgfCBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9DaGFubmVsTm8pLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCTQpOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qU2V0IHRoZSB0aW1lIHVuaXQgdG8gbnMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBpX1RpbWVVbml0PSBpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0OworCQkgICBpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0PSAxOyAqLworCQkvL2lfVGVtcD0gaV9JbnRlcnJ1cHRGbGFnIDsKKwkJaV9UZW1wID0gc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZzsKKwkJLy9pX0ludGVycnVwdEZsYWcgPSBBRERJREFUQV9ESVNBQkxFOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID0gQURESURBVEFfRElTQUJMRTsKKwkJaV9BUENJMzIwMF9SZWFkMUFuYWxvZ0lucHV0Q2hhbm5lbChkZXYsIHMsIGluc24sIGRhdGEpOworCQkvL2lmKGlfQXV0b0NhbGlicmF0aW9uID09IEZBTFNFKQorCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQXV0b0NhbGlicmF0aW9uID09IEZBTFNFKSB7CisJCQkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwkJCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJaV9PZmZzZXQgKworCQkJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisKKwkJCS8vb3V0bCgoMHgwMDAwMTAwMCB8aV9DaGFubmVsTm8pICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgNCk7CisJCQlvdXRsKCgweDAwMDAxMDAwIHwgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQlpX0NoYW5uZWxObyksCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA0KTsKKwkJCWRhdGErKzsKKwkJCWlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uT2Zmc2V0VmFsdWUoZGV2LCBkYXRhKTsKKwkJCWRhdGErKzsKKwkJCWlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uR2FpblZhbHVlKGRldiwgZGF0YSk7CisJCX0KKwl9IGVsc2UgeworCQkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwkJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfT2Zmc2V0ICsgMTIpID4+IDE5KSAmIDEpICE9CisJCQkxKSA7CisJCS8vb3V0bCgoMHgwMDAwMDgwMHxpX0NoYW5uZWxObykgLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA0KTsKKwkJb3V0bCgoMHgwMDAwMDgwMCB8IHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NoYW5uZWxObyksCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJNCk7CisJCS8vdWlfQ29uZmlndXJhdGlvbiA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAwKTsKKwkJdWlfQ29uZmlndXJhdGlvbiA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDApOworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qU2V0IHRoZSB0aW1lIHVuaXQgdG8gbnMgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBpX1RpbWVVbml0PSBpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0OworCQkgICBpX0FERElEQVRBQ29udmVyc2lvblRpbWVVbml0PSAxOyAqLworCQkvL2lfVGVtcD0gaV9JbnRlcnJ1cHRGbGFnIDsKKwkJaV9UZW1wID0gc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZzsKKwkJLy9pX0ludGVycnVwdEZsYWcgPSBBRERJREFUQV9ESVNBQkxFOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID0gQURESURBVEFfRElTQUJMRTsKKwkJaV9BUENJMzIwMF9SZWFkMUFuYWxvZ0lucHV0Q2hhbm5lbChkZXYsIHMsIGluc24sIGRhdGEpOworCQkvL2lmKGlfQXV0b0NhbGlicmF0aW9uID09IEZBTFNFKQorCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQXV0b0NhbGlicmF0aW9uID09IEZBTFNFKSB7CisJCQkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwkJCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJaV9PZmZzZXQgKworCQkJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJCQkvL291dGwoKDB4MDAwMDA4MDB8aV9DaGFubmVsTm8pICwgZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgNCk7CisJCQlvdXRsKCgweDAwMDAwODAwIHwgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQlpX0NoYW5uZWxObyksCisJCQkJZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA0KTsKKwkJCWRhdGErKzsKKwkJCWlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uT2Zmc2V0VmFsdWUoZGV2LCBkYXRhKTsKKwkJCWRhdGErKzsKKwkJCWlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uR2FpblZhbHVlKGRldiwgZGF0YSk7CisJCX0KKwl9CisJLy9pX0ludGVycnVwdEZsYWc9aV9UZW1wIDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID0gaV9UZW1wOworCS8vcHJpbnRrKCJcbmlfSW50ZXJydXB0RmxhZz0lZFxuIixpX0ludGVycnVwdEZsYWcpOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzMjAwX0luc25Xcml0ZVJlbGVhc2VBbmFsb2dJbnB1dCAgICAgICAgICAgICB8CisgIHwJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOiAgUmVzZXRzIHRoZSBjaGFubmVscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzICAgICA6IFN1YmRldmljZSBQb2ludGVyICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgIDogSW5zbiBTdHJ1Y3R1cmUgUG9pbnRlciAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKKyAgfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMzIwMF9JbnNuV3JpdGVSZWxlYXNlQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlfQVBDSTMyMDBfUmVzZXQoZGV2KTsKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMjAwX0NvbW1hbmRUZXN0QW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldnwKKyAgfAkJCSxzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQkJCSAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IFRlc3QgdmFsaWRpdHkgZm9yIGEgY29tbWFuZCBmb3IgY3ljbGljIGFubG9nIGlucHV0ICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgIGFjcXVpc2l0aW9uICAJCQkJCQkgICAgIAkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQkJCQkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8CisgIHwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKyAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6MCAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzIwMF9Db21tYW5kVGVzdEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOwkJLy8gZGl2aXNvcjEsZGl2aXNvcjI7CisJVUlOVCB1aV9Db252ZXJ0VGltZSA9IDA7CisJVUlOVCB1aV9Db252ZXJ0VGltZUJhc2UgPSAwOworCVVJTlQgdWlfRGVsYXlUaW1lID0gMDsKKwlVSU5UIHVpX0RlbGF5VGltZUJhc2UgPSAwOworCUlOVCBpX1RyaWdnZXJtb2RlID0gMDsKKwlJTlQgaV9UcmlnZ2VyRWRnZSA9IDA7CisJSU5UIGlfTmJyT2ZDaGFubmVsID0gMDsKKwlJTlQgaV9DcHQgPSAwOworCWRvdWJsZSBkX0NvbnZlcnNpb25UaW1lRm9yQWxsQ2hhbm5lbHMgPSAwLjA7CisJZG91YmxlIGRfU0NBTlRpbWVOZXdVbml0ID0gMC4wOworCS8vIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCS8vaWYoaV9JbnRlcnJ1cHRGbGFnPT0wKQorCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID09IDApIHsKKwkJZXJyKys7CisJCS8vICAgICAgICAgIHByaW50aygiXG5UaGUgaW50ZXJydXB0IHNob3VsZCBiZSBlbmFibGVkXG4iKTsKKwl9CisJaWYgKGVycikgeworCQlpX0FQQ0kzMjAwX1Jlc2V0KGRldik7CisJCXJldHVybiAxOworCX0KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkgeworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CisJCWlfVHJpZ2dlckVkZ2UgPSBjbWQtPnN0YXJ0X2FyZyAmIDB4RkZGRjsKKwkJaV9UcmlnZ2VybW9kZSA9IGNtZC0+c3RhcnRfYXJnID4+IDE2OworCQlpZiAoaV9UcmlnZ2VyRWRnZSA8IDEgfHwgaV9UcmlnZ2VyRWRnZSA+IDMpIHsKKwkJCWVycisrOworCQkJcHJpbnRrKCJcblRoZSB0cmlnZ2VyIGVkZ2Ugc2VsZWN0aW9uIGlzIGluIGVycm9yXG4iKTsKKwkJfQorCQlpZiAoaV9UcmlnZ2VybW9kZSAhPSAyKSB7CisJCQllcnIrKzsKKwkJCXByaW50aygiXG5UaGUgdHJpZ2dlciBtb2RlIHNlbGVjdGlvbiBpcyBpbiBlcnJvclxuIik7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCWVycisrOworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikKKwkJZXJyKys7CisKKwlpZiAoY21kLT5zY2FuX2VuZF9zcmMgIT0gVFJJR19DT1VOVCkgeworCQljbWQtPnNjYW5fZW5kX3NyYyA9IFRSSUdfQ09VTlQ7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQpCisJCWVycisrOworCisJaWYgKGVycikgeworCQlpX0FQQ0kzMjAwX1Jlc2V0KGRldik7CisJCXJldHVybiAyOworCX0KKwkvL2lfRmlyc3RDaGFubmVsPWNtZC0+Y2hhbmxpc3RbMF07CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfRmlyc3RDaGFubmVsID0gY21kLT5jaGFubGlzdFswXTsKKwkvL2lfTGFzdENoYW5uZWw9Y21kLT5jaGFubGlzdFsxXTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9MYXN0Q2hhbm5lbCA9IGNtZC0+Y2hhbmxpc3RbMV07CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVpX0NvbnZlcnRUaW1lID0gY21kLT5jb252ZXJ0X2FyZyAmIDB4RkZGRjsKKwkJdWlfQ29udmVydFRpbWVCYXNlID0gY21kLT5jb252ZXJ0X2FyZyA+PiAxNjsKKwkJaWYgKHVpX0NvbnZlcnRUaW1lICE9IDIwICYmIHVpX0NvbnZlcnRUaW1lICE9IDQwCisJCQkmJiB1aV9Db252ZXJ0VGltZSAhPSA4MCAmJiB1aV9Db252ZXJ0VGltZSAhPSAxNjApCisJCXsKKwkJCXByaW50aygiXG5UaGUgc2VsZWN0aW9uIG9mIGNvbnZlcnNpb24gdGltZSByZWxvYWQgdmFsdWUgaXMgaW4gZXJyb3JcbiIpOworCQkJZXJyKys7CisJCX0JCS8vIGlmICh1aV9Db252ZXJ0VGltZSE9MjAgJiYgdWlfQ29udmVydFRpbWUhPTQwICYmIHVpX0NvbnZlcnRUaW1lIT04MCAmJiB1aV9Db252ZXJ0VGltZSE9MTYwICkKKwkJaWYgKHVpX0NvbnZlcnRUaW1lQmFzZSAhPSAyKSB7CisJCQlwcmludGsoIlxuVGhlIHNlbGVjdGlvbiBvZiBjb252ZXJzaW9uIHRpbWUgdW5pdCAgaXMgaW4gZXJyb3JcbiIpOworCQkJZXJyKys7CisJCX0JCS8vaWYodWlfQ29udmVydFRpbWVCYXNlIT0yKQorCX0gZWxzZSB7CisJCXVpX0NvbnZlcnRUaW1lID0gMDsKKwkJdWlfQ29udmVydFRpbWVCYXNlID0gMDsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsKKwkJdWlfRGVsYXlUaW1lID0gMDsKKwkJdWlfRGVsYXlUaW1lQmFzZSA9IDA7CisJfQkJCS8vaWYoY21kLT5zY2FuX2JlZ2luX3NyYz09VFJJR19GT0xMT1cpCisJZWxzZSB7CisJCXVpX0RlbGF5VGltZSA9IGNtZC0+c2Nhbl9iZWdpbl9hcmcgJiAweEZGRkY7CisJCXVpX0RlbGF5VGltZUJhc2UgPSBjbWQtPnNjYW5fYmVnaW5fYXJnID4+IDE2OworCQlpZiAodWlfRGVsYXlUaW1lQmFzZSAhPSAyICYmIHVpX0RlbGF5VGltZUJhc2UgIT0gMykgeworCQkJZXJyKys7CisJCQlwcmludGsoIlxuVGhlIERlbGF5IHRpbWUgYmFzZSBzZWxlY3Rpb24gaXMgaW4gZXJyb3JcbiIpOworCQl9CisJCWlmICh1aV9EZWxheVRpbWUgPCAxICYmIHVpX0RlbGF5VGltZSA+IDEwMjMpIHsKKwkJCWVycisrOworCQkJcHJpbnRrKCJcblRoZSBEZWxheSB0aW1lIHZhbHVlIGlzIGluIGVycm9yXG4iKTsKKwkJfQorCQlpZiAoZXJyKSB7CisJCQlpX0FQQ0kzMjAwX1Jlc2V0KGRldik7CisJCQlyZXR1cm4gMzsKKwkJfQorCQlmcHVfYmVnaW4oKTsKKwkJZF9TQ0FOVGltZU5ld1VuaXQgPSAoZG91YmxlKXVpX0RlbGF5VGltZTsKKwkJLy9pX05ick9mQ2hhbm5lbD0gaV9MYXN0Q2hhbm5lbC1pX0ZpcnN0Q2hhbm5lbCArIDQ7CisJCWlfTmJyT2ZDaGFubmVsID0KKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0xhc3RDaGFubmVsIC0KKwkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0ZpcnN0Q2hhbm5lbCArIDQ7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypjYWxjdWxhdGUgdGhlIHRvdGFsIGNvbnZlcnNpb24gdGltZSBmb3IgYWxsIHRoZSBjaGFubmVscyAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWRfQ29udmVyc2lvblRpbWVGb3JBbGxDaGFubmVscyA9CisJCQkoZG91YmxlKSgoZG91YmxlKXVpX0NvbnZlcnRUaW1lIC8KKwkJCShkb3VibGUpaV9OYnJPZkNoYW5uZWwpOworCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypDb252ZXJ0IHRoZSBmcmVxdWVuY2UgaW4gdGltZSAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCWRfQ29udmVyc2lvblRpbWVGb3JBbGxDaGFubmVscyA9CisJCQkoZG91YmxlKTEuMCAvIGRfQ29udmVyc2lvblRpbWVGb3JBbGxDaGFubmVsczsKKwkJdWlfQ29udmVydFRpbWVCYXNlID0gMzsKKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypUZXN0IGlmIHRoZSB0aW1lIHVuaXQgaXMgdGhlIHNhbWUgKi8KKyAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAodWlfRGVsYXlUaW1lQmFzZSA8PSB1aV9Db252ZXJ0VGltZUJhc2UpIHsKKworCQkJZm9yIChpX0NwdCA9IDA7CisJCQkJaV9DcHQgPCAodWlfQ29udmVydFRpbWVCYXNlIC0gdWlfRGVsYXlUaW1lQmFzZSk7CisJCQkJaV9DcHQrKykgeworCisJCQkJZF9Db252ZXJzaW9uVGltZUZvckFsbENoYW5uZWxzID0KKwkJCQkJZF9Db252ZXJzaW9uVGltZUZvckFsbENoYW5uZWxzICogMTAwMDsKKwkJCQlkX0NvbnZlcnNpb25UaW1lRm9yQWxsQ2hhbm5lbHMgPQorCQkJCQlkX0NvbnZlcnNpb25UaW1lRm9yQWxsQ2hhbm5lbHMgKyAxOworCQkJfQorCQl9IGVsc2UgeworCQkJZm9yIChpX0NwdCA9IDA7CisJCQkJaV9DcHQgPCAodWlfRGVsYXlUaW1lQmFzZSAtIHVpX0NvbnZlcnRUaW1lQmFzZSk7CisJCQkJaV9DcHQrKykgeworCQkJCWRfU0NBTlRpbWVOZXdVbml0ID0gZF9TQ0FOVGltZU5ld1VuaXQgKiAxMDAwOworCisJCQl9CisJCX0KKworCQlpZiAoZF9Db252ZXJzaW9uVGltZUZvckFsbENoYW5uZWxzID49IGRfU0NBTlRpbWVOZXdVbml0KSB7CisKKwkJCXByaW50aygiXG5TQ0FOIERlbGF5IHZhbHVlIGNhbm5vdCBiZSB1c2VkXG4iKTsKKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKlNDQU4gRGVsYXkgdmFsdWUgY2Fubm90IGJlIHVzZWQgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQllcnIrKzsKKwkJfQorCQlmcHVfZW5kKCk7CisJfQkJCS8vZWxzZSBpZihjbWQtPnNjYW5fYmVnaW5fc3JjPT1UUklHX0ZPTExPVykKKworCWlmIChlcnIpIHsKKwkJaV9BUENJMzIwMF9SZXNldChkZXYpOworCQlyZXR1cm4gNDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzMjAwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHwKKyAgfCAJCQkJCQkJCQkJCSAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCSB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IFRhc2sgICAgICAgICAgICAgIDogU3RvcCB0aGUgIGFjcXVpc2l0aW9uICAJCQkJCQkgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCSAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOjAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMyMDBfU3RvcEN5Y2xpY0FjcXVpc2l0aW9uKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJVUlOVCB1aV9Db25maWd1cmF0aW9uID0gMDsKKwkvL2lfSW50ZXJydXB0RmxhZz0wOworCS8vaV9Jbml0aWFsaXNlZD0wOworCS8vaV9Db3VudD0wOworCS8vaV9TdW09MDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID0gMDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Jbml0aWFsaXNlZCA9IDA7CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgPSAwOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1N1bSA9IDA7CisKKyAgLyoqKioqKioqKioqKioqKioqKiovCisJLypSZWFkIHRoZSByZWdpc3RlciAqLworICAvKioqKioqKioqKioqKioqKioqKi8KKwkvL3VpX0NvbmZpZ3VyYXRpb24gPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgOCk7CisJdWlfQ29uZmlndXJhdGlvbiA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA4KTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qUmVzZXQgdGhlIFNUQVJUIGFuZCBJUlEgYml0ICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwoKHVpX0NvbmZpZ3VyYXRpb24gJiAweEZGRTdGRkZGKSxkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA4KTsKKwlvdXRsKCh1aV9Db25maWd1cmF0aW9uICYgMHhGRkU3RkZGRiksCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDgpOworCXJldHVybiAwOworfQorCisvKgorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBGdW5jdGlvbiBuYW1lICAgICA6IGludCBpX0FQQ0kzMjAwX0NvbW1hbmRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCAgfAorICB8CQkJCQkJCQkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IERvZXMgYXN5bmNocm9ub3VzIGFjcXVpc2l0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBtb2RlIDEgb3IgMi4JCQkJCQkgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkJICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTMyMDBfQ29tbWFuZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCVVJTlQgdWlfQ29uZmlndXJhdGlvbiA9IDA7CisJLy9JTlQgIGlfQ3VycmVudFNvdXJjZSA9IDA7CisJVUlOVCB1aV9UcmlnZ2VyID0gMDsKKwlVSU5UIHVpX1RyaWdnZXJFZGdlID0gMDsKKwlVSU5UIHVpX1RyaWdnZXJtb2RlID0gMDsKKwlVSU5UIHVpX1NjYW5Nb2RlID0gMDsKKwlVSU5UIHVpX0NvbnZlcnRUaW1lID0gMDsKKwlVSU5UIHVpX0NvbnZlcnRUaW1lQmFzZSA9IDA7CisJVUlOVCB1aV9EZWxheVRpbWUgPSAwOworCVVJTlQgdWlfRGVsYXlUaW1lQmFzZSA9IDA7CisJVUlOVCB1aV9EZWxheU1vZGUgPSAwOworCS8vaV9GaXJzdENoYW5uZWw9Y21kLT5jaGFubGlzdFswXTsKKwkvL2lfTGFzdENoYW5uZWw9Y21kLT5jaGFubGlzdFsxXTsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9GaXJzdENoYW5uZWwgPSBjbWQtPmNoYW5saXN0WzBdOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0xhc3RDaGFubmVsID0gY21kLT5jaGFubGlzdFsxXTsKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJdWlfVHJpZ2dlciA9IDE7CisJCXVpX1RyaWdnZXJFZGdlID0gY21kLT5zdGFydF9hcmcgJiAweEZGRkY7CisJCXVpX1RyaWdnZXJtb2RlID0gY21kLT5zdGFydF9hcmcgPj4gMTY7CisJfQkJCS8vaWYoY21kLT5zdGFydF9zcmM9PVRSSUdfRVhUKQorCWVsc2UgeworCQl1aV9UcmlnZ2VyID0gMDsKKwl9CQkJLy9lbHNlaWYoY21kLT5zdGFydF9zcmM9PVRSSUdfRVhUKQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQl1aV9TY2FuTW9kZSA9IDA7CisJfQkJCS8vIGlmIChjbWQtPnN0b3Bfc3JjPT1UUklHX0NPVU5UKQorCWVsc2UgeworCQl1aV9TY2FuTW9kZSA9IDI7CisJfQkJCS8vZWxzZSBpZiAoY21kLT5zdG9wX3NyYz09VFJJR19DT1VOVCkKKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSB7CisJCXVpX0RlbGF5VGltZSA9IDA7CisJCXVpX0RlbGF5VGltZUJhc2UgPSAwOworCQl1aV9EZWxheU1vZGUgPSAwOworCX0JCQkvL2lmKGNtZC0+c2Nhbl9iZWdpbl9zcmM9PVRSSUdfRk9MTE9XKQorCWVsc2UgeworCQl1aV9EZWxheVRpbWUgPSBjbWQtPnNjYW5fYmVnaW5fYXJnICYgMHhGRkZGOworCQl1aV9EZWxheVRpbWVCYXNlID0gY21kLT5zY2FuX2JlZ2luX2FyZyA+PiAxNjsKKwkJdWlfRGVsYXlNb2RlID0gMTsKKwl9CQkJLy9lbHNlIGlmKGNtZC0+c2Nhbl9iZWdpbl9zcmM9PVRSSUdfRk9MTE9XKQorCS8vICAgICAgICBwcmludGsoIlxudWlfRGVsYXlUaW1lPSV1XG4iLHVpX0RlbGF5VGltZSk7CisJLy8gICAgICAgIHByaW50aygiXG51aV9EZWxheVRpbWVCYXNlPSV1XG4iLHVpX0RlbGF5VGltZUJhc2UpOworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdWlfQ29udmVydFRpbWUgPSBjbWQtPmNvbnZlcnRfYXJnICYgMHhGRkZGOworCQl1aV9Db252ZXJ0VGltZUJhc2UgPSBjbWQtPmNvbnZlcnRfYXJnID4+IDE2OworCX0gZWxzZSB7CisJCXVpX0NvbnZlcnRUaW1lID0gMDsKKwkJdWlfQ29udmVydFRpbWVCYXNlID0gMDsKKwl9CisKKwkvLyBpZihpX0FERElEQVRBVHlwZSA9PTEgfHwgKChpX0FERElEQVRBVHlwZT09MikpKQorCS8vICAgeworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypSZWFkIHRoZSBvbGQgY29uZmlndXJhdGlvbiBvZiB0aGUgY3VycmVudCBzb3VyY2UgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vdWlfQ29uZmlndXJhdGlvbiA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxMik7CisJdWlfQ29uZmlndXJhdGlvbiA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAxMik7CisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBjdXJyZW50IHNvdXJjZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKCh1aV9Db25maWd1cmF0aW9uICYgMHhGRkMwMDAwMCApLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKzEyKTsKKwlvdXRsKCh1aV9Db25maWd1cmF0aW9uICYgMHhGRkMwMDAwMCksCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDEyKTsKKwkvLyB9CisJdWlfQ29uZmlndXJhdGlvbiA9IDA7CisJLy8gICAgIHByaW50aygiXG5maXJzdGNoYW5uZWw9JXVcbiIsaV9GaXJzdENoYW5uZWwpOworCS8vICAgICBwcmludGsoIlxubGFzdGNoYW5uZWw9JXVcbiIsaV9MYXN0Q2hhbm5lbCk7CisJLy8gICAgIHByaW50aygiXG51aV9UcmlnZ2VyPSV1XG4iLHVpX1RyaWdnZXIpOworCS8vICAgICBwcmludGsoIlxudWlfVHJpZ2dlckVkZ2U9JXVcbiIsdWlfVHJpZ2dlckVkZ2UpOworCS8vICAgICBwcmludGsoIlxudWlfVHJpZ2dlcm1vZGU9JXVcbiIsdWlfVHJpZ2dlcm1vZGUpOworCS8vICAgICAgcHJpbnRrKCJcbnVpX0RlbGF5TW9kZT0ldVxuIix1aV9EZWxheU1vZGUpOworCS8vICAgICBwcmludGsoIlxudWlfU2Nhbk1vZGU9JXVcbiIsdWlfU2Nhbk1vZGUpOworCisJLy91aV9Db25maWd1cmF0aW9uID0gaV9GaXJzdENoYW5uZWwgfChpX0xhc3RDaGFubmVsIDw8IDgpfCAweDAwMTAwMDAwIHwKKwl1aV9Db25maWd1cmF0aW9uID0KKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfRmlyc3RDaGFubmVsIHwgKHNfQm9hcmRJbmZvc1tkZXYtPgorCQkJbWlub3JdLgorCQlpX0xhc3RDaGFubmVsIDw8IDgpIHwgMHgwMDEwMDAwMCB8ICh1aV9UcmlnZ2VyIDw8IDI0KSB8CisJCSh1aV9UcmlnZ2VyRWRnZSA8PCAyNSkgfCAodWlfVHJpZ2dlcm1vZGUgPDwgMjcpIHwgKHVpX0RlbGF5TW9kZQorCQk8PCAxOCkgfCAodWlfU2Nhbk1vZGUgPDwgMTYpOworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qV3JpdGUgdGhlIENvbmZpZ3VyYXRpb24gKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKCB1aV9Db25maWd1cmF0aW9uLCBkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAweDgpOworCW91dGwodWlfQ29uZmlndXJhdGlvbiwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMHg4KTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCS8qV3JpdGUgdGhlIERlbGF5IFZhbHVlICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwodWlfRGVsYXlUaW1lLGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQwKTsKKwlvdXRsKHVpX0RlbGF5VGltZSwKKwkJZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgNDApOworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qV3JpdGUgdGhlIERlbGF5IHRpbWUgYmFzZSAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCh1aV9EZWxheVRpbWVCYXNlLGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQ0KTsKKwlvdXRsKHVpX0RlbGF5VGltZUJhc2UsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDQ0KTsKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKldyaXRlIHRoZSBjb252ZXJzaW9uIHRpbWUgdmFsdWUgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvL3doaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQrMTIpPj4xOSkgJiAxKSAhPSAxKTsKKwl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsKKwkJCQkJMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkvL291dGwodWlfQ29udmVydFRpbWUsZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzIpOworCW91dGwodWlfQ29udmVydFRpbWUsCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDMyKTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLypXcml0ZSB0aGUgY29udmVyc2lvbiB0aW1lIGJhc2UgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCsxMik+PjE5KSAmIDEpICE9IDEpOworCXdoaWxlICgoKGlubChkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKworCQkJCQkxMikgPj4gMTkpICYgMSkgIT0gMSkgOworCS8vb3V0bCh1aV9Db252ZXJ0VGltZUJhc2UsZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMzYpOworCW91dGwodWlfQ29udmVydFRpbWVCYXNlLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAzNik7CisgIC8qKioqKioqKioqKioqKioqKioqLworCS8qUmVhZCB0aGUgcmVnaXN0ZXIgKi8KKyAgLyoqKioqKioqKioqKioqKioqKiovCisJLy91aV9Db25maWd1cmF0aW9uID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDQpOworCXVpX0NvbmZpZ3VyYXRpb24gPQorCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgNCk7CisgIC8qKioqKioqKioqKioqKioqKiovCisJLypTZXQgdGhlIFNDQU4gYml0ICovCisgIC8qKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisKKwkvL291dGwoKCh1aV9Db25maWd1cmF0aW9uICYgMHgxRTBGRikgfCAweDAwMDAyMDAwKSxkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA0KTsKKwlvdXRsKCgodWlfQ29uZmlndXJhdGlvbiAmIDB4MUUwRkYpIHwgMHgwMDAwMjAwMCksCisJCWRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDQpOworICAvKioqKioqKioqKioqKioqKioqKi8KKwkvKlJlYWQgdGhlIHJlZ2lzdGVyICovCisgIC8qKioqKioqKioqKioqKioqKioqLworCXVpX0NvbmZpZ3VyYXRpb24gPSAwOworCS8vdWlfQ29uZmlndXJhdGlvbiA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyA4KTsKKwl1aV9Db25maWd1cmF0aW9uID0KKwkJaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDgpOworCisgIC8qKioqKioqKioqKioqKioqKioqLworCS8qU2V0IHRoZSBTVEFSVCBiaXQgKi8KKyAgLyoqKioqKioqKioqKioqKioqKiovCisJLy93aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0KzEyKT4+MTkpICYgMSkgIT0gMSk7CisJd2hpbGUgKCgoaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArCisJCQkJCTEyKSA+PiAxOSkgJiAxKSAhPSAxKSA7CisJLy9vdXRsKCh1aV9Db25maWd1cmF0aW9uIHwgMHgwMDA4MDAwMCksZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgOCk7CisJb3V0bCgodWlfQ29uZmlndXJhdGlvbiB8IDB4MDAwODAwMDApLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyA4KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiAgaW50IGlfQVBDSTMyMDBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikJCQkgICAgIHwKKyAgfAkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGFzayAgICAgICAgICAgICAgOlJlc2V0cyB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBjYXJkICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzMjAwX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCUlOVCBpX1RlbXA7CisJRFdPUkQgZHdfRHVtbXk7CisJLy9pX0ludGVycnVwdEZsYWc9MDsKKwkvL2lfSW5pdGlhbGlzZWQ9PTA7CisJLy9pX0NvdW50PTA7CisJLy9pX1N1bT0wOworCisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW50ZXJydXB0RmxhZyA9IDA7CisJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfSW5pdGlhbGlzZWQgPSAwOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX0NvdW50ID0gMDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9TdW0gPSAwOworCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5iX1N0cnVjdEluaXRpYWxpemVkID0gMDsKKworCW91dGwoMHg4MzgzODM4MywgZGV2cHJpdi0+aV9Jb2Jhc2VBbWNjICsgMHg2MCk7CisKKwkvLyBFbmFibGUgdGhlIGludGVycnVwdCBmb3IgdGhlIGNvbnRyb2xlcgorCWR3X0R1bW15ID0gaW5sKGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCW91dGwoZHdfRHVtbXkgfCAweDIwMDAsIGRldnByaXYtPmlfSW9iYXNlQW1jYyArIDB4MzgpOworCW91dGwoMCwgZGV2cHJpdi0+aV9Jb2Jhc2VBZGRvbik7CS8vUmVzZXRzIHRoZSBvdXRwdXQKKyAgLyoqKioqKioqKioqKioqKi8KKwkvKkVtcHR5IHRoZSBidWZmZXIgKi8KKyAgLyoqKioqKioqKioqKioqLworCWZvciAoaV9UZW1wID0gMDsgaV9UZW1wIDw9IDk1OyBpX1RlbXArKykgeworCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX1RlbXBdPTA7CisJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9UZW1wXSA9IDA7CisJfQkJCS8vZm9yKGlfVGVtcD0wO2lfVGVtcDw9OTU7aV9UZW1wKyspCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlJlc2V0IHRoZSBTVEFSVCBhbmQgSVJRIGJpdCAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJZm9yIChpX1RlbXAgPSAwOyBpX1RlbXAgPD0gMTkyOykgeworCQl3aGlsZSAoKChpbmwoZGV2cHJpdi0+aW9iYXNlICsgaV9UZW1wICsgMTIpID4+IDE5KSAmIDEpICE9IDEpIDsKKwkJb3V0bCgwLCBkZXZwcml2LT5pb2Jhc2UgKyBpX1RlbXAgKyA4KTsKKwkJaV9UZW1wID0gaV9UZW1wICsgNjQ7CisJfQkJCS8vZm9yKGlfVGVtcD0wO2lfVGVtcDw9MTkyO2lfVGVtcCs2NCkKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRnVuY3Rpb24gICBOYW1lICAgOiBzdGF0aWMgdm9pZCB2X0FQQ0kzMjAwX0ludGVycnVwdAkJCQkJICAgICB8CisgIHwJCQkJCSAgKGludCBpcnEgLCB2b2lkICpkKQkJCQkgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IEludGVycnVwdCBwcm9jZXNzaW5nIFJvdXRpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IElucHV0IFBhcmFtZXRlcnMgIDogaW50IGlycSAgICAgICAgICAgICAgICAgOiBpcnEgbnVtYmVyICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmQgICAgICAgICAgICAgICAgIDogdm9pZCBwb2ludGVyICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICB8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IJCQkJCSB8CisgIHwJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLwordm9pZCB2X0FQQ0kzMjAwX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCVVJTlQgdWlfU3RhdHVzUmVnaXN0ZXIgPSAwOworCVVJTlQgdWlfQ2hhbm5lbE51bWJlciA9IDA7CisJSU5UIGlfQ2FsaWJyYXRpb25GbGFnID0gMDsKKwlJTlQgaV9DSkNGbGFnID0gMDsKKwlVSU5UIHVpX0R1bW15VmFsdWUgPSAwOworCVVJTlQgdWlfRGlnaXRhbFRlbXBlcmF0dXJlID0gMDsKKwlVSU5UIHVpX0RpZ2l0YWxJbnB1dCA9IDA7CisJaW50IGlfQ29udmVydENKQ0NhbGlicmF0aW9uOworCisJLy9CRUdJTiBKSyBURVNUCisJaW50IGlfUmV0dXJuVmFsdWUgPSAwOworCS8vRU5EIEpLIFRFU1QKKworCS8vcHJpbnRrICgiXG4gaV9TY2FuVHlwZSA9ICVpIGlfQURESURBVEFUeXBlID0gJWkiLCBzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfU2NhblR5cGUsIHNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9BRERJREFUQVR5cGUpOworCisJLy9zd2l0Y2goaV9TY2FuVHlwZSkKKwlzd2l0Y2ggKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX1NjYW5UeXBlKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJLy9zd2l0Y2goaV9BRERJREFUQVR5cGUpCisJCXN3aXRjaCAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQURESURBVEFUeXBlKSB7CisJCWNhc2UgMDoKKwkJY2FzZSAxOgorCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLypSZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLy91aV9TdGF0dXNSZWdpc3RlciA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxNik7CisJCQl1aV9TdGF0dXNSZWdpc3RlciA9CisJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMTYpOworCQkJaWYgKCh1aV9TdGF0dXNSZWdpc3RlciAmIDB4MikgPT0gMHgyKSB7CisJCQkJLy9pX0NhbGlicmF0aW9uRmxhZyA9ICgoaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDEyKSAmIDB4MDAwNjAwMDApID4+IDE3KTsKKwkJCQlpX0NhbGlicmF0aW9uRmxhZyA9CisJCQkJCSgoaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJCQkJCW1pbm9yXS4KKwkJCQkJCQlpX09mZnNldCArCisJCQkJCQkJMTIpICYgMHgwMDA2MDAwMCkgPj4KKwkJCQkJMTcpOworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qUmVhZCB0aGUgY2hhbm5lbCBudW1iZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvL3VpX0NoYW5uZWxOdW1iZXIgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjQpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLypSZWFkIHRoZSBkaWdpdGFsIGFuYWxvZyBpbnB1dCB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8vdWlfRGlnaXRhbElucHV0ID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI4KTsKKwkJCQl1aV9EaWdpdGFsSW5wdXQgPQorCQkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjgpOworCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIGNoYW5uZWwgdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJaWYgKGlfQ2FsaWJyYXRpb25GbGFnID09IDApIHsKKwkJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDBdID0gdWlfRGlnaXRhbElucHV0OworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NvdW50ICsgMF0gPSB1aV9EaWdpdGFsSW5wdXQ7CisKKwkJCQkJLy9CZWdpbiBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCQkJCS8qCisJCQkJCSAgIHByaW50aygiXG4gMSAtIGlfQVBDSTMyMDBfR2V0Q2hhbm5lbENhbGlicmF0aW9uVmFsdWUgKGRldiwgc19Cb2FyZEluZm9zICVpIiwgdWlfQ2hhbm5lbE51bWJlcik7CisJCQkJCSAgIGlfQVBDSTMyMDBfR2V0Q2hhbm5lbENhbGlicmF0aW9uVmFsdWUgKGRldiwgc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9DaGFubmVsX251bSwKKwkJCQkJICAgJnNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0udWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW3NfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudCArIDZdLAorCQkJCQkgICAmc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS51aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50ICsgN10sCisJCQkJCSAgICZzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLnVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQgKyA4XSk7CisJCQkJCSAqLworCQkJCQkvL0VuZCBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKlN0YXJ0IHRoZSBjb252ZXJzaW9uIG9mIHRoZSBjYWxpYnJhdGlvbiBvZmZzZXQgdmFsdWUgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbk9mZnNldFZhbHVlCisJCQkJCQkoZGV2LCAmdWlfRHVtbXlWYWx1ZSk7CisJCQkJfQkvL2lmIChpX0NhbGlicmF0aW9uRmxhZyA9PSAwKQorCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIGNhbGlicmF0aW9uIG9mZnNldCB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGlfQ2FsaWJyYXRpb25GbGFnID09IDEpIHsKKworCQkgIC8qKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNhdmUgdGhlIHZhbHVlICovCisJCSAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgMV0gPSB1aV9EaWdpdGFsSW5wdXQ7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfQ291bnQgKyAxXSA9IHVpX0RpZ2l0YWxJbnB1dDsKKworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFN0YXJ0IHRoZSBjb252ZXJzaW9uIG9mIHRoZSBjYWxpYnJhdGlvbiBnYWluIHZhbHVlICovCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJaV9BUENJMzIwMF9SZWFkQ2FsaWJyYXRpb25HYWluVmFsdWUoZGV2LAorCQkJCQkJJnVpX0R1bW15VmFsdWUpOworCQkJCX0JLy9pZiAoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMSkKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qVGVzdCBpZiB0aGUgdmFsdWUgcmVhZCBpcyB0aGUgY2FsaWJyYXRpb24gZ2FpbiB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMikgeworCisJCSAgLyoqKioqKioqKioqKioqKiovCisJCQkJCS8qU2F2ZSB0aGUgdmFsdWUgKi8KKwkJICAvKioqKioqKioqKioqKioqKi8KKwkJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDJdID0gdWlfRGlnaXRhbElucHV0OworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NvdW50ICsgMl0gPSB1aV9EaWdpdGFsSW5wdXQ7CisJCQkJCS8vaWYoaV9TY2FuVHlwZT09MSkKKwkJCQkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfU2NhblR5cGUgPT0gMSkgeworCisJCQkJCQkvL2lfSW50ZXJydXB0RmxhZz0wOworCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJCWlfSW50ZXJydXB0RmxhZyA9IDA7CisJCQkJCQkvL2lfQ291bnQ9aV9Db3VudCArIDY7CisJCQkJCQkvL0JlZ2luIEpLIDIyLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwkJCQkJCS8vc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50PXNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9Db3VudCArIDY7CisJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJaV9Db3VudCA9CisJCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJCQkJbWlub3JdLmlfQ291bnQgKyA5OworCQkJCQkJLy9FbmQgSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQkJCQl9CS8vaWYoaV9TY2FuVHlwZT09MSkKKwkJCQkJZWxzZSB7CisJCQkJCQkvL2lfQ291bnQ9MDsKKwkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQlpX0NvdW50ID0gMDsKKwkJCQkJfQkvL2Vsc2VpZihpX1NjYW5UeXBlPT0xKQorCQkJCQkvL2lmKGlfU2NhblR5cGUhPTEpCisJCQkJCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX1NjYW5UeXBlICE9IDEpIHsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSBzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJCQkJCX0JLy9pZihpX1NjYW5UeXBlIT0xKQorCQkJCQllbHNlIHsKKwkJCQkJCS8vaWYoaV9DaGFubmVsQ291bnQ9PWlfU3VtKQorCQkJCQkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQlpX0NoYW5uZWxDb3VudCA9PQorCQkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCQltaW5vcl0uaV9TdW0pIHsKKwkJCQkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJCQkJCQl9CisJCQkJCX0JLy9pZihpX1NjYW5UeXBlIT0xKQorCQkJCX0JLy9pZiAoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMikKKwkJCX0JLy8gaWYgKCh1aV9TdGF0dXNSZWdpc3RlciAmIDB4MikgPT0gMHgyKQorCisJCQlicmVhazsKKworCQljYXNlIDI6CisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLypSZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkvL3VpX1N0YXR1c1JlZ2lzdGVyID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDE2KTsKKwkJCXVpX1N0YXR1c1JlZ2lzdGVyID0KKwkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAxNik7CisJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qVGVzdCBpZiBpbnRlcnJ1cHQgb2NjdXIgKi8KKwkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKHVpX1N0YXR1c1JlZ2lzdGVyICYgMHgyKSA9PSAweDIpIHsKKworCQkJCS8vaV9DSkNGbGFnID0gKChpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgNCkgJiAweDAwMDAwNDAwKSA+PiAxMCk7CisJCQkJaV9DSkNGbGFnID0KKwkJCQkJKChpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQkJbWlub3JdLgorCQkJCQkJCWlfT2Zmc2V0ICsKKwkJCQkJCQk0KSAmIDB4MDAwMDA0MDApID4+IDEwKTsKKworCQkJCS8vaV9DYWxpYnJhdGlvbkZsYWcgPSAoKGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAxMikgJiAweDAwMDYwMDAwKSA+PiAxNyk7CisJCQkJaV9DYWxpYnJhdGlvbkZsYWcgPQorCQkJCQkoKGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCQltaW5vcl0uCisJCQkJCQkJaV9PZmZzZXQgKworCQkJCQkJCTEyKSAmIDB4MDAwNjAwMDApID4+CisJCQkJCTE3KTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qUmVhZCB0aGUgY2hhbm5lbCBudW1iZXIgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCS8vdWlfQ2hhbm5lbE51bWJlciA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyNCk7CisJCQkJdWlfQ2hhbm5lbE51bWJlciA9CisJCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyNCk7CisJCQkJLy9CZWdpbiBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLnVpX0NoYW5uZWxfbnVtID0KKwkJCQkJdWlfQ2hhbm5lbE51bWJlcjsKKwkJCQkvL0VuZCBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qUmVhZCB0aGUgZGlnaXRhbCB0ZW1wZXJhdHVyZSB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLy91aV9EaWdpdGFsVGVtcGVyYXR1cmUgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMjgpOworCQkJCXVpX0RpZ2l0YWxUZW1wZXJhdHVyZSA9CisJCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9PZmZzZXQgKyAyOCk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qVGVzdCBpZiB0aGUgdmFsdWUgcmVhZCBpcyB0aGUgY2hhbm5lbCB2YWx1ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoKGlfQ2FsaWJyYXRpb25GbGFnID09IDApCisJCQkJCSYmIChpX0NKQ0ZsYWcgPT0gMCkpIHsKKwkJCQkJLy91aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWVbaV9Db3VudCArIDBdPXVpX0RpZ2l0YWxUZW1wZXJhdHVyZTsKKwkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlCisJCQkJCQlbc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJaV9Db3VudCArIDBdID0KKwkJCQkJCXVpX0RpZ2l0YWxUZW1wZXJhdHVyZTsKKworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qU3RhcnQgdGhlIGNvbnZlcnNpb24gb2YgdGhlIENKQyAqLworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCWlfQVBDSTMyMDBfUmVhZENKQ1ZhbHVlKGRldiwKKwkJCQkJCSZ1aV9EdW1teVZhbHVlKTsKKworCQkJCX0JLy9pZiAoKGlfQ2FsaWJyYXRpb25GbGFnID09IDApICYmIChpX0NKQ0ZsYWcgPT0gMCkpCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIENKQyB2YWx1ZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChpX0NKQ0ZsYWcgPT0gMSkKKwkJCQkJJiYgKGlfQ2FsaWJyYXRpb25GbGFnID09IDApKSB7CisJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyAzXT11aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfQ291bnQgKyAzXSA9CisJCQkJCQl1aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKlN0YXJ0IHRoZSBjb252ZXJzaW9uIG9mIHRoZSBjYWxpYnJhdGlvbiBvZmZzZXQgdmFsdWUgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbk9mZnNldFZhbHVlCisJCQkJCQkoZGV2LCAmdWlfRHVtbXlWYWx1ZSk7CisJCQkJfQkvLyBpZiAoKGlfQ0pDRmxhZyA9PSAxKSAmJiAoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMCkpCisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIGNhbGlicmF0aW9uIG9mZnNldCB2YWx1ZSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAxKQorCQkJCQkmJiAoaV9DSkNGbGFnID09IDApKSB7CisJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyAxXT11aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfQ291bnQgKyAxXSA9CisJCQkJCQl1aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLypTdGFydCB0aGUgY29udmVyc2lvbiBvZiB0aGUgY2FsaWJyYXRpb24gZ2FpbiB2YWx1ZSAqLworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQlpX0FQQ0kzMjAwX1JlYWRDYWxpYnJhdGlvbkdhaW5WYWx1ZShkZXYsCisJCQkJCQkmdWlfRHVtbXlWYWx1ZSk7CisKKwkJCQl9CS8vaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAxKSAmJiAoaV9DSkNGbGFnID09IDApKQorCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIGNhbGlicmF0aW9uIGdhaW4gdmFsdWUgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAyKQorCQkJCQkmJiAoaV9DSkNGbGFnID09IDApKSB7CisJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyAyXT11aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfQ291bnQgKyAyXSA9CisJCQkJCQl1aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisKKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLypUZXN0IGlmIHRoZSBDYWxpYnJhdGlvbiBjaGFubmVsIG11c3QgYmUgcmVhZCBmb3IgdGhlIENKQyAqLworCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCS8qVGVzdCBpZiB0aGUgcG9sYXJpdHkgaXMgdGhlIHNhbWUgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLy9pZihpX0NKQ1BvbGFyaXR5IT1pX0FERElEQVRBUG9sYXJpdHkpCisJCQkJCWlmIChzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NKQ1BvbGFyaXR5ICE9CisJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0FERElEQVRBUG9sYXJpdHkpIHsKKwkJCQkJCWlfQ29udmVydENKQ0NhbGlicmF0aW9uID0gMTsKKwkJCQkJfQkvL2lmKGlfQ0pDUG9sYXJpdHkhPWlfQURESURBVEFQb2xhcml0eSkKKwkJCQkJZWxzZSB7CisJCQkJCQkvL2lmKGlfQ0pDR2Fpbj09aV9BRERJREFUQUdhaW4pCisJCQkJCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJCWlfQ0pDR2FpbiA9PQorCQkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCQltaW5vcl0uCisJCQkJCQkJaV9BRERJREFUQUdhaW4pIHsKKwkJCQkJCQlpX0NvbnZlcnRDSkNDYWxpYnJhdGlvbgorCQkJCQkJCQk9IDA7CisJCQkJCQl9CS8vaWYoaV9DSkNHYWluPT1pX0FERElEQVRBR2FpbikKKwkJCQkJCWVsc2UgeworCQkJCQkJCWlfQ29udmVydENKQ0NhbGlicmF0aW9uCisJCQkJCQkJCT0gMTsKKwkJCQkJCX0JLy9lbHNlaWYoaV9DSkNHYWluPT1pX0FERElEQVRBR2FpbikKKwkJCQkJfQkvL2Vsc2VpZihpX0NKQ1BvbGFyaXR5IT1pX0FERElEQVRBUG9sYXJpdHkpCisJCQkJCWlmIChpX0NvbnZlcnRDSkNDYWxpYnJhdGlvbiA9PSAxKSB7CisJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJLypTdGFydCB0aGUgY29udmVyc2lvbiBvZiB0aGUgY2FsaWJyYXRpb24gZ2FpbiB2YWx1ZSBmb3IgdGhlIENKQyAqLworCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCWlfQVBDSTMyMDBfUmVhZENKQ0NhbE9mZnNldChkZXYsCisJCQkJCQkJJnVpX0R1bW15VmFsdWUpOworCisJCQkJCX0JLy9pZihpX0NvbnZlcnRDSkNDYWxpYnJhdGlvbj09MSkKKwkJCQkJZWxzZSB7CisJCQkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgNF09MDsKKwkJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyA1XT0wOworCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQkJbWlub3JdLmlfQ291bnQgKworCQkJCQkJCTRdID0gMDsKKwkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCQlbc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJCQkJCW1pbm9yXS5pX0NvdW50ICsKKwkJCQkJCQk1XSA9IDA7CisJCQkJCX0JLy9lbHNlaWYoaV9Db252ZXJ0Q0pDQ2FsaWJyYXRpb249PTEpCisJCQkJfQkvL2Vsc2UgaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAyKSAmJiAoaV9DSkNGbGFnID09IDApKQorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLypUZXN0IGlmIHRoZSB2YWx1ZSByZWFkIGlzIHRoZSBjYWxpYnJhdGlvbiBvZmZzZXQgdmFsdWUgZm9yIHRoZSBDSkMgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMSkKKwkJCQkJJiYgKGlfQ0pDRmxhZyA9PSAxKSkgeworCQkJCQkvL3VpX0ludGVycnVwdENoYW5uZWxWYWx1ZVtpX0NvdW50ICsgNF09dWlfRGlnaXRhbFRlbXBlcmF0dXJlOworCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQl1aV9JbnRlcnJ1cHRDaGFubmVsVmFsdWUKKwkJCQkJCVtzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQlpX0NvdW50ICsgNF0gPQorCQkJCQkJdWlfRGlnaXRhbFRlbXBlcmF0dXJlOworCisJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qU3RhcnQgdGhlIGNvbnZlcnNpb24gb2YgdGhlIGNhbGlicmF0aW9uIGdhaW4gdmFsdWUgZm9yIHRoZSBDSkMgKi8KKwkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJaV9BUENJMzIwMF9SZWFkQ0pDQ2FsR2FpbihkZXYsCisJCQkJCQkmdWlfRHVtbXlWYWx1ZSk7CisKKwkJCQl9CS8vaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAxKSAmJiAoaV9DSkNGbGFnID09IDEpKQorCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKlRlc3QgaWYgdGhlIHZhbHVlIHJlYWQgaXMgdGhlIGNhbGlicmF0aW9uIGdhaW4gdmFsdWUgZm9yIHRoZSBDSkMgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKChpX0NhbGlicmF0aW9uRmxhZyA9PSAyKQorCQkJCQkmJiAoaV9DSkNGbGFnID09IDEpKSB7CisJCQkJCS8vdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlW2lfQ291bnQgKyA1XT11aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCXVpX0ludGVycnVwdENoYW5uZWxWYWx1ZQorCQkJCQkJW3NfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCWlfQ291bnQgKyA1XSA9CisJCQkJCQl1aV9EaWdpdGFsVGVtcGVyYXR1cmU7CisKKwkJCQkJLy9pZihpX1NjYW5UeXBlPT0xKQorCQkJCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJaV9TY2FuVHlwZSA9PSAxKSB7CisKKwkJCQkJCS8vaV9JbnRlcnJ1cHRGbGFnPTA7CisJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCQkJaV9JbnRlcnJ1cHRGbGFnID0gMDsKKwkJCQkJCS8vaV9Db3VudD1pX0NvdW50ICsgNjsKKwkJCQkJCS8vQmVnaW4gSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQkJCQkJLy9zX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnQ9c19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0NvdW50ICsgNjsKKwkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQlpX0NvdW50ID0KKwkJCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQltaW5vcl0uaV9Db3VudCArIDk7CisJCQkJCQkvL0VuZCBKSyAyMi4xMC4yMDA0OiBBUENJLTMyMDAgLyBBUENJLTMzMDAgUmVhZGluZyBvZiBFRVBST00gdmFsdWVzCisJCQkJCX0JLy9pZihpX1NjYW5UeXBlPT0xKQorCQkJCQllbHNlIHsKKwkJCQkJCS8vaV9Db3VudD0wOworCQkJCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJCWlfQ291bnQgPSAwOworCQkJCQl9CS8vZWxzZWlmKGlfU2NhblR5cGU9PTEpCisKKwkJCQkJLy9pZihpX1NjYW5UeXBlIT0xKQorCQkJCQlpZiAoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQkJaV9TY2FuVHlwZSAhPSAxKSB7CisJCQkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisJCQkJCX0JLy9pZihpX1NjYW5UeXBlIT0xKQorCQkJCQllbHNlIHsKKwkJCQkJCS8vaWYoaV9DaGFubmVsQ291bnQ9PWlfU3VtKQorCQkJCQkJaWYgKHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS4KKwkJCQkJCQlpX0NoYW5uZWxDb3VudCA9PQorCQkJCQkJCXNfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCQltaW5vcl0uaV9TdW0pIHsKKwkJCQkJCQlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOwkvLyBzZW5kIHNpZ25hbCB0byB0aGUgc2FtcGxlCisKKwkJCQkJCX0JLy9pZihpX0NoYW5uZWxDb3VudD09aV9TdW0pCisJCQkJCX0JLy9lbHNlIGlmKGlfU2NhblR5cGUhPTEpCisJCQkJfQkvL2lmICgoaV9DYWxpYnJhdGlvbkZsYWcgPT0gMikgJiYgKGlfQ0pDRmxhZyA9PSAxKSkKKworCQkJfQkvL2Vsc2UgaWYgKCh1aV9TdGF0dXNSZWdpc3RlciAmIDB4MikgPT0gMHgyKQorCQkJYnJlYWs7CisJCX0JCS8vc3dpdGNoKGlfQURESURBVEFUeXBlKQorCQlicmVhazsKKwljYXNlIDI6CisJY2FzZSAzOgorCQlpX0FQQ0kzMjAwX0ludGVycnVwdEhhbmRsZUVvcyhkZXYpOworCQlicmVhazsKKwl9CQkJLy9zd2l0Y2goaV9TY2FuVHlwZSkKKwlyZXR1cm47Cit9CisKKy8qCisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzIwMF9JbnRlcnJ1cHRIYW5kbGVFb3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJIHwKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUYXNrICAgICAgICAgICAgICA6IC4gICAgICAgICAgICAgICAgICAgfAorICB8ICAgICAgICAgICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGFjcXVpcmVkIGRhdGEoZnJvbSBGSUZPKSAgICAgIHwKKyAgfAkJCQl0byBDb21lZGkgYnVmZmVyLgkJIAkJCQkJCQkgfAorICB8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCQkgfAorICB8ICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCQkJCQkJCQkgfAorICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBSZXR1cm4gVmFsdWUgICAgICA6IDAgICAgICAgICAgICAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTMyMDBfSW50ZXJydXB0SGFuZGxlRW9zKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCVVJTlQgdWlfU3RhdHVzUmVnaXN0ZXIgPSAwOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCS8vQkVHSU4gSksgMTguMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCS8vY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCS8vVUlOVCAqZGF0YTsKKwkvL2RhdGE9YXN5bmMtPmRhdGErYXN5bmMtPmJ1Zl9pbnRfcHRyOy8vbmV3IHNhbXBsZXMgYWRkZWQgZnJvbSBoZXJlIG9ud2FyZHMKKwlpbnQgbiA9IDAsIGkgPSAwOworCS8vRU5EIEpLIDE4LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vdWlfU3RhdHVzUmVnaXN0ZXIgPSBpbmwoZGV2cHJpdi0+aW9iYXNlK2lfT2Zmc2V0ICsgMTYpOworCXVpX1N0YXR1c1JlZ2lzdGVyID0KKwkJaW5sKGRldnByaXYtPmlvYmFzZSArIHNfQm9hcmRJbmZvc1tkZXYtPm1pbm9yXS5pX09mZnNldCArIDE2KTsKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKlRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKCh1aV9TdGF0dXNSZWdpc3RlciAmIDB4MikgPT0gMHgyKSB7CisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypSZWFkIHRoZSBjaGFubmVsIG51bWJlciAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8vdWlfQ2hhbm5lbE51bWJlciA9IGlubChkZXZwcml2LT5pb2Jhc2UraV9PZmZzZXQgKyAyNCk7CisJCS8vQkVHSU4gSksgMTguMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCQkvL1RoaXMgdmFsdWUgaXMgbm90IHVzZWQKKwkJLy91aV9DaGFubmVsTnVtYmVyID0gaW5sKGRldnByaXYtPmlvYmFzZStzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjQpOworCQlzLT5hc3luYy0+ZXZlbnRzID0gMDsKKwkJLy9FTkQgSksgMTguMTAuMjAwNDogQVBDSS0zMjAwIERyaXZlciB1cGRhdGUgMC43LjU3IC0+IDAuNy42OAorCisgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLypSZWFkIHRoZSBkaWdpdGFsIEFuYWxvZyBJbnB1dCB2YWx1ZSAqLworICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJLy9kYXRhW2lfQ291bnRdID0gaW5sKGRldnByaXYtPmlvYmFzZStpX09mZnNldCArIDI4KTsKKwkJLy9CZWdpbiBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJCS8vZGF0YVtzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfQ291bnRdID0gaW5sKGRldnByaXYtPmlvYmFzZStzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjgpOworCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0udWlfU2NhblZhbHVlQXJyYXlbc19Cb2FyZEluZm9zW2Rldi0+CisJCQkJbWlub3JdLmlfQ291bnRdID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfT2Zmc2V0ICsgMjgpOworCQkvL0VuZCBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisKKwkJLy9pZigoaV9Db3VudCA9PSAoaV9MYXN0Q2hhbm5lbC1pX0ZpcnN0Q2hhbm5lbCszKSkpCisJCWlmICgoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQgPT0KKwkJCQkoc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfTGFzdENoYW5uZWwgLQorCQkJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCWlfRmlyc3RDaGFubmVsICsgMykpKSB7CisKKwkJCS8vQmVnaW4gSksgMjIuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworCQkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQrKzsKKworCQkJZm9yIChpID0gc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfRmlyc3RDaGFubmVsOworCQkJCWkgPD0gc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfTGFzdENoYW5uZWw7CisJCQkJaSsrKSB7CisJCQkJaV9BUENJMzIwMF9HZXRDaGFubmVsQ2FsaWJyYXRpb25WYWx1ZShkZXYsIGksCisJCQkJCSZzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCXVpX1NjYW5WYWx1ZUFycmF5W3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCW1pbm9yXS5pX0NvdW50ICsgKChpIC0KKwkJCQkJCQkJc19Cb2FyZEluZm9zCisJCQkJCQkJCVtkZXYtPm1pbm9yXS4KKwkJCQkJCQkJaV9GaXJzdENoYW5uZWwpCisJCQkJCQkJKiAzKV0sCisJCQkJCSZzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uCisJCQkJCXVpX1NjYW5WYWx1ZUFycmF5W3NfQm9hcmRJbmZvc1tkZXYtPgorCQkJCQkJCW1pbm9yXS5pX0NvdW50ICsgKChpIC0KKwkJCQkJCQkJc19Cb2FyZEluZm9zCisJCQkJCQkJCVtkZXYtPm1pbm9yXS4KKwkJCQkJCQkJaV9GaXJzdENoYW5uZWwpCisJCQkJCQkJKiAzKSArIDFdLAorCQkJCQkmc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCQl1aV9TY2FuVmFsdWVBcnJheVtzX0JvYXJkSW5mb3NbZGV2LT4KKwkJCQkJCQltaW5vcl0uaV9Db3VudCArICgoaSAtCisJCQkJCQkJCXNfQm9hcmRJbmZvcworCQkJCQkJCQlbZGV2LT5taW5vcl0uCisJCQkJCQkJCWlfRmlyc3RDaGFubmVsKQorCQkJCQkJCSogMykgKyAyXSk7CisJCQl9CisKKwkJCS8vRW5kIEpLIDIyLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKworCQkJLy9pX0NvdW50PS0xOworCisJCQlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9Db3VudCA9IC0xOworCisJCQkvL2FzeW5jLT5idWZfaW50X2NvdW50Kz0oaV9MYXN0Q2hhbm5lbC1pX0ZpcnN0Q2hhbm5lbCs0KSpzaXplb2YoVUlOVCk7CisJCQkvL0JlZ2luIEpLIDE4LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKwkJCS8vYXN5bmMtPmJ1Zl9pbnRfY291bnQrPShzX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfTGFzdENoYW5uZWwtc19Cb2FyZEluZm9zIFtkZXYtPm1pbm9yXS5pX0ZpcnN0Q2hhbm5lbCs0KSpzaXplb2YoVUlOVCk7CisJCQkvL0VuZCBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJCQkvL2FzeW5jLT5idWZfaW50X3B0cis9KGlfTGFzdENoYW5uZWwtaV9GaXJzdENoYW5uZWwrNCkqc2l6ZW9mKFVJTlQpOworCQkJLy9CZWdpbiBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJCQkvL2FzeW5jLT5idWZfaW50X3B0cis9KHNfQm9hcmRJbmZvcyBbZGV2LT5taW5vcl0uaV9MYXN0Q2hhbm5lbC1zX0JvYXJkSW5mb3MgW2Rldi0+bWlub3JdLmlfRmlyc3RDaGFubmVsKzQpKnNpemVvZihVSU5UKTsKKwkJCS8vY29tZWRpX2VvcyhkZXYscyk7CisKKwkJCS8vIFNldCB0aGUgZXZlbnQgdHlwZSAoQ29tZWRpIEJ1ZmZlciBFbmQgT2YgU2NhbikKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPUzsKKworCQkJLy8gVGVzdCBpZiBlbm91Z3RoIG1lbW9yeSBpcyBhdmFpbGFibGUgYW5kIGFsbG9jYXRlIGl0IGZvciA3IHZhbHVlcworCQkJLy9uID0gY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzLT5hc3luYywgNypzaXplb2YodW5zaWduZWQgaW50KSk7CisJCQluID0gY29tZWRpX2J1Zl93cml0ZV9hbGxvYyhzLT5hc3luYywKKwkJCQkoNyArIDEyKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKworCQkJLy8gSWYgbm90IGVub3VndGggbWVtb3J5IGF2YWlsYWJsZSwgZXZlbnQgaXMgc2V0IHRvIENvbWVkaSBCdWZmZXIgRXJycm9yCisJCQlpZiAobiA+ICgoNyArIDEyKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgeworCQkJCXByaW50aygiXG5jb21lZGlfYnVmX3dyaXRlX2FsbG9jIG4gPSAlaSIsIG4pOworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCQkJfQorCQkJLy8gV3JpdGUgYWxsIDcgc2NhbiB2YWx1ZXMgaW4gdGhlIGNvbWVkaSBidWZmZXIKKwkJCWNvbWVkaV9idWZfbWVtY3B5X3RvKHMtPmFzeW5jLCAwLAorCQkJCSh1bnNpZ25lZCBpbnQgKikgc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLgorCQkJCXVpX1NjYW5WYWx1ZUFycmF5LCAoNyArIDEyKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKworCQkJLy8gVXBkYXRlIGNvbWVkaSBidWZmZXIgcGludGVycyBpbmRleGVzCisJCQljb21lZGlfYnVmX3dyaXRlX2ZyZWUocy0+YXN5bmMsCisJCQkJKDcgKyAxMikgKiBzaXplb2YodW5zaWduZWQgaW50KSk7CisKKwkJCS8vIFNlbmQgZXZlbnRzCisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCS8vRW5kIEpLIDE4LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKworCQkJLy9CRUdJTiBKSyAxOC4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisJCQkvLworCQkJLy9pZiAocy0+YXN5bmMtPmJ1Zl9pbnRfcHRyPj1zLT5hc3luYy0+ZGF0YV9sZW4pIC8vICBmb3IgYnVmZmVyIHJvb2wgb3ZlcgorCQkJLy8gIHsKKwkJCS8vICAgIC8qIGJ1ZmZlciByb2xsb3ZlciAqLworCQkJLy8gICAgcy0+YXN5bmMtPmJ1Zl9pbnRfcHRyPTA7CisJCQkvLyAgICBjb21lZGlfZW9idWYoZGV2LHMpOworCQkJLy8gIH0KKwkJCS8vRW5kIEpLIDE4LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKwkJfQorCQkvL2lfQ291bnQrKzsKKwkJc19Cb2FyZEluZm9zW2Rldi0+bWlub3JdLmlfQ291bnQrKzsKKwl9CisJLy9pX0ludGVycnVwdEZsYWc9MDsKKwlzX0JvYXJkSW5mb3NbZGV2LT5taW5vcl0uaV9JbnRlcnJ1cHRGbGFnID0gMDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmY1N2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzIwMC5oCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgIEFEREktREFUQSBHbWJIIGZvciB0aGUgc291cmNlIGNvZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICoJQURESS1EQVRBIEdtYkgKKyAqCURpZXNlbHN0cmFzc2UgMworICoJRC03NzgzMyBPdHRlcnN3ZWllcgorICoJVGVsOiArMTkoMCk3MjIzLzk0OTMtMAorICoJRmF4OiArNDkoMCk3MjIzLzk0OTMtOTIKKyAqCWh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICoJaW5mb0BhZGRpLWRhdGEuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvLyBDYXJkIFNwZWNpZmljIGluZm9ybWF0aW9uCisjZGVmaW5lIEFQQ0kzMjAwX0JPQVJEX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAgMHgxNUI4CisvLyNkZWZpbmUgQVBDSTMyMDBfQUREUkVTU19SQU5HRSAgICAgICAgICAgICAgICAgICAyNjQKKworaW50IE1PRFVMRV9OTzsKK3N0cnVjdCB7CisJSU5UIGlfR2FpbjsKKwlJTlQgaV9Qb2xhcml0eTsKKwlJTlQgaV9PZmZzZXRSYW5nZTsKKwlJTlQgaV9Db3VwbGluZzsKKwlJTlQgaV9TaW5nbGVEaWZmOworCUlOVCBpX0F1dG9DYWxpYnJhdGlvbjsKKwlVSU5UIHVpX1JlbG9hZFZhbHVlOworCVVJTlQgdWlfVGltZVVuaXRSZWxvYWRWYWw7CisJSU5UIGlfSW50ZXJydXB0OworCUlOVCBpX01vZHVsZVNlbGVjdGlvbjsKK30gQ29uZmlnX1BhcmFtZXRlcnNfTW9kdWxlMSwgQ29uZmlnX1BhcmFtZXRlcnNfTW9kdWxlMiwKKyAgICBDb25maWdfUGFyYW1ldGVyc19Nb2R1bGUzLCBDb25maWdfUGFyYW1ldGVyc19Nb2R1bGU0OworCisvL0FOQUxPRyBJTlBVVCBSQU5HRQorc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kzMjAwX2FpID0geyA4LCB7CisJCQkJCQkgICAgIEJJUF9SQU5HRSgxMCksCisJCQkJCQkgICAgIEJJUF9SQU5HRSg1KSwKKwkJCQkJCSAgICAgQklQX1JBTkdFKDIpLAorCQkJCQkJICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgIFVOSV9SQU5HRSgxMCksCisJCQkJCQkgICAgIFVOSV9SQU5HRSg1KSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDIpLAorCQkJCQkJICAgICBVTklfUkFOR0UoMSkKKwkJCQkJCSAgICAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kzMzAwX2FpID0geyA0LCB7CisJCQkJCQkgICAgIFVOSV9SQU5HRSgxMCksCisJCQkJCQkgICAgIFVOSV9SQU5HRSg1KSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDIpLAorCQkJCQkJICAgICBVTklfUkFOR0UoMSkKKwkJCQkJCSAgICAgfQorfTsKKworLy9BbmFsb2cgSW5wdXQgcmVsYXRlZCBEZWZpbmVzCisjZGVmaW5lIEFQQ0kzMjAwX0FJX09GRlNFVF9HQUlOICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMzIwMF9BSV9TQ19URVNUICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVBDSTMyMDBfQUlfSVJRICAgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEFQQ0kzMjAwX0FJX0FVVE9DQUwgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBDSTMyMDBfUkVMT0FEX0NPTlZfVElNRV9WQUwgICAgICAgICAgICAzMgorI2RlZmluZSBBUENJMzIwMF9DT05WX1RJTUVfVElNRV9CQVNFICAgICAgICAgICAgIDM2CisjZGVmaW5lIEFQQ0kzMjAwX1JFTE9BRF9ERUxBWV9USU1FX1ZBTCAgICAgICAgICAgNDAKKyNkZWZpbmUgQVBDSTMyMDBfREVMQVlfVElNRV9USU1FX0JBU0UgICAgICAgICAgICA0NAorI2RlZmluZSBBUENJMzIwMF9BSV9NT0RVTEUxICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBDSTMyMDBfQUlfTU9EVUxFMiAgICAgICAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBBUENJMzIwMF9BSV9NT0RVTEUzICAgICAgICAgICAgICAgICAgICAgIDEyOAorI2RlZmluZSBBUENJMzIwMF9BSV9NT0RVTEU0ICAgICAgICAgICAgICAgICAgICAgIDE5MgorI2RlZmluZSBUUlVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRkFMU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kzMjAwX0FJX0VPU0lSUSAgICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVBDSTMyMDBfQUlfRU9TICAgICAgICAgICAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBBUENJMzIwMF9BSV9DSEFOX0lEICAgICAgICAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIEFQQ0kzMjAwX0FJX0NIQU5fVkFMICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQU5BTE9HX0lOUFVUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRFTVBFUkFUVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBSRVNJU1RBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBFTkFCTEVfRVhUX1RSSUcgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRU5BQkxFX0VYVF9HQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEVOQUJMRV9FWFRfVFJJR19HQVRFICAgICAgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIEFQQ0kzMjAwX01BWFZPTFQgICAgICAgICAgICAgICAgICAgICAgICAgMi41CisjZGVmaW5lIEFERElEQVRBX0dSRUFURVJfVEhBTl9URVNUICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRERJREFUQV9MRVNTX1RIQU5fVEVTVCAgICAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBBRERJREFUQV9VTklQT0xBUiAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQURESURBVEFfQklQT0xBUiAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vQkVHSU4gSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcworI2RlZmluZSBNQVhfTU9EVUxFCQkJCTQKKy8vRU5EIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwordHlwZWRlZiBzdHJ1Y3QgeworCVVMT05HIHVsX051bWJlck9mVmFsdWU7CisJVUxPTkcgKnB1bF9SZXNpc3RhbmNlVmFsdWU7CisJVUxPTkcgKnB1bF9UZW1wZXJhdHVyZVZhbHVlOworfSBzdHJfQURESURBVEFfUlREU3RydWN0LCAqcHN0cl9BRERJREFUQV9SVERTdHJ1Y3Q7CisKKy8vQkVHSU4gSksgMjEuMTAuMjAwNDogQVBDSS0zMjAwIC8gQVBDSS0zMzAwIFJlYWRpbmcgb2YgRUVQUk9NIHZhbHVlcwordHlwZWRlZiBzdHJ1Y3QgeworCS8vIEJlZ2luIEpLIDA1LzA4LzIwMDMgY2hhbmdlIGZvciBMaW51eAorCXVuc2lnbmVkIGxvbmcgdWxfQ3VycmVudFNvdXJjZUNKQzsKKwl1bnNpZ25lZCBsb25nIHVsX0N1cnJlbnRTb3VyY2VbNV07CisJLy8gRW5kIEpLIDA1LzA4LzIwMDMgY2hhbmdlIGZvciBMaW51eAorCisJLy8gQmVnaW4gQ0cgMTUvMDIvMDIgUmV2IDEuMCAtPiBSZXYgMS4xIDogQWRkIEhlYWRlciBUeXBlIDEKKwl1bnNpZ25lZCBsb25nIHVsX0dhaW5GYWN0b3JbOF07CS8vIEdhaW4gRmFjdG9yCisJdW5zaWduZWQgaW50IHdfR2FpblZhbHVlWzEwXTsKKwkvLyBFbmQgQ0cgMTUvMDIvMDIgUmV2IDEuMCAtPiBSZXYgMS4xIDogQWRkIEhlYWRlciBUeXBlIDEKK30gc3RyX01vZHVsZTsKKy8vRU5EIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKworLy9CRUdJTiBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcwordHlwZWRlZiBzdHJ1Y3QgeworCUlOVCBpX0NKQ0F2YWlsYWJsZTsKKwlJTlQgaV9DSkNQb2xhcml0eTsKKwlJTlQgaV9DSkNHYWluOworCUlOVCBpX0ludGVycnVwdEZsYWc7CisJSU5UIGlfQURESURBVEFQb2xhcml0eTsKKwlJTlQgaV9BRERJREFUQUdhaW47CisJSU5UIGlfQXV0b0NhbGlicmF0aW9uOworCUlOVCBpX0FERElEQVRBQ29udmVyc2lvblRpbWU7CisJSU5UIGlfQURESURBVEFDb252ZXJzaW9uVGltZVVuaXQ7CisJSU5UIGlfQURESURBVEFUeXBlOworCUlOVCBpX0NoYW5uZWxObzsKKwlJTlQgaV9DaGFubmVsQ291bnQ7CisJSU5UIGlfU2NhblR5cGU7CisJSU5UIGlfRmlyc3RDaGFubmVsOworCUlOVCBpX0xhc3RDaGFubmVsOworCUlOVCBpX1N1bTsKKwlJTlQgaV9PZmZzZXQ7CisJVUlOVCB1aV9DaGFubmVsX251bTsKKwlJTlQgaV9Db3VudDsKKwlJTlQgaV9Jbml0aWFsaXNlZDsKKwkvL1VJTlQgdWlfSW50ZXJydXB0Q2hhbm5lbFZhbHVlWzk2XTsgLy9CdWZmZXIKKwlVSU5UIHVpX0ludGVycnVwdENoYW5uZWxWYWx1ZVsxNDRdOwkvL0J1ZmZlcgorCUJZVEUgYl9TdHJ1Y3RJbml0aWFsaXplZDsKKwkvL0JlZ2luIEpLIDE5LjEwLjIwMDQ6IEFQQ0ktMzIwMCBEcml2ZXIgdXBkYXRlIDAuNy41NyAtPiAwLjcuNjgKKwl1bnNpZ25lZCBpbnQgdWlfU2NhblZhbHVlQXJyYXlbNyArIDEyXTsJLy8gNyBpcyB0aGUgbWF4aW1hbCBudW1iZXIgb2YgY2hhbm5lbHMKKwkvL0VuZCBKSyAxOS4xMC4yMDA0OiBBUENJLTMyMDAgRHJpdmVyIHVwZGF0ZSAwLjcuNTcgLT4gMC43LjY4CisKKwkvL0JlZ2luIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKKwlJTlQgaV9Db25uZWN0aW9uVHlwZTsKKwlJTlQgaV9OYnJPZk1vZHVsZTsKKwlzdHJfTW9kdWxlIHNfTW9kdWxlW01BWF9NT0RVTEVdOworCS8vRW5kIEpLIDIxLjEwLjIwMDQ6IEFQQ0ktMzIwMCAvIEFQQ0ktMzMwMCBSZWFkaW5nIG9mIEVFUFJPTSB2YWx1ZXMKK30gc3RyX0JvYXJkSW5mb3M7CisvL0VORCBKSyAwNi4wNy4wNDogTWFuYWdlbWVudCBvZiBzZXZyYWxzIGJvYXJkcworCisvLyBIYXJkd2FyZSBMYXllciAgZnVuY3Rpb25zIGZvciBBcGNpMzIwMAorCisvL0FJCisKK0lOVCBpX0FQQ0kzMjAwX0NvbmZpZ0FuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMzIwMF9SZWFkQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTMyMDBfSW5zbldyaXRlUmVsZWFzZUFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitJTlQgaV9BUENJMzIwMF9JbnNuQml0c19BbmFsb2dJbnB1dF9UZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kzMjAwX1N0b3BDeWNsaWNBY3F1aXNpdGlvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitJTlQgaV9BUENJMzIwMF9JbnRlcnJ1cHRIYW5kbGVFb3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitJTlQgaV9BUENJMzIwMF9Db21tYW5kVGVzdEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOworSU5UIGlfQVBDSTMyMDBfQ29tbWFuZEFuYWxvZ0lucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK0lOVCBpX0FQQ0kzMjAwX1JlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworLy9JbnRlcnJ1cHQKK3ZvaWQgdl9BUENJMzIwMF9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCk7CitpbnQgaV9BUENJMzIwMF9JbnRlcnJ1cHRIYW5kbGVFb3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisvL1Jlc2V0IGZ1bmN0aW9ucworSU5UIGlfQVBDSTMyMDBfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisKK2ludCBpX0FQQ0kzMjAwX1JlYWRDSkNDYWxPZmZzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK2ludCBpX0FQQ0kzMjAwX1JlYWRDSkNWYWx1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uR2FpblZhbHVlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIFVJTlQgKmRhdGEpOworaW50IGlfQVBDSTMyMDBfUmVhZENhbGlicmF0aW9uT2Zmc2V0VmFsdWUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgVUlOVCAqZGF0YSk7CitpbnQgaV9BUENJMzIwMF9SZWFkMUFuYWxvZ0lucHV0Q2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTMyMDBfUmVhZENKQ0NhbEdhaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTM1MDEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTM1MDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDM5MWE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzUwMS5jCkBAIC0wLDAgKzEsNzQyIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyouCisKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhw59lIDMgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllciAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgVGVsIDogKzQ5ICgwKSA3MjIzLzk0OTMtMCAgICAgfCBlbWFpbCAgICA6IGluZm9AYWRkaS1kYXRhLmNvbSAgICAgICAgIHwKKyAgfCBGYXggOiArNDkgKDApIDcyMjMvOTQ5My05MiAgICB8IEludGVybmV0IDogaHR0cDovL3d3dy5hZGRpLWRhdGEuY29tICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCAgICAgOiBBUENJLTM1MDEgICAgICAgfCBDb21waWxlciAgIDogR0NDICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCBNb2R1bGUgbmFtZSA6IGh3ZHJ2X2FwY2kzNTAxLmN8IFZlcnNpb24gICAgOiAyLjk2ICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgUHJvamVjdCBtYW5hZ2VyOiBFcmljIFN0b2x6ICAgfCBEYXRlICAgICAgIDogIDAyLzEyLzIwMDIgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IERlc2NyaXB0aW9uIDogICBIYXJkd2FyZSBMYXllciBBY2NlcyBGb3IgQVBDSS0zNTAxICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICBEYXRlICAgfCAgIEF1dGhvciAgfCAgICAgICAgICBEZXNjcmlwdGlvbiBvZiB1cGRhdGVzICAgICAgICAgICAgICAgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgfCAgICAgICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluY2x1ZGVkIGZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKyNpbmNsdWRlICJod2Rydl9hcGNpMzUwMS5oIgorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTM1MDFfUmVhZERpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWQgIHZhbHVlICBvZiB0aGUgc2VsZWN0ZWQgY2hhbm5lbCBvciBwb3J0ICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UIHVpX05vT2ZDaGFubmVscyAgICA6IE5vIE9mIENoYW5uZWxzIFRvIHJlYWQgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICAgICAgIDogRGF0YSBQb2ludGVyIHRvIHJlYWQgc3RhdHVzICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitJTlQgaV9BUENJMzUwMV9SZWFkRGlnaXRhbElucHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbDsKKwl1aV9Ob09mQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVpX1RlbXAgPSBkYXRhWzBdOworCSpkYXRhID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0RJR0lUQUxfSVApOworCWlmICh1aV9UZW1wID09IDApIHsKKwkJKmRhdGEgPSAoKmRhdGEgPj4gdWlfTm9PZkNoYW5uZWwpICYgMHgxOworCX0JCQkvL2lmICAodWlfVGVtcD09MCkKKwllbHNlIHsKKwkJaWYgKHVpX1RlbXAgPT0gMSkgeworCisJCQkqZGF0YSA9ICpkYXRhICYgMHgzOworCQl9CQkvL2lmICAodWlfVGVtcD09MSkKKwkJZWxzZSB7CisJCQlwcmludGsoIlxuU3BlY2lmaWVkIGNoYW5uZWwgbm90IHN1cHBvcnRlZCBcbiIpOworCQl9CQkvL2Vsc2VpZiAgKHVpX1RlbXA9PTEpCisJfQkJCS8vZWxzZWlmICAodWlfVGVtcD09MCkKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzNTAxX0NvbmZpZ0RpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogQ29uZmlndXJlcyBUaGUgRGlnaXRhbCBPdXRwdXQgU3ViZGV2aWNlLiAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzFdICAgICAgICAgICAgOiAxIEVuYWJsZSAgVkNDICBJbnRlcnJ1cHQgIHwKK3wJCQkJCQkJCQkJICAgMCBEaXNhYmxlIFZDQyAgSW50ZXJydXB0ICB8Cit8CQkJCQkgIGRhdGFbMl0gICAgICAgICAgICA6IDEgRW5hYmxlICBDQyAgSW50ZXJydXB0ICAgfAorfAkJCQkJCQkJCQkgICAwIERpc2FibGUgQ0MgIEludGVycnVwdCAgIHwKK3wJCQkJCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOgktLQkJCQkJCQkJCQkJCQkgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogVFJVRSAgOiBObyBlcnJvciBvY2N1ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCSAgICAgICAgICAgIDogRkFMU0UgOiBFcnJvciBvY2N1ci4gUmV0dXJuIHRoZSBlcnJvciAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTM1MDFfQ29uZmlnRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlpZiAoKGRhdGFbMF0gIT0gMCkgJiYgKGRhdGFbMF0gIT0gMSkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJOb3QgYSB2YWxpZCBEYXRhICEhISAsRGF0YSBzaG91bGQgYmUgMSBvciAwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQkJCS8vaWYgICggKGRhdGFbMF0hPTApICYmIChkYXRhWzBdIT0xKSApCisJaWYgKGRhdGFbMF0pIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9FTkFCTEU7CisJfQkJCS8vIGlmICAoZGF0YVswXSkKKwllbHNlIHsKKwkJZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgPSBBRERJREFUQV9ESVNBQkxFOworCX0JCQkvL2Vsc2UgaWYgIChkYXRhWzBdKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTM1MDFfV3JpdGVEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiB3cml0ZXMgVG8gdGhlIGRpZ2l0YWwgT3V0cHV0IFN1YmRldmljZSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgICAgIDogU3ViZGV2aWNlIFBvaW50ZXIgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgIDogSW5zbiBTdHJ1Y3R1cmUgUG9pbnRlciAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhICAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kzNTAxX1dyaXRlRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUlOVCB1aV9UZW1wLCB1aV9UZW1wMTsKKwlVSU5UIHVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8vIGdldCB0aGUgY2hhbm5lbAorCWlmIChkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cykgeworCQl1aV9UZW1wID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0RJR0lUQUxfT1ApOworCX0JCQkvL2lmKGRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkKKwllbHNlIHsKKwkJdWlfVGVtcCA9IDA7CisJfQkJCS8vaWYoZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMgKQorCWlmIChkYXRhWzNdID09IDApIHsKKwkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJZGF0YVswXSA9IChkYXRhWzBdIDw8IHVpX05vT2ZDaGFubmVsKSB8IHVpX1RlbXA7CisJCQlvdXRsKGRhdGFbMF0sIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0RJR0lUQUxfT1ApOworCQl9CQkvL2lmKGRhdGFbMV09PTApCisJCWVsc2UgeworCQkJaWYgKGRhdGFbMV0gPT0gMSkgeworCQkJCWRhdGFbMF0gPSAoZGF0YVswXSA8PCAoMiAqIGRhdGFbMl0pKSB8IHVpX1RlbXA7CisJCQkJb3V0bChkYXRhWzBdLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9ESUdJVEFMX09QKTsKKwkJCX0JLy8gaWYoZGF0YVsxXT09MSkKKwkJCWVsc2UgeworCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCX0JLy9lbHNlIGlmKGRhdGFbMV09PTEpCisJCX0JCS8vZWxzZWlmKGRhdGFbMV09PTApCisJfQkJCS8vaWYoZGF0YVszXT09MCkKKwllbHNlIHsKKwkJaWYgKGRhdGFbM10gPT0gMSkgeworCQkJaWYgKGRhdGFbMV0gPT0gMCkgeworCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MTsKKwkJCQl1aV9UZW1wMSA9IDE7CisJCQkJdWlfVGVtcDEgPSB1aV9UZW1wMSA8PCB1aV9Ob09mQ2hhbm5lbDsKKwkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCWRhdGFbMF0gPQorCQkJCQkoZGF0YVswXSA8PCB1aV9Ob09mQ2hhbm5lbCkgXgorCQkJCQkweGZmZmZmZmZmOworCQkJCWRhdGFbMF0gPSBkYXRhWzBdICYgdWlfVGVtcDsKKwkJCQlvdXRsKGRhdGFbMF0sCisJCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0RJR0lUQUxfT1ApOworCQkJfQkvL2lmKGRhdGFbMV09PTApCisJCQllbHNlIHsKKwkJCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkJCWRhdGFbMF0gPSB+ZGF0YVswXSAmIDB4MzsKKwkJCQkJdWlfVGVtcDEgPSAzOworCQkJCQl1aV9UZW1wMSA9IHVpX1RlbXAxIDw8IDIgKiBkYXRhWzJdOworCQkJCQl1aV9UZW1wID0gdWlfVGVtcCB8IHVpX1RlbXAxOworCQkJCQlkYXRhWzBdID0KKwkJCQkJCSgoZGF0YVswXSA8PCAoMiAqCisJCQkJCQkJCWRhdGFbMl0pKSBeCisJCQkJCQkweGZmZmZmZmZmKSAmIHVpX1RlbXA7CisJCQkJCW91dGwoZGF0YVswXSwKKwkJCQkJCWRldnByaXYtPmlvYmFzZSArCisJCQkJCQlBUENJMzUwMV9ESUdJVEFMX09QKTsKKwkJCQl9CS8vIGlmKGRhdGFbMV09PTEpCisJCQkJZWxzZSB7CisJCQkJCXByaW50aygiXG5TcGVjaWZpZWQgY2hhbm5lbCBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCQl9CS8vZWxzZSBpZihkYXRhWzFdPT0xKQorCQkJfQkvL2Vsc2VpZihkYXRhWzFdPT0wKQorCQl9CQkvL2lmKGRhdGFbM109PTEpOworCQllbHNlIHsKKwkJCXByaW50aygiXG5TcGVjaWZpZWQgZnVuY3Rpb25hbGl0eSBkb2VzIG5vdCBleGlzdFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQkJLy9pZiBlbHNlIGRhdGFbM109PTEpCisJfQkJCS8vaWYgZWxzZSBkYXRhWzNdPT0wKQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTM1MDFfUmVhZERpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkICB2YWx1ZSAgb2YgdGhlIHNlbGVjdGVkIGNoYW5uZWwgb3IgcG9ydCAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiAgICAgIDogRHJpdmVyIGhhbmRsZSAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCB1aV9Ob09mQ2hhbm5lbHMgICAgOiBObyBPZiBDaGFubmVscyBUbyByZWFkICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBVSU5UICpkYXRhICAgICAgICAgICAgICA6IERhdGEgUG9pbnRlciB0byByZWFkIHN0YXR1cyAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kzNTAxX1JlYWREaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVSU5UIHVpX1RlbXA7CisJVUlOVCB1aV9Ob09mQ2hhbm5lbDsKKworCXVpX05vT2ZDaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdWlfVGVtcCA9IGRhdGFbMF07CisJKmRhdGEgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfRElHSVRBTF9PUCk7CisJaWYgKHVpX1RlbXAgPT0gMCkgeworCQkqZGF0YSA9ICgqZGF0YSA+PiB1aV9Ob09mQ2hhbm5lbCkgJiAweDE7CisJfQkJCS8vIGlmICAodWlfVGVtcD09MCkKKwllbHNlIHsKKwkJaWYgKHVpX1RlbXAgPT0gMSkgeworCQkJKmRhdGEgPSAqZGF0YSAmIDB4MzsKKworCQl9CQkvLyBpZiAgKHVpX1RlbXA9PTEpCisJCWVsc2UgeworCQkJcHJpbnRrKCJcblNwZWNpZmllZCBjaGFubmVsIG5vdCBzdXBwb3J0ZWQgXG4iKTsKKwkJfQkJLy8gZWxzZSBpZiAodWlfVGVtcD09MSkKKwl9CQkJLy8gZWxzZSBpZiAgKHVpX1RlbXA9PTApCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBpbnQgaV9BUENJMzUwMV9Db25maWdBbmFsb2dPdXRwdXQgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCSAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IENvbmZpZ3VyZXMgVGhlIEFuYWxvZyBPdXRwdXQgU3ViZGV2aWNlICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ICAgICAgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyAgICAgOiBTdWJkZXZpY2UgUG9pbnRlciAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24gICAgICAgOiBJbnNuIFN0cnVjdHVyZSBQb2ludGVyICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEgICAgICAgICAgOiBEYXRhIFBvaW50ZXIgY29udGFpbnMgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQlkYXRhWzBdICAgICAgICAgICAgOiBWb2x0YWdlIE1vZGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA6TW9kZSAwICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTpNb2RlIDEgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kzNTAxX0NvbmZpZ0FuYWxvZ091dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJb3V0bChkYXRhWzBdLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9BTkFMT0dfT1VUUFVUICsKKwkJQVBDSTM1MDFfQU9fVk9MVF9NT0RFKTsKKworCWlmIChkYXRhWzBdKSB7CisJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IE1PREUxOworCX0gZWxzZSB7CisJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IE1PREUwOworCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzNTAxX1dyaXRlQW5hbG9nT3V0cHV0ICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogV3JpdGVzIFRvIHRoZSBTZWxlY3RlZCBBbmxvZyBPdXRwdXQgQ2hhbm5lbCAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzICAgICA6IFN1YmRldmljZSBQb2ludGVyICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiAgICAgICA6IEluc24gU3RydWN0dXJlIFBvaW50ZXIgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSAgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBhcyBiZWxvdyB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK0lOVCBpX0FQQ0kzNTAxX1dyaXRlQW5hbG9nT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlVTE9ORyB1bF9Db21tYW5kMSA9IDAsIHVsX0NoYW5uZWxfbm8sIHVsX1BvbGFyaXR5LCB1bF9EQUNfUmVhZHkgPSAwOzsKKworCXVsX0NoYW5uZWxfbm8gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWlmIChkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPT0gTU9ERTEpIHsKKwkJdWxfUG9sYXJpdHkgPSAweDgwMDAwMDAwOworCQlpZiAoKCpkYXRhIDwgMCkgfHwgKCpkYXRhID4gMTYzODQpKSB7CisJCQlwcmludGsoIlxuSW4gV3JpdGVBbmFsb2dPdXRwdXQgOjogTm90IFZhbGlkIERhdGFcbiIpOworCQl9CisKKwl9CQkJLy8gZW5kIGlmKGRldnByaXYtPmJfSW50ZXJydXB0TW9kZT09TU9ERTEpCisJZWxzZSB7CisJCXVsX1BvbGFyaXR5ID0gMDsKKwkJaWYgKCgqZGF0YSA8IDApIHx8ICgqZGF0YSA+IDgxOTIpKSB7CisJCQlwcmludGsoIlxuSW4gV3JpdGVBbmFsb2dPdXRwdXQgOjogTm90IFZhbGlkIERhdGFcbiIpOworCQl9CisKKwl9CQkJLy8gZW5kIGVsc2UKKworCWlmICgodWxfQ2hhbm5lbF9ubyA8IDApIHx8ICh1bF9DaGFubmVsX25vID4gNykpIHsKKwkJcHJpbnRrKCJcbkluIFdyaXRlQW5hbG9nT3V0cHV0IDo6IE5vdCBWYWxpZCBDaGFubmVsXG4iKTsKKwl9CQkJLy8gZW5kIGlmKCh1bF9DaGFubmVsX25vPDApfHwodWxfQ2hhbm5lbF9ubz43KSkKKworCXVsX0RBQ19SZWFkeSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9BTkFMT0dfT1VUUFVUKTsKKworCXdoaWxlICh1bF9EQUNfUmVhZHkgPT0gMCkgeworCQl1bF9EQUNfUmVhZHkgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfQU5BTE9HX09VVFBVVCk7CisJCXVsX0RBQ19SZWFkeSA9ICh1bF9EQUNfUmVhZHkgPj4gOCkgJiAxOworCX0KKworCWlmICh1bF9EQUNfUmVhZHkpIHsKKy8vIE91dHB1dCB0aGUgVmFsdWUgb24gdGhlIG91dHB1dCBjaGFubmVscy4KKwkJdWxfQ29tbWFuZDEgPQorCQkJKFVMT05HKSAoKFVMT05HKSAodWxfQ2hhbm5lbF9ubyAmIDB4RkYpIHwKKwkJCShVTE9ORykgKCgqZGF0YSA8PCAweDgpICYgMHg3RkZGRkYwMEwpIHwKKwkJCShVTE9ORykgKHVsX1BvbGFyaXR5KSk7CisJCW91dGwodWxfQ29tbWFuZDEsCisJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9BTkFMT0dfT1VUUFVUICsKKwkJCUFQQ0kzNTAxX0FPX1BST0cpOworCX0KKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTM1MDFfQ29uZmlnVGltZXJDb3VudGVyV2F0Y2hkb2cgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBDb25maWd1cmVzIFRoZSBUaW1lciAsIENvdW50ZXIgb3IgV2F0Y2hkb2cgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbMF0gICAgICAgICAgICA6IDAgQ29uZmlndXJlIEFzIFRpbWVyICAgICAgfAorfAkJCQkJCQkJCQkgICAxIENvbmZpZ3VyZSBBcyBDb3VudGVyICAgIHwKK3wJCQkJCQkJCQkJICAgMiBDb25maWd1cmUgQXMgV2F0Y2hkb2cgICB8Cit8CQkJCQkgIGRhdGFbMV0gICAgICAgICAgICA6IDEgRW5hYmxlICBJbnRlcnJ1cHQgICAgICAgfAorfAkJCQkJCQkJCQkgICAwIERpc2FibGUgSW50ZXJydXB0IAkgICAgIHwKK3wJCQkJCSAgZGF0YVsyXSAgICAgICAgICAgIDogVGltZSBVbml0ICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbM10JCQkgOiBSZWxvYWQgVmFsdWUJCQkgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCitJTlQgaV9BUENJMzUwMV9Db25maWdUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJVUxPTkcgdWxfQ29tbWFuZDEgPSAwOworCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsKKwlpZiAoZGF0YVswXSA9PSBBRERJREFUQV9XQVRDSERPRykgeworCisJCWRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID0gQURESURBVEFfV0FUQ0hET0c7CisJCS8vRGlzYWJsZSB0aGUgd2F0Y2hkb2cKKwkJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpOwkvL2Rpc2FibGUgV2EKKworCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkvL0VuYWJsZSBUSU1FUiBpbnQgJiBESVNBQkxFIEFMTCBUSEUgT1RIRVIgaW50IFNPVVJDRVMKKwkJCW91dGwoMHgwMiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl9IGVsc2UgeworCQkJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpOwkvL2Rpc2FibGUgVGltZXIgaW50ZXJydXB0CisJCX0KKworCQkvL0xvYWRpbmcgdGhlIFRpbWViYXNlIHZhbHVlCisJCW91dGwoZGF0YVsyXSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCUFQQ0kzNTAxX1RDV19USU1FQkFTRSk7CisKKwkJLy9Mb2FkaW5nIHRoZSBSZWxvYWQgdmFsdWUKKwkJb3V0bChkYXRhWzNdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJQVBDSTM1MDFfVENXX1JFTE9BRF9WQUxVRSk7CisJCS8vU2V0IHRoZSBtb2RlCisJCXVsX0NvbW1hbmQxID0gaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpIHwgMHhGRkY4MTlFMFVMOwkvL2UyLT5lMAorCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJQVBDSTM1MDFfVENXX1BST0cpOworCX0JCQkvL2VuZCBpZihkYXRhWzBdPT1BRERJREFUQV9XQVRDSERPRykKKworCWVsc2UgaWYgKGRhdGFbMF0gPT0gQURESURBVEFfVElNRVIpIHsKKwkJLy9GaXJzdCBTdG9wIFRoZSBUaW1lcgorCQl1bF9Db21tYW5kMSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl1bF9Db21tYW5kMSA9IHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRVVMOworCQlvdXRsKHVsX0NvbW1hbmQxLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArIEFQQ0kzNTAxX1RDV19QUk9HKTsJLy9TdG9wIFRoZSBUaW1lcgorCQlkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9IEFERElEQVRBX1RJTUVSOworCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCQkvL0VuYWJsZSBUSU1FUiBpbnQgJiBESVNBQkxFIEFMTCBUSEUgT1RIRVIgaW50IFNPVVJDRVMKKwkJCW91dGwoMHgwMiwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl9IGVsc2UgeworCQkJb3V0bCgweDAsIGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpOwkvL2Rpc2FibGUgVGltZXIgaW50ZXJydXB0CisJCX0KKworCQkvLyBMb2FkaW5nIFRpbWViYXNlCisJCW91dGwoZGF0YVsyXSwKKwkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCUFQQ0kzNTAxX1RDV19USU1FQkFTRSk7CisKKwkJLy9Mb2FkaW5nIHRoZSBSZWxvYWQgdmFsdWUKKwkJb3V0bChkYXRhWzNdLAorCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJQVBDSTM1MDFfVENXX1JFTE9BRF9WQUxVRSk7CisKKwkJLy8gcHJpbnRrICgiXG5UaW1lciBBZGRyZXNzIDo6ICV4XG4iLCAoZGV2cHJpdi0+aW9iYXNlK0FQQ0kzNTAxX1dBVENIRE9HKSk7CisJCXVsX0NvbW1hbmQxID0KKwkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCXVsX0NvbW1hbmQxID0KKwkJCSh1bF9Db21tYW5kMSAmIDB4RkZGNzE5RTJVTCkgfCAyVUwgPDwgMTNVTCB8IDB4MTBVTDsKKwkJb3V0bCh1bF9Db21tYW5kMSwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKyBBUENJMzUwMV9UQ1dfUFJPRyk7CS8vbW9kZSAyCisKKwl9CQkJLy9lbmQgaWYoZGF0YVswXT09QURESURBVEFfVElNRVIpCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6IGludCBpX0FQQ0kzNTAxX1N0YXJ0U3RvcFdyaXRlVGltZXJDb3VudGVyV2F0Y2hkb2cgICAgICB8Cit8CQkJICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogU3RhcnQgLyBTdG9wIFRoZSBTZWxlY3RlZCBUaW1lciAsIENvdW50ZXIgb3IgV2F0Y2hkb2cgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgOiBEcml2ZXIgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIFVJTlQgKmRhdGEgICAgICAgICA6IERhdGEgUG9pbnRlciBjb250YWlucyAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFzIGJlbG93IHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJICBkYXRhWzBdICAgICAgICAgICAgOiAwIFRpbWVyICAgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkJICAgMSBDb3VudGVyICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCSAgIDIgV2F0Y2hkb2cgICAgICAgICAgCQkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIAkJCQkgZGF0YVsxXSAgICAgICAgICAgIDogMSBTdGFydCAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkJCQkJCSAgIDAgU3RvcCAgICAgIAkJCQkgfAkJCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIFRyaWdnZXIgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzNTAxX1N0YXJ0U3RvcFdyaXRlVGltZXJDb3VudGVyV2F0Y2hkb2coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCVVMT05HIHVsX0NvbW1hbmQxID0gMDsKKwlpbnQgaV9UZW1wOworCWlmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSA9PSBBRERJREFUQV9XQVRDSERPRykgeworCisJCWlmIChkYXRhWzFdID09IDEpIHsKKwkJCXVsX0NvbW1hbmQxID0KKwkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRlVMKSB8IDB4MVVMOworCQkJLy9FbmFibGUgdGhlIFdhdGNoZG9nCisJCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCX0KKworCQllbHNlIGlmIChkYXRhWzFdID09IDApCS8vU3RvcCBUaGUgV2F0Y2hkb2cKKwkJeworCQkJLy9TdG9wIFRoZSBXYXRjaGRvZworCQkJdWxfQ29tbWFuZDEgPQorCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQkJdWxfQ29tbWFuZDEgPSB1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkVVTDsKKwkJCW91dGwoMHgwLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCX0gZWxzZSBpZiAoZGF0YVsxXSA9PSAyKSB7CisJCQl1bF9Db21tYW5kMSA9CisJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCQl1bF9Db21tYW5kMSA9ICh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkZVTCkgfCAweDIwMFVMOworCQkJb3V0bCh1bF9Db21tYW5kMSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQl9CQkvL2lmKGRhdGFbMV09PTIpCisJfQkJCS8vIGVuZCBpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGU9PUFERElEQVRBX1dBVENIRE9HKQorCisJaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1RJTUVSKSB7CisJCWlmIChkYXRhWzFdID09IDEpIHsKKworCQkJdWxfQ29tbWFuZDEgPQorCQkJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCQkJQVBDSTM1MDFfVENXX1BST0cpOworCQkJdWxfQ29tbWFuZDEgPSAodWxfQ29tbWFuZDEgJiAweEZGRkZGOUZGVUwpIHwgMHgxVUw7CisJCQkvL0VuYWJsZSB0aGUgVGltZXIKKwkJCW91dGwodWxfQ29tbWFuZDEsCisJCQkJZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJfSBlbHNlIGlmIChkYXRhWzFdID09IDApIHsKKwkJCS8vU3RvcCBUaGUgVGltZXIKKwkJCXVsX0NvbW1hbmQxID0KKwkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJCXVsX0NvbW1hbmQxID0gdWxfQ29tbWFuZDEgJiAweEZGRkZGOUZFVUw7CisJCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCX0KKworCQllbHNlIGlmIChkYXRhWzFdID09IDIpIHsKKwkJCS8vVHJpZ2dlciB0aGUgVGltZXIKKwkJCXVsX0NvbW1hbmQxID0KKwkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJCUFQQ0kzNTAxX1RDV19QUk9HKTsKKwkJCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRlVMKSB8IDB4MjAwVUw7CisJCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCQlBUENJMzUwMV9UQ1dfUFJPRyk7CisJCX0KKworCX0JCQkvLyBlbmQgaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9USU1FUikKKwlpX1RlbXAgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQlBUENJMzUwMV9UQ1dfVFJJR19TVEFUVVMpICYgMHgxOworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTM1MDFfUmVhZFRpbWVyQ291bnRlcldhdGNoZG9nICAgICAgICAgICAgICAgIHwKK3wJCQkgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIFRoZSBTZWxlY3RlZCBUaW1lciAsIENvdW50ZXIgb3IgV2F0Y2hkb2cgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA6IERyaXZlciBoYW5kbGUgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgVUlOVCAqZGF0YSAgICAgICAgIDogRGF0YSBQb2ludGVyIGNvbnRhaW5zICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYXMgYmVsb3cgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJCQkgIGRhdGFbMF0gICAgICAgICAgICA6IDAgVGltZXIgICAgICAgICAgICAgICAgICAgfAorfAkJCQkJCQkJCQkgICAxIENvdW50ZXIgICAgICAgICAgICAgICAgIHwKK3wJCQkJCQkJCQkJICAgMiBXYXRjaGRvZyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CQkJCQkgIGRhdGFbMV0gICAgICAgICAgICAgOiBUaW1lciBDb3VudGVyIFdhdGNoZG9nIE51bWJlciAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6CS0tCQkJCQkJCQkJCQkJCSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiBUUlVFICA6IE5vIGVycm9yIG9jY3VyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfAkJICAgICAgICAgICAgOiBGQUxTRSA6IEVycm9yIG9jY3VyLiBSZXR1cm4gdGhlIGVycm9yICAgICAgICAgIHwKK3wJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzNTAxX1JlYWRUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlpZiAoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgPT0gQURESURBVEFfV0FUQ0hET0cpIHsKKwkJZGF0YVswXSA9CisJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQkJQVBDSTM1MDFfVENXX1RSSUdfU1RBVFVTKSAmIDB4MTsKKwkJZGF0YVsxXSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyk7CisJfQkJCS8vIGVuZCBpZiAgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlPT1BRERJREFUQV9XQVRDSERPRykKKworCWVsc2UgaWYgKGRldnByaXYtPmJfVGltZXJTZWxlY3RNb2RlID09IEFERElEQVRBX1RJTUVSKSB7CisJCWRhdGFbMF0gPQorCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsKKwkJCUFQQ0kzNTAxX1RDV19UUklHX1NUQVRVUykgJiAweDE7CisJCWRhdGFbMV0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cpOworCX0JCQkvLyBlbmQgaWYgIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZT09QURESURBVEFfVElNRVIpCisKKwllbHNlIGlmICgoZGV2cHJpdi0+Yl9UaW1lclNlbGVjdE1vZGUgIT0gQURESURBVEFfVElNRVIpCisJCSYmIChkZXZwcml2LT5iX1RpbWVyU2VsZWN0TW9kZSAhPSBBRERJREFUQV9XQVRDSERPRykpIHsKKwkJcHJpbnRrKCJcbkluIFJlYWRUaW1lckNvdW50ZXJXYXRjaGRvZyA6OiBJbnZhbGlkIFN1YmRldmljZSBcbiIpOworCX0KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiAgIE5hbWUgICA6ICBpbnQgaV9BUENJMzUwMV9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQkJCSAgICAgfAorfAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6UmVzZXRzIHRoZSByZWdpc3RlcnMgb2YgdGhlIGNhcmQgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJMzUwMV9SZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaV9Db3VudCA9IDAsIGlfdGVtcCA9IDA7CisJVUxPTkcgdWxfQ29tbWFuZDEgPSAwLCB1bF9Qb2xhcml0eSwgdWxfREFDX1JlYWR5ID0gMDsKKwlvdXRsKDB4MCwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfRElHSVRBTF9PUCk7CisJb3V0bCgxLCBkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9BTkFMT0dfT1VUUFVUICsKKwkJQVBDSTM1MDFfQU9fVk9MVF9NT0RFKTsKKworCXVsX1BvbGFyaXR5ID0gMHg4MDAwMDAwMDsKKworCWZvciAoaV9Db3VudCA9IDA7IGlfQ291bnQgPD0gNzsgaV9Db3VudCsrKSB7CisJCXVsX0RBQ19SZWFkeSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9BTkFMT0dfT1VUUFVUKTsKKworCQl3aGlsZSAodWxfREFDX1JlYWR5ID09IDApIHsKKwkJCXVsX0RBQ19SZWFkeSA9CisJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0FOQUxPR19PVVRQVVQpOworCQkJdWxfREFDX1JlYWR5ID0gKHVsX0RBQ19SZWFkeSA+PiA4KSAmIDE7CisJCX0KKworCQlpZiAodWxfREFDX1JlYWR5KSB7CisJCQkvLyBPdXRwdXQgdGhlIFZhbHVlIG9uIHRoZSBvdXRwdXQgY2hhbm5lbHMuCisJCQl1bF9Db21tYW5kMSA9CisJCQkJKFVMT05HKSAoKFVMT05HKSAoaV9Db3VudCAmIDB4RkYpIHwKKwkJCQkoVUxPTkcpICgoaV90ZW1wIDw8IDB4OCkgJiAweDdGRkZGRjAwTCkgfAorCQkJCShVTE9ORykgKHVsX1BvbGFyaXR5KSk7CisJCQlvdXRsKHVsX0NvbW1hbmQxLAorCQkJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX0FOQUxPR19PVVRQVVQgKworCQkJCUFQQ0kzNTAxX0FPX1BST0cpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gICBOYW1lICAgOiBzdGF0aWMgdm9pZCB2X0FQQ0kzNTAxX0ludGVycnVwdAkJCQkJICAgICB8Cit8CQkJCQkgIChpbnQgaXJxICwgdm9pZCAqZCkgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBSb3V0aW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogaW50IGlycSAgICAgICAgICAgICAgICAgOiBpcnEgbnVtYmVyICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICB2b2lkICpkICAgICAgICAgICAgICAgICA6IHZvaWQgcG9pbnRlciAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDoJLS0JCQkJCQkJCQkJCQkJIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IFRSVUUgIDogTm8gZXJyb3Igb2NjdXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8CQkgICAgICAgICAgICA6IEZBTFNFIDogRXJyb3Igb2NjdXIuIFJldHVybiB0aGUgZXJyb3IgICAgICAgICAgfAorfAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK3ZvaWQgdl9BUENJMzUwMV9JbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlpbnQgaV90ZW1wOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXVuc2lnbmVkIGludCB1aV9UaW1lcl9BT1dhdGNoZG9nOworCXVuc2lnbmVkIGxvbmcgdWxfQ29tbWFuZDE7CisJLy8gRGlzYWJsZSBJbnRlcnJ1cHQKKwl1bF9Db21tYW5kMSA9CisJCWlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArIEFQQ0kzNTAxX1RDV19QUk9HKTsKKworCXVsX0NvbW1hbmQxID0gKHVsX0NvbW1hbmQxICYgMHhGRkZGRjlGRHVsKTsKKwlvdXRsKHVsX0NvbW1hbmQxLAorCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArIEFQQ0kzNTAxX1RDV19QUk9HKTsKKworCXVpX1RpbWVyX0FPV2F0Y2hkb2cgPQorCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsgQVBDSTM1MDFfV0FUQ0hET0cgKworCQlBUENJMzUwMV9UQ1dfSVJRKSAmIDB4MTsKKworCWlmICgoIXVpX1RpbWVyX0FPV2F0Y2hkb2cpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJJUlEgZnJvbSB1bmtub3cgc291cmNlIik7CisJCXJldHVybjsKKwl9CisKKwkvLyBFbmFibGUgSW50ZXJydXB0CisJLy9TZW5kIGEgc2lnbmFsIHRvIGZyb20ga2VybmVsIHRvIHVzZXIgc3BhY2UKKwlzZW5kX3NpZyhTSUdJTywgZGV2cHJpdi0+dHNrX0N1cnJlbnQsIDApOworCXVsX0NvbW1hbmQxID0KKwkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpOworCXVsX0NvbW1hbmQxID0gKCh1bF9Db21tYW5kMSAmIDB4RkZGRkY5RkR1bCkgfCAxIDw8IDEpOworCW91dGwodWxfQ29tbWFuZDEsCisJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzNTAxX1dBVENIRE9HICsgQVBDSTM1MDFfVENXX1BST0cpOworCWlfdGVtcCA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzUwMV9XQVRDSERPRyArCisJCUFQQ0kzNTAxX1RDV19UUklHX1NUQVRVUykgJiAweDE7CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzUwMS5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzUwMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZTdiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzNTAxLmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworLy8gQ2FyZCBTcGVjaWZpYyBpbmZvcm1hdGlvbgorI2RlZmluZSBBUENJMzUwMV9CT0FSRF9WRU5ET1JfSUQgICAgICAgICAgICAgICAgIDB4MTVCOAorI2RlZmluZSBBUENJMzUwMV9BRERSRVNTX1JBTkdFICAgICAgICAgICAgICAgICAgIDI1NQorCisjZGVmaW5lIEFQQ0kzNTAxX0RJR0lUQUxfSVAgICAgICAgICAgICAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUgQVBDSTM1MDFfRElHSVRBTF9PUCAgICAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBBUENJMzUwMV9BTkFMT0dfT1VUUFVUICAgICAgICAgICAgICAgICAgICAweDAwCisKKy8vQW5hbG9nIE91dHB1dCByZWxhdGVkIERlZmluZXMKKyNkZWZpbmUgQVBDSTM1MDFfQU9fVk9MVF9NT0RFICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUENJMzUwMV9BT19QUk9HICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kzNTAxX0FPX1RSSUdfU0NTICAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgVU5JUE9MQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBCSVBPTEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1PREUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTU9ERTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorLy8gQU5BTE9HIE9VVFBVVCBSQU5HRQorc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXBjaTM1MDFfYW8gPSB7IDIsIHsKKwkJCQkJQklQX1JBTkdFKDEwKSwKKwkJCQkJVU5JX1JBTkdFKDEwKQorCQkJCQl9Cit9OworCisvL1dhdGNoZG9nIFJlbGF0ZWQgRGVmaW5lcworCisjZGVmaW5lIEFQQ0kzNTAxX1dBVENIRE9HICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQVBDSTM1MDFfVENXX1NZTkNfRU5BQkxFRElTQUJMRSAgICAgICAgICAgMAorI2RlZmluZSBBUENJMzUwMV9UQ1dfUkVMT0FEX1ZBTFVFICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEFQQ0kzNTAxX1RDV19USU1FQkFTRSAgICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQVBDSTM1MDFfVENXX1BST0cgICAgICAgICAgICAgICAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBDSTM1MDFfVENXX1RSSUdfU1RBVFVTICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQVBDSTM1MDFfVENXX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgQVBDSTM1MDFfVENXX1dBUk5fVElNRVZBTCAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQVBDSTM1MDFfVENXX1dBUk5fVElNRUJBU0UgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgQURESURBVEFfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBRERJREFUQV9XQVRDSERPRyAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8vIEhhcmR3YXJlIExheWVyICBmdW5jdGlvbnMgZm9yIEFwY2kzNTAxCisKKy8vQU8KK0lOVCBpX0FQQ0kzNTAxX0NvbmZpZ0FuYWxvZ091dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK0lOVCBpX0FQQ0kzNTAxX1dyaXRlQW5hbG9nT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vREkKKy8vIGZvciBkaSByZWFkCisvL0lOVCBpX0FQQ0kzNTAxX1JlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKTsKKworSU5UIGlfQVBDSTM1MDFfUmVhZERpZ2l0YWxJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8vRE8KK2ludCBpX0FQQ0kzNTAxX0NvbmZpZ0RpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTM1MDFfV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworSU5UIGlfQVBDSTM1MDFfUmVhZERpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKworLy8gVElNRVIKKy8vIHRpbWVyIHZhbHVlIGlzIHBhc3NlZCBhcyB1IHNlY29uZHMKK0lOVCBpX0FQQ0kzNTAxX0NvbmZpZ1RpbWVyQ291bnRlcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTM1MDFfU3RhcnRTdG9wV3JpdGVUaW1lckNvdW50ZXJXYXRjaGRvZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCQkJICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorCQkJCQkJICB1bnNpZ25lZCBpbnQgKmRhdGEpOworaW50IGlfQVBDSTM1MDFfUmVhZFRpbWVyQ291bnRlcldhdGNoZG9nKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CisvL0ludGVycnVwdAordm9pZCB2X0FQQ0kzNTAxX0ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkKTsKKworLy9SZXNldCBmdW5jdGlvbnMKK2ludCBpX0FQQ0kzNTAxX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MjY4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzeHh4LmMKQEAgLTAsMCArMSwxNjkxIEBACisvKioKK0B2ZXJiYXRpbQorCitDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSAgQURESS1EQVRBIEdtYkggZm9yIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzIG1vZHVsZS4KKworICAgICAgICBBRERJLURBVEEgR21iSAorICAgICAgICBEaWVzZWxzdHJhc3NlIDMKKyAgICAgICAgRC03NzgzMyBPdHRlcnN3ZWllcgorICAgICAgICBUZWw6ICsxOSgwKTcyMjMvOTQ5My0wCisgICAgICAgIEZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgICAgICAgIGh0dHA6Ly93d3cuYWRkaS1kYXRhLWNvbQorICAgICAgICBpbmZvQGFkZGktZGF0YS5jb20KKworVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitZb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KKworQGVuZHZlcmJhdGltCisqLworLyoKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8IChDKSBBRERJLURBVEEgR21iSCAgICAgICAgICBEaWVzZWxzdHJhc3NlIDMgICAgICBELTc3ODMzIE90dGVyc3dlaWVyICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBUZWwgOiArNDkgKDApIDcyMjMvOTQ5My0wICAgICB8IGVtYWlsICAgIDogaW5mb0BhZGRpLWRhdGEuY29tICAgICAgICAgfAorICB8IEZheCA6ICs0OSAoMCkgNzIyMy85NDkzLTkyICAgIHwgSW50ZXJuZXQgOiBodHRwOi8vd3d3LmFkZGktZGF0YS5jb20gICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0ICAgICA6IEFQQ0ktM1hYWCAgICAgICB8IENvbXBpbGVyICAgOiBHQ0MgICAgICAgICAgICAgICAgICAgICAgfAorICB8IE1vZHVsZSBuYW1lIDogaHdkcnZfYXBjaTN4eHguY3wgVmVyc2lvbiAgICA6IDIuOTYgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCBQcm9qZWN0IG1hbmFnZXI6IFMuIFdlYmVyICAgICB8IERhdGUgICAgICAgOiAgMTUvMDkvMjAwNSAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgRGVzY3JpcHRpb24gOkFQQ0kzWFhYIE1vZHVsZS4gIEhhcmR3YXJlIGFic3RyYWN0aW9uIExheWVyIGZvciBBUENJM1hYWHwKKyAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEUnUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgIERhdGUgICB8ICAgQXV0aG9yICB8ICAgICAgICAgIERlc2NyaXB0aW9uIG9mIHVwZGF0ZXMgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgIHwgICAgICAgICAgfCAJCSB8IAkJCQkJCSAgfAorICB8ICAgICAgICAgIHwgICAgICAgICAgIHwJCQkJCQkgIHwKKyAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworI2luY2x1ZGUgImh3ZHJ2X2FwY2kzeHh4LmgiCisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgQU5BTE9HIElOUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogSU5UICAgaV9BUENJM1hYWF9UZXN0Q29udmVyc2lvblN0YXJ0ZWQgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAgICAqZGV2KSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICAgIFRlc3QgaWYgYW55IGNvbnZlcnNpb24gc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IDAgOiBDb252ZXJzaW9uIG5vdCBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgMSA6IENvbnZlcnNpb24gc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTNYWFhfVGVzdENvbnZlcnNpb25TdGFydGVkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmICgocmVhZGwoKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsgOCkpICYgMHg4MDAwMFVMKSA9PSAweDgwMDAwVUwpIHsKKwkJcmV0dXJuICgxKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKDApOworCX0KK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgIGlfQVBDSTNYWFhfQW5hbG9nSW5wdXRDb25maWdPcGVyYXRpbmdNb2RlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgQ29udmVydGluZyBtb2RlIGFuZCBjb252ZXJ0IHRpbWUgc2VsZWN0aW9uICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9TaW5nbGVEaWZmICA9IChCWVRFKSAgZGF0YVsxXTsgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX1RpbWVCYXNlICAgID0gKEJZVEUpICBkYXRhWzJdOyAoMDogbnMsIDE6bWljcm9zIDI6bXMpfAorfCAgICAgICAgICAgICAgICAgICAgZHdfUmVsb2FkVmFsdWUgPSAoRFdPUkQpIGRhdGFbM107ICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLi4uLi4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOj4wIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEgOiBTaW5nbGUvRGlmZiBzZWxlY3Rpb24gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMiA6IENvbnZlcnQgdGltZSBiYXNlIHVuaXR5IHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zIDogQ29udmVydCB0aW1lIHZhbHVlIHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwOiBBbnkgY29udmVyc2lvbiBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDAgOiBDb25maWcgY29tbWFuZCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0FuYWxvZ0lucHV0Q29uZmlnT3BlcmF0aW5nTW9kZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9UaW1lQmFzZSA9IDA7CisJQllURSBiX1NpbmdsZURpZmYgPSAwOworCURXT1JEIGR3X1JlbG9hZFZhbHVlID0gMDsKKwlEV09SRCBkd19UZXN0UmVsb2FkVmFsdWUgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaW5zbi0+biA9PSA0KSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgU2luZ2VsL0RpZmYgZmxhZyAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWJfU2luZ2xlRGlmZiA9IChCWVRFKSBkYXRhWzFdOworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIEdldCB0aGUgdGltZSBiYXNlIHVuaXRpeSAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWJfVGltZUJhc2UgPSAoQllURSkgZGF0YVsyXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIGNvbnZlcnQgdGltZSByZWxvYWQgdmFsdWUgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkd19SZWxvYWRWYWx1ZSA9IChEV09SRCkgZGF0YVszXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSB0aW1lIGJhc2UgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKGRldnByaXYtPnBzX0JvYXJkSW5mby0+CisJCQkJYl9BdmFpbGFibGVDb252ZXJ0VW5pdCAmICgxIDw8IGJfVGltZUJhc2UpKSAhPQorCQkJMCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgY29udmVydCB0aW1lIHZhbHVlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoZHdfUmVsb2FkVmFsdWUgPj0gMCkgJiYgKGR3X1JlbG9hZFZhbHVlIDw9IDY1NTM1KSkgeworCQkJCWR3X1Rlc3RSZWxvYWRWYWx1ZSA9IGR3X1JlbG9hZFZhbHVlOworCisJCQkJaWYgKGJfVGltZUJhc2UgPT0gMSkgeworCQkJCQlkd19UZXN0UmVsb2FkVmFsdWUgPQorCQkJCQkJZHdfVGVzdFJlbG9hZFZhbHVlICogMTAwMFVMOworCQkJCX0KKwkJCQlpZiAoYl9UaW1lQmFzZSA9PSAyKSB7CisJCQkJCWR3X1Rlc3RSZWxvYWRWYWx1ZSA9CisJCQkJCQlkd19UZXN0UmVsb2FkVmFsdWUgKiAxMDAwMDAwVUw7CisJCQkJfQorCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBUZXN0IHRoZSBjb252ZXJ0IHRpbWUgdmFsdWUgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaWYgKGR3X1Rlc3RSZWxvYWRWYWx1ZSA+PQorCQkJCQlkZXZwcml2LT5wc19Cb2FyZEluZm8tPgorCQkJCQl1aV9NaW5BY3F1aXNpdGlvbnRpbWVOcykgeworCQkJCQlpZiAoKGJfU2luZ2xlRGlmZiA9PSBBUENJM1hYWF9TSU5HTEUpCisJCQkJCQl8fCAoYl9TaW5nbGVEaWZmID09CisJCQkJCQkJQVBDSTNYWFhfRElGRikpIHsKKwkJCQkJCWlmICgoKGJfU2luZ2xlRGlmZiA9PSBBUENJM1hYWF9TSU5HTEUpICYmIChkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyQWlDaGFubmVsID09IDApKSB8fCAoKGJfU2luZ2xlRGlmZiA9PSBBUENJM1hYWF9ESUZGKSAmJiAoZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickFpQ2hhbm5lbERpZmYgPT0gMCkpKSB7CisJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBTaW5nbGUvRGlmZiBzZWxlY3Rpb24gZXJyb3IgKi8KKwkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJcHJpbnRrKCJTaW5nbGUvRGlmZiBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTsKKwkJCQkJCX0gZWxzZSB7CisJCQkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBUZXN0IGlmIGNvbnZlcnNpb24gbm90IHN0YXJ0ZWQgKi8KKwkJCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCQkJaWYgKGlfQVBDSTNYWFhfVGVzdENvbnZlcnNpb25TdGFydGVkKGRldikgPT0gMCkgeworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCXVpX0VvY0Vvc0NvbnZlcnNpb25UaW1lCisJCQkJCQkJCQk9CisJCQkJCQkJCQkoVUlOVCkKKwkJCQkJCQkJCWR3X1JlbG9hZFZhbHVlOworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCWJfRW9jRW9zQ29udmVyc2lvblRpbWVCYXNlCisJCQkJCQkJCQk9CisJCQkJCQkJCQliX1RpbWVCYXNlOworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCWJfU2luZ2VsRGlmZgorCQkJCQkJCQkJPQorCQkJCQkJCQkJYl9TaW5nbGVEaWZmOworCQkJCQkJCQlkZXZwcml2LT4KKwkJCQkJCQkJCWJfQWlJbml0aWFsaXNhdGlvbgorCQkJCQkJCQkJPSAxOworCisJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyB1bml0ICovCisJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQl3cml0ZWwoKERXT1JEKQorCQkJCQkJCQkJYl9UaW1lQmFzZSwKKwkJCQkJCQkJCSh2b2lkICopCisJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJZHdfQWlCYXNlCisJCQkJCQkJCQkJKworCQkJCQkJCQkJCTM2KSk7CisKKwkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkJLyogU2V0IHRoZSBjb252ZXJ0IHRpbWluZyAqLworCQkJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQkJd3JpdGVsKGR3X1JlbG9hZFZhbHVlLCAodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyAzMikpOworCQkJCQkJCX0gZWxzZSB7CisJCQkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkJCS8qIEFueSBjb252ZXJzaW9uIHN0YXJ0ZWQgKi8KKwkJCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCQlwcmludGsoIkFueSBjb252ZXJzaW9uIHN0YXJ0ZWRcbiIpOworCQkJCQkJCQlpX1JldHVyblZhbHVlID0KKwkJCQkJCQkJCS0xMDsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCSAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCS8qIFNpbmdsZS9EaWZmIHNlbGVjdGlvbiBlcnJvciAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCXByaW50aygiU2luZ2xlL0RpZmYgc2VsZWN0aW9uIGVycm9yXG4iKTsKKwkJCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUaW1lIHNlbGVjdGlvbiBlcnJvciAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwcmludGsoIkNvbnZlcnQgdGltZSB2YWx1ZSBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGltZSBzZWxlY3Rpb24gZXJyb3IgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlwcmludGsoIkNvbnZlcnQgdGltZSB2YWx1ZSBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUaW1lIGJhc2Ugc2VsZWN0aW9uIGVycm9yICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIkNvbnZlcnQgdGltZSBiYXNlIHVuaXR5IHNlbGVjdGlvbiBlcnJvclxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTI7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgIGlfQVBDSTNYWFhfSW5zbkNvbmZpZ0FuYWxvZ0lucHV0ICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgQ29udmVydGluZyBtb2RlIGFuZCBjb252ZXJ0IHRpbWUgc2VsZWN0aW9uICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9Db252ZXJ0TW9kZSA9IChCWVRFKSAgZGF0YVswXTsgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX1RpbWVCYXNlICAgID0gKEJZVEUpICBkYXRhWzFdOyAoMDogbnMsIDE6bWljcm9zIDI6bXMpfAorfCAgICAgICAgICAgICAgICAgICAgZHdfUmVsb2FkVmFsdWUgPSAoRFdPUkQpIGRhdGFbMl07ICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgLi4uLi4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOj4wOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAwIDogQ29uZmlnIGNvbW1hbmQgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCitpbnQgaV9BUENJM1hYWF9JbnNuQ29uZmlnQW5hbG9nSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCQlzd2l0Y2ggKChCWVRFKSBkYXRhWzBdKSB7CisJCWNhc2UgQVBDSTNYWFhfQ09ORklHVVJBVElPTjoKKwkJCWlfUmV0dXJuVmFsdWUgPQorCQkJCWlfQVBDSTNYWFhfQW5hbG9nSW5wdXRDb25maWdPcGVyYXRpbmdNb2RlKGRldiwKKwkJCQlzLCBpbnNuLCBkYXRhKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlpX1JldHVyblZhbHVlID0gLTEwMDsKKwkJCXByaW50aygiQ29uZmlnIGNvbW1hbmQgZXJyb3IgJWRcbiIsIGRhdGFbMF0pOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgIGlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dCAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgICBSZWFkIDEgYW5hbG9nIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9SYW5nZSAgICAgICAgICAgICA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICBiX0NoYW5uZWwgICAgICAgICAgID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7ICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGR3X05ick9mQWNxdWlzaXRpb24gPSBpbnNuLT5uOyAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDo+MDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zIDogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQgOiBDb25maWd1cmF0aW9uIHNlbGVsZWN0aW9uIGVycm9yICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTA6IEFueSBjb252ZXJzaW9uIHN0YXJ0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMCA6IENvbmZpZyBjb21tYW5kIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTNYWFhfSW5zblJlYWRBbmFsb2dJbnB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9Db25maWd1cmF0aW9uID0gKEJZVEUpIENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKwlCWVRFIGJfQ2hhbm5lbCA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlEV09SRCBkd19UZW1wID0gMDsKKwlEV09SRCBkd19Db25maWd1cmF0aW9uID0gMDsKKwlEV09SRCBkd19BY3F1aXNpdGlvbkNwdCA9IDA7CisJQllURSBiX0ludGVycnVwdCA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIG9wZXJhdGluZyBtb2RlIGNvbmZpZ3VyZWQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChkZXZwcml2LT5iX0FpSW5pdGlhbGlzYXRpb24pIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjaGFubmVsIG51bWJlciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKCgoYl9DaGFubmVsIDwgZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickFpQ2hhbm5lbCkKKwkJCQkmJiAoZGV2cHJpdi0+Yl9TaW5nZWxEaWZmID09IEFQQ0kzWFhYX1NJTkdMRSkpCisJCQl8fCAoKGJfQ2hhbm5lbCA8IGRldnByaXYtPnBzX0JvYXJkSW5mby0+CisJCQkJCWlfTmJyQWlDaGFubmVsRGlmZikKKwkJCQkmJiAoZGV2cHJpdi0+Yl9TaW5nZWxEaWZmID09IEFQQ0kzWFhYX0RJRkYpKSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX0NvbmZpZ3VyYXRpb24gPiA3KSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENoYW5uZWwgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCXByaW50aygiQ2hhbm5lbCAlZCByYW5nZSAlZCBzZWxlY3Rpb24gZXJyb3JcbiIsCisJCQkJCWJfQ2hhbm5lbCwgYl9Db25maWd1cmF0aW9uKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQlwcmludGsoIkNoYW5uZWwgJWQgc2VsZWN0aW9uIGVycm9yXG4iLCBiX0NoYW5uZWwpOworCQl9CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgbm8gZXJyb3Igb2NjdXIgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGlfUmV0dXJuVmFsdWUgPj0gMCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoYl9JbnRlcnJ1cHQgIT0gMCkgfHwgKChiX0ludGVycnVwdCA9PSAwKQorCQkJCQkmJiAoaW5zbi0+biA+PSAxKSkpIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgY29udmVyc2lvbiBub3Qgc3RhcnRlZCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoaV9BUENJM1hYWF9UZXN0Q29udmVyc2lvblN0YXJ0ZWQoZGV2KSA9PSAwKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBDbGVhciB0aGUgRklGTyAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKi8KKworCQkJCQl3cml0ZWwoMHgxMDAwMFVMLAorCQkJCQkJKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsKKwkJCQkJCQkxMikpOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogR2V0IGFuZCBzYXZlIHRoZSBkZWxheSBtb2RlICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19UZW1wID0KKwkJCQkJCXJlYWRsKCh2b2lkICopKGRldnByaXYtPgorCQkJCQkJCWR3X0FpQmFzZSArIDQpKTsKKwkJCQkJZHdfVGVtcCA9IGR3X1RlbXAgJiAweEZGRkZGRUYwVUw7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogQ2hhbm5lbCBjb25maWd1cmF0aW9uIHNlbGVjdGlvbiAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXdyaXRlbChkd19UZW1wLAorCQkJCQkJKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsKKwkJCQkJCQk0KSk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogTWFrZSB0aGUgY29uZmlndXJhdGlvbiAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWR3X0NvbmZpZ3VyYXRpb24gPQorCQkJCQkJKGJfQ29uZmlndXJhdGlvbiAmIDMpIHwKKwkJCQkJCSgoRFdPUkQpIChiX0NvbmZpZ3VyYXRpb24gPj4gMikKKwkJCQkJCTw8IDYpIHwgKChEV09SRCkgZGV2cHJpdi0+CisJCQkJCQliX1NpbmdlbERpZmYgPDwgNyk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFdyaXRlIHRoZSBjb25maWd1cmF0aW9uICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXdyaXRlbChkd19Db25maWd1cmF0aW9uLAorCQkJCQkJKHZvaWQgKikoZGV2cHJpdi0+ZHdfQWlCYXNlICsKKwkJCQkJCQkwKSk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENoYW5uZWwgc2VsZWN0aW9uICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCXdyaXRlbChkd19UZW1wIHwgMHgxMDBVTCwKKwkJCQkJCSh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArCisJCQkJCQkJNCkpOworCQkJCQl3cml0ZWwoKERXT1JEKSBiX0NoYW5uZWwsCisJCQkJCQkodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKworCQkJCQkJCTApKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZXN0YXVyZSBkZWxheSBtb2RlICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJd3JpdGVsKGR3X1RlbXAsCisJCQkJCQkodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKworCQkJCQkJCTQpKTsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBTZXQgdGhlIG51bWJlciBvZiBzZXF1ZW5jZSB0byAxICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJd3JpdGVsKDEsCisJCQkJCQkodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKworCQkJCQkJCTQ4KSk7CisKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFNhdmUgdGhlIGludGVycnVwdCBmbGFnICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0KKwkJCQkJCWJfSW50ZXJydXB0OworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogU2F2ZSB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHMgPSAxOworCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBUZXN0IGlmIGludGVycnVwdCBub3QgdXNlZCAqLworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlpZiAoYl9JbnRlcnJ1cHQgPT0gMCkgeworCQkJCQkJZm9yIChkd19BY3F1aXNpdGlvbkNwdCA9IDA7CisJCQkJCQkJZHdfQWNxdWlzaXRpb25DcHQgPAorCQkJCQkJCWluc24tPm47CisJCQkJCQkJZHdfQWNxdWlzaXRpb25DcHQrKykgeworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFN0YXJ0IHRoZSBjb252ZXJzaW9uICovCisJCQkgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQl3cml0ZWwoMHg4MDAwMFVMLAorCQkJCQkJCQkodm9pZCAqKQorCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQlkd19BaUJhc2UKKwkJCQkJCQkJCSsgOCkpOworCisJCQkgIC8qKioqKioqKioqKioqKioqLworCQkJCQkJCS8qIFdhaXQgdGhlIEVPUyAqLworCQkJICAvKioqKioqKioqKioqKioqKi8KKworCQkJCQkJCWRvIHsKKwkJCQkJCQkJZHdfVGVtcCA9CisJCQkJCQkJCQlyZWFkbCgKKwkJCQkJCQkJCSh2b2lkICopCisJCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQkJZHdfQWlCYXNlCisJCQkJCQkJCQkJKworCQkJCQkJCQkJCTIwKSk7CisJCQkJCQkJCWR3X1RlbXAgPQorCQkJCQkJCQkJZHdfVGVtcAorCQkJCQkJCQkJJiAxOworCQkJCQkJCX0KKwkJCQkJCQl3aGlsZSAoZHdfVGVtcCAhPSAxKTsKKworCQkJICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJCQkvKiBSZWFkIHRoZSBhbmFsb2cgdmFsdWUgKi8KKwkJCSAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJCQlkYXRhW2R3X0FjcXVpc2l0aW9uQ3B0XQorCQkJCQkJCQk9CisJCQkJCQkJCSh1bnNpZ25lZCBpbnQpCisJCQkJCQkJCXJlYWRsKCh2b2lkCisJCQkJCQkJCQkqKQorCQkJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQkJCQlkd19BaUJhc2UKKwkJCQkJCQkJCSsgMjgpKTsKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCQkvKiBTdGFydCB0aGUgY29udmVyc2lvbiAqLworCQkgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQkJd3JpdGVsKDB4MTgwMDAwVUwsCisJCQkJCQkJKHZvaWQgKikoZGV2cHJpdi0+CisJCQkJCQkJCWR3X0FpQmFzZSArIDgpKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIEFueSBjb252ZXJzaW9uIHN0YXJ0ZWQgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlwcmludGsoIkFueSBjb252ZXJzaW9uIHN0YXJ0ZWRcbiIpOworCQkJCQlpX1JldHVyblZhbHVlID0gLTEwOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqLworCisJCQkJcHJpbnRrKCJCdWZmZXIgc2l6ZSBlcnJvclxuIik7CisJCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIk9wZXJhdGluZyBtb2RlIG5vdCBjb25maWd1cmVkXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xOworCX0KKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDogdm9pZCB2X0FQQ0kzWFhYX0ludGVycnVwdCAoaW50ICAgICAgICAgICAgaXJxLCAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICAgICAgICAgICAqZCkgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpJbnRlcnJ1cHQgaGFuZGxlciBmb3IgQVBDSTNYWFggICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIFdoZW4gaW50ZXJydXB0IG9jY3VycyB0aGlzIGdldHMgY2FsbGVkLiAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgRmlyc3QgaXQgZmluZHMgd2hpY2ggaW50ZXJydXB0IGhhcyBiZWVuIGdlbmVyYXRlZCBhbmQgICB8Cit8ICAgICAgICAgICAgICAgICAgICBoYW5kbGVzICBjb3JyZXNwb25kaW5nIGludGVycnVwdCAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCit2b2lkIHZfQVBDSTNYWFhfSW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJQllURSBiX0NvcHlDcHQgPSAwOworCURXT1JEIGR3X1N0YXR1cyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgaWYgaW50ZXJydXB0IG9jY3VyICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmICgoKGR3X1N0YXR1cyA9IHJlYWRsKCh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDE2KSkpICYgMHgyVUwpID09CisJCTB4MlVMKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBSZXNldCB0aGUgaW50ZXJydXB0ICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCisJCXdyaXRlbChkd19TdGF0dXMsICh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDE2KSk7CisKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgaW50ZXJydXB0IGVuYWJsZWQgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID09IDEpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBSZWFkIGFsbCBhbmFsb2cgaW5wdXRzIHZhbHVlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlmb3IgKGJfQ29weUNwdCA9IDA7CisJCQkJYl9Db3B5Q3B0IDwgZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzOworCQkJCWJfQ29weUNwdCsrKSB7CisJCQkJZGV2cHJpdi0+dWlfQWlSZWFkRGF0YVtiX0NvcHlDcHRdID0KKwkJCQkJKFVJTlQpIHJlYWRsKCh2b2lkICopKGRldnByaXYtPgorCQkJCQkJZHdfQWlCYXNlICsgMjgpKTsKKwkJCX0KKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNldCB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gMjsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogU2VuZCBhIHNpZ25hbCB0byBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXNlbmRfc2lnKFNJR0lPLCBkZXZwcml2LT50c2tfQ3VycmVudCwgMCk7CisJCX0KKwl9Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5BTE9HIE9VVFBVVCBTVUJERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogSU5UICAgaV9BUENJM1hYWF9JbnNuV3JpdGVBbmFsb2dPdXRwdXQgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAgICAqZGV2LCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gICAgICAqaW5zbiwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICAgIFJlYWQgMSBhbmFsb2cgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBiX1JhbmdlICAgID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOyAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGJfQ2hhbm5lbCAgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZGF0YVswXSAgICA9IGFuYWxvZyB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOj4wOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTMgOiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtNCA6IENvbmZpZ3VyYXRpb24gc2VsZWxlY3Rpb24gZXJyb3IgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC4uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25Xcml0ZUFuYWxvZ091dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJQllURSBiX1JhbmdlID0gKEJZVEUpIENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKwlCWVRFIGJfQ2hhbm5lbCA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlEV09SRCBkd19TdGF0dXMgPSAwOworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9DaGFubmVsIDwgZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickFvQ2hhbm5lbCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCB0aGUgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmIChiX1JhbmdlIDwgMikgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBTZXQgdGhlIHJhbmdlIHNlbGVjdGlvbiAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXdyaXRlbChiX1JhbmdlLAorCQkJCQkodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyA5NikpOworCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV3JpdGUgdGhlIGFuYWxvZyB2YWx1ZSB0byB0aGUgc2VsZWN0ZWQgY2hhbm5lbCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJd3JpdGVsKChkYXRhWzBdIDw8IDgpIHwgYl9DaGFubmVsLAorCQkJCQkodm9pZCAqKShkZXZwcml2LT5kd19BaUJhc2UgKyAxMDApKTsKKworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogV2FpdCB0aGUgZW5kIG9mIHRyYW5zZmVyICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWRvIHsKKwkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCXJlYWRsKCh2b2lkICopKGRldnByaXYtPgorCQkJCQkJCWR3X0FpQmFzZSArIDk2KSk7CisJCQkJfQorCQkJCXdoaWxlICgoZHdfU3RhdHVzICYgMHgxMDApICE9IDB4MTAwKTsKKwkJCX0gZWxzZSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIENoYW5uZWwgbm90IGluaXRpYWxpc2VkICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJaV9SZXR1cm5WYWx1ZSA9IC00OworCQkJCXByaW50aygiQ2hhbm5lbCAlZCByYW5nZSAlZCBzZWxlY3Rpb24gZXJyb3JcbiIsCisJCQkJCWJfQ2hhbm5lbCwgYl9SYW5nZSk7CisJCQl9CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQkJcHJpbnRrKCJDaGFubmVsICVkIHNlbGVjdGlvbiBlcnJvclxuIiwgYl9DaGFubmVsKTsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFRMIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgIGlfQVBDSTNYWFhfSW5zbkNvbmZpZ0luaXRUVExJTyAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgWW91IG11c3QgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGJlICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICBmb3IgeW91IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9uIHdpdGNoIGFjY2VzcyBvZiBUVEwuICAgICAgICB8Cit8ICAgICAgICAgICAgICAgIEFQQ0kzWFhYX1RUTF9JTklUX0RJUkVDVElPTl9QT1JUMih1c2VyIGlucHV0cyBmb3IgZGlyZWN0aW9uKXwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGJfSW5pdFR5cGUgICAgPSAoQllURSkgZGF0YVswXTsgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgYl9Qb3J0Mk1vZGUgICA9IChCWVRFKSBkYXRhWzFdOyAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOj4wOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTE6IFBvcnQgMiBtb2RlIHNlbGVjdGlvbiBpcyB3cm9uZyAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDAgOiBDb25maWcgY29tbWFuZCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25Db25maWdJbml0VFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ29tbWFuZCA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpbnNuLT5uID49IDEpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBjb21tYW5kICovCisJCS8qICoqKioqKioqKioqKioqKiogKi8KKworCQliX0NvbW1hbmQgPSAoQllURSkgZGF0YVswXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgY29tbWFuZCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9Db21tYW5kID09IEFQQ0kzWFhYX1RUTF9JTklUX0RJUkVDVElPTl9QT1JUMikgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBUZXN0IHRoZSBpbml0aWFsaXNhdGlvbiBidWZmZXIgc2l6ZSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoYl9Db21tYW5kID09IEFQQ0kzWFhYX1RUTF9JTklUX0RJUkVDVElPTl9QT1JUMikKKwkJCQkmJiAoaW5zbi0+biAhPSAyKSkgeworCQkgLyoqKioqKioqKioqKioqKioqKiovCisJCQkJLyogRGF0YSBzaXplIGVycm9yICovCisJCSAvKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQkJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCQkJfQorCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb25maWcgY29tbWFuZCBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXByaW50aygiQ29tbWFuZCBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0xMDA7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IGlmIG5vIGVycm9yIG9jY3VyIGFuZCBBUENJM1hYWF9UVExfSU5JVF9ESVJFQ1RJT05fUE9SVDIgY29tbWFuZCBzZWxlY3RlZCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoKGlfUmV0dXJuVmFsdWUgPj0gMCkKKwkJJiYgKGJfQ29tbWFuZCA9PSBBUENJM1hYWF9UVExfSU5JVF9ESVJFQ1RJT05fUE9SVDIpKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGRpcmVjdGlvbiAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZGF0YVsxXSA9PSAwKSB8fCAoZGF0YVsxXSA9PSAweEZGKSkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNhdmUgdGhlIGNvbmZpZ3VyYXRpb24gKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uWzBdID0KKwkJCQlkZXZwcml2LT51bF9UVExQb3J0Q29uZmlndXJhdGlvblswXSB8IGRhdGFbMV07CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFBvcnQgZGlyZWN0aW9uIGVycm9yICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJcHJpbnRrKCJQb3J0IDIgZGlyZWN0aW9uIHNlbGVjdGlvbiBlcnJvclxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTE7CisJCX0KKwl9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCBpZiBubyBlcnJvciBvY2N1ciAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpX1JldHVyblZhbHVlID49IDApIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgaWYgVFRMIHBvcnQgaW5pdGlsYWlzYXRpb24gKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJaWYgKGJfQ29tbWFuZCA9PSBBUENJM1hYWF9UVExfSU5JVF9ESVJFQ1RJT05fUE9SVDIpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFNldCB0aGUgY29uZmlndXJhdGlvbiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlvdXRsKGRhdGFbMV0sIGRldnByaXYtPmlvYmFzZSArIDIyNCk7CisJCX0KKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgVFRMIElOUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCAgICAgaV9BUENJM1hYWF9JbnNuQml0c1RUTElPICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBXcml0ZSB0aGUgc2VsZWN0ZWQgb3V0cHV0IG1hc2sgYW5kIHJlYWQgdGhlIHN0YXR1cyBmcm9tfAorfCAgICAgICAgICAgICAgICAgICAgIGFsbCBUVEwgY2hhbm5sZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBkd19DaGFubmVsTWFzayA9IGRhdGEgWzBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGR3X0JpdE1hc2sgICAgID0gZGF0YSBbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBkYXRhWzFdIDogQWxsIFRUTCBjaGFubmxlcyBzdGF0ZXMgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogPjAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC00ICAgOiBDaGFubmVsIG1hc2sgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25CaXRzVFRMSU8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ2hhbm5lbENwdCA9IDA7CisJRFdPUkQgZHdfQ2hhbm5lbE1hc2sgPSAwOworCURXT1JEIGR3X0JpdE1hc2sgPSAwOworCURXT1JEIGR3X1N0YXR1cyA9IDA7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIFRlc3QgdGhlIGJ1ZmZlciBzaXplICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWlmIChpbnNuLT5uID49IDIpIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogR2V0IHRoZSBjaGFubmUgYW5kIGJpdCBtYXNrICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJZHdfQ2hhbm5lbE1hc2sgPSBkYXRhWzBdOworCQlkd19CaXRNYXNrID0gZGF0YVsxXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBUZXN0IHRoZSBjaGFubmVsIG1hc2sgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoKChkd19DaGFubmVsTWFzayAmIDBYRkYwMEZGMDApID09IDApICYmCisJCQkoKChkZXZwcml2LT51bF9UVExQb3J0Q29uZmlndXJhdGlvblswXSAmIDB4RkYpID09IDB4RkYpCisJCQkJfHwgKCgoZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMF0gJgorCQkJCQkJCTB4RkYpID09IDApCisJCQkJCSYmICgoZHdfQ2hhbm5lbE1hc2sgJiAwWEZGMDAwMCkgPT0KKwkJCQkJCTApKSkpIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBzZXQvcmVzZXQgYW55IGNoYW5uZWwgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoZHdfQ2hhbm5lbE1hc2spIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgc2V0L3Jlc3QgYW55IHBvcnQgMCBjaGFubmVscyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoZHdfQ2hhbm5lbE1hc2sgJiAweEZGKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkJLyogUmVhZCBwb3J0IDAgKGZpcnN0IGRpZ2l0YWwgb3V0cHV0IHBvcnQpICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgODApOworCisJCQkJCWZvciAoYl9DaGFubmVsQ3B0ID0gMDsgYl9DaGFubmVsQ3B0IDwgODsKKwkJCQkJCWJfQ2hhbm5lbENwdCsrKSB7CisJCQkJCQlpZiAoKGR3X0NoYW5uZWxNYXNrID4+CisJCQkJCQkJCWJfQ2hhbm5lbENwdCkgJgorCQkJCQkJCTEpIHsKKwkJCQkJCQlkd19TdGF0dXMgPQorCQkJCQkJCQkoZHdfU3RhdHVzICYKKwkJCQkJCQkJKDB4RkYgLSAoMSA8PCBiX0NoYW5uZWxDcHQpKSkgfCAoZHdfQml0TWFzayAmICgxIDw8IGJfQ2hhbm5lbENwdCkpOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJb3V0bChkd19TdGF0dXMsIGRldnByaXYtPmlvYmFzZSArIDgwKTsKKwkJCQl9CisKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgc2V0L3Jlc3QgYW55IHBvcnQgMiBjaGFubmVscyAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpZiAoZHdfQ2hhbm5lbE1hc2sgJiAweEZGMDAwMCkgeworCQkJCQlkd19CaXRNYXNrID0gZHdfQml0TWFzayA+PiAxNjsKKwkJCQkJZHdfQ2hhbm5lbE1hc2sgPSBkd19DaGFubmVsTWFzayA+PiAxNjsKKworCQkgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJCQkvKiBSZWFkIHBvcnQgMiAoc2Vjb25kIGRpZ2l0YWwgb3V0cHV0IHBvcnQpICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDExMik7CisKKwkJCQkJZm9yIChiX0NoYW5uZWxDcHQgPSAwOyBiX0NoYW5uZWxDcHQgPCA4OworCQkJCQkJYl9DaGFubmVsQ3B0KyspIHsKKwkJCQkJCWlmICgoZHdfQ2hhbm5lbE1hc2sgPj4KKwkJCQkJCQkJYl9DaGFubmVsQ3B0KSAmCisJCQkJCQkJMSkgeworCQkJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQkJCShkd19TdGF0dXMgJgorCQkJCQkJCQkoMHhGRiAtICgxIDw8IGJfQ2hhbm5lbENwdCkpKSB8IChkd19CaXRNYXNrICYgKDEgPDwgYl9DaGFubmVsQ3B0KSk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlvdXRsKGR3X1N0YXR1cywgZGV2cHJpdi0+aW9iYXNlICsgMTEyKTsKKwkJCQl9CisJCQl9CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgcG9ydCAwIChmaXJzdCBkaWdpdGFsIG91dHB1dCBwb3J0KSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlkYXRhWzFdID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDgwKTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBSZWFkIHBvcnQgMSAoZmlyc3QgZGlnaXRhbCBpbnB1dCBwb3J0KSAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRhdGFbMV0gPSBkYXRhWzFdIHwgKGlubChkZXZwcml2LT5pb2Jhc2UgKyA2NCkgPDwgOCk7CisKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiBwb3J0IDIgaW5wdXQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlpZiAoKGRldnByaXYtPnVsX1RUTFBvcnRDb25maWd1cmF0aW9uWzBdICYgMHhGRikgPT0gMCkgeworCQkJCWRhdGFbMV0gPQorCQkJCQlkYXRhWzFdIHwgKGlubChkZXZwcml2LT5pb2Jhc2UgKworCQkJCQkJOTYpIDw8IDE2KTsKKwkJCX0gZWxzZSB7CisJCQkJZGF0YVsxXSA9CisJCQkJCWRhdGFbMV0gfCAoaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJCQkxMTIpIDw8IDE2KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ29uZmlnIGNvbW1hbmQgZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIkNoYW5uZWwgbWFzayBlcnJvclxuIik7CisJCQlpX1JldHVyblZhbHVlID0gLTQ7CisJCX0KKwl9IGVsc2UgeworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHNpemUgZXJyb3IgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKworCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJaV9SZXR1cm5WYWx1ZSA9IC0xMDE7CisJfQorCisJcmV0dXJuIChpX1JldHVyblZhbHVlKTsKK30KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBOYW1lICAgICA6IElOVCBpX0FQQ0kzWFhYX0luc25SZWFkVFRMSU8gICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgICAgKmRldiwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICAgICAgKmluc24sICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgKmRhdGEpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkIHRoZSBzdGF0dXMgZnJvbSBzZWxlY3RlZCBjaGFubmVsICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMF0gOiBTZWxlY3RlZCBUVEwgY2hhbm5lbCBzdGF0ZSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwICAgOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTMgICA6IENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTNYWFhfSW5zblJlYWRUVExJTyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJQllURSBiX0NoYW5uZWwgPSAoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCXVuc2lnbmVkIGludCAqcGxzX1JlYWREYXRhID0gZGF0YTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiByZWFkIHBvcnQgMCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9DaGFubmVsIDwgOCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogUmVhZCBwb3J0IDAgKGZpcnN0IGRpZ2l0YWwgb3V0cHV0IHBvcnQpICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXBsc19SZWFkRGF0YVswXSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA4MCk7CisJCQlwbHNfUmVhZERhdGFbMF0gPSAocGxzX1JlYWREYXRhWzBdID4+IGJfQ2hhbm5lbCkgJiAxOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgcmVhZCBwb3J0IDEgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWlmICgoYl9DaGFubmVsID4gNykgJiYgKGJfQ2hhbm5lbCA8IDE2KSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCQkvKiBSZWFkIHBvcnQgMSAoZmlyc3QgZGlnaXRhbCBpbnB1dCBwb3J0KSAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCXBsc19SZWFkRGF0YVswXSA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA2NCk7CisJCQkJcGxzX1JlYWREYXRhWzBdID0KKwkJCQkJKHBsc19SZWFkRGF0YVswXSA+PiAoYl9DaGFubmVsIC0KKwkJCQkJCTgpKSAmIDE7CisJCQl9IGVsc2UgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJCS8qIFRlc3QgaWYgcmVhZCBwb3J0IDIgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoYl9DaGFubmVsID4gMTUpICYmIChiX0NoYW5uZWwgPCAyNCkpIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFRlc3QgaWYgcG9ydCAyIGlucHV0ICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlmICgoZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMF0KKwkJCQkJCQkmIDB4RkYpID09IDApIHsKKwkJCQkJCXBsc19SZWFkRGF0YVswXSA9CisJCQkJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArCisJCQkJCQkJOTYpOworCQkJCQkJcGxzX1JlYWREYXRhWzBdID0KKwkJCQkJCQkocGxzX1JlYWREYXRhWzBdID4+CisJCQkJCQkJKGJfQ2hhbm5lbCAtIDE2KSkgJiAxOworCQkJCQl9IGVsc2UgeworCQkJCQkJcGxzX1JlYWREYXRhWzBdID0KKwkJCQkJCQlpbmwoZGV2cHJpdi0+aW9iYXNlICsKKwkJCQkJCQkxMTIpOworCQkJCQkJcGxzX1JlYWREYXRhWzBdID0KKwkJCQkJCQkocGxzX1JlYWREYXRhWzBdID4+CisJCQkJCQkJKGJfQ2hhbm5lbCAtIDE2KSkgJiAxOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCQkJcHJpbnRrKCJDaGFubmVsICVkIHNlbGVjdGlvbiBlcnJvclxuIiwKKwkJCQkJCWJfQ2hhbm5lbCk7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJCdWZmZXIgc2l6ZSBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgICAgICAgICAgICBUVEwgT1VUUFVUIEZVTkNUSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIE5hbWUgICAgIDogSU5UICAgICBpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAgICAqZGV2LCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gICAgICAqaW5zbiwgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAqZGF0YSkgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFNldCB0aGUgc3RhdGUgZnJvbSBUVEwgb3V0cHV0IGNoYW5uZWwgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBiX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGJfU3RhdGUgICA9IGRhdGEgWzBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogMCAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zICAgOiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25Xcml0ZVRUTElPKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlJTlQgaV9SZXR1cm5WYWx1ZSA9IGluc24tPm47CisJQllURSBiX0NoYW5uZWwgPSAoQllURSkgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJQllURSBiX1N0YXRlID0gMDsKKwlEV09SRCBkd19TdGF0dXMgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBUZXN0IHRoZSBidWZmZXIgc2l6ZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlpZiAoaW5zbi0+biA+PSAxKSB7CisJCWJfU3RhdGUgPSAoQllURSkgZGF0YVswXTsKKworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCBpZiByZWFkIHBvcnQgMCAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9DaGFubmVsIDwgOCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgcG9ydCAwIChmaXJzdCBkaWdpdGFsIG91dHB1dCBwb3J0KSBhbmQgc2V0L3Jlc2V0IHRoZSBzZWxjdGVkIGNoYW5uZWwgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA4MCk7CisJCQlkd19TdGF0dXMgPQorCQkJCShkd19TdGF0dXMgJiAoMHhGRiAtCisJCQkJCSgxIDw8IGJfQ2hhbm5lbCkpKSB8ICgoYl9TdGF0ZSAmIDEpIDw8CisJCQkJYl9DaGFubmVsKTsKKwkJCW91dGwoZHdfU3RhdHVzLCBkZXZwcml2LT5pb2Jhc2UgKyA4MCk7CisJCX0gZWxzZSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogVGVzdCBpZiByZWFkIHBvcnQgMiAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKChiX0NoYW5uZWwgPiAxNSkgJiYgKGJfQ2hhbm5lbCA8IDI0KSkgeworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogVGVzdCBpZiBwb3J0IDIgb3V0cHV0ICovCisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCWlmICgoZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMF0gJiAweEZGKQorCQkJCQk9PSAweEZGKSB7CisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIFJlYWQgcG9ydCAyIChmaXJzdCBkaWdpdGFsIG91dHB1dCBwb3J0KSBhbmQgc2V0L3Jlc2V0IHRoZSBzZWxjdGVkIGNoYW5uZWwgKi8KKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMTEyKTsKKwkJCQkJZHdfU3RhdHVzID0KKwkJCQkJCShkd19TdGF0dXMgJiAoMHhGRiAtCisJCQkJCQkJKDEgPDwgKGJfQ2hhbm5lbCAtCisJCQkJCQkJCQkxNikpKSkgfAorCQkJCQkJKChiX1N0YXRlICYgMSkgPDwgKGJfQ2hhbm5lbCAtCisJCQkJCQkJMTYpKTsKKwkJCQkJb3V0bChkd19TdGF0dXMsIGRldnByaXYtPmlvYmFzZSArIDExMik7CisJCQkJfSBlbHNlIHsKKwkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJCS8qIENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICovCisJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJCQkJcHJpbnRrKCJDaGFubmVsICVkIHNlbGVjdGlvbiBlcnJvclxuIiwKKwkJCQkJCWJfQ2hhbm5lbCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgKi8KKwkJIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCQlpX1JldHVyblZhbHVlID0gLTM7CisJCQkJcHJpbnRrKCJDaGFubmVsICVkIHNlbGVjdGlvbiBlcnJvclxuIiwKKwkJCQkJYl9DaGFubmVsKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgRElHSVRBTCBJTlBVVCBTVUJERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworLyoKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBGdW5jdGlvbiBuYW1lICAgICA6aW50IGlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YSkgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGFzayAgICAgICAgICAgICAgOiBSZWFkcyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBEaWdpdGFsIGlucHV0IGNoYW5uZWwgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IElucHV0IFBhcmFtZXRlcnMgIDogYl9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykgKDAgdG8gMykgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMF0gOiBDaGFubmVsIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiAwICAgOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTMgICA6IENoYW5uZWwgc2VsZWN0aW9uIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KKworaW50IGlfQVBDSTNYWFhfSW5zblJlYWREaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ2hhbm5lbCA9IChCWVRFKSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlEV09SRCBkd19UZW1wID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgY2hhbm5lbCBudW1iZXIgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGJfQ2hhbm5lbCA8PSBkZXZwcml2LT5wc19Cb2FyZEluZm8tPmlfTmJyRGlDaGFubmVsKSB7CisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmIChpbnNuLT5uID49IDEpIHsKKwkJCWR3X1RlbXAgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMzIpOworCQkJKmRhdGEgPSAoZHdfVGVtcCA+PiBiX0NoYW5uZWwpICYgMTsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIkJ1ZmZlciBzaXplIGVycm9yXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJDaGFubmVsIHNlbGVjdGlvbiBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxJbnB1dCAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFJlYWRzIHRoZSB2YWx1ZSBvZiB0aGUgRGlnaXRhbCBpbnB1dCBQb3J0IGkuZS40Y2hhbm5lbHN8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogZGF0YVswXSA6IFBvcnQgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6PjA6IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAuLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0xMDEgOiBEYXRhIHNpemUgZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisqLworaW50IGlfQVBDSTNYWFhfSW5zbkJpdHNEaWdpdGFsSW5wdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlEV09SRCBkd19UZW1wID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCQlkd19UZW1wID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDMyKTsKKwkJKmRhdGEgPSBkd19UZW1wICYgMHhmOworCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgRElHSVRBTCBPVVRQVVQgU1VCREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisqLworCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJM1hYWF9JbnNuQml0c0RpZ2l0YWxPdXRwdXQgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFdyaXRlIHRoZSBzZWxlY3RlZCBvdXRwdXQgbWFzayBhbmQgcmVhZCB0aGUgc3RhdHVzIGZyb218Cit8ICAgICAgICAgICAgICAgICAgICAgYWxsIGRpZ2l0YWwgb3V0cHV0IGNoYW5ubGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGR3X0NoYW5uZWxNYXNrID0gZGF0YSBbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgZHdfQml0TWFzayAgICAgPSBkYXRhIFsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBPdXRwdXQgUGFyYW1ldGVycyA6IGRhdGFbMV0gOiBBbGwgZGlnaXRhbCBvdXRwdXQgY2hhbm5sZXMgc3RhdGVzICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgUmV0dXJuIFZhbHVlICAgICAgOiA+MCAgOiBObyBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTQgICA6IENoYW5uZWwgbWFzayBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAtMTAxIDogRGF0YSBzaXplIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKi8KK2ludCBpX0FQQ0kzWFhYX0luc25CaXRzRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9DaGFubmVsQ3B0ID0gMDsKKwlEV09SRCBkd19DaGFubmVsTWFzayA9IDA7CisJRFdPUkQgZHdfQml0TWFzayA9IDA7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMikgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBHZXQgdGhlIGNoYW5uZSBhbmQgYml0IG1hc2sgKi8KKwkgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlkd19DaGFubmVsTWFzayA9IGRhdGFbMF07CisJCWR3X0JpdE1hc2sgPSBkYXRhWzFdOworCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNoYW5uZWwgbWFzayAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCWlmICgoZHdfQ2hhbm5lbE1hc2sgJiAwWEZGRkZGRkYwKSA9PSAwKSB7CisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFRlc3QgaWYgc2V0L3Jlc2V0IGFueSBjaGFubmVsICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQkJaWYgKGR3X0NoYW5uZWxNYXNrICYgMHhGKSB7CisJCSAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkJLyogUmVhZCB0aGUgZGlnaXRhbCBvdXRwdXQgcG9ydCAqLworCQkgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQkJZHdfU3RhdHVzID0gaW5sKGRldnByaXYtPmlvYmFzZSArIDQ4KTsKKworCQkJCWZvciAoYl9DaGFubmVsQ3B0ID0gMDsgYl9DaGFubmVsQ3B0IDwgNDsKKwkJCQkJYl9DaGFubmVsQ3B0KyspIHsKKwkJCQkJaWYgKChkd19DaGFubmVsTWFzayA+PiBiX0NoYW5uZWxDcHQpICYKKwkJCQkJCTEpIHsKKwkJCQkJCWR3X1N0YXR1cyA9CisJCQkJCQkJKGR3X1N0YXR1cyAmICgweEYgLQorCQkJCQkJCQkoMSA8PCBiX0NoYW5uZWxDcHQpKSkgfCAoZHdfQml0TWFzayAmICgxIDw8IGJfQ2hhbm5lbENwdCkpOworCQkJCQl9CisJCQkJfQorCisJCQkJb3V0bChkd19TdGF0dXMsIGRldnByaXYtPmlvYmFzZSArIDQ4KTsKKwkJCX0KKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgdGhlIGRpZ2l0YWwgb3V0cHV0IHBvcnQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWRhdGFbMV0gPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgNDgpOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDb25maWcgY29tbWFuZCBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXByaW50aygiQ2hhbm5lbCBtYXNrIGVycm9yXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtNDsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJM1hYWF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0ICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKSAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBUYXNrICAgICAgICAgICAgICA6IFNldCB0aGUgc3RhdGUgZnJvbSBkaWdpdGFsIG91dHB1dCBjaGFubmVsICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgSW5wdXQgUGFyYW1ldGVycyAgOiBiX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgIGJfU3RhdGUgICA9IGRhdGEgWzBdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogPjAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zICAgOiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25Xcml0ZURpZ2l0YWxPdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCUlOVCBpX1JldHVyblZhbHVlID0gaW5zbi0+bjsKKwlCWVRFIGJfQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCUJZVEUgYl9TdGF0ZSA9IDA7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9DaGFubmVsIDwgZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickRvQ2hhbm5lbCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqLworCQkJLyogR2V0IHRoZSBjb21tYW5kICovCisJICAgICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJCWJfU3RhdGUgPSAoQllURSkgZGF0YVswXTsKKworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgdGhlIGRpZ2l0YWwgb3V0cHV0IHBvcnQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA0OCk7CisKKwkJCWR3X1N0YXR1cyA9CisJCQkJKGR3X1N0YXR1cyAmICgweEYgLQorCQkJCQkoMSA8PCBiX0NoYW5uZWwpKSkgfCAoKGJfU3RhdGUgJiAxKSA8PAorCQkJCWJfQ2hhbm5lbCk7CisJCQlvdXRsKGR3X1N0YXR1cywgZGV2cHJpdi0+aW9iYXNlICsgNDgpOworCQl9IGVsc2UgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQkvKiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAqLworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCXByaW50aygiQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3JcbiIpOworCQkJaV9SZXR1cm5WYWx1ZSA9IC0zOworCQl9CisJfSBlbHNlIHsKKwkgICAvKioqKioqKioqKioqKioqKioqKi8KKwkJLyogRGF0YSBzaXplIGVycm9yICovCisJICAgLyoqKioqKioqKioqKioqKioqKiovCisKKwkJcHJpbnRrKCJCdWZmZXIgc2l6ZSBlcnJvclxuIik7CisJCWlfUmV0dXJuVmFsdWUgPSAtMTAxOworCX0KKworCXJldHVybiAoaV9SZXR1cm5WYWx1ZSk7Cit9CisKKy8qCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRnVuY3Rpb24gbmFtZSAgICAgOmludCBpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dCAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDogUmVhZCB0aGUgc3RhdGUgZnJvbSBkaWdpdGFsIG91dHB1dCBjaGFubmVsICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IGJfQ2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgT3V0cHV0IFBhcmFtZXRlcnMgOiBiX1N0YXRlICAgPSBkYXRhIFswXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJldHVybiBWYWx1ZSAgICAgIDogPjAgIDogTm8gZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIC0zICAgOiBDaGFubmVsIHNlbGVjdGlvbiBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgLTEwMSA6IERhdGEgc2l6ZSBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX0luc25SZWFkRGlnaXRhbE91dHB1dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJSU5UIGlfUmV0dXJuVmFsdWUgPSBpbnNuLT5uOworCUJZVEUgYl9DaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJRFdPUkQgZHdfU3RhdHVzID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogVGVzdCB0aGUgYnVmZmVyIHNpemUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGluc24tPm4gPj0gMSkgeworCSAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIFRlc3QgdGhlIGNoYW5uZWwgbnVtYmVyICovCisJICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCQlpZiAoYl9DaGFubmVsIDwgZGV2cHJpdi0+cHNfQm9hcmRJbmZvLT5pX05ickRvQ2hhbm5lbCkgeworCSAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkJCS8qIFJlYWQgdGhlIGRpZ2l0YWwgb3V0cHV0IHBvcnQgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA0OCk7CisKKwkJCWR3X1N0YXR1cyA9IChkd19TdGF0dXMgPj4gYl9DaGFubmVsKSAmIDE7CisJCQkqZGF0YSA9IGR3X1N0YXR1czsKKwkJfSBlbHNlIHsKKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCQkJLyogQ2hhbm5lbCBzZWxlY3Rpb24gZXJyb3IgKi8KKwkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJCQlwcmludGsoIkNoYW5uZWwgc2VsZWN0aW9uIGVycm9yXG4iKTsKKwkJCWlfUmV0dXJuVmFsdWUgPSAtMzsKKwkJfQorCX0gZWxzZSB7CisJICAgLyoqKioqKioqKioqKioqKioqKiovCisJCS8qIERhdGEgc2l6ZSBlcnJvciAqLworCSAgIC8qKioqKioqKioqKioqKioqKioqLworCisJCXByaW50aygiQnVmZmVyIHNpemUgZXJyb3JcbiIpOworCQlpX1JldHVyblZhbHVlID0gLTEwMTsKKwl9CisKKwlyZXR1cm4gKGlfUmV0dXJuVmFsdWUpOworfQorCisvKgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEZ1bmN0aW9uICAgTmFtZSAgIDogaW50IGlfQVBDSTNYWFhfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgICAgICAgICAgICAgIDpyZXNldHMgYWxsIHRoZSByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IE91dHB1dCBQYXJhbWV0ZXJzIDogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBSZXR1cm4gVmFsdWUgICAgICA6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyovCisKK2ludCBpX0FQQ0kzWFhYX1Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGNoYXIgYl9DcHQgPSAwOworCisJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0ICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwlkaXNhYmxlX2lycShkZXYtPmlycSk7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBSZXNldCB0aGUgaW50ZXJydXB0IGZsYWcgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gMDsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQ2xlYXIgdGhlIHN0YXJ0IGNvbW1hbmQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJd3JpdGVsKDAsICh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDgpKTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBSZXNldCB0aGUgaW50ZXJydXB0IGZsYWdzICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJd3JpdGVsKHJlYWRsKCh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDE2KSksCisJCSh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDE2KSk7CisKKwkvKioqKioqKioqKioqKioqKiovCisJLyogY2xlYXIgdGhlIEVPUyAqLworCS8qKioqKioqKioqKioqKioqKi8KKworCXJlYWRsKCh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDIwKSk7CisKKwkvKioqKioqKioqKioqKioqKioqLworCS8qIENsZWFyIHRoZSBGSUZPICovCisJLyoqKioqKioqKioqKioqKioqKi8KKworCWZvciAoYl9DcHQgPSAwOyBiX0NwdCA8IDE2OyBiX0NwdCsrKSB7CisJCXJlYWRsKCh2b2lkICopKGRldnByaXYtPmR3X0FpQmFzZSArIDI4KSk7CisJfQorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBFbmFibGUgdGhlIGludGVycnVwdCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisKKwllbmFibGVfaXJxKGRldi0+aXJxKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OGQ3YzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzeHh4LmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBRERJLURBVEEgR21iSCBmb3IgdGhlIHNvdXJjZSBjb2RlIG9mIHRoaXMgbW9kdWxlLgorICoKKyAqCUFEREktREFUQSBHbWJICisgKglEaWVzZWxzdHJhc3NlIDMKKyAqCUQtNzc4MzMgT3R0ZXJzd2VpZXIKKyAqCVRlbDogKzE5KDApNzIyMy85NDkzLTAKKyAqCUZheDogKzQ5KDApNzIyMy85NDkzLTkyCisgKglodHRwOi8vd3d3LmFkZGktZGF0YS1jb20KKyAqCWluZm9AYWRkaS1kYXRhLmNvbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBDT01FRElfU1VCRF9UVExJTworI2RlZmluZSBDT01FRElfU1VCRF9UVExJTyAgIDExCS8qIERpZ2l0YWwgSW5wdXQgT3V0cHV0IEJ1dCBUVEwgKi8KKyNlbmRpZgorCisjaWZuZGVmIEFERElEQVRBX0VOQUJMRQorI2RlZmluZSBBRERJREFUQV9FTkFCTEUgIDEKKyNkZWZpbmUgQURESURBVEFfRElTQUJMRSAwCisjZW5kaWYKKworI2RlZmluZSBBUENJM1hYWF9TSU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQQ0kzWFhYX0RJRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVBDSTNYWFhfQ09ORklHVVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIEFQQ0kzWFhYX1RUTF9JTklUX0RJUkVDVElPTl9QT1JUMiAgIDAKKworI2lmZGVmIF9fS0VSTkVMX18KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FwY2kzWFhYX2FpID0geyA4LCB7QklQX1JBTkdFKDEwKSwKKwkJCQkJCSAgICAgQklQX1JBTkdFKDUpLAorCQkJCQkJICAgICBCSVBfUkFOR0UoMiksCisJCQkJCQkgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDEwKSwKKwkJCQkJCSAgICAgVU5JX1JBTkdFKDUpLAorCQkJCQkJICAgICBVTklfUkFOR0UoMiksCisJCQkJCQkgICAgIFVOSV9SQU5HRSgxKX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hcGNpM1hYWF90dGwgPSB7IDEyLCB7QklQX1JBTkdFKDEpLAorCQkJCQkJICAgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgICAgQklQX1JBTkdFKDEpLAorCQkJCQkJICAgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgICAgQklQX1JBTkdFKDEpLAorCQkJCQkJICAgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgICBCSVBfUkFOR0UoMSksCisJCQkJCQkgICAgICAgQklQX1JBTkdFKDEpLAorCQkJCQkJICAgICAgIEJJUF9SQU5HRSgxKSwKKwkJCQkJCSAgICAgICBCSVBfUkFOR0UoMSl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXBjaTNYWFhfYW8gPSB7IDIsIHtCSVBfUkFOR0UoMTApLAorCQkJCQkJICAgICBVTklfUkFOR0UoMTApfQorfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8wMzUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMDM1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFjMDE4MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMDM1LmMKQEAgLTAsMCArMSw1IEBACisjZGVmaW5lIENPTkZJR19BUENJXzAzNSAxCisKKyNkZWZpbmUgQURESURBVEFfV0FUQ0hET0cgMgkvLyBPciBzaG9sZCBpdCBiZSBzb21ldGhpbmcgZWxzZQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzEwMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTAzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMjA1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzEwMzIuYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMTAzMiAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E1Y2FlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUwMC5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8xNTAwIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDQxNDg0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTUxNi5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8xNTE2IDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTY0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE1NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzUxY2RkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNTY0LmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzE1NjQgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE2eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTZ4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNjc5OTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzE2eHguYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMTZYWCAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTcxMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8xNzEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzMzQ0NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMTcxMC5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8xNzEwIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzFjNDdjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMDE2LmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzIwMTYgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjAzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMDhlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzIwMzIuYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMjAzMiAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8yMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzOWY4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMjIwMC5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8yMjAwIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMDAxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMwMDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjk3YzMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMDAxLmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzMwMDEgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMxMjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzEyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxODMxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMxMjAuYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMzEyMCAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1YTcwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzIwMC5jCkBAIC0wLDAgKzEsMyBAQAorI2RlZmluZSBDT05GSUdfQVBDSV8zMjAwIDEKKworI2luY2x1ZGUgImFkZGktZGF0YS9hZGRpX2NvbW1vbi5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMzAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzMzMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWU0Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zMzAwLmMKQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIENPTkZJR19BUENJXzMzMDAgMQorCisjaW5jbHVkZSAiYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzM1MDEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfMzUwMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNDllMjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzM1MDEuYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMzUwMSAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfM3h4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGlfYXBjaV8zeHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI5ZGViNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpXzN4eHguYwpAQCAtMCwwICsxLDMgQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfM1hYWCAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpX2FwY2lfYWxsLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpX2FsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYjFiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaV9hcGNpX2FsbC5jCkBAIC0wLDAgKzEsMTggQEAKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMDM1ICAxCisjZGVmaW5lIENPTkZJR19BUENJXzEwMzIgMQorI2RlZmluZSBDT05GSUdfQVBDSV8xNTAwIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMTUxNiAxCisjZGVmaW5lIENPTkZJR19BUENJXzE1NjQgMQorI2RlZmluZSBDT05GSUdfQVBDSV8xNlhYIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMTcxMCAxCisjZGVmaW5lIENPTkZJR19BUENJXzIwMTYgMQorI2RlZmluZSBDT05GSUdfQVBDSV8yMDMyIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMjIwMCAxCisjZGVmaW5lIENPTkZJR19BUENJXzMwMDEgMQorI2RlZmluZSBDT05GSUdfQVBDSV8zMTIwIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfMzIwMCAxCisjZGVmaW5lIENPTkZJR19BUENJXzMzMDAgMQorI2RlZmluZSBDT05GSUdfQVBDSV8zNTAxIDEKKyNkZWZpbmUgQ09ORklHX0FQQ0lfM1hYWCAxCisKKyNpbmNsdWRlICJhZGRpLWRhdGEvYWRkaV9jb21tb24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNjIwOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k2MjA4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcxMGY1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTYyMDguYwpAQCAtMCwwICsxLDM5MSBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hZGxfcGNpNjIwOC5jCisKKyAgICBIYXJkd2FyZSBkcml2ZXIgZm9yIEFETGluayA2MjA4IHNlcmllcyBjYXJkczoKKwljYXJkCSAgICAgfCB2b2x0YWdlIG91dHB1dCAgICB8IGN1cnJlbnQgb3V0cHV0CisJLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLQorCVBDSS02MjA4ViAgICB8ICA4IGNoYW5uZWxzICAgICAgIHwgLQorCVBDSS02MjE2ViAgICB8IDE2IGNoYW5uZWxzICAgICAgIHwgLQorCVBDSS02MjA4QSAgICB8ICA4IGNoYW5uZWxzICAgICAgIHwgOCBjaGFubmVscworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKy8qCitEcml2ZXI6IGFkbF9wY2k2MjA4CitEZXNjcmlwdGlvbjogQURMaW5rIFBDSS02MjA4QQorRGV2aWNlczogW0FETGlua10gUENJLTYyMDhBIChhZGxfcGNpNjIwOCkKK0F1dGhvcjogbnN5ZW93IDxuc3llb3dAcGQuamFyaW5nLm15PgorVXBkYXRlZDogRnJpLCAzMCBKYW4gMjAwNCAxNDo0NDoyNyArMDgwMAorU3RhdHVzOiB1bnRlc3RlZAorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIG5vbmUKKworUmVmZXJlbmNlczoKKwktIG5pXzY2MHguYworCS0gYWRsX3BjaTkxMTEuYwkJY29waWVkIHRoZSBlbnRpcmUgcGNpIHNldHVwIHNlY3Rpb24KKwktIGFkbF9wY2k5MTE4LmMKKyovCisvKgorICogVGhlc2UgaGVhZGVycyBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lLCBhbmQgYW55IGNvbW1lbnRzCisgKiB5b3Ugd2lzaCB0byBzYXkgYWJvdXQgdGhlIGRyaXZlci4gIFRoZSBjb21tZW50IGFyZWEgaXMgdGhlIHBsYWNlCisgKiB0byBwdXQgYW55IGtub3duIGJ1Z3MsIGxpbWl0YXRpb25zLCB1bnN1cHBvcnRlZCBmZWF0dXJlcywgc3VwcG9ydGVkCisgKiBjb21tYW5kIHRyaWdnZXJzLCB3aGV0aGVyIG9yIG5vdCBjb21tYW5kcyBhcmUgc3VwcG9ydGVkIG9uIHBhcnRpY3VsYXIKKyAqIHN1YmRldmljZXMsIGV0Yy4KKyAqCisgKiBTb21ld2hlcmUgaW4gdGhlIGNvbW1lbnQgc2hvdWxkIGJlIGluZm9ybWF0aW9uIGFib3V0IGNvbmZpZ3VyYXRpb24KKyAqIG9wdGlvbnMgdGhhdCBhcmUgdXNlZCB3aXRoIGNvbWVkaV9jb25maWcuCisgKi8KKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKKyNkZWZpbmUgUENJNjIwOF9EUklWRVJfTkFNRSAJImFkbF9wY2k2MjA4IgorCisvKiBCb2FyZCBkZXNjcmlwdGlvbnMgKi8KK3N0cnVjdCBwY2k2MjA4X2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIHNob3J0IGRldl9pZDsJLyogYGxzcGNpYCB3aWxsIHNob3cgeW91IHRoaXMgKi8KKwlpbnQgYW9fY2hhbnM7CisJLy9pbnQgYW9fYml0czsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpNjIwOF9ib2FyZCBwY2k2MjA4X2JvYXJkc1tdID0geworCS8qeworCSAgIG5hbWUgOiAgInBjaTYyMDh2IiwKKwkgICBkZXZfaWQgICAgICAgOiAgMHg2MjA4LCAgICAgIC8vbm90IHN1cmUKKwkgICBhb19jaGFuczogIDgKKwkgICAvLywgIGFvX2JpdHMgOiAgMTYKKwkgICB9LAorCSAgIHsKKwkgICBuYW1lIDogICJwY2k2MjE2diIsCisJICAgZGV2X2lkICAgICAgIDogIDB4NjIwOCwgICAgICAvL25vdCBzdXJlCisJICAgYW9fY2hhbnM6ICAxNgorCSAgIC8vLCAgYW9fYml0cyA6ICAxNgorCSAgIH0sICovCisJeworCSAgICAgIG5hbWU6CSJwY2k2MjA4YSIsCisJICAgICAgZGV2X2lkOgkweDYyMDgsCisJICAgICAgYW9fY2hhbnM6OAorCQkJLy8sICAgICBhb19iaXRzIDogIDE2CisJCX0KK307CisKKy8qIFRoaXMgaXMgdXNlZCBieSBtb2Rwcm9iZSB0byB0cmFuc2xhdGUgUENJIElEcyB0byBkcml2ZXJzLiAgU2hvdWxkCisgKiBvbmx5IGJlIHVzZWQgZm9yIFBDSSBhbmQgSVNBLVBuUCBkZXZpY2VzICovCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpNjIwOF9wY2lfdGFibGUpID0geworCS8veyBQQ0lfVkVORE9SX0lEX0FETElOSywgMHg2MjA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCisJLy97IFBDSV9WRU5ET1JfSURfQURMSU5LLCAweDYyMDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKKwl7UENJX1ZFTkRPUl9JRF9BRExJTkssIDB4NjIwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpNjIwOF9wY2lfdGFibGUpOworCisvKiBXaWxsIGJlIGluaXRpYWxpemVkIGluIHBjaTYyMDhfZmluZCBkZXZpY2UoKS4gKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHBjaTYyMDhfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IHBjaTYyMDhfcHJpdmF0ZSB7CisJaW50IGRhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CS8qIGZvciBhIFBDSSBkZXZpY2UgKi8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07CS8qIFVzZWQgZm9yIEFPIHJlYWRiYWNrICovCit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpNjIwOF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IHBjaTYyMDhfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNpNjIwOF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCisjZGVmaW5lIHBjaTYyMDhfYm9hcmRfbmJyIFwKKwkoc2l6ZW9mKHBjaTYyMDhfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgcGNpNjIwOF9ib2FyZCkpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNpNjIwOCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOlBDSTYyMDhfRFJJVkVSX05BTUUsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNpNjIwOF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNpNjIwOF9kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2k2MjA4LCBwY2k2MjA4X3BjaV90YWJsZSk7CisKK3N0YXRpYyBpbnQgcGNpNjIwOF9maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpOworc3RhdGljIGludAorcGNpNjIwOF9wY2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIHVuc2lnbmVkIGxvbmcgKmlvX2Jhc2VfcHRyLAorCWludCBkZXZfbWlub3IpOworCisvKnJlYWQvd3JpdGUgZnVuY3Rpb25zKi8KK3N0YXRpYyBpbnQgcGNpNjIwOF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBwY2k2MjA4X2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisvL3N0YXRpYyBpbnQgcGNpNjIwOF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisvLyAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOworLy9zdGF0aWMgaW50IHBjaTYyMDhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisvLyAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOworCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgcGNpNjIwOF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGlvX2Jhc2U7CisKKwlwcmludGsoImNvbWVkaSVkOiBwY2k2MjA4OiAiLCBkZXYtPm1pbm9yKTsKKworCXJldHZhbCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaTYyMDhfcHJpdmF0ZSkpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gcGNpNjIwOF9maW5kX2RldmljZShkZXYsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlyZXR2YWwgPSBwY2k2MjA4X3BjaV9zZXR1cChkZXZwcml2LT5wY2lfZGV2LCAmaW9fYmFzZSwgZGV2LT5taW5vcik7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkZXYtPmlvYmFzZSA9IGlvX2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisvKgorICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYW5hbG9nIG91dHB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOwkvL2FueXRoaW5nIGVsc2UgdG8gYWRkIGhlcmU/PworCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YW9fY2hhbnM7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsJLy8xNi1iaXQgREFDCisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOwkvL3RoaXMgbmVlZHMgdG8gYmUgY2hlY2tlZC4KKwlzLT5pbnNuX3dyaXRlID0gcGNpNjIwOF9hb193aW5zbjsKKwlzLT5pbnNuX3JlYWQgPSBwY2k2MjA4X2FvX3JpbnNuOworCisJLy9zPWRldi0+c3ViZGV2aWNlcysxOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCS8vcy0+dHlwZT1DT01FRElfU1VCRF9ESU87CisJLy9zLT5zdWJkZXZfZmxhZ3M9U0RGX1JFQURBQkxFfFNERl9XUklUQUJMRTsKKwkvL3MtPm5fY2hhbj0xNjsKKwkvL3MtPm1heGRhdGE9MTsKKwkvL3MtPnJhbmdlX3RhYmxlPSZyYW5nZV9kaWdpdGFsOworCS8vcy0+aW5zbl9iaXRzID0gcGNpNjIwOF9kaW9faW5zbl9iaXRzOworCS8vcy0+aW5zbl9jb25maWcgPSBwY2k2MjA4X2Rpb19pbnNuX2NvbmZpZzsKKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGNpNjIwOF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNpNjIwODogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPnBjaV9kZXYpIHsKKwkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKwkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpNjIwOF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGkgPSAwLCBEYXRhX1JlYWQ7CisJdW5zaWduZWQgc2hvcnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGxvbmcgaW52ZXJ0ID0gMSA8PCAoMTYgLSAxKTsKKwl1bnNpZ25lZCBsb25nIG91dF92YWx1ZTsKKwkvKiBXcml0aW5nIGEgbGlzdCBvZiB2YWx1ZXMgdG8gYW4gQU8gY2hhbm5lbCBpcyBwcm9iYWJseSBub3QKKwkgKiB2ZXJ5IHVzZWZ1bCwgYnV0IHRoYXQncyBob3cgdGhlIGludGVyZmFjZSBpcyBkZWZpbmVkLiAqLworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJb3V0X3ZhbHVlID0gZGF0YVtpXSBeIGludmVydDsKKwkJLyogYSB0eXBpY2FsIHByb2dyYW1taW5nIHNlcXVlbmNlICovCisJCWRvIHsKKwkJCURhdGFfUmVhZCA9IChpbncoZGV2LT5pb2Jhc2UpICYgMSk7CisJCX0gd2hpbGUgKERhdGFfUmVhZCk7CisJCW91dHcob3V0X3ZhbHVlLCBkZXYtPmlvYmFzZSArICgweDAyICogY2hhbikpOworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IG91dF92YWx1ZTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBpOworfQorCisvKiBBTyBzdWJkZXZpY2VzIHNob3VsZCBoYXZlIGEgcmVhZCBpbnNuIGFzIHdlbGwgYXMgYSB3cml0ZSBpbnNuLgorICogVXN1YWxseSB0aGlzIG1lYW5zIGNvcHlpbmcgYSB2YWx1ZSBzdG9yZWQgaW4gZGV2cHJpdi4gKi8KK3N0YXRpYyBpbnQgcGNpNjIwOF9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKworCXJldHVybiBpOworfQorCisvKiBESU8gZGV2aWNlcyBhcmUgc2xpZ2h0bHkgc3BlY2lhbC4gIEFsdGhvdWdoIGl0IGlzIHBvc3NpYmxlIHRvCisgKiBpbXBsZW1lbnQgdGhlIGluc25fcmVhZC9pbnNuX3dyaXRlIGludGVyZmFjZSwgaXQgaXMgbXVjaCBtb3JlCisgKiB1c2VmdWwgdG8gYXBwbGljYXRpb25zIGlmIHlvdSBpbXBsZW1lbnQgdGhlIGluc25fYml0cyBpbnRlcmZhY2UuCisgKiBUaGlzIGFsbG93cyBwYWNrZWQgcmVhZGluZy93cml0aW5nIG9mIHRoZSBESU8gY2hhbm5lbHMuICBUaGUKKyAqIGNvbWVkaSBjb3JlIGNhbiBjb252ZXJ0IGJldHdlZW4gaW5zbl9iaXRzIGFuZCBpbnNuX3JlYWQvd3JpdGUgKi8KKy8vc3RhdGljIGludCBwY2k2MjA4X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKy8vICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkKKy8veworLy8gICAgICBpZihpbnNuLT5uIT0yKXJldHVybiAtRUlOVkFMOworCisJLyogVGhlIGluc24gZGF0YSBpcyBhIG1hc2sgaW4gZGF0YVswXSBhbmQgdGhlIG5ldyBkYXRhCisJICogaW4gZGF0YVsxXSwgZWFjaCBjaGFubmVsIGNvb3Jlc3BvbmRpbmcgdG8gYSBiaXQuICovCisvLyAgICAgIGlmKGRhdGFbMF0peworLy8gICAgICAgICAgICAgIHMtPnN0YXRlICY9IH5kYXRhWzBdOworLy8gICAgICAgICAgICAgIHMtPnN0YXRlIHw9IGRhdGFbMF0mZGF0YVsxXTsKKwkJLyogV3JpdGUgb3V0IHRoZSBuZXcgZGlnaXRhbCBvdXRwdXQgbGluZXMgKi8KKwkJLy9vdXR3KHMtPnN0YXRlLGRldi0+aW9iYXNlICsgU0tFTF9ESU8pOworLy8gICAgICB9CisKKwkvKiBvbiByZXR1cm4sIGRhdGFbMV0gY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBkaWdpdGFsCisJICogaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4gKi8KKwkvL2RhdGFbMV09aW53KGRldi0+aW9iYXNlICsgU0tFTF9ESU8pOworCS8qIG9yIHdlIGNvdWxkIGp1c3QgcmV0dXJuIHRoZSBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBvdXRwdXQgdmFsdWVzIGlmCisJICogaXQgd2FzIGEgcHVyZWx5IGRpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLworCS8vZGF0YVsxXT1zLT5zdGF0ZTsKKworLy8gICAgICByZXR1cm4gMjsKKy8vfQorCisvL3N0YXRpYyBpbnQgcGNpNjIwOF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKy8vICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkKKy8veworLy8gICAgICBpbnQgY2hhbj1DUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcworCSAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKKwkgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKKwkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KKworLy8gICAgICBpZihkYXRhWzBdPT1DT01FRElfT1VUUFVUKXsKKy8vICAgICAgICAgICAgICBzLT5pb19iaXRzIHw9IDE8PGNoYW47CisvLyAgICAgIH1lbHNleworLy8gICAgICAgICAgICAgIHMtPmlvX2JpdHMgJj0gfigxPDxjaGFuKTsKKy8vICAgICAgfQorCS8vb3V0dyhzLT5pb19iaXRzLGRldi0+aW9iYXNlICsgU0tFTF9ESU9fQ09ORklHKTsKKworLy8gICAgICByZXR1cm4gMTsKKy8vfQorCitzdGF0aWMgaW50IHBjaTYyMDhfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCWludCBpOworCisJZm9yIChwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXYgIT0gTlVMTDsKKwkJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXYpKSB7CisJCWlmIChwY2lfZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTkspIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBwY2k2MjA4X2JvYXJkX25icjsgaSsrKSB7CisJCQkJaWYgKHBjaTYyMDhfYm9hcmRzW2ldLmRldl9pZCA9PSBwY2lfZGV2LT5kZXZpY2UpIHsKKwkJCQkJLy8gd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/CisJCQkJCWlmICgoYnVzICE9IDApIHx8IChzbG90ICE9IDApKSB7CisJCQkJCQkvLyBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PworCQkJCQkJaWYgKHBjaV9kZXYtPmJ1cy0+bnVtYmVyCisJCQkJCQkJIT0gYnVzIHx8CisJCQkJCQkJUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pCisJCQkJCQkJIT0gc2xvdCkgeworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWRldi0+Ym9hcmRfcHRyID0gcGNpNjIwOF9ib2FyZHMgKyBpOworCQkJCQlnb3RvIGZvdW5kOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXByaW50aygiY29tZWRpJWQ6IG5vIHN1cHBvcnRlZCBib2FyZCBmb3VuZCEgKHJlcS4gYnVzL3Nsb3QgOiAlZC8lZClcbiIsCisJCWRldi0+bWlub3IsIGJ1cywgc2xvdCk7CisJcmV0dXJuIC1FSU87CisKKyAgICAgIGZvdW5kOgorCXByaW50aygiY29tZWRpJWQ6IGZvdW5kICVzIChiOnM6Zj0lZDolZDolZCkgLCBpcnE9JWRcbiIsCisJCWRldi0+bWlub3IsCisJCXBjaTYyMDhfYm9hcmRzW2ldLm5hbWUsCisJCXBjaV9kZXYtPmJ1cy0+bnVtYmVyLAorCQlQQ0lfU0xPVChwY2lfZGV2LT5kZXZmbiksCisJCVBDSV9GVU5DKHBjaV9kZXYtPmRldmZuKSwgcGNpX2Rldi0+aXJxKTsKKworCS8vIFRPRE86IFdhcm4gYWJvdXQgbm9uLXRlc3RlZCBib2FyZHMuCisJLy9zd2l0Y2goYm9hcmQtPmRldmljZV9pZCkKKwkvL3sKKwkvL307CisKKwlkZXZwcml2LT5wY2lfZGV2ID0gcGNpX2RldjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitwY2k2MjA4X3BjaV9zZXR1cChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgdW5zaWduZWQgbG9uZyAqaW9fYmFzZV9wdHIsCisJaW50IGRldl9taW5vcikKK3sKKwl1bnNpZ25lZCBsb25nIGlvX2Jhc2UsIGlvX3JhbmdlLCBsY3JfaW9fYmFzZSwgbGNyX2lvX3JhbmdlOworCisJLy8gRW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucworCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lfZGV2LCBQQ0k2MjA4X0RSSVZFUl9OQU1FKSA8IDApIHsKKwkJcHJpbnRrKCJjb21lZGklZDogRmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIsIGRldl9taW5vcik7CisJCXJldHVybiAtRUlPOworCX0KKwkvLyBSZWFkIGxvY2FsIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYmFzZSBhZGRyZXNzIFtQQ0lfQkFTRV9BRERSRVNTICMxXS4KKwlsY3JfaW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAxKTsKKwlsY3JfaW9fcmFuZ2UgPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXYsIDEpOworCisJcHJpbnRrKCJjb21lZGklZDogbG9jYWwgY29uZmlnIHJlZ2lzdGVycyBhdCBhZGRyZXNzIDB4JTRseCBbMHglNGx4XVxuIiwKKwkJZGV2X21pbm9yLCBsY3JfaW9fYmFzZSwgbGNyX2lvX3JhbmdlKTsKKworCS8vIFJlYWQgUENJNjIwOCByZWdpc3RlciBiYXNlIGFkZHJlc3MgW1BDSV9CQVNFX0FERFJFU1MgIzJdLgorCWlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMik7CisJaW9fcmFuZ2UgPSBwY2lfcmVzb3VyY2VfZW5kKHBjaV9kZXYsIDIpIC0gaW9fYmFzZSArIDE7CisKKwlwcmludGsoImNvbWVkaSVkOiA2MjA4IHJlZ2lzdGVycyBhdCBhZGRyZXNzIDB4JTRseCBbMHglNGx4XVxuIiwKKwkJZGV2X21pbm9yLCBpb19iYXNlLCBpb19yYW5nZSk7CisKKwkqaW9fYmFzZV9wdHIgPSBpb19iYXNlOworCS8vZGV2cHJpdi0+aW9fcmFuZ2UgPSBpb19yYW5nZTsKKwkvL2RldnByaXYtPmlzX3ZhbGlkPTA7CisJLy9kZXZwcml2LT5sY3JfaW9fYmFzZT1sY3JfaW9fYmFzZTsKKwkvL2RldnByaXYtPmxjcl9pb19yYW5nZT1sY3JfaW9fcmFuZ2U7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzI5Ni5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k3Mjk2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQwZjlhYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzI5Ni5jCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2FkbF9wY2k3Mjk2LmMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGFkbF9wY2k3Mjk2CitEZXNjcmlwdGlvbjogRHJpdmVyIGZvciB0aGUgQWRsaW5rIFBDSS03Mjk2IDk2IGNoLiBkaWdpdGFsIGlvIGJvYXJkCitEZXZpY2VzOiBbQURMaW5rXSBQQ0ktNzI5NiAoYWRsX3BjaTcyOTYpCitBdXRob3I6IEpvbiBHcmllcnNvbiA8amRAcmVua28uY28udWs+CitVcGRhdGVkOiBNb24sIDE0IEFwciAyMDA4IDE1OjA1OjU2ICswMTAwCitTdGF0dXM6IHRlc3RpbmcKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBzdXBwb3J0ZWQKKyAgUENJIGRldmljZSBmb3VuZCB3aWxsIGJlIHVzZWQuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiODI1NS5oIgorLy8gI2luY2x1ZGUgIjgyNTMuaCIKKworI2RlZmluZSBQT1JUMUEgMAorI2RlZmluZSBQT1JUMkEgNAorI2RlZmluZSBQT1JUM0EgOAorI2RlZmluZSBQT1JUNEEgMTIKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDSTcyOTYgMHg3Mjk2CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShhZGxfcGNpNzI5Nl9wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0FETElOSywgUENJX0RFVklDRV9JRF9QQ0k3Mjk2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLAorCQkwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZGxfcGNpNzI5Nl9wY2lfdGFibGUpOworCitzdHJ1Y3QgYWRsX3BjaTcyOTZfcHJpdmF0ZSB7CisJaW50IGRhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7Cit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBhZGxfcGNpNzI5Nl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGFkbF9wY2k3Mjk2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGFkbF9wY2k3Mjk2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FkbF9wY2k3Mjk2ID0geworICAgICAgZHJpdmVyX25hbWU6ImFkbF9wY2k3Mjk2IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphZGxfcGNpNzI5Nl9hdHRhY2gsCisgICAgICBkZXRhY2g6YWRsX3BjaTcyOTZfZGV0YWNoLAorfTsKKworc3RhdGljIGludCBhZGxfcGNpNzI5Nl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgYnVzLCBzbG90OworCWludCByZXQ7CisKKwlwcmludGsoImNvbWVkaTogYXR0ZW1wdCB0byBhdHRhY2guLi5cbiIpOworCXByaW50aygiY29tZWRpJWQ6IGFkbF9wY2k3NDMyXG4iLCBkZXYtPm1pbm9yKTsKKworCWRldi0+Ym9hcmRfbmFtZSA9ICJwY2k3NDMyIjsKKwlidXMgPSBpdC0+b3B0aW9uc1swXTsKKwlzbG90ID0gaXQtPm9wdGlvbnNbMV07CisKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgYWRsX3BjaTcyOTZfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lkZXYgIT0gTlVMTDsKKwkJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCisJCWlmIChwY2lkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FETElOSyAmJgorCQkJcGNpZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QQ0k3Mjk2KSB7CisJCQlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJCQkvKiByZXF1ZXN0ZWQgcGFydGljdWxhciBidXMvc2xvdCAqLworCQkJCWlmIChwY2lkZXYtPmJ1cy0+bnVtYmVyICE9IGJ1cworCQkJCQl8fCBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSAhPSBzbG90KSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWRldnByaXYtPnBjaV9kZXYgPSBwY2lkZXY7CisJCQlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCAiYWRsX3BjaTcyOTYiKSA8IDApIHsKKwkJCQlwcmludGsoImNvbWVkaSVkOiBGYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIiwgZGV2LT5taW5vcik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisKKwkJCWRldi0+aW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisJCQlwcmludGsoImNvbWVkaTogYmFzZSBhZGRyICU0bHhcbiIsIGRldi0+aW9iYXNlKTsKKworCQkJLy8gZm91ciA4MjU1IGRpZ2l0YWwgaW8gc3ViZGV2aWNlcworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJCQlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwKKwkJCQkodW5zaWduZWQgbG9uZykoZGV2LT5pb2Jhc2UpKTsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJCQlyZXQgPSBzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwKKwkJCQkodW5zaWduZWQgbG9uZykoZGV2LT5pb2Jhc2UgKyBQT1JUMkEpKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCQkJcmV0ID0gc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsCisJCQkJKHVuc2lnbmVkIGxvbmcpKGRldi0+aW9iYXNlICsgUE9SVDNBKSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkJCXJldCA9IHN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLAorCQkJCSh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArIFBPUlQ0QSkpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIHJldDsKKworCQkJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcHJpbnRrKCJjb21lZGklZDogbm8gc3VwcG9ydGVkIGJvYXJkIGZvdW5kISAocmVxLiBidXMvc2xvdCA6ICVkLyVkKVxuIiwKKwkJZGV2LT5taW5vciwgYnVzLCBzbG90KTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBhZGxfcGNpNzI5Nl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNpNzQzMjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPnBjaV9kZXYpIHsKKwkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKwkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJfQorCS8vIGRldGFjaCBmb3VyIDgyNTUgZGlnaXRhbCBpbyBzdWJkZXZpY2VzCisJaWYgKGRldi0+c3ViZGV2aWNlcykgeworCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMCk7CisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAxKTsKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOworCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMyk7CisKKwl9CisKKwlyZXR1cm4gMDsKK30KKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYWRsX3BjaTcyOTYsIGFkbF9wY2k3Mjk2X3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTc0MzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpNzQzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZjE3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTc0MzIuYwpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hZGxfcGNpNzQzMi5jCisKKyAgICBIYXJkd2FyZSBjb21lZGkgZHJpdmVyIGZvdCBQQ0k3NDMyIEFkbGluayBjYXJkCisgICAgQ29weXJpZ2h0IChDKSAyMDA0IE1pY2hlbCBMYWNoaW5lIDxtaWtlQG1pa2VsYWNoYWluZS5jYT4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogYWRsX3BjaTc0MzIKK0Rlc2NyaXB0aW9uOiBEcml2ZXIgZm9yIHRoZSBBZGxpbmsgUENJLTc0MzIgNjQgY2guIGlzb2xhdGVkIGRpZ2l0YWwgaW8gYm9hcmQKK0RldmljZXM6IFtBRExpbmtdIFBDSS03NDMyIChhZGxfcGNpNzQzMikKK0F1dGhvcjogTWljaGVsIExhY2hhaW5lIDxtaWtlQG1pa2VsYWNoYWluZS5jYT4KK1N0YXR1czogZXhwZXJpbWVudGFsCitVcGRhdGVkOiBNb24sIDE0IEFwciAyMDA4IDE1OjA4OjE0ICswMTAwCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3Qgc3VwcG9ydGVkCisgIFBDSSBkZXZpY2UgZm91bmQgd2lsbCBiZSB1c2VkLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2RlZmluZSBQQ0k3NDMyX0RJICAgICAgMHgwMAorI2RlZmluZSBQQ0k3NDMyX0RPCSAgICAweDAwCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQ0k3NDMyIDB4NzQzMgorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYWRsX3BjaTc0MzJfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BRExJTkssIFBDSV9ERVZJQ0VfSURfUENJNzQzMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwKKwkJMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWRsX3BjaTc0MzJfcGNpX3RhYmxlKTsKKworc3RydWN0IGFkbF9wY2k3NDMyX3ByaXZhdGUgeworCWludCBkYXRhOworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGFkbF9wY2k3NDMyX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgYWRsX3BjaTc0MzJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgYWRsX3BjaTc0MzJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYWRsX3BjaTc0MzIgPSB7CisgICAgICBkcml2ZXJfbmFtZToiYWRsX3BjaTc0MzIiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmFkbF9wY2k3NDMyX2F0dGFjaCwKKyAgICAgIGRldGFjaDphZGxfcGNpNzQzMl9kZXRhY2gsCit9OworCisvKiBEaWdpdGFsIElPICovCisKK3N0YXRpYyBpbnQgYWRsX3BjaTc0MzJfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYWRsX3BjaTc0MzJfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qICAgICAgICAgICAgKi8KKworc3RhdGljIGludCBhZGxfcGNpNzQzMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgYnVzLCBzbG90OworCisJcHJpbnRrKCJjb21lZGk6IGF0dGVtcHQgdG8gYXR0YWNoLi4uXG4iKTsKKwlwcmludGsoImNvbWVkaSVkOiBhZGxfcGNpNzQzMlxuIiwgZGV2LT5taW5vcik7CisKKwlkZXYtPmJvYXJkX25hbWUgPSAicGNpNzQzMiI7CisJYnVzID0gaXQtPm9wdGlvbnNbMF07CisJc2xvdCA9IGl0LT5vcHRpb25zWzFdOworCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGFkbF9wY2k3NDMyX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpZGV2ICE9IE5VTEw7CisJCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKworCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTksgJiYKKwkJCXBjaWRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUENJNzQzMikgeworCQkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQkJLyogcmVxdWVzdGVkIHBhcnRpY3VsYXIgYnVzL3Nsb3QgKi8KKwkJCQlpZiAocGNpZGV2LT5idXMtPm51bWJlciAhPSBidXMKKwkJCQkJfHwgUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0gc2xvdCkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlkZXZwcml2LT5wY2lfZGV2ID0gcGNpZGV2OworCQkJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgImFkbF9wY2k3NDMyIikgPCAwKSB7CisJCQkJcHJpbnRrKCJjb21lZGklZDogRmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIsIGRldi0+bWlub3IpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJZGV2LT5pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKwkJCXByaW50aygiY29tZWRpOiBiYXNlIGFkZHIgJTRseFxuIiwgZGV2LT5pb2Jhc2UpOworCisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJCXMtPnN1YmRldl9mbGFncyA9CisJCQkJU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJCQlzLT5uX2NoYW4gPSAzMjsKKwkJCXMtPm1heGRhdGEgPSAxOworCQkJcy0+bGVuX2NoYW5saXN0ID0gMzI7CisJCQlzLT5pb19iaXRzID0gMHgwMDAwMDAwMDsKKwkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCQlzLT5pbnNuX2JpdHMgPSBhZGxfcGNpNzQzMl9kaV9pbnNuX2JpdHM7CisKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCQlTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwkJCXMtPm5fY2hhbiA9IDMyOworCQkJcy0+bWF4ZGF0YSA9IDE7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSAzMjsKKwkJCXMtPmlvX2JpdHMgPSAweGZmZmZmZmZmOworCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJCXMtPmluc25fYml0cyA9IGFkbF9wY2k3NDMyX2RvX2luc25fYml0czsKKworCQkJcHJpbnRrKCJjb21lZGk6IGF0dGFjaGVkXG4iKTsKKworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlwcmludGsoImNvbWVkaSVkOiBubyBzdXBwb3J0ZWQgYm9hcmQgZm91bmQhIChyZXEuIGJ1cy9zbG90IDogJWQvJWQpXG4iLAorCQlkZXYtPm1pbm9yLCBidXMsIHNsb3QpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k3NDMyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBwY2k3NDMyOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+cGNpX2RldikgeworCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGxfcGNpNzQzMl9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXByaW50aygiY29tZWRpOiBwY2k3NDMyX2RvX2luc25fYml0cyBjYWxsZWRcbiIpOworCXByaW50aygiY29tZWRpOiBkYXRhMDogJTh4IGRhdGExOiAlOHhcbiIsIGRhdGFbMF0sIGRhdGFbMV0pOworCisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKworCQlwcmludGsoImNvbWVkaTogb3V0OiAlOHggb24gaW9iYXNlICU0bHhcbiIsIHMtPnN0YXRlLAorCQkJZGV2LT5pb2Jhc2UgKyBQQ0k3NDMyX0RPKTsKKwkJb3V0bChzLT5zdGF0ZSAmIDB4ZmZmZmZmZmYsIGRldi0+aW9iYXNlICsgUENJNzQzMl9ETyk7CisJfQorCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k3NDMyX2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJcHJpbnRrKCJjb21lZGk6IHBjaTc0MzJfZGlfaW5zbl9iaXRzIGNhbGxlZFxuIik7CisJcHJpbnRrKCJjb21lZGk6IGRhdGEwOiAlOHggZGF0YTE6ICU4eFxuIiwgZGF0YVswXSwgZGF0YVsxXSk7CisKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k3NDMyX0RJKSAmIDB4ZmZmZmZmZmY7CisJcHJpbnRrKCJjb21lZGk6IGRhdGExICU4eFxuIiwgZGF0YVsxXSk7CisKKwlyZXR1cm4gMjsKK30KKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYWRsX3BjaTc0MzIsIGFkbF9wY2k3NDMyX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTgxNjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpODE2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZjkwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTgxNjQuYwpAQCAtMCwwICsxLDUxMiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hZGxfcGNpODE2NC5jCisKKyAgICBIYXJkd2FyZSBjb21lZGkgZHJpdmVyIGZvdCBQQ0ktODE2NCBBZGxpbmsgY2FyZAorICAgIENvcHlyaWdodCAoQykgMjAwNCBNaWNoZWwgTGFjaGluZSA8bWlrZUBtaWtlbGFjaGFpbmUuY2E+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGFkbF9wY2k4MTY0CitEZXNjcmlwdGlvbjogRHJpdmVyIGZvciB0aGUgQWRsaW5rIFBDSS04MTY0IDQgQXhlcyBNb3Rpb24gQ29udHJvbCBib2FyZAorRGV2aWNlczogW0FETGlua10gUENJLTgxNjQgKGFkbF9wY2k4MTY0KQorQXV0aG9yOiBNaWNoZWwgTGFjaGFpbmUgPG1pa2VAbWlrZWxhY2hhaW5lLmNhPgorU3RhdHVzOiBleHBlcmltZW50YWwKK1VwZGF0ZWQ6IE1vbiwgMTQgQXByIDIwMDggMTU6MTA6MzIgKzAxMDAKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBzdXBwb3J0ZWQKKyAgUENJIGRldmljZSBmb3VuZCB3aWxsIGJlIHVzZWQuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiODI1My5oIgorCisjZGVmaW5lIFBDSTgxNjRfQVhJU19YICAweDAwCisjZGVmaW5lIFBDSTgxNjRfQVhJU19ZICAweDA4CisjZGVmaW5lIFBDSTgxNjRfQVhJU19aICAweDEwCisjZGVmaW5lIFBDSTgxNjRfQVhJU19VICAweDE4CisKKyNkZWZpbmUgUENJODE2NF9NU1RTCTB4MDAKKyNkZWZpbmUgUENJODE2NF9TU1RTICAgIDB4MDIKKyNkZWZpbmUgUENJODE2NF9CVUYwICAgIDB4MDQKKyNkZWZpbmUgUENJODE2NF9CVUYxICAgIDB4MDYKKworI2RlZmluZSBQQ0k4MTY0X0NNRCAgICAgMHgwMAorI2RlZmluZSBQQ0k4MTY0X09UUCAgICAgMHgwMgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENJODE2NCAweDgxNjQKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGFkbF9wY2k4MTY0X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQURMSU5LLCBQQ0lfREVWSUNFX0lEX1BDSTgxNjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsCisJCTAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFkbF9wY2k4MTY0X3BjaV90YWJsZSk7CisKK3N0cnVjdCBhZGxfcGNpODE2NF9wcml2YXRlIHsKKwlpbnQgZGF0YTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBhZGxfcGNpODE2NF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2FkbF9wY2k4MTY0ID0geworICAgICAgZHJpdmVyX25hbWU6ImFkbF9wY2k4MTY0IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphZGxfcGNpODE2NF9hdHRhY2gsCisgICAgICBkZXRhY2g6YWRsX3BjaTgxNjRfZGV0YWNoLAorfTsKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3JlYWRfbXN0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fcmVhZF9zc3RzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl9yZWFkX2J1ZjAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3JlYWRfYnVmMShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fd3JpdGVfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9vdHAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3dyaXRlX2J1ZjAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3dyaXRlX2J1ZjEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhZGxfcGNpODE2NF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgYnVzLCBzbG90OworCisJcHJpbnRrKCJjb21lZGk6IGF0dGVtcHQgdG8gYXR0YWNoLi4uXG4iKTsKKwlwcmludGsoImNvbWVkaSVkOiBhZGxfcGNpODE2NFxuIiwgZGV2LT5taW5vcik7CisKKwlkZXYtPmJvYXJkX25hbWUgPSAicGNpODE2NCI7CisJYnVzID0gaXQtPm9wdGlvbnNbMF07CisJc2xvdCA9IGl0LT5vcHRpb25zWzFdOworCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGFkbF9wY2k4MTY0X3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpZGV2ICE9IE5VTEw7CisJCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKworCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTksgJiYKKwkJCXBjaWRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUENJODE2NCkgeworCQkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQkJLyogcmVxdWVzdGVkIHBhcnRpY3VsYXIgYnVzL3Nsb3QgKi8KKwkJCQlpZiAocGNpZGV2LT5idXMtPm51bWJlciAhPSBidXMKKwkJCQkJfHwgUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0gc2xvdCkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlkZXZwcml2LT5wY2lfZGV2ID0gcGNpZGV2OworCQkJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgImFkbF9wY2k4MTY0IikgPCAwKSB7CisJCQkJcHJpbnRrKCJjb21lZGklZDogRmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIsIGRldi0+bWlub3IpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQkJZGV2LT5pb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKwkJCXByaW50aygiY29tZWRpOiBiYXNlIGFkZHIgJTRseFxuIiwgZGV2LT5pb2Jhc2UpOworCisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9QUk9DOworCQkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCQkJcy0+bl9jaGFuID0gNDsKKwkJCXMtPm1heGRhdGEgPSAweGZmZmY7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSA0OworCQkJLy9zLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9heGlzOworCQkJcy0+aW5zbl9yZWFkID0gYWRsX3BjaTgxNjRfaW5zbl9yZWFkX21zdHM7CisJCQlzLT5pbnNuX3dyaXRlID0gYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9jbWQ7CisKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1BST0M7CisJCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCQlzLT5uX2NoYW4gPSA0OworCQkJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IDQ7CisJCQkvL3MtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2F4aXM7CisJCQlzLT5pbnNuX3JlYWQgPSBhZGxfcGNpODE2NF9pbnNuX3JlYWRfc3N0czsKKwkJCXMtPmluc25fd3JpdGUgPSBhZGxfcGNpODE2NF9pbnNuX3dyaXRlX290cDsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfUFJPQzsKKwkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJCXMtPm5fY2hhbiA9IDQ7CisJCQlzLT5tYXhkYXRhID0gMHhmZmZmOworCQkJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwkJCS8vcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYXhpczsKKwkJCXMtPmluc25fcmVhZCA9IGFkbF9wY2k4MTY0X2luc25fcmVhZF9idWYwOworCQkJcy0+aW5zbl93cml0ZSA9IGFkbF9wY2k4MTY0X2luc25fd3JpdGVfYnVmMDsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfUFJPQzsKKwkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJCXMtPm5fY2hhbiA9IDQ7CisJCQlzLT5tYXhkYXRhID0gMHhmZmZmOworCQkJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwkJCS8vcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYXhpczsKKwkJCXMtPmluc25fcmVhZCA9IGFkbF9wY2k4MTY0X2luc25fcmVhZF9idWYxOworCQkJcy0+aW5zbl93cml0ZSA9IGFkbF9wY2k4MTY0X2luc25fd3JpdGVfYnVmMTsKKworCQkJcHJpbnRrKCJjb21lZGk6IGF0dGFjaGVkXG4iKTsKKworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlwcmludGsoImNvbWVkaSVkOiBubyBzdXBwb3J0ZWQgYm9hcmQgZm91bmQhIChyZXEuIGJ1cy9zbG90IDogJWQvJWQpXG4iLAorCQlkZXYtPm1pbm9yLCBidXMsIHNsb3QpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBwY2k4MTY0OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+cGNpX2RldikgeworCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3JlYWRfbXN0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGF4aXMsIGF4aXNfcmVnOworCWNoYXIgKmF4aXNuYW1lOworCisJYXhpcyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJc3dpdGNoIChheGlzKSB7CisJY2FzZSAwOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19ZOworCQlheGlzbmFtZSA9ICJZIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19aOworCQlheGlzbmFtZSA9ICJaIjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19VOworCQlheGlzbmFtZSA9ICJVIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJfQorCisJZGF0YVswXSA9IGludyhkZXYtPmlvYmFzZSArIGF4aXNfcmVnICsgUENJODE2NF9NU1RTKTsKKwlwcmludGsoImNvbWVkaTogcGNpODE2NCBNU1RTIHJlYWQgLT4gJTA0WDolMDRYIG9uIGF4aXMgJXNcbiIsIGRhdGFbMF0sCisJCWRhdGFbMV0sIGF4aXNuYW1lKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFkbF9wY2k4MTY0X2luc25fcmVhZF9zc3RzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgYXhpcywgYXhpc19yZWc7CisJY2hhciAqYXhpc25hbWU7CisKKwlheGlzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGF4aXMpIHsKKwljYXNlIDA6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCQlicmVhazsKKwljYXNlIDE6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1k7CisJCWF4aXNuYW1lID0gIlkiOworCQlicmVhazsKKwljYXNlIDI6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1o7CisJCWF4aXNuYW1lID0gIloiOworCQlicmVhazsKKwljYXNlIDM6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1U7CisJCWF4aXNuYW1lID0gIlUiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwl9CisKKwlkYXRhWzBdID0gaW53KGRldi0+aW9iYXNlICsgYXhpc19yZWcgKyBQQ0k4MTY0X1NTVFMpOworCXByaW50aygiY29tZWRpOiBwY2k4MTY0IFNTVFMgcmVhZCAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl9yZWFkX2J1ZjAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBheGlzLCBheGlzX3JlZzsKKwljaGFyICpheGlzbmFtZTsKKworCWF4aXMgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYXhpcykgeworCWNhc2UgMDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWTsKKwkJYXhpc25hbWUgPSAiWSI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWjsKKwkJYXhpc25hbWUgPSAiWiI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfVTsKKwkJYXhpc25hbWUgPSAiVSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCX0KKworCWRhdGFbMF0gPSBpbncoZGV2LT5pb2Jhc2UgKyBheGlzX3JlZyArIFBDSTgxNjRfQlVGMCk7CisJcHJpbnRrKCJjb21lZGk6IHBjaTgxNjQgQlVGMCByZWFkIC0+ICUwNFg6JTA0WCBvbiBheGlzICVzXG4iLCBkYXRhWzBdLAorCQlkYXRhWzFdLCBheGlzbmFtZSk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBhZGxfcGNpODE2NF9pbnNuX3JlYWRfYnVmMShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGF4aXMsIGF4aXNfcmVnOworCisJY2hhciAqYXhpc25hbWU7CisKKwlheGlzID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGF4aXMpIHsKKwljYXNlIDA6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCQlicmVhazsKKwljYXNlIDE6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1k7CisJCWF4aXNuYW1lID0gIlkiOworCQlicmVhazsKKwljYXNlIDI6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1o7CisJCWF4aXNuYW1lID0gIloiOworCQlicmVhazsKKwljYXNlIDM6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1U7CisJCWF4aXNuYW1lID0gIlUiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwl9CisKKwlkYXRhWzBdID0gaW53KGRldi0+aW9iYXNlICsgYXhpc19yZWcgKyBQQ0k4MTY0X0JVRjEpOworCXByaW50aygiY29tZWRpOiBwY2k4MTY0IEJVRjEgcmVhZCAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBheGlzLCBheGlzX3JlZzsKKworCWNoYXIgKmF4aXNuYW1lOworCisJYXhpcyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJc3dpdGNoIChheGlzKSB7CisJY2FzZSAwOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19ZOworCQlheGlzbmFtZSA9ICJZIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19aOworCQlheGlzbmFtZSA9ICJaIjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19VOworCQlheGlzbmFtZSA9ICJVIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJfQorCisJb3V0dyhkYXRhWzBdLCBkZXYtPmlvYmFzZSArIGF4aXNfcmVnICsgUENJODE2NF9DTUQpOworCXByaW50aygiY29tZWRpOiBwY2k4MTY0IENNRCB3cml0ZSAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9vdHAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBheGlzLCBheGlzX3JlZzsKKworCWNoYXIgKmF4aXNuYW1lOworCisJYXhpcyA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJc3dpdGNoIChheGlzKSB7CisJY2FzZSAwOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19YOworCQlheGlzbmFtZSA9ICJYIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19ZOworCQlheGlzbmFtZSA9ICJZIjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19aOworCQlheGlzbmFtZSA9ICJaIjsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlheGlzX3JlZyA9IFBDSTgxNjRfQVhJU19VOworCQlheGlzbmFtZSA9ICJVIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJfQorCisJb3V0dyhkYXRhWzBdLCBkZXYtPmlvYmFzZSArIGF4aXNfcmVnICsgUENJODE2NF9PVFApOworCXByaW50aygiY29tZWRpOiBwY2k4MTY0IE9UUCB3cml0ZSAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9idWYwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgYXhpcywgYXhpc19yZWc7CisKKwljaGFyICpheGlzbmFtZTsKKworCWF4aXMgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYXhpcykgeworCWNhc2UgMDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWTsKKwkJYXhpc25hbWUgPSAiWSI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWjsKKwkJYXhpc25hbWUgPSAiWiI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfVTsKKwkJYXhpc25hbWUgPSAiVSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCX0KKworCW91dHcoZGF0YVswXSwgZGV2LT5pb2Jhc2UgKyBheGlzX3JlZyArIFBDSTgxNjRfQlVGMCk7CisJcHJpbnRrKCJjb21lZGk6IHBjaTgxNjQgQlVGMCB3cml0ZSAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWRsX3BjaTgxNjRfaW5zbl93cml0ZV9idWYxKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgYXhpcywgYXhpc19yZWc7CisKKwljaGFyICpheGlzbmFtZTsKKworCWF4aXMgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoYXhpcykgeworCWNhc2UgMDoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWDsKKwkJYXhpc25hbWUgPSAiWCI7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWTsKKwkJYXhpc25hbWUgPSAiWSI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfWjsKKwkJYXhpc25hbWUgPSAiWiI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYXhpc19yZWcgPSBQQ0k4MTY0X0FYSVNfVTsKKwkJYXhpc25hbWUgPSAiVSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF4aXNfcmVnID0gUENJODE2NF9BWElTX1g7CisJCWF4aXNuYW1lID0gIlgiOworCX0KKworCW91dHcoZGF0YVswXSwgZGV2LT5pb2Jhc2UgKyBheGlzX3JlZyArIFBDSTgxNjRfQlVGMSk7CisJcHJpbnRrKCJjb21lZGk6IHBjaTgxNjQgQlVGMSB3cml0ZSAtPiAlMDRYOiUwNFggb24gYXhpcyAlc1xuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSwgYXhpc25hbWUpOworCisJcmV0dXJuIDI7Cit9CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2FkbF9wY2k4MTY0LCBhZGxfcGNpODE2NF9wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTExLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRsX3BjaTkxMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGE2MWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTExLmMKQEAgLTAsMCArMSwxMzkxIEBACisvKgorCisgICBjb21lZGkvZHJpdmVycy9hZGxfcGNpOTExMS5jCisKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgUENJOTExMSBBRExpbmsgY2FyZHM6CisKKyAgICAgUENJLTkxMTFIUgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSBFbW1hbnVlbCBQYWNhdWQgPGVtbWFudWVsLnBhY2F1ZEB1bml2LXBvaXRpZXJzLmZyPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisvKgorRHJpdmVyOiBhZGxfcGNpOTExMQorRGVzY3JpcHRpb246IEFkbGluayBQQ0ktOTExMUhSCitBdXRob3I6IEVtbWFudWVsIFBhY2F1ZCA8ZW1tYW51ZWwucGFjYXVkQHVuaXYtcG9pdGllcnMuZnI+CitEZXZpY2VzOiBbQURMaW5rXSBQQ0ktOTExMUhSIChhZGxfcGNpOTExMSkKK1N0YXR1czogZXhwZXJpbWVudGFsCisKK1N1cHBvcnRzOgorCisgIC0gYWlfaW5zbiByZWFkCisgIC0gYW9faW5zbiByZWFkL3dyaXRlCisgIC0gZGlfaW5zbiByZWFkCisgIC0gZG9faW5zbiByZWFkL3dyaXRlCisgIC0gYWlfZG9fY21kIG1vZGUgd2l0aCB0aGUgZm9sbG93aW5nIHNvdXJjZXM6CisKKyAgICAtIHN0YXJ0X3NyYyAJCVRSSUdfTk9XCisgICAgLSBzY2FuX2JlZ2luX3NyYyAJCVRSSUdfRk9MTE9XCVRSSUdfVElNRVIJVFJJR19FWFQKKyAgICAtIGNvbnZlcnRfc3JjCQkJCVRSSUdfVElNRVIJVFJJR19FWFQKKyAgICAtIHNjYW5fZW5kX3NyYwkJVFJJR19DT1VOVAorICAgIC0gc3RvcF9zcmMJCQlUUklHX0NPVU5UCVRSSUdfTk9ORQorCisgICAgVGhlIHNjYW5uZWQgY2hhbm5lbHMgbXVzdCBiZSBjb25zZWN1dGl2ZSBhbmQgc3RhcnQgZnJvbSAwLiBUaGV5IG11c3QKKyAgICBhbGwgaGF2ZSB0aGUgc2FtZSByYW5nZSBhbmQgYXJlZi4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorCisgICAgWzBdIC0gUENJIGJ1cyBudW1iZXIgKG9wdGlvbmFsKQorICAgIFsxXSAtIFBDSSBzbG90IG51bWJlciAob3B0aW9uYWwpCisKKyAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSQorICAgIGRldmljZSB3aWxsIGJlIHVzZWQuCisKKyovCisKKy8qCitDSEFOR0VMT0c6CisKKyAgMjAwNS8wMi8xNyBFeHRlbmQgQUkgc3RyZWFtaW5nIGNhcGFiaWxpdGllcy4gTm93LCBzY2FuX2JlZ2luX2FyZyBjYW4gYmUKKyAgYSBtdWx0aXBsZSBvZiBjaGFubGlzdF9sZW4qY29udmVydF9hcmcuCisgIDIwMDIvMDIvMTkgRml4ZWQgdGhlIHR3bydzIGNvbXBsZW1lbnQgY29udmVyc2lvbiBpbiBwY2k5MTExXyhocl8pYWlfZ2V0X2RhdGEuCisgIDIwMDIvMDIvMTggQWRkZWQgZXh0ZXJuYWwgdHJpZ2dlciBzdXBwb3J0IGZvciBhbmFsb2cgaW5wdXQuCisKK1RPRE86CisKKyAgLSBSZWFsbHkgdGVzdCBpbXBsZW1lbnRlZCBmdW5jdGlvbmFsaXR5LgorICAtIEFkZCBzdXBwb3J0IGZvciB0aGUgUENJLTkxMTFERyB3aXRoIGEgcHJvYmUgcm91dGluZSB0byBpZGVudGlmeSB0aGUgY2FyZCB0eXBlCisgICAgKHBlcmhhcHMgd2l0aCB0aGUgaGVscCBvZiB0aGUgY2hhbm5lbCBudW1iZXIgcmVhZGJhY2sgb2YgdGhlIEEvRCBEYXRhIHJlZ2lzdGVyKS4KKyAgLSBBZGQgZXh0ZXJuYWwgbXVsdGlwbGV4ZXIgc3VwcG9ydC4KKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyNkZWZpbmUgUENJOTExMV9EUklWRVJfTkFNRSAJImFkbF9wY2k5MTExIgorI2RlZmluZSBQQ0k5MTExX0hSX0RFVklDRV9JRCAJMHg5MTExCisKKy8qICBUT0RPOiBBZGQgb3RoZXIgcGNpOTExMSBib2FyZCBpZCAqLworCisjZGVmaW5lIFBDSTkxMTFfSU9fUkFOR0UgCTB4MDEwMAorCisjZGVmaW5lIFBDSTkxMTFfRklGT19IQUxGX1NJWkUJNTEyCisKKyNkZWZpbmUgUENJOTExMV9BSV9DSEFOTkVMX05CUgkJCTE2CisKKyNkZWZpbmUgUENJOTExMV9BSV9SRVNPTFVUSU9OCQkJMTIKKyNkZWZpbmUgUENJOTExMV9BSV9SRVNPTFVUSU9OX01BU0sJCTB4MEZGRgorI2RlZmluZSBQQ0k5MTExX0FJX1JFU09MVVRJT05fMl9DTVBfQklUCQkweDA4MDAKKworI2RlZmluZSBQQ0k5MTExX0hSX0FJX1JFU09MVVRJT04JCTE2CisjZGVmaW5lIFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl9NQVNLCQkweEZGRkYKKyNkZWZpbmUgUENJOTExMV9IUl9BSV9SRVNPTFVUSU9OXzJfQ01QX0JJVAkweDgwMDAKKworI2RlZmluZSBQQ0k5MTExX0FJX0FDUVVJU0lUSU9OX1BFUklPRF9NSU5fTlMJMTAwMDAKKyNkZWZpbmUgUENJOTExMV9BT19DSEFOTkVMX05CUgkJCTEKKyNkZWZpbmUJUENJOTExMV9BT19SRVNPTFVUSU9OCQkJMTIKKyNkZWZpbmUgUENJOTExMV9BT19SRVNPTFVUSU9OX01BU0sJCTB4MEZGRgorI2RlZmluZSBQQ0k5MTExX0RJX0NIQU5ORUxfTkJSCQkJMTYKKyNkZWZpbmUJUENJOTExMV9ET19DSEFOTkVMX05CUgkJCTE2CisjZGVmaW5lIFBDSTkxMTFfRE9fTUFTSwkJCQkweEZGRkYKKworI2RlZmluZSBQQ0k5MTExX1JBTkdFX1NFVFRJTkdfREVMQVkJCTEwCisjZGVmaW5lIFBDSTkxMTFfQUlfSU5TVEFOVF9SRUFEX1VERUxBWV9VUwkyCisjZGVmaW5lIFBDSTkxMTFfQUlfSU5TVEFOVF9SRUFEX1RJTUVPVVQJCTEwMAorCisjZGVmaW5lIFBDSTkxMTFfODI1NF9DTE9DS19QRVJJT0RfTlMJCTUwMAorCisjZGVmaW5lIFBDSTkxMTFfODI1NF9DT1VOVEVSXzAJCQkweDAwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9DT1VOVEVSXzEJCQkweDQwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9DT1VOVEVSXzIJCQkweDgwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9DT1VOVEVSX0xBVENICQkweDAwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9SRUFEX0xPQURfTFNCX09OTFkJCTB4MTAKKyNkZWZpbmUgUENJOTExMV84MjU0X1JFQURfTE9BRF9NU0JfT05MWQkJMHgyMAorI2RlZmluZSBQQ0k5MTExXzgyNTRfUkVBRF9MT0FEX0xTQl9NU0IJCTB4MzAKKyNkZWZpbmUgUENJOTExMV84MjU0X01PREVfMAkJCTB4MDAKKyNkZWZpbmUgUENJOTExMV84MjU0X01PREVfMQkJCTB4MDIKKyNkZWZpbmUgUENJOTExMV84MjU0X01PREVfMgkJCTB4MDQKKyNkZWZpbmUgUENJOTExMV84MjU0X01PREVfMwkJCTB4MDYKKyNkZWZpbmUgUENJOTExMV84MjU0X01PREVfNAkJCTB4MDgKKyNkZWZpbmUgUENJOTExMV84MjU0X01PREVfNQkJCTB4MEEKKyNkZWZpbmUgUENJOTExMV84MjU0X0JJTkFSWV9DT1VOVEVSCQkweDAwCisjZGVmaW5lIFBDSTkxMTFfODI1NF9CQ0RfQ09VTlRFUgkJMHgwMQorCisvKiBJTyBhZGRyZXNzIG1hcCAqLworCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfQURfRklGT19WQUxVRSAJCQkweDAwCS8qICBBRCBEYXRhIHN0b3JlZCBpbiBGSUZPICovCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfREFfT1VUUFVUIAkJCTB4MDAKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9ESUdJVEFMX0lPIAkJCTB4MDIKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9FWFRFTkRFRF9JT19QT1JUUyAJCTB4MDQKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9BRF9DSEFOTkVMX0NPTlRST0wgCQkweDA2CS8qICBDaGFubmVsIHNlbGVjdGlvbiAqLworI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0FEX0NIQU5ORUxfUkVBREJBQ0sgCQkweDA2CisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfSU5QVVRfU0lHTkFMX1JBTkdFIAkJMHgwOAorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSyAJCTB4MDgKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9UUklHR0VSX01PREVfQ09OVFJPTCAJCTB4MEEKKyNkZWZpbmUgUENJOTExMV9SRUdJU1RFUl9BRF9NT0RFX0lOVEVSUlVQVF9SRUFEQkFDSyAJMHgwQQorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX1NPRlRXQVJFX1RSSUdHRVIgCQkweDBFCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wgCQkweDBDCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfODI1NF9DT1VOVEVSXzAJCQkweDQwCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfODI1NF9DT1VOVEVSXzEJCQkweDQyCisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfODI1NF9DT1VOVEVSXzIgCQkwWDQ0CisjZGVmaW5lIFBDSTkxMTFfUkVHSVNURVJfODI1NF9DT05UUk9MCQkJMHg0NgorI2RlZmluZSBQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DTEVBUiAJCTB4NDgKKworI2RlZmluZSBQQ0k5MTExX1RSSUdHRVJfTUFTSyAJCQkJMHgwRgorI2RlZmluZSBQQ0k5MTExX1BUUkdfT0ZGIAkJCQkoMCA8PCAzKQorI2RlZmluZSBQQ0k5MTExX1BUUkdfT04gCQkJCSgxIDw8IDMpCisjZGVmaW5lIFBDSTkxMTFfRUlUU19FWFRFUk5BTAkJCQkoMSA8PCAyKQorI2RlZmluZSBQQ0k5MTExX0VJVFNfSU5URVJOQUwJCQkJKDAgPDwgMikKKyNkZWZpbmUgUENJOTExMV9UUFNUX1NPRlRXQVJFX1RSSUdHRVIJCQkoMCA8PCAxKQorI2RlZmluZSBQQ0k5MTExX1RQU1RfVElNRVJfUEFDRVIJCQkoMSA8PCAxKQorI2RlZmluZSBQQ0k5MTExX0FTQ0FOX09OCQkJCSgxIDw8IDApCisjZGVmaW5lIFBDSTkxMTFfQVNDQU5fT0ZGCQkJCSgwIDw8IDApCisKKyNkZWZpbmUgUENJOTExMV9JU0MwX1NFVF9JUlFfT05fRU5ESU5HX09GX0FEX0NPTlZFUlNJT04gKDAgPDwgMCkKKyNkZWZpbmUgUENJOTExMV9JU0MwX1NFVF9JUlFfT05fRklGT19IQUxGX0ZVTEwJCSgxIDw8IDApCisjZGVmaW5lIFBDSTkxMTFfSVNDMV9TRVRfSVJRX09OX1RJTUVSX1RJQ0sgIAkJKDAgPDwgMSkKKyNkZWZpbmUgUENJOTExMV9JU0MxX1NFVF9JUlFfT05fRVhUX1RSRyAJCSgxIDw8IDEpCisjZGVmaW5lIFBDSTkxMTFfRkZFTl9TRVRfRklGT19FTkFCTEUgCQkJKDAgPDwgMikKKyNkZWZpbmUgUENJOTExMV9GRkVOX1NFVF9GSUZPX0RJU0FCTEUJCQkoMSA8PCAyKQorCisjZGVmaW5lIFBDSTkxMTFfQ0hBTk5FTF9NQVNLCQkJCTB4MEYKKworI2RlZmluZSBQQ0k5MTExX1JBTkdFX01BU0sJCQkJMHgwNworI2RlZmluZSBQQ0k5MTExX0ZJRk9fRU1QVFlfTUFTSwkJCQkweDEwCisjZGVmaW5lIFBDSTkxMTFfRklGT19IQUxGX0ZVTExfTUFTSwkJCTB4MjAKKyNkZWZpbmUgUENJOTExMV9GSUZPX0ZVTExfTUFTSwkJCQkweDQwCisjZGVmaW5lIFBDSTkxMTFfQURfQlVTWV9NQVNLCQkJCTB4ODAKKworI2RlZmluZSBQQ0k5MTExX0lPX0JBU0UgZGV2LT5pb2Jhc2UKKworLyoKKyAqIERlZmluZSBpbmxpbmVkIGZ1bmN0aW9uCisgKi8KKworI2RlZmluZSBwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX2dldCgpIFwKKyAgKGluYihQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9NT0RFX0lOVEVSUlVQVF9SRUFEQkFDSykmMHgwRikKKworI2RlZmluZSBwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX3NldChmbGFncykgXAorICBvdXRiKGZsYWdzLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1RSSUdHRVJfTU9ERV9DT05UUk9MKQorCisjZGVmaW5lIHBjaTkxMTFfaW50ZXJydXB0X2FuZF9maWZvX2dldCgpIFwKKyAgKChpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfTU9ERV9JTlRFUlJVUFRfUkVBREJBQ0spID4+IDQpICYweDAzKQorCisjZGVmaW5lIHBjaTkxMTFfaW50ZXJydXB0X2FuZF9maWZvX3NldChmbGFncykgXAorICBvdXRiKGZsYWdzLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MKQorCisjZGVmaW5lIHBjaTkxMTFfaW50ZXJydXB0X2NsZWFyKCkgXAorICBvdXRiKDAsUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NMRUFSKQorCisjZGVmaW5lIHBjaTkxMTFfc29mdHdhcmVfdHJpZ2dlcigpIFwKKyAgb3V0YigwLFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1NPRlRXQVJFX1RSSUdHRVIpCisKKyNkZWZpbmUgcGNpOTExMV9maWZvX3Jlc2V0KCkgXAorICBvdXRiKFBDSTkxMTFfRkZFTl9TRVRfRklGT19FTkFCTEUsUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wpOyBcCisgIG91dGIoUENJOTExMV9GRkVOX1NFVF9GSUZPX0RJU0FCTEUsUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5URVJSVVBUX0NPTlRST0wpOyBcCisgIG91dGIoUENJOTExMV9GRkVOX1NFVF9GSUZPX0VOQUJMRSxQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCkKKworI2RlZmluZSBwY2k5MTExX2lzX2ZpZm9fZnVsbCgpIFwKKyAgKChpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfUkFOR0VfU1RBVFVTX1JFQURCQUNLKSYgXAorICAgIFBDSTkxMTFfRklGT19GVUxMX01BU0spPT0wKQorCisjZGVmaW5lIHBjaTkxMTFfaXNfZmlmb19oYWxmX2Z1bGwoKSBcCisgICgoaW5iKFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSX1JBTkdFX1NUQVRVU19SRUFEQkFDSykmIFwKKyAgICBQQ0k5MTExX0ZJRk9fSEFMRl9GVUxMX01BU0spPT0wKQorCisjZGVmaW5lIHBjaTkxMTFfaXNfZmlmb19lbXB0eSgpIFwKKyAgKChpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfUkFOR0VfU1RBVFVTX1JFQURCQUNLKSYgXAorICAgIFBDSTkxMTFfRklGT19FTVBUWV9NQVNLKT09MCkKKworI2RlZmluZSBwY2k5MTExX2FpX2NoYW5uZWxfc2V0KGNoYW5uZWwpIFwKKyAgb3V0YigoY2hhbm5lbCkmUENJOTExMV9DSEFOTkVMX01BU0ssUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfQURfQ0hBTk5FTF9DT05UUk9MKQorCisjZGVmaW5lIHBjaTkxMTFfYWlfY2hhbm5lbF9nZXQoKSBcCisgIGluYihQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9DSEFOTkVMX1JFQURCQUNLKSZQQ0k5MTExX0NIQU5ORUxfTUFTSworCisjZGVmaW5lIHBjaTkxMTFfYWlfcmFuZ2Vfc2V0KHJhbmdlKSBcCisgIG91dGIoKHJhbmdlKSZQQ0k5MTExX1JBTkdFX01BU0ssUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfSU5QVVRfU0lHTkFMX1JBTkdFKQorCisjZGVmaW5lIHBjaTkxMTFfYWlfcmFuZ2VfZ2V0KCkgXAorICBpbmIoUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfUkFOR0VfU1RBVFVTX1JFQURCQUNLKSZQQ0k5MTExX1JBTkdFX01BU0sKKworI2RlZmluZSBwY2k5MTExX2FpX2dldF9kYXRhKCkgXAorICAoKGludyhQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9GSUZPX1ZBTFVFKT4+NCkmUENJOTExMV9BSV9SRVNPTFVUSU9OX01BU0spIFwKKyAgXiBQQ0k5MTExX0FJX1JFU09MVVRJT05fMl9DTVBfQklUCisKKyNkZWZpbmUgcGNpOTExMV9ocl9haV9nZXRfZGF0YSgpIFwKKyAgKGludyhQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9BRF9GSUZPX1ZBTFVFKSAmIFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl9NQVNLKSBcCisgIF4gUENJOTExMV9IUl9BSV9SRVNPTFVUSU9OXzJfQ01QX0JJVAorCisjZGVmaW5lIHBjaTkxMTFfYW9fc2V0X2RhdGEoZGF0YSkgXAorICBvdXR3KGRhdGEmUENJOTExMV9BT19SRVNPTFVUSU9OX01BU0ssUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfREFfT1VUUFVUKQorCisjZGVmaW5lIHBjaTkxMTFfZGlfZ2V0X2JpdHMoKSBcCisgIGludyhQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl9ESUdJVEFMX0lPKQorCisjZGVmaW5lIHBjaTkxMTFfZG9fc2V0X2JpdHMoYml0cykgXAorICBvdXR3KGJpdHMsUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfRElHSVRBTF9JTykKKworI2RlZmluZSBwY2k5MTExXzgyNTRfY29udHJvbF9zZXQoZmxhZ3MpIFwKKyAgb3V0YihmbGFncyxQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl84MjU0X0NPTlRST0wpCisKKyNkZWZpbmUgcGNpOTExMV84MjU0X2NvdW50ZXJfMF9zZXQoZGF0YSkgXAorICBvdXRiKGRhdGEgJiAweEZGLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl84MjU0X0NPVU5URVJfMCk7IFwKKyAgb3V0YiggKGRhdGEgPj4gOCkgJiAweEZGLCBQQ0k5MTExX0lPX0JBU0UrUENJOTExMV9SRUdJU1RFUl84MjU0X0NPVU5URVJfMCkKKworI2RlZmluZSBwY2k5MTExXzgyNTRfY291bnRlcl8xX3NldChkYXRhKSBcCisgIG91dGIoZGF0YSAmIDB4RkYsIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8xKTsgXAorICBvdXRiKCAoZGF0YSA+PiA4KSAmIDB4RkYsIFBDSTkxMTFfSU9fQkFTRStQQ0k5MTExX1JFR0lTVEVSXzgyNTRfQ09VTlRFUl8xKQorCisjZGVmaW5lIHBjaTkxMTFfODI1NF9jb3VudGVyXzJfc2V0KGRhdGEpIFwKKyAgb3V0YihkYXRhICYgMHhGRiwgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfODI1NF9DT1VOVEVSXzIpOyBcCisgIG91dGIoIChkYXRhID4+IDgpICYgMHhGRiwgUENJOTExMV9JT19CQVNFK1BDSTkxMTFfUkVHSVNURVJfODI1NF9DT1VOVEVSXzIpCisKKy8qICBGdW5jdGlvbiBwcm90b3R5cGVzICovCisKK3N0YXRpYyBpbnQgcGNpOTExMV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2k5MTExX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBwY2k5MTExX2FpX211bmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW5faW5kZXgpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcGNpOTExMV9ocl9haV9yYW5nZSA9IHsKKwk1LAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSkKKwkJfQorfTsKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjaTkxMTFfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BRExJTkssIFBDSTkxMTFfSFJfREVWSUNFX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLAorCQkwLCAwfSwKKwkvKiB7IFBDSV9WRU5ET1JfSURfQURMSU5LLCBQQ0k5MTExX0hHX0RFVklDRV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LCAqLworCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaTkxMTFfcGNpX3RhYmxlKTsKKworLyogICovCisvKiAgQm9hcmQgc3BlY2lmaWNhdGlvbiBzdHJ1Y3R1cmUgKi8KKy8qICAqLworCitzdHJ1Y3QgcGNpOTExMV9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogIGRyaXZlciBuYW1lICovCisJaW50IGRldmljZV9pZDsKKwlpbnQgYWlfY2hhbm5lbF9uYnI7CS8qICBudW0gb2YgQS9EIGNoYW5zICovCisJaW50IGFvX2NoYW5uZWxfbmJyOwkvKiAgbnVtIG9mIEQvQSBjaGFucyAqLworCWludCBhaV9yZXNvbHV0aW9uOwkvKiAgcmVzb2x1dGlvbiBvZiBBL0QgKi8KKwlpbnQgYWlfcmVzb2x1dGlvbl9tYXNrOworCWludCBhb19yZXNvbHV0aW9uOwkvKiAgcmVzb2x1dGlvbiBvZiBEL0EgKi8KKwlpbnQgYW9fcmVzb2x1dGlvbl9tYXNrOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphaV9yYW5nZV9saXN0OwkvKiAgcmFuZ2VsaXN0IGZvciBBL0QgKi8KKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfbGlzdDsJLyogIHJhbmdlbGlzdCBmb3IgRC9BICovCisJdW5zaWduZWQgaW50IGFpX2FjcXVpc2l0aW9uX3BlcmlvZF9taW5fbnM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaTkxMTFfYm9hcmQgcGNpOTExMV9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjaTkxMTFfaHIiLAorCSAgICAgIGRldmljZV9pZDpQQ0k5MTExX0hSX0RFVklDRV9JRCwKKwkgICAgICBhaV9jaGFubmVsX25icjpQQ0k5MTExX0FJX0NIQU5ORUxfTkJSLAorCSAgICAgIGFvX2NoYW5uZWxfbmJyOlBDSTkxMTFfQU9fQ0hBTk5FTF9OQlIsCisJICAgICAgYWlfcmVzb2x1dGlvbjpQQ0k5MTExX0hSX0FJX1JFU09MVVRJT04sCisJICAgICAgYWlfcmVzb2x1dGlvbl9tYXNrOlBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl9NQVNLLAorCSAgICAgIGFvX3Jlc29sdXRpb246UENJOTExMV9BT19SRVNPTFVUSU9OLAorCSAgICAgIGFvX3Jlc29sdXRpb25fbWFzazpQQ0k5MTExX0FPX1JFU09MVVRJT05fTUFTSywKKwkgICAgICBhaV9yYW5nZV9saXN0OiZwY2k5MTExX2hyX2FpX3JhbmdlLAorCSAgICAgIGFvX3JhbmdlX2xpc3Q6JnJhbmdlX2JpcG9sYXIxMCwKKyAgICAgIGFpX2FjcXVpc2l0aW9uX3BlcmlvZF9taW5fbnM6UENJOTExMV9BSV9BQ1FVSVNJVElPTl9QRVJJT0RfTUlOX05TfQorfTsKKworI2RlZmluZSBwY2k5MTExX2JvYXJkX25iciBcCisgIChzaXplb2YocGNpOTExMV9ib2FyZHMpL3NpemVvZihzdHJ1Y3QgcGNpOTExMV9ib2FyZCkpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBwY2k5MTExX2RyaXZlciA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOlBDSTkxMTFfRFJJVkVSX05BTUUsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNpOTExMV9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNpOTExMV9kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKHBjaTkxMTFfZHJpdmVyLCBwY2k5MTExX3BjaV90YWJsZSk7CisKKy8qICBQcml2YXRlIGRhdGEgc3RydWN0dXJlICovCisKK3N0cnVjdCBwY2k5MTExX3ByaXZhdGVfZGF0YSB7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CisJdW5zaWduZWQgbG9uZyBpb19yYW5nZTsJLyogIFBDSTY1MDMgaW8gcmFuZ2UgKi8KKworCXVuc2lnbmVkIGxvbmcgbGNyX2lvX2Jhc2U7CS8qICBMb2NhbCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgbGNyX2lvX3JhbmdlOworCisJaW50IHN0b3BfY291bnRlcjsKKwlpbnQgc3RvcF9pc19ub25lOworCisJdW5zaWduZWQgaW50IHNjYW5fZGVsYXk7CisJdW5zaWduZWQgaW50IGNoYW5saXN0X2xlbjsKKwl1bnNpZ25lZCBpbnQgY2h1bmtfY291bnRlcjsKKwl1bnNpZ25lZCBpbnQgY2h1bmtfbnVtX3NhbXBsZXM7CisKKwlpbnQgYW9fcmVhZGJhY2s7CS8qICBMYXN0IHdyaXR0ZW4gYW5hbG9nIG91dHB1dCBkYXRhICovCisKKwlpbnQgdGltZXJfZGl2aXNvcl8xOwkvKiAgRGl2aXNvciB2YWx1ZXMgZm9yIHRoZSA4MjU0IHRpbWVyIHBhY2VyICovCisJaW50IHRpbWVyX2Rpdmlzb3JfMjsKKworCWludCBpc192YWxpZDsJCS8qICBJcyBkZXZpY2UgdmFsaWQgKi8KKworCXNob3J0IGFpX2JvdW5jZV9idWZmZXJbMiAqIFBDSTkxMTFfRklGT19IQUxGX1NJWkVdOworfTsKKworI2RlZmluZSBkZXZfcHJpdmF0ZSAJKChzdHJ1Y3QgcGNpOTExMV9wcml2YXRlX2RhdGEgKilkZXYtPnByaXZhdGUpCisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBQTFg5MDUwIFNFQ1RJT04gKi8KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBQTFg5MDUwX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MIDB4NGMKKworI2RlZmluZSBQTFg5MDUwX0xJTlRJMV9FTkFCTEUJCSgxIDw8IDApCisjZGVmaW5lIFBMWDkwNTBfTElOVEkxX0FDVElWRV9ISUdICSgxIDw8IDEpCisjZGVmaW5lIFBMWDkwNTBfTElOVEkxX1NUQVRVUwkJKDEgPDwgMikKKyNkZWZpbmUgUExYOTA1MF9MSU5USTJfRU5BQkxFCQkoMSA8PCAzKQorI2RlZmluZSBQTFg5MDUwX0xJTlRJMl9BQ1RJVkVfSElHSAkoMSA8PCA0KQorI2RlZmluZSBQTFg5MDUwX0xJTlRJMl9TVEFUVVMJCSgxIDw8IDUpCisjZGVmaW5lIFBMWDkwNTBfUENJX0lOVEVSUlVQVF9FTkFCTEUJKDEgPDwgNikKKyNkZWZpbmUgUExYOTA1MF9TT0ZUV0FSRV9JTlRFUlJVUFQJKDEgPDwgNykKKworc3RhdGljIHZvaWQgcGx4OTA1MF9pbnRlcnJ1cHRfY29udHJvbCh1bnNpZ25lZCBsb25nIGlvX2Jhc2UsCisJYm9vbCBMSU5UaTFfZW5hYmxlLAorCWJvb2wgTElOVGkxX2FjdGl2ZV9oaWdoLAorCWJvb2wgTElOVGkyX2VuYWJsZSwgYm9vbCBMSU5UaTJfYWN0aXZlX2hpZ2gsIGJvb2wgaW50ZXJydXB0X2VuYWJsZSkKK3sKKwlpbnQgZmxhZ3MgPSAwOworCisJaWYgKExJTlRpMV9lbmFibGUpCisJCWZsYWdzIHw9IFBMWDkwNTBfTElOVEkxX0VOQUJMRTsKKwlpZiAoTElOVGkxX2FjdGl2ZV9oaWdoKQorCQlmbGFncyB8PSBQTFg5MDUwX0xJTlRJMV9BQ1RJVkVfSElHSDsKKwlpZiAoTElOVGkyX2VuYWJsZSkKKwkJZmxhZ3MgfD0gUExYOTA1MF9MSU5USTJfRU5BQkxFOworCWlmIChMSU5UaTJfYWN0aXZlX2hpZ2gpCisJCWZsYWdzIHw9IFBMWDkwNTBfTElOVEkyX0FDVElWRV9ISUdIOworCisJaWYgKGludGVycnVwdF9lbmFibGUpCisJCWZsYWdzIHw9IFBMWDkwNTBfUENJX0lOVEVSUlVQVF9FTkFCTEU7CisKKwlvdXRiKGZsYWdzLCBpb19iYXNlICsgUExYOTA1MF9SRUdJU1RFUl9JTlRFUlJVUFRfQ09OVFJPTCk7Cit9CisKKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBNSVNDRUxMQU5FT1VTIFNFQ1RJT04gKi8KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogIDgyNTQgdGltZXIgKi8KKworc3RhdGljIHZvaWQgcGNpOTExMV90aW1lcl9zZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcGNpOTExMV84MjU0X2NvbnRyb2xfc2V0KFBDSTkxMTFfODI1NF9DT1VOVEVSXzAgfAorCQlQQ0k5MTExXzgyNTRfUkVBRF9MT0FEX0xTQl9NU0IgfAorCQlQQ0k5MTExXzgyNTRfTU9ERV8wIHwgUENJOTExMV84MjU0X0JJTkFSWV9DT1VOVEVSKTsKKworCXBjaTkxMTFfODI1NF9jb250cm9sX3NldChQQ0k5MTExXzgyNTRfQ09VTlRFUl8xIHwKKwkJUENJOTExMV84MjU0X1JFQURfTE9BRF9MU0JfTVNCIHwKKwkJUENJOTExMV84MjU0X01PREVfMiB8IFBDSTkxMTFfODI1NF9CSU5BUllfQ09VTlRFUik7CisKKwlwY2k5MTExXzgyNTRfY29udHJvbF9zZXQoUENJOTExMV84MjU0X0NPVU5URVJfMiB8CisJCVBDSTkxMTFfODI1NF9SRUFEX0xPQURfTFNCX01TQiB8CisJCVBDSTkxMTFfODI1NF9NT0RFXzIgfCBQQ0k5MTExXzgyNTRfQklOQVJZX0NPVU5URVIpOworCisJY29tZWRpX3VkZWxheSgxKTsKKworCXBjaTkxMTFfODI1NF9jb3VudGVyXzJfc2V0KGRldl9wcml2YXRlLT50aW1lcl9kaXZpc29yXzIpOworCXBjaTkxMTFfODI1NF9jb3VudGVyXzFfc2V0KGRldl9wcml2YXRlLT50aW1lcl9kaXZpc29yXzEpOworfQorCitlbnVtIHBjaTkxMTFfdHJpZ2dlcl9zb3VyY2VzIHsKKwlzb2Z0d2FyZSwKKwl0aW1lcl9wYWNlciwKKwlleHRlcm5hbAorfTsKKworc3RhdGljIHZvaWQgcGNpOTExMV90cmlnZ2VyX3NvdXJjZV9zZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJZW51bSBwY2k5MTExX3RyaWdnZXJfc291cmNlcyBzb3VyY2UpCit7CisJaW50IGZsYWdzOworCisJZmxhZ3MgPSBwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX2dldCgpICYgMHgwOTsKKworCXN3aXRjaCAoc291cmNlKSB7CisJY2FzZSBzb2Z0d2FyZToKKwkJZmxhZ3MgfD0gUENJOTExMV9FSVRTX0lOVEVSTkFMIHwgUENJOTExMV9UUFNUX1NPRlRXQVJFX1RSSUdHRVI7CisJCWJyZWFrOworCisJY2FzZSB0aW1lcl9wYWNlcjoKKwkJZmxhZ3MgfD0gUENJOTExMV9FSVRTX0lOVEVSTkFMIHwgUENJOTExMV9UUFNUX1RJTUVSX1BBQ0VSOworCQlicmVhazsKKworCWNhc2UgZXh0ZXJuYWw6CisJCWZsYWdzIHw9IFBDSTkxMTFfRUlUU19FWFRFUk5BTDsKKwkJYnJlYWs7CisJfQorCisJcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9zZXQoZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBwY2k5MTExX3ByZXRyaWdnZXJfc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBib29sIHByZXRyaWdnZXIpCit7CisJaW50IGZsYWdzOworCisJZmxhZ3MgPSBwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX2dldCgpICYgMHgwNzsKKworCWlmIChwcmV0cmlnZ2VyKQorCQlmbGFncyB8PSBQQ0k5MTExX1BUUkdfT047CisKKwlwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX3NldChmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaTkxMTFfYXV0b3NjYW5fc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBib29sIGF1dG9zY2FuKQoreworCWludCBmbGFnczsKKworCWZsYWdzID0gcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9nZXQoKSAmIDB4MGU7CisKKwlpZiAoYXV0b3NjYW4pCisJCWZsYWdzIHw9IFBDSTkxMTFfQVNDQU5fT047CisKKwlwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX3NldChmbGFncyk7Cit9CisKK2VudW0gcGNpOTExMV9JU0MwX3NvdXJjZXMgeworCWlycV9vbl9lb2MsCisJaXJxX29uX2ZpZm9faGFsZl9mdWxsCit9OworCitlbnVtIHBjaTkxMTFfSVNDMV9zb3VyY2VzIHsKKwlpcnFfb25fdGltZXJfdGljaywKKwlpcnFfb25fZXh0ZXJuYWxfdHJpZ2dlcgorfTsKKworc3RhdGljIHZvaWQgcGNpOTExMV9pbnRlcnJ1cHRfc291cmNlX3NldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwllbnVtIHBjaTkxMTFfSVNDMF9zb3VyY2VzIGlycV8wX3NvdXJjZSwgZW51bSBwY2k5MTExX0lTQzFfc291cmNlcyBpcnFfMV9zb3VyY2UpCit7CisJaW50IGZsYWdzOworCisJZmxhZ3MgPSBwY2k5MTExX2ludGVycnVwdF9hbmRfZmlmb19nZXQoKSAmIDB4MDQ7CisKKwlpZiAoaXJxXzBfc291cmNlID09IGlycV9vbl9maWZvX2hhbGZfZnVsbCkKKwkJZmxhZ3MgfD0gUENJOTExMV9JU0MwX1NFVF9JUlFfT05fRklGT19IQUxGX0ZVTEw7CisKKwlpZiAoaXJxXzFfc291cmNlID09IGlycV9vbl9leHRlcm5hbF90cmlnZ2VyKQorCQlmbGFncyB8PSBQQ0k5MTExX0lTQzFfU0VUX0lSUV9PTl9FWFRfVFJHOworCisJcGNpOTExMV9pbnRlcnJ1cHRfYW5kX2ZpZm9fc2V0KGZsYWdzKTsKK30KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIEhBUkRXQVJFIFRSSUdHRVJFRCBBTkFMT0cgSU5QVVQgU0VDVElPTiAqLworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAgQ2FuY2VsIGFuYWxvZyBpbnB1dCBhdXRvc2NhbiAqLworCisjdW5kZWYgQUlfRE9fQ01EX0RFQlVHCisKK3N0YXRpYyBpbnQgcGNpOTExMV9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwkvKiAgRGlzYWJsZSBpbnRlcnJ1cHRzICovCisKKwlwbHg5MDUwX2ludGVycnVwdF9jb250cm9sKGRldl9wcml2YXRlLT5sY3JfaW9fYmFzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwKKwkJdHJ1ZSwgZmFsc2UpOworCisJcGNpOTExMV90cmlnZ2VyX3NvdXJjZV9zZXQoZGV2LCBzb2Z0d2FyZSk7CisKKwlwY2k5MTExX2F1dG9zY2FuX3NldChkZXYsIGZhbHNlKTsKKworCXBjaTkxMTFfZmlmb19yZXNldCgpOworCisjaWZkZWYgQUlfRE9fQ01EX0RFQlVHCisJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogYWlfY2FuY2VsXG4iKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKy8qICBUZXN0IGFuYWxvZyBpbnB1dCBjb21tYW5kICovCisKKyNkZWZpbmUgcGNpOTExMV9jaGVja190cmlnZ2VyX3NyYyhzcmMsZmxhZ3MpIFwKKyAgdG1wID0gc3JjOyBcCisgIHNyYyAmPSBmbGFnczsgXAorICBpZiAoIXNyYyB8fCB0bXAgIT0gc3JjKSBlcnJvcisrCisKK3N0YXRpYyBpbnQKK3BjaTkxMTFfYWlfZG9fY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgdG1wOworCWludCBlcnJvciA9IDA7CisJaW50IHJhbmdlLCByZWZlcmVuY2U7CisJaW50IGk7CisJc3RydWN0IHBjaTkxMTFfYm9hcmQgKmJvYXJkID0gKHN0cnVjdCBwY2k5MTExX2JvYXJkICopIGRldi0+Ym9hcmRfcHRyOworCisJLyogIFN0ZXAgMSA6IGNoZWNrIGlmIHRyaWdnZXIgYXJlIHRyaXZpYWx5IHZhbGlkICovCisKKwlwY2k5MTExX2NoZWNrX3RyaWdnZXJfc3JjKGNtZC0+c3RhcnRfc3JjLCBUUklHX05PVyk7CisJcGNpOTExMV9jaGVja190cmlnZ2VyX3NyYyhjbWQtPnNjYW5fYmVnaW5fc3JjLAorCQlUUklHX1RJTUVSIHwgVFJJR19GT0xMT1cgfCBUUklHX0VYVCk7CisJcGNpOTExMV9jaGVja190cmlnZ2VyX3NyYyhjbWQtPmNvbnZlcnRfc3JjLCBUUklHX1RJTUVSIHwgVFJJR19FWFQpOworCXBjaTkxMTFfY2hlY2tfdHJpZ2dlcl9zcmMoY21kLT5zY2FuX2VuZF9zcmMsIFRSSUdfQ09VTlQpOworCXBjaTkxMTFfY2hlY2tfdHJpZ2dlcl9zcmMoY21kLT5zdG9wX3NyYywgVFJJR19DT1VOVCB8IFRSSUdfTk9ORSk7CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiAxOworCisJLyogIHN0ZXAgMiA6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnJvcisrOworCisJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIpICYmCisJCShjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKSAmJgorCQkoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkpCisJCWVycm9yKys7CisKKwlpZiAoKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikgJiYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpKSB7CisJCWVycm9yKys7CisJfQorCWlmICgoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSAmJgorCQkhKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHx8CisJCQkoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykpKSB7CisJCWVycm9yKys7CisJfQorCWlmICgoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCkgJiYKKwkJISgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgfHwKKwkJCShjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSkpIHsKKwkJZXJyb3IrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9zcmMgIT0gVFJJR19DT1VOVCkKKwkJZXJyb3IrKzsKKwlpZiAoKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkgJiYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKSkKKwkJZXJyb3IrKzsKKworCWlmIChlcnJvcikKKwkJcmV0dXJuIDI7CisKKwkvKiAgU3RlcCAzIDogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuIDwgMSkgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycm9yKys7CisJfQorCisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gYm9hcmQtPmFpX2NoYW5uZWxfbmJyKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gYm9hcmQtPmFpX2NoYW5uZWxfbmJyOworCQllcnJvcisrOworCX0KKworCWlmICgoY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cpICYmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycm9yKys7CisJfQorCisJaWYgKChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpICYmCisJCShjbWQtPmNvbnZlcnRfYXJnIDwgYm9hcmQtPmFpX2FjcXVpc2l0aW9uX3BlcmlvZF9taW5fbnMpKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSBib2FyZC0+YWlfYWNxdWlzaXRpb25fcGVyaW9kX21pbl9uczsKKwkJZXJyb3IrKzsKKwl9CisJaWYgKChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUKSAmJiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyb3IrKzsKKwl9CisKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgJiYKKwkJKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBib2FyZC0+YWlfYWNxdWlzaXRpb25fcGVyaW9kX21pbl9ucykpIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IGJvYXJkLT5haV9hY3F1aXNpdGlvbl9wZXJpb2RfbWluX25zOworCQllcnJvcisrOworCX0KKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpICYmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnJvcisrOworCX0KKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpICYmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnJvcisrOworCX0KKworCWlmICgoY21kLT5zY2FuX2VuZF9zcmMgPT0gVFJJR19DT1VOVCkgJiYKKwkJKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSkgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnJvcisrOworCX0KKworCWlmICgoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSAmJiAoY21kLT5zdG9wX2FyZyA8IDEpKSB7CisJCWNtZC0+c3RvcF9hcmcgPSAxOworCQllcnJvcisrOworCX0KKwlpZiAoKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSAmJiAoY21kLT5zdG9wX2FyZyAhPSAwKSkgeworCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJZXJyb3IrKzsKKwl9CisKKwlpZiAoZXJyb3IpCisJCXJldHVybiAzOworCisJLyogIFN0ZXAgNCA6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihQQ0k5MTExXzgyNTRfQ0xPQ0tfUEVSSU9EX05TLAorCQkJJihkZXZfcHJpdmF0ZS0+dGltZXJfZGl2aXNvcl8xKSwKKwkJCSYoZGV2X3ByaXZhdGUtPnRpbWVyX2Rpdmlzb3JfMiksCisJCQkmKGNtZC0+Y29udmVydF9hcmcpLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyb3IrKzsKKwl9CisJLyogIFRoZXJlJ3Mgb25seSBvbmUgdGltZXIgb24gdGhpcyBjYXJkLCBzbyB0aGUgc2Nhbl9iZWdpbiB0aW1lciBtdXN0ICovCisJLyogIGJlIGEgbXVsdGlwbGUgb2YgY2hhbmxpc3RfbGVuKmNvbnZlcnRfYXJnICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisKKwkJdW5zaWduZWQgaW50IHNjYW5fYmVnaW5fbWluOworCQl1bnNpZ25lZCBpbnQgc2Nhbl9iZWdpbl9hcmc7CisJCXVuc2lnbmVkIGludCBzY2FuX2ZhY3RvcjsKKworCQlzY2FuX2JlZ2luX21pbiA9IGNtZC0+Y2hhbmxpc3RfbGVuICogY21kLT5jb252ZXJ0X2FyZzsKKworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSBzY2FuX2JlZ2luX21pbikgeworCQkJaWYgKHNjYW5fYmVnaW5fbWluIDwgY21kLT5zY2FuX2JlZ2luX2FyZykgeworCQkJCXNjYW5fZmFjdG9yID0KKwkJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyAvIHNjYW5fYmVnaW5fbWluOworCQkJCXNjYW5fYmVnaW5fYXJnID0gc2Nhbl9mYWN0b3IgKiBzY2FuX2JlZ2luX21pbjsKKwkJCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSBzY2FuX2JlZ2luX2FyZykgeworCQkJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gc2Nhbl9iZWdpbl9hcmc7CisJCQkJCWVycm9yKys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gc2Nhbl9iZWdpbl9taW47CisJCQkJZXJyb3IrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnJvcikKKwkJcmV0dXJuIDQ7CisKKwkvKiAgU3RlcCA1IDogY2hlY2sgY2hhbm5lbCBsaXN0ICovCisKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCisJCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJCXJlZmVyZW5jZSA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7CisKKwkJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gMSkgeworCQkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSAhPSBpKSB7CisJCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGJlIGNvbnNlY3V0aXZlICIKKwkJCQkJCSJjaGFubmVscyxjb3VudGluZyB1cHdhcmRzIGZyb20gMFxuIik7CisJCQkJCWVycm9yKys7CisJCQkJfQorCQkJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAhPSByYW5nZSkgeworCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBnYWluXG4iKTsKKwkJCQkJZXJyb3IrKzsKKwkJCQl9CisJCQkJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFtpXSkgIT0gcmVmZXJlbmNlKSB7CisJCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIHJlZmVyZW5jZVxuIik7CisJCQkJCWVycm9yKys7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pID4KKwkJCQkJKGJvYXJkLT5haV9jaGFubmVsX25iciAtIDEpKQorCQkJCXx8IChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pIDwgMCkpIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiY2hhbm5lbCBudW1iZXIgaXMgb3V0IG9mIGxpbWl0c1xuIik7CisJCQkJZXJyb3IrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnJvcikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKKworfQorCisvKiAgQW5hbG9nIGlucHV0IGNvbW1hbmQgKi8KKworc3RhdGljIGludCBwY2k5MTExX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXZpY2UpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmFzeW5jX2NtZCA9ICZzdWJkZXZpY2UtPmFzeW5jLT5jbWQ7CisKKwlpZiAoIWRldi0+aXJxKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkibm8gaXJxIGFzc2lnbmVkIGZvciBQQ0k5MTExLCBjYW5ub3QgZG8gaGFyZHdhcmUgY29udmVyc2lvbiIpOworCQlyZXR1cm4gLTE7CisJfQorCS8qICBTZXQgY2hhbm5lbCBzY2FuIGxpbWl0ICovCisJLyogIFBDSTkxMTEgYWxsb3dzIG9ubHkgc2Nhbm5pbmcgZnJvbSBjaGFubmVsIDAgdG8gY2hhbm5lbCBuICovCisJLyogIFRPRE86IGhhbmRsZSB0aGUgY2FzZSBvZiBhbiBleHRlcm5hbCBtdWx0aXBsZXhlciAqLworCisJaWYgKGFzeW5jX2NtZC0+Y2hhbmxpc3RfbGVuID4gMSkgeworCQlwY2k5MTExX2FpX2NoYW5uZWxfc2V0KChhc3luY19jbWQtPmNoYW5saXN0X2xlbikgLSAxKTsKKwkJcGNpOTExMV9hdXRvc2Nhbl9zZXQoZGV2LCB0cnVlKTsKKwl9IGVsc2UgeworCQlwY2k5MTExX2FpX2NoYW5uZWxfc2V0KENSX0NIQU4oYXN5bmNfY21kLT5jaGFubGlzdFswXSkpOworCQlwY2k5MTExX2F1dG9zY2FuX3NldChkZXYsIGZhbHNlKTsKKwl9CisKKwkvKiAgU2V0IGdhaW4gKi8KKwkvKiAgVGhpcyBpcyB0aGUgc2FtZSBnYWluIG9uIGV2ZXJ5IGNoYW5uZWwgKi8KKworCXBjaTkxMTFfYWlfcmFuZ2Vfc2V0KENSX1JBTkdFKGFzeW5jX2NtZC0+Y2hhbmxpc3RbMF0pKTsKKworCS8qIFNldCBjb3VudGVyICovCisKKwlzd2l0Y2ggKGFzeW5jX2NtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCWRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIgPQorCQkJYXN5bmNfY21kLT5zdG9wX2FyZyAqIGFzeW5jX2NtZC0+Y2hhbmxpc3RfbGVuOworCQlkZXZfcHJpdmF0ZS0+c3RvcF9pc19ub25lID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFRSSUdfTk9ORToKKwkJZGV2X3ByaXZhdGUtPnN0b3BfY291bnRlciA9IDA7CisJCWRldl9wcml2YXRlLT5zdG9wX2lzX25vbmUgPSAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJJbnZhbGlkIHN0b3AgdHJpZ2dlciIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogIFNldCB0aW1lciBwYWNlciAqLworCisJZGV2X3ByaXZhdGUtPnNjYW5fZGVsYXkgPSAwOworCXN3aXRjaCAoYXN5bmNfY21kLT5jb252ZXJ0X3NyYykgeworCWNhc2UgVFJJR19USU1FUjoKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFBDSTkxMTFfODI1NF9DTE9DS19QRVJJT0RfTlMsCisJCQkmKGRldl9wcml2YXRlLT50aW1lcl9kaXZpc29yXzEpLAorCQkJJihkZXZfcHJpdmF0ZS0+dGltZXJfZGl2aXNvcl8yKSwKKwkJCSYoYXN5bmNfY21kLT5jb252ZXJ0X2FyZyksCisJCQlhc3luY19jbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKyNpZmRlZiBBSV9ET19DTURfREVCVUcKKwkJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogZGl2aXNvcnMgPSAlZCwgJWRcbiIsCisJCQlkZXZfcHJpdmF0ZS0+dGltZXJfZGl2aXNvcl8xLAorCQkJZGV2X3ByaXZhdGUtPnRpbWVyX2Rpdmlzb3JfMik7CisjZW5kaWYKKworCQlwY2k5MTExX3RyaWdnZXJfc291cmNlX3NldChkZXYsIHNvZnR3YXJlKTsKKwkJcGNpOTExMV90aW1lcl9zZXQoZGV2KTsKKwkJcGNpOTExMV9maWZvX3Jlc2V0KCk7CisJCXBjaTkxMTFfaW50ZXJydXB0X3NvdXJjZV9zZXQoZGV2LCBpcnFfb25fZmlmb19oYWxmX2Z1bGwsCisJCQlpcnFfb25fdGltZXJfdGljayk7CisJCXBjaTkxMTFfdHJpZ2dlcl9zb3VyY2Vfc2V0KGRldiwgdGltZXJfcGFjZXIpOworCQlwbHg5MDUwX2ludGVycnVwdF9jb250cm9sKGRldl9wcml2YXRlLT5sY3JfaW9fYmFzZSwgdHJ1ZSwgdHJ1ZSwKKwkJCWZhbHNlLCB0cnVlLCB0cnVlKTsKKworCQlkZXZfcHJpdmF0ZS0+c2Nhbl9kZWxheSA9CisJCQkoYXN5bmNfY21kLT5zY2FuX2JlZ2luX2FyZyAvIChhc3luY19jbWQtPmNvbnZlcnRfYXJnICoKKwkJCQlhc3luY19jbWQtPmNoYW5saXN0X2xlbikpIC0gMTsKKworCQlicmVhazsKKworCWNhc2UgVFJJR19FWFQ6CisKKwkJcGNpOTExMV90cmlnZ2VyX3NvdXJjZV9zZXQoZGV2LCBleHRlcm5hbCk7CisJCXBjaTkxMTFfZmlmb19yZXNldCgpOworCQlwY2k5MTExX2ludGVycnVwdF9zb3VyY2Vfc2V0KGRldiwgaXJxX29uX2ZpZm9faGFsZl9mdWxsLAorCQkJaXJxX29uX3RpbWVyX3RpY2spOworCQlwbHg5MDUwX2ludGVycnVwdF9jb250cm9sKGRldl9wcml2YXRlLT5sY3JfaW9fYmFzZSwgdHJ1ZSwgdHJ1ZSwKKwkJCWZhbHNlLCB0cnVlLCB0cnVlKTsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJJbnZhbGlkIGNvbnZlcnQgdHJpZ2dlciIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGV2X3ByaXZhdGUtPnN0b3BfY291bnRlciAqPSAoMSArIGRldl9wcml2YXRlLT5zY2FuX2RlbGF5KTsKKwlkZXZfcHJpdmF0ZS0+Y2hhbmxpc3RfbGVuID0gYXN5bmNfY21kLT5jaGFubGlzdF9sZW47CisJZGV2X3ByaXZhdGUtPmNodW5rX2NvdW50ZXIgPSAwOworCWRldl9wcml2YXRlLT5jaHVua19udW1fc2FtcGxlcyA9CisJCWRldl9wcml2YXRlLT5jaGFubGlzdF9sZW4gKiAoMSArIGRldl9wcml2YXRlLT5zY2FuX2RlbGF5KTsKKworI2lmZGVmIEFJX0RPX0NNRF9ERUJVRworCXByaW50ayhQQ0k5MTExX0RSSVZFUl9OQU1FICI6IHN0YXJ0IGludGVycnVwdGlvbnMhXG4iKTsKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiB0cmlnZ2VyIHNvdXJjZSA9ICUyeFxuIiwKKwkJcGNpOTExMV90cmlnZ2VyX2FuZF9hdXRvc2Nhbl9nZXQoKSk7CisJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogaXJxIHNvdXJjZSAgICAgPSAlMnhcbiIsCisJCXBjaTkxMTFfaW50ZXJydXB0X2FuZF9maWZvX2dldCgpKTsKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiBhaV9kb19jbWRcbiIpOworCXByaW50ayhQQ0k5MTExX0RSSVZFUl9OQU1FICI6IHN0b3AgY291bnRlciAgID0gJWRcbiIsCisJCWRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIpOworCXByaW50ayhQQ0k5MTExX0RSSVZFUl9OQU1FICI6IHNjYW4gZGVsYXkgICAgID0gJWRcbiIsCisJCWRldl9wcml2YXRlLT5zY2FuX2RlbGF5KTsKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiBjaGFubGlzdF9sZW4gICA9ICVkXG4iLAorCQlkZXZfcHJpdmF0ZS0+Y2hhbmxpc3RfbGVuKTsKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiBjaHVuayBudW0gc2FtcGxlcyA9ICVkXG4iLAorCQlkZXZfcHJpdmF0ZS0+Y2h1bmtfbnVtX3NhbXBsZXMpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNpOTExMV9haV9tdW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBudW1fYnl0ZXMsIHVuc2lnbmVkIGludCBzdGFydF9jaGFuX2luZGV4KQoreworCXVuc2lnbmVkIGludCBpLCBudW1fc2FtcGxlcyA9IG51bV9ieXRlcyAvIHNpemVvZihzaG9ydCk7CisJc2hvcnQgKmFycmF5ID0gZGF0YTsKKwlpbnQgcmVzb2x1dGlvbiA9CisJCSgoc3RydWN0IHBjaTkxMTFfYm9hcmQgKikgZGV2LT5ib2FyZF9wdHIpLT5haV9yZXNvbHV0aW9uOworCisJZm9yIChpID0gMDsgaSA8IG51bV9zYW1wbGVzOyBpKyspIHsKKwkJaWYgKHJlc29sdXRpb24gPT0gUENJOTExMV9IUl9BSV9SRVNPTFVUSU9OKQorCQkJYXJyYXlbaV0gPQorCQkJCShhcnJheVtpXSAmIFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTl9NQVNLKSBeCisJCQkJUENJOTExMV9IUl9BSV9SRVNPTFVUSU9OXzJfQ01QX0JJVDsKKwkJZWxzZQorCQkJYXJyYXlbaV0gPQorCQkJCSgoYXJyYXlbaV0gPj4gNCkgJiBQQ0k5MTExX0FJX1JFU09MVVRJT05fTUFTSykgXgorCQkJCVBDSTkxMTFfQUlfUkVTT0xVVElPTl8yX0NNUF9CSVQ7CisJfQorfQorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgSU5URVJSVVBUIFNFQ1RJT04gKi8KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI3VuZGVmIElOVEVSUlVQVF9ERUJVRworCitzdGF0aWMgaXJxcmV0dXJuX3QgcGNpOTExMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcF9kZXZpY2UgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IHBfZGV2aWNlOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2UgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXVuc2lnbmVkIGNoYXIgaW50Y3NyOworCisJaWYgKCFkZXYtPmF0dGFjaGVkKSB7CisJCS8qICBJZ25vcmUgaW50ZXJydXB0IGJlZm9yZSBkZXZpY2UgZnVsbHkgYXR0YWNoZWQuICovCisJCS8qICBNaWdodCBub3QgZXZlbiBoYXZlIGFsbG9jYXRlZCBzdWJkZXZpY2VzIHlldCEgKi8KKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWFzeW5jID0gc3ViZGV2aWNlLT5hc3luYzsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCS8qICBDaGVjayBpZiB3ZSBhcmUgc291cmNlIG9mIGludGVycnVwdCAqLworCWludGNzciA9IGluYihkZXZfcHJpdmF0ZS0+bGNyX2lvX2Jhc2UgKworCQlQTFg5MDUwX1JFR0lTVEVSX0lOVEVSUlVQVF9DT05UUk9MKTsKKwlpZiAoISgoKGludGNzciAmIFBMWDkwNTBfUENJX0lOVEVSUlVQVF9FTkFCTEUpICE9IDApCisJCQkmJiAoKChpbnRjc3IgJiAoUExYOTA1MF9MSU5USTFfRU5BQkxFIHwKKwkJCQkJCQlQTFg5MDUwX0xJTlRJMV9TVEFUVVMpKQorCQkJCQk9PQorCQkJCQkoUExYOTA1MF9MSU5USTFfRU5BQkxFIHwKKwkJCQkJCVBMWDkwNTBfTElOVEkxX1NUQVRVUykpCisJCQkJfHwgKChpbnRjc3IgJiAoUExYOTA1MF9MSU5USTJfRU5BQkxFIHwKKwkJCQkJCQlQTFg5MDUwX0xJTlRJMl9TVEFUVVMpKQorCQkJCQk9PQorCQkJCQkoUExYOTA1MF9MSU5USTJfRU5BQkxFIHwKKwkJCQkJCVBMWDkwNTBfTElOVEkyX1NUQVRVUykpKSkpIHsKKwkJLyogIE5vdCB0aGUgc291cmNlIG9mIHRoZSBpbnRlcnJ1cHQuICovCisJCS8qICAoTi5CLiBub3QgdXNpbmcgUExYOTA1MF9TT0ZUV0FSRV9JTlRFUlJVUFQpICovCisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaWYgKChpbnRjc3IgJiAoUExYOTA1MF9MSU5USTFfRU5BQkxFIHwgUExYOTA1MF9MSU5USTFfU1RBVFVTKSkgPT0KKwkJKFBMWDkwNTBfTElOVEkxX0VOQUJMRSB8IFBMWDkwNTBfTElOVEkxX1NUQVRVUykpIHsKKwkJLyogIEludGVycnVwdCBjb21lcyBmcm9tIGZpZm9faGFsZi1mdWxsIHNpZ25hbCAqLworCisJCWlmIChwY2k5MTExX2lzX2ZpZm9fZnVsbCgpKSB7CisJCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywKKwkJCQlpcnFfZmxhZ3MpOworCQkJY29tZWRpX2Vycm9yKGRldiwgUENJOTExMV9EUklWRVJfTkFNRSAiIGZpZm8gb3ZlcmZsb3ciKTsKKwkJCXBjaTkxMTFfaW50ZXJydXB0X2NsZWFyKCk7CisJCQlwY2k5MTExX2FpX2NhbmNlbChkZXYsIHN1YmRldmljZSk7CisJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzdWJkZXZpY2UpOworCisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0KKworCQlpZiAocGNpOTExMV9pc19maWZvX2hhbGZfZnVsbCgpKSB7CisJCQl1bnNpZ25lZCBpbnQgbnVtX3NhbXBsZXM7CisJCQl1bnNpZ25lZCBpbnQgYnl0ZXNfd3JpdHRlbiA9IDA7CisKKyNpZmRlZiBJTlRFUlJVUFRfREVCVUcKKwkJCXByaW50ayhQQ0k5MTExX0RSSVZFUl9OQU1FICI6IGZpZm8gaXMgaGFsZiBmdWxsXG4iKTsKKyNlbmRpZgorCisJCQludW1fc2FtcGxlcyA9CisJCQkJUENJOTExMV9GSUZPX0hBTEZfU0laRSA+CisJCQkJZGV2X3ByaXZhdGUtPnN0b3BfY291bnRlcgorCQkJCSYmICFkZXZfcHJpdmF0ZS0+c3RvcF9pc19ub25lID8gZGV2X3ByaXZhdGUtPgorCQkJCXN0b3BfY291bnRlciA6IFBDSTkxMTFfRklGT19IQUxGX1NJWkU7CisJCQlpbnN3KFBDSTkxMTFfSU9fQkFTRSArIFBDSTkxMTFfUkVHSVNURVJfQURfRklGT19WQUxVRSwKKwkJCQlkZXZfcHJpdmF0ZS0+YWlfYm91bmNlX2J1ZmZlciwgbnVtX3NhbXBsZXMpOworCisJCQlpZiAoZGV2X3ByaXZhdGUtPnNjYW5fZGVsYXkgPCAxKSB7CisJCQkJYnl0ZXNfd3JpdHRlbiA9CisJCQkJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIoc3ViZGV2aWNlLAorCQkJCQlkZXZfcHJpdmF0ZS0+YWlfYm91bmNlX2J1ZmZlciwKKwkJCQkJbnVtX3NhbXBsZXMgKiBzaXplb2Yoc2hvcnQpKTsKKwkJCX0gZWxzZSB7CisJCQkJaW50IHBvc2l0aW9uID0gMDsKKwkJCQlpbnQgdG9fcmVhZDsKKworCQkJCXdoaWxlIChwb3NpdGlvbiA8IG51bV9zYW1wbGVzKSB7CisJCQkJCWlmIChkZXZfcHJpdmF0ZS0+Y2h1bmtfY291bnRlciA8CisJCQkJCQlkZXZfcHJpdmF0ZS0+Y2hhbmxpc3RfbGVuKSB7CisJCQkJCQl0b19yZWFkID0KKwkJCQkJCQlkZXZfcHJpdmF0ZS0+CisJCQkJCQkJY2hhbmxpc3RfbGVuIC0KKwkJCQkJCQlkZXZfcHJpdmF0ZS0+CisJCQkJCQkJY2h1bmtfY291bnRlcjsKKworCQkJCQkJaWYgKHRvX3JlYWQgPgorCQkJCQkJCW51bV9zYW1wbGVzIC0gcG9zaXRpb24pCisJCQkJCQkJdG9fcmVhZCA9CisJCQkJCQkJCW51bV9zYW1wbGVzIC0KKwkJCQkJCQkJcG9zaXRpb247CisKKwkJCQkJCWJ5dGVzX3dyaXR0ZW4gKz0KKwkJCQkJCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyCisJCQkJCQkJKHN1YmRldmljZSwKKwkJCQkJCQlkZXZfcHJpdmF0ZS0+CisJCQkJCQkJYWlfYm91bmNlX2J1ZmZlciArCisJCQkJCQkJcG9zaXRpb24sCisJCQkJCQkJdG9fcmVhZCAqCisJCQkJCQkJc2l6ZW9mKHNob3J0KSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl0b19yZWFkID0KKwkJCQkJCQlkZXZfcHJpdmF0ZS0+CisJCQkJCQkJY2h1bmtfbnVtX3NhbXBsZXMgLQorCQkJCQkJCWRldl9wcml2YXRlLT4KKwkJCQkJCQljaHVua19jb3VudGVyOworCQkJCQkJaWYgKHRvX3JlYWQgPgorCQkJCQkJCW51bV9zYW1wbGVzIC0gcG9zaXRpb24pCisJCQkJCQkJdG9fcmVhZCA9CisJCQkJCQkJCW51bV9zYW1wbGVzIC0KKwkJCQkJCQkJcG9zaXRpb247CisKKwkJCQkJCWJ5dGVzX3dyaXR0ZW4gKz0KKwkJCQkJCQlzaXplb2Yoc2hvcnQpICoKKwkJCQkJCQl0b19yZWFkOworCQkJCQl9CisKKwkJCQkJcG9zaXRpb24gKz0gdG9fcmVhZDsKKwkJCQkJZGV2X3ByaXZhdGUtPmNodW5rX2NvdW50ZXIgKz0gdG9fcmVhZDsKKworCQkJCQlpZiAoZGV2X3ByaXZhdGUtPmNodW5rX2NvdW50ZXIgPj0KKwkJCQkJCWRldl9wcml2YXRlLT5jaHVua19udW1fc2FtcGxlcykKKwkJCQkJCWRldl9wcml2YXRlLT5jaHVua19jb3VudGVyID0gMDsKKwkJCQl9CisJCQl9CisKKwkJCWRldl9wcml2YXRlLT5zdG9wX2NvdW50ZXIgLT0KKwkJCQlieXRlc193cml0dGVuIC8gc2l6ZW9mKHNob3J0KTsKKwkJfQorCX0KKworCWlmICgoZGV2X3ByaXZhdGUtPnN0b3BfY291bnRlciA9PSAwKSAmJiAoIWRldl9wcml2YXRlLT5zdG9wX2lzX25vbmUpKSB7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJcGNpOTExMV9haV9jYW5jZWwoZGV2LCBzdWJkZXZpY2UpOworCX0KKworCS8qIFZlcnkgaW1wb3J0YW50LCBvdGhlcndpc2UgYW5vdGhlciBpbnRlcnJ1cHQgcmVxdWVzdCB3aWxsIGJlIGluc2VydGVkCisJICogYW5kIHdpbGwgY2F1c2UgZHJpdmVyIGhhbmdzIG9uIHByb2Nlc3NpbmcgaW50ZXJydXB0IGV2ZW50LiAqLworCisJcGNpOTExMV9pbnRlcnJ1cHRfY2xlYXIoKTsKKworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCisJY29tZWRpX2V2ZW50KGRldiwgc3ViZGV2aWNlKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIElOU1RBTlQgQU5BTE9HIElOUFVUIE9VVFBVVCBTRUNUSU9OICovCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qICBhbmFsb2cgaW5zdGFudCBpbnB1dCAqLworCisjdW5kZWYgQUlfSU5TTl9ERUJVRworCitzdGF0aWMgaW50IHBjaTkxMTFfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2aWNlLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCByZXNvbHV0aW9uID0KKwkJKChzdHJ1Y3QgcGNpOTExMV9ib2FyZCAqKSBkZXYtPmJvYXJkX3B0ciktPmFpX3Jlc29sdXRpb247CisKKwlpbnQgdGltZW91dCwgaTsKKworI2lmZGVmIEFJX0lOU05fREVCVUcKKwlwcmludGsoUENJOTExMV9EUklWRVJfTkFNRSAiOiBhaV9pbnNuIHNldCBjL3IvbiA9ICUyeC8lMngvJTJ4XG4iLAorCQlDUl9DSEFOKCgmaW5zbi0+Y2hhbnNwZWMpWzBdKSwKKwkJQ1JfUkFOR0UoKCZpbnNuLT5jaGFuc3BlYylbMF0pLCBpbnNuLT5uKTsKKyNlbmRpZgorCisJcGNpOTExMV9haV9jaGFubmVsX3NldChDUl9DSEFOKCgmaW5zbi0+Y2hhbnNwZWMpWzBdKSk7CisKKwlpZiAoKHBjaTkxMTFfYWlfcmFuZ2VfZ2V0KCkpICE9IENSX1JBTkdFKCgmaW5zbi0+Y2hhbnNwZWMpWzBdKSkgeworCQlwY2k5MTExX2FpX3JhbmdlX3NldChDUl9SQU5HRSgoJmluc24tPmNoYW5zcGVjKVswXSkpOworCX0KKworCXBjaTkxMTFfZmlmb19yZXNldCgpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlwY2k5MTExX3NvZnR3YXJlX3RyaWdnZXIoKTsKKworCQl0aW1lb3V0ID0gUENJOTExMV9BSV9JTlNUQU5UX1JFQURfVElNRU9VVDsKKworCQl3aGlsZSAodGltZW91dC0tKSB7CisJCQlpZiAoIXBjaTkxMTFfaXNfZmlmb19lbXB0eSgpKQorCQkJCWdvdG8gY29udmVyc2lvbl9kb25lOworCQl9CisKKwkJY29tZWRpX2Vycm9yKGRldiwgIkEvRCByZWFkIHRpbWVvdXQiKTsKKwkJZGF0YVtpXSA9IDA7CisJCXBjaTkxMTFfZmlmb19yZXNldCgpOworCQlyZXR1cm4gLUVUSU1FOworCisJICAgICAgY29udmVyc2lvbl9kb25lOgorCisJCWlmIChyZXNvbHV0aW9uID09IFBDSTkxMTFfSFJfQUlfUkVTT0xVVElPTikgeworCQkJZGF0YVtpXSA9IHBjaTkxMTFfaHJfYWlfZ2V0X2RhdGEoKTsKKwkJfSBlbHNlIHsKKwkJCWRhdGFbaV0gPSBwY2k5MTExX2FpX2dldF9kYXRhKCk7CisJCX0KKwl9CisKKyNpZmRlZiBBSV9JTlNOX0RFQlVHCisJcHJpbnRrKFBDSTkxMTFfRFJJVkVSX05BTUUgIjogYWlfaW5zbiBnZXQgYy9yL3QgPSAlMngvJTJ4LyUyeFxuIiwKKwkJcGNpOTExMV9haV9jaGFubmVsX2dldCgpLAorCQlwY2k5MTExX2FpX3JhbmdlX2dldCgpLCBwY2k5MTExX3RyaWdnZXJfYW5kX2F1dG9zY2FuX2dldCgpKTsKKyNlbmRpZgorCisJcmV0dXJuIGk7Cit9CisKKy8qICBBbmFsb2cgaW5zdGFudCBvdXRwdXQgKi8KKworc3RhdGljIGludAorcGNpOTExMV9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJcGNpOTExMV9hb19zZXRfZGF0YShkYXRhW2ldKTsKKwkJZGV2X3ByaXZhdGUtPmFvX3JlYWRiYWNrID0gZGF0YVtpXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworLyogIEFuYWxvZyBvdXRwdXQgcmVhZGJhY2sgKi8KKworc3RhdGljIGludCBwY2k5MTExX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkZXZfcHJpdmF0ZS0+YW9fcmVhZGJhY2sgJiBQQ0k5MTExX0FPX1JFU09MVVRJT05fTUFTSzsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIERJR0lUQUwgSU5QVVQgT1VUUFVUIFNFQ1RJT04gKi8KKy8qICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogIERpZ2l0YWwgaW5wdXRzICovCisKK3N0YXRpYyBpbnQgcGNpOTExMV9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXZpY2UsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGJpdHM7CisKKwliaXRzID0gcGNpOTExMV9kaV9nZXRfYml0cygpOworCWRhdGFbMV0gPSBiaXRzOworCisJcmV0dXJuIDI7Cit9CisKKy8qICBEaWdpdGFsIG91dHB1dHMgKi8KKworc3RhdGljIGludCBwY2k5MTExX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldmljZSwgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0czsKKworCS8qICBPbmx5IHNldCBiaXRzIHRoYXQgaGF2ZSBiZWVuIG1hc2tlZCAqLworCS8qICBkYXRhWzBdID0gbWFzayAqLworCS8qICBkYXRhWzFdID0gYml0IHN0YXRlICovCisKKwlkYXRhWzBdICY9IFBDSTkxMTFfRE9fTUFTSzsKKworCWJpdHMgPSBzdWJkZXZpY2UtPnN0YXRlOworCWJpdHMgJj0gfmRhdGFbMF07CisJYml0cyB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwlzdWJkZXZpY2UtPnN0YXRlID0gYml0czsKKworCXBjaTkxMTFfZG9fc2V0X2JpdHMoYml0cyk7CisKKwlkYXRhWzFdID0gYml0czsKKworCXJldHVybiAyOworfQorCisvKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgSU5JVElBTElTQVRJT04gU0VDVElPTiAqLworLyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiAgUmVzZXQgZGV2aWNlICovCisKK3N0YXRpYyBpbnQgcGNpOTExMV9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwkvKiAgU2V0IHRyaWdnZXIgc291cmNlIHRvIHNvZnR3YXJlICovCisKKwlwbHg5MDUwX2ludGVycnVwdF9jb250cm9sKGRldl9wcml2YXRlLT5sY3JfaW9fYmFzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwKKwkJdHJ1ZSwgZmFsc2UpOworCisJcGNpOTExMV90cmlnZ2VyX3NvdXJjZV9zZXQoZGV2LCBzb2Z0d2FyZSk7CisJcGNpOTExMV9wcmV0cmlnZ2VyX3NldChkZXYsIGZhbHNlKTsKKwlwY2k5MTExX2F1dG9zY2FuX3NldChkZXYsIGZhbHNlKTsKKworCS8qICBSZXNldCA4MjU0IGNoaXAgKi8KKworCWRldl9wcml2YXRlLT50aW1lcl9kaXZpc29yXzEgPSAwOworCWRldl9wcml2YXRlLT50aW1lcl9kaXZpc29yXzIgPSAwOworCisJcGNpOTExMV90aW1lcl9zZXQoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKiAgQXR0YWNoICovCisvKiAgICAgICAtIFJlZ2lzdGVyIFBDSSBkZXZpY2UgKi8KKy8qICAgICAgIC0gRGVjbGFyZSBkZXZpY2UgZHJpdmVyIGNhcGFiaWxpdHkgKi8KKworc3RhdGljIGludCBwY2k5MTExX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgaW9fYmFzZSwgaW9fcmFuZ2UsIGxjcl9pb19iYXNlLCBsY3JfaW9fcmFuZ2U7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CisJaW50IGVycm9yLCBpOworCWNvbnN0IHN0cnVjdCBwY2k5MTExX2JvYXJkICpib2FyZDsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2k5MTExX3ByaXZhdGVfZGF0YSkpIDwgMCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyogIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuICovCisKKwlwcmludGsoImNvbWVkaSVkOiAiIFBDSTkxMTFfRFJJVkVSX05BTUUgIiBkcml2ZXJcbiIsIGRldi0+bWlub3IpOworCisJZm9yIChwY2lfZGV2aWNlID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXZpY2UgIT0gTlVMTDsKKwkJcGNpX2RldmljZSA9CisJCXBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXZpY2UpKSB7CisJCWlmIChwY2lfZGV2aWNlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BRExJTkspIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBwY2k5MTExX2JvYXJkX25icjsgaSsrKSB7CisJCQkJaWYgKHBjaTkxMTFfYm9hcmRzW2ldLmRldmljZV9pZCA9PQorCQkJCQlwY2lfZGV2aWNlLT5kZXZpY2UpIHsKKwkJCQkJLyogIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QgcmVxdWVzdGVkPyAqLworCQkJCQlpZiAoKGl0LT5vcHRpb25zWzBdICE9IDApCisJCQkJCQl8fCAoaXQtPm9wdGlvbnNbMV0gIT0gMCkpIHsKKwkJCQkJCS8qICBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PyAqLworCQkJCQkJaWYgKHBjaV9kZXZpY2UtPmJ1cy0+bnVtYmVyICE9CisJCQkJCQkJaXQtPm9wdGlvbnNbMF0KKwkJCQkJCQl8fCBQQ0lfU0xPVChwY2lfZGV2aWNlLT4KKwkJCQkJCQkJZGV2Zm4pICE9CisJCQkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWRldi0+Ym9hcmRfcHRyID0gcGNpOTExMV9ib2FyZHMgKyBpOworCQkJCQlib2FyZCA9IChzdHJ1Y3QgcGNpOTExMV9ib2FyZCAqKSBkZXYtPgorCQkJCQkJYm9hcmRfcHRyOworCQkJCQlkZXZfcHJpdmF0ZS0+cGNpX2RldmljZSA9IHBjaV9kZXZpY2U7CisJCQkJCWdvdG8gZm91bmQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcHJpbnRrKCJjb21lZGklZDogbm8gc3VwcG9ydGVkIGJvYXJkIGZvdW5kISAocmVxLiBidXMvc2xvdCA6ICVkLyVkKVxuIiwKKwkJZGV2LT5taW5vciwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKwlyZXR1cm4gLUVJTzsKKworICAgICAgZm91bmQ6CisKKwlwcmludGsoImNvbWVkaSVkOiBmb3VuZCAlcyAoYjpzOmY9JWQ6JWQ6JWQpICwgaXJxPSVkXG4iLAorCQlkZXYtPm1pbm9yLAorCQlwY2k5MTExX2JvYXJkc1tpXS5uYW1lLAorCQlwY2lfZGV2aWNlLT5idXMtPm51bWJlciwKKwkJUENJX1NMT1QocGNpX2RldmljZS0+ZGV2Zm4pLAorCQlQQ0lfRlVOQyhwY2lfZGV2aWNlLT5kZXZmbiksIHBjaV9kZXZpY2UtPmlycSk7CisKKwkvKiAgVE9ETzogV2FybiBhYm91dCBub24tdGVzdGVkIGJvYXJkcy4gKi8KKworCXN3aXRjaCAoYm9hcmQtPmRldmljZV9pZCkgeworCX07CisKKwkvKiAgUmVhZCBsb2NhbCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyBbUENJX0JBU0VfQUREUkVTUyAjMV0uICovCisKKwlsY3JfaW9fYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2aWNlLCAxKTsKKwlsY3JfaW9fcmFuZ2UgPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXZpY2UsIDEpOworCisJcHJpbnRrKCJjb21lZGklZDogbG9jYWwgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgYXQgYWRkcmVzcyAweCU0bHggWzB4JTRseF1cbiIsIGRldi0+bWlub3IsIGxjcl9pb19iYXNlLCBsY3JfaW9fcmFuZ2UpOworCisJLyogIEVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMgKi8KKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpX2RldmljZSwgUENJOTExMV9EUklWRVJfTkFNRSkgPCAwKSB7CisJCXByaW50aygiY29tZWRpJWQ6IEZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iLCBkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCS8qICBSZWFkIFBDSTYzMDggcmVnaXN0ZXIgYmFzZSBhZGRyZXNzIFtQQ0lfQkFTRV9BRERSRVNTICMyXS4gKi8KKworCWlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldmljZSwgMik7CisJaW9fcmFuZ2UgPSBwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXZpY2UsIDIpOworCisJcHJpbnRrKCJjb21lZGklZDogNjUwMyByZWdpc3RlcnMgYXQgYWRkcmVzcyAweCU0bHggWzB4JTRseF1cbiIsCisJCWRldi0+bWlub3IsIGlvX2Jhc2UsIGlvX3JhbmdlKTsKKworCWRldi0+aW9iYXNlID0gaW9fYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSBib2FyZC0+bmFtZTsKKwlkZXZfcHJpdmF0ZS0+aW9fcmFuZ2UgPSBpb19yYW5nZTsKKwlkZXZfcHJpdmF0ZS0+aXNfdmFsaWQgPSAwOworCWRldl9wcml2YXRlLT5sY3JfaW9fYmFzZSA9IGxjcl9pb19iYXNlOworCWRldl9wcml2YXRlLT5sY3JfaW9fcmFuZ2UgPSBsY3JfaW9fcmFuZ2U7CisKKwlwY2k5MTExX3Jlc2V0KGRldik7CisKKwkvKiAgSXJxIHNldHVwICovCisKKwlkZXYtPmlycSA9IDA7CisJaWYgKHBjaV9kZXZpY2UtPmlycSA+IDApIHsKKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShwY2lfZGV2aWNlLT5pcnEsCisJCQkJcGNpOTExMV9pbnRlcnJ1cHQsCisJCQkJSVJRRl9TSEFSRUQsIFBDSTkxMTFfRFJJVkVSX05BTUUsIGRldikgIT0gMCkgeworCQkJcHJpbnRrKCJjb21lZGklZDogdW5hYmxlIHRvIGFsbG9jYXRlIGlycSAgJXVcbiIsCisJCQkJZGV2LT5taW5vciwgcGNpX2RldmljZS0+aXJxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWRldi0+aXJxID0gcGNpX2RldmljZS0+aXJxOworCisJLyogIFRPRE86IEFkZCBleHRlcm5hbCBtdWx0aXBsZXhlciBzZXR1cCAoYWNjb3JkaW5nIHRvIG9wdGlvblsyXSkuICovCisKKwlpZiAoKGVycm9yID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpKSA8IDApCisJCXJldHVybiBlcnJvcjsKKworCXN1YmRldmljZSA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJZGV2LT5yZWFkX3N1YmRldiA9IHN1YmRldmljZTsKKworCXN1YmRldmljZS0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXN1YmRldmljZS0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0NPTU1PTiB8IFNERl9DTURfUkVBRDsKKworCS8qICBUT0RPOiBBZGQgZXh0ZXJuYWwgbXVsdGlwbGV4ZXIgZGF0YSAqLworCS8qICAgICBpZiAoZGV2cHJpdi0+dXNlbXV4KSB7IHN1YmRldmljZS0+bl9jaGFuID0gZGV2cHJpdi0+dXNlbXV4OyB9ICovCisJLyogICAgIGVsc2UgeyBzdWJkZXZpY2UtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuOyB9ICovCisKKwlzdWJkZXZpY2UtPm5fY2hhbiA9IGJvYXJkLT5haV9jaGFubmVsX25icjsKKwlzdWJkZXZpY2UtPm1heGRhdGEgPSBib2FyZC0+YWlfcmVzb2x1dGlvbl9tYXNrOworCXN1YmRldmljZS0+bGVuX2NoYW5saXN0ID0gYm9hcmQtPmFpX2NoYW5uZWxfbmJyOworCXN1YmRldmljZS0+cmFuZ2VfdGFibGUgPSBib2FyZC0+YWlfcmFuZ2VfbGlzdDsKKwlzdWJkZXZpY2UtPmNhbmNlbCA9IHBjaTkxMTFfYWlfY2FuY2VsOworCXN1YmRldmljZS0+aW5zbl9yZWFkID0gcGNpOTExMV9haV9pbnNuX3JlYWQ7CisJc3ViZGV2aWNlLT5kb19jbWR0ZXN0ID0gcGNpOTExMV9haV9kb19jbWRfdGVzdDsKKwlzdWJkZXZpY2UtPmRvX2NtZCA9IHBjaTkxMTFfYWlfZG9fY21kOworCXN1YmRldmljZS0+bXVuZ2UgPSBwY2k5MTExX2FpX211bmdlOworCisJc3ViZGV2aWNlID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwlzdWJkZXZpY2UtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzdWJkZXZpY2UtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9DT01NT047CisJc3ViZGV2aWNlLT5uX2NoYW4gPSBib2FyZC0+YW9fY2hhbm5lbF9uYnI7CisJc3ViZGV2aWNlLT5tYXhkYXRhID0gYm9hcmQtPmFvX3Jlc29sdXRpb25fbWFzazsKKwlzdWJkZXZpY2UtPmxlbl9jaGFubGlzdCA9IGJvYXJkLT5hb19jaGFubmVsX25icjsKKwlzdWJkZXZpY2UtPnJhbmdlX3RhYmxlID0gYm9hcmQtPmFvX3JhbmdlX2xpc3Q7CisJc3ViZGV2aWNlLT5pbnNuX3dyaXRlID0gcGNpOTExMV9hb19pbnNuX3dyaXRlOworCXN1YmRldmljZS0+aW5zbl9yZWFkID0gcGNpOTExMV9hb19pbnNuX3JlYWQ7CisKKwlzdWJkZXZpY2UgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXN1YmRldmljZS0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXN1YmRldmljZS0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXN1YmRldmljZS0+bl9jaGFuID0gUENJOTExMV9ESV9DSEFOTkVMX05CUjsKKwlzdWJkZXZpY2UtPm1heGRhdGEgPSAxOworCXN1YmRldmljZS0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzdWJkZXZpY2UtPmluc25fYml0cyA9IHBjaTkxMTFfZGlfaW5zbl9iaXRzOworCisJc3ViZGV2aWNlID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwlzdWJkZXZpY2UtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzdWJkZXZpY2UtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzdWJkZXZpY2UtPm5fY2hhbiA9IFBDSTkxMTFfRE9fQ0hBTk5FTF9OQlI7CisJc3ViZGV2aWNlLT5tYXhkYXRhID0gMTsKKwlzdWJkZXZpY2UtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJc3ViZGV2aWNlLT5pbnNuX2JpdHMgPSBwY2k5MTExX2RvX2luc25fYml0czsKKworCWRldl9wcml2YXRlLT5pc192YWxpZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyogIERldGFjaCAqLworCitzdGF0aWMgaW50IHBjaTkxMTFfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8qICBSZXNldCBkZXZpY2UgKi8KKworCWlmIChkZXYtPnByaXZhdGUgIT0gMCkgeworCQlpZiAoZGV2X3ByaXZhdGUtPmlzX3ZhbGlkKQorCQkJcGNpOTExMV9yZXNldChkZXYpOworCisJfQorCS8qICBSZWxlYXNlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGlycSAqLworCisJaWYgKGRldi0+aXJxICE9IDApIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKworCWlmIChkZXZfcHJpdmF0ZSAhPSAwICYmIGRldl9wcml2YXRlLT5wY2lfZGV2aWNlICE9IDApIHsKKwkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2X3ByaXZhdGUtPnBjaV9kZXZpY2UpOworCQl9CisJCXBjaV9kZXZfcHV0KGRldl9wcml2YXRlLT5wY2lfZGV2aWNlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTE4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc4Y2YzMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCkBAIC0wLDAgKzEsMjEwMCBAQAorLyoKKyAqICBjb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jCisgKgorICogIGhhcmR3YXJlIGRyaXZlciBmb3IgQURMaW5rIGNhcmRzOgorICogICBjYXJkOiAgIFBDSS05MTE4REcsIFBDSS05MTE4SEcsIFBDSS05MTE4SFIKKyAqICAgZHJpdmVyOiBwY2k5MTE4ZGcsICBwY2k5MTE4aGcsICBwY2k5MTE4aHIKKyAqCisgKiBBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorICoKKyovCisvKgorRHJpdmVyOiBhZGxfcGNpOTExOAorRGVzY3JpcHRpb246IEFkbGluayBQQ0ktOTExOERHLCBQQ0ktOTExOEhHLCBQQ0ktOTExOEhSCitBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorRGV2aWNlczogW0FETGlua10gUENJLTkxMThERyAocGNpOTExOGRnKSwgUENJLTkxMThIRyAocGNpOTExOGhnKSwKKyAgUENJLTkxMThIUiAocGNpOTExOGhyKQorU3RhdHVzOiB3b3JrcworCitUaGlzIGRyaXZlciBzdXBwb3J0cyBBSSwgQU8sIERJIGFuZCBETyBzdWJkZXZpY2VzLgorQUkgc3ViZGV2aWNlIHN1cHBvcnRzIGNtZCBhbmQgaW5zbiBpbnRlcmZhY2UsCitvdGhlciBzdWJkZXZpY2VzIHN1cHBvcnQgb25seSBpbnNuIGludGVyZmFjZS4KK0ZvciBBSToKKy0gSWYgY21kLT5zY2FuX2JlZ2luX3NyYz1UUklHX0VYVCB0aGVuIHRyaWdnZXIgaW5wdXQgaXMgVEdJTiAocGluIDQ2KS4KKy0gSWYgY21kLT5jb252ZXJ0X3NyYz1UUklHX0VYVCB0aGVuIHRyaWdnZXIgaW5wdXQgaXMgRVhUVFJHIChwaW4gNDQpLgorLSBJZiBjbWQtPnN0YXJ0X3NyYy9zdG9wX3NyYz1UUklHX0VYVCB0aGVuIHRyaWdnZXIgaW5wdXQgaXMgVEdJTiAocGluIDQ2KS4KKy0gSXQgaXMgbm90IG5lY2Nlc3NhcnkgdG8gaGF2ZSBjbWQuc2Nhbl9lbmRfYXJnPWNtZC5jaGFubGlzdF9sZW4gYnV0CisgIGNtZC5zY2FuX2VuZF9hcmcgbW9kdWxvIGNtZC5jaGFubGlzdF9sZW4gbXVzdCBieSAwLgorLSBJZiByZXR1cm4gdmFsdWUgb2YgY21kdGVzdCBpcyA1IHRoZW4geW91J3ZlIGJhZCBjaGFubmVsIGxpc3QKKyAgKGl0IGlzbid0IHBvc3NpYmxlIG1peHR1cmUgUy5FLiBhbmQgRElGRiBpbnB1dHMgb3IgYmlwb2xhciBhbmQgdW5pcG9sYXIKKyAgcmFuZ2VzKS4KKworVGhlcmUgYXJlIHNvbWUgaGFyZHdhcmUgbGltaXRhdGlvbnM6CithKSBZb3UgY2Fubid0IHVzZSBtaXh0dXJlIG9mIHVuaXBvbGFyL2JpcG9hciByYW5nZXMgb3IgZGlmZmVyZW5jaWFsL3NpbmdsZQorICAgZW5kZWQgaW5wdXRzLgorYikgRE1BIHRyYW5zZmVycyBtdXN0IGhhdmUgdGhlIGxlbmd0aCBhbGlnbmVkIHRvIHR3byBzYW1wbGVzICgzMiBiaXQpLAorICAgc28gdGhlcmUgaXMgc29tZSBwcm9ibGVtcyBpZiBjbWQtPmNoYW5saXN0X2xlbiBpcyBvZGQuIFRoaXMgZHJpdmVyIHRyaWVzCisgICBieXBhc3MgdGhpcyB3aXRoIGFkZGluZyBvbmUgc2FtcGxlIHRvIHRoZSBlbmQgb2YgdGhlIGV2ZXJ5IHNjYW4gYW5kIGRpc2NhcmQKKyAgIGl0IG9uIG91dHB1dCBidXQgdGhpcyBjYW5uJ3QgYmUgdXNlZCBpZiBjbWQtPnNjYW5fYmVnaW5fc3JjPVRSSUdfRk9MTE9XCisgICBhbmQgaXMgdXNlZCBmbGFnIFRSSUdfV0FLRV9FT1MsIHRoZW4gZHJpdmVyIHN3aXRjaCB0byBpbnRlcnJ1cHQgZHJpdmVuIG1vZGUKKyAgIHdpdGggaW50ZXJydXB0IGFmdGVyIGV2ZXJ5IHNhbXBsZS4KK2MpIElmIGlzbid0IHVzZWQgRE1BIHRoZW4geW91IGNhbiB1c2Ugb25seSBtb2RlIHdoZXJlCisgICBjbWQtPnNjYW5fYmVnaW5fc3JjPVRSSUdfRk9MTE9XLgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgICAgICAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIGZpcnN0IGF2YWlsYWJsZSBQQ0kKKyAgICAgICAgICBjYXJkIHdpbGwgYmUgdXNlZC4KKyAgWzJdIC0gMD0gc3RhbmRhcmQgOCBESUZGLzE2IFNFIGNoYW5uZWxzIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgbj0gZXh0ZXJuYWwgbXVsdGlwbGV4ZXIgY29ubmVjdGVkLCAxPD1uPD0yNTYKKyAgWzNdIC0gMD1hdXRvc2VsZWN0IERNQSBvciBFT0MgaW50ZXJydXB0cyBvcGVyYXRpb24KKyAgICAgICAgMT1kaXNhYmxlIERNQSBtb2RlCisgICAgICAgIDM9ZGlzYWJsZSBETUEgYW5kIElOVCwgb25seSBpbnNuIGludGVyZmFjZSB3aWxsIHdvcmsKKyAgWzRdIC0gc2FtcGxlJmhvbGQgc2lnbmFsIC0gY2FyZCBjYW4gZ2VuZXJhdGUgc2lnbmFsIGZvciBleHRlcm5hbCBTJkggYm9hcmQKKyAgICAgICAgMD11c2UgU1NITyAocGluIDQ1KSBzaWduYWwgaXMgZ2VuZXJhdGVkIGluIG9uYm9hcmQgaGFyZHdhcmUgUyZIIGxvZ2ljCisgICAgICAgIDAhPXVzZSBBRENITjcgKHBpbiAyMykgc2lnbmFsIGlzIGdlbmVyYXRlZCBmcm9tIGRyaXZlciwgbnVtYmVyCisgICAgICAgICAgIHNheSBob3cgbG9uZyBkZWxheSBpcyByZXF1ZXN0ZWQgaW4gbnMgYW5kIHNpZ24gcG9sYXJpdHkgb2YgdGhlIGhvbGQKKyAgICAgICAgICAgKGluIHRoaXMgY2FzZSBleHRlcm5hbCBtdWx0aXBsZXhvciBjYW4gc2VydmUgb25seSAxMjggY2hhbm5lbHMpCisgIFs1XSAtIDA9c3RvcCBtZWFzdXJlIG9uIGFsbCBoYXJkd2FyZSBlcnJvcnMKKyAgICAgICAgMnw9aWdub3JlIEFET1IgLSBBL0QgT3ZlcnJ1biBzdGF0dXMKKwk4fD1pZ25vcmUgQm92ZXIgLSBBL0QgQnVyc3QgTW9kZSBPdmVycnVuIHN0YXR1cworCTI1Nnw9aWdub3JlIG5GdWxsIC0gQS9EIEZJRk8gRnVsbCBzdGF0dXMKKworKi8KKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlICIuLi9wY2lfaWRzLmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiYW1jY19zNTkzMy5oIgorI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKy8qIHBhcmFub2lkIGNoZWNrcyBhcmUgYnJva2VuICovCisjdW5kZWYgUENJOTExOF9QQVJBTk9JRENIRUNLCS8qIGlmIGRlZmluZWQsIHRoZW4gaXMgdXNlZCBjb2RlIHdoaWNoIGNvbnRyb2wgY29ycmVjdCBjaGFubmVsIG51bWJlciBvbiBldmVyeSAxMiBiaXQgc2FtcGxlICovCisKKyN1bmRlZiBQQ0k5MTE4X0VYVERFQlVHCQkvKiBpZiBkZWZpbmVkIHRoZW4gZHJpdmVyIHByaW50cyBhIGxvdCBvZiBtZXNzYWdlcyAqLworCisjdW5kZWYgRFBSSU5USworI2lmZGVmIFBDSTkxMThfRVhUREVCVUcKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pIHJ0X3ByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lIElPUkFOR0VfOTExOCAJNjQJLyogSSBob3BlICovCisjZGVmaW5lIFBDSTkxMThfQ0hBTkxFTgkyNTUJLyogbGVuIG9mIGNoYW5saXN0LCBzb21lIHNvdXJjZSBzYXkgMjU2LCBidXQgcmVhbGl0eSBsb29rcyBsaWtlIDI1NSA6LSggKi8KKworI2RlZmluZSBQQ0k5MTE4X0NOVDAJMHgwMAkvKiBSL1c6IDgyNTQgY291dGVyIDAgKi8KKyNkZWZpbmUgUENJOTExOF9DTlQxCTB4MDQJLyogUi9XOiA4MjU0IGNvdXRlciAwICovCisjZGVmaW5lIFBDSTkxMThfQ05UMgkweDA4CS8qIFIvVzogODI1NCBjb3V0ZXIgMCAqLworI2RlZmluZSBQQ0k5MTE4X0NOVENUUkwJMHgwYwkvKiBXOiAgIDgyNTQgY291bnRlciBjb250cm9sICovCisjZGVmaW5lIFBDSTkxMThfQURfREFUQQkweDEwCS8qIFI6ICAgQS9EIGRhdGEgKi8KKyNkZWZpbmUgUENJOTExOF9EQTEJMHgxMAkvKiBXOiAgIEQvQSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUENJOTExOF9EQTIJMHgxNAorI2RlZmluZSBQQ0k5MTE4X0FEU1RBVAkweDE4CS8qIFI6ICAgQS9EIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBQQ0k5MTE4X0FEQ05UUkwJMHgxOAkvKiBXOiAgIEEvRCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTkxMThfREkJMHgxYwkvKiBSOiAgIGRpZ2kgaW5wdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJOTExOF9ETwkweDFjCS8qIFc6ICAgZGlnaSBvdXRwdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJOTExOF9TT0ZUVFJHCTB4MjAJLyogVzogICBzb2Z0IHRyaWdnZXIgZm9yIEEvRCAqLworI2RlZmluZSBQQ0k5MTE4X0dBSU4JMHgyNAkvKiBXOiAgIEEvRCBnYWluL2NoYW5uZWwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJOTExOF9CVVJTVAkweDI4CS8qIFc6ICAgQS9EIGJ1cnN0IG51bWJlciByZWdpc3RlciAqLworI2RlZmluZSBQQ0k5MTE4X1NDQU5NT0QJMHgyYwkvKiBXOiAgIEEvRCBhdXRvIHNjYW4gbW9kZSAqLworI2RlZmluZSBQQ0k5MTE4X0FERlVOQwkweDMwCS8qIFc6ICAgQS9EIGZ1bmN0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTkxMThfREVMRklGTwkweDM0CS8qIFc6ICAgQS9EIGRhdGEgRklGTyByZXNldCAqLworI2RlZmluZSBQQ0k5MTE4X0lOVFNSQwkweDM4CS8qIFI6ICAgaW50ZXJydXB0IHJlYXNvbiByZWdpc3RlciAqLworI2RlZmluZSBQQ0k5MTE4X0lOVENUUkwJMHgzOAkvKiBXOiAgIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisKKy8vIGJpdHMgZnJvbSBBL0QgY29udHJvbCByZWdpc3RlciAoUENJOTExOF9BRENOVFJMKQorI2RlZmluZSBBZENvbnRyb2xfVW5pUAkweDgwCS8qIDE9Ymlwb2xhciwgMD11bmlwb2xhciAqLworI2RlZmluZSBBZENvbnRyb2xfRGlmZgkweDQwCS8qIDE9ZGlmZmVyZW50aWFsLCAwPSBzaW5nbGUgZW5kIGlucHV0cyAqLworI2RlZmluZSBBZENvbnRyb2xfU29mdEcJMHgyMAkvKiAxPTgyNTQgY291bnRlciB3b3JrcywgMD1jb3VudGVyIHN0b3BzICovCisjZGVmaW5lCUFkQ29udHJvbF9FeHRHCTB4MTAJLyogMT04MjU0IGNvdW50cm9sIGNvbnRyb2xsZWQgYnkgVEdJTihwaW4gNDYpLCAwPWNvbnRyb2xlZCBieSBTb2Z0RyAqLworI2RlZmluZSBBZENvbnRyb2xfRXh0TQkweDA4CS8qIDE9ZXh0ZXJuYWwgaGFyZHdhcmUgdHJpZ2dlciAocGluIDQ0KSwgMD1pbnRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIEFkQ29udHJvbF9UbXJUcgkweDA0CS8qIDE9ODI1NCBpcyBpdGVybmFsIHRyaWdnZXIgc291cmNlLCAwPXNvZnR3YXJlIHRyaWdnZXIgaXMgc291cmNlIChyZWdpc3RlciBQQ0k5MTE4X1NPRlRUUkcpICovCisjZGVmaW5lIEFkQ29udHJvbF9JbnQJMHgwMgkvKiAxPWVuYWJsZSBJTlQsIDA9ZGlzYWJsZSAqLworI2RlZmluZSBBZENvbnRyb2xfRG1hCTB4MDEJLyogMT1lbmFibGUgRE1BLCAwPWRpc2FibGUgKi8KKworLy8gYml0cyBmcm9tIEEvRCBmdW5jdGlvbiByZWdpc3RlciAoUENJOTExOF9BREZVTkMpCisjZGVmaW5lIEFkRnVuY3Rpb25fUERUcmcJMHg4MAkvKiAxPXBvc2l0aXZlLCAwPW5lZ2F0aXZlIGRpZ2l0YWwgdHJpZ2dlciAob25seSBwb3NpdGl2ZSBpcyBjb3JyZWN0KSAqLworI2RlZmluZSBBZEZ1bmN0aW9uX1BFVHJnCTB4NDAJLyogMT1wb3NpdGl2ZSwgMD1uZWdhdGl2ZSBleHRlcm5hbCB0cmlnZ2VyIChvbmx5IHBvc2l0aXZlIGlzIGNvcnJlY3QpICovCisjZGVmaW5lIEFkRnVuY3Rpb25fQlNTSAkJMHgyMAkvKiAxPXdpdGggc2FtcGxlJmhvbGQsIDA9d2l0aG91dCAqLworI2RlZmluZSBBZEZ1bmN0aW9uX0JNCQkweDEwCS8qIDE9YnVyc3QgbW9kZSwgMD1ub3JtYWwgbW9kZSAqLworI2RlZmluZSBBZEZ1bmN0aW9uX0JTCQkweDA4CS8qIDE9YnVyc3QgbW9kZSBzdGFydCwgMD1idXJzdCBtb2RlIHN0b3AgKi8KKyNkZWZpbmUgQWRGdW5jdGlvbl9QTQkJMHgwNAkvKiAxPXBvc3QgdHJpZ2dlciBtb2RlLCAwPW5vdCBwb3N0IHRyaWdnZXIgKi8KKyNkZWZpbmUgQWRGdW5jdGlvbl9BTQkJMHgwMgkvKiAxPWFib3V0IHRyaWdnZXIgbW9kZSwgMD1ub3QgYWJvdXQgdHJpZ2dlciAqLworI2RlZmluZSBBZEZ1bmN0aW9uX1N0YXJ0CTB4MDEJLyogMT10cmlnZ2VyIHN0YXJ0LCAwPXRyaWdnZXIgc3RvcCAqLworCisvLyBiaXRzIGZyb20gQS9EIHN0YXR1cyByZWdpc3RlciAoUENJOTExOF9BRFNUQVQpCisjZGVmaW5lIEFkU3RhdHVzX25GdWxsCTB4MTAwCS8qIDA9RklGTyBmdWxsIChmYXRhbCksIDE9bm90IGZ1bGwgKi8KKyNkZWZpbmUgQWRTdGF0dXNfbkhmdWxsCTB4MDgwCS8qIDA9RklGTyBoYWxmIGZ1bGwsIDE9RklGTyBub3QgaGFsZiBmdWxsICovCisjZGVmaW5lIEFkU3RhdHVzX25FcHR5CTB4MDQwCS8qIDA9RklGTyBlbXB0eSwgMT1GSUZPIG5vdCBlbXB0eSAqLworI2RlZmluZSBBZFN0YXR1c19BY21wCTB4MDIwCS8qICAqLworI2RlZmluZSBBZFN0YXR1c19EVEgJMHgwMTAJLyogMT1leHRlcm5hbCBkaWdpdGFsIHRyaWdnZXIgKi8KKyNkZWZpbmUgQWRTdGF0dXNfQm92ZXIJMHgwMDgJLyogMT1idXJzdCBtb2RlIG92ZXJydW4gKGZhdGFsKSAqLworI2RlZmluZSBBZFN0YXR1c19BRE9TCTB4MDA0CS8qIDE9QS9EIG92ZXIgc3BlZWQgKHdhcm5pbmcpICovCisjZGVmaW5lIEFkU3RhdHVzX0FET1IJMHgwMDIJLyogMT1BL0Qgb3ZlcnJ1biAoZmF0YWwpICovCisjZGVmaW5lIEFkU3RhdHVzX0FEcmR5CTB4MDAxCS8qIDE9QS9EIGFscmVhZHkgcmVhZHksIDA9bm90IHJlYWR5ICovCisKKy8vIGJpdHMgZm9yIGludGVycnVwdCByZWFzb24gYW5kIGNvbnRyb2wgKFBDSTkxMThfSU5UU1JDLCBQQ0k5MTE4X0lOVENUUkwpCisvLyAxPWludGVycnVwdCBvY2N1ciwgZW5hYmxlIHNvdXJjZSwgIDA9aW50ZXJydXB0IG5vdCBvY2N1ciwgZGlzYWJsZSBzb3VyY2UKKyNkZWZpbmUgSW50X1RpbWVyCTB4MDgJLyogdGltZXIgaW50ZXJydXB0ICovCisjZGVmaW5lIEludF9BYm91dAkweDA0CS8qIGFib3V0IHRyaWdnZXIgY29tcGxldGUgKi8KKyNkZWZpbmUgSW50X0hmdWxsCTB4MDIJLyogQS9EIEZJRk8gaGxhZiBmdWxsICovCisjZGVmaW5lIEludF9EVHJnCTB4MDEJLyogZXh0ZXJuYWwgZGlnaXRhbCB0cmlnZ2VyICovCisKKyNkZWZpbmUgU1RBUlRfQUlfRVhUCTB4MDEJLyogc3RhcnQgbWVhc3VyZSBvbiBleHRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIFNUT1BfQUlfRVhUCTB4MDIJLyogc3RvcCBtZWFzdXJlIG9uIGV4dGVybmFsIHRyaWdnZXIgKi8KKyNkZWZpbmUgU1RBUlRfQUlfSU5UCTB4MDQJLyogc3RhcnQgbWVhc3VyZSBvbiBpbnRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIFNUT1BfQUlfSU5UCTB4MDgJLyogc3RvcCBtZWFzdXJlIG9uIGludGVybmFsIHRyaWdnZXIgKi8KKworI2RlZmluZSBFWFRUUkdfQUkJMAkvKiBleHQgdHJnIGlzIHVzZWQgYnkgQUkgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTkxMThkZ19ociA9IHsgOCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTkxMThoZyA9IHsgOCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDEpCisJfQorfTsKKworI2RlZmluZSBQQ0k5MTE4X0JJUE9MQVJfUkFOR0VTCTQJLyogdXNlZCBmb3IgdGVzdCBvbiBtaXh0dXJlIG9mIEJJUC9VTkkgcmFuZ2VzICovCisKK3N0YXRpYyBpbnQgcGNpOTExOF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2k5MTE4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0cnVjdCBib2FyZHR5cGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGJvYXJkIG5hbWUKKwlpbnQgdmVuZG9yX2lkOwkJLy8gUENJIHZlbmRvciBhIGRldmljZSBJRCBvZiBjYXJkCisJaW50IGRldmljZV9pZDsKKwlpbnQgaW9yYW5nZV9hbWNjOwkvLyBpb3JhbmdlIGZvciBvd24gUzU5MzMgcmVnaW9uCisJaW50IGlvcmFuZ2VfOTExODsJLy8gcGFzcyB0aHJ1IGNhcmQgcmVnaW9uIHNpemUKKwlpbnQgbl9haWNoYW47CQkvLyBudW0gb2YgQS9EIGNoYW5zCisJaW50IG5fYWljaGFuZDsJCS8vIG51bSBvZiBBL0QgY2hhbnMgaW4gZGlmZiBtb2RlCisJaW50IG11eF9haWNoYW47CQkvLyBudW0gb2YgQS9EIGNoYW5zIHdpdGggZXh0ZXJuYWwgbXVsdGlwbGV4b3IKKwlpbnQgbl9haWNoYW5saXN0OwkvLyBsZW4gb2YgY2hhbmxpc3QKKwlpbnQgbl9hb2NoYW47CQkvLyBudW0gb2YgRC9BIGNoYW5zCisJaW50IGFpX21heGRhdGE7CQkvLyByZXNvbHV0aW9uIG9mIEEvRAorCWludCBhb19tYXhkYXRhOwkJLy8gcmVzb2x1dGlvbiBvZiBEL0EKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FpOwkvLyByYW5nZWxpc3QgZm9yIEEvRAorCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZWxpc3RfYW87CS8vIHJhbmdlbGlzdCBmb3IgRC9BCisJdW5zaWduZWQgaW50IGFpX25zX21pbjsJLy8gbWF4IHNhbXBsZSBzcGVlZCBvZiBjYXJkIHYgbnMKKwl1bnNpZ25lZCBpbnQgYWlfcGFjZXJfbWluOwkvLyBtaW5pbWFsIHBhY2VyIHZhbHVlIChjMSpjMiBvciBjMSBpbiBidXJzdCkKKwlpbnQgaGFsZl9maWZvX3NpemU7CS8vIHNpemUgb2YgRklGTy8yCisKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2k5MTE4X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQU1DQywgMHg4MGQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2k5MTE4X3BjaV90YWJsZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYm9hcmR0eXBlIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjaTkxMThkZyIsIFBDSV9WRU5ET1JfSURfQU1DQywgMHg4MGQ5LAorCQkJQU1DQ19PUF9SRUdfU0laRSwgSU9SQU5HRV85MTE4LAorCQkJMTYsIDgsIDI1NiwgUENJOTExOF9DSEFOTEVOLCAyLCAweDBmZmYsIDB4MGZmZiwKKwkJCSZyYW5nZV9wY2k5MTE4ZGdfaHIsICZyYW5nZV9iaXBvbGFyMTAsCisJCTMwMDAsIDEyLCA1MTJ9LAorCXsicGNpOTExOGhnIiwgUENJX1ZFTkRPUl9JRF9BTUNDLCAweDgwZDksCisJCQlBTUNDX09QX1JFR19TSVpFLCBJT1JBTkdFXzkxMTgsCisJCQkxNiwgOCwgMjU2LCBQQ0k5MTE4X0NIQU5MRU4sIDIsIDB4MGZmZiwgMHgwZmZmLAorCQkJJnJhbmdlX3BjaTkxMThoZywgJnJhbmdlX2JpcG9sYXIxMCwKKwkJMzAwMCwgMTIsIDUxMn0sCisJeyJwY2k5MTE4aHIiLCBQQ0lfVkVORE9SX0lEX0FNQ0MsIDB4ODBkOSwKKwkJCUFNQ0NfT1BfUkVHX1NJWkUsIElPUkFOR0VfOTExOCwKKwkJCTE2LCA4LCAyNTYsIFBDSTkxMThfQ0hBTkxFTiwgMiwgMHhmZmZmLCAweDBmZmYsCisJCQkmcmFuZ2VfcGNpOTExOGRnX2hyLCAmcmFuZ2VfYmlwb2xhcjEwLAorCQkxMDAwMCwgNDAsIDUxMn0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgYm9hcmR0eXBlKSkKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2k5MTE4ID0geworICAgICAgZHJpdmVyX25hbWU6ImFkbF9wY2k5MTE4IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2k5MTE4X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2k5MTE4X2RldGFjaCwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBib2FyZHR5cGUpLAorfTsKKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfcGNpOTExOCwgcGNpOTExOF9wY2lfdGFibGUpOworCitzdHJ1Y3QgcGNpOTExOF9wcml2YXRlIHsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZV9hOwkvLyBiYXNlK3NpemUgZm9yIEFNQ0MgY2hpcAorCXVuc2lnbmVkIGludCBtYXN0ZXI7CS8vIG1hc3RlciBjYXBhYmxlCisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsJLy8gcHRyIHRvIGFjdHVhbCBwY2lkZXYKKwl1bnNpZ25lZCBpbnQgdXNlbXV4OwkvLyB3ZSB3YW50IHRvIHVzZSBleHRlcm5hbCBtdWx0aXBsZXhvciEKKyNpZmRlZiBQQ0k5MTE4X1BBUkFOT0lEQ0hFQ0sKKwl1bnNpZ25lZCBzaG9ydCBjaGFubGlzdFtQQ0k5MTE4X0NIQU5MRU4gKyAxXTsJLy8gbGlzdCBvZiBzY2FuZWQgY2hhbm5lbAorCXVuc2lnbmVkIGNoYXIgY2hhbmxpc3RsZW47CS8vIG51bWJlciBvZiBzY2FubGlzdAorI2VuZGlmCisJdW5zaWduZWQgY2hhciBBZENvbnRyb2xSZWc7CS8vIEEvRCBjb250cm9sIHJlZ2lzdGVyCisJdW5zaWduZWQgY2hhciBJbnRDb250cm9sUmVnOwkvLyBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlcgorCXVuc2lnbmVkIGNoYXIgQWRGdW5jdGlvblJlZzsJLy8gQS9EIGZ1bmN0aW9uIHJlZ2lzdGVyCisJY2hhciB2YWxpZDsJCS8vIGRyaXZlciBpcyBvaworCWNoYXIgYWlfbmV2ZXJlbmRpbmc7CS8vIHdlIGRvIHVubGltaXRlZCBBSQorCXVuc2lnbmVkIGludCBpODI1NF9vc2NfYmFzZTsJLy8gZnJlcXVlbmNlIG9mIG9uYm9hcmQgb3NjaWxhdG9yCisJdW5zaWduZWQgaW50IGFpX2RvOwkvLyB3aGF0IGRvIEFJPyAwPW5vdGhpbmcsIDEgdG8gNCBtb2RlCisJdW5zaWduZWQgaW50IGFpX2FjdF9zY2FuOwkvLyBob3cgbWFueSBzY2FucyB3ZSBmaW5pc2hlZAorCXVuc2lnbmVkIGludCBhaV9idWZfcHRyOwkvLyBkYXRhIGJ1ZmZlciBwdHIgaW4gc2FtcGxlcworCXVuc2lnbmVkIGludCBhaV9uX2NoYW47CS8vIGhvdyBtYW55IGNoYW5uZWxzIGlzIG1lYXN1cmVkCisJdW5zaWduZWQgaW50IGFpX25fc2NhbmxlbjsJLy8gbGVuIG9mIGFjdHVhbCBzY2FubGlzdAorCXVuc2lnbmVkIGludCBhaV9uX3JlYWxzY2FubGVuOwkvLyB3aGF0IHdlIG11c3QgdHJhbnNmZXIgZm9yIG9uZSBvdXRnb2luZyBzY2FuIGluY2x1ZGUgZnJvbnQvYmFjayBhZGRzCisJdW5zaWduZWQgaW50IGFpX2FjdF9kbWFwb3M7CS8vIHBvc2l0aW9uIGluIGFjdHVhbCByZWFsIHN0cmVhbQorCXVuc2lnbmVkIGludCBhaV9hZGRfZnJvbnQ7CS8vIGhvdyBtYW55IGNoYW5uZWxzIHdlIG11c3QgYWRkIGJlZm9yZSBzY2FuIHRvIHNhdGlzZnkgUyZIPworCXVuc2lnbmVkIGludCBhaV9hZGRfYmFjazsJLy8gaG93IG1hbnkgY2hhbm5lbHMgd2UgbXVzdCBhZGQgYmVmb3JlIHNjYW4gdG8gc2F0aXNmeSBETUE/CisJdW5zaWduZWQgaW50ICphaV9jaGFubGlzdDsJLy8gYWN0YXVsIGNoYW5saXN0CisJdW5zaWduZWQgaW50IGFpX3RpbWVyMTsKKwl1bnNpZ25lZCBpbnQgYWlfdGltZXIyOworCXVuc2lnbmVkIGludCBhaV9mbGFnczsKKwljaGFyIGFpMTJfc3RhcnRzdG9wOwkvLyBtZWFzdXJlIGNhbiBzdGFydC9zdG9wIG9uIGV4dGVybmFsIHRyaWdnZXIKKwl1bnNpZ25lZCBpbnQgYWlfZGl2aXNvcjEsIGFpX2Rpdmlzb3IyOwkvLyBkaXZpc29ycyBmb3Igc3RhcnQgb2YgbWVhc3VyZSBvbiBleHRlcm5hbCBzdGFydAorCXVuc2lnbmVkIGludCBhaV9kYXRhX2xlbjsKKwlzaG9ydCAqYWlfZGF0YTsKKwlzaG9ydCBhb19kYXRhWzJdOwkvLyBkYXRhIG91dHB1dCBidWZmZXIKKwl1bnNpZ25lZCBpbnQgYWlfc2NhbnM7CS8vIG51bWJlciBvZiBzY2FucyB0byBkbworCWNoYXIgZG1hX2RvdWJsZWJ1ZjsJLy8gd2UgY2FuIHVzZSBkb3VibGUgYnVmZnJpbmcKKwl1bnNpZ25lZCBpbnQgZG1hX2FjdGJ1ZjsJLy8gd2hpY2ggYnVmZmVyIGlzIHVzZWQgbm93CisJc2hvcnQgKmRtYWJ1Zl92aXJ0WzJdOwkvLyBwb2ludGVycyB0byBiZWdpbiBvZiBETUEgYnVmZmVyCisJdW5zaWduZWQgbG9uZyBkbWFidWZfaHdbMl07CS8vIGh3IGFkZHJlc3Mgb2YgRE1BIGJ1ZmYKKwl1bnNpZ25lZCBpbnQgZG1hYnVmX3NpemVbMl07CS8vIHNpemUgb2YgZG1hIGJ1ZmZlciBpbiBieXRlcworCXVuc2lnbmVkIGludCBkbWFidWZfdXNlX3NpemVbMl07CS8vIHdoaWNoIHNpemUgd2UgbWF5IG5vdyB1c2VkIGZvciB0cmFuc2ZlcgorCXVuc2lnbmVkIGludCBkbWFidWZfdXNlZF9zaXplWzJdOwkvLyB3aGljaCBzaXplIHdhcyB0cnVsbHkgdXNlZAorCXVuc2lnbmVkIGludCBkbWFidWZfcGFuaWNfc2l6ZVsyXTsKKwl1bnNpZ25lZCBpbnQgZG1hYnVmX3NhbXBsZXNbMl07CS8vIHNpemUgaW4gc2FtcGxlcworCWludCBkbWFidWZfcGFnZXNbMl07CS8vIG51bWJlciBvZiBwYWdlcyBpbiBidWZmZXIKKwl1bnNpZ25lZCBjaGFyIGNudDBfdXNlcnM7CS8vIGJpdCBmaWVsZCBvZiA4MjU0IENOVDAgdXNlcnMgKDAtdW51c2VkLCAxLUFPLCAyLURJLCAzLURPKQorCXVuc2lnbmVkIGNoYXIgZXh0dHJnX3VzZXJzOwkvLyBiaXQgZmllbGQgb2YgZXh0ZXJuYWwgdHJpZ2dlciB1c2VycyAoMC1BSSwgMS1BTywgMi1ESSwgMy1ETykKKwl1bnNpZ25lZCBpbnQgY250MF9kaXZpc29yOwkvLyBhY3R1YWwgQ05UMCBkaXZpc29yCisJdm9pZCAoKmludF9haV9mdW5jKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgc2hvcnQpOwkvLyBwdHIgdG8gYWN0dWFsIGludGVycnVwdCBBSSBmdW5jdGlvbgorCXVuc2lnbmVkIGNoYXIgYWkxNmJpdHM7CS8vID0xIDE2IGJpdCBjYXJkCisJdW5zaWduZWQgY2hhciB1c2VkbWE7CS8vID0xIHVzZSBETUEgdHJhbnNmZXIgYW5kIG5vdCBJTlQKKwl1bnNpZ25lZCBjaGFyIHVzZWVvc2hhbmRsZTsJLy8gPTEgY2hhbmdlIFdBS0VfRU9TIERNQSB0cmFuc2ZlciB0byBmaXQgb24gZXZlcnkgc2Vjb25kCisJdW5zaWduZWQgY2hhciB1c2Vzc2g7CS8vID0xIHR1cm4gb24gUyZIIHN1cHBvcnQKKwlpbnQgc29mdHNzaGRlbGF5OwkvLyA+MCB1c2Ugc29mdHdhcmUgUyZILCBudW1lciBpcyByZXF1ZXN0ZWQgZGVsYXkgaW4gbnMKKwl1bnNpZ25lZCBjaGFyIHNvZnRzc2hzYW1wbGU7CS8vIHBvbGFyaXR5IG9mIFMmSCBzaWduYWwgaW4gc2FtcGxlIHN0YXRlCisJdW5zaWduZWQgY2hhciBzb2Z0c3NoaG9sZDsJLy8gcG9sYXJpdHkgb2YgUyZIIHNpZ25hbCBpbiBob2xkIHN0YXRlCisJdW5zaWduZWQgaW50IGFpX21hc2tlcnI7CS8vIHdoaWNoIHdhcm5pbmcgd2FzIHByaW50ZWQKKwl1bnNpZ25lZCBpbnQgYWlfbWFza2hhcmRlcnI7CS8vIG9uIHdoaWNoIGVycm9yIGJpdHMgc3RvcHMKKwl1bnNpZ25lZCBpbnQgYWlfaW50dHJpZ19zdGFydDsJLy8gVFJJR19JTlQgZm9yIHN0YXJ0Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpOTExOF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSB0aGlzX2JvYXJkICgoc3RydWN0IGJvYXJkdHlwZSAqKWRldi0+Ym9hcmRfcHRyKQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCBuX2NoYW4sIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsIGludCBmcm9udGFkZCwgaW50IGJhY2thZGQpOworc3RhdGljIGludCBzZXR1cF9jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCBpbnQgcm90LCBpbnQgZnJvbnRhZGQsIGludCBiYWNrYWRkLAorCWludCB1c2VkbWEsIGNoYXIgZW9zaGFuZGxlKTsKK3N0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRpdmlzb3IxLAorCXVuc2lnbmVkIGludCBkaXZpc29yMik7CitzdGF0aWMgaW50IHBjaTkxMThfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBwY2k5MTE4X2V4dHRyZ19hZGQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYXIgc291cmNlKTsKK3N0YXRpYyBpbnQgcGNpOTExOF9leHR0cmdfZGVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFyIHNvdXJjZSk7CitzdGF0aWMgaW50IHBjaTkxMThfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgcGNpOTExOF9jYWxjX2Rpdmlzb3JzKGNoYXIgbW9kZSwgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCB1bnNpZ25lZCBpbnQgKnRpbTEsIHVuc2lnbmVkIGludCAqdGltMiwKKwl1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBjaGFucywgdW5zaWduZWQgaW50ICpkaXYxLCB1bnNpZ25lZCBpbnQgKmRpdjIsCisJY2hhciB1c2Vzc2gsIHVuc2lnbmVkIGludCBjaG5zc2hmcm9udCk7CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfaW5zbl9yZWFkX2FpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCWludCBuLCB0aW1lb3V0OworCisJZGV2cHJpdi0+QWRDb250cm9sUmVnID0gQWRDb250cm9sX0ludCAmIDB4ZmY7CisJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyA9IEFkRnVuY3Rpb25fUERUcmcgfCBBZEZ1bmN0aW9uX1BFVHJnOworCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CS8vIHBvc2l0aXZlIHRyaWdnZXJzLCBubyBTJkgsIG5vIGJ1cnN0LCBidXJzdCBzdG9wLCBubyBwb3N0IHRyaWdnZXIsIG5vIGFib3V0IHRyaWdnZXIsIHRyaWdnZXIgc3RvcAorCisJaWYgKCFzZXR1cF9jaGFubmVsX2xpc3QoZGV2LCBzLCAxLCAmaW5zbi0+Y2hhbnNwZWMsIDAsIDAsIDAsIDAsIDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0RFTEZJRk8pOwkvLyBmbHVzaCBGSUZPCisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NPRlRUUkcpOwkvKiBzdGFydCBjb252ZXJzaW9uICovCisJCWNvbWVkaV91ZGVsYXkoMik7CisJCXRpbWVvdXQgPSAxMDA7CisJCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJCWlmIChpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEU1RBVCkgJiBBZFN0YXR1c19BRHJkeSkKKwkJCQlnb3RvIGNvbnZfZmluaXNoOworCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJfQorCisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgaW5zbiB0aW1lb3V0Iik7CisJCWRhdGFbbl0gPSAwOworCQlvdXRsKDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9ERUxGSUZPKTsJLy8gZmx1c2ggRklGTworCQlyZXR1cm4gLUVUSU1FOworCisJICAgICAgY29udl9maW5pc2g6CisJCWlmIChkZXZwcml2LT5haTE2Yml0cykgeworCQkJZGF0YVtuXSA9CisJCQkJKGlubChkZXYtPmlvYmFzZSArCisJCQkJCVBDSTkxMThfQURfREFUQSkgJiAweGZmZmYpIF4gMHg4MDAwOworCQl9IGVsc2UgeworCQkJZGF0YVtuXSA9CisJCQkJKGludyhkZXYtPmlvYmFzZSArCisJCQkJCVBDSTkxMThfQURfREFUQSkgPj4gNCkgJiAweGZmZjsKKwkJfQorCX0KKworCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0RFTEZJRk8pOwkvLyBmbHVzaCBGSUZPCisJcmV0dXJuIG47CisKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9pbnNuX3dyaXRlX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgY2hhbnJlZywgY2g7CisKKwljaCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmIChjaCkgeworCQljaGFucmVnID0gUENJOTExOF9EQTI7CisJfSBlbHNlIHsKKwkJY2hhbnJlZyA9IFBDSTkxMThfREExOworCX0KKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJb3V0bChkYXRhW25dLCBkZXYtPmlvYmFzZSArIGNoYW5yZWcpOworCQlkZXZwcml2LT5hb19kYXRhW2NoXSA9IGRhdGFbbl07CisJfQorCisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfaW5zbl9yZWFkX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKQorCQlkYXRhW25dID0gZGV2cHJpdi0+YW9fZGF0YVtjaGFuXTsKKworCXJldHVybiBuOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X2luc25fYml0c19kaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVsxXSA9IGlubChkZXYtPmlvYmFzZSArIFBDSTkxMThfREkpICYgMHhmOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfaW5zbl9iaXRzX2RvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJb3V0bChzLT5zdGF0ZSAmIDB4MGYsIGRldi0+aW9iYXNlICsgUENJOTExOF9ETyk7CisJfQorCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgaW50ZXJydXB0X3BjaTkxMThfYWlfbW9kZTRfc3dpdGNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWRldnByaXYtPkFkRnVuY3Rpb25SZWcgPQorCQlBZEZ1bmN0aW9uX1BEVHJnIHwgQWRGdW5jdGlvbl9QRVRyZyB8IEFkRnVuY3Rpb25fQU07CisJb3V0bChkZXZwcml2LT5BZEZ1bmN0aW9uUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURGVU5DKTsKKwlvdXRsKDB4MzAsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlRDVFJMKTsKKwlvdXRsKChkZXZwcml2LT5kbWFidWZfaHdbMSAtIGRldnByaXYtPmRtYV9hY3RidWZdID4+IDEpICYgMHhmZiwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVDApOworCW91dGwoKGRldnByaXYtPmRtYWJ1Zl9od1sxIC0gZGV2cHJpdi0+ZG1hX2FjdGJ1Zl0gPj4gOSkgJiAweGZmLAorCQlkZXYtPmlvYmFzZSArIFBDSTkxMThfQ05UMCk7CisJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyB8PSBBZEZ1bmN0aW9uX1N0YXJ0OworCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVmcmFnbWVudF9kbWFfYnVmZmVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc2hvcnQgKiBkbWFfYnVmZmVyLCB1bnNpZ25lZCBpbnQgbnVtX3NhbXBsZXMpCit7CisJdW5zaWduZWQgaW50IGkgPSAwLCBqID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhcnRfcG9zID0gZGV2cHJpdi0+YWlfYWRkX2Zyb250LAorCQlzdG9wX3BvcyA9IGRldnByaXYtPmFpX2FkZF9mcm9udCArIGRldnByaXYtPmFpX25fY2hhbjsKKwl1bnNpZ25lZCBpbnQgcmF3X3NjYW5sZW4gPSBkZXZwcml2LT5haV9hZGRfZnJvbnQgKyBkZXZwcml2LT5haV9uX2NoYW4gKworCQlkZXZwcml2LT5haV9hZGRfYmFjazsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fc2FtcGxlczsgaSsrKSB7CisJCWlmIChkZXZwcml2LT5haV9hY3RfZG1hcG9zID49IHN0YXJ0X3BvcyAmJgorCQkJZGV2cHJpdi0+YWlfYWN0X2RtYXBvcyA8IHN0b3BfcG9zKSB7CisJCQlkbWFfYnVmZmVyW2orK10gPSBkbWFfYnVmZmVyW2ldOworCQl9CisJCWRldnByaXYtPmFpX2FjdF9kbWFwb3MrKzsKKwkJZGV2cHJpdi0+YWlfYWN0X2RtYXBvcyAlPSByYXdfc2NhbmxlbjsKKwl9CisKKwlyZXR1cm4gajsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbW92ZV9ibG9ja19mcm9tX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHNob3J0ICogZG1hX2J1ZmZlciwgdW5zaWduZWQgaW50IG51bV9zYW1wbGVzKQoreworCXVuc2lnbmVkIGludCBudW1fYnl0ZXM7CisKKwludW1fc2FtcGxlcyA9IGRlZnJhZ21lbnRfZG1hX2J1ZmZlcihkZXYsIHMsIGRtYV9idWZmZXIsIG51bV9zYW1wbGVzKTsKKwlkZXZwcml2LT5haV9hY3Rfc2NhbiArPQorCQkocy0+YXN5bmMtPmN1cl9jaGFuICsgbnVtX3NhbXBsZXMpIC8gZGV2cHJpdi0+YWlfbl9zY2FubGVuOworCXMtPmFzeW5jLT5jdXJfY2hhbiArPSBudW1fc2FtcGxlczsKKwlzLT5hc3luYy0+Y3VyX2NoYW4gJT0gZGV2cHJpdi0+YWlfbl9zY2FubGVuOworCW51bV9ieXRlcyA9CisJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZG1hX2J1ZmZlciwKKwkJbnVtX3NhbXBsZXMgKiBzaXplb2Yoc2hvcnQpKTsKKwlpZiAobnVtX2J5dGVzIDwgbnVtX3NhbXBsZXMgKiBzaXplb2Yoc2hvcnQpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgY2hhciBwY2k5MTE4X2RlY29kZV9lcnJvcl9zdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCB1bnNpZ25lZCBjaGFyIG0pCit7CisJaWYgKG0gJiAweDEwMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIEZJRk8gRnVsbCBzdGF0dXMgKEZhdGFsIEVycm9yISkiKTsKKwkJZGV2cHJpdi0+YWlfbWFza2VyciAmPSB+MHgxMDBMOworCX0KKwlpZiAobSAmIDB4MDA4KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiQS9EIEJ1cnN0IE1vZGUgT3ZlcnJ1biBTdGF0dXMgKEZhdGFsIEVycm9yISkiKTsKKwkJZGV2cHJpdi0+YWlfbWFza2VyciAmPSB+MHgwMDhMOworCX0KKwlpZiAobSAmIDB4MDA0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgT3ZlciBTcGVlZCBTdGF0dXMgKFdhcm5pbmchKSIpOworCQlkZXZwcml2LT5haV9tYXNrZXJyICY9IH4weDAwNEw7CisJfQorCWlmIChtICYgMHgwMDIpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgIkEvRCBPdmVycnVuIFN0YXR1cyAoRmF0YWwgRXJyb3IhKSIpOworCQlkZXZwcml2LT5haV9tYXNrZXJyICY9IH4weDAwMkw7CisJfQorCWlmIChtICYgZGV2cHJpdi0+YWlfbWFza2hhcmRlcnIpIHsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQlwY2k5MTE4X2FpX2NhbmNlbChkZXYsIHMpOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBjaTkxMThfYWlfbXVuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzLCB1bnNpZ25lZCBpbnQgc3RhcnRfY2hhbl9pbmRleCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbnVtX3NhbXBsZXMgPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOworCXNob3J0ICphcnJheSA9IGRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkrKykgeworCQlpZiAoZGV2cHJpdi0+dXNlZG1hKQorCQkJYXJyYXlbaV0gPSBiZTE2X3RvX2NwdShhcnJheVtpXSk7CisJCWlmIChkZXZwcml2LT5haTE2Yml0cykgeworCQkJYXJyYXlbaV0gXj0gMHg4MDAwOworCQl9IGVsc2UgeworCQkJYXJyYXlbaV0gPSAoYXJyYXlbaV0gPj4gNCkgJiAweDBmZmY7CisJCX0KKwl9Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBpbnRlcnJ1cHRfcGNpOTExOF9haV9vbmVzYW1wbGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCB1bnNpZ25lZCBzaG9ydCBpbnRfYWRzdGF0LCB1bnNpZ25lZCBpbnQgaW50X2FtY2MsCisJdW5zaWduZWQgc2hvcnQgaW50X2RhcSkKK3sKKwlyZWdpc3RlciBzaG9ydCBzYW1wbDsKKworCXMtPmFzeW5jLT5ldmVudHMgPSAwOworCisJaWYgKGludF9hZHN0YXQgJiBkZXZwcml2LT5haV9tYXNrZXJyKQorCQlpZiAocGNpOTExOF9kZWNvZGVfZXJyb3Jfc3RhdHVzKGRldiwgcywgaW50X2Fkc3RhdCkpCisJCQlyZXR1cm47CisKKwlzYW1wbCA9IGludyhkZXYtPmlvYmFzZSArIFBDSTkxMThfQURfREFUQSk7CisKKyNpZmRlZiBQQ0k5MTE4X1BBUkFOT0lEQ0hFQ0sKKwlpZiAoZGV2cHJpdi0+YWkxNmJpdHMgPT0gMCkgeworCQlpZiAoKHNhbXBsICYgMHgwMDBmKSAhPSBkZXZwcml2LT5jaGFubGlzdFtzLT5hc3luYy0+Y3VyX2NoYW5dKSB7CS8vIGRhdGEgZHJvcG91dCEKKwkJCXJ0X3ByaW50aworCQkJCSgiY29tZWRpOiBBL0QgIFNBTVBMIC0gZGF0YSBkcm9wb3V0OiByZWNlaXZlZCBjaGFubmVsICVkLCBleHBlY3RlZCAlZCFcbiIsCisJCQkJc2FtcGwgJiAweDAwMGYsCisJCQkJZGV2cHJpdi0+Y2hhbmxpc3Rbcy0+YXN5bmMtPmN1cl9jaGFuXSk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCQlwY2k5MTE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisjZW5kaWYKKwljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIHNhbXBsKTsKKwlzLT5hc3luYy0+Y3VyX2NoYW4rKzsKKwlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID49IGRldnByaXYtPmFpX25fc2NhbmxlbikgewkvKiBvbmUgc2NhbiBkb25lICovCisJCXMtPmFzeW5jLT5jdXJfY2hhbiAlPSBkZXZwcml2LT5haV9uX3NjYW5sZW47CisJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CisJCWlmICghKGRldnByaXYtPmFpX25ldmVyZW5kaW5nKSkKKwkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQkJcGNpOTExOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQl9CisJfQorCisJaWYgKHMtPmFzeW5jLT5ldmVudHMpCisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgaW50ZXJydXB0X3BjaTkxMThfYWlfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgc2hvcnQgaW50X2Fkc3RhdCwgdW5zaWduZWQgaW50IGludF9hbWNjLAorCXVuc2lnbmVkIHNob3J0IGludF9kYXEpCit7CisJdW5zaWduZWQgaW50IG5leHRfZG1hX2J1Ziwgc2FtcGxlc2luYnVmLCBzYW1wbHMsIG07CisKKwlpZiAoaW50X2FtY2MgJiBNQVNURVJfQUJPUlRfSU5UKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJBTUNDIElSUSAtIE1BU1RFUiBETUEgQUJPUlQhIik7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJcGNpOTExOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaW50X2FtY2MgJiBUQVJHRVRfQUJPUlRfSU5UKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJBTUNDIElSUSAtIFRBUkdFVCBETUEgQUJPUlQhIik7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJcGNpOTExOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaW50X2Fkc3RhdCAmIGRldnByaXYtPmFpX21hc2tlcnIpCisvLyAgICAgIGlmIChpbnRfYWRzdGF0ICYgMHgxMDYpCisJCWlmIChwY2k5MTE4X2RlY29kZV9lcnJvcl9zdGF0dXMoZGV2LCBzLCBpbnRfYWRzdGF0KSkKKwkJCXJldHVybjsKKworCXNhbXBsZXNpbmJ1ZiA9IGRldnByaXYtPmRtYWJ1Zl91c2Vfc2l6ZVtkZXZwcml2LT5kbWFfYWN0YnVmXSA+PiAxOwkvLyBudW1iZXIgb2YgcmVjZWl2ZWQgcmVhbCBzYW1wbGVzCisvLyAgICAgIERQUklOVEsoImRtYV9hY3RidWY9JWRcbiIsZGV2cHJpdi0+ZG1hX2FjdGJ1Zik7CisKKwlpZiAoZGV2cHJpdi0+ZG1hX2RvdWJsZWJ1ZikgewkvLyBzd2l0Y2ggRE1BIGJ1ZmZlcnMgaWYgaXMgdXNlZCBkb3VibGUgYnVmZmVyaW5nCisJCW5leHRfZG1hX2J1ZiA9IDEgLSBkZXZwcml2LT5kbWFfYWN0YnVmOworCQlvdXRsKGRldnByaXYtPmRtYWJ1Zl9od1tuZXh0X2RtYV9idWZdLAorCQkJZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19NV0FSKTsKKwkJb3V0bChkZXZwcml2LT5kbWFidWZfdXNlX3NpemVbbmV4dF9kbWFfYnVmXSwKKwkJCWRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfTVdUQyk7CisJCWRldnByaXYtPmRtYWJ1Zl91c2VkX3NpemVbbmV4dF9kbWFfYnVmXSA9CisJCQlkZXZwcml2LT5kbWFidWZfdXNlX3NpemVbbmV4dF9kbWFfYnVmXTsKKwkJaWYgKGRldnByaXYtPmFpX2RvID09IDQpCisJCQlpbnRlcnJ1cHRfcGNpOTExOF9haV9tb2RlNF9zd2l0Y2goZGV2KTsKKwl9CisKKwlpZiAoc2FtcGxlc2luYnVmKSB7CisJCW0gPSBkZXZwcml2LT5haV9kYXRhX2xlbiA+PiAxOwkvLyBob3cgbWFueSBzYW1wbGVzIGlzIHRvIGVuZCBvZiBidWZmZXIKKy8vICAgICAgICAgICAgICBEUFJJTlRLKCJzYW1wcz0lZCBtPSVkICVkICVkXG4iLHNhbXBsZXNpbmJ1ZixtLHMtPmFzeW5jLT5idWZfaW50X2NvdW50LHMtPmFzeW5jLT5idWZfaW50X3B0cik7CisJCXNhbXBscyA9IG07CisJCW1vdmVfYmxvY2tfZnJvbV9kbWEoZGV2LCBzLAorCQkJZGV2cHJpdi0+ZG1hYnVmX3ZpcnRbZGV2cHJpdi0+ZG1hX2FjdGJ1Zl0sCisJCQlzYW1wbGVzaW5idWYpOworCQltID0gbSAtIHNhbXBsczsJLy8gbT0gaG93IG1hbnkgc2FtcGxlcyB3YXMgdHJhbnNmZXJlZAorCX0KKy8vICAgICAgRFBSSU5USygiWVlZXG4iKTsKKworCWlmICghZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpCisJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQlwY2k5MTE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQl9CisKKwlpZiAoZGV2cHJpdi0+ZG1hX2RvdWJsZWJ1ZikgewkvLyBzd2l0Y2ggZG1hIGJ1ZmZlcnMKKwkJZGV2cHJpdi0+ZG1hX2FjdGJ1ZiA9IDEgLSBkZXZwcml2LT5kbWFfYWN0YnVmOworCX0gZWxzZSB7CQkvLyByZXN0YXJ0IERNQSBpZiBpcyBub3QgdXNlZCBkb3VibGUgYnVmZmVyaW5nCisJCW91dGwoZGV2cHJpdi0+ZG1hYnVmX2h3WzBdLAorCQkJZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19NV0FSKTsKKwkJb3V0bChkZXZwcml2LT5kbWFidWZfdXNlX3NpemVbMF0sCisJCQlkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX01XVEMpOworCQlpZiAoZGV2cHJpdi0+YWlfZG8gPT0gNCkKKwkJCWludGVycnVwdF9wY2k5MTE4X2FpX21vZGU0X3N3aXRjaChkZXYpOworCX0KKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2k5MTE4KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJdW5zaWduZWQgaW50IGludF9kYXEgPSAwLCBpbnRfYW1jYywgaW50X2Fkc3RhdDsKKworCWlmICghZGV2LT5hdHRhY2hlZCkKKwkJcmV0dXJuIElSUV9OT05FOwkvLyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQKKworCWludF9kYXEgPSBpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVFNSQykgJiAweGY7CS8vIGdldCBJUlEgcmVhc29ucyBmcm9tIGNhcmQKKwlpbnRfYW1jYyA9IGlubChkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUik7CS8vIGdldCBJTlQgcmVnaXN0ZXIgZnJvbSBBTUNDIGNoaXAKKworLy8gICAgICBEUFJJTlRLKCJJTlQgZGFxPTB4JTAxeCBhbWNjPTB4JTA4eCBNV0FSPTB4JTA4eCBNV1RDPTB4JTA4eCBBRFNUQVQ9MHglMDJ4IGFpX2RvPSVkXG4iLCBpbnRfZGFxLCBpbnRfYW1jYywgaW5sKGRldnByaXYtPmlvYmFzZV9hK0FNQ0NfT1BfUkVHX01XQVIpLCBpbmwoZGV2cHJpdi0+aW9iYXNlX2ErQU1DQ19PUF9SRUdfTVdUQyksIGludyhkZXYtPmlvYmFzZStQQ0k5MTE4X0FEU1RBVCkmMHgxZmYsZGV2cHJpdi0+YWlfZG8pOworCisJaWYgKCghaW50X2RhcSkgJiYgKCEoaW50X2FtY2MgJiBBTllfUzU5M1hfSU5UKSkpCisJCXJldHVybiBJUlFfTk9ORTsJLy8gaW50ZXJydXB0IGZyb20gb3RoZXIgc291cmNlCisKKwlvdXRsKGludF9hbWNjIHwgMHgwMGZmMDAwMCwgZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpOwkvLyBzaHV0ZG93biBJUlEgcmVhc29ucyBpbiBBTUNDCisKKwlpbnRfYWRzdGF0ID0gaW53KGRldi0+aW9iYXNlICsgUENJOTExOF9BRFNUQVQpICYgMHgxZmY7CS8vIGdldCBTVEFUVVMgcmVnaXN0ZXIKKworCWlmIChkZXZwcml2LT5haV9kbykgeworCQlpZiAoZGV2cHJpdi0+YWkxMl9zdGFydHN0b3ApCisJCQlpZiAoKGludF9hZHN0YXQgJiBBZFN0YXR1c19EVEgpICYmIChpbnRfZGFxICYgSW50X0RUcmcpKSB7CS8vIHN0YXJ0IHN0b3Agb2YgbWVhc3VyZQorCQkJCWlmIChkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCAmIFNUQVJUX0FJX0VYVCkgeworCQkJCQlkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCAmPQorCQkJCQkJflNUQVJUX0FJX0VYVDsKKwkJCQkJaWYgKCEoZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJgorCQkJCQkJCVNUT1BfQUlfRVhUKSkKKwkJCQkJCXBjaTkxMThfZXh0dHJnX2RlbChkZXYsIEVYVFRSR19BSSk7CS8vIGRlYWN0aXZhdGUgRVhUIHRyaWdnZXIKKwkJCQkJc3RhcnRfcGFjZXIoZGV2LCBkZXZwcml2LT5haV9kbywgZGV2cHJpdi0+YWlfZGl2aXNvcjEsIGRldnByaXYtPmFpX2Rpdmlzb3IyKTsJLy8gc3RhcnQgcGFjZXIKKwkJCQkJb3V0bChkZXZwcml2LT5BZENvbnRyb2xSZWcsCisJCQkJCQlkZXYtPmlvYmFzZSArIFBDSTkxMThfQURDTlRSTCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKGRldnByaXYtPgorCQkJCQkJYWkxMl9zdGFydHN0b3AgJiBTVE9QX0FJX0VYVCkgeworCQkJCQkJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJj0KKwkJCQkJCQl+U1RPUF9BSV9FWFQ7CisJCQkJCQlwY2k5MTE4X2V4dHRyZ19kZWwoZGV2LCBFWFRUUkdfQUkpOwkvLyBkZWFjdGl2YXRlIEVYVCB0cmlnZ2VyCisJCQkJCQlkZXZwcml2LT5haV9uZXZlcmVuZGluZyA9IDA7CS8vd2VsbCwgb24gbmV4dCBpbnRlcnJ1cHQgZnJvbSBETUEvRU9DIG1lYXN1cmUgd2lsbCBzdG9wCisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJKGRldnByaXYtPmludF9haV9mdW5jKSAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAwLCBpbnRfYWRzdGF0LAorCQkJaW50X2FtY2MsIGludF9kYXEpOworCisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9haV9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pCit7CisJaWYgKHRyaWdudW0gIT0gZGV2cHJpdi0+YWlfaW50dHJpZ19zdGFydCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCAmPSB+U1RBUlRfQUlfSU5UOworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCW91dGwoZGV2cHJpdi0+SW50Q29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVENUUkwpOworCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CisJaWYgKGRldnByaXYtPmFpX2RvICE9IDMpIHsKKwkJc3RhcnRfcGFjZXIoZGV2LCBkZXZwcml2LT5haV9kbywgZGV2cHJpdi0+YWlfZGl2aXNvcjEsCisJCQlkZXZwcml2LT5haV9kaXZpc29yMik7CisJCWRldnByaXYtPkFkQ29udHJvbFJlZyB8PSBBZENvbnRyb2xfU29mdEc7CisJfQorCW91dGwoZGV2cHJpdi0+QWRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURDTlRSTCk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcCwgZGl2aXNvcjEsIGRpdmlzb3IyOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19FWFQgfCBUUklHX0lOVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWlmIChkZXZwcml2LT5tYXN0ZXIpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQgfCBUUklHX0ZPTExPVzsKKwl9IGVsc2UgeworCQljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XOworCX0KKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwlpZiAoZGV2cHJpdi0+bWFzdGVyKSB7CisJCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUIHwgVFJJR19OT1c7CisJfSBlbHNlIHsKKwkJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJfQorCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJgorCQljbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0lOVCAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkgeworCQljbWQtPnN0YXJ0X3NyYyA9IFRSSUdfTk9XOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0lOVCAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgPSBUUklHX0ZPTExPVzsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19OT1cpIHsKKwkJY21kLT5jb252ZXJ0X3NyYyA9IFRSSUdfVElNRVI7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKSB7CisJCWNtZC0+c2Nhbl9lbmRfc3JjID0gVFJJR19DT1VOVDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmCisJCWNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJgorCQljbWQtPnN0b3Bfc3JjICE9IFRSSUdfSU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19FWFQpIHsKKwkJY21kLT5zdG9wX3NyYyA9IFRSSUdfQ09VTlQ7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCAmJiBjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKSB7CisJCWNtZC0+c3RhcnRfc3JjID0gVFJJR19OT1c7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCAmJiBjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfSU5UKSB7CisJCWNtZC0+c3RhcnRfc3JjID0gVFJJR19OT1c7CisJCWVycisrOworCX0KKworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyAmIChUUklHX1RJTUVSIHwgVFJJR19FWFQpKSAmJgorCQkoIShjbWQtPmNvbnZlcnRfc3JjICYgKFRSSUdfVElNRVIgfCBUUklHX05PVykpKSkgeworCQljbWQtPmNvbnZlcnRfc3JjID0gVFJJR19USU1FUjsKKwkJZXJyKys7CisJfQorCisJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSAmJgorCQkoIShjbWQtPmNvbnZlcnRfc3JjICYgKFRSSUdfVElNRVIgfCBUUklHX0VYVCkpKSkgeworCQljbWQtPmNvbnZlcnRfc3JjID0gVFJJR19USU1FUjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19FWFQgJiYgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgeworCQljbWQtPnN0b3Bfc3JjID0gVFJJR19DT1VOVDsKKwkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgJiAoVFJJR19OT1cgfCBUUklHX0VYVCkpCisJCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgJiAoVFJJR19GT0xMT1cgfCBUUklHX0VYVCkpCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSAmJgorCQkoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSAmJiAoY21kLT5zY2FuX2VuZF9hcmcgPT0gMSkpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyA9IFRSSUdfRk9MTE9XOworCQljbWQtPmNvbnZlcnRfYXJnID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCQllcnIrKzsKKwkJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQkJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnID4gNjU1MzUpIHsKKwkJCQljbWQtPnNjYW5fZW5kX2FyZyA9IDY1NTM1OworCQkJCWVycisrOworCQkJfQorCQl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAmIChUUklHX1RJTUVSIHwgVFJJR19OT1cpKQorCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJCWVycisrOworCQl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCkKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IHRoaXNfYm9hcmQtPm5fYWljaGFubGlzdCkgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFubGlzdDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnIDwgY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJaWYgKChjbWQtPnNjYW5fZW5kX2FyZyAlIGNtZC0+Y2hhbmxpc3RfbGVuKSkgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9CisJCQljbWQtPmNoYW5saXN0X2xlbiAqIChjbWQtPnNjYW5fZW5kX2FyZyAvCisJCQljbWQtPmNoYW5saXN0X2xlbik7CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworLy8gICAgICAgICAgICAgIHJ0X3ByaW50aygiUzEgdGltZXIxPSV1IHRpbWVyMj0ldVxuIixjbWQtPnNjYW5fYmVnaW5fYXJnLGNtZC0+Y29udmVydF9hcmcpOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjU0X29zY19iYXNlLCAmZGl2aXNvcjEsCisJCQkmZGl2aXNvcjIsICZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisvLyAgICAgICAgICAgICAgcnRfcHJpbnRrKCJTMiB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLGNtZC0+c2Nhbl9iZWdpbl9hcmcsY21kLT5jb252ZXJ0X2FyZyk7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQorCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgJiAoVFJJR19USU1FUiB8IFRSSUdfTk9XKSkgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjU0X29zY19iYXNlLCAmZGl2aXNvcjEsCisJCQkmZGl2aXNvcjIsICZjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisvLyAgICAgICAgICAgICAgcnRfcHJpbnRrKCJzMSB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLGNtZC0+c2Nhbl9iZWdpbl9hcmcsY21kLT5jb252ZXJ0X2FyZyk7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQorCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIKKwkJCSYmIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpIHsKKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnID09IDApIHsKKwkJCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQkJCXRoaXNfYm9hcmQtPmFpX25zX21pbiAqCisJCQkJCShjbWQtPnNjYW5fZW5kX2FyZyArIDIpKSB7CisJCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCQkJdGhpc19ib2FyZC0+YWlfbnNfbWluICoKKwkJCQkJCShjbWQtPnNjYW5fZW5kX2FyZyArIDIpOworLy8gICAgICAgICAgICAgIHJ0X3ByaW50aygiczIgdGltZXIxPSV1IHRpbWVyMj0ldVxuIixjbWQtPnNjYW5fYmVnaW5fYXJnLGNtZC0+Y29udmVydF9hcmcpOworCQkJCQllcnIrKzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwKKwkJCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCQkJY21kLT5jb252ZXJ0X2FyZyAqCisJCQkJCQljbWQtPmNoYW5saXN0X2xlbjsKKy8vICAgICAgICAgICAgICBydF9wcmludGsoInMzIHRpbWVyMT0ldSB0aW1lcjI9JXVcbiIsY21kLT5zY2FuX2JlZ2luX2FyZyxjbWQtPmNvbnZlcnRfYXJnKTsKKwkJCQkJZXJyKys7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlpZiAoY21kLT5jaGFubGlzdCkKKwkJaWYgKCFjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBjbWQtPmNoYW5saXN0X2xlbiwKKwkJCQljbWQtPmNoYW5saXN0LCAwLCAwKSkKKwkJCXJldHVybiA1OwkvLyBpbmNvcnJlY3QgY2hhbm5lbHMgbGlzdAorCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IENvbXB1dGVfYW5kX3NldHVwX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBpbnQgZG1hbGVuMCwgZG1hbGVuMSwgaTsKKworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEJHTjogQ29tcHV0ZV9hbmRfc2V0dXBfZG1hKClcbiIpOworCWRtYWxlbjAgPSBkZXZwcml2LT5kbWFidWZfc2l6ZVswXTsKKwlkbWFsZW4xID0gZGV2cHJpdi0+ZG1hYnVmX3NpemVbMV07CisJRFBSSU5USygiMSBkbWFsZW4wPSVkIGRtYWxlbjE9JWQgYWlfZGF0YV9sZW49JWRcbiIsIGRtYWxlbjAsIGRtYWxlbjEsCisJCWRldnByaXYtPmFpX2RhdGFfbGVuKTsKKwkvLyBpc24ndCBvdXRwdXQgYnVmZiBzbWFsbGVyIHRoYXQgb3VyIERNQSBidWZmPworCWlmIChkbWFsZW4wID4gKGRldnByaXYtPmFpX2RhdGFfbGVuKSkgeworCQlkbWFsZW4wID0gZGV2cHJpdi0+YWlfZGF0YV9sZW4gJiB+M0w7CS8vIGFsbGlnbiB0byAzMmJpdCBkb3duCisJfQorCWlmIChkbWFsZW4xID4gKGRldnByaXYtPmFpX2RhdGFfbGVuKSkgeworCQlkbWFsZW4xID0gZGV2cHJpdi0+YWlfZGF0YV9sZW4gJiB+M0w7CS8vIGFsbGlnbiB0byAzMmJpdCBkb3duCisJfQorCURQUklOVEsoIjIgZG1hbGVuMD0lZCBkbWFsZW4xPSVkIFxuIiwgZG1hbGVuMCwgZG1hbGVuMSk7CisKKwkvLyB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8KKwlpZiAoZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSB7CisJCWlmIChkbWFsZW4wIDwgKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSkpIHsKKwkJCS8vIHVmZiwgdG9vIHNob3J0IERNQSBidWZmZXIsIGRpc2FibGUgRU9TIHN1cHBvcnQhCisJCQlkZXZwcml2LT5haV9mbGFncyAmPSAoflRSSUdfV0FLRV9FT1MpOworCQkJcnRfcHJpbnRrCisJCQkJKCJjb21lZGklZDogV0FSOiBETUEwIGJ1ZiB0b28gc2hvcnQsIGNhbm4ndCBzdXBwb3J0IFRSSUdfV0FLRV9FT1MgKCVkPCVkKVxuIiwKKwkJCQlkZXYtPm1pbm9yLCBkbWFsZW4wLAorCQkJCWRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSk7CisJCX0gZWxzZSB7CisJCQkvLyBzaG9ydCBmaXJzdCBETUEgYnVmZmVyIHRvIG9uZSBzY2FuCisJCQlkbWFsZW4wID0gZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiA8PCAxOworCQkJRFBSSU5USygiMjEgZG1hbGVuMD0lZCBhaV9uX3JlYWxzY2FubGVuPSVkIHVzZWVvc2hhbmRsZT0lZFxuIiwgZG1hbGVuMCwgZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiwgZGV2cHJpdi0+dXNlZW9zaGFuZGxlKTsKKwkJCWlmIChkZXZwcml2LT51c2Vlb3NoYW5kbGUpCisJCQkJZG1hbGVuMCArPSAyOworCQkJaWYgKGRtYWxlbjAgPCA0KSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiY29tZWRpJWQ6IEVSUjogRE1BMCBidWYgbGVuIGJ1Zz8gKCVkPDQpXG4iLAorCQkJCQlkZXYtPm1pbm9yLCBkbWFsZW4wKTsKKwkJCQlkbWFsZW4wID0gNDsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSB7CisJCWlmIChkbWFsZW4xIDwgKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSkpIHsKKwkJCS8vIHVmZiwgdG9vIHNob3J0IERNQSBidWZmZXIsIGRpc2FibGUgRU9TIHN1cHBvcnQhCisJCQlkZXZwcml2LT5haV9mbGFncyAmPSAoflRSSUdfV0FLRV9FT1MpOworCQkJcnRfcHJpbnRrCisJCQkJKCJjb21lZGklZDogV0FSOiBETUExIGJ1ZiB0b28gc2hvcnQsIGNhbm4ndCBzdXBwb3J0IFRSSUdfV0FLRV9FT1MgKCVkPCVkKVxuIiwKKwkJCQlkZXYtPm1pbm9yLCBkbWFsZW4xLAorCQkJCWRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSk7CisJCX0gZWxzZSB7CisJCQkvLyBzaG9ydCBzZWNvbmQgRE1BIGJ1ZmZlciB0byBvbmUgc2NhbgorCQkJZG1hbGVuMSA9IGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMTsKKwkJCURQUklOVEsoIjIyIGRtYWxlbjE9JWQgYWlfbl9yZWFsc2Nhbmxlbj0lZCB1c2Vlb3NoYW5kbGU9JWRcbiIsIGRtYWxlbjEsIGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4sIGRldnByaXYtPnVzZWVvc2hhbmRsZSk7CisJCQlpZiAoZGV2cHJpdi0+dXNlZW9zaGFuZGxlKQorCQkJCWRtYWxlbjEgLT0gMjsKKwkJCWlmIChkbWFsZW4xIDwgNCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoImNvbWVkaSVkOiBFUlI6IERNQTEgYnVmIGxlbiBidWc/ICglZDw0KVxuIiwKKwkJCQkJZGV2LT5taW5vciwgZG1hbGVuMSk7CisJCQkJZG1hbGVuMSA9IDQ7CisJCQl9CisJCX0KKwl9CisKKwlEUFJJTlRLKCIzIGRtYWxlbjA9JWQgZG1hbGVuMT0lZCBcbiIsIGRtYWxlbjAsIGRtYWxlbjEpOworCS8vIHRyYW5zZmVyIHdpdGhvdXQgVFJJR19XQUtFX0VPUworCWlmICghKGRldnByaXYtPmFpX2ZsYWdzICYgVFJJR19XQUtFX0VPUykpIHsKKwkJLy8gaWYgaXQncyBwb3NzaWJsZSB0aGVuIGFsbGlnbiBETUEgYnVmZmVycyB0byBsZW5ndGggb2Ygc2NhbgorCQlpID0gZG1hbGVuMDsKKwkJZG1hbGVuMCA9CisJCQkoZG1hbGVuMCAvIChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpKSAqCisJCQkoZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiA8PCAxKTsKKwkJZG1hbGVuMCAmPSB+M0w7CisJCWlmICghZG1hbGVuMCkKKwkJCWRtYWxlbjAgPSBpOwkvLyB1ZmYuIHZlcnkgbG9uZyBzY2FuPworCQlpID0gZG1hbGVuMTsKKwkJZG1hbGVuMSA9CisJCQkoZG1hbGVuMSAvIChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpKSAqCisJCQkoZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiA8PCAxKTsKKwkJZG1hbGVuMSAmPSB+M0w7CisJCWlmICghZG1hbGVuMSkKKwkJCWRtYWxlbjEgPSBpOwkvLyB1ZmYuIHZlcnkgbG9uZyBzY2FuPworCQkvLyBpZiBtZWFzdXJlIGlzbid0IG5ldmVyZW5kaW5nIHRoZW4gdGVzdCwgaWYgaXQgd2hvbGUgZml0cyBpbnRvIG9uZSBvciB0d28gRE1BIGJ1ZmZlcnMKKwkJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykgeworCQkJLy8gZml0cyB3aG9sZSBtZWFzdXJlIGludG8gb25lIERNQSBidWZmZXI/CisJCQlpZiAoZG1hbGVuMCA+CisJCQkJKChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpICoKKwkJCQkJZGV2cHJpdi0+YWlfc2NhbnMpKSB7CisJCQkJRFBSSU5USygiMy4wIGFpX25fcmVhbHNjYW5sZW49JWQgYWlfc2NhbnM9JWQgXG4iLCBkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuLCBkZXZwcml2LT5haV9zY2Fucyk7CisJCQkJZG1hbGVuMCA9CisJCQkJCShkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuIDw8IDEpICoKKwkJCQkJZGV2cHJpdi0+YWlfc2NhbnM7CisJCQkJRFBSSU5USygiMy4xIGRtYWxlbjA9JWQgZG1hbGVuMT0lZCBcbiIsIGRtYWxlbjAsCisJCQkJCWRtYWxlbjEpOworCQkJCWRtYWxlbjAgJj0gfjNMOworCQkJfSBlbHNlIHsJLy8gZml0cyB3aG9sZSBtZWFzdXJlIGludG8gdHdvIERNQSBidWZmZXI/CisJCQkJaWYgKGRtYWxlbjEgPgorCQkJCQkoKGRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4gPDwgMSkgKgorCQkJCQkJZGV2cHJpdi0+YWlfc2NhbnMgLSBkbWFsZW4wKSkKKwkJCQkJZG1hbGVuMSA9CisJCQkJCQkoZGV2cHJpdi0+CisJCQkJCQlhaV9uX3JlYWxzY2FubGVuIDw8IDEpICoKKwkJCQkJCWRldnByaXYtPmFpX3NjYW5zIC0gZG1hbGVuMDsKKwkJCQlEUFJJTlRLKCIzLjIgZG1hbGVuMD0lZCBkbWFsZW4xPSVkIFxuIiwgZG1hbGVuMCwKKwkJCQkJZG1hbGVuMSk7CisJCQkJZG1hbGVuMSAmPSB+M0w7CisJCQl9CisJCX0KKwl9CisKKwlEUFJJTlRLKCI0IGRtYWxlbjA9JWQgZG1hbGVuMT0lZCBcbiIsIGRtYWxlbjAsIGRtYWxlbjEpOworCisJLy8gdGhlc2UgRE1BIGJ1ZmZlciBzaXplIHdlJ2xsIGJlIHVzZWQKKwlkZXZwcml2LT5kbWFfYWN0YnVmID0gMDsKKwlkZXZwcml2LT5kbWFidWZfdXNlX3NpemVbMF0gPSBkbWFsZW4wOworCWRldnByaXYtPmRtYWJ1Zl91c2Vfc2l6ZVsxXSA9IGRtYWxlbjE7CisKKwlEUFJJTlRLKCI1IGRtYWxlbjA9JWQgZG1hbGVuMT0lZCBcbiIsIGRtYWxlbjAsIGRtYWxlbjEpOworI2lmIDAKKwlpZiAoZGV2cHJpdi0+YWlfbl9zY2FubGVuIDwgdGhpc19ib2FyZC0+aGFsZl9maWZvX3NpemUpIHsKKwkJZGV2cHJpdi0+ZG1hYnVmX3BhbmljX3NpemVbMF0gPQorCQkJKHRoaXNfYm9hcmQtPmhhbGZfZmlmb19zaXplIC8gZGV2cHJpdi0+YWlfbl9zY2FubGVuICsKKwkJCTEpICogZGV2cHJpdi0+YWlfbl9zY2FubGVuICogc2l6ZW9mKHNob3J0KTsKKwkJZGV2cHJpdi0+ZG1hYnVmX3BhbmljX3NpemVbMV0gPQorCQkJKHRoaXNfYm9hcmQtPmhhbGZfZmlmb19zaXplIC8gZGV2cHJpdi0+YWlfbl9zY2FubGVuICsKKwkJCTEpICogZGV2cHJpdi0+YWlfbl9zY2FubGVuICogc2l6ZW9mKHNob3J0KTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5kbWFidWZfcGFuaWNfc2l6ZVswXSA9CisJCQkoZGV2cHJpdi0+YWlfbl9zY2FubGVuIDw8IDEpICUgZGV2cHJpdi0+ZG1hYnVmX3NpemVbMF07CisJCWRldnByaXYtPmRtYWJ1Zl9wYW5pY19zaXplWzFdID0KKwkJCShkZXZwcml2LT5haV9uX3NjYW5sZW4gPDwgMSkgJSBkZXZwcml2LT5kbWFidWZfc2l6ZVsxXTsKKwl9CisjZW5kaWYKKworCW91dGwoaW5sKGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfTUNTUikgJiAofkVOX0EyUF9UUkFOU0ZFUlMpLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX01DU1IpOwkvLyBzdG9wIERNQQorCW91dGwoZGV2cHJpdi0+ZG1hYnVmX2h3WzBdLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX01XQVIpOworCW91dGwoZGV2cHJpdi0+ZG1hYnVmX3VzZV9zaXplWzBdLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX01XVEMpOworCS8vIGluaXQgRE1BIHRyYW5zZmVyCisJb3V0bCgweDAwMDAwMDAwIHwgQUlOVF9XUklURV9DT01QTCwKKwkJZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpOworLy8gICAgICBvdXRsKDB4MDIwMDAwMDB8QUlOVF9XUklURV9DT01QTCwgZGV2cHJpdi0+aW9iYXNlX2ErQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKworCW91dGwoaW5sKGRldnByaXYtPmlvYmFzZV9hICsKKwkJCUFNQ0NfT1BfUkVHX01DU1IpIHwgUkVTRVRfQTJQX0ZMQUdTIHwgQTJQX0hJX1BSSU9SSVRZIHwKKwkJRU5fQTJQX1RSQU5TRkVSUywgZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19NQ1NSKTsKKwlvdXRsKGlubChkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUikgfCBFTl9BMlBfVFJBTlNGRVJTLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUik7CS8vIGFsbG93IGJ1cyBtYXN0ZXJpbmcKKworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEVORDogQ29tcHV0ZV9hbmRfc2V0dXBfZG1hKClcbiIpOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X2FpX2RvY21kX3NhbXBsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJRFBSSU5USygiYWRsX3BjaTkxMTggRURCRzogQkdOOiBwY2k5MTE4X2FpX2RvY21kX3NhbXBsKCVkLCkgWyVkXVxuIiwKKwkJZGV2LT5taW5vciwgZGV2cHJpdi0+YWlfZG8pOworCXN3aXRjaCAoZGV2cHJpdi0+YWlfZG8pIHsKKwljYXNlIDE6CisJCWRldnByaXYtPkFkQ29udHJvbFJlZyB8PSBBZENvbnRyb2xfVG1yVHI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY29tZWRpX2Vycm9yKGRldiwgInBjaTkxMThfYWlfZG9jbWRfc2FtcGwoKSBtb2RlIDIgYnVnIVxuIik7CisJCXJldHVybiAtRUlPOworCWNhc2UgMzoKKwkJZGV2cHJpdi0+QWRDb250cm9sUmVnIHw9IEFkQ29udHJvbF9FeHRNOworCQlicmVhazsKKwljYXNlIDQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJwY2k5MTE4X2FpX2RvY21kX3NhbXBsKCkgbW9kZSA0IGJ1ZyFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwlkZWZhdWx0OgorCQljb21lZGlfZXJyb3IoZGV2LAorCQkJInBjaTkxMThfYWlfZG9jbWRfc2FtcGwoKSBtb2RlIG51bWJlciBidWchXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfTsKKworCWRldnByaXYtPmludF9haV9mdW5jID0gaW50ZXJydXB0X3BjaTkxMThfYWlfb25lc2FtcGxlOwkvL3RyYW5zZmVyIGZ1bmN0aW9uCisKKwlpZiAoZGV2cHJpdi0+YWkxMl9zdGFydHN0b3ApCisJCXBjaTkxMThfZXh0dHJnX2FkZChkZXYsIEVYVFRSR19BSSk7CS8vIGFjdGl2YXRlIEVYVCB0cmlnZ2VyCisKKwlpZiAoKGRldnByaXYtPmFpX2RvID09IDEpIHx8IChkZXZwcml2LT5haV9kbyA9PSAyKSkKKwkJZGV2cHJpdi0+SW50Q29udHJvbFJlZyB8PSBJbnRfVGltZXI7CisKKwlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0gQWRDb250cm9sX0ludDsKKworCW91dGwoaW5sKGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKSB8IDB4MWYwMCwgZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpOwkvLyBhbGxvdyBJTlQgaW4gQU1DQworCisJaWYgKCEoZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgJiAoU1RBUlRfQUlfRVhUIHwgU1RBUlRfQUlfSU5UKSkpIHsKKwkJb3V0bChkZXZwcml2LT5JbnRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UQ1RSTCk7CisJCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CisJCWlmIChkZXZwcml2LT5haV9kbyAhPSAzKSB7CisJCQlzdGFydF9wYWNlcihkZXYsIGRldnByaXYtPmFpX2RvLCBkZXZwcml2LT5haV9kaXZpc29yMSwKKwkJCQlkZXZwcml2LT5haV9kaXZpc29yMik7CisJCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0gQWRDb250cm9sX1NvZnRHOworCQl9CisJCW91dGwoZGV2cHJpdi0+SW50Q29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVENUUkwpOworCX0KKworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEVORDogcGNpOTExOF9haV9kb2NtZF9zYW1wbCgpXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9haV9kb2NtZF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlEUFJJTlRLKCJhZGxfcGNpOTExOCBFREJHOiBCR046IHBjaTkxMThfYWlfZG9jbWRfZG1hKCVkLCkgWyVkLCVkXVxuIiwKKwkJZGV2LT5taW5vciwgZGV2cHJpdi0+YWlfZG8sIGRldnByaXYtPnVzZWRtYSk7CisJQ29tcHV0ZV9hbmRfc2V0dXBfZG1hKGRldik7CisKKwlzd2l0Y2ggKGRldnByaXYtPmFpX2RvKSB7CisJY2FzZSAxOgorCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0KKwkJCSgoQWRDb250cm9sX1RtclRyIHwgQWRDb250cm9sX0RtYSkgJiAweGZmKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0KKwkJCSgoQWRDb250cm9sX1RtclRyIHwgQWRDb250cm9sX0RtYSkgJiAweGZmKTsKKwkJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyA9CisJCQlBZEZ1bmN0aW9uX1BEVHJnIHwgQWRGdW5jdGlvbl9QRVRyZyB8IEFkRnVuY3Rpb25fQk0gfAorCQkJQWRGdW5jdGlvbl9CUzsKKwkJaWYgKGRldnByaXYtPnVzZXNzaCAmJiAoIWRldnByaXYtPnNvZnRzc2hkZWxheSkpCisJCQlkZXZwcml2LT5BZEZ1bmN0aW9uUmVnIHw9IEFkRnVuY3Rpb25fQlNTSDsKKwkJb3V0bChkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQlVSU1QpOworCQlicmVhazsKKwljYXNlIDM6CisJCWRldnByaXYtPkFkQ29udHJvbFJlZyB8PQorCQkJKChBZENvbnRyb2xfRXh0TSB8IEFkQ29udHJvbF9EbWEpICYgMHhmZik7CisJCWRldnByaXYtPkFkRnVuY3Rpb25SZWcgPSBBZEZ1bmN0aW9uX1BEVHJnIHwgQWRGdW5jdGlvbl9QRVRyZzsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0KKwkJCSgoQWRDb250cm9sX1RtclRyIHwgQWRDb250cm9sX0RtYSkgJiAweGZmKTsKKwkJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyA9CisJCQlBZEZ1bmN0aW9uX1BEVHJnIHwgQWRGdW5jdGlvbl9QRVRyZyB8IEFkRnVuY3Rpb25fQU07CisJCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CisJCW91dGwoMHgzMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVENUUkwpOworCQlvdXRsKChkZXZwcml2LT5kbWFidWZfaHdbMF0gPj4gMSkgJiAweGZmLAorCQkJZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVDApOworCQlvdXRsKChkZXZwcml2LT5kbWFidWZfaHdbMF0gPj4gOSkgJiAweGZmLAorCQkJZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVDApOworCQlkZXZwcml2LT5BZEZ1bmN0aW9uUmVnIHw9IEFkRnVuY3Rpb25fU3RhcnQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJwY2k5MTE4X2FpX2RvY21kX2RtYSgpIG1vZGUgbnVtYmVyIGJ1ZyFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9OworCisJaWYgKGRldnByaXYtPmFpMTJfc3RhcnRzdG9wKSB7CisJCXBjaTkxMThfZXh0dHJnX2FkZChkZXYsIEVYVFRSR19BSSk7CS8vIGFjdGl2YXRlIEVYVCB0cmlnZ2VyCisJfQorCisJZGV2cHJpdi0+aW50X2FpX2Z1bmMgPSBpbnRlcnJ1cHRfcGNpOTExOF9haV9kbWE7CS8vdHJhbnNmZXIgZnVuY3Rpb24KKworCW91dGwoMHgwMjAwMDAwMCB8IEFJTlRfV1JJVEVfQ09NUEwsCisJCWRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKworCWlmICghKGRldnByaXYtPmFpMTJfc3RhcnRzdG9wICYgKFNUQVJUX0FJX0VYVCB8IFNUQVJUX0FJX0lOVCkpKSB7CisJCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CisJCW91dGwoZGV2cHJpdi0+SW50Q29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0lOVENUUkwpOworCQlpZiAoZGV2cHJpdi0+YWlfZG8gIT0gMykgeworCQkJc3RhcnRfcGFjZXIoZGV2LCBkZXZwcml2LT5haV9kbywgZGV2cHJpdi0+YWlfZGl2aXNvcjEsCisJCQkJZGV2cHJpdi0+YWlfZGl2aXNvcjIpOworCQkJZGV2cHJpdi0+QWRDb250cm9sUmVnIHw9IEFkQ29udHJvbF9Tb2Z0RzsKKwkJfQorCQlvdXRsKGRldnByaXYtPkFkQ29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEQ05UUkwpOworCX0KKworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEJHTjogcGNpOTExOF9haV9kb2NtZF9kbWEoKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBhZGRjaGFucyA9IDA7CisJaW50IHJldCA9IDA7CisKKwlEUFJJTlRLKCJhZGxfcGNpOTExOCBFREJHOiBCR046IHBjaTkxMThfYWlfY21kKCVkLClcbiIsIGRldi0+bWlub3IpOworCWRldnByaXYtPmFpMTJfc3RhcnRzdG9wID0gMDsKKwlkZXZwcml2LT5haV9mbGFncyA9IGNtZC0+ZmxhZ3M7CisJZGV2cHJpdi0+YWlfbl9jaGFuID0gY21kLT5jaGFubGlzdF9sZW47CisJZGV2cHJpdi0+YWlfbl9zY2FubGVuID0gY21kLT5zY2FuX2VuZF9hcmc7CisJZGV2cHJpdi0+YWlfY2hhbmxpc3QgPSBjbWQtPmNoYW5saXN0OworCWRldnByaXYtPmFpX2RhdGEgPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmOworCWRldnByaXYtPmFpX2RhdGFfbGVuID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6OworCWRldnByaXYtPmFpX3RpbWVyMSA9IDA7CisJZGV2cHJpdi0+YWlfdGltZXIyID0gMDsKKwlkZXZwcml2LT5haV9hZGRfZnJvbnQgPSAwOworCWRldnByaXYtPmFpX2FkZF9iYWNrID0gMDsKKwlkZXZwcml2LT5haV9tYXNrZXJyID0gMHgxMGU7CisKKwkvLyBwcmVwYXJlIGZvciBzdGFydC9zdG9wIGNvbmRpdGlvbnMKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpCisJCWRldnByaXYtPmFpMTJfc3RhcnRzdG9wIHw9IFNUQVJUX0FJX0VYVDsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkgeworCQlkZXZwcml2LT5haV9uZXZlcmVuZGluZyA9IDE7CisJCWRldnByaXYtPmFpMTJfc3RhcnRzdG9wIHw9IFNUT1BfQUlfRVhUOworCX0KKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19JTlQpIHsKKwkJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3AgfD0gU1RBUlRfQUlfSU5UOworCQlkZXZwcml2LT5haV9pbnR0cmlnX3N0YXJ0ID0gY21kLT5zdGFydF9hcmc7CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gcGNpOTExOF9haV9pbnR0cmlnOworCX0KKyNpZiAwCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19JTlQpIHsKKwkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAxOworCQlkZXZwcml2LT5haTEyX3N0YXJ0c3RvcCB8PSBTVE9QX0FJX0lOVDsKKwl9CisjZW5kaWYKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUpCisJCWRldnByaXYtPmFpX25ldmVyZW5kaW5nID0gMTsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPmFpX3NjYW5zID0gY21kLT5zdG9wX2FyZzsKKwkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAwOworCX0gZWxzZSB7CisJCWRldnByaXYtPmFpX3NjYW5zID0gMDsKKwl9CisKKwkvLyB1c2Ugc2FtcGxlJmhvbGQgc2lnbmFsPworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKSB7CisJCWRldnByaXYtPnVzZXNzaCA9IDE7CisJfQkJCS8vIHllcworCWVsc2UgeworCQlkZXZwcml2LT51c2Vzc2ggPSAwOworCX0JCQkvLyBubworCisJRFBSSU5USygiMSBuZXZlcmVuZGluZz0lZCBzY2Fucz0ldSB1c2Vzc2g9JWQgYWlfc3RhcnRzdG9wPTB4JTJ4XG4iLAorCQlkZXZwcml2LT5haV9uZXZlcmVuZGluZywgZGV2cHJpdi0+YWlfc2NhbnMsIGRldnByaXYtPnVzZXNzaCwKKwkJZGV2cHJpdi0+YWkxMl9zdGFydHN0b3ApOworCisJLy8gdXNlIGFkZGl0aW9uYWwgc2FtcGxlIGF0IGVuZCBvZiBldmVyeSBzY2FuIHRvIHNhdGlzdHkgRE1BIDMyIGJpdCB0cmFuc2Zlcj8KKwlkZXZwcml2LT5haV9hZGRfZnJvbnQgPSAwOworCWRldnByaXYtPmFpX2FkZF9iYWNrID0gMDsKKwlkZXZwcml2LT51c2Vlb3NoYW5kbGUgPSAwOworCWlmIChkZXZwcml2LT5tYXN0ZXIpIHsKKwkJZGV2cHJpdi0+dXNlZG1hID0gMTsKKwkJaWYgKChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgJiYKKwkJCShkZXZwcml2LT5haV9uX3NjYW5sZW4gPT0gMSkpIHsKKwkJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKSB7CisJCQkJZGV2cHJpdi0+YWlfYWRkX2JhY2sgPSAxOworCQkJfQorCQkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQkJCWRldnByaXYtPnVzZWRtYSA9IDA7CS8vIHVzZSBJTlQgdHJhbnNmZXIgaWYgc2Nhbmxpc3QgaGF2ZSBvbmx5IG9uZSBjaGFubmVsCisJCQl9CisJCX0KKwkJaWYgKChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgJiYKKwkJCShkZXZwcml2LT5haV9uX3NjYW5sZW4gJiAxKSAmJgorCQkJKGRldnByaXYtPmFpX25fc2NhbmxlbiA+IDEpKSB7CisJCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkJCS8vdnByaXYtPnVzZWVvc2hhbmRsZT0xOyAvLyBjaGFuZ2UgRE1BIHRyYW5zZmVyIGJsb2NrIHRvIGZpdCBFT1Mgb24gZXZlcnkgc2Vjb25kIGNhbGwKKwkJCQlkZXZwcml2LT51c2VkbWEgPSAwOwkvLyBYWFggbWF5YmUgY2FuIGJlIGNvcnJlY3RlZCB0byB1c2UgMTYgYml0IERNQQorCQkJfSBlbHNlIHsJLy8gd2VsbCwgd2UgbXVzdCBpbnNlcnQgb25lIHNhbXBsZSB0byBlbmQgb2YgRU9TIHRvIG1lZXQgMzIgYml0IHRyYW5zZmVyCisJCQkJZGV2cHJpdi0+YWlfYWRkX2JhY2sgPSAxOworCQkJfQorCQl9CisJfSBlbHNlIHsJCS8vIGludGVycnVwdCB0cmFuc2ZlciBkb24ndCBuZWVkIGFueSBjb3JyZWN0aW9uCisJCWRldnByaXYtPnVzZWRtYSA9IDA7CisJfQorCisJLy8gd2UgbmVlZCBzb2Z0d2FyZSBTJkggc2lnbmFsPyBJdCBhZGQgIHR3byBzYW1wbGVzIGJlZm9yZSBldmVyeSBzY2FuIGFzIG1pbmltdW0KKwlpZiAoZGV2cHJpdi0+dXNlc3NoICYmIGRldnByaXYtPnNvZnRzc2hkZWxheSkgeworCQlkZXZwcml2LT5haV9hZGRfZnJvbnQgPSAyOworCQlpZiAoKGRldnByaXYtPnVzZWRtYSA9PSAxKSAmJiAoZGV2cHJpdi0+YWlfYWRkX2JhY2sgPT0gMSkpIHsJLy8gbW92ZSBpdCB0byBmcm9udAorCQkJZGV2cHJpdi0+YWlfYWRkX2Zyb250Kys7CisJCQlkZXZwcml2LT5haV9hZGRfYmFjayA9IDA7CisJCX0KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pCisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQlhZGRjaGFucyA9IGRldnByaXYtPnNvZnRzc2hkZWxheSAvIGNtZC0+Y29udmVydF9hcmc7CisJCWlmIChkZXZwcml2LT5zb2Z0c3NoZGVsYXkgJSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJYWRkY2hhbnMrKzsKKwkJaWYgKGFkZGNoYW5zID4gKGRldnByaXYtPmFpX2FkZF9mcm9udCAtIDEpKSB7CS8vIHVmZiwgc3RpbGwgc2hvcnQgOi0oCisJCQlkZXZwcml2LT5haV9hZGRfZnJvbnQgPSBhZGRjaGFucyArIDE7CisJCQlpZiAoZGV2cHJpdi0+dXNlZG1hID09IDEpCisJCQkJaWYgKChkZXZwcml2LT5haV9hZGRfZnJvbnQgKworCQkJCQkJZGV2cHJpdi0+YWlfbl9jaGFuICsKKwkJCQkJCWRldnByaXYtPmFpX2FkZF9iYWNrKSAmIDEpCisJCQkJCWRldnByaXYtPmFpX2FkZF9mcm9udCsrOwkvLyByb3VuZCB1cCB0byAzMiBiaXQKKwkJfQorCX0JCQkvLyB3ZWxsLCB3ZSBub3cga25vdyB3aGF0IG11c3QgYmUgYWxsIGFkZGVkCisKKwlkZXZwcml2LT5haV9uX3JlYWxzY2FubGVuID0JLy8gd2hhdCB3ZSBtdXN0IHRha2UgZnJvbSBjYXJkIGluIHJlYWwgdG8gaGF2ZSBhaV9uX3NjYW5sZW4gb24gb3V0cHV0PworCQkoZGV2cHJpdi0+YWlfYWRkX2Zyb250ICsgZGV2cHJpdi0+YWlfbl9jaGFuICsKKwkJZGV2cHJpdi0+YWlfYWRkX2JhY2spICogKGRldnByaXYtPmFpX25fc2NhbmxlbiAvCisJCWRldnByaXYtPmFpX25fY2hhbik7CisKKwlEUFJJTlRLKCIyIHVzZWRtYT0lZCByZWFsc2Nhbj0lZCBhZj0ldSBuX2NoYW49JWQgYWI9JWQgbl9zY2FubGVuPSVkXG4iLAorCQlkZXZwcml2LT51c2VkbWEsCisJCWRldnByaXYtPmFpX25fcmVhbHNjYW5sZW4sIGRldnByaXYtPmFpX2FkZF9mcm9udCwKKwkJZGV2cHJpdi0+YWlfbl9jaGFuLCBkZXZwcml2LT5haV9hZGRfYmFjaywKKwkJZGV2cHJpdi0+YWlfbl9zY2FubGVuKTsKKworCS8vIGNoZWNrIGFuZCBzZXR1cCBjaGFubmVsIGxpc3QKKwlpZiAoIWNoZWNrX2NoYW5uZWxfbGlzdChkZXYsIHMsIGRldnByaXYtPmFpX25fY2hhbiwKKwkJCWRldnByaXYtPmFpX2NoYW5saXN0LCBkZXZwcml2LT5haV9hZGRfZnJvbnQsCisJCQlkZXZwcml2LT5haV9hZGRfYmFjaykpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgZGV2cHJpdi0+YWlfbl9jaGFuLAorCQkJZGV2cHJpdi0+YWlfY2hhbmxpc3QsIDAsIGRldnByaXYtPmFpX2FkZF9mcm9udCwKKwkJCWRldnByaXYtPmFpX2FkZF9iYWNrLCBkZXZwcml2LT51c2VkbWEsCisJCQlkZXZwcml2LT51c2Vlb3NoYW5kbGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8vIGNvbXB1dGUgdGltZXJzIHNldHRpbmdzCisJLy8gc2ltcGxlc3Qgd2F5LCBmcj00TWh6Lyh0aW0xKnRpbTIpLCBjaGFubmVsIG1hbmlwdWxhdGlvbiB3aXRob3V0IHRpbWVycyBlZmZlY3QKKwlpZiAoKChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSB8fCAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgfHwgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19JTlQpKSAmJiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSkgewkvLyBib3RoIHRpbWVyIGlzIHVzZWQgZm9yIG9uZSB0aW1lCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKSB7CisJCQlkZXZwcml2LT5haV9kbyA9IDQ7CisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5haV9kbyA9IDE7CisJCX0KKwkJcGNpOTExOF9jYWxjX2Rpdmlzb3JzKGRldnByaXYtPmFpX2RvLCBkZXYsIHMsCisJCQkmY21kLT5zY2FuX2JlZ2luX2FyZywgJmNtZC0+Y29udmVydF9hcmcsCisJCQlkZXZwcml2LT5haV9mbGFncywgZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiwKKwkJCSZkZXZwcml2LT5haV9kaXZpc29yMSwgJmRldnByaXYtPmFpX2Rpdmlzb3IyLAorCQkJZGV2cHJpdi0+dXNlc3NoLCBkZXZwcml2LT5haV9hZGRfZnJvbnQpOworCQlkZXZwcml2LT5haV90aW1lcjIgPSBjbWQtPmNvbnZlcnRfYXJnOworCX0KKworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSAmJiAoKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgfHwgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpKSkgewkvLyBkb3VibGUgdGltZWQgYWN0aW9uCisJCWlmICghZGV2cHJpdi0+dXNlZG1hKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJjbWQtPnNjYW5fYmVnaW5fc3JjPVRSSUdfVElNRVIgd29ya3Mgb25seSB3aXRoIGJ1cyBtYXN0ZXJpbmchIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWRldnByaXYtPmFpX2RvID0gMjsKKwkJcGNpOTExOF9jYWxjX2Rpdmlzb3JzKGRldnByaXYtPmFpX2RvLCBkZXYsIHMsCisJCQkmY21kLT5zY2FuX2JlZ2luX2FyZywgJmNtZC0+Y29udmVydF9hcmcsCisJCQlkZXZwcml2LT5haV9mbGFncywgZGV2cHJpdi0+YWlfbl9yZWFsc2NhbmxlbiwKKwkJCSZkZXZwcml2LT5haV9kaXZpc29yMSwgJmRldnByaXYtPmFpX2Rpdmlzb3IyLAorCQkJZGV2cHJpdi0+dXNlc3NoLCBkZXZwcml2LT5haV9hZGRfZnJvbnQpOworCQlkZXZwcml2LT5haV90aW1lcjEgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlkZXZwcml2LT5haV90aW1lcjIgPSBjbWQtPmNvbnZlcnRfYXJnOworCX0KKworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykKKwkJJiYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpKSB7CisJCWRldnByaXYtPmFpX2RvID0gMzsKKwl9CisKKwlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsJLy8gc3RvcCBwYWNlcgorCisJZGV2cHJpdi0+QWRDb250cm9sUmVnID0gMDsJLy8gYmlwb2xhciwgUy5FLiwgdXNlIDgyNTQsIHN0b3AgODM1NCwgaW50ZXJuYWwgdHJpZ2dlciwgc29mdCB0cmlnZ2VyLCBkaXNhYmxlIERNQQorCW91dGwoZGV2cHJpdi0+QWRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURDTlRSTCk7CisJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyA9IEFkRnVuY3Rpb25fUERUcmcgfCBBZEZ1bmN0aW9uX1BFVHJnOwkvLyBwb3NpdGl2ZSB0cmlnZ2Vycywgbm8gUyZILCBubyBidXJzdCwgYnVyc3Qgc3RvcCwgbm8gcG9zdCB0cmlnZ2VyLCBubyBhYm91dCB0cmlnZ2VyLCB0cmlnZ2VyIHN0b3AKKwlvdXRsKGRldnByaXYtPkFkRnVuY3Rpb25SZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BREZVTkMpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJb3V0bCgwLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfREVMRklGTyk7CS8vIGZsdXNoIEZJRk8KKwlpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEU1RBVCk7CS8vIGZsdXNoIEEvRCBhbmQgSU5UIHN0YXR1cyByZWdpc3RlcgorCWlubChkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UU1JDKTsKKworCWRldnByaXYtPmFpX2FjdF9zY2FuID0gMDsKKwlkZXZwcml2LT5haV9hY3RfZG1hcG9zID0gMDsKKwlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOworCWRldnByaXYtPmFpX2J1Zl9wdHIgPSAwOworCisJaWYgKGRldnByaXYtPnVzZWRtYSkgeworCQlyZXQgPSBwY2k5MTE4X2FpX2RvY21kX2RtYShkZXYsIHMpOworCX0gZWxzZSB7CisJCXJldCA9IHBjaTkxMThfYWlfZG9jbWRfc2FtcGwoZGV2LCBzKTsKKwl9CisKKwlEUFJJTlRLKCJhZGxfcGNpOTExOCBFREJHOiBFTkQ6IHBjaTkxMThfYWlfY21kKClcbiIpOworCXJldHVybiByZXQ7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCBuX2NoYW4sIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsIGludCBmcm9udGFkZCwgaW50IGJhY2thZGQpCit7CisJdW5zaWduZWQgaW50IGksIGRpZmZlcmVuY2lhbCA9IDAsIGJpcG9sYXIgPSAwOworCisJLyogY29ycmVjdCBjaGFubmVsIGFuZCByYW5nZSBudW1iZXIgY2hlY2sgaXRzZWxmIGNvbWVkaS9yYW5nZS5jICovCisJaWYgKG5fY2hhbiA8IDEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInJhbmdlL2NoYW5uZWwgbGlzdCBpcyBlbXB0eSEiKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgoZnJvbnRhZGQgKyBuX2NoYW4gKyBiYWNrYWRkKSA+IHMtPmxlbl9jaGFubGlzdCkgeworCQlydF9wcmludGsKKwkJCSgiY29tZWRpJWQ6IHJhbmdlL2NoYW5uZWwgbGlzdCBpcyB0b28gbG9uZyBmb3IgYWN0dWFsIGNvbmZpZ3VyYXRpb24gKCVkPiVkKSEiLAorCQkJZGV2LT5taW5vciwgbl9jaGFuLAorCQkJcy0+bGVuX2NoYW5saXN0IC0gZnJvbnRhZGQgLSBiYWNrYWRkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKENSX0FSRUYoY2hhbmxpc3RbMF0pID09IEFSRUZfRElGRikKKwkJZGlmZmVyZW5jaWFsID0gMTsJLy8gYWxsIGlucHV0IG11c3QgYmUgZGlmZgorCWlmIChDUl9SQU5HRShjaGFubGlzdFswXSkgPCBQQ0k5MTE4X0JJUE9MQVJfUkFOR0VTKQorCQliaXBvbGFyID0gMTsJLy8gYWxsIGlucHV0IG11c3QgYmUgYmlwb2xhcgorCWlmIChuX2NoYW4gPiAxKQorCQlmb3IgKGkgPSAxOyBpIDwgbl9jaGFuOyBpKyspIHsJLy8gY2hlY2sgUy5FL2RpZmYKKwkJCWlmICgoQ1JfQVJFRihjaGFubGlzdFtpXSkgPT0gQVJFRl9ESUZGKSAhPQorCQkJCShkaWZmZXJlbmNpYWwpKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJIkRpZmZlcmVuY2lhbCBhbmQgc2luZ2xlIGVuZGVkIGlucHV0cyBjYW5uJ3QgYmUgbWl4dHVyZWQhIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlpZiAoKENSX1JBTkdFKGNoYW5saXN0W2ldKSA8IFBDSTkxMThfQklQT0xBUl9SQU5HRVMpICE9CisJCQkJKGJpcG9sYXIpKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJIkJpcG9sYXIgYW5kIHVuaXBvbGFyIHJhbmdlcyBjYW5uJ3QgYmUgbWl4dHVyZWQhIik7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlpZiAoKCFkZXZwcml2LT51c2VtdXgpICYgKGRpZmZlcmVuY2lhbCkgJgorCQkJCShDUl9DSEFOKGNoYW5saXN0W2ldKSA+PQorCQkJCQl0aGlzX2JvYXJkLT5uX2FpY2hhbmQpKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJIklmIEFSRUZfRElGRiBpcyB1c2VkIHRoZW4gaXMgYXZhaWxhYmxlIG9ubHkgZmlyc3QgOCBjaGFubmVscyEiKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHNldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCBuX2NoYW4sIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsIGludCByb3QsIGludCBmcm9udGFkZCwgaW50IGJhY2thZGQsCisJaW50IHVzZWRtYSwgY2hhciB1c2Vlb3MpCit7CisJdW5zaWduZWQgaW50IGksIGRpZmZlcmVuY2lhbCA9IDAsIGJpcG9sYXIgPSAwOworCXVuc2lnbmVkIGludCBzY2FucXVhZCwgZ2Fpbiwgc3NoID0gMHgwMDsKKworCURQUklOVEsoImFkbF9wY2k5MTE4IEVEQkc6IEJHTjogc2V0dXBfY2hhbm5lbF9saXN0KCVkLC4sJWQsLiwlZCwlZCwlZCwlZClcbiIsIGRldi0+bWlub3IsIG5fY2hhbiwgcm90LCBmcm9udGFkZCwgYmFja2FkZCwgdXNlZG1hKTsKKworCWlmICh1c2VkbWEgPT0gMSkgeworCQlyb3QgPSA4OworCQl1c2VkbWEgPSAwOworCX0KKworCWlmIChDUl9BUkVGKGNoYW5saXN0WzBdKSA9PSBBUkVGX0RJRkYpCisJCWRpZmZlcmVuY2lhbCA9IDE7CS8vIGFsbCBpbnB1dCBtdXN0IGJlIGRpZmYKKwlpZiAoQ1JfUkFOR0UoY2hhbmxpc3RbMF0pIDwgUENJOTExOF9CSVBPTEFSX1JBTkdFUykKKwkJYmlwb2xhciA9IDE7CS8vIGFsbCBpbnB1dCBtdXN0IGJlIGJpcG9sYXIKKworCS8vIEFsbCBpcyBvaywgc28gd2UgY2FuIHNldHVwIGNoYW5uZWwvcmFuZ2UgbGlzdAorCisJaWYgKCFiaXBvbGFyKSB7CisJCWRldnByaXYtPkFkQ29udHJvbFJlZyB8PSBBZENvbnRyb2xfVW5pUDsJLy8gc2V0IHVuaWJpcG9sYXIKKwl9IGVsc2UgeworCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgJj0gKCh+QWRDb250cm9sX1VuaVApICYgMHhmZik7CS8vIGVuYWJsZSBiaXBvbGFyCisJfQorCisJaWYgKGRpZmZlcmVuY2lhbCkgeworCQlkZXZwcml2LT5BZENvbnRyb2xSZWcgfD0gQWRDb250cm9sX0RpZmY7CS8vIGVuYWJsZSBkaWZmIGlucHV0cworCX0gZWxzZSB7CisJCWRldnByaXYtPkFkQ29udHJvbFJlZyAmPSAoKH5BZENvbnRyb2xfRGlmZikgJiAweGZmKTsJLy8gc2V0IHNpbmdsZSBlbmRlZCBpbnB1dHMKKwl9CisKKwlvdXRsKGRldnByaXYtPkFkQ29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEQ05UUkwpOwkvLyBzZXR1cCBtb2RlCisKKwlvdXRsKDIsIGRldi0+aW9iYXNlICsgUENJOTExOF9TQ0FOTU9EKTsJLy8gZ29kcyBrbm93IHdoeSB0aGlzIHNlcXVlbmNlIQorCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOworCW91dGwoMSwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOworCisjaWZkZWYgUENJOTExOF9QQVJBTk9JRENIRUNLCisJZGV2cHJpdi0+Y2hhbmxpc3RsZW4gPSBuX2NoYW47CisJZm9yIChpID0gMDsgaSA8IChQQ0k5MTE4X0NIQU5MRU4gKyAxKTsgaSsrKQorCQlkZXZwcml2LT5jaGFubGlzdFtpXSA9IDB4NTVhYTsKKyNlbmRpZgorCisJaWYgKGZyb250YWRkKSB7CQkvLyBpbnNlcnQgY2hhbm5lbHMgZm9yIFMmSAorCQlzc2ggPSBkZXZwcml2LT5zb2Z0c3Noc2FtcGxlOworCQlEUFJJTlRLKCJGQTogJTA0eDogIiwgc3NoKTsKKwkJZm9yIChpID0gMDsgaSA8IGZyb250YWRkOyBpKyspIHsJLy8gc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkCisJCQlzY2FucXVhZCA9IENSX0NIQU4oY2hhbmxpc3RbMF0pOwkvLyBnZXQgY2hhbm5lbCBudW1iZXI7CisJCQlnYWluID0gQ1JfUkFOR0UoY2hhbmxpc3RbMF0pOwkvLyBnZXQgZ2FpbiBudW1iZXIKKwkJCXNjYW5xdWFkIHw9ICgoZ2FpbiAmIDB4MDMpIDw8IDgpOworCQkJb3V0bChzY2FucXVhZCB8IHNzaCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0dBSU4pOworCQkJRFBSSU5USygiJTAyeCAiLCBzY2FucXVhZCB8IHNzaCk7CisJCQlzc2ggPSBkZXZwcml2LT5zb2Z0c3NoaG9sZDsKKwkJfQorCQlEUFJJTlRLKCJcbiAiKTsKKwl9CisKKwlEUFJJTlRLKCJTTDogIiwgc3NoKTsKKwlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuOyBpKyspIHsJLy8gc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkCisJCXNjYW5xdWFkID0gQ1JfQ0hBTihjaGFubGlzdFtpXSk7CS8vIGdldCBjaGFubmVsIG51bWJlcjsKKyNpZmRlZiBQQ0k5MTE4X1BBUkFOT0lEQ0hFQ0sKKwkJZGV2cHJpdi0+Y2hhbmxpc3RbaSBeIHVzZWRtYV0gPSAoc2NhbnF1YWQgJiAweGYpIDw8IHJvdDsKKyNlbmRpZgorCQlnYWluID0gQ1JfUkFOR0UoY2hhbmxpc3RbaV0pOwkvLyBnZXQgZ2FpbiBudW1iZXIKKwkJc2NhbnF1YWQgfD0gKChnYWluICYgMHgwMykgPDwgOCk7CisJCW91dGwoc2NhbnF1YWQgfCBzc2gsIGRldi0+aW9iYXNlICsgUENJOTExOF9HQUlOKTsKKwkJRFBSSU5USygiJTAyeCAiLCBzY2FucXVhZCB8IHNzaCk7CisJfQorCURQUklOVEsoIlxuICIpOworCisJaWYgKGJhY2thZGQpIHsJCS8vIGluc2VydCBjaGFubmVscyBmb3IgZml0IG9udG8gMzJiaXQgRE1BCisJCURQUklOVEsoIkJBOiAlMDR4OiAiLCBzc2gpOworCQlmb3IgKGkgPSAwOyBpIDwgYmFja2FkZDsgaSsrKSB7CS8vIHN0b3JlIHJhbmdlIGxpc3QgdG8gY2FyZAorCQkJc2NhbnF1YWQgPSBDUl9DSEFOKGNoYW5saXN0WzBdKTsJLy8gZ2V0IGNoYW5uZWwgbnVtYmVyOworCQkJZ2FpbiA9IENSX1JBTkdFKGNoYW5saXN0WzBdKTsJLy8gZ2V0IGdhaW4gbnVtYmVyCisJCQlzY2FucXVhZCB8PSAoKGdhaW4gJiAweDAzKSA8PCA4KTsKKwkJCW91dGwoc2NhbnF1YWQgfCBzc2gsIGRldi0+aW9iYXNlICsgUENJOTExOF9HQUlOKTsKKwkJCURQUklOVEsoIiUwMnggIiwgc2NhbnF1YWQgfCBzc2gpOworCQl9CisJCURQUklOVEsoIlxuICIpOworCX0KKyNpZmRlZiBQQ0k5MTE4X1BBUkFOT0lEQ0hFQ0sKKwlkZXZwcml2LT5jaGFubGlzdFtuX2NoYW4gXiB1c2VkbWFdID0gZGV2cHJpdi0+Y2hhbmxpc3RbMCBeIHVzZWRtYV07CS8vIGZvciAzMmJpdCBvZXJhdGlvbnMKKwlpZiAodXNlZW9zKSB7CisJCWZvciAoaSA9IDE7IGkgPCBuX2NoYW47IGkrKykgewkvLyBzdG9yZSByYW5nZSBsaXN0IHRvIGNhcmQKKwkJCWRldnByaXYtPmNoYW5saXN0WyhuX2NoYW4gKyBpKSBeIHVzZWRtYV0gPQorCQkJCShDUl9DSEFOKGNoYW5saXN0W2ldKSAmIDB4ZikgPDwgcm90OworCQl9CisJCWRldnByaXYtPmNoYW5saXN0WygyICogbl9jaGFuKSBeIHVzZWRtYV0gPSBkZXZwcml2LT5jaGFubGlzdFswIF4gdXNlZG1hXTsJLy8gZm9yIDMyYml0IG9lcmF0aW9ucworCQl1c2Vlb3MgPSAyOworCX0gZWxzZSB7CisJCXVzZWVvcyA9IDE7CisJfQorI2lmZGVmIFBDSTkxMThfRVhUREVCVUcKKwlEUFJJTlRLKCJDSEw6ICIpOworCWZvciAoaSA9IDA7IGkgPD0gKHVzZWVvcyAqIG5fY2hhbik7IGkrKykgeworCQlEUFJJTlRLKCIlMDR4ICIsIGRldnByaXYtPmNoYW5saXN0W2ldKTsKKwl9CisJRFBSSU5USygiXG4gIik7CisjZW5kaWYKKyNlbmRpZgorCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOwkvLyBjbG9zZSBzY2FuIHF1ZXVlCisvLyAgICAgIGNvbWVkaV91ZGVsYXkoMTAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltcG9ydGFudCBkZWxheSwgb3IgZmlyc3Qgc2FtcGxlIHdpbGwgYmUgY3JpcGxlZAorCisJRFBSSU5USygiYWRsX3BjaTkxMTggRURCRzogRU5EOiBzZXR1cF9jaGFubmVsX2xpc3QoKVxuIik7CisJcmV0dXJuIDE7CQkvLyB3ZSBjYW4gc2VydmUgdGhpcyB3aXRoIHNjYW4gbG9naWMKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBjYWxjdWxhdGUgODI1NCBkaXZpc29ycyBpZiB0aGV5IGFyZSB1c2VkIGZvciBkdWFsIHRpbWluZworKi8KK3N0YXRpYyB2b2lkIHBjaTkxMThfY2FsY19kaXZpc29ycyhjaGFyIG1vZGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgdW5zaWduZWQgaW50ICp0aW0xLCB1bnNpZ25lZCBpbnQgKnRpbTIsCisJdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgY2hhbnMsIHVuc2lnbmVkIGludCAqZGl2MSwgdW5zaWduZWQgaW50ICpkaXYyLAorCWNoYXIgdXNlc3NoLCB1bnNpZ25lZCBpbnQgY2huc3NoZnJvbnQpCit7CisJRFBSSU5USygiYWRsX3BjaTkxMTggRURCRzogQkdOOiBwY2k5MTE4X2NhbGNfZGl2aXNvcnMoJWQsJWQsLiwldSwldSwldSwlZCwuLC4sLCV1LCV1KVxuIiwgbW9kZSwgZGV2LT5taW5vciwgKnRpbTEsICp0aW0yLCBmbGFncywgY2hhbnMsIHVzZXNzaCwgY2huc3NoZnJvbnQpOworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMToKKwljYXNlIDQ6CisJCWlmICgqdGltMiA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCSp0aW0yID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjU0X29zY19iYXNlLCBkaXYxLCBkaXYyLAorCQkJdGltMiwgZmxhZ3MgJiBUUklHX1JPVU5EX05FQVJFU1QpOworCQlEUFJJTlRLKCJPU0MgYmFzZT0ldSBkaXYxPSV1IGRpdjI9JXUgdGltZXIxPSV1XG4iLAorCQkJZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2UsICpkaXYxLCAqZGl2MiwgKnRpbTEpOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmICgqdGltMiA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCSp0aW0yID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQlEUFJJTlRLKCIxIGRpdjE9JXUgZGl2Mj0ldSB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLCAqZGl2MSwgKmRpdjIsCisJCQkqdGltMSwgKnRpbTIpOworCQkqZGl2MSA9ICp0aW0yIC8gZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2U7CS8vIGNvbnZlcnQgdGltZXIgKGJ1cnN0KQorCQlEUFJJTlRLKCIyIGRpdjE9JXUgZGl2Mj0ldSB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLCAqZGl2MSwgKmRpdjIsCisJCQkqdGltMSwgKnRpbTIpOworCQlpZiAoKmRpdjEgPCB0aGlzX2JvYXJkLT5haV9wYWNlcl9taW4pCisJCQkqZGl2MSA9IHRoaXNfYm9hcmQtPmFpX3BhY2VyX21pbjsKKwkJRFBSSU5USygiMyBkaXYxPSV1IGRpdjI9JXUgdGltZXIxPSV1IHRpbWVyMj0ldVxuIiwgKmRpdjEsICpkaXYyLAorCQkJKnRpbTEsICp0aW0yKTsKKwkJKmRpdjIgPSAqdGltMSAvIGRldnByaXYtPmk4MjU0X29zY19iYXNlOwkvLyBzY2FuIHRpbWVyCisJCURQUklOVEsoIjQgZGl2MT0ldSBkaXYyPSV1IHRpbWVyMT0ldSB0aW1lcjI9JXVcbiIsICpkaXYxLCAqZGl2MiwKKwkJCSp0aW0xLCAqdGltMik7CisJCSpkaXYyID0gKmRpdjIgLyAqZGl2MTsJLy8gbWFqb3IgdGltZXIgaXMgYzEqYzIKKwkJRFBSSU5USygiNSBkaXYxPSV1IGRpdjI9JXUgdGltZXIxPSV1IHRpbWVyMj0ldVxuIiwgKmRpdjEsICpkaXYyLAorCQkJKnRpbTEsICp0aW0yKTsKKwkJaWYgKCpkaXYyIDwgY2hhbnMpCisJCQkqZGl2MiA9IGNoYW5zOworCQlEUFJJTlRLKCI2IGRpdjE9JXUgZGl2Mj0ldSB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLCAqZGl2MSwgKmRpdjIsCisJCQkqdGltMSwgKnRpbTIpOworCisJCSp0aW0yID0gKmRpdjEgKiBkZXZwcml2LT5pODI1NF9vc2NfYmFzZTsJLy8gcmVhbCBjb252ZXJ0IHRpbWVyCisKKwkJaWYgKHVzZXNzaCAmIChjaG5zc2hmcm9udCA9PSAwKSkJLy8gdXNlIEJTU0ggc2lnbmFsCisJCQlpZiAoKmRpdjIgPCAoY2hhbnMgKyAyKSkKKwkJCQkqZGl2MiA9IGNoYW5zICsgMjsKKworCQlEUFJJTlRLKCI3IGRpdjE9JXUgZGl2Mj0ldSB0aW1lcjE9JXUgdGltZXIyPSV1XG4iLCAqZGl2MSwgKmRpdjIsCisJCQkqdGltMSwgKnRpbTIpOworCQkqdGltMSA9ICpkaXYxICogKmRpdjIgKiBkZXZwcml2LT5pODI1NF9vc2NfYmFzZTsKKwkJRFBSSU5USygiT1NDIGJhc2U9JXUgZGl2MT0ldSBkaXYyPSV1IHRpbWVyMT0ldSB0aW1lcjI9JXVcbiIsCisJCQlkZXZwcml2LT5pODI1NF9vc2NfYmFzZSwgKmRpdjEsICpkaXYyLCAqdGltMSwgKnRpbTIpOworCQlicmVhazsKKwl9CisJRFBSSU5USygiYWRsX3BjaTkxMTggRURCRzogRU5EOiBwY2k5MTE4X2NhbGNfZGl2aXNvcnMoJXUsJXUpXG4iLAorCQkqZGl2MSwgKmRpdjIpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgc3RhcnRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGl2aXNvcjEsCisJdW5zaWduZWQgaW50IGRpdmlzb3IyKQoreworCW91dGwoMHg3NCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVENUUkwpOworCW91dGwoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVENUUkwpOworLy8gICAgICBvdXRsKDB4MzAsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlRDVFJMKTsKKwljb21lZGlfdWRlbGF5KDEpOworCisJaWYgKChtb2RlID09IDEpIHx8IChtb2RlID09IDIpIHx8IChtb2RlID09IDQpKSB7CisJCW91dGwoZGl2aXNvcjIgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQ05UMik7CisJCW91dGwoKGRpdmlzb3IyID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVDIpOworCQlvdXRsKGRpdmlzb3IxICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVDEpOworCQlvdXRsKChkaXZpc29yMSA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENJOTExOF9DTlQxKTsKKwl9Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfZXh0dHJnX2FkZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhciBzb3VyY2UpCit7CisJaWYgKHNvdXJjZSA+IDMpCisJCXJldHVybiAtMTsJLy8gaW5jb3JyZWN0IHNvdXJjZQorCWRldnByaXYtPmV4dHRyZ191c2VycyB8PSAoMSA8PCBzb3VyY2UpOworCWRldnByaXYtPkludENvbnRyb2xSZWcgfD0gSW50X0RUcmc7CisJb3V0bChkZXZwcml2LT5JbnRDb250cm9sUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UQ1RSTCk7CisJb3V0bChpbmwoZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19JTlRDU1IpIHwgMHgxZjAwLCBkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUik7CS8vIGFsbG93IElOVCBpbiBBTUNDCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfZXh0dHJnX2RlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhciBzb3VyY2UpCit7CisJaWYgKHNvdXJjZSA+IDMpCisJCXJldHVybiAtMTsJLy8gaW5jb3JyZWN0IHNvdXJjZQorCWRldnByaXYtPmV4dHRyZ191c2VycyAmPSB+KDEgPDwgc291cmNlKTsKKwlpZiAoIWRldnByaXYtPmV4dHRyZ191c2VycykgewkvLyBzaHV0ZG93biBleHQgdHJnIGludHRlcnJ1cHRzCisJCWRldnByaXYtPkludENvbnRyb2xSZWcgJj0gfkludF9EVHJnOworCQlpZiAoIWRldnByaXYtPkludENvbnRyb2xSZWcpCS8vIGFsbCBJUlEgZGlzYWJsZWQKKwkJCW91dGwoaW5sKGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKSAmICh+MHgwMDAwMWYwMCksIGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsJLy8gZGlzYWJsZSBpbnQgaW4gQU1DQworCQlvdXRsKGRldnByaXYtPkludENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRDVFJMKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTkxMThfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaWYgKGRldnByaXYtPnVzZWRtYSkKKwkJb3V0bChpbmwoZGV2cHJpdi0+aW9iYXNlX2EgKyBBTUNDX09QX1JFR19NQ1NSKSAmICh+RU5fQTJQX1RSQU5TRkVSUyksIGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfTUNTUik7CS8vIHN0b3AgRE1BCisJcGNpOTExOF9leHR0cmdfZGVsKGRldiwgRVhUVFJHX0FJKTsKKwlzdGFydF9wYWNlcihkZXYsIDAsIDAsIDApOwkvLyBzdG9wIDgyNTQgY291bnRlcnMKKwlkZXZwcml2LT5BZEZ1bmN0aW9uUmVnID0gQWRGdW5jdGlvbl9QRFRyZyB8IEFkRnVuY3Rpb25fUEVUcmc7CisJb3V0bChkZXZwcml2LT5BZEZ1bmN0aW9uUmVnLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQURGVU5DKTsJLy8gcG9zaXRpdmUgdHJpZ2dlcnMsIG5vIFMmSCwgbm8gYnVyc3QsIGJ1cnN0IHN0b3AsIG5vIHBvc3QgdHJpZ2dlciwgbm8gYWJvdXQgdHJpZ2dlciwgdHJpZ2dlciBzdG9wCisJZGV2cHJpdi0+QWRDb250cm9sUmVnID0gMHgwMDsKKwlvdXRsKGRldnByaXYtPkFkQ29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEQ05UUkwpOwkvLyBiaXBvbGFyLCBTLkUuLCB1c2UgODI1NCwgc3RvcCA4MzU0LCBpbnRlcm5hbCB0cmlnZ2VyLCBzb2Z0IHRyaWdnZXIsIGRpc2FibGUgSU5UIGFuZCBETUEKKwlvdXRsKDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9CVVJTVCk7CisJb3V0bCgxLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfU0NBTk1PRCk7CisJb3V0bCgyLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfU0NBTk1PRCk7CS8vIHJlc2V0IHNjYW4gcXVldWUKKwlvdXRsKDAsIGRldi0+aW9iYXNlICsgUENJOTExOF9ERUxGSUZPKTsJLy8gZmx1c2ggRklGTworCisJZGV2cHJpdi0+YWlfZG8gPSAwOworCWRldnByaXYtPnVzZWRtYSA9IDA7CisKKwlkZXZwcml2LT5haV9hY3Rfc2NhbiA9IDA7CisJZGV2cHJpdi0+YWlfYWN0X2RtYXBvcyA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisJZGV2cHJpdi0+YWlfYnVmX3B0ciA9IDA7CisJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAwOworCWRldnByaXYtPmRtYV9hY3RidWYgPSAwOworCisJaWYgKCFkZXZwcml2LT5JbnRDb250cm9sUmVnKQorCQlvdXRsKGlubChkZXZwcml2LT5pb2Jhc2VfYSArIEFNQ0NfT1BfUkVHX0lOVENTUikgfCAweDFmMDAsIGRldnByaXYtPmlvYmFzZV9hICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsJLy8gYWxsb3cgSU5UIGluIEFNQ0MKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2k5MTE4X3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWRldnByaXYtPkludENvbnRyb2xSZWcgPSAwOworCWRldnByaXYtPmV4dHRyZ191c2VycyA9IDA7CisJaW5sKGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRDVFJMKTsKKwlvdXRsKGRldnByaXYtPkludENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9JTlRDVFJMKTsJLy8gZGlzYWJsZSBpbnRlcnJ1cHRzIHNvdXJjZQorCW91dGwoMHgzMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVENUUkwpOworLy8gICAgICAgIG91dGwoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0NOVENUUkwpOworCXN0YXJ0X3BhY2VyKGRldiwgMCwgMCwgMCk7CS8vIHN0b3AgODI1NCBjb3VudGVycworCWRldnByaXYtPkFkQ29udHJvbFJlZyA9IDA7CisJb3V0bChkZXZwcml2LT5BZENvbnRyb2xSZWcsIGRldi0+aW9iYXNlICsgUENJOTExOF9BRENOVFJMKTsJLy8gYmlwb2xhciwgUy5FLiwgdXNlIDgyNTQsIHN0b3AgODM1NCwgaW50ZXJuYWwgdHJpZ2dlciwgc29mdCB0cmlnZ2VyLCBkaXNhYmxlIElOVCBhbmQgRE1BCisJb3V0bCgwLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfQlVSU1QpOworCW91dGwoMSwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOworCW91dGwoMiwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X1NDQU5NT0QpOwkvLyByZXNldCBzY2FuIHF1ZXVlCisJZGV2cHJpdi0+QWRGdW5jdGlvblJlZyA9IEFkRnVuY3Rpb25fUERUcmcgfCBBZEZ1bmN0aW9uX1BFVHJnOworCW91dGwoZGV2cHJpdi0+QWRGdW5jdGlvblJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FERlVOQyk7CS8vIHBvc2l0aXZlIHRyaWdnZXJzLCBubyBTJkgsIG5vIGJ1cnN0LCBidXJzdCBzdG9wLCBubyBwb3N0IHRyaWdnZXIsIG5vIGFib3V0IHRyaWdnZXIsIHRyaWdnZXIgc3RvcAorCisJZGV2cHJpdi0+YW9fZGF0YVswXSA9IDIwNDc7CisJZGV2cHJpdi0+YW9fZGF0YVsxXSA9IDIwNDc7CisJb3V0bChkZXZwcml2LT5hb19kYXRhWzBdLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfREExKTsJLy8gcmVzZXQgQS9EIG91dHMgdG8gMFYKKwlvdXRsKGRldnByaXYtPmFvX2RhdGFbMV0sIGRldi0+aW9iYXNlICsgUENJOTExOF9EQTIpOworCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0RPKTsJLy8gcmVzZXQgZGlnaSBvdXRzIHRvIEwKKwljb21lZGlfdWRlbGF5KDEwKTsKKwlpbmwoZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEX0RBVEEpOworCW91dGwoMCwgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0RFTEZJRk8pOwkvLyBmbHVzaCBGSUZPCisJb3V0bCgwLCBkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UU1JDKTsJLy8gcmVtb3ZlIElOVCByZXF1ZXN0cworCWlubChkZXYtPmlvYmFzZSArIFBDSTkxMThfQURTVEFUKTsJLy8gZmx1c2ggQS9EIHN0YXR1cyByZWdpc3RlcgorCWlubChkZXYtPmlvYmFzZSArIFBDSTkxMThfSU5UU1JDKTsJLy8gZmx1c2ggSU5UIHJlcXVlc3RzCisJZGV2cHJpdi0+QWRDb250cm9sUmVnID0gMDsKKwlvdXRsKGRldnByaXYtPkFkQ29udHJvbFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0k5MTE4X0FEQ05UUkwpOwkvLyBiaXBvbGFyLCBTLkUuLCB1c2UgODI1NCwgc3RvcCA4MzU0LCBpbnRlcm5hbCB0cmlnZ2VyLCBzb2Z0IHRyaWdnZXIsIGRpc2FibGUgSU5UIGFuZCBETUEKKworCWRldnByaXYtPmNudDBfdXNlcnMgPSAwOworCWRldnByaXYtPmV4dHRyZ191c2VycyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldCwgcGFnZXMsIGk7CisJdW5zaWduZWQgc2hvcnQgbWFzdGVyOworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2VfYSwgaW9iYXNlXzk7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlpbnQgb3B0X2J1cywgb3B0X3Nsb3Q7CisJY29uc3QgY2hhciAqZXJyc3RyOworCXVuc2lnbmVkIGNoYXIgcGNpX2J1cywgcGNpX3Nsb3QsIHBjaV9mdW5jOworCXUxNiB1MTZ3OworCisJcnRfcHJpbnRrKCJjb21lZGklZDogYWRsX3BjaTkxMTg6IGJvYXJkPSVzIiwgZGV2LT5taW5vciwKKwkJdGhpc19ib2FyZC0+bmFtZSk7CisKKwlvcHRfYnVzID0gaXQtPm9wdGlvbnNbMF07CisJb3B0X3Nsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKwlpZiAoaXQtPm9wdGlvbnNbM10gJiAxKSB7CisJCW1hc3RlciA9IDA7CS8vIHVzZXIgZG9uJ3Qgd2FudCB1c2UgYnVzIG1hc3RlcgorCX0gZWxzZSB7CisJCW1hc3RlciA9IDE7CisJfQorCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2k5MTE4X3ByaXZhdGUpKSkgPCAwKSB7CisJCXJ0X3ByaW50aygiIC0gQWxsb2NhdGlvbiBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogTG9vayBmb3IgbWF0Y2hpbmcgUENJIGRldmljZSAqLworCWVycnN0ciA9ICJub3QgZm91bmQhIjsKKwlwY2lkZXYgPSBOVUxMOworCXdoaWxlIChOVUxMICE9IChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNQ0MsCisJCQkJdGhpc19ib2FyZC0+ZGV2aWNlX2lkLCBwY2lkZXYpKSkgeworCQkvKiBGb3VuZCBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlLiAqLworCQlpZiAob3B0X2J1cyB8fCBvcHRfc2xvdCkgeworCQkJLyogQ2hlY2sgYnVzL3Nsb3QuICovCisJCQlpZiAob3B0X2J1cyAhPSBwY2lkZXYtPmJ1cy0+bnVtYmVyCisJCQkJfHwgb3B0X3Nsb3QgIT0gUENJX1NMT1QocGNpZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CS8qIG5vIG1hdGNoICovCisJCX0KKwkJLyoKKwkJICogTG9vayBmb3IgZGV2aWNlIHRoYXQgaXNuJ3QgaW4gdXNlLgorCQkgKiBFbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zLgorCQkgKi8KKwkJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgImFkbF9wY2k5MTE4IikpIHsKKwkJCWVycnN0ciA9ICJmYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucyEiOworCQkJY29udGludWU7CisJCX0KKwkJYnJlYWs7CisJfQorCisJaWYgKCFwY2lkZXYpIHsKKwkJaWYgKG9wdF9idXMgfHwgb3B0X3Nsb3QpIHsKKwkJCXJ0X3ByaW50aygiIC0gQ2FyZCBhdCBiOnMgJWQ6JWQgJXNcbiIsCisJCQkJb3B0X2J1cywgb3B0X3Nsb3QsIGVycnN0cik7CisJCX0gZWxzZSB7CisJCQlydF9wcmludGsoIiAtIENhcmQgJXNcbiIsIGVycnN0cik7CisJCX0KKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKG1hc3RlcikgeworCQlwY2lfc2V0X21hc3RlcihwY2lkZXYpOworCX0KKworCXBjaV9idXMgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOworCXBjaV9zbG90ID0gUENJX1NMT1QocGNpZGV2LT5kZXZmbik7CisJcGNpX2Z1bmMgPSBQQ0lfRlVOQyhwY2lkZXYtPmRldmZuKTsKKwlpcnEgPSBwY2lkZXYtPmlycTsKKwlpb2Jhc2VfYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOworCWlvYmFzZV85ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisKKwlydF9wcmludGsoIiwgYjpzOmY9JWQ6JWQ6JWQsIGlvPTB4JTRseCwgMHglNGx4IiwgcGNpX2J1cywgcGNpX3Nsb3QsCisJCXBjaV9mdW5jLCBpb2Jhc2VfOSwgaW9iYXNlX2EpOworCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2VfOTsKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJZGV2cHJpdi0+cGNpZGV2ID0gcGNpZGV2OworCWRldnByaXYtPmlvYmFzZV9hID0gaW9iYXNlX2E7CisKKwlwY2k5MTE4X3Jlc2V0KGRldik7CisKKwlpZiAoaXQtPm9wdGlvbnNbM10gJiAyKQorCQlpcnEgPSAwOwkvLyB1c2VyIGRvbid0IHdhbnQgdXNlIElSUQorCWlmIChpcnEgPiAwKSB7CisJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBpbnRlcnJ1cHRfcGNpOTExOCwgSVJRRl9TSEFSRUQsCisJCQkJIkFETGluayBQQ0ktOTExOCIsIGRldikpIHsKKwkJCXJ0X3ByaW50aygiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICVkLCBESVNBQkxJTkcgSVQiLAorCQkJCWlycSk7CisJCQlpcnEgPSAwOwkvKiBDYW4ndCB1c2UgSVJRICovCisJCX0gZWxzZSB7CisJCQlydF9wcmludGsoIiwgaXJxPSV1IiwgaXJxKTsKKwkJfQorCX0gZWxzZSB7CisJCXJ0X3ByaW50aygiLCBJUlEgZGlzYWJsZWQiKTsKKwl9CisKKwlkZXYtPmlycSA9IGlycTsKKworCWlmIChtYXN0ZXIpIHsJCS8vIGFsbG9jIERNQSBidWZmZXJzCisJCWRldnByaXYtPmRtYV9kb3VibGVidWYgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlmb3IgKHBhZ2VzID0gNDsgcGFnZXMgPj0gMDsgcGFnZXMtLSkKKwkJCQlpZiAoKGRldnByaXYtPmRtYWJ1Zl92aXJ0W2ldID0gKHNob3J0ICopCisJCQkJCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsCisJCQkJCQkJcGFnZXMpKSkKKwkJCQkJYnJlYWs7CisJCQlpZiAoZGV2cHJpdi0+ZG1hYnVmX3ZpcnRbaV0pIHsKKwkJCQlkZXZwcml2LT5kbWFidWZfcGFnZXNbaV0gPSBwYWdlczsKKwkJCQlkZXZwcml2LT5kbWFidWZfc2l6ZVtpXSA9IFBBR0VfU0laRSAqIHBhZ2VzOworCQkJCWRldnByaXYtPmRtYWJ1Zl9zYW1wbGVzW2ldID0KKwkJCQkJZGV2cHJpdi0+ZG1hYnVmX3NpemVbaV0gPj4gMTsKKwkJCQlkZXZwcml2LT5kbWFidWZfaHdbaV0gPQorCQkJCQl2aXJ0X3RvX2J1cygodm9pZCAqKWRldnByaXYtPgorCQkJCQlkbWFidWZfdmlydFtpXSk7CisJCQl9CisJCX0KKwkJaWYgKCFkZXZwcml2LT5kbWFidWZfdmlydFswXSkgeworCQkJcnRfcHJpbnRrKCIsIENhbid0IGFsbG9jYXRlIERNQSBidWZmZXIsIERNQSBkaXNhYmxlZCEiKTsKKwkJCW1hc3RlciA9IDA7CisJCX0KKworCQlpZiAoZGV2cHJpdi0+ZG1hYnVmX3ZpcnRbMV0pCisJCQlkZXZwcml2LT5kbWFfZG91YmxlYnVmID0gMTsKKworCX0KKworCWlmICgoZGV2cHJpdi0+bWFzdGVyID0gbWFzdGVyKSkgeworCQlydF9wcmludGsoIiwgYnVzIG1hc3RlciIpOworCX0gZWxzZSB7CisJCXJ0X3ByaW50aygiLCBubyBidXMgbWFzdGVyIik7CisJfQorCisJZGV2cHJpdi0+dXNlbXV4ID0gMDsKKwlpZiAoaXQtPm9wdGlvbnNbMl0gPiAwKSB7CisJCWRldnByaXYtPnVzZW11eCA9IGl0LT5vcHRpb25zWzJdOworCQlpZiAoZGV2cHJpdi0+dXNlbXV4ID4gMjU2KQorCQkJZGV2cHJpdi0+dXNlbXV4ID0gMjU2OwkvLyBtYXggMjU2IGNoYW5uZWxzIQorCQlpZiAoaXQtPm9wdGlvbnNbNF0gPiAwKQorCQkJaWYgKGRldnByaXYtPnVzZW11eCA+IDEyOCkgeworCQkJCWRldnByaXYtPnVzZW11eCA9IDEyODsJLy8gbWF4IDEyOCBjaGFubmVscyB3aXRoIHNvZnRhcmUgUyZIIQorCQkJfQorCQlydF9wcmludGsoIiwgZXh0LiBtdXggJWQgY2hhbm5lbHMiLCBkZXZwcml2LT51c2VtdXgpOworCX0KKworCWRldnByaXYtPnNvZnRzc2hkZWxheSA9IGl0LT5vcHRpb25zWzRdOworCWlmIChkZXZwcml2LT5zb2Z0c3NoZGVsYXkgPCAwKSB7CS8vIHNlbGVjdCBzYW1wbGUmaG9sZCBzaWduYWwgcG9sYXJpdHkKKwkJZGV2cHJpdi0+c29mdHNzaGRlbGF5ID0gLWRldnByaXYtPnNvZnRzc2hkZWxheTsKKwkJZGV2cHJpdi0+c29mdHNzaHNhbXBsZSA9IDB4ODA7CisJCWRldnByaXYtPnNvZnRzc2hob2xkID0gMHgwMDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5zb2Z0c3Noc2FtcGxlID0gMHgwMDsKKwkJZGV2cHJpdi0+c29mdHNzaGhvbGQgPSAweDgwOworCX0KKworCXJ0X3ByaW50aygiLlxuIik7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXZwcml2LT5wY2lkZXYsIFBDSV9DT01NQU5ELCAmdTE2dyk7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldnByaXYtPnBjaWRldiwgUENJX0NPTU1BTkQsIHUxNncgfCA2NCk7CS8vIEVuYWJsZSBwYXJpdHkgY2hlY2sgZm9yIHBhcml0eSBlcnJvcgorCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ09NTU9OIHwgU0RGX0dST1VORCB8IFNERl9ESUZGOworCWlmIChkZXZwcml2LT51c2VtdXgpIHsKKwkJcy0+bl9jaGFuID0gZGV2cHJpdi0+dXNlbXV4OworCX0gZWxzZSB7CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuOworCX0KKwlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YWlfbWF4ZGF0YTsKKwlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2FpY2hhbmxpc3Q7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5yYW5nZWxpc3RfYWk7CisJcy0+Y2FuY2VsID0gcGNpOTExOF9haV9jYW5jZWw7CisJcy0+aW5zbl9yZWFkID0gcGNpOTExOF9pbnNuX3JlYWRfYWk7CisJaWYgKGRldi0+aXJxKSB7CisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisJCXMtPmRvX2NtZHRlc3QgPSBwY2k5MTE4X2FpX2NtZHRlc3Q7CisJCXMtPmRvX2NtZCA9IHBjaTkxMThfYWlfY21kOworCQlzLT5tdW5nZSA9IHBjaTkxMThfYWlfbXVuZ2U7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5hb19tYXhkYXRhOworCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cmFuZ2VsaXN0X2FvOworCXMtPmluc25fd3JpdGUgPSBwY2k5MTE4X2luc25fd3JpdGVfYW87CisJcy0+aW5zbl9yZWFkID0gcGNpOTExOF9pbnNuX3JlYWRfYW87CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSA0OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW9fYml0cyA9IDA7CQkvKiBhbGwgYml0cyBpbnB1dCAqLworCXMtPmluc25fYml0cyA9IHBjaTkxMThfaW5zbl9iaXRzX2RpOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmlvX2JpdHMgPSAweGY7CS8qIGFsbCBiaXRzIG91dHB1dCAqLworCXMtPmluc25fYml0cyA9IHBjaTkxMThfaW5zbl9iaXRzX2RvOworCisJZGV2cHJpdi0+dmFsaWQgPSAxOworCWRldnByaXYtPmk4MjU0X29zY19iYXNlID0gMjUwOwkvLyAyNTBucz00TUh6CisJZGV2cHJpdi0+YWlfbWFza2hhcmRlcnIgPSAweDEwYTsJLy8gZGVmYXVsdCBtZWFzdXJlIGNyYXNoIGNvbmRpdGlvbgorCWlmIChpdC0+b3B0aW9uc1s1XSkJLy8gZGlzYWJsZSBzb21lIHJlcXVlc3RlZAorCQlkZXZwcml2LT5haV9tYXNraGFyZGVyciAmPSB+aXQtPm9wdGlvbnNbNV07CisKKwlzd2l0Y2ggKHRoaXNfYm9hcmQtPmFpX21heGRhdGEpIHsKKwljYXNlIDB4ZmZmZjoKKwkJZGV2cHJpdi0+YWkxNmJpdHMgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZwcml2LT5haTE2Yml0cyA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpOTExOF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+dmFsaWQpCisJCQlwY2k5MTE4X3Jlc2V0KGRldik7CisJCWlmIChkZXYtPmlycSkKKwkJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwkJaWYgKGRldnByaXYtPnBjaWRldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaWRldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lkZXYpOworCQl9CisJCWlmIChkZXZwcml2LT5kbWFidWZfdmlydFswXSkKKwkJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpZGV2cHJpdi0+ZG1hYnVmX3ZpcnRbMF0sCisJCQkJZGV2cHJpdi0+ZG1hYnVmX3BhZ2VzWzBdKTsKKwkJaWYgKGRldnByaXYtPmRtYWJ1Zl92aXJ0WzFdKQorCQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylkZXZwcml2LT5kbWFidWZfdmlydFsxXSwKKwkJCQlkZXZwcml2LT5kbWFidWZfcGFnZXNbMV0pOworCX0KKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZjYyODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRxMTJiLmMKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvYWRxMTJiLmMKKyAgICBkcml2ZXIgZm9yIE1pY3JvQXhpYWwgQURRMTItQiBkYXRhIGFjcXVpc2l0aW9uIGFuZCBjb250cm9sIGNhcmQKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGFkcTEyYgorRGVzY3JpcHRpb246IGRyaXZlciBmb3IgTWljcm9BeGlhbCBBRFExMi1CIGRhdGEgYWNxdWlzaXRpb24gYW5kIGNvbnRyb2wgY2FyZAorRGV2aWNlczogW01pY3JvQXhpYWxdIEFEUTEyLUIgKGFkcTEyYikKK0F1dGhvcjogamVyZW15IHRoZWxlciA8dGhlbGVyZ0BpYi5jbmVhLmdvdi5hcj4KK1VwZGF0ZWQ6IFRodSwgMjEgRmViIDIwMDggMDI6NTY6MjcgLTAzMDAKK1N0YXR1czogd29ya3MKKworRHJpdmVyIGZvciB0aGUgYWNxdWlzaXRpb24gY2FyZCBBRFExMi1CICh3aXRob3V0IGFueSBhZGQtb24pLgorCisgLSBBbmFsb2cgaW5wdXQgaXMgc3ViZGV2aWNlIDAgKDE2IGNoYW5uZWxzIHNpbmdsZS1lbmRlZCBvciA4IGRpZmZlcmVudGlhbCkKKyAtIERpZ2l0YWwgaW5wdXQgaXMgc3ViZGV2aWNlIDEgKDUgY2hhbm5lbHMpCisgLSBEaWdpdGFsIG91dHB1dCBpcyBzdWJkZXZpY2UgMSAoOCBjaGFubmVscykKKyAtIFRoZSBQQUNFUiBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgdmVyc2lvbgorCitJZiB5b3UgZG8gbm90IHNwZWNpZnkgYW55IG9wdGlvbnMsIHRoZXkgd2lsbCBkZWZhdWx0IHRvCisKKyAgIyBjb21lZGlfY29uZmlnIC9kZXYvY29tZWRpMCBhZHExMmIgMHgzMDAsMCwwCisKKyAgb3B0aW9uIDE6IEkvTyBiYXNlIGFkZHJlc3MuIFRoZSBmb2xsb3dpbmcgdGFibGUgaXMgcHJvdmlkZWQgYXMgYSBoZWxwCisgICBvZiB0aGUgaGFyZHdhcmUganVtcGVycy4KKworICAgICAgICAgYWRkcmVzcyAgICAgICAgICAgIGp1bXBlciBKQURSCisgICAgICAgICAgMHgzMDAgICAgICAgICAgICAgICAgIDEgKGZhY3RvcnkgZGVmYXVsdCkKKyAgICAgICAgICAweDMyMCAgICAgICAgICAgICAgICAgMgorICAgICAgICAgIDB4MzQwICAgICAgICAgICAgICAgICAzCisgICAgICAgICAgMHgzNjAgICAgICAgICAgICAgICAgIDQKKyAgICAgICAgICAweDM4MCAgICAgICAgICAgICAgICAgNQorICAgICAgICAgIDB4M0EwICAgICAgICAgICAgICAgICA2CisKKyAgb3B0aW9uIDI6IHVuaXBvbGFyL2JpcG9sYXIgQURDIHNlbGVjdGlvbjogMCAtPiBiaXBvbGFyLCAxIC0+IHVuaXBvbGFyCisKKyAgICAgICAgc2VsZWN0aW9uICAgICAgICAgY29tZWRpX2NvbmZpZyBvcHRpb24gICAgICAgICAgICBKVUIKKyAgICAgICAgIGJpcG9sYXIgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAyLTMgKGZhY3RvcnkgZGVmYXVsdCkKKyAgICAgICAgIHVuaXBvbGFyICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAxLTIKKworICBvcHRpb24gMzogc2luZ2xlLWVuZGVkL2RpZmZlcmVudGlhbCBBSSBzZWxlY3Rpb246IDAgLT4gU0UsIDEgLT4gZGlmZmVyZW50aWFsCisKKyAgICAgICAgc2VsZWN0aW9uICAgICAgICAgY29tZWRpX2NvbmZpZyBvcHRpb24gICAgIEpDSEEgICAgSkNIQgorICAgICAgIHNpbmdsZS1lbmRlZCAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgMS0yICAgICAxLTIgKGZhY3RvcnkgZGVmYXVsdCkKKyAgICAgICBkaWZmZXJlbnRpYWwgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgIDItMyAgICAgMi0zCisKKworICAgd3JpdHRlbiBieSBqZXJlbXkgdGhlbGVyIDx0aGVsZXJnQGliLmNuZWEuZ292LmFyPgorCisgICBpbnN0aXR1dG8gYmFsc2Vpcm8KKyAgIGNvbWlzaW9uIG5hY2lvbmFsIGRlIGVuZXJnaWEgYXRvbWljYQorICAgdW5pdmVyc2lkYWQgbmFjaW9uYWwgZGUgY3V5bworICAgYXJnZW50aW5hCisKKyAgIDIxLWZlYi0yMDA4CisgICAgICsgY2hhbmdlZCBzdXBwb3J0ZWQgZGV2aWNlcyBzdHJpbmcgKG1pc3N1c2VkIHRoZSBbXSBhbmQgKCkpCisKKyAgIDEzLW9jdC0yMDA3CisgICAgICsgZmlyc3QgdHJ5CisKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisvLyBhZGRyZXNzIHNjaGVtZSAocGFnZSAyLjE3IG9mIHRoZSBtYW51YWwpCisjZGVmaW5lIEFEUTEyQl9TSVpFICAgICAxNgorCisjZGVmaW5lIEFEUTEyQl9DVFJFRyAgICAweDAwCisjZGVmaW5lIEFEUTEyQl9TVElOUiAgICAweDAwCisjZGVmaW5lIEFEUTEyQl9PVVRCUiAgICAweDA0CisjZGVmaW5lIEFEUTEyQl9BRExPVyAgICAweDA4CisjZGVmaW5lIEFEUTEyQl9BREhJRyAgICAweDA5CisjZGVmaW5lIEFEUTEyQl9DT05UMCAgICAweDBjCisjZGVmaW5lIEFEUTEyQl9DT05UMSAgICAweDBkCisjZGVmaW5lIEFEUTEyQl9DT05UMiAgICAweDBlCisjZGVmaW5lIEFEUTEyQl9DT1dPUkQgICAweDBmCisKKy8vIG1hc2sgb2YgdGhlIGJpdCBhdCBTVElOUiB0byBjaGVjayBlbmQgb2YgY29udmVyc2lvbgorI2RlZmluZSBBRFExMkJfRU9DICAgICAweDIwCisKKyNkZWZpbmUgVElNRU9VVCAgICAgICAgMjAKKworLy8gYXZhaWxhYmxlIHJhbmdlcyB0aHJvdWdoIHRoZSBQR0EgZ2FpbnMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hZHExMmJfYWlfYmlwb2xhciA9IHsgNCwgeworICAgICAgICBCSVBfUkFOR0UoIDUgKSwKKyAgICAgICAgQklQX1JBTkdFKCAyICksCisgICAgICAgIEJJUF9SQU5HRSggMSApLAorICAgICAgICBCSVBfUkFOR0UoIDAuNSApCit9fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FkcTEyYl9haV91bmlwb2xhciA9IHsgNCwgeworICAgICAgICBVTklfUkFOR0UoIDUgKSwKKyAgICAgICAgVU5JX1JBTkdFKCAyICksCisgICAgICAgIFVOSV9SQU5HRSggMSApLAorICAgICAgICBVTklfUkFOR0UoIDAuNSApCit9fTsKKworCisKK3N0cnVjdCBhZHExMmJfYm9hcmQgeworICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgICBpbnQgYWlfc2VfY2hhbnM7CisgICAgICAgIGludCBhaV9kaWZmX2NoYW5zOworICAgICAgICBpbnQgYWlfYml0czsKKyAgICAgICAgaW50IGRpX2NoYW5zOworICAgICAgICBpbnQgZG9fY2hhbnM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFkcTEyYl9ib2FyZCBhZHExMmJfYm9hcmRzW10gPSB7CisgICAgICAgIHsKKyAgICAgICAgbmFtZTogICAgICAgICAgICJhZHExMmIiLAorICAgICAgICBhaV9zZV9jaGFuczogICAgMTYsCisgICAgICAgIGFpX2RpZmZfY2hhbnM6ICA4LAorICAgICAgICBhaV9iaXRzOiAgICAgICAgMTIsCisgICAgICAgIGRpX2NoYW5zOiAgICAgICA1LAorICAgICAgICBkb19jaGFuczogICAgICAgOAorICAgICAgICB9CisvLyBwb3RlbnRpYWxseSwgbW9yZSBhZHEtYmFzZWQgZGV2aWNlZCB3aWxsIGJlIGFkZGVkCisvKiwKKyAgICAgICAgbmFtZTogICAgICAgICAgICJhZHExMmIiLAorICAgICAgICBhaV9jaGFuczogICAgICAgMTYsICAvLyB0aGlzIGlzIGp1c3QgZm9yIHJlZmVyZW5jZSwgaGFyZGNvZGVkIGFnYWluIGxhdGVyCisgICAgICAgIGFpX2JpdHM6ICAgICAgICAxMiwKKyAgICAgICAgZGlfY2hhbnM6ICAgICAgIDgsCisgICAgICAgIGRvX2NoYW5zOiAgICAgICA1CisgICAgICAgIH0qLworfTsKKworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgYWRxMTJiX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBhZHExMmJfcHJpdmF0ZSB7CisgICAgICAgIGludCB1bmlwb2xhcjsgICAgICAgICAgLyogb3B0aW9uIDIgb2YgY29tZWRpX2NvbmZpZyAoMSBpcyBpb2Jhc2UpICovCisgICAgICAgIGludCBkaWZmZXJlbnRpYWw7ICAgICAgLyogb3B0aW9uIDMgb2YgY29tZWRpX2NvbmZpZyAqLworICAgICAgICBpbnQgbGFzdF9jaGFubmVsOworICAgICAgICBpbnQgbGFzdF9yYW5nZTsKKyAgICAgICAgdW5zaWduZWQgaW50IGRpZ2l0YWxfc3RhdGU7Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgYWRxMTJiX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IGFkcTEyYl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIGludCBhZHExMmJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9hZHExMmI9eworICAgICAgICBkcml2ZXJfbmFtZTogICAgImFkcTEyYiIsCisgICAgICAgIG1vZHVsZTogICAgICAgICBUSElTX01PRFVMRSwKKyAgICAgICAgYXR0YWNoOiAgICAgICAgIGFkcTEyYl9hdHRhY2gsCisgICAgICAgIGRldGFjaDogICAgICAgICBhZHExMmJfZGV0YWNoLAorICAgICAgICBib2FyZF9uYW1lOiAgICAgJmFkcTEyYl9ib2FyZHNbMF0ubmFtZSwKKyAgICAgICAgb2Zmc2V0OiAgICAgICAgIHNpemVvZihzdHJ1Y3QgYWRxMTJiX2JvYXJkKSwKKyAgICAgICAgbnVtX25hbWVzOiAgICAgIHNpemVvZihhZHExMmJfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgYWRxMTJiX2JvYXJkKSwKK307CisKK3N0YXRpYyBpbnQgYWRxMTJiX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGFkcTEyYl9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IGFkcTEyYl9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSk7CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBhZHExMmJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQoreworICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisgICAgICAgIGludCB1bmlwb2xhciwgZGlmZmVyZW50aWFsOworCisgICAgICAgIGlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworICAgICAgICB1bmlwb2xhciA9IGl0LT5vcHRpb25zWzFdOworICAgICAgICBkaWZmZXJlbnRpYWwgPSBpdC0+b3B0aW9uc1syXTsKKworICAgICAgICBwcmludGsoImNvbWVkaSVkOiBhZHExMmIgY2FsbGVkIHdpdGggb3B0aW9ucyBiYXNlPTB4JTAzbHgsICVzIGFuZCAlc1xuIixkZXYtPm1pbm9yLCBpb2Jhc2UsICh1bmlwb2xhcj09MSk/InVuaXBvbGFyIjoiYmlwb2xhciIsIChkaWZmZXJlbnRpYWw9PTEpPyJkaWZmZXJlbnRpYWwiOiJzaW5nbGUtZW5kZWQiKTsKKworICAgICAgICAvKiBpZiBubyBhZGRyZXNzIHdhcyBzcGVjaWZpZWQsIHRyeSB0aGUgZGVmYXVsdCAweDMwMCAqLworICAgICAgICBpZiAoaW9iYXNlID09IDApIHsKKyAgICAgICAgICBwcmludGsoImNvbWVkaSVkOiBhZHExMmIgd2FybmluZzogSS9PIGJhc2UgYWRkcmVzcyBub3Qgc3BlY2lmaWVkLiBUcnlpbmcgdGhlIGRlZmF1bHQgMHgzMDAuXG4iLCBkZXYtPm1pbm9yKTsKKyAgICAgICAgICBpb2Jhc2UgPSAweDMwMDsKKyAgICAgICAgfQorCisgICAgICAgIHByaW50aygiY29tZWRpJWQ6IGFkcTEyYjogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworICAgICAgICBpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgQURRMTJCX1NJWkUsICJhZHExMmIiKSkgeworICAgICAgICAgIHByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworICAgICAgICAgIHJldHVybiAtRUlPOworICAgICAgICB9CisgICAgICAgIGRldi0+aW9iYXNlID0gaW9iYXNlOworCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuICBOb3RlIHRoYXQgd2UgY2FuIHVzZSB0aGUgInRoaXNib2FyZCIKKyAqIG1hY3JvIG5vdywgc2luY2Ugd2UganVzdCBpbml0aWFsaXplZCBpdCBpbiB0aGUgbGFzdCBsaW5lLgorICovCisgICAgICAgIGRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworICAgICAgICBpZihhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBhZHExMmJfcHJpdmF0ZSkpIDwgMCkKKyAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKworLyogZmlsbCBpbiBkZXZwcml2IHN0cnVjdHVyZSAqLworICAgICAgICBkZXZwcml2LT51bmlwb2xhciA9IHVuaXBvbGFyOworICAgICAgICBkZXZwcml2LT5kaWZmZXJlbnRpYWwgPSBkaWZmZXJlbnRpYWw7CisJZGV2cHJpdi0+ZGlnaXRhbF9zdGF0ZSA9IDA7CisvKiBpbml0aWFsaXplIGNoYW5uZWwgYW5kIHJhbmdlIHRvIC0xIHNvIHdlIG1ha2Ugc3VyZSB3ZSBhbHdheXMgd3JpdGUKKyAgIGF0IGxlYXN0IG9uY2UgdG8gdGhlIENUUkVHIGluIHRoZSBpbnN0cnVjdGlvbiAqLworICAgICAgICBkZXZwcml2LT5sYXN0X2NoYW5uZWwgPSAtMTsKKyAgICAgICAgZGV2cHJpdi0+bGFzdF9yYW5nZSA9IC0xOworCisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKyAgICAgICAgaWYoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDMpPDApCisgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworCisgICAgICAgIHMgPSBkZXYtPnN1YmRldmljZXMrMDsKKyAgICAgICAgLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworICAgICAgICBzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisgICAgICAgIGlmIChkaWZmZXJlbnRpYWwpIHsKKyAgICAgICAgICBzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEV8U0RGX0dST1VORHxTREZfRElGRjsKKyAgICAgICAgICBzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFpX2RpZmZfY2hhbnM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFfFNERl9HUk9VTkQ7CisgICAgICAgICAgcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5haV9zZV9jaGFuczsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh1bmlwb2xhcikgeworICAgICAgICAgIHMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2FkcTEyYl9haV91bmlwb2xhcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hZHExMmJfYWlfYmlwb2xhcjsKKyAgICAgICAgfQorCisgICAgICAgIHMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpLTE7CisKKworICAgICAgICBzLT5sZW5fY2hhbmxpc3QgPSA0OyAgLyogVGhpcyBpcyB0aGUgbWF4aW11bSBjaGFubGlzdCBsZW5ndGggdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJvYXJkIGNhbiBoYW5kbGUgKi8KKyAgICAgICAgcy0+aW5zbl9yZWFkID0gYWRxMTJiX2FpX3JpbnNuOworCisKKyAgICAgICAgcyA9IGRldi0+c3ViZGV2aWNlcysxOworICAgICAgICAvKiBkaWdpdGFsIGlucHV0IHN1YmRldmljZSAqLworICAgICAgICBzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisgICAgICAgIHMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKyAgICAgICAgcy0+bl9jaGFuPXRoaXNib2FyZC0+ZGlfY2hhbnM7CisgICAgICAgIHMtPm1heGRhdGEgPSAxOworICAgICAgICBzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworICAgICAgICBzLT5pbnNuX2JpdHMgPSBhZHExMmJfZGlfaW5zbl9iaXRzOworCisgICAgICAgIHMgPSBkZXYtPnN1YmRldmljZXMrMjsKKyAgICAgICAgLyogZGlnaXRhbCBvdXRwdXQgc3ViZGV2aWNlICovCisgICAgICAgIHMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKyAgICAgICAgcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworICAgICAgICBzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmRvX2NoYW5zOworICAgICAgICBzLT5tYXhkYXRhID0gMTsKKyAgICAgICAgcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKyAgICAgICAgcy0+aW5zbl9iaXRzID0gYWRxMTJiX2RvX2luc25fYml0czsKKworCisgICAgICAgIHByaW50aygiYXR0YWNoZWRcbiIpOworCisgICAgICAgIHJldHVybiAwOworfQorCisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgYWRxMTJiX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQoreworICAgICAgICBpZiAoZGV2LT5pb2Jhc2UpCisgICAgICAgICAgcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIEFEUTEyQl9TSVpFKTsKKworICAgICAgICBrZnJlZShkZXZwcml2KTsKKworICAgICAgICBwcmludGsoImNvbWVkaSVkOiBhZHExMmI6IHJlbW92ZWRcbiIsZGV2LT5taW5vcik7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiAiaW5zdHJ1Y3Rpb25zIiByZWFkL3dyaXRlIGRhdGEgaW4gIm9uZS1zaG90IiBvciAic29mdHdhcmUtdHJpZ2dlcmVkIgorICogbW9kZS4KKyAqLworCitzdGF0aWMgaW50IGFkcTEyYl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisgICAgICAgIGludCBuLCBpOworICAgICAgICBpbnQgcmFuZ2UsIGNoYW5uZWw7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgaGksIGxvLCBzdGF0dXM7CisKKyAgICAgICAgLyogY2hhbmdlIGNoYW5uZWwgYW5kIHJhbmdlIG9ubHkgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzICovCisgICAgICAgIHJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworICAgICAgICBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisgICAgICAgIGlmIChjaGFubmVsICE9IGRldnByaXYtPmxhc3RfY2hhbm5lbCB8fCByYW5nZSAhPSBkZXZwcml2LT5sYXN0X3JhbmdlKSB7CisgICAgICAgICAgb3V0YigocmFuZ2UgPDwgNCkgfCBjaGFubmVsLCBkZXYtPmlvYmFzZSArIEFEUTEyQl9DVFJFRyk7CisgICAgICAgICAgY29tZWRpX3VkZWxheSg1MCk7ICAgLyogd2FpdCBmb3IgdGhlIG11eCB0byBzZXR0bGUgKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworICAgICAgICBzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBBRFExMkJfQURMT1cpOworCisgICAgICAgIC8qIGNvbnZlcnQgbiBzYW1wbGVzICovCisgICAgICAgIGZvcihuPTA7IG4gPCBpbnNuLT5uOyBuKyspeworCisgICAgICAgICAgLyogd2FpdCBmb3IgZW5kIG9mIGNvbnZlcnRpb24gKi8KKwkgIGkgPSAwOworICAgICAgICAgIGRvIHsKKy8vICAgICAgICAgICAgY29tZWRpX3VkZWxheSgxKTsKKwkgICAgc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgQURRMTJCX1NUSU5SKTsKKyAgICAgICAgICAgIHN0YXR1cyA9IHN0YXR1cyAmIEFEUTEyQl9FT0M7CisgICAgICAgICAgfSB3aGlsZSAoc3RhdHVzID09IDAgJiYgKytpIDwgVElNRU9VVCk7CisvLyAgICAgICAgICB9IHdoaWxlICgrK2kgPCAxMCk7CisKKyAgICAgICAgICAvKiByZWFkIGRhdGEgKi8KKyAgICAgICAgICBoaSA9IGluYihkZXYtPmlvYmFzZSArIEFEUTEyQl9BREhJRyk7CisgICAgICAgICAgbG8gPSBpbmIoZGV2LT5pb2Jhc2UgKyBBRFExMkJfQURMT1cpOworCisgICAgICAgICAgLy9ydF9wcmludGsoImRlYnVnOiBjaGFuPSVkIHJhbmdlPSVkIHN0YXR1cz0lZCBoaT0lZCBsbz0lZFxuIiwgY2hhbm5lbCwgcmFuZ2UsIHN0YXR1cywgIGhpLCBsbyk7CisgICAgICAgICAgZGF0YVtuXSA9IChoaSA8PCA4KSB8IGxvOworCisgICAgICAgIH0KKworICAgICAgICAvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworICAgICAgICByZXR1cm4gbjsKK30KKworCitzdGF0aWMgaW50IGFkcTEyYl9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCit7CisKKyAgICAgICAgLyogb25seSBiaXRzIDAtNCBoYXZlIGluZm9ybWF0aW9uIGFib3V0IGRpZ2l0YWwgaW5wdXRzICovCisgICAgICAgIGRhdGFbMV0gPSAoaW5iKGRldi0+aW9iYXNlK0FEUTEyQl9TVElOUikgJiAoMHgxZikpOworCisgICAgICAgIHJldHVybiAyOworfQorCisKK3N0YXRpYyBpbnQgYWRxMTJiX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCAJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkKK3sKKyAgICAgICAgaW50IGNoYW5uZWw7CisKKwlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgODsgY2hhbm5lbCsrKQorCSAgaWYgKCgoZGF0YVswXT4+Y2hhbm5lbCkgJiAweDAxKSAhPSAwKQorICAgICAgICAgICAgb3V0YigoKChkYXRhWzFdPj5jaGFubmVsKSYweDAxKTw8MykgfCBjaGFubmVsLCBkZXYtPmlvYmFzZSArIEFEUTEyQl9PVVRCUik7CisKKyAgICAgICAgLyogc3RvcmUgaW5mb3JtYXRpb24gdG8gcmV0cmlldmUgd2hlbiBhc2tlZCBmb3IgcmVhZGluZyAqLworICAgICAgICBpZiAoZGF0YVswXSkgeworICAgICAgICAgIGRldnByaXYtPmRpZ2l0YWxfc3RhdGUgJj0gfmRhdGFbMF07CisgICAgICAgICAgZGV2cHJpdi0+ZGlnaXRhbF9zdGF0ZSB8PSAoZGF0YVswXSZkYXRhWzFdKTsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFbMV0gPSBkZXZwcml2LT5kaWdpdGFsX3N0YXRlOworCisgICAgICAgIHJldHVybiAyOworfQorCisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYWRxMTJiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllYWM3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jCkBAIC0wLDAgKzEsMTU2OCBAQAorLyoKKyAqIGNvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzEwLmMKKyAqCisgKiBBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorICoKKyAqIFRoYW5rcyB0byBaaGVuR2FuZyBTaGFuZyA8WmhlbkdhbmcuU2hhbmdAQWR2YW50ZWNoLmNvbS5jbj4KKyAqIGZvciB0ZXN0aW5nIGFuZCBpbmZvcm1hdGlvbnMuCisgKgorICogIGhhcmR3YXJlIGRyaXZlciBmb3IgQWR2YW50ZWNoIGNhcmRzOgorICogICBjYXJkOiAgIFBDSS0xNzEwLCBQQ0ktMTcxMEhHLCBQQ0ktMTcxMSwgUENJLTE3MTMsIFBDSS0xNzIwLCBQQ0ktMTczMQorICogICBkcml2ZXI6IHBjaTE3MTAsICBwY2kxNzEwaGcsICBwY2kxNzExLCAgcGNpMTcxMywgIHBjaTE3MjAsICBwY2kxNzMxCisgKgorICogT3B0aW9uczoKKyAqICBbMF0gLSBQQ0kgYnVzIG51bWJlciAtIGlmIGJ1cyBudW1iZXIgYW5kIHNsb3QgbnVtYmVyIGFyZSAwLAorICogICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkcml2ZXIgc2VhcmNoIGZvciBmaXJzdCB1bnVzZWQgY2FyZAorICogIFsxXSAtIFBDSSBzbG90IG51bWJlcgorICoKKyovCisvKgorRHJpdmVyOiBhZHZfcGNpMTcxMAorRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0ktMTcxMCwgUENJLTE3MTBIRywgUENJLTE3MTEsIFBDSS0xNzEzLAorICAgICAgICAgICAgIEFkdmFudGVjaCBQQ0ktMTcyMCwgUENJLTE3MzEKK0F1dGhvcjogTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0ktMTcxMCAoYWR2X3BjaTE3MTApLCBQQ0ktMTcxMEhHIChwY2kxNzEwaGcpLAorICBQQ0ktMTcxMSAoYWR2X3BjaTE3MTApLCBQQ0ktMTcxMywgUENJLTE3MjAsCisgIFBDSS0xNzMxCitTdGF0dXM6IHdvcmtzCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIEFJLCBBTywgREkgYW5kIERPIHN1YmRldmljZXMuCitBSSBzdWJkZXZpY2Ugc3VwcG9ydHMgY21kIGFuZCBpbnNuIGludGVyZmFjZSwKK290aGVyIHN1YmRldmljZXMgc3VwcG9ydCBvbmx5IGluc24gaW50ZXJmYWNlLgorCitUaGUgUENJLTE3MTAgYW5kIFBDSS0xNzEwSEcgaGF2ZSB0aGUgc2FtZSBQQ0kgZGV2aWNlIElELCBzbyB0aGUKK2RyaXZlciBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVtLCBhcyB3b3VsZCBiZSBub3JtYWwgZm9yIGEKK1BDSSBkcml2ZXIuCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICAgICAgICAgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJCisgICAgICAgICAgZGV2aWNlIHdpbGwgYmUgdXNlZC4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICJhbWNjX3M1OTMzLmgiCisKKyNkZWZpbmUgUENJMTcxeF9QQVJBTk9JRENIRUNLCS8qIGlmIGRlZmluZWQsIHRoZW4gaXMgdXNlZCBjb2RlIHdoaWNoIGNvbnRyb2wgY29ycmVjdCBjaGFubmVsIG51bWJlciBvbiBldmVyeSAxMiBiaXQgc2FtcGxlICovCisKKyN1bmRlZiBQQ0kxNzFYX0VYVERFQlVHCisKKyNkZWZpbmUgRFJWX05BTUUgImFkdl9wY2kxNzEwIgorCisjdW5kZWYgRFBSSU5USworI2lmZGVmIFBDSTE3MVhfRVhUREVCVUcKKyNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pIHJ0X3ByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikKKyNlbmRpZgorCisvLyBoYXJkd2FyZSB0eXBlcyBvZiB0aGUgY2FyZHMKKyNkZWZpbmUgVFlQRV9QQ0kxNzFYCTAKKyNkZWZpbmUgVFlQRV9QQ0kxNzEzCTIKKyNkZWZpbmUgVFlQRV9QQ0kxNzIwCTMKKworI2RlZmluZSBJT1JBTkdFXzE3MXggCTMyCisjZGVmaW5lIElPUkFOR0VfMTcyMCAJMTYKKworI2RlZmluZSBQQ0kxNzF4X0FEX0RBVEEJIDAJLyogUjogICBBL0QgZGF0YSAqLworI2RlZmluZSBQQ0kxNzF4X1NPRlRUUkcJIDAJLyogVzogICBzb2Z0IHRyaWdnZXIgZm9yIEEvRCAqLworI2RlZmluZSBQQ0kxNzF4X1JBTkdFCSAyCS8qIFc6ICAgQS9EIGdhaW4vcmFuZ2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTcxeF9NVVgJIDQJLyogVzogICBBL0QgbXVsdGlwbGV4b3IgY29udHJvbCAqLworI2RlZmluZSBQQ0kxNzF4X1NUQVRVUwkgNgkvKiBSOiAgIHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBQQ0kxNzF4X0NPTlRST0wJIDYJLyogVzogICBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTE3MXhfQ0xSSU5UCSA4CS8qIFc6ICAgY2xlYXIgaW50ZXJydXB0cyByZXF1ZXN0ICovCisjZGVmaW5lIFBDSTE3MXhfQ0xSRklGTwkgOQkvKiBXOiAgIGNsZWFyIEZJRk8gKi8KKyNkZWZpbmUgUENJMTcxeF9EQTEJMTAJLyogVzogICBEL0EgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTcxeF9EQTIJMTIJLyogVzogICBEL0EgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTcxeF9EQVJFRgkxNAkvKiBXOiAgIEQvQSByZWZlcmVuY2UgY29udHJvbCAqLworI2RlZmluZSBQQ0kxNzF4X0RJCTE2CS8qIFI6ICAgZGlnaSBpbnB1dHMgKi8KKyNkZWZpbmUgUENJMTcxeF9ETwkxNgkvKiBSOiAgIGRpZ2kgaW5wdXRzICovCisjZGVmaW5lIFBDSTE3MXhfQ05UMAkyNAkvKiBSL1c6IDgyNTQgY291dGVyIDAgKi8KKyNkZWZpbmUgUENJMTcxeF9DTlQxCTI2CS8qIFIvVzogODI1NCBjb3V0ZXIgMSAqLworI2RlZmluZSBQQ0kxNzF4X0NOVDIJMjgJLyogUi9XOiA4MjU0IGNvdXRlciAyICovCisjZGVmaW5lIFBDSTE3MXhfQ05UQ1RSTAkzMAkvKiBXOiAgIDgyNTQgY291bnRlciBjb250cm9sICovCisKKy8vIHVwcGVyIGJpdHMgZnJvbSBzdGF0dXMgcmVnaXN0ZXIgKFBDSTE3MXhfU1RBVFVTKSAobG93ZXIgaXMgc2FtZSB3b3RoIGNvbnRyb2wgcmVnKQorI2RlZmluZQlTdGF0dXNfRkUJMHgwMTAwCS8qIDE9RklGTyBpcyBlbXB0eSAqLworI2RlZmluZSBTdGF0dXNfRkgJMHgwMjAwCS8qIDE9RklGTyBpcyBoYWxmIGZ1bGwgKi8KKyNkZWZpbmUgU3RhdHVzX0ZGCTB4MDQwMAkvKiAxPUZJRk8gaXMgZnVsbCwgZmF0YWwgZXJyb3IgKi8KKyNkZWZpbmUgU3RhdHVzX0lSUQkweDA4MDAJLyogMT1JUlEgb2NjdXJlZCAqLworLy8gYml0cyBmcm9tIGNvbnRyb2wgcmVnaXN0ZXIgKFBDSTE3MXhfQ09OVFJPTCkKKyNkZWZpbmUgQ29udHJvbF9DTlQwCTB4MDA0MAkvKiAxPUNOVDAgaGF2ZSBleHRlcm5hbCBzb3VyY2UsIDA9aGF2ZSBpbnRlcm5hbCAxMDBrSHogc291cmNlICovCisjZGVmaW5lIENvbnRyb2xfT05FRkgJMHgwMDIwCS8qIDE9SVJRIG9uIEZJRk8gaXMgaGFsZiBmdWxsLCAwPWV2ZXJ5IHNhbXBsZSAqLworI2RlZmluZSBDb250cm9sX0lSUUVOCTB4MDAxMAkvKiAxPWVuYWJsZSBJUlEgKi8KKyNkZWZpbmUgQ29udHJvbF9HQVRFCTB4MDAwOAkvKiAxPWVuYWJsZSBleHRlcm5hbCB0cmlnZ2VyIEdBVEUgKDgyNTQ/KSAqLworI2RlZmluZSBDb250cm9sX0VYVAkweDAwMDQJLyogMT1leHRlcm5hbCB0cmlnZ2VyIHNvdXJjZSAqLworI2RlZmluZSBDb250cm9sX1BBQ0VSCTB4MDAwMgkvKiAxPWVuYWJsZSBpbnRlcm5hbCA4MjU0IHRyaWdnZXIgc291cmNlICovCisjZGVmaW5lIENvbnRyb2xfU1cJMHgwMDAxCS8qIDE9ZW5hYmxlIHNvZnR3YXJlIHRyaWdnZXIgc291cmNlICovCisvLyBiaXRzIGZyb20gY291bnRlciBjb250cm9sIHJlZ2lzdGVyIChQQ0kxNzF4X0NOVENUUkwpCisjZGVmaW5lIENvdW50ZXJfQkNEICAgICAweDAwMDEJLyogMCA9IGJpbmFyeSBjb3VudGVyLCAxID0gQkNEIGNvdW50ZXIgKi8KKyNkZWZpbmUgQ291bnRlcl9NMCAgICAgIDB4MDAwMgkvKiBNMC1NMiBzZWxlY3QgbW9kZXMgMC01ICovCisjZGVmaW5lIENvdW50ZXJfTTEgICAgICAweDAwMDQJLyogMDAwID0gbW9kZSAwLCAwMTAgPSBtb2RlIDIgLi4uICovCisjZGVmaW5lIENvdW50ZXJfTTIgICAgICAweDAwMDgKKyNkZWZpbmUgQ291bnRlcl9SVzAgICAgIDB4MDAxMAkvKiBSVzAvUlcxIHNlbGVjdCByZWFkL3dyaXRlIG1vZGUgKi8KKyNkZWZpbmUgQ291bnRlcl9SVzEgICAgIDB4MDAyMAorI2RlZmluZSBDb3VudGVyX1NDMCAgICAgMHgwMDQwCS8qIFNlbGVjdCBDb3VudGVyLiBPbmx5IDAwIG9yIDExIG1heSAqLworI2RlZmluZSBDb3VudGVyX1NDMSAgICAgMHgwMDgwCS8qIGJlIHVzZWQsIDAwIGZvciBDTlQwLCAxMSBmb3IgcmVhZC1iYWNrIGNvbW1hbmQgKi8KKworI2RlZmluZSBQQ0kxNzIwX0RBMAkgMAkvKiBXOiAgIEQvQSByZWdpc3RlciAwICovCisjZGVmaW5lIFBDSTE3MjBfREExCSAyCS8qIFc6ICAgRC9BIHJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgUENJMTcyMF9EQTIJIDQJLyogVzogICBEL0EgcmVnaXN0ZXIgMiAqLworI2RlZmluZSBQQ0kxNzIwX0RBMwkgNgkvKiBXOiAgIEQvQSByZWdpc3RlciAzICovCisjZGVmaW5lIFBDSTE3MjBfUkFOR0UJIDgJLyogUi9XOiBEL0EgcmFuZ2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTcyMF9TWU5DT1VUCSA5CS8qIFc6ICAgRC9BIHN5bmNocm9uaXplZCBvdXRwdXQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTcyMF9TWU5DT05UCTE1CS8qIFIvVzogRC9BIHN5bmNocm9uaXplZCBjb250cm9sICovCisKKy8vIEQvQSBzeW5jaHJvbml6ZWQgY29udHJvbCAoUENJMTcyMF9TWU5DT05UKQorI2RlZmluZSBTeW5jb250X1NDMAkgMQkvKiBzZXQgc3luY2hyb25vdXMgb3V0cHV0IG1vZGUgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3MTBfMyA9IHsgOSwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KQorCX0KK307CisKK3N0YXRpYyBjb25zdCBjaGFyIHJhbmdlX2NvZGVzX3BjaTE3MTBfM1tdID0KKwl7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3MTBoZyA9IHsgMTIsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJQklQX1JBTkdFKDAuMDA1KSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjAxKSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgwLjAxKQorCX0KK307CisKK3N0YXRpYyBjb25zdCBjaGFyIHJhbmdlX2NvZGVzX3BjaTE3MTBoZ1tdID0KKwl7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MTAsIDB4MTEsIDB4MTIsCisJCTB4MTMgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3eDEgPSB7IDUsIHsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSkKKwl9Cit9OworCitzdGF0aWMgY29uc3QgY2hhciByYW5nZV9jb2Rlc19wY2kxN3gxW10gPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3MjAgPSB7IDQsIHsKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMTApCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTE3MXhfZGEgPSB7IDIsIHsKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJfQorfTsKKworc3RhdGljIGludCBwY2kxNzEwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjaTE3MTBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RydWN0IGJvYXJkdHlwZSB7CisJY29uc3QgY2hhciAqbmFtZTsJLy8gYm9hcmQgbmFtZQorCWludCBkZXZpY2VfaWQ7CisJaW50IGlvcmFuZ2U7CQkvLyBJL08gcmFuZ2UgbGVuCisJY2hhciBoYXZlX2lycTsJCS8vIDE9Y2FyZCBzdXBwb3J0IElSUQorCWNoYXIgY2FyZHR5cGU7CQkvLyAwPTE3MTAmIGNvLiAyPTE3MTMsIC4uLgorCWludCBuX2FpY2hhbjsJCS8vIG51bSBvZiBBL0QgY2hhbnMKKwlpbnQgbl9haWNoYW5kOwkJLy8gbnVtIG9mIEEvRCBjaGFucyBpbiBkaWZmIG1vZGUKKwlpbnQgbl9hb2NoYW47CQkvLyBudW0gb2YgRC9BIGNoYW5zCisJaW50IG5fZGljaGFuOwkJLy8gbnVtIG9mIERJIGNoYW5zCisJaW50IG5fZG9jaGFuOwkJLy8gbnVtIG9mIERPIGNoYW5zCisJaW50IG5fY291bnRlcjsJCS8vIG51bSBvZiBjb3VudGVycworCWludCBhaV9tYXhkYXRhOwkJLy8gcmVzb2x1dGlvbiBvZiBBL0QKKwlpbnQgYW9fbWF4ZGF0YTsJCS8vIHJlc29sdXRpb24gb2YgRC9BCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlbGlzdF9haTsJLy8gcmFuZ2VsaXN0IGZvciBBL0QKKwljb25zdCBjaGFyICpyYW5nZWNvZGVfYWk7CS8vIHJhbmdlIGNvZGVzIGZvciBwcm9ncmFtbWluZworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZWxpc3RfYW87CS8vIHJhbmdlbGlzdCBmb3IgRC9BCisJdW5zaWduZWQgaW50IGFpX25zX21pbjsJLy8gbWF4IHNhbXBsZSBzcGVlZCBvZiBjYXJkIHYgbnMKKwl1bnNpZ25lZCBpbnQgZmlmb19oYWxmX3NpemU7CS8vIHNpemUgb2YgRklGTy8yCit9OworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpMTcxMF9wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTcxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpMTcxMF9wY2lfdGFibGUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJvYXJkdHlwZSBib2FyZHR5cGVzW10gPSB7CisJeyJwY2kxNzEwIiwgMHgxNzEwLAorCQlJT1JBTkdFXzE3MXgsIDEsIFRZUEVfUENJMTcxWCwKKwkJMTYsIDgsIDIsIDE2LCAxNiwgMSwgMHgwZmZmLCAweDBmZmYsCisJCSZyYW5nZV9wY2kxNzEwXzMsIHJhbmdlX2NvZGVzX3BjaTE3MTBfMywKKwkJJnJhbmdlX3BjaTE3MXhfZGEsCisJCTEwMDAwLCAyMDQ4fSwKKwl7InBjaTE3MTBoZyIsIDB4MTcxMCwKKwkJSU9SQU5HRV8xNzF4LCAxLCBUWVBFX1BDSTE3MVgsCisJCTE2LCA4LCAyLCAxNiwgMTYsIDEsIDB4MGZmZiwgMHgwZmZmLAorCQkmcmFuZ2VfcGNpMTcxMGhnLCByYW5nZV9jb2Rlc19wY2kxNzEwaGcsCisJCSZyYW5nZV9wY2kxNzF4X2RhLAorCQkxMDAwMCwgMjA0OH0sCisJeyJwY2kxNzExIiwgMHgxNzExLAorCQlJT1JBTkdFXzE3MXgsIDEsIFRZUEVfUENJMTcxWCwKKwkJMTYsIDAsIDIsIDE2LCAxNiwgMSwgMHgwZmZmLCAweDBmZmYsCisJCSZyYW5nZV9wY2kxN3gxLCByYW5nZV9jb2Rlc19wY2kxN3gxLCAmcmFuZ2VfcGNpMTcxeF9kYSwKKwkJMTAwMDAsIDUxMn0sCisJeyJwY2kxNzEzIiwgMHgxNzEzLAorCQlJT1JBTkdFXzE3MXgsIDEsIFRZUEVfUENJMTcxMywKKwkJMzIsIDE2LCAwLCAwLCAwLCAwLCAweDBmZmYsIDB4MDAwMCwKKwkJJnJhbmdlX3BjaTE3MTBfMywgcmFuZ2VfY29kZXNfcGNpMTcxMF8zLCBOVUxMLAorCQkxMDAwMCwgMjA0OH0sCisJeyJwY2kxNzIwIiwgMHgxNzIwLAorCQlJT1JBTkdFXzE3MjAsIDAsIFRZUEVfUENJMTcyMCwKKwkJMCwgMCwgNCwgMCwgMCwgMCwgMHgwMDAwLCAweDBmZmYsCisJCU5VTEwsIE5VTEwsICZyYW5nZV9wY2kxNzIwLAorCQkwLCAwfSwKKwl7InBjaTE3MzEiLCAweDE3MzEsCisJCUlPUkFOR0VfMTcxeCwgMSwgVFlQRV9QQ0kxNzFYLAorCQkxNiwgMCwgMCwgMTYsIDE2LCAwLCAweDBmZmYsIDB4MDAwMCwKKwkJJnJhbmdlX3BjaTE3eDEsIHJhbmdlX2NvZGVzX3BjaTE3eDEsIE5VTEwsCisJCTEwMDAwLCA1MTJ9LAorCS8vIGR1bW15IGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gZHJpdmVyIG5hbWUKKwl7Lm5hbWUgPSBEUlZfTkFNRX0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgYm9hcmR0eXBlKSkKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2kxNzEwID0geworCS5kcml2ZXJfbmFtZSA9IERSVl9OQU1FLAorCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkuYXR0YWNoID0gcGNpMTcxMF9hdHRhY2gsCisJLmRldGFjaCA9IHBjaTE3MTBfZGV0YWNoLAorCS5udW1fbmFtZXMgPSBuX2JvYXJkdHlwZXMsCisJLmJvYXJkX25hbWUgPSAmYm9hcmR0eXBlc1swXS5uYW1lLAorCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGJvYXJkdHlwZSksCit9OworCitzdHJ1Y3QgcGNpMTcxMF9wcml2YXRlIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OwkvLyBwdHIgdG8gUENJIGRldmljZQorCWNoYXIgdmFsaWQ7CQkvLyBjYXJkIGlzIHVzYWJsZQorCWNoYXIgbmV2ZXJlbmRpbmdfYWk7CS8vIHdlIGRvIHVubGltaXRlZCBBSQorCXVuc2lnbmVkIGludCBDbnRybFJlZzsJLy8gQ29udHJvbCByZWdpc3RlcgorCXVuc2lnbmVkIGludCBpODI1NF9vc2NfYmFzZTsJLy8gZnJlcXVlbmNlIG9mIG9uYm9hcmQgb3NjaWxhdG9yCisJdW5zaWduZWQgaW50IGFpX2RvOwkvLyB3aGF0IGRvIEFJPyAwPW5vdGhpbmcsIDEgdG8gNCBtb2RlCisJdW5zaWduZWQgaW50IGFpX2FjdF9zY2FuOwkvLyBob3cgbWFueSBzY2FucyB3ZSBmaW5pc2hlZAorCXVuc2lnbmVkIGludCBhaV9hY3RfY2hhbjsJLy8gYWN0dWFsIHBvc2l0aW9uIGluIGFjdHVhbCBzY2FuCisJdW5zaWduZWQgaW50IGFpX2J1Zl9wdHI7CS8vIGRhdGEgYnVmZmVyIHB0ciBpbiBzYW1wbGVzCisJdW5zaWduZWQgY2hhciBhaV9lb3M7CS8vIDE9RU9TIHdha2UgdXAKKwl1bnNpZ25lZCBjaGFyIGFpX2V0OworCXVuc2lnbmVkIGludCBhaV9ldF9DbnRybFJlZzsKKwl1bnNpZ25lZCBpbnQgYWlfZXRfTXV4VmFsOworCXVuc2lnbmVkIGludCBhaV9ldF9kaXYxLCBhaV9ldF9kaXYyOworCXVuc2lnbmVkIGludCBhY3RfY2hhbmxpc3RbMzJdOwkvLyBsaXN0IG9mIHNjYW5lZCBjaGFubmVsCisJdW5zaWduZWQgY2hhciBhY3RfY2hhbmxpc3RfbGVuOwkvLyBsZW4gb2Ygc2Nhbmxpc3QKKwl1bnNpZ25lZCBjaGFyIGFjdF9jaGFubGlzdF9wb3M7CS8vIGFjdHVhbCBwb3NpdGlvbiBpbiBNVVggbGlzdAorCXVuc2lnbmVkIGNoYXIgZGFfcmFuZ2VzOwkvLyBjb3B5IG9mIEQvQSBvdXRwaXQgcmFuZ2UgcmVnaXN0ZXIKKwl1bnNpZ25lZCBpbnQgYWlfc2NhbnM7CS8vIGxlbiBvZiBzY2FubGlzdAorCXVuc2lnbmVkIGludCBhaV9uX2NoYW47CS8vIGhvdyBtYW55IGNoYW5uZWxzIGlzIG1lYXN1cmVkCisJdW5zaWduZWQgaW50ICphaV9jaGFubGlzdDsJLy8gYWN0YXVsIGNoYW5saXN0CisJdW5zaWduZWQgaW50IGFpX2ZsYWdzOwkvLyBmbGFnbGlzdAorCXVuc2lnbmVkIGludCBhaV9kYXRhX2xlbjsJLy8gbGVuIG9mIGRhdGEgYnVmZmVyCisJc2hvcnQgKmFpX2RhdGE7CS8vIGRhdGEgYnVmZmVyCisJdW5zaWduZWQgaW50IGFpX3RpbWVyMTsJLy8gdGltZXJzCisJdW5zaWduZWQgaW50IGFpX3RpbWVyMjsKKwlzaG9ydCBhb19kYXRhWzRdOwkvLyBkYXRhIG91dHB1dCBidWZmZXIKKwl1bnNpZ25lZCBpbnQgY250MF93cml0ZV93YWl0OwkvLyBhZnRlciBhIHdyaXRlLCB3YWl0IGZvciB1cGRhdGUgb2YgdGhlIGludGVybmFsIHN0YXRlCit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpMTcxMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IGJvYXJkdHlwZSAqKWRldi0+Ym9hcmRfcHRyKQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pOworc3RhdGljIHZvaWQgc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50ICpjaGFubGlzdCwgdW5zaWduZWQgaW50IG5fY2hhbiwgdW5zaWduZWQgaW50IHNlZ2xlbik7CitzdGF0aWMgdm9pZCBzdGFydF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkaXZpc29yMSwKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjIpOworc3RhdGljIGludCBwY2kxNzEwX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgcGNpMTcxeF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbXV4b25lY2hhbltdID0geyAweDAwMDAsIDB4MDEwMSwgMHgwMjAyLCAweDAzMDMsIDB4MDQwNCwgMHgwNTA1LCAweDA2MDYsIDB4MDcwNywJLy8gdXNlZCBmb3IgZ2FpbiBsaXN0IHByb2dyYW1taW5nCisJMHgwODA4LCAweDA5MDksIDB4MGEwYSwgMHgwYjBiLCAweDBjMGMsIDB4MGQwZCwgMHgwZTBlLCAweDBmMGYsCisJMHgxMDEwLCAweDExMTEsIDB4MTIxMiwgMHgxMzEzLCAweDE0MTQsIDB4MTUxNSwgMHgxNjE2LCAweDE3MTcsCisJMHgxODE4LCAweDE5MTksIDB4MWExYSwgMHgxYjFiLCAweDFjMWMsIDB4MWQxZCwgMHgxZTFlLCAweDFmMWYKK307CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfaW5zbl9yZWFkX2FpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgdGltZW91dDsKKyNpZmRlZiBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sKKwl1bnNpZ25lZCBpbnQgaWRhdGE7CisjZW5kaWYKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9pbnNuX3JlYWRfYWkoLi4uKVxuIik7CisJZGV2cHJpdi0+Q250cmxSZWcgJj0gQ29udHJvbF9DTlQwOworCWRldnByaXYtPkNudHJsUmVnIHw9IENvbnRyb2xfU1c7CS8vIHNldCBzb2Z0d2FyZSB0cmlnZ2VyCisJb3V0dyhkZXZwcml2LT5DbnRybFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NPTlRST0wpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CisKKwlzZXR1cF9jaGFubmVsX2xpc3QoZGV2LCBzLCAmaW5zbi0+Y2hhbnNwZWMsIDEsIDEpOworCisJRFBSSU5USygiYWR2X3BjaTE3MTAgQSBTVD0lNHggSU89JXhcbiIsCisJCWludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfU1RBVFVTKSwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NUQVRVUyk7CisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9TT0ZUVFJHKTsJLyogc3RhcnQgY29udmVyc2lvbiAqLworCQlEUFJJTlRLKCJhZHZfcGNpMTcxMCBCIG49JWQgU1Q9JTR4XG4iLCBuLAorCQkJaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpKTsKKwkJLy9jb21lZGlfdWRlbGF5KDEpOworCQlEUFJJTlRLKCJhZHZfcGNpMTcxMCBDIG49JWQgU1Q9JTR4XG4iLCBuLAorCQkJaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpKTsKKwkJdGltZW91dCA9IDEwMDsKKwkJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkJaWYgKCEoaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpICYgU3RhdHVzX0ZFKSkKKwkJCQlnb3RvIGNvbnZfZmluaXNoOworCQkJaWYgKCEodGltZW91dCAlIDEwKSkKKwkJCQlEUFJJTlRLKCJhZHZfcGNpMTcxMCBEIG49JWQgdG09JWQgU1Q9JTR4XG4iLCBuLAorCQkJCQl0aW1lb3V0LAorCQkJCQlpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NUQVRVUykpOworCQl9CisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgaW5zbiB0aW1lb3V0Iik7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOworCQlkYXRhW25dID0gMDsKKwkJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogRU5EOiBwY2kxNzF4X2luc25fcmVhZF9haSguLi4pIG49JWRcbiIsIG4pOworCQlyZXR1cm4gLUVUSU1FOworCisJICAgICAgY29udl9maW5pc2g6CisjaWZkZWYgUENJMTcxeF9QQVJBTk9JRENIRUNLCisJCWlkYXRhID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9BRF9EQVRBKTsKKwkJaWYgKHRoaXNfYm9hcmQtPmNhcmR0eXBlICE9IFRZUEVfUENJMTcxMykKKwkJCWlmICgoaWRhdGEgJiAweGYwMDApICE9IGRldnByaXYtPmFjdF9jaGFubGlzdFswXSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgaW5zbiBkYXRhIGRyb3B1dCEiKTsKKwkJCQlyZXR1cm4gLUVUSU1FOworCQkJfQorCQlkYXRhW25dID0gaWRhdGEgJiAweDBmZmY7CisjZWxzZQorCQlkYXRhW25dID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9BRF9EQVRBKSAmIDB4MGZmZjsKKyNlbmRpZgorCisJfQorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSRklGTyk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogcGNpMTcxeF9pbnNuX3JlYWRfYWkoLi4uKSBuPSVkXG4iLCBuKTsKKwlyZXR1cm4gbjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxeF9pbnNuX3dyaXRlX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgY2hhbiwgcmFuZ2UsIG9mczsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlyYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKwlpZiAoY2hhbikgeworCQlkZXZwcml2LT5kYV9yYW5nZXMgJj0gMHhmYjsKKwkJZGV2cHJpdi0+ZGFfcmFuZ2VzIHw9IChyYW5nZSA8PCAyKTsKKwkJb3V0dyhkZXZwcml2LT5kYV9yYW5nZXMsIGRldi0+aW9iYXNlICsgUENJMTcxeF9EQVJFRik7CisJCW9mcyA9IFBDSTE3MXhfREEyOworCX0gZWxzZSB7CisJCWRldnByaXYtPmRhX3JhbmdlcyAmPSAweGZlOworCQlkZXZwcml2LT5kYV9yYW5nZXMgfD0gcmFuZ2U7CisJCW91dHcoZGV2cHJpdi0+ZGFfcmFuZ2VzLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfREFSRUYpOworCQlvZnMgPSBQQ0kxNzF4X0RBMTsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKQorCQlvdXR3KGRhdGFbbl0sIGRldi0+aW9iYXNlICsgb2ZzKTsKKworCWRldnByaXYtPmFvX2RhdGFbY2hhbl0gPSBkYXRhW25dOworCisJcmV0dXJuIG47CisKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxeF9pbnNuX3JlYWRfYW8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuLCBjaGFuOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspCisJCWRhdGFbbl0gPSBkZXZwcml2LT5hb19kYXRhW2NoYW5dOworCisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfaW5zbl9iaXRzX2RpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzFdID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9ESSk7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxeF9pbnNuX2JpdHNfZG8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQlvdXR3KHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfRE8pOworCX0KKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxeF9pbnNuX2NvdW50ZXJfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IG1zYiwgbHNiLCBjY250cmw7CisJaW50IGk7CisKKwljY250cmwgPSAweEQyOwkJLyogY291bnQgb25seSAqLworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJb3V0dyhjY250cmwsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlRDVFJMKTsKKworCQlsc2IgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVDApICYgMHhGRjsKKwkJbXNiID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQwKSAmIDB4RkY7CisKKwkJZGF0YVswXSA9IGxzYiB8IChtc2IgPDwgOCk7CisJfQorCisJcmV0dXJuIGluc24tPm47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfaW5zbl9jb3VudGVyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1aW50IG1zYiwgbHNiLCBjY250cmwsIHN0YXR1czsKKworCWxzYiA9IGRhdGFbMF0gJiAweDAwRkY7CisJbXNiID0gKGRhdGFbMF0gJiAweEZGMDApID4+IDg7CisKKwkvKiB3cml0ZSBsc2IsIHRoZW4gbXNiICovCisJb3V0dyhsc2IsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQwKTsKKwlvdXR3KG1zYiwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVDApOworCisJaWYgKGRldnByaXYtPmNudDBfd3JpdGVfd2FpdCkgeworCQkvKiB3YWl0IGZvciB0aGUgbmV3IGNvdW50IHRvIGJlIGxvYWRlZCAqLworCQljY250cmwgPSAweEUyOworCQlkbyB7CisJCQlvdXR3KGNjbnRybCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVENUUkwpOworCQkJc3RhdHVzID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQwKSAmIDB4RkY7CisJCX0gd2hpbGUgKHN0YXR1cyAmIDB4NDApOworCX0KKworCXJldHVybiBpbnNuLT5uOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X2luc25fY291bnRlcl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworI2lmZGVmIHVudXNlZAorCS8qIFRoaXMgZG9lc24ndCB3b3JrIGxpa2UgYSBub3JtYWwgQ29tZWRpIGNvdW50ZXIgY29uZmlnICovCisJdWludCBjY250cmwgPSAwOworCisJZGV2cHJpdi0+Y250MF93cml0ZV93YWl0ID0gZGF0YVswXSAmIDB4MjA7CisKKwkvKiBpbnRlcm5hbCBvciBleHRlcm5hbCBjbG9jaz8gKi8KKwlpZiAoIShkYXRhWzBdICYgMHgxMCkpIHsJLyogaW50ZXJuYWwgKi8KKwkJZGV2cHJpdi0+Q250cmxSZWcgJj0gfkNvbnRyb2xfQ05UMDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX0NOVDA7CisJfQorCW91dHcoZGV2cHJpdi0+Q250cmxSZWcsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DT05UUk9MKTsKKworCWlmIChkYXRhWzBdICYgMHgwMSkKKwkJY2NudHJsIHw9IENvdW50ZXJfTTA7CisJaWYgKGRhdGFbMF0gJiAweDAyKQorCQljY250cmwgfD0gQ291bnRlcl9NMTsKKwlpZiAoZGF0YVswXSAmIDB4MDQpCisJCWNjbnRybCB8PSBDb3VudGVyX00yOworCWlmIChkYXRhWzBdICYgMHgwOCkKKwkJY2NudHJsIHw9IENvdW50ZXJfQkNEOworCWNjbnRybCB8PSBDb3VudGVyX1JXMDsJLyogc2V0IHJlYWQvd3JpdGUgbW9kZSAqLworCWNjbnRybCB8PSBDb3VudGVyX1JXMTsKKwlvdXR3KGNjbnRybCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVENUUkwpOworI2VuZGlmCisKKwlyZXR1cm4gMTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcyMF9pbnNuX3dyaXRlX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgcmFuZ2VyZWcsIGNoYW47CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2VyZWcgPSBkZXZwcml2LT5kYV9yYW5nZXMgJiAofigweDAzIDw8IChjaGFuIDw8IDEpKSk7CisJcmFuZ2VyZWcgfD0gKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSA8PCAoY2hhbiA8PCAxKSk7CisJaWYgKHJhbmdlcmVnICE9IGRldnByaXYtPmRhX3JhbmdlcykgeworCQlvdXRiKHJhbmdlcmVnLCBkZXYtPmlvYmFzZSArIFBDSTE3MjBfUkFOR0UpOworCQlkZXZwcml2LT5kYV9yYW5nZXMgPSByYW5nZXJlZzsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCW91dHcoZGF0YVtuXSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIwX0RBMCArIChjaGFuIDw8IDEpKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MjBfU1lOQ09VVCk7CS8vIHVwZGF0ZSBvdXRwdXRzCisJfQorCisJZGV2cHJpdi0+YW9fZGF0YVtjaGFuXSA9IGRhdGFbbl07CisKKwlyZXR1cm4gbjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIGludGVycnVwdF9wY2kxNzEwX2V2ZXJ5X3NhbXBsZSh2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlpbnQgbTsKKyNpZmRlZiBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sKKwlzaG9ydCBzYW1wbDsKKyNlbmRpZgorCisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBpbnRlcnJ1cHRfcGNpMTcxMF9ldmVyeV9zYW1wbGUoLi4uKVxuIik7CisJbSA9IGludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfU1RBVFVTKTsKKwlpZiAobSAmIFN0YXR1c19GRSkgeworCQlydF9wcmludGsoImNvbWVkaSVkOiBBL0QgRklGTyBlbXB0eSAoJTR4KVxuIiwgZGV2LT5taW5vciwgbSk7CisJCXBjaTE3MXhfYWlfY2FuY2VsKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybjsKKwl9CisJaWYgKG0gJiBTdGF0dXNfRkYpIHsKKwkJcnRfcHJpbnRrCisJCQkoImNvbWVkaSVkOiBBL0QgRklGTyBGdWxsIHN0YXR1cyAoRmF0YWwgRXJyb3IhKSAoJTR4KVxuIiwKKwkJCWRldi0+bWlub3IsIG0pOworCQlwY2kxNzF4X2FpX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm47CisJfQorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsJLy8gY2xlYXIgb3VyIElOVCByZXF1ZXN0CisKKwlEUFJJTlRLKCJGT1IgIik7CisJZm9yICg7ICEoaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9TVEFUVVMpICYgU3RhdHVzX0ZFKTspIHsKKyNpZmRlZiBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sKKwkJc2FtcGwgPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0FEX0RBVEEpOworCQlEUFJJTlRLKCIlMDR4OiIsIHNhbXBsKTsKKwkJaWYgKHRoaXNfYm9hcmQtPmNhcmR0eXBlICE9IFRZUEVfUENJMTcxMykKKwkJCWlmICgoc2FtcGwgJiAweGYwMDApICE9CisJCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0W3MtPmFzeW5jLT5jdXJfY2hhbl0pIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCJjb21lZGk6IEEvRCBkYXRhIGRyb3BvdXQ6IHJlY2VpdmVkIGRhdGEgZnJvbSBjaGFubmVsICVkLCBleHBlY3RlZCAlZCFcbiIsCisJCQkJCShzYW1wbCAmIDB4ZjAwMCkgPj4gMTIsCisJCQkJCShkZXZwcml2LT5hY3RfY2hhbmxpc3Rbcy0+YXN5bmMtPgorCQkJCQkJCWN1cl9jaGFuXSAmIDB4ZjAwMCkgPj4KKwkJCQkJMTIpOworCQkJCXBjaTE3MXhfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PQorCQkJCQlDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJCXJldHVybjsKKwkJCX0KKwkJRFBSSU5USygiJThkICUyZCAlOGR+Iiwgcy0+YXN5bmMtPmJ1Zl9pbnRfcHRyLAorCQkJcy0+YXN5bmMtPmN1cl9jaGFuLCBzLT5hc3luYy0+YnVmX2ludF9jb3VudCk7CisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBzYW1wbCAmIDB4MGZmZik7CisjZWxzZQorCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywKKwkJCWludyhkZXYtPmlvYmFzZSArIFBDSTE3MXhfQURfREFUQSkgJiAweDBmZmYpOworI2VuZGlmCisJCSsrcy0+YXN5bmMtPmN1cl9jaGFuOworCisJCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPj0gZGV2cHJpdi0+YWlfbl9jaGFuKSB7CisJCQlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOworCQl9CisKKwkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CS8vIG9uZSBzY2FuIGRvbmUKKwkJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CisJCQlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFT1MxIGJpYyAlZCBiaXAgJWQgYnVjICVkIGJ1cCAlZFxuIiwgcy0+YXN5bmMtPmJ1Zl9pbnRfY291bnQsIHMtPmFzeW5jLT5idWZfaW50X3B0ciwgcy0+YXN5bmMtPmJ1Zl91c2VyX2NvdW50LCBzLT5hc3luYy0+YnVmX3VzZXJfcHRyKTsKKwkJCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVPUzJcbiIpOworCQkJaWYgKCghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpICYmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykpIHsJLy8gYWxsIGRhdGEgc2FtcGxlZAorCQkJCXBjaTE3MXhfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CS8vIGNsZWFyIG91ciBJTlQgcmVxdWVzdAorCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogaW50ZXJydXB0X3BjaTE3MTBfZXZlcnlfc2FtcGxlKC4uLilcbiIpOworCisJY29tZWRpX2V2ZW50KGRldiwgcyk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IG1vdmVfYmxvY2tfZnJvbV9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50IG4sIGludCB0dXJuKQoreworCWludCBpLCBqOworI2lmZGVmIFBDSTE3MXhfUEFSQU5PSURDSEVDSworCWludCBzYW1wbDsKKyNlbmRpZgorCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogbW92ZV9ibG9ja19mcm9tX2ZpZm8oLi4uLCVkLCVkKVxuIiwgbiwKKwkJdHVybik7CisJaiA9IHMtPmFzeW5jLT5jdXJfY2hhbjsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisjaWZkZWYgUENJMTcxeF9QQVJBTk9JRENIRUNLCisJCXNhbXBsID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcxeF9BRF9EQVRBKTsKKwkJaWYgKHRoaXNfYm9hcmQtPmNhcmR0eXBlICE9IFRZUEVfUENJMTcxMykKKwkJCWlmICgoc2FtcGwgJiAweGYwMDApICE9IGRldnByaXYtPmFjdF9jaGFubGlzdFtqXSkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoImNvbWVkaSVkOiBBL0QgIEZJRk8gZGF0YSBkcm9wb3V0OiByZWNlaXZlZCBkYXRhIGZyb20gY2hhbm5lbCAlZCwgZXhwZWN0ZWQgJWQhICglZC8lZC8lZC8lZC8lZC8lNHgpXG4iLAorCQkJCQlkZXYtPm1pbm9yLCAoc2FtcGwgJiAweGYwMDApID4+IDEyLAorCQkJCQkoZGV2cHJpdi0+CisJCQkJCQlhY3RfY2hhbmxpc3Rbal0gJiAweGYwMDApID4+IDEyLAorCQkJCQlpLCBqLCBkZXZwcml2LT5haV9hY3Rfc2NhbiwgbiwgdHVybiwKKwkJCQkJc2FtcGwpOworCQkJCXBjaTE3MXhfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PQorCQkJCQlDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJCXJldHVybiAxOworCQkJfQorCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgc2FtcGwgJiAweDBmZmYpOworI2Vsc2UKKwkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsCisJCQlpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0FEX0RBVEEpICYgMHgwZmZmKTsKKyNlbmRpZgorCQlqKys7CisJCWlmIChqID49IGRldnByaXYtPmFpX25fY2hhbikgeworCQkJaiA9IDA7CisJCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOworCQl9CisJfQorCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogbW92ZV9ibG9ja19mcm9tX2ZpZm8oLi4uKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBpbnRlcnJ1cHRfcGNpMTcxMF9oYWxmX2ZpZm8odm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJaW50IG0sIHNhbXBsZXNpbmJ1ZjsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogaW50ZXJydXB0X3BjaTE3MTBfaGFsZl9maWZvKC4uLilcbiIpOworCW0gPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NUQVRVUyk7CisJaWYgKCEobSAmIFN0YXR1c19GSCkpIHsKKwkJcnRfcHJpbnRrKCJjb21lZGklZDogQS9EIEZJRk8gbm90IGhhbGYgZnVsbCEgKCU0eClcbiIsCisJCQlkZXYtPm1pbm9yLCBtKTsKKwkJcGNpMTcxeF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobSAmIFN0YXR1c19GRikgeworCQlydF9wcmludGsKKwkJCSgiY29tZWRpJWQ6IEEvRCBGSUZPIEZ1bGwgc3RhdHVzIChGYXRhbCBFcnJvciEpICglNHgpXG4iLAorCQkJZGV2LT5taW5vciwgbSk7CisJCXBjaTE3MXhfYWlfY2FuY2VsKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybjsKKwl9CisKKwlzYW1wbGVzaW5idWYgPSB0aGlzX2JvYXJkLT5maWZvX2hhbGZfc2l6ZTsKKwlpZiAoc2FtcGxlc2luYnVmICogc2l6ZW9mKHNob3J0KSA+PSBkZXZwcml2LT5haV9kYXRhX2xlbikgeworCQltID0gZGV2cHJpdi0+YWlfZGF0YV9sZW4gLyBzaXplb2Yoc2hvcnQpOworCQlpZiAobW92ZV9ibG9ja19mcm9tX2ZpZm8oZGV2LCBzLCBtLCAwKSkKKwkJCXJldHVybjsKKwkJc2FtcGxlc2luYnVmIC09IG07CisJfQorCisJaWYgKHNhbXBsZXNpbmJ1ZikgeworCQlpZiAobW92ZV9ibG9ja19mcm9tX2ZpZm8oZGV2LCBzLCBzYW1wbGVzaW5idWYsIDEpKQorCQkJcmV0dXJuOworCX0KKworCWlmICghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpCisJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQlwY2kxNzF4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQlyZXR1cm47CisJCX0KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOwkvLyBjbGVhciBvdXIgSU5UIHJlcXVlc3QKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IGludGVycnVwdF9wY2kxNzEwX2hhbGZfZmlmbyguLi4pXG4iKTsKKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9zZXJ2aWNlX3BjaTE3MTAoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogaW50ZXJydXB0X3NlcnZpY2VfcGNpMTcxMCglZCwuLi4pXG4iLAorCQlpcnEpOworCWlmICghZGV2LT5hdHRhY2hlZCkJLy8gaXMgZGV2aWNlIGF0dGFjaGVkPworCQlyZXR1cm4gSVJRX05PTkU7CS8vIG5vLCBleGl0CisKKwlpZiAoIShpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NUQVRVUykgJiBTdGF0dXNfSVJRKSkJLy8gaXMgdGhpcyBpbnRlcnJ1cHQgZnJvbSBvdXIgYm9hcmQ/CisJCXJldHVybiBJUlFfTk9ORTsJLy8gbm8sIGV4aXQKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IGludGVycnVwdF9zZXJ2aWNlX3BjaTE3MTAoKSBTVDogJTR4XG4iLAorCQlpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1NUQVRVUykpOworCisJaWYgKGRldnByaXYtPmFpX2V0KSB7CS8vIFN3aXRjaCBmcm9tIGluaXRpYWwgVFJJR19FWFQgdG8gVFJJR194eHguCisJCWRldnByaXYtPmFpX2V0ID0gMDsKKwkJZGV2cHJpdi0+Q250cmxSZWcgJj0gQ29udHJvbF9DTlQwOworCQlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX1NXOwkvLyBzZXQgc29mdHdhcmUgdHJpZ2dlcgorCQlvdXR3KGRldnByaXYtPkNudHJsUmVnLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ09OVFJPTCk7CisJCWRldnByaXYtPkNudHJsUmVnID0gZGV2cHJpdi0+YWlfZXRfQ250cmxSZWc7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOworCQlvdXR3KGRldnByaXYtPmFpX2V0X011eFZhbCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X01VWCk7CisJCW91dHcoZGV2cHJpdi0+Q250cmxSZWcsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DT05UUk9MKTsKKwkJLy8gc3RhcnQgcGFjZXIKKwkJc3RhcnRfcGFjZXIoZGV2LCAxLCBkZXZwcml2LT5haV9ldF9kaXYxLCBkZXZwcml2LT5haV9ldF9kaXYyKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwlpZiAoZGV2cHJpdi0+YWlfZW9zKSB7CS8vIFdlIHVzZSBGSUZPIGhhbGYgZnVsbCBJTlQgb3Igbm90PworCQlpbnRlcnJ1cHRfcGNpMTcxMF9ldmVyeV9zYW1wbGUoZCk7CisJfSBlbHNlIHsKKwkJaW50ZXJydXB0X3BjaTE3MTBfaGFsZl9maWZvKGQpOworCX0KKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IGludGVycnVwdF9zZXJ2aWNlX3BjaTE3MTAoLi4uKVxuIik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X2FpX2RvY21kX2FuZF9tb2RlKGludCBtb2RlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgaW50IGRpdmlzb3IxLCBkaXZpc29yMjsKKwl1bnNpZ25lZCBpbnQgc2VnbGVuOworCisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzF4X2FpX2RvY21kX2FuZF9tb2RlKCVkLC4uLilcbiIsCisJCW1vZGUpOworCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIHBhY2VyCisKKwlzZWdsZW4gPSBjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBkZXZwcml2LT5haV9jaGFubGlzdCwKKwkJZGV2cHJpdi0+YWlfbl9jaGFuKTsKKwlpZiAoc2VnbGVuIDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgZGV2cHJpdi0+YWlfY2hhbmxpc3QsCisJCWRldnByaXYtPmFpX25fY2hhbiwgc2VnbGVuKTsKKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CisKKwlkZXZwcml2LT5haV9kbyA9IG1vZGU7CisKKwlkZXZwcml2LT5haV9hY3Rfc2NhbiA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwlkZXZwcml2LT5haV9idWZfcHRyID0gMDsKKwlkZXZwcml2LT5uZXZlcmVuZGluZ19haSA9IDA7CisKKwlkZXZwcml2LT5DbnRybFJlZyAmPSBDb250cm9sX0NOVDA7CisJaWYgKChkZXZwcml2LT5haV9mbGFncyAmIFRSSUdfV0FLRV9FT1MpKSB7CS8vIGRvbid0IHdlIHdhbnQgd2FrZSB1cCBldmVyeSBzY2FuPyAgICAgICAgICAgIGRldnByaXYtPmFpX2Vvcz0xOworCQlkZXZwcml2LT5haV9lb3MgPSAxOworCX0gZWxzZSB7CisJCWRldnByaXYtPkNudHJsUmVnIHw9IENvbnRyb2xfT05FRkg7CisJCWRldnByaXYtPmFpX2VvcyA9IDA7CisJfQorCisJaWYgKChkZXZwcml2LT5haV9zY2FucyA9PSAwKSB8fCAoZGV2cHJpdi0+YWlfc2NhbnMgPT0gLTEpKSB7CisJCWRldnByaXYtPm5ldmVyZW5kaW5nX2FpID0gMTsKKwl9CQkJLy93ZWxsLCB1c2VyIHdhbnQgbmV2ZXJlbmRpbmcKKwllbHNlIHsKKwkJZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkgPSAwOworCX0KKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIDE6CisJY2FzZSAyOgorCQlpZiAoZGV2cHJpdi0+YWlfdGltZXIxIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQorCQkJZGV2cHJpdi0+YWlfdGltZXIxID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX1BBQ0VSIHwgQ29udHJvbF9JUlFFTjsKKwkJaWYgKG1vZGUgPT0gMikgeworCQkJZGV2cHJpdi0+YWlfZXRfQ250cmxSZWcgPSBkZXZwcml2LT5DbnRybFJlZzsKKwkJCWRldnByaXYtPkNudHJsUmVnICY9CisJCQkJfihDb250cm9sX1BBQ0VSIHwgQ29udHJvbF9PTkVGSCB8IENvbnRyb2xfR0FURSk7CisJCQlkZXZwcml2LT5DbnRybFJlZyB8PSBDb250cm9sX0VYVDsKKwkJCWRldnByaXYtPmFpX2V0ID0gMTsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPmFpX2V0ID0gMDsKKwkJfQorCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjU0X29zY19iYXNlLCAmZGl2aXNvcjEsCisJCQkmZGl2aXNvcjIsICZkZXZwcml2LT5haV90aW1lcjEsCisJCQlkZXZwcml2LT5haV9mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IE9TQyBiYXNlPSV1IGRpdjE9JXUgZGl2Mj0ldSB0aW1lcj0ldVxuIiwgZGV2cHJpdi0+aTgyNTRfb3NjX2Jhc2UsIGRpdmlzb3IxLCBkaXZpc29yMiwgZGV2cHJpdi0+YWlfdGltZXIxKTsKKwkJb3V0dyhkZXZwcml2LT5DbnRybFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NPTlRST0wpOworCQlpZiAobW9kZSAhPSAyKSB7CisJCQkvLyBzdGFydCBwYWNlcgorCQkJc3RhcnRfcGFjZXIoZGV2LCBtb2RlLCBkaXZpc29yMSwgZGl2aXNvcjIpOworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+YWlfZXRfZGl2MSA9IGRpdmlzb3IxOworCQkJZGV2cHJpdi0+YWlfZXRfZGl2MiA9IGRpdmlzb3IyOworCQl9CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZGV2cHJpdi0+Q250cmxSZWcgfD0gQ29udHJvbF9FWFQgfCBDb250cm9sX0lSUUVOOworCQlvdXR3KGRldnByaXYtPkNudHJsUmVnLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ09OVFJPTCk7CisJCWJyZWFrOworCX0KKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogcGNpMTcxeF9haV9kb2NtZF9hbmRfbW9kZSguLi4pXG4iKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIFBDSTE3MVhfRVhUREVCVUcKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBwY2kxNzF4X2NtZHRlc3Rfb3V0KGludCBlLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlydF9wcmludGsoImFkdl9wY2kxNzEwIGU9JWQgc3RhcnRzcmM9JXggc2NhbnNyYz0leCBjb252c3JjPSV4XG4iLCBlLAorCQljbWQtPnN0YXJ0X3NyYywgY21kLT5zY2FuX2JlZ2luX3NyYywgY21kLT5jb252ZXJ0X3NyYyk7CisJcnRfcHJpbnRrKCJhZHZfcGNpMTcxMCBlPSVkIHN0YXJ0YXJnPSVkIHNjYW5hcmc9JWQgY29udmFyZz0lZFxuIiwgZSwKKwkJY21kLT5zdGFydF9hcmcsIGNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+Y29udmVydF9hcmcpOworCXJ0X3ByaW50aygiYWR2X3BjaTE3MTAgZT0lZCBzdG9wc3JjPSV4IHNjYW5lbmQ9JXhcbiIsIGUsIGNtZC0+c3RvcF9zcmMsCisJCWNtZC0+c2Nhbl9lbmRfc3JjKTsKKwlydF9wcmludGsoImFkdl9wY2kxNzEwIGU9JWQgc3RvcGFyZz0lZCBzY2FuZW5kYXJnPSVkIGNoYW5saXN0bGVuPSVkXG4iLAorCQllLCBjbWQtPnN0b3BfYXJnLCBjbWQtPnNjYW5fZW5kX2FyZywgY21kLT5jaGFubGlzdF9sZW4pOworfQorI2VuZGlmCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXAsIGRpdmlzb3IxLCBkaXZpc29yMjsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9haV9jbWR0ZXN0KC4uLilcbiIpOworI2lmZGVmIFBDSTE3MVhfRVhUREVCVUcKKwlwY2kxNzF4X2NtZHRlc3Rfb3V0KC0xLCBjbWQpOworI2VuZGlmCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKSB7CisjaWZkZWYgUENJMTcxWF9FWFRERUJVRworCQlwY2kxNzF4X2NtZHRlc3Rfb3V0KDEsIGNtZCk7CisjZW5kaWYKKwkJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzF4X2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTFcbiIsIGVycik7CisJCXJldHVybiAxOworCX0KKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19FWFQpIHsKKwkJY21kLT5zdGFydF9zcmMgPSBUUklHX05PVzsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyA9IFRSSUdfRk9MTE9XOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCisJaWYgKGNtZC0+c2Nhbl9lbmRfc3JjICE9IFRSSUdfQ09VTlQpIHsKKwkJY21kLT5zY2FuX2VuZF9zcmMgPSBUUklHX0NPVU5UOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UKQorCQllcnIrKzsKKworCWlmIChlcnIpIHsKKyNpZmRlZiBQQ0kxNzFYX0VYVERFQlVHCisJCXBjaTE3MXhfY21kdGVzdF9vdXQoMiwgY21kKTsKKyNlbmRpZgorCQlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IHBjaTE3MXhfYWlfY21kdGVzdCguLi4pIGVycj0lZCByZXQ9MlxuIiwgZXJyKTsKKwkJcmV0dXJuIDI7CisJfQorCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc19ib2FyZC0+YWlfbnNfbWluOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19GT0xMT1cgKi8KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSAxOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gdGhpc19ib2FyZC0+bl9haWNoYW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoIWNtZC0+c3RvcF9hcmcpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKSB7CisjaWZkZWYgUENJMTcxWF9FWFRERUJVRworCQlwY2kxNzF4X2NtZHRlc3Rfb3V0KDMsIGNtZCk7CisjZW5kaWYKKwkJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzF4X2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTNcbiIsIGVycik7CisJCXJldHVybiAzOworCX0KKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihkZXZwcml2LT5pODI1NF9vc2NfYmFzZSwgJmRpdmlzb3IxLAorCQkJJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpIHsKKwkJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzF4X2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTRcbiIsIGVycik7CisJCXJldHVybiA0OworCX0KKworCS8qIHN0ZXAgNTogY29tcGxhaW4gYWJvdXQgc3BlY2lhbCBjaGFubGlzdCBjb25zaWRlcmF0aW9ucyAqLworCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJaWYgKCFjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBjbWQtPmNoYW5saXN0LAorCQkJCWNtZC0+Y2hhbmxpc3RfbGVuKSkKKwkJCXJldHVybiA1OwkvLyBpbmNvcnJlY3QgY2hhbm5lbHMgbGlzdAorCX0KKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9haV9jbWR0ZXN0KC4uLikgcmV0PTBcbiIpOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9haV9jbWQoLi4uKVxuIik7CisJZGV2cHJpdi0+YWlfbl9jaGFuID0gY21kLT5jaGFubGlzdF9sZW47CisJZGV2cHJpdi0+YWlfY2hhbmxpc3QgPSBjbWQtPmNoYW5saXN0OworCWRldnByaXYtPmFpX2ZsYWdzID0gY21kLT5mbGFnczsKKwlkZXZwcml2LT5haV9kYXRhX2xlbiA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWZzejsKKwlkZXZwcml2LT5haV9kYXRhID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZjsKKwlkZXZwcml2LT5haV90aW1lcjEgPSAwOworCWRldnByaXYtPmFpX3RpbWVyMiA9IDA7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPmFpX3NjYW5zID0gY21kLT5zdG9wX2FyZzsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5haV9zY2FucyA9IDA7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsJLy8gbW9kZSAxLCAyLCAzCisJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsJLy8gbW9kZSAxIGFuZCAyCisJCQlkZXZwcml2LT5haV90aW1lcjEgPSBjbWQtPmNvbnZlcnRfYXJnOworCQkJcmV0dXJuIHBjaTE3MXhfYWlfZG9jbWRfYW5kX21vZGUoY21kLT5zdGFydF9zcmMgPT0KKwkJCQlUUklHX0VYVCA/IDIgOiAxLCBkZXYsIHMpOworCQl9CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfRVhUKSB7CS8vIG1vZGUgMworCQkJcmV0dXJuIHBjaTE3MXhfYWlfZG9jbWRfYW5kX21vZGUoMywgZGV2LCBzKTsKKwkJfQorCX0KKworCXJldHVybiAtMTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIENoZWNrIGlmIGNoYW5uZWwgbGlzdCBmcm9tIHVzZXIgaXMgYnVpbGRlZCBjb3JyZWN0bHkKKyBJZiBpdCdzIG9rLCB0aGVuIHByb2dyYW0gc2Nhbi9nYWluIGxvZ2ljLgorIFRoaXMgd29ya3MgZm9yIGFsbCBjYXJkcy4KKyovCitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pCit7CisJdW5zaWduZWQgaW50IGNoYW5zZWdtZW50WzMyXTsKKwl1bnNpZ25lZCBpbnQgaSwgbm93bXVzdGJlY2hhbiwgc2VnbGVuLCBzZWdwb3M7CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiAgY2hlY2tfY2hhbm5lbF9saXN0KC4uLiwlZClcbiIsIG5fY2hhbik7CisJLyogY29ycmVjdCBjaGFubmVsIGFuZCByYW5nZSBudW1iZXIgY2hlY2sgaXRzZWxmIGNvbWVkaS9yYW5nZS5jICovCisJaWYgKG5fY2hhbiA8IDEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInJhbmdlL2NoYW5uZWwgbGlzdCBpcyBlbXB0eSEiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG5fY2hhbiA+IDEpIHsKKwkJY2hhbnNlZ21lbnRbMF0gPSBjaGFubGlzdFswXTsJLy8gZmlyc3QgY2hhbm5lbCBpcyBldmVyeXRpbWUgb2sKKwkJZm9yIChpID0gMSwgc2VnbGVuID0gMTsgaSA8IG5fY2hhbjsgaSsrLCBzZWdsZW4rKykgewkvLyBidWlsZCBwYXJ0IG9mIGNoYW5saXN0CisJCQkvLyBydF9wcmludGsoIiVkLiAlZCAlZFxuIixpLENSX0NIQU4oY2hhbmxpc3RbaV0pLENSX1JBTkdFKGNoYW5saXN0W2ldKSk7CisJCQlpZiAoY2hhbmxpc3RbMF0gPT0gY2hhbmxpc3RbaV0pCisJCQkJYnJlYWs7CS8vIHdlIGRldGVjdCBsb29wLCB0aGlzIG11c3QgYnkgZmluaXNoCisJCQlpZiAoQ1JfQ0hBTihjaGFubGlzdFtpXSkgJiAxKQkvLyBvZGQgY2hhbm5lbCBjYW5uJ3QgYnkgZGlmZmVyZW5jaWFsCisJCQkJaWYgKENSX0FSRUYoY2hhbmxpc3RbaV0pID09IEFSRUZfRElGRikgeworCQkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkJIk9kZCBjaGFubmVsIGNhbid0IGJlIGRpZmZlcmVudGlhbCBpbnB1dCFcbiIpOworCQkJCQlyZXR1cm4gMDsKKwkJCQl9CisJCQlub3dtdXN0YmVjaGFuID0KKwkJCQkoQ1JfQ0hBTihjaGFuc2VnbWVudFtpIC0gMV0pICsgMSkgJSBzLT5uX2NoYW47CisJCQlpZiAoQ1JfQVJFRihjaGFuc2VnbWVudFtpIC0gMV0pID09IEFSRUZfRElGRikKKwkJCQlub3dtdXN0YmVjaGFuID0gKG5vd211c3RiZWNoYW4gKyAxKSAlIHMtPm5fY2hhbjsKKwkJCWlmIChub3dtdXN0YmVjaGFuICE9IENSX0NIQU4oY2hhbmxpc3RbaV0pKSB7CS8vIGNoYW5uZWwgbGlzdCBpc24ndCBjb250aW5vdXMgOi0oCisJCQkJcnRfcHJpbnRrCisJCQkJCSgiY2hhbm5lbCBsaXN0IG11c3QgYmUgY29udGlub3VzISBjaGFubGlzdFslaV09JWQgYnV0IG11c3QgYmUgJWQgb3IgJWQhXG4iLAorCQkJCQlpLCBDUl9DSEFOKGNoYW5saXN0W2ldKSwgbm93bXVzdGJlY2hhbiwKKwkJCQkJQ1JfQ0hBTihjaGFubGlzdFswXSkpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJY2hhbnNlZ21lbnRbaV0gPSBjaGFubGlzdFtpXTsJLy8gd2VsbCwgdGhpcyBpcyBuZXh0IGNvcnJlY3QgY2hhbm5lbCBpbiBsaXN0CisJCX0KKworCQlmb3IgKGkgPSAwLCBzZWdwb3MgPSAwOyBpIDwgbl9jaGFuOyBpKyspIHsJLy8gY2hlY2sgd2hvbGUgY2hhbmxpc3QKKwkJCS8vcnRfcHJpbnRrKCIlZCAlZD0lZCAlZFxuIixDUl9DSEFOKGNoYW5zZWdtZW50W2klc2VnbGVuXSksQ1JfUkFOR0UoY2hhbnNlZ21lbnRbaSVzZWdsZW5dKSxDUl9DSEFOKGNoYW5saXN0W2ldKSxDUl9SQU5HRShjaGFubGlzdFtpXSkpOworCQkJaWYgKGNoYW5saXN0W2ldICE9IGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiYmFkIGNoYW5uZWwsIHJlZmVyZW5jZSBvciByYW5nZSBudW1iZXIhIGNoYW5saXN0WyVpXT0lZCwlZCwlZCBhbmQgbm90ICVkLCVkLCVkIVxuIiwKKwkJCQkJaSwgQ1JfQ0hBTihjaGFuc2VnbWVudFtpXSksCisJCQkJCUNSX1JBTkdFKGNoYW5zZWdtZW50W2ldKSwKKwkJCQkJQ1JfQVJFRihjaGFuc2VnbWVudFtpXSksCisJCQkJCUNSX0NIQU4oY2hhbmxpc3RbaSAlIHNlZ2xlbl0pLAorCQkJCQlDUl9SQU5HRShjaGFubGlzdFtpICUgc2VnbGVuXSksCisJCQkJCUNSX0FSRUYoY2hhbnNlZ21lbnRbaSAlIHNlZ2xlbl0pKTsKKwkJCQlyZXR1cm4gMDsJLy8gY2hhbi9nYWluIGxpc3QgaXMgc3RyYW5nZQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc2VnbGVuID0gMTsKKwl9CisJcmV0dXJuIHNlZ2xlbjsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50ICpjaGFubGlzdCwgdW5zaWduZWQgaW50IG5fY2hhbiwgdW5zaWduZWQgaW50IHNlZ2xlbikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgcmFuZ2UsIGNoYW5wcm9nOworCisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogIHNldHVwX2NoYW5uZWxfbGlzdCguLi4sJWQsJWQpXG4iLCBuX2NoYW4sCisJCXNlZ2xlbik7CisJZGV2cHJpdi0+YWN0X2NoYW5saXN0X2xlbiA9IHNlZ2xlbjsKKwlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID0gMDsKKworCURQUklOVEsoIlNlZ0xlbjogJWRcbiIsIHNlZ2xlbik7CisJZm9yIChpID0gMDsgaSA8IHNlZ2xlbjsgaSsrKSB7CS8vIHN0b3JlIHJhbmdlIGxpc3QgdG8gY2FyZAorCQljaGFucHJvZyA9IG11eG9uZWNoYW5bQ1JfQ0hBTihjaGFubGlzdFtpXSldOworCQlvdXR3KGNoYW5wcm9nLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfTVVYKTsJLyogc2VsZWN0IGNoYW5uZWwgKi8KKwkJcmFuZ2UgPSB0aGlzX2JvYXJkLT5yYW5nZWNvZGVfYWlbQ1JfUkFOR0UoY2hhbmxpc3RbaV0pXTsKKwkJaWYgKENSX0FSRUYoY2hhbmxpc3RbaV0pID09IEFSRUZfRElGRikKKwkJCXJhbmdlIHw9IDB4MDAyMDsKKwkJb3V0dyhyYW5nZSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X1JBTkdFKTsJLyogc2VsZWN0IGdhaW4gKi8KKyNpZmRlZiBQQ0kxNzF4X1BBUkFOT0lEQ0hFQ0sKKwkJZGV2cHJpdi0+YWN0X2NoYW5saXN0W2ldID0KKwkJCShDUl9DSEFOKGNoYW5saXN0W2ldKSA8PCAxMikgJiAweGYwMDA7CisjZW5kaWYKKwkJRFBSSU5USygiR1M6ICUyZC4gWyU0eF09JTR4ICU0eFxuIiwgaSwgY2hhbnByb2csIHJhbmdlLAorCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0W2ldKTsKKwl9CisKKwlkZXZwcml2LT5haV9ldF9NdXhWYWwgPQorCQlDUl9DSEFOKGNoYW5saXN0WzBdKSB8IChDUl9DSEFOKGNoYW5saXN0W3NlZ2xlbiAtIDFdKSA8PCA4KTsKKwlvdXR3KGRldnByaXYtPmFpX2V0X011eFZhbCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X01VWCk7CS8qIHNlbGVjdCBjaGFubmVsIGludGVydmFsIHRvIHNjYW4gKi8KKwlEUFJJTlRLKCJNVVg6ICU0eCBMJTR4LkglNHhcbiIsCisJCUNSX0NIQU4oY2hhbmxpc3RbMF0pIHwgKENSX0NIQU4oY2hhbmxpc3Rbc2VnbGVuIC0gMV0pIDw8IDgpLAorCQlDUl9DSEFOKGNoYW5saXN0WzBdKSwgQ1JfQ0hBTihjaGFubGlzdFtzZWdsZW4gLSAxXSkpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgc3RhcnRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGl2aXNvcjEsCisJdW5zaWduZWQgaW50IGRpdmlzb3IyKQoreworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogc3RhcnRfcGFjZXIoJWQsJXUsJXUpXG4iLCBtb2RlLAorCQlkaXZpc29yMSwgZGl2aXNvcjIpOworCW91dHcoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVENUUkwpOworCW91dHcoMHg3NCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVENUUkwpOworCisJaWYgKG1vZGUgPT0gMSkgeworCQlvdXR3KGRpdmlzb3IyICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NOVDIpOworCQlvdXR3KChkaXZpc29yMiA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQyKTsKKwkJb3V0dyhkaXZpc29yMSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlQxKTsKKwkJb3V0dygoZGl2aXNvcjEgPj4gOCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ05UMSk7CisJfQorCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogc3RhcnRfcGFjZXIoLi4uKVxuIik7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3MXhfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogQkdOOiBwY2kxNzF4X2FpX2NhbmNlbCguLi4pXG4iKTsKKworCXN3aXRjaCAodGhpc19ib2FyZC0+Y2FyZHR5cGUpIHsKKwlkZWZhdWx0OgorCQlkZXZwcml2LT5DbnRybFJlZyAmPSBDb250cm9sX0NOVDA7CisJCWRldnByaXYtPkNudHJsUmVnIHw9IENvbnRyb2xfU1c7CisKKwkJb3V0dyhkZXZwcml2LT5DbnRybFJlZywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NPTlRST0wpOwkvLyByZXNldCBhbnkgb3BlcmF0aW9ucworCQlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSRklGTyk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUklOVCk7CisJCWJyZWFrOworCX0KKworCWRldnByaXYtPmFpX2RvID0gMDsKKwlkZXZwcml2LT5haV9hY3Rfc2NhbiA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwlkZXZwcml2LT5haV9idWZfcHRyID0gMDsKKwlkZXZwcml2LT5uZXZlcmVuZGluZ19haSA9IDA7CisKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBFTkQ6IHBjaTE3MXhfYWlfY2FuY2VsKC4uLilcbiIpOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2kxNzF4X3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEJHTjogcGNpMTcxeF9yZXNldCguLi4pXG4iKTsKKwlvdXR3KDB4MzAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTlRDVFJMKTsKKwlkZXZwcml2LT5DbnRybFJlZyA9IENvbnRyb2xfU1cgfCBDb250cm9sX0NOVDA7CS8vIFNvZnR3YXJlIHRyaWdnZXIsIENOVDA9ZXh0ZXJuYWwKKwlvdXR3KGRldnByaXYtPkNudHJsUmVnLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ09OVFJPTCk7CS8vIHJlc2V0IGFueSBvcGVyYXRpb25zCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSRklGTyk7CS8vIGNsZWFyIEZJRk8KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcxeF9DTFJJTlQpOwkvLyBjbGVhciBJTlQgcmVxdWVzdAorCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIDgyNTQKKwlkZXZwcml2LT5kYV9yYW5nZXMgPSAwOworCWlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbikgeworCQlvdXRiKGRldnByaXYtPmRhX3JhbmdlcywgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0RBUkVGKTsJLy8gc2V0IERBQ3MgdG8gMC4uNVYKKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfREExKTsJLy8gc2V0IERBIG91dHB1dHMgdG8gMFYKKwkJZGV2cHJpdi0+YW9fZGF0YVswXSA9IDB4MDAwMDsKKwkJaWYgKHRoaXNfYm9hcmQtPm5fYW9jaGFuID4gMSkgeworCQkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfREEyKTsKKwkJCWRldnByaXYtPmFvX2RhdGFbMV0gPSAweDAwMDA7CisJCX0KKwl9CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfRE8pOwkvLyBkaWdpdGFsIG91dHB1dHMgdG8gMAorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzF4X0NMUkZJRk8pOwkvLyBjbGVhciBGSUZPCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MXhfQ0xSSU5UKTsJLy8gY2xlYXIgSU5UIHJlcXVlc3QKKworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogcGNpMTcxeF9yZXNldCguLi4pXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcyMF9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IHBjaTE3MjBfcmVzZXQoLi4uKVxuIik7CisJb3V0YihTeW5jb250X1NDMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIwX1NZTkNPTlQpOwkvLyBzZXQgc3luY2hyb25vdXMgb3V0cHV0IG1vZGUKKwlkZXZwcml2LT5kYV9yYW5nZXMgPSAweEFBOworCW91dGIoZGV2cHJpdi0+ZGFfcmFuZ2VzLCBkZXYtPmlvYmFzZSArIFBDSTE3MjBfUkFOR0UpOwkvLyBzZXQgYWxsIHJhbmdlcyB0byArLy01VgorCW91dHcoMHgwODAwLCBkZXYtPmlvYmFzZSArIFBDSTE3MjBfREEwKTsJLy8gc2V0IG91dHB1dHMgdG8gMFYKKwlvdXR3KDB4MDgwMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIwX0RBMSk7CisJb3V0dygweDA4MDAsIGRldi0+aW9iYXNlICsgUENJMTcyMF9EQTIpOworCW91dHcoMHgwODAwLCBkZXYtPmlvYmFzZSArIFBDSTE3MjBfREEzKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTcyMF9TWU5DT1VUKTsJLy8gdXBkYXRlIG91dHB1dHMKKwlkZXZwcml2LT5hb19kYXRhWzBdID0gMHgwODAwOworCWRldnByaXYtPmFvX2RhdGFbMV0gPSAweDA4MDA7CisJZGV2cHJpdi0+YW9fZGF0YVsyXSA9IDB4MDgwMDsKKwlkZXZwcml2LT5hb19kYXRhWzNdID0gMHgwODAwOworCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogcGNpMTcyMF9yZXNldCguLi4pXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxMF9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlEUFJJTlRLKCJhZHZfcGNpMTcxMCBFREJHOiBCR046IHBjaTE3MTBfcmVzZXQoLi4uKVxuIik7CisJc3dpdGNoICh0aGlzX2JvYXJkLT5jYXJkdHlwZSkgeworCWNhc2UgVFlQRV9QQ0kxNzIwOgorCQlyZXR1cm4gcGNpMTcyMF9yZXNldChkZXYpOworCWRlZmF1bHQ6CisJCXJldHVybiBwY2kxNzF4X3Jlc2V0KGRldik7CisJfQorCURQUklOVEsoImFkdl9wY2kxNzEwIEVEQkc6IEVORDogcGNpMTcxMF9yZXNldCguLi4pXG4iKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldCwgc3ViZGV2LCBuX3N1YmRldmljZXM7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCWludCBvcHRfYnVzLCBvcHRfc2xvdDsKKwljb25zdCBjaGFyICplcnJzdHI7CisJdW5zaWduZWQgY2hhciBwY2lfYnVzLCBwY2lfc2xvdCwgcGNpX2Z1bmM7CisJaW50IGk7CisJaW50IGJvYXJkX2luZGV4OworCisJcnRfcHJpbnRrKCJjb21lZGklZDogYWR2X3BjaTE3MTA6ICIsIGRldi0+bWlub3IpOworCisJb3B0X2J1cyA9IGl0LT5vcHRpb25zWzBdOworCW9wdF9zbG90ID0gaXQtPm9wdGlvbnNbMV07CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaTE3MTBfcHJpdmF0ZSkpKSA8IDApIHsKKwkJcnRfcHJpbnRrKCIgLSBBbGxvY2F0aW9uIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBMb29rIGZvciBtYXRjaGluZyBQQ0kgZGV2aWNlICovCisJZXJyc3RyID0gIm5vdCBmb3VuZCEiOworCXBjaWRldiA9IE5VTEw7CisJYm9hcmRfaW5kZXggPSB0aGlzX2JvYXJkIC0gYm9hcmR0eXBlczsKKwl3aGlsZSAoTlVMTCAhPSAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsCisJCVBDSV9BTllfSUQsIHBjaWRldikpKSB7CisJCWlmKHN0cmNtcCh0aGlzX2JvYXJkLT5uYW1lLCBEUlZfTkFNRSkgPT0gMCkKKwkJeworCQkJZm9yKGkgPSAwOyBpIDwgbl9ib2FyZHR5cGVzOyArK2kpCisJCQl7CisJCQkJaWYocGNpZGV2LT5kZXZpY2UgPT0gYm9hcmR0eXBlc1tpXS5kZXZpY2VfaWQpCisJCQkJeworCQkJCQlib2FyZF9pbmRleCA9IGk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmKGkgPT0gbl9ib2FyZHR5cGVzKSBjb250aW51ZTsKKwkJfWVsc2UKKwkJeworCQkJaWYocGNpZGV2LT5kZXZpY2UgIT0gYm9hcmR0eXBlc1tib2FyZF9pbmRleF0uZGV2aWNlX2lkKSBjb250aW51ZTsKKwkJfQorCisJCS8qIEZvdW5kIG1hdGNoaW5nIHZlbmRvci9kZXZpY2UuICovCisJCWlmIChvcHRfYnVzIHx8IG9wdF9zbG90KSB7CisJCQkvKiBDaGVjayBidXMvc2xvdC4gKi8KKwkJCWlmIChvcHRfYnVzICE9IHBjaWRldi0+YnVzLT5udW1iZXIKKwkJCQl8fCBvcHRfc2xvdCAhPSBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSkKKwkJCQljb250aW51ZTsJLyogbm8gbWF0Y2ggKi8KKwkJfQorCQkvKgorCQkqIExvb2sgZm9yIGRldmljZSB0aGF0IGlzbid0IGluIHVzZS4KKwkJKiBFbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zLgorCQkqLworCQlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCBEUlZfTkFNRSkpIHsKKwkJCWVycnN0ciA9ICJmYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucyEiOworCQkJY29udGludWU7CisJCX0KKwkJLy8gZml4dXAgYm9hcmRfcHRyIGluIGNhc2Ugd2Ugd2VyZSB1c2luZyB0aGUgZHVtbXkgZW50cnkgd2l0aCB0aGUgZHJpdmVyIG5hbWUKKwkJZGV2LT5ib2FyZF9wdHIgPSAmYm9hcmR0eXBlc1tib2FyZF9pbmRleF07CisJCWJyZWFrOworCX0KKworCWlmICghcGNpZGV2KSB7CisJCWlmIChvcHRfYnVzIHx8IG9wdF9zbG90KSB7CisJCQlydF9wcmludGsoIiAtIENhcmQgYXQgYjpzICVkOiVkICVzXG4iLAorCQkJCW9wdF9idXMsIG9wdF9zbG90LCBlcnJzdHIpOworCQl9IGVsc2UgeworCQkJcnRfcHJpbnRrKCIgLSBDYXJkICVzXG4iLCBlcnJzdHIpOworCQl9CisJCXJldHVybiAtRUlPOworCX0KKworCXBjaV9idXMgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOworCXBjaV9zbG90ID0gUENJX1NMT1QocGNpZGV2LT5kZXZmbik7CisJcGNpX2Z1bmMgPSBQQ0lfRlVOQyhwY2lkZXYtPmRldmZuKTsKKwlpcnEgPSBwY2lkZXYtPmlycTsKKwlpb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKworCXJ0X3ByaW50aygiLCBiOnM6Zj0lZDolZDolZCwgaW89MHglNGx4IiwgcGNpX2J1cywgcGNpX3Nsb3QsIHBjaV9mdW5jLAorCQlpb2Jhc2UpOworCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCWRldnByaXYtPnBjaWRldiA9IHBjaWRldjsKKworCW5fc3ViZGV2aWNlcyA9IDA7CisJaWYgKHRoaXNfYm9hcmQtPm5fYWljaGFuKQorCQluX3N1YmRldmljZXMrKzsKKwlpZiAodGhpc19ib2FyZC0+bl9hb2NoYW4pCisJCW5fc3ViZGV2aWNlcysrOworCWlmICh0aGlzX2JvYXJkLT5uX2RpY2hhbikKKwkJbl9zdWJkZXZpY2VzKys7CisJaWYgKHRoaXNfYm9hcmQtPm5fZG9jaGFuKQorCQluX3N1YmRldmljZXMrKzsKKwlpZiAodGhpc19ib2FyZC0+bl9jb3VudGVyKQorCQluX3N1YmRldmljZXMrKzsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkgeworCQlydF9wcmludGsoIiAtIEFsbG9jYXRpb24gZmFpbGVkIVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcGNpMTcxMF9yZXNldChkZXYpOworCisJaWYgKHRoaXNfYm9hcmQtPmhhdmVfaXJxKSB7CisJCWlmIChpcnEpIHsKKwkJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBpbnRlcnJ1cHRfc2VydmljZV9wY2kxNzEwLAorCQkJCQlJUlFGX1NIQVJFRCwgIkFkdmFudGVjaCBQQ0ktMTcxMCIsCisJCQkJCWRldikpIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJWQsIERJU0FCTElORyBJVCIsCisJCQkJCWlycSk7CisJCQkJaXJxID0gMDsJLyogQ2FuJ3QgdXNlIElSUSAqLworCQkJfSBlbHNlIHsKKwkJCQlydF9wcmludGsoIiwgaXJxPSV1IiwgaXJxKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJ0X3ByaW50aygiLCBJUlEgZGlzYWJsZWQiKTsKKwkJfQorCX0gZWxzZSB7CisJCWlycSA9IDA7CisJfQorCisJZGV2LT5pcnEgPSBpcnE7CisKKwlwcmludGsoIi5cbiIpOworCisJc3ViZGV2ID0gMDsKKworCWlmICh0aGlzX2JvYXJkLT5uX2FpY2hhbikgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ09NTU9OIHwgU0RGX0dST1VORDsKKwkJaWYgKHRoaXNfYm9hcmQtPm5fYWljaGFuZCkKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfRElGRjsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9haWNoYW47CisJCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5haV9tYXhkYXRhOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5yYW5nZWxpc3RfYWk7CisJCXMtPmNhbmNlbCA9IHBjaTE3MXhfYWlfY2FuY2VsOworCQlzLT5pbnNuX3JlYWQgPSBwY2kxNzF4X2luc25fcmVhZF9haTsKKwkJaWYgKGlycSkgeworCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfUkVBRDsKKwkJCXMtPmRvX2NtZHRlc3QgPSBwY2kxNzF4X2FpX2NtZHRlc3Q7CisJCQlzLT5kb19jbWQgPSBwY2kxNzF4X2FpX2NtZDsKKwkJfQorCQlkZXZwcml2LT5pODI1NF9vc2NfYmFzZSA9IDEwMDsJLy8gMTAwbnM9MTBNSHoKKwkJc3ViZGV2Kys7CisJfQorCisJaWYgKHRoaXNfYm9hcmQtPm5fYW9jaGFuKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YW9fbWF4ZGF0YTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9hb2NoYW47CisJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cmFuZ2VsaXN0X2FvOworCQlzd2l0Y2ggKHRoaXNfYm9hcmQtPmNhcmR0eXBlKSB7CisJCWNhc2UgVFlQRV9QQ0kxNzIwOgorCQkJcy0+aW5zbl93cml0ZSA9IHBjaTE3MjBfaW5zbl93cml0ZV9hbzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcy0+aW5zbl93cml0ZSA9IHBjaTE3MXhfaW5zbl93cml0ZV9hbzsKKwkJCWJyZWFrOworCQl9CisJCXMtPmluc25fcmVhZCA9IHBjaTE3MXhfaW5zbl9yZWFkX2FvOworCQlzdWJkZXYrKzsKKwl9CisKKwlpZiAodGhpc19ib2FyZC0+bl9kaWNoYW4pIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9kaWNoYW47CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2RpY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW9fYml0cyA9IDA7CS8qIGFsbCBiaXRzIGlucHV0ICovCisJCXMtPmluc25fYml0cyA9IHBjaTE3MXhfaW5zbl9iaXRzX2RpOworCQlzdWJkZXYrKzsKKwl9CisKKwlpZiAodGhpc19ib2FyZC0+bl9kb2NoYW4pIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9kb2NoYW47CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2RvY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW9fYml0cyA9ICgxIDw8IHRoaXNfYm9hcmQtPm5fZG9jaGFuKSAtIDE7CS8qIGFsbCBiaXRzIG91dHB1dCAqLworCQlzLT5zdGF0ZSA9IDA7CisJCXMtPmluc25fYml0cyA9IHBjaTE3MXhfaW5zbl9iaXRzX2RvOworCQlzdWJkZXYrKzsKKwl9CisKKwlpZiAodGhpc19ib2FyZC0+bl9jb3VudGVyKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fY291bnRlcjsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9jb3VudGVyOworCQlzLT5tYXhkYXRhID0gMHhmZmZmOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCQlzLT5pbnNuX3JlYWQgPSBwY2kxNzF4X2luc25fY291bnRlcl9yZWFkOworCQlzLT5pbnNuX3dyaXRlID0gcGNpMTcxeF9pbnNuX2NvdW50ZXJfd3JpdGU7CisJCXMtPmluc25fY29uZmlnID0gcGNpMTcxeF9pbnNuX2NvdW50ZXJfY29uZmlnOworCQlzdWJkZXYrKzsKKwl9CisKKwlkZXZwcml2LT52YWxpZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTcxMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKwlpZiAoZGV2LT5wcml2YXRlKSB7CisJCWlmIChkZXZwcml2LT52YWxpZCkKKwkJCXBjaTE3MTBfcmVzZXQoZGV2KTsKKwkJaWYgKGRldi0+aXJxKQorCQkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCQlpZiAoZGV2cHJpdi0+cGNpZGV2KSB7CisJCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaWRldik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3BjaTE3MTAsIHBjaTE3MTBfcGNpX3RhYmxlKTsKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MjMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcyMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZjdlZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWR2X3BjaTE3MjMuYwpAQCAtMCwwICsxLDQ2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgIGNvbWVkaS9kcml2ZXJzL3BjaTE3MjMuYworCisgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorRHJpdmVyOiBhZHZfcGNpMTcyMworRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0ktMTcyMworQXV0aG9yOiB5b25nZ2FuZyA8cnNtZ251QGdtYWlsLmNvbT4sIElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPgorRGV2aWNlczogW0FkdmFudGVjaF0gUENJLTE3MjMgKGFkdl9wY2kxNzIzKQorVXBkYXRlZDogTW9uLCAxNCBBcHIgMjAwOCAxNToxMjo1NiArMDEwMAorU3RhdHVzOiB3b3JrcworCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKworICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3Qgc3VwcG9ydGVkCisgIFBDSSBkZXZpY2UgZm91bmQgd2lsbCBiZSB1c2VkLgorCitTdWJkZXZpY2UgMCBpcyA4LWNoYW5uZWwgQU8sIDE2LWJpdCwgcmFuZ2UgKy8tIDEwIFYuCisKK1N1YmRldmljZSAxIGlzIDE2LWNoYW5uZWwgRElPLiAgVGhlIGNoYW5uZWxzIGFyZSBjb25maWd1cmFibGUgYXMgaW5wdXQgb3IKK291dHB1dCBpbiAyIGdyb3VwcyAoMCB0byA3LCA4IHRvIDE1KS4gIENvbmZpZ3VyaW5nIGFueSBjaGFubmVsIGltcGxpY2l0bHkKK2NvbmZpZ3VyZXMgYWxsIGNoYW5uZWxzIGluIHRoZSBzYW1lIGdyb3VwLgorCitUT0RPOgorCisxLiBBZGQgdGhlIHR3byBtaWxsaWFtcCByYW5nZXMgdG8gdGhlIEFPIHN1YmRldmljZSAoMCB0byAyMCBtQSwgNCB0byAyMCBtQSkuCisyLiBSZWFkIHRoZSBpbml0aWFsIHJhbmdlcyBhbmQgdmFsdWVzIG9mIHRoZSBBTyBzdWJkZXZpY2UgYXQgc3RhcnQtdXAgaW5zdGVhZAorICAgb2YgcmVpbml0aWFsaXppbmcgdGhlbS4KKzMuIEltcGxlbWVudCBjYWxpYnJhdGlvbi4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2RlZmluZSBBRFZBTlRFQ0hfVkVORE9SICAgICAgICAweDEzZmUJLyogQWR2YW50ZWNoIFBDSSB2ZW5kb3IgSUQgKi8KKworLy8gaGFyZHdhcmUgdHlwZXMgb2YgdGhlIGNhcmRzCisjZGVmaW5lIFRZUEVfUENJMTcyMyAwCisKKyNkZWZpbmUgSU9SQU5HRV8xNzIzICAweDJBCisKKy8qIGFsbCB0aGUgcmVnaXN0ZXJzIGZvciB0aGUgcGNpMTcyMyBib2FyZCAqLworI2RlZmluZSBQQ0kxNzIzX0RBKE4pICAgKChOKTw8MSkJLyogVzogICBEL0EgcmVnaXN0ZXIgTiAoMCB0byA3KSAqLworCisjZGVmaW5lIFBDSTE3MjNfU1lOX1NFVCAgMHgxMgkvKnN5bmNocm9uaXplZCBzZXQgcmVnaXN0ZXIgICAgICAgKi8KKyNkZWZpbmUgUENJMTcyM19BTExfQ0hOTkVMRV9TWU5fU1RST0JFICAweDEyCS8qc3luY2hyb25pemVkIHN0YXR1cyByZWdpc3RlciAgICAqLworCisjZGVmaW5lIFBDSTE3MjNfUkFOR0VfQ0FMSUJSQVRJT05fTU9ERSAweDE0CS8qIHJhbmdlIGFuZCBjYWxpYnJhdGlvbiBtb2RlICAgKi8KKyNkZWZpbmUgUENJMTcyM19SQU5HRV9DQUxJQlJBVElPTl9TVEFUVVMgMHgxNAkvKiByYW5nZSBhbmQgY2FsaWJyYXRpb24gc3RhdHVzICovCisKKyNkZWZpbmUgUENJMTcyM19DT05UUk9MX0NNRF9DQUxJQlJBVElPTl9GVU4gMHgxNgkvKiBTQURDIGNvbnRyb2wgY29tbWFuZCBmb3IgY2FsaWJyYXRpb24gZnVuY3Rpb24gKi8KKyNkZWZpbmUgUENJMTcyM19TVEFUVVNfQ01EX0NBTElCUkFUSU9OX0ZVTiAweDE2CS8qIFNBREMgY29udHJvbCBzdGF0dXMgZm9yIGNhbGlicmF0aW9uIGZ1bmN0aW9uICovCisKKyNkZWZpbmUgUENJMTcyM19DQUxJQlJBVElPTl9QQVJBX1NUUk9CRSAweDE4CS8qIENhbGlicmF0aW9uIHBhcmFtZXRlciBzdHJvYmUgKi8KKworI2RlZmluZSBQQ0kxNzIzX0RJR0lUQUxfSU9fUE9SVF9TRVQgMHgxQQkvKiBEaWdpdGFsIEkvTyBwb3J0IHNldHRpbmcgKi8KKyNkZWZpbmUgUENJMTcyM19ESUdJVEFMX0lPX1BPUlRfTU9ERSAweDFBCS8qIERpZ2l0YWwgSS9PIHBvcnQgbW9kZSAqLworCisjZGVmaW5lIFBDSTE3MjNfV1JJVEVfRElHSVRBTF9PVVRQVVRfQ01EIDB4MUMJLyogV3JpdGUgZGlnaXRhbCBvdXRwdXQgY29tbWFuZCAqLworI2RlZmluZSBQQ0kxNzIzX1JFQURfRElHSVRBTF9JTlBVVF9EQVRBIDB4MUMJLyogUmVhZCBkaWdpdGFsIGlucHV0IGRhdGEgKi8KKworI2RlZmluZSBQQ0kxNzIzX1dSSVRFX0NBTF9DTUQgMHgxRQkvKiBXcml0ZSBjYWxpYnJhdGlvbiBjb21tYW5kICovCisjZGVmaW5lIFBDSTE3MjNfUkVBRF9DQUxfU1RBVFVTIDB4MUUJLyogUmVhZCBjYWxpYnJhdGlvbiBzdGF0dXMgKi8KKworI2RlZmluZSBQQ0kxNzIzX1NZTl9TVFJPQkUgMHgyMAkvKiBTeW5jaHJvbml6ZWQgc3Ryb2JlICovCisKKyNkZWZpbmUgUENJMTcyM19SRVNFVF9BTExfQ0hOX1NUUk9CRSAweDIyCS8qIFJlc2V0IGFsbCBEL0EgY2hhbm5lbHMgc3Ryb2JlICovCisKKyNkZWZpbmUgUENJMTcyM19SRVNFVF9DQUxfQ09OVFJPTF9TVFJPQkUgMHgyNAkvKiBSZXNldCB0aGUgY2FsaWJyYXRpb24gY29udHJvbGxlciBzdHJvYmUgKi8KKworI2RlZmluZSBQQ0kxNzIzX0NIQU5HRV9DSEFfT1VUUFVUX1RZUEVfU1RST0JFIDB4MjYJLyogQ2hhbmdlIEQvQSBjaGFubmVscyBvdXRwdXQgdHlwZSBzdHJvYmUgKi8KKworI2RlZmluZSBQQ0kxNzIzX1NFTEVDVF9DQUxJQlJBVElPTiAweDI4CS8qIFNlbGVjdCB0aGUgY2FsaWJyYXRpb24gUmVmX1YgKi8KKworLy9zdGF0aWMgdW5zaWduZWQgc2hvcnQgcGNpX2xpc3RfYnVpbGRlZD0wOyAgICAgLyo9MSBsaXN0IG9mIGNhcmQgaXMga25vdyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcGNpMTcyMyA9IHsgMSwgeworCQkJQklQX1JBTkdFKDEwKQorCX0KK307CisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHBjaTE3MjMgYm9hcmRzLgorICovCitzdHJ1Y3QgcGNpMTcyM19ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgdmVuZG9yX2lkOwkJLy8gUENJIHZlbmRvciBhIGRldmljZSBJRCBvZiBjYXJkCisJaW50IGRldmljZV9pZDsKKwlpbnQgaW9yYW5nZTsKKwljaGFyIGNhcmR0eXBlOworCWludCBuX2FvY2hhbjsJCS8vIG51bSBvZiBEL0EgY2hhbnMKKwlpbnQgbl9kaW9jaGFuOwkJLy8gbnVtIG9mIERJTyBjaGFucworCWludCBhb19tYXhkYXRhOwkJLy8gcmVzb2x1dGlvbiBvZiBEL0EKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FvOwkvLyByYW5nZWxpc3QgZm9yIEQvQQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2kxNzIzX2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjaTE3MjMiLAorCSAgICAgIHZlbmRvcl9pZDpBRFZBTlRFQ0hfVkVORE9SLAorCSAgICAgIGRldmljZV9pZDoweDE3MjMsCisJICAgICAgaW9yYW5nZToJSU9SQU5HRV8xNzIzLAorCSAgICAgIGNhcmR0eXBlOlRZUEVfUENJMTcyMywKKwkgICAgICBuX2FvY2hhbjo4LAorCSAgICAgIG5fZGlvY2hhbjoxNiwKKwkgICAgICBhb19tYXhkYXRhOjB4ZmZmZiwKKwkgICAgICByYW5nZWxpc3RfYW86JnJhbmdlX3BjaTE3MjMsCisJCX0sCit9OworCisvKiBUaGlzIGlzIHVzZWQgYnkgbW9kcHJvYmUgdG8gdHJhbnNsYXRlIFBDSSBJRHMgdG8gZHJpdmVycy4gIFNob3VsZAorICogb25seSBiZSB1c2VkIGZvciBQQ0kgYW5kIElTQS1QblAgZGV2aWNlcyAqLworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjaTE3MjNfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTcyMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpMTcyM19wY2lfdGFibGUpOworCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBwY2kxNzIzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjaTE3MjNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IHBjaTE3MjNfYm9hcmQpKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjaTE3MjMgPSB7CisgICAgICBkcml2ZXJfbmFtZToiYWR2X3BjaTE3MjMiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjaTE3MjNfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjaTE3MjNfZGV0YWNoLAorfTsKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAqLworc3RydWN0IHBjaTE3MjNfcHJpdmF0ZSB7CisJaW50IHZhbGlkOwkJLy9jYXJkIGlzIHVzYWJsZTsKKworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJdW5zaWduZWQgY2hhciBkYV9yYW5nZVs4XTsJLy8gRC9BIG91dHB1dCByYW5nZSBmb3IgZWFjaCBjaGFubmVsCisKKwlzaG9ydCBhb19kYXRhWzhdOwkvLyBkYXRhIG91dHB1dCBidWZmZXIKK307CisKKy8qdGhlIGZvbGxvd2luZyBtYWNybyB0byBtYWtlIGl0IGVhc3kgdG8KKyogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpMTcyM19wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisjZGVmaW5lIHRoaXNfYm9hcmQgYm9hcmR0eXBlcworCisvKgorICogICB0aGUgcGNpMTcyMyBjYXJkIHJlc2V0OworICovCitzdGF0aWMgaW50IHBjaTE3MjNfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisJRFBSSU5USygiYWR2X3BjaTE3MjMgRURCRzogQkdOOiBwY2kxNzIzX3Jlc2V0KC4uLilcbiIpOworCisJb3V0dygweDAxLCBkZXYtPmlvYmFzZSArIFBDSTE3MjNfU1lOX1NFVCk7CS8vIHNldCBzeW5jaHJvbm91cyBvdXRwdXQgbW9kZQorCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkvLyBzZXQgYWxsIG91dHB1dHMgdG8gMFYKKwkJZGV2cHJpdi0+YW9fZGF0YVtpXSA9IDB4ODAwMDsKKwkJb3V0dyhkZXZwcml2LT5hb19kYXRhW2ldLCBkZXYtPmlvYmFzZSArIFBDSTE3MjNfREEoaSkpOworCQkvLyBzZXQgYWxsIHJhbmdlcyB0byArLy0gMTBWCisJCWRldnByaXYtPmRhX3JhbmdlW2ldID0gMDsKKwkJb3V0dygoKGRldnByaXYtPmRhX3JhbmdlW2ldIDw8IDQpIHwgaSksCisJCQlQQ0kxNzIzX1JBTkdFX0NBTElCUkFUSU9OX01PREUpOworCX0KKworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX0NIQU5HRV9DSEFfT1VUUFVUX1RZUEVfU1RST0JFKTsJLy8gdXBkYXRlIHJhbmdlcworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX1NZTl9TVFJPQkUpOwkvLyB1cGRhdGUgb3V0cHV0cworCisJLy8gc2V0IGFzeW5jaHJvbm91cyBvdXRwdXQgbW9kZQorCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX1NZTl9TRVQpOworCisJRFBSSU5USygiYWR2X3BjaTE3MjMgRURCRzogRU5EOiBwY2kxNzIzX3Jlc2V0KC4uLilcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaTE3MjNfaW5zbl9yZWFkX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlEUFJJTlRLKCIgYWR2X1BDSTE3MjMgREVCVUc6IHBjaTE3MjNfaW5zbl9yZWFkX2FvKCkgLS0tLS0gXG4iKTsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKQorCQlkYXRhW25dID0gZGV2cHJpdi0+YW9fZGF0YVtjaGFuXTsKKworCXJldHVybiBuOworfQorCisvKgorICBhbmFsb2cgZGF0YSBvdXRwdXQ7CisqLworc3RhdGljIGludCBwY2kxNzIzX2FvX3dyaXRlX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgY2hhbjsKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlEUFJJTlRLKCJQQ0kxNzIzOiB0aGUgcGNpMTcyM19hb193cml0ZV93aW5zbigpIC0tLS0tLVxuIik7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisKKwkJZGV2cHJpdi0+YW9fZGF0YVtjaGFuXSA9IGRhdGFbbl07CisJCW91dHcoZGF0YVtuXSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX0RBKGNoYW4pKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworLyoKKyAgZGlnaXRhbCBpL28gY29uZmlnL3F1ZXJ5CisqLworc3RhdGljIGludCBwY2kxNzIzX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisJdW5zaWduZWQgaW50IGJpdHM7CisJdW5zaWduZWQgc2hvcnQgZGlvX21vZGU7CisKKwltYXNrID0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAobWFzayAmIDB4MDBGRikgeworCQliaXRzID0gMHgwMEZGOworCX0gZWxzZSB7CisJCWJpdHMgPSAweEZGMDA7CisJfQorCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH5iaXRzOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gYml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIGJpdHMpID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLy8gdXBkYXRlIGhhcmR3YXJlIERJTyBtb2RlCisJZGlvX21vZGUgPSAweDAwMDA7CS8vIGxvdyBieXRlIG91dHB1dCwgaGlnaCBieXRlIG91dHB1dAorCWlmICgocy0+aW9fYml0cyAmIDB4MDBGRikgPT0gMCkKKwkJZGlvX21vZGUgfD0gMHgwMDAxOwkvLyBsb3cgYnl0ZSBpbnB1dAorCWlmICgocy0+aW9fYml0cyAmIDB4RkYwMCkgPT0gMCkKKwkJZGlvX21vZGUgfD0gMHgwMDAyOwkvLyBoaWdoIGJ5dGUgaW5wdXQKKwlvdXR3KGRpb19tb2RlLCBkZXYtPmlvYmFzZSArIFBDSTE3MjNfRElHSVRBTF9JT19QT1JUX1NFVCk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgIGRpZ2l0YWwgaS9vIGJpdHMgcmVhZC93cml0ZQorKi8KK3N0YXRpYyBpbnQgcGNpMTcyM19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJb3V0dyhzLT5zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX1dSSVRFX0RJR0lUQUxfT1VUUFVUX0NNRCk7CisJfQorCWRhdGFbMV0gPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kxNzIzX1JFQURfRElHSVRBTF9JTlBVVF9EQVRBKTsKKwlyZXR1cm4gMjsKK30KKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwY2kxNzIzIGJvYXJkLgorICovCitzdGF0aWMgaW50IHBjaTE3MjNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQsIHN1YmRldiwgbl9zdWJkZXZpY2VzOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJdW5zaWduZWQgaW50IGlvYmFzZTsKKwl1bnNpZ25lZCBjaGFyIHBjaV9idXMsIHBjaV9zbG90LCBwY2lfZnVuYzsKKwlpbnQgb3B0X2J1cywgb3B0X3Nsb3Q7CisJY29uc3QgY2hhciAqZXJyc3RyOworCisJcnRfcHJpbnRrKCJjb21lZGklZDogYWR2X3BjaTE3MjM6IGJvYXJkPSVzIiwgZGV2LT5taW5vciwKKwkJdGhpc19ib2FyZC0+bmFtZSk7CisKKwlvcHRfYnVzID0gaXQtPm9wdGlvbnNbMF07CisJb3B0X3Nsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNpMTcyM19wcml2YXRlKSkpIDwgMCkgeworCQlydF9wcmludGsoIiAtIEFsbG9jYXRpb24gZmFpbGVkIVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIExvb2sgZm9yIG1hdGNoaW5nIFBDSSBkZXZpY2UgKi8KKwllcnJzdHIgPSAibm90IGZvdW5kISI7CisJcGNpZGV2ID0gTlVMTDsKKwl3aGlsZSAoTlVMTCAhPSAocGNpZGV2ID0KKwkJCXBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQURWQU5URUNILAorCQkJCXRoaXNfYm9hcmQtPmRldmljZV9pZCwgcGNpZGV2KSkpIHsKKwkJLyogRm91bmQgbWF0Y2hpbmcgdmVuZG9yL2RldmljZS4gKi8KKwkJaWYgKG9wdF9idXMgfHwgb3B0X3Nsb3QpIHsKKwkJCS8qIENoZWNrIGJ1cy9zbG90LiAqLworCQkJaWYgKG9wdF9idXMgIT0gcGNpZGV2LT5idXMtPm51bWJlcgorCQkJCXx8IG9wdF9zbG90ICE9IFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOwkvKiBubyBtYXRjaCAqLworCQl9CisJCS8qCisJCSAqIExvb2sgZm9yIGRldmljZSB0aGF0IGlzbid0IGluIHVzZS4KKwkJICogRW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucy4KKwkJICovCisJCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsICJhZHZfcGNpMTcyMyIpKSB7CisJCQllcnJzdHIgPSAiZmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMhIjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKworCWlmICghcGNpZGV2KSB7CisJCWlmIChvcHRfYnVzIHx8IG9wdF9zbG90KSB7CisJCQlydF9wcmludGsoIiAtIENhcmQgYXQgYjpzICVkOiVkICVzXG4iLAorCQkJCW9wdF9idXMsIG9wdF9zbG90LCBlcnJzdHIpOworCQl9IGVsc2UgeworCQkJcnRfcHJpbnRrKCIgLSBDYXJkICVzXG4iLCBlcnJzdHIpOworCQl9CisJCXJldHVybiAtRUlPOworCX0KKworCXBjaV9idXMgPSBwY2lkZXYtPmJ1cy0+bnVtYmVyOworCXBjaV9zbG90ID0gUENJX1NMT1QocGNpZGV2LT5kZXZmbik7CisJcGNpX2Z1bmMgPSBQQ0lfRlVOQyhwY2lkZXYtPmRldmZuKTsKKwlpb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKworCXJ0X3ByaW50aygiLCBiOnM6Zj0lZDolZDolZCwgaW89MHglNHgiLCBwY2lfYnVzLCBwY2lfc2xvdCwgcGNpX2Z1bmMsCisJCWlvYmFzZSk7CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisJZGV2cHJpdi0+cGNpZGV2ID0gcGNpZGV2OworCisJbl9zdWJkZXZpY2VzID0gMDsKKworCWlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbikKKwkJbl9zdWJkZXZpY2VzKys7CisJaWYgKHRoaXNfYm9hcmQtPm5fZGlvY2hhbikKKwkJbl9zdWJkZXZpY2VzKys7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldmljZXMpKSA8IDApIHsKKwkJcnRfcHJpbnRrKCIgLSBBbGxvY2F0aW9uIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBjaTE3MjNfcmVzZXQoZGV2KTsKKwlzdWJkZXYgPSAwOworCWlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbikgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRFQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FvY2hhbjsKKwkJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmFvX21heGRhdGE7CisJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnJhbmdlbGlzdF9hbzsKKworCQlzLT5pbnNuX3dyaXRlID0gcGNpMTcyM19hb193cml0ZV93aW5zbjsKKwkJcy0+aW5zbl9yZWFkID0gcGNpMTcyM19pbnNuX3JlYWRfYW87CisKKwkJLy8gcmVhZCBESU8gY29uZmlnCisJCXN3aXRjaCAoaW53KGRldi0+aW9iYXNlICsgUENJMTcyM19ESUdJVEFMX0lPX1BPUlRfTU9ERSkgJiAweDAzKSB7CisJCWNhc2UgMHgwMDoJLy8gbG93IGJ5dGUgb3V0cHV0LCBoaWdoIGJ5dGUgb3V0cHV0CisJCQlzLT5pb19iaXRzID0gMHhGRkZGOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMToJLy8gbG93IGJ5dGUgaW5wdXQsIGhpZ2ggYnl0ZSBvdXRwdXQKKwkJCXMtPmlvX2JpdHMgPSAweEZGMDA7CisJCQlicmVhazsKKwkJY2FzZSAweDAyOgkvLyBsb3cgYnl0ZSBvdXRwdXQsIGhpZ2ggYnl0ZSBpbnB1dAorCQkJcy0+aW9fYml0cyA9IDB4MDBGRjsKKwkJCWJyZWFrOworCQljYXNlIDB4MDM6CS8vIGxvdyBieXRlIGlucHV0LCBoaWdoIGJ5dGUgaW5wdXQKKwkJCXMtPmlvX2JpdHMgPSAweDAwMDA7CisJCQlicmVhazsKKwkJfQorCQkvLyByZWFkIERJTyBwb3J0IHN0YXRlCisJCXMtPnN0YXRlID0gaW53KGRldi0+aW9iYXNlICsgUENJMTcyM19SRUFEX0RJR0lUQUxfSU5QVVRfREFUQSk7CisKKwkJc3ViZGV2Kys7CisJfQorCisJaWYgKHRoaXNfYm9hcmQtPm5fZGlvY2hhbikgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT047CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fZGlvY2hhbjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fZGlvY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9jb25maWcgPSBwY2kxNzIzX2Rpb19pbnNuX2NvbmZpZzsKKwkJcy0+aW5zbl9iaXRzID0gcGNpMTcyM19kaW9faW5zbl9iaXRzOworCQlzdWJkZXYrKzsKKwl9CisKKwlkZXZwcml2LT52YWxpZCA9IDE7CisKKwlwY2kxNzIzX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBwY2kxNzIzX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBwY2kxNzIzOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+dmFsaWQpCisJCQlwY2kxNzIzX3Jlc2V0KGRldik7CisKKwkJaWYgKGRldnByaXYtPnBjaWRldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaWRldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lkZXYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3BjaTE3MjMsIHBjaTE3MjNfcGNpX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2lfZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwNDQyNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpX2Rpby5jCkBAIC0wLDAgKzEsMTA3NyBAQAorLyoKKyAqIGNvbWVkaS9kcml2ZXJzL2Fkdl9wY2lfZGlvLmMKKyAqCisgKiBBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorICoKKyAqICBIYXJkd2FyZSBkcml2ZXIgZm9yIEFkdmFudGVjaCBQQ0kgRElPIGNhcmRzLgorKi8KKy8qCitEcml2ZXI6IGFkdl9wY2lfZGlvCitEZXNjcmlwdGlvbjogQWR2YW50ZWNoIFBDSS0xNzMwLCBQQ0ktMTczMywgUENJLTE3MzQsIFBDSS0xNzM2VVAsCisgICAgICAgICAgICAgUENJLTE3NTAsIFBDSS0xNzUxLCBQQ0ktMTc1MiwgUENJLTE3NTMvRSwgUENJLTE3NTQsCisgICAgICAgICAgICAgUENJLTE3NTYsIFBDSS0xNzYyCitBdXRob3I6IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PgorRGV2aWNlczogW0FkdmFudGVjaF0gUENJLTE3MzAgKGFkdl9wY2lfZGlvKSwgUENJLTE3MzMsCisgIFBDSS0xNzM0LCBQQ0ktMTczNlVQLCBQQ0ktMTc1MCwKKyAgUENJLTE3NTEsIFBDSS0xNzUyLCBQQ0ktMTc1MywKKyAgUENJLTE3NTMrUENJLTE3NTNFLCBQQ0ktMTc1NCwgUENJLTE3NTYsCisgIFBDSS0xNzYwLCBQQ0ktMTc2MgorU3RhdHVzOiB1bnRlc3RlZAorVXBkYXRlZDogTW9uLCAxNCBBcHIgMjAwOCAxMDo0MzowOCArMDEwMAorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBub3cgb25seSBpbnNuIGludGVyZmFjZSBmb3IgREkvRE8vRElPLgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgICAgICAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSQorICAgICAgICAgIGRldmljZSB3aWxsIGJlIHVzZWQuCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiODI1NS5oIgorCisjdW5kZWYgUENJX0RJT19FWFRERUJVRwkJLyogaWYgZGVmaW5lZCwgZW5hYmxlIGV4dGVuc2l2ZSBkZWJ1ZyBsb2dnaW5nICovCisKKyN1bmRlZiBEUFJJTlRLCisjaWZkZWYgUENJX0RJT19FWFRERUJVRworI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikgcnRfcHJpbnRrKGZtdCwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKQorI2VuZGlmCisKKy8qIGhhcmR3YXJlIHR5cGVzIG9mIHRoZSBjYXJkcyAqLworZW51bSBod19jYXJkc19pZCB7CisJVFlQRV9QQ0kxNzMwLCBUWVBFX1BDSTE3MzMsIFRZUEVfUENJMTczNCwgVFlQRV9QQ0kxNzM2LAorCVRZUEVfUENJMTc1MCwKKwlUWVBFX1BDSTE3NTEsCisJVFlQRV9QQ0kxNzUyLAorCVRZUEVfUENJMTc1MywgVFlQRV9QQ0kxNzUzRSwKKwlUWVBFX1BDSTE3NTQsIFRZUEVfUENJMTc1NiwKKwlUWVBFX1BDSTE3NjAsCisJVFlQRV9QQ0kxNzYyCit9OworCisvKiB3aGljaCBJL08gaW5zdHJ1Y3Rpb25zIHRvIHVzZSAqLworZW51bSBod19pb19hY2Nlc3MgeworCUlPXzhiLCBJT18xNmIKK307CisKKyNkZWZpbmUgTUFYX0RJX1NVQkRFVlMJMgkvKiBtYXggbnVtYmVyIG9mIERJIHN1YmRldmljZXMgcGVyIGNhcmQgKi8KKyNkZWZpbmUgTUFYX0RPX1NVQkRFVlMJMgkvKiBtYXggbnVtYmVyIG9mIERPIHN1YmRldmljZXMgcGVyIGNhcmQgKi8KKyNkZWZpbmUgTUFYX0RJT19TVUJERVZHCTIJLyogbWF4IG51bWJlciBvZiBESU8gc3ViZGV2aWNlcyBncm91cCBwZXIgY2FyZCAqLworCisjZGVmaW5lIFNJWkVfODI1NQkgICA0CS8qIDgyNTUgSU8gc3BhY2UgbGVuZ3RoICovCisKKyNkZWZpbmUgUENJRElPX01BSU5SRUcJICAgMgkvKiBtYWluIEkvTyByZWdpb24gZm9yIGFsbCBBZHZhbnRlY2ggY2FyZHM/ICovCisKKy8qIFJlZ2lzdGVyIG9mZnNldCBkZWZpbml0aW9ucyAqLworLyogIEFkdmFudGVjaCBQQ0ktMTczMC8zLzQgKi8KKyNkZWZpbmUgUENJMTczMF9JREkJICAgMAkvKiBSOiAgIElzb2xhdGVkIGRpZ2l0YWwgaW5wdXQgIDAtMTUgKi8KKyNkZWZpbmUgUENJMTczMF9JRE8JICAgMAkvKiBXOiAgIElzb2xhdGVkIGRpZ2l0YWwgb3V0cHV0IDAtMTUgKi8KKyNkZWZpbmUgUENJMTczMF9ESQkgICAyCS8qIFI6ICAgRGlnaXRhbCBpbnB1dCAgMC0xNSAqLworI2RlZmluZSBQQ0kxNzMwX0RPCSAgIDIJLyogVzogICBEaWdpdGFsIG91dHB1dCAwLTE1ICovCisjZGVmaW5lIFBDSTE3MzNfSURJCSAgIDAJLyogUjogICBJc29sYXRlZCBkaWdpdGFsIGlucHV0ICAwLTMxICovCisjZGVmaW5lCVBDSTE3MzBfM19JTlRfRU4JMHgwOAkvKiBSL1c6IGVuYWJsZS9kaXNhYmxlIGludGVycnVwdHMgKi8KKyNkZWZpbmUJUENJMTczMF8zX0lOVF9SRgkweDBjCS8qIFIvVzogc2V0IGZhbGxpbmcvcmFpc2luZyBlZGdlIGZvciBpbnRlcnJ1cHRzICovCisjZGVmaW5lCVBDSTE3MzBfM19JTlRfQ0xSCTB4MTAJLyogUi9XOiBjbGVhciBpbnRlcnJ1cHRzICovCisjZGVmaW5lIFBDSTE3MzRfSURPCSAgIDAJLyogVzogICBJc29sYXRlZCBkaWdpdGFsIG91dHB1dCAwLTMxICovCisjZGVmaW5lIFBDSTE3M3hfQk9BUkRJRAkgICA0CS8qIFI6ICAgQm9hcmQgSS9EIHN3aXRjaCBmb3IgMTczMC8zLzQgKi8KKworLyogIEFkdmFudGVjaCBQQ0ktMTczNlVQICovCisjZGVmaW5lIFBDSTE3MzZfSURJICAgICAgICAwICAgIC8qIFI6ICAgSXNvbGF0ZWQgZGlnaXRhbCBpbnB1dCAgMC0xNSAqLworI2RlZmluZSBQQ0kxNzM2X0lETyAgICAgICAgMCAgICAvKiBXOiAgIElzb2xhdGVkIGRpZ2l0YWwgb3V0cHV0IDAtMTUgKi8KKyNkZWZpbmUgUENJMTczNl8zX0lOVF9FTiAgICAgICAgMHgwOCAgICAvKiBSL1c6IGVuYWJsZS9kaXNhYmxlIGludGVycnVwdHMgKi8KKyNkZWZpbmUgUENJMTczNl8zX0lOVF9SRiAgICAgICAgMHgwYyAgICAvKiBSL1c6IHNldCBmYWxsaW5nL3JhaXNpbmcgZWRnZSBmb3IgaW50ZXJydXB0cyAqLworI2RlZmluZSBQQ0kxNzM2XzNfSU5UX0NMUiAgICAgICAweDEwICAgIC8qIFIvVzogY2xlYXIgaW50ZXJydXB0cyAqLworI2RlZmluZSBQQ0kxNzM2X0JPQVJESUQgICAgNCAgICAgICAgICAgIC8qIFI6ICAgQm9hcmQgSS9EIHN3aXRjaCBmb3IgMTczNlVQICovCisjZGVmaW5lIFBDSTE3MzZfTUFJTlJFRyAgICAwICAgICAgICAgICAgLyogTm9ybWFsIHJlZ2lzdGVyICgyKSBkb2Vzbid0IHdvcmsgKi8KKworLyogIEFkdmFudGVjaCBQQ0ktMTc1MCAqLworI2RlZmluZSBQQ0kxNzUwX0lESQkgICAwCS8qIFI6ICAgSXNvbGF0ZWQgZGlnaXRhbCBpbnB1dCAgMC0xNSAqLworI2RlZmluZSBQQ0kxNzUwX0lETwkgICAwCS8qIFc6ICAgSXNvbGF0ZWQgZGlnaXRhbCBvdXRwdXQgMC0xNSAqLworI2RlZmluZSBQQ0kxNzUwX0lDUgkgIDMyCS8qIFc6ICAgSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTc1MF9JU1IJICAzMgkvKiBSOiAgIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKworLyogIEFkdmFudGVjaCBQQ0ktMTc1MS8zLzNFICovCisjZGVmaW5lIFBDSTE3NTFfRElPCSAgIDAJLyogUi9XOiBiZWdpbiBvZiA4MjU1IHJlZ2lzdGVycyBibG9jayAqLworI2RlZmluZSBQQ0kxNzUxX0lDUgkgIDMyCS8qIFc6ICAgSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTc1MV9JU1IJICAzMgkvKiBSOiAgIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJMTc1M19ESU8JICAgMAkvKiBSL1c6IGJlZ2luIG9mIDgyNTUgcmVnaXN0ZXJzIGJsb2NrICovCisjZGVmaW5lIFBDSTE3NTNfSUNSMAkgIDE2CS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMCAqLworI2RlZmluZSBQQ0kxNzUzX0lDUjEJICAxNwkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDEgKi8KKyNkZWZpbmUgUENJMTc1M19JQ1IyCSAgMTgJLyogUi9XOiBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBncm91cCAyICovCisjZGVmaW5lIFBDSTE3NTNfSUNSMwkgIDE5CS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMyAqLworI2RlZmluZSBQQ0kxNzUzRV9ESU8JICAzMgkvKiBSL1c6IGJlZ2luIG9mIDgyNTUgcmVnaXN0ZXJzIGJsb2NrICovCisjZGVmaW5lIFBDSTE3NTNFX0lDUjAJICA0OAkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDAgKi8KKyNkZWZpbmUgUENJMTc1M0VfSUNSMQkgIDQ5CS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMSAqLworI2RlZmluZSBQQ0kxNzUzRV9JQ1IyCSAgNTAJLyogUi9XOiBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBncm91cCAyICovCisjZGVmaW5lIFBDSTE3NTNFX0lDUjMJICA1MQkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDMgKi8KKworLyogIEFkdmFudGVjaCBQQ0ktMTc1Mi80LzYgKi8KKyNkZWZpbmUgUENJMTc1Ml9JRE8JICAgMAkvKiBSL1c6IERpZ2l0YWwgb3V0cHV0ICAwLTMxICovCisjZGVmaW5lIFBDSTE3NTJfSURPMgkgICA0CS8qIFIvVzogRGlnaXRhbCBvdXRwdXQgMzItNjMgKi8KKyNkZWZpbmUgUENJMTc1NF9JREkJICAgMAkvKiBSOiAgIERpZ2l0YWwgaW5wdXQgICAwLTMxICovCisjZGVmaW5lIFBDSTE3NTRfSURJMgkgICA0CS8qIFI6ICAgRGlnaXRhbCBpbnB1dCAgMzItNjQgKi8KKyNkZWZpbmUgUENJMTc1Nl9JREkJICAgMAkvKiBSOiAgIERpZ2l0YWwgaW5wdXQgICAwLTMxICovCisjZGVmaW5lIFBDSTE3NTZfSURPCSAgIDQJLyogUi9XOiBEaWdpdGFsIG91dHB1dCAgMC0zMSAqLworI2RlZmluZSBQQ0kxNzU0XzZfSUNSMAkweDA4CS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMCAqLworI2RlZmluZSBQQ0kxNzU0XzZfSUNSMQkweDBhCS8qIFIvVzogSW50ZXJydXB0IGNvbnRyb2wgcmVnaXN0ZXIgZ3JvdXAgMSAqLworI2RlZmluZSBQQ0kxNzU0X0lDUjIJMHgwYwkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyIGdyb3VwIDIgKi8KKyNkZWZpbmUgUENJMTc1NF9JQ1IzCTB4MGUJLyogUi9XOiBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciBncm91cCAzICovCisjZGVmaW5lIFBDSTE3NTJfNl9DRkMJMHgxMgkvKiBSL1c6IHNldC9yZWFkIGNoYW5uZWwgZnJlZXplIGZ1bmN0aW9uICovCisjZGVmaW5lIFBDSTE3NXhfQk9BUkRJRAkweDEwCS8qIFI6ICAgQm9hcmQgSS9EIHN3aXRjaCBmb3IgMTc1Mi80LzYgKi8KKworLyogIEFkdmFudGVjaCBQQ0ktMTc2MiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUENJMTc2Ml9STwkgICAwCS8qIFIvVzogUmVsYXlzIHN0YXR1cy9vdXRwdXQgKi8KKyNkZWZpbmUgUENJMTc2Ml9JREkJICAgMgkvKiBSOiAgIElzb2xhdGVkIGlucHV0IHN0YXR1cyAqLworI2RlZmluZSBQQ0kxNzYyX0JPQVJESUQJICAgNAkvKiBSOiAgIEJvYXJkIEkvRCBzd2l0Y2ggKi8KKyNkZWZpbmUgUENJMTc2Ml9JQ1IJICAgNgkvKiBXOiAgIEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTE3NjJfSVNSCSAgIDYJLyogUjogICBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisKKy8qICBBZHZhbnRlY2ggUENJLTE3NjAgcmVnaXN0ZXJzICovCisjZGVmaW5lIE9NQjAJCTB4MGMJLyogVzogICBNYWlsYm94IG91dGdvaW5nIHJlZ2lzdGVycyAqLworI2RlZmluZSBPTUIxCQkweDBkCisjZGVmaW5lIE9NQjIJCTB4MGUKKyNkZWZpbmUgT01CMwkJMHgwZgorI2RlZmluZSBJTUIwCQkweDFjCS8qIFI6ICAgTWFpbGJveCBpbmNvbWluZyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSU1CMQkJMHgxZAorI2RlZmluZSBJTUIyCQkweDFlCisjZGVmaW5lIElNQjMJCTB4MWYKKyNkZWZpbmUgSU5UQ1NSMAkJMHgzOAkvKiBSL1c6IEludGVycnVwdCBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBJTlRDU1IxCQkweDM5CisjZGVmaW5lIElOVENTUjIJCTB4M2EKKyNkZWZpbmUgSU5UQ1NSMwkJMHgzYgorCisvKiAgUENJLTE3NjAgbWFpbGJveCBjb21tYW5kcyAqLworI2RlZmluZSBDTURfQ2xlYXJJTUIyCQkweDAwCS8qIENsZWFyIElNQjIgc3RhdHVzIGFuZCByZXR1cm4gYWN0YXVsIERJIHN0YXR1cyBpbiBJTUIzICovCisjZGVmaW5lIENNRF9TZXRSZWxheXNPdXRwdXQJMHgwMQkvKiBTZXQgcmVsYXkgb3V0cHV0IGZyb20gT01CMCAqLworI2RlZmluZSBDTURfR2V0UmVsYXlzU3RhdHVzCTB4MDIJLyogR2V0IHJlbGF5IHN0YXR1cyB0byBJTUIwICovCisjZGVmaW5lIENNRF9SZWFkQ3VycmVudFN0YXR1cwkweDA3CS8qIFJlYWQgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSByZWdpc3RlciBpbiBPTUIwLCByZXN1bHQgaW4gSU1CMCAqLworI2RlZmluZSBDTURfUmVhZEZpcm13YXJlVmVyc2lvbgkweDBlCS8qIFJlYWQgdGhlIGZpcm13YXJlIHZlci4sIHJlc3VsdCBpbiBJTUIxLklNQjAgKi8KKyNkZWZpbmUgQ01EX1JlYWRIYXJkd2FyZVZlcnNpb24JMHgwZgkvKiBSZWFkIHRoZSBoYXJkd2FyZSB2ZXIuLCByZXN1bHQgaW4gSU1CMS5JTUIwICovCisjZGVmaW5lIENNRF9FbmFibGVJRElGaWx0ZXJzCTB4MjAJLyogRW5hYmxlIElESSBmaWx0ZXJzIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLworI2RlZmluZSBDTURfRW5hYmxlSURJUGF0dGVybk1hdGNoIDB4MjEJLyogRW5hYmxlIElESSBwYXR0ZXJuIG1hdGNoIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJUGF0dGVybk1hdGNoCTB4MjIJLyogRW5hYmxlIElESSBwYXR0ZXJuIG1hdGNoIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLworI2RlZmluZSBDTURfRW5hYmxlSURJQ291bnRlcnMJMHgyOAkvKiBFbmFibGUgSURJIGNvdW50ZXJzIGJhc2VkIG9uIGJpdHMgaW4gT01CMCAqLworI2RlZmluZSBDTURfUmVzZXRJRElDb3VudGVycwkweDI5CS8qIFJlc2V0IElESSBjb3VudGVycyBiYXNlZCBvbiBiaXRzIGluIE9NQjAgdG8gaXRzIHJlc2V0IHZhbHVlcyAqLworI2RlZmluZSBDTURfT3ZlcmZsb3dJRElDb3VudGVycwkweDJhCS8qIEVuYWJsZSBJREkgY291bnRlcnMgb3ZlcmZsb3cgaW50ZXJydXB0cyAgYmFzZWQgb24gYml0cyBpbiBPTUIwICovCisjZGVmaW5lIENNRF9NYXRjaEludElESUNvdW50ZXJzCTB4MmIJLyogRW5hYmxlIElESSBjb3VudGVycyBtYXRjaCB2YWx1ZSBpbnRlcnJ1cHRzICBiYXNlZCBvbiBiaXRzIGluIE9NQjAgKi8KKyNkZWZpbmUgQ01EX0VkZ2VJRElDb3VudGVycwkweDJjCS8qIFNldCBJREkgdXAgY291bnRlcnMgY291bnQgZWRnZSAoYml0PTAgLSByaXNpbmcsID0xIC0gZmFsbGluZykgKi8KKyNkZWZpbmUgQ01EX0dldElESUNudEN1clZhbHVlCTB4MmYJLyogUmVhZCBJREl7T01CMH0gdXAgY291bnRlciBjdXJyZW50IHZhbHVlICovCisjZGVmaW5lIENNRF9TZXRJREkwQ250UmVzZXRWYWx1ZSAweDQwCS8qIFNldCBJREkwIENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJMUNudFJlc2V0VmFsdWUgMHg0MQkvKiBTZXQgSURJMSBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTJDbnRSZXNldFZhbHVlIDB4NDIJLyogU2V0IElESTIgQ291bnRlciBSZXNldCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREkzQ250UmVzZXRWYWx1ZSAweDQzCS8qIFNldCBJREkzIENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJNENudFJlc2V0VmFsdWUgMHg0NAkvKiBTZXQgSURJNCBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTVDbnRSZXNldFZhbHVlIDB4NDUJLyogU2V0IElESTUgQ291bnRlciBSZXNldCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk2Q250UmVzZXRWYWx1ZSAweDQ2CS8qIFNldCBJREk2IENvdW50ZXIgUmVzZXQgVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJN0NudFJlc2V0VmFsdWUgMHg0NwkvKiBTZXQgSURJNyBDb3VudGVyIFJlc2V0IFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTBDbnRNYXRjaFZhbHVlIDB4NDgJLyogU2V0IElESTAgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREkxQ250TWF0Y2hWYWx1ZSAweDQ5CS8qIFNldCBJREkxIENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJMkNudE1hdGNoVmFsdWUgMHg0YQkvKiBTZXQgSURJMiBDb3VudGVyIE1hdGNoIFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTNDbnRNYXRjaFZhbHVlIDB4NGIJLyogU2V0IElESTMgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk0Q250TWF0Y2hWYWx1ZSAweDRjCS8qIFNldCBJREk0IENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLworI2RlZmluZSBDTURfU2V0SURJNUNudE1hdGNoVmFsdWUgMHg0ZAkvKiBTZXQgSURJNSBDb3VudGVyIE1hdGNoIFZhbHVlIDI1NipPTUIxK09NQjAgKi8KKyNkZWZpbmUgQ01EX1NldElESTZDbnRNYXRjaFZhbHVlIDB4NGUJLyogU2V0IElESTYgQ291bnRlciBNYXRjaCBWYWx1ZSAyNTYqT01CMStPTUIwICovCisjZGVmaW5lIENNRF9TZXRJREk3Q250TWF0Y2hWYWx1ZSAweDRmCS8qIFNldCBJREk3IENvdW50ZXIgTWF0Y2ggVmFsdWUgMjU2Kk9NQjErT01CMCAqLworCisjZGVmaW5lIE9NQkNNRF9SRVRSWQkweDAzCS8qIDMgdGltZXMgdHJ5IHJlcXVlc3QgYmVmb3JlIGVycm9yICovCisKK3N0YXRpYyBpbnQgcGNpX2Rpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2lfZGlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0cnVjdCBkaW9zdWJkX2RhdGEgeworCWludCBjaGFuczsJCS8qICBudW0gb2YgY2hhbnMgKi8KKwlpbnQgYWRkcjsJCS8qICBQQ0kgYWRkcmVzcyBvZnNldCAqLworCWludCByZWdzOwkJLyogIG51bWJlciBvZiByZWdpc3RlcnMgdG8gcmVhZCBvciA4MjU1IHN1YmRldmljZXMgKi8KKwl1bnNpZ25lZCBpbnQgc3BlY2ZsYWdzOwkvKiAgYWRkb24gc3ViZGV2aWNlIGZsYWdzICovCit9OworCitzdHJ1Y3QgZGlvX2JvYXJkdHlwZSB7CisJY29uc3QgY2hhciAqbmFtZTsJLyogIGJvYXJkIG5hbWUgKi8KKwlpbnQgdmVuZG9yX2lkOwkJLyogIHZlbmRvci9kZXZpY2UgUENJIElEICovCisJaW50IGRldmljZV9pZDsKKwlpbnQgbWFpbl9wY2lfcmVnaW9uOwkvKiAgbWFpbiBJL08gUENJIHJlZ2lvbiAqLworCWVudW0gaHdfY2FyZHNfaWQgY2FyZHR5cGU7CisJc3RydWN0IGRpb3N1YmRfZGF0YSBzZGlbTUFYX0RJX1NVQkRFVlNdOwkvKiAgREkgY2hhbnMgKi8KKwlzdHJ1Y3QgZGlvc3ViZF9kYXRhIHNkb1tNQVhfRE9fU1VCREVWU107CS8qICBETyBjaGFucyAqLworCXN0cnVjdCBkaW9zdWJkX2RhdGEgc2Rpb1tNQVhfRElPX1NVQkRFVkddOwkvKiAgRElPIDgyNTUgY2hhbnMgKi8KKwlzdHJ1Y3QgZGlvc3ViZF9kYXRhIGJvYXJkaWQ7CS8qICBjYXJkIHN1cHBvcnRzIGJvYXJkIElEIHN3aXRjaCAqLworCWVudW0gaHdfaW9fYWNjZXNzIGlvX2FjY2VzczsKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2lfZGlvX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzMzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX2Rpb19wY2lfdGFibGUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRpb19ib2FyZHR5cGUgYm9hcmR0eXBlc1tdID0geworCXsicGNpMTczMCIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzAsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzMwLAorCQkJe3sxNiwgUENJMTczMF9ESSwgMiwgMH0sIHsxNiwgUENJMTczMF9JREksIDIsIDB9fSwKKwkJCXt7MTYsIFBDSTE3MzBfRE8sIDIsIDB9LCB7MTYsIFBDSTE3MzBfSURPLCAyLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJezQsIFBDSTE3M3hfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKKwkJCUlPXzhiLAorCQl9LAorCXsicGNpMTczMyIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3MzMsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzMzLAorCQkJe3swLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzMzX0lESSwgNCwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7NCwgUENJMTczeF9CT0FSRElELCAxLCBTREZfSU5URVJOQUx9LAorCQlJT184Yn0sCisJeyJwY2kxNzM0IiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTczNCwgUENJRElPX01BSU5SRUcsCisJCQlUWVBFX1BDSTE3MzQsCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezMyLCBQQ0kxNzM0X0lETywgNCwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXs0LCBQQ0kxNzN4X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCisJCUlPXzhifSwKKwl7InBjaTE3MzYiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzM2LCBQQ0kxNzM2X01BSU5SRUcsCisJCQlUWVBFX1BDSTE3MzYsCisJCQl7ezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3MzZfSURJLCAyLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MTYsIFBDSTE3MzZfSURPLCAyLCAwfX0sCisJCQl7eyAwLCAwLCAwLCAwfSwgeyAwLCAwLCAwLCAwfX0sCisJCQl7IDQsIFBDSTE3MzZfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKKwkJCUlPXzhiLAorICAgICAgICB9LAorCXsicGNpMTc1MCIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTAsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzUwLAorCQkJe3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzUwX0lESSwgMiwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzUwX0lETywgMiwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXswLCAwLCAwLCAwfSwKKwkJSU9fOGJ9LAorCXsicGNpMTc1MSIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTEsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzUxLAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7ezQ4LCBQQ0kxNzUxX0RJTywgMiwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7MCwgMCwgMCwgMH0sCisJCUlPXzhifSwKKwl7InBjaTE3NTIiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUyLCBQQ0lESU9fTUFJTlJFRywKKwkJCVRZUEVfUENJMTc1MiwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7ezMyLCBQQ0kxNzUyX0lETywgMiwgMH0sIHszMiwgUENJMTc1Ml9JRE8yLCAyLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJezQsIFBDSTE3NXhfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKKwkJSU9fMTZifSwKKwl7InBjaTE3NTMiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzUzLCBQQ0lESU9fTUFJTlJFRywKKwkJCVRZUEVfUENJMTc1MywKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3s5NiwgUENJMTc1M19ESU8sIDQsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJezAsIDAsIDAsIDB9LAorCQlJT184Yn0sCisJeyJwY2kxNzUzZSIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NTMsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzUzRSwKKwkJCXt7MCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3s5NiwgUENJMTc1M19ESU8sIDQsIDB9LCB7OTYsIFBDSTE3NTNFX0RJTywgNCwgMH19LAorCQkJezAsIDAsIDAsIDB9LAorCQlJT184Yn0sCisJeyJwY2kxNzU0IiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1NCwgUENJRElPX01BSU5SRUcsCisJCQlUWVBFX1BDSTE3NTQsCisJCQl7ezMyLCBQQ0kxNzU0X0lESSwgMiwgMH0sIHszMiwgUENJMTc1NF9JREkyLCAyLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXs0LCBQQ0kxNzV4X0JPQVJESUQsIDEsIFNERl9JTlRFUk5BTH0sCisJCUlPXzE2Yn0sCisJeyJwY2kxNzU2IiwgUENJX1ZFTkRPUl9JRF9BRFZBTlRFQ0gsIDB4MTc1NiwgUENJRElPX01BSU5SRUcsCisJCQlUWVBFX1BDSTE3NTYsCisJCQl7ezAsIDAsIDAsIDB9LCB7MzIsIFBDSTE3NTZfSURJLCAyLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MzIsIFBDSTE3NTZfSURPLCAyLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJezQsIFBDSTE3NXhfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKKwkJSU9fMTZifSwKKwl7InBjaTE3NjAiLCBQQ0lfVkVORE9SX0lEX0FEVkFOVEVDSCwgMHgxNzYwLCAwLAorCQkJVFlQRV9QQ0kxNzYwLAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwJLyogIFRoaXMgY2FyZCBoYXZlIG93biBzZXR1cCB3b3JrICovCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezAsIDAsIDAsIDB9fSwKKwkJCXswLCAwLCAwLCAwfSwKKwkJSU9fOGJ9LAorCXsicGNpMTc2MiIsIFBDSV9WRU5ET1JfSURfQURWQU5URUNILCAweDE3NjIsIFBDSURJT19NQUlOUkVHLAorCQkJVFlQRV9QQ0kxNzYyLAorCQkJe3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzYyX0lESSwgMSwgMH19LAorCQkJe3swLCAwLCAwLCAwfSwgezE2LCBQQ0kxNzYyX1JPLCAxLCAwfX0sCisJCQl7ezAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19LAorCQkJezQsIFBDSTE3NjJfQk9BUkRJRCwgMSwgU0RGX0lOVEVSTkFMfSwKKwkJSU9fMTZifQorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IGRpb19ib2FyZHR5cGUpKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjaV9kaW8gPSB7CisgICAgICBkcml2ZXJfbmFtZToiYWR2X3BjaV9kaW8iLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjaV9kaW9fYXR0YWNoLAorICAgICAgZGV0YWNoOnBjaV9kaW9fZGV0YWNoCit9OworCitzdHJ1Y3QgcGNpX2Rpb19wcml2YXRlIHsKKwlzdHJ1Y3QgcGNpX2Rpb19wcml2YXRlICpwcmV2OwkvKiAgcHJldmlvdXMgcHJpdmF0ZSBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgcGNpX2Rpb19wcml2YXRlICpuZXh0OwkvKiAgbmV4dCBwcml2YXRlIHN0cnVjdCAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CS8qICBwb2ludGVyIHRvIGJvYXJkJ3MgcGNpX2RldiAqLworCWNoYXIgdmFsaWQ7CQkvKiAgY2FyZCBpcyB1c2FibGUgKi8KKwljaGFyIEdsb2JhbElycUVuYWJsZWQ7CS8qICAxPSBhbnkgSVJRIHNvdXJjZSBpcyBlbmFibGVkICovCisJLyogIFBDSS0xNzYwIHNwZWNpZmljIGRhdGEgKi8KKwl1bnNpZ25lZCBjaGFyIElESUNudEVuYWJsZTsJLyogIGNvdW50ZXIncyBjb3VudGluZyBlbmFibGUgc3RhdHVzICovCisJdW5zaWduZWQgY2hhciBJRElDbnRPdmVyRW5hYmxlOwkvKiAgY291bnRlcidzIG92ZXJmbG93IGludGVycnVwdHMgZW5hYmxlIHN0YXR1cyAqLworCXVuc2lnbmVkIGNoYXIgSURJQ250TWF0Y2hFbmFibGU7CS8qICBjb3VudGVyJ3MgbWF0Y2ggaW50ZXJydXB0cyBlbmFibGUgc3RhdHVzICovCisJdW5zaWduZWQgY2hhciBJRElDbnRFZGdlOwkvKiAgY291bnRlcidzIGNvdW50IGVkZ2UgdmFsdWUgKGJpdD0wIC0gcmlzaW5nLCA9MSAtIGZhbGxpbmcpICovCisJdW5zaWduZWQgc2hvcnQgQ250UmVzVmFsdWVbOF07CS8qICBjb3VudGVycycgcmVzZXQgdmFsdWUgKi8KKwl1bnNpZ25lZCBzaG9ydCBDbnRNYXRjaFZhbHVlWzhdOwkvKiAgY291bnRlcnMnIG1hdGNoIGludGVycnVwdCB2YWx1ZSAqLworCXVuc2lnbmVkIGNoYXIgSURJRmlsdGVyc0VuOwkvKiAgSURJJ3MgZGlnaXRhbCBmaWx0ZXJzIGVuYWJsZSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBjaGFyIElESVBhdE1hdGNoRW47CS8qICBJREkncyBwYXR0ZXJuIG1hdGNoIGVuYWJsZSBzdGF0dXMgKi8KKwl1bnNpZ25lZCBjaGFyIElESVBhdE1hdGNoVmFsdWU7CS8qICBJREkncyBwYXR0ZXJuIG1hdGNoIHZhbHVlICovCisJdW5zaWduZWQgc2hvcnQgSURJRmlsdHJMb3dbOF07CS8qICBJREkncyBmaWx0ZXIgdmFsdWUgbG93IHNpZ25hbCAqLworCXVuc2lnbmVkIHNob3J0IElESUZpbHRySGlnaFs4XTsJLyogIElESSdzIGZpbHRlciB2YWx1ZSBoaWdoIHNpZ25hbCAqLworfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGlvX3ByaXZhdGUgKnBjaV9wcml2ID0gTlVMTDsJLyogbGlzdCBvZiBhbGxvY2F0ZWQgY2FyZHMgKi8KKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjaV9kaW9fcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBkaW9fYm9hcmR0eXBlICopZGV2LT5ib2FyZF9wdHIpCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaV9kaW9faW5zbl9iaXRzX2RpX2Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKmQgPSAoY29uc3Qgc3RydWN0IGRpb3N1YmRfZGF0YSAqKXMtPnByaXZhdGU7CisJaW50IGk7CisKKwlkYXRhWzFdID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cmVnczsgaSsrKSB7CisJCWRhdGFbMV0gfD0gaW5iKGRldi0+aW9iYXNlICsgZC0+YWRkciArIGkpIDw8ICg4ICogaSk7CisJfQorCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaV9kaW9faW5zbl9iaXRzX2RpX3coc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKmQgPSAoY29uc3Qgc3RydWN0IGRpb3N1YmRfZGF0YSAqKXMtPnByaXZhdGU7CisJaW50IGk7CisKKwlkYXRhWzFdID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+cmVnczsgaSsrKQorCQlkYXRhWzFdIHw9IGludyhkZXYtPmlvYmFzZSArIGQtPmFkZHIgKyAyICogaSkgPDwgKDE2ICogaSk7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpX2Rpb19pbnNuX2JpdHNfZG9fYihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJY29uc3Qgc3RydWN0IGRpb3N1YmRfZGF0YSAqZCA9IChjb25zdCBzdHJ1Y3QgZGlvc3ViZF9kYXRhICopcy0+cHJpdmF0ZTsKKwlpbnQgaTsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQlmb3IgKGkgPSAwOyBpIDwgZC0+cmVnczsgaSsrKQorCQkJb3V0Yigocy0+c3RhdGUgPj4gKDggKiBpKSkgJiAweGZmLAorCQkJCWRldi0+aW9iYXNlICsgZC0+YWRkciArIGkpOworCX0KKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpX2Rpb19pbnNuX2JpdHNfZG9fdyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJY29uc3Qgc3RydWN0IGRpb3N1YmRfZGF0YSAqZCA9IChjb25zdCBzdHJ1Y3QgZGlvc3ViZF9kYXRhICopcy0+cHJpdmF0ZTsKKwlpbnQgaTsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQlmb3IgKGkgPSAwOyBpIDwgZC0+cmVnczsgaSsrKQorCQkJb3V0dygocy0+c3RhdGUgPj4gKDE2ICogaSkpICYgMHhmZmZmLAorCQkJCWRldi0+aW9iYXNlICsgZC0+YWRkciArIDIgKiBpKTsKKwl9CisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3NjBfdW5jaGVja2VkX21ieHJlcXVlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgY2hhciAqb21iLCB1bnNpZ25lZCBjaGFyICppbWIsIGludCByZXBlYXRzKQoreworCWludCBjbnQsIHRvdXQsIG9rID0gMDsKKworCWZvciAoY250ID0gMDsgY250IDwgcmVwZWF0czsgY250KyspIHsKKwkJb3V0YihvbWJbMF0sIGRldi0+aW9iYXNlICsgT01CMCk7CisJCW91dGIob21iWzFdLCBkZXYtPmlvYmFzZSArIE9NQjEpOworCQlvdXRiKG9tYlsyXSwgZGV2LT5pb2Jhc2UgKyBPTUIyKTsKKwkJb3V0YihvbWJbM10sIGRldi0+aW9iYXNlICsgT01CMyk7CisJCWZvciAodG91dCA9IDA7IHRvdXQgPCAyNTE7IHRvdXQrKykgeworCQkJaWYgKChpbWJbMl0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBJTUIyKSkgPT0gb21iWzJdKSB7CisJCQkJaW1iWzBdID0gaW5iKGRldi0+aW9iYXNlICsgSU1CMCk7CisJCQkJaW1iWzFdID0gaW5iKGRldi0+aW9iYXNlICsgSU1CMSk7CisJCQkJaW1iWzNdID0gaW5iKGRldi0+aW9iYXNlICsgSU1CMyk7CisJCQkJb2sgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJfQorCQlpZiAob2spCisJCQlyZXR1cm4gMDsKKwl9CisKKwljb21lZGlfZXJyb3IoZGV2LCAiUENJLTE3NjAgbWFpbGJveCByZXF1ZXN0IHRpbWVvdXQhIik7CisJcmV0dXJuIC1FVElNRTsKK30KKworc3RhdGljIGludCBwY2kxNzYwX2NsZWFyX2ltYjIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgY2hhciBvbWJbNF0gPSB7IDB4MCwgMHgwLCBDTURfQ2xlYXJJTUIyLCAweDAgfTsKKwl1bnNpZ25lZCBjaGFyIGltYls0XTsKKwkvKiBjaGVjayBpZiBpbWIyIGlzIGFscmVhZHkgY2xlYXIgKi8KKwlpZiAoaW5iKGRldi0+aW9iYXNlICsgSU1CMikgPT0gQ01EX0NsZWFySU1CMikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBjaTE3NjBfdW5jaGVja2VkX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYiwgT01CQ01EX1JFVFJZKTsKK30KKworc3RhdGljIGludCBwY2kxNzYwX21ieHJlcXVlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgY2hhciAqb21iLCB1bnNpZ25lZCBjaGFyICppbWIpCit7CisJaWYgKG9tYlsyXSA9PSBDTURfQ2xlYXJJTUIyKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiYnVnISB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgQ01EX0NsZWFySU1CMiBjb21tYW5kIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoaW5iKGRldi0+aW9iYXNlICsgSU1CMikgPT0gb21iWzJdKSB7CisJCWludCByZXR2YWw7CisJCXJldHZhbCA9IHBjaTE3NjBfY2xlYXJfaW1iMihkZXYpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCXJldHVybiBwY2kxNzYwX3VuY2hlY2tlZF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIsIE9NQkNNRF9SRVRSWSk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3NjBfaW5zbl9iaXRzX2RpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgSU1CMyk7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTc2MF9pbnNuX2JpdHNfZG8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBvbWJbNF0gPSB7CisJCTB4MDAsCisJCTB4MDAsCisJCUNNRF9TZXRSZWxheXNPdXRwdXQsCisJCTB4MDAKKwl9OworCXVuc2lnbmVkIGNoYXIgaW1iWzRdOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCW9tYlswXSA9IHMtPnN0YXRlOworCQlpZiAoIShyZXQgPSBwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYikpKQorCQkJcmV0dXJuIHJldDsKKwl9CisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3NjBfaW5zbl9jbnRfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IHJldCwgbjsKKwl1bnNpZ25lZCBjaGFyIG9tYls0XSA9IHsKKwkJQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykgJiAweDA3LAorCQkweDAwLAorCQlDTURfR2V0SURJQ250Q3VyVmFsdWUsCisJCTB4MDAKKwl9OworCXVuc2lnbmVkIGNoYXIgaW1iWzRdOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlpZiAoIShyZXQgPSBwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYikpKQorCQkJcmV0dXJuIHJldDsKKwkJZGF0YVtuXSA9IChpbWJbMV0gPDwgOCkgKyBpbWJbMF07CisJfQorCisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaTE3NjBfaW5zbl9jbnRfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykgJiAweDA3OworCXVuc2lnbmVkIGNoYXIgYml0bWFzayA9IDEgPDwgY2hhbjsKKwl1bnNpZ25lZCBjaGFyIG9tYls0XSA9IHsKKwkJZGF0YVswXSAmIDB4ZmYsCisJCShkYXRhWzBdID4+IDgpICYgMHhmZiwKKwkJQ01EX1NldElESTBDbnRSZXNldFZhbHVlICsgY2hhbiwKKwkJMHgwMAorCX07CisJdW5zaWduZWQgY2hhciBpbWJbNF07CisKKwlpZiAoZGV2cHJpdi0+Q250UmVzVmFsdWVbY2hhbl0gIT0gKGRhdGFbMF0gJiAweGZmZmYpKSB7CS8qICBTZXQgcmVzZXQgdmFsdWUgaWYgZGlmZmVyZW50ICovCisJCWlmICghKHJldCA9IHBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKSkpCisJCQlyZXR1cm4gcmV0OworCQlkZXZwcml2LT5DbnRSZXNWYWx1ZVtjaGFuXSA9IGRhdGFbMF0gJiAweGZmZmY7CisJfQorCisJb21iWzBdID0gYml0bWFzazsJLyogIHJlc2V0IGNvdW50ZXIgdG8gaXQgcmVzZXQgdmFsdWUgKi8KKwlvbWJbMl0gPSBDTURfUmVzZXRJRElDb3VudGVyczsKKwlpZiAoIShyZXQgPSBwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYikpKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCEoYml0bWFzayAmIGRldnByaXYtPklESUNudEVuYWJsZSkpIHsJLyogIHN0YXJ0IGNvdW50ZXIgaWYgaXQgZG9uJ3QgcnVuICovCisJCW9tYlswXSA9IGJpdG1hc2s7CisJCW9tYlsyXSA9IENNRF9FbmFibGVJRElDb3VudGVyczsKKwkJaWYgKCEocmV0ID0gcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpKSkKKwkJCXJldHVybiByZXQ7CisJCWRldnByaXYtPklESUNudEVuYWJsZSB8PSBiaXRtYXNrOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTc2MF9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIG9tYls0XSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCXVuc2lnbmVkIGNoYXIgaW1iWzRdOworCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIElOVENTUjApOwkvKiAgZGlzYWJsZSBJUlEgKi8KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgSU5UQ1NSMSk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIElOVENTUjIpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBJTlRDU1IzKTsKKwlkZXZwcml2LT5HbG9iYWxJcnFFbmFibGVkID0gMDsKKworCW9tYlswXSA9IDB4MDA7CisJb21iWzJdID0gQ01EX1NldFJlbGF5c091dHB1dDsJLyogIHJlc2V0IHJlbGF5IG91dHB1dHMgKi8KKwlwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CisKKwlvbWJbMF0gPSAweDAwOworCW9tYlsyXSA9IENNRF9FbmFibGVJRElDb3VudGVyczsJLyogIGRpc2FibGUgSURJIHVwIGNvdW50ZXJzICovCisJcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOworCWRldnByaXYtPklESUNudEVuYWJsZSA9IDA7CisKKwlvbWJbMF0gPSAweDAwOworCW9tYlsyXSA9IENNRF9PdmVyZmxvd0lESUNvdW50ZXJzOwkvKiAgZGlzYWJsZSBjb3VudGVycyBvdmVyZmxvdyBpbnRlcnJ1cHRzICovCisJcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOworCWRldnByaXYtPklESUNudE92ZXJFbmFibGUgPSAwOworCisJb21iWzBdID0gMHgwMDsKKwlvbWJbMl0gPSBDTURfTWF0Y2hJbnRJRElDb3VudGVyczsJLyogIGRpc2FibGUgY291bnRlcnMgbWF0Y2ggdmFsdWUgaW50ZXJydXB0cyAqLworCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKKwlkZXZwcml2LT5JRElDbnRNYXRjaEVuYWJsZSA9IDA7CisKKwlvbWJbMF0gPSAweDAwOworCW9tYlsxXSA9IDB4ODA7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewkvKiAgc2V0IElESSB1cCBjb3VudGVycyBtYXRjaCB2YWx1ZSAqLworCQlvbWJbMl0gPSBDTURfU2V0SURJMENudE1hdGNoVmFsdWUgKyBpOworCQlwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CisJCWRldnByaXYtPkNudE1hdGNoVmFsdWVbaV0gPSAweDgwMDA7CisJfQorCisJb21iWzBdID0gMHgwMDsKKwlvbWJbMV0gPSAweDAwOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsJLyogIHNldCBJREkgdXAgY291bnRlcnMgcmVzZXQgdmFsdWUgKi8KKwkJb21iWzJdID0gQ01EX1NldElESTBDbnRSZXNldFZhbHVlICsgaTsKKwkJcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOworCQlkZXZwcml2LT5DbnRSZXNWYWx1ZVtpXSA9IDB4MDAwMDsKKwl9CisKKwlvbWJbMF0gPSAweGZmOworCW9tYlsyXSA9IENNRF9SZXNldElESUNvdW50ZXJzOwkvKiAgcmVzZXQgSURJIHVwIGNvdW50ZXJzIHRvIHJlc2V0IHZhbHVlcyAqLworCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKKworCW9tYlswXSA9IDB4MDA7CisJb21iWzJdID0gQ01EX0VkZ2VJRElDb3VudGVyczsJLyogIHNldCBJREkgdXAgY291bnRlcnMgY291bnQgZWRnZSAqLworCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKKwlkZXZwcml2LT5JRElDbnRFZGdlID0gMHgwMDsKKworCW9tYlswXSA9IDB4MDA7CisJb21iWzJdID0gQ01EX0VuYWJsZUlESUZpbHRlcnM7CS8qICBkaXNhYmxlIGFsbCBkaWdpdGFsIGluIGZpbHRlcnMgKi8KKwlwY2kxNzYwX21ieHJlcXVlc3QoZGV2LCBvbWIsIGltYik7CisJZGV2cHJpdi0+SURJRmlsdGVyc0VuID0gMHgwMDsKKworCW9tYlswXSA9IDB4MDA7CisJb21iWzJdID0gQ01EX0VuYWJsZUlESVBhdHRlcm5NYXRjaDsJLyogIGRpc2FibGUgcGF0dGVybiBtYXRjaGluZyAqLworCXBjaTE3NjBfbWJ4cmVxdWVzdChkZXYsIG9tYiwgaW1iKTsKKwlkZXZwcml2LT5JRElQYXRNYXRjaEVuID0gMHgwMDsKKworCW9tYlswXSA9IDB4MDA7CisJb21iWzJdID0gQ01EX1NldElESVBhdHRlcm5NYXRjaDsJLyogIHNldCBwYXR0ZXJuIG1hdGNoIHZhbHVlICovCisJcGNpMTc2MF9tYnhyZXF1ZXN0KGRldiwgb21iLCBpbWIpOworCWRldnByaXYtPklESVBhdE1hdGNoVmFsdWUgPSAweDAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjaV9kaW9fcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJRFBSSU5USygiYWR2X3BjaV9kaW8gRURCRzogQkdOOiBwY2kxNzF4X3Jlc2V0KC4uLilcbiIpOworCisJc3dpdGNoICh0aGlzX2JvYXJkLT5jYXJkdHlwZSkgeworCWNhc2UgVFlQRV9QQ0kxNzMwOgorCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczMF9ETyk7CS8qICBjbGVhciBvdXRwdXRzICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwX0RPICsgMSk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwX0lETyk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwX0lETyArIDEpOworCQkvKiBOTyBicmVhayB0aGVyZSEgKi8KKwljYXNlIFRZUEVfUENJMTczMzoKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzBfM19JTlRfRU4pOwkvKiAgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJCW91dGIoMHgwZiwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwXzNfSU5UX0NMUik7CS8qICBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzMwXzNfSU5UX1JGKTsJLyogIHNldCByaXNpbmcgZWRnZSB0cmlnZ2VyICovCisJCWJyZWFrOworCWNhc2UgVFlQRV9QQ0kxNzM0OgorCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczNF9JRE8pOwkvKiAgY2xlYXIgb3V0cHV0cyAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENJMTczNF9JRE8gKyAxKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDSTE3MzRfSURPICsgMik7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzM0X0lETyArIDMpOworCQlicmVhazsKKworCWNhc2UgVFlQRV9QQ0kxNzM2OgorCQlvdXRiKDAsIGRldi0+aW9iYXNlK1BDSTE3MzZfSURPKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZStQQ0kxNzM2X0lETysxKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZStQQ0kxNzM2XzNfSU5UX0VOKTsgIC8qICBkaXNhYmxlIGludGVycnVwdHMgKi8KKwkJb3V0YigweDBmLCBkZXYtPmlvYmFzZStQQ0kxNzM2XzNfSU5UX0NMUik7LyogIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0YigwLCBkZXYtPmlvYmFzZStQQ0kxNzM2XzNfSU5UX1JGKTsgIC8qICBzZXQgcmlzaW5nIGVkZ2UgdHJpZ2dlciAqLworCQlicmVhazsKKworCWNhc2UgVFlQRV9QQ0kxNzUwOgorCWNhc2UgVFlQRV9QQ0kxNzUxOgorCQlvdXRiKDB4ODgsIGRldi0+aW9iYXNlICsgUENJMTc1MF9JQ1IpOwkvKiAgZGlzYWJsZSAmIGNsZWFyIGludGVycnVwdHMgKi8KKwkJYnJlYWs7CisJY2FzZSBUWVBFX1BDSTE3NTI6CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyXzZfQ0ZDKTsJLyogIGRpc2FibGUgY2hhbm5lbCBmcmVlemUgZnVuY3Rpb24gKi8KKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTJfSURPKTsJLyogIGNsZWFyIG91dHB1dHMgKi8KKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTJfSURPICsgMik7CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyX0lETzIpOworCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMTc1Ml9JRE8yICsgMik7CisJCWJyZWFrOworCWNhc2UgVFlQRV9QQ0kxNzUzRToKKwkJb3V0YigweDg4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTNFX0lDUjApOwkvKiAgZGlzYWJsZSAmIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0YigweDgwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTNFX0lDUjEpOworCQlvdXRiKDB4ODAsIGRldi0+aW9iYXNlICsgUENJMTc1M0VfSUNSMik7CisJCW91dGIoMHg4MCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzRV9JQ1IzKTsKKwkJLyogTk8gYnJlYWsgdGhlcmUhICovCisJY2FzZSBUWVBFX1BDSTE3NTM6CisJCW91dGIoMHg4OCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzX0lDUjApOwkvKiAgZGlzYWJsZSAmIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0YigweDgwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTNfSUNSMSk7CisJCW91dGIoMHg4MCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUzX0lDUjIpOworCQlvdXRiKDB4ODAsIGRldi0+aW9iYXNlICsgUENJMTc1M19JQ1IzKTsKKwkJYnJlYWs7CisJY2FzZSBUWVBFX1BDSTE3NTQ6CisJCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0XzZfSUNSMCk7CS8qICBkaXNhYmxlIGFuZCBjbGVhciBpbnRlcnJ1cHRzICovCisJCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0XzZfSUNSMSk7CisJCW91dHcoMHgwOCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzU0X0lDUjIpOworCQlvdXR3KDB4MDgsIGRldi0+aW9iYXNlICsgUENJMTc1NF9JQ1IzKTsKKwkJYnJlYWs7CisJY2FzZSBUWVBFX1BDSTE3NTY6CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzUyXzZfQ0ZDKTsJLyogIGRpc2FibGUgY2hhbm5lbCBmcmVlemUgZnVuY3Rpb24gKi8KKwkJb3V0dygweDA4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTRfNl9JQ1IwKTsJLyogIGRpc2FibGUgYW5kIGNsZWFyIGludGVycnVwdHMgKi8KKwkJb3V0dygweDA4LCBkZXYtPmlvYmFzZSArIFBDSTE3NTRfNl9JQ1IxKTsKKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTZfSURPKTsJLyogIGNsZWFyIG91dHB1dHMgKi8KKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTE3NTZfSURPICsgMik7CisJCWJyZWFrOworCWNhc2UgVFlQRV9QQ0kxNzYwOgorCQlwY2kxNzYwX3Jlc2V0KGRldik7CisJCWJyZWFrOworCWNhc2UgVFlQRV9QQ0kxNzYyOgorCQlvdXR3KDB4MDEwMSwgZGV2LT5pb2Jhc2UgKyBQQ0kxNzYyX0lDUik7CS8qICBkaXNhYmxlICYgY2xlYXIgaW50ZXJydXB0cyAqLworCQlicmVhazsKKwl9CisKKwlEUFJJTlRLKCJhZHZfcGNpX2RpbyBFREJHOiBFTkQ6IHBjaTE3MXhfcmVzZXQoLi4uKVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNpMTc2MF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHN1YmRldiA9IDA7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwlzLT5uX2NoYW4gPSA4OworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IDg7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBwY2kxNzYwX2luc25fYml0c19kaTsKKwlzdWJkZXYrKzsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OOworCXMtPm5fY2hhbiA9IDg7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gODsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnN0YXRlID0gMDsKKwlzLT5pbnNuX2JpdHMgPSBwY2kxNzYwX2luc25fYml0c19kbzsKKwlzdWJkZXYrKzsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1RJTUVSOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9MU0FNUEw7CisJcy0+bl9jaGFuID0gMjsKKwlzLT5tYXhkYXRhID0gMHhmZmZmZmZmZjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAyOworLyogICAgICAgcy0+aW5zbl9jb25maWc9cGNpMTc2MF9pbnNuX3B3bV9jZmc7ICovCisJc3ViZGV2Kys7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPm1heGRhdGEgPSAweGZmZmY7CisJcy0+bGVuX2NoYW5saXN0ID0gODsKKwlzLT5pbnNuX3JlYWQgPSBwY2kxNzYwX2luc25fY250X3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IHBjaTE3NjBfaW5zbl9jbnRfd3JpdGU7CisvKiAgICAgICBzLT5pbnNuX2NvbmZpZz1wY2kxNzYwX2luc25fY250X2NmZzsgKi8KKwlzdWJkZXYrKzsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2lfZGlvX2FkZF9kaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKiBkLCBpbnQgc3ViZGV2KQoreworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTiB8IGQtPnNwZWNmbGFnczsKKwlpZiAoZC0+Y2hhbnMgPiAxNikKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9MU0FNUEw7CisJcy0+bl9jaGFuID0gZC0+Y2hhbnM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gZC0+Y2hhbnM7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzd2l0Y2ggKHRoaXNfYm9hcmQtPmlvX2FjY2VzcykgeworCWNhc2UgSU9fOGI6CisJCXMtPmluc25fYml0cyA9IHBjaV9kaW9faW5zbl9iaXRzX2RpX2I7CisJCWJyZWFrOworCWNhc2UgSU9fMTZiOgorCQlzLT5pbnNuX2JpdHMgPSBwY2lfZGlvX2luc25fYml0c19kaV93OworCQlicmVhazsKKwl9CisJcy0+cHJpdmF0ZSA9ICh2b2lkICopZDsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2lfZGlvX2FkZF9kbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWNvbnN0IHN0cnVjdCBkaW9zdWJkX2RhdGEgKiBkLCBpbnQgc3ViZGV2KQoreworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTjsKKwlpZiAoZC0+Y2hhbnMgPiAxNikKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9MU0FNUEw7CisJcy0+bl9jaGFuID0gZC0+Y2hhbnM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gZC0+Y2hhbnM7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5zdGF0ZSA9IDA7CisJc3dpdGNoICh0aGlzX2JvYXJkLT5pb19hY2Nlc3MpIHsKKwljYXNlIElPXzhiOgorCQlzLT5pbnNuX2JpdHMgPSBwY2lfZGlvX2luc25fYml0c19kb19iOworCQlicmVhazsKKwljYXNlIElPXzE2YjoKKwkJcy0+aW5zbl9iaXRzID0gcGNpX2Rpb19pbnNuX2JpdHNfZG9fdzsKKwkJYnJlYWs7CisJfQorCXMtPnByaXZhdGUgPSAodm9pZCAqKWQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgQ2hlY2tBbmRBbGxvY0NhcmQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQsCisJc3RydWN0IHBjaV9kZXYgKnBjaWRldikKK3sKKwlzdHJ1Y3QgcGNpX2Rpb19wcml2YXRlICpwciwgKnByZXY7CisKKwlmb3IgKHByID0gcGNpX3ByaXYsIHByZXYgPSBOVUxMOyBwciAhPSBOVUxMOyBwcmV2ID0gcHIsIHByID0gcHItPm5leHQpIHsKKwkJaWYgKHByLT5wY2lkZXYgPT0gcGNpZGV2KSB7CisJCQlyZXR1cm4gMDsJLyogIHRoaXMgY2FyZCBpcyB1c2VkLCBsb29rIGZvciBhbm90aGVyICovCisJCX0KKwl9CisKKwlpZiAocHJldikgeworCQlkZXZwcml2LT5wcmV2ID0gcHJldjsKKwkJcHJldi0+bmV4dCA9IGRldnByaXY7CisJfSBlbHNlIHsKKwkJcGNpX3ByaXYgPSBkZXZwcml2OworCX0KKworCWRldnByaXYtPnBjaWRldiA9IHBjaWRldjsKKworCXJldHVybiAxOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2lfZGlvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgcmV0LCBzdWJkZXYsIG5fc3ViZGV2aWNlcywgaSwgajsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCisJcnRfcHJpbnRrKCJjb21lZGklZDogYWR2X3BjaV9kaW86ICIsIGRldi0+bWlub3IpOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2lfZGlvX3ByaXZhdGUpKSkgPCAwKSB7CisJCXJ0X3ByaW50aygiLCBFcnJvcjogQ2Fubid0IGFsbG9jYXRlIHByaXZhdGUgbWVtb3J5IVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJCS8qICBsb29wIHRocm91Z2ggY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyICovCisJCWZvciAoaSA9IDA7IGkgPCBuX2JvYXJkdHlwZXM7ICsraSkgeworCQkJaWYgKGJvYXJkdHlwZXNbaV0udmVuZG9yX2lkICE9IHBjaWRldi0+dmVuZG9yKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGJvYXJkdHlwZXNbaV0uZGV2aWNlX2lkICE9IHBjaWRldi0+ZGV2aWNlKQorCQkJCWNvbnRpbnVlOworCQkJLyogIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QgcmVxdWVzdGVkPyAqLworCQkJaWYgKGl0LT5vcHRpb25zWzBdIHx8IGl0LT5vcHRpb25zWzFdKSB7CisJCQkJLyogIGFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/ICovCisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gaXQtPm9wdGlvbnNbMF0gfHwKKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0KKwkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJcmV0ID0gQ2hlY2tBbmRBbGxvY0NhcmQoZGV2LCBpdCwgcGNpZGV2KTsKKwkJCWlmIChyZXQgIT0gMSkgY29udGludWU7CisJCQlkZXYtPmJvYXJkX3B0ciA9IGJvYXJkdHlwZXMgKyBpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGRldi0+Ym9hcmRfcHRyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFkZXYtPmJvYXJkX3B0cikgeworCQlydF9wcmludGsKKwkJCSgiLCBFcnJvcjogUmVxdWVzdGVkIHR5cGUgb2YgdGhlIGNhcmQgd2FzIG5vdCBmb3VuZCFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCBkcml2ZXJfcGNpX2Rpby5kcml2ZXJfbmFtZSkpIHsKKwkJcnRfcHJpbnRrCisJCQkoIiwgRXJyb3I6IENhbid0IGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIHRoaXNfYm9hcmQtPm1haW5fcGNpX3JlZ2lvbik7CisJcnRfcHJpbnRrKCIsIGI6czpmPSVkOiVkOiVkLCBpbz0weCU0bHgiLAorCQlwY2lkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSwKKwkJUENJX0ZVTkMocGNpZGV2LT5kZXZmbiksIGlvYmFzZSk7CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJaWYgKHRoaXNfYm9hcmQtPmNhcmR0eXBlID09IFRZUEVfUENJMTc2MCkgeworCQluX3N1YmRldmljZXMgPSA0OwkvKiAgOCBJREksIDggSURPLCAyIFBXTSwgOCBDTlQgKi8KKwl9IGVsc2UgeworCQluX3N1YmRldmljZXMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RJX1NVQkRFVlM7IGkrKykKKwkJCWlmICh0aGlzX2JvYXJkLT5zZGlbaV0uY2hhbnMpCisJCQkJbl9zdWJkZXZpY2VzKys7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfRE9fU1VCREVWUzsgaSsrKQorCQkJaWYgKHRoaXNfYm9hcmQtPnNkb1tpXS5jaGFucykKKwkJCQluX3N1YmRldmljZXMrKzsKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9ESU9fU1VCREVWRzsgaSsrKQorCQkJbl9zdWJkZXZpY2VzICs9IHRoaXNfYm9hcmQtPnNkaW9baV0ucmVnczsKKwkJaWYgKHRoaXNfYm9hcmQtPmJvYXJkaWQuY2hhbnMpCisJCQluX3N1YmRldmljZXMrKzsKKwl9CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldmljZXMpKSA8IDApIHsKKwkJcnRfcHJpbnRrKCIsIEVycm9yOiBDYW5uJ3QgYWxsb2NhdGUgc3ViZGV2aWNlIG1lbW9yeSFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJ0X3ByaW50aygiLlxuIik7CisKKwlzdWJkZXYgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9ESV9TVUJERVZTOyBpKyspCisJCWlmICh0aGlzX2JvYXJkLT5zZGlbaV0uY2hhbnMpIHsKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCQlwY2lfZGlvX2FkZF9kaShkZXYsIHMsICZ0aGlzX2JvYXJkLT5zZGlbaV0sIHN1YmRldik7CisJCQlzdWJkZXYrKzsKKwkJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9ET19TVUJERVZTOyBpKyspCisJCWlmICh0aGlzX2JvYXJkLT5zZG9baV0uY2hhbnMpIHsKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCQlwY2lfZGlvX2FkZF9kbyhkZXYsIHMsICZ0aGlzX2JvYXJkLT5zZG9baV0sIHN1YmRldik7CisJCQlzdWJkZXYrKzsKKwkJfQorCisJZm9yIChpID0gMDsgaSA8IE1BWF9ESU9fU1VCREVWRzsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgdGhpc19ib2FyZC0+c2Rpb1tpXS5yZWdzOyBqKyspIHsKKwkJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCQlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwKKwkJCQlkZXYtPmlvYmFzZSArIHRoaXNfYm9hcmQtPnNkaW9baV0uYWRkciArCisJCQkJU0laRV84MjU1ICogaik7CisJCQlzdWJkZXYrKzsKKwkJfQorCisJaWYgKHRoaXNfYm9hcmQtPmJvYXJkaWQuY2hhbnMpIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCQlwY2lfZGlvX2FkZF9kaShkZXYsIHMsICZ0aGlzX2JvYXJkLT5ib2FyZGlkLCBzdWJkZXYpOworCQlzdWJkZXYrKzsKKwl9CisKKwlpZiAodGhpc19ib2FyZC0+Y2FyZHR5cGUgPT0gVFlQRV9QQ0kxNzYwKQorCQlwY2kxNzYwX2F0dGFjaChkZXYsIGl0KTsKKworCWRldnByaXYtPnZhbGlkID0gMTsKKworCXBjaV9kaW9fcmVzZXQoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2lfZGlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaSwgajsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgc3ViZGV2OworCisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+dmFsaWQpIHsKKwkJCXBjaV9kaW9fcmVzZXQoZGV2KTsKKwkJfQorCisJCS8qIFRoaXMgc2hvd3MgdGhlIHNpbGxpbmVzcyBvZiB1c2luZyB0aGlzIGtpbmQgb2YKKwkJICogc2NoZW1lIGZvciBudW1iZXJpbmcgc3ViZGV2aWNlcy4gIERvbid0IGRvIGl0LiAgLS1kcyAqLworCQlzdWJkZXYgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0RJX1NVQkRFVlM7IGkrKykgeworCQkJaWYgKHRoaXNfYm9hcmQtPnNkaVtpXS5jaGFucykgeworCQkJCXN1YmRldisrOworCQkJfQorCQl9CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfRE9fU1VCREVWUzsgaSsrKSB7CisJCQlpZiAodGhpc19ib2FyZC0+c2RvW2ldLmNoYW5zKSB7CisJCQkJc3ViZGV2Kys7CisJCQl9CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9ESU9fU1VCREVWRzsgaSsrKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgdGhpc19ib2FyZC0+c2Rpb1tpXS5yZWdzOyBqKyspIHsKKwkJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQkJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBzKTsKKwkJCQlzdWJkZXYrKzsKKwkJCX0KKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CisJCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgaTsKKwkJCXMtPnByaXZhdGUgPSBOVUxMOworCQl9CisKKwkJaWYgKGRldnByaXYtPnBjaWRldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaWRldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lkZXYpOworCQl9CisKKwkJaWYgKGRldnByaXYtPnByZXYpIHsKKwkJCWRldnByaXYtPnByZXYtPm5leHQgPSBkZXZwcml2LT5uZXh0OworCQl9IGVsc2UgeworCQkJcGNpX3ByaXYgPSBkZXZwcml2LT5uZXh0OworCQl9CisJCWlmIChkZXZwcml2LT5uZXh0KSB7CisJCQlkZXZwcml2LT5uZXh0LT5wcmV2ID0gZGV2cHJpdi0+cHJldjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfcGNpX2RpbywgcGNpX2Rpb19wY2lfdGFibGUpOworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9fYWlvMTJfOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fpb19haW8xMl84LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk3YjRkOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9fYWlvMTJfOC5jCkBAIC0wLDAgKzEsMjI2IEBACisvKgorCisgICAgY29tZWRpL2RyaXZlcnMvYWlvX2FpbzEyXzguYworCisgICAgRHJpdmVyIGZvciBBY2NlcyBJL08gUHJvZHVjdHMgUEMtMTA0IEFJTzEyLTggQW5hbG9nIEkvTyBCb2FyZAorICAgIENvcHlyaWdodCAoQykgMjAwNiBDJkMgVGVjaG5vbG9naWVzLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKy8qCisKK0RyaXZlcjogYWlvX2FpbzEyXzgKK0Rlc2NyaXB0aW9uOiBBY2NlcyBJL08gUHJvZHVjdHMgUEMtMTA0IEFJTzEyLTggQW5hbG9nIEkvTyBCb2FyZAorQXV0aG9yOiBQYWJsbyBNZWppYSA8cGFibG8ubWVqaWFAY2N0ZWNobm9sLmNvbT4KK0RldmljZXM6CisgW0FjY2VzIEkvT10gUEMtMTA0IEFJTzEyLTgKK1N0YXR1czogZXhwZXJpbWVudGFsCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisKK05vdGVzOgorCisgIE9ubHkgc3luY2hyb25vdXMgb3BlcmF0aW9ucyBhcmUgc3VwcG9ydGVkLgorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSAiODI1NS5oIgorCisjZGVmaW5lIEFJTzEyXzhfU1RBVFVTCQkJMHgwMAorI2RlZmluZSBBSU8xMl84X0lOVEVSUlVQVAkJMHgwMQorI2RlZmluZSBBSU8xMl84X0FEQwkJCTB4MDIKKyNkZWZpbmUgQUlPMTJfOF9EQUNfMAkJCTB4MDQKKyNkZWZpbmUgQUlPMTJfOF9EQUNfMQkJCTB4MDYKKyNkZWZpbmUgQUlPMTJfOF9EQUNfMgkJCTB4MDgKKyNkZWZpbmUgQUlPMTJfOF9EQUNfMwkJCTB4MEEKKyNkZWZpbmUgQUlPMTJfOF9DT1VOVEVSXzAJCTB4MEMKKyNkZWZpbmUgQUlPMTJfOF9DT1VOVEVSXzEJCTB4MEQKKyNkZWZpbmUgQUlPMTJfOF9DT1VOVEVSXzIJCTB4MEUKKyNkZWZpbmUgQUlPMTJfOF9DT1VOVEVSX0NPTlRST0wJCTB4MEYKKyNkZWZpbmUgQUlPMTJfOF9ESU9fMAkJCTB4MTAKKyNkZWZpbmUgQUlPMTJfOF9ESU9fMQkJCTB4MTEKKyNkZWZpbmUgQUlPMTJfOF9ESU9fMgkJCTB4MTIKKyNkZWZpbmUgQUlPMTJfOF9ESU9fU1RBVFVTCQkweDEzCisjZGVmaW5lIEFJTzEyXzhfRElPX0NPTlRST0wJCTB4MTQKKyNkZWZpbmUgQUlPMTJfOF9BRENfVFJJR0dFUl9DT05UUk9MCTB4MTUKKyNkZWZpbmUgQUlPMTJfOF9UUklHR0VSCQkJMHgxNgorI2RlZmluZSBBSU8xMl84X1BPV0VSCQkJMHgxNworCisjZGVmaW5lIFNUQVRVU19BRENfRU9DCQkJMHg4MAorCisjZGVmaW5lIEFEQ19NT0RFX05PUk1BTAkJCTB4MDAKKyNkZWZpbmUgQURDX01PREVfSU5URVJOQUxfQ0xPQ0sJCTB4NDAKKyNkZWZpbmUgQURDX01PREVfU1RBTkRCWQkJMHg4MAorI2RlZmluZSBBRENfTU9ERV9QT1dFUkRPV04JCTB4QzAKKworI2RlZmluZSBEQUNfRU5BQkxFCQkJMHgxOAorCitzdHJ1Y3QgYWlvMTJfOF9ib2FyZHR5cGUgeworCWNvbnN0IGNoYXIgKm5hbWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFpbzEyXzhfYm9hcmR0eXBlIGJvYXJkX3R5cGVzW10gPSB7CisJeworICAgICAgbmFtZToJImFpb19haW8xMl84In0sCit9OworCisjZGVmaW5lCXRoaXNib2FyZAkoKGNvbnN0IHN0cnVjdCBhaW8xMl84X2JvYXJkdHlwZSAgKikgZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBhaW8xMl84X3ByaXZhdGUgeworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1s0XTsKK307CisKKyNkZWZpbmUgZGV2cHJpdgkoKHN0cnVjdCBhaW8xMl84X3ByaXZhdGUgKikgZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGFpb19haW8xMl84X2FpX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCXVuc2lnbmVkIGNoYXIgY29udHJvbCA9CisJCUFEQ19NT0RFX05PUk1BTCB8CisJCShDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykgPDwgMykgfCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8vcmVhZCBzdGF0dXMgdG8gY2xlYXIgRU9DIGxhdGNoCisJaW5iKGRldi0+aW9iYXNlICsgQUlPMTJfOF9TVEFUVVMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlpbnQgdGltZW91dCA9IDU7CisKKwkJLy8gU2V0dXAgYW5kIHN0YXJ0IGNvbnZlcnNpb24KKwkJb3V0Yihjb250cm9sLCBkZXYtPmlvYmFzZSArIEFJTzEyXzhfQURDKTsKKworCQkvLyBXYWl0IGZvciBjb252ZXJzaW9uIHRvIGNvbXBsZXRlCisJCXdoaWxlICh0aW1lb3V0ICYmCisJCQkhKGluYihkZXYtPmlvYmFzZSArIEFJTzEyXzhfU1RBVFVTKSAmIFNUQVRVU19BRENfRU9DKSkgeworCQkJdGltZW91dC0tOworCQkJcHJpbnRrKCJ0aW1lb3V0ICVkXG4iLCB0aW1lb3V0KTsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJaWYgKHRpbWVvdXQgPT0gMCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgIkFEQyB0aW1lb3V0Iik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJCWRhdGFbbl0gPSBpbncoZGV2LT5pb2Jhc2UgKyBBSU8xMl84X0FEQykgJiAweDBGRkY7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGFpb19haW8xMl84X2FvX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCB2YWwgPSBkZXZwcml2LT5hb19yZWFkYmFja1tDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQorCQlkYXRhW2ldID0gdmFsOworCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgaW50IGFpb19haW8xMl84X2FvX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGRldi0+aW9iYXNlICsgQUlPMTJfOF9EQUNfMCArICgyICogY2hhbik7CisKKwkvL2VuYWJsZSBEQUNzCisJb3V0YigweDAxLCBkZXYtPmlvYmFzZSArIERBQ19FTkFCTEUpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlvdXRiKGRhdGFbaV0gJiAweEZGLCBwb3J0KTsJLy8gTFNCCisJCW91dGIoKGRhdGFbaV0gPj4gOCkgJiAweDBGLCBwb3J0ICsgMSk7CS8vIE1TQgorCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWlvX2FpbzEyXzggPSB7CisJNCwKKwl7CisJCQlVTklfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJfQorfTsKKworc3RhdGljIGludCBhaW9fYWlvMTJfOF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IGlvYmFzZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCAyNCwgImFpb19haW8xMl84IikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBhaW8xMl84X3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAzKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9ICZkZXYtPnN1YmRldmljZXNbMF07CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfRElGRjsKKwlzLT5uX2NoYW4gPSA4OworCXMtPm1heGRhdGEgPSAoMSA8PCAxMikgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2Fpb19haW8xMl84OworCXMtPmluc25fcmVhZCA9IGFpb19haW8xMl84X2FpX3JlYWQ7CisKKwlzID0gJmRldi0+c3ViZGV2aWNlc1sxXTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORCB8IFNERl9ESUZGOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IDEyKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYWlvX2FpbzEyXzg7CisJcy0+aW5zbl9yZWFkID0gYWlvX2FpbzEyXzhfYW9fcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gYWlvX2FpbzEyXzhfYW9fd3JpdGU7CisKKwlzID0gJmRldi0+c3ViZGV2aWNlc1syXTsKKwlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgZGV2LT5pb2Jhc2UgKyBBSU8xMl84X0RJT18wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFpb19haW8xMl84X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgJmRldi0+c3ViZGV2aWNlc1syXSk7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgMjQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2Fpb19haW8xMl84ID0geworICAgICAgZHJpdmVyX25hbWU6ImFpb19haW8xMl84IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphaW9fYWlvMTJfOF9hdHRhY2gsCisgICAgICBkZXRhY2g6YWlvX2FpbzEyXzhfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmRfdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczoxLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgYWlvMTJfOF9ib2FyZHR5cGUpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9haW9fYWlvMTJfOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2lpcm9fMTYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9faWlyb18xNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjBmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWlvX2lpcm9fMTYuYwpAQCAtMCwwICsxLDE3NyBAQAorLyoKKworICAgIGNvbWVkaS9kcml2ZXJzL2Fpb19paXJvXzE2LmMKKworICAgIERyaXZlciBmb3IgQWNjZXMgSS9PIFByb2R1Y3RzIFBDLTEwNCBBSU8tSUlSTy0xNiBEaWdpdGFsIEkvTyBib2FyZAorICAgIENvcHlyaWdodCAoQykgMjAwNiBDJkMgVGVjaG5vbG9naWVzLCBJbmMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKy8qCisKK0RyaXZlcjogYWlvX2lpcm9fMTYKK0Rlc2NyaXB0aW9uOiBBY2NlcyBJL08gUHJvZHVjdHMgUEMtMTA0IElJUk8xNiBSZWxheSBBbmQgSXNvbGF0ZWQgSW5wdXQgQm9hcmQKK0F1dGhvcjogWmFjaGFyeSBXYXJlIDx6YWNoLndhcmVAY2N0ZWNobm9sLmNvbT4KK0RldmljZXM6CisgW0FjY2VzIEkvT10gUEMtMTA0IEFJTzEyLTgKK1N0YXR1czogZXhwZXJpbWVudGFsCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBBSU9fSUlST18xNl9TSVpFCTB4MDgKKyNkZWZpbmUgQUlPX0lJUk9fMTZfUkVMQVlfMF83CTB4MDAKKyNkZWZpbmUgQUlPX0lJUk9fMTZfSU5QVVRfMF83CTB4MDEKKyNkZWZpbmUgQUlPX0lJUk9fMTZfSVJRCQkweDAyCisjZGVmaW5lIEFJT19JSVJPXzE2X1JFTEFZXzhfMTUJMHgwNAorI2RlZmluZSBBSU9fSUlST18xNl9JTlBVVF84XzE1CTB4MDUKKworc3RydWN0IGFpb19paXJvXzE2X2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkb187CisJaW50IGRpOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhaW9faWlyb18xNl9ib2FyZCBhaW9faWlyb18xNl9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImFpb19paXJvXzE2IiwKKwkgICAgICBkaToJMTYsCisgICAgICBkb186CTE2fSwKK307CisKKyNkZWZpbmUJdGhpc2JvYXJkCSgoY29uc3Qgc3RydWN0IGFpb19paXJvXzE2X2JvYXJkICopIGRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgYWlvX2lpcm9fMTZfcHJpdmF0ZSB7CisJaW50IGRhdGE7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworfTsKKworI2RlZmluZQlkZXZwcml2CSgoc3RydWN0IGFpb19paXJvXzE2X3ByaXZhdGUgKikgZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGFpb19paXJvXzE2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CisKK3N0YXRpYyBpbnQgYWlvX2lpcm9fMTZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9haW9faWlyb18xNiA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJhaW9faWlyb18xNiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6YWlvX2lpcm9fMTZfYXR0YWNoLAorICAgICAgZGV0YWNoOmFpb19paXJvXzE2X2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmFpb19paXJvXzE2X2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgYWlvX2lpcm9fMTZfYm9hcmQpLAorICAgICAgbnVtX25hbWVzOnNpemVvZihhaW9faWlyb18xNl9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBhaW9faWlyb18xNl9ib2FyZCksCit9OworCitzdGF0aWMgaW50IGFpb19paXJvXzE2X2Rpb19pbnNuX2JpdHNfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGFpb19paXJvXzE2X2Rpb19pbnNuX2JpdHNfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBhaW9faWlyb18xNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IGlvYmFzZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCXByaW50aygiY29tZWRpJWQ6IGFpb19paXJvXzE2OiAiLCBkZXYtPm1pbm9yKTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIEFJT19JSVJPXzE2X1NJWkUsIGRldi0+Ym9hcmRfbmFtZSkpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBhaW9faWlyb18xNl9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMikgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDE2OworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gYWlvX2lpcm9fMTZfZGlvX2luc25fYml0c193cml0ZTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDE2OworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gYWlvX2lpcm9fMTZfZGlvX2luc25fYml0c19yZWFkOworCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhaW9faWlyb18xNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogYWlvX2lpcm9fMTY6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBBSU9fSUlST18xNl9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFpb19paXJvXzE2X2Rpb19pbnNuX2JpdHNfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCQlvdXRiKHMtPnN0YXRlICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBBSU9fSUlST18xNl9SRUxBWV8wXzcpOworCQlvdXRiKChzLT5zdGF0ZSA+PiA4KSAmIDB4ZmYsCisJCQlkZXYtPmlvYmFzZSArIEFJT19JSVJPXzE2X1JFTEFZXzhfMTUpOworCX0KKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFpb19paXJvXzE2X2Rpb19pbnNuX2JpdHNfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkYXRhWzFdID0gMDsKKwlkYXRhWzFdIHw9IGluYihkZXYtPmlvYmFzZSArIEFJT19JSVJPXzE2X0lOUFVUXzBfNyk7CisJZGF0YVsxXSB8PSBpbmIoZGV2LT5pb2Jhc2UgKyBBSU9fSUlST18xNl9JTlBVVF84XzE1KSA8PCA4OworCisJcmV0dXJuIDI7Cit9CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYWlvX2lpcm9fMTYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtOTUxMy5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtOTUxMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzNjZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW05NTEzLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAgICBtb2R1bGUvYW05NTEzLmgKKyAgICB2YWx1ZSBhZGRlZCBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMgZm9yIEFtOTUxMyB0aW1lciBjaGlwCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpZm5kZWYgX0FNOTUxM19IXworI2RlZmluZSBfQU05NTEzX0hfCisKKyNpZiAwCisKKy8qCisgKglCZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZSwgdGhlIGZvbGxvd2luZyBuZWVkIHRvIGJlIGRlZmluZWQ6CisgKi8KKyNkZWZpbmUgQW05NTEzXzhCSVRCVVMgeHh4CisvKiBvciAqLworI2RlZmluZSBBbTk1MTNfMTZCSVRCVVMgeHh4CisKKyNkZWZpbmUgQW05NTEzX291dHB1dF9jb250cm9sKGEpCXh4eAorI2RlZmluZSBBbTk1MTNfaW5wdXRfc3RhdHVzKCkJCXh4eAorI2RlZmluZSBBbTk1MTNfb3V0cHV0X2RhdGEoYSkJCXh4eAorI2RlZmluZSBBbTk1MTNfaW5wdXRfZGF0YSgpCQl4eHgKKworI2VuZGlmCisKKy8qCisgKgorICovCisKKyNpZmRlZiBBbTk1MTNfOEJJVEJVUworCisjZGVmaW5lIEFtOTUxM193cml0ZV9yZWdpc3RlcihyZWcsdmFsKQkJCQlcCisJZG97CQkJCQkJCVwKKwkJQW05NTEzX291dHB1dF9jb250cm9sKHJlZyk7CQkJXAorCQlBbTk1MTNfb3V0cHV0X2RhdGEodmFsPj44KTsJCQlcCisJCUFtOTUxM19vdXRwdXRfZGF0YSh2YWwmMHhmZik7CQkJXAorCX13aGlsZSgwKQorCisjZGVmaW5lIEFtOTUxM19yZWFkX3JlZ2lzdGVyKHJlZyx2YWwpCQkJCVwKKwlkb3sJCQkJCQkJXAorCQlBbTk1MTNfb3V0cHV0X2NvbnRyb2wocmVnKTsJCQlcCisJCXZhbD1BbTk1MTNfaW5wdXRfZGF0YSgpPDw4OwkJCVwKKwkJdmFsfD1BbTk1MTNfaW5wdXRfZGF0YSgpOwkJCVwKKwl9d2hpbGUoMCkKKworI2Vsc2UgLyogQW05NTEzXzE2QklUQlVTICovCisKKyNkZWZpbmUgQW05NTEzX3dyaXRlX3JlZ2lzdGVyKHJlZyx2YWwpCQkJCVwKKwlkb3sJCQkJCQkJXAorCQlBbTk1MTNfb3V0cHV0X2NvbnRyb2wocmVnKTsJCQlcCisJCUFtOTUxM19vdXRwdXRfZGF0YSh2YWwpOwkJCVwKKwl9d2hpbGUoMCkKKworI2RlZmluZSBBbTk1MTNfcmVhZF9yZWdpc3RlcihyZWcsdmFsKQkJCQlcCisJZG97CQkJCQkJCVwKKwkJQW05NTEzX291dHB1dF9jb250cm9sKHJlZyk7CQkJXAorCQl2YWw9QW05NTEzX2lucHV0X2RhdGEoKTsJCQlcCisJfXdoaWxlKDApCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbWNjX3M1OTMzLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1jY19zNTkzMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZWZmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1jY19zNTkzMy5oCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2FtY2NfczU5MzMuaAorCisgICAgU3R1ZmYgZm9yIEFNQ0MgUzU5MzMgUENJIENvbnRyb2xsZXIKKworICAgIEF1dGhvcjogTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CisKKyAgICBJbnNwaXJhdGVkIGZyb20gZ2VuZXJhbC1wdXJwb3NlIEFNQ0MgUzU5MzMgUENJIE1hdGNobWFrZXIgZHJpdmVyCisgICAgbWFkZSBieSBBbmRyZWEgQ2lzdGVybmlubyAgPGFjaXN0ZXJAcGNhcGUxLnBpLmluZm4uaXQ+CisgICAgYW5kIGFzIHJlc3VsdCBvZiBlc3Bpb25hZ2UgZnJvbSBNSVRFIGNvZGUgbWFkZSBieSBEYXZpZCBBLiBTY2hsZWVmLgorICAgIFRoYW5rcyB0byBBTUNDIGZvciB0aGVpciBvbi1saW5lIGRvY3VtZW50YXRpb24gYW5kIGJ1cyBtYXN0ZXIgRE1BCisgICAgZXhhbXBsZS4KKyovCisKKyNpZm5kZWYgX0FNQ0NfUzU5MzNfSF8KKyNkZWZpbmUgX0FNQ0NfUzU5MzNfSF8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBTUNDIE9wZXJhdGlvbiBSZWdpc3RlciBPZmZzZXRzIC0gUENJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjEgICAgICAgICAweDAwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjIgICAgICAgICAweDA0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjMgICAgICAgICAweDA4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX09NQjQgICAgICAgICAweDBjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lNQjEgICAgICAgICAweDEwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lNQjIgICAgICAgICAweDE0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lNQjMgICAgICAgICAweDE4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lNQjQgICAgICAgICAweDFjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0ZJRk8gICAgICAgICAweDIwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01XQVIgICAgICAgICAweDI0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX01XVEMgICAgICAgICAweDI4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX01SQVIgICAgICAgICAweDJjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01SVEMgICAgICAgICAweDMwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX01CRUYgICAgICAgICAweDM0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0lOVENTUiAgICAgICAweDM4CisjZGVmaW5lICBBTUNDX09QX1JFR19JTlRDU1JfU1JDICAoQU1DQ19PUF9SRUdfSU5UQ1NSICsgMikJLyogSU5UIHNvdXJjZSAqLworI2RlZmluZSAgQU1DQ19PUF9SRUdfSU5UQ1NSX0ZFQyAgKEFNQ0NfT1BfUkVHX0lOVENTUiArIDMpCS8qIEZJRk8gY3RybCAqLworI2RlZmluZSBBTUNDX09QX1JFR19NQ1NSICAgICAgICAgMHgzYworI2RlZmluZSAgQU1DQ19PUF9SRUdfTUNTUl9OVkRBVEEgKEFNQ0NfT1BfUkVHX01DU1IgKyAyKQkvKiBEYXRhIGluIGJ5dGUgMiAqLworI2RlZmluZSAgQU1DQ19PUF9SRUdfTUNTUl9OVkNNRCAgKEFNQ0NfT1BfUkVHX01DU1IgKyAzKQkvKiBDb21tYW5kIGluIGJ5dGUgMyAqLworCisjZGVmaW5lIEFNQ0NfRklGT19ERVBUSF9EV09SRAk4CisjZGVmaW5lIEFNQ0NfRklGT19ERVBUSF9CWVRFUwkoOCAqIHNpemVvZiAodTMyKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBTUNDIC0gUENJIEludGVycnVwdCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElOVENTUl9PVVRCT1hfQllURSh4KQkoKHgpICYgMHgzKQorI2RlZmluZSBJTlRDU1JfT1VUQk9YX1NFTEVDVCh4KQkoKCh4KSAmIDB4MykgPDwgMikKKyNkZWZpbmUgSU5UQ1NSX09VVEJPWF9FTVBUWV9JTlQJMHgxMAkvLyBlbmFibGUgb3V0Ym94IGVtcHR5IGludGVycnVwdAorI2RlZmluZSBJTlRDU1JfSU5CT1hfQllURSh4KQkoKCh4KSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgSU5UQ1NSX0lOQk9YX1NFTEVDVCh4KQkoKCh4KSAmIDB4MykgPDwgMTApCisjZGVmaW5lIElOVENTUl9JTkJPWF9GVUxMX0lOVAkweDEwMDAJLy8gZW5hYmxlIGluYm94IGZ1bGwgaW50ZXJydXB0CisjZGVmaW5lIElOVENTUl9JTkJPWF9JTlRSX1NUQVRVUwkweDIwMDAwCS8vIHJlYWQsIG9yIHdyaXRlIGNsZWFyIGluYm94IGZ1bGwgaW50ZXJydXB0CisjZGVmaW5lIElOVENTUl9JTlRSX0FTU0VSVEVECTB4ODAwMDAwCS8vIHJlYWQgb25seSwgaW50ZXJydXB0IGFzc2VydGVkCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyAtIFBDSSBub24tdm9sYXRpbGUgcmFtIGNvbW1hbmQgcmVnaXN0ZXIgKGJ5dGUgMyBvZiBtYXN0ZXIgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXIpICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUNTUl9OVl9MT0FEX0xPV19BRERSCTB4MAorI2RlZmluZSBNQ1NSX05WX0xPQURfSElHSF9BRERSCTB4MjAKKyNkZWZpbmUgTUNTUl9OVl9XUklURQkweDQwCisjZGVmaW5lIE1DU1JfTlZfUkVBRAkweDYwCisjZGVmaW5lIE1DU1JfTlZfTUFTSwkweDYwCisjZGVmaW5lIE1DU1JfTlZfRU5BQkxFCTB4ODAKKyNkZWZpbmUgTUNTUl9OVl9CVVNZCU1DU1JfTlZfRU5BQkxFCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyBPcGVyYXRpb24gUmVnaXN0ZXJzIFNpemUgLSBQQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBBTUNDX09QX1JFR19TSVpFCSA2NAkvKiBpbiBieXRlcyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEFNQ0MgT3BlcmF0aW9uIFJlZ2lzdGVyIE9mZnNldHMgLSBBZGQtb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjEgICAgICAgICAweDAwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FJTUIyICAgICAgICAgMHgwNAorI2RlZmluZSBBTUNDX09QX1JFR19BSU1CMyAgICAgICAgIDB4MDgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUlNQjQgICAgICAgICAweDBjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUIxICAgICAgICAgMHgxMAorI2RlZmluZSBBTUNDX09QX1JFR19BT01CMiAgICAgICAgIDB4MTQKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU9NQjMgICAgICAgICAweDE4CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FPTUI0ICAgICAgICAgMHgxYworI2RlZmluZSBBTUNDX09QX1JFR19BRklGTyAgICAgICAgIDB4MjAKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1XQVIgICAgICAgICAweDI0CisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FQVEEgICAgICAgICAgMHgyOAorI2RlZmluZSBBTUNDX09QX1JFR19BUFREICAgICAgICAgIDB4MmMKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQU1SQVIgICAgICAgICAweDMwCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNQkVGICAgICAgICAgMHgzNAorI2RlZmluZSBBTUNDX09QX1JFR19BSU5UICAgICAgICAgIDB4MzgKKyNkZWZpbmUgQU1DQ19PUF9SRUdfQUdDU1RTICAgICAgICAweDNjCisjZGVmaW5lIEFNQ0NfT1BfUkVHX0FNV1RDICAgICAgICAgMHg1OAorI2RlZmluZSBBTUNDX09QX1JFR19BTVJUQyAgICAgICAgIDB4NWMKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBBTUNDIC0gQWRkLW9uIEdlbmVyYWwgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFHQ1NUU19DT05UUk9MX01BU0sJMHhmZmZmZjAwMAorI2RlZmluZSAgQUdDU1RTX05WX0FDQ19NQVNLCTB4ZTAwMDAwMDAKKyNkZWZpbmUgIEFHQ1NUU19SRVNFVF9NQVNLCTB4MGUwMDAwMDAKKyNkZWZpbmUgIEFHQ1NUU19OVl9EQV9NQVNLCTB4MDBmZjAwMDAKKyNkZWZpbmUgIEFHQ1NUU19CSVNUX01BU0sJMHgwMDAwZjAwMAorI2RlZmluZSBBR0NTVFNfU1RBVFVTX01BU0sJMHgwMDAwMDBmZgorI2RlZmluZSAgQUdDU1RTX1RDWkVST19NQVNLCTB4MDAwMDAwYzAKKyNkZWZpbmUgIEFHQ1NUU19GSUZPX1NUX01BU0sJMHgwMDAwMDAzZgorCisjZGVmaW5lIEFHQ1NUU19SRVNFVF9NQkZMQUdTCTB4MDgwMDAwMDAKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX1AyQV9GSUZPCTB4MDQwMDAwMDAKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX0EyUF9GSUZPCTB4MDIwMDAwMDAKKyNkZWZpbmUgQUdDU1RTX1JFU0VUX0ZJRk9TCShBR0NTVFNfUkVTRVRfQTJQX0ZJRk8gfCBBR0NTVFNfUkVTRVRfUDJBX0ZJRk8pCisKKyNkZWZpbmUgQUdDU1RTX0EyUF9UQ09VTlQJMHgwMDAwMDA4MAorI2RlZmluZSBBR0NTVFNfUDJBX1RDT1VOVAkweDAwMDAwMDQwCisKKyNkZWZpbmUgQUdDU1RTX0ZTX1AyQV9FTVBUWQkweDAwMDAwMDIwCisjZGVmaW5lIEFHQ1NUU19GU19QMkFfSEFMRgkweDAwMDAwMDEwCisjZGVmaW5lIEFHQ1NUU19GU19QMkFfRlVMTAkweDAwMDAwMDA4CisKKyNkZWZpbmUgQUdDU1RTX0ZTX0EyUF9FTVBUWQkweDAwMDAwMDA0CisjZGVmaW5lIEFHQ1NUU19GU19BMlBfSEFMRgkweDAwMDAwMDAyCisjZGVmaW5lIEFHQ1NUU19GU19BMlBfRlVMTAkweDAwMDAwMDAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQU1DQyAtIEFkZC1vbiBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFJTlRfSU5UX01BU0sJCTB4MDBmZjAwMDAKKyNkZWZpbmUgQUlOVF9TRUxfTUFTSwkJMHgwMDAwZmZmZgorI2RlZmluZSAgQUlOVF9JU19FTlNFTF9NQVNLCTB4MDAwMDFmMWYKKworI2RlZmluZSBBSU5UX0lOVF9BU1NFUlRFRAkweDAwODAwMDAwCisjZGVmaW5lIEFJTlRfQk1fRVJST1IJCTB4MDAyMDAwMDAKKyNkZWZpbmUgQUlOVF9CSVNUX0lOVAkJMHgwMDEwMDAwMAorCisjZGVmaW5lIEFJTlRfUlRfQ09NUExFVEUJMHgwMDA4MDAwMAorI2RlZmluZSBBSU5UX1dUX0NPTVBMRVRFCTB4MDAwNDAwMDAKKworI2RlZmluZSBBSU5UX09VVF9NQl9JTlQJCTB4MDAwMjAwMDAKKyNkZWZpbmUgQUlOVF9JTl9NQl9JTlQJCTB4MDAwMTAwMDAKKworI2RlZmluZSBBSU5UX1JFQURfQ09NUEwJCTB4MDAwMDgwMDAKKyNkZWZpbmUgQUlOVF9XUklURV9DT01QTAkweDAwMDA0MDAwCisKKyNkZWZpbmUgQUlOVF9PTUJfRU5BQkxFIAkweDAwMDAxMDAwCisjZGVmaW5lIEFJTlRfT01CX1NFTEVDVCAJMHgwMDAwMGMwMAorI2RlZmluZSBBSU5UX09NQl9CWVRFCQkweDAwMDAwMzAwCisKKyNkZWZpbmUgQUlOVF9JTUJfRU5BQkxFIAkweDAwMDAwMDEwCisjZGVmaW5lIEFJTlRfSU1CX1NFTEVDVCAJMHgwMDAwMDAwYworI2RlZmluZSBBSU5UX0lNQl9CWVRFCQkweDAwMDAwMDAzCisKKy8vIHRoZXNlIGFyZSBiaXRzIGZyb20gdmFyaW91cyBkaWZmZXJlbnQgcmVnaXN0ZXJzLCBuZWVkcyBjbGVhbnVwIFhYWAorLyogRW5hYmxlIEJ1cyBNYXN0ZXJpbmcgKi8KKyNkZWZpbmUgRU5fQTJQX1RSQU5TRkVSUwkweDAwMDAwNDAwCisvKiBGSUZPIEZsYWcgUmVzZXQgKi8KKyNkZWZpbmUgUkVTRVRfQTJQX0ZMQUdTCQkweDA0MDAwMDAwTAorLyogRklGTyBSZWxhdGl2ZSBQcmlvcml0eSAqLworI2RlZmluZSBBMlBfSElfUFJJT1JJVFkJCTB4MDAwMDAxMDBMCisvKiBJZGVudGlmeSBJbnRlcnJ1cHQgU291cmNlcyAqLworI2RlZmluZSBBTllfUzU5M1hfSU5UCQkweDAwODAwMDAwTAorI2RlZmluZSBSRUFEX1RDX0lOVAkJMHgwMDA4MDAwMEwKKyNkZWZpbmUgV1JJVEVfVENfSU5UCQkweDAwMDQwMDAwTAorI2RlZmluZSBJTl9NQl9JTlQJCTB4MDAwMjAwMDBMCisjZGVmaW5lIE1BU1RFUl9BQk9SVF9JTlQJMHgwMDEwMDAwMEwKKyNkZWZpbmUgVEFSR0VUX0FCT1JUX0lOVAkweDAwMjAwMDAwTAorI2RlZmluZSBCVVNfTUFTVEVSX0lOVAkJMHgwMDIwMDAwMEwKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1NWUyNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19kaW8yMDAuYwpAQCAtMCwwICsxLDE0ODMgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwLmMKKyAgICBEcml2ZXIgZm9yIEFtcGxpY29uIFBDMjcyRSBhbmQgUENJMjcyIERJTyBib2FyZHMuCisgICAgKFN1cHBvcnQgZm9yIG90aGVyIGJvYXJkcyBpbiBBbXBsaWNvbiAyMDAgc2VyaWVzIG1heSBiZSBhZGRlZCBhdAorICAgIGEgbGF0ZXIgZGF0ZSwgZS5nLiBQQ0kyMTUuKQorCisgICAgQ29weXJpZ2h0IChDKSAyMDA1IE1FViBMdGQuIDxodHRwOi8vd3d3Lm1ldi5jby51ay8+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGFtcGxjX2RpbzIwMAorRGVzY3JpcHRpb246IEFtcGxpY29uIDIwMCBTZXJpZXMgRGlnaXRhbCBJL08KK0F1dGhvcjogSWFuIEFiYm90dCA8YWJib3R0aUBtZXYuY28udWs+CitEZXZpY2VzOiBbQW1wbGljb25dIFBDMjEyRSAocGMyMTJlKSwgUEMyMTRFIChwYzIxNGUpLCBQQzIxNUUgKHBjMjE1ZSksCisgIFBDSTIxNSAocGNpMjE1IG9yIGFtcGxjX2RpbzIwMCksIFBDMjE4RSAocGMyMThlKSwgUEMyNzJFIChwYzI3MmUpLAorICBQQ0kyNzIgKHBjaTI3MiBvciBhbXBsY19kaW8yMDApCitVcGRhdGVkOiBXZWQsIDIyIE9jdCAyMDA4IDEzOjM2OjAyICswMTAwCitTdGF0dXM6IHdvcmtzCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9ucyAtIFBDMjEyRSwgUEMyMTRFLCBQQzIxNUUsIFBDMjE4RSwgUEMyNzJFOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRIChvcHRpb25hbCwgYnV0IGNvbW1hbmRzIHdvbid0IHdvcmsgd2l0aG91dCBpdCkKKworQ29uZmlndXJhdGlvbiBvcHRpb25zIC0gUENJMjE1LCBQQ0kyNzI6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kgZGV2aWNlIHdpbGwKKyAgYmUgdXNlZC4KKworUGFzc2luZyBhIHplcm8gZm9yIGFuIG9wdGlvbiBpcyB0aGUgc2FtZSBhcyBsZWF2aW5nIGl0IHVuc3BlY2lmaWVkLgorCitTVUJERVZJQ0VTCisKKyAgICAgICAgICAgICAgICAgICAgUEMyMThFICAgICAgICAgUEMyMTJFICAgICAgUEMyMTVFL1BDSTIxNQorICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tCisgIFN1YmRldmljZXMgICAgICAgICAgIDcgICAgICAgICAgICAgIDYgICAgICAgICAgICAgIDUKKyAgIDAgICAgICAgICAgICAgICAgIENUUi1YMSAgICAgICAgIFBQSS1YICAgICAgICAgIFBQSS1YCisgICAxICAgICAgICAgICAgICAgICBDVFItWDIgICAgICAgICBDVFItWTEgICAgICAgICBQUEktWQorICAgMiAgICAgICAgICAgICAgICAgQ1RSLVkxICAgICAgICAgQ1RSLVkyICAgICAgICAgQ1RSLVoxCisgICAzICAgICAgICAgICAgICAgICBDVFItWTIgICAgICAgICBDVFItWjEgICAgICAgICBDVFItWjIKKyAgIDQgICAgICAgICAgICAgICAgIENUUi1aMSAgICAgICAgIENUUi1aMiAgICAgICBJTlRFUlJVUFQKKyAgIDUgICAgICAgICAgICAgICAgIENUUi1aMiAgICAgICBJTlRFUlJVUFQKKyAgIDYgICAgICAgICAgICAgICBJTlRFUlJVUFQKKworICAgICAgICAgICAgICAgICAgICBQQzIxNEUgICAgICBQQzI3MkUvUENJMjcyCisgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KKyAgU3ViZGV2aWNlcyAgICAgICAgICAgNCAgICAgICAgICAgICAgNAorICAgMCAgICAgICAgICAgICAgICAgUFBJLVggICAgICAgICAgUFBJLVgKKyAgIDEgICAgICAgICAgICAgICAgIFBQSS1ZICAgICAgICAgIFBQSS1ZCisgICAyICAgICAgICAgICAgICAgICBDVFItWjEqICAgICAgICBQUEktWgorICAgMyAgICAgICAgICAgICAgIElOVEVSUlVQVCogICAgIElOVEVSUlVQVAorCitFYWNoIFBQSSBpcyBhIDgyNTUgY2hpcCBwcm92aWRpbmcgMjQgRElPIGNoYW5uZWxzLiAgVGhlIERJTyBjaGFubmVscworYXJlIGNvbmZpZ3VyYWJsZSBhcyBpbnB1dHMgb3Igb3V0cHV0cyBpbiBmb3VyIGdyb3VwczoKKworICBQb3J0IEEgIC0gY2hhbm5lbHMgIDAgdG8gIDcKKyAgUG9ydCBCICAtIGNoYW5uZWxzICA4IHRvIDE1CisgIFBvcnQgQ0wgLSBjaGFubmVscyAxNiB0byAxOQorICBQb3J0IENIIC0gY2hhbm5lbHMgMjAgdG8gMjMKKworT25seSBtb2RlIDAgb2YgdGhlIDgyNTUgY2hpcHMgaXMgc3VwcG9ydGVkLgorCitFYWNoIENUUiBpcyBhIDgyNTQgY2hpcCBwcm92aWRpbmcgMyAxNi1iaXQgY291bnRlciBjaGFubmVscy4gIEVhY2gKK2NoYW5uZWwgaXMgY29uZmlndXJlZCBpbmRpdmlkdWFsbHkgd2l0aCBJTlNOX0NPTkZJRyBpbnN0cnVjdGlvbnMuICBUaGUKK3NwZWNpZmljIHR5cGUgb2YgY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbiBpcyBzcGVjaWZpZWQgaW4gZGF0YVswXS4KK1NvbWUgY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbnMgZXhwZWN0IGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyIGluCitkYXRhWzFdOyBvdGhlcnMgcmV0dXJuIGEgdmFsdWUgaW4gZGF0YVsxXS4gIFRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbgoraW5zdHJ1Y3Rpb25zIGFyZSBzdXBwb3J0ZWQ6CisKKyAgSU5TTl9DT05GSUdfU0VUX0NPVU5URVJfTU9ERS4gIFNldHMgdGhlIGNvdW50ZXIgY2hhbm5lbCdzIG1vZGUgYW5kCisgICAgQkNEL2JpbmFyeSBzZXR0aW5nIHNwZWNpZmllZCBpbiBkYXRhWzFdLgorCisgIElOU05fQ09ORklHXzgyNTRfUkVBRF9TVEFUVVMuICBSZWFkcyB0aGUgc3RhdHVzIHJlZ2lzdGVyIHZhbHVlIGZvciB0aGUKKyAgICBjb3VudGVyIGNoYW5uZWwgaW50byBkYXRhWzFdLgorCisgIElOU05fQ09ORklHX1NFVF9DTE9DS19TUkMuICBTZXRzIHRoZSBjb3VudGVyIGNoYW5uZWwncyBjbG9jayBzb3VyY2UgYXMKKyAgICBzcGVjaWZpZWQgaW4gZGF0YVsxXSAodGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHZhbHVlKS4gIE5vdAorICAgIHN1cHBvcnRlZCBvbiBQQzIxNEUuICBGb3IgdGhlIG90aGVyIGJvYXJkcywgdmFsaWQgY2xvY2sgc291cmNlcyBhcmUKKyAgICAwIHRvIDcgYXMgZm9sbG93czoKKworICAgICAgMC4gIENMSyBuLCB0aGUgY291bnRlciBjaGFubmVsJ3MgZGVkaWNhdGVkIENMSyBpbnB1dCBmcm9tIHRoZSBTSzEKKyAgICAgICAgY29ubmVjdG9yLiAgKE4uQi4gZm9yIG90aGVyIHZhbHVlcywgdGhlIGNvdW50ZXIgY2hhbm5lbCdzIENMS24KKyAgICAgICAgcGluIG9uIHRoZSBTSzEgY29ubmVjdG9yIGlzIGFuIG91dHB1dCEpCisgICAgICAxLiAgSW50ZXJuYWwgMTAgTUh6IGNsb2NrLgorICAgICAgMi4gIEludGVybmFsIDEgTUh6IGNsb2NrLgorICAgICAgMy4gIEludGVybmFsIDEwMCBrSHogY2xvY2suCisgICAgICA0LiAgSW50ZXJuYWwgMTAga0h6IGNsb2NrLgorICAgICAgNS4gIEludGVybmFsIDEga0h6IGNsb2NrLgorICAgICAgNi4gIE9VVCBuLTEsIHRoZSBvdXRwdXQgb2YgY291bnRlciBjaGFubmVsIG4tMSAoc2VlIG5vdGUgMSBiZWxvdykuCisgICAgICA3LiAgRXh0IENsb2NrLCB0aGUgY291bnRlciBjaGlwJ3MgZGVkaWNhdGVkIEV4dCBDbG9jayBpbnB1dCBmcm9tCisgICAgICAgIHRoZSBTSzEgY29ubmVjdG9yLiAgVGhpcyBwaW4gaXMgc2hhcmVkIGJ5IGFsbCB0aHJlZSBjb3VudGVyCisgICAgICAgIGNoYW5uZWxzIG9uIHRoZSBjaGlwLgorCisgIElOU05fQ09ORklHX0dFVF9DTE9DS19TUkMuICBSZXR1cm5zIHRoZSBjb3VudGVyIGNoYW5uZWwncyBjdXJyZW50CisgICAgY2xvY2sgc291cmNlIGluIGRhdGFbMV0uICBGb3IgaW50ZXJuYWwgY2xvY2sgc291cmNlcywgZGF0YVsyXSBpcyBzZXQKKyAgICB0byB0aGUgcGVyaW9kIGluIG5zLgorCisgIElOU05fQ09ORklHX1NFVF9HQVRFX1NSQy4gIFNldHMgdGhlIGNvdW50ZXIgY2hhbm5lbCdzIGdhdGUgc291cmNlIGFzCisgICAgc3BlY2lmaWVkIGluIGRhdGFbMl0gKHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyB2YWx1ZSkuICBOb3QKKyAgICBzdXBwb3J0ZWQgb24gUEMyMTRFLiAgRm9yIHRoZSBvdGhlciBib2FyZHMsIHZhbGlkIGdhdGUgc291cmNlcyBhcmUgMAorICAgIHRvIDcgYXMgZm9sbG93czoKKworICAgICAgMC4gIFZDQyAoaW50ZXJuYWwgKzVWIGQuYy4pLCBpLmUuIGdhdGUgcGVybWFuZW50bHkgZW5hYmxlZC4KKyAgICAgIDEuICBHTkQgKGludGVybmFsIDBWIGQuYy4pLCBpLmUuIGdhdGUgcGVybWFuZW50bHkgZGlzYWJsZWQuCisgICAgICAyLiAgR0FUIG4sIHRoZSBjb3VudGVyIGNoYW5uZWwncyBkZWRpY2F0ZWQgR0FUIGlucHV0IGZyb20gdGhlIFNLMQorICAgICAgICBjb25uZWN0b3IuICAoTi5CLiBmb3Igb3RoZXIgdmFsdWVzLCB0aGUgY291bnRlciBjaGFubmVsJ3MgR0FUbgorICAgICAgICBwaW4gb24gdGhlIFNLMSBjb25uZWN0b3IgaXMgYW4gb3V0cHV0ISkKKyAgICAgIDMuICAvT1VUIG4tMiwgdGhlIGludmVydGVkIG91dHB1dCBvZiBjb3VudGVyIGNoYW5uZWwgbi0yIChzZWUgbm90ZQorICAgICAgICAyIGJlbG93KS4KKyAgICAgIDQuICBSZXNlcnZlZC4KKyAgICAgIDUuICBSZXNlcnZlZC4KKyAgICAgIDYuICBSZXNlcnZlZC4KKyAgICAgIDcuICBSZXNlcnZlZC4KKworICBJTlNOX0NPTkZJR19HRVRfR0FURV9TUkMuICBSZXR1cm5zIHRoZSBjb3VudGVyIGNoYW5uZWwncyBjdXJyZW50IGdhdGUKKyAgICBzb3VyY2UgaW4gZGF0YVsyXS4KKworQ2xvY2sgYW5kIGdhdGUgaW50ZXJjb25uZWN0aW9uIG5vdGVzOgorCisgIDEuICBDbG9jayBzb3VyY2UgT1VUIG4tMSBpcyB0aGUgb3V0cHV0IG9mIHRoZSBwcmVjZWRpbmcgY2hhbm5lbCBvbiB0aGUKKyAgc2FtZSBjb3VudGVyIHN1YmRldmljZSBpZiBuID4gMCwgb3IgdGhlIG91dHB1dCBvZiBjaGFubmVsIDIgb24gdGhlCisgIHByZWNlZGluZyBjb3VudGVyIHN1YmRldmljZSAoc2VlIG5vdGUgMykgaWYgbiA9IDAuCisKKyAgMi4gIEdhdGUgc291cmNlIC9PVVQgbi0yIGlzIHRoZSBpbnZlcnRlZCBvdXRwdXQgb2YgY2hhbm5lbCAwIG9uIHRoZQorICBzYW1lIGNvdW50ZXIgc3ViZGV2aWNlIGlmIG4gPSAyLCBvciB0aGUgaW52ZXJ0ZWQgb3V0cHV0IG9mIGNoYW5uZWwgbisxCisgIG9uIHRoZSBwcmVjZWRpbmcgY291bnRlciBzdWJkZXZpY2UgKHNlZSBub3RlIDMpIGlmIG4gPCAyLgorCisgIDMuICBUaGUgY291bnRlciBzdWJkZXZpY2VzIGFyZSBjb25uZWN0ZWQgaW4gYSByaW5nLCBzbyB0aGUgaGlnaGVzdAorICBjb3VudGVyIHN1YmRldmljZSBwcmVjZWRlcyB0aGUgbG93ZXN0LgorCitUaGUgJ0lOVEVSUlVQVCcgc3ViZGV2aWNlIHByZXRlbmRzIHRvIGJlIGEgZGlnaXRhbCBpbnB1dCBzdWJkZXZpY2UuICBUaGUKK2RpZ2l0YWwgaW5wdXRzIGNvbWUgZnJvbSB0aGUgaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlci4gIFRoZSBudW1iZXIgb2YKK2NoYW5uZWxzIG1hdGNoZXMgdGhlIG51bWJlciBvZiBpbnRlcnJ1cHQgc291cmNlcy4gIFRoZSBQQzIxNEUgZG9lcyBub3QKK2hhdmUgYW4gaW50ZXJydXB0IHN0YXR1cyByZWdpc3Rlcjsgc2VlIG5vdGVzIG9uICdJTlRFUlJVUFQgU09VUkNFUycKK2JlbG93LgorCitJTlRFUlJVUFQgU09VUkNFUworCisgICAgICAgICAgICAgICAgICAgIFBDMjE4RSAgICAgICAgIFBDMjEyRSAgICAgIFBDMjE1RS9QQ0kyMTUKKyAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLQorICBTb3VyY2VzICAgICAgICAgICAgICA2ICAgICAgICAgICAgICA2ICAgICAgICAgICAgICA2CisgICAwICAgICAgICAgICAgICBDVFItWDEtT1VUICAgICAgUFBJLVgtQzAgICAgICAgUFBJLVgtQzAKKyAgIDEgICAgICAgICAgICAgIENUUi1YMi1PVVQgICAgICBQUEktWC1DMyAgICAgICBQUEktWC1DMworICAgMiAgICAgICAgICAgICAgQ1RSLVkxLU9VVCAgICAgQ1RSLVkxLU9VVCAgICAgIFBQSS1ZLUMwCisgICAzICAgICAgICAgICAgICBDVFItWTItT1VUICAgICBDVFItWTItT1VUICAgICAgUFBJLVktQzMKKyAgIDQgICAgICAgICAgICAgIENUUi1aMS1PVVQgICAgIENUUi1aMS1PVVQgICAgIENUUi1aMS1PVVQKKyAgIDUgICAgICAgICAgICAgIENUUi1aMi1PVVQgICAgIENUUi1aMi1PVVQgICAgIENUUi1aMi1PVVQKKworICAgICAgICAgICAgICAgICAgICBQQzIxNEUgICAgICBQQzI3MkUvUENJMjcyCisgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KKyAgU291cmNlcyAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgNgorICAgMCAgICAgICAgICAgICAgIEpVTVBFUi1KNSAgICAgIFBQSS1YLUMwCisgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBJLVgtQzMKKyAgIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEktWS1DMAorICAgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQSS1ZLUMzCisgICA0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBJLVotQzAKKyAgIDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEktWi1DMworCitXaGVuIGFuIGludGVycnVwdCBzb3VyY2UgaXMgZW5hYmxlZCBpbiB0aGUgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUKK3JlZ2lzdGVyLCBhIHJpc2luZyBlZGdlIG9uIHRoZSBzb3VyY2Ugc2lnbmFsIGxhdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcKK2JpdCB0byAxIGluIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLgorCitXaGVuIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIHZhbHVlIGFzIGEgd2hvbGUgKGFjdHVhbGx5LCBqdXN0IHRoZQorNiBsZWFzdCBzaWduaWZpY2FudCBiaXRzKSBnb2VzIGZyb20gemVybyB0byBub24temVybywgdGhlIGJvYXJkIHdpbGwKK2dlbmVyYXRlIGFuIGludGVycnVwdC4gIEZvciBsZXZlbC10cmlnZ2VyZWQgaGFyZHdhcmUgaW50ZXJydXB0cyAoUENJCitjYXJkKSwgdGhlIGludGVycnVwdCB3aWxsIHJlbWFpbiBhc3NlcnRlZCB1bnRpbCB0aGUgaW50ZXJydXB0IHN0YXR1cworcmVnaXN0ZXIgaXMgY2xlYXJlZCB0byB6ZXJvLiAgRm9yIGVkZ2UtdHJpZ2dlcmVkIGhhcmR3YXJlIGludGVycnVwdHMKKyhJU0EgY2FyZCksIG5vIGZ1cnRoZXIgaW50ZXJydXB0cyB3aWxsIG9jY3VyIHVudGlsIHRoZSBpbnRlcnJ1cHQgc3RhdHVzCityZWdpc3RlciBpcyBjbGVhcmVkIHRvIHplcm8uICBUbyBjbGVhciBhIGJpdCB0byB6ZXJvIGluIHRoZSBpbnRlcnJ1cHQKK3N0YXR1cyByZWdpc3RlciwgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHNvdXJjZSBtdXN0IGJlIGRpc2FibGVkCitpbiB0aGUgaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgcmVnaXN0ZXIgKHRoZXJlIGlzIG5vIHNlcGFyYXRlIGludGVycnVwdAorY2xlYXIgcmVnaXN0ZXIpLgorCitUaGUgUEMyMTRFIGRvZXMgbm90IGhhdmUgYW4gaW50ZXJydXB0IHNvdXJjZSBlbmFibGUgcmVnaXN0ZXIgb3IgYW4KK2ludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXI7IGl0cyAnSU5URVJSVVBUJyBzdWJkZXZpY2UgaGFzIGEgc2luZ2xlCitjaGFubmVsIGFuZCBpdHMgaW50ZXJydXB0IHNvdXJjZSBpcyBzZWxlY3RlZCBieSB0aGUgcG9zaXRpb24gb2YganVtcGVyCitKNS4KKworQ09NTUFORFMKKworVGhlIGRyaXZlciBzdXBwb3J0cyBhIHJlYWQgc3RyZWFtaW5nIGFjcXVpc2l0aW9uIGNvbW1hbmQgb24gdGhlCisnSU5URVJSVVBUJyBzdWJkZXZpY2UuICBUaGUgY2hhbm5lbCBsaXN0IHNlbGVjdHMgdGhlIGludGVycnVwdCBzb3VyY2VzCit0byBiZSBlbmFibGVkLiAgQWxsIGNoYW5uZWxzIHdpbGwgYmUgc2FtcGxlZCB0b2dldGhlciAoY29udmVydF9zcmMgPT0KK1RSSUdfTk9XKS4gIFRoZSBzY2FuIGJlZ2lucyBhIHNob3J0IHRpbWUgYWZ0ZXIgdGhlIGhhcmR3YXJlIGludGVycnVwdAorb2NjdXJzLCBzdWJqZWN0IHRvIGludGVycnVwdCBsYXRlbmNpZXMgKHNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhULAorc2Nhbl9iZWdpbl9hcmcgPT0gMCkuICBUaGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyCitpcyBwYWNrZWQgaW50byBhIHNob3J0IHZhbHVlLCBvbmUgYml0IHBlciByZXF1ZXN0ZWQgY2hhbm5lbCwgaW4gdGhlCitvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgY2hhbm5lbCBsaXN0LgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorCisjaW5jbHVkZSAiODI1NS5oIgorI2luY2x1ZGUgIjgyNTMuaCIKKworI2RlZmluZSBESU8yMDBfRFJJVkVSX05BTUUJImFtcGxjX2RpbzIwMCIKKworLyogUENJIElEcyAqLworLyogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FNUExJQ09OIDB4MTRkYyAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTI3MiAweDAwMGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMTUgMHgwMDBiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5WQUxJRCAweGZmZmYKKworLyogMjAwIHNlcmllcyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRElPMjAwX0lPX1NJWkUJCTB4MjAKKyNkZWZpbmUgRElPMjAwX1hDTEtfU0NFCQkweDE4CS8qIEdyb3VwIFggY2xvY2sgc2VsZWN0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIERJTzIwMF9ZQ0xLX1NDRQkJMHgxOQkvKiBHcm91cCBZIGNsb2NrIHNlbGVjdGlvbiByZWdpc3RlciAqLworI2RlZmluZSBESU8yMDBfWkNMS19TQ0UJCTB4MWEJLyogR3JvdXAgWiBjbG9jayBzZWxlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElPMjAwX1hHQVRfU0NFCQkweDFiCS8qIEdyb3VwIFggZ2F0ZSBzZWxlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElPMjAwX1lHQVRfU0NFCQkweDFjCS8qIEdyb3VwIFkgZ2F0ZSBzZWxlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElPMjAwX1pHQVRfU0NFCQkweDFkCS8qIEdyb3VwIFogZ2F0ZSBzZWxlY3Rpb24gcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRElPMjAwX0lOVF9TQ0UJCTB4MWUJLyogSW50ZXJydXB0IGVuYWJsZS9zdGF0dXMgcmVnaXN0ZXIgKi8KKworLyoKKyAqIE1hY3JvcyBmb3IgY29uc3RydWN0aW5nIHZhbHVlIGZvciBESU9fMjAwXz9DTEtfU0NFIGFuZAorICogRElPXzIwMF8/R0FUX1NDRSByZWdpc3RlcnM6CisgKgorICogJ3doaWNoJyBpczogMCBmb3IgQ1RSLVgxLCBDVFItWTEsIENUUi1aMTsgMSBmb3IgQ1RSLVgyLCBDVFItWTIgb3IgQ1RSLVoyLgorICogJ2NoYW4nIGlzIHRoZSBjaGFubmVsOiAwLCAxIG9yIDIuCisgKiAnc291cmNlJyBpcyB0aGUgc2lnbmFsIHNvdXJjZTogMCB0byA3LgorICovCisjZGVmaW5lIENMS19TQ0Uod2hpY2gsIGNoYW4sIHNvdXJjZSkgKCgod2hpY2gpIDw8IDUpIHwgKChjaGFuKSA8PCAzKSB8IChzb3VyY2UpKQorI2RlZmluZSBHQVRfU0NFKHdoaWNoLCBjaGFuLCBzb3VyY2UpICgoKHdoaWNoKSA8PCA1KSB8ICgoY2hhbikgPDwgMykgfCAoc291cmNlKSkKKworLyoKKyAqIFBlcmlvZHMgb2YgdGhlIGludGVybmFsIGNsb2NrIHNvdXJjZXMgaW4gbmFub3NlY29uZHMuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjbG9ja19wZXJpb2RbOF0gPSB7CisJMCwJCQkvKiBkZWRpY2F0ZWQgY2xvY2sgaW5wdXQvb3V0cHV0IHBpbiAqLworCTEwMCwJCQkvKiAxMCBNSHogKi8KKwkxMDAwLAkJCS8qIDEgTUh6ICovCisJMTAwMDAsCQkJLyogMTAwIGtIeiAqLworCTEwMDAwMCwJCQkvKiAxMCBrSHogKi8KKwkxMDAwMDAwLAkJLyogMSBrSHogKi8KKwkwLAkJCS8qIE9VVCBOLTEgKi8KKwkwCQkJLyogZ3JvdXAgY2xvY2sgaW5wdXQgcGluICovCit9OworCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zLgorICovCisKK2VudW0gZGlvMjAwX2J1c3R5cGUgeyBpc2FfYnVzdHlwZSwgcGNpX2J1c3R5cGUgfTsKKworZW51bSBkaW8yMDBfbW9kZWwgeworCXBjMjEyZV9tb2RlbCwKKwlwYzIxNGVfbW9kZWwsCisJcGMyMTVlX21vZGVsLCBwY2kyMTVfbW9kZWwsCisJcGMyMThlX21vZGVsLAorCXBjMjcyZV9tb2RlbCwgcGNpMjcyX21vZGVsLAorCWFueXBjaV9tb2RlbAorfTsKKworZW51bSBkaW8yMDBfbGF5b3V0IHsKKwlwYzIxMl9sYXlvdXQsCisJcGMyMTRfbGF5b3V0LAorCXBjMjE1X2xheW91dCwKKwlwYzIxOF9sYXlvdXQsCisJcGMyNzJfbGF5b3V0Cit9OworCitzdHJ1Y3QgZGlvMjAwX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIHNob3J0IGRldmlkOworCWVudW0gZGlvMjAwX2J1c3R5cGUgYnVzdHlwZTsKKwllbnVtIGRpbzIwMF9tb2RlbCBtb2RlbDsKKwllbnVtIGRpbzIwMF9sYXlvdXQgbGF5b3V0OworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkaW8yMDBfYm9hcmQgZGlvMjAwX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGMyMTJlIiwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGMyMTJlX21vZGVsLAorCSAgICAgIGxheW91dDoJcGMyMTJfbGF5b3V0LAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGMyMTRlIiwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGMyMTRlX21vZGVsLAorCSAgICAgIGxheW91dDoJcGMyMTRfbGF5b3V0LAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGMyMTVlIiwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGMyMTVlX21vZGVsLAorCSAgICAgIGxheW91dDoJcGMyMTVfbGF5b3V0LAorCQl9LAorI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJeworCSAgICAgIG5hbWU6CSJwY2kyMTUiLAorCSAgICAgIGRldmlkOglQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTIxNSwKKwkgICAgICBidXN0eXBlOglwY2lfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGNpMjE1X21vZGVsLAorCSAgICAgIGxheW91dDoJcGMyMTVfbGF5b3V0LAorCQl9LAorI2VuZGlmCisJeworCSAgICAgIG5hbWU6CSJwYzIxOGUiLAorCSAgICAgIGJ1c3R5cGU6CWlzYV9idXN0eXBlLAorCSAgICAgIG1vZGVsOglwYzIxOGVfbW9kZWwsCisJICAgICAgbGF5b3V0OglwYzIxOF9sYXlvdXQsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwYzI3MmUiLAorCSAgICAgIGJ1c3R5cGU6CWlzYV9idXN0eXBlLAorCSAgICAgIG1vZGVsOglwYzI3MmVfbW9kZWwsCisJICAgICAgbGF5b3V0OglwYzI3Ml9sYXlvdXQsCisJCX0sCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwl7CisJICAgICAgbmFtZToJInBjaTI3MiIsCisJICAgICAgZGV2aWQ6CVBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjcyLAorCSAgICAgIGJ1c3R5cGU6CXBjaV9idXN0eXBlLAorCSAgICAgIG1vZGVsOglwY2kyNzJfbW9kZWwsCisJICAgICAgbGF5b3V0OglwYzI3Ml9sYXlvdXQsCisJCX0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCXsKKwkgICAgICBuYW1lOglESU8yMDBfRFJJVkVSX05BTUUsCisJICAgICAgZGV2aWQ6CVBDSV9ERVZJQ0VfSURfSU5WQUxJRCwKKwkgICAgICBidXN0eXBlOglwY2lfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJYW55cGNpX21vZGVsLAkvKiB3aWxkY2FyZCAqLworCQl9LAorI2VuZGlmCit9OworCisvKgorICogTGF5b3V0IGRlc2NyaXB0aW9ucyAtIHNvbWUgSVNBIGFuZCBQQ0kgYm9hcmQgZGVzY3JpcHRpb25zIHNoYXJlIHRoZSBzYW1lCisgKiBsYXlvdXQuCisgKi8KKworZW51bSBkaW8yMDBfc2R0eXBlIHsgc2Rfbm9uZSwgc2RfaW50ciwgc2RfODI1NSwgc2RfODI1NCB9OworCisjZGVmaW5lIERJTzIwMF9NQVhfU1VCREVWUwk3CisjZGVmaW5lIERJTzIwMF9NQVhfSVNOUwkJNgorCitzdHJ1Y3QgZGlvMjAwX2xheW91dF9zdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IG5fc3ViZGV2czsJLyogbnVtYmVyIG9mIHN1YmRldmljZXMgKi8KKwl1bnNpZ25lZCBjaGFyIHNkdHlwZVtESU8yMDBfTUFYX1NVQkRFVlNdOwkvKiBlbnVtIGRpbzIwMF9zZHR5cGUgKi8KKwl1bnNpZ25lZCBjaGFyIHNkaW5mb1tESU8yMDBfTUFYX1NVQkRFVlNdOwkvKiBkZXBlbmRzIG9uIHNkdHlwZSAqLworCWNoYXIgaGFzX2ludF9zY2U7CS8qIGhhcyBpbnRlcnJ1cHQgZW5hYmxlL3N0YXR1cyByZWdpc3RlciAqLworCWNoYXIgaGFzX2Nsa19nYXRfc2NlOwkvKiBoYXMgY2xvY2svZ2F0ZSBzZWxlY3Rpb24gcmVnaXN0ZXJzICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRpbzIwMF9sYXlvdXRfc3RydWN0IGRpbzIwMF9sYXlvdXRzW10gPSB7CisJW3BjMjEyX2xheW91dF0gPSB7CisJICAgICAgbl9zdWJkZXZzOjYsCisJICAgICAgc2R0eXBlOgl7c2RfODI1NSwgc2RfODI1NCwgc2RfODI1NCwgc2RfODI1NCwKKwkJCQkJc2RfODI1NCwKKwkJCQlzZF9pbnRyfSwKKwkgICAgICBzZGluZm86CXsweDAwLCAweDA4LCAweDBDLCAweDEwLCAweDE0LAorCQkJCTB4M0Z9LAorCSAgICAgIGhhc19pbnRfc2NlOjEsCisJICAgICAgaGFzX2Nsa19nYXRfc2NlOjEsCisJCX0sCisJW3BjMjE0X2xheW91dF0gPSB7CisJICAgICAgbl9zdWJkZXZzOjQsCisJICAgICAgc2R0eXBlOgl7c2RfODI1NSwgc2RfODI1NSwgc2RfODI1NCwKKwkJCQlzZF9pbnRyfSwKKwkgICAgICBzZGluZm86CXsweDAwLCAweDA4LCAweDEwLCAweDAxfSwKKwkgICAgICBoYXNfaW50X3NjZTowLAorCSAgICAgIGhhc19jbGtfZ2F0X3NjZTowLAorCQl9LAorCVtwYzIxNV9sYXlvdXRdID0geworCSAgICAgIG5fc3ViZGV2czo1LAorCSAgICAgIHNkdHlwZToJe3NkXzgyNTUsIHNkXzgyNTUsIHNkXzgyNTQsCisJCQkJCXNkXzgyNTQsCisJCQkJc2RfaW50cn0sCisJICAgICAgc2RpbmZvOgl7MHgwMCwgMHgwOCwgMHgxMCwgMHgxNCwgMHgzRn0sCisJICAgICAgaGFzX2ludF9zY2U6MSwKKwkgICAgICBoYXNfY2xrX2dhdF9zY2U6MSwKKwkJfSwKKwlbcGMyMThfbGF5b3V0XSA9IHsKKwkgICAgICBuX3N1YmRldnM6NywKKwkgICAgICBzZHR5cGU6CXtzZF84MjU0LCBzZF84MjU0LCBzZF84MjU1LCBzZF84MjU0LAorCQkJCQlzZF84MjU0LAorCQkJCXNkX2ludHJ9LAorCSAgICAgIHNkaW5mbzoJezB4MDAsIDB4MDQsIDB4MDgsIDB4MEMsIDB4MTAsCisJCQkJCTB4MTQsCisJCQkJMHgzRn0sCisJICAgICAgaGFzX2ludF9zY2U6MSwKKwkgICAgICBoYXNfY2xrX2dhdF9zY2U6MSwKKwkJfSwKKwlbcGMyNzJfbGF5b3V0XSA9IHsKKwkgICAgICBuX3N1YmRldnM6NCwKKwkgICAgICBzZHR5cGU6CXtzZF84MjU1LCBzZF84MjU1LCBzZF84MjU1LAorCQkJCXNkX2ludHJ9LAorCSAgICAgIHNkaW5mbzoJezB4MDAsIDB4MDgsIDB4MTAsIDB4M0Z9LAorCSAgICAgIGhhc19pbnRfc2NlOjEsCisJICAgICAgaGFzX2Nsa19nYXRfc2NlOjAsCisJCX0sCit9OworCisvKgorICogUENJIGRyaXZlciB0YWJsZS4KKyAqLworCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShkaW8yMDBfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMTUsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FNUExJQ09OLCBQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTI3MiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGlvMjAwX3BjaV90YWJsZSk7CisjZW5kaWYgLyogQ09ORklHX0NPTUVESV9QQ0kgKi8KKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGlvMjAwX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisjZGVmaW5lIHRoaXNsYXlvdXQgKCZkaW8yMDBfbGF5b3V0c1soKHN0cnVjdCBkaW8yMDBfYm9hcmQgKilkZXYtPmJvYXJkX3B0ciktPmxheW91dF0pCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBkaW8yMDBfcHJpdmF0ZSB7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsJLyogUENJIGRldmljZSAqLworI2VuZGlmCisJaW50IGludHJfc2Q7Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgZGlvMjAwX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0cnVjdCBkaW8yMDBfc3ViZGV2XzgyNTQgeworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOwkvKiBDb3VudGVyIGJhc2UgYWRkcmVzcyAqLworCXVuc2lnbmVkIGxvbmcgY2xrX3NjZV9pb2Jhc2U7CS8qIENMS19TQ0UgYmFzZSBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBnYXRfc2NlX2lvYmFzZTsJLyogR0FUX1NDRSBiYXNlIGFkZHJlc3MgKi8KKwlpbnQgd2hpY2g7CQkvKiBCaXQgNSBvZiBDTEtfU0NFIG9yIEdBVF9TQ0UgKi8KKwlpbnQgaGFzX2Nsa19nYXRfc2NlOworCXVuc2lnbmVkIGNsb2NrX3NyY1szXTsJLyogQ3VycmVudCBjbG9jayBzb3VyY2VzICovCisJdW5zaWduZWQgZ2F0ZV9zcmNbM107CS8qIEN1cnJlbnQgZ2F0ZSBzb3VyY2VzICovCit9OworCitzdHJ1Y3QgZGlvMjAwX3N1YmRldl9pbnRyIHsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlzcGlubG9ja190IHNwaW5sb2NrOworCWludCBhY3RpdmU7CisJaW50IGhhc19pbnRfc2NlOworCXVuc2lnbmVkIGludCB2YWxpZF9pc25zOworCXVuc2lnbmVkIGludCBlbmFibGVkX2lzbnM7CisJdW5zaWduZWQgaW50IHN0b3Bjb3VudDsKKwlpbnQgY29udGludW91czsKK307CisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IGRpbzIwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkaW8yMDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYW1wbGNfZGlvMjAwID0geworICAgICAgZHJpdmVyX25hbWU6RElPMjAwX0RSSVZFUl9OQU1FLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRpbzIwMF9hdHRhY2gsCisgICAgICBkZXRhY2g6ZGlvMjAwX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmRpbzIwMF9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IGRpbzIwMF9ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGRpbzIwMF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBkaW8yMDBfYm9hcmQpLAorfTsKKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19kaW8yMDAsIGRpbzIwMF9wY2lfdGFibGUpOworI2Vsc2UKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfZGlvMjAwKTsKKyNlbmRpZgorCisvKgorICogVGhpcyBmdW5jdGlvbiBsb29rcyBmb3IgYSBQQ0kgZGV2aWNlIG1hdGNoaW5nIHRoZSByZXF1ZXN0ZWQgYm9hcmQgbmFtZSwKKyAqIGJ1cyBhbmQgc2xvdC4KKyAqLworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgaW50CitkaW8yMDBfZmluZF9wY2koc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90LAorCXN0cnVjdCBwY2lfZGV2ICoqcGNpX2Rldl9wKQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKKworCSpwY2lfZGV2X3AgPSBOVUxMOworCisJLyogTG9vayBmb3IgbWF0Y2hpbmcgUENJIGRldmljZS4gKi8KKwlmb3IgKHBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNUExJQ09OLCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpX2RldiAhPSBOVUxMOworCQlwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwKKwkJCVBDSV9BTllfSUQsIHBjaV9kZXYpKSB7CisJCS8qIElmIGJ1cy9zbG90IHNwZWNpZmllZCwgY2hlY2sgdGhlbS4gKi8KKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IHBjaV9kZXYtPmJ1cy0+bnVtYmVyCisJCQkJfHwgc2xvdCAhPSBQQ0lfU0xPVChwY2lfZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKHRoaXNib2FyZC0+bW9kZWwgPT0gYW55cGNpX21vZGVsKSB7CisJCQkvKiBNYXRjaCBhbnkgc3VwcG9ydGVkIG1vZGVsLiAqLworCQkJaW50IGk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpbzIwMF9ib2FyZHMpOyBpKyspIHsKKwkJCQlpZiAoZGlvMjAwX2JvYXJkc1tpXS5idXN0eXBlICE9IHBjaV9idXN0eXBlKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAocGNpX2Rldi0+ZGV2aWNlID09IGRpbzIwMF9ib2FyZHNbaV0uZGV2aWQpIHsKKwkJCQkJLyogQ2hhbmdlIGJvYXJkX3B0ciB0byBtYXRjaGVkIGJvYXJkLiAqLworCQkJCQlkZXYtPmJvYXJkX3B0ciA9ICZkaW8yMDBfYm9hcmRzW2ldOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKGRpbzIwMF9ib2FyZHMpKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJLyogTWF0Y2ggc3BlY2lmaWMgbW9kZWwgbmFtZS4gKi8KKwkJCWlmIChwY2lfZGV2LT5kZXZpY2UgIT0gdGhpc2JvYXJkLT5kZXZpZCkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEZvdW5kIGEgbWF0Y2guICovCisJCSpwY2lfZGV2X3AgPSBwY2lfZGV2OworCQlyZXR1cm4gMDsKKwl9CisJLyogTm8gbWF0Y2ggZm91bmQuICovCisJaWYgKGJ1cyB8fCBzbG90KSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImNvbWVkaSVkOiBlcnJvciEgbm8gJXMgZm91bmQgYXQgcGNpICUwMng6JTAyeCFcbiIsCisJCQlkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUsIGJ1cywgc2xvdCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG5vICVzIGZvdW5kIVxuIiwKKwkJCWRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSk7CisJfQorCXJldHVybiAtRUlPOworfQorI2VuZGlmCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBhbmQgcmVxdWVzdHMgYW4gSS9PIHJlZ2lvbiwgcmVwb3J0aW5nIGFuIGVycm9yCisgKiBpZiB0aGVyZSBpcyBhIGNvbmZsaWN0LgorICovCitzdGF0aWMgaW50CitkaW8yMDBfcmVxdWVzdF9yZWdpb24odW5zaWduZWQgbWlub3IsIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyBleHRlbnQpCit7CisJaWYgKCFmcm9tIHx8ICFyZXF1ZXN0X3JlZ2lvbihmcm9tLCBleHRlbnQsIERJTzIwMF9EUklWRVJfTkFNRSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogSS9PIHBvcnQgY29uZmxpY3QgKCUjbHgsJWx1KSFcbiIsCisJCQltaW5vciwgZnJvbSwgZXh0ZW50KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCisvKgorICogJ2luc25fYml0cycgZnVuY3Rpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorZGlvMjAwX3N1YmRldl9pbnRyX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdiA9IHMtPnByaXZhdGU7CisKKwlpZiAoc3VicHJpdi0+aGFzX2ludF9zY2UpIHsKKwkJLyogSnVzdCByZWFkIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLiAgKi8KKwkJZGF0YVsxXSA9IGluYihzdWJwcml2LT5pb2Jhc2UpICYgc3VicHJpdi0+dmFsaWRfaXNuczsKKwl9IGVsc2UgeworCQkvKiBObyBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLiAqLworCQlkYXRhWzBdID0gMDsKKwl9CisKKwlyZXR1cm4gMjsKK30KKworLyoKKyAqIENhbGxlZCB0byBzdG9wIGFjcXVpc2l0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIGRpbzIwMF9zdG9wX2ludHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl9pbnRyICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKworCXN1YnByaXYtPmFjdGl2ZSA9IDA7CisJc3VicHJpdi0+ZW5hYmxlZF9pc25zID0gMDsKKwlpZiAoc3VicHJpdi0+aGFzX2ludF9zY2UpIHsKKwkJb3V0YigwLCBzdWJwcml2LT5pb2Jhc2UpOworCX0KK30KKworLyoKKyAqIENhbGxlZCB0byBzdGFydCBhY3F1aXNpdGlvbiBmb3IgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50IGRpbzIwMF9zdGFydF9pbnRyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgaW50IG47CisJdW5zaWduZWQgaXNuX2JpdHM7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdiA9IHMtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCByZXR2YWwgPSAwOworCisJaWYgKCFzdWJwcml2LT5jb250aW51b3VzICYmIHN1YnByaXYtPnN0b3Bjb3VudCA9PSAwKSB7CisJCS8qIEFuIGVtcHR5IGFjcXVpc2l0aW9uISAqLworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCXN1YnByaXYtPmFjdGl2ZSA9IDA7CisJCXJldHZhbCA9IDE7CisJfSBlbHNlIHsKKwkJLyogRGV0ZXJtaW5lIGludGVycnVwdCBzb3VyY2VzIHRvIGVuYWJsZS4gKi8KKwkJaXNuX2JpdHMgPSAwOworCQlpZiAoY21kLT5jaGFubGlzdCkgeworCQkJZm9yIChuID0gMDsgbiA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBuKyspIHsKKwkJCQlpc25fYml0cyB8PSAoMVUgPDwgQ1JfQ0hBTihjbWQtPmNoYW5saXN0W25dKSk7CisJCQl9CisJCX0KKwkJaXNuX2JpdHMgJj0gc3VicHJpdi0+dmFsaWRfaXNuczsKKwkJLyogRW5hYmxlIGludGVycnVwdCBzb3VyY2VzLiAqLworCQlzdWJwcml2LT5lbmFibGVkX2lzbnMgPSBpc25fYml0czsKKwkJaWYgKHN1YnByaXYtPmhhc19pbnRfc2NlKSB7CisJCQlvdXRiKGlzbl9iaXRzLCBzdWJwcml2LT5pb2Jhc2UpOworCQl9CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIEludGVybmFsIHRyaWdnZXIgZnVuY3Rpb24gdG8gc3RhcnQgYWNxdWlzaXRpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorZGlvMjAwX2ludHRyaWdfc3RhcnRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKQoreworCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXZlbnQgPSAwOworCisJaWYgKHRyaWdudW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlzLT5hc3luYy0+aW50dHJpZyA9IDA7CisJaWYgKHN1YnByaXYtPmFjdGl2ZSkgeworCQlldmVudCA9IGRpbzIwMF9zdGFydF9pbnRyKGRldiwgcyk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJwcml2LT5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKGV2ZW50KSB7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCXJldHVybiAxOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0byBoYW5kbGUgYSByZWFkCisgKiBzY2FuIG9uIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludCBkaW8yMDBfaGFuZGxlX3JlYWRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXYgPSBzLT5wcml2YXRlOworCXVuc2lnbmVkIHRyaWdnZXJlZDsKKwl1bnNpZ25lZCBpbnRzdGF0OworCXVuc2lnbmVkIGN1cl9lbmFibGVkOworCXVuc2lnbmVkIGludCBvbGRldmVudHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXRyaWdnZXJlZCA9IDA7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CisJb2xkZXZlbnRzID0gcy0+YXN5bmMtPmV2ZW50czsKKwlpZiAoc3VicHJpdi0+aGFzX2ludF9zY2UpIHsKKwkJLyoKKwkJICogQ29sbGVjdCBpbnRlcnJ1cHQgc291cmNlcyB0aGF0IGhhdmUgdHJpZ2dlcmVkIGFuZCBkaXNhYmxlCisJCSAqIHRoZW0gdGVtcG9yYXJpbHkuICBMb29wIGFyb3VuZCB1bnRpbCBubyBleHRyYSBpbnRlcnJ1cHQKKwkJICogc291cmNlcyBoYXZlIHRyaWdnZXJlZCwgYXQgd2hpY2ggcG9pbnQsIHRoZSB2YWxpZCBwYXJ0IG9mCisJCSAqIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIHdpbGwgcmVhZCB6ZXJvLCBjbGVhcmluZyB0aGUKKwkJICogY2F1c2Ugb2YgdGhlIGludGVycnVwdC4KKwkJICoKKwkJICogTWFzayBvZmYgaW50ZXJydXB0IHNvdXJjZXMgYWxyZWFkeSBzZWVuIHRvIGF2b2lkIGluZmluaXRlCisJCSAqIGxvb3AgaW4gY2FzZSBvZiBtaXNjb25maWd1cmF0aW9uLgorCQkgKi8KKwkJY3VyX2VuYWJsZWQgPSBzdWJwcml2LT5lbmFibGVkX2lzbnM7CisJCXdoaWxlICgoaW50c3RhdCA9IChpbmIoc3VicHJpdi0+aW9iYXNlKSAmIHN1YnByaXYtPnZhbGlkX2lzbnMKKwkJCQkJJiB+dHJpZ2dlcmVkKSkgIT0gMCkgeworCQkJdHJpZ2dlcmVkIHw9IGludHN0YXQ7CisJCQljdXJfZW5hYmxlZCAmPSB+dHJpZ2dlcmVkOworCQkJb3V0YihjdXJfZW5hYmxlZCwgc3VicHJpdi0+aW9iYXNlKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIE5vIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIuICBBc3N1bWUgdGhlIHNpbmdsZSBpbnRlcnJ1cHQKKwkJICogc291cmNlIGhhcyB0cmlnZ2VyZWQuCisJCSAqLworCQl0cmlnZ2VyZWQgPSBzdWJwcml2LT5lbmFibGVkX2lzbnM7CisJfQorCisJaWYgKHRyaWdnZXJlZCkgeworCQkvKgorCQkgKiBTb21lIGludGVycnVwdCBzb3VyY2VzIGhhdmUgdHJpZ2dlcmVkIGFuZCBoYXZlIGJlZW4KKwkJICogdGVtcG9yYXJpbHkgZGlzYWJsZWQgdG8gY2xlYXIgdGhlIGNhdXNlIG9mIHRoZSBpbnRlcnJ1cHQuCisJCSAqCisJCSAqIFJlZW5hYmxlIHRoZW0gTk9XIHRvIG1pbmltaXplIHRoZSB0aW1lIHRoZXkgYXJlIGRpc2FibGVkLgorCQkgKi8KKwkJY3VyX2VuYWJsZWQgPSBzdWJwcml2LT5lbmFibGVkX2lzbnM7CisJCWlmIChzdWJwcml2LT5oYXNfaW50X3NjZSkgeworCQkJb3V0YihjdXJfZW5hYmxlZCwgc3VicHJpdi0+aW9iYXNlKTsKKwkJfQorCisJCWlmIChzdWJwcml2LT5hY3RpdmUpIHsKKwkJCS8qCisJCQkgKiBUaGUgY29tbWFuZCBpcyBzdGlsbCBhY3RpdmUuCisJCQkgKgorCQkJICogSWdub3JlIGludGVycnVwdCBzb3VyY2VzIHRoYXQgdGhlIGNvbW1hbmQgaXNuJ3QKKwkJCSAqIGludGVyZXN0ZWQgaW4gKGp1c3QgaW4gY2FzZSB0aGVyZSdzIGEgcmFjZQorCQkJICogY29uZGl0aW9uKS4KKwkJCSAqLworCQkJaWYgKHRyaWdnZXJlZCAmIHN1YnByaXYtPmVuYWJsZWRfaXNucykgeworCQkJCS8qIENvbGxlY3Qgc2NhbiBkYXRhLiAqLworCQkJCXNob3J0IHZhbDsKKwkJCQl1bnNpZ25lZCBpbnQgbiwgY2gsIGxlbjsKKworCQkJCXZhbCA9IDA7CisJCQkJbGVuID0gcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW47CisJCQkJZm9yIChuID0gMDsgbiA8IGxlbjsgbisrKSB7CisJCQkJCWNoID0gQ1JfQ0hBTihzLT5hc3luYy0+Y21kLmNoYW5saXN0W25dKTsKKwkJCQkJaWYgKHRyaWdnZXJlZCAmICgxVSA8PCBjaCkpIHsKKwkJCQkJCXZhbCB8PSAoMVUgPDwgbik7CisJCQkJCX0KKwkJCQl9CisJCQkJLyogV3JpdGUgdGhlIHNjYW4gdG8gdGhlIGJ1ZmZlci4gKi8KKwkJCQlpZiAoY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIHZhbCkpIHsKKwkJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSAoQ09NRURJX0NCX0JMT0NLIHwKKwkJCQkJCUNPTUVESV9DQl9FT1MpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIEVycm9yISAgU3RvcCBhY3F1aXNpdGlvbi4gICovCisJCQkJCWRpbzIwMF9zdG9wX2ludHIoZGV2LCBzKTsKKwkJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IKKwkJCQkJCXwgQ09NRURJX0NCX09WRVJGTE9XOworCQkJCQljb21lZGlfZXJyb3IoZGV2LCAiYnVmZmVyIG92ZXJmbG93Iik7CisJCQkJfQorCisJCQkJLyogQ2hlY2sgZm9yIGVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KKwkJCQlpZiAoIXN1YnByaXYtPmNvbnRpbnVvdXMpIHsKKwkJCQkJLyogc3RvcF9zcmMgPT0gVFJJR19DT1VOVCAqLworCQkJCQlpZiAoc3VicHJpdi0+c3RvcGNvdW50ID4gMCkgeworCQkJCQkJc3VicHJpdi0+c3RvcGNvdW50LS07CisJCQkJCQlpZiAoc3VicHJpdi0+c3RvcGNvdW50ID09IDApIHsKKwkJCQkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9CisJCQkJCQkJCUNPTUVESV9DQl9FT0E7CisJCQkJCQkJZGlvMjAwX3N0b3BfaW50cihkZXYsCisJCQkJCQkJCXMpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJwcml2LT5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKG9sZGV2ZW50cyAhPSBzLT5hc3luYy0+ZXZlbnRzKSB7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCXJldHVybiAodHJpZ2dlcmVkICE9IDApOworfQorCisvKgorICogJ2NhbmNlbCcgZnVuY3Rpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludCBkaW8yMDBfc3ViZGV2X2ludHJfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdiA9IHMtPnByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlpZiAoc3VicHJpdi0+YWN0aXZlKSB7CisJCWRpbzIwMF9zdG9wX2ludHIoZGV2LCBzKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICdkb19jbWR0ZXN0JyBmdW5jdGlvbiBmb3IgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc3ViZGV2X2ludHJfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gKFRSSUdfTk9XIHwgVFJJR19JTlQpOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSAoVFJJR19DT1VOVCB8IFRSSUdfTk9ORSk7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIHRoZXNlIHRlc3RzIGFyZSB0cnVlIGlmIG1vcmUgdGhhbiBvbmUgX3NyYyBiaXQgaXMgc2V0ICovCisJaWYgKChjbWQtPnN0YXJ0X3NyYyAmIChjbWQtPnN0YXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgJiAoY21kLT5zY2FuX2JlZ2luX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+Y29udmVydF9zcmMgJiAoY21kLT5jb252ZXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9lbmRfc3JjICYgKGNtZC0+c2Nhbl9lbmRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zdG9wX3NyYyAmIChjbWQtPnN0b3Bfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwkvKiBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVyB8fCBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCAqLworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJLyogY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCS8qIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cgKi8KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwkvKiBjbWQtPnNjYW5fZW5kX3NyYyA9PSBUUklHX0NPVU5UICovCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJLyogYW55IGNvdW50IGFsbG93ZWQgKi8KKwkJYnJlYWs7CisJY2FzZSBUUklHX05PTkU6CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwkvKiBpZiAoZXJyKSByZXR1cm4gNDsgKi8KKworCXJldHVybiAwOworfQorCisvKgorICogJ2RvX2NtZCcgZnVuY3Rpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludCBkaW8yMDBfc3ViZGV2X2ludHJfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXYgPSBzLT5wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGV2ZW50ID0gMDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlzdWJwcml2LT5hY3RpdmUgPSAxOworCisJLyogU2V0IHVwIGVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCXN1YnByaXYtPmNvbnRpbnVvdXMgPSAwOworCQlzdWJwcml2LT5zdG9wY291bnQgPSBjbWQtPnN0b3BfYXJnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUUklHX05PTkUgKi8KKwkJc3VicHJpdi0+Y29udGludW91cyA9IDE7CisJCXN1YnByaXYtPnN0b3Bjb3VudCA9IDA7CisJCWJyZWFrOworCX0KKworCS8qIFNldCB1cCBzdGFydCBvZiBhY3F1aXNpdGlvbi4gKi8KKwlzd2l0Y2ggKGNtZC0+c3RhcnRfc3JjKSB7CisJY2FzZSBUUklHX0lOVDoKKwkJcy0+YXN5bmMtPmludHRyaWcgPSBkaW8yMDBfaW50dHJpZ19zdGFydF9pbnRyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUUklHX05PVyAqLworCQlldmVudCA9IGRpbzIwMF9zdGFydF9pbnRyKGRldiwgcyk7CisJCWJyZWFrOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWlmIChldmVudCkgeworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc3ViZGV2X2ludHJfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgaW9iYXNlLCB1bnNpZ25lZCB2YWxpZF9pc25zLCBpbnQgaGFzX2ludF9zY2UpCit7CisJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdjsKKworCXN1YnByaXYgPSBremFsbG9jKHNpemVvZigqc3VicHJpdiksIEdGUF9LRVJORUwpOworCWlmICghc3VicHJpdikgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXN1YnByaXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlzdWJwcml2LT5oYXNfaW50X3NjZSA9IGhhc19pbnRfc2NlOworCXN1YnByaXYtPnZhbGlkX2lzbnMgPSB2YWxpZF9pc25zOworCXNwaW5fbG9ja19pbml0KCZzdWJwcml2LT5zcGlubG9jayk7CisKKwlpZiAoaGFzX2ludF9zY2UpIHsKKwkJb3V0YigwLCBzdWJwcml2LT5pb2Jhc2UpOwkvKiBEaXNhYmxlIGludGVycnVwdCBzb3VyY2VzLiAqLworCX0KKworCXMtPnByaXZhdGUgPSBzdWJwcml2OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ01EX1JFQUQ7CisJaWYgKGhhc19pbnRfc2NlKSB7CisJCXMtPm5fY2hhbiA9IERJTzIwMF9NQVhfSVNOUzsKKwkJcy0+bGVuX2NoYW5saXN0ID0gRElPMjAwX01BWF9JU05TOworCX0gZWxzZSB7CisJCS8qIE5vIGludGVycnVwdCBzb3VyY2UgcmVnaXN0ZXIuICBTdXBwb3J0IHNpbmdsZSBjaGFubmVsLiAqLworCQlzLT5uX2NoYW4gPSAxOworCQlzLT5sZW5fY2hhbmxpc3QgPSAxOworCX0KKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPm1heGRhdGEgPSAxOworCXMtPmluc25fYml0cyA9IGRpbzIwMF9zdWJkZXZfaW50cl9pbnNuX2JpdHM7CisJcy0+ZG9fY21kdGVzdCA9IGRpbzIwMF9zdWJkZXZfaW50cl9jbWR0ZXN0OworCXMtPmRvX2NtZCA9IGRpbzIwMF9zdWJkZXZfaW50cl9jbWQ7CisJcy0+Y2FuY2VsID0gZGlvMjAwX3N1YmRldl9pbnRyX2NhbmNlbDsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgdm9pZAorZGlvMjAwX3N1YmRldl9pbnRyX2NsZWFudXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl9pbnRyICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKworCWlmIChzdWJwcml2KSB7CisJCWtmcmVlKHN1YnByaXYpOworCX0KK30KKworLyoKKyAqIEludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBkaW8yMDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJaW50IGhhbmRsZWQ7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChkZXZwcml2LT5pbnRyX3NkID49IDApIHsKKwkJaGFuZGxlZCA9IGRpbzIwMF9oYW5kbGVfcmVhZF9pbnRyKGRldiwKKwkJCWRldi0+c3ViZGV2aWNlcyArIGRldnByaXYtPmludHJfc2QpOworCX0gZWxzZSB7CisJCWhhbmRsZWQgPSAwOworCX0KKworCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCisvKgorICogSGFuZGxlICdpbnNuX3JlYWQnIGZvciBhbiAnODI1NCcgY291bnRlciBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK2RpbzIwMF9zdWJkZXZfODI1NF9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0ICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZGF0YVswXSA9IGk4MjU0X3JlYWQoc3VicHJpdi0+aW9iYXNlLCAwLCBjaGFuKTsKKworCXJldHVybiAxOworfQorCisvKgorICogSGFuZGxlICdpbnNuX3dyaXRlJyBmb3IgYW4gJzgyNTQnIGNvdW50ZXIgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc3ViZGV2XzgyNTRfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBkaW8yMDBfc3ViZGV2XzgyNTQgKnN1YnByaXYgPSBzLT5wcml2YXRlOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlpODI1NF93cml0ZShzdWJwcml2LT5pb2Jhc2UsIDAsIGNoYW4sIGRhdGFbMF0pOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBTZXQgZ2F0ZSBzb3VyY2UgZm9yIGFuICc4MjU0JyBjb3VudGVyIHN1YmRldmljZSBjaGFubmVsLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc2V0X2dhdGVfc3JjKHN0cnVjdCBkaW8yMDBfc3ViZGV2XzgyNTQgKiBzdWJwcml2LCB1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIsCisJdW5zaWduZWQgaW50IGdhdGVfc3JjKQoreworCXVuc2lnbmVkIGNoYXIgYnl0ZTsKKworCWlmICghc3VicHJpdi0+aGFzX2Nsa19nYXRfc2NlKQorCQlyZXR1cm4gLTE7CisJaWYgKGNvdW50ZXJfbnVtYmVyID4gMikKKwkJcmV0dXJuIC0xOworCWlmIChnYXRlX3NyYyA+IDcpCisJCXJldHVybiAtMTsKKworCXN1YnByaXYtPmdhdGVfc3JjW2NvdW50ZXJfbnVtYmVyXSA9IGdhdGVfc3JjOworCWJ5dGUgPSBHQVRfU0NFKHN1YnByaXYtPndoaWNoLCBjb3VudGVyX251bWJlciwgZ2F0ZV9zcmMpOworCW91dGIoYnl0ZSwgc3VicHJpdi0+Z2F0X3NjZV9pb2Jhc2UpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHZXQgZ2F0ZSBzb3VyY2UgZm9yIGFuICc4MjU0JyBjb3VudGVyIHN1YmRldmljZSBjaGFubmVsLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfZ2V0X2dhdGVfc3JjKHN0cnVjdCBkaW8yMDBfc3ViZGV2XzgyNTQgKiBzdWJwcml2LCB1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIpCit7CisJaWYgKCFzdWJwcml2LT5oYXNfY2xrX2dhdF9zY2UpCisJCXJldHVybiAtMTsKKwlpZiAoY291bnRlcl9udW1iZXIgPiAyKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gc3VicHJpdi0+Z2F0ZV9zcmNbY291bnRlcl9udW1iZXJdOworfQorCisvKgorICogU2V0IGNsb2NrIHNvdXJjZSBmb3IgYW4gJzgyNTQnIGNvdW50ZXIgc3ViZGV2aWNlIGNoYW5uZWwuCisgKi8KK3N0YXRpYyBpbnQKK2RpbzIwMF9zZXRfY2xvY2tfc3JjKHN0cnVjdCBkaW8yMDBfc3ViZGV2XzgyNTQgKiBzdWJwcml2LCB1bnNpZ25lZCBpbnQgY291bnRlcl9udW1iZXIsCisJdW5zaWduZWQgaW50IGNsb2NrX3NyYykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ5dGU7CisKKwlpZiAoIXN1YnByaXYtPmhhc19jbGtfZ2F0X3NjZSkKKwkJcmV0dXJuIC0xOworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybiAtMTsKKwlpZiAoY2xvY2tfc3JjID4gNykKKwkJcmV0dXJuIC0xOworCisJc3VicHJpdi0+Y2xvY2tfc3JjW2NvdW50ZXJfbnVtYmVyXSA9IGNsb2NrX3NyYzsKKwlieXRlID0gQ0xLX1NDRShzdWJwcml2LT53aGljaCwgY291bnRlcl9udW1iZXIsIGNsb2NrX3NyYyk7CisJb3V0YihieXRlLCBzdWJwcml2LT5jbGtfc2NlX2lvYmFzZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdldCBjbG9jayBzb3VyY2UgZm9yIGFuICc4MjU0JyBjb3VudGVyIHN1YmRldmljZSBjaGFubmVsLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfZ2V0X2Nsb2NrX3NyYyhzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0ICogc3VicHJpdiwgdW5zaWduZWQgaW50IGNvdW50ZXJfbnVtYmVyLAorCXVuc2lnbmVkIGludCAqIHBlcmlvZF9ucykKK3sKKwl1bnNpZ25lZCBjbG9ja19zcmM7CisKKwlpZiAoIXN1YnByaXYtPmhhc19jbGtfZ2F0X3NjZSkKKwkJcmV0dXJuIC0xOworCWlmIChjb3VudGVyX251bWJlciA+IDIpCisJCXJldHVybiAtMTsKKworCWNsb2NrX3NyYyA9IHN1YnByaXYtPmNsb2NrX3NyY1tjb3VudGVyX251bWJlcl07CisJKnBlcmlvZF9ucyA9IGNsb2NrX3BlcmlvZFtjbG9ja19zcmNdOworCXJldHVybiBjbG9ja19zcmM7Cit9CisKKy8qCisgKiBIYW5kbGUgJ2luc25fY29uZmlnJyBmb3IgYW4gJzgyNTQnIGNvdW50ZXIgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitkaW8yMDBfc3ViZGV2XzgyNTRfY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0ICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKKwlpbnQgcmV0OworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX1NFVF9DT1VOVEVSX01PREU6CisJCXJldCA9IGk4MjU0X3NldF9tb2RlKHN1YnByaXYtPmlvYmFzZSwgMCwgY2hhbiwgZGF0YVsxXSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfODI1NF9SRUFEX1NUQVRVUzoKKwkJZGF0YVsxXSA9IGk4MjU0X3N0YXR1cyhzdWJwcml2LT5pb2Jhc2UsIDAsIGNoYW4pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX1NFVF9HQVRFX1NSQzoKKwkJcmV0ID0gZGlvMjAwX3NldF9nYXRlX3NyYyhzdWJwcml2LCBjaGFuLCBkYXRhWzJdKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfR0FURV9TUkM6CisJCXJldCA9IGRpbzIwMF9nZXRfZ2F0ZV9zcmMoc3VicHJpdiwgY2hhbik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWRhdGFbMl0gPSByZXQ7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX0NMT0NLX1NSQzoKKwkJcmV0ID0gZGlvMjAwX3NldF9jbG9ja19zcmMoc3VicHJpdiwgY2hhbiwgZGF0YVsxXSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX0NMT0NLX1NSQzoKKwkJcmV0ID0gZGlvMjAwX2dldF9jbG9ja19zcmMoc3VicHJpdiwgY2hhbiwgJmRhdGFbMl0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlkYXRhWzFdID0gcmV0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBpbnNuLT5uOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhbiAnODI1NCcgY291bnRlciBzdWJkZXZpY2UuCisgKgorICogTm90ZTogaW9iYXNlIGlzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGJvYXJkLCBub3QgdGhlIHN1YmRldmljZTsKKyAqIG9mZnNldCBpcyB0aGUgb2Zmc2V0IHRvIHRoZSA4MjU0IGNoaXAuCisgKi8KK3N0YXRpYyBpbnQKK2RpbzIwMF9zdWJkZXZfODI1NF9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBpb2Jhc2UsIHVuc2lnbmVkIG9mZnNldCwgaW50IGhhc19jbGtfZ2F0X3NjZSkKK3sKKwlzdHJ1Y3QgZGlvMjAwX3N1YmRldl84MjU0ICpzdWJwcml2OworCXVuc2lnbmVkIGludCBjaGFuOworCisJc3VicHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpzdWJwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdWJwcml2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISBvdXQgb2YgbWVtb3J5IVxuIiwKKwkJCWRldi0+bWlub3IpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzLT5wcml2YXRlID0gc3VicHJpdjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMzsKKwlzLT5tYXhkYXRhID0gMHhGRkZGOworCXMtPmluc25fcmVhZCA9IGRpbzIwMF9zdWJkZXZfODI1NF9yZWFkOworCXMtPmluc25fd3JpdGUgPSBkaW8yMDBfc3ViZGV2XzgyNTRfd3JpdGU7CisJcy0+aW5zbl9jb25maWcgPSBkaW8yMDBfc3ViZGV2XzgyNTRfY29uZmlnOworCisJc3VicHJpdi0+aW9iYXNlID0gb2Zmc2V0ICsgaW9iYXNlOworCXN1YnByaXYtPmhhc19jbGtfZ2F0X3NjZSA9IGhhc19jbGtfZ2F0X3NjZTsKKwlpZiAoaGFzX2Nsa19nYXRfc2NlKSB7CisJCS8qIERlcml2ZSBDTEtfU0NFIGFuZCBHQVRfU0NFIHJlZ2lzdGVyIG9mZnNldHMgZnJvbQorCQkgKiA4MjU0IG9mZnNldC4gKi8KKwkJc3VicHJpdi0+Y2xrX3NjZV9pb2Jhc2UgPQorCQkJRElPMjAwX1hDTEtfU0NFICsgKG9mZnNldCA+PiAzKSArIGlvYmFzZTsKKwkJc3VicHJpdi0+Z2F0X3NjZV9pb2Jhc2UgPQorCQkJRElPMjAwX1hHQVRfU0NFICsgKG9mZnNldCA+PiAzKSArIGlvYmFzZTsKKwkJc3VicHJpdi0+d2hpY2ggPSAob2Zmc2V0ID4+IDIpICYgMTsKKwl9CisKKwkvKiBJbml0aWFsaXplIGNoYW5uZWxzLiAqLworCWZvciAoY2hhbiA9IDA7IGNoYW4gPCAzOyBjaGFuKyspIHsKKwkJaTgyNTRfc2V0X21vZGUoc3VicHJpdi0+aW9iYXNlLCAwLCBjaGFuLAorCQkJSTgyNTRfTU9ERTAgfCBJODI1NF9CSU5BUlkpOworCQlpZiAoc3VicHJpdi0+aGFzX2Nsa19nYXRfc2NlKSB7CisJCQkvKiBHYXRlIHNvdXJjZSAwIGlzIFZDQyAobG9naWMgMSkuICovCisJCQlkaW8yMDBfc2V0X2dhdGVfc3JjKHN1YnByaXYsIGNoYW4sIDApOworCQkJLyogQ2xvY2sgc291cmNlIDAgaXMgdGhlIGRlZGljYXRlZCBjbG9jayBpbnB1dC4gKi8KKwkJCWRpbzIwMF9zZXRfY2xvY2tfc3JjKHN1YnByaXYsIGNoYW4sIDApOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNsZWFucyB1cCBhbiAnODI1NCcgY291bnRlciBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitkaW8yMDBfc3ViZGV2XzgyNTRfY2xlYW51cChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBkaW8yMDBfc3ViZGV2X2ludHIgKnN1YnByaXYgPSBzLT5wcml2YXRlOworCisJaWYgKHN1YnByaXYpIHsKKwkJa2ZyZWUoc3VicHJpdik7CisJfQorfQorCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgZGlvMjAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IDA7CisJdW5zaWduZWQgaW50IGlycSA9IDA7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisJaW50IGJ1cyA9IDAsIHNsb3QgPSAwOworI2VuZGlmCisJY29uc3Qgc3RydWN0IGRpbzIwMF9sYXlvdXRfc3RydWN0ICpsYXlvdXQ7CisJaW50IHNoYXJlX2lycSA9IDA7CisJaW50IHNkeDsKKwl1bnNpZ25lZCBuOworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6ICVzOiBhdHRhY2hcbiIsIGRldi0+bWlub3IsCisJCURJTzIwMF9EUklWRVJfTkFNRSk7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRpbzIwMF9wcml2YXRlKSkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBQcm9jZXNzIG9wdGlvbnMuICovCisJc3dpdGNoICh0aGlzYm9hcmQtPmJ1c3R5cGUpIHsKKwljYXNlIGlzYV9idXN0eXBlOgorCQlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwkJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJCXNoYXJlX2lycSA9IDA7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJY2FzZSBwY2lfYnVzdHlwZToKKwkJYnVzID0gaXQtPm9wdGlvbnNbMF07CisJCXNsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKwkJc2hhcmVfaXJxID0gMTsKKworCQlpZiAoKHJldCA9IGRpbzIwMF9maW5kX3BjaShkZXYsIGJ1cywgc2xvdCwgJnBjaV9kZXYpKSA8IDApCisJCQlyZXR1cm4gcmV0OworCQlkZXZwcml2LT5wY2lfZGV2ID0gcGNpX2RldjsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIKKwkJCSJjb21lZGklZDogJXM6IEJVRyEgY2Fubm90IGRldGVybWluZSBib2FyZCB0eXBlIVxuIiwKKwkJCWRldi0+bWlub3IsIERJTzIwMF9EUklWRVJfTkFNRSk7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlkZXZwcml2LT5pbnRyX3NkID0gLTE7CisKKwkvKiBFbmFibGUgZGV2aWNlIGFuZCByZXNlcnZlIEkvTyBzcGFjZXMuICovCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlpZiAocGNpX2RldikgeworCQlyZXQgPSBjb21lZGlfcGNpX2VuYWJsZShwY2lfZGV2LCBESU8yMDBfRFJJVkVSX05BTUUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJImNvbWVkaSVkOiBlcnJvciEgY2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMhXG4iLAorCQkJCWRldi0+bWlub3IpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpb2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMik7CisJCWlycSA9IHBjaV9kZXYtPmlycTsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJcmV0ID0gZGlvMjAwX3JlcXVlc3RfcmVnaW9uKGRldi0+bWlub3IsIGlvYmFzZSwgRElPMjAwX0lPX1NJWkUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWxheW91dCA9IHRoaXNsYXlvdXQ7CisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbGF5b3V0LT5uX3N1YmRldnMpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGRldi0+bl9zdWJkZXZpY2VzOyBuKyspIHsKKwkJcyA9ICZkZXYtPnN1YmRldmljZXNbbl07CisJCXN3aXRjaCAobGF5b3V0LT5zZHR5cGVbbl0pIHsKKwkJY2FzZSBzZF84MjU0OgorCQkJLyogY291bnRlciBzdWJkZXZpY2UgKDgyNTQpICovCisJCQlyZXQgPSBkaW8yMDBfc3ViZGV2XzgyNTRfaW5pdChkZXYsIHMsIGlvYmFzZSwKKwkJCQlsYXlvdXQtPnNkaW5mb1tuXSwgbGF5b3V0LT5oYXNfY2xrX2dhdF9zY2UpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ugc2RfODI1NToKKwkJCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAoODI1NSkgKi8KKwkJCXJldCA9IHN1YmRldl84MjU1X2luaXQoZGV2LCBzLCAwLAorCQkJCWlvYmFzZSArIGxheW91dC0+c2RpbmZvW25dKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHNkX2ludHI6CisJCQkvKiAnSU5URVJSVVBUJyBzdWJkZXZpY2UgKi8KKwkJCWlmIChpcnEpIHsKKwkJCQlyZXQgPSBkaW8yMDBfc3ViZGV2X2ludHJfaW5pdChkZXYsIHMsCisJCQkJCWlvYmFzZSArIERJTzIwMF9JTlRfU0NFLAorCQkJCQlsYXlvdXQtPnNkaW5mb1tuXSwgbGF5b3V0LT5oYXNfaW50X3NjZSk7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQl9CisJCQkJZGV2cHJpdi0+aW50cl9zZCA9IG47CisJCQl9IGVsc2UgeworCQkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNkeCA9IGRldnByaXYtPmludHJfc2Q7CisJaWYgKHNkeCA+PSAwICYmIHNkeCA8IGRldi0+bl9zdWJkZXZpY2VzKSB7CisJCWRldi0+cmVhZF9zdWJkZXYgPSAmZGV2LT5zdWJkZXZpY2VzW3NkeF07CisJfQorCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGlycSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gc2hhcmVfaXJxID8gSVJRRl9TSEFSRUQgOiAwOworCisJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBkaW8yMDBfaW50ZXJydXB0LCBmbGFncywKKwkJCQlESU8yMDBfRFJJVkVSX05BTUUsIGRldikgPj0gMCkgeworCQkJZGV2LT5pcnEgPSBpcnE7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJImNvbWVkaSVkOiB3YXJuaW5nISBpcnEgJXUgdW5hdmFpbGFibGUhXG4iLAorCQkJCWRldi0+bWlub3IsIGlycSk7CisJCX0KKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogJXMgIiwgZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lKTsKKwlpZiAodGhpc2JvYXJkLT5idXN0eXBlID09IGlzYV9idXN0eXBlKSB7CisJCXByaW50aygiKGJhc2UgJSNseCkgIiwgaW9iYXNlKTsKKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJCXByaW50aygiKHBjaSAlcykgIiwgcGNpX25hbWUocGNpX2RldikpOworI2VuZGlmCisJfQorCWlmIChpcnEpIHsKKwkJcHJpbnRrKCIoaXJxICV1JXMpICIsIGlycSwgKGRldi0+aXJxID8gIiIgOiAiIFVOQVZBSUxBQkxFIikpOworCX0gZWxzZSB7CisJCXByaW50aygiKG5vIGlycSkgIik7CisJfQorCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBkaW8yMDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWNvbnN0IHN0cnVjdCBkaW8yMDBfbGF5b3V0X3N0cnVjdCAqbGF5b3V0OworCXVuc2lnbmVkIG47CisKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6ICVzOiBkZXRhY2hcbiIsIGRldi0+bWlub3IsCisJCURJTzIwMF9EUklWRVJfTkFNRSk7CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKwlpZiAoZGV2LT5zdWJkZXZpY2VzKSB7CisJCWxheW91dCA9IHRoaXNsYXlvdXQ7CisJCWZvciAobiA9IDA7IG4gPCBkZXYtPm5fc3ViZGV2aWNlczsgbisrKSB7CisJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9ICZkZXYtPnN1YmRldmljZXNbbl07CisJCQlzd2l0Y2ggKGxheW91dC0+c2R0eXBlW25dKSB7CisJCQljYXNlIHNkXzgyNTQ6CisJCQkJZGlvMjAwX3N1YmRldl84MjU0X2NsZWFudXAoZGV2LCBzKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ugc2RfODI1NToKKwkJCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgcyk7CisJCQkJYnJlYWs7CisJCQljYXNlIHNkX2ludHI6CisJCQkJZGlvMjAwX3N1YmRldl9pbnRyX2NsZWFudXAoZGV2LCBzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKGRldnByaXYpIHsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0gZWxzZQorI2VuZGlmCisJCXsKKwkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBESU8yMDBfSU9fU0laRSk7CisJCQl9CisJCX0KKwl9CisJaWYgKGRldi0+Ym9hcmRfbmFtZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogJXMgcmVtb3ZlZFxuIiwKKwkJCWRldi0+bWlub3IsIGRldi0+Ym9hcmRfbmFtZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wYzIzNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwMjdjNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYwpAQCAtMCwwICsxLDY1NCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hbXBsY19wYzIzNi5jCisgICAgRHJpdmVyIGZvciBBbXBsaWNvbiBQQzM2QVQgYW5kIFBDSTIzNiBESU8gYm9hcmRzLgorCisgICAgQ29weXJpZ2h0IChDKSAyMDAyIE1FViBMdGQuIDxodHRwOi8vd3d3Lm1ldi5jby51ay8+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBhbXBsY19wYzIzNgorRGVzY3JpcHRpb246IEFtcGxpY29uIFBDMzZBVCwgUENJMjM2CitBdXRob3I6IElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPgorRGV2aWNlczogW0FtcGxpY29uXSBQQzM2QVQgKHBjMzZhdCksIFBDSTIzNiAocGNpMjM2IG9yIGFtcGxjX3BjMjM2KQorVXBkYXRlZDogV2VkLCAyMiBPY3QgMjAwOCAxMzo0MDowMyArMDEwMAorU3RhdHVzOiB3b3JrcworCitDb25maWd1cmF0aW9uIG9wdGlvbnMgLSBQQzM2QVQ6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEgKG9wdGlvbmFsKQorCitDb25maWd1cmF0aW9uIG9wdGlvbnMgLSBQQ0kyMzY6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kgZGV2aWNlIHdpbGwgYmUKKyAgdXNlZC4KKworVGhlIFBDMzZBVCBJU0EgYm9hcmQgYW5kIFBDSTIzNiBQQ0kgYm9hcmQgaGF2ZSBhIHNpbmdsZSA4MjU1IGFwcGVhcmluZworYXMgc3ViZGV2aWNlIDAuCisKK1N1YmRldmljZSAxIHByZXRlbmRzIHRvIGJlIGEgZGlnaXRhbCBpbnB1dCBkZXZpY2UsIGJ1dCBpdCBhbHdheXMgcmV0dXJucworMCB3aGVuIHJlYWQuIEhvd2V2ZXIsIGlmIHlvdSBydW4gYSBjb21tYW5kIHdpdGggc2Nhbl9iZWdpbl9zcmM9VFJJR19FWFQsCithIHJpc2luZyBlZGdlIG9uIHBvcnQgQyBiaXQgNyBhY3RzIGFzIGFuIGV4dGVybmFsIHRyaWdnZXIsIHdoaWNoIGNhbiBiZQordXNlZCB0byB3YWtlIHVwIHRhc2tzLiAgVGhpcyBpcyBsaWtlIHRoZSBjb21lZGlfcGFycG9ydCBkZXZpY2UsIGJ1dCB0aGUKK29ubHkgd2F5IHRvIHBoeXNpY2FsbHkgZGlzYWJsZSB0aGUgaW50ZXJydXB0IG9uIHRoZSBQQzM2QVQgaXMgdG8gcmVtb3ZlCit0aGUgSVJRIGp1bXBlci4gIElmIG5vIGludGVycnVwdCBpcyBjb25uZWN0ZWQsIHRoZW4gc3ViZGV2aWNlIDEgaXMKK3VudXNlZC4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJwbHg5MDUyLmgiCisKKyNkZWZpbmUgUEMyMzZfRFJJVkVSX05BTUUJImFtcGxjX3BjMjM2IgorCisvKiBQQ0kyMzYgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiAweDE0ZGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMzYgMHgwMDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5WQUxJRCAweGZmZmYKKworLyogUEMzNkFUIC8gUENJMjM2IHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFBDMjM2X0lPX1NJWkUJCTQKKyNkZWZpbmUgUEMyMzZfTENSX0lPX1NJWkUJMTI4CisKKy8qCisgKiBJTlRDU1IgdmFsdWVzIGZvciBQQ0kyMzYuCisgKi8KKy8qIERpc2FibGUgaW50ZXJydXB0LCBhbHNvIGNsZWFyIGFueSBpbnRlcnJ1cHQgdGhlcmUgKi8KKyNkZWZpbmUgUENJMjM2X0lOVFJfRElTQUJMRSAoIFBMWDkwNTJfSU5UQ1NSX0xJMUVOQUJfRElTQUJMRUQgXAorICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMVBPTF9ISUdIIFwKKyAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9MSTJQT0xfSElHSCBcCisgICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfUENJRU5BQl9ESVNBQkxFRCBcCisgICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfTEkxU0VMX0VER0UgXAorICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMUNMUklOVF9BU1NFUlRFRCApCisvKiBFbmFibGUgaW50ZXJydXB0LCBhbHNvIGNsZWFyIGFueSBpbnRlcnJ1cHQgdGhlcmUuICovCisjZGVmaW5lIFBDSTIzNl9JTlRSX0VOQUJMRSAoIFBMWDkwNTJfSU5UQ1NSX0xJMUVOQUJfRU5BQkxFRCBcCisgICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfTEkxUE9MX0hJR0ggXAorICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMlBPTF9ISUdIIFwKKyAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9QQ0lFTkFCX0VOQUJMRUQgXAorICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMVNFTF9FREdFIFwKKyAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9MSTFDTFJJTlRfQVNTRVJURUQgKQorCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciBBbXBsaWNvbiBQQzM2QVQgYW5kIFBDSTIzNi4KKyAqLworCitlbnVtIHBjMjM2X2J1c3R5cGUgeyBpc2FfYnVzdHlwZSwgcGNpX2J1c3R5cGUgfTsKK2VudW0gcGMyMzZfbW9kZWwgeyBwYzM2YXRfbW9kZWwsIHBjaTIzNl9tb2RlbCwgYW55cGNpX21vZGVsIH07CisKK3N0cnVjdCBwYzIzNl9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpmYW5jeV9uYW1lOworCXVuc2lnbmVkIHNob3J0IGRldmlkOworCWVudW0gcGMyMzZfYnVzdHlwZSBidXN0eXBlOworCWVudW0gcGMyMzZfbW9kZWwgbW9kZWw7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBwYzIzNl9ib2FyZCBwYzIzNl9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjMzZhdCIsCisJICAgICAgZmFuY3lfbmFtZToiUEMzNkFUIiwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGMzNmF0X21vZGVsLAorCQl9LAorI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJeworCSAgICAgIG5hbWU6CSJwY2kyMzYiLAorCSAgICAgIGZhbmN5X25hbWU6IlBDSTIzNiIsCisJICAgICAgZGV2aWQ6CVBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjM2LAorCSAgICAgIGJ1c3R5cGU6CXBjaV9idXN0eXBlLAorCSAgICAgIG1vZGVsOglwY2kyMzZfbW9kZWwsCisJCX0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCXsKKwkgICAgICBuYW1lOglQQzIzNl9EUklWRVJfTkFNRSwKKwkgICAgICBmYW5jeV9uYW1lOlBDMjM2X0RSSVZFUl9OQU1FLAorCSAgICAgIGRldmlkOglQQ0lfREVWSUNFX0lEX0lOVkFMSUQsCisJICAgICAgYnVzdHlwZToJcGNpX2J1c3R5cGUsCisJICAgICAgbW9kZWw6CWFueXBjaV9tb2RlbCwJLyogd2lsZGNhcmQgKi8KKwkJfSwKKyNlbmRpZgorfTsKKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGMyMzZfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMzYsIFBDSV9BTllfSUQsCisJCVBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjMjM2X3BjaV90YWJsZSk7CisjZW5kaWYgLyogQ09ORklHX0NPTUVESV9QQ0kgKi8KKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGMyMzZfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IHBjMjM2X3ByaXZhdGUgeworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJLyogUENJIGRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCXVuc2lnbmVkIGxvbmcgbGNyX2lvYmFzZTsJLyogUExYIFBDSTkwNTIgY29uZmlnIHJlZ2lzdGVycyBpbiBQQ0lCQVIxICovCisjZW5kaWYKKwlpbnQgZW5hYmxlX2lycTsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwYzIzNl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBwYzIzNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwYzIzNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9hbXBsY19wYzIzNiA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOlBDMjM2X0RSSVZFUl9OQU1FLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjMjM2X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwYzIzNl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZwYzIzNl9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjMjM2X2JvYXJkKSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YocGMyMzZfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgcGMyMzZfYm9hcmQpLAorfTsKKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wYzIzNiwgcGMyMzZfcGNpX3RhYmxlKTsKKyNlbHNlCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2FtcGxjX3BjMjM2KTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHBjMjM2X3JlcXVlc3RfcmVnaW9uKHVuc2lnbmVkIG1pbm9yLCB1bnNpZ25lZCBsb25nIGZyb20sCisJdW5zaWduZWQgbG9uZyBleHRlbnQpOworc3RhdGljIHZvaWQgcGMyMzZfaW50cl9kaXNhYmxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB2b2lkIHBjMjM2X2ludHJfZW5hYmxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgcGMyMzZfaW50cl9jaGVjayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHBjMjM2X2ludHJfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBwYzIzNl9pbnRyX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IHBjMjM2X2ludHJfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBwYzIzNl9pbnRyX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBwYzIzNl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGxvb2tzIGZvciBhIFBDSSBkZXZpY2UgbWF0Y2hpbmcgdGhlIHJlcXVlc3RlZCBib2FyZCBuYW1lLAorICogYnVzIGFuZCBzbG90LgorICovCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK3N0YXRpYyBpbnQKK3BjMjM2X2ZpbmRfcGNpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCwKKwlzdHJ1Y3QgcGNpX2RldiAqKnBjaV9kZXZfcCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisKKwkqcGNpX2Rldl9wID0gTlVMTDsKKworCS8qIExvb2sgZm9yIG1hdGNoaW5nIFBDSSBkZXZpY2UuICovCisJZm9yIChwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXYgIT0gTlVMTDsKKwkJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1QTElDT04sCisJCQlQQ0lfQU5ZX0lELCBwY2lfZGV2KSkgeworCQkvKiBJZiBidXMvc2xvdCBzcGVjaWZpZWQsIGNoZWNrIHRoZW0uICovCisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJaWYgKGJ1cyAhPSBwY2lfZGV2LT5idXMtPm51bWJlcgorCQkJCXx8IHNsb3QgIT0gUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0aGlzYm9hcmQtPm1vZGVsID09IGFueXBjaV9tb2RlbCkgeworCQkJLyogTWF0Y2ggYW55IHN1cHBvcnRlZCBtb2RlbC4gKi8KKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYzIzNl9ib2FyZHMpOyBpKyspIHsKKwkJCQlpZiAocGMyMzZfYm9hcmRzW2ldLmJ1c3R5cGUgIT0gcGNpX2J1c3R5cGUpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChwY2lfZGV2LT5kZXZpY2UgPT0gcGMyMzZfYm9hcmRzW2ldLmRldmlkKSB7CisJCQkJCS8qIENoYW5nZSBib2FyZF9wdHIgdG8gbWF0Y2hlZCBib2FyZC4gKi8KKwkJCQkJZGV2LT5ib2FyZF9wdHIgPSAmcGMyMzZfYm9hcmRzW2ldOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHBjMjM2X2JvYXJkcykpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQkvKiBNYXRjaCBzcGVjaWZpYyBtb2RlbCBuYW1lLiAqLworCQkJaWYgKHBjaV9kZXYtPmRldmljZSAhPSB0aGlzYm9hcmQtPmRldmlkKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRm91bmQgYSBtYXRjaC4gKi8KKwkJKnBjaV9kZXZfcCA9IHBjaV9kZXY7CisJCXJldHVybiAwOworCX0KKwkvKiBObyBtYXRjaCBmb3VuZC4gKi8KKwlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6IGVycm9yISBubyAlcyBmb3VuZCBhdCBwY2kgJTAyeDolMDJ4IVxuIiwKKwkJCWRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSwgYnVzLCBzbG90KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgbm8gJXMgZm91bmQhXG4iLAorCQkJZGV2LT5taW5vciwgdGhpc2JvYXJkLT5uYW1lKTsKKwl9CisJcmV0dXJuIC1FSU87Cit9CisjZW5kaWYKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjMjM2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IDA7CisJdW5zaWduZWQgaW50IGlycSA9IDA7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisJaW50IGJ1cyA9IDAsIHNsb3QgPSAwOworI2VuZGlmCisJaW50IHNoYXJlX2lycSA9IDA7CisJaW50IHJldDsKKworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogJXM6IGF0dGFjaFxuIiwgZGV2LT5taW5vciwKKwkJUEMyMzZfRFJJVkVSX05BTUUpOworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGMyMzZfcHJpdmF0ZSkpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiByZXQ7CisJfQorCS8qIFByb2Nlc3Mgb3B0aW9ucy4gKi8KKwlzd2l0Y2ggKHRoaXNib2FyZC0+YnVzdHlwZSkgeworCWNhc2UgaXNhX2J1c3R5cGU6CisJCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCQlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwkJc2hhcmVfaXJxID0gMDsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwljYXNlIHBjaV9idXN0eXBlOgorCQlidXMgPSBpdC0+b3B0aW9uc1swXTsKKwkJc2xvdCA9IGl0LT5vcHRpb25zWzFdOworCQlzaGFyZV9pcnEgPSAxOworCisJCWlmICgocmV0ID0gcGMyMzZfZmluZF9wY2koZGV2LCBidXMsIHNsb3QsICZwY2lfZGV2KSkgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZGV2cHJpdi0+cGNpX2RldiA9IHBjaV9kZXY7CisJCWJyZWFrOworI2VuZGlmIC8qIENPTkZJR19DT01FRElfUENJICovCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6ICVzOiBCVUchIGNhbm5vdCBkZXRlcm1pbmUgYm9hcmQgdHlwZSFcbiIsCisJCQlkZXYtPm1pbm9yLCBQQzIzNl9EUklWRVJfTkFNRSk7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4KKyAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCS8qIEVuYWJsZSBkZXZpY2UgYW5kIHJlc2VydmUgSS9PIHNwYWNlcy4gKi8KKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWlmIChwY2lfZGV2KSB7CisJCWlmICgocmV0ID0gY29tZWRpX3BjaV9lbmFibGUocGNpX2RldiwgUEMyMzZfRFJJVkVSX05BTUUpKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJjb21lZGklZDogZXJyb3IhIGNhbm5vdCBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zIVxuIiwKKwkJCQlkZXYtPm1pbm9yKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJZGV2cHJpdi0+bGNyX2lvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAxKTsKKwkJaW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDIpOworCQlpcnEgPSBwY2lfZGV2LT5pcnE7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCXJldCA9IHBjMjM2X3JlcXVlc3RfcmVnaW9uKGRldi0+bWlub3IsIGlvYmFzZSwgUEMyMzZfSU9fU0laRSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisvKgorICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMikpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKDgyNTUpICovCisJaWYgKChyZXQgPSBzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgaW9iYXNlKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISBvdXQgb2YgbWVtb3J5IVxuIiwKKwkJCWRldi0+bWlub3IpOworCQlyZXR1cm4gcmV0OworCX0KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCXBjMjM2X2ludHJfZGlzYWJsZShkZXYpOworCWlmIChpcnEpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFncyA9IHNoYXJlX2lycSA/IElSUUZfU0hBUkVEIDogMDsKKworCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgcGMyMzZfaW50ZXJydXB0LCBmbGFncywKKwkJCQlQQzIzNl9EUklWRVJfTkFNRSwgZGV2KSA+PSAwKSB7CisJCQlkZXYtPmlycSA9IGlycTsKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9DTURfUkVBRDsKKwkJCXMtPm5fY2hhbiA9IDE7CisJCQlzLT5tYXhkYXRhID0gMTsKKwkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCQlzLT5pbnNuX2JpdHMgPSBwYzIzNl9pbnRyX2luc247CisJCQlzLT5kb19jbWR0ZXN0ID0gcGMyMzZfaW50cl9jbWR0ZXN0OworCQkJcy0+ZG9fY21kID0gcGMyMzZfaW50cl9jbWQ7CisJCQlzLT5jYW5jZWwgPSBwYzIzNl9pbnRyX2NhbmNlbDsKKwkJfQorCX0KKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogJXMgIiwgZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lKTsKKwlpZiAodGhpc2JvYXJkLT5idXN0eXBlID09IGlzYV9idXN0eXBlKSB7CisJCXByaW50aygiKGJhc2UgJSNseCkgIiwgaW9iYXNlKTsKKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJCXByaW50aygiKHBjaSAlcykgIiwgcGNpX25hbWUocGNpX2RldikpOworI2VuZGlmCisJfQorCWlmIChpcnEpIHsKKwkJcHJpbnRrKCIoaXJxICV1JXMpICIsIGlycSwgKGRldi0+aXJxID8gIiIgOiAiIFVOQVZBSUxBQkxFIikpOworCX0gZWxzZSB7CisJCXByaW50aygiKG5vIGlycSkgIik7CisJfQorCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBwYzIzNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiAlczogZGV0YWNoXG4iLCBkZXYtPm1pbm9yLAorCQlQQzIzNl9EUklWRVJfTkFNRSk7CisJaWYgKGRldnByaXYpIHsKKwkJcGMyMzZfaW50cl9kaXNhYmxlKGRldik7CisJfQorCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWlmIChkZXYtPnN1YmRldmljZXMpIHsKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDApOworCX0KKwlpZiAoZGV2cHJpdikgeworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwkJfSBlbHNlCisjZW5kaWYKKwkJeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFBDMjM2X0lPX1NJWkUpOworCQkJfQorCQl9CisJfQorCWlmIChkZXYtPmJvYXJkX25hbWUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6ICVzIHJlbW92ZWRcbiIsCisJCQlkZXYtPm1pbm9yLCBkZXYtPmJvYXJkX25hbWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGFuZCByZXF1ZXN0cyBhbiBJL08gcmVnaW9uLCByZXBvcnRpbmcgYW4gZXJyb3IKKyAqIGlmIHRoZXJlIGlzIGEgY29uZmxpY3QuCisgKi8KK3N0YXRpYyBpbnQgcGMyMzZfcmVxdWVzdF9yZWdpb24odW5zaWduZWQgbWlub3IsIHVuc2lnbmVkIGxvbmcgZnJvbSwKKwl1bnNpZ25lZCBsb25nIGV4dGVudCkKK3sKKwlpZiAoIWZyb20gfHwgIXJlcXVlc3RfcmVnaW9uKGZyb20sIGV4dGVudCwgUEMyMzZfRFJJVkVSX05BTUUpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IEkvTyBwb3J0IGNvbmZsaWN0ICglI2x4LCVsdSkhXG4iLAorCQkJbWlub3IsIGZyb20sIGV4dGVudCk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIG1hcmsgdGhlIGludGVycnVwdCBhcyBkaXNhYmxlZCAobm8gY29tbWFuZAorICogY29uZmlndXJlZCBvbiBzdWJkZXZpY2UgMSkgYW5kIHRvIHBoeXNpY2FsbHkgZGlzYWJsZSB0aGUgaW50ZXJydXB0CisgKiAobm90IHBvc3NpYmxlIG9uIHRoZSBQQzM2QVQsIGV4Y2VwdCBieSByZW1vdmluZyB0aGUgSVJRIGp1bXBlciEpLgorICovCitzdGF0aWMgdm9pZCBwYzIzNl9pbnRyX2Rpc2FibGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWRldnByaXYtPmVuYWJsZV9pcnEgPSAwOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJaWYgKGRldnByaXYtPmxjcl9pb2Jhc2UpCisJCW91dGwoUENJMjM2X0lOVFJfRElTQUJMRSwgZGV2cHJpdi0+bGNyX2lvYmFzZSArIFBMWDkwNTJfSU5UQ1NSKTsKKyNlbmRpZgorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBtYXJrIHRoZSBpbnRlcnJ1cHQgYXMgZW5hYmxlZCAoYSBjb21tYW5kCisgKiBjb25maWd1cmVkIG9uIHN1YmRldmljZSAxKSBhbmQgdG8gcGh5c2ljYWxseSBlbmFibGUgdGhlIGludGVycnVwdAorICogKG5vdCBwb3NzaWJsZSBvbiB0aGUgUEMzNkFULCBleGNlcHQgYnkgKHJlKWNvbm5lY3RpbmcgdGhlIElSUSBqdW1wZXIhKS4KKyAqLworc3RhdGljIHZvaWQgcGMyMzZfaW50cl9lbmFibGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWRldnByaXYtPmVuYWJsZV9pcnEgPSAxOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJaWYgKGRldnByaXYtPmxjcl9pb2Jhc2UpCisJCW91dGwoUENJMjM2X0lOVFJfRU5BQkxFLCBkZXZwcml2LT5sY3JfaW9iYXNlICsgUExYOTA1Ml9JTlRDU1IpOworI2VuZGlmCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gaW50ZXJydXB0IG9jY3VycyB0byBjaGVjayB3aGV0aGVyCisgKiB0aGUgaW50ZXJydXB0IGhhcyBiZWVuIG1hcmtlZCBhcyBlbmFibGVkIGFuZCB3YXMgZ2VuZXJhdGVkIGJ5IHRoZQorICogYm9hcmQuICBJZiBzbywgdGhlIGZ1bmN0aW9uIHByZXBhcmVzIHRoZSBoYXJkd2FyZSBmb3IgdGhlIG5leHQKKyAqIGludGVycnVwdC4KKyAqIFJldHVybnMgMCBpZiB0aGUgaW50ZXJydXB0IHNob3VsZCBiZSBpZ25vcmVkLgorICovCitzdGF0aWMgaW50IHBjMjM2X2ludHJfY2hlY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IHJldHZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5lbmFibGVfaXJxKSB7CisJCXJldHZhbCA9IDE7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwkJaWYgKGRldnByaXYtPmxjcl9pb2Jhc2UpIHsKKwkJCWlmICgoaW5sKGRldnByaXYtPmxjcl9pb2Jhc2UgKyBQTFg5MDUyX0lOVENTUikKKwkJCQkJJiBQTFg5MDUyX0lOVENTUl9MSTFTVEFUX01BU0spCisJCQkJPT0gUExYOTA1Ml9JTlRDU1JfTEkxU1RBVF9JTkFDVElWRSkgeworCQkJCXJldHZhbCA9IDA7CisJCQl9IGVsc2UgeworCQkJCS8qIENsZWFyIGludGVycnVwdCBhbmQga2VlcCBpdCBlbmFibGVkLiAqLworCQkJCW91dGwoUENJMjM2X0lOVFJfRU5BQkxFLAorCQkJCQlkZXZwcml2LT5sY3JfaW9iYXNlICsgUExYOTA1Ml9JTlRDU1IpOworCQkJfQorCQl9CisjZW5kaWYKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBJbnB1dCBmcm9tIHN1YmRldmljZSAxLgorICogQ29waWVkIGZyb20gdGhlIGNvbWVkaV9wYXJwb3J0IGRyaXZlci4KKyAqLworc3RhdGljIGludCBwYzIzNl9pbnRyX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMV0gPSAwOworCXJldHVybiAyOworfQorCisvKgorICogU3ViZGV2aWNlIDEgY29tbWFuZCB0ZXN0LgorICogQ29waWVkIGZyb20gdGhlIGNvbWVkaV9wYXJwb3J0IGRyaXZlci4KKyAqLworc3RhdGljIGludCBwYzIzNl9pbnRyX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJLyogc3RlcCAxICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogaWdub3JlZCAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6ICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSAxKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJY21kLT5zdG9wX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBpZ25vcmVkICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCisvKgorICogU3ViZGV2aWNlIDEgY29tbWFuZC4KKyAqLworc3RhdGljIGludCBwYzIzNl9pbnRyX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXBjMjM2X2ludHJfZW5hYmxlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFN1YmRldmljZSAxIGNhbmNlbCBjb21tYW5kLgorICovCitzdGF0aWMgaW50IHBjMjM2X2ludHJfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJcGMyMzZfaW50cl9kaXNhYmxlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuCisgKiBCYXNlZCBvbiB0aGUgY29tZWRpX3BhcnBvcnQgZHJpdmVyLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgcGMyMzZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCWludCBoYW5kbGVkOworCisJaGFuZGxlZCA9IHBjMjM2X2ludHJfY2hlY2soZGV2KTsKKwlpZiAoZGV2LT5hdHRhY2hlZCAmJiBoYW5kbGVkKSB7CisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAwKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0sgfCBDT01FRElfQ0JfRU9TOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyNjMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wYzI2My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YWM0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyNjMuYwpAQCAtMCwwICsxLDQzMSBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hbXBsY19wYzI2My5jCisgICAgRHJpdmVyIGZvciBBbXBsaWNvbiBQQzI2MyBhbmQgUENJMjYzIHJlbGF5IGJvYXJkcy4KKworICAgIENvcHlyaWdodCAoQykgMjAwMiBNRVYgTHRkLiA8aHR0cDovL3d3dy5tZXYuY28udWsvPgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogYW1wbGNfcGMyNjMKK0Rlc2NyaXB0aW9uOiBBbXBsaWNvbiBQQzI2MywgUENJMjYzCitBdXRob3I6IElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPgorRGV2aWNlczogW0FtcGxpY29uXSBQQzI2MyAocGMyNjMpLCBQQ0kyNjMgKHBjaTI2MyBvciBhbXBsY19wYzI2MykKK1VwZGF0ZWQ6IFdlZCwgMjIgT2N0IDIwMDggMTQ6MTA6NTMgKzAxMDAKK1N0YXR1czogd29ya3MKKworQ29uZmlndXJhdGlvbiBvcHRpb25zIC0gUEMyNjM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworCitDb25maWd1cmF0aW9uIG9wdGlvbnMgLSBQQ0kyNjM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kgZGV2aWNlIHdpbGwgYmUKKyAgdXNlZC4KKworRWFjaCBib2FyZCBhcHBlYXJzIGFzIG9uZSBzdWJkZXZpY2UsIHdpdGggMTYgZGlnaXRhbCBvdXRwdXRzLCBlYWNoCitjb25uZWN0ZWQgdG8gYSByZWVkLXJlbGF5LiBSZWxheSBjb250YWN0cyBhcmUgY2xvc2VkIHdoZW4gb3V0cHV0IGlzIDEuCitUaGUgc3RhdGUgb2YgdGhlIG91dHB1dHMgY2FuIGJlIHJlYWQuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKKyNkZWZpbmUgUEMyNjNfRFJJVkVSX05BTUUJImFtcGxjX3BjMjYzIgorCisvKiBQQ0kyNjMgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiAweDE0ZGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyNjMgMHgwMDBjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5WQUxJRCAweGZmZmYKKworLyogUEMyNjMgLyBQQ0kyNjMgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBDMjYzX0lPX1NJWkUJMgorCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciBBbXBsaWNvbiBQQzI2MyAvIFBDSTI2My4KKyAqLworCitlbnVtIHBjMjYzX2J1c3R5cGUgeyBpc2FfYnVzdHlwZSwgcGNpX2J1c3R5cGUgfTsKK2VudW0gcGMyNjNfbW9kZWwgeyBwYzI2M19tb2RlbCwgcGNpMjYzX21vZGVsLCBhbnlwY2lfbW9kZWwgfTsKKworc3RydWN0IHBjMjYzX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmZhbmN5X25hbWU7CisJdW5zaWduZWQgc2hvcnQgZGV2aWQ7CisJZW51bSBwYzI2M19idXN0eXBlIGJ1c3R5cGU7CisJZW51bSBwYzI2M19tb2RlbCBtb2RlbDsKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjMjYzX2JvYXJkIHBjMjYzX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGMyNjMiLAorCSAgICAgIGZhbmN5X25hbWU6IlBDMjYzIiwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJcGMyNjNfbW9kZWwsCisJCX0sCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwl7CisJICAgICAgbmFtZToJInBjaTI2MyIsCisJICAgICAgZmFuY3lfbmFtZToiUENJMjYzIiwKKwkgICAgICBkZXZpZDoJUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyNjMsCisJICAgICAgYnVzdHlwZToJcGNpX2J1c3R5cGUsCisJICAgICAgbW9kZWw6CXBjaTI2M19tb2RlbCwKKwkJfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJeworCSAgICAgIG5hbWU6CVBDMjYzX0RSSVZFUl9OQU1FLAorCSAgICAgIGZhbmN5X25hbWU6UEMyNjNfRFJJVkVSX05BTUUsCisJICAgICAgZGV2aWQ6CVBDSV9ERVZJQ0VfSURfSU5WQUxJRCwKKwkgICAgICBidXN0eXBlOglwY2lfYnVzdHlwZSwKKwkgICAgICBtb2RlbDoJYW55cGNpX21vZGVsLAkvKiB3aWxkY2FyZCAqLworCQl9LAorI2VuZGlmCit9OworCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwYzI2M19wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0FNUExJQ09OLCBQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTI2MywgUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGMyNjNfcGNpX3RhYmxlKTsKKyNlbmRpZiAvKiBDT05GSUdfQ09NRURJX1BDSSAqLworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBwYzI2M19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgorICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK3N0cnVjdCBwYzI2M19wcml2YXRlIHsKKwkvKiBQQ0kgZGV2aWNlLiAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjMjYzX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZW5kaWYgLyogQ09ORklHX0NPTUVESV9QQ0kgKi8KKworLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcGMyNjNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGMyNjNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYW1wbGNfcGMyNjMgPSB7CisgICAgICBkcml2ZXJfbmFtZTpQQzI2M19EUklWRVJfTkFNRSwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwYzI2M19hdHRhY2gsCisgICAgICBkZXRhY2g6cGMyNjNfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomcGMyNjNfYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwYzI2M19ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHBjMjYzX2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHBjMjYzX2JvYXJkKSwKK307CisKK3N0YXRpYyBpbnQgcGMyNjNfcmVxdWVzdF9yZWdpb24odW5zaWduZWQgbWlub3IsIHVuc2lnbmVkIGxvbmcgZnJvbSwKKwl1bnNpZ25lZCBsb25nIGV4dGVudCk7CitzdGF0aWMgaW50IHBjMjYzX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGMyNjNfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGxvb2tzIGZvciBhIFBDSSBkZXZpY2UgbWF0Y2hpbmcgdGhlIHJlcXVlc3RlZCBib2FyZCBuYW1lLAorICogYnVzIGFuZCBzbG90LgorICovCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKK3N0YXRpYyBpbnQKK3BjMjYzX2ZpbmRfcGNpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCwKKwlzdHJ1Y3QgcGNpX2RldiAqKnBjaV9kZXZfcCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisKKwkqcGNpX2Rldl9wID0gTlVMTDsKKworCS8qIExvb2sgZm9yIG1hdGNoaW5nIFBDSSBkZXZpY2UuICovCisJZm9yIChwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXYgIT0gTlVMTDsKKwkJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQU1QTElDT04sCisJCQlQQ0lfQU5ZX0lELCBwY2lfZGV2KSkgeworCQkvKiBJZiBidXMvc2xvdCBzcGVjaWZpZWQsIGNoZWNrIHRoZW0uICovCisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJaWYgKGJ1cyAhPSBwY2lfZGV2LT5idXMtPm51bWJlcgorCQkJCXx8IHNsb3QgIT0gUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0aGlzYm9hcmQtPm1vZGVsID09IGFueXBjaV9tb2RlbCkgeworCQkJLyogTWF0Y2ggYW55IHN1cHBvcnRlZCBtb2RlbC4gKi8KKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwYzI2M19ib2FyZHMpOyBpKyspIHsKKwkJCQlpZiAocGMyNjNfYm9hcmRzW2ldLmJ1c3R5cGUgIT0gcGNpX2J1c3R5cGUpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChwY2lfZGV2LT5kZXZpY2UgPT0gcGMyNjNfYm9hcmRzW2ldLmRldmlkKSB7CisJCQkJCS8qIENoYW5nZSBib2FyZF9wdHIgdG8gbWF0Y2hlZCBib2FyZC4gKi8KKwkJCQkJZGV2LT5ib2FyZF9wdHIgPSAmcGMyNjNfYm9hcmRzW2ldOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHBjMjYzX2JvYXJkcykpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQkvKiBNYXRjaCBzcGVjaWZpYyBtb2RlbCBuYW1lLiAqLworCQkJaWYgKHBjaV9kZXYtPmRldmljZSAhPSB0aGlzYm9hcmQtPmRldmlkKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRm91bmQgYSBtYXRjaC4gKi8KKwkJKnBjaV9kZXZfcCA9IHBjaV9kZXY7CisJCXJldHVybiAwOworCX0KKwkvKiBObyBtYXRjaCBmb3VuZC4gKi8KKwlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6IGVycm9yISBubyAlcyBmb3VuZCBhdCBwY2kgJTAyeDolMDJ4IVxuIiwKKwkJCWRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSwgYnVzLCBzbG90KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgbm8gJXMgZm91bmQhXG4iLAorCQkJZGV2LT5taW5vciwgdGhpc2JvYXJkLT5uYW1lKTsKKwl9CisJcmV0dXJuIC1FSU87Cit9CisjZW5kaWYKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjMjYzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IDA7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CisJaW50IGJ1cyA9IDAsIHNsb3QgPSAwOworI2VuZGlmCisJaW50IHJldDsKKworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogJXM6IGF0dGFjaFxuIiwgZGV2LT5taW5vciwKKwkJUEMyNjNfRFJJVkVSX05BTUUpOworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwYzI2M19wcml2YXRlKSkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisjZW5kaWYKKwkvKiBQcm9jZXNzIG9wdGlvbnMuICovCisJc3dpdGNoICh0aGlzYm9hcmQtPmJ1c3R5cGUpIHsKKwljYXNlIGlzYV9idXN0eXBlOgorCQlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwljYXNlIHBjaV9idXN0eXBlOgorCQlidXMgPSBpdC0+b3B0aW9uc1swXTsKKwkJc2xvdCA9IGl0LT5vcHRpb25zWzFdOworCisJCWlmICgocmV0ID0gcGMyNjNfZmluZF9wY2koZGV2LCBidXMsIHNsb3QsICZwY2lfZGV2KSkgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZGV2cHJpdi0+cGNpX2RldiA9IHBjaV9kZXY7CisJCWJyZWFrOworI2VuZGlmIC8qIENPTkZJR19DT01FRElfUENJICovCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6ICVzOiBCVUchIGNhbm5vdCBkZXRlcm1pbmUgYm9hcmQgdHlwZSFcbiIsCisJCQlkZXYtPm1pbm9yLCBQQzI2M19EUklWRVJfTkFNRSk7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4KKyAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCS8qIEVuYWJsZSBkZXZpY2UgYW5kIHJlc2VydmUgSS9PIHNwYWNlcy4gKi8KKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWlmIChwY2lfZGV2KSB7CisJCWlmICgocmV0ID0gY29tZWRpX3BjaV9lbmFibGUocGNpX2RldiwgUEMyNjNfRFJJVkVSX05BTUUpKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJjb21lZGklZDogZXJyb3IhIGNhbm5vdCBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zIVxuIiwKKwkJCQlkZXYtPm1pbm9yKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJaW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDIpOworCX0gZWxzZQorI2VuZGlmCisJeworCQlyZXQgPSBwYzI2M19yZXF1ZXN0X3JlZ2lvbihkZXYtPm1pbm9yLCBpb2Jhc2UsIFBDMjYzX0lPX1NJWkUpOworCQlpZiAocmV0IDwgMCkgeworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4gIGFsbG9jX3N1YmRldmljZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG91dCBvZiBtZW1vcnkhXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiByZXQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfUlQ7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBwYzI2M19kaW9faW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gcGMyNjNfZGlvX2luc25fY29uZmlnOworCS8qIGFsbCBvdXRwdXRzICovCisJcy0+aW9fYml0cyA9IDB4ZmZmZjsKKwkvKiByZWFkIGluaXRpYWwgcmVsYXkgc3RhdGUgKi8KKwlzLT5zdGF0ZSA9IGluYihkZXYtPmlvYmFzZSk7CisJcy0+c3RhdGUgPSBzLT5zdGF0ZSB8IChpbmIoZGV2LT5pb2Jhc2UpIDw8IDgpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6ICVzICIsIGRldi0+bWlub3IsIGRldi0+Ym9hcmRfbmFtZSk7CisJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSA9PSBpc2FfYnVzdHlwZSkgeworCQlwcmludGsoIihiYXNlICUjbHgpICIsIGlvYmFzZSk7CisJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCQlwcmludGsoIihwY2kgJXMpICIsIHBjaV9uYW1lKHBjaV9kZXYpKTsKKyNlbmRpZgorCX0KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGMyNjNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogJXM6IGRldGFjaFxuIiwgZGV2LT5taW5vciwKKwkJUEMyNjNfRFJJVkVSX05BTUUpOworCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwlpZiAoZGV2cHJpdikKKyNlbmRpZgorCXsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0gZWxzZQorI2VuZGlmCisJCXsKKwkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBQQzI2M19JT19TSVpFKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoZGV2LT5ib2FyZF9uYW1lKSB7CisJCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiAlcyByZW1vdmVkXG4iLAorCQkJZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBhbmQgcmVxdWVzdHMgYW4gSS9PIHJlZ2lvbiwgcmVwb3J0aW5nIGFuIGVycm9yCisgKiBpZiB0aGVyZSBpcyBhIGNvbmZsaWN0LgorICovCitzdGF0aWMgaW50IHBjMjYzX3JlcXVlc3RfcmVnaW9uKHVuc2lnbmVkIG1pbm9yLCB1bnNpZ25lZCBsb25nIGZyb20sCisJdW5zaWduZWQgbG9uZyBleHRlbnQpCit7CisJaWYgKCFmcm9tIHx8ICFyZXF1ZXN0X3JlZ2lvbihmcm9tLCBleHRlbnQsIFBDMjYzX0RSSVZFUl9OQU1FKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBJL08gcG9ydCBjb25mbGljdCAoJSNseCwlbHUpIVxuIiwKKwkJCW1pbm9yLCBmcm9tLCBleHRlbnQpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIERJTyBkZXZpY2VzIGFyZSBzbGlnaHRseSBzcGVjaWFsLiAgQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8KKyAqIGltcGxlbWVudCB0aGUgaW5zbl9yZWFkL2luc25fd3JpdGUgaW50ZXJmYWNlLCBpdCBpcyBtdWNoIG1vcmUKKyAqIHVzZWZ1bCB0byBhcHBsaWNhdGlvbnMgaWYgeW91IGltcGxlbWVudCB0aGUgaW5zbl9iaXRzIGludGVyZmFjZS4KKyAqIFRoaXMgYWxsb3dzIHBhY2tlZCByZWFkaW5nL3dyaXRpbmcgb2YgdGhlIERJTyBjaGFubmVscy4gIFRoZQorICogY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZSAqLworc3RhdGljIGludCBwYzI2M19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFRoZSBpbnNuIGRhdGEgaXMgYSBtYXNrIGluIGRhdGFbMF0gYW5kIHRoZSBuZXcgZGF0YQorCSAqIGluIGRhdGFbMV0sIGVhY2ggY2hhbm5lbCBjb29yZXNwb25kaW5nIHRvIGEgYml0LiAqLworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwkJLyogV3JpdGUgb3V0IHRoZSBuZXcgZGlnaXRhbCBvdXRwdXQgbGluZXMgKi8KKwkJb3V0YihzLT5zdGF0ZSAmIDB4RkYsIGRldi0+aW9iYXNlKTsKKwkJb3V0YihzLT5zdGF0ZSA+PiA4LCBkZXYtPmlvYmFzZSArIDEpOworCX0KKworCS8qIG9uIHJldHVybiwgZGF0YVsxXSBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIGRpZ2l0YWwKKwkgKiBpbnB1dCBhbmQgb3V0cHV0IGxpbmVzLiAqLworCS8qIG9yIHdlIGNvdWxkIGp1c3QgcmV0dXJuIHRoZSBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBvdXRwdXQgdmFsdWVzIGlmCisJICogaXQgd2FzIGEgcHVyZWx5IGRpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHBjMjYzX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfYW1wbGNfcGMyNjMsIHBjMjYzX3BjaV90YWJsZSk7CisjZWxzZQorQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wYzI2Myk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzBiOTY2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIyNC5jCkBAIC0wLDAgKzEsMTU0NSBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMjQuYworICAgIERyaXZlciBmb3IgQW1wbGljb24gUENJMjI0IGFuZCBQQ0kyMzQgQU8gYm9hcmRzLgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA1IE1FViBMdGQuIDxodHRwOi8vd3d3Lm1ldi5jby51ay8+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4LDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGFtcGxjX3BjaTIyNAorRGVzY3JpcHRpb246IEFtcGxpY29uIFBDSTIyNCwgUENJMjM0CitBdXRob3I6IElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPgorRGV2aWNlczogW0FtcGxpY29uXSBQQ0kyMjQgKGFtcGxjX3BjaTIyNCBvciBwY2kyMjQpLAorICBQQ0kyMzQgKGFtcGxjX3BjaTIyNCBvciBwY2kyMzQpCitVcGRhdGVkOiBXZWQsIDIyIE9jdCAyMDA4IDEyOjI1OjA4ICswMTAwCitTdGF0dXM6IHdvcmtzLCBidXQgc2VlIGNhdmVhdHMKKworU3VwcG9ydHM6CisKKyAgLSBhb19pbnNuIHJlYWQvd3JpdGUKKyAgLSBhb19kb19jbWQgbW9kZSB3aXRoIHRoZSBmb2xsb3dpbmcgc291cmNlczoKKworICAgIC0gc3RhcnRfc3JjICAgICAgICAgVFJJR19JTlQgICAgICAgIFRSSUdfRVhUCisgICAgLSBzY2FuX2JlZ2luX3NyYyAgICBUUklHX1RJTUVSICAgICAgVFJJR19FWFQKKyAgICAtIGNvbnZlcnRfc3JjICAgICAgIFRSSUdfTk9XCisgICAgLSBzY2FuX2VuZF9zcmMgICAgICBUUklHX0NPVU5UCisgICAgLSBzdG9wX3NyYyAgICAgICAgICBUUklHX0NPVU5UICAgICAgVFJJR19FWFQgICAgICAgIFRSSUdfTk9ORQorCisgICAgVGhlIGNoYW5uZWwgbGlzdCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYW5uZWwgd2l0aCBubyByZXBlYXRlZAorICAgIGNoYW5uZWxzLiAgVGhlIHNjYW4gZW5kIGNvdW50IG11c3QgZXF1YWwgdGhlIG51bWJlciBvZiBjaGFubmVscyBpbgorICAgIHRoZSBjaGFubmVsIGxpc3QuCisKKyAgICBUaGVyZSBpcyBvbmx5IG9uZSBleHRlcm5hbCB0cmlnZ2VyIHNvdXJjZSBzbyBvbmx5IG9uZSBvZiBzdGFydF9zcmMsCisgICAgc2Nhbl9iZWdpbl9zcmMgb3Igc3RvcF9zcmMgbWF5IHVzZSBUUklHX0VYVC4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zIC0gUENJMjI0OgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpLgorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKS4KKyAgICAgICAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSSBkZXZpY2UKKyAgICAgICAgICB3aWxsIGJlIHVzZWQuCisgIFsyXSAtIFNlbGVjdCBhdmFpbGFibGUgcmFuZ2VzIGFjY29yZGluZyB0byBqdW1wZXIgTEsxLiAgQWxsIGNoYW5uZWxzCisgICAgICAgIGFyZSBzZXQgdG8gdGhlIHNhbWUgcmFuZ2U6CisgICAgICAgIDA9SnVtcGVyIHBvc2l0aW9uIDEtMiAoZmFjdG9yeSBkZWZhdWx0KSwgNCBzb2Z0d2FyZS1zZWxlY3RhYmxlCisgICAgICAgICAgaW50ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2VzLCBnaXZpbmcgNCBiaXBvbGFyIGFuZCA0IHVuaXBvbGFyCisgICAgICAgICAgcmFuZ2VzOgorICAgICAgICAgICAgWy0xMFYsKzEwVl0sIFstNVYsKzVWXSwgWy0yLjVWLCsyLjVWXSwgWy0xLjI1ViwrMS4yNVZdLAorICAgICAgICAgICAgWzAsKzEwVl0sIFswLCs1Vl0sIFswLCsyLjVWXSwgWzAsMS4yNVZdLgorICAgICAgICAxPUp1bXBlciBwb3NpdGlvbiAyLTMsIDEgZXh0ZXJuYWwgdm9sdGFnZSByZWZlcmVuY2UsIGdpdmluZworICAgICAgICAgIDEgYmlwb2xhciBhbmQgMSB1bmlwb2xhciByYW5nZToKKyAgICAgICAgICAgIFstVmV4dCwrVmV4dF0sIFswLCtWZXh0XS4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zIC0gUENJMjM0OgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpLgorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKS4KKyAgICAgICAgICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3QgYXZhaWxhYmxlIFBDSSBkZXZpY2UKKyAgICAgICAgICB3aWxsIGJlIHVzZWQuCisgIFsyXSAtIFNlbGVjdCBpbnRlcm5hbCBvciBleHRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZSBhY2NvcmRpbmcgdG8KKyAgICAgICAganVtcGVyIExLMS4gIFRoaXMgYWZmZWN0cyBhbGwgY2hhbm5lbHM6CisgICAgICAgIDA9SnVtcGVyIHBvc2l0aW9uIDEtMiAoZmFjdG9yeSBkZWZhdWx0KSwgVnJlZj01ViBpbnRlcm5hbC4KKyAgICAgICAgMT1KdW1wZXIgcG9zaXRpb24gMi0zLCBWcmVmPVZleHQgZXh0ZXJuYWwuCisgIFszXSAtIFNlbGVjdCBjaGFubmVsIDAgcmFuZ2UgYWNjb3JkaW5nIHRvIGp1bXBlciBMSzI6CisgICAgICAgIDA9SnVtcGVyIHBvc2l0aW9uIDItMyAoZmFjdG9yeSBkZWZhdWx0KSwgcmFuZ2UgWy0yKlZyZWYsKzIqVnJlZl0KKyAgICAgICAgICAoMTBWIGJpcG9sYXIgd2hlbiBvcHRpb25zWzJdPTApLgorICAgICAgICAxPUp1bXBlciBwb3NpdGlvbiAxLTIsIHJhbmdlIFstVnJlZiwrVnJlZl0KKyAgICAgICAgICAoNVYgYmlwb2xhciB3aGVuIG9wdGlvbnNbMl09MCkuCisgIFs0XSAtIFNlbGVjdCBjaGFubmVsIDEgcmFuZ2UgYWNjb3JkaW5nIHRvIGp1bXBlciBMSzM6IGNmLiBvcHRpb25zWzNdLgorICBbNV0gLSBTZWxlY3QgY2hhbm5lbCAyIHJhbmdlIGFjY29yZGluZyB0byBqdW1wZXIgTEs0OiBjZi4gb3B0aW9uc1szXS4KKyAgWzZdIC0gU2VsZWN0IGNoYW5uZWwgMyByYW5nZSBhY2NvcmRpbmcgdG8ganVtcGVyIExLNTogY2YuIG9wdGlvbnNbM10uCisKK1Bhc3NpbmcgYSB6ZXJvIGZvciBhbiBvcHRpb24gaXMgdGhlIHNhbWUgYXMgbGVhdmluZyBpdCB1bnNwZWNpZmllZC4KKworQ2F2ZWF0czoKKworICAxKSBBbGwgY2hhbm5lbHMgb24gdGhlIFBDSTIyNCBzaGFyZSB0aGUgc2FtZSByYW5nZS4gIEFueSBjaGFuZ2UgdG8gdGhlCisgICAgIHJhbmdlIGFzIGEgcmVzdWx0IG9mIGluc25fd3JpdGUgb3IgYSBzdHJlYW1pbmcgY29tbWFuZCB3aWxsIGFmZmVjdAorICAgICB0aGUgb3V0cHV0IHZvbHRhZ2VzIG9mIGFsbCBjaGFubmVscywgaW5jbHVkaW5nIHRob3NlIG5vdCBzcGVjaWZpZWQKKyAgICAgYnkgdGhlIGluc3RydWN0aW9uIG9yIGNvbW1hbmQuCisKKyAgMikgRm9yIHRoZSBhbmFsb2cgb3V0cHV0IGNvbW1hbmQsICB0aGUgZmlyc3Qgc2NhbiBtYXkgYmUgdHJpZ2dlcmVkCisgICAgIGZhbHNlbHkgYXQgdGhlIHN0YXJ0IG9mIGFjcXVpc2l0aW9uLiAgVGhpcyBvY2N1cnMgd2hlbiB0aGUgREFDIHNjYW4KKyAgICAgdHJpZ2dlciBzb3VyY2UgaXMgc3dpdGNoZWQgZnJvbSAnbm9uZScgdG8gJ3RpbWVyJyAoc2Nhbl9iZWdpbl9zcmMgPQorICAgICBUUklHX1RJTUVSKSBvciAnZXh0ZXJuYWwnIChzY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgYXQgdGhlIHN0YXJ0CisgICAgIG9mIGFjcXVpc2l0aW9uIGFuZCB0aGUgdHJpZ2dlciBzb3VyY2UgaXMgYXQgbG9naWMgbGV2ZWwgMSBhdCB0aGUKKyAgICAgdGltZSBvZiB0aGUgc3dpdGNoLiAgVGhpcyBpcyB2ZXJ5IGxpa2VseSBmb3IgVFJJR19USU1FUi4gIEZvcgorICAgICBUUklHX0VYVCwgaXQgZGVwZW5kcyBvbiB0aGUgc3RhdGUgb2YgdGhlIGV4dGVybmFsIGxpbmUgYW5kIHdoZXRoZXIKKyAgICAgdGhlIENSX0lOVkVSVCBmbGFnIGhhcyBiZWVuIHNldC4gIFRoZSByZW1haW5pbmcgc2NhbnMgYXJlIHRyaWdnZXJlZAorICAgICBjb3JyZWN0bHkuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKyNpbmNsdWRlICI4MjUzLmgiCisKKyNkZWZpbmUgRFJJVkVSX05BTUUJImFtcGxjX3BjaTIyNCIKKworLyoKKyAqIFBDSSBJRHMuCisgKi8KKy8qICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiAweDE0ZGMgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMjQgMHgwMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjM0IDB4MDAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVkFMSUQgMHhmZmZmCisKKy8qCisgKiBQQ0kyMjQvMjM0IGkvbyBzcGFjZSAxIChQQ0lCQVIyKSByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgUENJMjI0X0lPMV9TSVpFCTB4MjAJLyogU2l6ZSBvZiBpL28gc3BhY2UgMSAoOC1iaXQgcmVnaXN0ZXJzKSAqLworI2RlZmluZSBQQ0kyMjRfWjJfQ1QwCTB4MTQJLyogODJDNTQgY291bnRlci90aW1lciAwICovCisjZGVmaW5lIFBDSTIyNF9aMl9DVDEJMHgxNQkvKiA4MkM1NCBjb3VudGVyL3RpbWVyIDEgKi8KKyNkZWZpbmUgUENJMjI0X1oyX0NUMgkweDE2CS8qIDgyQzU0IGNvdW50ZXIvdGltZXIgMiAqLworI2RlZmluZSBQQ0kyMjRfWjJfQ1RDCTB4MTcJLyogODJDNTQgY291bnRlci90aW1lciBjb250cm9sIHdvcmQgKi8KKyNkZWZpbmUgUENJMjI0X1pDTEtfU0NFCTB4MUEJLyogR3JvdXAgWiBDbG9jayBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTIyNF9aR0FUX1NDRQkweDFECS8qIEdyb3VwIFogR2F0ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSTIyNF9JTlRfU0NFCTB4MUUJLyogSVNSIEludGVycnVwdCBzb3VyY2UgbWFzayByZWdpc3RlciAqLworCQkJCS8qIC9JbnRlcnJ1cHQgc3RhdHVzICovCisKKy8qCisgKiBQQ0kyMjQvMjM0IGkvbyBzcGFjZSAyIChQQ0lCQVIzKSAxNi1iaXQgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIFBDSTIyNF9JTzJfU0laRQkweDEwCS8qIFNpemUgb2YgaS9vIHNwYWNlIDIgKDE2LWJpdCByZWdpc3RlcnMpLiAqLworI2RlZmluZSBQQ0kyMjRfREFDREFUQQkweDAwCS8qICh3LW8pIERBQyBGSUZPIGRhdGEuICovCisjZGVmaW5lIFBDSTIyNF9TT0ZUVFJJRwkweDAwCS8qIChyLW8pIERBQyBzb2Z0d2FyZSBzY2FuIHRyaWdnZXIuICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT04JMHgwMgkvKiAoci93KSBEQUMgc3RhdHVzL2NvbmZpZ3VyYXRpb24uICovCisjZGVmaW5lIFBDSTIyNF9GSUZPU0laCTB4MDQJLyogKHctbykgRklGTyBzaXplIGZvciB3cmFwYXJvdW5kIG1vZGUuICovCisjZGVmaW5lIFBDSTIyNF9EQUNDRU4JMHgwNgkvKiAody1vKSBEQUMgY2hhbm5lbCBlbmFibGUgcmVnaXN0ZXIuICovCisKKy8qCisgKiBEQUNDT04gdmFsdWVzLgorICovCisvKiAoci93KSBTY2FuIHRyaWdnZXIuICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVFJJR19NQVNLCQkoNyA8PCAwKQorI2RlZmluZSBQQ0kyMjRfREFDQ09OX1RSSUdfTk9ORQkJKDAgPDwgMCkJLyogbm9uZSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1RSSUdfU1cJCSgxIDw8IDApCS8qIHNvZnR3YXJlIHRyaWcgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9UUklHX0VYVFAJCSgyIDw8IDApCS8qIGV4dCArdmUgZWRnZSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1RSSUdfRVhUTgkJKDMgPDwgMCkJLyogZXh0IC12ZSBlZGdlICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVFJJR19aMkNUMAkoNCA8PCAwKQkvKiBaMiBDVDAgb3V0ICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVFJJR19aMkNUMQkoNSA8PCAwKQkvKiBaMiBDVDEgb3V0ICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVFJJR19aMkNUMgkoNiA8PCAwKQkvKiBaMiBDVDIgb3V0ICovCisvKiAoci93KSBQb2xhcml0eSAoUENJMjI0IG9ubHksIFBDSTIzNCBhbHdheXMgYmlwb2xhciEpLiAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX1BPTEFSX01BU0sJKDEgPDwgMykKKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9QT0xBUl9VTkkJCSgwIDw8IDMpCS8qIHJhbmdlIFswLFZyZWZdICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fUE9MQVJfQkkJCSgxIDw8IDMpCS8qIHJhbmdlIFstVnJlZixWcmVmXSAqLworLyogKHIvdykgSW50ZXJuYWwgVnJlZiAoUENJMjI0IG9ubHksIHdoZW4gTEsxIGluIHBvc2l0aW9uIDEtMikuICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVlJFRl9NQVNLCQkoMyA8PCA0KQorI2RlZmluZSBQQ0kyMjRfREFDQ09OX1ZSRUZfMV8yNQkJKDAgPDwgNCkJLyogVnJlZiA9IDEuMjVWICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVlJFRl8yXzUJCSgxIDw8IDQpCS8qIFZyZWYgPSAyLjVWICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fVlJFRl81CQkoMiA8PCA0KQkvKiBWcmVmID0gNVYgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9WUkVGXzEwCQkoMyA8PCA0KQkvKiBWcmVmID0gMTBWICovCisvKiAoci93KSBXcmFwYXJvdW5kIG1vZGUgZW5hYmxlICh0byBwbGF5IGJhY2sgc3RvcmVkIHdhdmVmb3JtKS4gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPV1JBUAkJKDEgPDwgNykKKy8qIChyL3cpIEZJRk8gZW5hYmxlLiAgSXQgTVVTVCBiZSBzZXQhICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT0VOQUIJCSgxIDw8IDgpCisvKiAoci93KSBGSUZPIGludGVycnVwdCB0cmlnZ2VyIGxldmVsIChtb3N0IHZhbHVlcyBhcmUgbm90IHZlcnkgdXNlZnVsKS4gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9NQVNLCSg3IDw8IDkpCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT0lOVFJfRU1QVFkJKDAgPDwgOSkJLyogd2hlbiBlbXB0eSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX05FTVBUWQkoMSA8PCA5KQkvKiB3aGVuIG5vdCBlbXB0eSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX05IQUxGCSgyIDw8IDkpCS8qIHdoZW4gbm90IGhhbGYgZnVsbCAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX0hBTEYJKDMgPDwgOSkJLyogd2hlbiBoYWxmIGZ1bGwgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9ORlVMTAkoNCA8PCA5KQkvKiB3aGVuIG5vdCBmdWxsICovCisjZGVmaW5lIFBDSTIyNF9EQUNDT05fRklGT0lOVFJfRlVMTAkoNSA8PCA5KQkvKiB3aGVuIGZ1bGwgKi8KKy8qIChyLW8pIEZJRk8gZmlsbCBsZXZlbC4gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPRkxfTUFTSwkoNyA8PCAxMikKKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPRkxfRU1QVFkJKDEgPDwgMTIpCS8qIDAgKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPRkxfT05FVE9IQUxGCSgwIDw8IDEyKQkvKiBbMSwyMDQ4XSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9GTF9IQUxGVE9GVUxMCSg0IDw8IDEyKQkvKiBbMjA0OSw0MDk1XSAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0ZJRk9GTF9GVUxMCSg2IDw8IDEyKQkvKiA0MDk2ICovCisvKiAoci1vKSBEQUMgYnVzeSBmbGFnLiAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0JVU1kJCSgxIDw8IDE1KQorLyogKHctbykgRklGTyByZXNldC4gKi8KKyNkZWZpbmUgUENJMjI0X0RBQ0NPTl9GSUZPUkVTRVQJCSgxIDw8IDEyKQorLyogKHctbykgR2xvYmFsIHJlc2V0IChub3Qgc3VyZSB3aGF0IGl0IGRvZXMpLiAqLworI2RlZmluZSBQQ0kyMjRfREFDQ09OX0dMT0JBTFJFU0VUCSgxIDw8IDEzKQorCisvKgorICogREFDIEZJRk8gc2l6ZS4KKyAqLworI2RlZmluZSBQQ0kyMjRfRklGT19TSVpFCTQwOTYKKworLyoKKyAqIERBQyBGSUZPIGd1YXJhbnRlZWQgbWluaW11bSByb29tIGF2YWlsYWJsZSwgZGVwZW5kaW5nIG9uIHJlcG9ydGVkIGZpbGwgbGV2ZWwuCisgKiBUaGUgbWF4aW11bSByb29tIGF2YWlsYWJsZSBkZXBlbmRzIG9uIHRoZSByZXBvcnRlZCBmaWxsIGxldmVsIGFuZCBob3cgbXVjaAorICogaGFzIGJlZW4gd3JpdHRlbiEKKyAqLworI2RlZmluZSBQQ0kyMjRfRklGT19ST09NX0VNUFRZCQlQQ0kyMjRfRklGT19TSVpFCisjZGVmaW5lIFBDSTIyNF9GSUZPX1JPT01fT05FVE9IQUxGCShQQ0kyMjRfRklGT19TSVpFIC8gMikKKyNkZWZpbmUgUENJMjI0X0ZJRk9fUk9PTV9IQUxGVE9GVUxMCTEKKyNkZWZpbmUgUENJMjI0X0ZJRk9fUk9PTV9GVUxMCQkwCisKKy8qCisgKiBDb3VudGVyL3RpbWVyIGNsb2NrIGlucHV0IGNvbmZpZ3VyYXRpb24gc291cmNlcy4KKyAqLworI2RlZmluZSBDTEtfQ0xLCQkwCS8qIHJlc2VydmVkIChjaGFubmVsLXNwZWNpZmljIGNsb2NrKSAqLworI2RlZmluZSBDTEtfMTBNSFoJMQkvKiBpbnRlcm5hbCAxMCBNSHogY2xvY2sgKi8KKyNkZWZpbmUgQ0xLXzFNSFoJMgkvKiBpbnRlcm5hbCAxIE1IeiBjbG9jayAqLworI2RlZmluZSBDTEtfMTAwS0haCTMJLyogaW50ZXJuYWwgMTAwIGtIeiBjbG9jayAqLworI2RlZmluZSBDTEtfMTBLSFoJNAkvKiBpbnRlcm5hbCAxMCBrSHogY2xvY2sgKi8KKyNkZWZpbmUgQ0xLXzFLSFoJNQkvKiBpbnRlcm5hbCAxIGtIeiBjbG9jayAqLworI2RlZmluZSBDTEtfT1VUTk0xCTYJLyogb3V0cHV0IG9mIGNoYW5uZWwtMSBtb2R1bG8gdG90YWwgKi8KKyNkZWZpbmUgQ0xLX0VYVAkJNwkvKiBleHRlcm5hbCBjbG9jayAqLworLyogTWFjcm8gdG8gY29uc3RydWN0IGNsb2NrIGlucHV0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdmFsdWUuICovCisjZGVmaW5lIENMS19DT05GSUcoY2hhbiwgc3JjKQkoKCgoY2hhbikgJiAzKSA8PCAzKSB8ICgoc3JjKSAmIDcpKQorLyogVGltZWJhc2VzIGluIG5zLiAqLworI2RlZmluZSBUSU1FQkFTRV8xME1IWgkJMTAwCisjZGVmaW5lIFRJTUVCQVNFXzFNSFoJCTEwMDAKKyNkZWZpbmUgVElNRUJBU0VfMTAwS0haCQkxMDAwMAorI2RlZmluZSBUSU1FQkFTRV8xMEtIWgkJMTAwMDAwCisjZGVmaW5lIFRJTUVCQVNFXzFLSFoJCTEwMDAwMDAKKworLyoKKyAqIENvdW50ZXIvdGltZXIgZ2F0ZSBpbnB1dCBjb25maWd1cmF0aW9uIHNvdXJjZXMuCisgKi8KKyNkZWZpbmUgR0FUX1ZDQwkJMAkvKiBWQ0MgKGkuZS4gZW5hYmxlZCkgKi8KKyNkZWZpbmUgR0FUX0dORAkJMQkvKiBHTkQgKGkuZS4gZGlzYWJsZWQpICovCisjZGVmaW5lIEdBVF9FWFQJCTIJLyogcmVzZXJ2ZWQgKGV4dGVybmFsIGdhdGUgaW5wdXQpICovCisjZGVmaW5lIEdBVF9OT1VUTk0yCTMJLyogaW52ZXJ0ZWQgb3V0cHV0IG9mIGNoYW5uZWwtMiBtb2R1bG8gdG90YWwgKi8KKy8qIE1hY3JvIHRvIGNvbnN0cnVjdCBnYXRlIGlucHV0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdmFsdWUuICovCisjZGVmaW5lIEdBVF9DT05GSUcoY2hhbiwgc3JjKQkoKCgoY2hhbikgJiAzKSA8PCAzKSB8ICgoc3JjKSAmIDcpKQorCisvKgorICogU3VtbWFyeSBvZiBDTEtfT1VUTk0xIGFuZCBHQVRfTk9VVE5NMiBjb25uZWN0aW9ucyBmb3IgUENJMjI0IGFuZCBQQ0kyMzQ6CisgKgorICogICAgICAgICAgICAgIENoYW5uZWwncyAgICAgICBDaGFubmVsJ3MKKyAqICAgICAgICAgICAgICBjbG9jayBpbnB1dCAgICAgZ2F0ZSBpbnB1dAorICogQ2hhbm5lbCAgICAgIENMS19PVVROTTEgICAgICBHQVRfTk9VVE5NMgorICogLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLQorICogWjItQ1QwICAgICAgIFoyLUNUMi1PVVQgICAgICAvWjItQ1QxLU9VVAorICogWjItQ1QxICAgICAgIFoyLUNUMC1PVVQgICAgICAvWjItQ1QyLU9VVAorICogWjItQ1QyICAgICAgIFoyLUNUMS1PVVQgICAgICAvWjItQ1QwLU9VVAorICovCisKKy8qCisgKiBJbnRlcnJ1cHQgZW5hYmxlL3N0YXR1cyBiaXRzCisgKi8KKyNkZWZpbmUgUENJMjI0X0lOVFJfRVhUCQkweDAxCS8qIHJpc2luZyBlZGdlIG9uIGV4dGVybmFsIGlucHV0ICovCisjZGVmaW5lIFBDSTIyNF9JTlRSX0RBQwkJMHgwNAkvKiBEQUMgKEZJRk8pIGludGVycnVwdCAqLworI2RlZmluZSBQQ0kyMjRfSU5UUl9aMkNUMQkweDIwCS8qIHJpc2luZyBlZGdlIG9uIFoyLUNUMSBvdXRwdXQgKi8KKworI2RlZmluZSBQQ0kyMjRfSU5UUl9FREdFX0JJVFMJKFBDSTIyNF9JTlRSX0VYVCB8IFBDSTIyNF9JTlRSX1oyQ1QxKQorI2RlZmluZSBQQ0kyMjRfSU5UUl9MRVZFTF9CSVRTCVBDSTIyNF9JTlRSX0RBQ0ZJRk8KKworLyoKKyAqIEhhbmR5IG1hY3Jvcy4KKyAqLworCisvKiBDb21iaW5lIG9sZCBhbmQgbmV3IGJpdHMuICovCisjZGVmaW5lIENPTUJJTkUob2xkLCBuZXcsIG1hc2spCSgoKG9sZCkgJiB+KG1hc2spKSB8ICgobmV3KSAmIChtYXNrKSkpCisKKy8qIEEgZ2VuZXJpYyBudWxsIGZ1bmN0aW9uIHBvaW50ZXIgdmFsdWUuICAqLworI2RlZmluZSBOVUxMRlVOQwkwCisKKy8qIEN1cnJlbnQgQ1BVLiAgWFhYIHNob3VsZCB0aGlzIGJlIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpPyAqLworI2RlZmluZSBUSElTQ1BVCQlzbXBfcHJvY2Vzc29yX2lkKCkKKworLyogU3RhdGUgYml0cyBmb3IgdXNlIHdpdGggYXRvbWljIGJpdCBvcGVyYXRpb25zLiAqLworI2RlZmluZSBBT19DTURfU1RBUlRFRAkwCisKKy8qCisgKiBSYW5nZSB0YWJsZXMuCisgKi8KKworLyogVGhlIHNvZnR3YXJlIHNlbGVjdGFibGUgaW50ZXJuYWwgcmFuZ2VzIGZvciBQQ0kyMjQgKG9wdGlvblsyXSA9PSAwKS4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2kyMjRfaW50ZXJuYWwgPSB7CisJOCwKKwl7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJCX0KK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBod3JhbmdlX3BjaTIyNF9pbnRlcm5hbFs4XSA9IHsKKwlQQ0kyMjRfREFDQ09OX1BPTEFSX0JJIHwgUENJMjI0X0RBQ0NPTl9WUkVGXzEwLAorCVBDSTIyNF9EQUNDT05fUE9MQVJfQkkgfCBQQ0kyMjRfREFDQ09OX1ZSRUZfNSwKKwlQQ0kyMjRfREFDQ09OX1BPTEFSX0JJIHwgUENJMjI0X0RBQ0NPTl9WUkVGXzJfNSwKKwlQQ0kyMjRfREFDQ09OX1BPTEFSX0JJIHwgUENJMjI0X0RBQ0NPTl9WUkVGXzFfMjUsCisJUENJMjI0X0RBQ0NPTl9QT0xBUl9VTkkgfCBQQ0kyMjRfREFDQ09OX1ZSRUZfMTAsCisJUENJMjI0X0RBQ0NPTl9QT0xBUl9VTkkgfCBQQ0kyMjRfREFDQ09OX1ZSRUZfNSwKKwlQQ0kyMjRfREFDQ09OX1BPTEFSX1VOSSB8IFBDSTIyNF9EQUNDT05fVlJFRl8yXzUsCisJUENJMjI0X0RBQ0NPTl9QT0xBUl9VTkkgfCBQQ0kyMjRfREFDQ09OX1ZSRUZfMV8yNSwKK307CisKKy8qIFRoZSBzb2Z0d2FyZSBzZWxlY3RhYmxlIGV4dGVybmFsIHJhbmdlcyBmb3IgUENJMjI0IChvcHRpb25bMl0gPT0gMSkuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcGNpMjI0X2V4dGVybmFsID0geworCTIsCisJeworCQkJUkFOR0VfZXh0KC0xLCAxKSwJLyogYmlwb2xhciBbLVZyZWYsK1ZyZWZdICovCisJCQlSQU5HRV9leHQoMCwgMSksCS8qIHVuaXBvbGFyIFswLCtWcmVmXSAqLworCQl9Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgaHdyYW5nZV9wY2kyMjRfZXh0ZXJuYWxbMl0gPSB7CisJUENJMjI0X0RBQ0NPTl9QT0xBUl9CSSwKKwlQQ0kyMjRfREFDQ09OX1BPTEFSX1VOSSwKK307CisKKy8qIFRoZSBoYXJkd2FyZSBzZWxlY3RhYmxlIFZyZWYqMiBleHRlcm5hbCByYW5nZSBmb3IgUENJMjM0CisgKiAob3B0aW9uWzJdID09IDEsIG9wdGlvblszK25dID09IDApLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTIzNF9leHQyID0geworCTEsCisJeworCQkJUkFOR0VfZXh0KC0yLCAyKSwKKwkJfQorfTsKKworLyogVGhlIGhhcmR3YXJlIHNlbGVjdGFibGUgVnJlZiBleHRlcm5hbCByYW5nZSBmb3IgUENJMjM0CisgKiAob3B0aW9uWzJdID09IDEsIG9wdGlvblszK25dID09IDEpLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjaTIzNF9leHQgPSB7CisJMSwKKwl7CisJCQlSQU5HRV9leHQoLTEsIDEpLAorCQl9Cit9OworCisvKiBUaGlzIHNlcnZlcyBmb3IgYWxsIHRoZSBQQ0kyMzQgcmFuZ2VzLiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGh3cmFuZ2VfcGNpMjM0WzFdID0geworCVBDSTIyNF9EQUNDT05fUE9MQVJfQkksCS8qIGJpcG9sYXIgLSBoYXJkd2FyZSBpZ25vcmVzIGl0ISAqLworfTsKKworLyoKKyAqIEJvYXJkIGRlc2NyaXB0aW9ucy4KKyAqLworCitlbnVtIHBjaTIyNF9tb2RlbCB7IGFueV9tb2RlbCwgcGNpMjI0X21vZGVsLCBwY2kyMzRfbW9kZWwgfTsKKworc3RydWN0IHBjaTIyNF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBkZXZpZDsKKwllbnVtIHBjaTIyNF9tb2RlbCBtb2RlbDsKKwl1bnNpZ25lZCBpbnQgYW9fY2hhbnM7CisJdW5zaWduZWQgaW50IGFvX2JpdHM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaTIyNF9ib2FyZCBwY2kyMjRfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY2kyMjQiLAorCSAgICAgIGRldmlkOiBQQ0lfREVWSUNFX0lEX0FNUExJQ09OX1BDSTIyNCwKKwkgICAgICBtb2RlbDoJcGNpMjI0X21vZGVsLAorCSAgICAgIGFvX2NoYW5zOjE2LAorCSAgICAgIGFvX2JpdHM6CTEyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpMjM0IiwKKwkgICAgICBkZXZpZDogUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMzQsCisJICAgICAgbW9kZWw6CXBjaTIzNF9tb2RlbCwKKwkgICAgICBhb19jaGFuczo0LAorCSAgICAgIGFvX2JpdHM6CTE2LAorCQl9LAorCXsKKwkgICAgICBuYW1lOglEUklWRVJfTkFNRSwKKwkgICAgICBkZXZpZDogUENJX0RFVklDRV9JRF9JTlZBTElELAorCSAgICAgIG1vZGVsOglhbnlfbW9kZWwsCS8qIHdpbGRjYXJkICovCisJCX0sCit9OworCisvKgorICogUENJIGRyaXZlciB0YWJsZS4KKyAqLworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpMjI0X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQU1QTElDT04sIFBDSV9ERVZJQ0VfSURfQU1QTElDT05fUENJMjI0LAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0RFVklDRV9JRF9BTVBMSUNPTl9QQ0kyMzQsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaTIyNF9wY2lfdGFibGUpOworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKHN0cnVjdCBwY2kyMjRfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IHBjaTIyNF9wcml2YXRlIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsJLyogUENJIGRldmljZSAqLworCWNvbnN0IHVuc2lnbmVkIHNob3J0ICpod3JhbmdlOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlMTsKKwl1bnNpZ25lZCBsb25nIHN0YXRlOworCXNwaW5sb2NrX3QgYW9fc3BpbmxvY2s7CisJdW5zaWduZWQgaW50ICphb19yZWFkYmFjazsKKwlzaG9ydCAqYW9fc2Nhbl92YWxzOworCXVuc2lnbmVkIGNoYXIgKmFvX3NjYW5fb3JkZXI7CisJaW50IGludHJfY3B1aWQ7CisJc2hvcnQgaW50cl9ydW5uaW5nOworCXVuc2lnbmVkIHNob3J0IGRhY2NvbjsKKwl1bnNpZ25lZCBpbnQgY2FjaGVkX2RpdjE7CisJdW5zaWduZWQgaW50IGNhY2hlZF9kaXYyOworCXVuc2lnbmVkIGludCBhb19zdG9wX2NvdW50OworCXNob3J0IGFvX3N0b3BfY29udGludW91czsKKwl1bnNpZ25lZCBzaG9ydCBhb19lbmFiOwkvKiBtYXggMTYgY2hhbm5lbHMgc28gJ3Nob3J0JyB3aWxsIGRvICovCisJdW5zaWduZWQgY2hhciBpbnRzY2U7Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNpMjI0X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IHBjaTIyNF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2kyMjRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYW1wbGNfcGNpMjI0ID0geworICAgICAgZHJpdmVyX25hbWU6RFJJVkVSX05BTUUsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNpMjI0X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2kyMjRfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomcGNpMjI0X2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgcGNpMjI0X2JvYXJkKSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YocGNpMjI0X2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHBjaTIyNF9ib2FyZCksCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wY2kyMjQsIHBjaTIyNF9wY2lfdGFibGUpOworCisvKgorICogQ2FsbGVkIGZyb20gdGhlICdpbnNuX3dyaXRlJyBmdW5jdGlvbiB0byBwZXJmb3JtIGEgc2luZ2xlIHdyaXRlLgorICovCitzdGF0aWMgdm9pZAorcGNpMjI0X2FvX3NldF9kYXRhKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hhbiwgaW50IHJhbmdlLCB1bnNpZ25lZCBpbnQgZGF0YSkKK3sKKwl1bnNpZ25lZCBzaG9ydCBtYW5nbGVkOworCisJLyogU3RvcmUgdW5tYW5nbGVkIGRhdGEgZm9yIHJlYWRiYWNrLiAqLworCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YTsKKwkvKiBFbmFibGUgdGhlIGNoYW5uZWwuICovCisJb3V0dygxIDw8IGNoYW4sIGRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0NFTik7CisJLyogU2V0IHJhbmdlIGFuZCByZXNldCBGSUZPLiAqLworCWRldnByaXYtPmRhY2NvbiA9IENPTUJJTkUoZGV2cHJpdi0+ZGFjY29uLCBkZXZwcml2LT5od3JhbmdlW3JhbmdlXSwKKwkJKFBDSTIyNF9EQUNDT05fUE9MQVJfTUFTSyB8IFBDSTIyNF9EQUNDT05fVlJFRl9NQVNLKSk7CisJb3V0dyhkZXZwcml2LT5kYWNjb24gfCBQQ0kyMjRfREFDQ09OX0ZJRk9SRVNFVCwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ09OKTsKKwkvKgorCSAqIE1hbmdsZSB0aGUgZGF0YS4gIFRoZSBoYXJkd2FyZSBleHBlY3RzOgorCSAqIC0gYmlwb2xhcjogMTYtYml0IDIncyBjb21wbGVtZW50CisJICogLSB1bmlwb2xhcjogMTYtYml0IHVuc2lnbmVkCisJICovCisJbWFuZ2xlZCA9ICh1bnNpZ25lZCBzaG9ydClkYXRhIDw8ICgxNiAtIHRoaXNib2FyZC0+YW9fYml0cyk7CisJaWYgKChkZXZwcml2LT5kYWNjb24gJiBQQ0kyMjRfREFDQ09OX1BPTEFSX01BU0spID09CisJCVBDSTIyNF9EQUNDT05fUE9MQVJfQkkpIHsKKwkJbWFuZ2xlZCBePSAweDgwMDA7CisJfQorCS8qIFdyaXRlIG1hbmdsZWQgZGF0YSB0byB0aGUgRklGTy4gKi8KKwlvdXR3KG1hbmdsZWQsIGRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0RBVEEpOworCS8qIFRyaWdnZXIgdGhlIGNvbnZlcnNpb24uICovCisJaW53KGRldi0+aW9iYXNlICsgUENJMjI0X1NPRlRUUklHKTsKK30KKworLyoKKyAqICdpbnNuX3dyaXRlJyBmdW5jdGlvbiBmb3IgQU8gc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitwY2kyMjRfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4sIHJhbmdlOworCisJLyogVW5wYWNrIGNoYW5uZWwgYW5kIHJhbmdlLiAqLworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlyYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKworCS8qIFdyaXRpbmcgYSBsaXN0IG9mIHZhbHVlcyB0byBhbiBBTyBjaGFubmVsIGlzIHByb2JhYmx5IG5vdAorCSAqIHZlcnkgdXNlZnVsLCBidXQgdGhhdCdzIGhvdyB0aGUgaW50ZXJmYWNlIGlzIGRlZmluZWQuICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlwY2kyMjRfYW9fc2V0X2RhdGEoZGV2LCBjaGFuLCByYW5nZSwgZGF0YVtpXSk7CisJfQorCXJldHVybiBpOworfQorCisvKgorICogJ2luc25fcmVhZCcgZnVuY3Rpb24gZm9yIEFPIHN1YmRldmljZS4KKyAqCisgKiBOLkIuIFRoZSB2YWx1ZSByZWFkIHdpbGwgbm90IGJlIHZhbGlkIGlmIHRoZSBEQUMgY2hhbm5lbCBoYXMKKyAqIG5ldmVyIGJlZW4gd3JpdHRlbiBzdWNjZXNzZnVsbHkgc2luY2UgdGhlIGRldmljZSB3YXMgYXR0YWNoZWQKKyAqIG9yIHNpbmNlIHRoZSBjaGFubmVsIGhhcyBiZWVuIHVzZWQgYnkgYW4gQU8gc3RyZWFtaW5nIHdyaXRlCisgKiBjb21tYW5kLgorICovCitzdGF0aWMgaW50CitwY2kyMjRfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKworCXJldHVybiBpOworfQorCisvKgorICogSnVzdCBhIHdyYXBwZXIgZm9yIHRoZSBpbmxpbmUgZnVuY3Rpb24gJ2k4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXInLgorICovCitzdGF0aWMgdm9pZAorcGNpMjI0X2Nhc2NhZGVfbnNfdG9fdGltZXIoaW50IG9zY19iYXNlLCB1bnNpZ25lZCBpbnQgKmQxLCB1bnNpZ25lZCBpbnQgKmQyLAorCXVuc2lnbmVkIGludCAqbmFub3NlYywgaW50IHJvdW5kX21vZGUpCit7CisJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihvc2NfYmFzZSwgZDEsIGQyLCBuYW5vc2VjLCByb3VuZF9tb2RlKTsKK30KKworLyoKKyAqIEtpbGxzIGEgY29tbWFuZCBydW5uaW5nIG9uIHRoZSBBTyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIHBjaTIyNF9hb19zdG9wKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEFPX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpKSB7CisJCXJldHVybjsKKwl9CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJLyogS2lsbCB0aGUgaW50ZXJydXB0cy4gKi8KKwlkZXZwcml2LT5pbnRzY2UgPSAwOworCW91dGIoMCwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9JTlRfU0NFKTsKKwkvKgorCSAqIEludGVycnVwdCByb3V0aW5lIG1heSBvciBtYXkgbm90IGJlIHJ1bm5pbmcuICBXZSBtYXkgb3IgbWF5IG5vdAorCSAqIGhhdmUgYmVlbiBjYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHJvdXRpbmUgKGRpcmVjdGx5IG9yCisJICogaW5kaXJlY3RseSB2aWEgYSBjb21lZGlfZXZlbnRzKCkgY2FsbGJhY2sgcm91dGluZSkuICBJdCdzIGhpZ2hseQorCSAqIHVubGlrZWx5IHRoYXQgd2UndmUgYmVlbiBjYWxsZWQgZnJvbSBzb21lIG90aGVyIGludGVycnVwdCByb3V0aW5lCisJICogYnV0IHdobyBrbm93cyB3aGF0IHN0cmFuZ2UgdGhpbmdzIGNvZGVycyBnZXQgdXAgdG8hCisJICoKKwkgKiBJZiB0aGUgaW50ZXJydXB0IHJvdXRpbmUgaXMgY3VycmVudGx5IHJ1bm5pbmcsIHdhaXQgZm9yIGl0IHRvCisJICogZmluaXNoLCB1bmxlc3Mgd2UgYXBwZWFyIHRvIGhhdmUgYmVlbiBjYWxsZWQgdmlhIHRoZSBpbnRlcnJ1cHQKKwkgKiByb3V0aW5lLgorCSAqLworCXdoaWxlIChkZXZwcml2LT5pbnRyX3J1bm5pbmcgJiYgZGV2cHJpdi0+aW50cl9jcHVpZCAhPSBUSElTQ1BVKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCS8qIFJlY29uZmlndXJlIERBQyBmb3IgaW5zbl93cml0ZSB1c2FnZS4gKi8KKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0NFTik7CS8qIERpc2FibGUgY2hhbm5lbHMuICovCisJZGV2cHJpdi0+ZGFjY29uID0gQ09NQklORShkZXZwcml2LT5kYWNjb24sCisJCVBDSTIyNF9EQUNDT05fVFJJR19TVyB8IFBDSTIyNF9EQUNDT05fRklGT0lOVFJfRU1QVFksCisJCVBDSTIyNF9EQUNDT05fVFJJR19NQVNLIHwgUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9NQVNLKTsKKwlvdXR3KGRldnByaXYtPmRhY2NvbiB8IFBDSTIyNF9EQUNDT05fRklGT1JFU0VULAorCQlkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDT04pOworfQorCisvKgorICogSGFuZGxlcyBzdGFydCBvZiBhY3F1aXNpdGlvbiBmb3IgdGhlIEFPIHN1YmRldmljZS4KKyAqLworc3RhdGljIHZvaWQgcGNpMjI0X2FvX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzZXRfYml0KEFPX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpOworCWlmICghZGV2cHJpdi0+YW9fc3RvcF9jb250aW51b3VzICYmIGRldnByaXYtPmFvX3N0b3BfY291bnQgPT0gMCkgeworCQkvKiBBbiBlbXB0eSBhY3F1aXNpdGlvbiEgKi8KKwkJcGNpMjI0X2FvX3N0b3AoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgaW50ZXJydXB0cy4gKi8KKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkgeworCQkJZGV2cHJpdi0+aW50c2NlID0gUENJMjI0X0lOVFJfRVhUIHwgUENJMjI0X0lOVFJfREFDOworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+aW50c2NlID0gUENJMjI0X0lOVFJfREFDOworCQl9CisJCW91dGIoZGV2cHJpdi0+aW50c2NlLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X0lOVF9TQ0UpOworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKKwl9Cit9CisKKy8qCisgKiBIYW5kbGVzIGludGVycnVwdHMgZnJvbSB0aGUgREFDIEZJRk8uCisgKi8KK3N0YXRpYyB2b2lkIHBjaTIyNF9hb19oYW5kbGVfZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgbnVtX3NjYW5zOworCXVuc2lnbmVkIGludCByb29tOworCXVuc2lnbmVkIHNob3J0IGRhY3N0YXQ7CisJdW5zaWduZWQgaW50IGksIG47CisJdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9zY2FuOworCisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWJ5dGVzX3Blcl9zY2FuID0gY21kLT5jaGFubGlzdF9sZW4gKiBzaXplb2Yoc2hvcnQpOworCX0gZWxzZSB7CisJCS8qIFNob3VsZG4ndCBnZXQgaGVyZSEgKi8KKwkJYnl0ZXNfcGVyX3NjYW4gPSBzaXplb2Yoc2hvcnQpOworCX0KKwkvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIHNjYW5zIGF2YWlsYWJsZSBpbiBidWZmZXIuICovCisJbnVtX3NjYW5zID0gY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKHMtPmFzeW5jKSAvIGJ5dGVzX3Blcl9zY2FuOworCWlmICghZGV2cHJpdi0+YW9fc3RvcF9jb250aW51b3VzKSB7CisJCS8qIEZpeGVkIG51bWJlciBvZiBzY2Fucy4gKi8KKwkJaWYgKG51bV9zY2FucyA+IGRldnByaXYtPmFvX3N0b3BfY291bnQpIHsKKwkJCW51bV9zY2FucyA9IGRldnByaXYtPmFvX3N0b3BfY291bnQ7CisJCX0KKwl9CisKKwkvKiBEZXRlcm1pbmUgaG93IG11Y2ggcm9vbSBpcyBpbiB0aGUgRklGTyAoaW4gc2FtcGxlcykuICovCisJZGFjc3RhdCA9IGludyhkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDT04pOworCXN3aXRjaCAoZGFjc3RhdCAmIFBDSTIyNF9EQUNDT05fRklGT0ZMX01BU0spIHsKKwljYXNlIFBDSTIyNF9EQUNDT05fRklGT0ZMX0VNUFRZOgorCQlyb29tID0gUENJMjI0X0ZJRk9fUk9PTV9FTVBUWTsKKwkJaWYgKCFkZXZwcml2LT5hb19zdG9wX2NvbnRpbnVvdXMKKwkJCSYmIGRldnByaXYtPmFvX3N0b3BfY291bnQgPT0gMCkgeworCQkJLyogRklGTyBlbXB0eSBhdCBlbmQgb2YgY291bnRlZCBhY3F1aXNpdGlvbi4gKi8KKwkJCXBjaTIyNF9hb19zdG9wKGRldiwgcyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIFBDSTIyNF9EQUNDT05fRklGT0ZMX09ORVRPSEFMRjoKKwkJcm9vbSA9IFBDSTIyNF9GSUZPX1JPT01fT05FVE9IQUxGOworCQlicmVhazsKKwljYXNlIFBDSTIyNF9EQUNDT05fRklGT0ZMX0hBTEZUT0ZVTEw6CisJCXJvb20gPSBQQ0kyMjRfRklGT19ST09NX0hBTEZUT0ZVTEw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJvb20gPSBQQ0kyMjRfRklGT19ST09NX0ZVTEw7CisJCWJyZWFrOworCX0KKwlpZiAocm9vbSA+PSBQQ0kyMjRfRklGT19ST09NX09ORVRPSEFMRikgeworCQkvKiBGSUZPIGlzIGxlc3MgdGhhbiBoYWxmLWZ1bGwuICovCisJCWlmIChudW1fc2NhbnMgPT0gMCkgeworCQkJLyogTm90aGluZyBsZWZ0IHRvIHB1dCBpbiB0aGUgRklGTy4gKi8KKwkJCXBjaTIyNF9hb19zdG9wKGRldiwgcyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJCXJ0X3ByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6ICIKKwkJCQkiQU8gYnVmZmVyIHVuZGVycnVuXG4iLCBkZXYtPm1pbm9yKTsKKwkJfQorCX0KKwkvKiBEZXRlcm1pbmUgaG93IG1hbnkgbmV3IHNjYW5zIGNhbiBiZSBwdXQgaW4gdGhlIEZJRk8uICovCisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCXJvb20gLz0gY21kLT5jaGFubGlzdF9sZW47CisJfQorCS8qIERldGVybWluZSBob3cgbWFueSBzY2FucyB0byBwcm9jZXNzLiAqLworCWlmIChudW1fc2NhbnMgPiByb29tKSB7CisJCW51bV9zY2FucyA9IHJvb207CisJfQorCS8qIFByb2Nlc3Mgc2NhbnMuICovCisJZm9yIChuID0gMDsgbiA8IG51bV9zY2FuczsgbisrKSB7CisJCWNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHMsICZkZXZwcml2LT5hb19zY2FuX3ZhbHNbMF0sCisJCQlieXRlc19wZXJfc2Nhbik7CisJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQlvdXR3KGRldnByaXYtPmFvX3NjYW5fdmFsc1tkZXZwcml2LT4KKwkJCQkJYW9fc2Nhbl9vcmRlcltpXV0sCisJCQkJZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDREFUQSk7CisJCX0KKwl9CisJaWYgKCFkZXZwcml2LT5hb19zdG9wX2NvbnRpbnVvdXMpIHsKKwkJZGV2cHJpdi0+YW9fc3RvcF9jb3VudCAtPSBudW1fc2NhbnM7CisJCWlmIChkZXZwcml2LT5hb19zdG9wX2NvdW50ID09IDApIHsKKwkJCS8qCisJCQkgKiBDaGFuZ2UgRklGTyBpbnRlcnJ1cHQgdHJpZ2dlciBsZXZlbCB0byB3YWl0CisJCQkgKiB1bnRpbCBGSUZPIGlzIGVtcHR5LgorCQkJICovCisJCQlkZXZwcml2LT5kYWNjb24gPSBDT01CSU5FKGRldnByaXYtPmRhY2NvbiwKKwkJCQlQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX0VNUFRZLAorCQkJCVBDSTIyNF9EQUNDT05fRklGT0lOVFJfTUFTSyk7CisJCQlvdXR3KGRldnByaXYtPmRhY2NvbiwKKwkJCQlkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDT04pOworCQl9CisJfQorCWlmICgoZGV2cHJpdi0+ZGFjY29uICYgUENJMjI0X0RBQ0NPTl9UUklHX01BU0spID09CisJCVBDSTIyNF9EQUNDT05fVFJJR19OT05FKSB7CisJCXVuc2lnbmVkIHNob3J0IHRyaWc7CisKKwkJLyoKKwkJICogVGhpcyBpcyB0aGUgaW5pdGlhbCBEQUMgRklGTyBpbnRlcnJ1cHQgYXQgdGhlCisJCSAqIHN0YXJ0IG9mIHRoZSBhY3F1aXNpdGlvbi4gIFRoZSBEQUMncyBzY2FuIHRyaWdnZXIKKwkJICogaGFzIGJlZW4gc2V0IHRvICdub25lJyB1cCB1bnRpbCBub3cuCisJCSAqCisJCSAqIE5vdyB0aGF0IGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB0byB0aGUgRklGTywgdGhlCisJCSAqIERBQydzIHNjYW4gdHJpZ2dlciBzb3VyY2UgY2FuIGJlIHNldCB0byB0aGUKKwkJICogY29ycmVjdCB2YWx1ZS4KKwkJICoKKwkJICogQlVHOiBUaGUgZmlyc3Qgc2NhbiB3aWxsIGJlIHRyaWdnZXJlZCBpbW1lZGlhdGVseQorCQkgKiBpZiB0aGUgc2NhbiB0cmlnZ2VyIHNvdXJjZSBpcyBhdCBsb2dpYyBsZXZlbCAxLgorCQkgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkJdHJpZyA9IFBDSTIyNF9EQUNDT05fVFJJR19aMkNUMDsKKwkJfSBlbHNlIHsKKwkJCS8qIGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQgKi8KKwkJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICYgQ1JfSU5WRVJUKSB7CisJCQkJdHJpZyA9IFBDSTIyNF9EQUNDT05fVFJJR19FWFROOworCQkJfSBlbHNlIHsKKwkJCQl0cmlnID0gUENJMjI0X0RBQ0NPTl9UUklHX0VYVFA7CisJCQl9CisJCX0KKwkJZGV2cHJpdi0+ZGFjY29uID0gQ09NQklORShkZXZwcml2LT5kYWNjb24sIHRyaWcsCisJCQlQQ0kyMjRfREFDQ09OX1RSSUdfTUFTSyk7CisJCW91dHcoZGV2cHJpdi0+ZGFjY29uLCBkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDT04pOworCX0KKwlpZiAocy0+YXN5bmMtPmV2ZW50cykgeworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9Cit9CisKKy8qCisgKiBJbnRlcm5hbCB0cmlnZ2VyIGZ1bmN0aW9uIHRvIHN0YXJ0IGFjcXVpc2l0aW9uIG9uIEFPIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorcGNpMjI0X2FvX2ludHRyaWdfc3RhcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ251bSkKK3sKKwlpZiAodHJpZ251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTEZVTkM7CisJcGNpMjI0X2FvX3N0YXJ0KGRldiwgcyk7CisKKwlyZXR1cm4gMTsKK30KKworI2RlZmluZSBNQVhfU0NBTl9QRVJJT0QJCTB4RkZGRkZGRkZVCisjZGVmaW5lIE1JTl9TQ0FOX1BFUklPRAkJMjUwMAorI2RlZmluZSBDT05WRVJUX1BFUklPRAkJNjI1CisKKy8qCisgKiAnZG9fY21kdGVzdCcgZnVuY3Rpb24gZm9yIEFPIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorcGNpMjI0X2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIFN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkLiAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19JTlQgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19FWFQgfCBUUklHX1RJTUVSOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX0VYVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBTdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkKKwkgKiBjb21wYXRpYmxlLiAqLworCisJLyogdGhlc2UgdGVzdHMgYXJlIHRydWUgaWYgbW9yZSB0aGFuIG9uZSBfc3JjIGJpdCBpcyBzZXQgKi8KKwlpZiAoKGNtZC0+c3RhcnRfc3JjICYgKGNtZC0+c3RhcnRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyAmIChjbWQtPnNjYW5fYmVnaW5fc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5jb252ZXJ0X3NyYyAmIChjbWQtPmNvbnZlcnRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zY2FuX2VuZF9zcmMgJiAoY21kLT5zY2FuX2VuZF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnN0b3Bfc3JjICYgKGNtZC0+c3RvcF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisKKwkvKiBUaGVyZSdzIG9ubHkgb25lIGV4dGVybmFsIHRyaWdnZXIgc2lnbmFsICh3aGljaCBtYWtlcyB0aGVzZQorCSAqIHRlc3RzIGVhc2llcikuICBPbmx5IG9uZSB0aGluZyBjYW4gdXNlIGl0LiAqLworCXRtcCA9IDA7CisJaWYgKGNtZC0+c3RhcnRfc3JjICYgVFJJR19FWFQpCisJCXRtcCsrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICYgVFJJR19FWFQpCisJCXRtcCsrOworCWlmIChjbWQtPnN0b3Bfc3JjICYgVFJJR19FWFQpCisJCXRtcCsrOworCWlmICh0bXAgPiAxKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogU3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZS4gKi8KKworCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfSU5UOgorCQlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQkJY21kLT5zdGFydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJLyogRm9yY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlciAwLiAqLworCQlpZiAoKGNtZC0+c3RhcnRfYXJnICYgfkNSX0ZMQUdTX01BU0spICE9IDApIHsKKwkJCWNtZC0+c3RhcnRfYXJnID0gQ09NQklORShjbWQtPnN0YXJ0X2FyZywgMCwKKwkJCQl+Q1JfRkxBR1NfTUFTSyk7CisJCQllcnIrKzsKKwkJfQorCQkvKiBUaGUgb25seSBmbGFnIGFsbG93ZWQgaXMgQ1JfRURHRSwgd2hpY2ggaXMgaWdub3JlZC4gKi8KKwkJaWYgKChjbWQtPnN0YXJ0X2FyZyAmIENSX0ZMQUdTX01BU0sgJiB+Q1JfRURHRSkgIT0gMCkgeworCQkJY21kLT5zdGFydF9hcmcgPSBDT01CSU5FKGNtZC0+c3RhcnRfYXJnLCAwLAorCQkJCUNSX0ZMQUdTX01BU0sgJiB+Q1JfRURHRSk7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gTUFYX1NDQU5fUEVSSU9EKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUFYX1NDQU5fUEVSSU9EOworCQkJZXJyKys7CisJCX0KKwkJdG1wID0gY21kLT5jaGFubGlzdF9sZW4gKiBDT05WRVJUX1BFUklPRDsKKwkJaWYgKHRtcCA8IE1JTl9TQ0FOX1BFUklPRCkgeworCQkJdG1wID0gTUlOX1NDQU5fUEVSSU9EOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgdG1wKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gdG1wOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJLyogRm9yY2UgdG8gZXh0ZXJuYWwgdHJpZ2dlciAwLiAqLworCQlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9hcmcgJiB+Q1JfRkxBR1NfTUFTSykgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IENPTUJJTkUoY21kLT5zY2FuX2JlZ2luX2FyZywgMCwKKwkJCQl+Q1JfRkxBR1NfTUFTSyk7CisJCQllcnIrKzsKKwkJfQorCQkvKiBPbmx5IGFsbG93IGZsYWdzIENSX0VER0UgYW5kIENSX0lOVkVSVC4gIElnbm9yZSBDUl9FREdFLiAqLworCQlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9hcmcgJiBDUl9GTEFHU19NQVNLICYKKwkJCQl+KENSX0VER0UgfCBDUl9JTlZFUlQpKSAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gQ09NQklORShjbWQtPnNjYW5fYmVnaW5fYXJnLCAwLAorCQkJCUNSX0ZMQUdTX01BU0sgJiB+KENSX0VER0UgfCBDUl9JTlZFUlQpKTsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCX0KKworCS8qIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cgKi8KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwkvKiBjbWQtPnNjYW5fZW5kX2FyZyA9PSBUUklHX0NPVU5UICovCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJLyogQW55IGNvdW50IGFsbG93ZWQuICovCisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCS8qIEZvcmNlIHRvIGV4dGVybmFsIHRyaWdnZXIgMC4gKi8KKwkJaWYgKChjbWQtPnN0b3BfYXJnICYgfkNSX0ZMQUdTX01BU0spICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSBDT01CSU5FKGNtZC0+c3RvcF9hcmcsIDAsCisJCQkJfkNSX0ZMQUdTX01BU0spOworCQkJZXJyKys7CisJCX0KKwkJLyogVGhlIG9ubHkgZmxhZyBhbGxvd2VkIGlzIENSX0VER0UsIHdoaWNoIGlzIGlnbm9yZWQuICovCisJCWlmICgoY21kLT5zdG9wX2FyZyAmIENSX0ZMQUdTX01BU0sgJiB+Q1JfRURHRSkgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IENPTUJJTkUoY21kLT5zdG9wX2FyZywgMCwKKwkJCQlDUl9GTEFHU19NQVNLICYgfkNSX0VER0UpOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19OT05FOgorCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogU3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cy4gKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdW5zaWduZWQgaW50IGRpdjEsIGRpdjIsIHJvdW5kOworCQlpbnQgcm91bmRfbW9kZSA9IGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0s7CisKKwkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJLyogQ2hlY2sgd2hldGhlciB0byB1c2UgYSBzaW5nbGUgdGltZXIuICovCisJCXN3aXRjaCAocm91bmRfbW9kZSkgeworCQljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwkJZGVmYXVsdDoKKwkJCXJvdW5kID0gVElNRUJBU0VfMTBNSFogLyAyOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkJcm91bmQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJCXJvdW5kID0gVElNRUJBU0VfMTBNSFogLSAxOworCQkJYnJlYWs7CisJCX0KKwkJLyogQmUgY2FyZWZ1bCB0byBhdm9pZCBvdmVyZmxvdyEgKi8KKwkJZGl2MiA9IGNtZC0+c2Nhbl9iZWdpbl9hcmcgLyBUSU1FQkFTRV8xME1IWjsKKwkJZGl2MiArPSAocm91bmQgKyBjbWQtPnNjYW5fYmVnaW5fYXJnICUgVElNRUJBU0VfMTBNSFopIC8KKwkJCVRJTUVCQVNFXzEwTUhaOworCQlpZiAoZGl2MiA8PSAweDEwMDAwKSB7CisJCQkvKiBBIHNpbmdsZSB0aW1lciB3aWxsIHN1ZmZpY2UuICovCisJCQlpZiAoZGl2MiA8IDIpCisJCQkJZGl2MiA9IDI7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gZGl2MiAqIFRJTUVCQVNFXzEwTUhaOworCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBkaXYyIHx8CisJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8IFRJTUVCQVNFXzEwTUhaKSB7CisJCQkJLyogT3ZlcmZsb3chICovCisJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TQ0FOX1BFUklPRDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFVzZSB0d28gdGltZXJzLiAqLworCQkJZGl2MSA9IGRldnByaXYtPmNhY2hlZF9kaXYxOworCQkJZGl2MiA9IGRldnByaXYtPmNhY2hlZF9kaXYyOworCQkJcGNpMjI0X2Nhc2NhZGVfbnNfdG9fdGltZXIoVElNRUJBU0VfMTBNSFosICZkaXYxLCAmZGl2MiwKKwkJCQkmY21kLT5zY2FuX2JlZ2luX2FyZywgcm91bmRfbW9kZSk7CisJCQlkZXZwcml2LT5jYWNoZWRfZGl2MSA9IGRpdjE7CisJCQlkZXZwcml2LT5jYWNoZWRfZGl2MiA9IGRpdjI7CisJCX0KKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKSB7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLyogU3RlcCA1OiBjaGVjayBjaGFubmVsIGxpc3QuICovCisKKwlpZiAoY21kLT5jaGFubGlzdCAmJiAoY21kLT5jaGFubGlzdF9sZW4gPiAwKSkgeworCQl1bnNpZ25lZCBpbnQgcmFuZ2U7CisJCWVudW0geyByYW5nZV9lcnIgPSAxLCBkdXBjaGFuX2VyciA9IDIsIH07CisJCXVuc2lnbmVkIGVycm9yczsKKwkJdW5zaWduZWQgaW50IG47CisJCXVuc2lnbmVkIGludCBjaDsKKworCQkvKgorCQkgKiBDaGVjayBhbGwgY2hhbm5lbHMgaGF2ZSB0aGUgc2FtZSByYW5nZSBpbmRleC4gIERvbid0IGNhcmUKKwkJICogYWJvdXQgYW5hbG9ndWUgcmVmZXJlbmNlLCBhcyB3ZSBjYW4ndCBjb25maWd1cmUgaXQuCisJCSAqCisJCSAqIENoZWNrIHRoZSBsaXN0IGhhcyBubyBkdXBsaWNhdGUgY2hhbm5lbHMuCisJCSAqLworCQlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCQllcnJvcnMgPSAwOworCQl0bXAgPSAwOworCQlmb3IgKG4gPSAwOyBuIDwgY21kLT5jaGFubGlzdF9sZW47IG4rKykgeworCQkJY2ggPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pOworCQkJaWYgKHRtcCAmICgxVSA8PCBjaCkpIHsKKwkJCQllcnJvcnMgfD0gZHVwY2hhbl9lcnI7CisJCQl9CisJCQl0bXAgfD0gKDFVIDw8IGNoKTsKKwkJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W25dKSAhPSByYW5nZSkgeworCQkJCWVycm9ycyB8PSByYW5nZV9lcnI7CisJCQl9CisJCX0KKwkJaWYgKGVycm9ycykgeworCQkJaWYgKGVycm9ycyAmIGR1cGNoYW5fZXJyKSB7CisJCQkJRFBSSU5USygiY29tZWRpJWQ6ICIgRFJJVkVSX05BTUUKKwkJCQkJIjogYW9fY21kdGVzdDogIgorCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGNvbnRhaW4gbm8gIgorCQkJCQkiZHVwbGljYXRlIGNoYW5uZWxzXG4iLCBkZXYtPm1pbm9yKTsKKwkJCX0KKwkJCWlmIChlcnJvcnMgJiByYW5nZV9lcnIpIHsKKwkJCQlEUFJJTlRLKCJjb21lZGklZDogIiBEUklWRVJfTkFNRQorCQkJCQkiOiBhb19jbWR0ZXN0OiAiCisJCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgIgorCQkJCQkidGhlIHNhbWUgcmFuZ2UgaW5kZXhcbiIsIGRldi0+bWlub3IpOworCQkJfQorCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCisvKgorICogJ2RvX2NtZCcgZnVuY3Rpb24gZm9yIEFPIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludCBwY2kyMjRfYW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCByYW5nZTsKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwl1bnNpZ25lZCBpbnQgY2g7CisJdW5zaWduZWQgaW50IHJhbms7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIENhbm5vdCBoYW5kbGUgbnVsbC9lbXB0eSBjaGFubGlzdC4gKi8KKwlpZiAoY21kLT5jaGFubGlzdCA9PSBOVUxMIHx8IGNtZC0+Y2hhbmxpc3RfbGVuID09IDApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogRGV0ZXJtaW5lIHdoaWNoIGNoYW5uZWxzIGFyZSBlbmFibGVkIGFuZCB0aGVpciBsb2FkIG9yZGVyLiAgKi8KKwlkZXZwcml2LT5hb19lbmFiID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCWNoID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJZGV2cHJpdi0+YW9fZW5hYiB8PSAxVSA8PCBjaDsKKwkJcmFuayA9IDA7CisJCWZvciAoaiA9IDA7IGogPCBjbWQtPmNoYW5saXN0X2xlbjsgaisrKSB7CisJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2pdKSA8IGNoKSB7CisJCQkJcmFuaysrOworCQkJfQorCQl9CisJCWRldnByaXYtPmFvX3NjYW5fb3JkZXJbcmFua10gPSBpOworCX0KKworCS8qIFNldCBlbmFibGVkIGNoYW5uZWxzLiAqLworCW91dHcoZGV2cHJpdi0+YW9fZW5hYiwgZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ0VOKTsKKworCS8qIERldGVybWluZSByYW5nZSBhbmQgcG9sYXJpdHkuICBBbGwgY2hhbm5lbHMgdGhlIHNhbWUuICAqLworCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisKKwkvKgorCSAqIFNldCBEQUMgcmFuZ2UgYW5kIHBvbGFyaXR5LgorCSAqIFNldCBEQUMgc2NhbiB0cmlnZ2VyIHNvdXJjZSB0byAnbm9uZScuCisJICogU2V0IERBQyBGSUZPIGludGVycnVwdCB0cmlnZ2VyIGxldmVsIHRvICdub3QgaGFsZiBmdWxsJy4KKwkgKiBSZXNldCBEQUMgRklGTy4KKwkgKgorCSAqIE4uQi4gREFDIEZJRk8gaW50ZXJydXB0cyBhcmUgY3VycmVudGx5IGRpc2FibGVkLgorCSAqLworCWRldnByaXYtPmRhY2NvbiA9IENPTUJJTkUoZGV2cHJpdi0+ZGFjY29uLAorCQkoZGV2cHJpdi0+aHdyYW5nZVtyYW5nZV0gfCBQQ0kyMjRfREFDQ09OX1RSSUdfTk9ORSB8CisJCQlQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX05IQUxGKSwKKwkJKFBDSTIyNF9EQUNDT05fUE9MQVJfTUFTSyB8IFBDSTIyNF9EQUNDT05fVlJFRl9NQVNLIHwKKwkJCVBDSTIyNF9EQUNDT05fVFJJR19NQVNLIHwgUENJMjI0X0RBQ0NPTl9GSUZPSU5UUl9NQVNLKSk7CisJb3V0dyhkZXZwcml2LT5kYWNjb24gfCBQQ0kyMjRfREFDQ09OX0ZJRk9SRVNFVCwKKwkJZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ09OKTsKKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdW5zaWduZWQgaW50IGRpdjEsIGRpdjIsIHJvdW5kOworCQl1bnNpZ25lZCBpbnQgbnMgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlpbnQgcm91bmRfbW9kZSA9IGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0s7CisKKwkJLyogQ2hlY2sgd2hldGhlciB0byB1c2UgYSBzaW5nbGUgdGltZXIuICovCisJCXN3aXRjaCAocm91bmRfbW9kZSkgeworCQljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwkJZGVmYXVsdDoKKwkJCXJvdW5kID0gVElNRUJBU0VfMTBNSFogLyAyOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkJcm91bmQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJCXJvdW5kID0gVElNRUJBU0VfMTBNSFogLSAxOworCQkJYnJlYWs7CisJCX0KKwkJLyogQmUgY2FyZWZ1bCB0byBhdm9pZCBvdmVyZmxvdyEgKi8KKwkJZGl2MiA9IGNtZC0+c2Nhbl9iZWdpbl9hcmcgLyBUSU1FQkFTRV8xME1IWjsKKwkJZGl2MiArPSAocm91bmQgKyBjbWQtPnNjYW5fYmVnaW5fYXJnICUgVElNRUJBU0VfMTBNSFopIC8KKwkJCVRJTUVCQVNFXzEwTUhaOworCQlpZiAoZGl2MiA8PSAweDEwMDAwKSB7CisJCQkvKiBBIHNpbmdsZSB0aW1lciB3aWxsIHN1ZmZpY2UuICovCisJCQlpZiAoZGl2MiA8IDIpCisJCQkJZGl2MiA9IDI7CisJCQlkaXYyICY9IDB4ZmZmZjsKKwkJCWRpdjEgPSAxOwkvKiBGbGFnIHRoYXQgc2luZ2xlIHRpbWVyIHRvIGJlIHVzZWQuICovCisJCX0gZWxzZSB7CisJCQkvKiBVc2UgdHdvIHRpbWVycy4gKi8KKwkJCWRpdjEgPSBkZXZwcml2LT5jYWNoZWRfZGl2MTsKKwkJCWRpdjIgPSBkZXZwcml2LT5jYWNoZWRfZGl2MjsKKwkJCXBjaTIyNF9jYXNjYWRlX25zX3RvX3RpbWVyKFRJTUVCQVNFXzEwTUhaLCAmZGl2MSwgJmRpdjIsCisJCQkJJm5zLCByb3VuZF9tb2RlKTsKKwkJfQorCisJCS8qCisJCSAqIFRoZSBvdXRwdXQgb2YgdGltZXIgWjItMCB3aWxsIGJlIHVzZWQgYXMgdGhlIHNjYW4gdHJpZ2dlcgorCQkgKiBzb3VyY2UuCisJCSAqLworCQkvKiBNYWtlIHN1cmUgWjItMCBpcyBnYXRlZCBvbi4gICovCisJCW91dGIoR0FUX0NPTkZJRygwLCBHQVRfVkNDKSwKKwkJCWRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWkdBVF9TQ0UpOworCQlpZiAoZGl2MSA9PSAxKSB7CisJCQkvKiBOb3QgY2FzY2FkaW5nLiAgWjItMCBuZWVkcyAxMCBNSHogY2xvY2suICovCisJCQlvdXRiKENMS19DT05GSUcoMCwgQ0xLXzEwTUhaKSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X1pDTEtfU0NFKTsKKwkJfSBlbHNlIHsKKwkJCS8qIENhc2NhZGluZyB3aXRoIFoyLTIuICovCisJCQkvKiBNYWtlIHN1cmUgWjItMiBpcyBnYXRlZCBvbi4gICovCisJCQlvdXRiKEdBVF9DT05GSUcoMiwgR0FUX1ZDQyksCisJCQkJZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9aR0FUX1NDRSk7CisJCQkvKiBaMi0yIG5lZWRzIDEwIE1IeiBjbG9jay4gKi8KKwkJCW91dGIoQ0xLX0NPTkZJRygyLCBDTEtfMTBNSFopLAorCQkJCWRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWkNMS19TQ0UpOworCQkJLyogTG9hZCBaMi0yIG1vZGUgKDIpIGFuZCBjb3VudGVyIChkaXYxKS4gKi8KKwkJCWk4MjU0X2xvYWQoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9aMl9DVDAsIDAsCisJCQkJMiwgZGl2MSwgMik7CisJCQkvKiBaMi0wIGlzIGNsb2NrZWQgZnJvbSBaMi0yJ3Mgb3V0cHV0LiAqLworCQkJb3V0YihDTEtfQ09ORklHKDAsIENMS19PVVROTTEpLAorCQkJCWRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfWkNMS19TQ0UpOworCQl9CisJCS8qIExvYWQgWjItMCBtb2RlICgyKSBhbmQgY291bnRlciAoZGl2MikuICovCisJCWk4MjU0X2xvYWQoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIyNF9aMl9DVDAsIDAsIDAsIGRpdjIsIDIpOworCX0KKworCS8qCisJICogU29ydCBvdXQgZW5kIG9mIGFjcXVpc2l0aW9uLgorCSAqLworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJLyogRml4ZWQgbnVtYmVyIG9mIHNjYW5zLiAgKi8KKwkJZGV2cHJpdi0+YW9fc3RvcF9jb250aW51b3VzID0gMDsKKwkJZGV2cHJpdi0+YW9fc3RvcF9jb3VudCA9IGNtZC0+c3RvcF9hcmc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIENvbnRpbnVvdXMgc2NhbnMuICovCisJCWRldnByaXYtPmFvX3N0b3BfY29udGludW91cyA9IDE7CisJCWRldnByaXYtPmFvX3N0b3BfY291bnQgPSAwOworCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFNvcnQgb3V0IHN0YXJ0IG9mIGFjcXVpc2l0aW9uLgorCSAqLworCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfSU5UOgorCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gJnBjaTIyNF9hb19pbnR0cmlnX3N0YXJ0OworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJLyogRW5hYmxlIGV4dGVybmFsIGludGVycnVwdCB0cmlnZ2VyIHRvIHN0YXJ0IGFjcXVpc2l0aW9uLiAqLworCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJCWRldnByaXYtPmludHNjZSB8PSBQQ0kyMjRfSU5UUl9FWFQ7CisJCW91dGIoZGV2cHJpdi0+aW50c2NlLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X0lOVF9TQ0UpOworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAnY2FuY2VsJyBmdW5jdGlvbiBmb3IgQU8gc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50IHBjaTIyNF9hb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlwY2kyMjRfYW9fc3RvcChkZXYsIHMpOworCXJldHVybiAwOworfQorCisvKgorICogJ211bmdlJyBkYXRhIGZvciBBTyBjb21tYW5kLgorICovCitzdGF0aWMgdm9pZAorcGNpMjI0X2FvX211bmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHZvaWQgKmRhdGEsCisJdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IGNoYW5faW5kZXgpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzaG9ydCAqYXJyYXkgPSBkYXRhOworCXVuc2lnbmVkIGludCBsZW5ndGggPSBudW1fYnl0ZXMgLyBzaXplb2YoKmFycmF5KTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBzaGlmdDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIFRoZSBoYXJkd2FyZSBleHBlY3RzIDE2LWJpdCBudW1iZXJzLiAqLworCXNoaWZ0ID0gMTYgLSB0aGlzYm9hcmQtPmFvX2JpdHM7CisJLyogQ2hhbm5lbHMgd2lsbCBiZSBhbGwgYmlwb2xhciBvciBhbGwgdW5pcG9sYXIuICovCisJaWYgKChkZXZwcml2LT5od3JhbmdlW0NSX1JBTkdFKGFzeW5jLT5jbWQuY2hhbmxpc3RbMF0pXSAmCisJCQlQQ0kyMjRfREFDQ09OX1BPTEFSX01BU0spID09IFBDSTIyNF9EQUNDT05fUE9MQVJfVU5JKSB7CisJCS8qIFVuaXBvbGFyICovCisJCW9mZnNldCA9IDA7CisJfSBlbHNlIHsKKwkJLyogQmlwb2xhciAqLworCQlvZmZzZXQgPSAzMjc2ODsKKwl9CisJLyogTXVuZ2UgdGhlIGRhdGEuICovCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCWFycmF5W2ldID0gKGFycmF5W2ldIDw8IHNoaWZ0KSAtIG9mZnNldDsKKwl9Cit9CisKKy8qCisgKiBJbnRlcnJ1cHQgaGFuZGxlci4KKyAqLworc3RhdGljIGlycXJldHVybl90IHBjaTIyNF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9ICZkZXYtPnN1YmRldmljZXNbMF07CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZDsKKwl1bnNpZ25lZCBjaGFyIGludHN0YXQsIHZhbGlkX2ludHN0YXQ7CisJdW5zaWduZWQgY2hhciBjdXJlbmFiOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbnRzdGF0ID0gaW5iKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfSU5UX1NDRSkgJiAweDNGOworCWlmIChpbnRzdGF0KSB7CisJCXJldHZhbCA9IDE7CisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YW9fc3BpbmxvY2ssIGZsYWdzKTsKKwkJdmFsaWRfaW50c3RhdCA9IGRldnByaXYtPmludHNjZSAmIGludHN0YXQ7CisJCS8qIFRlbXBvcmFyaWx5IGRpc2FibGUgaW50ZXJydXB0IHNvdXJjZXMuICovCisJCWN1cmVuYWIgPSBkZXZwcml2LT5pbnRzY2UgJiB+aW50c3RhdDsKKwkJb3V0YihjdXJlbmFiLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X0lOVF9TQ0UpOworCQlkZXZwcml2LT5pbnRyX3J1bm5pbmcgPSAxOworCQlkZXZwcml2LT5pbnRyX2NwdWlkID0gVEhJU0NQVTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJCWlmICh2YWxpZF9pbnRzdGF0ICE9IDApIHsKKwkJCWNtZCA9ICZzLT5hc3luYy0+Y21kOworCQkJaWYgKHZhbGlkX2ludHN0YXQgJiBQQ0kyMjRfSU5UUl9FWFQpIHsKKwkJCQlkZXZwcml2LT5pbnRzY2UgJj0gflBDSTIyNF9JTlRSX0VYVDsKKwkJCQlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJCQkJcGNpMjI0X2FvX3N0YXJ0KGRldiwgcyk7CisJCQkJfSBlbHNlIGlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKSB7CisJCQkJCXBjaTIyNF9hb19zdG9wKGRldiwgcyk7CisJCQkJfQorCQkJfQorCQkJaWYgKHZhbGlkX2ludHN0YXQgJiBQQ0kyMjRfSU5UUl9EQUMpIHsKKwkJCQlwY2kyMjRfYW9faGFuZGxlX2ZpZm8oZGV2LCBzKTsKKwkJCX0KKwkJfQorCQkvKiBSZWVuYWJsZSBpbnRlcnJ1cHQgc291cmNlcy4gKi8KKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hb19zcGlubG9jaywgZmxhZ3MpOworCQlpZiAoY3VyZW5hYiAhPSBkZXZwcml2LT5pbnRzY2UpIHsKKwkJCW91dGIoZGV2cHJpdi0+aW50c2NlLAorCQkJCWRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMjRfSU5UX1NDRSk7CisJCX0KKwkJZGV2cHJpdi0+aW50cl9ydW5uaW5nID0gMDsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFvX3NwaW5sb2NrLCBmbGFncyk7CisJfQorCXJldHVybiBJUlFfUkVUVkFMKHJldHZhbCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGxvb2tzIGZvciBhIFBDSSBkZXZpY2UgbWF0Y2hpbmcgdGhlIHJlcXVlc3RlZCBib2FyZCBuYW1lLAorICogYnVzIGFuZCBzbG90LgorICovCitzdGF0aWMgaW50CitwY2kyMjRfZmluZF9wY2koc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90LAorCXN0cnVjdCBwY2lfZGV2ICoqcGNpX2Rldl9wKQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gTlVMTDsKKworCSpwY2lfZGV2X3AgPSBOVUxMOworCisJLyogTG9vayBmb3IgbWF0Y2hpbmcgUENJIGRldmljZS4gKi8KKwlmb3IgKHBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNUExJQ09OLCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpX2RldiAhPSBOVUxMOworCQlwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0FOWV9JRCwKKwkJCXBjaV9kZXYpKSB7CisJCS8qIElmIGJ1cy9zbG90IHNwZWNpZmllZCwgY2hlY2sgdGhlbS4gKi8KKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IHBjaV9kZXYtPmJ1cy0+bnVtYmVyCisJCQkJfHwgc2xvdCAhPSBQQ0lfU0xPVChwY2lfZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKHRoaXNib2FyZC0+bW9kZWwgPT0gYW55X21vZGVsKSB7CisJCQkvKiBNYXRjaCBhbnkgc3VwcG9ydGVkIG1vZGVsLiAqLworCQkJaW50IGk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaTIyNF9ib2FyZHMpOyBpKyspIHsKKwkJCQlpZiAocGNpX2Rldi0+ZGV2aWNlID09IHBjaTIyNF9ib2FyZHNbaV0uZGV2aWQpIHsKKwkJCQkJLyogQ2hhbmdlIGJvYXJkX3B0ciB0byBtYXRjaGVkIGJvYXJkLiAqLworCQkJCQlkZXYtPmJvYXJkX3B0ciA9ICZwY2kyMjRfYm9hcmRzW2ldOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHBjaTIyNF9ib2FyZHMpKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJLyogTWF0Y2ggc3BlY2lmaWMgbW9kZWwgbmFtZS4gKi8KKwkJCWlmICh0aGlzYm9hcmQtPmRldmlkICE9IHBjaV9kZXYtPmRldmljZSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEZvdW5kIGEgbWF0Y2guICovCisJCSpwY2lfZGV2X3AgPSBwY2lfZGV2OworCQlyZXR1cm4gMDsKKwl9CisJLyogTm8gbWF0Y2ggZm91bmQuICovCisJaWYgKGJ1cyB8fCBzbG90KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISAiCisJCQkibm8gJXMgZm91bmQgYXQgcGNpICUwMng6JTAyeCFcbiIsCisJCQlkZXYtPm1pbm9yLCB0aGlzYm9hcmQtPm5hbWUsIGJ1cywgc2xvdCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJyb3IhIG5vICVzIGZvdW5kIVxuIiwKKwkJCWRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSk7CisJfQorCXJldHVybiAtRUlPOworfQorCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgcGNpMjI0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwl1bnNpZ25lZCBpbnQgaXJxOworCWludCBidXMgPSAwLCBzbG90ID0gMDsKKwl1bnNpZ25lZCBuOworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6ICVzOiBhdHRhY2hcbiIsIGRldi0+bWlub3IsIERSSVZFUl9OQU1FKTsKKworCWJ1cyA9IGl0LT5vcHRpb25zWzBdOworCXNsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaTIyNF9wcml2YXRlKSkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgb3V0IG9mIG1lbW9yeSFcbiIsCisJCQlkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKChyZXQgPSBwY2kyMjRfZmluZF9wY2koZGV2LCBidXMsIHNsb3QsICZwY2lfZGV2KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWRldnByaXYtPnBjaV9kZXYgPSBwY2lfZGV2OworCisJaWYgKChyZXQgPSBjb21lZGlfcGNpX2VuYWJsZShwY2lfZGV2LCBEUklWRVJfTkFNRSkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJjb21lZGklZDogZXJyb3IhIGNhbm5vdCBlbmFibGUgUENJIGRldmljZSAiCisJCQkiYW5kIHJlcXVlc3QgcmVnaW9ucyFcbiIsIGRldi0+bWlub3IpOworCQlyZXR1cm4gcmV0OworCX0KKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+YW9fc3BpbmxvY2spOworCisJZGV2cHJpdi0+aW9iYXNlMSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAyKTsKKwlkZXYtPmlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAzKTsKKwlpcnEgPSBwY2lfZGV2LT5pcnE7CisKKwkvKiBBbGxvY2F0ZSByZWFkYmFjayBidWZmZXIgZm9yIEFPIGNoYW5uZWxzLiAqLworCWRldnByaXYtPmFvX3JlYWRiYWNrID0ga21hbGxvYyhzaXplb2YoZGV2cHJpdi0+YW9fcmVhZGJhY2tbMF0pICoKKwkJdGhpc2JvYXJkLT5hb19jaGFucywgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZwcml2LT5hb19yZWFkYmFjaykgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBidWZmZXIgdG8gaG9sZCB2YWx1ZXMgZm9yIEFPIGNoYW5uZWwgc2Nhbi4gKi8KKwlkZXZwcml2LT5hb19zY2FuX3ZhbHMgPSBrbWFsbG9jKHNpemVvZihkZXZwcml2LT5hb19zY2FuX3ZhbHNbMF0pICoKKwkJdGhpc2JvYXJkLT5hb19jaGFucywgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZwcml2LT5hb19zY2FuX3ZhbHMpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQWxsb2NhdGUgYnVmZmVyIHRvIGhvbGQgQU8gY2hhbm5lbCBzY2FuIG9yZGVyLiAqLworCWRldnByaXYtPmFvX3NjYW5fb3JkZXIgPSBrbWFsbG9jKHNpemVvZihkZXZwcml2LT5hb19zY2FuX29yZGVyWzBdKSAqCisJCXRoaXNib2FyZC0+YW9fY2hhbnMsIEdGUF9LRVJORUwpOworCWlmICghZGV2cHJpdi0+YW9fc2Nhbl9vcmRlcikgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBEaXNhYmxlIGludGVycnVwdCBzb3VyY2VzLiAqLworCWRldnByaXYtPmludHNjZSA9IDA7CisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjI0X0lOVF9TQ0UpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgREFDIGhhcmR3YXJlLiAqLworCW91dHcoUENJMjI0X0RBQ0NPTl9HTE9CQUxSRVNFVCwgZGV2LT5pb2Jhc2UgKyBQQ0kyMjRfREFDQ09OKTsKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMjI0X0RBQ0NFTik7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIFBDSTIyNF9GSUZPU0laKTsKKwlkZXZwcml2LT5kYWNjb24gPSAoUENJMjI0X0RBQ0NPTl9UUklHX1NXIHwgUENJMjI0X0RBQ0NPTl9QT0xBUl9CSSB8CisJCVBDSTIyNF9EQUNDT05fRklGT0VOQUIgfCBQQ0kyMjRfREFDQ09OX0ZJRk9JTlRSX0VNUFRZKTsKKwlvdXR3KGRldnByaXYtPmRhY2NvbiB8IFBDSTIyNF9EQUNDT05fRklGT1JFU0VULAorCQlkZXYtPmlvYmFzZSArIFBDSTIyNF9EQUNDT04pOworCisJLyogQWxsb2NhdGUgc3ViZGV2aWNlcy4gIFRoZXJlIGlzIG9ubHkgb25lISAgKi8KKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGVycm9yISBvdXQgb2YgbWVtb3J5IVxuIiwKKwkJCWRldi0+bWlub3IpOworCQlyZXR1cm4gcmV0OworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIEFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlLiAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NNRF9XUklURTsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX2NoYW5zOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFvX2JpdHMpIC0gMTsKKwlzLT5pbnNuX3dyaXRlID0gJnBjaTIyNF9hb19pbnNuX3dyaXRlOworCXMtPmluc25fcmVhZCA9ICZwY2kyMjRfYW9faW5zbl9yZWFkOworCXMtPmxlbl9jaGFubGlzdCA9IHMtPm5fY2hhbjsKKworCWRldi0+d3JpdGVfc3ViZGV2ID0gczsKKwlzLT5kb19jbWQgPSAmcGNpMjI0X2FvX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gJnBjaTIyNF9hb19jbWR0ZXN0OworCXMtPmNhbmNlbCA9ICZwY2kyMjRfYW9fY2FuY2VsOworCXMtPm11bmdlID0gJnBjaTIyNF9hb19tdW5nZTsKKworCS8qIFNvcnQgb3V0IGNoYW5uZWwgcmFuZ2Ugb3B0aW9ucy4gKi8KKwlpZiAodGhpc2JvYXJkLT5tb2RlbCA9PSBwY2kyMzRfbW9kZWwpIHsKKwkJLyogUENJMjM0IHJhbmdlIG9wdGlvbnMuICovCisJCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICoqcmFuZ2VfdGFibGVfbGlzdDsKKworCQlzLT5yYW5nZV90YWJsZV9saXN0ID0gcmFuZ2VfdGFibGVfbGlzdCA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqKSAqIHMtPm5fY2hhbiwKKwkJCUdGUF9LRVJORUwpOworCQlpZiAoIXMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWZvciAobiA9IDI7IG4gPCAzICsgcy0+bl9jaGFuOyBuKyspIHsKKwkJCWlmIChpdC0+b3B0aW9uc1tuXSA8IDAgfHwgaXQtPm9wdGlvbnNbbl0gPiAxKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY29tZWRpJWQ6ICVzOiB3YXJuaW5nISAiCisJCQkJCSJiYWQgb3B0aW9uc1sldV09JWRcbiIsCisJCQkJCWRldi0+bWlub3IsIERSSVZFUl9OQU1FLCBuLAorCQkJCQlpdC0+b3B0aW9uc1tuXSk7CisJCQl9CisJCX0KKwkJZm9yIChuID0gMDsgbiA8IHMtPm5fY2hhbjsgbisrKSB7CisJCQlpZiAobiA8IENPTUVESV9OREVWQ09ORk9QVFMgLSAzICYmCisJCQkJaXQtPm9wdGlvbnNbMyArIG5dID09IDEpIHsKKwkJCQlpZiAoaXQtPm9wdGlvbnNbMl0gPT0gMSkgeworCQkJCQlyYW5nZV90YWJsZV9saXN0W25dID0gJnJhbmdlX3BjaTIzNF9leHQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJcmFuZ2VfdGFibGVfbGlzdFtuXSA9ICZyYW5nZV9iaXBvbGFyNTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChpdC0+b3B0aW9uc1syXSA9PSAxKSB7CisJCQkJCXJhbmdlX3RhYmxlX2xpc3Rbbl0gPQorCQkJCQkJJnJhbmdlX3BjaTIzNF9leHQyOworCQkJCX0gZWxzZSB7CisJCQkJCXJhbmdlX3RhYmxlX2xpc3Rbbl0gPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJCX0KKwkJCX0KKwkJfQorCQlkZXZwcml2LT5od3JhbmdlID0gaHdyYW5nZV9wY2kyMzQ7CisJfSBlbHNlIHsKKwkJLyogUENJMjI0IHJhbmdlIG9wdGlvbnMuICovCisJCWlmIChpdC0+b3B0aW9uc1syXSA9PSAxKSB7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9wY2kyMjRfZXh0ZXJuYWw7CisJCQlkZXZwcml2LT5od3JhbmdlID0gaHdyYW5nZV9wY2kyMjRfZXh0ZXJuYWw7CisJCX0gZWxzZSB7CisJCQlpZiAoaXQtPm9wdGlvbnNbMl0gIT0gMCkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvbWVkaSVkOiAlczogd2FybmluZyEgIgorCQkJCQkiYmFkIG9wdGlvbnNbMl09JWRcbiIsCisJCQkJCWRldi0+bWlub3IsIERSSVZFUl9OQU1FLAorCQkJCQlpdC0+b3B0aW9uc1syXSk7CisJCQl9CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9wY2kyMjRfaW50ZXJuYWw7CisJCQlkZXZwcml2LT5od3JhbmdlID0gaHdyYW5nZV9wY2kyMjRfaW50ZXJuYWw7CisJCX0KKwl9CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlpZiAoaXJxKSB7CisJCXJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIHBjaTIyNF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJRFJJVkVSX05BTUUsIGRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBlcnJvciEgIgorCQkJCSJ1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBkZXYtPm1pbm9yLCBpcnEpOworCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIHsKKwkJCWRldi0+aXJxID0gaXJxOworCQl9CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6ICVzICIsIGRldi0+bWlub3IsIGRldi0+Ym9hcmRfbmFtZSk7CisJcHJpbnRrKCIocGNpICVzKSAiLCBwY2lfbmFtZShwY2lfZGV2KSk7CisJaWYgKGlycSkgeworCQlwcmludGsoIihpcnEgJXUlcykgIiwgaXJxLCAoZGV2LT5pcnEgPyAiIiA6ICIgVU5BVkFJTEFCTEUiKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIobm8gaXJxKSAiKTsKKwl9CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAxOworfQorCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IHBjaTIyNF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiAlczogZGV0YWNoXG4iLCBkZXYtPm1pbm9yLCBEUklWRVJfTkFNRSk7CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKwlpZiAoZGV2LT5zdWJkZXZpY2VzKSB7CisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCQkvKiBBTyBzdWJkZXZpY2UgKi8KKwkJaWYgKHMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKKwkJCWtmcmVlKHMtPnJhbmdlX3RhYmxlX2xpc3QpOworCQl9CisJfQorCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXZwcml2LT5hb19yZWFkYmFjaykgeworCQkJa2ZyZWUoZGV2cHJpdi0+YW9fcmVhZGJhY2spOworCQl9CisJCWlmIChkZXZwcml2LT5hb19zY2FuX3ZhbHMpIHsKKwkJCWtmcmVlKGRldnByaXYtPmFvX3NjYW5fdmFscyk7CisJCX0KKwkJaWYgKGRldnByaXYtPmFvX3NjYW5fb3JkZXIpIHsKKwkJCWtmcmVlKGRldnByaXYtPmFvX3NjYW5fb3JkZXIpOworCQl9CisJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCX0KKwlpZiAoZGV2LT5ib2FyZF9uYW1lKSB7CisJCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiAlcyByZW1vdmVkXG4iLAorCQkJZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMzAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19wY2kyMzAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzllNTczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIzMC5jCkBAIC0wLDAgKzEsMjk3NyBAQAorIC8qCisgICAgY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjMwLmMKKyAgICBEcml2ZXIgZm9yIEFtcGxpY29uIFBDSTIzMCBhbmQgUENJMjYwIE11bHRpZnVuY3Rpb24gSS9PIGJvYXJkcy4KKworICAgIENvcHlyaWdodCAoQykgMjAwMSBBbGxhbiBXaWxsY294IDxhbGxhbndpbGxjb3hAb3plbWFpbC5jb20uYXU+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgICovCisvKgorRHJpdmVyOiBhbXBsY19wY2kyMzAKK0Rlc2NyaXB0aW9uOiBBbXBsaWNvbiBQQ0kyMzAsIFBDSTI2MCBNdWx0aWZ1bmN0aW9uIEkvTyBib2FyZHMKK0F1dGhvcjogQWxsYW4gV2lsbGNveCA8YWxsYW53aWxsY294QG96ZW1haWwuY29tLmF1PiwKKyAgU3RldmUgRCBTaGFycGxlcyA8c3RldmUuc2hhcnBsZXNAbm90dGluZ2hhbS5hYy51az4sCisgIElhbiBBYmJvdHQgPGFiYm90dGlAbWV2LmNvLnVrPgorVXBkYXRlZDogV2VkLCAyMiBPY3QgMjAwOCAxMjozNDo0OSArMDEwMAorRGV2aWNlczogW0FtcGxpY29uXSBQQ0kyMzAgKHBjaTIzMCBvciBhbXBsY19wY2kyMzApLAorICBQQ0kyMzArIChwY2kyMzArIG9yIGFtcGxjX3BjaTIzMCksCisgIFBDSTI2MCAocGNpMjYwIG9yIGFtcGxjX3BjaTIzMCksIFBDSTI2MCsgKHBjaTI2MCsgb3IgYW1wbGNfcGNpMjMwKQorU3RhdHVzOiB3b3JrcworCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkuCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpLgorICAgICAgICAgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJIGRldmljZQorICAgICAgICAgIHdpbGwgYmUgdXNlZC4KKworQ29uZmlndXJpbmcgYSAiYW1wbGNfcGNpMjMwIiB3aWxsIG1hdGNoIGFueSBzdXBwb3J0ZWQgY2FyZCBhbmQgaXQgd2lsbAorY2hvb3NlIHRoZSBiZXN0IG1hdGNoLCBwaWNraW5nIHRoZSAiKyIgbW9kZWxzIGlmIHBvc3NpYmxlLiAgQ29uZmlndXJpbmcKK2EgInBjaTIzMCIgd2lsbCBtYXRjaCBhIFBDSTIzMCBvciBQQ0kyMzArIGNhcmQgYW5kIGl0IHdpbGwgYmUgdHJlYXRlZCBhcworYSBQQ0kyMzAuICBDb25maWd1cmluZyBhICJwY2kyNjAiIHdpbGwgbWF0Y2ggYSBQQ0kyNjAgb3IgUENJMjYwKyBjYXJkCithbmQgaXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEgUENJMjYwLiAgQ29uZmlndXJpbmcgYSAicGNpMjMwKyIgd2lsbCBtYXRjaAorYSBQQ0kyMzArIGNhcmQuICBDb25maWd1cmluZyBhICJwY2kyNjArIiB3aWxsIG1hdGNoIGEgUENJMjYwKyBjYXJkLgorCitTdWJkZXZpY2VzOgorCisgICAgICAgICAgICAgICAgUENJMjMwKCspICAgIFBDSTI2MCgrKQorICAgICAgICAgICAgICAgIC0tLS0tLS0tLSAgICAtLS0tLS0tLS0KKyAgU3ViZGV2aWNlcyAgICAgICAzICAgICAgICAgICAgMQorICAgICAgICAwICAgICAgICAgIEFJICAgICAgICAgICBBSQorCTEgICAgICAgICAgQU8KKwkyICAgICAgICAgIERJTworCitBSSBTdWJkZXZpY2U6CisKKyAgVGhlIEFJIHN1YmRldmljZSBoYXMgMTYgc2luZ2xlLWVuZGVkIGNoYW5uZWxzIG9yIDggZGlmZmVyZW50aWFsCisgIGNoYW5uZWxzLgorCisgIFRoZSBQQ0kyMzAgYW5kIFBDSTI2MCBjYXJkcyBoYXZlIDEyLWJpdCByZXNvbHV0aW9uLiAgVGhlIFBDSTIzMCsgYW5kCisgIFBDSTI2MCsgY2FyZHMgaGF2ZSAxNi1iaXQgcmVzb2x1dGlvbi4KKworICBGb3IgZGlmZmVyZW50aWFsIG1vZGUsIHVzZSBpbnB1dHMgMk4gYW5kIDJOKzEgZm9yIGNoYW5uZWwgTiAoZS5nLiB1c2UKKyAgaW5wdXRzIDE0IGFuZCAxNSBmb3IgY2hhbm5lbCA3KS4gIElmIHRoZSBjYXJkIGlzIHBoeXNpY2FsbHkgYSBQQ0kyMzAKKyAgb3IgUENJMjYwIHRoZW4gaXQgYWN0dWFsbHkgdXNlcyBhICJwc2V1ZG8tZGlmZmVyZW50aWFsIiBtb2RlIHdoZXJlIHRoZQorICBpbnB1dHMgYXJlIHNhbXBsZWQgYSBmZXcgbWljcm9zZWNvbmRzIGFwYXJ0LiAgVGhlIFBDSTIzMCsgYW5kIFBDSTI2MCsKKyAgdXNlIHRydWUgZGlmZmVyZW50aWFsIHNhbXBsaW5nLiAgQW5vdGhlciBkaWZmZXJlbmNlIGlzIHRoYXQgaWYgdGhlCisgIGNhcmQgaXMgcGh5c2ljYWxseSBhIFBDSTIzMCBvciBQQ0kyNjAsIHRoZSBpbnZlcnRpbmcgaW5wdXQgaXMgMk4sCisgIHdoZXJlYXMgZm9yIGEgUENJMjMwKyBvciBQQ0kyNjArIHRoZSBpbnZlcnRpbmcgaW5wdXQgaXMgMk4rMS4gIFNvIGlmIGEKKyAgUENJMjMwIGlzIHBoeXNpY2FsbHkgcmVwbGFjZWQgYnkgYSBQQ0kyMzArIChvciBhIFBDSTI2MCB3aXRoIGEKKyAgUENJMjYwKykgYW5kIGRpZmZlcmVudGlhbCBtb2RlIGlzIHVzZWQsIHRoZSBkaWZmZXJlbnRpYWwgaW5wdXRzIG5lZWQKKyAgdG8gYmUgcGh5c2ljYWxseSBzd2FwcGVkIG9uIHRoZSBjb25uZWN0b3IuCisKKyAgVGhlIGZvbGxvd2luZyBpbnB1dCByYW5nZXMgYXJlIHN1cHBvcnRlZDoKKworICAgIDAgPT4gWy0xMCwgKzEwXSBWCisgICAgMSA9PiBbLTUsICs1XSBWCisgICAgMiA9PiBbLTIuNSwgKzIuNV0gVgorICAgIDMgPT4gWy0xLjI1LCArMS4yNV0gVgorICAgIDQgPT4gWzAsIDEwXSBWCisgICAgNSA9PiBbMCwgNV0gVgorICAgIDYgPT4gWzAsIDIuNV0gVgorCitBSSBDb21tYW5kczoKKworICArPT09PT09PT09Kz09PT09PT09PT09PT09Kz09PT09PT09PT09Kz09PT09PT09PT09PSs9PT09PT09PT09KworICB8c3RhcnRfc3JjfHNjYW5fYmVnaW5fc3JjfGNvbnZlcnRfc3JjfHNjYW5fZW5kX3NyY3wgc3RvcF9zcmMgfAorICArPT09PT09PT09Kz09PT09PT09PT09PT09Kz09PT09PT09PT09Kz09PT09PT09PT09PSs9PT09PT09PT09KworICB8VFJJR19OT1cgfCBUUklHX0ZPTExPVyAgfFRSSUdfVElNRVIgfCBUUklHX0NPVU5UIHxUUklHX05PTkUgfAorICB8VFJJR19JTlQgfCAgICAgICAgICAgICAgfFRSSUdfRVhUKDMpfCAgICAgICAgICAgIHxUUklHX0NPVU5UfAorICB8ICAgICAgICAgfCAgICAgICAgICAgICAgfFRSSUdfSU5UICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfAorICB8ICAgICAgICAgfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfCAgICAgICAgICAgIHwgICAgICAgICAgfAorICB8ICAgICAgICAgfCBUUklHX1RJTUVSKDEpfFRSSUdfVElNRVIgfCAgICAgICAgICAgIHwgICAgICAgICAgfAorICB8ICAgICAgICAgfCBUUklHX0VYVCgyKSAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfAorICB8ICAgICAgICAgfCBUUklHX0lOVCAgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfAorICArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworCisgIE5vdGUgMTogSWYgQUkgY29tbWFuZCBhbmQgQU8gY29tbWFuZCBhcmUgdXNlZCBzaW11bHRhbmVvdXNseSwgb25seQorICAgICAgICAgIG9uZSBtYXkgaGF2ZSBzY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSLgorCisgIE5vdGUgMjogRm9yIFBDSTIzMCBhbmQgUENJMjMwKywgc2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQgdXNlcworICAgICAgICAgIERJTyBjaGFubmVsIDE2IChwaW4gNDkpIHdoaWNoIHdpbGwgbmVlZCB0byBiZSBjb25maWd1cmVkIGFzCisgICAgICAgICAgYSBkaWdpdGFsIGlucHV0LiAgRm9yIFBDSTI2MCssIHRoZSBFWFRUUklHL0VYVENPTlZDTEsgaW5wdXQKKyAgICAgICAgICAocGluIDE3KSBpcyB1c2VkIGluc3RlYWQuICBGb3IgUENJMjMwLCBzY2FuX2JlZ2luX3NyYyA9PQorICAgICAgICAgIFRSSUdfRVhUIGlzIG5vdCBzdXBwb3J0ZWQuICBUaGUgdHJpZ2dlciBpcyBhIHJpc2luZyBlZGdlCisgICAgICAgICAgb24gdGhlIGlucHV0LgorCisgIE5vdGUgMzogRm9yIGNvbnZlcnRfc3JjID09IFRSSUdfRVhULCB0aGUgRVhUVFJJRy9FWFRDT05WQ0xLIGlucHV0CisgICAgICAgICAgKHBpbiAyNSBvbiBQQ0kyMzAoKyksIHBpbiAxNyBvbiBQQ0kyNjAoKykpIGlzIHVzZWQuICBUaGUKKyAgICAgICAgICBjb252ZXJ0X2FyZyB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICBjb252ZXJ0X2FyZyA9PSAoQ1JfRURHRSB8IDApID0+IHJpc2luZyBlZGdlCisgICAgICAgICAgICBjb252ZXJ0X2FyZyA9PSAoQ1JfRURHRSB8IENSX0lOVkVSVCB8IDApID0+IGZhbGxpbmcgZWRnZQorICAgICAgICAgICAgY29udmVydF9hcmcgPT0gMCA9PiBmYWxsaW5nIGVkZ2UgKGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KQorICAgICAgICAgICAgY29udmVydF9hcmcgPT0gMSA9PiByaXNpbmcgZWRnZSAoYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCisKKyAgQWxsIGVudHJpZXMgaW4gdGhlIGNoYW5uZWwgbGlzdCBtdXN0IHVzZSB0aGUgc2FtZSBhbmFsb2d1ZSByZWZlcmVuY2UuCisgIElmIHRoZSBhbmFsb2d1ZSByZWZlcmVuY2UgaXMgbm90IEFSRUZfRElGRiAobm90IGRpZmZlcmVudGlhbCkgZWFjaAorICBwYWlyIG9mIGNoYW5uZWwgbnVtYmVycyAoMCBhbmQgMSwgMiBhbmQgMywgZXRjLikgbXVzdCB1c2UgdGhlIHNhbWUKKyAgaW5wdXQgcmFuZ2UuICBUaGUgaW5wdXQgcmFuZ2VzIHVzZWQgaW4gdGhlIHNlcXVlbmNlIG11c3QgYmUgYWxsCisgIGJpcG9sYXIgKHJhbmdlcyAwIHRvIDMpIG9yIGFsbCB1bmlwb2xhciAocmFuZ2VzIDQgdG8gNikuICBUaGUgY2hhbm5lbAorICBzZXF1ZW5jZSBtdXN0IGNvbnNpc3Qgb2YgMSBvciBtb3JlIGlkZW50aWNhbCBzdWJzZXF1ZW5jZXMuICBXaXRoaW4gdGhlCisgIHN1YnNlcXVlbmNlLCBjaGFubmVscyBtdXN0IGJlIGluIGFzY2VuZGluZyBvcmRlciB3aXRoIG5vIHJlcGVhdGVkCisgIGNoYW5uZWxzLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2VzIGFyZSB2YWxpZDogMCAxIDIgMworICAoc2luZ2xlIHZhbGlkIHN1YnNlcXVlbmNlKSwgMCAyIDMgNSAwIDIgMyA1IChyZXBlYXRlZCB2YWxpZAorICBzdWJzZXF1ZW5jZSksIDEgMSAxIDEgKHJlcGVhdGVkIHZhbGlkIHN1YnNlcXVlbmNlKS4gIFRoZSBmb2xsb3dpbmcKKyAgc2VxdWVuY2VzIGFyZSBpbnZhbGlkOiAwIDMgMiAxIChpbnZhbGlkIHN1YnNlcXVlbmNlKSwgMCAyIDMgNSAwIDIgMworICAoaW5jb21wbGV0ZWx5IHJlcGVhdGVkIHN1YnNlcXVlbmNlKS4gIFNvbWUgdmVyc2lvbnMgb2YgdGhlIFBDSTIzMCsgYW5kCisgIFBDSTI2MCsgaGF2ZSBhIGJ1ZyB0aGF0IHJlcXVpcmVzIGEgc3Vic2VxdWVuY2UgbG9uZ2VyIHRoYW4gb25lIGVudHJ5CisgIGxvbmcgdG8gaW5jbHVkZSBjaGFubmVsIDAuCisKK0FPIFN1YmRldmljZToKKworICBUaGUgQU8gc3ViZGV2aWNlIGhhcyAyIGNoYW5uZWxzIHdpdGggMTItYml0IHJlc29sdXRpb24uCisKKyAgVGhlIGZvbGxvd2luZyBvdXRwdXQgcmFuZ2VzIGFyZSBzdXBwb3J0ZWQ6CisKKyAgICAwID0+IFswLCAxMF0gVgorICAgIDEgPT4gWy0xMCwgKzEwXSBWCisKK0FPIENvbW1hbmRzOgorCisgICs9PT09PT09PT0rPT09PT09PT09PT09PT0rPT09PT09PT09PT0rPT09PT09PT09PT09Kz09PT09PT09PT0rCisgIHxzdGFydF9zcmN8c2Nhbl9iZWdpbl9zcmN8Y29udmVydF9zcmN8c2Nhbl9lbmRfc3JjfCBzdG9wX3NyYyB8CisgICs9PT09PT09PT0rPT09PT09PT09PT09PT0rPT09PT09PT09PT0rPT09PT09PT09PT09Kz09PT09PT09PT0rCisgIHxUUklHX0lOVCB8IFRSSUdfVElNRVIoMSl8IFRSSUdfTk9XICB8IFRSSUdfQ09VTlQgfFRSSUdfTk9ORSB8CisgIHwgICAgICAgICB8IFRSSUdfRVhUKDIpICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfFRSSUdfQ09VTlR8CisgIHwgICAgICAgICB8IFRSSUdfSU5UICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICB8CisgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisKKyAgTm90ZSAxOiBJZiBBSSBjb21tYW5kIGFuZCBBTyBjb21tYW5kIGFyZSB1c2VkIHNpbXVsdGFuZW91c2x5LCBvbmx5CisgICAgICAgICAgb25lIG1heSBoYXZlIHNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIuCisKKyAgTm90ZSAyOiBzY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCBpcyBvbmx5IHN1cHBvcnRlZCBpZiB0aGUgY2FyZCBpcworICAgICAgICAgIGNvbmZpZ3VyZWQgYXMgYSBQQ0kyMzArIGFuZCBpcyBvbmx5IHN1cHBvcnRlZCBvbiBsYXRlcgorICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBjYXJkLiAgQXMgYSBjYXJkIGNvbmZpZ3VyZWQgYXMgYSBQQ0kyMzArIGlzCisgICAgICAgICAgbm90IGd1YXJhbnRlZWQgdG8gc3VwcG9ydCBleHRlcm5hbCB0cmlnZ2VyaW5nLCBwbGVhc2UgY29uc2lkZXIKKyAgICAgICAgICB0aGlzIHN1cHBvcnQgdG8gYmUgYSBib251cy4gIEl0IHVzZXMgdGhlIEVYVFRSSUcvIEVYVENPTlZDTEsKKyAgICAgICAgICBpbnB1dCAoUENJMjMwKyBwaW4gMjUpLiAgVHJpZ2dlcmluZyB3aWxsIGJlIG9uIHRoZSByaXNpbmcgZWRnZQorICAgICAgICAgIHVubGVzcyB0aGUgQ1JfSU5WRVJUIGZsYWcgaXMgc2V0IGluIHNjYW5fYmVnaW5fYXJnLgorCisgIFRoZSBjaGFubmVscyBpbiB0aGUgY2hhbm5lbCBzZXF1ZW5jZSBtdXN0IGJlIGluIGFzY2VuZGluZyBvcmRlciB3aXRoCisgIG5vIHJlcGVhdHMuICBBbGwgZW50cmllcyBpbiB0aGUgY2hhbm5lbCBzZXF1ZW5jZSBtdXN0IHVzZSB0aGUgc2FtZQorICBvdXRwdXQgcmFuZ2UuCisKK0RJTyBTdWJkZXZpY2U6CisKKyAgVGhlIERJTyBzdWJkZXZpY2UgaXMgYSA4MjU1IGNoaXAgcHJvdmlkaW5nIDI0IERJTyBjaGFubmVscy4gIFRoZSBESU8KKyAgY2hhbm5lbHMgYXJlIGNvbmZpZ3VyYWJsZSBhcyBpbnB1dHMgb3Igb3V0cHV0cyBpbiBmb3VyIGdyb3VwczoKKworICAgIFBvcnQgQSAgLSBjaGFubmVscyAgMCB0byAgNworICAgIFBvcnQgQiAgLSBjaGFubmVscyAgOCB0byAxNQorICAgIFBvcnQgQ0wgLSBjaGFubmVscyAxNiB0byAxOQorICAgIFBvcnQgQ0ggLSBjaGFubmVscyAyMCB0byAyMworCisgIE9ubHkgbW9kZSAwIG9mIHRoZSA4MjU1IGNoaXAgaXMgc3VwcG9ydGVkLgorCisgIEJpdCAwIG9mIHBvcnQgQyAoRElPIGNoYW5uZWwgMTYpIGlzIGFsc28gdXNlZCBhcyBhbiBleHRlcm5hbCBzY2FuCisgIHRyaWdnZXIgaW5wdXQgZm9yIEFJIGNvbW1hbmRzIG9uIFBDSTIzMCBhbmQgUENJMjMwKywgc28gd291bGQgbmVlZCB0bworICBiZSBjb25maWd1cmVkIGFzIGFuIGlucHV0IHRvIHVzZSBpdCBmb3IgdGhhdCBwdXJwb3NlLgorKi8KKy8qCitFeHRyYSB0cmlnZ2VyZWQgc2NhbiBmdW5jdGlvbmFsaXR5LCBpbnRlcnJ1cHQgYnVnLWZpeCBhZGRlZCBieSBTdGV2ZSBTaGFycGxlcy4KK1N1cHBvcnQgZm9yIFBDSTIzMCsvMjYwKywgbW9yZSB0cmlnZ2VyZWQgc2NhbiBmdW5jdGlvbmFsaXR5LCBhbmQgd29ya2Fyb3VuZHMKK2ZvciAob3IgZGV0ZWN0aW9uIG9mKSB2YXJpb3VzIGhhcmR3YXJlIHByb2JsZW1zIGFkZGVkIGJ5IElhbiBBYmJvdHQuCisqLworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiODI1NS5oIgorCisvKiBQQ0kyMzAgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTVBMSUNPTiAweDE0ZGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQ0kyMzAgMHgwMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENJMjYwIDB4MDAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVkFMSUQgMHhmZmZmCisKKyNkZWZpbmUgUENJMjMwX0lPMV9TSVpFIDMyCS8qIFNpemUgb2YgSS9PIHNwYWNlIDEgKi8KKyNkZWZpbmUgUENJMjMwX0lPMl9TSVpFIDE2CS8qIFNpemUgb2YgSS9PIHNwYWNlIDIgKi8KKworLyogUENJMjMwIGkvbyBzcGFjZSAxIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgUENJMjMwX1BQSV9YX0JBU0UJMHgwMAkvKiBVc2VyIFBQSSAoODJDNTUpIGJhc2UgKi8KKyNkZWZpbmUgUENJMjMwX1BQSV9YX0EJCTB4MDAJLyogVXNlciBQUEkgKDgyQzU1KSBwb3J0IEEgKi8KKyNkZWZpbmUgUENJMjMwX1BQSV9YX0IJCTB4MDEJLyogVXNlciBQUEkgKDgyQzU1KSBwb3J0IEIgKi8KKyNkZWZpbmUgUENJMjMwX1BQSV9YX0MJCTB4MDIJLyogVXNlciBQUEkgKDgyQzU1KSBwb3J0IEMgKi8KKyNkZWZpbmUgUENJMjMwX1BQSV9YX0NNRAkweDAzCS8qIFVzZXIgUFBJICg4MkM1NSkgY29udHJvbCB3b3JkICovCisjZGVmaW5lIFBDSTIzMF9aMl9DVF9CQVNFCTB4MTQJLyogODJDNTQgY291bnRlci90aW1lciBiYXNlICovCisjZGVmaW5lIFBDSTIzMF9aMl9DVDAJCTB4MTQJLyogODJDNTQgY291bnRlci90aW1lciAwICovCisjZGVmaW5lIFBDSTIzMF9aMl9DVDEJCTB4MTUJLyogODJDNTQgY291bnRlci90aW1lciAxICovCisjZGVmaW5lIFBDSTIzMF9aMl9DVDIJCTB4MTYJLyogODJDNTQgY291bnRlci90aW1lciAyICovCisjZGVmaW5lIFBDSTIzMF9aMl9DVEMJCTB4MTcJLyogODJDNTQgY291bnRlci90aW1lciBjb250cm9sIHdvcmQgKi8KKyNkZWZpbmUgUENJMjMwX1pDTEtfU0NFCQkweDFBCS8qIEdyb3VwIFogQ2xvY2sgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBQQ0kyMzBfWkdBVF9TQ0UJCTB4MUQJLyogR3JvdXAgWiBHYXRlIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgUENJMjMwX0lOVF9TQ0UJCTB4MUUJLyogSW50ZXJydXB0IHNvdXJjZSBtYXNrICh3KSAqLworI2RlZmluZSBQQ0kyMzBfSU5UX1NUQVQJCTB4MUUJLyogSW50ZXJydXB0IHN0YXR1cyAocikgKi8KKworLyogUENJMjMwIGkvbyBzcGFjZSAyIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgUENJMjMwX0RBQ0NPTgkJMHgwMAkvKiBEQUMgY29udHJvbCAqLworI2RlZmluZSBQQ0kyMzBfREFDT1VUMQkJMHgwMgkvKiBEQUMgY2hhbm5lbCAwICh3KSAqLworI2RlZmluZSBQQ0kyMzBfREFDT1VUMgkJMHgwNAkvKiBEQUMgY2hhbm5lbCAxICh3KSAobm90IEZJRk8gbW9kZSkgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ0RBVEEJCTB4MDgJLyogQURDIGRhdGEgKHIpICovCisjZGVmaW5lIFBDSTIzMF9BRENTV1RSSUcJMHgwOAkvKiBBREMgc29mdHdhcmUgdHJpZ2dlciAodykgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ0NPTgkJMHgwQQkvKiBBREMgY29udHJvbCAqLworI2RlZmluZSBQQ0kyMzBfQURDRU4JCTB4MEMJLyogQURDIGNoYW5uZWwgZW5hYmxlIGJpdHMgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ0cJCTB4MEUJLyogQURDIGdhaW4gY29udHJvbCBiaXRzICovCisvKiBQQ0kyMzArIGkvbyBzcGFjZSAyIGFkZGl0aW9uYWwgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBQQ0kyMzBQX0FEQ1RSSUcJCTB4MTAJLyogQURDIHN0YXJ0IGFjcXVpc2l0aW9uIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwUF9BRENUSAkJMHgxMgkvKiBBREMgYW5hbG9nIHRyaWdnZXIgdGhyZXNob2xkICovCisjZGVmaW5lIFBDSTIzMFBfQURDRkZUSAkJMHgxNAkvKiBBREMgRklGTyBpbnRlcnJ1cHQgdGhyZXNob2xkICovCisjZGVmaW5lIFBDSTIzMFBfQURDRkZMRVYJMHgxNgkvKiBBREMgRklGTyBsZXZlbCAocikgKi8KKyNkZWZpbmUgUENJMjMwUF9BRENQVFNDCQkweDE4CS8qIEFEQyBwcmUtdHJpZ2dlciBzYW1wbGUgY291bnQgKHIpICovCisjZGVmaW5lIFBDSTIzMFBfQURDSFlTVAkJMHgxQQkvKiBBREMgYW5hbG9nIHRyaWdnZXIgaHlzdGVyZXN5cyAqLworI2RlZmluZSBQQ0kyMzBQX0VYVEZVTkMJCTB4MUMJLyogRXh0ZW5kZWQgZnVuY3Rpb25zICovCisjZGVmaW5lIFBDSTIzMFBfSFdWRVIJCTB4MUUJLyogSGFyZHdhcmUgdmVyc2lvbiAocikgKi8KKy8qIFBDSTIzMCsgaGFyZHdhcmUgdmVyc2lvbiAyIG9ud2FyZHMuICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ0RBVEEJMHgwMgkvKiBEQUMgZGF0YSAoRklGTyBtb2RlKSAodykgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDU1dUUklHCTB4MDIJLyogREFDIHNvZnQgdHJpZ2dlciAoRklGTyBtb2RlKSAocikgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDRU4JCTB4MDYJLyogREFDIGNoYW5uZWwgZW5hYmxlIChGSUZPIG1vZGUpICovCisKKy8qIENvbnZlcnRvciByZWxhdGVkIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgUENJMjMwX0RBQ19TRVRUTEUgNQkvKiBBbmFsb2d1ZSBvdXRwdXQgc2V0dGxpbmcgdGltZSBpbiDCtXMgKi8KKwkJCQkvKiAoREFDIGl0c2VsZiBpcyAxwrVzIG5vbWluYWxseSkuICovCisjZGVmaW5lIFBDSTIzMF9BRENfU0VUVExFIDEJLyogQW5hbG9ndWUgaW5wdXQgc2V0dGxpbmcgdGltZSBpbiDCtXMgKi8KKwkJCQkvKiAoQURDIGl0c2VsZiBpcyAxLjbCtXMgbm9taW5hbGx5IGJ1dCB3ZSBwb2xsCisJCQkJICogYW55d2F5KS4gKi8KKyNkZWZpbmUgUENJMjMwX01VWF9TRVRUTEUgMTAJLyogQURDIE1VWCBzZXR0bGluZyB0aW1lIGluIMK1UyAqLworCQkJCS8qIC0gMTDCtXMgZm9yIHNlLCAyMMK1cyBkZS4gKi8KKworLyogREFDQ09OIHJlYWQtd3JpdGUgdmFsdWVzLiAqLworI2RlZmluZSBQQ0kyMzBfREFDX09SX1VOSQkJKDA8PDApCS8qIE91dHB1dCByYW5nZSB1bmlwb2xhciAqLworI2RlZmluZSBQQ0kyMzBfREFDX09SX0JJUAkJKDE8PDApCS8qIE91dHB1dCByYW5nZSBiaXBvbGFyICovCisjZGVmaW5lIFBDSTIzMF9EQUNfT1JfTUFTSwkJKDE8PDApCisvKiBUaGUgZm9sbG93aW5nIGFwcGxpZXMgb25seSBpZiBEQUMgRklGTyBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gdGhlIEVYVEZVTkMKKyAqIHJlZ2lzdGVyIChhbmQgb25seSBmb3IgUENJMjMwKyBoYXJkd2FyZSB2ZXJzaW9uIDIgb253YXJkcykuICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPX0VOCQkoMTw8OCkJLyogRklGTyBlbmFibGUgKi8KKy8qIFRoZSBmb2xsb3dpbmcgYXBwbHkgb25seSBpZiB0aGUgREFDIEZJRk8gaXMgZW5hYmxlZCAoYW5kIG9ubHkgZm9yIFBDSTIzMCsKKyAqIGhhcmR3YXJlIHZlcnNpb24gMiBvbndhcmRzKS4gKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX1RSSUdfTk9ORQkJKDA8PDIpCS8qIE5vIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX1RSSUdfU1cJCSgxPDwyKQkvKiBTb2Z0d2FyZSB0cmlnZ2VyIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX1RSSUdfRVhUUAkJKDI8PDIpCS8qIEVYVFRSSUcgK3ZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfVFJJR19FWFROCQkoMzw8MikJLyogRVhUVFJJRyAtdmUgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19UUklHX1oyQ1QwCQkoNDw8MikJLyogQ1QwLU9VVCArdmUgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19UUklHX1oyQ1QxCQkoNTw8MikJLyogQ1QxLU9VVCArdmUgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19UUklHX1oyQ1QyCQkoNjw8MikJLyogQ1QyLU9VVCArdmUgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19UUklHX01BU0sJCSg3PDwyKQorI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT19XUkFQCQkoMTw8NykJLyogRklGTyB3cmFwYXJvdW5kIG1vZGUgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX0lOVF9GSUZPX0VNUFRZCSgwPDw5KQkvKiBGSUZPIGludGVycnVwdCBlbXB0eSAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfSU5UX0ZJRk9fTkVNUFRZCSgxPDw5KQorI2RlZmluZSBQQ0kyMzBQMl9EQUNfSU5UX0ZJRk9fTkhBTEYJKDI8PDkpCS8qIEZJRk8gaW50ciBub3QgaGFsZiBmdWxsICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19JTlRfRklGT19IQUxGCSgzPDw5KQorI2RlZmluZSBQQ0kyMzBQMl9EQUNfSU5UX0ZJRk9fTkZVTEwJKDQ8PDkpCS8qIEZJRk8gaW50ZXJydXB0IG5vdCBmdWxsICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19JTlRfRklGT19GVUxMCSg1PDw5KQorI2RlZmluZSBQQ0kyMzBQMl9EQUNfSU5UX0ZJRk9fTUFTSwkoNzw8OSkKKworLyogREFDQ09OIHJlYWQtb25seSB2YWx1ZXMuICovCisjZGVmaW5lIFBDSTIzMF9EQUNfQlVTWQkJCSgxPDwxKQkvKiBEQUMgYnVzeS4gKi8KKy8qIFRoZSBmb2xsb3dpbmcgYXBwbHkgb25seSBpZiB0aGUgREFDIEZJRk8gaXMgZW5hYmxlZCAoYW5kIG9ubHkgZm9yIFBDSTIzMCsKKyAqIGhhcmR3YXJlIHZlcnNpb24gMiBvbndhcmRzKS4gKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9fVU5ERVJSVU5fTEFUQ0hFRAkoMTw8NSkJLyogVW5kZXJydW4gZXJyb3IgKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9fRU1QVFkJCSgxPDwxMykJLyogRklGTyBlbXB0eSAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT19GVUxMCQkoMTw8MTQpCS8qIEZJRk8gZnVsbCAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT19IQUxGCQkoMTw8MTUpCS8qIEZJRk8gaGFsZiBmdWxsICovCisKKy8qIERBQ0NPTiB3cml0ZS1vbmx5LCB0cmFuc2llbnQgdmFsdWVzLiAqLworLyogVGhlIGZvbGxvd2luZyBhcHBseSBvbmx5IGlmIHRoZSBEQUMgRklGTyBpcyBlbmFibGVkIChhbmQgb25seSBmb3IgUENJMjMwKworICogaGFyZHdhcmUgdmVyc2lvbiAyIG9ud2FyZHMpLiAqLworI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT19VTkRFUlJVTl9DTEVBUgkoMTw8NSkJLyogQ2xlYXIgdW5kZXJydW4gKi8KKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9fUkVTRVQJCSgxPDwxMikJLyogRklGTyByZXNldCAqLworCisvKiBQQ0kyMzArIGhhcmR3YXJlIHZlcnNpb24gMiBEQUMgRklGTyBsZXZlbHMuICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPTEVWRUxfSEFMRgk1MTIKKyNkZWZpbmUgUENJMjMwUDJfREFDX0ZJRk9MRVZFTF9GVUxMCTEwMjQKKy8qIEZyZWUgc3BhY2UgaW4gREFDIEZJRk8uICovCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPUk9PTV9FTVBUWQkJUENJMjMwUDJfREFDX0ZJRk9MRVZFTF9GVUxMCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPUk9PTV9PTkVUT0hBTEYJCVwKKwkoUENJMjMwUDJfREFDX0ZJRk9MRVZFTF9GVUxMIC0gUENJMjMwUDJfREFDX0ZJRk9MRVZFTF9IQUxGKQorI2RlZmluZSBQQ0kyMzBQMl9EQUNfRklGT1JPT01fSEFMRlRPRlVMTAkxCisjZGVmaW5lIFBDSTIzMFAyX0RBQ19GSUZPUk9PTV9GVUxMCQkwCisKKy8qIEFEQ0NPTiByZWFkL3dyaXRlIHZhbHVlcy4gKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19UUklHX05PTkUJCSgwPDwwKQkvKiBObyB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMF9BRENfVFJJR19TVwkJKDE8PDApCS8qIFNvZnR3YXJlIHRyaWdnZXIgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBfQURDX1RSSUdfRVhUUAkJKDI8PDApCS8qIEVYVFRSSUcgK3ZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBfQURDX1RSSUdfRVhUTgkJKDM8PDApCS8qIEVYVFRSSUcgLXZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBfQURDX1RSSUdfWjJDVDAJCSg0PDwwKQkvKiBDVDAtT1VUICt2ZSBlZGdlIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19UUklHX1oyQ1QxCQkoNTw8MCkJLyogQ1QxLU9VVCArdmUgZWRnZSB0cmlnZ2VyICovCisjZGVmaW5lIFBDSTIzMF9BRENfVFJJR19aMkNUMgkJKDY8PDApCS8qIENUMi1PVVQgK3ZlIGVkZ2UgdHJpZ2dlciAqLworI2RlZmluZSBQQ0kyMzBfQURDX1RSSUdfTUFTSwkJKDc8PDApCisjZGVmaW5lIFBDSTIzMF9BRENfSVJfVU5JCQkoMDw8MykJLyogSW5wdXQgcmFuZ2UgdW5pcG9sYXIgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19JUl9CSVAJCSgxPDwzKQkvKiBJbnB1dCByYW5nZSBiaXBvbGFyICovCisjZGVmaW5lIFBDSTIzMF9BRENfSVJfTUFTSwkJKDE8PDMpCisjZGVmaW5lIFBDSTIzMF9BRENfSU1fU0UJCSgwPDw0KQkvKiBJbnB1dCBtb2RlIHNpbmdsZSBlbmRlZCAqLworI2RlZmluZSBQQ0kyMzBfQURDX0lNX0RJRgkJKDE8PDQpCS8qIElucHV0IG1vZGUgZGlmZmVyZW50aWFsICovCisjZGVmaW5lIFBDSTIzMF9BRENfSU1fTUFTSwkJKDE8PDQpCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT19FTgkJKDE8PDgpCS8qIEZJRk8gZW5hYmxlICovCisjZGVmaW5lIFBDSTIzMF9BRENfSU5UX0ZJRk9fRU1QVFkJKDA8PDkpCisjZGVmaW5lIFBDSTIzMF9BRENfSU5UX0ZJRk9fTkVNUFRZCSgxPDw5KQkvKiBGSUZPIGludGVycnVwdCBub3QgZW1wdHkgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19JTlRfRklGT19OSEFMRgkoMjw8OSkKKyNkZWZpbmUgUENJMjMwX0FEQ19JTlRfRklGT19IQUxGCSgzPDw5KQkvKiBGSUZPIGludGVycnVwdCBoYWxmIGZ1bGwgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19JTlRfRklGT19ORlVMTAkoNDw8OSkKKyNkZWZpbmUgUENJMjMwX0FEQ19JTlRfRklGT19GVUxMCSg1PDw5KQkvKiBGSUZPIGludGVycnVwdCBmdWxsICovCisjZGVmaW5lIFBDSTIzMFBfQURDX0lOVF9GSUZPX1RIUkVTSAkoNzw8OSkJLyogRklGTyBpbnRlcnJ1cHQgdGhyZXNob2xkICovCisjZGVmaW5lIFBDSTIzMF9BRENfSU5UX0ZJRk9fTUFTSwkoNzw8OSkKKworLyogQURDQ09OIHdyaXRlLW9ubHksIHRyYW5zaWVudCB2YWx1ZXMuICovCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT19SRVNFVAkJKDE8PDEyKQkvKiBGSUZPIHJlc2V0ICovCisjZGVmaW5lIFBDSTIzMF9BRENfR0xPQl9SRVNFVAkJKDE8PDEzKQkvKiBHbG9iYWwgcmVzZXQgKi8KKworLyogQURDQ09OIHJlYWQtb25seSB2YWx1ZXMuICovCisjZGVmaW5lIFBDSTIzMF9BRENfQlVTWQkJCSgxPDwxNSkJLyogQURDIGJ1c3kgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19GSUZPX0VNUFRZCQkoMTw8MTIpCS8qIEZJRk8gZW1wdHkgKi8KKyNkZWZpbmUgUENJMjMwX0FEQ19GSUZPX0ZVTEwJCSgxPDwxMykJLyogRklGTyBmdWxsICovCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT19IQUxGCQkoMTw8MTQpCS8qIEZJRk8gaGFsZiBmdWxsICovCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT19GVUxMX0xBVENIRUQJKDE8PDUpCS8qIEluZGljYXRlcyBvdmVycnVuIG9jY3VycmVkICovCisKKy8qIFBDSTIzMCBBREMgRklGTyBsZXZlbHMuICovCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMCTIwNDkJLyogVmFsdWUgZm9yIEZJRk8gaGFsZiBmdWxsICovCisjZGVmaW5lIFBDSTIzMF9BRENfRklGT0xFVkVMX0ZVTEwJNDA5NgkvKiBGSUZPIHNpemUgKi8KKworLyogVmFsdWUgdG8gd3JpdGUgdG8gQURDU1dUUklHIHRvIHRyaWdnZXIgQURDIGNvbnZlcnNpb24gaW4gc29mdHdhcmUgdHJpZ2dlcgorICogbW9kZS4gIENhbiBiZSBhbnl0aGluZy4gICovCisjZGVmaW5lIFBDSTIzMF9BRENfQ09OVgkJCTB4ZmZmZgorCisvKiBQQ0kyMzArIEVYVEZVTkMgdmFsdWVzLiAqLworI2RlZmluZSBQQ0kyMzBQX0VYVEZVTkNfR0FUX0VYVFRSSUcJKDE8PDApCisJCQkvKiBSb3V0ZSBFWFRUUklHIHBpbiB0byBleHRlcm5hbCBnYXRlIGlucHV0cy4gKi8KKy8qIFBDSTIzMCsgaGFyZHdhcmUgdmVyc2lvbiAyIHZhbHVlcy4gKi8KKyNkZWZpbmUgUENJMjMwUDJfRVhURlVOQ19EQUNGSUZPCSgxPDwxKQorCQkJLyogQWxsb3cgREFDIEZJRk8gdG8gYmUgZW5hYmxlZC4gKi8KKworLyoKKyAqIENvdW50ZXIvdGltZXIgY2xvY2sgaW5wdXQgY29uZmlndXJhdGlvbiBzb3VyY2VzLgorICovCisjZGVmaW5lIENMS19DTEsJCTAJLyogcmVzZXJ2ZWQgKGNoYW5uZWwtc3BlY2lmaWMgY2xvY2spICovCisjZGVmaW5lIENMS18xME1IWgkxCS8qIGludGVybmFsIDEwIE1IeiBjbG9jayAqLworI2RlZmluZSBDTEtfMU1IWgkyCS8qIGludGVybmFsIDEgTUh6IGNsb2NrICovCisjZGVmaW5lIENMS18xMDBLSFoJMwkvKiBpbnRlcm5hbCAxMDAga0h6IGNsb2NrICovCisjZGVmaW5lIENMS18xMEtIWgk0CS8qIGludGVybmFsIDEwIGtIeiBjbG9jayAqLworI2RlZmluZSBDTEtfMUtIWgk1CS8qIGludGVybmFsIDEga0h6IGNsb2NrICovCisjZGVmaW5lIENMS19PVVROTTEJNgkvKiBvdXRwdXQgb2YgY2hhbm5lbC0xIG1vZHVsbyB0b3RhbCAqLworI2RlZmluZSBDTEtfRVhUCQk3CS8qIGV4dGVybmFsIGNsb2NrICovCisvKiBNYWNybyB0byBjb25zdHJ1Y3QgY2xvY2sgaW5wdXQgY29uZmlndXJhdGlvbiByZWdpc3RlciB2YWx1ZS4gKi8KKyNkZWZpbmUgQ0xLX0NPTkZJRyhjaGFuLCBzcmMpCSgoKChjaGFuKSAmIDMpIDw8IDMpIHwgKChzcmMpICYgNykpCisvKiBUaW1lYmFzZXMgaW4gbnMuICovCisjZGVmaW5lIFRJTUVCQVNFXzEwTUhaCQkxMDAKKyNkZWZpbmUgVElNRUJBU0VfMU1IWgkJMTAwMAorI2RlZmluZSBUSU1FQkFTRV8xMDBLSFoJCTEwMDAwCisjZGVmaW5lIFRJTUVCQVNFXzEwS0haCQkxMDAwMDAKKyNkZWZpbmUgVElNRUJBU0VfMUtIWgkJMTAwMDAwMAorCisvKgorICogQ291bnRlci90aW1lciBnYXRlIGlucHV0IGNvbmZpZ3VyYXRpb24gc291cmNlcy4KKyAqLworI2RlZmluZSBHQVRfVkNDCQkwCS8qIFZDQyAoaS5lLiBlbmFibGVkKSAqLworI2RlZmluZSBHQVRfR05ECQkxCS8qIEdORCAoaS5lLiBkaXNhYmxlZCkgKi8KKyNkZWZpbmUgR0FUX0VYVAkJMgkvKiBleHRlcm5hbCBnYXRlIGlucHV0IChQUENuIG9uIFBDSTIzMCkgKi8KKyNkZWZpbmUgR0FUX05PVVROTTIJMwkvKiBpbnZlcnRlZCBvdXRwdXQgb2YgY2hhbm5lbC0yIG1vZHVsbyB0b3RhbCAqLworLyogTWFjcm8gdG8gY29uc3RydWN0IGdhdGUgaW5wdXQgY29uZmlndXJhdGlvbiByZWdpc3RlciB2YWx1ZS4gKi8KKyNkZWZpbmUgR0FUX0NPTkZJRyhjaGFuLCBzcmMpCSgoKChjaGFuKSAmIDMpIDw8IDMpIHwgKChzcmMpICYgNykpCisKKy8qCisgKiBTdW1tYXJ5IG9mIENMS19PVVROTTEgYW5kIEdBVF9OT1VUTk0yIGNvbm5lY3Rpb25zIGZvciBQQ0kyMzAgYW5kIFBDSTI2MDoKKyAqCisgKiAgICAgICAgICAgICAgQ2hhbm5lbCdzICAgICAgIENoYW5uZWwncworICogICAgICAgICAgICAgIGNsb2NrIGlucHV0ICAgICBnYXRlIGlucHV0CisgKiBDaGFubmVsICAgICAgQ0xLX09VVE5NMSAgICAgIEdBVF9OT1VUTk0yCisgKiAtLS0tLS0tICAgICAgLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tCisgKiBaMi1DVDAgICAgICAgWjItQ1QyLU9VVCAgICAgIC9aMi1DVDEtT1VUCisgKiBaMi1DVDEgICAgICAgWjItQ1QwLU9VVCAgICAgIC9aMi1DVDItT1VUCisgKiBaMi1DVDIgICAgICAgWjItQ1QxLU9VVCAgICAgIC9aMi1DVDAtT1VUCisgKi8KKworLyogSW50ZXJydXB0IGVuYWJsZXMvc3RhdHVzIHJlZ2lzdGVyIHZhbHVlcy4gKi8KKyNkZWZpbmUgUENJMjMwX0lOVF9ESVNBQkxFCQkwCisjZGVmaW5lIFBDSTIzMF9JTlRfUFBJX0MwCQkoMTw8MCkKKyNkZWZpbmUgUENJMjMwX0lOVF9QUElfQzMJCSgxPDwxKQorI2RlZmluZSBQQ0kyMzBfSU5UX0FEQwkJCSgxPDwyKQorI2RlZmluZSBQQ0kyMzBfSU5UX1pDTEtfQ1QxCQkoMTw8NSkKKy8qIEZvciBQQ0kyMzArIGhhcmR3YXJlIHZlcnNpb24gMiB3aGVuIERBQyBGSUZPIGVuYWJsZWQuICovCisjZGVmaW5lIFBDSTIzMFAyX0lOVF9EQUMJCSgxPDw0KQorCisjZGVmaW5lIFBDSTIzMF9URVNUX0JJVCh2YWwsIG4pCSgodmFsPj5uKSYxKQorCQkJLyogQXNzdW1lcyBiaXRzIG51bWJlcmVkIHdpdGggemVybyBvZmZzZXQsIGllLiAwLTE1ICovCisKKy8qIChQb3RlbnRpYWxseSkgc2hhcmVkIHJlc291cmNlcyBhbmQgdGhlaXIgb3duZXJzICovCitlbnVtIHsKKwlSRVNfWjJDVDAsCQkvKiBaMi1DVDAgKi8KKwlSRVNfWjJDVDEsCQkvKiBaMi1DVDEgKi8KKwlSRVNfWjJDVDIsCQkvKiBaMi1DVDIgKi8KKwlOVU1fUkVTT1VSQ0VTCQkvKiBOdW1iZXIgb2YgKHBvdGVudGlhbGx5KSBzaGFyZWQgcmVzb3VyY2VzLiAqLworfTsKKworZW51bSB7CisJT1dORVJfTk9ORSwJCS8qIE5vdCBvd25lZCAqLworCU9XTkVSX0FJQ01ELAkJLyogT3duZWQgYnkgQUkgY29tbWFuZCAqLworCU9XTkVSX0FPQ01ECQkvKiBPd25lZCBieSBBTyBjb21tYW5kICovCit9OworCisvKgorICogSGFuZHkgbWFjcm9zLgorICovCisKKy8qIENvbWJpbmUgb2xkIGFuZCBuZXcgYml0cy4gKi8KKyNkZWZpbmUgQ09NQklORShvbGQsIG5ldywgbWFzaykJKCgob2xkKSAmIH4obWFzaykpIHwgKChuZXcpICYgKG1hc2spKSkKKworLyogQSBnZW5lcmljIG51bGwgZnVuY3Rpb24gcG9pbnRlciB2YWx1ZS4gICovCisjZGVmaW5lIE5VTExGVU5DCTAKKworLyogQ3VycmVudCBDUFUuICBYWFggc2hvdWxkIHRoaXMgYmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk/ICovCisjZGVmaW5lIFRISVNDUFUJCXNtcF9wcm9jZXNzb3JfaWQoKQorCisvKiBTdGF0ZSBmbGFncyBmb3IgYXRvbWljIGJpdCBvcGVyYXRpb25zICovCisjZGVmaW5lIEFJX0NNRF9TVEFSVEVECTAKKyNkZWZpbmUgQU9fQ01EX1NUQVJURUQJMQorCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciB0aGUgdHdvIGJvYXJkcyBzdXBwb3J0ZWQuCisgKi8KKworc3RydWN0IHBjaTIzMF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBpZDsKKwlpbnQgYWlfY2hhbnM7CisJaW50IGFpX2JpdHM7CisJaW50IGFvX2NoYW5zOworCWludCBhb19iaXRzOworCWludCBoYXZlX2RpbzsKKwl1bnNpZ25lZCBpbnQgbWluX2h3dmVyOwkvKiBNaW5pbXVtIGhhcmR3YXJlIHZlcnNpb24gc3VwcG9ydGVkLiAqLworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpMjMwX2JvYXJkIHBjaTIzMF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjaTIzMCsiLAorCSAgICAgIGlkOglQQ0lfREVWSUNFX0lEX1BDSTIzMCwKKwkgICAgICBhaV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhb19jaGFuczoyLAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIGhhdmVfZGlvOjEsCisJICAgICAgbWluX2h3dmVyOjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2kyNjArIiwKKwkgICAgICBpZDoJUENJX0RFVklDRV9JRF9QQ0kyNjAsCisJICAgICAgYWlfY2hhbnM6MTYsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYW9fY2hhbnM6MCwKKwkgICAgICBhb19iaXRzOgkwLAorCSAgICAgIGhhdmVfZGlvOjAsCisJICAgICAgbWluX2h3dmVyOjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2kyMzAiLAorCSAgICAgIGlkOglQQ0lfREVWSUNFX0lEX1BDSTIzMCwKKwkgICAgICBhaV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhb19jaGFuczoyLAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIGhhdmVfZGlvOjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2kyNjAiLAorCSAgICAgIGlkOglQQ0lfREVWSUNFX0lEX1BDSTI2MCwKKwkgICAgICBhaV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhb19jaGFuczowLAorCSAgICAgIGFvX2JpdHM6CTAsCisJICAgICAgaGF2ZV9kaW86MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImFtcGxjX3BjaTIzMCIsCS8qIFdpbGRjYXJkIG1hdGNoZXMgYW55IGFib3ZlICovCisJICAgICAgaWQ6CVBDSV9ERVZJQ0VfSURfSU5WQUxJRCwKKwkJfSwKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2kyMzBfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9BTVBMSUNPTiwgUENJX0RFVklDRV9JRF9QQ0kyMzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJCTAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0FNUExJQ09OLCBQQ0lfREVWSUNFX0lEX1BDSTI2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpMjMwX3BjaV90YWJsZSk7CisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIG5fcGNpMjMwX2JvYXJkcyAoc2l6ZW9mKHBjaTIzMF9ib2FyZHMpL3NpemVvZihwY2kyMzBfYm9hcmRzWzBdKSkKKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHBjaTIzMF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgorICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCitzdHJ1Y3QgcGNpMjMwX3ByaXZhdGUgeworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCXNwaW5sb2NrX3QgaXNyX3NwaW5sb2NrOwkvKiBJbnRlcnJ1cHQgc3BpbiBsb2NrICovCisJc3BpbmxvY2tfdCByZXNfc3BpbmxvY2s7CS8qIFNoYXJlZCByZXNvdXJjZXMgc3BpbiBsb2NrICovCisJc3BpbmxvY2tfdCBhaV9zdG9wX3NwaW5sb2NrOwkvKiBTcGluIGxvY2sgZm9yIHN0b3BwaW5nIEFJIGNvbW1hbmQgKi8KKwlzcGlubG9ja190IGFvX3N0b3Bfc3BpbmxvY2s7CS8qIFNwaW4gbG9jayBmb3Igc3RvcHBpbmcgQU8gY29tbWFuZCAqLworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CS8qIFN0YXRlIGZsYWdzICovCisJdW5zaWduZWQgbG9uZyBpb2Jhc2UxOwkvKiBQQ0kyMzAncyBJL08gc3BhY2UgMSAqLworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsJLyogVXNlZCBmb3IgQU8gcmVhZGJhY2sgKi8KKwl1bnNpZ25lZCBpbnQgYWlfc2Nhbl9jb3VudDsJLyogTnVtYmVyIG9mIGFuYWxvZ3VlIGlucHV0IHNjYW5zCisJCQkJCSAqIHJlbWFpbmluZy4gICovCisJdW5zaWduZWQgaW50IGFpX3NjYW5fcG9zOwkvKiBDdXJyZW50IHBvc2l0aW9uIHdpdGhpbiBhbmFsb2d1ZQorCQkJCQkgKiBpbnB1dCBzY2FuICovCisJdW5zaWduZWQgaW50IGFvX3NjYW5fY291bnQ7CS8qIE51bWJlciBvZiBhbmFsb2d1ZSBvdXRwdXQgc2NhbnMKKwkJCQkJICogcmVtYWluaW5nLiAgKi8KKwlpbnQgaW50cl9jcHVpZDsJCS8qIElEIG9mIENQVSBydW5uaW5nIGludGVycnVwdCByb3V0aW5lLiAqLworCXVuc2lnbmVkIHNob3J0IGh3dmVyOwkvKiBIYXJkd2FyZSB2ZXJzaW9uIChmb3IgJysnIG1vZGVscykuICovCisJdW5zaWduZWQgc2hvcnQgYWRjY29uOwkvKiBBRENDT04gcmVnaXN0ZXIgdmFsdWUuICovCisJdW5zaWduZWQgc2hvcnQgZGFjY29uOwkvKiBEQUNDT04gcmVnaXN0ZXIgdmFsdWUuICovCisJdW5zaWduZWQgc2hvcnQgYWRjZmlmb3RocmVzaDsJLyogQURDIEZJRk8gcHJvZ3JhbW1hYmxlIGludGVycnVwdAorCQkJCQkgKiBsZXZlbCB0aHJlc2hvbGQgKFBDSTIzMCsvMjYwKykuICovCisJdW5zaWduZWQgc2hvcnQgYWRjZzsJLyogQURDRyByZWdpc3RlciB2YWx1ZS4gKi8KKwl1bnNpZ25lZCBjaGFyIGludF9lbjsJLyogSW50ZXJydXB0IGVuYWJsZXMgYml0cy4gKi8KKwl1bnNpZ25lZCBjaGFyIGFpX2NvbnRpbnVvdXM7CS8qIEZsYWcgc2V0IHdoZW4gY21kLT5zdG9wX3NyYyA9PQorCQkJCQkgKiBUUklHX05PTkUgLSB1c2VyIGNob29zZXMgdG8gc3RvcAorCQkJCQkgKiBjb250aW51b3VzIGNvbnZlcnNpb24gYnkKKwkJCQkJICogY2FuY2VsYXRpb24uICovCisJdW5zaWduZWQgY2hhciBhb19jb250aW51b3VzOwkvKiBGbGFnIHNldCB3aGVuIGNtZC0+c3RvcF9zcmMgPT0KKwkJCQkJICogVFJJR19OT05FIC0gdXNlciBjaG9vc2VzIHRvIHN0b3AKKwkJCQkJICogY29udGludW91cyBjb252ZXJzaW9uIGJ5CisJCQkJCSAqIGNhbmNlbGF0aW9uLiAqLworCXVuc2lnbmVkIGNoYXIgYWlfYmlwb2xhcjsJLyogU2V0IGlmIGJpcG9sYXIgaW5wdXQgcmFuZ2Ugc28gd2UKKwkJCQkJICoga25vdyB0byBtYW5nbGUgaXQuICovCisJdW5zaWduZWQgY2hhciBhb19iaXBvbGFyOwkvKiBTZXQgaWYgYmlwb2xhciBvdXRwdXQgcmFuZ2Ugc28gd2UKKwkJCQkJICoga25vdyB0byBtYW5nbGUgaXQuICovCisJdW5zaWduZWQgY2hhciBpZXI7CS8qIENvcHkgb2YgaW50ZXJydXB0IGVuYWJsZXMvc3RhdHVzIHJlZ2lzdGVyLiAqLworCXVuc2lnbmVkIGNoYXIgaW50cl9ydW5uaW5nOwkvKiBGbGFnIHNldCBpbiBpbnRlcnJ1cHQgcm91dGluZS4gKi8KKwl1bnNpZ25lZCBjaGFyIHJlc19vd25lcltOVU1fUkVTT1VSQ0VTXTsJLyogU2hhcmVkIHJlc291cmNlIG93bmVycy4gKi8KK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY2kyMzBfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyogUENJMjMwIGNsb2NrIHNvdXJjZSBwZXJpb2RzIGluIG5zICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBjaTIzMF90aW1lYmFzZVs4XSA9IHsKKwlbQ0xLXzEwTUhaXSA9IFRJTUVCQVNFXzEwTUhaLAorCVtDTEtfMU1IWl0gPSBUSU1FQkFTRV8xTUhaLAorCVtDTEtfMTAwS0haXSA9IFRJTUVCQVNFXzEwMEtIWiwKKwlbQ0xLXzEwS0haXSA9IFRJTUVCQVNFXzEwS0haLAorCVtDTEtfMUtIWl0gPSBUSU1FQkFTRV8xS0haLAorfTsKKworLyogUENJMjMwIGFuYWxvZ3VlIGlucHV0IHJhbmdlIHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcGNpMjMwX2FpX3JhbmdlID0geyA3LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSkKKwl9Cit9OworCisvKiBQQ0kyMzAgYW5hbG9ndWUgZ2FpbiBiaXRzIGZvciBlYWNoIGlucHV0IHJhbmdlLiAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGNpMjMwX2FpX2dhaW5bN10gPSB7IDAsIDEsIDIsIDMsIDEsIDIsIDMgfTsKKworLyogUENJMjMwIGFkY2NvbiBiaXBvbGFyIGZsYWcgZm9yIGVhY2ggYW5hbG9ndWUgaW5wdXQgcmFuZ2UuICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwY2kyMzBfYWlfYmlwb2xhcls3XSA9IHsgMSwgMSwgMSwgMSwgMCwgMCwgMCB9OworCisvKiBQQ0kyMzAgYW5hbG9ndWUgb3V0cHV0IHJhbmdlIHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcGNpMjMwX2FvX3JhbmdlID0geyAyLCB7CisJCQlVTklfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDEwKQorCX0KK307CisKKy8qIFBDSTIzMCBkYWNjb24gYmlwb2xhciBmbGFnIGZvciBlYWNoIGFuYWxvZ3VlIG91dHB1dCByYW5nZS4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBjaTIzMF9hb19iaXBvbGFyWzJdID0geyAwLCAxIH07CisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IHBjaTIzMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2kyMzBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYW1wbGNfcGNpMjMwID0geworICAgICAgZHJpdmVyX25hbWU6ImFtcGxjX3BjaTIzMCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNpMjMwX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2kyMzBfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomcGNpMjMwX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihwY2kyMzBfYm9hcmRzWzBdKSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YocGNpMjMwX2JvYXJkcykgLyBzaXplb2YocGNpMjMwX2JvYXJkc1swXSksCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9hbXBsY19wY2kyMzAsIHBjaTIzMF9wY2lfdGFibGUpOworCitzdGF0aWMgaW50IHBjaTIzMF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBwY2kyMzBfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNpMjMwX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgdm9pZCBwY2kyMzBfY3Rfc2V0dXBfbnNfbW9kZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGN0LAorCXVuc2lnbmVkIGludCBtb2RlLCB1aW50NjRfdCBucywgdW5zaWduZWQgaW50IHJvdW5kKTsKK3N0YXRpYyB2b2lkIHBjaTIzMF9uc190b19zaW5nbGVfdGltZXIodW5zaWduZWQgaW50ICpucywgdW5zaWduZWQgaW50IHJvdW5kKTsKK3N0YXRpYyB2b2lkIHBjaTIzMF9jYW5jZWxfY3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjdCk7CitzdGF0aWMgaXJxcmV0dXJuX3QgcGNpMjMwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyBpbnQgcGNpMjMwX2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IHBjaTIzMF9hb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IHBjaTIzMF9hb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgdm9pZCBwY2kyMzBfYW9fc3RvcChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIHBjaTIzMF9oYW5kbGVfYW9fbm9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBwY2kyMzBfaGFuZGxlX2FvX2ZpZm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IHBjaTIzMF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBwY2kyMzBfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBwY2kyMzBfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgcGNpMjMwX2FpX3N0b3Aoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgdm9pZCBwY2kyMzBfaGFuZGxlX2FpKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgc2hvcnQgcGNpMjMwX2FpX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJLyogUmVhZCBzYW1wbGUuICovCisJc2hvcnQgZGF0YSA9IChzaG9ydCkgaW53KGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0RBVEEpOworCisJLyogUENJMjMwIGlzIDEyIGJpdCAtIHN0b3JlZCBpbiB1cHBlciBiaXRzIG9mIDE2IGJpdCByZWdpc3RlciAobG93ZXIKKwkgKiBmb3VyIGJpdHMgcmVzZXJ2ZWQgZm9yIGV4cGFuc2lvbikuICovCisJLyogUENJMjMwKyBpcyAxNiBiaXQgQUkuICovCisJZGF0YSA9IGRhdGEgPj4gKDE2IC0gdGhpc2JvYXJkLT5haV9iaXRzKTsKKworCS8qIElmIGEgYmlwb2xhciByYW5nZSB3YXMgc3BlY2lmaWVkLCBtYW5nbGUgaXQgKHR3b3MKKwkgKiBjb21wbGVtZW50LT5zdHJhaWdodCBiaW5hcnkpLiAqLworCWlmIChkZXZwcml2LT5haV9iaXBvbGFyKSB7CisJCWRhdGEgXj0gMSA8PCAodGhpc2JvYXJkLT5haV9iaXRzIC0gMSk7CisJfQorCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHBjaTIzMF9hb19tYW5nbGVfZGF0dW0oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc2hvcnQgZGF0dW0pCit7CisJLyogSWYgYSBiaXBvbGFyIHJhbmdlIHdhcyBzcGVjaWZpZWQsIG1hbmdsZSBpdCAoc3RyYWlnaHQgYmluYXJ5LT50d29zCisJICogY29tcGxlbWVudCkuICovCisJaWYgKGRldnByaXYtPmFvX2JpcG9sYXIpIHsKKwkJZGF0dW0gXj0gMSA8PCAodGhpc2JvYXJkLT5hb19iaXRzIC0gMSk7CisJfQorCisJLyogUENJMjMwIGlzIDEyIGJpdCAtIHN0b3JlZCBpbiB1cHBlciBiaXRzIG9mIDE2IGJpdCByZWdpc3RlciAobG93ZXIKKwkgKiBmb3VyIGJpdHMgcmVzZXJ2ZWQgZm9yIGV4cGFuc2lvbikuICovCisJLyogUENJMjMwKyBpcyBhbHNvIDEyIGJpdCBBTy4gKi8KKwlkYXR1bSA8PD0gKDE2IC0gdGhpc2JvYXJkLT5hb19iaXRzKTsKKwlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KWRhdHVtOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpMjMwX2FvX3dyaXRlX25vZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc2hvcnQgZGF0dW0sCisJdW5zaWduZWQgaW50IGNoYW4pCit7CisJLyogU3RvcmUgdW5tYW5nbGVkIGRhdHVtIHRvIGJlIHJlYWQgYmFjayBsYXRlci4gKi8KKwlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdHVtOworCisJLyogV3JpdGUgbWFuZ2xlZCBkYXR1bSB0byBhcHByb3ByaWF0ZSBEQUNPVVQgcmVnaXN0ZXIuICovCisJb3V0dyhwY2kyMzBfYW9fbWFuZ2xlX2RhdHVtKGRldiwgZGF0dW0pLCBkZXYtPmlvYmFzZSArICgoKGNoYW4pID09IDApCisJCQk/IFBDSTIzMF9EQUNPVVQxIDogUENJMjMwX0RBQ09VVDIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBjaTIzMF9hb193cml0ZV9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzaG9ydCBkYXR1bSwKKwl1bnNpZ25lZCBpbnQgY2hhbikKK3sKKwkvKiBTdG9yZSB1bm1hbmdsZWQgZGF0dW0gdG8gYmUgcmVhZCBiYWNrIGxhdGVyLiAqLworCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0dW07CisKKwkvKiBXcml0ZSBtYW5nbGVkIGRhdHVtIHRvIGFwcHJvcHJpYXRlIERBQ0RBVEEgcmVnaXN0ZXIuICovCisJb3V0dyhwY2kyMzBfYW9fbWFuZ2xlX2RhdHVtKGRldiwgZGF0dW0pLAorCQlkZXYtPmlvYmFzZSArIFBDSTIzMFAyX0RBQ0RBVEEpOworfQorCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgcGNpMjMwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTEsIGlvYmFzZTI7CisJLyogUENJMjMwJ3MgSS9PIHNwYWNlcyAxIGFuZCAyIHJlc3BlY3RpdmVseS4gKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlpbnQgaSA9IDAsIGlycV9oZGwsIHJjOworCisJcHJpbnRrKCJjb21lZGklZDogYW1wbGNfcGNpMjMwOiBhdHRhY2ggJXMgJWQsJWRcbiIsIGRldi0+bWlub3IsCisJCXRoaXNib2FyZC0+bmFtZSwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKworCS8qIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhIHVzaW5nIGFsbG9jX3ByaXZhdGUoKS4KKwkgKiBNYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oIC0gbWVtc2V0cyBzdHJ1Y3QgZmllbGRzIHRvIDAuICovCisJaWYgKChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2kyMzBfcHJpdmF0ZSkpKSA8IDApIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5pc3Jfc3BpbmxvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5yZXNfc3BpbmxvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5haV9zdG9wX3NwaW5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+YW9fc3RvcF9zcGlubG9jayk7CisJLyogRmluZCBjYXJkICovCisJZm9yIChwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaV9kZXYgIT0gTlVMTDsKKwkJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9kZXYpKSB7CisJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJLyogTWF0Y2ggYWdhaW5zdCBidXMvc2xvdCBvcHRpb25zLiAqLworCQkJaWYgKGl0LT5vcHRpb25zWzBdICE9IHBjaV9kZXYtPmJ1cy0+bnVtYmVyIHx8CisJCQkJaXQtPm9wdGlvbnNbMV0gIT0gUENJX1NMT1QocGNpX2Rldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlmIChwY2lfZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9BTVBMSUNPTikKKwkJCWNvbnRpbnVlOworCQlpZiAodGhpc2JvYXJkLT5pZCA9PSBQQ0lfREVWSUNFX0lEX0lOVkFMSUQpIHsKKwkJCS8qIFRoZSBuYW1lIHdhcyBzcGVjaWZpZWQgYXMgImFtcGxjX3BjaTIzMCIgd2hpY2ggaXMKKwkJCSAqIHVzZWQgdG8gbWF0Y2ggYW55IHN1cHBvcnRlZCBkZXZpY2UuICBSZXBsYWNlIHRoZQorCQkJICogY3VycmVudCBkZXYtPmJvYXJkX3B0ciB3aXRoIG9uZSB0aGF0IG1hdGNoZXMgdGhlCisJCQkgKiBQQ0kgZGV2aWNlIElELiAqLworCQkJZm9yIChpID0gMDsgaSA8IG5fcGNpMjMwX2JvYXJkczsgaSsrKSB7CisJCQkJaWYgKHBjaV9kZXYtPmRldmljZSA9PSBwY2kyMzBfYm9hcmRzW2ldLmlkKSB7CisJCQkJCWlmIChwY2kyMzBfYm9hcmRzW2ldLm1pbl9od3ZlciA+IDApIHsKKwkJCQkJCS8qIENoZWNrIGZvciBhICcrJyBtb2RlbC4KKwkJCQkJCSAqIEZpcnN0IGNoZWNrIGxlbmd0aCBvZgorCQkJCQkJICogcmVnaXN0ZXJzLiAqLworCQkJCQkJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwgMykKKwkJCQkJCQk8IDMyKSB7CisJCQkJCQkJLyogTm90IGEgJysnIG1vZGVsLiAqLworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQkJLyogVE9ETzogdGVtcG9yYXJpbHkgZW5hYmxlIHRoZQorCQkJCQkJICogUENJIGRldmljZSBhbmQgcmVhZCB0aGUKKwkJCQkJCSAqIGhhcmR3YXJlIHZlcnNpb24gcmVnaXN0ZXIuCisJCQkJCQkgKiBGb3Igbm93IGFzc3VtZSBpdCdzIG9rYXkuICovCisJCQkJCX0KKwkJCQkJLyogQ2hhbmdlIGJvYXJkX3B0ciB0byBtYXRjaGVkIGJvYXJkICovCisJCQkJCWRldi0+Ym9hcmRfcHRyID0gJnBjaTIzMF9ib2FyZHNbaV07CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChpIDwgbl9wY2kyMzBfYm9hcmRzKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJLyogVGhlIG5hbWUgd2FzIHNwZWNpZmllZCBhcyBhIHNwZWNpZmljIGRldmljZSBuYW1lLgorCQkJICogVGhlIGN1cnJlbnQgZGV2LT5ib2FyZF9wdHIgaXMgY29ycmVjdC4gIENoZWNrCisJCQkgKiB3aGV0aGVyIGl0IG1hdGNoZXMgdGhlIFBDSSBkZXZpY2UgSUQuICovCisJCQlpZiAodGhpc2JvYXJkLT5pZCA9PSBwY2lfZGV2LT5kZXZpY2UpIHsKKwkJCQkvKiBDaGVjayBtaW5pbXVtIGhhcmR3YXJlIHZlcnNpb24uICovCisJCQkJaWYgKHRoaXNib2FyZC0+bWluX2h3dmVyID4gMCkgeworCQkJCQkvKiBMb29raW5nIGZvciBhICcrJyBtb2RlbC4gIEZpcnN0CisJCQkJCSAqIGNoZWNrIGxlbmd0aCBvZiByZWdpc3RlcnMuICovCisJCQkJCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBjaV9kZXYsIDMpIDwgMzIpIHsKKwkJCQkJCS8qIE5vdCBhICcrJyBtb2RlbC4gKi8KKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCS8qIFRPRE86IHRlbXBvcmFyaWx5IGVuYWJsZSB0aGUgUENJCisJCQkJCSAqIGRldmljZSBhbmQgcmVhZCB0aGUgaGFyZHdhcmUgdmVyc2lvbgorCQkJCQkgKiByZWdpc3Rlci4gIEZvciBub3csIGFzc3VtZSBpdCdzCisJCQkJCSAqIG9rYXkuICovCisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlpZiAoIXBjaV9kZXYpIHsKKwkJcHJpbnRrKCJjb21lZGklZDogTm8gJXMgY2FyZCBmb3VuZFxuIiwgZGV2LT5taW5vciwKKwkJCXRoaXNib2FyZC0+bmFtZSk7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXZwcml2LT5wY2lfZGV2ID0gcGNpX2RldjsKKworCS8qCisJICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuCisJICovCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJLyogRW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlc2VydmUgSS9PIHNwYWNlcy4gKi8KKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpX2RldiwgImFtcGxjX3BjaTIzMCIpIDwgMCkgeworCQlwcmludGsoImNvbWVkaSVkOiBmYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgIgorCQkJImFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIsIGRldi0+bWlub3IpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBSZWFkIGJhc2UgYWRkcmVzc2VzIG9mIHRoZSBQQ0kyMzAncyB0d28gSS9PIHJlZ2lvbnMgZnJvbSBQQ0kKKwkgKiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiAqLworCWlvYmFzZTEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwgMik7CisJaW9iYXNlMiA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAzKTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzIEkvTyByZWdpb24gMSAweCUwNGx4IEkvTyByZWdpb24gMiAweCUwNGx4XG4iLAorCQlkZXYtPm1pbm9yLCBkZXYtPmJvYXJkX25hbWUsIGlvYmFzZTEsIGlvYmFzZTIpOworCisJZGV2cHJpdi0+aW9iYXNlMSA9IGlvYmFzZTE7CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2UyOworCisJLyogUmVhZCBiaXRzIG9mIERBQ0NPTiByZWdpc3RlciAtIG9ubHkgdGhlIG91dHB1dCByYW5nZS4gKi8KKwlkZXZwcml2LT5kYWNjb24gPSBpbncoZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfREFDQ09OKSAmIFBDSTIzMF9EQUNfT1JfTUFTSzsKKworCS8qIFJlYWQgaGFyZHdhcmUgdmVyc2lvbiByZWdpc3RlciBhbmQgc2V0IGV4dGVuZGVkIGZ1bmN0aW9uIHJlZ2lzdGVyCisJICogaWYgdGhleSBleGlzdC4gKi8KKwlpZiAocGNpX3Jlc291cmNlX2xlbihwY2lfZGV2LCAzKSA+PSAzMikgeworCQl1bnNpZ25lZCBzaG9ydCBleHRmdW5jID0gMDsKKworCQlkZXZwcml2LT5od3ZlciA9IGludyhkZXYtPmlvYmFzZSArIFBDSTIzMFBfSFdWRVIpOworCQlpZiAoZGV2cHJpdi0+aHd2ZXIgPCB0aGlzYm9hcmQtPm1pbl9od3ZlcikgeworCQkJcHJpbnRrKCJjb21lZGklZDogJXMgLSBiYWQgaGFyZHdhcmUgdmVyc2lvbiAiCisJCQkJIi0gZ290ICV1LCBuZWVkICV1XG4iLCBkZXYtPm1pbm9yLAorCQkJCWRldi0+Ym9hcmRfbmFtZSwgZGV2cHJpdi0+aHd2ZXIsCisJCQkJdGhpc2JvYXJkLT5taW5faHd2ZXIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKGRldnByaXYtPmh3dmVyID4gMCkgeworCQkJaWYgKCF0aGlzYm9hcmQtPmhhdmVfZGlvKSB7CisJCQkJLyogTm8gRElPIHBvcnRzLiAgUm91dGUgY291bnRlcnMnIGV4dGVybmFsIGdhdGVzCisJCQkJICogdG8gdGhlIEVYVFRSSUcgc2lnbmFsIChQQ0kyNjArIHBpbiAxNykuCisJCQkJICogKE90aGVyd2lzZSwgdGhleSB3b3VsZCBiZSByb3V0ZWQgdG8gRElPCisJCQkJICogaW5wdXRzIFBDMCwgUEMxIGFuZCBQQzIgd2hpY2ggZG9uJ3QgZXhpc3QKKwkJCQkgKiBvbiBQQ0kyNjBbK10uKSAqLworCQkJCWV4dGZ1bmMgfD0gUENJMjMwUF9FWFRGVU5DX0dBVF9FWFRUUklHOworCQkJfQorCQkJaWYgKCh0aGlzYm9hcmQtPmFvX2NoYW5zID4gMCkKKwkJCQkmJiAoZGV2cHJpdi0+aHd2ZXIgPj0gMikpIHsKKwkJCQkvKiBFbmFibGUgREFDIEZJRk8gZnVuY3Rpb25hbGl0eS4gKi8KKwkJCQlleHRmdW5jIHw9IFBDSTIzMFAyX0VYVEZVTkNfREFDRklGTzsKKwkJCX0KKwkJfQorCQlvdXR3KGV4dGZ1bmMsIGRldi0+aW9iYXNlICsgUENJMjMwUF9FWFRGVU5DKTsKKwkJaWYgKChleHRmdW5jICYgUENJMjMwUDJfRVhURlVOQ19EQUNGSUZPKSAhPSAwKSB7CisJCQkvKiBUZW1wb3JhcmlseSBlbmFibGUgREFDIEZJRk8sIHJlc2V0IGl0IGFuZCBkaXNhYmxlCisJCQkgKiBGSUZPIHdyYXBhcm91bmQuICovCisJCQlvdXR3KGRldnByaXYtPmRhY2NvbiB8IFBDSTIzMFAyX0RBQ19GSUZPX0VOCisJCQkJfCBQQ0kyMzBQMl9EQUNfRklGT19SRVNFVCwKKwkJCQlkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCQkJLyogQ2xlYXIgREFDIEZJRk8gY2hhbm5lbCBlbmFibGUgcmVnaXN0ZXIuICovCisJCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgUENJMjMwUDJfREFDRU4pOworCQkJLyogRGlzYWJsZSBEQUMgRklGTy4gKi8KKwkJCW91dHcoZGV2cHJpdi0+ZGFjY29uLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCQl9CisJfQorCisJLyogRGlzYWJsZSBib2FyZCdzIGludGVycnVwdHMuICovCisJb3V0YigwLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX0lOVF9TQ0UpOworCisJLyogU2V0IEFEQyB0byBhIHJlYXNvbmFibGUgc3RhdGUuICovCisJZGV2cHJpdi0+YWRjZyA9IDA7CisJZGV2cHJpdi0+YWRjY29uID0gUENJMjMwX0FEQ19UUklHX05PTkUgfCBQQ0kyMzBfQURDX0lNX1NFCisJCXwgUENJMjMwX0FEQ19JUl9CSVA7CisJb3V0dygxIDw8IDAsIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0VOKTsKKwlvdXR3KGRldnByaXYtPmFkY2csIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0cpOworCW91dHcoZGV2cHJpdi0+YWRjY29uIHwgUENJMjMwX0FEQ19GSUZPX1JFU0VULAorCQlkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCisJLyogUmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyLiAqLworCWlycV9oZGwgPSBjb21lZGlfcmVxdWVzdF9pcnEoZGV2cHJpdi0+cGNpX2Rldi0+aXJxLCBwY2kyMzBfaW50ZXJydXB0LAorCQlJUlFGX1NIQVJFRCwgImFtcGxjX3BjaTIzMCIsIGRldik7CisJaWYgKGlycV9oZGwgPCAwKSB7CisJCXByaW50aygiY29tZWRpJWQ6IHVuYWJsZSB0byByZWdpc3RlciBpcnEsICIKKwkJCSJjb21tYW5kcyB3aWxsIG5vdCBiZSBhdmFpbGFibGUgJWRcbiIsIGRldi0+bWlub3IsCisJCQlkZXZwcml2LT5wY2lfZGV2LT5pcnEpOworCX0gZWxzZSB7CisJCWRldi0+aXJxID0gZGV2cHJpdi0+cGNpX2Rldi0+aXJxOworCQlwcmludGsoImNvbWVkaSVkOiByZWdpc3RlcmVkIGlycSAldVxuIiwgZGV2LT5taW5vciwKKwkJCWRldnByaXYtPnBjaV9kZXYtPmlycSk7CisJfQorCisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisJICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorCSAqLworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMykgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0RJRkYgfCBTREZfR1JPVU5EOworCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YWlfY2hhbnM7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+YWlfYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnBjaTIzMF9haV9yYW5nZTsKKwlzLT5pbnNuX3JlYWQgPSAmcGNpMjMwX2FpX3JpbnNuOworCXMtPmxlbl9jaGFubGlzdCA9IDI1NjsJLyogYnV0IHRoZXJlIGFyZSByZXN0cmljdGlvbnMuICovCisJLyogT25seSByZWdpc3RlciBjb21tYW5kcyBpZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMgaW5zdGFsbGVkLiAqLworCWlmIChpcnFfaGRsID09IDApIHsKKwkJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisJCXMtPmRvX2NtZCA9ICZwY2kyMzBfYWlfY21kOworCQlzLT5kb19jbWR0ZXN0ID0gJnBjaTIzMF9haV9jbWR0ZXN0OworCQlzLT5jYW5jZWwgPSBwY2kyMzBfYWlfY2FuY2VsOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJaWYgKHRoaXNib2FyZC0+YW9fY2hhbnMgPiAwKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORDsKKwkJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5hb19jaGFuczs7CisJCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFvX2JpdHMpIC0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcGNpMjMwX2FvX3JhbmdlOworCQlzLT5pbnNuX3dyaXRlID0gJnBjaTIzMF9hb193aW5zbjsKKwkJcy0+aW5zbl9yZWFkID0gJnBjaTIzMF9hb19yaW5zbjsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc2JvYXJkLT5hb19jaGFuczsKKwkJLyogT25seSByZWdpc3RlciBjb21tYW5kcyBpZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMKKwkJICogaW5zdGFsbGVkLiAqLworCQlpZiAoaXJxX2hkbCA9PSAwKSB7CisJCQlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9XUklURTsKKwkJCXMtPmRvX2NtZCA9ICZwY2kyMzBfYW9fY21kOworCQkJcy0+ZG9fY21kdGVzdCA9ICZwY2kyMzBfYW9fY21kdGVzdDsKKwkJCXMtPmNhbmNlbCA9IHBjaTIzMF9hb19jYW5jZWw7CisJCX0KKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCWlmICh0aGlzYm9hcmQtPmhhdmVfZGlvKSB7CisJCXJjID0gc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsCisJCQkoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9QUElfWF9CQVNFKSk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlwcmludGsoImNvbWVkaSVkOiBhdHRhY2hlZFxuIiwgZGV2LT5taW5vcik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBwY2kyMzBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGFtcGxjX3BjaTIzMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPnN1YmRldmljZXMgJiYgdGhpc2JvYXJkLT5oYXZlX2RpbykKKwkJLyogQ2xlYW4gdXAgZGlvIHN1YmRldmljZS4gKi8KKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOworCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgcmVzX21hc2ssCisJdW5zaWduZWQgY2hhciBvd25lcikKK3sKKwlpbnQgb2s7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGI7CisJdW5zaWduZWQgaW50IGNsYWltZWQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCW9rID0gMTsKKwljbGFpbWVkID0gMDsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPnJlc19zcGlubG9jaywgaXJxZmxhZ3MpOworCWZvciAoYiA9IDEsIGkgPSAwOyAoaSA8IE5VTV9SRVNPVVJDRVMpCisJCSYmIChyZXNfbWFzayAhPSAwKTsgYiA8PD0gMSwgaSsrKSB7CisJCWlmICgocmVzX21hc2sgJiBiKSAhPSAwKSB7CisJCQlyZXNfbWFzayAmPSB+YjsKKwkJCWlmIChkZXZwcml2LT5yZXNfb3duZXJbaV0gPT0gT1dORVJfTk9ORSkgeworCQkJCWRldnByaXYtPnJlc19vd25lcltpXSA9IG93bmVyOworCQkJCWNsYWltZWQgfD0gYjsKKwkJCX0gZWxzZSBpZiAoZGV2cHJpdi0+cmVzX293bmVyW2ldICE9IG93bmVyKSB7CisJCQkJZm9yIChiID0gMSwgaSA9IDA7IGNsYWltZWQgIT0gMDsgYiA8PD0gMSwgaSsrKSB7CisJCQkJCWlmICgoY2xhaW1lZCAmIGIpICE9IDApIHsKKwkJCQkJCWRldnByaXYtPnJlc19vd25lcltpXQorCQkJCQkJCT0gT1dORVJfTk9ORTsKKwkJCQkJCWNsYWltZWQgJj0gfmI7CisJCQkJCX0KKwkJCQl9CisJCQkJb2sgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5yZXNfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9vbmVfcmVzb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCByZXNvdXJjZSwKKwl1bnNpZ25lZCBjaGFyIG93bmVyKQoreworCXJldHVybiBnZXRfcmVzb3VyY2VzKGRldiwgKDFVIDw8IHJlc291cmNlKSwgb3duZXIpOworfQorCitzdGF0aWMgdm9pZCBwdXRfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgcmVzX21hc2ssCisJdW5zaWduZWQgY2hhciBvd25lcikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgYjsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5yZXNfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwlmb3IgKGIgPSAxLCBpID0gMDsgKGkgPCBOVU1fUkVTT1VSQ0VTKQorCQkmJiAocmVzX21hc2sgIT0gMCk7IGIgPDw9IDEsIGkrKykgeworCQlpZiAoKHJlc19tYXNrICYgYikgIT0gMCkgeworCQkJcmVzX21hc2sgJj0gfmI7CisJCQlpZiAoZGV2cHJpdi0+cmVzX293bmVyW2ldID09IG93bmVyKSB7CisJCQkJZGV2cHJpdi0+cmVzX293bmVyW2ldID0gT1dORVJfTk9ORTsKKwkJCX0KKwkJfQorCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+cmVzX3NwaW5sb2NrLCBpcnFmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfb25lX3Jlc291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UsCisJdW5zaWduZWQgY2hhciBvd25lcikKK3sKKwlwdXRfcmVzb3VyY2VzKGRldiwgKDFVIDw8IHJlc291cmNlKSwgb3duZXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2FsbF9yZXNvdXJjZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYXIgb3duZXIpCit7CisJcHV0X3Jlc291cmNlcyhkZXYsICgxVSA8PCBOVU1fUkVTT1VSQ0VTKSAtIDEsIG93bmVyKTsKK30KKworLyoKKyAqICBDT01FRElfU1VCRF9BSSBpbnN0cnVjdGlvbjsKKyAqLworc3RhdGljIGludCBwY2kyMzBfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBuLCBpOworCXVuc2lnbmVkIGludCBjaGFuLCByYW5nZSwgYXJlZjsKKwl1bnNpZ25lZCBpbnQgZ2FpbnNoaWZ0OworCXVuc2lnbmVkIGludCBzdGF0dXM7CisJdW5zaWduZWQgc2hvcnQgYWRjY29uLCBhZGNlbjsKKworCS8qIFVucGFjayBjaGFubmVsIGFuZCByYW5nZS4gKi8KKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJYXJlZiA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCWlmIChhcmVmID09IEFSRUZfRElGRikgeworCQkvKiBEaWZmZXJlbnRpYWwuICovCisJCWlmIChjaGFuID49IHMtPm5fY2hhbiAvIDIpIHsKKwkJCURQUklOVEsoImNvbWVkaSVkOiBhbXBsY19wY2kyMzA6IGFpX3JpbnNuOiAiCisJCQkJImRpZmZlcmVudGlhbCBjaGFubmVsIG51bWJlciBvdXQgb2YgcmFuZ2UgIgorCQkJCSIwIHRvICV1XG4iLCBkZXYtPm1pbm9yLCAocy0+bl9jaGFuIC8gMikgLSAxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJLyogVXNlIFoyLUNUMiBhcyBhIGNvbnZlcnNpb24gdHJpZ2dlciBpbnN0ZWFkIG9mIHRoZSBidWlsdC1pbgorCSAqIHNvZnR3YXJlIHRyaWdnZXIsIGFzIG90aGVyd2lzZSB0cmlnZ2VyaW5nIG9mIGRpZmZlcmVudGlhbCBjaGFubmVscworCSAqIGRvZXNuJ3Qgd29yayBwcm9wZXJseSBmb3Igc29tZSB2ZXJzaW9ucyBvZiBQQ0kyMzAvMjYwLiAgQWxzbyBzZXQKKwkgKiBGSUZPIG1vZGUgYmVjYXVzZSB0aGUgQURDIGJ1c3kgYml0IG9ubHkgd29ya3MgZm9yIHNvZnR3YXJlIHRyaWdnZXJzLgorCSAqLworCWFkY2NvbiA9IFBDSTIzMF9BRENfVFJJR19aMkNUMiB8IFBDSTIzMF9BRENfRklGT19FTjsKKwkvKiBTZXQgWjItQ1QyIG91dHB1dCBsb3cgdG8gYXZvaWQgYW55IGZhbHNlIHRyaWdnZXJzLiAqLworCWk4MjU0X3NldF9tb2RlKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWjJfQ1RfQkFTRSwgMCwgMiwgSTgyNTRfTU9ERTApOworCWRldnByaXYtPmFpX2JpcG9sYXIgPSBwY2kyMzBfYWlfYmlwb2xhcltyYW5nZV07CisJaWYgKGFyZWYgPT0gQVJFRl9ESUZGKSB7CisJCS8qIERpZmZlcmVudGlhbC4gKi8KKwkJZ2FpbnNoaWZ0ID0gY2hhbiAqIDI7CisJCWlmIChkZXZwcml2LT5od3ZlciA9PSAwKSB7CisJCQkvKiBPcmlnaW5hbCBQQ0kyMzAvMjYwIGV4cGVjdHMgYm90aCBpbnB1dHMgb2YgdGhlCisJCQkgKiBkaWZmZXJlbnRpYWwgY2hhbm5lbCB0byBiZSBlbmFibGVkLiAqLworCQkJYWRjZW4gPSAzIDw8IGdhaW5zaGlmdDsKKwkJfSBlbHNlIHsKKwkJCS8qIFBDSTIzMCsvMjYwKyBleHBlY3RzIG9ubHkgb25lIGlucHV0IG9mIHRoZQorCQkJICogZGlmZmVyZW50aWFsIGNoYW5uZWwgdG8gYmUgZW5hYmxlZC4gKi8KKwkJCWFkY2VuID0gMSA8PCBnYWluc2hpZnQ7CisJCX0KKwkJYWRjY29uIHw9IFBDSTIzMF9BRENfSU1fRElGOworCX0gZWxzZSB7CisJCS8qIFNpbmdsZSBlbmRlZC4gKi8KKwkJYWRjZW4gPSAxIDw8IGNoYW47CisJCWdhaW5zaGlmdCA9IGNoYW4gJiB+MTsKKwkJYWRjY29uIHw9IFBDSTIzMF9BRENfSU1fU0U7CisJfQorCWRldnByaXYtPmFkY2cgPSAoZGV2cHJpdi0+YWRjZyAmIH4oMyA8PCBnYWluc2hpZnQpKQorCQl8IChwY2kyMzBfYWlfZ2FpbltyYW5nZV0gPDwgZ2FpbnNoaWZ0KTsKKwlpZiAoZGV2cHJpdi0+YWlfYmlwb2xhcikgeworCQlhZGNjb24gfD0gUENJMjMwX0FEQ19JUl9CSVA7CisJfSBlbHNlIHsKKwkJYWRjY29uIHw9IFBDSTIzMF9BRENfSVJfVU5JOworCX0KKworCS8qIEVuYWJsZSBvbmx5IHRoaXMgY2hhbm5lbCBpbiB0aGUgc2NhbiBsaXN0IC0gb3RoZXJ3aXNlIGJ5IGRlZmF1bHQKKwkgKiB3ZSdsbCBnZXQgb25lIHNhbXBsZSBmcm9tIGVhY2ggY2hhbm5lbC4gKi8KKwlvdXR3KGFkY2VuLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENFTik7CisKKwkvKiBTZXQgZ2FpbiBmb3IgY2hhbm5lbC4gKi8KKwlvdXR3KGRldnByaXYtPmFkY2csIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0cpOworCisJLyogU3BlY2lmeSB1bmkvYmlwLCBzZS9kaWZmLCBjb252ZXJzaW9uIHNvdXJjZSwgYW5kIHJlc2V0IEZJRk8uICovCisJZGV2cHJpdi0+YWRjY29uID0gYWRjY29uOworCW91dHcoYWRjY29uIHwgUENJMjMwX0FEQ19GSUZPX1JFU0VULCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCisJLyogQ29udmVydCBuIHNhbXBsZXMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIFRyaWdnZXIgY29udmVyc2lvbiBieSB0b2dnbGluZyBaMi1DVDIgb3V0cHV0IChmaW5pc2ggd2l0aAorCQkgKiBvdXRwdXQgaGlnaCkuICovCisJCWk4MjU0X3NldF9tb2RlKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWjJfQ1RfQkFTRSwgMCwgMiwKKwkJCUk4MjU0X01PREUwKTsKKwkJaTgyNTRfc2V0X21vZGUoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aMl9DVF9CQVNFLCAwLCAyLAorCQkJSTgyNTRfTU9ERTEpOworCisjZGVmaW5lIFRJTUVPVVQgMTAwCisJCS8qIHdhaXQgZm9yIGNvbnZlcnNpb24gdG8gZW5kICovCisJCWZvciAoaSA9IDA7IGkgPCBUSU1FT1VUOyBpKyspIHsKKwkJCXN0YXR1cyA9IGludyhkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCQkJaWYgKCEoc3RhdHVzICYgUENJMjMwX0FEQ19GSUZPX0VNUFRZKSkKKwkJCQlicmVhazsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJaWYgKGkgPT0gVElNRU9VVCkgeworCQkJLyogcnRfcHJpbnRrKCkgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBwcmludGsoKQorCQkJICogd2hlbmV2ZXIgdGhlIGNvZGUgY2FuIGJlIGNhbGxlZCBmcm9tIHJlYWwtdGltZS4gKi8KKwkJCXJ0X3ByaW50aygidGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCisJCS8qIHJlYWQgZGF0YSAqLworCQlkYXRhW25dID0gcGNpMjMwX2FpX3JlYWQoZGV2KTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBuOworfQorCisvKgorICogIENPTUVESV9TVUJEX0FPIGluc3RydWN0aW9uczsKKyAqLworc3RhdGljIGludCBwY2kyMzBfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuLCByYW5nZTsKKworCS8qIFVucGFjayBjaGFubmVsIGFuZCByYW5nZS4gKi8KKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiBTZXQgcmFuZ2UgLSBzZWUgYW5hbG9ndWUgb3V0cHV0IHJhbmdlIHRhYmxlOyAwID0+IHVuaXBvbGFyIDEwViwKKwkgKiAxID0+IGJpcG9sYXIgKy8tMTBWIHJhbmdlIHNjYWxlICovCisJZGV2cHJpdi0+YW9fYmlwb2xhciA9IHBjaTIzMF9hb19iaXBvbGFyW3JhbmdlXTsKKwlvdXR3KHJhbmdlLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCisJLyogV3JpdGluZyBhIGxpc3Qgb2YgdmFsdWVzIHRvIGFuIEFPIGNoYW5uZWwgaXMgcHJvYmFibHkgbm90CisJICogdmVyeSB1c2VmdWwsIGJ1dCB0aGF0J3MgaG93IHRoZSBpbnRlcmZhY2UgaXMgZGVmaW5lZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCS8qIFdyaXRlIHZhbHVlIHRvIERBQyBhbmQgc3RvcmUgaXQuICovCisJCXBjaTIzMF9hb193cml0ZV9ub2ZpZm8oZGV2LCBkYXRhW2ldLCBjaGFuKTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBpOworfQorCisvKiBBTyBzdWJkZXZpY2VzIHNob3VsZCBoYXZlIGEgcmVhZCBpbnNuIGFzIHdlbGwgYXMgYSB3cml0ZSBpbnNuLgorICogVXN1YWxseSB0aGlzIG1lYW5zIGNvcHlpbmcgYSB2YWx1ZSBzdG9yZWQgaW4gZGV2cHJpdi4gKi8KK3N0YXRpYyBpbnQgcGNpMjMwX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjMwX2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJLyogY21kdGVzdCB0ZXN0cyBhIHBhcnRpY3VsYXIgY29tbWFuZCB0byBzZWUgaWYgaXQgaXMgdmFsaWQuCisJICogVXNpbmcgdGhlIGNtZHRlc3QgaW9jdGwsIGEgdXNlciBjYW4gY3JlYXRlIGEgdmFsaWQgY21kCisJICogYW5kIHRoZW4gaGF2ZSBpdCBleGVjdXRlcyBieSB0aGUgY21kIGlvY3RsLgorCSAqCisJICogY21kdGVzdCByZXR1cm5zIDEsMiwzLDQgb3IgMCwgZGVwZW5kaW5nIG9uIHdoaWNoIHRlc3RzCisJICogdGhlIGNvbW1hbmQgcGFzc2VzLiAqLworCisJLyogU3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQuCisJICogImludmFsaWQgc291cmNlIiByZXR1cm5lZCBieSBjb21lZGlsaWIgdG8gdXNlciBtb2RlIHByb2Nlc3MKKwkgKiBpZiB0aGlzIGZhaWxzLiAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19JTlQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwlpZiAoKHRoaXNib2FyZC0+bWluX2h3dmVyID4gMCkgJiYgKGRldnByaXYtPmh3dmVyID49IDIpKSB7CisJCS8qCisJCSAqIEZvciBQQ0kyMzArIGhhcmR3YXJlIHZlcnNpb24gMiBvbndhcmRzLCBhbGxvdyBleHRlcm5hbAorCQkgKiB0cmlnZ2VyIGZyb20gRVhUVFJJRy9FWFRDT05WQ0xLIGlucHV0IChQQ0kyMzArIHBpbiAyNSkuCisJCSAqCisJCSAqIEZJWE1FOiBUaGUgcGVybWl0dGVkIHNjYW5fYmVnaW5fc3JjIHZhbHVlcyBzaG91bGRuJ3QgZGVwZW5kCisJCSAqIG9uIGRldnByaXYtPmh3dmVyICh0aGUgZGV0ZWN0ZWQgY2FyZCdzIGFjdHVhbCBoYXJkd2FyZQorCQkgKiB2ZXJzaW9uKS4gIFRoZXkgc2hvdWxkIG9ubHkgZGVwZW5kIG9uIHRoaXNib2FyZC0+bWluX2h3dmVyCisJCSAqICh0aGUgc3RhdGljIGNhcGFiaWxpdGllcyBvZiB0aGUgY29uZmlndXJlZCBjYXJkKS4gIFRvIGZpeAorCQkgKiBpdCwgYSBuZXcgY2FyZCBtb2RlbCwgZS5nLiAicGNpMjMwKzIiIHdvdWxkIGhhdmUgdG8gYmUKKwkJICogZGVmaW5lZCB3aXRoIG1pbl9od3ZlciBzZXQgdG8gMi4gIEl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBpdAorCQkgKiBmb3IgdGhpcyBhbG9uZS4gIEF0IHRoZSBtb21lbnQsIHBsZWFzZSBjb25zaWRlcgorCQkgKiBzY2FuX2JlZ2luX3NyYz09VFJJR19FWFQgc3VwcG9ydCB0byBiZSBhIGJvbnVzIHJhdGhlciB0aGFuIGEKKwkJICogZ3VhcmFudGVlIQorCQkgKi8KKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19JTlQgfCBUUklHX0VYVDsKKwl9IGVsc2UgeworCQljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0lOVDsKKwl9CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBTdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZQorCSAqICJzb3VyY2UgY29uZmxpY3QiIHJldHVybmVkIGJ5IGNvbWVkaWxpYiB0byB1c2VyIG1vZGUgcHJvY2VzcworCSAqIGlmIHRoaXMgZmFpbHMuICovCisKKwkvKiB0aGVzZSB0ZXN0cyBhcmUgdHJ1ZSBpZiBtb3JlIHRoYW4gb25lIF9zcmMgYml0IGlzIHNldCAqLworCWlmICgoY21kLT5zdGFydF9zcmMgJiAoY21kLT5zdGFydF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnNjYW5fYmVnaW5fc3JjICYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPmNvbnZlcnRfc3JjICYgKGNtZC0+Y29udmVydF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnNjYW5fZW5kX3NyYyAmIChjbWQtPnNjYW5fZW5kX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c3RvcF9zcmMgJiAoY21kLT5zdG9wX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogU3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZS4KKwkgKiAiaW52YWxpZCBhcmd1bWVudCIgcmV0dXJuZWQgYnkgY29tZWRpbGliIHRvIHVzZXIgbW9kZSBwcm9jZXNzCisJICogaWYgdGhpcyBmYWlscy4gKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorI2RlZmluZSBNQVhfU1BFRURfQU8JODAwMAkvKiA4MDAwIG5zID0+IDEyNSBrSHogKi8KKyNkZWZpbmUgTUlOX1NQRUVEX0FPCTQyOTQ5NjcyOTV1CS8qIDQyOTQ5NjcyOTVucyA9IDQuMjlzICovCisJCQkvKi0gQ29tZWRpIGxpbWl0IGR1ZSB0byB1bnNpZ25lZCBpbnQgY21kLiAgRHJpdmVyIGxpbWl0CisJCQkgKiA9IDJeMTYgKDE2Yml0ICogY291bnRlcikgKiAxMDAwMDAwbnMgKDFrSHogb25ib2FyZAorCQkJICogY2xvY2spID0gNjUuNTM2cyAqLworCisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IE1BWF9TUEVFRF9BTykgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TUEVFRF9BTzsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gTUlOX1NQRUVEX0FPKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUlOX1NQRUVEX0FPOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJLyogRXh0ZXJuYWwgdHJpZ2dlciAtIGZvciBQQ0kyMzArIGhhcmR3YXJlIHZlcnNpb24gMiBvbndhcmRzLiAqLworCQkvKiBUcmlnZ2VyIG51bWJlciBtdXN0IGJlIDAuICovCisJCWlmICgoY21kLT5zY2FuX2JlZ2luX2FyZyAmIH5DUl9GTEFHU19NQVNLKSAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gQ09NQklORShjbWQtPnNjYW5fYmVnaW5fYXJnLCAwLAorCQkJCX5DUl9GTEFHU19NQVNLKTsKKwkJCWVycisrOworCQl9CisJCS8qIFRoZSBvbmx5IGZsYWdzIGFsbG93ZWQgYXJlIENSX0VER0UgYW5kIENSX0lOVkVSVC4gIFRoZQorCQkgKiBDUl9FREdFIGZsYWcgaXMgaWdub3JlZC4gKi8KKwkJaWYgKChjbWQtPnNjYW5fYmVnaW5fYXJnCisJCQkJJiAoQ1JfRkxBR1NfTUFTSyAmIH4oQ1JfRURHRSB8IENSX0lOVkVSVCkpKSAhPQorCQkJMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJQ09NQklORShjbWQtPnNjYW5fYmVnaW5fYXJnLCAwLAorCQkJCUNSX0ZMQUdTX01BU0sgJiB+KENSX0VER0UgfCBDUl9JTlZFUlQpKTsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUpIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIFN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMuCisJICogImFyZ3VtZW50IGNvbmZsaWN0IiByZXR1cm5lZCBieSBjb21lZGlsaWIgdG8gdXNlciBtb2RlIHByb2Nlc3MKKwkgKiBpZiB0aGlzIGZhaWxzLiAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlwY2kyMzBfbnNfdG9fc2luZ2xlX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLyogU3RlcCA1OiBjaGVjayBjaGFubmVsIGxpc3QgaWYgaXQgZXhpc3RzLiAqLworCisJaWYgKGNtZC0+Y2hhbmxpc3QgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAwKSB7CisJCWVudW0geworCQkJc2VxX2VyciA9ICgxIDw8IDApLAorCQkJcmFuZ2VfZXJyID0gKDEgPDwgMSkKKwkJfTsKKwkJdW5zaWduZWQgaW50IGVycm9yczsKKwkJdW5zaWduZWQgaW50IG47CisJCXVuc2lnbmVkIGludCBjaGFuLCBwcmV2X2NoYW47CisJCXVuc2lnbmVkIGludCByYW5nZSwgZmlyc3RfcmFuZ2U7CisKKwkJcHJldl9jaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwkJZmlyc3RfcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwkJZXJyb3JzID0gMDsKKwkJZm9yIChuID0gMTsgbiA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBuKyspIHsKKwkJCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pOworCQkJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W25dKTsKKwkJCS8qIENoYW5uZWwgbnVtYmVycyBtdXN0IHN0cmljdGx5IGluY3JlYXNlLiAqLworCQkJaWYgKGNoYW4gPCBwcmV2X2NoYW4pIHsKKwkJCQllcnJvcnMgfD0gc2VxX2VycjsKKwkJCX0KKwkJCS8qIFJhbmdlcyBtdXN0IGJlIHRoZSBzYW1lLiAqLworCQkJaWYgKHJhbmdlICE9IGZpcnN0X3JhbmdlKSB7CisJCQkJZXJyb3JzIHw9IHJhbmdlX2VycjsKKwkJCX0KKwkJCXByZXZfY2hhbiA9IGNoYW47CisJCX0KKwkJaWYgKGVycm9ycyAhPSAwKSB7CisJCQllcnIrKzsKKwkJCWlmICgoZXJyb3JzICYgc2VxX2VycikgIT0gMCkgeworCQkJCURQUklOVEsoImNvbWVkaSVkOiBhbXBsY19wY2kyMzA6IGFvX2NtZHRlc3Q6ICIKKwkJCQkJImNoYW5uZWwgbnVtYmVycyBtdXN0IGluY3JlYXNlXG4iLAorCQkJCQlkZXYtPm1pbm9yKTsKKwkJCX0KKwkJCWlmICgoZXJyb3JzICYgcmFuZ2VfZXJyKSAhPSAwKSB7CisJCQkJRFBSSU5USygiY29tZWRpJWQ6IGFtcGxjX3BjaTIzMDogYW9fY21kdGVzdDogIgorCQkJCQkiY2hhbm5lbHMgbXVzdCBoYXZlIHRoZSBzYW1lIHJhbmdlXG4iLAorCQkJCQlkZXYtPm1pbm9yKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjMwX2FvX2ludHRyaWdfc2Nhbl9iZWdpbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHVuc2lnbmVkIGludCB0cmlnX251bSkKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCisJaWYgKHRyaWdfbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hb19zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJaWYgKHRlc3RfYml0KEFPX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpKSB7CisJCS8qIFBlcmZvcm0gc2Nhbi4gKi8KKwkJaWYgKGRldnByaXYtPmh3dmVyIDwgMikgeworCQkJLyogTm90IHVzaW5nIERBQyBGSUZPLiAqLworCQkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPgorCQkJCWFvX3N0b3Bfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwkJCXBjaTIzMF9oYW5kbGVfYW9fbm9maWZvKGRldiwgcyk7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFVzaW5nIERBQyBGSUZPLiAqLworCQkJLyogUmVhZCBEQUNTV1RSSUcgcmVnaXN0ZXIgdG8gdHJpZ2dlciBjb252ZXJzaW9uLiAqLworCQkJaW53KGRldi0+aW9iYXNlICsgUENJMjMwUDJfREFDU1dUUklHKTsKKwkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT4KKwkJCQlhb19zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJCX0KKwkJLyogRGVsYXkuICBTaG91bGQgZHJpdmVyIGJlIHJlc3BvbnNpYmxlIGZvciB0aGlzPyAqLworCQkvKiBYWFggVE9ETzogU2VlIGlmIERBQyBidXN5IGJpdCBjYW4gYmUgdXNlZC4gKi8KKwkJY29tZWRpX3VkZWxheSg4KTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcGNpMjMwX2FvX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCXNldF9iaXQoQU9fQ01EX1NUQVJURUQsICZkZXZwcml2LT5zdGF0ZSk7CisJaWYgKCFkZXZwcml2LT5hb19jb250aW51b3VzICYmIChkZXZwcml2LT5hb19zY2FuX2NvdW50ID09IDApKSB7CisJCS8qIEFuIGVtcHR5IGFjcXVpc2l0aW9uISAqLworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCXBjaTIzMF9hb19zdG9wKGRldiwgcyk7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0gZWxzZSB7CisJCWlmIChkZXZwcml2LT5od3ZlciA+PSAyKSB7CisJCQkvKiBVc2luZyBEQUMgRklGTy4gKi8KKwkJCXVuc2lnbmVkIHNob3J0IHNjYW50cmlnOworCQkJaW50IHJ1bjsKKworCQkJLyogUHJlbG9hZCBGSUZPIGRhdGEuICovCisJCQlydW4gPSBwY2kyMzBfaGFuZGxlX2FvX2ZpZm8oZGV2LCBzKTsKKwkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJaWYgKCFydW4pIHsKKwkJCQkvKiBTdG9wcGVkLiAqLworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qIFNldCBzY2FuIHRyaWdnZXIgc291cmNlLiAqLworCQkJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJCQljYXNlIFRSSUdfVElNRVI6CisJCQkJc2NhbnRyaWcgPSBQQ0kyMzBQMl9EQUNfVFJJR19aMkNUMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVFJJR19FWFQ6CisJCQkJLyogVHJpZ2dlciBvbiBFWFRUUklHL0VYVENPTlZDTEsgcGluLiAqLworCQkJCWlmICgoY21kLT5zY2FuX2JlZ2luX2FyZyAmIENSX0lOVkVSVCkgPT0gMCkgeworCQkJCQkvKiArdmUgZWRnZSAqLworCQkJCQlzY2FudHJpZyA9IFBDSTIzMFAyX0RBQ19UUklHX0VYVFA7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogLXZlIGVkZ2UgKi8KKwkJCQkJc2NhbnRyaWcgPSBQQ0kyMzBQMl9EQUNfVFJJR19FWFROOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgVFJJR19JTlQ6CisJCQkJc2NhbnRyaWcgPSBQQ0kyMzBQMl9EQUNfVFJJR19TVzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogU2hvdWxkbid0IGdldCBoZXJlLiAqLworCQkJCXNjYW50cmlnID0gUENJMjMwUDJfREFDX1RSSUdfTk9ORTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRldnByaXYtPmRhY2NvbiA9IChkZXZwcml2LT5kYWNjb24KKwkJCQkmIH5QQ0kyMzBQMl9EQUNfVFJJR19NQVNLKSB8IHNjYW50cmlnOworCQkJb3V0dyhkZXZwcml2LT5kYWNjb24sIGRldi0+aW9iYXNlICsgUENJMjMwX0RBQ0NPTik7CisKKwkJfQorCQlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwkJY2FzZSBUUklHX1RJTUVSOgorCQkJaWYgKGRldnByaXYtPmh3dmVyIDwgMikgeworCQkJCS8qIE5vdCB1c2luZyBEQUMgRklGTy4gKi8KKwkJCQkvKiBFbmFibGUgQ1QxIHRpbWVyIGludGVycnVwdC4gKi8KKwkJCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywKKwkJCQkJaXJxZmxhZ3MpOworCQkJCWRldnByaXYtPmludF9lbiB8PSBQQ0kyMzBfSU5UX1pDTEtfQ1QxOworCQkJCWRldnByaXYtPmllciB8PSBQQ0kyMzBfSU5UX1pDTEtfQ1QxOworCQkJCW91dGIoZGV2cHJpdi0+aWVyLAorCQkJCQlkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX0lOVF9TQ0UpOworCQkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT4KKwkJCQkJaXNyX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJCQl9CisJCQkvKiBTZXQgQ1QxIGdhdGUgaGlnaCB0byBzdGFydCBjb3VudGluZy4gKi8KKwkJCW91dGIoR0FUX0NPTkZJRygxLCBHQVRfVkNDKSwKKwkJCQlkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1pHQVRfU0NFKTsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfSU5UOgorCQkJYXN5bmMtPmludHRyaWcgPSBwY2kyMzBfYW9faW50dHJpZ19zY2FuX2JlZ2luOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGRldnByaXYtPmh3dmVyID49IDIpIHsKKwkJCS8qIFVzaW5nIERBQyBGSUZPLiAgRW5hYmxlIERBQyBGSUZPIGludGVycnVwdC4gKi8KKwkJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLAorCQkJCWlycWZsYWdzKTsKKwkJCWRldnByaXYtPmludF9lbiB8PSBQQ0kyMzBQMl9JTlRfREFDOworCQkJZGV2cHJpdi0+aWVyIHw9IFBDSTIzMFAyX0lOVF9EQUM7CisJCQlvdXRiKGRldnByaXYtPmllciwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKwkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssCisJCQkJaXJxZmxhZ3MpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHBjaTIzMF9hb19pbnR0cmlnX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdfbnVtKQoreworCWlmICh0cmlnX251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTEZVTkM7CisJcGNpMjMwX2FvX3N0YXJ0KGRldiwgcyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwY2kyMzBfYW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgc2hvcnQgZGFjY29uOworCXVuc2lnbmVkIGludCByYW5nZTsKKworCS8qIEdldCB0aGUgY29tbWFuZC4gKi8KKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCS8qIENsYWltIFoyLUNUMS4gKi8KKwkJaWYgKCFnZXRfb25lX3Jlc291cmNlKGRldiwgUkVTX1oyQ1QxLCBPV05FUl9BT0NNRCkpIHsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwkvKiBHZXQgbnVtYmVyIG9mIHNjYW5zIHJlcXVpcmVkLiAqLworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCA9IGNtZC0+c3RvcF9hcmc7CisJCWRldnByaXYtPmFvX2NvbnRpbnVvdXMgPSAwOworCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSwgdXNlciBjYWxscyBjYW5jZWwuICovCisJCWRldnByaXYtPmFvX3NjYW5fY291bnQgPSAwOworCQlkZXZwcml2LT5hb19jb250aW51b3VzID0gMTsKKwl9CisKKwkvKiBTZXQgcmFuZ2UgLSBzZWUgYW5hbG9ndWUgb3V0cHV0IHJhbmdlIHRhYmxlOyAwID0+IHVuaXBvbGFyIDEwViwKKwkgKiAxID0+IGJpcG9sYXIgKy8tMTBWIHJhbmdlIHNjYWxlICovCisJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwlkZXZwcml2LT5hb19iaXBvbGFyID0gcGNpMjMwX2FvX2JpcG9sYXJbcmFuZ2VdOworCWRhY2NvbiA9IGRldnByaXYtPmFvX2JpcG9sYXIgPyBQQ0kyMzBfREFDX09SX0JJUCA6IFBDSTIzMF9EQUNfT1JfVU5JOworCS8qIFVzZSBEQUMgRklGTyBmb3IgaGFyZHdhcmUgdmVyc2lvbiAyIG9ud2FyZHMuICovCisJaWYgKGRldnByaXYtPmh3dmVyID49IDIpIHsKKwkJdW5zaWduZWQgc2hvcnQgZGFjZW47CisJCXVuc2lnbmVkIGludCBpOworCisJCWRhY2VuID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCWRhY2VuIHw9IDEgPDwgQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJfQorCQkvKiBTZXQgY2hhbm5lbCBzY2FuIGxpc3QuICovCisJCW91dHcoZGFjZW4sIGRldi0+aW9iYXNlICsgUENJMjMwUDJfREFDRU4pOworCQkvKgorCQkgKiBFbmFibGUgREFDIEZJRk8uCisJCSAqIFNldCBEQUMgc2NhbiBzb3VyY2UgdG8gJ25vbmUnLgorCQkgKiBTZXQgREFDIEZJRk8gaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwgdG8gJ25vdCBoYWxmIGZ1bGwnLgorCQkgKiBSZXNldCBEQUMgRklGTyBhbmQgY2xlYXIgdW5kZXJydW4uCisJCSAqCisJCSAqIE4uQi4gREFDIEZJRk8gaW50ZXJydXB0cyBhcmUgY3VycmVudGx5IGRpc2FibGVkLgorCQkgKi8KKwkJZGFjY29uIHw9IFBDSTIzMFAyX0RBQ19GSUZPX0VOIHwgUENJMjMwUDJfREFDX0ZJRk9fUkVTRVQKKwkJCXwgUENJMjMwUDJfREFDX0ZJRk9fVU5ERVJSVU5fQ0xFQVIKKwkJCXwgUENJMjMwUDJfREFDX1RSSUdfTk9ORSB8IFBDSTIzMFAyX0RBQ19JTlRfRklGT19OSEFMRjsKKwl9CisKKwkvKiBTZXQgREFDQ09OLiAqLworCW91dHcoZGFjY29uLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCS8qIFByZXNlcnZlIG1vc3Qgb2YgREFDQ09OIGFwYXJ0IGZyb20gd3JpdGUtb25seSwgdHJhbnNpZW50IGJpdHMuICovCisJZGV2cHJpdi0+ZGFjY29uID0gZGFjY29uCisJCSYgfihQQ0kyMzBQMl9EQUNfRklGT19SRVNFVCB8IFBDSTIzMFAyX0RBQ19GSUZPX1VOREVSUlVOX0NMRUFSKTsKKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJLyogU2V0IHRoZSBjb3VudGVyIHRpbWVyIDEgdG8gdGhlIHNwZWNpZmllZCBzY2FuIGZyZXF1ZW5jeS4gKi8KKwkJLyogY21kLT5zY2FuX2JlZ2luX2FyZyBpcyBzYW1wbGluZyBwZXJpb2QgaW4gbnMgKi8KKwkJLyogZ2F0ZSBpdCBvZmYgZm9yIG5vdy4gKi8KKwkJb3V0YihHQVRfQ09ORklHKDEsIEdBVF9HTkQpLAorCQkJZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aR0FUX1NDRSk7CisJCXBjaTIzMF9jdF9zZXR1cF9uc19tb2RlKGRldiwgMSwgSTgyNTRfTU9ERTMsCisJCQljbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwl9CisKKwkvKiBOLkIuIGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UICovCisJcy0+YXN5bmMtPmludHRyaWcgPSBwY2kyMzBfYW9faW50dHJpZ19zdGFydDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaTIzMF9haV9jaGVja19zY2FuX3BlcmlvZChzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgbWluX3NjYW5fcGVyaW9kLCBjaGFubGlzdF9sZW47CisJaW50IGVyciA9IDA7CisKKwljaGFubGlzdF9sZW4gPSBjbWQtPmNoYW5saXN0X2xlbjsKKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMCkgeworCQljaGFubGlzdF9sZW4gPSAxOworCX0KKwltaW5fc2Nhbl9wZXJpb2QgPSBjaGFubGlzdF9sZW4gKiBjbWQtPmNvbnZlcnRfYXJnOworCWlmICgobWluX3NjYW5fcGVyaW9kIDwgY2hhbmxpc3RfbGVuKQorCQl8fCAobWluX3NjYW5fcGVyaW9kIDwgY21kLT5jb252ZXJ0X2FyZykpIHsKKwkJLyogQXJpdGhtZXRpYyBvdmVyZmxvdy4gKi8KKwkJbWluX3NjYW5fcGVyaW9kID0gVUlOVF9NQVg7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IG1pbl9zY2FuX3BlcmlvZCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gbWluX3NjYW5fcGVyaW9kOworCQllcnIrKzsKKwl9CisKKwlyZXR1cm4gIWVycjsKK30KKworc3RhdGljIGludCBwY2kyMzBfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBjbWR0ZXN0IHRlc3RzIGEgcGFydGljdWxhciBjb21tYW5kIHRvIHNlZSBpZiBpdCBpcyB2YWxpZC4KKwkgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKwkgKiBhbmQgdGhlbiBoYXZlIGl0IGV4ZWN1dGVzIGJ5IHRoZSBjbWQgaW9jdGwuCisJICoKKwkgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCw1IG9yIDAsIGRlcGVuZGluZyBvbiB3aGljaCB0ZXN0cworCSAqIHRoZSBjb21tYW5kIHBhc3Nlcy4gKi8KKworCS8qIFN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkLgorCSAqICJpbnZhbGlkIHNvdXJjZSIgcmV0dXJuZWQgYnkgY29tZWRpbGliIHRvIHVzZXIgbW9kZSBwcm9jZXNzCisJICogaWYgdGhpcyBmYWlscy4gKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19JTlQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwkvKiBVbmZvcnR1bmF0ZWx5LCB3ZSBjYW5ub3QgdHJpZ2dlciBhIHNjYW4gb2ZmIGFuIGV4dGVybmFsIHNvdXJjZQorCSAqIG9uIHRoZSBQQ0kyNjAgYm9hcmQsIHNpbmNlIGl0IHVzZXMgdGhlIFBQSUMwIChESU8pIGlucHV0LCB3aGljaAorCSAqIGlzbid0IHByZXNlbnQgb24gdGhlIFBDSTI2MC4gIEZvciBQQ0kyNjArIHdlIGNhbiB1c2UgdGhlCisJICogRVhUVFJJRy9FWFRDT05WQ0xLIGlucHV0IG9uIHBpbiAxNyBpbnN0ZWFkLiAqLworCWlmICgodGhpc2JvYXJkLT5oYXZlX2RpbykgfHwgKHRoaXNib2FyZC0+bWluX2h3dmVyID4gMCkpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVyB8IFRSSUdfVElNRVIgfCBUUklHX0lOVAorCQkJfCBUUklHX0VYVDsKKwl9IGVsc2UgeworCQljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XIHwgVFJJR19USU1FUiB8IFRSSUdfSU5UOworCX0KKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0lOVCB8IFRSSUdfRVhUOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIFN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlCisJICogInNvdXJjZSBjb25mbGljdCIgcmV0dXJuZWQgYnkgY29tZWRpbGliIHRvIHVzZXIgbW9kZSBwcm9jZXNzCisJICogaWYgdGhpcyBmYWlscy4gKi8KKworCS8qIHRoZXNlIHRlc3RzIGFyZSB0cnVlIGlmIG1vcmUgdGhhbiBvbmUgX3NyYyBiaXQgaXMgc2V0ICovCisJaWYgKChjbWQtPnN0YXJ0X3NyYyAmIChjbWQtPnN0YXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgJiAoY21kLT5zY2FuX2JlZ2luX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+Y29udmVydF9zcmMgJiAoY21kLT5jb252ZXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9lbmRfc3JjICYgKGNtZC0+c2Nhbl9lbmRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zdG9wX3NyYyAmIChjbWQtPnN0b3Bfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCisJLyogSWYgc2Nhbl9iZWdpbl9zcmMgaXMgbm90IFRSSUdfRk9MTE9XLCB0aGVuIGEgbW9ub3N0YWJsZSB3aWxsIGJlCisJICogc2V0IHVwIHRvIGdlbmVyYXRlIGEgZml4ZWQgbnVtYmVyIG9mIHRpbWVkIGNvbnZlcnNpb24gcHVsc2VzLiAqLworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykKKwkJJiYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBTdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlLgorCSAqICJpbnZhbGlkIGFyZ3VtZW50IiByZXR1cm5lZCBieSBjb21lZGlsaWIgdG8gdXNlciBtb2RlIHByb2Nlc3MKKwkgKiBpZiB0aGlzIGZhaWxzLiAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIE1BWF9TUEVFRF9BSV9TRQkJMzIwMAkvKiBQQ0kyMzAgU0U6ICAgMzIwMCBucyA9PiAzMTIuNSBrSHogKi8KKyNkZWZpbmUgTUFYX1NQRUVEX0FJX0RJRkYJODAwMAkvKiBQQ0kyMzAgRElGRjogODAwMCBucyA9PiAxMjUga0h6ICovCisjZGVmaW5lIE1BWF9TUEVFRF9BSV9QTFVTCTQwMDAJLyogUENJMjMwKzogICAgIDQwMDAgbnMgPT4gMjUwIGtIeiAqLworI2RlZmluZSBNSU5fU1BFRURfQUkJNDI5NDk2NzI5NXUJLyogNDI5NDk2NzI5NW5zID0gNC4yOXMgKi8KKwkJCS8qLSBDb21lZGkgbGltaXQgZHVlIHRvIHVuc2lnbmVkIGludCBjbWQuICBEcml2ZXIgbGltaXQKKwkJCSAqID0gMl4xNiAoMTZiaXQgKiBjb3VudGVyKSAqIDEwMDAwMDBucyAoMWtIeiBvbmJvYXJkCisJCQkgKiBjbG9jaykgPSA2NS41MzZzICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVuc2lnbmVkIGludCBtYXhfc3BlZWRfYWk7CisKKwkJaWYgKGRldnByaXYtPmh3dmVyID09IDApIHsKKwkJCS8qIFBDSTIzMCBvciBQQ0kyNjAuICBNYXggc3BlZWQgZGVwZW5kcyB3aGV0aGVyCisJCQkgKiBzaW5nbGUtZW5kZWQgb3IgcHNldWRvLWRpZmZlcmVudGlhbC4gKi8KKwkJCWlmIChjbWQtPmNoYW5saXN0ICYmIChjbWQtPmNoYW5saXN0X2xlbiA+IDApKSB7CisJCQkJLyogUGVlayBhbmFsb2d1ZSByZWZlcmVuY2Ugb2YgZmlyc3QgY2hhbm5lbC4gKi8KKwkJCQlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKSA9PSBBUkVGX0RJRkYpIHsKKwkJCQkJbWF4X3NwZWVkX2FpID0gTUFYX1NQRUVEX0FJX0RJRkY7CisJCQkJfSBlbHNlIHsKKwkJCQkJbWF4X3NwZWVkX2FpID0gTUFYX1NQRUVEX0FJX1NFOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogTm8gY2hhbm5lbCBsaXN0LiAgQXNzdW1lIHNpbmdsZS1lbmRlZC4gKi8KKwkJCQltYXhfc3BlZWRfYWkgPSBNQVhfU1BFRURfQUlfU0U7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBQQ0kyMzArIG9yIFBDSTI2MCsuICovCisJCQltYXhfc3BlZWRfYWkgPSBNQVhfU1BFRURfQUlfUExVUzsKKwkJfQorCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgbWF4X3NwZWVkX2FpKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gbWF4X3NwZWVkX2FpOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiBNSU5fU1BFRURfQUkpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSBNSU5fU1BFRURfQUk7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSBpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQkvKgorCQkgKiBleHRlcm5hbCB0cmlnZ2VyCisJCSAqCisJCSAqIGNvbnZlcnRfYXJnID09IChDUl9FREdFIHwgMCkKKwkJICogICAgICAgICAgICAgICAgPT4gdHJpZ2dlciBvbiArdmUgZWRnZS4KKwkJICogY29udmVydF9hcmcgPT0gKENSX0VER0UgfCBDUl9JTlZFUlQgfCAwKQorCQkgKiAgICAgICAgICAgICAgICA9PiB0cmlnZ2VyIG9uIC12ZSBlZGdlLgorCQkgKi8KKwkJaWYgKChjbWQtPmNvbnZlcnRfYXJnICYgQ1JfRkxBR1NfTUFTSykgIT0gMCkgeworCQkJLyogVHJpZ2dlciBudW1iZXIgbXVzdCBiZSAwLiAqLworCQkJaWYgKChjbWQtPmNvbnZlcnRfYXJnICYgfkNSX0ZMQUdTX01BU0spICE9IDApIHsKKwkJCQljbWQtPmNvbnZlcnRfYXJnID0gQ09NQklORShjbWQtPmNvbnZlcnRfYXJnLCAwLAorCQkJCQl+Q1JfRkxBR1NfTUFTSyk7CisJCQkJZXJyKys7CisJCQl9CisJCQkvKiBUaGUgb25seSBmbGFncyBhbGxvd2VkIGFyZSBDUl9JTlZFUlQgYW5kIENSX0VER0UuCisJCQkgKiBDUl9FREdFIGlzIHJlcXVpcmVkLiAqLworCQkJaWYgKChjbWQtPmNvbnZlcnRfYXJnICYgKENSX0ZMQUdTX01BU0sgJiB+Q1JfSU5WRVJUKSkKKwkJCQkhPSBDUl9FREdFKSB7CisJCQkJLyogU2V0IENSX0VER0UsIHByZXNlcnZlIENSX0lOVkVSVC4gKi8KKwkJCQljbWQtPmNvbnZlcnRfYXJnID0KKwkJCQkJQ09NQklORShjbWQtPnN0YXJ0X2FyZywgKENSX0VER0UgfCAwKSwKKwkJCQkJQ1JfRkxBR1NfTUFTSyAmIH5DUl9JTlZFUlQpOworCQkJCWVycisrOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9ucy4gKi8KKwkJCS8qIGNvbnZlcnRfYXJnID09IDAgPT4gdHJpZ2dlciBvbiAtdmUgZWRnZS4gKi8KKwkJCS8qIGNvbnZlcnRfYXJnID09IDEgPT4gdHJpZ2dlciBvbiArdmUgZWRnZS4gKi8KKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gMSkgeworCQkJCS8qIERlZmF1bHQgdG8gdHJpZ2dlciBvbiArdmUgZWRnZS4gKi8KKwkJCQljbWQtPmNvbnZlcnRfYXJnID0gMTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgeworCQkvKiBleHRlcm5hbCAidHJpZ2dlciIgdG8gYmVnaW4gZWFjaCBzY2FuCisJCSAqIHNjYW5fYmVnaW5fYXJnPT0wID0+IHVzZSBQUEMwIGlucHV0IC0+IGdhdGUgb2YgQ1QwIC0+IGdhdGUKKwkJICogb2YgQ1QyIChzYW1wbGUgY29udmVydCB0cmlnZ2VyIGlzIENUMikgKi8KKwkJaWYgKChjbWQtPnNjYW5fYmVnaW5fYXJnICYgfkNSX0ZMQUdTX01BU0spICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBDT01CSU5FKGNtZC0+c2Nhbl9iZWdpbl9hcmcsIDAsCisJCQkJfkNSX0ZMQUdTX01BU0spOworCQkJZXJyKys7CisJCX0KKwkJLyogVGhlIG9ubHkgZmxhZyBhbGxvd2VkIGlzIENSX0VER0UsIHdoaWNoIGlzIGlnbm9yZWQuICovCisJCWlmICgoY21kLT5zY2FuX2JlZ2luX2FyZyAmIENSX0ZMQUdTX01BU0sgJiB+Q1JfRURHRSkgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IENPTUJJTkUoY21kLT5zY2FuX2JlZ2luX2FyZywgMCwKKwkJCQlDUl9GTEFHU19NQVNLICYgfkNSX0VER0UpOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKiBOLkIuIGNtZC0+Y29udmVydF9hcmcgaXMgYWxzbyBUUklHX1RJTUVSICovCisJCWlmICghcGNpMjMwX2FpX2NoZWNrX3NjYW5fcGVyaW9kKGNtZCkpIHsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogU3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cy4KKwkgKiAiYXJndW1lbnQgY29uZmxpY3QiIHJldHVybmVkIGJ5IGNvbWVkaWxpYiB0byB1c2VyIG1vZGUgcHJvY2VzcworCSAqIGlmIHRoaXMgZmFpbHMuICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCXBjaTIzMF9uc190b19zaW5nbGVfdGltZXIoJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKiBOLkIuIGNtZC0+Y29udmVydF9hcmcgaXMgYWxzbyBUUklHX1RJTUVSICovCisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCXBjaTIzMF9uc190b19zaW5nbGVfdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKCFwY2kyMzBfYWlfY2hlY2tfc2Nhbl9wZXJpb2QoY21kKSkgeworCQkJLyogV2FzIGJlbG93IG1pbmltdW0gcmVxdWlyZWQuICBSb3VuZCB1cC4gKi8KKwkJCXBjaTIzMF9uc190b19zaW5nbGVfdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQkJVFJJR19ST1VORF9VUCk7CisJCQlwY2kyMzBfYWlfY2hlY2tfc2Nhbl9wZXJpb2QoY21kKTsKKwkJfQorCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8qIFN0ZXAgNTogY2hlY2sgY2hhbm5lbCBsaXN0IGlmIGl0IGV4aXN0cy4gKi8KKworCWlmIChjbWQtPmNoYW5saXN0ICYmIGNtZC0+Y2hhbmxpc3RfbGVuID4gMCkgeworCQllbnVtIHsKKwkJCXNlcV9lcnIgPSAxIDw8IDAsCisJCQlyYW5nZXBhaXJfZXJyID0gMSA8PCAxLAorCQkJcG9sYXJpdHlfZXJyID0gMSA8PCAyLAorCQkJYXJlZl9lcnIgPSAxIDw8IDMsCisJCQlkaWZmY2hhbl9lcnIgPSAxIDw8IDQsCisJCQlidWdneV9jaGFuMF9lcnIgPSAxIDw8IDUKKwkJfTsKKwkJdW5zaWduZWQgaW50IGVycm9yczsKKwkJdW5zaWduZWQgaW50IGNoYW4sIHByZXZfY2hhbjsKKwkJdW5zaWduZWQgaW50IHJhbmdlLCBwcmV2X3JhbmdlOworCQl1bnNpZ25lZCBpbnQgcG9sYXJpdHksIHByZXZfcG9sYXJpdHk7CisJCXVuc2lnbmVkIGludCBhcmVmLCBwcmV2X2FyZWY7CisJCXVuc2lnbmVkIGludCBzdWJzZXFfbGVuOworCQl1bnNpZ25lZCBpbnQgbjsKKworCQlzdWJzZXFfbGVuID0gMDsKKwkJZXJyb3JzID0gMDsKKwkJcHJldl9jaGFuID0gcHJldl9hcmVmID0gcHJldl9yYW5nZSA9IHByZXZfcG9sYXJpdHkgPSAwOworCQlmb3IgKG4gPSAwOyBuIDwgY21kLT5jaGFubGlzdF9sZW47IG4rKykgeworCQkJY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtuXSk7CisJCQlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3Rbbl0pOworCQkJYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFtuXSk7CisJCQlwb2xhcml0eSA9IHBjaTIzMF9haV9iaXBvbGFyW3JhbmdlXTsKKwkJCS8qIE9ubHkgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGNoYW5uZWxzIGFyZSBhdmFpbGFibGUgaWYKKwkJCSAqIGRpZmZlcmVudGlhbC4gIChUaGVzZSBhcmUgcmVtYXBwZWQgaW4gc29mdHdhcmUuICBJbgorCQkJICogaGFyZHdhcmUsIG9ubHkgdGhlIGV2ZW4gY2hhbm5lbHMgYXJlIGF2YWlsYWJsZS4pICovCisJCQlpZiAoKGFyZWYgPT0gQVJFRl9ESUZGKQorCQkJCSYmIChjaGFuID49IChzLT5uX2NoYW4gLyAyKSkpIHsKKwkJCQllcnJvcnMgfD0gZGlmZmNoYW5fZXJyOworCQkJfQorCQkJaWYgKG4gPiAwKSB7CisJCQkJLyogQ2hhbm5lbCBudW1iZXJzIG11c3Qgc3RyaWN0bHkgaW5jcmVhc2Ugb3IKKwkJCQkgKiBzdWJzZXF1ZW5jZSBtdXN0IHJlcGVhdCBleGFjdGx5LiAqLworCQkJCWlmICgoY2hhbiA8PSBwcmV2X2NoYW4pCisJCQkJCSYmIChzdWJzZXFfbGVuID09IDApKSB7CisJCQkJCXN1YnNlcV9sZW4gPSBuOworCQkJCX0KKwkJCQlpZiAoKHN1YnNlcV9sZW4gPiAwKQorCQkJCQkmJiAoY21kLT5jaGFubGlzdFtuXSAhPQorCQkJCQkJY21kLT5jaGFubGlzdFtuICUKKwkJCQkJCQlzdWJzZXFfbGVuXSkpIHsKKwkJCQkJZXJyb3JzIHw9IHNlcV9lcnI7CisJCQkJfQorCQkJCS8qIENoYW5uZWxzIG11c3QgaGF2ZSBzYW1lIEFSRUYuICovCisJCQkJaWYgKGFyZWYgIT0gcHJldl9hcmVmKSB7CisJCQkJCWVycm9ycyB8PSBhcmVmX2VycjsKKwkJCQl9CisJCQkJLyogQ2hhbm5lbCByYW5nZXMgbXVzdCBoYXZlIHNhbWUgcG9sYXJpdHkuICovCisJCQkJaWYgKHBvbGFyaXR5ICE9IHByZXZfcG9sYXJpdHkpIHsKKwkJCQkJZXJyb3JzIHw9IHBvbGFyaXR5X2VycjsKKwkJCQl9CisJCQkJLyogU2luZ2xlLWVuZGVkIGNoYW5uZWwgcGFpcnMgbXVzdCBoYXZlIHNhbWUKKwkJCQkgKiByYW5nZS4gICovCisJCQkJaWYgKChhcmVmICE9IEFSRUZfRElGRikKKwkJCQkJJiYgKCgoY2hhbiBeIHByZXZfY2hhbikgJiB+MSkgPT0gMCkKKwkJCQkJJiYgKHJhbmdlICE9IHByZXZfcmFuZ2UpKSB7CisJCQkJCWVycm9ycyB8PSByYW5nZXBhaXJfZXJyOworCQkJCX0KKwkJCX0KKwkJCXByZXZfY2hhbiA9IGNoYW47CisJCQlwcmV2X3JhbmdlID0gcmFuZ2U7CisJCQlwcmV2X2FyZWYgPSBhcmVmOworCQkJcHJldl9wb2xhcml0eSA9IHBvbGFyaXR5OworCQl9CisJCWlmIChzdWJzZXFfbGVuID09IDApIHsKKwkJCS8qIFN1YnNlcXVlbmNlIGlzIHdob2xlIHNlcXVlbmNlLiAqLworCQkJc3Vic2VxX2xlbiA9IG47CisJCX0KKwkJLyogSWYgY2hhbm5lbCBsaXN0IGlzIGEgcmVwZWF0aW5nIHN1YnNlcXVlbmNlLCBuZWVkIGEgd2hvbGUKKwkJICogbnVtYmVyIG9mIHJlcGVhdHMuICovCisJCWlmICgobiAlIHN1YnNlcV9sZW4pICE9IDApIHsKKwkJCWVycm9ycyB8PSBzZXFfZXJyOworCQl9CisJCWlmICgoZGV2cHJpdi0+aHd2ZXIgPiAwKSAmJiAoZGV2cHJpdi0+aHd2ZXIgPCA0KSkgeworCQkJLyoKKwkJCSAqIEJ1Z2d5IFBDSTIzMCsgb3IgUENJMjYwKyByZXF1aXJlcyBjaGFubmVsIDAgdG8gYmUKKwkJCSAqIChmaXJzdCkgaW4gdGhlIHNlcXVlbmNlIGlmIHRoZSBzZXF1ZW5jZSBjb250YWlucworCQkJICogbW9yZSB0aGFuIG9uZSBjaGFubmVsLiAgSGFyZHdhcmUgdmVyc2lvbnMgMSBhbmQgMgorCQkJICogaGF2ZSB0aGUgYnVnLiAgVGhlcmUgaXMgbm8gaGFyZHdhcmUgdmVyc2lvbiAzLgorCQkJICoKKwkJCSAqIEFjdHVhbGx5LCB0aGVyZSBhcmUgdHdvIGZpcm13YXJlcyB0aGF0IHJlcG9ydAorCQkJICogdGhlbXNlbHZlcyBhcyBoYXJkd2FyZSB2ZXJzaW9uIDEgKHRoZSBib2FyZHMKKwkJCSAqIGhhdmUgZGlmZmVyZW50IEFEQyBjaGlwcyB3aXRoIHNsaWdodGx5IGRpZmZlcmVudAorCQkJICogdGltaW5nIHJlcXVpcmVtZW50cywgd2hpY2ggd2FzIHN1cHBvc2VkIHRvIGJlCisJCQkgKiBpbnZpc2libGUgdG8gc29mdHdhcmUpLiAgVGhlIGZpcnN0IG9uZSBkb2Vzbid0CisJCQkgKiBzZWVtIHRvIGhhdmUgdGhlIGJ1ZywgYnV0IHRoZSBzZWNvbmQgb25lCisJCQkgKiBkb2VzLCBhbmQgd2UgY2FuJ3QgdGVsbCB0aGVtIGFwYXJ0IQorCQkJICovCisJCQlpZiAoKHN1YnNlcV9sZW4gPiAxKQorCQkJCSYmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pICE9IDApKSB7CisJCQkJZXJyb3JzIHw9IGJ1Z2d5X2NoYW4wX2VycjsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3JzICE9IDApIHsKKwkJCWVycisrOworCQkJaWYgKChlcnJvcnMgJiBzZXFfZXJyKSAhPSAwKSB7CisJCQkJRFBSSU5USygiY29tZWRpJWQ6IGFtcGxjX3BjaTIzMDogYWlfY21kdGVzdDogIgorCQkJCQkiY2hhbm5lbCBudW1iZXJzIG11c3QgaW5jcmVhc2Ugb3IgIgorCQkJCQkic2VxdWVuY2UgbXVzdCByZXBlYXQgZXhhY3RseVxuIiwKKwkJCQkJZGV2LT5taW5vcik7CisJCQl9CisJCQlpZiAoKGVycm9ycyAmIHJhbmdlcGFpcl9lcnIpICE9IDApIHsKKwkJCQlEUFJJTlRLKCJjb21lZGklZDogYW1wbGNfcGNpMjMwOiBhaV9jbWR0ZXN0OiAiCisJCQkJCSJzaW5nbGUtZW5kZWQgY2hhbm5lbCBwYWlycyBtdXN0ICIKKwkJCQkJImhhdmUgdGhlIHNhbWUgcmFuZ2VcbiIsIGRldi0+bWlub3IpOworCQkJfQorCQkJaWYgKChlcnJvcnMgJiBwb2xhcml0eV9lcnIpICE9IDApIHsKKwkJCQlEUFJJTlRLKCJjb21lZGklZDogYW1wbGNfcGNpMjMwOiBhaV9jbWR0ZXN0OiAiCisJCQkJCSJjaGFubmVsIHNlcXVlbmNlIHJhbmdlcyBtdXN0IGJlIGFsbCAiCisJCQkJCSJiaXBvbGFyIG9yIGFsbCB1bmlwb2xhclxuIiwKKwkJCQkJZGV2LT5taW5vcik7CisJCQl9CisJCQlpZiAoKGVycm9ycyAmIGFyZWZfZXJyKSAhPSAwKSB7CisJCQkJRFBSSU5USygiY29tZWRpJWQ6IGFtcGxjX3BjaTIzMDogYWlfY21kdGVzdDogIgorCQkJCQkiY2hhbm5lbCBzZXF1ZW5jZSBhbmFsb2d1ZSByZWZlcmVuY2VzICIKKwkJCQkJIm11c3QgYmUgYWxsIHRoZSBzYW1lIChzaW5nbGUtZW5kZWQgIgorCQkJCQkib3IgZGlmZmVyZW50aWFsKVxuIiwgZGV2LT5taW5vcik7CisJCQl9CisJCQlpZiAoKGVycm9ycyAmIGRpZmZjaGFuX2VycikgIT0gMCkgeworCQkJCURQUklOVEsoImNvbWVkaSVkOiBhbXBsY19wY2kyMzA6IGFpX2NtZHRlc3Q6ICIKKwkJCQkJImRpZmZlcmVudGlhbCBjaGFubmVsIG51bWJlciBvdXQgb2YgIgorCQkJCQkicmFuZ2UgMCB0byAldVxuIiwgZGV2LT5taW5vciwKKwkJCQkJKHMtPm5fY2hhbiAvIDIpIC0gMSk7CisJCQl9CisJCQlpZiAoKGVycm9ycyAmIGJ1Z2d5X2NoYW4wX2VycikgIT0gMCkgeworCQkJCS8qIFVzZSBwcmludGsgaW5zdGVhZCBvZiBEUFJJTlRLIGhlcmUuICovCisJCQkJcHJpbnRrKCJjb21lZGk6IGNvbWVkaSVkOiBhbXBsY19wY2kyMzA6ICIKKwkJCQkJImFpX2NtZHRlc3Q6IEJ1Z2d5IFBDSTIzMCsvMjYwKyAiCisJCQkJCSJoL3cgdmVyc2lvbiAldSByZXF1aXJlcyBmaXJzdCBjaGFubmVsICIKKwkJCQkJIm9mIG11bHRpLWNoYW5uZWwgc2VxdWVuY2UgdG8gYmUgMCAiCisJCQkJCSIoY29ycmVjdGVkIGluIGgvdyB2ZXJzaW9uIDQpXG4iLAorCQkJCQlkZXYtPm1pbm9yLCBkZXZwcml2LT5od3Zlcik7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwY2kyMzBfYWlfdXBkYXRlX2ZpZm9fdHJpZ2dlcl9sZXZlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBzY2FubGVuID0gY21kLT5zY2FuX2VuZF9hcmc7CisJdW5zaWduZWQgaW50IHdha2U7CisJdW5zaWduZWQgc2hvcnQgdHJpZ2xldjsKKwl1bnNpZ25lZCBzaG9ydCBhZGNjb247CisKKwlpZiAoKGNtZC0+ZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSAhPSAwKSB7CisJCS8qIFdha2UgYXQgZW5kIG9mIHNjYW4uICovCisJCXdha2UgPSBzY2FubGVuIC0gZGV2cHJpdi0+YWlfc2Nhbl9wb3M7CisJfSBlbHNlIHsKKwkJaWYgKGRldnByaXYtPmFpX2NvbnRpbnVvdXMKKwkJCXx8IChkZXZwcml2LT5haV9zY2FuX2NvdW50CisJCQkJPj0gUENJMjMwX0FEQ19GSUZPTEVWRUxfSEFMRkZVTEwpCisJCQl8fCAoc2NhbmxlbiA+PSBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTCkpIHsKKwkJCXdha2UgPSBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTDsKKwkJfSBlbHNlIHsKKwkJCXdha2UgPSAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCAqIHNjYW5sZW4pCisJCQkJLSBkZXZwcml2LT5haV9zY2FuX3BvczsKKwkJfQorCX0KKwlpZiAod2FrZSA+PSBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTCkgeworCQl0cmlnbGV2ID0gUENJMjMwX0FEQ19JTlRfRklGT19IQUxGOworCX0gZWxzZSB7CisJCWlmICgod2FrZSA+IDEpICYmIChkZXZwcml2LT5od3ZlciA+IDApKSB7CisJCQkvKiBQQ0kyMzArLzI2MCsgcHJvZ3JhbW1hYmxlIEZJRk8gaW50ZXJydXB0IGxldmVsLiAqLworCQkJaWYgKGRldnByaXYtPmFkY2ZpZm90aHJlc2ggIT0gd2FrZSkgeworCQkJCWRldnByaXYtPmFkY2ZpZm90aHJlc2ggPSB3YWtlOworCQkJCW91dHcod2FrZSwgZGV2LT5pb2Jhc2UgKyBQQ0kyMzBQX0FEQ0ZGVEgpOworCQkJfQorCQkJdHJpZ2xldiA9IFBDSTIzMFBfQURDX0lOVF9GSUZPX1RIUkVTSDsKKwkJfSBlbHNlIHsKKwkJCXRyaWdsZXYgPSBQQ0kyMzBfQURDX0lOVF9GSUZPX05FTVBUWTsKKwkJfQorCX0KKwlhZGNjb24gPSAoZGV2cHJpdi0+YWRjY29uICYgflBDSTIzMF9BRENfSU5UX0ZJRk9fTUFTSykgfCB0cmlnbGV2OworCWlmIChhZGNjb24gIT0gZGV2cHJpdi0+YWRjY29uKSB7CisJCWRldnByaXYtPmFkY2NvbiA9IGFkY2NvbjsKKwkJb3V0dyhhZGNjb24sIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0NPTik7CisJfQorfQorCitzdGF0aWMgaW50IHBjaTIzMF9haV9pbnR0cmlnX2NvbnZlcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ19udW0pCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWlmICh0cmlnX251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YWlfc3RvcF9zcGlubG9jaywgaXJxZmxhZ3MpOworCWlmICh0ZXN0X2JpdChBSV9DTURfU1RBUlRFRCwgJmRldnByaXYtPnN0YXRlKSkgeworCQl1bnNpZ25lZCBpbnQgZGVsYXl1czsKKworCQkvKiBUcmlnZ2VyIGNvbnZlcnNpb24gYnkgdG9nZ2xpbmcgWjItQ1QyIG91dHB1dC4gIEZpbmlzaAorCQkgKiB3aXRoIG91dHB1dCBoaWdoLiAqLworCQlpODI1NF9zZXRfbW9kZShkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1oyX0NUX0JBU0UsIDAsIDIsCisJCQlJODI1NF9NT0RFMCk7CisJCWk4MjU0X3NldF9tb2RlKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWjJfQ1RfQkFTRSwgMCwgMiwKKwkJCUk4MjU0X01PREUxKTsKKwkJLyogRGVsYXkuICBTaG91bGQgZHJpdmVyIGJlIHJlc3BvbnNpYmxlIGZvciB0aGlzPyAgQW4KKwkJICogYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8gd2FpdCB1bnRpbCBjb252ZXJzaW9uIGlzIGNvbXBsZXRlLAorCQkgKiBidXQgd2UgY2FuJ3QgdGVsbCB3aGVuIGl0J3MgY29tcGxldGUgYmVjYXVzZSB0aGUgQURDIGJ1c3kKKwkJICogYml0IGhhcyBhIGRpZmZlcmVudCBtZWFuaW5nIHdoZW4gRklGTyBlbmFibGVkIChhbmQgd2hlbgorCQkgKiBGSUZPIG5vdCBlbmFibGVkLCBpdCBvbmx5IHdvcmtzIGZvciBzb2Z0d2FyZSB0cmlnZ2VycykuICovCisJCWlmICgoKGRldnByaXYtPmFkY2NvbiAmIFBDSTIzMF9BRENfSU1fTUFTSykKKwkJCQk9PSBQQ0kyMzBfQURDX0lNX0RJRikKKwkJCSYmIChkZXZwcml2LT5od3ZlciA9PSAwKSkgeworCQkJLyogUENJMjMwLzI2MCBpbiBkaWZmZXJlbnRpYWwgbW9kZSAqLworCQkJZGVsYXl1cyA9IDg7CisJCX0gZWxzZSB7CisJCQkvKiBzaW5nbGUtZW5kZWQgb3IgUENJMjMwKy8yNjArICovCisJCQlkZWxheXVzID0gNDsKKwkJfQorCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YWlfc3RvcF9zcGlubG9jaywKKwkJCWlycWZsYWdzKTsKKwkJY29tZWRpX3VkZWxheShkZWxheXVzKTsKKwl9IGVsc2UgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YWlfc3RvcF9zcGlubG9jaywKKwkJCWlycWZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwY2kyMzBfYWlfaW50dHJpZ19zY2FuX2JlZ2luKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgdW5zaWduZWQgaW50IHRyaWdfbnVtKQoreworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisJdW5zaWduZWQgY2hhciB6Z2F0OworCisJaWYgKHRyaWdfbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5haV9zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJaWYgKHRlc3RfYml0KEFJX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpKSB7CisJCS8qIFRyaWdnZXIgc2NhbiBieSB3YWdnbGluZyBDVDAgZ2F0ZSBzb3VyY2UuICovCisJCXpnYXQgPSBHQVRfQ09ORklHKDAsIEdBVF9HTkQpOworCQlvdXRiKHpnYXQsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWkdBVF9TQ0UpOworCQl6Z2F0ID0gR0FUX0NPTkZJRygwLCBHQVRfVkNDKTsKKwkJb3V0Yih6Z2F0LCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1pHQVRfU0NFKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFpX3N0b3Bfc3BpbmxvY2ssIGlycWZsYWdzKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBwY2kyMzBfYWlfc3RhcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXVuc2lnbmVkIHNob3J0IGNvbnY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisKKwlzZXRfYml0KEFJX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpOworCWlmICghZGV2cHJpdi0+YWlfY29udGludW91cyAmJiAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9PSAwKSkgeworCQkvKiBBbiBlbXB0eSBhY3F1aXNpdGlvbiEgKi8KKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQlwY2kyMzBfYWlfc3RvcChkZXYsIHMpOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgQURDIEZJRk8gdHJpZ2dlciBsZXZlbCBpbnRlcnJ1cHQuICovCisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+aXNyX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJCWRldnByaXYtPmludF9lbiB8PSBQQ0kyMzBfSU5UX0FEQzsKKwkJZGV2cHJpdi0+aWVyIHw9IFBDSTIzMF9JTlRfQURDOworCQlvdXRiKGRldnByaXYtPmllciwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywgaXJxZmxhZ3MpOworCisJCS8qIFVwZGF0ZSBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlIHdoaWNoIGlzIGN1cnJlbnRseSBzZXQKKwkJICogdG8gQ1QyIG91dHB1dCwgd2hpY2ggaXMgY3VycmVudGx5IHN0dWNrIGhpZ2guICovCisJCXN3aXRjaCAoY21kLT5jb252ZXJ0X3NyYykgeworCQlkZWZhdWx0OgorCQkJY29udiA9IFBDSTIzMF9BRENfVFJJR19OT05FOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19USU1FUjoKKwkJCS8qIFVzaW5nIENUMiBvdXRwdXQuICovCisJCQljb252ID0gUENJMjMwX0FEQ19UUklHX1oyQ1QyOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19FWFQ6CisJCQlpZiAoKGNtZC0+Y29udmVydF9hcmcgJiBDUl9FREdFKSAhPSAwKSB7CisJCQkJaWYgKChjbWQtPmNvbnZlcnRfYXJnICYgQ1JfSU5WRVJUKSA9PSAwKSB7CisJCQkJCS8qIFRyaWdnZXIgb24gK3ZlIGVkZ2UuICovCisJCQkJCWNvbnYgPSBQQ0kyMzBfQURDX1RSSUdfRVhUUDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUcmlnZ2VyIG9uIC12ZSBlZGdlLiAqLworCQkJCQljb252ID0gUENJMjMwX0FEQ19UUklHX0VYVE47CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gKi8KKwkJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCQkJCS8qIFRyaWdnZXIgb24gK3ZlIGVkZ2UuICovCisJCQkJCWNvbnYgPSBQQ0kyMzBfQURDX1RSSUdfRVhUUDsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBUcmlnZ2VyIG9uIC12ZSBlZGdlLiAqLworCQkJCQljb252ID0gUENJMjMwX0FEQ19UUklHX0VYVE47CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVFJJR19JTlQ6CisJCQkvKiBVc2UgQ1QyIG91dHB1dCBmb3Igc29mdHdhcmUgdHJpZ2dlciBkdWUgdG8gcHJvYmxlbXMKKwkJCSAqIGluIGRpZmZlcmVudGlhbCBtb2RlIG9uIFBDSTIzMC8yNjAuICovCisJCQljb252ID0gUENJMjMwX0FEQ19UUklHX1oyQ1QyOworCQkJYnJlYWs7CisJCX0KKwkJZGV2cHJpdi0+YWRjY29uID0gKGRldnByaXYtPmFkY2NvbiAmIH5QQ0kyMzBfQURDX1RSSUdfTUFTSykKKwkJCXwgY29udjsKKwkJb3V0dyhkZXZwcml2LT5hZGNjb24sIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0NPTik7CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfSU5UKSB7CisJCQlhc3luYy0+aW50dHJpZyA9IHBjaTIzMF9haV9pbnR0cmlnX2NvbnZlcnQ7CisJCX0KKwkJLyogVXBkYXRlIEZJRk8gaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwsIHdoaWNoIGlzIGN1cnJlbnRseQorCQkgKiBzZXQgdG8gImZ1bGwiLiAgKi8KKwkJcGNpMjMwX2FpX3VwZGF0ZV9maWZvX3RyaWdnZXJfbGV2ZWwoZGV2LCBzKTsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQkJLyogVXBkYXRlIHRpbWVyIGdhdGVzLiAqLworCQkJdW5zaWduZWQgY2hhciB6Z2F0OworCisJCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgeworCQkJCS8qIENvbnZlcnNpb24gdGltZXIgQ1QyIG5lZWRzIHRvIGJlIGdhdGVkIGJ5CisJCQkJICogaW52ZXJ0ZWQgb3V0cHV0IG9mIG1vbm9zdGFibGUgQ1QyLiAqLworCQkJCXpnYXQgPSBHQVRfQ09ORklHKDIsIEdBVF9OT1VUTk0yKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogQ29udmVyc2lvbiB0aW1lciBDVDIgbmVlZHMgdG8gYmUgZ2F0ZWQgb24KKwkJCQkgKiBjb250aW51b3VzbHkuICovCisJCQkJemdhdCA9IEdBVF9DT05GSUcoMiwgR0FUX1ZDQyk7CisJCQl9CisJCQlvdXRiKHpnYXQsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWkdBVF9TQ0UpOworCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpIHsKKwkJCQkvKiBTZXQgbW9ub3N0YWJsZSBDVDAgdHJpZ2dlciBzb3VyY2UuICovCisJCQkJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJCQkJZGVmYXVsdDoKKwkJCQkJemdhdCA9IEdBVF9DT05GSUcoMCwgR0FUX1ZDQyk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVFJJR19FWFQ6CisJCQkJCS8qCisJCQkJCSAqIEZvciBDVDAgb24gUENJMjMwLCB0aGUgZXh0ZXJuYWwKKwkJCQkJICogdHJpZ2dlciAoZ2F0ZSkgc2lnbmFsIGNvbWVzIGZyb20KKwkJCQkJICogUFBDMCwgd2hpY2ggaXMgY2hhbm5lbCAxNiBvZiB0aGUgRElPCisJCQkJCSAqIHN1YmRldmljZS4gIFRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0bworCQkJCQkgKiBjb25maWd1cmUgdGhpcyBhcyBhbiBpbnB1dCBpbiBvcmRlcgorCQkJCQkgKiB0byB1c2UgaXQgYXMgYW4gZXh0ZXJuYWwgc2NhbgorCQkJCQkgKiB0cmlnZ2VyLgorCQkJCQkgKi8KKwkJCQkJemdhdCA9IEdBVF9DT05GSUcoMCwgR0FUX0VYVCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVFJJR19USU1FUjoKKwkJCQkJLyoKKwkJCQkJICogTW9ub3N0YWJsZSBDVDAgdHJpZ2dlcmVkIGJ5IHJpc2luZworCQkJCQkgKiBlZGdlIG9uIGludmVydGVkIG91dHB1dCBvZiBDVDEKKwkJCQkJICogKGZhbGxpbmcgZWRnZSBvbiBDVDEpLgorCQkJCQkgKi8KKwkJCQkJemdhdCA9IEdBVF9DT05GSUcoMCwgR0FUX05PVVROTTIpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFRSSUdfSU5UOgorCQkJCQkvKgorCQkJCQkgKiBNb25vc3RhYmxlIENUMCBpcyB0cmlnZ2VyZWQgYnkKKwkJCQkJICogaW50dHJpZyBmdW5jdGlvbiB3YWdnbGluZyB0aGUgQ1QwCisJCQkJCSAqIGdhdGUgc291cmNlLgorCQkJCQkgKi8KKwkJCQkJemdhdCA9IEdBVF9DT05GSUcoMCwgR0FUX1ZDQyk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlvdXRiKHpnYXQsIGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWkdBVF9TQ0UpOworCQkJCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCQkJCWNhc2UgVFJJR19USU1FUjoKKwkJCQkJLyogU2NhbiBwZXJpb2QgdGltZXIgQ1QxIG5lZWRzIHRvIGJlCisJCQkJCSAqIGdhdGVkIG9uIHRvIHN0YXJ0IGNvdW50aW5nLiAqLworCQkJCQl6Z2F0ID0gR0FUX0NPTkZJRygxLCBHQVRfVkNDKTsKKwkJCQkJb3V0Yih6Z2F0LCBkZXZwcml2LT5pb2Jhc2UxCisJCQkJCQkrIFBDSTIzMF9aR0FUX1NDRSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVFJJR19JTlQ6CisJCQkJCWFzeW5jLT5pbnR0cmlnID0KKwkJCQkJCXBjaTIzMF9haV9pbnR0cmlnX3NjYW5fYmVnaW47CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfSU5UKSB7CisJCQkvKiBObyBsb25nZXIgbmVlZCBaMi1DVDIuICovCisJCQlwdXRfb25lX3Jlc291cmNlKGRldiwgUkVTX1oyQ1QyLCBPV05FUl9BSUNNRCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgcGNpMjMwX2FpX2ludHRyaWdfc3RhcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ19udW0pCit7CisJaWYgKHRyaWdfbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMRlVOQzsKKwlwY2kyMzBfYWlfc3RhcnQoZGV2LCBzKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBjaTIzMF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgY2hhbiwgcmFuZ2UsIGRpZmY7CisJdW5zaWduZWQgaW50IHJlc19tYXNrOworCXVuc2lnbmVkIHNob3J0IGFkY2NvbiwgYWRjZW47CisJdW5zaWduZWQgY2hhciB6Z2F0OworCisJLyogR2V0IHRoZSBjb21tYW5kLiAqLworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCisJLyoKKwkgKiBEZXRlcm1pbmUgd2hpY2ggc2hhcmVkIHJlc291cmNlcyBhcmUgbmVlZGVkLgorCSAqLworCXJlc19tYXNrID0gMDsKKwkvKiBOZWVkIFoyLUNUMiB0byBzdXBwbHkgYSBjb252ZXJzaW9uIHRyaWdnZXIgc291cmNlIGF0IGEgaGlnaAorCSAqIGxvZ2ljIGxldmVsLCBldmVuIGlmIG5vdCBkb2luZyB0aW1lZCBjb252ZXJzaW9ucy4gKi8KKwlyZXNfbWFzayB8PSAoMVUgPDwgUkVTX1oyQ1QyKTsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgeworCQkvKiBVc2luZyBaMi1DVDAgbW9ub3N0YWJsZSB0byBnYXRlIFoyLUNUMiBjb252ZXJzaW9uIHRpbWVyICovCisJCXJlc19tYXNrIHw9ICgxVSA8PCBSRVNfWjJDVDApOworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQkvKiBVc2luZyBaMi1DVDEgZm9yIHNjYW4gZnJlcXVlbmN5ICovCisJCQlyZXNfbWFzayB8PSAoMVUgPDwgUkVTX1oyQ1QxKTsKKwkJfQorCX0KKwkvKiBDbGFpbSByZXNvdXJjZXMuICovCisJaWYgKCFnZXRfcmVzb3VyY2VzKGRldiwgcmVzX21hc2ssIE9XTkVSX0FJQ01EKSkgeworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIEdldCBudW1iZXIgb2Ygc2NhbnMgcmVxdWlyZWQuICovCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5haV9zY2FuX2NvdW50ID0gY21kLT5zdG9wX2FyZzsKKwkJZGV2cHJpdi0+YWlfY29udGludW91cyA9IDA7CisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FLCB1c2VyIGNhbGxzIGNhbmNlbC4gKi8KKwkJZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9IDA7CisJCWRldnByaXYtPmFpX2NvbnRpbnVvdXMgPSAxOworCX0KKwlkZXZwcml2LT5haV9zY2FuX3BvcyA9IDA7CS8qIFBvc2l0aW9uIHdpdGhpbiBzY2FuLiAqLworCisJLyogU3RlcHM7CisJICogLSBTZXQgY2hhbm5lbCBzY2FuIGxpc3QuCisJICogLSBTZXQgY2hhbm5lbCBnYWlucy4KKwkgKiAtIEVuYWJsZSBhbmQgcmVzZXQgRklGTywgc3BlY2lmeSB1bmkvYmlwLCBzZS9kaWZmLCBhbmQgc2V0CisJICogICBzdGFydCBjb252ZXJzaW9uIHNvdXJjZSB0byBwb2ludCB0byBzb21ldGhpbmcgYXQgYSBoaWdoIGxvZ2ljCisJICogICBsZXZlbCAod2UgdXNlIHRoZSBvdXRwdXQgb2YgY291bnRlci90aW1lciAyIGZvciB0aGlzIHB1cnBvc2UuCisJICogLSBQQVVTRSB0byBhbGxvdyB0aGluZ3MgdG8gc2V0dGxlIGRvd24uCisJICogLSBSZXNldCB0aGUgRklGTyBhZ2FpbiBiZWNhdXNlIGl0IG5lZWRzIHJlc2V0dGluZyB0d2ljZSBhbmQgdGhlcmUKKwkgKiAgIG1heSBoYXZlIGJlZW4gYSBmYWxzZSBjb252ZXJzaW9uIHRyaWdnZXIgb24gc29tZSB2ZXJzaW9ucyBvZgorCSAqICAgUENJMjMwLzI2MCBkdWUgdG8gdGhlIHN0YXJ0IGNvbnZlcnNpb24gc291cmNlIGJlaW5nIHNldCB0byBhCisJICogICBoaWdoIGxvZ2ljIGxldmVsLgorCSAqIC0gRW5hYmxlIEFEQyBGSUZPIGxldmVsIGludGVycnVwdC4KKwkgKiAtIFNldCBhY3R1YWwgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZSBhbmQgRklGTyBpbnRlcnJ1cHQgdHJpZ2dlcgorCSAqICAgbGV2ZWwuCisJICogLSBJZiBjb252ZXJ0X3NyYyBpcyBUUklHX1RJTUVSLCBzZXQgdXAgdGhlIHRpbWVycy4KKwkgKi8KKworCWFkY2NvbiA9IFBDSTIzMF9BRENfRklGT19FTjsKKwlhZGNlbiA9IDA7CisKKwlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKSA9PSBBUkVGX0RJRkYpIHsKKwkJLyogRGlmZmVyZW50aWFsIC0gYWxsIGNoYW5uZWxzIG11c3QgYmUgZGlmZmVyZW50aWFsLiAqLworCQlkaWZmID0gMTsKKwkJYWRjY29uIHw9IFBDSTIzMF9BRENfSU1fRElGOworCX0gZWxzZSB7CisJCS8qIFNpbmdsZSBlbmRlZCAtIGFsbCBjaGFubmVscyBtdXN0IGJlIHNpbmdsZS1lbmRlZC4gKi8KKwkJZGlmZiA9IDA7CisJCWFkY2NvbiB8PSBQQ0kyMzBfQURDX0lNX1NFOworCX0KKworCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJZGV2cHJpdi0+YWlfYmlwb2xhciA9IHBjaTIzMF9haV9iaXBvbGFyW3JhbmdlXTsKKwlpZiAoZGV2cHJpdi0+YWlfYmlwb2xhcikgeworCQlhZGNjb24gfD0gUENJMjMwX0FEQ19JUl9CSVA7CisJfSBlbHNlIHsKKwkJYWRjY29uIHw9IFBDSTIzMF9BRENfSVJfVU5JOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQl1bnNpZ25lZCBpbnQgZ2FpbnNoaWZ0OworCisJCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOworCQlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCQlpZiAoZGlmZikgeworCQkJZ2FpbnNoaWZ0ID0gMiAqIGNoYW47CisJCQlpZiAoZGV2cHJpdi0+aHd2ZXIgPT0gMCkgeworCQkJCS8qIE9yaWdpbmFsIFBDSTIzMC8yNjAgZXhwZWN0cyBib3RoIGlucHV0cyBvZgorCQkJCSAqIHRoZSBkaWZmZXJlbnRpYWwgY2hhbm5lbCB0byBiZSBlbmFibGVkLiAqLworCQkJCWFkY2VuIHw9IDMgPDwgZ2FpbnNoaWZ0OworCQkJfSBlbHNlIHsKKwkJCQkvKiBQQ0kyMzArLzI2MCsgZXhwZWN0cyBvbmx5IG9uZSBpbnB1dCBvZiB0aGUKKwkJCQkgKiBkaWZmZXJlbnRpYWwgY2hhbm5lbCB0byBiZSBlbmFibGVkLiAqLworCQkJCWFkY2VuIHw9IDEgPDwgZ2FpbnNoaWZ0OworCQkJfQorCQl9IGVsc2UgeworCQkJZ2FpbnNoaWZ0ID0gKGNoYW4gJiB+MSk7CisJCQlhZGNlbiB8PSAxIDw8IGNoYW47CisJCX0KKwkJZGV2cHJpdi0+YWRjZyA9IChkZXZwcml2LT5hZGNnICYgfigzIDw8IGdhaW5zaGlmdCkpCisJCQl8IChwY2kyMzBfYWlfZ2FpbltyYW5nZV0gPDwgZ2FpbnNoaWZ0KTsKKwl9CisKKwkvKiBTZXQgY2hhbm5lbCBzY2FuIGxpc3QuICovCisJb3V0dyhhZGNlbiwgZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfQURDRU4pOworCisJLyogU2V0IGNoYW5uZWwgZ2FpbnMuICovCisJb3V0dyhkZXZwcml2LT5hZGNnLCBkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENHKTsKKworCS8qIFNldCBjb3VudGVyL3RpbWVyIDIgb3V0cHV0IGhpZ2ggZm9yIHVzZSBhcyB0aGUgaW5pdGlhbCBzdGFydAorCSAqIGNvbnZlcnNpb24gc291cmNlLiAqLworCWk4MjU0X3NldF9tb2RlKGRldnByaXYtPmlvYmFzZTEgKyBQQ0kyMzBfWjJfQ1RfQkFTRSwgMCwgMiwgSTgyNTRfTU9ERTEpOworCisJLyogVGVtcG9yYXJpbHkgdXNlIENUMiBvdXRwdXQgYXMgY29udmVyc2lvbiB0cmlnZ2VyIHNvdXJjZSBhbmQKKwkgKiB0ZW1wb3JhcmlseSBzZXQgRklGTyBpbnRlcnJ1cHQgdHJpZ2dlciBsZXZlbCB0byAnZnVsbCcuICovCisJYWRjY29uIHw9IFBDSTIzMF9BRENfSU5UX0ZJRk9fRlVMTCB8IFBDSTIzMF9BRENfVFJJR19aMkNUMjsKKworCS8qIEVuYWJsZSBhbmQgcmVzZXQgRklGTywgc3BlY2lmeSBGSUZPIHRyaWdnZXIgbGV2ZWwgZnVsbCwgc3BlY2lmeQorCSAqIHVuaS9iaXAsIHNlL2RpZmYsIGFuZCB0ZW1wb3JhcmlseSBzZXQgdGhlIHN0YXJ0IGNvbnZlcnNpb24gc291cmNlCisJICogdG8gQ1QyIG91dHB1dC4gIE5vdGUgdGhhdCBDVDIgb3V0cHV0IGlzIGN1cnJlbnRseSBoaWdoLCBhbmQgdGhpcworCSAqIHdpbGwgcHJvZHVjZSBhIGZhbHNlIGNvbnZlcnNpb24gdHJpZ2dlciBvbiBzb21lIHZlcnNpb25zIG9mIHRoZQorCSAqIFBDSTIzMC8yNjAsIGJ1dCB0aGF0IHdpbGwgYmUgZGVhbHQgd2l0aCBsYXRlci4gKi8KKwlkZXZwcml2LT5hZGNjb24gPSBhZGNjb247CisJb3V0dyhhZGNjb24gfCBQQ0kyMzBfQURDX0ZJRk9fUkVTRVQsIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0NPTik7CisKKwkvKiBEZWxheSAqLworCS8qIEZhaWx1cmUgdG8gaW5jbHVkZSB0aGlzIHdpbGwgcmVzdWx0IGluIHRoZSBmaXJzdCBmZXcgY2hhbm5lbHMnLXdvcnRoCisJICogb2YgZGF0YSBiZWluZyBjb3JydXB0LCBub3JtYWxseSBtYW5pZmVzdGluZyBpdHNlbGYgYnkgbGFyZ2UgbmVnYXRpdmUKKwkgKiB2b2x0YWdlcy4gSXQgc2VlbXMgdGhlIGJvYXJkIG5lZWRzIHRpbWUgdG8gc2V0dGxlIGJldHdlZW4gdGhlIGZpcnN0CisJICogRklGTyByZXNldCAoYWJvdmUpIGFuZCB0aGUgc2Vjb25kIEZJRk8gcmVzZXQgKGJlbG93KS4gU2V0dGluZyB0aGUKKwkgKiBjaGFubmVsIGdhaW5zIGFuZCBzY2FuIGxpc3QgX2JlZm9yZV8gdGhlIGZpcnN0IEZJRk8gcmVzZXQgYWxzbworCSAqIGhlbHBzLCB0aG91Z2ggb25seSBzbGlnaHRseS4gKi8KKwljb21lZGlfdWRlbGF5KDI1KTsKKworCS8qIFJlc2V0IEZJRk8gYWdhaW4uICovCisJb3V0dyhhZGNjb24gfCBQQ0kyMzBfQURDX0ZJRk9fUkVTRVQsIGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0NPTik7CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCS8qIFNldCB1cCBDVDIgYXMgY29udmVyc2lvbiB0aW1lciwgYnV0IGdhdGUgaXQgb2ZmIGZvciBub3cuCisJCSAqIE5vdGUsIGNvdW50ZXIvdGltZXIgb3V0cHV0IDIgY2FuIGJlIG1vbml0b3JlZCBvbiB0aGUKKwkJICogY29ubmVjdG9yOiBQQ0kyMzAgcGluIDIxLCBQQ0kyNjAgcGluIDE4LiAqLworCQl6Z2F0ID0gR0FUX0NPTkZJRygyLCBHQVRfR05EKTsKKwkJb3V0Yih6Z2F0LCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1pHQVRfU0NFKTsKKwkJLyogU2V0IGNvdW50ZXIvdGltZXIgMiB0byB0aGUgc3BlY2lmaWVkIGNvbnZlcnNpb24gcGVyaW9kLiAqLworCQlwY2kyMzBfY3Rfc2V0dXBfbnNfbW9kZShkZXYsIDIsIEk4MjU0X01PREUzLCBjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKSB7CisJCQkvKgorCQkJICogU2V0IHVwIG1vbm9zdGFibGUgb24gQ1QwIG91dHB1dCBmb3Igc2NhbiB0aW1pbmcuICBBCisJCQkgKiByaXNpbmcgZWRnZSBvbiB0aGUgdHJpZ2dlciAoZ2F0ZSkgaW5wdXQgb2YgQ1QwIHdpbGwKKwkJCSAqIHRyaWdnZXIgdGhlIG1vbm9zdGFibGUsIGNhdXNpbmcgaXRzIG91dHB1dCB0byBnbyBsb3cKKwkJCSAqIGZvciB0aGUgY29uZmlndXJlZCBwZXJpb2QuICBUaGUgcGVyaW9kIGRlcGVuZHMgb24KKwkJCSAqIHRoZSBjb252ZXJzaW9uIHBlcmlvZCBhbmQgdGhlIG51bWJlciBvZiBjb252ZXJzaW9ucworCQkJICogaW4gdGhlIHNjYW4uCisJCQkgKgorCQkJICogU2V0IHRoZSB0cmlnZ2VyIGhpZ2ggYmVmb3JlIHNldHRpbmcgdXAgdGhlCisJCQkgKiBtb25vc3RhYmxlIHRvIHN0b3AgaXQgdHJpZ2dlcmluZy4gIFRoZSB0cmlnZ2VyCisJCQkgKiBzb3VyY2Ugd2lsbCBiZSBjaGFuZ2VkIGxhdGVyLgorCQkJICovCisJCQl6Z2F0ID0gR0FUX0NPTkZJRygwLCBHQVRfVkNDKTsKKwkJCW91dGIoemdhdCwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aR0FUX1NDRSk7CisJCQlwY2kyMzBfY3Rfc2V0dXBfbnNfbW9kZShkZXYsIDAsIEk4MjU0X01PREUxLAorCQkJCSgodWludDY0X3QpIGNtZC0+Y29udmVydF9hcmcKKwkJCQkJKiBjbWQtPnNjYW5fZW5kX2FyZyksIFRSSUdfUk9VTkRfVVApOworCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkJCS8qCisJCQkJICogTW9ub3N0YWJsZSBvbiBDVDAgd2lsbCBiZSB0cmlnZ2VyZWQgYnkKKwkJCQkgKiBvdXRwdXQgb2YgQ1QxIGF0IGNvbmZpZ3VyZWQgc2NhbiBmcmVxdWVuY3kuCisJCQkJICoKKwkJCQkgKiBTZXQgdXAgQ1QxIGJ1dCBnYXRlIGl0IG9mZiBmb3Igbm93LgorCQkJCSAqLworCQkJCXpnYXQgPSBHQVRfQ09ORklHKDEsIEdBVF9HTkQpOworCQkJCW91dGIoemdhdCwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aR0FUX1NDRSk7CisJCQkJcGNpMjMwX2N0X3NldHVwX25zX21vZGUoZGV2LCAxLCBJODI1NF9NT0RFMywKKwkJCQkJY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19JTlQpIHsKKwkJcy0+YXN5bmMtPmludHRyaWcgPSBwY2kyMzBfYWlfaW50dHJpZ19zdGFydDsKKwl9IGVsc2UgeworCQkvKiBUUklHX05PVyAqLworCQlwY2kyMzBfYWlfc3RhcnQoZGV2LCBzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBkaXZpZGVfbnModWludDY0X3QgbnMsIHVuc2lnbmVkIGludCB0aW1lYmFzZSwKKwl1bnNpZ25lZCBpbnQgcm91bmRfbW9kZSkKK3sKKwl1aW50NjRfdCBkaXY7CisJdW5zaWduZWQgaW50IHJlbTsKKworCWRpdiA9IG5zOworCXJlbSA9IGRvX2RpdihkaXYsIHRpbWViYXNlKTsKKwlyb3VuZF9tb2RlICY9IFRSSUdfUk9VTkRfTUFTSzsKKwlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKKwlkZWZhdWx0OgorCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCQlkaXYgKz0gKHJlbSArICh0aW1lYmFzZSAvIDIpKSAvIHRpbWViYXNlOworCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX1VQOgorCQlkaXYgKz0gKHJlbSArIHRpbWViYXNlIC0gMSkgLyB0aW1lYmFzZTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBkaXYgPiBVSU5UX01BWCA/IFVJTlRfTUFYIDogKHVuc2lnbmVkIGludClkaXY7Cit9CisKKy8qIEdpdmVuIGRlc2lyZWQgcGVyaW9kIGluIG5zLCByZXR1cm5zIHRoZSByZXF1aXJlZCBpbnRlcm5hbCBjbG9jayBzb3VyY2UKKyAqIGFuZCBnZXRzIHRoZSBpbml0aWFsIGNvdW50LiAqLworc3RhdGljIHVuc2lnbmVkIGludCBwY2kyMzBfY2hvb3NlX2Nsa19jb3VudCh1aW50NjRfdCBucywgdW5zaWduZWQgaW50ICpjb3VudCwKKwl1bnNpZ25lZCBpbnQgcm91bmRfbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgY2xrX3NyYywgY250OworCisJZm9yIChjbGtfc3JjID0gQ0xLXzEwTUhaOzsgY2xrX3NyYysrKSB7CisJCWNudCA9IGRpdmlkZV9ucyhucywgcGNpMjMwX3RpbWViYXNlW2Nsa19zcmNdLCByb3VuZF9tb2RlKTsKKwkJaWYgKChjbnQgPD0gNjU1MzYpIHx8IChjbGtfc3JjID09IENMS18xS0haKSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJKmNvdW50ID0gY250OworCXJldHVybiBjbGtfc3JjOworfQorCitzdGF0aWMgdm9pZCBwY2kyMzBfbnNfdG9fc2luZ2xlX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIHVuc2lnbmVkIGludCByb3VuZCkKK3sKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJdW5zaWduZWQgaW50IGNsa19zcmM7CisKKwljbGtfc3JjID0gcGNpMjMwX2Nob29zZV9jbGtfY291bnQoKm5zLCAmY291bnQsIHJvdW5kKTsKKwkqbnMgPSBjb3VudCAqIHBjaTIzMF90aW1lYmFzZVtjbGtfc3JjXTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHBjaTIzMF9jdF9zZXR1cF9uc19tb2RlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY3QsCisJdW5zaWduZWQgaW50IG1vZGUsIHVpbnQ2NF90IG5zLCB1bnNpZ25lZCBpbnQgcm91bmQpCit7CisJdW5zaWduZWQgaW50IGNsa19zcmM7CisJdW5zaWduZWQgaW50IGNvdW50OworCisJLyogU2V0IG1vZGUuICovCisJaTgyNTRfc2V0X21vZGUoZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9aMl9DVF9CQVNFLCAwLCBjdCwgbW9kZSk7CisJLyogRGV0ZXJtaW5lIGNsb2NrIHNvdXJjZSBhbmQgY291bnQuICovCisJY2xrX3NyYyA9IHBjaTIzMF9jaG9vc2VfY2xrX2NvdW50KG5zLCAmY291bnQsIHJvdW5kKTsKKwkvKiBQcm9ncmFtIGNsb2NrIHNvdXJjZS4gKi8KKwlvdXRiKENMS19DT05GSUcoY3QsIGNsa19zcmMpLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1pDTEtfU0NFKTsKKwkvKiBTZXQgaW5pdGlhbCBjb3VudC4gKi8KKwlpZiAoY291bnQgPj0gNjU1MzYpIHsKKwkJY291bnQgPSAwOworCX0KKwlpODI1NF93cml0ZShkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1oyX0NUX0JBU0UsIDAsIGN0LCBjb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHBjaTIzMF9jYW5jZWxfY3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjdCkKK3sKKwlpODI1NF9zZXRfbW9kZShkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX1oyX0NUX0JBU0UsIDAsIGN0LAorCQlJODI1NF9NT0RFMSk7CisJLyogQ291bnRlciBjdCwgODI1NCBtb2RlIDEsIGluaXRpYWwgY291bnQgbm90IHdyaXR0ZW4uICovCit9CisKKy8qIEludGVycnVwdCBoYW5kbGVyICovCitzdGF0aWMgaXJxcmV0dXJuX3QgcGNpMjMwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXVuc2lnbmVkIGNoYXIgc3RhdHVzX2ludCwgdmFsaWRfc3RhdHVzX2ludDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCS8qIFJlYWQgaW50ZXJydXB0IHN0YXR1cy9lbmFibGUgcmVnaXN0ZXIuICovCisJc3RhdHVzX2ludCA9IGluYihkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX0lOVF9TVEFUKTsKKworCWlmIChzdGF0dXNfaW50ID09IFBDSTIzMF9JTlRfRElTQUJMRSkgeworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwl2YWxpZF9zdGF0dXNfaW50ID0gZGV2cHJpdi0+aW50X2VuICYgc3RhdHVzX2ludDsKKwkvKiBEaXNhYmxlIHRyaWdnZXJlZCBpbnRlcnJ1cHRzLgorCSAqIChPbmx5IHRob3NlIGludGVycnVwdHMgdGhhdCBuZWVkIHJlLWVuYWJsaW5nLCBhcmUsIGxhdGVyIGluIHRoZQorCSAqIGhhbmRsZXIpLiAgKi8KKwlkZXZwcml2LT5pZXIgPSBkZXZwcml2LT5pbnRfZW4gJiB+c3RhdHVzX2ludDsKKwlvdXRiKGRldnByaXYtPmllciwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKwlkZXZwcml2LT5pbnRyX3J1bm5pbmcgPSAxOworCWRldnByaXYtPmludHJfY3B1aWQgPSBUSElTQ1BVOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKworCS8qCisJICogQ2hlY2sgdGhlIHNvdXJjZSBvZiBpbnRlcnJ1cHQgYW5kIGhhbmRsZSBpdC4KKwkgKiBUaGUgUENJMjMwIGNhbiBjb3BlIHdpdGggY29uY3VycmVudCBBREMsIERBQywgUFBJIEMwIGFuZCBDMworCSAqIGludGVycnVwdHMuICBIb3dldmVyLCBhdCBwcmVzZW50IChDb21lZGktMC43LjYwKSBkb2VzIG5vdCBhbGxvdworCSAqIGNvbmN1cnJlbnQgZXhlY3V0aW9uIG9mIGNvbW1hbmRzLCBpbnN0cnVjdGlvbnMgb3IgYSBtaXh0dXJlIG9mIHRoZQorCSAqIHR3by4KKwkgKi8KKworCWlmICgodmFsaWRfc3RhdHVzX2ludCAmIFBDSTIzMF9JTlRfWkNMS19DVDEpICE9IDApIHsKKwkJcyA9IGRldi0+d3JpdGVfc3ViZGV2OworCQlwY2kyMzBfaGFuZGxlX2FvX25vZmlmbyhkZXYsIHMpOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwlpZiAoKHZhbGlkX3N0YXR1c19pbnQgJiBQQ0kyMzBQMl9JTlRfREFDKSAhPSAwKSB7CisJCXMgPSBkZXYtPndyaXRlX3N1YmRldjsKKwkJcGNpMjMwX2hhbmRsZV9hb19maWZvKGRldiwgcyk7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCWlmICgodmFsaWRfc3RhdHVzX2ludCAmIFBDSTIzMF9JTlRfQURDKSAhPSAwKSB7CisJCXMgPSBkZXYtPnJlYWRfc3ViZGV2OworCQlwY2kyMzBfaGFuZGxlX2FpKGRldiwgcyk7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCS8qIFJlZW5hYmxlIGludGVycnVwdHMuICovCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwlpZiAoZGV2cHJpdi0+aWVyICE9IGRldnByaXYtPmludF9lbikgeworCQlkZXZwcml2LT5pZXIgPSBkZXZwcml2LT5pbnRfZW47CisJCW91dGIoZGV2cHJpdi0+aWVyLCBkZXZwcml2LT5pb2Jhc2UxICsgUENJMjMwX0lOVF9TQ0UpOworCX0KKwlkZXZwcml2LT5pbnRyX3J1bm5pbmcgPSAwOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgcGNpMjMwX2hhbmRsZV9hb19ub2ZpZm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzaG9ydCBkYXRhOworCWludCBpLCByZXQ7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisKKwlpZiAoIWRldnByaXYtPmFvX2NvbnRpbnVvdXMgJiYgKGRldnByaXYtPmFvX3NjYW5fY291bnQgPT0gMCkpIHsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCS8qIFJlYWQgc2FtcGxlIGZyb20gQ29tZWRpJ3MgY2lyY3VsYXIgYnVmZmVyLiAqLworCQlyZXQgPSBjb21lZGlfYnVmX2dldChzLT5hc3luYywgJmRhdGEpOworCQlpZiAocmV0ID09IDApIHsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOworCQkJcGNpMjMwX2FvX3N0b3AoZGV2LCBzKTsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBTyBidWZmZXIgdW5kZXJydW4iKTsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBXcml0ZSB2YWx1ZSB0byBEQUMuICovCisJCXBjaTIzMF9hb193cml0ZV9ub2ZpZm8oZGV2LCBkYXRhLCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pKTsKKwl9CisKKwlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSyB8IENPTUVESV9DQl9FT1M7CisJaWYgKCFkZXZwcml2LT5hb19jb250aW51b3VzKSB7CisJCWRldnByaXYtPmFvX3NjYW5fY291bnQtLTsKKwkJaWYgKGRldnByaXYtPmFvX3NjYW5fY291bnQgPT0gMCkgeworCQkJLyogRW5kIG9mIGFjcXVpc2l0aW9uLiAqLworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJcGNpMjMwX2FvX3N0b3AoZGV2LCBzKTsKKwkJfQorCX0KK30KKworLyogTG9hZHMgREFDIEZJRk8gKGlmIHVzaW5nIGl0KSBmcm9tIGJ1ZmZlci4gKi8KKy8qIFJldHVybnMgMCBpZiBBTyBmaW5pc2hlZCBkdWUgdG8gY29tcGxldGlvbiBvciBlcnJvciwgMSBpZiBzdGlsbCBnb2luZy4gKi8KK3N0YXRpYyBpbnQgcGNpMjMwX2hhbmRsZV9hb19maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgaW50IG51bV9zY2FuczsKKwl1bnNpZ25lZCBpbnQgcm9vbTsKKwl1bnNpZ25lZCBzaG9ydCBkYWNzdGF0OworCXVuc2lnbmVkIGludCBpLCBuOworCXVuc2lnbmVkIGludCBieXRlc19wZXJfc2NhbjsKKwl1bnNpZ25lZCBpbnQgZXZlbnRzID0gMDsKKwlpbnQgcnVubmluZzsKKworCS8qIEdldCBEQUMgRklGTyBzdGF0dXMuICovCisJZGFjc3RhdCA9IGludyhkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCisJLyogRGV0ZXJtaW5lIG51bWJlciBvZiBzY2FucyBhdmFpbGFibGUgaW4gYnVmZmVyLiAqLworCWJ5dGVzX3Blcl9zY2FuID0gY21kLT5jaGFubGlzdF9sZW4gKiBzaXplb2Yoc2hvcnQpOworCW51bV9zY2FucyA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShhc3luYykgLyBieXRlc19wZXJfc2NhbjsKKwlpZiAoIWRldnByaXYtPmFvX2NvbnRpbnVvdXMpIHsKKwkJLyogRml4ZWQgbnVtYmVyIG9mIHNjYW5zLiAqLworCQlpZiAobnVtX3NjYW5zID4gZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCkgeworCQkJbnVtX3NjYW5zID0gZGV2cHJpdi0+YW9fc2Nhbl9jb3VudDsKKwkJfQorCQlpZiAoZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCA9PSAwKSB7CisJCQkvKiBFbmQgb2YgYWNxdWlzaXRpb24uICovCisJCQlldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorCX0KKwlpZiAoZXZlbnRzID09IDApIHsKKwkJLyogQ2hlY2sgZm9yIEZJRk8gdW5kZXJydW4uICovCisJCWlmICgoZGFjc3RhdCAmIFBDSTIzMFAyX0RBQ19GSUZPX1VOREVSUlVOX0xBVENIRUQpICE9IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBTyBGSUZPIHVuZGVycnVuIik7CisJCQlldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XIHwgQ09NRURJX0NCX0VSUk9SOworCQl9CisJCS8qIENoZWNrIGZvciBidWZmZXIgdW5kZXJydW4gaWYgRklGTyBsZXNzIHRoYW4gaGFsZiBmdWxsCisJCSAqIChvdGhlcndpc2UgdGhlcmUgd2lsbCBiZSBsb2FkcyBvZiAiREFDIEZJRk8gbm90IGhhbGYgZnVsbCIKKwkJICogaW50ZXJydXB0cykuICovCisJCWlmICgobnVtX3NjYW5zID09IDApCisJCQkmJiAoKGRhY3N0YXQgJiBQQ0kyMzBQMl9EQUNfRklGT19IQUxGKSA9PSAwKSkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgIkFPIGJ1ZmZlciB1bmRlcnJ1biIpOworCQkJZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVyB8IENPTUVESV9DQl9FUlJPUjsKKwkJfQorCX0KKwlpZiAoZXZlbnRzID09IDApIHsKKwkJLyogRGV0ZXJtaW5lIGhvdyBtdWNoIHJvb20gaXMgaW4gdGhlIEZJRk8gKGluIHNhbXBsZXMpLiAqLworCQlpZiAoKGRhY3N0YXQgJiBQQ0kyMzBQMl9EQUNfRklGT19GVUxMKSAhPSAwKSB7CisJCQlyb29tID0gUENJMjMwUDJfREFDX0ZJRk9ST09NX0ZVTEw7CisJCX0gZWxzZSBpZiAoKGRhY3N0YXQgJiBQQ0kyMzBQMl9EQUNfRklGT19IQUxGKSAhPSAwKSB7CisJCQlyb29tID0gUENJMjMwUDJfREFDX0ZJRk9ST09NX0hBTEZUT0ZVTEw7CisJCX0gZWxzZSBpZiAoKGRhY3N0YXQgJiBQQ0kyMzBQMl9EQUNfRklGT19FTVBUWSkgIT0gMCkgeworCQkJcm9vbSA9IFBDSTIzMFAyX0RBQ19GSUZPUk9PTV9FTVBUWTsKKwkJfSBlbHNlIHsKKwkJCXJvb20gPSBQQ0kyMzBQMl9EQUNfRklGT1JPT01fT05FVE9IQUxGOworCQl9CisJCS8qIENvbnZlcnQgcm9vbSB0byBudW1iZXIgb2Ygc2NhbnMgdGhhdCBjYW4gYmUgYWRkZWQuICovCisJCXJvb20gLz0gY21kLT5jaGFubGlzdF9sZW47CisJCS8qIERldGVybWluZSBudW1iZXIgb2Ygc2NhbnMgdG8gcHJvY2Vzcy4gKi8KKwkJaWYgKG51bV9zY2FucyA+IHJvb20pIHsKKwkJCW51bV9zY2FucyA9IHJvb207CisJCX0KKwkJLyogUHJvY2VzcyBzY2Fucy4gKi8KKwkJZm9yIChuID0gMDsgbiA8IG51bV9zY2FuczsgbisrKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJCXNob3J0IGRhdHVtOworCisJCQkJY29tZWRpX2J1Zl9nZXQoYXN5bmMsICZkYXR1bSk7CisJCQkJcGNpMjMwX2FvX3dyaXRlX2ZpZm8oZGV2LCBkYXR1bSwKKwkJCQkJQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSk7CisJCQl9CisJCX0KKwkJZXZlbnRzIHw9IENPTUVESV9DQl9FT1MgfCBDT01FRElfQ0JfQkxPQ0s7CisJCWlmICghZGV2cHJpdi0+YW9fY29udGludW91cykgeworCQkJZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCAtPSBudW1fc2NhbnM7CisJCQlpZiAoZGV2cHJpdi0+YW9fc2Nhbl9jb3VudCA9PSAwKSB7CisJCQkJLyogQWxsIGRhdGEgZm9yIHRoZSBjb21tYW5kIGhhcyBiZWVuIHdyaXR0ZW4KKwkJCQkgKiB0byBGSUZPLiAgU2V0IEZJRk8gaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwKKwkJCQkgKiB0byAnZW1wdHknLiAqLworCQkJCWRldnByaXYtPmRhY2NvbiA9IChkZXZwcml2LT5kYWNjb24KKwkJCQkJJiB+UENJMjMwUDJfREFDX0lOVF9GSUZPX01BU0spCisJCQkJCXwgUENJMjMwUDJfREFDX0lOVF9GSUZPX0VNUFRZOworCQkJCW91dHcoZGV2cHJpdi0+ZGFjY29uLAorCQkJCQlkZXYtPmlvYmFzZSArIFBDSTIzMF9EQUNDT04pOworCQkJfQorCQl9CisJCS8qIENoZWNrIGlmIEZJRk8gdW5kZXJydW4gb2NjdXJyZWQgd2hpbGUgd3JpdGluZyB0byBGSUZPLiAqLworCQlkYWNzdGF0ID0gaW53KGRldi0+aW9iYXNlICsgUENJMjMwX0RBQ0NPTik7CisJCWlmICgoZGFjc3RhdCAmIFBDSTIzMFAyX0RBQ19GSUZPX1VOREVSUlVOX0xBVENIRUQpICE9IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBTyBGSUZPIHVuZGVycnVuIik7CisJCQlldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XIHwgQ09NRURJX0NCX0VSUk9SOworCQl9CisJfQorCWlmICgoZXZlbnRzICYgKENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfT1ZFUkZMT1cpKQorCQkhPSAwKSB7CisJCS8qIFN0b3BwaW5nIEFPIGR1ZSB0byBjb21wbGV0aW9uIG9yIGVycm9yLiAqLworCQlwY2kyMzBfYW9fc3RvcChkZXYsIHMpOworCQlydW5uaW5nID0gMDsKKwl9IGVsc2UgeworCQlydW5uaW5nID0gMTsKKwl9CisJYXN5bmMtPmV2ZW50cyB8PSBldmVudHM7CisJcmV0dXJuIHJ1bm5pbmc7Cit9CisKK3N0YXRpYyB2b2lkIHBjaTIzMF9oYW5kbGVfYWkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBpbnQgZXZlbnRzID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzX2ZpZm87CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IHRvZG87CisJdW5zaWduZWQgaW50IGZpZm9hbW91bnQ7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwl1bnNpZ25lZCBpbnQgc2NhbmxlbiA9IGFzeW5jLT5jbWQuc2Nhbl9lbmRfYXJnOworCisJLyogRGV0ZXJtaW5lIG51bWJlciBvZiBzYW1wbGVzIHRvIHJlYWQuICovCisJaWYgKGRldnByaXYtPmFpX2NvbnRpbnVvdXMpIHsKKwkJdG9kbyA9IFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMOworCX0gZWxzZSBpZiAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCA9PSAwKSB7CisJCXRvZG8gPSAwOworCX0gZWxzZSBpZiAoKGRldnByaXYtPmFpX3NjYW5fY291bnQgPiBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTCkKKwkJfHwgKHNjYW5sZW4gPiBQQ0kyMzBfQURDX0ZJRk9MRVZFTF9IQUxGRlVMTCkpIHsKKwkJdG9kbyA9IFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMOworCX0gZWxzZSB7CisJCXRvZG8gPSAoZGV2cHJpdi0+YWlfc2Nhbl9jb3VudCAqIHNjYW5sZW4pCisJCQktIGRldnByaXYtPmFpX3NjYW5fcG9zOworCQlpZiAodG9kbyA+IFBDSTIzMF9BRENfRklGT0xFVkVMX0hBTEZGVUxMKSB7CisJCQl0b2RvID0gUENJMjMwX0FEQ19GSUZPTEVWRUxfSEFMRkZVTEw7CisJCX0KKwl9CisKKwlpZiAodG9kbyA9PSAwKSB7CisJCXJldHVybjsKKwl9CisKKwlmaWZvYW1vdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgdG9kbzsgaSsrKSB7CisJCWlmIChmaWZvYW1vdW50ID09IDApIHsKKwkJCS8qIFJlYWQgRklGTyBzdGF0ZS4gKi8KKwkJCXN0YXR1c19maWZvID0gaW53KGRldi0+aW9iYXNlICsgUENJMjMwX0FEQ0NPTik7CisKKwkJCWlmICgoc3RhdHVzX2ZpZm8gJiBQQ0kyMzBfQURDX0ZJRk9fRlVMTF9MQVRDSEVEKSAhPSAwKSB7CisJCQkJLyogUmVwb3J0IGVycm9yIG90aGVyd2lzZSBGSUZPIG92ZXJydW5zIHdpbGwgZ28KKwkJCQkgKiB1bm5vdGljZWQgYnkgdGhlIGNhbGxlci4gKi8KKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiQUkgRklGTyBvdmVycnVuIik7CisJCQkJZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVyB8IENPTUVESV9DQl9FUlJPUjsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoKHN0YXR1c19maWZvICYgUENJMjMwX0FEQ19GSUZPX0VNUFRZKSAhPSAwKSB7CisJCQkJLyogRklGTyBlbXB0eS4gKi8KKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoKHN0YXR1c19maWZvICYgUENJMjMwX0FEQ19GSUZPX0hBTEYpICE9IDApIHsKKwkJCQkvKiBGSUZPIGhhbGYgZnVsbC4gKi8KKwkJCQlmaWZvYW1vdW50ID0gUENJMjMwX0FEQ19GSUZPTEVWRUxfSEFMRkZVTEw7CisJCQl9IGVsc2UgeworCQkJCS8qIEZJRk8gbm90IGVtcHR5LiAqLworCQkJCWlmIChkZXZwcml2LT5od3ZlciA+IDApIHsKKwkJCQkJLyogUmVhZCBQQ0kyMzArLzI2MCsgQURDIEZJRk8gbGV2ZWwuICovCisJCQkJCWZpZm9hbW91bnQgPSBpbncoZGV2LT5pb2Jhc2UKKwkJCQkJCSsgUENJMjMwUF9BRENGRkxFVik7CisJCQkJCWlmIChmaWZvYW1vdW50ID09IDApIHsKKwkJCQkJCS8qIFNob3VsZG4ndCBoYXBwZW4uICovCisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWZpZm9hbW91bnQgPSAxOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIFJlYWQgc2FtcGxlIGFuZCBzdG9yZSBpbiBDb21lZGkncyBjaXJjdWxhciBidWZmZXIuICovCisJCWlmIChjb21lZGlfYnVmX3B1dChhc3luYywgcGNpMjMwX2FpX3JlYWQoZGV2KSkgPT0gMCkgeworCQkJZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBSSBidWZmZXIgb3ZlcmZsb3ciKTsKKwkJCWJyZWFrOworCQl9CisJCWZpZm9hbW91bnQtLTsKKwkJZGV2cHJpdi0+YWlfc2Nhbl9wb3MrKzsKKwkJaWYgKGRldnByaXYtPmFpX3NjYW5fcG9zID09IHNjYW5sZW4pIHsKKwkJCS8qIEVuZCBvZiBzY2FuLiAqLworCQkJZGV2cHJpdi0+YWlfc2Nhbl9wb3MgPSAwOworCQkJZGV2cHJpdi0+YWlfc2Nhbl9jb3VudC0tOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOworCQl9CisJfQorCisJaWYgKCFkZXZwcml2LT5haV9jb250aW51b3VzICYmIChkZXZwcml2LT5haV9zY2FuX2NvdW50ID09IDApKSB7CisJCS8qIEVuZCBvZiBhY3F1aXNpdGlvbi4gKi8KKwkJZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfSBlbHNlIHsKKwkJLyogTW9yZSBzYW1wbGVzIHJlcXVpcmVkLCB0ZWxsIENvbWVkaSB0byBibG9jay4gKi8KKwkJZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKKwl9CisJYXN5bmMtPmV2ZW50cyB8PSBldmVudHM7CisKKwlpZiAoKGFzeW5jLT5ldmVudHMgJiAoQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUiB8CisJCQkJQ09NRURJX0NCX09WRVJGTE9XKSkgIT0gMCkgeworCQkvKiBkaXNhYmxlIGhhcmR3YXJlIGNvbnZlcnNpb25zICovCisJCXBjaTIzMF9haV9zdG9wKGRldiwgcyk7CisJfSBlbHNlIHsKKwkJLyogdXBkYXRlIEZJRk8gaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwgKi8KKwkJcGNpMjMwX2FpX3VwZGF0ZV9maWZvX3RyaWdnZXJfbGV2ZWwoZGV2LCBzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBjaTIzMF9hb19zdG9wKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKwl1bnNpZ25lZCBjaGFyIGludHNyYzsKKwlpbnQgc3RhcnRlZDsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5hb19zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJc3RhcnRlZCA9IHRlc3RfYW5kX2NsZWFyX2JpdChBT19DTURfU1RBUlRFRCwgJmRldnByaXYtPnN0YXRlKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+YW9fc3RvcF9zcGlubG9jaywgaXJxZmxhZ3MpOworCWlmICghc3RhcnRlZCkgeworCQlyZXR1cm47CisJfQorCisJY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKiBTdG9wIHNjYW4gcmF0ZSBnZW5lcmF0b3IuICovCisJCXBjaTIzMF9jYW5jZWxfY3QoZGV2LCAxKTsKKwl9CisKKwkvKiBEZXRlcm1pbmUgaW50ZXJydXB0IHNvdXJjZS4gKi8KKwlpZiAoZGV2cHJpdi0+aHd2ZXIgPCAyKSB7CisJCS8qIE5vdCB1c2luZyBEQUMgRklGTy4gIFVzaW5nIENUMSBpbnRlcnJ1cHQuICovCisJCWludHNyYyA9IFBDSTIzMF9JTlRfWkNMS19DVDE7CisJfSBlbHNlIHsKKwkJLyogVXNpbmcgREFDIEZJRk8gaW50ZXJydXB0LiAqLworCQlpbnRzcmMgPSBQQ0kyMzBQMl9JTlRfREFDOworCX0KKwkvKiBEaXNhYmxlIGludGVycnVwdCBhbmQgd2FpdCBmb3IgaW50ZXJydXB0IHJvdXRpbmUgdG8gZmluaXNoIHJ1bm5pbmcKKwkgKiB1bmxlc3Mgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgcm91dGluZS4gKi8KKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywgaXJxZmxhZ3MpOworCWRldnByaXYtPmludF9lbiAmPSB+aW50c3JjOworCXdoaWxlIChkZXZwcml2LT5pbnRyX3J1bm5pbmcgJiYgZGV2cHJpdi0+aW50cl9jcHVpZCAhPSBUSElTQ1BVKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwl9CisJaWYgKGRldnByaXYtPmllciAhPSBkZXZwcml2LT5pbnRfZW4pIHsKKwkJZGV2cHJpdi0+aWVyID0gZGV2cHJpdi0+aW50X2VuOworCQlvdXRiKGRldnByaXYtPmllciwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywgaXJxZmxhZ3MpOworCisJaWYgKGRldnByaXYtPmh3dmVyID49IDIpIHsKKwkJLyogVXNpbmcgREFDIEZJRk8uICBSZXNldCBGSUZPLCBjbGVhciB1bmRlcnJ1biBlcnJvciwKKwkJICogZGlzYWJsZSBGSUZPLiAqLworCQlkZXZwcml2LT5kYWNjb24gJj0gUENJMjMwX0RBQ19PUl9NQVNLOworCQlvdXR3KGRldnByaXYtPmRhY2NvbiB8IFBDSTIzMFAyX0RBQ19GSUZPX1JFU0VUCisJCQl8IFBDSTIzMFAyX0RBQ19GSUZPX1VOREVSUlVOX0NMRUFSLAorCQkJZGV2LT5pb2Jhc2UgKyBQQ0kyMzBfREFDQ09OKTsKKwl9CisKKwkvKiBSZWxlYXNlIHJlc291cmNlcy4gKi8KKwlwdXRfYWxsX3Jlc291cmNlcyhkZXYsIE9XTkVSX0FPQ01EKTsKK30KKworc3RhdGljIGludCBwY2kyMzBfYW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJcGNpMjMwX2FvX3N0b3AoZGV2LCBzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNpMjMwX2FpX3N0b3Aoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQ7CisJaW50IHN0YXJ0ZWQ7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFpX3N0b3Bfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwlzdGFydGVkID0gdGVzdF9hbmRfY2xlYXJfYml0KEFJX0NNRF9TVEFSVEVELCAmZGV2cHJpdi0+c3RhdGUpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5haV9zdG9wX3NwaW5sb2NrLCBpcnFmbGFncyk7CisJaWYgKCFzdGFydGVkKSB7CisJCXJldHVybjsKKwl9CisKKwljbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCS8qIFN0b3AgY29udmVyc2lvbiByYXRlIGdlbmVyYXRvci4gKi8KKwkJcGNpMjMwX2NhbmNlbF9jdChkZXYsIDIpOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgeworCQkvKiBTdG9wIHNjYW4gcGVyaW9kIG1vbm9zdGFibGUuICovCisJCXBjaTIzMF9jYW5jZWxfY3QoZGV2LCAwKTsKKwl9CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywgaXJxZmxhZ3MpOworCS8qIERpc2FibGUgQURDIGludGVycnVwdCBhbmQgd2FpdCBmb3IgaW50ZXJydXB0IHJvdXRpbmUgdG8gZmluaXNoCisJICogcnVubmluZyB1bmxlc3Mgd2UgYXJlIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgcm91dGluZS4gKi8KKwlkZXZwcml2LT5pbnRfZW4gJj0gflBDSTIzMF9JTlRfQURDOworCXdoaWxlIChkZXZwcml2LT5pbnRyX3J1bm5pbmcgJiYgZGV2cHJpdi0+aW50cl9jcHVpZCAhPSBUSElTQ1BVKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5pc3Jfc3BpbmxvY2ssIGlycWZsYWdzKTsKKwl9CisJaWYgKGRldnByaXYtPmllciAhPSBkZXZwcml2LT5pbnRfZW4pIHsKKwkJZGV2cHJpdi0+aWVyID0gZGV2cHJpdi0+aW50X2VuOworCQlvdXRiKGRldnByaXYtPmllciwgZGV2cHJpdi0+aW9iYXNlMSArIFBDSTIzMF9JTlRfU0NFKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmlzcl9zcGlubG9jaywgaXJxZmxhZ3MpOworCisJLyogUmVzZXQgRklGTywgZGlzYWJsZSBGSUZPIGFuZCBzZXQgc3RhcnQgY29udmVyc2lvbiBzb3VyY2UgdG8gbm9uZS4KKwkgKiBLZWVwIHNlL2RpZmYgYW5kIGJpcC91bmkgc2V0dGluZ3MgKi8KKwlkZXZwcml2LT5hZGNjb24gPSAoZGV2cHJpdi0+YWRjY29uICYgKFBDSTIzMF9BRENfSVJfTUFTSworCQkJfCBQQ0kyMzBfQURDX0lNX01BU0spKSB8IFBDSTIzMF9BRENfVFJJR19OT05FOworCW91dHcoZGV2cHJpdi0+YWRjY29uIHwgUENJMjMwX0FEQ19GSUZPX1JFU0VULAorCQlkZXYtPmlvYmFzZSArIFBDSTIzMF9BRENDT04pOworCisJLyogUmVsZWFzZSByZXNvdXJjZXMuICovCisJcHV0X2FsbF9yZXNvdXJjZXMoZGV2LCBPV05FUl9BSUNNRCk7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjMwX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXBjaTIzMF9haV9zdG9wKGRldiwgcyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYzZ4ZGlnaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jNnhkaWdpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZmZmYjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYzZ4ZGlnaW8uYwpAQCAtMCwwICsxLDUxNyBAQAorLyoKKyAgIGNvbWVkaS9kcml2ZXJzL2M2eGRpZ2lvLmMKKworICAgSGFyZHdhcmUgZHJpdmVyIGZvciBNZWNoYXRyb25pYyBTeXN0ZW1zIEluYy4gQzZ4X0RJR0lPIERTUCBkYXVnaHRlciBjYXJkLgorICAgKGh0dHA6Ly9yb2JvdDAuZ2UudWl1Yy5lZHUvfnNwb25nL21lY2hhLykKKworICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgQ29weXJpZ2h0IChDKSAxOTk5IERhbiBCbG9jaworCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgKi8KKy8qCitEcml2ZXI6IGM2eGRpZ2lvCitEZXNjcmlwdGlvbjogTWVjaGF0cm9uaWMgU3lzdGVtcyBJbmMuIEM2eF9ESUdJTyBEU1AgZGF1Z2h0ZXIgY2FyZAorQXV0aG9yOiBEYW4gQmxvY2sKK1N0YXR1czogdW5rbm93bgorRGV2aWNlczogW01lY2hhdHJvbmljIFN5c3RlbXMgSW5jLl0gQzZ4X0RJR0lPIERTUCBkYXVnaHRlciBjYXJkIChjNnhkaWdpbykKK1VwZGF0ZWQ6IFN1biBOb3YgMjAgMjA6MTg6MzQgRVNUIDIwMDUKKworVGhpcyBkcml2ZXIgd2lsbCBub3Qgd29yayB3aXRoIGEgMi40IGtlcm5lbC4KK2h0dHA6Ly9yb2JvdDAuZ2UudWl1Yy5lZHUvfnNwb25nL21lY2hhLworCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvcG5wLmg+CisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworc3RhdGljIHU4IFJlYWRCeXRlRnJvbUh3UG9ydCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTggcmVzdWx0ID0gaW5iKGFkZHIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIFdyaXRlQnl0ZVRvSHdQb3J0KHVuc2lnbmVkIGxvbmcgYWRkciwgdTggdmFsKQoreworCW91dGJfcCh2YWwsIGFkZHIpOworfQorCisjZGVmaW5lIEM2WERJR0lPX1NJWkUgMworCisvKgorICogcG9ydCBvZmZzZXRzCisgKi8KKyNkZWZpbmUgQzZYRElHSU9fUEFSQUxMRUxfREFUQSAwCisjZGVmaW5lIEM2WERJR0lPX1BBUkFMTEVMX1NUQVRVUyAxCisjZGVmaW5lIEM2WERJR0lPX1BBUkFMTEVMX0NPTlRST0wgMgorc3RydWN0IHB3bWJpdHN0eXBlIHsKKwl1bnNpZ25lZCBzYjA6MjsKKwl1bnNpZ25lZCBzYjE6MjsKKwl1bnNpZ25lZCBzYjI6MjsKKwl1bnNpZ25lZCBzYjM6MjsKKwl1bnNpZ25lZCBzYjQ6MjsKK307Cit1bmlvbiBwd21jbWR0eXBlIHsKKwl1bnNpZ25lZCBjbWQ7CQkvLyBhc3N1bWluZyBoZXJlIHRoYXQgaW50IGlzIDMyYml0CisJc3RydWN0IHB3bWJpdHN0eXBlIGJpdHM7Cit9Oworc3RydWN0IGVuY2JpdHN0eXBlIHsKKwl1bnNpZ25lZCBzYjA6MzsKKwl1bnNpZ25lZCBzYjE6MzsKKwl1bnNpZ25lZCBzYjI6MzsKKwl1bnNpZ25lZCBzYjM6MzsKKwl1bnNpZ25lZCBzYjQ6MzsKKwl1bnNpZ25lZCBzYjU6MzsKKwl1bnNpZ25lZCBzYjY6MzsKKwl1bnNpZ25lZCBzYjc6MzsKK307Cit1bmlvbiBlbmN2YWx1ZXR5cGUgeworCXVuc2lnbmVkIHZhbHVlOworCXN0cnVjdCBlbmNiaXRzdHlwZSBiaXRzOworfTsKKworI2RlZmluZSBDNlhESUdJT19USU1FX09VVCAyMAorCitzdGF0aWMgaW50IGM2eGRpZ2lvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGM2eGRpZ2lvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYzZ4ZGlnaW8gPSB7CisgICAgICBkcml2ZXJfbmFtZToiYzZ4ZGlnaW8iLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmM2eGRpZ2lvX2F0dGFjaCwKKyAgICAgIGRldGFjaDpjNnhkaWdpb19kZXRhY2gsCit9OworCitzdGF0aWMgdm9pZCBDNlhfcHdtSW5pdCh1bnNpZ25lZCBsb25nIGJhc2VBZGRyKQoreworCWludCB0aW1lb3V0ID0gMDsKKworLy9wcmludGsoIkluc2lkZSBDNlhfcHdtSW5pdFxuIik7CisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgMHg3MCk7CisJd2hpbGUgKCgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgJiAweDgwKSA9PSAwKQorCQkmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0aW1lb3V0Kys7CisJfQorCisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIDB4NzQpOworCXRpbWVvdXQgPSAwOworCXdoaWxlICgoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpICYgMHg4MCkgPT0gMHg4MCkKKwkJJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDcwKTsKKwl0aW1lb3V0ID0gMDsKKwl3aGlsZSAoKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSAmIDB4ODApID09IDB4MCkKKwkJJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDApOworCXRpbWVvdXQgPSAwOworCXdoaWxlICgoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpICYgMHg4MCkgPT0gMHg4MCkKKwkJJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdGltZW91dCsrOworCX0KKworfQorCitzdGF0aWMgdm9pZCBDNlhfcHdtT3V0cHV0KHVuc2lnbmVkIGxvbmcgYmFzZUFkZHIsIHVuc2lnbmVkIGNoYW5uZWwsIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBwcGNtZDsKKwl1bmlvbiBwd21jbWR0eXBlIHB3bTsKKwlpbnQgdGltZW91dCA9IDA7CisJdW5zaWduZWQgdG1wOworCisJLy9wcmludGsoIkluc2lkZSBDNlhfcHdtT3V0cHV0XG4iKTsKKworCXB3bS5jbWQgPSB2YWx1ZTsKKwlpZiAocHdtLmNtZCA+IDQ5OCkKKwkJcHdtLmNtZCA9IDQ5ODsKKwlpZiAocHdtLmNtZCA8IDIpCisJCXB3bS5jbWQgPSAyOworCisJaWYgKGNoYW5uZWwgPT0gMCkgeworCQlwcGNtZCA9IDB4Mjg7CisJfSBlbHNlIHsJCS8vIGlmIGNoYW5uZWwgPT0gMQorCQlwcGNtZCA9IDB4MzA7CisJfQkJCS8qIGVuZGlmICovCisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQgKyBwd20uYml0cy5zYjApOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kICsgcHdtLmJpdHMuc2IxICsgMHg0KTsKKwl0aW1lb3V0ID0gMDsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAweDgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCArIHB3bS5iaXRzLnNiMik7CisJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMCkgJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJCXRpbWVvdXQrKzsKKwl9CisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQgKyBwd20uYml0cy5zYjMgKyAweDQpOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4ODApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kICsgcHdtLmJpdHMuc2I0KTsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDApOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4ODApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCit9CisKK3N0YXRpYyBpbnQgQzZYX2VuY0lucHV0KHVuc2lnbmVkIGxvbmcgYmFzZUFkZHIsIHVuc2lnbmVkIGNoYW5uZWwpCit7CisJdW5zaWduZWQgcHBjbWQ7CisJdW5pb24gZW5jdmFsdWV0eXBlIGVuYzsKKwlpbnQgdGltZW91dCA9IDA7CisJaW50IHRtcDsKKworCS8vcHJpbnRrKCJJbnNpZGUgQzZYX2VuY0lucHV0XG4iKTsKKworCWVuYy52YWx1ZSA9IDA7CisJaWYgKGNoYW5uZWwgPT0gMCkgeworCQlwcGNtZCA9IDB4NDg7CisJfSBlbHNlIHsKKwkJcHBjbWQgPSAweDUwOworCX0KKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQpOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCisJZW5jLmJpdHMuc2IwID0gKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSA+PiAzKSAmIDB4Nyk7CisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kICsgMHg0KTsKKwl0aW1lb3V0ID0gMDsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAweDgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKwllbmMuYml0cy5zYjEgPSAoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpID4+IDMpICYgMHg3KTsKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQpOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCWVuYy5iaXRzLnNiMiA9ICgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgPj4gMykgJiAweDcpOworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCArIDB4NCk7CisJdGltZW91dCA9IDA7CisJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMHg4MCkgJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJCXRpbWVvdXQrKzsKKwl9CisJZW5jLmJpdHMuc2IzID0gKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSA+PiAzKSAmIDB4Nyk7CisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIHBwY21kKTsKKwl0aW1lb3V0ID0gMDsKKwl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwl3aGlsZSAoKCh0bXAgJiAweDgwKSA9PSAwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKwllbmMuYml0cy5zYjQgPSAoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpID4+IDMpICYgMHg3KTsKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQgKyAweDQpOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4ODApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCWVuYy5iaXRzLnNiNSA9ICgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgPj4gMykgJiAweDcpOworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCk7CisJdGltZW91dCA9IDA7CisJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMHgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKwllbmMuYml0cy5zYjYgPSAoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpID4+IDMpICYgMHg3KTsKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgcHBjbWQgKyAweDQpOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4ODApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCWVuYy5iaXRzLnNiNyA9ICgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgPj4gMykgJiAweDcpOworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCk7CisJdGltZW91dCA9IDA7CisJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CisJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMHgwKSAmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0bXAgPSBSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKTsKKwkJdGltZW91dCsrOworCX0KKworCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDApOworCXRpbWVvdXQgPSAwOworCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCXdoaWxlICgoKHRtcCAmIDB4ODApID09IDB4ODApICYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRtcCA9IFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpOworCQl0aW1lb3V0Kys7CisJfQorCisJcmV0dXJuIChlbmMudmFsdWUgXiAweDgwMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIEM2WF9lbmNSZXNldEFsbCh1bnNpZ25lZCBsb25nIGJhc2VBZGRyKQoreworCXVuc2lnbmVkIHRpbWVvdXQgPSAwOworCisvL3ByaW50aygiSW5zaWRlIEM2WF9lbmNSZXNldEFsbFxuIik7CisKKwlXcml0ZUJ5dGVUb0h3UG9ydChiYXNlQWRkciwgMHg2OCk7CisJd2hpbGUgKCgoUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSkgJiAweDgwKSA9PSAwKQorCQkmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0aW1lb3V0Kys7CisJfQorCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDZDKTsKKwl0aW1lb3V0ID0gMDsKKwl3aGlsZSAoKChSZWFkQnl0ZUZyb21Id1BvcnQoYmFzZUFkZHIgKyAxKSAmIDB4ODApID09IDB4ODApCisJCSYmICh0aW1lb3V0IDwgQzZYRElHSU9fVElNRV9PVVQpKSB7CisJCXRpbWVvdXQrKzsKKwl9CisJV3JpdGVCeXRlVG9Id1BvcnQoYmFzZUFkZHIsIDB4NjgpOworCXRpbWVvdXQgPSAwOworCXdoaWxlICgoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpICYgMHg4MCkgPT0gMHgwKQorCQkmJiAodGltZW91dCA8IEM2WERJR0lPX1RJTUVfT1VUKSkgeworCQl0aW1lb3V0Kys7CisJfQorCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCAweDApOworCXRpbWVvdXQgPSAwOworCXdoaWxlICgoKFJlYWRCeXRlRnJvbUh3UG9ydChiYXNlQWRkciArIDEpICYgMHg4MCkgPT0gMHg4MCkKKwkJJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKKwkJdGltZW91dCsrOworCX0KK30KKworc3RhdGljIGludCBjNnhkaWdpb19wd21vX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJcHJpbnRrKCJjNnhkaWdpb19wd21vX2luc25fcmVhZCAleFxuIiwgaW5zbi0+bik7CisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyBpbnQgYzZ4ZGlnaW9fcHdtb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLy8gIHByaW50aygiYzZ4ZGlnaW9fcHdtb19pbnNuX3dyaXRlICV4XG4iLCBpbnNuLT5uKTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCUM2WF9wd21PdXRwdXQoZGV2LT5pb2Jhc2UsIGNoYW4sIGRhdGFbaV0pOworCQkvKiAgICBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07ICovCisJfQorCXJldHVybiBpOworfQorCisvL3N0YXRpYyBpbnQgYzZ4ZGlnaW9fZWlfaW5pdF9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhKQorLy97CisvLyAgcHJpbnRrKCJjNnhkaWdpb19laV9pbml0X2luc25fcmVhZCAleFxuIiwgaW5zbi0+bik7CisvLyAgcmV0dXJuIGluc24tPm47CisvL30KKworLy9zdGF0aWMgaW50IGM2eGRpZ2lvX2VpX2luaXRfaW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGEpCisvL3sKKy8vICBpbnQgaTsKKy8vICBpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworLy8KKy8vICBDNlhfZW5jUmVzZXRBbGwoIGRldi0+aW9iYXNlICk7CisvLworLy8gIHJldHVybiBpbnNuLT5uOworLy99CisKK3N0YXRpYyBpbnQgYzZ4ZGlnaW9fZWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwkvLyAgcHJpbnRrKCJjNnhkaWdpb19laV9faW5zbl9yZWFkICV4XG4iLCBpbnNuLT5uKTsKKwlpbnQgbjsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlkYXRhW25dID0gKEM2WF9lbmNJbnB1dChkZXYtPmlvYmFzZSwgY2hhbikgJiAweGZmZmZmZik7CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyB2b2lkIGJvYXJkX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKwkvL3ByaW50aygiSW5zaWRlIGJvYXJkX2luaXRcbiIpOworCisJQzZYX3B3bUluaXQoZGV2LT5pb2Jhc2UpOworCUM2WF9lbmNSZXNldEFsbChkZXYtPmlvYmFzZSk7CisKK30KKworLy9zdGF0aWMgdm9pZCBib2FyZF9oYWx0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpIHsKKy8vICBDNlhfcHdtSW5pdChkZXYtPmlvYmFzZSk7CisvL30KKworLyoKKyAgIG9wdGlvbnNbMF0gLSBJL08gcG9ydAorICAgb3B0aW9uc1sxXSAtIGlycQorICAgb3B0aW9uc1syXSAtIG51bWJlciBvZiBlbmNvZGVyIGNoaXBzIGluc3RhbGxlZAorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBjNnhkaWdpb19wbnBfdGJsW10gPSB7CisJLyogU3RhbmRhcmQgTFBUIFByaW50ZXIgUG9ydCAqLworCXsuaWQgPSAiUE5QMDQwMCIsLmRyaXZlcl9kYXRhID0gMH0sCisJLyogRUNQIFByaW50ZXIgUG9ydCAqLworCXsuaWQgPSAiUE5QMDQwMSIsLmRyaXZlcl9kYXRhID0gMH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBjNnhkaWdpb19wbnBfZHJpdmVyID0geworCS5uYW1lID0gImM2eGRpZ2lvIiwKKwkuaWRfdGFibGUgPSBjNnhkaWdpb19wbnBfdGJsLAorfTsKKworc3RhdGljIGludCBjNnhkaWdpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJaW50IHJlc3VsdCA9IDA7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IGM2eGRpZ2lvOiAweCUwNGx4XG4iLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBDNlhESUdJT19TSVpFLCAiYzZ4ZGlnaW8iKSkgeworCQlwcmludGsoImNvbWVkaSVkOiBJL08gcG9ydCBjb25mbGljdFxuIiwgZGV2LT5taW5vcik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSAiYzZ4ZGlnaW8iOworCisJcmVzdWx0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpOwkvLyAzIHdpdGggZW5jb2Rlcl9pbml0IHdyaXRlCisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwkvLyBNYWtlIHN1cmUgdGhhdCBQblAgcG9ydHMgZ2V0cyBhY3RpdmF0ZWQKKwlwbnBfcmVnaXN0ZXJfZHJpdmVyKCZjNnhkaWdpb19wbnBfZHJpdmVyKTsKKworCWlycSA9IGl0LT5vcHRpb25zWzFdOworCWlmIChpcnEgPiAwKSB7CisJCXByaW50aygiY29tZWRpJWQ6IGlycSA9ICV1IGlnbm9yZWRcbiIsIGRldi0+bWlub3IsIGlycSk7CisJfSBlbHNlIGlmIChpcnEgPT0gMCkgeworCQlwcmludGsoImNvbWVkaSVkOiBubyBpcnFcbiIsIGRldi0+bWlub3IpOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIHB3bSBvdXRwdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOwkvLyBOb3Qgc3VyZSB3aGF0IHRvIHB1dCBoZXJlCisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRFQUJMRTsKKwlzLT5uX2NoYW4gPSAyOworCS8qICAgICAgcy0+dHJpZ1swXSA9IGM2eGRpZ2lvX3B3bW87ICovCisJcy0+aW5zbl9yZWFkID0gYzZ4ZGlnaW9fcHdtb19pbnNuX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IGM2eGRpZ2lvX3B3bW9faW5zbl93cml0ZTsKKwlzLT5tYXhkYXRhID0gNTAwOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMDsJLy8gQSBzdWl0YWJsZSBsaWUKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGVuY29kZXIgKGNvdW50ZXIpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9MU0FNUEw7CisJcy0+bl9jaGFuID0gMjsKKwkvKiBzLT50cmlnWzBdID0gYzZ4ZGlnaW9fZWk7ICovCisJcy0+aW5zbl9yZWFkID0gYzZ4ZGlnaW9fZWlfaW5zbl9yZWFkOworCXMtPm1heGRhdGEgPSAweGZmZmZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCisJLy8gICAgICAgICAgcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLy8gICAgICAvKiBwd20gb3V0cHV0IHN1YmRldmljZSAqLworCS8vICAgICAgcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7ICAvLyBOb3Qgc3VyZSB3aGF0IHRvIHB1dCBoZXJlCisJLy8gICAgICBzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFOworCS8vICAgICAgcy0+bl9jaGFuID0gMTsKKwkvLyAgICAgIC8qIHMtPnRyaWdbMF0gPSBjNnhkaWdpb19laV9pbml0OyAqLworCS8vICAgICAgcy0+aW5zbl9yZWFkID0gYzZ4ZGlnaW9fZWlfaW5pdF9pbnNuX3JlYWQ7CisJLy8gICAgICBzLT5pbnNuX3dyaXRlID0gYzZ4ZGlnaW9fZWlfaW5pdF9pbnNuX3dyaXRlOworCS8vICAgICAgcy0+bWF4ZGF0YSA9IDB4RkZGRjsgIC8vIFJlYWxseSBqdXN0IGEgZG9uJ3QgY2FyZQorCS8vICAgICAgcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsgLy8gTm90IHN1cmUgd2hhdCB0byBwdXQgaGVyZQorCisJLy8gSSB3aWxsIGNhbGwgdGhpcyBpbml0IGFueXdheSBidXQgbW9yZSB0aGFuIGxpa2VseSB0aGUgRFNQIGJvYXJkIHdpbGwgbm90IGJlIGNvbm5lY3QKKwkvLyB3aGVuIGRldmljZSBkcml2ZXIgaXMgbG9hZGVkLgorCWJvYXJkX2luaXQoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGM2eGRpZ2lvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKy8vICBib2FyZF9oYWx0KGRldik7ICAvLyBtYXkgbm90IG5lZWQgdGhpcworCisJcHJpbnRrKCJjb21lZGklZDogYzZ4ZGlnaW86IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIEM2WERJR0lPX1NJWkUpOworCX0KKwlpZiAoZGV2LT5pcnEpIHsKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQkJCS8vIE5vdCB1c2luZyBJUlEgc28gSSBhbSBub3Qgc3VyZSBpZiBJIG5lZWQgdGhpcworCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmYzZ4ZGlnaW9fcG5wX2RyaXZlcik7CisKKwlyZXR1cm4gMDsKK30KKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9jNnhkaWdpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfZGFzMTZfY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9kYXMxNl9jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZmU0YzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfZGFzMTZfY3MuYwpAQCAtMCwwICsxLDk3NiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9kYXMxNmNzLmMKKyAgICBEcml2ZXIgZm9yIENvbXB1dGVyIEJvYXJkcyBQQy1DQVJEIERBUzE2LzE2LgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogY2JfZGFzMTZfY3MKK0Rlc2NyaXB0aW9uOiBDb21wdXRlciBCb2FyZHMgUEMtQ0FSRCBEQVMxNi8xNgorRGV2aWNlczogW0NvbXB1dGVyQm9hcmRzXSBQQy1DQVJEIERBUzE2LzE2IChjYl9kYXMxNl9jcyksIFBDLUNBUkQgREFTMTYvMTYtQU8KK0F1dGhvcjogZHMKK1VwZGF0ZWQ6IE1vbiwgMDQgTm92IDIwMDIgMjA6MDQ6MjEgLTA4MDAKK1N0YXR1czogZXhwZXJpbWVudGFsCisKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisKKyNpbmNsdWRlICI4MjUzLmgiCisKKyNkZWZpbmUgREFTMTZDU19TSVpFCQkJMTgKKworI2RlZmluZSBEQVMxNkNTX0FEQ19EQVRBCQkwCisjZGVmaW5lIERBUzE2Q1NfRElPX01VWAkJCTIKKyNkZWZpbmUgREFTMTZDU19NSVNDMQkJCTQKKyNkZWZpbmUgREFTMTZDU19NSVNDMgkJCTYKKyNkZWZpbmUgREFTMTZDU19DVFIwCQkJOAorI2RlZmluZSBEQVMxNkNTX0NUUjEJCQkxMAorI2RlZmluZSBEQVMxNkNTX0NUUjIJCQkxMgorI2RlZmluZSBEQVMxNkNTX0NUUl9DT05UUk9MCQkxNAorI2RlZmluZSBEQVMxNkNTX0RJTwkJCTE2CisKK3N0cnVjdCBkYXMxNmNzX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkZXZpY2VfaWQ7CisJaW50IG5fYW9fY2hhbnM7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXMxNmNzX2JvYXJkIGRhczE2Y3NfYm9hcmRzW10gPSB7CisJeworCSAgICAgIGRldmljZV9pZDoweDAwMDAsLyogdW5rbm93biAqLworCSAgICAgIG5hbWU6CSJQQy1DQVJEIERBUzE2LzE2IiwKKwkgICAgICBuX2FvX2NoYW5zOjAsCisJCX0sCisJeworCSAgICAgIGRldmljZV9pZDoweDAwMzksCisJICAgICAgbmFtZToJIlBDLUNBUkQgREFTMTYvMTYtQU8iLAorCSAgICAgIG5fYW9fY2hhbnM6MiwKKwkJfSwKKwl7CisJICAgICAgZGV2aWNlX2lkOjB4NDAwOSwKKwkgICAgICBuYW1lOgkiUENNLURBUzE2cy8xNiIsCisJICAgICAgbl9hb19jaGFuczowLAorCQl9LAorfTsKKworI2RlZmluZSBuX2JvYXJkcyAoc2l6ZW9mKGRhczE2Y3NfYm9hcmRzKS9zaXplb2YoZGFzMTZjc19ib2FyZHNbMF0pKQorI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGFzMTZjc19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgZGFzMTZjc19wcml2YXRlIHsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXMxOworCXVuc2lnbmVkIHNob3J0IHN0YXR1czI7Cit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhczE2Y3NfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBkYXMxNmNzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRhczE2Y3NfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZGFzMTZjcyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJjYl9kYXMxNl9jcyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGFzMTZjc19hdHRhY2gsCisgICAgICBkZXRhY2g6ZGFzMTZjc19kZXRhY2gsCit9OworCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmN1cl9kZXYgPSBOVUxMOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgZGFzMTZjc19haV9yYW5nZSA9IHsgNCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMi41LCAyLjUpLAorCQkJUkFOR0UoLTEuMjUsIDEuMjUpLAorCX0KK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYXMxNmNzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyBpbnQgZGFzMTZjc19haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNmNzX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZGFzMTZjc19haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBkYXMxNmNzX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE2Y3NfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMTZjc19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE2Y3NfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE2Y3NfdGltZXJfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE2Y3NfdGltZXJfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBnZXRfcHJvZGlkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwl0dXBsZV90IHR1cGxlOworCXVfc2hvcnQgYnVmWzEyOF07CisJaW50IHByb2RpZCA9IDA7CisKKwl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKKwl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7CisJdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CisJaWYgKChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gMCkgJiYKKwkJKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpID09IDApKSB7CisJCXByb2RpZCA9IGxlMTZfdG9fY3B1KGJ1ZlsxXSk7CisJfQorCisJcmV0dXJuIHByb2RpZDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXMxNmNzX2JvYXJkICpkYXMxNmNzX3Byb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWludCBpZDsKKwlpbnQgaTsKKworCWlkID0gZ2V0X3Byb2RpZChkZXYsIGxpbmspOworCisJZm9yIChpID0gMDsgaSA8IG5fYm9hcmRzOyBpKyspIHsKKwkJaWYgKGRhczE2Y3NfYm9hcmRzW2ldLmRldmljZV9pZCA9PSBpZCkgeworCQkJcmV0dXJuIGRhczE2Y3NfYm9hcmRzICsgaTsKKwkJfQorCX0KKworCXByaW50aygidW5rbm93biBib2FyZCFcbiIpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZjc19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6IGNiX2RhczE2X2NzOiAiLCBkZXYtPm1pbm9yKTsKKworCWxpbmsgPSBjdXJfZGV2OwkJLyogWFhYIGhhY2sgKi8KKwlpZiAoIWxpbmspCisJCXJldHVybiAtRUlPOworCisJZGV2LT5pb2Jhc2UgPSBsaW5rLT5pby5CYXNlUG9ydDE7CisJcHJpbnRrKCJJL08gYmFzZT0weCUwNGx4ICIsIGRldi0+aW9iYXNlKTsKKworCXByaW50aygiZmluZ2VycHJpbnQ6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDg7IGkgKz0gMikgeworCQlwcmludGsoIiUwNHggIiwgaW53KGRldi0+aW9iYXNlICsgaSkpOworCX0KKwlwcmludGsoIlxuIik7CisKKwlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEobGluay0+aXJxLkFzc2lnbmVkSVJRLCBkYXMxNmNzX2ludGVycnVwdCwKKwkJSVJRRl9TSEFSRUQsICJjYl9kYXMxNl9jcyIsIGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJcmV0dXJuIHJldDsKKwl9CisJZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CisJcHJpbnRrKCJpcnE9JXUgIiwgZGV2LT5pcnEpOworCisJZGV2LT5ib2FyZF9wdHIgPSBkYXMxNmNzX3Byb2JlKGRldiwgbGluayk7CisJaWYgKCFkZXYtPmJvYXJkX3B0cikKKwkJcmV0dXJuIC1FSU87CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZGFzMTZjc19wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9ESUZGIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDE2OworCXMtPm1heGRhdGEgPSAweGZmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmZGFzMTZjc19haV9yYW5nZTsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxNjsKKwlzLT5pbnNuX3JlYWQgPSBkYXMxNmNzX2FpX3JpbnNuOworCXMtPmRvX2NtZCA9IGRhczE2Y3NfYWlfY21kOworCXMtPmRvX2NtZHRlc3QgPSBkYXMxNmNzX2FpX2NtZHRlc3Q7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCWlmICh0aGlzYm9hcmQtPm5fYW9fY2hhbnMpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+bl9hb19jaGFuczsKKwkJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOworCQlzLT5pbnNuX3dyaXRlID0gJmRhczE2Y3NfYW9fd2luc247CisJCXMtPmluc25fcmVhZCA9ICZkYXMxNmNzX2FvX3JpbnNuOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCWlmICgxKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gODsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IGRhczE2Y3NfZGlvX2luc25fYml0czsKKwkJcy0+aW5zbl9jb25maWcgPSBkYXMxNmNzX2Rpb19pbnNuX2NvbmZpZzsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCS8qIHRpbWVyIHN1YmRldmljZSAqLworCWlmICgwKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9USU1FUjsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCQlzLT5uX2NoYW4gPSAxOworCQlzLT5tYXhkYXRhID0gMHhmZjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKwkJcy0+aW5zbl9yZWFkID0gZGFzMTZjc190aW1lcl9pbnNuX3JlYWQ7CisJCXMtPmluc25fY29uZmlnID0gZGFzMTZjc190aW1lcl9pbnNuX2NvbmZpZzsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZjc19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogZGFzMTZjczogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlycSkgeworCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYXMxNmNzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCS8vc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogImluc3RydWN0aW9ucyIgcmVhZC93cml0ZSBkYXRhIGluICJvbmUtc2hvdCIgb3IgInNvZnR3YXJlLXRyaWdnZXJlZCIKKyAqIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgZGFzMTZjc19haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IHRvOworCWludCBhcmVmOworCWludCByYW5nZTsKKwlpbnQgY2hhbjsKKwlzdGF0aWMgaW50IHJhbmdlX2JpdHNbXSA9IHsgMHg4MDAsIDB4MDAwLCAweDEwMCwgMHgyMDAgfTsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlhcmVmID0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisKKwlvdXR3KGNoYW4sIGRldi0+aW9iYXNlICsgMik7CisKKwlkZXZwcml2LT5zdGF0dXMxICY9IH4weGYzMjA7CisJZGV2cHJpdi0+c3RhdHVzMSB8PSAoYXJlZiA9PSBBUkVGX0RJRkYpID8gMCA6IDB4MDAyMDsKKwlvdXR3KGRldnByaXYtPnN0YXR1czEsIGRldi0+aW9iYXNlICsgNCk7CisKKwlkZXZwcml2LT5zdGF0dXMyICY9IH4weGZmMDA7CisJZGV2cHJpdi0+c3RhdHVzMiB8PSByYW5nZV9iaXRzW3JhbmdlXTsKKwlvdXR3KGRldnByaXYtPnN0YXR1czIsIGRldi0+aW9iYXNlICsgNik7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UpOworCisjZGVmaW5lIFRJTUVPVVQgMTAwMAorCQlmb3IgKHRvID0gMDsgdG8gPCBUSU1FT1VUOyB0bysrKSB7CisJCQlpZiAoaW53KGRldi0+aW9iYXNlICsgNCkgJiAweDAwODApCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKHRvID09IFRJTUVPVVQpIHsKKwkJCXByaW50aygiY2JfZGFzMTZfY3M6IGFpIHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCQlkYXRhW2ldID0gKHVuc2lnbmVkIHNob3J0KWludyhkZXYtPmlvYmFzZSArIDApOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGRhczE2Y3NfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZjc19haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIGNtZHRlc3QgdGVzdHMgYSBwYXJ0aWN1bGFyIGNvbW1hbmQgdG8gc2VlIGlmIGl0IGlzIHZhbGlkLgorCSAqIFVzaW5nIHRoZSBjbWR0ZXN0IGlvY3RsLCBhIHVzZXIgY2FuIGNyZWF0ZSBhIHZhbGlkIGNtZAorCSAqIGFuZCB0aGVuIGhhdmUgaXQgZXhlY3V0ZXMgYnkgdGhlIGNtZCBpb2N0bC4KKwkgKgorCSAqIGNtZHRlc3QgcmV0dXJucyAxLDIsMyw0IG9yIDAsIGRlcGVuZGluZyBvbiB3aGljaCB0ZXN0cworCSAqIHRoZSBjb21tYW5kIHBhc3Nlcy4gKi8KKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIE1BWF9TUEVFRAkxMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworI2RlZmluZSBNSU5fU1BFRUQJMTAwMDAwMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IE1BWF9TUEVFRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TUEVFRDsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gTUlOX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUlOX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBleHRlcm5hbCB0cmlnZ2VyICovCisJCS8qIHNob3VsZCBiZSBsZXZlbC9lZGdlLCBoaS9sbyBzcGVjaWZpY2F0aW9uIGhlcmUgKi8KKwkJLyogc2hvdWxkIHNwZWNpZnkgbXVsdGlwbGUgZXh0ZXJuYWwgdHJpZ2dlcnMgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPiA5KSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSBNQVhfU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA+IE1JTl9TUEVFRCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IE1JTl9TUEVFRDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQkvKiBzZWUgYWJvdmUgKi8KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiA5KSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnID4gMHgwMGZmZmZmZikgeworCQkJY21kLT5zdG9wX2FyZyA9IDB4MDBmZmZmZmY7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVuc2lnbmVkIGludCBkaXYxLCBkaXYyOworCisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoMTAwLCAmZGl2MSwgJmRpdjIsCisJCQkmY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXVuc2lnbmVkIGludCBkaXYxLCBkaXYyOworCisJCXRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoMTAwLCAmZGl2MSwgJmRpdjIsCisJCQkmY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSICYmCisJCQljbWQtPnNjYW5fYmVnaW5fYXJnIDwKKwkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZykgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczE2Y3NfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzMTsKKwl1bnNpZ25lZCBzaG9ydCBkOworCWludCBiaXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwkJZCA9IGRhdGFbaV07CisKKwkJb3V0dyhkZXZwcml2LT5zdGF0dXMxLCBkZXYtPmlvYmFzZSArIDQpOworCQljb21lZGlfdWRlbGF5KDEpOworCisJCXN0YXR1czEgPSBkZXZwcml2LT5zdGF0dXMxICYgfjB4ZjsKKwkJaWYgKGNoYW4pCisJCQlzdGF0dXMxIHw9IDB4MDAwMTsKKwkJZWxzZQorCQkJc3RhdHVzMSB8PSAweDAwMDg7CisKKy8qIAkJcHJpbnRrKCIweCUwNHhcbiIsc3RhdHVzMSk7Ki8KKwkJb3V0dyhzdGF0dXMxLCBkZXYtPmlvYmFzZSArIDQpOworCQljb21lZGlfdWRlbGF5KDEpOworCisJCWZvciAoYml0ID0gMTU7IGJpdCA+PSAwOyBiaXQtLSkgeworCQkJaW50IGIgPSAoZCA+PiBiaXQpICYgMHgxOworCQkJYiA8PD0gMTsKKy8qCQkJcHJpbnRrKCIweCUwNHhcbiIsc3RhdHVzMSB8IGIgfCAweDAwMDApOyovCisJCQlvdXR3KHN0YXR1czEgfCBiIHwgMHgwMDAwLCBkZXYtPmlvYmFzZSArIDQpOworCQkJY29tZWRpX3VkZWxheSgxKTsKKy8qCQkJcHJpbnRrKCIweCUwNHhcbiIsc3RhdHVzMSB8IGIgfCAweDAwMDQpOyovCisJCQlvdXR3KHN0YXR1czEgfCBiIHwgMHgwMDA0LCBkZXYtPmlvYmFzZSArIDQpOworCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJfQorLyoJCW1ha2UgaGlnaCBib3RoIERBQzBDUyBhbmQgREFDMUNTIHRvIGxvYWQKKwkJbmV3IGRhdGEgYW5kIHVwZGF0ZSBhbmFsb2cgb3V0cHV0Ki8KKwkJb3V0dyhzdGF0dXMxIHwgMHg5LCBkZXYtPmlvYmFzZSArIDQpOworCX0KKworCXJldHVybiBpOworfQorCisvKiBBTyBzdWJkZXZpY2VzIHNob3VsZCBoYXZlIGEgcmVhZCBpbnNuIGFzIHdlbGwgYXMgYSB3cml0ZSBpbnNuLgorICogVXN1YWxseSB0aGlzIG1lYW5zIGNvcHlpbmcgYSB2YWx1ZSBzdG9yZWQgaW4gZGV2cHJpdi4gKi8KK3N0YXRpYyBpbnQgZGFzMTZjc19hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKworCXJldHVybiBpOworfQorCisvKiBESU8gZGV2aWNlcyBhcmUgc2xpZ2h0bHkgc3BlY2lhbC4gIEFsdGhvdWdoIGl0IGlzIHBvc3NpYmxlIHRvCisgKiBpbXBsZW1lbnQgdGhlIGluc25fcmVhZC9pbnNuX3dyaXRlIGludGVyZmFjZSwgaXQgaXMgbXVjaCBtb3JlCisgKiB1c2VmdWwgdG8gYXBwbGljYXRpb25zIGlmIHlvdSBpbXBsZW1lbnQgdGhlIGluc25fYml0cyBpbnRlcmZhY2UuCisgKiBUaGlzIGFsbG93cyBwYWNrZWQgcmVhZGluZy93cml0aW5nIG9mIHRoZSBESU8gY2hhbm5lbHMuICBUaGUKKyAqIGNvbWVkaSBjb3JlIGNhbiBjb252ZXJ0IGJldHdlZW4gaW5zbl9iaXRzIGFuZCBpbnNuX3JlYWQvd3JpdGUgKi8KK3N0YXRpYyBpbnQgZGFzMTZjc19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKworCQlvdXR3KHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIDE2KTsKKwl9CisKKwkvKiBvbiByZXR1cm4sIGRhdGFbMV0gY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBkaWdpdGFsCisJICogaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4gKi8KKwlkYXRhWzFdID0gaW53KGRldi0+aW9iYXNlICsgMTYpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZjc19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaW50IGJpdHM7CisKKwlpZiAoY2hhbiA8IDQpCisJCWJpdHMgPSAweDBmOworCWVsc2UKKwkJYml0cyA9IDB4ZjA7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gYml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCXMtPmlvX2JpdHMgJj0gYml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJKHMtPgorCQkJaW9fYml0cyAmICgxIDw8IGNoYW4pKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJZGV2cHJpdi0+c3RhdHVzMiAmPSB+MHgwMGMwOworCWRldnByaXYtPnN0YXR1czIgfD0gKHMtPmlvX2JpdHMgJiAweGYwKSA/IDB4MDA4MCA6IDA7CisJZGV2cHJpdi0+c3RhdHVzMiB8PSAocy0+aW9fYml0cyAmIDB4MGYpID8gMHgwMDQwIDogMDsKKworCW91dHcoZGV2cHJpdi0+c3RhdHVzMiwgZGV2LT5pb2Jhc2UgKyA2KTsKKworCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgaW50IGRhczE2Y3NfdGltZXJfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBkYXMxNmNzX3RpbWVyX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyogUENNQ0lBIHN0dWZmICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhlIGZvbGxvd2luZyBwY21jaWEgY29kZSBmb3IgdGhlIHBjbS1kYXMwOCBpcyBhZGFwdGVkIGZyb20gdGhlCisgICAgZHVtbXlfY3MuYyBkcml2ZXIgb2YgdGhlIExpbnV4IFBDTUNJQSBDYXJkIFNlcnZpY2VzIHBhY2thZ2UuCisKKyAgICBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKKyAgICA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcworICAgIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCisgICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQorICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCisgICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKKyAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KKyovCisjaWYgZGVmaW5lZChDT05GSUdfUENNQ0lBKSB8fCBkZWZpbmVkKENPTkZJR19QQ01DSUFfTU9EVUxFKQorCisjaWZkZWYgUENNQ0lBX0RFQlVHCitzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOworbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDA2NDQpOworI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKQorc3RhdGljIGNoYXIgKnZlcnNpb24gPQorCSJjYl9kYXMxNl9jcy5jIHBjbWNpYSBjb2RlIChEYXZpZCBTY2hsZWVmKSwgbW9kaWZpZWQgZnJvbSBkdW1teV9jcy5jIDEuMzEgMjAwMS8wOC8yNCAxMjoxMzoxMyAoRGF2aWQgSGluZHMpIjsKKyNlbHNlCisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRhczE2Y3NfcGNtY2lhX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBkYXMxNmNzX3BjbWNpYV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyBpbnQgZGFzMTZjc19wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworc3RhdGljIGludCBkYXMxNmNzX3BjbWNpYV9yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworLyoKKyAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQorICAgImluc3RhbmNlcyIgb2YgdGhlIGRyaXZlciwgd2hlcmUgZWFjaCBpbnN0YW5jZSByZXByZXNlbnRzIGV2ZXJ5dGhpbmcKKyAgIG5lZWRlZCB0byBtYW5hZ2Ugb25lIGFjdHVhbCBQQ01DSUEgY2FyZC4KKyovCisKK3N0YXRpYyBpbnQgZGFzMTZjc19wY21jaWFfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworc3RhdGljIHZvaWQgZGFzMTZjc19wY21jaWFfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworCisvKgorICAgWW91J2xsIGFsc28gbmVlZCB0byBwcm90b3R5cGUgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGFjdHVhbGx5CisgICBiZSB1c2VkIHRvIHRhbGsgdG8geW91ciBkZXZpY2UuICBTZWUgJ21lbW9yeV9jcycgZm9yIGEgZ29vZCBleGFtcGxlCisgICBvZiBhIGZ1bGx5IHNlbGYtc3VmZmljaWVudCBkcml2ZXI7IHRoZSBvdGhlciBkcml2ZXJzIHJlbHkgbW9yZSBvcgorICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgorKi8KKworLyoKKyAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKKyAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCisgICBkYXRhYmFzZS4KKyovCisKK3N0YXRpYyBkZXZfaW5mb190IGRldl9pbmZvID0gImNiX2RhczE2X2NzIjsKKworc3RydWN0IGxvY2FsX2luZm9fdCB7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJZGV2X25vZGVfdCBub2RlOworCWludCBzdG9wOworCXN0cnVjdCBidXNfb3BlcmF0aW9ucyAqYnVzOworfTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBkYXMxNmNzX3BjbWNpYV9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZworICAgIGxvY2FsIGRhdGEgc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZAorICAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4KKworICAgIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQorICAgIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhCisgICAgY2FyZCBpbnNlcnRpb24gZXZlbnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IGRhczE2Y3NfcGNtY2lhX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbDsKKworCURFQlVHKDAsICJkYXMxNmNzX3BjbWNpYV9hdHRhY2goKVxuIik7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLworCWxvY2FsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOworCWlmICghbG9jYWwpCisJCXJldHVybiAtRU5PTUVNOworCWxvY2FsLT5saW5rID0gbGluazsKKwlsaW5rLT5wcml2ID0gbG9jYWw7CisKKwkvKiBJbml0aWFsaXplIHRoZSBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAqLworCS8qIEludGVycnVwdCBzZXR1cCAqLworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CisKKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOworCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCisJY3VyX2RldiA9IGxpbms7CisKKwlkYXMxNmNzX3BjbWNpYV9jb25maWcobGluayk7CisKKwlyZXR1cm4gMDsKK30JCQkJLyogZGFzMTZjc19wY21jaWFfYXR0YWNoICovCisKK3N0YXRpYyB2b2lkIGRhczE2Y3NfcGNtY2lhX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlERUJVRygwLCAiZGFzMTZjc19wY21jaWFfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKworCWlmIChsaW5rLT5kZXZfbm9kZSkgeworCQkoKHN0cnVjdCBsb2NhbF9pbmZvX3QgKikgbGluay0+cHJpdiktPnN0b3AgPSAxOworCQlkYXMxNmNzX3BjbWNpYV9yZWxlYXNlKGxpbmspOworCX0KKwkvKiBUaGlzIHBvaW50cyB0byB0aGUgcGFyZW50IHN0cnVjdCBsb2NhbF9pbmZvX3Qgc3RydWN0ICovCisJaWYgKGxpbmstPnByaXYpCisJCWtmcmVlKGxpbmstPnByaXYpOworfQkJCQkvKiBkYXMxNmNzX3BjbWNpYV9kZXRhY2ggKi8KKworc3RhdGljIHZvaWQgZGFzMTZjc19wY21jaWFfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CisJdHVwbGVfdCB0dXBsZTsKKwljaXNwYXJzZV90IHBhcnNlOworCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKKwl1X2NoYXIgYnVmWzY0XTsKKwljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKKworCURFQlVHKDAsICJkYXMxNmNzX3BjbWNpYV9jb25maWcoMHglcClcbiIsIGxpbmspOworCisJLyoKKwkgICBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24KKwkgICByZWdpc3RlcnMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCWxhc3RfZm4gPSBHZXRGaXJzdFR1cGxlOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApCisJCWdvdG8gY3NfZmFpbGVkOworCWxhc3RfZm4gPSBHZXRUdXBsZURhdGE7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKSAhPSAwKQorCQlnb3RvIGNzX2ZhaWxlZDsKKwlsYXN0X2ZuID0gUGFyc2VUdXBsZTsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSkgIT0gMCkKKwkJZ290byBjc19mYWlsZWQ7CisJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CisJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOworCisJLyoKKwkgICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLAorCSAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKKwkgICB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csIGFuZCBpbnRlcnJ1cHQgc2V0dGluZ3MuCisKKwkgICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZSBjYXJkIHRvIGJlIGNvbmZpZ3VyZWQ6IHdlIHVzZQorCSAgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCisJICAgdGhpcyB3b3VsZCB3b3JrIGZvciBhbnkgUENNQ0lBIGNhcmQsIGJ1dCBpdCByZXF1aXJlcyBhIGNvbXBsZXRlCisJICAgYW5kIGFjY3VyYXRlIENJUy4gIEluIHByYWN0aWNlLCBhIGRyaXZlciB1c3VhbGx5ICJrbm93cyIgbW9zdCBvZgorCSAgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKKwkgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJbGFzdF9mbiA9IEdldEZpcnN0VHVwbGU7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gMCkKKwkJZ290byBjc19mYWlsZWQ7CisJd2hpbGUgKDEpIHsKKwkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKKwkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKGxpbmssICZ0dXBsZSwgJnBhcnNlKSkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCisJCQlkZmx0ID0gKmNmZzsKKwkJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CisKKwkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisvKglpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7CisJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworCQlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOworCX0KKyovCisJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCQlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpCisJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOworCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOworCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCX0KKwkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KKworCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJCWJyZWFrOworCisJICAgICAgbmV4dF9lbnRyeToKKwkJbGFzdF9mbiA9IEdldE5leHRUdXBsZTsKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKSAhPSAwKQorCQkJZ290byBjc19mYWlsZWQ7CisJfQorCisJLyoKKwkgICBBbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFzc2lnbiBhCisJICAgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YgdGhlCisJICAgaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4KKwkgKi8KKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7CisJCWxhc3RfZm4gPSBSZXF1ZXN0SVJROworCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKSAhPSAwKQorCQkJZ290byBjc19mYWlsZWQ7CisJfQorCS8qCisJICAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKKwkgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCisJICAgY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KKwkgKi8KKwlsYXN0X2ZuID0gUmVxdWVzdENvbmZpZ3VyYXRpb247CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSAhPSAwKQorCQlnb3RvIGNzX2ZhaWxlZDsKKworCS8qCisJICAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKKwkgICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuCisJICovCisJc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsICJjYl9kYXMxNl9jcyIpOworCWRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7CisJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOworCisJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLworCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMngiLAorCQlkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJCXByaW50aygiLCBpcnEgJXUiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCisJCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAorCQkJbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7CisJaWYgKGxpbmstPmlvLk51bVBvcnRzMikKKwkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAorCQkJbGluay0+aW8uQmFzZVBvcnQyICsgbGluay0+aW8uTnVtUG9ydHMyIC0gMSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuOworCisgICAgICBjc19mYWlsZWQ6CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworCWRhczE2Y3NfcGNtY2lhX3JlbGVhc2UobGluayk7Cit9CQkJCS8qIGRhczE2Y3NfcGNtY2lhX2NvbmZpZyAqLworCitzdGF0aWMgdm9pZCBkYXMxNmNzX3BjbWNpYV9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCURFQlVHKDAsICJkYXMxNmNzX3BjbWNpYV9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Cit9CQkJCS8qIGRhczE2Y3NfcGNtY2lhX3JlbGVhc2UgKi8KKworc3RhdGljIGludCBkYXMxNmNzX3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKKworCS8qIE1hcmsgdGhlIGRldmljZSBhcyBzdG9wcGVkLCB0byBibG9jayBJTyB1bnRpbCBsYXRlciAqLworCWxvY2FsLT5zdG9wID0gMTsKKworCXJldHVybiAwOworfQkJCQkvKiBkYXMxNmNzX3BjbWNpYV9zdXNwZW5kICovCisKK3N0YXRpYyBpbnQgZGFzMTZjc19wY21jaWFfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKKworCWxvY2FsLT5zdG9wID0gMDsKKwlyZXR1cm4gMDsKK30JCQkJLyogZGFzMTZjc19wY21jaWFfcmVzdW1lICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgZGFzMTZjc19pZF90YWJsZVtdID0geworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDFjNSwgMHgwMDM5KSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxYzUsIDB4NDAwOSksCisJUENNQ0lBX0RFVklDRV9OVUxMCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgZGFzMTZjc19pZF90YWJsZSk7CisKK3N0cnVjdCBwY21jaWFfZHJpdmVyIGRhczE2Y3NfZHJpdmVyID0geworCS5wcm9iZSA9IGRhczE2Y3NfcGNtY2lhX2F0dGFjaCwKKwkucmVtb3ZlID0gZGFzMTZjc19wY21jaWFfZGV0YWNoLAorCS5zdXNwZW5kID0gZGFzMTZjc19wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lID0gZGFzMTZjc19wY21jaWFfcmVzdW1lLAorCS5pZF90YWJsZSA9IGRhczE2Y3NfaWRfdGFibGUsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmRydiA9IHsKKwkJCS5uYW1lID0gZGV2X2luZm8sCisJCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2RhczE2Y3NfcGNtY2lhX2NzKHZvaWQpCit7CisJREVCVUcoMCwgIiVzXG4iLCB2ZXJzaW9uKTsKKwlwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZkYXMxNmNzX2RyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2RhczE2Y3NfcGNtY2lhX2NzKHZvaWQpCit7CisJREVCVUcoMCwgImRhczE2Y3NfcGNtY2lhX2NzOiB1bmxvYWRpbmdcbiIpOworCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmZGFzMTZjc19kcml2ZXIpOworfQorCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGluaXRfZGFzMTZjc19wY21jaWFfY3MoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGFzMTZjcyk7Cit9CisKK3ZvaWQgX19leGl0IGNsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJZXhpdF9kYXMxNmNzX3BjbWNpYV9jcygpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RhczE2Y3MpOworfQorCisjZWxzZQorQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXMxNmNzKTsKKyNlbmRpZiAvL0NPTkZJR19QQ01DSUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2M1NTE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhcy5jCkBAIC0wLDAgKzEsMTgzMSBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYworCisgICAgRGV2ZWxvcGVkIGJ5IEl2YW4gTWFydGluZXogYW5kIEZyYW5rIE1vcmkgSGVzcywgd2l0aCB2YWx1YWJsZSBoZWxwIGZyb20KKyAgICBEYXZpZCBTY2hsZWVmIGFuZCB0aGUgcmVzdCBvZiB0aGUgQ29tZWRpIGRldmVsb3BlcnMgY29tdW5pdHkuCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMyBJdmFuIE1hcnRpbmV6IDxpbXJAb2Vyc3RlZC5kdHUuZGs+CisgICAgQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5Ny04IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKy8qCitEcml2ZXI6IGNiX3BjaWRhcworRGVzY3JpcHRpb246IE1lYXN1cmVtZW50Q29tcHV0aW5nIFBDSS1EQVMgc2VyaWVzIHdpdGggdGhlIEFNQ0MgUzU5MzMgUENJIGNvbnRyb2xsZXIKK0F1dGhvcjogSXZhbiBNYXJ0aW5leiA8aW1yQG9lcnN0ZWQuZHR1LmRrPiwKKyAgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorVXBkYXRlZDogMjAwMy0zLTExCitEZXZpY2VzOiBbTWVhc3VyZW1lbnQgQ29tcHV0aW5nXSBQQ0ktREFTMTYwMi8xNiAoY2JfcGNpZGFzKSwKKyAgUENJLURBUzE2MDIvMTZqciwgUENJLURBUzE2MDIvMTIsIFBDSS1EQVMxMjAwLCBQQ0ktREFTMTIwMGpyLAorICBQQ0ktREFTMTAwMCwgUENJLURBUzEwMDEsIFBDSV9EQVMxMDAyCisKK1N0YXR1czoKKyAgVGhlcmUgYXJlIG1hbnkgcmVwb3J0cyBvZiB0aGUgZHJpdmVyIGJlaW5nIHVzZWQgd2l0aCBtb3N0IG9mIHRoZQorICBzdXBwb3J0ZWQgY2FyZHMuIERlc3BpdGUgbm8gZGV0YWlsZWQgbG9nIGlzIG1haW50YWluZWQsIGl0IGNhbgorICBiZSBzYWlkIHRoYXQgdGhlIGRyaXZlciBpcyBxdWl0ZSB0ZXN0ZWQgYW5kIHN0YWJsZS4KKworICBUaGUgYm9hcmRzIG1heSBiZSBhdXRvY2FsaWJyYXRlZCB1c2luZyB0aGUgY29tZWRpX2NhbGlicmF0ZQorICB1dGlsaXR5LgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IHN1cHBvcnRlZAorICBQQ0kgZGV2aWNlIGZvdW5kIHdpbGwgYmUgdXNlZC4KKworRm9yIGNvbW1hbmRzLCB0aGUgc2Nhbm5lZCBjaGFubmVscyBtdXN0IGJlIGNvbnNlY3V0aXZlCisoaS5lLiA0LTUtNi03LCAyLTMtNCwuLi4pLCBhbmQgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZQorcmFuZ2UgYW5kIGFyZWYuCisqLworLyoKKworVE9ETzoKKworYW5hbG9nIHRyaWdnZXJpbmcgb24gMTYwMiBzZXJpZXMKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJhbWNjX3M1OTMzLmgiCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgImNvbWVkaV9mYy5oIgorCisjdW5kZWYgQ0JfUENJREFTX0RFQlVHCQkvLyBkaXNhYmxlIGRlYnVnZ2luZyBjb2RlCisvLyNkZWZpbmUgQ0JfUENJREFTX0RFQlVHICAgICAgIC8vIGVuYWJsZSBkZWJ1Z2dpbmcgY29kZQorCisvLyBQQ0kgdmVuZG9yIG51bWJlciBvZiBDb21wdXRlckJvYXJkcy9NZWFzdXJlbWVudENvbXB1dGluZworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NCCTB4MTMwNworI2RlZmluZSBUSU1FUl9CQVNFIDEwMAkJLy8gMTBNSHogbWFzdGVyIGNsb2NrCisjZGVmaW5lIEFJX0JVRkZFUl9TSVpFIDEwMjQJLy8gbWF4aW11bSBmaWZvIHNpemUgb2YgYW55IHN1cHBvcnRlZCBib2FyZAorI2RlZmluZSBBT19CVUZGRVJfU0laRSAxMDI0CS8vIG1heGltdW0gZmlmbyBzaXplIG9mIGFueSBzdXBwb3J0ZWQgYm9hcmQKKyNkZWZpbmUgTlVNX0NIQU5ORUxTXzg4MDAgOAorI2RlZmluZSBOVU1fQ0hBTk5FTFNfNzM3NiAxCisjZGVmaW5lIE5VTV9DSEFOTkVMU184NDAyIDIKKyNkZWZpbmUgTlVNX0NIQU5ORUxTX0RBQzA4IDEKKworLyogUENJLURBUyBiYXNlIGFkZHJlc3NlcyAqLworCisvLyBpbmRpY2VzIG9mIGJhc2UgYWRkcmVzcyByZWdpb25zCisjZGVmaW5lIFM1OTMzX0JBRFJJTkRFWCAwCisjZGVmaW5lIENPTlRfU1RBVF9CQURSSU5ERVggMQorI2RlZmluZSBBRENfRklGT19CQURSSU5ERVggMgorI2RlZmluZSBQQUNFUl9CQURSSU5ERVggMworI2RlZmluZSBBT19CQURSSU5ERVggNAorLy8gc2l6ZXMgb2YgaW8gcmVnaW9ucworI2RlZmluZSBDT05UX1NUQVRfU0laRSAxMAorI2RlZmluZSBBRENfRklGT19TSVpFIDQKKyNkZWZpbmUgUEFDRVJfU0laRSAxMgorI2RlZmluZSBBT19TSVpFIDQKKworLyogQ29udHJvbC9TdGF0dXMgcmVnaXN0ZXJzICovCisjZGVmaW5lIElOVF9BRENGSUZPCTAJLy8gSU5URVJSVVBUIC8gQURDIEZJRk8gcmVnaXN0ZXIKKyNkZWZpbmUgICBJTlRfRU9TIDB4MQkJLy8gaW50ZXJydXB0IGVuZCBvZiBzY2FuCisjZGVmaW5lICAgSU5UX0ZIRiAweDIJCS8vIGludGVycnVwdCBmaWZvIGhhbGYgZnVsbAorI2RlZmluZSAgIElOVF9GTkUgMHgzCQkvLyBpbnRlcnJ1cHQgZmlmbyBub3QgZW1wdHkKKyNkZWZpbmUgICBJTlRfTUFTSyAweDMJCS8vIG1hc2sgb2YgaW50ZXJydXB0IHNlbGVjdCBiaXRzCisjZGVmaW5lICAgSU5URSAweDQJCS8vIGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgICBEQUhGSUUgMHg4CQkvLyBkYWMgaGFsZiBmdWxsIGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgICBFT0FJRQkweDEwCQkvLyBlbmQgb2YgYXF1aXNpdGlvbiBpbnRlcnJ1cHQgZW5hYmxlCisjZGVmaW5lICAgREFIRkkJMHgyMAkJLy8gZGFjIGhhbGYgZnVsbCByZWFkIHN0YXR1cyAvIHdyaXRlIGludGVycnVwdCBjbGVhcgorI2RlZmluZSAgIEVPQUkgMHg0MAkJLy8gcmVhZCBlbmQgb2YgYWNxLiBpbnRlcnJ1cHQgc3RhdHVzIC8gd3JpdGUgY2xlYXIKKyNkZWZpbmUgICBJTlQgMHg4MAkJLy8gcmVhZCBpbnRlcnJ1cHQgc3RhdHVzIC8gd3JpdGUgY2xlYXIKKyNkZWZpbmUgICBFT0JJIDB4MjAwCQkvLyByZWFkIGVuZCBvZiBidXJzdCBpbnRlcnJ1cHQgc3RhdHVzCisjZGVmaW5lICAgQURIRkkgMHg0MDAJCS8vIHJlYWQgaGFsZi1mdWxsIGludGVycnVwdCBzdGF0dXMKKyNkZWZpbmUgICBBRE5FSSAweDgwMAkJLy8gcmVhZCBmaWZvIG5vdCBlbXB0eSBpbnRlcnJ1cHQgbGF0Y2ggc3RhdHVzCisjZGVmaW5lICAgQURORSAweDEwMDAJCS8vIHJlYWQsIGZpZm8gbm90IGVtcHR5IChyZWFsdGltZSwgbm90IGxhdGNoZWQpIHN0YXR1cworI2RlZmluZSAgIERBRU1JRQkweDEwMDAJLy8gd3JpdGUsIGRhYyBlbXB0eSBpbnRlcnJ1cHQgZW5hYmxlCisjZGVmaW5lICAgTEFERlVMIDB4MjAwMAkJLy8gcmVhZCBmaWZvIG92ZXJmbG93IC8gd3JpdGUgY2xlYXIKKyNkZWZpbmUgICBEQUVNSSAweDQwMDAJCS8vIGRhYyBmaWZvIGVtcHR5IGludGVycnVwdCBzdGF0dXMgLyB3cml0ZSBjbGVhcgorCisjZGVmaW5lIEFEQ01VWF9DT05UCTIJLy8gQURDIENIQU5ORUwgTVVYIEFORCBDT05UUk9MIHJlZ2lzdGVyCisjZGVmaW5lICAgQkVHSU5fU0NBTih4KQkoKHgpICYgMHhmKQorI2RlZmluZSAgIEVORF9TQ0FOKHgpCSgoKHgpICYgMHhmKSA8PCA0KQorI2RlZmluZSAgIEdBSU5fQklUUyh4KQkoKCh4KSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgICBVTklQCTB4ODAwCQkvLyBBbmFsb2cgZnJvbnQtZW5kIHVuaXBvbGFyIGZvciByYW5nZQorI2RlZmluZSAgIFNFCTB4NDAwCQkvLyBJbnB1dHMgaW4gc2luZ2xlLWVuZGVkIG1vZGUKKyNkZWZpbmUgICBQQUNFUl9NQVNLCTB4MzAwMAkvLyBwYWNlciBzb3VyY2UgYml0cworI2RlZmluZSAgIFBBQ0VSX0lOVCAweDEwMDAJLy8gaW50ZXJuYWwgcGFjZXIKKyNkZWZpbmUgICBQQUNFUl9FWFRfRkFMTAkweDIwMDAJLy8gZXh0ZXJuYWwgZmFsbGluZyBlZGdlCisjZGVmaW5lICAgUEFDRVJfRVhUX1JJU0UJMHgzMDAwCS8vIGV4dGVybmFsIHJpc2luZyBlZGdlCisjZGVmaW5lICAgRU9DCTB4NDAwMAkJLy8gYWRjIG5vdCBidXN5CisKKyNkZWZpbmUgVFJJR19DT05UU1RBVCA0CQkvLyBUUklHR0VSIENPTlRST0wvU1RBVFVTIHJlZ2lzdGVyCisjZGVmaW5lICAgU1dfVFJJR0dFUiAweDEJLy8gc29mdHdhcmUgc3RhcnQgdHJpZ2dlcgorI2RlZmluZSAgIEVYVF9UUklHR0VSIDB4MgkvLyBleHRlcm5hbCBzdGFydCB0cmlnZ2VyCisjZGVmaW5lICAgQU5BTE9HX1RSSUdHRVIgMHgzCS8vIGV4dGVybmFsIGFuYWxvZyB0cmlnZ2VyCisjZGVmaW5lICAgVFJJR0dFUl9NQVNLCTB4MwkvLyBtYXNrIG9mIGJpdHMgdGhhdCBkZXRlcm1pbmUgc3RhcnQgdHJpZ2dlcgorI2RlZmluZSAgIFRHRU4JMHgxMAkJLy8gZW5hYmxlIGV4dGVybmFsIHN0YXJ0IHRyaWdnZXIKKyNkZWZpbmUgICBCVVJTVEUgMHgyMAkJLy8gYnVyc3QgbW9kZSBlbmFibGUKKyNkZWZpbmUgICBYVFJDTAkweDgwCQkvLyBjbGVhciBleHRlcm5hbCB0cmlnZ2VyCisKKyNkZWZpbmUgQ0FMSUJSQVRJT05fUkVHCTYJLy8gQ0FMSUJSQVRJT04gcmVnaXN0ZXIKKyNkZWZpbmUgICBTRUxFQ1RfODgwMF9CSVQJMHgxMDAJLy8gc2VsZWN0IDg4MDAgY2FsZGFjCisjZGVmaW5lICAgU0VMRUNUX1RSSU1QT1RfQklUCTB4MjAwCS8vIHNlbGVjdCBhZDczNzYgdHJpbSBwb3QKKyNkZWZpbmUgICBTRUxFQ1RfREFDMDhfQklUCTB4NDAwCS8vIHNlbGVjdCBkYWMwOCBjYWxkYWMKKyNkZWZpbmUgICBDQUxfU1JDX0JJVFMoeCkJKCgoeCkgJiAweDcpIDw8IDExKQorI2RlZmluZSAgIENBTF9FTl9CSVQJMHg0MDAwCS8vIHJlYWQgY2FsaWJyYXRpb24gc291cmNlIGluc3RlYWQgb2YgYW5hbG9nIGlucHV0IGNoYW5uZWwgMAorI2RlZmluZSAgIFNFUklBTF9EQVRBX0lOX0JJVAkweDgwMDAJLy8gc2VyaWFsIGRhdGEgc3RyZWFtIGdvaW5nIHRvIDg4MDAgYW5kIDczNzYKKworI2RlZmluZSBEQUNfQ1NSCTB4OAkJLy8gZGFjIGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcgorZW51bSBkYWNfY3NyX2JpdHMgeworCURBQ0VOID0gMHgyLAkJLy8gZGFjIGVuYWJsZQorCURBQ19NT0RFX1VQREFURV9CT1RIID0gMHg4MCwJLy8gdXBkYXRlIGJvdGggZGFjcyB3aGVuIGRhYzAgaXMgd3JpdHRlbgorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IERBQ19SQU5HRSh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IHJhbmdlKQoreworCXJldHVybiAocmFuZ2UgJiAweDMpIDw8ICg4ICsgMiAqIChjaGFubmVsICYgMHgxKSk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBEQUNfUkFOR0VfTUFTSyh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHgzIDw8ICg4ICsgMiAqIChjaGFubmVsICYgMHgxKSk7Cit9OworCisvLyBiaXRzIGZvciAxNjAyIHNlcmllcyBvbmx5CitlbnVtIGRhY19jc3JfYml0c18xNjAyIHsKKwlEQUNfRU1QVFkgPSAweDEsCS8vIGRhYyBmaWZvIGVtcHR5LCByZWFkLCB3cml0ZSBjbGVhcgorCURBQ19TVEFSVCA9IDB4NCwJLy8gc3RhcnQvYXJtIGRhYyBmaWZvIG9wZXJhdGlvbnMKKwlEQUNfUEFDRVJfTUFTSyA9IDB4MTgsCS8vIGJpdHMgdGhhdCBzZXQgZGFjIHBhY2VyIHNvdXJjZQorCURBQ19QQUNFUl9JTlQgPSAweDgsCS8vIGRhYyBpbnRlcm5hbCBwYWNpbmcKKwlEQUNfUEFDRVJfRVhUX0ZBTEwgPSAweDEwLAkvLyBkYWMgZXh0ZXJuYWwgcGFjaW5nLCBmYWxsaW5nIGVkZ2UKKwlEQUNfUEFDRVJfRVhUX1JJU0UgPSAweDE4LAkvLyBkYWMgZXh0ZXJuYWwgcGFjaW5nLCByaXNpbmcgZWRnZQorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IERBQ19DSEFOX0VOKHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXJldHVybiAxIDw8ICg1ICsgKGNoYW5uZWwgJiAweDEpKTsJLy8gZW5hYmxlIGNoYW5uZWwgMCBvciAxCit9OworCisvKiBhbmFsb2cgaW5wdXQgZmlmbyAqLworI2RlZmluZSBBRENEQVRBCTAJCS8vIEFEQyBEQVRBIHJlZ2lzdGVyCisjZGVmaW5lIEFEQ0ZJRk9DTFIJMgkvLyBBREMgRklGTyBDTEVBUgorCisvLyBwYWNlciwgY291bnRlciwgZGlvIHJlZ2lzdGVycworI2RlZmluZSBBREM4MjU0IDAKKyNkZWZpbmUgRElPXzgyNTUgNAorI2RlZmluZSBEQUM4MjU0IDgKKworLy8gYW5hbG9nIG91dHB1dCByZWdpc3RlcnMgZm9yIDEwMHgsIDEyMDAgc2VyaWVzCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBEQUNfREFUQV9SRUcodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIDIgKiAoY2hhbm5lbCAmIDB4MSk7Cit9CisKKy8qIGFuYWxvZyBvdXRwdXQgcmVnaXN0ZXJzIGZvciAxNjAyIHNlcmllcyovCisjZGVmaW5lIERBQ0RBVEEJMAkJLy8gREFDIERBVEEgcmVnaXN0ZXIKKyNkZWZpbmUgREFDRklGT0NMUgkyCS8vIERBQyBGSUZPIENMRUFSCisKKy8vIGJpdCBpbiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiByYW5nZSBpbmRleCB0aGF0IGluZGljYXRlcyB1bmlwb2xhciBpbnB1dCByYW5nZQorI2RlZmluZSBJU19VTklQT0xBUiAweDQKKy8vIGFuYWxvZyBpbnB1dCByYW5nZXMgZm9yIG1vc3QgYm9hcmRzCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgY2JfcGNpZGFzX3JhbmdlcyA9IHsKKwk4LAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KQorCQl9Cit9OworCisvLyBwY2ktZGFzMTAwMSBpbnB1dCByYW5nZXMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBjYl9wY2lkYXNfYWx0X3JhbmdlcyA9IHsKKwk4LAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjAxKSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgwLjAxKQorCQl9Cit9OworCisvLyBhbmFsb2cgb3V0cHV0IHJhbmdlcworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGNiX3BjaWRhc19hb19yYW5nZXMgPSB7CisJNCwKKwl7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJfQorfTsKKworZW51bSB0cmltcG90X21vZGVsIHsKKwlBRDczNzYsCisJQUQ4NDAyLAorfTsKKworc3RydWN0IGNiX3BjaWRhc19ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQ7CisJaW50IGFpX3NlX2NoYW5zOwkvLyBJbnB1dHMgaW4gc2luZ2xlLWVuZGVkIG1vZGUKKwlpbnQgYWlfZGlmZl9jaGFuczsJLy8gSW5wdXRzIGluIGRpZmZlcmVudGlhbCBtb2RlCisJaW50IGFpX2JpdHM7CQkvLyBhbmFsb2cgaW5wdXQgcmVzb2x1dGlvbgorCWludCBhaV9zcGVlZDsJCS8vIGZhc3Rlc3QgY29udmVyc2lvbiBwZXJpb2QgaW4gbnMKKwlpbnQgYW9fbmNoYW47CQkvLyBudW1iZXIgb2YgYW5hbG9nIG91dCBjaGFubmVscworCWludCBoYXNfYW9fZmlmbzsJLy8gYW5hbG9nIG91dHB1dCBoYXMgZmlmbworCWludCBhb19zY2FuX3NwZWVkOwkvLyBhbmFsb2cgb3V0cHV0IHNwZWVkIGZvciAxNjAyIHNlcmllcyAoZm9yIGEgc2Nhbiwgbm90IGNvbnZlcnNpb24pCisJaW50IGZpZm9fc2l6ZTsJCS8vIG51bWJlciBvZiBzYW1wbGVzIGZpZm8gY2FuIGhvbGQKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VzOworCWVudW0gdHJpbXBvdF9tb2RlbCB0cmltcG90OworCXVuc2lnbmVkIGhhc19kYWMwODoxOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjYl9wY2lkYXNfYm9hcmQgY2JfcGNpZGFzX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczE2MDIvMTYiLAorCSAgICAgIGRldmljZV9pZDoweDEsCisJICAgICAgYWlfc2VfY2hhbnM6MTYsCisJICAgICAgYWlfZGlmZl9jaGFuczo4LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBoYXNfYW9fZmlmbzoxLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgZmlmb19zaXplOjUxMiwKKwkgICAgICByYW5nZXM6CSZjYl9wY2lkYXNfcmFuZ2VzLAorCSAgICAgIHRyaW1wb3Q6CUFEODQwMiwKKwkgICAgICBoYXNfZGFjMDg6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXMxMjAwIiwKKwkgICAgICBkZXZpY2VfaWQ6MHhGLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2RpZmZfY2hhbnM6OCwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhaV9zcGVlZDozMjAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgaGFzX2FvX2ZpZm86MCwKKwkgICAgICBmaWZvX3NpemU6MTAyNCwKKwkgICAgICByYW5nZXM6CSZjYl9wY2lkYXNfcmFuZ2VzLAorCSAgICAgIHRyaW1wb3Q6CUFENzM3NiwKKwkgICAgICBoYXNfZGFjMDg6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXMxNjAyLzEyIiwKKwkgICAgICBkZXZpY2VfaWQ6MHgxMCwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9kaWZmX2NoYW5zOjgsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6MzIwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGhhc19hb19maWZvOjEsCisJICAgICAgYW9fc2Nhbl9zcGVlZDo0MDAwLAorCSAgICAgIGZpZm9fc2l6ZToxMDI0LAorCSAgICAgIHJhbmdlczoJJmNiX3BjaWRhc19yYW5nZXMsCisJICAgICAgdHJpbXBvdDoJQUQ3Mzc2LAorCSAgICAgIGhhc19kYWMwODowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczEyMDAvanIiLAorCSAgICAgIGRldmljZV9pZDoweDE5LAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2RpZmZfY2hhbnM6OCwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhaV9zcGVlZDozMjAwLAorCSAgICAgIGFvX25jaGFuOjAsCisJICAgICAgaGFzX2FvX2ZpZm86MCwKKwkgICAgICBmaWZvX3NpemU6MTAyNCwKKwkgICAgICByYW5nZXM6CSZjYl9wY2lkYXNfcmFuZ2VzLAorCSAgICAgIHRyaW1wb3Q6CUFENzM3NiwKKwkgICAgICBoYXNfZGFjMDg6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXMxNjAyLzE2L2pyIiwKKwkgICAgICBkZXZpY2VfaWQ6MHgxQywKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9kaWZmX2NoYW5zOjgsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYWlfc3BlZWQ6NTAwMCwKKwkgICAgICBhb19uY2hhbjowLAorCSAgICAgIGhhc19hb19maWZvOjAsCisJICAgICAgZmlmb19zaXplOjUxMiwKKwkgICAgICByYW5nZXM6CSZjYl9wY2lkYXNfcmFuZ2VzLAorCSAgICAgIHRyaW1wb3Q6CUFEODQwMiwKKwkgICAgICBoYXNfZGFjMDg6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXMxMDAwIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg0QywKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9kaWZmX2NoYW5zOjgsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6NDAwMCwKKwkgICAgICBhb19uY2hhbjowLAorCSAgICAgIGhhc19hb19maWZvOjAsCisJICAgICAgZmlmb19zaXplOjEwMjQsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGFzX3JhbmdlcywKKwkgICAgICB0cmltcG90OglBRDczNzYsCisJICAgICAgaGFzX2RhYzA4OjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzMTAwMSIsCisJICAgICAgZGV2aWNlX2lkOjB4MWEsCisJICAgICAgYWlfc2VfY2hhbnM6MTYsCisJICAgICAgYWlfZGlmZl9jaGFuczo4LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjY4MDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBoYXNfYW9fZmlmbzowLAorCSAgICAgIGZpZm9fc2l6ZToxMDI0LAorCSAgICAgIHJhbmdlczoJJmNiX3BjaWRhc19hbHRfcmFuZ2VzLAorCSAgICAgIHRyaW1wb3Q6CUFENzM3NiwKKwkgICAgICBoYXNfZGFjMDg6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXMxMDAyIiwKKwkgICAgICBkZXZpY2VfaWQ6MHgxYiwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9kaWZmX2NoYW5zOjgsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6NjgwMCwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGhhc19hb19maWZvOjAsCisJICAgICAgZmlmb19zaXplOjEwMjQsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGFzX3JhbmdlcywKKwkgICAgICB0cmltcG90OglBRDczNzYsCisJICAgICAgaGFzX2RhYzA4OjAsCisJCX0sCit9OworCisvLyBOdW1iZXIgb2YgYm9hcmRzIGluIGNiX3BjaWRhc19ib2FyZHMKKyNkZWZpbmUgTl9CT0FSRFMJKHNpemVvZihjYl9wY2lkYXNfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgY2JfcGNpZGFzX2JvYXJkKSkKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGNiX3BjaWRhc19wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMWMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMWEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0NCLCAweDAwMWIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNiX3BjaWRhc19wY2lfdGFibGUpOworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBjYl9wY2lkYXNfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IGNiX3BjaWRhc19wcml2YXRlIHsKKwkvKiB3b3VsZCBiZSB1c2VmdWwgZm9yIGEgUENJIGRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCS8vIGJhc2UgYWRkcmVzc2VzCisJdW5zaWduZWQgbG9uZyBzNTkzM19jb25maWc7CisJdW5zaWduZWQgbG9uZyBjb250cm9sX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGFkY19maWZvOworCXVuc2lnbmVkIGxvbmcgcGFjZXJfY291bnRlcl9kaW87CisJdW5zaWduZWQgbG9uZyBhb19yZWdpc3RlcnM7CisJLy8gZGl2aXNvcnMgb2YgbWFzdGVyIGNsb2NrIGZvciBhbmFsb2cgaW5wdXQgcGFjaW5nCisJdW5zaWduZWQgaW50IGRpdmlzb3IxOworCXVuc2lnbmVkIGludCBkaXZpc29yMjsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY291bnQ7CS8vIG51bWJlciBvZiBhbmFsb2cgaW5wdXQgc2FtcGxlcyByZW1haW5pbmcKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYWRjX2ZpZm9fYml0czsJLy8gYml0cyB0byB3cml0ZSB0byBpbnRlcnVwdC9hZGNmaWZvIHJlZ2lzdGVyCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IHM1OTMzX2ludGNzcl9iaXRzOwkvLyBiaXRzIHRvIHdyaXRlIHRvIGFtY2MgczU5MzMgaW50ZXJydXB0IGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGFvX2NvbnRyb2xfYml0czsJLy8gYml0cyB0byB3cml0ZSB0byBhbyBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIKKwlzaG9ydCBhaV9idWZmZXJbQUlfQlVGRkVSX1NJWkVdOworCXNob3J0IGFvX2J1ZmZlcltBT19CVUZGRVJfU0laRV07CisJLy8gZGl2aXNvcnMgb2YgbWFzdGVyIGNsb2NrIGZvciBhbmFsb2cgb3V0cHV0IHBhY2luZworCXVuc2lnbmVkIGludCBhb19kaXZpc29yMTsKKwl1bnNpZ25lZCBpbnQgYW9fZGl2aXNvcjI7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGFvX2NvdW50OwkvLyBudW1iZXIgb2YgYW5hbG9nIG91dHB1dCBzYW1wbGVzIHJlbWFpbmluZworCWludCBhb192YWx1ZVsyXTsJLy8gcmVtZW1iZXIgd2hhdCB0aGUgYW5hbG9nIG91dHB1dHMgYXJlIHNldCB0bywgdG8gYWxsb3cgcmVhZGJhY2sKKwl1bnNpZ25lZCBpbnQgY2FsZGFjX3ZhbHVlW05VTV9DSEFOTkVMU184ODAwXTsJLy8gZm9yIHJlYWRiYWNrIG9mIGNhbGRhYworCXVuc2lnbmVkIGludCB0cmltcG90X3ZhbHVlW05VTV9DSEFOTkVMU184NDAyXTsJLy8gZm9yIHJlYWRiYWNrIG9mIHRyaW1wb3QKKwl1bnNpZ25lZCBpbnQgZGFjMDhfdmFsdWU7CisJdW5zaWduZWQgaW50IGNhbGlicmF0aW9uX3NvdXJjZTsKK307CisKKy8qCisgKiBtb3N0IGRyaXZlcnMgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisgKiBhY2Nlc3MgdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgY2JfcGNpZGFzX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IGNiX3BjaWRhc19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBjYl9wY2lkYXNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfY2JfcGNpZGFzID0geworICAgICAgZHJpdmVyX25hbWU6ImNiX3BjaWRhcyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6Y2JfcGNpZGFzX2F0dGFjaCwKKyAgICAgIGRldGFjaDpjYl9wY2lkYXNfZGV0YWNoLAorfTsKKworc3RhdGljIGludCBjYl9wY2lkYXNfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBhaV9jb25maWdfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fbm9maWZvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNiX3BjaWRhc19hb19maWZvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNiX3BjaWRhc19hb19yZWFkYmFja19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNiX3BjaWRhc19haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGNiX3BjaWRhc19haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBjYl9wY2lkYXNfYW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXYsCisJCQkJdW5zaWduZWQgaW50IHRyaWdfbnVtKTsKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaXJxcmV0dXJuX3QgY2JfcGNpZGFzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9hb19pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBzdGF0dXMpOworc3RhdGljIGludCBjYl9wY2lkYXNfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgY2JfcGNpZGFzX2xvYWRfY291bnRlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqbnMsCisJaW50IHJvdW5kX2ZsYWdzKTsKK3N0YXRpYyBpbnQgZWVwcm9tX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYWxkYWNfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNhbGRhY193cml0ZV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHRyaW1wb3RfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNiX3BjaWRhc190cmltcG90X3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpOworc3RhdGljIGludCB0cmltcG90X3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFjMDhfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhYzA4X3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgdmFsdWUpOworc3RhdGljIGludCBkYWMwOF93cml0ZV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNhbGRhY184ODAwX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgYWRkcmVzcywKKwl1aW50OF90IHZhbHVlKTsKK3N0YXRpYyBpbnQgdHJpbXBvdF83Mzc2X3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50OF90IHZhbHVlKTsKK3N0YXRpYyBpbnQgdHJpbXBvdF84NDAyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1aW50OF90IHZhbHVlKTsKK3N0YXRpYyBpbnQgbnZyYW1fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGFkZHJlc3MsCisJdWludDhfdCAqIGRhdGEpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjYWxfZW5hYmxlX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIENBTF9FTl9CSVQgfCBDQUxfU1JDX0JJVFMoZGV2cHJpdi0+Y2FsaWJyYXRpb25fc291cmNlKTsKK30KKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLgorICovCitzdGF0aWMgaW50IGNiX3BjaWRhc19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlpbnQgaW5kZXg7CisJaW50IGk7CisKKwlwcmludGsoImNvbWVkaSVkOiBjYl9wY2lkYXM6ICIsIGRldi0+bWlub3IpOworCisvKgorICogQWxsb2NhdGUgdGhlIHByaXZhdGUgc3RydWN0dXJlIGFyZWEuCisgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgY2JfcGNpZGFzX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisvKgorICogUHJvYmUgdGhlIGRldmljZSB0byBkZXRlcm1pbmUgd2hhdCBkZXZpY2UgaW4gdGhlIHNlcmllcyBpdCBpcy4KKyAqLworCXByaW50aygiXG4iKTsKKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJCS8vIGlzIGl0IG5vdCBhIGNvbXB1dGVyIGJvYXJkcyBjYXJkPworCQlpZiAocGNpZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9DQikKKwkJCWNvbnRpbnVlOworCQkvLyBsb29wIHRocm91Z2ggY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5fQk9BUkRTOyBpbmRleCsrKSB7CisJCQlpZiAoY2JfcGNpZGFzX2JvYXJkc1tpbmRleF0uZGV2aWNlX2lkICE9IHBjaWRldi0+ZGV2aWNlKQorCQkJCWNvbnRpbnVlOworCQkJLy8gd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/CisJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkvLyBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PworCQkJCWlmIChwY2lkZXYtPmJ1cy0+bnVtYmVyICE9IGl0LT5vcHRpb25zWzBdIHx8CisJCQkJCVBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pICE9CisJCQkJCWl0LT5vcHRpb25zWzFdKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWRldnByaXYtPnBjaV9kZXYgPSBwY2lkZXY7CisJCQlkZXYtPmJvYXJkX3B0ciA9IGNiX3BjaWRhc19ib2FyZHMgKyBpbmRleDsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisKKwlwcmludGsoIk5vIHN1cHBvcnRlZCBDb21wdXRlckJvYXJkcy9NZWFzdXJlbWVudENvbXB1dGluZyBjYXJkIGZvdW5kIG9uICIKKwkJInJlcXVlc3RlZCBwb3NpdGlvblxuIik7CisJcmV0dXJuIC1FSU87CisKKyAgICAgIGZvdW5kOgorCisJcHJpbnRrKCJGb3VuZCAlcyBvbiBidXMgJWksIHNsb3QgJWlcbiIsIGNiX3BjaWRhc19ib2FyZHNbaW5kZXhdLm5hbWUsCisJCXBjaWRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pKTsKKworCS8qCisJICogRW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlc2VydmUgSS9PIHBvcnRzLgorCSAqLworCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsICJjYl9wY2lkYXMiKSkgeworCQlwcmludGsoIiBGYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKwkvKgorCSAqIEluaXRpYWxpemUgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgYW5kIGRldnByaXYtPmFkY19maWZvIHRvIHBvaW50IHRvCisJICogdGhlaXIgYmFzZSBhZGRyZXNzLgorCSAqLworCWRldnByaXYtPnM1OTMzX2NvbmZpZyA9CisJCXBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCBTNTkzM19CQURSSU5ERVgpOworCWRldnByaXYtPmNvbnRyb2xfc3RhdHVzID0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsIENPTlRfU1RBVF9CQURSSU5ERVgpOworCWRldnByaXYtPmFkY19maWZvID0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsIEFEQ19GSUZPX0JBRFJJTkRFWCk7CisJZGV2cHJpdi0+cGFjZXJfY291bnRlcl9kaW8gPQorCQlwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwgUEFDRVJfQkFEUklOREVYKTsKKwlpZiAodGhpc2JvYXJkLT5hb19uY2hhbikgeworCQlkZXZwcml2LT5hb19yZWdpc3RlcnMgPQorCQkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsIEFPX0JBRFJJTkRFWCk7CisJfQorCS8vIGRpc2FibGUgYW5kIGNsZWFyIGludGVycnVwdHMgb24gYW1jYyBzNTkzMworCW91dGwoSU5UQ1NSX0lOQk9YX0lOVFJfU1RBVFVTLAorCQlkZXZwcml2LT5zNTkzM19jb25maWcgKyBBTUNDX09QX1JFR19JTlRDU1IpOworCisJLy8gZ2V0IGlycQorCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoZGV2cHJpdi0+cGNpX2Rldi0+aXJxLCBjYl9wY2lkYXNfaW50ZXJydXB0LAorCQkJSVJRRl9TSEFSRUQsICJjYl9wY2lkYXMiLCBkZXYpKSB7CisJCXByaW50aygiIHVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgJWRcbiIsIGRldnByaXYtPnBjaV9kZXYtPmlycSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXYtPmlycSA9IGRldnByaXYtPnBjaV9kZXYtPmlycTsKKworCS8vSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuCisgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDcpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlICovCisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfRElGRiB8IFNERl9DTURfUkVBRDsKKwkvKiBXQVJOSU5HOiBOdW1iZXIgb2YgaW5wdXRzIGluIGRpZmZlcmVudGlhbCBtb2RlIGlzIGlnbm9yZWQgKi8KKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFpX3NlX2NoYW5zOworCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNib2FyZC0+YWlfc2VfY2hhbnM7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+YWlfYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gdGhpc2JvYXJkLT5yYW5nZXM7CisJcy0+aW5zbl9yZWFkID0gY2JfcGNpZGFzX2FpX3JpbnNuOworCXMtPmluc25fY29uZmlnID0gYWlfY29uZmlnX2luc247CisJcy0+ZG9fY21kID0gY2JfcGNpZGFzX2FpX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gY2JfcGNpZGFzX2FpX2NtZHRlc3Q7CisJcy0+Y2FuY2VsID0gY2JfcGNpZGFzX2NhbmNlbDsKKworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJaWYgKHRoaXNib2FyZC0+YW9fbmNoYW4pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfR1JPVU5EOworCQlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX25jaGFuOworCQkvLyBhbmFsb2cgb3V0IHJlc29sdXRpb24gaXMgdGhlIHNhbWUgYXMgYW5hbG9nIGlucHV0IHJlc29sdXRpb24sIHNvIHVzZSBhaV9iaXRzCisJCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpIC0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmY2JfcGNpZGFzX2FvX3JhbmdlczsKKwkJcy0+aW5zbl9yZWFkID0gY2JfcGNpZGFzX2FvX3JlYWRiYWNrX2luc247CisJCWlmICh0aGlzYm9hcmQtPmhhc19hb19maWZvKSB7CisJCQlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9XUklURTsKKwkJCXMtPmluc25fd3JpdGUgPSBjYl9wY2lkYXNfYW9fZmlmb193aW5zbjsKKwkJCXMtPmRvX2NtZHRlc3QgPSBjYl9wY2lkYXNfYW9fY21kdGVzdDsKKwkJCXMtPmRvX2NtZCA9IGNiX3BjaWRhc19hb19jbWQ7CisJCQlzLT5jYW5jZWwgPSBjYl9wY2lkYXNfYW9fY2FuY2VsOworCQl9IGVsc2UgeworCQkJcy0+aW5zbl93cml0ZSA9IGNiX3BjaWRhc19hb19ub2ZpZm9fd2luc247CisJCX0KKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCS8qIDgyNTUgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgZGV2cHJpdi0+cGFjZXJfY291bnRlcl9kaW8gKyBESU9fODI1NSk7CisKKwkvLyBzZXJpYWwgRUVQUk9NLAorCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9NRU1PUlk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0lOVEVSTkFMOworCXMtPm5fY2hhbiA9IDI1NjsKKwlzLT5tYXhkYXRhID0gMHhmZjsKKwlzLT5pbnNuX3JlYWQgPSBlZXByb21fcmVhZF9pbnNuOworCisJLy8gODgwMCBjYWxkYWMKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ0FMSUI7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0lOVEVSTkFMOworCXMtPm5fY2hhbiA9IE5VTV9DSEFOTkVMU184ODAwOworCXMtPm1heGRhdGEgPSAweGZmOworCXMtPmluc25fcmVhZCA9IGNhbGRhY19yZWFkX2luc247CisJcy0+aW5zbl93cml0ZSA9IGNhbGRhY193cml0ZV9pbnNuOworCWZvciAoaSA9IDA7IGkgPCBzLT5uX2NoYW47IGkrKykKKwkJY2FsZGFjXzg4MDBfd3JpdGUoZGV2LCBpLCBzLT5tYXhkYXRhIC8gMik7CisKKwkvLyB0cmltIHBvdGVudGlvbWV0ZXIKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ0FMSUI7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0lOVEVSTkFMOworCWlmICh0aGlzYm9hcmQtPnRyaW1wb3QgPT0gQUQ3Mzc2KSB7CisJCXMtPm5fY2hhbiA9IE5VTV9DSEFOTkVMU183Mzc2OworCQlzLT5tYXhkYXRhID0gMHg3ZjsKKwl9IGVsc2UgeworCQlzLT5uX2NoYW4gPSBOVU1fQ0hBTk5FTFNfODQwMjsKKwkJcy0+bWF4ZGF0YSA9IDB4ZmY7CisJfQorCXMtPmluc25fcmVhZCA9IHRyaW1wb3RfcmVhZF9pbnNuOworCXMtPmluc25fd3JpdGUgPSB0cmltcG90X3dyaXRlX2luc247CisJZm9yIChpID0gMDsgaSA8IHMtPm5fY2hhbjsgaSsrKQorCQljYl9wY2lkYXNfdHJpbXBvdF93cml0ZShkZXYsIGksIHMtPm1heGRhdGEgLyAyKTsKKworCS8vIGRhYzA4IGNhbGRhYworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA2OworCWlmICh0aGlzYm9hcmQtPmhhc19kYWMwOCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQ0FMSUI7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9JTlRFUk5BTDsKKwkJcy0+bl9jaGFuID0gTlVNX0NIQU5ORUxTX0RBQzA4OworCQlzLT5pbnNuX3JlYWQgPSBkYWMwOF9yZWFkX2luc247CisJCXMtPmluc25fd3JpdGUgPSBkYWMwOF93cml0ZV9pbnNuOworCQlzLT5tYXhkYXRhID0gMHhmZjsKKwkJZGFjMDhfd3JpdGUoZGV2LCBzLT5tYXhkYXRhIC8gMik7CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvLyBtYWtlIHN1cmUgbWFpbGJveCA0IGlzIGVtcHR5CisJaW5sKGRldnByaXYtPnM1OTMzX2NvbmZpZyArIEFNQ0NfT1BfUkVHX0lNQjQpOworCS8qIFNldCBiaXRzIHRvIGVuYWJsZSBpbmNvbWluZyBtYWlsYm94IGludGVycnVwdHMgb24gYW1jYyBzNTkzMy4gKi8KKwlkZXZwcml2LT5zNTkzM19pbnRjc3JfYml0cyA9CisJCUlOVENTUl9JTkJPWF9CWVRFKDMpIHwgSU5UQ1NSX0lOQk9YX1NFTEVDVCgzKSB8CisJCUlOVENTUl9JTkJPWF9GVUxMX0lOVDsKKwkvLyBjbGVhciBhbmQgZW5hYmxlIGludGVycnVwdCBvbiBhbWNjIHM1OTMzCisJb3V0bChkZXZwcml2LT5zNTkzM19pbnRjc3JfYml0cyB8IElOVENTUl9JTkJPWF9JTlRSX1NUQVRVUywKKwkJZGV2cHJpdi0+czU5MzNfY29uZmlnICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKworCXJldHVybiAxOworfQorCisvKgorICogY2JfcGNpZGFzX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IGNiX3BjaWRhc19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpZGFzOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldnByaXYpIHsKKwkJaWYgKGRldnByaXYtPnM1OTMzX2NvbmZpZykgeworCQkJLy8gZGlzYWJsZSBhbmQgY2xlYXIgaW50ZXJydXB0cyBvbiBhbWNjIHM1OTMzCisJCQlvdXRsKElOVENTUl9JTkJPWF9JTlRSX1NUQVRVUywKKwkJCQlkZXZwcml2LT5zNTkzM19jb25maWcgKyBBTUNDX09QX1JFR19JTlRDU1IpOworI2lmZGVmIENCX1BDSURBU19ERUJVRworCQkJcnRfcHJpbnRrKCJkZXRhY2hpbmcsIGluY3NyIGlzIDB4JXhcbiIsCisJCQkJaW5sKGRldnByaXYtPnM1OTMzX2NvbmZpZyArCisJCQkJCUFNQ0NfT1BfUkVHX0lOVENTUikpOworI2VuZGlmCisJCX0KKwl9CisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKGRldi0+c3ViZGV2aWNlcykKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPnBjaV9kZXYpIHsKKwkJaWYgKGRldnByaXYtPnM1OTMzX2NvbmZpZykgeworCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogImluc3RydWN0aW9ucyIgcmVhZC93cml0ZSBkYXRhIGluICJvbmUtc2hvdCIgb3IgInNvZnR3YXJlLXRyaWdnZXJlZCIKKyAqIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgaTsKKwl1bnNpZ25lZCBpbnQgYml0czsKKwlzdGF0aWMgY29uc3QgaW50IHRpbWVvdXQgPSAxMDAwMDsKKwlpbnQgY2hhbm5lbDsKKwkvLyBlbmFibGUgY2FsaWJyYXRpb24gaW5wdXQgaWYgYXBwcm9wcmlhdGUKKwlpZiAoaW5zbi0+Y2hhbnNwZWMgJiBDUl9BTFRfU09VUkNFKSB7CisJCW91dHcoY2FsX2VuYWJsZV9iaXRzKGRldiksCisJCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisJCWNoYW5uZWwgPSAwOworCX0gZWxzZSB7CisJCW91dHcoMCwgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBDQUxJQlJBVElPTl9SRUcpOworCQljaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJfQorCS8vIHNldCBtdXggbGltaXRzIGFuZCBnYWluCisJYml0cyA9IEJFR0lOX1NDQU4oY2hhbm5lbCkgfAorCQlFTkRfU0NBTihjaGFubmVsKSB8IEdBSU5fQklUUyhDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykpOworCS8vIHNldCB1bmlwb2xhci9iaXBvbGFyCisJaWYgKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSAmIElTX1VOSVBPTEFSKQorCQliaXRzIHw9IFVOSVA7CisJLy8gc2V0IHNpbmdsZWVuZGVkL2RpZmZlcmVudGlhbAorCWlmIChDUl9BUkVGKGluc24tPmNoYW5zcGVjKSAhPSBBUkVGX0RJRkYpCisJCWJpdHMgfD0gU0U7CisJb3V0dyhiaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIEFEQ01VWF9DT05UKTsKKworCS8qIGNsZWFyIGZpZm8gKi8KKwlvdXR3KDAsIGRldnByaXYtPmFkY19maWZvICsgQURDRklGT0NMUik7CisKKwkvKiBjb252ZXJ0IG4gc2FtcGxlcyAqLworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLyogdHJpZ2dlciBjb252ZXJzaW9uICovCisJCW91dHcoMCwgZGV2cHJpdi0+YWRjX2ZpZm8gKyBBRENEQVRBKTsKKworCQkvKiB3YWl0IGZvciBjb252ZXJzaW9uIHRvIGVuZCAqLworCQkvKiByZXR1cm4gLUVUSU1FRE9VVCBpZiB0aGVyZSBpcyBhIHRpbWVvdXQgKi8KKwkJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQkJaWYgKGludyhkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIEFEQ01VWF9DT05UKSAmIEVPQykKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSB0aW1lb3V0KQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkJLyogcmVhZCBkYXRhICovCisJCWRhdGFbbl0gPSBpbncoZGV2cHJpdi0+YWRjX2ZpZm8gKyBBRENEQVRBKTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGFpX2NvbmZpZ19jYWxpYnJhdGlvbl9zb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RhdGljIGNvbnN0IGludCBudW1fY2FsaWJyYXRpb25fc291cmNlcyA9IDg7CisJdW5zaWduZWQgaW50IHNvdXJjZSA9IGRhdGFbMV07CisKKwlpZiAoc291cmNlID49IG51bV9jYWxpYnJhdGlvbl9zb3VyY2VzKSB7CisJCXByaW50aygiaW52YWxpZCBjYWxpYnJhdGlvbiBzb3VyY2U6ICVpXG4iLCBzb3VyY2UpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZwcml2LT5jYWxpYnJhdGlvbl9zb3VyY2UgPSBzb3VyY2U7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBhaV9jb25maWdfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGlkID0gZGF0YVswXTsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIElOU05fQ09ORklHX0FMVF9TT1VSQ0U6CisJCXJldHVybiBhaV9jb25maWdfY2FsaWJyYXRpb25fc291cmNlKGRldiwgZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8vIGFuYWxvZyBvdXRwdXQgaW5zbiBmb3IgcGNpZGFzLTEwMDAgYW5kIDEyMDAgc2VyaWVzCitzdGF0aWMgaW50IGNiX3BjaWRhc19hb19ub2ZpZm9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFubmVsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBzZXQgY2hhbm5lbCBhbmQgcmFuZ2UKKwljaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+YW9fY29udHJvbF9iaXRzICY9CisJCX5EQUNfTU9ERV9VUERBVEVfQk9USCAmIH5EQUNfUkFOR0VfTUFTSyhjaGFubmVsKTsKKwlkZXZwcml2LT5hb19jb250cm9sX2JpdHMgfD0KKwkJREFDRU4gfCBEQUNfUkFOR0UoY2hhbm5lbCwgQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpKTsKKwlvdXR3KGRldnByaXYtPmFvX2NvbnRyb2xfYml0cywgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBEQUNfQ1NSKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJLy8gcmVtZW1iZXIgdmFsdWUgZm9yIHJlYWRiYWNrCisJZGV2cHJpdi0+YW9fdmFsdWVbY2hhbm5lbF0gPSBkYXRhWzBdOworCS8vIHNlbmQgZGF0YQorCW91dHcoZGF0YVswXSwgZGV2cHJpdi0+YW9fcmVnaXN0ZXJzICsgREFDX0RBVEFfUkVHKGNoYW5uZWwpKTsKKworCXJldHVybiAxOworfQorCisvLyBhbmFsb2cgb3V0cHV0IGluc24gZm9yIHBjaWRhcy0xNjAyIHNlcmllcworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fZmlmb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW5uZWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vIGNsZWFyIGRhYyBmaWZvCisJb3V0dygwLCBkZXZwcml2LT5hb19yZWdpc3RlcnMgKyBEQUNGSUZPQ0xSKTsKKworCS8vIHNldCBjaGFubmVsIGFuZCByYW5nZQorCWNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5hb19jb250cm9sX2JpdHMgJj0KKwkJfkRBQ19DSEFOX0VOKDApICYgfkRBQ19DSEFOX0VOKDEpICYgfkRBQ19SQU5HRV9NQVNLKGNoYW5uZWwpICYKKwkJfkRBQ19QQUNFUl9NQVNLOworCWRldnByaXYtPmFvX2NvbnRyb2xfYml0cyB8PQorCQlEQUNFTiB8IERBQ19SQU5HRShjaGFubmVsLAorCQlDUl9SQU5HRShpbnNuLT5jaGFuc3BlYykpIHwgREFDX0NIQU5fRU4oY2hhbm5lbCkgfCBEQUNfU1RBUlQ7CisJb3V0dyhkZXZwcml2LT5hb19jb250cm9sX2JpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgREFDX0NTUik7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIHJlbWVtYmVyIHZhbHVlIGZvciByZWFkYmFjaworCWRldnByaXYtPmFvX3ZhbHVlW2NoYW5uZWxdID0gZGF0YVswXTsKKwkvLyBzZW5kIGRhdGEKKwlvdXR3KGRhdGFbMF0sIGRldnByaXYtPmFvX3JlZ2lzdGVycyArIERBQ0RBVEEpOworCisJcmV0dXJuIDE7Cit9CisKKy8vIGFuYWxvZyBvdXRwdXQgcmVhZGJhY2sgaW5zbgorLy8gWFhYIGxvc2VzIHRyYWNrIG9mIGFuYWxvZyBvdXRwdXQgdmFsdWUgYmFjayBhZnRlciBhbiBhbmFsb2cgb3VwdXQgY29tbWFuZCBpcyBleGVjdXRlZAorc3RhdGljIGludCBjYl9wY2lkYXNfYW9fcmVhZGJhY2tfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGRldnByaXYtPmFvX3ZhbHVlW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGVlcHJvbV9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVpbnQ4X3QgbnZyYW1fZGF0YTsKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gbnZyYW1fcmVhZChkZXYsIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpLCAmbnZyYW1fZGF0YSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlkYXRhWzBdID0gbnZyYW1fZGF0YTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNhbGRhY193cml0ZV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwljb25zdCB1bnNpZ25lZCBpbnQgY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJcmV0dXJuIGNhbGRhY184ODAwX3dyaXRlKGRldiwgY2hhbm5lbCwgZGF0YVswXSk7Cit9CisKK3N0YXRpYyBpbnQgY2FsZGFjX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGRldnByaXYtPmNhbGRhY192YWx1ZVtDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gMTsKK30KKworLyogMTYwMi8xNiBwcmVnYWluIG9mZnNldCAqLworc3RhdGljIGludCBkYWMwOF93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHZhbHVlKQoreworCWlmIChkZXZwcml2LT5kYWMwOF92YWx1ZSA9PSB2YWx1ZSkKKwkJcmV0dXJuIDE7CisKKwlkZXZwcml2LT5kYWMwOF92YWx1ZSA9IHZhbHVlOworCisJb3V0dyhjYWxfZW5hYmxlX2JpdHMoZGV2KSB8ICh2YWx1ZSAmIDB4ZmYpLAorCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisJY29tZWRpX3VkZWxheSgxKTsKKwlvdXR3KGNhbF9lbmFibGVfYml0cyhkZXYpIHwgU0VMRUNUX0RBQzA4X0JJVCB8ICh2YWx1ZSAmIDB4ZmYpLAorCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisJY29tZWRpX3VkZWxheSgxKTsKKwlvdXR3KGNhbF9lbmFibGVfYml0cyhkZXYpIHwgKHZhbHVlICYgMHhmZiksCisJCWRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQ0FMSUJSQVRJT05fUkVHKTsKKwljb21lZGlfdWRlbGF5KDEpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZGFjMDhfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJcmV0dXJuIGRhYzA4X3dyaXRlKGRldiwgZGF0YVswXSk7Cit9CisKK3N0YXRpYyBpbnQgZGFjMDhfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+ZGFjMDhfdmFsdWU7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjYl9wY2lkYXNfdHJpbXBvdF93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IHZhbHVlKQoreworCWlmIChkZXZwcml2LT50cmltcG90X3ZhbHVlW2NoYW5uZWxdID09IHZhbHVlKQorCQlyZXR1cm4gMTsKKworCWRldnByaXYtPnRyaW1wb3RfdmFsdWVbY2hhbm5lbF0gPSB2YWx1ZTsKKwlzd2l0Y2ggKHRoaXNib2FyZC0+dHJpbXBvdCkgeworCWNhc2UgQUQ3Mzc2OgorCQl0cmltcG90XzczNzZfd3JpdGUoZGV2LCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgQUQ4NDAyOgorCQl0cmltcG90Xzg0MDJfd3JpdGUoZGV2LCBjaGFubmVsLCB2YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJkcml2ZXIgYnVnPyIpOworCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHRyaW1wb3Rfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXJldHVybiBjYl9wY2lkYXNfdHJpbXBvdF93cml0ZShkZXYsIGNoYW5uZWwsIGRhdGFbMF0pOworfQorCitzdGF0aWMgaW50IHRyaW1wb3RfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZGF0YVswXSA9IGRldnByaXYtPnRyaW1wb3RfdmFsdWVbY2hhbm5lbF07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjYl9wY2lkYXNfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisJaW50IGksIGdhaW4sIHN0YXJ0X2NoYW47CisKKwkvKiBjbWR0ZXN0IHRlc3RzIGEgcGFydGljdWxhciBjb21tYW5kIHRvIHNlZSBpZiBpdCBpcyB2YWxpZC4KKwkgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKwkgKiBhbmQgdGhlbiBoYXZlIGl0IGV4ZWN1dGVzIGJ5IHRoZSBjbWQgaW9jdGwuCisJICoKKwkgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCBvciAwLCBkZXBlbmRpbmcgb24gd2hpY2ggdGVzdHMKKwkgKiB0aGUgY29tbWFuZCBwYXNzZXMuICovCisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1cgfCBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19OT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVyAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19OT1cpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJLy8gbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGVhY2ggb3RoZXIKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVyAmJiBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVyAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYKKwkJKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQKKwkJCXx8IGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwKKwkJCXRoaXNib2FyZC0+YWlfc3BlZWQgKiBjbWQtPmNoYW5saXN0X2xlbikgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJdGhpc2JvYXJkLT5haV9zcGVlZCAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNib2FyZC0+YWlfc3BlZWQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSkgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwKKwkJCSYoZGV2cHJpdi0+ZGl2aXNvcjEpLCAmKGRldnByaXYtPmRpdmlzb3IyKSwKKwkJCSYoY21kLT5zY2FuX2JlZ2luX2FyZyksIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwKKwkJCSYoZGV2cHJpdi0+ZGl2aXNvcjEpLCAmKGRldnByaXYtPmRpdmlzb3IyKSwKKwkJCSYoY21kLT5jb252ZXJ0X2FyZyksIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8vIGNoZWNrIGNoYW5uZWwvZ2FpbiBsaXN0IGFnYWluc3QgY2FyZCdzIGxpbWl0YXRpb25zCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJZ2FpbiA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlzdGFydF9jaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKTsKKwkJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9CisJCQkJKHN0YXJ0X2NoYW4gKyBpKSAlIHMtPm5fY2hhbikgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYmUgY29uc2VjdXRpdmUgY2hhbm5lbHMsIGNvdW50aW5nIHVwd2FyZHNcbiIpOworCQkJCWVycisrOworCQkJfQorCQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICE9IGdhaW4pIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGFsbCBoYXZlIHRoZSBzYW1lIGdhaW5cbiIpOworCQkJCWVycisrOworCQkJfQorCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYl9wY2lkYXNfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgaW50IGJpdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vIG1ha2Ugc3VyZSBDQUxfRU5fQklUIGlzIGRpc2FibGVkCisJb3V0dygwLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisJLy8gaW5pdGlhbGl6ZSBiZWZvcmUgc2V0dGluZ3MgcGFjZXIgc291cmNlIGFuZCBjb3VudCB2YWx1ZXMKKwlvdXR3KDAsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgVFJJR19DT05UU1RBVCk7CisJLy8gY2xlYXIgZmlmbworCW91dHcoMCwgZGV2cHJpdi0+YWRjX2ZpZm8gKyBBRENGSUZPQ0xSKTsKKworCS8vIHNldCBtdXggbGltaXRzLCBnYWluIGFuZCBwYWNlciBzb3VyY2UKKwliaXRzID0gQkVHSU5fU0NBTihDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pKSB8CisJCUVORF9TQ0FOKENSX0NIQU4oY21kLT5jaGFubGlzdFtjbWQtPmNoYW5saXN0X2xlbiAtIDFdKSkgfAorCQlHQUlOX0JJVFMoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSkpOworCS8vIHNldCB1bmlwb2xhci9iaXBvbGFyCisJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pICYgSVNfVU5JUE9MQVIpCisJCWJpdHMgfD0gVU5JUDsKKwkvLyBzZXQgc2luZ2xlZW5kZWQvZGlmZmVyZW50aWFsCisJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFswXSkgIT0gQVJFRl9ESUZGKQorCQliaXRzIHw9IFNFOworCS8vIHNldCBwYWNlciBzb3VyY2UKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCB8fCBjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUKQorCQliaXRzIHw9IFBBQ0VSX0VYVF9SSVNFOworCWVsc2UKKwkJYml0cyB8PSBQQUNFUl9JTlQ7CisJb3V0dyhiaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIEFEQ01VWF9DT05UKTsKKworI2lmZGVmIENCX1BDSURBU19ERUJVRworCXJ0X3ByaW50aygiY29tZWRpOiBzZW50IDB4JXggdG8gYWRjbXV4IGNvbnRyb2xcbiIsIGJpdHMpOworI2VuZGlmCisKKwkvLyBsb2FkIGNvdW50ZXJzCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikKKwkJY2JfcGNpZGFzX2xvYWRfY291bnRlcnMoZGV2LCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCWVsc2UgaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKKwkJY2JfcGNpZGFzX2xvYWRfY291bnRlcnMoZGV2LCAmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCisJLy8gc2V0IG51bWJlciBvZiBjb252ZXJzaW9ucworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+Y291bnQgPSBjbWQtPmNoYW5saXN0X2xlbiAqIGNtZC0+c3RvcF9hcmc7CisJfQorCS8vIGVuYWJsZSBpbnRlcnJ1cHRzCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8PSBJTlRFOworCWRldnByaXYtPmFkY19maWZvX2JpdHMgJj0gfklOVF9NQVNLOworCWlmIChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgeworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVyAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDEpCisJCQlkZXZwcml2LT5hZGNfZmlmb19iaXRzIHw9IElOVF9FT1M7CS8vIGludGVycnVwdCBlbmQgb2YgYnVyc3QKKwkJZWxzZQorCQkJZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8PSBJTlRfRk5FOwkvLyBpbnRlcnJ1cHQgZmlmbyBub3QgZW1wdHkKKwl9IGVsc2UgeworCQlkZXZwcml2LT5hZGNfZmlmb19iaXRzIHw9IElOVF9GSEY7CS8vaW50ZXJydXB0IGZpZm8gaGFsZiBmdWxsCisJfQorI2lmZGVmIENCX1BDSURBU19ERUJVRworCXJ0X3ByaW50aygiY29tZWRpOiBhZGNfZmlmb19iaXRzIGFyZSAweCV4XG4iLCBkZXZwcml2LT5hZGNfZmlmb19iaXRzKTsKKyNlbmRpZgorCS8vIGVuYWJsZSAoYW5kIGNsZWFyKSBpbnRlcnJ1cHRzCisJb3V0dyhkZXZwcml2LT5hZGNfZmlmb19iaXRzIHwgRU9BSSB8IElOVCB8IExBREZVTCwKKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBJTlRfQURDRklGTyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIHNldCBzdGFydCB0cmlnZ2VyIGFuZCBidXJzdCBtb2RlCisJYml0cyA9IDA7CisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKQorCQliaXRzIHw9IFNXX1RSSUdHRVI7CisJZWxzZSBpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpCisJCWJpdHMgfD0gRVhUX1RSSUdHRVIgfCBUR0VOIHwgWFRSQ0w7CisJZWxzZSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJidWchIik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cgJiYgY21kLT5jaGFubGlzdF9sZW4gPiAxKQorCQliaXRzIHw9IEJVUlNURTsKKwlvdXR3KGJpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgVFJJR19DT05UU1RBVCk7CisjaWZkZWYgQ0JfUENJREFTX0RFQlVHCisJcnRfcHJpbnRrKCJjb21lZGk6IHNlbnQgMHgleCB0byB0cmlnIGNvbnRyb2xcbiIsIGJpdHMpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBjbWR0ZXN0IHRlc3RzIGEgcGFydGljdWxhciBjb21tYW5kIHRvIHNlZSBpZiBpdCBpcyB2YWxpZC4KKwkgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKwkgKiBhbmQgdGhlbiBoYXZlIGl0IGV4ZWN1dGVzIGJ5IHRoZSBjbWQgaW9jdGwuCisJICoKKwkgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCBvciAwLCBkZXBlbmRpbmcgb24gd2hpY2ggdGVzdHMKKwkgKiB0aGUgY29tbWFuZCBwYXNzZXMuICovCisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19JTlQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCB0aGlzYm9hcmQtPmFvX3NjYW5fc3BlZWQpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSB0aGlzYm9hcmQtPmFvX3NjYW5fc3BlZWQ7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihUSU1FUl9CQVNFLAorCQkJJihkZXZwcml2LT5hb19kaXZpc29yMSksICYoZGV2cHJpdi0+YW9fZGl2aXNvcjIpLAorCQkJJihjbWQtPnNjYW5fYmVnaW5fYXJnKSwgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLy8gY2hlY2sgY2hhbm5lbC9nYWluIGxpc3QgYWdhaW5zdCBjYXJkJ3MgbGltaXRhdGlvbnMKKwlpZiAoY21kLT5jaGFubGlzdCAmJiBjbWQtPmNoYW5saXN0X2xlbiA+IDEpIHsKKwkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFswXSkgIT0gMCB8fAorCQkJQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzFdKSAhPSAxKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJjaGFubmVscyBtdXN0IGJlIG9yZGVyZWQgY2hhbm5lbCAwLCBjaGFubmVsIDEgaW4gY2hhbmxpc3RcbiIpOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNiX3BjaWRhc19hb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLy8gc2V0IGNoYW5uZWwgbGltaXRzLCBnYWluCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJLy8gZW5hYmxlIGNoYW5uZWwKKwkJZGV2cHJpdi0+YW9fY29udHJvbF9iaXRzIHw9CisJCQlEQUNfQ0hBTl9FTihDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pKTsKKwkJLy8gc2V0IHJhbmdlCisJCWRldnByaXYtPmFvX2NvbnRyb2xfYml0cyB8PSBEQUNfUkFOR0UoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSwKKwkJCUNSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pKTsKKwl9CisKKwkvLyBkaXNhYmxlIGFuYWxvZyBvdXQgYmVmb3JlIHNldHRpbmdzIHBhY2VyIHNvdXJjZSBhbmQgY291bnQgdmFsdWVzCisJb3V0dyhkZXZwcml2LT5hb19jb250cm9sX2JpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgREFDX0NTUik7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIGNsZWFyIGZpZm8KKwlvdXR3KDAsIGRldnByaXYtPmFvX3JlZ2lzdGVycyArIERBQ0ZJRk9DTFIpOworCisJLy8gbG9hZCBjb3VudGVycworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsCisJCQkmKGRldnByaXYtPmFvX2Rpdmlzb3IxKSwgJihkZXZwcml2LT5hb19kaXZpc29yMiksCisJCQkmKGNtZC0+c2Nhbl9iZWdpbl9hcmcpLCBjbWQtPmZsYWdzKTsKKworCQkvKiBXcml0ZSB0aGUgdmFsdWVzIG9mIGN0cjEgYW5kIGN0cjIgaW50byBjb3VudGVycyAxIGFuZCAyICovCisJCWk4MjU0X2xvYWQoZGV2cHJpdi0+cGFjZXJfY291bnRlcl9kaW8gKyBEQUM4MjU0LCAwLCAxLAorCQkJZGV2cHJpdi0+YW9fZGl2aXNvcjEsIDIpOworCQlpODI1NF9sb2FkKGRldnByaXYtPnBhY2VyX2NvdW50ZXJfZGlvICsgREFDODI1NCwgMCwgMiwKKwkJCWRldnByaXYtPmFvX2Rpdmlzb3IyLCAyKTsKKwl9CisJLy8gc2V0IG51bWJlciBvZiBjb252ZXJzaW9ucworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+YW9fY291bnQgPSBjbWQtPmNoYW5saXN0X2xlbiAqIGNtZC0+c3RvcF9hcmc7CisJfQorCS8vIHNldCBwYWNlciBzb3VyY2UKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCWRldnByaXYtPmFvX2NvbnRyb2xfYml0cyB8PSBEQUNfUEFDRVJfSU5UOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQlkZXZwcml2LT5hb19jb250cm9sX2JpdHMgfD0gREFDX1BBQ0VSX0VYVF9SSVNFOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3Igc2V0dGluZyBkYWMgcGFjZXIgc291cmNlIik7CisJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlhc3luYy0+aW50dHJpZyA9IGNiX3BjaWRhc19hb19pbnR0cmlnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2JfcGNpZGFzX2FvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQl1bnNpZ25lZCBpbnQgdHJpZ19udW0pCit7CisJdW5zaWduZWQgaW50IG51bV9ieXRlcywgbnVtX3BvaW50cyA9IHRoaXNib2FyZC0+Zmlmb19zaXplOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodHJpZ19udW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvLyBsb2FkIHVwIGZpZm8KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIGRldnByaXYtPmFvX2NvdW50IDwgbnVtX3BvaW50cykKKwkJbnVtX3BvaW50cyA9IGRldnByaXYtPmFvX2NvdW50OworCisJbnVtX2J5dGVzID0gY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIocywgZGV2cHJpdi0+YW9fYnVmZmVyLAorCQludW1fcG9pbnRzICogc2l6ZW9mKHNob3J0KSk7CisJbnVtX3BvaW50cyA9IG51bV9ieXRlcyAvIHNpemVvZihzaG9ydCk7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPmFvX2NvdW50IC09IG51bV9wb2ludHM7CisJfQorCS8vIHdyaXRlIGRhdGEgdG8gYm9hcmQncyBmaWZvCisJb3V0c3coZGV2cHJpdi0+YW9fcmVnaXN0ZXJzICsgREFDREFUQSwgZGV2cHJpdi0+YW9fYnVmZmVyLCBudW1fYnl0ZXMpOworCisJLy8gZW5hYmxlIGRhYyBoYWxmLWZ1bGwgYW5kIGVtcHR5IGludGVycnVwdHMKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5hZGNfZmlmb19iaXRzIHw9IERBRU1JRSB8IERBSEZJRTsKKyNpZmRlZiBDQl9QQ0lEQVNfREVCVUcKKwlydF9wcmludGsoImNvbWVkaTogYWRjX2ZpZm9fYml0cyBhcmUgMHgleFxuIiwgZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyk7CisjZW5kaWYKKwkvLyBlbmFibGUgYW5kIGNsZWFyIGludGVycnVwdHMKKwlvdXR3KGRldnByaXYtPmFkY19maWZvX2JpdHMgfCBEQUVNSSB8IERBSEZJLAorCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKworCS8vIHN0YXJ0IGRhYworCWRldnByaXYtPmFvX2NvbnRyb2xfYml0cyB8PSBEQUNfU1RBUlQgfCBEQUNFTiB8IERBQ19FTVBUWTsKKwlvdXR3KGRldnByaXYtPmFvX2NvbnRyb2xfYml0cywgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBEQUNfQ1NSKTsKKyNpZmRlZiBDQl9QQ0lEQVNfREVCVUcKKwlydF9wcmludGsoImNvbWVkaTogc2VudCAweCV4IHRvIGRhYyBjb250cm9sXG4iLAorCQlkZXZwcml2LT5hb19jb250cm9sX2JpdHMpOworI2VuZGlmCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY2JfcGNpZGFzX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJaW50IHN0YXR1cywgczU5MzNfc3RhdHVzOworCWludCBoYWxmX2ZpZm8gPSB0aGlzYm9hcmQtPmZpZm9fc2l6ZSAvIDI7CisJdW5zaWduZWQgaW50IG51bV9zYW1wbGVzLCBpOworCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwMDAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZGV2LT5hdHRhY2hlZCA9PSAwKSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlhc3luYyA9IHMtPmFzeW5jOworCWFzeW5jLT5ldmVudHMgPSAwOworCisJczU5MzNfc3RhdHVzID0gaW5sKGRldnByaXYtPnM1OTMzX2NvbmZpZyArIEFNQ0NfT1BfUkVHX0lOVENTUik7CisjaWZkZWYgQ0JfUENJREFTX0RFQlVHCisJcnRfcHJpbnRrKCJpbnRjc3IgMHgleFxuIiwgczU5MzNfc3RhdHVzKTsKKwlydF9wcmludGsoIm1iZWYgMHgleFxuIiwgaW5sKGRldnByaXYtPnM1OTMzX2NvbmZpZyArIEFNQ0NfT1BfUkVHX01CRUYpKTsKKyNlbmRpZgorCisJaWYgKChJTlRDU1JfSU5UUl9BU1NFUlRFRCAmIHM1OTMzX3N0YXR1cykgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJLy8gbWFrZSBzdXJlIG1haWxib3ggNCBpcyBlbXB0eQorCWlubF9wKGRldnByaXYtPnM1OTMzX2NvbmZpZyArIEFNQ0NfT1BfUkVHX0lNQjQpOworCS8vIGNsZWFyIGludGVycnVwdCBvbiBhbWNjIHM1OTMzCisJb3V0bChkZXZwcml2LT5zNTkzM19pbnRjc3JfYml0cyB8IElOVENTUl9JTkJPWF9JTlRSX1NUQVRVUywKKwkJZGV2cHJpdi0+czU5MzNfY29uZmlnICsgQU1DQ19PUF9SRUdfSU5UQ1NSKTsKKworCXN0YXR1cyA9IGludyhkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKyNpZmRlZiBDQl9QQ0lEQVNfREVCVUcKKwlpZiAoKHN0YXR1cyAmIChJTlQgfCBFT0FJIHwgTEFERlVMIHwgREFIRkkgfCBEQUVNSSkpID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInNwdXJpb3VzIGludGVycnVwdCIpOworCX0KKyNlbmRpZgorCisJLy8gY2hlY2sgZm9yIGFuYWxvZyBvdXRwdXQgaW50ZXJydXB0CisJaWYgKHN0YXR1cyAmIChEQUhGSSB8IERBRU1JKSkgeworCQloYW5kbGVfYW9faW50ZXJydXB0KGRldiwgc3RhdHVzKTsKKwl9CisJLy8gY2hlY2sgZm9yIGFuYWxvZyBpbnB1dCBpbnRlcnJ1cHRzCisJLy8gaWYgZmlmbyBoYWxmLWZ1bGwKKwlpZiAoc3RhdHVzICYgQURIRkkpIHsKKwkJLy8gcmVhZCBkYXRhCisJCW51bV9zYW1wbGVzID0gaGFsZl9maWZvOworCQlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmCisJCQludW1fc2FtcGxlcyA+IGRldnByaXYtPmNvdW50KSB7CisJCQludW1fc2FtcGxlcyA9IGRldnByaXYtPmNvdW50OworCQl9CisJCWluc3coZGV2cHJpdi0+YWRjX2ZpZm8gKyBBRENEQVRBLCBkZXZwcml2LT5haV9idWZmZXIsCisJCQludW1fc2FtcGxlcyk7CisJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGV2cHJpdi0+YWlfYnVmZmVyLAorCQkJbnVtX3NhbXBsZXMgKiBzaXplb2Yoc2hvcnQpKTsKKwkJZGV2cHJpdi0+Y291bnQgLT0gbnVtX3NhbXBsZXM7CisJCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+Y291bnQgPT0gMCkgeworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJY2JfcGNpZGFzX2NhbmNlbChkZXYsIHMpOworCQl9CisJCS8vIGNsZWFyIGhhbGYtZnVsbCBpbnRlcnJ1cHQgbGF0Y2gKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCW91dHcoZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8IElOVCwKKwkJCWRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgSU5UX0FEQ0ZJRk8pOworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQkvLyBlbHNlIGlmIGZpZm8gbm90IGVtcHR5CisJfSBlbHNlIGlmIChzdGF0dXMgJiAoQURORUkgfCBFT0JJKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgaSsrKSB7CisJCQkvLyBicmVhayBpZiBmaWZvIGlzIGVtcHR5CisJCQlpZiAoKEFETkUgJiBpbncoZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKworCQkJCQkJSU5UX0FEQ0ZJRk8pKSA9PSAwKQorCQkJCWJyZWFrOworCQkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBpbncoZGV2cHJpdi0+YWRjX2ZpZm8pKTsKKwkJCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgLS1kZXZwcml2LT5jb3VudCA9PSAwKSB7CS8qIGVuZCBvZiBhY3F1aXNpdGlvbiAqLworCQkJCWNiX3BjaWRhc19jYW5jZWwoZGV2LCBzKTsKKwkJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLy8gY2xlYXIgbm90LWVtcHR5IGludGVycnVwdCBsYXRjaAorCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJb3V0dyhkZXZwcml2LT5hZGNfZmlmb19iaXRzIHwgSU5ULAorCQkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBJTlRfQURDRklGTyk7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChzdGF0dXMgJiBFT0FJKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiYnVnISBlbmNvdW50ZXJlZCBlbmQgb2YgYXF1aXNpdGlvbiBpbnRlcnJ1cHQ/Iik7CisJCS8vIGNsZWFyIEVPQSBpbnRlcnJ1cHQgbGF0Y2gKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCW91dHcoZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8IEVPQUksCisJCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwl9CisJLy9jaGVjayBmb3IgZmlmbyBvdmVyZmxvdworCWlmIChzdGF0dXMgJiBMQURGVUwpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImZpZm8gb3ZlcmZsb3ciKTsKKwkJLy8gY2xlYXIgb3ZlcmZsb3cgaW50ZXJydXB0IGxhdGNoCisJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlvdXR3KGRldnByaXYtPmFkY19maWZvX2JpdHMgfCBMQURGVUwsCisJCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJY2JfcGNpZGFzX2NhbmNlbChkZXYsIHMpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJfQorCisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9hb19pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPndyaXRlX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgaGFsZl9maWZvID0gdGhpc2JvYXJkLT5maWZvX3NpemUgLyAyOworCXVuc2lnbmVkIGludCBudW1fcG9pbnRzOworCXVuc2lnbmVkIGludCBmbGFnczsKKworCWFzeW5jLT5ldmVudHMgPSAwOworCisJaWYgKHN0YXR1cyAmIERBRU1JKSB7CisJCS8vIGNsZWFyIGRhYyBlbXB0eSBpbnRlcnJ1cHQgbGF0Y2gKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCW91dHcoZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyB8IERBRU1JLAorCQkJZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBJTlRfQURDRklGTyk7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCWlmIChpbncoZGV2cHJpdi0+YW9fcmVnaXN0ZXJzICsgREFDX0NTUikgJiBEQUNfRU1QVFkpIHsKKwkJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSB8fAorCQkJCShjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQKKwkJCQkJJiYgZGV2cHJpdi0+YW9fY291bnQpKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwgImRhYyBmaWZvIHVuZGVyZmxvdyIpOworCQkJCWNiX3BjaWRhc19hb19jYW5jZWwoZGV2LCBzKTsKKwkJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKKwkJCX0KKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorCX0gZWxzZSBpZiAoc3RhdHVzICYgREFIRkkpIHsKKwkJdW5zaWduZWQgaW50IG51bV9ieXRlczsKKworCQkvLyBmaWd1cmUgb3V0IGhvdyBtYW55IHBvaW50cyB3ZSBhcmUgd3JpdGluZyB0byBmaWZvCisJCW51bV9wb2ludHMgPSBoYWxmX2ZpZm87CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKKwkJCWRldnByaXYtPmFvX2NvdW50IDwgbnVtX3BvaW50cykKKwkJCW51bV9wb2ludHMgPSBkZXZwcml2LT5hb19jb3VudDsKKwkJbnVtX2J5dGVzID0KKwkJCWNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHMsIGRldnByaXYtPmFvX2J1ZmZlciwKKwkJCW51bV9wb2ludHMgKiBzaXplb2Yoc2hvcnQpKTsKKwkJbnVtX3BvaW50cyA9IG51bV9ieXRlcyAvIHNpemVvZihzaG9ydCk7CisKKwkJaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQkJZGV2cHJpdi0+YW9fY291bnQgLT0gbnVtX3BvaW50czsKKwkJfQorCQkvLyB3cml0ZSBkYXRhIHRvIGJvYXJkJ3MgZmlmbworCQlvdXRzdyhkZXZwcml2LT5hb19yZWdpc3RlcnMgKyBEQUNEQVRBLCBkZXZwcml2LT5hb19idWZmZXIsCisJCQludW1fcG9pbnRzKTsKKwkJLy8gY2xlYXIgaGFsZi1mdWxsIGludGVycnVwdCBsYXRjaAorCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJb3V0dyhkZXZwcml2LT5hZGNfZmlmb19iaXRzIHwgREFIRkksCisJCQlkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwl9CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworLyogY2FuY2VsIGFuYWxvZyBpbnB1dCBjb21tYW5kICovCitzdGF0aWMgaW50IGNiX3BjaWRhc19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJLy8gZGlzYWJsZSBpbnRlcnJ1cHRzCisJZGV2cHJpdi0+YWRjX2ZpZm9fYml0cyAmPSB+SU5URSAmIH5FT0FJRTsKKwlvdXR3KGRldnByaXYtPmFkY19maWZvX2JpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgSU5UX0FEQ0ZJRk8pOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBkaXNhYmxlIHN0YXJ0IHRyaWdnZXIgc291cmNlIGFuZCBidXJzdCBtb2RlCisJb3V0dygwLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIFRSSUdfQ09OVFNUQVQpOworCS8vIHNvZnR3YXJlIHBhY2VyIHNvdXJjZQorCW91dHcoMCwgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBBRENNVVhfQ09OVCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FuY2VsIGFuYWxvZyBvdXRwdXQgY29tbWFuZCAqLworc3RhdGljIGludCBjYl9wY2lkYXNfYW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCS8vIGRpc2FibGUgaW50ZXJydXB0cworCWRldnByaXYtPmFkY19maWZvX2JpdHMgJj0gfkRBSEZJRSAmIH5EQUVNSUU7CisJb3V0dyhkZXZwcml2LT5hZGNfZmlmb19iaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIElOVF9BRENGSUZPKTsKKworCS8vIGRpc2FibGUgb3V0cHV0CisJZGV2cHJpdi0+YW9fY29udHJvbF9iaXRzICY9IH5EQUNFTiAmIH5EQUNfUEFDRVJfTUFTSzsKKwlvdXR3KGRldnByaXYtPmFvX2NvbnRyb2xfYml0cywgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBEQUNfQ1NSKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNiX3BjaWRhc19sb2FkX2NvdW50ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKm5zLAorCWludCByb3VuZGluZ19mbGFncykKK3sKKwlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwgJihkZXZwcml2LT5kaXZpc29yMSksCisJCSYoZGV2cHJpdi0+ZGl2aXNvcjIpLCBucywgcm91bmRpbmdfZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCisJLyogV3JpdGUgdGhlIHZhbHVlcyBvZiBjdHIxIGFuZCBjdHIyIGludG8gY291bnRlcnMgMSBhbmQgMiAqLworCWk4MjU0X2xvYWQoZGV2cHJpdi0+cGFjZXJfY291bnRlcl9kaW8gKyBBREM4MjU0LCAwLCAxLAorCQlkZXZwcml2LT5kaXZpc29yMSwgMik7CisJaTgyNTRfbG9hZChkZXZwcml2LT5wYWNlcl9jb3VudGVyX2RpbyArIEFEQzgyNTQsIDAsIDIsCisJCWRldnByaXYtPmRpdmlzb3IyLCAyKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfY2FsaWJyYXRpb25fYml0c3RyZWFtKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCByZWdpc3Rlcl9iaXRzLCB1bnNpZ25lZCBpbnQgYml0c3RyZWFtLAorCXVuc2lnbmVkIGludCBiaXRzdHJlYW1fbGVuZ3RoKQoreworCXN0YXRpYyBjb25zdCBpbnQgd3JpdGVfZGVsYXkgPSAxOworCXVuc2lnbmVkIGludCBiaXQ7CisKKwlmb3IgKGJpdCA9IDEgPDwgKGJpdHN0cmVhbV9sZW5ndGggLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJaWYgKGJpdHN0cmVhbSAmIGJpdCkKKwkJCXJlZ2lzdGVyX2JpdHMgfD0gU0VSSUFMX0RBVEFfSU5fQklUOworCQllbHNlCisJCQlyZWdpc3Rlcl9iaXRzICY9IH5TRVJJQUxfREFUQV9JTl9CSVQ7CisJCWNvbWVkaV91ZGVsYXkod3JpdGVfZGVsYXkpOworCQlvdXR3KHJlZ2lzdGVyX2JpdHMsIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQ0FMSUJSQVRJT05fUkVHKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2FsZGFjXzg4MDBfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBhZGRyZXNzLAorCXVpbnQ4X3QgdmFsdWUpCit7CisJc3RhdGljIGNvbnN0IGludCBudW1fY2FsZGFjX2NoYW5uZWxzID0gODsKKwlzdGF0aWMgY29uc3QgaW50IGJpdHN0cmVhbV9sZW5ndGggPSAxMTsKKwl1bnNpZ25lZCBpbnQgYml0c3RyZWFtID0gKChhZGRyZXNzICYgMHg3KSA8PCA4KSB8IHZhbHVlOworCXN0YXRpYyBjb25zdCBpbnQgY2FsZGFjXzg4MDBfY29tZWRpX3VkZWxheSA9IDE7CisKKwlpZiAoYWRkcmVzcyA+PSBudW1fY2FsZGFjX2NoYW5uZWxzKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJpbGxlZ2FsIGNhbGRhYyBjaGFubmVsIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAodmFsdWUgPT0gZGV2cHJpdi0+Y2FsZGFjX3ZhbHVlW2FkZHJlc3NdKQorCQlyZXR1cm4gMTsKKworCWRldnByaXYtPmNhbGRhY192YWx1ZVthZGRyZXNzXSA9IHZhbHVlOworCisJd3JpdGVfY2FsaWJyYXRpb25fYml0c3RyZWFtKGRldiwgY2FsX2VuYWJsZV9iaXRzKGRldiksIGJpdHN0cmVhbSwKKwkJYml0c3RyZWFtX2xlbmd0aCk7CisKKwljb21lZGlfdWRlbGF5KGNhbGRhY184ODAwX2NvbWVkaV91ZGVsYXkpOworCW91dHcoY2FsX2VuYWJsZV9iaXRzKGRldikgfCBTRUxFQ1RfODgwMF9CSVQsCisJCWRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQ0FMSUJSQVRJT05fUkVHKTsKKwljb21lZGlfdWRlbGF5KGNhbGRhY184ODAwX2NvbWVkaV91ZGVsYXkpOworCW91dHcoY2FsX2VuYWJsZV9iaXRzKGRldiksIGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgQ0FMSUJSQVRJT05fUkVHKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHRyaW1wb3RfNzM3Nl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDhfdCB2YWx1ZSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IGJpdHN0cmVhbV9sZW5ndGggPSA3OworCXVuc2lnbmVkIGludCBiaXRzdHJlYW0gPSB2YWx1ZSAmIDB4N2Y7CisJdW5zaWduZWQgaW50IHJlZ2lzdGVyX2JpdHM7CisJc3RhdGljIGNvbnN0IGludCBhZDczNzZfY29tZWRpX3VkZWxheSA9IDE7CisKKwlyZWdpc3Rlcl9iaXRzID0gY2FsX2VuYWJsZV9iaXRzKGRldikgfCBTRUxFQ1RfVFJJTVBPVF9CSVQ7CisJY29tZWRpX3VkZWxheShhZDczNzZfY29tZWRpX3VkZWxheSk7CisJb3V0dyhyZWdpc3Rlcl9iaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisKKwl3cml0ZV9jYWxpYnJhdGlvbl9iaXRzdHJlYW0oZGV2LCByZWdpc3Rlcl9iaXRzLCBiaXRzdHJlYW0sCisJCWJpdHN0cmVhbV9sZW5ndGgpOworCisJY29tZWRpX3VkZWxheShhZDczNzZfY29tZWRpX3VkZWxheSk7CisJb3V0dyhjYWxfZW5hYmxlX2JpdHMoZGV2KSwgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBDQUxJQlJBVElPTl9SRUcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEZvciAxNjAyLzE2IG9ubHkKKyAqIGNoIDAgOiBhZGMgZ2FpbgorICogY2ggMSA6IGFkYyBwb3N0Z2FpbiBvZmZzZXQgKi8KK3N0YXRpYyBpbnQgdHJpbXBvdF84NDAyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1aW50OF90IHZhbHVlKQoreworCXN0YXRpYyBjb25zdCBpbnQgYml0c3RyZWFtX2xlbmd0aCA9IDEwOworCXVuc2lnbmVkIGludCBiaXRzdHJlYW0gPSAoKGNoYW5uZWwgJiAweDMpIDw8IDgpIHwgKHZhbHVlICYgMHhmZik7CisJdW5zaWduZWQgaW50IHJlZ2lzdGVyX2JpdHM7CisJc3RhdGljIGNvbnN0IGludCBhZDg0MDJfY29tZWRpX3VkZWxheSA9IDE7CisKKwlyZWdpc3Rlcl9iaXRzID0gY2FsX2VuYWJsZV9iaXRzKGRldikgfCBTRUxFQ1RfVFJJTVBPVF9CSVQ7CisJY29tZWRpX3VkZWxheShhZDg0MDJfY29tZWRpX3VkZWxheSk7CisJb3V0dyhyZWdpc3Rlcl9iaXRzLCBkZXZwcml2LT5jb250cm9sX3N0YXR1cyArIENBTElCUkFUSU9OX1JFRyk7CisKKwl3cml0ZV9jYWxpYnJhdGlvbl9iaXRzdHJlYW0oZGV2LCByZWdpc3Rlcl9iaXRzLCBiaXRzdHJlYW0sCisJCWJpdHN0cmVhbV9sZW5ndGgpOworCisJY29tZWRpX3VkZWxheShhZDg0MDJfY29tZWRpX3VkZWxheSk7CisJb3V0dyhjYWxfZW5hYmxlX2JpdHMoZGV2KSwgZGV2cHJpdi0+Y29udHJvbF9zdGF0dXMgKyBDQUxJQlJBVElPTl9SRUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9mb3JfbnZyYW1fcmVhZHkodW5zaWduZWQgbG9uZyBzNTkzM19iYXNlX2FkZHIpCit7CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJaWYgKChpbmIoczU5MzNfYmFzZV9hZGRyICsKKwkJCQkJQU1DQ19PUF9SRUdfTUNTUl9OVkNNRCkgJiBNQ1NSX05WX0JVU1kpCisJCQk9PSAwKQorCQkJcmV0dXJuIDA7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBudnJhbV9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgYWRkcmVzcywgdWludDhfdCAqIGRhdGEpCit7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBkZXZwcml2LT5zNTkzM19jb25maWc7CisKKwlpZiAod2FpdF9mb3JfbnZyYW1fcmVhZHkoaW9iYXNlKSA8IDApCisJCXJldHVybiAtRVRJTUVET1VUOworCisJb3V0YihNQ1NSX05WX0VOQUJMRSB8IE1DU1JfTlZfTE9BRF9MT1dfQUREUiwKKwkJaW9iYXNlICsgQU1DQ19PUF9SRUdfTUNTUl9OVkNNRCk7CisJb3V0YihhZGRyZXNzICYgMHhmZiwgaW9iYXNlICsgQU1DQ19PUF9SRUdfTUNTUl9OVkRBVEEpOworCW91dGIoTUNTUl9OVl9FTkFCTEUgfCBNQ1NSX05WX0xPQURfSElHSF9BRERSLAorCQlpb2Jhc2UgKyBBTUNDX09QX1JFR19NQ1NSX05WQ01EKTsKKwlvdXRiKChhZGRyZXNzID4+IDgpICYgMHhmZiwgaW9iYXNlICsgQU1DQ19PUF9SRUdfTUNTUl9OVkRBVEEpOworCW91dGIoTUNTUl9OVl9FTkFCTEUgfCBNQ1NSX05WX1JFQUQsIGlvYmFzZSArIEFNQ0NfT1BfUkVHX01DU1JfTlZDTUQpOworCisJaWYgKHdhaXRfZm9yX252cmFtX3JlYWR5KGlvYmFzZSkgPCAwKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCSpkYXRhID0gaW5iKGlvYmFzZSArIEFNQ0NfT1BfUkVHX01DU1JfTlZEQVRBKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9jYl9wY2lkYXMsIGNiX3BjaWRhc19wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTU4MGJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKQEAgLTAsMCArMSw0MjIyIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2NiX3BjaWRhczY0LmMKKyAgICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgQ29tcHV0ZXJCb2FyZHMvTWVhc3VyZW1lbnRDb21wdXRpbmcgUENJLURBUworICAgIDY0eHgsIDYweHgsIGFuZCA0MDIwIGNhcmRzLgorCisgICAgQXV0aG9yOiAgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBGcmFuayBNb3JpIEhlc3MKKworICAgIFRoYW5rcyBhbHNvIGdvIHRvIHRoZSBmb2xsb3dpbmcgcGVvcGxlOgorCisgICAgU3RldmUgUm9zZW5ibHV0aCwgZm9yIHByb3ZpZGluZyB0aGUgc291cmNlIGNvZGUgZm9yCisgICAgaGlzIHBjaS1kYXM2NDAyIGRyaXZlciwgYW5kIHNvdXJjZSBjb2RlIGZvciB3b3JraW5nIFFOWCBwY2ktNjQwMgorICAgIGRyaXZlcnMgYnkgR3JlZyBMYWlyZCBhbmQgTWFyaXVzeiBCb2dhY3ouICBOb25lIG9mIHRoZSBjb2RlIHdhcworICAgIHVzZWQgZGlyZWN0bHkgaGVyZSwgYnV0IGl0IHdhcyB1c2VmdWwgYXMgYW4gYWRkaXRpb25hbCBzb3VyY2Ugb2YKKyAgICBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byBwcm9ncmFtIHRoZSBib2FyZHMuCisKKyAgICBKb2huIFNpbXMsIGZvciBtdWNoIHRlc3RpbmcgYW5kIGZlZWRiYWNrIG9uIHBjaWRhcy00MDIwIHN1cHBvcnQuCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorCitEcml2ZXI6IGNiX3BjaWRhczY0CitEZXNjcmlwdGlvbjogTWVhc3VyZW1lbnRDb21wdXRpbmcgUENJLURBUzY0eHgsIDYwWFgsIGFuZCA0MDIwIHNlcmllcyB3aXRoIHRoZSBQTFggOTA4MCBQQ0kgY29udHJvbGxlcgorQXV0aG9yOiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitTdGF0dXM6IHdvcmtzCitVcGRhdGVkOiAyMDAyLTEwLTA5CitEZXZpY2VzOiBbTWVhc3VyZW1lbnQgQ29tcHV0aW5nXSBQQ0ktREFTNjQwMi8xNiAoY2JfcGNpZGFzNjQpLAorICBQQ0ktREFTNjQwMi8xMiwgUENJLURBUzY0L00xLzE2LCBQQ0ktREFTNjQvTTIvMTYsCisgIFBDSS1EQVM2NC9NMy8xNiwgUENJLURBUzY0MDIvMTYvSlIsIFBDSS1EQVM2NC9NMS8xNi9KUiwKKyAgUENJLURBUzY0L00yLzE2L0pSLCBQQ0ktREFTNjQvTTMvMTYvSlIsIFBDSS1EQVM2NC9NMS8xNCwKKyAgUENJLURBUzY0L00yLzE0LCBQQ0ktREFTNjQvTTMvMTQsIFBDSS1EQVM2MDEzLCBQQ0ktREFTNjAxNCwKKyAgUENJLURBUzYwMjMsIFBDSS1EQVM2MDI1LCBQQ0ktREFTNjAzMCwKKyAgUENJLURBUzYwMzEsIFBDSS1EQVM2MDMyLCBQQ0ktREFTNjAzMywgUENJLURBUzYwMzQsCisgIFBDSS1EQVM2MDM1LCBQQ0ktREFTNjAzNiwgUENJLURBUzYwNDAsIFBDSS1EQVM2MDUyLAorICBQQ0ktREFTNjA3MCwgUENJLURBUzYwNzEsIFBDSS1EQVM0MDIwLzEyCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisKK1RoZXNlIGJvYXJkcyBtYXkgYmUgYXV0b2NhbGlicmF0ZWQgd2l0aCB0aGUgY29tZWRpX2NhbGlicmF0ZSB1dGlsaXR5LgorCitUbyBzZWxlY3QgdGhlIGJuYyB0cmlnZ2VyIGlucHV0IG9uIHRoZSA0MDIwIChpbnN0ZWFkIG9mIHRoZSBkaW8gaW5wdXQpLAorc3BlY2lmeSBhIG5vbnplcm8gY2hhbm5lbCBpbiB0aGUgY2hhbnNwZWMuICBJZiB5b3Ugd2lzaCB0byB1c2UgYW4gZXh0ZXJuYWwKK21hc3RlciBjbG9jayBvbiB0aGUgNDAyMCwgeW91IG1heSBkbyBzbyBieSBzZXR0aW5nIHRoZSBzY2FuX2JlZ2luX3NyYwordG8gVFJJR19PVEhFUiwgYW5kIHVzaW5nIGFuIElOU05fQ09ORklHX1RJTUVSXzEgY29uZmlndXJhdGlvbiBpbnNuCit0byBjb25maWd1cmUgdGhlIGRpdmlzb3IgdG8gdXNlIGZvciB0aGUgZXh0ZXJuYWwgY2xvY2suCisKK1NvbWUgZGV2aWNlcyBhcmUgbm90IGlkZW50aWZpZWQgYmVjYXVzZSB0aGUgUENJIGRldmljZSBJRHMgYXJlIG5vdCB5ZXQKK2tub3duLiBJZiB5b3UgaGF2ZSBzdWNoIGEgYm9hcmQsIHBsZWFzZSBmaWxlIGEgYnVnIHJlcG9ydCBhdAoraHR0cHM6Ly9idWdzLmNvbWVkaS5vcmcuCisKKyovCisKKy8qCisKK1RPRE86CisJbWFrZSBpdCByZXR1cm4gZXJyb3IgaWYgdXNlciBhdHRlbXB0cyBhbiBhaSBjb21tYW5kIHRoYXQgdXNlcyB0aGUKKwkJZXh0ZXJuYWwgcXVldWUsIGFuZCBhbiBhbyBjb21tYW5kIHNpbXVsdGFuZW91c2x5CisJdXNlciBjb3VudGVyIHN1YmRldmljZQorCXRoZXJlIGFyZSBhIG51bWJlciBvZiBib2FyZHMgdGhpcyBkcml2ZXIgd2lsbCBzdXBwb3J0IHdoZW4gdGhleSBhcmUKKwkJZnVsbHkgcmVsZWFzZWQsIGJ1dCBkb2VzIG5vdCB5ZXQgc2luY2UgdGhlIHBjaSBkZXZpY2UgaWQgbnVtYmVycworCQlhcmUgbm90IHlldCBhdmFpbGFibGUuCisJc3VwcG9ydCBwcmVzY2FsZWQgMTAwa2h6IGNsb2NrIGZvciBzbG93IHBhY2luZyAobm90IGF2YWlsYWJsZSBvbiA2MDAwIHNlcmllcz8pCisJbWFrZSBhbyBmaWZvIHNpemUgYWRqdXN0YWJsZSBsaWtlIGFpIGZpZm8KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiODI1NS5oIgorI2luY2x1ZGUgInBseDkwODAuaCIKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworI3VuZGVmIFBDSURBUzY0X0RFQlVHCQkvLyBkaXNhYmxlIGRlYnVnZ2luZyBjb2RlCisvLyNkZWZpbmUgUENJREFTNjRfREVCVUcgICAgICAgIC8vIGVuYWJsZSBkZWJ1Z2dpbmcgY29kZQorCisjaWZkZWYgUENJREFTNjRfREVCVUcKKyNkZWZpbmUgREVCVUdfUFJJTlQoZm9ybWF0LCBhcmdzLi4uKSAgcnRfcHJpbnRrKGZvcm1hdCAsICMjIGFyZ3MgKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfUFJJTlQoZm9ybWF0LCBhcmdzLi4uKQorI2VuZGlmCisKKyNkZWZpbmUgVElNRVJfQkFTRSAyNQkJLy8gNDBNSHogbWFzdGVyIGNsb2NrCisjZGVmaW5lIFBSRVNDQUxFRF9USU1FUl9CQVNFCTEwMDAwCS8vIDEwMGtIeiAncHJlc2NhbGVkJyBjbG9jayBmb3Igc2xvdyBhcXVpc2l0aW9uLCBtYXliZSBJJ2xsIHN1cHBvcnQgdGhpcyBzb21lZGF5CisjZGVmaW5lIERNQV9CVUZGRVJfU0laRSAweDEwMDAKKworLyogbWF4aW11bSB2YWx1ZSB0aGF0IGNhbiBiZSBsb2FkZWQgaW50byBib2FyZCdzIDI0LWJpdCBjb3VudGVycyovCitzdGF0aWMgY29uc3QgaW50IG1heF9jb3VudGVyX3ZhbHVlID0gMHhmZmZmZmY7CisKKy8qIFBDSS1EQVM2NHh4eCBiYXNlIGFkZHJlc3NlcyAqLworCisvLyBpbmRpY2VzIG9mIGJhc2UgYWRkcmVzcyByZWdpb25zCitlbnVtIGJhc2VfYWRkcmVzc19yZWdpb25zIHsKKwlQTFg5MDgwX0JBRERSSU5ERVggPSAwLAorCU1BSU5fQkFERFJJTkRFWCA9IDIsCisJRElPX0NPVU5URVJfQkFERFJJTkRFWCA9IDMsCit9OworCisvLyBwcml2KGRldiktPm1haW5faW9iYXNlIHJlZ2lzdGVycworZW51bSB3cml0ZV9vbmx5X3JlZ2lzdGVycyB7CisJSU5UUl9FTkFCTEVfUkVHID0gMHgwLAkvLyBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyCisJSFdfQ09ORklHX1JFRyA9IDB4MiwJLy8gaGFyZHdhcmUgY29uZmlnIHJlZ2lzdGVyCisJREFRX1NZTkNfUkVHID0gMHhjLAorCURBUV9BVFJJR19MT1dfNDAyMF9SRUcgPSAweGMsCisJQURDX0NPTlRST0wwX1JFRyA9IDB4MTAsCS8vIGFkYyBjb250cm9sIHJlZ2lzdGVyIDAKKwlBRENfQ09OVFJPTDFfUkVHID0gMHgxMiwJLy8gYWRjIGNvbnRyb2wgcmVnaXN0ZXIgMQorCUNBTElCUkFUSU9OX1JFRyA9IDB4MTQsCisJQURDX1NBTVBMRV9JTlRFUlZBTF9MT1dFUl9SRUcgPSAweDE2LAkvLyBsb3dlciAxNiBiaXRzIG9mIGFkYyBzYW1wbGUgaW50ZXJ2YWwgY291bnRlcgorCUFEQ19TQU1QTEVfSU5URVJWQUxfVVBQRVJfUkVHID0gMHgxOCwJLy8gdXBwZXIgOCBiaXRzIG9mIGFkYyBzYW1wbGUgaW50ZXJ2YWwgY291bnRlcgorCUFEQ19ERUxBWV9JTlRFUlZBTF9MT1dFUl9SRUcgPSAweDFhLAkvLyBsb3dlciAxNiBiaXRzIG9mIGRlbGF5IGludGVydmFsIGNvdW50ZXIKKwlBRENfREVMQVlfSU5URVJWQUxfVVBQRVJfUkVHID0gMHgxYywJLy8gdXBwZXIgOCBiaXRzIG9mIGRlbGF5IGludGVydmFsIGNvdW50ZXIKKwlBRENfQ09VTlRfTE9XRVJfUkVHID0gMHgxZSwJLy8gbG93ZXIgMTYgYml0cyBvZiBoYXJkd2FyZSBjb252ZXJzaW9uL3NjYW4gY291bnRlcgorCUFEQ19DT1VOVF9VUFBFUl9SRUcgPSAweDIwLAkvLyB1cHBlciA4IGJpdHMgb2YgaGFyZHdhcmUgY29udmVyc2lvbi9zY2FuIGNvdW50ZXIKKwlBRENfU1RBUlRfUkVHID0gMHgyMiwJLy8gc29mdHdhcmUgdHJpZ2dlciB0byBzdGFydCBhcXVpc2l0aW9uCisJQURDX0NPTlZFUlRfUkVHID0gMHgyNCwJLy8gaW5pdGlhdGVzIHNpbmdsZSBjb252ZXJzaW9uCisJQURDX1FVRVVFX0NMRUFSX1JFRyA9IDB4MjYsCS8vIGNsZWFycyBhZGMgcXVldWUKKwlBRENfUVVFVUVfTE9BRF9SRUcgPSAweDI4LAkvLyBsb2FkcyBhZGMgcXVldWUKKwlBRENfQlVGRkVSX0NMRUFSX1JFRyA9IDB4MmEsCisJQURDX1FVRVVFX0hJR0hfUkVHID0gMHgyYywJLy8gaGlnaCBjaGFubmVsIGZvciBpbnRlcm5hbCBxdWV1ZSwgdXNlIGFkY19jaGFuX2JpdHMoKSBpbmxpbmUgYWJvdmUKKwlEQUNfQ09OVFJPTDBfUkVHID0gMHg1MCwJLy8gZGFjIGNvbnRyb2wgcmVnaXN0ZXIgMAorCURBQ19DT05UUk9MMV9SRUcgPSAweDUyLAkvLyBkYWMgY29udHJvbCByZWdpc3RlciAwCisJREFDX1NBTVBMRV9JTlRFUlZBTF9MT1dFUl9SRUcgPSAweDU0LAkvLyBsb3dlciAxNiBiaXRzIG9mIGRhYyBzYW1wbGUgaW50ZXJ2YWwgY291bnRlcgorCURBQ19TQU1QTEVfSU5URVJWQUxfVVBQRVJfUkVHID0gMHg1NiwJLy8gdXBwZXIgOCBiaXRzIG9mIGRhYyBzYW1wbGUgaW50ZXJ2YWwgY291bnRlcgorCURBQ19TRUxFQ1RfUkVHID0gMHg2MCwKKwlEQUNfU1RBUlRfUkVHID0gMHg2NCwKKwlEQUNfQlVGRkVSX0NMRUFSX1JFRyA9IDB4NjYsCS8vIGNsZWFyIGRhYyBidWZmZXIKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYWNfY29udmVydF9yZWcodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIDB4NzAgKyAoMiAqIChjaGFubmVsICYgMHgxKSk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkYWNfbHNiXzQwMjBfcmVnKHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXJldHVybiAweDcwICsgKDQgKiAoY2hhbm5lbCAmIDB4MSkpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGFjX21zYl80MDIwX3JlZyh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHg3MiArICg0ICogKGNoYW5uZWwgJiAweDEpKTsKK30KKworZW51bSByZWFkX29ubHlfcmVnaXN0ZXJzIHsKKwlIV19TVEFUVVNfUkVHID0gMHgwLAkvLyBoYXJkd2FyZSBzdGF0dXMgcmVnaXN0ZXIsIHJlYWRpbmcgdGhpcyBhcHBhcmVudGx5IGNsZWFycyBwZW5kaW5nIGludGVycnVwdHMgYXMgd2VsbAorCVBJUEUxX1JFQURfUkVHID0gMHg0LAorCUFEQ19SRUFEX1BOVFJfUkVHID0gMHg4LAorCUxPV0VSX1hGRVJfUkVHID0gMHgxMCwKKwlBRENfV1JJVEVfUE5UUl9SRUcgPSAweGMsCisJUFJFUE9TVF9SRUcgPSAweDE0LAorfTsKKworZW51bSByZWFkX3dyaXRlX3JlZ2lzdGVycyB7CisJSTgyNTVfNDAyMF9SRUcgPSAweDQ4LAkvLyA4MjU1IG9mZnNldCwgZm9yIDQwMjAgb25seQorCUFEQ19RVUVVRV9GSUZPX1JFRyA9IDB4MTAwLAkvLyBleHRlcm5hbCBjaGFubmVsL2dhaW4gcXVldWUsIHVzZXMgc2FtZSBiaXRzIGFzIEFEQ19RVUVVRV9MT0FEX1JFRworCUFEQ19GSUZPX1JFRyA9IDB4MjAwLAkvKiBhZGMgZGF0YSBmaWZvICovCisJREFDX0ZJRk9fUkVHID0gMHgzMDAsCS8qIGRhYyBkYXRhIGZpZm8sIGhhcyB3ZWlyZCBpbnRlcmFjdGlvbnMgd2l0aCBleHRlcm5hbCBjaGFubmVsIHF1ZXVlICovCit9OworCisvLyBwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSByZWdpc3RlcnMKK2VudW0gZGlvX2NvdW50ZXJfcmVnaXN0ZXJzIHsKKwlESU9fODI1NV9PRkZTRVQgPSAweDAsCisJRE9fUkVHID0gMHgyMCwKKwlESV9SRUcgPSAweDI4LAorCURJT19ESVJFQ1RJT05fNjBYWF9SRUcgPSAweDQwLAorCURJT19EQVRBXzYwWFhfUkVHID0gMHg0OCwKK307CisKKy8vIGJpdCBkZWZpbml0aW9ucyBmb3Igd3JpdGUtb25seSByZWdpc3RlcnMKKworZW51bSBpbnRyX2VuYWJsZV9jb250ZW50cyB7CisJQURDX0lOVFJfU1JDX01BU0sgPSAweDMsCS8vIGJpdHMgdGhhdCBzZXQgYWRjIGludGVycnVwdCBzb3VyY2UKKwlBRENfSU5UUl9RRlVMTF9CSVRTID0gMHgwLAkvLyBpbnRlcnJ1cHQgZmlmbyBxdWF0ZXIgZnVsbAorCUFEQ19JTlRSX0VPQ19CSVRTID0gMHgxLAkvLyBpbnRlcnJ1cHQgZW5kIG9mIGNvbnZlcnNpb24KKwlBRENfSU5UUl9FT1NDQU5fQklUUyA9IDB4MiwJLy8gaW50ZXJydXB0IGVuZCBvZiBzY2FuCisJQURDX0lOVFJfRU9TRVFfQklUUyA9IDB4MywJLy8gaW50ZXJydXB0IGVuZCBvZiBzZXF1ZW5jZSAocHJvYmFibHkgd29udCB1c2UgdGhpcyBpdCdzIHByZXR0eSBmYW5jeSkKKwlFTl9BRENfSU5UUl9TUkNfQklUID0gMHg0LAkvLyBlbmFibGUgYWRjIGludGVycnVwdCBzb3VyY2UKKwlFTl9BRENfRE9ORV9JTlRSX0JJVCA9IDB4OCwJLy8gZW5hYmxlIGFkYyBhcXVpc2l0aW9uIGRvbmUgaW50ZXJydXB0CisJREFDX0lOVFJfU1JDX01BU0sgPSAweDMwLAorCURBQ19JTlRSX1FFTVBUWV9CSVRTID0gMHgwLAorCURBQ19JTlRSX0hJR0hfQ0hBTl9CSVRTID0gMHgxMCwKKwlFTl9EQUNfSU5UUl9TUkNfQklUID0gMHg0MCwJLy8gZW5hYmxlIGRhYyBpbnRlcnJ1cHQgc291cmNlCisJRU5fREFDX0RPTkVfSU5UUl9CSVQgPSAweDgwLAorCUVOX0FEQ19BQ1RJVkVfSU5UUl9CSVQgPSAweDIwMCwJLy8gZW5hYmxlIGFkYyBhY3RpdmUgaW50ZXJydXB0CisJRU5fQURDX1NUT1BfSU5UUl9CSVQgPSAweDQwMCwJLy8gZW5hYmxlIGFkYyBzdG9wIHRyaWdnZXIgaW50ZXJydXB0CisJRU5fREFDX0FDVElWRV9JTlRSX0JJVCA9IDB4ODAwLAkvLyBlbmFibGUgZGFjIGFjdGl2ZSBpbnRlcnJ1cHQKKwlFTl9EQUNfVU5ERVJSVU5fQklUID0gMHg0MDAwLAkvLyBlbmFibGUgZGFjIHVuZGVycnVuIHN0YXR1cyBiaXQKKwlFTl9BRENfT1ZFUlJVTl9CSVQgPSAweDgwMDAsCS8vIGVuYWJsZSBhZGMgb3ZlcnJ1biBzdGF0dXMgYml0Cit9OworCitlbnVtIGh3X2NvbmZpZ19jb250ZW50cyB7CisJTUFTVEVSX0NMT0NLXzQwMjBfTUFTSyA9IDB4MywJLy8gYml0cyB0aGF0IHNwZWNpZnkgbWFzdGVyIGNsb2NrIHNvdXJjZSBmb3IgNDAyMAorCUlOVEVSTkFMX0NMT0NLXzQwMjBfQklUUyA9IDB4MSwJLy8gdXNlIDQwIE1IeiBpbnRlcm5hbCBtYXN0ZXIgY2xvY2sgZm9yIDQwMjAKKwlCTkNfQ0xPQ0tfNDAyMF9CSVRTID0gMHgyLAkvLyB1c2UgQk5DIGlucHV0IGZvciBtYXN0ZXIgY2xvY2sKKwlFWFRfQ0xPQ0tfNDAyMF9CSVRTID0gMHgzLAkvLyB1c2UgZGlvIGlucHV0IGZvciBtYXN0ZXIgY2xvY2sKKwlFWFRfUVVFVUVfQklUID0gMHgyMDAsCS8vIHVzZSBleHRlcm5hbCBjaGFubmVsL2dhaW4gcXVldWUgKG1vcmUgdmVyc2F0aWxlIHRoYW4gaW50ZXJuYWwgcXVldWUpCisJU0xPV19EQUNfQklUID0gMHg0MDAsCS8vIHVzZSAyMjUgbmFub3NlYyBzdHJvYmUgd2hlbiBsb2FkaW5nIGRhYyBpbnN0ZWFkIG9mIDUwIG5hbm9zZWMKKwlIV19DT05GSUdfRFVNTVlfQklUUyA9IDB4MjAwMCwJLy8gYml0IHdpdGggdW5rbm93biBmdW5jdGlvbiB5ZXQgZ2l2ZW4gYXMgZGVmYXVsdCB2YWx1ZSBpbiBwY2ktZGFzNjQgbWFudWFsCisJRE1BX0NIX1NFTEVDVF9CSVQgPSAweDgwMDAsCS8vIGJpdCBzZWxlY3RzIGNoYW5uZWxzIDEvMCBmb3IgYW5hbG9nIGlucHV0L291dHB1dCwgb3RoZXJ3aXNlIDAvMQorCUZJRk9fU0laRV9SRUcgPSAweDQsCS8vIGFsbG93cyBhZGp1c3RtZW50IG9mIGZpZm8gc2l6ZXMKKwlEQUNfRklGT19TSVpFX01BU0sgPSAweGZmMDAsCS8vIGJpdHMgdGhhdCBzZXQgZGFjIGZpZm8gc2l6ZQorCURBQ19GSUZPX0JJVFMgPSAweGY4MDAsCS8qIDhrIHNhbXBsZSBhbyBmaWZvICovCit9OworI2RlZmluZSBEQUNfRklGT19TSVpFIDB4MjAwMAorCitlbnVtIGRhcV9hdHJpZ19sb3dfNDAyMF9jb250ZW50cyB7CisJRVhUX0FHQVRFX0JOQ19CSVQgPSAweDgwMDAsCS8vIHVzZSB0cmlnL2V4dCBjbGsgYm5jIGlucHV0IGZvciBhbmFsb2cgZ2F0ZSBzaWduYWwKKwlFWFRfU1RPUF9UUklHX0JOQ19CSVQgPSAweDQwMDAsCS8vIHVzZSB0cmlnL2V4dCBjbGsgYm5jIGlucHV0IGZvciBleHRlcm5hbCBzdG9wIHRyaWdnZXIgc2lnbmFsCisJRVhUX1NUQVJUX1RSSUdfQk5DX0JJVCA9IDB4MjAwMCwJLy8gdXNlIHRyaWcvZXh0IGNsayBibmMgaW5wdXQgZm9yIGV4dGVybmFsIHN0YXJ0IHRyaWdnZXIgc2lnbmFsCit9Oworc3RhdGljIGlubGluZSB1aW50MTZfdCBhbmFsb2dfdHJpZ19sb3dfdGhyZXNob2xkX2JpdHModWludDE2X3QgdGhyZXNob2xkKQoreworCXJldHVybiB0aHJlc2hvbGQgJiAweGZmZjsKK30KKworZW51bSBhZGNfY29udHJvbDBfY29udGVudHMgeworCUFEQ19HQVRFX1NSQ19NQVNLID0gMHgzLAkvLyBiaXRzIHRoYXQgc2VsZWN0IGdhdGUKKwlBRENfU09GVF9HQVRFX0JJVFMgPSAweDEsCS8vIHNvZnR3YXJlIGdhdGUKKwlBRENfRVhUX0dBVEVfQklUUyA9IDB4MiwJLy8gZXh0ZXJuYWwgZGlnaXRhbCBnYXRlCisJQURDX0FOQUxPR19HQVRFX0JJVFMgPSAweDMsCS8vIGFuYWxvZyBsZXZlbCBnYXRlCisJQURDX0dBVEVfTEVWRUxfQklUID0gMHg0LAkvLyBsZXZlbC1zZW5zaXRpdmUgZ2F0ZSAoZm9yIGRpZ2l0YWwpCisJQURDX0dBVEVfUE9MQVJJVFlfQklUID0gMHg4LAkvLyBnYXRlIGFjdGl2ZSBsb3cKKwlBRENfU1RBUlRfVFJJR19TT0ZUX0JJVFMgPSAweDEwLAorCUFEQ19TVEFSVF9UUklHX0VYVF9CSVRTID0gMHgyMCwKKwlBRENfU1RBUlRfVFJJR19BTkFMT0dfQklUUyA9IDB4MzAsCisJQURDX1NUQVJUX1RSSUdfTUFTSyA9IDB4MzAsCisJQURDX1NUQVJUX1RSSUdfRkFMTElOR19CSVQgPSAweDQwLAkvLyB0cmlnIDEgdXNlcyBmYWxsaW5nIGVkZ2UKKwlBRENfRVhUX0NPTlZfRkFMTElOR19CSVQgPSAweDgwMCwJLy8gZXh0ZXJuYWwgcGFjaW5nIHVzZXMgZmFsbGluZyBlZGdlCisJQURDX1NBTVBMRV9DT1VOVEVSX0VOX0JJVCA9IDB4MTAwMCwJLy8gZW5hYmxlIGhhcmR3YXJlIHNjYW4gY291bnRlcgorCUFEQ19ETUFfRElTQUJMRV9CSVQgPSAweDQwMDAsCS8vIGRpc2FibGVzIGRtYQorCUFEQ19FTkFCTEVfQklUID0gMHg4MDAwLAkvLyBtYXN0ZXIgYWRjIGVuYWJsZQorfTsKKworZW51bSBhZGNfY29udHJvbDFfY29udGVudHMgeworCUFEQ19RVUVVRV9DT05GSUdfQklUID0gMHgxLAkvLyBzaG91bGQgYmUgc2V0IGZvciBib2FyZHMgd2l0aCA+IDE2IGNoYW5uZWxzCisJQ09OVkVSVF9QT0xBUklUWV9CSVQgPSAweDEwLAorCUVPQ19QT0xBUklUWV9CSVQgPSAweDIwLAorCUFEQ19TV19HQVRFX0JJVCA9IDB4NDAsCS8vIHNvZnR3YXJlIGdhdGUgb2YgYWRjCisJQURDX0RJVEhFUl9CSVQgPSAweDIwMCwJLy8gdHVybiBvbiBleHRyYSBub2lzZSBmb3IgZGl0aGVyaW5nCisJUkVUUklHR0VSX0JJVCA9IDB4ODAwLAorCUFEQ19MT19DSEFOTkVMXzQwMjBfTUFTSyA9IDB4MzAwLAorCUFEQ19ISV9DSEFOTkVMXzQwMjBfTUFTSyA9IDB4YzAwLAorCVRXT19DSEFOTkVMXzQwMjBfQklUUyA9IDB4MTAwMCwJLy8gdHdvIGNoYW5uZWwgbW9kZSBmb3IgNDAyMAorCUZPVVJfQ0hBTk5FTF80MDIwX0JJVFMgPSAweDIwMDAsCS8vIGZvdXIgY2hhbm5lbCBtb2RlIGZvciA0MDIwCisJQ0hBTk5FTF9NT0RFXzQwMjBfTUFTSyA9IDB4MzAwMCwKKwlBRENfTU9ERV9NQVNLID0gMHhmMDAwLAorfTsKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgYWRjX2xvX2NoYW5fNDAyMF9iaXRzKHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXJldHVybiAoY2hhbm5lbCAmIDB4MykgPDwgODsKK307CitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGFkY19oaV9jaGFuXzQwMjBfYml0cyh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gKGNoYW5uZWwgJiAweDMpIDw8IDEwOworfTsKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgYWRjX21vZGVfYml0cyh1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gKG1vZGUgJiAweGYpIDw8IDEyOworfTsKKworZW51bSBjYWxpYnJhdGlvbl9jb250ZW50cyB7CisJU0VMRUNUXzg4MDBfQklUID0gMHgxLAorCVNFTEVDVF84NDAyXzY0WFhfQklUID0gMHgyLAorCVNFTEVDVF8xNTkwXzYwWFhfQklUID0gMHgyLAorCUNBTF9FTl82NFhYX0JJVCA9IDB4NDAsCS8vIGNhbGlicmF0aW9uIGVuYWJsZSBmb3IgNjR4eCBzZXJpZXMKKwlTRVJJQUxfREFUQV9JTl9CSVQgPSAweDgwLAorCVNFUklBTF9DTE9DS19CSVQgPSAweDEwMCwKKwlDQUxfRU5fNjBYWF9CSVQgPSAweDIwMCwJLy8gY2FsaWJyYXRpb24gZW5hYmxlIGZvciA2MHh4IHNlcmllcworCUNBTF9HQUlOX0JJVCA9IDB4ODAwLAorfTsKKy8qIGNhbGlicmF0aW9uIHNvdXJjZXMgZm9yIDYwMjUgYXJlOgorICogIDAgOiBncm91bmQKKyAqICAxIDogMTBWCisgKiAgMiA6IDVWCisgKiAgMyA6IDAuNVYKKyAqICA0IDogMC4wNVYKKyAqICA1IDogZ3JvdW5kCisgKiAgNiA6IGRhYyBjaGFubmVsIDAKKyAqICA3IDogZGFjIGNoYW5uZWwgMQorICovCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IGFkY19zcmNfYml0cyh1bnNpZ25lZCBpbnQgc291cmNlKQoreworCXJldHVybiAoc291cmNlICYgMHhmKSA8PCAzOworfTsKKworc3RhdGljIGlubGluZSB1aW50MTZfdCBhZGNfY29udmVydF9jaGFuXzQwMjBfYml0cyh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gKGNoYW5uZWwgJiAweDMpIDw8IDg7Cit9OworCitlbnVtIGFkY19xdWV1ZV9sb2FkX2NvbnRlbnRzIHsKKwlVTklQX0JJVCA9IDB4ODAwLAkvLyB1bmlwb2xhci9iaXBvbGFyIGJpdAorCUFEQ19TRV9ESUZGX0JJVCA9IDB4MTAwMCwJLy8gc2luZ2xlLWVuZGVkLyBkaWZmZXJlbnRpYWwgYml0CisJQURDX0NPTU1PTl9CSVQgPSAweDIwMDAsCS8vIG5vbi1yZWZlcmVuY2VkIHNpbmdsZS1lbmRlZCAoY29tbW9uLW1vZGUgaW5wdXQpCisJUVVFVUVfRU9TRVFfQklUID0gMHg0MDAwLAkvLyBxdWV1ZSBlbmQgb2Ygc2VxdWVuY2UKKwlRVUVVRV9FT1NDQU5fQklUID0gMHg4MDAwLAkvLyBxdWV1ZSBlbmQgb2Ygc2NhbgorfTsKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QgYWRjX2NoYW5fYml0cyh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCAmIDB4M2Y7Cit9OworCitlbnVtIGRhY19jb250cm9sMF9jb250ZW50cyB7CisJREFDX0VOQUJMRV9CSVQgPSAweDgwMDAsCS8vIGRhYyBjb250cm9sbGVyIGVuYWJsZSBiaXQKKwlEQUNfQ1lDTElDX1NUT1BfQklUID0gMHg0MDAwLAorCURBQ19XQVZFRk9STV9NT0RFX0JJVCA9IDB4MTAwLAorCURBQ19FWFRfVVBEQVRFX0ZBTExJTkdfQklUID0gMHg4MCwKKwlEQUNfRVhUX1VQREFURV9FTkFCTEVfQklUID0gMHg0MCwKKwlXQVZFRk9STV9UUklHX01BU0sgPSAweDMwLAorCVdBVkVGT1JNX1RSSUdfRElTQUJMRURfQklUUyA9IDB4MCwKKwlXQVZFRk9STV9UUklHX1NPRlRfQklUUyA9IDB4MTAsCisJV0FWRUZPUk1fVFJJR19FWFRfQklUUyA9IDB4MjAsCisJV0FWRUZPUk1fVFJJR19BREMxX0JJVFMgPSAweDMwLAorCVdBVkVGT1JNX1RSSUdfRkFMTElOR19CSVQgPSAweDgsCisJV0FWRUZPUk1fR0FURV9MRVZFTF9CSVQgPSAweDQsCisJV0FWRUZPUk1fR0FURV9FTkFCTEVfQklUID0gMHgyLAorCVdBVkVGT1JNX0dBVEVfU0VMRUNUX0JJVCA9IDB4MSwKK307CisKK2VudW0gZGFjX2NvbnRyb2wxX2NvbnRlbnRzIHsKKwlEQUNfV1JJVEVfUE9MQVJJVFlfQklUID0gMHg4MDAsCS8qIGJvYXJkLWRlcGVuZGVudCBzZXR0aW5nICovCisJREFDMV9FWFRfUkVGX0JJVCA9IDB4MjAwLAorCURBQzBfRVhUX1JFRl9CSVQgPSAweDEwMCwKKwlEQUNfT1VUUFVUX0VOQUJMRV9CSVQgPSAweDgwLAkvLyBkYWMgb3V0cHV0IGVuYWJsZSBiaXQKKwlEQUNfVVBEQVRFX1BPTEFSSVRZX0JJVCA9IDB4NDAsCS8qIGJvYXJkLWRlcGVuZGVudCBzZXR0aW5nICovCisJREFDX1NXX0dBVEVfQklUID0gMHgyMCwKKwlEQUMxX1VOSVBPTEFSX0JJVCA9IDB4OCwKKwlEQUMwX1VOSVBPTEFSX0JJVCA9IDB4MiwKK307CisKKy8vIGJpdCBkZWZpbml0aW9ucyBmb3IgcmVhZC1vbmx5IHJlZ2lzdGVycworZW51bSBod19zdGF0dXNfY29udGVudHMgeworCURBQ19VTkRFUlJVTl9CSVQgPSAweDEsCisJQURDX09WRVJSVU5fQklUID0gMHgyLAorCURBQ19BQ1RJVkVfQklUID0gMHg0LAorCUFEQ19BQ1RJVkVfQklUID0gMHg4LAorCURBQ19JTlRSX1BFTkRJTkdfQklUID0gMHgxMCwKKwlBRENfSU5UUl9QRU5ESU5HX0JJVCA9IDB4MjAsCisJREFDX0RPTkVfQklUID0gMHg0MCwKKwlBRENfRE9ORV9CSVQgPSAweDgwLAorCUVYVF9JTlRSX1BFTkRJTkdfQklUID0gMHgxMDAsCisJQURDX1NUT1BfQklUID0gMHgyMDAsCit9Oworc3RhdGljIGlubGluZSB1aW50MTZfdCBwaXBlX2Z1bGxfYml0cyh1aW50MTZfdCBod19zdGF0dXNfYml0cykKK3sKKwlyZXR1cm4gKGh3X3N0YXR1c19iaXRzID4+IDEwKSAmIDB4MzsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRtYV9jaGFpbl9mbGFnX2JpdHModWludDE2X3QgcHJlcG9zdF9iaXRzKQoreworCXJldHVybiAocHJlcG9zdF9iaXRzID4+IDYpICYgMHgzOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWRjX3VwcGVyX3JlYWRfcHRyX2NvZGUodWludDE2X3QgcHJlcG9zdF9iaXRzKQoreworCXJldHVybiAocHJlcG9zdF9iaXRzID4+IDEyKSAmIDB4MzsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGFkY191cHBlcl93cml0ZV9wdHJfY29kZSh1aW50MTZfdCBwcmVwb3N0X2JpdHMpCit7CisJcmV0dXJuIChwcmVwb3N0X2JpdHMgPj4gMTQpICYgMHgzOworfQorCisvLyBJMkMgYWRkcmVzc2VzIGZvciA0MDIwCitlbnVtIGkyY19hZGRyZXNzZXMgeworCVJBTkdFX0NBTF9JMkNfQUREUiA9IDB4MjAsCisJQ0FMREFDMF9JMkNfQUREUiA9IDB4YywKKwlDQUxEQUMxX0kyQ19BRERSID0gMHhkLAorfTsKKworZW51bSByYW5nZV9jYWxfaTJjX2NvbnRlbnRzIHsKKwlBRENfU1JDXzQwMjBfTUFTSyA9IDB4NzAsCS8vIGJpdHMgdGhhdCBzZXQgd2hhdCBzb3VyY2UgdGhlIGFkYyBjb252ZXJ0ZXIgbWVhc3VyZXMKKwlCTkNfVFJJR19USFJFU0hPTERfMFZfQklUID0gMHg4MCwJLy8gbWFrZSBibmMgdHJpZy9leHQgY2xvY2sgdGhyZXNob2xkIDBWIGluc3RlYWQgb2YgMi41VgorfTsKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBhZGNfc3JjXzQwMjBfYml0cyh1bnNpZ25lZCBpbnQgc291cmNlKQoreworCXJldHVybiAoc291cmNlIDw8IDQpICYgQURDX1NSQ180MDIwX01BU0s7Cit9Oworc3RhdGljIGlubGluZSB1aW50OF90IGF0dGVudWF0ZV9iaXQodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJLy8gYXR0ZW51YXRlIGNoYW5uZWwgKCstNVYgaW5wdXQgcmFuZ2UpCisJcmV0dXJuIDEgPDwgKGNoYW5uZWwgJiAweDMpOworfTsKKworLy8gYW5hbG9nIGlucHV0IHJhbmdlcyBmb3IgNjR4eCBib2FyZHMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBhaV9yYW5nZXNfNjR4eCA9IHsKKwk4LAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KQorCQl9Cit9OworCisvKiBhbmFsb2cgaW5wdXQgcmFuZ2VzIGZvciA2MHh4IGJvYXJkcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGFpX3Jhbmdlc182MHh4ID0geworCTQsCisJeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQl9Cit9OworCisvKiBhbmFsb2cgaW5wdXQgcmFuZ2VzIGZvciA2MDMwLCBldGMgYm9hcmRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgYWlfcmFuZ2VzXzYwMzAgPSB7CisJMTQsCisJeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyKSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMiksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMiksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC41KSwKKwkJCVVOSV9SQU5HRSgwLjIpLAorCQkJVU5JX1JBTkdFKDAuMSksCisJCX0KK307CisKKy8qIGFuYWxvZyBpbnB1dCByYW5nZXMgZm9yIDYwNTIsIGV0YyBib2FyZHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBhaV9yYW5nZXNfNjA1MiA9IHsKKwkxNSwKKwl7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC41KSwKKwkJCUJJUF9SQU5HRSgwLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjUpLAorCQkJVU5JX1JBTkdFKDAuMiksCisJCQlVTklfUkFOR0UoMC4xKSwKKwkJfQorfTsKKworLy8gYW5hbG9nIGlucHV0IHJhbmdlcyBmb3IgNDAyMCBib2FyZAorc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGFpX3Jhbmdlc180MDIwID0geworCTIsCisJeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDEpLAorCQl9Cit9OworCisvLyBhbmFsb2cgb3V0cHV0IHJhbmdlcworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGFvX3Jhbmdlc182NHh4ID0geworCTQsCisJeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCX0KK307CitzdGF0aWMgY29uc3QgaW50IGFvX3JhbmdlX2NvZGVfNjR4eFtdID0geworCTB4MCwKKwkweDEsCisJMHgyLAorCTB4MywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBhb19yYW5nZXNfNjB4eCA9IHsKKwkxLAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCX0KK307CitzdGF0aWMgY29uc3QgaW50IGFvX3JhbmdlX2NvZGVfNjB4eFtdID0geworCTB4MCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBhb19yYW5nZXNfNjAzMCA9IHsKKwkyLAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoMTApLAorCQl9Cit9Oworc3RhdGljIGNvbnN0IGludCBhb19yYW5nZV9jb2RlXzYwMzBbXSA9IHsKKwkweDAsCisJMHgyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGFvX3Jhbmdlc180MDIwID0geworCTIsCisJeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJfQorfTsKK3N0YXRpYyBjb25zdCBpbnQgYW9fcmFuZ2VfY29kZV80MDIwW10gPSB7CisJMHgxLAorCTB4MCwKK307CisKK2VudW0gcmVnaXN0ZXJfbGF5b3V0IHsKKwlMQVlPVVRfNjBYWCwKKwlMQVlPVVRfNjRYWCwKKwlMQVlPVVRfNDAyMCwKK307CisKK3N0cnVjdCBod19maWZvX2luZm8geworCXVuc2lnbmVkIGludCBudW1fc2VnbWVudHM7CisJdW5zaWduZWQgaW50IG1heF9zZWdtZW50X2xlbmd0aDsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlX3BhY2tpbmdfcmF0aW87CisJdWludDE2X3QgZmlmb19zaXplX3JlZ19tYXNrOworfTsKKworc3RydWN0IHBjaWRhczY0X2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkZXZpY2VfaWQ7CQkvLyBwY2kgZGV2aWNlIGlkCisJaW50IGFpX3NlX2NoYW5zOwkvLyBudW1iZXIgb2YgYWkgaW5wdXRzIGluIHNpbmdsZS1lbmRlZCBtb2RlCisJaW50IGFpX2JpdHM7CQkvLyBhbmFsb2cgaW5wdXQgcmVzb2x1dGlvbgorCWludCBhaV9zcGVlZDsJCS8vIGZhc3Rlc3QgY29udmVyc2lvbiBwZXJpb2QgaW4gbnMKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfdGFibGU7CisJaW50IGFvX25jaGFuOwkJLy8gbnVtYmVyIG9mIGFuYWxvZyBvdXQgY2hhbm5lbHMKKwlpbnQgYW9fYml0czsJCS8vIGFuYWxvZyBvdXRwdXQgcmVzb2x1dGlvbgorCWludCBhb19zY2FuX3NwZWVkOwkvLyBhbmFsb2cgb3V0cHV0IHNwZWVkIChmb3IgYSBzY2FuLCBub3QgY29udmVyc2lvbikKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfdGFibGU7CisJY29uc3QgaW50ICphb19yYW5nZV9jb2RlOworCWNvbnN0IHN0cnVjdCBod19maWZvX2luZm8gKmNvbnN0IGFpX2ZpZm87CisJZW51bSByZWdpc3Rlcl9sYXlvdXQgbGF5b3V0OwkvLyBkaWZmZXJlbnQgYm9hcmQgZmFtaWxpZXMgaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnQgcmVnaXN0ZXJzCisJdW5zaWduZWQgaGFzXzgyNTU6MTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdfZmlmb19pbmZvIGFpX2ZpZm9fNDAyMCA9IHsKKyAgICAgIG51bV9zZWdtZW50czoyLAorICAgICAgbWF4X3NlZ21lbnRfbGVuZ3RoOjB4ODAwMCwKKyAgICAgIHNhbXBsZV9wYWNraW5nX3JhdGlvOjIsCisgICAgICBmaWZvX3NpemVfcmVnX21hc2s6MHg3ZiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdfZmlmb19pbmZvIGFpX2ZpZm9fNjR4eCA9IHsKKyAgICAgIG51bV9zZWdtZW50czo0LAorICAgICAgbWF4X3NlZ21lbnRfbGVuZ3RoOjB4ODAwLAorICAgICAgc2FtcGxlX3BhY2tpbmdfcmF0aW86MSwKKyAgICAgIGZpZm9fc2l6ZV9yZWdfbWFzazoweDNmLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBod19maWZvX2luZm8gYWlfZmlmb182MHh4ID0geworICAgICAgbnVtX3NlZ21lbnRzOjQsCisgICAgICBtYXhfc2VnbWVudF9sZW5ndGg6MHg4MDAsCisgICAgICBzYW1wbGVfcGFja2luZ19yYXRpbzoxLAorICAgICAgZmlmb19zaXplX3JlZ19tYXNrOjB4N2YsCit9OworCisvKiBtYXhpbXVtIG51bWJlciBvZiBkbWEgdHJhbnNmZXJzIHdlIHdpbGwgY2hhaW4gdG9nZXRoZXIgaW50byBhIHJpbmcKKyAqIChhbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGRtYSBidWZmZXJzIHdlIG1haW50YWluKSAqLworI2RlZmluZSBNQVhfQUlfRE1BX1JJTkdfQ09VTlQgKDB4ODAwMDAgLyBETUFfQlVGRkVSX1NJWkUpCisjZGVmaW5lIE1JTl9BSV9ETUFfUklOR19DT1VOVCAoMHgxMDAwMCAvIERNQV9CVUZGRVJfU0laRSkKKyNkZWZpbmUgQU9fRE1BX1JJTkdfQ09VTlQgKDB4MTAwMDAgLyBETUFfQlVGRkVSX1NJWkUpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhaV9kbWFfcmluZ19jb3VudChzdHJ1Y3QgcGNpZGFzNjRfYm9hcmQgKiBib2FyZCkKK3sKKwlpZiAoYm9hcmQtPmxheW91dCA9PSBMQVlPVVRfNDAyMCkKKwkJcmV0dXJuIE1BWF9BSV9ETUFfUklOR19DT1VOVDsKKwllbHNlCisJCXJldHVybiBNSU5fQUlfRE1BX1JJTkdfQ09VTlQ7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQgYnl0ZXNfaW5fc2FtcGxlID0gMjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lkYXM2NF9ib2FyZCBwY2lkYXM2NF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2NDAyLzE2IiwKKwkgICAgICBkZXZpY2VfaWQ6MHgxZCwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzY0eHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzY0eHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0MDIvMTIiLAkvLyBYWFggY2hlY2sKKwkgICAgICBkZXZpY2VfaWQ6MHgxZSwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzY0eHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzY0eHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0L20xLzE2IiwKKwkgICAgICBkZXZpY2VfaWQ6MHgzNSwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzY0eHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzY0eHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0L20yLzE2IiwKKwkgICAgICBkZXZpY2VfaWQ6MHgzNiwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDo1MDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzY0WFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182NHh4LAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZhb19yYW5nZXNfNjR4eCwKKwkgICAgICBhb19yYW5nZV9jb2RlOmFvX3JhbmdlX2NvZGVfNjR4eCwKKwkgICAgICBhaV9maWZvOgkmYWlfZmlmb182NHh4LAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjQvbTMvMTYiLAorCSAgICAgIGRldmljZV9pZDoweDM3LAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjMzMywKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjRYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzY0eHgsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182NHh4LAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82NHh4LAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzY0eHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJCS5uYW1lID0gInBjaS1kYXM2MDEzIiwKKwkJLmRldmljZV9pZCA9IDB4NzgsCisJCS5haV9zZV9jaGFucyA9IDE2LAorCQkuYWlfYml0cyA9IDE2LAorCQkuYWlfc3BlZWQgPSA1MDAwLAorCQkuYW9fbmNoYW4gPSAwLAorCQkuYW9fYml0cyA9IDE2LAorCQkubGF5b3V0ID0gTEFZT1VUXzYwWFgsCisJCS5haV9yYW5nZV90YWJsZSA9ICZhaV9yYW5nZXNfNjB4eCwKKwkJLmFvX3JhbmdlX3RhYmxlID0gJmFvX3Jhbmdlc182MHh4LAorCQkuYW9fcmFuZ2VfY29kZSA9IGFvX3JhbmdlX2NvZGVfNjB4eCwKKwkJLmFpX2ZpZm8gPSAmYWlfZmlmb182MHh4LAorCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMTQiLAorCSAgICAgIGRldmljZV9pZDoweDc5LAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjB4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYweHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMjMiLAorCSAgICAgIGRldmljZV9pZDoweDVkLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MCwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjB4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYweHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMjUiLAorCSAgICAgIGRldmljZV9pZDoweDVlLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxMiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjB4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYweHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzAiLAorCSAgICAgIGRldmljZV9pZDoweDVmLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjAzMCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYwMzAsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYwMzAsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzEiLAorCSAgICAgIGRldmljZV9pZDoweDYwLAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjAzMCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYwMzAsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYwMzAsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzIiLAorCSAgICAgIGRldmljZV9pZDoweDYxLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFvX25jaGFuOjAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYwMzAsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzMiLAorCSAgICAgIGRldmljZV9pZDoweDYyLAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFvX25jaGFuOjAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYwMzAsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzQiLAorCSAgICAgIGRldmljZV9pZDoweDYzLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MCwKKwkgICAgICBhb19zY2FuX3NwZWVkOjAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYweHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzUiLAorCSAgICAgIGRldmljZV9pZDoweDY0LAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxMiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjB4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYweHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwMzYiLAorCSAgICAgIGRldmljZV9pZDoweDZmLAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82MFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjB4eCwKKwkgICAgICBhb19yYW5nZV90YWJsZTomYW9fcmFuZ2VzXzYweHgsCisJICAgICAgYW9fcmFuZ2VfY29kZTphb19yYW5nZV9jb2RlXzYweHgsCisJICAgICAgYWlfZmlmbzoJJmFpX2ZpZm9fNjB4eCwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczYwNDAiLAorCSAgICAgIGRldmljZV9pZDoweDY1LAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGFpX3NwZWVkOjIwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19iaXRzOgkxMiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjBYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzYwNTIsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc182MDMwLAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV82MDMwLAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzYweHgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2MDUyIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg2NiwKKwkgICAgICBhaV9zZV9jaGFuczoxNiwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDozMzMzLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgYW9fc2Nhbl9zcGVlZDozMzMzLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzYwWFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182MDUyLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZhb19yYW5nZXNfNjAzMCwKKwkgICAgICBhb19yYW5nZV9jb2RlOmFvX3JhbmdlX2NvZGVfNjAzMCwKKwkgICAgICBhaV9maWZvOgkmYWlfZmlmb182MHh4LAorCSAgICAgIGhhc184MjU1OjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjA3MCIsCisJICAgICAgZGV2aWNlX2lkOjB4NjcsCisJICAgICAgYWlfc2VfY2hhbnM6MTYsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6ODAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzYwWFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182MDUyLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZhb19yYW5nZXNfNjAzMCwKKwkgICAgICBhb19yYW5nZV9jb2RlOmFvX3JhbmdlX2NvZGVfNjAzMCwKKwkgICAgICBhaV9maWZvOgkmYWlfZmlmb182MHh4LAorCSAgICAgIGhhc184MjU1OjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjA3MSIsCisJICAgICAgZGV2aWNlX2lkOjB4NjgsCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTIsCisJICAgICAgYWlfc3BlZWQ6ODAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzYwWFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182MDUyLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZhb19yYW5nZXNfNjAzMCwKKwkgICAgICBhb19yYW5nZV9jb2RlOmFvX3JhbmdlX2NvZGVfNjAzMCwKKwkgICAgICBhaV9maWZvOgkmYWlfZmlmb182MHh4LAorCSAgICAgIGhhc184MjU1OjAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNDAyMC8xMiIsCisJICAgICAgZGV2aWNlX2lkOjB4NTIsCisJICAgICAgYWlfc2VfY2hhbnM6NCwKKwkgICAgICBhaV9iaXRzOgkxMiwKKwkgICAgICBhaV9zcGVlZDo1MCwKKwkgICAgICBhb19iaXRzOgkxMiwKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MCwJLy8gbm8gaGFyZHdhcmUgcGFjaW5nIG9uIGFvCisJICAgICAgbGF5b3V0OglMQVlPVVRfNDAyMCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzQwMjAsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JmFvX3Jhbmdlc180MDIwLAorCSAgICAgIGFvX3JhbmdlX2NvZGU6YW9fcmFuZ2VfY29kZV80MDIwLAorCSAgICAgIGFpX2ZpZm86CSZhaV9maWZvXzQwMjAsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKyNpZiAwCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjQwMi8xNi9qciIsCisJICAgICAgZGV2aWNlX2lkOjAJLy8gWFhYLAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3NwZWVkOjUwMDAsCisJICAgICAgYW9fbmNoYW46MCwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzY0WFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182NHh4LAorCSAgICAgIGFpX2ZpZm86CWFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0L20xLzE2L2pyIiwKKwkgICAgICBkZXZpY2VfaWQ6MAkvLyBYWFgsCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYWlfc3BlZWQ6MTAwMCwKKwkgICAgICBhb19uY2hhbjowLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjRYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzY0eHgsCisJICAgICAgYWlfZmlmbzoJYWlfZmlmb182NHh4LAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY2ktZGFzNjQvbTIvMTYvanIiLAorCSAgICAgIGRldmljZV9pZDowCS8vIFhYWCwKKwkgICAgICBhaV9zZV9jaGFuczo2NCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDo1MDAsCisJICAgICAgYW9fbmNoYW46MCwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzY0WFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182NHh4LAorCSAgICAgIGFpX2ZpZm86CWFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0L20zLzE2L2pyIiwKKwkgICAgICBkZXZpY2VfaWQ6MAkvLyBYWFgsCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTYsCisJICAgICAgYWlfc3BlZWQ6MzMzLAorCSAgICAgIGFvX25jaGFuOjAsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhaV9maWZvOglhaV9maWZvXzY0eHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2NC9tMS8xNCIsCisJICAgICAgZGV2aWNlX2lkOjAsCS8vIFhYWAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE0LAorCSAgICAgIGFpX3NwZWVkOjEwMDAsCisJICAgICAgYW9fbmNoYW46MiwKKwkgICAgICBhb19zY2FuX3NwZWVkOjEwMDAwLAorCSAgICAgIGxheW91dDoJTEFZT1VUXzY0WFgsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JmFpX3Jhbmdlc182NHh4LAorCSAgICAgIGFpX2ZpZm86CWFpX2ZpZm9fNjR4eCwKKwkgICAgICBoYXNfODI1NToxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNpLWRhczY0L20yLzE0IiwKKwkgICAgICBkZXZpY2VfaWQ6MCwJLy8gWFhYCisJICAgICAgYWlfc2VfY2hhbnM6NjQsCisJICAgICAgYWlfYml0czoJMTQsCisJICAgICAgYWlfc3BlZWQ6NTAwLAorCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fc2Nhbl9zcGVlZDoxMDAwMCwKKwkgICAgICBsYXlvdXQ6CUxBWU9VVF82NFhYLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZhaV9yYW5nZXNfNjR4eCwKKwkgICAgICBhaV9maWZvOglhaV9maWZvXzY0eHgsCisJICAgICAgaGFzXzgyNTU6MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kYXM2NC9tMy8xNCIsCisJICAgICAgZGV2aWNlX2lkOjAsCS8vIFhYWAorCSAgICAgIGFpX3NlX2NoYW5zOjY0LAorCSAgICAgIGFpX2JpdHM6CTE0LAorCSAgICAgIGFpX3NwZWVkOjMzMywKKwkgICAgICBhb19uY2hhbjoyLAorCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJICAgICAgbGF5b3V0OglMQVlPVVRfNjRYWCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomYWlfcmFuZ2VzXzY0eHgsCisJICAgICAgYWlfZmlmbzoJYWlfZmlmb182NHh4LAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCisjZW5kaWYKK307CisKKy8vIE51bWJlciBvZiBib2FyZHMgaW4gY2JfcGNpZGFzX2JvYXJkcworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnVtX2JvYXJkcyh2b2lkKQoreworCXJldHVybiBzaXplb2YocGNpZGFzNjRfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgcGNpZGFzNjRfYm9hcmQpOworfQorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpZGFzNjRfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDFkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDFlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDM1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDM2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDVkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDVlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDVmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDYzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDY0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDY2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDY3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDY4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDZmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDc4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgMHgwMDc5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lkYXM2NF9wY2lfdGFibGUpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY2lkYXM2NF9ib2FyZCAqYm9hcmQoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIChzdHJ1Y3QgcGNpZGFzNjRfYm9hcmQgKikgZGV2LT5ib2FyZF9wdHI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgc2VfZGlmZl9iaXRfNnh4eChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlpbnQgdXNlX2RpZmZlcmVudGlhbCkKK3sKKwlpZiAoKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNjRYWCAmJiAhdXNlX2RpZmZlcmVudGlhbCkgfHwKKwkJKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNjBYWCAmJiB1c2VfZGlmZmVyZW50aWFsKSkKKwkJcmV0dXJuIEFEQ19TRV9ESUZGX0JJVDsKKwllbHNlCisJCXJldHVybiAwOworfTsKKworc3RydWN0IGV4dF9jbG9ja19pbmZvIHsKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjsJLy8gbWFzdGVyIGNsb2NrIGRpdmlzb3IgdG8gdXNlIGZvciBzY2FucyB3aXRoIGV4dGVybmFsIG1hc3RlciBjbG9jaworCXVuc2lnbmVkIGludCBjaGFuc3BlYzsJLy8gY2hhbnNwZWMgZm9yIG1hc3RlciBjbG9jayBpbnB1dCB3aGVuIHVzZWQgYXMgc2NhbiBiZWdpbiBzcmMKK307CisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gKi8KK3N0cnVjdCBwY2lkYXM2NF9wcml2YXRlIHsKKworCXN0cnVjdCBwY2lfZGV2ICpod19kZXY7CS8vIHBvaW50ZXIgdG8gYm9hcmQncyBwY2lfZGV2IHN0cnVjdAorCS8vIGJhc2UgYWRkcmVzc2VzIChwaHlzaWNhbCkKKwlyZXNvdXJjZV9zaXplX3QgcGx4OTA4MF9waHlzX2lvYmFzZTsKKwlyZXNvdXJjZV9zaXplX3QgbWFpbl9waHlzX2lvYmFzZTsKKwlyZXNvdXJjZV9zaXplX3QgZGlvX2NvdW50ZXJfcGh5c19pb2Jhc2U7CisJLy8gYmFzZSBhZGRyZXNzZXMgKGlvcmVtYXBwZWQpCisJdm9pZCAqcGx4OTA4MF9pb2Jhc2U7CisJdm9pZCAqbWFpbl9pb2Jhc2U7CisJdm9pZCAqZGlvX2NvdW50ZXJfaW9iYXNlOworCS8vIGxvY2FsIGFkZHJlc3MgKHVzZWQgYnkgZG1hIGNvbnRyb2xsZXIpCisJdWludDMyX3QgbG9jYWwwX2lvYmFzZTsKKwl1aW50MzJfdCBsb2NhbDFfaW9iYXNlOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBhaV9jb3VudDsJLy8gbnVtYmVyIG9mIGFuYWxvZyBpbnB1dCBzYW1wbGVzIHJlbWFpbmluZworCXVpbnQxNl90ICphaV9idWZmZXJbTUFYX0FJX0RNQV9SSU5HX0NPVU5UXTsJLy8gZG1hIGJ1ZmZlcnMgZm9yIGFuYWxvZyBpbnB1dAorCWRtYV9hZGRyX3QgYWlfYnVmZmVyX2J1c19hZGRyW01BWF9BSV9ETUFfUklOR19DT1VOVF07CS8vIHBoeXNpY2FsIGFkZHJlc3NlcyBvZiBhaSBkbWEgYnVmZmVycworCXN0cnVjdCBwbHhfZG1hX2Rlc2MgKmFpX2RtYV9kZXNjOwkvLyBhcnJheSBvZiBhaSBkbWEgZGVzY3JpcHRvcnMgcmVhZCBieSBwbHg5MDgwLCBhbGxvY2F0ZWQgdG8gZ2V0IHByb3BlciBhbGlnbm1lbnQKKwlkbWFfYWRkcl90IGFpX2RtYV9kZXNjX2J1c19hZGRyOwkvLyBwaHlzaWNhbCBhZGRyZXNzIG9mIGFpIGRtYSBkZXNjcmlwdG9yIGFycmF5CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGFpX2RtYV9pbmRleDsJLy8gaW5kZXggb2YgdGhlIGFpIGRtYSBkZXNjcmlwdG9yL2J1ZmZlciB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyB1c2VkCisJdWludDE2X3QgKmFvX2J1ZmZlcltBT19ETUFfUklOR19DT1VOVF07CS8vIGRtYSBidWZmZXJzIGZvciBhbmFsb2cgb3V0cHV0CisJZG1hX2FkZHJfdCBhb19idWZmZXJfYnVzX2FkZHJbQU9fRE1BX1JJTkdfQ09VTlRdOwkvLyBwaHlzaWNhbCBhZGRyZXNzZXMgb2YgYW8gZG1hIGJ1ZmZlcnMKKwlzdHJ1Y3QgcGx4X2RtYV9kZXNjICphb19kbWFfZGVzYzsKKwlkbWFfYWRkcl90IGFvX2RtYV9kZXNjX2J1c19hZGRyOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBhb19kbWFfaW5kZXg7CS8vIGtlZXBzIHRyYWNrIG9mIGJ1ZmZlciB3aGVyZSB0aGUgbmV4dCBhbyBzYW1wbGUgc2hvdWxkIGdvCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBhb19jb3VudDsJLy8gbnVtYmVyIG9mIGFuYWxvZyBvdXRwdXQgc2FtcGxlcyByZW1haW5pbmcKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYW9fdmFsdWVbMl07CS8vIHJlbWVtYmVyIHdoYXQgdGhlIGFuYWxvZyBvdXRwdXRzIGFyZSBzZXQgdG8sIHRvIGFsbG93IHJlYWRiYWNrCisJdW5zaWduZWQgaW50IGh3X3JldmlzaW9uOwkvLyBzdGMgY2hpcCBoYXJkd2FyZSByZXZpc2lvbiBudW1iZXIKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgaW50cl9lbmFibGVfYml0czsJLy8gbGFzdCBiaXRzIHNlbnQgdG8gSU5UUl9FTkFCTEVfUkVHIHJlZ2lzdGVyCisJdm9sYXRpbGUgdWludDE2X3QgYWRjX2NvbnRyb2wxX2JpdHM7CS8vIGxhc3QgYml0cyBzZW50IHRvIEFEQ19DT05UUk9MMV9SRUcgcmVnaXN0ZXIKKwl2b2xhdGlsZSB1aW50MTZfdCBmaWZvX3NpemVfYml0czsJLy8gbGFzdCBiaXRzIHNlbnQgdG8gRklGT19TSVpFX1JFRyByZWdpc3RlcgorCXZvbGF0aWxlIHVpbnQxNl90IGh3X2NvbmZpZ19iaXRzOwkvLyBsYXN0IGJpdHMgc2VudCB0byBIV19DT05GSUdfUkVHIHJlZ2lzdGVyCisJdm9sYXRpbGUgdWludDE2X3QgZGFjX2NvbnRyb2wxX2JpdHM7CisJdm9sYXRpbGUgdWludDMyX3QgcGx4X2NvbnRyb2xfYml0czsJLy8gbGFzdCBiaXRzIHdyaXR0ZW4gdG8gcGx4OTA4MCBjb250cm9sIHJlZ2lzdGVyCisJdm9sYXRpbGUgdWludDMyX3QgcGx4X2ludGNzcl9iaXRzOwkvLyBsYXN0IGJpdHMgd3JpdHRlbiB0byBwbHggaW50ZXJydXB0IGNvbnRyb2wgYW5kIHN0YXR1cyByZWdpc3RlcgorCXZvbGF0aWxlIGludCBjYWxpYnJhdGlvbl9zb3VyY2U7CS8vIGluZGV4IG9mIGNhbGlicmF0aW9uIHNvdXJjZSByZWFkYWJsZSB0aHJvdWdoIGFpIGNoMAorCXZvbGF0aWxlIHVpbnQ4X3QgaTJjX2NhbF9yYW5nZV9iaXRzOwkvLyBiaXRzIHdyaXR0ZW4gdG8gaTJjIGNhbGlicmF0aW9uL3JhbmdlIHJlZ2lzdGVyCisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGV4dF90cmlnX2ZhbGxpbmc7CS8vIGNvbmZpZ3VyZSBkaWdpdGFsIHRyaWdnZXJzIHRvIHRyaWdnZXIgb24gZmFsbGluZyBlZGdlCisJLy8gc3RhdGVzIG9mIHZhcmlvdXMgZGV2aWNlcyBzdG9yZWQgdG8gZW5hYmxlIHJlYWQtYmFjaworCXVuc2lnbmVkIGludCBhZDg0MDJfc3RhdGVbMl07CisJdW5zaWduZWQgaW50IGNhbGRhY19zdGF0ZVs4XTsKKwl2b2xhdGlsZSBzaG9ydCBhaV9jbWRfcnVubmluZzsKKwl1bnNpZ25lZCBpbnQgYWlfZmlmb19zZWdtZW50X2xlbmd0aDsKKwlzdHJ1Y3QgZXh0X2Nsb2NrX2luZm8gZXh0X2Nsb2NrOworCXNob3J0IGFvX2JvdW5jZV9idWZmZXJbREFDX0ZJRk9fU0laRV07Cit9OworCisKKy8qIGlubGluZSBmdW5jdGlvbiB0aGF0IG1ha2VzIGl0IGVhc2llciB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGNpZGFzNjRfcHJpdmF0ZSAqcHJpdihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlyZXR1cm4gZGV2LT5wcml2YXRlOworfQorCisvKgorICogVGhlIGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IGF0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2NiX3BjaWRhcyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJjYl9wY2lkYXM2NCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6YXR0YWNoLAorICAgICAgZGV0YWNoOmRldGFjaCwKK307CisKK3N0YXRpYyBpbnQgYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYWlfY29uZmlnX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYW9fcmVhZGJhY2tfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBhaV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGFpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IGFvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgYW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXYsCisJdW5zaWduZWQgaW50IHRyaWdfbnVtKTsKK3N0YXRpYyBpbnQgYW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIGludCBhaV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGFvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZGlvX2NhbGxiYWNrKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIGludCBkaW9fY2FsbGJhY2tfNDAyMChpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyBpbnQgZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGlvXzYweHhfY29uZmlnX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGlvXzYweHhfd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgY2FsaWJfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNhbGliX3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYWQ4NDAyX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIHZvaWQgYWQ4NDAyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpOworc3RhdGljIGludCBhZDg0MDJfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBlZXByb21fcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgdm9pZCBjaGVja19hZGNfdGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9kaXZpc29yKHVuc2lnbmVkIGludCBucywgdW5zaWduZWQgaW50IGZsYWdzKTsKK3N0YXRpYyB2b2lkIGkyY193cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGFkZHJlc3MsCisJY29uc3QgdWludDhfdCAqIGRhdGEsIHVuc2lnbmVkIGludCBsZW5ndGgpOworc3RhdGljIHZvaWQgY2FsZGFjX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpOworc3RhdGljIGludCBjYWxkYWNfODgwMF93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGFkZHJlc3MsCisJdWludDhfdCB2YWx1ZSk7CisvL3N0YXRpYyBpbnQgZGFjXzE1OTBfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGRhY19hLCB1bnNpZ25lZCBpbnQgZGFjX2IpOworc3RhdGljIGludCBjYWxkYWNfaTJjX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2FsZGFjX2NoYW5uZWwsCisJdW5zaWduZWQgaW50IHZhbHVlKTsKK3N0YXRpYyB2b2lkIGFib3J0X2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpOworc3RhdGljIHZvaWQgZGlzYWJsZV9wbHhfaW50ZXJydXB0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHNldF9haV9maWZvX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBudW1fc2FtcGxlcyk7CitzdGF0aWMgdW5zaWduZWQgaW50IGFpX2ZpZm9fc2l6ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHNldF9haV9maWZvX3NlZ21lbnRfbGVuZ3RoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBudW1fZW50cmllcyk7CitzdGF0aWMgdm9pZCBkaXNhYmxlX2FpX3BhY2luZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBkaXNhYmxlX2FpX2ludGVycnVwdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHZvaWQgZW5hYmxlX2FpX2ludGVycnVwdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2FvX2Rpdmlzb3IodW5zaWduZWQgaW50IG5zLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworc3RhdGljIHZvaWQgbG9hZF9hb19kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKTsKKworQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfY2JfcGNpZGFzLCBwY2lkYXM2NF9wY2lfdGFibGUpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGFpX3JhbmdlX2JpdHNfNnh4eChjb25zdCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgcmFuZ2VfaW5kZXgpCit7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9rcmFuZ2UgKnJhbmdlID0KKwkJJmJvYXJkKGRldiktPmFpX3JhbmdlX3RhYmxlLT5yYW5nZVtyYW5nZV9pbmRleF07CisJdW5zaWduZWQgaW50IGJpdHMgPSAwOworCisJc3dpdGNoIChyYW5nZS0+bWF4KSB7CisJY2FzZSAxMDAwMDAwMDoKKwkJYml0cyA9IDB4MDAwOworCQlicmVhazsKKwljYXNlIDUwMDAwMDA6CisJCWJpdHMgPSAweDEwMDsKKwkJYnJlYWs7CisJY2FzZSAyMDAwMDAwOgorCWNhc2UgMjUwMDAwMDoKKwkJYml0cyA9IDB4MjAwOworCQlicmVhazsKKwljYXNlIDEwMDAwMDA6CisJY2FzZSAxMjUwMDAwOgorCQliaXRzID0gMHgzMDA7CisJCWJyZWFrOworCWNhc2UgNTAwMDAwOgorCQliaXRzID0gMHg0MDA7CisJCWJyZWFrOworCWNhc2UgMjAwMDAwOgorCWNhc2UgMjUwMDAwOgorCQliaXRzID0gMHg1MDA7CisJCWJyZWFrOworCWNhc2UgMTAwMDAwOgorCQliaXRzID0gMHg2MDA7CisJCWJyZWFrOworCWNhc2UgNTAwMDA6CisJCWJpdHMgPSAweDcwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyEgaW4gYWlfcmFuZ2VfYml0c182eHh4Iik7CisJCWJyZWFrOworCX0KKwlpZiAocmFuZ2UtPm1pbiA9PSAwKQorCQliaXRzICs9IDB4OTAwOworCXJldHVybiBiaXRzOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGh3X3JldmlzaW9uKGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVpbnQxNl90IGh3X3N0YXR1c19iaXRzKQoreworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApCisJCXJldHVybiAoaHdfc3RhdHVzX2JpdHMgPj4gMTMpICYgMHg3OworCisJcmV0dXJuIChod19zdGF0dXNfYml0cyA+PiAxMikgJiAweGY7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kYWNfcmFuZ2VfYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdm9sYXRpbGUgdWludDE2X3QgKiBiaXRzLAorCXVuc2lnbmVkIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgcmFuZ2UpCit7CisJdW5zaWduZWQgaW50IGNvZGUgPSBib2FyZChkZXYpLT5hb19yYW5nZV9jb2RlW3JhbmdlXTsKKworCWlmIChjaGFubmVsID4gMSkKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyEgYmFkIGNoYW5uZWw/Iik7CisJaWYgKGNvZGUgJiB+MHgzKQorCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISBiYWQgcmFuZ2UgY29kZT8iKTsKKworCSpiaXRzICY9IH4oMHgzIDw8ICgyICogY2hhbm5lbCkpOworCSpiaXRzIHw9IGNvZGUgPDwgKDIgKiBjaGFubmVsKTsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGFvX2NtZF9pc19zdXBwb3J0ZWQoY29uc3Qgc3RydWN0IHBjaWRhczY0X2JvYXJkICogYm9hcmQpCit7CisJcmV0dXJuIGJvYXJkLT5hb19uY2hhbiAmJiBib2FyZC0+bGF5b3V0ICE9IExBWU9VVF80MDIwOworfQorCisvLyBpbml0aWFsaXplIHBseDkwODAgY2hpcAorc3RhdGljIHZvaWQgaW5pdF9wbHg5MDgwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVpbnQzMl90IGJpdHM7CisJdm9pZCAqcGx4X2lvYmFzZSA9IHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2U7CisKKwlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgPQorCQlyZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0NPTlRST0xfUkVHKTsKKworCS8vIHBseDkwODAgZHVtcAorCURFQlVHX1BSSU5UKCIgcGx4IGludGVycnVwdCBzdGF0dXMgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9JTlRSQ1NfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggaWQgYml0cyAweCV4XG4iLCByZWFkbChwbHhfaW9iYXNlICsgUExYX0lEX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGNvbnRyb2wgcmVnIDB4JXhcbiIsIHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyk7CisJREVCVUdfUFJJTlQoIiBwbHggbW9kZS9hcmJpdHJhdGlvbiByZWcgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9NQVJCX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IHJlZ2lvbjAgcmVnIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfUkVHSU9OMF9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCByZWdpb24xIHJlZyAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX1JFR0lPTjFfUkVHKSk7CisKKwlERUJVR19QUklOVCgiIHBseCByZXZpc2lvbiAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX1JFVklTSU9OX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgbW9kZSAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfTU9ERV9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBkbWEgY2hhbm5lbCAxIG1vZGUgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUExX01PREVfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBwY2kgYWRkcmVzcyAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfUENJX0FERFJFU1NfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBsb2NhbCBhZGRyZXNzIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfRE1BMF9MT0NBTF9BRERSRVNTX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgdHJhbnNmZXIgc2l6ZSAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfVFJBTlNGRVJfU0laRV9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBkbWEgY2hhbm5lbCAwIGRlc2NyaXB0b3IgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX0RFU0NSSVBUT1JfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBjb21tYW5kIHN0YXR1cyAweCV4XG4iLAorCQlyZWFkYihwbHhfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCB0aHJlc2hvbGQgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX1RIUkVTSE9MRF9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBiaWdlbmQgMHgleFxuIiwgcmVhZGwocGx4X2lvYmFzZSArIFBMWF9CSUdFTkRfUkVHKSk7CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwliaXRzID0gQklHRU5EX0RNQTAgfCBCSUdFTkRfRE1BMTsKKyNlbHNlCisJYml0cyA9IDA7CisjZW5kaWYKKwl3cml0ZWwoYml0cywgcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9CSUdFTkRfUkVHKTsKKworCWRpc2FibGVfcGx4X2ludGVycnVwdHMoZGV2KTsKKworCWFib3J0X2RtYShkZXYsIDApOworCWFib3J0X2RtYShkZXYsIDEpOworCisJLy8gY29uZmlndXJlIGRtYTAgbW9kZQorCWJpdHMgPSAwOworCS8vIGVuYWJsZSByZWFkeSBpbnB1dCwgbm90IHN1cmUgaWYgdGhpcyBpcyBuZWNlc3NhcnkKKwliaXRzIHw9IFBMWF9ETUFfRU5fUkVBRFlJTl9CSVQ7CisJLy8gZW5hYmxlIGJ0ZXJtLCBub3Qgc3VyZSBpZiB0aGlzIGlzIG5lY2Vzc2FyeQorCWJpdHMgfD0gUExYX0VOX0JURVJNX0JJVDsKKwkvLyBlbmFibGUgZG1hIGNoYWluaW5nCisJYml0cyB8PSBQTFhfRU5fQ0hBSU5fQklUOworCS8vIGVuYWJsZSBpbnRlcnJ1cHQgb24gZG1hIGRvbmUgKHByb2JhYmx5IGRvbid0IG5lZWQgdGhpcywgc2luY2UgY2hhaW4gbmV2ZXIgZmluaXNoZXMpCisJYml0cyB8PSBQTFhfRU5fRE1BX0RPTkVfSU5UUl9CSVQ7CisJLy8gZG9uJ3QgaW5jcmVtZW50IGxvY2FsIGFkZHJlc3MgZHVyaW5nIHRyYW5zZmVycyAod2UgYXJlIHRyYW5zZmVycmluZyBmcm9tIGEgZml4ZWQgZmlmbyByZWdpc3RlcikKKwliaXRzIHw9IFBMWF9MT0NBTF9BRERSX0NPTlNUX0JJVDsKKwkvLyByb3V0ZSBkbWEgaW50ZXJydXB0IHRvIHBjaSBidXMKKwliaXRzIHw9IFBMWF9ETUFfSU5UUl9QQ0lfQklUOworCS8vIGVuYWJsZSBkZW1hbmQgbW9kZQorCWJpdHMgfD0gUExYX0RFTUFORF9NT0RFX0JJVDsKKwkvLyBlbmFibGUgbG9jYWwgYnVyc3QgbW9kZQorCWJpdHMgfD0gUExYX0RNQV9MT0NBTF9CVVJTVF9FTl9CSVQ7CisJLy8gNDAyMCB1c2VzIDMyIGJpdCBkbWEKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCWJpdHMgfD0gUExYX0xPQ0FMX0JVU18zMl9XSURFX0JJVFM7CisJfSBlbHNlIHsJCS8vIGxvY2Fsc3BhY2UwIGJ1cyBpcyAxNiBiaXRzIHdpZGUKKwkJYml0cyB8PSBQTFhfTE9DQUxfQlVTXzE2X1dJREVfQklUUzsKKwl9CisJd3JpdGVsKGJpdHMsIHBseF9pb2Jhc2UgKyBQTFhfRE1BMV9NT0RFX1JFRyk7CisJaWYgKGFvX2NtZF9pc19zdXBwb3J0ZWQoYm9hcmQoZGV2KSkpCisJCXdyaXRlbChiaXRzLCBwbHhfaW9iYXNlICsgUExYX0RNQTBfTU9ERV9SRUcpOworCisJLy8gZW5hYmxlIGludGVycnVwdHMgb24gcGx4IDkwODAKKwlwcml2KGRldiktPnBseF9pbnRjc3JfYml0cyB8PQorCQlJQ1NfQUVSUiB8IElDU19QRVJSIHwgSUNTX1BJRSB8IElDU19QTElFIHwgSUNTX1BBSUUgfCBJQ1NfTElFIHwKKwkJSUNTX0RNQTBfRSB8IElDU19ETUExX0U7CisJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2ludGNzcl9iaXRzLAorCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0lOVFJDU19SRUcpOworfQorCisvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuCisgKi8KK3N0YXRpYyBpbnQgc2V0dXBfc3ViZGV2aWNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl2b2lkICpkaW9fODI1NV9pb2Jhc2U7CisJaW50IGk7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEwKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0RJVEhFUiB8IFNERl9DTURfUkVBRDsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF82MFhYKQorCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NPTU1PTiB8IFNERl9ESUZGOworCWVsc2UgaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNjRYWCkKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9ESUZGOworCS8qIFhYWCBOdW1iZXIgb2YgaW5wdXRzIGluIGRpZmZlcmVudGlhbCBtb2RlIGlzIGlnbm9yZWQgKi8KKwlzLT5uX2NoYW4gPSBib2FyZChkZXYpLT5haV9zZV9jaGFuczsKKwlzLT5sZW5fY2hhbmxpc3QgPSAweDIwMDA7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IGJvYXJkKGRldiktPmFpX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IGJvYXJkKGRldiktPmFpX3JhbmdlX3RhYmxlOworCXMtPmluc25fcmVhZCA9IGFpX3JpbnNuOworCXMtPmluc25fY29uZmlnID0gYWlfY29uZmlnX2luc247CisJcy0+ZG9fY21kID0gYWlfY21kOworCXMtPmRvX2NtZHRlc3QgPSBhaV9jbWR0ZXN0OworCXMtPmNhbmNlbCA9IGFpX2NhbmNlbDsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCXVuc2lnbmVkIGludCBpOworCQl1aW50OF90IGRhdGE7CisJCS8vIHNldCBhZGMgdG8gcmVhZCBmcm9tIGlucHV0cyAobm90IGludGVybmFsIGNhbGlicmF0aW9uIHNvdXJjZXMpCisJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzID0gYWRjX3NyY180MDIwX2JpdHMoNCk7CisJCS8vIHNldCBjaGFubmVscyB0byArLTUgdm9sdCBpbnB1dCByYW5nZXMKKwkJZm9yIChpID0gMDsgaSA8IHMtPm5fY2hhbjsgaSsrKQorCQkJcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHMgfD0gYXR0ZW51YXRlX2JpdChpKTsKKwkJZGF0YSA9IHByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzOworCQlpMmNfd3JpdGUoZGV2LCBSQU5HRV9DQUxfSTJDX0FERFIsICZkYXRhLCBzaXplb2YoZGF0YSkpOworCX0KKworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJaWYgKGJvYXJkKGRldiktPmFvX25jaGFuKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCVNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQgfAorCQkJU0RGX0NNRF9XUklURTsKKwkJcy0+bl9jaGFuID0gYm9hcmQoZGV2KS0+YW9fbmNoYW47CisJCXMtPm1heGRhdGEgPSAoMSA8PCBib2FyZChkZXYpLT5hb19iaXRzKSAtIDE7CisJCXMtPnJhbmdlX3RhYmxlID0gYm9hcmQoZGV2KS0+YW9fcmFuZ2VfdGFibGU7CisJCXMtPmluc25fcmVhZCA9IGFvX3JlYWRiYWNrX2luc247CisJCXMtPmluc25fd3JpdGUgPSBhb193aW5zbjsKKwkJaWYgKGFvX2NtZF9pc19zdXBwb3J0ZWQoYm9hcmQoZGV2KSkpIHsKKwkJCWRldi0+d3JpdGVfc3ViZGV2ID0gczsKKwkJCXMtPmRvX2NtZHRlc3QgPSBhb19jbWR0ZXN0OworCQkJcy0+ZG9fY21kID0gYW9fY21kOworCQkJcy0+bGVuX2NoYW5saXN0ID0gYm9hcmQoZGV2KS0+YW9fbmNoYW47CisJCQlzLT5jYW5jZWwgPSBhb19jYW5jZWw7CisJCX0KKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCS8vIGRpZ2l0YWwgaW5wdXQKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF82NFhYKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSA0OworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gZGlfcmJpdHM7CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvLyBkaWdpdGFsIG91dHB1dAorCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzY0WFgpIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSA0OworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gZG9fd2JpdHM7CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvKiA4MjU1ICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDQ7CisJaWYgKGJvYXJkKGRldiktPmhhc184MjU1KSB7CisJCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJCWRpb184MjU1X2lvYmFzZSA9CisJCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEk4MjU1XzQwMjBfUkVHOworCQkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIGRpb19jYWxsYmFja180MDIwLAorCQkJCSh1bnNpZ25lZCBsb25nKWRpb184MjU1X2lvYmFzZSk7CisJCX0gZWxzZSB7CisJCQlkaW9fODI1NV9pb2Jhc2UgPQorCQkJCXByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlICsgRElPXzgyNTVfT0ZGU0VUOworCQkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIGRpb19jYWxsYmFjaywKKwkJCQkodW5zaWduZWQgbG9uZylkaW9fODI1NV9pb2Jhc2UpOworCQl9CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvLyA4IGNoYW5uZWwgZGlvIGZvciA2MHh4CisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDU7CisJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNjBYWCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfUkVBREFCTEU7CisJCXMtPm5fY2hhbiA9IDg7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2NvbmZpZyA9IGRpb182MHh4X2NvbmZpZ19pbnNuOworCQlzLT5pbnNuX2JpdHMgPSBkaW9fNjB4eF93Yml0czsKKwl9IGVsc2UKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKworCS8vIGNhbGRhYworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA2OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DQUxJQjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfSU5URVJOQUw7CisJcy0+bl9jaGFuID0gODsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKQorCQlzLT5tYXhkYXRhID0gMHhmZmY7CisJZWxzZQorCQlzLT5tYXhkYXRhID0gMHhmZjsKKwlzLT5pbnNuX3JlYWQgPSBjYWxpYl9yZWFkX2luc247CisJcy0+aW5zbl93cml0ZSA9IGNhbGliX3dyaXRlX2luc247CisJZm9yIChpID0gMDsgaSA8IHMtPm5fY2hhbjsgaSsrKQorCQljYWxkYWNfd3JpdGUoZGV2LCBpLCBzLT5tYXhkYXRhIC8gMik7CisKKwkvLyAyIGNoYW5uZWwgYWQ4NDAyIHBvdGVudGlvbWV0ZXIKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNzsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF82NFhYKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DQUxJQjsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0lOVEVSTkFMOworCQlzLT5uX2NoYW4gPSAyOworCQlzLT5pbnNuX3JlYWQgPSBhZDg0MDJfcmVhZF9pbnNuOworCQlzLT5pbnNuX3dyaXRlID0gYWQ4NDAyX3dyaXRlX2luc247CisJCXMtPm1heGRhdGEgPSAweGZmOworCQlmb3IgKGkgPSAwOyBpIDwgcy0+bl9jaGFuOyBpKyspCisJCQlhZDg0MDJfd3JpdGUoZGV2LCBpLCBzLT5tYXhkYXRhIC8gMik7CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvL3NlcmlhbCBFRVBST00sIGlmIHByZXNlbnQKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgODsKKwlpZiAocmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9DT05UUk9MX1JFRykgJiBDVExfRUVDSEspIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX01FTU9SWTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0lOVEVSTkFMOworCQlzLT5uX2NoYW4gPSAxMjg7CisJCXMtPm1heGRhdGEgPSAweGZmZmY7CisJCXMtPmluc25fcmVhZCA9IGVlcHJvbV9yZWFkX2luc247CisJfSBlbHNlCisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisKKwkvLyB1c2VyIGNvdW50ZXIgc3ViZCBYWFgKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgOTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfcGx4X2ludGVycnVwdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpdihkZXYpLT5wbHhfaW50Y3NyX2JpdHMgPSAwOworCXdyaXRlbChwcml2KGRldiktPnBseF9pbnRjc3JfYml0cywKKwkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9JTlRSQ1NfUkVHKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9zdGNfcmVnaXN0ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVpbnQxNl90IGJpdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJLy8gYml0IHNob3VsZCBiZSBzZXQgZm9yIDYwMjUsIGFsdGhvdWdoIGRvY3Mgc2F5IGJvYXJkcyB3aXRoIDw9IDE2IGNoYW5zIHNob3VsZCBiZSBjbGVhcmVkIFhYWAorCWlmICgxKQorCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzIHw9IEFEQ19RVUVVRV9DT05GSUdfQklUOworCXdyaXRldyhwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzLAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0NPTlRST0wxX1JFRyk7CisKKwkvLyA2NDAyLzE2IG1hbnVhbCBzYXlzIHRoaXMgcmVnaXN0ZXIgbXVzdCBiZSBpbml0aWFsaXplZCB0byAweGZmPworCXdyaXRldygweGZmLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1NBTVBMRV9JTlRFUlZBTF9VUFBFUl9SRUcpOworCisJYml0cyA9IFNMT1dfREFDX0JJVCB8IERNQV9DSF9TRUxFQ1RfQklUOworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApCisJCWJpdHMgfD0gSU5URVJOQUxfQ0xPQ0tfNDAyMF9CSVRTOworCXByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMgfD0gYml0czsKKwl3cml0ZXcocHJpdihkZXYpLT5od19jb25maWdfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEhXX0NPTkZJR19SRUcpOworCisJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQVFfU1lOQ19SRUcpOworCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQ0FMSUJSQVRJT05fUkVHKTsKKworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBzZXQgZmlmb3MgdG8gbWF4aW11bSBzaXplCisJcHJpdihkZXYpLT5maWZvX3NpemVfYml0cyB8PSBEQUNfRklGT19CSVRTOworCXNldF9haV9maWZvX3NlZ21lbnRfbGVuZ3RoKGRldiwKKwkJYm9hcmQoZGV2KS0+YWlfZmlmby0+bWF4X3NlZ21lbnRfbGVuZ3RoKTsKKworCXByaXYoZGV2KS0+ZGFjX2NvbnRyb2wxX2JpdHMgPSBEQUNfT1VUUFVUX0VOQUJMRV9CSVQ7CisJcHJpdihkZXYpLT5pbnRyX2VuYWJsZV9iaXRzID0JLyogRU5fREFDX0lOVFJfU1JDX0JJVCB8IERBQ19JTlRSX1FFTVBUWV9CSVRTIHwgKi8KKwkJRU5fREFDX0RPTkVfSU5UUl9CSVQgfCBFTl9EQUNfVU5ERVJSVU5fQklUOworCXdyaXRldyhwcml2KGRldiktPmludHJfZW5hYmxlX2JpdHMsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBJTlRSX0VOQUJMRV9SRUcpOworCisJZGlzYWJsZV9haV9wYWNpbmcoZGV2KTsKK307CisKK2ludCBhbGxvY19hbmRfaW5pdF9kbWFfbWVtYmVycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKworCS8vIGFsb2NhdGUgcGNpIGRtYSBidWZmZXJzCisJZm9yIChpID0gMDsgaSA8IGFpX2RtYV9yaW5nX2NvdW50KGJvYXJkKGRldikpOyBpKyspIHsKKwkJcHJpdihkZXYpLT5haV9idWZmZXJbaV0gPQorCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsIERNQV9CVUZGRVJfU0laRSwKKwkJCSZwcml2KGRldiktPmFpX2J1ZmZlcl9idXNfYWRkcltpXSk7CisJCWlmIChwcml2KGRldiktPmFpX2J1ZmZlcltpXSA9PSBOVUxMKSB7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgQU9fRE1BX1JJTkdfQ09VTlQ7IGkrKykgeworCQlpZiAoYW9fY21kX2lzX3N1cHBvcnRlZChib2FyZChkZXYpKSkgeworCQkJcHJpdihkZXYpLT5hb19idWZmZXJbaV0gPQorCQkJCXBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LAorCQkJCURNQV9CVUZGRVJfU0laRSwKKwkJCQkmcHJpdihkZXYpLT5hb19idWZmZXJfYnVzX2FkZHJbaV0pOworCQkJaWYgKHByaXYoZGV2KS0+YW9fYnVmZmVyW2ldID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJfQorCX0KKwkvLyBhbGxvY2F0ZSBkbWEgZGVzY3JpcHRvcnMKKwlwcml2KGRldiktPmFpX2RtYV9kZXNjID0KKwkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCXNpemVvZihzdHJ1Y3QgcGx4X2RtYV9kZXNjKSAqIGFpX2RtYV9yaW5nX2NvdW50KGJvYXJkKGRldikpLAorCQkmcHJpdihkZXYpLT5haV9kbWFfZGVzY19idXNfYWRkcik7CisJaWYgKHByaXYoZGV2KS0+YWlfZG1hX2Rlc2MgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJREVCVUdfUFJJTlQoImFpIGRtYSBkZXNjcmlwdG9ycyBzdGFydCBhdCBidXMgYWRkciAweCV4XG4iLAorCQlwcml2KGRldiktPmFpX2RtYV9kZXNjX2J1c19hZGRyKTsKKwlpZiAoYW9fY21kX2lzX3N1cHBvcnRlZChib2FyZChkZXYpKSkgeworCQlwcml2KGRldiktPmFvX2RtYV9kZXNjID0KKwkJCXBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LAorCQkJc2l6ZW9mKHN0cnVjdCBwbHhfZG1hX2Rlc2MpICogQU9fRE1BX1JJTkdfQ09VTlQsCisJCQkmcHJpdihkZXYpLT5hb19kbWFfZGVzY19idXNfYWRkcik7CisJCWlmIChwcml2KGRldiktPmFvX2RtYV9kZXNjID09IE5VTEwpIHsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCURFQlVHX1BSSU5UKCJhbyBkbWEgZGVzY3JpcHRvcnMgc3RhcnQgYXQgYnVzIGFkZHIgMHgleFxuIiwKKwkJCXByaXYoZGV2KS0+YW9fZG1hX2Rlc2NfYnVzX2FkZHIpOworCX0KKwkvLyBpbml0aWFsaXplIGRtYSBkZXNjcmlwdG9ycworCWZvciAoaSA9IDA7IGkgPCBhaV9kbWFfcmluZ19jb3VudChib2FyZChkZXYpKTsgaSsrKSB7CisJCXByaXYoZGV2KS0+YWlfZG1hX2Rlc2NbaV0ucGNpX3N0YXJ0X2FkZHIgPQorCQkJY3B1X3RvX2xlMzIocHJpdihkZXYpLT5haV9idWZmZXJfYnVzX2FkZHJbaV0pOworCQlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKQorCQkJcHJpdihkZXYpLT5haV9kbWFfZGVzY1tpXS5sb2NhbF9zdGFydF9hZGRyID0KKwkJCQljcHVfdG9fbGUzMihwcml2KGRldiktPmxvY2FsMV9pb2Jhc2UgKworCQkJCUFEQ19GSUZPX1JFRyk7CisJCWVsc2UKKwkJCXByaXYoZGV2KS0+YWlfZG1hX2Rlc2NbaV0ubG9jYWxfc3RhcnRfYWRkciA9CisJCQkJY3B1X3RvX2xlMzIocHJpdihkZXYpLT5sb2NhbDBfaW9iYXNlICsKKwkJCQlBRENfRklGT19SRUcpOworCQlwcml2KGRldiktPmFpX2RtYV9kZXNjW2ldLnRyYW5zZmVyX3NpemUgPSBjcHVfdG9fbGUzMigwKTsKKwkJcHJpdihkZXYpLT5haV9kbWFfZGVzY1tpXS5uZXh0ID0KKwkJCWNwdV90b19sZTMyKChwcml2KGRldiktPmFpX2RtYV9kZXNjX2J1c19hZGRyICsgKChpICsKKwkJCQkJCTEpICUKKwkJCQkJYWlfZG1hX3JpbmdfY291bnQoYm9hcmQoZGV2KSkpICoKKwkJCQlzaXplb2YocHJpdihkZXYpLT4KKwkJCQkJYWlfZG1hX2Rlc2NbMF0pKSB8IFBMWF9ERVNDX0lOX1BDSV9CSVQgfAorCQkJUExYX0lOVFJfVEVSTV9DT1VOVCB8IFBMWF9YRkVSX0xPQ0FMX1RPX1BDSSk7CisJfQorCWlmIChhb19jbWRfaXNfc3VwcG9ydGVkKGJvYXJkKGRldikpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBT19ETUFfUklOR19DT1VOVDsgaSsrKSB7CisJCQlwcml2KGRldiktPmFvX2RtYV9kZXNjW2ldLnBjaV9zdGFydF9hZGRyID0KKwkJCQljcHVfdG9fbGUzMihwcml2KGRldiktPmFvX2J1ZmZlcl9idXNfYWRkcltpXSk7CisJCQlwcml2KGRldiktPmFvX2RtYV9kZXNjW2ldLmxvY2FsX3N0YXJ0X2FkZHIgPQorCQkJCWNwdV90b19sZTMyKHByaXYoZGV2KS0+bG9jYWwwX2lvYmFzZSArCisJCQkJREFDX0ZJRk9fUkVHKTsKKwkJCXByaXYoZGV2KS0+YW9fZG1hX2Rlc2NbaV0udHJhbnNmZXJfc2l6ZSA9CisJCQkJY3B1X3RvX2xlMzIoMCk7CisJCQlwcml2KGRldiktPmFvX2RtYV9kZXNjW2ldLm5leHQgPQorCQkJCWNwdV90b19sZTMyKChwcml2KGRldiktPmFvX2RtYV9kZXNjX2J1c19hZGRyICsKKwkJCQkJKChpICsgMSkgJSAoQU9fRE1BX1JJTkdfQ09VTlQpKSAqCisJCQkJCXNpemVvZihwcml2KGRldiktPgorCQkJCQkJYW9fZG1hX2Rlc2NbMF0pKSB8CisJCQkJUExYX0RFU0NfSU5fUENJX0JJVCB8IFBMWF9JTlRSX1RFUk1fQ09VTlQpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2Fybl9leHRlcm5hbF9xdWV1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwljb21lZGlfZXJyb3IoZGV2LAorCQkiQU8gY29tbWFuZCBhbmQgQUkgZXh0ZXJuYWwgY2hhbm5lbCBxdWV1ZSBjYW5ub3QgYmUgdXNlZCBzaW11bHRhbmVvdXNseS4iKTsKKwljb21lZGlfZXJyb3IoZGV2LAorCQkiVXNlIGludGVybmFsIEFJIGNoYW5uZWwgcXVldWUgKGNoYW5uZWxzIG11c3QgYmUgY29uc2VjdXRpdmUgYW5kIHVzZSBzYW1lIHJhbmdlL2FyZWYpIik7Cit9CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4KKyAqLworc3RhdGljIGludCBhdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJaW50IGluZGV4OworCXVpbnQzMl90IGxvY2FsX3JhbmdlLCBsb2NhbF9kZWNvZGU7CisJaW50IHJldHZhbDsKKworCXByaW50aygiY29tZWRpJWQ6IGNiX3BjaWRhczY0XG4iLCBkZXYtPm1pbm9yKTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaWRhczY0X3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisvKgorICogUHJvYmUgdGhlIGRldmljZSB0byBkZXRlcm1pbmUgd2hhdCBkZXZpY2UgaW4gdGhlIHNlcmllcyBpdCBpcy4KKyAqLworCisJZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpZGV2ICE9IE5VTEw7CisJCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwkJLy8gaXMgaXQgbm90IGEgY29tcHV0ZXIgYm9hcmRzIGNhcmQ/CisJCWlmIChwY2lkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTKQorCQkJY29udGludWU7CisJCS8vIGxvb3AgdGhyb3VnaCBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtX2JvYXJkcygpOyBpbmRleCsrKSB7CisJCQlpZiAocGNpZGFzNjRfYm9hcmRzW2luZGV4XS5kZXZpY2VfaWQgIT0gcGNpZGV2LT5kZXZpY2UpCisJCQkJY29udGludWU7CisJCQkvLyB3YXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8KKwkJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJCS8vIGFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/CisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gaXQtPm9wdGlvbnNbMF0gfHwKKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0KKwkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJcHJpdihkZXYpLT5od19kZXYgPSBwY2lkZXY7CisJCQlkZXYtPmJvYXJkX3B0ciA9IHBjaWRhczY0X2JvYXJkcyArIGluZGV4OworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGRldi0+Ym9hcmRfcHRyKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGRldi0+Ym9hcmRfcHRyID09IE5VTEwpIHsKKwkJcHJpbnRrKCJObyBzdXBwb3J0ZWQgQ29tcHV0ZXJCb2FyZHMvTWVhc3VyZW1lbnRDb21wdXRpbmcgY2FyZCBmb3VuZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXByaW50aygiRm91bmQgJXMgb24gYnVzICVpLCBzbG90ICVpXG4iLCBib2FyZChkZXYpLT5uYW1lLAorCQlwY2lkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSk7CisKKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCBkcml2ZXJfY2JfcGNpZGFzLmRyaXZlcl9uYW1lKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiIGZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXBjaV9zZXRfbWFzdGVyKHBjaWRldik7CisKKwkvL0luaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lCisJZGV2LT5ib2FyZF9uYW1lID0gYm9hcmQoZGV2KS0+bmFtZTsKKworCXByaXYoZGV2KS0+cGx4OTA4MF9waHlzX2lvYmFzZSA9CisJCXBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIFBMWDkwODBfQkFERFJJTkRFWCk7CisJcHJpdihkZXYpLT5tYWluX3BoeXNfaW9iYXNlID0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgTUFJTl9CQUREUklOREVYKTsKKwlwcml2KGRldiktPmRpb19jb3VudGVyX3BoeXNfaW9iYXNlID0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgRElPX0NPVU5URVJfQkFERFJJTkRFWCk7CisKKwkvLyByZW1hcCwgd29uJ3Qgd29yayB3aXRoIDIuMCBrZXJuZWxzIGJ1dCB3aG8gY2FyZXMKKwlwcml2KGRldiktPnBseDkwODBfaW9iYXNlID0gaW9yZW1hcChwcml2KGRldiktPnBseDkwODBfcGh5c19pb2Jhc2UsCisJCXBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCBQTFg5MDgwX0JBRERSSU5ERVgpKTsKKwlwcml2KGRldiktPm1haW5faW9iYXNlID0gaW9yZW1hcChwcml2KGRldiktPm1haW5fcGh5c19pb2Jhc2UsCisJCXBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCBNQUlOX0JBRERSSU5ERVgpKTsKKwlwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSA9CisJCWlvcmVtYXAocHJpdihkZXYpLT5kaW9fY291bnRlcl9waHlzX2lvYmFzZSwKKwkJcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIERJT19DT1VOVEVSX0JBRERSSU5ERVgpKTsKKworCWlmICghcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSB8fCAhcHJpdihkZXYpLT5tYWluX2lvYmFzZQorCQl8fCAhcHJpdihkZXYpLT5kaW9fY291bnRlcl9pb2Jhc2UpIHsKKwkJcHJpbnRrKCIgZmFpbGVkIHRvIHJlbWFwIGlvIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCURFQlVHX1BSSU5UKCIgcGx4OTA4MCByZW1hcHBlZCB0byAweCVwXG4iLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlKTsKKwlERUJVR19QUklOVCgiIG1haW4gcmVtYXBwZWQgdG8gMHglcFxuIiwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSk7CisJREVCVUdfUFJJTlQoIiBkaW9jb3VudGVyIHJlbWFwcGVkIHRvIDB4JXBcbiIsCisJCXByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlKTsKKworCS8vIGZpZ3VyZSBvdXQgd2hhdCBsb2NhbCBhZGRyZXNzZXMgYXJlCisJbG9jYWxfcmFuZ2UgPQorCQlyZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsKKwkJUExYX0xBUzBSTkdfUkVHKSAmIExSTkdfTUVNX01BU0s7CisJbG9jYWxfZGVjb2RlID0KKwkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArCisJCVBMWF9MQVMwTUFQX1JFRykgJiBsb2NhbF9yYW5nZSAmIExNQVBfTUVNX01BU0s7CisJcHJpdihkZXYpLT5sb2NhbDBfaW9iYXNlID0KKwkJKCh1aW50MzJfdCkgcHJpdihkZXYpLT4KKwkJbWFpbl9waHlzX2lvYmFzZSAmIH5sb2NhbF9yYW5nZSkgfCBsb2NhbF9kZWNvZGU7CisJbG9jYWxfcmFuZ2UgPQorCQlyZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsKKwkJUExYX0xBUzFSTkdfUkVHKSAmIExSTkdfTUVNX01BU0s7CisJbG9jYWxfZGVjb2RlID0KKwkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArCisJCVBMWF9MQVMxTUFQX1JFRykgJiBsb2NhbF9yYW5nZSAmIExNQVBfTUVNX01BU0s7CisJcHJpdihkZXYpLT5sb2NhbDFfaW9iYXNlID0KKwkJKCh1aW50MzJfdCkgcHJpdihkZXYpLT4KKwkJZGlvX2NvdW50ZXJfcGh5c19pb2Jhc2UgJiB+bG9jYWxfcmFuZ2UpIHwgbG9jYWxfZGVjb2RlOworCisJREVCVUdfUFJJTlQoIiBsb2NhbCAwIGlvIGFkZHIgMHgleFxuIiwgcHJpdihkZXYpLT5sb2NhbDBfaW9iYXNlKTsKKwlERUJVR19QUklOVCgiIGxvY2FsIDEgaW8gYWRkciAweCV4XG4iLCBwcml2KGRldiktPmxvY2FsMV9pb2Jhc2UpOworCisJcmV0dmFsID0gYWxsb2NfYW5kX2luaXRfZG1hX21lbWJlcnMoZGV2KTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXByaXYoZGV2KS0+aHdfcmV2aXNpb24gPQorCQlod19yZXZpc2lvbihkZXYsIHJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBIV19TVEFUVVNfUkVHKSk7CisJcHJpbnRrKCIgc3RjIGhhcmR3YXJlIHJldmlzaW9uICVpXG4iLCBwcml2KGRldiktPmh3X3JldmlzaW9uKTsKKwlpbml0X3BseDkwODAoZGV2KTsKKwlpbml0X3N0Y19yZWdpc3RlcnMoZGV2KTsKKwkvLyBnZXQgaXJxCisJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShwY2lkZXYtPmlycSwgaGFuZGxlX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQkiY2JfcGNpZGFzNjQiLCBkZXYpKSB7CisJCXByaW50aygiIHVuYWJsZSB0byBhbGxvY2F0ZSBpcnEgJXVcbiIsIHBjaWRldi0+aXJxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldi0+aXJxID0gcGNpZGV2LT5pcnE7CisJcHJpbnRrKCIgaXJxICV1XG4iLCBkZXYtPmlycSk7CisKKwlyZXR2YWwgPSBzZXR1cF9zdWJkZXZpY2VzKGRldik7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBkZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlwcmludGsoImNvbWVkaSVkOiBjYl9wY2lkYXM6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAocHJpdihkZXYpKSB7CisJCWlmIChwcml2KGRldiktPmh3X2RldikgeworCQkJaWYgKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UpIHsKKwkJCQlkaXNhYmxlX3BseF9pbnRlcnJ1cHRzKGRldik7CisJCQkJaW91bm1hcCgodm9pZCAqKXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UpOworCQkJfQorCQkJaWYgKHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UpCisJCQkJaW91bm1hcCgodm9pZCAqKXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UpOworCQkJaWYgKHByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlKQorCQkJCWlvdW5tYXAoKHZvaWQgKilwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSk7CisJCQkvLyBmcmVlIHBjaSBkbWEgYnVmZmVycworCQkJZm9yIChpID0gMDsgaSA8IGFpX2RtYV9yaW5nX2NvdW50KGJvYXJkKGRldikpOyBpKyspIHsKKwkJCQlpZiAocHJpdihkZXYpLT5haV9idWZmZXJbaV0pCisJCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCQkJCQlETUFfQlVGRkVSX1NJWkUsCisJCQkJCQlwcml2KGRldiktPmFpX2J1ZmZlcltpXSwKKwkJCQkJCXByaXYoZGV2KS0+CisJCQkJCQlhaV9idWZmZXJfYnVzX2FkZHJbaV0pOworCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IEFPX0RNQV9SSU5HX0NPVU5UOyBpKyspIHsKKwkJCQlpZiAocHJpdihkZXYpLT5hb19idWZmZXJbaV0pCisJCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCQkJCQlETUFfQlVGRkVSX1NJWkUsCisJCQkJCQlwcml2KGRldiktPmFvX2J1ZmZlcltpXSwKKwkJCQkJCXByaXYoZGV2KS0+CisJCQkJCQlhb19idWZmZXJfYnVzX2FkZHJbaV0pOworCQkJfQorCQkJLy8gZnJlZSBkbWEgZGVzY3JpcHRvcnMKKwkJCWlmIChwcml2KGRldiktPmFpX2RtYV9kZXNjKQorCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCQkJCXNpemVvZihzdHJ1Y3QgcGx4X2RtYV9kZXNjKSAqCisJCQkJCWFpX2RtYV9yaW5nX2NvdW50KGJvYXJkKGRldikpLAorCQkJCQlwcml2KGRldiktPmFpX2RtYV9kZXNjLAorCQkJCQlwcml2KGRldiktPmFpX2RtYV9kZXNjX2J1c19hZGRyKTsKKwkJCWlmIChwcml2KGRldiktPmFvX2RtYV9kZXNjKQorCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCQkJCXNpemVvZihzdHJ1Y3QgcGx4X2RtYV9kZXNjKSAqCisJCQkJCUFPX0RNQV9SSU5HX0NPVU5ULAorCQkJCQlwcml2KGRldiktPmFvX2RtYV9kZXNjLAorCQkJCQlwcml2KGRldiktPmFvX2RtYV9kZXNjX2J1c19hZGRyKTsKKwkJCWlmIChwcml2KGRldiktPm1haW5fcGh5c19pb2Jhc2UpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUocHJpdihkZXYpLT5od19kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQocHJpdihkZXYpLT5od19kZXYpOworCQl9CisJfQorCWlmIChkZXYtPnN1YmRldmljZXMpCisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyA0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0cyA9IDAsIG4sIGk7CisJdW5zaWduZWQgaW50IGNoYW5uZWwsIHJhbmdlLCBhcmVmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwOworCisJREVCVUdfUFJJTlQoImNoYW5zcGVjIDB4JXhcbiIsIGluc24tPmNoYW5zcGVjKTsKKwljaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJYXJlZiA9IENSX0FSRUYoaW5zbi0+Y2hhbnNwZWMpOworCisJLy8gZGlzYWJsZSBjYXJkJ3MgYW5hbG9nIGlucHV0IGludGVycnVwdCBzb3VyY2VzIGFuZCBwYWNpbmcKKwkvLyA0MDIwIGdlbmVyYXRlcyBkYWMgZG9uZSBpbnRlcnJ1cHRzIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIGRpc2FibGVkCisJZGlzYWJsZV9haV9wYWNpbmcoZGV2KTsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWlmIChpbnNuLT5jaGFuc3BlYyAmIENSX0FMVF9GSUxURVIpCisJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgfD0gQURDX0RJVEhFUl9CSVQ7CisJZWxzZQorCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzICY9IH5BRENfRElUSEVSX0JJVDsKKwl3cml0ZXcocHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19DT05UUk9MMV9SRUcpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ICE9IExBWU9VVF80MDIwKSB7CisJCS8vIHVzZSBpbnRlcm5hbCBxdWV1ZQorCQlwcml2KGRldiktPmh3X2NvbmZpZ19iaXRzICY9IH5FWFRfUVVFVUVfQklUOworCQl3cml0ZXcocHJpdihkZXYpLT5od19jb25maWdfYml0cywKKwkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBIV19DT05GSUdfUkVHKTsKKworCQkvLyBBTFRfU09VUkNFIGlzIGludGVybmFsIGNhbGlicmF0aW9uIHJlZmVyZW5jZQorCQlpZiAoaW5zbi0+Y2hhbnNwZWMgJiBDUl9BTFRfU09VUkNFKSB7CisJCQl1bnNpZ25lZCBpbnQgY2FsX2VuX2JpdDsKKworCQkJREVCVUdfUFJJTlQoInJlYWRpbmcgY2FsaWJyYXRpb24gc291cmNlXG4iKTsKKwkJCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzYwWFgpCisJCQkJY2FsX2VuX2JpdCA9IENBTF9FTl82MFhYX0JJVDsKKwkJCWVsc2UKKwkJCQljYWxfZW5fYml0ID0gQ0FMX0VOXzY0WFhfQklUOworCQkJLy8gc2VsZWN0IGludGVybmFsIHJlZmVyZW5jZSBzb3VyY2UgdG8gY29ubmVjdCB0byBjaGFubmVsIDAKKwkJCXdyaXRldyhjYWxfZW5fYml0IHwgYWRjX3NyY19iaXRzKHByaXYoZGV2KS0+CisJCQkJCWNhbGlicmF0aW9uX3NvdXJjZSksCisJCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisJCX0gZWxzZSB7CisJCQkvLyBtYWtlIHN1cmUgaW50ZXJuYWwgY2FsaWJyYXRpb24gc291cmNlIGlzIHR1cm5lZCBvZmYKKwkJCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQ0FMSUJSQVRJT05fUkVHKTsKKwkJfQorCQkvLyBsb2FkIGludGVybmFsIHF1ZXVlCisJCWJpdHMgPSAwOworCQkvLyBzZXQgZ2FpbgorCQliaXRzIHw9IGFpX3JhbmdlX2JpdHNfNnh4eChkZXYsIENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSk7CisJCS8vIHNldCBzaW5nbGUtZW5kZWQgLyBkaWZmZXJlbnRpYWwKKwkJYml0cyB8PSBzZV9kaWZmX2JpdF82eHh4KGRldiwgYXJlZiA9PSBBUkVGX0RJRkYpOworCQlpZiAoYXJlZiA9PSBBUkVGX0NPTU1PTikKKwkJCWJpdHMgfD0gQURDX0NPTU1PTl9CSVQ7CisJCWJpdHMgfD0gYWRjX2NoYW5fYml0cyhjaGFubmVsKTsKKwkJLy8gc2V0IHN0b3AgY2hhbm5lbAorCQl3cml0ZXcoYWRjX2NoYW5fYml0cyhjaGFubmVsKSwKKwkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfUVVFVUVfSElHSF9SRUcpOworCQkvLyBzZXQgc3RhcnQgY2hhbm5lbCwgYW5kIHJlc3Qgb2Ygc2V0dGluZ3MKKwkJd3JpdGV3KGJpdHMsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfUVVFVUVfTE9BRF9SRUcpOworCX0gZWxzZSB7CisJCXVpbnQ4X3Qgb2xkX2NhbF9yYW5nZV9iaXRzID0gcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHM7CisKKwkJcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHMgJj0gfkFEQ19TUkNfNDAyMF9NQVNLOworCQlpZiAoaW5zbi0+Y2hhbnNwZWMgJiBDUl9BTFRfU09VUkNFKSB7CisJCQlERUJVR19QUklOVCgicmVhZGluZyBjYWxpYnJhdGlvbiBzb3VyY2VcbiIpOworCQkJcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHMgfD0KKwkJCQlhZGNfc3JjXzQwMjBfYml0cyhwcml2KGRldiktPgorCQkJCWNhbGlicmF0aW9uX3NvdXJjZSk7CisJCX0gZWxzZSB7CS8vc2VsZWN0IEJOQyBpbnB1dHMKKwkJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzIHw9IGFkY19zcmNfNDAyMF9iaXRzKDQpOworCQl9CisJCS8vIHNlbGVjdCByYW5nZQorCQlpZiAocmFuZ2UgPT0gMCkKKwkJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzIHw9IGF0dGVudWF0ZV9iaXQoY2hhbm5lbCk7CisJCWVsc2UKKwkJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzICY9CisJCQkJfmF0dGVudWF0ZV9iaXQoY2hhbm5lbCk7CisJCS8vIHVwZGF0ZSBjYWxpYnJhdGlvbi9yYW5nZSBpMmMgcmVnaXN0ZXIgb25seSBpZiBuZWNlc3NhcnksIGFzIGl0IGlzIHZlcnkgc2xvdworCQlpZiAob2xkX2NhbF9yYW5nZV9iaXRzICE9IHByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzKSB7CisJCQl1aW50OF90IGkyY19kYXRhID0gcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHM7CisJCQlpMmNfd3JpdGUoZGV2LCBSQU5HRV9DQUxfSTJDX0FERFIsICZpMmNfZGF0YSwKKwkJCQlzaXplb2YoaTJjX2RhdGEpKTsKKwkJfQorCisJCS8qIDQwMjAgbWFudWFsIGFza3MgdGhhdCBzYW1wbGUgaW50ZXJ2YWwgcmVnaXN0ZXIgdG8gYmUgc2V0IGJlZm9yZSB3cml0aW5nIHRvIGNvbnZlcnQgcmVnaXN0ZXIuCisJCSAqIFVzaW5nIHNvbWV3aGF0IGFyYml0cmFyeSBzZXR0aW5nIG9mIDQgbWFzdGVyIGNsb2NrIHRpY2tzID0gMC4xIHVzZWMgKi8KKwkJd3JpdGV3KDAsCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1NBTVBMRV9JTlRFUlZBTF9VUFBFUl9SRUcpOworCQl3cml0ZXcoMiwKKwkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfU0FNUExFX0lOVEVSVkFMX0xPV0VSX1JFRyk7CisJfQorCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCisJCS8vIGNsZWFyIGFkYyBidWZmZXIgKGluc2lkZSBsb29wIGZvciA0MDIwIHNha2UpCisJCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0JVRkZFUl9DTEVBUl9SRUcpOworCisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiwgYml0cyBzZW50IG9ubHkgbWF0dGVyIGZvciA0MDIwICovCisJCXdyaXRldyhhZGNfY29udmVydF9jaGFuXzQwMjBfYml0cyhDUl9DSEFOKGluc24tPmNoYW5zcGVjKSksCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0NPTlZFUlRfUkVHKTsKKworCQkvLyB3YWl0IGZvciBkYXRhCisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWJpdHMgPSByZWFkdyhwcml2KGRldiktPm1haW5faW9iYXNlICsgSFdfU1RBVFVTX1JFRyk7CisJCQlERUJVR19QUklOVCgiIHBpcGUgYml0cyAweCV4XG4iLCBwaXBlX2Z1bGxfYml0cyhiaXRzKSk7CisJCQlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCQkJaWYgKHJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKworCQkJCQkJQURDX1dSSVRFX1BOVFJfUkVHKSkKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWlmIChwaXBlX2Z1bGxfYml0cyhiaXRzKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCURFQlVHX1BSSU5UKCIgbG9vcGVkICVpIHRpbWVzIHdhaXRpbmcgZm9yIGRhdGFcbiIsIGkpOworCQlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiIGFuYWxvZyBpbnB1dCByZWFkIGluc24gdGltZWQgb3V0Iik7CisJCQlydF9wcmludGsoIiBzdGF0dXMgMHgleFxuIiwgYml0cyk7CisJCQlyZXR1cm4gLUVUSU1FOworCQl9CisJCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApCisJCQlkYXRhW25dID0KKwkJCQlyZWFkbChwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSArCisJCQkJQURDX0ZJRk9fUkVHKSAmIDB4ZmZmZjsKKwkJZWxzZQorCQkJZGF0YVtuXSA9CisJCQkJcmVhZHcocHJpdihkZXYpLT5tYWluX2lvYmFzZSArIFBJUEUxX1JFQURfUkVHKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBhaV9jb25maWdfY2FsaWJyYXRpb25fc291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBzb3VyY2UgPSBkYXRhWzFdOworCWludCBudW1fY2FsaWJyYXRpb25fc291cmNlczsKKworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzYwWFgpCisJCW51bV9jYWxpYnJhdGlvbl9zb3VyY2VzID0gMTY7CisJZWxzZQorCQludW1fY2FsaWJyYXRpb25fc291cmNlcyA9IDg7CisJaWYgKHNvdXJjZSA+PSBudW1fY2FsaWJyYXRpb25fc291cmNlcykgeworCQlwcmludGsoImludmFsaWQgY2FsaWJyYXRpb24gc291cmNlOiAlaVxuIiwgc291cmNlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREVCVUdfUFJJTlQoInNldHRpbmcgY2FsaWJyYXRpb24gc291cmNlIHRvICVpXG4iLCBzb3VyY2UpOworCXByaXYoZGV2KS0+Y2FsaWJyYXRpb25fc291cmNlID0gc291cmNlOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYWlfY29uZmlnX2Jsb2NrX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGZpZm9fc2l6ZTsKKwljb25zdCBzdHJ1Y3QgaHdfZmlmb19pbmZvICpjb25zdCBmaWZvID0gYm9hcmQoZGV2KS0+YWlfZmlmbzsKKwl1bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZSwgcmVxdWVzdGVkX2Jsb2NrX3NpemU7CisJaW50IHJldHZhbDsKKworCXJlcXVlc3RlZF9ibG9ja19zaXplID0gZGF0YVsxXTsKKworCWlmIChyZXF1ZXN0ZWRfYmxvY2tfc2l6ZSkgeworCQlmaWZvX3NpemUgPQorCQkJcmVxdWVzdGVkX2Jsb2NrX3NpemUgKiBmaWZvLT5udW1fc2VnbWVudHMgLworCQkJYnl0ZXNfaW5fc2FtcGxlOworCisJCXJldHZhbCA9IHNldF9haV9maWZvX3NpemUoZGV2LCBmaWZvX3NpemUpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisKKwl9CisKKwlibG9ja19zaXplID0gYWlfZmlmb19zaXplKGRldikgLyBmaWZvLT5udW1fc2VnbWVudHMgKiBieXRlc19pbl9zYW1wbGU7CisKKwlkYXRhWzFdID0gYmxvY2tfc2l6ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGFpX2NvbmZpZ19tYXN0ZXJfY2xvY2tfNDAyMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgZGl2aXNvciA9IGRhdGFbNF07CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAoZGl2aXNvciA8IDIpIHsKKwkJZGl2aXNvciA9IDI7CisJCXJldHZhbCA9IC1FQUdBSU47CisJfQorCisJc3dpdGNoIChkYXRhWzFdKSB7CisJY2FzZSBDT01FRElfRVZfU0NBTl9CRUdJTjoKKwkJcHJpdihkZXYpLT5leHRfY2xvY2suZGl2aXNvciA9IGRpdmlzb3I7CisJCXByaXYoZGV2KS0+ZXh0X2Nsb2NrLmNoYW5zcGVjID0gZGF0YVsyXTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWRhdGFbNF0gPSBkaXZpc29yOworCisJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IDU7Cit9CisKKy8vIFhYWCBjb3VsZCBhZGQgc3VwcG9ydCBmb3IgNjB4eCBzZXJpZXMKK3N0YXRpYyBpbnQgYWlfY29uZmlnX21hc3Rlcl9jbG9jayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCXN3aXRjaCAoYm9hcmQoZGV2KS0+bGF5b3V0KSB7CisJY2FzZSBMQVlPVVRfNDAyMDoKKwkJcmV0dXJuIGFpX2NvbmZpZ19tYXN0ZXJfY2xvY2tfNDAyMChkZXYsIGRhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgYWlfY29uZmlnX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpZCA9IGRhdGFbMF07CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBJTlNOX0NPTkZJR19BTFRfU09VUkNFOgorCQlyZXR1cm4gYWlfY29uZmlnX2NhbGlicmF0aW9uX3NvdXJjZShkZXYsIGRhdGEpOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0JMT0NLX1NJWkU6CisJCXJldHVybiBhaV9jb25maWdfYmxvY2tfc2l6ZShkZXYsIGRhdGEpOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX1RJTUVSXzE6CisJCXJldHVybiBhaV9jb25maWdfbWFzdGVyX2Nsb2NrKGRldiwgZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisJdW5zaWduZWQgaW50IHRtcF9hcmcsIHRtcF9hcmcyOworCWludCBpOworCWludCBhcmVmOworCXVuc2lnbmVkIGludCB0cmlnZ2VyczsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJdHJpZ2dlcnMgPSBUUklHX1RJTUVSOworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApCisJCXRyaWdnZXJzIHw9IFRSSUdfT1RIRVI7CisJZWxzZQorCQl0cmlnZ2VycyB8PSBUUklHX0ZPTExPVzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IHRyaWdnZXJzOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCXRyaWdnZXJzID0gVFJJR19USU1FUjsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKQorCQl0cmlnZ2VycyB8PSBUUklHX05PVzsKKwllbHNlCisJCXRyaWdnZXJzIHw9IFRSSUdfRVhUOworCWNtZC0+Y29udmVydF9zcmMgJj0gdHJpZ2dlcnM7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX0VYVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLy8gdW5pcXVlbmVzcyBjaGVjaworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfT1RIRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19OT1cpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYKKwkJY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisKKwkvLyBjb21wYXRpYmlsaXR5IGNoZWNrCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQgJiYgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmCisJCWNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnKSB7CisJCQkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCQkJZXJyKys7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IGJvYXJkKGRldiktPmFpX3NwZWVkKSB7CisJCQkJY21kLT5jb252ZXJ0X2FyZyA9IGJvYXJkKGRldiktPmFpX3NwZWVkOworCQkJCWVycisrOworCQkJfQorCQkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkJCS8vIGlmIHNjYW5zIGFyZSB0aW1lZCBmYXN0ZXIgdGhhbiBjb252ZXJzaW9uIHJhdGUgYWxsb3dzCisJCQkJaWYgKGNtZC0+Y29udmVydF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbiA+CisJCQkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcpIHsKKwkJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJCQljbWQtPmNvbnZlcnRfYXJnICoKKwkJCQkJCWNtZC0+Y2hhbmxpc3RfbGVuOworCQkJCQllcnIrKzsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisKKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfRVhUOgorCQlicmVhazsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCWlmICghY21kLT5zdG9wX2FyZykgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfTk9ORToKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wX2FyZyA9IGNtZC0+Y29udmVydF9hcmc7CisJCXRtcF9hcmcyID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJY2hlY2tfYWRjX3RpbWluZyhkZXYsIGNtZCk7CisJCWlmICh0bXBfYXJnICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwkJaWYgKHRtcF9hcmcyICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8vIG1ha2Ugc3VyZSB1c2VyIGlzIGRvZXNuJ3QgY2hhbmdlIGFuYWxvZyByZWZlcmVuY2UgbWlkIGNoYW5saXN0CisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7CisJCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQlpZiAoYXJlZiAhPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbaV0pKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImFsbCBlbGVtZW50cyBpbiBjaGFubGlzdCBtdXN0IHVzZSB0aGUgc2FtZSBhbmFsb2cgcmVmZXJlbmNlIik7CisJCQkJZXJyKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLy8gY2hlY2sgNDAyMCBjaGFubGlzdAorCQlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCQl1bnNpZ25lZCBpbnQgZmlyc3RfY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisJCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pICE9CisJCQkJCWZpcnN0X2NoYW5uZWwgKyBpKSB7CisJCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCQkiY2hhbmxpc3QgbXVzdCB1c2UgY29uc2VjdXRpdmUgY2hhbm5lbHMiKTsKKwkJCQkJZXJyKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSAzKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImNoYW5saXN0IGNhbm5vdCBiZSAzIGNoYW5uZWxzIGxvbmcsIHVzZSAxLCAyLCBvciA0IGNoYW5uZWxzIik7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzZV9od19zYW1wbGVfY291bnRlcihzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKy8vIGRpc2FibGUgZm9yIG5vdyB1bnRpbCBJIHdvcmsgb3V0IGEgcmFjZQorCXJldHVybiAwOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3BfYXJnIDw9IG1heF9jb3VudGVyX3ZhbHVlKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9zYW1wbGVfY291bnRlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJLy8gc2V0IHNvZnR3YXJlIGNvdW50CisJCXByaXYoZGV2KS0+YWlfY291bnQgPSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW47CisJfQorCS8vIGxvYWQgaGFyZHdhcmUgY29udmVyc2lvbiBjb3VudGVyCisJaWYgKHVzZV9od19zYW1wbGVfY291bnRlcihjbWQpKSB7CisJCXdyaXRldyhjbWQtPnN0b3BfYXJnICYgMHhmZmZmLAorCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19DT1VOVF9MT1dFUl9SRUcpOworCQl3cml0ZXcoKGNtZC0+c3RvcF9hcmcgPj4gMTYpICYgMHhmZiwKKwkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfQ09VTlRfVVBQRVJfUkVHKTsKKwl9IGVsc2UgeworCQl3cml0ZXcoMSwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19DT1VOVF9MT1dFUl9SRUcpOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZG1hX3RyYW5zZmVyX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IG51bV9zYW1wbGVzOworCisJbnVtX3NhbXBsZXMgPQorCQlwcml2KGRldiktPmFpX2ZpZm9fc2VnbWVudF9sZW5ndGggKgorCQlib2FyZChkZXYpLT5haV9maWZvLT5zYW1wbGVfcGFja2luZ19yYXRpbzsKKwlpZiAobnVtX3NhbXBsZXMgPiBETUFfQlVGRkVSX1NJWkUgLyBzaXplb2YodWludDE2X3QpKQorCQludW1fc2FtcGxlcyA9IERNQV9CVUZGRVJfU0laRSAvIHNpemVvZih1aW50MTZfdCk7CisKKwlyZXR1cm4gbnVtX3NhbXBsZXM7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfYWlfcGFjaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkaXNhYmxlX2FpX2ludGVycnVwdHMoZGV2KTsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgJj0gfkFEQ19TV19HQVRFX0JJVDsKKwl3cml0ZXcocHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19DT05UUk9MMV9SRUcpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvKiBkaXNhYmxlIHBhY2luZywgdHJpZ2dlcmluZywgZXRjICovCisJd3JpdGV3KEFEQ19ETUFfRElTQUJMRV9CSVQgfCBBRENfU09GVF9HQVRFX0JJVFMgfCBBRENfR0FURV9MRVZFTF9CSVQsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfQ09OVFJPTDBfUkVHKTsKK30KKworc3RhdGljIHZvaWQgZGlzYWJsZV9haV9pbnRlcnJ1cHRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlwcml2KGRldiktPmludHJfZW5hYmxlX2JpdHMgJj0KKwkJfkVOX0FEQ19JTlRSX1NSQ19CSVQgJiB+RU5fQURDX0RPTkVfSU5UUl9CSVQgJgorCQl+RU5fQURDX0FDVElWRV9JTlRSX0JJVCAmIH5FTl9BRENfU1RPUF9JTlRSX0JJVCAmCisJCX5FTl9BRENfT1ZFUlJVTl9CSVQgJiB+QURDX0lOVFJfU1JDX01BU0s7CisJd3JpdGV3KHByaXYoZGV2KS0+aW50cl9lbmFibGVfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIElOVFJfRU5BQkxFX1JFRyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCURFQlVHX1BSSU5UKCJpbnRyIGVuYWJsZSBiaXRzIDB4JXhcbiIsIHByaXYoZGV2KS0+aW50cl9lbmFibGVfYml0cyk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9haV9pbnRlcnJ1cHRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1aW50MzJfdCBiaXRzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwliaXRzID0gRU5fQURDX09WRVJSVU5fQklUIHwgRU5fQURDX0RPTkVfSU5UUl9CSVQgfAorCQlFTl9BRENfQUNUSVZFX0lOVFJfQklUIHwgRU5fQURDX1NUT1BfSU5UUl9CSVQ7CisJLy8gVXNlIHBpbyB0cmFuc2ZlciBhbmQgaW50ZXJydXB0IG9uIGVuZCBvZiBjb252ZXJzaW9uIGlmIFRSSUdfV0FLRV9FT1MgZmxhZyBpcyBzZXQuCisJaWYgKGNtZC0+ZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSB7CisJCS8vIDQwMjAgZG9lc24ndCBzdXBwb3J0IHBpbyB0cmFuc2ZlcnMgZXhjZXB0IGZvciBmaWZvIGRyZWdzCisJCWlmIChib2FyZChkZXYpLT5sYXlvdXQgIT0gTEFZT1VUXzQwMjApCisJCQliaXRzIHw9IEFEQ19JTlRSX0VPU0NBTl9CSVRTIHwgRU5fQURDX0lOVFJfU1JDX0JJVDsKKwl9CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJcHJpdihkZXYpLT5pbnRyX2VuYWJsZV9iaXRzIHw9IGJpdHM7CisJd3JpdGV3KHByaXYoZGV2KS0+aW50cl9lbmFibGVfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIElOVFJfRU5BQkxFX1JFRyk7CisJREVCVUdfUFJJTlQoImludHIgZW5hYmxlIGJpdHMgMHgleFxuIiwgcHJpdihkZXYpLT5pbnRyX2VuYWJsZV9iaXRzKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdWludDMyX3QgYWlfY29udmVydF9jb3VudGVyXzZ4eHgoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJLy8gc3VwcG9zZWQgdG8gbG9hZCBjb3VudGVyIHdpdGggZGVzaXJlZCBkaXZpc29yIG1pbnVzIDMKKwlyZXR1cm4gY21kLT5jb252ZXJ0X2FyZyAvIFRJTUVSX0JBU0UgLSAzOworfQorCitzdGF0aWMgdWludDMyX3QgYWlfc2Nhbl9jb3VudGVyXzZ4eHgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXVpbnQzMl90IGNvdW50OworCS8vIGZpZ3VyZSBvdXQgaG93IGxvbmcgd2UgbmVlZCB0byBkZWxheSBhdCBlbmQgb2Ygc2NhbgorCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCWNhc2UgVFJJR19USU1FUjoKKwkJY291bnQgPSAoY21kLT5zY2FuX2JlZ2luX2FyZyAtCisJCQkoY21kLT5jb252ZXJ0X2FyZyAqIChjbWQtPmNoYW5saXN0X2xlbiAtIDEpKSkKKwkJCS8gVElNRVJfQkFTRTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0ZPTExPVzoKKwkJY291bnQgPSBjbWQtPmNvbnZlcnRfYXJnIC8gVElNRVJfQkFTRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gY291bnQgLSAzOworfQorCitzdGF0aWMgdWludDMyX3QgYWlfY29udmVydF9jb3VudGVyXzQwMjAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXVuc2lnbmVkIGludCBkaXZpc29yOworCisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlkaXZpc29yID0gY21kLT5zY2FuX2JlZ2luX2FyZyAvIFRJTUVSX0JBU0U7CisJCWJyZWFrOworCWNhc2UgVFJJR19PVEhFUjoKKwkJZGl2aXNvciA9IHByaXYoZGV2KS0+ZXh0X2Nsb2NrLmRpdmlzb3I7CisJCWJyZWFrOworCWRlZmF1bHQ6CQkvLyBzaG91bGQgbmV2ZXIgaGFwcGVuCisJCWNvbWVkaV9lcnJvcihkZXYsICJidWchIGZhaWxlZCB0byBzZXQgYWkgcGFjaW5nISIpOworCQlkaXZpc29yID0gMTAwMDsKKwkJYnJlYWs7CisJfQorCisJLy8gc3VwcG9zZWQgdG8gbG9hZCBjb3VudGVyIHdpdGggZGVzaXJlZCBkaXZpc29yIG1pbnVzIDIgZm9yIDQwMjAKKwlyZXR1cm4gZGl2aXNvciAtIDI7Cit9CisKK3N0YXRpYyB2b2lkIHNlbGVjdF9tYXN0ZXJfY2xvY2tfNDAyMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwkvLyBzZWxlY3QgaW50ZXJuYWwvZXh0ZXJuYWwgbWFzdGVyIGNsb2NrCisJcHJpdihkZXYpLT5od19jb25maWdfYml0cyAmPSB+TUFTVEVSX0NMT0NLXzQwMjBfTUFTSzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX09USEVSKSB7CisJCWludCBjaGFuc3BlYyA9IHByaXYoZGV2KS0+ZXh0X2Nsb2NrLmNoYW5zcGVjOworCisJCWlmIChDUl9DSEFOKGNoYW5zcGVjKSkKKwkJCXByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMgfD0gQk5DX0NMT0NLXzQwMjBfQklUUzsKKwkJZWxzZQorCQkJcHJpdihkZXYpLT5od19jb25maWdfYml0cyB8PSBFWFRfQ0xPQ0tfNDAyMF9CSVRTOworCX0gZWxzZSB7CisJCXByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMgfD0gSU5URVJOQUxfQ0xPQ0tfNDAyMF9CSVRTOworCX0KKwl3cml0ZXcocHJpdihkZXYpLT5od19jb25maWdfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEhXX0NPTkZJR19SRUcpOworfQorCitzdGF0aWMgdm9pZCBzZWxlY3RfbWFzdGVyX2Nsb2NrKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlzd2l0Y2ggKGJvYXJkKGRldiktPmxheW91dCkgeworCWNhc2UgTEFZT1VUXzQwMjA6CisJCXNlbGVjdF9tYXN0ZXJfY2xvY2tfNDAyMChkZXYsIGNtZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zdGFydF9zeW5jKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLy8gc3BpbmxvY2sgZm9yIHBseCBkbWEgY29udHJvbC9zdGF0dXMgcmVnCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJaWYgKGNoYW5uZWwpCisJCXdyaXRlYihQTFhfRE1BX0VOX0JJVCB8IFBMWF9ETUFfU1RBUlRfQklUIHwKKwkJCVBMWF9DTEVBUl9ETUFfSU5UUl9CSVQsCisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfQ1NfUkVHKTsKKwllbHNlCisJCXdyaXRlYihQTFhfRE1BX0VOX0JJVCB8IFBMWF9ETUFfU1RBUlRfQklUIHwKKwkJCVBMWF9DTEVBUl9ETUFfSU5UUl9CSVQsCisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYWlfcGFjaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1aW50MzJfdCBjb252ZXJ0X2NvdW50ZXIgPSAwLCBzY2FuX2NvdW50ZXIgPSAwOworCisJY2hlY2tfYWRjX3RpbWluZyhkZXYsIGNtZCk7CisKKwlzZWxlY3RfbWFzdGVyX2Nsb2NrKGRldiwgY21kKTsKKworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJY29udmVydF9jb3VudGVyID0gYWlfY29udmVydF9jb3VudGVyXzQwMjAoZGV2LCBjbWQpOworCX0gZWxzZSB7CisJCWNvbnZlcnRfY291bnRlciA9IGFpX2NvbnZlcnRfY291bnRlcl82eHh4KGRldiwgY21kKTsKKwkJc2Nhbl9jb3VudGVyID0gYWlfc2Nhbl9jb3VudGVyXzZ4eHgoZGV2LCBjbWQpOworCX0KKworCS8vIGxvYWQgbG93ZXIgMTYgYml0cyBvZiBjb252ZXJ0IGludGVydmFsCisJd3JpdGV3KGNvbnZlcnRfY291bnRlciAmIDB4ZmZmZiwKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19TQU1QTEVfSU5URVJWQUxfTE9XRVJfUkVHKTsKKwlERUJVR19QUklOVCgiY29udmVydCBjb3VudGVyIDB4JXhcbiIsIGNvbnZlcnRfY291bnRlcik7CisJLy8gbG9hZCB1cHBlciA4IGJpdHMgb2YgY29udmVydCBpbnRlcnZhbAorCXdyaXRldygoY29udmVydF9jb3VudGVyID4+IDE2KSAmIDB4ZmYsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfU0FNUExFX0lOVEVSVkFMX1VQUEVSX1JFRyk7CisJLy8gbG9hZCBsb3dlciAxNiBiaXRzIG9mIHNjYW4gZGVsYXkKKwl3cml0ZXcoc2Nhbl9jb3VudGVyICYgMHhmZmZmLAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0RFTEFZX0lOVEVSVkFMX0xPV0VSX1JFRyk7CisJLy8gbG9hZCB1cHBlciA4IGJpdHMgb2Ygc2NhbiBkZWxheQorCXdyaXRldygoc2Nhbl9jb3VudGVyID4+IDE2KSAmIDB4ZmYsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfREVMQVlfSU5URVJWQUxfVVBQRVJfUkVHKTsKKwlERUJVR19QUklOVCgic2NhbiBjb3VudGVyIDB4JXhcbiIsIHNjYW5fY291bnRlcik7Cit9CisKK3N0YXRpYyBpbnQgdXNlX2ludGVybmFsX3F1ZXVlXzZ4eHgoY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSArIDEgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaSArIDFdKSAhPQorCQkJQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSArIDEpCisJCQlyZXR1cm4gMDsKKwkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaSArIDFdKSAhPQorCQkJQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFtpICsgMV0pICE9IENSX0FSRUYoY21kLT5jaGFubGlzdFtpXSkpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfY2hhbm5lbF9xdWV1ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJdW5zaWduZWQgc2hvcnQgYml0czsKKwlpbnQgaTsKKworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgIT0gTEFZT1VUXzQwMjApIHsKKwkJaWYgKHVzZV9pbnRlcm5hbF9xdWV1ZV82eHh4KGNtZCkpIHsKKwkJCXByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMgJj0gfkVYVF9RVUVVRV9CSVQ7CisJCQl3cml0ZXcocHJpdihkZXYpLT5od19jb25maWdfYml0cywKKwkJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgSFdfQ09ORklHX1JFRyk7CisJCQliaXRzID0gMDsKKwkJCS8vIHNldCBjaGFubmVsCisJCQliaXRzIHw9IGFkY19jaGFuX2JpdHMoQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSk7CisJCQkvLyBzZXQgZ2FpbgorCQkJYml0cyB8PSBhaV9yYW5nZV9iaXRzXzZ4eHgoZGV2LAorCQkJCUNSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pKTsKKwkJCS8vIHNldCBzaW5nbGUtZW5kZWQgLyBkaWZmZXJlbnRpYWwKKwkJCWJpdHMgfD0gc2VfZGlmZl9iaXRfNnh4eChkZXYsCisJCQkJQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKSA9PSBBUkVGX0RJRkYpOworCQkJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFswXSkgPT0gQVJFRl9DT01NT04pCisJCQkJYml0cyB8PSBBRENfQ09NTU9OX0JJVDsKKwkJCS8vIHNldCBzdG9wIGNoYW5uZWwKKwkJCXdyaXRldyhhZGNfY2hhbl9iaXRzKENSX0NIQU4oY21kLT5jaGFubGlzdFtjbWQtPgorCQkJCQkJCWNoYW5saXN0X2xlbiAtIDFdKSksCisJCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19RVUVVRV9ISUdIX1JFRyk7CisJCQkvLyBzZXQgc3RhcnQgY2hhbm5lbCwgYW5kIHJlc3Qgb2Ygc2V0dGluZ3MKKwkJCXdyaXRldyhiaXRzLAorCQkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfUVVFVUVfTE9BRF9SRUcpOworCQl9IGVsc2UgeworCQkJLy8gdXNlIGV4dGVybmFsIHF1ZXVlCisJCQlpZiAoZGV2LT53cml0ZV9zdWJkZXYgJiYgZGV2LT53cml0ZV9zdWJkZXYtPmJ1c3kpIHsKKwkJCQl3YXJuX2V4dGVybmFsX3F1ZXVlKGRldik7CisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KKwkJCXByaXYoZGV2KS0+aHdfY29uZmlnX2JpdHMgfD0gRVhUX1FVRVVFX0JJVDsKKwkJCXdyaXRldyhwcml2KGRldiktPmh3X2NvbmZpZ19iaXRzLAorCQkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBIV19DT05GSUdfUkVHKTsKKwkJCS8vIGNsZWFyIERBQyBidWZmZXIgdG8gcHJldmVudCB3ZWlyZCBpbnRlcmFjdGlvbnMKKwkJCXdyaXRldygwLAorCQkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfQlVGRkVSX0NMRUFSX1JFRyk7CisJCQkvLyBjbGVhciBxdWV1ZSBwb2ludGVyCisJCQl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19RVUVVRV9DTEVBUl9SRUcpOworCQkJLy8gbG9hZCBleHRlcm5hbCBxdWV1ZQorCQkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCQliaXRzID0gMDsKKwkJCQkvLyBzZXQgY2hhbm5lbAorCQkJCWJpdHMgfD0gYWRjX2NoYW5fYml0cyhDUl9DSEFOKGNtZC0+CisJCQkJCQljaGFubGlzdFtpXSkpOworCQkJCS8vIHNldCBnYWluCisJCQkJYml0cyB8PSBhaV9yYW5nZV9iaXRzXzZ4eHgoZGV2LAorCQkJCQlDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSk7CisJCQkJLy8gc2V0IHNpbmdsZS1lbmRlZCAvIGRpZmZlcmVudGlhbAorCQkJCWJpdHMgfD0gc2VfZGlmZl9iaXRfNnh4eChkZXYsCisJCQkJCUNSX0FSRUYoY21kLT5jaGFubGlzdFtpXSkgPT0gQVJFRl9ESUZGKTsKKwkJCQlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0W2ldKSA9PSBBUkVGX0NPTU1PTikKKwkJCQkJYml0cyB8PSBBRENfQ09NTU9OX0JJVDsKKwkJCQkvLyBtYXJrIGVuZCBvZiBxdWV1ZQorCQkJCWlmIChpID09IGNtZC0+Y2hhbmxpc3RfbGVuIC0gMSkKKwkJCQkJYml0cyB8PSBRVUVVRV9FT1NDQU5fQklUIHwKKwkJCQkJCVFVRVVFX0VPU0VRX0JJVDsKKwkJCQl3cml0ZXcoYml0cywKKwkJCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArCisJCQkJCUFEQ19RVUVVRV9GSUZPX1JFRyk7CisJCQkJREVCVUdfUFJJTlQKKwkJCQkJKCJ3cm90ZSAweCV4IHRvIGV4dGVybmFsIGNoYW5uZWwgcXVldWVcbiIsCisJCQkJCWJpdHMpOworCQkJfQorCQkJLyogZG9pbmcgYSBxdWV1ZSBjbGVhciBpcyBub3Qgc3BlY2lmaWVkIGluIGJvYXJkIGRvY3MsCisJCQkgKiBidXQgcmVxdWlyZWQgZm9yIHJlbGlhYmxlIG9wZXJhdGlvbiAqLworCQkJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfUVVFVUVfQ0xFQVJfUkVHKTsKKwkJCS8vIHByaW1lIHF1ZXVlIGhvbGRpbmcgcmVnaXN0ZXIKKwkJCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1FVRVVFX0xPQURfUkVHKTsKKwkJfQorCX0gZWxzZSB7CisJCXVuc2lnbmVkIHNob3J0IG9sZF9jYWxfcmFuZ2VfYml0cyA9CisJCQlwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0czsKKworCQlwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0cyAmPSB+QURDX1NSQ180MDIwX01BU0s7CisJCS8vc2VsZWN0IEJOQyBpbnB1dHMKKwkJcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHMgfD0gYWRjX3NyY180MDIwX2JpdHMoNCk7CisJCS8vIHNlbGVjdCByYW5nZXMKKwkJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCBjaGFubmVsID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJCXVuc2lnbmVkIGludCByYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCisJCQlpZiAocmFuZ2UgPT0gMCkKKwkJCQlwcml2KGRldiktPmkyY19jYWxfcmFuZ2VfYml0cyB8PQorCQkJCQlhdHRlbnVhdGVfYml0KGNoYW5uZWwpOworCQkJZWxzZQorCQkJCXByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzICY9CisJCQkJCX5hdHRlbnVhdGVfYml0KGNoYW5uZWwpOworCQl9CisJCS8vIHVwZGF0ZSBjYWxpYnJhdGlvbi9yYW5nZSBpMmMgcmVnaXN0ZXIgb25seSBpZiBuZWNlc3NhcnksIGFzIGl0IGlzIHZlcnkgc2xvdworCQlpZiAob2xkX2NhbF9yYW5nZV9iaXRzICE9IHByaXYoZGV2KS0+aTJjX2NhbF9yYW5nZV9iaXRzKSB7CisJCQl1aW50OF90IGkyY19kYXRhID0gcHJpdihkZXYpLT5pMmNfY2FsX3JhbmdlX2JpdHM7CisJCQlpMmNfd3JpdGUoZGV2LCBSQU5HRV9DQUxfSTJDX0FERFIsICZpMmNfZGF0YSwKKwkJCQlzaXplb2YoaTJjX2RhdGEpKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvYWRfZmlyc3RfZG1hX2Rlc2NyaXB0b3Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgaW50IGRtYV9jaGFubmVsLCB1bnNpZ25lZCBpbnQgZGVzY3JpcHRvcl9iaXRzKQoreworCS8qIFRoZSB0cmFuc2ZlciBzaXplLCBwY2kgYWRkcmVzcywgYW5kIGxvY2FsIGFkZHJlc3MgcmVnaXN0ZXJzCisJICogYXJlIHN1cHBvc2VkbHkgdW51c2VkIGR1cmluZyBjaGFpbmVkIGRtYSwKKwkgKiBidXQgSSBoYXZlIGZvdW5kIHRoYXQgbGVmdCBvdmVyIHZhbHVlcyBmcm9tIGxhc3Qgb3BlcmF0aW9uCisJICogb2NjYXNpb25hbGx5IGNhdXNlIHByb2JsZW1zIHdpdGggdHJhbnNmZXIgb2YgZmlyc3QgZG1hCisJICogYmxvY2suICBJbml0aWFsaXppbmcgdGhlbSB0byB6ZXJvIHNlZW1zIHRvIGZpeCB0aGUgcHJvYmxlbS4gKi8KKwlpZiAoZG1hX2NoYW5uZWwpIHsKKwkJd3JpdGVsKDAsCisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfVFJBTlNGRVJfU0laRV9SRUcpOworCQl3cml0ZWwoMCwgcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUExX1BDSV9BRERSRVNTX1JFRyk7CisJCXdyaXRlbCgwLAorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUExX0xPQ0FMX0FERFJFU1NfUkVHKTsKKwkJd3JpdGVsKGRlc2NyaXB0b3JfYml0cywKKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMV9ERVNDUklQVE9SX1JFRyk7CisJfSBlbHNlIHsKKwkJd3JpdGVsKDAsCisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfVFJBTlNGRVJfU0laRV9SRUcpOworCQl3cml0ZWwoMCwgcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX1BDSV9BRERSRVNTX1JFRyk7CisJCXdyaXRlbCgwLAorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0xPQ0FMX0FERFJFU1NfUkVHKTsKKwkJd3JpdGVsKGRlc2NyaXB0b3JfYml0cywKKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9ERVNDUklQVE9SX1JFRyk7CisJfQorfQorCitzdGF0aWMgaW50IGFpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVpbnQzMl90IGJpdHM7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsOworCisJZGlzYWJsZV9haV9wYWNpbmcoZGV2KTsKKwlhYm9ydF9kbWEoZGV2LCAxKTsKKworCXJldHZhbCA9IHNldHVwX2NoYW5uZWxfcXVldWUoZGV2LCBjbWQpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJLy8gbWFrZSBzdXJlIGludGVybmFsIGNhbGlicmF0aW9uIHNvdXJjZSBpcyB0dXJuZWQgb2ZmCisJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBDQUxJQlJBVElPTl9SRUcpOworCisJc2V0X2FpX3BhY2luZyhkZXYsIGNtZCk7CisKKwlzZXR1cF9zYW1wbGVfY291bnRlcnMoZGV2LCBjbWQpOworCisJZW5hYmxlX2FpX2ludGVycnVwdHMoZGV2LCBjbWQpOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJLyogc2V0IG1vZGUsIGFsbG93IGNvbnZlcnNpb25zIHRocm91Z2ggc29mdHdhcmUgZ2F0ZSAqLworCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgfD0gQURDX1NXX0dBVEVfQklUOworCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgJj0gfkFEQ19ESVRIRVJfQklUOworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgIT0gTEFZT1VUXzQwMjApIHsKKwkJcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyAmPSB+QURDX01PREVfTUFTSzsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpCisJCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzIHw9IGFkY19tb2RlX2JpdHMoMTMpOwkvLyBnb29kIG9sZCBtb2RlIDEzCisJCWVsc2UKKwkJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgfD0gYWRjX21vZGVfYml0cyg4KTsJLy8gbW9kZSA4LiAgV2hhdCBlbHNlIGNvdWxkIHlvdSBuZWVkPworCX0gZWxzZSB7CisJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgJj0gfkNIQU5ORUxfTU9ERV80MDIwX01BU0s7CisJCWlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSA0KQorCQkJcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyB8PSBGT1VSX0NIQU5ORUxfNDAyMF9CSVRTOworCQllbHNlIGlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSAyKQorCQkJcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyB8PSBUV09fQ0hBTk5FTF80MDIwX0JJVFM7CisJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgJj0gfkFEQ19MT19DSEFOTkVMXzQwMjBfTUFTSzsKKwkJcHJpdihkZXYpLT5hZGNfY29udHJvbDFfYml0cyB8PQorCQkJYWRjX2xvX2NoYW5fNDAyMF9iaXRzKENSX0NIQU4oY21kLT5jaGFubGlzdFswXSkpOworCQlwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzICY9IH5BRENfSElfQ0hBTk5FTF80MDIwX01BU0s7CisJCXByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMgfD0KKwkJCWFkY19oaV9jaGFuXzQwMjBfYml0cyhDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbY21kLT4KKwkJCQkJY2hhbmxpc3RfbGVuIC0gMV0pKTsKKwl9CisJd3JpdGV3KHByaXYoZGV2KS0+YWRjX2NvbnRyb2wxX2JpdHMsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfQ09OVFJPTDFfUkVHKTsKKwlERUJVR19QUklOVCgiY29udHJvbDEgYml0cyAweCV4XG4iLCBwcml2KGRldiktPmFkY19jb250cm9sMV9iaXRzKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJLy8gY2xlYXIgYWRjIGJ1ZmZlcgorCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0JVRkZFUl9DTEVBUl9SRUcpOworCisJaWYgKChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgPT0gMCB8fAorCQlib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJcHJpdihkZXYpLT5haV9kbWFfaW5kZXggPSAwOworCisJCS8vIHNldCBkbWEgdHJhbnNmZXIgc2l6ZQorCQlmb3IgKGkgPSAwOyBpIDwgYWlfZG1hX3JpbmdfY291bnQoYm9hcmQoZGV2KSk7IGkrKykKKwkJCXByaXYoZGV2KS0+YWlfZG1hX2Rlc2NbaV0udHJhbnNmZXJfc2l6ZSA9CisJCQkJY3B1X3RvX2xlMzIoZG1hX3RyYW5zZmVyX3NpemUoZGV2KSAqCisJCQkJc2l6ZW9mKHVpbnQxNl90KSk7CisKKwkJLy8gZ2l2ZSBsb2NhdGlvbiBvZiBmaXJzdCBkbWEgZGVzY3JpcHRvcgorCQlsb2FkX2ZpcnN0X2RtYV9kZXNjcmlwdG9yKGRldiwgMSwKKwkJCXByaXYoZGV2KS0+CisJCQlhaV9kbWFfZGVzY19idXNfYWRkciB8IFBMWF9ERVNDX0lOX1BDSV9CSVQgfAorCQkJUExYX0lOVFJfVEVSTV9DT1VOVCB8IFBMWF9YRkVSX0xPQ0FMX1RPX1BDSSk7CisKKwkJZG1hX3N0YXJ0X3N5bmMoZGV2LCAxKTsKKwl9CisKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKSB7CisJCS8qIHNldCBzb3VyY2UgZm9yIGV4dGVybmFsIHRyaWdnZXJzICovCisJCWJpdHMgPSAwOworCQlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYgQ1JfQ0hBTihjbWQtPnN0YXJ0X2FyZykpCisJCQliaXRzIHw9IEVYVF9TVEFSVF9UUklHX0JOQ19CSVQ7CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUICYmIENSX0NIQU4oY21kLT5zdG9wX2FyZykpCisJCQliaXRzIHw9IEVYVF9TVE9QX1RSSUdfQk5DX0JJVDsKKwkJd3JpdGV3KGJpdHMsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQVFfQVRSSUdfTE9XXzQwMjBfUkVHKTsKKwl9CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8qIGVuYWJsZSBwYWNpbmcsIHRyaWdnZXJpbmcsIGV0YyAqLworCWJpdHMgPSBBRENfRU5BQkxFX0JJVCB8IEFEQ19TT0ZUX0dBVEVfQklUUyB8IEFEQ19HQVRFX0xFVkVMX0JJVDsKKwlpZiAoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpCisJCWJpdHMgfD0gQURDX0RNQV9ESVNBQkxFX0JJVDsKKwkvLyBzZXQgc3RhcnQgdHJpZ2dlcgorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQliaXRzIHw9IEFEQ19TVEFSVF9UUklHX0VYVF9CSVRTOworCQlpZiAoY21kLT5zdGFydF9hcmcgJiBDUl9JTlZFUlQpCisJCQliaXRzIHw9IEFEQ19TVEFSVF9UUklHX0ZBTExJTkdfQklUOworCX0gZWxzZSBpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cpCisJCWJpdHMgfD0gQURDX1NUQVJUX1RSSUdfU09GVF9CSVRTOworCWlmICh1c2VfaHdfc2FtcGxlX2NvdW50ZXIoY21kKSkKKwkJYml0cyB8PSBBRENfU0FNUExFX0NPVU5URVJfRU5fQklUOworCXdyaXRldyhiaXRzLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX0NPTlRST0wwX1JFRyk7CisJREVCVUdfUFJJTlQoImNvbnRyb2wwIGJpdHMgMHgleFxuIiwgYml0cyk7CisKKwlwcml2KGRldiktPmFpX2NtZF9ydW5uaW5nID0gMTsKKworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBzdGFydCBhcXVpc2l0aW9uCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKSB7CisJCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1NUQVJUX1JFRyk7CisJCURFQlVHX1BSSU5UKCJzb2Z0IHRyaWdcbiIpOworCX0KKworCXJldHVybiAwOworfQorCisvLyByZWFkIG51bV9zYW1wbGVzIGZyb20gMTYgYml0IHdpZGUgYWkgZmlmbworc3RhdGljIHZvaWQgcGlvX2RyYWluX2FpX2ZpZm9fMTYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBpOworCXVpbnQxNl90IHByZXBvc3RfYml0czsKKwlpbnQgcmVhZF9zZWdtZW50LCByZWFkX2luZGV4LCB3cml0ZV9zZWdtZW50LCB3cml0ZV9pbmRleDsKKwlpbnQgbnVtX3NhbXBsZXM7CisKKwlkbyB7CisJCS8vIGdldCBsZWFzdCBzaWduaWZpY2FudCAxNSBiaXRzCisJCXJlYWRfaW5kZXggPQorCQkJcmVhZHcocHJpdihkZXYpLT5tYWluX2lvYmFzZSArCisJCQlBRENfUkVBRF9QTlRSX1JFRykgJiAweDdmZmY7CisJCXdyaXRlX2luZGV4ID0KKwkJCXJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKworCQkJQURDX1dSSVRFX1BOVFJfUkVHKSAmIDB4N2ZmZjsKKwkJLyogR2V0IG1vc3Qgc2lnbmlmaWNhbnQgYml0cyAoZ3JleSBjb2RlKS4gIERpZmZlcmVudCBib2FyZHMgdXNlIGRpZmZlcmVudCBjb2RlCisJCSAqIHNvIHVzZSBhIHNjaGVtZSB0aGF0IGRvZXNuJ3QgZGVwZW5kIG9uIGVuY29kaW5nLiAgVGhpcyByZWFkIG11c3QKKwkJICogb2NjdXIgYWZ0ZXIgcmVhZGluZyBsZWFzdCBzaWduaWZpY2FudCAxNSBiaXRzIHRvIGF2b2lkIHJhY2UKKwkJICogd2l0aCBmaWZvIHN3aXRjaGluZyB0byBuZXh0IHNlZ21lbnQuICovCisJCXByZXBvc3RfYml0cyA9IHJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBQUkVQT1NUX1JFRyk7CisKKwkJLyogaWYgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgYXJlIG5vdCBvbiB0aGUgc2FtZSBmaWZvIHNlZ21lbnQsIHJlYWQgdG8gdGhlCisJCSAqIGVuZCBvZiB0aGUgcmVhZCBzZWdtZW50ICovCisJCXJlYWRfc2VnbWVudCA9IGFkY191cHBlcl9yZWFkX3B0cl9jb2RlKHByZXBvc3RfYml0cyk7CisJCXdyaXRlX3NlZ21lbnQgPSBhZGNfdXBwZXJfd3JpdGVfcHRyX2NvZGUocHJlcG9zdF9iaXRzKTsKKworCQlERUJVR19QUklOVCgiIHJkIHNlZyAlaSwgd3J0IHNlZyAlaSwgcmQgaWR4ICVpLCB3cnQgaWR4ICVpXG4iLAorCQkJcmVhZF9zZWdtZW50LCB3cml0ZV9zZWdtZW50LCByZWFkX2luZGV4LCB3cml0ZV9pbmRleCk7CisKKwkJaWYgKHJlYWRfc2VnbWVudCAhPSB3cml0ZV9zZWdtZW50KQorCQkJbnVtX3NhbXBsZXMgPQorCQkJCXByaXYoZGV2KS0+YWlfZmlmb19zZWdtZW50X2xlbmd0aCAtIHJlYWRfaW5kZXg7CisJCWVsc2UKKwkJCW51bV9zYW1wbGVzID0gd3JpdGVfaW5kZXggLSByZWFkX2luZGV4OworCisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJCWlmIChwcml2KGRldiktPmFpX2NvdW50ID09IDApCisJCQkJYnJlYWs7CisJCQlpZiAobnVtX3NhbXBsZXMgPiBwcml2KGRldiktPmFpX2NvdW50KSB7CisJCQkJbnVtX3NhbXBsZXMgPSBwcml2KGRldiktPmFpX2NvdW50OworCQkJfQorCQkJcHJpdihkZXYpLT5haV9jb3VudCAtPSBudW1fc2FtcGxlczsKKwkJfQorCisJCWlmIChudW1fc2FtcGxlcyA8IDApIHsKKwkJCXJ0X3ByaW50aygiIGNiX3BjaWRhczY0OiBidWchIG51bV9zYW1wbGVzIDwgMFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCURFQlVHX1BSSU5UKCIgcmVhZCAlaSBzYW1wbGVzIGZyb20gZmlmb1xuIiwgbnVtX3NhbXBsZXMpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1fc2FtcGxlczsgaSsrKSB7CisJCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsCisJCQkJcmVhZHcocHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19GSUZPX1JFRykpOworCQl9CisKKwl9IHdoaWxlIChyZWFkX3NlZ21lbnQgIT0gd3JpdGVfc2VnbWVudCk7Cit9CisKKy8qIFJlYWQgZnJvbSAzMiBiaXQgd2lkZSBhaSBmaWZvIG9mIDQwMjAgLSBkZWFsIHdpdGggaW5zYW5lIGdyZXkgY29kaW5nIG9mIHBvaW50ZXJzLgorICogVGhlIHBjaS00MDIwIGhhcmR3YXJlIG9ubHkgc3VwcG9ydHMKKyAqIGRtYSB0cmFuc2ZlcnMgKGl0IG9ubHkgc3VwcG9ydHMgdGhlIHVzZSBvZiBwaW8gZm9yIGRyYWluaW5nIHRoZSBsYXN0IHJlbWFpbmluZworICogcG9pbnRzIGZyb20gdGhlIGZpZm8gd2hlbiBhIGRhdGEgYXF1aXNpdGlvbiBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCkuCisgKi8KK3N0YXRpYyB2b2lkIHBpb19kcmFpbl9haV9maWZvXzMyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbWF4X3RyYW5zZmVyID0gMTAwMDAwOworCXVpbnQzMl90IGZpZm9fZGF0YTsKKwlpbnQgd3JpdGVfY29kZSA9CisJCXJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBBRENfV1JJVEVfUE5UUl9SRUcpICYgMHg3ZmZmOworCWludCByZWFkX2NvZGUgPQorCQlyZWFkdyhwcml2KGRldiktPm1haW5faW9iYXNlICsgQURDX1JFQURfUE5UUl9SRUcpICYgMHg3ZmZmOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAobWF4X3RyYW5zZmVyID4gcHJpdihkZXYpLT5haV9jb3VudCkgeworCQkJbWF4X3RyYW5zZmVyID0gcHJpdihkZXYpLT5haV9jb3VudDsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyByZWFkX2NvZGUgIT0gd3JpdGVfY29kZSAmJiBpIDwgbWF4X3RyYW5zZmVyOykgeworCQlmaWZvX2RhdGEgPSByZWFkbChwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSArIEFEQ19GSUZPX1JFRyk7CisJCWNmY193cml0ZV90b19idWZmZXIocywgZmlmb19kYXRhICYgMHhmZmZmKTsKKwkJaSsrOworCQlpZiAoaSA8IG1heF90cmFuc2ZlcikgeworCQkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCAoZmlmb19kYXRhID4+IDE2KSAmIDB4ZmZmZik7CisJCQlpKys7CisJCX0KKwkJcmVhZF9jb2RlID0KKwkJCXJlYWR3KHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKworCQkJQURDX1JFQURfUE5UUl9SRUcpICYgMHg3ZmZmOworCX0KKwlwcml2KGRldiktPmFpX2NvdW50IC09IGk7Cit9CisKKy8vIGVtcHR5IGZpZm8KK3N0YXRpYyB2b2lkIHBpb19kcmFpbl9haV9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJcGlvX2RyYWluX2FpX2ZpZm9fMzIoZGV2KTsKKwl9IGVsc2UKKwkJcGlvX2RyYWluX2FpX2ZpZm9fMTYoZGV2KTsKK30KKworc3RhdGljIHZvaWQgZHJhaW5fZG1hX2J1ZmZlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gZGV2LT5yZWFkX3N1YmRldi0+YXN5bmM7CisJdWludDMyX3QgbmV4dF90cmFuc2Zlcl9hZGRyOworCWludCBqOworCWludCBudW1fc2FtcGxlcyA9IDA7CisJdm9pZCAqcGNpX2FkZHJfcmVnOworCisJaWYgKGNoYW5uZWwpCisJCXBjaV9hZGRyX3JlZyA9CisJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfUENJX0FERFJFU1NfUkVHOworCWVsc2UKKwkJcGNpX2FkZHJfcmVnID0KKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9QQ0lfQUREUkVTU19SRUc7CisKKwkvLyBsb29wIHVudGlsIHdlIGhhdmUgcmVhZCBhbGwgdGhlIGZ1bGwgYnVmZmVycworCWZvciAoaiA9IDAsIG5leHRfdHJhbnNmZXJfYWRkciA9IHJlYWRsKHBjaV9hZGRyX3JlZyk7CisJCShuZXh0X3RyYW5zZmVyX2FkZHIgPAorCQkJcHJpdihkZXYpLT5haV9idWZmZXJfYnVzX2FkZHJbcHJpdihkZXYpLT5haV9kbWFfaW5kZXhdCisJCQl8fCBuZXh0X3RyYW5zZmVyX2FkZHIgPj0KKwkJCXByaXYoZGV2KS0+YWlfYnVmZmVyX2J1c19hZGRyW3ByaXYoZGV2KS0+YWlfZG1hX2luZGV4XSArCisJCQlETUFfQlVGRkVSX1NJWkUpICYmIGogPCBhaV9kbWFfcmluZ19jb3VudChib2FyZChkZXYpKTsKKwkJaisrKSB7CisJCS8vIHRyYW5zZmVyIGRhdGEgZnJvbSBkbWEgYnVmZmVyIHRvIGNvbWVkaSBidWZmZXIKKwkJbnVtX3NhbXBsZXMgPSBkbWFfdHJhbnNmZXJfc2l6ZShkZXYpOworCQlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCQlpZiAobnVtX3NhbXBsZXMgPiBwcml2KGRldiktPmFpX2NvdW50KQorCQkJCW51bV9zYW1wbGVzID0gcHJpdihkZXYpLT5haV9jb3VudDsKKwkJCXByaXYoZGV2KS0+YWlfY291bnQgLT0gbnVtX3NhbXBsZXM7CisJCX0KKwkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihkZXYtPnJlYWRfc3ViZGV2LAorCQkJcHJpdihkZXYpLT5haV9idWZmZXJbcHJpdihkZXYpLT5haV9kbWFfaW5kZXhdLAorCQkJbnVtX3NhbXBsZXMgKiBzaXplb2YodWludDE2X3QpKTsKKwkJcHJpdihkZXYpLT5haV9kbWFfaW5kZXggPQorCQkJKHByaXYoZGV2KS0+YWlfZG1hX2luZGV4ICsKKwkJCTEpICUgYWlfZG1hX3JpbmdfY291bnQoYm9hcmQoZGV2KSk7CisKKwkJREVCVUdfUFJJTlQoIm5leHQgYnVmZmVyIGFkZHIgMHglbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZylwcml2KGRldiktPmFpX2J1ZmZlcl9idXNfYWRkcltwcml2KGRldiktPgorCQkJCWFpX2RtYV9pbmRleF0pOworCQlERUJVR19QUklOVCgicGNpIGFkZHIgcmVnIDB4JXhcbiIsIG5leHRfdHJhbnNmZXJfYWRkcik7CisJfQorCS8qIFhYWCBjaGVjayBmb3IgZG1hIHJpbmcgYnVmZmVyIG92ZXJydW4gKHVzZSBlbmQtb2YtY2hhaW4gYml0IHRvIG1hcmsgbGFzdAorCSAqIHVudXNlZCBidWZmZXIpICovCit9CisKK3ZvaWQgaGFuZGxlX2FpX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLAorCXVuc2lnbmVkIGludCBwbHhfc3RhdHVzKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1aW50OF90IGRtYTFfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBjaGVjayBmb3IgZmlmbyBvdmVycnVuCisJaWYgKHN0YXR1cyAmIEFEQ19PVkVSUlVOX0JJVCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiZmlmbyBvdmVycnVuIik7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwl9CisJLy8gc3BpbiBsb2NrIG1ha2VzIHN1cmUgbm9vbmUgZWxzZSBjaGFuZ2VzIHBseCBkbWEgY29udHJvbCByZWcKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkbWExX3N0YXR1cyA9IHJlYWRiKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMV9DU19SRUcpOworCWlmIChwbHhfc3RhdHVzICYgSUNTX0RNQTFfQSkgewkvLyBkbWEgY2hhbiAxIGludGVycnVwdAorCQl3cml0ZWIoKGRtYTFfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpIHwgUExYX0NMRUFSX0RNQV9JTlRSX0JJVCwKKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMV9DU19SRUcpOworCQlERUJVR19QUklOVCgiZG1hMSBzdGF0dXMgMHgleFxuIiwgZG1hMV9zdGF0dXMpOworCisJCWlmIChkbWExX3N0YXR1cyAmIFBMWF9ETUFfRU5fQklUKSB7CisJCQlkcmFpbl9kbWFfYnVmZmVycyhkZXYsIDEpOworCQl9CisJCURFQlVHX1BSSU5UKCIgY2xlYXJlZCBkbWEgY2gxIGludGVycnVwdFxuIik7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoc3RhdHVzICYgQURDX0RPTkVfQklUKQorCQlERUJVR19QUklOVCgiYWRjIGRvbmUgaW50ZXJydXB0XG4iKTsKKworCS8vIGRyYWluIGZpZm8gd2l0aCBwaW8KKwlpZiAoKHN0YXR1cyAmIEFEQ19ET05FX0JJVCkgfHwKKwkJKChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgJiYKKwkJCShzdGF0dXMgJiBBRENfSU5UUl9QRU5ESU5HX0JJVCkgJiYKKwkJCShib2FyZChkZXYpLT5sYXlvdXQgIT0gTEFZT1VUXzQwMjApKSkgeworCQlERUJVR19QUklOVCgicGlvIGZpZm8gZHJhaW5cbiIpOworCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJaWYgKHByaXYoZGV2KS0+YWlfY21kX3J1bm5pbmcpIHsKKwkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCQlwaW9fZHJhaW5fYWlfZmlmbyhkZXYpOworCQl9IGVsc2UKKwkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJfQorCS8vIGlmIHdlIGFyZSBoYXZlIGFsbCB0aGUgZGF0YSwgdGhlbiBxdWl0CisJaWYgKChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgcHJpdihkZXYpLT5haV9jb3VudCA8PSAwKSB8fAorCQkoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCAmJiAoc3RhdHVzICYgQURDX1NUT1BfQklUKSkpIHsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKworCWNmY19oYW5kbGVfZXZlbnRzKGRldiwgcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHByZXZfYW9fZG1hX2luZGV4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCBidWZmZXJfaW5kZXg7CisKKwlpZiAocHJpdihkZXYpLT5hb19kbWFfaW5kZXggPT0gMCkKKwkJYnVmZmVyX2luZGV4ID0gQU9fRE1BX1JJTkdfQ09VTlQgLSAxOworCWVsc2UKKwkJYnVmZmVyX2luZGV4ID0gcHJpdihkZXYpLT5hb19kbWFfaW5kZXggLSAxOworCXJldHVybiBidWZmZXJfaW5kZXg7Cit9CisKK3N0YXRpYyBpbnQgbGFzdF9hb19kbWFfbG9hZF9jb21wbGV0ZWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IGJ1ZmZlcl9pbmRleDsKKwl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfYWRkcmVzczsKKwl1bnNpZ25lZCBzaG9ydCBkbWFfc3RhdHVzOworCisJYnVmZmVyX2luZGV4ID0gcHJldl9hb19kbWFfaW5kZXgoZGV2KTsKKwlkbWFfc3RhdHVzID0gcmVhZGIocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0NTX1JFRyk7CisJaWYgKChkbWFfc3RhdHVzICYgUExYX0RNQV9ET05FX0JJVCkgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl0cmFuc2Zlcl9hZGRyZXNzID0KKwkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX1BDSV9BRERSRVNTX1JFRyk7CisJaWYgKHRyYW5zZmVyX2FkZHJlc3MgIT0gcHJpdihkZXYpLT5hb19idWZmZXJfYnVzX2FkZHJbYnVmZmVyX2luZGV4XSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBhb19zdG9wcGVkX2J5X2Vycm9yKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUpCisJCXJldHVybiAxOworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKHByaXYoZGV2KS0+YW9fY291bnQpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGxhc3RfYW9fZG1hX2xvYWRfY29tcGxldGVkKGRldikgPT0gMCkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgYW9fZG1hX25lZWRzX3Jlc3RhcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgc2hvcnQgZG1hX3N0YXR1cykKK3sKKwlpZiAoKGRtYV9zdGF0dXMgJiBQTFhfRE1BX0RPTkVfQklUKSA9PSAwIHx8CisJCShkbWFfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpID09IDApCisJCXJldHVybiAwOworCWlmIChsYXN0X2FvX2RtYV9sb2FkX2NvbXBsZXRlZChkZXYpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCByZXN0YXJ0X2FvX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBpbnQgZG1hX2Rlc2NfYml0czsKKworCWRtYV9kZXNjX2JpdHMgPQorCQlyZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfREVTQ1JJUFRPUl9SRUcpOworCWRtYV9kZXNjX2JpdHMgJj0gflBMWF9FTkRfT0ZfQ0hBSU5fQklUOworCURFQlVHX1BSSU5UKCJyZXN0YXJ0aW5nIGFvIGRtYSwgZGVzY3JpcHRvciByZWcgMHgleFxuIiwgZG1hX2Rlc2NfYml0cyk7CisJbG9hZF9maXJzdF9kbWFfZGVzY3JpcHRvcihkZXYsIDAsIGRtYV9kZXNjX2JpdHMpOworCisJZG1hX3N0YXJ0X3N5bmMoZGV2LCAwKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2FvX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLAorCXVuc2lnbmVkIGludCBwbHhfc3RhdHVzKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT53cml0ZV9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZDsKKwl1aW50OF90IGRtYTBfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBib2FyZCBtaWdodCBub3Qgc3VwcG9ydCBhbywgaW4gd2hpY2ggY2FzZSB3cml0ZV9zdWJkZXYgaXMgTlVMTCAqLworCWlmIChzID09IE5VTEwpCisJCXJldHVybjsKKwlhc3luYyA9IHMtPmFzeW5jOworCWNtZCA9ICZhc3luYy0+Y21kOworCisJLy8gc3BpbiBsb2NrIG1ha2VzIHN1cmUgbm9vbmUgZWxzZSBjaGFuZ2VzIHBseCBkbWEgY29udHJvbCByZWcKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkbWEwX3N0YXR1cyA9IHJlYWRiKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9DU19SRUcpOworCWlmIChwbHhfc3RhdHVzICYgSUNTX0RNQTBfQSkgewkvLyBkbWEgY2hhbiAwIGludGVycnVwdAorCQlpZiAoKGRtYTBfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpCisJCQkmJiAhKGRtYTBfc3RhdHVzICYgUExYX0RNQV9ET05FX0JJVCkpCisJCQl3cml0ZWIoUExYX0RNQV9FTl9CSVQgfCBQTFhfQ0xFQVJfRE1BX0lOVFJfQklULAorCQkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9DU19SRUcpOworCQllbHNlCisJCQl3cml0ZWIoUExYX0NMRUFSX0RNQV9JTlRSX0JJVCwKKwkJCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKTsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJREVCVUdfUFJJTlQoImRtYTAgc3RhdHVzIDB4JXhcbiIsIGRtYTBfc3RhdHVzKTsKKwkJaWYgKGRtYTBfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpIHsKKwkJCWxvYWRfYW9fZG1hKGRldiwgY21kKTsKKwkJCS8qIHRyeSB0byByZWNvdmVyIGZyb20gZG1hIGVuZC1vZi1jaGFpbiBldmVudCAqLworCQkJaWYgKGFvX2RtYV9uZWVkc19yZXN0YXJ0KGRldiwgZG1hMF9zdGF0dXMpKQorCQkJCXJlc3RhcnRfYW9fZG1hKGRldik7CisJCX0KKwkJREVCVUdfUFJJTlQoIiBjbGVhcmVkIGRtYSBjaDAgaW50ZXJydXB0XG4iKTsKKwl9IGVsc2UKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWlmICgoc3RhdHVzICYgREFDX0RPTkVfQklUKSkgeworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCWlmIChhb19zdG9wcGVkX2J5X2Vycm9yKGRldiwgY21kKSkKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCQlERUJVR19QUklOVCgicGx4IGRtYTAgZGVzYyByZWcgMHgleFxuIiwKKwkJCXJlYWRsKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKworCQkJCVBMWF9ETUEwX0RFU0NSSVBUT1JfUkVHKSk7CisJCURFQlVHX1BSSU5UKCJwbHggZG1hMCBhZGRyZXNzIHJlZyAweCV4XG4iLAorCQkJcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArCisJCQkJUExYX0RNQTBfUENJX0FERFJFU1NfUkVHKSk7CisJfQorCWNmY19oYW5kbGVfZXZlbnRzKGRldiwgcyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJdW5zaWduZWQgc2hvcnQgc3RhdHVzOworCXVpbnQzMl90IHBseF9zdGF0dXM7CisJdWludDMyX3QgcGx4X2JpdHM7CisKKwlwbHhfc3RhdHVzID0gcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9JTlRSQ1NfUkVHKTsKKwlzdGF0dXMgPSByZWFkdyhwcml2KGRldiktPm1haW5faW9iYXNlICsgSFdfU1RBVFVTX1JFRyk7CisKKwlERUJVR19QUklOVCgiY2JfcGNpZGFzNjQ6IGh3IHN0YXR1cyAweCV4ICIsIHN0YXR1cyk7CisJREVCVUdfUFJJTlQoInBseCBzdGF0dXMgMHgleFxuIiwgcGx4X3N0YXR1cyk7CisKKwkvKiBhbiBpbnRlcnJ1cHQgYmVmb3JlIGFsbCB0aGUgcG9zdGNvbmZpZyBzdHVmZiBnZXRzIGRvbmUgY291bGQKKwkgKiBjYXVzZSBhIE5VTEwgZGVyZWZlcmVuY2UgaWYgd2UgY29udGludWUgdGhyb3VnaCB0aGUKKwkgKiBpbnRlcnJ1cHQgaGFuZGxlciAqLworCWlmIChkZXYtPmF0dGFjaGVkID09IDApIHsKKwkJREVCVUdfUFJJTlQoImNiX3BjaWRhczY0OiBwcmVtYXR1cmUgaW50ZXJydXB0LCBpZ25vcmluZyIsCisJCQlzdGF0dXMpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCWhhbmRsZV9haV9pbnRlcnJ1cHQoZGV2LCBzdGF0dXMsIHBseF9zdGF0dXMpOworCWhhbmRsZV9hb19pbnRlcnJ1cHQoZGV2LCBzdGF0dXMsIHBseF9zdGF0dXMpOworCisJLy8gY2xlYXIgcG9zc2libGUgcGx4OTA4MCBpbnRlcnJ1cHQgc291cmNlcworCWlmIChwbHhfc3RhdHVzICYgSUNTX0xESUEpIHsJLy8gY2xlYXIgbG9jYWwgZG9vcmJlbGwgaW50ZXJydXB0CisJCXBseF9iaXRzID0gcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9EQlJfT1VUX1JFRyk7CisJCXdyaXRlbChwbHhfYml0cywgcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9EQlJfT1VUX1JFRyk7CisJCURFQlVHX1BSSU5UKCIgY2xlYXJlZCBsb2NhbCBkb29yYmVsbCBiaXRzIDB4JXhcbiIsIHBseF9iaXRzKTsKKwl9CisKKwlERUJVR19QUklOVCgiZXhpdGluZyBoYW5kbGVyXG4iKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBhYm9ydF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBzcGlubG9jayBmb3IgcGx4IGRtYSBjb250cm9sL3N0YXR1cyByZWcKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXBseDkwODBfYWJvcnRfZG1hKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UsIGNoYW5uZWwpOworCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBhaV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJaWYgKHByaXYoZGV2KS0+YWlfY21kX3J1bm5pbmcgPT0gMCkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJcHJpdihkZXYpLT5haV9jbWRfcnVubmluZyA9IDA7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWRpc2FibGVfYWlfcGFjaW5nKGRldik7CisKKwlhYm9ydF9kbWEoZGV2LCAxKTsKKworCURFQlVHX1BSSU5UKCJhaSBjYW5jZWxlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaW50IHJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCisJLy8gZG8gc29tZSBpbml0aWFsaXppbmcKKwl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIERBQ19DT05UUk9MMF9SRUcpOworCisJLy8gc2V0IHJhbmdlCisJc2V0X2RhY19yYW5nZV9iaXRzKGRldiwgJnByaXYoZGV2KS0+ZGFjX2NvbnRyb2wxX2JpdHMsIGNoYW4sIHJhbmdlKTsKKwl3cml0ZXcocHJpdihkZXYpLT5kYWNfY29udHJvbDFfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIERBQ19DT05UUk9MMV9SRUcpOworCisJLy8gd3JpdGUgdG8gY2hhbm5lbAorCWlmIChib2FyZChkZXYpLT5sYXlvdXQgPT0gTEFZT1VUXzQwMjApIHsKKwkJd3JpdGV3KGRhdGFbMF0gJiAweGZmLAorCQkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIGRhY19sc2JfNDAyMF9yZWcoY2hhbikpOworCQl3cml0ZXcoKGRhdGFbMF0gPj4gOCkgJiAweGYsCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgZGFjX21zYl80MDIwX3JlZyhjaGFuKSk7CisJfSBlbHNlIHsKKwkJd3JpdGV3KGRhdGFbMF0sIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBkYWNfY29udmVydF9yZWcoY2hhbikpOworCX0KKworCS8vIHJlbWVtYmVyIG91dHB1dCB2YWx1ZQorCXByaXYoZGV2KS0+YW9fdmFsdWVbY2hhbl0gPSBkYXRhWzBdOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYW9fcmVhZGJhY2tfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IHByaXYoZGV2KS0+YW9fdmFsdWVbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kYWNfY29udHJvbDBfcmVnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgYml0cyA9IERBQ19FTkFCTEVfQklUIHwgV0FWRUZPUk1fR0FURV9MRVZFTF9CSVQgfAorCQlXQVZFRk9STV9HQVRFX0VOQUJMRV9CSVQgfCBXQVZFRk9STV9HQVRFX1NFTEVDVF9CSVQ7CisKKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJYml0cyB8PSBXQVZFRk9STV9UUklHX0VYVF9CSVRTOworCQlpZiAoY21kLT5zdGFydF9hcmcgJiBDUl9JTlZFUlQpCisJCQliaXRzIHw9IFdBVkVGT1JNX1RSSUdfRkFMTElOR19CSVQ7CisJfSBlbHNlIHsKKwkJYml0cyB8PSBXQVZFRk9STV9UUklHX1NPRlRfQklUUzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHsKKwkJYml0cyB8PSBEQUNfRVhUX1VQREFURV9FTkFCTEVfQklUOworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAmIENSX0lOVkVSVCkKKwkJCWJpdHMgfD0gREFDX0VYVF9VUERBVEVfRkFMTElOR19CSVQ7CisJfQorCXdyaXRldyhiaXRzLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX0NPTlRST0wwX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kYWNfY29udHJvbDFfcmVnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCWludCBjaGFubmVsLCByYW5nZTsKKworCQljaGFubmVsID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKTsKKwkJc2V0X2RhY19yYW5nZV9iaXRzKGRldiwgJnByaXYoZGV2KS0+ZGFjX2NvbnRyb2wxX2JpdHMsIGNoYW5uZWwsCisJCQlyYW5nZSk7CisJfQorCXByaXYoZGV2KS0+ZGFjX2NvbnRyb2wxX2JpdHMgfD0gREFDX1NXX0dBVEVfQklUOworCXdyaXRldyhwcml2KGRldiktPmRhY19jb250cm9sMV9iaXRzLAorCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX0NPTlRST0wxX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kYWNfc2VsZWN0X3JlZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJdWludDE2X3QgYml0czsKKwl1bnNpZ25lZCBpbnQgZmlyc3RfY2hhbm5lbCwgbGFzdF9jaGFubmVsOworCisJZmlyc3RfY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisJbGFzdF9jaGFubmVsID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2NtZC0+Y2hhbmxpc3RfbGVuIC0gMV0pOworCWlmIChsYXN0X2NoYW5uZWwgPCBmaXJzdF9jaGFubmVsKQorCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISBsYXN0IGFvIGNoYW5uZWwgPCBmaXJzdCBhbyBjaGFubmVsIik7CisKKwliaXRzID0gKGZpcnN0X2NoYW5uZWwgJiAweDcpIHwgKGxhc3RfY2hhbm5lbCAmIDB4NykgPDwgMzsKKworCXdyaXRldyhiaXRzLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX1NFTEVDVF9SRUcpOworfQorCitzdGF0aWMgdm9pZCBzZXRfZGFjX2ludGVydmFsX3JlZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXVuc2lnbmVkIGludCBkaXZpc29yOworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUikKKwkJcmV0dXJuOworCisJZGl2aXNvciA9IGdldF9hb19kaXZpc29yKGNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MpOworCWlmIChkaXZpc29yID4gbWF4X2NvdW50ZXJfdmFsdWUpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyEgYW8gZGl2aXNvciB0b28gYmlnIik7CisJCWRpdmlzb3IgPSBtYXhfY291bnRlcl92YWx1ZTsKKwl9CisJd3JpdGV3KGRpdmlzb3IgJiAweGZmZmYsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfU0FNUExFX0lOVEVSVkFMX0xPV0VSX1JFRyk7CisJd3JpdGV3KChkaXZpc29yID4+IDE2KSAmIDB4ZmYsCisJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfU0FNUExFX0lOVEVSVkFMX1VQUEVSX1JFRyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbG9hZF9hb19kbWFfYnVmZmVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCWNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXVuc2lnbmVkIGludCBudW1fYnl0ZXMsIGJ1ZmZlcl9pbmRleCwgcHJldl9idWZmZXJfaW5kZXg7CisJdW5zaWduZWQgaW50IG5leHRfYml0czsKKworCWJ1ZmZlcl9pbmRleCA9IHByaXYoZGV2KS0+YW9fZG1hX2luZGV4OworCXByZXZfYnVmZmVyX2luZGV4ID0gcHJldl9hb19kbWFfaW5kZXgoZGV2KTsKKworCURFQlVHX1BSSU5UKCJhdHRlbXB0aW5nIHRvIGxvYWQgYW8gYnVmZmVyICVpICgweCV4KVxuIiwgYnVmZmVyX2luZGV4LAorCQlwcml2KGRldiktPmFvX2J1ZmZlcl9idXNfYWRkcltidWZmZXJfaW5kZXhdKTsKKworCW51bV9ieXRlcyA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShkZXYtPndyaXRlX3N1YmRldi0+YXN5bmMpOworCWlmIChudW1fYnl0ZXMgPiBETUFfQlVGRkVSX1NJWkUpCisJCW51bV9ieXRlcyA9IERNQV9CVUZGRVJfU0laRTsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIG51bV9ieXRlcyA+IHByaXYoZGV2KS0+YW9fY291bnQpCisJCW51bV9ieXRlcyA9IHByaXYoZGV2KS0+YW9fY291bnQ7CisJbnVtX2J5dGVzIC09IG51bV9ieXRlcyAlIGJ5dGVzX2luX3NhbXBsZTsKKworCWlmIChudW1fYnl0ZXMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlERUJVR19QUklOVCgibG9hZGluZyAlaSBieXRlc1xuIiwgbnVtX2J5dGVzKTsKKworCW51bV9ieXRlcyA9IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKGRldi0+d3JpdGVfc3ViZGV2LAorCQlwcml2KGRldiktPmFvX2J1ZmZlcltidWZmZXJfaW5kZXhdLCBudW1fYnl0ZXMpOworCXByaXYoZGV2KS0+YW9fZG1hX2Rlc2NbYnVmZmVyX2luZGV4XS50cmFuc2Zlcl9zaXplID0KKwkJY3B1X3RvX2xlMzIobnVtX2J5dGVzKTsKKwkvKiBzZXQgZW5kIG9mIGNoYWluIGJpdCBzbyB3ZSBjYXRjaCB1bmRlcnJ1bnMgKi8KKwluZXh0X2JpdHMgPSBsZTMyX3RvX2NwdShwcml2KGRldiktPmFvX2RtYV9kZXNjW2J1ZmZlcl9pbmRleF0ubmV4dCk7CisJbmV4dF9iaXRzIHw9IFBMWF9FTkRfT0ZfQ0hBSU5fQklUOworCXByaXYoZGV2KS0+YW9fZG1hX2Rlc2NbYnVmZmVyX2luZGV4XS5uZXh0ID0gY3B1X3RvX2xlMzIobmV4dF9iaXRzKTsKKwkvKiBjbGVhciBlbmQgb2YgY2hhaW4gYml0IG9uIHByZXZpb3VzIGJ1ZmZlciBub3cgdGhhdCB3ZSBoYXZlIHNldCBpdAorCSAqIGZvciB0aGUgbGFzdCBidWZmZXIgKi8KKwluZXh0X2JpdHMgPSBsZTMyX3RvX2NwdShwcml2KGRldiktPmFvX2RtYV9kZXNjW3ByZXZfYnVmZmVyX2luZGV4XS5uZXh0KTsKKwluZXh0X2JpdHMgJj0gflBMWF9FTkRfT0ZfQ0hBSU5fQklUOworCXByaXYoZGV2KS0+YW9fZG1hX2Rlc2NbcHJldl9idWZmZXJfaW5kZXhdLm5leHQgPSBjcHVfdG9fbGUzMihuZXh0X2JpdHMpOworCisJcHJpdihkZXYpLT5hb19kbWFfaW5kZXggPSAoYnVmZmVyX2luZGV4ICsgMSkgJSBBT19ETUFfUklOR19DT1VOVDsKKwlwcml2KGRldiktPmFvX2NvdW50IC09IG51bV9ieXRlczsKKworCXJldHVybiBudW1fYnl0ZXM7Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfYW9fZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzOworCXVuc2lnbmVkIGludCBuZXh0X3RyYW5zZmVyX2FkZHI7CisJdm9pZCAqcGNpX2FkZHJfcmVnID0KKwkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX1BDSV9BRERSRVNTX1JFRzsKKwl1bnNpZ25lZCBpbnQgYnVmZmVyX2luZGV4OworCisJZG8geworCQlidWZmZXJfaW5kZXggPSBwcml2KGRldiktPmFvX2RtYV9pbmRleDsKKwkJLyogZG9uJ3Qgb3ZlcndyaXRlIGRhdGEgdGhhdCBoYXNuJ3QgYmVlbiB0cmFuc2ZlcnJlZCB5ZXQgKi8KKwkJbmV4dF90cmFuc2Zlcl9hZGRyID0gcmVhZGwocGNpX2FkZHJfcmVnKTsKKwkJaWYgKG5leHRfdHJhbnNmZXJfYWRkciA+PQorCQkJcHJpdihkZXYpLT5hb19idWZmZXJfYnVzX2FkZHJbYnVmZmVyX2luZGV4XQorCQkJJiYgbmV4dF90cmFuc2Zlcl9hZGRyIDwKKwkJCXByaXYoZGV2KS0+YW9fYnVmZmVyX2J1c19hZGRyW2J1ZmZlcl9pbmRleF0gKworCQkJRE1BX0JVRkZFUl9TSVpFKQorCQkJcmV0dXJuOworCQludW1fYnl0ZXMgPSBsb2FkX2FvX2RtYV9idWZmZXIoZGV2LCBjbWQpOworCX0gd2hpbGUgKG51bV9ieXRlcyA+PSBETUFfQlVGRkVSX1NJWkUpOworfQorCitzdGF0aWMgaW50IHByZXBfYW9fZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzOworCWludCBpOworCisJLyogY2xlYXIgcXVldWUgcG9pbnRlciB0b28sIHNpbmNlIGV4dGVybmFsIHF1ZXVlIGhhcworCSAqIHdlaXJkIGludGVyYWN0aW9ucyB3aXRoIGFvIGZpZm8gKi8KKwl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEFEQ19RVUVVRV9DTEVBUl9SRUcpOworCXdyaXRldygwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX0JVRkZFUl9DTEVBUl9SRUcpOworCisJbnVtX2J5dGVzID0gKERBQ19GSUZPX1NJWkUgLyAyKSAqIGJ5dGVzX2luX3NhbXBsZTsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmCisJCW51bV9ieXRlcyAvIGJ5dGVzX2luX3NhbXBsZSA+IHByaXYoZGV2KS0+YW9fY291bnQpCisJCW51bV9ieXRlcyA9IHByaXYoZGV2KS0+YW9fY291bnQgKiBieXRlc19pbl9zYW1wbGU7CisJbnVtX2J5dGVzID0gY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIoZGV2LT53cml0ZV9zdWJkZXYsCisJCXByaXYoZGV2KS0+YW9fYm91bmNlX2J1ZmZlciwgbnVtX2J5dGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J5dGVzIC8gYnl0ZXNfaW5fc2FtcGxlOyBpKyspIHsKKwkJd3JpdGV3KHByaXYoZGV2KS0+YW9fYm91bmNlX2J1ZmZlcltpXSwKKwkJCXByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfRklGT19SRUcpOworCX0KKwlwcml2KGRldiktPmFvX2NvdW50IC09IG51bV9ieXRlcyAvIGJ5dGVzX2luX3NhbXBsZTsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIHByaXYoZGV2KS0+YW9fY291bnQgPT0gMCkKKwkJcmV0dXJuIDA7CisJbnVtX2J5dGVzID0gbG9hZF9hb19kbWFfYnVmZmVyKGRldiwgY21kKTsKKwlpZiAobnVtX2J5dGVzID09IDApCisJCXJldHVybiAtMTsKKwlpZiAobnVtX2J5dGVzID49IERNQV9CVUZGRVJfU0laRSkgOworCWxvYWRfYW9fZG1hKGRldiwgY21kKTsKKworCWRtYV9zdGFydF9zeW5jKGRldiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXh0ZXJuYWxfYWlfcXVldWVfaW5fdXNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChkZXYtPnJlYWRfc3ViZGV2LT5idXN5KQorCQlyZXR1cm4gMDsKKwlpZiAoYm9hcmQoZGV2KS0+bGF5b3V0ID09IExBWU9VVF80MDIwKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmICh1c2VfaW50ZXJuYWxfcXVldWVfNnh4eCgmZGV2LT5yZWFkX3N1YmRldi0+YXN5bmMtPmNtZCkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGFvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCWlmIChleHRlcm5hbF9haV9xdWV1ZV9pbl91c2UoZGV2KSkgeworCQl3YXJuX2V4dGVybmFsX3F1ZXVlKGRldik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCS8qIGRpc2FibGUgYW5hbG9nIG91dHB1dCBzeXN0ZW0gZHVyaW5nIHNldHVwICovCisJd3JpdGV3KDB4MCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIERBQ19DT05UUk9MMF9SRUcpOworCisJcHJpdihkZXYpLT5hb19kbWFfaW5kZXggPSAwOworCXByaXYoZGV2KS0+YW9fY291bnQgPSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW47CisKKwlzZXRfZGFjX3NlbGVjdF9yZWcoZGV2LCBjbWQpOworCXNldF9kYWNfaW50ZXJ2YWxfcmVncyhkZXYsIGNtZCk7CisJbG9hZF9maXJzdF9kbWFfZGVzY3JpcHRvcihkZXYsIDAsIHByaXYoZGV2KS0+YW9fZG1hX2Rlc2NfYnVzX2FkZHIgfAorCQlQTFhfREVTQ19JTl9QQ0lfQklUIHwgUExYX0lOVFJfVEVSTV9DT1VOVCk7CisKKwlzZXRfZGFjX2NvbnRyb2wxX3JlZyhkZXYsIGNtZCk7CisJcy0+YXN5bmMtPmludHRyaWcgPSBhb19pbnR0cmlnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnX251bSkKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaW50IHJldHZhbDsKKworCWlmICh0cmlnX251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHZhbCA9IHByZXBfYW9fZG1hKGRldiwgY21kKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIC1FUElQRTsKKworCXNldF9kYWNfY29udHJvbDBfcmVnKGRldiwgY21kKTsKKworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCkKKwkJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBEQUNfU1RBUlRfUkVHKTsKKworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCXVuc2lnbmVkIGludCB0bXBfYXJnOworCWludCBpOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfSU5UIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8vIHVuaXF1ZW5lc3MgY2hlY2sKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19JTlQgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisKKwkvLyBjb21wYXRpYmlsaXR5IGNoZWNrCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQgJiYgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmCisJCWNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgYm9hcmQoZGV2KS0+YW9fc2Nhbl9zcGVlZCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IGJvYXJkKGRldiktPmFvX3NjYW5fc3BlZWQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoZ2V0X2FvX2Rpdmlzb3IoY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCQljbWQtPmZsYWdzKSA+IG1heF9jb3VudGVyX3ZhbHVlKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQkobWF4X2NvdW50ZXJfdmFsdWUgKyAyKSAqIFRJTUVSX0JBU0U7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSAxOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXBfYXJnID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQlnZXRfZGl2aXNvcihjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncykgKiBUSU1FUl9CQVNFOworCQlpZiAodG1wX2FyZyAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQl1bnNpZ25lZCBpbnQgZmlyc3RfY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisJCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSAhPSBmaXJzdF9jaGFubmVsICsgaSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJjaGFubGlzdCBtdXN0IHVzZSBjb25zZWN1dGl2ZSBjaGFubmVscyIpOworCQkJCWVycisrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl3cml0ZXcoMHgwLCBwcml2KGRldiktPm1haW5faW9iYXNlICsgREFDX0NPTlRST0wwX1JFRyk7CisJYWJvcnRfZG1hKGRldiwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlvX2NhbGxiYWNrKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBpb2Jhc2UpCit7CisJaWYgKGRpcikgeworCQl3cml0ZWIoZGF0YSwgKHZvaWQgKikoaW9iYXNlICsgcG9ydCkpOworCQlERUJVR19QUklOVCgid3JvdGUgMHgleCB0byBwb3J0ICVpXG4iLCBkYXRhLCBwb3J0KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHJlYWRiKCh2b2lkICopKGlvYmFzZSArIHBvcnQpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGlvX2NhbGxiYWNrXzQwMjAoaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLCB1bnNpZ25lZCBsb25nIGlvYmFzZSkKK3sKKwlpZiAoZGlyKSB7CisJCXdyaXRldyhkYXRhLCAodm9pZCAqKShpb2Jhc2UgKyAyICogcG9ydCkpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gcmVhZHcoKHZvaWQgKikoaW9iYXNlICsgMiAqIHBvcnQpKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBiaXRzOworCisJYml0cyA9IHJlYWRiKHByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlICsgRElfUkVHKTsKKwliaXRzICY9IDB4ZjsKKwlkYXRhWzFdID0gYml0czsKKwlkYXRhWzBdID0gMDsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRvX3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdICY9IDB4ZjsKKwkvLyB6ZXJvIGJpdHMgd2UgYXJlIGdvaW5nIHRvIGNoYW5nZQorCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCS8vIHNldCBuZXcgYml0cworCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCisJd3JpdGViKHMtPnN0YXRlLCBwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSArIERPX1JFRyk7CisKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkaW9fNjB4eF9jb25maWdfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisKKwltYXNrID0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH5tYXNrOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gbWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIG1hc2spID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIDI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd3JpdGViKHMtPmlvX2JpdHMsCisJCXByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlICsgRElPX0RJUkVDVElPTl82MFhYX1JFRyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkaW9fNjB4eF93Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCXdyaXRlYihzLT5zdGF0ZSwKKwkJCXByaXYoZGV2KS0+ZGlvX2NvdW50ZXJfaW9iYXNlICsgRElPX0RBVEFfNjBYWF9SRUcpOworCX0KKworCWRhdGFbMV0gPSByZWFkYihwcml2KGRldiktPmRpb19jb3VudGVyX2lvYmFzZSArIERJT19EQVRBXzYwWFhfUkVHKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgdm9pZCBjYWxkYWNfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsLAorCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlwcml2KGRldiktPmNhbGRhY19zdGF0ZVtjaGFubmVsXSA9IHZhbHVlOworCisJc3dpdGNoIChib2FyZChkZXYpLT5sYXlvdXQpIHsKKwljYXNlIExBWU9VVF82MFhYOgorCWNhc2UgTEFZT1VUXzY0WFg6CisJCWNhbGRhY184ODAwX3dyaXRlKGRldiwgY2hhbm5lbCwgdmFsdWUpOworCQlicmVhazsKKwljYXNlIExBWU9VVF80MDIwOgorCQljYWxkYWNfaTJjX3dyaXRlKGRldiwgY2hhbm5lbCwgdmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2FsaWJfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qIHJldHVybiBpbW1lZGlhdGVseSBpZiBzZXR0aW5nIGhhc24ndCBjaGFuZ2VkLCBzaW5jZQorCSAqIHByb2dyYW1taW5nIHRoZXNlIHRoaW5ncyBpcyBzbG93ICovCisJaWYgKHByaXYoZGV2KS0+Y2FsZGFjX3N0YXRlW2NoYW5uZWxdID09IGRhdGFbMF0pCisJCXJldHVybiAxOworCisJY2FsZGFjX3dyaXRlKGRldiwgY2hhbm5lbCwgZGF0YVswXSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjYWxpYl9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlkYXRhWzBdID0gcHJpdihkZXYpLT5jYWxkYWNfc3RhdGVbY2hhbm5lbF07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgYWQ4NDAyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJc3RhdGljIGNvbnN0IGludCBiaXRzdHJlYW1fbGVuZ3RoID0gMTA7CisJdW5zaWduZWQgaW50IGJpdCwgcmVnaXN0ZXJfYml0czsKKwl1bnNpZ25lZCBpbnQgYml0c3RyZWFtID0gKChjaGFubmVsICYgMHgzKSA8PCA4KSB8ICh2YWx1ZSAmIDB4ZmYpOworCXN0YXRpYyBjb25zdCBpbnQgYWQ4NDAyX2NvbWVkaV91ZGVsYXkgPSAxOworCisJcHJpdihkZXYpLT5hZDg0MDJfc3RhdGVbY2hhbm5lbF0gPSB2YWx1ZTsKKworCXJlZ2lzdGVyX2JpdHMgPSBTRUxFQ1RfODQwMl82NFhYX0JJVDsKKwljb21lZGlfdWRlbGF5KGFkODQwMl9jb21lZGlfdWRlbGF5KTsKKwl3cml0ZXcocmVnaXN0ZXJfYml0cywgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisKKwlmb3IgKGJpdCA9IDEgPDwgKGJpdHN0cmVhbV9sZW5ndGggLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJaWYgKGJpdHN0cmVhbSAmIGJpdCkKKwkJCXJlZ2lzdGVyX2JpdHMgfD0gU0VSSUFMX0RBVEFfSU5fQklUOworCQllbHNlCisJCQlyZWdpc3Rlcl9iaXRzICY9IH5TRVJJQUxfREFUQV9JTl9CSVQ7CisJCWNvbWVkaV91ZGVsYXkoYWQ4NDAyX2NvbWVkaV91ZGVsYXkpOworCQl3cml0ZXcocmVnaXN0ZXJfYml0cywgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisJCWNvbWVkaV91ZGVsYXkoYWQ4NDAyX2NvbWVkaV91ZGVsYXkpOworCQl3cml0ZXcocmVnaXN0ZXJfYml0cyB8IFNFUklBTF9DTE9DS19CSVQsCisJCQlwcml2KGRldiktPm1haW5faW9iYXNlICsgQ0FMSUJSQVRJT05fUkVHKTsKKwl9CisKKwljb21lZGlfdWRlbGF5KGFkODQwMl9jb21lZGlfdWRlbGF5KTsKKwl3cml0ZXcoMCwgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7Cit9CisKKy8qIGZvciBwY2ktZGFzNjQwMi8xNiwgY2hhbm5lbCAwIGlzIGFuYWxvZyBpbnB1dCBnYWluIGFuZCBjaGFubmVsIDEgaXMgb2Zmc2V0ICovCitzdGF0aWMgaW50IGFkODQwMl93cml0ZV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLyogcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHNldHRpbmcgaGFzbid0IGNoYW5nZWQsIHNpbmNlCisJICogcHJvZ3JhbW1pbmcgdGhlc2UgdGhpbmdzIGlzIHNsb3cgKi8KKwlpZiAocHJpdihkZXYpLT5hZDg0MDJfc3RhdGVbY2hhbm5lbF0gPT0gZGF0YVswXSkKKwkJcmV0dXJuIDE7CisKKwlwcml2KGRldiktPmFkODQwMl9zdGF0ZVtjaGFubmVsXSA9IGRhdGFbMF07CisKKwlhZDg0MDJfd3JpdGUoZGV2LCBjaGFubmVsLCBkYXRhWzBdKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGFkODQwMl9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlkYXRhWzBdID0gcHJpdihkZXYpLT5hZDg0MDJfc3RhdGVbY2hhbm5lbF07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVpbnQxNl90IHJlYWRfZWVwcm9tKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50OF90IGFkZHJlc3MpCit7CisJc3RhdGljIGNvbnN0IGludCBiaXRzdHJlYW1fbGVuZ3RoID0gMTE7CisJc3RhdGljIGNvbnN0IGludCByZWFkX2NvbW1hbmQgPSAweDY7CisJdW5zaWduZWQgaW50IGJpdHN0cmVhbSA9IChyZWFkX2NvbW1hbmQgPDwgOCkgfCBhZGRyZXNzOworCXVuc2lnbmVkIGludCBiaXQ7CisJdm9pZCAqY29uc3QgcGx4X2NvbnRyb2xfYWRkciA9CisJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfQ09OVFJPTF9SRUc7CisJdWludDE2X3QgdmFsdWU7CisJc3RhdGljIGNvbnN0IGludCB2YWx1ZV9sZW5ndGggPSAxNjsKKwlzdGF0aWMgY29uc3QgaW50IGVlcHJvbV9jb21lZGlfdWRlbGF5ID0gMTsKKworCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyAmPSB+Q1RMX0VFX0NMSyAmIH5DVExfRUVfQ1M7CisJLy8gbWFrZSBzdXJlIHdlIGRvbid0IHNlbmQgYW55dGhpbmcgdG8gdGhlIGkyYyBidXMgb24gNDAyMAorCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyB8PSBDVExfVVNFUk87CisJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisJLy8gYWN0aXZhdGUgc2VyaWFsIGVlcHJvbQorCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyB8PSBDVExfRUVfQ1M7CisJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisKKwkvLyB3cml0ZSByZWFkIGNvbW1hbmQgYW5kIGRlc2lyZWQgbWVtb3J5IGFkZHJlc3MKKwlmb3IgKGJpdCA9IDEgPDwgKGJpdHN0cmVhbV9sZW5ndGggLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJLy8gc2V0IGJpdCB0byBiZSB3cml0dGVuCisJCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCQlpZiAoYml0c3RyZWFtICYgYml0KQorCQkJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzIHw9IENUTF9FRV9XOworCQllbHNlCisJCQlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgJj0gfkNUTF9FRV9XOworCQl3cml0ZWwocHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzLCBwbHhfY29udHJvbF9hZGRyKTsKKwkJLy8gY2xvY2sgaW4gYml0CisJCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCQlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgfD0gQ1RMX0VFX0NMSzsKKwkJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisJCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCQlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgJj0gfkNUTF9FRV9DTEs7CisJCXdyaXRlbChwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMsIHBseF9jb250cm9sX2FkZHIpOworCX0KKwkvLyByZWFkIGJhY2sgdmFsdWUgZnJvbSBlZXByb20gbWVtb3J5IGxvY2F0aW9uCisJdmFsdWUgPSAwOworCWZvciAoYml0ID0gMSA8PCAodmFsdWVfbGVuZ3RoIC0gMSk7IGJpdDsgYml0ID4+PSAxKSB7CisJCS8vIGNsb2NrIG91dCBiaXQKKwkJY29tZWRpX3VkZWxheShlZXByb21fY29tZWRpX3VkZWxheSk7CisJCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyB8PSBDVExfRUVfQ0xLOworCQl3cml0ZWwocHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzLCBwbHhfY29udHJvbF9hZGRyKTsKKwkJY29tZWRpX3VkZWxheShlZXByb21fY29tZWRpX3VkZWxheSk7CisJCXByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cyAmPSB+Q1RMX0VFX0NMSzsKKwkJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisJCWNvbWVkaV91ZGVsYXkoZWVwcm9tX2NvbWVkaV91ZGVsYXkpOworCQlpZiAocmVhZGwocGx4X2NvbnRyb2xfYWRkcikgJiBDVExfRUVfUikKKwkJCXZhbHVlIHw9IGJpdDsKKwl9CisKKwkvLyBkZWFjdGl2YXRlIGVlcHJvbSBzZXJpYWwgaW5wdXQKKwljb21lZGlfdWRlbGF5KGVlcHJvbV9jb21lZGlfdWRlbGF5KTsKKwlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgJj0gfkNUTF9FRV9DUzsKKwl3cml0ZWwocHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzLCBwbHhfY29udHJvbF9hZGRyKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIGludCBlZXByb21fcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gcmVhZF9lZXByb20oZGV2LCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSk7CisKKwlyZXR1cm4gMTsKK30KKworLyogdXRpbGl0eSBmdW5jdGlvbiB0aGF0IHJvdW5kcyBkZXNpcmVkIHRpbWluZyB0byBhbiBhY2hpZXZhYmxlIHRpbWUsIGFuZAorICogc2V0cyBjbWQgbWVtYmVycyBhcHByb3ByaWF0ZWx5LgorICogYWRjIHBhY2VzIGNvbnZlcnNpb25zIGZyb20gbWFzdGVyIGNsb2NrIGJ5IGRpdmlkaW5nIGJ5ICh4ICsgMykgd2hlcmUgeCBpcyAyNCBiaXQgbnVtYmVyCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX2FkY190aW1pbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgY29udmVydF9kaXZpc29yID0gMCwgc2Nhbl9kaXZpc29yOworCXN0YXRpYyBjb25zdCBpbnQgbWluX2NvbnZlcnRfZGl2aXNvciA9IDM7CisJc3RhdGljIGNvbnN0IGludCBtYXhfY29udmVydF9kaXZpc29yID0KKwkJbWF4X2NvdW50ZXJfdmFsdWUgKyBtaW5fY29udmVydF9kaXZpc29yOworCXN0YXRpYyBjb25zdCBpbnQgbWluX3NjYW5fZGl2aXNvcl80MDIwID0gMjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbWF4X3NjYW5fZGl2aXNvciwgbWluX3NjYW5fZGl2aXNvcjsKKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGJvYXJkKGRldiktPmxheW91dCA9PSBMQVlPVVRfNDAyMCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCX0gZWxzZSB7CisJCQljb252ZXJ0X2Rpdmlzb3IgPQorCQkJCWdldF9kaXZpc29yKGNtZC0+Y29udmVydF9hcmcsIGNtZC0+ZmxhZ3MpOworCQkJaWYgKGNvbnZlcnRfZGl2aXNvciA+IG1heF9jb252ZXJ0X2Rpdmlzb3IpCisJCQkJY29udmVydF9kaXZpc29yID0gbWF4X2NvbnZlcnRfZGl2aXNvcjsKKwkJCWlmIChjb252ZXJ0X2Rpdmlzb3IgPCBtaW5fY29udmVydF9kaXZpc29yKQorCQkJCWNvbnZlcnRfZGl2aXNvciA9IG1pbl9jb252ZXJ0X2Rpdmlzb3I7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gY29udmVydF9kaXZpc29yICogVElNRVJfQkFTRTsKKwkJfQorCX0gZWxzZSBpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVykKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXNjYW5fZGl2aXNvciA9IGdldF9kaXZpc29yKGNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MpOworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQkvLyBYWFggY2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3dzCisJCQltaW5fc2Nhbl9kaXZpc29yID0gY29udmVydF9kaXZpc29yICogY21kLT5jaGFubGlzdF9sZW47CisJCQltYXhfc2Nhbl9kaXZpc29yID0KKwkJCQkoY29udmVydF9kaXZpc29yICogY21kLT5jaGFubGlzdF9sZW4gLSAxKSArCisJCQkJbWF4X2NvdW50ZXJfdmFsdWU7CisJCX0gZWxzZSB7CisJCQltaW5fc2Nhbl9kaXZpc29yID0gbWluX3NjYW5fZGl2aXNvcl80MDIwOworCQkJbWF4X3NjYW5fZGl2aXNvciA9IG1heF9jb3VudGVyX3ZhbHVlICsgbWluX3NjYW5fZGl2aXNvcjsKKwkJfQorCQlpZiAoc2Nhbl9kaXZpc29yID4gbWF4X3NjYW5fZGl2aXNvcikKKwkJCXNjYW5fZGl2aXNvciA9IG1heF9zY2FuX2Rpdmlzb3I7CisJCWlmIChzY2FuX2Rpdmlzb3IgPCBtaW5fc2Nhbl9kaXZpc29yKQorCQkJc2Nhbl9kaXZpc29yID0gbWluX3NjYW5fZGl2aXNvcjsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IHNjYW5fZGl2aXNvciAqIFRJTUVSX0JBU0U7CisJfQorCisJcmV0dXJuOworfQorCisvKiBHZXRzIG5lYXJlc3QgYWNoaWV2YWJsZSB0aW1pbmcgZ2l2ZW4gbWFzdGVyIGNsb2NrIHNwZWVkLCBkb2VzIG5vdAorICogdGFrZSBpbnRvIGFjY291bnQgcG9zc2libGUgbWluaW11bS9tYXhpbXVtIGRpdmlzb3IgdmFsdWVzLiAgVXNlZAorICogYnkgb3RoZXIgdGltaW5nIGNoZWNraW5nIGZ1bmN0aW9ucy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2Rpdmlzb3IodW5zaWduZWQgaW50IG5zLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgaW50IGRpdmlzb3I7CisKKwlzd2l0Y2ggKGZsYWdzICYgVFJJR19ST1VORF9NQVNLKSB7CisJY2FzZSBUUklHX1JPVU5EX1VQOgorCQlkaXZpc29yID0gKG5zICsgVElNRVJfQkFTRSAtIDEpIC8gVElNRVJfQkFTRTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCWRpdmlzb3IgPSBucyAvIFRJTUVSX0JBU0U7CisJCWJyZWFrOworCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCWRlZmF1bHQ6CisJCWRpdmlzb3IgPSAobnMgKyBUSU1FUl9CQVNFIC8gMikgLyBUSU1FUl9CQVNFOworCQlicmVhazsKKwl9CisJcmV0dXJuIGRpdmlzb3I7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2FvX2Rpdmlzb3IodW5zaWduZWQgaW50IG5zLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIGdldF9kaXZpc29yKG5zLCBmbGFncykgLSAyOworfQorCisvLyBhZGp1c3RzIHRoZSBzaXplIG9mIGhhcmR3YXJlIGZpZm8gKHdoaWNoIGRldGVybWluZXMgYmxvY2sgc2l6ZSBmb3IgZG1hIHhmZXJzKQorc3RhdGljIGludCBzZXRfYWlfZmlmb19zaXplKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgbnVtX3NhbXBsZXMpCit7CisJdW5zaWduZWQgaW50IG51bV9maWZvX2VudHJpZXM7CisJaW50IHJldHZhbDsKKwljb25zdCBzdHJ1Y3QgaHdfZmlmb19pbmZvICpjb25zdCBmaWZvID0gYm9hcmQoZGV2KS0+YWlfZmlmbzsKKworCW51bV9maWZvX2VudHJpZXMgPSBudW1fc2FtcGxlcyAvIGZpZm8tPnNhbXBsZV9wYWNraW5nX3JhdGlvOworCisJcmV0dmFsID0gc2V0X2FpX2ZpZm9fc2VnbWVudF9sZW5ndGgoZGV2LAorCQludW1fZmlmb19lbnRyaWVzIC8gZmlmby0+bnVtX3NlZ21lbnRzKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCW51bV9zYW1wbGVzID0gcmV0dmFsICogZmlmby0+bnVtX3NlZ21lbnRzICogZmlmby0+c2FtcGxlX3BhY2tpbmdfcmF0aW87CisKKwlERUJVR19QUklOVCgic2V0IGhhcmR3YXJlIGZpZm8gc2l6ZSB0byAlaVxuIiwgbnVtX3NhbXBsZXMpOworCisJcmV0dXJuIG51bV9zYW1wbGVzOworfQorCisvLyBxdWVyeSBsZW5ndGggb2YgZmlmbworc3RhdGljIHVuc2lnbmVkIGludCBhaV9maWZvX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIHByaXYoZGV2KS0+YWlfZmlmb19zZWdtZW50X2xlbmd0aCAqCisJCWJvYXJkKGRldiktPmFpX2ZpZm8tPm51bV9zZWdtZW50cyAqCisJCWJvYXJkKGRldiktPmFpX2ZpZm8tPnNhbXBsZV9wYWNraW5nX3JhdGlvOworfQorCitzdGF0aWMgaW50IHNldF9haV9maWZvX3NlZ21lbnRfbGVuZ3RoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBudW1fZW50cmllcykKK3sKKwlzdGF0aWMgY29uc3QgaW50IGluY3JlbWVudF9zaXplID0gMHgxMDA7CisJY29uc3Qgc3RydWN0IGh3X2ZpZm9faW5mbyAqY29uc3QgZmlmbyA9IGJvYXJkKGRldiktPmFpX2ZpZm87CisJdW5zaWduZWQgaW50IG51bV9pbmNyZW1lbnRzOworCXVpbnQxNl90IGJpdHM7CisKKwlpZiAobnVtX2VudHJpZXMgPCBpbmNyZW1lbnRfc2l6ZSkKKwkJbnVtX2VudHJpZXMgPSBpbmNyZW1lbnRfc2l6ZTsKKwlpZiAobnVtX2VudHJpZXMgPiBmaWZvLT5tYXhfc2VnbWVudF9sZW5ndGgpCisJCW51bV9lbnRyaWVzID0gZmlmby0+bWF4X3NlZ21lbnRfbGVuZ3RoOworCisJLy8gMSA9PSAyNTYgZW50cmllcywgMiA9PSA1MTIgZW50cmllcywgZXRjCisJbnVtX2luY3JlbWVudHMgPSAobnVtX2VudHJpZXMgKyBpbmNyZW1lbnRfc2l6ZSAvIDIpIC8gaW5jcmVtZW50X3NpemU7CisKKwliaXRzID0gKH4obnVtX2luY3JlbWVudHMgLSAxKSkgJiBmaWZvLT5maWZvX3NpemVfcmVnX21hc2s7CisJcHJpdihkZXYpLT5maWZvX3NpemVfYml0cyAmPSB+Zmlmby0+Zmlmb19zaXplX3JlZ19tYXNrOworCXByaXYoZGV2KS0+Zmlmb19zaXplX2JpdHMgfD0gYml0czsKKwl3cml0ZXcocHJpdihkZXYpLT5maWZvX3NpemVfYml0cywKKwkJcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIEZJRk9fU0laRV9SRUcpOworCisJcHJpdihkZXYpLT5haV9maWZvX3NlZ21lbnRfbGVuZ3RoID0gbnVtX2luY3JlbWVudHMgKiBpbmNyZW1lbnRfc2l6ZTsKKworCURFQlVHX1BSSU5UKCJzZXQgaGFyZHdhcmUgZmlmbyBzZWdtZW50IGxlbmd0aCB0byAlaVxuIiwKKwkJcHJpdihkZXYpLT5haV9maWZvX3NlZ21lbnRfbGVuZ3RoKTsKKworCXJldHVybiBwcml2KGRldiktPmFpX2ZpZm9fc2VnbWVudF9sZW5ndGg7Cit9CisKKy8qIHBjaS02MDI1IDg4MDAgY2FsZGFjOgorICogYWRkcmVzcyAwID09IGRhYyBjaGFubmVsIDAgb2Zmc2V0CisgKiBhZGRyZXNzIDEgPT0gZGFjIGNoYW5uZWwgMCBnYWluCisgKiBhZGRyZXNzIDIgPT0gZGFjIGNoYW5uZWwgMSBvZmZzZXQKKyAqIGFkZHJlc3MgMyA9PSBkYWMgY2hhbm5lbCAxIGdhaW4KKyAqIGFkZHJlc3MgNCA9PSBmaW5lIGFkYyBvZmZzZXQKKyAqIGFkZHJlc3MgNSA9PSBjb2Fyc2UgYWRjIG9mZnNldAorICogYWRkcmVzcyA2ID09IGNvYXJzZSBhZGMgZ2FpbgorICogYWRkcmVzcyA3ID09IGZpbmUgYWRjIGdhaW4KKyAqLworLyogcGNpLTY0MDIvMTYgdXNlcyBhbGwgOCBjaGFubmVscyBmb3IgZGFjOgorICogYWRkcmVzcyAwID09IGRhYyBjaGFubmVsIDAgZmluZSBnYWluCisgKiBhZGRyZXNzIDEgPT0gZGFjIGNoYW5uZWwgMCBjb2Fyc2UgZ2FpbgorICogYWRkcmVzcyAyID09IGRhYyBjaGFubmVsIDAgY29hcnNlIG9mZnNldAorICogYWRkcmVzcyAzID09IGRhYyBjaGFubmVsIDEgY29hcnNlIG9mZnNldAorICogYWRkcmVzcyA0ID09IGRhYyBjaGFubmVsIDEgZmluZSBnYWluCisgKiBhZGRyZXNzIDUgPT0gZGFjIGNoYW5uZWwgMSBjb2Fyc2UgZ2FpbgorICogYWRkcmVzcyA2ID09IGRhYyBjaGFubmVsIDAgZmluZSBvZmZzZXQKKyAqIGFkZHJlc3MgNyA9PSBkYWMgY2hhbm5lbCAxIGZpbmUgb2Zmc2V0CisqLworCitzdGF0aWMgaW50IGNhbGRhY184ODAwX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgYWRkcmVzcywKKwl1aW50OF90IHZhbHVlKQoreworCXN0YXRpYyBjb25zdCBpbnQgbnVtX2NhbGRhY19jaGFubmVscyA9IDg7CisJc3RhdGljIGNvbnN0IGludCBiaXRzdHJlYW1fbGVuZ3RoID0gMTE7CisJdW5zaWduZWQgaW50IGJpdHN0cmVhbSA9ICgoYWRkcmVzcyAmIDB4NykgPDwgOCkgfCB2YWx1ZTsKKwl1bnNpZ25lZCBpbnQgYml0LCByZWdpc3Rlcl9iaXRzOworCXN0YXRpYyBjb25zdCBpbnQgY2FsZGFjXzg4MDBfdWRlbGF5ID0gMTsKKworCWlmIChhZGRyZXNzID49IG51bV9jYWxkYWNfY2hhbm5lbHMpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImlsbGVnYWwgY2FsZGFjIGNoYW5uZWwiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmb3IgKGJpdCA9IDEgPDwgKGJpdHN0cmVhbV9sZW5ndGggLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJcmVnaXN0ZXJfYml0cyA9IDA7CisJCWlmIChiaXRzdHJlYW0gJiBiaXQpCisJCQlyZWdpc3Rlcl9iaXRzIHw9IFNFUklBTF9EQVRBX0lOX0JJVDsKKwkJY29tZWRpX3VkZWxheShjYWxkYWNfODgwMF91ZGVsYXkpOworCQl3cml0ZXcocmVnaXN0ZXJfYml0cywgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisJCXJlZ2lzdGVyX2JpdHMgfD0gU0VSSUFMX0NMT0NLX0JJVDsKKwkJY29tZWRpX3VkZWxheShjYWxkYWNfODgwMF91ZGVsYXkpOworCQl3cml0ZXcocmVnaXN0ZXJfYml0cywgcHJpdihkZXYpLT5tYWluX2lvYmFzZSArIENBTElCUkFUSU9OX1JFRyk7CisJfQorCWNvbWVkaV91ZGVsYXkoY2FsZGFjXzg4MDBfdWRlbGF5KTsKKwl3cml0ZXcoU0VMRUNUXzg4MDBfQklULCBwcml2KGRldiktPm1haW5faW9iYXNlICsgQ0FMSUJSQVRJT05fUkVHKTsKKwljb21lZGlfdWRlbGF5KGNhbGRhY184ODAwX3VkZWxheSk7CisJd3JpdGV3KDAsIHByaXYoZGV2KS0+bWFpbl9pb2Jhc2UgKyBDQUxJQlJBVElPTl9SRUcpOworCWNvbWVkaV91ZGVsYXkoY2FsZGFjXzg4MDBfdWRlbGF5KTsKKwlyZXR1cm4gMDsKK30KKworLy8gNDAyMCBjYWxkYWNzCitzdGF0aWMgaW50IGNhbGRhY19pMmNfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjYWxkYWNfY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJdWludDhfdCBzZXJpYWxfYnl0ZXNbM107CisJdWludDhfdCBpMmNfYWRkcjsKKwllbnVtIHBvaW50ZXJfYml0cyB7CisJCS8vIG1hbnVhbCBoYXMgZ2FpbiBhbmQgb2Zmc2V0IGJpdHMgc3dpdGNoZWQKKwkJT0ZGU0VUXzBfMiA9IDB4MSwKKwkJR0FJTl8wXzIgPSAweDIsCisJCU9GRlNFVF8xXzMgPSAweDQsCisJCUdBSU5fMV8zID0gMHg4LAorCX07CisJZW51bSBkYXRhX2JpdHMgeworCQlOT1RfQ0xFQVJfUkVHSVNURVJTID0gMHgyMCwKKwl9OworCisJc3dpdGNoIChjYWxkYWNfY2hhbm5lbCkgeworCWNhc2UgMDoJCS8vIGNoYW4gMCBvZmZzZXQKKwkJaTJjX2FkZHIgPSBDQUxEQUMwX0kyQ19BRERSOworCQlzZXJpYWxfYnl0ZXNbMF0gPSBPRkZTRVRfMF8yOworCQlicmVhazsKKwljYXNlIDE6CQkvLyBjaGFuIDEgb2Zmc2V0CisJCWkyY19hZGRyID0gQ0FMREFDMF9JMkNfQUREUjsKKwkJc2VyaWFsX2J5dGVzWzBdID0gT0ZGU0VUXzFfMzsKKwkJYnJlYWs7CisJY2FzZSAyOgkJLy8gY2hhbiAyIG9mZnNldAorCQlpMmNfYWRkciA9IENBTERBQzFfSTJDX0FERFI7CisJCXNlcmlhbF9ieXRlc1swXSA9IE9GRlNFVF8wXzI7CisJCWJyZWFrOworCWNhc2UgMzoJCS8vIGNoYW4gMyBvZmZzZXQKKwkJaTJjX2FkZHIgPSBDQUxEQUMxX0kyQ19BRERSOworCQlzZXJpYWxfYnl0ZXNbMF0gPSBPRkZTRVRfMV8zOworCQlicmVhazsKKwljYXNlIDQ6CQkvLyBjaGFuIDAgZ2FpbgorCQlpMmNfYWRkciA9IENBTERBQzBfSTJDX0FERFI7CisJCXNlcmlhbF9ieXRlc1swXSA9IEdBSU5fMF8yOworCQlicmVhazsKKwljYXNlIDU6CQkvLyBjaGFuIDEgZ2FpbgorCQlpMmNfYWRkciA9IENBTERBQzBfSTJDX0FERFI7CisJCXNlcmlhbF9ieXRlc1swXSA9IEdBSU5fMV8zOworCQlicmVhazsKKwljYXNlIDY6CQkvLyBjaGFuIDIgZ2FpbgorCQlpMmNfYWRkciA9IENBTERBQzFfSTJDX0FERFI7CisJCXNlcmlhbF9ieXRlc1swXSA9IEdBSU5fMF8yOworCQlicmVhazsKKwljYXNlIDc6CQkvLyBjaGFuIDMgZ2FpbgorCQlpMmNfYWRkciA9IENBTERBQzFfSTJDX0FERFI7CisJCXNlcmlhbF9ieXRlc1swXSA9IEdBSU5fMV8zOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb21lZGlfZXJyb3IoZGV2LCAiaW52YWxpZCBjYWxkYWMgY2hhbm5lbFxuIik7CisJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCXNlcmlhbF9ieXRlc1sxXSA9IE5PVF9DTEVBUl9SRUdJU1RFUlMgfCAoKHZhbHVlID4+IDgpICYgMHhmKTsKKwlzZXJpYWxfYnl0ZXNbMl0gPSB2YWx1ZSAmIDB4ZmY7CisJaTJjX3dyaXRlKGRldiwgaTJjX2FkZHIsIHNlcmlhbF9ieXRlcywgMyk7CisJcmV0dXJuIDA7Cit9CisKKy8vIFRoZWlyIGkyYyByZXF1aXJlcyBhIGh1Z2UgZGVsYXkgb24gc2V0dGluZyBjbG9jayBvciBkYXRhIGhpZ2ggZm9yIHNvbWUgcmVhc29uCitzdGF0aWMgY29uc3QgaW50IGkyY19oaWdoX2NvbWVkaV91ZGVsYXkgPSAxMDAwOworc3RhdGljIGNvbnN0IGludCBpMmNfbG93X2NvbWVkaV91ZGVsYXkgPSAxMDsKKworLy8gc2V0IGkyYyBkYXRhIGxpbmUgaGlnaCBvciBsb3cKK3N0YXRpYyB2b2lkIGkyY19zZXRfc2RhKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgc3RhdGUpCit7CisJc3RhdGljIGNvbnN0IGludCBkYXRhX2JpdCA9IENUTF9FRV9XOworCXZvaWQgKnBseF9jb250cm9sX2FkZHIgPSBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0NPTlRST0xfUkVHOworCisJaWYgKHN0YXRlKSB7CisJCS8vIHNldCBkYXRhIGxpbmUgaGlnaAorCQlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgJj0gfmRhdGFfYml0OworCQl3cml0ZWwocHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzLCBwbHhfY29udHJvbF9hZGRyKTsKKwkJY29tZWRpX3VkZWxheShpMmNfaGlnaF9jb21lZGlfdWRlbGF5KTsKKwl9IGVsc2UJCQkvLyBzZXQgZGF0YSBsaW5lIGxvdworCXsKKwkJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzIHw9IGRhdGFfYml0OworCQl3cml0ZWwocHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzLCBwbHhfY29udHJvbF9hZGRyKTsKKwkJY29tZWRpX3VkZWxheShpMmNfbG93X2NvbWVkaV91ZGVsYXkpOworCX0KK30KKworLy8gc2V0IGkyYyBjbG9jayBsaW5lIGhpZ2ggb3IgbG93CitzdGF0aWMgdm9pZCBpMmNfc2V0X3NjbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IHN0YXRlKQoreworCXN0YXRpYyBjb25zdCBpbnQgY2xvY2tfYml0ID0gQ1RMX1VTRVJPOworCXZvaWQgKnBseF9jb250cm9sX2FkZHIgPSBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0NPTlRST0xfUkVHOworCisJaWYgKHN0YXRlKSB7CisJCS8vIHNldCBjbG9jayBsaW5lIGhpZ2gKKwkJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzICY9IH5jbG9ja19iaXQ7CisJCXdyaXRlbChwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMsIHBseF9jb250cm9sX2FkZHIpOworCQljb21lZGlfdWRlbGF5KGkyY19oaWdoX2NvbWVkaV91ZGVsYXkpOworCX0gZWxzZQkJCS8vIHNldCBjbG9jayBsaW5lIGxvdworCXsKKwkJcHJpdihkZXYpLT5wbHhfY29udHJvbF9iaXRzIHw9IGNsb2NrX2JpdDsKKwkJd3JpdGVsKHByaXYoZGV2KS0+cGx4X2NvbnRyb2xfYml0cywgcGx4X2NvbnRyb2xfYWRkcik7CisJCWNvbWVkaV91ZGVsYXkoaTJjX2xvd19jb21lZGlfdWRlbGF5KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGkyY193cml0ZV9ieXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50OF90IGJ5dGUpCit7CisJdWludDhfdCBiaXQ7CisJdW5zaWduZWQgaW50IG51bV9iaXRzID0gODsKKworCURFQlVHX1BSSU5UKCJ3cml0aW5nIHRvIGkyYyBieXRlIDB4JXhcbiIsIGJ5dGUpOworCisJZm9yIChiaXQgPSAxIDw8IChudW1fYml0cyAtIDEpOyBiaXQ7IGJpdCA+Pj0gMSkgeworCQlpMmNfc2V0X3NjbChkZXYsIDApOworCQlpZiAoKGJ5dGUgJiBiaXQpKQorCQkJaTJjX3NldF9zZGEoZGV2LCAxKTsKKwkJZWxzZQorCQkJaTJjX3NldF9zZGEoZGV2LCAwKTsKKwkJaTJjX3NldF9zY2woZGV2LCAxKTsKKwl9Cit9CisKKy8vIHdlIGNhbid0IHJlYWxseSByZWFkIHRoZSBsaW5lcywgc28gZmFrZSBpdAorc3RhdGljIGludCBpMmNfcmVhZF9hY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaTJjX3NldF9zY2woZGV2LCAwKTsKKwlpMmNfc2V0X3NkYShkZXYsIDEpOworCWkyY19zZXRfc2NsKGRldiwgMSk7CisKKwlyZXR1cm4gMDsJCS8vIHJldHVybiBmYWtlIGFja25vd2xlZGdlIGJpdAorfQorCisvLyBzZW5kIHN0YXJ0IGJpdAorc3RhdGljIHZvaWQgaTJjX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWkyY19zZXRfc2NsKGRldiwgMSk7CisJaTJjX3NldF9zZGEoZGV2LCAxKTsKKwlpMmNfc2V0X3NkYShkZXYsIDApOworfQorCisvLyBzZW5kIHN0b3AgYml0CitzdGF0aWMgdm9pZCBpMmNfc3RvcChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpMmNfc2V0X3NjbChkZXYsIDApOworCWkyY19zZXRfc2RhKGRldiwgMCk7CisJaTJjX3NldF9zY2woZGV2LCAxKTsKKwlpMmNfc2V0X3NkYShkZXYsIDEpOworfQorCitzdGF0aWMgdm9pZCBpMmNfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBhZGRyZXNzLAorCWNvbnN0IHVpbnQ4X3QgKiBkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworCXVuc2lnbmVkIGludCBpOworCXVpbnQ4X3QgYml0c3RyZWFtOworCXN0YXRpYyBjb25zdCBpbnQgcmVhZF9iaXQgPSAweDE7CisKKy8vWFhYIG5lZWQgbXV0ZXggdG8gcHJldmVudCBzaW11bHRhbmVvdXMgYXR0ZW1wdHMgdG8gYWNjZXNzIGVlcHJvbSBhbmQgaTJjIGJ1cworCisJLy8gbWFrZSBzdXJlIHdlIGRvbnQgc2VuZCBhbnl0aGluZyB0byBlZXByb20KKwlwcml2KGRldiktPnBseF9jb250cm9sX2JpdHMgJj0gfkNUTF9FRV9DUzsKKworCWkyY19zdG9wKGRldik7CisJaTJjX3N0YXJ0KGRldik7CisKKwkvLyBzZW5kIGFkZHJlc3MgYW5kIHdyaXRlIGJpdAorCWJpdHN0cmVhbSA9IChhZGRyZXNzIDw8IDEpICYgfnJlYWRfYml0OworCWkyY193cml0ZV9ieXRlKGRldiwgYml0c3RyZWFtKTsKKworCS8vIGdldCBhY2tub3dsZWRnZQorCWlmIChpMmNfcmVhZF9hY2soZGV2KSAhPSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJpMmMgd3JpdGUgZmFpbGVkOiBubyBhY2tub3dsZWRnZSIpOworCQlpMmNfc3RvcChkZXYpOworCQlyZXR1cm47CisJfQorCS8vIHdyaXRlIGRhdGEgYnl0ZXMKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKwkJaTJjX3dyaXRlX2J5dGUoZGV2LCBkYXRhW2ldKTsKKwkJaWYgKGkyY19yZWFkX2FjayhkZXYpICE9IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJpMmMgd3JpdGUgZmFpbGVkOiBubyBhY2tub3dsZWRnZSIpOworCQkJaTJjX3N0b3AoZGV2KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlpMmNfc3RvcChkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkMGE1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGRhLmMKQEAgLTAsMCArMSw4NDEgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvY2JfcGNpZGRhLmMKKyAgICBUaGlzIGludGVuZHMgdG8gYmUgYSBkcml2ZXIgZm9yIHRoZSBDb21wdXRlckJvYXJkcyAvIE1lYXN1cmVtZW50Q29tcHV0aW5nCisgICAgUENJLUREQSBzZXJpZXMuCisKKwkgQ29weXJpZ2h0IChDKSAyMDAxIEl2YW4gTWFydGluZXogPGl2YW5tckBhbHRhdmlzdGEuY29tPgorICAgIENvcHlyaWdodCAoQykgMjAwMSBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGNiX3BjaWRkYQorRGVzY3JpcHRpb246IE1lYXN1cmVtZW50Q29tcHV0aW5nIFBDSS1EREEgc2VyaWVzCitBdXRob3I6IEl2YW4gTWFydGluZXogPGl2YW5tckBhbHRhdmlzdGEuY29tPiwgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorU3RhdHVzOiBTdXBwb3J0cyAwOC8xNiwgMDQvMTYsIDAyLzE2LCAwOC8xMiwgMDQvMTIsIGFuZCAwMi8xMgorRGV2aWNlczogW01lYXN1cmVtZW50IENvbXB1dGluZ10gUENJLUREQTA4LzEyIChjYl9wY2lkZGEpLCBQQ0ktRERBMDQvMTIsCisgIFBDSS1EREEwMi8xMiwgUENJLUREQTA4LzE2LCBQQ0ktRERBMDQvMTYsIFBDSS1EREEwMi8xNgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IGF2YWlsYWJsZSBQQ0kKKyAgZGV2aWNlIHdpbGwgYmUgdXNlZC4KKworT25seSBzaW1wbGUgYW5hbG9nIG91dHB1dCB3cml0aW5nIGlzIHN1cHBvcnRlZC4KKworU28gZmFyIGl0IGhhcyBvbmx5IGJlZW4gdGVzdGVkIHdpdGg6CisgIC0gUENJLUREQTA4LzEyCitQbGVhc2UgcmVwb3J0IHN1Y2Nlc3MvZmFpbHVyZSB3aXRoIG90aGVyIGRpZmZlcmVudCBjYXJkcyB0bworPGNvbWVkaUBjb21lZGkub3JnPi4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DQgkweDEzMDcJLy8gUENJIHZlbmRvciBudW1iZXIgb2YgQ29tcHV0ZXJCb2FyZHMKKyNkZWZpbmUgTl9CT0FSRFMJMTAJLy8gTnVtYmVyIG9mIGJvYXJkcyBpbiBjYl9wY2lkZGFfYm9hcmRzCisjZGVmaW5lIEVFUFJPTV9TSVpFCTEyOAkvLyBudW1iZXIgb2YgZW50cmllcyBpbiBlZXByb20KKyNkZWZpbmUgTUFYX0FPX0NIQU5ORUxTIDgJLy8gbWF4aW11bSBudW1iZXIgb2YgYW8gY2hhbm5lbHMgZm9yIHN1cHBvcnRlZCBib2FyZHMKKworLyogUENJLUREQSBiYXNlIGFkZHJlc3NlcyAqLworI2RlZmluZSBESUdJVEFMSU9fQkFEUklOREVYCTIKKwkvLyBESUdJVEFMIEkvTyBpcyBwY2lfZGV2LT5yZXNvdXJjZVsyXQorI2RlZmluZSBESUdJVEFMSU9fU0laRSA4CisJLy8gRElHSVRBTCBJL08gdXNlcyA4IEkvTyBwb3J0IGFkZHJlc3NlcworI2RlZmluZSBEQUNfQkFEUklOREVYCTMKKwkvLyBEQUMgaXMgcGNpX2Rldi0+cmVzb3VyY2VbM10KKworLyogRGlnaXRhbCBJL08gcmVnaXN0ZXJzICovCisjZGVmaW5lIFBPUlQxQSAwCQkvLyBQT1JUIDFBIERBVEEKKworI2RlZmluZSBQT1JUMUIgMQkJLy8gUE9SVCAxQiBEQVRBCisKKyNkZWZpbmUgUE9SVDFDIDIJCS8vIFBPUlQgMUMgREFUQQorCisjZGVmaW5lIENPTlRST0wxIDMJCS8vIENPTlRST0wgUkVHSVNURVIgMQorCisjZGVmaW5lIFBPUlQyQSA0CQkvLyBQT1JUIDJBIERBVEEKKworI2RlZmluZSBQT1JUMkIgNQkJLy8gUE9SVCAyQiBEQVRBCisKKyNkZWZpbmUgUE9SVDJDIDYJCS8vIFBPUlQgMkMgREFUQQorCisjZGVmaW5lIENPTlRST0wyIDcJCS8vIENPTlRST0wgUkVHSVNURVIgMgorCisvKiBEQUMgcmVnaXN0ZXJzICovCisjZGVmaW5lIERBQ09OVFJPTAkwCS8vIEQvQSBDT05UUk9MIFJFR0lTVEVSCisjZGVmaW5lCVNVCTAwMDAwMDEJCS8vIFNpbXVsdGFuZW91cyB1cGRhdGUgZW5hYmxlZAorI2RlZmluZSBOT1NVCTAwMDAwMDAJCS8vIFNpbXVsdGFuZW91cyB1cGRhdGUgZGlzYWJsZWQKKyNkZWZpbmUJRU5BQkxFREFDCTAwMDAwMDIJLy8gRW5hYmxlIHNwZWNpZmllZCBEQUMKKyNkZWZpbmUJRElTQUJMRURBQwkwMDAwMDAwCS8vIERpc2FibGUgc3BlY2lmaWVkIERBQworI2RlZmluZSBSQU5HRTJWNQkwMDAwMDAwCS8vIDIuNVYKKyNkZWZpbmUgUkFOR0U1VgkwMDAwMjAwCQkvLyA1VgorI2RlZmluZSBSQU5HRTEwVgkwMDAwMzAwCS8vIDEwVgorI2RlZmluZSBVTklQCTAwMDA0MDAJCS8vIFVuaXBvbGFyIG91dHB1dHMKKyNkZWZpbmUgQklQCTAwMDAwMDAJCS8vIEJpcG9sYXIgb3V0cHV0cworCisjZGVmaW5lIERBQ0FMSUJSQVRJT04xCTQJLy8gRC9BIENBTElCUkFUSU9OIFJFR0lTVEVSIDEKKy8vd3JpdGUgYml0cworI2RlZmluZQlTRVJJQUxfSU5fQklUCTB4MQkvLyBzZXJpYWwgZGF0YSBpbnB1dCBmb3IgZWVwcm9tLCBjYWxkYWNzLCByZWZlcmVuY2UgZGFjCisjZGVmaW5lCUNBTF9DSEFOTkVMX01BU0sJKDB4NyA8PCAxKQorI2RlZmluZQlDQUxfQ0hBTk5FTF9CSVRTKGNoYW5uZWwpCSgoKGNoYW5uZWwpIDw8IDEpICYgQ0FMX0NIQU5ORUxfTUFTSykKKy8vcmVhZCBiaXRzCisjZGVmaW5lCUNBTF9DT1VOVEVSX01BU0sJMHgxZgorI2RlZmluZQlDQUxfQ09VTlRFUl9PVkVSRkxPV19CSVQJMHgyMAkvLyBjYWxpYnJhdGlvbiBjb3VudGVyIG92ZXJmbG93IHN0YXR1cyBiaXQKKyNkZWZpbmUJQU9fQkVMT1dfUkVGX0JJVAkweDQwCS8vIGFuYWxvZyBvdXRwdXQgaXMgbGVzcyB0aGFuIHJlZmVyZW5jZSBkYWMgdm9sdGFnZQorI2RlZmluZQlTRVJJQUxfT1VUX0JJVAkweDgwCS8vIHNlcmlhbCBkYXRhIG91dCwgZm9yIHJlYWRpbmcgZnJvbSBlZXByb20KKworI2RlZmluZSBEQUNBTElCUkFUSU9OMgk2CS8vIEQvQSBDQUxJQlJBVElPTiBSRUdJU1RFUiAyCisjZGVmaW5lCVNFTEVDVF9FRVBST01fQklUCTB4MQkvLyBzZW5kIHNlcmlhbCBkYXRhIGluIHRvIGVlcHJvbQorI2RlZmluZQlERVNFTEVDVF9SRUZfREFDX0JJVAkweDIJLy8gZG9uJ3Qgc2VuZCBzZXJpYWwgZGF0YSB0byBNQVg1NDIgcmVmZXJlbmNlIGRhYworI2RlZmluZQlERVNFTEVDVF9DQUxEQUNfQklUKG4pCSgweDQgPDwgKG4pKQkvLyBkb24ndCBzZW5kIHNlcmlhbCBkYXRhIHRvIGNhbGRhYyBuCisjZGVmaW5lCURVTU1ZX0JJVAkweDQwCS8vIG1hbnVhbCBzYXlzIHRvIHNldCB0aGlzIGJpdCB3aXRoIG5vIGV4cGxhbmF0aW9uCisKKyNkZWZpbmUgREFEQVRBCTgJCS8vIEZJUlNUIEQvQSBEQVRBIFJFR0lTVEVSICgwKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgY2JfcGNpZGRhX3JhbmdlcyA9IHsKKwk2LAorCXsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJfQorfTsKKworLyoKKyAqIEJvYXJkIGRlc2NyaXB0aW9ucyBmb3IgdHdvIGltYWdpbmFyeSBib2FyZHMuICBEZXNjcmliaW5nIHRoZQorICogYm9hcmRzIGluIHRoaXMgd2F5IGlzIG9wdGlvbmFsLCBhbmQgY29tcGxldGVseSBkcml2ZXItZGVwZW5kZW50LgorICogU29tZSBkcml2ZXJzIHVzZSBhcnJheXMgc3VjaCBhcyB0aGlzLCBvdGhlciBkbyBub3QuCisgKi8KK3N0cnVjdCBjYl9wY2lkZGFfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY2hhciBzdGF0dXM7CQkvLyBEcml2ZXIgc3RhdHVzOgorCS8vIDAgLSB0ZXN0ZWQKKwkvLyAxIC0gbWFudWFsIHJlYWQsIG5vdCB0ZXN0ZWQKKwkvLyAyIC0gbWFudWFsIG5vdCByZWFkCisJdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOworCWludCBhb19jaGFuczsKKwlpbnQgYW9fYml0czsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VzOworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2JfcGNpZGRhX2JvYXJkIGNiX3BjaWRkYV9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJInBjaS1kZGEwMi8xMiIsCisJICAgICAgc3RhdHVzOgkxLAorCSAgICAgIGRldmljZV9pZDoweDIwLAorCSAgICAgIGFvX2NoYW5zOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGRhX3JhbmdlcywKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kZGEwNC8xMiIsCisJICAgICAgc3RhdHVzOgkxLAorCSAgICAgIGRldmljZV9pZDoweDIxLAorCSAgICAgIGFvX2NoYW5zOjQsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGRhX3JhbmdlcywKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kZGEwOC8xMiIsCisJICAgICAgc3RhdHVzOgkwLAorCSAgICAgIGRldmljZV9pZDoweDIyLAorCSAgICAgIGFvX2NoYW5zOjgsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGRhX3JhbmdlcywKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kZGEwMi8xNiIsCisJICAgICAgc3RhdHVzOgkyLAorCSAgICAgIGRldmljZV9pZDoweDIzLAorCSAgICAgIGFvX2NoYW5zOjIsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGRhX3JhbmdlcywKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kZGEwNC8xNiIsCisJICAgICAgc3RhdHVzOgkyLAorCSAgICAgIGRldmljZV9pZDoweDI0LAorCSAgICAgIGFvX2NoYW5zOjQsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGRhX3JhbmdlcywKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kZGEwOC8xNiIsCisJICAgICAgc3RhdHVzOgkwLAorCSAgICAgIGRldmljZV9pZDoweDI1LAorCSAgICAgIGFvX2NoYW5zOjgsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgcmFuZ2VzOgkmY2JfcGNpZGRhX3JhbmdlcywKKwkJfSwKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjYl9wY2lkZGFfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDIyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDIzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDI1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjYl9wY2lkZGFfcGNpX3RhYmxlKTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgY2JfcGNpZGRhX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBjYl9wY2lkZGFfcHJpdmF0ZSB7CisJaW50IGRhdGE7CisKKwkvKiB3b3VsZCBiZSB1c2VmdWwgZm9yIGEgUENJIGRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCisJdW5zaWduZWQgbG9uZyBkaWdpdGFsaW87CisJdW5zaWduZWQgbG9uZyBkYWM7CisJLy91bnNpZ25lZCBsb25nIGNvbnRyb2xfc3RhdHVzOworCS8vdW5zaWduZWQgbG9uZyBhZGNfZmlmbzsKKwl1bnNpZ25lZCBpbnQgZGFjX2NhbDFfYml0czsJLy8gYml0cyBsYXN0IHdyaXR0ZW4gdG8gZGEgY2FsaWJyYXRpb24gcmVnaXN0ZXIgMQorCXVuc2lnbmVkIGludCBhb19yYW5nZVtNQVhfQU9fQ0hBTk5FTFNdOwkvLyBjdXJyZW50IHJhbmdlIHNldHRpbmdzIGZvciBvdXRwdXQgY2hhbm5lbHMKKwl1MTYgZWVwcm9tX2RhdGFbRUVQUk9NX1NJWkVdOwkvLyBzb2Z0d2FyZSBjb3B5IG9mIGJvYXJkJ3MgZWVwcm9tCit9OworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGNiX3BjaWRkYV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGNiX3BjaWRkYV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBjYl9wY2lkZGFfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKy8vc3RhdGljIGludCBjYl9wY2lkZGFfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyxzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgY2JfcGNpZGRhX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisvL3N0YXRpYyBpbnQgY2JfcGNpZGRhX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKKy8vc3RhdGljIGludCBjYl9wY2lkZGFfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKTsKKy8vc3RhdGljIGludCBjYl9wY2lkZGFfbnNfdG9fdGltZXIodW5zaWduZWQgaW50ICpucyxpbnQgcm91bmQpOworc3RhdGljIHVuc2lnbmVkIGludCBjYl9wY2lkZGFfc2VyaWFsX2luKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB2b2lkIGNiX3BjaWRkYV9zZXJpYWxfb3V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgdmFsdWUsCisJdW5zaWduZWQgaW50IG51bV9iaXRzKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2JfcGNpZGRhX3JlYWRfZWVwcm9tKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBhZGRyZXNzKTsKK3N0YXRpYyB2b2lkIGNiX3BjaWRkYV9jYWxpYnJhdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsLAorCXVuc2lnbmVkIGludCByYW5nZSk7CisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2NiX3BjaWRkYSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJjYl9wY2lkZGEiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmNiX3BjaWRkYV9hdHRhY2gsCisgICAgICBkZXRhY2g6Y2JfcGNpZGRhX2RldGFjaCwKK307CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4KKyAqLworc3RhdGljIGludCBjYl9wY2lkZGFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJaW50IGluZGV4OworCisJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpZGRhOiAiLCBkZXYtPm1pbm9yKTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGNiX3BjaWRkYV9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworLyoKKyAqIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuCisgKi8KKwlwcmludGsoIlxuIik7CisKKwlmb3IgKHBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQlwY2lkZXYgIT0gTlVMTDsKKwkJcGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpZGV2KSkgeworCQlpZiAocGNpZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9DQikgeworCQkJaWYgKGl0LT5vcHRpb25zWzBdIHx8IGl0LT5vcHRpb25zWzFdKSB7CisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gaXQtPm9wdGlvbnNbMF0gfHwKKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0KKwkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTl9CT0FSRFM7IGluZGV4KyspIHsKKwkJCQlpZiAoY2JfcGNpZGRhX2JvYXJkc1tpbmRleF0uZGV2aWNlX2lkID09CisJCQkJCXBjaWRldi0+ZGV2aWNlKSB7CisJCQkJCWdvdG8gZm91bmQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWlmICghcGNpZGV2KSB7CisJCXByaW50aygiTm90IGEgQ29tcHV0ZXJCb2FyZHMvTWVhc3VyZW1lbnRDb21wdXRpbmcgY2FyZCBvbiByZXF1ZXN0ZWQgcG9zaXRpb25cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisgICAgICBmb3VuZDoKKwlkZXZwcml2LT5wY2lfZGV2ID0gcGNpZGV2OworCWRldi0+Ym9hcmRfcHRyID0gY2JfcGNpZGRhX2JvYXJkcyArIGluZGV4OworCS8vICJ0aGlzYm9hcmQiIG1hY3JvIGNhbiBiZSB1c2VkIGZyb20gaGVyZS4KKwlwcmludGsoIkZvdW5kICVzIGF0IHJlcXVlc3RlZCBwb3NpdGlvblxuIiwgdGhpc2JvYXJkLT5uYW1lKTsKKworCS8qCisJICogRW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucy4KKwkgKi8KKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCB0aGlzYm9hcmQtPm5hbWUpKSB7CisJCXByaW50aygiY2JfcGNpZGRhOiBmYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKworLyoKKyAqIEFsbG9jYXRlIHRoZSBJL08gcG9ydHMuCisgKi8KKwlkZXZwcml2LT5kaWdpdGFsaW8gPQorCQlwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwgRElHSVRBTElPX0JBRFJJTkRFWCk7CisJZGV2cHJpdi0+ZGFjID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsIERBQ19CQURSSU5ERVgpOworCisvKgorICogV2FybiBhYm91dCB0aGUgc3RhdHVzIG9mIHRoZSBkcml2ZXIuCisgKi8KKwlpZiAodGhpc2JvYXJkLT5zdGF0dXMgPT0gMikKKwkJcHJpbnRrKCJXQVJOSU5HOiBEUklWRVIgRk9SIFRISVMgQk9BUkQgTk9UIENIRUNLRUQgV0lUSCBNQU5VQUwuICIgIldPUktTIEFTU1VNSU5HIEZVTEwgQ09NUEFUSUJJTElUWSBXSVRIIFBDSS1EREEwOC8xMi4gIiAiUExFQVNFIFJFUE9SVCBVU0FHRSBUTyA8aXZhbm1yQGFsdGF2aXN0YS5jb20+LlxuIik7CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4KKyAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4KKyAqLworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMykgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX2NoYW5zOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFvX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNib2FyZC0+cmFuZ2VzOworCXMtPmluc25fd3JpdGUgPSBjYl9wY2lkZGFfYW9fd2luc247CisvLyAgICAgIHMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisvLyAgICAgIHMtPmRvX2NtZCA9IGNiX3BjaWRkYV9haV9jbWQ7CisvLyAgICAgIHMtPmRvX2NtZHRlc3QgPSBjYl9wY2lkZGFfYWlfY21kdGVzdDsKKworCS8vIHR3byA4MjU1IGRpZ2l0YWwgaW8gc3ViZGV2aWNlcworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCBkZXZwcml2LT5kaWdpdGFsaW8pOworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCBkZXZwcml2LT5kaWdpdGFsaW8gKyBQT1JUMkEpOworCisJcHJpbnRrKCIgZWVwcm9tOiIpOworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IEVFUFJPTV9TSVpFOyBpbmRleCsrKSB7CisJCWRldnByaXYtPmVlcHJvbV9kYXRhW2luZGV4XSA9IGNiX3BjaWRkYV9yZWFkX2VlcHJvbShkZXYsIGluZGV4KTsKKwkJcHJpbnRrKCIgJWk6MHgleCAiLCBpbmRleCwgZGV2cHJpdi0+ZWVwcm9tX2RhdGFbaW5kZXhdKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCisJLy8gc2V0IGNhbGlicmF0aW9ucyBkYWNzCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGhpc2JvYXJkLT5hb19jaGFuczsgaW5kZXgrKykKKwkJY2JfcGNpZGRhX2NhbGlicmF0ZShkZXYsIGluZGV4LCBkZXZwcml2LT5hb19yYW5nZVtpbmRleF0pOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgY2JfcGNpZGRhX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKy8qCisgKiBEZWFsbG9jYXRlIHRoZSBJL08gcG9ydHMuCisgKi8KKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldnByaXYtPmRhYykgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJfQorCS8vIGNsZWFudXAgODI1NQorCWlmIChkZXYtPnN1YmRldmljZXMpIHsKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDEpOworCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMik7CisJfQorCisJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpZGRhOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJIHdpbGwgcHJvZ3JhbSB0aGlzIGxhdGVyLi4uIDstKQorICovCisjaWYgMAorc3RhdGljIGludCBjYl9wY2lkZGFfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJcHJpbnRrKCJjYl9wY2lkZGFfYWlfY21kXG4iKTsKKwlwcmludGsoInN1YmRldjogJWRcbiIsIGNtZC0+c3ViZGV2KTsKKwlwcmludGsoImZsYWdzOiAlZFxuIiwgY21kLT5mbGFncyk7CisJcHJpbnRrKCJzdGFydF9zcmM6ICVkXG4iLCBjbWQtPnN0YXJ0X3NyYyk7CisJcHJpbnRrKCJzdGFydF9hcmc6ICVkXG4iLCBjbWQtPnN0YXJ0X2FyZyk7CisJcHJpbnRrKCJzY2FuX2JlZ2luX3NyYzogJWRcbiIsIGNtZC0+c2Nhbl9iZWdpbl9zcmMpOworCXByaW50aygiY29udmVydF9zcmM6ICVkXG4iLCBjbWQtPmNvbnZlcnRfc3JjKTsKKwlwcmludGsoImNvbnZlcnRfYXJnOiAlZFxuIiwgY21kLT5jb252ZXJ0X2FyZyk7CisJcHJpbnRrKCJzY2FuX2VuZF9zcmM6ICVkXG4iLCBjbWQtPnNjYW5fZW5kX3NyYyk7CisJcHJpbnRrKCJzY2FuX2VuZF9hcmc6ICVkXG4iLCBjbWQtPnNjYW5fZW5kX2FyZyk7CisJcHJpbnRrKCJzdG9wX3NyYzogJWRcbiIsIGNtZC0+c3RvcF9zcmMpOworCXByaW50aygic3RvcF9hcmc6ICVkXG4iLCBjbWQtPnN0b3BfYXJnKTsKKwlwcmludGsoImNoYW5saXN0X2xlbjogJWRcbiIsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKK30KKyNlbmRpZgorCisjaWYgMAorc3RhdGljIGludCBjYl9wY2lkZGFfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBjbWR0ZXN0IHRlc3RzIGEgcGFydGljdWxhciBjb21tYW5kIHRvIHNlZSBpZiBpdCBpcyB2YWxpZC4KKwkgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKwkgKiBhbmQgdGhlbiBoYXZlIGl0IGV4ZWN1dGVzIGJ5IHRoZSBjbWQgaW9jdGwuCisJICoKKwkgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCBvciAwLCBkZXBlbmRpbmcgb24gd2hpY2ggdGVzdHMKKwkgKiB0aGUgY29tbWFuZCBwYXNzZXMuICovCisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogbm90ZSB0aGF0IG11dHVhbCBjb21wYXRpYmxpdHkgaXMgbm90IGFuIGlzc3VlIGhlcmUgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSCisJCSYmIGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIE1BWF9TUEVFRAkxMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworI2RlZmluZSBNSU5fU1BFRUQJMTAwMDAwMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IE1BWF9TUEVFRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TUEVFRDsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gTUlOX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUlOX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBleHRlcm5hbCB0cmlnZ2VyICovCisJCS8qIHNob3VsZCBiZSBsZXZlbC9lZGdlLCBoaS9sbyBzcGVjaWZpY2F0aW9uIGhlcmUgKi8KKwkJLyogc2hvdWxkIHNwZWNpZnkgbXVsdGlwbGUgZXh0ZXJuYWwgdHJpZ2dlcnMgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPiA5KSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSBNQVhfU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA+IE1JTl9TUEVFRCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IE1JTl9TUEVFRDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQkvKiBzZWUgYWJvdmUgKi8KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiA5KSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnID4gMHgwMGZmZmZmZikgeworCQkJY21kLT5zdG9wX2FyZyA9IDB4MDBmZmZmZmY7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWNiX3BjaWRkYV9uc190b190aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQljYl9wY2lkZGFfbnNfdG9fdGltZXIoJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIgJiYKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPAorCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHJlcXVpcmUgYSBwYXJ0aWN1bGFyIGZvcm0sIHRoaXMgaXMganVzdAorICogd2hhdCBoYXBwZW5zIHRvIGJlIHVzZWQgaW4gc29tZSBvZiB0aGUgZHJpdmVycy4gIEl0IHNob3VsZAorICogY29udmVydCBucyBuYW5vc2Vjb25kcyB0byBhIGNvdW50ZXIgdmFsdWUgc3VpdGFibGUgZm9yIHByb2dyYW1taW5nCisgKiB0aGUgZGV2aWNlLiAgQWxzbywgaXQgc2hvdWxkIGFkanVzdCBucyBzbyB0aGF0IGl0IGNvb3Jlc3BvbmRzIHRvCisgKiB0aGUgYWN0dWFsIHRpbWUgdGhhdCB0aGUgZGV2aWNlIHdpbGwgdXNlLiAqLworI2lmIDAKK3N0YXRpYyBpbnQgY2JfcGNpZGRhX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCkKK3sKKwkvKiB0cml2aWFsIHRpbWVyICovCisJcmV0dXJuICpuczsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGNiX3BjaWRkYV9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGNvbW1hbmQ7CisJdW5zaWduZWQgaW50IGNoYW5uZWwsIHJhbmdlOworCisJY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCisJLy8gYWRqdXN0IGNhbGlicmF0aW9uIGRhY3MgaWYgcmFuZ2UgaGFzIGNoYW5nZWQKKwlpZiAocmFuZ2UgIT0gZGV2cHJpdi0+YW9fcmFuZ2VbY2hhbm5lbF0pCisJCWNiX3BjaWRkYV9jYWxpYnJhdGUoZGV2LCBjaGFubmVsLCByYW5nZSk7CisKKwkvKiBvdXRwdXQgY2hhbm5lbCBjb25maWd1cmF0aW9uICovCisJY29tbWFuZCA9IE5PU1UgfCBFTkFCTEVEQUM7CisKKwkvKiBvdXRwdXQgY2hhbm5lbCByYW5nZSAqLworCXN3aXRjaCAocmFuZ2UpIHsKKwljYXNlIDA6CisJCWNvbW1hbmQgfD0gQklQIHwgUkFOR0UxMFY7CisJCWJyZWFrOworCWNhc2UgMToKKwkJY29tbWFuZCB8PSBCSVAgfCBSQU5HRTVWOworCQlicmVhazsKKwljYXNlIDI6CisJCWNvbW1hbmQgfD0gQklQIHwgUkFOR0UyVjU7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJY29tbWFuZCB8PSBVTklQIHwgUkFOR0UxMFY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJY29tbWFuZCB8PSBVTklQIHwgUkFOR0U1VjsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQljb21tYW5kIHw9IFVOSVAgfCBSQU5HRTJWNTsKKwkJYnJlYWs7CisJfTsKKworCS8qIG91dHB1dCBjaGFubmVsIHNwZWNpZmljYXRpb24gKi8KKwljb21tYW5kIHw9IGNoYW5uZWwgPDwgMjsKKwlvdXR3KGNvbW1hbmQsIGRldnByaXYtPmRhYyArIERBQ09OVFJPTCk7CisKKwkvKiB3cml0ZSBkYXRhICovCisJb3V0dyhkYXRhWzBdLCBkZXZwcml2LT5kYWMgKyBEQURBVEEgKyBjaGFubmVsICogMik7CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiAxOworfQorCisvLyBsb3dsZXZlbCByZWFkIGZyb20gZWVwcm9tCitzdGF0aWMgdW5zaWduZWQgaW50IGNiX3BjaWRkYV9zZXJpYWxfaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbHVlID0gMDsKKwlpbnQgaTsKKwljb25zdCBpbnQgdmFsdWVfd2lkdGggPSAxNjsJLy8gbnVtYmVyIG9mIGJpdHMgd2lkZSB2YWx1ZXMgYXJlCisKKwlmb3IgKGkgPSAxOyBpIDw9IHZhbHVlX3dpZHRoOyBpKyspIHsKKwkJLy8gcmVhZCBiaXRzIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGZpcnN0CisJCWlmIChpbndfcChkZXZwcml2LT5kYWMgKyBEQUNBTElCUkFUSU9OMSkgJiBTRVJJQUxfT1VUX0JJVCkgeworCQkJdmFsdWUgfD0gMSA8PCAodmFsdWVfd2lkdGggLSBpKTsKKwkJfQorCX0KKworCXJldHVybiB2YWx1ZTsKK30KKworLy8gbG93bGV2ZWwgd3JpdGUgdG8gZWVwcm9tL2RhYworc3RhdGljIHZvaWQgY2JfcGNpZGRhX3NlcmlhbF9vdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCB2YWx1ZSwKKwl1bnNpZ25lZCBpbnQgbnVtX2JpdHMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IG51bV9iaXRzOyBpKyspIHsKKwkJLy8gc2VuZCBiaXRzIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGZpcnN0CisJCWlmICh2YWx1ZSAmICgxIDw8IChudW1fYml0cyAtIGkpKSkKKwkJCWRldnByaXYtPmRhY19jYWwxX2JpdHMgfD0gU0VSSUFMX0lOX0JJVDsKKwkJZWxzZQorCQkJZGV2cHJpdi0+ZGFjX2NhbDFfYml0cyAmPSB+U0VSSUFMX0lOX0JJVDsKKwkJb3V0d19wKGRldnByaXYtPmRhY19jYWwxX2JpdHMsIGRldnByaXYtPmRhYyArIERBQ0FMSUJSQVRJT04xKTsKKwl9Cit9CisKKy8vIHJlYWRzIGEgMTYgYml0IHZhbHVlIGZyb20gYm9hcmQncyBlZXByb20KK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2JfcGNpZGRhX3JlYWRfZWVwcm9tKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBhZGRyZXNzKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBjYWwyX2JpdHM7CisJdW5zaWduZWQgaW50IHZhbHVlOworCWNvbnN0IGludCBtYXhfbnVtX2NhbGRhY3MgPSA0OwkvLyBvbmUgY2FsZGFjIGZvciBldmVyeSB0d28gZGFjIGNoYW5uZWxzCisJY29uc3QgaW50IHJlYWRfaW5zdHJ1Y3Rpb24gPSAweDY7CS8vIGJpdHMgdG8gc2VuZCB0byB0ZWxsIGVlcHJvbSB3ZSB3YW50IHRvIHJlYWQKKwljb25zdCBpbnQgaW5zdHJ1Y3Rpb25fbGVuZ3RoID0gMzsKKwljb25zdCBpbnQgYWRkcmVzc19sZW5ndGggPSA4OworCisJLy8gc2VuZCBzZXJpYWwgb3V0cHV0IHN0cmVhbSB0byBlZXByb20KKwljYWwyX2JpdHMgPSBTRUxFQ1RfRUVQUk9NX0JJVCB8IERFU0VMRUNUX1JFRl9EQUNfQklUIHwgRFVNTVlfQklUOworCS8vIGRlYWN0aXZhdGUgY2FsZGFjcyAob25lIGNhbGRhYyBmb3IgZXZlcnkgdHdvIGNoYW5uZWxzKQorCWZvciAoaSA9IDA7IGkgPCBtYXhfbnVtX2NhbGRhY3M7IGkrKykgeworCQljYWwyX2JpdHMgfD0gREVTRUxFQ1RfQ0FMREFDX0JJVChpKTsKKwl9CisJb3V0d19wKGNhbDJfYml0cywgZGV2cHJpdi0+ZGFjICsgREFDQUxJQlJBVElPTjIpOworCisJLy8gdGVsbCBlZXByb20gd2Ugd2FudCB0byByZWFkCisJY2JfcGNpZGRhX3NlcmlhbF9vdXQoZGV2LCByZWFkX2luc3RydWN0aW9uLCBpbnN0cnVjdGlvbl9sZW5ndGgpOworCS8vIHNlbmQgYWRkcmVzcyB3ZSB3YW50IHRvIHJlYWQgZnJvbQorCWNiX3BjaWRkYV9zZXJpYWxfb3V0KGRldiwgYWRkcmVzcywgYWRkcmVzc19sZW5ndGgpOworCisJdmFsdWUgPSBjYl9wY2lkZGFfc2VyaWFsX2luKGRldik7CisKKwkvLyBkZWFjdGl2YXRlIGVlcHJvbQorCWNhbDJfYml0cyAmPSB+U0VMRUNUX0VFUFJPTV9CSVQ7CisJb3V0d19wKGNhbDJfYml0cywgZGV2cHJpdi0+ZGFjICsgREFDQUxJQlJBVElPTjIpOworCisJcmV0dXJuIHZhbHVlOworfQorCisvLyB3cml0ZXMgdG8gOCBiaXQgY2FsaWJyYXRpb24gZGFjcworc3RhdGljIHZvaWQgY2JfcGNpZGRhX3dyaXRlX2NhbGRhYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNhbGRhYywKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGludCBjYWwyX2JpdHM7CisJdW5zaWduZWQgaW50IGk7CisJY29uc3QgaW50IG51bV9jaGFubmVsX2JpdHMgPSAzOwkvLyBjYWxkYWNzIHVzZSAzIGJpdCBjaGFubmVsIHNwZWNpZmljYXRpb24KKwljb25zdCBpbnQgbnVtX2NhbGRhY19iaXRzID0gODsJLy8gOCBiaXQgY2FsaWJyYXRpb24gZGFjcworCWNvbnN0IGludCBtYXhfbnVtX2NhbGRhY3MgPSA0OwkvLyBvbmUgY2FsZGFjIGZvciBldmVyeSB0d28gZGFjIGNoYW5uZWxzCisKKwkvKiB3cml0ZSAzIGJpdCBjaGFubmVsICovCisJY2JfcGNpZGRhX3NlcmlhbF9vdXQoZGV2LCBjaGFubmVsLCBudW1fY2hhbm5lbF9iaXRzKTsKKwkvLyB3cml0ZSA4IGJpdCBjYWxkYWMgdmFsdWUKKwljYl9wY2lkZGFfc2VyaWFsX291dChkZXYsIHZhbHVlLCBudW1fY2FsZGFjX2JpdHMpOworCisJLy8gbGF0Y2ggc3RyZWFtIGludG8gYXBwcm9wcmlhdGUgY2FsZGFjCisJLy8gZGVzZWxlY3QgcmVmZXJlbmNlIGRhYworCWNhbDJfYml0cyA9IERFU0VMRUNUX1JFRl9EQUNfQklUIHwgRFVNTVlfQklUOworCS8vIGRlYWN0aXZhdGUgY2FsZGFjcyAob25lIGNhbGRhYyBmb3IgZXZlcnkgdHdvIGNoYW5uZWxzKQorCWZvciAoaSA9IDA7IGkgPCBtYXhfbnVtX2NhbGRhY3M7IGkrKykgeworCQljYWwyX2JpdHMgfD0gREVTRUxFQ1RfQ0FMREFDX0JJVChpKTsKKwl9CisJLy8gYWN0aXZhdGUgdGhlIGNhbGRhYyB3ZSB3YW50CisJY2FsMl9iaXRzICY9IH5ERVNFTEVDVF9DQUxEQUNfQklUKGNhbGRhYyk7CisJb3V0d19wKGNhbDJfYml0cywgZGV2cHJpdi0+ZGFjICsgREFDQUxJQlJBVElPTjIpOworCS8vIGRlYWN0aXZhdGUgY2FsZGFjCisJY2FsMl9iaXRzIHw9IERFU0VMRUNUX0NBTERBQ19CSVQoY2FsZGFjKTsKKwlvdXR3X3AoY2FsMl9iaXRzLCBkZXZwcml2LT5kYWMgKyBEQUNBTElCUkFUSU9OMik7Cit9CisKKy8vIHJldHVybnMgY2FsZGFjIHRoYXQgY2FsaWJyYXRlcyBnaXZlbiBhbmFsb2cgb3V0IGNoYW5uZWwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FsZGFjX251bWJlcih1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCAvIDI7Cit9CisKKy8vIHJldHVybnMgY2FsZGFjIGNoYW5uZWwgdGhhdCBwcm92aWRlcyBmaW5lIGdhaW4gZm9yIGdpdmVuIGFvIGNoYW5uZWwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmluZV9nYWluX2NoYW5uZWwodW5zaWduZWQgaW50IGFvX2NoYW5uZWwpCit7CisJcmV0dXJuIDQgKiAoYW9fY2hhbm5lbCAlIDIpOworfQorCisvLyByZXR1cm5zIGNhbGRhYyBjaGFubmVsIHRoYXQgcHJvdmlkZXMgY29hcnNlIGdhaW4gZm9yIGdpdmVuIGFvIGNoYW5uZWwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29hcnNlX2dhaW5fY2hhbm5lbCh1bnNpZ25lZCBpbnQgYW9fY2hhbm5lbCkKK3sKKwlyZXR1cm4gMSArIDQgKiAoYW9fY2hhbm5lbCAlIDIpOworfQorCisvLyByZXR1cm5zIGNhbGRhYyBjaGFubmVsIHRoYXQgcHJvdmlkZXMgY29hcnNlIG9mZnNldCBmb3IgZ2l2ZW4gYW8gY2hhbm5lbAorc3RhdGljIHVuc2lnbmVkIGludCBjb2Fyc2Vfb2Zmc2V0X2NoYW5uZWwodW5zaWduZWQgaW50IGFvX2NoYW5uZWwpCit7CisJcmV0dXJuIDIgKyA0ICogKGFvX2NoYW5uZWwgJSAyKTsKK30KKworLy8gcmV0dXJucyBjYWxkYWMgY2hhbm5lbCB0aGF0IHByb3ZpZGVzIGZpbmUgb2Zmc2V0IGZvciBnaXZlbiBhbyBjaGFubmVsCitzdGF0aWMgdW5zaWduZWQgaW50IGZpbmVfb2Zmc2V0X2NoYW5uZWwodW5zaWduZWQgaW50IGFvX2NoYW5uZWwpCit7CisJcmV0dXJuIDMgKyA0ICogKGFvX2NoYW5uZWwgJSAyKTsKK30KKworLy8gcmV0dXJucyBlZXByb20gYWRkcmVzcyB0aGF0IHByb3ZpZGVzIG9mZnNldCBmb3IgZ2l2ZW4gYW8gY2hhbm5lbCBhbmQgcmFuZ2UKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2Zmc2V0X2VlcHJvbV9hZGRyZXNzKHVuc2lnbmVkIGludCBhb19jaGFubmVsLAorCXVuc2lnbmVkIGludCByYW5nZSkKK3sKKwlyZXR1cm4gMHg3ICsgMiAqIHJhbmdlICsgMTIgKiBhb19jaGFubmVsOworfQorCisvLyByZXR1cm5zIGVlcHJvbSBhZGRyZXNzIHRoYXQgcHJvdmlkZXMgZ2FpbiBjYWxpYnJhdGlvbiBmb3IgZ2l2ZW4gYW8gY2hhbm5lbCBhbmQgcmFuZ2UKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2Fpbl9lZXByb21fYWRkcmVzcyh1bnNpZ25lZCBpbnQgYW9fY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgcmFuZ2UpCit7CisJcmV0dXJuIDB4OCArIDIgKiByYW5nZSArIDEyICogYW9fY2hhbm5lbDsKK30KKworLy8gcmV0dXJucyB1cHBlciBieXRlIG9mIGVlcHJvbSBlbnRyeSwgd2hpY2ggZ2l2ZXMgdGhlIGNvYXJzZSBhZGp1c3RtZW50IHZhbHVlcworc3RhdGljIHVuc2lnbmVkIGludCBlZXByb21fY29hcnNlX2J5dGUodW5zaWduZWQgaW50IHdvcmQpCit7CisJcmV0dXJuICh3b3JkID4+IDgpICYgMHhmZjsKK30KKworLy8gcmV0dXJucyBsb3dlciBieXRlIG9mIGVlcHJvbSBlbnRyeSwgd2hpY2ggZ2l2ZXMgdGhlIGZpbmUgYWRqdXN0bWVudCB2YWx1ZXMKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZWVwcm9tX2ZpbmVfYnl0ZSh1bnNpZ25lZCBpbnQgd29yZCkKK3sKKwlyZXR1cm4gd29yZCAmIDB4ZmY7Cit9CisKKy8vIHNldCBjYWxkYWNzIHRvIGVlcHJvbSB2YWx1ZXMgZm9yIGdpdmVuIGNoYW5uZWwgYW5kIHJhbmdlCitzdGF0aWMgdm9pZCBjYl9wY2lkZGFfY2FsaWJyYXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgcmFuZ2UpCit7CisJdW5zaWduZWQgaW50IGNvYXJzZV9vZmZzZXQsIGZpbmVfb2Zmc2V0LCBjb2Fyc2VfZ2FpbiwgZmluZV9nYWluOworCisJLy8gcmVtZW1iZXIgcmFuZ2Ugc28gd2UgY2FuIHRlbGwgd2hlbiB3ZSBuZWVkIHRvIHJlYWRqdXN0IGNhbGlicmF0aW9uCisJZGV2cHJpdi0+YW9fcmFuZ2VbY2hhbm5lbF0gPSByYW5nZTsKKworCS8vIGdldCB2YWx1ZXMgZnJvbSBlZXByb20gZGF0YQorCWNvYXJzZV9vZmZzZXQgPQorCQllZXByb21fY29hcnNlX2J5dGUoZGV2cHJpdi0+CisJCWVlcHJvbV9kYXRhW29mZnNldF9lZXByb21fYWRkcmVzcyhjaGFubmVsLCByYW5nZSldKTsKKwlmaW5lX29mZnNldCA9CisJCWVlcHJvbV9maW5lX2J5dGUoZGV2cHJpdi0+CisJCWVlcHJvbV9kYXRhW29mZnNldF9lZXByb21fYWRkcmVzcyhjaGFubmVsLCByYW5nZSldKTsKKwljb2Fyc2VfZ2FpbiA9CisJCWVlcHJvbV9jb2Fyc2VfYnl0ZShkZXZwcml2LT4KKwkJZWVwcm9tX2RhdGFbZ2Fpbl9lZXByb21fYWRkcmVzcyhjaGFubmVsLCByYW5nZSldKTsKKwlmaW5lX2dhaW4gPQorCQllZXByb21fZmluZV9ieXRlKGRldnByaXYtPgorCQllZXByb21fZGF0YVtnYWluX2VlcHJvbV9hZGRyZXNzKGNoYW5uZWwsIHJhbmdlKV0pOworCisJLy8gc2V0IGNhbGRhY3MKKwljYl9wY2lkZGFfd3JpdGVfY2FsZGFjKGRldiwgY2FsZGFjX251bWJlcihjaGFubmVsKSwKKwkJY29hcnNlX29mZnNldF9jaGFubmVsKGNoYW5uZWwpLCBjb2Fyc2Vfb2Zmc2V0KTsKKwljYl9wY2lkZGFfd3JpdGVfY2FsZGFjKGRldiwgY2FsZGFjX251bWJlcihjaGFubmVsKSwKKwkJZmluZV9vZmZzZXRfY2hhbm5lbChjaGFubmVsKSwgZmluZV9vZmZzZXQpOworCWNiX3BjaWRkYV93cml0ZV9jYWxkYWMoZGV2LCBjYWxkYWNfbnVtYmVyKGNoYW5uZWwpLAorCQljb2Fyc2VfZ2Fpbl9jaGFubmVsKGNoYW5uZWwpLCBjb2Fyc2VfZ2Fpbik7CisJY2JfcGNpZGRhX3dyaXRlX2NhbGRhYyhkZXYsIGNhbGRhY19udW1iZXIoY2hhbm5lbCksCisJCWZpbmVfZ2Fpbl9jaGFubmVsKGNoYW5uZWwpLCBmaW5lX2dhaW4pOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9jYl9wY2lkZGEsIGNiX3BjaWRkYV9wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYTRiMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKKyAgICBBIENvbWVkaSBkcml2ZXIgZm9yIFBDSS1ESU8yNEggJiBQQ0ktRElPNDhIIG9mIENvbXB1dGVyQm9hcmRzIChjdXJyZW50bHkgTWVhc3VyZW1lbnRDb21wdXRpbmcpCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBjYl9wY2lkaW8KK0Rlc2NyaXB0aW9uOiBDb21wdXRlckJvYXJkcycgRElPIGJvYXJkcyB3aXRoIFBDSSBpbnRlcmZhY2UKK0RldmljZXM6IFtNZWFzdXJlbWVudCBDb21wdXRpbmddIFBDSS1ESU8yNCAoY2JfcGNpZGlvKSwgUENJLURJTzI0SCwgUENJLURJTzQ4SAorQXV0aG9yOiBZb3NoaXlhIE1hdHN1emFrYQorVXBkYXRlZDogTW9uLCAyOSBPY3QgMjAwNyAxNTo0MDo0NyArMDAwMAorU3RhdHVzOiBleHBlcmltZW50YWwKKworVGhpcyBkcml2ZXIgaGFzIGJlZW4gbW9kaWZpZWQgZnJvbSBza2VsLmMgb2YgY29tZWRpLTAuNy43MC4KKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBhdmFpbGFibGUgUENJIGRldmljZSB3aWxsCisgIGJlIHVzZWQuCisKK1Bhc3NpbmcgYSB6ZXJvIGZvciBhbiBvcHRpb24gaXMgdGhlIHNhbWUgYXMgbGVhdmluZyBpdCB1bnNwZWNpZmllZC4KKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhFQURFUiBGSUxFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTUFDUk9TIGFuZCBEQVRBVFlQRVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NCCTB4MTMwNworCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciB0d28gaW1hZ2luYXJ5IGJvYXJkcy4gIERlc2NyaWJpbmcgdGhlCisgKiBib2FyZHMgaW4gdGhpcyB3YXkgaXMgb3B0aW9uYWwsIGFuZCBjb21wbGV0ZWx5IGRyaXZlci1kZXBlbmRlbnQuCisgKiBTb21lIGRyaXZlcnMgdXNlIGFycmF5cyBzdWNoIGFzIHRoaXMsIG90aGVyIGRvIG5vdC4KKyAqLworc3RydWN0IHBjaWRpb19ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsJLy8gYW5tZSBvZiB0aGUgYm9hcmQKKwlpbnQgbl84MjU1OwkJLy8gbnVtYmVyIG9mIDgyNTUgY2hpcHMgb24gYm9hcmQKKworCS8vIGluZGljZXMgb2YgYmFzZSBhZGRyZXNzIHJlZ2lvbnMKKwlpbnQgcGNpY29udHJvbGVyX2JhZHJpbmRleDsKKwlpbnQgZGlvcmVnc19iYWRyaW5kZXg7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaWRpb19ib2FyZCBwY2lkaW9fYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY2ktZGlvMjQiLAorCSAgICAgIG5fODI1NToJMSwKKwkgICAgICBwY2ljb250cm9sZXJfYmFkcmluZGV4OjEsCisJICAgICAgZGlvcmVnc19iYWRyaW5kZXg6MiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kaW8yNGgiLAorCSAgICAgIG5fODI1NToJMSwKKwkgICAgICBwY2ljb250cm9sZXJfYmFkcmluZGV4OjEsCisJICAgICAgZGlvcmVnc19iYWRyaW5kZXg6MiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjaS1kaW80OGgiLAorCSAgICAgIG5fODI1NToJMiwKKwkgICAgICBwY2ljb250cm9sZXJfYmFkcmluZGV4OjAsCisJICAgICAgZGlvcmVnc19iYWRyaW5kZXg6MSwKKwkJfSwKK307CisKKy8qIFRoaXMgaXMgdXNlZCBieSBtb2Rwcm9iZSB0byB0cmFuc2xhdGUgUENJIElEcyB0byBkcml2ZXJzLiAgU2hvdWxkCisgKiBvbmx5IGJlIHVzZWQgZm9yIFBDSSBhbmQgSVNBLVBuUCBkZXZpY2VzICovCisvKiBQbGVhc2UgYWRkIHlvdXIgUENJIHZlbmRvciBJRCB0byBjb21lZGlkZXYuaCwgYW5kIGl0IHdpbGwgYmUgZm9yd2FyZGVkCisgKiB1cHN0cmVhbS4gKi8KK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2lkaW9fcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDI4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDE0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9DQiwgMHgwMDBiLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lkaW9fcGNpX3RhYmxlKTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNpZGlvX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBwY2lkaW9fcHJpdmF0ZSB7CisJaW50IGRhdGE7CQkvLyBjdXJlbnRseSB1bnVzZWQKKworCS8qIHdvdWxkIGJlIHVzZWZ1bCBmb3IgYSBQQ0kgZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisKKwkvKiB1c2VkIGZvciBETyByZWFkYmFjaywgY3VyZW50bHkgdW51c2VkICovCisJdW5zaWduZWQgaW50IGRvX3JlYWRiYWNrWzRdOwkvKiB1cCB0byA0IHVuc2lnbmVkIGludCBzdWZmaWNlIHRvIGhvbGQgOTYgYml0cyBmb3IgUENJLURJTzk2ICovCisKKwl1bnNpZ25lZCBsb25nIGRpb19yZWdfYmFzZTsJLy8gYWRkcmVzcyBvZiBwb3J0IEEgb2YgdGhlIGZpcnN0IDgyNTUgY2hpcCBvbiBib2FyZAorfTsKKworLyoKKyAqIG1vc3QgZHJpdmVycyBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNybyB0byBtYWtlIGl0IGVhc3kgdG8KKyAqIGFjY2VzcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY2lkaW9fcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcGNpZGlvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjaWRpb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9jYl9wY2lkaW8gPSB7CisgICAgICBkcml2ZXJfbmFtZToiY2JfcGNpZGlvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2lkaW9fYXR0YWNoLAorICAgICAgZGV0YWNoOnBjaWRpb19kZXRhY2gsCisvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaWYgeW91IGFyZQorICogd3JpdGluZyBhIGRyaXZlciBmb3IgYSBJU0EgUG5QIG9yIFBDSSBjYXJkICovCisJLyogTW9zdCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSB0eXBlcyBvZiBib2FyZHMgYnkKKwkgKiBoYXZpbmcgYW4gYXJyYXkgb2YgYm9hcmQgc3RydWN0dXJlcy4gIFRoZXNlIHdlcmUgZGVmaW5lZAorCSAqIGluIHBjaWRpb19ib2FyZHNbXSBhYm92ZS4gIE5vdGUgdGhhdCB0aGUgZWxlbWVudCAnbmFtZScKKwkgKiB3YXMgZmlyc3QgaW4gdGhlIHN0cnVjdHVyZSAtLSBDb21lZGkgdXNlcyB0aGlzIGZhY3QgdG8KKwkgKiBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZSBib2FyZCB3aXRob3V0IGtub3dpbmcgYW55IGRldGFpbHMKKwkgKiBhYm91dCB0aGUgc3RydWN0dXJlIGV4Y2VwdCBmb3IgaXRzIGxlbmd0aC4KKwkgKiBXaGVuIGEgZGV2aWNlIGlzIGF0dGFjaGVkIChieSBjb21lZGlfY29uZmlnKSwgdGhlIG5hbWUKKwkgKiBvZiB0aGUgZGV2aWNlIGlzIGdpdmVuIHRvIENvbWVkaSwgYW5kIENvbWVkaSB0cmllcyB0bworCSAqIG1hdGNoIGl0IGJ5IGdvaW5nIHRocm91Z2ggdGhlIGxpc3Qgb2YgYm9hcmQgbmFtZXMuICBJZgorCSAqIHRoZXJlIGlzIGEgbWF0Y2gsIHRoZSBhZGRyZXNzIG9mIHRoZSBwb2ludGVyIGlzIHB1dAorCSAqIGludG8gZGV2LT5ib2FyZF9wdHIgYW5kIGRyaXZlci0+YXR0YWNoKCkgaXMgY2FsbGVkLgorCSAqCisJICogTm90ZSB0aGF0IHRoZXNlIGFyZSBub3QgbmVjZXNzYXJ5IGlmIHlvdSBjYW4gZGV0ZXJtaW5lCisJICogdGhlIHR5cGUgb2YgYm9hcmQgaW4gc29mdHdhcmUuICBJU0EgUG5QLCBQQ0ksIGFuZCBQQ01DSUEKKwkgKiBkZXZpY2VzIGFyZSBzdWNoIGJvYXJkcy4KKwkgKi8KKy8vIFRoZSBmb2xsb3dpbmcgZmllbGRzIHNob3VsZCBOT1QgYmUgaW5pdGlhbGl6ZWQgaWYgeW91IGFyZSBkZWFsaW5nIHdpdGggUENJIGRldmljZXMKKy8vICAgICAgYm9hcmRfbmFtZTogICAgIHBjaWRpb19ib2FyZHMsCisvLyAgICAgIG9mZnNldDogICAgICAgICBzaXplb2Yoc3RydWN0IHBjaWRpb19ib2FyZCksCisvLyAgICAgIG51bV9uYW1lczogICAgICBzaXplb2YocGNpZGlvX2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHBjaWRpb19ib2FyZCksCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRlVOQ1RJT05TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjaWRpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldiA9IE5VTEw7CisJaW50IGluZGV4OworCWludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogY2JfcGNpZGlvOiBcbiIsIGRldi0+bWlub3IpOworCisvKgorICogQWxsb2NhdGUgdGhlIHByaXZhdGUgc3RydWN0dXJlIGFyZWEuICBhbGxvY19wcml2YXRlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaWRpb19wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKy8qCisgKiBJZiB5b3UgY2FuIHByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIGEgc2VyaWVzCisgKiBpdCBpcywgdGhpcyBpcyB0aGUgcGxhY2UgdG8gZG8gaXQuICBPdGhlcndpc2UsIGRldi0+Ym9hcmRfcHRyCisgKiBzaG91bGQgYWxyZWFkeSBiZSBpbml0aWFsaXplZC4KKyAqLworLyoKKyAqIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuCisgKi8KKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJCS8vIGlzIGl0IG5vdCBhIGNvbXB1dGVyIGJvYXJkcyBjYXJkPworCQlpZiAocGNpZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9DQikKKwkJCWNvbnRpbnVlOworCQkvLyBsb29wIHRocm91Z2ggY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCisJCWZvciAoaW5kZXggPSAwOworCQkJaW5kZXggPCBzaXplb2YgcGNpZGlvX2JvYXJkcyAvIHNpemVvZihzdHJ1Y3QgcGNpZGlvX2JvYXJkKTsKKwkJCWluZGV4KyspIHsKKwkJCWlmIChwY2lkaW9fcGNpX3RhYmxlW2luZGV4XS5kZXZpY2UgIT0gcGNpZGV2LT5kZXZpY2UpCisJCQkJY29udGludWU7CisKKwkJCS8vIHdhcyBhIHBhcnRpY3VsYXIgYnVzL3Nsb3QgcmVxdWVzdGVkPworCQkJaWYgKGl0LT5vcHRpb25zWzBdIHx8IGl0LT5vcHRpb25zWzFdKSB7CisJCQkJLy8gYXJlIHdlIG9uIHRoZSB3cm9uZyBidXMvc2xvdD8KKwkJCQlpZiAocGNpZGV2LT5idXMtPm51bWJlciAhPSBpdC0+b3B0aW9uc1swXSB8fAorCQkJCQlQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSAhPQorCQkJCQlpdC0+b3B0aW9uc1sxXSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlkZXYtPmJvYXJkX3B0ciA9IHBjaWRpb19ib2FyZHMgKyBpbmRleDsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisKKwlwcmludGsoIk5vIHN1cHBvcnRlZCBDb21wdXRlckJvYXJkcy9NZWFzdXJlbWVudENvbXB1dGluZyBjYXJkIGZvdW5kIG9uICIKKwkJInJlcXVlc3RlZCBwb3NpdGlvblxuIik7CisJcmV0dXJuIC1FSU87CisKKyAgICAgIGZvdW5kOgorCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuICBOb3RlIHRoYXQgd2UgY2FuIHVzZSB0aGUgInRoaXNib2FyZCIKKyAqIG1hY3JvIG5vdywgc2luY2Ugd2UganVzdCBpbml0aWFsaXplZCBpdCBpbiB0aGUgbGFzdCBsaW5lLgorICovCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKKwlwcmludGsoIkZvdW5kICVzIG9uIGJ1cyAlaSwgc2xvdCAlaVxuIiwgdGhpc2JvYXJkLT5uYW1lLAorCQlkZXZwcml2LT5wY2lfZGV2LT5idXMtPm51bWJlciwKKwkJUENJX1NMT1QoZGV2cHJpdi0+cGNpX2Rldi0+ZGV2Zm4pKTsKKwlpZiAoY29tZWRpX3BjaV9lbmFibGUocGNpZGV2LCB0aGlzYm9hcmQtPm5hbWUpKSB7CisJCXByaW50aygiY2JfcGNpZGlvOiBmYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9uc1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXZwcml2LT5kaW9fcmVnX2Jhc2UKKwkJPQorCQlwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2cHJpdi0+cGNpX2RldiwKKwkJcGNpZGlvX2JvYXJkc1tpbmRleF0uZGlvcmVnc19iYWRyaW5kZXgpOworCisvKgorICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCB0aGlzYm9hcmQtPm5fODI1NSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCB0aGlzYm9hcmQtPm5fODI1NTsgaSsrKSB7CisJCXN1YmRldl84MjU1X2luaXQoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBpLAorCQkJTlVMTCwgZGV2cHJpdi0+ZGlvX3JlZ19iYXNlICsgaSAqIDQpOworCQlwcmludGsoIiBzdWJkZXYgJWQ6IGJhc2UgPSAweCVseFxuIiwgaSwKKwkJCWRldnByaXYtPmRpb19yZWdfYmFzZSArIGkgKiA0KTsKKwl9CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBwY2lkaW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGNiX3BjaWRpbzogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgeworCQkJaWYgKGRldnByaXYtPmRpb19yZWdfYmFzZSkgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJfQorCWlmIChkZXYtPnN1YmRldmljZXMpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCB0aGlzYm9hcmQtPm5fODI1NTsgaSsrKSB7CisJCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2NiX3BjaWRpbywgcGNpZGlvX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRhcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjcwNWZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYwpAQCAtMCwwICsxLDQ4NCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9jYl9wY2ltZGFzLmMKKyAgICBDb21lZGkgZHJpdmVyIGZvciBDb21wdXRlciBCb2FyZHMgUENJTS1EQVMxNjAyLzE2CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBjYl9wY2ltZGFzCitEZXNjcmlwdGlvbjogTWVhc3VyZW1lbnQgQ29tcHV0aW5nIFBDSSBNaWdyYXRpb24gc2VyaWVzIGJvYXJkcworRGV2aWNlczogW0NvbXB1dGVyQm9hcmRzXSBQQ0lNLURBUzE2MDIvMTYgKGNiX3BjaW1kYXMpCitBdXRob3I6IFJpY2hhcmQgQnl0aGV3YXkKK1VwZGF0ZWQ6IFdlZCwgMTMgTm92IDIwMDIgMTI6MzQ6NTYgKzAwMDAKK1N0YXR1czogZXhwZXJpbWVudGFsCisKK1dyaXR0ZW4gdG8gc3VwcG9ydCB0aGUgUENJTS1EQVMxNjAyLzE2IG9uIGEgMi40IHNlcmllcyBrZXJuZWwuCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgICBbMF0gLSBQQ0kgYnVzIG51bWJlcgorICAgIFsxXSAtIFBDSSBzbG90IG51bWJlcgorCitEZXZlbG9wZWQgZnJvbSBjYl9wY2lkYXMgYW5kIHNrZWwgYnkgUmljaGFyZCBCeXRoZXdheSAobW9jZWxldEBzdWNzLm9yZykuCitPbmx5IHN1cHBvcnRzIERJTywgQU8gYW5kIHNpbXBsZSBBSSBpbiBpdCdzIHByZXNlbnQgZm9ybS4KK05vIGludGVycnVwdHMsIG11bHRpIGNoYW5uZWwgb3IgRklGTyBBSSwgYWx0aG91Z2ggdGhlIGNhcmQgbG9va3MgbGlrZSBpdCBjb3VsZCBzdXBwb3J0IHRoaXMuCitTZWUgaHR0cDovL3d3dy5tZWFzdXJlbWVudGNvbXB1dGluZy5jb20vUERGTWFudWFscy9wY2ltLWRhczE2MDJfMTYucGRmIGZvciBtb3JlIGRldGFpbHMuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgInBseDkwNTIuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisKKy8vI2RlZmluZSBDQlBDSU1EQVNfREVCVUcKKyN1bmRlZiBDQlBDSU1EQVNfREVCVUcKKworLyogUmVnaXN0ZXJzIGZvciB0aGUgUENJTS1EQVMxNjAyLzE2ICovCisKKy8vIHNpemVzIG9mIGlvIHJlZ2lvbnMgKGJ5dGVzKQorI2RlZmluZSBCQURSMF9TSVpFIDIJCS8vPz8KKyNkZWZpbmUgQkFEUjFfU0laRSA0CisjZGVmaW5lIEJBRFIyX1NJWkUgNgorI2RlZmluZSBCQURSM19TSVpFIDE2CisjZGVmaW5lIEJBRFI0X1NJWkUgNAorCisvL0RBQyBPZmZzZXRzCisjZGVmaW5lIEFEQ19UUklHIDAKKyNkZWZpbmUgREFDMF9PRkZTRVQgMgorI2RlZmluZSBEQUMxX09GRlNFVCA0CisKKy8vQUkgYW5kIENvdW50ZXIgQ29uc3RhbnRzCisjZGVmaW5lIE1VWF9MSU1JVFMgMAorI2RlZmluZSBNQUlOX0NPTk5fRElPIDEKKyNkZWZpbmUgQURDX1NUQVQgMgorI2RlZmluZSBBRENfQ09OVl9TVEFUIDMKKyNkZWZpbmUgQURDX0lOVCA0CisjZGVmaW5lIEFEQ19QQUNFUiA1CisjZGVmaW5lIEJVUlNUX01PREUgNgorI2RlZmluZSBQUk9HX0dBSU4gNworI2RlZmluZSBDTEs4MjU0XzFfREFUQSA4CisjZGVmaW5lIENMSzgyNTRfMl9EQVRBIDkKKyNkZWZpbmUgQ0xLODI1NF8zX0RBVEEgMTAKKyNkZWZpbmUgQ0xLODI1NF9DT05UUk9MIDExCisjZGVmaW5lIFVTRVJfQ09VTlRFUiAxMgorI2RlZmluZSBSRVNJRF9DT1VOVF9IIDEzCisjZGVmaW5lIFJFU0lEX0NPVU5UX0wgMTQKKworLyogQm9hcmQgZGVzY3JpcHRpb24gKi8KK3N0cnVjdCBjYl9wY2ltZGFzX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIHNob3J0IGRldmljZV9pZDsKKwlpbnQgYWlfc2VfY2hhbnM7CS8vIElucHV0cyBpbiBzaW5nbGUtZW5kZWQgbW9kZQorCWludCBhaV9kaWZmX2NoYW5zOwkvLyBJbnB1dHMgaW4gZGlmZmVyZW50aWFsIG1vZGUKKwlpbnQgYWlfYml0czsJCS8vIGFuYWxvZyBpbnB1dCByZXNvbHV0aW9uCisJaW50IGFpX3NwZWVkOwkJLy8gZmFzdGVzdCBjb252ZXJzaW9uIHBlcmlvZCBpbiBucworCWludCBhb19uY2hhbjsJCS8vIG51bWJlciBvZiBhbmFsb2cgb3V0IGNoYW5uZWxzCisJaW50IGFvX2JpdHM7CQkvLyBhbmFsb2d1ZSBvdXRwdXQgcmVzb2x1dGlvbgorCWludCBoYXNfYW9fZmlmbzsJLy8gYW5hbG9nIG91dHB1dCBoYXMgZmlmbworCWludCBhb19zY2FuX3NwZWVkOwkvLyBhbmFsb2cgb3V0cHV0IHNwZWVkIGZvciAxNjAyIHNlcmllcyAoZm9yIGEgc2Nhbiwgbm90IGNvbnZlcnNpb24pCisJaW50IGZpZm9fc2l6ZTsJCS8vIG51bWJlciBvZiBzYW1wbGVzIGZpZm8gY2FuIGhvbGQKKwlpbnQgZGlvX2JpdHM7CQkvLyBudW1iZXIgb2YgZGlvIGJpdHMKKwlpbnQgaGFzX2RpbzsJCS8vIGhhcyBESU8KKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VzOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjYl9wY2ltZGFzX2JvYXJkIGNiX3BjaW1kYXNfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJQQ0lNLURBUzE2MDIvMTYiLAorCSAgICAgIGRldmljZV9pZDoweDU2LAorCSAgICAgIGFpX3NlX2NoYW5zOjE2LAorCSAgICAgIGFpX2RpZmZfY2hhbnM6OCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwJLy8/PworCSAgICAgIGFvX25jaGFuOjIsCisJICAgICAgYW9fYml0czoJMTIsCisJICAgICAgaGFzX2FvX2ZpZm86MCwJLy8/PworCSAgICAgIGFvX3NjYW5fc3BlZWQ6MTAwMDAsCisJCQkvLz8/CisJICAgICAgZmlmb19zaXplOjEwMjQsCisJICAgICAgZGlvX2JpdHM6MjQsCisJICAgICAgaGFzX2RpbzoJMSwKKy8vICAgICAgICAgICAgICByYW5nZXM6ICAgICAgICAgJmNiX3BjaW1kYXNfcmFuZ2VzLAorCQl9LAorfTsKKworLyogVGhpcyBpcyB1c2VkIGJ5IG1vZHByb2JlIHRvIHRyYW5zbGF0ZSBQQ0kgSURzIHRvIGRyaXZlcnMuICBTaG91bGQKKyAqIG9ubHkgYmUgdXNlZCBmb3IgUENJIGFuZCBJU0EtUG5QIGRldmljZXMgKi8KK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjYl9wY2ltZGFzX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMsIDB4MDA1NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY2JfcGNpbWRhc19wY2lfdGFibGUpOworCisjZGVmaW5lIE5fQk9BUkRTIDEJCS8vIE1heCBudW1iZXIgb2YgYm9hcmRzIHN1cHBvcnRlZAorCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBjYl9wY2ltZGFzX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBjYl9wY2ltZGFzX3ByaXZhdGUgeworCWludCBkYXRhOworCisJLy8gd291bGQgYmUgdXNlZnVsIGZvciBhIFBDSSBkZXZpY2UKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKworCS8vYmFzZSBhZGRyZXNzZXMKKwl1bnNpZ25lZCBsb25nIEJBRFIwOworCXVuc2lnbmVkIGxvbmcgQkFEUjE7CisJdW5zaWduZWQgbG9uZyBCQURSMjsKKwl1bnNpZ25lZCBsb25nIEJBRFIzOworCXVuc2lnbmVkIGxvbmcgQkFEUjQ7CisKKwkvKiBVc2VkIGZvciBBTyByZWFkYmFjayAqLworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKKworCS8vIFVzZWQgZm9yIERJTworCXVuc2lnbmVkIHNob3J0IGludCBwb3J0X2E7CS8vIGNvcHkgb2YgQkFEUjQrMAorCXVuc2lnbmVkIHNob3J0IGludCBwb3J0X2I7CS8vIGNvcHkgb2YgQkFEUjQrMQorCXVuc2lnbmVkIHNob3J0IGludCBwb3J0X2M7CS8vIGNvcHkgb2YgQkFEUjQrMgorCXVuc2lnbmVkIHNob3J0IGludCBkaW9fbW9kZTsJLy8gY29weSBvZiBCQURSNCszCisKK307CisKKy8qCisgKiBtb3N0IGRyaXZlcnMgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisgKiBhY2Nlc3MgdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgY2JfcGNpbWRhc19wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBjYl9wY2ltZGFzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGNiX3BjaW1kYXNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfY2JfcGNpbWRhcyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJjYl9wY2ltZGFzIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpjYl9wY2ltZGFzX2F0dGFjaCwKKyAgICAgIGRldGFjaDpjYl9wY2ltZGFzX2RldGFjaCwKK307CisKK3N0YXRpYyBpbnQgY2JfcGNpbWRhc19haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBjYl9wY2ltZGFzX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNiX3BjaW1kYXNfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IGNiX3BjaW1kYXNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJaW50IGluZGV4OworCS8vaW50IGk7CisKKwlwcmludGsoImNvbWVkaSVkOiBjYl9wY2ltZGFzOiAiLCBkZXYtPm1pbm9yKTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGNiX3BjaW1kYXNfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKy8qCisgKiBQcm9iZSB0aGUgZGV2aWNlIHRvIGRldGVybWluZSB3aGF0IGRldmljZSBpbiB0aGUgc2VyaWVzIGl0IGlzLgorICovCisJcHJpbnRrKCJcbiIpOworCisJZm9yIChwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpZGV2ICE9IE5VTEw7CisJCXBjaWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaWRldikpIHsKKwkJLy8gaXMgaXQgbm90IGEgY29tcHV0ZXIgYm9hcmRzIGNhcmQ/CisJCWlmIChwY2lkZXYtPnZlbmRvciAhPSBQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTKQorCQkJY29udGludWU7CisJCS8vIGxvb3AgdGhyb3VnaCBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTl9CT0FSRFM7IGluZGV4KyspIHsKKwkJCWlmIChjYl9wY2ltZGFzX2JvYXJkc1tpbmRleF0uZGV2aWNlX2lkICE9CisJCQkJcGNpZGV2LT5kZXZpY2UpCisJCQkJY29udGludWU7CisJCQkvLyB3YXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8KKwkJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJCS8vIGFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/CisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gaXQtPm9wdGlvbnNbMF0gfHwKKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0KKwkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKKwkJCWRldi0+Ym9hcmRfcHRyID0gY2JfcGNpbWRhc19ib2FyZHMgKyBpbmRleDsKKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisKKwlwcmludGsoIk5vIHN1cHBvcnRlZCBDb21wdXRlckJvYXJkcy9NZWFzdXJlbWVudENvbXB1dGluZyBjYXJkIGZvdW5kIG9uICIKKwkJInJlcXVlc3RlZCBwb3NpdGlvblxuIik7CisJcmV0dXJuIC1FSU87CisKKyAgICAgIGZvdW5kOgorCisJcHJpbnRrKCJGb3VuZCAlcyBvbiBidXMgJWksIHNsb3QgJWlcbiIsIGNiX3BjaW1kYXNfYm9hcmRzW2luZGV4XS5uYW1lLAorCQlwY2lkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSk7CisKKwkvLyBXYXJuIGFib3V0IG5vbi10ZXN0ZWQgZmVhdHVyZXMKKwlzd2l0Y2ggKHRoaXNib2FyZC0+ZGV2aWNlX2lkKSB7CisJY2FzZSAweDU2OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIlRISVMgQ0FSRCBJUyBVTlNVUFBPUlRFRC5cbiIKKwkJCSJQTEVBU0UgUkVQT1JUIFVTQUdFIFRPIDxtb2NlbGV0QHN1Y3Mub3JnPlxuIik7CisJfTsKKworCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsICJjYl9wY2ltZGFzIikpIHsKKwkJcHJpbnRrKCIgRmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnNcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXZwcml2LT5CQURSMCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCAwKTsKKwlkZXZwcml2LT5CQURSMSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCAxKTsKKwlkZXZwcml2LT5CQURSMiA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCAyKTsKKwlkZXZwcml2LT5CQURSMyA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCAzKTsKKwlkZXZwcml2LT5CQURSNCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCA0KTsKKworI2lmZGVmIENCUENJTURBU19ERUJVRworCXByaW50aygiZGV2cHJpdi0+QkFEUjAgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjApOworCXByaW50aygiZGV2cHJpdi0+QkFEUjEgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjEpOworCXByaW50aygiZGV2cHJpdi0+QkFEUjIgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjIpOworCXByaW50aygiZGV2cHJpdi0+QkFEUjMgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjMpOworCXByaW50aygiZGV2cHJpdi0+QkFEUjQgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjQpOworI2VuZGlmCisKKy8vIERvbnQgc3VwcG9ydCBJUlEgeWV0CisvLyAgICAgIC8vIGdldCBpcnEKKy8vICAgICAgaWYoY29tZWRpX3JlcXVlc3RfaXJxKGRldnByaXYtPnBjaV9kZXYtPmlycSwgY2JfcGNpbWRhc19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCAiY2JfcGNpbWRhcyIsIGRldiApKQorLy8gICAgICB7CisvLyAgICAgICAgICAgICAgcHJpbnRrKCIgdW5hYmxlIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgZGV2cHJpdi0+cGNpX2Rldi0+aXJxKTsKKy8vICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKy8vICAgICAgfQorLy8gICAgICBkZXYtPmlycSA9IGRldnByaXYtPnBjaV9kZXYtPmlycTsKKworCS8vSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDMpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvL2Rldi0+cmVhZF9zdWJkZXY9czsKKwkvLyBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5haV9zZV9jaGFuczsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5haV9iaXRzKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxOwkvLyBUaGlzIGlzIHRoZSBtYXhpbXVtIGNoYW5saXN0IGxlbmd0aCB0aGF0CisJLy8gdGhlIGJvYXJkIGNhbiBoYW5kbGUKKwlzLT5pbnNuX3JlYWQgPSBjYl9wY2ltZGFzX2FpX3JpbnNuOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLy8gYW5hbG9nIG91dHB1dCBzdWJkZXZpY2UKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YW9fbmNoYW47CisJcy0+bWF4ZGF0YSA9IDEgPDwgdGhpc2JvYXJkLT5hb19iaXRzOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CS8vcmFuZ2VzIGFyZSBoYXJkd2FyZSBzZXR0YWJsZSwgYnV0IG5vdCBzb2Z0d2FyZSByZWFkYWJsZS4KKwlzLT5pbnNuX3dyaXRlID0gJmNiX3BjaW1kYXNfYW9fd2luc247CisJcy0+aW5zbl9yZWFkID0gJmNiX3BjaW1kYXNfYW9fcmluc247CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKi8KKwlpZiAodGhpc2JvYXJkLT5oYXNfZGlvKSB7CisJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCBkZXZwcml2LT5CQURSNCk7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAxOworfQorCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IGNiX3BjaW1kYXNfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworI2lmZGVmIENCUENJTURBU19ERUJVRworCWlmIChkZXZwcml2KSB7CisJCXByaW50aygiZGV2cHJpdi0+QkFEUjAgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjApOworCQlwcmludGsoImRldnByaXYtPkJBRFIxID0gMHglbHhcbiIsIGRldnByaXYtPkJBRFIxKTsKKwkJcHJpbnRrKCJkZXZwcml2LT5CQURSMiA9IDB4JWx4XG4iLCBkZXZwcml2LT5CQURSMik7CisJCXByaW50aygiZGV2cHJpdi0+QkFEUjMgPSAweCVseFxuIiwgZGV2cHJpdi0+QkFEUjMpOworCQlwcmludGsoImRldnByaXYtPkJBRFI0ID0gMHglbHhcbiIsIGRldnByaXYtPkJBRFI0KTsKKwl9CisjZW5kaWYKKwlwcmludGsoImNvbWVkaSVkOiBjYl9wY2ltZGFzOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCQlpZiAoZGV2cHJpdi0+QkFEUjApIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CisJCQl9CisJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKgorICogImluc3RydWN0aW9ucyIgcmVhZC93cml0ZSBkYXRhIGluICJvbmUtc2hvdCIgb3IgInNvZnR3YXJlLXRyaWdnZXJlZCIKKyAqIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgY2JfcGNpbWRhc19haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGk7CisJdW5zaWduZWQgaW50IGQ7CisJdW5zaWduZWQgaW50IGJ1c3k7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBzaG9ydCBjaGFubGltczsKKwlpbnQgbWF4Y2hhbnM7CisKKwkvLyBvbmx5IHN1cHBvcnQgc3cgaW5pdGlhdGVkIHJlYWRzIGZyb20gYSBzaW5nbGUgY2hhbm5lbAorCisJLy9jaGVjayBjaGFubmVsIG51bWJlcgorCWlmICgoaW5iKGRldnByaXYtPkJBRFIzICsgMikgJiAweDIwKSA9PSAwKQkvL2RpZmZlcmVudGlhbCBtb2RlCisJCW1heGNoYW5zID0gdGhpc2JvYXJkLT5haV9kaWZmX2NoYW5zOworCWVsc2UKKwkJbWF4Y2hhbnMgPSB0aGlzYm9hcmQtPmFpX3NlX2NoYW5zOworCisJaWYgKGNoYW4gPiAobWF4Y2hhbnMgLSAxKSkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CS8vKioqIFdyb25nIGVycm9yIGNvZGUuIEZpeG1lLgorCisJLy9jb25maWd1cmUgZm9yIHN3IGluaXRpYXRlZCByZWFkCisJZCA9IGluYihkZXZwcml2LT5CQURSMyArIDUpOworCWlmICgoZCAmIDB4MDMpID4gMCkgewkvL29ubHkgcmVzZXQgaWYgbmVlZGVkLgorCQlkID0gZCAmIDB4ZmQ7CisJCW91dGIoZCwgZGV2cHJpdi0+QkFEUjMgKyA1KTsKKwl9CisJb3V0YigweDAxLCBkZXZwcml2LT5CQURSMyArIDYpOwkvL3NldCBidXJzdGluZyBvZmYsIGNvbnZlcnNpb25zIG9uCisJb3V0YigweDAwLCBkZXZwcml2LT5CQURSMyArIDcpOwkvL3NldCByYW5nZSB0byAxMFYuIFVQL0JQIGlzIGNvbnRyb2xsZWQgYnkgYSBzd2l0Y2ggb24gdGhlIGJvYXJkCisKKwkvLyB3cml0ZSBjaGFubmVsIGxpbWl0cyB0byBtdWx0aXBsZXhlciwgc2V0IExvdyAoYml0cyAwLTMpIGFuZCBIaWdoIChiaXRzIDQtNykgY2hhbm5lbHMgdG8gY2hhbi4KKwljaGFubGltcyA9IGNoYW4gfCAoY2hhbiA8PCA0KTsKKwlvdXRiKGNoYW5saW1zLCBkZXZwcml2LT5CQURSMyArIDApOworCisJLyogY29udmVydCBuIHNhbXBsZXMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlvdXR3KDAsIGRldnByaXYtPkJBRFIyICsgMCk7CisKKyNkZWZpbmUgVElNRU9VVCAxMDAwCQkvL3R5cGljYWxseSB0YWtlcyA1IGxvb3BzIG9uIGEgbGlnaHRseSBsb2FkZWQgUGVudGl1bSAxMDBNSHosCisJCS8vdGhpcyBpcyBsaWtlbHkgdG8gYmUgMTAwIGxvb3BzIG9uIGEgMkdIeiBtYWNoaW5lLCBzbyBzZXQgMTAwMCBhcyB0aGUgbGltaXQuCisKKwkJLyogd2FpdCBmb3IgY29udmVyc2lvbiB0byBlbmQgKi8KKwkJZm9yIChpID0gMDsgaSA8IFRJTUVPVVQ7IGkrKykgeworCQkJYnVzeSA9IGluYihkZXZwcml2LT5CQURSMyArIDIpICYgMHg4MDsKKwkJCWlmICghYnVzeSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSBUSU1FT1VUKSB7CisJCQlwcmludGsoInRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJLyogcmVhZCBkYXRhICovCisJCWQgPSBpbncoZGV2cHJpdi0+QkFEUjIgKyAwKTsKKworCQkvKiBtYW5nbGUgdGhlIGRhdGEgYXMgbmVjZXNzYXJ5ICovCisJCS8vZCBePSAxPDwodGhpc2JvYXJkLT5haV9iaXRzLTEpOyAvLyAxNiBiaXQgZGF0YSBmcm9tIEFEQywgc28gbm8gbWFuZ2xlIG5lZWRlZC4KKworCQlkYXRhW25dID0gZDsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGNiX3BjaW1kYXNfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiBXcml0aW5nIGEgbGlzdCBvZiB2YWx1ZXMgdG8gYW4gQU8gY2hhbm5lbCBpcyBwcm9iYWJseSBub3QKKwkgKiB2ZXJ5IHVzZWZ1bCwgYnV0IHRoYXQncyBob3cgdGhlIGludGVyZmFjZSBpcyBkZWZpbmVkLiAqLworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJc3dpdGNoIChjaGFuKSB7CisJCWNhc2UgMDoKKwkJCW91dHcoZGF0YVtpXSAmIDB4MEZGRiwgZGV2cHJpdi0+QkFEUjIgKyBEQUMwX09GRlNFVCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJb3V0dyhkYXRhW2ldICYgMHgwRkZGLCBkZXZwcml2LT5CQURSMiArIERBQzFfT0ZGU0VUKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC0xOworCQl9CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHJlYWQvd3JpdHRlbiAqLworCXJldHVybiBpOworfQorCisvKiBBTyBzdWJkZXZpY2VzIHNob3VsZCBoYXZlIGEgcmVhZCBpbnNuIGFzIHdlbGwgYXMgYSB3cml0ZSBpbnNuLgorICogVXN1YWxseSB0aGlzIG1lYW5zIGNvcHlpbmcgYSB2YWx1ZSBzdG9yZWQgaW4gZGV2cHJpdi4gKi8KK3N0YXRpYyBpbnQgY2JfcGNpbWRhc19hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKworCXJldHVybiBpOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9jYl9wY2ltZGFzLCBjYl9wY2ltZGFzX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRkYS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kZGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGM1YjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kZGEuYwpAQCAtMCwwICsxLDQ3NCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9jYl9wY2ltZGRhLmMKKyAgICBDb21wdXRlciBCb2FyZHMgUENJTS1EREEwNi0xNiBDb21lZGkgZHJpdmVyCisgICAgQXV0aG9yOiBDYWxpbiBDdWxpYW51IDxjYWxpbkBhanZhci5vcmc+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBjYl9wY2ltZGRhCitEZXNjcmlwdGlvbjogTWVhc3VyZW1lbnQgQ29tcHV0aW5nIFBDSU0tRERBMDYtMTYKK0RldmljZXM6IFtNZWFzdXJlbWVudCBDb21wdXRpbmddIFBDSU0tRERBMDYtMTYgKGNiX3BjaW1kZGEpCitBdXRob3I6IENhbGluIEN1bGlhbnUgPGNhbGluQGFqdmFyLm9yZz4KK1VwZGF0ZWQ6IE1vbiwgMTQgQXByIDIwMDggMTU6MTU6NTEgKzAxMDAKK1N0YXR1czogd29ya3MKKworQWxsIGZlYXR1cmVzIG9mIHRoZSBQQ0lNLUREQTA2LTE2IGJvYXJkIGFyZSBzdXBwb3J0ZWQuICBUaGlzIGJvYXJkCitoYXMgNiAxNi1iaXQgQU8gY2hhbm5lbHMsIGFuZCB0aGUgdXN1YWwgODI1NSBESU8gc2V0dXAuICAoMjQgY2hhbm5lbHMsCitjb25maWd1cmFibGUgaW4gYmFua3Mgb2YgOCBhbmQgNCwgZXRjLikuICBUaGlzIGJvYXJkIGRvZXMgbm90IHN1cHBvcnQgY29tbWFuZHMuCisKK1RoZSBib2FyZCBoYXMgYSBwZWN1bGlhciB3YXkgb2Ygc3BlY2lmeWluZyBBTyBnYWluL3JhbmdlIHNldHRpbmdzIC0tIFlvdSBoYXZlCisxIGp1bXBlciBiYW5rIG9uIHRoZSBjYXJkLCB3aGljaCBlaXRoZXIgbWFrZXMgYWxsIDYgQU8gY2hhbm5lbHMgZWl0aGVyCis1IFZvbHQgdW5pcG9sYXIsIDVWIGJpcG9sYXIsIDEwIFZvbHQgdW5pcG9sYXIgb3IgMTBWIGJpcG9sYXIuCisKK1NpbmNlIHRoZXJlIGlzIGFic29sdXRlbHkgX25vXyB3YXkgdG8gdGVsbCBpbiBzb2Z0d2FyZSBob3cgdGhpcyBqdW1wZXIgaXMgc2V0Cisod2VsbCwgYXQgbGVhc3QgYWNjb3JkaW5nICB0byB0aGUgcmF0aGVyIHRoaW4gc3BlYy4gZnJvbSBNZWFzdXJlbWVudCBDb21wdXRpbmcKKyB0aGF0IGNvbWVzIHdpdGggdGhlIGJvYXJkKSwgdGhlIGRyaXZlciBhc3N1bWVzIHRoZSBqdW1wZXIgaXMgYXQgaXRzIGZhY3RvcnkKK2RlZmF1bHQgc2V0dGluZyBvZiArLy01Vi4KKworQWxzbyBvZiBub3RlIGlzIHRoZSBmYWN0IHRoYXQgdGhpcyBib2FyZCBmZWF0dXJlcyBhbm90aGVyIGp1bXBlciwgd2hvc2UKK3N0YXRlIGlzIGFsc28gY29tcGxldGVseSBpbnZpc2libGUgdG8gc29mdHdhcmUuICBJdCB0b2dnbGVzIHR3byBwb3NzaWJsZSBBTworb3V0cHV0IG1vZGVzIG9uIHRoZSBib2FyZDoKKworICAtIFVwZGF0ZSBNb2RlOiBXcml0aW5nIHRvIGFuIEFPIGNoYW5uZWwgaW5zdGFudGFuZW91c2x5IHVwZGF0ZXMgdGhlIGFjdHVhbAorICAgIHNpZ25hbCBvdXRwdXQgYnkgdGhlIERBQyBvbiB0aGUgYm9hcmQgKHRoaXMgaXMgdGhlIGZhY3RvcnkgZGVmYXVsdCkuCisgIC0gU2ltdWx0YW5lb3VzIFhGRVIgTW9kZTogV3JpdGluZyB0byBhbiBBTyBjaGFubmVsIGhhcyBubyBlZmZlY3QgdW50aWwKKyAgICB5b3UgcmVhZCBmcm9tIGFueSBvbmUgb2YgdGhlIEFPIGNoYW5uZWxzLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGxvYWRpbmcKKyAgICBhbGwgNiBBTyB2YWx1ZXMsIGFuZCB0aGVuIHJlYWRpbmcgZnJvbSBhbnkgb25lIG9mIHRoZSBBTyBjaGFubmVscyBvbiB0aGUKKyAgICBkZXZpY2UgdG8gaW5zdGFudGx5IHVwZGF0ZSBhbGwgNiBBTyB2YWx1ZXMgaW4gdW5pc29uLiAgVXNlZnVsIGZvciBzb21lCisgICAgY29udHJvbCBhcHBzLCBJIHdvdWxkIGFzc3VtZT8gIElmIHlvdXIganVtcGVyIGlzIGluIHRoaXMgc2V0dGluZywgdGhlbiB5b3UKKyAgICBuZWVkIHRvIGlzc3VlIHlvdXIgY29tZWRpX2RhdGFfd3JpdGUoKXMgdG8gbG9hZCBhbGwgdGhlIHZhbHVlcyB5b3Ugd2FudCwKKyAgICB0aGVuIGlzc3VlIG9uZSBjb21lZGlfZGF0YV9yZWFkKCkgb24gYW55IGNoYW5uZWwgb24gdGhlIEFPIHN1YmRldmljZQorICAgIHRvIGluaXRpYXRlIHRoZSBzaW11bHRhbmVvdXMgWEZFUi4KKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gUENJIGJ1cyAob3B0aW9uYWwpCisgIFsxXSBQQ0kgc2xvdCAob3B0aW9uYWwpCisgIFsyXSBhbmFsb2cgb3V0cHV0IHJhbmdlIGp1bXBlciBzZXR0aW5nCisgICAgICAwID09ICsvLSA1IFYKKyAgICAgIDEgPT0gKy8tIDEwIFYKKyovCisKKy8qCisgICAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIENvbXB1dGVyIEJvYXJkcyBQQ0lNLUREQTA2LTE2IEFuYWxvZyBPdXRwdXQKKyAgICBjYXJkLiAgVGhpcyBib2FyZCBoYXMgYSB1bmlxdWUgcmVnaXN0ZXIgbGF5b3V0IGFuZCBhcyBzdWNoIHByb2JhYmx5CisgICAgZGVzZXJ2ZXMgaXRzIG93biBkcml2ZXIgZmlsZS4KKworICAgIEl0IGlzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgdG8gaW50ZWdyYXRlIHRoaXMgYm9hcmQgaW50byB0aGUgY2JfcGNpZGRhCisgICAgZmlsZSwgYnV0IHNpbmNlIHRoYXQgaXNuJ3QgbXkgY29kZSwgSSBkaWRuJ3Qgd2FudCB0byBzaWduaWZpY2FudGx5CisgICAgbW9kaWZ5IHRoYXQgZmlsZSB0byBzdXBwb3J0IHRoaXMgYm9hcmQgKEkgdGhvdWdodCBpdCBpbXBvbGl0ZSB0byBkbyBzbykuCisKKyAgICBBdCBhbnkgcmF0ZSwgaWYgeW91IGZlZWwgYW1iaXRpb3VzLCBwbGVhc2UgZmVlbCBmcmVlIHRvIHRha2UKKyAgICB0aGUgY29kZSBvdXQgb2YgdGhpcyBmaWxlIGFuZCBjb21iaW5lIGl0IHdpdGggYSBtb3JlIHVuaWZpZWQgZHJpdmVyCisgICAgZmlsZS4KKworICAgIEkgd291bGQgbGlrZSB0byB0aGFuayBUaW1vdGh5IEN1cnJ5IDxUaW1vdGh5LkN1cnJ5QHJkZWMucmVkc3RvbmUuYXJteS5taWw+CisgICAgZm9yIGxlbmRpbmcgbWUgYSBib2FyZCBzbyB0aGF0IEkgY291bGQgd3JpdGUgdGhpcyBkcml2ZXIuCisKKyAgICAtQ2FsaW4gQ3VsaWFudSA8Y2FsaW5AYWp2YXIub3JnPgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2luY2x1ZGUgIjgyNTUuaCIKKworLyogZGV2aWNlIGlkcyBvZiB0aGUgY2FyZHMgd2Ugc3VwcG9ydCAtLSBjdXJyZW50bHkgb25seSAxIGNhcmQgc3VwcG9ydGVkICovCisjZGVmaW5lIFBDSV9JRF9QQ0lNX0REQTA2XzE2IDB4MDA1MworCisvKgorICogVGhpcyBpcyBzdHJhaWdodCBmcm9tIHNrZWwuYyAtLSBJIGRpZCB0aGlzIGluIGNhc2UgdGhpcyBzb3VyY2UgZmlsZQorICogd2lsbCBzb21lZGF5IHN1cHBvcnQgbW9yZSB0aGFuIDEgYm9hcmQuLi4KKyAqLworc3RydWN0IGJvYXJkX3N0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQ7CisJaW50IGFvX2NoYW5zOworCWludCBhb19iaXRzOworCWludCBkaW9fY2hhbnM7CisJaW50IGRpb19tZXRob2Q7CisJaW50IGRpb19vZmZzZXQ7CQkvKiBob3cgbWFueSBieXRlcyBpbnRvIHRoZSBCQURSIGFyZSB0aGUgRElPIHBvcnRzICovCisJaW50IHJlZ3NfYmFkcmluZGV4OwkvKiBJTyBSZWdpb24gZm9yIHRoZSBjb250cm9sLCBhbmFsb2cgb3V0cHV0LAorCQkJCSAgIGFuZCBESU8gcmVnaXN0ZXJzICovCisJaW50IHJlZ19zejsJCS8qIG51bWJlciBvZiBieXRlcyBvZiByZWdpc3RlcnMgaW4gaW8gcmVnaW9uICovCit9OworCitlbnVtIERJT19NRVRIT0RTIHsKKwlESU9fTk9ORSA9IDAsCisJRElPXzgyNTUsCisJRElPX0lOVEVSTkFMCQkvKiB1bmltcGxlbWVudGVkICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGJvYXJkX3N0cnVjdCBib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImNiX3BjaW1kZGEwNi0xNiIsCisJICAgICAgZGV2aWNlX2lkOlBDSV9JRF9QQ0lNX0REQTA2XzE2LAorCSAgICAgIGFvX2NoYW5zOjYsCisJICAgICAgYW9fYml0czoJMTYsCisJICAgICAgZGlvX2NoYW5zOjI0LAorCSAgICAgIGRpb19tZXRob2Q6RElPXzgyNTUsCisJICAgICAgZGlvX29mZnNldDoxMiwKKwkgICAgICByZWdzX2JhZHJpbmRleDozLAorCSAgICAgIHJlZ19zejoJMTYsCisJCX0KK307CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICAgICgoY29uc3Qgc3RydWN0IGJvYXJkX3N0cnVjdCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiBOdW1iZXIgb2YgYm9hcmRzIGluIGJvYXJkc1tdICovCisjZGVmaW5lIE5fQk9BUkRTCShzaXplb2YoYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgYm9hcmRfc3RydWN0KSkKKyNkZWZpbmUgUkVHX1NaICh0aGlzYm9hcmQtPnJlZ19zeikKKyNkZWZpbmUgUkVHU19CQURSSU5ERVggKHRoaXNib2FyZC0+cmVnc19iYWRyaW5kZXgpCisKKy8qIFRoaXMgaXMgdXNlZCBieSBtb2Rwcm9iZSB0byB0cmFuc2xhdGUgUENJIElEcyB0byBkcml2ZXJzLiAgU2hvdWxkCisgKiBvbmx5IGJlIHVzZWQgZm9yIFBDSSBhbmQgSVNBLVBuUCBkZXZpY2VzICovCisvKiBQbGVhc2UgYWRkIHlvdXIgUENJIHZlbmRvciBJRCB0byBjb21lZGlkZXYuaCwgYW5kIGl0IHdpbGwgYmUgZm9yd2FyZGVkCisgKiB1cHN0cmVhbS4gKi8KK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTLCBQQ0lfSURfUENJTV9EREEwNl8xNiwgUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX3RhYmxlKTsKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IGJvYXJkX3ByaXZhdGVfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyczsJLyogc2V0IGJ5IHByb2JlICovCisJdW5zaWduZWQgbG9uZyBkaW9fcmVnaXN0ZXJzOworCWNoYXIgYXR0YWNoZWRfdG9fODI1NTsJLyogYm9vbGVhbiAqLworCWNoYXIgYXR0YWNoZWRfc3VjY2Vzc2Z1bGx5OwkvKiBib29sZWFuICovCisJLyogd291bGQgYmUgdXNlZnVsIGZvciBhIFBDSSBkZXZpY2UgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKworI2RlZmluZSBNQVhfQU9fUkVBREJBQ0tfQ0hBTk5FTFMgNgorCS8qIFVzZWQgZm9yIEFPIHJlYWRiYWNrICovCisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrW01BWF9BT19SRUFEQkFDS19DSEFOTkVMU107CisKK307CisKKy8qCisgKiBtb3N0IGRyaXZlcnMgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisgKiBhY2Nlc3MgdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgYm9hcmRfcHJpdmF0ZV9zdHJ1Y3QgKilkZXYtPnByaXZhdGUpCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IGF0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgY2JfcGNpbWRkYV9kcml2ZXIgPSB7CisgICAgICBkcml2ZXJfbmFtZToiY2JfcGNpbWRkYSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6YXR0YWNoLAorICAgICAgZGV0YWNoOmRldGFjaCwKK307CisKK01PRFVMRV9BVVRIT1IoIkNhbGluIEEuIEN1bGlhbnUgPGNhbGluQHJ0bGFiLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tZWRpIGxvdy1sZXZlbCBkcml2ZXIgZm9yIHRoZSBDb21wdXRlcmJvYXJkcyBQQ0lNLUREQSAiCisJInNlcmllcy4gIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIFBDSU0tRERBMDYtMTYgKHdoaWNoICIKKwkiYWxzbyBoYXBwZW5zIHRvIGJlIHRoZSBvbmx5IGJvYXJkIGluIHRoaXMgc2VyaWVzLiA6KSApICIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworQ09NRURJX1BDSV9JTklUQ0xFQU5VUF9OT01PRFVMRShjYl9wY2ltZGRhX2RyaXZlciwgcGNpX3RhYmxlKTsKKworc3RhdGljIGludCBhb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBhb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBIRUxQRVIgRlVOQ1RJT04gREVDTEFSQVRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHJldHVybnMgYSBtYXhkYXRhIHZhbHVlIGZvciBhIGdpdmVuIG5fYml0cyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZmlndXJlX291dF9tYXhkYXRhKGludCBiaXRzKQoreworCXJldHVybiAoKCh1bnNpZ25lZCBpbnQpIDEgPDwgYml0cykgLSAxKTsKK30KKworLyoKKyAqICBQcm9iZXMgZm9yIGEgc3VwcG9ydGVkIGRldmljZS4KKyAqCisgKiAgUHJlcmVxdWlzaXRlOiBwcml2YXRlIGJlIGFsbG9jYXRlZCBhbHJlYWR5IGluc2lkZSBkZXYKKyAqCisgKiAgSWYgdGhlIGRldmljZSBpcyBmb3VuZCwgaXQgcmV0dXJucyAwIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBzaWRlIGVmZmVjdHM6CisgKgorICogIG8gIGFzc2lnbnMgYSBzdHJ1Y3QgcGNpX2RldiAqIHRvIGRldi0+cHJpdmF0ZS0+cGNpX2RldgorICogIG8gIGFzc2lnbnMgYSBzdHJ1Y3QgYm9hcmQgKiB0byBkZXYtPmJvYXJkX3B0cgorICogIG8gIHNldHMgZGV2LT5wcml2YXRlLT5yZWdpc3RlcnMKKyAqICBvICBzZXRzIGRldi0+cHJpdmF0ZS0+ZGlvX3JlZ2lzdGVycworICoKKyAqICBPdGhlcndpc2UsIHJldHVybnMgYSAtZXJybm8gb24gZXJyb3IKKyAqLworc3RhdGljIGludCBwcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEZVTkNUSU9OIERFRklOSVRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBhdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGVycjsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqIGlmIHRoaXMgZnVuY3Rpb24gZmFpbHMgKHJldHVybnMgbmVnYXRpdmUpIHRoZW4gdGhlIHByaXZhdGUgYXJlYSBpcworICoga2ZyZWUnZCBieSBjb21lZGkKKyAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBib2FyZF9wcml2YXRlX3N0cnVjdCkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKy8qCisgKiBJZiB5b3UgY2FuIHByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIGEgc2VyaWVzCisgKiBpdCBpcywgdGhpcyBpcyB0aGUgcGxhY2UgdG8gZG8gaXQuICBPdGhlcndpc2UsIGRldi0+Ym9hcmRfcHRyCisgKiBzaG91bGQgYWxyZWFkeSBiZSBpbml0aWFsaXplZC4KKyAqLworCWlmICgoZXJyID0gcHJvYmUoZGV2LCBpdCkpKQorCQlyZXR1cm4gZXJyOworCisvKiBPdXRwdXQgc29tZSBpbmZvICovCisJcHJpbnRrKCJjb21lZGklZDogJXM6ICIsIGRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSk7CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4gIE5vdGUgdGhhdCB3ZSBjYW4gdXNlIHRoZSAidGhpc2JvYXJkIgorICogbWFjcm8gbm93LCBzaW5jZSB3ZSBqdXN0IGluaXRpYWxpemVkIGl0IGluIHRoZSBsYXN0IGxpbmUuCisgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX2NoYW5zOworCXMtPm1heGRhdGEgPSBmaWd1cmVfb3V0X21heGRhdGEodGhpc2JvYXJkLT5hb19iaXRzKTsKKwkvKiB0aGlzIGlzIGhhcmQtY29kZWQgaGVyZSAqLworCWlmIChpdC0+b3B0aW9uc1syXSkgeworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisJfSBlbHNlIHsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjU7CisJfQorCXMtPmluc25fd3JpdGUgPSAmYW9fd2luc247CisJcy0+aW5zbl9yZWFkID0gJmFvX3JpbnNuOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCisJaWYgKHRoaXNib2FyZC0+ZGlvX2NoYW5zKSB7CisJCXN3aXRjaCAodGhpc2JvYXJkLT5kaW9fbWV0aG9kKSB7CisJCWNhc2UgRElPXzgyNTU6CisJCQkvKiB0aGlzIGlzIGEgc3RyYWlnaHQgODI1NSwgc28gcmVnaXN0ZXIgdXMgd2l0aCB0aGUgODI1NSBkcml2ZXIgKi8KKwkJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBOVUxMLCBkZXZwcml2LT5kaW9fcmVnaXN0ZXJzKTsKKwkJCWRldnByaXYtPmF0dGFjaGVkX3RvXzgyNTUgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgRElPX0lOVEVSTkFMOgorCQlkZWZhdWx0OgorCQkJcHJpbnRrKCJESU9fSU5URVJOQUwgbm90IGltcGxlbWVudGVkIHlldCFcbiIpOworCQkJcmV0dXJuIC1FTlhJTzsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlkZXZwcml2LT5hdHRhY2hlZF9zdWNjZXNzZnVsbHkgPSAxOworCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBkZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldnByaXYpIHsKKworCQlpZiAoZGV2LT5zdWJkZXZpY2VzICYmIGRldnByaXYtPmF0dGFjaGVkX3RvXzgyNTUpIHsKKwkJCS8qIGRlLXJlZ2lzdGVyIHVzIGZyb20gdGhlIDgyNTUgZHJpdmVyICovCisJCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMik7CisJCQlkZXZwcml2LT5hdHRhY2hlZF90b184MjU1ID0gMDsKKwkJfQorCisJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCQlpZiAoZGV2cHJpdi0+cmVnaXN0ZXJzKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKworCQlpZiAoZGV2cHJpdi0+YXR0YWNoZWRfc3VjY2Vzc2Z1bGx5ICYmIHRoaXNib2FyZCkKKwkJCXByaW50aygiY29tZWRpJWQ6ICVzOiBkZXRhY2hlZFxuIiwgZGV2LT5taW5vciwKKwkJCQl0aGlzYm9hcmQtPm5hbWUpOworCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBkZXZwcml2LT5yZWdpc3RlcnMgKyBjaGFuICogMjsKKworCS8qIFdyaXRpbmcgYSBsaXN0IG9mIHZhbHVlcyB0byBhbiBBTyBjaGFubmVsIGlzIHByb2JhYmx5IG5vdAorCSAqIHZlcnkgdXNlZnVsLCBidXQgdGhhdCdzIGhvdyB0aGUgaW50ZXJmYWNlIGlzIGRlZmluZWQuICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkvKiAgZmlyc3QsIGxvYWQgdGhlIGxvdyBieXRlICovCisJCW91dGIoKGNoYXIpKGRhdGFbaV0gJiAweDAwZmYpLCBvZmZzZXQpOworCQkvKiAgbmV4dCwgd3JpdGUgdGhlIGhpZ2ggYnl0ZSAtLSBvbmx5IGFmdGVyIHRoaXMgaXMgd3JpdHRlbiBpcworCQkgICB0aGUgY2hhbm5lbCB2b2x0YWdlIHVwZGF0ZWQgaW4gdGhlIERBQywgdW5sZXNzCisJCSAgIHdlJ3JlIGluIHNpbXVsdGFuZW91cyB4ZmVyIG1vZGUgKGp1bXBlciBvbiBjYXJkKQorCQkgICB0aGVuIGEgcmluc24gaXMgbmVjZXNzYXJ5IHRvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgREFDIC0tCisJCSAgIHNlZSBhb19yaW5zbigpIGJlbG93Li4uICovCisJCW91dGIoKGNoYXIpKGRhdGFbaV0gPj4gOCAmIDB4MDBmZiksIG9mZnNldCArIDEpOworCisJCS8qIGZvciB0ZXN0aW5nIG9ubHkuLiB0aGUgYWN0dWFsIHJpbnNuIFNIT1VMRCBkbyBhbiBpbnchCisJCSAgIChzZWUgdGhlIHN0dWZmIGFib3V0IHNpbXVsdGFuZW91cyBYRkVSIG1vZGUgb24gdGhpcyBib2FyZCkgKi8KKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOworCX0KKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuICovCisJcmV0dXJuIGk7Cit9CisKKy8qIEFPIHN1YmRldmljZXMgc2hvdWxkIGhhdmUgYSByZWFkIGluc24gYXMgd2VsbCBhcyBhIHdyaXRlIGluc24uCisKKyAgIFVzdWFsbHkgdGhpcyBtZWFucyBjb3B5aW5nIGEgdmFsdWUgc3RvcmVkIGluIGRldnByaXYtPmFvX3JlYWRiYWNrLgorICAgSG93ZXZlciwgc2luY2UgdGhpcyBib2FyZCBoYXMgdGhpcyBqdW1wZXIgc2V0dGluZyBjYWxsZWQgIlNpbXVsdGFuZW91cworICAgWGZlciBtb2RlIiAob2ZmIGJ5IGRlZmF1bHQpLCB3ZSB3aWxsIHN1cHBvcnQgaXQuICBTaW11bHRhbmVhb3VzIHhmZXIKKyAgIG1vZGUgaXMgYWNjb21wbGlzaGVkIGJ5IGxvYWRpbmcgQUxMIHRoZSB2YWx1ZXMgeW91IHdhbnQgZm9yIEFPIGluIGFsbCB0aGUKKyAgIGNoYW5uZWxzLCB0aGVuIFJFQURpbmcgb2ZmIG9uZSBvZiB0aGUgQU8gcmVnaXN0ZXJzIHRvIGluaXRpYXRlIHRoZQorICAgaW5zdGFudGFuZW91cyBzaW11bHRhbmVvdXMgdXBkYXRlIG9mIGFsbCBEQUMgb3V0cHV0cywgd2hpY2ggbWFrZXMKKyAgIGFsbCBBTyBjaGFubmVscyB1cGRhdGUgc2ltdWx0YW5lb3VzbHkuICBUaGlzIGlzIHVzZWZ1bCBmb3Igc29tZSBjb250cm9sCisgICBhcHBsaWNhdGlvbnMsIEkgd291bGQgaW1hZ2luZS4KKyovCitzdGF0aWMgaW50IGFvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlpbncoZGV2cHJpdi0+cmVnaXN0ZXJzICsgY2hhbiAqIDIpOworCQkvKiBzaG91bGQgSSBzZXQgZGF0YVtpXSB0byB0aGUgcmVzdWx0IG9mIHRoZSBhY3R1YWwgcmVhZCBvbiB0aGUgcmVnaXN0ZXIKKwkJICAgb3IgdGhlIGNhY2hlZCB1bnNpZ25lZCBpbnQgaW4gZGV2cHJpdi0+YW9fcmVhZGJhY2tbXT8gKi8KKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKworCXJldHVybiBpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBIRUxQRVIgRlVOQ1RJT04gREVGSU5JVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqICBQcm9iZXMgZm9yIGEgc3VwcG9ydGVkIGRldmljZS4KKyAqCisgKiAgUHJlcmVxdWlzaXRlOiBwcml2YXRlIGJlIGFsbG9jYXRlZCBhbHJlYWR5IGluc2lkZSBkZXYKKyAqCisgKiAgSWYgdGhlIGRldmljZSBpcyBmb3VuZCwgaXQgcmV0dXJucyAwIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBzaWRlIGVmZmVjdHM6CisgKgorICogIG8gIGFzc2lnbnMgYSBzdHJ1Y3QgcGNpX2RldiAqIHRvIGRldi0+cHJpdmF0ZS0+cGNpX2RldgorICogIG8gIGFzc2lnbnMgYSBzdHJ1Y3QgYm9hcmQgKiB0byBkZXYtPmJvYXJkX3B0cgorICogIG8gIHNldHMgZGV2LT5wcml2YXRlLT5yZWdpc3RlcnMKKyAqICBvICBzZXRzIGRldi0+cHJpdmF0ZS0+ZGlvX3JlZ2lzdGVycworICoKKyAqICBPdGhlcndpc2UsIHJldHVybnMgYSAtZXJybm8gb24gZXJyb3IKKyAqLworc3RhdGljIGludCBwcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCWludCBpbmRleDsKKwl1bnNpZ25lZCBsb25nIHJlZ2lzdGVyczsKKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisJCS8vIGlzIGl0IG5vdCBhIGNvbXB1dGVyIGJvYXJkcyBjYXJkPworCQlpZiAocGNpZGV2LT52ZW5kb3IgIT0gUENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUykKKwkJCWNvbnRpbnVlOworCQkvLyBsb29wIHRocm91Z2ggY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5fQk9BUkRTOyBpbmRleCsrKSB7CisJCQlpZiAoYm9hcmRzW2luZGV4XS5kZXZpY2VfaWQgIT0gcGNpZGV2LT5kZXZpY2UpCisJCQkJY29udGludWU7CisJCQkvLyB3YXMgYSBwYXJ0aWN1bGFyIGJ1cy9zbG90IHJlcXVlc3RlZD8KKwkJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJCS8vIGFyZSB3ZSBvbiB0aGUgd3JvbmcgYnVzL3Nsb3Q/CisJCQkJaWYgKHBjaWRldi0+YnVzLT5udW1iZXIgIT0gaXQtPm9wdGlvbnNbMF0gfHwKKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikgIT0KKwkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJLyogZm91bmQgISAqLworCisJCQlkZXZwcml2LT5wY2lfZGV2ID0gcGNpZGV2OworCQkJZGV2LT5ib2FyZF9wdHIgPSBib2FyZHMgKyBpbmRleDsKKwkJCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsIHRoaXNib2FyZC0+bmFtZSkpIHsKKwkJCQlwcmludGsoImNiX3BjaW1kZGE6IEZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCXJlZ2lzdGVycyA9CisJCQkJcGNpX3Jlc291cmNlX3N0YXJ0KGRldnByaXYtPnBjaV9kZXYsCisJCQkJUkVHU19CQURSSU5ERVgpOworCQkJZGV2cHJpdi0+cmVnaXN0ZXJzID0gcmVnaXN0ZXJzOworCQkJZGV2cHJpdi0+ZGlvX3JlZ2lzdGVycworCQkJCT0gZGV2cHJpdi0+cmVnaXN0ZXJzICsgdGhpc2JvYXJkLT5kaW9fb2Zmc2V0OworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlwcmludGsoImNiX3BjaW1kZGE6IE5vIHN1cHBvcnRlZCBDb21wdXRlckJvYXJkcy9NZWFzdXJlbWVudENvbXB1dGluZyAiCisJCSJjYXJkIGZvdW5kIGF0IHRoZSByZXF1ZXN0ZWQgcG9zaXRpb25cbiIpOworCXJldHVybiAtRU5PREVWOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9ib25kLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYwppbmRleCA5ZTU0OTZmLi4xZWU0ODk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYwpAQCAtNTksNyArNTksNyBAQAogICogRGV2aWNlczogYSBmdWxsIGxpc3Qgb2YgdGhlIGJvYXJkcyB0aGF0IGF0dGVtcHQgdG8gYmUgc3VwcG9ydGVkIGJ5CiAgKiAgIHRoZSBkcml2ZXIuICBGb3JtYXQgaXMgIihtYW51ZmFjdHVyZXIpIGJvYXJkIG5hbWUgW2NvbWVkaSBuYW1lXSIsCiAgKiAgIHdoZXJlIGNvbWVkaV9uYW1lIGlzIHRoZSBuYW1lIHRoYXQgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIGJvYXJkLgotICogICBTZWUgdGhlIGNvbW1lbnQgbmVhciBib2FyZF9uYW1lOiBpbiB0aGUgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUKKyAqICAgU2VlIHRoZSBjb21tZW50IG5lYXIgYm9hcmRfbmFtZTogaW4gdGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZQogICogICBiZWxvdy4gIElmIChtYW51ZmFjdHVyZXIpIG9yIFtjb21lZGkgbmFtZV0gaXMgbWlzc2luZywgdGhlIHByZXZpb3VzCiAgKiAgIHZhbHVlIGlzIHVzZWQuCiAgKiBBdXRob3I6IHlvdQpAQCAtMTQyLDcgKzE0Miw3IEBACiAjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBCb25kaW5nQm9hcmQgKilkZXYtPmJvYXJkX3B0cikKIAogc3RydWN0IEJvbmRlZERldmljZSB7Ci0JY29tZWRpX3QgKmRldjsKKwl2b2lkICpkZXY7CiAJdW5zaWduZWQgbWlub3I7CiAJdW5zaWduZWQgc3ViZGV2OwogCXVuc2lnbmVkIHN1YmRldl90eXBlOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAKIC8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCiAgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAotICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KIHN0cnVjdCBQcml2YXRlIHsKICMgZGVmaW5lIE1BWF9CT0FSRF9OQU1FIDI1NgogCWNoYXIgbmFtZVtNQVhfQk9BUkRfTkFNRV07CkBAIC0xNzEsMjEgKzE3MSwyMSBAQAogI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IFByaXZhdGUgKilkZXYtPnByaXZhdGUpCiAKIC8qCi0gKiBUaGUgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCiAgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCiAgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKICAqIHRoZSBkZXZpY2UgY29kZS4KICAqLwotc3RhdGljIGludCBib25kaW5nX2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KTsKLXN0YXRpYyBpbnQgYm9uZGluZ19kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgYm9uZGluZ19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKK3N0YXRpYyBpbnQgYm9uZGluZ19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiAvKiogQnVpbGQgUHJpdmF0ZSBhcnJheSBvZiBhbGwgZGV2aWNlcy4uICovCi1zdGF0aWMgaW50IGRvRGV2Q29uZmlnKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpOwotc3RhdGljIHZvaWQgZG9EZXZVbmNvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBkb0RldkNvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIHZvaWQgZG9EZXZVbmNvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIC8qIFVnbHkgaW1wbGVtZW50YXRpb24gb2YgcmVhbGxvYyB0aGF0IGFsd2F5cyBjb3BpZXMgbWVtb3J5IGFyb3VuZCAtLSBJJ20gbGF6eSwKICAqIHdoYXQgY2FuIEkgc2F5PyAgSSBsaWtlIHRvIGRvIHdhc3RlZnVsIG1lbWNvcGllcy4uIDopICovCiBzdGF0aWMgdm9pZCAqUmVhbGxvYyhjb25zdCB2b2lkICpwdHIsIHNpemVfdCBsZW4sIHNpemVfdCBvbGRfbGVuKTsKIAotc3RhdGljIGNvbWVkaV9kcml2ZXIgZHJpdmVyX2JvbmRpbmcgPSB7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2JvbmRpbmcgPSB7CiAgICAgICAuZHJpdmVyX25hbWUgPQlNT0RVTEVfTkFNRSwKICAgICAgIC5tb2R1bGUgPQkJVEhJU19NT0RVTEUsCiAgICAgICAuYXR0YWNoID0JCWJvbmRpbmdfYXR0YWNoLApAQCAtMjEzLDEwICsyMTMsMTAgQEAKICAgICAgIC5udW1fbmFtZXMgPQlzaXplb2YoYm9uZGluZ0JvYXJkcykgLyBzaXplb2Yoc3RydWN0IEJvbmRpbmdCb2FyZCksCiB9OwogCi1zdGF0aWMgaW50IGJvbmRpbmdfZGlvX2luc25fYml0cyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSk7Ci1zdGF0aWMgaW50IGJvbmRpbmdfZGlvX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQkgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpOworc3RhdGljIGludCBib25kaW5nX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgYm9uZGluZ19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogCiAvKgogICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKQEAgLTIyNCw5ICsyMjQsOSBAQAogICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKICAqIGFkZHJlc3MuCiAgKi8KLXN0YXRpYyBpbnQgYm9uZGluZ19hdHRhY2goY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfZGV2Y29uZmlnICppdCkKK3N0YXRpYyBpbnQgYm9uZGluZ19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlMT0dfTVNHKCJjb21lZGklZFxuIiwgZGV2LT5taW5vcik7CiAKQEAgLTI4MSw3ICsyODEsNyBAQAogICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQogICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KICAqLwotc3RhdGljIGludCBib25kaW5nX2RldGFjaChjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGJvbmRpbmdfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJTE9HX01TRygiY29tZWRpJWQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAJZG9EZXZVbmNvbmZpZyhkZXYpOwpAQCAtMjkzLDEwICsyOTMsMTAgQEAKICAqIHVzZWZ1bCB0byBhcHBsaWNhdGlvbnMgaWYgeW91IGltcGxlbWVudCB0aGUgaW5zbl9iaXRzIGludGVyZmFjZS4KICAqIFRoaXMgYWxsb3dzIHBhY2tlZCByZWFkaW5nL3dyaXRpbmcgb2YgdGhlIERJTyBjaGFubmVscy4gIFRoZQogICogY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZSAqLwotc3RhdGljIGludCBib25kaW5nX2Rpb19pbnNuX2JpdHMoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IGJvbmRpbmdfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7Ci0jZGVmaW5lIExTQU1QTF9CSVRTIChzaXplb2YobHNhbXBsX3QpKjgpCisjZGVmaW5lIExTQU1QTF9CSVRTIChzaXplb2YodW5zaWduZWQgaW50KSo4KQogCXVuc2lnbmVkIG5jaGFucyA9IExTQU1QTF9CSVRTLCBudW1fZG9uZSA9IDAsIGk7CiAJaWYgKGluc24tPm4gIT0gMikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMTIsMTIgKzMxMiwxMiBAQAogCQkgICB0byB0aGlzIHN1YmRldmljZS4uIG5lZWQgdG8gc2hpZnQgdGhlbSB0byB6ZXJvIHBvc2l0aW9uIG9mCiAJCSAgIGNvdXJzZS4gKi8KIAkJLyogQml0cyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgc3ViZGV2LiAqLwotCQlsc2FtcGxfdCBzdWJkZXZNYXNrID0gKCgxIDw8IGJkZXYtPm5jaGFucykgLSAxKTsKLQkJbHNhbXBsX3Qgd3JpdGVNYXNrLCBkYXRhQml0czsKKwkJdW5zaWduZWQgaW50IHN1YmRldk1hc2sgPSAoKDEgPDwgYmRldi0+bmNoYW5zKSAtIDEpOworCQl1bnNpZ25lZCBpbnQgd3JpdGVNYXNrLCBkYXRhQml0czsKIAogCQkvKiBBcmdoLCB3ZSBoYXZlID49IExTQU1QTF9CSVRTIGNoYW5zLi4gdGFrZSBhbGwgYml0cyAqLwogCQlpZiAoYmRldi0+bmNoYW5zID49IExTQU1QTF9CSVRTKQotCQkJc3ViZGV2TWFzayA9IChsc2FtcGxfdCkgKC0xKTsKKwkJCXN1YmRldk1hc2sgPSAodW5zaWduZWQgaW50KSAoLTEpOwogCiAJCXdyaXRlTWFzayA9IChkYXRhWzBdID4+IG51bV9kb25lKSAmIHN1YmRldk1hc2s7CiAJCWRhdGFCaXRzID0gKGRhdGFbMV0gPj4gbnVtX2RvbmUpICYgc3ViZGV2TWFzazsKQEAgLTM0MCw4ICszNDAsOCBAQAogCXJldHVybiBpbnNuLT5uOwogfQogCi1zdGF0aWMgaW50IGJvbmRpbmdfZGlvX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQkgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IGJvbmRpbmdfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksIHJldCwgaW9fYml0cyA9IHMtPmlvX2JpdHM7CiAJdW5zaWduZWQgaW50IGlvOwpAQCAtMzk0LDEwICszOTQsMTAgQEAKIAlyZXR1cm4gbmV3bWVtOwogfQogCi1zdGF0aWMgaW50IGRvRGV2Q29uZmlnKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpCitzdGF0aWMgaW50IGRvRGV2Q29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKIAlpbnQgaTsKLQljb21lZGlfdCAqZGV2c19vcGVuZWRbQ09NRURJX05VTV9CT0FSRF9NSU5PUlNdOworCXZvaWQgKmRldnNfb3BlbmVkW0NPTUVESV9OVU1fQk9BUkRfTUlOT1JTXTsKIAogCW1lbXNldChkZXZzX29wZW5lZCwgMCwgc2l6ZW9mKGRldnNfb3BlbmVkKSk7CiAJZGV2cHJpdi0+bmFtZVswXSA9IDA7OwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJZm9yIChpID0gMDsgaSA8IENPTUVESV9OREVWQ09ORk9QVFMgJiYgKCFpIHx8IGl0LT5vcHRpb25zW2ldKTsgKytpKSB7CiAJCWNoYXIgZmlsZVtdID0gIi9kZXYvY29tZWRpWFhYWFhYIjsKIAkJaW50IG1pbm9yID0gaXQtPm9wdGlvbnNbaV07Ci0JCWNvbWVkaV90ICpkOworCQl2b2lkICpkOwogCQlpbnQgc2RldiA9IC0xLCBuY2hhbnMsIHRtcDsKIAkJc3RydWN0IEJvbmRlZERldmljZSAqYmRldiA9IE5VTEw7CiAKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBkb0RldlVuY29uZmlnKGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGRvRGV2VW5jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGRldnNfY2xvc2VkID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9mYy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9mYy5jCmluZGV4IGNkNzRkYmUuLjlmYTRjZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfZmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2ZjLmMKQEAgLTI4LDEwICsyOCwxMCBAQAogCiAjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCiAKLXN0YXRpYyB2b2lkIGluY3JlbWVudF9zY2FuX3Byb2dyZXNzKGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQsCitzdGF0aWMgdm9pZCBpbmNyZW1lbnRfc2Nhbl9wcm9ncmVzcyhzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCwKIAkJCQkgICAgdW5zaWduZWQgaW50IG51bV9ieXRlcykKIHsKLQljb21lZGlfYXN5bmMgKmFzeW5jID0gc3ViZC0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzdWJkLT5hc3luYzsKIAl1bnNpZ25lZCBpbnQgc2Nhbl9sZW5ndGggPSBjZmNfYnl0ZXNfcGVyX3NjYW4oc3ViZCk7CiAKIAlhc3luYy0+c2Nhbl9wcm9ncmVzcyArPSBudW1fYnl0ZXM7CkBAIC00MiwxMCArNDIsMTAgQEAKIH0KIAogLyogV3JpdGVzIGFuIGFycmF5IG9mIGRhdGEgcG9pbnRzIHRvIGNvbWVkaSdzIGJ1ZmZlciAqLwotdW5zaWduZWQgaW50IGNmY193cml0ZV9hcnJheV90b19idWZmZXIoY29tZWRpX3N1YmRldmljZSAqc3ViZCwgdm9pZCAqZGF0YSwKK3Vuc2lnbmVkIGludCBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkLCB2b2lkICpkYXRhLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKQogewotCWNvbWVkaV9hc3luYyAqYXN5bmMgPSBzdWJkLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHN1YmQtPmFzeW5jOwogCXVuc2lnbmVkIGludCByZXR2YWw7CiAKIAlpZiAobnVtX2J5dGVzID09IDApCkBAIC02NywxMCArNjcsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcik7CiAKLXVuc2lnbmVkIGludCBjZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihjb21lZGlfc3ViZGV2aWNlICpzdWJkLCB2b2lkICpkYXRhLAordW5zaWduZWQgaW50IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkLCB2b2lkICpkYXRhLAogCQkJCQl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKQogewotCWNvbWVkaV9hc3luYyAqYXN5bmMgPSBzdWJkLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHN1YmQtPmFzeW5jOwogCiAJaWYgKG51bV9ieXRlcyA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTg1LDcgKzg1LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIpOwogCi11bnNpZ25lZCBpbnQgY2ZjX2hhbmRsZV9ldmVudHMoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzdWJkKQordW5zaWduZWQgaW50IGNmY19oYW5kbGVfZXZlbnRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkKQogewogCXVuc2lnbmVkIGludCBldmVudHMgPSBzdWJkLT5hc3luYy0+ZXZlbnRzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2ZjLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2ZjLmgKaW5kZXggNjk1MmZlMi4uNDk0YWUzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9mYy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfZmMuaApAQCAtMzAsMzAgKzMwLDMwIEBACiAjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCiAKIC8qIFdyaXRlcyBhbiBhcnJheSBvZiBkYXRhIHBvaW50cyB0byBjb21lZGkncyBidWZmZXIgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihjb21lZGlfc3ViZGV2aWNlICpzdWJkLAorZXh0ZXJuIHVuc2lnbmVkIGludCBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkLAogCQkJCQkgICAgICB2b2lkICpkYXRhLAogCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2ZjX3dyaXRlX3RvX2J1ZmZlcihjb21lZGlfc3ViZGV2aWNlICpzdWJkLAotCQkJCQkgICAgICAgc2FtcGxfdCBkYXRhKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2ZjX3dyaXRlX3RvX2J1ZmZlcihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCwKKwkJCQkJICAgICAgIHNob3J0IGRhdGEpCiB7CiAJcmV0dXJuIGNmY193cml0ZV9hcnJheV90b19idWZmZXIoc3ViZCwgJmRhdGEsIHNpemVvZihkYXRhKSk7CiB9OwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjZmNfd3JpdGVfbG9uZ190b19idWZmZXIoY29tZWRpX3N1YmRldmljZSAqc3ViZCwKLQkJCQkJCSAgICBsc2FtcGxfdCBkYXRhKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2ZjX3dyaXRlX2xvbmdfdG9fYnVmZmVyKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkLAorCQkJCQkJICAgIHVuc2lnbmVkIGludCBkYXRhKQogewogCXJldHVybiBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHN1YmQsICZkYXRhLCBzaXplb2YoZGF0YSkpOwogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCBjZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihjb21lZGlfc3ViZGV2aWNlICpzdWJkLAorZXh0ZXJuIHVuc2lnbmVkIGludCBjZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCwKIAkJCQkJICAgICAgIHZvaWQgKmRhdGEsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCBjZmNfaGFuZGxlX2V2ZW50cyhjb21lZGlfZGV2aWNlICpkZXYsCi0JCQkJICAgICAgY29tZWRpX3N1YmRldmljZSAqc3ViZCk7CitleHRlcm4gdW5zaWduZWQgaW50IGNmY19oYW5kbGVfZXZlbnRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmQpOwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjZmNfYnl0ZXNfcGVyX3NjYW4oY29tZWRpX3N1YmRldmljZSAqc3ViZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNmY19ieXRlc19wZXJfc2NhbihzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZCkKIHsKIAlpbnQgbnVtX3NhbXBsZXM7CiAJaW50IGJpdHNfcGVyX3NhbXBsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcGFycG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9wYXJwb3J0LmMKaW5kZXggYmE4MzhmZi4uYTIzMzM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9wYXJwb3J0LmMKQEAgLTkwLDkgKzkwLDkgQEAKICNkZWZpbmUgUEFSUE9SVF9CIDEKICNkZWZpbmUgUEFSUE9SVF9DIDIKIAotc3RhdGljIGludCBwYXJwb3J0X2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KTsKLXN0YXRpYyBpbnQgcGFycG9ydF9kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KTsKLXN0YXRpYyBjb21lZGlfZHJpdmVyIGRyaXZlcl9wYXJwb3J0ID0geworc3RhdGljIGludCBwYXJwb3J0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIGludCBwYXJwb3J0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGFycG9ydCA9IHsKICAgICAgIC5kcml2ZXJfbmFtZSA9CSJjb21lZGlfcGFycG9ydCIsCiAgICAgICAubW9kdWxlID0JCVRISVNfTU9EVUxFLAogICAgICAgLmF0dGFjaCA9CQlwYXJwb3J0X2F0dGFjaCwKQEAgLTEwOCw4ICsxMDgsOCBAQAogfTsKICNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwYXJwb3J0X3ByaXZhdGUgKikoZGV2LT5wcml2YXRlKSkKIAotc3RhdGljIGludCBwYXJwb3J0X2luc25fYShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgcGFycG9ydF9pbnNuX2Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWlmIChkYXRhWzBdKSB7CiAJCWRldnByaXYtPmFfZGF0YSAmPSB+ZGF0YVswXTsKQEAgLTEyMyw4ICsxMjMsOCBAQAogCXJldHVybiAyOwogfQogCi1zdGF0aWMgaW50IHBhcnBvcnRfaW5zbl9jb25maWdfYShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgcGFycG9ydF9pbnNuX2NvbmZpZ19hKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpZiAoZGF0YVswXSkgewogCQlzLT5pb19iaXRzID0gMHhmZjsKQEAgLTEzOCw4ICsxMzgsOCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHBhcnBvcnRfaW5zbl9iKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBwYXJwb3J0X2luc25fYihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaWYgKGRhdGFbMF0pIHsKIAkJLyogc2hvdWxkIHdyaXRlcyBiZSBpZ25vcmVkPyAqLwpAQCAtMTUxLDggKzE1MSw4IEBACiAJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBpbnQgcGFycG9ydF9pbnNuX2MoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHBhcnBvcnRfaW5zbl9jKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlkYXRhWzBdICY9IDB4MGY7CiAJaWYgKGRhdGFbMF0pIHsKQEAgLTE2Nyw4ICsxNjcsOCBAQAogCXJldHVybiAyOwogfQogCi1zdGF0aWMgaW50IHBhcnBvcnRfaW50cl9pbnNuKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBwYXJwb3J0X2ludHJfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaWYgKGluc24tPm4gPCAxKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE3Nyw4ICsxNzcsOCBAQAogCXJldHVybiAyOwogfQogCi1zdGF0aWMgaW50IHBhcnBvcnRfaW50cl9jbWR0ZXN0KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQljb21lZGlfY21kICpjbWQpCitzdGF0aWMgaW50IHBhcnBvcnRfaW50cl9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCXN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDA7CiAJaW50IHRtcDsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBhcnBvcnRfaW50cl9jbWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQorc3RhdGljIGludCBwYXJwb3J0X2ludHJfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCWRldnByaXYtPmNfZGF0YSB8PSAweDEwOwogCW91dGIoZGV2cHJpdi0+Y19kYXRhLCBkZXYtPmlvYmFzZSArIFBBUlBPUlRfQyk7CkBAIC0yNjIsNyArMjYyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYXJwb3J0X2ludHJfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgcGFycG9ydF9pbnRyX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlwcmludGsoS0VSTl9ERUJVRyAicGFycG9ydF9pbnRyX2NhbmNlbCgpXG4iKTsKIApAQCAtMjc2LDggKzI3Niw4IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBwYXJwb3J0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAzOwogCiAJaWYgKCFkZXZwcml2LT5lbmFibGVfaXJxKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpX3BhcnBvcnQ6IGJvZ3VzIGlycSwgaWdub3JlZFxuIik7CkBAIC0yOTEsMTIgKzI5MSwxMiBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBwYXJwb3J0X2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KQorc3RhdGljIGludCBwYXJwb3J0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCXVuc2lnbmVkIGxvbmcgaW9iYXNlOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKIAlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcGFycG9ydDogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgcGFycG9ydF9kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KQorc3RhdGljIGludCBwYXJwb3J0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXByaW50aygiY29tZWRpJWQ6IHBhcnBvcnQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcnRfdGltZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfcnRfdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDBjOGNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9ydF90aW1lci5jCkBAIC0wLDAgKzEsNzI4IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2NvbWVkaV9ydF90aW1lci5jCisgICAgdmlydHVhbCBkcml2ZXIgZm9yIHVzaW5nIFJUTCB0aW1pbmcgc291cmNlcworCisgICAgQXV0aG9yczogRGF2aWQgQS4gU2NobGVlZiwgRnJhbmsgTS4gSGVzcworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OSwyMDAxIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKK0RyaXZlcjogY29tZWRpX3J0X3RpbWVyCitEZXNjcmlwdGlvbjogQ29tbWFuZCBlbXVsYXRvciB1c2luZyByZWFsLXRpbWUgdGFza3MKK0F1dGhvcjogZHMsIGZtaGVzcworRGV2aWNlczoKK1N0YXR1czogd29ya3MKKworVGhpcyBkcml2ZXIgcmVxdWlyZXMgUlRBSSBvciBSVExpbnV4IHRvIHdvcmsgY29ycmVjdGx5LiAgSXQgZG9lc24ndAorYWN0dWFsbHkgZHJpdmUgaGFyZHdhcmUgZGlyZWN0bHksIGJ1dCBjYWxscyBvdGhlciBkcml2ZXJzIGFuZCB1c2VzCithIHJlYWwtdGltZSB0YXNrIHRvIGVtdWxhdGUgY29tbWFuZHMgZm9yIGRyaXZlcnMgYW5kIGRldmljZXMgdGhhdAorYXJlIGluY2FwYWJsZSBvZiBuYXRpdmUgY29tbWFuZHMuICBUaHVzLCB5b3UgY2FuIGdldCBhY2N1cmF0ZWx5Cit0aW1lZCBJL08gb24gYW55IGRldmljZS4KKworU2luY2UgdGhlIHRpbWluZyBpcyBhbGwgZG9uZSBpbiBzb2Z0d2FyZSwgc2FtcGxpbmcgaml0dGVyIGlzIG11Y2gKK2hpZ2hlciB0aGFuIHdpdGggYSBkZXZpY2UgdGhhdCBoYXMgYW4gb24tYm9hcmQgdGltZXIsIGFuZCBtYXhpbXVtCitzYW1wbGUgcmF0ZSBpcyBtdWNoIGxvd2VyLgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIG1pbm9yIG51bWJlciBvZiBkZXZpY2UgeW91IHdpc2ggdG8gZW11bGF0ZSBjb21tYW5kcyBmb3IKKyAgWzFdIC0gc3ViZGV2aWNlIG51bWJlciB5b3Ugd2lzaCB0byBlbXVsYXRlIGNvbW1hbmRzIGZvcgorKi8KKy8qCitUT0RPOgorCVN1cHBvcnQgZm9yIGRpZ2l0YWwgaW8gY29tbWFuZHMgY291bGQgYmUgYWRkZWQsIGV4Y2VwdCBJIGNhbid0IHNlZSB3aHkKKwkJYW55b25lIHdvdWxkIHdhbnQgdG8gdXNlIHRoZW0KKwlXaGF0IGhhcHBlbnMgaWYgZGV2aWNlIHdlIGFyZSBlbXVsYXRpbmcgZm9yIGlzIGRlLWNvbmZpZ3VyZWQ/CisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSAiLi4vY29tZWRpbGliLmgiCisKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworI2lmZGVmIENPTkZJR19DT01FRElfUlRMX1YxCisjaW5jbHVkZSA8cnRsX3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3J0X2lycS5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0NPTUVESV9SVEwKKyNpbmNsdWRlIDxydGwuaD4KKyNpbmNsdWRlIDxydGxfc2NoZWQuaD4KKyNpbmNsdWRlIDxydGxfY29tcGF0Lmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpZm5kZWYgUlRMSU5VWF9WRVJTSU9OX0NPREUKKyNkZWZpbmUgUlRMSU5VWF9WRVJTSU9OX0NPREUgMAorI2VuZGlmCisjaWZuZGVmIFJUTElOVVhfVkVSU0lPTgorI2RlZmluZSBSVExJTlVYX1ZFUlNJT04oYSxiLGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCisjZW5kaWYKKworLy8gYmVnaW4gaGFjayB0byB3b3JrYXJvdW5kIGJyb2tlbiBIUlRfVE9fODI1NCgpIGZ1bmN0aW9uIG9uIHJ0bGludXgKKyNpZiBSVExJTlVYX1ZFUlNJT05fQ09ERSA8PSBSVExJTlVYX1ZFUlNJT04oMywwLDEwMCkKKy8vIHRoaXMgZnVuY3Rpb24gc29sZSBwdXJwb3NlIGlzIHRvIGRpdmlkZSBhIGxvbmcgbG9uZyBieSA4MzgKK3N0YXRpYyBpbmxpbmUgUlRJTUUgbmFubzJjb3VudChsb25nIGxvbmcgbnMpCit7CisJZG9fZGl2KG5zLCA4MzgpOworCXJldHVybiBuczsKK30KKworI2lmZGVmIHJ0X2dldF90aW1lKCkKKyN1bmRlZiBydF9nZXRfdGltZSgpCisjZW5kaWYKKyNkZWZpbmUgcnRfZ2V0X3RpbWUoKSBuYW5vMmNvdW50KGdldGhydGltZSgpKQorCisjZWxzZQorCisjZGVmaW5lIG5hbm8yY291bnQoeCkgSFJUX1RPXzgyNTQoeCkKKyNlbmRpZgorLy8gZW5kIGhhY2sKKworLy8gcnRsLXJ0YWkgY29tcGF0aWJpbGl0eQorI2RlZmluZSBydF90YXNrX3dhaXRfcGVyaW9kKCkgcnRfdGFza193YWl0KCkKKyNkZWZpbmUgcnRfcGVuZF9saW51eF9zcnEoaXJxKSBydGxfZ2xvYmFsX3BlbmRfaXJxKGlycSkKKyNkZWZpbmUgcnRfZnJlZV9zcnEoaXJxKSBydGxfZnJlZV9zb2Z0X2lycShpcnEpCisjZGVmaW5lIHJ0X3JlcXVlc3Rfc3JxKHgseSx6KSBydGxfZ2V0X3NvZnRfaXJxKHksInRpbWVyIikKKyNkZWZpbmUgcnRfdGFza19pbml0KGEsYixjLGQsZSxmLGcpIHJ0X3Rhc2tfaW5pdChhLGIsYyxkLChlKSsxKQorI2RlZmluZSBydF90YXNrX3Jlc3VtZSh4KSBydF90YXNrX3dha2V1cCh4KQorI2RlZmluZSBydF9zZXRfb25lc2hvdF9tb2RlKCkKKyNkZWZpbmUgc3RhcnRfcnRfdGltZXIoeCkKKyNkZWZpbmUgc3RvcF9ydF90aW1lcigpCisKKyNlbmRpZgorI2lmZGVmIENPTkZJR19DT01FRElfUlRBSQorI2luY2x1ZGUgPHJ0YWkuaD4KKyNpbmNsdWRlIDxydGFpX3NjaGVkLmg+CisKKyNpZiBSVEFJX1ZFUlNJT05fQ09ERSA8IFJUQUlfTUFOR0xFX1ZFUlNJT04oMywzLDApCisjZGVmaW5lIGNvbWVkaV9ydF90YXNrX2NvbnRleHRfdAlpbnQKKyNlbHNlCisjZGVmaW5lIGNvbWVkaV9ydF90YXNrX2NvbnRleHRfdAlsb25nCisjZW5kaWYKKworI2VuZGlmCisKKy8qIFRoaXMgZGVmaW5lcyB0aGUgZmFzdGVzdCBzcGVlZCB3ZSB3aWxsIGVtdWxhdGUuICBOb3RlIHRoYXQKKyAqIHdpdGhvdXQgYSB3YXRjaGRvZyAobGlrZSBpbiBSVEFJKSwgd2UgY291bGQgZWFzaWx5IG92ZXJydW4gb3VyCisgKiB0YXNrIHBlcmlvZCBiZWNhdXNlIGFuYWxvZyBpbnB1dCB0ZW5kcyB0byBiZSBzbG93LiAqLworI2RlZmluZSBTUEVFRF9MSU1JVCAxMDAwMDAJLyogaW4gbmFub3NlY29uZHMgKi8KKworc3RhdGljIGludCB0aW1lcl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCB0aW1lcl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCB0aW1lcl9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdfbnVtKTsKK3N0YXRpYyBpbnQgdGltZXJfc3RhcnRfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3RpbWVyID0geworICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgZHJpdmVyX25hbWU6ImNvbWVkaV9ydF90aW1lciIsCisgICAgICBhdHRhY2g6dGltZXJfYXR0YWNoLAorICAgICAgZGV0YWNoOnRpbWVyX2RldGFjaCwKKy8vICAgICAgb3BlbjogICAgICAgICAgIHRpbWVyX29wZW4sCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3RpbWVyKTsKKworc3RydWN0IHRpbWVyX3ByaXZhdGUgeworCWNvbWVkaV90ICpkZXZpY2U7CS8vIGRldmljZSB3ZSBhcmUgZW11bGF0aW5nIGNvbW1hbmRzIGZvcgorCWludCBzdWJkOwkJLy8gc3ViZGV2aWNlIHdlIGFyZSBlbXVsYXRpbmcgY29tbWFuZHMgZm9yCisJUlRfVEFTSyAqcnRfdGFzazsJLy8gcnQgdGFzayB0aGF0IHN0YXJ0cyBzY2FucworCVJUX1RBU0sgKnNjYW5fdGFzazsJLy8gcnQgdGFzayB0aGF0IGNvbnRyb2xzIGNvbnZlcnNpb24gdGltaW5nIGluIGEgc2NhbgorCS8qIGlvX2Z1bmN0aW9uIGNhbiBwb2ludCB0byBlaXRoZXIgYW4gaW5wdXQgb3Igb3V0cHV0IGZ1bmN0aW9uCisJICogZGVwZW5kaW5nIG9uIHdoYXQga2luZCBvZiBzdWJkZXZpY2Ugd2UgYXJlIGVtdWxhdGluZyBmb3IgKi8KKwlpbnQgKCppb19mdW5jdGlvbikgKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCwKKwkJdW5zaWduZWQgaW50IGluZGV4KTsKKwkvLyBSVElNRSBoYXMgdW5pdHMgb2YgMSA9IDgzOCBuYW5vc2Vjb25kcworCS8vIHRpbWUgYXQgd2hpY2ggZmlyc3Qgc2NhbiBzdGFydGVkLCB1c2VkIHRvIGNoZWNrIHNjYW4gdGltaW5nCisJUlRJTUUgc3RhcnQ7CisJLy8gdGltZSBiZXR3ZWVuIHNjYW5zCisJUlRJTUUgc2Nhbl9wZXJpb2Q7CisJLy8gdGltZSBiZXR3ZWVuIGNvbnZlcnNpb25zIGluIGEgc2NhbgorCVJUSU1FIGNvbnZlcnRfcGVyaW9kOworCS8vIGZsYWdzCisJdm9sYXRpbGUgaW50IHN0b3A7CS8vIGluZGljYXRlcyB3ZSBzaG91bGQgc3RvcAorCXZvbGF0aWxlIGludCBydF90YXNrX2FjdGl2ZTsJLy8gaW5kaWNhdGVzIHJ0X3Rhc2sgaXMgc2VydmljaW5nIGEgc3RydWN0IGNvbWVkaV9jbWQKKwl2b2xhdGlsZSBpbnQgc2Nhbl90YXNrX2FjdGl2ZTsJLy8gaW5kaWNhdGVzIHNjYW5fdGFzayBpcyBzZXJ2aWNpbmcgYSBzdHJ1Y3QgY29tZWRpX2NtZAorCXVuc2lnbmVkIHRpbWVyX3J1bm5pbmc6MTsKK307CisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgdGltZXJfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCB0aW1lcl9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlkZXZwcml2LT5zdG9wID0gMTsKKworCXJldHVybiAwOworfQorCisvLyBjaGVja3MgZm9yIHNjYW4gdGltaW5nIGVycm9yCitpbmxpbmUgc3RhdGljIGludCBjaGVja19zY2FuX3RpbWluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2NhbikKK3sKKwlSVElNRSBub3csIHRpbWluZ19lcnJvcjsKKworCW5vdyA9IHJ0X2dldF90aW1lKCk7CisJdGltaW5nX2Vycm9yID0gbm93IC0gKGRldnByaXYtPnN0YXJ0ICsgc2NhbiAqIGRldnByaXYtPnNjYW5fcGVyaW9kKTsKKwlpZiAodGltaW5nX2Vycm9yID4gZGV2cHJpdi0+c2Nhbl9wZXJpb2QpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInRpbWluZyBlcnJvciIpOworCQlydF9wcmludGsoInNjYW4gc3RhcnRlZCAlaSBucyBsYXRlXG4iLCB0aW1pbmdfZXJyb3IgKiA4MzgpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8vIGNoZWNrcyBmb3IgY29udmVyc2lvbiB0aW1pbmcgZXJyb3IKK2lubGluZSBzdGF0aWMgaW50IGNoZWNrX2NvbnZlcnNpb25fdGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCVJUSU1FIHNjYW5fc3RhcnQsIHVuc2lnbmVkIGludCBjb252ZXJzaW9uKQoreworCVJUSU1FIG5vdywgdGltaW5nX2Vycm9yOworCisJbm93ID0gcnRfZ2V0X3RpbWUoKTsKKwl0aW1pbmdfZXJyb3IgPQorCQlub3cgLSAoc2Nhbl9zdGFydCArIGNvbnZlcnNpb24gKiBkZXZwcml2LT5jb252ZXJ0X3BlcmlvZCk7CisJaWYgKHRpbWluZ19lcnJvciA+IGRldnByaXYtPmNvbnZlcnRfcGVyaW9kKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1pbmcgZXJyb3IiKTsKKwkJcnRfcHJpbnRrKCJjb252ZXJzaW9uIHN0YXJ0ZWQgJWkgbnMgbGF0ZVxuIiwKKwkJCXRpbWluZ19lcnJvciAqIDgzOCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLy8gZGV2cHJpdi0+aW9fZnVuY3Rpb24gZm9yIGFuIGlucHV0IHN1YmRldmljZQorc3RhdGljIGludCB0aW1lcl9kYXRhX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kLAorCXVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgZGF0YTsKKworCXJldCA9IGNvbWVkaV9kYXRhX3JlYWQoZGV2cHJpdi0+ZGV2aWNlLCBkZXZwcml2LT5zdWJkLAorCQlDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaW5kZXhdKSwKKwkJQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpbmRleF0pLAorCQlDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbaW5kZXhdKSwgJmRhdGEpOworCWlmIChyZXQgPCAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyZWFkIGVycm9yIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAocy0+ZmxhZ3MgJiBTREZfTFNBTVBMKSB7CisJCWNmY193cml0ZV9sb25nX3RvX2J1ZmZlcihzLCBkYXRhKTsKKwl9IGVsc2UgeworCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgZGF0YSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8vIGRldnByaXYtPmlvX2Z1bmN0aW9uIGZvciBhbiBvdXRwdXQgc3ViZGV2aWNlCitzdGF0aWMgaW50IHRpbWVyX2RhdGFfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kLAorCXVuc2lnbmVkIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+d3JpdGVfc3ViZGV2OworCXVuc2lnbmVkIGludCBudW1fYnl0ZXM7CisJc2hvcnQgZGF0YTsKKwl1bnNpZ25lZCBpbnQgbG9uZ19kYXRhOworCWludCByZXQ7CisKKwlpZiAocy0+ZmxhZ3MgJiBTREZfTFNBTVBMKSB7CisJCW51bV9ieXRlcyA9CisJCQljZmNfcmVhZF9hcnJheV9mcm9tX2J1ZmZlcihzLCAmbG9uZ19kYXRhLAorCQkJc2l6ZW9mKGxvbmdfZGF0YSkpOworCX0gZWxzZSB7CisJCW51bV9ieXRlcyA9IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHMsICZkYXRhLCBzaXplb2YoZGF0YSkpOworCQlsb25nX2RhdGEgPSBkYXRhOworCX0KKworCWlmIChudW1fYnl0ZXMgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiYnVmZmVyIHVuZGVycnVuIik7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlyZXQgPSBjb21lZGlfZGF0YV93cml0ZShkZXZwcml2LT5kZXZpY2UsIGRldnByaXYtPnN1YmQsCisJCUNSX0NIQU4oY21kLT5jaGFubGlzdFtpbmRleF0pLAorCQlDUl9SQU5HRShjbWQtPmNoYW5saXN0W2luZGV4XSksCisJCUNSX0FSRUYoY21kLT5jaGFubGlzdFtpbmRleF0pLCBsb25nX2RhdGEpOworCWlmIChyZXQgPCAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJ3cml0ZSBlcnJvciIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLy8gZGV2cHJpdi0+aW9fZnVuY3Rpb24gZm9yIERJTyBzdWJkZXZpY2VzCitzdGF0aWMgaW50IHRpbWVyX2Rpb19yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCwKKwl1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCWludCByZXQ7CisJdW5zaWduZWQgaW50IGRhdGE7CisKKwlyZXQgPSBjb21lZGlfZGlvX2JpdGZpZWxkKGRldnByaXYtPmRldmljZSwgZGV2cHJpdi0+c3ViZCwgMCwgJmRhdGEpOworCWlmIChyZXQgPCAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyZWFkIGVycm9yIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChzLT5mbGFncyAmIFNERl9MU0FNUEwpCisJCWNmY193cml0ZV9sb25nX3RvX2J1ZmZlcihzLCBkYXRhKTsKKwllbHNlCisJCWNmY193cml0ZV90b19idWZmZXIocywgZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworLy8gcGVyZm9ybXMgc2NhbnMKK3N0YXRpYyB2b2lkIHNjYW5fdGFza19mdW5jKGNvbWVkaV9ydF90YXNrX2NvbnRleHRfdCBkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJaW50IGksIHJldDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgbjsKKwlSVElNRSBzY2FuX3N0YXJ0OworCisJLy8gZXZlcnkgc3RydWN0IGNvbWVkaV9jbWQgY2F1c2VzIG9uZSBleGVjdXRpb24gb2Ygd2hpbGUgbG9vcAorCXdoaWxlICgxKSB7CisJCWRldnByaXYtPnNjYW5fdGFza19hY3RpdmUgPSAxOworCQkvLyBlYWNoIGZvciBsb29wIGNvbXBsZXRlcyBvbmUgc2NhbgorCQlmb3IgKG4gPSAwOyBuIDwgY21kLT5zdG9wX2FyZyB8fCBjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORTsKKwkJCW4rKykgeworCQkJaWYgKG4pIHsKKwkJCQkvLyBzdXNwZW5kIHRhc2sgdW50aWwgbmV4dCBzY2FuCisJCQkJcmV0ID0gcnRfdGFza19zdXNwZW5kKGRldnByaXYtPnNjYW5fdGFzayk7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJCSJlcnJvciBzdXNwZW5kaW5nIHNjYW4gdGFzayIpOworCQkJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKKwkJCQkJZ290byBjbGVhbnVwOworCQkJCX0KKwkJCX0KKwkJCS8vIGNoZWNrIGlmIHN0b3AgZmxhZyB3YXMgc2V0IChieSB0aW1lcl9jYW5jZWwoKSkKKwkJCWlmIChkZXZwcml2LT5zdG9wKQorCQkJCWdvdG8gY2xlYW51cDsKKwkJCXJldCA9IGNoZWNrX3NjYW5fdGltaW5nKGRldiwgbik7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJCXNjYW5fc3RhcnQgPSBydF9nZXRfdGltZSgpOworCQkJZm9yIChpID0gMDsgaSA8IGNtZC0+c2Nhbl9lbmRfYXJnOyBpKyspIHsKKwkJCQkvLyBjb252ZXJzaW9uIHRpbWluZworCQkJCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIgJiYgaSkgeworCQkJCQlydF90YXNrX3dhaXRfcGVyaW9kKCk7CisJCQkJCXJldCA9IGNoZWNrX2NvbnZlcnNpb25fdGltaW5nKGRldiwKKwkJCQkJCXNjYW5fc3RhcnQsIGkpOworCQkJCQlpZiAocmV0IDwgMCkgeworCQkJCQkJYXN5bmMtPmV2ZW50cyB8PQorCQkJCQkJCUNPTUVESV9DQl9FUlJPUjsKKwkJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQkJfQorCQkJCX0KKwkJCQlyZXQgPSBkZXZwcml2LT5pb19mdW5jdGlvbihkZXYsIGNtZCwgaSk7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1I7CisJCQkJCWdvdG8gY2xlYW51cDsKKwkJCQl9CisJCQl9CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKKwkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyA9IDA7CisJCX0KKworCSAgICAgIGNsZWFudXA6CisKKwkJY29tZWRpX3VubG9jayhkZXZwcml2LT5kZXZpY2UsIGRldnByaXYtPnN1YmQpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlhc3luYy0+ZXZlbnRzID0gMDsKKwkJZGV2cHJpdi0+c2Nhbl90YXNrX2FjdGl2ZSA9IDA7CisJCS8vIHN1c3BlbmQgdGFzayB1bnRpbCBuZXh0IHN0cnVjdCBjb21lZGlfY21kCisJCXJ0X3Rhc2tfc3VzcGVuZChkZXZwcml2LT5zY2FuX3Rhc2spOworCX0KK30KKworc3RhdGljIHZvaWQgdGltZXJfdGFza19mdW5jKGNvbWVkaV9ydF90YXNrX2NvbnRleHRfdCBkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBsb25nIG47CisKKwkvLyBldmVyeSBzdHJ1Y3QgY29tZWRpX2NtZCBjYXVzZXMgb25lIGV4ZWN1dGlvbiBvZiB3aGlsZSBsb29wCisJd2hpbGUgKDEpIHsKKwkJZGV2cHJpdi0+cnRfdGFza19hY3RpdmUgPSAxOworCQlkZXZwcml2LT5zY2FuX3Rhc2tfYWN0aXZlID0gMTsKKwkJZGV2cHJpdi0+c3RhcnQgPSBydF9nZXRfdGltZSgpOworCisJCWZvciAobiA9IDA7IG4gPCBjbWQtPnN0b3BfYXJnIHx8IGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FOworCQkJbisrKSB7CisJCQkvLyBzY2FuIHRpbWluZworCQkJaWYgKG4pCisJCQkJcnRfdGFza193YWl0X3BlcmlvZCgpOworCQkJaWYgKGRldnByaXYtPnNjYW5fdGFza19hY3RpdmUgPT0gMCkgeworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJCXJldCA9IHJ0X3Rhc2tfbWFrZV9wZXJpb2RpYyhkZXZwcml2LT5zY2FuX3Rhc2ssCisJCQkJZGV2cHJpdi0+c3RhcnQgKyBkZXZwcml2LT5zY2FuX3BlcmlvZCAqIG4sCisJCQkJZGV2cHJpdi0+Y29udmVydF9wZXJpb2QpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISIpOworCQkJfQorCQl9CisKKwkgICAgICBjbGVhbnVwOgorCisJCWRldnByaXYtPnJ0X3Rhc2tfYWN0aXZlID0gMDsKKwkJLy8gc3VzcGVuZCB1bnRpbCBuZXh0IHN0cnVjdCBjb21lZGlfY21kCisJCXJ0X3Rhc2tfc3VzcGVuZChkZXZwcml2LT5ydF90YXNrKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IGNvbWVkaV9pbnNuIHhpbnNuID0gKmluc247CisKKwl4aW5zbi5kYXRhID0gZGF0YTsKKwl4aW5zbi5zdWJkZXYgPSBkZXZwcml2LT5zdWJkOworCisJcmV0dXJuIGNvbWVkaV9kb19pbnNuKGRldnByaXYtPmRldmljZSwgJnhpbnNuKTsKK30KKworc3RhdGljIGludCBjbWR0ZXN0X2hlbHBlcihzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCwKKwl1bnNpZ25lZCBpbnQgc3RhcnRfc3JjLAorCXVuc2lnbmVkIGludCBzY2FuX2JlZ2luX3NyYywKKwl1bnNpZ25lZCBpbnQgY29udmVydF9zcmMsCisJdW5zaWduZWQgaW50IHNjYW5fZW5kX3NyYywgdW5zaWduZWQgaW50IHN0b3Bfc3JjKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBzdGFydF9zcmM7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IHNjYW5fYmVnaW5fc3JjOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gY29udmVydF9zcmM7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IHNjYW5fZW5kX3NyYzsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gc3RvcF9zcmM7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCBzdGFydF9zcmMgPSAwOworCisJaWYgKHMtPnR5cGUgPT0gQ09NRURJX1NVQkRfQU8pCisJCXN0YXJ0X3NyYyA9IFRSSUdfSU5UOworCWVsc2UKKwkJc3RhcnRfc3JjID0gVFJJR19OT1c7CisKKwllcnIgPSBjbWR0ZXN0X2hlbHBlcihjbWQsIHN0YXJ0X3NyYywJLyogc3RhcnRfc3JjICovCisJCVRSSUdfVElNRVIgfCBUUklHX0ZPTExPVywJLyogc2Nhbl9iZWdpbl9zcmMgKi8KKwkJVFJJR19OT1cgfCBUUklHX1RJTUVSLAkvKiBjb252ZXJ0X3NyYyAqLworCQlUUklHX0NPVU5ULAkvKiBzY2FuX2VuZF9zcmMgKi8KKwkJVFJJR19DT1VOVCB8IFRSSUdfTk9ORSk7CS8qIHN0b3Bfc3JjICovCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkKKwkgKiBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cgJiYgY21kLT5zdGFydF9zcmMgIT0gVFJJR19JTlQpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVworCQkmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XICYmIGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUikKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKwkvLyBsaW1pdCBmcmVxdWVuY3ksIHRoaXMgaXMgZmFpcmx5IGFyYml0cmFyeQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBTUEVFRF9MSU1JVCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IFNQRUVEX0xJTUlUOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IFNQRUVEX0xJTUlUKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gU1BFRURfTElNSVQ7CisJCQllcnIrKzsKKwkJfQorCX0KKwkvLyBtYWtlIHN1cmUgY29udmVyc2lvbiBhbmQgc2NhbiBmcmVxdWVuY2llcyBhcmUgY29tcGF0aWJsZQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIgJiYgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmcgPiBjbWQtPnNjYW5fYmVnaW5fYXJnKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFuZCBhcmd1bWVudHMgKi8KKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpbWVyX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJLyogaGFjayBhdHRhY2s6IGRyaXZlcnMgYXJlIG5vdCBzdXBwb3NlZCB0byBkbyB0aGlzOiAqLworCWRldi0+cnQgPSAxOworCisJLy8gbWFrZSBzdXJlIHRhc2tzIGhhdmUgZmluaXNoZWQgY2xlYW51cCBvZiBsYXN0IHN0cnVjdCBjb21lZGlfY21kCisJaWYgKGRldnByaXYtPnJ0X3Rhc2tfYWN0aXZlIHx8IGRldnByaXYtPnNjYW5fdGFza19hY3RpdmUpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXQgPSBjb21lZGlfbG9jayhkZXZwcml2LT5kZXZpY2UsIGRldnByaXYtPnN1YmQpOworCWlmIChyZXQgPCAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJmYWlsZWQgdG8gb2J0YWluIGxvY2siKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlkZXZwcml2LT5zY2FuX3BlcmlvZCA9IG5hbm8yY291bnQoY21kLT5zY2FuX2JlZ2luX2FyZyk7CisJCWJyZWFrOworCWNhc2UgVFJJR19GT0xMT1c6CisJCWRldnByaXYtPnNjYW5fcGVyaW9kID0KKwkJCW5hbm8yY291bnQoY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyBzZXR0aW5nIHNjYW4gcGVyaW9kISIpOworCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKGNtZC0+Y29udmVydF9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCWRldnByaXYtPmNvbnZlcnRfcGVyaW9kID0gbmFubzJjb3VudChjbWQtPmNvbnZlcnRfYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX05PVzoKKwkJZGV2cHJpdi0+Y29udmVydF9wZXJpb2QgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnIHNldHRpbmcgY29udmVyc2lvbiBwZXJpb2QhIik7CisJCXJldHVybiAtMTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKQorCQlyZXR1cm4gdGltZXJfc3RhcnRfY21kKGRldiwgcyk7CisKKwlzLT5hc3luYy0+aW50dHJpZyA9IHRpbWVyX2ludHRyaWc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aW1lcl9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdfbnVtKQoreworCWlmICh0cmlnX251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCXJldHVybiB0aW1lcl9zdGFydF9jbWQoZGV2LCBzKTsKK30KKworc3RhdGljIGludCB0aW1lcl9zdGFydF9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwlSVElNRSBub3csIGRlbGF5LCBwZXJpb2Q7CisJaW50IHJldDsKKworCWRldnByaXYtPnN0b3AgPSAwOworCXMtPmFzeW5jLT5ldmVudHMgPSAwOworCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XKQorCQlkZWxheSA9IG5hbm8yY291bnQoY21kLT5zdGFydF9hcmcpOworCWVsc2UKKwkJZGVsYXkgPSAwOworCisJbm93ID0gcnRfZ2V0X3RpbWUoKTsKKwkvKiBVc2luZyAncGVyaW9kJyB0aGlzIHdheSBnZXRzIGFyb3VuZCBzb21lIHdlaXJkIGJ1ZyBpbiBnY2MtMi45NS4yCisJICogdGhhdCBnZW5lcmF0ZXMgdGhlIGNvbXBpbGUgZXJyb3IgJ2ludGVybmFsIGVycm9yLS11bnJlY29nbml6YWJsZSBpbnNuJworCSAqIHdoZW4gcnRfdGFza19tYWtlX3BlcmlvZCgpIGlzIGNhbGxlZCAob2JzZXJ2ZWQgd2l0aCBydGxpbnV4LTMuMSwgbGludXgtMi4yLjE5KS4KKwkgKiAgLSBmbWhlc3MgKi8KKwlwZXJpb2QgPSBkZXZwcml2LT5zY2FuX3BlcmlvZDsKKwlyZXQgPSBydF90YXNrX21ha2VfcGVyaW9kaWMoZGV2cHJpdi0+cnRfdGFzaywgbm93ICsgZGVsYXksIHBlcmlvZCk7CisJaWYgKHJldCA8IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgImVycm9yIHN0YXJ0aW5nIHJ0X3Rhc2siKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGltZXJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsICplbXVsX3M7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmVtdWxfZGV2OworCS8qIFRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSBkZXZjb25maWcgb3B0aW9uc1tdICovCisJY29uc3QgaW50IHRpbWVyX3ByaW9yaXR5ID0gNDsKKwljb25zdCBpbnQgc2Nhbl9wcmlvcml0eSA9IHRpbWVyX3ByaW9yaXR5ICsgMTsKKwljaGFyIHBhdGhbMjBdOworCisJcHJpbnRrKCJjb21lZGklZDogdGltZXI6ICIsIGRldi0+bWlub3IpOworCisJZGV2LT5ib2FyZF9uYW1lID0gInRpbWVyIjsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCB0aW1lcl9wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXNwcmludGYocGF0aCwgIi9kZXYvY29tZWRpJWQiLCBpdC0+b3B0aW9uc1swXSk7CisJZGV2cHJpdi0+ZGV2aWNlID0gY29tZWRpX29wZW4ocGF0aCk7CisJZGV2cHJpdi0+c3ViZCA9IGl0LT5vcHRpb25zWzFdOworCisJcHJpbnRrKCJlbXVsYXRpbmcgY29tbWFuZHMgZm9yIG1pbm9yICVpLCBzdWJkZXZpY2UgJWRcbiIsCisJCWl0LT5vcHRpb25zWzBdLCBkZXZwcml2LT5zdWJkKTsKKworCWVtdWxfZGV2ID0gZGV2cHJpdi0+ZGV2aWNlOworCWVtdWxfcyA9IGVtdWxfZGV2LT5zdWJkZXZpY2VzICsgZGV2cHJpdi0+c3ViZDsKKworCS8vIGlucHV0IG9yIG91dHB1dCBzdWJkZXZpY2UKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzLT50eXBlID0gZW11bF9zLT50eXBlOworCXMtPnN1YmRldl9mbGFncyA9IGVtdWxfcy0+c3ViZGV2X2ZsYWdzOwkvKiBTREZfR1JPVU5EICh0byBmb29sIGNoZWNrX2RyaXZlcikgKi8KKwlzLT5uX2NoYW4gPSBlbXVsX3MtPm5fY2hhbjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxMDI0OworCXMtPmRvX2NtZCA9IHRpbWVyX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gdGltZXJfY21kdGVzdDsKKwlzLT5jYW5jZWwgPSB0aW1lcl9jYW5jZWw7CisJcy0+bWF4ZGF0YSA9IGVtdWxfcy0+bWF4ZGF0YTsKKwlzLT5yYW5nZV90YWJsZSA9IGVtdWxfcy0+cmFuZ2VfdGFibGU7CisJcy0+cmFuZ2VfdGFibGVfbGlzdCA9IGVtdWxfcy0+cmFuZ2VfdGFibGVfbGlzdDsKKwlzd2l0Y2ggKGVtdWxfcy0+dHlwZSkgeworCWNhc2UgQ09NRURJX1NVQkRfQUk6CisJCXMtPmluc25fcmVhZCA9IHRpbWVyX2luc247CisJCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9SRUFEOworCQlkZXZwcml2LT5pb19mdW5jdGlvbiA9IHRpbWVyX2RhdGFfcmVhZDsKKwkJYnJlYWs7CisJY2FzZSBDT01FRElfU1VCRF9BTzoKKwkJcy0+aW5zbl93cml0ZSA9IHRpbWVyX2luc247CisJCXMtPmluc25fcmVhZCA9IHRpbWVyX2luc247CisJCWRldi0+d3JpdGVfc3ViZGV2ID0gczsKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfV1JJVEU7CisJCWRldnByaXYtPmlvX2Z1bmN0aW9uID0gdGltZXJfZGF0YV93cml0ZTsKKwkJYnJlYWs7CisJY2FzZSBDT01FRElfU1VCRF9ESU86CisJCXMtPmluc25fd3JpdGUgPSB0aW1lcl9pbnNuOworCQlzLT5pbnNuX3JlYWQgPSB0aW1lcl9pbnNuOworCQlzLT5pbnNuX2JpdHMgPSB0aW1lcl9pbnNuOworCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfUkVBRDsKKwkJZGV2cHJpdi0+aW9fZnVuY3Rpb24gPSB0aW1lcl9kaW9fcmVhZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29tZWRpX2Vycm9yKGRldiwgImZhaWxlZCB0byBkZXRlcm1pbmUgc3ViZGV2aWNlIHR5cGUhIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJ0X3NldF9vbmVzaG90X21vZGUoKTsKKwlzdGFydF9ydF90aW1lcigxKTsKKwlkZXZwcml2LT50aW1lcl9ydW5uaW5nID0gMTsKKworCWRldnByaXYtPnJ0X3Rhc2sgPSBremFsbG9jKHNpemVvZihSVF9UQVNLKSwgR0ZQX0tFUk5FTCk7CisKKwkvLyBpbml0aWFsaXplIHJlYWwtdGltZSB0YXNrcworCXJldCA9IHJ0X3Rhc2tfaW5pdChkZXZwcml2LT5ydF90YXNrLCB0aW1lcl90YXNrX2Z1bmMsCisJCShjb21lZGlfcnRfdGFza19jb250ZXh0X3QpIGRldiwgMzAwMCwgdGltZXJfcHJpb3JpdHksIDAsIDApOworCWlmIChyZXQgPCAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJlcnJvciBpbml0YWxpemluZyBydF90YXNrIik7CisJCWtmcmVlKGRldnByaXYtPnJ0X3Rhc2spOworCQlkZXZwcml2LT5ydF90YXNrID0gMDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZwcml2LT5zY2FuX3Rhc2sgPSBremFsbG9jKHNpemVvZihSVF9UQVNLKSwgR0ZQX0tFUk5FTCk7CisKKwlyZXQgPSBydF90YXNrX2luaXQoZGV2cHJpdi0+c2Nhbl90YXNrLCBzY2FuX3Rhc2tfZnVuYywKKwkJKGNvbWVkaV9ydF90YXNrX2NvbnRleHRfdCkgZGV2LCAzMDAwLCBzY2FuX3ByaW9yaXR5LCAwLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3IgaW5pdGFsaXppbmcgc2Nhbl90YXNrIik7CisJCWtmcmVlKGRldnByaXYtPnNjYW5fdGFzayk7CisJCWRldnByaXYtPnNjYW5fdGFzayA9IDA7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8vIGZyZWUgYWxsb2NhdGVkIHJlc291cmNlcworc3RhdGljIGludCB0aW1lcl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogdGltZXI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+cnRfdGFzaykgeworCQkJcnRfdGFza19kZWxldGUoZGV2cHJpdi0+cnRfdGFzayk7CisJCQlrZnJlZShkZXZwcml2LT5ydF90YXNrKTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+c2Nhbl90YXNrKSB7CisJCQlydF90YXNrX2RlbGV0ZShkZXZwcml2LT5zY2FuX3Rhc2spOworCQkJa2ZyZWUoZGV2cHJpdi0+c2Nhbl90YXNrKTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+dGltZXJfcnVubmluZykKKwkJCXN0b3BfcnRfdGltZXIoKTsKKwkJaWYgKGRldnByaXYtPmRldmljZSkKKwkJCWNvbWVkaV9jbG9zZShkZXZwcml2LT5kZXZpY2UpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb21lZGlfdGVzdC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMKaW5kZXggNGI0YzM3ZC4uZTY3OTMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV90ZXN0LmMKQEAgLTg5LDEzICs4OSwxMyBAQAogCXVuc2lnbmVkIGludCBzY2FuX3BlcmlvZDsJLyogc2NhbiBwZXJpb2QgaW4gdXNlYyAqLwogCXVuc2lnbmVkIGludCBjb252ZXJ0X3BlcmlvZDsJLyogY29udmVyc2lvbiBwZXJpb2QgaW4gdXNlYyAqLwogCXVuc2lnbmVkIHRpbWVyX3J1bm5pbmc6MTsKLQlsc2FtcGxfdCBhb19sb29wYmFja3NbTl9DSEFOU107CisJdW5zaWduZWQgaW50IGFvX2xvb3BiYWNrc1tOX0NIQU5TXTsKIH07CiAjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3Qgd2F2ZWZvcm1fcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKIAotc3RhdGljIGludCB3YXZlZm9ybV9hdHRhY2goY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfZGV2Y29uZmlnICppdCk7Ci1zdGF0aWMgaW50IHdhdmVmb3JtX2RldGFjaChjb21lZGlfZGV2aWNlICpkZXYpOwotc3RhdGljIGNvbWVkaV9kcml2ZXIgZHJpdmVyX3dhdmVmb3JtID0geworc3RhdGljIGludCB3YXZlZm9ybV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKK3N0YXRpYyBpbnQgd2F2ZWZvcm1fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl93YXZlZm9ybSA9IHsKICAgICAgIC5kcml2ZXJfbmFtZSA9CSJjb21lZGlfdGVzdCIsCiAgICAgICAubW9kdWxlID0JCVRISVNfTU9EVUxFLAogICAgICAgLmF0dGFjaCA9CQl3YXZlZm9ybV9hdHRhY2gsCkBAIC0xMDcsMjggKzEwNywyOCBAQAogCiBDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3dhdmVmb3JtKTsKIAotc3RhdGljIGludCB3YXZlZm9ybV9haV9jbWR0ZXN0KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgICBjb21lZGlfY21kICpjbWQpOwotc3RhdGljIGludCB3YXZlZm9ybV9haV9jbWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKTsKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fYWlfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcyk7Ci1zdGF0aWMgaW50IHdhdmVmb3JtX2FpX2luc25fcmVhZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSk7Ci1zdGF0aWMgaW50IHdhdmVmb3JtX2FvX2luc25fd3JpdGUoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKTsKLXN0YXRpYyBzYW1wbF90IGZha2Vfc2F3dG9vdGgoY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmFuZ2UsCitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCB3YXZlZm9ybV9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIHNob3J0IGZha2Vfc2F3dG9vdGgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSk7Ci1zdGF0aWMgc2FtcGxfdCBmYWtlX3NxdWFyZXdhdmUoY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmFuZ2UsCitzdGF0aWMgc2hvcnQgZmFrZV9zcXVhcmV3YXZlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByYW5nZSwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSk7Ci1zdGF0aWMgc2FtcGxfdCBmYWtlX2ZsYXRsaW5lKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlLAorc3RhdGljIHNob3J0IGZha2VfZmxhdGxpbmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSk7Ci1zdGF0aWMgc2FtcGxfdCBmYWtlX3dhdmVmb3JtKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCitzdGF0aWMgc2hvcnQgZmFrZV93YXZlZm9ybShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKIAkJCSAgICAgdW5zaWduZWQgaW50IHJhbmdlLCB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSk7CiAKIC8qIDEwMDAgbmFub3NlYyBpbiBhIG1pY3Jvc2VjICovCiBzdGF0aWMgY29uc3QgaW50IG5hbm9fcGVyX21pY3JvID0gMTAwMDsKIAogLyogZmFrZSBhbmFsb2cgaW5wdXQgcmFuZ2VzICovCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSB3YXZlZm9ybV9haV9yYW5nZXMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2Ugd2F2ZWZvcm1fYWlfcmFuZ2VzID0gewogCTIsCiAJewogCQkJQklQX1JBTkdFKDEwKSwKQEAgLTE0Myw5ICsxNDMsOSBAQAogKi8KIHN0YXRpYyB2b2lkIHdhdmVmb3JtX2FpX2ludGVycnVwdCh1bnNpZ25lZCBsb25nIGFyZykKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBhcmc7Ci0JY29tZWRpX2FzeW5jICphc3luYyA9IGRldi0+cmVhZF9zdWJkZXYtPmFzeW5jOwotCWNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgYXJnOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gZGV2LT5yZWFkX3N1YmRldi0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOwogCXVuc2lnbmVkIGludCBpLCBqOwogCS8qIGFsbCB0aW1lcyBpbiBtaWNyb3NlYyAqLwogCXVuc2lnbmVkIGxvbmcgZWxhcHNlZF90aW1lOwpAQCAtMTkyLDkgKzE5Miw5IEBACiAJY29tZWRpX2V2ZW50KGRldiwgZGV2LT5yZWFkX3N1YmRldik7CiB9CiAKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fYXR0YWNoKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpCitzdGF0aWMgaW50IHdhdmVmb3JtX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgYW1wbGl0dWRlID0gaXQtPm9wdGlvbnNbMF07CiAJaW50IHBlcmlvZCA9IGl0LT5vcHRpb25zWzFdOwogCWludCBpOwpAQCAtMjU5LDcgKzI1OSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fZGV0YWNoKGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgd2F2ZWZvcm1fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJcHJpbnRrKCJjb21lZGklZDogY29tZWRpX3Rlc3Q6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKQEAgLTI2OSw4ICsyNjksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NtZHRlc3QoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgICAgIGNvbWVkaV9jbWQgKmNtZCkKK3N0YXRpYyBpbnQgd2F2ZWZvcm1fYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCWludCBlcnIgPSAwOwogCWludCB0bXA7CkBAIC0zOTcsOSArMzk3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3YXZlZm9ybV9haV9jbWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQorc3RhdGljIGludCB3YXZlZm9ybV9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCiAJaWYgKGNtZC0+ZmxhZ3MgJiBUUklHX1JUKSB7CiAJCWNvbWVkaV9lcnJvcihkZXYsCkBAIC00MjksMjAgKzQyOSwyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NhbmNlbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlkZXZwcml2LT50aW1lcl9ydW5uaW5nID0gMDsKIAlkZWxfdGltZXIoJmRldnByaXYtPnRpbWVyKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNhbXBsX3QgZmFrZV9zYXd0b290aChjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByYW5nZV9pbmRleCwKK3N0YXRpYyBzaG9ydCBmYWtlX3Nhd3Rvb3RoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByYW5nZV9pbmRleCwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBjdXJyZW50X3RpbWUpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OwogCXVuc2lnbmVkIGludCBvZmZzZXQgPSBzLT5tYXhkYXRhIC8gMjsKIAl1NjQgdmFsdWU7Ci0JY29uc3QgY29tZWRpX2tyYW5nZSAqa3JhbmdlID0gJnMtPnJhbmdlX3RhYmxlLT5yYW5nZVtyYW5nZV9pbmRleF07CisJY29uc3Qgc3RydWN0IGNvbWVkaV9rcmFuZ2UgKmtyYW5nZSA9ICZzLT5yYW5nZV90YWJsZS0+cmFuZ2VbcmFuZ2VfaW5kZXhdOwogCXU2NCBiaW5hcnlfYW1wbGl0dWRlOwogCiAJYmluYXJ5X2FtcGxpdHVkZSA9IHMtPm1heGRhdGE7CkBAIC00NTcsMTMgKzQ1NywxMyBAQAogCiAJcmV0dXJuIG9mZnNldCArIHZhbHVlOwogfQotc3RhdGljIHNhbXBsX3QgZmFrZV9zcXVhcmV3YXZlKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlX2luZGV4LAorc3RhdGljIHNob3J0IGZha2Vfc3F1YXJld2F2ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmFuZ2VfaW5kZXgsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjdXJyZW50X3RpbWUpCiB7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OwogCXVuc2lnbmVkIGludCBvZmZzZXQgPSBzLT5tYXhkYXRhIC8gMjsKIAl1NjQgdmFsdWU7Ci0JY29uc3QgY29tZWRpX2tyYW5nZSAqa3JhbmdlID0gJnMtPnJhbmdlX3RhYmxlLT5yYW5nZVtyYW5nZV9pbmRleF07CisJY29uc3Qgc3RydWN0IGNvbWVkaV9rcmFuZ2UgKmtyYW5nZSA9ICZzLT5yYW5nZV90YWJsZS0+cmFuZ2VbcmFuZ2VfaW5kZXhdOwogCWN1cnJlbnRfdGltZSAlPSBkZXZwcml2LT51c2VjX3BlcmlvZDsKIAogCXZhbHVlID0gcy0+bWF4ZGF0YTsKQEAgLTQ3NiwxNCArNDc2LDE0IEBACiAJcmV0dXJuIG9mZnNldCArIHZhbHVlOwogfQogCi1zdGF0aWMgc2FtcGxfdCBmYWtlX2ZsYXRsaW5lKGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlX2luZGV4LAorc3RhdGljIHNob3J0IGZha2VfZmxhdGxpbmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJhbmdlX2luZGV4LAogCQkJICAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGltZSkKIHsKIAlyZXR1cm4gZGV2LT5yZWFkX3N1YmRldi0+bWF4ZGF0YSAvIDI7CiB9CiAKIC8qIGdlbmVyYXRlcyBhIGRpZmZlcmVudCB3YXZlZm9ybSBkZXBlbmRpbmcgb24gd2hhdCBjaGFubmVsIGlzIHJlYWQgKi8KLXN0YXRpYyBzYW1wbF90IGZha2Vfd2F2ZWZvcm0oY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKK3N0YXRpYyBzaG9ydCBmYWtlX3dhdmVmb3JtKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsLAogCQkJICAgICB1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGxvbmcgY3VycmVudF90aW1lKQogewogCWVudW0gewpAQCAtNTA0LDggKzUwNCw4IEBACiAJcmV0dXJuIGZha2VfZmxhdGxpbmUoZGV2LCByYW5nZSwgY3VycmVudF90aW1lKTsKIH0KIAotc3RhdGljIGludCB3YXZlZm9ybV9haV9pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJCSBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHdhdmVmb3JtX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQkgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGksIGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIApAQCAtNTE1LDggKzUxNSw4IEBACiAJcmV0dXJuIGluc24tPm47CiB9CiAKLXN0YXRpYyBpbnQgd2F2ZWZvcm1fYW9faW5zbl93cml0ZShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHdhdmVmb3JtX2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgaSwgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jb250ZWNfcGNpX2Rpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMTk0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYwpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9jb250ZWNfcGNpX2Rpby5jCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBjb250ZWNfcGNpX2RpbworRGVzY3JpcHRpb246IENvbnRlYyBQSU8xNjE2TCBkaWdpdGFsIEkvTyBib2FyZAorRGV2aWNlczogW0NvbnRlY10gUElPMTYxNkwgKGNvbnRlY19wY2lfZGlvKQorQXV0aG9yOiBTdGVmYW5vIFJpdm9pciA8cy5yaXZvaXJAZ3RzLml0PgorVXBkYXRlZDogV2VkLCAyNyBKdW4gMjAwNyAxMzowMDowNiArMDEwMAorU3RhdHVzOiB3b3JrcworCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgWzFdIC0gUENJIHNsb3Qgb2YgZGV2aWNlIChvcHRpb25hbCkKKyAgSWYgYnVzL3Nsb3QgaXMgbm90IHNwZWNpZmllZCwgdGhlIGZpcnN0IHN1cHBvcnRlZAorICBQQ0kgZGV2aWNlIGZvdW5kIHdpbGwgYmUgdXNlZC4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworZW51bSBjb250ZWNfbW9kZWwgeworCVBJTzE2MTZMID0gMCwKK307CisKK3N0cnVjdCBjb250ZWNfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IG1vZGVsOworCWludCBpbl9wb3J0czsKKwlpbnQgb3V0X3BvcnRzOworCWludCBpbl9vZmZzOworCWludCBvdXRfb2ZmczsKKwlpbnQgb3V0X2JvZmZzOworfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29udGVjX2JvYXJkIGNvbnRlY19ib2FyZHNbXSA9IHsKKwl7IlBJTzE2MTZMIiwgUElPMTYxNkwsIDE2LCAxNiwgMCwgMiwgMTB9LAorfTsKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BJTzE2MTZMIDB4ODE3Mgorc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGNvbnRlY19wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX0NPTlRFQywgUENJX0RFVklDRV9JRF9QSU8xNjE2TCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwgUElPMTYxNkx9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNvbnRlY19wY2lfdGFibGUpOworCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBjb250ZWNfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IGNvbnRlY19wcml2YXRlIHsKKwlpbnQgZGF0YTsKKworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgY29udGVjX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgY29udGVjX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGNvbnRlY19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9jb250ZWMgPSB7CisgICAgICBkcml2ZXJfbmFtZToiY29udGVjX3BjaV9kaW8iLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmNvbnRlY19hdHRhY2gsCisgICAgICBkZXRhY2g6Y29udGVjX2RldGFjaCwKK307CisKKy8qIENsYXNzaWMgZGlnaXRhbCBJTyAqLworc3RhdGljIGludCBjb250ZWNfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGNvbnRlY19kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworI2lmIDAKK3N0YXRpYyBpbnQgY29udGVjX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CisKK3N0YXRpYyBpbnQgY29udGVjX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCk7CisjZW5kaWYKKworc3RhdGljIGludCBjb250ZWNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwlwcmludGsoImNvbWVkaSVkOiBjb250ZWM6ICIsIGRldi0+bWlub3IpOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGNvbnRlY19wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMikgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAocGNpZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CisJCXBjaWRldiAhPSBOVUxMOworCQlwY2lkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwY2lkZXYpKSB7CisKKwkJaWYgKHBjaWRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQ09OVEVDICYmCisJCQlwY2lkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BJTzE2MTZMKSB7CisJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkvKiBDaGVjayBidXMgYW5kIHNsb3QuICovCisJCQkJaWYgKGl0LT5vcHRpb25zWzBdICE9IHBjaWRldi0+YnVzLT5udW1iZXIgfHwKKwkJCQkJaXQtPm9wdGlvbnNbMV0gIT0KKwkJCQkJUENJX1NMT1QocGNpZGV2LT5kZXZmbikpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKKwkJCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsICJjb250ZWNfcGNpX2RpbyIpKSB7CisJCQkJcHJpbnRrKCJlcnJvciBlbmFibGluZyBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMhXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWRldi0+aW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CisJCQlwcmludGsoIiBiYXNlIGFkZHIgJWx4ICIsIGRldi0+aW9iYXNlKTsKKworCQkJZGV2LT5ib2FyZF9wdHIgPSBjb250ZWNfYm9hcmRzICsgMDsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisKKwkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwkJCXMtPm5fY2hhbiA9IDE2OworCQkJcy0+bWF4ZGF0YSA9IDE7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQkJcy0+aW5zbl9iaXRzID0gY29udGVjX2RpX2luc25fYml0czsKKworCQkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJCQlzLT5uX2NoYW4gPSAxNjsKKwkJCXMtPm1heGRhdGEgPSAxOworCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJCXMtPmluc25fYml0cyA9IGNvbnRlY19kb19pbnNuX2JpdHM7CisKKwkJCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXByaW50aygiY2FyZCBub3QgcHJlc2VudCFcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgY29udGVjX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBjb250ZWM6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2cHJpdiAmJiBkZXZwcml2LT5wY2lfZGV2KSB7CisJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCX0KKworCXJldHVybiAwOworfQorCisjaWYgMAorc3RhdGljIGludCBjb250ZWNfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXByaW50aygiY29udGVjX2NtZHRlc3QgY2FsbGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb250ZWNfbnNfdG9fdGltZXIodW5zaWduZWQgaW50ICpucywgaW50IHJvdW5kKQoreworCXJldHVybiAqbnM7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBjb250ZWNfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCXByaW50aygiY29udGVjX2RvX2luc25fYml0cyBjYWxsZWRcbiIpOworCXByaW50aygiIGRhdGE6ICVkICVkXG4iLCBkYXRhWzBdLCBkYXRhWzFdKTsKKworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCQlydF9wcmludGsoIiAgb3V0OiAlZCBvbiAlbHhcbiIsIHMtPnN0YXRlLAorCQkJZGV2LT5pb2Jhc2UgKyB0aGlzYm9hcmQtPm91dF9vZmZzKTsKKwkJb3V0dyhzLT5zdGF0ZSwgZGV2LT5pb2Jhc2UgKyB0aGlzYm9hcmQtPm91dF9vZmZzKTsKKwl9CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgY29udGVjX2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlydF9wcmludGsoImNvbnRlY19kaV9pbnNuX2JpdHMgY2FsbGVkXG4iKTsKKwlydF9wcmludGsoIiBkYXRhOiAlZCAlZFxuIiwgZGF0YVswXSwgZGF0YVsxXSk7CisKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbncoZGV2LT5pb2Jhc2UgKyB0aGlzYm9hcmQtPmluX29mZnMpOworCisJcmV0dXJuIDI7Cit9CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2NvbnRlYywgY29udGVjX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFxYm9hcmQyMDAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFxYm9hcmQyMDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4NDQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXFib2FyZDIwMDAuYwpAQCAtMCwwICsxLDg3NyBAQAorLyoKKyAgIGNvbWVkaS9kcml2ZXJzL2RhcWJvYXJkMjAwMC5jCisgICBoYXJkd2FyZSBkcml2ZXIgZm9yIElPdGVjaCBEQVFib2FyZC8yMDAwCisKKyAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgIENvcHlyaWdodCAoQykgMTk5OSBBbmRlcnMgQmxvbWRlbGwgPGFuZGVycy5ibG9tZGVsbEBjb250cm9sLmx0aC5zZT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBkYXFib2FyZDIwMDAKK0Rlc2NyaXB0aW9uOiBJT1RlY2ggREFRQm9hcmQvMjAwMAorQXV0aG9yOiBBbmRlcnMgQmxvbWRlbGwgPGFuZGVycy5ibG9tZGVsbEBjb250cm9sLmx0aC5zZT4KK1N0YXR1czogd29ya3MKK1VwZGF0ZWQ6IE1vbiwgMTQgQXByIDIwMDggMTU6Mjg6NTIgKzAxMDAKK0RldmljZXM6IFtJT1RlY2hdIERBUUJvYXJkLzIwMDAgKGRhcWJvYXJkMjAwMCkKKworTXVjaCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGRyaXZlciB3YXMgZGV0ZXJtaW5lZCBmcm9tIHJlYWRpbmcKK3RoZSBzb3VyY2UgY29kZSBmb3IgdGhlIFdpbmRvd3MgZHJpdmVyLgorCitUaGUgRlBHQSBvbiB0aGUgYm9hcmQgcmVxdWlyZXMgaW5pdGlhbGl6YXRpb24gY29kZSwgd2hpY2ggY2FuCitiZSBsb2FkZWQgYnkgY29tZWRpX2NvbmZpZyB1c2luZyB0aGUgLWkKK29wdGlvbi4gIFRoZSBpbml0aWFsaXphdGlvbiBjb2RlIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuY29tZWRpLm9yZworaW4gdGhlIGNvbWVkaV9ub25mcmVlX2Zpcm13YXJlIHRhcmJhbGwuCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gUENJIGJ1cyBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorICBJZiBidXMvc2xvdCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZmlyc3Qgc3VwcG9ydGVkCisgIFBDSSBkZXZpY2UgZm91bmQgd2lsbCBiZSB1c2VkLgorKi8KKy8qCisgICBUaGlzIGNhcmQgd2FzIG9idmlvdXNseSBuZXZlciBpbnRlbmRlZCB0byBsZWF2ZSB0aGUgV2luZG93cyB3b3JsZCwKKyAgIHNpbmNlIGl0IGxhY2tlZCBhbGwga2luZCBvZiBoYXJkd2FyZSBkb2N1bWVudGF0aW9uIChleGNlcHQgZm9yIGNhYmxlCisgICBwaW5vdXRzLCBwbHVnIGFuZCBwcmF5IGhhcyBzb21ldGhpbmcgdG8gY2F0Y2ggdXAgd2l0aCB5ZXQpLgorCisgICBXaXRoIHNvbWUgaGVscCBmcm9tIG91ciBzd2VkaXNoIGRpc3RyaWJ1dG9yLCB3ZSBnb3QgdGhlIFdpbmRvd3Mgc291cmNlY29kZQorICAgZm9yIHRoZSBjYXJkLCBhbmQgaGVyZSBhcmUgdGhlIGZpbmRpbmdzIHNvIGZhci4KKworICAgMS4gQSBnb29kIGRvY3VtZW50IHRoYXQgZGVzY3JpYmVzIHRoZSBQQ0kgaW50ZXJmYWNlIGNoaXAgaXMgZm91bmQgYXQ6CisgICAgICBodHRwOi8vcGx4LnBseHRlY2guY29tL2Rvd25sb2FkLzkwODAvZGF0YWJvb2svOTA4MGRiLTEwNi5wZGYKKworICAgMi4gVGhlIGluaXRpYWxpemF0aW9uIGRvbmUgc28gZmFyIGlzOgorICAgICAgICBhLiBwcm9ncmFtIHRoZSBGUEdBICh3aW5kb3dzIGNvZGUgc2FucyBhIGxvdCBvZiBlcnJvciBtZXNzYWdlcykKKwliLgorCisgICAzLiBBbmFsb2cgb3V0IHNlZW1zIHRvIHdvcmsgT0sgd2l0aCBEQUMncyBkaXNhYmxlZCwgaWYgREFDJ3MgYXJlIGVuYWJsZWQsCisgICAgICB5b3UgaGF2ZSB0byBvdXRwdXQgdmFsdWVzIHRvIGFsbCBlbmFibGVkIERBQydzIHVudGlsIHJlc3VsdCBhcHBlYXJzLCBJCisgICAgICBndWVzcyB0aGF0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBwYWNlciBjbG9ja3MsIGJ1dCB0aGUgc291cmNlCisgICAgICBnaXZlcyBtZSBubyBjbHVlcy4gSSdsbCBrZWVwIGl0IHNpbXBsZSBzbyBmYXIuCisKKyAgIDQuIEFuYWxvZyBpbi4KKyAgICAgICAgRWFjaCBjaGFubmVsIGluIHRoZSBzY2FubGlzdCBzZWVtcyB0byBiZSBjb250cm9sbGVkIGJ5IGZvdXIKKwljb250cm9sIHdvcmRzOgorCisgICAgICAgIFdvcmQwOgorICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICEgfCB8IHwgISB8IHwgfCAhIHwgfCB8ICEgfCB8IHwgIQorICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgICAgICAgIFdvcmQxOgorICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICEgfCB8IHwgISB8IHwgfCAhIHwgfCB8ICEgfCB8IHwgIQorICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgIHwgICAgICAgICAgICAgfCAgICAgICB8IHwgfCB8IHwKKyAgICAgICAgICAgKy0tLS0tLSstLS0tLS0rICAgICAgIHwgfCB8IHwgKy0tIERpZ2l0YWwgaW5wdXQgKD8/KQorCQkgIHwJCSB8IHwgfCArLS0tLSAxMCB1cyBzZXR0bGluZyB0aW1lCisJCSAgfAkJIHwgfCArLS0tLS0tIFN1c3BlbmQgYWNxdWlzaXRpb24gKGxhc3QgdG8gc2NhbikKKwkJICB8CQkgfCArLS0tLS0tLS0gU2ltdWx0YW5lb3VzIHNhbXBsZSBhbmQgaG9sZAorCQkgIHwJCSArLS0tLS0tLS0tLSBTaWduZWQgZGF0YSBmb3JtYXQKKwkJICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb3JyZWN0aW9uIG9mZnNldCBsb3cKKworICAgICAgICBXb3JkMjoKKyAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAhIHwgfCB8ICEgfCB8IHwgISB8IHwgfCAhIHwgfCB8ICEKKyAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgfCAgICAgfCB8ICAgICB8IHwgfCB8IHwgfCAgICAgfAorICAgICAgICAgICArLS0tLS0rICstLSstLSsgKysrICsrKyArLS0rLS0rCisgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgfCAgIHwgICAgICstLS0tLSBFeHBhbnNpb24gY2hhbm5lbAorCSAgICAgIHwgICAgICAgfCAgICAgfCAgICstLS0tLS0tLS0tLSBFeHBhbnNpb24gZ2FpbgorICAgICAgICAgICAgICB8ICAgICAgIHwgICAgICstLS0tLS0tLS0tLS0tLS0gQ2hhbm5lbCAobG93KQorCSAgICAgIHwgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb3JyZWN0aW9uIG9mZnNldCBoaWdoCisJICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvcnJlY3Rpb24gZ2FpbiBsb3cKKyAgICAgICAgV29yZDM6CisgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgISB8IHwgfCAhIHwgfCB8ICEgfCB8IHwgISB8IHwgfCAhCisgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgIHwgICAgICAgICAgICAgfCB8IHwgfCAgIHwgfCB8IHwKKyAgICAgICAgICAgKy0tLS0tLSstLS0tLS0rIHwgfCArLSstKyB8IHwgKy0tIExvdyBiYW5rIGVuYWJsZQorICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCB8ICAgfCAgIHwgKy0tLS0gSGlnaCBiYW5rIGVuYWJsZQorICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCB8ICAgfCAgICstLS0tLS0gSGkvbG93IHNlbGVjdAorCQkgIHwgICAgCSAgIHwgfCAgICstLS0tLS0tLS0tIEdhaW4gKDEsPywyLDQsOCwxNiwzMiw2NCkKKwkJICB8ICAgIAkgICB8ICstLS0tLS0tLS0tLS0tLSBkaWZmZXJlbnRpYWwvc2luZ2xlIGVuZGVkCisJCSAgfCAgICAJICAgKy0tLS0tLS0tLS0tLS0tLS0gVW5pcG9sYXIKKwkJICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb3JyZWN0aW9uIGdhaW4gaGlnaAorCisKKworICAgOTk5LiBUaGUgY2FyZCBzZWVtcyB0byBoYXZlIGFuIGluY3JlZGlibGUgYW1vdW50IG9mIGNhcGFiaWxpdGllcywgYnV0CisgICAgICAgIHRyeWluZyB0byByZXZlcnNlIGVuZ2luZWVyIHRoZW0gZnJvbSB0aGUgV2luZG93cyBzb3VyY2UgaXMgYmV5b25kIG15CisJcGF0aWVuY2UuCisKKworICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJjb21lZGlfcGNpLmgiCisjaW5jbHVkZSAiODI1NS5oIgorCisjZGVmaW5lIERBUUJPQVJEMjAwMF9TVUJTWVNURU1fSURTMiAJMHgwMDAyMTYxNgkvKiBEYXFib2FyZC8yMDAwIC0gMiBEYWNzICovCisjZGVmaW5lIERBUUJPQVJEMjAwMF9TVUJTWVNURU1fSURTNCAJMHgwMDA0MTYxNgkvKiBEYXFib2FyZC8yMDAwIC0gNCBEYWNzICovCisKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RBUV9TSVpFIAkJMHgxMDAyCisjZGVmaW5lIERBUUJPQVJEMjAwMF9QTFhfU0laRSAJCTB4MTAwCisKKy8vIEluaXRpYWxpemF0aW9uIGJpdHMgZm9yIHRoZSBTZXJpYWwgRUVQUk9NIENvbnRyb2wgUmVnaXN0ZXIKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1NFQ1JQcm9nUGluSGkgICAgICAweDgwMDE3NjdlCisjZGVmaW5lIERBUUJPQVJEMjAwMF9TRUNSUHJvZ1BpbkxvICAgICAgMHg4MDAwNzY3ZQorI2RlZmluZSBEQVFCT0FSRDIwMDBfU0VDUkxvY2FsQnVzSGkgICAgIDB4YzAwMDc2N2UKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1NFQ1JMb2NhbEJ1c0xvICAgICAweDgwMDA3NjdlCisjZGVmaW5lIERBUUJPQVJEMjAwMF9TRUNSUmVsb2FkSGkgICAgICAgMHhhMDAwNzY3ZQorI2RlZmluZSBEQVFCT0FSRDIwMDBfU0VDUlJlbG9hZExvICAgICAgIDB4ODAwMDc2N2UKKworLy8gU0VDUiBzdGF0dXMgYml0cworI2RlZmluZSBEQVFCT0FSRDIwMDBfRUVQUk9NX1BSRVNFTlQgICAgIDB4MTAwMDAwMDAKKworLy8gQ1BMRCBzdGF0dXMgYml0cworI2RlZmluZSBEQVFCT0FSRDIwMDBfQ1BMRF9JTklUIAkJMHgwMDAyCisjZGVmaW5lIERBUUJPQVJEMjAwMF9DUExEX0RPTkUgCQkweDAwMDQKKworLy8gQXZhaWxhYmxlIHJhbmdlcworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhcWJvYXJkMjAwMF9haSA9IHsgMTMsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KSwKKwkJCVJBTkdFKC0wLjYyNSwgMC42MjUpLAorCQkJUkFOR0UoLTAuMzEyNSwgMC4zMTI1KSwKKwkJCVJBTkdFKC0wLjE1NiwgMC4xNTYpLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAyLjUpLAorCQkJUkFOR0UoMCwgMS4yNSksCisJCQlSQU5HRSgwLCAwLjYyNSksCisJCQlSQU5HRSgwLCAwLjMxMjUpCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhcWJvYXJkMjAwMF9hbyA9IHsgMSwgeworCQkJUkFOR0UoLTEwLCAxMCkKKwl9Cit9OworCitzdHJ1Y3QgZGFxYm9hcmQyMDAwX2h3IHsKKwl2b2xhdGlsZSB1MTYgYWNxQ29udHJvbDsJLy8gMHgwMAorCXZvbGF0aWxlIHUxNiBhY3FTY2FuTGlzdEZJRk87CS8vIDB4MDIKKwl2b2xhdGlsZSB1MzIgYWNxUGFjZXJDbG9ja0RpdkxvdzsJLy8gMHgwNAorCisJdm9sYXRpbGUgdTE2IGFjcVNjYW5Db3VudGVyOwkvLyAweDA4CisJdm9sYXRpbGUgdTE2IGFjcVBhY2VyQ2xvY2tEaXZIaWdoOwkvLyAweDBhCisJdm9sYXRpbGUgdTE2IGFjcVRyaWdnZXJDb3VudDsJLy8gMHgwYworCXZvbGF0aWxlIHUxNiBmaWxsMjsJLy8gMHgwZQorCXZvbGF0aWxlIHUxNiBhY3FSZXN1bHRzRklGTzsJLy8gMHgxMAorCXZvbGF0aWxlIHUxNiBmaWxsMzsJLy8gMHgxMgorCXZvbGF0aWxlIHUxNiBhY3FSZXN1bHRzU2hhZG93OwkvLyAweDE0CisJdm9sYXRpbGUgdTE2IGZpbGw0OwkvLyAweDE2CisJdm9sYXRpbGUgdTE2IGFjcUFkY1Jlc3VsdDsJLy8gMHgxOAorCXZvbGF0aWxlIHUxNiBmaWxsNTsJLy8gMHgxYQorCXZvbGF0aWxlIHUxNiBkYWNTY2FuQ291bnRlcjsJLy8gMHgxYworCXZvbGF0aWxlIHUxNiBmaWxsNjsJLy8gMHgxZQorCisJdm9sYXRpbGUgdTE2IGRhY0NvbnRyb2w7CS8vIDB4MjAKKwl2b2xhdGlsZSB1MTYgZmlsbDc7CS8vIDB4MjIKKwl2b2xhdGlsZSBzMTYgZGFjRklGTzsJLy8gMHgyNAorCXZvbGF0aWxlIHUxNiBmaWxsOFsyXTsJLy8gMHgyNgorCXZvbGF0aWxlIHUxNiBkYWNQYWNlckNsb2NrRGl2OwkvLyAweDJhCisJdm9sYXRpbGUgdTE2IHJlZkRhY3M7CS8vIDB4MmMKKwl2b2xhdGlsZSB1MTYgZmlsbDk7CS8vIDB4MmUKKworCXZvbGF0aWxlIHUxNiBkaW9Db250cm9sOwkvLyAweDMwCisJdm9sYXRpbGUgczE2IGRpb1AzaHNpb0RhdGE7CS8vIDB4MzIKKwl2b2xhdGlsZSB1MTYgZGlvUDNDb250cm9sOwkvLyAweDM0CisJdm9sYXRpbGUgdTE2IGNhbEVlcHJvbUNvbnRyb2w7CS8vIDB4MzYKKwl2b2xhdGlsZSBzMTYgZGFjU2V0dGluZ1s0XTsJLy8gMHgzOAorCXZvbGF0aWxlIHMxNiBkaW9QMkV4cGFuc2lvbklPOEJpdFszMl07CS8vIDB4NDAKKworCXZvbGF0aWxlIHUxNiBjdHJUbXJDb250cm9sOwkvLyAweDgwCisJdm9sYXRpbGUgdTE2IGZpbGwxMFszXTsJLy8gMHg4MgorCXZvbGF0aWxlIHMxNiBjdHJJbnB1dFs0XTsJLy8gMHg4OAorCXZvbGF0aWxlIHUxNiBmaWxsMTFbOF07CS8vIDB4OTAKKwl2b2xhdGlsZSB1MTYgdGltZXJEaXZpc29yWzJdOwkvLyAweGEwCisJdm9sYXRpbGUgdTE2IGZpbGwxMls2XTsJLy8gMHhhNAorCisJdm9sYXRpbGUgdTE2IGRtYUNvbnRyb2w7CS8vIDB4YjAKKwl2b2xhdGlsZSB1MTYgdHJpZ0NvbnRyb2w7CS8vIDB4YjIKKwl2b2xhdGlsZSB1MTYgZmlsbDEzWzJdOwkvLyAweGI0CisJdm9sYXRpbGUgdTE2IGNhbEVlcHJvbTsJLy8gMHhiOAorCXZvbGF0aWxlIHUxNiBhY3FEaWdpdGFsTWFyazsJLy8gMHhiYQorCXZvbGF0aWxlIHUxNiB0cmlnRGFjczsJLy8gMHhiYworCXZvbGF0aWxlIHUxNiBmaWxsMTQ7CS8vIDB4YmUKKwl2b2xhdGlsZSBzMTYgZGlvUDJFeHBhbnNpb25JTzE2Qml0WzMyXTsJLy8gMHhjMAorfTsKKworLyogU2NhbiBTZXF1ZW5jZXIgcHJvZ3JhbW1pbmcgKi8KKyNkZWZpbmUgREFRQk9BUkQyMDAwX1NlcVN0YXJ0U2Nhbkxpc3QgICAgICAgICAgICAweDAwMTEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1NlcVN0b3BTY2FuTGlzdCAgICAgICAgICAgICAweDAwMTAKKworLy8gUHJlcGFyZSBmb3IgYWNxdWlzaXRpb24KKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcVJlc2V0U2Nhbkxpc3RGaWZvICAgICAgICAweDAwMDQKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcVJlc2V0UmVzdWx0c0ZpZm8gICAgICAgICAweDAwMDIKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0FjcVJlc2V0Q29uZmlnUGlwZSAgICAgICAgICAweDAwMDEKKworLy8gQWNxdXNpdGlvbiBzdGF0dXMgYml0cworI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxUmVzdWx0c0ZJRk9Nb3JlMVNhbXBsZSAgIDB4MDAwMQorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxUmVzdWx0c0ZJRk9IYXNWYWxpZERhdGEgIDB4MDAwMgorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxUmVzdWx0c0ZJRk9PdmVycnVuICAgICAgIDB4MDAwNAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxTG9naWNTY2FubmluZyAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxQ29uZmlnUGlwZUZ1bGwgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxU2Nhbkxpc3RGSUZPRW1wdHkgICAgICAgIDB4MDAyMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxQWRjTm90UmVhZHkgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQXJiaXRyYXRpb25GYWlsdXJlICAgICAgICAgIDB4MDA4MAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxUGFjZXJPdmVycnVuICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfRGFjUGFjZXJPdmVycnVuICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBEQVFCT0FSRDIwMDBfQWNxSGFyZHdhcmVFcnJvciAgICAgICAgICAgIDB4MDFjMAorCisvLyBTY2FuIFNlcXVlbmNlciBwcm9ncmFtbWluZworI2RlZmluZSBEQVFCT0FSRDIwMDBfU2VxU3RhcnRTY2FuTGlzdCAgICAgICAgICAgIDB4MDAxMQorI2RlZmluZSBEQVFCT0FSRDIwMDBfU2VxU3RvcFNjYW5MaXN0ICAgICAgICAgICAgIDB4MDAxMAorCisvKiBQYWNlciBDbG9jayBDb250cm9sICovCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckludGVybmFsICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckV4dGVybmFsICAgICAgICAgICAgMHgwMDMyCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckVuYWJsZSAgICAgICAgICAgICAgMHgwMDMxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckVuYWJsZURhY1BhY2VyICAgICAgMHgwMDM0CisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckRpc2FibGUgICAgICAgICAgICAgMHgwMDMwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlck5vcm1hbE1vZGUgICAgICAgICAgMHgwMDYwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckNvbXBhdGliaWxpdHlNb2RlICAgMHgwMDYxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckludGVybmFsT3V0RW5hYmxlICAgMHgwMDA4CisjZGVmaW5lIERBUUJPQVJEMjAwMF9BZGNQYWNlckV4dGVybmFsUmlzaW5nICAgICAgMHgwMTAwCisKKy8vIERBQyBzdGF0dXMKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY0Z1bGwgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1JlZkJ1c3kgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgREFRQk9BUkQyMDAwX1RyZ0J1c3kgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0NhbEJ1c3kgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzBCdXN5ICAgICAgICAgICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzFCdXN5ICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzJCdXN5ICAgICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzNCdXN5ICAgICAgICAgICAgICAgICAgICAweDAwODAKKworLy8gREFDIGNvbnRyb2wKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzBFbmFibGUgICAgICAgICAgICAgICAgICAweDAwMjEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzFFbmFibGUgICAgICAgICAgICAgICAgICAweDAwMzEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzJFbmFibGUgICAgICAgICAgICAgICAgICAweDAwNDEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzNFbmFibGUgICAgICAgICAgICAgICAgICAweDAwNTEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY0VuYWJsZUJpdCAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzBEaXNhYmxlICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzFEaXNhYmxlICAgICAgICAgICAgICAgICAweDAwMzAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzJEaXNhYmxlICAgICAgICAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhYzNEaXNhYmxlICAgICAgICAgICAgICAgICAweDAwNTAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY1Jlc2V0RmlmbyAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY1BhdHRlcm5EaXNhYmxlICAgICAgICAgICAweDAwNjAKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY1BhdHRlcm5FbmFibGUgICAgICAgICAgICAweDAwNjEKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY1NlbGVjdFNpZ25lZERhdGEgICAgICAgICAweDAwMDIKKyNkZWZpbmUgREFRQk9BUkQyMDAwX0RhY1NlbGVjdFVuc2lnbmVkRGF0YSAgICAgICAweDAwMDAKKworLyogVHJpZ2dlciBDb250cm9sICovCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnQW5hbG9nICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnVFRMICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnVHJhbnNIaUxvICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnVHJhbnNMb0hpICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnQWJvdmUgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnQmVsb3cgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnTGV2ZWxTZW5zZSAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnRWRnZVNlbnNlICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnRW5hYmxlICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIERBUUJPQVJEMjAwMF9UcmlnRGlzYWJsZSAgICAgICAgICAgICAgICAgMHgwMDAwCisKKy8vIFJlZmVyZW5jZSBEYWMgU2VsZWN0aW9uCisjZGVmaW5lIERBUUJPQVJEMjAwMF9Qb3NSZWZEYWNTZWxlY3QgICAgICAgICAgICAgMHgwMTAwCisjZGVmaW5lIERBUUJPQVJEMjAwMF9OZWdSZWZEYWNTZWxlY3QgICAgICAgICAgICAgMHgwMDAwCisKK3N0YXRpYyBpbnQgZGFxYm9hcmQyMDAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRhcWJvYXJkMjAwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RhcWJvYXJkMjAwMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkYXFib2FyZDIwMDAiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRhcWJvYXJkMjAwMF9hdHRhY2gsCisgICAgICBkZXRhY2g6ZGFxYm9hcmQyMDAwX2RldGFjaCwKK307CisKK3N0cnVjdCBkYXEyMDBfYm9hcmR0eXBlIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBpZDsKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGRhcTIwMF9ib2FyZHR5cGUgYm9hcmR0eXBlc1tdID0geworCXsiaWRzMiIsIERBUUJPQVJEMjAwMF9TVUJTWVNURU1fSURTMn0sCisJeyJpZHM0IiwgREFRQk9BUkQyMDAwX1NVQlNZU1RFTV9JRFM0fSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBkYXEyMDBfYm9hcmR0eXBlKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBkYXEyMDBfYm9hcmR0eXBlICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShkYXFib2FyZDIwMDBfcGNpX3RhYmxlKSA9IHsKKwl7MHgxNjE2LCAweDA0MDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGRhcWJvYXJkMjAwMF9wY2lfdGFibGUpOworCitzdHJ1Y3QgZGFxYm9hcmQyMDAwX3ByaXZhdGUgeworCWVudW0geworCQljYXJkX2RhcWJvYXJkXzIwMDAKKwl9IGNhcmQ7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJdm9pZCAqZGFxOworCXZvaWQgKnBseDsKKwlpbnQgZ290X3JlZ2lvbnM7CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhcWJvYXJkMjAwMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgdm9pZCB3cml0ZUFjcVNjYW5MaXN0RW50cnkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHUxNiBlbnRyeSkKK3sKKwlzdHJ1Y3QgZGFxYm9hcmQyMDAwX2h3ICpmcGdhID0gZGV2cHJpdi0+ZGFxOworCisvLyAgY29tZWRpX3VkZWxheSg0KTsKKwlmcGdhLT5hY3FTY2FuTGlzdEZJRk8gPSBlbnRyeSAmIDB4MDBmZjsKKy8vICBjb21lZGlfdWRlbGF5KDQpOworCWZwZ2EtPmFjcVNjYW5MaXN0RklGTyA9IChlbnRyeSA+PiA4KSAmIDB4MDBmZjsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfc2FtcGxpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGFuLCBpbnQgZ2FpbikKK3sKKwl1MTYgd29yZDAsIHdvcmQxLCB3b3JkMiwgd29yZDM7CisKKwkvKiBDaGFubmVsIDAtNyBkaWZmLCBjaGFubmVsIDgtMjMgc2luZ2xlIGVuZGVkICovCisJd29yZDAgPSAwOworCXdvcmQxID0gMHgwMDA0OwkJLyogTGFzdCBzY2FuICovCisJd29yZDIgPSAoY2hhbiA8PCA2KSAmIDB4MDBjMDsKKwlzd2l0Y2ggKGNoYW4gLyA0KSB7CisJY2FzZSAwOgorCQl3b3JkMyA9IDB4MDAwMTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl3b3JkMyA9IDB4MDAwMjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl3b3JkMyA9IDB4MDAwNTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQl3b3JkMyA9IDB4MDAwNjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQl3b3JkMyA9IDB4MDA0MTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQl3b3JkMyA9IDB4MDA0MjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd29yZDMgPSAwOworCQlicmVhazsKKwl9CisvKgorICBkZXYtPmVlcHJvbS5jb3JyZWN0aW9uREFDU0VbaV1bal1ba10ub2Zmc2V0ID0gMHg4MDA7CisgIGRldi0+ZWVwcm9tLmNvcnJlY3Rpb25EQUNTRVtpXVtqXVtrXS5nYWluID0gMHhjMDA7CisqLworCS8qIFRoZXNlIHNob3VsZCBiZSByZWFkIGZyb20gRUVQUk9NICovCisJd29yZDIgfD0gMHgwODAwOworCXdvcmQzIHw9IDB4YzAwMDsKKy8qICBwcmludGsoIiVkICU0LjR4ICU0LjR4ICU0LjR4ICU0LjR4XG4iLCBjaGFuLCB3b3JkMCwgd29yZDEsIHdvcmQyLCB3b3JkMyk7Ki8KKwl3cml0ZUFjcVNjYW5MaXN0RW50cnkoZGV2LCB3b3JkMCk7CisJd3JpdGVBY3FTY2FuTGlzdEVudHJ5KGRldiwgd29yZDEpOworCXdyaXRlQWNxU2Nhbkxpc3RFbnRyeShkZXYsIHdvcmQyKTsKKwl3cml0ZUFjcVNjYW5MaXN0RW50cnkoZGV2LCB3b3JkMyk7Cit9CisKK3N0YXRpYyBpbnQgZGFxYm9hcmQyMDAwX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJc3RydWN0IGRhcWJvYXJkMjAwMF9odyAqZnBnYSA9IGRldnByaXYtPmRhcTsKKwlpbnQgZ2FpbiwgY2hhbiwgdGltZW91dDsKKworCWZwZ2EtPmFjcUNvbnRyb2wgPQorCQlEQVFCT0FSRDIwMDBfQWNxUmVzZXRTY2FuTGlzdEZpZm8gfAorCQlEQVFCT0FSRDIwMDBfQWNxUmVzZXRSZXN1bHRzRmlmbyB8CisJCURBUUJPQVJEMjAwMF9BY3FSZXNldENvbmZpZ1BpcGU7CisKKwkvKiBJZiBwYWNlciBjbG9jayBpcyBub3Qgc2V0IHRvIHNvbWUgaGlnaCB2YWx1ZSAoPiAxMCB1cyksIHdlCisJICAgcmlzayBtdWx0aXBsZSBzYW1wbGVzIHRvIGJlIHB1dCBpbnRvIHRoZSByZXN1bHQgRklGTy4gKi8KKwlmcGdhLT5hY3FQYWNlckNsb2NrRGl2TG93ID0gMTAwMDAwMDsJLyogMSBzZWNvbmQsIHNob3VsZCBiZSBsb25nIGVub3VnaCAqLworCWZwZ2EtPmFjcVBhY2VyQ2xvY2tEaXZIaWdoID0gMDsKKworCWdhaW4gPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLyogVGhpcyBkb2Vzbid0IGxvb2sgZWZmaWNpZW50LiAgSSBkZWNpZGVkIHRvIHRha2UgdGhlIGNvbnNlcnZhdGl2ZQorCSAqIGFwcHJvYWNoIHdoZW4gSSBkaWQgdGhlIGluc24gY29udmVyc2lvbi4gIFBlcmhhcHMgaXQgd291bGQgYmUKKwkgKiBiZXR0ZXIgdG8gaGF2ZSBicm9rZW4gaXQgY29tcGxldGVseSwgdGhlbiBzb21lb25lIHdvdWxkIGhhdmUgYmVlbgorCSAqIGZvcmNlZCB0byBmaXggaXQuICAtLWRzICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlzZXR1cF9zYW1wbGluZyhkZXYsIGNoYW4sIGdhaW4pOworCQkvKiBFbmFibGUgcmVhZGluZyBmcm9tIHRoZSBzY2FubGlzdCBGSUZPICovCisJCWZwZ2EtPmFjcUNvbnRyb2wgPSBEQVFCT0FSRDIwMDBfU2VxU3RhcnRTY2FuTGlzdDsKKwkJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDIwOyB0aW1lb3V0KyspIHsKKwkJCWlmIChmcGdhLT5hY3FDb250cm9sICYgREFRQk9BUkQyMDAwX0FjcUNvbmZpZ1BpcGVGdWxsKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvL2NvbWVkaV91ZGVsYXkoMik7CisJCX0KKwkJZnBnYS0+YWNxQ29udHJvbCA9IERBUUJPQVJEMjAwMF9BZGNQYWNlckVuYWJsZTsKKwkJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDIwOyB0aW1lb3V0KyspIHsKKwkJCWlmIChmcGdhLT5hY3FDb250cm9sICYgREFRQk9BUkQyMDAwX0FjcUxvZ2ljU2Nhbm5pbmcpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8vY29tZWRpX3VkZWxheSgyKTsKKwkJfQorCQlmb3IgKHRpbWVvdXQgPSAwOyB0aW1lb3V0IDwgMjA7IHRpbWVvdXQrKykgeworCQkJaWYgKGZwZ2EtPgorCQkJCWFjcUNvbnRyb2wgJgorCQkJCURBUUJPQVJEMjAwMF9BY3FSZXN1bHRzRklGT0hhc1ZhbGlkRGF0YSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJLy9jb21lZGlfdWRlbGF5KDIpOworCQl9CisJCWRhdGFbaV0gPSBmcGdhLT5hY3FSZXN1bHRzRklGTzsKKwkJZnBnYS0+YWNxQ29udHJvbCA9IERBUUJPQVJEMjAwMF9BZGNQYWNlckRpc2FibGU7CisJCWZwZ2EtPmFjcUNvbnRyb2wgPSBEQVFCT0FSRDIwMDBfU2VxU3RvcFNjYW5MaXN0OworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGRhcWJvYXJkMjAwMF9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkYXFib2FyZDIwMDBfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlzdHJ1Y3QgZGFxYm9hcmQyMDAwX2h3ICpmcGdhID0gZGV2cHJpdi0+ZGFxOworCWludCB0aW1lb3V0OworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkvKgorCQkgKiBPSywgc2luY2UgaXQgd29ya3MgT0sgd2l0aG91dCBlbmFibGluZyB0aGUgREFDJ3MsIGxldCdzIGtlZXAKKwkJICogaXQgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLi4uCisJCSAqLworCQkvL2ZwZ2EtPmRhY0NvbnRyb2wgPSAoY2hhbiArIDIpICogMHgwMDEwIHwgMHgwMDAxOyBjb21lZGlfdWRlbGF5KDEwMDApOworCQlmcGdhLT5kYWNTZXR0aW5nW2NoYW5dID0gZGF0YVtpXTsKKwkJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDIwOyB0aW1lb3V0KyspIHsKKwkJCWlmICgoZnBnYS0+ZGFjQ29udHJvbCAmICgoY2hhbiArIDEpICogMHgwMDEwKSkgPT0gMCkgeworCQkJCWJyZWFrOworCQkJfQorCQkJLy9jb21lZGlfdWRlbGF5KDIpOworCQl9CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwkJLyoKKwkJICogU2luY2Ugd2UgbmV2ZXIgZW5hYmxlZCB0aGUgREFDJ3MsIHdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBpdC4uLgorCQkgKiBmcGdhLT5kYWNDb250cm9sID0gKGNoYW4gKyAyKSAqIDB4MDAxMCB8IDB4MDAwMDsgY29tZWRpX3VkZWxheSgxMDAwKTsKKwkJICovCisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkIGRhcWJvYXJkMjAwMF9yZXNldExvY2FsQnVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiZGFxYm9hcmQyMDAwX3Jlc2V0TG9jYWxCdXNcbiIpOworCXdyaXRlbChEQVFCT0FSRDIwMDBfU0VDUkxvY2FsQnVzSGksIGRldnByaXYtPnBseCArIDB4NmMpOworCWNvbWVkaV91ZGVsYXkoMTAwMDApOworCXdyaXRlbChEQVFCT0FSRDIwMDBfU0VDUkxvY2FsQnVzTG8sIGRldnByaXYtPnBseCArIDB4NmMpOworCWNvbWVkaV91ZGVsYXkoMTAwMDApOworfQorCitzdGF0aWMgdm9pZCBkYXFib2FyZDIwMDBfcmVsb2FkUExYKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiZGFxYm9hcmQyMDAwX3JlbG9hZFBMWFxuIik7CisJd3JpdGVsKERBUUJPQVJEMjAwMF9TRUNSUmVsb2FkTG8sIGRldnByaXYtPnBseCArIDB4NmMpOworCWNvbWVkaV91ZGVsYXkoMTAwMDApOworCXdyaXRlbChEQVFCT0FSRDIwMDBfU0VDUlJlbG9hZEhpLCBkZXZwcml2LT5wbHggKyAweDZjKTsKKwljb21lZGlfdWRlbGF5KDEwMDAwKTsKKwl3cml0ZWwoREFRQk9BUkQyMDAwX1NFQ1JSZWxvYWRMbywgZGV2cHJpdi0+cGx4ICsgMHg2Yyk7CisJY29tZWRpX3VkZWxheSgxMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRhcWJvYXJkMjAwMF9wdWxzZVByb2dQaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJkYXFib2FyZDIwMDBfcHVsc2VQcm9nUGluIDFcbiIpOworCXdyaXRlbChEQVFCT0FSRDIwMDBfU0VDUlByb2dQaW5IaSwgZGV2cHJpdi0+cGx4ICsgMHg2Yyk7CisJY29tZWRpX3VkZWxheSgxMDAwMCk7CisJd3JpdGVsKERBUUJPQVJEMjAwMF9TRUNSUHJvZ1BpbkxvLCBkZXZwcml2LT5wbHggKyAweDZjKTsKKwljb21lZGlfdWRlbGF5KDEwMDAwKTsJLyogTm90IGluIHRoZSBvcmlnaW5hbCBjb2RlLCBidXQgSSBsaWtlIHN5bW1ldHJ5Li4uICovCit9CisKK3N0YXRpYyBpbnQgZGFxYm9hcmQyMDAwX3BvbGxDUExEKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbWFzaykKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgaTsKKwlpbnQgY3BsZDsKKworCS8qIHRpbWVvdXQgYWZ0ZXIgNTAgdHJpZXMgLT4gNW1zICovCisJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKKwkJY3BsZCA9IHJlYWR3KGRldnByaXYtPmRhcSArIDB4MTAwMCk7CisJCWlmICgoY3BsZCAmIG1hc2spID09IG1hc2spIHsKKwkJCXJlc3VsdCA9IDE7CisJCQlicmVhazsKKwkJfQorCQljb21lZGlfdWRlbGF5KDEwMCk7CisJfQorCWNvbWVkaV91ZGVsYXkoNSk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBkYXFib2FyZDIwMDBfd3JpdGVDUExEKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgZGF0YSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCWNvbWVkaV91ZGVsYXkoMTApOworCXdyaXRldyhkYXRhLCBkZXZwcml2LT5kYXEgKyAweDEwMDApOworCWlmICgocmVhZHcoZGV2cHJpdi0+ZGFxICsgMHgxMDAwKSAmIERBUUJPQVJEMjAwMF9DUExEX0lOSVQpID09CisJCURBUUJPQVJEMjAwMF9DUExEX0lOSVQpIHsKKwkJcmVzdWx0ID0gMTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBpbml0aWFsaXplX2RhcWJvYXJkMjAwMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBjaGFyICpjcGxkX2FycmF5LCBpbnQgbGVuKQoreworCWludCByZXN1bHQgPSAtRUlPOworCS8qIFJlYWQgdGhlIHNlcmlhbCBFRVBST00gY29udHJvbCByZWdpc3RlciAqLworCWludCBzZWNyOworCWludCByZXRyeTsKKwlpbnQgaTsKKworCS8qIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc2VyaWFsIGVlcHJvbSBpcyBwcmVzZW50IG9uIHRoZSBib2FyZCAqLworCXNlY3IgPSByZWFkbChkZXZwcml2LT5wbHggKyAweDZjKTsKKwlpZiAoIShzZWNyICYgREFRQk9BUkQyMDAwX0VFUFJPTV9QUkVTRU5UKSkgeworI2lmZGVmIERFQlVHX0VFUFJPTQorCQlwcmludGsoIm5vIHNlcmlhbCBlZXByb21cbiIpOworI2VuZGlmCisJCXJldHVybiAtRUlPOworCX0KKworCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDM7IHJldHJ5KyspIHsKKyNpZmRlZiBERUJVR19FRVBST00KKwkJcHJpbnRrKCJQcm9ncmFtbWluZyBFRVBST00gdHJ5ICV4XG4iLCByZXRyeSk7CisjZW5kaWYKKworCQlkYXFib2FyZDIwMDBfcmVzZXRMb2NhbEJ1cyhkZXYpOworCQlkYXFib2FyZDIwMDBfcmVsb2FkUExYKGRldik7CisJCWRhcWJvYXJkMjAwMF9wdWxzZVByb2dQaW4oZGV2KTsKKwkJaWYgKGRhcWJvYXJkMjAwMF9wb2xsQ1BMRChkZXYsIERBUUJPQVJEMjAwMF9DUExEX0lOSVQpKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCQlpZiAoY3BsZF9hcnJheVtpXSA9PSAweGZmCisJCQkJCSYmIGNwbGRfYXJyYXlbaSArIDFdID09IDB4MjApIHsKKyNpZmRlZiBERUJVR19FRVBST00KKwkJCQkJcHJpbnRrKCJQcmVhbWJsZSBmb3VuZCBhdCAlZFxuIiwgaSk7CisjZW5kaWYKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJZm9yICg7IGkgPCBsZW47IGkgKz0gMikgeworCQkJCWludCBkYXRhID0KKwkJCQkJKGNwbGRfYXJyYXlbaV0gPDwgOCkgKyBjcGxkX2FycmF5W2kgKworCQkJCQkxXTsKKwkJCQlpZiAoIWRhcWJvYXJkMjAwMF93cml0ZUNQTEQoZGV2LCBkYXRhKSkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA+PSBsZW4pIHsKKyNpZmRlZiBERUJVR19FRVBST00KKwkJCQlwcmludGsoIlByb2dyYW1tZWRcbiIpOworI2VuZGlmCisJCQkJZGFxYm9hcmQyMDAwX3Jlc2V0TG9jYWxCdXMoZGV2KTsKKwkJCQlkYXFib2FyZDIwMDBfcmVsb2FkUExYKGRldik7CisJCQkJcmVzdWx0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBkYXFib2FyZDIwMDBfYWRjU3RvcERtYVRyYW5zZmVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworLyogIHByaW50aygiSW1wbGVtZW50OiBkYXFib2FyZDIwMDBfYWRjU3RvcERtYVRyYW5zZmVyXG4iKTsqLworfQorCitzdGF0aWMgdm9pZCBkYXFib2FyZDIwMDBfYWRjRGlzYXJtKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBkYXFib2FyZDIwMDBfaHcgKmZwZ2EgPSBkZXZwcml2LT5kYXE7CisKKwkvKiBEaXNhYmxlIGhhcmR3YXJlIHRyaWdnZXJzICovCisJY29tZWRpX3VkZWxheSgyKTsKKwlmcGdhLT50cmlnQ29udHJvbCA9IERBUUJPQVJEMjAwMF9UcmlnQW5hbG9nIHwgREFRQk9BUkQyMDAwX1RyaWdEaXNhYmxlOworCWNvbWVkaV91ZGVsYXkoMik7CisJZnBnYS0+dHJpZ0NvbnRyb2wgPSBEQVFCT0FSRDIwMDBfVHJpZ1RUTCB8IERBUUJPQVJEMjAwMF9UcmlnRGlzYWJsZTsKKworCS8qIFN0b3AgdGhlIHNjYW4gbGlzdCBGSUZPIGZyb20gbG9hZGluZyB0aGUgY29uZmlndXJhdGlvbiBwaXBlICovCisJY29tZWRpX3VkZWxheSgyKTsKKwlmcGdhLT5hY3FDb250cm9sID0gREFRQk9BUkQyMDAwX1NlcVN0b3BTY2FuTGlzdDsKKworCS8qIFN0b3AgdGhlIHBhY2VyIGNsb2NrICovCisJY29tZWRpX3VkZWxheSgyKTsKKwlmcGdhLT5hY3FDb250cm9sID0gREFRQk9BUkQyMDAwX0FkY1BhY2VyRGlzYWJsZTsKKworCS8qIFN0b3AgdGhlIGlucHV0IGRtYSAoYWJvcnQgY2hhbm5lbCAxKSAqLworCWRhcWJvYXJkMjAwMF9hZGNTdG9wRG1hVHJhbnNmZXIoZGV2KTsKK30KKworc3RhdGljIHZvaWQgZGFxYm9hcmQyMDAwX2FjdGl2YXRlUmVmZXJlbmNlRGFjcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgZGFxYm9hcmQyMDAwX2h3ICpmcGdhID0gZGV2cHJpdi0+ZGFxOworCWludCB0aW1lb3V0OworCisJLy8gU2V0IHRoZSArIHJlZmVyZW5jZSBkYWMgdmFsdWUgaW4gdGhlIEZQR0EKKwlmcGdhLT5yZWZEYWNzID0gMHg4MCB8IERBUUJPQVJEMjAwMF9Qb3NSZWZEYWNTZWxlY3Q7CisJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDIwOyB0aW1lb3V0KyspIHsKKwkJaWYgKChmcGdhLT5kYWNDb250cm9sICYgREFRQk9BUkQyMDAwX1JlZkJ1c3kpID09IDApIHsKKwkJCWJyZWFrOworCQl9CisJCWNvbWVkaV91ZGVsYXkoMik7CisJfQorLyogIHByaW50aygiREFRQk9BUkQyMDAwX1Bvc1JlZkRhY1NlbGVjdCAlZFxuIiwgdGltZW91dCk7Ki8KKworCS8vIFNldCB0aGUgLSByZWZlcmVuY2UgZGFjIHZhbHVlIGluIHRoZSBGUEdBCisJZnBnYS0+cmVmRGFjcyA9IDB4ODAgfCBEQVFCT0FSRDIwMDBfTmVnUmVmRGFjU2VsZWN0OworCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCAyMDsgdGltZW91dCsrKSB7CisJCWlmICgoZnBnYS0+ZGFjQ29udHJvbCAmIERBUUJPQVJEMjAwMF9SZWZCdXN5KSA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCQljb21lZGlfdWRlbGF5KDIpOworCX0KKy8qICBwcmludGsoIkRBUUJPQVJEMjAwMF9OZWdSZWZEYWNTZWxlY3QgJWRcbiIsIHRpbWVvdXQpOyovCit9CisKK3N0YXRpYyB2b2lkIGRhcWJvYXJkMjAwMF9pbml0aWFsaXplQ3RycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKy8qICBwcmludGsoIkltcGxlbWVudDogZGFxYm9hcmQyMDAwX2luaXRpYWxpemVDdHJzXG4iKTsqLworfQorCitzdGF0aWMgdm9pZCBkYXFib2FyZDIwMDBfaW5pdGlhbGl6ZVRtcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisvKiAgcHJpbnRrKCJJbXBsZW1lbnQ6IGRhcWJvYXJkMjAwMF9pbml0aWFsaXplVG1yc1xuIik7Ki8KK30KKworc3RhdGljIHZvaWQgZGFxYm9hcmQyMDAwX2RhY0Rpc2FybShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKy8qICBwcmludGsoIkltcGxlbWVudDogZGFxYm9hcmQyMDAwX2RhY0Rpc2FybVxuIik7Ki8KK30KKworc3RhdGljIHZvaWQgZGFxYm9hcmQyMDAwX2luaXRpYWxpemVBZGMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJZGFxYm9hcmQyMDAwX2FkY0Rpc2FybShkZXYpOworCWRhcWJvYXJkMjAwMF9hY3RpdmF0ZVJlZmVyZW5jZURhY3MoZGV2KTsKKwlkYXFib2FyZDIwMDBfaW5pdGlhbGl6ZUN0cnMoZGV2KTsKKwlkYXFib2FyZDIwMDBfaW5pdGlhbGl6ZVRtcnMoZGV2KTsKK30KKworc3RhdGljIHZvaWQgZGFxYm9hcmQyMDAwX2luaXRpYWxpemVEYWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJZGFxYm9hcmQyMDAwX2RhY0Rpc2FybShkZXYpOworfQorCisvKgorVGhlIHRlc3QgY29tbWFuZCwgUkVNT1ZFISE6CisKK3JtbW9kIGRhcWJvYXJkMjAwMCA7IHJtbW9kIGNvbWVkaTsgbWFrZSBpbnN0YWxsIDsgbW9kcHJvYmUgZGFxYm9hcmQyMDAwOyAvdXNyL3NiaW4vY29tZWRpX2NvbmZpZyAvZGV2L2NvbWVkaTAgZGFxYm9hcmQvMjAwMCA7IHRhaWwgLTQwIC92YXIvbG9nL21lc3NhZ2VzCisqLworCitzdGF0aWMgaW50IGRhcWJvYXJkMjAwMF84MjU1X2NiKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwKKwl1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlpZiAoZGlyKSB7CisJCXdyaXRldyhkYXRhLCAoKHZvaWQgKilpb2FkZHIpICsgcG9ydCAqIDIpOworCQlyZXN1bHQgPSAwOworCX0gZWxzZSB7CisJCXJlc3VsdCA9IHJlYWR3KCgodm9pZCAqKWlvYWRkcikgKyBwb3J0ICogMik7CisJfQorLyoKKyAgcHJpbnRrKCJkYXFib2FyZDIwMDBfODI1NV9jYiAleCAlZCAlZCAlMi4yeCAtPiAlMi4yeFxuIiwKKyAgICAgICAgYXJnLCBkaXIsIHBvcnQsIGRhdGEsIHJlc3VsdCk7CisqLworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZGFxYm9hcmQyMDAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgcGNpX2RldiAqY2FyZCA9IE5VTEw7CisJdm9pZCAqYXV4X2RhdGE7CisJdW5zaWduZWQgaW50IGF1eF9sZW47CisJaW50IGJ1cywgc2xvdDsKKworCXByaW50aygiY29tZWRpJWQ6IGRhcWJvYXJkMjAwMDoiLCBkZXYtPm1pbm9yKTsKKworCWJ1cyA9IGl0LT5vcHRpb25zWzBdOworCXNsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKworCXJlc3VsdCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRhcWJvYXJkMjAwMF9wcml2YXRlKSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZvciAoY2FyZCA9IHBjaV9nZXRfZGV2aWNlKDB4MTYxNiwgMHgwNDA5LCBOVUxMKTsKKwkJY2FyZCAhPSBOVUxMOworCQljYXJkID0gcGNpX2dldF9kZXZpY2UoMHgxNjE2LCAweDA0MDksIGNhcmQpKSB7CisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJLyogcmVxdWVzdGVkIHBhcnRpY3VsYXIgYnVzL3Nsb3QgKi8KKwkJCWlmIChjYXJkLT5idXMtPm51bWJlciAhPSBidXMgfHwKKwkJCQlQQ0lfU0xPVChjYXJkLT5kZXZmbikgIT0gc2xvdCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWJyZWFrOyAgLyogZm91bmQgb25lICovCisJfQorCWlmICghY2FyZCkgeworCQlpZiAoYnVzIHx8IHNsb3QpCisJCQlwcmludGsoIiBubyBkYXFib2FyZDIwMDAgZm91bmQgYXQgYnVzL3Nsb3Q6ICVkLyVkXG4iLAorCQkJCWJ1cywgc2xvdCk7CisJCWVsc2UKKwkJCXByaW50aygiIG5vIGRhcWJvYXJkMjAwMCBmb3VuZFxuIik7CisJCXJldHVybiAtRUlPOworCX0gZWxzZSB7CisJCXUzMiBpZDsKKwkJaW50IGk7CisJCWRldnByaXYtPnBjaV9kZXYgPSBjYXJkOworCQlpZCA9ICgodTMyKSBjYXJkLT5zdWJzeXN0ZW1fZGV2aWNlIDw8IDE2KSB8IGNhcmQtPgorCQkJc3Vic3lzdGVtX3ZlbmRvcjsKKwkJZm9yIChpID0gMDsgaSA8IG5fYm9hcmR0eXBlczsgaSsrKSB7CisJCQlpZiAoYm9hcmR0eXBlc1tpXS5pZCA9PSBpZCkgeworCQkJCXByaW50aygiICVzIiwgYm9hcmR0eXBlc1tpXS5uYW1lKTsKKwkJCQlkZXYtPmJvYXJkX3B0ciA9IGJvYXJkdHlwZXMgKyBpOworCQkJfQorCQl9CisJCWlmICghZGV2LT5ib2FyZF9wdHIpIHsKKwkJCXByaW50aygiIHVua25vd24gc3Vic3lzdGVtIGlkICUwOHggKHByZXRlbmQgaXQgaXMgYW4gaWRzMikiLCBpZCk7CisJCQlkZXYtPmJvYXJkX3B0ciA9IGJvYXJkdHlwZXM7CisJCX0KKwl9CisKKwlpZiAoKHJlc3VsdCA9IGNvbWVkaV9wY2lfZW5hYmxlKGNhcmQsICJkYXFib2FyZDIwMDAiKSkgPCAwKSB7CisJCXByaW50aygiIGZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldnByaXYtPmdvdF9yZWdpb25zID0gMTsKKwlkZXZwcml2LT5wbHggPQorCQlpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChjYXJkLCAwKSwgREFRQk9BUkQyMDAwX1BMWF9TSVpFKTsKKwlkZXZwcml2LT5kYXEgPQorCQlpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChjYXJkLCAyKSwgREFRQk9BUkQyMDAwX0RBUV9TSVpFKTsKKwlpZiAoIWRldnByaXYtPnBseCB8fCAhZGV2cHJpdi0+ZGFxKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJlc3VsdCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAzKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZWFkbChkZXZwcml2LT5wbHggKyAweDZjKTsKKworCS8qCisJICAgdTggaW50ZXJydXB0OworCSAgIFdpbmRvd3MgY29kZSBkb2VzIHJlc3RvcmUgaW50ZXJydXB0cywgYnV0IHNpbmNlIHdlIGRvbid0IHVzZSB0aGVtLi4uCisJICAgcGNpX3JlYWRfY29uZmlnX2J5dGUoY2FyZCwgUENJX0lOVEVSUlVQVF9MSU5FLCAmaW50ZXJydXB0KTsKKwkgICBwcmludGsoIkludGVycnVwdCBiZWZvcmUgaXM6ICV4XG4iLCBpbnRlcnJ1cHQpOworCSAqLworCisJYXV4X2RhdGEgPSBjb21lZGlfYXV4X2RhdGEoaXQtPm9wdGlvbnMsIDApOworCWF1eF9sZW4gPSBpdC0+b3B0aW9uc1tDT01FRElfREVWQ09ORl9BVVhfREFUQV9MRU5HVEhdOworCisJaWYgKGF1eF9kYXRhICYmIGF1eF9sZW4pIHsKKwkJcmVzdWx0ID0gaW5pdGlhbGl6ZV9kYXFib2FyZDIwMDAoZGV2LCBhdXhfZGF0YSwgYXV4X2xlbik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCJubyBGUEdBIGluaXRpYWxpemF0aW9uIGNvZGUsIGFib3J0aW5nXG4iKTsKKwkJcmVzdWx0ID0gLUVJTzsKKwl9CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gb3V0OworCWRhcWJvYXJkMjAwMF9pbml0aWFsaXplQWRjKGRldik7CisJZGFxYm9hcmQyMDAwX2luaXRpYWxpemVEYWMoZGV2KTsKKwkvKgorCSAgIFdpbmRvd3MgY29kZSBkb2VzIHJlc3RvcmUgaW50ZXJydXB0cywgYnV0IHNpbmNlIHdlIGRvbid0IHVzZSB0aGVtLi4uCisJICAgcGNpX3JlYWRfY29uZmlnX2J5dGUoY2FyZCwgUENJX0lOVEVSUlVQVF9MSU5FLCAmaW50ZXJydXB0KTsKKwkgICBwcmludGsoIkludGVycnVwdCBhZnRlciBpczogJXhcbiIsIGludGVycnVwdCk7CisJICovCisKKwlkZXYtPmlvYmFzZSA9ICh1bnNpZ25lZCBsb25nKWRldnByaXYtPmRhcTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhaSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsKKwlzLT5uX2NoYW4gPSAyNDsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCXMtPmluc25fcmVhZCA9IGRhcWJvYXJkMjAwMF9haV9pbnNuX3JlYWQ7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGFxYm9hcmQyMDAwX2FpOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogYW8gc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAyOworCXMtPm1heGRhdGEgPSAweGZmZmY7CisJcy0+aW5zbl9yZWFkID0gZGFxYm9hcmQyMDAwX2FvX2luc25fcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gZGFxYm9hcmQyMDAwX2FvX2luc25fd3JpdGU7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGFxYm9hcmQyMDAwX2FvOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJcmVzdWx0ID0gc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIGRhcWJvYXJkMjAwMF84MjU1X2NiLAorCQkodW5zaWduZWQgbG9uZykoZGV2LT5pb2Jhc2UgKyAweDQwKSk7CisKKwlwcmludGsoIlxuIik7CisgICAgICBvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBkYXFib2FyZDIwMDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGRhcWJvYXJkMjAwMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPnN1YmRldmljZXMpCisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAyKTsKKworCWlmIChkZXYtPmlycSkgeworCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisJaWYgKGRldnByaXYpIHsKKwkJaWYgKGRldnByaXYtPmRhcSkKKwkJCWlvdW5tYXAoZGV2cHJpdi0+ZGFxKTsKKwkJaWYgKGRldnByaXYtPnBseCkKKwkJCWlvdW5tYXAoZGV2cHJpdi0+cGx4KTsKKwkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKKwkJCWlmIChkZXZwcml2LT5nb3RfcmVnaW9ucykgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXFib2FyZDIwMDAsIGRhcWJvYXJkMjAwMF9wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDU2MzMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4LmMKQEAgLTAsMCArMSwxMDY4IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2RhczA4LmMKKyAgICBEQVMwOCBkcml2ZXIKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIsMjAwMyBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisgICAgQ29weXJpZ2h0IChDKSAyMDA0IFNhbHZhZG9yIEUuIFRyb3BlYSA8c2V0QHVzZXJzLnNmLm5ldD4gPHNldEBpZWVlLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqLworLyoKK0RyaXZlcjogZGFzMDgKK0Rlc2NyaXB0aW9uOiBEQVMtMDggY29tcGF0aWJsZSBib2FyZHMKK0F1dGhvcjogV2FycmVuIEphc3BlciwgZHMsIEZyYW5rIEhlc3MKK0RldmljZXM6IFtLZWl0aGxleSBNZXRyYWJ5dGVdIERBUzA4IChpc2EtZGFzMDgpLCBbQ29tcHV0ZXJCb2FyZHNdIERBUzA4IChpc2EtZGFzMDgpLAorICBEQVMwOC1QR00gKGRhczA4LXBnbSksCisgIERBUzA4LVBHSCAoZGFzMDgtcGdoKSwgREFTMDgtUEdMIChkYXMwOC1wZ2wpLCBEQVMwOC1BT0ggKGRhczA4LWFvaCksCisgIERBUzA4LUFPTCAoZGFzMDgtYW9sKSwgREFTMDgtQU9NIChkYXMwOC1hb20pLCBEQVMwOC9KUi1BTyAoZGFzMDgvanItYW8pLAorICBEQVMwOC9KUi0xNi1BTyAoZGFzMDhqci0xNi1hbyksIFBDSS1EQVMwOCAoZGFzMDgpLAorICBQQzEwNC1EQVMwOCAocGMxMDQtZGFzMDgpLCBEQVMwOC9KUi8xNiAoZGFzMDhqci8xNikKK1N0YXR1czogd29ya3MKKworVGhpcyBpcyBhIHJld3JpdGUgb2YgdGhlIGRhczA4IGFuZCBkYXMwOGpyIGRyaXZlcnMuCisKK09wdGlvbnMgKGZvciBJU0EgY2FyZHMpOgorICAgICAgICBbMF0gLSBiYXNlIGlvIGFkZHJlc3MKKworT3B0aW9ucyAoZm9yIHBjaS1kYXMwOCk6CisgICAgICAgIFswXSAtIGJ1cyAgKG9wdGlvbmFsKQorICAgICAgICBbMV0gPSBzbG90IChvcHRpb25hbCkKKworVGhlIGRhczA4IGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgYXN5bmNocm9ub3VzIGNvbW1hbmRzLCBzaW5jZQordGhlIGNoZWFwIGRhczA4IGhhcmR3YXJlIGRvZXNuJ3QgcmVhbGx5IHN1cHBvcnQgdGhlbS4gIFRoZQorY29tZWRpX3J0X3RpbWVyIGRyaXZlciBjYW4gYmUgdXNlZCB0byBlbXVsYXRlIGNvbW1hbmRzIGZvciB0aGlzCitkcml2ZXIuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJkYXMwOC5oIgorCisjZGVmaW5lIERSVl9OQU1FICJkYXMwOCIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NPTVBVVEVSQk9BUkRTIDB4MTMwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDSURBUzA4IDB4MjkKKyNkZWZpbmUgUENJREFTMDhfU0laRSAweDU0CisKKy8vIHBjaSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworI2RlZmluZSBJTlRDU1IgICAgICAgICAgICAgICAweDRjCisjZGVmaW5lICAgSU5UUjFfRU5BQkxFICAgICAgICAgMHgxCisjZGVmaW5lICAgSU5UUjFfSElHSF9QT0xBUklUWSAgMHgyCisjZGVmaW5lICAgUENJX0lOVFJfRU5BQkxFICAgICAgMHg0MAorI2RlZmluZSAgIElOVFIxX0VER0VfVFJJRyAgICAgIDB4MTAwCS8vIHJlcXVpcmVzIGhpZ2ggcG9sYXJpdHkKKyNkZWZpbmUgQ05UUkwgICAgICAgICAgICAgICAgMHg1MAorI2RlZmluZSAgIENOVFJMX0RJUiAgICAgICAgICAgIDB4MgorI2RlZmluZSAgIENOVFJMX0lOVFIgICAgICAgICAgIDB4NAorCisvKgorICAgIGNpby1kYXMwOC5wZGYKKworICAiaXNhLWRhczA4IgorCisgIDAJYS9kIGJpdHMgMC0zCQlzdGFydCA4IGJpdAorICAxCWEvZCBiaXRzIDQtMTEJCXN0YXJ0IDEyIGJpdAorICAyCWVvYywgaXAxLTMsIGlycSwgbXV4CW9wMS00LCBpbnRlLCBtdXgKKyAgMwl1bnVzZWQJCQl1bnVzZWQKKyAgNDU2Nwk4MjU0CisgIDg5YWIJODI1NQorCisgIHJlcXVpcmVzIGhhcmQtd2lyaW5nIGZvciBhc3luYyBhaQorCisqLworCisjZGVmaW5lIERBUzA4X0xTQgkJMAorI2RlZmluZSBEQVMwOF9NU0IJCTEKKyNkZWZpbmUgREFTMDhfVFJJR18xMkJJVAkxCisjZGVmaW5lIERBUzA4X1NUQVRVUwkJMgorI2RlZmluZSAgIERBUzA4X0VPQwkJCSgxPDw3KQorI2RlZmluZSAgIERBUzA4X0lSUQkJCSgxPDwzKQorI2RlZmluZSAgIERBUzA4X0lQKHgpCQkJKCgoeCk+PjQpJjB4NykKKyNkZWZpbmUgREFTMDhfQ09OVFJPTAkJMgorI2RlZmluZSAgIERBUzA4X01VWF9NQVNLCTB4NworI2RlZmluZSAgIERBUzA4X01VWCh4KQkJKCh4KSAmIERBUzA4X01VWF9NQVNLKQorI2RlZmluZSAgIERBUzA4X0lOVEUJCQkoMTw8MykKKyNkZWZpbmUgICBEQVMwOF9ET19NQVNLCQkweGYwCisjZGVmaW5lICAgREFTMDhfT1AoeCkJCSgoKHgpIDw8IDQpICYgREFTMDhfRE9fTUFTSykKKworLyoKKyAgICBjaW8tZGFzMDhqci5wZGYKKworICAiZGFzMDgvanItYW8iCisKKyAgMAlhL2QgYml0cyAwLTMJCXVudXNlZAorICAxCWEvZCBiaXRzIDQtMTEJCXN0YXJ0IDEyIGJpdAorICAyCWVvYywgbXV4CQltdXgKKyAgMwlkaQkJCWRvCisgIDQJdW51c2VkCQkJYW8wX2xzYgorICA1CXVudXNlZAkJCWFvMF9tc2IKKyAgNgl1bnVzZWQJCQlhbzFfbHNiCisgIDcJdW51c2VkCQkJYW8xX21zYgorCisqLworCisjZGVmaW5lIERBUzA4SlJfRElPCQkzCisjZGVmaW5lIERBUzA4SlJfQU9fTFNCKHgpCSgoeCk/Njo0KQorI2RlZmluZSBEQVMwOEpSX0FPX01TQih4KQkoKHgpPzc6NSkKKworLyoKKyAgICBjaW8tZGFzMDhfYW94LnBkZgorCisgICJkYXMwOC1hb2giCisgICJkYXMwOC1hb2wiCisgICJkYXMwOC1hb20iCisKKyAgMAlhL2QgYml0cyAwLTMJCXN0YXJ0IDggYml0CisgIDEJYS9kIGJpdHMgNC0xMQkJc3RhcnQgMTIgYml0CisgIDIJZW9jLCBpcDEtMywgaXJxLCBtdXgJb3AxLTQsIGludGUsIG11eAorICAzCW11eCwgZ2FpbiBzdGF0dXMJZ2FpbiBjb250cm9sCisgIDQ1NjcJODI1NAorICA4CXVudXNlZAkJCWFvMF9sc2IKKyAgOQl1bnVzZWQJCQlhbzBfbXNiCisgIGEJdW51c2VkCQkJYW8xX2xzYgorICBiCXVudXNlZAkJCWFvMV9tc2IKKyAgODlhYgorICBjZGVmCTgyNTUKKyovCisKKyNkZWZpbmUgREFTMDhBT19HQUlOX0NPTlRST0wJMworI2RlZmluZSBEQVMwOEFPX0dBSU5fU1RBVFVTCTMKKworI2RlZmluZSBEQVMwOEFPX0FPX0xTQih4KQkoKHgpPzB4YTo4KQorI2RlZmluZSBEQVMwOEFPX0FPX01TQih4KQkoKHgpPzB4Yjo5KQorI2RlZmluZSBEQVMwOEFPX0FPX1VQREFURQk4CisKKy8qIGdhaW5saXN0IHNhbWUgYXMgX3BneF8gYmVsb3cgKi8KKworc3RhdGljIGludCBkYXMwOF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMwOF9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMwOF9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMwOGpyX2RpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczA4anJfZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMDhqcl9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMwOGFvX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgdm9pZCBpODI1NF9zZXRfbW9kZV9sb3codW5zaWduZWQgaW50IGJhc2UsIGludCBjaGFubmVsLAorCXVuc2lnbmVkIGludCBtb2RlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczA4X3BnbCA9IHsgOSwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMDhfcGdoID0geyAxMiwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMSksCisJCQlCSVBfUkFOR0UoMC4wMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDEpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMDhfcGdtID0geyA5LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDEpLAorCQkJVU5JX1JBTkdFKDAuMSksCisJCQlVTklfUkFOR0UoMC4wMSkKKwl9Cit9OwkJCQkvKgorCQkJCSAgIGNpby1kYXMwOGpyLnBkZgorCisJCQkJICAgImRhczA4L2pyLWFvIgorCisJCQkJICAgMCBhL2QgYml0cyAwLTMgICAgICAgICAgICB1bnVzZWQKKwkJCQkgICAxIGEvZCBiaXRzIDQtMTEgICAgICAgICAgIHN0YXJ0IDEyIGJpdAorCQkJCSAgIDIgZW9jLCBtdXggICAgICAgICAgICAgICAgbXV4CisJCQkJICAgMyBkaSAgICAgICAgICAgICAgICAgICAgICBkbworCQkJCSAgIDQgdW51c2VkICAgICAgICAgICAgICAgICAgYW8wX2xzYgorCQkJCSAgIDUgdW51c2VkICAgICAgICAgICAgICAgICAgYW8wX21zYgorCQkJCSAgIDYgdW51c2VkICAgICAgICAgICAgICAgICAgYW8xX2xzYgorCQkJCSAgIDcgdW51c2VkICAgICAgICAgICAgICAgICAgYW8xX21zYgorCisJCQkJICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgZGFzMDhfYWlfbHJhbmdlc1tdID0geworCSZyYW5nZV91bmtub3duLAorCSZyYW5nZV9iaXBvbGFyNSwKKwkmcmFuZ2VfZGFzMDhfcGdoLAorCSZyYW5nZV9kYXMwOF9wZ2wsCisJJnJhbmdlX2RhczA4X3BnbSwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgZGFzMDhfcGdoX2dhaW5saXN0W10gPQorCXsgOCwgMCwgMTAsIDIsIDEyLCA0LCAxNCwgNiwgMSwgMywgNSwgNyB9Oworc3RhdGljIGNvbnN0IGludCBkYXMwOF9wZ2xfZ2Fpbmxpc3RbXSA9IHsgOCwgMCwgMiwgNCwgNiwgMSwgMywgNSwgNyB9Oworc3RhdGljIGNvbnN0IGludCBkYXMwOF9wZ21fZ2Fpbmxpc3RbXSA9IHsgOCwgMCwgMTAsIDEyLCAxNCwgOSwgMTEsIDEzLCAxNSB9OworCitzdGF0aWMgY29uc3QgaW50ICpjb25zdCBkYXMwOF9nYWlubGlzdHNbXSA9IHsKKwlOVUxMLAorCU5VTEwsCisJZGFzMDhfcGdoX2dhaW5saXN0LAorCWRhczA4X3BnbF9nYWlubGlzdCwKKwlkYXMwOF9wZ21fZ2Fpbmxpc3QsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCBkYXMwOF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImlzYS1kYXMwOCIsCS8vIGNpby1kYXMwOC5wZGYKKwkgICAgICBidXN0eXBlOglpc2EsCisJICAgICAgYWk6CWRhczA4X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3BnOglkYXMwOF9wZ19ub25lLAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X2VuY29kZTEyLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjgsCisJICAgICAgaTgyNTRfb2Zmc2V0OjQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1wZ20iLAkvLyBjaW8tZGFzMDhwZ3gucGRmCisJICAgICAgYnVzdHlwZToJaXNhLAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9wZzoJZGFzMDhfcGdtLAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X2VuY29kZTEyLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1wZ2giLAkvLyBjaW8tZGFzMDhwZ3gucGRmCisJICAgICAgYnVzdHlwZToJaXNhLAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9wZzoJZGFzMDhfcGdoLAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X2VuY29kZTEyLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1wZ2wiLAkvLyBjaW8tZGFzMDhwZ3gucGRmCisJICAgICAgYnVzdHlwZToJaXNhLAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9wZzoJZGFzMDhfcGdsLAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X2VuY29kZTEyLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1hb2giLAkvLyBjaW8tZGFzMDhfYW94LnBkZgorCSAgICAgIGJ1c3R5cGU6CWlzYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X3BnaCwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJZGFzMDhhb19hb193aW5zbiwJLy8gOAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4MGMsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1hb2wiLAkvLyBjaW8tZGFzMDhfYW94LnBkZgorCSAgICAgIGJ1c3R5cGU6CWlzYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X3BnbCwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJZGFzMDhhb19hb193aW5zbiwJLy8gOAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4MGMsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1hb20iLAkvLyBjaW8tZGFzMDhfYW94LnBkZgorCSAgICAgIGJ1c3R5cGU6CWlzYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X3BnbSwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJZGFzMDhhb19hb193aW5zbiwJLy8gOAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4MGMsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC9qci1hbyIsCS8vIGNpby1kYXMwOC1qci1hby5wZGYKKwkgICAgICBidXN0eXBlOglpc2EsCisJICAgICAgYWk6CWRhczA4X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3BnOglkYXMwOF9wZ19ub25lLAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X2VuY29kZTEyLAorCSAgICAgIGFvOglkYXMwOGpyX2FvX3dpbnNuLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMwOGpyX2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMDhqcl9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo4LAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDowLAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDhqci0xNi1hbyIsCS8vIGNpby1kYXMwOGpyLTE2LWFvLnBkZgorCSAgICAgIGJ1c3R5cGU6CWlzYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTYsCisJICAgICAgYWlfcGc6CWRhczA4X3BnX25vbmUsCisJICAgICAgYWlfZW5jb2Rpbmc6ZGFzMDhfZW5jb2RlMTIsCisJICAgICAgYW86CWRhczA4anJfYW9fd2luc24sCisJICAgICAgYW9fbmJpdHM6MTYsCisJICAgICAgZGk6CWRhczA4anJfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOGpyX2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjgsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MDQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwl7CisJICAgICAgbmFtZToJImRhczA4IiwJLy8gcGNpLWRhczA4CisJICAgICAgaWQ6CVBDSV9ERVZJQ0VfSURfUENJREFTMDgsCisJICAgICAgYnVzdHlwZToJcGNpLAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9wZzoJZGFzMDhfYmlwb2xhcjUsCisJICAgICAgYWlfZW5jb2Rpbmc6ZGFzMDhfZW5jb2RlMTIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgYW9fbmJpdHM6MCwKKwkgICAgICBkaToJZGFzMDhfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMwOF9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo0LAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDo0LAorCSAgICAgIGlvc2l6ZToJOCwKKwkJfSwKKyNlbmRpZgorCXsKKwkgICAgICBuYW1lOgkicGMxMDQtZGFzMDgiLAorCSAgICAgIGJ1c3R5cGU6CXBjMTA0LAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9wZzoJZGFzMDhfcGdfbm9uZSwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBhb19uYml0czowLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjQsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjQsCisJICAgICAgaW9zaXplOgkxNiwJLy8gdW5jaGVja2VkCisJCX0sCisjaWYgMAorCXsKKwkgICAgICBuYW1lOgkiZGFzMDgvZiIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOGpyIiwKKwkJfSwKKyNlbmRpZgorCXsKKwkgICAgICBuYW1lOgkiZGFzMDhqci8xNiIsCisJICAgICAgYnVzdHlwZToJaXNhLAorCSAgICAgIGFpOglkYXMwOF9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxNiwKKwkgICAgICBhaV9wZzoJZGFzMDhfcGdfbm9uZSwKKwkgICAgICBhaV9lbmNvZGluZzpkYXMwOF9lbmNvZGUxNiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBhb19uYml0czowLAorCSAgICAgIGRpOglkYXMwOGpyX2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMDhqcl9kb193Yml0cywKKwkgICAgICBkb19uY2hhbjo4LAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDowLAorCSAgICAgIGlvc2l6ZToJMTYsCS8vIHVuY2hlY2tlZAorCQl9LAorI2lmIDAKKwl7CisJICAgICAgbmFtZToJImRhczQ4LXBnYSIsCS8vIGNpby1kYXM0OC1wZ2EucGRmCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMwOC1wZ2EtZzIiLAkvLyBhIEtNIGJvYXJkCisJCX0sCisjZW5kaWYKK307CisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDTUNJQQorc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCBkYXMwOF9jc19ib2FyZHNbTlVNX0RBUzA4X0NTX0JPQVJEU10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY20tZGFzMDgiLAorCSAgICAgIGlkOgkweDAsCS8vIFhYWAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X2JpcG9sYXI1LAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X3BjbV9lbmNvZGUxMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBhb19uYml0czowLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjAsCisJICAgICAgaW9zaXplOgkxNiwKKwkJfSwKKwkvLyBkdXBsaWNhdGUgc28gZHJpdmVyIG5hbWUgY2FuIGJlIHVzZWQgYWxzbworCXsKKwkgICAgICBuYW1lOgkiZGFzMDhfY3MiLAorCSAgICAgIGlkOgkweDAsCS8vIFhYWAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYSwKKwkgICAgICBhaToJZGFzMDhfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfcGc6CWRhczA4X2JpcG9sYXI1LAorCSAgICAgIGFpX2VuY29kaW5nOmRhczA4X3BjbV9lbmNvZGUxMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBhb19uYml0czowLAorCSAgICAgIGRpOglkYXMwOF9kaV9yYml0cywKKwkgICAgICBkb186CWRhczA4X2RvX3diaXRzLAorCSAgICAgIGRvX25jaGFuOjMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjAsCisJICAgICAgaW9zaXplOgkxNiwKKwkJfSwKK307CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZGFzMDhfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9DT01QVVRFUkJPQVJEUywgUENJX0RFVklDRV9JRF9QQ0lEQVMwOCwgUENJX0FOWV9JRCwKKwkJUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZGFzMDhfcGNpX3RhYmxlKTsKKyNlbmRpZgorCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgZGFzMDhfcHJpdmF0ZV9zdHJ1Y3QgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBkYXMwOF9ib2FyZF9zdHJ1Y3QgKilkZXYtPmJvYXJkX3B0cikKKworI2RlZmluZSBUSU1FT1VUIDEwMDAwMAorCitzdGF0aWMgaW50IGRhczA4X2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgbjsKKwlpbnQgY2hhbjsKKwlpbnQgcmFuZ2U7CisJaW50IGxzYiwgbXNiOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCisJLyogY2xlYXIgY3JhcCAqLworCWluYihkZXYtPmlvYmFzZSArIERBUzA4X0xTQik7CisJaW5iKGRldi0+aW9iYXNlICsgREFTMDhfTVNCKTsKKworCS8qIHNldCBtdWx0aXBsZXhlciAqLworCXNwaW5fbG9jaygmZGV2LT5zcGlubG9jayk7CS8vIGxvY2sgdG8gcHJldmVudCByYWNlIHdpdGggZGlnaXRhbCBvdXRwdXQKKwlkZXZwcml2LT5kb19tdXhfYml0cyAmPSB+REFTMDhfTVVYX01BU0s7CisJZGV2cHJpdi0+ZG9fbXV4X2JpdHMgfD0gREFTMDhfTVVYKGNoYW4pOworCW91dGIoZGV2cHJpdi0+ZG9fbXV4X2JpdHMsIGRldi0+aW9iYXNlICsgREFTMDhfQ09OVFJPTCk7CisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCisJaWYgKHMtPnJhbmdlX3RhYmxlLT5sZW5ndGggPiAxKSB7CisJCS8qIHNldCBnYWluL3JhbmdlICovCisJCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCQlvdXRiKGRldnByaXYtPnBnX2dhaW5saXN0W3JhbmdlXSwKKwkJCWRldi0+aW9iYXNlICsgREFTMDhBT19HQUlOX0NPTlRST0wpOworCX0KKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLyogY2xlYXIgb3Zlci1yYW5nZSBiaXRzIGZvciAxNi1iaXQgYm9hcmRzICovCisJCWlmICh0aGlzYm9hcmQtPmFpX25iaXRzID09IDE2KQorCQkJaWYgKGluYihkZXYtPmlvYmFzZSArIERBUzA4X01TQikgJiAweDgwKQorCQkJCXJ0X3ByaW50aygiZGFzMDg6IG92ZXItcmFuZ2VcbiIpOworCisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlvdXRiX3AoMCwgZGV2LT5pb2Jhc2UgKyBEQVMwOF9UUklHXzEyQklUKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgVElNRU9VVDsgaSsrKSB7CisJCQlpZiAoIShpbmIoZGV2LT5pb2Jhc2UgKyBEQVMwOF9TVEFUVVMpICYgREFTMDhfRU9DKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSBUSU1FT1VUKSB7CisJCQlydF9wcmludGsoImRhczA4OiB0aW1lb3V0XG4iKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKwkJbXNiID0gaW5iKGRldi0+aW9iYXNlICsgREFTMDhfTVNCKTsKKwkJbHNiID0gaW5iKGRldi0+aW9iYXNlICsgREFTMDhfTFNCKTsKKwkJaWYgKHRoaXNib2FyZC0+YWlfZW5jb2RpbmcgPT0gZGFzMDhfZW5jb2RlMTIpIHsKKwkJCWRhdGFbbl0gPSAobHNiID4+IDQpIHwgKG1zYiA8PCA0KTsKKwkJfSBlbHNlIGlmICh0aGlzYm9hcmQtPmFpX2VuY29kaW5nID09IGRhczA4X3BjbV9lbmNvZGUxMikgeworCQkJZGF0YVtuXSA9IChtc2IgPDwgOCkgKyBsc2I7CisJCX0gZWxzZSBpZiAodGhpc2JvYXJkLT5haV9lbmNvZGluZyA9PSBkYXMwOF9lbmNvZGUxNikgeworCQkJLyogRlBPUyAxNi1iaXQgYm9hcmRzIGFyZSBzaWduLW1hZ25pdHVkZSAqLworCQkJaWYgKG1zYiAmIDB4ODApCisJCQkJZGF0YVtuXSA9ICgxIDw8IDE1KSB8IGxzYiB8ICgobXNiICYgMHg3ZikgPDwgOCk7CisJCQllbHNlCisJCQkJZGF0YVtuXSA9ICgxIDw8IDE1KSAtIChsc2IgfCAobXNiICYgMHg3ZikgPDwgOCk7CisJCX0gZWxzZSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISB1bmtub3duIGFpIGVuY29kaW5nIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBkYXMwOF9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IDA7CisJZGF0YVsxXSA9IERBUzA4X0lQKGluYihkZXYtPmlvYmFzZSArIERBUzA4X1NUQVRVUykpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGFzMDhfZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCB3Yml0czsKKworCS8vIGdldCBjdXJyZW50IHNldHRpbmdzIG9mIGRpZ2l0YWwgb3V0cHV0IGxpbmVzCisJd2JpdHMgPSAoZGV2cHJpdi0+ZG9fbXV4X2JpdHMgPj4gNCkgJiAweGY7CisJLy8gbnVsbCBiaXRzIHdlIGFyZSBnb2luZyB0byBzZXQKKwl3Yml0cyAmPSB+ZGF0YVswXTsKKwkvLyBzZXQgbmV3IGJpdCB2YWx1ZXMKKwl3Yml0cyB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwkvLyByZW1lbWJlciBkaWdpdGFsIG91dHB1dCBiaXRzCisJc3Bpbl9sb2NrKCZkZXYtPnNwaW5sb2NrKTsJLy8gcHJldmVudCByYWNlIHdpdGggc2V0dGluZyBvZiBhbmFsb2cgaW5wdXQgbXV4CisJZGV2cHJpdi0+ZG9fbXV4X2JpdHMgJj0gfkRBUzA4X0RPX01BU0s7CisJZGV2cHJpdi0+ZG9fbXV4X2JpdHMgfD0gREFTMDhfT1Aod2JpdHMpOworCW91dGIoZGV2cHJpdi0+ZG9fbXV4X2JpdHMsIGRldi0+aW9iYXNlICsgREFTMDhfQ09OVFJPTCk7CisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCisJZGF0YVsxXSA9IHdiaXRzOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGFzMDhqcl9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IDA7CisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIERBUzA4SlJfRElPKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRhczA4anJfZG9fd2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCS8vIG51bGwgYml0cyB3ZSBhcmUgZ29pbmcgdG8gc2V0CisJZGV2cHJpdi0+ZG9fYml0cyAmPSB+ZGF0YVswXTsKKwkvLyBzZXQgbmV3IGJpdCB2YWx1ZXMKKwlkZXZwcml2LT5kb19iaXRzIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCW91dGIoZGV2cHJpdi0+ZG9fYml0cywgZGV2LT5pb2Jhc2UgKyBEQVMwOEpSX0RJTyk7CisKKwlkYXRhWzFdID0gZGV2cHJpdi0+ZG9fYml0czsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRhczA4anJfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBsc2IsIG1zYjsKKwlpbnQgY2hhbjsKKworCWxzYiA9IGRhdGFbMF0gJiAweGZmOworCW1zYiA9IChkYXRhWzBdID4+IDgpICYgMHhmOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworI2lmIDAKKwkJb3V0Yihsc2IsIGRldi0+aW9iYXNlICsgZGV2cHJpdi0+YW9fb2Zmc2V0X2xzYltjaGFuXSk7CisJCW91dGIobXNiLCBkZXYtPmlvYmFzZSArIGRldnByaXYtPmFvX29mZnNldF9tc2JbY2hhbl0pOworI2Vsc2UKKwkJb3V0Yihsc2IsIGRldi0+aW9iYXNlICsgREFTMDhKUl9BT19MU0IoY2hhbikpOworCQlvdXRiKG1zYiwgZGV2LT5pb2Jhc2UgKyBEQVMwOEpSX0FPX01TQihjaGFuKSk7CisjZW5kaWYKKworCQkvKiBsb2FkIERBQ3MgKi8KKwkJaW5iKGRldi0+aW9iYXNlICsgREFTMDhKUl9ESU8pOworCX0KKworCXJldHVybiBuOworfQorCisvKgorICoKKyAqIFRoZSAtYW94IGJvYXJkcyBoYXZlIHRoZSBEQUNzIGF0IGEgZGlmZmVyZW50IG9mZnNldCBhbmQgdXNlCisgKiBhIGRpZmZlcmVudCBtZXRob2QgdG8gZm9yY2UgYW4gdXBkYXRlLgorICoKKyAqLworc3RhdGljIGludCBkYXMwOGFvX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgbHNiLCBtc2I7CisJaW50IGNoYW47CisKKwlsc2IgPSBkYXRhWzBdICYgMHhmZjsKKwltc2IgPSAoZGF0YVswXSA+PiA4KSAmIDB4ZjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKyNpZiAwCisJCW91dGIobHNiLCBkZXYtPmlvYmFzZSArIGRldnByaXYtPmFvX29mZnNldF9sc2JbY2hhbl0pOworCQlvdXRiKG1zYiwgZGV2LT5pb2Jhc2UgKyBkZXZwcml2LT5hb19vZmZzZXRfbXNiW2NoYW5dKTsKKyNlbHNlCisJCW91dGIobHNiLCBkZXYtPmlvYmFzZSArIERBUzA4QU9fQU9fTFNCKGNoYW4pKTsKKwkJb3V0Yihtc2IsIGRldi0+aW9iYXNlICsgREFTMDhBT19BT19NU0IoY2hhbikpOworI2VuZGlmCisKKwkJLyogbG9hZCBEQUNzICovCisJCWluYihkZXYtPmlvYmFzZSArIERBUzA4QU9fQU9fVVBEQVRFKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpODI1NF9yZWFkX2NoYW5uZWxfbG93KHVuc2lnbmVkIGludCBiYXNlLCBpbnQgY2hhbikKK3sKKwl1bnNpZ25lZCBpbnQgbXNiLCBsc2I7CisKKwkvKiBUaGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBtdXN0IGJlIGluIG9yZGVyLgorCSAgIFdlIG11c3QgYXZvaWQgb3RoZXIgcHJvY2VzcyByZWFkaW5nIHRoZSBjb3VudGVyJ3MgdmFsdWUgaW4gdGhlCisJICAgbWlkZGxlLgorCSAgIFRoZSBzcGluX2xvY2sgaXNuJ3QgbmVlZGVkIHNpbmNlIGlvY3RsIGNhbGxzIGdyYWIgdGhlIGJpZyBrZXJuZWwKKwkgICBsb2NrIGF1dG9tYXRpY2FsbHkgKi8KKwkvKnNwaW5fbG9jayhzcCk7ICovCisJb3V0YihjaGFuIDw8IDYsIGJhc2UgKyBJODI1NF9DVFJMKTsKKwliYXNlICs9IGNoYW47CisJbHNiID0gaW5iKGJhc2UpOworCW1zYiA9IGluYihiYXNlKTsKKwkvKnNwaW5fdW5sb2NrKHNwKTsgKi8KKworCXJldHVybiBsc2IgfCAobXNiIDw8IDgpOworfQorCitzdGF0aWMgdm9pZCBpODI1NF93cml0ZV9jaGFubmVsX2xvdyh1bnNpZ25lZCBpbnQgYmFzZSwgaW50IGNoYW4sCisJdW5zaWduZWQgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGludCBtc2IsIGxzYjsKKworCWxzYiA9IHZhbHVlICYgMHhGRjsKKwltc2IgPSB2YWx1ZSA+PiA4OworCisJLyogd3JpdGUgbHNiLCB0aGVuIG1zYiAqLworCWJhc2UgKz0gY2hhbjsKKwkvKiBTZWUgY29tbWVudHMgaW4gaTgyNTRfcmVhZF9jaGFubmVsX2xvdyAqLworCS8qc3Bpbl9sb2NrKHNwKTsgKi8KKwlvdXRiKGxzYiwgYmFzZSk7CisJb3V0Yihtc2IsIGJhc2UpOworCS8qc3Bpbl91bmxvY2soc3ApOyAqLworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGk4MjU0X3JlYWRfY2hhbm5lbChzdHJ1Y3QgaTgyNTRfc3RydWN0ICpzdCwgaW50IGNoYW5uZWwpCit7CisJaW50IGNoYW4gPSBzdC0+bG9naWMycGh5c1tjaGFubmVsXTsKKworCXJldHVybiBpODI1NF9yZWFkX2NoYW5uZWxfbG93KHN0LT5pb2Jhc2UsIGNoYW4pOworfQorCitzdGF0aWMgdm9pZCBpODI1NF93cml0ZV9jaGFubmVsKHN0cnVjdCBpODI1NF9zdHJ1Y3QgKnN0LCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJaW50IGNoYW4gPSBzdC0+bG9naWMycGh5c1tjaGFubmVsXTsKKworCWk4MjU0X3dyaXRlX2NoYW5uZWxfbG93KHN0LT5pb2Jhc2UsIGNoYW4sIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgaTgyNTRfaW5pdGlhbGl6ZShzdHJ1Y3QgaTgyNTRfc3RydWN0ICpzdCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpKQorCQlpODI1NF9zZXRfbW9kZV9sb3coc3QtPmlvYmFzZSwgaSwgc3QtPm1vZGVbaV0pOworfQorCitzdGF0aWMgdm9pZCBpODI1NF9zZXRfbW9kZV9sb3codW5zaWduZWQgaW50IGJhc2UsIGludCBjaGFubmVsLAorCXVuc2lnbmVkIGludCBtb2RlKQoreworCW91dGIoKGNoYW5uZWwgPDwgNikgfCAweDMwIHwgKG1vZGUgJiAweDBGKSwgYmFzZSArIEk4MjU0X0NUUkwpOworfQorCitzdGF0aWMgdm9pZCBpODI1NF9zZXRfbW9kZShzdHJ1Y3QgaTgyNTRfc3RydWN0ICpzdCwgaW50IGNoYW5uZWwsCisJdW5zaWduZWQgaW50IG1vZGUpCit7CisJaW50IGNoYW4gPSBzdC0+bG9naWMycGh5c1tjaGFubmVsXTsKKworCXN0LT5tb2RlW2NoYW5dID0gbW9kZTsKKwlyZXR1cm4gaTgyNTRfc2V0X21vZGVfbG93KHN0LT5pb2Jhc2UsIGNoYW4sIG1vZGUpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGk4MjU0X3JlYWRfc3RhdHVzX2xvdyh1bnNpZ25lZCBpbnQgYmFzZSwgaW50IGNoYW5uZWwpCit7CisJb3V0YigweEUwIHwgKDIgPDwgY2hhbm5lbCksIGJhc2UgKyBJODI1NF9DVFJMKTsKKwlyZXR1cm4gaW5iKGJhc2UgKyBjaGFubmVsKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBpODI1NF9yZWFkX3N0YXR1cyhzdHJ1Y3QgaTgyNTRfc3RydWN0ICpzdCwgaW50IGNoYW5uZWwpCit7CisJaW50IGNoYW4gPSBzdC0+bG9naWMycGh5c1tjaGFubmVsXTsKKworCXJldHVybiBpODI1NF9yZWFkX3N0YXR1c19sb3coc3QtPmlvYmFzZSwgY2hhbik7Cit9CisKK3N0YXRpYyBpbnQgZGFzMDhfY291bnRlcl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IGluc24tPmNoYW5zcGVjOworCisJLy9wcmludGsoIlJlYWRpbmcgY291bnRlciBjaGFubmVsICVkICIsY2hhbik7CisJZGF0YVswXSA9IGk4MjU0X3JlYWRfY2hhbm5lbCgmZGV2cHJpdi0+aTgyNTQsIGNoYW4pOworCS8vcHJpbnRrKCI9PiAweCUwOFhcbiIsZGF0YVswXSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkYXMwOF9jb3VudGVyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IGluc24tPmNoYW5zcGVjOworCisJLy9wcmludGsoIldyaXRpbmcgY291bnRlciBjaGFubmVsICVkIHdpdGggMHglMDRYXG4iLGNoYW4sZGF0YVswXSk7CisJaTgyNTRfd3JpdGVfY2hhbm5lbCgmZGV2cHJpdi0+aTgyNTQsIGNoYW4sIGRhdGFbMF0pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZGFzMDhfY291bnRlcl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gaW5zbi0+Y2hhbnNwZWM7CisKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfU0VUX0NPVU5URVJfTU9ERToKKwkJaTgyNTRfc2V0X21vZGUoJmRldnByaXYtPmk4MjU0LCBjaGFuLCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR184MjU0X1JFQURfU1RBVFVTOgorCQlkYXRhWzFdID0gaTgyNTRfcmVhZF9zdGF0dXMoJmRldnByaXYtPmk4MjU0LCBjaGFuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkYXMwOF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RhczA4ID0geworICAgICAgZHJpdmVyX25hbWU6IERSVl9OQU1FLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRhczA4X2F0dGFjaCwKKyAgICAgIGRldGFjaDpkYXMwOF9jb21tb25fZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomZGFzMDhfYm9hcmRzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGRhczA4X2JvYXJkcykgLworCQlzaXplb2Yoc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCksCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBkYXMwOF9ib2FyZF9zdHJ1Y3QpLAorfTsKKworaW50IGRhczA4X2NvbW1vbl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCByZXQ7CisKKwkvLyBhbGxvY2F0ZSBpb3BvcnRzIGZvciBub24tcGNtY2lhLCBub24tcGNpIGJvYXJkcworCWlmICgodGhpc2JvYXJkLT5idXN0eXBlICE9IHBjbWNpYSkgJiYgKHRoaXNib2FyZC0+YnVzdHlwZSAhPSBwY2kpKSB7CisJCXByaW50aygiIGlvYmFzZSAweCVseFxuIiwgaW9iYXNlKTsKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIHRoaXNib2FyZC0+aW9zaXplLCBEUlZfTkFNRSkpIHsKKwkJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNikpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFpICovCisJaWYgKHRoaXNib2FyZC0+YWkpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCQkvKiBYWFggc29tZSBib2FyZHMgYWN0dWFsbHkgaGF2ZSBkaWZmZXJlbnRpYWwgaW5wdXRzIGluc3RlYWQgb2Ygc2luZ2xlIGVuZGVkLgorCQkgKiAgVGhlIGRyaXZlciBkb2VzIG5vdGhpbmcgd2l0aCBhcmVmcyB0aG91Z2gsIHNvIGl0J3Mgbm8gYmlnIGRlYWwuICovCisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJCXMtPm5fY2hhbiA9IDg7CisJCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX25iaXRzKSAtIDE7CisJCXMtPnJhbmdlX3RhYmxlID0gZGFzMDhfYWlfbHJhbmdlc1t0aGlzYm9hcmQtPmFpX3BnXTsKKwkJcy0+aW5zbl9yZWFkID0gdGhpc2JvYXJkLT5haTsKKwkJZGV2cHJpdi0+cGdfZ2Fpbmxpc3QgPSBkYXMwOF9nYWlubGlzdHNbdGhpc2JvYXJkLT5haV9wZ107CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBhbyAqLworCWlmICh0aGlzYm9hcmQtPmFvKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKy8vIFhYWCBsYWNrcyByZWFkLWJhY2sgaW5zbgorCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IDI7CisJCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFvX25iaXRzKSAtIDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXI1OworCQlzLT5pbnNuX3dyaXRlID0gdGhpc2JvYXJkLT5hbzsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpICovCisJaWYgKHRoaXNib2FyZC0+ZGkpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJCXMtPm5fY2hhbiA9ICh0aGlzYm9hcmQtPmRpID09IGRhczA4X2RpX3JiaXRzKSA/IDMgOiA4OworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gdGhpc2JvYXJkLT5kaTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCS8qIGRvICovCisJaWYgKHRoaXNib2FyZC0+ZG9fKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmRvX25jaGFuOworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gdGhpc2JvYXJkLT5kb187CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwkvKiA4MjU1ICovCisJaWYgKHRoaXNib2FyZC0+aTgyNTVfb2Zmc2V0ICE9IDApIHsKKwkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsICh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArCisJCQkJdGhpc2JvYXJkLT5pODI1NV9vZmZzZXQpKTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA1OworCS8qIDgyNTQgKi8KKwlpZiAodGhpc2JvYXJkLT5pODI1NF9vZmZzZXQgIT0gMCkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSAzOworCQlzLT5tYXhkYXRhID0gMHhGRkZGOworCQlzLT5pbnNuX3JlYWQgPSBkYXMwOF9jb3VudGVyX3JlYWQ7CisJCXMtPmluc25fd3JpdGUgPSBkYXMwOF9jb3VudGVyX3dyaXRlOworCQlzLT5pbnNuX2NvbmZpZyA9IGRhczA4X2NvdW50ZXJfY29uZmlnOworCQkvKiBTZXQtdXAgdGhlIDgyNTQgc3RydWN0dXJlICovCisJCWRldnByaXYtPmk4MjU0LmNoYW5uZWxzID0gMzsKKwkJZGV2cHJpdi0+aTgyNTQubG9naWMycGh5c1swXSA9IDA7CisJCWRldnByaXYtPmk4MjU0LmxvZ2ljMnBoeXNbMV0gPSAxOworCQlkZXZwcml2LT5pODI1NC5sb2dpYzJwaHlzWzJdID0gMjsKKwkJZGV2cHJpdi0+aTgyNTQuaW9iYXNlID0gaW9iYXNlICsgdGhpc2JvYXJkLT5pODI1NF9vZmZzZXQ7CisJCWRldnByaXYtPmk4MjU0Lm1vZGVbMF0gPQorCQkJZGV2cHJpdi0+aTgyNTQubW9kZVsxXSA9CisJCQlkZXZwcml2LT5pODI1NC5tb2RlWzJdID0gSTgyNTRfTU9ERTAgfCBJODI1NF9CSU5BUlk7CisJCWk4MjU0X2luaXRpYWxpemUoJmRldnByaXYtPmk4MjU0KTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczA4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJdW5zaWduZWQgbG9uZyBwY2lfaW9iYXNlID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKyNlbmRpZgorCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBkYXMwOF9wcml2YXRlX3N0cnVjdCkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlwcmludGsoImNvbWVkaSVkOiBkYXMwODogIiwgZGV2LT5taW5vcik7CisJLy8gZGVhbCB3aXRoIGEgcGNpIGJvYXJkCisJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSA9PSBwY2kpIHsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCXByaW50aygiYnVzICVpIHNsb3QgJWkgIiwKKwkJCQlpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0pOworCQl9CisJCXByaW50aygiXG4iKTsKKwkJLy8gZmluZCBjYXJkCisJCWZvciAocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCQkJcGRldiAhPSBOVUxMOworCQkJcGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkZXYpKSB7CisJCQlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQ09NUFVURVJCT0FSRFMKKwkJCQkmJiBwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QQ0lEQVMwOCkgeworCQkJCWlmIChpdC0+b3B0aW9uc1swXSB8fCBpdC0+b3B0aW9uc1sxXSkgeworCQkJCQlpZiAocGRldi0+YnVzLT5udW1iZXIgPT0gaXQtPm9wdGlvbnNbMF0KKwkJCQkJCSYmIFBDSV9TTE9UKHBkZXYtPmRldmZuKSA9PQorCQkJCQkJaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCWlmICghcGRldikgeworCQkJcHJpbnRrKCJObyBwY2kgZGFzMDggY2FyZHMgZm91bmRcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJZGV2cHJpdi0+cGRldiA9IHBkZXY7CisJCS8vIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXNlcnZlIEkvTyBzcGFjZXMKKwkJaWYgKGNvbWVkaV9wY2lfZW5hYmxlKHBkZXYsIERSVl9OQU1FKSkgeworCQkJcHJpbnRrKCIgRXJyb3IgZW5hYmxpbmcgUENJIGRldmljZSBhbmQgcmVxdWVzdGluZyByZWdpb25zXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCS8vIHJlYWQgYmFzZSBhZGRyZXNzZXMKKwkJcGNpX2lvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKKwkJaW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDIpOworCQlwcmludGsoInBjaWJhc2UgMHglbHggIGlvYmFzZSAweCVseFxuIiwgcGNpX2lvYmFzZSwgaW9iYXNlKTsKKwkJZGV2cHJpdi0+cGNpX2lvYmFzZSA9IHBjaV9pb2Jhc2U7CisjaWYgMAorLyogV2UgY291bGQgZW5hYmxlIHRvIHBjaS1kYXMwOCdzIGludGVycnVwdCBoZXJlIHRvIG1ha2UgaXQgcG9zc2libGUKKyAqIHRvIGRvIHRpbWVkIGlucHV0IGluIHRoaXMgZHJpdmVyLCBidXQgdGhlcmUgaXMgbGl0dGxlIHBvaW50IHNpbmNlCisgKiBjb252ZXJzaW9ucyB3b3VsZCBoYXZlIHRvIGJlIHN0YXJ0ZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyCisgKiBzbyB5b3UgbWlnaHQgYXMgd2VsbCB1c2UgY29tZWRpX3J0X3RpbWVyIHRvIGVtdWxhdGUgY29tbWFuZHMKKyAqLworCQkvKiBzZXQgc291cmNlIG9mIGludGVycnVwdCB0cmlnZ2VyIHRvIGNvdW50ZXIyIG91dHB1dCAqLworCQlvdXRiKENOVFJMX0lOVFIgfCBDTlRSTF9ESVIsIHBjaV9pb2Jhc2UgKyBDTlRSTCk7CisJCS8qIEVuYWJsZSBsb2NhbCBpbnRlcnJ1cHQgMSBhbmQgcGNpIGludGVycnVwdCAqLworCQlvdXR3KElOVFIxX0VOQUJMRSB8IFBDSV9JTlRSX0VOQUJMRSwgcGNpX2lvYmFzZSArIElOVENTUik7CisjZW5kaWYKKyNlbHNlCS8qIENPTkZJR19DT01FRElfUENJICovCisJCXByaW50aygidGhpcyBkcml2ZXIgaGFzIG5vdCBiZWVuIGJ1aWx0IHdpdGggUENJIHN1cHBvcnQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYJLyogQ09ORklHX0NPTUVESV9QQ0kgKi8KKwl9IGVsc2UgeworCQlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwl9CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIGRhczA4X2NvbW1vbl9hdHRhY2goZGV2LCBpb2Jhc2UpOworfQorCitpbnQgZGFzMDhfY29tbW9uX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogZGFzMDg6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5zdWJkZXZpY2VzKQorCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgNCk7CisKKwkvLyBkZWFsbG9jYXRlIGlvcG9ydHMgZm9yIG5vbi1wY21jaWEsIG5vbi1wY2kgYm9hcmRzCisJaWYgKCh0aGlzYm9hcmQtPmJ1c3R5cGUgIT0gcGNtY2lhKSAmJiAodGhpc2JvYXJkLT5idXN0eXBlICE9IHBjaSkpIHsKKwkJaWYgKGRldi0+aW9iYXNlKQorCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNib2FyZC0+aW9zaXplKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXZwcml2LT5wZGV2KSB7CisJCQlpZiAoZGV2cHJpdi0+cGNpX2lvYmFzZSkgeworCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wZGV2KTsKKwkJCX0KKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBkZXYpOworCQl9CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXMwOCwgZGFzMDhfcGNpX3RhYmxlKTsKKyNlbHNlCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RhczA4KTsKKyNlbmRpZgorCitFWFBPUlRfU1lNQk9MX0dQTChkYXMwOF9jb21tb25fYXR0YWNoKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGRhczA4X2NvbW1vbl9kZXRhY2gpOworI2lmZGVmIENPTkZJR19DT01FRElfUENNQ0lBCitFWFBPUlRfU1lNQk9MX0dQTChkYXMwOF9jc19ib2FyZHMpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDguaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMwOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MDg5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDguaApAQCAtMCwwICsxLDc4IEBACisvKgorICAgIGRhczA4LmgKKworICAgIEhlYWRlciBmb3IgZGFzMDguYyBhbmQgZGFzMDhfY3MuYworCisgICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaWZuZGVmIF9EQVMwOF9ICisjZGVmaW5lIF9EQVMwOF9ICisKK2VudW0gZGFzMDhfYnVzdHlwZSB7IGlzYSwgcGNpLCBwY21jaWEsIHBjMTA0IH07CisvLyBkaWZmZXJlbnQgd2F5cyBhaSBkYXRhIGlzIGVuY29kZWQgaW4gZmlyc3QgdHdvIHJlZ2lzdGVycworZW51bSBkYXMwOF9haV9lbmNvZGluZyB7IGRhczA4X2VuY29kZTEyLCBkYXMwOF9lbmNvZGUxNiwgZGFzMDhfcGNtX2VuY29kZTEyIH07CitlbnVtIGRhczA4X2xyYW5nZSB7IGRhczA4X3BnX25vbmUsIGRhczA4X2JpcG9sYXI1LCBkYXMwOF9wZ2gsIGRhczA4X3BnbCwKKwkJZGFzMDhfcGdtIH07CisKK3N0cnVjdCBkYXMwOF9ib2FyZF9zdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IGlkOwkvLyBpZCBmb3IgcGNpL3BjbWNpYSBib2FyZHMKKwllbnVtIGRhczA4X2J1c3R5cGUgYnVzdHlwZTsKKwl2b2lkICphaTsKKwl1bnNpZ25lZCBpbnQgYWlfbmJpdHM7CisJZW51bSBkYXMwOF9scmFuZ2UgYWlfcGc7CisJZW51bSBkYXMwOF9haV9lbmNvZGluZyBhaV9lbmNvZGluZzsKKwl2b2lkICphbzsKKwl1bnNpZ25lZCBpbnQgYW9fbmJpdHM7CisJdm9pZCAqZGk7CisJdm9pZCAqZG9fOworCXVuc2lnbmVkIGludCBkb19uY2hhbjsKKwl1bnNpZ25lZCBpbnQgaTgyNTVfb2Zmc2V0OworCXVuc2lnbmVkIGludCBpODI1NF9vZmZzZXQ7CisJdW5zaWduZWQgaW50IGlvc2l6ZTsJLy8gbnVtYmVyIG9mIGlvcG9ydHMgdXNlZAorfTsKKworc3RydWN0IGk4MjU0X3N0cnVjdCB7CisJaW50IGNoYW5uZWxzOwkJLy8gYXZhaWxhYmxlIGNoYW5uZWxzLiBTb21lIGNvdWxkIGJlIHVzZWQgaW50ZXJuYWxseS4KKwlpbnQgbG9naWMycGh5c1szXTsJLy8gdG8ga25vdyB3aGljaCBwaHlzaWNhbCBjaGFubmVsIGlzLgorCWludCBtb2RlWzNdOwkJLy8gdGhlIGluZGV4IGlzIHRoZSByZWFsIGNvdW50ZXIuCisJdW5zaWduZWQgaW50IGlvYmFzZTsKK307CisKKyNkZWZpbmUgSTgyNTRfQ05UMCAwCisjZGVmaW5lIEk4MjU0X0NOVDEgMQorI2RlZmluZSBJODI1NF9DTlQyIDIKKyNkZWZpbmUgSTgyNTRfQ1RSTCAzCisKK3N0cnVjdCBkYXMwOF9wcml2YXRlX3N0cnVjdCB7CisJdW5zaWduZWQgaW50IGRvX211eF9iaXRzOwkvLyBiaXRzIGZvciBkby9tdXggcmVnaXN0ZXIgb24gYm9hcmRzIHdpdGhvdXQgc2VwZXJhdGUgZG8gcmVnaXN0ZXIKKwl1bnNpZ25lZCBpbnQgZG9fYml0czsJLy8gYml0cyBmb3IgZG8gcmVnaXN0ZXIgb24gYm9hcmRzIHdpdGggcmVnaXN0ZXIgZGVkaWNhdGVkIHRvIGRpZ2l0YWwgb3V0IG9ubHkKKwljb25zdCB1bnNpZ25lZCBpbnQgKnBnX2dhaW5saXN0OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwkvLyBzdHJ1Y3QgZm9yIHBjaS1kYXMwOAorCXVuc2lnbmVkIGludCBwY2lfaW9iYXNlOwkvLyBhZGRpdGlvbmFsIGJhc2UgYWRkcmVzcyBmb3IgcGNpLWRhczA4CisJc3RydWN0IGk4MjU0X3N0cnVjdCBpODI1NDsKK307CisKKyNkZWZpbmUgTlVNX0RBUzA4X0NTX0JPQVJEUyAyCitleHRlcm4gc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCBkYXMwOF9jc19ib2FyZHNbTlVNX0RBUzA4X0NTX0JPQVJEU107CisKK2ludCBkYXMwOF9jb21tb25fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBsb25nIGlvYmFzZSk7CitpbnQgZGFzMDhfY29tbW9uX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKKyNlbmRpZiAvKiBfREFTMDhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTZjODg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMKQEAgLTAsMCArMSw0ODggQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYworICAgIERBUzA4IGRyaXZlcgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiwyMDAzIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqLworLyoKK0RyaXZlcjogZGFzMDhfY3MKK0Rlc2NyaXB0aW9uOiBEQVMtMDggUENNQ0lBIGJvYXJkcworQXV0aG9yOiBXYXJyZW4gSmFzcGVyLCBkcywgRnJhbmsgSGVzcworRGV2aWNlczogW0NvbXB1dGVyQm9hcmRzXSBQQ00tREFTMDggKHBjbS1kYXMwOCkKK1N0YXR1czogd29ya3MKKworVGhpcyBpcyB0aGUgUENNQ0lBLXNwZWNpZmljIHN1cHBvcnQgc3BsaXQgb2ZmIGZyb20gdGhlCitkYXMwOCBkcml2ZXIuCisKK09wdGlvbnMgKGZvciBwY20tZGFzMDgpOgorICAgICAgICBOT05FCisKK0NvbW1hbmQgc3VwcG9ydCBkb2VzIG5vdCBleGlzdCwgYnV0IGNvdWxkIGJlIGFkZGVkIGZvciB0aGlzIGJvYXJkLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgImRhczA4LmgiCisKKy8vIHBjbWNpYSBpbmNsdWRlcworI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvZHMuaD4KKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpjdXJfZGV2ID0gTlVMTDsKKworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGFzMDhfYm9hcmRfc3RydWN0ICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBpbnQgZGFzMDhfY3NfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kYXMwOF9jcyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkYXMwOF9jcyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGFzMDhfY3NfYXR0YWNoLAorICAgICAgZGV0YWNoOmRhczA4X2NvbW1vbl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZkYXMwOF9jc19ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoZGFzMDhfY3NfYm9hcmRzKSAvCisJCXNpemVvZihzdHJ1Y3QgZGFzMDhfYm9hcmRfc3RydWN0KSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IGRhczA4X2JvYXJkX3N0cnVjdCksCit9OworCitzdGF0aWMgaW50IGRhczA4X2NzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gY3VyX2RldjsJLy8gWFhYIGhhY2sKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZGFzMDhfcHJpdmF0ZV9zdHJ1Y3QpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcHJpbnRrKCJjb21lZGklZDogZGFzMDhfY3M6ICIsIGRldi0+bWlub3IpOworCS8vIGRlYWwgd2l0aCBhIHBjaSBib2FyZAorCisJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSA9PSBwY21jaWEpIHsKKwkJaWYgKGxpbmsgPT0gTlVMTCkgeworCQkJcHJpbnRrKCIgbm8gcGNtY2lhIGNhcmRzIGZvdW5kXG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWlvYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwl9IGVsc2UgeworCQlwcmludGsoIiBidWchIGJvYXJkIGRvZXMgbm90IGhhdmUgUENNQ0lBIGJ1c3R5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gZGFzMDhfY29tbW9uX2F0dGFjaChkZXYsIGlvYmFzZSk7Cit9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhlIGZvbGxvd2luZyBwY21jaWEgY29kZSBmb3IgdGhlIHBjbS1kYXMwOCBpcyBhZGFwdGVkIGZyb20gdGhlCisgICAgZHVtbXlfY3MuYyBkcml2ZXIgb2YgdGhlIExpbnV4IFBDTUNJQSBDYXJkIFNlcnZpY2VzIHBhY2thZ2UuCisKKyAgICBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKKyAgICA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcworICAgIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAgIEFsbCB0aGUgUENNQ0lBIG1vZHVsZXMgdXNlIFBDTUNJQV9ERUJVRyB0byBjb250cm9sIGRlYnVnZ2luZy4gIElmCisgICB5b3UgZG8gbm90IGRlZmluZSBQQ01DSUFfREVCVUcgYXQgYWxsLCBhbGwgdGhlIGRlYnVnIGNvZGUgd2lsbCBiZQorICAgbGVmdCBvdXQuICBJZiB5b3UgY29tcGlsZSB3aXRoIFBDTUNJQV9ERUJVRz0wLCB0aGUgZGVidWcgY29kZSB3aWxsCisgICBiZSBwcmVzZW50IGJ1dCBkaXNhYmxlZCAtLSBidXQgaXQgY2FuIHRoZW4gYmUgZW5hYmxlZCBmb3Igc3BlY2lmaWMKKyAgIG1vZHVsZXMgYXQgbG9hZCB0aW1lIHdpdGggYSAncGNfZGVidWc9Iycgb3B0aW9uIHRvIGluc21vZC4KKyovCisKKyNpZmRlZiBQQ01DSUFfREVCVUcKK3N0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Cittb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7CisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCitzdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9CisJImRhczA4LmMgcGNtY2lhIGNvZGUgKEZyYW5rIEhlc3MpLCBtb2RpZmllZCBmcm9tIGR1bW15X2NzLmMgMS4zMSAyMDAxLzA4LzI0IDEyOjEzOjEzIChEYXZpZCBIaW5kcykiOworI2Vsc2UKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK3N0YXRpYyB2b2lkIGRhczA4X3BjbWNpYV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIHZvaWQgZGFzMDhfcGNtY2lhX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIGludCBkYXMwOF9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworc3RhdGljIGludCBkYXMwOF9wY21jaWFfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CisKKy8qCisgICBUaGUgYXR0YWNoKCkgYW5kIGRldGFjaCgpIGVudHJ5IHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIGRlc3Ryb3kKKyAgICJpbnN0YW5jZXMiIG9mIHRoZSBkcml2ZXIsIHdoZXJlIGVhY2ggaW5zdGFuY2UgcmVwcmVzZW50cyBldmVyeXRoaW5nCisgICBuZWVkZWQgdG8gbWFuYWdlIG9uZSBhY3R1YWwgUENNQ0lBIGNhcmQuCisqLworCitzdGF0aWMgaW50IGRhczA4X3BjbWNpYV9hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CitzdGF0aWMgdm9pZCBkYXMwOF9wY21jaWFfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworCisvKgorICAgWW91J2xsIGFsc28gbmVlZCB0byBwcm90b3R5cGUgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGFjdHVhbGx5CisgICBiZSB1c2VkIHRvIHRhbGsgdG8geW91ciBkZXZpY2UuICBTZWUgJ21lbW9yeV9jcycgZm9yIGEgZ29vZCBleGFtcGxlCisgICBvZiBhIGZ1bGx5IHNlbGYtc3VmZmljaWVudCBkcml2ZXI7IHRoZSBvdGhlciBkcml2ZXJzIHJlbHkgbW9yZSBvcgorICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgorKi8KKworLyoKKyAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKKyAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCisgICBkYXRhYmFzZS4KKyovCisKK3N0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gInBjbS1kYXMwOCI7CisKK3N0cnVjdCBsb2NhbF9pbmZvX3QgeworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWRldl9ub2RlX3Qgbm9kZTsKKwlpbnQgc3RvcDsKKwlzdHJ1Y3QgYnVzX29wZXJhdGlvbnMgKmJ1czsKK307CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGFzMDhfcGNtY2lhX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCisgICAgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCisgICAgd2l0aCBDYXJkIFNlcnZpY2VzLgorCisgICAgVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CisgICAgY29uZmlndXJlIHRoZSBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEKKyAgICBjYXJkIGluc2VydGlvbiBldmVudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgZGFzMDhfcGNtY2lhX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbDsKKworCURFQlVHKDAsICJkYXMwOF9wY21jaWFfYXR0YWNoKClcbiIpOworCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KKwlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvY2FsKQorCQlyZXR1cm4gLUVOT01FTTsKKwlsb2NhbC0+bGluayA9IGxpbms7CisJbGluay0+cHJpdiA9IGxvY2FsOworCisJLyogSW50ZXJydXB0IHNldHVwICovCisJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9FWENMVVNJVkU7CisJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworCWxpbmstPmlycS5IYW5kbGVyID0gTlVMTDsKKworCS8qCisJICAgR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKKwkgICBjbGllbnQsIHdlIGFzc3VtZSB2ZXJ5IGxpdHRsZSwgYW5kIHJlbHkgb24gdGhlIENJUyBmb3IgYWxtb3N0CisJICAgZXZlcnl0aGluZy4gIEluIG1vc3QgY2xpZW50cywgbWFueSBkZXRhaWxzIChpLmUuLCBudW1iZXIsIHNpemVzLAorCSAgIGFuZCBhdHRyaWJ1dGVzIG9mIElPIHdpbmRvd3MpIGFyZSBmaXhlZCBieSB0aGUgbmF0dXJlIG9mIHRoZQorCSAgIGRldmljZSwgYW5kIGNhbiBiZSBoYXJkLXdpcmVkIGhlcmUuCisJICovCisJbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gMDsKKwlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKKworCWN1cl9kZXYgPSBsaW5rOworCisJZGFzMDhfcGNtY2lhX2NvbmZpZyhsaW5rKTsKKworCXJldHVybiAwOworfQkJCQkvKiBkYXMwOF9wY21jaWFfYXR0YWNoICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhpcyBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIuICBUaGUgZGV2aWNlIGlzIGRlLXJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKKyAgICBzdHJ1Y3R1cmVzIGFyZSBmcmVlZC4gIE90aGVyd2lzZSwgdGhlIHN0cnVjdHVyZXMgd2lsbCBiZSBmcmVlZAorICAgIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRhczA4X3BjbWNpYV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisKKwlERUJVRygwLCAiZGFzMDhfcGNtY2lhX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisKKwlpZiAobGluay0+ZGV2X25vZGUpIHsKKwkJKChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIGxpbmstPnByaXYpLT5zdG9wID0gMTsKKwkJZGFzMDhfcGNtY2lhX3JlbGVhc2UobGluayk7CisJfQorCisJLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBzdHJ1Y3QgbG9jYWxfaW5mb190IHN0cnVjdCAqLworCWlmIChsaW5rLT5wcml2KQorCQlrZnJlZShsaW5rLT5wcml2KTsKKworfQkJCQkvKiBkYXMwOF9wY21jaWFfZGV0YWNoICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGFzMDhfcGNtY2lhX2NvbmZpZygpIGlzIHNjaGVkdWxlZCB0byBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudAorICAgIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQorICAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRhczA4X3BjbWNpYV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKKwl0dXBsZV90IHR1cGxlOworCWNpc3BhcnNlX3QgcGFyc2U7CisJaW50IGxhc3RfZm4sIGxhc3RfcmV0OworCXVfY2hhciBidWZbNjRdOworCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OworCisJREVCVUcoMCwgImRhczA4X3BjbWNpYV9jb25maWcoMHglcClcbiIsIGxpbmspOworCisJLyoKKwkgICBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24KKwkgICByZWdpc3RlcnMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCWxhc3RfZm4gPSBHZXRGaXJzdFR1cGxlOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApCisJCWdvdG8gY3NfZmFpbGVkOworCWxhc3RfZm4gPSBHZXRUdXBsZURhdGE7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKSAhPSAwKQorCQlnb3RvIGNzX2ZhaWxlZDsKKwlsYXN0X2ZuID0gUGFyc2VUdXBsZTsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkgIT0gMCkKKwkJZ290byBjc19mYWlsZWQ7CisJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CisJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOworCisJLyoKKwkgICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLAorCSAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKKwkgICB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csIGFuZCBpbnRlcnJ1cHQgc2V0dGluZ3MuCisKKwkgICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZSBjYXJkIHRvIGJlIGNvbmZpZ3VyZWQ6IHdlIHVzZQorCSAgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCisJICAgdGhpcyB3b3VsZCB3b3JrIGZvciBhbnkgUENNQ0lBIGNhcmQsIGJ1dCBpdCByZXF1aXJlcyBhIGNvbXBsZXRlCisJICAgYW5kIGFjY3VyYXRlIENJUy4gIEluIHByYWN0aWNlLCBhIGRyaXZlciB1c3VhbGx5ICJrbm93cyIgbW9zdCBvZgorCSAgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKKwkgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJbGFzdF9mbiA9IEdldEZpcnN0VHVwbGU7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gMCkKKwkJZ290byBjc19mYWlsZWQ7CisJd2hpbGUgKDEpIHsKKwkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKSAhPSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkgIT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCisJCQlkZmx0ID0gKmNmZzsKKwkJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CisKKwkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisvKglpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7CisJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworCQlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOworCX0KKyovCisJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCQlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpCisJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOworCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOworCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfQVVUTzsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT184QklUKSkKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF8xNjsKKwkJCWlmICghKGlvLT5mbGFncyAmIENJU1RQTF9JT18xNkJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCX0KKwkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSAhPSAwKQorCQkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJfQorCisJCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KKwkJYnJlYWs7CisKKwkgICAgICBuZXh0X2VudHJ5OgorCQlsYXN0X2ZuID0gR2V0TmV4dFR1cGxlOworCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApCisJCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKSB7CisJCWxhc3RfZm4gPSBSZXF1ZXN0SVJROworCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKSAhPSAwKQorCQkJZ290byBjc19mYWlsZWQ7CisJfQorCisJLyoKKwkgICBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAorCSAgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKKwkgICBjYXJkIGFuZCBob3N0IGludGVyZmFjZSBpbnRvICJNZW1vcnkgYW5kIElPIiBtb2RlLgorCSAqLworCWxhc3RfZm4gPSBSZXF1ZXN0Q29uZmlndXJhdGlvbjsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpICE9IDApCisJCWdvdG8gY3NfZmFpbGVkOworCisJLyoKKwkgICBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZCB0byBiZQorCSAgIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldi4KKwkgKi8KKwlzcHJpbnRmKGRldi0+bm9kZS5kZXZfbmFtZSwgInBjbS1kYXMwOCIpOworCWRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7CisJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOworCisJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLworCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMngiLAorCQlkZXYtPm5vZGUuZGV2X25hbWUsIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgpOworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJCXByaW50aygiLCBpcnEgJXUiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCisJCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAorCQkJbGluay0+aW8uQmFzZVBvcnQxICsgbGluay0+aW8uTnVtUG9ydHMxIC0gMSk7CisJaWYgKGxpbmstPmlvLk51bVBvcnRzMikKKwkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAorCQkJbGluay0+aW8uQmFzZVBvcnQyICsgbGluay0+aW8uTnVtUG9ydHMyIC0gMSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuOworCisgICAgICBjc19mYWlsZWQ6CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOworCWRhczA4X3BjbWNpYV9yZWxlYXNlKGxpbmspOworCit9CQkJCS8qIGRhczA4X3BjbWNpYV9jb25maWcgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBBZnRlciBhIGNhcmQgaXMgcmVtb3ZlZCwgZGFzMDhfcGNtY2lhX3JlbGVhc2UoKSB3aWxsIHVucmVnaXN0ZXIgdGhlCisgICAgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCisgICAgc3RpbGwgb3BlbiwgdGhpcyB3aWxsIGJlIHBvc3Rwb25lZCB1bnRpbCBpdCBpcyBjbG9zZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCBkYXMwOF9wY21jaWFfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlERUJVRygwLCAiZGFzMDhfcGNtY2lhX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKK30JCQkJLyogZGFzMDhfcGNtY2lhX3JlbGVhc2UgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBUaGUgY2FyZCBzdGF0dXMgZXZlbnQgaGFuZGxlci4gIE1vc3RseSwgdGhpcyBzY2hlZHVsZXMgb3RoZXIKKyAgICBzdHVmZiB0byBydW4gYWZ0ZXIgYW4gZXZlbnQgaXMgcmVjZWl2ZWQuCisKKyAgICBXaGVuIGEgQ0FSRF9SRU1PVkFMIGV2ZW50IGlzIHJlY2VpdmVkLCB3ZSBpbW1lZGlhdGVseSBzZXQgYQorICAgIHByaXZhdGUgZmxhZyB0byBibG9jayBmdXR1cmUgYWNjZXNzZXMgdG8gdGhpcyBkZXZpY2UuICBBbGwgdGhlCisgICAgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgYWNjZXNzIHRoZSBkZXZpY2Ugc2hvdWxkIGNoZWNrIHRoaXMgZmxhZworICAgIHRvIG1ha2Ugc3VyZSB0aGUgY2FyZCBpcyBzdGlsbCBwcmVzZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBkYXMwOF9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CisJLyogTWFyayB0aGUgZGV2aWNlIGFzIHN0b3BwZWQsIHRvIGJsb2NrIElPIHVudGlsIGxhdGVyICovCisJbG9jYWwtPnN0b3AgPSAxOworCisJcmV0dXJuIDA7Cit9CQkJCS8qIGRhczA4X3BjbWNpYV9zdXNwZW5kICovCisKK3N0YXRpYyBpbnQgZGFzMDhfcGNtY2lhX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CisKKwlsb2NhbC0+c3RvcCA9IDA7CisJcmV0dXJuIDA7Cit9CQkJCS8qIGRhczA4X3BjbWNpYV9yZXN1bWUgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBkYXMwOF9jc19pZF90YWJsZVtdID0geworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDFjNSwgMHg0MDAxKSwKKwlQQ01DSUFfREVWSUNFX05VTEwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBkYXMwOF9jc19pZF90YWJsZSk7CisKK3N0cnVjdCBwY21jaWFfZHJpdmVyIGRhczA4X2NzX2RyaXZlciA9IHsKKwkucHJvYmUgPSBkYXMwOF9wY21jaWFfYXR0YWNoLAorCS5yZW1vdmUgPSBkYXMwOF9wY21jaWFfZGV0YWNoLAorCS5zdXNwZW5kID0gZGFzMDhfcGNtY2lhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGRhczA4X3BjbWNpYV9yZXN1bWUsCisJLmlkX3RhYmxlID0gZGFzMDhfY3NfaWRfdGFibGUsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmRydiA9IHsKKwkJCS5uYW1lID0gZGV2X2luZm8sCisJCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2RhczA4X3BjbWNpYV9jcyh2b2lkKQoreworCURFQlVHKDAsICIlc1xuIiwgdmVyc2lvbik7CisJcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmZGFzMDhfY3NfZHJpdmVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfZGFzMDhfcGNtY2lhX2NzKHZvaWQpCit7CisJREVCVUcoMCwgImRhczA4X3BjbWNpYV9jczogdW5sb2FkaW5nXG4iKTsKKwlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJmRhczA4X2NzX2RyaXZlcik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRhczA4X2NzX2luaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGluaXRfZGFzMDhfcGNtY2lhX2NzKCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2RhczA4X2NzKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRhczA4X2NzX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJZXhpdF9kYXMwOF9wY21jaWFfY3MoKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kYXMwOF9jcyk7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK21vZHVsZV9pbml0KGRhczA4X2NzX2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KGRhczA4X2NzX2V4aXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2YjA0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxNi5jCkBAIC0wLDAgKzEsMTczMCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9kYXMxNi5jCisgICAgREFTMTYgZHJpdmVyCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwMCBDaHJpcyBSLiBCYXVnaGVyIDxiYXVnaGVyQGVudGVyYWN0LmNvbT4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKK0RyaXZlcjogZGFzMTYKK0Rlc2NyaXB0aW9uOiBEQVMxNiBjb21wYXRpYmxlIGJvYXJkcworQXV0aG9yOiBTYW0gTW9vcmUsIFdhcnJlbiBKYXNwZXIsIGRzLCBDaHJpcyBCYXVnaGVyLCBGcmFuayBIZXNzLCBSb21hbiBGaWV0emUKK0RldmljZXM6IFtLZWl0aGxleSBNZXRyYWJ5dGVdIERBUy0xNiAoZGFzLTE2KSwgREFTLTE2RyAoZGFzLTE2ZyksCisgIERBUy0xNkYgKGRhcy0xNmYpLCBEQVMtMTIwMSAoZGFzLTEyMDEpLCBEQVMtMTIwMiAoZGFzLTEyMDIpLAorICBEQVMtMTQwMSAoZGFzLTE0MDEpLCBEQVMtMTQwMiAoZGFzLTE0MDIpLCBEQVMtMTYwMSAoZGFzLTE2MDEpLAorICBEQVMtMTYwMiAoZGFzLTE2MDIpLAorICBbQ29tcHV0ZXJCb2FyZHNdIFBDMTA0LURBUzE2L0pSIChwYzEwNC1kYXMxNmpyKSwKKyAgUEMxMDQtREFTMTZKUi8xNiAocGMxMDQtZGFzMTZqci8xNiksCisgIENJTy1EQVMxNkpSLzE2IChjaW8tZGFzMTZqci8xNiksCisgIENJTy1EQVMxNi9KUiAoY2lvLWRhczE2L2pyKSwgQ0lPLURBUzE0MDEvMTIgKGNpby1kYXMxNDAxLzEyKSwKKyAgQ0lPLURBUzE0MDIvMTIgKGNpby1kYXMxNDAyLzEyKSwgQ0lPLURBUzE0MDIvMTYgKGNpby1kYXMxNDAyLzE2KSwKKyAgQ0lPLURBUzE2MDEvMTIgKGNpby1kYXMxNjAxLzEyKSwgQ0lPLURBUzE2MDIvMTIgKGNpby1kYXMxNjAyLzEyKSwKKyAgQ0lPLURBUzE2MDIvMTYgKGNpby1kYXMxNjAyLzE2KSwgQ0lPLURBUzE2LzMzMCAoY2lvLWRhczE2LzMzMCkKK1N0YXR1czogd29ya3MKK1VwZGF0ZWQ6IDIwMDMtMTAtMTIKKworQSByZXdyaXRlIG9mIHRoZSBkYXMxNiBhbmQgZGFzMTYwMCBkcml2ZXJzLgorT3B0aW9uczoKKwlbMF0gLSBiYXNlIGlvIGFkZHJlc3MKKwlbMV0gLSBpcnEgKGRvZXMgbm90aGluZywgaXJxIGlzIG5vdCB1c2VkIGFueW1vcmUpCisJWzJdIC0gZG1hIChvcHRpb25hbCwgcmVxdWlyZWQgZm9yIGNvbWVkaV9jb21tYW5kIHN1cHBvcnQpCisJWzNdIC0gbWFzdGVyIGNsb2NrIHNwZWVkIGluIE1IeiAob3B0aW9uYWwsIDEgb3IgMTAsIGlnbm9yZWQgaWYKKwkJYm9hcmQgY2FuIHByb2JlIGNsb2NrLCBkZWZhdWx0cyB0byAxKQorCVs0XSAtIGFuYWxvZyBpbnB1dCByYW5nZSBsb3dlc3Qgdm9sdGFnZSBpbiBtaWNyb3ZvbHRzIChvcHRpb25hbCwKKwkJb25seSB1c2VmdWwgaWYgeW91ciBib2FyZCBkb2VzIG5vdCBoYXZlIHNvZnR3YXJlCisJCXByb2dyYW1tYWJsZSBnYWluKQorCVs1XSAtIGFuYWxvZyBpbnB1dCByYW5nZSBoaWdoZXN0IHZvbHRhZ2UgaW4gbWljcm92b2x0cyAob3B0aW9uYWwsCisJCW9ubHkgdXNlZnVsIGlmIGJvYXJkIGRvZXMgbm90IGhhdmUgc29mdHdhcmUgcHJvZ3JhbW1hYmxlCisJCWdhaW4pCisJWzZdIC0gYW5hbG9nIG91dHB1dCByYW5nZSBsb3dlc3Qgdm9sdGFnZSBpbiBtaWNyb3ZvbHRzIChvcHRpb25hbCkKKwlbN10gLSBhbmFsb2cgb3V0cHV0IHJhbmdlIGhpZ2hlc3Qgdm9sdGFnZSBpbiBtaWNyb3ZvbHRzIChvcHRpb25hbCkKKwlbOF0gLSB1c2UgdGltZXIgbW9kZSBmb3IgRE1BLiAgVGltZXIgbW9kZSBpcyBuZWVkZWQgZS5nLiBmb3IKKwkJYnVnZ3kgRE1BIGNvbnRyb2xsZXJzIGluIE5TIENTNTUzMEEgKEdlb2RlIENvbXBhbmlvbiksIGFuZCBmb3IKKwkJJ2pyJyBjYXJkcyB0aGF0IGxhY2sgYSBoYXJkd2FyZSBmaWZvLiAgVGhpcyBvcHRpb24gaXMgbm8KKwkJbG9uZ2VyIG5lZWRlZCwgc2luY2UgdGltZXIgbW9kZSBpcyBfYWx3YXlzXyB1c2VkLgorCitQYXNzaW5nIGEgemVybyBmb3IgYW4gb3B0aW9uIGlzIHRoZSBzYW1lIGFzIGxlYXZpbmcgaXQgdW5zcGVjaWZpZWQuCisKKyovCisvKgorCitUZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgaGVscCBwcm92aWRlZCBieSBEYW5pZWwgS29jaC4KKworS2VpdGhsZXkgTWFudWFsczoKKwkyMzA5LlBERiAoZGFzMTYpCisJNDkxOS5QREYgKGRhczE0MDAsIDE2MDApCisJNDkyMi5QREYgKGRhcy0xNDAwKQorCTQ5MjMuUERGIChkYXMxMjAwLCAxNDAwLCAxNjAwKQorCitDb21wdXRlciBib2FyZHMgbWFudWFscyBhbHNvIGF2YWlsYWJsZSBmcm9tIHRoZWlyIHdlYnNpdGUgd3d3Lm1lYXN1cmVtZW50Y29tcHV0aW5nLmNvbQorCisqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSAiODI1My5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworI3VuZGVmIERFQlVHCisvLyNkZWZpbmUgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERFQlVHX1BSSU5UKGZvcm1hdCwgYXJncy4uLikgcnRfcHJpbnRrKCJkYXMxNjogIiBmb3JtYXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBERUJVR19QUklOVChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworI2RlZmluZSBEQVMxNl9TSVpFIDIwCQkvLyBudW1iZXIgb2YgaW9wb3J0cworI2RlZmluZSBEQVMxNl9ETUFfU0laRSAweGZmMDAJLy8gc2l6ZSBpbiBieXRlcyBvZiBhbGxvY2F0ZWQgZG1hIGJ1ZmZlcgorCisvKgorICAgIGNpby1kYXMxNi5wZGYKKworICAgICJkYXMxNiIKKyAgICAiZGFzMTYvZiIKKworICAwCWEvZCBiaXRzIDAtMwkJc3RhcnQgMTIgYml0CisgIDEJYS9kIGJpdHMgNC0xMQkJdW51c2VkCisgIDIJbXV4IHJlYWQJCW11eCBzZXQKKyAgMwlkaSA0IGJpdAkJZG8gNCBiaXQKKyAgNAl1bnVzZWQJCQlhbzBfbHNiCisgIDUJdW51c2VkCQkJYW8wX21zYgorICA2CXVudXNlZAkJCWFvMV9sc2IKKyAgNwl1bnVzZWQJCQlhbzFfbXNiCisgIDgJc3RhdHVzIGVvYyB1bmkvYmlwCWludGVycnVwdCByZXNldAorICA5CWRtYSwgaW50LCB0cmlnIGN0cmwJc2V0IGRtYSwgaW50CisgIGEJcGFjZXIgY29udHJvbAkJdW51c2VkCisgIGIJcmVzZXJ2ZWQJCXJlc2VydmVkCisgIGNkZWYJODI1NAorICAwMTIzCTgyNTUKKworKi8KKworLyoKKyAgICBjaW8tZGFzMTZqci5wZGYKKworICAgICJkYXMxNmpyIgorCisgIDAJYS9kIGJpdHMgMC0zCQlzdGFydCAxMiBiaXQKKyAgMQlhL2QgYml0cyA0LTExCQl1bnVzZWQKKyAgMgltdXggcmVhZAkJbXV4IHNldAorICAzCWRpIDQgYml0CQlkbyA0IGJpdAorICA0NTY3CXVudXNlZAkJCXVudXNlZAorICA4CXN0YXR1cyBlb2MgdW5pL2JpcAlpbnRlcnJ1cHQgcmVzZXQKKyAgOQlkbWEsIGludCwgdHJpZyBjdHJsCXNldCBkbWEsIGludAorICBhCXBhY2VyIGNvbnRyb2wJCXVudXNlZAorICBiCWdhaW4gc3RhdHVzCQlnYWluIGNvbnRyb2wKKyAgY2RlZgk4MjU0CisKKyovCisKKy8qCisgICAgY2lvLWRhczE2anJfMTYucGRmCisKKyAgICAiZGFzMTZqcl8xNiIKKworICAwCWEvZCBiaXRzIDAtNwkJc3RhcnQgMTYgYml0CisgIDEJYS9kIGJpdHMgOC0xNQkJdW51c2VkCisgIDIJbXV4IHJlYWQJCW11eCBzZXQKKyAgMwlkaSA0IGJpdAkJZG8gNCBiaXQKKyAgNDU2Nwl1bnVzZWQJCQl1bnVzZWQKKyAgOAlzdGF0dXMgZW9jIHVuaS9iaXAJaW50ZXJydXB0IHJlc2V0CisgIDkJZG1hLCBpbnQsIHRyaWcgY3RybAlzZXQgZG1hLCBpbnQKKyAgYQlwYWNlciBjb250cm9sCQl1bnVzZWQKKyAgYglnYWluIHN0YXR1cwkJZ2FpbiBjb250cm9sCisgIGNkZWYJODI1NAorCisqLworLyoKKyAgICBjaW8tZGFzMTYweC0xeC5wZGYKKworICAgICJkYXMxNjAxLzEyIgorICAgICJkYXMxNjAyLzEyIgorICAgICJkYXMxNjAyLzE2IgorCisgIDAJYS9kIGJpdHMgMC0zCQlzdGFydCAxMiBiaXQKKyAgMQlhL2QgYml0cyA0LTExCQl1bnVzZWQKKyAgMgltdXggcmVhZAkJbXV4IHNldAorICAzCWRpIDQgYml0CQlkbyA0IGJpdAorICA0CXVudXNlZAkJCWFvMF9sc2IKKyAgNQl1bnVzZWQJCQlhbzBfbXNiCisgIDYJdW51c2VkCQkJYW8xX2xzYgorICA3CXVudXNlZAkJCWFvMV9tc2IKKyAgOAlzdGF0dXMgZW9jIHVuaS9iaXAJaW50ZXJydXB0IHJlc2V0CisgIDkJZG1hLCBpbnQsIHRyaWcgY3RybAlzZXQgZG1hLCBpbnQKKyAgYQlwYWNlciBjb250cm9sCQl1bnVzZWQKKyAgYglnYWluIHN0YXR1cwkJZ2FpbiBjb250cm9sCisgIGNkZWYJODI1NAorICA0MDAJODI1NQorICA0MDQJdW51c2VkCQkJY29udmVyc2lvbiBlbmFibGUKKyAgNDA1CXVudXNlZAkJCWJ1cnN0IGVuYWJsZQorICA0MDYJdW51c2VkCQkJZGFzMTYwMCBlbmFibGUKKyAgNDA3CXN0YXR1cworCisqLworCitzdGF0aWMgY29uc3QgaW50IHNhbXBsZV9zaXplID0gMjsJLy8gc2l6ZSBpbiBieXRlcyBvZiBhIHNhbXBsZSBmcm9tIGJvYXJkCisKKyNkZWZpbmUgREFTMTZfVFJJRwkJMAorI2RlZmluZSBEQVMxNl9BSV9MU0IJCTAKKyNkZWZpbmUgREFTMTZfQUlfTVNCCQkxCisjZGVmaW5lIERBUzE2X01VWAkJMgorI2RlZmluZSBEQVMxNl9ESU8JCTMKKyNkZWZpbmUgREFTMTZfQU9fTFNCKHgpCSgoeCk/Njo0KQorI2RlZmluZSBEQVMxNl9BT19NU0IoeCkJKCh4KT83OjUpCisjZGVmaW5lIERBUzE2X1NUQVRVUwkJOAorI2RlZmluZSAgIEJVU1kJCQkoMTw8NykKKyNkZWZpbmUgICBVTklQT0xBUgkJCSgxPDw2KQorI2RlZmluZSAgIERBUzE2X01VWEJJVAkJCSgxPDw1KQorI2RlZmluZSAgIERBUzE2X0lOVAkJCSgxPDw0KQorI2RlZmluZSBEQVMxNl9DT05UUk9MCQk5CisjZGVmaW5lICAgREFTMTZfSU5URQkJCSgxPDw3KQorI2RlZmluZSAgIERBUzE2X0lSUSh4KQkJCSgoKHgpICYgMHg3KSA8PCA0KQorI2RlZmluZSAgIERNQV9FTkFCTEUJCQkoMTw8MikKKyNkZWZpbmUgICBQQUNJTkdfTUFTSwkweDMKKyNkZWZpbmUgICBJTlRfUEFDRVIJCTB4MDMKKyNkZWZpbmUgICBFWFRfUEFDRVIJCQkweDAyCisjZGVmaW5lICAgREFTMTZfU09GVAkJMHgwMAorI2RlZmluZSBEQVMxNl9QQUNFUgkJMHgwQQorI2RlZmluZSAgIERBUzE2X0NUUjAJCQkoMTw8MSkKKyNkZWZpbmUgICBEQVMxNl9UUklHMAkJCSgxPDwwKQorI2RlZmluZSAgIEJVUlNUX0xFTl9CSVRTKHgpCQkJKCgoeCkgJiAweGYpIDw8IDQpCisjZGVmaW5lIERBUzE2X0dBSU4JCTB4MEIKKyNkZWZpbmUgREFTMTZfQ05UUjBfREFUQQkJMHgwQworI2RlZmluZSBEQVMxNl9DTlRSMV9EQVRBCQkweDBECisjZGVmaW5lIERBUzE2X0NOVFIyX0RBVEEJCTB4MEUKKyNkZWZpbmUgREFTMTZfQ05UUl9DT05UUk9MCTB4MEYKKyNkZWZpbmUgICBEQVMxNl9URVJNX0NOVAkweDAwCisjZGVmaW5lICAgREFTMTZfT05FX1NIT1QJMHgwMgorI2RlZmluZSAgIERBUzE2X1JBVEVfR0VOCTB4MDQKKyNkZWZpbmUgICBEQVMxNl9DTlRSX0xTQl9NU0IJMHgzMAorI2RlZmluZSAgIERBUzE2X0NOVFIwCQkweDAwCisjZGVmaW5lICAgREFTMTZfQ05UUjEJCTB4NDAKKyNkZWZpbmUgICBEQVMxNl9DTlRSMgkJMHg4MAorCisjZGVmaW5lIERBUzE2MDBfQ09OVgkJMHg0MDQKKyNkZWZpbmUgICBEQVMxNjAwX0NPTlZfRElTQUJMRQkJMHg0MAorI2RlZmluZSBEQVMxNjAwX0JVUlNUCQkweDQwNQorI2RlZmluZSAgIERBUzE2MDBfQlVSU1RfVkFMCQkweDQwCisjZGVmaW5lIERBUzE2MDBfRU5BQkxFCQkweDQwNgorI2RlZmluZSAgIERBUzE2MDBfRU5BQkxFX1ZBTAkJMHg0MAorI2RlZmluZSBEQVMxNjAwX1NUQVRVU19CCTB4NDA3CisjZGVmaW5lICAgREFTMTYwMF9CTUUJCTB4NDAKKyNkZWZpbmUgICBEQVMxNjAwX01FCQkweDIwCisjZGVmaW5lICAgREFTMTYwMF9DRAkJCTB4MTAKKyNkZWZpbmUgICBEQVMxNjAwX1dTCQkJMHgwMgorI2RlZmluZSAgIERBUzE2MDBfQ0xLXzEwTUhaCQkweDAxCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXMxeDAxX2JpcCA9IHsgNCwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDEpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMXgwMV91bmlwID0geyA0LCB7CisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDEpLAorCQkJVU5JX1JBTkdFKDAuMSksCisJCQlVTklfUkFOR0UoMC4wMSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXMxeDAyX2JpcCA9IHsgNCwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMXgwMl91bmlwID0geyA0LCB7CisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXMxNmpyID0geyA5LCB7CisJCQkvLyBhbHNvIHVzZWQgYnkgMTYvMzMwCisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzMTZqcl8xNiA9IHsgOCwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBpbnQgZGFzMTZqcl9nYWlubGlzdFtdID0geyA4LCAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3IH07CitzdGF0aWMgY29uc3QgaW50IGRhczE2anJfMTZfZ2Fpbmxpc3RbXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNyB9Oworc3RhdGljIGNvbnN0IGludCBkYXMxNjAwX2dhaW5saXN0W10gPSB7IDAsIDEsIDIsIDMgfTsKK2VudW0geworCWRhczE2X3BnX25vbmUgPSAwLAorCWRhczE2X3BnXzE2anIsCisJZGFzMTZfcGdfMTZqcl8xNiwKKwlkYXMxNl9wZ18xNjAxLAorCWRhczE2X3BnXzE2MDIsCit9Oworc3RhdGljIGNvbnN0IGludCAqY29uc3QgZGFzMTZfZ2Fpbmxpc3RzW10gPSB7CisJTlVMTCwKKwlkYXMxNmpyX2dhaW5saXN0LAorCWRhczE2anJfMTZfZ2Fpbmxpc3QsCisJZGFzMTYwMF9nYWlubGlzdCwKKwlkYXMxNjAwX2dhaW5saXN0LAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgZGFzMTZfYWlfdW5pX2xyYW5nZXNbXSA9IHsKKwkmcmFuZ2VfdW5rbm93biwKKwkmcmFuZ2VfZGFzMTZqciwKKwkmcmFuZ2VfZGFzMTZqcl8xNiwKKwkmcmFuZ2VfZGFzMXgwMV91bmlwLAorCSZyYW5nZV9kYXMxeDAyX3VuaXAsCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpjb25zdCBkYXMxNl9haV9iaXBfbHJhbmdlc1tdID0geworCSZyYW5nZV91bmtub3duLAorCSZyYW5nZV9kYXMxNmpyLAorCSZyYW5nZV9kYXMxNmpyXzE2LAorCSZyYW5nZV9kYXMxeDAxX2JpcCwKKwkmcmFuZ2VfZGFzMXgwMl9iaXAsCit9OworCitzdHJ1Y3QgbXVuZ2VfaW5mbyB7CisJdWludDhfdCBieXRlOworCXVuc2lnbmVkIGhhdmVfYnl0ZToxOworfTsKKworc3RhdGljIGludCBkYXMxNl9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNl9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNl9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxNl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGRhczE2X2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBkYXMxNl9jbWRfZXhlYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZGFzMTZfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgZGFzMTZfYWlfbXVuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl2b2lkICphcnJheSwgdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW5faW5kZXgpOworCitzdGF0aWMgdm9pZCBkYXMxNl9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTZfZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyB2b2lkIGRhczE2X3RpbWVyX2ludGVycnVwdCh1bnNpZ25lZCBsb25nIGFyZyk7CitzdGF0aWMgdm9pZCBkYXMxNl9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgdW5zaWduZWQgaW50IGRhczE2X3NldF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG5zLAorCWludCBmbGFncyk7CitzdGF0aWMgaW50IGRhczE2MDBfbW9kZV9kZXRlY3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHVuc2lnbmVkIGludCBkYXMxNl9zdWdnZXN0X3RyYW5zZmVyX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9jbWQgY21kKTsKKworc3RhdGljIHZvaWQgcmVnX2R1bXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdHJ1Y3QgZGFzMTZfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdm9pZCAqYWk7CisJdW5zaWduZWQgaW50IGFpX25iaXRzOworCXVuc2lnbmVkIGludCBhaV9zcGVlZDsJLy8gbWF4IGNvbnZlcnNpb24gc3BlZWQgaW4gbmFub3NlYworCXVuc2lnbmVkIGludCBhaV9wZzsKKwl2b2lkICphbzsKKwl1bnNpZ25lZCBpbnQgYW9fbmJpdHM7CisJdm9pZCAqZGk7CisJdm9pZCAqZG9fOworCisJdW5zaWduZWQgaW50IGk4MjU1X29mZnNldDsKKwl1bnNpZ25lZCBpbnQgaTgyNTRfb2Zmc2V0OworCisJdW5zaWduZWQgaW50IHNpemU7CisJdW5zaWduZWQgaW50IGlkOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXMxNl9ib2FyZCBkYXMxNl9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRhcy0xNiIsCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjE1MDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ19ub25lLAorCSAgICAgIGFvOglkYXMxNl9hb193aW5zbiwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHgxMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDE0LAorCSAgICAgIGlkOgkweDAwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE2ZyIsCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjE1MDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ19ub25lLAorCSAgICAgIGFvOglkYXMxNl9hb193aW5zbiwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHgxMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDE0LAorCSAgICAgIGlkOgkweDAwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE2ZiIsCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjg1MDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnX25vbmUsCisJICAgICAgYW86CWRhczE2X2FvX3dpbnNuLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDEwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4MTQsCisJICAgICAgaWQ6CTB4MDAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTYiLAkvLyBjaW8tZGFzMTYucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ19ub25lLAorCSAgICAgIGFvOglkYXMxNl9hb193aW5zbiwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHgxMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDE0LAorCSAgICAgIGlkOgkweDgwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE2L2YiLAkvLyBkYXMxNi5wZGYKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnX25vbmUsCisJICAgICAgYW86CWRhczE2X2FvX3dpbnNuLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDEwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4MTQsCisJICAgICAgaWQ6CTB4ODAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTYvanIiLAkvLyBjaW8tZGFzMTZqci5wZGYKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6NzY5MiwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTZqciwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDEwLAorCSAgICAgIGlkOgkweDAwLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGMxMDQtZGFzMTZqciIsCS8vIHBjMTA0LWRhczE2anJfeHgucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjMzMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2anIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHgxMCwKKwkgICAgICBpZDoJMHgwMCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXMxNmpyLzE2IiwJLy8gY2lvLWRhczE2anJfMTYucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ18xNmpyXzE2LAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDowLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4MTAsCisJICAgICAgaWQ6CTB4MDAsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwYzEwNC1kYXMxNmpyLzE2IiwJLy8gcGMxMDQtZGFzMTZqcl94eC5wZGYKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTYsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2anJfMTYsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHgxMCwKKwkgICAgICBpZDoJMHgwMCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xMjAxIiwJLy8gNDkyNC5wZGYgKGtlaXRobGV5IHVzZXIncyBtYW51YWwpCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ19ub25lLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDQwMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKwkgICAgICBpZDoJMHgyMCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xMjAyIiwJLy8gNDkyNC5wZGYgKGtlaXRobGV5IHVzZXIncyBtYW51YWwpCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ19ub25lLAorCSAgICAgIGFvOglOVUxMLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDQwMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKwkgICAgICBpZDoJMHgyMCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNDAxIiwJLy8gNDkxOS5wZGYgYW5kIDQ5MjIucGRmIChrZWl0aGxleSB1c2VyJ3MgbWFudWFsKQorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMSwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHgwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4NDA4LAorCSAgICAgIGlkOgkweGMwCS8vIDQ5MTkucGRmIHNheXMgaWQgYml0cyBhcmUgMHhlMCwgNDkyMi5wZGYgc2F5cyAweGMwCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTQwMiIsCS8vIDQ5MTkucGRmIGFuZCA0OTIyLnBkZiAoa2VpdGhsZXkgdXNlcidzIG1hbnVhbCkKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2MDIsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKwkgICAgICBpZDoJMHhjMAkvLyA0OTE5LnBkZiBzYXlzIGlkIGJpdHMgYXJlIDB4ZTAsIDQ5MjIucGRmIHNheXMgMHhjMAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE2MDEiLAkvLyA0OTE5LnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMSwKKwkgICAgICBhbzoJZGFzMTZfYW9fd2luc24sCisJICAgICAgYW9fbmJpdHM6MTIsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4NDAwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4NDA4LAorICAgICAgaWQ6CTB4YzB9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE2MDIiLAkvLyA0OTE5LnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxMiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMiwKKwkgICAgICBhbzoJZGFzMTZfYW9fd2luc24sCisJICAgICAgYW9fbmJpdHM6MTIsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4NDAwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4NDA4LAorICAgICAgaWQ6CTB4YzB9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE0MDEvMTIiLAkvLyBjaW8tZGFzMTQwMF9zZXJpZXMucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2MDEsCisJICAgICAgYW86CU5VTEwsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHg0MDgsCisgICAgICBpZDoJMHhjMH0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTQwMi8xMiIsCS8vIGNpby1kYXMxNDAwX3Nlcmllcy5wZGYKKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6NjI1MCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKyAgICAgIGlkOgkweGMwfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXMxNDAyLzE2IiwJLy8gY2lvLWRhczE0MDBfc2VyaWVzLnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMiwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKyAgICAgIGlkOgkweGMwfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXMxNjAxLzEyIiwJLy8gY2lvLWRhczE2MHgtMXgucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgYWlfcGc6CWRhczE2X3BnXzE2MDEsCisJICAgICAgYW86CWRhczE2X2FvX3dpbnNuLAorCSAgICAgIGFvX25iaXRzOjEyLAorCSAgICAgIGRpOglkYXMxNl9kaV9yYml0cywKKwkgICAgICBkb186CWRhczE2X2RvX3diaXRzLAorCSAgICAgIGk4MjU1X29mZnNldDoweDQwMCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDQwOCwKKyAgICAgIGlkOgkweGMwfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXMxNjAyLzEyIiwJLy8gY2lvLWRhczE2MHgtMXgucGRmCisJICAgICAgYWk6CWRhczE2X2FpX3JpbnNuLAorCSAgICAgIGFpX25iaXRzOjEyLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFpX3BnOglkYXMxNl9wZ18xNjAyLAorCSAgICAgIGFvOglkYXMxNl9hb193aW5zbiwKKwkgICAgICBhb19uYml0czoxMiwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MHg0MDAsCisJICAgICAgaTgyNTRfb2Zmc2V0OjB4MGMsCisJICAgICAgc2l6ZToJMHg0MDgsCisgICAgICBpZDoJMHhjMH0sCisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTYwMi8xNiIsCS8vIGNpby1kYXMxNjB4LTF4LnBkZgorCSAgICAgIGFpOglkYXMxNl9haV9yaW5zbiwKKwkgICAgICBhaV9uYml0czoxNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTYwMiwKKwkgICAgICBhbzoJZGFzMTZfYW9fd2luc24sCisJICAgICAgYW9fbmJpdHM6MTIsCisJICAgICAgZGk6CWRhczE2X2RpX3JiaXRzLAorCSAgICAgIGRvXzoJZGFzMTZfZG9fd2JpdHMsCisJICAgICAgaTgyNTVfb2Zmc2V0OjB4NDAwLAorCSAgICAgIGk4MjU0X29mZnNldDoweDBjLAorCSAgICAgIHNpemU6CTB4NDA4LAorICAgICAgaWQ6CTB4YzB9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE2LzMzMCIsCS8vID8KKwkgICAgICBhaToJZGFzMTZfYWlfcmluc24sCisJICAgICAgYWlfbmJpdHM6MTIsCisJICAgICAgYWlfc3BlZWQ6MzAzMCwKKwkgICAgICBhaV9wZzoJZGFzMTZfcGdfMTZqciwKKwkgICAgICBhbzoJTlVMTCwKKwkgICAgICBkaToJZGFzMTZfZGlfcmJpdHMsCisJICAgICAgZG9fOglkYXMxNl9kb193Yml0cywKKwkgICAgICBpODI1NV9vZmZzZXQ6MCwKKwkgICAgICBpODI1NF9vZmZzZXQ6MHgwYywKKwkgICAgICBzaXplOgkweDE0LAorICAgICAgaWQ6CTB4ZjB9LAorI2lmIDAKKwl7CisJICAgICAgbmFtZToJImRhczE2LzMzMGkiLAkvLyA/CisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMxNi9qci9jdHI1IiwJLy8gPworCQl9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczE2L20xLzE2IiwJLy8gY2lvLWRhczE2X20xXzE2LnBkZiwgdGhpcyBib2FyZCBpcyBhIGJpdCBxdWlya3ksIG5vIGRtYQorCQl9LAorI2VuZGlmCit9OworCisjZGVmaW5lIG5fZGFzMTZfYm9hcmRzICgoc2l6ZW9mKGRhczE2X2JvYXJkcykpLyhzaXplb2Yoc3RydWN0IGRhczE2X2JvYXJkKSkpCisKK3N0YXRpYyBpbnQgZGFzMTZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGFzMTZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZGFzMTYgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZGFzMTYiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRhczE2X2F0dGFjaCwKKyAgICAgIGRldGFjaDpkYXMxNl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZkYXMxNl9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2RhczE2X2JvYXJkcywKKyAgICAgIG9mZnNldDpzaXplb2YoZGFzMTZfYm9hcmRzWzBdKSwKK307CisKKyNkZWZpbmUgREFTMTZfVElNRU9VVCAxMDAwCisKKy8qIFBlcmlvZCBmb3IgdGltZXIgaW50ZXJydXB0IGluIGppZmZpZXMuICBJdCdzIGEgZnVuY3Rpb24KKyAqIHRvIGRlYWwgd2l0aCBwb3NzaWJpbGl0eSBvZiBkeW5hbWljIEhaIHBhdGNoZXMgICovCitzdGF0aWMgaW5saW5lIGludCB0aW1lcl9wZXJpb2Qodm9pZCkKK3sKKwlyZXR1cm4gSFogLyAyMDsKK30KK3N0cnVjdCBkYXMxNl9wcml2YXRlX3N0cnVjdCB7CisJdW5zaWduZWQgaW50IGFpX3VuaXBvbGFyOwkvLyB1bmlwb2xhciBmbGFnCisJdW5zaWduZWQgaW50IGFpX3NpbmdsZWVuZGVkOwkvLyBzaW5nbGUgZW5kZWQgZmxhZworCXVuc2lnbmVkIGludCBjbG9ja2Jhc2U7CS8vIG1hc3RlciBjbG9jayBzcGVlZCBpbiBucworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBjb250cm9sX3N0YXRlOwkvLyBkbWEsIGludGVycnVwdCBhbmQgdHJpZ2dlciBjb250cm9sIGJpdHMKKwl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGFkY19ieXRlX2NvdW50OwkvLyBudW1iZXIgb2YgYnl0ZXMgcmVtYWluaW5nCisJdW5zaWduZWQgaW50IGRpdmlzb3IxOwkvLyBkaXZpc29yIGRpdmlkaW5nIG1hc3RlciBjbG9jayB0byBnZXQgY29udmVyc2lvbiBmcmVxdWVuY3kKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjI7CS8vIGRpdmlzb3IgZGl2aWRpbmcgbWFzdGVyIGNsb2NrIHRvIGdldCBjb252ZXJzaW9uIGZyZXF1ZW5jeQorCXVuc2lnbmVkIGludCBkbWFfY2hhbjsJLy8gZG1hIGNoYW5uZWwKKwl1aW50MTZfdCAqZG1hX2J1ZmZlclsyXTsKKwlkbWFfYWRkcl90IGRtYV9idWZmZXJfYWRkclsyXTsKKwl1bnNpZ25lZCBpbnQgY3VycmVudF9idWZmZXI7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGRtYV90cmFuc2Zlcl9zaXplOwkvLyB0YXJnZXQgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIHBlciBkbWEgc2hvdAorCS8vIHVzZXItZGVmaW5lZCBhbmFsb2cgaW5wdXQgYW5kIG91dHB1dCByYW5nZXMgZGVmaW5lZCBmcm9tIGNvbmZpZyBvcHRpb25zCisJc3RydWN0IGNvbWVkaV9scmFuZ2UgKnVzZXJfYWlfcmFuZ2VfdGFibGU7CisJc3RydWN0IGNvbWVkaV9scmFuZ2UgKnVzZXJfYW9fcmFuZ2VfdGFibGU7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsJLy8gZm9yIHRpbWVkIGludGVycnVwdAorCXZvbGF0aWxlIHNob3J0IHRpbWVyX3J1bm5pbmc7CisJdm9sYXRpbGUgc2hvcnQgdGltZXJfbW9kZTsJLy8gdHJ1ZSBpZiB1c2luZyB0aW1lciBtb2RlCit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhczE2X3ByaXZhdGVfc3RydWN0ICopKGRldi0+cHJpdmF0ZSkpCisjZGVmaW5lIHRoaXNib2FyZCAoKHN0cnVjdCBkYXMxNl9ib2FyZCAqKShkZXYtPmJvYXJkX3B0cikpCisKK3N0YXRpYyBpbnQgZGFzMTZfY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMCwgdG1wOworCWludCBnYWluLCBzdGFydF9jaGFuLCBpOworCWludCBtYXNrOworCisJLyogbWFrZSBzdXJlIHRyaWdnZXJzIGFyZSB2YWxpZCAqLworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJbWFzayA9IFRSSUdfRk9MTE9XOworCS8vIGlmIGJvYXJkIHN1cHBvcnRzIGJ1cnN0IG1vZGUKKwlpZiAodGhpc2JvYXJkLT5zaXplID4gMHg0MDApCisJCW1hc2sgfD0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gbWFzazsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwltYXNrID0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCS8vIGlmIGJvYXJkIHN1cHBvcnRzIGJ1cnN0IG1vZGUKKwlpZiAodGhpc2JvYXJkLT5zaXplID4gMHg0MDApCisJCW1hc2sgfD0gVFJJR19OT1c7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBtYXNrOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UKQorCQllcnIrKzsKKworCS8vIG1ha2Ugc3VyZSBzY2FuX2JlZ2luX3NyYyBhbmQgY29udmVydF9zcmMgZG9udCBjb25mbGljdAorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XICYmIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19OT1cpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkvKiBpbnRlcm5hbCB0cmlnZ2VyICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCS8vIGNoZWNrIGFnYWluc3QgbWF4aW11bSBmcmVxdWVuY3kKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwKKwkJCXRoaXNib2FyZC0+YWlfc3BlZWQgKiBjbWQtPmNoYW5saXN0X2xlbikgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJdGhpc2JvYXJkLT5haV9zcGVlZCAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNib2FyZC0+YWlfc3BlZWQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUpIHsKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8vIHN0ZXAgNDogZml4IHVwIGFyZ3VtZW50cworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdW5zaWduZWQgaW50IHRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCS8vIHNldCBkaXZpc29ycywgY29ycmVjdCB0aW1pbmcgYXJndW1lbnRzCisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihkZXZwcml2LT5jbG9ja2Jhc2UsCisJCQkmKGRldnByaXYtPmRpdmlzb3IxKSwgJihkZXZwcml2LT5kaXZpc29yMiksCisJCQkmKGNtZC0+c2Nhbl9iZWdpbl9hcmcpLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJZXJyICs9ICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZyk7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdW5zaWduZWQgaW50IHRtcCA9IGNtZC0+Y29udmVydF9hcmc7CisJCS8vIHNldCBkaXZpc29ycywgY29ycmVjdCB0aW1pbmcgYXJndW1lbnRzCisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihkZXZwcml2LT5jbG9ja2Jhc2UsCisJCQkmKGRldnByaXYtPmRpdmlzb3IxKSwgJihkZXZwcml2LT5kaXZpc29yMiksCisJCQkmKGNtZC0+Y29udmVydF9hcmcpLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJZXJyICs9ICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZyk7CisJfQorCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLy8gY2hlY2sgY2hhbm5lbC9nYWluIGxpc3QgYWdhaW5zdCBjYXJkJ3MgbGltaXRhdGlvbnMKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQlnYWluID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJCXN0YXJ0X2NoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0KKwkJCQkoc3RhcnRfY2hhbiArIGkpICUgcy0+bl9jaGFuKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBiZSBjb25zZWN1dGl2ZSBjaGFubmVscywgY291bnRpbmcgdXB3YXJkc1xuIik7CisJCQkJZXJyKys7CisJCQl9CisJCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSkgIT0gZ2FpbikgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgZ2FpblxuIik7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXMxNl9jbWRfZXhlYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBieXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJhbmdlOworCisJaWYgKGRldnByaXYtPmRtYV9jaGFuID09IDAgfHwgKGRldi0+aXJxID09IDAKKwkJCSYmIGRldnByaXYtPnRpbWVyX21vZGUgPT0gMCkpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJpcnEgKG9yIHVzZSBvZiAndGltZXIgbW9kZScpIGRtYSByZXF1aXJlZCB0byBleGVjdXRlIGNvbWVkaV9jbWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoY21kLT5mbGFncyAmIFRSSUdfUlQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJpc2EgZG1hIHRyYW5zZmVycyBjYW5ub3QgYmUgcGVyZm9ybWVkIHdpdGggVFJJR19SVCwgYWJvcnRpbmciKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWRldnByaXYtPmFkY19ieXRlX2NvdW50ID0KKwkJY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuICogc2l6ZW9mKHVpbnQxNl90KTsKKworCS8vIGRpc2FibGUgY29udmVyc2lvbnMgZm9yIGRhczE2MDAgbW9kZQorCWlmICh0aGlzYm9hcmQtPnNpemUgPiAweDQwMCkgeworCQlvdXRiKERBUzE2MDBfQ09OVl9ESVNBQkxFLCBkZXYtPmlvYmFzZSArIERBUzE2MDBfQ09OVik7CisJfQorCS8vIHNldCBzY2FuIGxpbWl0cworCWJ5dGUgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCWJ5dGUgfD0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2NtZC0+Y2hhbmxpc3RfbGVuIC0gMV0pIDw8IDQ7CisJb3V0YihieXRlLCBkZXYtPmlvYmFzZSArIERBUzE2X01VWCk7CisKKwkvKiBzZXQgZ2FpbiAodGhpcyBpcyBhbHNvIGJ1cnN0IHJhdGUgcmVnaXN0ZXIgYnV0IGFjY29yZGluZyB0bworCSAqIGNvbXB1dGVyIGJvYXJkcyBtYW51YWwsIGJ1cnN0IHJhdGUgZG9lcyBub3RoaW5nLCBldmVuIG9uIGtlaXRobGV5IGNhcmRzKSAqLworCWlmICh0aGlzYm9hcmQtPmFpX3BnICE9IGRhczE2X3BnX25vbmUpIHsKKwkJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwkJb3V0YigoZGFzMTZfZ2Fpbmxpc3RzW3RoaXNib2FyZC0+YWlfcGddKVtyYW5nZV0sCisJCQlkZXYtPmlvYmFzZSArIERBUzE2X0dBSU4pOworCX0KKworCS8qIHNldCBjb3VudGVyIG1vZGUgYW5kIGNvdW50cyAqLworCWNtZC0+Y29udmVydF9hcmcgPQorCQlkYXMxNl9zZXRfcGFjZXIoZGV2LCBjbWQtPmNvbnZlcnRfYXJnLAorCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwlERUJVR19QUklOVCgicGFjZXIgcGVyaW9kOiAlZCBuc1xuIiwgY21kLT5jb252ZXJ0X2FyZyk7CisKKwkvKiBlbmFibGUgY291bnRlcnMgKi8KKwlieXRlID0gMDsKKwkvKiBFbmFibGUgYnVyc3QgbW9kZSBpZiBhcHByb3ByaWF0ZS4gKi8KKwlpZiAodGhpc2JvYXJkLT5zaXplID4gMHg0MDApIHsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpIHsKKwkJCW91dGIoREFTMTYwMF9CVVJTVF9WQUwsIGRldi0+aW9iYXNlICsgREFTMTYwMF9CVVJTVCk7CisJCQkvLyBzZXQgYnVyc3QgbGVuZ3RoCisJCQlieXRlIHw9IEJVUlNUX0xFTl9CSVRTKGNtZC0+Y2hhbmxpc3RfbGVuIC0gMSk7CisJCX0gZWxzZSB7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTYwMF9CVVJTVCk7CisJCX0KKwl9CisJb3V0YihieXRlLCBkZXYtPmlvYmFzZSArIERBUzE2X1BBQ0VSKTsKKworCS8vIHNldCB1cCBkbWEgdHJhbnNmZXIKKwlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCS8qIGNsZWFyIGZsaXAtZmxvcCB0byBtYWtlIHN1cmUgMi1ieXRlIHJlZ2lzdGVycyBmb3IKKwkgKiBjb3VudCBhbmQgYWRkcmVzcyBnZXQgc2V0IGNvcnJlY3RseSAqLworCWNsZWFyX2RtYV9mZihkZXZwcml2LT5kbWFfY2hhbik7CisJZGV2cHJpdi0+Y3VycmVudF9idWZmZXIgPSAwOworCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWFfY2hhbiwKKwkJZGV2cHJpdi0+ZG1hX2J1ZmZlcl9hZGRyW2RldnByaXYtPmN1cnJlbnRfYnVmZmVyXSk7CisJLy8gc2V0IGFwcHJvcHJpYXRlIHNpemUgb2YgdHJhbnNmZXIKKwlkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSA9IGRhczE2X3N1Z2dlc3RfdHJhbnNmZXJfc2l6ZShkZXYsICpjbWQpOworCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hX2NoYW4sIGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKTsKKwllbmFibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKKworCS8vIHNldCB1cCBpbnRlcnJ1cHQKKwlpZiAoZGV2cHJpdi0+dGltZXJfbW9kZSkgeworCQlkZXZwcml2LT50aW1lcl9ydW5uaW5nID0gMTsKKwkJZGV2cHJpdi0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lcl9wZXJpb2QoKTsKKwkJYWRkX3RpbWVyKCZkZXZwcml2LT50aW1lcik7CisJCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgJj0gfkRBUzE2X0lOVEU7CisJfSBlbHNlIHsKKwkJLyogY2xlYXIgaW50ZXJydXB0IGJpdCAqLworCQlvdXRiKDB4MDAsIGRldi0+aW9iYXNlICsgREFTMTZfU1RBVFVTKTsKKwkJLyogZW5hYmxlIGludGVycnVwdHMgKi8KKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBEQVMxNl9JTlRFOworCX0KKwlkZXZwcml2LT5jb250cm9sX3N0YXRlIHw9IERNQV9FTkFCTEU7CisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+UEFDSU5HX01BU0s7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpCisJCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgfD0gRVhUX1BBQ0VSOworCWVsc2UKKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSB8PSBJTlRfUEFDRVI7CisJb3V0YihkZXZwcml2LT5jb250cm9sX3N0YXRlLCBkZXYtPmlvYmFzZSArIERBUzE2X0NPTlRST0wpOworCisJLyogRW5hYmxlIGNvbnZlcnNpb25zIGlmIHVzaW5nIGRhczE2MDAgbW9kZSAqLworCWlmICh0aGlzYm9hcmQtPnNpemUgPiAweDQwMCkgeworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTYwMF9DT05WKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXMxNl9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzLCBkbWEgYW5kIHBhY2VyIGNsb2NrZWQgY29udmVyc2lvbnMgKi8KKwlkZXZwcml2LT5jb250cm9sX3N0YXRlICY9IH5EQVMxNl9JTlRFICYgflBBQ0lOR19NQVNLICYgfkRNQV9FTkFCTEU7CisJb3V0YihkZXZwcml2LT5jb250cm9sX3N0YXRlLCBkZXYtPmlvYmFzZSArIERBUzE2X0NPTlRST0wpOworCWlmIChkZXZwcml2LT5kbWFfY2hhbikKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCisJLy8gZGlzYWJsZSBTVyB0aW1lcgorCWlmIChkZXZwcml2LT50aW1lcl9tb2RlICYmIGRldnByaXYtPnRpbWVyX3J1bm5pbmcpIHsKKwkJZGV2cHJpdi0+dGltZXJfcnVubmluZyA9IDA7CisJCWRlbF90aW1lcigmZGV2cHJpdi0+dGltZXIpOworCX0KKworCS8qIGRpc2FibGUgYnVyc3QgbW9kZSAqLworCWlmICh0aGlzYm9hcmQtPnNpemUgPiAweDQwMCkgeworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTYwMF9CVVJTVCk7CisJfQorCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkYXMxNl9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTZfU1RBVFVTKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTZfQ09OVFJPTCk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE2X1BBQ0VSKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTZfQ05UUl9DT05UUk9MKTsKK30KKworc3RhdGljIGludCBkYXMxNl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIG47CisJaW50IHJhbmdlOworCWludCBjaGFuOworCWludCBtc2IsIGxzYjsKKworCS8vIGRpc2FibGUgaW50ZXJydXB0cyBhbmQgcGFjaW5nCisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+REFTMTZfSU5URSAmIH5ETUFfRU5BQkxFICYgflBBQ0lOR19NQVNLOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9DT05UUk9MKTsKKworCS8qIHNldCBtdWx0aXBsZXhlciAqLworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwljaGFuIHw9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpIDw8IDQ7CisJb3V0YihjaGFuLCBkZXYtPmlvYmFzZSArIERBUzE2X01VWCk7CisKKwkvKiBzZXQgZ2FpbiAqLworCWlmICh0aGlzYm9hcmQtPmFpX3BnICE9IGRhczE2X3BnX25vbmUpIHsKKwkJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJCW91dGIoKGRhczE2X2dhaW5saXN0c1t0aGlzYm9hcmQtPmFpX3BnXSlbcmFuZ2VdLAorCQkJZGV2LT5pb2Jhc2UgKyBEQVMxNl9HQUlOKTsKKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlvdXRiX3AoMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9UUklHKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgREFTMTZfVElNRU9VVDsgaSsrKSB7CisJCQlpZiAoIShpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9TVEFUVVMpICYgQlVTWSkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gREFTMTZfVElNRU9VVCkgeworCQkJcnRfcHJpbnRrKCJkYXMxNjogdGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FOworCQl9CisJCW1zYiA9IGluYihkZXYtPmlvYmFzZSArIERBUzE2X0FJX01TQik7CisJCWxzYiA9IGluYihkZXYtPmlvYmFzZSArIERBUzE2X0FJX0xTQik7CisJCWlmICh0aGlzYm9hcmQtPmFpX25iaXRzID09IDEyKSB7CisJCQlkYXRhW25dID0gKChsc2IgPj4gNCkgJiAweGYpIHwgKG1zYiA8PCA0KTsKKwkJfSBlbHNlIHsKKwkJCWRhdGFbbl0gPSBsc2IgfCAobXNiIDw8IDgpOworCQl9CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZfZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBiaXRzOworCisJYml0cyA9IGluYihkZXYtPmlvYmFzZSArIERBUzE2X0RJTykgJiAweGY7CisJZGF0YVsxXSA9IGJpdHM7CisJZGF0YVswXSA9IDA7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkYXMxNl9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IHdiaXRzOworCisJLy8gb25seSBzZXQgYml0cyB0aGF0IGhhdmUgYmVlbiBtYXNrZWQKKwlkYXRhWzBdICY9IDB4ZjsKKwl3Yml0cyA9IHMtPnN0YXRlOworCS8vIHplcm8gYml0cyB0aGF0IGhhdmUgYmVlbiBtYXNrZWQKKwl3Yml0cyAmPSB+ZGF0YVswXTsKKwkvLyBzZXQgbWFza2VkIGJpdHMKKwl3Yml0cyB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwlzLT5zdGF0ZSA9IHdiaXRzOworCWRhdGFbMV0gPSB3Yml0czsKKworCW91dGIocy0+c3RhdGUsIGRldi0+aW9iYXNlICsgREFTMTZfRElPKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRhczE2X2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgbHNiLCBtc2I7CisJaW50IGNoYW47CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWlmICh0aGlzYm9hcmQtPmFvX25iaXRzID09IDEyKSB7CisJCQlsc2IgPSAoZGF0YVtpXSA8PCA0KSAmIDB4ZmY7CisJCQltc2IgPSAoZGF0YVtpXSA+PiA0KSAmIDB4ZmY7CisJCX0gZWxzZSB7CisJCQlsc2IgPSBkYXRhW2ldICYgMHhmZjsKKwkJCW1zYiA9IChkYXRhW2ldID4+IDgpICYgMHhmZjsKKwkJfQorCQlvdXRiKGxzYiwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9BT19MU0IoY2hhbikpOworCQlvdXRiKG1zYiwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9BT19NU0IoY2hhbikpOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTZfZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisKKwlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9TVEFUVVMpOworCisJaWYgKChzdGF0dXMgJiBEQVMxNl9JTlQpID09IDApIHsKKwkJREVCVUdfUFJJTlQoInNwdXJpb3VzIGludGVycnVwdFxuIik7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KKwlvdXRiKDB4MDAsIGRldi0+aW9iYXNlICsgREFTMTZfU1RBVFVTKTsKKwlkYXMxNl9pbnRlcnJ1cHQoZGV2KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGRhczE2X3RpbWVyX2ludGVycnVwdCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGFyZzsKKworCWRhczE2X2ludGVycnVwdChkZXYpOworCisJaWYgKGRldnByaXYtPnRpbWVyX3J1bm5pbmcpCisJCW1vZF90aW1lcigmZGV2cHJpdi0+dGltZXIsIGppZmZpZXMgKyB0aW1lcl9wZXJpb2QoKSk7Cit9CisKKy8qIHRoZSBwYzEwNC1kYXMxNmpyIChhdCBsZWFzdCkgaGFzIHByb2JsZW1zIGlmIHRoZSBkbWEKKwl0cmFuc2ZlciBpcyBpbnRlcnJ1cHRlZCBpbiB0aGUgbWlkZGxlIG9mIHRyYW5zZmVycmluZworCWEgMTYgYml0IHNhbXBsZSwgc28gdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIHRvIGdldAorCWFuIGV2ZW4gdHJhbnNmZXIgY291bnQgYWZ0ZXIgZGlzYWJsaW5nIGRtYQorCWNoYW5uZWwuCisqLworc3RhdGljIGludCBkaXNhYmxlX2RtYV9vbl9ldmVuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCByZXNpZHVlOworCWludCBpOworCXN0YXRpYyBjb25zdCBpbnQgZGlzYWJsZV9saW1pdCA9IDEwMDsKKwlzdGF0aWMgY29uc3QgaW50IGVuYWJsZV90aW1lb3V0ID0gMTAwOworCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwlyZXNpZHVlID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmRtYV9jaGFuKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlzYWJsZV9saW1pdCAmJiAocmVzaWR1ZSAlIDIpOyArK2kpIHsKKwkJaW50IGo7CisJCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCQlmb3IgKGogPSAwOyBqIDwgZW5hYmxlX3RpbWVvdXQ7ICsraikgeworCQkJaW50IG5ld19yZXNpZHVlOworCQkJY29tZWRpX3VkZWxheSgyKTsKKwkJCW5ld19yZXNpZHVlID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmRtYV9jaGFuKTsKKwkJCWlmIChuZXdfcmVzaWR1ZSAhPSByZXNpZHVlKQorCQkJCWJyZWFrOworCQl9CisJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkJcmVzaWR1ZSA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5kbWFfY2hhbik7CisJfQorCWlmIChpID09IGRpc2FibGVfbGltaXQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJmYWlsZWQgdG8gZ2V0IGFuIGV2ZW4gZG1hIHRyYW5zZmVyLCBjb3VsZCBiZSB0cm91YmxlLiIpOworCX0KKwlyZXR1cm4gcmVzaWR1ZTsKK30KKworc3RhdGljIHZvaWQgZGFzMTZfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZG1hX2ZsYWdzLCBzcGluX2ZsYWdzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kOworCWludCBudW1fYnl0ZXMsIHJlc2lkdWU7CisJaW50IGJ1ZmZlcl9pbmRleDsKKworCWlmIChkZXYtPmF0dGFjaGVkID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInByZW1hdHVyZSBpbnRlcnJ1cHQiKTsKKwkJcmV0dXJuOworCX0KKwkvLyBpbml0aWFsaXplIGFzeW5jIGhlcmUgdG8gbWFrZSBzdXJlIGl0IGlzIG5vdCBOVUxMCisJYXN5bmMgPSBzLT5hc3luYzsKKwljbWQgPSAmYXN5bmMtPmNtZDsKKworCWlmIChkZXZwcml2LT5kbWFfY2hhbiA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJpbnRlcnJ1cHQgd2l0aCBubyBkbWEgY2hhbm5lbD8iKTsKKwkJcmV0dXJuOworCX0KKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgc3Bpbl9mbGFncyk7CisJaWYgKChkZXZwcml2LT5jb250cm9sX3N0YXRlICYgRE1BX0VOQUJMRSkgPT0gMCkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgc3Bpbl9mbGFncyk7CisJCURFQlVHX1BSSU5UKCJpbnRlcnJ1cHQgd2hpbGUgZG1hIGRpc2FibGVkP1xuIik7CisJCXJldHVybjsKKwl9CisKKwlkbWFfZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCWNsZWFyX2RtYV9mZihkZXZwcml2LT5kbWFfY2hhbik7CisJcmVzaWR1ZSA9IGRpc2FibGVfZG1hX29uX2V2ZW4oZGV2KTsKKworCS8vIGZpZ3VyZSBvdXQgaG93IG1hbnkgcG9pbnRzIHRvIHJlYWQKKwlpZiAocmVzaWR1ZSA+IGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyZXNpZHVlID4gdHJhbnNmZXIgc2l6ZSFcbiIpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCW51bV9ieXRlcyA9IDA7CisJfSBlbHNlCisJCW51bV9ieXRlcyA9IGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplIC0gcmVzaWR1ZTsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgbnVtX2J5dGVzID49IGRldnByaXYtPmFkY19ieXRlX2NvdW50KSB7CisJCW51bV9ieXRlcyA9IGRldnByaXYtPmFkY19ieXRlX2NvdW50OworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfQorCisJYnVmZmVyX2luZGV4ID0gZGV2cHJpdi0+Y3VycmVudF9idWZmZXI7CisJZGV2cHJpdi0+Y3VycmVudF9idWZmZXIgPSAoZGV2cHJpdi0+Y3VycmVudF9idWZmZXIgKyAxKSAlIDI7CisJZGV2cHJpdi0+YWRjX2J5dGVfY291bnQgLT0gbnVtX2J5dGVzOworCisJLy8gZmlndXJlIG91dCBob3cgbWFueSBieXRlcyBmb3IgbmV4dCB0cmFuc2ZlcgorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+dGltZXJfbW9kZSA9PSAwICYmCisJCWRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplID4gZGV2cHJpdi0+YWRjX2J5dGVfY291bnQpCisJCWRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplID0gZGV2cHJpdi0+YWRjX2J5dGVfY291bnQ7CisKKwkvLyByZS1lbmFibGUgIGRtYQorCWlmICgoYXN5bmMtPmV2ZW50cyAmIENPTUVESV9DQl9FT0EpID09IDApIHsKKwkJc2V0X2RtYV9hZGRyKGRldnByaXYtPmRtYV9jaGFuLAorCQkJZGV2cHJpdi0+ZG1hX2J1ZmZlcl9hZGRyW2RldnByaXYtPmN1cnJlbnRfYnVmZmVyXSk7CisJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hX2NoYW4sIGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKTsKKwkJZW5hYmxlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisJCS8qIHJlZW5hYmxlIGNvbnZlcnNpb25zIGZvciBkYXMxNjAwIG1vZGUsIChzdHVwaWQgaGFyZHdhcmUpICovCisJCWlmICh0aGlzYm9hcmQtPnNpemUgPiAweDQwMCAmJiBkZXZwcml2LT50aW1lcl9tb2RlID09IDApIHsKKwkJCW91dGIoMHgwMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNjAwX0NPTlYpOworCQl9CisJfQorCXJlbGVhc2VfZG1hX2xvY2soZG1hX2ZsYWdzKTsKKworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBzcGluX2ZsYWdzKTsKKworCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywKKwkJZGV2cHJpdi0+ZG1hX2J1ZmZlcltidWZmZXJfaW5kZXhdLCBudW1fYnl0ZXMpOworCisJY2ZjX2hhbmRsZV9ldmVudHMoZGV2LCBzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBkYXMxNl9zZXRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBucywKKwlpbnQgcm91bmRpbmdfZmxhZ3MpCit7CisJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KGRldnByaXYtPmNsb2NrYmFzZSwgJihkZXZwcml2LT5kaXZpc29yMSksCisJCSYoZGV2cHJpdi0+ZGl2aXNvcjIpLCAmbnMsIHJvdW5kaW5nX2ZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKworCS8qIFdyaXRlIHRoZSB2YWx1ZXMgb2YgY3RyMSBhbmQgY3RyMiBpbnRvIGNvdW50ZXJzIDEgYW5kIDIgKi8KKwlpODI1NF9sb2FkKGRldi0+aW9iYXNlICsgREFTMTZfQ05UUjBfREFUQSwgMCwgMSwgZGV2cHJpdi0+ZGl2aXNvcjEsIDIpOworCWk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVMxNl9DTlRSMF9EQVRBLCAwLCAyLCBkZXZwcml2LT5kaXZpc29yMiwgMik7CisKKwlyZXR1cm4gbnM7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ19kdW1wKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCURFQlVHX1BSSU5UKCIqKioqKioqKkRBUzE2MDAgUkVHSVNURVIgRFVNUCoqKioqKioqXG4iKTsKKwlERUJVR19QUklOVCgiREFTMTZfTVVYOiAleFxuIiwgaW5iKGRldi0+aW9iYXNlICsgREFTMTZfTVVYKSk7CisJREVCVUdfUFJJTlQoIkRBUzE2X0RJTzogJXhcbiIsIGluYihkZXYtPmlvYmFzZSArIERBUzE2X0RJTykpOworCURFQlVHX1BSSU5UKCJEQVMxNl9TVEFUVVM6ICV4XG4iLCBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9TVEFUVVMpKTsKKwlERUJVR19QUklOVCgiREFTMTZfQ09OVFJPTDogJXhcbiIsIGluYihkZXYtPmlvYmFzZSArIERBUzE2X0NPTlRST0wpKTsKKwlERUJVR19QUklOVCgiREFTMTZfUEFDRVI6ICV4XG4iLCBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9QQUNFUikpOworCURFQlVHX1BSSU5UKCJEQVMxNl9HQUlOOiAleFxuIiwgaW5iKGRldi0+aW9iYXNlICsgREFTMTZfR0FJTikpOworCURFQlVHX1BSSU5UKCJEQVMxNl9DTlRSX0NPTlRST0w6ICV4XG4iLAorCQlpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9DTlRSX0NPTlRST0wpKTsKKwlERUJVR19QUklOVCgiREFTMTYwMF9DT05WOiAleFxuIiwgaW5iKGRldi0+aW9iYXNlICsgREFTMTYwMF9DT05WKSk7CisJREVCVUdfUFJJTlQoIkRBUzE2MDBfQlVSU1Q6ICV4XG4iLCBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNjAwX0JVUlNUKSk7CisJREVCVUdfUFJJTlQoIkRBUzE2MDBfRU5BQkxFOiAleFxuIiwgaW5iKGRldi0+aW9iYXNlICsgREFTMTYwMF9FTkFCTEUpKTsKKwlERUJVR19QUklOVCgiREFTMTYwMF9TVEFUVVNfQjogJXhcbiIsCisJCWluYihkZXYtPmlvYmFzZSArIERBUzE2MDBfU1RBVFVTX0IpKTsKK30KKworc3RhdGljIGludCBkYXMxNl9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgc3RhdHVzOworCWludCBkaW9iaXRzOworCisJLyogc3RhdHVzIGlzIGF2YWlsYWJsZSBvbiBhbGwgYm9hcmRzICovCisKKwlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9TVEFUVVMpOworCisJaWYgKChzdGF0dXMgJiBVTklQT0xBUikpIHsKKwkJZGV2cHJpdi0+YWlfdW5pcG9sYXIgPSAxOworCX0gZWxzZSB7CisJCWRldnByaXYtPmFpX3VuaXBvbGFyID0gMDsKKwl9CisKKwlpZiAoKHN0YXR1cyAmIERBUzE2X01VWEJJVCkpIHsKKwkJZGV2cHJpdi0+YWlfc2luZ2xlZW5kZWQgPSAxOworCX0gZWxzZSB7CisJCWRldnByaXYtPmFpX3NpbmdsZWVuZGVkID0gMDsKKwl9CisKKwkvKiBkaW9iaXRzIGluZGljYXRlcyBib2FyZHMgKi8KKworCWRpb2JpdHMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNl9ESU8pICYgMHhmMDsKKworCXByaW50aygiIGlkIGJpdHMgYXJlIDB4JTAyeFxuIiwgZGlvYml0cyk7CisJaWYgKHRoaXNib2FyZC0+aWQgIT0gZGlvYml0cykgeworCQlwcmludGsoIiByZXF1ZXN0ZWQgYm9hcmQncyBpZCBiaXRzIGFyZSAweCV4IChpZ25vcmUpXG4iLAorCQkJdGhpc2JvYXJkLT5pZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTYwMF9tb2RlX2RldGVjdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERBUzE2MDBfU1RBVFVTX0IpOworCisJaWYgKHN0YXR1cyAmIERBUzE2MDBfQ0xLXzEwTUhaKSB7CisJCWRldnByaXYtPmNsb2NrYmFzZSA9IDEwMDsKKwkJcHJpbnRrKCIgMTBNSHogcGFjZXIgY2xvY2tcbiIpOworCX0gZWxzZSB7CisJCWRldnByaXYtPmNsb2NrYmFzZSA9IDEwMDA7CisJCXByaW50aygiIDFNSHogcGFjZXIgY2xvY2tcbiIpOworCX0KKworCXJlZ19kdW1wKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCisgKiBPcHRpb25zIGxpc3Q6CisgKiAgIDAgIEkvTyBiYXNlCisgKiAgIDEgIElSUQorICogICAyICBETUEKKyAqICAgMyAgQ2xvY2sgc3BlZWQgKGluIE1IeikKKyAqLworCitzdGF0aWMgaW50IGRhczE2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGRtYV9jaGFuOworCWludCB0aW1lcl9tb2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNvbWVkaV9rcmFuZ2UgKnVzZXJfYWlfcmFuZ2UsICp1c2VyX2FvX3JhbmdlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisjaWYgMAorCWlycSA9IGl0LT5vcHRpb25zWzFdOworCXRpbWVyX21vZGUgPSBpdC0+b3B0aW9uc1s4XTsKKyNlbmRpZgorCS8qIGFsd2F5cyB1c2UgdGltZV9tb2RlIHNpbmNlIHVzaW5nIGlycSBjYW4gZHJvcCBzYW1wbGVzIHdoaWxlCisJICogd2FpdGluZyBmb3IgZG1hIGRvbmUgaW50ZXJydXB0IChkdWUgdG8gaGFyZHdhcmUgbGltaXRhdGlvbnMpICovCisJaXJxID0gMDsKKwl0aW1lcl9tb2RlID0gMTsKKwlpZiAodGltZXJfbW9kZSkKKwkJaXJxID0gMDsKKworCXByaW50aygiY29tZWRpJWQ6IGRhczE2OiIsIGRldi0+bWlub3IpOworCisJLy8gY2hlY2sgdGhhdCBjbG9jayBzZXR0aW5nIGlzIHZhbGlkCisJaWYgKGl0LT5vcHRpb25zWzNdKSB7CisJCWlmIChpdC0+b3B0aW9uc1szXSAhPSAwICYmCisJCQlpdC0+b3B0aW9uc1szXSAhPSAxICYmIGl0LT5vcHRpb25zWzNdICE9IDEwKSB7CisJCQlwcmludGsoIlxuIEludmFsaWQgb3B0aW9uLiAgTWFzdGVyIGNsb2NrIG11c3QgYmUgc2V0IHRvIDEgb3IgMTAgKE1IeilcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRhczE2X3ByaXZhdGVfc3RydWN0KSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICh0aGlzYm9hcmQtPnNpemUgPCAweDQwMCkgeworCQlwcmludGsoIiAweCUwNGx4LTB4JTA0bHhcbiIsIGlvYmFzZSwgaW9iYXNlICsgdGhpc2JvYXJkLT5zaXplKTsKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIHRoaXNib2FyZC0+c2l6ZSwgImRhczE2IikpIHsKKwkJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIgMHglMDRseC0weCUwNGx4IDB4JTA0bHgtMHglMDRseFxuIiwKKwkJCWlvYmFzZSwgaW9iYXNlICsgMHgwZiwKKwkJCWlvYmFzZSArIDB4NDAwLAorCQkJaW9iYXNlICsgMHg0MDAgKyAodGhpc2JvYXJkLT5zaXplICYgMHgzZmYpKTsKKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIDB4MTAsICJkYXMxNiIpKSB7CisJCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdDogIDB4JTA0bHgtMHglMDRseFxuIiwKKwkJCQlpb2Jhc2UsIGlvYmFzZSArIDB4MGYpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UgKyAweDQwMCwgdGhpc2JvYXJkLT5zaXplICYgMHgzZmYsCisJCQkJImRhczE2IikpIHsKKwkJCXJlbGVhc2VfcmVnaW9uKGlvYmFzZSwgMHgxMCk7CisJCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdDogIDB4JTA0bHgtMHglMDRseFxuIiwKKwkJCQlpb2Jhc2UgKyAweDQwMCwKKwkJCQlpb2Jhc2UgKyAweDQwMCArICh0aGlzYm9hcmQtPnNpemUgJiAweDNmZikpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCS8vIHByb2JlIGlkIGJpdHMgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIGNvbnNpc3RlbnQKKwlpZiAoZGFzMTZfcHJvYmUoZGV2LCBpdCkpIHsKKwkJcHJpbnRrKCIgaWQgYml0cyBkbyBub3QgbWF0Y2ggc2VsZWN0ZWQgYm9hcmQsIGFib3J0aW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCS8vIGdldCBtYXN0ZXIgY2xvY2sgc3BlZWQKKwlpZiAodGhpc2JvYXJkLT5zaXplIDwgMHg0MDApIHsKKwkJaWYgKGl0LT5vcHRpb25zWzNdKQorCQkJZGV2cHJpdi0+Y2xvY2tiYXNlID0gMTAwMCAvIGl0LT5vcHRpb25zWzNdOworCQllbHNlCisJCQlkZXZwcml2LT5jbG9ja2Jhc2UgPSAxMDAwOwkvLyAxIE1IeiBkZWZhdWx0CisJfSBlbHNlIHsKKwkJZGFzMTYwMF9tb2RlX2RldGVjdChkZXYpOworCX0KKworCS8qIG5vdyBmb3IgdGhlIGlycSAqLworCWlmIChpcnEgPiAxICYmIGlycSA8IDgpIHsKKwkJaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBkYXMxNl9kbWFfaW50ZXJydXB0LCAwLAorCQkJCQkiZGFzMTYiLCBkZXYpKSA8IDApCisJCQlyZXR1cm4gcmV0OworCQlkZXYtPmlycSA9IGlycTsKKwkJcHJpbnRrKCIgKCBpcnEgPSAldSApIiwgaXJxKTsKKwl9IGVsc2UgaWYgKGlycSA9PSAwKSB7CisJCXByaW50aygiICggbm8gaXJxICkiKTsKKwl9IGVsc2UgeworCQlwcmludGsoIiBpbnZhbGlkIGlycVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8vIGluaXRpYWxpemUgZG1hCisJZG1hX2NoYW4gPSBpdC0+b3B0aW9uc1syXTsKKwlpZiAoZG1hX2NoYW4gPT0gMSB8fCBkbWFfY2hhbiA9PSAzKSB7CisJCS8vIGFsbG9jYXRlIGRtYSBidWZmZXJzCisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlkZXZwcml2LT5kbWFfYnVmZmVyW2ldID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoTlVMTCwKKwkJCQlEQVMxNl9ETUFfU0laRSwgJmRldnByaXYtPmRtYV9idWZmZXJfYWRkcltpXSk7CisJCQlpZiAoZGV2cHJpdi0+ZG1hX2J1ZmZlcltpXSA9PSBOVUxMKQorCQkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWlmIChyZXF1ZXN0X2RtYShkbWFfY2hhbiwgImRhczE2IikpIHsKKwkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgY2hhbm5lbCAlaVxuIiwKKwkJCQlkbWFfY2hhbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXZwcml2LT5kbWFfY2hhbiA9IGRtYV9jaGFuOworCQlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYV9jaGFuLCBETUFfTU9ERV9SRUFEKTsKKwkJcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7CisJCXByaW50aygiICggZG1hID0gJXUpXG4iLCBkbWFfY2hhbik7CisJfSBlbHNlIGlmIChkbWFfY2hhbiA9PSAwKSB7CisJCXByaW50aygiICggbm8gZG1hIClcbiIpOworCX0gZWxzZSB7CisJCXByaW50aygiIGludmFsaWQgZG1hIGNoYW5uZWxcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvLyBnZXQgYW55IHVzZXItZGVmaW5lZCBpbnB1dCByYW5nZQorCWlmICh0aGlzYm9hcmQtPmFpX3BnID09IGRhczE2X3BnX25vbmUgJiYKKwkJKGl0LT5vcHRpb25zWzRdIHx8IGl0LT5vcHRpb25zWzVdKSkgeworCQkvLyBhbGxvY2F0ZSBzaW5nbGUtcmFuZ2UgcmFuZ2UgdGFibGUKKwkJZGV2cHJpdi0+dXNlcl9haV9yYW5nZV90YWJsZSA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2xyYW5nZSkgKyBzaXplb2Yoc3RydWN0IGNvbWVkaV9rcmFuZ2UpLAorCQkJR0ZQX0tFUk5FTCk7CisJCS8vIGluaXRpYWxpemUgYWkgcmFuZ2UKKwkJZGV2cHJpdi0+dXNlcl9haV9yYW5nZV90YWJsZS0+bGVuZ3RoID0gMTsKKwkJdXNlcl9haV9yYW5nZSA9IGRldnByaXYtPnVzZXJfYWlfcmFuZ2VfdGFibGUtPnJhbmdlOworCQl1c2VyX2FpX3JhbmdlLT5taW4gPSBpdC0+b3B0aW9uc1s0XTsKKwkJdXNlcl9haV9yYW5nZS0+bWF4ID0gaXQtPm9wdGlvbnNbNV07CisJCXVzZXJfYWlfcmFuZ2UtPmZsYWdzID0gVU5JVF92b2x0OworCX0KKwkvLyBnZXQgYW55IHVzZXItZGVmaW5lZCBvdXRwdXQgcmFuZ2UKKwlpZiAoaXQtPm9wdGlvbnNbNl0gfHwgaXQtPm9wdGlvbnNbN10pIHsKKwkJLy8gYWxsb2NhdGUgc2luZ2xlLXJhbmdlIHJhbmdlIHRhYmxlCisJCWRldnByaXYtPnVzZXJfYW9fcmFuZ2VfdGFibGUgPQorCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IGNvbWVkaV9scmFuZ2UpICsgc2l6ZW9mKHN0cnVjdCBjb21lZGlfa3JhbmdlKSwKKwkJCUdGUF9LRVJORUwpOworCQkvLyBpbml0aWFsaXplIGFvIHJhbmdlCisJCWRldnByaXYtPnVzZXJfYW9fcmFuZ2VfdGFibGUtPmxlbmd0aCA9IDE7CisJCXVzZXJfYW9fcmFuZ2UgPSBkZXZwcml2LT51c2VyX2FvX3JhbmdlX3RhYmxlLT5yYW5nZTsKKwkJdXNlcl9hb19yYW5nZS0+bWluID0gaXQtPm9wdGlvbnNbNl07CisJCXVzZXJfYW9fcmFuZ2UtPm1heCA9IGl0LT5vcHRpb25zWzddOworCQl1c2VyX2FvX3JhbmdlLT5mbGFncyA9IFVOSVRfdm9sdDsKKwl9CisKKwlpZiAodGltZXJfbW9kZSkgeworCQlpbml0X3RpbWVyKCYoZGV2cHJpdi0+dGltZXIpKTsKKwkJZGV2cHJpdi0+dGltZXIuZnVuY3Rpb24gPSBkYXMxNl90aW1lcl9pbnRlcnJ1cHQ7CisJCWRldnByaXYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJfQorCWRldnByaXYtPnRpbWVyX21vZGUgPSB0aW1lcl9tb2RlID8gMSA6IDA7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA1KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJLyogYWkgKi8KKwlpZiAodGhpc2JvYXJkLT5haSkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9DTURfUkVBRDsKKwkJaWYgKGRldnByaXYtPmFpX3NpbmdsZWVuZGVkKSB7CisJCQlzLT5uX2NoYW4gPSAxNjsKKwkJCXMtPmxlbl9jaGFubGlzdCA9IDE2OworCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9HUk9VTkQ7CisJCX0gZWxzZSB7CisJCQlzLT5uX2NoYW4gPSA4OworCQkJcy0+bGVuX2NoYW5saXN0ID0gODsKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfRElGRjsKKwkJfQorCQlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5haV9uYml0cykgLSAxOworCQlpZiAoZGV2cHJpdi0+dXNlcl9haV9yYW5nZV90YWJsZSkgewkvLyB1c2VyIGRlZmluZWQgYWkgcmFuZ2UKKwkJCXMtPnJhbmdlX3RhYmxlID0gZGV2cHJpdi0+dXNlcl9haV9yYW5nZV90YWJsZTsKKwkJfSBlbHNlIGlmIChkZXZwcml2LT5haV91bmlwb2xhcikgeworCQkJcy0+cmFuZ2VfdGFibGUgPSBkYXMxNl9haV91bmlfbHJhbmdlc1t0aGlzYm9hcmQtPmFpX3BnXTsKKwkJfSBlbHNlIHsKKwkJCXMtPnJhbmdlX3RhYmxlID0gZGFzMTZfYWlfYmlwX2xyYW5nZXNbdGhpc2JvYXJkLT5haV9wZ107CisJCX0KKwkJcy0+aW5zbl9yZWFkID0gdGhpc2JvYXJkLT5haTsKKwkJcy0+ZG9fY21kdGVzdCA9IGRhczE2X2NtZF90ZXN0OworCQlzLT5kb19jbWQgPSBkYXMxNl9jbWRfZXhlYzsKKwkJcy0+Y2FuY2VsID0gZGFzMTZfY2FuY2VsOworCQlzLT5tdW5nZSA9IGRhczE2X2FpX211bmdlOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogYW8gKi8KKwlpZiAodGhpc2JvYXJkLT5hbykgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gMjsKKwkJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+YW9fbmJpdHMpIC0gMTsKKwkJaWYgKGRldnByaXYtPnVzZXJfYW9fcmFuZ2VfdGFibGUpIHsJLy8gdXNlciBkZWZpbmVkIGFvIHJhbmdlCisJCQlzLT5yYW5nZV90YWJsZSA9IGRldnByaXYtPnVzZXJfYW9fcmFuZ2VfdGFibGU7CisJCX0gZWxzZSB7CisJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCQl9CisJCXMtPmluc25fd3JpdGUgPSB0aGlzYm9hcmQtPmFvOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogZGkgKi8KKwlpZiAodGhpc2JvYXJkLT5kaSkgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwkJcy0+bl9jaGFuID0gNDsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IHRoaXNib2FyZC0+ZGk7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkvKiBkbyAqLworCWlmICh0aGlzYm9hcmQtPmRvXykgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9SRUFEQUJMRTsKKwkJcy0+bl9jaGFuID0gNDsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IHRoaXNib2FyZC0+ZG9fOworCQkvLyBpbml0aWFsaXplIGRpZ2l0YWwgb3V0cHV0IGxpbmVzCisJCW91dGIocy0+c3RhdGUsIGRldi0+aW9iYXNlICsgREFTMTZfRElPKTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA0OworCS8qIDgyNTUgKi8KKwlpZiAodGhpc2JvYXJkLT5pODI1NV9vZmZzZXQgIT0gMCkgeworCQlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgKGRldi0+aW9iYXNlICsKKwkJCQl0aGlzYm9hcmQtPmk4MjU1X29mZnNldCkpOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJZGFzMTZfcmVzZXQoZGV2KTsKKwkvKiBzZXQgdGhlIGludGVycnVwdCBsZXZlbCAqLworCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgPSBEQVMxNl9JUlEoZGV2LT5pcnEpOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNl9DT05UUk9MKTsKKworCS8vIHR1cm4gb24gZGFzMTYwMCBtb2RlIGlmIGF2YWlsYWJsZQorCWlmICh0aGlzYm9hcmQtPnNpemUgPiAweDQwMCkgeworCQlvdXRiKERBUzE2MDBfRU5BQkxFX1ZBTCwgZGV2LT5pb2Jhc2UgKyBEQVMxNjAwX0VOQUJMRSk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNjAwX0NPTlYpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTYwMF9CVVJTVCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGRhczE2OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJZGFzMTZfcmVzZXQoZGV2KTsKKworCWlmIChkZXYtPnN1YmRldmljZXMpCisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyA0KTsKKworCWlmIChkZXZwcml2KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlpZiAoZGV2cHJpdi0+ZG1hX2J1ZmZlcltpXSkKKwkJCQlwY2lfZnJlZV9jb25zaXN0ZW50KE5VTEwsIERBUzE2X0RNQV9TSVpFLAorCQkJCQlkZXZwcml2LT5kbWFfYnVmZmVyW2ldLAorCQkJCQlkZXZwcml2LT5kbWFfYnVmZmVyX2FkZHJbaV0pOworCQl9CisJCWlmIChkZXZwcml2LT5kbWFfY2hhbikKKwkJCWZyZWVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkJaWYgKGRldnByaXYtPnVzZXJfYWlfcmFuZ2VfdGFibGUpCisJCQlrZnJlZShkZXZwcml2LT51c2VyX2FpX3JhbmdlX3RhYmxlKTsKKwkJaWYgKGRldnByaXYtPnVzZXJfYW9fcmFuZ2VfdGFibGUpCisJCQlrZnJlZShkZXZwcml2LT51c2VyX2FvX3JhbmdlX3RhYmxlKTsKKwl9CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCWlmIChkZXYtPmlvYmFzZSkgeworCQlpZiAodGhpc2JvYXJkLT5zaXplIDwgMHg0MDApIHsKKwkJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzYm9hcmQtPnNpemUpOworCQl9IGVsc2UgeworCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIDB4MTApOworCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UgKyAweDQwMCwKKwkJCQl0aGlzYm9hcmQtPnNpemUgJiAweDNmZik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXMxNik7CisKKy8vIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBzdWdnZXN0cyBhIGRtYSB0cmFuc2ZlciBzaXplIGluIGJ5dGVzCitzdGF0aWMgdW5zaWduZWQgaW50IGRhczE2X3N1Z2dlc3RfdHJhbnNmZXJfc2l6ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX2NtZCBjbWQpCit7CisJdW5zaWduZWQgaW50IHNpemU7CisJdW5zaWduZWQgaW50IGZyZXE7CisKKwkvKiBpZiB3ZSBhcmUgdXNpbmcgdGltZXIgaW50ZXJydXB0LCB3ZSBkb24ndCBjYXJlIGhvdyBsb25nIGl0CisJICogd2lsbCB0YWtlIHRvIGNvbXBsZXRlIHRyYW5zZmVyIHNpbmNlIGl0IHdpbGwgYmUgaW50ZXJydXB0ZWQKKwkgKiBieSB0aW1lciBpbnRlcnJ1cHQgKi8KKwlpZiAoZGV2cHJpdi0+dGltZXJfbW9kZSkKKwkJcmV0dXJuIERBUzE2X0RNQV9TSVpFOworCisJLyogb3RoZXJ3aXNlLCB3ZSBhcmUgcmVseWluZyBvbiBkbWEgdGVybWluYWwgY291bnQgaW50ZXJydXB0LAorCSAqIHNvIHBpY2sgYSByZWFzb25hYmxlIHNpemUgKi8KKwlpZiAoY21kLmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpCisJCWZyZXEgPSAxMDAwMDAwMDAwIC8gY21kLmNvbnZlcnRfYXJnOworCWVsc2UgaWYgKGNtZC5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKQorCQlmcmVxID0gKDEwMDAwMDAwMDAgLyBjbWQuc2Nhbl9iZWdpbl9hcmcpICogY21kLmNoYW5saXN0X2xlbjsKKwkvLyByZXR1cm4gc29tZSBkZWZhdWx0IHZhbHVlCisJZWxzZQorCQlmcmVxID0gMHhmZmZmZmZmZjsKKworCWlmIChjbWQuZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSB7CisJCXNpemUgPSBzYW1wbGVfc2l6ZSAqIGNtZC5jaGFubGlzdF9sZW47CisJfSBlbHNlIHsKKwkJLy8gbWFrZSBidWZmZXIgZmlsbCBpbiBubyBtb3JlIHRoYW4gMS8zIHNlY29uZAorCQlzaXplID0gKGZyZXEgLyAzKSAqIHNhbXBsZV9zaXplOworCX0KKworCS8vIHNldCBhIG1pbmltdW0gYW5kIG1heGltdW0gc2l6ZSBhbGxvd2VkCisJaWYgKHNpemUgPiBEQVMxNl9ETUFfU0laRSkKKwkJc2l6ZSA9IERBUzE2X0RNQV9TSVpFIC0gREFTMTZfRE1BX1NJWkUgJSBzYW1wbGVfc2l6ZTsKKwllbHNlIGlmIChzaXplIDwgc2FtcGxlX3NpemUpCisJCXNpemUgPSBzYW1wbGVfc2l6ZTsKKworCWlmIChjbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBzaXplID4gZGV2cHJpdi0+YWRjX2J5dGVfY291bnQpCisJCXNpemUgPSBkZXZwcml2LT5hZGNfYnl0ZV9jb3VudDsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgdm9pZCBkYXMxNl9haV9tdW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXZvaWQgKmFycmF5LCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzLCB1bnNpZ25lZCBpbnQgc3RhcnRfY2hhbl9pbmRleCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgbnVtX3NhbXBsZXMgPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOworCXNob3J0ICpkYXRhID0gYXJyYXk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NhbXBsZXM7IGkrKykgeworCQlkYXRhW2ldID0gbGUxNl90b19jcHUoZGF0YVtpXSk7CisJCWlmICh0aGlzYm9hcmQtPmFpX25iaXRzID09IDEyKSB7CisJCQlkYXRhW2ldID0gKGRhdGFbaV0gPj4gNCkgJiAweGZmZjsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXMxNm0xLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTZtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNDIzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTZtMS5jCkBAIC0wLDAgKzEsNzY1IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2RhczE2bTEuYworICAgIENJTy1EQVMxNi9NMSBkcml2ZXIKKyAgICBBdXRob3I6IEZyYW5rIE1vcmkgSGVzcywgYmFzZWQgb24gY29kZSBmcm9tIHRoZSBkYXMxNgorICAgICAgZHJpdmVyLgorICAgIENvcHlyaWdodCAoQykgMjAwMSBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKy8qCitEcml2ZXI6IGRhczE2bTEKK0Rlc2NyaXB0aW9uOiBDSU8tREFTMTYvTTEKK0F1dGhvcjogRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGV2aWNlczogW01lYXN1cmVtZW50IENvbXB1dGluZ10gQ0lPLURBUzE2L00xIChjaW8tZGFzMTYvbTEpCitTdGF0dXM6IHdvcmtzCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGEgc2luZ2xlIGJvYXJkIC0gdGhlIENJTy1EQVMxNi9NMS4KK0FzIGZhciBhcyBJIGtub3csIHRoZXJlIGFyZSBubyBvdGhlciBib2FyZHMgdGhhdCBoYXZlCit0aGUgc2FtZSByZWdpc3RlciBsYXlvdXQuICBFdmVuIHRoZSBDSU8tREFTMTYvTTEvMTYgaXMKK3NpZ25pZmljYW50bHkgZGlmZmVyZW50LgorCitJIHdhcyBfYmFyZWx5XyBhYmxlIHRvIHJlYWNoIHRoZSBmdWxsIDEgTUh6IGNhcGFiaWxpdHkKK29mIHRoaXMgYm9hcmQsIHVzaW5nIGEgaGFyZCByZWFsLXRpbWUgaW50ZXJydXB0Cisoc2V0IHRoZSBUUklHX1JUIGZsYWcgaW4geW91ciBzdHJ1Y3QgY29tZWRpX2NtZCBhbmQgdXNlCitydGxpbnV4IG9yIFJUQUkpLiAgVGhlIGJvYXJkIGNhbid0IGRvIGRtYSwgc28gdGhlIGJvdHRsZW5lY2sgaXMKK3B1bGxpbmcgdGhlIGRhdGEgYWNyb3NzIHRoZSBJU0EgYnVzLiAgSSB0aW1lZCB0aGUgaW50ZXJydXB0CitoYW5kbGVyLCBhbmQgaXQgdG9vayBteSBjb21wdXRlciB+NDcwIG1pY3Jvc2Vjb25kcyB0byBwdWxsIDUxMgorc2FtcGxlcyBmcm9tIHRoZSBib2FyZC4gIFNvIGF0IDEgTWh6IHNhbXBsaW5nIHJhdGUsCitleHBlY3QgeW91ciBDUFUgdG8gYmUgc3BlbmRpbmcgYWxtb3N0IGFsbCBvZiBpdHMKK3RpbWUgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLgorCitUaGlzIGJvYXJkIGhhcyBzb21lIHVudXN1YWwgcmVzdHJpY3Rpb25zIGZvciBpdHMgY2hhbm5lbC9nYWluIGxpc3QuICBJZiB0aGUKK2xpc3QgaGFzIDIgb3IgbW9yZSBjaGFubmVscyBpbiBpdCwgdGhlbiB0d28gY29uZGl0aW9ucyBtdXN0IGJlIHNhdGlzZmllZDoKKygxKSAtIGV2ZW4vb2RkIGNoYW5uZWxzIG11c3QgYXBwZWFyIGF0IGV2ZW4vb2RkIGluZGljZXMgaW4gdGhlIGxpc3QKKygyKSAtIHRoZSBsaXN0IG11c3QgaGF2ZSBhbiBldmVuIG51bWJlciBvZiBlbnRyaWVzLgorCitPcHRpb25zOgorICAgICAgICBbMF0gLSBiYXNlIGlvIGFkZHJlc3MKKyAgICAgICAgWzFdIC0gaXJxIChvcHRpb25hbCwgYnV0IHlvdSBwcm9iYWJseSB3YW50IGl0KQorCitpcnEgY2FuIGJlIG9taXR0ZWQsIGFsdGhvdWdoIHRoZSBjbWQgaW50ZXJmYWNlIHdpbGwgbm90IHdvcmsgd2l0aG91dCBpdC4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyNkZWZpbmUgREFTMTZNMV9TSVpFIDE2CisjZGVmaW5lIERBUzE2TTFfU0laRTIgOAorCisjZGVmaW5lIERBUzE2TTFfWFRBTCAxMDAJLy8xMCBNSHogbWFzdGVyIGNsb2NrCisKKyNkZWZpbmUgRklGT19TSVpFIDEwMjQJCS8vIDEwMjQgc2FtcGxlIGZpZm8KKworLyoKKyAgICBDSU8tREFTMTZfTTEucGRmCisKKyAgICAiY2lvLWRhczE2L20xIgorCisgIDAJYS9kIGJpdHMgMC0zLCBtdXgJCXN0YXJ0IDEyIGJpdAorICAxCWEvZCBiaXRzIDQtMTEJCXVudXNlZAorICAyCXN0YXR1cwkJY29udHJvbAorICAzCWRpIDQgYml0CQlkbyA0IGJpdAorICA0CXVudXNlZAkJCWNsZWFyIGludGVycnVwdAorICA1CWludGVycnVwdCwgcGFjZXIKKyAgNgljaGFubmVsL2dhaW4gcXVldWUgYWRkcmVzcworICA3CWNoYW5uZWwvZ2FpbiBxdWV1ZSBkYXRhCisgIDg5YWIJODI1NAorICBjZGVmCTgyNTQKKyAgNDAwCTgyNTUKKyAgNDA0LTQwNyAJODI1NAorCisqLworCisjZGVmaW5lIERBUzE2TTFfQUkgICAgICAgICAgICAgMAkvLyAxNi1iaXQgd2lkZSByZWdpc3RlcgorI2RlZmluZSAgIEFJX0NIQU4oeCkgICAgICAgICAgICAgKCh4KSAmIDB4ZikKKyNkZWZpbmUgREFTMTZNMV9DUyAgICAgICAgICAgICAyCisjZGVmaW5lICAgRVhUX1RSSUdfQklUICAgICAgICAgICAweDEKKyNkZWZpbmUgICBPVlJVTiAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgICBJUlFEQVRBICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgREFTMTZNMV9ESU8gICAgICAgICAgICAzCisjZGVmaW5lIERBUzE2TTFfQ0xFQVJfSU5UUiAgICAgNAorI2RlZmluZSBEQVMxNk0xX0lOVFJfQ09OVFJPTCAgIDUKKyNkZWZpbmUgICBFWFRfUEFDRVIgICAgICAgICAgICAgIDB4MgorI2RlZmluZSAgIElOVF9QQUNFUiAgICAgICAgICAgICAgMHgzCisjZGVmaW5lICAgUEFDRVJfTUFTSyAgICAgICAgICAgICAweDMKKyNkZWZpbmUgICBJTlRFICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgREFTMTZNMV9RVUVVRV9BRERSICAgICA2CisjZGVmaW5lIERBUzE2TTFfUVVFVUVfREFUQSAgICAgNworI2RlZmluZSAgIFFfQ0hBTih4KSAgICAgICAgICAgICAgKCh4KSAmIDB4NykKKyNkZWZpbmUgICBRX1JBTkdFKHgpICAgICAgICAgICAgICgoKHgpICYgMHhmKSA8PCA0KQorI2RlZmluZSAgIFVOSVBPTEFSICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBEQVMxNk0xXzgyNTRfRklSU1QgICAgICAgICAgICAgMHg4CisjZGVmaW5lIERBUzE2TTFfODI1NF9GSVJTVF9DTlRSTCAgICAgICAweGIKKyNkZWZpbmUgICBUT1RBTF9DTEVBUiAgICAgICAgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBEQVMxNk0xXzgyNTRfU0VDT05EICAgICAgICAgICAgMHhjCisjZGVmaW5lIERBUzE2TTFfODJDNTUgICAgICAgICAgICAgICAgICAweDQwMAorI2RlZmluZSBEQVMxNk0xXzgyNTRfVEhJUkQgICAgICAgICAgICAgMHg0MDQKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczE2bTEgPSB7IDksCisJeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCQkJVU5JX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJfQorfTsKKworc3RhdGljIGludCBkYXMxNm0xX2RvX3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE2bTFfZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMTZtMV9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGRhczE2bTFfY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IGRhczE2bTFfY21kX2V4ZWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGRhczE2bTFfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgaW50IGRhczE2bTFfcG9sbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYXMxNm0xX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyB2b2lkIGRhczE2bTFfaGFuZGxlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHN0YXR1cyk7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFzMTZtMV9zZXRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBucywKKwlpbnQgcm91bmRfZmxhZyk7CisKK3N0YXRpYyBpbnQgZGFzMTZtMV9pcnFfYml0cyh1bnNpZ25lZCBpbnQgaXJxKTsKKworc3RydWN0IGRhczE2bTFfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IGFpX3NwZWVkOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXMxNm0xX2JvYXJkIGRhczE2bTFfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJjaW8tZGFzMTYvbTEiLAkvLyBDSU8tREFTMTZfTTEucGRmCisJICAgICAgYWlfc3BlZWQ6MTAwMCwJLy8gMU1IeiBtYXggc3BlZWQKKwkJfSwKK307CisKKyNkZWZpbmUgZGFzMTZtMV9udW1fYm9hcmRzICgoc2l6ZW9mKGRhczE2bTFfYm9hcmRzKSkgLyAoc2l6ZW9mKGRhczE2bTFfYm9hcmRzWzBdKSkpCisKK3N0YXRpYyBpbnQgZGFzMTZtMV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkYXMxNm0xX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RhczE2bTEgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZGFzMTZtMSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGFzMTZtMV9hdHRhY2gsCisgICAgICBkZXRhY2g6ZGFzMTZtMV9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZkYXMxNm0xX2JvYXJkc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOmRhczE2bTFfbnVtX2JvYXJkcywKKyAgICAgIG9mZnNldDpzaXplb2YoZGFzMTZtMV9ib2FyZHNbMF0pLAorfTsKKworc3RydWN0IGRhczE2bTFfcHJpdmF0ZV9zdHJ1Y3QgeworCXVuc2lnbmVkIGludCBjb250cm9sX3N0YXRlOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBhZGNfY291bnQ7CS8vIG51bWJlciBvZiBzYW1wbGVzIGNvbXBsZXRlZAorCS8qIGluaXRpYWwgdmFsdWUgaW4gbG93ZXIgaGFsZiBvZiBoYXJkd2FyZSBjb252ZXJzaW9uIGNvdW50ZXIsCisJICogbmVlZGVkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBuZXcgY291bnQgaGFzIGJlZW4gbG9hZGVkIGludG8KKwkgKiBjb3VudGVyIHlldCAobG9hZGVkIGJ5IGZpcnN0IHNhbXBsZSBjb252ZXJzaW9uKSAqLworCXUxNiBpbml0aWFsX2h3X2NvdW50OworCXNob3J0IGFpX2J1ZmZlcltGSUZPX1NJWkVdOworCXVuc2lnbmVkIGludCBkb19iaXRzOwkvLyBzYXZlcyBzdGF0dXMgb2YgZGlnaXRhbCBvdXRwdXQgYml0cworCXVuc2lnbmVkIGludCBkaXZpc29yMTsJLy8gZGl2aWRlcyBtYXN0ZXIgY2xvY2sgdG8gb2J0YWluIGNvbnZlcnNpb24gc3BlZWQKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjI7CS8vIGRpdmlkZXMgbWFzdGVyIGNsb2NrIHRvIG9idGFpbiBjb252ZXJzaW9uIHNwZWVkCit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhczE2bTFfcHJpdmF0ZV9zdHJ1Y3QgKikoZGV2LT5wcml2YXRlKSkKKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGRhczE2bTFfYm9hcmQgKikoZGV2LT5ib2FyZF9wdHIpKQorCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2RhczE2bTEpOworCitzdGF0aWMgaW5saW5lIHNob3J0IG11bmdlX3NhbXBsZShzaG9ydCBkYXRhKQoreworCXJldHVybiAoZGF0YSA+PiA0KSAmIDB4ZmZmOworfQorCitzdGF0aWMgaW50IGRhczE2bTFfY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwl1bnNpZ25lZCBpbnQgZXJyID0gMCwgdG1wLCBpOworCisJLyogbWFrZSBzdXJlIHRyaWdnZXJzIGFyZSB2YWxpZCAqLworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkvKiBpbnRlcm5hbCB0cmlnZ2VyICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc2JvYXJkLT5haV9zcGVlZCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNib2FyZC0+YWlfc3BlZWQ7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCS8qIGFueSBjb3VudCBpcyBhbGxvd2VkICovCisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQkvKiBjYWxjdWxhdGUgY291bnRlciB2YWx1ZXMgdGhhdCBnaXZlIGRlc2lyZWQgdGltaW5nICovCisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihEQVMxNk0xX1hUQUwsCisJCQkmKGRldnByaXYtPmRpdmlzb3IxKSwgJihkZXZwcml2LT5kaXZpc29yMiksCisJCQkmKGNtZC0+Y29udmVydF9hcmcpLCBjbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwkvLyBjaGVjayBjaGFubGlzdCBhZ2FpbnN0IGJvYXJkJ3MgcGVjdWxpYXJpdGllcworCWlmIChjbWQtPmNoYW5saXN0ICYmIGNtZC0+Y2hhbmxpc3RfbGVuID4gMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJLy8gZXZlbi9vZGQgY2hhbm5lbHMgbXVzdCBnbyBpbnRvIGV2ZW4vb2RkIHF1ZXVlIGFkZHJlc3NlcworCQkJaWYgKChpICUgMikgIT0gKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgJSAyKSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsICJiYWQgY2hhbmxpc3Q6XG4iCisJCQkJCSIgZXZlbi9vZGQgY2hhbm5lbHMgbXVzdCBnbyBoYXZlIGV2ZW4vb2RkIGNoYW5saXN0IGluZGljZXMiKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCQlpZiAoKGNtZC0+Y2hhbmxpc3RfbGVuICUgMikgIT0gMCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkiY2hhbmxpc3QgbXVzdCBiZSBvZiBldmVuIGxlbmd0aCBvciBsZW5ndGggMSIpOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczE2bTFfY21kX2V4ZWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgYnl0ZSwgaTsKKworCWlmIChkZXYtPmlycSA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJpcnEgcmVxdWlyZWQgdG8gZXhlY3V0ZSBjb21lZGlfY21kIik7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgYW5kIGludGVybmFsIHBhY2VyICovCisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+SU5URSAmIH5QQUNFUl9NQVNLOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0lOVFJfQ09OVFJPTCk7CisKKwkvLyBzZXQgc29mdHdhcmUgY291bnQKKwlkZXZwcml2LT5hZGNfY291bnQgPSAwOworCS8qIEluaXRpYWxpemUgbG93ZXIgaGFsZiBvZiBoYXJkd2FyZSBjb3VudGVyLCB1c2VkIHRvIGRldGVybWluZSBob3cKKwkgKiBtYW55IHNhbXBsZXMgYXJlIGluIGZpZm8uICBWYWx1ZSBkb2Vzbid0IGFjdHVhbGx5IGxvYWQgaW50byBjb3VudGVyCisJICogdW50aWwgY291bnRlcidzIG5leHQgY2xvY2sgKHRoZSBuZXh0IGEvZCBjb252ZXJzaW9uKSAqLworCWk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVMxNk0xXzgyNTRfRklSU1QsIDAsIDEsIDAsIDIpOworCS8qIHJlbWVtYmVyIGN1cnJlbnQgcmVhZGluZyBvZiBjb3VudGVyIHNvIHdlIGtub3cgd2hlbiBjb3VudGVyIGhhcworCSAqIGFjdHVhbGx5IGJlZW4gbG9hZGVkICovCisJZGV2cHJpdi0+aW5pdGlhbF9od19jb3VudCA9CisJCWk4MjU0X3JlYWQoZGV2LT5pb2Jhc2UgKyBEQVMxNk0xXzgyNTRfRklSU1QsIDAsIDEpOworCS8qIHNldHVwIGNoYW5uZWwvZ2FpbiBxdWV1ZSAqLworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCW91dGIoaSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX1FVRVVFX0FERFIpOworCQlieXRlID0gUV9DSEFOKENSX0NIQU4oY21kLT4KKwkJCQljaGFubGlzdFtpXSkpIHwgUV9SQU5HRShDUl9SQU5HRShjbWQtPgorCQkJCWNoYW5saXN0W2ldKSk7CisJCW91dGIoYnl0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX1FVRVVFX0RBVEEpOworCX0KKworCS8qIHNldCBjb3VudGVyIG1vZGUgYW5kIGNvdW50cyAqLworCWNtZC0+Y29udmVydF9hcmcgPQorCQlkYXMxNm0xX3NldF9wYWNlcihkZXYsIGNtZC0+Y29udmVydF9hcmcsCisJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCisJLy8gc2V0IGNvbnRyb2wgJiBzdGF0dXMgcmVnaXN0ZXIKKwlieXRlID0gMDsKKwkvKiBpZiB3ZSBhcmUgdXNpbmcgZXh0ZXJuYWwgc3RhcnQgdHJpZ2dlciAoYWxzbyBib2FyZCBkaXNsaWtlcyBoYXZpbmcKKwkgKiBib3RoIHN0YXJ0IGFuZCBjb252ZXJzaW9uIHRyaWdnZXJzIGV4dGVybmFsIHNpbXVsdGFuZW91c2x5KSAqLworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKSB7CisJCWJ5dGUgfD0gRVhUX1RSSUdfQklUOworCX0KKwlvdXRiKGJ5dGUsIGRldi0+aW9iYXNlICsgREFTMTZNMV9DUyk7CisJLyogY2xlYXIgaW50ZXJydXB0IGJpdCAqLworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0NMRUFSX0lOVFIpOworCisJLyogZW5hYmxlIGludGVycnVwdHMgYW5kIGludGVybmFsIHBhY2VyICovCisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+UEFDRVJfTUFTSzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgfD0gSU5UX1BBQ0VSOworCX0gZWxzZSB7CisJCWRldnByaXYtPmNvbnRyb2xfc3RhdGUgfD0gRVhUX1BBQ0VSOworCX0KKwlkZXZwcml2LT5jb250cm9sX3N0YXRlIHw9IElOVEU7CisJb3V0YihkZXZwcml2LT5jb250cm9sX3N0YXRlLCBkZXYtPmlvYmFzZSArIERBUzE2TTFfSU5UUl9DT05UUk9MKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczE2bTFfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+SU5URSAmIH5QQUNFUl9NQVNLOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0lOVFJfQ09OVFJPTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkYXMxNm0xX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgbjsKKwlpbnQgYnl0ZTsKKwljb25zdCBpbnQgdGltZW91dCA9IDEwMDA7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgYW5kIGludGVybmFsIHBhY2VyICovCisJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSAmPSB+SU5URSAmIH5QQUNFUl9NQVNLOworCW91dGIoZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0lOVFJfQ09OVFJPTCk7CisKKwkvKiBzZXR1cCBjaGFubmVsL2dhaW4gcXVldWUgKi8KKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTZNMV9RVUVVRV9BRERSKTsKKwlieXRlID0gUV9DSEFOKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKSB8IFFfUkFOR0UoQ1JfUkFOR0UoaW5zbi0+CisJCQljaGFuc3BlYykpOworCW91dGIoYnl0ZSwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX1FVRVVFX0RBVEEpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkvKiBjbGVhciBJUlFEQVRBIGJpdCAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgREFTMTZNMV9DTEVBUl9JTlRSKTsKKwkJLyogdHJpZ2dlciBjb252ZXJzaW9uICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UpOworCisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmIChpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0NTKSAmIElSUURBVEEpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gdGltZW91dCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXQiKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKwkJZGF0YVtuXSA9IG11bmdlX3NhbXBsZShpbncoZGV2LT5pb2Jhc2UpKTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBkYXMxNm0xX2RpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0czsKKworCWJpdHMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0RJTykgJiAweGY7CisJZGF0YVsxXSA9IGJpdHM7CisJZGF0YVswXSA9IDA7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkYXMxNm0xX2RvX3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgd2JpdHM7CisKKwkvLyBvbmx5IHNldCBiaXRzIHRoYXQgaGF2ZSBiZWVuIG1hc2tlZAorCWRhdGFbMF0gJj0gMHhmOworCXdiaXRzID0gZGV2cHJpdi0+ZG9fYml0czsKKwkvLyB6ZXJvIGJpdHMgdGhhdCBoYXZlIGJlZW4gbWFza2VkCisJd2JpdHMgJj0gfmRhdGFbMF07CisJLy8gc2V0IG1hc2tlZCBiaXRzCisJd2JpdHMgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJZGV2cHJpdi0+ZG9fYml0cyA9IHdiaXRzOworCWRhdGFbMV0gPSB3Yml0czsKKworCW91dGIoZGV2cHJpdi0+ZG9fYml0cywgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0RJTyk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkYXMxNm0xX3BvbGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwkvLyBwcmV2ZW50IHJhY2Ugd2l0aCBpbnRlcnJ1cHQgaGFuZGxlcgorCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERBUzE2TTFfQ1MpOworCWRhczE2bTFfaGFuZGxlcihkZXYsIHN0YXR1cyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzLT5hc3luYy0+YnVmX3dyaXRlX2NvdW50IC0gcy0+YXN5bmMtPmJ1Zl9yZWFkX2NvdW50OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTZtMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCisJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicHJlbWF0dXJlIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCS8vIHByZXZlbnQgcmFjZSB3aXRoIGNvbWVkaV9wb2xsKCkKKwlzcGluX2xvY2soJmRldi0+c3BpbmxvY2spOworCisJc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTZNMV9DUyk7CisKKwlpZiAoKHN0YXR1cyAmIChJUlFEQVRBIHwgT1ZSVU4pKSA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJzcHVyaW91cyBpbnRlcnJ1cHQiKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJZGFzMTZtMV9oYW5kbGVyKGRldiwgc3RhdHVzKTsKKworCS8qIGNsZWFyIGludGVycnVwdCAqLworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0NMRUFSX0lOVFIpOworCisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbXVuZ2Vfc2FtcGxlX2FycmF5KHNob3J0ICogYXJyYXksIHVuc2lnbmVkIGludCBudW1fZWxlbWVudHMpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VsZW1lbnRzOyBpKyspIHsKKwkJYXJyYXlbaV0gPSBtdW5nZV9zYW1wbGUoYXJyYXlbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQgZGFzMTZtMV9oYW5kbGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQ7CisJdTE2IG51bV9zYW1wbGVzOworCXUxNiBod19jb3VudGVyOworCisJcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJYXN5bmMgPSBzLT5hc3luYzsKKwlhc3luYy0+ZXZlbnRzID0gMDsKKwljbWQgPSAmYXN5bmMtPmNtZDsKKworCS8vIGZpZ3VyZSBvdXQgaG93IG1hbnkgc2FtcGxlcyBhcmUgaW4gZmlmbworCWh3X2NvdW50ZXIgPSBpODI1NF9yZWFkKGRldi0+aW9iYXNlICsgREFTMTZNMV84MjU0X0ZJUlNULCAwLCAxKTsKKwkvKiBtYWtlIHN1cmUgaGFyZHdhcmUgY291bnRlciByZWFkaW5nIGlzIG5vdCBib2d1cyBkdWUgdG8gaW5pdGlhbCB2YWx1ZQorCSAqIG5vdCBoYXZpbmcgYmVlbiBsb2FkZWQgeWV0ICovCisJaWYgKGRldnByaXYtPmFkY19jb3VudCA9PSAwICYmIGh3X2NvdW50ZXIgPT0gZGV2cHJpdi0+aW5pdGlhbF9od19jb3VudCkgeworCQludW1fc2FtcGxlcyA9IDA7CisJfSBlbHNlIHsKKwkJLyogVGhlIGNhbGN1bGF0aW9uIG9mIG51bV9zYW1wbGVzIGxvb2tzIG9kZCwgYnV0IGl0IHVzZXMgdGhlIGZvbGxvd2luZyBmYWN0cy4KKwkJICogMTYgYml0IGhhcmR3YXJlIGNvdW50ZXIgaXMgaW5pdGlhbGl6ZWQgd2l0aCB2YWx1ZSBvZiB6ZXJvICh3aGljaCByZWFsbHkKKwkJICogbWVhbnMgMHgxMDAwKS4gIFRoZSBjb3VudGVyIGRlY3JlbWVudHMgYnkgb25lIG9uIGVhY2ggY29udmVyc2lvbgorCQkgKiAod2hlbiB0aGUgY291bnRlciBkZWNyZW1lbnRzIGZyb20gemVybyBpdCBnb2VzIHRvIDB4ZmZmZikuICBudW1fc2FtcGxlcworCQkgKiBpcyBhIDE2IGJpdCB2YXJpYWJsZSwgc28gaXQgd2lsbCByb2xsIG92ZXIgaW4gYSBzaW1pbGFyIGZhc2hpb24gdG8gdGhlCisJCSAqIGhhcmR3YXJlIGNvdW50ZXIuICBXb3JrIGl0IG91dCwgYW5kIHRoaXMgaXMgd2hhdCB5b3UgZ2V0LiAqLworCQludW1fc2FtcGxlcyA9IC1od19jb3VudGVyIC0gZGV2cHJpdi0+YWRjX2NvdW50OworCX0KKwkvLyBjaGVjayBpZiB3ZSBvbmx5IG5lZWQgc29tZSBvZiB0aGUgcG9pbnRzCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAobnVtX3NhbXBsZXMgPiBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW4pCisJCQludW1fc2FtcGxlcyA9IGNtZC0+c3RvcF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbjsKKwl9CisJLy8gbWFrZSBzdXJlIHdlIGRvbnQgdHJ5IHRvIGdldCB0b28gbWFueSBwb2ludHMgaWYgZmlmbyBoYXMgb3ZlcnJ1bgorCWlmIChudW1fc2FtcGxlcyA+IEZJRk9fU0laRSkKKwkJbnVtX3NhbXBsZXMgPSBGSUZPX1NJWkU7CisJaW5zdyhkZXYtPmlvYmFzZSwgZGV2cHJpdi0+YWlfYnVmZmVyLCBudW1fc2FtcGxlcyk7CisJbXVuZ2Vfc2FtcGxlX2FycmF5KGRldnByaXYtPmFpX2J1ZmZlciwgbnVtX3NhbXBsZXMpOworCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGV2cHJpdi0+YWlfYnVmZmVyLAorCQludW1fc2FtcGxlcyAqIHNpemVvZihzaG9ydCkpOworCWRldnByaXYtPmFkY19jb3VudCArPSBudW1fc2FtcGxlczsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKGRldnByaXYtPmFkY19jb3VudCA+PSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW4pIHsJLyogZW5kIG9mIGFjcXVpc2l0aW9uICovCisJCQlkYXMxNm0xX2NhbmNlbChkZXYsIHMpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQl9CisJfQorCisJLyogdGhpcyBwcm9iYWJseSB3b24ndCBjYXRjaCBvdmVycnVucyBzaW5jZSB0aGUgY2FyZCBkb2Vzbid0IGdlbmVyYXRlCisJICogb3ZlcnJ1biBpbnRlcnJ1cHRzLCBidXQgd2UgbWlnaHQgYXMgd2VsbCB0cnkgKi8KKwlpZiAoc3RhdHVzICYgT1ZSVU4pIHsKKwkJZGFzMTZtMV9jYW5jZWwoZGV2LCBzKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQljb21lZGlfZXJyb3IoZGV2LCAiZmlmbyBvdmVyZmxvdyIpOworCX0KKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCit9CisKKy8qIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSB0aW1lIGluIG5hbm9zZWNvbmRzIGFuZCBzZXRzIHRoZSAgICAgKgorICogMiBwYWNlciBjbG9ja3MgdG8gdGhlIGNsb3Nlc3QgZnJlcXVlbmN5IHBvc3NpYmxlLiBJdCBhbHNvICAqCisgKiByZXR1cm5zIHRoZSBhY3R1YWwgc2FtcGxpbmcgcGVyaW9kLiAgICAgICAgICAgICAgICAgICAgICAgICovCitzdGF0aWMgdW5zaWduZWQgaW50IGRhczE2bTFfc2V0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgbnMsCisJaW50IHJvdW5kaW5nX2ZsYWdzKQoreworCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihEQVMxNk0xX1hUQUwsICYoZGV2cHJpdi0+ZGl2aXNvcjEpLAorCQkmKGRldnByaXYtPmRpdmlzb3IyKSwgJm5zLCByb3VuZGluZ19mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisKKwkvKiBXcml0ZSB0aGUgdmFsdWVzIG9mIGN0cjEgYW5kIGN0cjIgaW50byBjb3VudGVycyAxIGFuZCAyICovCisJaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzE2TTFfODI1NF9TRUNPTkQsIDAsIDEsIGRldnByaXYtPmRpdmlzb3IxLAorCQkyKTsKKwlpODI1NF9sb2FkKGRldi0+aW9iYXNlICsgREFTMTZNMV84MjU0X1NFQ09ORCwgMCwgMiwgZGV2cHJpdi0+ZGl2aXNvcjIsCisJCTIpOworCisJcmV0dXJuIG5zOworfQorCitzdGF0aWMgaW50IGRhczE2bTFfaXJxX2JpdHModW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChpcnEpIHsKKwljYXNlIDEwOgorCQlyZXQgPSAweDA7CisJCWJyZWFrOworCWNhc2UgMTE6CisJCXJldCA9IDB4MTsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJcmV0ID0gMHgyOworCQlicmVhazsKKwljYXNlIDE1OgorCQlyZXQgPSAweDM7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0ID0gMHg0OworCQlicmVhazsKKwljYXNlIDM6CisJCXJldCA9IDB4NTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlyZXQgPSAweDY7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJcmV0ID0gMHg3OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKHJldCA8PCA0KTsKK30KKworLyoKKyAqIE9wdGlvbnMgbGlzdDoKKyAqICAgMCAgSS9PIGJhc2UKKyAqICAgMSAgSVJRCisgKi8KKworc3RhdGljIGludCBkYXMxNm0xX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKworCXByaW50aygiY29tZWRpJWQ6IGRhczE2bTE6IiwgZGV2LT5taW5vcik7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LAorCQkJCXNpemVvZihzdHJ1Y3QgZGFzMTZtMV9wcml2YXRlX3N0cnVjdCkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlwcmludGsoIiBpbyAweCVseC0weCVseCAweCVseC0weCVseCIsCisJCWlvYmFzZSwgaW9iYXNlICsgREFTMTZNMV9TSVpFLAorCQlpb2Jhc2UgKyBEQVMxNk0xXzgyQzU1LCBpb2Jhc2UgKyBEQVMxNk0xXzgyQzU1ICsgREFTMTZNMV9TSVpFMik7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIERBUzE2TTFfU0laRSwgZHJpdmVyX2RhczE2bTEuZHJpdmVyX25hbWUpKSB7CisJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlICsgREFTMTZNMV84MkM1NSwgREFTMTZNMV9TSVpFMiwKKwkJCWRyaXZlcl9kYXMxNm0xLmRyaXZlcl9uYW1lKSkgeworCQlyZWxlYXNlX3JlZ2lvbihpb2Jhc2UsIERBUzE2TTFfU0laRSk7CisJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJLyogbm93IGZvciB0aGUgaXJxICovCisJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJLy8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkCisJaWYgKGRhczE2bTFfaXJxX2JpdHMoaXJxKSA+PSAwKSB7CisJCXJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGRhczE2bTFfaW50ZXJydXB0LCAwLAorCQkJZHJpdmVyX2RhczE2bTEuZHJpdmVyX25hbWUsIGRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoIiwgaXJxIHVuYXZhaWxhYmxlXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJZGV2LT5pcnEgPSBpcnE7CisJCXByaW50aygiLCBpcnEgJXVcbiIsIGlycSk7CisJfSBlbHNlIGlmIChpcnEgPT0gMCkgeworCQlwcmludGsoIiwgbm8gaXJxXG4iKTsKKwl9IGVsc2UgeworCQlwcmludGsoIiwgaW52YWxpZCBpcnFcbiIKKwkJCSIgdmFsaWQgaXJxcyBhcmUgMiwgMywgNSwgNywgMTAsIDExLCAxMiwgb3IgMTVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJLyogYWkgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDg7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX0RJRkY7CisJcy0+bGVuX2NoYW5saXN0ID0gMjU2OworCXMtPm1heGRhdGEgPSAoMSA8PCAxMikgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RhczE2bTE7CisJcy0+aW5zbl9yZWFkID0gZGFzMTZtMV9haV9yaW5zbjsKKwlzLT5kb19jbWR0ZXN0ID0gZGFzMTZtMV9jbWRfdGVzdDsKKwlzLT5kb19jbWQgPSBkYXMxNm0xX2NtZF9leGVjOworCXMtPmNhbmNlbCA9IGRhczE2bTFfY2FuY2VsOworCXMtPnBvbGwgPSBkYXMxNm0xX3BvbGw7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBkaSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGRhczE2bTFfZGlfcmJpdHM7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBkbyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGRhczE2bTFfZG9fd2JpdHM7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkvKiA4MjU1ICovCisJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsIGRldi0+aW9iYXNlICsgREFTMTZNMV84MkM1NSk7CisKKwkvLyBkaXNhYmxlIHVwcGVyIGhhbGYgb2YgaGFyZHdhcmUgY29udmVyc2lvbiBjb3VudGVyIHNvIGl0IGRvZXNuJ3QgbWVzcyB3aXRoIHVzCisJb3V0YihUT1RBTF9DTEVBUiwgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xXzgyNTRfRklSU1RfQ05UUkwpOworCisJLy8gaW5pdGlhbGl6ZSBkaWdpdGFsIG91dHB1dCBsaW5lcworCW91dGIoZGV2cHJpdi0+ZG9fYml0cywgZGV2LT5pb2Jhc2UgKyBEQVMxNk0xX0RJTyk7CisKKwkvKiBzZXQgdGhlIGludGVycnVwdCBsZXZlbCAqLworCWlmIChkZXYtPmlycSkKKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSA9IGRhczE2bTFfaXJxX2JpdHMoZGV2LT5pcnEpOworCWVsc2UKKwkJZGV2cHJpdi0+Y29udHJvbF9zdGF0ZSA9IDA7CisJb3V0YihkZXZwcml2LT5jb250cm9sX3N0YXRlLCBkZXYtPmlvYmFzZSArIERBUzE2TTFfSU5UUl9DT05UUk9MKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczE2bTFfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGRhczE2bTE6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKy8vICAgICAgZGFzMTZtMV9yZXNldChkZXYpOworCisJaWYgKGRldi0+c3ViZGV2aWNlcykKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDMpOworCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIERBUzE2TTFfU0laRSk7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlICsgREFTMTZNMV84MkM1NSwgREFTMTZNMV9TSVpFMik7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMTgwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDRjZDRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczE4MDAuYwpAQCAtMCwwICsxLDE3NTggQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvZGFzMTgwMC5jCisgICAgRHJpdmVyIGZvciBLZWl0bGV5IGRhczE3MDAvZGFzMTgwMCBzZXJpZXMgYm9hcmRzCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKK0RyaXZlcjogZGFzMTgwMAorRGVzY3JpcHRpb246IEtlaXRobGV5IE1ldHJhYnl0ZSBEQVMxODAwICgmIGNvbXBhdGlibGVzKQorQXV0aG9yOiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEZXZpY2VzOiBbS2VpdGhsZXkgTWV0cmFieXRlXSBEQVMtMTcwMVNUIChkYXMtMTcwMXN0KSwKKyAgREFTLTE3MDFTVC1EQSAoZGFzLTE3MDFzdC1kYSksIERBUy0xNzAxL0FPIChkYXMtMTcwMWFvKSwKKyAgREFTLTE3MDJTVCAoZGFzLTE3MDJzdCksIERBUy0xNzAyU1QtREEgKGRhcy0xNzAyc3QtZGEpLAorICBEQVMtMTcwMkhSIChkYXMtMTcwMmhyKSwgREFTLTE3MDJIUi1EQSAoZGFzLTE3MDJoci1kYSksCisgIERBUy0xNzAyL0FPIChkYXMtMTcwMmFvKSwgREFTLTE4MDFTVCAoZGFzLTE4MDFzdCksCisgIERBUy0xODAxU1QtREEgKGRhcy0xODAxc3QtZGEpLCBEQVMtMTgwMUhDIChkYXMtMTgwMWhjKSwKKyAgREFTLTE4MDFBTyAoZGFzLTE4MDFhbyksIERBUy0xODAyU1QgKGRhcy0xODAyc3QpLAorICBEQVMtMTgwMlNULURBIChkYXMtMTgwMnN0LWRhKSwgREFTLTE4MDJIUiAoZGFzLTE4MDJociksCisgIERBUy0xODAySFItREEgKGRhcy0xODAyaHItZGEpLCBEQVMtMTgwMkhDIChkYXMtMTgwMmhjKSwKKyAgREFTLTE4MDJBTyAoZGFzLTE4MDJhbykKK1N0YXR1czogd29ya3MKKworVGhlIHdhdmVmb3JtIGFuYWxvZyBvdXRwdXQgb24gdGhlICdhbycgY2FyZHMgaXMgbm90IHN1cHBvcnRlZC4KK0lmIHlvdSBuZWVkIGl0LCBzZW5kIG1lIChGcmFuayBIZXNzKSBhbiBlbWFpbC4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRIChvcHRpb25hbCwgcmVxdWlyZWQgZm9yIHRpbWVkIG9yIGV4dGVybmFsbHkgdHJpZ2dlcmVkIGNvbnZlcnNpb25zKQorICBbMl0gLSBETUEwIChvcHRpb25hbCwgcmVxdWlyZXMgaXJxKQorICBbM10gLSBETUExIChvcHRpb25hbCwgcmVxdWlyZXMgaXJxIGFuZCBkbWEwKQorKi8KKy8qCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgS2VpdGhsZXkgYm9hcmRzOgorCitkYXMtMTcwMXN0CitkYXMtMTcwMXN0LWRhCitkYXMtMTcwMWFvCitkYXMtMTcwMnN0CitkYXMtMTcwMnN0LWRhCitkYXMtMTcwMmhyCitkYXMtMTcwMmhyLWRhCitkYXMtMTcwMmFvCitkYXMtMTgwMXN0CitkYXMtMTgwMXN0LWRhCitkYXMtMTgwMWhjCitkYXMtMTgwMWFvCitkYXMtMTgwMnN0CitkYXMtMTgwMnN0LWRhCitkYXMtMTgwMmhyCitkYXMtMTgwMmhyLWRhCitkYXMtMTgwMmhjCitkYXMtMTgwMmFvCisKK09wdGlvbnM6CisJWzBdIC0gYmFzZSBpbyBhZGRyZXNzCisJWzFdIC0gaXJxIChvcHRpb25hbCwgcmVxdWlyZWQgZm9yIHRpbWVkIG9yIGV4dGVybmFsbHkgdHJpZ2dlcmVkIGNvbnZlcnNpb25zKQorCVsyXSAtIGRtYTAgKG9wdGlvbmFsLCByZXF1aXJlcyBpcnEpCisJWzNdIC0gZG1hMSAob3B0aW9uYWwsIHJlcXVpcmVzIGlycSBhbmQgZG1hMCkKKworaXJxIGNhbiBiZSBvbWl0dGVkLCBhbHRob3VnaCB0aGUgY21kIGludGVyZmFjZSB3aWxsIG5vdCB3b3JrIHdpdGhvdXQgaXQuCisKK2FuYWxvZyBpbnB1dCBjbWQgdHJpZ2dlcnMgc3VwcG9ydGVkOgorCXN0YXJ0X3NyYzogICAgICBUUklHX05PVyB8IFRSSUdfRVhUCisJc2Nhbl9iZWdpbl9zcmM6IFRSSUdfRk9MTE9XIHwgVFJJR19USU1FUiB8IFRSSUdfRVhUCisJc2Nhbl9lbmRfc3JjOiAgIFRSSUdfQ09VTlQKKwljb252ZXJ0X3NyYzogICAgVFJJR19USU1FUiB8IFRSSUdfRVhUIChUUklHX0VYVCByZXF1aXJlcyBzY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykKKwlzdG9wX3NyYzogICAgICAgVFJJR19DT1VOVCB8IFRSSUdfRVhUIHwgVFJJR19OT05FCisKK3NjYW5fYmVnaW5fc3JjIHRyaWdnZXJzIFRSSUdfVElNRVIgYW5kIFRSSUdfRVhUIHVzZSB0aGUgY2FyZCdzCisnYnVyc3QgbW9kZScgd2hpY2ggbGltaXRzIHRoZSB2YWxpZCBjb252ZXJzaW9uIHRpbWUgdG8gNjQgbWljcm9zZWNvbmRzCisoY29udmVydF9hcmcgPD0gNjQwMDApLiAgVGhpcyBsaW1pdGF0aW9uIGRvZXMgbm90IGFwcGx5IGlmIHNjYW5fYmVnaW5fc3JjCitpcyBUUklHX0ZPTExPVy4KKworTk9URVM6CitPbmx5IHRoZSBEQVMtMTgwMVNUIGhhcyBiZWVuIHRlc3RlZCBieSBtZS4KK1VuaXBvbGFyIGFuZCBiaXBvbGFyIHJhbmdlcyBjYW5ub3QgYmUgbWl4ZWQgaW4gdGhlIGNoYW5uZWwvZ2FpbiBsaXN0LgorCitUT0RPOgorCU1ha2UgaXQgYXV0b21hdGljYWxseSBhbGxvY2F0ZSBpcnEgYW5kIGRtYSBjaGFubmVscyBpZiB0aGV5IGFyZSBub3Qgc3BlY2lmaWVkCisJQWRkIHN1cHBvcnQgZm9yIGFuYWxvZyBvdXQgb24gJ2FvJyBjYXJkcworCXJlYWQgaW5zbiBmb3IgYW5hbG9nIG91dAorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorI2luY2x1ZGUgImNvbWVkaV9mYy5oIgorCisvLyBtaXNjLiBkZWZpbmVzCisjZGVmaW5lIERBUzE4MDBfU0laRSAgICAgICAgICAgMTYJLy91c2VzIDE2IGlvIGFkZHJlc3NlcworI2RlZmluZSBGSUZPX1NJWkUgICAgICAgICAgICAgIDEwMjQJLy8gMTAyNCBzYW1wbGUgZmlmbworI2RlZmluZSBUSU1FUl9CQVNFICAgICAgICAgICAgIDIwMAkvLyA1IE1oeiBtYXN0ZXIgY2xvY2sKKyNkZWZpbmUgVU5JUE9MQVIgICAgICAgICAgICAgICAweDQJLy8gYml0IHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGlucHV0IHJhbmdlIGlzIHVuaS9iaXBvbGFyCisjZGVmaW5lIERNQV9CVUZfU0laRSAgICAgICAgICAgMHgxZmYwMAkvLyBzaXplIGluIGJ5dGVzIG9mIGRtYSBidWZmZXJzCisKKy8qIFJlZ2lzdGVycyBmb3IgdGhlIGRhczE4MDAgKi8KKyNkZWZpbmUgREFTMTgwMF9GSUZPICAgICAgICAgICAgMHgwCisjZGVmaW5lIERBUzE4MDBfUVJBTSAgICAgICAgICAgIDB4MAorI2RlZmluZSBEQVMxODAwX0RBQyAgICAgICAgICAgICAweDAKKyNkZWZpbmUgREFTMTgwMF9TRUxFQ1QgICAgICAgICAgMHgyCisjZGVmaW5lICAgQURDICAgICAgICAgICAgICAgICAgICAgMHgwCisjZGVmaW5lICAgUVJBTSAgICAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICAgREFDKGEpICAgICAgICAgICAgICAgICAgKDB4MiArIGEpCisjZGVmaW5lIERBUzE4MDBfRElHSVRBTCAgICAgICAgIDB4MworI2RlZmluZSBEQVMxODAwX0NPTlRST0xfQSAgICAgICAweDQKKyNkZWZpbmUgICBGRkVOICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICBDR0VOICAgICAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgICBDR1NMICAgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgICBUR0VOICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lICAgVEdTTCAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSAgIEFURU4gICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgREFTMTgwMF9DT05UUk9MX0IgICAgICAgMHg1CisjZGVmaW5lICAgRE1BX0NINSAgICAgICAgICAgICAgICAgMHgxCisjZGVmaW5lICAgRE1BX0NINiAgICAgICAgICAgICAgICAgMHgyCisjZGVmaW5lICAgRE1BX0NINyAgICAgICAgICAgICAgICAgMHgzCisjZGVmaW5lICAgRE1BX0NINV9DSDYgICAgICAgICAgICAgMHg1CisjZGVmaW5lICAgRE1BX0NINl9DSDcgICAgICAgICAgICAgMHg2CisjZGVmaW5lICAgRE1BX0NIN19DSDUgICAgICAgICAgICAgMHg3CisjZGVmaW5lICAgRE1BX0VOQUJMRUQgICAgICAgICAgICAgMHgzCS8vbWFzayB1c2VkIHRvIGRldGVybWluZSBpZiBkbWEgaXMgZW5hYmxlZAorI2RlZmluZSAgIERNQV9EVUFMICAgICAgICAgICAgICAgIDB4NAorI2RlZmluZSAgIElSUTMgICAgICAgICAgICAgICAgICAgIDB4OAorI2RlZmluZSAgIElSUTUgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgICBJUlE3ICAgICAgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lICAgSVJRMTAgICAgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSAgIElSUTExICAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUgICBJUlExNSAgICAgICAgICAgICAgICAgICAweDM4CisjZGVmaW5lICAgRklNRCAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBEQVMxODAwX0NPTlRST0xfQyAgICAgICAwWDYKKyNkZWZpbmUgICBJUENMSyAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICBYUENMSyAgICAgICAgICAgICAgICAgICAweDMKKyNkZWZpbmUgICBCTURFICAgICAgICAgICAgICAgICAgICAweDQKKyNkZWZpbmUgICBDTUVOICAgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgICBVUUVOICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lICAgU0QgICAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSAgIFVCICAgICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgREFTMTgwMF9TVEFUVVMgICAgICAgICAgMHg3CisvLyBiaXRzIHRoYXQgcHJldmVudCBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMgKGFuZCBDVkVOKSBmcm9tIGJlaW5nIGNsZWFyZWQgb24gd3JpdGUKKyNkZWZpbmUgICBDTEVBUl9JTlRSX01BU0sgICAgICAgICAoQ1ZFTl9NQVNLIHwgMHgxZikKKyNkZWZpbmUgICBJTlQgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgICBETUFUQyAgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgICBDVDBUQyAgICAgICAgICAgICAgICAgICAweDgKKyNkZWZpbmUgICBPVkYgICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lICAgRkhGICAgICAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSAgIEZORSAgICAgICAgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgICBDVkVOX01BU0sgICAgICAgICAgICAgICAweDQwCS8vIG1hc2tzIENWRU4gb24gd3JpdGUKKyNkZWZpbmUgICBDVkVOICAgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIERBUzE4MDBfQlVSU1RfTEVOR1RIICAgIDB4OAorI2RlZmluZSBEQVMxODAwX0JVUlNUX1JBVEUgICAgICAweDkKKyNkZWZpbmUgREFTMTgwMF9RUkFNX0FERFJFU1MgICAgMHhhCisjZGVmaW5lIERBUzE4MDBfQ09VTlRFUiAgICAgICAgIDB4YworCisjZGVmaW5lIElPQkFTRTIgICAgICAgICAgICAgICAgICAgMHg0MDAJLy9vZmZzZXQgb2YgYWRkaXRpb25hbCBpb3BvcnRzIHVzZWQgb24gJ2FvJyBjYXJkcworCitlbnVtIHsKKwlkYXMxNzAxc3QsIGRhczE3MDFzdF9kYSwgZGFzMTcwMnN0LCBkYXMxNzAyc3RfZGEsIGRhczE3MDJociwKKwlkYXMxNzAyaHJfZGEsCisJZGFzMTcwMWFvLCBkYXMxNzAyYW8sIGRhczE4MDFzdCwgZGFzMTgwMXN0X2RhLCBkYXMxODAyc3QsIGRhczE4MDJzdF9kYSwKKwlkYXMxODAyaHIsIGRhczE4MDJocl9kYSwgZGFzMTgwMWhjLCBkYXMxODAyaGMsIGRhczE4MDFhbywgZGFzMTgwMmFvCit9OworCitzdGF0aWMgaW50IGRhczE4MDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBkYXMxODAwX3Byb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTgwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7CitzdGF0aWMgaW50IGRhczE4MDBfYWlfcG9sbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIGRhczE4MDBfYWlfaGFuZGxlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBkYXMxODAwX2hhbmRsZV9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgc3RhdHVzKTsKK3N0YXRpYyB2b2lkIGRhczE4MDBfZmx1c2hfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgZGFzMTgwMF9mbHVzaF9kbWFfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCBjaGFubmVsLCB1aW50MTZfdCAqIGJ1ZmZlcik7CitzdGF0aWMgdm9pZCBkYXMxODAwX2hhbmRsZV9maWZvX2hhbGZfZnVsbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgZGFzMTgwMF9oYW5kbGVfZmlmb19ub3RfZW1wdHkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9haV9kb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBkYXMxODAwX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXMxODAwX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczE4MDBfZGlfcmJpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzMTgwMF9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGRhczE4MDBfc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdW5zaWduZWQgaW50IGJ1cnN0X2NvbnZlcnRfYXJnKHVuc2lnbmVkIGludCBjb252ZXJ0X2FyZywgaW50IHJvdW5kX21vZGUpOworc3RhdGljIHVuc2lnbmVkIGludCBzdWdnZXN0X3RyYW5zZmVyX3NpemUoc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworCisvLyBhbmFsb2cgaW5wdXQgcmFuZ2VzCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWlfZGFzMTgwMSA9IHsKKwk4LAorCXsKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjEsIDAuMSksCisJCQlSQU5HRSgtMC4wMiwgMC4wMiksCisJCQlSQU5HRSgwLCA1KSwKKwkJCVJBTkdFKDAsIDEpLAorCQkJUkFOR0UoMCwgMC4xKSwKKwkJCVJBTkdFKDAsIDAuMDIpLAorCQl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWlfZGFzMTgwMiA9IHsKKwk4LAorCXsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KSwKKwkJCVJBTkdFKDAsIDEwKSwKKwkJCVJBTkdFKDAsIDUpLAorCQkJUkFOR0UoMCwgMi41KSwKKwkJCVJBTkdFKDAsIDEuMjUpLAorCQl9Cit9OworCitzdHJ1Y3QgZGFzMTgwMF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYWlfc3BlZWQ7CQkvKiBtYXggY29udmVyc2lvbiBwZXJpb2QgaW4gbmFub3NlY29uZHMgKi8KKwlpbnQgcmVzb2x1dGlvbjsJCS8qIGJpdHMgb2YgYWkgcmVzb2x1dGlvbiAqLworCWludCBxcmFtX2xlbjsJCS8qIGxlbmd0aCBvZiBjYXJkJ3MgY2hhbm5lbCAvIGdhaW4gcXVldWUgKi8KKwlpbnQgY29tbW9uOwkJLyogc3VwcG9ydHMgQVJFRl9DT01NT04gZmxhZyAqLworCWludCBkb19uX2NoYW47CQkvKiBudW1iZXIgb2YgZGlnaXRhbCBvdXRwdXQgY2hhbm5lbHMgKi8KKwlpbnQgYW9fYWJpbGl0eTsJCS8qIDAgPT0gbm8gYW5hbG9nIG91dCwgMSA9PSBiYXNpYyBhbmFsb2cgb3V0LCAyID09IHdhdmVmb3JtIGFuYWxvZyBvdXQgKi8KKwlpbnQgYW9fbl9jaGFuOwkJLyogbnVtYmVyIG9mIGFuYWxvZyBvdXQgY2hhbm5lbHMgKi8KKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VfYWk7CS8qIGF2YWlsYWJsZSBpbnB1dCByYW5nZXMgKi8KK307CisKKy8qIFdhcm5pbmc6IHRoZSBtYXhpbXVtIGNvbnZlcnNpb24gc3BlZWRzIGxpc3RlZCBiZWxvdyBhcmUKKyAqIG5vdCBhbHdheXMgYWNoaWV2YWJsZSBkZXBlbmRpbmcgb24gYm9hcmQgc2V0dXAgKHNlZQorICogdXNlciBtYW51YWwuKQorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRhczE4MDBfYm9hcmQgZGFzMTgwMF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRhcy0xNzAxc3QiLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MCwKKwkgICAgICBhb19uX2NoYW46MCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNzAxc3QtZGEiLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MSwKKwkgICAgICBhb19uX2NoYW46NCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNzAyc3QiLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MCwKKwkgICAgICBhb19uX2NoYW46MCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNzAyc3QtZGEiLAorCSAgICAgIGFpX3NwZWVkOjYyNTAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MSwKKwkgICAgICBhb19uX2NoYW46NCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xNzAyaHIiLAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIHJlc29sdXRpb246MTYsCisJICAgICAgcXJhbV9sZW46MjU2LAorCSAgICAgIGNvbW1vbjoJMSwKKwkgICAgICBkb19uX2NoYW46NCwKKwkgICAgICBhb19hYmlsaXR5OjAsCisJICAgICAgYW9fbl9jaGFuOjAsCisJICAgICAgcmFuZ2VfYWk6JnJhbmdlX2FpX2RhczE4MDIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTcwMmhyLWRhIiwKKwkgICAgICBhaV9zcGVlZDoyMDAwMCwKKwkgICAgICByZXNvbHV0aW9uOjE2LAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToxLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE3MDFhbyIsCisJICAgICAgYWlfc3BlZWQ6NjI1MCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToyLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE3MDJhbyIsCisJICAgICAgYWlfc3BlZWQ6NjI1MCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToyLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDFzdCIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eTowLAorCSAgICAgIGFvX25fY2hhbjowLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDFzdC1kYSIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eTowLAorCSAgICAgIGFvX25fY2hhbjo0LAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDJzdCIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eTowLAorCSAgICAgIGFvX25fY2hhbjowLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDJzdC1kYSIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToxLAorCSAgICAgIGFvX25fY2hhbjo0LAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDJociIsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgcmVzb2x1dGlvbjoxNiwKKwkgICAgICBxcmFtX2xlbjoyNTYsCisJICAgICAgY29tbW9uOgkxLAorCSAgICAgIGRvX25fY2hhbjo0LAorCSAgICAgIGFvX2FiaWxpdHk6MCwKKwkgICAgICBhb19uX2NoYW46MCwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xODAyaHItZGEiLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIHJlc29sdXRpb246MTYsCisJICAgICAgcXJhbV9sZW46MjU2LAorCSAgICAgIGNvbW1vbjoJMSwKKwkgICAgICBkb19uX2NoYW46NCwKKwkgICAgICBhb19hYmlsaXR5OjEsCisJICAgICAgYW9fbl9jaGFuOjIsCisJICAgICAgcmFuZ2VfYWk6JnJhbmdlX2FpX2RhczE4MDIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJkYXMtMTgwMWhjIiwKKwkgICAgICBhaV9zcGVlZDozMDAwLAorCSAgICAgIHJlc29sdXRpb246MTIsCisJICAgICAgcXJhbV9sZW46NjQsCisJICAgICAgY29tbW9uOgkwLAorCSAgICAgIGRvX25fY2hhbjo4LAorCSAgICAgIGFvX2FiaWxpdHk6MSwKKwkgICAgICBhb19uX2NoYW46MiwKKwkgICAgICByYW5nZV9haTomcmFuZ2VfYWlfZGFzMTgwMSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy0xODAyaGMiLAorCSAgICAgIGFpX3NwZWVkOjMwMDAsCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkgICAgICBxcmFtX2xlbjo2NCwKKwkgICAgICBjb21tb246CTAsCisJICAgICAgZG9fbl9jaGFuOjgsCisJICAgICAgYW9fYWJpbGl0eToxLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDFhbyIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToyLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAxLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTE4MDJhbyIsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCSAgICAgIHFyYW1fbGVuOjI1NiwKKwkgICAgICBjb21tb246CTEsCisJICAgICAgZG9fbl9jaGFuOjQsCisJICAgICAgYW9fYWJpbGl0eToyLAorCSAgICAgIGFvX25fY2hhbjoyLAorCSAgICAgIHJhbmdlX2FpOiZyYW5nZV9haV9kYXMxODAyLAorCQl9LAorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGFzMTgwMF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgZGFzMTgwMF9wcml2YXRlIHsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY291bnQ7CS8qIG51bWJlciBvZiBkYXRhIHBvaW50cyBsZWZ0IHRvIGJlIHRha2VuICovCisJdW5zaWduZWQgaW50IGRpdmlzb3IxOwkvKiB2YWx1ZSB0byBsb2FkIGludG8gYm9hcmQncyBjb3VudGVyIDEgZm9yIHRpbWVkIGNvbnZlcnNpb25zICovCisJdW5zaWduZWQgaW50IGRpdmlzb3IyOwkvKiB2YWx1ZSB0byBsb2FkIGludG8gYm9hcmQncyBjb3VudGVyIDIgZm9yIHRpbWVkIGNvbnZlcnNpb25zICovCisJaW50IGRvX2JpdHM7CQkvKiBkaWdpdGFsIG91dHB1dCBiaXRzICovCisJaW50IGlycV9kbWFfYml0czsJLyogYml0cyBmb3IgY29udHJvbCByZWdpc3RlciBiICovCisJLyogZG1hIGJpdHMgZm9yIGNvbnRyb2wgcmVnaXN0ZXIgYiwgc3RvcmVkIHNvIHRoYXQgZG1hIGNhbiBiZQorCSAqIHR1cm5lZCBvbiBhbmQgb2ZmICovCisJaW50IGRtYV9iaXRzOworCXVuc2lnbmVkIGludCBkbWEwOwkvKiBkbWEgY2hhbm5lbHMgdXNlZCAqLworCXVuc2lnbmVkIGludCBkbWExOworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBkbWFfY3VycmVudDsJLyogZG1hIGNoYW5uZWwgY3VycmVudGx5IGluIHVzZSAqLworCXVpbnQxNl90ICphaV9idWYwOwkvKiBwb2ludGVycyB0byBkbWEgYnVmZmVycyAqLworCXVpbnQxNl90ICphaV9idWYxOworCXVpbnQxNl90ICpkbWFfY3VycmVudF9idWY7CS8qIHBvaW50ZXIgdG8gZG1hIGJ1ZmZlciBjdXJyZW50bHkgYmVpbmcgdXNlZCAqLworCXVuc2lnbmVkIGludCBkbWFfdHJhbnNmZXJfc2l6ZTsJLyogc2l6ZSBvZiB0cmFuc2ZlciBjdXJyZW50bHkgdXNlZCwgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBsb25nIGlvYmFzZTI7CS8qIHNlY29uZGFyeSBpbyBhZGRyZXNzIHVzZWQgZm9yIGFuYWxvZyBvdXQgb24gJ2FvJyBib2FyZHMgKi8KKwlzaG9ydCBhb191cGRhdGVfYml0czsJLyogcmVtZW1iZXJzIHRoZSBsYXN0IHdyaXRlIHRvIHRoZSAndXBkYXRlJyBkYWMgKi8KK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkYXMxODAwX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8vIGFuYWxvZyBvdXQgcmFuZ2UgZm9yIGJvYXJkcyB3aXRoIGJhc2ljIGFuYWxvZyBvdXQKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hb18xID0geworCTEsCisJeworCQkJUkFOR0UoLTEwLCAxMCksCisJCX0KK307CisKKy8vIGFuYWxvZyBvdXQgcmFuZ2UgZm9yICdhbycgYm9hcmRzCisvKgorc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FvXzIgPSB7CisJMiwKKwl7CisJCVJBTkdFKC0xMCwgMTApLAorCQlSQU5HRSgtNSwgNSksCisJfQorfTsKKyovCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZGFzMTgwMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkYXMxODAwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkYXMxODAwX2F0dGFjaCwKKyAgICAgIGRldGFjaDpkYXMxODAwX2RldGFjaCwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoZGFzMTgwMF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBkYXMxODAwX2JvYXJkKSwKKyAgICAgIGJvYXJkX25hbWU6JmRhczE4MDBfYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBkYXMxODAwX2JvYXJkKSwKK307CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZGFzMTgwMCk7CisKK3N0YXRpYyBpbnQgZGFzMTgwMF9pbml0X2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGRtYTAsCisJdW5zaWduZWQgaW50IGRtYTEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vIG5lZWQgYW4gaXJxIHRvIGRvIGRtYQorCWlmIChkZXYtPmlycSAmJiBkbWEwKSB7CisJCS8vZW5jb2RlIGRtYTAgYW5kIGRtYTEgaW50byAyIGRpZ2l0IGhleGFkZWNpbWFsIGZvciBzd2l0Y2gKKwkJc3dpdGNoICgoZG1hMCAmIDB4NykgfCAoZG1hMSA8PCA0KSkgeworCQljYXNlIDB4NToJLy8gZG1hMCA9PSA1CisJCQlkZXZwcml2LT5kbWFfYml0cyB8PSBETUFfQ0g1OworCQkJYnJlYWs7CisJCWNhc2UgMHg2OgkvLyBkbWEwID09IDYKKwkJCWRldnByaXYtPmRtYV9iaXRzIHw9IERNQV9DSDY7CisJCQlicmVhazsKKwkJY2FzZSAweDc6CS8vIGRtYTAgPT0gNworCQkJZGV2cHJpdi0+ZG1hX2JpdHMgfD0gRE1BX0NINzsKKwkJCWJyZWFrOworCQljYXNlIDB4NjU6CS8vIGRtYTAgPT0gNSwgZG1hMSA9PSA2CisJCQlkZXZwcml2LT5kbWFfYml0cyB8PSBETUFfQ0g1X0NINjsKKwkJCWJyZWFrOworCQljYXNlIDB4NzY6CS8vIGRtYTAgPT0gNiwgZG1hMSA9PSA3CisJCQlkZXZwcml2LT5kbWFfYml0cyB8PSBETUFfQ0g2X0NINzsKKwkJCWJyZWFrOworCQljYXNlIDB4NTc6CS8vIGRtYTAgPT0gNywgZG1hMSA9PSA1CisJCQlkZXZwcml2LT5kbWFfYml0cyB8PSBETUFfQ0g3X0NINTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKCIgb25seSBzdXBwb3J0cyBkbWEgY2hhbm5lbHMgNSB0aHJvdWdoIDdcbiIKKwkJCQkiIER1YWwgZG1hIG9ubHkgYWxsb3dzIHRoZSBmb2xsb3dpbmcgY29tYmluYXRpb25zOlxuIgorCQkJCSIgZG1hIDUsNiAvIDYsNyAvIG9yIDcsNVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXF1ZXN0X2RtYShkbWEwLCBkcml2ZXJfZGFzMTgwMC5kcml2ZXJfbmFtZSkpIHsKKwkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgY2hhbm5lbCAlaVxuIiwgZG1hMCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlkZXZwcml2LT5kbWEwID0gZG1hMDsKKwkJZGV2cHJpdi0+ZG1hX2N1cnJlbnQgPSBkbWEwOworCQlpZiAoZG1hMSkgeworCQkJaWYgKHJlcXVlc3RfZG1hKGRtYTEsIGRyaXZlcl9kYXMxODAwLmRyaXZlcl9uYW1lKSkgeworCQkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgY2hhbm5lbCAlaVxuIiwKKwkJCQkJZG1hMSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlkZXZwcml2LT5kbWExID0gZG1hMTsKKwkJfQorCQlkZXZwcml2LT5haV9idWYwID0ga21hbGxvYyhETUFfQlVGX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwkJaWYgKGRldnByaXYtPmFpX2J1ZjAgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlkZXZwcml2LT5kbWFfY3VycmVudF9idWYgPSBkZXZwcml2LT5haV9idWYwOworCQlpZiAoZG1hMSkgeworCQkJZGV2cHJpdi0+YWlfYnVmMSA9CisJCQkJa21hbGxvYyhETUFfQlVGX1NJWkUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwkJCWlmIChkZXZwcml2LT5haV9idWYxID09IE5VTEwpCisJCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEwKTsKKwkJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYTAsIERNQV9NT0RFX1JFQUQpOworCQlpZiAoZG1hMSkgeworCQkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hMSk7CisJCQlzZXRfZG1hX21vZGUoZGV2cHJpdi0+ZG1hMSwgRE1BX01PREVfUkVBRCk7CisJCX0KKwkJcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczE4MDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJdW5zaWduZWQgaW50IGlycSA9IGl0LT5vcHRpb25zWzFdOworCXVuc2lnbmVkIGludCBkbWEwID0gaXQtPm9wdGlvbnNbMl07CisJdW5zaWduZWQgaW50IGRtYTEgPSBpdC0+b3B0aW9uc1szXTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTI7CisJaW50IGJvYXJkOworCWludCByZXR2YWw7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkZXYtPnByaXZhdGUgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZGFzMTgwMF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzOiBpbyAweCVseCIsIGRldi0+bWlub3IsIGRyaXZlcl9kYXMxODAwLmRyaXZlcl9uYW1lLAorCQlpb2Jhc2UpOworCWlmIChpcnEpIHsKKwkJcHJpbnRrKCIsIGlycSAldSIsIGlycSk7CisJCWlmIChkbWEwKSB7CisJCQlwcmludGsoIiwgZG1hICV1IiwgZG1hMCk7CisJCQlpZiAoZG1hMSkKKwkJCQlwcmludGsoIiBhbmQgJXUiLCBkbWExKTsKKwkJfQorCX0KKwlwcmludGsoIlxuIik7CisKKwlpZiAoaW9iYXNlID09IDApIHsKKwkJcHJpbnRrKCIgaW8gYmFzZSBhZGRyZXNzIHJlcXVpcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgaWYgaW8gYWRkcmVzc2VzIGFyZSBhdmFpbGFibGUgKi8KKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgREFTMTgwMF9TSVpFLCBkcml2ZXJfZGFzMTgwMC5kcml2ZXJfbmFtZSkpIHsKKwkJcHJpbnRrKCIgSS9PIHBvcnQgY29uZmxpY3Q6IGZhaWxlZCB0byBhbGxvY2F0ZSBwb3J0cyAweCVseCB0byAweCVseFxuIiwgaW9iYXNlLCBpb2Jhc2UgKyBEQVMxODAwX1NJWkUgLSAxKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJYm9hcmQgPSBkYXMxODAwX3Byb2JlKGRldik7CisJaWYgKGJvYXJkIDwgMCkgeworCQlwcmludGsoIiB1bmFibGUgdG8gZGV0ZXJtaW5lIGJvYXJkIHR5cGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlkZXYtPmJvYXJkX3B0ciA9IGRhczE4MDBfYm9hcmRzICsgYm9hcmQ7CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJLy8gaWYgaXQgaXMgYW4gJ2FvJyBib2FyZCB3aXRoIGZhbmN5IGFuYWxvZyBvdXQgdGhlbiB3ZSBuZWVkIGV4dHJhIGlvIHBvcnRzCisJaWYgKHRoaXNib2FyZC0+YW9fYWJpbGl0eSA9PSAyKSB7CisJCWlvYmFzZTIgPSBpb2Jhc2UgKyBJT0JBU0UyOworCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZTIsIERBUzE4MDBfU0laRSwKKwkJCQlkcml2ZXJfZGFzMTgwMC5kcml2ZXJfbmFtZSkpIHsKKwkJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0OiBmYWlsZWQgdG8gYWxsb2NhdGUgcG9ydHMgMHglbHggdG8gMHglbHhcbiIsIGlvYmFzZTIsIGlvYmFzZTIgKyBEQVMxODAwX1NJWkUgLSAxKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJCWRldnByaXYtPmlvYmFzZTIgPSBpb2Jhc2UyOworCX0KKworCS8qIGdyYWIgb3VyIElSUSAqLworCWlmIChpcnEpIHsKKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGRhczE4MDBfaW50ZXJydXB0LCAwLAorCQkJCWRyaXZlcl9kYXMxODAwLmRyaXZlcl9uYW1lLCBkZXYpKSB7CisJCQlwcmludGsoIiB1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBpcnEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJZGV2LT5pcnEgPSBpcnE7CisKKwkvLyBzZXQgYml0cyB0aGF0IHRlbGwgY2FyZCB3aGljaCBpcnEgdG8gdXNlCisJc3dpdGNoIChpcnEpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzIHw9IDB4ODsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgfD0gMHgxMDsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgfD0gMHgxODsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzIHw9IDB4Mjg7CisJCWJyZWFrOworCWNhc2UgMTE6CisJCWRldnByaXYtPmlycV9kbWFfYml0cyB8PSAweDMwOworCQlicmVhazsKKwljYXNlIDE1OgorCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgfD0gMHgzODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCIgaXJxIG91dCBvZiByYW5nZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR2YWwgPSBkYXMxODAwX2luaXRfZG1hKGRldiwgZG1hMCwgZG1hMSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoZGV2cHJpdi0+YWlfYnVmMCA9PSBOVUxMKSB7CisJCWRldnByaXYtPmFpX2J1ZjAgPQorCQkJa21hbGxvYyhGSUZPX1NJWkUgKiBzaXplb2YodWludDE2X3QpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGRldnByaXYtPmFpX2J1ZjAgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0RJRkYgfCBTREZfR1JPVU5EIHwgU0RGX0NNRF9SRUFEOworCWlmICh0aGlzYm9hcmQtPmNvbW1vbikKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DT01NT047CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5xcmFtX2xlbjsKKwlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzYm9hcmQtPnFyYW1fbGVuOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPnJlc29sdXRpb24pIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNib2FyZC0+cmFuZ2VfYWk7CisJcy0+ZG9fY21kID0gZGFzMTgwMF9haV9kb19jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IGRhczE4MDBfYWlfZG9fY21kdGVzdDsKKwlzLT5pbnNuX3JlYWQgPSBkYXMxODAwX2FpX3JpbnNuOworCXMtPnBvbGwgPSBkYXMxODAwX2FpX3BvbGw7CisJcy0+Y2FuY2VsID0gZGFzMTgwMF9jYW5jZWw7CisKKwkvKiBhbmFsb2cgb3V0ICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJaWYgKHRoaXNib2FyZC0+YW9fYWJpbGl0eSA9PSAxKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX25fY2hhbjsKKwkJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNib2FyZC0+cmVzb2x1dGlvbikgLSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hb18xOworCQlzLT5pbnNuX3dyaXRlID0gZGFzMTgwMF9hb193aW5zbjsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCS8qIGRpICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSA0OworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gZGFzMTgwMF9kaV9yYml0czsKKworCS8qIGRvICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmRvX25fY2hhbjsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGRhczE4MDBfZG9fd2JpdHM7CisKKwlkYXMxODAwX2NhbmNlbChkZXYsIGRldi0+cmVhZF9zdWJkZXYpOworCisJLy8gaW5pdGlhbGl6ZSBkaWdpdGFsIG91dCBjaGFubmVscworCW91dGIoZGV2cHJpdi0+ZG9fYml0cywgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0RJR0lUQUwpOworCisJLy8gaW5pdGlhbGl6ZSBhbmFsb2cgb3V0IGNoYW5uZWxzCisJaWYgKHRoaXNib2FyZC0+YW9fYWJpbGl0eSA9PSAxKSB7CisJCS8vIHNlbGVjdCAndXBkYXRlJyBkYWMgY2hhbm5lbCBmb3IgYmFzZUFkZHJlc3MgKyAweDAKKwkJb3V0YihEQUModGhpc2JvYXJkLT5hb19uX2NoYW4gLSAxKSwKKwkJCWRldi0+aW9iYXNlICsgREFTMTgwMF9TRUxFQ1QpOworCQlvdXR3KGRldnByaXYtPmFvX3VwZGF0ZV9iaXRzLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfREFDKTsKKwl9CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgZGFzMTgwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJLyogb25seSBmcmVlIHN0dWZmIGlmIGl0IGhhcyBiZWVuIGFsbG9jYXRlZCBieSBfYXR0YWNoICovCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgREFTMTgwMF9TSVpFKTsKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5wcml2YXRlKSB7CisJCWlmIChkZXZwcml2LT5pb2Jhc2UyKQorCQkJcmVsZWFzZV9yZWdpb24oZGV2cHJpdi0+aW9iYXNlMiwgREFTMTgwMF9TSVpFKTsKKwkJaWYgKGRldnByaXYtPmRtYTApCisJCQlmcmVlX2RtYShkZXZwcml2LT5kbWEwKTsKKwkJaWYgKGRldnByaXYtPmRtYTEpCisJCQlmcmVlX2RtYShkZXZwcml2LT5kbWExKTsKKwkJaWYgKGRldnByaXYtPmFpX2J1ZjApCisJCQlrZnJlZShkZXZwcml2LT5haV9idWYwKTsKKwkJaWYgKGRldnByaXYtPmFpX2J1ZjEpCisJCQlrZnJlZShkZXZwcml2LT5haV9idWYxKTsKKwl9CisKKwlwcmludGsoImNvbWVkaSVkOiAlczogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yLAorCQlkcml2ZXJfZGFzMTgwMC5kcml2ZXJfbmFtZSk7CisKKwlyZXR1cm4gMDsKK307CisKKy8qIHByb2JlcyBhbmQgY2hlY2tzIGRhcy0xODAwIHNlcmllcyBib2FyZCB0eXBlCisgKi8KK3N0YXRpYyBpbnQgZGFzMTgwMF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaWQ7CisJaW50IGJvYXJkOworCisJaWQgPSAoaW5iKGRldi0+aW9iYXNlICsgREFTMTgwMF9ESUdJVEFMKSA+PiA0KSAmIDB4ZjsJLyogZ2V0IGlkIGJpdHMgKi8KKwlib2FyZCA9ICgoc3RydWN0IGRhczE4MDBfYm9hcmQgKikgZGV2LT5ib2FyZF9wdHIpIC0gZGFzMTgwMF9ib2FyZHM7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSAweDM6CisJCWlmIChib2FyZCA9PSBkYXMxODAxc3RfZGEgfHwgYm9hcmQgPT0gZGFzMTgwMnN0X2RhIHx8CisJCQlib2FyZCA9PSBkYXMxNzAxc3RfZGEgfHwgYm9hcmQgPT0gZGFzMTcwMnN0X2RhKSB7CisJCQlwcmludGsoIiBCb2FyZCBtb2RlbDogJXNcbiIsCisJCQkJZGFzMTgwMF9ib2FyZHNbYm9hcmRdLm5hbWUpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCXByaW50aygiIEJvYXJkIG1vZGVsIChwcm9iZWQsIG5vdCByZWNvbW1lbmRlZCk6IGRhcy0xODAwc3QtZGEgc2VyaWVzXG4iKTsKKwkJcmV0dXJuIGRhczE4MDFzdDsKKwkJYnJlYWs7CisJY2FzZSAweDQ6CisJCWlmIChib2FyZCA9PSBkYXMxODAyaHJfZGEgfHwgYm9hcmQgPT0gZGFzMTcwMmhyX2RhKSB7CisJCQlwcmludGsoIiBCb2FyZCBtb2RlbDogJXNcbiIsCisJCQkJZGFzMTgwMF9ib2FyZHNbYm9hcmRdLm5hbWUpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCXByaW50aygiIEJvYXJkIG1vZGVsIChwcm9iZWQsIG5vdCByZWNvbW1lbmRlZCk6IGRhcy0xODAyaHItZGFcbiIpOworCQlyZXR1cm4gZGFzMTgwMmhyOworCQlicmVhazsKKwljYXNlIDB4NToKKwkJaWYgKGJvYXJkID09IGRhczE4MDFhbyB8fCBib2FyZCA9PSBkYXMxODAyYW8gfHwKKwkJCWJvYXJkID09IGRhczE3MDFhbyB8fCBib2FyZCA9PSBkYXMxNzAyYW8pIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiAlc1xuIiwKKwkJCQlkYXMxODAwX2JvYXJkc1tib2FyZF0ubmFtZSk7CisJCQlyZXR1cm4gYm9hcmQ7CisJCX0KKwkJcHJpbnRrKCIgQm9hcmQgbW9kZWwgKHByb2JlZCwgbm90IHJlY29tbWVuZGVkKTogZGFzLTE4MDBhbyBzZXJpZXNcbiIpOworCQlyZXR1cm4gZGFzMTgwMWFvOworCQlicmVhazsKKwljYXNlIDB4NjoKKwkJaWYgKGJvYXJkID09IGRhczE4MDJociB8fCBib2FyZCA9PSBkYXMxNzAyaHIpIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiAlc1xuIiwKKwkJCQlkYXMxODAwX2JvYXJkc1tib2FyZF0ubmFtZSk7CisJCQlyZXR1cm4gYm9hcmQ7CisJCX0KKwkJcHJpbnRrKCIgQm9hcmQgbW9kZWwgKHByb2JlZCwgbm90IHJlY29tbWVuZGVkKTogZGFzLTE4MDJoclxuIik7CisJCXJldHVybiBkYXMxODAyaHI7CisJCWJyZWFrOworCWNhc2UgMHg3OgorCQlpZiAoYm9hcmQgPT0gZGFzMTgwMXN0IHx8IGJvYXJkID09IGRhczE4MDJzdCB8fAorCQkJYm9hcmQgPT0gZGFzMTcwMXN0IHx8IGJvYXJkID09IGRhczE3MDJzdCkgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6ICVzXG4iLAorCQkJCWRhczE4MDBfYm9hcmRzW2JvYXJkXS5uYW1lKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlwcmludGsoIiBCb2FyZCBtb2RlbCAocHJvYmVkLCBub3QgcmVjb21tZW5kZWQpOiBkYXMtMTgwMHN0IHNlcmllc1xuIik7CisJCXJldHVybiBkYXMxODAxc3Q7CisJCWJyZWFrOworCWNhc2UgMHg4OgorCQlpZiAoYm9hcmQgPT0gZGFzMTgwMWhjIHx8IGJvYXJkID09IGRhczE4MDJoYykgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6ICVzXG4iLAorCQkJCWRhczE4MDBfYm9hcmRzW2JvYXJkXS5uYW1lKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlwcmludGsoIiBCb2FyZCBtb2RlbCAocHJvYmVkLCBub3QgcmVjb21tZW5kZWQpOiBkYXMtMTgwMGhjIHNlcmllc1xuIik7CisJCXJldHVybiBkYXMxODAxaGM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiIEJvYXJkIG1vZGVsOiBwcm9iZSByZXR1cm5lZCAweCV4ICh1bmtub3duLCBwbGVhc2UgcmVwb3J0KVxuIiwgaWQpOworCQlyZXR1cm4gYm9hcmQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZGFzMTgwMF9haV9wb2xsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vIHByZXZlbnQgcmFjZSB3aXRoIGludGVycnVwdCBoYW5kbGVyCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGFzMTgwMF9haV9oYW5kbGVyKGRldik7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBzLT5hc3luYy0+YnVmX3dyaXRlX2NvdW50IC0gcy0+YXN5bmMtPmJ1Zl9yZWFkX2NvdW50OworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzMTgwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicHJlbWF0dXJlIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJLyogUHJldmVudCByYWNlIHdpdGggZGFzMTgwMF9haV9wb2xsKCkgb24gbXVsdGkgcHJvY2Vzc29yIHN5c3RlbXMuCisJICogQWxzbyBwcm90ZWN0cyBpbmRpcmVjdCBhZGRyZXNzaW5nIGluIGRhczE4MDBfYWlfaGFuZGxlciAqLworCXNwaW5fbG9jaygmZGV2LT5zcGlubG9jayk7CisJc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpOworCisJLyogaWYgaW50ZXJydXB0IHdhcyBub3QgY2F1c2VkIGJ5IGRhcy0xODAwICovCisJaWYgKCEoc3RhdHVzICYgSU5UKSkgeworCQlzcGluX3VubG9jaygmZGV2LT5zcGlubG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisJLyogY2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgYml0IElOVCAqLworCW91dGIoQ0xFQVJfSU5UUl9NQVNLICYgfklOVCwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NUQVRVUyk7CisJLy8gaGFuZGxlIGludGVycnVwdAorCWRhczE4MDBfYWlfaGFuZGxlcihkZXYpOworCisJc3Bpbl91bmxvY2soJmRldi0+c3BpbmxvY2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLy8gdGhlIGd1dHMgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLCB0aGF0IGlzIHNoYXJlZCB3aXRoIGRhczE4MDBfYWlfcG9sbAorc3RhdGljIHZvaWQgZGFzMTgwMF9haV9oYW5kbGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NUQVRVUyk7CisKKwlhc3luYy0+ZXZlbnRzID0gMDsKKwkvLyBzZWxlY3QgYWRjIGZvciBiYXNlIGFkZHJlc3MgKyAwCisJb3V0YihBREMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9TRUxFQ1QpOworCS8vIGRtYSBidWZmZXIgZnVsbAorCWlmIChkZXZwcml2LT5pcnFfZG1hX2JpdHMgJiBETUFfRU5BQkxFRCkgeworCQkvLyBsb29rIGZvciBkYXRhIGZyb20gZG1hIHRyYW5zZmVyIGV2ZW4gaWYgZG1hIHRlcm1pbmFsIGNvdW50IGhhc24ndCBoYXBwZW5lZCB5ZXQKKwkJZGFzMTgwMF9oYW5kbGVfZG1hKGRldiwgcywgc3RhdHVzKTsKKwl9IGVsc2UgaWYgKHN0YXR1cyAmIEZIRikgewkvLyBpZiBmaWZvIGhhbGYgZnVsbAorCQlkYXMxODAwX2hhbmRsZV9maWZvX2hhbGZfZnVsbChkZXYsIHMpOworCX0gZWxzZSBpZiAoc3RhdHVzICYgRk5FKSB7CS8vIGlmIGZpZm8gbm90IGVtcHR5CisJCWRhczE4MDBfaGFuZGxlX2ZpZm9fbm90X2VtcHR5KGRldiwgcyk7CisJfQorCisJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CisJLyogaWYgdGhlIGNhcmQncyBmaWZvIGhhcyBvdmVyZmxvd2VkICovCisJaWYgKHN0YXR1cyAmIE9WRikgeworCQkvLyBjbGVhciBPVkYgaW50ZXJydXB0IGJpdAorCQlvdXRiKENMRUFSX0lOVFJfTUFTSyAmIH5PVkYsIGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpOworCQljb21lZGlfZXJyb3IoZGV2LCAiREFTMTgwMCBGSUZPIG92ZXJmbG93Iik7CisJCWRhczE4MDBfY2FuY2VsKGRldiwgcyk7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybjsKKwl9CisJLy8gc3RvcCB0YWtpbmcgZGF0YSBpZiBhcHByb3ByaWF0ZQorCS8qIHN0b3Bfc3JjIFRSSUdfRVhUICovCisJaWYgKHN0YXR1cyAmIENUMFRDKSB7CisJCS8vIGNsZWFyIENUMFRDIGludGVycnVwdCBiaXQKKwkJb3V0YihDTEVBUl9JTlRSX01BU0sgJiB+Q1QwVEMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpOworCQkvLyBtYWtlIHN1cmUgd2UgZ2V0IGFsbCByZW1haW5pbmcgZGF0YSBmcm9tIGJvYXJkIGJlZm9yZSBxdWl0dGluZworCQlpZiAoZGV2cHJpdi0+aXJxX2RtYV9iaXRzICYgRE1BX0VOQUJMRUQpCisJCQlkYXMxODAwX2ZsdXNoX2RtYShkZXYsIHMpOworCQllbHNlCisJCQlkYXMxODAwX2hhbmRsZV9maWZvX25vdF9lbXB0eShkZXYsIHMpOworCQlkYXMxODAwX2NhbmNlbChkZXYsIHMpOwkvKiBkaXNhYmxlIGhhcmR3YXJlIGNvbnZlcnNpb25zICovCisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwl9IGVsc2UgaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBkZXZwcml2LT5jb3VudCA9PSAwKSB7CS8vIHN0b3Bfc3JjIFRSSUdfQ09VTlQKKwkJZGFzMTgwMF9jYW5jZWwoZGV2LCBzKTsJLyogZGlzYWJsZSBoYXJkd2FyZSBjb252ZXJzaW9ucyAqLworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfQorCisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGRhczE4MDBfaGFuZGxlX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljb25zdCBpbnQgZHVhbF9kbWEgPSBkZXZwcml2LT5pcnFfZG1hX2JpdHMgJiBETUFfRFVBTDsKKworCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwlkYXMxODAwX2ZsdXNoX2RtYV9jaGFubmVsKGRldiwgcywgZGV2cHJpdi0+ZG1hX2N1cnJlbnQsCisJCWRldnByaXYtPmRtYV9jdXJyZW50X2J1Zik7CisJLy8gcmUtZW5hYmxlICBkbWEgY2hhbm5lbAorCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWFfY3VycmVudCwKKwkJdmlydF90b19idXMoZGV2cHJpdi0+ZG1hX2N1cnJlbnRfYnVmKSk7CisJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWFfY3VycmVudCwgZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUpOworCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2N1cnJlbnQpOworCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCisJaWYgKHN0YXR1cyAmIERNQVRDKSB7CisJCS8vIGNsZWFyIERNQVRDIGludGVycnVwdCBiaXQKKwkJb3V0YihDTEVBUl9JTlRSX01BU0sgJiB+RE1BVEMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9TVEFUVVMpOworCQkvLyBzd2l0Y2ggZG1hIGNoYW5uZWxzIGZvciBuZXh0IHRpbWUsIGlmIGFwcHJvcHJpYXRlCisJCWlmIChkdWFsX2RtYSkgeworCQkJLy8gcmVhZCBkYXRhIGZyb20gdGhlIG90aGVyIGNoYW5uZWwgbmV4dCB0aW1lCisJCQlpZiAoZGV2cHJpdi0+ZG1hX2N1cnJlbnQgPT0gZGV2cHJpdi0+ZG1hMCkgeworCQkJCWRldnByaXYtPmRtYV9jdXJyZW50ID0gZGV2cHJpdi0+ZG1hMTsKKwkJCQlkZXZwcml2LT5kbWFfY3VycmVudF9idWYgPSBkZXZwcml2LT5haV9idWYxOworCQkJfSBlbHNlIHsKKwkJCQlkZXZwcml2LT5kbWFfY3VycmVudCA9IGRldnByaXYtPmRtYTA7CisJCQkJZGV2cHJpdi0+ZG1hX2N1cnJlbnRfYnVmID0gZGV2cHJpdi0+YWlfYnVmMDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB1aW50MTZfdCBtdW5nZV9iaXBvbGFyX3NhbXBsZShjb25zdCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1aW50MTZfdCBzYW1wbGUpCit7CisJc2FtcGxlICs9IDEgPDwgKHRoaXNib2FyZC0+cmVzb2x1dGlvbiAtIDEpOworCXJldHVybiBzYW1wbGU7Cit9CisKK3N0YXRpYyB2b2lkIG11bmdlX2RhdGEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90ICogYXJyYXksCisJdW5zaWduZWQgaW50IG51bV9lbGVtZW50cykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgdW5pcG9sYXI7CisKKwkvKiBzZWUgaWYgY2FyZCBpcyB1c2luZyBhIHVuaXBvbGFyIG9yIGJpcG9sYXIgcmFuZ2Ugc28gd2UgY2FuIG11bmdlIGRhdGEgY29ycmVjdGx5ICovCisJdW5pcG9sYXIgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPTlRST0xfQykgJiBVQjsKKworCS8qIGNvbnZlcnQgdG8gdW5zaWduZWQgdHlwZSBpZiB3ZSBhcmUgaW4gYSBiaXBvbGFyIG1vZGUgKi8KKwlpZiAoIXVuaXBvbGFyKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fZWxlbWVudHM7IGkrKykgeworCQkJYXJyYXlbaV0gPSBtdW5nZV9iaXBvbGFyX3NhbXBsZShkZXYsIGFycmF5W2ldKTsKKwkJfQorCX0KK30KKworLyogVXRpbGl0eSBmdW5jdGlvbiB1c2VkIGJ5IGRhczE4MDBfZmx1c2hfZG1hKCkgYW5kIGRhczE4MDBfaGFuZGxlX2RtYSgpLgorICogQXNzdW1lcyBkbWEgbG9jayBpcyBoZWxkICovCitzdGF0aWMgdm9pZCBkYXMxODAwX2ZsdXNoX2RtYV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IGNoYW5uZWwsIHVpbnQxNl90ICogYnVmZmVyKQoreworCXVuc2lnbmVkIGludCBudW1fYnl0ZXMsIG51bV9zYW1wbGVzOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCWRpc2FibGVfZG1hKGNoYW5uZWwpOworCisJLyogY2xlYXIgZmxpcC1mbG9wIHRvIG1ha2Ugc3VyZSAyLWJ5dGUgcmVnaXN0ZXJzCisJICogZ2V0IHNldCBjb3JyZWN0bHkgKi8KKwljbGVhcl9kbWFfZmYoY2hhbm5lbCk7CisKKwkvLyBmaWd1cmUgb3V0IGhvdyBtYW55IHBvaW50cyB0byByZWFkCisJbnVtX2J5dGVzID0gZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgLSBnZXRfZG1hX3Jlc2lkdWUoY2hhbm5lbCk7CisJbnVtX3NhbXBsZXMgPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOworCisJLyogaWYgd2Ugb25seSBuZWVkIHNvbWUgb2YgdGhlIHBvaW50cyAqLworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYgZGV2cHJpdi0+Y291bnQgPCBudW1fc2FtcGxlcykKKwkJbnVtX3NhbXBsZXMgPSBkZXZwcml2LT5jb3VudDsKKworCW11bmdlX2RhdGEoZGV2LCBidWZmZXIsIG51bV9zYW1wbGVzKTsKKwljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGJ1ZmZlciwgbnVtX2J5dGVzKTsKKwlpZiAocy0+YXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQorCQlkZXZwcml2LT5jb3VudCAtPSBudW1fc2FtcGxlczsKKworCXJldHVybjsKK30KKworLyogZmx1c2hlcyByZW1haW5pbmcgZGF0YSBmcm9tIGJvYXJkIHdoZW4gZXh0ZXJuYWwgdHJpZ2dlciBoYXMgc3RvcHBlZCBhcXVpc2l0aW9uCisgKiBhbmQgd2UgYXJlIHVzaW5nIGRtYSB0cmFuc2ZlcnMgKi8KK3N0YXRpYyB2b2lkIGRhczE4MDBfZmx1c2hfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljb25zdCBpbnQgZHVhbF9kbWEgPSBkZXZwcml2LT5pcnFfZG1hX2JpdHMgJiBETUFfRFVBTDsKKworCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwlkYXMxODAwX2ZsdXNoX2RtYV9jaGFubmVsKGRldiwgcywgZGV2cHJpdi0+ZG1hX2N1cnJlbnQsCisJCWRldnByaXYtPmRtYV9jdXJyZW50X2J1Zik7CisKKwlpZiAoZHVhbF9kbWEpIHsKKwkJLy8gc3dpdGNoIHRvIG90aGVyIGNoYW5uZWwgYW5kIGZsdXNoIGl0CisJCWlmIChkZXZwcml2LT5kbWFfY3VycmVudCA9PSBkZXZwcml2LT5kbWEwKSB7CisJCQlkZXZwcml2LT5kbWFfY3VycmVudCA9IGRldnByaXYtPmRtYTE7CisJCQlkZXZwcml2LT5kbWFfY3VycmVudF9idWYgPSBkZXZwcml2LT5haV9idWYxOworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+ZG1hX2N1cnJlbnQgPSBkZXZwcml2LT5kbWEwOworCQkJZGV2cHJpdi0+ZG1hX2N1cnJlbnRfYnVmID0gZGV2cHJpdi0+YWlfYnVmMDsKKwkJfQorCQlkYXMxODAwX2ZsdXNoX2RtYV9jaGFubmVsKGRldiwgcywgZGV2cHJpdi0+ZG1hX2N1cnJlbnQsCisJCQlkZXZwcml2LT5kbWFfY3VycmVudF9idWYpOworCX0KKworCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCisJLy8gZ2V0IGFueSByZW1haW5pbmcgc2FtcGxlcyBpbiBmaWZvCisJZGFzMTgwMF9oYW5kbGVfZmlmb19ub3RfZW1wdHkoZGV2LCBzKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZGFzMTgwMF9oYW5kbGVfZmlmb19oYWxmX2Z1bGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBudW1Qb2ludHMgPSAwOwkvKiBudW1iZXIgb2YgcG9pbnRzIHRvIHJlYWQgKi8KKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwludW1Qb2ludHMgPSBGSUZPX1NJWkUgLyAyOworCS8qIGlmIHdlIG9ubHkgbmVlZCBzb21lIG9mIHRoZSBwb2ludHMgKi8KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UICYmIGRldnByaXYtPmNvdW50IDwgbnVtUG9pbnRzKQorCQludW1Qb2ludHMgPSBkZXZwcml2LT5jb3VudDsKKwlpbnN3KGRldi0+aW9iYXNlICsgREFTMTgwMF9GSUZPLCBkZXZwcml2LT5haV9idWYwLCBudW1Qb2ludHMpOworCW11bmdlX2RhdGEoZGV2LCBkZXZwcml2LT5haV9idWYwLCBudW1Qb2ludHMpOworCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGV2cHJpdi0+YWlfYnVmMCwKKwkJbnVtUG9pbnRzICogc2l6ZW9mKGRldnByaXYtPmFpX2J1ZjBbMF0pKTsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQorCQlkZXZwcml2LT5jb3VudCAtPSBudW1Qb2ludHM7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkYXMxODAwX2hhbmRsZV9maWZvX25vdF9lbXB0eShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc2hvcnQgZHBudDsKKwlpbnQgdW5pcG9sYXI7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJdW5pcG9sYXIgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPTlRST0xfQykgJiBVQjsKKworCXdoaWxlIChpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NUQVRVUykgJiBGTkUpIHsKKwkJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCAmJiBkZXZwcml2LT5jb3VudCA9PSAwKQorCQkJYnJlYWs7CisJCWRwbnQgPSBpbncoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0ZJRk8pOworCQkvKiBjb252ZXJ0IHRvIHVuc2lnbmVkIHR5cGUgaWYgd2UgYXJlIGluIGEgYmlwb2xhciBtb2RlICovCisJCWlmICghdW5pcG9sYXIpIDsKKwkJZHBudCA9IG11bmdlX2JpcG9sYXJfc2FtcGxlKGRldiwgZHBudCk7CisJCWNmY193cml0ZV90b19idWZmZXIocywgZHBudCk7CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCisJCQlkZXZwcml2LT5jb3VudC0tOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIGludCBkYXMxODAwX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCW91dGIoMHgwLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU1RBVFVTKTsJLyogZGlzYWJsZSBjb252ZXJzaW9ucyAqLworCW91dGIoMHgwLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09OVFJPTF9CKTsJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBkbWEgKi8KKwlvdXRiKDB4MCwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPTlRST0xfQSk7CS8qIGRpc2FibGUgYW5kIGNsZWFyIGZpZm8gYW5kIHN0b3AgdHJpZ2dlcmluZyAqLworCWlmIChkZXZwcml2LT5kbWEwKQorCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEwKTsKKwlpZiAoZGV2cHJpdi0+ZG1hMSkKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRlc3QgYW5hbG9nIGlucHV0IGNtZCAqLworc3RhdGljIGludCBkYXMxODAwX2FpX2RvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCXVuc2lnbmVkIGludCB0bXBfYXJnOworCWludCBpOworCWludCB1bmlwb2xhcjsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVyB8IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfRVhUIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvLyB1bmlxdWVuZXNzIGNoZWNrCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVyAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmCisJCWNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCS8vY29tcGF0aWJpbGl0eSBjaGVjaworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XICYmCisJCWNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzYm9hcmQtPmFpX3NwZWVkKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gdGhpc2JvYXJkLT5haV9zcGVlZDsKKwkJCWVycisrOworCQl9CisJfQorCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSAxOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19OT05FOgorCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQkvLyBpZiB3ZSBhcmUgbm90IGluIGJ1cnN0IG1vZGUKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cpIHsKKwkJCXRtcF9hcmcgPSBjbWQtPmNvbnZlcnRfYXJnOworCQkJLyogY2FsY3VsYXRlIGNvdW50ZXIgdmFsdWVzIHRoYXQgZ2l2ZSBkZXNpcmVkIHRpbWluZyAqLworCQkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsCisJCQkJJihkZXZwcml2LT5kaXZpc29yMSksICYoZGV2cHJpdi0+ZGl2aXNvcjIpLAorCQkJCSYoY21kLT5jb252ZXJ0X2FyZyksCisJCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCQlpZiAodG1wX2FyZyAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJCWVycisrOworCQl9CisJCS8vIGlmIHdlIGFyZSBpbiBidXJzdCBtb2RlCisJCWVsc2UgeworCQkJLy8gY2hlY2sgdGhhdCBjb252ZXJ0X2FyZyBpcyBjb21wYXRpYmxlCisJCQl0bXBfYXJnID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJCWNtZC0+Y29udmVydF9hcmcgPQorCQkJCWJ1cnN0X2NvbnZlcnRfYXJnKGNtZC0+Y29udmVydF9hcmcsCisJCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCQlpZiAodG1wX2FyZyAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQkJCWVycisrOworCisJCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQkJLy8gaWYgc2NhbnMgYXJlIHRpbWVkIGZhc3RlciB0aGFuIGNvbnZlcnNpb24gcmF0ZSBhbGxvd3MKKwkJCQlpZiAoY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuID4KKwkJCQkJY21kLT5zY2FuX2JlZ2luX2FyZykgeworCQkJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0KKwkJCQkJCWNtZC0+Y29udmVydF9hcmcgKgorCQkJCQkJY21kLT5jaGFubGlzdF9sZW47CisJCQkJCWVycisrOworCQkJCX0KKwkJCQl0bXBfYXJnID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJCQkvKiBjYWxjdWxhdGUgY291bnRlciB2YWx1ZXMgdGhhdCBnaXZlIGRlc2lyZWQgdGltaW5nICovCisJCQkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcl8yZGl2KFRJTUVSX0JBU0UsCisJCQkJCSYoZGV2cHJpdi0+ZGl2aXNvcjEpLAorCQkJCQkmKGRldnByaXYtPmRpdmlzb3IyKSwKKwkJCQkJJihjbWQtPnNjYW5fYmVnaW5fYXJnKSwKKwkJCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCQkJaWYgKHRtcF9hcmcgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCQkJZXJyKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8vIG1ha2Ugc3VyZSB1c2VyIGlzIG5vdCB0cnlpbmcgdG8gbWl4IHVuaXBvbGFyIGFuZCBiaXBvbGFyIHJhbmdlcworCWlmIChjbWQtPmNoYW5saXN0KSB7CisJCXVuaXBvbGFyID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSkgJiBVTklQT0xBUjsKKwkJZm9yIChpID0gMTsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKwkJCWlmICh1bmlwb2xhciAhPSAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtpXSkgJiBVTklQT0xBUikpIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkidW5pcG9sYXIgYW5kIGJpcG9sYXIgcmFuZ2VzIGNhbm5vdCBiZSBtaXhlZCBpbiB0aGUgY2hhbmxpc3QiKTsKKwkJCQllcnIrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKKy8qIGFuYWxvZyBpbnB1dCBjbWQgaW50ZXJmYWNlICovCisKKy8vIGZpcnN0LCBzb21lIHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgaW4gdGhlIG1haW4gYWlfZG9fY21kKCkKKworLy8gcmV0dXJucyBhcHByb3ByaWF0ZSBiaXRzIGZvciBjb250cm9sIHJlZ2lzdGVyIGEsIGRlcGVuZGluZyBvbiBjb21tYW5kCitzdGF0aWMgaW50IGNvbnRyb2xfYV9iaXRzKHN0cnVjdCBjb21lZGlfY21kIGNtZCkKK3sKKwlpbnQgY29udHJvbF9hOworCisJY29udHJvbF9hID0gRkZFTjsJLy9lbmFibGUgZmlmbworCWlmIChjbWQuc3RvcF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJY29udHJvbF9hIHw9IEFURU47CisJfQorCXN3aXRjaCAoY21kLnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19FWFQ6CisJCWNvbnRyb2xfYSB8PSBUR0VOIHwgQ0dTTDsKKwkJYnJlYWs7CisJY2FzZSBUUklHX05PVzoKKwkJY29udHJvbF9hIHw9IENHRU47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBjb250cm9sX2E7Cit9CisKKy8vIHJldHVybnMgYXBwcm9wcmlhdGUgYml0cyBmb3IgY29udHJvbCByZWdpc3RlciBjLCBkZXBlbmRpbmcgb24gY29tbWFuZAorc3RhdGljIGludCBjb250cm9sX2NfYml0cyhzdHJ1Y3QgY29tZWRpX2NtZCBjbWQpCit7CisJaW50IGNvbnRyb2xfYzsKKwlpbnQgYXJlZjsKKworCS8qIHNldCBjbG9jayBzb3VyY2UgdG8gaW50ZXJuYWwgb3IgZXh0ZXJuYWwsIHNlbGVjdCBhbmFsb2cgcmVmZXJlbmNlLAorCSAqIHNlbGVjdCB1bmlwb2xhciAvIGJpcG9sYXIKKwkgKi8KKwlhcmVmID0gQ1JfQVJFRihjbWQuY2hhbmxpc3RbMF0pOworCWNvbnRyb2xfYyA9IFVRRU47CS8vZW5hYmxlIHVwcGVyIHFyYW0gYWRkcmVzc2VzCisJaWYgKGFyZWYgIT0gQVJFRl9ESUZGKQorCQljb250cm9sX2MgfD0gU0Q7CisJaWYgKGFyZWYgPT0gQVJFRl9DT01NT04pCisJCWNvbnRyb2xfYyB8PSBDTUVOOworCS8qIGlmIGEgdW5pcG9sYXIgcmFuZ2Ugd2FzIHNlbGVjdGVkICovCisJaWYgKENSX1JBTkdFKGNtZC5jaGFubGlzdFswXSkgJiBVTklQT0xBUikKKwkJY29udHJvbF9jIHw9IFVCOworCXN3aXRjaCAoY21kLnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX0ZPTExPVzoJLy8gbm90IGluIGJ1cnN0IG1vZGUKKwkJc3dpdGNoIChjbWQuY29udmVydF9zcmMpIHsKKwkJY2FzZSBUUklHX1RJTUVSOgorCQkJLyogdHJpZyBvbiBjYXNjYWRlZCBjb3VudGVycyAqLworCQkJY29udHJvbF9jIHw9IElQQ0xLOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19FWFQ6CisJCQkvKiB0cmlnIG9uIGZhbGxpbmcgZWRnZSBvZiBleHRlcm5hbCB0cmlnZ2VyICovCisJCQljb250cm9sX2MgfD0gWFBDTEs7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19USU1FUjoKKwkJLy8gYnVyc3QgbW9kZSB3aXRoIGludGVybmFsIHBhY2VyIGNsb2NrCisJCWNvbnRyb2xfYyB8PSBCTURFIHwgSVBDTEs7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCS8vIGJ1cnN0IG1vZGUgd2l0aCBleHRlcm5hbCB0cmlnZ2VyCisJCWNvbnRyb2xfYyB8PSBCTURFIHwgWFBDTEs7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBjb250cm9sX2M7Cit9CisKKy8vIHNldHMgdXAgY291bnRlcnMKK3N0YXRpYyBpbnQgc2V0dXBfY291bnRlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kIGNtZCkKK3sKKwkvLyBzZXR1cCBjYXNjYWRlZCBjb3VudGVycyBmb3IgY29udmVyc2lvbi9zY2FuIGZyZXF1ZW5jeQorCXN3aXRjaCAoY21kLnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX0ZPTExPVzoJLy8gbm90IGluIGJ1cnN0IG1vZGUKKwkJaWYgKGNtZC5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCQkvKiBzZXQgY29udmVyc2lvbiBmcmVxdWVuY3kgKi8KKwkJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihUSU1FUl9CQVNFLAorCQkJCSYoZGV2cHJpdi0+ZGl2aXNvcjEpLCAmKGRldnByaXYtPmRpdmlzb3IyKSwKKwkJCQkmKGNtZC5jb252ZXJ0X2FyZyksCisJCQkJY21kLmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJCWlmIChkYXMxODAwX3NldF9mcmVxdWVuY3koZGV2KSA8IDApIHsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX1RJTUVSOgkvLyBpbiBidXJzdCBtb2RlCisJCS8qIHNldCBzY2FuIGZyZXF1ZW5jeSAqLworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwgJihkZXZwcml2LT5kaXZpc29yMSksCisJCQkmKGRldnByaXYtPmRpdmlzb3IyKSwgJihjbWQuc2Nhbl9iZWdpbl9hcmcpLAorCQkJY21kLmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKGRhczE4MDBfc2V0X2ZyZXF1ZW5jeShkZXYpIDwgMCkgeworCQkJcmV0dXJuIC0xOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8vIHNldHVwIGNvdW50ZXIgMCBmb3IgJ2Fib3V0IHRyaWdnZXJpbmcnCisJaWYgKGNtZC5zdG9wX3NyYyA9PSBUUklHX0VYVCkgeworCQkvLyBsb2FkIGNvdW50ZXIgMCBpbiBtb2RlIDAKKwkJaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09VTlRFUiwgMCwgMCwgMSwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8vIHNldHMgdXAgZG1hCitzdGF0aWMgdm9pZCBzZXR1cF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kIGNtZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJY29uc3QgaW50IGR1YWxfZG1hID0gZGV2cHJpdi0+aXJxX2RtYV9iaXRzICYgRE1BX0RVQUw7CisKKwlpZiAoKGRldnByaXYtPmlycV9kbWFfYml0cyAmIERNQV9FTkFCTEVEKSA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBkZXRlcm1pbmUgYSByZWFzb25hYmxlIGRtYSB0cmFuc2ZlciBzaXplICovCisJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgPSBzdWdnZXN0X3RyYW5zZmVyX3NpemUoJmNtZCk7CisJbG9ja19mbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hMCk7CisJLyogY2xlYXIgZmxpcC1mbG9wIHRvIG1ha2Ugc3VyZSAyLWJ5dGUgcmVnaXN0ZXJzIGZvcgorCSAqIGNvdW50IGFuZCBhZGRyZXNzIGdldCBzZXQgY29ycmVjdGx5ICovCisJY2xlYXJfZG1hX2ZmKGRldnByaXYtPmRtYTApOworCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWEwLCB2aXJ0X3RvX2J1cyhkZXZwcml2LT5haV9idWYwKSk7CisJLy8gc2V0IGFwcHJvcHJpYXRlIHNpemUgb2YgdHJhbnNmZXIKKwlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYTAsIGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKTsKKwlkZXZwcml2LT5kbWFfY3VycmVudCA9IGRldnByaXYtPmRtYTA7CisJZGV2cHJpdi0+ZG1hX2N1cnJlbnRfYnVmID0gZGV2cHJpdi0+YWlfYnVmMDsKKwllbmFibGVfZG1hKGRldnByaXYtPmRtYTApOworCS8vIHNldCB1cCBkdWFsIGRtYSBpZiBhcHByb3ByaWF0ZQorCWlmIChkdWFsX2RtYSkgeworCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWExKTsKKwkJLyogY2xlYXIgZmxpcC1mbG9wIHRvIG1ha2Ugc3VyZSAyLWJ5dGUgcmVnaXN0ZXJzIGZvcgorCQkgKiBjb3VudCBhbmQgYWRkcmVzcyBnZXQgc2V0IGNvcnJlY3RseSAqLworCQljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hMSk7CisJCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWExLCB2aXJ0X3RvX2J1cyhkZXZwcml2LT5haV9idWYxKSk7CisJCS8vIHNldCBhcHByb3ByaWF0ZSBzaXplIG9mIHRyYW5zZmVyCisJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hMSwgZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUpOworCQllbmFibGVfZG1hKGRldnByaXYtPmRtYTEpOworCX0KKwlyZWxlYXNlX2RtYV9sb2NrKGxvY2tfZmxhZ3MpOworCisJcmV0dXJuOworfQorCisvLyBwcm9ncmFtcyBjaGFubmVsL2dhaW4gbGlzdCBpbnRvIGNhcmQKK3N0YXRpYyB2b2lkIHByb2dyYW1fY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kIGNtZCkKK3sKKwlpbnQgaSwgbiwgY2hhbl9yYW5nZTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwljb25zdCBpbnQgcmFuZ2VfbWFzayA9IDB4MzsJLy9tYXNrcyB1bmlwb2xhci9iaXBvbGFyIGJpdCBvZmYgcmFuZ2UKKwljb25zdCBpbnQgcmFuZ2VfYml0c2hpZnQgPSA4OworCisJbiA9IGNtZC5jaGFubGlzdF9sZW47CisJLy8gc3BpbmxvY2sgcHJvdGVjdHMgaW5kaXJlY3QgYWRkcmVzc2luZworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwlvdXRiKFFSQU0sIGRldi0+aW9iYXNlICsgREFTMTgwMF9TRUxFQ1QpOwkvKiBzZWxlY3QgUVJBTSBmb3IgYmFzZUFkZHJlc3MgKyAweDAgKi8KKwlvdXRiKG4gLSAxLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfUVJBTV9BRERSRVNTKTsJLypzZXQgUVJBTSBhZGRyZXNzIHN0YXJ0ICovCisJLyogbWFrZSBjaGFubmVsIC8gZ2FpbiBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQljaGFuX3JhbmdlID0KKwkJCUNSX0NIQU4oY21kLmNoYW5saXN0W2ldKSB8ICgoQ1JfUkFOR0UoY21kLgorCQkJCQljaGFubGlzdFtpXSkgJiByYW5nZV9tYXNrKSA8PAorCQkJcmFuZ2VfYml0c2hpZnQpOworCQlvdXR3KGNoYW5fcmFuZ2UsIGRldi0+aW9iYXNlICsgREFTMTgwMF9RUkFNKTsKKwl9CisJb3V0YihuIC0gMSwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1FSQU1fQUREUkVTUyk7CS8qZmluaXNoIHdyaXRlIHRvIFFSQU0gKi8KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCXJldHVybjsKK30KKworLy8gYW5hbG9nIGlucHV0IGRvX2NtZAorc3RhdGljIGludCBkYXMxODAwX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCByZXQ7CisJaW50IGNvbnRyb2xfYSwgY29udHJvbF9jOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgY21kID0gYXN5bmMtPmNtZDsKKworCWlmICghZGV2LT5pcnEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJubyBpcnEgYXNzaWduZWQgZm9yIGRhcy0xODAwLCBjYW5ub3QgZG8gaGFyZHdhcmUgY29udmVyc2lvbnMiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGRpc2FibGUgZG1hIG9uIFRSSUdfV0FLRV9FT1MsIG9yIFRSSUdfUlQKKwkgKiAoYmVjYXVzZSBkbWEgaW4gaGFuZGxlciBpcyB1bnNhZmUgYXQgaGFyZCByZWFsLXRpbWUgcHJpb3JpdHkpICovCisJaWYgKGNtZC5mbGFncyAmIChUUklHX1dBS0VfRU9TIHwgVFJJR19SVCkpIHsKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzICY9IH5ETUFfRU5BQkxFRDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgfD0gZGV2cHJpdi0+ZG1hX2JpdHM7CisJfQorCS8vIGludGVycnVwdCBvbiBlbmQgb2YgY29udmVyc2lvbiBmb3IgVFJJR19XQUtFX0VPUworCWlmIChjbWQuZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSB7CisJCS8vIGludGVycnVwdCBmaWZvIG5vdCBlbXB0eQorCQlkZXZwcml2LT5pcnFfZG1hX2JpdHMgJj0gfkZJTUQ7CisJfSBlbHNlIHsKKwkJLy8gaW50ZXJydXB0IGZpZm8gaGFsZiBmdWxsCisJCWRldnByaXYtPmlycV9kbWFfYml0cyB8PSBGSU1EOworCX0KKwkvLyBkZXRlcm1pbmUgaG93IG1hbnkgY29udmVyc2lvbnMgd2UgbmVlZAorCWlmIChjbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5jb3VudCA9IGNtZC5zdG9wX2FyZyAqIGNtZC5jaGFubGlzdF9sZW47CisJfQorCisJZGFzMTgwMF9jYW5jZWwoZGV2LCBzKTsKKworCS8vIGRldGVybWluZSBwcm9wZXIgYml0cyBmb3IgY29udHJvbCByZWdpc3RlcnMKKwljb250cm9sX2EgPSBjb250cm9sX2FfYml0cyhjbWQpOworCWNvbnRyb2xfYyA9IGNvbnRyb2xfY19iaXRzKGNtZCk7CisKKwkvKiBzZXR1cCBjYXJkIGFuZCBzdGFydCAqLworCXByb2dyYW1fY2hhbmxpc3QoZGV2LCBjbWQpOworCXJldCA9IHNldHVwX2NvdW50ZXJzKGRldiwgY21kKTsKKwlpZiAocmV0IDwgMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiRXJyb3Igc2V0dGluZyB1cCBjb3VudGVycyIpOworCQlyZXR1cm4gcmV0OworCX0KKwlzZXR1cF9kbWEoZGV2LCBjbWQpOworCW91dGIoY29udHJvbF9jLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09OVFJPTF9DKTsKKwkvLyBzZXQgY29udmVyc2lvbiByYXRlIGFuZCBsZW5ndGggZm9yIGJ1cnN0IG1vZGUKKwlpZiAoY29udHJvbF9jICYgQk1ERSkgeworCQkvLyBwcm9ncmFtIGNvbnZlcnNpb24gcGVyaW9kIHdpdGggbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcyBtaW51cyAxCisJCW91dGIoY21kLmNvbnZlcnRfYXJnIC8gMTAwMCAtIDEsCisJCQlkZXYtPmlvYmFzZSArIERBUzE4MDBfQlVSU1RfUkFURSk7CisJCW91dGIoY21kLmNoYW5saXN0X2xlbiAtIDEsIGRldi0+aW9iYXNlICsgREFTMTgwMF9CVVJTVF9MRU5HVEgpOworCX0KKwlvdXRiKGRldnByaXYtPmlycV9kbWFfYml0cywgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX0NPTlRST0xfQik7CS8vIGVuYWJsZSBpcnEvZG1hCisJb3V0Yihjb250cm9sX2EsIGRldi0+aW9iYXNlICsgREFTMTgwMF9DT05UUk9MX0EpOwkvKiBlbmFibGUgZmlmbyBhbmQgdHJpZ2dlcmluZyAqLworCW91dGIoQ1ZFTiwgZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NUQVRVUyk7CS8qIGVuYWJsZSBjb252ZXJzaW9ucyAqLworCisJcmV0dXJuIDA7Cit9CisKKy8qIHJlYWQgYW5hbG9nIGlucHV0ICovCitzdGF0aWMgaW50IGRhczE4MDBfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpLCBuOworCWludCBjaGFuLCByYW5nZSwgYXJlZiwgY2hhbl9yYW5nZTsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisJc2hvcnQgZHBudDsKKwlpbnQgY29udl9mbGFncyA9IDA7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwkvKiBzZXQgdXAgYW5hbG9nIHJlZmVyZW5jZSBhbmQgdW5pcG9sYXIgLyBiaXBvbGFyIG1vZGUgKi8KKwlhcmVmID0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisJY29udl9mbGFncyB8PSBVUUVOOworCWlmIChhcmVmICE9IEFSRUZfRElGRikKKwkJY29udl9mbGFncyB8PSBTRDsKKwlpZiAoYXJlZiA9PSBBUkVGX0NPTU1PTikKKwkJY29udl9mbGFncyB8PSBDTUVOOworCS8qIGlmIGEgdW5pcG9sYXIgcmFuZ2Ugd2FzIHNlbGVjdGVkICovCisJaWYgKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSAmIFVOSVBPTEFSKQorCQljb252X2ZsYWdzIHw9IFVCOworCisJb3V0Yihjb252X2ZsYWdzLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09OVFJPTF9DKTsJLyogc29mdHdhcmUgY29udmVyc2lvbiBlbmFibGVkICovCisJb3V0YihDVkVOLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU1RBVFVTKTsJLyogZW5hYmxlIGNvbnZlcnNpb25zICovCisJb3V0YigweDAsIGRldi0+aW9iYXNlICsgREFTMTgwMF9DT05UUk9MX0EpOwkvKiByZXNldCBmaWZvICovCisJb3V0YihGRkVOLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09OVFJPTF9BKTsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwkvKiBtYXNrIG9mIHVuaXBvbGFyL2JpcG9sYXIgYml0IGZyb20gcmFuZ2UgKi8KKwlyYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSAmIDB4MzsKKwljaGFuX3JhbmdlID0gY2hhbiB8IChyYW5nZSA8PCA4KTsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJb3V0YihRUkFNLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU0VMRUNUKTsJLyogc2VsZWN0IFFSQU0gZm9yIGJhc2VBZGRyZXNzICsgMHgwICovCisJb3V0YigweDAsIGRldi0+aW9iYXNlICsgREFTMTgwMF9RUkFNX0FERFJFU1MpOwkvKiBzZXQgUVJBTSBhZGRyZXNzIHN0YXJ0ICovCisJb3V0dyhjaGFuX3JhbmdlLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfUVJBTSk7CisJb3V0YigweDAsIGRldi0+aW9iYXNlICsgREFTMTgwMF9RUkFNX0FERFJFU1MpOwkvKmZpbmlzaCB3cml0ZSB0byBRUkFNICovCisJb3V0YihBREMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9TRUxFQ1QpOwkvKiBzZWxlY3QgQURDIGZvciBiYXNlQWRkcmVzcyArIDB4MCAqLworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkvKiB0cmlnZ2VyIGNvbnZlcnNpb24gKi8KKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfRklGTyk7CisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmIChpbmIoZGV2LT5pb2Jhc2UgKyBEQVMxODAwX1NUQVRVUykgJiBGTkUpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gdGltZW91dCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXQiKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKwkJZHBudCA9IGludyhkZXYtPmlvYmFzZSArIERBUzE4MDBfRklGTyk7CisJCS8qIHNoaWZ0IGRhdGEgdG8gb2Zmc2V0IGJpbmFyeSBmb3IgYmlwb2xhciByYW5nZXMgKi8KKwkJaWYgKChjb252X2ZsYWdzICYgVUIpID09IDApCisJCQlkcG50ICs9IDEgPDwgKHRoaXNib2FyZC0+cmVzb2x1dGlvbiAtIDEpOworCQlkYXRhW25dID0gZHBudDsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisKKwlyZXR1cm4gbjsKK30KKworLyogd3JpdGVzIHRvIGFuIGFuYWxvZyBvdXRwdXQgY2hhbm5lbCAqLworc3RhdGljIGludCBkYXMxODAwX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworLy8gICAgICBpbnQgcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJaW50IHVwZGF0ZV9jaGFuID0gdGhpc2JvYXJkLT5hb19uX2NoYW4gLSAxOworCXNob3J0IG91dHB1dDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCS8vICBjYXJkIGV4cGVjdHMgdHdvJ3MgY29tcGxlbWVudCBkYXRhCisJb3V0cHV0ID0gZGF0YVswXSAtICgxIDw8ICh0aGlzYm9hcmQtPnJlc29sdXRpb24gLSAxKSk7CisJLy8gaWYgdGhlIHdyaXRlIGlzIHRvIHRoZSAndXBkYXRlJyBjaGFubmVsLCB3ZSBuZWVkIHRvIHJlbWVtYmVyIGl0cyB2YWx1ZQorCWlmIChjaGFuID09IHVwZGF0ZV9jaGFuKQorCQlkZXZwcml2LT5hb191cGRhdGVfYml0cyA9IG91dHB1dDsKKwkvLyB3cml0ZSB0byBjaGFubmVsCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoREFDKGNoYW4pLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU0VMRUNUKTsJLyogc2VsZWN0IGRhYyBjaGFubmVsIGZvciBiYXNlQWRkcmVzcyArIDB4MCAqLworCW91dHcob3V0cHV0LCBkZXYtPmlvYmFzZSArIERBUzE4MDBfREFDKTsKKwkvLyBub3cgd2UgbmVlZCB0byB3cml0ZSB0byAndXBkYXRlJyBjaGFubmVsIHRvIHVwZGF0ZSBhbGwgZGFjIGNoYW5uZWxzCisJaWYgKGNoYW4gIT0gdXBkYXRlX2NoYW4pIHsKKwkJb3V0YihEQUModXBkYXRlX2NoYW4pLCBkZXYtPmlvYmFzZSArIERBUzE4MDBfU0VMRUNUKTsJLyogc2VsZWN0ICd1cGRhdGUnIGNoYW5uZWwgZm9yIGJhc2VBZGRyZXNzICsgMHgwICovCisJCW91dHcoZGV2cHJpdi0+YW9fdXBkYXRlX2JpdHMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9EQUMpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCXJldHVybiAxOworfQorCisvKiByZWFkcyBmcm9tIGRpZ2l0YWwgaW5wdXQgY2hhbm5lbHMgKi8KK3N0YXRpYyBpbnQgZGFzMTgwMF9kaV9yYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgREFTMTgwMF9ESUdJVEFMKSAmIDB4ZjsKKwlkYXRhWzBdID0gMDsKKworCXJldHVybiAyOworfQorCisvKiB3cml0ZXMgdG8gZGlnaXRhbCBvdXRwdXQgY2hhbm5lbHMgKi8KK3N0YXRpYyBpbnQgZGFzMTgwMF9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IHdiaXRzOworCisJLy8gb25seSBzZXQgYml0cyB0aGF0IGhhdmUgYmVlbiBtYXNrZWQKKwlkYXRhWzBdICY9ICgxIDw8IHMtPm5fY2hhbikgLSAxOworCXdiaXRzID0gZGV2cHJpdi0+ZG9fYml0czsKKwl3Yml0cyAmPSB+ZGF0YVswXTsKKwl3Yml0cyB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwlkZXZwcml2LT5kb19iaXRzID0gd2JpdHM7CisKKwlvdXRiKGRldnByaXYtPmRvX2JpdHMsIGRldi0+aW9iYXNlICsgREFTMTgwMF9ESUdJVEFMKTsKKworCWRhdGFbMV0gPSBkZXZwcml2LT5kb19iaXRzOworCisJcmV0dXJuIDI7Cit9CisKKy8qIGxvYWRzIGNvdW50ZXJzIHdpdGggZGl2aXNvcjEsIGRpdmlzb3IyIGZyb20gcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBpbnQgZGFzMTgwMF9zZXRfZnJlcXVlbmN5KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBlcnIgPSAwOworCisJLy8gY291bnRlciAxLCBtb2RlIDIKKwlpZiAoaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09VTlRFUiwgMCwgMSwgZGV2cHJpdi0+ZGl2aXNvcjEsCisJCQkyKSkKKwkJZXJyKys7CisJLy8gY291bnRlciAyLCBtb2RlIDIKKwlpZiAoaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzE4MDBfQ09VTlRFUiwgMCwgMiwgZGV2cHJpdi0+ZGl2aXNvcjIsCisJCQkyKSkKKwkJZXJyKys7CisJaWYgKGVycikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGNvbnZlcnRzIHJlcXVlc3RlZCBjb252ZXJzaW9uIHRpbWluZyB0byB0aW1pbmcgY29tcGF0aWJsZSB3aXRoCisgKiBoYXJkd2FyZSwgdXNlZCBvbmx5IHdoZW4gY2FyZCBpcyBpbiAnYnVyc3QgbW9kZScKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBidXJzdF9jb252ZXJ0X2FyZyh1bnNpZ25lZCBpbnQgY29udmVydF9hcmcsIGludCByb3VuZF9tb2RlKQoreworCXVuc2lnbmVkIGludCBtaWNyb19zZWM7CisKKwkvLyBpbiBidXJzdCBtb2RlLCB0aGUgbWF4aW11bSBjb252ZXJzaW9uIHRpbWUgaXMgNjQgbWljcm9zZWNvbmRzCisJaWYgKGNvbnZlcnRfYXJnID4gNjQwMDApCisJCWNvbnZlcnRfYXJnID0gNjQwMDA7CisKKwkvLyB0aGUgY29udmVyc2lvbiB0aW1lIG11c3QgYmUgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIG1pY3Jvc2Vjb25kcworCXN3aXRjaCAocm91bmRfbW9kZSkgeworCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCWRlZmF1bHQ6CisJCW1pY3JvX3NlYyA9IChjb252ZXJ0X2FyZyArIDUwMCkgLyAxMDAwOworCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJbWljcm9fc2VjID0gY29udmVydF9hcmcgLyAxMDAwOworCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfVVA6CisJCW1pY3JvX3NlYyA9IChjb252ZXJ0X2FyZyAtIDEpIC8gMTAwMCArIDE7CisJCWJyZWFrOworCX0KKworCS8vIHJldHVybiBudW1iZXIgb2YgbmFub3NlY29uZHMKKwlyZXR1cm4gbWljcm9fc2VjICogMTAwMDsKK30KKworLy8gdXRpbGl0eSBmdW5jdGlvbiB0aGF0IHN1Z2dlc3RzIGEgZG1hIHRyYW5zZmVyIHNpemUgYmFzZWQgb24gdGhlIGNvbnZlcnNpb24gcGVyaW9kICducycKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3VnZ2VzdF90cmFuc2Zlcl9zaXplKHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXVuc2lnbmVkIGludCBzaXplID0gRE1BX0JVRl9TSVpFOworCXN0YXRpYyBjb25zdCBpbnQgc2FtcGxlX3NpemUgPSAyOwkvLyBzaXplIGluIGJ5dGVzIG9mIG9uZSBzYW1wbGUgZnJvbSBib2FyZAorCXVuc2lnbmVkIGludCBmaWxsX3RpbWUgPSAzMDAwMDAwMDA7CS8vIHRhcmdldCB0aW1lIGluIG5hbm9zZWNvbmRzIGZvciBmaWxsaW5nIGRtYSBidWZmZXIKKwl1bnNpZ25lZCBpbnQgbWF4X3NpemU7CS8vIG1heGltdW0gc2l6ZSB3ZSB3aWxsIGFsbG93IGZvciBhIHRyYW5zZmVyCisKKwkvLyBtYWtlIGRtYSBidWZmZXIgZmlsbCBpbiAwLjMgc2Vjb25kcyBmb3IgdGltZWQgbW9kZXMKKwlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwljYXNlIFRSSUdfRk9MTE9XOgkvLyBub3QgaW4gYnVyc3QgbW9kZQorCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKQorCQkJc2l6ZSA9IChmaWxsX3RpbWUgLyBjbWQtPmNvbnZlcnRfYXJnKSAqIHNhbXBsZV9zaXplOworCQlicmVhazsKKwljYXNlIFRSSUdfVElNRVI6CisJCXNpemUgPSAoZmlsbF90aW1lIC8gKGNtZC0+c2Nhbl9iZWdpbl9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbikpICoKKwkJCXNhbXBsZV9zaXplOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzaXplID0gRE1BX0JVRl9TSVpFOworCQlicmVhazsKKwl9CisKKwkvLyBzZXQgYSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNpemUgYWxsb3dlZAorCW1heF9zaXplID0gRE1BX0JVRl9TSVpFOworCS8vIGlmIHdlIGFyZSB0YWtpbmcgbGltaXRlZCBudW1iZXIgb2YgY29udmVyc2lvbnMsIGxpbWl0IHRyYW5zZmVyIHNpemUgdG8gdGhhdAorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKKwkJY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuICogc2FtcGxlX3NpemUgPCBtYXhfc2l6ZSkKKwkJbWF4X3NpemUgPSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW4gKiBzYW1wbGVfc2l6ZTsKKworCWlmIChzaXplID4gbWF4X3NpemUpCisJCXNpemUgPSBtYXhfc2l6ZTsKKwlpZiAoc2l6ZSA8IHNhbXBsZV9zaXplKQorCQlzaXplID0gc2FtcGxlX3NpemU7CisKKwlyZXR1cm4gc2l6ZTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM2NDAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzNjQwMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOGNhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzNjQwMi5jCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICAgU29tZSBjb21tZW50cyBvbiB0aGUgY29kZS4uCisKKyAgIC0gaXQgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSB0byB1c2Ugb3V0Yl9wKCkuCisKKyAgIC0gaWdub3JlaXJxIGNyZWF0ZXMgYSByYWNlIGNvbmRpdGlvbi4gIEl0IG5lZWRzIHRvIGJlIGZpeGVkLgorCisgKi8KKworLyoKKyAgIGNvbWVkaS9kcml2ZXJzL2RhczY0MDIuYworICAgQW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgQ29tcHV0ZXJib2FyZHMnIERBUzY0MDIgSS9PIGNhcmQKKworICAgQ29weXJpZ2h0IChDKSAxOTk5IE95c3RlaW4gU3ZlbmRzZW4gPHN2ZW5kc2VuQHB2di5vcmc+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAqLworLyoKK0RyaXZlcjogZGFzNjQwMgorRGVzY3JpcHRpb246IEtlaXRobGV5IE1ldHJhYnl0ZSBEQVM2NDAyICgmIGNvbXBhdGlibGVzKQorQXV0aG9yOiBPeXN0ZWluIFN2ZW5kc2VuIDxzdmVuZHNlbkBwdnYub3JnPgorU3RhdHVzOiBiaXRyb3R0ZW4KK0RldmljZXM6IFtLZWl0aGxleSBNZXRyYWJ5dGVdIERBUzY0MDIgKGRhczY0MDIpCisKK1RoaXMgZHJpdmVyIGhhcyBzdWZmZXJlZCBiaXRyb3QuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBEQVM2NDAyX1NJWkUgMTYKKworI2RlZmluZSBOX1dPUkRTIDMwMDAqNjQKKworI2RlZmluZSBTVE9QICAgIDAKKyNkZWZpbmUgU1RBUlQgICAxCisKKyNkZWZpbmUgU0NBTkwgMHgzZjAwCisjZGVmaW5lIEJZVEUgdW5zaWduZWQgY2hhcgorI2RlZmluZSBXT1JEIHVuc2lnbmVkIHNob3J0CisKKy8qLS0tLS0gcmVnaXN0ZXIgOCAtLS0tKi8KKyNkZWZpbmUgQ0xSSU5UIDB4MDEKKyNkZWZpbmUgQ0xSWFRSIDB4MDIKKyNkZWZpbmUgQ0xSWElOIDB4MDQKKyNkZWZpbmUgRVhURU5EIDB4MTAKKyNkZWZpbmUgQVJNRUQgMHgyMAkJLyogZW5hYmxlIGNvbnRpbmcgb2YgcG9zdCBzYW1wbGUgY29udiAqLworI2RlZmluZSBQT1NUTU9ERSAweDQwCisjZGVmaW5lIE1IWiAweDgwCQkvKiAxMCBNSHogY2xvY2sgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLSByZWdpc3RlciA5IC0tLS0qLworI2RlZmluZSBJUlEgKDB4MDQgPDwgNCkJCS8qIHRoZXNlIHR3byBhcmUgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgSVJRViAxMAkJCS8qICAgICAgICAgICAgICAgZGVwZW5kZW50IG9uIGVhY2ggb3RoZXIgKi8KKworI2RlZmluZSBDT05WU1JDIDB4MDMJCS8qIHRyaWcgc3JjIGlzIEludGFybmFsIHBhY2VyICovCisjZGVmaW5lIEJVUlNURU4gMHgwNAkJLyogZW5hYmxlIGJ1cnN0ICovCisjZGVmaW5lIFhJTlRFIDB4MDgJCS8qIHVzZSBleHRlcm5hbCBpbnQuIHRyaWcgKi8KKyNkZWZpbmUgSU5URSAweDgwCQkvKiBlbmFibGUgYW5hbG9nIGludGVycnVwdHMgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyotLS0tLSByZWdpc3RlciAxMCAtLS0qLworI2RlZmluZSBUR0VOIDB4MDEJCS8qIFVzZSBwaW4gREkxIGZvciBleHRlcm5sIHRyaWdnaW5nPyAqLworI2RlZmluZSBUR1NFTCAweDAyCQkvKiBVc2UgZWRnZSB0cmlnZ2VyaW5nICovCisjZGVmaW5lIFRHUE9MIDB4MDQJCS8qIGFjdGl2ZSBlZGdlIGlzIGZhbGxpbmcgKi8KKyNkZWZpbmUgUFJFVFJJRyAweDA4CQkvKiBwcmV0cmlnICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qLS0tLS0gcmVnaXN0ZXIgMTEgLS0tKi8KKyNkZWZpbmUgRU9CIDB4MGMKKyNkZWZpbmUgRklGT0hGVUxMIDB4MDgKKyNkZWZpbmUgR0FJTiAweDAxCisjZGVmaW5lIEZJRk9ORVBUWSAweDA0CisjZGVmaW5lIE1PREUgMHgxMAorI2RlZmluZSBTRU0gMHgyMAorI2RlZmluZSBCSVAgMHg0MAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjZGVmaW5lIE0wIDB4MDAKKyNkZWZpbmUgTTIgMHgwNAorCisjZGVmaW5lCUMwIDB4MDAKKyNkZWZpbmUJQzEgMHg0MAorI2RlZmluZQlDMiAweDgwCisjZGVmaW5lCVJXTEggMHgzMAorCitzdGF0aWMgaW50IGRhczY0MDJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGFzNjQwMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kYXM2NDAyID0geworICAgICAgZHJpdmVyX25hbWU6ImRhczY0MDIiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmRhczY0MDJfYXR0YWNoLAorICAgICAgZGV0YWNoOmRhczY0MDJfZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXM2NDAyKTsKKworc3RydWN0IGRhczY0MDJfcHJpdmF0ZSB7CisJaW50IGFpX2J5dGVzX3RvX3JlYWQ7CisKKwlpbnQgZGFzNjQwMl9pZ25vcmVpcnE7Cit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhczY0MDJfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIHZvaWQgZGFzNjQwMl9haV9maWZvX2RyZWdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgdm9pZCBkYXM2NDAyX3NldGNvdW50ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJQllURSBwOworCXVuc2lnbmVkIHNob3J0IGN0cmx3cmQ7CisKKwkvKiBzZXQgdXAgY291bnRlcjAgZmlyc3QsIG1vZGUgMCAqLworCXAgPSBNMCB8IEMwIHwgUldMSDsKKwlvdXRiX3AocCwgZGV2LT5pb2Jhc2UgKyAxNSk7CisJY3RybHdyZCA9IDIwMDA7CisJcCA9IChCWVRFKSAoMHhmZiAmIGN0cmx3cmQpOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDEyKTsKKwlwID0gKEJZVEUpICgweGZmICYgKGN0cmx3cmQgPj4gOCkpOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDEyKTsKKworCS8qIHNldCB1cCBjb3VudGVyMSwgbW9kZSAyICovCisJcCA9IE0yIHwgQzEgfCBSV0xIOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDE1KTsKKwljdHJsd3JkID0gMTA7CisJcCA9IChCWVRFKSAoMHhmZiAmIGN0cmx3cmQpOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDEzKTsKKwlwID0gKEJZVEUpICgweGZmICYgKGN0cmx3cmQgPj4gOCkpOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDEzKTsKKworCS8qIHNldCB1cCBjb3VudGVyMSwgbW9kZSAyICovCisJcCA9IE0yIHwgQzIgfCBSV0xIOworCW91dGJfcChwLCBkZXYtPmlvYmFzZSArIDE1KTsKKwljdHJsd3JkID0gMTAwMDsKKwlwID0gKEJZVEUpICgweGZmICYgY3RybHdyZCk7CisJb3V0Yl9wKHAsIGRldi0+aW9iYXNlICsgMTQpOworCXAgPSAoQllURSkgKDB4ZmYgJiAoY3RybHdyZCA+PiA4KSk7CisJb3V0Yl9wKHAsIGRldi0+aW9iYXNlICsgMTQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXM7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQgfHwgZGV2cHJpdi0+ZGFzNjQwMl9pZ25vcmVpcnEpIHsKKwkJcHJpbnRrKCJkYXM2NDAyOiBCVUc6IHNwdXJpb3VzIGludGVycnVwdFxuIik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisjaWZkZWYgREVCVUcKKwlwcmludGsoImRhczY0MDI6IGludGVycnVwdCEgZGFzNjQwMl9pcnFjb3VudD0laVxuIiwKKwkJZGV2cHJpdi0+ZGFzNjQwMl9pcnFjb3VudCk7CisJcHJpbnRrKCJkYXM2NDAyOiBpb2Jhc2UrMj0laVxuIiwgaW53X3AoZGV2LT5pb2Jhc2UgKyAyKSk7CisjZW5kaWYKKworCWRhczY0MDJfYWlfZmlmb19kcmVncyhkZXYsIHMpOworCisJaWYgKHMtPmFzeW5jLT5idWZfd3JpdGVfY291bnQgPj0gZGV2cHJpdi0+YWlfYnl0ZXNfdG9fcmVhZCkgeworCQlvdXR3X3AoU0NBTkwsIGRldi0+aW9iYXNlICsgMik7CS8qIGNsZWFycyB0aGUgZmlmbyAqLworCQlvdXRiKDB4MDcsIGRldi0+aW9iYXNlICsgOCk7CS8qIGNsZWFycyBhbGwgZmxpcC1mbG9wcyAqLworI2lmZGVmIERFQlVHCisJCXByaW50aygiZGFzNjQwMjogR290ICVpIHNhbXBsZXNcblxuIiwKKwkJCWRldnByaXYtPmRhczY0MDJfd29yZHNyZWFkIC0gZGlmZik7CisjZW5kaWYKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwlvdXRiKDB4MDEsIGRldi0+aW9iYXNlICsgOCk7CS8qIGNsZWFyIG9ubHkgdGhlIGludGVycnVwdCBmbGlwLWZsb3AgKi8KKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkIGRhczY0MDJfYWlfZmlmb19yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzaG9ydCAqIGRhdGEsIGludCBuKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJZGF0YVtpXSA9IGludyhkZXYtPmlvYmFzZSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZGFzNjQwMl9haV9maWZvX2RyZWdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJd2hpbGUgKDEpIHsKKwkJaWYgKCEoaW5iKGRldi0+aW9iYXNlICsgOCkgJiAweDAxKSkKKwkJCXJldHVybjsKKwkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGludyhkZXYtPmlvYmFzZSkpOworCX0KK30KKworc3RhdGljIGludCBkYXM2NDAyX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8qCisJICogIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJlc2V0IHRoZSBib2FyZCBmcm9tIHdoYXRldmVyIGNvbmRpdGlvbiBpdAorCSAqICBpcyBpbiAoaS5lLiwgYWNxdWlyaW5nIGRhdGEpLCB0byBhIG5vbi1hY3RpdmUgc3RhdGUuCisJICovCisKKwlkZXZwcml2LT5kYXM2NDAyX2lnbm9yZWlycSA9IDE7CisjaWZkZWYgREVCVUcKKwlwcmludGsoImRhczY0MDI6IFN0b3BwaW5nIGFjcXVpc2l0aW9uXG4iKTsKKyNlbmRpZgorCWRldnByaXYtPmRhczY0MDJfaWdub3JlaXJxID0gMTsKKwlvdXRiX3AoMHgwMiwgZGV2LT5pb2Jhc2UgKyAxMCk7CS8qIGRpc2FibGUgZXh0ZXJuYWwgdHJpZ2dpbmcgKi8KKwlvdXR3X3AoU0NBTkwsIGRldi0+aW9iYXNlICsgMik7CS8qIHJlc2V0cyB0aGUgY2FyZCBmaWZvICovCisJb3V0Yl9wKDAsIGRldi0+aW9iYXNlICsgOSk7CS8qIGRpc2FibGVzIGludGVycnVwdHMgKi8KKworCW91dHdfcChTQ0FOTCwgZGV2LT5pb2Jhc2UgKyAyKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgdW51c2VkCitzdGF0aWMgaW50IGRhczY0MDJfYWlfbW9kZTIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwljb21lZGlfdHJpZyAqIGl0KQoreworCWRldnByaXYtPmRhczY0MDJfaWdub3JlaXJxID0gMTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJkYXM2NDAyOiBTdGFydGluZyBhY3F1aXNpdGlvblxuIik7CisjZW5kaWYKKwlvdXRiX3AoMHgwMywgZGV2LT5pb2Jhc2UgKyAxMCk7CS8qIGVuYWJsZSBleHRlcm5hbCB0cmlnZ2luZyAqLworCW91dHdfcChTQ0FOTCwgZGV2LT5pb2Jhc2UgKyAyKTsJLyogcmVzZXRzIHRoZSBjYXJkIGZpZm8gKi8KKwlvdXRiX3AoSVJRIHwgQ09OVlNSQyB8IEJVUlNURU4gfCBJTlRFLCBkZXYtPmlvYmFzZSArIDkpOworCisJZGV2cHJpdi0+YWlfYnl0ZXNfdG9fcmVhZCA9IGl0LT5uICogc2l6ZW9mKHNob3J0KTsKKworCS8qIHVtLi4uIGlnbm9yZWlycSBpcyBhIG5hc3R5IHJhY2UgY29uZGl0aW9uICovCisJZGV2cHJpdi0+ZGFzNjQwMl9pZ25vcmVpcnEgPSAwOworCisJb3V0d19wKFNDQU5MLCBkZXYtPmlvYmFzZSArIDIpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBib2FyZF9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCUJZVEUgYjsKKworCWRldnByaXYtPmRhczY0MDJfaWdub3JlaXJxID0gMTsKKworCW91dGIoMHgwNywgZGV2LT5pb2Jhc2UgKyA4KTsKKworCS8qIHJlZ2lzdGVyIDExICAqLworCW91dGJfcChNT0RFLCBkZXYtPmlvYmFzZSArIDExKTsKKwliID0gQklQIHwgU0VNIHwgTU9ERSB8IEdBSU4gfCBGSUZPSEZVTEw7CisJb3V0Yl9wKGIsIGRldi0+aW9iYXNlICsgMTEpOworCisJLyogcmVnaXN0ZXIgOCAgICovCisJb3V0Yl9wKEVYVEVORCwgZGV2LT5pb2Jhc2UgKyA4KTsKKwliID0gRVhURU5EIHwgTUhaOworCW91dGJfcChiLCBkZXYtPmlvYmFzZSArIDgpOworCWIgPSBNSFogfCBDTFJJTlQgfCBDTFJYVFIgfCBDTFJYSU47CisJb3V0Yl9wKGIsIGRldi0+aW9iYXNlICsgOCk7CisKKwkvKiByZWdpc3RlciA5ICAgICovCisJYiA9IElSUSB8IENPTlZTUkMgfCBCVVJTVEVOIHwgSU5URTsKKwlvdXRiX3AoYiwgZGV2LT5pb2Jhc2UgKyA5KTsKKworCS8qIHJlZ2lzdGVyIDEwICAgKi8KKwliID0gVEdTRUwgfCBUR0VOOworCW91dGJfcChiLCBkZXYtPmlvYmFzZSArIDEwKTsKKworCWIgPSAweDA3OworCW91dGJfcChiLCBkZXYtPmlvYmFzZSArIDgpOworCisJZGFzNjQwMl9zZXRjb3VudGVyKGRldik7CisKKwlvdXR3X3AoU0NBTkwsIGRldi0+aW9iYXNlICsgMik7CS8qIHJlc2V0IGNhcmQgZmlmbyAqLworCisJZGV2cHJpdi0+ZGFzNjQwMl9pZ25vcmVpcnEgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzNjQwMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgREFTNjQwMl9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhczY0MDJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJaW50IHJldDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCWRldi0+Ym9hcmRfbmFtZSA9ICJkYXM2NDAyIjsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlmIChpb2Jhc2UgPT0gMCkKKwkJaW9iYXNlID0gMHgzMDA7CisKKwlwcmludGsoImNvbWVkaSVkOiBkYXM2NDAyOiAweCUwNGx4IiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBEQVM2NDAyX1NJWkUsICJkYXM2NDAyIikpIHsKKwkJcHJpbnRrKCIgSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwkvKiBzaG91bGQgZG8gYSBwcm9iZSBoZXJlICovCisKKwlpcnEgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoIiAoIGlycSA9ICV1ICkiLCBpcnEpOworCXJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGludHJfaGFuZGxlciwgMCwgImRhczY0MDIiLCBkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50aygiaXJxIGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZGV2LT5pcnEgPSBpcnE7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRhczY0MDJfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogYWkgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gODsKKwkvL3MtPnRyaWdbMl09ZGFzNjQwMl9haV9tb2RlMjsKKwlzLT5jYW5jZWwgPSBkYXM2NDAyX2FpX2NhbmNlbDsKKwlzLT5tYXhkYXRhID0gKDEgPDwgMTIpIC0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxNjsJLyogPyAqLworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CisKKwlib2FyZF9pbml0KGRldik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTY2NTZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczgwMC5jCkBAIC0wLDAgKzEsODk0IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2RhczgwMC5jCisgICAgRHJpdmVyIGZvciBLZWl0bGV5IGRhczgwMCBzZXJpZXMgYm9hcmRzIGFuZCBjb21wYXRpYmxlcworICAgIENvcHlyaWdodCAoQykgMjAwMCBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKy8qCitEcml2ZXI6IGRhczgwMAorRGVzY3JpcHRpb246IEtlaXRobGV5IE1ldHJhYnl0ZSBEQVM4MDAgKCYgY29tcGF0aWJsZXMpCitBdXRob3I6IEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RldmljZXM6IFtLZWl0aGxleSBNZXRyYWJ5dGVdIERBUy04MDAgKGRhcy04MDApLCBEQVMtODAxIChkYXMtODAxKSwKKyAgREFTLTgwMiAoZGFzLTgwMiksCisgIFtNZWFzdXJlbWVudCBDb21wdXRpbmddIENJTy1EQVM4MDAgKGNpby1kYXM4MDApLAorICBDSU8tREFTODAxIChjaW8tZGFzODAxKSwgQ0lPLURBUzgwMiAoY2lvLWRhczgwMiksCisgIENJTy1EQVM4MDIvMTYgKGNpby1kYXM4MDIvMTYpCitTdGF0dXM6IHdvcmtzLCBjaW8tZGFzODAyLzE2IHVudGVzdGVkIC0gZW1haWwgbWUgaWYgeW91IGhhdmUgdGVzdGVkIGl0CisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUSAob3B0aW9uYWwsIHJlcXVpcmVkIGZvciB0aW1lZCBvciBleHRlcm5hbGx5IHRyaWdnZXJlZCBjb252ZXJzaW9ucykKKworTm90ZXM6CisJSVJRIGNhbiBiZSBvbWl0dGVkLCBhbHRob3VnaCB0aGUgY21kIGludGVyZmFjZSB3aWxsIG5vdCB3b3JrIHdpdGhvdXQgaXQuCisKKwlBbGwgZW50cmllcyBpbiB0aGUgY2hhbm5lbC9nYWluIGxpc3QgbXVzdCB1c2UgdGhlIHNhbWUgZ2FpbiBhbmQgYmUKKwljb25zZWN1dGl2ZSBjaGFubmVscyBjb3VudGluZyB1cHdhcmRzIGluIGNoYW5uZWwgbnVtYmVyICh0aGVzZSBhcmUKKwloYXJkd2FyZSBsaW1pdGF0aW9ucy4pCisKKwlJJ3ZlIG5ldmVyIHRlc3RlZCB0aGUgZ2FpbiBzZXR0aW5nIHN0dWZmIHNpbmNlIEkgb25seSBoYXZlIGEKKwlEQVMtODAwIGJvYXJkIHdpdGggZml4ZWQgZ2Fpbi4KKworCVRoZSBjaW8tZGFzODAyLzE2IGRvZXMgbm90IGhhdmUgYSBmaWZvLWVtcHR5IHN0YXR1cyBiaXQhICBUaGVyZWZvcmUKKwlvbmx5IGZpZm8taGFsZi1mdWxsIHRyYW5zZmVycyBhcmUgcG9zc2libGUgd2l0aCB0aGlzIGNhcmQuCisqLworLyoKKworY21kIHRyaWdnZXJzIHN1cHBvcnRlZDoKKwlzdGFydF9zcmM6ICAgICAgVFJJR19OT1cgfCBUUklHX0VYVAorCXNjYW5fYmVnaW5fc3JjOiBUUklHX0ZPTExPVworCXNjYW5fZW5kX3NyYzogICBUUklHX0NPVU5UCisJY29udmVydF9zcmM6ICAgIFRSSUdfVElNRVIgfCBUUklHX0VYVAorCXN0b3Bfc3JjOiAgICAgICBUUklHX05PTkUgfCBUUklHX0NPVU5UCisKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworI2RlZmluZSBEQVM4MDBfU0laRSAgICAgICAgICAgOAorI2RlZmluZSBUSU1FUl9CQVNFICAgICAgICAgICAgMTAwMAorI2RlZmluZSBOX0NIQU5fQUkgICAgICAgICAgICAgOAkvLyBudW1iZXIgb2YgYW5hbG9nIGlucHV0IGNoYW5uZWxzCisKKy8qIFJlZ2lzdGVycyBmb3IgdGhlIGRhczgwMCAqLworCisjZGVmaW5lIERBUzgwMF9MU0IgICAgICAgICAgICAwCisjZGVmaW5lICAgRklGT19FTVBUWSAgICAgICAgICAgIDB4MQorI2RlZmluZSAgIEZJRk9fT1ZGICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgREFTODAwX01TQiAgICAgICAgICAgIDEKKyNkZWZpbmUgREFTODAwX0NPTlRST0wxICAgICAgIDIKKyNkZWZpbmUgICBDT05UUk9MMV9JTlRFICAgICAgICAgMHg4CisjZGVmaW5lIERBUzgwMF9DT05WX0NPTlRST0wgICAyCisjZGVmaW5lICAgSVRFICAgICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSAgIENBU0MgICAgICAgICAgICAgICAgICAweDIKKyNkZWZpbmUgICBEVEVOICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lICAgSUVPQyAgICAgICAgICAgICAgICAgIDB4OAorI2RlZmluZSAgIEVBQ1MgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lICAgQ09OVl9IQ0VOICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgREFTODAwX1NDQU5fTElNSVRTICAgIDIKKyNkZWZpbmUgREFTODAwX1NUQVRVUyAgICAgICAgIDIKKyNkZWZpbmUgICBJUlEgICAgICAgICAgICAgICAgICAgMHg4CisjZGVmaW5lICAgQlVTWSAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgREFTODAwX0dBSU4gICAgICAgICAgIDMKKyNkZWZpbmUgICBDSU9fRkZPViAgICAgICAgICAgICAgMHg4CS8vIGZpZm8gb3ZlcmZsb3cgZm9yIGNpby1kYXM4MDIvMTYKKyNkZWZpbmUgICBDSU9fRU5IRiAgICAgICAgICAgICAgMHg5MAkvLyBpbnRlcnJ1cHQgZmlmbyBoYWxmIGZ1bGwgZm9yIGNpby1kYXM4MDIvMTYKKyNkZWZpbmUgICBDT05UUk9MMSAgICAgICAgICAgICAgMHg4MAorI2RlZmluZSAgIENPTlZfQ09OVFJPTCAgICAgICAgICAweGEwCisjZGVmaW5lICAgU0NBTl9MSU1JVFMgICAgICAgICAgIDB4YzAKKyNkZWZpbmUgICBJRCAgICAgICAgICAgICAgICAgICAgMHhlMAorI2RlZmluZSBEQVM4MDBfODI1NCAgICAgICAgICAgNAorI2RlZmluZSBEQVM4MDBfU1RBVFVTMiAgICAgICAgNworI2RlZmluZSAgIFNUQVRVUzJfSENFTiAgICAgICAgICAweDgwCisjZGVmaW5lICAgU1RBVFVTMl9JTlRFICAgICAgICAgIDBYMjAKKyNkZWZpbmUgREFTODAwX0lEICAgICAgICAgICAgIDcKKworc3RydWN0IGRhczgwMF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYWlfc3BlZWQ7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFpX3JhbmdlOworCWludCByZXNvbHV0aW9uOworfTsKKworLy9hbmFsb2cgaW5wdXQgcmFuZ2VzCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzODAwX2FpID0geworCTEsCisJeworCQkJUkFOR0UoLTUsIDUpLAorCQl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFzODAxX2FpID0geworCTksCisJeworCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgtMC41LCAwLjUpLAorCQkJUkFOR0UoMCwgMSksCisJCQlSQU5HRSgtMC4wNSwgMC4wNSksCisJCQlSQU5HRSgwLCAwLjEpLAorCQkJUkFOR0UoLTAuMDEsIDAuMDEpLAorCQkJUkFOR0UoMCwgMC4wMiksCisJCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9jaW9fZGFzODAxX2FpID0geworCTksCisJeworCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgtMC41LCAwLjUpLAorCQkJUkFOR0UoMCwgMSksCisJCQlSQU5HRSgtMC4wNSwgMC4wNSksCisJCQlSQU5HRSgwLCAwLjEpLAorCQkJUkFOR0UoLTAuMDA1LCAwLjAwNSksCisJCQlSQU5HRSgwLCAwLjAxKSwKKwkJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2RhczgwMl9haSA9IHsKKwk5LAorCXsKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKDAsIDUpLAorCQkJUkFOR0UoLTEuMjUsIDEuMjUpLAorCQkJUkFOR0UoMCwgMi41KSwKKwkJCVJBTkdFKC0wLjYyNSwgMC42MjUpLAorCQkJUkFOR0UoMCwgMS4yNSksCisJCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXM4MDIxNl9haSA9IHsKKwk4LAorCXsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgtMi41LCAyLjUpLAorCQkJUkFOR0UoMCwgMi41KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KSwKKwkJCVJBTkdFKDAsIDEuMjUpLAorCQl9Cit9OworCitlbnVtIHsgZGFzODAwLCBjaW9kYXM4MDAsIGRhczgwMSwgY2lvZGFzODAxLCBkYXM4MDIsIGNpb2RhczgwMiwgY2lvZGFzODAyMTYgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkYXM4MDBfYm9hcmQgZGFzODAwX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkiZGFzLTgwMCIsCisJICAgICAgYWlfc3BlZWQ6MjUwMDAsCisJICAgICAgYWlfcmFuZ2U6JnJhbmdlX2RhczgwMF9haSwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczgwMCIsCisJICAgICAgYWlfc3BlZWQ6MjAwMDAsCisJICAgICAgYWlfcmFuZ2U6JnJhbmdlX2RhczgwMF9haSwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiZGFzLTgwMSIsCisJICAgICAgYWlfc3BlZWQ6MjUwMDAsCisJICAgICAgYWlfcmFuZ2U6JnJhbmdlX2RhczgwMV9haSwKKwkgICAgICByZXNvbHV0aW9uOjEyLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiY2lvLWRhczgwMSIsCisJICAgICAgYWlfc3BlZWQ6MjAwMDAsCisJICAgICAgYWlfcmFuZ2U6JnJhbmdlX2Npb19kYXM4MDFfYWksCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImRhcy04MDIiLAorCSAgICAgIGFpX3NwZWVkOjI1MDAwLAorCSAgICAgIGFpX3JhbmdlOiZyYW5nZV9kYXM4MDJfYWksCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXM4MDIiLAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIGFpX3JhbmdlOiZyYW5nZV9kYXM4MDJfYWksCisJICAgICAgcmVzb2x1dGlvbjoxMiwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImNpby1kYXM4MDIvMTYiLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGFpX3JhbmdlOiZyYW5nZV9kYXM4MDIxNl9haSwKKwkgICAgICByZXNvbHV0aW9uOjE2LAorCQl9LAorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGFzODAwX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBkYXM4MDBfcHJpdmF0ZSB7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IGNvdW50OwkvKiBudW1iZXIgb2YgZGF0YSBwb2ludHMgbGVmdCB0byBiZSB0YWtlbiAqLworCXZvbGF0aWxlIGludCBmb3JldmVyOwkvKiBmbGFnIGluZGljYXRpbmcgd2hldGhlciB3ZSBzaG91bGQgdGFrZSBkYXRhIGZvcmV2ZXIgKi8KKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjE7CS8qIHZhbHVlIHRvIGxvYWQgaW50byBib2FyZCdzIGNvdW50ZXIgMSBmb3IgdGltZWQgY29udmVyc2lvbnMgKi8KKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjI7CS8qIHZhbHVlIHRvIGxvYWQgaW50byBib2FyZCdzIGNvdW50ZXIgMiBmb3IgdGltZWQgY29udmVyc2lvbnMgKi8KKwl2b2xhdGlsZSBpbnQgZG9fYml0czsJLyogZGlnaXRhbCBvdXRwdXQgYml0cyAqLworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRhczgwMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGRhczgwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkYXM4MDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgZGFzODAwX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kYXM4MDAgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZGFzODAwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkYXM4MDBfYXR0YWNoLAorICAgICAgZGV0YWNoOmRhczgwMF9kZXRhY2gsCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGRhczgwMF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBkYXM4MDBfYm9hcmQpLAorICAgICAgYm9hcmRfbmFtZTomZGFzODAwX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgZGFzODAwX2JvYXJkKSwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkYXM4MDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIHZvaWQgZW5hYmxlX2RhczgwMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBkaXNhYmxlX2RhczgwMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IGRhczgwMF9haV9kb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBkYXM4MDBfYWlfZG9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBkYXM4MDBfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZGFzODAwX2RpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRhczgwMF9kb193Yml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkYXM4MDBfcHJvYmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBkYXM4MDBfc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKKy8qIGNoZWNrcyBhbmQgcHJvYmVzIGRhcy04MDAgc2VyaWVzIGJvYXJkIHR5cGUgKi8KK3N0YXRpYyBpbnQgZGFzODAwX3Byb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpZF9iaXRzOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWludCBib2FyZDsKKworCS8vICdjb21lZGkgc3BpbiBsb2NrIGlycXNhdmUnIGRpc2FibGVzIGV2ZW4gcnQgaW50ZXJydXB0cywgd2UgdXNlIHRoZW0gdG8gcHJvdGVjdCBpbmRpcmVjdCBhZGRyZXNzaW5nCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoSUQsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgYmFzZSBhZGRyZXNzICsgNyB0byBiZSBJRCByZWdpc3RlciAqLworCWlkX2JpdHMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfSUQpICYgMHgzOwkvKiBnZXQgaWQgYml0cyAqLworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCisJYm9hcmQgPSB0aGlzYm9hcmQgLSBkYXM4MDBfYm9hcmRzOworCisJc3dpdGNoIChpZF9iaXRzKSB7CisJY2FzZSAweDA6CisJCWlmIChib2FyZCA9PSBkYXM4MDApIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiBEQVMtODAwXG4iKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlpZiAoYm9hcmQgPT0gY2lvZGFzODAwKSB7CisJCQlwcmludGsoIiBCb2FyZCBtb2RlbDogQ0lPLURBUzgwMFxuIik7CisJCQlyZXR1cm4gYm9hcmQ7CisJCX0KKwkJcHJpbnRrKCIgQm9hcmQgbW9kZWwgKHByb2JlZCk6IERBUy04MDBcbiIpOworCQlyZXR1cm4gZGFzODAwOworCQlicmVhazsKKwljYXNlIDB4MjoKKwkJaWYgKGJvYXJkID09IGRhczgwMSkgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6IERBUy04MDFcbiIpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCWlmIChib2FyZCA9PSBjaW9kYXM4MDEpIHsKKwkJCXByaW50aygiIEJvYXJkIG1vZGVsOiBDSU8tREFTODAxXG4iKTsKKwkJCXJldHVybiBib2FyZDsKKwkJfQorCQlwcmludGsoIiBCb2FyZCBtb2RlbCAocHJvYmVkKTogREFTLTgwMVxuIik7CisJCXJldHVybiBkYXM4MDE7CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQlpZiAoYm9hcmQgPT0gZGFzODAyKSB7CisJCQlwcmludGsoIiBCb2FyZCBtb2RlbDogREFTLTgwMlxuIik7CisJCQlyZXR1cm4gYm9hcmQ7CisJCX0KKwkJaWYgKGJvYXJkID09IGNpb2RhczgwMikgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6IENJTy1EQVM4MDJcbiIpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCWlmIChib2FyZCA9PSBjaW9kYXM4MDIxNikgeworCQkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6IENJTy1EQVM4MDIvMTZcbiIpOworCQkJcmV0dXJuIGJvYXJkOworCQl9CisJCXByaW50aygiIEJvYXJkIG1vZGVsIChwcm9iZWQpOiBEQVMtODAyXG4iKTsKKwkJcmV0dXJuIGRhczgwMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCIgQm9hcmQgbW9kZWw6IHByb2JlIHJldHVybmVkIDB4JXggKHVua25vd24pXG4iLAorCQkJaWRfYml0cyk7CisJCXJldHVybiBib2FyZDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAtMTsKK30KKworLyoKKyAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqLworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kYXM4MDApOworCisvKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZGFzODAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXNob3J0IGk7CQkvKiBsb29wIGluZGV4ICovCisJc2hvcnQgZGF0YVBvaW50ID0gMDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXN0YXRpYyBjb25zdCBpbnQgbWF4X2xvb3BzID0gMTI4OwkvLyBoYWxmLWZpZm8gc2l6ZSBmb3IgY2lvLWRhczgwMi8xNgorCS8vIGZsYWdzCisJaW50IGZpZm9fZW1wdHkgPSAwOworCWludCBmaWZvX292ZXJmbG93ID0gMDsKKworCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERBUzgwMF9TVEFUVVMpOworCS8qIGlmIGludGVycnVwdCB3YXMgbm90IGdlbmVyYXRlZCBieSBib2FyZCBvciBkcml2ZXIgbm90IGF0dGFjaGVkLCBxdWl0ICovCisJaWYgKCEoc3RhdHVzICYgSVJRKSkKKwkJcmV0dXJuIElSUV9OT05FOworCWlmICghKGRldi0+YXR0YWNoZWQpKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwkvKiB3YWl0IHVudGlsIGhlcmUgdG8gaW5pdGlhbGl6ZSBhc3luYywgc2luY2Ugd2Ugd2lsbCBnZXQgbnVsbCBkZXJlZmVyZW5jZQorCSAqIGlmIGludGVycnVwdCBvY2N1cnMgYmVmb3JlIGRyaXZlciBpcyBmdWxseSBhdHRhY2hlZCEKKwkgKi8KKwlhc3luYyA9IHMtPmFzeW5jOworCisJLy8gaWYgaGFyZHdhcmUgY29udmVyc2lvbnMgYXJlIG5vdCBlbmFibGVkLCB0aGVuIHF1aXQKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJb3V0YihDT05UUk9MMSwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTik7CS8qIHNlbGVjdCBiYXNlIGFkZHJlc3MgKyA3IHRvIGJlIFNUQVRVUzIgcmVnaXN0ZXIgKi8KKwlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfU1RBVFVTMikgJiBTVEFUVVMyX0hDRU47CisJLyogZG9uJ3QgcmVsZWFzZSBzcGlubG9jayB5ZXQgc2luY2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgbm9vbmUgZWxzZSBkaXNhYmxlcyBoYXJkd2FyZSBjb252ZXJzaW9ucyAqLworCWlmIChzdGF0dXMgPT0gMCkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCS8qIGxvb3Agd2hpbGUgY2FyZCdzIGZpZm8gaXMgbm90IGVtcHR5IChhbmQgbGltaXQgdG8gaGFsZiBmaWZvIGZvciBjaW8tZGFzODAyLzE2KSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfbG9vcHM7IGkrKykgeworCQkvKiByZWFkIDE2IGJpdHMgZnJvbSBkZXYtPmlvYmFzZSBhbmQgZGV2LT5pb2Jhc2UgKyAxICovCisJCWRhdGFQb2ludCA9IGluYihkZXYtPmlvYmFzZSArIERBUzgwMF9MU0IpOworCQlkYXRhUG9pbnQgKz0gaW5iKGRldi0+aW9iYXNlICsgREFTODAwX01TQikgPDwgODsKKwkJaWYgKHRoaXNib2FyZC0+cmVzb2x1dGlvbiA9PSAxMikgeworCQkJZmlmb19lbXB0eSA9IGRhdGFQb2ludCAmIEZJRk9fRU1QVFk7CisJCQlmaWZvX292ZXJmbG93ID0gZGF0YVBvaW50ICYgRklGT19PVkY7CisJCQlpZiAoZmlmb19vdmVyZmxvdykKKwkJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWZpZm9fZW1wdHkgPSAwOwkvLyBjaW8tZGFzODAyLzE2IGhhcyBubyBmaWZvIGVtcHR5IHN0YXR1cyBiaXQKKwkJfQorCQlpZiAoZmlmb19lbXB0eSkgeworCQkJYnJlYWs7CisJCX0KKwkJLyogc3RyaXAgb2ZmIGV4dHJhbmVvdXMgYml0cyBmb3IgMTIgYml0IGNhcmRzICovCisJCWlmICh0aGlzYm9hcmQtPnJlc29sdXRpb24gPT0gMTIpCisJCQlkYXRhUG9pbnQgPSAoZGF0YVBvaW50ID4+IDQpICYgMHhmZmY7CisJCS8qIGlmIHRoZXJlIGFyZSBtb3JlIGRhdGEgcG9pbnRzIHRvIGNvbGxlY3QgKi8KKwkJaWYgKGRldnByaXYtPmNvdW50ID4gMCB8fCBkZXZwcml2LT5mb3JldmVyID09IDEpIHsKKwkJCS8qIHdyaXRlIGRhdGEgcG9pbnQgdG8gYnVmZmVyICovCisJCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIGRhdGFQb2ludCk7CisJCQlpZiAoZGV2cHJpdi0+Y291bnQgPiAwKQorCQkJCWRldnByaXYtPmNvdW50LS07CisJCX0KKwl9CisJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CisJLyogY2hlY2sgZm9yIGZpZm8gb3ZlcmZsb3cgKi8KKwlpZiAodGhpc2JvYXJkLT5yZXNvbHV0aW9uID09IDEyKSB7CisJCWZpZm9fb3ZlcmZsb3cgPSBkYXRhUG9pbnQgJiBGSUZPX09WRjsKKwkJLy8gZWxzZSBjaW8tZGFzODAyLzE2CisJfSBlbHNlIHsKKwkJZmlmb19vdmVyZmxvdyA9IGluYihkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKSAmIENJT19GRk9WOworCX0KKwlpZiAoZmlmb19vdmVyZmxvdykgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwkJY29tZWRpX2Vycm9yKGRldiwgIkRBUzgwMCBGSUZPIG92ZXJmbG93Iik7CisJCWRhczgwMF9jYW5jZWwoZGV2LCBkZXYtPnN1YmRldmljZXMgKyAwKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJYXN5bmMtPmV2ZW50cyA9IDA7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJaWYgKGRldnByaXYtPmNvdW50ID4gMCB8fCBkZXZwcml2LT5mb3JldmVyID09IDEpIHsKKwkJLyogUmUtZW5hYmxlIGNhcmQncyBpbnRlcnJ1cHQuCisJCSAqIFdlIGFscmVhZHkgaGF2ZSBzcGlubG9jaywgc28gaW5kaXJlY3QgYWRkcmVzc2luZyBpcyBzYWZlICovCisJCW91dGIoQ09OVFJPTDEsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnRyb2wgcmVnaXN0ZXIgMSAqLworCQlvdXRiKENPTlRST0wxX0lOVEUgfCBkZXZwcml2LT5kb19iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBEQVM4MDBfQ09OVFJPTDEpOworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwkJLyogb3RoZXJ3aXNlLCBzdG9wIHRha2luZyBkYXRhICovCisJfSBlbHNlIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJCWRpc2FibGVfZGFzODAwKGRldik7CS8qIGRpYWJsZSBoYXJkd2FyZSB0cmlnZ2VyZWQgY29udmVyc2lvbnMgKi8KKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlhc3luYy0+ZXZlbnRzID0gMDsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgZGFzODAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXVuc2lnbmVkIGludCBpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlpbnQgYm9hcmQ7CisKKwlwcmludGsoImNvbWVkaSVkOiBkYXM4MDA6IGlvIDB4JWx4IiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoaXJxKSB7CisJCXByaW50aygiLCBpcnEgJXUiLCBpcnEpOworCX0KKwlwcmludGsoIlxuIik7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkZXYtPnByaXZhdGUgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZGFzODAwX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGlvYmFzZSA9PSAwKSB7CisJCXByaW50aygiaW8gYmFzZSBhZGRyZXNzIHJlcXVpcmVkIGZvciBkYXM4MDBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjaGVjayBpZiBpbyBhZGRyZXNzZXMgYXJlIGF2YWlsYWJsZSAqLworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBEQVM4MDBfU0laRSwgImRhczgwMCIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlib2FyZCA9IGRhczgwMF9wcm9iZShkZXYpOworCWlmIChib2FyZCA8IDApIHsKKwkJcHJpbnRrKCJ1bmFibGUgdG8gZGV0ZXJtaW5lIGJvYXJkIHR5cGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGV2LT5ib2FyZF9wdHIgPSBkYXM4MDBfYm9hcmRzICsgYm9hcmQ7CisKKwkvKiBncmFiIG91ciBJUlEgKi8KKwlpZiAoaXJxID09IDEgfHwgaXJxID4gNykgeworCQlwcmludGsoImlycSBvdXQgb2YgcmFuZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGlycSkgeworCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgZGFzODAwX2ludGVycnVwdCwgMCwgImRhczgwMCIsIGRldikpIHsKKwkJCXByaW50aygidW5hYmxlIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgaXJxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCWRldi0+aXJxID0gaXJxOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAzKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDg7CisJcy0+bGVuX2NoYW5saXN0ID0gODsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5yZXNvbHV0aW9uKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPmFpX3JhbmdlOworCXMtPmRvX2NtZCA9IGRhczgwMF9haV9kb19jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IGRhczgwMF9haV9kb19jbWR0ZXN0OworCXMtPmluc25fcmVhZCA9IGRhczgwMF9haV9yaW5zbjsKKwlzLT5jYW5jZWwgPSBkYXM4MDBfY2FuY2VsOworCisJLyogZGkgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBkYXM4MDBfZGlfcmJpdHM7CisKKwkvKiBkbyAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gNDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGRhczgwMF9kb193Yml0czsKKworCWRpc2FibGVfZGFzODAwKGRldik7CisKKwkvKiBpbml0aWFsaXplIGRpZ2l0YWwgb3V0IGNoYW5uZWxzICovCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoQ09OVFJPTDEsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnRyb2wgcmVnaXN0ZXIgMSAqLworCW91dGIoQ09OVFJPTDFfSU5URSB8IGRldnByaXYtPmRvX2JpdHMsIGRldi0+aW9iYXNlICsgREFTODAwX0NPTlRST0wxKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCXJldHVybiAwOworfTsKKworc3RhdGljIGludCBkYXM4MDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGRhczgwMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCS8qIG9ubHkgZnJlZSBzdHVmZiBpZiBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCAqLworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIERBUzgwMF9TSVpFKTsKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgZGFzODAwX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWRldnByaXYtPmZvcmV2ZXIgPSAwOworCWRldnByaXYtPmNvdW50ID0gMDsKKwlkaXNhYmxlX2RhczgwMChkZXYpOworCXJldHVybiAwOworfQorCisvKiBlbmFibGVfZGFzODAwIG1ha2VzIHRoZSBjYXJkIHN0YXJ0IHRha2luZyBoYXJkd2FyZSB0cmlnZ2VyZWQgY29udmVyc2lvbnMgKi8KK3N0YXRpYyB2b2lkIGVuYWJsZV9kYXM4MDAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCS8vIGVuYWJsZSBmaWZvLWhhbGYgZnVsbCBpbnRlcnJ1cHRzIGZvciBjaW8tZGFzODAyLzE2CisJaWYgKHRoaXNib2FyZC0+cmVzb2x1dGlvbiA9PSAxNikKKwkJb3V0YihDSU9fRU5IRiwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTik7CisJb3V0YihDT05WX0NPTlRST0wsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnZlcnNpb24gY29udHJvbCByZWdpc3RlciAqLworCW91dGIoQ09OVl9IQ0VOLCBkZXYtPmlvYmFzZSArIERBUzgwMF9DT05WX0NPTlRST0wpOwkvKiBlbmFibGUgaGFyZHdhcmUgdHJpZ2dlcmluZyAqLworCW91dGIoQ09OVFJPTDEsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnRyb2wgcmVnaXN0ZXIgMSAqLworCW91dGIoQ09OVFJPTDFfSU5URSB8IGRldnByaXYtPmRvX2JpdHMsIGRldi0+aW9iYXNlICsgREFTODAwX0NPTlRST0wxKTsJLyogZW5hYmxlIGNhcmQncyBpbnRlcnJ1cHQgKi8KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKK30KKworLyogZGlzYWJsZV9kYXM4MDAgc3RvcHMgaGFyZHdhcmUgdHJpZ2dlcmVkIGNvbnZlcnNpb25zICovCitzdGF0aWMgdm9pZCBkaXNhYmxlX2RhczgwMChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJb3V0YihDT05WX0NPTlRST0wsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnZlcnNpb24gY29udHJvbCByZWdpc3RlciAqLworCW91dGIoMHgwLCBkZXYtPmlvYmFzZSArIERBUzgwMF9DT05WX0NPTlRST0wpOwkvKiBkaXNhYmxlIGhhcmR3YXJlIHRyaWdnZXJpbmcgb2YgY29udmVyc2lvbnMgKi8KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKK30KKworc3RhdGljIGludCBkYXM4MDBfYWlfZG9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisJaW50IGdhaW4sIHN0YXJ0Q2hhbjsKKwlpbnQgaTsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc2JvYXJkLT5haV9zcGVlZCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNib2FyZC0+YWlfc3BlZWQ7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoIWNtZC0+c3RvcF9hcmcpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJLyogY2FsY3VsYXRlIGNvdW50ZXIgdmFsdWVzIHRoYXQgZ2l2ZSBkZXNpcmVkIHRpbWluZyAqLworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwgJihkZXZwcml2LT5kaXZpc29yMSksCisJCQkmKGRldnByaXYtPmRpdmlzb3IyKSwgJihjbWQtPmNvbnZlcnRfYXJnKSwKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8vIGNoZWNrIGNoYW5uZWwvZ2FpbiBsaXN0IGFnYWluc3QgY2FyZCdzIGxpbWl0YXRpb25zCisJaWYgKGNtZC0+Y2hhbmxpc3QpIHsKKwkJZ2FpbiA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlzdGFydENoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0KKwkJCQkoc3RhcnRDaGFuICsgaSkgJSBOX0NIQU5fQUkpIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGJlIGNvbnNlY3V0aXZlIGNoYW5uZWxzLCBjb3VudGluZyB1cHdhcmRzXG4iKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAhPSBnYWluKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBnYWluXG4iKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzODAwX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBzdGFydENoYW4sIGVuZENoYW4sIHNjYW4sIGdhaW47CisJaW50IGNvbnZfYml0czsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCisJaWYgKCFkZXYtPmlycSkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIm5vIGlycSBhc3NpZ25lZCBmb3IgZGFzLTgwMCwgY2Fubm90IGRvIGhhcmR3YXJlIGNvbnZlcnNpb25zIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlkaXNhYmxlX2RhczgwMChkZXYpOworCisJLyogc2V0IGNoYW5uZWwgc2NhbiBsaW1pdHMgKi8KKwlzdGFydENoYW4gPSBDUl9DSEFOKGFzeW5jLT5jbWQuY2hhbmxpc3RbMF0pOworCWVuZENoYW4gPSAoc3RhcnRDaGFuICsgYXN5bmMtPmNtZC5jaGFubGlzdF9sZW4gLSAxKSAlIDg7CisJc2NhbiA9IChlbmRDaGFuIDw8IDMpIHwgc3RhcnRDaGFuOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoU0NBTl9MSU1JVFMsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgYmFzZSBhZGRyZXNzICsgMiB0byBiZSBzY2FuIGxpbWl0cyByZWdpc3RlciAqLworCW91dGIoc2NhbiwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfU0NBTl9MSU1JVFMpOwkvKiBzZXQgc2NhbiBsaW1pdHMgKi8KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCS8qIHNldCBnYWluICovCisJZ2FpbiA9IENSX1JBTkdFKGFzeW5jLT5jbWQuY2hhbmxpc3RbMF0pOworCWlmICh0aGlzYm9hcmQtPnJlc29sdXRpb24gPT0gMTIgJiYgZ2FpbiA+IDApCisJCWdhaW4gKz0gMHg3OworCWdhaW4gJj0gMHhmOworCW91dGIoZ2FpbiwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTik7CisKKwlzd2l0Y2ggKGFzeW5jLT5jbWQuc3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCWRldnByaXYtPmNvdW50ID0gYXN5bmMtPmNtZC5zdG9wX2FyZyAqIGFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOworCQlkZXZwcml2LT5mb3JldmVyID0gMDsKKwkJYnJlYWs7CisJY2FzZSBUUklHX05PTkU6CisJCWRldnByaXYtPmZvcmV2ZXIgPSAxOworCQlkZXZwcml2LT5jb3VudCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qIGVuYWJsZSBhdXRvIGNoYW5uZWwgc2Nhbiwgc2VuZCBpbnRlcnJ1cHRzIG9uIGVuZCBvZiBjb252ZXJzaW9uCisJICogYW5kIHNldCBjbG9jayBzb3VyY2UgdG8gaW50ZXJuYWwgb3IgZXh0ZXJuYWwKKwkgKi8KKwljb252X2JpdHMgPSAwOworCWNvbnZfYml0cyB8PSBFQUNTIHwgSUVPQzsKKwlpZiAoYXN5bmMtPmNtZC5zdGFydF9zcmMgPT0gVFJJR19FWFQpCisJCWNvbnZfYml0cyB8PSBEVEVOOworCXN3aXRjaCAoYXN5bmMtPmNtZC5jb252ZXJ0X3NyYykgeworCWNhc2UgVFJJR19USU1FUjoKKwkJY29udl9iaXRzIHw9IENBU0MgfCBJVEU7CisJCS8qIHNldCBjb252ZXJzaW9uIGZyZXF1ZW5jeSAqLworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwgJihkZXZwcml2LT5kaXZpc29yMSksCisJCQkmKGRldnByaXYtPmRpdmlzb3IyKSwgJihhc3luYy0+Y21kLmNvbnZlcnRfYXJnKSwKKwkJCWFzeW5jLT5jbWQuZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAoZGFzODAwX3NldF9mcmVxdWVuY3koZGV2KSA8IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJFcnJvciBzZXR0aW5nIHVwIGNvdW50ZXJzIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUUklHX0VYVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoQ09OVl9DT05UUk9MLCBkZXYtPmlvYmFzZSArIERBUzgwMF9HQUlOKTsJLyogc2VsZWN0IGRldi0+aW9iYXNlICsgMiB0byBiZSBjb252ZXJzaW9uIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlvdXRiKGNvbnZfYml0cywgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfQ09OVl9DT05UUk9MKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKwlhc3luYy0+ZXZlbnRzID0gMDsKKwllbmFibGVfZGFzODAwKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFzODAwX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgbjsKKwlpbnQgY2hhbjsKKwlpbnQgcmFuZ2U7CisJaW50IGxzYiwgbXNiOworCWludCB0aW1lb3V0ID0gMTAwMDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKworCWRpc2FibGVfZGFzODAwKGRldik7CS8qIGRpc2FibGUgaGFyZHdhcmUgY29udmVyc2lvbnMgKGVuYWJsZXMgc29mdHdhcmUgY29udmVyc2lvbnMpICovCisKKwkvKiBzZXQgbXVsdGlwbGV4ZXIgKi8KKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGlycV9mbGFncyk7CisJb3V0YihDT05UUk9MMSwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTik7CS8qIHNlbGVjdCBkZXYtPmlvYmFzZSArIDIgdG8gYmUgY29udHJvbCByZWdpc3RlciAxICovCisJb3V0YihjaGFuIHwgZGV2cHJpdi0+ZG9fYml0cywgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfQ09OVFJPTDEpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCisJLyogc2V0IGdhaW4gLyByYW5nZSAqLworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCWlmICh0aGlzYm9hcmQtPnJlc29sdXRpb24gPT0gMTIgJiYgcmFuZ2UpCisJCXJhbmdlICs9IDB4NzsKKwlyYW5nZSAmPSAweGY7CisJb3V0YihyYW5nZSwgZGV2LT5pb2Jhc2UgKyBEQVM4MDBfR0FJTik7CisKKwljb21lZGlfdWRlbGF5KDUpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQkvKiB0cmlnZ2VyIGNvbnZlcnNpb24gKi8KKwkJb3V0Yl9wKDAsIGRldi0+aW9iYXNlICsgREFTODAwX01TQik7CisKKwkJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQkJaWYgKCEoaW5iKGRldi0+aW9iYXNlICsgREFTODAwX1NUQVRVUykgJiBCVVNZKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAidGltZW91dCIpOworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCQlsc2IgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfTFNCKTsKKwkJbXNiID0gaW5iKGRldi0+aW9iYXNlICsgREFTODAwX01TQik7CisJCWlmICh0aGlzYm9hcmQtPnJlc29sdXRpb24gPT0gMTIpIHsKKwkJCWRhdGFbbl0gPSAobHNiID4+IDQpICYgMHhmZjsKKwkJCWRhdGFbbl0gfD0gKG1zYiA8PCA0KTsKKwkJfSBlbHNlIHsKKwkJCWRhdGFbbl0gPSAobXNiIDw8IDgpIHwgbHNiOworCQl9CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgZGFzODAwX2RpX3JiaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0czsKKworCWJpdHMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfU1RBVFVTKSA+PiA0OworCWJpdHMgJj0gMHg3OworCWRhdGFbMV0gPSBiaXRzOworCWRhdGFbMF0gPSAwOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZGFzODAwX2RvX3diaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgd2JpdHM7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwkvLyBvbmx5IHNldCBiaXRzIHRoYXQgaGF2ZSBiZWVuIG1hc2tlZAorCWRhdGFbMF0gJj0gMHhmOworCXdiaXRzID0gZGV2cHJpdi0+ZG9fYml0cyA+PiA0OworCXdiaXRzICY9IH5kYXRhWzBdOworCXdiaXRzIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCWRldnByaXYtPmRvX2JpdHMgPSB3Yml0cyA8PCA0OworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBpcnFfZmxhZ3MpOworCW91dGIoQ09OVFJPTDEsIGRldi0+aW9iYXNlICsgREFTODAwX0dBSU4pOwkvKiBzZWxlY3QgZGV2LT5pb2Jhc2UgKyAyIHRvIGJlIGNvbnRyb2wgcmVnaXN0ZXIgMSAqLworCW91dGIoZGV2cHJpdi0+ZG9fYml0cyB8IENPTlRST0wxX0lOVEUsIGRldi0+aW9iYXNlICsgREFTODAwX0NPTlRST0wxKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgaXJxX2ZsYWdzKTsKKworCWRhdGFbMV0gPSB3Yml0czsKKworCXJldHVybiAyOworfQorCisvKiBsb2FkcyBjb3VudGVycyB3aXRoIGRpdmlzb3IxLCBkaXZpc29yMiBmcm9tIHByaXZhdGUgc3RydWN0dXJlICovCitzdGF0aWMgaW50IGRhczgwMF9zZXRfZnJlcXVlbmN5KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBlcnIgPSAwOworCisJaWYgKGk4MjU0X2xvYWQoZGV2LT5pb2Jhc2UgKyBEQVM4MDBfODI1NCwgMCwgMSwgZGV2cHJpdi0+ZGl2aXNvcjEsIDIpKQorCQllcnIrKzsKKwlpZiAoaTgyNTRfbG9hZChkZXYtPmlvYmFzZSArIERBUzgwMF84MjU0LCAwLCAyLCBkZXZwcml2LT5kaXZpc29yMiwgMikpCisJCWVycisrOworCWlmIChlcnIpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kbW0zMmF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5MDgzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kbW0zMmF0LmMKQEAgLTAsMCArMSwxMDgxIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYworICAgIERpYW1vbmQgU3lzdGVtcyBtbTMyYXQgY29kZSBmb3IgYSBDb21lZGkgZHJpdmVyCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBkbW0zMmF0CitEZXNjcmlwdGlvbjogRGlhbW9uZCBTeXN0ZW1zIG1tMzJhdCBkcml2ZXIuCitEZXZpY2VzOgorQXV0aG9yOiBQZXJyeSBKLiBQaXBsYW5pIDxwZXJyeS5qLnBpcGxhbmlAbmFzYS5nb3Y+CitVcGRhdGVkOiBGcmkgSnVuICA0IDA5OjEzOjI0IENEVCAyMDA0CitTdGF0dXM6IGV4cGVyaW1lbnRhbAorCitUaGlzIGRyaXZlciBpcyBmb3IgdGhlIERpYW1vbmQgU3lzdGVtcyBNTS0zMi1BVCBib2FyZAoraHR0cDovL3d3dy5kaWFtb25kc3lzdGVtcy5jb20vcHJvZHVjdHMvZGlhbW9uZG1tMzJhdCBJdCBpcyBiZWluZyB1c2VkCitvbiBzZXJ2ZXJhbCBwcm9qZWN0cyBpbnNpZGUgTkFTQSwgd2l0aG91dCBwcm9ibGVtcyBzbyBmYXIuIEZvciBhbmFsb2cKK2lucHV0IGNvbW1hbmRzLCBUUklHX0VYVCBpcyBub3QgeWV0IHN1cHBvcnRlZCBhdCBhbGwuLgorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIGNvbWVkaV9jb25maWcgL2Rldi9jb21lZGkwIGRtbTMyYXQgYmFzZWFkZHIsaXJxCisqLworCisvKgorICogVGhlIHByZXZpb3VzIGJsb2NrIGNvbW1lbnQgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlCisgKiBkb2N1bWVudGF0aW9uIGluIENvbWVkaSBhbmQgQ29tZWRpbGliLiAgVGhlIGZpZWxkczoKKyAqCisgKiBEcml2ZXI6IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIKKyAqIERlc2NyaXB0aW9uOiBhIHNob3J0IHBocmFzZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIuICBEb24ndCBsaXN0IGJvYXJkcy4KKyAqIERldmljZXM6IGEgZnVsbCBsaXN0IG9mIHRoZSBib2FyZHMgdGhhdCBhdHRlbXB0IHRvIGJlIHN1cHBvcnRlZCBieQorICogICB0aGUgZHJpdmVyLiAgRm9ybWF0IGlzICIobWFudWZhY3R1cmVyKSBib2FyZCBuYW1lIFtjb21lZGkgbmFtZV0iLAorICogICB3aGVyZSBjb21lZGlfbmFtZSBpcyB0aGUgbmFtZSB0aGF0IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBib2FyZC4KKyAqICAgU2VlIHRoZSBjb21tZW50IG5lYXIgYm9hcmRfbmFtZTogaW4gdGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZQorICogICBiZWxvdy4gIElmIChtYW51ZmFjdHVyZXIpIG9yIFtjb21lZGkgbmFtZV0gaXMgbWlzc2luZywgdGhlIHByZXZpb3VzCisgKiAgIHZhbHVlIGlzIHVzZWQuCisgKiBBdXRob3I6IHlvdQorICogVXBkYXRlZDogZGF0ZSB3aGVuIHRoZSBfZG9jdW1lbnRhdGlvbl8gd2FzIGxhc3QgdXBkYXRlZC4gIFVzZSAnZGF0ZSAtUicKKyAqICAgdG8gZ2V0IGEgdmFsdWUgZm9yIHRoaXMuCisgKiBTdGF0dXM6IGEgb25lLXdvcmQgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXR1cy4gIFZhbGlkIHZhbHVlcyBhcmU6CisgKiAgIHdvcmtzIC0gZHJpdmVyIHdvcmtzIGNvcnJlY3RseSBvbiBtb3N0IGJvYXJkcyBzdXBwb3J0ZWQsIGFuZAorICogICAgIHBhc3NlcyBjb21lZGlfdGVzdC4KKyAqICAgdW5rbm93biAtIHVua25vd24uICBVc3VhbGx5IHB1dCB0aGVyZSBieSBkcy4KKyAqICAgZXhwZXJpbWVudGFsIC0gbWF5IG5vdCB3b3JrIGluIGFueSBwYXJ0aWN1bGFyIHJlbGVhc2UuICBBdXRob3IKKyAqICAgICBwcm9iYWJseSB3YW50cyBhc3Npc3RhbmNlIHRlc3RpbmcgaXQuCisgKiAgIGJpdHJvdHRlbiAtIGRyaXZlciBoYXMgbm90IGJlZW4gdXBkYXRlIGluIGEgbG9uZyB0aW1lLCBwcm9iYWJseQorICogICAgIGRvZXNuJ3Qgd29yaywgYW5kIHByb2JhYmx5IGlzIG1pc3Npbmcgc3VwcG9ydCBmb3Igc2lnbmlmaWNhbnQKKyAqICAgICBDb21lZGkgaW50ZXJmYWNlIGZlYXR1cmVzLgorICogICB1bnRlc3RlZCAtIGF1dGhvciBwcm9iYWJseSB3cm90ZSBpdCAiYmxpbmQiLCBhbmQgaXMgYmVsaWV2ZWQgdG8KKyAqICAgICB3b3JrLCBidXQgbm8gY29uZmlybWF0aW9uLgorICoKKyAqIFRoZXNlIGhlYWRlcnMgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSwgYW5kIGFueSBjb21tZW50cworICogeW91IHdpc2ggdG8gc2F5IGFib3V0IHRoZSBkcml2ZXIuICBUaGUgY29tbWVudCBhcmVhIGlzIHRoZSBwbGFjZQorICogdG8gcHV0IGFueSBrbm93biBidWdzLCBsaW1pdGF0aW9ucywgdW5zdXBwb3J0ZWQgZmVhdHVyZXMsIHN1cHBvcnRlZAorICogY29tbWFuZCB0cmlnZ2Vycywgd2hldGhlciBvciBub3QgY29tbWFuZHMgYXJlIHN1cHBvcnRlZCBvbiBwYXJ0aWN1bGFyCisgKiBzdWJkZXZpY2VzLCBldGMuCisgKgorICogU29tZXdoZXJlIGluIHRoZSBjb21tZW50IHNob3VsZCBiZSBpbmZvcm1hdGlvbiBhYm91dCBjb25maWd1cmF0aW9uCisgKiBvcHRpb25zIHRoYXQgYXJlIHVzZWQgd2l0aCBjb21lZGlfY29uZmlnLgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworLyogQm9hcmQgcmVnaXN0ZXIgYWRkcmVzc2VzICovCisKKyNkZWZpbmUgRE1NMzJBVF9NRU1TSVpFIDB4MTAKKworI2RlZmluZSBETU0zMkFUX0NPTlYgMHgwMAorI2RlZmluZSBETU0zMkFUX0FJTFNCIDB4MDAKKyNkZWZpbmUgRE1NMzJBVF9BVVhET1VUIDB4MDEKKyNkZWZpbmUgRE1NMzJBVF9BSU1TQiAweDAxCisjZGVmaW5lIERNTTMyQVRfQUlMT1cgMHgwMgorI2RlZmluZSBETU0zMkFUX0FJSElHSCAweDAzCisKKyNkZWZpbmUgRE1NMzJBVF9EQUNMU0IgMHgwNAorI2RlZmluZSBETU0zMkFUX0RBQ1NUQVQgMHgwNAorI2RlZmluZSBETU0zMkFUX0RBQ01TQiAweDA1CisKKyNkZWZpbmUgRE1NMzJBVF9GSUZPQ05UUkwgMHgwNworI2RlZmluZSBETU0zMkFUX0ZJRk9TVEFUIDB4MDcKKworI2RlZmluZSBETU0zMkFUX0NOVFJMIDB4MDgKKyNkZWZpbmUgRE1NMzJBVF9BSVNUQVQgMHgwOAorCisjZGVmaW5lIERNTTMyQVRfSU5UQ0xPQ0sgMHgwOQorCisjZGVmaW5lIERNTTMyQVRfQ05UUkRJTyAweDBhCisKKyNkZWZpbmUgRE1NMzJBVF9BSUNPTkYgMHgwYgorI2RlZmluZSBETU0zMkFUX0FJUkJBQ0sgMHgwYgorCisjZGVmaW5lIERNTTMyQVRfQ0xLMSAweDBkCisjZGVmaW5lIERNTTMyQVRfQ0xLMiAweDBlCisjZGVmaW5lIERNTTMyQVRfQ0xLQ1QgMHgwZgorCisjZGVmaW5lIERNTTMyQVRfRElPQSAweDBjCisjZGVmaW5lIERNTTMyQVRfRElPQiAweDBkCisjZGVmaW5lIERNTTMyQVRfRElPQyAweDBlCisjZGVmaW5lIERNTTMyQVRfRElPQ09ORiAweDBmCisKKyNkZWZpbmUgZG1tX2luYihjZGV2LHJlZykgaW5iKChjZGV2LT5pb2Jhc2UpK3JlZykKKyNkZWZpbmUgZG1tX291dGIoY2RldixyZWcsdmFsdSkgb3V0Yih2YWx1LChjZGV2LT5pb2Jhc2UpK3JlZykKKworLyogQm9hcmQgcmVnaXN0ZXIgdmFsdWVzLiAqLworCisvKiBETU0zMkFUX0RBQ1NUQVQgMHgwNCAqLworI2RlZmluZSBETU0zMkFUX0RBQ0JVU1kgMHg4MAorCisvKiBETU0zMkFUX0ZJRk9DTlRSTCAweDA3ICovCisjZGVmaW5lIERNTTMyQVRfRklGT1JFU0VUIDB4MDIKKyNkZWZpbmUgRE1NMzJBVF9TQ0FORU5BQkxFIDB4MDQKKworLyogRE1NMzJBVF9DTlRSTCAweDA4ICovCisjZGVmaW5lIERNTTMyQVRfUkVTRVQgMHgyMAorI2RlZmluZSBETU0zMkFUX0lOVFJFU0VUIDB4MDgKKyNkZWZpbmUgRE1NMzJBVF9DTEtBQ0MgMHgwMAorI2RlZmluZSBETU0zMkFUX0RJT0FDQyAweDAxCisKKy8qIERNTTMyQVRfQUlTVEFUIDB4MDggKi8KKyNkZWZpbmUgRE1NMzJBVF9TVEFUVVMgMHg4MAorCisvKiBETU0zMkFUX0lOVENMT0NLIDB4MDkgKi8KKyNkZWZpbmUgRE1NMzJBVF9BRElOVCAweDgwCisjZGVmaW5lIERNTTMyQVRfQ0xLU0VMIDB4MDMKKworLyogRE1NMzJBVF9DTlRSRElPIDB4MGEgKi8KKyNkZWZpbmUgRE1NMzJBVF9GUkVRMTIgMHg4MAorCisvKiBETU0zMkFUX0FJQ09ORiAweDBiICovCisjZGVmaW5lIERNTTMyQVRfUkFOR0VfVTEwIDB4MGMKKyNkZWZpbmUgRE1NMzJBVF9SQU5HRV9VNSAweDBkCisjZGVmaW5lIERNTTMyQVRfUkFOR0VfQjEwIDB4MDgKKyNkZWZpbmUgRE1NMzJBVF9SQU5HRV9CNSAweDAwCisjZGVmaW5lIERNTTMyQVRfU0NJTlRfMjAgMHgwMAorI2RlZmluZSBETU0zMkFUX1NDSU5UXzE1IDB4MTAKKyNkZWZpbmUgRE1NMzJBVF9TQ0lOVF8xMCAweDIwCisjZGVmaW5lIERNTTMyQVRfU0NJTlRfNSAweDMwCisKKy8qIERNTTMyQVRfQ0xLQ1QgMHgwZiAqLworI2RlZmluZSBETU0zMkFUX0NMS0NUMSAweDU2CS8qIG1vZGUzIGNvdW50ZXIgMSAtIHdyaXRlIGxvdyBieXRlIG9ubHkgKi8KKyNkZWZpbmUgRE1NMzJBVF9DTEtDVDIgMHhiNgkvKiAgbW9kZTMgY291bnRlciAyIC0gd3JpdGUgaGlnaCBhbmQgbG93IGJ5dGUgKi8KKworLyogRE1NMzJBVF9ESU9DT05GIDB4MGYgKi8KKyNkZWZpbmUgRE1NMzJBVF9ESUVOQUJMRSAweDgwCisjZGVmaW5lIERNTTMyQVRfRElSQSAweDEwCisjZGVmaW5lIERNTTMyQVRfRElSQiAweDAyCisjZGVmaW5lIERNTTMyQVRfRElSQ0wgMHgwMQorI2RlZmluZSBETU0zMkFUX0RJUkNIIDB4MDgKKworLyogYm9hcmQgQUkgcmFuZ2VzIGluIGNvbWVkaSBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBkbW0zMmF0X2FpcmFuZ2VzID0geworCTQsCisJeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCX0KK307CisKKy8qIHJlZ2lzdGVyIHZhbHVlcyBmb3IgYWJvdmUgcmFuZ2VzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbW0zMmF0X3JhbmdlYml0c1tdID0geworCURNTTMyQVRfUkFOR0VfVTEwLAorCURNTTMyQVRfUkFOR0VfVTUsCisJRE1NMzJBVF9SQU5HRV9CMTAsCisJRE1NMzJBVF9SQU5HRV9CNSwKK307CisKKy8qIG9ubHkgb25lIG9mIHRoZXNlIHJhbmdlcyBpcyB2YWxpZCwgYXMgc2V0IGJ5IGEganVtcGVyIG9uIHRoZQorICogYm9hcmQuIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgb25seSB1c2UgdGhlIHJhbmdlIHNldCBieSB0aGUganVtcGVyCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBkbW0zMmF0X2FvcmFuZ2VzID0geworCTQsCisJeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCX0KK307CisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHR3byBpbWFnaW5hcnkgYm9hcmRzLiAgRGVzY3JpYmluZyB0aGUKKyAqIGJvYXJkcyBpbiB0aGlzIHdheSBpcyBvcHRpb25hbCwgYW5kIGNvbXBsZXRlbHkgZHJpdmVyLWRlcGVuZGVudC4KKyAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgorICovCitzdHJ1Y3QgZG1tMzJhdF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYWlfY2hhbnM7CisJaW50IGFpX2JpdHM7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFpX3JhbmdlczsKKwlpbnQgYW9fY2hhbnM7CisJaW50IGFvX2JpdHM7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFvX3JhbmdlczsKKwlpbnQgaGF2ZV9kaW87CisJaW50IGRpb19jaGFuczsKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtbTMyYXRfYm9hcmQgZG1tMzJhdF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRtbTMyYXQiLAorCSAgICAgIGFpX2NoYW5zOjMyLAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFpX3JhbmdlczomZG1tMzJhdF9haXJhbmdlcywKKwkgICAgICBhb19jaGFuczo0LAorCSAgICAgIGFvX2JpdHM6CTEyLAorCSAgICAgIGFvX3JhbmdlczomZG1tMzJhdF9hb3JhbmdlcywKKwkgICAgICBoYXZlX2RpbzoxLAorCSAgICAgIGRpb19jaGFuczoyNCwKKwkJfSwKK307CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGRtbTMyYXRfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAqIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgKiBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuCisgKi8KK3N0cnVjdCBkbW0zMmF0X3ByaXZhdGUgeworCisJaW50IGRhdGE7CisJaW50IGFpX2ludXNlOworCXVuc2lnbmVkIGludCBhaV9zY2Fuc19sZWZ0OworCisJLyogVXNlZCBmb3IgQU8gcmVhZGJhY2sgKi8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbNF07CisJdW5zaWduZWQgY2hhciBkaW9fY29uZmlnOworCit9OworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRtbTMyYXRfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyoKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQorICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhY2gvZGV0YWNoKQorICogdGhlIGJvYXJkLCBhbmQgYWxzbyBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zCisgKiB0aGUgZGV2aWNlIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgZG1tMzJhdF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkbW0zMmF0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RtbTMyYXQgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZG1tMzJhdCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZG1tMzJhdF9hdHRhY2gsCisgICAgICBkZXRhY2g6ZG1tMzJhdF9kZXRhY2gsCisvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaWYgeW91IGFyZQorICogd3JpdGluZyBhIGRyaXZlciBmb3IgYSBJU0EgUG5QIG9yIFBDSSBjYXJkICovCisvKiBNb3N0IGRyaXZlcnMgd2lsbCBzdXBwb3J0IG11bHRpcGxlIHR5cGVzIG9mIGJvYXJkcyBieQorICogaGF2aW5nIGFuIGFycmF5IG9mIGJvYXJkIHN0cnVjdHVyZXMuICBUaGVzZSB3ZXJlIGRlZmluZWQKKyAqIGluIGRtbTMyYXRfYm9hcmRzW10gYWJvdmUuICBOb3RlIHRoYXQgdGhlIGVsZW1lbnQgJ25hbWUnCisgKiB3YXMgZmlyc3QgaW4gdGhlIHN0cnVjdHVyZSAtLSBDb21lZGkgdXNlcyB0aGlzIGZhY3QgdG8KKyAqIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlIGJvYXJkIHdpdGhvdXQga25vd2luZyBhbnkgZGV0YWlscworICogYWJvdXQgdGhlIHN0cnVjdHVyZSBleGNlcHQgZm9yIGl0cyBsZW5ndGguCisgKiBXaGVuIGEgZGV2aWNlIGlzIGF0dGFjaGVkIChieSBjb21lZGlfY29uZmlnKSwgdGhlIG5hbWUKKyAqIG9mIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdG8gQ29tZWRpLCBhbmQgQ29tZWRpIHRyaWVzIHRvCisgKiBtYXRjaCBpdCBieSBnb2luZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJvYXJkIG5hbWVzLiAgSWYKKyAqIHRoZXJlIGlzIGEgbWF0Y2gsIHRoZSBhZGRyZXNzIG9mIHRoZSBwb2ludGVyIGlzIHB1dAorICogaW50byBkZXYtPmJvYXJkX3B0ciBhbmQgZHJpdmVyLT5hdHRhY2goKSBpcyBjYWxsZWQuCisgKgorICogTm90ZSB0aGF0IHRoZXNlIGFyZSBub3QgbmVjZXNzYXJ5IGlmIHlvdSBjYW4gZGV0ZXJtaW5lCisgKiB0aGUgdHlwZSBvZiBib2FyZCBpbiBzb2Z0d2FyZS4gIElTQSBQblAsIFBDSSwgYW5kIFBDTUNJQQorICogZGV2aWNlcyBhcmUgc3VjaCBib2FyZHMuCisgKi8KKyAgICAgIGJvYXJkX25hbWU6JmRtbTMyYXRfYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBkbW0zMmF0X2JvYXJkKSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoZG1tMzJhdF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBkbW0zMmF0X2JvYXJkKSwKK307CisKKy8qIHByb3RvdHlwZXMgZm9yIGRyaXZlciBmdW5jdGlvbnMgYmVsb3cgKi8KK3N0YXRpYyBpbnQgZG1tMzJhdF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkbW0zMmF0X2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRtbTMyYXRfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZG1tMzJhdF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRtbTMyYXRfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGRtbTMyYXRfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgZG1tMzJhdF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGRtbTMyYXRfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBkbW0zMmF0X25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCk7CitzdGF0aWMgaXJxcmV0dXJuX3QgZG1tMzJhdF9pc3IoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7Cit2b2lkIGRtbTMyYXRfc2V0YWl0aW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG5hbnNlYyk7CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBkbW0zMmF0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGNoYXIgYWloaSwgYWlsbywgZmlmb3N0YXQsIGFpc3RhdCwgaW50c3RhdCwgYWlyYmFjazsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJaXJxID0gaXQtPm9wdGlvbnNbMV07CisKKwlwcmludGsoImNvbWVkaSVkOiBkbW0zMmF0OiBhdHRhY2hpbmdcbiIsIGRldi0+bWlub3IpOworCXByaW50aygiZG1tMzJhdDogcHJvYmluZyBhdCBhZGRyZXNzIDB4JTA0bHgsIGlycSAldVxuIiwgaW9iYXNlLCBpcnEpOworCisJLyogcmVnaXN0ZXIgYWRkcmVzcyBzcGFjZSAqLworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBETU0zMkFUX01FTVNJWkUsIHRoaXNib2FyZC0+bmFtZSkpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCS8qIHRoZSBmb2xsb3dpbmcganVzdCBtYWtlcyBzdXJlIHRoZSBib2FyZCBpcyB0aGVyZSBhbmQgZ2V0cworCSAgIGl0IHRvIGEga25vd24gc3RhdGUgKi8KKworCS8qIHJlc2V0IHRoZSBib2FyZCAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTlRSTCwgRE1NMzJBVF9SRVNFVCk7CisKKwkvKiBhbGxvdyBhIG1pbGxpc2Vjb25kIHRvIHJlc2V0ICovCisJdWRlbGF5KDEwMDApOworCisJLyogemVybyBzY2FuIGFuZCBmaWZvIGNvbnRyb2wgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfRklGT0NOVFJMLCAweDApOworCisJLyogemVybyBpbnRlcnJ1cHQgYW5kIGNsb2NrIGNvbnRyb2wgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfSU5UQ0xPQ0ssIDB4MCk7CisKKwkvKiB3cml0ZSBhIHRlc3QgY2hhbm5lbCByYW5nZSwgdGhlIGhpZ2ggMyBiaXRzIHNob3VsZCBkcm9wICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0FJTE9XLCAweDgwKTsKKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQUlISUdILCAweGZmKTsKKworCS8qIHNldCB0aGUgcmFuZ2UgYXQgMTB2IHVuaXBvbGFyICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0FJQ09ORiwgRE1NMzJBVF9SQU5HRV9VMTApOworCisJLyogc2hvdWxkIHRha2UgMTAgdXMgdG8gc2V0dGxlLCBoZXJlJ3MgYSBodW5kcmVkICovCisJdWRlbGF5KDEwMCk7CisKKwkvKiByZWFkIGJhY2sgdGhlIHZhbHVlcyAqLworCWFpbG8gPSBkbW1faW5iKGRldiwgRE1NMzJBVF9BSUxPVyk7CisJYWloaSA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJSElHSCk7CisJZmlmb3N0YXQgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9GSUZPU1RBVCk7CisJYWlzdGF0ID0gZG1tX2luYihkZXYsIERNTTMyQVRfQUlTVEFUKTsKKwlpbnRzdGF0ID0gZG1tX2luYihkZXYsIERNTTMyQVRfSU5UQ0xPQ0spOworCWFpcmJhY2sgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9BSVJCQUNLKTsKKworCXByaW50aygiZG1tMzJhdDogbG89MHglMDJ4IGhpPTB4JTAyeCBmaWZvc3RhdD0weCUwMnhcbiIsCisJCWFpbG8sIGFpaGksIGZpZm9zdGF0KTsKKwlwcmludGsoImRtbTMyYXQ6IGFpc3RhdD0weCUwMnggaW50c3RhdD0weCUwMnggYWlyYmFjaz0weCUwMnhcbiIsCisJCWFpc3RhdCwgaW50c3RhdCwgYWlyYmFjayk7CisKKwlpZiAoKGFpbG8gIT0gMHgwMCkgfHwgKGFpaGkgIT0gMHgxZikgfHwgKGZpZm9zdGF0ICE9IDB4ODApIHx8CisJCShhaXN0YXQgIT0gMHg2MCB8fCAoaW50c3RhdCAhPSAweDAwKSB8fCBhaXJiYWNrICE9IDB4MGMpKSB7CisJCXByaW50aygiZG1tYXQzMjogYm9hcmQgZGV0ZWN0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIGJvYXJkIGlzIHRoZXJlLCByZWdpc3RlciBpbnRlcnJ1cHQgKi8KKwlpZiAoaXJxKSB7CisJCXJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGRtbTMyYXRfaXNyLCAwLCB0aGlzYm9hcmQtPm5hbWUsCisJCQlkZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKCJpcnEgY29uZmxpY3RcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlkZXYtPmlycSA9IGlycTsKKwl9CisKKy8qCisgKiBJZiB5b3UgY2FuIHByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIGEgc2VyaWVzCisgKiBpdCBpcywgdGhpcyBpcyB0aGUgcGxhY2UgdG8gZG8gaXQuICBPdGhlcndpc2UsIGRldi0+Ym9hcmRfcHRyCisgKiBzaG91bGQgYWxyZWFkeSBiZSBpbml0aWFsaXplZC4KKyAqLworCS8vZGV2LT5ib2FyZF9wdHIgPSBkbW0zMmF0X3Byb2JlKGRldik7CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4gIE5vdGUgdGhhdCB3ZSBjYW4gdXNlIHRoZSAidGhpc2JvYXJkIgorICogbWFjcm8gbm93LCBzaW5jZSB3ZSBqdXN0IGluaXRpYWxpemVkIGl0IGluIHRoZSBsYXN0IGxpbmUuCisgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZG1tMzJhdF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4gIGFsbG9jX3N1YmRldmljZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMykgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJLyogd2Ugc3VwcG9ydCBzaW5nbGUtZW5kZWQgKGdyb3VuZCkgYW5kIGRpZmZlcmVudGlhbCAqLworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfRElGRiB8IFNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFpX2NoYW5zOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNib2FyZC0+YWlfcmFuZ2VzOworCXMtPmxlbl9jaGFubGlzdCA9IDMyOwkvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIGNoYW5saXN0IGxlbmd0aCB0aGF0CisJCQkJICAgdGhlIGJvYXJkIGNhbiBoYW5kbGUgKi8KKwlzLT5pbnNuX3JlYWQgPSBkbW0zMmF0X2FpX3JpbnNuOworCXMtPmRvX2NtZCA9IGRtbTMyYXRfYWlfY21kOworCXMtPmRvX2NtZHRlc3QgPSBkbW0zMmF0X2FpX2NtZHRlc3Q7CisJcy0+Y2FuY2VsID0gZG1tMzJhdF9haV9jYW5jZWw7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5hb19jaGFuczsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5hb19iaXRzKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPmFvX3JhbmdlczsKKwlzLT5pbnNuX3dyaXRlID0gZG1tMzJhdF9hb193aW5zbjsKKwlzLT5pbnNuX3JlYWQgPSBkbW0zMmF0X2FvX3JpbnNuOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCisJaWYgKHRoaXNib2FyZC0+aGF2ZV9kaW8pIHsKKworCQkvKiBnZXQgYWNjZXNzIHRvIHRoZSBESU8gcmVncyAqLworCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ05UUkwsIERNTTMyQVRfRElPQUNDKTsKKwkJLyogc2V0IHRoZSBESU8ncyB0byB0aGUgZGVmdWFsdCBpbnB1dCBzZXR0aW5nICovCisJCWRldnByaXYtPmRpb19jb25maWcgPSBETU0zMkFUX0RJUkEgfCBETU0zMkFUX0RJUkIgfAorCQkJRE1NMzJBVF9ESVJDTCB8IERNTTMyQVRfRElSQ0ggfCBETU0zMkFUX0RJRU5BQkxFOworCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfRElPQ09ORiwgZGV2cHJpdi0+ZGlvX2NvbmZpZyk7CisKKwkJLyogc2V0IHVwIHRoZSBzdWJkZXZpY2UgKi8KKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmRpb19jaGFuczsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnN0YXRlID0gMDsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gZG1tMzJhdF9kaW9faW5zbl9iaXRzOworCQlzLT5pbnNuX2NvbmZpZyA9IGRtbTMyYXRfZGlvX2luc25fY29uZmlnOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJLyogc3VjY2VzcyAqLworCXByaW50aygiY29tZWRpJWQ6IGRtbTMyYXQ6IGF0dGFjaGVkXG4iLCBkZXYtPm1pbm9yKTsKKworCXJldHVybiAxOworCit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgZG1tMzJhdF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogZG1tMzJhdDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBETU0zMkFUX01FTVNJWkUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAiaW5zdHJ1Y3Rpb25zIiByZWFkL3dyaXRlIGRhdGEgaW4gIm9uZS1zaG90IiBvciAic29mdHdhcmUtdHJpZ2dlcmVkIgorICogbW9kZS4KKyAqLworCitzdGF0aWMgaW50IGRtbTMyYXRfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuLCBpOworCXVuc2lnbmVkIGludCBkOworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCXVuc2lnbmVkIHNob3J0IG1zYiwgbHNiOworCXVuc2lnbmVkIGNoYXIgY2hhbjsKKwlpbnQgcmFuZ2U7CisKKwkvKiBnZXQgdGhlIGNoYW5uZWwgYW5kIHJhbmdlIG51bWJlciAqLworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpICYgKHMtPm5fY2hhbiAtIDEpOworCXJhbmdlID0gQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpOworCisJLy9wcmludGsoImNoYW5uZWw9MHglMDJ4LCByYW5nZT0lZFxuIixjaGFuLHJhbmdlKTsKKworCS8qIHplcm8gc2NhbiBhbmQgZmlmbyBjb250cm9sIGFuZCByZXNldCBmaWZvICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0ZJRk9DTlRSTCwgRE1NMzJBVF9GSUZPUkVTRVQpOworCisJLyogd3JpdGUgdGhlIGFpIGNoYW5uZWwgcmFuZ2UgcmVncyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9BSUxPVywgY2hhbik7CisJZG1tX291dGIoZGV2LCBETU0zMkFUX0FJSElHSCwgY2hhbik7CisJLyogc2V0IHRoZSByYW5nZSBiaXRzICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0FJQ09ORiwgZG1tMzJhdF9yYW5nZWJpdHNbcmFuZ2VdKTsKKworCS8qIHdhaXQgZm9yIGNpcmN1aXQgdG8gc2V0dGxlICovCisJZm9yIChpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKKwkJc3RhdHVzID0gZG1tX2luYihkZXYsIERNTTMyQVRfQUlSQkFDSyk7CisJCWlmICgoc3RhdHVzICYgRE1NMzJBVF9TVEFUVVMpID09IDApCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gNDAwMDApIHsKKwkJcHJpbnRrKCJ0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJLyogY29udmVydCBuIHNhbXBsZXMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ09OViwgMHhmZik7CisJCS8qIHdhaXQgZm9yIGNvbnZlcnNpb24gdG8gZW5kICovCisJCWZvciAoaSA9IDA7IGkgPCA0MDAwMDsgaSsrKSB7CisJCQlzdGF0dXMgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9BSVNUQVQpOworCQkJaWYgKChzdGF0dXMgJiBETU0zMkFUX1NUQVRVUykgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSA0MDAwMCkgeworCQkJcHJpbnRrKCJ0aW1lb3V0XG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisKKwkJLyogcmVhZCBkYXRhICovCisJCWxzYiA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJTFNCKTsKKwkJbXNiID0gZG1tX2luYihkZXYsIERNTTMyQVRfQUlNU0IpOworCisJCS8qIGludmVydCBzaWduIGJpdCB0byBtYWtlIHJhbmdlIHVuc2lnbmVkLCB0aGlzIGlzIGFuCisJCSAgIGlkaW9zeW5jcmFjeSBvZiB0aGUgZGlhbW9uZCBib2FyZCwgaXQgcmV0dXJuCisJCSAgIGNvbnZlcnNpb25zIGFzIGEgc2lnbmVkIHZhbHVlLCBpLmUuIC0zMjc2OCB0bworCQkgICAzMjc2NywgZmxpcHBpbmcgdGhlIGJpdCBhbmQgaW50ZXJwcmV0aW5nIGl0IGFzCisJCSAgIHNpZ25lZCBnaXZlcyB5b3UgYSByYW5nZSBvZiAwIHRvIDY1NTM1IHdoaWNoIGlzCisJCSAgIHVzZWQgYnkgY29tZWRpICovCisJCWQgPSAoKG1zYiBeIDB4MDA4MCkgPDwgOCkgKyBsc2I7CisKKwkJZGF0YVtuXSA9IGQ7CisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBkbW0zMmF0X2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCWludCBzdGFydF9jaGFuLCBnYWluLCBpOworCisJLy9wcmludGsoImRtbWF0MzIgaW4gY29tbWFuZCB0ZXN0XG4iKTsKKworCS8qIGNtZHRlc3QgdGVzdHMgYSBwYXJ0aWN1bGFyIGNvbW1hbmQgdG8gc2VlIGlmIGl0IGlzIHZhbGlkLgorCSAqIFVzaW5nIHRoZSBjbWR0ZXN0IGlvY3RsLCBhIHVzZXIgY2FuIGNyZWF0ZSBhIHZhbGlkIGNtZAorCSAqIGFuZCB0aGVuIGhhdmUgaXQgZXhlY3V0ZXMgYnkgdGhlIGNtZCBpb2N0bC4KKwkgKgorCSAqIGNtZHRlc3QgcmV0dXJucyAxLDIsMyw0IG9yIDAsIGRlcGVuZGluZyBvbiB3aGljaCB0ZXN0cworCSAqIHRoZSBjb21tYW5kIHBhc3Nlcy4gKi8KKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUiAvKnwgVFJJR19FWFQgKi8gOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiAvKnwgVFJJR19FWFQgKi8gOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIE1BWF9TQ0FOX1NQRUVECTEwMDAwMDAJLyogaW4gbmFub3NlY29uZHMgKi8KKyNkZWZpbmUgTUlOX1NDQU5fU1BFRUQJMTAwMDAwMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IE1BWF9TQ0FOX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUFYX1NDQU5fU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IE1JTl9TQ0FOX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUlOX1NDQU5fU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJLyogc2hvdWxkIGJlIGxldmVsL2VkZ2UsIGhpL2xvIHNwZWNpZmljYXRpb24gaGVyZSAqLworCQkvKiBzaG91bGQgc3BlY2lmeSBtdWx0aXBsZSBleHRlcm5hbCB0cmlnZ2VycyAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IDkpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSA5OworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA+PSAxNzUwMCkKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwMDsKKwkJZWxzZSBpZiAoY21kLT5jb252ZXJ0X2FyZyA+PSAxMjUwMCkKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAxNTAwMDsKKwkJZWxzZSBpZiAoY21kLT5jb252ZXJ0X2FyZyA+PSA3NTAwKQorCQkJY21kLT5jb252ZXJ0X2FyZyA9IDEwMDAwOworCQllbHNlCisJCQljbWQtPmNvbnZlcnRfYXJnID0gNTAwMDsKKworCX0gZWxzZSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJLyogc2VlIGFib3ZlICovCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gOSkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IDk7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoY21kLT5zdG9wX2FyZyA+IDB4ZmZmZmZmZjApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAweGZmZmZmZmYwOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+c3RvcF9hcmcgPT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWRtbTMyYXRfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJZG1tMzJhdF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUiAmJgorCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmcpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwkvKiBzdGVwIDUgY2hlY2sgdGhlIGNoYW5uZWwgbGlzdCwgdGhlIGNoYW5uZWwgbGlzdCBmb3IgdGhpcworCSAgIGJvYXJkIG11c3QgYmUgY29uc2VjdXRpdmUgYW5kIGdhaW5zIG11c3QgYmUgdGhlIHNhbWUgKi8KKworCWlmIChjbWQtPmNoYW5saXN0KSB7CisJCWdhaW4gPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwkJc3RhcnRfY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7CisJCWZvciAoaSA9IDE7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSAhPQorCQkJCShzdGFydF9jaGFuICsgaSkgJSBzLT5uX2NoYW4pIHsKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiZW50cmllcyBpbiBjaGFubGlzdCBtdXN0IGJlIGNvbnNlY3V0aXZlIGNoYW5uZWxzLCBjb3VudGluZyB1cHdhcmRzXG4iKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJCWlmIChDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSAhPSBnYWluKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBhbGwgaGF2ZSB0aGUgc2FtZSBnYWluXG4iKTsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG1tMzJhdF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaW50IGksIHJhbmdlOworCXVuc2lnbmVkIGNoYXIgY2hhbmxvLCBjaGFuaGksIHN0YXR1czsKKworCWlmICghY21kLT5jaGFubGlzdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBnZXQgdGhlIGNoYW5uZWwgbGlzdCBhbmQgcmFuZ2UgKi8KKwljaGFubG8gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pICYgKHMtPm5fY2hhbiAtIDEpOworCWNoYW5oaSA9IGNoYW5sbyArIGNtZC0+Y2hhbmxpc3RfbGVuIC0gMTsKKwlpZiAoY2hhbmhpID49IHMtPm5fY2hhbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKworCS8qIHJlc2V0IGZpZm8gKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfRklGT0NOVFJMLCBETU0zMkFUX0ZJRk9SRVNFVCk7CisKKwkvKiBzZXQgc2NhbiBlbmFibGUgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfRklGT0NOVFJMLCBETU0zMkFUX1NDQU5FTkFCTEUpOworCisJLyogd3JpdGUgdGhlIGFpIGNoYW5uZWwgcmFuZ2UgcmVncyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9BSUxPVywgY2hhbmxvKTsKKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQUlISUdILCBjaGFuaGkpOworCisJLyogc2V0IHRoZSByYW5nZSBiaXRzICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0FJQ09ORiwgZG1tMzJhdF9yYW5nZWJpdHNbcmFuZ2VdKTsKKworCS8qIHJlc2V0IHRoZSBpbnRlcnJ1cHQganVzdCBpbiBjYXNlICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0NOVFJMLCBETU0zMkFUX0lOVFJFU0VUKTsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCisJCWRldnByaXYtPmFpX3NjYW5zX2xlZnQgPSBjbWQtPnN0b3BfYXJnOworCWVsc2UgewkJCS8qIFRSSUdfTk9ORSAqLworCQlkZXZwcml2LT5haV9zY2Fuc19sZWZ0ID0gMHhmZmZmZmZmZjsJLyogaW5kaWNhdGVzIFRSSUdfTk9ORSB0byBpc3IgKi8KKwl9CisKKwkvKiB3YWl0IGZvciBjaXJjdWl0IHRvIHNldHRsZSAqLworCWZvciAoaSA9IDA7IGkgPCA0MDAwMDsgaSsrKSB7CisJCXN0YXR1cyA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJUkJBQ0spOworCQlpZiAoKHN0YXR1cyAmIERNTTMyQVRfU1RBVFVTKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IDQwMDAwKSB7CisJCXByaW50aygidGltZW91dFxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCWlmIChkZXZwcml2LT5haV9zY2Fuc19sZWZ0ID4gMSkgeworCQkvKiBzdGFydCB0aGUgY2xvY2sgYW5kIGVuYWJsZSB0aGUgaW50ZXJydXB0cyAqLworCQlkbW0zMmF0X3NldGFpdGltZXIoZGV2LCBjbWQtPnNjYW5fYmVnaW5fYXJnKTsKKwl9IGVsc2UgeworCQkvKiBzdGFydCB0aGUgaW50ZXJydXBzIGFuZCBpbml0aWF0ZSBhIHNpbmdsZSBzY2FuICovCisJCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9JTlRDTE9DSywgRE1NMzJBVF9BRElOVCk7CisJCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DT05WLCAweGZmKTsKKwl9CisKKy8qIAlwcmludGsoImRtbWF0MzIgaW4gY29tbWFuZFxuIik7ICovCisKKy8qIAlmb3IoaT0wO2k8Y21kLT5jaGFubGlzdF9sZW47aSsrKSAqLworLyogCQljb21lZGlfYnVmX3B1dChzLT5hc3luYyxpKjEwMCk7ICovCisKKy8qIAlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7ICovCisvKiAJY29tZWRpX2V2ZW50KGRldiwgcyk7ICovCisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IGRtbTMyYXRfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJZGV2cHJpdi0+YWlfc2NhbnNfbGVmdCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkbW0zMmF0X2lzcihpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXVuc2lnbmVkIGNoYXIgaW50c3RhdDsKKwl1bnNpZ25lZCBpbnQgc2FtcDsKKwl1bnNpZ25lZCBzaG9ydCBtc2IsIGxzYjsKKwlpbnQgaTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlpbnRzdGF0ID0gZG1tX2luYihkZXYsIERNTTMyQVRfSU5UQ0xPQ0spOworCisJaWYgKGludHN0YXQgJiBETU0zMkFUX0FESU5UKSB7CisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5yZWFkX3N1YmRldjsKKwkJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCQkvKiByZWFkIGRhdGEgKi8KKwkJCWxzYiA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJTFNCKTsKKwkJCW1zYiA9IGRtbV9pbmIoZGV2LCBETU0zMkFUX0FJTVNCKTsKKworCQkJLyogaW52ZXJ0IHNpZ24gYml0IHRvIG1ha2UgcmFuZ2UgdW5zaWduZWQgKi8KKwkJCXNhbXAgPSAoKG1zYiBeIDB4MDA4MCkgPDwgOCkgKyBsc2I7CisJCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgc2FtcCk7CisJCX0KKworCQlpZiAoZGV2cHJpdi0+YWlfc2NhbnNfbGVmdCAhPSAweGZmZmZmZmZmKSB7CS8qIFRSSUdfQ09VTlQgKi8KKwkJCWRldnByaXYtPmFpX3NjYW5zX2xlZnQtLTsKKwkJCWlmIChkZXZwcml2LT5haV9zY2Fuc19sZWZ0ID09IDApIHsKKwkJCQkvKiBkaXNhYmxlIGZ1cnRoZXIgaW50ZXJydXB0cyBhbmQgY2xvY2tzICovCisJCQkJZG1tX291dGIoZGV2LCBETU0zMkFUX0lOVENMT0NLLCAweDApOworCQkJCS8qIHNldCB0aGUgYnVmZmVyIHRvIGJlIGZsdXNoZWQgd2l0aCBhbiBFT0YgKi8KKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQl9CisKKwkJfQorCQkvKiBmbHVzaCB0aGUgYnVmZmVyICovCisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCS8qIHJlc2V0IHRoZSBpbnRlcnJ1cHQgKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ05UUkwsIERNTTMyQVRfSU5UUkVTRVQpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHJlcXVpcmUgYSBwYXJ0aWN1bGFyIGZvcm0sIHRoaXMgaXMganVzdAorICogd2hhdCBoYXBwZW5zIHRvIGJlIHVzZWQgaW4gc29tZSBvZiB0aGUgZHJpdmVycy4gIEl0IHNob3VsZAorICogY29udmVydCBucyBuYW5vc2Vjb25kcyB0byBhIGNvdW50ZXIgdmFsdWUgc3VpdGFibGUgZm9yIHByb2dyYW1taW5nCisgKiB0aGUgZGV2aWNlLiAgQWxzbywgaXQgc2hvdWxkIGFkanVzdCBucyBzbyB0aGF0IGl0IGNvb3Jlc3BvbmRzIHRvCisgKiB0aGUgYWN0dWFsIHRpbWUgdGhhdCB0aGUgZGV2aWNlIHdpbGwgdXNlLiAqLworc3RhdGljIGludCBkbW0zMmF0X25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCkKK3sKKwkvKiB0cml2aWFsIHRpbWVyICovCisJLyogaWYgeW91ciB0aW1pbmcgaXMgZG9uZSB0aHJvdWdoIHR3byBjYXNjYWRlZCB0aW1lcnMsIHRoZQorCSAqIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoKSBmdW5jdGlvbiBpbiA4MjUzLmggY2FuIGJlCisJICogdmVyeSBoZWxwZnVsLiAgVGhlcmUgYXJlIGFsc28gaTgyNTRfbG9hZCgpIGFuZCBpODI1NF9tbV9sb2FkKCkKKwkgKiB3aGljaCBjYW4gYmUgdXNlZCB0byBsb2FkIHZhbHVlcyBpbnRvIHRoZSB1YmlxdWl0b3VzIDgyNTQgY291bnRlcnMKKwkgKi8KKworCXJldHVybiAqbnM7Cit9CisKK3N0YXRpYyBpbnQgZG1tMzJhdF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBjaGFyIGhpLCBsbywgc3RhdHVzOworCisJLyogV3JpdGluZyBhIGxpc3Qgb2YgdmFsdWVzIHRvIGFuIEFPIGNoYW5uZWwgaXMgcHJvYmFibHkgbm90CisJICogdmVyeSB1c2VmdWwsIGJ1dCB0aGF0J3MgaG93IHRoZSBpbnRlcmZhY2UgaXMgZGVmaW5lZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOworCisJCS8qIGdldCB0aGUgbG93IGJ5dGUgKi8KKwkJbG8gPSBkYXRhW2ldICYgMHgwMGZmOworCQkvKiBoaWdoIGJ5dGUgYWxzbyBjb250YWlucyBjaGFubmVsIG51bWJlciAqLworCQloaSA9IChkYXRhW2ldID4+IDgpICsgY2hhbiAqICgxIDw8IDYpOworCQkvL3ByaW50aygid3JpdGluZyAweCUwMnggIDB4JTAyeFxuIixoaSxsbyk7CisJCS8qIHdyaXRlIHRoZSBsb3cgYW5kIGhpZ2ggdmFsdWVzIHRvIHRoZSBib2FyZCAqLworCQlkbW1fb3V0YihkZXYsIERNTTMyQVRfREFDTFNCLCBsbyk7CisJCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9EQUNNU0IsIGhpKTsKKworCQkvKiB3YWl0IGZvciBjaXJjdWl0IHRvIHNldHRsZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgNDAwMDA7IGkrKykgeworCQkJc3RhdHVzID0gZG1tX2luYihkZXYsIERNTTMyQVRfREFDU1RBVCk7CisJCQlpZiAoKHN0YXR1cyAmIERNTTMyQVRfREFDQlVTWSkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSA0MDAwMCkgeworCQkJcHJpbnRrKCJ0aW1lb3V0XG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCS8qIGR1bW15IHJlYWQgdG8gdXBkYXRlIHRyaWdnZXIgdGhlIG91dHB1dCAqLworCQlzdGF0dXMgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9EQUNNU0IpOworCisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gaTsKK30KKworLyogQU8gc3ViZGV2aWNlcyBzaG91bGQgaGF2ZSBhIHJlYWQgaW5zbiBhcyB3ZWxsIGFzIGEgd3JpdGUgaW5zbi4KKyAqIFVzdWFsbHkgdGhpcyBtZWFucyBjb3B5aW5nIGEgdmFsdWUgc3RvcmVkIGluIGRldnByaXYuICovCitzdGF0aWMgaW50IGRtbTMyYXRfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQorCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisKKwlyZXR1cm4gaTsKK30KKworLyogRElPIGRldmljZXMgYXJlIHNsaWdodGx5IHNwZWNpYWwuICBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0bworICogaW1wbGVtZW50IHRoZSBpbnNuX3JlYWQvaW5zbl93cml0ZSBpbnRlcmZhY2UsIGl0IGlzIG11Y2ggbW9yZQorICogdXNlZnVsIHRvIGFwcGxpY2F0aW9ucyBpZiB5b3UgaW1wbGVtZW50IHRoZSBpbnNuX2JpdHMgaW50ZXJmYWNlLgorICogVGhpcyBhbGxvd3MgcGFja2VkIHJlYWRpbmcvd3JpdGluZyBvZiB0aGUgRElPIGNoYW5uZWxzLiAgVGhlCisgKiBjb21lZGkgY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlICovCitzdGF0aWMgaW50IGRtbTMyYXRfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgY2hhciBkaW9iaXRzOworCisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUaGUgaW5zbiBkYXRhIGlzIGEgbWFzayBpbiBkYXRhWzBdIGFuZCB0aGUgbmV3IGRhdGEKKwkgKiBpbiBkYXRhWzFdLCBlYWNoIGNoYW5uZWwgY29vcmVzcG9uZGluZyB0byBhIGJpdC4gKi8KKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJCS8qIFdyaXRlIG91dCB0aGUgbmV3IGRpZ2l0YWwgb3V0cHV0IGxpbmVzICovCisJCS8vb3V0dyhzLT5zdGF0ZSxkZXYtPmlvYmFzZSArIERNTTMyQVRfRElPKTsKKwl9CisKKwkvKiBnZXQgYWNjZXNzIHRvIHRoZSBESU8gcmVncyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTlRSTCwgRE1NMzJBVF9ESU9BQ0MpOworCisJLyogaWYgZWl0aGVyIHBhcnQgb2YgZGlvIGlzIHNldCBmb3Igb3V0cHV0ICovCisJaWYgKCgoZGV2cHJpdi0+ZGlvX2NvbmZpZyAmIERNTTMyQVRfRElSQ0wpID09IDApIHx8CisJCSgoZGV2cHJpdi0+ZGlvX2NvbmZpZyAmIERNTTMyQVRfRElSQ0gpID09IDApKSB7CisJCWRpb2JpdHMgPSAocy0+c3RhdGUgJiAweDAwZmYwMDAwKSA+PiAxNjsKKwkJZG1tX291dGIoZGV2LCBETU0zMkFUX0RJT0MsIGRpb2JpdHMpOworCX0KKwlpZiAoKGRldnByaXYtPmRpb19jb25maWcgJiBETU0zMkFUX0RJUkIpID09IDApIHsKKwkJZGlvYml0cyA9IChzLT5zdGF0ZSAmIDB4MDAwMGZmMDApID4+IDg7CisJCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9ESU9CLCBkaW9iaXRzKTsKKwl9CisJaWYgKChkZXZwcml2LT5kaW9fY29uZmlnICYgRE1NMzJBVF9ESVJBKSA9PSAwKSB7CisJCWRpb2JpdHMgPSAocy0+c3RhdGUgJiAweDAwMDAwMGZmKTsKKwkJZG1tX291dGIoZGV2LCBETU0zMkFUX0RJT0EsIGRpb2JpdHMpOworCX0KKworCS8qIG5vdyByZWFkIHRoZSBzdGF0ZSBiYWNrIGluICovCisJcy0+c3RhdGUgPSBkbW1faW5iKGRldiwgRE1NMzJBVF9ESU9DKTsKKwlzLT5zdGF0ZSA8PD0gODsKKwlzLT5zdGF0ZSB8PSBkbW1faW5iKGRldiwgRE1NMzJBVF9ESU9CKTsKKwlzLT5zdGF0ZSA8PD0gODsKKwlzLT5zdGF0ZSB8PSBkbW1faW5iKGRldiwgRE1NMzJBVF9ESU9BKTsKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwkvKiBvbiByZXR1cm4sIGRhdGFbMV0gY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBkaWdpdGFsCisJICogaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4gKi8KKwkvL2RhdGFbMV09aW53KGRldi0+aW9iYXNlICsgRE1NMzJBVF9ESU8pOworCS8qIG9yIHdlIGNvdWxkIGp1c3QgcmV0dXJuIHRoZSBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBvdXRwdXQgdmFsdWVzIGlmCisJICogaXQgd2FzIGEgcHVyZWx5IGRpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLworCS8vZGF0YVsxXT1zLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGRtbTMyYXRfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBjaGFyIGNoYW5iaXQ7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWlmIChpbnNuLT5uICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNoYW4gPCA4KQorCQljaGFuYml0ID0gRE1NMzJBVF9ESVJBOworCWVsc2UgaWYgKGNoYW4gPCAxNikKKwkJY2hhbmJpdCA9IERNTTMyQVRfRElSQjsKKwllbHNlIGlmIChjaGFuIDwgMjApCisJCWNoYW5iaXQgPSBETU0zMkFUX0RJUkNMOworCWVsc2UKKwkJY2hhbmJpdCA9IERNTTMyQVRfRElSQ0g7CisKKwkvKiBUaGUgaW5wdXQgb3Igb3V0cHV0IGNvbmZpZ3VyYXRpb24gb2YgZWFjaCBkaWdpdGFsIGxpbmUgaXMKKwkgKiBjb25maWd1cmVkIGJ5IGEgc3BlY2lhbCBpbnNuX2NvbmZpZyBpbnN0cnVjdGlvbi4gIGNoYW5zcGVjCisJICogY29udGFpbnMgdGhlIGNoYW5uZWwgdG8gYmUgY2hhbmdlZCwgYW5kIGRhdGFbMF0gY29udGFpbnMgdGhlCisJICogdmFsdWUgQ09NRURJX0lOUFVUIG9yIENPTUVESV9PVVRQVVQuICovCisKKwkvKiBpZiBvdXRwdXQgY2xlYXIgdGhlIGJpdCwgb3RoZXJ3aXNlIHNldCBpdCAqLworCWlmIChkYXRhWzBdID09IENPTUVESV9PVVRQVVQpIHsKKwkJZGV2cHJpdi0+ZGlvX2NvbmZpZyAmPSB+Y2hhbmJpdDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5kaW9fY29uZmlnIHw9IGNoYW5iaXQ7CisJfQorCS8qIGdldCBhY2Nlc3MgdG8gdGhlIERJTyByZWdzICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0NOVFJMLCBETU0zMkFUX0RJT0FDQyk7CisJLyogc2V0IHRoZSBESU8ncyB0byB0aGUgbmV3IGNvbmZpZ3VyYXRpb24gc2V0dGluZyAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9ESU9DT05GLCBkZXZwcml2LT5kaW9fY29uZmlnKTsKKworCXJldHVybiAxOworfQorCit2b2lkIGRtbTMyYXRfc2V0YWl0aW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG5hbnNlYykKK3sKKwl1bnNpZ25lZCBjaGFyIGxvMSwgbG8yLCBoaTI7CisJdW5zaWduZWQgc2hvcnQgYm90aDI7CisKKwkvKiBiYXNlZCBvbiAxMG1oeiBjbG9jayAqLworCWxvMSA9IDIwMDsKKwlib3RoMiA9IG5hbnNlYyAvIDIwMDAwOworCWhpMiA9IChib3RoMiAmIDB4ZmYwMCkgPj4gODsKKwlsbzIgPSBib3RoMiAmIDB4MDBmZjsKKworCS8qIHNldCB0aGUgY291bnRlciBmcmVxdWVuY3kgdG8gMTBtaHogKi8KKwlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ05UUkRJTywgMCk7CisKKwkvKiBnZXQgYWNjZXNzIHRvIHRoZSBjbG9jayByZWdzICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0NOVFJMLCBETU0zMkFUX0NMS0FDQyk7CisKKwkvKiB3cml0ZSB0aGUgY291bnRlciAxIGNvbnRyb2wgd29yZCBhbmQgbG93IGJ5dGUgdG8gY291bnRlciAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTEtDVCwgRE1NMzJBVF9DTEtDVDEpOworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTEsxLCBsbzEpOworCisJLyogd3JpdGUgdGhlIGNvdW50ZXIgMiBjb250cm9sIHdvcmQgYW5kIGxvdyBieXRlIHRoZW4gdG8gY291bnRlciAqLworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTEtDVCwgRE1NMzJBVF9DTEtDVDIpOworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTEsyLCBsbzIpOworCWRtbV9vdXRiKGRldiwgRE1NMzJBVF9DTEsyLCBoaTIpOworCisJLyogZW5hYmxlIHRoZSBhaSBjb252ZXJzaW9uIGludGVycnVwdCBhbmQgdGhlIGNsb2NrIHRvIHN0YXJ0IHNjYW5zICovCisJZG1tX291dGIoZGV2LCBETU0zMkFUX0lOVENMT0NLLCBETU0zMkFUX0FESU5UIHwgRE1NMzJBVF9DTEtTRUwpOworCit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZG1tMzJhdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODAxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUwZWVkOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MDEuYwpAQCAtMCwwICsxLDY5NyBAQAorLyoKKyAqIGNvbWVkaS9kcml2ZXJzL2R0MjgwMS5jCisgKiBEZXZpY2UgRHJpdmVyIGZvciBEYXRhVHJhbnNsYXRpb24gRFQyODAxCisgKgorICovCisvKgorRHJpdmVyOiBkdDI4MDEKK0Rlc2NyaXB0aW9uOiBEYXRhIFRyYW5zbGF0aW9uIERUMjgwMSBzZXJpZXMgYW5kIERUMDEtRVoKK0F1dGhvcjogZHMKK1N0YXR1czogd29ya3MKK0RldmljZXM6IFtEYXRhIFRyYW5zbGF0aW9uXSBEVDI4MDEgKGR0MjgwMSksIERUMjgwMS1BLCBEVDI4MDEvNTcxNkEsCisgIERUMjgwNSwgRFQyODA1LzU3MTZBLCBEVDI4MDgsIERUMjgxOCwgRFQyODA5LCBEVDAxLUVaCisKK1RoaXMgZHJpdmVyIGNhbiBhdXRvcHJvYmUgdGhlIHR5cGUgb2YgYm9hcmQuCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIHVudXNlZAorICBbMl0gLSBBL0QgcmVmZXJlbmNlIDA9ZGlmZmVyZW50aWFsLCAxPXNpbmdsZS1lbmRlZAorICBbM10gLSBBL0QgcmFuZ2UKKyAgICAgICAgICAwID0gWy0xMCwxMF0KKwkgIDEgPSBbMCwxMF0KKyAgWzRdIC0gRC9BIDAgcmFuZ2UKKyAgICAgICAgICAwID0gWy0xMCwxMF0KKwkgIDEgPSBbLTUsNV0KKwkgIDIgPSBbLTIuNSwyLjVdCisJICAzID0gWzAsMTBdCisJICA0ID0gWzAsNV0KKyAgWzVdIC0gRC9BIDEgcmFuZ2UgKHNhbWUgY2hvaWNlcykKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIERUMjgwMV9USU1FT1VUIDEwMDAKKworLyogSGFyZHdhcmUgQ29uZmlndXJhdGlvbiAqLworLyogPT09PT09PT09PT09PT09PT09PT09PSAqLworCisjZGVmaW5lIERUMjgwMV9NQVhfRE1BX1NJWkUgKDY0ICogMTAyNCkKKworLyogUG9ydHMgKi8KKyNkZWZpbmUgRFQyODAxX0lPU0laRSAyCisKKy8qIGRlZmluZSdzICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qIENvbW1hbmRzICovCisjZGVmaW5lIERUX0NfUkVTRVQgICAgICAgMHgwCisjZGVmaW5lIERUX0NfQ0xFQVJfRVJSICAgMHgxCisjZGVmaW5lIERUX0NfUkVBRF9FUlJSRUcgMHgyCisjZGVmaW5lIERUX0NfU0VUX0NMT0NLICAgMHgzCisKKyNkZWZpbmUgRFRfQ19URVNUICAgICAgICAweGIKKyNkZWZpbmUgRFRfQ19TVE9QICAgICAgICAweGYKKworI2RlZmluZSBEVF9DX1NFVF9ESUdJTiAgIDB4NAorI2RlZmluZSBEVF9DX1NFVF9ESUdPVVQgIDB4NQorI2RlZmluZSBEVF9DX1JFQURfRElHICAgIDB4NgorI2RlZmluZSBEVF9DX1dSSVRFX0RJRyAgIDB4NworCisjZGVmaW5lIERUX0NfV1JJVEVfREFJTSAgMHg4CisjZGVmaW5lIERUX0NfU0VUX0RBICAgICAgMHg5CisjZGVmaW5lIERUX0NfV1JJVEVfREEgICAgMHhhCisKKyNkZWZpbmUgRFRfQ19SRUFEX0FESU0gICAweGMKKyNkZWZpbmUgRFRfQ19TRVRfQUQgICAgICAweGQKKyNkZWZpbmUgRFRfQ19SRUFEX0FEICAgICAweGUKKworLyogQ29tbWFuZCBtb2RpZmllcnMgKG9ubHkgdXNlZCB3aXRoIHJlYWQvd3JpdGUpLCBFWFRUUklHIGNhbiBiZQorICAgdXNlZCB3aXRoIHNvbWUgb3RoZXIgY29tbWFuZHMuCisqLworI2RlZmluZSBEVF9NT0RfRE1BICAgICAoMTw8NCkKKyNkZWZpbmUgRFRfTU9EX0NPTlQgICAgKDE8PDUpCisjZGVmaW5lIERUX01PRF9FWFRDTEsgICgxPDw2KQorI2RlZmluZSBEVF9NT0RfRVhUVFJJRyAoMTw8NykKKworLyogQml0cyBpbiBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRFRfU19EQVRBX09VVF9SRUFEWSAgICgxPDwwKQorI2RlZmluZSBEVF9TX0RBVEFfSU5fRlVMTCAgICAgKDE8PDEpCisjZGVmaW5lIERUX1NfUkVBRFkgICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgRFRfU19DT01NQU5EICAgICAgICAgICgxPDwzKQorI2RlZmluZSBEVF9TX0NPTVBPU0lURV9FUlJPUiAgKDE8PDcpCisKKy8qIHJlZ2lzdGVycyAqLworI2RlZmluZSBEVDI4MDFfREFUQQkJMAorI2RlZmluZSBEVDI4MDFfU1RBVFVTCQkxCisjZGVmaW5lIERUMjgwMV9DTUQJCTEKKworc3RhdGljIGludCBkdDI4MDFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZHQyODAxX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2R0MjgwMSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkdDI4MDEiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmR0MjgwMV9hdHRhY2gsCisgICAgICBkZXRhY2g6ZHQyODAxX2RldGFjaCwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZHQyODAxKTsKKworI2lmIDAKKy8vIGlnbm9yZSAnZGVmaW5lZCBidXQgbm90IHVzZWQnIHdhcm5pbmcKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MDFfYWlfcGdoX2JpcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0xLjI1LCAxLjI1KSwKKwl9Cit9OworI2VuZGlmCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODAxX2FpX3BnbF9iaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjEsIDAuMSksCisJCQlSQU5HRSgtMC4wMiwgMC4wMiksCisJfQorfTsKKworI2lmIDAKKy8vIGlnbm9yZSAnZGVmaW5lZCBidXQgbm90IHVzZWQnIHdhcm5pbmcKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MDFfYWlfcGdoX3VuaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgwLCA1KSwKKwkJCVJBTkdFKDAsIDIuNSksCisJCQlSQU5HRSgwLCAxLjI1KSwKKwl9Cit9OworI2VuZGlmCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODAxX2FpX3BnbF91bmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoMCwgMSksCisJCQlSQU5HRSgwLCAwLjEpLAorCQkJUkFOR0UoMCwgMC4wMiksCisJfQorfTsKKworc3RydWN0IGR0MjgwMV9ib2FyZCB7CisKKwljb25zdCBjaGFyICpuYW1lOworCWludCBib2FyZGNvZGU7CisJaW50IGFkX2RpZmY7CisJaW50IGFkX2NoYW47CisJaW50IGFkYml0czsKKwlpbnQgYWRyYW5nZXR5cGU7CisJaW50IGRhYml0czsKK307CisKKworLyogVHlwZWlkJ3MgZm9yIHRoZSBkaWZmZXJlbnQgYm9hcmRzIG9mIHRoZSBEVDI4MDEtc2VyaWVzCisgICAodGFrZW4gZnJvbSB0aGUgdGVzdC1zb2Z0d2FyZSwgdGhhdCBjb21lcyB3aXRoIHRoZSBib2FyZCkKKyAgICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGR0MjgwMV9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJkdDI4MDEiLAorCSAgICAgIGJvYXJkY29kZToweDA5LAorCSAgICAgIGFkX2RpZmY6CTIsCisJICAgICAgYWRfY2hhbjoJMTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZHJhbmdldHlwZTowLAorICAgICAgZGFiaXRzOgkxMn0sCisJeworCSAgICAgIG5hbWU6CSJkdDI4MDEtYSIsCisJICAgICAgYm9hcmRjb2RlOjB4NTIsCisJICAgICAgYWRfZGlmZjoJMiwKKwkgICAgICBhZF9jaGFuOgkxNiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2V0eXBlOjAsCisgICAgICBkYWJpdHM6CTEyfSwKKwl7CisJICAgICAgbmFtZToJImR0MjgwMS81NzE2YSIsCisJICAgICAgYm9hcmRjb2RlOjB4ODIsCisJICAgICAgYWRfZGlmZjoJMSwKKwkgICAgICBhZF9jaGFuOgkxNiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFkcmFuZ2V0eXBlOjEsCisgICAgICBkYWJpdHM6CTEyfSwKKwl7CisJICAgICAgbmFtZToJImR0MjgwNSIsCisJICAgICAgYm9hcmRjb2RlOjB4MTIsCisJICAgICAgYWRfZGlmZjoJMSwKKwkgICAgICBhZF9jaGFuOgkxNiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2V0eXBlOjAsCisgICAgICBkYWJpdHM6CTEyfSwKKwl7CisJICAgICAgbmFtZToJImR0MjgwNS81NzE2YSIsCisJICAgICAgYm9hcmRjb2RlOjB4OTIsCisJICAgICAgYWRfZGlmZjoJMSwKKwkgICAgICBhZF9jaGFuOgkxNiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFkcmFuZ2V0eXBlOjEsCisgICAgICBkYWJpdHM6CTEyfSwKKwl7CisJICAgICAgbmFtZToJImR0MjgwOCIsCisJICAgICAgYm9hcmRjb2RlOjB4MjAsCisJICAgICAgYWRfZGlmZjoJMCwKKwkgICAgICBhZF9jaGFuOgkxNiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2V0eXBlOjIsCisgICAgICBkYWJpdHM6CTh9LAorCXsKKwkgICAgICBuYW1lOgkiZHQyODE4IiwKKwkgICAgICBib2FyZGNvZGU6MHhhMiwKKwkgICAgICBhZF9kaWZmOgkwLAorCSAgICAgIGFkX2NoYW46CTQsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZHJhbmdldHlwZTowLAorICAgICAgZGFiaXRzOgkxMn0sCisJeworCSAgICAgIG5hbWU6CSJkdDI4MDkiLAorCSAgICAgIGJvYXJkY29kZToweGIwLAorCSAgICAgIGFkX2RpZmY6CTAsCisJICAgICAgYWRfY2hhbjoJOCwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2V0eXBlOjEsCisgICAgICBkYWJpdHM6CTEyfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzICgoc2l6ZW9mKGJvYXJkdHlwZXMpKS8oc2l6ZW9mKGJvYXJkdHlwZXNbMF0pKSkKKyNkZWZpbmUgYm9hcmR0eXBlICgqKGNvbnN0IHN0cnVjdCBkdDI4MDFfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IGR0MjgwMV9wcml2YXRlIHsKKworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpkYWNfcmFuZ2VfdHlwZXNbMl07CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGR0MjgwMV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGR0MjgwMV9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZHQyODAxX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkdDI4MDFfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkdDI4MDFfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkdDI4MDFfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qIFRoZXNlIGFyZSB0aGUgbG93LWxldmVsIHJvdXRpbmVzOgorICAgd3JpdGVjb21tYW5kOiB3cml0ZSBhIGNvbW1hbmQgdG8gdGhlIGJvYXJkCisgICB3cml0ZWRhdGE6IHdyaXRlIGRhdGEgYnl0ZQorICAgcmVhZGRhdGE6IHJlYWQgZGF0YSBieXRlCisgKi8KKworLyogT25seSBjaGVja3MgRGF0YU91dFJlYWR5LWZsYWcsIG5vdCB0aGUgUmVhZHktZmxhZyBhcyBpdCBpcyBkb25lCisgICBpbiB0aGUgZXhhbXBsZXMgb2YgdGhlIG1hbnVhbC4gSSBkb24ndCBzZWUgd2h5IHRoaXMgc2hvdWxkIGJlCisgICBuZWNlc3NhcnkuICovCitzdGF0aWMgaW50IGR0MjgwMV9yZWFkZGF0YShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50ICpkYXRhKQoreworCWludCBzdGF0ID0gMDsKKwlpbnQgdGltZW91dCA9IERUMjgwMV9USU1FT1VUOworCisJZG8geworCQlzdGF0ID0gaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfU1RBVFVTKTsKKwkJaWYgKHN0YXQgJiAoRFRfU19DT01QT1NJVEVfRVJST1IgfCBEVF9TX1JFQURZKSkgeworCQkJcmV0dXJuIHN0YXQ7CisJCX0KKwkJaWYgKHN0YXQgJiBEVF9TX0RBVEFfT1VUX1JFQURZKSB7CisJCQkqZGF0YSA9IGluYl9wKGRldi0+aW9iYXNlICsgRFQyODAxX0RBVEEpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IHdoaWxlICgtLXRpbWVvdXQgPiAwKTsKKworCXJldHVybiAtRVRJTUU7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX3JlYWRkYXRhMihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50ICpkYXRhKQoreworCWludCBsYiwgaGI7CisJaW50IHJldDsKKworCXJldCA9IGR0MjgwMV9yZWFkZGF0YShkZXYsICZsYik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBkdDI4MDFfcmVhZGRhdGEoZGV2LCAmaGIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkqZGF0YSA9IChoYiA8PCA4KSArIGxiOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgwMV93cml0ZWRhdGEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBkYXRhKQoreworCWludCBzdGF0ID0gMDsKKwlpbnQgdGltZW91dCA9IERUMjgwMV9USU1FT1VUOworCisJZG8geworCQlzdGF0ID0gaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfU1RBVFVTKTsKKworCQlpZiAoc3RhdCAmIERUX1NfQ09NUE9TSVRFX0VSUk9SKSB7CisJCQlyZXR1cm4gc3RhdDsKKwkJfQorCQlpZiAoIShzdGF0ICYgRFRfU19EQVRBX0lOX0ZVTEwpKSB7CisJCQlvdXRiX3AoZGF0YSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgRFQyODAxX0RBVEEpOworCQkJcmV0dXJuIDA7CisJCX0KKyNpZiAwCisJCWlmIChzdGF0ICYgRFRfU19SRUFEWSkgeworCQkJcHJpbnRrKCJkdDI4MDE6IHJlYWR5IGZsYWcgc2V0IChiYWQhKSBpbiBkdDI4MDFfd3JpdGVkYXRhKClcbiIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKyNlbmRpZgorCX0gd2hpbGUgKC0tdGltZW91dCA+IDApOworCisJcmV0dXJuIC1FVElNRTsKK30KKworc3RhdGljIGludCBkdDI4MDFfd3JpdGVkYXRhMihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IGR0MjgwMV93cml0ZWRhdGEoZGV2LCBkYXRhICYgMHhmZik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gZHQyODAxX3dyaXRlZGF0YShkZXYsIChkYXRhID4+IDgpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgwMV93YWl0X2Zvcl9yZWFkeShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgdGltZW91dCA9IERUMjgwMV9USU1FT1VUOworCWludCBzdGF0OworCisJc3RhdCA9IGluYl9wKGRldi0+aW9iYXNlICsgRFQyODAxX1NUQVRVUyk7CisJaWYgKHN0YXQgJiBEVF9TX1JFQURZKSB7CisJCXJldHVybiAwOworCX0KKwlkbyB7CisJCXN0YXQgPSBpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9TVEFUVVMpOworCisJCWlmIChzdGF0ICYgRFRfU19DT01QT1NJVEVfRVJST1IpIHsKKwkJCXJldHVybiBzdGF0OworCQl9CisJCWlmIChzdGF0ICYgRFRfU19SRUFEWSkgeworCQkJcmV0dXJuIDA7CisJCX0KKwl9IHdoaWxlICgtLXRpbWVvdXQgPiAwKTsKKworCXJldHVybiAtRVRJTUU7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX3dyaXRlY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY29tbWFuZCkKK3sKKwlpbnQgc3RhdDsKKworCWR0MjgwMV93YWl0X2Zvcl9yZWFkeShkZXYpOworCisJc3RhdCA9IGluYl9wKGRldi0+aW9iYXNlICsgRFQyODAxX1NUQVRVUyk7CisJaWYgKHN0YXQgJiBEVF9TX0NPTVBPU0lURV9FUlJPUikgeworCQlwcmludGsoImR0MjgwMTogY29tcG9zaXRlLWVycm9yIGluIGR0MjgwMV93cml0ZWNtZCgpLCBpZ25vcmluZ1xuIik7CisJfQorCWlmICghKHN0YXQgJiBEVF9TX1JFQURZKSkgeworCQlwcmludGsoImR0MjgwMTogIXJlYWR5IGluIGR0MjgwMV93cml0ZWNtZCgpLCBpZ25vcmluZ1xuIik7CisJfQorCW91dGJfcChjb21tYW5kLCBkZXYtPmlvYmFzZSArIERUMjgwMV9DTUQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBib2FyZF9jb2RlID0gMDsKKwl1bnNpZ25lZCBpbnQgc3RhdDsKKwlpbnQgdGltZW91dDsKKworCURQUklOVEsoImR0MjgwMTogcmVzZXR0aW5nIGJvYXJkLi4uXG4iKTsKKwlEUFJJTlRLKCJmaW5nZXJwcmludDogMHglMDJ4IDB4JTAyeFxuIiwgaW5iX3AoZGV2LT5pb2Jhc2UpLAorCQlpbmJfcChkZXYtPmlvYmFzZSArIDEpKTsKKworCS8qIHB1bGwgcmFuZG9tIGRhdGEgZnJvbSBkYXRhIHBvcnQgKi8KKwlpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9EQVRBKTsKKwlpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9EQVRBKTsKKwlpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9EQVRBKTsKKwlpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9EQVRBKTsKKworCURQUklOVEsoImR0MjgwMTogc3RvcFxuIik7CisJLy9kdDI4MDFfd3JpdGVjbWQoZGV2LERUX0NfU1RPUCk7CisJb3V0Yl9wKERUX0NfU1RPUCwgZGV2LT5pb2Jhc2UgKyBEVDI4MDFfQ01EKTsKKworCS8vZHQyODAxX3dhaXRfZm9yX3JlYWR5KGRldik7CisJY29tZWRpX3VkZWxheSgxMDApOworCXRpbWVvdXQgPSAxMDAwMDsKKwlkbyB7CisJCXN0YXQgPSBpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9TVEFUVVMpOworCQlpZiAoc3RhdCAmIERUX1NfUkVBRFkpCisJCQlicmVhazsKKwl9IHdoaWxlICh0aW1lb3V0LS0pOworCWlmICghdGltZW91dCkgeworCQlwcmludGsoImR0MjgwMTogdGltZW91dCAxIHN0YXR1cz0weCUwMnhcbiIsIHN0YXQpOworCX0KKwkvL3ByaW50aygiZHQyODAxOiByZWFkaW5nIGR1bW15XG4iKTsKKwkvL2R0MjgwMV9yZWFkZGF0YShkZXYsJmJvYXJkX2NvZGUpOworCisJRFBSSU5USygiZHQyODAxOiByZXNldFxuIik7CisJb3V0Yl9wKERUX0NfUkVTRVQsIGRldi0+aW9iYXNlICsgRFQyODAxX0NNRCk7CisJLy9kdDI4MDFfd3JpdGVjbWQoZGV2LERUX0NfUkVTRVQpOworCisJY29tZWRpX3VkZWxheSgxMDApOworCXRpbWVvdXQgPSAxMDAwMDsKKwlkbyB7CisJCXN0YXQgPSBpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9TVEFUVVMpOworCQlpZiAoc3RhdCAmIERUX1NfUkVBRFkpCisJCQlicmVhazsKKwl9IHdoaWxlICh0aW1lb3V0LS0pOworCWlmICghdGltZW91dCkgeworCQlwcmludGsoImR0MjgwMTogdGltZW91dCAyIHN0YXR1cz0weCUwMnhcbiIsIHN0YXQpOworCX0KKworCURQUklOVEsoImR0MjgwMTogcmVhZGluZyBjb2RlXG4iKTsKKwlkdDI4MDFfcmVhZGRhdGEoZGV2LCAmYm9hcmRfY29kZSk7CisKKwlEUFJJTlRLKCJkdDI4MDE6IG9rLiAgY29kZT0weCUwMnhcbiIsIGJvYXJkX2NvZGUpOworCisJcmV0dXJuIGJvYXJkX2NvZGU7Cit9CisKK3N0YXRpYyBpbnQgcHJvYmVfbnVtYmVyX29mX2FpX2NoYW5zKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBuX2NoYW5zOworCWludCBzdGF0OworCWludCBkYXRhOworCisJZm9yIChuX2NoYW5zID0gMDsgbl9jaGFucyA8IDE2OyBuX2NoYW5zKyspIHsKKwkJc3RhdCA9IGR0MjgwMV93cml0ZWNtZChkZXYsIERUX0NfUkVBRF9BRElNKTsKKwkJZHQyODAxX3dyaXRlZGF0YShkZXYsIDApOworCQlkdDI4MDFfd3JpdGVkYXRhKGRldiwgbl9jaGFucyk7CisJCXN0YXQgPSBkdDI4MDFfcmVhZGRhdGEyKGRldiwgJmRhdGEpOworCisJCWlmIChzdGF0KQorCQkJYnJlYWs7CisJfQorCisJZHQyODAxX3Jlc2V0KGRldik7CisJZHQyODAxX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gbl9jaGFuczsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpkYWNfcmFuZ2VfdGFibGVbXSA9IHsKKwkmcmFuZ2VfYmlwb2xhcjEwLAorCSZyYW5nZV9iaXBvbGFyNSwKKwkmcmFuZ2VfYmlwb2xhcjJfNSwKKwkmcmFuZ2VfdW5pcG9sYXIxMCwKKwkmcmFuZ2VfdW5pcG9sYXI1Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmRhY19yYW5nZV9sa3VwKGludCBvcHQpCit7CisJaWYgKG9wdCA8IDAgfHwgb3B0ID4gNSkKKwkJcmV0dXJuICZyYW5nZV91bmtub3duOworCXJldHVybiBkYWNfcmFuZ2VfdGFibGVbb3B0XTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphaV9yYW5nZV9sa3VwKGludCB0eXBlLCBpbnQgb3B0KQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgMDoKKwkJcmV0dXJuIChvcHQpID8KKwkJCSZyYW5nZV9kdDI4MDFfYWlfcGdsX3VuaXBvbGFyIDoKKwkJCSZyYW5nZV9kdDI4MDFfYWlfcGdsX2JpcG9sYXI7CisJY2FzZSAxOgorCQlyZXR1cm4gKG9wdCkgPyAmcmFuZ2VfdW5pcG9sYXIxMCA6ICZyYW5nZV9iaXBvbGFyMTA7CisJY2FzZSAyOgorCQlyZXR1cm4gJnJhbmdlX3VuaXBvbGFyNTsKKwl9CisJcmV0dXJuICZyYW5nZV91bmtub3duOworfQorCisvKgorICAgb3B0aW9uczoKKwlbMF0gLSBpL28gYmFzZQorCVsxXSAtIHVudXNlZAorCVsyXSAtIGEvZCAwPWRpZmZlcmVudGlhbCwgMT1zaW5nbGUtZW5kZWQKKwlbM10gLSBhL2QgcmFuZ2UgMD1bLTEwLDEwXSwgMT1bMCwxMF0KKwlbNF0gLSBkYWMwIHJhbmdlIDA9Wy0xMCwxMF0sIDE9Wy01LDVdLCAyPVstMi41LDIuNV0gMz1bMCwxMF0sIDQ9WzAsNV0KKwlbNV0gLSBkYWMxIHJhbmdlIDA9Wy0xMCwxMF0sIDE9Wy01LDVdLCAyPVstMi41LDIuNV0gMz1bMCwxMF0sIDQ9WzAsNV0KKyovCitzdGF0aWMgaW50IGR0MjgwMV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJaW50IGJvYXJkX2NvZGUsIHR5cGU7CisJaW50IHJldCA9IDA7CisJaW50IG5fYWlfY2hhbnM7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgRFQyODAxX0lPU0laRSwgImR0MjgwMSIpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJJL08gcG9ydCBjb25mbGljdCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwkvKiBkbyBzb21lIGNoZWNraW5nICovCisKKwlib2FyZF9jb2RlID0gZHQyODAxX3Jlc2V0KGRldik7CisKKwkvKiBoZWguICBpZiBpdCBkaWRuJ3Qgd29yaywgdHJ5IGl0IGFnYWluLiAqLworCWlmICghYm9hcmRfY29kZSkKKwkJYm9hcmRfY29kZSA9IGR0MjgwMV9yZXNldChkZXYpOworCisJZm9yICh0eXBlID0gMDsgdHlwZSA8IG5fYm9hcmR0eXBlczsgdHlwZSsrKSB7CisJCWlmIChib2FyZHR5cGVzW3R5cGVdLmJvYXJkY29kZSA9PSBib2FyZF9jb2RlKQorCQkJZ290byBoYXZldHlwZTsKKwl9CisJcHJpbnRrKCJkdDI4MDE6IHVucmVjb2duaXplZCBib2FyZCBjb2RlPTB4JTAyeCwgY29udGFjdCBhdXRob3JcbiIsCisJCWJvYXJkX2NvZGUpOworCXR5cGUgPSAwOworCisgICAgICBoYXZldHlwZToKKwlkZXYtPmJvYXJkX3B0ciA9IGJvYXJkdHlwZXMgKyB0eXBlOworCXByaW50aygiZHQyODAxOiAlcyBhdCBwb3J0IDB4JWx4IiwgYm9hcmR0eXBlLm5hbWUsIGlvYmFzZSk7CisKKwluX2FpX2NoYW5zID0gcHJvYmVfbnVtYmVyX29mX2FpX2NoYW5zKGRldik7CisJcHJpbnRrKCIgKGFpIGNoYW5uZWxzID0gJWQpIiwgbl9haV9jaGFucyk7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZHQyODAxX3ByaXZhdGUpKSkgPCAwKQorCQlnb3RvIG91dDsKKworCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkdHlwZS5uYW1lOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYWkgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisjaWYgMQorCXMtPm5fY2hhbiA9IG5fYWlfY2hhbnM7CisjZWxzZQorCWlmIChpdC0+b3B0aW9uc1syXSkKKwkJcy0+bl9jaGFuID0gYm9hcmR0eXBlLmFkX2NoYW47CisJZWxzZQorCQlzLT5uX2NoYW4gPSBib2FyZHR5cGUuYWRfY2hhbiAvIDI7CisjZW5kaWYKKwlzLT5tYXhkYXRhID0gKDEgPDwgYm9hcmR0eXBlLmFkYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gYWlfcmFuZ2VfbGt1cChib2FyZHR5cGUuYWRyYW5nZXR5cGUsIGl0LT5vcHRpb25zWzNdKTsKKwlzLT5pbnNuX3JlYWQgPSBkdDI4MDFfYWlfaW5zbl9yZWFkOworCisJcysrOworCS8qIGFvIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMjsKKwlzLT5tYXhkYXRhID0gKDEgPDwgYm9hcmR0eXBlLmRhYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBkZXZwcml2LT5kYWNfcmFuZ2VfdHlwZXM7CisJZGV2cHJpdi0+ZGFjX3JhbmdlX3R5cGVzWzBdID0gZGFjX3JhbmdlX2xrdXAoaXQtPm9wdGlvbnNbNF0pOworCWRldnByaXYtPmRhY19yYW5nZV90eXBlc1sxXSA9IGRhY19yYW5nZV9sa3VwKGl0LT5vcHRpb25zWzVdKTsKKwlzLT5pbnNuX3JlYWQgPSBkdDI4MDFfYW9faW5zbl9yZWFkOworCXMtPmluc25fd3JpdGUgPSBkdDI4MDFfYW9faW5zbl93cml0ZTsKKworCXMrKzsKKwkvKiAxc3QgZGlnaXRhbCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gZHQyODAxX2Rpb19pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBkdDI4MDFfZGlvX2luc25fY29uZmlnOworCisJcysrOworCS8qIDJuZCBkaWdpdGFsIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDg7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2JpdHMgPSBkdDI4MDFfZGlvX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IGR0MjgwMV9kaW9faW5zbl9jb25maWc7CisKKwlyZXQgPSAwOworICAgICAgb3V0OgorCXByaW50aygiXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBEVDI4MDFfSU9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgwMV9lcnJvcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IHN0YXQpCit7CisJaWYgKHN0YXQgPCAwKSB7CisJCWlmIChzdGF0ID09IC1FVElNRSkgeworCQkJcHJpbnRrKCJkdDI4MDE6IHRpbWVvdXRcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCJkdDI4MDE6IGVycm9yICVkXG4iLCBzdGF0KTsKKwkJfQorCQlyZXR1cm4gc3RhdDsKKwl9CisJcHJpbnRrKCJkdDI4MDE6IGVycm9yIHN0YXR1cyAweCUwMngsIHJlc2V0dGluZy4uLlxuIiwgc3RhdCk7CisKKwlkdDI4MDFfcmVzZXQoZGV2KTsKKwlkdDI4MDFfcmVzZXQoZGV2KTsKKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IGR0MjgwMV9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBkOworCWludCBzdGF0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlzdGF0ID0gZHQyODAxX3dyaXRlY21kKGRldiwgRFRfQ19SRUFEX0FESU0pOworCQlkdDI4MDFfd3JpdGVkYXRhKGRldiwgQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpKTsKKwkJZHQyODAxX3dyaXRlZGF0YShkZXYsIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKKwkJc3RhdCA9IGR0MjgwMV9yZWFkZGF0YTIoZGV2LCAmZCk7CisKKwkJaWYgKHN0YXQgIT0gMCkKKwkJCXJldHVybiBkdDI4MDFfZXJyb3IoZGV2LCBzdGF0KTsKKworCQlkYXRhW2ldID0gZDsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkdDI4MDFfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZHQyODAxX2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWR0MjgwMV93cml0ZWNtZChkZXYsIERUX0NfV1JJVEVfREFJTSk7CisJZHQyODAxX3dyaXRlZGF0YShkZXYsIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKKwlkdDI4MDFfd3JpdGVkYXRhMihkZXYsIGRhdGFbMF0pOworCisJZGV2cHJpdi0+YW9fcmVhZGJhY2tbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldID0gZGF0YVswXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGR0MjgwMV9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgd2hpY2ggPSAwOworCisJaWYgKHMgPT0gZGV2LT5zdWJkZXZpY2VzICsgNCkKKwkJd2hpY2ggPSAxOworCisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCWR0MjgwMV93cml0ZWNtZChkZXYsIERUX0NfV1JJVEVfRElHKTsKKwkJZHQyODAxX3dyaXRlZGF0YShkZXYsIHdoaWNoKTsKKwkJZHQyODAxX3dyaXRlZGF0YShkZXYsIHMtPnN0YXRlKTsKKwl9CisJZHQyODAxX3dyaXRlY21kKGRldiwgRFRfQ19SRUFEX0RJRyk7CisJZHQyODAxX3dyaXRlZGF0YShkZXYsIHdoaWNoKTsKKwlkdDI4MDFfcmVhZGRhdGEoZGV2LCBkYXRhICsgMSk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkdDI4MDFfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgd2hpY2ggPSAwOworCisJaWYgKHMgPT0gZGV2LT5zdWJkZXZpY2VzICsgNCkKKwkJd2hpY2ggPSAxOworCisJLyogY29uZmlndXJlICovCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+aW9fYml0cyA9IDB4ZmY7CisJCWR0MjgwMV93cml0ZWNtZChkZXYsIERUX0NfU0VUX0RJR09VVCk7CisJfSBlbHNlIHsKKwkJcy0+aW9fYml0cyA9IDA7CisJCWR0MjgwMV93cml0ZWNtZChkZXYsIERUX0NfU0VUX0RJR0lOKTsKKwl9CisJZHQyODAxX3dyaXRlZGF0YShkZXYsIHdoaWNoKTsKKworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTkzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODExLmMKQEAgLTAsMCArMSw2MDQgQEAKKy8qCisgICBjb21lZGkvZHJpdmVycy9kdDI4MTEuYworICAgSGFyZHdhcmUgZHJpdmVyIGZvciBEYXRhIFRyYW5zbGF0aW9uIERUMjgxMQorCisgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICBIaXN0b3J5OgorICAgQmFzZSBWZXJzaW9uICAtIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICAgRGVjZW1iZXIgMTk5OCAtIFVwZGF0ZWQgdG8gd29yay4gIERhdmlkIGRvZXMgbm90IGhhdmUgYSBEVDI4MTEKKyAgIGJvYXJkIGFueSBsb25nZXIgc28gdGhpcyB3YXMgc3VmZmVyaW5nIGZyb20gYml0cm90LgorICAgVXBkYXRlZCBwZXJmb3JtZWQgYnkgLi4uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKy8qCitEcml2ZXI6IGR0MjgxMQorRGVzY3JpcHRpb246IERhdGEgVHJhbnNsYXRpb24gRFQyODExCitBdXRob3I6IGRzCitEZXZpY2VzOiBbRGF0YSBUcmFuc2xhdGlvbl0gRFQyODExLVBHTCAoZHQyODExLXBnbCksIERUMjgxMS1QR0ggKGR0MjgxMS1wZ2gpCitTdGF0dXM6IHdvcmtzCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUSwgYWx0aG91Z2ggdGhpcyBpcyBjdXJyZW50bHkgdW51c2VkCisgIFsyXSAtIEEvRCByZWZlcmVuY2UKKyAgICAgICAgICAwID0gc2lnbmxlLWVuZGVkCisgICAgICAgICAgMSA9IGRpZmZlcmVudGlhbAorCSAgMiA9IHBzZXVkby1kaWZmZXJlbnRpYWwgKGNvbW1vbiByZWZlcmVuY2UpCisgIFszXSAtIEEvRCByYW5nZQorICAgICAgICAgIDAgPSBbLTUsNV0KKwkgIDEgPSBbLTIuNSwyLjVdCisJICAyID0gWzAsNV0KKyAgWzRdIC0gRC9BIDAgcmFuZ2UgKHNhbWUgY2hvaWNlcykKKyAgWzRdIC0gRC9BIDEgcmFuZ2UgKHNhbWUgY2hvaWNlcykKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqZHJpdmVyX25hbWUgPSAiZHQyODExIjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxMV9wZ2hfYWlfNV91bmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAyLjUpLAorCQkJUkFOR0UoMCwgMS4yNSksCisJCQlSQU5HRSgwLCAwLjYyNSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxMV9wZ2hfYWlfMl81X2JpcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKC0yLjUsIDIuNSksCisJCQlSQU5HRSgtMS4yNSwgMS4yNSksCisJCQlSQU5HRSgtMC42MjUsIDAuNjI1KSwKKwkJCVJBTkdFKC0wLjMxMjUsIDAuMzEyNSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxMV9wZ2hfYWlfNV9iaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMi41LCAyLjUpLAorCQkJUkFOR0UoLTEuMjUsIDEuMjUpLAorCQkJUkFOR0UoLTAuNjI1LCAwLjYyNSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxMV9wZ2xfYWlfNV91bmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAwLjUpLAorCQkJUkFOR0UoMCwgMC4wNSksCisJCQlSQU5HRSgwLCAwLjAxKQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODExX3BnbF9haV8yXzVfYmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0wLjI1LCAwLjI1KSwKKwkJCVJBTkdFKC0wLjAyNSwgMC4wMjUpLAorCQkJUkFOR0UoLTAuMDA1LCAwLjAwNSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MjgxMV9wZ2xfYWlfNV9iaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMC41LCAwLjUpLAorCQkJUkFOR0UoLTAuMDUsIDAuMDUpLAorCQkJUkFOR0UoLTAuMDEsIDAuMDEpCisJfQorfTsKKworLyoKKworICAgMHgwMCAgICBBRENTUiBSL1cgIEEvRCBDb250cm9sL1N0YXR1cyBSZWdpc3RlcgorICAgYml0IDcgLSAoUikgMSBpbmRpY2F0ZXMgQS9EIGNvbnZlcnNpb24gZG9uZQorICAgcmVhZGluZyBBRERBVCBjbGVhcnMgYml0CisgICAoVykgaWdub3JlZAorICAgYml0IDYgLSAoUikgMSBpbmRpY2F0ZXMgQS9EIGVycm9yCisgICAoVykgaWdub3JlZAorICAgYml0IDUgLSAoUikgMSBpbmRpY2F0ZXMgQS9EIGJ1c3ksIGNsZWFyZWQgYXQgZW5kCisgICBvZiBjb252ZXJzaW9uCisgICAoVykgaWdub3JlZAorICAgYml0IDQgLSAoUikgMAorICAgKFcpCisgICBiaXQgMyAtIChSKSAwCisgICBiaXQgMiAtIChSL1cpIDEgaW5kaWNhdGVzIGludGVycnVwdHMgZW5hYmxlZAorICAgYml0cyAxLDAgLSAoUi9XKSBtb2RlIGJpdHMKKyAgIDAwICBzaW5nbGUgY29udmVyc2lvbiBvbiBBREdDUiBsb2FkCisgICAwMSAgY29udGludW91cyBjb252ZXJzaW9uLCBpbnRlcm5hbCBjbG9jaywKKyAgIChjbG9jayBlbmFibGVkIG9uIEFER0NSIGxvYWQpCisgICAxMCAgY29udGludW91cyBjb252ZXJzaW9uLCBpbnRlcm5hbCBjbG9jaywKKyAgIGV4dGVybmFsIHRyaWdnZXIKKyAgIDExICBjb250aW51b3VzIGNvbnZlcnNpb24sIGV4dGVybmFsIGNsb2NrLAorICAgZXh0ZXJuYWwgdHJpZ2dlcgorCisgICAweDAxICAgIEFER0NSIFIvVyBBL0QgR2Fpbi9DaGFubmVsIFJlZ2lzdGVyCisgICBiaXQgNiw3IC0gKFIvVykgZ2FpbiBzZWxlY3QKKyAgIDAwICBnYWluPTEsIGJvdGggUEdILCBQR0wgbW9kZWxzCisgICAwMSAgZ2Fpbj0yIFBHSCwgMTAgUEdMCisgICAxMCAgZ2Fpbj00IFBHSCwgMTAwIFBHTAorICAgMTEgIGdhaW49OCBQR0gsIDUwMCBQR0wKKyAgIGJpdCA0LDUgLSByZXNlcnZlZAorICAgYml0IDMtMCAtIChSL1cpIGNoYW5uZWwgc2VsZWN0CisgICBjaGFubmVsIG51bWJlciBmcm9tIDAtMTUKKworICAgMHgwMiwweDAzIChSKSBBRERBVCBBL0QgRGF0YSBSZWdpc3RlcgorICAgKFcpIERBREFUMCBEL0EgRGF0YSBSZWdpc3RlciAwCisgICAweDAyIGxvdyBieXRlCisgICAweDAzIGhpZ2ggYnl0ZQorCisgICAweDA0LDB4MDUgKFcpIERBREFUMCBEL0EgRGF0YSBSZWdpc3RlciAxCisKKyAgIDB4MDYgKFIpIERJTzAgRGlnaXRhbCBJbnB1dCBQb3J0IDAKKyAgIChXKSBESU8xIERpZ2l0YWwgT3V0cHV0IFBvcnQgMQorCisgICAweDA3IFRNUkNUUiAoUi9XKSBUaW1lci9Db3VudGVyIFJlZ2lzdGVyCisgICBiaXRzIDYsNyAtIHJlc2VydmVkCisgICBiaXRzIDUtMyAtIFRpbWVyIGZyZXF1ZW5jeSBjb250cm9sIChtYW50aXNzYSkKKyAgIDU0MyAgZGl2aXNvciAgZnJlcWVuY3kgKGtIeikKKyAgIDAwMCAgMSAgICAgICAgNjAwCisgICAwMDEgIDEwICAgICAgIDYwCisgICAwMTAgIDIgICAgICAgIDMwMAorICAgMDExICAzICAgICAgICAyMDAKKyAgIDEwMCAgNCAgICAgICAgMTUwCisgICAxMDEgIDUgICAgICAgIDEyMAorICAgMTEwICA2ICAgICAgICAxMDAKKyAgIDExMSAgMTIgICAgICAgNTAKKyAgIGJpdHMgMi0wIC0gVGltZXIgZnJlcXVlbmN5IGNvbnRyb2wgKGV4cG9uZW50KQorICAgMjEwICBtdWx0aXBseSBkaXZpc29yL2RpdmlkZSBmcmVxdWVuY3kgYnkKKyAgIDAwMCAgMQorICAgMDAxICAxMAorICAgMDEwICAxMDAKKyAgIDAxMSAgMTAwMAorICAgMTAwICAxMDAwMAorICAgMTAxICAxMDAwMDAKKyAgIDExMCAgMTAwMDAwMAorICAgMTExICAxMDAwMDAwMAorCisgKi8KKworI2RlZmluZSBUSU1FT1VUIDEwMDAwCisKKyNkZWZpbmUgRFQyODExX1NJWkUgOAorCisjZGVmaW5lIERUMjgxMV9BRENTUiAwCisjZGVmaW5lIERUMjgxMV9BREdDUiAxCisjZGVmaW5lIERUMjgxMV9BRERBVExPIDIKKyNkZWZpbmUgRFQyODExX0FEREFUSEkgMworI2RlZmluZSBEVDI4MTFfREFEQVQwTE8gMgorI2RlZmluZSBEVDI4MTFfREFEQVQwSEkgMworI2RlZmluZSBEVDI4MTFfREFEQVQxTE8gNAorI2RlZmluZSBEVDI4MTFfREFEQVQxSEkgNQorI2RlZmluZSBEVDI4MTFfRElPIDYKKyNkZWZpbmUgRFQyODExX1RNUkNUUiA3CisKKy8qCisgKiBmbGFncworICovCisKKy8qIEFEQ1NSICovCisKKyNkZWZpbmUgRFQyODExX0FERE9ORSAgIDB4ODAKKyNkZWZpbmUgRFQyODExX0FERVJST1IgIDB4NDAKKyNkZWZpbmUgRFQyODExX0FEQlVTWSAgIDB4MjAKKyNkZWZpbmUgRFQyODExX0NMUkVSUk9SIDB4MTAKKyNkZWZpbmUgRFQyODExX0lOVEVOQiAgIDB4MDQKKyNkZWZpbmUgRFQyODExX0FETU9ERSAgIDB4MDMKKworc3RydWN0IGR0MjgxMV9ib2FyZCB7CisKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpiaXBfNTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYmlwXzJfNTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqdW5pcF81OworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkdDI4MTFfYm9hcmQgYm9hcmR0eXBlc1tdID0geworCXsiZHQyODExLXBnaCIsCisJCQkmcmFuZ2VfZHQyODExX3BnaF9haV81X2JpcG9sYXIsCisJCQkmcmFuZ2VfZHQyODExX3BnaF9haV8yXzVfYmlwb2xhciwKKwkJCSZyYW5nZV9kdDI4MTFfcGdoX2FpXzVfdW5pcG9sYXIsCisJCX0sCisJeyJkdDI4MTEtcGdsIiwKKwkJCSZyYW5nZV9kdDI4MTFfcGdsX2FpXzVfYmlwb2xhciwKKwkJCSZyYW5nZV9kdDI4MTFfcGdsX2FpXzJfNV9iaXBvbGFyLAorCQkJJnJhbmdlX2R0MjgxMV9wZ2xfYWlfNV91bmlwb2xhciwKKwkJfSwKK307CisKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBkdDI4MTFfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIGludCBkdDI4MTFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZHQyODExX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2R0MjgxMSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkdDI4MTEiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmR0MjgxMV9hdHRhY2gsCisgICAgICBkZXRhY2g6ZHQyODExX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoYm9hcmR0eXBlcykgLyBzaXplb2Yoc3RydWN0IGR0MjgxMV9ib2FyZCksCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBkdDI4MTFfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kdDI4MTEpOworCitzdGF0aWMgaW50IGR0MjgxMV9haV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGR0MjgxMV9hb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGR0MjgxMV9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZHQyODExX2RpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBkdDI4MTFfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK2VudW0geyBjYXJkXzI4MTFfcGdoLCBjYXJkXzI4MTFfcGdsIH07CisKK3N0cnVjdCBkdDI4MTFfcHJpdmF0ZSB7CisJaW50IG50cmlnOworCWludCBjdXJhZGNoYW47CisJZW51bSB7CisJCWFkY19zaW5nbGVlbmRlZCwgYWRjX2RpZmYsIGFkY19wc2V1ZG9fZGlmZgorCX0gYWRjX211eDsKKwllbnVtIHsKKwkJZGFjX2JpcG9sYXJfNSwgZGFjX2JpcG9sYXJfMl81LCBkYWNfdW5pcG9sYXJfNQorCX0gZGFjX3JhbmdlWzJdOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZV90eXBlX2xpc3RbMl07CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGR0MjgxMV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmRhY19yYW5nZV90eXBlc1tdID0geworCSZyYW5nZV9iaXBvbGFyNSwKKwkmcmFuZ2VfYmlwb2xhcjJfNSwKKwkmcmFuZ2VfdW5pcG9sYXI1Cit9OworCisjZGVmaW5lIERUMjgxMV9USU1FT1VUIDUKKworI2lmIDAKK3N0YXRpYyBpcnFyZXR1cm5fdCBkdDI4MTFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJaW50IGxvLCBoaTsKKwlpbnQgZGF0YTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlsbyA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9BRERBVExPKTsKKwloaSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9BRERBVEhJKTsKKworCWRhdGEgPSBsbyArIChoaSA8PCA4KTsKKworCWlmICghKC0tZGV2cHJpdi0+bnRyaWcpKSB7CisJCS8qIGhvdyB0byB0dXJuIG9mZiBhY3F1aXNpdGlvbiAqLworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9TQl9FT0E7CisJfQorCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbmRpZgorCisvKgorICBvcHRpb25zWzBdICAgQm9hcmQgYmFzZSBhZGRyZXNzCisgIG9wdGlvbnNbMV0gICBJUlEKKyAgb3B0aW9uc1syXSAgIElucHV0IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgMCA9PSBzaW5nbGUtZW5kZWQKKyAgICAgICAgICAgICAgICAgMSA9PSBkaWZmZXJlbnRpYWwKKyAgICAgICAgICAgICAgICAgMiA9PSBwc2V1ZG8tZGlmZmVyZW50aWFsCisgIG9wdGlvbnNbM10gICBBbmFsb2cgaW5wdXQgcmFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAwID09IGJpcG9sYXIgNSAgKC01ViAtLSArNVYpCisgICAgICAgICAgICAgICAgIDEgPT0gYmlwb2xhciAyLjVWICAoLTIuNVYgLS0gKzIuNVYpCisgICAgICAgICAgICAgICAgIDIgPT0gdW5pcG9sYXIgNVYgICgwViAtLSArNVYpCisgIG9wdGlvbnNbNF0gICBBbmFsb2cgb3V0cHV0IDAgcmFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAwID09IGJpcG9sYXIgNSAgKC01ViAtLSArNVYpCisgICAgICAgICAgICAgICAgIDEgPT0gYmlwb2xhciAyLjVWICAoLTIuNVYgLS0gKzIuNVYpCisgICAgICAgICAgICAgICAgIDIgPT0gdW5pcG9sYXIgNVYgICgwViAtLSArNVYpCisgIG9wdGlvbnNbNV0gICBBbmFsb2cgb3V0cHV0IDEgcmFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAwID09IGJpcG9sYXIgNSAgKC01ViAtLSArNVYpCisgICAgICAgICAgICAgICAgIDEgPT0gYmlwb2xhciAyLjVWICAoLTIuNVYgLS0gKzIuNVYpCisgICAgICAgICAgICAgICAgIDIgPT0gdW5pcG9sYXIgNVYgICgwViAtLSArNVYpCisqLworCitzdGF0aWMgaW50IGR0MjgxMV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJLy9pbnQgaSwgaXJxOworCS8vdW5zaWduZWQgbG9uZyBpcnFzOworCS8vbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4MTE6IGJhc2U9MHglMDRseFxuIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBEVDI4MTFfU0laRSwgZHJpdmVyX25hbWUpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisjaWYgMAorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQURDU1IpOworCWNvbWVkaV91ZGVsYXkoMTAwKTsKKwlpID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODExX0FEREFUTE8pOworCWkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQUREQVRISSk7CisjZW5kaWYKKworI2lmIDAKKwlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwlpZiAoaXJxIDwgMCkgeworCQlzYXZlX2ZsYWdzKGZsYWdzKTsKKwkJc3RpKCk7CisJCWlycXMgPSBwcm9iZV9pcnFfb24oKTsKKworCQlvdXRiKERUMjgxMV9DTFJFUlJPUiB8IERUMjgxMV9JTlRFTkIsCisJCQlkZXYtPmlvYmFzZSArIERUMjgxMV9BRENTUik7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQURHQ1IpOworCisJCWNvbWVkaV91ZGVsYXkoMTAwKTsKKworCQlpcnEgPSBwcm9iZV9pcnFfb2ZmKGlycXMpOworCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKworCQkvKm91dGIoRFQyODExX0NMUkVSUk9SfERUMjgxMV9JTlRFTkIsZGV2LT5pb2Jhc2UrRFQyODExX0FEQ1NSKTsgKi8KKworCQlpZiAoaW5iKGRldi0+aW9iYXNlICsgRFQyODExX0FEQ1NSKSAmIERUMjgxMV9BREVSUk9SKSB7CisJCQlwcmludGsoImVycm9yIHByb2JpbmcgaXJxIChiYWQpIFxuIik7CisJCX0KKwkJZGV2LT5pcnEgPSAwOworCQlpZiAoaXJxID4gMCkgeworCQkJaSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9BRERBVExPKTsKKwkJCWkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQUREQVRISSk7CisJCQlwcmludGsoIihpcnEgPSAlZClcbiIsIGlycSk7CisJCQlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBkdDI4MTFfaW50ZXJydXB0LCAwLAorCQkJCWRyaXZlcl9uYW1lLCBkZXYpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0dXJuIC1FSU87CisJCQlkZXYtPmlycSA9IGlycTsKKwkJfSBlbHNlIGlmIChpcnEgPT0gMCkgeworCQkJcHJpbnRrKCIobm8gaXJxKVxuIik7CisJCX0gZWxzZSB7CisJCQlwcmludGsoIiggbXVsdGlwbGUgaXJxJ3MgLS0gdGhpcyBpcyBiYWQhIClcbiIpOworCQl9CisJfQorI2VuZGlmCisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZHQyODExX3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCXN3aXRjaCAoaXQtPm9wdGlvbnNbMl0pIHsKKwljYXNlIDA6CisJCWRldnByaXYtPmFkY19tdXggPSBhZGNfc2luZ2xlZW5kZWQ7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGV2cHJpdi0+YWRjX211eCA9IGFkY19kaWZmOworCQlicmVhazsKKwljYXNlIDI6CisJCWRldnByaXYtPmFkY19tdXggPSBhZGNfcHNldWRvX2RpZmY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldnByaXYtPmFkY19tdXggPSBhZGNfc2luZ2xlZW5kZWQ7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKGl0LT5vcHRpb25zWzRdKSB7CisJY2FzZSAwOgorCQlkZXZwcml2LT5kYWNfcmFuZ2VbMF0gPSBkYWNfYmlwb2xhcl81OworCQlicmVhazsKKwljYXNlIDE6CisJCWRldnByaXYtPmRhY19yYW5nZVswXSA9IGRhY19iaXBvbGFyXzJfNTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkZXZwcml2LT5kYWNfcmFuZ2VbMF0gPSBkYWNfdW5pcG9sYXJfNTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2cHJpdi0+ZGFjX3JhbmdlWzBdID0gZGFjX2JpcG9sYXJfNTsKKwkJYnJlYWs7CisJfQorCXN3aXRjaCAoaXQtPm9wdGlvbnNbNV0pIHsKKwljYXNlIDA6CisJCWRldnByaXYtPmRhY19yYW5nZVsxXSA9IGRhY19iaXBvbGFyXzU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGV2cHJpdi0+ZGFjX3JhbmdlWzFdID0gZGFjX2JpcG9sYXJfMl81OworCQlicmVhazsKKwljYXNlIDI6CisJCWRldnByaXYtPmRhY19yYW5nZVsxXSA9IGRhY191bmlwb2xhcl81OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZwcml2LT5kYWNfcmFuZ2VbMV0gPSBkYWNfYmlwb2xhcl81OworCQlicmVhazsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBpbml0aWFsaXplIHRoZSBBREMgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gZGV2cHJpdi0+YWRjX211eCA9PSBhZGNfZGlmZiA/IDggOiAxNjsKKwlzLT5pbnNuX3JlYWQgPSBkdDI4MTFfYWlfaW5zbjsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CisJc3dpdGNoIChpdC0+b3B0aW9uc1szXSkgeworCWNhc2UgMDoKKwlkZWZhdWx0OgorCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPmJpcF81OworCQlicmVhazsKKwljYXNlIDE6CisJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+YmlwXzJfNTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnVuaXBfNTsKKwkJYnJlYWs7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogYW8gc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAyOworCXMtPmluc25fd3JpdGUgPSBkdDI4MTFfYW9faW5zbjsKKwlzLT5pbnNuX3JlYWQgPSBkdDI4MTFfYW9faW5zbl9yZWFkOworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5yYW5nZV90YWJsZV9saXN0ID0gZGV2cHJpdi0+cmFuZ2VfdHlwZV9saXN0OworCWRldnByaXYtPnJhbmdlX3R5cGVfbGlzdFswXSA9IGRhY19yYW5nZV90eXBlc1tkZXZwcml2LT5kYWNfcmFuZ2VbMF1dOworCWRldnByaXYtPnJhbmdlX3R5cGVfbGlzdFsxXSA9IGRhY19yYW5nZV90eXBlc1tkZXZwcml2LT5kYWNfcmFuZ2VbMV1dOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogZGkgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IGR0MjgxMV9kaV9pbnNuX2JpdHM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCS8qIGRvIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX2JpdHMgPSBkdDI4MTFfZG9faW5zbl9iaXRzOworCXMtPm1heGRhdGEgPSAxOworCXMtPnN0YXRlID0gMDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODExX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4MTE6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKwlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIERUMjgxMV9TSVpFKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdDI4MTFfYWlfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgdGltZW91dCA9IERUMjgxMV9USU1FT1VUOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlvdXRiKGNoYW4sIGRldi0+aW9iYXNlICsgRFQyODExX0FER0NSKTsKKworCQl3aGlsZSAodGltZW91dAorCQkJJiYgaW5iKGRldi0+aW9iYXNlICsgRFQyODExX0FEQ1NSKSAmIERUMjgxMV9BREJVU1kpCisJCQl0aW1lb3V0LS07CisJCWlmICghdGltZW91dCkKKwkJCXJldHVybiAtRVRJTUU7CisKKwkJZGF0YVtpXSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9BRERBVExPKTsKKwkJZGF0YVtpXSB8PSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQUREQVRISSkgPDwgODsKKwkJZGF0YVtpXSAmPSAweGZmZjsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworI2lmIDAKKy8qIFdvdy4gIFRoaXMgaXMgY29kZSBmcm9tIHRoZSBDb21lZGkgc3RvbmUgYWdlLiAgQnV0IGl0IGhhc24ndCBiZWVuCisgKiByZXBsYWNlZCwgc28gSSdsbCBsZXQgaXQgc3RheS4gKi8KK2ludCBkdDI4MTFfYWR0cmlnKGtkZXZfdCBtaW5vciwgY29tZWRpX2FkdHJpZyAqIGFkdHJpZykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gY29tZWRpX2RldmljZXMgKyBtaW5vcjsKKworCWlmIChhZHRyaWctPm4gPCAxKQorCQlyZXR1cm4gMDsKKwlkZXYtPmN1cmFkY2hhbiA9IGFkdHJpZy0+Y2hhbjsKKwlzd2l0Y2ggKGRldi0+aV9hZG1vZGUpIHsKKwljYXNlIENPTUVESV9NREVNQU5EOgorCQlkZXYtPm50cmlnID0gYWR0cmlnLT5uIC0gMTsKKwkJLypwcmludGsoImR0MjgxMTogQUQgc29mdCB0cmlnZ2VyXG4iKTsgKi8KKwkJLypvdXRiKERUMjgxMV9DTFJFUlJPUnxEVDI4MTFfSU5URU5CLGRldi0+aW9iYXNlK0RUMjgxMV9BRENTUik7ICovLyogbm90IG5lY2Nlc3NhcnkgKi8KKwkJb3V0YihkZXYtPmN1cmFkY2hhbiwgZGV2LT5pb2Jhc2UgKyBEVDI4MTFfQURHQ1IpOworCQlkb19nZXR0aW1lb2ZkYXkoJnRyaWd0aW1lKTsKKwkJYnJlYWs7CisJY2FzZSBDT01FRElfTUNPTlRTOgorCQlkZXYtPm50cmlnID0gYWR0cmlnLT5uOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGR0MjgxMV9hb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJb3V0YihkYXRhW2ldICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEVDI4MTFfREFEQVQwTE8gKyAyICogY2hhbik7CisJCW91dGIoKGRhdGFbaV0gPj4gOCkgJiAweGZmLAorCQkJZGV2LT5pb2Jhc2UgKyBEVDI4MTFfREFEQVQwSEkgKyAyICogY2hhbik7CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkdDI4MTFfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGR0MjgxMV9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxMV9ESU8pOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZHQyODExX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwlvdXRiKHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIERUMjgxMV9ESU8pOworCisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMyMDEzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTQuYwpAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9kdDI4MTQuYworICAgIEhhcmR3YXJlIGRyaXZlciBmb3IgRGF0YSBUcmFuc2xhdGlvbiBEVDI4MTQKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IGR0MjgxNAorRGVzY3JpcHRpb246IERhdGEgVHJhbnNsYXRpb24gRFQyODE0CitBdXRob3I6IGRzCitTdGF0dXM6IGNvbXBsZXRlCitEZXZpY2VzOiBbRGF0YSBUcmFuc2xhdGlvbl0gRFQyODE0IChkdDI4MTQpCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUQorCitUaGlzIGNhcmQgaGFzIDE2IGFuYWxvZyBpbnB1dHMgbXVsdGlwbGV4ZWQgb250byBhIDEyIGJpdCBBREMuICBUaGVyZQoraXMgYSBtaW5pbWFsbHkgdXNlZnVsIG9uYm9hcmQgY2xvY2suICBUaGUgYmFzZSBmcmVxdWVuY3kgZm9yIHRoZQorY2xvY2sgaXMgc2VsZWN0ZWQgYnkganVtcGVycywgYW5kIHRoZSBjbG9jayBkaXZpZGVyIGNhbiBiZSBzZWxlY3RlZAordmlhIHByb2dyYW1tZWQgSS9PLiAgVW5mb3J0dW5hdGVseSwgdGhlIGNsb2NrIGRpdmlkZXIgY2FuIG9ubHkgYmUKK2EgcG93ZXIgb2YgMTAsIGZyb20gMSB0byAxMF43LCBvZiB3aGljaCBvbmx5IDMgb3IgNCBhcmUgdXNlZnVsLiAgSW4KK2FkZGl0aW9uLCB0aGUgY2xvY2sgZG9lcyBub3Qgc2VlbSB0byBiZSB2ZXJ5IGFjY3VyYXRlLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2RlZmluZSBEVDI4MTRfU0laRSAyCisKKyNkZWZpbmUgRFQyODE0X0NTUiAwCisjZGVmaW5lIERUMjgxNF9EQVRBIDEKKworLyoKKyAqIGZsYWdzCisgKi8KKworI2RlZmluZSBEVDI4MTRfRklOSVNIIDB4ODAKKyNkZWZpbmUgRFQyODE0X0VSUiAweDQwCisjZGVmaW5lIERUMjgxNF9CVVNZIDB4MjAKKyNkZWZpbmUgRFQyODE0X0VOQiAweDEwCisjZGVmaW5lIERUMjgxNF9DSEFOTUFTSyAweDBmCisKK3N0YXRpYyBpbnQgZHQyODE0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGR0MjgxNF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kdDI4MTQgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZHQyODE0IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkdDI4MTRfYXR0YWNoLAorICAgICAgZGV0YWNoOmR0MjgxNF9kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2R0MjgxNCk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkdDI4MTRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldiBQVF9SRUdTX0FSRyk7CisKK3N0cnVjdCBkdDI4MTRfcHJpdmF0ZSB7CisKKwlpbnQgbnRyaWc7CisJaW50IGN1cmFkY2hhbjsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkdDI4MTRfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworI2RlZmluZSBEVDI4MTRfVElNRU9VVCAxMAorI2RlZmluZSBEVDI4MTRfTUFYX1NQRUVEIDEwMDAwMAkvKiBBcmJpdHJhcnkgMTAga2h6IGxpbWl0ICovCisKK3N0YXRpYyBpbnQgZHQyODE0X2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGksIGhpLCBsbzsKKwlpbnQgY2hhbjsKKwlpbnQgc3RhdHVzID0gMDsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJCW91dGIoY2hhbiwgZGV2LT5pb2Jhc2UgKyBEVDI4MTRfQ1NSKTsKKwkJZm9yIChpID0gMDsgaSA8IERUMjgxNF9USU1FT1VUOyBpKyspIHsKKwkJCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9DU1IpOworCQkJcHJpbnRrKCJkdDI4MTQ6IHN0YXR1czogJTAyeFxuIiwgc3RhdHVzKTsKKwkJCWNvbWVkaV91ZGVsYXkoMTApOworCQkJaWYgKHN0YXR1cyAmIERUMjgxNF9GSU5JU0gpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPj0gRFQyODE0X1RJTUVPVVQpIHsKKwkJCXByaW50aygiZHQyODE0OiBzdGF0dXM6ICUwMnhcbiIsIHN0YXR1cyk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCisJCWhpID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE0X0RBVEEpOworCQlsbyA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9EQVRBKTsKKworCQlkYXRhW25dID0gKGhpIDw8IDQpIHwgKGxvID4+IDQpOworCX0KKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IGR0MjgxNF9uc190b190aW1lcih1bnNpZ25lZCBpbnQgKm5zLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGY7CisKKwkvKiBYWFggaWdub3JlcyBmbGFncyAqLworCisJZiA9IDEwMDAwOwkJLyogbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICgoMiAqICgqbnMpKSA8IChmICogMTEpKQorCQkJYnJlYWs7CisJCWYgKj0gMTA7CisJfQorCisJKm5zID0gZjsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGR0MjgxNF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUjsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gMTAwMDAwMDAwMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMTAwMDAwMDAwMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgRFQyODE0X01BWF9TUEVFRCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gRFQyODE0X01BWF9TUEVFRDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoY21kLT5zdG9wX2FyZyA8IDIpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAyOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwlkdDI4MTRfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgxNF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaW50IGNoYW47CisJaW50IHRyaWd2YXI7CisKKwl0cmlndmFyID0KKwkJZHQyODE0X25zX3RvX3RpbWVyKCZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKworCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCisJZGV2cHJpdi0+bnRyaWcgPSBjbWQtPnN0b3BfYXJnOworCW91dGIoY2hhbiB8IERUMjgxNF9FTkIgfCAodHJpZ3ZhciA8PCA1KSwgZGV2LT5pb2Jhc2UgKyBEVDI4MTRfQ1NSKTsKKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgZHQyODE0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgaSwgaXJxOworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4MTQ6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgRFQyODE0X1NJWkUsICJkdDI4MTQiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCWRldi0+Ym9hcmRfbmFtZSA9ICJkdDI4MTQiOworCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIERUMjgxNF9DU1IpOworCWNvbWVkaV91ZGVsYXkoMTAwKTsKKwlpZiAoaW5iKGRldi0+aW9iYXNlICsgRFQyODE0X0NTUikgJiBEVDI4MTRfRVJSKSB7CisJCXByaW50aygicmVzZXQgZXJyb3IgKGZhdGFsKVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlpID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE0X0RBVEEpOworCWkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTRfREFUQSk7CisKKwlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKyNpZiAwCisJaWYgKGlycSA8IDApIHsKKwkJc2F2ZV9mbGFncyhmbGFncyk7CisJCXN0aSgpOworCQlpcnFzID0gcHJvYmVfaXJxX29uKCk7CisKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIERUMjgxNF9DU1IpOworCisJCWNvbWVkaV91ZGVsYXkoMTAwKTsKKworCQlpcnEgPSBwcm9iZV9pcnFfb2ZmKGlycXMpOworCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwkJaWYgKGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9DU1IpICYgRFQyODE0X0VSUikgeworCQkJcHJpbnRrKCJlcnJvciBwcm9iaW5nIGlycSAoYmFkKSBcbiIpOworCQl9CisKKwkJaSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9EQVRBKTsKKwkJaSA9IGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9EQVRBKTsKKwl9CisjZW5kaWYKKwlkZXYtPmlycSA9IDA7CisJaWYgKGlycSA+IDApIHsKKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGR0MjgxNF9pbnRlcnJ1cHQsIDAsICJkdDI4MTQiLCBkZXYpKSB7CisJCQlwcmludGsoIihpcnEgJWQgdW5hdmFpbGFibGUpXG4iLCBpcnEpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKCIoIGlycSA9ICVkIClcbiIsIGlycSk7CisJCQlkZXYtPmlycSA9IGlycTsKKwkJfQorCX0gZWxzZSBpZiAoaXJxID09IDApIHsKKwkJcHJpbnRrKCIobm8gaXJxKVxuIik7CisJfSBlbHNlIHsKKyNpZiAwCisJCXByaW50aygiKHByb2JlIHJldHVybmVkIG11bHRpcGxlIGlycXMtLWJhZClcbiIpOworI2Vsc2UKKwkJcHJpbnRrKCIoaXJxIHByb2JlIG5vdCBpbXBsZW1lbnRlZClcbiIpOworI2VuZGlmCisJfQorCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGR0MjgxNF9wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDE2OwkJLyogWFhYICovCisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5pbnNuX3JlYWQgPSBkdDI4MTRfYWlfaW5zbl9yZWFkOworCXMtPmRvX2NtZCA9IGR0MjgxNF9haV9jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IGR0MjgxNF9haV9jbWR0ZXN0OworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOwkvKiBYWFggKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgxNF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogZHQyODE0OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisJaWYgKGRldi0+aW9iYXNlKSB7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBEVDI4MTRfU0laRSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBkdDI4MTRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJaW50IGxvLCBoaTsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgZGF0YTsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCWhpID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE0X0RBVEEpOworCWxvID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE0X0RBVEEpOworCisJZGF0YSA9IChoaSA8PCA0KSB8IChsbyA+PiA0KTsKKworCWlmICghKC0tZGV2cHJpdi0+bnRyaWcpKSB7CisJCWludCBpOworCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEVDI4MTRfQ1NSKTsKKwkJLyogbm90ZTogdHVybmluZyBvZmYgdGltZWQgbW9kZSB0cmlnZ2VycyBhbm90aGVyCisJCSAgIHNhbXBsZS4gKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgRFQyODE0X1RJTUVPVVQ7IGkrKykgeworCQkJaWYgKGluYihkZXYtPmlvYmFzZSArIERUMjgxNF9DU1IpICYgRFQyODE0X0ZJTklTSCkKKwkJCQlicmVhazsKKwkJfQorCQlpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTRfREFUQSk7CisJCWluYihkZXYtPmlvYmFzZSArIERUMjgxNF9EQVRBKTsKKworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfQorCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2NlYzhhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNS5jCkBAIC0wLDAgKzEsMjY0IEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvZHQyODE1LmMKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgRGF0YSBUcmFuc2xhdGlvbiBEVDI4MTUKKworICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgQ29weXJpZ2h0IChDKSAxOTk5IEFuZGVycyBCbG9tZGVsbCA8YW5kZXJzLmJsb21kZWxsQGNvbnRyb2wubHRoLnNlPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgKi8KKy8qCitEcml2ZXI6IGR0MjgxNQorRGVzY3JpcHRpb246IERhdGEgVHJhbnNsYXRpb24gRFQyODE1CitBdXRob3I6IGRzCitTdGF0dXM6IG1vc3RseSBjb21wbGV0ZSwgdW50ZXN0ZWQKK0RldmljZXM6IFtEYXRhIFRyYW5zbGF0aW9uXSBEVDI4MTUgKGR0MjgxNSkKKworSSdtIG5vdCBzdXJlIGFueW9uZSBoYXMgZXZlciB0ZXN0ZWQgdGhpcyBib2FyZC4gIElmIHlvdSBoYXZlIGluZm9ybWF0aW9uCitjb250cmFyeSwgcGxlYXNlIHVwZGF0ZS4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEgKHVudXNlZCkKKyAgWzJdIC0gVm9sdGFnZSB1bmlwb2xhci9iaXBvbGFyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAwID09IHVuaXBvbGFyIDVWICAoMFYgLS0gKzVWKQorCSAgMSA9PSBiaXBvbGFyIDVWICAoLTVWIC0tICs1VikKKyAgWzNdIC0gQ3VycmVudCBvZmZzZXQgY29uZmlndXJhdGlvbgorICAgICAgICAgIDAgPT0gZGlzYWJsZWQgICgwbUEgLS0gKzMybUFWKQorICAgICAgICAgIDEgPT0gZW5hYmxlZCAgKCs0bUEgLS0gKzIwbUFWKQorICBbNF0gLSBGaXJtd2FyZSBwcm9ncmFtIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAwID09IHByb2dyYW0gMSAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisgICAgICAgICAgMSA9PSBwcm9ncmFtIDIgKHNlZSBtYW51YWwgdGFibGUgNS00KQorICAgICAgICAgIDIgPT0gcHJvZ3JhbSAzIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKyAgICAgICAgICAzID09IHByb2dyYW0gNCAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisgIFs1XSAtIEFuYWxvZyBvdXRwdXQgMCByYW5nZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgMCA9PSB2b2x0YWdlCisgICAgICAgICAgMSA9PSBjdXJyZW50CisgIFs2XSAtIEFuYWxvZyBvdXRwdXQgMSByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCisgIFs3XSAtIEFuYWxvZyBvdXRwdXQgMiByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCisgIFs4XSAtIEFuYWxvZyBvdXRwdXQgMyByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCisgIFs5XSAtIEFuYWxvZyBvdXRwdXQgNCByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCisgIFsxMF0gLSBBbmFsb2cgb3V0cHV0IDUgcmFuZ2UgY29uZmlndXJhdGlvbiAoc2FtZSBvcHRpb25zKQorICBbMTFdIC0gQW5hbG9nIG91dHB1dCA2IHJhbmdlIGNvbmZpZ3VyYXRpb24gKHNhbWUgb3B0aW9ucykKKyAgWzEyXSAtIEFuYWxvZyBvdXRwdXQgNyByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODE1X2FvXzMyX2N1cnJlbnQgPSB7IDEsIHsKKwkJCVJBTkdFX21BKDAsIDMyKQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODE1X2FvXzIwX2N1cnJlbnQgPSB7IDEsIHsKKwkJCVJBTkdFX21BKDQsIDIwKQorCX0KK307CisKKyNkZWZpbmUgRFQyODE1X1NJWkUgMgorCisjZGVmaW5lIERUMjgxNV9EQVRBIDAKKyNkZWZpbmUgRFQyODE1X1NUQVRVUyAxCisKK3N0YXRpYyBpbnQgZHQyODE1X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGR0MjgxNV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kdDI4MTUgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZHQyODE1IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkdDI4MTVfYXR0YWNoLAorICAgICAgZGV0YWNoOmR0MjgxNV9kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2R0MjgxNSk7CisKK3N0YXRpYyB2b2lkIGR0MjgxNV9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0cnVjdCBkdDI4MTVfcHJpdmF0ZSB7CisKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VfdHlwZV9saXN0WzhdOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1s4XTsKK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGR0MjgxNV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGR0MjgxNV93YWl0X2Zvcl9zdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBzdGF0dXMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJaWYgKGluYihkZXYtPmlvYmFzZSArIERUMjgxNV9TVEFUVVMpID09IHN0YXR1cykKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGR0MjgxNV9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkdDI4MTVfYW9faW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBsbywgaGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWxvID0gKChkYXRhW2ldICYgMHgwZikgPDwgNCkgfCAoY2hhbiA8PCAxKSB8IDB4MDE7CisJCWhpID0gKGRhdGFbaV0gJiAweGZmMCkgPj4gNDsKKworCQlzdGF0dXMgPSBkdDI4MTVfd2FpdF9mb3Jfc3RhdHVzKGRldiwgMHgwMCk7CisJCWlmIChzdGF0dXMgIT0gMCkgeworCQkJcnRfcHJpbnRrCisJCQkJKCJkdDI4MTU6IGZhaWxlZCB0byB3cml0ZSBsb3cgYnl0ZSBvbiAlZCByZWFzb24gJXhcbiIsCisJCQkJY2hhbiwgc3RhdHVzKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCQlvdXRiKGxvLCBkZXYtPmlvYmFzZSArIERUMjgxNV9EQVRBKTsKKworCQlzdGF0dXMgPSBkdDI4MTVfd2FpdF9mb3Jfc3RhdHVzKGRldiwgMHgxMCk7CisJCWlmIChzdGF0dXMgIT0gMHgxMCkgeworCQkJcnRfcHJpbnRrCisJCQkJKCJkdDI4MTU6IGZhaWxlZCB0byB3cml0ZSBoaWdoIGJ5dGUgb24gJWQgcmVhc29uICV4XG4iLAorCQkJCWNoYW4sIHN0YXR1cyk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisJcmV0dXJuIGk7Cit9CisKKy8qCisgIG9wdGlvbnNbMF0gICBCb2FyZCBiYXNlIGFkZHJlc3MKKyAgb3B0aW9uc1sxXSAgIElSUSAobm90IGFwcGxpY2FibGUpCisgIG9wdGlvbnNbMl0gICBWb2x0YWdlIHVuaXBvbGFyL2JpcG9sYXIgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAwID09IHVuaXBvbGFyIDVWICAoMFYgLS0gKzVWKQorCQkgMSA9PSBiaXBvbGFyIDVWICAoLTVWIC0tICs1VikKKyAgb3B0aW9uc1szXSAgIEN1cnJlbnQgb2Zmc2V0IGNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgMCA9PSBkaXNhYmxlZCAgKDBtQSAtLSArMzJtQVYpCisgICAgICAgICAgICAgICAgIDEgPT0gZW5hYmxlZCAgKCs0bUEgLS0gKzIwbUFWKQorICBvcHRpb25zWzRdICAgRmlybXdhcmUgcHJvZ3JhbSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgIDAgPT0gcHJvZ3JhbSAxIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKyAgICAgICAgICAgICAgICAgMSA9PSBwcm9ncmFtIDIgKHNlZSBtYW51YWwgdGFibGUgNS00KQorICAgICAgICAgICAgICAgICAyID09IHByb2dyYW0gMyAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisgICAgICAgICAgICAgICAgIDMgPT0gcHJvZ3JhbSA0IChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKyAgb3B0aW9uc1s1XSAgIEFuYWxvZyBvdXRwdXQgMCByYW5nZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgIDAgPT0gdm9sdGFnZQorICAgICAgICAgICAgICAgICAxID09IGN1cnJlbnQKKyAgb3B0aW9uc1s2XSAgIEFuYWxvZyBvdXRwdXQgMSByYW5nZSBjb25maWd1cmF0aW9uCisgIC4uLgorICBvcHRpb25zWzEyXSAgIEFuYWxvZyBvdXRwdXQgNyByYW5nZSBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgIDAgPT0gdm9sdGFnZQorICAgICAgICAgICAgICAgICAxID09IGN1cnJlbnQKKyAqLworCitzdGF0aWMgaW50IGR0MjgxNV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGk7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmN1cnJlbnRfcmFuZ2VfdHlwZSwgKnZvbHRhZ2VfcmFuZ2VfdHlwZTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IGR0MjgxNTogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBEVDI4MTVfU0laRSwgImR0MjgxNSIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSAiZHQyODE1IjsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZHQyODE1X3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlczsKKwkvKiBhbyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fd3JpdGUgPSBkdDI4MTVfYW9faW5zbjsKKwlzLT5pbnNuX3JlYWQgPSBkdDI4MTVfYW9faW5zbl9yZWFkOworCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBkZXZwcml2LT5yYW5nZV90eXBlX2xpc3Q7CisKKwljdXJyZW50X3JhbmdlX3R5cGUgPSAoaXQtPm9wdGlvbnNbM10pCisJCT8gJnJhbmdlX2R0MjgxNV9hb18yMF9jdXJyZW50IDogJnJhbmdlX2R0MjgxNV9hb18zMl9jdXJyZW50OworCXZvbHRhZ2VfcmFuZ2VfdHlwZSA9IChpdC0+b3B0aW9uc1syXSkKKwkJPyAmcmFuZ2VfYmlwb2xhcjUgOiAmcmFuZ2VfdW5pcG9sYXI1OworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJZGV2cHJpdi0+cmFuZ2VfdHlwZV9saXN0W2ldID0gKGl0LT5vcHRpb25zWzUgKyBpXSkKKwkJCT8gY3VycmVudF9yYW5nZV90eXBlIDogdm9sdGFnZV9yYW5nZV90eXBlOworCX0KKworCS8qIEluaXQgdGhlIDI4MTUgKi8KKwlvdXRiKDB4MDAsIGRldi0+aW9iYXNlICsgRFQyODE1X1NUQVRVUyk7CisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCS8qIFRoaXMgaXMgaW5jcmVkaWJseSBzbG93IChhcHByb3ggMjAgbXMpICovCisJCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwkJY29tZWRpX3VkZWxheSgxMDAwKTsKKwkJc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE1X1NUQVRVUyk7CisJCWlmIChzdGF0dXMgPT0gNCkgeworCQkJdW5zaWduZWQgaW50IHByb2dyYW07CisJCQlwcm9ncmFtID0gKGl0LT5vcHRpb25zWzRdICYgMHgzKSA8PCAzIHwgMHg3OworCQkJb3V0Yihwcm9ncmFtLCBkZXYtPmlvYmFzZSArIERUMjgxNV9EQVRBKTsKKwkJCXByaW50aygiLCBwcm9ncmFtOiAweCV4IChAdD0lZClcbiIsIHByb2dyYW0sIGkpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoc3RhdHVzICE9IDB4MDApIHsKKwkJCXByaW50aygiZHQyODE1OiB1bmV4cGVjdGVkIHN0YXR1cyAweCV4IChAdD0lZClcbiIsCisJCQkJc3RhdHVzLCBpKTsKKwkJCWlmIChzdGF0dXMgJiAweDYwKSB7CisJCQkJb3V0YigweDAwLCBkZXYtPmlvYmFzZSArIERUMjgxNV9TVEFUVVMpOworCQkJfQorCQl9CisJfQorCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR0MjgxNV9mcmVlX3Jlc291cmNlcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBEVDI4MTVfU0laRSk7Cit9CisKK3N0YXRpYyBpbnQgZHQyODE1X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4MTU6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlkdDI4MTVfZnJlZV9yZXNvdXJjZXMoZGV2KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYzM5NmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE3LmMKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvZHQyODE3LmMKKyAgICBIYXJkd2FyZSBkcml2ZXIgZm9yIERhdGEgVHJhbnNsYXRpb24gRFQyODE3CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBkdDI4MTcKK0Rlc2NyaXB0aW9uOiBEYXRhIFRyYW5zbGF0aW9uIERUMjgxNworQXV0aG9yOiBkcworU3RhdHVzOiBjb21wbGV0ZQorRGV2aWNlczogW0RhdGEgVHJhbnNsYXRpb25dIERUMjgxNyAoZHQyODE3KQorCitBIHZlcnkgc2ltcGxlIGRpZ2l0YWwgSS9PIGNhcmQuICBGb3VyIGJhbmtzIG9mIDggbGluZXMsIGVhY2ggYmFuaworaXMgY29uZmlndXJhYmxlIGZvciBpbnB1dCBvciBvdXRwdXQuICBPbmUgd29uZGVycyB3aHkgaXQgdGFrZXMgYQorNTAgcGFnZSBtYW51YWwgdG8gZGVzY3JpYmUgdGhpcyB0aGluZy4KKworVGhlIGRyaXZlciAod2hpY2gsIGJ0dywgaXMgbXVjaCBsZXNzIHRoYW4gNTAgcGFnZXMpIGhhcyAxIHN1YmRldmljZQord2l0aCAzMiBjaGFubmVscywgY29uZmlndXJhYmxlIGluIGdyb3VwcyBvZiA4LgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYmFzZSBhZGRyZXNzCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBEVDI4MTdfU0laRSA1CisKKyNkZWZpbmUgRFQyODE3X0NSIDAKKyNkZWZpbmUgRFQyODE3X0RBVEEgMQorCitzdGF0aWMgaW50IGR0MjgxN19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBkdDI4MTdfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZHQyODE3ID0geworICAgICAgZHJpdmVyX25hbWU6ImR0MjgxNyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZHQyODE3X2F0dGFjaCwKKyAgICAgIGRldGFjaDpkdDI4MTdfZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9kdDI4MTcpOworCitzdGF0aWMgaW50IGR0MjgxN19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBtYXNrOworCWludCBjaGFuOworCWludCBvZSA9IDA7CisKKwlpZiAoaW5zbi0+biAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAoY2hhbiA8IDgpIHsKKwkJbWFzayA9IDB4ZmY7CisJfSBlbHNlIGlmIChjaGFuIDwgMTYpIHsKKwkJbWFzayA9IDB4ZmYwMDsKKwl9IGVsc2UgaWYgKGNoYW4gPCAyNCkgeworCQltYXNrID0gMHhmZjAwMDA7CisJfSBlbHNlCisJCW1hc2sgPSAweGZmMDAwMDAwOworCWlmIChkYXRhWzBdKQorCQlzLT5pb19iaXRzIHw9IG1hc2s7CisJZWxzZQorCQlzLT5pb19iaXRzICY9IH5tYXNrOworCisJaWYgKHMtPmlvX2JpdHMgJiAweDAwMDAwMGZmKQorCQlvZSB8PSAweDE7CisJaWYgKHMtPmlvX2JpdHMgJiAweDAwMDBmZjAwKQorCQlvZSB8PSAweDI7CisJaWYgKHMtPmlvX2JpdHMgJiAweDAwZmYwMDAwKQorCQlvZSB8PSAweDQ7CisJaWYgKHMtPmlvX2JpdHMgJiAweGZmMDAwMDAwKQorCQlvZSB8PSAweDg7CisKKwlvdXRiKG9lLCBkZXYtPmlvYmFzZSArIERUMjgxN19DUik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkdDI4MTdfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGNoYW5nZWQ7CisKKwkvKiBJdCdzIHF1ZXN0aW9uYWJsZSB3aGV0aGVyIGl0IGlzIG1vcmUgaW1wb3J0YW50IGluCisJICogYSBkcml2ZXIgbGlrZSB0aGlzIHRvIGJlIGRldGVybWluaXN0aWMgb3IgZmFzdC4KKwkgKiBXZSBjaG9vc2UgZmFzdC4gKi8KKworCWlmIChkYXRhWzBdKSB7CisJCWNoYW5nZWQgPSBzLT5zdGF0ZTsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCWNoYW5nZWQgXj0gcy0+c3RhdGU7CisJCWNoYW5nZWQgJj0gcy0+aW9fYml0czsKKwkJaWYgKGNoYW5nZWQgJiAweDAwMDAwMGZmKQorCQkJb3V0YihzLT5zdGF0ZSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgRFQyODE3X0RBVEEgKyAwKTsKKwkJaWYgKGNoYW5nZWQgJiAweDAwMDBmZjAwKQorCQkJb3V0Yigocy0+c3RhdGUgPj4gOCkgJiAweGZmLAorCQkJCWRldi0+aW9iYXNlICsgRFQyODE3X0RBVEEgKyAxKTsKKwkJaWYgKGNoYW5nZWQgJiAweDAwZmYwMDAwKQorCQkJb3V0Yigocy0+c3RhdGUgPj4gMTYpICYgMHhmZiwKKwkJCQlkZXYtPmlvYmFzZSArIERUMjgxN19EQVRBICsgMik7CisJCWlmIChjaGFuZ2VkICYgMHhmZjAwMDAwMCkKKwkJCW91dGIoKHMtPnN0YXRlID4+IDI0KSAmIDB4ZmYsCisJCQkJZGV2LT5pb2Jhc2UgKyBEVDI4MTdfREFUQSArIDMpOworCX0KKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgRFQyODE3X0RBVEEgKyAwKTsKKwlkYXRhWzFdIHw9IChpbmIoZGV2LT5pb2Jhc2UgKyBEVDI4MTdfREFUQSArIDEpIDw8IDgpOworCWRhdGFbMV0gfD0gKGluYihkZXYtPmlvYmFzZSArIERUMjgxN19EQVRBICsgMikgPDwgMTYpOworCWRhdGFbMV0gfD0gKGluYihkZXYtPmlvYmFzZSArIERUMjgxN19EQVRBICsgMykgPDwgMjQpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZHQyODE3X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogZHQyODE3OiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIERUMjgxN19TSVpFLCAiZHQyODE3IikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSAiZHQyODE3IjsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCXMtPm5fY2hhbiA9IDMyOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+aW5zbl9iaXRzID0gZHQyODE3X2Rpb19pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBkdDI4MTdfZGlvX2luc25fY29uZmlnOworCisJcy0+c3RhdGUgPSAwOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEVDI4MTdfQ1IpOworCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODE3X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4MTc6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBEVDI4MTdfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MnguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODgyYzNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgyeC5jCkBAIC0wLDAgKzEsMTQ3MSBAQAorLyoKKyAgIGNvbWVkaS9kcml2ZXJzL2R0MjgyeC5jCisgICBIYXJkd2FyZSBkcml2ZXIgZm9yIERhdGEgVHJhbnNsYXRpb24gRFQyODIxIHNlcmllcworCisgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICBDb3B5cmlnaHQgKEMpIDE5OTctOCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBkdDI4MngKK0Rlc2NyaXB0aW9uOiBEYXRhIFRyYW5zbGF0aW9uIERUMjgyMSBzZXJpZXMgKGluY2x1ZGluZyBEVC1FWikKK0F1dGhvcjogZHMKK0RldmljZXM6IFtEYXRhIFRyYW5zbGF0aW9uXSBEVDI4MjEgKGR0MjgyMSksCisgIERUMjgyMS1GLTE2U0UgKGR0MjgyMS1mKSwgRFQyODIxLUYtOERJIChkdDI4MjEtZiksCisgIERUMjgyMS1HLTE2U0UgKGR0MjgyMS1mKSwgRFQyODIxLUctOERJIChkdDI4MjEtZyksCisgIERUMjgyMyAoZHQyODIzKSwKKyAgRFQyODI0LVBHSCAoZHQyODI0LXBnaCksIERUMjgyNC1QR0wgKGR0MjgyNC1wZ2wpLCBEVDI4MjUgKGR0MjgyNSksCisgIERUMjgyNyAoZHQyODI3KSwgRFQyODI4IChkdDI4MjgpLCBEVDIxLUVaIChkdDIxLWV6KSwgRFQyMy1FWiAoZHQyMy1leiksCisgIERUMjQtRVogKGR0MjQtZXopLCBEVDI0LUVaLVBHTCAoZHQyNC1lei1wZ2wpCitTdGF0dXM6IGNvbXBsZXRlCitVcGRhdGVkOiBXZWQsIDIyIEF1ZyAyMDAxIDE3OjExOjM0IC0wNzAwCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUQorICBbMl0gLSBETUEgMQorICBbM10gLSBETUEgMgorICBbNF0gLSBBSSBqdW1wZXJlZCBmb3IgMD1zaW5nbGUgZW5kZWQsIDE9ZGlmZmVyZW50aWFsCisgIFs1XSAtIEFJIGp1bXBlcmVkIGZvciAwPXN0cmFpZ2h0IGJpbmFyeSwgMT0yJ3MgY29tcGxlbWVudAorICBbNl0gLSBBTyAwIGp1bXBlcmVkIGZvciAwPXN0cmFpZ2h0IGJpbmFyeSwgMT0yJ3MgY29tcGxlbWVudAorICBbN10gLSBBTyAxIGp1bXBlcmVkIGZvciAwPXN0cmFpZ2h0IGJpbmFyeSwgMT0yJ3MgY29tcGxlbWVudAorICBbOF0gLSBBSSBqdW1wZXJlZCBmb3IgMD1bLTEwLDEwXVYsIDE9WzAsMTBdLCAyPVstNSw1XSwgMz1bMCw1XQorICBbOV0gLSBBTyAwIGp1bXBlcmVkIGZvciAwPVstMTAsMTBdViwgMT1bMCwxMF0sIDI9Wy01LDVdLCAzPVswLDVdLAorICAgICAgICA0PVstMi41LDIuNV0KKyAgWzEwXS0gQTAgMSBqdW1wZXJlZCBmb3IgMD1bLTEwLDEwXVYsIDE9WzAsMTBdLCAyPVstNSw1XSwgMz1bMCw1XSwKKyAgICAgICAgND1bLTIuNSwyLjVdCisKK05vdGVzOgorICAtIEFPIGNvbW1hbmRzIG1pZ2h0IGJlIGJyb2tlbi4KKyAgLSBJZiB5b3UgdHJ5IHRvIHJ1biBhIGNvbW1hbmQgb24gYm90aCB0aGUgQUkgYW5kIEFPIHN1YmRldmljZXMKKyAgICBzaW11bHRhbmVvdXNseSwgYmFkIHRoaW5ncyB3aWxsIGhhcHBlbi4gIFRoZSBkcml2ZXIgbmVlZHMgdG8KKyAgICBiZSBmaXhlZCB0byBjaGVjayBmb3IgdGhpcyBzaXR1YXRpb24gYW5kIHJldHVybiBhbiBlcnJvci4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworI2RlZmluZSBERUJVRworCisjZGVmaW5lIERUMjgyMV9USU1FT1VUCQkxMDAJLyogNTAwIHVzICovCisjZGVmaW5lIERUMjgyMV9TSVpFIDB4MTAKKworLyoKKyAqICAgIFJlZ2lzdGVycyBpbiB0aGUgRFQyODJ4CisgKi8KKworI2RlZmluZSBEVDI4MjFfQURDU1IJMHgwMAkvKiBBL0QgQ29udHJvbC9TdGF0dXMgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0NIQU5DU1IJMHgwMgkvKiBDaGFubmVsIENvbnRyb2wvU3RhdHVzICovCisjZGVmaW5lIERUMjgyMV9BRERBVAkweDA0CS8qIEEvRCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfREFDU1IJMHgwNgkvKiBEL0EgQ29udHJvbC9TdGF0dXMgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0RBREFUCTB4MDgJLyogRC9BIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9ESU9EQVQJMHgwYQkvKiBkaWdpdGFsIGRhdGEgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX1NVUENTUgkweDBjCS8qIFN1cGVydmlzb3IgQ29udHJvbC9TdGF0dXMgICAgICAqLworI2RlZmluZSBEVDI4MjFfVE1SQ1RSCTB4MGUJLyogVGltZXIvQ291bnRlciAgICAgICAgICAqLworCisvKgorICogIEF0IHBvd2VyIHVwLCBzb21lIHJlZ2lzdGVycyBhcmUgaW4gYSB3ZWxsLWtub3duIHN0YXRlLiAgVGhlCisgKiAgbWFza3MgYW5kIHZhbHVlcyBhcmUgYXMgZm9sbG93czoKKyAqLworCisjZGVmaW5lIERUMjgyMV9BRENTUl9NQVNLIDB4ZmZmMAorI2RlZmluZSBEVDI4MjFfQURDU1JfVkFMIDB4N2MwMAorCisjZGVmaW5lIERUMjgyMV9DSEFOQ1NSX01BU0sgMHhmMGYwCisjZGVmaW5lIERUMjgyMV9DSEFOQ1NSX1ZBTCAweDcwZjAKKworI2RlZmluZSBEVDI4MjFfREFDU1JfTUFTSyAweDdjOTMKKyNkZWZpbmUgRFQyODIxX0RBQ1NSX1ZBTCAweDdjOTAKKworI2RlZmluZSBEVDI4MjFfU1VQQ1NSX01BU0sgMHhmOGZmCisjZGVmaW5lIERUMjgyMV9TVVBDU1JfVkFMIDB4MDAwMAorCisjZGVmaW5lIERUMjgyMV9UTVJDVFJfTUFTSyAweGZmMDAKKyNkZWZpbmUgRFQyODIxX1RNUkNUUl9WQUwgMHhmMDAwCisKKy8qCisgKiAgICBCaXQgZmllbGRzIG9mIGVhY2ggcmVnaXN0ZXIKKyAqLworCisvKiBBRENTUiAqLworCisjZGVmaW5lIERUMjgyMV9BREVSUgkweDgwMDAJLyogKFIpICAgMSBmb3IgQS9EIGVycm9yICAqLworI2RlZmluZSBEVDI4MjFfQURDTEsJMHgwMjAwCS8qIChSL1cpIEEvRCBjbG9jayBlbmFibGUgKi8KKwkJLyogICAgICAweDdjMDAgICAgICAgICAgIHJlYWQgYXMgMSdzICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX01VWEJVU1kJMHgwMTAwCS8qIChSKSAgIG11bHRpcGxleGVyIGJ1c3kgKi8KKyNkZWZpbmUgRFQyODIxX0FERE9ORQkweDAwODAJLyogKFIpICAgQS9EIGRvbmUgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfSUFERE9ORQkweDAwNDAJLyogKFIvVykgaW50ZXJydXB0IG9uIEEvRCBkb25lICAgICovCisJCS8qICAgICAgMHgwMDMwICAgICAgICAgICBnYWluIHNlbGVjdCAgICAgICAgICAgICovCisJCS8qICAgICAgMHgwMDBmICAgICAgICAgICBjaGFubmVsIHNlbGVjdCAgICAgICAgICovCisKKy8qIENIQU5DU1IgKi8KKworI2RlZmluZSBEVDI4MjFfTExFCTB4ODAwMAkvKiAoUi9XKSBMb2FkIExpc3QgRW5hYmxlICovCisJCS8qICAgICAgMHg3MDAwICAgICAgICAgICByZWFkIGFzIDEncyAgICAgICAgICAgICovCisJCS8qICAgICAgMHgwZjAwICAgICAoUikgICBwcmVzZW50IGFkZHJlc3MgICAgICAgICovCisJCS8qICAgICAgMHgwMGYwICAgICAgICAgICByZWFkIGFzIDEncyAgICAgICAgICAgICovCisJCS8qICAgICAgMHgwMDBmICAgICAoUikgICBudW1iZXIgb2YgZW50cmllcyAtIDEgICovCisKKy8qIERBQ1NSICovCisKKyNkZWZpbmUgRFQyODIxX0RBRVJSCTB4ODAwMAkvKiAoUikgICBEL0EgZXJyb3IgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX1lTRUwJMHgwMjAwCS8qIChSL1cpIERBQyAxIHNlbGVjdCAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfU1NFTAkweDAxMDAJLyogKFIvVykgc2luZ2xlIGNoYW5uZWwgc2VsZWN0ICAgICovCisjZGVmaW5lIERUMjgyMV9EQUNSRFkJMHgwMDgwCS8qIChSKSAgIERBQyByZWFkeSAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfSURBUkRZCTB4MDA0MAkvKiAoUi9XKSBpbnRlcnJ1cHQgb24gREFDIHJlYWR5ICAgKi8KKyNkZWZpbmUgRFQyODIxX0RBQ0xLCTB4MDAyMAkvKiAoUi9XKSBEL0EgY2xvY2sgZW5hYmxlICovCisjZGVmaW5lIERUMjgyMV9IQk9FCTB4MDAwMgkvKiAoUi9XKSBESU8gaGlnaCBieXRlIG91dHB1dCBlbmFibGUgICAgICAqLworI2RlZmluZSBEVDI4MjFfTEJPRQkweDAwMDEJLyogKFIvVykgRElPIGxvdyBieXRlIG91dHB1dCBlbmFibGUgICAgICAgKi8KKworLyogU1VQQ1NSICovCisKKyNkZWZpbmUgRFQyODIxX0RNQUQJMHg4MDAwCS8qIChSKSAgIERNQSBkb25lICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfRVJSSU5URU4JMHg0MDAwCS8qIChSL1cpIGludGVycnVwdCBvbiBlcnJvciAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9DTFJETUFETkUgMHgyMDAwCS8qIChXKSAgIGNsZWFyIERNQSBkb25lICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9ERE1BCTB4MTAwMAkvKiAoUi9XKSBkdWFsIERNQSAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0RTMQkweDA4MDAJLyogKFIvVykgRE1BIHNlbGVjdCAxICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0RTMAkweDA0MDAJLyogKFIvVykgRE1BIHNlbGVjdCAwICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0JVRkZCCTB4MDIwMAkvKiAoUi9XKSBidWZmZXIgQiBzZWxlY3RlZCAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfU0NETgkweDAxMDAJLyogKFIpICAgc2NhbiBkb25lICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0RBQ09OCTB4MDA4MAkvKiAoVykgICBEQUMgc2luZ2xlIGNvbnZlcnNpb24gICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfQURDSU5JVAkweDAwNDAJLyogKFcpICAgQS9EIGluaXRpYWxpemUgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0RBQ0lOSVQJMHgwMDIwCS8qIChXKSAgIEQvQSBpbml0aWFsaXplICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIERUMjgyMV9QUkxECTB4MDAxMAkvKiAoVykgICBwcmVsb2FkIG11bHRpcGxleGVyICAgICAgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfU1RSSUcJMHgwMDA4CS8qIChXKSAgIHNvZnR3YXJlIHRyaWdnZXIgICAgICAgICAqLworI2RlZmluZSBEVDI4MjFfWFRSSUcJMHgwMDA0CS8qIChSL1cpIGV4dGVybmFsIHRyaWdnZXIgZW5hYmxlICAqLworI2RlZmluZSBEVDI4MjFfWENMSwkweDAwMDIJLyogKFIvVykgZXh0ZXJuYWwgY2xvY2sgZW5hYmxlICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFQyODIxX0JESU5JVAkweDAwMDEJLyogKFcpICAgaW5pdGlhbGl6ZSBib2FyZCAgICAgICAgICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MnhfYWlfbG9fYmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMi41LCAyLjUpLAorCQkJUkFOR0UoLTEuMjUsIDEuMjUpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MnhfYWlfbG9fdW5pcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKDAsIDEwKSwKKwkJCVJBTkdFKDAsIDUpLAorCQkJUkFOR0UoMCwgMi41KSwKKwkJCVJBTkdFKDAsIDEuMjUpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MnhfYWlfNV9iaXBvbGFyID0geyA0LCB7CisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMi41LCAyLjUpLAorCQkJUkFOR0UoLTEuMjUsIDEuMjUpLAorCQkJUkFOR0UoLTAuNjI1LCAwLjYyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MnhfYWlfNV91bmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAyLjUpLAorCQkJUkFOR0UoMCwgMS4yNSksCisJCQlSQU5HRSgwLCAwLjYyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MnhfYWlfaGlfYmlwb2xhciA9IHsgNCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtMSwgMSksCisJCQlSQU5HRSgtMC4xLCAwLjEpLAorCQkJUkFOR0UoLTAuMDIsIDAuMDIpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MnhfYWlfaGlfdW5pcG9sYXIgPSB7IDQsIHsKKwkJCVJBTkdFKDAsIDEwKSwKKwkJCVJBTkdFKDAsIDEpLAorCQkJUkFOR0UoMCwgMC4xKSwKKwkJCVJBTkdFKDAsIDAuMDIpCisJfQorfTsKKworc3RydWN0IGR0MjgyeF9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYWRiaXRzOworCWludCBhZGNoYW5fc2U7CisJaW50IGFkY2hhbl9kaTsKKwlpbnQgYWlfc3BlZWQ7CisJaW50IGlzcGdsOworCWludCBkYWNoYW47CisJaW50IGRhYml0czsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHQyODJ4X2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKyAgICAgIHtuYW1lOiJkdDI4MjEiLAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRjaGFuX3NlOjE2LAorCSAgICAgIGFkY2hhbl9kaTo4LAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIGlzcGdsOgkwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MjgyMS1mIiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDo2NTAwLAorCSAgICAgIGlzcGdsOgkwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MjgyMS1nIiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDo0MDAwLAorCSAgICAgIGlzcGdsOgkwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MjgyMyIsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhZGNoYW5fc2U6MCwKKwkgICAgICBhZGNoYW5fZGk6NCwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxNiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDI4MjQtcGdoIiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDoyMDAwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTAsCisJICAgICAgZGFiaXRzOgkwLAorCQl9LAorICAgICAge25hbWU6ImR0MjgyNC1wZ2wiLAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRjaGFuX3NlOjE2LAorCSAgICAgIGFkY2hhbl9kaTo4LAorCSAgICAgIGFpX3NwZWVkOjIwMDAwLAorCSAgICAgIGlzcGdsOgkxLAorCSAgICAgIGRhY2hhbjoJMCwKKwkgICAgICBkYWJpdHM6CTAsCisJCX0sCisgICAgICB7bmFtZToiZHQyODI1IiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDoyMDAwMCwKKwkgICAgICBpc3BnbDoJMSwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDI4MjciLAorCSAgICAgIGFkYml0czoJMTYsCisJICAgICAgYWRjaGFuX3NlOjAsCisJICAgICAgYWRjaGFuX2RpOjQsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgaXNwZ2w6CTAsCisJICAgICAgZGFjaGFuOgkyLAorCSAgICAgIGRhYml0czoJMTIsCisJCX0sCisgICAgICB7bmFtZToiZHQyODI4IiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZTo0LAorCSAgICAgIGFkY2hhbl9kaTowLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGlzcGdsOgkwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MjgyOSIsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhZGNoYW5fc2U6OCwKKwkgICAgICBhZGNoYW5fZGk6MCwKKwkgICAgICBhaV9zcGVlZDozMzI1MCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxNiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDIxLWV6IiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDIzLWV6IiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFkY2hhbl9zZToxNiwKKwkgICAgICBhZGNoYW5fZGk6OCwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBpc3BnbDoJMCwKKwkgICAgICBkYWNoYW46CTAsCisJICAgICAgZGFiaXRzOgkwLAorCQl9LAorICAgICAge25hbWU6ImR0MjQtZXoiLAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRjaGFuX3NlOjE2LAorCSAgICAgIGFkY2hhbl9kaTo4LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGlzcGdsOgkwLAorCSAgICAgIGRhY2hhbjoJMCwKKwkgICAgICBkYWJpdHM6CTAsCisJCX0sCisgICAgICB7bmFtZToiZHQyNC1lei1wZ2wiLAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRjaGFuX3NlOjE2LAorCSAgICAgIGFkY2hhbl9kaTo4LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGlzcGdsOgkxLAorCSAgICAgIGRhY2hhbjoJMCwKKwkgICAgICBkYWJpdHM6CTAsCisJCX0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyBzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBkdDI4MnhfYm9hcmQpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgZHQyODJ4X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBkdDI4MnhfcHJpdmF0ZSB7CisJaW50IGFkXzJzY29tcDsJCS8qIHdlIGhhdmUgMidzIGNvbXAganVtcGVyIHNldCAgKi8KKwlpbnQgZGEwXzJzY29tcDsJCS8qIHNhbWUsIGZvciBEQUMwICAgICAgICAgICAgICAgKi8KKwlpbnQgZGExXzJzY29tcDsJCS8qIHNhbWUsIGZvciBEQUMxICAgICAgICAgICAgICAgKi8KKworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpkYXJhbmdlbGlzdFsyXTsKKworCXNob3J0IGFvWzJdOworCisJdm9sYXRpbGUgaW50IGRhY3NyOwkvKiBzb2Z0d2FyZSBjb3BpZXMgb2YgcmVnaXN0ZXJzICovCisJdm9sYXRpbGUgaW50IGFkY3NyOworCXZvbGF0aWxlIGludCBzdXBjc3I7CisKKwl2b2xhdGlsZSBpbnQgbnRyaWc7CisJdm9sYXRpbGUgaW50IG5yZWFkOworCisJc3RydWN0IHsKKwkJaW50IGNoYW47CisJCXNob3J0ICpidWY7CS8qIERNQSBidWZmZXIgKi8KKwkJdm9sYXRpbGUgaW50IHNpemU7CS8qIHNpemUgb2YgY3VycmVudCB0cmFuc2ZlciAqLworCX0gZG1hWzJdOworCWludCBkbWFfbWF4c2l6ZTsJLyogbWF4IHNpemUgb2YgRE1BIHRyYW5zZmVyIChpbiBieXRlcykgKi8KKwlpbnQgdXNlZG1hOwkJLyogZHJpdmVyIHVzZXMgRE1BICAgICAgICAgICAgICAqLworCXZvbGF0aWxlIGludCBjdXJyZW50X2RtYV9pbmRleDsKKwlpbnQgZG1hX2RpcjsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkdDI4MnhfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgYm9hcmR0eXBlICgqKGNvbnN0IHN0cnVjdCBkdDI4MnhfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyoKKyAqICAgIFNvbWUgdXNlbGVzcyBhYnN0cmFjdGlvbnMKKyAqLworI2RlZmluZSBjaGFuX3RvX0RBQyhhKQkoKGEpJjEpCisjZGVmaW5lIHVwZGF0ZV9kYWNzcihhKQlvdXR3KGRldnByaXYtPmRhY3NyfChhKSxkZXYtPmlvYmFzZStEVDI4MjFfREFDU1IpCisjZGVmaW5lIHVwZGF0ZV9hZGNzcihhKQlvdXR3KGRldnByaXYtPmFkY3NyfChhKSxkZXYtPmlvYmFzZStEVDI4MjFfQURDU1IpCisjZGVmaW5lIG11eF9idXN5KCkgKGludyhkZXYtPmlvYmFzZStEVDI4MjFfQURDU1IpJkRUMjgyMV9NVVhCVVNZKQorI2RlZmluZSBhZF9kb25lKCkgKGludyhkZXYtPmlvYmFzZStEVDI4MjFfQURDU1IpJkRUMjgyMV9BRERPTkUpCisjZGVmaW5lIHVwZGF0ZV9zdXBjc3IoYSkJb3V0dyhkZXZwcml2LT5zdXBjc3J8KGEpLGRldi0+aW9iYXNlK0RUMjgyMV9TVVBDU1IpCisKKy8qCisgKiAgICBkYW5nZXIhIG1hY3JvIGFidXNlLi4uIGEgaXMgdGhlIGV4cHJlc3Npb24gdG8gd2FpdCBvbiwgYW5kIGIgaXMKKyAqICAgICAgdGhlIHN0YXRlbWVudChzKSB0byBleGVjdXRlIGlmIGl0IGRvZXNuJ3QgaGFwcGVuLgorICovCisjZGVmaW5lIHdhaXRfZm9yKGEsYikJIAkJCQlcCisJZG97CQkJCQkJXAorCQlpbnQgX2k7CQkJCQlcCisJCWZvcihfaT0wO19pPERUMjgyMV9USU1FT1VUO19pKyspewlcCisJCQlpZihhKXtfaT0wO2JyZWFrO30JCVwKKwkJCWNvbWVkaV91ZGVsYXkoNSk7CQkJXAorCQl9CQkJCQlcCisJCWlmKF9pKXtifQkJCQlcCisJfXdoaWxlKDApCisKK3N0YXRpYyBpbnQgZHQyODJ4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGR0MjgyeF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kdDI4MnggPSB7CisgICAgICBkcml2ZXJfbmFtZToiZHQyODJ4IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkdDI4MnhfYXR0YWNoLAorICAgICAgZGV0YWNoOmR0MjgyeF9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6bl9ib2FyZHR5cGVzLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgZHQyODJ4X2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZHQyODJ4KTsKKworc3RhdGljIHZvaWQgZnJlZV9yZXNvdXJjZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBwcmVwX2FpX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGNoYW4sIGludCBzaXplKTsKK3N0YXRpYyBpbnQgcHJlcF9hb19kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGFuLCBpbnQgc2l6ZSk7CitzdGF0aWMgaW50IGR0MjgyeF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGR0MjgyeF9hb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGR0MjgyeF9uc190b190aW1lcihpbnQgKm5hbm9zZWMsIGludCByb3VuZF9tb2RlKTsKK3N0YXRpYyB2b2lkIGR0MjgyeF9kaXNhYmxlX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBpbnQgZHQyODJ4X2dyYWJfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgZG1hMSwgaW50IGRtYTIpOworCitzdGF0aWMgdm9pZCBkdDI4MnhfbXVuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHNob3J0ICogYnVmLAorCXVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgc2hvcnQgbWFzayA9ICgxIDw8IGJvYXJkdHlwZS5hZGJpdHMpIC0gMTsKKwl1bnNpZ25lZCBzaG9ydCBzaWduID0gMSA8PCAoYm9hcmR0eXBlLmFkYml0cyAtIDEpOworCWludCBuOworCisJaWYgKGRldnByaXYtPmFkXzJzY29tcCkgeworCQlzaWduID0gMSA8PCAoYm9hcmR0eXBlLmFkYml0cyAtIDEpOworCX0gZWxzZSB7CisJCXNpZ24gPSAwOworCX0KKworCWlmIChuYnl0ZXMgJSAyKQorCQljb21lZGlfZXJyb3IoZGV2LCAiYnVnISBvZGQgbnVtYmVyIG9mIGJ5dGVzIGZyb20gZG1hIHhmZXIiKTsKKwluID0gbmJ5dGVzIC8gMjsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWJ1ZltpXSA9IChidWZbaV0gJiBtYXNrKSBeIHNpZ247CisJfQorfQorCitzdGF0aWMgdm9pZCBkdDI4MnhfYW9fZG1hX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl2b2lkICpwdHI7CisJaW50IHNpemU7CisJaW50IGk7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCisJdXBkYXRlX3N1cGNzcihEVDI4MjFfQ0xSRE1BRE5FKTsKKworCWlmICghcy0+YXN5bmMtPnByZWFsbG9jX2J1ZikgeworCQlwcmludGsoImFzeW5jLT5kYXRhIGRpc2FwcGVhcmVkLiAgZGFuZyFcbiIpOworCQlyZXR1cm47CisJfQorCisJaSA9IGRldnByaXYtPmN1cnJlbnRfZG1hX2luZGV4OworCXB0ciA9IGRldnByaXYtPmRtYVtpXS5idWY7CisKKwlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWFbaV0uY2hhbik7CisKKwlkZXZwcml2LT5jdXJyZW50X2RtYV9pbmRleCA9IDEgLSBpOworCisJc2l6ZSA9IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHMsIHB0ciwgZGV2cHJpdi0+ZG1hX21heHNpemUpOworCWlmIChzaXplID09IDApIHsKKwkJcnRfcHJpbnRrKCJkdDI4Mng6IEFPIHVuZGVycnVuXG4iKTsKKwkJZHQyODJ4X2FvX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJcmV0dXJuOworCX0KKwlwcmVwX2FvX2RtYShkZXYsIGksIHNpemUpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHQyODJ4X2FpX2RtYV9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdm9pZCAqcHRyOworCWludCBzaXplOworCWludCBpOworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXM7CisKKwl1cGRhdGVfc3VwY3NyKERUMjgyMV9DTFJETUFETkUpOworCisJaWYgKCFzLT5hc3luYy0+cHJlYWxsb2NfYnVmKSB7CisJCXByaW50aygiYXN5bmMtPmRhdGEgZGlzYXBwZWFyZWQuICBkYW5nIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpID0gZGV2cHJpdi0+Y3VycmVudF9kbWFfaW5kZXg7CisJcHRyID0gZGV2cHJpdi0+ZG1hW2ldLmJ1ZjsKKwlzaXplID0gZGV2cHJpdi0+ZG1hW2ldLnNpemU7CisKKwlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWFbaV0uY2hhbik7CisKKwlkZXZwcml2LT5jdXJyZW50X2RtYV9pbmRleCA9IDEgLSBpOworCisJZHQyODJ4X211bmdlKGRldiwgcHRyLCBzaXplKTsKKwlyZXQgPSBjZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIHB0ciwgc2l6ZSk7CisJaWYgKHJldCAhPSBzaXplKSB7CisJCWR0MjgyeF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJcmV0dXJuOworCX0KKwlkZXZwcml2LT5ucmVhZCAtPSBzaXplIC8gMjsKKworCWlmIChkZXZwcml2LT5ucmVhZCA8IDApIHsKKwkJcHJpbnRrKCJkdDI4Mng6IG9mZiBieSBvbmVcbiIpOworCQlkZXZwcml2LT5ucmVhZCA9IDA7CisJfQorCWlmICghZGV2cHJpdi0+bnJlYWQpIHsKKwkJZHQyODJ4X2FpX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCXJldHVybjsKKwl9CisjaWYgMAorCS8qIGNsZWFyIHRoZSBkdWFsIGRtYSBmbGFnLCBtYWtpbmcgdGhpcyB0aGUgbGFzdCBkbWEgc2VnbWVudCAqLworCS8qIFhYWCBwcm9iYWJseSB3cm9uZyAqLworCWlmICghZGV2cHJpdi0+bnRyaWcpIHsKKwkJZGV2cHJpdi0+c3VwY3NyICY9IH4oRFQyODIxX0RETUEpOworCQl1cGRhdGVfc3VwY3NyKDApOworCX0KKyNlbmRpZgorCS8qIHJlc3RhcnQgdGhlIGNoYW5uZWwgKi8KKwlwcmVwX2FpX2RtYShkZXYsIGksIDApOworfQorCitzdGF0aWMgaW50IHByZXBfYWlfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgZG1hX2luZGV4LCBpbnQgbikKK3sKKwlpbnQgZG1hX2NoYW47CisJdW5zaWduZWQgbG9uZyBkbWFfcHRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIWRldnByaXYtPm50cmlnKQorCQlyZXR1cm4gMDsKKworCWlmIChuID09IDApCisJCW4gPSBkZXZwcml2LT5kbWFfbWF4c2l6ZTsKKwlpZiAobiA+IGRldnByaXYtPm50cmlnICogMikKKwkJbiA9IGRldnByaXYtPm50cmlnICogMjsKKwlkZXZwcml2LT5udHJpZyAtPSBuIC8gMjsKKworCWRldnByaXYtPmRtYVtkbWFfaW5kZXhdLnNpemUgPSBuOworCWRtYV9jaGFuID0gZGV2cHJpdi0+ZG1hW2RtYV9pbmRleF0uY2hhbjsKKwlkbWFfcHRyID0gdmlydF90b19idXMoZGV2cHJpdi0+ZG1hW2RtYV9pbmRleF0uYnVmKTsKKworCXNldF9kbWFfbW9kZShkbWFfY2hhbiwgRE1BX01PREVfUkVBRCk7CisJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCWNsZWFyX2RtYV9mZihkbWFfY2hhbik7CisJc2V0X2RtYV9hZGRyKGRtYV9jaGFuLCBkbWFfcHRyKTsKKwlzZXRfZG1hX2NvdW50KGRtYV9jaGFuLCBuKTsKKwlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKKworCWVuYWJsZV9kbWEoZG1hX2NoYW4pOworCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgcHJlcF9hb19kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBkbWFfaW5kZXgsIGludCBuKQoreworCWludCBkbWFfY2hhbjsKKwl1bnNpZ25lZCBsb25nIGRtYV9wdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRldnByaXYtPmRtYVtkbWFfaW5kZXhdLnNpemUgPSBuOworCWRtYV9jaGFuID0gZGV2cHJpdi0+ZG1hW2RtYV9pbmRleF0uY2hhbjsKKwlkbWFfcHRyID0gdmlydF90b19idXMoZGV2cHJpdi0+ZG1hW2RtYV9pbmRleF0uYnVmKTsKKworCXNldF9kbWFfbW9kZShkbWFfY2hhbiwgRE1BX01PREVfV1JJVEUpOworCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwljbGVhcl9kbWFfZmYoZG1hX2NoYW4pOworCXNldF9kbWFfYWRkcihkbWFfY2hhbiwgZG1hX3B0cik7CisJc2V0X2RtYV9jb3VudChkbWFfY2hhbiwgbik7CisJcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7CisKKwllbmFibGVfZG1hKGRtYV9jaGFuKTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZHQyODJ4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzX2FvOworCXVuc2lnbmVkIGludCBzdXBjc3IsIGFkY3NyLCBkYWNzcjsKKwlpbnQgaGFuZGxlZCA9IDA7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInNwdXJpb3VzIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJc19hbyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJYWRjc3IgPSBpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQURDU1IpOworCWRhY3NyID0gaW53KGRldi0+aW9iYXNlICsgRFQyODIxX0RBQ1NSKTsKKwlzdXBjc3IgPSBpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfU1VQQ1NSKTsKKwlpZiAoc3VwY3NyICYgRFQyODIxX0RNQUQpIHsKKwkJaWYgKGRldnByaXYtPmRtYV9kaXIgPT0gRE1BX01PREVfUkVBRCkKKwkJCWR0MjgyeF9haV9kbWFfaW50ZXJydXB0KGRldik7CisJCWVsc2UKKwkJCWR0MjgyeF9hb19kbWFfaW50ZXJydXB0KGRldik7CisJCWhhbmRsZWQgPSAxOworCX0KKwlpZiAoYWRjc3IgJiBEVDI4MjFfQURFUlIpIHsKKwkJaWYgKGRldnByaXYtPm5yZWFkICE9IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgZXJyb3IiKTsKKwkJCWR0MjgyeF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCQl9CisJCWhhbmRsZWQgPSAxOworCX0KKwlpZiAoZGFjc3IgJiBEVDI4MjFfREFFUlIpIHsKKyNpZiAwCisJCXN0YXRpYyBpbnQgd2FybiA9IDU7CisJCWlmICgtLXdhcm4gPD0gMCkgeworCQkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCQkJcHJpbnRrKCJkaXNhYmxpbmcgaXJxXG4iKTsKKwkJfQorI2VuZGlmCisJCWNvbWVkaV9lcnJvcihkZXYsICJEL0EgZXJyb3IiKTsKKwkJZHQyODJ4X2FvX2NhbmNlbChkZXYsIHNfYW8pOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKKwkJaGFuZGxlZCA9IDE7CisJfQorI2lmIDAKKwlpZiAoYWRjc3IgJiBEVDI4MjFfQURET05FKSB7CisJCWludCByZXQ7CisJCXNob3J0IGRhdGE7CisKKwkJZGF0YSA9IChzaG9ydCkgaW53KGRldi0+aW9iYXNlICsgRFQyODIxX0FEREFUKTsKKwkJZGF0YSAmPSAoMSA8PCBib2FyZHR5cGUuYWRiaXRzKSAtIDE7CisJCWlmIChkZXZwcml2LT5hZF8yc2NvbXApIHsKKwkJCWRhdGEgXj0gMSA8PCAoYm9hcmR0eXBlLmFkYml0cyAtIDEpOworCQl9CisJCXJldCA9IGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBkYXRhKTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJfQorCisJCWRldnByaXYtPm5yZWFkLS07CisJCWlmICghZGV2cHJpdi0+bnJlYWQpIHsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdXBjc3IgJiBEVDI4MjFfU0NETikKKwkJCQl1cGRhdGVfc3VwY3NyKERUMjgyMV9TVFJJRyk7CisJCX0KKwkJaGFuZGxlZCA9IDE7CisJfQorI2VuZGlmCisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJLyogcHJpbnRrKCJhZGNzcj0weCUwMnggZGFjc3ItMHglMDJ4IHN1cGNzcj0weCUwMnhcbiIsIGFkY3NyLCBkYWNzciwgc3VwY3NyKTsgKi8KKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworc3RhdGljIHZvaWQgZHQyODJ4X2xvYWRfY2hhbmdhaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBuLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGNoYW4sIHJhbmdlOworCisJb3V0dyhEVDI4MjFfTExFIHwgKG4gLSAxKSwgZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQ0hBTkNTUik7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQljaGFuID0gQ1JfQ0hBTihjaGFubGlzdFtpXSk7CisJCXJhbmdlID0gQ1JfUkFOR0UoY2hhbmxpc3RbaV0pOworCQl1cGRhdGVfYWRjc3IoKHJhbmdlIDw8IDQpIHwgKGNoYW4pKTsKKwl9CisJb3V0dyhuIC0gMSwgZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQ0hBTkNTUik7Cit9CisKKy8qCisgKiAgICBQZXJmb3JtcyBhIHNpbmdsZSBBL0QgY29udmVyc2lvbi4KKyAqICAgICAgLSBQdXQgY2hhbm5lbC9nYWluIGludG8gY2hhbm5lbC1nYWluIGxpc3QKKyAqICAgICAgLSBwcmVsb2FkIG11bHRpcGxleGVyCisgKiAgICAgIC0gdHJpZ2dlciBjb252ZXJzaW9uIGFuZCB3YWl0IGZvciBpdCB0byBmaW5pc2gKKyAqLworc3RhdGljIGludCBkdDI4MnhfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKworCS8qIFhYWCBzaG91bGQgd2UgcmVhbGx5IGJlIGVuYWJsaW5nIHRoZSBhZCBjbG9jayBoZXJlPyAqLworCWRldnByaXYtPmFkY3NyID0gRFQyODIxX0FEQ0xLOworCXVwZGF0ZV9hZGNzcigwKTsKKworCWR0MjgyeF9sb2FkX2NoYW5nYWluKGRldiwgMSwgJmluc24tPmNoYW5zcGVjKTsKKworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX1BSTEQpOworCXdhaXRfZm9yKCFtdXhfYnVzeSgpLCBjb21lZGlfZXJyb3IoZGV2LCAidGltZW91dFxuIik7CisJCXJldHVybiAtRVRJTUU7CisJCSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCXVwZGF0ZV9zdXBjc3IoRFQyODIxX1NUUklHKTsKKwkJd2FpdF9mb3IoYWRfZG9uZSgpLCBjb21lZGlfZXJyb3IoZGV2LCAidGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FOworCQkJKTsKKworCQlkYXRhW2ldID0KKwkJCWludyhkZXYtPmlvYmFzZSArCisJCQlEVDI4MjFfQUREQVQpICYgKCgxIDw8IGJvYXJkdHlwZS5hZGJpdHMpIC0gMSk7CisJCWlmIChkZXZwcml2LT5hZF8yc2NvbXApCisJCQlkYXRhW2ldIF49ICgxIDw8IChib2FyZHR5cGUuYWRiaXRzIC0gMSkpOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJsaXR5IGlzIG5vdCBhbiBpc3N1ZSBoZXJlICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSB7CisJCS8qIGludGVybmFsIHRyaWdnZXIgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJLyogc2hvdWxkIGJlIGxldmVsL2VkZ2UsIGhpL2xvIHNwZWNpZmljYXRpb24gaGVyZSAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgNDAwMCkgeworCQkvKiBYWFggYm9hcmQgZGVwZW5kZW50ICovCisJCWNtZC0+Y29udmVydF9hcmcgPSA0MDAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIFNMT1dFU1RfVElNRVIJKDI1MCooMTw8MTUpKjI1NSkKKwlpZiAoY21kLT5jb252ZXJ0X2FyZyA+IFNMT1dFU1RfVElNRVIpIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IFNMT1dFU1RfVElNRVI7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX3NwZWVkKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9zcGVlZDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQkvKiBhbnkgY291bnQgaXMgYWxsb3dlZCAqLworCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCWR0MjgyeF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJaWYgKHRtcCAhPSBjbWQtPmNvbnZlcnRfYXJnKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlpbnQgdGltZXI7CisKKwlpZiAoZGV2cHJpdi0+dXNlZG1hID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJkcml2ZXIgcmVxdWlyZXMgMiBkbWEgY2hhbm5lbHMgdG8gZXhlY3V0ZSBjb21tYW5kIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWR0MjgyeF9kaXNhYmxlX2RtYShkZXYpOworCisJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9zcGVlZCkKKwkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX3NwZWVkOworCXRpbWVyID0gZHQyODJ4X25zX3RvX3RpbWVyKCZjbWQtPmNvbnZlcnRfYXJnLCBUUklHX1JPVU5EX05FQVJFU1QpOworCW91dHcodGltZXIsIGRldi0+aW9iYXNlICsgRFQyODIxX1RNUkNUUik7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkvKiBpbnRlcm5hbCB0cmlnZ2VyICovCisJCWRldnByaXYtPnN1cGNzciA9IERUMjgyMV9FUlJJTlRFTiB8IERUMjgyMV9EUzA7CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQlkZXZwcml2LT5zdXBjc3IgPSBEVDI4MjFfRVJSSU5URU4gfCBEVDI4MjFfRFMwIHwgRFQyODIxX0RTMTsKKwl9CisJdXBkYXRlX3N1cGNzcihEVDI4MjFfQ0xSRE1BRE5FIHwgRFQyODIxX0JVRkZCIHwgRFQyODIxX0FEQ0lOSVQpOworCisJZGV2cHJpdi0+bnRyaWcgPSBjbWQtPnN0b3BfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJZGV2cHJpdi0+bnJlYWQgPSBkZXZwcml2LT5udHJpZzsKKworCWRldnByaXYtPmRtYV9kaXIgPSBETUFfTU9ERV9SRUFEOworCWRldnByaXYtPmN1cnJlbnRfZG1hX2luZGV4ID0gMDsKKwlwcmVwX2FpX2RtYShkZXYsIDAsIDApOworCWlmIChkZXZwcml2LT5udHJpZykgeworCQlwcmVwX2FpX2RtYShkZXYsIDEsIDApOworCQlkZXZwcml2LT5zdXBjc3IgfD0gRFQyODIxX0RETUE7CisJCXVwZGF0ZV9zdXBjc3IoMCk7CisJfQorCisJZGV2cHJpdi0+YWRjc3IgPSAwOworCisJZHQyODJ4X2xvYWRfY2hhbmdhaW4oZGV2LCBjbWQtPmNoYW5saXN0X2xlbiwgY21kLT5jaGFubGlzdCk7CisKKwlkZXZwcml2LT5hZGNzciA9IERUMjgyMV9BRENMSyB8IERUMjgyMV9JQURET05FOworCXVwZGF0ZV9hZGNzcigwKTsKKworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX1BSTEQpOworCXdhaXRfZm9yKCFtdXhfYnVzeSgpLCBjb21lZGlfZXJyb3IoZGV2LCAidGltZW91dFxuIik7CisJCXJldHVybiAtRVRJTUU7CisJCSk7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQl1cGRhdGVfc3VwY3NyKERUMjgyMV9TVFJJRyk7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+c3VwY3NyIHw9IERUMjgyMV9YVFJJRzsKKwkJdXBkYXRlX3N1cGNzcigwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHQyODJ4X2Rpc2FibGVfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChkZXZwcml2LT51c2VkbWEpIHsKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hWzBdLmNoYW4pOworCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWFbMV0uY2hhbik7CisJfQorfQorCitzdGF0aWMgaW50IGR0MjgyeF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlkdDI4MnhfZGlzYWJsZV9kbWEoZGV2KTsKKworCWRldnByaXYtPmFkY3NyID0gMDsKKwl1cGRhdGVfYWRjc3IoMCk7CisKKwlkZXZwcml2LT5zdXBjc3IgPSAwOworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX0FEQ0lOSVQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X25zX3RvX3RpbWVyKGludCAqbmFub3NlYywgaW50IHJvdW5kX21vZGUpCit7CisJaW50IHByZXNjYWxlLCBiYXNlLCBkaXZpZGVyOworCisJZm9yIChwcmVzY2FsZSA9IDA7IHByZXNjYWxlIDwgMTY7IHByZXNjYWxlKyspIHsKKwkJaWYgKHByZXNjYWxlID09IDEpCisJCQljb250aW51ZTsKKwkJYmFzZSA9IDI1MCAqICgxIDw8IHByZXNjYWxlKTsKKwkJc3dpdGNoIChyb3VuZF9tb2RlKSB7CisJCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCQlkZWZhdWx0OgorCQkJZGl2aWRlciA9ICgqbmFub3NlYyArIGJhc2UgLyAyKSAvIGJhc2U7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCQlkaXZpZGVyID0gKCpuYW5vc2VjKSAvIGJhc2U7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX1VQOgorCQkJZGl2aWRlciA9ICgqbmFub3NlYyArIGJhc2UgLSAxKSAvIGJhc2U7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZGl2aWRlciA8IDI1NikgeworCQkJKm5hbm9zZWMgPSBkaXZpZGVyICogYmFzZTsKKwkJCXJldHVybiAocHJlc2NhbGUgPDwgOCkgfCAoMjU1IC0gZGl2aWRlcik7CisJCX0KKwl9CisJYmFzZSA9IDI1MCAqICgxIDw8IDE1KTsKKwlkaXZpZGVyID0gMjU1OworCSpuYW5vc2VjID0gZGl2aWRlciAqIGJhc2U7CisJcmV0dXJuICgxNSA8PCA4KSB8ICgyNTUgLSBkaXZpZGVyKTsKK30KKworLyoKKyAqICAgIEFuYWxvZyBvdXRwdXQgcm91dGluZS4gIFNlbGVjdHMgc2luZ2xlIGNoYW5uZWwgY29udmVyc2lvbiwKKyAqICAgICAgc2VsZWN0cyBjb3JyZWN0IGNoYW5uZWwsIGNvbnZlcnRzIGZyb20gMidzIGNvbXBsaW1lbnQgdG8KKyAqICAgICAgb2Zmc2V0IGJpbmFyeSBpZiBuZWNlc3NhcnksIGxvYWRzIHRoZSBkYXRhIGludG8gdGhlIERBQworICogICAgICBkYXRhIHJlZ2lzdGVyLCBhbmQgcGVyZm9ybXMgdGhlIGNvbnZlcnNpb24uCisgKi8KK3N0YXRpYyBpbnQgZHQyODJ4X2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGRldnByaXYtPmFvW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzaG9ydCBkOworCXVuc2lnbmVkIGludCBjaGFuOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWQgPSBkYXRhWzBdOworCWQgJj0gKDEgPDwgYm9hcmR0eXBlLmRhYml0cykgLSAxOworCWRldnByaXYtPmFvW2NoYW5dID0gZDsKKworCWRldnByaXYtPmRhY3NyIHw9IERUMjgyMV9TU0VMOworCisJaWYgKGNoYW4pIHsKKwkJLyogc2VsZWN0IGNoYW5uZWwgKi8KKwkJZGV2cHJpdi0+ZGFjc3IgfD0gRFQyODIxX1lTRUw7CisJCWlmIChkZXZwcml2LT5kYTBfMnNjb21wKQorCQkJZCBePSAoMSA8PCAoYm9hcmR0eXBlLmRhYml0cyAtIDEpKTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5kYWNzciAmPSB+RFQyODIxX1lTRUw7CisJCWlmIChkZXZwcml2LT5kYTFfMnNjb21wKQorCQkJZCBePSAoMSA8PCAoYm9hcmR0eXBlLmRhYml0cyAtIDEpKTsKKwl9CisKKwl1cGRhdGVfZGFjc3IoMCk7CisKKwlvdXR3KGQsIGRldi0+aW9iYXNlICsgRFQyODIxX0RBREFUKTsKKworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX0RBQ09OKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9hb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX0lOVDsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUjsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJsaXR5IGlzIG5vdCBhbiBpc3N1ZSBoZXJlICovCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgNTAwMCAvKiBYWFggdW5rbm93biAqLyApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDUwMDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnID4gMikgeworCQkvKiBYWFggY2hhbmxpc3Qgc3R1ZmY/ICovCisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJLyogYW55IGNvdW50IGlzIGFsbG93ZWQgKi8KKwl9IGVsc2UgeworCQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwlkdDI4MnhfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X2FvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgeCkKK3sKKwlpbnQgc2l6ZTsKKworCWlmICh4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJc2l6ZSA9IGNmY19yZWFkX2FycmF5X2Zyb21fYnVmZmVyKHMsIGRldnByaXYtPmRtYVswXS5idWYsCisJCWRldnByaXYtPmRtYV9tYXhzaXplKTsKKwlpZiAoc2l6ZSA9PSAwKSB7CisJCXJ0X3ByaW50aygiZHQyODJ4OiBBTyB1bmRlcnJ1blxuIik7CisJCXJldHVybiAtRVBJUEU7CisJfQorCXByZXBfYW9fZG1hKGRldiwgMCwgc2l6ZSk7CisKKwlzaXplID0gY2ZjX3JlYWRfYXJyYXlfZnJvbV9idWZmZXIocywgZGV2cHJpdi0+ZG1hWzFdLmJ1ZiwKKwkJZGV2cHJpdi0+ZG1hX21heHNpemUpOworCWlmIChzaXplID09IDApIHsKKwkJcnRfcHJpbnRrKCJkdDI4Mng6IEFPIHVuZGVycnVuXG4iKTsKKwkJcmV0dXJuIC1FUElQRTsKKwl9CisJcHJlcF9hb19kbWEoZGV2LCAxLCBzaXplKTsKKworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX1NUUklHKTsKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkdDI4MnhfYW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IHRpbWVyOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCWlmIChkZXZwcml2LT51c2VkbWEgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImRyaXZlciByZXF1aXJlcyAyIGRtYSBjaGFubmVscyB0byBleGVjdXRlIGNvbW1hbmQiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZHQyODJ4X2Rpc2FibGVfZG1hKGRldik7CisKKwlkZXZwcml2LT5zdXBjc3IgPSBEVDI4MjFfRVJSSU5URU4gfCBEVDI4MjFfRFMxIHwgRFQyODIxX0RETUE7CisJdXBkYXRlX3N1cGNzcihEVDI4MjFfQ0xSRE1BRE5FIHwgRFQyODIxX0JVRkZCIHwgRFQyODIxX0RBQ0lOSVQpOworCisJZGV2cHJpdi0+bnRyaWcgPSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW47CisJZGV2cHJpdi0+bnJlYWQgPSBkZXZwcml2LT5udHJpZzsKKworCWRldnByaXYtPmRtYV9kaXIgPSBETUFfTU9ERV9XUklURTsKKwlkZXZwcml2LT5jdXJyZW50X2RtYV9pbmRleCA9IDA7CisKKwl0aW1lciA9IGR0MjgyeF9uc190b190aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywgVFJJR19ST1VORF9ORUFSRVNUKTsKKwlvdXR3KHRpbWVyLCBkZXYtPmlvYmFzZSArIERUMjgyMV9UTVJDVFIpOworCisJZGV2cHJpdi0+ZGFjc3IgPSBEVDI4MjFfU1NFTCB8IERUMjgyMV9EQUNMSyB8IERUMjgyMV9JREFSRFk7CisJdXBkYXRlX2RhY3NyKDApOworCisJcy0+YXN5bmMtPmludHRyaWcgPSBkdDI4MnhfYW9faW50dHJpZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9hb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlkdDI4MnhfZGlzYWJsZV9kbWEoZGV2KTsKKworCWRldnByaXYtPmRhY3NyID0gMDsKKwl1cGRhdGVfZGFjc3IoMCk7CisKKwlkZXZwcml2LT5zdXBjc3IgPSAwOworCXVwZGF0ZV9zdXBjc3IoRFQyODIxX0RBQ0lOSVQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCisJCW91dHcocy0+c3RhdGUsIGRldi0+aW9iYXNlICsgRFQyODIxX0RJT0RBVCk7CisJfQorCWRhdGFbMV0gPSBpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfRElPREFUKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IGR0MjgyeF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBtYXNrOworCisJbWFzayA9IChDUl9DSEFOKGluc24tPmNoYW5zcGVjKSA8IDgpID8gMHgwMGZmIDogMHhmZjAwOworCWlmIChkYXRhWzBdKQorCQlzLT5pb19iaXRzIHw9IG1hc2s7CisJZWxzZQorCQlzLT5pb19iaXRzICY9IH5tYXNrOworCisJaWYgKHMtPmlvX2JpdHMgJiAweDAwZmYpCisJCWRldnByaXYtPmRhY3NyIHw9IERUMjgyMV9MQk9FOworCWVsc2UKKwkJZGV2cHJpdi0+ZGFjc3IgJj0gfkRUMjgyMV9MQk9FOworCWlmIChzLT5pb19iaXRzICYgMHhmZjAwKQorCQlkZXZwcml2LT5kYWNzciB8PSBEVDI4MjFfSEJPRTsKKwllbHNlCisJCWRldnByaXYtPmRhY3NyICY9IH5EVDI4MjFfSEJPRTsKKworCW91dHcoZGV2cHJpdi0+ZGFjc3IsIGRldi0+aW9iYXNlICsgRFQyODIxX0RBQ1NSKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0IGFpX3JhbmdlX3RhYmxlW10gPSB7CisJJnJhbmdlX2R0MjgyeF9haV9sb19iaXBvbGFyLAorCSZyYW5nZV9kdDI4MnhfYWlfbG9fdW5pcG9sYXIsCisJJnJhbmdlX2R0MjgyeF9haV81X2JpcG9sYXIsCisJJnJhbmdlX2R0MjgyeF9haV81X3VuaXBvbGFyCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpjb25zdCBhaV9yYW5nZV9wZ2xfdGFibGVbXSA9IHsKKwkmcmFuZ2VfZHQyODJ4X2FpX2hpX2JpcG9sYXIsCisJJnJhbmdlX2R0MjgyeF9haV9oaV91bmlwb2xhcgorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqb3B0X2FpX3JhbmdlX2xrdXAoaW50IGlzcGdsLCBpbnQgeCkKK3sKKwlpZiAoaXNwZ2wpIHsKKwkJaWYgKHggPCAwIHx8IHggPj0gMikKKwkJCXggPSAwOworCQlyZXR1cm4gYWlfcmFuZ2VfcGdsX3RhYmxlW3hdOworCX0gZWxzZSB7CisJCWlmICh4IDwgMCB8fCB4ID49IDQpCisJCQl4ID0gMDsKKwkJcmV0dXJuIGFpX3JhbmdlX3RhYmxlW3hdOworCX0KK30KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgYW9fcmFuZ2VfdGFibGVbXSA9IHsKKwkmcmFuZ2VfYmlwb2xhcjEwLAorCSZyYW5nZV91bmlwb2xhcjEwLAorCSZyYW5nZV9iaXBvbGFyNSwKKwkmcmFuZ2VfdW5pcG9sYXI1LAorCSZyYW5nZV9iaXBvbGFyMl81Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpvcHRfYW9fcmFuZ2VfbGt1cChpbnQgeCkKK3sKKwlpZiAoeCA8IDAgfHwgeCA+PSA1KQorCQl4ID0gMDsKKwlyZXR1cm4gYW9fcmFuZ2VfdGFibGVbeF07Cit9CisKK2VudW0geyBvcHRfaW9iYXNlID0gMCwgb3B0X2lycSwgb3B0X2RtYTEsIG9wdF9kbWEyLAkvKiBpL28gYmFzZSwgaXJxLCBkbWEgY2hhbm5lbHMgKi8KKwlvcHRfZGlmZiwJCS8qIGRpZmZlcmVudGlhbCAqLworCW9wdF9haV90d29zLCBvcHRfYW8wX3R3b3MsIG9wdF9hbzFfdHdvcywJLyogdHdvcyBjb21wICovCisJb3B0X2FpX3JhbmdlLCBvcHRfYW8wX3JhbmdlLCBvcHRfYW8xX3JhbmdlLAkvKiByYW5nZSAqLworfTsKKworLyoKKyAgIG9wdGlvbnM6CisgICAwCWkvbyBiYXNlCisgICAxCWlycQorICAgMglkbWExCisgICAzCWRtYTIKKyAgIDQJMD1zaW5nbGUgZW5kZWQsIDE9ZGlmZmVyZW50aWFsCisgICA1CWFpIDA9c3RyYWlnaHQgYmluYXJ5LCAxPTIncyBjb21wCisgICA2CWFvMCAwPXN0cmFpZ2h0IGJpbmFyeSwgMT0yJ3MgY29tcAorICAgNwlhbzEgMD1zdHJhaWdodCBiaW5hcnksIDE9MidzIGNvbXAKKyAgIDgJYWkgMD3CsTEwIFYsIDE9MC0xMCBWLCAyPcKxNSBWLCAzPTAtNSBWCisgICA5CWFvMCAwPcKxMTAgViwgMT0wLTEwIFYsIDI9wrE1IFYsIDM9MC01IFYsIDQ9wrEyLjUgVgorICAgMTAJYW8xIDA9wrExMCBWLCAxPTAtMTAgViwgMj3CsTUgViwgMz0wLTUgViwgND3CsTIuNSBWCisgKi8KK3N0YXRpYyBpbnQgZHQyODJ4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgaSwgaXJxOworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbb3B0X2lvYmFzZV07CisJaWYgKCFpb2Jhc2UpCisJCWlvYmFzZSA9IDB4MjQwOworCisJcHJpbnRrKCJjb21lZGklZDogZHQyODJ4OiAweCUwNGx4IiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgRFQyODIxX1NJWkUsICJkdDI4MngiKSkgeworCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJb3V0dyhEVDI4MjFfQkRJTklULCBkZXYtPmlvYmFzZSArIERUMjgyMV9TVVBDU1IpOworCWkgPSBpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQURDU1IpOworI2lmZGVmIERFQlVHCisJcHJpbnRrKCIgZmluZ2VycHJpbnQ9JXgsJXgsJXgsJXgsJXgiLAorCQlpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQURDU1IpLAorCQlpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfQ0hBTkNTUiksCisJCWludyhkZXYtPmlvYmFzZSArIERUMjgyMV9EQUNTUiksCisJCWludyhkZXYtPmlvYmFzZSArIERUMjgyMV9TVVBDU1IpLAorCQlpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfVE1SQ1RSKSk7CisjZW5kaWYKKworCWlmICgoKGludyhkZXYtPmlvYmFzZSArIERUMjgyMV9BRENTUikgJiBEVDI4MjFfQURDU1JfTUFTSykKKwkJCSE9IERUMjgyMV9BRENTUl9WQUwpIHx8CisJCSgoaW53KGRldi0+aW9iYXNlICsgRFQyODIxX0NIQU5DU1IpICYgRFQyODIxX0NIQU5DU1JfTUFTSykKKwkJCSE9IERUMjgyMV9DSEFOQ1NSX1ZBTCkgfHwKKwkJKChpbncoZGV2LT5pb2Jhc2UgKyBEVDI4MjFfREFDU1IpICYgRFQyODIxX0RBQ1NSX01BU0spCisJCQkhPSBEVDI4MjFfREFDU1JfVkFMKSB8fAorCQkoKGludyhkZXYtPmlvYmFzZSArIERUMjgyMV9TVVBDU1IpICYgRFQyODIxX1NVUENTUl9NQVNLKQorCQkJIT0gRFQyODIxX1NVUENTUl9WQUwpIHx8CisJCSgoaW53KGRldi0+aW9iYXNlICsgRFQyODIxX1RNUkNUUikgJiBEVDI4MjFfVE1SQ1RSX01BU0spCisJCQkhPSBEVDI4MjFfVE1SQ1RSX1ZBTCkpIHsKKwkJcHJpbnRrKCIgYm9hcmQgbm90IGZvdW5kIik7CisJCXJldHVybiAtRUlPOworCX0KKwkvKiBzaG91bGQgZG8gYm9hcmQgdGVzdCAqLworCisJaXJxID0gaXQtPm9wdGlvbnNbb3B0X2lycV07CisjaWYgMAorCWlmIChpcnEgPCAwKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCWludCBpcnFzOworCisJCXNhdmVfZmxhZ3MoZmxhZ3MpOworCQlzdGkoKTsKKwkJaXJxcyA9IHByb2JlX2lycV9vbigpOworCisJCS8qIHRyaWdnZXIgaW50ZXJydXB0ICovCisKKwkJY29tZWRpX3VkZWxheSgxMDApOworCisJCWlycSA9IHByb2JlX2lycV9vZmYoaXJxcyk7CisJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQlpZiAoMCAvKiBlcnJvciAqLyApIHsKKwkJCXByaW50aygiIGVycm9yIHByb2JpbmcgaXJxIChiYWQpIik7CisJCX0KKwl9CisjZW5kaWYKKwlpZiAoaXJxID4gMCkgeworCQlwcmludGsoIiAoIGlycSA9ICVkICkiLCBpcnEpOworCQlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBkdDI4MnhfaW50ZXJydXB0LCAwLCAiZHQyODJ4IiwKKwkJCWRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoIiBmYWlsZWQgdG8gZ2V0IGlycVxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlkZXYtPmlycSA9IGlycTsKKwl9IGVsc2UgaWYgKGlycSA9PSAwKSB7CisJCXByaW50aygiIChubyBpcnEpIik7CisJfSBlbHNlIHsKKyNpZiAwCisJCXByaW50aygiIChwcm9iZSByZXR1cm5lZCBtdWx0aXBsZSBpcnFzLS1iYWQpIik7CisjZWxzZQorCQlwcmludGsoIiAoaXJxIHByb2JlIG5vdCBpbXBsZW1lbnRlZCkiKTsKKyNlbmRpZgorCX0KKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZHQyODJ4X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZHQyODJ4X2dyYWJfZG1hKGRldiwgaXQtPm9wdGlvbnNbb3B0X2RtYTFdLAorCQlpdC0+b3B0aW9uc1tvcHRfZG1hMl0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJLyogYWkgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9DTURfUkVBRCB8CisJCSgoaXQtPm9wdGlvbnNbb3B0X2RpZmZdKSA/IFNERl9ESUZGIDogU0RGX0NPTU1PTik7CisJcy0+bl9jaGFuID0KKwkJKGl0LT5vcHRpb25zW29wdF9kaWZmXSkgPyBib2FyZHR5cGUuYWRjaGFuX2RpIDogYm9hcmR0eXBlLgorCQlhZGNoYW5fc2U7CisJcy0+aW5zbl9yZWFkID0gZHQyODJ4X2FpX2luc25fcmVhZDsKKwlzLT5kb19jbWR0ZXN0ID0gZHQyODJ4X2FpX2NtZHRlc3Q7CisJcy0+ZG9fY21kID0gZHQyODJ4X2FpX2NtZDsKKwlzLT5jYW5jZWwgPSBkdDI4MnhfYWlfY2FuY2VsOworCXMtPm1heGRhdGEgPSAoMSA8PCBib2FyZHR5cGUuYWRiaXRzKSAtIDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMTY7CisJcy0+cmFuZ2VfdGFibGUgPQorCQlvcHRfYWlfcmFuZ2VfbGt1cChib2FyZHR5cGUuaXNwZ2wsIGl0LT5vcHRpb25zW29wdF9haV9yYW5nZV0pOworCWRldnByaXYtPmFkXzJzY29tcCA9IGl0LT5vcHRpb25zW29wdF9haV90d29zXTsKKworCXMrKzsKKwlpZiAoKHMtPm5fY2hhbiA9IGJvYXJkdHlwZS5kYWNoYW4pKSB7CisJCS8qIGFvIHN1YnN5c3RlbSAqLworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCWRldi0+d3JpdGVfc3ViZGV2ID0gczsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0NNRF9XUklURTsKKwkJcy0+aW5zbl9yZWFkID0gZHQyODJ4X2FvX2luc25fcmVhZDsKKwkJcy0+aW5zbl93cml0ZSA9IGR0MjgyeF9hb19pbnNuX3dyaXRlOworCQlzLT5kb19jbWR0ZXN0ID0gZHQyODJ4X2FvX2NtZHRlc3Q7CisJCXMtPmRvX2NtZCA9IGR0MjgyeF9hb19jbWQ7CisJCXMtPmNhbmNlbCA9IGR0MjgyeF9hb19jYW5jZWw7CisJCXMtPm1heGRhdGEgPSAoMSA8PCBib2FyZHR5cGUuZGFiaXRzKSAtIDE7CisJCXMtPmxlbl9jaGFubGlzdCA9IDI7CisJCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBkZXZwcml2LT5kYXJhbmdlbGlzdDsKKwkJZGV2cHJpdi0+ZGFyYW5nZWxpc3RbMF0gPQorCQkJb3B0X2FvX3JhbmdlX2xrdXAoaXQtPm9wdGlvbnNbb3B0X2FvMF9yYW5nZV0pOworCQlkZXZwcml2LT5kYXJhbmdlbGlzdFsxXSA9CisJCQlvcHRfYW9fcmFuZ2VfbGt1cChpdC0+b3B0aW9uc1tvcHRfYW8xX3JhbmdlXSk7CisJCWRldnByaXYtPmRhMF8yc2NvbXAgPSBpdC0+b3B0aW9uc1tvcHRfYW8wX3R3b3NdOworCQlkZXZwcml2LT5kYTFfMnNjb21wID0gaXQtPm9wdGlvbnNbb3B0X2FvMV90d29zXTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMrKzsKKwkvKiBkaW8gc3Vic3lzdGVtICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gZHQyODJ4X2Rpb19pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBkdDI4MnhfZGlvX2luc25fY29uZmlnOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9yZXNvdXJjZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRFQyODIxX1NJWkUpOworCWlmIChkZXYtPnByaXZhdGUpIHsKKwkJaWYgKGRldnByaXYtPmRtYVswXS5jaGFuKQorCQkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hWzBdLmNoYW4pOworCQlpZiAoZGV2cHJpdi0+ZG1hWzFdLmNoYW4pCisJCQlmcmVlX2RtYShkZXZwcml2LT5kbWFbMV0uY2hhbik7CisJCWlmIChkZXZwcml2LT5kbWFbMF0uYnVmKQorCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWRldnByaXYtPmRtYVswXS5idWYpOworCQlpZiAoZGV2cHJpdi0+ZG1hWzFdLmJ1ZikKKwkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkZXZwcml2LT5kbWFbMV0uYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkdDI4Mng6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlmcmVlX3Jlc291cmNlcyhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQyODJ4X2dyYWJfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgZG1hMSwgaW50IGRtYTIpCit7CisJaW50IHJldDsKKworCWRldnByaXYtPnVzZWRtYSA9IDA7CisKKwlpZiAoIWRtYTEgJiYgIWRtYTIpIHsKKwkJcHJpbnRrKCIgKG5vIGRtYSkiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGRtYTEgPT0gZG1hMiB8fCBkbWExIDwgNSB8fCBkbWEyIDwgNSB8fCBkbWExID4gNyB8fCBkbWEyID4gNykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZG1hMiA8IGRtYTEpIHsKKwkJaW50IGk7CisJCWkgPSBkbWExOworCQlkbWExID0gZG1hMjsKKwkJZG1hMiA9IGk7CisJfQorCisJcmV0ID0gcmVxdWVzdF9kbWEoZG1hMSwgImR0MjgyeCBBIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlkZXZwcml2LT5kbWFbMF0uY2hhbiA9IGRtYTE7CisKKwlyZXQgPSByZXF1ZXN0X2RtYShkbWEyLCAiZHQyODJ4IEIiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVCVVNZOworCWRldnByaXYtPmRtYVsxXS5jaGFuID0gZG1hMjsKKworCWRldnByaXYtPmRtYV9tYXhzaXplID0gUEFHRV9TSVpFOworCWRldnByaXYtPmRtYVswXS5idWYgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJZGV2cHJpdi0+ZG1hWzFdLmJ1ZiA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlpZiAoIWRldnByaXYtPmRtYVswXS5idWYgfHwgIWRldnByaXYtPmRtYVsxXS5idWYpIHsKKwkJcHJpbnRrKCIgY2FuJ3QgZ2V0IERNQSBtZW1vcnkiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpbnRrKCIgKGRtYT0lZCwlZCkiLCBkbWExLCBkbWEyKTsKKworCWRldnByaXYtPnVzZWRtYSA9IDE7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDMwMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDMwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTQ2Nzk4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MzAwMC5jCkBAIC0wLDAgKzEsOTgzIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2R0MzAwMC5jCisgICAgRGF0YSBUcmFuc2xhdGlvbiBEVDMwMDAgc2VyaWVzIGRyaXZlcgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogZHQzMDAwCitEZXNjcmlwdGlvbjogRGF0YSBUcmFuc2xhdGlvbiBEVDMwMDAgc2VyaWVzCitBdXRob3I6IGRzCitEZXZpY2VzOiBbRGF0YSBUcmFuc2xhdGlvbl0gRFQzMDAxIChkdDMwMDApLCBEVDMwMDEtUEdMLCBEVDMwMDIsIERUMzAwMywKKyAgRFQzMDAzLVBHTCwgRFQzMDA0LCBEVDMwMDUsIERUMzAwNC0yMDAKK1VwZGF0ZWQ6IE1vbiwgMTQgQXByIDIwMDggMTU6NDE6MjQgKzAxMDAKK1N0YXR1czogd29ya3MKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBzdXBwb3J0ZWQKKyAgUENJIGRldmljZSBmb3VuZCB3aWxsIGJlIHVzZWQuCisKK1RoZXJlIGlzIGNvZGUgdG8gc3VwcG9ydCBBSSBjb21tYW5kcywgYnV0IGl0IG1heSBub3Qgd29yay4KKworQU8gY29tbWFuZHMgYXJlIG5vdCBzdXBwb3J0ZWQuCisqLworCisvKgorICAgVGhlIERUMzAwMCBzZXJpZXMgaXMgRGF0YSBUcmFuc2xhdGlvbidzIGF0dGVtcHQgdG8gbWFrZSBhIFBDSQorICAgZGF0YSBhY3F1aXNpdGlvbiBib2FyZC4gIFRoZSBkZXNpZ24gb2YgdGhpcyBzZXJpZXMgaXMgdmVyeSBuaWNlLAorICAgc2luY2UgZWFjaCBib2FyZCBoYXMgYW4gb24tYm9hcmQgRFNQIChUZXhhcyBJbnN0cnVtZW50cyBUTVMzMjBDNTIpLgorICAgSG93ZXZlciwgYSBmZXcgZGV0YWlscyBhcmUgYSBsaXR0bGUgYW5ub3lpbmcuICBUaGUgYm9hcmRzIGxhY2sKKyAgIGJ1cy1tYXN0ZXJpbmcgRE1BLCB3aGljaCBlbGltaW5hdGVzIHRoZW0gZnJvbSBzZXJpb3VzIHdvcmsuCisgICBUaGV5IGFsc28gYXJlIG5vdCBjYXBhYmxlIG9mIGF1dG9jYWxpYnJhdGlvbiwgd2hpY2ggaXMgYSBjb21tb24KKyAgIGZlYXR1cmUgaW4gbW9kZXJuIGhhcmR3YXJlLiAgVGhlIGRlZmF1bHQgZmlybXdhcmUgaXMgcHJldHR5IGJhZCwKKyAgIG1ha2luZyBpdCBuZWFybHkgaW1wb3NzaWJsZSB0byB3cml0ZSBhbiBSVCBjb21wYXRpYmxlIGRyaXZlci4KKyAgIEl0IHdvdWxkIG1ha2UgYW4gaW50ZXJlc3RpbmcgcHJvamVjdCB0byB3cml0ZSBhIGRlY2VudCBmaXJtd2FyZQorICAgZm9yIHRoZXNlIGJvYXJkcy4KKworICAgRGF0YSBUcmFuc2xhdGlvbiBvcmlnaW5hbGx5IHdhbnRlZCBhbiBOREEgZm9yIHRoZSBkb2N1bWVudGF0aW9uCisgICBmb3IgdGhlIDNrIHNlcmllcy4gIEhvd2V2ZXIsIGlmIHlvdSBhc2sgbmljZWx5LCB0aGV5IG1pZ2h0IHNlbmQKKyAgIHlvdSB0aGUgZG9jcyB3aXRob3V0IG9uZSwgYWxzby4KKyovCisKKyNkZWZpbmUgREVCVUcgMQorCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImNvbWVkaV9wY2kuaCIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RUCTB4MTExNgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQzMDAwX2FpID0geyA0LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0yLjUsIDIuNSksCisJCQlSQU5HRSgtMS4yNSwgMS4yNSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2R0MzAwMF9haV9wZ2wgPSB7IDQsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTEsIDEpLAorCQkJUkFOR0UoLTAuMSwgMC4xKSwKKwkJCVJBTkdFKC0wLjAyLCAwLjAyKQorCX0KK307CisKK3N0cnVjdCBkdDNrX2JvYXJkdHlwZSB7CisKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBkZXZpY2VfaWQ7CisJaW50IGFkY2hhbjsKKwlpbnQgYWRiaXRzOworCWludCBhaV9zcGVlZDsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWRyYW5nZTsKKwlpbnQgZGFjaGFuOworCWludCBkYWJpdHM7Cit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHQza19ib2FyZHR5cGUgZHQza19ib2FyZHR5cGVzW10gPSB7CisgICAgICB7bmFtZToiZHQzMDAxIiwKKwkgICAgICBkZXZpY2VfaWQ6MHgyMiwKKwkgICAgICBhZGNoYW46CTE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRyYW5nZToJJnJhbmdlX2R0MzAwMF9haSwKKwkgICAgICBhaV9zcGVlZDozMDAwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MzAwMS1wZ2wiLAorCSAgICAgIGRldmljZV9pZDoweDI3LAorCSAgICAgIGFkY2hhbjoJMTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhZHJhbmdlOgkmcmFuZ2VfZHQzMDAwX2FpX3BnbCwKKwkgICAgICBhaV9zcGVlZDozMDAwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MzAwMiIsCisJICAgICAgZGV2aWNlX2lkOjB4MjMsCisJICAgICAgYWRjaGFuOgkzMiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2U6CSZyYW5nZV9kdDMwMDBfYWksCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICBkYWNoYW46CTAsCisJICAgICAgZGFiaXRzOgkwLAorCQl9LAorICAgICAge25hbWU6ImR0MzAwMyIsCisJICAgICAgZGV2aWNlX2lkOjB4MjQsCisJICAgICAgYWRjaGFuOgk2NCwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFkcmFuZ2U6CSZyYW5nZV9kdDMwMDBfYWksCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDMwMDMtcGdsIiwKKwkgICAgICBkZXZpY2VfaWQ6MHgyOCwKKwkgICAgICBhZGNoYW46CTY0LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWRyYW5nZToJJnJhbmdlX2R0MzAwMF9haV9wZ2wsCisJICAgICAgYWlfc3BlZWQ6MzAwMCwKKwkgICAgICBkYWNoYW46CTIsCisJICAgICAgZGFiaXRzOgkxMiwKKwkJfSwKKyAgICAgIHtuYW1lOiJkdDMwMDQiLAorCSAgICAgIGRldmljZV9pZDoweDI1LAorCSAgICAgIGFkY2hhbjoJMTYsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhZHJhbmdlOgkmcmFuZ2VfZHQzMDAwX2FpLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorICAgICAge25hbWU6ImR0MzAwNSIsCQkvKiBhLmsuYS4gMzAwNC0yMDAgKi8KKwkgICAgICBkZXZpY2VfaWQ6MHgyNiwKKwkgICAgICBhZGNoYW46CTE2LAorCSAgICAgIGFkYml0czoJMTYsCisJICAgICAgYWRyYW5nZToJJnJhbmdlX2R0MzAwMF9haSwKKwkgICAgICBhaV9zcGVlZDo1MDAwLAorCSAgICAgIGRhY2hhbjoJMiwKKwkgICAgICBkYWJpdHM6CTEyLAorCQl9LAorfTsKKworI2RlZmluZSBuX2R0M2tfYm9hcmRzIHNpemVvZihkdDNrX2JvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgZHQza19ib2FyZHR5cGUpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgZHQza19ib2FyZHR5cGUgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGR0M2tfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDIyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDI3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDIzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDI4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDI1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9EVCwgMHgwMDI2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBkdDNrX3BjaV90YWJsZSk7CisKKyNkZWZpbmUgRFQzMDAwX1NJWkUJCSg0KjB4MTAwMCkKKworLyogZHVhbC1wb3J0ZWQgUkFNIGxvY2F0aW9uIGRlZmluaXRpb25zICovCisKKyNkZWZpbmUgRFBSX0RBQ19idWZmZXIJCSg0KjB4MDAwKQorI2RlZmluZSBEUFJfQURDX2J1ZmZlcgkJKDQqMHg4MDApCisjZGVmaW5lIERQUl9Db21tYW5kCQkoNCoweGZkMykKKyNkZWZpbmUgRFBSX1N1YlN5cwkJKDQqMHhmZDMpCisjZGVmaW5lIERQUl9FbmNvZGUJCSg0KjB4ZmQ0KQorI2RlZmluZSBEUFJfUGFyYW1zKGEpCQkoNCooMHhmZDUrKGEpKSkKKyNkZWZpbmUgRFBSX1RpY2tfUmVnX0xvCQkoNCoweGZmNSkKKyNkZWZpbmUgRFBSX1RpY2tfUmVnX0hpCQkoNCoweGZmNikKKyNkZWZpbmUgRFBSX0RBX0J1Zl9Gcm9udAkoNCoweGZmNykKKyNkZWZpbmUgRFBSX0RBX0J1Zl9SZWFyCQkoNCoweGZmOCkKKyNkZWZpbmUgRFBSX0FEX0J1Zl9Gcm9udAkoNCoweGZmOSkKKyNkZWZpbmUgRFBSX0FEX0J1Zl9SZWFyCQkoNCoweGZmYSkKKyNkZWZpbmUgRFBSX0ludF9NYXNrCQkoNCoweGZmYikKKyNkZWZpbmUgRFBSX0ludHJfRmxhZwkJKDQqMHhmZmMpCisjZGVmaW5lIERQUl9SZXNwb25zZV9NYngJKDQqMHhmZmUpCisjZGVmaW5lIERQUl9Db21tYW5kX01ieAkJKDQqMHhmZmYpCisKKyNkZWZpbmUgQUlfRklGT19ERVBUSAkyMDAzCisjZGVmaW5lIEFPX0ZJRk9fREVQVEgJMjA0OAorCisvKiBjb21tYW5kIGxpc3QgKi8KKworI2RlZmluZSBDTURfR0VUQlJESU5GTwkJMAorI2RlZmluZSBDTURfQ09ORklHCQkxCisjZGVmaW5lIENNRF9HRVRDT05GSUcJCTIKKyNkZWZpbmUgQ01EX1NUQVJUCQkzCisjZGVmaW5lIENNRF9TVE9QCQk0CisjZGVmaW5lIENNRF9SRUFEU0lOR0xFCQk1CisjZGVmaW5lIENNRF9XUklURVNJTkdMRQkJNgorI2RlZmluZSBDTURfQ0FMQ0NMT0NLCQk3CisjZGVmaW5lIENNRF9SRUFERVZFTlRTCQk4CisjZGVmaW5lIENNRF9XUklURUNUQ1RSTAkJMTYKKyNkZWZpbmUgQ01EX1JFQURDVENUUkwJCTE3CisjZGVmaW5lIENNRF9XUklURUNUCQkxOAorI2RlZmluZSBDTURfUkVBRENUCQkxOQorI2RlZmluZSBDTURfV1JJVEVEQVRBCQkzMgorI2RlZmluZSBDTURfUkVBRERBVEEJCTMzCisjZGVmaW5lIENNRF9XUklURUlPCQkzNAorI2RlZmluZSBDTURfUkVBRElPCQkzNQorI2RlZmluZSBDTURfV1JJVEVDT0RFCQkzNgorI2RlZmluZSBDTURfUkVBRENPREUJCTM3CisjZGVmaW5lIENNRF9FWEVDVVRFCQkzOAorI2RlZmluZSBDTURfSEFMVAkJNDgKKworI2RlZmluZSBTVUJTX0FJCQkwCisjZGVmaW5lIFNVQlNfQU8JCTEKKyNkZWZpbmUgU1VCU19ESU4JMgorI2RlZmluZSBTVUJTX0RPVVQJMworI2RlZmluZSBTVUJTX01FTQk0CisjZGVmaW5lIFNVQlNfQ1QJCTUKKworLyogaW50ZXJydXB0IGZsYWdzICovCisjZGVmaW5lIERUMzAwMF9DTURPTkUJCTB4ODAKKyNkZWZpbmUgRFQzMDAwX0NURE9ORQkJMHg0MAorI2RlZmluZSBEVDMwMDBfREFIV0VSUgkJMHgyMAorI2RlZmluZSBEVDMwMDBfREFTV0VSUgkJMHgxMAorI2RlZmluZSBEVDMwMDBfREFFTVBUWQkJMHgwOAorI2RlZmluZSBEVDMwMDBfQURIV0VSUgkJMHgwNAorI2RlZmluZSBEVDMwMDBfQURTV0VSUgkJMHgwMgorI2RlZmluZSBEVDMwMDBfQURGVUxMCQkweDAxCisKKyNkZWZpbmUgRFQzMDAwX0NPTVBMRVRJT05fTUFTSwkweGZmMDAKKyNkZWZpbmUgRFQzMDAwX0NPTU1BTkRfTUFTSwkweDAwZmYKKyNkZWZpbmUgRFQzMDAwX05PVFBST0NFU1NFRAkweDAwMDAKKyNkZWZpbmUgRFQzMDAwX05PRVJST1IJCTB4NTUwMAorI2RlZmluZSBEVDMwMDBfRVJST1IJCTB4YWEwMAorI2RlZmluZSBEVDMwMDBfTk9UU1VQUE9SVEVECTB4ZmYwMAorCisjZGVmaW5lIERUMzAwMF9FWFRFUk5BTF9DTE9DSwkxCisjZGVmaW5lIERUMzAwMF9SSVNJTkdfRURHRQkyCisKKyNkZWZpbmUgVE1PREVfTUFTSwkJMHgxYworCisjZGVmaW5lIERUMzAwMF9BRF9UUklHX0lOVEVSTkFMCQkoMDw8MikKKyNkZWZpbmUgRFQzMDAwX0FEX1RSSUdfRVhURVJOQUwJCSgxPDwyKQorI2RlZmluZSBEVDMwMDBfQURfUkVUUklHX0lOVEVSTkFMCSgyPDwyKQorI2RlZmluZSBEVDMwMDBfQURfUkVUUklHX0VYVEVSTkFMCSgzPDwyKQorI2RlZmluZSBEVDMwMDBfQURfRVhUUkVUUklHCQkoNDw8MikKKworI2RlZmluZSBEVDMwMDBfQ0hBTk5FTF9NT0RFX1NFCQkwCisjZGVmaW5lIERUMzAwMF9DSEFOTkVMX01PREVfREkJCTEKKworc3RydWN0IGR0M2tfcHJpdmF0ZSB7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKKwlyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyOworCXZvaWQgKmlvX2FkZHI7CisJdW5zaWduZWQgaW50IGxvY2s7CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworCXVuc2lnbmVkIGludCBhaV9mcm9udDsKKwl1bnNpZ25lZCBpbnQgYWlfcmVhcjsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkdDNrX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgZHQzMDAwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGR0MzAwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kdDMwMDAgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZHQzMDAwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkdDMwMDBfYXR0YWNoLAorICAgICAgZGV0YWNoOmR0MzAwMF9kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9kdDMwMDAsIGR0M2tfcGNpX3RhYmxlKTsKKworc3RhdGljIHZvaWQgZHQza19haV9lbXB0eV9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBkdDNrX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCB0aW1lcl9iYXNlLCB1bnNpZ25lZCBpbnQgKmFyZywKKwl1bnNpZ25lZCBpbnQgcm91bmRfbW9kZSk7CitzdGF0aWMgaW50IGR0M2tfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCBkZWJ1Z19pbnRyX2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncyk7CisjZW5kaWYKKworI2RlZmluZSBUSU1FT1VUIDEwMAorCitzdGF0aWMgaW50IGR0M2tfc2VuZF9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjbWQpCit7CisJaW50IGk7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CisKKwl3cml0ZXcoY21kLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX0NvbW1hbmRfTWJ4KTsKKworCWZvciAoaSA9IDA7IGkgPCBUSU1FT1VUOyBpKyspIHsKKwkJc3RhdHVzID0gcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIERQUl9Db21tYW5kX01ieCk7CisJCWlmICgoc3RhdHVzICYgRFQzMDAwX0NPTVBMRVRJT05fTUFTSykgIT0gRFQzMDAwX05PVFBST0NFU1NFRCkKKwkJCWJyZWFrOworCQljb21lZGlfdWRlbGF5KDEpOworCX0KKwlpZiAoKHN0YXR1cyAmIERUMzAwMF9DT01QTEVUSU9OX01BU0spID09IERUMzAwMF9OT0VSUk9SKSB7CisJCXJldHVybiAwOworCX0KKworCXByaW50aygiZHQza19zZW5kX2NtZCgpIHRpbWVvdXQvZXJyb3Igc3RhdHVzPTB4JTA0eFxuIiwgc3RhdHVzKTsKKworCXJldHVybiAtRVRJTUU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZHQza19yZWFkc2luZ2xlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgc3Vic3lzLAorCXVuc2lnbmVkIGludCBjaGFuLCB1bnNpZ25lZCBpbnQgZ2FpbikKK3sKKwl3cml0ZXcoc3Vic3lzLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1N1YlN5cyk7CisKKwl3cml0ZXcoY2hhbiwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMCkpOworCXdyaXRldyhnYWluLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygxKSk7CisKKwlkdDNrX3NlbmRfY21kKGRldiwgQ01EX1JFQURTSU5HTEUpOworCisJcmV0dXJuIHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDIpKTsKK30KKworc3RhdGljIHZvaWQgZHQza193cml0ZXNpbmdsZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHN1YnN5cywKKwl1bnNpZ25lZCBpbnQgY2hhbiwgdW5zaWduZWQgaW50IGRhdGEpCit7CisJd3JpdGV3KHN1YnN5cywgZGV2cHJpdi0+aW9fYWRkciArIERQUl9TdWJTeXMpOworCisJd3JpdGV3KGNoYW4sIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDApKTsKKwl3cml0ZXcoMCwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMSkpOworCXdyaXRldyhkYXRhLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygyKSk7CisKKwlkdDNrX3NlbmRfY21kKGRldiwgQ01EX1dSSVRFU0lOR0xFKTsKK30KKworc3RhdGljIGludCBkZWJ1Z19uX2ludHMgPSAwOworCisvLyBGSVhNRSEgQXNzdW1lcyBzaGFyZWQgaW50ZXJydXB0IGlzIGZvciB0aGlzIGNhcmQuCisvLyBXaGF0J3MgdGhpcyBkZWJ1Z19uX2ludHMgc3R1ZmY/IE9idmlvdXNseSBuZWVkcyBzb21lIHdvcmsuLi4KK3N0YXRpYyBpcnFyZXR1cm5fdCBkdDNrX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXN0YXR1cyA9IHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBEUFJfSW50cl9GbGFnKTsKKyNpZmRlZiBERUJVRworCWRlYnVnX2ludHJfZmxhZ3Moc3RhdHVzKTsKKyNlbmRpZgorCisJaWYgKHN0YXR1cyAmIERUMzAwMF9BREZVTEwpIHsKKwkJZHQza19haV9lbXB0eV9maWZvKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOworCX0KKworCWlmIChzdGF0dXMgJiAoRFQzMDAwX0FEU1dFUlIgfCBEVDMwMDBfQURIV0VSUikpIHsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCX0KKworCWRlYnVnX25faW50cysrOworCWlmIChkZWJ1Z19uX2ludHMgPj0gMTApIHsKKwkJZHQza19haV9jYW5jZWwoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgY2hhciAqaW50cl9mbGFnc1tdID0geworCSJBZEZ1bGwiLCAiQWRTd0Vycm9yIiwgIkFkSHdFcnJvciIsICJEYUVtcHR5IiwKKwkiRGFTd0Vycm9yIiwgIkRhSHdFcnJvciIsICJDdERvbmUiLCAiQ21Eb25lIiwKK307CitzdGF0aWMgdm9pZCBkZWJ1Z19pbnRyX2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpbnQgaTsKKwlwcmludGsoImR0M2s6IGludHJfZmxhZ3M6Iik7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoZmxhZ3MgJiAoMSA8PCBpKSkgeworCQkJcHJpbnRrKCIgJXMiLCBpbnRyX2ZsYWdzW2ldKTsKKwkJfQorCX0KKwlwcmludGsoIlxuIik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZHQza19haV9lbXB0eV9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IGZyb250OworCWludCByZWFyOworCWludCBjb3VudDsKKwlpbnQgaTsKKwlzaG9ydCBkYXRhOworCisJZnJvbnQgPSByZWFkdyhkZXZwcml2LT5pb19hZGRyICsgRFBSX0FEX0J1Zl9Gcm9udCk7CisJY291bnQgPSBmcm9udCAtIGRldnByaXYtPmFpX2Zyb250OworCWlmIChjb3VudCA8IDApCisJCWNvdW50ICs9IEFJX0ZJRk9fREVQVEg7CisKKwlwcmludGsoInJlYWRpbmcgJWQgc2FtcGxlc1xuIiwgY291bnQpOworCisJcmVhciA9IGRldnByaXYtPmFpX3JlYXI7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlkYXRhID0gcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIERQUl9BRENfYnVmZmVyICsgcmVhcik7CisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBkYXRhKTsKKwkJcmVhcisrOworCQlpZiAocmVhciA+PSBBSV9GSUZPX0RFUFRIKQorCQkJcmVhciA9IDA7CisJfQorCisJZGV2cHJpdi0+YWlfcmVhciA9IHJlYXI7CisJd3JpdGV3KHJlYXIsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfQURfQnVmX1JlYXIpOworfQorCitzdGF0aWMgaW50IGR0M2tfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IHRoaXNfYm9hcmQtPmFpX3NwZWVkKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gdGhpc19ib2FyZC0+YWlfc3BlZWQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IDEwMCAqIDE2ICogNjU1MzUpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAxMDAgKiAxNiAqIDY1NTM1OworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBub3Qgc3VwcG9ydGVkICovCisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9zcGVlZCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiA1MCAqIDE2ICogNjU1MzUpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSA1MCAqIDE2ICogNjU1MzU7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIG5vdCBzdXBwb3J0ZWQgKi8KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKGNtZC0+c3RvcF9hcmcgPiAweDAwZmZmZmZmKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMHgwMGZmZmZmZjsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJZHQza19uc190b190aW1lcigxMDAsICZjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0gZWxzZSB7CisJCS8qIG5vdCBzdXBwb3J0ZWQgKi8KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlkdDNrX25zX3RvX3RpbWVyKDUwLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUiAmJgorCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmcpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogbm90IHN1cHBvcnRlZCAqLworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQza19uc190b190aW1lcih1bnNpZ25lZCBpbnQgdGltZXJfYmFzZSwgdW5zaWduZWQgaW50ICpuYW5vc2VjLAorCXVuc2lnbmVkIGludCByb3VuZF9tb2RlKQoreworCWludCBkaXZpZGVyLCBiYXNlLCBwcmVzY2FsZTsKKworCS8qIFRoaXMgZnVuY3Rpb24gbmVlZHMgaW1wcm92bWVudCAqLworCS8qIERvbid0IGtub3cgaWYgZGl2aWRlcj09MCB3b3Jrcy4gKi8KKworCWZvciAocHJlc2NhbGUgPSAwOyBwcmVzY2FsZSA8IDE2OyBwcmVzY2FsZSsrKSB7CisJCWJhc2UgPSB0aW1lcl9iYXNlICogKHByZXNjYWxlICsgMSk7CisJCXN3aXRjaCAocm91bmRfbW9kZSkgeworCQljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwkJZGVmYXVsdDoKKwkJCWRpdmlkZXIgPSAoKm5hbm9zZWMgKyBiYXNlIC8gMikgLyBiYXNlOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkJZGl2aWRlciA9ICgqbmFub3NlYykgLyBiYXNlOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJCWRpdmlkZXIgPSAoKm5hbm9zZWMpIC8gYmFzZTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChkaXZpZGVyIDwgNjU1MzYpIHsKKwkJCSpuYW5vc2VjID0gZGl2aWRlciAqIGJhc2U7CisJCQlyZXR1cm4gKHByZXNjYWxlIDw8IDE2KSB8IChkaXZpZGVyKTsKKwkJfQorCX0KKworCXByZXNjYWxlID0gMTU7CisJYmFzZSA9IHRpbWVyX2Jhc2UgKiAoMSA8PCBwcmVzY2FsZSk7CisJZGl2aWRlciA9IDY1NTM1OworCSpuYW5vc2VjID0gZGl2aWRlciAqIGJhc2U7CisJcmV0dXJuIChwcmVzY2FsZSA8PCAxNikgfCAoZGl2aWRlcik7Cit9CisKK3N0YXRpYyBpbnQgZHQza19haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGNoYW4sIHJhbmdlLCBhcmVmOworCXVuc2lnbmVkIGludCBkaXZpZGVyOworCXVuc2lnbmVkIGludCB0c2NhbmRpdjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBtb2RlOworCisJcHJpbnRrKCJkdDNrX2FpX2NtZDpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBjbWQtPmNoYW5saXN0X2xlbjsgaSsrKSB7CisJCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOworCQlyYW5nZSA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCisJCXdyaXRldygocmFuZ2UgPDwgNikgfCBjaGFuLAorCQkJZGV2cHJpdi0+aW9fYWRkciArIERQUl9BRENfYnVmZmVyICsgaSk7CisJfQorCWFyZWYgPSBDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pOworCisJd3JpdGV3KGNtZC0+c2Nhbl9lbmRfYXJnLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygwKSk7CisJcHJpbnRrKCJwYXJhbVswXT0weCUwNHhcbiIsIGNtZC0+c2Nhbl9lbmRfYXJnKTsKKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJZGl2aWRlciA9IGR0M2tfbnNfdG9fdGltZXIoNTAsICZjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCXdyaXRldygoZGl2aWRlciA+PiAxNiksIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDEpKTsKKwkJcHJpbnRrKCJwYXJhbVsxXT0weCUwNHhcbiIsIGRpdmlkZXIgPj4gMTYpOworCQl3cml0ZXcoKGRpdmlkZXIgJiAweGZmZmYpLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygyKSk7CisJCXByaW50aygicGFyYW1bMl09MHglMDR4XG4iLCBkaXZpZGVyICYgMHhmZmZmKTsKKwl9IGVsc2UgeworCQkvKiBub3Qgc3VwcG9ydGVkICovCisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0c2NhbmRpdiA9IGR0M2tfbnNfdG9fdGltZXIoMTAwLCAmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQl3cml0ZXcoKHRzY2FuZGl2ID4+IDE2KSwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMykpOworCQlwcmludGsoInBhcmFtWzNdPTB4JTA0eFxuIiwgdHNjYW5kaXYgPj4gMTYpOworCQl3cml0ZXcoKHRzY2FuZGl2ICYgMHhmZmZmKSwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoNCkpOworCQlwcmludGsoInBhcmFtWzRdPTB4JTA0eFxuIiwgdHNjYW5kaXYgJiAweGZmZmYpOworCX0gZWxzZSB7CisJCS8qIG5vdCBzdXBwb3J0ZWQgKi8KKwl9CisKKwltb2RlID0gRFQzMDAwX0FEX1JFVFJJR19JTlRFUk5BTCB8IDAgfCAwOworCXdyaXRldyhtb2RlLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcyg1KSk7CisJcHJpbnRrKCJwYXJhbVs1XT0weCUwNHhcbiIsIG1vZGUpOworCXdyaXRldyhhcmVmID09IEFSRUZfRElGRiwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoNikpOworCXByaW50aygicGFyYW1bNl09MHglMDR4XG4iLCBhcmVmID09IEFSRUZfRElGRik7CisKKwl3cml0ZXcoQUlfRklGT19ERVBUSCAvIDIsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDcpKTsKKwlwcmludGsoInBhcmFtWzddPTB4JTA0eFxuIiwgQUlfRklGT19ERVBUSCAvIDIpOworCisJd3JpdGV3KFNVQlNfQUksIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfU3ViU3lzKTsKKwlyZXQgPSBkdDNrX3NlbmRfY21kKGRldiwgQ01EX0NPTkZJRyk7CisKKwl3cml0ZXcoRFQzMDAwX0FERlVMTCB8IERUMzAwMF9BRFNXRVJSIHwgRFQzMDAwX0FESFdFUlIsCisJCWRldnByaXYtPmlvX2FkZHIgKyBEUFJfSW50X01hc2spOworCisJZGVidWdfbl9pbnRzID0gMDsKKworCXdyaXRldyhTVUJTX0FJLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1N1YlN5cyk7CisJcmV0ID0gZHQza19zZW5kX2NtZChkZXYsIENNRF9TVEFSVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdDNrX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCByZXQ7CisKKwl3cml0ZXcoU1VCU19BSSwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9TdWJTeXMpOworCXJldCA9IGR0M2tfc2VuZF9jbWQoZGV2LCBDTURfU1RPUCk7CisKKwl3cml0ZXcoMCwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9JbnRfTWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkdDNrX2FpX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCXVuc2lnbmVkIGludCBjaGFuLCBnYWluLCBhcmVmOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWdhaW4gPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJLyogWFhYIGRvY3MgZG9uJ3QgZXhwbGFpbiBob3cgdG8gc2VsZWN0IGFyZWYgKi8KKwlhcmVmID0gQ1JfQVJFRihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkdDNrX3JlYWRzaW5nbGUoZGV2LCBTVUJTX0FJLCBjaGFuLCBnYWluKTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBkdDNrX2FvX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCXVuc2lnbmVkIGludCBjaGFuOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZHQza193cml0ZXNpbmdsZShkZXYsIFNVQlNfQU8sIGNoYW4sIGRhdGFbaV0pOworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgZHQza19hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCXVuc2lnbmVkIGludCBjaGFuOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBkdDNrX2Rpb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBiaXRzKQoreworCS8qIFhYWCAqLworCXdyaXRldyhTVUJTX0RPVVQsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfU3ViU3lzKTsKKworCXdyaXRldyhiaXRzLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygwKSk7CisjaWYgMAorCS8qIGRvbid0IGtub3cgKi8KKwl3cml0ZXcoMCwgZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMSkpOworCXdyaXRldygwLCBkZXZwcml2LT5pb19hZGRyICsgRFBSX1BhcmFtcygyKSk7CisjZW5kaWYKKworCWR0M2tfc2VuZF9jbWQoZGV2LCBDTURfQ09ORklHKTsKK30KKworc3RhdGljIGludCBkdDNrX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG1hc2s7CisKKwltYXNrID0gKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpIDwgNCkgPyAweDBmIDogMHhmMDsKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcy0+aW9fYml0cyB8PSBtYXNrOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+bWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJKHMtPmlvX2JpdHMgJiAoMSA8PCBDUl9DSEFOKGluc24tPgorCQkJCQljaGFuc3BlYykpKSA/IENPTUVESV9PVVRQVVQgOgorCQkJQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwltYXNrID0gKHMtPmlvX2JpdHMgJiAweDAxKSB8ICgocy0+aW9fYml0cyAmIDB4MTApID4+IDMpOworCWR0M2tfZGlvX2NvbmZpZyhkZXYsIG1hc2spOworCisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyBpbnQgZHQza19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzFdICYgZGF0YVswXTsKKwkJZHQza193cml0ZXNpbmdsZShkZXYsIFNVQlNfRE9VVCwgMCwgcy0+c3RhdGUpOworCX0KKwlkYXRhWzFdID0gZHQza19yZWFkc2luZ2xlKGRldiwgU1VCU19ESU4sIDAsIDApOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgZHQza19tZW1faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkciA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQl3cml0ZXcoU1VCU19NRU0sIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfU3ViU3lzKTsKKwkJd3JpdGV3KGFkZHIsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDApKTsKKwkJd3JpdGV3KDEsIGRldnByaXYtPmlvX2FkZHIgKyBEUFJfUGFyYW1zKDEpKTsKKworCQlkdDNrX3NlbmRfY21kKGRldiwgQ01EX1JFQURDT0RFKTsKKworCQlkYXRhW2ldID0gcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIERQUl9QYXJhbXMoMikpOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGR0X3BjaV9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpOworCitzdGF0aWMgaW50IGR0MzAwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGJ1cywgc2xvdDsKKwlpbnQgcmV0ID0gMDsKKworCXByaW50aygiZHQzMDAwOiIpOworCWJ1cyA9IGl0LT5vcHRpb25zWzBdOworCXNsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgZHQza19wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGR0X3BjaV9wcm9iZShkZXYsIGJ1cywgc2xvdCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHJldCA9PSAwKSB7CisJCXByaW50aygiIG5vIERUIGJvYXJkIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKworCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoZGV2cHJpdi0+cGNpX2Rldi0+aXJxLCBkdDNrX2ludGVycnVwdCwKKwkJCUlSUUZfU0hBUkVELCAiZHQzMDAwIiwgZGV2KSkgeworCQlwcmludGsoIiB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1XG4iLCBkZXZwcml2LT5wY2lfZGV2LT5pcnEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2LT5pcnEgPSBkZXZwcml2LT5wY2lfZGV2LT5pcnE7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcyA9IGRldi0+c3ViZGV2aWNlczsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKworCS8qIGFpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0RJRkYgfCBTREZfQ01EX1JFQUQ7CisJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+YWRjaGFuOworCXMtPmluc25fcmVhZCA9IGR0M2tfYWlfaW5zbjsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc19ib2FyZC0+YWRiaXRzKSAtIDE7CisJcy0+bGVuX2NoYW5saXN0ID0gNTEyOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2R0MzAwMF9haTsJLyogWFhYICovCisJcy0+ZG9fY21kID0gZHQza19haV9jbWQ7CisJcy0+ZG9fY21kdGVzdCA9IGR0M2tfYWlfY21kdGVzdDsKKwlzLT5jYW5jZWwgPSBkdDNrX2FpX2NhbmNlbDsKKworCXMrKzsKKwkvKiBhbyBzdWJzeXN0ZW0gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDI7CisJcy0+aW5zbl9yZWFkID0gZHQza19hb19pbnNuX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IGR0M2tfYW9faW5zbjsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc19ib2FyZC0+ZGFiaXRzKSAtIDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisKKwlzKys7CisJLyogZGlvIHN1YnN5c3RlbSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9jb25maWcgPSBkdDNrX2Rpb19pbnNuX2NvbmZpZzsKKwlzLT5pbnNuX2JpdHMgPSBkdDNrX2Rpb19pbnNuX2JpdHM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gODsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJcysrOworCS8qIG1lbSBzdWJzeXN0ZW0gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfTUVNT1JZOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSAweDEwMDA7CisJcy0+aW5zbl9yZWFkID0gZHQza19tZW1faW5zbl9yZWFkOworCXMtPm1heGRhdGEgPSAweGZmOworCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKworI2lmIDAKKwlzKys7CisJLyogcHJvYyBzdWJzeXN0ZW0gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfUFJPQzsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHQzMDAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CisJCQlpZiAoZGV2cHJpdi0+cGh5c19hZGRyKSB7CisJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CisJCX0KKwkJaWYgKGRldnByaXYtPmlvX2FkZHIpCisJCQlpb3VubWFwKGRldnByaXYtPmlvX2FkZHIpOworCX0KKwkvKiBYWFggKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmR0X3BjaV9maW5kX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZnJvbSwgaW50ICpib2FyZCk7CitzdGF0aWMgaW50IHNldHVwX3BjaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBpbnQgZHRfcGNpX3Byb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCkKK3sKKwlpbnQgYm9hcmQ7CisJaW50IHJldDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCisJcGNpZGV2ID0gTlVMTDsKKwl3aGlsZSAoKHBjaWRldiA9IGR0X3BjaV9maW5kX2RldmljZShwY2lkZXYsICZib2FyZCkpICE9IE5VTEwpIHsKKwkJaWYgKChidXMgPT0gMCAmJiBzbG90ID09IDApIHx8CisJCQkocGNpZGV2LT5idXMtPm51bWJlciA9PSBidXMgJiYKKwkJCSBQQ0lfU0xPVChwY2lkZXYtPmRldmZuKSA9PSBzbG90KSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKKworCWlmIChib2FyZCA+PSAwKQorCQlkZXYtPmJvYXJkX3B0ciA9IGR0M2tfYm9hcmR0eXBlcyArIGJvYXJkOworCisJaWYgKCFkZXZwcml2LT5wY2lfZGV2KQorCQlyZXR1cm4gMDsKKworCWlmICgocmV0ID0gc2V0dXBfcGNpKGRldikpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNldHVwX3BjaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlyZXNvdXJjZV9zaXplX3QgYWRkcjsKKwlpbnQgcmV0OworCisJcmV0ID0gY29tZWRpX3BjaV9lbmFibGUoZGV2cHJpdi0+cGNpX2RldiwgImR0MzAwMCIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXZwcml2LT5wY2lfZGV2LCAwKTsKKwlkZXZwcml2LT5waHlzX2FkZHIgPSBhZGRyOworCWRldnByaXYtPmlvX2FkZHIgPSBpb3JlbWFwKGRldnByaXYtPnBoeXNfYWRkciwgRFQzMDAwX1NJWkUpOworCWlmICghZGV2cHJpdi0+aW9fYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisjaWYgREVCVUcKKwlwcmludGsoIjB4JTA4bGx4IG1hcHBlZCB0byAlcCwgIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylkZXZwcml2LT5waHlzX2FkZHIsIGRldnByaXYtPmlvX2FkZHIpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpkdF9wY2lfZmluZF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmZyb20sIGludCAqYm9hcmQpCit7CisJaW50IGk7CisKKwlmb3IgKGZyb20gPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0RULCBQQ0lfQU5ZX0lELCBmcm9tKTsKKwkJZnJvbSAhPSBOVUxMOworCQlmcm9tID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9EVCwgUENJX0FOWV9JRCwgZnJvbSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IG5fZHQza19ib2FyZHM7IGkrKykgeworCQkJaWYgKGZyb20tPmRldmljZSA9PSBkdDNrX2JvYXJkdHlwZXNbaV0uZGV2aWNlX2lkKSB7CisJCQkJKmJvYXJkID0gaTsKKwkJCQlyZXR1cm4gZnJvbTsKKwkJCX0KKwkJfQorCQlwcmludGsoInVua25vd24gRGF0YSBUcmFuc2xhdGlvbiBQQ0kgZGV2aWNlIGZvdW5kIHdpdGggZGV2aWNlX2lkPTB4JTA0eFxuIiwgZnJvbS0+ZGV2aWNlKTsKKwl9CisJKmJvYXJkID0gLTE7CisJcmV0dXJuIGZyb207Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQ5ODEyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQ5ODEyLmMKaW5kZXggZjJkMjE3My4uY2M0YzA0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0OTgxMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDk4MTIuYwpAQCAtMzAwLDIyICszMDAsMjIgQEAKIAlzdHJ1Y3QgY29tZWRpX2R0OTgxMiAqY29tZWRpOwogfTsKIAotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgZHQ5ODEyXzEwX2Fpbl9yYW5nZSA9IHsgMSwgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGR0OTgxMl8xMF9haW5fcmFuZ2UgPSB7IDEsIHsKIAkJCUJJUF9SQU5HRSgxMCksCiAJfQogfTsKIAotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgZHQ5ODEyXzJwdDVfYWluX3JhbmdlID0geyAxLCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgZHQ5ODEyXzJwdDVfYWluX3JhbmdlID0geyAxLCB7CiAJCQlVTklfUkFOR0UoMi41KSwKIAl9CiB9OwogCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSBkdDk4MTJfMTBfYW91dF9yYW5nZSA9IHsgMSwgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIGR0OTgxMl8xMF9hb3V0X3JhbmdlID0geyAxLCB7CiAJCQlCSVBfUkFOR0UoMTApLAogCX0KIH07CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIGR0OTgxMl8ycHQ1X2FvdXRfcmFuZ2UgPSB7IDEsIHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBkdDk4MTJfMnB0NV9hb3V0X3JhbmdlID0geyAxLCB7CiAJCQlVTklfUkFOR0UoMi41KSwKIAl9CiB9OwpAQCAtODkyLDEyICs4OTIsMTIgQEAKICAqIENvbWVkaSBmdW5jdGlvbnMKICAqLwogCi1zdGF0aWMgdm9pZCBkdDk4MTJfY29tZWRpX29wZW4oY29tZWRpX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgZHQ5ODEyX2NvbWVkaV9vcGVuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJZG93bigmZGV2cHJpdi0+c2xvdC0+bXV0ZXgpOwogCWlmIChkZXZwcml2LT5zbG90LT51c2IpIHsKIAkJLyogV2UgaGF2ZSBhbiBhdHRhY2hlZCBkZXZpY2UsIGZpbGwgaW4gY3VycmVudCByYW5nZSBpbmZvICovCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJCXMgPSAmZGV2LT5zdWJkZXZpY2VzWzBdOwogCQlzLT5uX2NoYW4gPSA4OwpAQCAtOTQwLDggKzk0MCw4IEBACiAJdXAoJmRldnByaXYtPnNsb3QtPm11dGV4KTsKIH0KIAotc3RhdGljIGludCBkdDk4MTJfZGlfcmluc24oY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBkdDk4MTJfZGlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgbjsKIAl1OCBiaXRzID0gMDsKQEAgLTk1Miw4ICs5NTIsOCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IGR0OTgxMl9kb193aW5zbihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IGR0OTgxMl9kb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBuOwogCXU4IGJpdHMgPSAwOwpAQCAtOTcwLDggKzk3MCw4IEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBpbnQgZHQ5ODEyX2FpX3JpbnNuKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgZHQ5ODEyX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IG47CiAKQEAgLTk4NSw4ICs5ODUsOCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IGR0OTgxMl9hb19yaW5zbihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IGR0OTgxMl9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBuOwogCXUxNiB2YWx1ZTsKQEAgLTk5OSw4ICs5OTksOCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IGR0OTgxMl9hb193aW5zbihjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IGR0OTgxMl9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBuOwogCkBAIC0xMDA5LDEwICsxMDA5LDEwIEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBpbnQgZHQ5ODEyX2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KQorc3RhdGljIGludCBkdDk4MTJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKIAlpbnQgaTsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJZGV2LT5ib2FyZF9uYW1lID0gImR0OTgxMiI7CiAKQEAgLTExMDMsMTIgKzExMDMsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdDk4MTJfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHQ5ODEyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29tZWRpX2RyaXZlciBkdDk4MTJfY29tZWRpX2RyaXZlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkdDk4MTJfY29tZWRpX2RyaXZlciA9IHsKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiAJLmRyaXZlcl9uYW1lID0gImR0OTgxMiIsCiAJLmF0dGFjaCA9IGR0OTgxMl9hdHRhY2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZmw1MTIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9mbDUxMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkN2JiMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZmw1MTIuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9mbDUxMi5jCisgICAgQW5kZXJzIEduaXN0cnVwIDxleDE4QGthbG1hbi5pYXUuZHR1LmRrPgorKi8KKworLyoKK0RyaXZlcjogZmw1MTIKK0Rlc2NyaXB0aW9uOiB1bmtub3duCitBdXRob3I6IEFuZGVycyBHbmlzdHJ1cCA8ZXgxOEBrYWxtYW4uaWF1LmR0dS5kaz4KK0RldmljZXM6IFt1bmtub3duXSBGTDUxMiAoZmw1MTIpCitTdGF0dXM6IHVua25vd24KKworRGlnaXRhbCBJL08gaXMgbm90IHN1cHBvcnRlZC4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyovCisKKyNkZWZpbmUgREVCVUcgMAorCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIEZMNTEyX1NJWkUgMTYJCS8qIHRoZSBzaXplIG9mIHRoZSB1c2VkIG1lbW9yeSAqLworc3RydWN0IGZsNTEyX3ByaXZhdGUgeworCisJc2hvcnQgYW9fcmVhZGJhY2tbMl07Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgZmw1MTJfcHJpdmF0ZSAqKSBkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9mbDUxMiA9IHsgNCwgeworCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDEpLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwl9Cit9OworCitzdGF0aWMgaW50IGZsNTEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGZsNTEyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfZmw1MTIgPSB7CisgICAgICBkcml2ZXJfbmFtZToiZmw1MTIiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmZsNTEyX2F0dGFjaCwKKyAgICAgIGRldGFjaDpmbDUxMl9kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2ZsNTEyKTsKKworc3RhdGljIGludCBmbDUxMl9haV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGZsNTEyX2FvX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgZmw1MTJfYW9faW5zbl9yZWFkYmFjayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKgorICogZmw1MTJfYWlfaW5zbiA6IHRoaXMgaXMgdGhlIGFuYWxvZyBpbnB1dCBmdW5jdGlvbgorICovCitzdGF0aWMgaW50IGZsNTEyX2FpX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCXVuc2lnbmVkIGludCBsb19ieXRlLCBoaV9ieXRlOworCWNoYXIgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gZGV2LT5pb2Jhc2U7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CS8qIHNhbXBsZSBuIHRpbWVzIG9uIHNlbGVjdGVkIGNoYW5uZWwgKi8KKwkJLyogWFhYIHByb2JhYmx5IGNhbiBtb3ZlIG5leHQgc3RlcCBvdXQgb2YgZm9yKCkgbG9vcCAtLSB3aWxsIG1ha2UKKwkJICogQUkgYSBsaXR0bGUgYml0IGZhc3Rlci4gKi8KKwkJb3V0YihjaGFuLCBpb2Jhc2UgKyAyKTsJLyogc2VsZWN0IGNoYW4gKi8KKwkJb3V0YigwLCBpb2Jhc2UgKyAzKTsJLyogc3RhcnQgY29udmVyc2lvbiAqLworCQkvKiBYWFggc2hvdWxkIHRlc3QgImRvbmUiIGZsYWcgaW5zdGVhZCBvZiBkZWxheSAqLworCQljb21lZGlfdWRlbGF5KDMwKTsJLyogc2xlZXAgMzAgdXNlYyAqLworCQlsb19ieXRlID0gaW5iKGlvYmFzZSArIDIpOwkvKiBsb3cgOCBieXRlICovCisJCWhpX2J5dGUgPSBpbmIoaW9iYXNlICsgMykgJiAweGY7CS8qIGhpZ2ggNCBiaXQgYW5kIG1hc2sgKi8KKwkJZGF0YVtuXSA9IGxvX2J5dGUgKyAoaGlfYnl0ZSA8PCA4KTsKKwl9CisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBmbDUxMl9hb19pbnNuIDogdXNlZCB0byB3cml0ZSB0byBhIERBIHBvcnQgbiB0aW1lcworICovCitzdGF0aWMgaW50IGZsNTEyX2FvX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8qIGdldCBjaGFuIHRvIHdyaXRlICovCisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBkZXYtPmlvYmFzZTsJLyogZ2V0IGJhc2UgYWRkcmVzcyAgKi8KKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsJLyogd3JpdGUgbiBkYXRhIHNldCAqLworCQlvdXRiKGRhdGFbbl0gJiAweDBmZiwgaW9iYXNlICsgNCArIDIgKiBjaGFuKTsJLyogd3JpdGUgbG93IGJ5dGUgICAqLworCQlvdXRiKChkYXRhW25dICYgMHhmMDApID4+IDgsIGlvYmFzZSArIDQgKyAyICogY2hhbik7CS8qIHdyaXRlIGhpZ2ggYnl0ZSAgKi8KKwkJaW5iKGlvYmFzZSArIDQgKyAyICogY2hhbik7CS8qIHRyaWcgKi8KKworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbbl07CisJfQorCXJldHVybiBuOworfQorCisvKgorICogZmw1MTJfYW9faW5zbl9yZWFkYmFjayA6IHVzZWQgdG8gcmVhZCBwcmV2aW91cyB2YWx1ZXMgd3JpdHRlbiB0bworICogREEgcG9ydAorICovCitzdGF0aWMgaW50IGZsNTEyX2FvX2luc25fcmVhZGJhY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWRhdGFbbl0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIHN0YXJ0IGF0dGFjaAorICovCitzdGF0aWMgaW50IGZsNTEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsJLyogcG9pbnRlciB0byB0aGUgc3ViZGV2aWNlOgorCQkJCSAgIEFuYWxvZyBpbiwgQW5hbG9nIG91dCwgKCBub3QgbWFkZSAtPmFuZCBEaWdpdGFsIElPKSAqLworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGk6JWQgZmw1MTI6IDB4JTA0bHgiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBGTDUxMl9TSVpFLCAiZmw1MTIiKSkgeworCQlwcmludGsoIiBJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmJvYXJkX25hbWUgPSAiZmw1MTIiOworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBmbDUxMl9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworI2lmIERFQlVHCisJcHJpbnRrKCJtYWxsb2Mgb2tcbiIpOworI2VuZGlmCisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIHRoaXMgaWYgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBzdXBkZXZpY2VzLCAyIGhhdmUgYmVlbiBkZWZpbmVkCisJICovCisJLyogQW5hbG9nIGluZHB1dCAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsJLyogZGVmaW5lIHN1YmRldmljZSBhcyBBbmFsb2cgSW4gICAqLworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CS8qIHlvdSBjYW4gcmVhZCBpdCBmcm9tIHVzZXJzcGFjZSAgKi8KKwlzLT5uX2NoYW4gPSAxNjsJCS8qIE51bWJlciBvZiBBbmFsb2cgaW5wdXQgY2hhbm5lbHMgKi8KKwlzLT5tYXhkYXRhID0gMHgwZmZmOwkvKiBhY2NlcHQgb25seSAxMiBiaXRzIG9mIGRhdGEgICAgICovCisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZmw1MTI7CS8qIGRldmljZSB1c2Ugb25lIG9mIHRoZSByYW5nZXMgICAgKi8KKwlzLT5pbnNuX3JlYWQgPSBmbDUxMl9haV9pbnNuOwkvKiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gcmVhZCBBRCAgICovCisJcHJpbnRrKCJjb21lZGk6IGZsNTEyOiBzdWJkZXZpY2UgMCBpbml0aWFsaXplZFxuIik7CisKKwkvKiBBbmFsb2cgb3V0cHV0ICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOwkvKiBkZWZpbmUgc3ViZGV2aWNlIGFzIEFuYWxvZyBPVVQgICAqLworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsJLyogeW91IGNhbiB3cml0ZSBpdCBmcm9tIHVzZXJzcGFjZSAgKi8KKwlzLT5uX2NoYW4gPSAyOwkJLyogTnVtYmVyIG9mIEFuYWxvZyBvdXRwdXQgY2hhbm5lbHMgKi8KKwlzLT5tYXhkYXRhID0gMHgwZmZmOwkvKiBhY2NlcHQgb25seSAxMiBiaXRzIG9mIGRhdGEgICAgICAqLworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2ZsNTEyOwkvKiBkZXZpY2UgdXNlIG9uZSBvZiB0aGUgcmFuZ2VzICAgICAqLworCXMtPmluc25fd3JpdGUgPSBmbDUxMl9hb19pbnNuOwkvKiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gd3JpdGUgREEgICAqLworCXMtPmluc25fcmVhZCA9IGZsNTEyX2FvX2luc25fcmVhZGJhY2s7CS8qIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiByZWFkaW5nIERBICAgKi8KKwlwcmludGsoImNvbWVkaTogZmw1MTI6IHN1YmRldmljZSAxIGluaXRpYWxpemVkXG4iKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGZsNTEyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBGTDUxMl9TSVpFKTsKKwlwcmludGsoImNvbWVkaSVkOiBmbDUxMjogZHVtbXkgaSBkZXRhY2hcbiIsIGRldi0+bWlub3IpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZ3NjX2hwZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWU1Yzg2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMKQEAgLTAsMCArMSwxMDYwIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL2dzY19ocGRpLmMKKyAgICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgR2VuZXJhbCBTdGFuZGFyZHMgQ29ycG9yYXRpb24gSGlnaAorICAgIFNwZWVkIFBhcmFsbGVsIERpZ2l0YWwgSW50ZXJmYWNlIHJzNDg1IGJvYXJkcy4KKworICAgIEF1dGhvcjogIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDMgQ29oZXJlbnQgSW1hZ2luZyBTeXN0ZW1zCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorCitEcml2ZXI6IGdzY19ocGRpCitEZXNjcmlwdGlvbjogR2VuZXJhbCBTdGFuZGFyZHMgQ29ycG9yYXRpb24gSGlnaAorICAgIFNwZWVkIFBhcmFsbGVsIERpZ2l0YWwgSW50ZXJmYWNlIHJzNDg1IGJvYXJkcworQXV0aG9yOiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitTdGF0dXM6IG9ubHkgcmVjZWl2ZSBtb2RlIHdvcmtzLCB0cmFuc21pdCBub3Qgc3VwcG9ydGVkCitVcGRhdGVkOiAyMDAzLTAyLTIwCitEZXZpY2VzOiBbR2VuZXJhbCBTdGFuZGFyZHMgQ29ycG9yYXRpb25dIFBDSS1IUERJMzIgKGdzY19ocGRpKSwKKyAgUE1DLUhQREkzMgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgICBbMV0gLSBQQ0kgc2xvdCBvZiBkZXZpY2UgKG9wdGlvbmFsKQorCitUaGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIGhwZGkgbW9kZWxzIGF2YWlsYWJsZSBmcm9tIEdTQyBmb3Igd2hpY2gKK3N1cHBvcnQgY291bGQgYmUgYWRkZWQgdG8gdGhpcyBkcml2ZXIuCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgInBseDkwODAuaCIKKyNpbmNsdWRlICJjb21lZGlfZmMuaCIKKworc3RhdGljIGludCBocGRpX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGhwZGlfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3ZvaWQgYWJvcnRfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCk7CitzdGF0aWMgaW50IGhwZGlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBocGRpX2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBocGRpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIGludCBkaW9fY29uZmlnX2Jsb2NrX3NpemUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisjdW5kZWYgSFBESV9ERUJVRwkJLy8gZGlzYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMKKy8vI2RlZmluZSBIUERJX0RFQlVHICAgIC8vIGVuYWJsZSBkZWJ1Z2dpbmcgY29kZQorCisjaWZkZWYgSFBESV9ERUJVRworI2RlZmluZSBERUJVR19QUklOVChmb3JtYXQsIGFyZ3MuLi4pICBydF9wcmludGsoZm9ybWF0ICwgIyMgYXJncyApCisjZWxzZQorI2RlZmluZSBERUJVR19QUklOVChmb3JtYXQsIGFyZ3MuLi4pCisjZW5kaWYKKworI2RlZmluZSBUSU1FUl9CQVNFIDUwCQkvLyAyME1IeiBtYXN0ZXIgY2xvY2sKKyNkZWZpbmUgRE1BX0JVRkZFUl9TSVpFIDB4MTAwMDAKKyNkZWZpbmUgTlVNX0RNQV9CVUZGRVJTIDQKKyNkZWZpbmUgTlVNX0RNQV9ERVNDUklQVE9SUyAyNTYKKworLy8gaW5kaWNlcyBvZiBiYXNlIGFkZHJlc3MgcmVnaW9ucworZW51bSBiYXNlX2FkZHJlc3NfcmVnaW9ucyB7CisJUExYOTA4MF9CQUREUklOREVYID0gMCwKKwlIUERJX0JBRERSSU5ERVggPSAyLAorfTsKKworZW51bSBocGRpX3JlZ2lzdGVycyB7CisJRklSTVdBUkVfUkVWX1JFRyA9IDB4MCwKKwlCT0FSRF9DT05UUk9MX1JFRyA9IDB4NCwKKwlCT0FSRF9TVEFUVVNfUkVHID0gMHg4LAorCVRYX1BST0dfQUxNT1NUX1JFRyA9IDB4YywKKwlSWF9QUk9HX0FMTU9TVF9SRUcgPSAweDEwLAorCUZFQVRVUkVTX1JFRyA9IDB4MTQsCisJRklGT19SRUcgPSAweDE4LAorCVRYX1NUQVRVU19DT1VOVF9SRUcgPSAweDFjLAorCVRYX0xJTkVfVkFMSURfQ09VTlRfUkVHID0gMHgyMCwKKwlUWF9MSU5FX0lOVkFMSURfQ09VTlRfUkVHID0gMHgyNCwKKwlSWF9TVEFUVVNfQ09VTlRfUkVHID0gMHgyOCwKKwlSWF9MSU5FX0NPVU5UX1JFRyA9IDB4MmMsCisJSU5URVJSVVBUX0NPTlRST0xfUkVHID0gMHgzMCwKKwlJTlRFUlJVUFRfU1RBVFVTX1JFRyA9IDB4MzQsCisJVFhfQ0xPQ0tfRElWSURFUl9SRUcgPSAweDM4LAorCVRYX0ZJRk9fU0laRV9SRUcgPSAweDQwLAorCVJYX0ZJRk9fU0laRV9SRUcgPSAweDQ0LAorCVRYX0ZJRk9fV09SRFNfUkVHID0gMHg0OCwKKwlSWF9GSUZPX1dPUkRTX1JFRyA9IDB4NGMsCisJSU5URVJSVVBUX0VER0VfTEVWRUxfUkVHID0gMHg1MCwKKwlJTlRFUlJVUFRfUE9MQVJJVFlfUkVHID0gMHg1NCwKK307CisKK2ludCBjb21tYW5kX2NoYW5uZWxfdmFsaWQodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJaWYgKGNoYW5uZWwgPT0gMCB8fCBjaGFubmVsID4gNikgeworCQlydF9wcmludGsoImdzY19ocGRpOiBidWchIGludmFsaWQgY2FibGUgY29tbWFuZCBjaGFubmVsXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisvLyBiaXQgZGVmaW5pdGlvbnMKKworZW51bSBmaXJtd2FyZV9yZXZpc2lvbl9iaXRzIHsKKwlGRUFUVVJFU19SRUdfUFJFU0VOVF9CSVQgPSAweDgwMDAsCit9OworaW50IGZpcm13YXJlX3JldmlzaW9uKHVpbnQzMl90IGZ3cl9iaXRzKQoreworCXJldHVybiBmd3JfYml0cyAmIDB4ZmY7Cit9CisKK2ludCBwY2JfcmV2aXNpb24odWludDMyX3QgZndyX2JpdHMpCit7CisJcmV0dXJuIChmd3JfYml0cyA+PiA4KSAmIDB4ZmY7Cit9CisKK2ludCBocGRpX3N1YmlkKHVpbnQzMl90IGZ3cl9iaXRzKQoreworCXJldHVybiAoZndyX2JpdHMgPj4gMTYpICYgMHhmZjsKK30KKworZW51bSBib2FyZF9jb250cm9sX2JpdHMgeworCUJPQVJEX1JFU0VUX0JJVCA9IDB4MSwJLyogd2FpdCAxMHVzZWMgYmVmb3JlIGFjY2Vzc2luZyBmaWZvcyAqLworCVRYX0ZJRk9fUkVTRVRfQklUID0gMHgyLAorCVJYX0ZJRk9fUkVTRVRfQklUID0gMHg0LAorCVRYX0VOQUJMRV9CSVQgPSAweDEwLAorCVJYX0VOQUJMRV9CSVQgPSAweDIwLAorCURFTUFORF9ETUFfRElSRUNUSU9OX1RYX0JJVCA9IDB4NDAsCS8qIGZvciBjaGFubmVsIDAsIGNoYW5uZWwgMSBjYW4gb25seSB0cmFuc21pdCAod2hlbiBwcmVzZW50KSAqLworCUxJTkVfVkFMSURfT05fU1RBVFVTX1ZBTElEX0JJVCA9IDB4ODAsCisJU1RBUlRfVFhfQklUID0gMHgxMCwKKwlDQUJMRV9USFJPVFRMRV9FTkFCTEVfQklUID0gMHgyMCwKKwlURVNUX01PREVfRU5BQkxFX0JJVCA9IDB4ODAwMDAwMDAsCit9OwordWludDMyX3QgY29tbWFuZF9kaXNjcmV0ZV9vdXRwdXRfYml0cyh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgaW50IG91dHB1dCwKKwlpbnQgb3V0cHV0X3ZhbHVlKQoreworCXVpbnQzMl90IGJpdHMgPSAwOworCisJaWYgKGNvbW1hbmRfY2hhbm5lbF92YWxpZChjaGFubmVsKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAob3V0cHV0KSB7CisJCWJpdHMgfD0gMHgxIDw8ICgxNiArIGNoYW5uZWwpOworCQlpZiAob3V0cHV0X3ZhbHVlKQorCQkJYml0cyB8PSAweDEgPDwgKDI0ICsgY2hhbm5lbCk7CisJfSBlbHNlCisJCWJpdHMgfD0gMHgxIDw8ICgyNCArIGNoYW5uZWwpOworCisJcmV0dXJuIGJpdHM7Cit9CisKK2VudW0gYm9hcmRfc3RhdHVzX2JpdHMgeworCUNPTU1BTkRfTElORV9TVEFUVVNfTUFTSyA9IDB4N2YsCisJVFhfSU5fUFJPR1JFU1NfQklUID0gMHg4MCwKKwlUWF9OT1RfRU1QVFlfQklUID0gMHgxMDAsCisJVFhfTk9UX0FMTU9TVF9FTVBUWV9CSVQgPSAweDIwMCwKKwlUWF9OT1RfQUxNT1NUX0ZVTExfQklUID0gMHg0MDAsCisJVFhfTk9UX0ZVTExfQklUID0gMHg4MDAsCisJUlhfTk9UX0VNUFRZX0JJVCA9IDB4MTAwMCwKKwlSWF9OT1RfQUxNT1NUX0VNUFRZX0JJVCA9IDB4MjAwMCwKKwlSWF9OT1RfQUxNT1NUX0ZVTExfQklUID0gMHg0MDAwLAorCVJYX05PVF9GVUxMX0JJVCA9IDB4ODAwMCwKKwlCT0FSRF9KVU1QRVIwX0lOU1RBTExFRF9CSVQgPSAweDEwMDAwLAorCUJPQVJEX0pVTVBFUjFfSU5TVEFMTEVEX0JJVCA9IDB4MjAwMDAsCisJVFhfT1ZFUlJVTl9CSVQgPSAweDIwMDAwMCwKKwlSWF9VTkRFUlJVTl9CSVQgPSAweDQwMDAwMCwKKwlSWF9PVkVSUlVOX0JJVCA9IDB4ODAwMDAwLAorfTsKKwordWludDMyX3QgYWxtb3N0X2Z1bGxfYml0cyh1bnNpZ25lZCBpbnQgbnVtX3dvcmRzKQoreworLy8gWFhYIG5lZWQgdG8gYWRkIG9yIHN1YnRyYWN0IG9uZT8KKwlyZXR1cm4gKG51bV93b3JkcyA8PCAxNikgJiAweGZmMDAwMDsKK30KKwordWludDMyX3QgYWxtb3N0X2VtcHR5X2JpdHModW5zaWduZWQgaW50IG51bV93b3JkcykKK3sKKwlyZXR1cm4gbnVtX3dvcmRzICYgMHhmZmZmOworfQordW5zaWduZWQgaW50IGFsbW9zdF9mdWxsX251bV93b3Jkcyh1aW50MzJfdCBiaXRzKQoreworLy8gWFhYIG5lZWQgdG8gYWRkIG9yIHN1YnRyYWN0IG9uZT8KKwlyZXR1cm4gKGJpdHMgPj4gMTYpICYgMHhmZmZmOworfQordW5zaWduZWQgaW50IGFsbW9zdF9lbXB0eV9udW1fd29yZHModWludDMyX3QgYml0cykKK3sKKwlyZXR1cm4gYml0cyAmIDB4ZmZmZjsKK30KKworZW51bSBmZWF0dXJlc19iaXRzIHsKKwlGSUZPX1NJWkVfUFJFU0VOVF9CSVQgPSAweDEsCisJRklGT19XT1JEU19QUkVTRU5UX0JJVCA9IDB4MiwKKwlMRVZFTF9FREdFX0lOVEVSUlVQVFNfUFJFU0VOVF9CSVQgPSAweDQsCisJR1BJT19TVVBQT1JURURfQklUID0gMHg4LAorCVBMWF9ETUFfQ0gxX1NVUFBPUlRFRF9CSVQgPSAweDEwLAorCU9WRVJSVU5fVU5ERVJSVU5fU1VQUE9SVEVEX0JJVCA9IDB4MjAsCit9OworCitlbnVtIGludGVycnVwdF9zb3VyY2VzIHsKKwlGUkFNRV9WQUxJRF9TVEFSVF9JTlRSID0gMCwKKwlGUkFNRV9WQUxJRF9FTkRfSU5UUiA9IDEsCisJVFhfRklGT19FTVBUWV9JTlRSID0gOCwKKwlUWF9GSUZPX0FMTU9TVF9FTVBUWV9JTlRSID0gOSwKKwlUWF9GSUZPX0FMTU9TVF9GVUxMX0lOVFIgPSAxMCwKKwlUWF9GSUZPX0ZVTExfSU5UUiA9IDExLAorCVJYX0VNUFRZX0lOVFIgPSAxMiwKKwlSWF9BTE1PU1RfRU1QVFlfSU5UUiA9IDEzLAorCVJYX0FMTU9TVF9GVUxMX0lOVFIgPSAxNCwKKwlSWF9GVUxMX0lOVFIgPSAxNSwKK307CitpbnQgY29tbWFuZF9pbnRyX3NvdXJjZSh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlpZiAoY29tbWFuZF9jaGFubmVsX3ZhbGlkKGNoYW5uZWwpID09IDApCisJCWNoYW5uZWwgPSAxOworCXJldHVybiBjaGFubmVsICsgMTsKK30KKwordWludDMyX3QgaW50cl9iaXQoaW50IGludGVycnVwdF9zb3VyY2UpCit7CisJcmV0dXJuIDB4MSA8PCBpbnRlcnJ1cHRfc291cmNlOworfQorCit1aW50MzJfdCB0eF9jbG9ja19kaXZpc29yX2JpdHModW5zaWduZWQgaW50IGRpdmlzb3IpCit7CisJcmV0dXJuIGRpdmlzb3IgJiAweGZmOworfQorCit1bnNpZ25lZCBpbnQgZmlmb19zaXplKHVpbnQzMl90IGZpZm9fc2l6ZV9iaXRzKQoreworCXJldHVybiBmaWZvX3NpemVfYml0cyAmIDB4ZmZmZmY7Cit9CisKK3Vuc2lnbmVkIGludCBmaWZvX3dvcmRzKHVpbnQzMl90IGZpZm9fd29yZHNfYml0cykKK3sKKwlyZXR1cm4gZmlmb193b3Jkc19iaXRzICYgMHhmZmZmZjsKK30KKwordWludDMyX3QgaW50cl9lZGdlX2JpdChpbnQgaW50ZXJydXB0X3NvdXJjZSkKK3sKKwlyZXR1cm4gMHgxIDw8IGludGVycnVwdF9zb3VyY2U7Cit9CisKK3VpbnQzMl90IGludHJfYWN0aXZlX2hpZ2hfYml0KGludCBpbnRlcnJ1cHRfc291cmNlKQoreworCXJldHVybiAweDEgPDwgaW50ZXJydXB0X3NvdXJjZTsKK30KKworc3RydWN0IGhwZGlfYm9hcmQgeworCisJY2hhciAqbmFtZTsKKwlpbnQgZGV2aWNlX2lkOwkJLy8gcGNpIGRldmljZSBpZAorCWludCBzdWJkZXZpY2VfaWQ7CS8vIHBjaSBzdWJkZXZpY2UgaWQKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBocGRpX2JvYXJkIGhwZGlfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY2ktaHBkaTMyIiwKKwkgICAgICBkZXZpY2VfaWQ6UENJX0RFVklDRV9JRF9QTFhfOTA4MCwKKwkgICAgICBzdWJkZXZpY2VfaWQ6MHgyNDAwLAorCQl9LAorI2lmIDAKKwl7CisJICAgICAgbmFtZToJInB4aS1ocGRpMzIiLAorCSAgICAgIGRldmljZV9pZDoweDk2NTYsCisJICAgICAgc3ViZGV2aWNlX2lkOjB4MjcwNSwKKwkJfSwKKyNlbmRpZgorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnVtX2JvYXJkcyh2b2lkKQoreworCXJldHVybiBzaXplb2YoaHBkaV9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBocGRpX2JvYXJkKTsKK30KKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGhwZGlfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9QTFgsIFBDSV9ERVZJQ0VfSURfUExYXzkwODAsIFBDSV9WRU5ET1JfSURfUExYLCAweDI0MDAsCisJCTAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhwZGlfcGNpX3RhYmxlKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaHBkaV9ib2FyZCAqYm9hcmQoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIChzdHJ1Y3QgaHBkaV9ib2FyZCAqKSBkZXYtPmJvYXJkX3B0cjsKK30KKworc3RydWN0IGhwZGlfcHJpdmF0ZSB7CisKKwlzdHJ1Y3QgcGNpX2RldiAqaHdfZGV2OwkvLyBwb2ludGVyIHRvIGJvYXJkJ3MgcGNpX2RldiBzdHJ1Y3QKKwkvLyBiYXNlIGFkZHJlc3NlcyAocGh5c2ljYWwpCisJcmVzb3VyY2Vfc2l6ZV90IHBseDkwODBfcGh5c19pb2Jhc2U7CisJcmVzb3VyY2Vfc2l6ZV90IGhwZGlfcGh5c19pb2Jhc2U7CisJLy8gYmFzZSBhZGRyZXNzZXMgKGlvcmVtYXBwZWQpCisJdm9pZCAqcGx4OTA4MF9pb2Jhc2U7CisJdm9pZCAqaHBkaV9pb2Jhc2U7CisJdWludDMyX3QgKmRpb19idWZmZXJbTlVNX0RNQV9CVUZGRVJTXTsJLy8gZG1hIGJ1ZmZlcnMKKwlkbWFfYWRkcl90IGRpb19idWZmZXJfcGh5c19hZGRyW05VTV9ETUFfQlVGRkVSU107CS8vIHBoeXNpY2FsIGFkZHJlc3NlcyBvZiBkbWEgYnVmZmVycworCXN0cnVjdCBwbHhfZG1hX2Rlc2MgKmRtYV9kZXNjOwkvLyBhcnJheSBvZiBkbWEgZGVzY3JpcHRvcnMgcmVhZCBieSBwbHg5MDgwLCBhbGxvY2F0ZWQgdG8gZ2V0IHByb3BlciBhbGlnbm1lbnQKKwlkbWFfYWRkcl90IGRtYV9kZXNjX3BoeXNfYWRkcjsJLy8gcGh5c2ljYWwgYWRkcmVzcyBvZiBkbWEgZGVzY3JpcHRvciBhcnJheQorCXVuc2lnbmVkIGludCBudW1fZG1hX2Rlc2NyaXB0b3JzOworCXVpbnQzMl90ICpkZXNjX2Rpb19idWZmZXJbTlVNX0RNQV9ERVNDUklQVE9SU107CS8vIHBvaW50ZXIgdG8gc3RhcnQgb2YgYnVmZmVycyBpbmRleGVkIGJ5IGRlc2NyaXB0b3IKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgZG1hX2Rlc2NfaW5kZXg7CS8vIGluZGV4IG9mIHRoZSBkbWEgZGVzY3JpcHRvciB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyB1c2VkCisJdW5zaWduZWQgaW50IHR4X2ZpZm9fc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnhfZmlmb19zaXplOworCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgZGlvX2NvdW50OworCXZvbGF0aWxlIHVpbnQzMl90IGJpdHNbMjRdOwkvLyBzb2Z0d2FyZSBjb3BpZXMgb2YgdmFsdWVzIHdyaXR0ZW4gdG8gaHBkaSByZWdpc3RlcnMKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZTsJLy8gbnVtYmVyIG9mIGJ5dGVzIGF0IHdoaWNoIHRvIGdlbmVyYXRlIENPTUVESV9DQl9CTE9DSyBldmVudHMKKwl1bnNpZ25lZCBkaW9fY29uZmlnX291dHB1dDoxOworfTsKKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBocGRpX3ByaXZhdGUgKnByaXYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIGRldi0+cHJpdmF0ZTsKK30KKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9ocGRpID0geworICAgICAgZHJpdmVyX25hbWU6ImdzY19ocGRpIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpocGRpX2F0dGFjaCwKKyAgICAgIGRldGFjaDpocGRpX2RldGFjaCwKK307CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX2hwZGksIGhwZGlfcGNpX3RhYmxlKTsKKworc3RhdGljIGludCBkaW9fY29uZmlnX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcHJpdihkZXYpLT5kaW9fY29uZmlnX291dHB1dCA9IDE7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcHJpdihkZXYpLT5kaW9fY29uZmlnX291dHB1dCA9IDA7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJZGF0YVsxXSA9CisJCQlwcml2KGRldiktPgorCQkJZGlvX2NvbmZpZ19vdXRwdXQgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19CTE9DS19TSVpFOgorCQlyZXR1cm4gZGlvX2NvbmZpZ19ibG9ja19zaXplKGRldiwgZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX3BseF9pbnRlcnJ1cHRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXdyaXRlbCgwLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0lOVFJDU19SRUcpOworfQorCisvLyBpbml0aWFsaXplIHBseDkwODAgY2hpcAorc3RhdGljIHZvaWQgaW5pdF9wbHg5MDgwKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVpbnQzMl90IGJpdHM7CisJdm9pZCAqcGx4X2lvYmFzZSA9IHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2U7CisKKwkvLyBwbHg5MDgwIGR1bXAKKwlERUJVR19QUklOVCgiIHBseCBpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfSU5UUkNTX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGlkIGJpdHMgMHgleFxuIiwgcmVhZGwocGx4X2lvYmFzZSArIFBMWF9JRF9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBjb250cm9sIHJlZyAweCV4XG4iLAorCQlyZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0NPTlRST0xfUkVHKSk7CisKKwlERUJVR19QUklOVCgiIHBseCByZXZpc2lvbiAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX1JFVklTSU9OX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgbW9kZSAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfTU9ERV9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBkbWEgY2hhbm5lbCAxIG1vZGUgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUExX01PREVfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBwY2kgYWRkcmVzcyAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfUENJX0FERFJFU1NfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBsb2NhbCBhZGRyZXNzIDB4JXhcbiIsCisJCXJlYWRsKHBseF9pb2Jhc2UgKyBQTFhfRE1BMF9MT0NBTF9BRERSRVNTX1JFRykpOworCURFQlVHX1BSSU5UKCIgcGx4IGRtYSBjaGFubmVsIDAgdHJhbnNmZXIgc2l6ZSAweCV4XG4iLAorCQlyZWFkbChwbHhfaW9iYXNlICsgUExYX0RNQTBfVFJBTlNGRVJfU0laRV9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBkbWEgY2hhbm5lbCAwIGRlc2NyaXB0b3IgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX0RFU0NSSVBUT1JfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCBjb21tYW5kIHN0YXR1cyAweCV4XG4iLAorCQlyZWFkYihwbHhfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKSk7CisJREVCVUdfUFJJTlQoIiBwbHggZG1hIGNoYW5uZWwgMCB0aHJlc2hvbGQgMHgleFxuIiwKKwkJcmVhZGwocGx4X2lvYmFzZSArIFBMWF9ETUEwX1RIUkVTSE9MRF9SRUcpKTsKKwlERUJVR19QUklOVCgiIHBseCBiaWdlbmQgMHgleFxuIiwgcmVhZGwocGx4X2lvYmFzZSArIFBMWF9CSUdFTkRfUkVHKSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJYml0cyA9IEJJR0VORF9ETUEwIHwgQklHRU5EX0RNQTE7CisjZWxzZQorCWJpdHMgPSAwOworI2VuZGlmCisJd3JpdGVsKGJpdHMsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfQklHRU5EX1JFRyk7CisKKwlkaXNhYmxlX3BseF9pbnRlcnJ1cHRzKGRldik7CisKKwlhYm9ydF9kbWEoZGV2LCAwKTsKKwlhYm9ydF9kbWEoZGV2LCAxKTsKKworCS8vIGNvbmZpZ3VyZSBkbWEwIG1vZGUKKwliaXRzID0gMDsKKwkvLyBlbmFibGUgcmVhZHkgaW5wdXQKKwliaXRzIHw9IFBMWF9ETUFfRU5fUkVBRFlJTl9CSVQ7CisJLy8gZW5hYmxlIGRtYSBjaGFpbmluZworCWJpdHMgfD0gUExYX0VOX0NIQUlOX0JJVDsKKwkvLyBlbmFibGUgaW50ZXJydXB0IG9uIGRtYSBkb25lIChwcm9iYWJseSBkb24ndCBuZWVkIHRoaXMsIHNpbmNlIGNoYWluIG5ldmVyIGZpbmlzaGVzKQorCWJpdHMgfD0gUExYX0VOX0RNQV9ET05FX0lOVFJfQklUOworCS8vIGRvbid0IGluY3JlbWVudCBsb2NhbCBhZGRyZXNzIGR1cmluZyB0cmFuc2ZlcnMgKHdlIGFyZSB0cmFuc2ZlcnJpbmcgZnJvbSBhIGZpeGVkIGZpZm8gcmVnaXN0ZXIpCisJYml0cyB8PSBQTFhfTE9DQUxfQUREUl9DT05TVF9CSVQ7CisJLy8gcm91dGUgZG1hIGludGVycnVwdCB0byBwY2kgYnVzCisJYml0cyB8PSBQTFhfRE1BX0lOVFJfUENJX0JJVDsKKwkvLyBlbmFibGUgZGVtYW5kIG1vZGUKKwliaXRzIHw9IFBMWF9ERU1BTkRfTU9ERV9CSVQ7CisJLy8gZW5hYmxlIGxvY2FsIGJ1cnN0IG1vZGUKKwliaXRzIHw9IFBMWF9ETUFfTE9DQUxfQlVSU1RfRU5fQklUOworCWJpdHMgfD0gUExYX0xPQ0FMX0JVU18zMl9XSURFX0JJVFM7CisJd3JpdGVsKGJpdHMsIHBseF9pb2Jhc2UgKyBQTFhfRE1BMF9NT0RFX1JFRyk7Cit9CisKKy8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4KKyAqLworc3RhdGljIGludCBzZXR1cF9zdWJkZXZpY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworLyoJZGV2LT53cml0ZV9zdWJkZXYgPSBzOyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0KKwkJU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRFQUJMRSB8IFNERl9MU0FNUEwgfCBTREZfQ01EX1JFQUQ7CisJcy0+bl9jaGFuID0gMzI7CisJcy0+bGVuX2NoYW5saXN0ID0gMzI7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pbnNuX2NvbmZpZyA9IGRpb19jb25maWdfaW5zbjsKKwlzLT5kb19jbWQgPSBocGRpX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gaHBkaV9jbWRfdGVzdDsKKwlzLT5jYW5jZWwgPSBocGRpX2NhbmNlbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfaHBkaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1aW50MzJfdCBwbHhfaW50Y3NyX2JpdHM7CisKKwl3cml0ZWwoQk9BUkRfUkVTRVRfQklULCBwcml2KGRldiktPmhwZGlfaW9iYXNlICsgQk9BUkRfQ09OVFJPTF9SRUcpOworCWNvbWVkaV91ZGVsYXkoMTApOworCisJd3JpdGVsKGFsbW9zdF9lbXB0eV9iaXRzKDMyKSB8IGFsbW9zdF9mdWxsX2JpdHMoMzIpLAorCQlwcml2KGRldiktPmhwZGlfaW9iYXNlICsgUlhfUFJPR19BTE1PU1RfUkVHKTsKKwl3cml0ZWwoYWxtb3N0X2VtcHR5X2JpdHMoMzIpIHwgYWxtb3N0X2Z1bGxfYml0cygzMiksCisJCXByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgKyBUWF9QUk9HX0FMTU9TVF9SRUcpOworCisJcHJpdihkZXYpLT50eF9maWZvX3NpemUgPSBmaWZvX3NpemUocmVhZGwocHJpdihkZXYpLT5ocGRpX2lvYmFzZSArCisJCQlUWF9GSUZPX1NJWkVfUkVHKSk7CisJcHJpdihkZXYpLT5yeF9maWZvX3NpemUgPSBmaWZvX3NpemUocmVhZGwocHJpdihkZXYpLT5ocGRpX2lvYmFzZSArCisJCQlSWF9GSUZPX1NJWkVfUkVHKSk7CisKKwl3cml0ZWwoMCwgcHJpdihkZXYpLT5ocGRpX2lvYmFzZSArIElOVEVSUlVQVF9DT05UUk9MX1JFRyk7CisKKwkvLyBlbmFibGUgaW50ZXJydXB0cworCXBseF9pbnRjc3JfYml0cyA9CisJCUlDU19BRVJSIHwgSUNTX1BFUlIgfCBJQ1NfUElFIHwgSUNTX1BMSUUgfCBJQ1NfUEFJRSB8IElDU19MSUUgfAorCQlJQ1NfRE1BMF9FOworCXdyaXRlbChwbHhfaW50Y3NyX2JpdHMsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfSU5UUkNTX1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworLy8gc2V0dXAgZG1hIGRlc2NyaXB0b3JzIHNvIGEgbGluayBjb21wbGV0ZXMgZXZlcnkgJ3RyYW5zZmVyX3NpemUnIGJ5dGVzCitzdGF0aWMgaW50IHNldHVwX2RtYV9kZXNjcmlwdG9ycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgdHJhbnNmZXJfc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgYnVmZmVyX2luZGV4LCBidWZmZXJfb2Zmc2V0OworCXVpbnQzMl90IG5leHRfYml0cyA9IFBMWF9ERVNDX0lOX1BDSV9CSVQgfCBQTFhfSU5UUl9URVJNX0NPVU5UIHwKKwkJUExYX1hGRVJfTE9DQUxfVE9fUENJOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKHRyYW5zZmVyX3NpemUgPiBETUFfQlVGRkVSX1NJWkUpCisJCXRyYW5zZmVyX3NpemUgPSBETUFfQlVGRkVSX1NJWkU7CisJdHJhbnNmZXJfc2l6ZSAtPSB0cmFuc2Zlcl9zaXplICUgc2l6ZW9mKHVpbnQzMl90KTsKKwlpZiAodHJhbnNmZXJfc2l6ZSA9PSAwKQorCQlyZXR1cm4gLTE7CisKKwlERUJVR19QUklOVCgiIHRyYW5zZmVyX3NpemUgJWlcbiIsIHRyYW5zZmVyX3NpemUpOworCURFQlVHX1BSSU5UKCIgZGVzY3JpcHRvcnMgYXQgMHglbHhcbiIsCisJCSh1bnNpZ25lZCBsb25nKXByaXYoZGV2KS0+ZG1hX2Rlc2NfcGh5c19hZGRyKTsKKworCWJ1ZmZlcl9vZmZzZXQgPSAwOworCWJ1ZmZlcl9pbmRleCA9IDA7CisJZm9yIChpID0gMDsgaSA8IE5VTV9ETUFfREVTQ1JJUFRPUlMgJiYKKwkJYnVmZmVyX2luZGV4IDwgTlVNX0RNQV9CVUZGRVJTOyBpKyspIHsKKwkJcHJpdihkZXYpLT5kbWFfZGVzY1tpXS5wY2lfc3RhcnRfYWRkciA9CisJCQljcHVfdG9fbGUzMihwcml2KGRldiktPgorCQkJZGlvX2J1ZmZlcl9waHlzX2FkZHJbYnVmZmVyX2luZGV4XSArIGJ1ZmZlcl9vZmZzZXQpOworCQlwcml2KGRldiktPmRtYV9kZXNjW2ldLmxvY2FsX3N0YXJ0X2FkZHIgPSBjcHVfdG9fbGUzMihGSUZPX1JFRyk7CisJCXByaXYoZGV2KS0+ZG1hX2Rlc2NbaV0udHJhbnNmZXJfc2l6ZSA9CisJCQljcHVfdG9fbGUzMih0cmFuc2Zlcl9zaXplKTsKKwkJcHJpdihkZXYpLT5kbWFfZGVzY1tpXS5uZXh0ID0KKwkJCWNwdV90b19sZTMyKChwcml2KGRldiktPmRtYV9kZXNjX3BoeXNfYWRkciArIChpICsKKwkJCQkJMSkgKgorCQkJCXNpemVvZihwcml2KGRldiktPmRtYV9kZXNjWzBdKSkgfCBuZXh0X2JpdHMpOworCisJCXByaXYoZGV2KS0+ZGVzY19kaW9fYnVmZmVyW2ldID0KKwkJCXByaXYoZGV2KS0+ZGlvX2J1ZmZlcltidWZmZXJfaW5kZXhdICsKKwkJCShidWZmZXJfb2Zmc2V0IC8gc2l6ZW9mKHVpbnQzMl90KSk7CisKKwkJYnVmZmVyX29mZnNldCArPSB0cmFuc2Zlcl9zaXplOworCQlpZiAodHJhbnNmZXJfc2l6ZSArIGJ1ZmZlcl9vZmZzZXQgPiBETUFfQlVGRkVSX1NJWkUpIHsKKwkJCWJ1ZmZlcl9vZmZzZXQgPSAwOworCQkJYnVmZmVyX2luZGV4Kys7CisJCX0KKworCQlERUJVR19QUklOVCgiIGRlc2MgJWlcbiIsIGkpOworCQlERUJVR19QUklOVCgiIHN0YXJ0IGFkZHIgdmlydCAweCVwLCBwaHlzIDB4JWx4XG4iLAorCQkJcHJpdihkZXYpLT5kZXNjX2Rpb19idWZmZXJbaV0sCisJCQkodW5zaWduZWQgbG9uZylwcml2KGRldiktPmRtYV9kZXNjW2ldLnBjaV9zdGFydF9hZGRyKTsKKwkJREVCVUdfUFJJTlQoIiBuZXh0IDB4JWx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpcHJpdihkZXYpLT5kbWFfZGVzY1tpXS5uZXh0KTsKKwl9CisJcHJpdihkZXYpLT5udW1fZG1hX2Rlc2NyaXB0b3JzID0gaTsKKwkvLyBmaXggbGFzdCBkZXNjcmlwdG9yIHRvIHBvaW50IGJhY2sgdG8gZmlyc3QKKwlwcml2KGRldiktPmRtYV9kZXNjW2kgLSAxXS5uZXh0ID0KKwkJY3B1X3RvX2xlMzIocHJpdihkZXYpLT5kbWFfZGVzY19waHlzX2FkZHIgfCBuZXh0X2JpdHMpOworCURFQlVHX1BSSU5UKCIgZGVzYyAlaSBuZXh0IGZpeHVwIDB4JWx4XG4iLCBpIC0gMSwKKwkJKHVuc2lnbmVkIGxvbmcpcHJpdihkZXYpLT5kbWFfZGVzY1tpIC0gMV0ubmV4dCk7CisKKwlwcml2KGRldiktPmJsb2NrX3NpemUgPSB0cmFuc2Zlcl9zaXplOworCisJcmV0dXJuIHRyYW5zZmVyX3NpemU7Cit9CisKK3N0YXRpYyBpbnQgaHBkaV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IHBjaV9kZXYgKnBjaWRldjsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsOworCisJcHJpbnRrKCJjb21lZGklZDogZ3NjX2hwZGlcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGhwZGlfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwY2lkZXYgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBudW1fYm9hcmRzKCkgJiYgZGV2LT5ib2FyZF9wdHIgPT0gTlVMTDsgaSsrKSB7CisJCWRvIHsKKwkJCXBjaWRldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfUExYLAorCQkJCWhwZGlfYm9hcmRzW2ldLmRldmljZV9pZCwgUENJX1ZFTkRPUl9JRF9QTFgsCisJCQkJaHBkaV9ib2FyZHNbaV0uc3ViZGV2aWNlX2lkLCBwY2lkZXYpOworCQkJLy8gd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/CisJCQlpZiAoaXQtPm9wdGlvbnNbMF0gfHwgaXQtPm9wdGlvbnNbMV0pIHsKKwkJCQkvLyBhcmUgd2Ugb24gdGhlIHdyb25nIGJ1cy9zbG90PworCQkJCWlmIChwY2lkZXYtPmJ1cy0+bnVtYmVyICE9IGl0LT5vcHRpb25zWzBdIHx8CisJCQkJCVBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pICE9CisJCQkJCWl0LT5vcHRpb25zWzFdKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChwY2lkZXYpIHsKKwkJCQlwcml2KGRldiktPmh3X2RldiA9IHBjaWRldjsKKwkJCQlkZXYtPmJvYXJkX3B0ciA9IGhwZGlfYm9hcmRzICsgaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAocGNpZGV2ICE9IE5VTEwpOworCX0KKwlpZiAoZGV2LT5ib2FyZF9wdHIgPT0gTlVMTCkgeworCQlwcmludGsoImdzY19ocGRpOiBubyBocGRpIGNhcmQgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlwcmludGsoImdzY19ocGRpOiBmb3VuZCAlcyBvbiBidXMgJWksIHNsb3QgJWlcbiIsIGJvYXJkKGRldiktPm5hbWUsCisJCXBjaWRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBjaWRldi0+ZGV2Zm4pKTsKKworCWlmIChjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsIGRyaXZlcl9ocGRpLmRyaXZlcl9uYW1lKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiIGZhaWxlZCBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXBjaV9zZXRfbWFzdGVyKHBjaWRldik7CisKKwkvL0luaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lCisJZGV2LT5ib2FyZF9uYW1lID0gYm9hcmQoZGV2KS0+bmFtZTsKKworCXByaXYoZGV2KS0+cGx4OTA4MF9waHlzX2lvYmFzZSA9CisJCXBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIFBMWDkwODBfQkFERFJJTkRFWCk7CisJcHJpdihkZXYpLT5ocGRpX3BoeXNfaW9iYXNlID0KKwkJcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgSFBESV9CQUREUklOREVYKTsKKworCS8vIHJlbWFwLCB3b24ndCB3b3JrIHdpdGggMi4wIGtlcm5lbHMgYnV0IHdobyBjYXJlcworCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgPSBpb3JlbWFwKHByaXYoZGV2KS0+cGx4OTA4MF9waHlzX2lvYmFzZSwKKwkJcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIFBMWDkwODBfQkFERFJJTkRFWCkpOworCXByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgPSBpb3JlbWFwKHByaXYoZGV2KS0+aHBkaV9waHlzX2lvYmFzZSwKKwkJcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIEhQRElfQkFERFJJTkRFWCkpOworCWlmICghcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSB8fCAhcHJpdihkZXYpLT5ocGRpX2lvYmFzZSkgeworCQlwcmludGsoIiBmYWlsZWQgdG8gcmVtYXAgaW8gbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJREVCVUdfUFJJTlQoIiBwbHg5MDgwIHJlbWFwcGVkIHRvIDB4JXBcbiIsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UpOworCURFQlVHX1BSSU5UKCIgaHBkaSByZW1hcHBlZCB0byAweCVwXG4iLCBwcml2KGRldiktPmhwZGlfaW9iYXNlKTsKKworCWluaXRfcGx4OTA4MChkZXYpOworCisJLy8gZ2V0IGlycQorCWlmIChjb21lZGlfcmVxdWVzdF9pcnEocGNpZGV2LT5pcnEsIGhhbmRsZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJZHJpdmVyX2hwZGkuZHJpdmVyX25hbWUsIGRldikpIHsKKwkJcHJpbnRrKCIgdW5hYmxlIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgcGNpZGV2LT5pcnEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2LT5pcnEgPSBwY2lkZXYtPmlycTsKKworCXByaW50aygiIGlycSAldVxuIiwgZGV2LT5pcnEpOworCisJLy8gYWxvY2F0ZSBwY2kgZG1hIGJ1ZmZlcnMKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0RNQV9CVUZGRVJTOyBpKyspIHsKKwkJcHJpdihkZXYpLT5kaW9fYnVmZmVyW2ldID0KKwkJCXBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYoZGV2KS0+aHdfZGV2LCBETUFfQlVGRkVSX1NJWkUsCisJCQkmcHJpdihkZXYpLT5kaW9fYnVmZmVyX3BoeXNfYWRkcltpXSk7CisJCURFQlVHX1BSSU5UKCJkaW9fYnVmZmVyIGF0IHZpcnQgMHglcCwgcGh5cyAweCVseFxuIiwKKwkJCXByaXYoZGV2KS0+ZGlvX2J1ZmZlcltpXSwKKwkJCSh1bnNpZ25lZCBsb25nKXByaXYoZGV2KS0+ZGlvX2J1ZmZlcl9waHlzX2FkZHJbaV0pOworCX0KKwkvLyBhbGxvY2F0ZSBkbWEgZGVzY3JpcHRvcnMKKwlwcml2KGRldiktPmRtYV9kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCXNpemVvZihzdHJ1Y3QgcGx4X2RtYV9kZXNjKSAqIE5VTV9ETUFfREVTQ1JJUFRPUlMsCisJCSZwcml2KGRldiktPmRtYV9kZXNjX3BoeXNfYWRkcik7CisJaWYgKHByaXYoZGV2KS0+ZG1hX2Rlc2NfcGh5c19hZGRyICYgMHhmKSB7CisJCXByaW50aygiIGRtYSBkZXNjcmlwdG9ycyBub3QgcXVhZC13b3JkIGFsaWduZWQgKGJ1ZylcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyZXR2YWwgPSBzZXR1cF9kbWFfZGVzY3JpcHRvcnMoZGV2LCAweDEwMDApOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dmFsID0gc2V0dXBfc3ViZGV2aWNlcyhkZXYpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIGluaXRfaHBkaShkZXYpOworfQorCitzdGF0aWMgaW50IGhwZGlfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogZ3NjX2hwZGk6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAocHJpdihkZXYpKSB7CisJCWlmIChwcml2KGRldiktPmh3X2RldikgeworCQkJaWYgKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UpIHsKKwkJCQlkaXNhYmxlX3BseF9pbnRlcnJ1cHRzKGRldik7CisJCQkJaW91bm1hcCgodm9pZCAqKXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UpOworCQkJfQorCQkJaWYgKHByaXYoZGV2KS0+aHBkaV9pb2Jhc2UpCisJCQkJaW91bm1hcCgodm9pZCAqKXByaXYoZGV2KS0+aHBkaV9pb2Jhc2UpOworCQkJLy8gZnJlZSBwY2kgZG1hIGJ1ZmZlcnMKKwkJCWZvciAoaSA9IDA7IGkgPCBOVU1fRE1BX0JVRkZFUlM7IGkrKykgeworCQkJCWlmIChwcml2KGRldiktPmRpb19idWZmZXJbaV0pCisJCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCQkJCQlETUFfQlVGRkVSX1NJWkUsCisJCQkJCQlwcml2KGRldiktPmRpb19idWZmZXJbaV0sCisJCQkJCQlwcml2KGRldiktPgorCQkJCQkJZGlvX2J1ZmZlcl9waHlzX2FkZHJbaV0pOworCQkJfQorCQkJLy8gZnJlZSBkbWEgZGVzY3JpcHRvcnMKKwkJCWlmIChwcml2KGRldiktPmRtYV9kZXNjKQorCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdihkZXYpLT5od19kZXYsCisJCQkJCXNpemVvZihzdHJ1Y3QgcGx4X2RtYV9kZXNjKSAqCisJCQkJCU5VTV9ETUFfREVTQ1JJUFRPUlMsCisJCQkJCXByaXYoZGV2KS0+ZG1hX2Rlc2MsCisJCQkJCXByaXYoZGV2KS0+ZG1hX2Rlc2NfcGh5c19hZGRyKTsKKwkJCWlmIChwcml2KGRldiktPmhwZGlfcGh5c19pb2Jhc2UpIHsKKwkJCQljb21lZGlfcGNpX2Rpc2FibGUocHJpdihkZXYpLT5od19kZXYpOworCQkJfQorCQkJcGNpX2Rldl9wdXQocHJpdihkZXYpLT5od19kZXYpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRpb19jb25maWdfYmxvY2tfc2l6ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVxdWVzdGVkX2Jsb2NrX3NpemU7CisJaW50IHJldHZhbDsKKworCXJlcXVlc3RlZF9ibG9ja19zaXplID0gZGF0YVsxXTsKKworCXJldHZhbCA9IHNldHVwX2RtYV9kZXNjcmlwdG9ycyhkZXYsIHJlcXVlc3RlZF9ibG9ja19zaXplKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWRhdGFbMV0gPSByZXR2YWw7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBkaV9jbWRfdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisJaW50IGk7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8vIHVuaXF1ZW5lc3MgY2hlY2sKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDMyOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19OT05FOgorCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0gaSkgeworCQkJCS8vIFhYWCBjb3VsZCBzdXBwb3J0IDggY2hhbm5lbHMgb3IgMTYgY2hhbm5lbHMKKwkJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCQkiY2hhbmxpc3QgbXVzdCBiZSBjaGFubmVscyAwIHRvIDMxIGluIG9yZGVyIik7CisJCQkJZXJyKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhwZGlfY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpZiAocHJpdihkZXYpLT5kaW9fY29uZmlnX291dHB1dCkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UKKwkJcmV0dXJuIGRpX2NtZF90ZXN0KGRldiwgcywgY21kKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhwZGlfd3JpdGVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MzJfdCBiaXRzLAorCXVuc2lnbmVkIGludCBvZmZzZXQpCit7CisJd3JpdGVsKGJpdHMgfCBwcml2KGRldiktPmJpdHNbb2Zmc2V0IC8gc2l6ZW9mKHVpbnQzMl90KV0sCisJCXByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW50IGRpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVpbnQzMl90IGJpdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKworCWhwZGlfd3JpdGVsKGRldiwgUlhfRklGT19SRVNFVF9CSVQsIEJPQVJEX0NPTlRST0xfUkVHKTsKKworCURFQlVHX1BSSU5UKCJocGRpOiBpbiBkaV9jbWRcbiIpOworCisJYWJvcnRfZG1hKGRldiwgMCk7CisKKwlwcml2KGRldiktPmRtYV9kZXNjX2luZGV4ID0gMDsKKworCS8qIFRoZXNlIHJlZ2lzdGVyIGFyZSBzdXBwb3NlZGx5IHVudXNlZCBkdXJpbmcgY2hhaW5lZCBkbWEsCisJICogYnV0IEkgaGF2ZSBmb3VuZCB0aGF0IGxlZnQgb3ZlciB2YWx1ZXMgZnJvbSBsYXN0IG9wZXJhdGlvbgorCSAqIG9jY2FzaW9uYWxseSBjYXVzZSBwcm9ibGVtcyB3aXRoIHRyYW5zZmVyIG9mIGZpcnN0IGRtYQorCSAqIGJsb2NrLiAgSW5pdGlhbGl6aW5nIHRoZW0gdG8gemVybyBzZWVtcyB0byBmaXggdGhlIHByb2JsZW0uICovCisJd3JpdGVsKDAsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9UUkFOU0ZFUl9TSVpFX1JFRyk7CisJd3JpdGVsKDAsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9QQ0lfQUREUkVTU19SRUcpOworCXdyaXRlbCgwLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfTE9DQUxfQUREUkVTU19SRUcpOworCS8vIGdpdmUgbG9jYXRpb24gb2YgZmlyc3QgZG1hIGRlc2NyaXB0b3IKKwliaXRzID0gcHJpdihkZXYpLT4KKwkJZG1hX2Rlc2NfcGh5c19hZGRyIHwgUExYX0RFU0NfSU5fUENJX0JJVCB8IFBMWF9JTlRSX1RFUk1fQ09VTlQgfAorCQlQTFhfWEZFUl9MT0NBTF9UT19QQ0k7CisJd3JpdGVsKGJpdHMsIHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMF9ERVNDUklQVE9SX1JFRyk7CisKKwkvLyBzcGlubG9jayBmb3IgcGx4IGRtYSBjb250cm9sL3N0YXR1cyByZWcKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkvLyBlbmFibGUgZG1hIHRyYW5zZmVyCisJd3JpdGViKFBMWF9ETUFfRU5fQklUIHwgUExYX0RNQV9TVEFSVF9CSVQgfCBQTFhfQ0xFQVJfRE1BX0lOVFJfQklULAorCQlwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKKwkJcHJpdihkZXYpLT5kaW9fY291bnQgPSBjbWQtPnN0b3BfYXJnOworCWVsc2UKKwkJcHJpdihkZXYpLT5kaW9fY291bnQgPSAxOworCisJLy8gY2xlYXIgb3Zlci91bmRlciBydW4gc3RhdHVzIGZsYWdzCisJd3JpdGVsKFJYX1VOREVSUlVOX0JJVCB8IFJYX09WRVJSVU5fQklULAorCQlwcml2KGRldiktPmhwZGlfaW9iYXNlICsgQk9BUkRfU1RBVFVTX1JFRyk7CisJLy8gZW5hYmxlIGludGVycnVwdHMKKwl3cml0ZWwoaW50cl9iaXQoUlhfRlVMTF9JTlRSKSwKKwkJcHJpdihkZXYpLT5ocGRpX2lvYmFzZSArIElOVEVSUlVQVF9DT05UUk9MX1JFRyk7CisKKwlERUJVR19QUklOVCgiaHBkaTogc3RhcnRpbmcgcnhcbiIpOworCWhwZGlfd3JpdGVsKGRldiwgUlhfRU5BQkxFX0JJVCwgQk9BUkRfQ09OVFJPTF9SRUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaHBkaV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpZiAocHJpdihkZXYpLT5kaW9fY29uZmlnX291dHB1dCkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UKKwkJcmV0dXJuIGRpX2NtZChkZXYsIHMpOworfQorCitzdGF0aWMgdm9pZCBkcmFpbl9kbWFfYnVmZmVycyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBkZXYtPnJlYWRfc3ViZGV2LT5hc3luYzsKKwl1aW50MzJfdCBuZXh0X3RyYW5zZmVyX2FkZHI7CisJaW50IGo7CisJaW50IG51bV9zYW1wbGVzID0gMDsKKwl2b2lkICpwY2lfYWRkcl9yZWc7CisKKwlpZiAoY2hhbm5lbCkKKwkJcGNpX2FkZHJfcmVnID0KKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMV9QQ0lfQUREUkVTU19SRUc7CisJZWxzZQorCQlwY2lfYWRkcl9yZWcgPQorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX1BDSV9BRERSRVNTX1JFRzsKKworCS8vIGxvb3AgdW50aWwgd2UgaGF2ZSByZWFkIGFsbCB0aGUgZnVsbCBidWZmZXJzCisJaiA9IDA7CisJZm9yIChuZXh0X3RyYW5zZmVyX2FkZHIgPSByZWFkbChwY2lfYWRkcl9yZWcpOworCQkobmV4dF90cmFuc2Zlcl9hZGRyIDwKKwkJCWxlMzJfdG9fY3B1KHByaXYoZGV2KS0+ZG1hX2Rlc2NbcHJpdihkZXYpLT4KKwkJCQkJZG1hX2Rlc2NfaW5kZXhdLnBjaV9zdGFydF9hZGRyKQorCQkJfHwgbmV4dF90cmFuc2Zlcl9hZGRyID49CisJCQlsZTMyX3RvX2NwdShwcml2KGRldiktPmRtYV9kZXNjW3ByaXYoZGV2KS0+CisJCQkJCWRtYV9kZXNjX2luZGV4XS5wY2lfc3RhcnRfYWRkcikgKworCQkJcHJpdihkZXYpLT5ibG9ja19zaXplKQorCQkmJiBqIDwgcHJpdihkZXYpLT5udW1fZG1hX2Rlc2NyaXB0b3JzOyBqKyspIHsKKwkJLy8gdHJhbnNmZXIgZGF0YSBmcm9tIGRtYSBidWZmZXIgdG8gY29tZWRpIGJ1ZmZlcgorCQludW1fc2FtcGxlcyA9IHByaXYoZGV2KS0+YmxvY2tfc2l6ZSAvIHNpemVvZih1aW50MzJfdCk7CisJCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJCWlmIChudW1fc2FtcGxlcyA+IHByaXYoZGV2KS0+ZGlvX2NvdW50KQorCQkJCW51bV9zYW1wbGVzID0gcHJpdihkZXYpLT5kaW9fY291bnQ7CisJCQlwcml2KGRldiktPmRpb19jb3VudCAtPSBudW1fc2FtcGxlczsKKwkJfQorCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKGRldi0+cmVhZF9zdWJkZXYsCisJCQlwcml2KGRldiktPmRlc2NfZGlvX2J1ZmZlcltwcml2KGRldiktPmRtYV9kZXNjX2luZGV4XSwKKwkJCW51bV9zYW1wbGVzICogc2l6ZW9mKHVpbnQzMl90KSk7CisJCXByaXYoZGV2KS0+ZG1hX2Rlc2NfaW5kZXgrKzsKKwkJcHJpdihkZXYpLT5kbWFfZGVzY19pbmRleCAlPSBwcml2KGRldiktPm51bV9kbWFfZGVzY3JpcHRvcnM7CisKKwkJREVCVUdfUFJJTlQoIm5leHQgZGVzYyBhZGRyIDB4JWx4XG4iLCAodW5zaWduZWQgbG9uZykKKwkJCXByaXYoZGV2KS0+ZG1hX2Rlc2NbcHJpdihkZXYpLT5kbWFfZGVzY19pbmRleF0ubmV4dCk7CisJCURFQlVHX1BSSU5UKCJwY2kgYWRkciByZWcgMHgleFxuIiwgbmV4dF90cmFuc2Zlcl9hZGRyKTsKKwl9CisJLy8gWFhYIGNoZWNrIGZvciBidWZmZXIgb3ZlcnJ1biBzb21laG93Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBoYW5kbGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gcy0+YXN5bmM7CisJdWludDMyX3QgaHBkaV9pbnRyX3N0YXR1cywgaHBkaV9ib2FyZF9zdGF0dXM7CisJdWludDMyX3QgcGx4X3N0YXR1czsKKwl1aW50MzJfdCBwbHhfYml0czsKKwl1aW50OF90IGRtYTBfc3RhdHVzLCBkbWExX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFkZXYtPmF0dGFjaGVkKSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlwbHhfc3RhdHVzID0gcmVhZGwocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9JTlRSQ1NfUkVHKTsKKwlpZiAoKHBseF9zdGF0dXMgJiAoSUNTX0RNQTBfQSB8IElDU19ETUExX0EgfCBJQ1NfTElBKSkgPT0gMCkgeworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaHBkaV9pbnRyX3N0YXR1cyA9IHJlYWRsKHByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgKyBJTlRFUlJVUFRfU1RBVFVTX1JFRyk7CisJaHBkaV9ib2FyZF9zdGF0dXMgPSByZWFkbChwcml2KGRldiktPmhwZGlfaW9iYXNlICsgQk9BUkRfU1RBVFVTX1JFRyk7CisKKwlhc3luYy0+ZXZlbnRzID0gMDsKKworCWlmIChocGRpX2ludHJfc3RhdHVzKSB7CisJCURFQlVHX1BSSU5UKCJocGRpOiBpbnRyIHN0YXR1cyAweCV4LCAiLCBocGRpX2ludHJfc3RhdHVzKTsKKwkJd3JpdGVsKGhwZGlfaW50cl9zdGF0dXMsCisJCQlwcml2KGRldiktPmhwZGlfaW9iYXNlICsgSU5URVJSVVBUX1NUQVRVU19SRUcpOworCX0KKwkvLyBzcGluIGxvY2sgbWFrZXMgc3VyZSBub29uZSBlbHNlIGNoYW5nZXMgcGx4IGRtYSBjb250cm9sIHJlZworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCWRtYTBfc3RhdHVzID0gcmVhZGIocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0NTX1JFRyk7CisJaWYgKHBseF9zdGF0dXMgJiBJQ1NfRE1BMF9BKSB7CS8vIGRtYSBjaGFuIDAgaW50ZXJydXB0CisJCXdyaXRlYigoZG1hMF9zdGF0dXMgJiBQTFhfRE1BX0VOX0JJVCkgfCBQTFhfQ0xFQVJfRE1BX0lOVFJfQklULAorCQkJcHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArIFBMWF9ETUEwX0NTX1JFRyk7CisKKwkJREVCVUdfUFJJTlQoImRtYTAgc3RhdHVzIDB4JXhcbiIsIGRtYTBfc3RhdHVzKTsKKwkJaWYgKGRtYTBfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpIHsKKwkJCWRyYWluX2RtYV9idWZmZXJzKGRldiwgMCk7CisJCX0KKwkJREVCVUdfUFJJTlQoIiBjbGVhcmVkIGRtYSBjaDAgaW50ZXJydXB0XG4iKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIHNwaW4gbG9jayBtYWtlcyBzdXJlIG5vb25lIGVsc2UgY2hhbmdlcyBwbHggZG1hIGNvbnRyb2wgcmVnCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZG1hMV9zdGF0dXMgPSByZWFkYihwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RNQTFfQ1NfUkVHKTsKKwlpZiAocGx4X3N0YXR1cyAmIElDU19ETUExX0EpCS8vIFhYWAorCXsJCQkvLyBkbWEgY2hhbiAxIGludGVycnVwdAorCQl3cml0ZWIoKGRtYTFfc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpIHwgUExYX0NMRUFSX0RNQV9JTlRSX0JJVCwKKwkJCXByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UgKyBQTFhfRE1BMV9DU19SRUcpOworCQlERUJVR19QUklOVCgiZG1hMSBzdGF0dXMgMHgleFxuIiwgZG1hMV9zdGF0dXMpOworCisJCURFQlVHX1BSSU5UKCIgY2xlYXJlZCBkbWEgY2gxIGludGVycnVwdFxuIik7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBjbGVhciBwb3NzaWJsZSBwbHg5MDgwIGludGVycnVwdCBzb3VyY2VzCisJaWYgKHBseF9zdGF0dXMgJiBJQ1NfTERJQSkgewkvLyBjbGVhciBsb2NhbCBkb29yYmVsbCBpbnRlcnJ1cHQKKwkJcGx4X2JpdHMgPSByZWFkbChwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RCUl9PVVRfUkVHKTsKKwkJd3JpdGVsKHBseF9iaXRzLCBwcml2KGRldiktPnBseDkwODBfaW9iYXNlICsgUExYX0RCUl9PVVRfUkVHKTsKKwkJREVCVUdfUFJJTlQoIiBjbGVhcmVkIGxvY2FsIGRvb3JiZWxsIGJpdHMgMHgleFxuIiwgcGx4X2JpdHMpOworCX0KKworCWlmIChocGRpX2JvYXJkX3N0YXR1cyAmIFJYX09WRVJSVU5fQklUKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyeCBmaWZvIG92ZXJydW4iKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQlERUJVR19QUklOVCgiZG1hMF9zdGF0dXMgMHgleFxuIiwKKwkJCShpbnQpcmVhZGIocHJpdihkZXYpLT5wbHg5MDgwX2lvYmFzZSArCisJCQkJUExYX0RNQTBfQ1NfUkVHKSk7CisJfQorCisJaWYgKGhwZGlfYm9hcmRfc3RhdHVzICYgUlhfVU5ERVJSVU5fQklUKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyeCBmaWZvIHVuZGVycnVuIik7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwl9CisKKwlpZiAocHJpdihkZXYpLT5kaW9fY291bnQgPT0gMCkKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCisJREVCVUdfUFJJTlQoImJvYXJkIHN0YXR1cyAweCV4LCAiLCBocGRpX2JvYXJkX3N0YXR1cyk7CisJREVCVUdfUFJJTlQoInBseCBzdGF0dXMgMHgleFxuIiwgcGx4X3N0YXR1cyk7CisJaWYgKGFzeW5jLT5ldmVudHMpCisJCURFQlVHX1BSSU5UKCIgZXZlbnRzIDB4JXhcbiIsIGFzeW5jLT5ldmVudHMpOworCisJY2ZjX2hhbmRsZV9ldmVudHMoZGV2LCBzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBhYm9ydF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvLyBzcGlubG9jayBmb3IgcGx4IGRtYSBjb250cm9sL3N0YXR1cyByZWcKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXBseDkwODBfYWJvcnRfZG1hKHByaXYoZGV2KS0+cGx4OTA4MF9pb2Jhc2UsIGNoYW5uZWwpOworCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBocGRpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWhwZGlfd3JpdGVsKGRldiwgMCwgQk9BUkRfQ09OVFJPTF9SRUcpOworCisJd3JpdGVsKDAsIHByaXYoZGV2KS0+aHBkaV9pb2Jhc2UgKyBJTlRFUlJVUFRfQ09OVFJPTF9SRUcpOworCisJYWJvcnRfZG1hKGRldiwgMCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuYwppbmRleCA1OTE0NGQ3Li4xNWZjZTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5jCkBAIC02MSw3ICs2MSw3IEBACiAKICNkZWZpbmUgSUNQX01VTFRJX0VYVERFQlVHCiAKLS8vIEhhcmR3YXJlIHR5cGVzIG9mIHRoZSBjYXJkcworLyogIEhhcmR3YXJlIHR5cGVzIG9mIHRoZSBjYXJkcyAqLwogI2RlZmluZSBUWVBFX0lDUF9NVUxUSQkwCiAKICNkZWZpbmUgSU9SQU5HRV9JQ1BfTVVMVEkgCTMyCkBAIC04MSwyMCArODEsMjAgQEAKIAogI2RlZmluZSBJQ1BfTVVMVElfU0laRQkJMHgyMAkvKiAzMiBieXRlcyAqLwogCi0vLyBEZWZpbmUgYml0cyBmcm9tIEFEQyBjb21tYW5kL3N0YXR1cyByZWdpc3RlcgorLyogIERlZmluZSBiaXRzIGZyb20gQURDIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyICovCiAjZGVmaW5lCUFEQ19TVAkJMHgwMDAxCS8qIFN0YXJ0IEFEQyAqLwogI2RlZmluZQlBRENfQlNZCQkweDAwMDEJLyogQURDIGJ1c3kgKi8KICNkZWZpbmUgQURDX0JJCQkweDAwMTAJLyogQmlwb2xhciBpbnB1dCByYW5nZSAxID0gYmlwb2xhciAqLwogI2RlZmluZSBBRENfUkEJCTB4MDAyMAkvKiBJbnB1dCByYW5nZSAwID0gNVYsIDEgPSAxMFYgKi8KICNkZWZpbmUJQURDX0RJCQkweDAwNDAJLyogRGlmZmVyZW50aWFsIGlucHV0IG1vZGUgMSA9IGRpZmZlcmVudGlhbCAqLwogCi0vLyBEZWZpbmUgYml0cyBmcm9tIERBQyBjb21tYW5kL3N0YXR1cyByZWdpc3RlcgorLyogIERlZmluZSBiaXRzIGZyb20gREFDIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyICovCiAjZGVmaW5lCURBQ19TVAkJMHgwMDAxCS8qIFN0YXJ0IERBQyAqLwogI2RlZmluZSBEQUNfQlNZCQkweDAwMDEJLyogREFDIGJ1c3kgKi8KICNkZWZpbmUJREFDX0JJCQkweDAwMTAJLyogQmlwb2xhciBpbnB1dCByYW5nZSAxID0gYmlwb2xhciAqLwogI2RlZmluZQlEQUNfUkEJCTB4MDAyMAkvKiBJbnB1dCByYW5nZSAwID0gNVYsIDEgPSAxMFYgKi8KIAotLy8gRGVmaW5lIGJpdHMgZnJvbSBpbnRlcnJ1cHQgZW5hYmxlL3N0YXR1cyByZWdpc3RlcnMKKy8qICBEZWZpbmUgYml0cyBmcm9tIGludGVycnVwdCBlbmFibGUvc3RhdHVzIHJlZ2lzdGVycyAqLwogI2RlZmluZQlBRENfUkVBRFkJMHgwMDAxCS8qIEEvZCBjb252ZXJzaW9uIHJlYWR5IGludGVycnVwdCAqLwogI2RlZmluZQlEQUNfUkVBRFkJMHgwMDAyCS8qIEQvYSBjb252ZXJzaW9uIHJlYWR5IGludGVycnVwdCAqLwogI2RlZmluZQlET1VUX0VSUk9SCTB4MDAwNAkvKiBEaWdpdGFsIG91dHB1dCBlcnJvciBpbnRlcnJ1cHQgKi8KQEAgLTEwNCwxMSArMTA0LDExIEBACiAjZGVmaW5lCUNJRTIJCTB4MDA0MAkvKiBDb3VudGVyIDIgb3ZlcnJ1biBpbnRlcnJ1cHQgKi8KICNkZWZpbmUJQ0lFMwkJMHgwMDgwCS8qIENvdW50ZXIgMyBvdmVycnVuIGludGVycnVwdCAqLwogCi0vLyBVc2VmdWwgZGVmaW5pdGlvbnMKLSNkZWZpbmUJU3RhdHVzX0lSUQkweDAwZmYJLy8gQWxsIGludGVycnVwdHMKKy8qICBVc2VmdWwgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUJU3RhdHVzX0lSUQkweDAwZmYJLyogIEFsbCBpbnRlcnJ1cHRzICovCiAKLS8vIERlZmluZSBhbmFsb2d1ZSByYW5nZQotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYW5hbG9nID0geyA0LCB7CisvKiAgRGVmaW5lIGFuYWxvZ3VlIHJhbmdlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYW5hbG9nID0geyA0LCB7CiAJCQlVTklfUkFOR0UoNSksCiAJCQlVTklfUkFOR0UoMTApLAogCQkJQklQX1JBTkdFKDUpLApAQCAtMTIzLDggKzEyMyw4IEBACiAJRm9yd2FyZCBkZWNsYXJhdGlvbnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpOwotc3RhdGljIGludCBpY3BfbXVsdGlfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBpY3BfbXVsdGlfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IGljcF9tdWx0aV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CiAKIC8qCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTEzMyw3OSArMTMzLDc5IEBACiAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHBjaV9saXN0X2J1aWxkZWQgPSAwOwkvKj4wIGxpc3Qgb2YgY2FyZCBpcyBrbm93biAqLwogCi10eXBlZGVmIHN0cnVjdCB7Ci0JY29uc3QgY2hhciAqbmFtZTsJLy8gZHJpdmVyIG5hbWUKK3N0cnVjdCBib2FyZHR5cGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8qICBkcml2ZXIgbmFtZSAqLwogCWludCBkZXZpY2VfaWQ7Ci0JaW50IGlvcmFuZ2U7CQkvLyBJL08gcmFuZ2UgbGVuCi0JY2hhciBoYXZlX2lycTsJCS8vIDE9Y2FyZCBzdXBwb3J0IElSUQotCWNoYXIgY2FyZHR5cGU7CQkvLyAwPUlDUCBNdWx0aQotCWludCBuX2FpY2hhbjsJCS8vIG51bSBvZiBBL0QgY2hhbnMKLQlpbnQgbl9haWNoYW5kOwkJLy8gbnVtIG9mIEEvRCBjaGFucyBpbiBkaWZmIG1vZGUKLQlpbnQgbl9hb2NoYW47CQkvLyBudW0gb2YgRC9BIGNoYW5zCi0JaW50IG5fZGljaGFuOwkJLy8gbnVtIG9mIERJIGNoYW5zCi0JaW50IG5fZG9jaGFuOwkJLy8gbnVtIG9mIERPIGNoYW5zCi0JaW50IG5fY3RyczsJCS8vIG51bSBvZiBjb3VudGVycwotCWludCBhaV9tYXhkYXRhOwkJLy8gcmVzb2x1dGlvbiBvZiBBL0QKLQlpbnQgYW9fbWF4ZGF0YTsJCS8vIHJlc29sdXRpb24gb2YgRC9BCi0JY29uc3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FpOwkvLyByYW5nZWxpc3QgZm9yIEEvRAotCWNvbnN0IGNoYXIgKnJhbmdlY29kZTsJLy8gcmFuZ2UgY29kZXMgZm9yIHByb2dyYW1taW5nCi0JY29uc3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FvOwkvLyByYW5nZWxpc3QgZm9yIEQvQQotfSBib2FyZHR5cGU7Ci0KLXN0YXRpYyBjb25zdCBib2FyZHR5cGUgYm9hcmR0eXBlc1tdID0gewotCXsiaWNwX211bHRpIiwJCS8vIERyaXZlciBuYW1lCi0JCQlERVZJQ0VfSUQsCS8vIFBDSSBkZXZpY2UgSUQKLQkJCUlPUkFOR0VfSUNQX01VTFRJLAkvLyBJL08gcmFuZ2UgbGVuZ3RoCi0JCQkxLAkvLyAxPUNhcmQgc3VwcG9ydHMgaW50ZXJydXB0cwotCQkJVFlQRV9JQ1BfTVVMVEksCS8vIENhcmQgdHlwZSA9IElDUCBNVUxUSQotCQkJMTYsCS8vIE51bSBvZiBBL0QgY2hhbm5lbHMKLQkJCTgsCS8vIE51bSBvZiBBL0QgY2hhbm5lbHMgaW4gZGlmZiBtb2RlCi0JCQk0LAkvLyBOdW0gb2YgRC9BIGNoYW5uZWxzCi0JCQkxNiwJLy8gTnVtIG9mIGRpZ2l0YWwgaW5wdXRzCi0JCQk4LAkvLyBOdW0gb2YgZGlnaXRhbCBvdXRwdXRzCi0JCQk0LAkvLyBOdW0gb2YgY291bnRlcnMKLQkJCTB4MGZmZiwJLy8gUmVzb2x1dGlvbiBvZiBBL0QKLQkJCTB4MGZmZiwJLy8gUmVzb2x1dGlvbiBvZiBEL0EKLQkJCSZyYW5nZV9hbmFsb2csCS8vIFJhbmdlbGlzdCBmb3IgQS9ECi0JCQlyYW5nZV9jb2Rlc19hbmFsb2csCS8vIFJhbmdlIGNvZGVzIGZvciBwcm9ncmFtbWluZwotCQkmcmFuZ2VfYW5hbG9nfSwJLy8gUmFuZ2VsaXN0IGZvciBEL0EKKwlpbnQgaW9yYW5nZTsJCS8qICBJL08gcmFuZ2UgbGVuICovCisJY2hhciBoYXZlX2lycTsJCS8qICAxPWNhcmQgc3VwcG9ydCBJUlEgKi8KKwljaGFyIGNhcmR0eXBlOwkJLyogIDA9SUNQIE11bHRpICovCisJaW50IG5fYWljaGFuOwkJLyogIG51bSBvZiBBL0QgY2hhbnMgKi8KKwlpbnQgbl9haWNoYW5kOwkJLyogIG51bSBvZiBBL0QgY2hhbnMgaW4gZGlmZiBtb2RlICovCisJaW50IG5fYW9jaGFuOwkJLyogIG51bSBvZiBEL0EgY2hhbnMgKi8KKwlpbnQgbl9kaWNoYW47CQkvKiAgbnVtIG9mIERJIGNoYW5zICovCisJaW50IG5fZG9jaGFuOwkJLyogIG51bSBvZiBETyBjaGFucyAqLworCWludCBuX2N0cnM7CQkvKiAgbnVtIG9mIGNvdW50ZXJzICovCisJaW50IGFpX21heGRhdGE7CQkvKiAgcmVzb2x1dGlvbiBvZiBBL0QgKi8KKwlpbnQgYW9fbWF4ZGF0YTsJCS8qICByZXNvbHV0aW9uIG9mIEQvQSAqLworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZWxpc3RfYWk7CS8qICByYW5nZWxpc3QgZm9yIEEvRCAqLworCWNvbnN0IGNoYXIgKnJhbmdlY29kZTsJLyogIHJhbmdlIGNvZGVzIGZvciBwcm9ncmFtbWluZyAqLworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpyYW5nZWxpc3RfYW87CS8qICByYW5nZWxpc3QgZm9yIEQvQSAqLwogfTsKIAotI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2YoYm9hcmR0eXBlKSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYm9hcmR0eXBlIGJvYXJkdHlwZXNbXSA9IHsKKwl7ImljcF9tdWx0aSIsCQkvKiAgRHJpdmVyIG5hbWUgKi8KKwkJCURFVklDRV9JRCwJLyogIFBDSSBkZXZpY2UgSUQgKi8KKwkJCUlPUkFOR0VfSUNQX01VTFRJLAkvKiAgSS9PIHJhbmdlIGxlbmd0aCAqLworCQkJMSwJLyogIDE9Q2FyZCBzdXBwb3J0cyBpbnRlcnJ1cHRzICovCisJCQlUWVBFX0lDUF9NVUxUSSwJLyogIENhcmQgdHlwZSA9IElDUCBNVUxUSSAqLworCQkJMTYsCS8qICBOdW0gb2YgQS9EIGNoYW5uZWxzICovCisJCQk4LAkvKiAgTnVtIG9mIEEvRCBjaGFubmVscyBpbiBkaWZmIG1vZGUgKi8KKwkJCTQsCS8qICBOdW0gb2YgRC9BIGNoYW5uZWxzICovCisJCQkxNiwJLyogIE51bSBvZiBkaWdpdGFsIGlucHV0cyAqLworCQkJOCwJLyogIE51bSBvZiBkaWdpdGFsIG91dHB1dHMgKi8KKwkJCTQsCS8qICBOdW0gb2YgY291bnRlcnMgKi8KKwkJCTB4MGZmZiwJLyogIFJlc29sdXRpb24gb2YgQS9EICovCisJCQkweDBmZmYsCS8qICBSZXNvbHV0aW9uIG9mIEQvQSAqLworCQkJJnJhbmdlX2FuYWxvZywJLyogIFJhbmdlbGlzdCBmb3IgQS9EICovCisJCQlyYW5nZV9jb2Rlc19hbmFsb2csCS8qICBSYW5nZSBjb2RlcyBmb3IgcHJvZ3JhbW1pbmcgKi8KKwkJJnJhbmdlX2FuYWxvZ30sCS8qICBSYW5nZWxpc3QgZm9yIEQvQSAqLworfTsKIAotc3RhdGljIGNvbWVkaV9kcml2ZXIgZHJpdmVyX2ljcF9tdWx0aSA9IHsKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBib2FyZHR5cGUpKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2ljcF9tdWx0aSA9IHsKICAgICAgIGRyaXZlcl9uYW1lOiJpY3BfbXVsdGkiLAotICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAotICAgICAgYXR0YWNoOmljcF9tdWx0aV9hdHRhY2gsCi0gICAgICBkZXRhY2g6aWNwX211bHRpX2RldGFjaCwKLSAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCi0gICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCi0gICAgICBvZmZzZXQ6c2l6ZW9mKGJvYXJkdHlwZSksCisgICAgICBtb2R1bGUgOiBUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaCA6IGljcF9tdWx0aV9hdHRhY2gsCisgICAgICBkZXRhY2ggOiBpY3BfbXVsdGlfZGV0YWNoLAorICAgICAgbnVtX25hbWVzIDogbl9ib2FyZHR5cGVzLAorICAgICAgYm9hcmRfbmFtZSA6ICZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBvZmZzZXQgOiBzaXplb2Yoc3RydWN0IGJvYXJkdHlwZSksCiB9OwogCiBDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2ljcF9tdWx0aSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKLQlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZDsJLy8gcG9pbnRlciB0byBjYXJkCi0JY2hhciB2YWxpZDsJCS8vIGNhcmQgaXMgdXNhYmxlCi0Jdm9pZCAqaW9fYWRkcjsJCS8vIFBvaW50ZXIgdG8gbWFwcGVkIGlvIGFkZHJlc3MKLQlyZXNvdXJjZV9zaXplX3QgcGh5c19pb2Jhc2U7CS8vIFBoeXNpY2FsIGlvIGFkZHJlc3MKLQl1bnNpZ25lZCBpbnQgQWRjQ21kU3RhdHVzOwkvLyBBREMgQ29tbWFuZC9TdGF0dXMgcmVnaXN0ZXIKLQl1bnNpZ25lZCBpbnQgRGFjQ21kU3RhdHVzOwkvLyBEQUMgQ29tbWFuZC9TdGF0dXMgcmVnaXN0ZXIKLQl1bnNpZ25lZCBpbnQgSW50RW5hYmxlOwkvLyBJbnRlcnJ1cHQgRW5hYmxlIHJlZ2lzdGVyCi0JdW5zaWduZWQgaW50IEludFN0YXR1czsJLy8gSW50ZXJydXB0IFN0YXR1cyByZWdpc3RlcgotCXVuc2lnbmVkIGludCBhY3RfY2hhbmxpc3RbMzJdOwkvLyBsaXN0IG9mIHNjYW5lZCBjaGFubmVsCi0JdW5zaWduZWQgY2hhciBhY3RfY2hhbmxpc3RfbGVuOwkvLyBsZW4gb2Ygc2Nhbmxpc3QKLQl1bnNpZ25lZCBjaGFyIGFjdF9jaGFubGlzdF9wb3M7CS8vIGFjdHVhbCBwb3NpdGlvbiBpbiBNVVggbGlzdAotCXVuc2lnbmVkIGludCAqYWlfY2hhbmxpc3Q7CS8vIGFjdGF1bCBjaGFubGlzdAotCXNhbXBsX3QgKmFpX2RhdGE7CS8vIGRhdGEgYnVmZmVyCi0Jc2FtcGxfdCBhb19kYXRhWzRdOwkvLyBkYXRhIG91dHB1dCBidWZmZXIKLQlzYW1wbF90IGRpX2RhdGE7CS8vIERpZ2l0YWwgaW5wdXQgZGF0YQotCXVuc2lnbmVkIGludCBkb19kYXRhOwkvLyBSZW1lbWJlciBkaWdpdGFsIG91dHB1dCBkYXRhCi19IGljcF9tdWx0aV9wcml2YXRlOworc3RydWN0IGljcF9tdWx0aV9wcml2YXRlIHsKKwlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZDsJLyogIHBvaW50ZXIgdG8gY2FyZCAqLworCWNoYXIgdmFsaWQ7CQkvKiAgY2FyZCBpcyB1c2FibGUgKi8KKwl2b2lkICppb19hZGRyOwkJLyogIFBvaW50ZXIgdG8gbWFwcGVkIGlvIGFkZHJlc3MgKi8KKwlyZXNvdXJjZV9zaXplX3QgcGh5c19pb2Jhc2U7CS8qICBQaHlzaWNhbCBpbyBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IEFkY0NtZFN0YXR1czsJLyogIEFEQyBDb21tYW5kL1N0YXR1cyByZWdpc3RlciAqLworCXVuc2lnbmVkIGludCBEYWNDbWRTdGF0dXM7CS8qICBEQUMgQ29tbWFuZC9TdGF0dXMgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBpbnQgSW50RW5hYmxlOwkvKiAgSW50ZXJydXB0IEVuYWJsZSByZWdpc3RlciAqLworCXVuc2lnbmVkIGludCBJbnRTdGF0dXM7CS8qICBJbnRlcnJ1cHQgU3RhdHVzIHJlZ2lzdGVyICovCisJdW5zaWduZWQgaW50IGFjdF9jaGFubGlzdFszMl07CS8qICBsaXN0IG9mIHNjYW5lZCBjaGFubmVsICovCisJdW5zaWduZWQgY2hhciBhY3RfY2hhbmxpc3RfbGVuOwkvKiAgbGVuIG9mIHNjYW5saXN0ICovCisJdW5zaWduZWQgY2hhciBhY3RfY2hhbmxpc3RfcG9zOwkvKiAgYWN0dWFsIHBvc2l0aW9uIGluIE1VWCBsaXN0ICovCisJdW5zaWduZWQgaW50ICphaV9jaGFubGlzdDsJLyogIGFjdGF1bCBjaGFubGlzdCAqLworCXNob3J0ICphaV9kYXRhOwkvKiAgZGF0YSBidWZmZXIgKi8KKwlzaG9ydCBhb19kYXRhWzRdOwkvKiAgZGF0YSBvdXRwdXQgYnVmZmVyICovCisJc2hvcnQgZGlfZGF0YTsJLyogIERpZ2l0YWwgaW5wdXQgZGF0YSAqLworCXVuc2lnbmVkIGludCBkb19kYXRhOwkvKiAgUmVtZW1iZXIgZGlnaXRhbCBvdXRwdXQgZGF0YSAqLworfTsKIAotI2RlZmluZSBkZXZwcml2ICgoaWNwX211bHRpX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCi0jZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBib2FyZHR5cGUgKilkZXYtPmJvYXJkX3B0cikKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBpY3BfbXVsdGlfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBib2FyZHR5cGUgKilkZXYtPmJvYXJkX3B0cikKIAogLyoKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjE0LDEyICsyMTQsMTIgQEAKICovCiAKICNpZiAwCi1zdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKK3N0YXRpYyBpbnQgY2hlY2tfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pOwogI2VuZGlmCi1zdGF0aWMgdm9pZCBzZXR1cF9jaGFubmVsX2xpc3QoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCitzdGF0aWMgdm9pZCBzZXR1cF9jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJdW5zaWduZWQgaW50ICpjaGFubGlzdCwgdW5zaWduZWQgaW50IG5fY2hhbik7Ci1zdGF0aWMgaW50IGljcF9tdWx0aV9yZXNldChjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgaWNwX211bHRpX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogCiAvKgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMzYsMzIgKzIzNiwzMiBAQAogCQlUaGlzIGZ1bmN0aW9uIHJlYWRzIGEgc2luZ2xlIGFuYWxvZ3VlIGlucHV0LgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgotCQlsc2FtcGxfdCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBpbnB1dCBkYXRhCisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IGRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KKwkJdW5zaWduZWQgaW50ICpkYXRhCQlQb2ludGVyIHRvIGFuYWxvZ3VlIGlucHV0IGRhdGEKIAogCVJldHVybnM6aW50CQkJTm11YmVyIG9mIGluc3RydWN0aW9ucyBleGVjdXRlZAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX3JlYWRfYWkoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX3JlYWRfYWkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IG4sIHRpbWVvdXQ7CiAKICNpZmRlZiBJQ1BfTVVMVElfRVhUREVCVUcKIAlwcmludGsoImljcCBtdWx0aSBFREJHOiBCR046IGljcF9tdWx0aV9pbnNuX3JlYWRfYWkoLi4uKVxuIik7CiAjZW5kaWYKLQkvLyBEaXNhYmxlIEEvRCBjb252ZXJzaW9uIHJlYWR5IGludGVycnVwdAorCS8qICBEaXNhYmxlIEEvRCBjb252ZXJzaW9uIHJlYWR5IGludGVycnVwdCAqLwogCWRldnByaXYtPkludEVuYWJsZSAmPSB+QURDX1JFQURZOwogCXdyaXRldyhkZXZwcml2LT5JbnRFbmFibGUsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX0VOKTsKIAotCS8vIENsZWFyIGludGVycnVwdCBzdGF0dXMKKwkvKiAgQ2xlYXIgaW50ZXJydXB0IHN0YXR1cyAqLwogCWRldnByaXYtPkludFN0YXR1cyB8PSBBRENfUkVBRFk7CiAJd3JpdGV3KGRldnByaXYtPkludFN0YXR1cywgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCk7CiAKLQkvLyBTZXQgdXAgYXBwcm9wcmlhdGUgY2hhbm5lbCwgbW9kZSBhbmQgcmFuZ2UgZGF0YSwgZm9yIHNwZWNpZmllZCBjaGFubmVsCisJLyogIFNldCB1cCBhcHByb3ByaWF0ZSBjaGFubmVsLCBtb2RlIGFuZCByYW5nZSBkYXRhLCBmb3Igc3BlY2lmaWVkIGNoYW5uZWwgKi8KIAlzZXR1cF9jaGFubmVsX2xpc3QoZGV2LCBzLCAmaW5zbi0+Y2hhbnNwZWMsIDEpOwogCiAjaWZkZWYgSUNQX01VTFRJX0VYVERFQlVHCkBAIC0yNzEsNyArMjcxLDcgQEAKICNlbmRpZgogCiAJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgewotCQkvLyBTZXQgc3RhcnQgQURDIGJpdAorCQkvKiAgU2V0IHN0YXJ0IEFEQyBiaXQgKi8KIAkJZGV2cHJpdi0+QWRjQ21kU3RhdHVzIHw9IEFEQ19TVDsKIAkJd3JpdGV3KGRldnByaXYtPkFkY0NtZFN0YXR1cywKIAkJCWRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfQURDX0NTUik7CkBAIC0yODksNyArMjg5LDcgQEAKIAkJCXJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfQURDX0NTUikpOwogI2VuZGlmCiAKLQkJLy8gV2FpdCBmb3IgY29udmVyc2lvbiB0byBjb21wbGV0ZSwgb3IgZ2V0IGZlZCB1cCB3YWl0aW5nCisJCS8qICBXYWl0IGZvciBjb252ZXJzaW9uIHRvIGNvbXBsZXRlLCBvciBnZXQgZmVkIHVwIHdhaXRpbmcgKi8KIAkJdGltZW91dCA9IDEwMDsKIAkJd2hpbGUgKHRpbWVvdXQtLSkgewogCQkJaWYgKCEocmVhZHcoZGV2cHJpdi0+aW9fYWRkciArCkBAIC0zMDcsMTkgKzMwNywxOSBAQAogCQkJY29tZWRpX3VkZWxheSgxKTsKIAkJfQogCi0JCS8vIElmIHdlIHJlYWNoIGhlcmUsIGEgdGltZW91dCBoYXMgb2NjdXJyZWQKKwkJLyogIElmIHdlIHJlYWNoIGhlcmUsIGEgdGltZW91dCBoYXMgb2NjdXJyZWQgKi8KIAkJY29tZWRpX2Vycm9yKGRldiwgIkEvRCBpbnNuIHRpbWVvdXQiKTsKIAotCQkvLyBEaXNhYmxlIGludGVycnVwdAorCQkvKiAgRGlzYWJsZSBpbnRlcnJ1cHQgKi8KIAkJZGV2cHJpdi0+SW50RW5hYmxlICY9IH5BRENfUkVBRFk7CiAJCXdyaXRldyhkZXZwcml2LT5JbnRFbmFibGUsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX0VOKTsKIAotCQkvLyBDbGVhciBpbnRlcnJ1cHQgc3RhdHVzCisJCS8qICBDbGVhciBpbnRlcnJ1cHQgc3RhdHVzICovCiAJCWRldnByaXYtPkludFN0YXR1cyB8PSBBRENfUkVBRFk7CiAJCXdyaXRldyhkZXZwcml2LT5JbnRTdGF0dXMsCiAJCQlkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0lOVF9TVEFUKTsKIAotCQkvLyBDbGVhciBkYXRhIHJlY2VpdmVkCisJCS8qICBDbGVhciBkYXRhIHJlY2VpdmVkICovCiAJCWRhdGFbbl0gPSAwOwogCiAjaWZkZWYgSUNQX01VTFRJX0VYVERFQlVHCkBAIC0zMzIsMTEgKzMzMiwxMSBAQAogCQkJKHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfQUkpID4+IDQpICYgMHgwZmZmOwogCX0KIAotCS8vIERpc2FibGUgaW50ZXJydXB0CisJLyogIERpc2FibGUgaW50ZXJydXB0ICovCiAJZGV2cHJpdi0+SW50RW5hYmxlICY9IH5BRENfUkVBRFk7CiAJd3JpdGV3KGRldnByaXYtPkludEVuYWJsZSwgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfRU4pOwogCi0JLy8gQ2xlYXIgaW50ZXJydXB0IHN0YXR1cworCS8qICBDbGVhciBpbnRlcnJ1cHQgc3RhdHVzICovCiAJZGV2cHJpdi0+SW50U3RhdHVzIHw9IEFEQ19SRUFEWTsKIAl3cml0ZXcoZGV2cHJpdi0+SW50U3RhdHVzLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0lOVF9TVEFUKTsKIApAQCAtMzU1LDQwICszNTUsNDAgQEAKIAkJVGhpcyBmdW5jdGlvbiB3cml0ZXMgYSBzaW5nbGUgYW5hbG9ndWUgb3V0cHV0LgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgotCQlsc2FtcGxfdCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbglQb2ludGVyIHRvIGN1cnJlbnQgY29tZWRpIGluc3RydWN0aW9uCisJCXVuc2lnbmVkIGludCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQogCiAJUmV0dXJuczppbnQJCQlObXViZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2luc25fd3JpdGVfYW8oY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IGljcF9tdWx0aV9pbnNuX3dyaXRlX2FvKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBuLCBjaGFuLCByYW5nZSwgdGltZW91dDsKIAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwogCXByaW50aygiaWNwIG11bHRpIEVEQkc6IEJHTjogaWNwX211bHRpX2luc25fd3JpdGVfYW8oLi4uKVxuIik7CiAjZW5kaWYKLQkvLyBEaXNhYmxlIEQvQSBjb252ZXJzaW9uIHJlYWR5IGludGVycnVwdAorCS8qICBEaXNhYmxlIEQvQSBjb252ZXJzaW9uIHJlYWR5IGludGVycnVwdCAqLwogCWRldnByaXYtPkludEVuYWJsZSAmPSB+REFDX1JFQURZOwogCXdyaXRldyhkZXZwcml2LT5JbnRFbmFibGUsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX0VOKTsKIAotCS8vIENsZWFyIGludGVycnVwdCBzdGF0dXMKKwkvKiAgQ2xlYXIgaW50ZXJydXB0IHN0YXR1cyAqLwogCWRldnByaXYtPkludFN0YXR1cyB8PSBEQUNfUkVBRFk7CiAJd3JpdGV3KGRldnByaXYtPkludFN0YXR1cywgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCk7CiAKLQkvLyBHZXQgY2hhbm5lbCBudW1iZXIgYW5kIHJhbmdlCisJLyogIEdldCBjaGFubmVsIG51bWJlciBhbmQgcmFuZ2UgKi8KIAljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CiAKLQkvLyBTZXQgdXAgcmFuZ2UgYW5kIGNoYW5uZWwgZGF0YQotCS8vIEJpdCA0ID0gMSA6IEJpcG9sYXIKLQkvLyBCaXQgNSA9IDAgOiA1VgotCS8vIEJpdCA1ID0gMSA6IDEwVgotCS8vIEJpdHMgOC05IDogQ2hhbm5lbCBudW1iZXIKKwkvKiAgU2V0IHVwIHJhbmdlIGFuZCBjaGFubmVsIGRhdGEgKi8KKwkvKiAgQml0IDQgPSAxIDogQmlwb2xhciAqLworCS8qICBCaXQgNSA9IDAgOiA1ViAqLworCS8qICBCaXQgNSA9IDEgOiAxMFYgKi8KKwkvKiAgQml0cyA4LTkgOiBDaGFubmVsIG51bWJlciAqLwogCWRldnByaXYtPkRhY0NtZFN0YXR1cyAmPSAweGZjY2Y7CiAJZGV2cHJpdi0+RGFjQ21kU3RhdHVzIHw9IHRoaXNfYm9hcmQtPnJhbmdlY29kZVtyYW5nZV07CiAJZGV2cHJpdi0+RGFjQ21kU3RhdHVzIHw9IChjaGFuIDw8IDgpOwpAQCAtMzk2LDcgKzM5Niw3IEBACiAJd3JpdGV3KGRldnByaXYtPkRhY0NtZFN0YXR1cywgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9EQUNfQ1NSKTsKIAogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKLQkJLy8gV2FpdCBmb3IgYW5hbG9ndWUgb3V0cHV0IGRhdGEgcmVnaXN0ZXIgdG8gYmUgcmVhZHkgZm9yIG5ldyBkYXRhLCBvciBnZXQgZmVkIHVwIHdhaXRpbmcKKwkJLyogIFdhaXQgZm9yIGFuYWxvZ3VlIG91dHB1dCBkYXRhIHJlZ2lzdGVyIHRvIGJlIHJlYWR5IGZvciBuZXcgZGF0YSwgb3IgZ2V0IGZlZCB1cCB3YWl0aW5nICovCiAJCXRpbWVvdXQgPSAxMDA7CiAJCXdoaWxlICh0aW1lb3V0LS0pIHsKIAkJCWlmICghKHJlYWR3KGRldnByaXYtPmlvX2FkZHIgKwpAQCAtNDE0LDE5ICs0MTQsMTkgQEAKIAkJCWNvbWVkaV91ZGVsYXkoMSk7CiAJCX0KIAotCQkvLyBJZiB3ZSByZWFjaCBoZXJlLCBhIHRpbWVvdXQgaGFzIG9jY3VycmVkCisJCS8qICBJZiB3ZSByZWFjaCBoZXJlLCBhIHRpbWVvdXQgaGFzIG9jY3VycmVkICovCiAJCWNvbWVkaV9lcnJvcihkZXYsICJEL0EgaW5zbiB0aW1lb3V0Iik7CiAKLQkJLy8gRGlzYWJsZSBpbnRlcnJ1cHQKKwkJLyogIERpc2FibGUgaW50ZXJydXB0ICovCiAJCWRldnByaXYtPkludEVuYWJsZSAmPSB+REFDX1JFQURZOwogCQl3cml0ZXcoZGV2cHJpdi0+SW50RW5hYmxlLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0lOVF9FTik7CiAKLQkJLy8gQ2xlYXIgaW50ZXJydXB0IHN0YXR1cworCQkvKiAgQ2xlYXIgaW50ZXJydXB0IHN0YXR1cyAqLwogCQlkZXZwcml2LT5JbnRTdGF0dXMgfD0gREFDX1JFQURZOwogCQl3cml0ZXcoZGV2cHJpdi0+SW50U3RhdHVzLAogCQkJZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCk7CiAKLQkJLy8gQ2xlYXIgZGF0YSByZWNlaXZlZAorCQkvKiAgQ2xlYXIgZGF0YSByZWNlaXZlZCAqLwogCQlkZXZwcml2LT5hb19kYXRhW2NoYW5dID0gMDsKIAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwpAQCAtNDM1LDE2ICs0MzUsMTYgQEAKIAkJcmV0dXJuIC1FVElNRTsKIAogCSAgICAgIGRhY19yZWFkeToKLQkJLy8gV3JpdGUgZGF0YSB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YSByZWdpc3RlcgorCQkvKiAgV3JpdGUgZGF0YSB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YSByZWdpc3RlciAqLwogCQl3cml0ZXcoZGF0YVtuXSwgZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9BTyk7CiAKLQkJLy8gU2V0IERBQ19TVCBiaXQgdG8gd3JpdGUgdGhlIGRhdGEgdG8gc2VsZWN0ZWQgY2hhbm5lbAorCQkvKiAgU2V0IERBQ19TVCBiaXQgdG8gd3JpdGUgdGhlIGRhdGEgdG8gc2VsZWN0ZWQgY2hhbm5lbCAqLwogCQlkZXZwcml2LT5EYWNDbWRTdGF0dXMgfD0gREFDX1NUOwogCQl3cml0ZXcoZGV2cHJpdi0+RGFjQ21kU3RhdHVzLAogCQkJZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9EQUNfQ1NSKTsKIAkJZGV2cHJpdi0+RGFjQ21kU3RhdHVzICY9IH5EQUNfU1Q7CiAKLQkJLy8gU2F2ZSBhbmFsb2d1ZSBvdXRwdXQgZGF0YQorCQkvKiAgU2F2ZSBhbmFsb2d1ZSBvdXRwdXQgZGF0YSAqLwogCQlkZXZwcml2LT5hb19kYXRhW2NoYW5dID0gZGF0YVtuXTsKIAl9CiAKQEAgLTQ2MywyNCArNDYzLDI0IEBACiAJCVRoaXMgZnVuY3Rpb24gcmVhZHMgYSBzaW5nbGUgYW5hbG9ndWUgb3V0cHV0LgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgotCQlsc2FtcGxfdCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbglQb2ludGVyIHRvIGN1cnJlbnQgY29tZWRpIGluc3RydWN0aW9uCisJCXVuc2lnbmVkIGludCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQogCiAJUmV0dXJuczppbnQJCQlObXViZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2luc25fcmVhZF9hbyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgaWNwX211bHRpX2luc25fcmVhZF9hbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgbiwgY2hhbjsKIAotCS8vIEdldCBjaGFubmVsIG51bWJlcgorCS8qICBHZXQgY2hhbm5lbCBudW1iZXIgKi8KIAljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAKLQkvLyBSZWFkIGFuYWxvZ3VlIG91dHB1dHMKKwkvKiAgUmVhZCBhbmFsb2d1ZSBvdXRwdXRzICovCiAJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykKIAkJZGF0YVtuXSA9IGRldnByaXYtPmFvX2RhdGFbY2hhbl07CiAKQEAgLTQ5NiwxNyArNDk2LDE3IEBACiAJCVRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIGRpZ2l0YWwgaW5wdXRzLgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgotCQlsc2FtcGxfdCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbglQb2ludGVyIHRvIGN1cnJlbnQgY29tZWRpIGluc3RydWN0aW9uCisJCXVuc2lnbmVkIGludCAqZGF0YQkJUG9pbnRlciB0byBhbmFsb2d1ZSBvdXRwdXQgZGF0YQogCiAJUmV0dXJuczppbnQJCQlObXViZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2luc25fYml0c19kaShjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgaWNwX211bHRpX2luc25fYml0c19kaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlkYXRhWzFdID0gcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9ESSk7CiAKQEAgLTUyMiwxNyArNTIyLDE3IEBACiAJCVRoaXMgZnVuY3Rpb24gd3JpdGVzIHRoZSBhcHByb3ByaWF0ZSBkaWdpdGFsIG91dHB1dHMuCiAKIAlQYXJhbWV0ZXJzOgotCQljb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IGRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQotCQljb21lZGlfaW5zbiAqaW5zbglQb2ludGVyIHRvIGN1cnJlbnQgY29tZWRpIGluc3RydWN0aW9uCi0JCWxzYW1wbF90ICpkYXRhCQlQb2ludGVyIHRvIGFuYWxvZ3VlIG91dHB1dCBkYXRhCisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IGRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KKwkJdW5zaWduZWQgaW50ICpkYXRhCQlQb2ludGVyIHRvIGFuYWxvZ3VlIG91dHB1dCBkYXRhCiAKIAlSZXR1cm5zOmludAkJCU5tdWJlciBvZiBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwotc3RhdGljIGludCBpY3BfbXVsdGlfaW5zbl9iaXRzX2RvKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBpY3BfbXVsdGlfaW5zbl9iaXRzX2RvKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwogCXByaW50aygiaWNwIG11bHRpIEVEQkc6IEJHTjogaWNwX211bHRpX2luc25fYml0c19kbyguLi4pXG4iKTsKQEAgLTU2NCwxNyArNTY0LDE3IEBACiAJCVRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHNwZWNpZmllZCBjb3VudGVyLgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgotCQlsc2FtcGxfdCAqZGF0YQkJUG9pbnRlciB0byBjb3VudGVyIGRhdGEKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24JUG9pbnRlciB0byBjdXJyZW50IGNvbWVkaSBpbnN0cnVjdGlvbgorCQl1bnNpZ25lZCBpbnQgKmRhdGEJCVBvaW50ZXIgdG8gY291bnRlciBkYXRhCiAKIAlSZXR1cm5zOmludAkJCU5tdWJlciBvZiBpbnN0cnVjdGlvbnMgZXhlY3V0ZWQKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwotc3RhdGljIGludCBpY3BfbXVsdGlfaW5zbl9yZWFkX2N0cihjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgaWNwX211bHRpX2luc25fcmVhZF9jdHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC01ODgsMTcgKzU4OCwxNyBAQAogCQlUaGlzIGZ1bmN0aW9uIHdyaXRlIHRvIHRoZSBzcGVjaWZpZWQgY291bnRlci4KIAogCVBhcmFtZXRlcnM6Ci0JCWNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQotCQljb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KLQkJbHNhbXBsX3QgKmRhdGEJCVBvaW50ZXIgdG8gY291bnRlciBkYXRhCisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IGRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuCVBvaW50ZXIgdG8gY3VycmVudCBjb21lZGkgaW5zdHJ1Y3Rpb24KKwkJdW5zaWduZWQgaW50ICpkYXRhCQlQb2ludGVyIHRvIGNvdW50ZXIgZGF0YQogCiAJUmV0dXJuczppbnQJCQlObXViZXIgb2YgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGVkCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2luc25fd3JpdGVfY3RyKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBpY3BfbXVsdGlfaW5zbl93cml0ZV9jdHIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC02MjAsNyArNjIwLDcgQEAKICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3NlcnZpY2VfaWNwX211bHRpKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKIAlpbnQgaW50X25vOwogCiAjaWZkZWYgSUNQX01VTFRJX0VYVERFQlVHCkBAIC02MjgsMTAgKzYyOCwxMCBAQAogCQlpcnEpOwogI2VuZGlmCiAKLQkvLyBJcyB0aGlzIGludGVycnVwdCBmcm9tIG91ciBib2FyZD8KKwkvKiAgSXMgdGhpcyBpbnRlcnJ1cHQgZnJvbSBvdXIgYm9hcmQ/ICovCiAJaW50X25vID0gcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCkgJiBTdGF0dXNfSVJROwogCWlmICghaW50X25vKQotCQkvLyBObywgZXhpdAorCQkvKiAgTm8sIGV4aXQgKi8KIAkJcmV0dXJuIElSUV9OT05FOwogCiAjaWZkZWYgSUNQX01VTFRJX0VYVERFQlVHCkBAIC02MzksNyArNjM5LDcgQEAKIAkJcmVhZHcoZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9JTlRfU1RBVCkpOwogI2VuZGlmCiAKLQkvLyBEZXRlcm1pbmUgd2hpY2ggaW50ZXJydXB0IGlzIGFjdGl2ZSAmIGhhbmRsZSBpdAorCS8qICBEZXRlcm1pbmUgd2hpY2ggaW50ZXJydXB0IGlzIGFjdGl2ZSAmIGhhbmRsZSBpdCAqLwogCXN3aXRjaCAoaW50X25vKSB7CiAJY2FzZSBBRENfUkVBRFk6CiAJCWJyZWFrOwpAQCAtNjc5LDggKzY3OSw4IEBACiAJCWlzIGJ1aWx0IGNvcnJlY3RseQogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9zdWJkZXZpY2UgKnMJUG9pbnRlciB0byBjdXJyZW50IHN1YmRldmljZSBzdHJ1Y3R1cmUKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgc2V2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQogCQl1bnNpZ25lZCBpbnQgKmNoYW5saXN0CVBvaW50ZXIgdG8gcGFja2VkIGNoYW5uZWwgbGlzdAogCQl1bnNpZ25lZCBpbnQgbl9jaGFuCU51bWJlciBvZiBjaGFubmVscyB0byBzY2FuCiAKQEAgLTY4OSw3ICs2ODksNyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKK3N0YXRpYyBpbnQgY2hlY2tfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC02OTcsMTQgKzY5NywxNCBAQAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwogCXByaW50aygiaWNwIG11bHRpIEVEQkc6ICBjaGVja19jaGFubmVsX2xpc3QoLi4uLCVkKVxuIiwgbl9jaGFuKTsKICNlbmRpZgotCS8vIENoZWNrIHRoYXQgd2UgYXQgbGVhc3QgaGF2ZSBvbmUgY2hhbm5lbCB0byBjaGVjaworCS8qICBDaGVjayB0aGF0IHdlIGF0IGxlYXN0IGhhdmUgb25lIGNoYW5uZWwgdG8gY2hlY2sgKi8KIAlpZiAobl9jaGFuIDwgMSkgewogCQljb21lZGlfZXJyb3IoZGV2LCAicmFuZ2UvY2hhbm5lbCBsaXN0IGlzIGVtcHR5ISIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JLy8gQ2hlY2sgYWxsIGNoYW5uZWxzCisJLyogIENoZWNrIGFsbCBjaGFubmVscyAqLwogCWZvciAoaSA9IDA7IGkgPCBuX2NoYW47IGkrKykgewotCQkvLyBDaGVjayB0aGF0IGNoYW5uZWwgbnVtYmVyIGlzIDwgbWF4aW11bQorCQkvKiAgQ2hlY2sgdGhhdCBjaGFubmVsIG51bWJlciBpcyA8IG1heGltdW0gKi8KIAkJaWYgKENSX0FSRUYoY2hhbmxpc3RbaV0pID09IEFSRUZfRElGRikgewogCQkJaWYgKENSX0NIQU4oY2hhbmxpc3RbaV0pID4gdGhpc19ib2FyZC0+bl9haWNoYW5kKSB7CiAJCQkJY29tZWRpX2Vycm9yKGRldiwKQEAgLTczNCw4ICs3MzQsOCBAQAogCQlTdGF0dXMgcmVnaXN0ZXIuCiAKIAlQYXJhbWV0ZXJzOgotCQljb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IHNldmljZSBzdHJ1Y3R1cmUKLQkJY29tZWRpX3N1YmRldmljZSAqcwlQb2ludGVyIHRvIGN1cnJlbnQgc3ViZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzCVBvaW50ZXIgdG8gY3VycmVudCBzdWJkZXZpY2Ugc3RydWN0dXJlCiAJCXVuc2lnbmVkIGludCAqY2hhbmxpc3QJUG9pbnRlciB0byBwYWNrZWQgY2hhbm5lbCBsaXN0CiAJCXVuc2lnbmVkIGludCBuX2NoYW4JTnVtYmVyIG9mIGNoYW5uZWxzIHRvIHNjYW4KIApAQCAtNzQzLDcgKzc0Myw3IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyB2b2lkIHNldHVwX2NoYW5uZWxfbGlzdChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKK3N0YXRpYyB2b2lkIHNldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAl1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCB1bnNpZ25lZCBpbnQgbl9jaGFuKQogewogCXVuc2lnbmVkIGludCBpLCByYW5nZSwgY2hhbnByb2c7CkBAIC03NTYsMTAgKzc1NiwxMCBAQAogCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IG5fY2hhbjsgaSsrKSB7Ci0JCS8vIEdldCBjaGFubmVsCisJCS8qICBHZXQgY2hhbm5lbCAqLwogCQljaGFucHJvZyA9IENSX0NIQU4oY2hhbmxpc3RbaV0pOwogCi0JCS8vIERldGVybWluZSBpZiBpdCBpcyBhIGRpZmZlcmVudGlhbCBjaGFubmVsIChCaXQgMTUgID0gMSkKKwkJLyogIERldGVybWluZSBpZiBpdCBpcyBhIGRpZmZlcmVudGlhbCBjaGFubmVsIChCaXQgMTUgID0gMSkgKi8KIAkJaWYgKENSX0FSRUYoY2hhbmxpc3RbaV0pID09IEFSRUZfRElGRikgewogCQkJZGlmZiA9IDE7CiAJCQljaGFucHJvZyAmPSAweDAwMDc7CkBAIC03NjgsMjEgKzc2OCwyMSBAQAogCQkJY2hhbnByb2cgJj0gMHgwMDBmOwogCQl9CiAKLQkJLy8gQ2xlYXIgY2hhbm5lbCwgcmFuZ2UgYW5kIGlucHV0IG1vZGUgYml0cyBpbiBBL0QgY29tbWFuZC9zdGF0dXMgcmVnaXN0ZXIKKwkJLyogIENsZWFyIGNoYW5uZWwsIHJhbmdlIGFuZCBpbnB1dCBtb2RlIGJpdHMgaW4gQS9EIGNvbW1hbmQvc3RhdHVzIHJlZ2lzdGVyICovCiAJCWRldnByaXYtPkFkY0NtZFN0YXR1cyAmPSAweGYwMGY7CiAKLQkJLy8gU2V0IGNoYW5uZWwgbnVtYmVyIGFuZCBkaWZmZXJlbnRpYWwgbW9kZSBzdGF0dXMgYml0CisJCS8qICBTZXQgY2hhbm5lbCBudW1iZXIgYW5kIGRpZmZlcmVudGlhbCBtb2RlIHN0YXR1cyBiaXQgKi8KIAkJaWYgKGRpZmYpIHsKLQkJCS8vIFNldCBjaGFubmVsIG51bWJlciwgYml0cyA5LTExICYgbW9kZSwgYml0IDYKKwkJCS8qICBTZXQgY2hhbm5lbCBudW1iZXIsIGJpdHMgOS0xMSAmIG1vZGUsIGJpdCA2ICovCiAJCQlkZXZwcml2LT5BZGNDbWRTdGF0dXMgfD0gKGNoYW5wcm9nIDw8IDkpOwogCQkJZGV2cHJpdi0+QWRjQ21kU3RhdHVzIHw9IEFEQ19ESTsKIAkJfSBlbHNlCi0JCQkvLyBTZXQgY2hhbm5lbCBudW1iZXIsIGJpdHMgOC0xMQorCQkJLyogIFNldCBjaGFubmVsIG51bWJlciwgYml0cyA4LTExICovCiAJCQlkZXZwcml2LT5BZGNDbWRTdGF0dXMgfD0gKGNoYW5wcm9nIDw8IDgpOwogCi0JCS8vIEdldCByYW5nZSBmb3IgY3VycmVudCBjaGFubmVsCisJCS8qICBHZXQgcmFuZ2UgZm9yIGN1cnJlbnQgY2hhbm5lbCAqLwogCQlyYW5nZSA9IHRoaXNfYm9hcmQtPnJhbmdlY29kZVtDUl9SQU5HRShjaGFubGlzdFtpXSldOwotCQkvLyBTZXQgcmFuZ2UuIGJpdHMgNC01CisJCS8qICBTZXQgcmFuZ2UuIGJpdHMgNC01ICovCiAJCWRldnByaXYtPkFkY0NtZFN0YXR1cyB8PSByYW5nZTsKIAogCQkvKiBPdXRwdXQgY2hhbm5lbCwgcmFuZ2UsIG1vZGUgdG8gSUNQIE11bHRpICovCkBAIC04MDYsNDUgKzgwNiw0NSBAQAogCQlUaGlzIGZ1bmN0aW9uIHJlc2V0cyB0aGUgaWNwIG11bHRpIGRldmljZSB0byBhICdzYWZlJyBzdGF0ZQogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBzZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJUG9pbnRlciB0byBjdXJyZW50IHNldmljZSBzdHJ1Y3R1cmUKIAogCVJldHVybnM6aW50CTAgPSBzdWNjZXNzCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX3Jlc2V0KGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IGljcF9tdWx0aV9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGludCBpOwogCiAjaWZkZWYgSUNQX01VTFRJX0VYVERFQlVHCiAJcHJpbnRrKCJpY3BfbXVsdGkgRURCRzogQkdOOiBpY3BfbXVsdGlfcmVzZXQoLi4uKVxuIik7CiAjZW5kaWYKLQkvLyBDbGVhciBJTlQgZW5hYmxlcyBhbmQgcmVxdWVzdHMKKwkvKiAgQ2xlYXIgSU5UIGVuYWJsZXMgYW5kIHJlcXVlc3RzICovCiAJd3JpdGV3KDAsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfSU5UX0VOKTsKIAl3cml0ZXcoMHgwMGZmLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0lOVF9TVEFUKTsKIAogCWlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbikKLQkJLy8gU2V0IERBQ3MgdG8gMC4uNVYgcmFuZ2UgYW5kIDBWIG91dHB1dAorCQkvKiAgU2V0IERBQ3MgdG8gMC4uNVYgcmFuZ2UgYW5kIDBWIG91dHB1dCAqLwogCQlmb3IgKGkgPSAwOyBpIDwgdGhpc19ib2FyZC0+bl9hb2NoYW47IGkrKykgewogCQkJZGV2cHJpdi0+RGFjQ21kU3RhdHVzICY9IDB4ZmNjZTsKIAotCQkJLy8gU2V0IGNoYW5uZWwgbnVtYmVyCisJCQkvKiAgU2V0IGNoYW5uZWwgbnVtYmVyICovCiAJCQlkZXZwcml2LT5EYWNDbWRTdGF0dXMgfD0gKGkgPDwgOCk7CiAKLQkJCS8vIE91dHB1dCAwVgorCQkJLyogIE91dHB1dCAwViAqLwogCQkJd3JpdGV3KDAsIGRldnByaXYtPmlvX2FkZHIgKyBJQ1BfTVVMVElfQU8pOwogCi0JCQkvLyBTZXQgc3RhcnQgY29udmVyc2lvbiBiaXQKKwkJCS8qICBTZXQgc3RhcnQgY29udmVyc2lvbiBiaXQgKi8KIAkJCWRldnByaXYtPkRhY0NtZFN0YXR1cyB8PSBEQUNfU1Q7CiAKLQkJCS8vIE91dHB1dCB0byBjb21tYW5kIC8gc3RhdHVzIHJlZ2lzdGVyCisJCQkvKiAgT3V0cHV0IHRvIGNvbW1hbmQgLyBzdGF0dXMgcmVnaXN0ZXIgKi8KIAkJCXdyaXRldyhkZXZwcml2LT5EYWNDbWRTdGF0dXMsCiAJCQkJZGV2cHJpdi0+aW9fYWRkciArIElDUF9NVUxUSV9EQUNfQ1NSKTsKIAotCQkJLy8gRGVsYXkgdG8gYWxsb3cgREFDIHRpbWUgdG8gcmVjb3ZlcgorCQkJLyogIERlbGF5IHRvIGFsbG93IERBQyB0aW1lIHRvIHJlY292ZXIgKi8KIAkJCWNvbWVkaV91ZGVsYXkoMSk7CiAJCX0KLQkvLyBEaWdpdGFsIG91dHB1dHMgdG8gMAorCS8qICBEaWdpdGFsIG91dHB1dHMgdG8gMCAqLwogCXdyaXRldygwLCBkZXZwcml2LT5pb19hZGRyICsgSUNQX01VTFRJX0RPKTsKIAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwpAQCAtODYzLDE2ICs4NjMsMTYgQEAKIAkJZGV2aWNlLgogCiAJUGFyYW1ldGVyczoKLQkJY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCi0JCWNvbWVkaV9kZXZjb25maWcgKml0CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2UgY29uZmlndXJhdGlvbgorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCisJCXN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdAlQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIGNvbmZpZ3VyYXRpb24KIAogCVJldHVybnM6aW50CTAgPSBzdWNjZXNzCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLXN0YXRpYyBpbnQgaWNwX211bHRpX2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpCitzdGF0aWMgaW50IGljcF9tdWx0aV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJaW50IHJldCwgc3ViZGV2LCBuX3N1YmRldmljZXM7CiAJdW5zaWduZWQgaW50IGlycTsKIAlzdHJ1Y3QgcGNpbHN0X3N0cnVjdCAqY2FyZCA9IE5VTEw7CkBAIC04ODEsMTEgKzg4MSwxMiBAQAogCiAJcHJpbnRrKCJpY3BfbXVsdGkgRURCRzogQkdOOiBpY3BfbXVsdGlfYXR0YWNoKC4uLilcbiIpOwogCi0JLy8gQWxvY2F0ZSBwcml2YXRlIGRhdGEgc3RvcmFnZSBzcGFjZQotCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihpY3BfbXVsdGlfcHJpdmF0ZSkpKSA8IDApCisJLyogIEFsb2NhdGUgcHJpdmF0ZSBkYXRhIHN0b3JhZ2Ugc3BhY2UgKi8KKwlyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBpY3BfbXVsdGlfcHJpdmF0ZSkpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JLy8gSW5pdGlhbGlzZSBsaXN0IG9mIFBDSSBjYXJkcyBpbiBzeXN0ZW0sIGlmIG5vdCBhbHJlYWR5IGRvbmUgc28KKwkvKiAgSW5pdGlhbGlzZSBsaXN0IG9mIFBDSSBjYXJkcyBpbiBzeXN0ZW0sIGlmIG5vdCBhbHJlYWR5IGRvbmUgc28gKi8KIAlpZiAocGNpX2xpc3RfYnVpbGRlZCsrID09IDApIHsKIAkJcGNpX2NhcmRfbGlzdF9pbml0KFBDSV9WRU5ET1JfSURfSUNQLAogI2lmZGVmIElDUF9NVUxUSV9FWFRERUJVRwpAQCAtODk5LDkgKzkwMCwxMSBAQAogCXByaW50aygiQW5uZSdzIGNvbWVkaSVkOiBpY3BfbXVsdGk6IGJvYXJkPSVzIiwgZGV2LT5taW5vciwKIAkJdGhpc19ib2FyZC0+bmFtZSk7CiAKLQlpZiAoKGNhcmQgPSBzZWxlY3RfYW5kX2FsbG9jX3BjaV9jYXJkKFBDSV9WRU5ET1JfSURfSUNQLAotCQkJCXRoaXNfYm9hcmQtPmRldmljZV9pZCwgaXQtPm9wdGlvbnNbMF0sCi0JCQkJaXQtPm9wdGlvbnNbMV0pKSA9PSBOVUxMKQorCWNhcmQgPSBzZWxlY3RfYW5kX2FsbG9jX3BjaV9jYXJkKFBDSV9WRU5ET1JfSURfSUNQLAorCQkJCQkgdGhpc19ib2FyZC0+ZGV2aWNlX2lkLCBpdC0+b3B0aW9uc1swXSwKKwkJCQkJIGl0LT5vcHRpb25zWzFdKTsKKworCWlmIChjYXJkID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwogCiAJZGV2cHJpdi0+Y2FyZCA9IGNhcmQ7CkBAIC05NDMsOSArOTQ2LDkgQEAKIAlpZiAodGhpc19ib2FyZC0+bl9jdHJzKQogCQluX3N1YmRldmljZXMrKzsKIAotCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkgeworCXJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldmljZXMpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwotCX0KIAogCWljcF9tdWx0aV9yZXNldChkZXYpOwogCkBAIC0xMDU1LDEzICsxMDU4LDEzIEBACiAJCWRldmljZS4KIAogCVBhcmFtZXRlcnM6Ci0JCWNvbWVkaV9kZXZpY2UgKmRldglQb2ludGVyIHRvIGN1cnJlbnQgZGV2aWNlIHN0cnVjdHVyZQorCQlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2CVBvaW50ZXIgdG8gY3VycmVudCBkZXZpY2Ugc3RydWN0dXJlCiAKIAlSZXR1cm5zOmludAkwID0gc3VjY2VzcwogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGljcF9tdWx0aV9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgaWNwX211bHRpX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCiAJaWYgKGRldi0+cHJpdmF0ZSkKQEAgLTEwNzcsOSArMTA4MCw4IEBACiAJaWYgKGRldi0+cHJpdmF0ZSAmJiBkZXZwcml2LT5jYXJkKQogCQlwY2lfY2FyZF9mcmVlKGRldnByaXYtPmNhcmQpOwogCi0JaWYgKC0tcGNpX2xpc3RfYnVpbGRlZCA9PSAwKSB7CisJaWYgKC0tcGNpX2xpc3RfYnVpbGRlZCA9PSAwKQogCQlwY2lfY2FyZF9saXN0X2NsZWFudXAoUENJX1ZFTkRPUl9JRF9JQ1ApOwotCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ljcF9tdWx0aS5oCmluZGV4IDZkZjRhOGQuLjIxZDg0NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9pY3BfbXVsdGkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvaWNwX211bHRpLmgKQEAgLTI4LDcgKzI4LDggQEAKIAl1bnNpZ25lZCBpbnQgaXJxOwogfTsKIAotc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmlub3ZhX2RldmljZXM7CS8vIHB0ciB0byByb290IGxpc3Qgb2YgYWxsIElub3ZhIGRldmljZXMKK3N0cnVjdCBwY2lsc3Rfc3RydWN0ICppbm92YV9kZXZpY2VzOworLyogcHRyIHRvIHJvb3QgbGlzdCBvZiBhbGwgSW5vdmEgZGV2aWNlcyAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTUwLDE0ICsxNTEsMTQgQEAKIAkJCSYmIChpbm92YS0+cGNpX3Nsb3QgPT0gcGNpX3Nsb3QpKSB7CiAJCQlpZiAoIShpbm92YS0+dXNlZCkpIHsKIAkJCQkqY2FyZCA9IGlub3ZhOwotCQkJCXJldHVybiAwOwkvLyBvaywgY2FyZCBpcyBmb3VuZAorCQkJCXJldHVybiAwOwkvKiBvaywgY2FyZCBpcyBmb3VuZCAqLwogCQkJfSBlbHNlIHsKLQkJCQlyZXR1cm4gMjsJLy8gY2FyZCBleGlzdCBidXQgaXMgdXNlZAorCQkJCXJldHVybiAyOwkvKiBjYXJkIGV4aXN0IGJ1dCBpcyB1c2VkICovCiAJCQl9CiAJCX0KIAl9CiAKLQlyZXR1cm4gMTsJCS8vIG5vIGNhcmQgZm91bmQKKwlyZXR1cm4gMTsJCS8qIG5vIGNhcmQgZm91bmQgKi8KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNDMsOSArMjQ0LDEwIEBACiAJc3RydWN0IHBjaWxzdF9zdHJ1Y3QgKmNhcmQ7CiAJaW50IGVycjsKIAotCWlmICgocGNpX2J1cyA8IDEpICYgKHBjaV9zbG90IDwgMSkpIHsJLy8gdXNlIGF1dG9kZXRlY3Rpb24KLQkJaWYgKChjYXJkID0gZmluZF9mcmVlX3BjaV9jYXJkX2J5X2RldmljZSh2ZW5kb3JfaWQsCi0JCQkJCWRldmljZV9pZCkpID09IE5VTEwpIHsKKwlpZiAoKHBjaV9idXMgPCAxKSAmIChwY2lfc2xvdCA8IDEpKSB7CS8qIHVzZSBhdXRvZGV0ZWN0aW9uICovCisKKwkJY2FyZCA9IGZpbmRfZnJlZV9wY2lfY2FyZF9ieV9kZXZpY2UodmVuZG9yX2lkLCBkZXZpY2VfaWQpOworCQlpZiAoY2FyZCA9PSBOVUxMKSB7CiAJCQlydF9wcmludGsoIiAtIFVudXNlZCBjYXJkIG5vdCBmb3VuZCBpbiBzeXN0ZW0hXG4iKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC0yNjUsNyArMjY3LDggQEAKIAkJfQogCX0KIAotCWlmICgoZXJyID0gcGNpX2NhcmRfYWxsb2MoY2FyZCkpICE9IDApIHsKKwllcnIgPSBwY2lfY2FyZF9hbGxvYyhjYXJkKTsKKwlpZiAoZXJyICE9IDApIHsKIAkJaWYgKGVyciA+IDApCiAJCQlydF9wcmludGsoIiAtIENhbid0IGFsbG9jYXRlIGNhcmQhXG4iKTsKIAkJLyogZWxzZTogZXJyb3IgYWxyZWFkeSBwcmludGVkLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2lpX3BjaTIwa2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9paV9wY2kyMGtjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA4MjViYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9paV9wY2kyMGtjLmMKQEAgLTAsMCArMSw2MTIgQEAKKy8qCisgKgljb21lZGkvZHJpdmVycy9paV9wY2kyMGtjLmMKKyAqCURyaXZlciBmb3IgSW50ZWxsaWdlbnQgSW5zdHJ1bWVudHMgUENJLTIwMDAxQyBjYXJyaWVyIGJvYXJkCisgKglhbmQgbW9kdWxlcy4KKyAqCisgKglDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEtlbXBmIDxrZW1wZkBtYXRzY2kudW5pLXNiLmRlPgorICoJd2l0aCBzdWdnZXN0aW9ucyBmcm9tIERhdmlkIFNjaGxlZWYKKyAqCQkJMTYuMDYuMjAwMAorICoKKyAqCUxpbnV4IGRldmljZSBkcml2ZXIgZm9yIENPTUVESQorICoJSW50ZWxsaWdlbnQgSW5zdHJ1bWVudGF0aW9uCisgKglQQ0ktMjAwMDEgQy0yQSBDYXJyaWVyIEJvYXJkCisgKglQQ0ktMjAzNDEgTS0xQSAxNi1CaXQgYW5hbG9nIGlucHV0IG1vZHVsZQorICoJCQkJLSBkaWZmZXJlbnRpYWwKKyAqCQkJCS0gcmFuZ2UgKC01ViAtICs1VikKKyAqCQkJCS0gMTYgYml0CisgKglQQ0ktMjAwMDYgTS0yIDE2LUJpdCBhbmFsb2cgb3V0cHV0IG1vZHVsZQorICoJCQkJLSByYW5nZXMgKC0xMFYgLSArMTBWKSAoMFYgLSArMTBWKSAoLTVWIC0gKzVWKQorICoJCQkJLSAxNiBiaXQKKyAqCisgKglvbmx5IE9ORSBQQ0ktMjAzNDEgbW9kdWxlIHBvc3NpYmxlCisgKiAJb25seSBPTkUgUENJLTIwMDA2IG1vZHVsZSBwb3NzaWJsZQorICoJbm8gZXh0ZXJuIHRyaWdnZXIgaW1wbGVtZW50ZWQKKyAqCisgKglOT1QgV09SS0lORyAoYnV0IHNvb24pIG9ubHkgNCBvbi1ib2FyZCBkaWZmZXJlbnRpYWwgY2hhbm5lbHMgc3VwcG9ydGVkCisgKglOT1QgV09SS0lORyAoYnV0IHNvb24pIG9ubHkgT05FIGRpLXBvcnQgYW5kIE9ORSBkby1wb3J0IHN1cHBvcnRlZCBpbnN0ZWFkIG9mIDQgZGlnaXRhbCBwb3J0cworICoJZGktcG9ydCA9PSBQb3J0IDAKKyAqCWRvLXBvcnQgPT0gUG9ydCAxCisgKgorICoJVGhlIHN0YXRlIG9mIHRoaXMgZHJpdmVyIGlzIG9ubHkgYSBzdGFydGluZyBwb2ludCBmb3IgYSBjb21wbGV0ZQorICoJQ09NRURJLWRyaXZlci4gVGhlIGZpbmFsIGRyaXZlciBzaG91bGQgc3VwcG9ydCBhbGwgZmVhdHVyZXMgb2YgdGhlCisgKgljYXJyaWVyIGJvYXJkIGFuZCBtb2R1bGVzLgorICoKKyAqCVRoZSB0ZXN0IGNvbmZpZ3VyYXRpb246CisgKgorICoJa2VybmVsIDIuMi4xNCB3aXRoIFJUQUkgdjEuMiAgYW5kIHBhdGNoLTIuMi4xNHJ0aGFsMgorICoJQ09NRURJIDAuNy40NQorICoJQ09NRURJTElCIDAuNy45CisgKgorICovCisvKgorRHJpdmVyOiBpaV9wY2kyMGtjCitEZXNjcmlwdGlvbjogSW50ZWxsaWdlbnQgSW5zdHJ1bWVudHMgUENJLTIwMDAxQyBjYXJyaWVyIGJvYXJkCitBdXRob3I6IE1hcmt1cyBLZW1wZiA8a2VtcGZAbWF0c2NpLnVuaS1zYi5kZT4KK0RldmljZXM6IFtJbnRlbGxpZ2VudCBJbnN0cnVtZW50YXRpb25dIFBDSS0yMDAwMUMgKGlpX3BjaTIwa2MpCitTdGF0dXM6IHdvcmtzCisKK1N1cHBvcnRzIHRoZSBQQ0ktMjAwMDEgQy0yYSBDYXJyaWVyIGJvYXJkLCBhbmQgY291bGQgcHJvYmFibHkgc3VwcG9ydAordGhlIG90aGVyIGNhcnJpZXIgYm9hcmRzIHdpdGggc21hbGwgbW9kaWZpY2F0aW9ucy4gIE1vZHVsZXMgc3VwcG9ydGVkCithcmU6CisJUENJLTIwMDA2IE0tMiAxNi1iaXQgYW5hbG9nIG91dHB1dCBtb2R1bGUKKwlQQ0ktMjAzNDEgTS0xQSAxNi1iaXQgYW5hbG9nIGlucHV0IG1vZHVsZQorCitPcHRpb25zOgorICAwICAgQm9hcmQgYmFzZSBhZGRyZXNzCisgIDEgICBJUlEKKyAgMiAgIGZpcnN0IG9wdGlvbiBmb3IgbW9kdWxlIDEKKyAgMyAgIHNlY29uZCBvcHRpb24gZm9yIG1vZHVsZSAxCisgIDQgICBmaXJzdCBvcHRpb24gZm9yIG1vZHVsZSAyCisgIDUgICBzZWNvbmQgb3B0aW9uIGZvciBtb2R1bGUgMgorICA2ICAgZmlyc3Qgb3B0aW9uIGZvciBtb2R1bGUgMworICA3ICAgc2Vjb25kIG9wdGlvbiBmb3IgbW9kdWxlIDMKKworb3B0aW9ucyBmb3IgUENJLTIwMDA2TToKKyAgZmlyc3Q6ICAgQW5hbG9nIG91dHB1dCBjaGFubmVsIDAgcmFuZ2UgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgIDAgIGJpcG9sYXIgMTAgICgtMTBWIC0tICsxMFYpCisgICAgICAgICAgICAgMSAgdW5pcG9sYXIgMTAgICgwViAtLSArMTBWKQorICAgICAgICAgICAgIDIgIGJpcG9sYXIgNSAgKC01ViAtLSA1VikKKyAgc2Vjb25kOiAgQW5hbG9nIG91dHB1dCBjaGFubmVsIDEgcmFuZ2UgY29uZmlndXJhdGlvbgorCitvcHRpb25zIGZvciBQQ0ktMjAzNDFNOgorICBmaXJzdDogICBBbmFsb2cgaW5wdXQgZ2FpbiBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgMCAgMQorICAgICAgICAgICAgIDEgIDEwCisgICAgICAgICAgICAgMiAgMTAwCisgICAgICAgICAgICAgMyAgMjAwCisqLworCisvKiBYWFggbmVlZHMgdG8gdXNlIGlvcmVtYXAoKSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDIuNCBrZXJuZWxzLiAgU2hvdWxkIGFsc28KKyAqIGNoZWNrX21lbV9yZWdpb24oKSBldGMuIC0gZm1oZXNzICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2RlZmluZSBQQ0kyMDAwMF9JRAkJCTB4MWQKKyNkZWZpbmUgUENJMjAzNDFfSUQgICAgCQkJMHg3NworI2RlZmluZSBQQ0kyMDAwNl9JRCAgICAgIAkJMHhlMworI2RlZmluZSBQQ0kyMHh4eF9FTVBUWV9JRAkJMHhmZgorCisjZGVmaW5lIFBDSTIwMDAwX09GRlNFVCAJCTB4MTAwCisjZGVmaW5lIFBDSTIwMDAwX01PRFVMRVMJCTMKKworI2RlZmluZSBQQ0kyMDAwMF9ESU9fMAkJCTB4ODAKKyNkZWZpbmUgUENJMjAwMDBfRElPXzEJCQkweDgxCisjZGVmaW5lIFBDSTIwMDAwX0RJT18yCQkJMHhjMAorI2RlZmluZSBQQ0kyMDAwMF9ESU9fMwkJCTB4YzEKKyNkZWZpbmUgUENJMjAwMDBfRElPX0NPTlRST0xfMDEJCTB4ODMJLyogcG9ydCAwLCAxIGNvbnRyb2wgKi8KKyNkZWZpbmUgUENJMjAwMDBfRElPX0NPTlRST0xfMjMJCTB4YzMJLyogcG9ydCAyLCAzIGNvbnRyb2wgKi8KKyNkZWZpbmUgUENJMjAwMDBfRElPX0JVRkZFUgkJMHg4MgkvKiBidWZmZXIgZGlyZWN0aW9uIGFuZCBlbmFibGUgKi8KKyNkZWZpbmUgUENJMjAwMDBfRElPX0VPQwkJMHhlZgkvKiBldmVuIHBvcnQsIGNvbnRyb2wgb3V0cHV0ICovCisjZGVmaW5lIFBDSTIwMDAwX0RJT19PT0MJCTB4ZmQJLyogb2RkIHBvcnQsIGNvbnRyb2wgb3V0cHV0ICovCisjZGVmaW5lIFBDSTIwMDAwX0RJT19FSUMJCTB4OTAJLyogZXZlbiBwb3J0LCBjb250cm9sIGlucHV0ICovCisjZGVmaW5lIFBDSTIwMDAwX0RJT19PSUMJCTB4ODIJLyogb2RkIHBvcnQsIGNvbnRyb2wgaW5wdXQgKi8KKyNkZWZpbmUgRElPX0NBTkQJCQkweDEyCS8qIGFuZCBiaXQgMSwgYml0IDQgb2YgY29udHJvbCAqLworI2RlZmluZSBESU9fQkUJCQkJMHgwMQkvKiBidWZmZXI6IHBvcnQgZW5hYmxlICovCisjZGVmaW5lIERJT19CTwkJCQkweDA0CS8qIGJ1ZmZlcjogb3V0cHV0ICovCisjZGVmaW5lIERJT19CSQkJCQkweDA1CS8qIGJ1ZmZlcjogaW5wdXQgKi8KKyNkZWZpbmUgRElPX1BTXzAJCQkweDAwCS8qIGJ1ZmZlcjogcG9ydCBzaGlmdCAwICovCisjZGVmaW5lIERJT19QU18xCQkJMHgwMQkvKiBidWZmZXI6IHBvcnQgc2hpZnQgMSAqLworI2RlZmluZSBESU9fUFNfMgkJCTB4MDQJLyogYnVmZmVyOiBwb3J0IHNoaWZ0IDIgKi8KKyNkZWZpbmUgRElPX1BTXzMJCQkweDA1CS8qIGJ1ZmZlcjogcG9ydCBzaGlmdCAzICovCisKKyNkZWZpbmUgUENJMjAwMDZfTENIQU4wCQkJMHgwZAorI2RlZmluZSBQQ0kyMDAwNl9TVFJPQkUwCQkweDBiCisjZGVmaW5lIFBDSTIwMDA2X0xDSEFOMQkJCTB4MTUKKyNkZWZpbmUgUENJMjAwMDZfU1RST0JFMQkJMHgxMworCisjZGVmaW5lIFBDSTIwMzQxX0lOSVQJCQkweDA0CisjZGVmaW5lIFBDSTIwMzQxX1JFUE1PREUJCTB4MDAJLyogc2luZ2xlIHNob3QgbW9kZSAqLworI2RlZmluZSBQQ0kyMDM0MV9QQUNFUgkJCTB4MDAJLyogSGFyZHdhcmUgUGFjZXIgZGlzYWJsZWQgKi8KKyNkZWZpbmUgUENJMjAzNDFfQ0hBTl9OUgkJMHgwNAkvKiBudW1iZXIgb2YgaW5wdXQgY2hhbm5lbHMgKi8KKyNkZWZpbmUgUENJMjAzNDFfQ09ORklHX1JFRwkJMHgxMAorI2RlZmluZSBQQ0kyMDM0MV9NT0RfU1RBVFVTCQkweDAxCisjZGVmaW5lIFBDSTIwMzQxX09QVF9SRUcJCTB4MTEKKyNkZWZpbmUgUENJMjAzNDFfU0VUX1RJTUVfUkVHCQkweDE1CisjZGVmaW5lIFBDSTIwMzQxX0xDSEFOX0FERFJfUkVHCQkweDEzCisjZGVmaW5lIFBDSTIwMzQxX0NIQU5fTElTVAkJMHg4MAorI2RlZmluZSBQQ0kyMDM0MV9DQ19SRVNFVAkJMHgxYgorI2RlZmluZSBQQ0kyMDM0MV9DSEFOX1JFU0VUCQkweDE5CisjZGVmaW5lIFBDSTIwMzQxX1NPRlRfUEFDRVIJCTB4MDQKKyNkZWZpbmUgUENJMjAzNDFfU1RBVFVTX1JFRwkJMHgxMgorI2RlZmluZSBQQ0kyMDM0MV9MREFUQQkJCTB4MDIKKyNkZWZpbmUgUENJMjAzNDFfREFJU1lfQ0hBSU4JCTB4MjAJLyogT24tYm9hcmQgaW5wdXRzIG9ubHkgKi8KKyNkZWZpbmUgUENJMjAzNDFfTVVYCQkJMHgwNAkvKiBFbmFibGUgb24tYm9hcmQgTVVYICovCisjZGVmaW5lIFBDSTIwMzQxX1NDQU5MSVNUCQkweDgwCS8qIENoYW5uZWwvR2FpbiBTY2FuIExpc3QgKi8KKwordW5pb24gcGNpMjB4eHhfc3ViZGV2X3ByaXZhdGUgeworCXZvaWQgKmlvYmFzZTsKKwlzdHJ1Y3QgeworCQl2b2lkICppb2Jhc2U7CisJCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphb19yYW5nZV9saXN0WzJdOwkvKiByYW5nZSBvZiBjaGFubmVscyBvZiBhbyBtb2R1bGUgKi8KKwkJdW5zaWduZWQgaW50IGxhc3RfZGF0YVsyXTsKKwl9IHBjaTIwMDA2OworCXN0cnVjdCB7CisJCXZvaWQgKmlvYmFzZTsKKwkJaW50IHRpbWViYXNlOworCQlpbnQgc2V0dGxpbmdfdGltZTsKKwkJaW50IGFpX2dhaW47CisJfSBwY2kyMDM0MTsKK307CisKK3N0cnVjdCBwY2kyMHh4eF9wcml2YXRlIHsKKworCXZvaWQgKmlvYWRkcjsKKwl1bmlvbiBwY2kyMHh4eF9zdWJkZXZfcHJpdmF0ZSBzdWJkZXZfcHJpdmF0ZVtQQ0kyMDAwMF9NT0RVTEVTXTsKK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjaTIweHh4X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIENIQU4gKENSX0NIQU4oaXQtPmNoYW5saXN0WzBdKSkKKworc3RhdGljIGludCBwY2kyMHh4eF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2kyMHh4eF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjaTIweHh4ID0geworICAgICAgZHJpdmVyX25hbWU6ImlpX3BjaTIwa2MiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjaTIweHh4X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2kyMHh4eF9kZXRhY2gsCit9OworCitzdGF0aWMgaW50IHBjaTIwMDA2X2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlpbnQgb3B0MCwgaW50IG9wdDEpOworc3RhdGljIGludCBwY2kyMDM0MV9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50IG9wdDAsIGludCBvcHQxKTsKK3N0YXRpYyBpbnQgcGNpMjB4eHhfZGlvX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisKKy8qCisgIG9wdGlvbnNbMF0JQm9hcmQgYmFzZSBhZGRyZXNzCisgIG9wdGlvbnNbMV0JSVJRCisgIG9wdGlvbnNbMl0JZmlyc3Qgb3B0aW9uIGZvciBtb2R1bGUgMQorICBvcHRpb25zWzNdCXNlY29uZCBvcHRpb24gZm9yIG1vZHVsZSAxCisgIG9wdGlvbnNbNF0JZmlyc3Qgb3B0aW9uIGZvciBtb2R1bGUgMgorICBvcHRpb25zWzVdCXNlY29uZCBvcHRpb24gZm9yIG1vZHVsZSAyCisgIG9wdGlvbnNbNl0JZmlyc3Qgb3B0aW9uIGZvciBtb2R1bGUgMworICBvcHRpb25zWzddCXNlY29uZCBvcHRpb24gZm9yIG1vZHVsZSAzCisKKyAgb3B0aW9ucyBmb3IgUENJLTIwMzQxTToKKyAgZmlyc3QJCUFuYWxvZyBpbnB1dCBnYWluIGNvbmZpZ3VyYXRpb24KKwkJMCA9PSAxCisJCTEgPT0gMTAKKwkJMiA9PSAxMDAKKwkJMyA9PSAyMDAKKworICBvcHRpb25zIGZvciBQQ0ktMjAwMDZNOgorICBmaXJzdAkJQW5hbG9nIG91dHB1dCBjaGFubmVsIDAgcmFuZ2UgY29uZmlndXJhdGlvbgorCQkwID09IGJpcG9sYXIgMTAgICgtMTBWIC0tICsxMFYpCisJCTEgPT0gdW5pcG9sYXIgMTBWICAoMFYgLS0gKzEwVikKKwkJMiA9PSBiaXBvbGFyIDVWICAoLTVWIC0tICs1VikKKyAgc2Vjb25kCUFuYWxvZyBvdXRwdXQgY2hhbm5lbCAxIHJhbmdlIGNvbmZpZ3VyYXRpb24KKwkJMCA9PSBiaXBvbGFyIDEwICAoLTEwViAtLSArMTBWKQorCQkxID09IHVuaXBvbGFyIDEwViAgKDBWIC0tICsxMFYpCisJCTIgPT0gYmlwb2xhciA1ViAgKC01ViAtLSArNVYpCisqLworc3RhdGljIGludCBwY2kyMHh4eF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJdW5zaWduZWQgY2hhciBpOworCWludCByZXQ7CisJaW50IGlkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuaW9uIHBjaTIweHh4X3N1YmRldl9wcml2YXRlICpzZHA7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxICsgUENJMjAwMDBfTU9EVUxFUykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjaTIweHh4X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2cHJpdi0+aW9hZGRyID0gKHZvaWQgKikodW5zaWduZWQgbG9uZylpdC0+b3B0aW9uc1swXTsKKwlkZXYtPmJvYXJkX25hbWUgPSAicGNpMjBrYyI7CisKKwkvKiBDaGVjayBQQ0ktMjAwMDEgQy0yQSBDYXJyaWVyIEJvYXJkIElEICovCisJaWYgKChyZWFkYihkZXZwcml2LT5pb2FkZHIpICYgUENJMjAwMDBfSUQpICE9IFBDSTIwMDAwX0lEKSB7CisJCXByaW50aygiY29tZWRpJWQ6IGlpX3BjaTIwa2MiLCBkZXYtPm1pbm9yKTsKKwkJcHJpbnRrKCIgUENJLTIwMDAxIEMtMkEgQ2FycmllciBCb2FyZCBhdCBiYXNlPTB4JXAgbm90IGZvdW5kICFcbiIsIGRldnByaXYtPmlvYWRkcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlwcmludGsoImNvbWVkaSVkOlxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKCJpaV9wY2kyMGtjOiBQQ0ktMjAwMDEgQy0yQSBhdCBiYXNlPTB4JXBcbiIsIGRldnByaXYtPmlvYWRkcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJMjAwMDBfTU9EVUxFUzsgaSsrKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBpOworCQlpZCA9IHJlYWRiKGRldnByaXYtPmlvYWRkciArIChpICsgMSkgKiBQQ0kyMDAwMF9PRkZTRVQpOworCQlzLT5wcml2YXRlID0gZGV2cHJpdi0+c3ViZGV2X3ByaXZhdGUgKyBpOworCQlzZHAgPSBzLT5wcml2YXRlOworCQlzd2l0Y2ggKGlkKSB7CisJCWNhc2UgUENJMjAwMDZfSUQ6CisJCQlzZHAtPnBjaTIwMDA2LmlvYmFzZSA9CisJCQkJZGV2cHJpdi0+aW9hZGRyICsgKGkgKyAxKSAqIFBDSTIwMDAwX09GRlNFVDsKKwkJCXBjaTIwMDA2X2luaXQoZGV2LCBzLCBpdC0+b3B0aW9uc1syICogaSArIDJdLAorCQkJCWl0LT5vcHRpb25zWzIgKiBpICsgM10pOworCQkJcHJpbnRrKCJjb21lZGklZDogaWlfcGNpMjBrYyIsIGRldi0+bWlub3IpOworCQkJcHJpbnRrKCIgUENJLTIwMDA2IG1vZHVsZSBpbiBzbG90ICVkIFxuIiwgaSArIDEpOworCQkJYnJlYWs7CisJCWNhc2UgUENJMjAzNDFfSUQ6CisJCQlzZHAtPnBjaTIwMzQxLmlvYmFzZSA9CisJCQkJZGV2cHJpdi0+aW9hZGRyICsgKGkgKyAxKSAqIFBDSTIwMDAwX09GRlNFVDsKKwkJCXBjaTIwMzQxX2luaXQoZGV2LCBzLCBpdC0+b3B0aW9uc1syICogaSArIDJdLAorCQkJCWl0LT5vcHRpb25zWzIgKiBpICsgM10pOworCQkJcHJpbnRrKCJjb21lZGklZDogaWlfcGNpMjBrYyIsIGRldi0+bWlub3IpOworCQkJcHJpbnRrKCIgUENJLTIwMzQxIG1vZHVsZSBpbiBzbG90ICVkIFxuIiwgaSArIDEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoImlpX3BjaTIwa2M6IHVua25vd24gbW9kdWxlIGNvZGUgMHglMDJ4IGluIHNsb3QgJWQ6IG1vZHVsZSBkaXNhYmxlZFxuIiwgaWQsIGkpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgUENJMjB4eHhfRU1QVFlfSUQ6CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBpbml0aWFsaXplIHN0cnVjdCBwY2kyMHh4eF9wcml2YXRlICovCisJcGNpMjB4eHhfZGlvX2luaXQoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBQQ0kyMDAwMF9NT0RVTEVTKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBjaTIweHh4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBwY2kyMHh4eDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCXJldHVybiAwOworfQorCisvKiBwY2kyMDAwNm0gKi8KKworc3RhdGljIGludCBwY2kyMDAwNl9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNpMjAwMDZfaW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnBjaTIwMDA2X3JhbmdlX2xpc3RbXSA9IHsKKwkmcmFuZ2VfYmlwb2xhcjEwLAorCSZyYW5nZV91bmlwb2xhcjEwLAorCSZyYW5nZV9iaXBvbGFyNSwKK307CisKK3N0YXRpYyBpbnQgcGNpMjAwMDZfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCBvcHQwLCBpbnQgb3B0MSkKK3sKKwl1bmlvbiBwY2kyMHh4eF9zdWJkZXZfcHJpdmF0ZSAqc2RwID0gcy0+cHJpdmF0ZTsKKworCWlmIChvcHQwIDwgMCB8fCBvcHQwID4gMikKKwkJb3B0MCA9IDA7CisJaWYgKG9wdDEgPCAwIHx8IG9wdDEgPiAyKQorCQlvcHQxID0gMDsKKworCXNkcC0+cGNpMjAwMDYuYW9fcmFuZ2VfbGlzdFswXSA9IHBjaTIwMDA2X3JhbmdlX2xpc3Rbb3B0MF07CisJc2RwLT5wY2kyMDAwNi5hb19yYW5nZV9saXN0WzFdID0gcGNpMjAwMDZfcmFuZ2VfbGlzdFtvcHQxXTsKKworCS8qIGFvIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAyOworCXMtPmluc25fcmVhZCA9IHBjaTIwMDA2X2luc25fcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gcGNpMjAwMDZfaW5zbl93cml0ZTsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBzZHAtPnBjaTIwMDA2LmFvX3JhbmdlX2xpc3Q7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjAwMDZfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bmlvbiBwY2kyMHh4eF9zdWJkZXZfcHJpdmF0ZSAqc2RwID0gcy0+cHJpdmF0ZTsKKworCWRhdGFbMF0gPSBzZHAtPnBjaTIwMDA2Lmxhc3RfZGF0YVtDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwY2kyMDAwNl9pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bmlvbiBwY2kyMHh4eF9zdWJkZXZfcHJpdmF0ZSAqc2RwID0gcy0+cHJpdmF0ZTsKKwlpbnQgaGksIGxvOworCXVuc2lnbmVkIGludCBib2FyZGRhdGE7CisKKwlzZHAtPnBjaTIwMDA2Lmxhc3RfZGF0YVtDUl9DSEFOKGluc24tPmNoYW5zcGVjKV0gPSBkYXRhWzBdOworCWJvYXJkZGF0YSA9ICgoKHVuc2lnbmVkIGludClkYXRhWzBdICsgMHg4MDAwKSAmIDB4ZmZmZik7CS8qIGNvbWVkaS1kYXRhIC0+IGJvYXJkLWRhdGEgKi8KKwlsbyA9IChib2FyZGRhdGEgJiAweGZmKTsKKwloaSA9ICgoYm9hcmRkYXRhID4+IDgpICYgMHhmZik7CisKKwlzd2l0Y2ggKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKSB7CisJY2FzZSAwOgorCQl3cml0ZWIobG8sIHNkcC0+aW9iYXNlICsgUENJMjAwMDZfTENIQU4wKTsKKwkJd3JpdGViKGhpLCBzZHAtPmlvYmFzZSArIFBDSTIwMDA2X0xDSEFOMCArIDEpOworCQl3cml0ZWIoMHgwMCwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDAwNl9TVFJPQkUwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl3cml0ZWIobG8sIHNkcC0+aW9iYXNlICsgUENJMjAwMDZfTENIQU4xKTsKKwkJd3JpdGViKGhpLCBzZHAtPmlvYmFzZSArIFBDSTIwMDA2X0xDSEFOMSArIDEpOworCQl3cml0ZWIoMHgwMCwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDAwNl9TVFJPQkUxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKCIgY29tZWRpJWQ6IHBjaTIweHh4OiBhbyBjaGFubmVsIEVycm9yIVxuIiwgZGV2LT5taW5vcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAxOworfQorCisvKiBQQ0kyMDM0MU0gKi8KKworc3RhdGljIGludCBwY2kyMDM0MV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGNvbnN0IGludCBwY2kyMDM0MV90aW1lYmFzZVtdID0geyAweDAwLCAweDAwLCAweDAwLCAweDA0IH07CitzdGF0aWMgY29uc3QgaW50IHBjaTIwMzQxX3NldHRsaW5nX3RpbWVbXSA9IHsgMHg1OCwgMHg1OCwgMHg5MywgMHg5OSB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjBfNSA9IHsgMSwge0JJUF9SQU5HRSgwLjUpfSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXIwXzA1ID0geyAxLCB7QklQX1JBTkdFKDAuMDUpfSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2JpcG9sYXIwXzAyNSA9IHsgMSwge0JJUF9SQU5HRSgwLjAyNSl9IH07CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgcGNpMjAzNDFfcmFuZ2VzW10gPSB7CisJJnJhbmdlX2JpcG9sYXI1LAorCSZyYW5nZV9iaXBvbGFyMF81LAorCSZyYW5nZV9iaXBvbGFyMF8wNSwKKwkmcmFuZ2VfYmlwb2xhcjBfMDI1LAorfTsKKworc3RhdGljIGludCBwY2kyMDM0MV9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50IG9wdDAsIGludCBvcHQxKQoreworCXVuaW9uIHBjaTIweHh4X3N1YmRldl9wcml2YXRlICpzZHAgPSBzLT5wcml2YXRlOworCWludCBvcHRpb247CisKKwkvKiBvcHRpb25zIGhhbmRsaW5nICovCisJaWYgKG9wdDAgPCAwIHx8IG9wdDAgPiAzKQorCQlvcHQwID0gMDsKKwlzZHAtPnBjaTIwMzQxLnRpbWViYXNlID0gcGNpMjAzNDFfdGltZWJhc2Vbb3B0MF07CisJc2RwLT5wY2kyMDM0MS5zZXR0bGluZ190aW1lID0gcGNpMjAzNDFfc2V0dGxpbmdfdGltZVtvcHQwXTsKKworCS8qIGFpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gUENJMjAzNDFfQ0hBTl9OUjsKKwlzLT5sZW5fY2hhbmxpc3QgPSBQQ0kyMDM0MV9TQ0FOTElTVDsKKwlzLT5pbnNuX3JlYWQgPSBwY2kyMDM0MV9pbnNuX3JlYWQ7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwlzLT5yYW5nZV90YWJsZSA9IHBjaTIwMzQxX3Jhbmdlc1tvcHQwXTsKKworCW9wdGlvbiA9IHNkcC0+cGNpMjAzNDEudGltZWJhc2UgfCBQQ0kyMDM0MV9SRVBNT0RFOwkvKiBkZXBlbmRzIG9uIGdhaW4sIHRyaWdnZXIsIHJlcGV0aXRpb24gbW9kZSAqLworCisJd3JpdGViKFBDSTIwMzQxX0lOSVQsIHNkcC0+aW9iYXNlICsgUENJMjAzNDFfQ09ORklHX1JFRyk7CS8qIGluaXRpYWxpemUgTW9kdWxlICovCisJd3JpdGViKFBDSTIwMzQxX1BBQ0VSLCBzZHAtPmlvYmFzZSArIFBDSTIwMzQxX01PRF9TVEFUVVMpOwkvKiBzZXQgUGFjZXIgKi8KKwl3cml0ZWIob3B0aW9uLCBzZHAtPmlvYmFzZSArIFBDSTIwMzQxX09QVF9SRUcpOwkvKiBvcHRpb24gcmVnaXN0ZXIgKi8KKwl3cml0ZWIoc2RwLT5wY2kyMDM0MS5zZXR0bGluZ190aW1lLCBzZHAtPmlvYmFzZSArIFBDSTIwMzQxX1NFVF9USU1FX1JFRyk7CS8qIHNldHRsaW5nIHRpbWUgY291bnRlciAqLworCS8qIHRyaWdnZXIgbm90IGltcGxlbWVudGVkICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjAzNDFfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKyAgICAgICAgdW5pb24gcGNpMjB4eHhfc3ViZGV2X3ByaXZhdGUgKnNkcCA9IHMtPnByaXZhdGU7CisJdW5zaWduZWQgaW50IGkgPSAwLCBqID0gMDsKKwlpbnQgbG8sIGhpOworCXVuc2lnbmVkIGNoYXIgZW9jOwkvKiBlbmQgb2YgY29udmVyc2lvbiAqLworCXVuc2lnbmVkIGludCBjbGI7CS8qIGNoYW5uZWwgbGlzdCBieXRlICovCisJdW5zaWduZWQgaW50IGJvYXJkZGF0YTsKKworCXdyaXRlYigxLCBzZHAtPmlvYmFzZSArIFBDSTIwMzQxX0xDSEFOX0FERFJfUkVHKTsJLyogd3JpdGUgbnVtYmVyIG9mIGlucHV0IGNoYW5uZWxzICovCisJY2xiID0gUENJMjAzNDFfREFJU1lfQ0hBSU4gfCBQQ0kyMDM0MV9NVVggfCAoc2RwLT5wY2kyMDM0MS5haV9nYWluIDw8IDMpCisJCXwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJd3JpdGViKGNsYiwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9DSEFOX0xJU1QpOworCXdyaXRlYigweDAwLCBzZHAtPmlvYmFzZSArIFBDSTIwMzQxX0NDX1JFU0VUKTsJLyogcmVzZXQgc2V0dGxpbmcgdGltZSBjb3VudGVyIGFuZCB0cmlnZ2VyIGRlbGF5IGNvdW50ZXIgKi8KKwl3cml0ZWIoMHgwMCwgc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9DSEFOX1JFU0VUKTsKKworCS8qIGdlbmVyYXRlIFBhY2VyICovCisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCS8qIGRhdGEgcG9sbGluZyBpc24ndCB0aGUgbmljaWVzdCB3YXkgdG8gZ2V0IHRoZSBkYXRhLCBJIGtub3csCisJCSAqIGJ1dCB0aGVyZSBhcmUgb25seSA2IGN5Y2xlcyAobWVhbikgYW5kIGl0IGlzIGVhc2llciB0aGFuCisJCSAqIHRoZSB3aG9sZSBpbnRlcnJ1cHQgc3R1ZmYKKwkJICovCisJCWogPSAwOworCQlyZWFkYihzZHAtPmlvYmFzZSArIFBDSTIwMzQxX1NPRlRfUEFDRVIpOwkvKiBnZW5lcmF0ZSBQYWNlciAqLworCQllb2MgPSByZWFkYihzZHAtPmlvYmFzZSArIFBDSTIwMzQxX1NUQVRVU19SRUcpOworCQl3aGlsZSAoKGVvYyA8IDB4ODApICYmIGogPCAxMDApIHsJLyogcG9sbCBJbnRlcnJ1cHQgRmxhZyAqLworCQkJaisrOworCQkJZW9jID0gcmVhZGIoc2RwLT5pb2Jhc2UgKyBQQ0kyMDM0MV9TVEFUVVNfUkVHKTsKKwkJfQorCQlpZiAoaiA+PSAxMDApIHsKKwkJCXByaW50aygiY29tZWRpJWQ6ICBwY2kyMHh4eDogQUkgaW50ZXJydXB0IGNoYW5uZWwgJWkgcG9sbGluZyBleGl0ICFcbiIsIGRldi0+bWlub3IsIGkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJbG8gPSByZWFkYihzZHAtPmlvYmFzZSArIFBDSTIwMzQxX0xEQVRBKTsKKwkJaGkgPSByZWFkYihzZHAtPmlvYmFzZSArIFBDSTIwMzQxX0xEQVRBICsgMSk7CisJCWJvYXJkZGF0YSA9IGxvICsgMHgxMDAgKiBoaTsKKwkJZGF0YVtpXSA9IChzaG9ydCkgKChib2FyZGRhdGEgKyAweDgwMDApICYgMHhmZmZmKTsJLyogYm9hcmQtZGF0YSAtPiBjb21lZGktZGF0YSAqLworCX0KKworCXJldHVybiBpOworfQorCisvKiBuYXRpdmUgRElPICovCisKK3N0YXRpYyB2b2lkIHBjaTIweHh4X2Rpb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IHBjaTIweHh4X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNpMjB4eHhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qIGluaXRpYWxpemUgc3RydWN0IHBjaTIweHh4X3ByaXZhdGUgKi8KK3N0YXRpYyBpbnQgcGNpMjB4eHhfZGlvX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDMyOworCXMtPmluc25fYml0cyA9IHBjaTIweHh4X2Rpb19pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBwY2kyMHh4eF9kaW9faW5zbl9jb25maWc7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMzI7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5pb19iaXRzID0gMDsKKworCS8qIGRpZ2l0YWwgSS9PIGxpbmVzIGRlZmF1bHQgdG8gaW5wdXQgb24gYm9hcmQgcmVzZXQuICovCisJcGNpMjB4eHhfZGlvX2NvbmZpZyhkZXYsIHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpMjB4eHhfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbWFzaywgYml0czsKKworCW1hc2sgPSAxIDw8IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmIChtYXNrICYgMHgwMDAwMDBmZikgeworCQliaXRzID0gMHgwMDAwMDBmZjsKKwl9IGVsc2UgaWYgKG1hc2sgJiAweDAwMDBmZjAwKSB7CisJCWJpdHMgPSAweDAwMDBmZjAwOworCX0gZWxzZSBpZiAobWFzayAmIDB4MDBmZjAwMDApIHsKKwkJYml0cyA9IDB4MDBmZjAwMDA7CisJfSBlbHNlIHsKKwkJYml0cyA9IDB4ZmYwMDAwMDA7CisJfQorCWlmIChkYXRhWzBdKSB7CisJCXMtPmlvX2JpdHMgfD0gYml0czsKKwl9IGVsc2UgeworCQlzLT5pb19iaXRzICY9IH5iaXRzOworCX0KKwlwY2kyMHh4eF9kaW9fY29uZmlnKGRldiwgcyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwY2kyMHh4eF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzayA9IGRhdGFbMF07CisKKwlzLT5zdGF0ZSAmPSB+bWFzazsKKwlzLT5zdGF0ZSB8PSAobWFzayAmIGRhdGFbMV0pOworCisJbWFzayAmPSBzLT5pb19iaXRzOworCWlmIChtYXNrICYgMHgwMDAwMDBmZikKKwkJd3JpdGViKChzLT5zdGF0ZSA+PiAwKSAmIDB4ZmYsCisJCQlkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMCk7CisJaWYgKG1hc2sgJiAweDAwMDBmZjAwKQorCQl3cml0ZWIoKHMtPnN0YXRlID4+IDgpICYgMHhmZiwKKwkJCWRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18xKTsKKwlpZiAobWFzayAmIDB4MDBmZjAwMDApCisJCXdyaXRlYigocy0+c3RhdGUgPj4gMTYpICYgMHhmZiwKKwkJCWRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18yKTsKKwlpZiAobWFzayAmIDB4ZmYwMDAwMDApCisJCXdyaXRlYigocy0+c3RhdGUgPj4gMjQpICYgMHhmZiwKKwkJCWRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18zKTsKKworCWRhdGFbMV0gPSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMCk7CisJZGF0YVsxXSB8PSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMSkgPDwgODsKKwlkYXRhWzFdIHw9IHJlYWRiKGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18yKSA8PCAxNjsKKwlkYXRhWzFdIHw9IHJlYWRiKGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18zKSA8PCAyNDsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgdm9pZCBwY2kyMHh4eF9kaW9fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgY2hhciBjb250cm9sXzAxOworCXVuc2lnbmVkIGNoYXIgY29udHJvbF8yMzsKKwl1bnNpZ25lZCBjaGFyIGJ1ZmZlcjsKKworCWNvbnRyb2xfMDEgPSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fQ09OVFJPTF8wMSk7CisJY29udHJvbF8yMyA9IHJlYWRiKGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT19DT05UUk9MXzIzKTsKKwlidWZmZXIgPSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fQlVGRkVSKTsKKworCWlmIChzLT5pb19iaXRzICYgMHgwMDAwMDBmZikgeworCQkvKiBvdXRwdXQgcG9ydCAwICovCisJCWNvbnRyb2xfMDEgJj0gUENJMjAwMDBfRElPX0VPQzsKKwkJYnVmZmVyID0gKGJ1ZmZlciAmICh+KERJT19CRSA8PCBESU9fUFNfMCkpKSB8IChESU9fQk8gPDwKKwkJCURJT19QU18wKTsKKwl9IGVsc2UgeworCQkvKiBpbnB1dCBwb3J0IDAgKi8KKwkJY29udHJvbF8wMSA9IChjb250cm9sXzAxICYgRElPX0NBTkQpIHwgUENJMjAwMDBfRElPX0VJQzsKKwkJYnVmZmVyID0gKGJ1ZmZlciAmICh+KERJT19CSSA8PCBESU9fUFNfMCkpKTsKKwl9CisJaWYgKHMtPmlvX2JpdHMgJiAweDAwMDBmZjAwKSB7CisJCS8qIG91dHB1dCBwb3J0IDEgKi8KKwkJY29udHJvbF8wMSAmPSBQQ0kyMDAwMF9ESU9fT09DOworCQlidWZmZXIgPSAoYnVmZmVyICYgKH4oRElPX0JFIDw8IERJT19QU18xKSkpIHwgKERJT19CTyA8PAorCQkJRElPX1BTXzEpOworCX0gZWxzZSB7CisJCS8qIGlucHV0IHBvcnQgMSAqLworCQljb250cm9sXzAxID0gKGNvbnRyb2xfMDEgJiBESU9fQ0FORCkgfCBQQ0kyMDAwMF9ESU9fT0lDOworCQlidWZmZXIgPSAoYnVmZmVyICYgKH4oRElPX0JJIDw8IERJT19QU18xKSkpOworCX0KKwlpZiAocy0+aW9fYml0cyAmIDB4MDBmZjAwMDApIHsKKwkJLyogb3V0cHV0IHBvcnQgMiAqLworCQljb250cm9sXzIzICY9IFBDSTIwMDAwX0RJT19FT0M7CisJCWJ1ZmZlciA9IChidWZmZXIgJiAofihESU9fQkUgPDwgRElPX1BTXzIpKSkgfCAoRElPX0JPIDw8CisJCQlESU9fUFNfMik7CisJfSBlbHNlIHsKKwkJLyogaW5wdXQgcG9ydCAyICovCisJCWNvbnRyb2xfMjMgPSAoY29udHJvbF8yMyAmIERJT19DQU5EKSB8IFBDSTIwMDAwX0RJT19FSUM7CisJCWJ1ZmZlciA9IChidWZmZXIgJiAofihESU9fQkkgPDwgRElPX1BTXzIpKSk7CisJfQorCWlmIChzLT5pb19iaXRzICYgMHhmZjAwMDAwMCkgeworCQkvKiBvdXRwdXQgcG9ydCAzICovCisJCWNvbnRyb2xfMjMgJj0gUENJMjAwMDBfRElPX09PQzsKKwkJYnVmZmVyID0gKGJ1ZmZlciAmICh+KERJT19CRSA8PCBESU9fUFNfMykpKSB8IChESU9fQk8gPDwKKwkJCURJT19QU18zKTsKKwl9IGVsc2UgeworCQkvKiBpbnB1dCBwb3J0IDMgKi8KKwkJY29udHJvbF8yMyA9IChjb250cm9sXzIzICYgRElPX0NBTkQpIHwgUENJMjAwMDBfRElPX09JQzsKKwkJYnVmZmVyID0gKGJ1ZmZlciAmICh+KERJT19CSSA8PCBESU9fUFNfMykpKTsKKwl9CisJd3JpdGViKGNvbnRyb2xfMDEsIGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT19DT05UUk9MXzAxKTsKKwl3cml0ZWIoY29udHJvbF8yMywgZGV2cHJpdi0+aW9hZGRyICsgUENJMjAwMDBfRElPX0NPTlRST0xfMjMpOworCXdyaXRlYihidWZmZXIsIGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT19CVUZGRVIpOworfQorCisjaWYgMAorc3RhdGljIHZvaWQgcGNpMjB4eHhfZG8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwkvKiBYWFggaWYgdGhlIGNoYW5uZWwgaXMgY29uZmlndXJlZCBmb3IgaW5wdXQsIGRvZXMgdGhpcworCSAgIGRvIGJhZCB0aGluZ3M/ICovCisJLyogWFhYIGl0IHdvdWxkIGJlIGEgZ29vZCBpZGVhIHRvIG9ubHkgdXBkYXRlIHRoZSByZWdpc3RlcnMKKwkgICB0aGF0IF9uZWVkXyB0byBiZSB1cGRhdGVkLiAgVGhpcyByZXF1aXJlcyBjaGFuZ2VzIHRvCisJICAgY29tZWRpLCBob3dldmVyLiAqLworCXdyaXRlYigocy0+c3RhdGUgPj4gMCkgJiAweGZmLCBkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMCk7CisJd3JpdGViKChzLT5zdGF0ZSA+PiA4KSAmIDB4ZmYsIGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18xKTsKKwl3cml0ZWIoKHMtPnN0YXRlID4+IDE2KSAmIDB4ZmYsIGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18yKTsKKwl3cml0ZWIoKHMtPnN0YXRlID4+IDI0KSAmIDB4ZmYsIGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18zKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBwY2kyMHh4eF9kaShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8qIFhYWCBzYW1lIG5vdGUgYXMgYWJvdmUgKi8KKwl1bnNpZ25lZCBpbnQgYml0czsKKworCWJpdHMgPSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMCk7CisJYml0cyB8PSByZWFkYihkZXZwcml2LT5pb2FkZHIgKyBQQ0kyMDAwMF9ESU9fMSkgPDwgODsKKwliaXRzIHw9IHJlYWRiKGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18yKSA8PCAxNjsKKwliaXRzIHw9IHJlYWRiKGRldnByaXYtPmlvYWRkciArIFBDSTIwMDAwX0RJT18zKSA8PCAyNDsKKworCXJldHVybiBiaXRzOworfQorI2VuZGlmCisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNpMjB4eHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjODg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKQEAgLTAsMCArMSw5NzYgQEAKKy8qCisgIGNvbWVkaS9kcml2ZXJzL2pyM19wY2kuYworICBoYXJkd2FyZSBkcml2ZXIgZm9yIEpSMy9QQ0kgZm9yY2Ugc2Vuc29yIGJvYXJkCisKKyAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICBDb3B5cmlnaHQgKEMpIDIwMDcgQW5kZXJzIEJsb21kZWxsIDxhbmRlcnMuYmxvbWRlbGxAY29udHJvbC5sdGguc2U+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjoganIzX3BjaQorRGVzY3JpcHRpb246IEpSMy9QQ0kgZm9yY2Ugc2Vuc29yIGJvYXJkCitBdXRob3I6IEFuZGVycyBCbG9tZGVsbCA8YW5kZXJzLmJsb21kZWxsQGNvbnRyb2wubHRoLnNlPgorU3RhdHVzOiB3b3JrcworRGV2aWNlczogW0pSM10gUENJIGZvcmNlIHNlbnNvciBib2FyZCAoanIzX3BjaSkKKworICBUaGUgRFNQIG9uIHRoZSBib2FyZCByZXF1aXJlcyBpbml0aWFsaXphdGlvbiBjb2RlLCB3aGljaCBjYW4KKyAgYmUgbG9hZGVkIGJ5IHBsYWNpbmcgaXQgaW4gL2xpYi9maXJtd2FyZS9jb21lZGkuCisgIFRoZSBpbml0aWFsaXphdGlvbiBjb2RlIHNob3VsZCBiZSBzb21ld2hlcmUgb24gdGhlIG1lZGlhIHlvdSBnb3QKKyAgd2l0aCB5b3VyIGNhcmQuIE9uZSB2ZXJzaW9uIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuY29tZWRpLm9yZworICBpbiB0aGUgY29tZWRpX25vbmZyZWVfZmlybXdhcmUgdGFyYmFsbC4KKworICBDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIFBDSSBidXMgbnVtYmVyIC0gaWYgYnVzIG51bWJlciBhbmQgc2xvdCBudW1iZXIgYXJlIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkcml2ZXIgc2VhcmNoIGZvciBmaXJzdCB1bnVzZWQgY2FyZAorICBbMV0gLSBQQ0kgc2xvdCBudW1iZXIKKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorI2luY2x1ZGUgImpyM19wY2kuaCIKKworLyogSG90cGx1ZyBmaXJtd2FyZSBsb2FkaW5nIHN0dWZmICovCisKK3N0YXRpYyB2b2lkIGNvbWVkaV9md19yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiZmlybXdhcmVfc2FtcGxlX2RyaXZlcjogZ2hvc3RfcmVsZWFzZVxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlIGNvbWVkaV9md19kZXZpY2UgPSB7CisJLmluaXRfbmFtZSA9ICJjb21lZGkiLAorCS5yZWxlYXNlID0gY29tZWRpX2Z3X3JlbGVhc2UKK307CisKK3R5cGVkZWYgaW50IGNvbWVkaV9maXJtd2FyZV9jYWxsYmFjayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwljb25zdCB1OCAqIGRhdGEsIHNpemVfdCBzaXplKTsKKworc3RhdGljIGludCBjb21lZGlfbG9hZF9maXJtd2FyZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwljaGFyICpuYW1lLCBjb21lZGlfZmlybXdhcmVfY2FsbGJhY2sgY2IpCit7CisJaW50IHJlc3VsdCA9IDA7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljaGFyICpmaXJtd2FyZV9wYXRoOworCXN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXggPSAiY29tZWRpLyI7CisKKwlmaXJtd2FyZV9wYXRoID0ga21hbGxvYyhzdHJsZW4ocHJlZml4KSArIHN0cmxlbihuYW1lKSArIDEsIEdGUF9LRVJORUwpOworCWlmICghZmlybXdhcmVfcGF0aCkgeworCQlyZXN1bHQgPSAtRU5PTUVNOworCX0gZWxzZSB7CisJCWZpcm13YXJlX3BhdGhbMF0gPSAnXDAnOworCQlzdHJjYXQoZmlybXdhcmVfcGF0aCwgcHJlZml4KTsKKwkJc3RyY2F0KGZpcm13YXJlX3BhdGgsIG5hbWUpOworCQlyZXN1bHQgPSBkZXZpY2VfcmVnaXN0ZXIoJmNvbWVkaV9md19kZXZpY2UpOworCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCXJlc3VsdCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaXJtd2FyZV9wYXRoLAorCQkJCSZjb21lZGlfZndfZGV2aWNlKTsKKwkJCWlmIChyZXN1bHQgPT0gMCkgeworCQkJCWlmICghY2IpIHsKKwkJCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJCQl9IGVsc2UgeworCQkJCQlyZXN1bHQgPSBjYihkZXYsIGZ3LT5kYXRhLCBmdy0+c2l6ZSk7CisJCQkJfQorCQkJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCQkJfQorCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmNvbWVkaV9md19kZXZpY2UpOworCQl9CisJCWtmcmVlKGZpcm13YXJlX3BhdGgpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSlIzIDB4MTc2MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pSM18xX0NIQU5ORUwgMHgzMTExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSlIzXzJfQ0hBTk5FTCAweDMxMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9KUjNfM19DSEFOTkVMIDB4MzExMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pSM180X0NIQU5ORUwgMHgzMTE0CisKK3N0YXRpYyBpbnQganIzX3BjaV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBqcjNfcGNpX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfanIzX3BjaSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJqcjNfcGNpIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpqcjNfcGNpX2F0dGFjaCwKKyAgICAgIGRldGFjaDpqcjNfcGNpX2RldGFjaCwKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShqcjNfcGNpX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfSlIzLCBQQ0lfREVWSUNFX0lEX0pSM18xX0NIQU5ORUwsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX0pSMywgUENJX0RFVklDRV9JRF9KUjNfMl9DSEFOTkVMLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9KUjMsIFBDSV9ERVZJQ0VfSURfSlIzXzNfQ0hBTk5FTCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfSlIzLCBQQ0lfREVWSUNFX0lEX0pSM180X0NIQU5ORUwsCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGpyM19wY2lfcGNpX3RhYmxlKTsKKworc3RydWN0IGpyM19wY2lfZGV2X3ByaXZhdGUgeworCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJaW50IHBjaV9lbmFibGVkOworCXZvbGF0aWxlIHN0cnVjdCBqcjNfdCAqaW9iYXNlOworCWludCBuX2NoYW5uZWxzOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworfTsKKworCitzdHJ1Y3QgcG9sbF9kZWxheV90IHsKKworCWludCBtaW47CisJaW50IG1heDsKK307CisKKworc3RydWN0IGpyM19wY2lfc3ViZGV2X3ByaXZhdGUgeworCXZvbGF0aWxlIHN0cnVjdCBqcjNfY2hhbm5lbCAqY2hhbm5lbDsKKwl1bnNpZ25lZCBsb25nIG5leHRfdGltZV9taW47CisJdW5zaWduZWQgbG9uZyBuZXh0X3RpbWVfbWF4OworCWVudW0geyBzdGF0ZV9qcjNfcG9sbCwKKwkJc3RhdGVfanIzX2luaXRfd2FpdF9mb3Jfb2Zmc2V0LAorCQlzdGF0ZV9qcjNfaW5pdF90cmFuc2Zvcm1fY29tcGxldGUsCisJCXN0YXRlX2pyM19pbml0X3NldF9mdWxsX3NjYWxlX2NvbXBsZXRlLAorCQlzdGF0ZV9qcjNfaW5pdF91c2Vfb2Zmc2V0X2NvbXBsZXRlLAorCQlzdGF0ZV9qcjNfZG9uZQorCX0gc3RhdGU7CisJaW50IGNoYW5uZWxfbm87CisJaW50IHNlcmlhbF9ubzsKKwlpbnQgbW9kZWxfbm87CisJc3RydWN0IHsKKwkJaW50IGxlbmd0aDsKKwkJc3RydWN0IGNvbWVkaV9rcmFuZ2UgcmFuZ2U7CisJfSByYW5nZVs5XTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VfdGFibGVfbGlzdFs4ICogNyArIDJdOworCXVuc2lnbmVkIGludCBtYXhkYXRhX2xpc3RbOCAqIDcgKyAyXTsKKwl1MTYgZXJyb3JzOworCWludCByZXRyaWVzOworfTsKKworc3RhdGljIHN0cnVjdCBwb2xsX2RlbGF5X3QgcG9sbF9kZWxheV9taW5fbWF4KGludCBtaW4sIGludCBtYXgpCit7CisJc3RydWN0IHBvbGxfZGVsYXlfdCByZXN1bHQ7CisKKwlyZXN1bHQubWluID0gbWluOworCXJlc3VsdC5tYXggPSBtYXg7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBpc19jb21wbGV0ZSh2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJcmV0dXJuIGdldF9zMTYoJmNoYW5uZWwtPmNvbW1hbmRfd29yZDApID09IDA7Cit9CisKK3N0cnVjdCB0cmFuc2Zvcm1fdCB7CisJc3RydWN0IHsKKwkJdTE2IGxpbmtfdHlwZTsKKwkJczE2IGxpbmtfYW1vdW50OworCX0gbGlua1s4XTsKK307CisKK3N0YXRpYyB2b2lkIHNldF90cmFuc2Zvcm1zKHZvbGF0aWxlIHN0cnVjdCBqcjNfY2hhbm5lbCAqY2hhbm5lbCwKKwlzdHJ1Y3QgdHJhbnNmb3JtX3QgdHJhbnNmLCBzaG9ydCBudW0pCit7CisJaW50IGk7CisKKwludW0gJj0gMHgwMDBmOwkJLy8gTWFrZSBzdXJlIHRoYXQgMCA8PSBudW0gPD0gMTUKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisKKwkJc2V0X3UxNigmY2hhbm5lbC0+dHJhbnNmb3Jtc1tudW1dLmxpbmtbaV0ubGlua190eXBlLAorCQkJdHJhbnNmLmxpbmtbaV0ubGlua190eXBlKTsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJc2V0X3MxNigmY2hhbm5lbC0+dHJhbnNmb3Jtc1tudW1dLmxpbmtbaV0ubGlua19hbW91bnQsCisJCQl0cmFuc2YubGlua1tpXS5saW5rX2Ftb3VudCk7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCWlmICh0cmFuc2YubGlua1tpXS5saW5rX3R5cGUgPT0gZW5kX3hfZm9ybSkgeworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVzZV90cmFuc2Zvcm0odm9sYXRpbGUgc3RydWN0IGpyM19jaGFubmVsICpjaGFubmVsLCBzaG9ydCB0cmFuc2ZfbnVtKQoreworCXNldF9zMTYoJmNoYW5uZWwtPmNvbW1hbmRfd29yZDAsIDB4MDUwMCArICh0cmFuc2ZfbnVtICYgMHgwMDBmKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVzZV9vZmZzZXQodm9sYXRpbGUgc3RydWN0IGpyM19jaGFubmVsICpjaGFubmVsLCBzaG9ydCBvZmZzZXRfbnVtKQoreworCXNldF9zMTYoJmNoYW5uZWwtPmNvbW1hbmRfd29yZDAsIDB4MDYwMCArIChvZmZzZXRfbnVtICYgMHgwMDBmKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9vZmZzZXQodm9sYXRpbGUgc3RydWN0IGpyM19jaGFubmVsICpjaGFubmVsKQoreworCXNldF9zMTYoJmNoYW5uZWwtPmNvbW1hbmRfd29yZDAsIDB4MDcwMCk7Cit9CisKK3N0cnVjdCBzaXhfYXhpc190IHsKKwlzMTYgZng7CisJczE2IGZ5OworCXMxNiBmejsKKwlzMTYgbXg7CisJczE2IG15OworCXMxNiBtejsKK307CisKK3N0YXRpYyB2b2lkIHNldF9mdWxsX3NjYWxlcyh2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWwsCisJc3RydWN0IHNpeF9heGlzX3QgZnVsbF9zY2FsZSkKK3sKKwlwcmludGsoIiVkICVkICVkICVkICVkICVkXG4iLAorCQlmdWxsX3NjYWxlLmZ4LAorCQlmdWxsX3NjYWxlLmZ5LAorCQlmdWxsX3NjYWxlLmZ6LCBmdWxsX3NjYWxlLm14LCBmdWxsX3NjYWxlLm15LCBmdWxsX3NjYWxlLm16KTsKKwlzZXRfczE2KCZjaGFubmVsLT5mdWxsX3NjYWxlLmZ4LCBmdWxsX3NjYWxlLmZ4KTsKKwlzZXRfczE2KCZjaGFubmVsLT5mdWxsX3NjYWxlLmZ5LCBmdWxsX3NjYWxlLmZ5KTsKKwlzZXRfczE2KCZjaGFubmVsLT5mdWxsX3NjYWxlLmZ6LCBmdWxsX3NjYWxlLmZ6KTsKKwlzZXRfczE2KCZjaGFubmVsLT5mdWxsX3NjYWxlLm14LCBmdWxsX3NjYWxlLm14KTsKKwlzZXRfczE2KCZjaGFubmVsLT5mdWxsX3NjYWxlLm15LCBmdWxsX3NjYWxlLm15KTsKKwlzZXRfczE2KCZjaGFubmVsLT5mdWxsX3NjYWxlLm16LCBmdWxsX3NjYWxlLm16KTsKKwlzZXRfczE2KCZjaGFubmVsLT5jb21tYW5kX3dvcmQwLCAweDBhMDApOworfQorCitzdGF0aWMgc3RydWN0IHNpeF9heGlzX3QgZ2V0X21pbl9mdWxsX3NjYWxlcyh2b2xhdGlsZSBzdHJ1Y3QganIzX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJc3RydWN0IHNpeF9heGlzX3QgcmVzdWx0OworCXJlc3VsdC5meCA9IGdldF9zMTYoJmNoYW5uZWwtPm1pbl9mdWxsX3NjYWxlLmZ4KTsKKwlyZXN1bHQuZnkgPSBnZXRfczE2KCZjaGFubmVsLT5taW5fZnVsbF9zY2FsZS5meSk7CisJcmVzdWx0LmZ6ID0gZ2V0X3MxNigmY2hhbm5lbC0+bWluX2Z1bGxfc2NhbGUuZnopOworCXJlc3VsdC5teCA9IGdldF9zMTYoJmNoYW5uZWwtPm1pbl9mdWxsX3NjYWxlLm14KTsKKwlyZXN1bHQubXkgPSBnZXRfczE2KCZjaGFubmVsLT5taW5fZnVsbF9zY2FsZS5teSk7CisJcmVzdWx0Lm16ID0gZ2V0X3MxNigmY2hhbm5lbC0+bWluX2Z1bGxfc2NhbGUubXopOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2l4X2F4aXNfdCBnZXRfbWF4X2Z1bGxfc2NhbGVzKHZvbGF0aWxlIHN0cnVjdCBqcjNfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3Qgc2l4X2F4aXNfdCByZXN1bHQ7CisJcmVzdWx0LmZ4ID0gZ2V0X3MxNigmY2hhbm5lbC0+bWF4X2Z1bGxfc2NhbGUuZngpOworCXJlc3VsdC5meSA9IGdldF9zMTYoJmNoYW5uZWwtPm1heF9mdWxsX3NjYWxlLmZ5KTsKKwlyZXN1bHQuZnogPSBnZXRfczE2KCZjaGFubmVsLT5tYXhfZnVsbF9zY2FsZS5meik7CisJcmVzdWx0Lm14ID0gZ2V0X3MxNigmY2hhbm5lbC0+bWF4X2Z1bGxfc2NhbGUubXgpOworCXJlc3VsdC5teSA9IGdldF9zMTYoJmNoYW5uZWwtPm1heF9mdWxsX3NjYWxlLm15KTsKKwlyZXN1bHQubXogPSBnZXRfczE2KCZjaGFubmVsLT5tYXhfZnVsbF9zY2FsZS5teik7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBqcjNfcGNpX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QganIzX3BjaV9zdWJkZXZfcHJpdmF0ZSAqcDsKKwlpbnQgY2hhbm5lbDsKKworCXAgPSBzLT5wcml2YXRlOworCWNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAocCA9PSBOVUxMIHx8IGNoYW5uZWwgPiA1NykgeworCQlyZXN1bHQgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCWludCBpOworCisJCXJlc3VsdCA9IGluc24tPm47CisJCWlmIChwLT5zdGF0ZSAhPSBzdGF0ZV9qcjNfZG9uZSB8fAorCQkJKGdldF91MTYoJnAtPmNoYW5uZWwtPgorCQkJCQllcnJvcnMpICYgKHdhdGNoX2RvZyB8IHdhdGNoX2RvZzIgfAorCQkJCQlzZW5zb3JfY2hhbmdlKSkpIHsKKwkJCS8qIE5vIHNlbnNvciBvciBzZW5zb3IgY2hhbmdlZCAqLworCQkJaWYgKHAtPnN0YXRlID09IHN0YXRlX2pyM19kb25lKSB7CisJCQkJLyogUmVzdGFydCBwb2xsaW5nICovCisJCQkJcC0+c3RhdGUgPSBzdGF0ZV9qcjNfcG9sbDsKKwkJCX0KKwkJCXJlc3VsdCA9IC1FQUdBSU47CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkJaWYgKGNoYW5uZWwgPCA1NikgeworCQkJCWludCBheGlzLCBmaWx0ZXI7CisKKwkJCQlheGlzID0gY2hhbm5lbCAlIDg7CisJCQkJZmlsdGVyID0gY2hhbm5lbCAvIDg7CisJCQkJaWYgKHAtPnN0YXRlICE9IHN0YXRlX2pyM19kb25lKSB7CisJCQkJCWRhdGFbaV0gPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWludCBGID0gMDsKKwkJCQkJc3dpdGNoIChheGlzKSB7CisJCQkJCWNhc2UgMDp7CisJCQkJCQkJRiA9IGdldF9zMTYoJnAtPgorCQkJCQkJCQljaGFubmVsLT4KKwkJCQkJCQkJZmlsdGVyW2ZpbHRlcl0uCisJCQkJCQkJCWZ4KTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDE6eworCQkJCQkJCUYgPSBnZXRfczE2KCZwLT4KKwkJCQkJCQkJY2hhbm5lbC0+CisJCQkJCQkJCWZpbHRlcltmaWx0ZXJdLgorCQkJCQkJCQlmeSk7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAyOnsKKwkJCQkJCQlGID0gZ2V0X3MxNigmcC0+CisJCQkJCQkJCWNoYW5uZWwtPgorCQkJCQkJCQlmaWx0ZXJbZmlsdGVyXS4KKwkJCQkJCQkJZnopOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMzp7CisJCQkJCQkJRiA9IGdldF9zMTYoJnAtPgorCQkJCQkJCQljaGFubmVsLT4KKwkJCQkJCQkJZmlsdGVyW2ZpbHRlcl0uCisJCQkJCQkJCW14KTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDQ6eworCQkJCQkJCUYgPSBnZXRfczE2KCZwLT4KKwkJCQkJCQkJY2hhbm5lbC0+CisJCQkJCQkJCWZpbHRlcltmaWx0ZXJdLgorCQkJCQkJCQlteSk7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSA1OnsKKwkJCQkJCQlGID0gZ2V0X3MxNigmcC0+CisJCQkJCQkJCWNoYW5uZWwtPgorCQkJCQkJCQlmaWx0ZXJbZmlsdGVyXS4KKwkJCQkJCQkJbXopOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgNjp7CisJCQkJCQkJRiA9IGdldF9zMTYoJnAtPgorCQkJCQkJCQljaGFubmVsLT4KKwkJCQkJCQkJZmlsdGVyW2ZpbHRlcl0uCisJCQkJCQkJCXYxKTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDc6eworCQkJCQkJCUYgPSBnZXRfczE2KCZwLT4KKwkJCQkJCQkJY2hhbm5lbC0+CisJCQkJCQkJCWZpbHRlcltmaWx0ZXJdLgorCQkJCQkJCQl2Mik7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlkYXRhW2ldID0gRiArIDB4NDAwMDsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKGNoYW5uZWwgPT0gNTYpIHsKKwkJCQlpZiAocC0+c3RhdGUgIT0gc3RhdGVfanIzX2RvbmUpIHsKKwkJCQkJZGF0YVtpXSA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGF0YVtpXSA9CisJCQkJCQlnZXRfdTE2KCZwLT5jaGFubmVsLT5tb2RlbF9ubyk7CisJCQkJfQorCQkJfSBlbHNlIGlmIChjaGFubmVsID09IDU3KSB7CisJCQkJaWYgKHAtPnN0YXRlICE9IHN0YXRlX2pyM19kb25lKSB7CisJCQkJCWRhdGFbaV0gPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWRhdGFbaV0gPQorCQkJCQkJZ2V0X3UxNigmcC0+Y2hhbm5lbC0+c2VyaWFsX25vKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQganIzX3BjaV9vcGVuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpOworCXN0cnVjdCBqcjNfcGNpX2Rldl9wcml2YXRlICpkZXZwcml2ID0gZGV2LT5wcml2YXRlOworCisJcHJpbnRrKCJqcjNfcGNpX29wZW5cbiIpOworCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJc3RydWN0IGpyM19wY2lfc3ViZGV2X3ByaXZhdGUgKnA7CisKKwkJcCA9IGRldi0+c3ViZGV2aWNlc1tpXS5wcml2YXRlOworCQlpZiAocCkgeworCQkJcHJpbnRrKCJzZXJpYWw6ICVwICVkICglZClcbiIsIHAsIHAtPnNlcmlhbF9ubywKKwkJCQlwLT5jaGFubmVsX25vKTsKKwkJfQorCX0KK30KKworaW50IHJlYWRfaWRtX3dvcmQoY29uc3QgdTggKiBkYXRhLCBzaXplX3Qgc2l6ZSwgaW50ICpwb3MsIHVuc2lnbmVkIGludCAqdmFsKQoreworCWludCByZXN1bHQgPSAwOworCWlmIChwb3MgIT0gMCAmJiB2YWwgIT0gMCkgeworCQkvLyBTa2lwIG92ZXIgbm9uIGhleAorCQlmb3IgKDsgKnBvcyA8IHNpemUgJiYgIWlzeGRpZ2l0KGRhdGFbKnBvc10pOyAoKnBvcykrKykgeworCQl9CisJCS8vIENvbGxlY3QgdmFsdWUKKwkJKnZhbCA9IDA7CisJCWZvciAoOyAqcG9zIDwgc2l6ZSAmJiBpc3hkaWdpdChkYXRhWypwb3NdKTsgKCpwb3MpKyspIHsKKwkJCWNoYXIgY2ggPSB0b2xvd2VyKGRhdGFbKnBvc10pOworCQkJcmVzdWx0ID0gMTsKKwkJCWlmICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKSB7CisJCQkJKnZhbCA9ICgqdmFsIDw8IDQpICsgKGNoIC0gJzAnKTsKKwkJCX0gZWxzZSBpZiAoJ2EnIDw9IGNoICYmIGNoIDw9ICdmJykgeworCQkJCSp2YWwgPSAoKnZhbCA8PCA0KSArIChjaCAtICdhJyArIDEwKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGpyM19kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgY29uc3QgdTggKiBkYXRhLAorCXNpemVfdCBzaXplKQoreworCS8qCisJICogSURNIGZpbGUgZm9ybWF0IGlzOgorCSAqICAgeyBjb3VudCwgYWRkcmVzcywgZGF0YSA8Y291bnQ+IH0gKgorCSAqICAgZmZmZgorCSAqLworCWludCByZXN1bHQsIG1vcmUsIHBvcywgT0s7CisKKwlyZXN1bHQgPSAwOworCW1vcmUgPSAxOworCXBvcyA9IDA7CisJT0sgPSAwOworCXdoaWxlIChtb3JlKSB7CisJCXVuc2lnbmVkIGludCBjb3VudCwgYWRkcjsKKworCQltb3JlID0gbW9yZSAmJiByZWFkX2lkbV93b3JkKGRhdGEsIHNpemUsICZwb3MsICZjb3VudCk7CisJCWlmIChtb3JlICYmIGNvdW50ID09IDB4ZmZmZikgeworCQkJT0sgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJbW9yZSA9IG1vcmUgJiYgcmVhZF9pZG1fd29yZChkYXRhLCBzaXplLCAmcG9zLCAmYWRkcik7CisJCXdoaWxlIChtb3JlICYmIGNvdW50ID4gMCkgeworCQkJdW5zaWduZWQgaW50IGR1bW15OworCQkJbW9yZSA9IG1vcmUgJiYgcmVhZF9pZG1fd29yZChkYXRhLCBzaXplLCAmcG9zLCAmZHVtbXkpOworCQkJY291bnQtLTsKKwkJfQorCX0KKworCWlmICghT0spIHsKKwkJcmVzdWx0ID0gLUVOT0RBVEE7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXN0cnVjdCBqcjNfcGNpX2Rldl9wcml2YXRlICpwID0gZGV2LT5wcml2YXRlOworCisJCWZvciAoaSA9IDA7IGkgPCBwLT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJCXN0cnVjdCBqcjNfcGNpX3N1YmRldl9wcml2YXRlICpzcDsKKworCQkJc3AgPSBkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZTsKKwkJCW1vcmUgPSAxOworCQkJcG9zID0gMDsKKwkJCXdoaWxlIChtb3JlKSB7CisJCQkJdW5zaWduZWQgaW50IGNvdW50LCBhZGRyOworCQkJCW1vcmUgPSBtb3JlCisJCQkJCSYmIHJlYWRfaWRtX3dvcmQoZGF0YSwgc2l6ZSwgJnBvcywKKwkJCQkJJmNvdW50KTsKKwkJCQlpZiAobW9yZSAmJiBjb3VudCA9PSAweGZmZmYpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1vcmUgPSBtb3JlCisJCQkJCSYmIHJlYWRfaWRtX3dvcmQoZGF0YSwgc2l6ZSwgJnBvcywKKwkJCQkJJmFkZHIpOworCQkJCXByaW50aygiTG9hZGluZyMlZCAlNC40eCBieXRlcyBhdCAlNC40eFxuIiwgaSwKKwkJCQkJY291bnQsIGFkZHIpOworCQkJCXdoaWxlIChtb3JlICYmIGNvdW50ID4gMCkgeworCQkJCQlpZiAoYWRkciAmIDB4NDAwMCkgeworCQkJCQkJLy8gMTYgYml0IGRhdGEsIG5ldmVyIHNlZW4gaW4gcmVhbCBsaWZlISEKKwkJCQkJCXVuc2lnbmVkIGludCBkYXRhMTsKKworCQkJCQkJbW9yZSA9IG1vcmUKKwkJCQkJCQkmJiByZWFkX2lkbV93b3JkKGRhdGEsCisJCQkJCQkJc2l6ZSwgJnBvcywgJmRhdGExKTsKKwkJCQkJCWNvdW50LS07CisJCQkJCQkvLyBwcmludGsoImpyM19kYXRhLCBub3QgdGVzdGVkXG4iKTsKKwkJCQkJCS8vICAgICAgICBqcjNbYWRkciArIDB4MjAwMDAgKiBwbnVtXSA9IGRhdGExOworCQkJCQl9IGVsc2UgeworCQkJCQkJLy8gIERvd25sb2FkIDI0IGJpdCBwcm9ncmFtCisJCQkJCQl1bnNpZ25lZCBpbnQgZGF0YTEsIGRhdGEyOworCisJCQkJCQltb3JlID0gbW9yZQorCQkJCQkJCSYmIHJlYWRfaWRtX3dvcmQoZGF0YSwKKwkJCQkJCQlzaXplLCAmcG9zLCAmZGF0YTEpOworCQkJCQkJbW9yZSA9IG1vcmUKKwkJCQkJCQkmJiByZWFkX2lkbV93b3JkKGRhdGEsCisJCQkJCQkJc2l6ZSwgJnBvcywgJmRhdGEyKTsKKwkJCQkJCWNvdW50IC09IDI7CisJCQkJCQlpZiAobW9yZSkgeworCQkJCQkJCXNldF91MTYoJnAtPmlvYmFzZS0+CisJCQkJCQkJCWNoYW5uZWxbaV0uCisJCQkJCQkJCXByb2dyYW1fbG93CisJCQkJCQkJCVthZGRyXSwgZGF0YTEpOworCQkJCQkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCQkJCQkJc2V0X3UxNigmcC0+aW9iYXNlLT4KKwkJCQkJCQkJY2hhbm5lbFtpXS4KKwkJCQkJCQkJcHJvZ3JhbV9oaWdoCisJCQkJCQkJCVthZGRyXSwgZGF0YTIpOworCQkJCQkJCWNvbWVkaV91ZGVsYXkoMSk7CisKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlhZGRyKys7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9sbF9kZWxheV90IGpyM19wY2lfcG9sbF9zdWJkZXZpY2Uoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBwb2xsX2RlbGF5X3QgcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDEwMDAsIDIwMDApOworCXN0cnVjdCBqcjNfcGNpX3N1YmRldl9wcml2YXRlICpwID0gcy0+cHJpdmF0ZTsKKworCWlmIChwKSB7CisJCXZvbGF0aWxlIHN0cnVjdCBqcjNfY2hhbm5lbCAqY2hhbm5lbCA9IHAtPmNoYW5uZWw7CisJCWludCBlcnJvcnMgPSBnZXRfdTE2KCZjaGFubmVsLT5lcnJvcnMpOworCisJCWlmIChlcnJvcnMgIT0gcC0+ZXJyb3JzKSB7CisJCQlwcmludGsoIkVycm9yczogJXggLT4gJXhcbiIsIHAtPmVycm9ycywgZXJyb3JzKTsKKwkJCXAtPmVycm9ycyA9IGVycm9yczsKKwkJfQorCQlpZiAoZXJyb3JzICYgKHdhdGNoX2RvZyB8IHdhdGNoX2RvZzIgfCBzZW5zb3JfY2hhbmdlKSkgeworCQkJLy8gU2Vuc29yIGNvbW11bmljYXRpb24gbG9zdCwgZm9yY2UgcG9sbCBtb2RlCisJCQlwLT5zdGF0ZSA9IHN0YXRlX2pyM19wb2xsOworCisJCX0KKwkJc3dpdGNoIChwLT5zdGF0ZSkgeworCQljYXNlIHN0YXRlX2pyM19wb2xsOnsKKwkJCQl1MTYgbW9kZWxfbm8gPSBnZXRfdTE2KCZjaGFubmVsLT5tb2RlbF9ubyk7CisJCQkJdTE2IHNlcmlhbF9ubyA9IGdldF91MTYoJmNoYW5uZWwtPnNlcmlhbF9ubyk7CisJCQkJaWYgKChlcnJvcnMgJiAod2F0Y2hfZG9nIHwgd2F0Y2hfZG9nMikpIHx8CisJCQkJCW1vZGVsX25vID09IDAgfHwgc2VyaWFsX25vID09IDApIHsKKwkJCQkJLy8gU3RpbGwgbm8gc2Vuc29yLCBrZWVwIG9uIHBvbGxpbmcuIFNpbmNlIGl0IHRha2VzIHVwIHRvCisJCQkJCS8vIDEwIHNlY29uZHMgZm9yIG9mZnNldHMgdG8gc3RhYmlsaXplLCBwb2xsaW5nIGVhY2gKKwkJCQkJLy8gc2Vjb25kIHNob3VsZCBzdWZmaWNlLgorCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMTAwMCwgMjAwMCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcC0+cmV0cmllcyA9IDA7CisJCQkJCXAtPnN0YXRlID0KKwkJCQkJCXN0YXRlX2pyM19pbml0X3dhaXRfZm9yX29mZnNldDsKKwkJCQkJcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDEwMDAsIDIwMDApOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX2pyM19pbml0X3dhaXRfZm9yX29mZnNldDp7CisJCQkJcC0+cmV0cmllcysrOworCQkJCWlmIChwLT5yZXRyaWVzIDwgMTApIHsKKwkJCQkJLy8gV2FpdCBmb3Igb2ZmZXNldCB0byBzdGFiaWxpemUgKDwgMTAgcyBhY2NvcmRpbmcgdG8gbWFudWFsKQorCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMTAwMCwgMjAwMCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RydWN0IHRyYW5zZm9ybV90IHRyYW5zZjsKKworCQkJCQlwLT5tb2RlbF9ubyA9CisJCQkJCQlnZXRfdTE2KCZjaGFubmVsLT5tb2RlbF9ubyk7CisJCQkJCXAtPnNlcmlhbF9ubyA9CisJCQkJCQlnZXRfdTE2KCZjaGFubmVsLT5zZXJpYWxfbm8pOworCisJCQkJCXByaW50aygiU2V0dGluZyB0cmFuc2Zvcm0gZm9yIGNoYW5uZWwgJWRcbiIsIHAtPmNoYW5uZWxfbm8pOworCQkJCQlwcmludGsoIlNlbnNvciBNb2RlbCAgICAgPSAlaVxuIiwKKwkJCQkJCXAtPm1vZGVsX25vKTsKKwkJCQkJcHJpbnRrKCJTZW5zb3IgU2VyaWFsICAgID0gJWlcbiIsCisJCQkJCQlwLT5zZXJpYWxfbm8pOworCisJCQkJCS8vIFRyYW5zZm9ybWF0aW9uIGFsbCB6ZXJvcworCQkJCQl0cmFuc2YubGlua1swXS5saW5rX3R5cGUgPQorCQkJCQkJKGVudW0gbGlua190eXBlcykwOworCQkJCQl0cmFuc2YubGlua1swXS5saW5rX2Ftb3VudCA9IDA7CisJCQkJCXRyYW5zZi5saW5rWzFdLmxpbmtfdHlwZSA9CisJCQkJCQkoZW51bSBsaW5rX3R5cGVzKTA7CisJCQkJCXRyYW5zZi5saW5rWzFdLmxpbmtfYW1vdW50ID0gMDsKKwkJCQkJdHJhbnNmLmxpbmtbMl0ubGlua190eXBlID0KKwkJCQkJCShlbnVtIGxpbmtfdHlwZXMpMDsKKwkJCQkJdHJhbnNmLmxpbmtbMl0ubGlua19hbW91bnQgPSAwOworCQkJCQl0cmFuc2YubGlua1szXS5saW5rX3R5cGUgPQorCQkJCQkJKGVudW0gbGlua190eXBlcykwOworCQkJCQl0cmFuc2YubGlua1szXS5saW5rX2Ftb3VudCA9IDA7CisKKwkJCQkJc2V0X3RyYW5zZm9ybXMoY2hhbm5lbCwgdHJhbnNmLCAwKTsKKwkJCQkJdXNlX3RyYW5zZm9ybShjaGFubmVsLCAwKTsKKwkJCQkJcC0+c3RhdGUgPQorCQkJCQkJc3RhdGVfanIzX2luaXRfdHJhbnNmb3JtX2NvbXBsZXRlOworCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMjAsIDEwMCk7CS8vIEFsbG93IDIwIG1zIGZvciBjb21wbGV0aW9uCisJCQkJfQorCQkJfSBicmVhazsKKwkJY2FzZSBzdGF0ZV9qcjNfaW5pdF90cmFuc2Zvcm1fY29tcGxldGU6eworCQkJCWlmICghaXNfY29tcGxldGUoY2hhbm5lbCkpIHsKKwkJCQkJcHJpbnRrKCJzdGF0ZV9qcjNfaW5pdF90cmFuc2Zvcm1fY29tcGxldGUgY29tcGxldGUgPSAlZFxuIiwgaXNfY29tcGxldGUoY2hhbm5lbCkpOworCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMjAsIDEwMCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLy8gU2V0IGZ1bGwgc2NhbGUKKwkJCQkJc3RydWN0IHNpeF9heGlzX3QgbWluX2Z1bGxfc2NhbGU7CisJCQkJCXN0cnVjdCBzaXhfYXhpc190IG1heF9mdWxsX3NjYWxlOworCisJCQkJCW1pbl9mdWxsX3NjYWxlID0KKwkJCQkJCWdldF9taW5fZnVsbF9zY2FsZXMoY2hhbm5lbCk7CisJCQkJCXByaW50aygiT2J0YWluZWQgTWluLiBGdWxsIFNjYWxlczpcbiIpOworCQkJCQlwcmludGsoIiVpICAgIiwgKG1pbl9mdWxsX3NjYWxlKS5meCk7CisJCQkJCXByaW50aygiJWkgICAiLCAobWluX2Z1bGxfc2NhbGUpLmZ5KTsKKwkJCQkJcHJpbnRrKCIlaSAgICIsIChtaW5fZnVsbF9zY2FsZSkuZnopOworCQkJCQlwcmludGsoIiVpICAgIiwgKG1pbl9mdWxsX3NjYWxlKS5teCk7CisJCQkJCXByaW50aygiJWkgICAiLCAobWluX2Z1bGxfc2NhbGUpLm15KTsKKwkJCQkJcHJpbnRrKCIlaSAgICIsIChtaW5fZnVsbF9zY2FsZSkubXopOworCQkJCQlwcmludGsoIlxuIik7CisKKwkJCQkJbWF4X2Z1bGxfc2NhbGUgPQorCQkJCQkJZ2V0X21heF9mdWxsX3NjYWxlcyhjaGFubmVsKTsKKwkJCQkJcHJpbnRrKCJPYnRhaW5lZCBNYXguIEZ1bGwgU2NhbGVzOlxuIik7CisJCQkJCXByaW50aygiJWkgICAiLCAobWF4X2Z1bGxfc2NhbGUpLmZ4KTsKKwkJCQkJcHJpbnRrKCIlaSAgICIsIChtYXhfZnVsbF9zY2FsZSkuZnkpOworCQkJCQlwcmludGsoIiVpICAgIiwgKG1heF9mdWxsX3NjYWxlKS5meik7CisJCQkJCXByaW50aygiJWkgICAiLCAobWF4X2Z1bGxfc2NhbGUpLm14KTsKKwkJCQkJcHJpbnRrKCIlaSAgICIsIChtYXhfZnVsbF9zY2FsZSkubXkpOworCQkJCQlwcmludGsoIiVpICAgIiwgKG1heF9mdWxsX3NjYWxlKS5teik7CisJCQkJCXByaW50aygiXG4iKTsKKworCQkJCQlzZXRfZnVsbF9zY2FsZXMoY2hhbm5lbCwKKwkJCQkJCW1heF9mdWxsX3NjYWxlKTsKKworCQkJCQlwLT5zdGF0ZSA9CisJCQkJCQlzdGF0ZV9qcjNfaW5pdF9zZXRfZnVsbF9zY2FsZV9jb21wbGV0ZTsKKwkJCQkJcmVzdWx0ID0gcG9sbF9kZWxheV9taW5fbWF4KDIwLCAxMDApOwkvLyBBbGxvdyAyMCBtcyBmb3IgY29tcGxldGlvbgorCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX2pyM19pbml0X3NldF9mdWxsX3NjYWxlX2NvbXBsZXRlOnsKKwkJCQlpZiAoIWlzX2NvbXBsZXRlKGNoYW5uZWwpKSB7CisJCQkJCXByaW50aygic3RhdGVfanIzX2luaXRfc2V0X2Z1bGxfc2NhbGVfY29tcGxldGUgY29tcGxldGUgPSAlZFxuIiwgaXNfY29tcGxldGUoY2hhbm5lbCkpOworCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMjAsIDEwMCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJdm9sYXRpbGUgc3RydWN0IGZvcmNlX2FycmF5ICpmdWxsX3NjYWxlOworCisJCQkJCS8vIFVzZSByYW5nZXMgaW4ga04gb3Igd2Ugd2lsbCBvdmVyZmxvdyBhcm91bnQgMjAwME4hCisJCQkJCWZ1bGxfc2NhbGUgPSAmY2hhbm5lbC0+ZnVsbF9zY2FsZTsKKwkJCQkJcC0+cmFuZ2VbMF0ucmFuZ2UubWluID0KKwkJCQkJCS1nZXRfczE2KCZmdWxsX3NjYWxlLT5meCkgKgorCQkJCQkJMTAwMDsKKwkJCQkJcC0+cmFuZ2VbMF0ucmFuZ2UubWF4ID0KKwkJCQkJCWdldF9zMTYoJmZ1bGxfc2NhbGUtPmZ4KSAqIDEwMDA7CisJCQkJCXAtPnJhbmdlWzFdLnJhbmdlLm1pbiA9CisJCQkJCQktZ2V0X3MxNigmZnVsbF9zY2FsZS0+ZnkpICoKKwkJCQkJCTEwMDA7CisJCQkJCXAtPnJhbmdlWzFdLnJhbmdlLm1heCA9CisJCQkJCQlnZXRfczE2KCZmdWxsX3NjYWxlLT5meSkgKiAxMDAwOworCQkJCQlwLT5yYW5nZVsyXS5yYW5nZS5taW4gPQorCQkJCQkJLWdldF9zMTYoJmZ1bGxfc2NhbGUtPmZ6KSAqCisJCQkJCQkxMDAwOworCQkJCQlwLT5yYW5nZVsyXS5yYW5nZS5tYXggPQorCQkJCQkJZ2V0X3MxNigmZnVsbF9zY2FsZS0+ZnopICogMTAwMDsKKwkJCQkJcC0+cmFuZ2VbM10ucmFuZ2UubWluID0KKwkJCQkJCS1nZXRfczE2KCZmdWxsX3NjYWxlLT5teCkgKiAxMDA7CisJCQkJCXAtPnJhbmdlWzNdLnJhbmdlLm1heCA9CisJCQkJCQlnZXRfczE2KCZmdWxsX3NjYWxlLT5teCkgKiAxMDA7CisJCQkJCXAtPnJhbmdlWzRdLnJhbmdlLm1pbiA9CisJCQkJCQktZ2V0X3MxNigmZnVsbF9zY2FsZS0+bXkpICogMTAwOworCQkJCQlwLT5yYW5nZVs0XS5yYW5nZS5tYXggPQorCQkJCQkJZ2V0X3MxNigmZnVsbF9zY2FsZS0+bXkpICogMTAwOworCQkJCQlwLT5yYW5nZVs1XS5yYW5nZS5taW4gPQorCQkJCQkJLWdldF9zMTYoJmZ1bGxfc2NhbGUtPm16KSAqIDEwMDsKKwkJCQkJcC0+cmFuZ2VbNV0ucmFuZ2UubWF4ID0KKwkJCQkJCWdldF9zMTYoJmZ1bGxfc2NhbGUtPm16KSAqIDEwMDsKKwkJCQkJcC0+cmFuZ2VbNl0ucmFuZ2UubWluID0gLWdldF9zMTYoJmZ1bGxfc2NhbGUtPnYxKSAqIDEwMDsJLy8gPz8KKwkJCQkJcC0+cmFuZ2VbNl0ucmFuZ2UubWF4ID0gZ2V0X3MxNigmZnVsbF9zY2FsZS0+djEpICogMTAwOwkvLyA/PworCQkJCQlwLT5yYW5nZVs3XS5yYW5nZS5taW4gPSAtZ2V0X3MxNigmZnVsbF9zY2FsZS0+djIpICogMTAwOwkvLyA/PworCQkJCQlwLT5yYW5nZVs3XS5yYW5nZS5tYXggPSBnZXRfczE2KCZmdWxsX3NjYWxlLT52MikgKiAxMDA7CS8vID8/CisJCQkJCXAtPnJhbmdlWzhdLnJhbmdlLm1pbiA9IDA7CisJCQkJCXAtPnJhbmdlWzhdLnJhbmdlLm1heCA9IDY1NTM1OworCisJCQkJCXsKKwkJCQkJCWludCBpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeworCQkJCQkJCXByaW50aygiJWQgJWQgLSAlZFxuIiwKKwkJCQkJCQkJaSwKKwkJCQkJCQkJcC0+cmFuZ2VbaV0uCisJCQkJCQkJCXJhbmdlLm1pbiwKKwkJCQkJCQkJcC0+cmFuZ2VbaV0uCisJCQkJCQkJCXJhbmdlLm1heCk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl1c2Vfb2Zmc2V0KGNoYW5uZWwsIDApOworCQkJCQlwLT5zdGF0ZSA9CisJCQkJCQlzdGF0ZV9qcjNfaW5pdF91c2Vfb2Zmc2V0X2NvbXBsZXRlOworCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoNDAsIDEwMCk7CS8vIEFsbG93IDQwIG1zIGZvciBjb21wbGV0aW9uCisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ugc3RhdGVfanIzX2luaXRfdXNlX29mZnNldF9jb21wbGV0ZTp7CisJCQkJaWYgKCFpc19jb21wbGV0ZShjaGFubmVsKSkgeworCQkJCQlwcmludGsoInN0YXRlX2pyM19pbml0X3VzZV9vZmZzZXRfY29tcGxldGUgY29tcGxldGUgPSAlZFxuIiwgaXNfY29tcGxldGUoY2hhbm5lbCkpOworCQkJCQlyZXN1bHQgPSBwb2xsX2RlbGF5X21pbl9tYXgoMjAsIDEwMCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHJpbnRrKCJEZWZhdWx0IG9mZnNldHMgJWQgJWQgJWQgJWQgJWQgJWRcbiIsIGdldF9zMTYoJmNoYW5uZWwtPm9mZnNldHMuZngpLCBnZXRfczE2KCZjaGFubmVsLT5vZmZzZXRzLmZ5KSwgZ2V0X3MxNigmY2hhbm5lbC0+b2Zmc2V0cy5meiksIGdldF9zMTYoJmNoYW5uZWwtPm9mZnNldHMubXgpLCBnZXRfczE2KCZjaGFubmVsLT5vZmZzZXRzLm15KSwgZ2V0X3MxNigmY2hhbm5lbC0+b2Zmc2V0cy5teikpOworCisJCQkJCXNldF9zMTYoJmNoYW5uZWwtPm9mZnNldHMuZngsIDApOworCQkJCQlzZXRfczE2KCZjaGFubmVsLT5vZmZzZXRzLmZ5LCAwKTsKKwkJCQkJc2V0X3MxNigmY2hhbm5lbC0+b2Zmc2V0cy5meiwgMCk7CisJCQkJCXNldF9zMTYoJmNoYW5uZWwtPm9mZnNldHMubXgsIDApOworCQkJCQlzZXRfczE2KCZjaGFubmVsLT5vZmZzZXRzLm15LCAwKTsKKwkJCQkJc2V0X3MxNigmY2hhbm5lbC0+b2Zmc2V0cy5teiwgMCk7CisKKwkJCQkJc2V0X29mZnNldChjaGFubmVsKTsKKworCQkJCQlwLT5zdGF0ZSA9IHN0YXRlX2pyM19kb25lOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIHN0YXRlX2pyM19kb25lOnsKKwkJCQlwb2xsX2RlbGF5X21pbl9tYXgoMTAwMDAsIDIwMDAwKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OnsKKwkJCQlwb2xsX2RlbGF5X21pbl9tYXgoMTAwMCwgMjAwMCk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBqcjNfcGNpX3BvbGxfZGV2KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZGF0YTsKKwlzdHJ1Y3QganIzX3BjaV9kZXZfcHJpdmF0ZSAqZGV2cHJpdiA9IGRldi0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIG5vdzsKKwlpbnQgZGVsYXk7CisJaW50IGk7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZWxheSA9IDEwMDA7CisJbm93ID0gamlmZmllczsKKwkvLyBQb2xsIGFsbCBjaGFubmVscyB0aGF0IGFyZSByZWFkeSB0byBiZSBwb2xsZWQKKwlmb3IgKGkgPSAwOyBpIDwgZGV2cHJpdi0+bl9jaGFubmVsczsgaSsrKSB7CisJCXN0cnVjdCBqcjNfcGNpX3N1YmRldl9wcml2YXRlICpzdWJkZXZwcml2ID0gZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGU7CisJCWlmIChub3cgPiBzdWJkZXZwcml2LT5uZXh0X3RpbWVfbWluKSB7CisJCQlzdHJ1Y3QgcG9sbF9kZWxheV90IHN1Yl9kZWxheTsKKworCQkJc3ViX2RlbGF5ID0ganIzX3BjaV9wb2xsX3N1YmRldmljZSgmZGV2LT5zdWJkZXZpY2VzW2ldKTsKKwkJCXN1YmRldnByaXYtPm5leHRfdGltZV9taW4gPQorCQkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHN1Yl9kZWxheS5taW4pOworCQkJc3ViZGV2cHJpdi0+bmV4dF90aW1lX21heCA9CisJCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoc3ViX2RlbGF5Lm1heCk7CisJCQlpZiAoc3ViX2RlbGF5Lm1heCAmJiBzdWJfZGVsYXkubWF4IDwgZGVsYXkpIHsKKwkJCQkvLyBXYWtlIHVwIGFzIGxhdGUgYXMgcG9zc2libGUgLT4gcG9sbCBhcyBtYW55IGNoYW5uZWxzIGFzCisJCQkJLy8gcG9zc2libGUgYXQgb25jZQorCQkJCWRlbGF5ID0gc3ViX2RlbGF5Lm1heDsKKwkJCX0KKwkJfQorCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJZGV2cHJpdi0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGRlbGF5KTsKKwlhZGRfdGltZXIoJmRldnByaXYtPnRpbWVyKTsKK30KKworc3RhdGljIGludCBqcjNfcGNpX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgcGNpX2RldiAqY2FyZCA9IE5VTEw7CisJaW50IG9wdF9idXMsIG9wdF9zbG90LCBpOworCXN0cnVjdCBqcjNfcGNpX2Rldl9wcml2YXRlICpkZXZwcml2OworCisJcHJpbnRrKCJjb21lZGklZDoganIzX3BjaVxuIiwgZGV2LT5taW5vcik7CisKKwlvcHRfYnVzID0gaXQtPm9wdGlvbnNbMF07CisJb3B0X3Nsb3QgPSBpdC0+b3B0aW9uc1sxXTsKKworCWlmIChzaXplb2Yoc3RydWN0IGpyM19jaGFubmVsKSAhPSAweGMwMCkgeworCQlwcmludGsoInNpemVvZihzdHJ1Y3QganIzX2NoYW5uZWwpID0gJXggW2V4cGVjdGVkICV4XVxuIiwKKwkJCSh1bnNpZ25lZClzaXplb2Yoc3RydWN0IGpyM19jaGFubmVsKSwgMHhjMDApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXN1bHQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBqcjNfcGNpX2Rldl9wcml2YXRlKSk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWNhcmQgPSBOVUxMOworCWRldnByaXYgPSBkZXYtPnByaXZhdGU7CisJaW5pdF90aW1lcigmZGV2cHJpdi0+dGltZXIpOworCXdoaWxlICgxKSB7CisJCWNhcmQgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0pSMywgUENJX0FOWV9JRCwgY2FyZCk7CisJCWlmIChjYXJkID09IE5VTEwpIHsKKwkJCS8qIE5vIGNhcmQgZm91bmQgKi8KKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJc3dpdGNoIChjYXJkLT5kZXZpY2UpIHsKKwkJCWNhc2UgUENJX0RFVklDRV9JRF9KUjNfMV9DSEFOTkVMOnsKKwkJCQkJZGV2cHJpdi0+bl9jaGFubmVscyA9IDE7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSBQQ0lfREVWSUNFX0lEX0pSM18yX0NIQU5ORUw6eworCQkJCQlkZXZwcml2LT5uX2NoYW5uZWxzID0gMjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFBDSV9ERVZJQ0VfSURfSlIzXzNfQ0hBTk5FTDp7CisJCQkJCWRldnByaXYtPm5fY2hhbm5lbHMgPSAzOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgUENJX0RFVklDRV9JRF9KUjNfNF9DSEFOTkVMOnsKKwkJCQkJZGV2cHJpdi0+bl9jaGFubmVscyA9IDQ7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDp7CisJCQkJCWRldnByaXYtPm5fY2hhbm5lbHMgPSAwOworCQkJCX0KKwkJCX0KKwkJCWlmIChkZXZwcml2LT5uX2NoYW5uZWxzID49IDEpIHsKKwkJCQlpZiAob3B0X2J1cyA9PSAwICYmIG9wdF9zbG90ID09IDApIHsKKwkJCQkJLyogVGFrZSBmaXJzdCBhdmFpbGFibGUgY2FyZCAqLworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgaWYgKG9wdF9idXMgPT0gY2FyZC0+YnVzLT5udW1iZXIgJiYKKwkJCQkJb3B0X3Nsb3QgPT0gUENJX1NMT1QoY2FyZC0+ZGV2Zm4pKSB7CisJCQkJCS8qIFRha2UgcmVxdWVzdGVkIGNhcmQgKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWlmICghY2FyZCkgeworCQlwcmludGsoIiBubyBqcjNfcGNpIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+cGNpX2RldiA9IGNhcmQ7CisJCWRldi0+Ym9hcmRfbmFtZSA9ICJqcjNfcGNpIjsKKwl9CisJaWYgKChyZXN1bHQgPSBjb21lZGlfcGNpX2VuYWJsZShjYXJkLCAianIzX3BjaSIpKSA8IDApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldnByaXYtPnBjaV9lbmFibGVkID0gMTsKKwlkZXZwcml2LT5pb2Jhc2UgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChjYXJkLCAwKSwgc2l6ZW9mKHN0cnVjdCBqcjNfdCkpOworCXJlc3VsdCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBkZXZwcml2LT5uX2NoYW5uZWxzKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlkZXYtPm9wZW4gPSBqcjNfcGNpX29wZW47CisJZm9yIChpID0gMDsgaSA8IGRldnByaXYtPm5fY2hhbm5lbHM7IGkrKykgeworCQlkZXYtPnN1YmRldmljZXNbaV0udHlwZSA9IENPTUVESV9TVUJEX0FJOworCQlkZXYtPnN1YmRldmljZXNbaV0uc3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsKKwkJZGV2LT5zdWJkZXZpY2VzW2ldLm5fY2hhbiA9IDggKiA3ICsgMjsKKwkJZGV2LT5zdWJkZXZpY2VzW2ldLmluc25fcmVhZCA9IGpyM19wY2lfYWlfaW5zbl9yZWFkOworCQlkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZSA9CisJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QganIzX3BjaV9zdWJkZXZfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUpIHsKKwkJCXN0cnVjdCBqcjNfcGNpX3N1YmRldl9wcml2YXRlICpwOworCQkJaW50IGo7CisKKwkJCXAgPSBkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZTsKKwkJCXAtPmNoYW5uZWwgPSAmZGV2cHJpdi0+aW9iYXNlLT5jaGFubmVsW2ldLmRhdGE7CisJCQlwcmludGsoInAtPmNoYW5uZWwgJXAgJXAgKCV0eClcbiIsCisJCQkJcC0+Y2hhbm5lbCwgZGV2cHJpdi0+aW9iYXNlLAorCQkJCSgoY2hhciAqKShwLT5jaGFubmVsKSAtCisJCQkJCShjaGFyICopKGRldnByaXYtPmlvYmFzZSkpKTsKKwkJCXAtPmNoYW5uZWxfbm8gPSBpOworCQkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCQkJCWludCBrOworCisJCQkJcC0+cmFuZ2Vbal0ubGVuZ3RoID0gMTsKKwkJCQlwLT5yYW5nZVtqXS5yYW5nZS5taW4gPSAtMTAwMDAwMDsKKwkJCQlwLT5yYW5nZVtqXS5yYW5nZS5tYXggPSAxMDAwMDAwOworCQkJCWZvciAoayA9IDA7IGsgPCA3OyBrKyspIHsKKwkJCQkJcC0+cmFuZ2VfdGFibGVfbGlzdFtqICsgayAqIDhdID0KKwkJCQkJCShzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqKSAmIHAtPnJhbmdlW2pdOworCQkJCQlwLT5tYXhkYXRhX2xpc3RbaiArIGsgKiA4XSA9IDB4N2ZmZjsKKwkJCQl9CisJCQl9CisJCQlwLT5yYW5nZVs4XS5sZW5ndGggPSAxOworCQkJcC0+cmFuZ2VbOF0ucmFuZ2UubWluID0gMDsKKwkJCXAtPnJhbmdlWzhdLnJhbmdlLm1heCA9IDY1NTM2OworCisJCQlwLT5yYW5nZV90YWJsZV9saXN0WzU2XSA9CisJCQkJKHN0cnVjdCBjb21lZGlfbHJhbmdlICopICYgcC0+cmFuZ2VbOF07CisJCQlwLT5yYW5nZV90YWJsZV9saXN0WzU3XSA9CisJCQkJKHN0cnVjdCBjb21lZGlfbHJhbmdlICopICYgcC0+cmFuZ2VbOF07CisJCQlwLT5tYXhkYXRhX2xpc3RbNTZdID0gMHhmZmZmOworCQkJcC0+bWF4ZGF0YV9saXN0WzU3XSA9IDB4ZmZmZjsKKwkJCS8vIENoYW5uZWwgc3BlY2lmaWMgcmFuZ2UgYW5kIG1heGRhdGEKKwkJCWRldi0+c3ViZGV2aWNlc1tpXS5yYW5nZV90YWJsZSA9IDA7CisJCQlkZXYtPnN1YmRldmljZXNbaV0ucmFuZ2VfdGFibGVfbGlzdCA9CisJCQkJcC0+cmFuZ2VfdGFibGVfbGlzdDsKKwkJCWRldi0+c3ViZGV2aWNlc1tpXS5tYXhkYXRhID0gMDsKKwkJCWRldi0+c3ViZGV2aWNlc1tpXS5tYXhkYXRhX2xpc3QgPSBwLT5tYXhkYXRhX2xpc3Q7CisJCX0KKwl9CisKKwkvLyBSZXNldCBEU1AgY2FyZAorCWRldnByaXYtPmlvYmFzZS0+Y2hhbm5lbFswXS5yZXNldCA9IDA7CisKKwlyZXN1bHQgPSBjb21lZGlfbG9hZF9maXJtd2FyZShkZXYsICJqcjNwY2kuaWRtIiwganIzX2Rvd25sb2FkX2Zpcm13YXJlKTsKKwlwcmludGsoIkZpcm1hcmUgbG9hZCAlZFxuIiwgcmVzdWx0KTsKKworCWlmIChyZXN1bHQgPCAwKSB7CisJCWdvdG8gb3V0OworCX0KKwkvLyBUT0RPOiB1c2UgZmlybXdhcmUgdG8gbG9hZCBwcmVmZXJyZWQgb2Zmc2V0IHRhYmxlcy4gU3VnZ2VzdGVkIGZvcm1hdDoKKwkvLyBtb2RlbCBzZXJpYWwgRnggRnkgRnogTXggTXkgTXpcbgorCS8vCisJLy8gY29tZWRpX2xvYWRfZmlybXdhcmUoZGV2LCAianIzX29mZnNldHNfdGFibGUiLCBqcjNfZG93bmxvYWRfZmlybXdhcmUpOworCisJLy8gSXQgdGFrZXMgYSBmZXcgbWlsbGlzZWNvbmRzIGZvciBzb2Z0d2FyZSB0byBzZXR0bGUKKwkvLyBhcyBtdWNoIGFzIHdlIGNhbiByZWFkIGZpcm13YXJlIHZlcnNpb24KKwltc2xlZXBfaW50ZXJydXB0aWJsZSgyNSk7CisJZm9yIChpID0gMDsgaSA8IDB4MTg7IGkrKykgeworCQlwcmludGsoIiVjIiwKKwkJCWdldF91MTYoJmRldnByaXYtPmlvYmFzZS0+Y2hhbm5lbFswXS5kYXRhLgorCQkJCWNvcHlyaWdodFtpXSkgPj4gOCk7CisJfQorCisJLy8gU3RhcnQgY2FyZCB0aW1lcgorCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJc3RydWN0IGpyM19wY2lfc3ViZGV2X3ByaXZhdGUgKnAgPSBkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZTsKKworCQlwLT5uZXh0X3RpbWVfbWluID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKKwkJcC0+bmV4dF90aW1lX21heCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwMDApOworCX0KKworCWRldnByaXYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJZGV2cHJpdi0+dGltZXIuZnVuY3Rpb24gPSBqcjNfcGNpX3BvbGxfZGV2OworCWRldnByaXYtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKTsKKwlhZGRfdGltZXIoJmRldnByaXYtPnRpbWVyKTsKKworICAgICAgb3V0OgorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQganIzX3BjaV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisJc3RydWN0IGpyM19wY2lfZGV2X3ByaXZhdGUgKmRldnByaXYgPSBkZXYtPnByaXZhdGU7CisKKwlwcmludGsoImNvbWVkaSVkOiBqcjNfcGNpOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCWlmIChkZXZwcml2KSB7CisJCWRlbF90aW1lcl9zeW5jKCZkZXZwcml2LT50aW1lcik7CisKKwkJaWYgKGRldi0+c3ViZGV2aWNlcykgeworCQkJZm9yIChpID0gMDsgaSA8IGRldnByaXYtPm5fY2hhbm5lbHM7IGkrKykgeworCQkJCWtmcmVlKGRldi0+c3ViZGV2aWNlc1tpXS5wcml2YXRlKTsKKwkJCX0KKwkJfQorCisJCWlmIChkZXZwcml2LT5pb2Jhc2UpIHsKKwkJCWlvdW5tYXAoKHZvaWQgKilkZXZwcml2LT5pb2Jhc2UpOworCQl9CisJCWlmIChkZXZwcml2LT5wY2lfZW5hYmxlZCkgeworCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOworCQl9CisKKwkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKKwkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9qcjNfcGNpLCBqcjNfcGNpX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTg1ZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2pyM19wY2kuaApAQCAtMCwwICsxLDY4MSBAQAorLyogSGVscGVyIHR5cGVzIHRvIHRha2UgY2FyZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSBEU1AgY2FyZCBtZW1vcnkKKyAqIGlzIDE2IGJpdHMsIGJ1dCBhbGlnbmVkIG9uIGEgMzIgYml0IFBDSSBib3VuZGFyeQorICovCisKK3N0YXRpYyBpbmxpbmUgdTE2IGdldF91MTYodm9sYXRpbGUgY29uc3QgdTMyICogcCkKK3sKKwlyZXR1cm4gKHUxNikgcmVhZGwocCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdTE2KHZvbGF0aWxlIHUzMiAqIHAsIHUxNiB2YWwpCit7CisJd3JpdGVsKHZhbCwgcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgczE2IGdldF9zMTYodm9sYXRpbGUgY29uc3QgczMyICogcCkKK3sKKwlyZXR1cm4gKHMxNikgcmVhZGwocCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfczE2KHZvbGF0aWxlIHMzMiAqIHAsIHMxNiB2YWwpCit7CisJd3JpdGVsKHZhbCwgcCk7Cit9CisKKy8qIFRoZSByYXcgZGF0YSBpcyBzdG9yZWQgaW4gYSBmb3JtYXQgd2hpY2ggZmFjaWxpdGF0ZXMgcmFwaWQKKyAqIHByb2Nlc3NpbmcgYnkgdGhlIEpSMyBEU1AgY2hpcC4gVGhlIHJhd19jaGFubmVsIHN0cnVjdHVyZSBzaG93cyB0aGUKKyAqIGZvcm1hdCBmb3IgYSBzaW5nbGUgY2hhbm5lbCBvZiBkYXRhLiBFYWNoIGNoYW5uZWwgdGFrZXMgZm91ciwKKyAqIHR3by1ieXRlIHdvcmRzLgorICoKKyAqIFJhd190aW1lIGlzIGFuIHVuc2lnbmVkIGludGVnZXIgd2hpY2ggc2hvd3MgdGhlIHZhbHVlIG9mIHRoZSBKUjMKKyAqIERTUCdzIGludGVybmFsIGNsb2NrIGF0IHRoZSB0aW1lIHRoZSBzYW1wbGUgd2FzIHJlY2VpdmVkLiBUaGUgY2xvY2sKKyAqIHJ1bnMgYXQgMS8xMCB0aGUgSlIzIERTUCBjeWNsZSB0aW1lLiBKUjMncyBzbG93ZXN0IERTUCBydW5zIGF0IDEwCisgKiBNaHouIEF0IDEwIE1oeiByYXdfdGltZSB3b3VsZCB0aGVyZWZvcmUgY2xvY2sgYXQgMSBNaHouCisgKgorICogUmF3X2RhdGEgaXMgdGhlIHJhdyBkYXRhIHJlY2VpdmVkIGRpcmVjdGx5IGZyb20gdGhlIHNlbnNvci4gVGhlCisgKiBzZW5zb3IgZGF0YSBzdHJlYW0gaXMgY2FwYWJsZSBvZiByZXByZXNlbnRpbmcgMTYgZGlmZmVyZW50CisgKiBjaGFubmVscy4gQ2hhbm5lbCAwIHNob3dzIHRoZSBleGNpdGF0aW9uIHZvbHRhZ2UgYXQgdGhlIHNlbnNvci4gSXQKKyAqIGlzIHVzZWQgdG8gcmVndWxhdGUgdGhlIHZvbHRhZ2Ugb3ZlciB2YXJpb3VzIGNhYmxlIGxlbmd0aHMuCisgKiBDaGFubmVscyAxLTYgY29udGFpbiB0aGUgY291cGxlZCBmb3JjZSBkYXRhIEZ4IHRocm91Z2ggTXouIENoYW5uZWwKKyAqIDcgY29udGFpbnMgdGhlIHNlbnNvcidzIGNhbGlicmF0aW9uIGRhdGEuIFRoZSB1c2Ugb2YgY2hhbm5lbHMgOC0xNQorICogdmFyaWVzIHdpdGggZGlmZmVyZW50IHNlbnNvcnMuCisgKi8KKworc3RydWN0IHJhd19jaGFubmVsIHsKKwl1MzIgcmF3X3RpbWU7CisJczMyIHJhd19kYXRhOworCXMzMiByZXNlcnZlZFsyXTsKK307CisKKy8qIFRoZSBmb3JjZV9hcnJheSBzdHJ1Y3R1cmUgc2hvd3MgdGhlIGxheW91dCBmb3IgdGhlIGRlY291cGxlZCBhbmQKKyAqIGZpbHRlcmVkIGZvcmNlIGRhdGEuCisgKi8KK3N0cnVjdCBmb3JjZV9hcnJheSB7CisJczMyIGZ4OworCXMzMiBmeTsKKwlzMzIgZno7CisJczMyIG14OworCXMzMiBteTsKKwlzMzIgbXo7CisJczMyIHYxOworCXMzMiB2MjsKK307CisKKy8qIFRoZSBzaXhfYXhpc19hcnJheSBzdHJ1Y3R1cmUgc2hvd3MgdGhlIGxheW91dCBmb3IgdGhlIG9mZnNldHMgYW5kCisgKiB0aGUgZnVsbCBzY2FsZXMuCisgKi8KK3N0cnVjdCBzaXhfYXhpc19hcnJheSB7CisJczMyIGZ4OworCXMzMiBmeTsKKwlzMzIgZno7CisJczMyIG14OworCXMzMiBteTsKKwlzMzIgbXo7Cit9OworCisvKiBWRUNUX0JJVFMgKi8KKy8qIFRoZSB2ZWN0X2JpdHMgc3RydWN0dXJlIHNob3dzIHRoZSBsYXlvdXQgZm9yIGluZGljYXRpbmcKKyAqIHdoaWNoIGF4ZXMgdG8gdXNlIGluIGNvbXB1dGluZyB0aGUgdmVjdG9ycy4gRWFjaCBiaXQgc2lnbmlmaWVzCisgKiBzZWxlY3Rpb24gb2YgYSBzaW5nbGUgYXhpcy4gVGhlIFYxeCBheGlzIGJpdCBjb3JyZXNwb25kcyB0byBhIGhleAorICogdmFsdWUgb2YgMHgwMDAxIGFuZCB0aGUgVjJ6IGJpdCBjb3JyZXNwb25kcyB0byBhIGhleCB2YWx1ZSBvZgorICogMHgwMDIwLiBFeGFtcGxlOiB0byBzcGVjaWZ5IHRoZSBheGVzIFYxeCwgVjF5LCBWMngsIGFuZCBWMnogdGhlCisgKiBwYXR0ZXJuIHdvdWxkIGJlIDB4MDAyYi4gVmVjdG9yIDEgZGVmYXVsdHMgdG8gYSBmb3JjZSB2ZWN0b3IgYW5kCisgKiB2ZWN0b3IgMiBkZWZhdWx0cyB0byBhIG1vbWVudCB2ZWN0b3IuIEl0IGlzIHBvc3NpYmxlIHRvIGNoYW5nZSBvbmUKKyAqIG9yIHRoZSBvdGhlciBzbyB0aGF0IHR3byBmb3JjZSB2ZWN0b3JzIG9yIHR3byBtb21lbnQgdmVjdG9ycyBhcmUKKyAqIGNhbGN1bGF0ZWQuIFNldHRpbmcgdGhlIGNoYW5nZVYxIGJpdCBvciB0aGUgY2hhbmdlVjIgYml0IHdpbGwKKyAqIGNoYW5nZSB0aGF0IHZlY3RvciB0byBiZSB0aGUgb3Bwb3NpdGUgb2YgaXRzIGRlZmF1bHQuIFRoZXJlZm9yZSB0bworICogaGF2ZSB0d28gZm9yY2UgdmVjdG9ycywgc2V0IGNoYW5nZVYxIHRvIDEuCisgKi8KKworLyogdmVjdF9iaXRzIGFwcGVhcnMgdG8gYmUgdW51c2VkIGF0IHRoaXMgdGltZSAqLworZW51bSB7CisJZnggPSAweDAwMDEsCisJZnkgPSAweDAwMDIsCisJZnogPSAweDAwMDQsCisJbXggPSAweDAwMDgsCisJbXkgPSAweDAwMTAsCisJbXogPSAweDAwMjAsCisJY2hhbmdlVjIgPSAweDAwNDAsCisJY2hhbmdlVjEgPSAweDAwODAKK30gdmVjdF9iaXRzX3Q7CisKKy8qIFdBUk5JTkdfQklUUyAqLworLyogVGhlIHdhcm5pbmdfYml0cyBzdHJ1Y3R1cmUgc2hvd3MgdGhlIGJpdCBwYXR0ZXJuIGZvciB0aGUgd2FybmluZworICogd29yZC4gVGhlIGJpdCBmaWVsZHMgYXJlIHNob3duIGZyb20gYml0IDAgKGxzYikgdG8gYml0IDE1IChtc2IpLgorICovCisKKy8qICBYWF9ORUFSX1NFVCAqLworLyogVGhlIHh4X25lYXJfc2F0IGJpdHMgc2lnbmlmeSB0aGF0IHRoZSBpbmRpY2F0ZWQgYXhpcyBoYXMgcmVhY2hlZCBvcgorICogZXhjZWVkZWQgdGhlIG5lYXIgc2F0dXJhdGlvbiB2YWx1ZS4KKyAqLworCitlbnVtIHsKKwlmeF9uZWFyX3NhdCA9IDB4MDAwMSwKKwlmeV9uZWFyX3NhdCA9IDB4MDAwMiwKKwlmel9uZWFyX3NhdCA9IDB4MDAwNCwKKwlteF9uZWFyX3NhdCA9IDB4MDAwOCwKKwlteV9uZWFyX3NhdCA9IDB4MDAxMCwKKwltel9uZWFyX3NhdCA9IDB4MDAyMAorfSB3YXJuaW5nX2JpdHNfdDsKKworLyogIEVSUk9SX0JJVFMgKi8KKy8qICBYWF9TQVQgKi8KKy8qICBNRU1PUllfRVJST1IgKi8KKy8qICBTRU5TT1JfQ0hBTkdFICovCisKKy8qIFRoZSBlcnJvcl9iaXRzIHN0cnVjdHVyZSBzaG93cyB0aGUgYml0IHBhdHRlcm4gZm9yIHRoZSBlcnJvciB3b3JkLgorICogVGhlIGJpdCBmaWVsZHMgYXJlIHNob3duIGZyb20gYml0IDAgKGxzYikgdG8gYml0IDE1IChtc2IpLiBUaGUKKyAqIHh4X3NhdCBiaXRzIHNpZ25pZnkgdGhhdCB0aGUgaW5kaWNhdGVkIGF4aXMgaGFzIHJlYWNoZWQgb3IgZXhjZWVkZWQKKyAqIHRoZSBzYXR1cmF0aW9uIHZhbHVlLiBUaGUgbWVtb3J5X2Vycm9yIGJpdCBpbmRpY2F0ZXMgdGhhdCBhIHByb2JsZW0KKyAqIHdhcyBkZXRlY3RlZCBpbiB0aGUgb24tYm9hcmQgUkFNIGR1cmluZyB0aGUgcG93ZXItdXAKKyAqIGluaXRpYWxpemF0aW9uLiBUaGUgc2Vuc29yX2NoYW5nZSBiaXQgaW5kaWNhdGVzIHRoYXQgYSBzZW5zb3Igb3RoZXIKKyAqIHRoYW4gdGhlIG9uZSBvcmlnaW5hbGx5IHBsdWdnZWQgaW4gaGFzIHBhc3NlZCBpdHMgQ1JDIGNoZWNrLiBUaGlzCisgKiBiaXQgbGF0Y2hlcywgYW5kIG11c3QgYmUgcmVzZXQgYnkgdGhlIHVzZXIuCisgKgorICovCisKKy8qICBTWVNURU1fQlVTWSAqLworCisvKiBUaGUgc3lzdGVtX2J1c3kgYml0IGluZGljYXRlcyB0aGF0IHRoZSBKUjMgRFNQIGlzIGN1cnJlbnRseSBidXN5CisgKiBhbmQgaXMgbm90IGNhbGN1bGF0aW5nIGZvcmNlIGRhdGEuIFRoaXMgb2NjdXJzIHdoZW4gYSBuZXcKKyAqIGNvb3JkaW5hdGUgdHJhbnNmb3JtYXRpb24sIG9yIG5ldyBzZW5zb3IgZnVsbCBzY2FsZSBpcyBzZXQgYnkgdGhlCisgKiB1c2VyLiBBIHZlcnkgZmFzdCBzeXN0ZW0gdXNpbmcgdGhlIGZvcmNlIGRhdGEgZm9yIGZlZWRiYWNrIG1pZ2h0CisgKiBiZWNvbWUgdW5zdGFibGUgZHVyaW5nIHRoZSBhcHByb3hpbWF0ZWx5IDQgbXMgbmVlZGVkIHRvIGFjY29tcGxpc2gKKyAqIHRoZXNlIGNhbGN1bGF0aW9ucy4gVGhpcyBiaXQgd2lsbCBhbHNvIGJlY29tZSBhY3RpdmUgd2hlbiBhIG5ldworICogc2Vuc29yIGlzIHBsdWdnZWQgaW4gYW5kIHRoZSBzeXN0ZW0gbmVlZHMgdG8gcmVjYWxjdWxhdGUgdGhlCisgKiBjYWxpYnJhdGlvbiBDUkMuCisgKi8KKworLyogIENBTF9DUkNfQkFEICovCisKKy8qIFRoZSBjYWxfY3JjX2JhZCBiaXQgaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGlicmF0aW9uIENSQyBoYXMgbm90CisgKiBjYWxjdWxhdGVkIHRvIHplcm8uIENSQyBpcyBzaG9ydCBmb3IgY3ljbGljIHJlZHVuZGFuY3kgY29kZS4gSXQgaXMKKyAqIGEgbWV0aG9kIGZvciBkZXRlcm1pbmluZyB0aGUgaW50ZWdyaXR5IG9mIG1lc3NhZ2VzIGluIGRhdGEKKyAqIGNvbW11bmljYXRpb24uIFRoZSBjYWxpYnJhdGlvbiBkYXRhIHN0b3JlZCBpbnNpZGUgdGhlIHNlbnNvciBpcworICogdHJhbnNtaXR0ZWQgdG8gdGhlIEpSMyBEU1AgYWxvbmcgd2l0aCB0aGUgc2Vuc29yIGRhdGEuIFRoZQorICogY2FsaWJyYXRpb24gZGF0YSBoYXMgYSBDUkMgYXR0YWNoZWQgdG8gdGhlIGVuZCBvZiBpdCwgdG8gYXNzaXN0IGluCisgKiBkZXRlcm1pbmluZyB0aGUgY29tcGxldGVuZXNzIGFuZCBpbnRlZ3JpdHkgb2YgdGhlIGNhbGlicmF0aW9uIGRhdGEKKyAqIHJlY2VpdmVkIGZyb20gdGhlIHNlbnNvci4gVGhlcmUgYXJlIHR3byByZWFzb25zIHRoZSBDUkMgbWF5IG5vdAorICogaGF2ZSBjYWxjdWxhdGVkIHRvIHplcm8uIFRoZSBmaXJzdCBpcyB0aGF0IGFsbCB0aGUgY2FsaWJyYXRpb24gZGF0YQorICogaGFzIG5vdCB5ZXQgYmVlbiByZWNlaXZlZCwgdGhlIHNlY29uZCBpcyB0aGF0IHRoZSBjYWxpYnJhdGlvbiBkYXRhCisgKiBoYXMgYmVlbiBjb3JydXB0ZWQuIEEgdHlwaWNhbCBzZW5zb3IgdHJhbnNtaXRzIHRoZSBlbnRpcmUgY29udGVudHMKKyAqIG9mIGl0cyBjYWxpYnJhdGlvbiBtYXRyaXggb3ZlciAzMCB0aW1lcyBhIHNlY29uZC4gVGhlcmVmb3JlLCBpZgorICogdGhpcyBiaXQgaXMgbm90IHplcm8gd2l0aGluIGEgY291cGxlIG9mIHNlY29uZHMgYWZ0ZXIgdGhlIHNlbnNvcgorICogaGFzIGJlZW4gcGx1Z2dlZCBpbiwgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIHNlbnNvcidzCisgKiBjYWxpYnJhdGlvbiBkYXRhLgorICovCisKKy8qIFdBVENIX0RPRyAqLworLyogV0FUQ0hfRE9HMiAqLworCisvKiBUaGUgd2F0Y2hfZG9nIGFuZCB3YXRjaF9kb2cyIGJpdHMgYXJlIHNlbnNvciwgbm90IHByb2Nlc3Nvciwgd2F0Y2gKKyAqIGRvZyBiaXRzLiBXYXRjaF9kb2cgaW5kaWNhdGVzIHRoYXQgdGhlIHNlbnNvciBkYXRhIGxpbmUgc2VlbXMgdG8gYmUKKyAqIGFjdGluZyBjb3JyZWN0bHksIHdoaWxlIHdhdGNoX2RvZzIgaW5kaWNhdGVzIHRoYXQgc2Vuc29yIGRhdGEgYW5kCisgKiBjbG9jayBhcmUgYmVpbmcgcmVjZWl2ZWQuIEl0IGlzIHBvc3NpYmxlIGZvciB3YXRjaF9kb2cyIHRvIGdvIG9mZgorICogd2hpbGUgd2F0Y2hfZG9nIGRvZXMgbm90LiBUaGlzIHdvdWxkIGluZGljYXRlIGFuIGltcHJvcGVyIGNsb2NrCisgKiBzaWduYWwsIHdoaWxlIGRhdGEgaXMgYWN0aW5nIGNvcnJlY3RseS4gSWYgZWl0aGVyIHdhdGNoIGRvZyBiYXJrcywKKyAqIHRoZSBzZW5zb3IgZGF0YSBpcyBub3QgYmVpbmcgcmVjZWl2ZWQgY29ycmVjdGx5LgorICovCisKK2VudW0gZXJyb3JfYml0c190IHsKKwlmeF9zYXQgPSAweDAwMDEsCisJZnlfc2F0ID0gMHgwMDAyLAorCWZ6X3NhdCA9IDB4MDAwNCwKKwlteF9zYXQgPSAweDAwMDgsCisJbXlfc2F0ID0gMHgwMDEwLAorCW16X3NhdCA9IDB4MDAyMCwKKwltZW1vcnlfZXJyb3IgPSAweDA0MDAsCisJc2Vuc29yX2NoYW5nZSA9IDB4MDgwMCwKKwlzeXN0ZW1fYnVzeSA9IDB4MTAwMCwKKwljYWxfY3JjX2JhZCA9IDB4MjAwMCwKKwl3YXRjaF9kb2cyID0gMHg0MDAwLAorCXdhdGNoX2RvZyA9IDB4ODAwMAorfTsKKworLyogIFRIUkVTSF9TVFJVQ1QgKi8KKworLyogVGhpcyBzdHJ1Y3R1cmUgc2hvd3MgdGhlIGxheW91dCBmb3IgYSBzaW5nbGUgdGhyZXNob2xkIHBhY2tldCBpbnNpZGUgb2YgYQorICogbG9hZCBlbnZlbG9wZS4gRWFjaCBsb2FkIGVudmVsb3BlIGNhbiBjb250YWluIHNldmVyYWwgdGhyZXNob2xkIHN0cnVjdHVyZXMuCisgKiAxLiBkYXRhX2FkZHJlc3MgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGRhdGEgZm9yIHRoYXQgdGhyZXNob2xkLiBUaGlzCisgKiAgICBpbmNsdWRlcyBmaWx0ZXJlZCwgdW5maWx0ZXJlZCwgcmF3LCByYXRlLCBjb3VudGVycywgZXJyb3IgYW5kIHdhcm5pbmcgZGF0YQorICogMi4gdGhyZXNob2xkIGlzIHRoZSBpcyB0aGUgdmFsdWUgYXQgd2hpY2gsIGlmIGRhdGEgaXMgYWJvdmUgb3IgYmVsb3csIHRoZQorICogICAgYml0cyB3aWxsIGJlIHNldCAuLi4gKHBhZy4yNCkuCisgKiAzLiBiaXRfcGF0dGVybiBjb250YWlucyB0aGUgYml0cyB0aGF0IHdpbGwgYmUgc2V0IGlmIHRoZSB0aHJlc2hvbGQgdmFsdWUgaXMKKyAqICAgIG1ldCBvciBleGNlZWRlZC4KKyAqLworCitzdHJ1Y3QgdGhyZXNoX3N0cnVjdCB7CisJczMyIGRhdGFfYWRkcmVzczsKKwlzMzIgdGhyZXNob2xkOworCXMzMiBiaXRfcGF0dGVybjsKK307CisKKy8qICBMRV9TVFJVQ1QgKi8KKworLyogTGF5b3V0IG9mIGEgbG9hZCBlbnZlbG9wZWQgcGFja2V0LiBGb3VyIHRocmVzaG9sZHMgYXJlIHNob3dlZCAuLi4gZm9yIG1vcmUKKyAqIHNlZSBtYW51YWwgKHBhZy4yNSkKKyAqIDEuIGxhdGNoX2JpdHMgaXMgYSBiaXQgcGF0dGVybiB0aGF0IHNob3cgd2hpY2ggYml0cyB0aGUgdXNlciB3YW50cyB0byBsYXRjaC4KKyAqICAgIFRoZSBsYXRjaGVkIGJpdHMgd2lsbCBub3QgYmUgcmVzZXQgb25jZSB0aGUgdGhyZXNob2xkIHdoaWNoIHNldCB0aGVtIGlzCisgKiAgICBubyBsb25nZXIgdHJ1ZS4gSW4gdGhhdCBjYXNlIHRoZSB1c2VyIG11c3QgcmVzZXQgdGhlbSB1c2luZyB0aGUgcmVzZXRfYml0CisgKiAgICBjb21tYW5kLgorICogMi4gbnVtYmVyX29mX3h4X3RocmVzaG9sZHMgc3BlY2lmeSBob3cgbWFueSBHRS9MRSB0aHJlc2hvbGQgdGhlcmUgYXJlLgorICovCitzdHJ1Y3QgbGVfc3RydWN0IHsKKwlzMzIgbGF0Y2hfYml0czsKKwlzMzIgbnVtYmVyX29mX2dlX3RocmVzaG9sZHM7CisJczMyIG51bWJlcl9vZl9sZV90aHJlc2hvbGRzOworCXN0cnVjdCB0aHJlc2hfc3RydWN0IHRocmVzaG9sZHNbNF07CisJczMyIHJlc2VydmVkOworfTsKKworLyogIExJTktfVFlQRVMgKi8KKy8qIExpbmsgdHlwZXMgaXMgYW4gZW51bWVyYXRlZCB2YWx1ZSBzaG93aW5nIHRoZSBkaWZmZXJlbnQgcG9zc2libGUgdHJhbnNmb3JtCisgKiBsaW5rIHR5cGVzLgorICogMCAtIGVuZCB0cmFuc2Zvcm0gcGFja2V0CisgKiAxIC0gdHJhbnNsYXRlIGFsb25nIFggYXhpcyAoVFgpCisgKiAyIC0gdHJhbnNsYXRlIGFsb25nIFkgYXhpcyAoVFkpCisgKiAzIC0gdHJhbnNsYXRlIGFsb25nIFogYXhpcyAoVFopCisgKiA0IC0gcm90YXRlIGFib3V0IFggYXhpcyAoUlgpCisgKiA1IC0gcm90YXRlIGFib3V0IFkgYXhpcyAoUlkpCisgKiA2IC0gcm90YXRlIGFib3V0IFogYXhpcyAoUlopCisgKiA3IC0gbmVnYXRlIGFsbCBheGVzIChORUcpCisgKi8KKworZW51bSBsaW5rX3R5cGVzIHsKKwllbmRfeF9mb3JtLAorCXR4LAorCXR5LAorCXR6LAorCXJ4LAorCXJ5LAorCXJ6LAorCW5lZworfTsKKworLyogIFRSQU5TRk9STSAqLworLyogIFN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgdHJhbnNmb3JtLiAqLworc3RydWN0IGludGVybl90cmFuc2Zvcm0geworCXN0cnVjdCB7CisJCXUzMiBsaW5rX3R5cGU7CisJCXMzMiBsaW5rX2Ftb3VudDsKKwl9IGxpbmtbOF07Cit9OworCisvKiAgSlIzIGZvcmNlL3RvcnF1ZSBzZW5zb3IgZGF0YSBkZWZpbml0aW9uLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgc2Vuc29yIGFuZCAqLworLyogIGhhcmR3YXJlIG1hbnVhbHMuICovCisKK3N0cnVjdCBqcjNfY2hhbm5lbCB7CisJLyogIFJhd19jaGFubmVscyBpcyB0aGUgYXJlYSB1c2VkIHRvIHN0b3JlIHRoZSByYXcgZGF0YSBjb21pbmcgZnJvbSAqLworCS8qICB0aGUgc2Vuc29yLiAqLworCisJc3RydWN0IHJhd19jaGFubmVsIHJhd19jaGFubmVsc1sxNl07CS8qIG9mZnNldCAweDAwMDAgKi8KKworCS8qICBDb3B5cmlnaHQgaXMgYSBudWxsIHRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIEpSMyAqLworCS8qICBjb3B5cmlnaHQgbm90aWNlLiAqLworCisJdTMyIGNvcHlyaWdodFsweDAwMThdOwkvKiBvZmZzZXQgMHgwMDQwICovCisJczMyIHJlc2VydmVkMVsweDAwMDhdOwkvKiBvZmZzZXQgMHgwMDU4ICovCisKKwkvKiBTaHVudHMgY29udGFpbnMgdGhlIHNlbnNvciBzaHVudCByZWFkaW5ncy4gU29tZSBKUjMgc2Vuc29ycyBoYXZlCisJICogdGhlIGFiaWxpdHkgdG8gaGF2ZSB0aGVpciBnYWlucyBhZGp1c3RlZC4gVGhpcyBhbGxvd3MgdGhlCisJICogaGFyZHdhcmUgZnVsbCBzY2FsZXMgdG8gYmUgYWRqdXN0ZWQgdG8gcG90ZW50aWFsbHkgYWxsb3cKKwkgKiBiZXR0ZXIgcmVzb2x1dGlvbiBvciBkeW5hbWljIHJhbmdlLiBGb3Igc2Vuc29ycyB0aGF0IGhhdmUKKwkgKiB0aGlzIGFiaWxpdHksIHRoZSBnYWluIG9mIGVhY2ggc2Vuc29yIGNoYW5uZWwgaXMgbWVhc3VyZWQgYXQKKwkgKiB0aGUgdGltZSBvZiBjYWxpYnJhdGlvbiB1c2luZyBhIHNodW50IHJlc2lzdG9yLiBUaGUgc2h1bnQKKwkgKiByZXNpc3RvciBpcyBwbGFjZWQgYWNyb3NzIG9uZSBhcm0gb2YgdGhlIHJlc2lzdG9yIGJyaWRnZSwgYW5kCisJICogdGhlIHJlc3VsdGluZyBjaGFuZ2UgaW4gdGhlIG91dHB1dCBvZiB0aGF0IGNoYW5uZWwgaXMKKwkgKiBtZWFzdXJlZC4gVGhpcyBtZWFzdXJlbWVudCBpcyBjYWxsZWQgdGhlIHNodW50IHJlYWRpbmcsIGFuZAorCSAqIGlzIHJlY29yZGVkIGhlcmUuIElmIHRoZSB1c2VyIGhhcyBjaGFuZ2VkIHRoZSBnYWluIG9mIHRoZSAvLworCSAqIHNlbnNvciwgYW5kIG1hZGUgbmV3IHNodW50IG1lYXN1cmVtZW50cywgdGhvc2Ugc2h1bnQKKwkgKiBtZWFzdXJlbWVudHMgY2FuIGJlIHBsYWNlZCBoZXJlLiBUaGUgSlIzIERTUCB3aWxsIHRoZW4gc2NhbGUKKwkgKiB0aGUgY2FsaWJyYXRpb24gbWF0cml4IHN1Y2ggc28gdGhhdCB0aGUgZ2FpbnMgYXJlIGFnYWluCisJICogcHJvcGVyIGZvciB0aGUgaW5kaWNhdGVkIHNodW50IHJlYWRpbmdzLiBJZiBzaHVudHMgaXMgMCwgdGhlbgorCSAqIHRoZSBzZW5zb3IgY2Fubm90IGhhdmUgaXRzIGdhaW4gY2hhbmdlZC4gRm9yIGRldGFpbHMgb24KKwkgKiBjaGFuZ2luZyB0aGUgc2Vuc29yIGdhaW4sIGFuZCBtYWtpbmcgc2h1bnRzIHJlYWRpbmdzLCBwbGVhc2UKKwkgKiBzZWUgdGhlIHNlbnNvciBtYW51YWwuIFRvIG1ha2UgdGhlc2UgdmFsdWVzIHRha2UgZWZmZWN0IHRoZQorCSAqIHVzZXIgbXVzdCBjYWxsIGVpdGhlciBjb21tYW5kICg1KSB1c2UgdHJhbnNmb3JtICMgKHBnLiAzMykgb3IKKwkgKiBjb21tYW5kICgxMCkgc2V0IG5ldyBmdWxsIHNjYWxlcyAocGcuIDM4KS4KKwkgKi8KKworCXN0cnVjdCBzaXhfYXhpc19hcnJheSBzaHVudHM7CS8qIG9mZnNldCAweDAwNjAgKi8KKwlzMzIgcmVzZXJ2ZWQyWzJdOwkvKiBvZmZzZXQgMHgwMDY2ICovCisKKwkvKiBEZWZhdWx0X0ZTIGNvbnRhaW5zIHRoZSBmdWxsIHNjYWxlIHRoYXQgaXMgdXNlZCBpZiB0aGUgdXNlciBkb2VzICovCisJLyogbm90IHNldCBhIGZ1bGwgc2NhbGUuICovCisKKwlzdHJ1Y3Qgc2l4X2F4aXNfYXJyYXkgZGVmYXVsdF9GUzsJLyogb2Zmc2V0IDB4MDA2OCAqLworCXMzMiByZXNlcnZlZDM7CS8qIG9mZnNldCAweDAwNmUgKi8KKworCS8qIExvYWRfZW52ZWxvcGVfbnVtIGlzIHRoZSBsb2FkIGVudmVsb3BlIG51bWJlciB0aGF0IGlzIGN1cnJlbnRseQorCSAqIGluIHVzZS4gVGhpcyB2YWx1ZSBpcyBzZXQgYnkgdGhlIHVzZXIgYWZ0ZXIgb25lIG9mIHRoZSBsb2FkCisJICogZW52ZWxvcGVzIGhhcyBiZWVuIGluaXRpYWxpemVkLgorCSAqLworCisJczMyIGxvYWRfZW52ZWxvcGVfbnVtOwkvKiBvZmZzZXQgMHgwMDZmICovCisKKwkvKiBNaW5fZnVsbF9zY2FsZSBpcyB0aGUgcmVjb21tZW5kIG1pbmltdW0gZnVsbCBzY2FsZS4gKi8KKworCS8qIFRoZXNlIHZhbHVlcyBpbiBjb25qdW5jdGlvbiB3aXRoIG1heF9mdWxsX3NjYWxlIChwZy4gOSkgaGVscHMKKwkgKiBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHZhbHVlIGZvciBzZXR0aW5nIHRoZSBmdWxsIHNjYWxlcy4gVGhlCisJICogc29mdHdhcmUgYWxsb3dzIHRoZSB1c2VyIHRvIHNldCB0aGUgc2Vuc29yIGZ1bGwgc2NhbGUgdG8gYW4KKwkgKiBhcmJpdHJhcnkgdmFsdWUuIEJ1dCBzZXR0aW5nIHRoZSBmdWxsIHNjYWxlcyBoYXMgc29tZSBoYXphcmRzLiBJZgorCSAqIHRoZSBmdWxsIHNjYWxlIGlzIHNldCB0b28gbG93LCB0aGUgZGF0YSB3aWxsIHNhdHVyYXRlCisJICogcHJlbWF0dXJlbHksIGFuZCBkeW5hbWljIHJhbmdlIHdpbGwgYmUgbG9zdC4gSWYgdGhlIGZ1bGwgc2NhbGUgaXMKKwkgKiBzZXQgdG9vIGhpZ2gsIHRoZW4gcmVzb2x1dGlvbiBpcyBsb3N0IGFzIHRoZSBkYXRhIGlzIHNoaWZ0ZWQgdG8KKwkgKiB0aGUgcmlnaHQgYW5kIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIGFyZSBsb3N0LiBUaGVyZWZvcmUgdGhlCisJICogbWF4aW11bSBmdWxsIHNjYWxlIGlzIHRoZSBtYXhpbXVtIHZhbHVlIGF0IHdoaWNoIG5vIHJlc29sdXRpb24gaXMKKwkgKiBsb3N0LCBhbmQgdGhlIG1pbmltdW0gZnVsbCBzY2FsZSBpcyB0aGUgdmFsdWUgYXQgd2hpY2ggdGhlIGRhdGEKKwkgKiB3aWxsIG5vdCBzYXR1cmF0ZSBwcmVtYXR1cmVseS4gVGhlc2UgdmFsdWVzIGFyZSBjYWxjdWxhdGVkCisJICogd2hlbmV2ZXIgYSBuZXcgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBpcyBjYWxjdWxhdGVkLiBJdCBpcworCSAqIHBvc3NpYmxlIGZvciB0aGUgcmVjb21tZW5kZWQgbWF4aW11bSB0byBiZSBsZXNzIHRoYW4gdGhlCisJICogcmVjb21tZW5kZWQgbWluaW11bS4gVGhpcyBjb21lcyBhYm91dCBwcmltYXJpbHkgd2hlbiB1c2luZworCSAqIGNvb3JkaW5hdGUgdHJhbnNsYXRpb25zLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBpdCBtZWFucyB0aGF0IGFueQorCSAqIGZ1bGwgc2NhbGUgc2VsZWN0aW9uIHdpbGwgYmUgYSBjb21wcm9taXNlIGJldHdlZW4gZHluYW1pYyByYW5nZQorCSAqIGFuZCByZXNvbHV0aW9uLiBJdCBpcyB1c3VhbGx5IHJlY29tbWVuZGVkIHRvIGNvbXByb21pc2UgaW4gZmF2b3IKKwkgKiBvZiByZXNvbHV0aW9uIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHJlY29tbWVuZCBtYXhpbXVtIGZ1bGwgc2NhbGUKKwkgKiBzaG91bGQgYmUgY2hvc2VuLgorCSAqCisJICogV0FSTklORzogQmUgc3VyZSB0aGF0IHRoZSBmdWxsIHNjYWxlIGlzIG5vIGxlc3MgdGhhbiAwLjQlIG9mIHRoZQorCSAqIHJlY29tbWVuZGVkIG1pbmltdW0gZnVsbCBzY2FsZS4gRnVsbCBzY2FsZXMgYmVsb3cgdGhpcyB2YWx1ZSB3aWxsCisJICogY2F1c2UgZXJyb25lb3VzIHJlc3VsdHMuCisJICovCisKKwlzdHJ1Y3Qgc2l4X2F4aXNfYXJyYXkgbWluX2Z1bGxfc2NhbGU7CS8qIG9mZnNldCAweDAwNzAgKi8KKwlzMzIgcmVzZXJ2ZWQ0OwkvKiBvZmZzZXQgMHgwMDc2ICovCisKKwkvKiBUcmFuc2Zvcm1fbnVtIGlzIHRoZSB0cmFuc2Zvcm0gbnVtYmVyIHRoYXQgaXMgY3VycmVudGx5IGluIHVzZS4KKwkgKiBUaGlzIHZhbHVlIGlzIHNldCBieSB0aGUgSlIzIERTUCBhZnRlciB0aGUgdXNlciBoYXMgdXNlZCBjb21tYW5kCisJICogKDUpIHVzZSB0cmFuc2Zvcm0gIyAocGcuIDMzKS4KKwkgKi8KKworCXMzMiB0cmFuc2Zvcm1fbnVtOwkvKiBvZmZzZXQgMHgwMDc3ICovCisKKwkvKiAgTWF4X2Z1bGxfc2NhbGUgaXMgdGhlIHJlY29tbWVuZGVkIG1heGltdW0gZnVsbCBzY2FsZS4gU2VlICovCisJLyogIG1pbl9mdWxsX3NjYWxlIChwZy4gOSkgZm9yIG1vcmUgZGV0YWlscy4gKi8KKworCXN0cnVjdCBzaXhfYXhpc19hcnJheSBtYXhfZnVsbF9zY2FsZTsJLyogb2Zmc2V0IDB4MDA3OCAqLworCXMzMiByZXNlcnZlZDU7CS8qIG9mZnNldCAweDAwN2UgKi8KKworCS8qIFBlYWtfYWRkcmVzcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgZGF0YSB3aGljaCB3aWxsIGJlIG1vbml0b3JlZAorCSAqIGJ5IHRoZSBwZWFrIHJvdXRpbmUuIFRoaXMgdmFsdWUgaXMgc2V0IGJ5IHRoZSB1c2VyLiBUaGUgcGVhaworCSAqIHJvdXRpbmUgd2lsbCBtb25pdG9yIGFueSA4IGNvbnRpZ3VvdXMgYWRkcmVzc2VzIGZvciBwZWFrIHZhbHVlcy4KKwkgKiAoZXguIHRvIHdhdGNoIGZpbHRlcjMgZGF0YSBmb3IgcGVha3MsIHNldCB0aGlzIHZhbHVlIHRvIDB4MDBhOCkuCisJICovCisKKwlzMzIgcGVha19hZGRyZXNzOwkvKiBvZmZzZXQgMHgwMDdmICovCisKKwkvKiBGdWxsX3NjYWxlIGlzIHRoZSBzZW5zb3IgZnVsbCBzY2FsZXMgd2hpY2ggYXJlIGN1cnJlbnRseSBpbiB1c2UuCisJICogRGVjb3VwbGVkIGFuZCBmaWx0ZXJlZCBkYXRhIGlzIHNjYWxlZCBzbyB0aGF0ICsvLSAxNjM4NCBpcyBlcXVhbAorCSAqIHRvIHRoZSBmdWxsIHNjYWxlcy4gVGhlIGVuZ2luZWVyaW5nIHVuaXRzIHVzZWQgYXJlIGluZGljYXRlZCBieQorCSAqIHRoZSB1bml0cyB2YWx1ZSBkaXNjdXNzZWQgb24gcGFnZSAxNi4gVGhlIGZ1bGwgc2NhbGVzIGZvciBGeCwgRnksCisJICogRnosIE14LCBNeSBhbmQgTXogY2FuIGJlIHdyaXR0ZW4gYnkgdGhlIHVzZXIgcHJpb3IgdG8gY2FsbGluZworCSAqIGNvbW1hbmQgKDEwKSBzZXQgbmV3IGZ1bGwgc2NhbGVzIChwZy4gMzgpLiBUaGUgZnVsbCBzY2FsZXMgZm9yIFYxCisJICogYW5kIFYyIGFyZSBzZXQgd2hlbmV2ZXIgdGhlIGZ1bGwgc2NhbGVzIGFyZSBjaGFuZ2VkIG9yIHdoZW4gdGhlCisJICogYXhlcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdmVjdG9ycyBhcmUgY2hhbmdlZC4gVGhlIGZ1bGwgc2NhbGUgb2YKKwkgKiBWMSBhbmQgVjIgd2lsbCBhbHdheXMgYmUgZXF1YWwgdG8gdGhlIGxhcmdlc3QgZnVsbCBzY2FsZSBvZiB0aGUKKwkgKiBheGVzIHVzZWQgZm9yIGVhY2ggdmVjdG9yIHJlc3BlY3RpdmVseS4KKwkgKi8KKworCXN0cnVjdCBmb3JjZV9hcnJheSBmdWxsX3NjYWxlOwkvKiBvZmZzZXQgMHgwMDgwICovCisKKwkvKiBPZmZzZXRzIGNvbnRhaW5zIHRoZSBzZW5zb3Igb2Zmc2V0cy4gVGhlc2UgdmFsdWVzIGFyZSBzdWJ0cmFjdGVkIGZyb20KKwkgKiB0aGUgc2Vuc29yIGRhdGEgdG8gb2J0YWluIHRoZSBkZWNvdXBsZWQgZGF0YS4gVGhlIG9mZnNldHMgYXJlIHNldCBhCisJICogZmV3IHNlY29uZHMgKDwgMTApIGFmdGVyIHRoZSBjYWxpYnJhdGlvbiBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkLgorCSAqIFRoZXkgYXJlIHNldCBzbyB0aGF0IHRoZSBvdXRwdXQgZGF0YSB3aWxsIGJlIHplcm8uIFRoZXNlIHZhbHVlcworCSAqIGNhbiBiZSB3cml0dGVuIGFzIHdlbGwgYXMgcmVhZC4gVGhlIEpSMyBEU1Agd2lsbCB1c2UgdGhlIHZhbHVlcworCSAqIHdyaXR0ZW4gaGVyZSB3aXRoaW4gMiBtcyBvZiBiZWluZyB3cml0dGVuLiBUbyBzZXQgZnV0dXJlCisJICogZGVjb3VwbGVkIGRhdGEgdG8gemVybywgYWRkIHRoZXNlIHZhbHVlcyB0byB0aGUgY3VycmVudCBkZWNvdXBsZWQKKwkgKiBkYXRhIHZhbHVlcyBhbmQgcGxhY2UgdGhlIHN1bSBoZXJlLiBUaGUgSlIzIERTUCB3aWxsIGNoYW5nZSB0aGVzZQorCSAqIHZhbHVlcyB3aGVuIGEgbmV3IHRyYW5zZm9ybSBpcyBhcHBsaWVkLiBTbyBpZiB0aGUgb2Zmc2V0cyBhcmUKKwkgKiBzdWNoIHRoYXQgRlggaXMgNSBhbmQgYWxsIG90aGVyIHZhbHVlcyBhcmUgemVybywgYWZ0ZXIgcm90YXRpbmcKKwkgKiBhYm91dCBaIGJ5IDkwIGRlZ3JlZXMsIEZZIHdvdWxkIGJlIDUgYW5kIGFsbCBvdGhlcnMgd291bGQgYmUgemVyby4KKwkgKi8KKworCXN0cnVjdCBzaXhfYXhpc19hcnJheSBvZmZzZXRzOwkvKiBvZmZzZXQgMHgwMDg4ICovCisKKwkvKiBPZmZzZXRfbnVtIGlzIHRoZSBudW1iZXIgb2YgdGhlIG9mZnNldCBjdXJyZW50bHkgaW4gdXNlLiBUaGlzCisJICogdmFsdWUgaXMgc2V0IGJ5IHRoZSBKUjMgRFNQIGFmdGVyIHRoZSB1c2VyIGhhcyBleGVjdXRlZCB0aGUgdXNlCisJICogb2Zmc2V0ICMgY29tbWFuZCAocGcuIDM0KS4gSXQgY2FuIHZhcnkgYmV0d2VlbiAwIGFuZCAxNS4KKwkgKi8KKworCXMzMiBvZmZzZXRfbnVtOwkvKiBvZmZzZXQgMHgwMDhlICovCisKKwkvKiBWZWN0X2F4ZXMgaXMgYSBiaXQgbWFwIHNob3dpbmcgd2hpY2ggb2YgdGhlIGF4ZXMgYXJlIGJlaW5nIHVzZWQKKwkgKiBpbiB0aGUgdmVjdG9yIGNhbGN1bGF0aW9ucy4gVGhpcyB2YWx1ZSBpcyBzZXQgYnkgdGhlIEpSMyBEU1AKKwkgKiBhZnRlciB0aGUgdXNlciBoYXMgZXhlY3V0ZWQgdGhlIHNldCB2ZWN0b3IgYXhlcyBjb21tYW5kIChwZy4gMzcpLgorCSAqLworCisJdTMyIHZlY3RfYXhlczsJLyogb2Zmc2V0IDB4MDA4ZiAqLworCisJLyogRmlsdGVyMCBpcyB0aGUgZGVjb3VwbGVkLCB1bmZpbHRlcmVkIGRhdGEgZnJvbSB0aGUgSlIzIHNlbnNvci4KKwkgKiBUaGlzIGRhdGEgaGFzIGhhZCB0aGUgb2Zmc2V0cyByZW1vdmVkLgorCSAqCisJICogVGhlc2UgZm9yY2VfYXJyYXlzIGhvbGQgdGhlIGZpbHRlcmVkIGRhdGEuIFRoZSBkZWNvdXBsZWQgZGF0YSBpcworCSAqIHBhc3NlZCB0aHJvdWdoIGNhc2NhZGVkIGxvdyBwYXNzIGZpbHRlcnMuIEVhY2ggc3VjY2VlZGluZyBmaWx0ZXIKKwkgKiBoYXMgYSBjdXRvZmYgZnJlcXVlbmN5IG9mIDEvNCBvZiB0aGUgcHJlY2VkaW5nIGZpbHRlci4gVGhlIGN1dG9mZgorCSAqIGZyZXF1ZW5jeSBvZiBmaWx0ZXIxIGlzIDEvMTYgb2YgdGhlIHNhbXBsZSByYXRlIGZyb20gdGhlIHNlbnNvci4KKwkgKiBGb3IgYSB0eXBpY2FsIHNlbnNvciB3aXRoIGEgc2FtcGxlIHJhdGUgb2YgOCBrSHosIHRoZSBjdXRvZmYKKwkgKiBmcmVxdWVuY3kgb2YgZmlsdGVyMSB3b3VsZCBiZSA1MDAgSHouIFRoZSBmb2xsb3dpbmcgZmlsdGVycyB3b3VsZAorCSAqIGN1dG9mZiBhdCAxMjUgSHosIDMxLjI1IEh6LCA3LjgxMyBIeiwgMS45NTMgSHogYW5kIDAuNDg4MyBIei4KKwkgKi8KKworCXN0cnVjdCBmb3JjZV9hcnJheSBmaWx0ZXJbN107CS8qIG9mZnNldCAweDAwOTAsCisJCQkJCSAgIG9mZnNldCAweDAwOTgsCisJCQkJCSAgIG9mZnNldCAweDAwYTAsCisJCQkJCSAgIG9mZnNldCAweDAwYTgsCisJCQkJCSAgIG9mZnNldCAweDAwYjAsCisJCQkJCSAgIG9mZnNldCAweDAwYjggLAorCQkJCQkgICBvZmZzZXQgMHgwMGMwICovCisKKwkvKiBSYXRlX2RhdGEgaXMgdGhlIGNhbGN1bGF0ZWQgcmF0ZSBkYXRhLiBJdCBpcyBhIGZpcnN0IGRlcml2YXRpdmUKKwkgKiBjYWxjdWxhdGlvbi4gSXQgaXMgY2FsY3VsYXRlZCBhdCBhIGZyZXF1ZW5jeSBzcGVjaWZpZWQgYnkgdGhlCisJICogdmFyaWFibGUgcmF0ZV9kaXZpc29yIChwZy4gMTIpLiBUaGUgZGF0YSBvbiB3aGljaCB0aGUgcmF0ZSBpcworCSAqIGNhbGN1bGF0ZWQgaXMgc3BlY2lmaWVkIGJ5IHRoZSB2YXJpYWJsZSByYXRlX2FkZHJlc3MgKHBnLiAxMikuCisJICovCisKKwlzdHJ1Y3QgZm9yY2VfYXJyYXkgcmF0ZV9kYXRhOwkvKiBvZmZzZXQgMHgwMGM4ICovCisKKwkvKiBNaW5pbXVtX2RhdGEgJiBtYXhpbXVtX2RhdGEgYXJlIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIChwZWFrKQorCSAqIGRhdGEgdmFsdWVzLiBUaGUgSlIzIERTUCBjYW4gbW9uaXRvciBhbnkgOCBjb250aWd1b3VzIGRhdGEgaXRlbXMKKwkgKiBmb3IgbWluaW11bXMgYW5kIG1heGltdW1zIGF0IGZ1bGwgc2Vuc29yIGJhbmR3aWR0aC4gVGhpcyBhcmVhIGlzCisJICogb25seSB1cGRhdGVkIGF0IHVzZXIgcmVxdWVzdC4gVGhpcyBpcyBkb25lIHNvIHRoYXQgdGhlIHVzZXIgZG9lcworCSAqIG5vdCBtaXNzIGFueSBwZWFrcy4gVG8gcmVhZCB0aGUgZGF0YSwgdXNlIGVpdGhlciB0aGUgcmVhZCBwZWFrcworCSAqIGNvbW1hbmQgKHBnLiA0MCksIG9yIHRoZSByZWFkIGFuZCByZXNldCBwZWFrcyBjb21tYW5kIChwZy4gMzkpLgorCSAqIFRoZSBhZGRyZXNzIG9mIHRoZSBkYXRhIHRvIHdhdGNoIGZvciBwZWFrcyBpcyBzdG9yZWQgaW4gdGhlCisJICogdmFyaWFibGUgcGVha19hZGRyZXNzIChwZy4gMTApLiBQZWFrIGRhdGEgaXMgbG9zdCB3aGVuIGV4ZWN1dGluZworCSAqIGEgY29vcmRpbmF0ZSB0cmFuc2Zvcm1hdGlvbiBvciBhIGZ1bGwgc2NhbGUgY2hhbmdlLiBQZWFrIGRhdGEgaXMKKwkgKiBhbHNvIGxvc3Qgd2hlbiBwbHVnZ2luZyBpbiBhIG5ldyBzZW5zb3IuCisJICovCisKKwlzdHJ1Y3QgZm9yY2VfYXJyYXkgbWluaW11bV9kYXRhOwkvKiBvZmZzZXQgMHgwMGQwICovCisJc3RydWN0IGZvcmNlX2FycmF5IG1heGltdW1fZGF0YTsJLyogb2Zmc2V0IDB4MDBkOCAqLworCisJLyogTmVhcl9zYXRfdmFsdWUgJiBzYXRfdmFsdWUgY29udGFpbiB0aGUgdmFsdWUgdXNlZCB0byBkZXRlcm1pbmUgaWYKKwkgKiB0aGUgcmF3IHNlbnNvciBpcyBzYXR1cmF0ZWQuIEJlY2F1c2Ugb2YgZGVjb3VwbGluZyBhbmQgb2Zmc2V0CisJICogcmVtb3ZhbCwgaXQgaXMgZGlmZmljdWx0IHRvIHRlbGwgZnJvbSB0aGUgcHJvY2Vzc2VkIGRhdGEgaWYgdGhlCisJICogc2Vuc29yIGlzIHNhdHVyYXRlZC4gVGhlc2UgdmFsdWVzLCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBlcnJvcgorCSAqIGFuZCB3YXJuaW5nIHdvcmRzIChwZy4gMTQpLCBwcm92aWRlIHRoaXMgY3JpdGljYWwgaW5mb3JtYXRpb24uCisJICogVGhlc2UgdHdvIHZhbHVlcyBtYXkgYmUgc2V0IGJ5IHRoZSBob3N0IHByb2Nlc3Nvci4gVGhlc2UgdmFsdWVzCisJICogYXJlIHBvc2l0aXZlIHNpZ25lZCB2YWx1ZXMsIHNpbmNlIHRoZSBzYXR1cmF0aW9uIGxvZ2ljIHVzZXMgdGhlCisJICogYWJzb2x1dGUgdmFsdWVzIG9mIHRoZSByYXcgZGF0YS4gVGhlIG5lYXJfc2F0X3ZhbHVlIGRlZmF1bHRzIHRvCisJICogYXBwcm94aW1hdGVseSA4MCUgb2YgdGhlIEFEQydzIGZ1bGwgc2NhbGUsIHdoaWNoIGlzIDI2MjE0LCB3aGlsZQorCSAqIHNhdF92YWx1ZSBkZWZhdWx0cyB0byB0aGUgQURDJ3MgZnVsbCBzY2FsZToKKwkgKgorCSAqICAgc2F0X3ZhbHVlID0gMzI3NjggLSAyXigxNiAtIEFEQyBiaXRzKQorCSAqLworCisJczMyIG5lYXJfc2F0X3ZhbHVlOwkvKiBvZmZzZXQgMHgwMGUwICovCisJczMyIHNhdF92YWx1ZTsJLyogb2Zmc2V0IDB4MDBlMSAqLworCisJLyogUmF0ZV9hZGRyZXNzLCByYXRlX2Rpdmlzb3IgJiByYXRlX2NvdW50IGNvbnRhaW4gdGhlIGRhdGEgdXNlZCB0bworCSAqIGNvbnRyb2wgdGhlIGNhbGN1bGF0aW9ucyBvZiB0aGUgcmF0ZXMuIFJhdGVfYWRkcmVzcyBpcyB0aGUKKwkgKiBhZGRyZXNzIG9mIHRoZSBkYXRhIHVzZWQgZm9yIHRoZSByYXRlIGNhbGN1bGF0aW9uLiBUaGUgSlIzIERTUAorCSAqIHdpbGwgY2FsY3VsYXRlIHJhdGVzIGZvciBhbnkgOCBjb250aWd1b3VzIHZhbHVlcyAoZXguIHRvCisJICogY2FsY3VsYXRlIHJhdGVzIGZvciBmaWx0ZXIzIGRhdGEgc2V0IHJhdGVfYWRkcmVzcyB0byAweDAwYTgpLgorCSAqIFJhdGVfZGl2aXNvciBpcyBob3cgb2Z0ZW4gdGhlIHJhdGUgaXMgY2FsY3VsYXRlZC4gSWYgcmF0ZV9kaXZpc29yCisJICogaXMgMSwgdGhlIHJhdGVzIGFyZSBjYWxjdWxhdGVkIGF0IGZ1bGwgc2Vuc29yIGJhbmR3aWR0aC4gSWYKKwkgKiByYXRlX2Rpdmlzb3IgaXMgMjAwLCByYXRlcyBhcmUgY2FsY3VsYXRlZCBldmVyeSAyMDAgc2FtcGxlcy4KKwkgKiBSYXRlX2Rpdmlzb3IgY2FuIGJlIGFueSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDY1NTM2LiBTZXQKKwkgKiByYXRlX2Rpdmlzb3IgdG8gMCB0byBjYWxjdWxhdGUgcmF0ZXMgZXZlcnkgNjU1MzYgc2FtcGxlcy4KKwkgKiBSYXRlX2NvdW50IHN0YXJ0cyBhdCB6ZXJvIGFuZCBjb3VudHMgdW50aWwgaXQgZXF1YWxzCisJICogcmF0ZV9kaXZpc29yLCBhdCB3aGljaCBwb2ludCB0aGUgcmF0ZXMgYXJlIGNhbGN1bGF0ZWQsIGFuZAorCSAqIHJhdGVfY291bnQgaXMgcmVzZXQgdG8gMC4gV2hlbiBzZXR0aW5nIGEgbmV3IHJhdGUgZGl2aXNvciwgaXQgaXMKKwkgKiBhIGdvb2QgaWRlYSB0byBzZXQgcmF0ZV9jb3VudCB0byBvbmUgbGVzcyB0aGFuIHJhdGUgZGl2aXNvci4gVGhpcworCSAqIHdpbGwgbWluaW1pemUgdGhlIHRpbWUgbmVjZXNzYXJ5IHRvIHN0YXJ0IHRoZSByYXRlIGNhbGN1bGF0aW9ucy4KKwkgKi8KKworCXMzMiByYXRlX2FkZHJlc3M7CS8qIG9mZnNldCAweDAwZTIgKi8KKwl1MzIgcmF0ZV9kaXZpc29yOwkvKiBvZmZzZXQgMHgwMGUzICovCisJdTMyIHJhdGVfY291bnQ7CS8qIG9mZnNldCAweDAwZTQgKi8KKworCS8qIENvbW1hbmRfd29yZDIgdGhyb3VnaCBjb21tYW5kX3dvcmQwIGFyZSB0aGUgbG9jYXRpb25zIHVzZWQgdG8KKwkgKiBzZW5kIGNvbW1hbmRzIHRvIHRoZSBKUjMgRFNQLiBUaGVpciB1c2FnZSB2YXJpZXMgd2l0aCB0aGUgY29tbWFuZAorCSAqIGFuZCBpcyBkZXRhaWxlZCBsYXRlciBpbiB0aGUgQ29tbWFuZCBEZWZpbml0aW9ucyBzZWN0aW9uIChwZy4KKwkgKiAyOSkuIEluIGdlbmVyYWwgdGhlIHVzZXIgcGxhY2VzIHZhbHVlcyBpbnRvIHZhcmlvdXMgbWVtb3J5CisJICogbG9jYXRpb25zLCBhbmQgdGhlbiBwbGFjZXMgdGhlIGNvbW1hbmQgd29yZCBpbnRvIGNvbW1hbmRfd29yZDAuCisJICogVGhlIEpSMyBEU1Agd2lsbCBwcm9jZXNzIHRoZSBjb21tYW5kIGFuZCBwbGFjZSBhIDAgaW50bworCSAqIGNvbW1hbmRfd29yZDAgdG8gaW5kaWNhdGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLiBBbHRlcm5hdGl2ZWx5CisJICogdGhlIEpSMyBEU1Agd2lsbCBwbGFjZSBhIG5lZ2F0aXZlIG51bWJlciBpbnRvIGNvbW1hbmRfd29yZDAgdG8KKwkgKiBpbmRpY2F0ZSBhbiBlcnJvciBjb25kaXRpb24uIFBsZWFzZSBub3RlIHRoZSBjb21tYW5kIGxvY2F0aW9ucworCSAqIGFyZSBudW1iZXJlZCBiYWNrd2FyZHMuIChJLkUuIGNvbW1hbmRfd29yZDIgY29tZXMgYmVmb3JlCisJICogY29tbWFuZF93b3JkMSkuCisJICovCisKKwlzMzIgY29tbWFuZF93b3JkMjsJLyogb2Zmc2V0IDB4MDBlNSAqLworCXMzMiBjb21tYW5kX3dvcmQxOwkvKiBvZmZzZXQgMHgwMGU2ICovCisJczMyIGNvbW1hbmRfd29yZDA7CS8qIG9mZnNldCAweDAwZTcgKi8KKworCS8qIENvdW50MSB0aHJvdWdoIGNvdW50NiBhcmUgdW5zaWduZWQgY291bnRlcnMgd2hpY2ggYXJlIGluY3JlbWVudGVkCisJICogZXZlcnkgdGltZSB0aGUgbWF0Y2hpbmcgZmlsdGVycyBhcmUgY2FsY3VsYXRlZC4gRmlsdGVyMSBpcworCSAqIGNhbGN1bGF0ZWQgYXQgdGhlIHNlbnNvciBkYXRhIGJhbmR3aWR0aC4gU28gdGhpcyBjb3VudGVyIHdvdWxkCisJICogaW5jcmVtZW50IGF0IDgga0h6IGZvciBhIHR5cGljYWwgc2Vuc29yLiBUaGUgcmVzdCBvZiB0aGUgY291bnRlcnMKKwkgKiBhcmUgaW5jcmVtZW50ZWQgYXQgMS80IHRoZSBpbnRlcnZhbCBvZiB0aGUgY291bnRlciBpbW1lZGlhdGVseQorCSAqIHByZWNlZGluZyBpdCwgc28gdGhleSB3b3VsZCBjb3VudCBhdCAyIGtIeiwgNTAwIEh6LCAxMjUgSHogZXRjLgorCSAqIFRoZXNlIGNvdW50ZXJzIGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yIGRhdGEuIEVhY2ggdGltZSB0aGUKKwkgKiBjb3VudGVyIGNoYW5nZXMsIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEgc2V0IGNhbiBiZSBzYW1wbGVkLCBhbmQKKwkgKiB0aGlzIHdpbGwgaW5zdXJlIHRoYXQgdGhlIHVzZXIgZ2V0cyBlYWNoIHNhbXBsZSwgb25jZSwgYW5kIG9ubHkKKwkgKiBvbmNlLgorCSAqLworCisJdTMyIGNvdW50MTsJCS8qIG9mZnNldCAweDAwZTggKi8KKwl1MzIgY291bnQyOwkJLyogb2Zmc2V0IDB4MDBlOSAqLworCXUzMiBjb3VudDM7CQkvKiBvZmZzZXQgMHgwMGVhICovCisJdTMyIGNvdW50NDsJCS8qIG9mZnNldCAweDAwZWIgKi8KKwl1MzIgY291bnQ1OwkJLyogb2Zmc2V0IDB4MDBlYyAqLworCXUzMiBjb3VudDY7CQkvKiBvZmZzZXQgMHgwMGVkICovCisKKwkvKiBFcnJvcl9jb3VudCBpcyBhIHJ1bm5pbmcgY291bnQgb2YgZGF0YSByZWNlcHRpb24gZXJyb3JzLiBJZiB0aGlzCisJICogY291bnRlciBpcyBjaGFuZ2luZyByYXBpZGx5LCBpdCBwcm9iYWJseSBpbmRpY2F0ZXMgYSBiYWQgc2Vuc29yCisJICogY2FibGUgY29ubmVjdGlvbiBvciBvdGhlciBoYXJkd2FyZSBwcm9ibGVtLiBJbiBtb3N0IGluc3RhbGxhdGlvbnMKKwkgKiBlcnJvcl9jb3VudCBzaG91bGQgbm90IGNoYW5nZSBhdCBhbGwuIEJ1dCBpdCBpcyBwb3NzaWJsZSBpbiBhbgorCSAqIGV4dHJlbWVseSBub2lzeSBlbnZpcm9ubWVudCB0byBleHBlcmllbmNlIG9jY2FzaW9uYWwgZXJyb3JzIGV2ZW4KKwkgKiB3aXRob3V0IGEgaGFyZHdhcmUgcHJvYmxlbS4gSWYgdGhlIHNlbnNvciBpcyB3ZWxsIGdyb3VuZGVkLCB0aGlzCisJICogaXMgcHJvYmFibHkgdW5hdm9pZGFibGUgaW4gdGhlc2UgZW52aXJvbm1lbnRzLiBPbiB0aGUgb2NjYXNpb25zCisJICogd2hlcmUgdGhpcyBjb3VudGVyIGNvdW50cyBhIGJhZCBzYW1wbGUsIHRoYXQgc2FtcGxlIGlzIGlnbm9yZWQuCisJICovCisKKwl1MzIgZXJyb3JfY291bnQ7CS8qIG9mZnNldCAweDAwZWUgKi8KKworCS8qIENvdW50X3ggaXMgYSBjb3VudGVyIHdoaWNoIGlzIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgdGhlIEpSMyBEU1AKKwkgKiBzZWFyY2hlcyBpdHMgam9iIHF1ZXVlcyBhbmQgZmluZHMgbm90aGluZyB0byBkby4gSXQgaW5kaWNhdGVzIHRoZQorCSAqIGFtb3VudCBvZiBpZGxlIHRpbWUgdGhlIEpSMyBEU1AgaGFzIGF2YWlsYWJsZS4gSXQgY2FuIGFsc28gYmUKKwkgKiB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgSlIzIERTUCBpcyBhbGl2ZS4gU2VlIHRoZSBQZXJmb3JtYW5jZQorCSAqIElzc3VlcyBzZWN0aW9uIG9uIHBnLiA0OSBmb3IgbW9yZSBkZXRhaWxzLgorCSAqLworCisJdTMyIGNvdW50X3g7CS8qIG9mZnNldCAweDAwZWYgKi8KKworCS8qIFdhcm5pbmdzICYgZXJyb3JzIGNvbnRhaW4gdGhlIHdhcm5pbmcgYW5kIGVycm9yIGJpdHMKKwkgKiByZXNwZWN0aXZlbHkuIFRoZSBmb3JtYXQgb2YgdGhlc2UgdHdvIHdvcmRzIGlzIGRpc2N1c3NlZCBvbiBwYWdlCisJICogMjEgdW5kZXIgdGhlIGhlYWRpbmdzIHdhcm5pbmdzX2JpdHMgYW5kIGVycm9yX2JpdHMuCisJICovCisKKwl1MzIgd2FybmluZ3M7CS8qIG9mZnNldCAweDAwZjAgKi8KKwl1MzIgZXJyb3JzOwkJLyogb2Zmc2V0IDB4MDBmMSAqLworCisJLyogVGhyZXNob2xkX2JpdHMgaXMgYSB3b3JkIGNvbnRhaW5pbmcgdGhlIGJpdHMgdGhhdCBhcmUgc2V0IGJ5IHRoZQorCSAqIGxvYWQgZW52ZWxvcGVzLiBTZWUgbG9hZF9lbnZlbG9wZXMgKHBnLiAxNykgYW5kIHRocmVzaF9zdHJ1Y3QKKwkgKiAocGcuIDIzKSBmb3IgbW9yZSBkZXRhaWxzLgorCSAqLworCisJczMyIHRocmVzaG9sZF9iaXRzOwkvKiBvZmZzZXQgMHgwMGYyICovCisKKwkvKiBMYXN0X2NyYyBpcyB0aGUgdmFsdWUgdGhhdCBzaG93cyB0aGUgYWN0dWFsIGNhbGN1bGF0ZWQgQ1JDLiBDUkMKKwkgKiBpcyBzaG9ydCBmb3IgY3ljbGljIHJlZHVuZGFuY3kgY29kZS4gSXQgc2hvdWxkIGJlIHplcm8uIFNlZSB0aGUKKwkgKiBkZXNjcmlwdGlvbiBmb3IgY2FsX2NyY19iYWQgKHBnLiAyMSkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisJICovCisKKwlzMzIgbGFzdF9DUkM7CS8qIG9mZnNldCAweDAwZjMgKi8KKworCS8qIEVFUHJvbV92ZXJfbm8gY29udGFpbnMgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBzZW5zb3IgRUVQcm9tLgorCSAqIEVFUHJvbSB2ZXJzaW9uIG51bWJlcnMgY2FuIHZhcnkgYmV0d2VlbiAwIGFuZCAyNTUuCisJICogU29mdHdhcmVfdmVyX25vIGNvbnRhaW5zIHRoZSBzb2Z0d2FyZSB2ZXJzaW9uIG51bWJlci4gVmVyc2lvbgorCSAqIDMuMDIgd291bGQgYmUgc3RvcmVkIGFzIDMwMi4KKwkgKi8KKworCXMzMiBlZXByb21fdmVyX25vOwkvKiBvZmZzZXQgMHgwMGY0ICovCisJczMyIHNvZnR3YXJlX3Zlcl9ubzsJLyogb2Zmc2V0IDB4MDBmNSAqLworCisJLyogU29mdHdhcmVfZGF5ICYgc29mdHdhcmVfeWVhciBhcmUgdGhlIHJlbGVhc2UgZGF0ZSBvZiB0aGUgc29mdHdhcmUKKwkgKiB0aGUgSlIzIERTUCBpcyBjdXJyZW50bHkgcnVubmluZy4gRGF5IGlzIHRoZSBkYXkgb2YgdGhlIHllYXIsCisJICogd2l0aCBKYW51YXJ5IDEgYmVpbmcgMSwgYW5kIERlY2VtYmVyIDMxLCBiZWluZyAzNjUgZm9yIG5vbiBsZWFwCisJICogeWVhcnMuCisJICovCisKKwlzMzIgc29mdHdhcmVfZGF5OwkvKiBvZmZzZXQgMHgwMGY2ICovCisJczMyIHNvZnR3YXJlX3llYXI7CS8qIG9mZnNldCAweDAwZjcgKi8KKworCS8qIFNlcmlhbF9ubyAmIG1vZGVsX25vIGFyZSB0aGUgdHdvIHZhbHVlcyB3aGljaCB1bmlxdWVseSBpZGVudGlmeSBhCisJICogc2Vuc29yLiBUaGlzIG1vZGVsIG51bWJlciBkb2VzIG5vdCBkaXJlY3RseSBjb3JyZXNwb25kIHRvIHRoZSBKUjMKKwkgKiBtb2RlbCBudW1iZXIsIGJ1dCBpdCB3aWxsIHByb3ZpZGUgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IKKwkgKiBkaWZmZXJlbnQgc2Vuc29yIGNvbmZpZ3VyYXRpb25zLgorCSAqLworCisJdTMyIHNlcmlhbF9ubzsJLyogb2Zmc2V0IDB4MDBmOCAqLworCXUzMiBtb2RlbF9ubzsJLyogb2Zmc2V0IDB4MDBmOSAqLworCisJLyogQ2FsX2RheSAmIGNhbF95ZWFyIGFyZSB0aGUgc2Vuc29yIGNhbGlicmF0aW9uIGRhdGUuIERheSBpcyB0aGUKKwkgKiBkYXkgb2YgdGhlIHllYXIsIHdpdGggSmFudWFyeSAxIGJlaW5nIDEsIGFuZCBEZWNlbWJlciAzMSwgYmVpbmcKKwkgKiAzNjYgZm9yIGxlYXAgeWVhcnMuCisJICovCisKKwlzMzIgY2FsX2RheTsJLyogb2Zmc2V0IDB4MDBmYSAqLworCXMzMiBjYWxfeWVhcjsJLyogb2Zmc2V0IDB4MDBmYiAqLworCisJLyogVW5pdHMgaXMgYW4gZW51bWVyYXRlZCByZWFkIG9ubHkgdmFsdWUgZGVmaW5pbmcgdGhlIGVuZ2luZWVyaW5nCisJICogdW5pdHMgdXNlZCBpbiB0aGUgc2Vuc29yIGZ1bGwgc2NhbGUuIFRoZSBtZWFuaW5ncyBvZiBwYXJ0aWN1bGFyCisJICogdmFsdWVzIGFyZSBkaXNjdXNzZWQgaW4gdGhlIHNlY3Rpb24gZGV0YWlsaW5nIHRoZSBmb3JjZV91bml0cworCSAqIHN0cnVjdHVyZSBvbiBwYWdlIDIyLiBUaGUgZW5naW5lZXJpbmcgdW5pdHMgYXJlIHNldHRvIGN1c3RvbWVyCisJICogc3BlY2lmaWNhdGlvbnMgZHVyaW5nIHNlbnNvciBtYW51ZmFjdHVyZSBhbmQgY2Fubm90IGJlIGNoYW5nZWQgYnkKKwkgKiB3cml0aW5nIHRvIFVuaXRzLgorCSAqCisJICogQml0cyBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJpdHMgb2YgcmVzb2x1dGlvbiBvZiB0aGUgQURDCisJICogY3VycmVudGx5IGluIHVzZS4KKwkgKgorCSAqIENoYW5uZWxzIGlzIGEgYml0IGZpZWxkIHNob3dpbmcgd2hpY2ggY2hhbm5lbHMgdGhlIGN1cnJlbnQgc2Vuc29yCisJICogaXMgY2FwYWJsZSBvZiBzZW5kaW5nLiBJZiBiaXQgMCBpcyBhY3RpdmUsIHRoaXMgc2Vuc29yIGNhbiBzZW5kCisJICogY2hhbm5lbCAwLCBpZiBiaXQgMTMgaXMgYWN0aXZlLCB0aGlzIHNlbnNvciBjYW4gc2VuZCBjaGFubmVsIDEzLAorCSAqIGV0Yy4gVGhpcyBiaXQgY2FuIGJlIGFjdGl2ZSwgZXZlbiBpZiB0aGUgc2Vuc29yIGlzIG5vdCBjdXJyZW50bHkKKwkgKiBzZW5kaW5nIHRoaXMgY2hhbm5lbC4gU29tZSBzZW5zb3JzIGFyZSBjb25maWd1cmFibGUgYXMgdG8gd2hpY2gKKwkgKiBjaGFubmVscyB0byBzZW5kLCBhbmQgdGhpcyBmaWVsZCBvbmx5IGNvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHRoZQorCSAqIGNoYW5uZWxzIGF2YWlsYWJsZSB0byBzZW5kLCBub3Qgb24gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVG8KKwkgKiBmaW5kIHdoaWNoIGNoYW5uZWxzIGFyZSBjdXJyZW50bHkgYmVpbmcgc2VudCwgbW9uaXRvciB0aGUKKwkgKiBSYXdfdGltZSBmaWVsZHMgKHBnLiAxOSkgaW4gdGhlIHJhd19jaGFubmVscyBhcnJheSAocGcuIDcpLiBJZgorCSAqIHRoZSB0aW1lIGlzIGNoYW5naW5nIHBlcmlvZGljYWxseSwgdGhlbiB0aGF0IGNoYW5uZWwgaXMgYmVpbmcKKwkgKiByZWNlaXZlZC4KKwkgKi8KKworCXUzMiB1bml0czsJCS8qIG9mZnNldCAweDAwZmMgKi8KKwlzMzIgYml0czsJCS8qIG9mZnNldCAweDAwZmQgKi8KKwlzMzIgY2hhbm5lbHM7CS8qIG9mZnNldCAweDAwZmUgKi8KKworCS8qIFRoaWNrbmVzcyBzcGVjaWZpZXMgdGhlIG92ZXJhbGwgdGhpY2tuZXNzIG9mIHRoZSBzZW5zb3IgZnJvbQorCSAqIGZsYW5nZSB0byBmbGFuZ2UuIFRoZSBlbmdpbmVlcmluZyB1bml0cyBmb3IgdGhpcyB2YWx1ZSBhcmUKKwkgKiBjb250YWluZWQgaW4gdW5pdHMgKHBnLiAxNikuIFRoZSBzZW5zb3IgY2FsaWJyYXRpb24gaXMgcmVsYXRpdmUKKwkgKiB0byB0aGUgY2VudGVyIG9mIHRoZSBzZW5zb3IuIFRoaXMgdmFsdWUgYWxsb3dzIGVhc3kgY29vcmRpbmF0ZQorCSAqIHRyYW5zZm9ybWF0aW9uIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgc2Vuc29yIHRvIGVpdGhlciBmbGFuZ2UuCisJICovCisKKwlzMzIgdGhpY2tuZXNzOwkvKiBvZmZzZXQgMHgwMGZmICovCisKKwkvKiBMb2FkX2VudmVsb3BlcyBpcyBhIHRhYmxlIGNvbnRhaW5pbmcgdGhlIGxvYWQgZW52ZWxvcGUKKwkgKiBkZXNjcmlwdGlvbnMuIFRoZXJlIGFyZSAxNiBwb3NzaWJsZSBsb2FkIGVudmVsb3BlIHNsb3RzIGluIHRoZQorCSAqIHRhYmxlLiBUaGUgc2xvdHMgYXJlIG9uIDE2IHdvcmQgYm91bmRhcmllcyBhbmQgYXJlIG51bWJlcmVkIDAtMTUuCisJICogRWFjaCBsb2FkIGVudmVsb3BlIG5lZWRzIHRvIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBzbG90IGJ1dAorCSAqIG5lZWQgbm90IGJlIGZ1bGx5IGNvbnRhaW5lZCBpbiB0aGF0IHNsb3QuIFRoYXQgaXMgdG8gc2F5IHRoYXQgYQorCSAqIHNpbmdsZSBsb2FkIGVudmVsb3BlIGNhbiBiZSBsYXJnZXIgdGhhbiBhIHNpbmdsZSBzbG90LiBUaGUKKwkgKiBzb2Z0d2FyZSBoYXMgYmVlbiB0ZXN0ZWQgYW5kIHJhbiBzYXRpc2ZhY3RvcmlseSB3aXRoIDUwCisJICogdGhyZXNob2xkcyBhY3RpdmUuIEEgc2luZ2xlIGxvYWQgZW52ZWxvcGUgdGhpcyBsYXJnZSB3b3VsZCB0YWtlCisJICogdXAgNSBvZiB0aGUgMTYgc2xvdHMuIFRoZSBsb2FkIGVudmVsb3BlIGRhdGEgaXMgbGFpZCBvdXQgaW4gYW4KKwkgKiBvcmRlciB0aGF0IGlzIG1vc3QgZWZmaWNpZW50IGZvciB0aGUgSlIzIERTUC4gVGhlIHN0cnVjdHVyZSBpcworCSAqIGRldGFpbGVkIGxhdGVyIGluIHRoZSBzZWN0aW9uIHNob3dpbmcgdGhlIGRlZmluaXRpb24gb2YgdGhlCisJICogbGVfc3RydWN0IHN0cnVjdHVyZSAocGcuIDIzKS4KKwkgKi8KKworCXN0cnVjdCBsZV9zdHJ1Y3QgbG9hZF9lbnZlbG9wZXNbMHgxMF07CS8qIG9mZnNldCAweDAxMDAgKi8KKworCS8qIFRyYW5zZm9ybXMgaXMgYSB0YWJsZSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZGVzY3JpcHRpb25zLgorCSAqIFRoZXJlIGFyZSAxNiBwb3NzaWJsZSB0cmFuc2Zvcm0gc2xvdHMgaW4gdGhlIHRhYmxlLiBUaGUgc2xvdHMgYXJlCisJICogb24gMTYgd29yZCBib3VuZGFyaWVzIGFuZCBhcmUgbnVtYmVyZWQgMC0xNS4gRWFjaCB0cmFuc2Zvcm0gbmVlZHMKKwkgKiB0byBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgc2xvdCBidXQgbmVlZCBub3QgYmUgZnVsbHkKKwkgKiBjb250YWluZWQgaW4gdGhhdCBzbG90LiBUaGF0IGlzIHRvIHNheSB0aGF0IGEgc2luZ2xlIHRyYW5zZm9ybQorCSAqIGNhbiBiZSBsYXJnZXIgdGhhbiBhIHNpbmdsZSBzbG90LiBBIHRyYW5zZm9ybSBpcyAyICogbm8gb2YgbGlua3MKKwkgKiArIDEgd29yZHMgaW4gbGVuZ3RoLiBTbyBhIHNpbmdsZSBzbG90IGNhbiBjb250YWluIGEgdHJhbnNmb3JtCisJICogd2l0aCA3IGxpbmtzLiBUd28gc2xvdHMgY2FuIGNvbnRhaW4gYSB0cmFuc2Zvcm0gdGhhdCBpcyAxNSBsaW5rcy4KKwkgKiBUaGUgbGF5b3V0IGlzIGRldGFpbGVkIGxhdGVyIGluIHRoZSBzZWN0aW9uIHNob3dpbmcgdGhlCisJICogZGVmaW5pdGlvbiBvZiB0aGUgdHJhbnNmb3JtIHN0cnVjdHVyZSAocGcuIDI2KS4KKwkgKi8KKworCXN0cnVjdCBpbnRlcm5fdHJhbnNmb3JtIHRyYW5zZm9ybXNbMHgxMF07CS8qIG9mZnNldCAweDAyMDAgKi8KK307CisKK3N0cnVjdCBqcjNfdCB7CisJc3RydWN0IHsKKwkJdTMyIHByb2dyYW1fbG93WzB4NDAwMF07CS8qICAweDAwMDAwIC0gMHgxMDAwMCAqLworCQlzdHJ1Y3QganIzX2NoYW5uZWwgZGF0YTsJLyogIDB4MTAwMDAgLSAweDEwYzAwICovCisJCWNoYXIgcGFkMlsweDMwMDAwIC0gMHgwMGMwMF07CS8qICAweDEwYzAwIC0gMHg0MDAwMCAqLworCQl1MzIgcHJvZ3JhbV9oaWdoWzB4ODAwMF07CS8qICAweDQwMDAwIC0gMHg2MDAwMCAqLworCQl1MzIgcmVzZXQ7CS8qICAweDYwMDAwIC0gMHg2MDAwNCAqLworCQljaGFyIHBhZDNbMHgyMDAwMCAtIDB4MDAwMDRdOwkvKiAgMHg2MDAwNCAtIDB4ODAwMDAgKi8KKwl9IGNoYW5uZWxbNF07Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2tlX2NvdW50ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9rZV9jb3VudGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlmNmZlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9rZV9jb3VudGVyLmMKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMva2VfY291bnRlci5jCisgICAgQ29tZWRpIGRyaXZlciBmb3IgS29sdGVyLUVsZWN0cm9uaWMgUENJIENvdW50ZXIgMSBDYXJkCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBrZV9jb3VudGVyCitEZXNjcmlwdGlvbjogRHJpdmVyIGZvciBLb2x0ZXIgRWxlY3Ryb25pYyBDb3VudGVyIENhcmQKK0RldmljZXM6IFtLb2x0ZXIgRWxlY3Ryb25pY10gUENJIENvdW50ZXIgQ2FyZCAoa2VfY291bnRlcikKK0F1dGhvcjogTWljaGFlbCBIaWxsbWFubgorVXBkYXRlZDogTW9uLCAxNCBBcHIgMjAwOCAxNTo0Mjo0MiArMDEwMAorU3RhdHVzOiB0ZXN0ZWQKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBQQ0kgYnVzIG9mIGRldmljZSAob3B0aW9uYWwpCisgIFsxXSAtIFBDSSBzbG90IG9mIGRldmljZSAob3B0aW9uYWwpCisgIElmIGJ1cy9zbG90IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBmaXJzdCBzdXBwb3J0ZWQKKyAgUENJIGRldmljZSBmb3VuZCB3aWxsIGJlIHVzZWQuCisKK1RoaXMgZHJpdmVyIGlzIGEgc2ltcGxlIGRyaXZlciB0byByZWFkIHRoZSBjb3VudGVyIHZhbHVlcyBmcm9tCitLb2x0ZXIgRWxlY3Ryb25pYyBQQ0kgQ291bnRlciBDYXJkLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSAiY29tZWRpX3BjaS5oIgorCisjZGVmaW5lIENOVF9EUklWRVJfTkFNRSAgICAgICAgICJrZV9jb3VudGVyIgorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0tPTFRFUiAgICAweDEwMDEKKyNkZWZpbmUgQ05UX0NBUkRfREVWSUNFX0lEICAgICAgMHgwMDE0CisKKy8qLS0gZnVuY3Rpb24gcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBjbnRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgY250X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjbnRfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9LT0xURVIsIENOVF9DQVJEX0RFVklDRV9JRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKKwkJMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY250X3BjaV90YWJsZSk7CisKKy8qLS0gYm9hcmQgc3BlY2lmaWNhdGlvbiBzdHJ1Y3R1cmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IGNudF9ib2FyZF9zdHJ1Y3QgeworCisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZGV2aWNlX2lkOworCWludCBjbnRfY2hhbm5lbF9uYnI7CisJaW50IGNudF9iaXRzOworfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNudF9ib2FyZF9zdHJ1Y3QgY250X2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOglDTlRfRFJJVkVSX05BTUUsCisJICAgICAgZGV2aWNlX2lkOkNOVF9DQVJEX0RFVklDRV9JRCwKKwkgICAgICBjbnRfY2hhbm5lbF9uYnI6MywKKyAgICAgIGNudF9iaXRzOjI0fQorfTsKKworI2RlZmluZSBjbnRfYm9hcmRfbmJyIChzaXplb2YoY250X2JvYXJkcykvc2l6ZW9mKHN0cnVjdCBjbnRfYm9hcmRfc3RydWN0KSkKKworLyotLSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgY250X2RldmljZV9wcml2YXRlIHsKKworCXN0cnVjdCBwY2lfZGV2ICpwY2lkZXY7Cit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBjbnRfZGV2aWNlX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBjbnRfZHJpdmVyID0geworICAgICAgZHJpdmVyX25hbWU6Q05UX0RSSVZFUl9OQU1FLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmNudF9hdHRhY2gsCisgICAgICBkZXRhY2g6Y250X2RldGFjaCwKK307CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoY250X2RyaXZlciwgY250X3BjaV90YWJsZSk7CisKKy8qLS0gY291bnRlciB3cml0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVGhpcyBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciByZXNldHRpbmcgdGhlIGNvdW50ZXJzOyBtYXliZSBpdCBpcyBiZXR0ZXIKKyAgIHRvIG1ha2UgYSBzcGVjaWFsIGNvbW1hbmQgJ3Jlc2V0Jy4gKi8KK3N0YXRpYyBpbnQgY250X3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJb3V0YigodW5zaWduZWQgY2hhcikoKGRhdGFbMF0gPj4gMjQpICYgMHhmZiksCisJCWRldi0+aW9iYXNlICsgY2hhbiAqIDB4MjAgKyAweDEwKTsKKwlvdXRiKCh1bnNpZ25lZCBjaGFyKSgoZGF0YVswXSA+PiAxNikgJiAweGZmKSwKKwkJZGV2LT5pb2Jhc2UgKyBjaGFuICogMHgyMCArIDB4MGMpOworCW91dGIoKHVuc2lnbmVkIGNoYXIpKChkYXRhWzBdID4+IDgpICYgMHhmZiksCisJCWRldi0+aW9iYXNlICsgY2hhbiAqIDB4MjAgKyAweDA4KTsKKwlvdXRiKCh1bnNpZ25lZCBjaGFyKSgoZGF0YVswXSA+PiAwKSAmIDB4ZmYpLAorCQlkZXYtPmlvYmFzZSArIGNoYW4gKiAweDIwICsgMHgwNCk7CisKKwkvKiByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHdyaXR0ZW4gKi8KKwlyZXR1cm4gMTsKK30KKworLyotLSBjb3VudGVyIHJlYWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGNudF9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgY2hhciBhMCwgYTEsIGEyLCBhMywgYTQ7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgcmVzdWx0OworCisJYTAgPSBpbmIoZGV2LT5pb2Jhc2UgKyBjaGFuICogMHgyMCk7CisJYTEgPSBpbmIoZGV2LT5pb2Jhc2UgKyBjaGFuICogMHgyMCArIDB4MDQpOworCWEyID0gaW5iKGRldi0+aW9iYXNlICsgY2hhbiAqIDB4MjAgKyAweDA4KTsKKwlhMyA9IGluYihkZXYtPmlvYmFzZSArIGNoYW4gKiAweDIwICsgMHgwYyk7CisJYTQgPSBpbmIoZGV2LT5pb2Jhc2UgKyBjaGFuICogMHgyMCArIDB4MTApOworCisJcmVzdWx0ID0gKGExICsgKGEyICogMjU2KSArIChhMyAqIDY1NTM2KSk7CisJaWYgKGE0ID4gMCkKKwkJcmVzdWx0ID0gcmVzdWx0IC0gcy0+bWF4ZGF0YTsKKworCSpkYXRhID0gKHVuc2lnbmVkIGludCkgcmVzdWx0OworCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkICovCisJcmV0dXJuIDE7Cit9CisKKy8qLS0gYXR0YWNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBjbnRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2U7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CisJc3RydWN0IGNudF9ib2FyZF9zdHJ1Y3QgKmJvYXJkOworCXVuc2lnbmVkIGxvbmcgaW9fYmFzZTsKKwlpbnQgZXJyb3IsIGk7CisKKwkvKiBhbGxvY2F0ZSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlpZiAoKGVycm9yID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgY250X2RldmljZV9wcml2YXRlKSkpIDwgMCkgeworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJLyogUHJvYmUgdGhlIGRldmljZSB0byBkZXRlcm1pbmUgd2hhdCBkZXZpY2UgaW4gdGhlIHNlcmllcyBpdCBpcy4gKi8KKwlmb3IgKHBjaV9kZXZpY2UgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKKwkJcGNpX2RldmljZSAhPSBOVUxMOworCQlwY2lfZGV2aWNlID0KKwkJcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpX2RldmljZSkpIHsKKwkJaWYgKHBjaV9kZXZpY2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0tPTFRFUikgeworCQkJZm9yIChpID0gMDsgaSA8IGNudF9ib2FyZF9uYnI7IGkrKykgeworCQkJCWlmIChjbnRfYm9hcmRzW2ldLmRldmljZV9pZCA9PQorCQkJCQlwY2lfZGV2aWNlLT5kZXZpY2UpIHsKKwkJCQkJLyogd2FzIGEgcGFydGljdWxhciBidXMvc2xvdCByZXF1ZXN0ZWQ/ICovCisJCQkJCWlmICgoaXQtPm9wdGlvbnNbMF0gIT0gMCkKKwkJCQkJCXx8IChpdC0+b3B0aW9uc1sxXSAhPSAwKSkgeworCQkJCQkJLyogYXJlIHdlIG9uIHRoZSB3cm9uZyBidXMvc2xvdD8gKi8KKwkJCQkJCWlmIChwY2lfZGV2aWNlLT5idXMtPm51bWJlciAhPQorCQkJCQkJCWl0LT5vcHRpb25zWzBdCisJCQkJCQkJfHwgUENJX1NMT1QocGNpX2RldmljZS0+CisJCQkJCQkJCWRldmZuKSAhPQorCQkJCQkJCWl0LT5vcHRpb25zWzFdKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlkZXYtPmJvYXJkX3B0ciA9IGNudF9ib2FyZHMgKyBpOworCQkJCQlib2FyZCA9IChzdHJ1Y3QgY250X2JvYXJkX3N0cnVjdCAqKSBkZXYtPgorCQkJCQkJYm9hcmRfcHRyOworCQkJCQlnb3RvIGZvdW5kOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlwcmludGsoImNvbWVkaSVkOiBubyBzdXBwb3J0ZWQgYm9hcmQgZm91bmQhIChyZXEuIGJ1cy9zbG90OiAlZC8lZClcbiIsCisJCWRldi0+bWlub3IsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSk7CisJcmV0dXJuIC1FSU87CisKKyAgICAgIGZvdW5kOgorCXByaW50aygiY29tZWRpJWQ6IGZvdW5kICVzIGF0IFBDSSBidXMgJWQsIHNsb3QgJWRcbiIsIGRldi0+bWlub3IsCisJCWJvYXJkLT5uYW1lLCBwY2lfZGV2aWNlLT5idXMtPm51bWJlciwKKwkJUENJX1NMT1QocGNpX2RldmljZS0+ZGV2Zm4pKTsKKwlkZXZwcml2LT5wY2lkZXYgPSBwY2lfZGV2aWNlOworCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkLT5uYW1lOworCisJLyogZW5hYmxlIFBDSSBkZXZpY2UgYW5kIHJlcXVlc3QgcmVnaW9ucyAqLworCWlmICgoZXJyb3IgPSBjb21lZGlfcGNpX2VuYWJsZShwY2lfZGV2aWNlLCBDTlRfRFJJVkVSX05BTUUpKSA8IDApIHsKKwkJcHJpbnRrKCJjb21lZGklZDogZmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlIGFuZCByZXF1ZXN0IHJlZ2lvbnMhXG4iLCBkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCS8qIHJlYWQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzIFtQQ0lfQkFTRV9BRERSRVNTICMwXSAqLworCWlvX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldmljZSwgMCk7CisJZGV2LT5pb2Jhc2UgPSBpb19iYXNlOworCisJLyogYWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzICovCisJaWYgKChlcnJvciA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSkgPCAwKSB7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlzdWJkZXZpY2UgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzdWJkZXZpY2U7CisKKwlzdWJkZXZpY2UtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOworCXN1YmRldmljZS0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIC8qIHwgU0RGX0NPTU1PTiAqLyA7CisJc3ViZGV2aWNlLT5uX2NoYW4gPSBib2FyZC0+Y250X2NoYW5uZWxfbmJyOworCXN1YmRldmljZS0+bWF4ZGF0YSA9ICgxIDw8IGJvYXJkLT5jbnRfYml0cykgLSAxOworCXN1YmRldmljZS0+aW5zbl9yZWFkID0gY250X3JpbnNuOworCXN1YmRldmljZS0+aW5zbl93cml0ZSA9IGNudF93aW5zbjsKKworCS8vIHNlbGVjdCAyME1IeiBjbG9jaworCW91dGIoMywgZGV2LT5pb2Jhc2UgKyAyNDgpOworCisJLy8gcmVzZXQgYWxsIGNvdW50ZXJzCisJb3V0YigwLCBkZXYtPmlvYmFzZSk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIDB4MjApOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyAweDQwKTsKKworCXByaW50aygiY29tZWRpJWQ6ICIgQ05UX0RSSVZFUl9OQU1FICIgYXR0YWNoZWQuXG4iLCBkZXYtPm1pbm9yKTsKKwlyZXR1cm4gMDsKK30KKworLyotLSBkZXRhY2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGNudF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+cGNpZGV2KSB7CisJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaWRldik7CisJCX0KKwkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpZGV2KTsKKwl9CisJcHJpbnRrKCJjb21lZGklZDogIiBDTlRfRFJJVkVSX05BTUUgIiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5jCmluZGV4IGI0MzJhYTcuLjEyNDgxYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmMKQEAgLTkyLDcgKzkyLDcgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1lNDAwMF9wY2lfdGFibGUpOwogCi1zdGF0aWMgY29uc3QgbWU0MDAwX2JvYXJkX3QgbWU0MDAwX2JvYXJkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBtZTQwMDBfYm9hcmQgbWU0MDAwX2JvYXJkc1tdID0gewogCXsiTUUtNDY1MCIsIDB4NDY1MCwgezAsIDB9LCB7MTYsIDAsIDAsIDB9LCB7NH0sIHswfX0sCiAKIAl7Ik1FLTQ2NjAiLCAweDQ2NjAsIHswLCAwfSwgezMyLCAwLCAxNiwgMH0sIHs0fSwgezN9fSwKQEAgLTExMywxMDggKzExMywxMDggQEAKIAl7MH0sCiB9OwogCi0jZGVmaW5lIE1FNDAwMF9CT0FSRF9WRVJTSU9OUyAoc2l6ZW9mKG1lNDAwMF9ib2FyZHMpIC8gc2l6ZW9mKG1lNDAwMF9ib2FyZF90KSAtIDEpCisjZGVmaW5lIE1FNDAwMF9CT0FSRF9WRVJTSU9OUyAoc2l6ZW9mKG1lNDAwMF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBtZTQwMDBfYm9hcmQpIC0gMSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBDb21lZGkgZnVuY3Rpb24gcHJvdG90eXBlcwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBtZTQwMDBfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9kZXZjb25maWcgKiBpdCk7Ci1zdGF0aWMgaW50IG1lNDAwMF9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgY29tZWRpX2RyaXZlciBkcml2ZXJfbWU0MDAwID0geworc3RhdGljIGludCBtZTQwMDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IG1lNDAwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX21lNDAwMCA9IHsKICAgICAgIGRyaXZlcl9uYW1lOiJtZTQwMDAiLAotICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAotICAgICAgYXR0YWNoOm1lNDAwMF9hdHRhY2gsCi0gICAgICBkZXRhY2g6bWU0MDAwX2RldGFjaCwKKyAgICAgIG1vZHVsZSA6IFRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoIDogbWU0MDAwX2F0dGFjaCwKKyAgICAgIGRldGFjaCA6IG1lNDAwMF9kZXRhY2gsCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIE1laWxoYXVzIGZ1bmN0aW9uIHByb3RvdHlwZXMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgbWU0MDAwX3Byb2JlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9kZXZjb25maWcgKiBpdCk7Ci1zdGF0aWMgaW50IGdldF9yZWdpc3RlcnMoY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcCk7Ci1zdGF0aWMgaW50IGluaXRfYm9hcmRfaW5mbyhjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldl9wKTsKLXN0YXRpYyBpbnQgaW5pdF9hb19jb250ZXh0KGNvbWVkaV9kZXZpY2UgKiBkZXYpOwotc3RhdGljIGludCBpbml0X2FpX2NvbnRleHQoY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgaW50IGluaXRfZGlvX2NvbnRleHQoY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgaW50IGluaXRfY250X2NvbnRleHQoY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgaW50IHhpbGlueF9kb3dubG9hZChjb21lZGlfZGV2aWNlICogZGV2KTsKLXN0YXRpYyBpbnQgcmVzZXRfYm9hcmQoY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IG1lNDAwMF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpOworc3RhdGljIGludCBnZXRfcmVnaXN0ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3ApOworc3RhdGljIGludCBpbml0X2JvYXJkX2luZm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcCk7CitzdGF0aWMgaW50IGluaXRfYW9fY29udGV4dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgaW5pdF9haV9jb250ZXh0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBpbml0X2Rpb19jb250ZXh0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBpbml0X2NudF9jb250ZXh0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCB4aWxpbnhfZG93bmxvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IHJlc2V0X2JvYXJkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9kaW9faW5zbl9iaXRzKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9kaW9faW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOworc3RhdGljIGludCBtZTQwMDBfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIAotc3RhdGljIGludCBjbnRfcmVzZXQoY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpOworc3RhdGljIGludCBjbnRfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpOwogCi1zdGF0aWMgaW50IGNudF9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwKK3N0YXRpYyBpbnQgY250X2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCXVuc2lnbmVkIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgbW9kZSk7CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2NudF9pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9jbnRfaW5zbl93cml0ZShjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7CitzdGF0aWMgaW50IG1lNDAwMF9jbnRfaW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2NudF9pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOworc3RhdGljIGludCBtZTQwMDBfY250X2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2FpX2luc25fcmVhZChjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXZpY2UsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2UsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIAotc3RhdGljIGludCBtZTQwMDBfYWlfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CiAKLXN0YXRpYyBpbnQgYWlfY2hlY2tfY2hhbmxpc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IGFpX2NoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOwogCi1zdGF0aWMgaW50IGFpX3JvdW5kX2NtZF9hcmdzKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2NtZCAqIGNtZCwKK3N0YXRpYyBpbnQgYWlfcm91bmRfY21kX2FyZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kLAogCXVuc2lnbmVkIGludCAqaW5pdF90aWNrcywKIAl1bnNpZ25lZCBpbnQgKnNjYW5fdGlja3MsIHVuc2lnbmVkIGludCAqY2hhbl90aWNrcyk7CiAKLXN0YXRpYyBpbnQgYWlfcHJlcGFyZShjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9jbWQgKiBjbWQsCitzdGF0aWMgaW50IGFpX3ByZXBhcmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kLAogCXVuc2lnbmVkIGludCBpbml0X3RpY2tzLAogCXVuc2lnbmVkIGludCBzY2FuX3RpY2tzLCB1bnNpZ25lZCBpbnQgY2hhbl90aWNrcyk7CiAKLXN0YXRpYyBpbnQgYWlfd3JpdGVfY2hhbmxpc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IGFpX3dyaXRlX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOwogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU0MDAwX2FpX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQgUFRfUkVHU19BUkcpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9haV9kb19jbWRfdGVzdChjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2RvX2NtZF90ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpOwogCi1zdGF0aWMgaW50IG1lNDAwMF9haV9kb19jbWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBtZTQwMDBfYWlfZG9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKIAotc3RhdGljIGludCBtZTQwMDBfYW9faW5zbl93cml0ZShjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7CitzdGF0aWMgaW50IG1lNDAwMF9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKIAotc3RhdGljIGludCBtZTQwMDBfYW9faW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbWU0MDAwX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgTWVpbGhhdXMgaW5saW5lIGZ1bmN0aW9ucwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWU0MDAwX291dGIoY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhciB2YWx1ZSwKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZTQwMDBfb3V0YihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBjaGFyIHZhbHVlLAogCXVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKIAlQT1JUX1BERUJVRygiLS0+IDB4JTAyWCBwb3J0IDB4JTA0bFhcbiIsIHZhbHVlLCBwb3J0KTsKIAlvdXRiKHZhbHVlLCBwb3J0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1lNDAwMF9vdXRsKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGxvbmcgdmFsdWUsCitzdGF0aWMgaW5saW5lIHZvaWQgbWU0MDAwX291dGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyB2YWx1ZSwKIAl1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJUE9SVF9QREVCVUcoIi0tPiAweCUwOGxYIHBvcnQgMHglMDRsWFxuIiwgdmFsdWUsIHBvcnQpOwogCW91dGwodmFsdWUsIHBvcnQpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWU0MDAwX2lubChjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBsb25nIHBvcnQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWU0MDAwX2lubChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAl2YWx1ZSA9IGlubChwb3J0KTsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCXJldHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIG1lNDAwMF9pbmIoY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgbG9uZyBwb3J0KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIG1lNDAwMF9pbmIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCXVuc2lnbmVkIGNoYXIgdmFsdWU7CiAJdmFsdWUgPSBpbmIocG9ydCk7CkBAIC0yMzAsNyArMjMwLDcgQEAKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIG1lNDAwMF9haV9yYW5nZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBtZTQwMDBfYWlfcmFuZ2UgPSB7CiAJNCwKIAl7CiAJCQlVTklfUkFOR0UoMi41KSwKQEAgLTI0MCwxNiArMjQwLDE2IEBACiAJCX0KIH07CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIG1lNDAwMF9hb19yYW5nZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBtZTQwMDBfYW9fcmFuZ2UgPSB7CiAJMSwKIAl7CiAJCQlCSVBfUkFOR0UoMTApLAogCQl9CiB9OwogCi1zdGF0aWMgaW50IG1lNDAwMF9hdHRhY2goY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX2RldmNvbmZpZyAqIGl0KQorc3RhdGljIGludCBtZTQwMDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCWludCByZXN1bHQ7CiAKIAlDQUxMX1BERUJVRygiSW4gbWU0MDAwX2F0dGFjaCgpXG4iKTsKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCQlzLT5zdWJkZXZfZmxhZ3MgPQogCQkJU0RGX1JFQURBQkxFIHwgU0RGX0NPTU1PTiB8IFNERl9HUk9VTkQgfCBTREZfRElGRjsKIAkJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5haS5jb3VudDsKLQkJcy0+bWF4ZGF0YSA9IDB4RkZGRjsJLy8gMTYgYml0IEFEQworCQlzLT5tYXhkYXRhID0gMHhGRkZGOwkvKiAgMTYgYml0IEFEQyAqLwogCQlzLT5sZW5fY2hhbmxpc3QgPSBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX0NPVU5UOwogCQlzLT5yYW5nZV90YWJsZSA9ICZtZTQwMDBfYWlfcmFuZ2U7CiAJCXMtPmluc25fcmVhZCA9IG1lNDAwMF9haV9pbnNuX3JlYWQ7CkBAIC0zMTIsNyArMzEyLDcgQEAKIAkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOwogCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFIHwgU0RGX0NPTU1PTiB8IFNERl9HUk9VTkQ7CiAJCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YW8uY291bnQ7Ci0JCXMtPm1heGRhdGEgPSAweEZGRkY7CS8vIDE2IGJpdCBEQUMKKwkJcy0+bWF4ZGF0YSA9IDB4RkZGRjsJLyogIDE2IGJpdCBEQUMgKi8KIAkJcy0+cmFuZ2VfdGFibGUgPSAmbWU0MDAwX2FvX3JhbmdlOwogCQlzLT5pbnNuX3dyaXRlID0gbWU0MDAwX2FvX2luc25fd3JpdGU7CiAJCXMtPmluc25fcmVhZCA9IG1lNDAwMF9hb19pbnNuX3JlYWQ7CkBAIC0zNTgsNyArMzU4LDcgQEAKIAkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7CiAJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKIAkJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5jbnQuY291bnQ7Ci0JCXMtPm1heGRhdGEgPSAweEZGRkY7CS8vIDE2IGJpdCBjb3VudGVycworCQlzLT5tYXhkYXRhID0gMHhGRkZGOwkvKiAgMTYgYml0IGNvdW50ZXJzICovCiAJCXMtPmluc25fcmVhZCA9IG1lNDAwMF9jbnRfaW5zbl9yZWFkOwogCQlzLT5pbnNuX3dyaXRlID0gbWU0MDAwX2NudF9pbnNuX3dyaXRlOwogCQlzLT5pbnNuX2NvbmZpZyA9IG1lNDAwMF9jbnRfaW5zbl9jb25maWc7CkBAIC0zNjksMTggKzM2OSwxOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1lNDAwMF9wcm9iZShjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpCitzdGF0aWMgaW50IG1lNDAwMF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7CiAJaW50IHJlc3VsdCwgaTsKLQltZTQwMDBfYm9hcmRfdCAqYm9hcmQ7CisJc3RydWN0IG1lNDAwMF9ib2FyZCAqYm9hcmQ7CiAKIAlDQUxMX1BERUJVRygiSW4gbWU0MDAwX3Byb2JlKClcbiIpOwogCiAJLyogQWxsb2NhdGUgcHJpdmF0ZSBtZW1vcnkgKi8KLQlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihtZTQwMDBfaW5mb190KSkgPCAwKSB7CisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IG1lNDAwMF9pbmZvKSkgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CisKIAkvKgogCSAqIFByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIHRoZSBzZXJpZXMgaXQgaXMuCiAJICovCkBAIC00MDUsNyArNDA1LDcgQEAKIAkJCQkJCX0KIAkJCQkJfQogCQkJCQlkZXYtPmJvYXJkX3B0ciA9IG1lNDAwMF9ib2FyZHMgKyBpOwotCQkJCQlib2FyZCA9IChtZTQwMDBfYm9hcmRfdCAqKSBkZXYtPgorCQkJCQlib2FyZCA9IChzdHJ1Y3QgbWU0MDAwX2JvYXJkICopIGRldi0+CiAJCQkJCQlib2FyZF9wdHI7CiAJCQkJCWluZm8tPnBjaV9kZXZfcCA9IHBjaV9kZXZpY2U7CiAJCQkJCWdvdG8gZm91bmQ7CkBAIC01MTIsNyArNTEyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfcmVnaXN0ZXJzKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3ApCitzdGF0aWMgaW50IGdldF9yZWdpc3RlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcCkKIHsKIAogCUNBTExfUERFQlVHKCJJbiBnZXRfcmVnaXN0ZXJzKClcbiIpOwpAQCAtNTY0LDI3ICs1NjQsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbml0X2JvYXJkX2luZm8oY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfcCkKK3N0YXRpYyBpbnQgaW5pdF9ib2FyZF9pbmZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3ApCiB7CiAJaW50IHJlc3VsdDsKIAogCUNBTExfUERFQlVHKCJJbiBpbml0X2JvYXJkX2luZm8oKVxuIik7CiAKIAkvKiBJbml0IHNwaW4gbG9ja3MgKi8KLQkvL3NwaW5fbG9ja19pbml0KCZpbmZvLT5wcmVsb2FkX2xvY2spOwotCS8vc3Bpbl9sb2NrX2luaXQoJmluZm8tPmFpX2N0cmxfbG9jayk7CisJLyogc3Bpbl9sb2NrX2luaXQoJmluZm8tPnByZWxvYWRfbG9jayk7ICovCisJLyogc3Bpbl9sb2NrX2luaXQoJmluZm8tPmFpX2N0cmxfbG9jayk7ICovCiAKIAkvKiBHZXQgdGhlIHNlcmlhbCBudW1iZXIgKi8KIAlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2Rldl9wLCAweDJDLCAmaW5mby0+c2VyaWFsX25vKTsKLQlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkgeworCWlmIChyZXN1bHQgIT0gUENJQklPU19TVUNDRVNTRlVMKQogCQlyZXR1cm4gcmVzdWx0OwotCX0KIAogCS8qIEdldCB0aGUgaGFyZHdhcmUgcmV2aXNpb24gKi8KIAlyZXN1bHQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2X3AsIDB4MDgsICZpbmZvLT5od19yZXZpc2lvbik7Ci0JaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpIHsKKwlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKIAkJcmV0dXJuIHJlc3VsdDsKLQl9CiAKIAkvKiBHZXQgdGhlIHZlbmRvciBpZCAqLwogCWluZm8tPnZlbmRvcl9pZCA9IHBjaV9kZXZfcC0+dmVuZG9yOwpAQCAtNTk4LDE0ICs1OTYsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbml0X2FvX2NvbnRleHQoY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgaW5pdF9hb19jb250ZXh0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7CiAKIAlDQUxMX1BERUJVRygiSW4gaW5pdF9hb19jb250ZXh0KClcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IHRoaXNib2FyZC0+YW8uY291bnQ7IGkrKykgewotCQkvL3NwaW5fbG9ja19pbml0KCZpbmZvLT5hb19jb250ZXh0W2ldLnVzZV9sb2NrKTsKKwkJLyogc3Bpbl9sb2NrX2luaXQoJmluZm8tPmFvX2NvbnRleHRbaV0udXNlX2xvY2spOyAqLwogCQlpbmZvLT5hb19jb250ZXh0W2ldLmlycSA9IGluZm8tPmlycTsKIAogCQlzd2l0Y2ggKGkpIHsKQEAgLTY4MSw3ICs2NzksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGluaXRfYWlfY29udGV4dChjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIGludCBpbml0X2FpX2NvbnRleHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAogCUNBTExfUERFQlVHKCJJbiBpbml0X2FpX2NvbnRleHQoKVxuIik7CkBAIC03MTUsNyArNzEzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpbml0X2Rpb19jb250ZXh0KGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IGluaXRfZGlvX2NvbnRleHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAogCUNBTExfUERFQlVHKCJJbiBpbml0X2Rpb19jb250ZXh0KClcbiIpOwpAQCAtNzM0LDcgKzczMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5pdF9jbnRfY29udGV4dChjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIGludCBpbml0X2NudF9jb250ZXh0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAKIAlDQUxMX1BERUJVRygiSW4gaW5pdF9jbnRfY29udGV4dCgpXG4iKTsKQEAgLTc1NSw3ICs3NTMsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKnhpbGlueF9maXJtOwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgeGlsaW54X2Rvd25sb2FkKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHhpbGlueF9kb3dubG9hZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXUzMiB2YWx1ZSA9IDA7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CkBAIC03ODIsNyArNzgwLDcgQEAKIAogCS8qIFdhaXQgdW50aWwgL0lOSVQgcGluIGlzIHNldCAqLwogCXVkZWxheSgyMCk7Ci0JaWYgKCFpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSU5UQ1NSKSAmIDB4MjApIHsKKwlpZiAoIShpbmwoaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSU5UQ1NSKSAmIDB4MjApKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJImNvbWVkaSVkOiBtZTQwMDA6IHhpbGlueF9kb3dubG9hZCgpOiBDYW4ndCBpbml0IFhpbGlueFxuIiwKIAkJCWRldi0+bWlub3IpOwpAQCAtODM3LDcgKzgzNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmVzZXRfYm9hcmQoY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgcmVzZXRfYm9hcmQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGljcjsKIApAQCAtODk1LDE2ICs4OTMsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZTQwMDBfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IG1lNDAwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlDQUxMX1BERUJVRygiSW4gbWU0MDAwX2RldGFjaCgpXG4iKTsKIAogCWlmIChpbmZvKSB7CiAJCWlmIChpbmZvLT5wY2lfZGV2X3ApIHsKIAkJCXJlc2V0X2JvYXJkKGRldik7Ci0JCQlpZiAoaW5mby0+cGx4X3JlZ2Jhc2UpIHsKKwkJCWlmIChpbmZvLT5wbHhfcmVnYmFzZSkKIAkJCQljb21lZGlfcGNpX2Rpc2FibGUoaW5mby0+cGNpX2Rldl9wKTsKLQkJCX0KIAkJCXBjaV9kZXZfcHV0KGluZm8tPnBjaV9kZXZfcCk7CiAJCX0KIAl9CkBAIC05MTYsOCArOTEzLDggQEAKICAgQW5hbG9nIGlucHV0IHNlY3Rpb24KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIGludCBtZTQwMDBfYWlfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHN1YmRldmljZSwgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IG1lNDAwMF9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC0xMDQwLDcgKzEwMzcsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IG1lNDAwMF9haV9jYW5jZWwoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCitzdGF0aWMgaW50IG1lNDAwMF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAKQEAgLTEwNTcsOCArMTA1NCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWlfY2hlY2tfY2hhbmxpc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCkKK3N0YXRpYyBpbnQgYWlfY2hlY2tfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlpbnQgYXJlZjsKIAlpbnQgaTsKQEAgLTExMzgsOSArMTEzNSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWlfcm91bmRfY21kX2FyZ3MoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfY21kICogY21kLAorc3RhdGljIGludCBhaV9yb3VuZF9jbWRfYXJncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfY21kICpjbWQsCiAJdW5zaWduZWQgaW50ICppbml0X3RpY2tzLAogCXVuc2lnbmVkIGludCAqc2Nhbl90aWNrcywgdW5zaWduZWQgaW50ICpjaGFuX3RpY2tzKQogewpAQCAtMTE2Myw5ICsxMTYwLDggQEAKIAkJcmVzdCA9IChjbWQtPnN0YXJ0X2FyZyAqIDMzKSAlIDEwMDA7CiAKIAkJaWYgKGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX05FQVJFU1QpIHsKLQkJCWlmIChyZXN0ID4gMzMpIHsKKwkJCWlmIChyZXN0ID4gMzMpCiAJCQkJKCppbml0X3RpY2tzKSsrOwotCQkJfQogCQl9IGVsc2UgaWYgKGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX1VQKSB7CiAJCQlpZiAocmVzdCkKIAkJCQkoKmluaXRfdGlja3MpKys7CkBAIC0xMTc3LDkgKzExNzMsOCBAQAogCQlyZXN0ID0gKGNtZC0+c2Nhbl9iZWdpbl9hcmcgKiAzMykgJSAxMDAwOwogCiAJCWlmIChjbWQtPmZsYWdzICYgVFJJR19ST1VORF9ORUFSRVNUKSB7Ci0JCQlpZiAocmVzdCA+IDMzKSB7CisJCQlpZiAocmVzdCA+IDMzKQogCQkJCSgqc2Nhbl90aWNrcykrKzsKLQkJCX0KIAkJfSBlbHNlIGlmIChjbWQtPmZsYWdzICYgVFJJR19ST1VORF9VUCkgewogCQkJaWYgKHJlc3QpCiAJCQkJKCpzY2FuX3RpY2tzKSsrOwpAQCAtMTE5MSw5ICsxMTg2LDggQEAKIAkJcmVzdCA9IChjbWQtPmNvbnZlcnRfYXJnICogMzMpICUgMTAwMDsKIAogCQlpZiAoY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTkVBUkVTVCkgewotCQkJaWYgKHJlc3QgPiAzMykgeworCQkJaWYgKHJlc3QgPiAzMykKIAkJCQkoKmNoYW5fdGlja3MpKys7Ci0JCQl9CiAJCX0gZWxzZSBpZiAoY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfVVApIHsKIAkJCWlmIChyZXN0KQogCQkJCSgqY2hhbl90aWNrcykrKzsKQEAgLTEyMDcsNyArMTIwMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFpX3dyaXRlX3RpbWVyKGNvbWVkaV9kZXZpY2UgKiBkZXYsCitzdGF0aWMgdm9pZCBhaV93cml0ZV90aW1lcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCXVuc2lnbmVkIGludCBpbml0X3RpY2tzLAogCXVuc2lnbmVkIGludCBzY2FuX3RpY2tzLCB1bnNpZ25lZCBpbnQgY2hhbl90aWNrcykKIHsKQEAgLTEyMjgsOSArMTIyMiw5IEBACiAJbWU0MDAwX291dGwoZGV2LCBjaGFuX3RpY2tzIC0gMSwgaW5mby0+YWlfY29udGV4dC5jaGFuX3RpbWVyX3JlZyk7CiB9CiAKLXN0YXRpYyBpbnQgYWlfcHJlcGFyZShjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9jbWQgKiBjbWQsCitzdGF0aWMgaW50IGFpX3ByZXBhcmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kLAogCXVuc2lnbmVkIGludCBpbml0X3RpY2tzLAogCXVuc2lnbmVkIGludCBzY2FuX3RpY2tzLCB1bnNpZ25lZCBpbnQgY2hhbl90aWNrcykKIHsKQEAgLTEyOTcsOCArMTI5MSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWlfd3JpdGVfY2hhbmxpc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCkKK3N0YXRpYyBpbnQgYWlfd3JpdGVfY2hhbmxpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAl1bnNpZ25lZCBpbnQgZW50cnk7CiAJdW5zaWduZWQgaW50IGNoYW47CkBAIC0xMzM3LDEzICsxMzMxLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2FpX2RvX2NtZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgbWU0MDAwX2FpX2RvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBpbml0X3RpY2tzID0gMDsKIAl1bnNpZ25lZCBpbnQgc2Nhbl90aWNrcyA9IDA7CiAJdW5zaWduZWQgaW50IGNoYW5fdGlja3MgPSAwOwotCWNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKIAogCUNBTExfUERFQlVHKCJJbiBtZTQwMDBfYWlfZG9fY21kKClcbiIpOwogCkBAIC0xMzgxLDggKzEzNzUsOCBAQAogICogLSBpbnZhbGlkIGNoYW5saXN0CiAgKiBTbyBJIHRyaWVkIHRvIGFkb3B0IHRoaXMgc2NoZW1lLgogICovCi1zdGF0aWMgaW50IG1lNDAwMF9haV9kb19jbWRfdGVzdChjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfY21kICogY21kKQorc3RhdGljIGludCBtZTQwMDBfYWlfZG9fY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAogCXVuc2lnbmVkIGludCBpbml0X3RpY2tzOwpAQCAtMTUwMyw5ICsxNDk3LDggQEAKIAkJY21kLT5zdG9wX3NyYyA9IFRSSUdfTk9ORTsKIAkJZXJyKys7CiAJfQotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQlyZXR1cm4gMTsKLQl9CiAKIAkvKgogCSAqIFN0YWdlIDIuIENoZWNrIGZvciB0cmlnZ2VyIHNvdXJjZSBjb25mbGljdHMuCkBAIC0xNTUzLDkgKzE1NDYsOCBAQAogCQljbWQtPnNjYW5fZW5kX3NyYyA9IFRSSUdfTk9ORTsKIAkJZXJyKys7CiAJfQotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQlyZXR1cm4gMjsKLQl9CiAKIAkvKgogCSAqIFN0YWdlIDMuIENoZWNrIGlmIGFyZ3VtZW50cyBhcmUgZ2VuZXJhbGx5IHZhbGlkLgpAQCAtMTU4OCw5ICsxNTgwLDkgQEAKIAkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CiAJCWVycisrOwogCX0KLQlpZiAoZXJyKSB7CisKKwlpZiAoZXJyKQogCQlyZXR1cm4gMzsKLQl9CiAKIAkvKgogCSAqIFN0YWdlIDQuIENoZWNrIGZvciBhcmd1bWVudCBjb25mbGljdHMuCkBAIC0xNjA0LDIxICsxNTk2LDIxIEBACiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc3RhcnQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvLyA2NiB0aWNrcyBhdCBsZWFzdAorCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChjaGFuX3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CS8vIDY2IHRpY2tzIGF0IGxlYXN0CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoc2Nhbl90aWNrcyA8PSBjbWQtPmNoYW5saXN0X2xlbiAqIGNoYW5fdGlja3MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzY2FuIGVuZCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPnNjYW5fZW5kX2FyZyA9IDIwMDAgKiBjbWQtPmNoYW5saXN0X2xlbiArIDMxOwkvLyBBdCBsZWFzdCBvbmUgdGljayBtb3JlCisJCQljbWQtPnNjYW5fZW5kX2FyZyA9IDIwMDAgKiBjbWQtPmNoYW5saXN0X2xlbiArIDMxOwkvKiAgQXQgbGVhc3Qgb25lIHRpY2sgbW9yZSAqLwogCQkJZXJyKys7CiAJCX0KIAl9IGVsc2UgaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XICYmCkBAIC0xNjMwLDE0ICsxNjIyLDE0IEBACiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgc3RhcnQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvLyA2NiB0aWNrcyBhdCBsZWFzdAorCQkJY21kLT5zdGFydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChjaGFuX3RpY2tzIDwgTUU0MDAwX0FJX01JTl9USUNLUykgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIGNvbnZlcnQgYXJnXG4iLAogCQkJCWRldi0+bWlub3IpOwotCQkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CS8vIDY2IHRpY2tzIGF0IGxlYXN0CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCX0gZWxzZSBpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYKQEAgLTE2NDksMjEgKzE2NDEsMjEgQEAKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8vIDY2IHRpY2tzIGF0IGxlYXN0CisJCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KIAkJaWYgKGNoYW5fdGlja3MgPCBNRTQwMDBfQUlfTUlOX1RJQ0tTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgY29udmVydCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLy8gNjYgdGlja3MgYXQgbGVhc3QKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJCWlmIChzY2FuX3RpY2tzIDw9IGNtZC0+Y2hhbmxpc3RfbGVuICogY2hhbl90aWNrcykgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHNjYW4gZW5kIGFyZ1xuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMjAwMCAqIGNtZC0+Y2hhbmxpc3RfbGVuICsgMzE7CS8vIEF0IGxlYXN0IG9uZSB0aWNrIG1vcmUKKwkJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMjAwMCAqIGNtZC0+Y2hhbmxpc3RfbGVuICsgMzE7CS8qICBBdCBsZWFzdCBvbmUgdGljayBtb3JlICovCiAJCQllcnIrKzsKIAkJfQogCX0gZWxzZSBpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYKQEAgLTE2NzUsMTQgKzE2NjcsMTQgQEAKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBzdGFydCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8vIDY2IHRpY2tzIGF0IGxlYXN0CisJCQljbWQtPnN0YXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KIAkJaWYgKGNoYW5fdGlja3MgPCBNRTQwMDBfQUlfTUlOX1RJQ0tTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2FpX2RvX2NtZF90ZXN0KCk6IEludmFsaWQgY29udmVydCBhcmdcbiIsCiAJCQkJZGV2LT5taW5vcik7Ci0JCQljbWQtPmNvbnZlcnRfYXJnID0gMjAwMDsJLy8gNjYgdGlja3MgYXQgbGVhc3QKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvKiAgNjYgdGlja3MgYXQgbGVhc3QgKi8KIAkJCWVycisrOwogCQl9CiAJfSBlbHNlIGlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCAmJgpAQCAtMTY5NCwxNCArMTY4NiwxNCBAQAogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHN0YXJ0IGFyZ1xuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLy8gNjYgdGlja3MgYXQgbGVhc3QKKwkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCQlpZiAoY2hhbl90aWNrcyA8IE1FNDAwMF9BSV9NSU5fVElDS1MpIHsKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJCSJjb21lZGklZDogbWU0MDAwOiBtZTQwMDBfYWlfZG9fY21kX3Rlc3QoKTogSW52YWxpZCBjb252ZXJ0IGFyZ1xuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCWNtZC0+Y29udmVydF9hcmcgPSAyMDAwOwkvLyA2NiB0aWNrcyBhdCBsZWFzdAorCQkJY21kLT5jb252ZXJ0X2FyZyA9IDIwMDA7CS8qICA2NiB0aWNrcyBhdCBsZWFzdCAqLwogCQkJZXJyKys7CiAJCX0KIAl9IGVsc2UgaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUICYmCkBAIC0xNzEzLDcgKzE3MDUsNyBAQAogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9haV9kb19jbWRfdGVzdCgpOiBJbnZhbGlkIHN0YXJ0IGFyZ1xuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLy8gNjYgdGlja3MgYXQgbGVhc3QKKwkJCWNtZC0+c3RhcnRfYXJnID0gMjAwMDsJLyogIDY2IHRpY2tzIGF0IGxlYXN0ICovCiAJCQllcnIrKzsKIAkJfQogCX0KQEAgLTE3MzUsOSArMTcyNyw5IEBACiAJCQllcnIrKzsKIAkJfQogCX0KLQlpZiAoZXJyKSB7CisKKwlpZiAoZXJyKQogCQlyZXR1cm4gNDsKLQl9CiAKIAkvKgogCSAqIFN0YWdlIDUuIENoZWNrIHRoZSBjaGFubmVsIGxpc3QuCkBAIC0xNzUxLDkgKzE3NDMsOSBAQAogc3RhdGljIGlycXJldHVybl90IG1lNDAwMF9haV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkIFBUX1JFR1NfQVJHKQogewogCXVuc2lnbmVkIGludCB0bXA7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gZGV2X2lkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXM7Ci0JbWU0MDAwX2FpX2NvbnRleHRfdCAqYWlfY29udGV4dCA9ICZpbmZvLT5haV9jb250ZXh0OworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXM7CisJc3RydWN0IG1lNDAwMF9haV9jb250ZXh0ICphaV9jb250ZXh0ID0gJmluZm8tPmFpX2NvbnRleHQ7CiAJaW50IGk7CiAJaW50IGMgPSAwOwogCWxvbmcgbHZhbDsKQEAgLTE5MTEsOCArMTkwMyw4IEBACiAgIEFuYWxvZyBvdXRwdXQgc2VjdGlvbgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IG1lNDAwMF9hb19pbnNuX3dyaXRlKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBtZTQwMDBfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC0xOTY5LDggKzE5NjEsOCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IG1lNDAwMF9hb19pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IG1lNDAwMF9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIApAQCAtMTk5MCwxNiArMTk4MiwxNiBAQAogICBEaWdpdGFsIEkvTyBzZWN0aW9uCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgbWU0MDAwX2Rpb19pbnNuX2JpdHMoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IG1lNDAwMF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCiAJQ0FMTF9QREVCVUcoIkluIG1lNDAwMF9kaW9faW5zbl9iaXRzKClcbiIpOwogCiAJLyogTGVuZ3RoIG9mIGRhdGEgbXVzdCBiZSAyIChtYXNrIGFuZCBuZXcgZGF0YSwgc2VlIGJlbG93KSAqLwotCWlmIChpbnNuLT5uID09IDApIHsKKwlpZiAoaW5zbi0+biA9PSAwKQogCQlyZXR1cm4gMDsKLQl9CisKIAlpZiAoaW5zbi0+biAhPSAyKSB7CiAJCXByaW50aygiY29tZWRpJWQ6IG1lNDAwMDogbWU0MDAwX2Rpb19pbnNuX2JpdHMoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGhcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIwNDEsOCArMjAzMyw4IEBACiAJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0MDAwX2Rpb19pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgbWU0MDAwX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwpAQCAtMjEzNSw3ICsyMTI3LDcgQEAKICAgQ291bnRlciBzZWN0aW9uCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXN0YXRpYyBpbnQgY250X3Jlc2V0KGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQorc3RhdGljIGludCBjbnRfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpCiB7CiAKIAlDQUxMX1BERUJVRygiSW4gY250X3Jlc2V0KClcbiIpOwpAQCAtMjE2Niw3ICsyMTU4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjbnRfY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsLAorc3RhdGljIGludCBjbnRfY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsLAogCXVuc2lnbmVkIGludCBtb2RlKQogewogCWludCB0bXAgPSAwOwpAQCAtMjIyMyw4ICsyMjE1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZTQwMDBfY250X2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBtZTQwMDBfY250X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCiAJaW50IGVycjsKQEAgLTIyNjYsMTcgKzIyNTgsMTcgQEAKIAlyZXR1cm4gMjsKIH0KIAotc3RhdGljIGludCBtZTQwMDBfY250X2luc25fcmVhZChjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgbWU0MDAwX2NudF9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAKIAl1bnNpZ25lZCBzaG9ydCB0bXA7CiAKIAlDQUxMX1BERUJVRygiSW4gbWU0MDAwX2NudF9pbnNuX3JlYWQoKVxuIik7CiAKLQlpZiAoaW5zbi0+biA9PSAwKSB7CisJaWYgKGluc24tPm4gPT0gMCkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJaWYgKGluc24tPm4gPiAxKSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkJImNvbWVkaSVkOiBtZTQwMDA6IG1lNDAwMF9jbnRfaW5zbl9yZWFkKCk6IEludmFsaWQgaW5zdHJ1Y3Rpb24gbGVuZ3RoICVkXG4iLApAQCAtMjMxMyw4ICsyMzA1LDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBtZTQwMDBfY250X2luc25fd3JpdGUoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IG1lNDAwMF9jbnRfaW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCXVuc2lnbmVkIHNob3J0IHRtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZTQwMDAuaAppbmRleCBmMTJiODg3Li43MzNiMTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWU0MDAwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21lNDAwMC5oCkBAIC0yOCwzNyArMjgsMzcgQEAKICAgRGVidWcgc2VjdGlvbgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jdW5kZWYgTUU0MDAwX0NBTExfREVCVUcJLy8gRGVidWcgZnVuY3Rpb24gZW50cnkgYW5kIGV4aXQKLSN1bmRlZiBNRTQwMDBfUE9SVF9ERUJVRwkvLyBEZWJ1ZyBwb3J0IGFjY2VzcwotI3VuZGVmIE1FNDAwMF9JU1JfREVCVUcJCS8vIERlYnVnIHRoZSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCi0jdW5kZWYgTUU0MDAwX0RFQlVHCQkvLyBHZW5lcmFsIHB1cnBvc2UgZGVidWcgbWFzc2VnZXMKKyN1bmRlZiBNRTQwMDBfQ0FMTF9ERUJVRwkvKiAgRGVidWcgZnVuY3Rpb24gZW50cnkgYW5kIGV4aXQgKi8KKyN1bmRlZiBNRTQwMDBfUE9SVF9ERUJVRwkvKiAgRGVidWcgcG9ydCBhY2Nlc3MgKi8KKyN1bmRlZiBNRTQwMDBfSVNSX0RFQlVHCQkvKiAgRGVidWcgdGhlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KKyN1bmRlZiBNRTQwMDBfREVCVUcJCS8qICBHZW5lcmFsIHB1cnBvc2UgZGVidWcgbWFzc2VnZXMgKi8KIAogI2lmZGVmIE1FNDAwMF9DQUxMX0RFQlVHCiAjdW5kZWYgQ0FMTF9QREVCVUcKICNkZWZpbmUgQ0FMTF9QREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJjb21lZGklZDogbWU0MDAwOiAiIGZtdCwgZGV2LT5taW5vciwgIyNhcmdzKQogI2Vsc2UKLSMgZGVmaW5lIENBTExfUERFQlVHKGZtdCwgYXJncy4uLikJLy8gbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nCisjIGRlZmluZSBDQUxMX1BERUJVRyhmbXQsIGFyZ3MuLi4pCS8qICBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcgKi8KICNlbmRpZgogCiAjaWZkZWYgTUU0MDAwX1BPUlRfREVCVUcKICN1bmRlZiBQT1JUX1BERUJVRwogI2RlZmluZSBQT1JUX1BERUJVRyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHImNvbWVkaSVkOiBtZTQwMDA6ICIgZm10LCBkZXYtPm1pbm9yLCAgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgUE9SVF9QREVCVUcoZm10LCBhcmdzLi4uKQkvLyBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcKKyNkZWZpbmUgUE9SVF9QREVCVUcoZm10LCBhcmdzLi4uKQkvKiAgbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nICovCiAjZW5kaWYKIAogI2lmZGVmIE1FNDAwMF9JU1JfREVCVUcKICN1bmRlZiBJU1JfUERFQlVHCiAjZGVmaW5lIElTUl9QREVCVUcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyJjb21lZGklZDogbWU0MDAwOiAiIGZtdCwgZGV2LT5taW5vciwgICMjYXJncykKICNlbHNlCi0jZGVmaW5lIElTUl9QREVCVUcoZm10LCBhcmdzLi4uKQkvLyBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcKKyNkZWZpbmUgSVNSX1BERUJVRyhmbXQsIGFyZ3MuLi4pCS8qICBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcgKi8KICNlbmRpZgogCiAjaWZkZWYgTUU0MDAwX0RFQlVHCiAjdW5kZWYgUERFQlVHCiAjZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHImNvbWVkaSVkOiBtZTQwMDA6ICIgZm10LCBkZXYtPm1pbm9yLCAgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgUERFQlVHKGZtdCwgYXJncy4uLikJLy8gbm8gZGVidWdnaW5nLCBkbyBub3RoaW5nCisjZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pCS8qICBubyBkZWJ1Z2dpbmcsIGRvIG5vdGhpbmcgKi8KICNlbmRpZgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC02Nyw3OCArNjcsNzggQEAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX01FSUxIQVVTIDB4MTQwMgogCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjUwCTB4NDY1MAkvLyBMb3cgQ29zdCB2ZXJzaW9uCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjUwCTB4NDY1MAkvKiAgTG93IENvc3QgdmVyc2lvbiAqLwogCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwCTB4NDY2MAkvLyBTdGFuZGFyZCB2ZXJzaW9uCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwSQkweDQ2NjEJLy8gSXNvbGF0ZWQgdmVyc2lvbgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MFMJMHg0NjYyCS8vIFN0YW5kYXJkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NjBJUwkweDQ2NjMJLy8gSXNvbGF0ZWQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MAkweDQ2NjAJLyogIFN0YW5kYXJkIHZlcnNpb24gKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NjBJCTB4NDY2MQkvKiAgSXNvbGF0ZWQgdmVyc2lvbiAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY2MFMJMHg0NjYyCS8qICBTdGFuZGFyZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjYwSVMJMHg0NjYzCS8qICBJc29sYXRlZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkICovCiAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzAJMHg0NjcwCS8vIFN0YW5kYXJkIHZlcnNpb24KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzBJCTB4NDY3MQkvLyBJc29sYXRlZCB2ZXJzaW9uCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwUwkweDQ2NzIJLy8gU3RhbmRhcmQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MElTCTB4NDY3MwkvLyBJc29sYXRlZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwCTB4NDY3MAkvKiAgU3RhbmRhcmQgdmVyc2lvbiAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY3MEkJMHg0NjcxCS8qICBJc29sYXRlZCB2ZXJzaW9uICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjcwUwkweDQ2NzIJLyogIFN0YW5kYXJkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2NzBJUwkweDQ2NzMJLyogIElzb2xhdGVkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQgKi8KIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MAkweDQ2ODAJLy8gU3RhbmRhcmQgdmVyc2lvbgotI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MEkJMHg0NjgxCS8vIElzb2xhdGVkIHZlcnNpb24KLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODBTCTB4NDY4MgkvLyBTdGFuZGFyZCB2ZXJzaW9uIHdpdGggU2FtcGxlIGFuZCBIb2xkCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjgwSVMJMHg0NjgzCS8vIElzb2xhdGVkIHZlcnNpb24gd2l0aCBTYW1wbGUgYW5kIEhvbGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODAJMHg0NjgwCS8qICBTdGFuZGFyZCB2ZXJzaW9uICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVJTEhBVVNfTUU0NjgwSQkweDQ2ODEJLyogIElzb2xhdGVkIHZlcnNpb24gKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUlMSEFVU19NRTQ2ODBTCTB4NDY4MgkvKiAgU3RhbmRhcmQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZCAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FSUxIQVVTX01FNDY4MElTCTB4NDY4MwkvKiAgSXNvbGF0ZWQgdmVyc2lvbiB3aXRoIFNhbXBsZSBhbmQgSG9sZCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIE1FLTQwMDAgYmFzZSByZWdpc3RlciBvZmZzZXRzCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSNkZWZpbmUgTUU0MDAwX0FPXzAwX0NUUkxfUkVHCQkJMHgwMAkvLyBSL1cKLSNkZWZpbmUgTUU0MDAwX0FPXzAwX1NUQVRVU19SRUcJCQkweDA0CS8vIFIvXwotI2RlZmluZSBNRTQwMDBfQU9fMDBfRklGT19SRUcJCQkweDA4CS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQU9fMDBfU0lOR0xFX1JFRwkJCTB4MEMJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9BT18wMF9USU1FUl9SRUcJCQkweDEwCS8vIF8vVworI2RlZmluZSBNRTQwMDBfQU9fMDBfQ1RSTF9SRUcJCQkweDAwCS8qICBSL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAwX1NUQVRVU19SRUcJCQkweDA0CS8qICBSL18gKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAwX0ZJRk9fUkVHCQkJMHgwOAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wMF9TSU5HTEVfUkVHCQkJMHgwQwkvKiAgUi9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wMF9USU1FUl9SRUcJCQkweDEwCS8qICBfL1cgKi8KIAotI2RlZmluZSBNRTQwMDBfQU9fMDFfQ1RSTF9SRUcJCQkweDE4CS8vIFIvVwotI2RlZmluZSBNRTQwMDBfQU9fMDFfU1RBVFVTX1JFRwkJCTB4MUMJLy8gUi9fCi0jZGVmaW5lIE1FNDAwMF9BT18wMV9GSUZPX1JFRwkJCTB4MjAJLy8gXy9XCi0jZGVmaW5lIE1FNDAwMF9BT18wMV9TSU5HTEVfUkVHCQkJMHgyNAkvLyBSL1cKLSNkZWZpbmUgTUU0MDAwX0FPXzAxX1RJTUVSX1JFRwkJCTB4MjgJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BT18wMV9DVFJMX1JFRwkJCTB4MTgJLyogIFIvVyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDFfU1RBVFVTX1JFRwkJCTB4MUMJLyogIFIvXyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDFfRklGT19SRUcJCQkweDIwCS8qICBfL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAxX1NJTkdMRV9SRUcJCQkweDI0CS8qICBSL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAxX1RJTUVSX1JFRwkJCTB4MjgJLyogIF8vVyAqLwogCi0jZGVmaW5lIE1FNDAwMF9BT18wMl9DVFJMX1JFRwkJCTB4MzAJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9BT18wMl9TVEFUVVNfUkVHCQkJMHgzNAkvLyBSL18KLSNkZWZpbmUgTUU0MDAwX0FPXzAyX0ZJRk9fUkVHCQkJMHgzOAkvLyBfL1cKLSNkZWZpbmUgTUU0MDAwX0FPXzAyX1NJTkdMRV9SRUcJCQkweDNDCS8vIFIvVwotI2RlZmluZSBNRTQwMDBfQU9fMDJfVElNRVJfUkVHCQkJMHg0MAkvLyBfL1cKKyNkZWZpbmUgTUU0MDAwX0FPXzAyX0NUUkxfUkVHCQkJMHgzMAkvKiAgUi9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wMl9TVEFUVVNfUkVHCQkJMHgzNAkvKiAgUi9fICovCisjZGVmaW5lIE1FNDAwMF9BT18wMl9GSUZPX1JFRwkJCTB4MzgJLyogIF8vVyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDJfU0lOR0xFX1JFRwkJCTB4M0MJLyogIFIvVyAqLworI2RlZmluZSBNRTQwMDBfQU9fMDJfVElNRVJfUkVHCQkJMHg0MAkvKiAgXy9XICovCiAKLSNkZWZpbmUgTUU0MDAwX0FPXzAzX0NUUkxfUkVHCQkJMHg0OAkvLyBSL1cKLSNkZWZpbmUgTUU0MDAwX0FPXzAzX1NUQVRVU19SRUcJCQkweDRDCS8vIFIvXwotI2RlZmluZSBNRTQwMDBfQU9fMDNfRklGT19SRUcJCQkweDUwCS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQU9fMDNfU0lOR0xFX1JFRwkJCTB4NTQJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9BT18wM19USU1FUl9SRUcJCQkweDU4CS8vIF8vVworI2RlZmluZSBNRTQwMDBfQU9fMDNfQ1RSTF9SRUcJCQkweDQ4CS8qICBSL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAzX1NUQVRVU19SRUcJCQkweDRDCS8qICBSL18gKi8KKyNkZWZpbmUgTUU0MDAwX0FPXzAzX0ZJRk9fUkVHCQkJMHg1MAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wM19TSU5HTEVfUkVHCQkJMHg1NAkvKiAgUi9XICovCisjZGVmaW5lIE1FNDAwMF9BT18wM19USU1FUl9SRUcJCQkweDU4CS8qICBfL1cgKi8KIAotI2RlZmluZSBNRTQwMDBfQUlfQ1RSTF9SRUcJCQkweDc0CS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX1JFRwkJCTB4NzQJLy8gUi9fCi0jZGVmaW5lIE1FNDAwMF9BSV9DSEFOTkVMX0xJU1RfUkVHCQkweDc4CS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQUlfREFUQV9SRUcJCQkweDdDCS8vIFIvXwotI2RlZmluZSBNRTQwMDBfQUlfQ0hBTl9USU1FUl9SRUcJCTB4ODAJLy8gXy9XCi0jZGVmaW5lIE1FNDAwMF9BSV9DSEFOX1BSRV9USU1FUl9SRUcJCTB4ODQJLy8gXy9XCi0jZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1RJTUVSX0xPV19SRUcJCTB4ODgJLy8gXy9XCi0jZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1RJTUVSX0hJR0hfUkVHCQkweDhDCS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9QUkVfVElNRVJfTE9XX1JFRwkweDkwCS8vIF8vVwotI2RlZmluZSBNRTQwMDBfQUlfU0NBTl9QUkVfVElNRVJfSElHSF9SRUcJMHg5NAkvLyBfL1cKLSNkZWZpbmUgTUU0MDAwX0FJX1NUQVJUX1JFRwkJCTB4OTgJLy8gUi9fCisjZGVmaW5lIE1FNDAwMF9BSV9DVFJMX1JFRwkJCTB4NzQJLyogIF8vVyAqLworI2RlZmluZSBNRTQwMDBfQUlfU1RBVFVTX1JFRwkJCTB4NzQJLyogIFIvXyAqLworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTk5FTF9MSVNUX1JFRwkJMHg3OAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BSV9EQVRBX1JFRwkJCTB4N0MJLyogIFIvXyAqLworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTl9USU1FUl9SRUcJCTB4ODAJLyogIF8vVyAqLworI2RlZmluZSBNRTQwMDBfQUlfQ0hBTl9QUkVfVElNRVJfUkVHCQkweDg0CS8qICBfL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX1NDQU5fVElNRVJfTE9XX1JFRwkJMHg4OAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1RJTUVSX0hJR0hfUkVHCQkweDhDCS8qICBfL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX1NDQU5fUFJFX1RJTUVSX0xPV19SRUcJMHg5MAkvKiAgXy9XICovCisjZGVmaW5lIE1FNDAwMF9BSV9TQ0FOX1BSRV9USU1FUl9ISUdIX1JFRwkweDk0CS8qICBfL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0FJX1NUQVJUX1JFRwkJCTB4OTgJLyogIFIvXyAqLwogCi0jZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX1JFRwkJCTB4OUMJLy8gUi9fCisjZGVmaW5lIE1FNDAwMF9JUlFfU1RBVFVTX1JFRwkJCTB4OUMJLyogIFIvXyAqLwogCi0jZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8wX1JFRwkJCTB4QTAJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8xX1JFRwkJCTB4QTQJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8yX1JFRwkJCTB4QTgJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8zX1JFRwkJCTB4QUMJLy8gUi9XCi0jZGVmaW5lIE1FNDAwMF9ESU9fRElSX1JFRwkJCTB4QjAJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8wX1JFRwkJCTB4QTAJLyogIFIvVyAqLworI2RlZmluZSBNRTQwMDBfRElPX1BPUlRfMV9SRUcJCQkweEE0CS8qICBSL1cgKi8KKyNkZWZpbmUgTUU0MDAwX0RJT19QT1JUXzJfUkVHCQkJMHhBOAkvKiAgUi9XICovCisjZGVmaW5lIE1FNDAwMF9ESU9fUE9SVF8zX1JFRwkJCTB4QUMJLyogIFIvVyAqLworI2RlZmluZSBNRTQwMDBfRElPX0RJUl9SRUcJCQkweEIwCS8qICBSL1cgKi8KIAotI2RlZmluZSBNRTQwMDBfQU9fTE9BRFNFVFJFR19YWAkJCTB4QjQJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9BT19MT0FEU0VUUkVHX1hYCQkJMHhCNAkvKiAgUi9XICovCiAKLSNkZWZpbmUgTUU0MDAwX0RJT19DVFJMX1JFRwkJCTB4QjgJLy8gUi9XCisjZGVmaW5lIE1FNDAwMF9ESU9fQ1RSTF9SRUcJCQkweEI4CS8qICBSL1cgKi8KIAotI2RlZmluZSBNRTQwMDBfQU9fREVNVVhfQURKVVNUX1JFRwkJMHhCQwkvLyAtL1cKKyNkZWZpbmUgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9SRUcJCTB4QkMJLyogIC0vVyAqLwogCi0jZGVmaW5lIE1FNDAwMF9BSV9TQU1QTEVfQ09VTlRFUl9SRUcJCTB4QzAJLy8gXy9XCisjZGVmaW5lIE1FNDAwMF9BSV9TQU1QTEVfQ09VTlRFUl9SRUcJCTB4QzAJLyogIF8vVyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIFZhbHVlIHRvIGFkanVzdCBEZW11eApAQCAtMTU5LDIxICsxNTksMjEgQEAKICAgUExYIGJhc2UgcmVnaXN0ZXIgb2Zmc2V0cwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIFBMWF9JTlRDU1IJMHg0QwkvLyBJbnRlcnJ1cHQgY29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyCi0jZGVmaW5lIFBMWF9JQ1IJCTB4NTAJLy8gSW5pdGlhbGl6YXRpb24gY29udHJvbCByZWdpc3RlcgorI2RlZmluZSBQTFhfSU5UQ1NSCTB4NEMJLyogIEludGVycnVwdCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUExYX0lDUgkJMHg1MAkvKiAgSW5pdGlhbGl6YXRpb24gY29udHJvbCByZWdpc3RlciAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEJpdHMgZm9yIHRoZSBQTFhfSUNTUiByZWdpc3RlcgogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMV9FTiAgICAgICAgICAgICAweDAxCS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDEgaXMgZW5hYmxlZCAoci93KQotI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDFfUE9MICAgICAgICAgICAgMHgwMgkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAxIHBvbGFyaXR5IGlzIGFjdGl2ZSBoaWdoIChyL3cpCi0jZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMV9TVEFURSAgICAgICAgICAweDA0CS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDEgaXMgYWN0aXZlIChyL18pCi0jZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMl9FTiAgICAgICAgICAgICAweDA4CS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDIgaXMgZW5hYmxlZCAoci93KQotI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDJfUE9MICAgICAgICAgICAgMHgxMAkvLyBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAyIHBvbGFyaXR5IGlzIGFjdGl2ZSBoaWdoIChyL3cpCi0jZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMl9TVEFURSAgICAgICAgICAweDIwCS8vIElmIHNldCwgbG9jYWwgaW50ZXJydXB0IDIgaXMgYWN0aXZlICAoci9fKQotI2RlZmluZSBQTFhfSU5UQ1NSX1BDSV9JTlRfRU4gICAgICAgICAgICAgICAgMHg0MAkvLyBJZiBzZXQsIFBDSSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCAoci93KQotI2RlZmluZSBQTFhfSU5UQ1NSX1NPRlRfSU5UICAgICAgICAgICAgICAgICAgMHg4MAkvLyBJZiBzZXQsIGEgc29mdHdhcmUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCAoci93KQorI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDFfRU4gICAgICAgICAgICAgMHgwMQkvKiAgSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMSBpcyBlbmFibGVkIChyL3cpICovCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMV9QT0wgICAgICAgICAgICAweDAyCS8qICBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAxIHBvbGFyaXR5IGlzIGFjdGl2ZSBoaWdoIChyL3cpICovCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMV9TVEFURSAgICAgICAgICAweDA0CS8qICBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAxIGlzIGFjdGl2ZSAoci9fKSAqLworI2RlZmluZSBQTFhfSU5UQ1NSX0xPQ0FMX0lOVDJfRU4gICAgICAgICAgICAgMHgwOAkvKiAgSWYgc2V0LCBsb2NhbCBpbnRlcnJ1cHQgMiBpcyBlbmFibGVkIChyL3cpICovCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMl9QT0wgICAgICAgICAgICAweDEwCS8qICBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAyIHBvbGFyaXR5IGlzIGFjdGl2ZSBoaWdoIChyL3cpICovCisjZGVmaW5lIFBMWF9JTlRDU1JfTE9DQUxfSU5UMl9TVEFURSAgICAgICAgICAweDIwCS8qICBJZiBzZXQsIGxvY2FsIGludGVycnVwdCAyIGlzIGFjdGl2ZSAgKHIvXykgKi8KKyNkZWZpbmUgUExYX0lOVENTUl9QQ0lfSU5UX0VOICAgICAgICAgICAgICAgIDB4NDAJLyogIElmIHNldCwgUENJIGludGVycnVwdCBpcyBlbmFibGVkIChyL3cpICovCisjZGVmaW5lIFBMWF9JTlRDU1JfU09GVF9JTlQgICAgICAgICAgICAgICAgICAweDgwCS8qICBJZiBzZXQsIGEgc29mdHdhcmUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCAoci93KSAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEJpdHMgZm9yIHRoZSBQTFhfSUNSIHJlZ2lzdGVyCkBAIC0yOTMsNDUgKzI5Myw0NSBAQAogICBJbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9hb19pbmZvIHsKK3N0cnVjdCBtZTQwMDBfYW9faW5mbyB7CiAJaW50IGNvdW50OwogCWludCBmaWZvX2NvdW50OwotfSBtZTQwMDBfYW9faW5mb190OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2FpX2luZm8geworc3RydWN0IG1lNDAwMF9haV9pbmZvIHsKIAlpbnQgY291bnQ7CiAJaW50IHNoX2NvdW50OwogCWludCBkaWZmX2NvdW50OwogCWludCBleF90cmlnX2FuYWxvZzsKLX0gbWU0MDAwX2FpX2luZm9fdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9kaW9faW5mbyB7CitzdHJ1Y3QgbWU0MDAwX2Rpb19pbmZvIHsKIAlpbnQgY291bnQ7Ci19IG1lNDAwMF9kaW9faW5mb190OworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgbWU0MDAwX2NudF9pbmZvIHsKK3N0cnVjdCBtZTQwMDBfY250X2luZm8gewogCWludCBjb3VudDsKLX0gbWU0MDAwX2NudF9pbmZvX3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBtZTQwMDBfYm9hcmQgeworc3RydWN0IG1lNDAwMF9ib2FyZCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAl1bnNpZ25lZCBzaG9ydCBkZXZpY2VfaWQ7Ci0JbWU0MDAwX2FvX2luZm9fdCBhbzsKLQltZTQwMDBfYWlfaW5mb190IGFpOwotCW1lNDAwMF9kaW9faW5mb190IGRpbzsKLQltZTQwMDBfY250X2luZm9fdCBjbnQ7Ci19IG1lNDAwMF9ib2FyZF90OworCXN0cnVjdCBtZTQwMDBfYW9faW5mbyBhbzsKKwlzdHJ1Y3QgbWU0MDAwX2FpX2luZm8gYWk7CisJc3RydWN0IG1lNDAwMF9kaW9faW5mbyBkaW87CisJc3RydWN0IG1lNDAwMF9jbnRfaW5mbyBjbnQ7Cit9OwogCi0jZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IG1lNDAwMF9ib2FyZF90ICopZGV2LT5ib2FyZF9wdHIpCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBtZTQwMDBfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBHbG9iYWwgYm9hcmQgYW5kIHN1YmRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9hb19jb250ZXh0IHsKK3N0cnVjdCBtZTQwMDBfYW9fY29udGV4dCB7CiAJaW50IGlycTsKIAotCXVuc2lnbmVkIGxvbmcgbWlycm9yOwkvLyBTdG9yZSB0aGUgbGFzdCB3cml0dGVuIHZhbHVlCisJdW5zaWduZWQgbG9uZyBtaXJyb3I7CS8qICBTdG9yZSB0aGUgbGFzdCB3cml0dGVuIHZhbHVlICovCiAKIAl1bnNpZ25lZCBsb25nIGN0cmxfcmVnOwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzX3JlZzsKQEAgLTM0MCw5ICszNDAsOSBAQAogCXVuc2lnbmVkIGxvbmcgdGltZXJfcmVnOwogCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXR1c19yZWc7CiAJdW5zaWduZWQgbG9uZyBwcmVsb2FkX3JlZzsKLX0gbWU0MDAwX2FvX2NvbnRleHRfdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9haV9jb250ZXh0IHsKK3N0cnVjdCBtZTQwMDBfYWlfY29udGV4dCB7CiAJaW50IGlycTsKIAogCXVuc2lnbmVkIGxvbmcgY3RybF9yZWc7CkBAIC0zNTgsNTEgKzM1OCw1MSBAQAogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcmVnOwogCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXR1c19yZWc7CiAJdW5zaWduZWQgbG9uZyBzYW1wbGVfY291bnRlcl9yZWc7Ci19IG1lNDAwMF9haV9jb250ZXh0X3Q7Cit9OwogCi10eXBlZGVmIHN0cnVjdCBtZTQwMDBfZGlvX2NvbnRleHQgeworc3RydWN0IG1lNDAwMF9kaW9fY29udGV4dCB7CiAJdW5zaWduZWQgbG9uZyBkaXJfcmVnOwogCXVuc2lnbmVkIGxvbmcgY3RybF9yZWc7CiAJdW5zaWduZWQgbG9uZyBwb3J0XzBfcmVnOwogCXVuc2lnbmVkIGxvbmcgcG9ydF8xX3JlZzsKIAl1bnNpZ25lZCBsb25nIHBvcnRfMl9yZWc7CiAJdW5zaWduZWQgbG9uZyBwb3J0XzNfcmVnOwotfSBtZTQwMDBfZGlvX2NvbnRleHRfdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCB7CitzdHJ1Y3QgbWU0MDAwX2NudF9jb250ZXh0IHsKIAl1bnNpZ25lZCBsb25nIGN0cmxfcmVnOwogCXVuc2lnbmVkIGxvbmcgY291bnRlcl8wX3JlZzsKIAl1bnNpZ25lZCBsb25nIGNvdW50ZXJfMV9yZWc7CiAJdW5zaWduZWQgbG9uZyBjb3VudGVyXzJfcmVnOwotfSBtZTQwMDBfY250X2NvbnRleHRfdDsKK307CiAKLXR5cGVkZWYgc3RydWN0IG1lNDAwMF9pbmZvIHsKLQl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlOwkvLyBQTFggY29uZmlndXJhdGlvbiBzcGFjZSBiYXNlIGFkZHJlc3MKLQl1bnNpZ25lZCBsb25nIG1lNDAwMF9yZWdiYXNlOwkvLyBCYXNlIGFkZHJlc3Mgb2YgdGhlIE1FNDAwMAotCXVuc2lnbmVkIGxvbmcgdGltZXJfcmVnYmFzZTsJLy8gQmFzZSBhZGRyZXNzIG9mIHRoZSB0aW1lciBjaXJjdWl0Ci0JdW5zaWduZWQgbG9uZyBwcm9ncmFtX3JlZ2Jhc2U7CS8vIEJhc2UgYWRkcmVzcyB0byBzZXQgdGhlIHByb2dyYW0gcGluIGZvciB0aGUgeGlsaW54CitzdHJ1Y3QgbWU0MDAwX2luZm8geworCXVuc2lnbmVkIGxvbmcgcGx4X3JlZ2Jhc2U7CS8qICBQTFggY29uZmlndXJhdGlvbiBzcGFjZSBiYXNlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIG1lNDAwMF9yZWdiYXNlOwkvKiAgQmFzZSBhZGRyZXNzIG9mIHRoZSBNRTQwMDAgKi8KKwl1bnNpZ25lZCBsb25nIHRpbWVyX3JlZ2Jhc2U7CS8qICBCYXNlIGFkZHJlc3Mgb2YgdGhlIHRpbWVyIGNpcmN1aXQgKi8KKwl1bnNpZ25lZCBsb25nIHByb2dyYW1fcmVnYmFzZTsJLyogIEJhc2UgYWRkcmVzcyB0byBzZXQgdGhlIHByb2dyYW0gcGluIGZvciB0aGUgeGlsaW54ICovCiAKLQl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlX3NpemU7CS8vIFBMWCByZWdpc3RlciBzZXQgc3BhY2UKLQl1bnNpZ25lZCBsb25nIG1lNDAwMF9yZWdiYXNlX3NpemU7CS8vIE1FNDAwMCByZWdpc3RlciBzZXQgc3BhY2UKLQl1bnNpZ25lZCBsb25nIHRpbWVyX3JlZ2Jhc2Vfc2l6ZTsJLy8gVGltZXIgY2lyY3VpdCByZWdpc3RlciBzZXQgc3BhY2UKLQl1bnNpZ25lZCBsb25nIHByb2dyYW1fcmVnYmFzZV9zaXplOwkvLyBTaXplIG9mIHByb2dyYW0gYmFzZSBhZGRyZXNzIG9mIHRoZSBNRTQwMDAKKwl1bnNpZ25lZCBsb25nIHBseF9yZWdiYXNlX3NpemU7CS8qICBQTFggcmVnaXN0ZXIgc2V0IHNwYWNlICovCisJdW5zaWduZWQgbG9uZyBtZTQwMDBfcmVnYmFzZV9zaXplOwkvKiAgTUU0MDAwIHJlZ2lzdGVyIHNldCBzcGFjZSAqLworCXVuc2lnbmVkIGxvbmcgdGltZXJfcmVnYmFzZV9zaXplOwkvKiAgVGltZXIgY2lyY3VpdCByZWdpc3RlciBzZXQgc3BhY2UgKi8KKwl1bnNpZ25lZCBsb25nIHByb2dyYW1fcmVnYmFzZV9zaXplOwkvKiAgU2l6ZSBvZiBwcm9ncmFtIGJhc2UgYWRkcmVzcyBvZiB0aGUgTUU0MDAwICovCiAKLQl1bnNpZ25lZCBpbnQgc2VyaWFsX25vOwkvLyBTZXJpYWwgbnVtYmVyIG9mIHRoZSBib2FyZAotCXVuc2lnbmVkIGNoYXIgaHdfcmV2aXNpb247CS8vIEhhcmR3YXJlIHJldmlzaW9uIG9mIHRoZSBib2FyZAotCXVuc2lnbmVkIHNob3J0IHZlbmRvcl9pZDsJLy8gTWVpbGhhdXMgdmVuZG9yIGlkCi0JdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOwkvLyBEZXZpY2UgaWQKKwl1bnNpZ25lZCBpbnQgc2VyaWFsX25vOwkvKiAgU2VyaWFsIG51bWJlciBvZiB0aGUgYm9hcmQgKi8KKwl1bnNpZ25lZCBjaGFyIGh3X3JldmlzaW9uOwkvKiAgSGFyZHdhcmUgcmV2aXNpb24gb2YgdGhlIGJvYXJkICovCisJdW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkOwkvKiAgTWVpbGhhdXMgdmVuZG9yIGlkICovCisJdW5zaWduZWQgc2hvcnQgZGV2aWNlX2lkOwkvKiAgRGV2aWNlIGlkICovCiAKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldl9wOwkvLyBHZW5lcmFsIFBDSSBpbmZvcm1hdGlvbgorCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2X3A7CS8qICBHZW5lcmFsIFBDSSBpbmZvcm1hdGlvbiAqLwogCi0JdW5zaWduZWQgaW50IGlycTsJLy8gSVJRIGFzc2lnbmVkIGZyb20gdGhlIFBDSSBCSU9TCisJdW5zaWduZWQgaW50IGlycTsJLyogIElSUSBhc3NpZ25lZCBmcm9tIHRoZSBQQ0kgQklPUyAqLwogCi0Jc3RydWN0IG1lNDAwMF9haV9jb250ZXh0IGFpX2NvbnRleHQ7CS8vIEFuYWxvZyBpbnB1dCAgc3BlY2lmaWMgY29udGV4dAotCXN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCBhb19jb250ZXh0WzRdOwkvLyBWZWN0b3Igd2l0aCBhbmFsb2cgb3V0cHV0IHNwZWNpZmljIGNvbnRleHQKLQlzdHJ1Y3QgbWU0MDAwX2Rpb19jb250ZXh0IGRpb19jb250ZXh0OwkvLyBEaWdpdGFsIEkvTyBzcGVjaWZpYyBjb250ZXh0Ci0Jc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCBjbnRfY29udGV4dDsJLy8gQ291bnRlciBzcGVjaWZpYyBjb250ZXh0Ci19IG1lNDAwMF9pbmZvX3Q7CisJc3RydWN0IG1lNDAwMF9haV9jb250ZXh0IGFpX2NvbnRleHQ7CS8qICBBbmFsb2cgaW5wdXQgIHNwZWNpZmljIGNvbnRleHQgKi8KKwlzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgYW9fY29udGV4dFs0XTsJLyogIFZlY3RvciB3aXRoIGFuYWxvZyBvdXRwdXQgc3BlY2lmaWMgY29udGV4dCAqLworCXN0cnVjdCBtZTQwMDBfZGlvX2NvbnRleHQgZGlvX2NvbnRleHQ7CS8qICBEaWdpdGFsIEkvTyBzcGVjaWZpYyBjb250ZXh0ICovCisJc3RydWN0IG1lNDAwMF9jbnRfY29udGV4dCBjbnRfY29udGV4dDsJLyogIENvdW50ZXIgc3BlY2lmaWMgY29udGV4dCAqLworfTsKIAotI2RlZmluZSBpbmZvCSgobWU0MDAwX2luZm9fdCAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgaW5mbwkoKHN0cnVjdCBtZTQwMDBfaW5mbyAqKWRldi0+cHJpdmF0ZSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBEZWZpbmVzIGZvciBhbmFsb2cgaW5wdXQKQEAgLTQxMiw3ICs0MTIsNyBAQAogI2RlZmluZSBNRTQwMDBfQUlfRklGT19DT1VOVAkJCTIwNDgKIAogI2RlZmluZSBNRTQwMDBfQUlfTUlOX1RJQ0tTCQkJNjYKLSNkZWZpbmUgTUU0MDAwX0FJX01JTl9TQU1QTEVfVElNRQkJMjAwMAkvLyBNaW5pbXVtIHNhbXBsZSB0aW1lIFtuc10KKyNkZWZpbmUgTUU0MDAwX0FJX01JTl9TQU1QTEVfVElNRQkJMjAwMAkvKiAgTWluaW11bSBzYW1wbGUgdGltZSBbbnNdICovCiAjZGVmaW5lIE1FNDAwMF9BSV9CQVNFX0ZSRVFVRU5DWQkJKHVuc2lnbmVkIGludCkgMzNFNgogCiAvKiBDaGFubmVsIGxpc3QgZGVmaW5lcyBhbmQgbWFza3MgKi8KQEAgLTQzNiwxMSArNDM2LDExIEBACiAjZGVmaW5lIE1FNDAwMF9DTlRfQ09VTlRFUl8xICAweDQwCiAjZGVmaW5lIE1FNDAwMF9DTlRfQ09VTlRFUl8yICAweDgwCiAKLSNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzAgICAgIDB4MDAJLy8gQ2hhbmdlIHN0YXRlIGlmIHplcm8gY3Jvc3NpbmcKLSNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzEgICAgIDB4MDIJLy8gUmV0cmlnZ2VyYWJsZSBPbmUtU2hvdAotI2RlZmluZSBNRTQwMDBfQ05UX01PREVfMiAgICAgMHgwNAkvLyBBc3ltbWV0cmljYWwgZGl2aWRlcgotI2RlZmluZSBNRTQwMDBfQ05UX01PREVfMyAgICAgMHgwNgkvLyBTeW1tZXRyaWNhbCBkaXZpZGVyCi0jZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV80ICAgICAweDA4CS8vIENvdW50ZXIgc3RhcnQgYnkgc29mdHdhcmUgdHJpZ2dlcgotI2RlZmluZSBNRTQwMDBfQ05UX01PREVfNSAgICAgMHgwQQkvLyBDb3VudGVyIHN0YXJ0IGJ5IGhhcmR3YXJlIHRyaWdnZXIKKyNkZWZpbmUgTUU0MDAwX0NOVF9NT0RFXzAgICAgIDB4MDAJLyogIENoYW5nZSBzdGF0ZSBpZiB6ZXJvIGNyb3NzaW5nICovCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8xICAgICAweDAyCS8qICBSZXRyaWdnZXJhYmxlIE9uZS1TaG90ICovCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV8yICAgICAweDA0CS8qICBBc3ltbWV0cmljYWwgZGl2aWRlciAqLworI2RlZmluZSBNRTQwMDBfQ05UX01PREVfMyAgICAgMHgwNgkvKiAgU3ltbWV0cmljYWwgZGl2aWRlciAqLworI2RlZmluZSBNRTQwMDBfQ05UX01PREVfNCAgICAgMHgwOAkvKiAgQ291bnRlciBzdGFydCBieSBzb2Z0d2FyZSB0cmlnZ2VyICovCisjZGVmaW5lIE1FNDAwMF9DTlRfTU9ERV81ICAgICAweDBBCS8qICBDb3VudGVyIHN0YXJ0IGJ5IGhhcmR3YXJlIHRyaWdnZXIgKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKaW5kZXggNmFjY2VjMi4uMGYwMjNkMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tZV9kYXEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWVfZGFxLmMKQEAgLTE0NCwxMCArMTQ0LDEwIEBACiAjZGVmaW5lIE1FX0NPVU5URVJfVkFMVUVfQgkJMHgwMDIyCS8qIFIgfCAtICovCiAKIC8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLXN0YXRpYyBpbnQgbWVfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpOwotc3RhdGljIGludCBtZV9kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgbWVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IG1lX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIAotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgbWUyMDAwX2FpX3JhbmdlID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIG1lMjAwMF9haV9yYW5nZSA9IHsKIAk4LAogCXsKIAkJQklQX1JBTkdFKDEwKSwKQEAgLTE2MSw3ICsxNjEsNyBAQAogCX0KIH07CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIG1lMjYwMF9haV9yYW5nZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBtZTI2MDBfYWlfcmFuZ2UgPSB7CiAJOCwKIAl7CiAJCQlCSVBfUkFOR0UoMTApLApAQCAtMTc1LDcgKzE3NSw3IEBACiAJCX0KIH07CiAKLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIG1lMjYwMF9hb19yYW5nZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBtZTI2MDBfYW9fcmFuZ2UgPSB7CiAJMywKIAl7CiAJCQlCSVBfUkFOR0UoMTApLApAQCAtMjAxLDExICsyMDEsMTEgQEAKIAlpbnQgYW9fY2hhbm5lbF9uYnI7CS8qIERBIGNvbmZpZyAqLwogCWludCBhb19yZXNvbHV0aW9uOwogCWludCBhb19yZXNvbHV0aW9uX21hc2s7Ci0JY29uc3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfbGlzdDsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfbGlzdDsKIAlpbnQgYWlfY2hhbm5lbF9uYnI7CS8qIEFEIGNvbmZpZyAqLwogCWludCBhaV9yZXNvbHV0aW9uOwogCWludCBhaV9yZXNvbHV0aW9uX21hc2s7Ci0JY29uc3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfbGlzdDsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfbGlzdDsKIAlpbnQgZGlvX2NoYW5uZWxfbmJyOwkvKiBESU8gY29uZmlnICovCiB9OwogCkBAIC0yNDYsNyArMjQ2LDggQEAKIAogI2RlZmluZSBtZV9ib2FyZF9uYnIgKHNpemVvZihtZV9ib2FyZHMpL3NpemVvZihzdHJ1Y3QgbWVfYm9hcmQpKQogCi1zdGF0aWMgY29tZWRpX2RyaXZlciBtZV9kcml2ZXIgPSB7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBtZV9kcml2ZXIgPSB7CiAgICAgICAuZHJpdmVyX25hbWUgPQlNRV9EUklWRVJfTkFNRSwKICAgICAgIC5tb2R1bGUgPQkJVEhJU19NT0RVTEUsCiAgICAgICAuYXR0YWNoID0JCW1lX2F0dGFjaCwKQEAgLTI5MCw4ICsyOTEsOCBAQAogICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi1zdGF0aWMgaW50IG1lX2Rpb19pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IG1lX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBiaXRzOwogCWludCBtYXNrID0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKQEAgLTMyNiw4ICszMjcsOCBAQAogfQogCiAvKiBEaWdpdGFsIGluc3RhbnQgaW5wdXQvb3V0cHV0cyAqLwotc3RhdGljIGludCBtZV9kaW9faW5zbl9iaXRzKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IG1lX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJdW5zaWduZWQgaW50IG1hc2sgPSBkYXRhWzBdOwogCXMtPnN0YXRlICY9IH5tYXNrOwpAQCAtMzYyLDggKzM2Myw4IEBACiAgKi8KIAogLyogQW5hbG9nIGluc3RhbnQgaW5wdXQgKi8KLXN0YXRpYyBpbnQgbWVfYWlfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlLAotCQkJICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBtZV9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZSwKKwkJCSAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXVuc2lnbmVkIHNob3J0IHZhbHVlOwogCWludCBjaGFuID0gQ1JfQ0hBTigoJmluc24tPmNoYW5zcGVjKVswXSk7CkBAIC00MzYsNyArNDM3LDcgQEAKICAqLwogCiAvKiBDYW5jZWwgYW5hbG9nIGlucHV0IGF1dG9zY2FuICovCi1zdGF0aWMgaW50IG1lX2FpX2NhbmNlbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IG1lX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KIApAQCAtNDQ4LDE0ICs0NDksMTQgQEAKIH0KIAogLyogVGVzdCBhbmFsb2cgaW5wdXQgY29tbWFuZCAqLwotc3RhdGljIGludCBtZV9haV9kb19jbWRfdGVzdChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgIGNvbWVkaV9jbWQgKmNtZCkKK3N0YXRpYyBpbnQgbWVfYWlfZG9fY21kX3Rlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIEFuYWxvZyBpbnB1dCBjb21tYW5kICovCi1zdGF0aWMgaW50IG1lX2FpX2RvX2NtZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnN1YmRldmljZSkKK3N0YXRpYyBpbnQgbWVfYWlfZG9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2UpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC00NjksOCArNDcwLDggQEAKICAqLwogCiAvKiBBbmFsb2cgaW5zdGFudCBvdXRwdXQgKi8KLXN0YXRpYyBpbnQgbWVfYW9faW5zbl93cml0ZShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCBtZV9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBjaGFuOwogCWludCByYW5nOwpAQCAtNTE5LDggKzUyMCw4IEBACiB9CiAKIC8qIEFuYWxvZyBvdXRwdXQgcmVhZGJhY2sgKi8KLXN0YXRpYyBpbnQgbWVfYW9faW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgbWVfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGk7CiAKQEAgLTU0MSw3ICs1NDIsNyBAQAogICovCiAKIC8qIFhpbGlueCBmaXJtd2FyZSBkb3dubG9hZCBmb3IgY2FyZDogTUUtMjYwMGkgKi8KLXN0YXRpYyBpbnQgbWUyNjAwX3hpbGlueF9kb3dubG9hZChjb21lZGlfZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IG1lMjYwMF94aWxpbnhfZG93bmxvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAkJCQkgIHVuc2lnbmVkIGNoYXIgKm1lMjYwMF9maXJtd2FyZSwKIAkJCQkgIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CkBAIC02MDksNyArNjEwLDcgQEAKIH0KIAogLyogUmVzZXQgZGV2aWNlICovCi1zdGF0aWMgaW50IG1lX3Jlc2V0KGNvbWVkaV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbWVfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAkvKiBSZXNldCBib2FyZCAqLwogCXdyaXRldygweDAwLCBkZXZfcHJpdmF0ZS0+bWVfcmVnYmFzZSArIE1FX0NPTlRST0xfMSk7CkBAIC02MzEsMTAgKzYzMiwxMCBAQAogICogLSBSZWdpc3RlciBQQ0kgZGV2aWNlCiAgKiAtIERlY2xhcmUgZGV2aWNlIGRyaXZlciBjYXBhYmlsaXR5CiAgKi8KLXN0YXRpYyBpbnQgbWVfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX2RldmNvbmZpZyAqaXQpCitzdGF0aWMgaW50IG1lX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2U7Ci0JY29tZWRpX3N1YmRldmljZSAqc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXZpY2U7CiAJc3RydWN0IG1lX2JvYXJkICpib2FyZDsKIAlyZXNvdXJjZV9zaXplX3QgcGx4X3JlZ2Jhc2VfdG1wOwogCXVuc2lnbmVkIGxvbmcgcGx4X3JlZ2Jhc2Vfc2l6ZV90bXA7CkBAIC04MjUsNyArODI2LDcgQEAKIH0KIAogLyogRGV0YWNoICovCi1zdGF0aWMgaW50IG1lX2RldGFjaChjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG1lX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCWlmIChkZXZfcHJpdmF0ZSkgewogCQlpZiAoZGV2X3ByaXZhdGUtPm1lX3JlZ2Jhc2UpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jCmluZGV4IDljYzUyNzQuLmFlOTAxNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYwpAQCAtNDcsNyArNDcsNyBAQAogCiAqLwogCi0vLyNkZWZpbmUgVVNFX0tNQUxMT0MKKy8qICNkZWZpbmUgVVNFX0tNQUxMT0MgKi8KIAogI2luY2x1ZGUgIm1pdGUuaCIKIApAQCAtNjMsNyArNjMsNyBAQAogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZV9kZXZpY2VzID0gTlVMTDsKK3N0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZV9kZXZpY2VzOwogCiAjZGVmaW5lIFRPUF9PRl9QQUdFKHgpICgoeCl8KH4oUEFHRV9NQVNLKSkpCiAKQEAgLTEwMyw3ICsxMDMsNyBAQAogCXByaW50aygibWl0ZTogbnVtIGNoYW5uZWxzID0gJWksIHdyaXRlIHBvc3QgZmlmbyBkZXB0aCA9ICVpLCB3aW5zID0gJWksIGlvd2lucyA9ICVpXG4iLCBtaXRlX2NzaWdyX2RtYWMoY3NpZ3JfYml0cyksIG1pdGVfY3NpZ3Jfd3BkZXAoY3NpZ3JfYml0cyksIG1pdGVfY3NpZ3Jfd2lucyhjc2lncl9iaXRzKSwgbWl0ZV9jc2lncl9pb3dpbnMoY3NpZ3JfYml0cykpOwogfQogCi11bnNpZ25lZCBtaXRlX2ZpZm9fc2l6ZShzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKiBtaXRlLCB1bnNpZ25lZCBjaGFubmVsKQordW5zaWduZWQgbWl0ZV9maWZvX3NpemUoc3RydWN0IG1pdGVfc3RydWN0ICptaXRlLCB1bnNpZ25lZCBjaGFubmVsKQogewogCXVuc2lnbmVkIGZjcl9iaXRzID0gcmVhZGwobWl0ZS0+bWl0ZV9pb19hZGRyICsKIAkJTUlURV9GQ1IoY2hhbm5lbCkpOwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChtaXRlLT5wY2lkZXYsIDEpOwogCW1pdGUtPmRhcV9waHlzX2FkZHIgPSBhZGRyOwogCWxlbmd0aCA9IHBjaV9yZXNvdXJjZV9sZW4obWl0ZS0+cGNpZGV2LCAxKTsKLQkvLyBJbiBjYXNlIG9mIGEgNjYweCBib2FyZCwgREFRIHNpemUgaXMgOGsgaW5zdGVhZCBvZiA0ayAoc2VlIGFzIHNob3duIGJ5IGxzcGNpIG91dHB1dCkKKwkvKiAgSW4gY2FzZSBvZiBhIDY2MHggYm9hcmQsIERBUSBzaXplIGlzIDhrIGluc3RlYWQgb2YgNGsgKHNlZSBhcyBzaG93biBieSBsc3BjaSBvdXRwdXQpICovCiAJbWl0ZS0+ZGFxX2lvX2FkZHIgPSBpb3JlbWFwKG1pdGUtPmRhcV9waHlzX2FkZHIsIGxlbmd0aCk7CiAJaWYgKCFtaXRlLT5kYXFfaW9fYWRkcikgewogCQlwcmludGsoImZhaWxlZCB0byByZW1hcCBkYXEgaW8gbWVtb3J5IGFkZHJlc3NcbiIpOwpAQCAtMjEyLDcgKzIxMiw3IEBACiAKIHZvaWQgbWl0ZV91bnNldHVwKHN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZSkKIHsKLQkvL3Vuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdGFydCwgbGVuZ3RoOworCS8qIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdGFydCwgbGVuZ3RoOyAqLwogCiAJaWYgKCFtaXRlKQogCQlyZXR1cm47CkBAIC0yNTcsNyArMjU3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtaXRlX2NoYW5uZWwgKmNoYW5uZWwgPSBOVUxMOwogCi0JLy8gc3BpbiBsb2NrIHNvIG1pdGVfcmVsZWFzZV9jaGFubmVsIGNhbiBiZSBjYWxsZWQgc2FmZWx5IGZyb20gaW50ZXJydXB0cworCS8qICBzcGluIGxvY2sgc28gbWl0ZV9yZWxlYXNlX2NoYW5uZWwgY2FuIGJlIGNhbGxlZCBzYWZlbHkgZnJvbSBpbnRlcnJ1cHRzICovCiAJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZtaXRlLT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gbWluX2NoYW5uZWw7IGkgPD0gbWF4X2NoYW5uZWw7ICsraSkgewogCQlpZiAobWl0ZS0+Y2hhbm5lbF9hbGxvY2F0ZWRbaV0gPT0gMCkgewpAQCAtMjc2LDcgKzI3Niw3IEBACiAJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlID0gbWl0ZV9jaGFuLT5taXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvLyBzcGluIGxvY2sgdG8gcHJldmVudCByYWNlcyB3aXRoIG1pdGVfcmVxdWVzdF9jaGFubmVsCisJLyogIHNwaW4gbG9jayB0byBwcmV2ZW50IHJhY2VzIHdpdGggbWl0ZV9yZXF1ZXN0X2NoYW5uZWwgKi8KIAljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJm1pdGUtPmxvY2ssIGZsYWdzKTsKIAlpZiAobWl0ZS0+Y2hhbm5lbF9hbGxvY2F0ZWRbbWl0ZV9jaGFuLT5jaGFubmVsXSkgewogCQltaXRlX2RtYV9kaXNhcm0obWl0ZV9jaGFuKTsKQEAgLTMxMiwxMiArMzEyLDEyIEBACiAJd3JpdGVsKGNob3IsIG1pdGUtPm1pdGVfaW9fYWRkciArIE1JVEVfQ0hPUihtaXRlX2NoYW4tPmNoYW5uZWwpKTsKIAltbWlvd2IoKTsKIAljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWl0ZS0+bG9jaywgZmxhZ3MpOwotLy8gICAgICBtaXRlX2RtYV90Y3IobWl0ZSwgY2hhbm5lbCk7CisvKiAgICAgICBtaXRlX2RtYV90Y3IobWl0ZSwgY2hhbm5lbCk7ICovCiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotaW50IG1pdGVfYnVmX2NoYW5nZShzdHJ1Y3QgbWl0ZV9kbWFfZGVzY3JpcHRvcl9yaW5nICpyaW5nLCBjb21lZGlfYXN5bmMgKiBhc3luYykKK2ludCBtaXRlX2J1Zl9jaGFuZ2Uoc3RydWN0IG1pdGVfZG1hX2Rlc2NyaXB0b3JfcmluZyAqcmluZywgc3RydWN0IGNvbWVkaV9hc3luYyAqIGFzeW5jKQogewogCXVuc2lnbmVkIGludCBuX2xpbmtzOwogCWludCBpOwpAQCAtMzMxLDkgKzMzMSw5IEBACiAJcmluZy0+ZGVzY3JpcHRvcnNfZG1hX2FkZHIgPSAwOwogCXJpbmctPm5fbGlua3MgPSAwOwogCi0JaWYgKGFzeW5jLT5wcmVhbGxvY19idWZzeiA9PSAwKSB7CisJaWYgKGFzeW5jLT5wcmVhbGxvY19idWZzeiA9PSAwKQogCQlyZXR1cm4gMDsKLQl9CisKIAluX2xpbmtzID0gYXN5bmMtPnByZWFsbG9jX2J1ZnN6ID4+IFBBR0VfU0hJRlQ7CiAKIAlNRFBSSU5USygicmluZy0+aHdfZGV2PSVwLCBuX2xpbmtzPTB4JTA0eFxuIiwgcmluZy0+aHdfZGV2LCBuX2xpbmtzKTsKQEAgLTM5NSw5ICszOTUsOSBAQAogCQkgICBvbiBlLXNlcmllcyBib2FyZHMuICAqLwogCQljaGNyIHw9IENIQ1JfQllURV9TV0FQX0RFVklDRSB8IENIQ1JfQllURV9TV0FQX01FTU9SWTsKIAl9Ci0JaWYgKG1pdGVfY2hhbi0+ZGlyID09IENPTUVESV9JTlBVVCkgeworCWlmIChtaXRlX2NoYW4tPmRpciA9PSBDT01FRElfSU5QVVQpCiAJCWNoY3IgfD0gQ0hDUl9ERVZfVE9fTUVNOwotCX0KKwogCXdyaXRlbChjaGNyLCBtaXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0NIQ1IobWl0ZV9jaGFuLT5jaGFubmVsKSk7CiAKIAkvKiB0by9mcm9tIG1lbW9yeSAqLwpAQCAtNDU5LDE1ICs0NTksMTUgQEAKIAlyZXR1cm4gcmVhZGwobWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9EQVIobWl0ZV9jaGFuLT5jaGFubmVsKSk7CiB9CiAKLXUzMiBtaXRlX2J5dGVzX2luX3RyYW5zaXQoc3RydWN0IG1pdGVfY2hhbm5lbCAqIG1pdGVfY2hhbikKK3UzMiBtaXRlX2J5dGVzX2luX3RyYW5zaXQoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKQogewogCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZSA9IG1pdGVfY2hhbi0+bWl0ZTsKIAlyZXR1cm4gcmVhZGwobWl0ZS0+bWl0ZV9pb19hZGRyICsKIAkJTUlURV9GQ1IobWl0ZV9jaGFuLT5jaGFubmVsKSkgJiAweDAwMDAwMEZGOwogfQogCi0vLyByZXR1cm5zIGxvd2VyIGJvdW5kIGZvciBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgZnJvbSBkZXZpY2UgdG8gbWVtb3J5Ci11MzIgbWl0ZV9ieXRlc193cml0dGVuX3RvX21lbW9yeV9sYihzdHJ1Y3QgbWl0ZV9jaGFubmVsICogbWl0ZV9jaGFuKQorLyogIHJldHVybnMgbG93ZXIgYm91bmQgZm9yIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBmcm9tIGRldmljZSB0byBtZW1vcnkgKi8KK3UzMiBtaXRlX2J5dGVzX3dyaXR0ZW5fdG9fbWVtb3J5X2xiKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbikKIHsKIAl1MzIgZGV2aWNlX2J5dGVfY291bnQ7CiAKQEAgLTQ3NSw4ICs0NzUsOCBAQAogCXJldHVybiBkZXZpY2VfYnl0ZV9jb3VudCAtIG1pdGVfYnl0ZXNfaW5fdHJhbnNpdChtaXRlX2NoYW4pOwogfQogCi0vLyByZXR1cm5zIHVwcGVyIGJvdW5kIGZvciBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQgZnJvbSBkZXZpY2UgdG8gbWVtb3J5Ci11MzIgbWl0ZV9ieXRlc193cml0dGVuX3RvX21lbW9yeV91YihzdHJ1Y3QgbWl0ZV9jaGFubmVsICogbWl0ZV9jaGFuKQorLyogIHJldHVybnMgdXBwZXIgYm91bmQgZm9yIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBmcm9tIGRldmljZSB0byBtZW1vcnkgKi8KK3UzMiBtaXRlX2J5dGVzX3dyaXR0ZW5fdG9fbWVtb3J5X3ViKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbikKIHsKIAl1MzIgaW5fdHJhbnNpdF9jb3VudDsKIApAQCAtNDg0LDggKzQ4NCw4IEBACiAJcmV0dXJuIG1pdGVfZGV2aWNlX2J5dGVzX3RyYW5zZmVycmVkKG1pdGVfY2hhbikgLSBpbl90cmFuc2l0X2NvdW50OwogfQogCi0vLyByZXR1cm5zIGxvd2VyIGJvdW5kIGZvciBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9tIG1lbW9yeSBmb3IgdHJhbnNmZXIgdG8gZGV2aWNlCi11MzIgbWl0ZV9ieXRlc19yZWFkX2Zyb21fbWVtb3J5X2xiKHN0cnVjdCBtaXRlX2NoYW5uZWwgKiBtaXRlX2NoYW4pCisvKiAgcmV0dXJucyBsb3dlciBib3VuZCBmb3IgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgZnJvbSBtZW1vcnkgZm9yIHRyYW5zZmVyIHRvIGRldmljZSAqLwordTMyIG1pdGVfYnl0ZXNfcmVhZF9mcm9tX21lbW9yeV9sYihzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pCiB7CiAJdTMyIGRldmljZV9ieXRlX2NvdW50OwogCkBAIC00OTMsOCArNDkzLDggQEAKIAlyZXR1cm4gZGV2aWNlX2J5dGVfY291bnQgKyBtaXRlX2J5dGVzX2luX3RyYW5zaXQobWl0ZV9jaGFuKTsKIH0KIAotLy8gcmV0dXJucyB1cHBlciBib3VuZCBmb3IgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgZnJvbSBtZW1vcnkgZm9yIHRyYW5zZmVyIHRvIGRldmljZQotdTMyIG1pdGVfYnl0ZXNfcmVhZF9mcm9tX21lbW9yeV91YihzdHJ1Y3QgbWl0ZV9jaGFubmVsICogbWl0ZV9jaGFuKQorLyogIHJldHVybnMgdXBwZXIgYm91bmQgZm9yIG51bWJlciBvZiBieXRlcyByZWFkIGZyb20gbWVtb3J5IGZvciB0cmFuc2ZlciB0byBkZXZpY2UgKi8KK3UzMiBtaXRlX2J5dGVzX3JlYWRfZnJvbV9tZW1vcnlfdWIoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKQogewogCXUzMiBpbl90cmFuc2l0X2NvdW50OwogCkBAIC01MjYsMTQgKzUyNiwxNCBAQAogCXdyaXRlbChjaG9yLCBtaXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0NIT1IobWl0ZV9jaGFuLT5jaGFubmVsKSk7CiB9CiAKLWludCBtaXRlX3N5bmNfaW5wdXRfZG1hKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbiwgY29tZWRpX2FzeW5jICogYXN5bmMpCitpbnQgbWl0ZV9zeW5jX2lucHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sIHN0cnVjdCBjb21lZGlfYXN5bmMgKiBhc3luYykKIHsKIAlpbnQgY291bnQ7CiAJdW5zaWduZWQgaW50IG5ieXRlcywgb2xkX2FsbG9jX2NvdW50OwogCWNvbnN0IHVuc2lnbmVkIGJ5dGVzX3Blcl9zY2FuID0gY2ZjX2J5dGVzX3Blcl9zY2FuKGFzeW5jLT5zdWJkZXZpY2UpOwogCiAJb2xkX2FsbG9jX2NvdW50ID0gYXN5bmMtPmJ1Zl93cml0ZV9hbGxvY19jb3VudDsKLQkvLyB3cml0ZSBhbGxvYyBhcyBtdWNoIGFzIHdlIGNhbgorCS8qICB3cml0ZSBhbGxvYyBhcyBtdWNoIGFzIHdlIGNhbiAqLwogCWNvbWVkaV9idWZfd3JpdGVfYWxsb2MoYXN5bmMsIGFzeW5jLT5wcmVhbGxvY19idWZzeik7CiAKIAluYnl0ZXMgPSBtaXRlX2J5dGVzX3dyaXR0ZW5fdG9fbWVtb3J5X2xiKG1pdGVfY2hhbik7CkBAIC01NDcsOSArNTQ3LDkgQEAKIAljb3VudCA9IG5ieXRlcyAtIGFzeW5jLT5idWZfd3JpdGVfY291bnQ7CiAJLyogaXQncyBwb3NzaWJsZSBjb3VudCB3aWxsIGJlIG5lZ2F0aXZlIGR1ZSB0bwogCSAqIGNvbnNlcnZhdGl2ZSB2YWx1ZSByZXR1cm5lZCBieSBtaXRlX2J5dGVzX3dyaXR0ZW5fdG9fbWVtb3J5X2xiICovCi0JaWYgKGNvdW50IDw9IDApIHsKKwlpZiAoY291bnQgPD0gMCkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJY29tZWRpX2J1Zl93cml0ZV9mcmVlKGFzeW5jLCBjb3VudCk7CiAKIAlhc3luYy0+c2Nhbl9wcm9ncmVzcyArPSBjb3VudDsKQEAgLTU2MSw3ICs1NjEsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbWl0ZV9zeW5jX291dHB1dF9kbWEoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuLCBjb21lZGlfYXN5bmMgKiBhc3luYykKK2ludCBtaXRlX3N5bmNfb3V0cHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sIHN0cnVjdCBjb21lZGlfYXN5bmMgKiBhc3luYykKIHsKIAlpbnQgY291bnQ7CiAJdTMyIG5ieXRlc191YiwgbmJ5dGVzX2xiOwpAQCAtNTcwLDcgKzU3MCw3IEBACiAJCWFzeW5jLT5jbWQuc3RvcF9hcmcgKiBjZmNfYnl0ZXNfcGVyX3NjYW4oYXN5bmMtPnN1YmRldmljZSk7CiAKIAlvbGRfYWxsb2NfY291bnQgPSBhc3luYy0+YnVmX3JlYWRfYWxsb2NfY291bnQ7Ci0JLy8gcmVhZCBhbGxvYyBhcyBtdWNoIGFzIHdlIGNhbgorCS8qICByZWFkIGFsbG9jIGFzIG11Y2ggYXMgd2UgY2FuICovCiAJY29tZWRpX2J1Zl9yZWFkX2FsbG9jKGFzeW5jLCBhc3luYy0+cHJlYWxsb2NfYnVmc3opOwogCW5ieXRlc19sYiA9IG1pdGVfYnl0ZXNfcmVhZF9mcm9tX21lbW9yeV9sYihtaXRlX2NoYW4pOwogCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKQEAgLTU4Niw5ICs1ODYsOSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCWNvdW50ID0gbmJ5dGVzX2xiIC0gYXN5bmMtPmJ1Zl9yZWFkX2NvdW50OwotCWlmIChjb3VudCA8PSAwKSB7CisJaWYgKGNvdW50IDw9IDApCiAJCXJldHVybiAwOwotCX0KKwogCWlmIChjb3VudCkgewogCQljb21lZGlfYnVmX3JlYWRfZnJlZShhc3luYywgY291bnQpOwogCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKQEAgLTc1Myw5ICs3NTMsOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMzE7IGkgPj0gMDsgaS0tKSB7Ci0JCWlmIChiaXRzICYgKDEgPDwgaSkpIHsKKwkJaWYgKGJpdHMgJiAoMSA8PCBpKSkKIAkJCXByaW50aygiICVzIiwgYml0X3N0cltpXSk7Ci0JCX0KIAl9CiAJcHJpbnRrKCJcbiIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmgKaW5kZXggYjg0ZWFmYS4uY2RhZjhhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5oCkBAIC0yOSwxMyArMjksMTMgQEAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX05BVElOU1QJCTB4MTA5MwogCi0vLyAjZGVmaW5lIERFQlVHX01JVEUKKy8qICAjZGVmaW5lIERFQlVHX01JVEUgKi8KICNkZWZpbmUgUENJTUlPX0NPTVBBVAogCiAjaWZkZWYgREVCVUdfTUlURQotI2RlZmluZSBNRFBSSU5USyhmb3JtYXQsYXJncy4uLikJcHJpbnRrKGZvcm1hdCAsICMjIGFyZ3MgKQorI2RlZmluZSBNRFBSSU5USyhmb3JtYXQsIGFyZ3MuLi4pCXByaW50ayhmb3JtYXQgLCAjIyBhcmdzKQogI2Vsc2UKLSNkZWZpbmUgTURQUklOVEsoZm9ybWF0LGFyZ3MuLi4pCisjZGVmaW5lIE1EUFJJTlRLKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCiAjZGVmaW5lIE1BWF9NSVRFX0RNQV9DSEFOTkVMUyA4CkBAIC0xNDIsOCArMTQyLDggQEAKIHVuc2lnbmVkIG1pdGVfZG1hX3RjcihzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pOwogdm9pZCBtaXRlX2RtYV9hcm0oc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKTsKIHZvaWQgbWl0ZV9kbWFfZGlzYXJtKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbik7Ci1pbnQgbWl0ZV9zeW5jX2lucHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sIGNvbWVkaV9hc3luYyAqIGFzeW5jKTsKLWludCBtaXRlX3N5bmNfb3V0cHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sIGNvbWVkaV9hc3luYyAqIGFzeW5jKTsKK2ludCBtaXRlX3N5bmNfaW5wdXRfZG1hKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbiwgc3RydWN0IGNvbWVkaV9hc3luYyAqIGFzeW5jKTsKK2ludCBtaXRlX3N5bmNfb3V0cHV0X2RtYShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4sIHN0cnVjdCBjb21lZGlfYXN5bmMgKiBhc3luYyk7CiB1MzIgbWl0ZV9ieXRlc193cml0dGVuX3RvX21lbW9yeV9sYihzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pOwogdTMyIG1pdGVfYnl0ZXNfd3JpdHRlbl90b19tZW1vcnlfdWIoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKTsKIHUzMiBtaXRlX2J5dGVzX3JlYWRfZnJvbV9tZW1vcnlfbGIoc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuKTsKQEAgLTE1Myw3ICsxNTMsNyBAQAogaW50IG1pdGVfZG9uZShzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW4pOwogCiAjaWYgMAotdW5zaWduZWQgbG9uZyBtaXRlX2xsX2Zyb21fa3ZtZW0oc3RydWN0IG1pdGVfc3RydWN0ICptaXRlLCBjb21lZGlfYXN5bmMgKiBhc3luYywKK3Vuc2lnbmVkIGxvbmcgbWl0ZV9sbF9mcm9tX2t2bWVtKHN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZSwgc3RydWN0IGNvbWVkaV9hc3luYyAqIGFzeW5jLAogCWludCBsZW4pOwogdm9pZCBtaXRlX3NldHJlZ3Moc3RydWN0IG1pdGVfc3RydWN0ICptaXRlLCB1bnNpZ25lZCBsb25nIGxsX3N0YXJ0LCBpbnQgY2hhbiwKIAlpbnQgZGlyKTsKQEAgLTE2Miw3ICsxNjIsNyBAQAogdm9pZCBtaXRlX3ByZXBfZG1hKHN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbiwKIAl1bnNpZ25lZCBpbnQgbnVtX2RldmljZV9iaXRzLCB1bnNpZ25lZCBpbnQgbnVtX21lbW9yeV9iaXRzKTsKIGludCBtaXRlX2J1Zl9jaGFuZ2Uoc3RydWN0IG1pdGVfZG1hX2Rlc2NyaXB0b3JfcmluZyAqcmluZywKLQljb21lZGlfYXN5bmMgKiBhc3luYyk7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpOwogCiAjaWZkZWYgREVCVUdfTUlURQogdm9pZCBtaXRlX3ByaW50X2Noc3IodW5zaWduZWQgaW50IGNoc3IpOwpAQCAtMTc5LDgzICsxNzksODMgQEAKIAkgICB3cml0dGVuIGFuZCByZWFkIGJhY2suICBUaGUgYml0cyAweDFmIGFsd2F5cyByZWFkIGFzIDEuCiAJICAgVGhlIHJlc3QgYWx3YXlzIHJlYWQgYXMgemVyby4gKi8KIAlNSVRFX1VOS05PV05fRE1BX0JVUlNUX1JFRyA9IDB4MjgsCi0JTUlURV9JT0RXQlNSID0gMHhjMCwJLy9JTyBEZXZpY2UgV2luZG93IEJhc2UgU2l6ZSBSZWdpc3RlcgotCU1JVEVfSU9EV0JTUl8xID0gMHhjNCwJLy8gSU8gRGV2aWNlIFdpbmRvdyBCYXNlIFNpemUgUmVnaXN0ZXIgMQorCU1JVEVfSU9EV0JTUiA9IDB4YzAsCS8qIElPIERldmljZSBXaW5kb3cgQmFzZSBTaXplIFJlZ2lzdGVyICovCisJTUlURV9JT0RXQlNSXzEgPSAweGM0LAkvKiAgSU8gRGV2aWNlIFdpbmRvdyBCYXNlIFNpemUgUmVnaXN0ZXIgMSAqLwogCU1JVEVfSU9EV0NSXzEgPSAweGY0LAogCU1JVEVfUENJX0NPTkZJR19PRkZTRVQgPSAweDMwMCwKLQlNSVRFX0NTSUdSID0gMHg0NjAJLy9jaGlwIHNpZ25hdHVyZQorCU1JVEVfQ1NJR1IgPSAweDQ2MAkvKiBjaGlwIHNpZ25hdHVyZSAqLwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfQ0hPUihpbnQgY2hhbm5lbCkJLy8gY2hhbm5lbCBvcGVyYXRpb24KK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfQ0hPUihpbnQgY2hhbm5lbCkJLyogIGNoYW5uZWwgb3BlcmF0aW9uICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgwOwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfQ0hDUihpbnQgY2hhbm5lbCkJLy8gY2hhbm5lbCBjb250cm9sCitzdGF0aWMgaW5saW5lIGludCBNSVRFX0NIQ1IoaW50IGNoYW5uZWwpCS8qICBjaGFubmVsIGNvbnRyb2wgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDQ7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9UQ1IoaW50IGNoYW5uZWwpCS8vIHRyYW5zZmVyIGNvdW50CitzdGF0aWMgaW5saW5lIGludCBNSVRFX1RDUihpbnQgY2hhbm5lbCkJLyogIHRyYW5zZmVyIGNvdW50ICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHg4OwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfTUNSKGludCBjaGFubmVsKQkvLyBtZW1vcnkgY29uZmlndXJhdGlvbgorc3RhdGljIGlubGluZSBpbnQgTUlURV9NQ1IoaW50IGNoYW5uZWwpCS8qICBtZW1vcnkgY29uZmlndXJhdGlvbiAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4YzsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX01BUihpbnQgY2hhbm5lbCkJLy8gbWVtb3J5IGFkZHJlc3MKK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfTUFSKGludCBjaGFubmVsKQkvKiAgbWVtb3J5IGFkZHJlc3MgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDEwOwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfRENSKGludCBjaGFubmVsKQkvLyBkZXZpY2UgY29uZmlndXJhdGlvbgorc3RhdGljIGlubGluZSBpbnQgTUlURV9EQ1IoaW50IGNoYW5uZWwpCS8qICBkZXZpY2UgY29uZmlndXJhdGlvbiAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4MTQ7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9EQVIoaW50IGNoYW5uZWwpCS8vIGRldmljZSBhZGRyZXNzCitzdGF0aWMgaW5saW5lIGludCBNSVRFX0RBUihpbnQgY2hhbm5lbCkJLyogIGRldmljZSBhZGRyZXNzICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgxODsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX0xLQ1IoaW50IGNoYW5uZWwpCS8vIGxpbmsgY29uZmlndXJhdGlvbgorc3RhdGljIGlubGluZSBpbnQgTUlURV9MS0NSKGludCBjaGFubmVsKQkvKiAgbGluayBjb25maWd1cmF0aW9uICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgxYzsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX0xLQVIoaW50IGNoYW5uZWwpCS8vIGxpbmsgYWRkcmVzcworc3RhdGljIGlubGluZSBpbnQgTUlURV9MS0FSKGludCBjaGFubmVsKQkvKiAgbGluayBhZGRyZXNzICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgyMDsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX0xMS0FSKGludCBjaGFubmVsKQkvLyBzZWUgbWl0ZSBzZWN0aW9uIG9mIHRudDUwMDIgbWFudWFsCitzdGF0aWMgaW5saW5lIGludCBNSVRFX0xMS0FSKGludCBjaGFubmVsKQkvKiAgc2VlIG1pdGUgc2VjdGlvbiBvZiB0bnQ1MDAyIG1hbnVhbCAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4MjQ7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9CQVIoaW50IGNoYW5uZWwpCS8vIGJhc2UgYWRkcmVzcworc3RhdGljIGlubGluZSBpbnQgTUlURV9CQVIoaW50IGNoYW5uZWwpCS8qICBiYXNlIGFkZHJlc3MgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDI4OwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfQkNSKGludCBjaGFubmVsKQkvLyBiYXNlIGNvdW50CitzdGF0aWMgaW5saW5lIGludCBNSVRFX0JDUihpbnQgY2hhbm5lbCkJLyogIGJhc2UgY291bnQgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDJjOwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfU0FSKGludCBjaGFubmVsKQkvLyA/IGFkZHJlc3MKK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfU0FSKGludCBjaGFubmVsKQkvKiAgPyBhZGRyZXNzICovCiB7CiAJcmV0dXJuIENIQU5fT0ZGU0VUKGNoYW5uZWwpICsgMHgzMDsKIH07Ci1zdGF0aWMgaW5saW5lIGludCBNSVRFX1dTQ1IoaW50IGNoYW5uZWwpCS8vID8KK3N0YXRpYyBpbmxpbmUgaW50IE1JVEVfV1NDUihpbnQgY2hhbm5lbCkJLyogID8gKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDM0OwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfV1NFUihpbnQgY2hhbm5lbCkJLy8gPworc3RhdGljIGlubGluZSBpbnQgTUlURV9XU0VSKGludCBjaGFubmVsKQkvKiAgPyAqLwogewogCXJldHVybiBDSEFOX09GRlNFVChjaGFubmVsKSArIDB4Mzg7CiB9Owotc3RhdGljIGlubGluZSBpbnQgTUlURV9DSFNSKGludCBjaGFubmVsKQkvLyBjaGFubmVsIHN0YXR1cworc3RhdGljIGlubGluZSBpbnQgTUlURV9DSFNSKGludCBjaGFubmVsKQkvKiAgY2hhbm5lbCBzdGF0dXMgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDNjOwogfTsKLXN0YXRpYyBpbmxpbmUgaW50IE1JVEVfRkNSKGludCBjaGFubmVsKQkvLyBmaWZvIGNvdW50CitzdGF0aWMgaW5saW5lIGludCBNSVRFX0ZDUihpbnQgY2hhbm5lbCkJLyogIGZpZm8gY291bnQgKi8KIHsKIAlyZXR1cm4gQ0hBTl9PRkZTRVQoY2hhbm5lbCkgKyAweDQwOwogfTsKIAogZW51bSBNSVRFX0lPRFdCU1JfYml0cyB7Ci0JV0VOQUIgPSAweDgwLAkJLy8gd2luZG93IGVuYWJsZQorCVdFTkFCID0gMHg4MCwJCS8qICB3aW5kb3cgZW5hYmxlICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1JVEVfSU9EV0JTUl8xX1dTSVpFX2JpdHModW5zaWduZWQgc2l6ZSkKQEAgLTI3NiwyMyArMjc2LDIzIEBACiAJcmV0dXJuIGNzaWdyX2JpdHMgJiAweGY7CiB9Owogc3RhdGljIGlubGluZSBpbnQgbWl0ZV9jc2lncl90eXBlKHUzMiBjc2lncl9iaXRzKQotewkJCQkvLyBvcmlnaW5hbCBtaXRlID0gMCwgbWluaW1pdGUgPSAxCit7CQkJCS8qICBvcmlnaW5hbCBtaXRlID0gMCwgbWluaW1pdGUgPSAxICovCiAJcmV0dXJuIChjc2lncl9iaXRzID4+IDQpICYgMHhmOwogfTsKIHN0YXRpYyBpbmxpbmUgaW50IG1pdGVfY3NpZ3JfbW1vZGUodTMyIGNzaWdyX2JpdHMpCi17CQkJCS8vIG1pdGUgbW9kZSwgbWluaW1pdGUgPSAxCit7CQkJCS8qICBtaXRlIG1vZGUsIG1pbmltaXRlID0gMSAqLwogCXJldHVybiAoY3NpZ3JfYml0cyA+PiA4KSAmIDB4MzsKIH07CiBzdGF0aWMgaW5saW5lIGludCBtaXRlX2NzaWdyX2ltb2RlKHUzMiBjc2lncl9iaXRzKQotewkJCQkvLyBjcHUgcG9ydCBpbnRlcmZhY2UgbW9kZSwgcGNpID0gMHgzCit7CQkJCS8qICBjcHUgcG9ydCBpbnRlcmZhY2UgbW9kZSwgcGNpID0gMHgzICovCiAJcmV0dXJuIChjc2lncl9iaXRzID4+IDEyKSAmIDB4MzsKIH07CiBzdGF0aWMgaW5saW5lIGludCBtaXRlX2NzaWdyX2RtYWModTMyIGNzaWdyX2JpdHMpCi17CQkJCS8vIG51bWJlciBvZiBkbWEgY2hhbm5lbHMKK3sJCQkJLyogIG51bWJlciBvZiBkbWEgY2hhbm5lbHMgKi8KIAlyZXR1cm4gKGNzaWdyX2JpdHMgPj4gMTYpICYgMHhmOwogfTsKIHN0YXRpYyBpbmxpbmUgaW50IG1pdGVfY3NpZ3Jfd3BkZXAodTMyIGNzaWdyX2JpdHMpCi17CQkJCS8vIHdyaXRlIHBvc3QgZmlmbyBkZXB0aAorewkJCQkvKiAgd3JpdGUgcG9zdCBmaWZvIGRlcHRoICovCiAJdW5zaWduZWQgaW50IHdwZGVwX2JpdHMgPSAoY3NpZ3JfYml0cyA+PiAyMCkgJiAweDc7CiAJaWYgKHdwZGVwX2JpdHMgPT0gMCkKIAkJcmV0dXJuIDA7CkBAIC0zMDQsNyArMzA0LDcgQEAKIAlyZXR1cm4gKGNzaWdyX2JpdHMgPj4gMjQpICYgMHgxZjsKIH07CiBzdGF0aWMgaW5saW5lIGludCBtaXRlX2NzaWdyX2lvd2lucyh1MzIgY3NpZ3JfYml0cykKLXsJCQkJLy8gbnVtYmVyIG9mIGlvIHdpbmRvd3MKK3sJCQkJLyogIG51bWJlciBvZiBpbyB3aW5kb3dzICovCiAJcmV0dXJuIChjc2lncl9iaXRzID4+IDI5KSAmIDB4NzsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM2MjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM2MjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTUxNjAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jCkBAIC0wLDAgKzEsMzg2IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL21wYzYyNC5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBhIE1pY3JvL3N5cyBpbmMuIE1QQy02MjQgUEMvMTA0IGJvYXJkCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBtcGM2MjQKK0Rlc2NyaXB0aW9uOiBNaWNyby9zeXMgTVBDLTYyNCBQQy8xMDQgYm9hcmQKK0RldmljZXM6IFtNaWNyby9zeXNdIE1QQy02MjQgKG1wYzYyNCkKK0F1dGhvcjogU3RhbmlzbGF3IFJhY3p5bnNraSA8c3JhY3p5bnNraUBvcC5wbD4KK1VwZGF0ZWQ6IFRodSwgMTUgU2VwIDIwMDUgMTI6MDE6MTggKzAyMDAKK1N0YXR1czogd29ya2luZworCisgICAgVGhlIE1pY3JvL3N5cyBNUEMtNjI0IGJvYXJkIGlzIGJhc2VkIG9uIHRoZSBMVEMyNDQwIDI0LWJpdCBzaWdtYS1kZWx0YQorICAgIEFEQyBjaGlwLgorCisgICAgU3ViZGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcjoKKyAgICAtIEFuYWxvZyBJbjogICBzdXBwb3J0ZWQKKyAgICAtIERpZ2l0YWwgSS9POiBub3Qgc3VwcG9ydGVkCisgICAgLSBMRURzOiAgICAgICAgbm90IHN1cHBvcnRlZAorICAgIC0gRUVQUk9NOiAgICAgIG5vdCBzdXBwb3J0ZWQKKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBbMF0gLSBJL08gYmFzZSBhZGRyZXNzCisgIFsxXSAtIGNvbnZlcnRpb24gcmF0ZQorICAgICAgICAgICAgQ29udmVydGlvbiByYXRlICBSTVMgbm9pc2UgIEVmZmVjdGl2ZSBOdW1iZXIgT2YgQml0cworICAgICAgICAgMCAgICAgIDMuNTJrSHogICAgICAgIDIzdVYgICAgICAgICAgICAgICAgMTcKKyAgICAgICAgIDEgICAgICAxLjc2a0h6ICAgICAgIDMuNXVWICAgICAgICAgICAgICAgIDIwCisgICAgICAgICAyICAgICAgIDg4MEh6ICAgICAgICAgMnVWICAgICAgICAgICAgICAgIDIxLjMKKyAgICAgICAgIDMgICAgICAgNDQwSHogICAgICAgIDEuNHVWICAgICAgICAgICAgICAgMjEuOAorICAgICAgICAgNCAgICAgICAyMjBIeiAgICAgICAgIDF1ViAgICAgICAgICAgICAgICAyMi40CisgICAgICAgICA1ICAgICAgIDExMEh6ICAgICAgICA3NTB1ViAgICAgICAgICAgICAgIDIyLjkKKyAgICAgICAgIDYgICAgICAgNTVIeiAgICAgICAgIDUxMG5WICAgICAgICAgICAgICAgMjMuNAorICAgICAgICAgNyAgICAgIDI3LjVIeiAgICAgICAgMzc1blYgICAgICAgICAgICAgICAgMjQKKyAgICAgICAgIDggICAgICAxMy43NUh6ICAgICAgIDI1MG5WICAgICAgICAgICAgICAgMjQuNAorICAgICAgICAgOSAgICAgIDYuODc1SHogICAgICAgMjAwblYgICAgICAgICAgICAgICAyNC42CisgICBbMl0gLSB2b2x0YWdlIHJhbmdlCisgICAgICAgICAwICAgICAgLTEuMDFWIC4uICsxLjAxVgorICAgICAgICAgMSAgICAgIC0xMC4xViAuLiArMTAuMVYKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKy8vIENvbnNlY3V0aXZlIEkvTyBwb3J0IGFkZHJlc3NlcworI2RlZmluZSBNUEM2MjRfU0laRSAgICAgICAgICAgICAxNgorCisvLyBPZmZzZXRzIG9mIGRpZmZlcmVudCBwb3J0cworI2RlZmluZSBNUEM2MjRfTUFTVEVSX0NPTlRST0wJMAkvLyBub3QgdXNlZAorI2RlZmluZSBNUEM2MjRfR05NVVhDSCAgICAgICAgICAxCS8vIEdhaW4sIE11eCwgQ2hhbm5lbCBvZiBBREMKKyNkZWZpbmUgTVBDNjI0X0FEQyAgICAgICAgICAgICAgMgkvLyByZWFkL3dyaXRlIHRvL2Zyb20gQURDCisjZGVmaW5lIE1QQzYyNF9FRSAgICAgICAgICAgICAgIDMJLy8gcmVhZC93cml0ZSB0by9mcm9tIHNlcmlhbCBFRVBST00gdmlhIEkyQworI2RlZmluZSBNUEM2MjRfTEVEUyAgICAgICAgICAgICA0CS8vIHdyaXRlIHRvIExFRHMKKyNkZWZpbmUgTVBDNjI0X0RJTyAgICAgICAgICAgICAgNQkvLyByZWFkL3dyaXRlIHRvL2Zyb20gZGlnaXRhbCBJL08gcG9ydHMKKyNkZWZpbmUgTVBDNjI0X0lSUV9NQVNLICAgICAgICAgNgkvLyBJUlEgbWFza2luZyBlbmFibGUvZGlzYWJsZQorCisvLyBSZWdpc3RlciBiaXRzJyBuYW1lcworI2RlZmluZSBNUEM2MjRfQURCVVNZICAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgTVBDNjI0X0FEU0RPICAgICAgICAgICAgKDE8PDQpCisjZGVmaW5lIE1QQzYyNF9BREZPICAgICAgICAgICAgICgxPDwzKQorI2RlZmluZSBNUEM2MjRfQURDUyAgICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgTVBDNjI0X0FEU0NLICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIE1QQzYyNF9BRFNESSAgICAgICAgICAgICgxPDwwKQorCisvLyBTREkgU3BlZWQvUmVzb2x1dGlvbiBQcm9ncmFtbWluZyBiaXRzCisjZGVmaW5lIE1QQzYyNF9PU1I0ICAgICAgICAgICAgICgxPDwzMSkKKyNkZWZpbmUgTVBDNjI0X09TUjMgICAgICAgICAgICAgKDE8PDMwKQorI2RlZmluZSBNUEM2MjRfT1NSMiAgICAgICAgICAgICAoMTw8MjkpCisjZGVmaW5lIE1QQzYyNF9PU1IxICAgICAgICAgICAgICgxPDwyOCkKKyNkZWZpbmUgTVBDNjI0X09TUjAgICAgICAgICAgICAgKDE8PDI3KQorCisvLyAzMi1iaXQgb3V0cHV0IHZhbHVlIGJpdHMnIG5hbWVzCisjZGVmaW5lIE1QQzYyNF9FT0NfQklUICAgICAgICAgICgxPDwzMSkKKyNkZWZpbmUgTVBDNjI0X0RNWV9CSVQgICAgICAgICAgKDE8PDMwKQorI2RlZmluZSBNUEM2MjRfU0dOX0JJVCAgICAgICAgICAoMTw8MjkpCisKKy8vIENvbnZlcnRpb24gc3BlZWRzCisvKiBPU1I0IE9TUjMgT1NSMiBPU1IxIE9TUjAgIENvbnZlcnRpb24gcmF0ZSAgUk1TIG5vaXNlICBFTk9CXgorICogIFggICAgMCAgICAwICAgIDAgICAgMSAgICAgICAgMy41MmtIeiAgICAgICAgMjN1ViAgICAgIDE3CisgKiAgWCAgICAwICAgIDAgICAgMSAgICAwICAgICAgICAxLjc2a0h6ICAgICAgIDMuNXVWICAgICAgMjAKKyAqICBYICAgIDAgICAgMCAgICAxICAgIDEgICAgICAgICA4ODBIeiAgICAgICAgIDJ1ViAgICAgIDIxLjMKKyAqICBYICAgIDAgICAgMSAgICAwICAgIDAgICAgICAgICA0NDBIeiAgICAgICAgMS40dVYgICAgIDIxLjgKKyAqICBYICAgIDAgICAgMSAgICAwICAgIDEgICAgICAgICAyMjBIeiAgICAgICAgIDF1ViAgICAgIDIyLjQKKyAqICBYICAgIDAgICAgMSAgICAxICAgIDAgICAgICAgICAxMTBIeiAgICAgICAgNzUwdVYgICAgIDIyLjkKKyAqICBYICAgIDAgICAgMSAgICAxICAgIDEgICAgICAgICAgNTVIeiAgICAgICAgNTEwblYgICAgIDIzLjQKKyAqICBYICAgIDEgICAgMCAgICAwICAgIDAgICAgICAgICAyNy41SHogICAgICAgMzc1blYgICAgICAyNAorICogIFggICAgMSAgICAwICAgIDAgICAgMSAgICAgICAgMTMuNzVIeiAgICAgICAyNTBuViAgICAgMjQuNAorICogIFggICAgMSAgICAxICAgIDEgICAgMSAgICAgICAgNi44NzVIeiAgICAgICAyMDBuViAgICAgMjQuNgorICoKKyAqIF4gLSBFZmZlY3RpdmUgTnVtYmVyIE9mIEJpdHMKKyAqLworCisjZGVmaW5lIE1QQzYyNF9TUEVFRF8zXzUyX2tIeiAgIChNUEM2MjRfT1NSNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1QQzYyNF9PU1IwKQorI2RlZmluZSBNUEM2MjRfU1BFRURfMV83Nl9rSHogICAoTVBDNjI0X09TUjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTVBDNjI0X09TUjEgICAgICAgICAgICAgICkKKyNkZWZpbmUgTVBDNjI0X1NQRUVEXzg4MF9IeiAgICAgKE1QQzYyNF9PU1I0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1QQzYyNF9PU1IxIHwgTVBDNjI0X09TUjApCisjZGVmaW5lIE1QQzYyNF9TUEVFRF80NDBfSHogICAgIChNUEM2MjRfT1NSNCAgICAgICAgICAgICAgIHwgTVBDNjI0X09TUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorI2RlZmluZSBNUEM2MjRfU1BFRURfMjIwX0h6ICAgICAoTVBDNjI0X09TUjQgICAgICAgICAgICAgICB8IE1QQzYyNF9PU1IyICAgICAgICAgICAgICAgfCBNUEM2MjRfT1NSMCkKKyNkZWZpbmUgTVBDNjI0X1NQRUVEXzExMF9IeiAgICAgKE1QQzYyNF9PU1I0ICAgICAgICAgICAgICAgfCBNUEM2MjRfT1NSMiB8IE1QQzYyNF9PU1IxICAgICAgICAgICAgICApCisjZGVmaW5lIE1QQzYyNF9TUEVFRF81NV9IeiAgICAgIChNUEM2MjRfT1NSNCAgICAgICAgICAgICAgIHwgTVBDNjI0X09TUjIgfCBNUEM2MjRfT1NSMSB8IE1QQzYyNF9PU1IwKQorI2RlZmluZSBNUEM2MjRfU1BFRURfMjdfNV9IeiAgICAoTVBDNjI0X09TUjQgfCBNUEM2MjRfT1NSMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyNkZWZpbmUgTVBDNjI0X1NQRUVEXzEzXzc1X0h6ICAgKE1QQzYyNF9PU1I0IHwgTVBDNjI0X09TUjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTVBDNjI0X09TUjApCisjZGVmaW5lIE1QQzYyNF9TUEVFRF82Xzg3NV9IeiAgIChNUEM2MjRfT1NSNCB8IE1QQzYyNF9PU1IzIHwgTVBDNjI0X09TUjIgfCBNUEM2MjRfT1NSMSB8IE1QQzYyNF9PU1IwKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdHJ1Y3Qgc2tlbF9wcml2YXRlIHsKKworCXVuc2lnbmVkIGxvbmcgaW50IHVsQ29udmVydGlvblJhdGU7CS8vIHNldCBieSBtcGM2MjRfYXR0YWNoKCkgZnJvbSBkcml2ZXIncyBwYXJhbWV0ZXJzCit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBza2VsX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9tcGM2MjRfYmlwb2xhcjEgPSB7CisJMSwKKwl7CisvLyAgICBCSVBfUkFOR0UoMS4wMSkgLy8gdGhpcyBpcyBjb3JyZWN0LAorCQkJLy8gYnV0IG15IE1QQy02MjQgYWN0dWFsbHkgc2VlbXMgdG8gaGF2ZSBhIHJhbmdlIG9mIDIuMDIKKwkJCUJJUF9SQU5HRSgyLjAyKQorCQl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX21wYzYyNF9iaXBvbGFyMTAgPSB7CisJMSwKKwl7CisvLyAgICBCSVBfUkFOR0UoMTAuMSkgLy8gdGhpcyBpcyBjb3JyZWN0LAorCQkJLy8gYnV0IG15IE1QQy02MjQgYWN0dWFsbHkgc2VlbXMgdG8gaGF2ZSBhIHJhbmdlIG9mIDIwLjIKKwkJCUJJUF9SQU5HRSgyMC4yKQorCQl9Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyBpbnQgbXBjNjI0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG1wYzYyNF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX21wYzYyNCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJtcGM2MjQiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOm1wYzYyNF9hdHRhY2gsCisgICAgICBkZXRhY2g6bXBjNjI0X2RldGFjaAorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgaW50IG1wYzYyNF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGF0aWMgaW50IG1wYzYyNF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlydF9wcmludGsoImNvbWVkaSVkOiBtcGM2MjQgWzB4JTA0bHgsICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKHJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgTVBDNjI0X1NJWkUsICJtcGM2MjQiKSA9PSBOVUxMKSB7CisJCXJ0X3ByaW50aygiSS9PIHBvcnQocykgaW4gdXNlXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gIm1wYzYyNCI7CisKKwkvLyBQcml2YXRlIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbgorCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBza2VsX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJc3dpdGNoIChpdC0+b3B0aW9uc1sxXSkgeworCWNhc2UgMDoKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF8zXzUyX2tIejsKKwkJcnRfcHJpbnRrKCIzLjUyIGtIeiwgIik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF8xXzc2X2tIejsKKwkJcnRfcHJpbnRrKCIxLjc2IGtIeiwgIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF84ODBfSHo7CisJCXJ0X3ByaW50aygiODgwIEh6LCAiKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlkZXZwcml2LT51bENvbnZlcnRpb25SYXRlID0gTVBDNjI0X1NQRUVEXzQ0MF9IejsKKwkJcnRfcHJpbnRrKCI0NDAgSHosICIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWRldnByaXYtPnVsQ29udmVydGlvblJhdGUgPSBNUEM2MjRfU1BFRURfMjIwX0h6OworCQlydF9wcmludGsoIjIyMCBIeiwgIik7CisJCWJyZWFrOworCWNhc2UgNToKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF8xMTBfSHo7CisJCXJ0X3ByaW50aygiMTEwIEh6LCAiKTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlkZXZwcml2LT51bENvbnZlcnRpb25SYXRlID0gTVBDNjI0X1NQRUVEXzU1X0h6OworCQlydF9wcmludGsoIjU1IEh6LCAiKTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlkZXZwcml2LT51bENvbnZlcnRpb25SYXRlID0gTVBDNjI0X1NQRUVEXzI3XzVfSHo7CisJCXJ0X3ByaW50aygiMjcuNSBIeiwgIik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF8xM183NV9IejsKKwkJcnRfcHJpbnRrKCIxMy43NSBIeiwgIik7CisJCWJyZWFrOworCWNhc2UgOToKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF82Xzg3NV9IejsKKwkJcnRfcHJpbnRrKCI2Ljg3NSBIeiwgIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aworCQkJKCJpbGxlZ2FsIGNvbnZlcnRpb24gcmF0ZSBzZXR0aW5nISBWYWxpZCBudW1iZXJzIGFyZSAwLi45LiBVc2luZyA5ID0+IDYuODc1IEh6LCAiKTsKKwkJZGV2cHJpdi0+dWxDb252ZXJ0aW9uUmF0ZSA9IE1QQzYyNF9TUEVFRF8zXzUyX2tIejsKKwl9CisKKwkvLyBTdWJkZXZpY2VzIHN0cnVjdHVyZXMKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0RJRkY7CisJcy0+bl9jaGFuID0gODsKKwlzd2l0Y2ggKGl0LT5vcHRpb25zWzFdKSB7CisJZGVmYXVsdDoKKwkJcy0+bWF4ZGF0YSA9IDB4M0ZGRkZGRkY7CisJCXJ0X3ByaW50aygiMzAgYml0LCAiKTsKKwl9CisKKwlzd2l0Y2ggKGl0LT5vcHRpb25zWzFdKSB7CisJY2FzZSAwOgorCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9tcGM2MjRfYmlwb2xhcjE7CisJCXJ0X3ByaW50aygiMS4wMVZdOiAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfbXBjNjI0X2JpcG9sYXIxMDsKKwkJcnRfcHJpbnRrKCIxMC4xVl06ICIpOworCX0KKwlzLT5sZW5fY2hhbmxpc3QgPSAxOworCXMtPmluc25fcmVhZCA9IG1wYzYyNF9haV9yaW5zbjsKKworCXJ0X3ByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbXBjNjI0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlydF9wcmludGsoImNvbWVkaSVkOiBtcGM2MjQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBNUEM2MjRfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworLy8gVGltZW91dCAyMDBtcworI2RlZmluZSBUSU1FT1VUIDIwMAorCitzdGF0aWMgaW50IG1wYzYyNF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGk7CisJdW5zaWduZWQgbG9uZyBpbnQgZGF0YV9pbiwgZGF0YV9vdXQ7CisJdW5zaWduZWQgY2hhciB1Y1BvcnQ7CisKKwkvLyBXQVJOSU5HOiBXZSBhbHdheXMgd3JpdGUgMCB0byBHTlNXQSBiaXQsIHNvIHRoZSBjaGFubmVsIHJhbmdlIGlzICstLzEwLjFWZGMKKwlvdXRiKGluc24tPmNoYW5zcGVjLCBkZXYtPmlvYmFzZSArIE1QQzYyNF9HTk1VWENIKTsKKy8vICAgIHJ0X3ByaW50aygiQ2hhbm5lbCAlZDogXG4iLCBpbnNuLT5jaGFuc3BlYyk7CisJaWYgKCFpbnNuLT5uKSB7CisJCXJ0X3ByaW50aygiTVBDNjI0OiBXYXJuaW5nLCBubyBkYXRhIHRvIGFxdWlyZVxuIik7CisJCXJldHVybiAwOworCX0KKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLy8gVHJpZ2dlciB0aGUgY29udmVydGlvbgorCQlvdXRiKE1QQzYyNF9BRFNDSywgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJb3V0YihNUEM2MjRfQURDUyB8IE1QQzYyNF9BRFNDSywgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIE1QQzYyNF9BREMpOworCQljb21lZGlfdWRlbGF5KDEpOworCisJCS8vIFdhaXQgZm9yIHRoZSBjb252ZXJ0aW9uIHRvIGVuZAorCQlmb3IgKGkgPSAwOyBpIDwgVElNRU9VVDsgaSsrKSB7CisJCQl1Y1BvcnQgPSBpbmIoZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJCWlmICh1Y1BvcnQgJiBNUEM2MjRfQURCVVNZKQorCQkJCWNvbWVkaV91ZGVsYXkoMTAwMCk7CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gVElNRU9VVCkgeworCQkJcnRfcHJpbnRrKCJNUEM2MjQ6IHRpbWVvdXQgKCVkbXMpXG4iLCBUSU1FT1VUKTsKKwkJCWRhdGFbbl0gPSAwOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJLy8gU3RhcnQgcmVhZGluZyBkYXRhCisJCWRhdGFfaW4gPSAwOworCQlkYXRhX291dCA9IGRldnByaXYtPnVsQ29udmVydGlvblJhdGU7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCQkvLyBTZXQgdGhlIGNsb2NrIGxvdworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIE1QQzYyNF9BREMpOworCQkJY29tZWRpX3VkZWxheSgxKTsKKworCQkJaWYgKGRhdGFfb3V0ICYgKDEgPDwgMzEpKQkvLyB0aGUgbmV4dCBiaXQgaXMgYSAxCisJCQl7CisJCQkJLy8gU2V0IHRoZSBBRFNESSBsaW5lIChzZW5kIHRvIE1QQzYyNCkKKwkJCQlvdXRiKE1QQzYyNF9BRFNESSwgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJCQljb21lZGlfdWRlbGF5KDEpOworCQkJCS8vIFNldCB0aGUgY2xvY2sgaGlnaAorCQkJCW91dGIoTVBDNjI0X0FEU0NLIHwgTVBDNjI0X0FEU0RJLAorCQkJCQlkZXYtPmlvYmFzZSArIE1QQzYyNF9BREMpOworCQkJfSBlbHNlCS8vIHRoZSBuZXh0IGJpdCBpcyBhIDAKKwkJCXsKKwkJCQkvLyBTZXQgdGhlIEFEU0RJIGxpbmUgKHNlbmQgdG8gTVBDNjI0KQorCQkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBNUEM2MjRfQURDKTsKKwkJCQljb21lZGlfdWRlbGF5KDEpOworCQkJCS8vIFNldCB0aGUgY2xvY2sgaGlnaAorCQkJCW91dGIoTVBDNjI0X0FEU0NLLCBkZXYtPmlvYmFzZSArIE1QQzYyNF9BREMpOworCQkJfQorCQkJLy8gUmVhZCBBRFNETyBvbiBoaWdoIGNsb2NrIChyZWNlaXZlIGZyb20gTVBDNjI0KQorCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJCWRhdGFfaW4gPDw9IDE7CisJCQlkYXRhX2luIHw9CisJCQkJKGluYihkZXYtPmlvYmFzZSArCisJCQkJCU1QQzYyNF9BREMpICYgTVBDNjI0X0FEU0RPKSA+PiA0OworCQkJY29tZWRpX3VkZWxheSgxKTsKKworCQkJZGF0YV9vdXQgPDw9IDE7CisJCX0KKworCQkvLyBSZWNlaXZlZCAzMi1iaXQgbG9uZyB2YWx1ZSBjb25zaXN0IG9mOgorCQkvLyAgIDMxOiBFT0MgKEVuZCBPZiBUcmFuc21pc3Npb24pIGJpdCAtIHNob3VsZCBiZSAwCisJCS8vICAgMzA6IERNWSAoRHVtbXkpIGJpdCAgICAgICAgICAgICAgIC0gc2hvdWxkIGJlIDAKKwkJLy8gICAyOTogU0lHIChTaWduKSBiaXQgICAgICAgICAgICAgICAgLSAxIGlmIHRoZSB2b2x0YWdlIGlzIHBvc2l0aXZlLCAwIGlmIG5lZ2F0aXZlCisJCS8vICAgMjg6IE1TQiAoTW9zdCBTaWduaWZpY2FudCBCaXQpICAgIC0gdGhlIGZpcnN0IGJpdCBvZiBjb252ZXJ0aW9uIHJlc3VsdAorCQkvLyAgIC4uLi4KKwkJLy8gICAwNTogTFNCIChMZWFzdCBTaWduaWZpY2FudCBCaXQpICAgLSB0aGUgbGFzdCBiaXQgb2YgY29udmVydGlvbiByZXN1bHQKKwkJLy8gICAwNDogc3ViLUxTQiAgICAgICAgICAgICAgICAgICAgICAgLSBzdWItTFNCcyBhcmUgYmFzaWNhbGx5IG5vaXNlLCBidXQgd2hlbgorCQkvLyAgIDAzOiBzdWItTFNCICAgICAgICAgICAgICAgICAgICAgICAgIGF2ZXJhZ2VkIHByb3Blcmx5LCB0aGV5IGNhbiBpbmNyZWFzZSBjb252ZXJ0aW9uCisJCS8vICAgMDI6IHN1Yi1MU0IgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uIHVwIHRvIDI5IGJpdHM7IHRoZXkgY2FuIGJlIGRpc2NhcmRlZAorCQkvLyAgIDAxOiBzdWItTFNCICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgbG9zcyBvZiByZXNvbHV0aW9uLgorCQkvLyAgIDAwOiBzdWItTFNCCisKKwkJaWYgKGRhdGFfaW4gJiBNUEM2MjRfRU9DX0JJVCkKKwkJCXJ0X3ByaW50aygiTVBDNjI0OiBFT0MgYml0IGlzIHNldCAoZGF0YV9pbj0lbHUpISIsCisJCQkJZGF0YV9pbik7CisJCWlmIChkYXRhX2luICYgTVBDNjI0X0RNWV9CSVQpCisJCQlydF9wcmludGsoIk1QQzYyNDogRE1ZIGJpdCBpcyBzZXQgKGRhdGFfaW49JWx1KSEiLAorCQkJCWRhdGFfaW4pOworCQlpZiAoZGF0YV9pbiAmIE1QQzYyNF9TR05fQklUKQkvLyBjaGVjayB0aGUgc2lnbiBiaXQKKwkJewkJLy8gVGhlIHZvbHRhZ2UgaXMgcG9zaXRpdmUKKwkJCWRhdGFfaW4gJj0gMHgzRkZGRkZGRjsJLy8gRU9DIGFuZCBETVkgc2hvdWxkIGJlIDAsIGJ1dCB3ZSB3aWxsIG1hc2sgdGhlbSBvdXQganVzdCB0byBiZSBzdXJlCisJCQlkYXRhW25dID0gZGF0YV9pbjsJLy8gY29tZWRpIG9wZXJhdGVzIG9uIHVuc2lnbmVkIG51bWJlcnMsIHNvIHdlIGRvbid0IGNsZWFyIHRoZSBTR04gYml0CisJCQkvLyBTR04gYml0IGlzIHN0aWxsIHNldCEgSXQncyBjb3JyZWN0LCBzaW5jZSB3ZSdyZSBjb252ZXJ0aW5nIHRvIHVuc2lnbmVkLgorCQl9IGVsc2UgewkvLyBUaGUgdm9sdGFnZSBpcyBuZWdhdGl2ZQorCQkJLy8gZGF0YV9pbiBjb250YWlucyBhIG51bWJlciBpbiAzMC1iaXQgdHdvJ3MgY29tcGxlbWVudCBjb2RlIGFuZCB3ZSBtdXN0IGRlYWwgd2l0aCBpdAorCQkJZGF0YV9pbiB8PSBNUEM2MjRfU0dOX0JJVDsKKwkJCWRhdGFfaW4gPSB+ZGF0YV9pbjsKKwkJCWRhdGFfaW4gKz0gMTsKKwkJCWRhdGFfaW4gJj0gfihNUEM2MjRfRU9DX0JJVCB8IE1QQzYyNF9ETVlfQklUKTsKKwkJCS8vIGNsZWFyIEVPQyBhbmQgRE1ZIGJpdHMKKwkJCWRhdGFfaW4gPSAweDIwMDAwMDAwIC0gZGF0YV9pbjsKKwkJCWRhdGFbbl0gPSBkYXRhX2luOworCQl9CisJfQorCisJLy8gUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4KKwlyZXR1cm4gbjsKK30KKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9tcGM2MjQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzgyNjBjcG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM4MjYwY3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFjMGE3YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM4MjYwY3BtLmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbXBjODI2MC5jCisgICAgZHJpdmVyIGZvciBkaWdpdGFsIEkvTyBwaW5zIG9uIHRoZSBNUEMgODI2MCBDUE0gbW9kdWxlCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwLDIwMDEgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IG1wYzgyNjBjcG0KK0Rlc2NyaXB0aW9uOiBNUEM4MjYwIENQTSBtb2R1bGUgZ2VuZXJpYyBkaWdpdGFsIEkvTyBsaW5lcworRGV2aWNlczogW01vdG9yb2xhXSBNUEM4MjYwIENQTSAobXBjODI2MGNwbSkKK0F1dGhvcjogZHMKK1N0YXR1czogZXhwZXJpbWVudGFsCitVcGRhdGVkOiBTYXQsIDE2IE1hciAyMDAyIDE3OjM0OjQ4IC0wODAwCisKK1RoaXMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIHRoZSBNb3Rvcm9sYSBNUEM4MjYwIHByb2Nlc3NvciwgYWxsb3dpbmcKK3lvdSB0byBhY2Nlc3MgdGhlIHByb2Nlc3NvcidzIGdlbmVyaWMgZGlnaXRhbCBJL08gbGluZXMuCisKK0l0IGlzIGFwcGFyZW50bHkgbWlzc2luZyBzb21lIGNvZGUuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1wYzgyNjBfZGlvX3Jlc2VydmVkWzRdOworCitzdHJ1Y3QgbXBjODI2MGNwbV9wcml2YXRlIHsKKworCWludCBkYXRhOworCit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgbXBjODI2MGNwbV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IG1wYzgyNjBjcG1fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgbXBjODI2MGNwbV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9tcGM4MjYwY3BtID0geworICAgICAgZHJpdmVyX25hbWU6Im1wYzgyNjBjcG0iLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOm1wYzgyNjBjcG1fYXR0YWNoLAorICAgICAgZGV0YWNoOm1wYzgyNjBjcG1fZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9tcGM4MjYwY3BtKTsKKworc3RhdGljIGludCBtcGM4MjYwY3BtX2Rpb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbXBjODI2MGNwbV9kaW9fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IG1wYzgyNjBjcG1fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCWludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogbXBjODI2MGNwbTogIiwgZGV2LT5taW5vcik7CisKKwlkZXYtPmJvYXJkX3B0ciA9IG1wYzgyNjBjcG1fYm9hcmRzICsgZGV2LT5ib2FyZDsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBtcGM4MjYwY3BtX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgaTsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCQlzLT5uX2NoYW4gPSAzMjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fY29uZmlnID0gbXBjODI2MGNwbV9kaW9fY29uZmlnOworCQlzLT5pbnNuX2JpdHMgPSBtcGM4MjYwY3BtX2Rpb19iaXRzOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1wYzgyNjBjcG1fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IG1wYzgyNjBjcG06IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgKmNwbV9wZGF0KGludCBwb3J0KQoreworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoKKwkJcmV0dXJuICZpby0+aW9wX3BkYXRhOworCWNhc2UgMToKKwkJcmV0dXJuICZpby0+aW9wX3BkYXRiOworCWNhc2UgMjoKKwkJcmV0dXJuICZpby0+aW9wX3BkYXRjOworCWNhc2UgMzoKKwkJcmV0dXJuICZpby0+aW9wX3BkYXRkOworCX0KK30KKworc3RhdGljIGludCBtcGM4MjYwY3BtX2Rpb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCXVuc2lnbmVkIGludCBkOworCXVuc2lnbmVkIGludCBtYXNrOworCWludCBwb3J0OworCisJcG9ydCA9IChpbnQpcy0+cHJpdmF0ZTsKKwltYXNrID0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpZiAobWFzayAmIGNwbV9yZXNlcnZlZF9iaXRzW3BvcnRdKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcy0+aW9fYml0cyB8PSBtYXNrOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+bWFzazsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIG1hc2spID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoKKwkJcmV0dXJuICZpby0+aW9wX3BkaXJhOworCWNhc2UgMToKKwkJcmV0dXJuICZpby0+aW9wX3BkaXJiOworCWNhc2UgMjoKKwkJcmV0dXJuICZpby0+aW9wX3BkaXJjOworCWNhc2UgMzoKKwkJcmV0dXJuICZpby0+aW9wX3BkaXJkOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1wYzgyNjBjcG1fZGlvX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBwb3J0OworCXVuc2lnbmVkIGxvbmcgKnA7CisKKwlwID0gY3BtX3BkYXQoKGludClzLT5wcml2YXRlKTsKKworCXJldHVybiAyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL211bHRpcTMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tdWx0aXEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0NzU3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tdWx0aXEzLmMKQEAgLTAsMCArMSwzMzMgQEAKKy8qCisgICBjb21lZGkvZHJpdmVycy9tdWx0aXEzLmMKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgUXVhbnNlciBDb25zdWx0aW5nIE11bHRpUS0zIGJvYXJkCisKKyAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgIENvcHlyaWdodCAoQykgMTk5OSBBbmRlcnMgQmxvbWRlbGwgPGFuZGVycy5ibG9tZGVsbEBjb250cm9sLmx0aC5zZT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBtdWx0aXEzCitEZXNjcmlwdGlvbjogUXVhbnNlciBDb25zdWx0aW5nIE11bHRpUS0zCitBdXRob3I6IEFuZGVycyBCbG9tZGVsbCA8YW5kZXJzLmJsb21kZWxsQGNvbnRyb2wubHRoLnNlPgorU3RhdHVzOiB3b3JrcworRGV2aWNlczogW1F1YW5zZXIgQ29uc3VsdGluZ10gTXVsdGlRLTMgKG11bHRpcTMpCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIE1VTFRJUTNfU0laRSAxNgorCisvKgorICogTVVMVElRLTMgcG9ydCBvZmZzZXRzCisgKi8KKyNkZWZpbmUgTVVMVElRM19ESUdJTl9QT1JUIDAKKyNkZWZpbmUgTVVMVElRM19ESUdPVVRfUE9SVCAwCisjZGVmaW5lIE1VTFRJUTNfREFDX0RBVEEgMgorI2RlZmluZSBNVUxUSVEzX0FEX0RBVEEgNAorI2RlZmluZSBNVUxUSVEzX0FEX0NTIDQKKyNkZWZpbmUgTVVMVElRM19TVEFUVVMgNgorI2RlZmluZSBNVUxUSVEzX0NPTlRST0wgNgorI2RlZmluZSBNVUxUSVEzX0NMS19EQVRBIDgKKyNkZWZpbmUgTVVMVElRM19FTkNfREFUQSAxMgorI2RlZmluZSBNVUxUSVEzX0VOQ19DT05UUk9MIDE0CisKKy8qCisgKiBmbGFncyBmb3IgQ09OVFJPTCByZWdpc3RlcgorICovCisjZGVmaW5lIE1VTFRJUTNfQURfTVVYX0VOICAgICAgMHgwMDQwCisjZGVmaW5lIE1VTFRJUTNfQURfQVVUT1ogICAgICAgMHgwMDgwCisjZGVmaW5lIE1VTFRJUTNfQURfQVVUT0NBTCAgICAgMHgwMTAwCisjZGVmaW5lIE1VTFRJUTNfQURfU0ggICAgICAgICAgMHgwMjAwCisjZGVmaW5lIE1VTFRJUTNfQURfQ0xPQ0tfNE0gICAgMHgwNDAwCisjZGVmaW5lIE1VTFRJUTNfREFfTE9BRCAgICAgICAgICAgICAgICAweDE4MDAKKworI2RlZmluZSBNVUxUSVEzX0NPTlRST0xfTVVTVCAgICAweDA2MDAKKworLyoKKyAqIGZsYWdzIGZvciBTVEFUVVMgcmVnaXN0ZXIKKyAqLworI2RlZmluZSBNVUxUSVEzX1NUQVRVU19FT0MgICAgICAweDAwOAorI2RlZmluZSBNVUxUSVEzX1NUQVRVU19FT0NfSSAgICAweDAxMAorCisvKgorICogZmxhZ3MgZm9yIGVuY29kZXIgY29udHJvbAorICovCisjZGVmaW5lIE1VTFRJUTNfQ0xPQ0tfREFUQSAgICAgIDB4MDAKKyNkZWZpbmUgTVVMVElRM19DTE9DS19TRVRVUCAgICAgMHgxOAorI2RlZmluZSBNVUxUSVEzX0lOUFVUX1NFVFVQICAgICAweDQxCisjZGVmaW5lIE1VTFRJUTNfUVVBRF9YNCAgICAgICAgIDB4MzgKKyNkZWZpbmUgTVVMVElRM19CUF9SRVNFVCAgICAgICAgMHgwMQorI2RlZmluZSBNVUxUSVEzX0NOVFJfUkVTRVQgICAgICAweDAyCisjZGVmaW5lIE1VTFRJUTNfVFJTRlJQUl9DVFIgICAgIDB4MDgKKyNkZWZpbmUgTVVMVElRM19UUlNGUkNOVFJfT0wgICAgMHgxMAorI2RlZmluZSBNVUxUSVEzX0VGTEFHX1JFU0VUICAgICAweDA2CisKKyNkZWZpbmUgTVVMVElRM19USU1FT1VUIDMwCisKK3N0YXRpYyBpbnQgbXVsdGlxM19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBtdWx0aXEzX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX211bHRpcTMgPSB7CisgICAgICBkcml2ZXJfbmFtZToibXVsdGlxMyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6bXVsdGlxM19hdHRhY2gsCisgICAgICBkZXRhY2g6bXVsdGlxM19kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX211bHRpcTMpOworCitzdHJ1Y3QgbXVsdGlxM19wcml2YXRlIHsKKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07Cit9OworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IG11bHRpcTNfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBtdWx0aXEzX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIG47CisJaW50IGNoYW47CisJdW5zaWduZWQgaW50IGhpLCBsbzsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlvdXR3KE1VTFRJUTNfQ09OVFJPTF9NVVNUIHwgTVVMVElRM19BRF9NVVhfRU4gfCAoY2hhbiA8PCAzKSwKKwkJZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0NPTlRST0wpOworCisJZm9yIChpID0gMDsgaSA8IE1VTFRJUTNfVElNRU9VVDsgaSsrKSB7CisJCWlmIChpbncoZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX1NUQVRVUykgJiBNVUxUSVEzX1NUQVRVU19FT0MpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gTVVMVElRM19USU1FT1VUKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJb3V0dygwLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfQURfQ1MpOworCQlmb3IgKGkgPSAwOyBpIDwgTVVMVElRM19USU1FT1VUOyBpKyspIHsKKwkJCWlmIChpbncoZGV2LT5pb2Jhc2UgKworCQkJCQlNVUxUSVEzX1NUQVRVUykgJiBNVUxUSVEzX1NUQVRVU19FT0NfSSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA9PSBNVUxUSVEzX1RJTUVPVVQpCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCQloaSA9IGluYihkZXYtPmlvYmFzZSArIE1VTFRJUTNfQURfQ1MpOworCQlsbyA9IGluYihkZXYtPmlvYmFzZSArIE1VTFRJUTNfQURfQ1MpOworCQlkYXRhW25dID0gKCgoaGkgPDwgOCkgfCBsbykgKyAweDEwMDApICYgMHgxZmZmOworCX0KKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IG11bHRpcTNfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgbXVsdGlxM19hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlvdXR3KE1VTFRJUTNfQ09OVFJPTF9NVVNUIHwgTVVMVElRM19EQV9MT0FEIHwgY2hhbiwKKwkJCWRldi0+aW9iYXNlICsgTVVMVElRM19DT05UUk9MKTsKKwkJb3V0dyhkYXRhW2ldLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfREFDX0RBVEEpOworCQlvdXR3KE1VTFRJUTNfQ09OVFJPTF9NVVNULCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfQ09OVFJPTCk7CisKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOworCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IG11bHRpcTNfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbncoZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0RJR0lOX1BPUlQpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbXVsdGlxM19kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwlvdXR3KHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRElHT1VUX1BPUlQpOworCisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbXVsdGlxM19lbmNvZGVyX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgY29udHJvbCA9IE1VTFRJUTNfQ09OVFJPTF9NVVNUIHwgTVVMVElRM19BRF9NVVhfRU4gfCAoY2hhbiA8PCAzKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJaW50IHZhbHVlOworCQlvdXR3KGNvbnRyb2wsIGRldi0+aW9iYXNlICsgTVVMVElRM19DT05UUk9MKTsKKwkJb3V0YihNVUxUSVEzX0JQX1JFU0VULCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0NPTlRST0wpOworCQlvdXRiKE1VTFRJUTNfVFJTRlJDTlRSX09MLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0NPTlRST0wpOworCQl2YWx1ZSA9IGluYihkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0RBVEEpOworCQl2YWx1ZSB8PSAoaW5iKGRldi0+aW9iYXNlICsgTVVMVElRM19FTkNfREFUQSkgPDwgOCk7CisJCXZhbHVlIHw9IChpbmIoZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19EQVRBKSA8PCAxNik7CisJCWRhdGFbbl0gPSAodmFsdWUgKyAweDgwMDAwMCkgJiAweGZmZmZmZjsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHZvaWQgZW5jb2Rlcl9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgY2hhbjsKKwlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgZGV2LT5zdWJkZXZpY2VzWzRdLm5fY2hhbjsgY2hhbisrKSB7CisJCWludCBjb250cm9sID0KKwkJCU1VTFRJUTNfQ09OVFJPTF9NVVNUIHwgTVVMVElRM19BRF9NVVhfRU4gfCAoY2hhbiA8PCAzKTsKKwkJb3V0dyhjb250cm9sLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfQ09OVFJPTCk7CisJCW91dGIoTVVMVElRM19FRkxBR19SRVNFVCwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19DT05UUk9MKTsKKwkJb3V0YihNVUxUSVEzX0JQX1JFU0VULCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0NPTlRST0wpOworCQlvdXRiKE1VTFRJUTNfQ0xPQ0tfREFUQSwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19EQVRBKTsKKwkJb3V0YihNVUxUSVEzX0NMT0NLX1NFVFVQLCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0NPTlRST0wpOworCQlvdXRiKE1VTFRJUTNfSU5QVVRfU0VUVVAsIGRldi0+aW9iYXNlICsgTVVMVElRM19FTkNfQ09OVFJPTCk7CisJCW91dGIoTVVMVElRM19RVUFEX1g0LCBkZXYtPmlvYmFzZSArIE1VTFRJUTNfRU5DX0NPTlRST0wpOworCQlvdXRiKE1VTFRJUTNfQ05UUl9SRVNFVCwgZGV2LT5pb2Jhc2UgKyBNVUxUSVEzX0VOQ19DT05UUk9MKTsKKwl9Cit9CisKKy8qCisgICBvcHRpb25zWzBdIC0gSS9PIHBvcnQKKyAgIG9wdGlvbnNbMV0gLSBpcnEKKyAgIG9wdGlvbnNbMl0gLSBudW1iZXIgb2YgZW5jb2RlciBjaGlwcyBpbnN0YWxsZWQKKyAqLworCitzdGF0aWMgaW50IG11bHRpcTNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCWludCByZXN1bHQgPSAwOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBtdWx0aXEzOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIE1VTFRJUTNfU0laRSwgIm11bHRpcTMiKSkgeworCQlwcmludGsoImNvbWVkaSVkOiBJL08gcG9ydCBjb25mbGljdFxuIiwgZGV2LT5taW5vcik7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJaWYgKGlycSkgeworCQlwcmludGsoImNvbWVkaSVkOiBpcnEgPSAldSBpZ25vcmVkXG4iLCBkZXYtPm1pbm9yLCBpcnEpOworCX0gZWxzZSB7CisJCXByaW50aygiY29tZWRpJWQ6IG5vIGlycVxuIiwgZGV2LT5taW5vcik7CisJfQorCWRldi0+Ym9hcmRfbmFtZSA9ICJtdWx0aXEzIjsKKwlyZXN1bHQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNSk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwlyZXN1bHQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBtdWx0aXEzX3ByaXZhdGUpKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9yZWFkID0gbXVsdGlxM19haV9pbnNuX3JlYWQ7CisJcy0+bWF4ZGF0YSA9IDB4MWZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyNTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGFvIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX3JlYWQgPSBtdWx0aXEzX2FvX2luc25fcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gbXVsdGlxM19hb19pbnNuX3dyaXRlOworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyNTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gbXVsdGlxM19kaV9pbnNuX2JpdHM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCS8qIGRvIHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gbXVsdGlxM19kb19pbnNuX2JpdHM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5zdGF0ZSA9IDA7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwkvKiBlbmNvZGVyIChjb3VudGVyKSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfTFNBTVBMOworCXMtPm5fY2hhbiA9IGl0LT5vcHRpb25zWzJdICogMjsKKwlzLT5pbnNuX3JlYWQgPSBtdWx0aXEzX2VuY29kZXJfaW5zbl9yZWFkOworCXMtPm1heGRhdGEgPSAweGZmZmZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCisJZW5jb2Rlcl9yZXNldChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXVsdGlxM19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogbXVsdGlxMzogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlvYmFzZSkgeworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgTVVMVElRM19TSVpFKTsKKwl9CisJaWYgKGRldi0+aXJxKSB7CisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxZWNiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMKQEAgLTAsMCArMSw0ODkgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jCisgICAgZHJpdmVyIGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ0ktNjUyNworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OSwyMDAyLDIwMDMgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IG5pXzY1MjcKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyA2NTI3CitBdXRob3I6IGRzCitTdGF0dXM6IHdvcmtzCitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIFBDSS02NTI3IChuaTY1MjcpLCBQWEktNjUyNworVXBkYXRlZDogU2F0LCAyNSBKYW4gMjAwMyAxMzoyNDo0MCAtMDgwMAorCisKKyovCisKKy8qCisgICBNYW51YWxzIChhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAubmF0aW5zdC5jb20vc3VwcG9ydC9tYW51YWxzKQorCisJMzcwMTA2Yi5wZGYJNjUyNyBSZWdpc3RlciBMZXZlbCBQcm9ncmFtbWVyIE1hbnVhbAorCisgKi8KKworI2RlZmluZSBERUJVRyAxCisjZGVmaW5lIERFQlVHX0ZMQUdTCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgIm1pdGUuaCIKKworI2RlZmluZSBOSTY1MjdfRElPX1NJWkUgNDA5NgorI2RlZmluZSBOSTY1MjdfTUlURV9TSVpFIDQwOTYKKworI2RlZmluZSBQb3J0X1JlZ2lzdGVyKHgpCQkJKDB4MDArKHgpKQorI2RlZmluZSBJRF9SZWdpc3RlcgkJCQkweDA2CisKKyNkZWZpbmUgQ2xlYXJfUmVnaXN0ZXIJCQkJMHgwNworI2RlZmluZSBDbHJFZGdlCQkJCTB4MDgKKyNkZWZpbmUgQ2xyT3ZlcmZsb3cJCQkweDA0CisjZGVmaW5lIENsckZpbHRlcgkJCTB4MDIKKyNkZWZpbmUgQ2xySW50ZXJ2YWwJCQkweDAxCisKKyNkZWZpbmUgRmlsdGVyX0ludGVydmFsKHgpCQkJKDB4MDgrKHgpKQorI2RlZmluZSBGaWx0ZXJfRW5hYmxlKHgpCQkJKDB4MGMrKHgpKQorCisjZGVmaW5lIENoYW5nZV9TdGF0dXMJCQkJMHgxNAorI2RlZmluZSBNYXN0ZXJJbnRlcnJ1cHRTdGF0dXMJCTB4MDQKKyNkZWZpbmUgT3ZlcmZsb3cJCQkweDAyCisjZGVmaW5lIEVkZ2VTdGF0dXMJCQkweDAxCisKKyNkZWZpbmUgTWFzdGVyX0ludGVycnVwdF9Db250cm9sCQkweDE1CisjZGVmaW5lIEZhbGxpbmdFZGdlSW50RW5hYmxlCQkweDEwCisjZGVmaW5lIFJpc2luZ0VkZ2VJbnRFbmFibGUJCTB4MDgKKyNkZWZpbmUgTWFzdGVySW50ZXJydXB0RW5hYmxlCQkweDA0CisjZGVmaW5lIE92ZXJmbG93SW50RW5hYmxlCQkweDAyCisjZGVmaW5lIEVkZ2VJbnRFbmFibGUJCQkweDAxCisKKyNkZWZpbmUgUmlzaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSh4KQkJKDB4MDE4Kyh4KSkKKyNkZWZpbmUgRmFsbGluZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoeCkJKDB4MDIwKyh4KSkKKworc3RhdGljIGludCBuaTY1MjdfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgbmk2NTI3X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX25pNjUyNyA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJuaTY1MjciLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOm5pNjUyN19hdHRhY2gsCisgICAgICBkZXRhY2g6bmk2NTI3X2RldGFjaCwKK307CisKK3N0cnVjdCBuaTY1MjdfYm9hcmQgeworCisJaW50IGRldl9pZDsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuaTY1MjdfYm9hcmQgbmk2NTI3X2JvYXJkc1tdID0geworCXsKKwkgICAgICBkZXZfaWQ6CTB4MmIyMCwKKwkgICAgICBuYW1lOgkicGNpLTY1MjciLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MmIxMCwKKwkgICAgICBuYW1lOgkicHhpLTY1MjciLAorCQl9LAorfTsKKworI2RlZmluZSBuX25pNjUyN19ib2FyZHMgKHNpemVvZihuaTY1MjdfYm9hcmRzKS9zaXplb2Yobmk2NTI3X2JvYXJkc1swXSkpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3Qgbmk2NTI3X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShuaTY1MjdfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJiMTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MmIyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbmk2NTI3X3BjaV90YWJsZSk7CisKK3N0cnVjdCBuaTY1MjdfcHJpdmF0ZSB7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCXVuc2lnbmVkIGludCBmaWx0ZXJfaW50ZXJ2YWw7CisJdW5zaWduZWQgaW50IGZpbHRlcl9lbmFibGU7Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3Qgbmk2NTI3X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgbmk2NTI3X2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCk7CisKK3N0YXRpYyBpbnQgbmk2NTI3X2RpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGludCBpbnRlcnZhbDsKKworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0gIT0gSU5TTl9DT05GSUdfRklMVEVSKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzFdKSB7CisJCWludGVydmFsID0gKGRhdGFbMV0gKyAxMDApIC8gMjAwOworCQlkYXRhWzFdID0gaW50ZXJ2YWwgKiAyMDA7CisKKwkJaWYgKGludGVydmFsICE9IGRldnByaXYtPmZpbHRlcl9pbnRlcnZhbCkgeworCQkJd3JpdGViKGludGVydmFsICYgMHhmZiwKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJRmlsdGVyX0ludGVydmFsKDApKTsKKwkJCXdyaXRlYigoaW50ZXJ2YWwgPj4gOCkgJiAweGZmLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlGaWx0ZXJfSW50ZXJ2YWwoMSkpOworCQkJd3JpdGViKChpbnRlcnZhbCA+PiAxNikgJiAweDBmLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlGaWx0ZXJfSW50ZXJ2YWwoMikpOworCisJCQl3cml0ZWIoQ2xySW50ZXJ2YWwsCisJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDbGVhcl9SZWdpc3Rlcik7CisKKwkJCWRldnByaXYtPmZpbHRlcl9pbnRlcnZhbCA9IGludGVydmFsOworCQl9CisKKwkJZGV2cHJpdi0+ZmlsdGVyX2VuYWJsZSB8PSAxIDw8IGNoYW47CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+ZmlsdGVyX2VuYWJsZSAmPSB+KDEgPDwgY2hhbik7CisJfQorCisJd3JpdGViKGRldnByaXYtPmZpbHRlcl9lbmFibGUsCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmlsdGVyX0VuYWJsZSgwKSk7CisJd3JpdGViKGRldnByaXYtPmZpbHRlcl9lbmFibGUgPj4gOCwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaWx0ZXJfRW5hYmxlKDEpKTsKKwl3cml0ZWIoZGV2cHJpdi0+ZmlsdGVyX2VuYWJsZSA+PiAxNiwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaWx0ZXJfRW5hYmxlKDIpKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pNjUyN19kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9SZWdpc3RlcigwKSk7CisJZGF0YVsxXSB8PSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUmVnaXN0ZXIoMSkpIDw8IDg7CisJZGF0YVsxXSB8PSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUmVnaXN0ZXIoMikpIDw8IDE2OworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmk2NTI3X2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisKKwkJLyogVGhlIG9wZW4gcmVsYXkgc3RhdGUgb24gdGhlIGJvYXJkIGNvb3Jlc3BvbmRzIHRvIDEsCisJCSAqIGJ1dCBpbiBDb21lZGksIGl0IGlzIHJlcHJlc2VudGVkIGJ5IDAuICovCisJCWlmIChkYXRhWzBdICYgMHgwMDAwZmYpIHsKKwkJCXdyaXRlYigocy0+c3RhdGUgXiAweGZmKSwKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUmVnaXN0ZXIoMykpOworCQl9CisJCWlmIChkYXRhWzBdICYgMHgwMGZmMDApIHsKKwkJCXdyaXRlYigocy0+c3RhdGUgPj4gOCkgXiAweGZmLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9SZWdpc3Rlcig0KSk7CisJCX0KKwkJaWYgKGRhdGFbMF0gJiAweGZmMDAwMCkgeworCQkJd3JpdGViKChzLT5zdGF0ZSA+PiAxNikgXiAweGZmLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9SZWdpc3Rlcig1KSk7CisJCX0KKwl9CisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBuaTY1MjdfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENoYW5nZV9TdGF0dXMpOworCWlmICgoc3RhdHVzICYgTWFzdGVySW50ZXJydXB0U3RhdHVzKSA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisJaWYgKChzdGF0dXMgJiBFZGdlU3RhdHVzKSA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwl3cml0ZWIoQ2xyRWRnZSB8IENsck92ZXJmbG93LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENsZWFyX1JlZ2lzdGVyKTsKKworCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAwKTsKKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT1M7CisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG5pNjUyN19pbnRyX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX09USEVSOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSAxKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJY21kLT5zdG9wX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaTY1MjdfaW50cl9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwkvL3N0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCXdyaXRlYihDbHJFZGdlIHwgQ2xyT3ZlcmZsb3csCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQ2xlYXJfUmVnaXN0ZXIpOworCXdyaXRlYihGYWxsaW5nRWRnZUludEVuYWJsZSB8IFJpc2luZ0VkZ2VJbnRFbmFibGUgfAorCQlNYXN0ZXJJbnRlcnJ1cHRFbmFibGUgfCBFZGdlSW50RW5hYmxlLAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIE1hc3Rlcl9JbnRlcnJ1cHRfQ29udHJvbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaTY1MjdfaW50cl9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl3cml0ZWIoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmk2NTI3X2ludHJfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IDA7CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmk2NTI3X2ludHJfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uIDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFbMF0gIT0gSU5TTl9DT05GSUdfQ0hBTkdFX05PVElGWSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3cml0ZWIoZGF0YVsxXSwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBSaXNpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKDApKTsKKwl3cml0ZWIoZGF0YVsxXSA+PiA4LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFJpc2luZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMSkpOworCXdyaXRlYihkYXRhWzFdID4+IDE2LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFJpc2luZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMikpOworCisJd3JpdGViKGRhdGFbMl0sCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmFsbGluZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMCkpOworCXdyaXRlYihkYXRhWzJdID4+IDgsCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmFsbGluZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMSkpOworCXdyaXRlYihkYXRhWzJdID4+IDE2LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZhbGxpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKDIpKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pNjUyN19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldDsKKworCXByaW50aygiY29tZWRpJWQ6IG5pNjUyNzoiLCBkZXYtPm1pbm9yKTsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3Qgbmk2NTI3X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbmk2NTI3X2ZpbmRfZGV2aWNlKGRldiwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1pdGVfc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisJcHJpbnRrKCIgJXMiLCBkZXYtPmJvYXJkX25hbWUpOworCisJcHJpbnRrKCIgSUQ9MHglMDJ4IiwgcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBJRF9SZWdpc3RlcikpOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMjQ7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5pbnNuX2NvbmZpZyA9IG5pNjUyN19kaV9pbnNuX2NvbmZpZzsKKwlzLT5pbnNuX2JpdHMgPSBuaTY1MjdfZGlfaW5zbl9iaXRzOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAyNDsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOwkvKiBGSVhNRTogYWN0dWFsbHkgY29uZHVjdGFuY2UgKi8KKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5pbnNuX2JpdHMgPSBuaTY1MjdfZG9faW5zbl9iaXRzOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+ZG9fY21kdGVzdCA9IG5pNjUyN19pbnRyX2NtZHRlc3Q7CisJcy0+ZG9fY21kID0gbmk2NTI3X2ludHJfY21kOworCXMtPmNhbmNlbCA9IG5pNjUyN19pbnRyX2NhbmNlbDsKKwlzLT5pbnNuX2JpdHMgPSBuaTY1MjdfaW50cl9pbnNuX2JpdHM7CisJcy0+aW5zbl9jb25maWcgPSBuaTY1MjdfaW50cl9pbnNuX2NvbmZpZzsKKworCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpbHRlcl9FbmFibGUoMCkpOworCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpbHRlcl9FbmFibGUoMSkpOworCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpbHRlcl9FbmFibGUoMikpOworCisJd3JpdGViKENsckVkZ2UgfCBDbHJPdmVyZmxvdyB8IENsckZpbHRlciB8IENsckludGVydmFsLAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENsZWFyX1JlZ2lzdGVyKTsKKwl3cml0ZWIoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wpOworCisJcmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKG1pdGVfaXJxKGRldnByaXYtPm1pdGUpLCBuaTY1MjdfaW50ZXJydXB0LAorCQlJUlFGX1NIQVJFRCwgIm5pNjUyNyIsIGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGUiKTsKKwl9IGVsc2UKKwkJZGV2LT5pcnEgPSBtaXRlX2lycShkZXZwcml2LT5taXRlKTsKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pNjUyN19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+bWl0ZSAmJiBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkcikgeworCQl3cml0ZWIoMHgwMCwKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgTWFzdGVyX0ludGVycnVwdF9Db250cm9sKTsKKwl9CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKworCWlmIChkZXZwcml2ICYmIGRldnByaXYtPm1pdGUpIHsKKwkJbWl0ZV91bnNldHVwKGRldnByaXYtPm1pdGUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pNjUyN19maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpCit7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCWludCBpOworCisJZm9yIChtaXRlID0gbWl0ZV9kZXZpY2VzOyBtaXRlOyBtaXRlID0gbWl0ZS0+bmV4dCkgeworCQlpZiAobWl0ZS0+dXNlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJCWlmIChidXMgIT0gbWl0ZS0+cGNpZGV2LT5idXMtPm51bWJlciB8fAorCQkJCXNsb3QgIT0gUENJX1NMT1QobWl0ZS0+cGNpZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG5fbmk2NTI3X2JvYXJkczsgaSsrKSB7CisJCQlpZiAobWl0ZV9kZXZpY2VfaWQobWl0ZSkgPT0gbmk2NTI3X2JvYXJkc1tpXS5kZXZfaWQpIHsKKwkJCQlkZXYtPmJvYXJkX3B0ciA9IG5pNjUyN19ib2FyZHMgKyBpOworCQkJCWRldnByaXYtPm1pdGUgPSBtaXRlOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwltaXRlX2xpc3RfZGV2aWNlcygpOworCXJldHVybiAtRUlPOworfQorCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9uaTY1MjcsIG5pNjUyN19wY2lfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4NWRhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKQEAgLTAsMCArMSw4MDkgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfNjUxNC5jCisgICAgZHJpdmVyIGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ0ktNjUxNAorCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IEpvbiBHcmllcnNvbiA8amRAcmVua28uY28udWs+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2IEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMiwyMDAzIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBuaV82NXh4CitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgNjV4eCBzdGF0aWMgZGlvIGJvYXJkcworQXV0aG9yOiBKb24gR3JpZXJzb24gPGpkQHJlbmtvLmNvLnVrPiwgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorU3RhdHVzOiB0ZXN0aW5nCitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIFBDSS02NTA5IChuaV82NXh4KSwgUFhJLTY1MDksIFBDSS02NTEwLCBQQ0ktNjUxMSwKKyAgUFhJLTY1MTEsIFBDSS02NTEyLCBQWEktNjUxMiwgUENJLTY1MTMsIFBYSS02NTEzLCBQQ0ktNjUxNCwgUFhJLTY1MTQsIFBDSS02NTE1LAorICBQWEktNjUxNSwgUENJLTY1MTYsIFBDSS02NTE3LCBQQ0ktNjUxOCwgUENJLTY1MTksIFBDSS02NTIwLCBQQ0ktNjUyMSwgUFhJLTY1MjEsCisgIFBDSS02NTI4LCBQWEktNjUyOAorVXBkYXRlZDogV2VkIE9jdCAxOCAwODo1OToxMSBFRFQgMjAwNgorCitCYXNlZCBvbiB0aGUgUENJLTY1MjcgZHJpdmVyIGJ5IGRzLgorVGhlIGludGVycnVwdCBzdWJkZXZpY2UgKHN1YmRldmljZSAzKSBpcyBwcm9iYWJseSBicm9rZW4gZm9yIGFsbCBib2FyZHMKK2V4Y2VwdCBtYXliZSB0aGUgNjUxNC4KKworKi8KKworLyoKKyAgIE1hbnVhbHMgKGF2YWlsYWJsZSBmcm9tIGZ0cDovL2Z0cC5uYXRpbnN0LmNvbS9zdXBwb3J0L21hbnVhbHMpCisKKwkzNzAxMDZiLnBkZgk2NTE0IFJlZ2lzdGVyIExldmVsIFByb2dyYW1tZXIgTWFudWFsCisKKyAqLworCisjZGVmaW5lIF9HTlVfU09VUkNFCisjZGVmaW5lIERFQlVHIDEKKyNkZWZpbmUgREVCVUdfRkxBR1MKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgIm1pdGUuaCIKKworI2RlZmluZSBOSTY1MTRfRElPX1NJWkUgNDA5NgorI2RlZmluZSBOSTY1MTRfTUlURV9TSVpFIDQwOTYKKworI2RlZmluZSBOSV82NVhYX01BWF9OVU1fUE9SVFMgMTIKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0ID0gODsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBuaV82NXh4X3BvcnRfb2Zmc2V0ID0gMHgxMDsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBQb3J0X0RhdGEodW5zaWduZWQgcG9ydCkKK3sKKwlyZXR1cm4gMHg0MCArIHBvcnQgKiBuaV82NXh4X3BvcnRfb2Zmc2V0OworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBQb3J0X1NlbGVjdCh1bnNpZ25lZCBwb3J0KQoreworCXJldHVybiAweDQxICsgcG9ydCAqIG5pXzY1eHhfcG9ydF9vZmZzZXQ7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIFJpc2luZ19FZGdlX0RldGVjdGlvbl9FbmFibGUodW5zaWduZWQgcG9ydCkKK3sKKwlyZXR1cm4gMHg0MiArIHBvcnQgKiBuaV82NXh4X3BvcnRfb2Zmc2V0OworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBGYWxsaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSh1bnNpZ25lZCBwb3J0KQoreworCXJldHVybiAweDQzICsgcG9ydCAqIG5pXzY1eHhfcG9ydF9vZmZzZXQ7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIEZpbHRlcl9FbmFibGUodW5zaWduZWQgcG9ydCkKK3sKKwlyZXR1cm4gMHg0NCArIHBvcnQgKiBuaV82NXh4X3BvcnRfb2Zmc2V0OworfQorCisjZGVmaW5lIElEX1JlZ2lzdGVyCQkJCTB4MDAKKworI2RlZmluZSBDbGVhcl9SZWdpc3RlcgkJCQkweDAxCisjZGVmaW5lIENsckVkZ2UJCQkJMHgwOAorI2RlZmluZSBDbHJPdmVyZmxvdwkJCTB4MDQKKworI2RlZmluZSBGaWx0ZXJfSW50ZXJ2YWwJCQkweDA4CisKKyNkZWZpbmUgQ2hhbmdlX1N0YXR1cwkJCQkweDAyCisjZGVmaW5lIE1hc3RlckludGVycnVwdFN0YXR1cwkJMHgwNAorI2RlZmluZSBPdmVyZmxvdwkJCTB4MDIKKyNkZWZpbmUgRWRnZVN0YXR1cwkJCTB4MDEKKworI2RlZmluZSBNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wJCTB4MDMKKyNkZWZpbmUgRmFsbGluZ0VkZ2VJbnRFbmFibGUJCTB4MTAKKyNkZWZpbmUgUmlzaW5nRWRnZUludEVuYWJsZQkJMHgwOAorI2RlZmluZSBNYXN0ZXJJbnRlcnJ1cHRFbmFibGUJCTB4MDQKKyNkZWZpbmUgT3ZlcmZsb3dJbnRFbmFibGUJCTB4MDIKKyNkZWZpbmUgRWRnZUludEVuYWJsZQkJCTB4MDEKKworc3RhdGljIGludCBuaV82NXh4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG5pXzY1eHhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfbmlfNjV4eCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJuaV82NXh4IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpuaV82NXh4X2F0dGFjaCwKKyAgICAgIGRldGFjaDpuaV82NXh4X2RldGFjaCwKK307CisKK3N0cnVjdCBuaV82NXh4X2JvYXJkIHsKKworCWludCBkZXZfaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBudW1fZGlvX3BvcnRzOworCXVuc2lnbmVkIG51bV9kaV9wb3J0czsKKwl1bnNpZ25lZCBudW1fZG9fcG9ydHM7CisJdW5zaWduZWQgaW52ZXJ0X291dHB1dHM6MTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmlfNjV4eF9ib2FyZCBuaV82NXh4X2JvYXJkc1tdID0geworCXsKKwkgICAgICBkZXZfaWQ6CTB4NzA4NSwKKwkgICAgICBuYW1lOgkicGNpLTY1MDkiLAorCSAgICAgIG51bV9kaW9fcG9ydHM6MTIsCisgICAgICBpbnZlcnRfb3V0cHV0czowfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDE3MTAsCisJICAgICAgbmFtZToJInB4aS02NTA5IiwKKwkgICAgICBudW1fZGlvX3BvcnRzOjEyLAorICAgICAgaW52ZXJ0X291dHB1dHM6MH0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MTI0LAorCSAgICAgIG5hbWU6CSJwY2ktNjUxMCIsCisgICAgICBudW1fZGlfcG9ydHM6NH0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MGMzLAorCSAgICAgIG5hbWU6CSJwY2ktNjUxMSIsCisgICAgICBudW1fZGlfcG9ydHM6OH0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MGQzLAorCSAgICAgIG5hbWU6CSJweGktNjUxMSIsCisgICAgICBudW1fZGlfcG9ydHM6OH0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MGNjLAorCSAgICAgIG5hbWU6CSJwY2ktNjUxMiIsCisgICAgICBudW1fZG9fcG9ydHM6OH0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MGQyLAorCSAgICAgIG5hbWU6CSJweGktNjUxMiIsCisgICAgICBudW1fZG9fcG9ydHM6OH0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MGM4LAorCSAgICAgIG5hbWU6CSJwY2ktNjUxMyIsCisJICAgICAgbnVtX2RvX3BvcnRzOjgsCisgICAgICBpbnZlcnRfb3V0cHV0czoxfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcwZDEsCisJICAgICAgbmFtZToJInB4aS02NTEzIiwKKwkgICAgICBudW1fZG9fcG9ydHM6OCwKKyAgICAgIGludmVydF9vdXRwdXRzOjF9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzA4OCwKKwkgICAgICBuYW1lOgkicGNpLTY1MTQiLAorCSAgICAgIG51bV9kaV9wb3J0czo0LAorCSAgICAgIG51bV9kb19wb3J0czo0LAorICAgICAgaW52ZXJ0X291dHB1dHM6MX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MENELAorCSAgICAgIG5hbWU6CSJweGktNjUxNCIsCisJICAgICAgbnVtX2RpX3BvcnRzOjQsCisJICAgICAgbnVtX2RvX3BvcnRzOjQsCisgICAgICBpbnZlcnRfb3V0cHV0czoxfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcwODcsCisJICAgICAgbmFtZToJInBjaS02NTE1IiwKKwkgICAgICBudW1fZGlfcG9ydHM6NCwKKwkgICAgICBudW1fZG9fcG9ydHM6NCwKKyAgICAgIGludmVydF9vdXRwdXRzOjF9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzBjOSwKKwkgICAgICBuYW1lOgkicHhpLTY1MTUiLAorCSAgICAgIG51bV9kaV9wb3J0czo0LAorCSAgICAgIG51bV9kb19wb3J0czo0LAorICAgICAgaW52ZXJ0X291dHB1dHM6MX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MTI1LAorCSAgICAgIG5hbWU6CSJwY2ktNjUxNiIsCisJICAgICAgbnVtX2RvX3BvcnRzOjQsCisgICAgICBpbnZlcnRfb3V0cHV0czoxfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcxMjYsCisJICAgICAgbmFtZToJInBjaS02NTE3IiwKKwkgICAgICBudW1fZG9fcG9ydHM6NCwKKyAgICAgIGludmVydF9vdXRwdXRzOjF9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4NzEyNywKKwkgICAgICBuYW1lOgkicGNpLTY1MTgiLAorCSAgICAgIG51bV9kaV9wb3J0czoyLAorCSAgICAgIG51bV9kb19wb3J0czoyLAorICAgICAgaW52ZXJ0X291dHB1dHM6MX0sCisJeworCSAgICAgIGRldl9pZDoJMHg3MTI4LAorCSAgICAgIG5hbWU6CSJwY2ktNjUxOSIsCisJICAgICAgbnVtX2RpX3BvcnRzOjIsCisJICAgICAgbnVtX2RvX3BvcnRzOjIsCisgICAgICBpbnZlcnRfb3V0cHV0czoxfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcxYzUsCisJICAgICAgbmFtZToJInBjaS02NTIwIiwKKwkgICAgICBudW1fZGlfcG9ydHM6MSwKKwkgICAgICBudW1fZG9fcG9ydHM6MSwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcxOGIsCisJICAgICAgbmFtZToJInBjaS02NTIxIiwKKwkgICAgICBudW1fZGlfcG9ydHM6MSwKKwkgICAgICBudW1fZG9fcG9ydHM6MSwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcxOGMsCisJICAgICAgbmFtZToJInB4aS02NTIxIiwKKwkgICAgICBudW1fZGlfcG9ydHM6MSwKKwkgICAgICBudW1fZG9fcG9ydHM6MSwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcwYTksCisJICAgICAgbmFtZToJInBjaS02NTI4IiwKKwkgICAgICBudW1fZGlfcG9ydHM6MywKKwkgICAgICBudW1fZG9fcG9ydHM6MywKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDcwODYsCisJICAgICAgbmFtZToJInB4aS02NTI4IiwKKwkgICAgICBudW1fZGlfcG9ydHM6MywKKwkgICAgICBudW1fZG9fcG9ydHM6MywKKwkJfSwKK307CisKKyNkZWZpbmUgbl9uaV82NXh4X2JvYXJkcyAoc2l6ZW9mKG5pXzY1eHhfYm9hcmRzKS9zaXplb2YobmlfNjV4eF9ib2FyZHNbMF0pKQorc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbmlfNjV4eF9ib2FyZCAqYm9hcmQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIGRldi0+Ym9hcmRfcHRyOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBuaV82NXh4X3BvcnRfYnlfY2hhbm5lbCh1bnNpZ25lZCBjaGFubmVsKQoreworCXJldHVybiBjaGFubmVsIC8gbmlfNjV4eF9jaGFubmVsc19wZXJfcG9ydDsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmlfNjV4eF90b3RhbF9udW1fcG9ydHMoY29uc3Qgc3RydWN0IG5pXzY1eHhfYm9hcmQgKiBib2FyZCkKK3sKKwlyZXR1cm4gYm9hcmQtPm51bV9kaW9fcG9ydHMgKyBib2FyZC0+bnVtX2RpX3BvcnRzICsgYm9hcmQtPm51bV9kb19wb3J0czsKK30KKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5pXzY1eHhfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE3MTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzA4NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MDg2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwODcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzA4OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGE5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYzMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBjOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGM5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwY2MsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBDRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwZDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBkMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxMjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzEyNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTI3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxMjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzE4YiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MThjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxYzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG5pXzY1eHhfcGNpX3RhYmxlKTsKKworc3RydWN0IG5pXzY1eHhfcHJpdmF0ZSB7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCXVuc2lnbmVkIGludCBmaWx0ZXJfaW50ZXJ2YWw7CisJdW5zaWduZWQgc2hvcnQgZmlsdGVyX2VuYWJsZVtOSV82NVhYX01BWF9OVU1fUE9SVFNdOworCXVuc2lnbmVkIHNob3J0IG91dHB1dF9iaXRzW05JXzY1WFhfTUFYX05VTV9QT1JUU107CisJdW5zaWduZWQgc2hvcnQgZGlvX2RpcmVjdGlvbltOSV82NVhYX01BWF9OVU1fUE9SVFNdOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlfNjV4eF9wcml2YXRlICpwcml2YXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXJldHVybiBkZXYtPnByaXZhdGU7Cit9CisKK3N0cnVjdCBuaV82NXh4X3N1YmRldmljZV9wcml2YXRlIHsKKwl1bnNpZ25lZCBiYXNlX3BvcnQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuaV82NXh4X3N1YmRldmljZV9wcml2YXRlICpzcHJpdmF0ZShzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldikKK3sKKwlyZXR1cm4gc3ViZGV2LT5wcml2YXRlOworfQorc3RhdGljIHN0cnVjdCBuaV82NXh4X3N1YmRldmljZV9wcml2YXRlICpuaV82NXh4X2FsbG9jX3N1YmRldmljZV9wcml2YXRlKHZvaWQpCit7CisJc3RydWN0IG5pXzY1eHhfc3ViZGV2aWNlX3ByaXZhdGUgKnN1YmRldl9wcml2YXRlID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IG5pXzY1eHhfc3ViZGV2aWNlX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3ViZGV2X3ByaXZhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHN1YmRldl9wcml2YXRlOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KTsKKworc3RhdGljIGludCBuaV82NXh4X2NvbmZpZ19maWx0ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwljb25zdCB1bnNpZ25lZCBwb3J0ID0KKwkJc3ByaXZhdGUocyktPmJhc2VfcG9ydCArIG5pXzY1eHhfcG9ydF9ieV9jaGFubmVsKGNoYW4pOworCisJaWYgKGRhdGFbMF0gIT0gSU5TTl9DT05GSUdfRklMVEVSKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YVsxXSkgeworCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgZmlsdGVyX3Jlc29sdXRpb25fbnMgPSAyMDA7CisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfZmlsdGVyX2ludGVydmFsID0gMHhmZmZmZjsKKwkJdW5zaWduZWQgaW50ZXJ2YWwgPQorCQkJKGRhdGFbMV0gKworCQkJKGZpbHRlcl9yZXNvbHV0aW9uX25zIC8gMikpIC8gZmlsdGVyX3Jlc29sdXRpb25fbnM7CisJCWlmIChpbnRlcnZhbCA+IG1heF9maWx0ZXJfaW50ZXJ2YWwpCisJCQlpbnRlcnZhbCA9IG1heF9maWx0ZXJfaW50ZXJ2YWw7CisJCWRhdGFbMV0gPSBpbnRlcnZhbCAqIGZpbHRlcl9yZXNvbHV0aW9uX25zOworCisJCWlmIChpbnRlcnZhbCAhPSBwcml2YXRlKGRldiktPmZpbHRlcl9pbnRlcnZhbCkgeworCQkJd3JpdGViKGludGVydmFsLAorCQkJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCUZpbHRlcl9JbnRlcnZhbCk7CisJCQlwcml2YXRlKGRldiktPmZpbHRlcl9pbnRlcnZhbCA9IGludGVydmFsOworCQl9CisKKwkJcHJpdmF0ZShkZXYpLT5maWx0ZXJfZW5hYmxlW3BvcnRdIHw9CisJCQkxIDw8IChjaGFuICUgbmlfNjV4eF9jaGFubmVsc19wZXJfcG9ydCk7CisJfSBlbHNlIHsKKwkJcHJpdmF0ZShkZXYpLT5maWx0ZXJfZW5hYmxlW3BvcnRdICY9CisJCQl+KDEgPDwgKGNoYW4gJSBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0KSk7CisJfQorCisJd3JpdGViKHByaXZhdGUoZGV2KS0+ZmlsdGVyX2VuYWJsZVtwb3J0XSwKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIEZpbHRlcl9FbmFibGUocG9ydCkpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjV4eF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIHBvcnQ7CisKKwlpZiAoaW5zbi0+biA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCXBvcnQgPSBzcHJpdmF0ZShzKS0+YmFzZV9wb3J0ICsKKwkJbmlfNjV4eF9wb3J0X2J5X2NoYW5uZWwoQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpOworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRklMVEVSOgorCQlyZXR1cm4gbmlfNjV4eF9jb25maWdfZmlsdGVyKGRldiwgcywgaW5zbiwgZGF0YSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJaWYgKHMtPnR5cGUgIT0gQ09NRURJX1NVQkRfRElPKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXByaXZhdGUoZGV2KS0+ZGlvX2RpcmVjdGlvbltwb3J0XSA9IENPTUVESV9PVVRQVVQ7CisJCXdyaXRlYigwLCBwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9TZWxlY3QocG9ydCkpOworCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCWlmIChzLT50eXBlICE9IENPTUVESV9TVUJEX0RJTykKKwkJCXJldHVybiAtRUlOVkFMOworCQlwcml2YXRlKGRldiktPmRpb19kaXJlY3Rpb25bcG9ydF0gPSBDT01FRElfSU5QVVQ7CisJCXdyaXRlYigxLCBwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9TZWxlY3QocG9ydCkpOworCQlyZXR1cm4gMTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWlmIChzLT50eXBlICE9IENPTUVESV9TVUJEX0RJTykKKwkJCXJldHVybiAtRUlOVkFMOworCQlkYXRhWzFdID0gcHJpdmF0ZShkZXYpLT5kaW9fZGlyZWN0aW9uW3BvcnRdOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgYmFzZV9iaXRmaWVsZF9jaGFubmVsOworCWNvbnN0IHVuc2lnbmVkIG1heF9wb3J0c19wZXJfYml0ZmllbGQgPSA1OworCXVuc2lnbmVkIHJlYWRfYml0cyA9IDA7CisJdW5zaWduZWQgajsKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwliYXNlX2JpdGZpZWxkX2NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlmb3IgKGogPSAwOyBqIDwgbWF4X3BvcnRzX3Blcl9iaXRmaWVsZDsgKytqKSB7CisJCWNvbnN0IHVuc2lnbmVkIHBvcnQgPQorCQkJc3ByaXZhdGUocyktPmJhc2VfcG9ydCArCisJCQluaV82NXh4X3BvcnRfYnlfY2hhbm5lbChiYXNlX2JpdGZpZWxkX2NoYW5uZWwpICsgajsKKwkJdW5zaWduZWQgYmFzZV9wb3J0X2NoYW5uZWw7CisJCXVuc2lnbmVkIHBvcnRfbWFzaywgcG9ydF9kYXRhLCBwb3J0X3JlYWRfYml0czsKKwkJaW50IGJpdHNoaWZ0OworCQlpZiAocG9ydCA+PSBuaV82NXh4X3RvdGFsX251bV9wb3J0cyhib2FyZChkZXYpKSkKKwkJCWJyZWFrOworCQliYXNlX3BvcnRfY2hhbm5lbCA9IHBvcnQgKiBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0OworCQlwb3J0X21hc2sgPSBkYXRhWzBdOworCQlwb3J0X2RhdGEgPSBkYXRhWzFdOworCQliaXRzaGlmdCA9IGJhc2VfcG9ydF9jaGFubmVsIC0gYmFzZV9iaXRmaWVsZF9jaGFubmVsOworCQlpZiAoYml0c2hpZnQgPj0gMzIgfHwgYml0c2hpZnQgPD0gLTMyKQorCQkJYnJlYWs7CisJCWlmIChiaXRzaGlmdCA+IDApIHsKKwkJCXBvcnRfbWFzayA+Pj0gYml0c2hpZnQ7CisJCQlwb3J0X2RhdGEgPj49IGJpdHNoaWZ0OworCQl9IGVsc2UgeworCQkJcG9ydF9tYXNrIDw8PSAtYml0c2hpZnQ7CisJCQlwb3J0X2RhdGEgPDw9IC1iaXRzaGlmdDsKKwkJfQorCQlwb3J0X21hc2sgJj0gMHhmZjsKKwkJcG9ydF9kYXRhICY9IDB4ZmY7CisJCWlmIChwb3J0X21hc2spIHsKKwkJCXVuc2lnbmVkIGJpdHM7CisJCQlwcml2YXRlKGRldiktPm91dHB1dF9iaXRzW3BvcnRdICY9IH5wb3J0X21hc2s7CisJCQlwcml2YXRlKGRldiktPm91dHB1dF9iaXRzW3BvcnRdIHw9CisJCQkJcG9ydF9kYXRhICYgcG9ydF9tYXNrOworCQkJYml0cyA9IHByaXZhdGUoZGV2KS0+b3V0cHV0X2JpdHNbcG9ydF07CisJCQlpZiAoYm9hcmQoZGV2KS0+aW52ZXJ0X291dHB1dHMpCisJCQkJYml0cyA9IH5iaXRzOworCQkJd3JpdGViKGJpdHMsCisJCQkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJUG9ydF9EYXRhKHBvcnQpKTsKKy8vICAgICAgICAgICAgICAgICAgICAgIHJ0X3ByaW50aygid3JvdGUgMHgleCB0byBwb3J0ICVpXG4iLCBiaXRzLCBwb3J0KTsKKwkJfQorCQlwb3J0X3JlYWRfYml0cyA9CisJCQlyZWFkYihwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCVBvcnRfRGF0YShwb3J0KSk7CisvLyAgICAgICAgICAgICAgcnRfcHJpbnRrKCJyZWFkIDB4JXggZnJvbSBwb3J0ICVpXG4iLCBwb3J0X3JlYWRfYml0cywgcG9ydCk7CisJCWlmIChiaXRzaGlmdCA+IDApIHsKKwkJCXBvcnRfcmVhZF9iaXRzIDw8PSBiaXRzaGlmdDsKKwkJfSBlbHNlIHsKKwkJCXBvcnRfcmVhZF9iaXRzID4+PSAtYml0c2hpZnQ7CisJCX0KKwkJcmVhZF9iaXRzIHw9IHBvcnRfcmVhZF9iaXRzOworCX0KKwlkYXRhWzFdID0gcmVhZF9iaXRzOworCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbmlfNjV4eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHJlYWRiKHByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDaGFuZ2VfU3RhdHVzKTsKKwlpZiAoKHN0YXR1cyAmIE1hc3RlckludGVycnVwdFN0YXR1cykgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCWlmICgoc3RhdHVzICYgRWRnZVN0YXR1cykgPT0gMCkKKwkJcmV0dXJuIElSUV9OT05FOworCisJd3JpdGViKENsckVkZ2UgfCBDbHJPdmVyZmxvdywKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIENsZWFyX1JlZ2lzdGVyKTsKKworCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAwKTsKKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT1M7CisJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfaW50cl9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19PVEhFUjsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfRk9MTE9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gMSkgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCWNtZC0+c3RvcF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjV4eF9pbnRyX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCS8vc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJd3JpdGViKENsckVkZ2UgfCBDbHJPdmVyZmxvdywKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIENsZWFyX1JlZ2lzdGVyKTsKKwl3cml0ZWIoRmFsbGluZ0VkZ2VJbnRFbmFibGUgfCBSaXNpbmdFZGdlSW50RW5hYmxlIHwKKwkJTWFzdGVySW50ZXJydXB0RW5hYmxlIHwgRWRnZUludEVuYWJsZSwKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIE1hc3Rlcl9JbnRlcnJ1cHRfQ29udHJvbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV82NXh4X2ludHJfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJd3JpdGViKDB4MDAsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjV4eF9pbnRyX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSAwOworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfaW50cl9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YVswXSAhPSBJTlNOX0NPTkZJR19DSEFOR0VfTk9USUZZKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdyaXRlYihkYXRhWzFdLAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJUmlzaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgwKSk7CisJd3JpdGViKGRhdGFbMV0gPj4gOCwKKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArCisJCVJpc2luZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMHgxMCkpOworCXdyaXRlYihkYXRhWzFdID4+IDE2LAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJUmlzaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgweDIwKSk7CisJd3JpdGViKGRhdGFbMV0gPj4gMjQsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQlSaXNpbmdfRWRnZV9EZXRlY3Rpb25fRW5hYmxlKDB4MzApKTsKKworCXdyaXRlYihkYXRhWzJdLAorCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJRmFsbGluZ19FZGdlX0RldGVjdGlvbl9FbmFibGUoMCkpOworCXdyaXRlYihkYXRhWzJdID4+IDgsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQlGYWxsaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgweDEwKSk7CisJd3JpdGViKGRhdGFbMl0gPj4gMTYsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQlGYWxsaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgweDIwKSk7CisJd3JpdGViKGRhdGFbMl0gPj4gMjQsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQlGYWxsaW5nX0VkZ2VfRGV0ZWN0aW9uX0VuYWJsZSgweDMwKSk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBuaV82NXh4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBpOworCWludCByZXQ7CisKKwlwcmludGsoImNvbWVkaSVkOiBuaV82NXh4OiIsIGRldi0+bWlub3IpOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBuaV82NXh4X3ByaXZhdGUpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbmlfNjV4eF9maW5kX2RldmljZShkZXYsIGl0LT5vcHRpb25zWzBdLCBpdC0+b3B0aW9uc1sxXSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtaXRlX3NldHVwKHByaXZhdGUoZGV2KS0+bWl0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkKGRldiktPm5hbWU7CisJZGV2LT5pcnEgPSBtaXRlX2lycShwcml2YXRlKGRldiktPm1pdGUpOworCXByaW50aygiICVzIiwgZGV2LT5ib2FyZF9uYW1lKTsKKworCXByaW50aygiIElEPTB4JTAyeCIsCisJCXJlYWRiKHByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBJRF9SZWdpc3RlcikpOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWlmIChib2FyZChkZXYpLT5udW1fZGlfcG9ydHMpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJCXMtPm5fY2hhbiA9CisJCQlib2FyZChkZXYpLT5udW1fZGlfcG9ydHMgKiBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0OworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+aW5zbl9jb25maWcgPSBuaV82NXh4X2Rpb19pbnNuX2NvbmZpZzsKKwkJcy0+aW5zbl9iaXRzID0gbmlfNjV4eF9kaW9faW5zbl9iaXRzOworCQlzLT5wcml2YXRlID0gbmlfNjV4eF9hbGxvY19zdWJkZXZpY2VfcHJpdmF0ZSgpOworCQlpZiAocy0+cHJpdmF0ZSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXNwcml2YXRlKHMpLT5iYXNlX3BvcnQgPSAwOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJaWYgKGJvYXJkKGRldiktPm51bV9kb19wb3J0cykgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0KKwkJCWJvYXJkKGRldiktPm51bV9kb19wb3J0cyAqIG5pXzY1eHhfY2hhbm5lbHNfcGVyX3BvcnQ7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5pbnNuX2JpdHMgPSBuaV82NXh4X2Rpb19pbnNuX2JpdHM7CisJCXMtPnByaXZhdGUgPSBuaV82NXh4X2FsbG9jX3N1YmRldmljZV9wcml2YXRlKCk7CisJCWlmIChzLT5wcml2YXRlID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJc3ByaXZhdGUocyktPmJhc2VfcG9ydCA9IGJvYXJkKGRldiktPm51bV9kaV9wb3J0czsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCWlmIChib2FyZChkZXYpLT5udW1fZGlvX3BvcnRzKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0KKwkJCWJvYXJkKGRldiktPm51bV9kaW9fcG9ydHMgKiBuaV82NXh4X2NoYW5uZWxzX3Blcl9wb3J0OworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+aW5zbl9jb25maWcgPSBuaV82NXh4X2Rpb19pbnNuX2NvbmZpZzsKKwkJcy0+aW5zbl9iaXRzID0gbmlfNjV4eF9kaW9faW5zbl9iaXRzOworCQlzLT5wcml2YXRlID0gbmlfNjV4eF9hbGxvY19zdWJkZXZpY2VfcHJpdmF0ZSgpOworCQlpZiAocy0+cHJpdmF0ZSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXNwcml2YXRlKHMpLT5iYXNlX3BvcnQgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgYm9hcmQoZGV2KS0+bnVtX2Rpb19wb3J0czsgKytpKSB7CisJCQkvLyBjb25maWd1cmUgYWxsIHBvcnRzIGZvciBpbnB1dAorCQkJd3JpdGViKDB4MSwKKwkJCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlQb3J0X1NlbGVjdChpKSk7CisJCX0KKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfQ01EX1JFQUQ7CisJcy0+bl9jaGFuID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCXMtPm1heGRhdGEgPSAxOworCXMtPmRvX2NtZHRlc3QgPSBuaV82NXh4X2ludHJfY21kdGVzdDsKKwlzLT5kb19jbWQgPSBuaV82NXh4X2ludHJfY21kOworCXMtPmNhbmNlbCA9IG5pXzY1eHhfaW50cl9jYW5jZWw7CisJcy0+aW5zbl9iaXRzID0gbmlfNjV4eF9pbnRyX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IG5pXzY1eHhfaW50cl9pbnNuX2NvbmZpZzsKKworCWZvciAoaSA9IDA7IGkgPCBuaV82NXh4X3RvdGFsX251bV9wb3J0cyhib2FyZChkZXYpKTsgKytpKSB7CisJCXdyaXRlYigweDAwLAorCQkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIEZpbHRlcl9FbmFibGUoaSkpOworCQlpZiAoYm9hcmQoZGV2KS0+aW52ZXJ0X291dHB1dHMpCisJCQl3cml0ZWIoMHgwMSwKKwkJCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9EYXRhKGkpKTsKKwkJZWxzZQorCQkJd3JpdGViKDB4MDAsCisJCQkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfRGF0YShpKSk7CisJfQorCXdyaXRlYihDbHJFZGdlIHwgQ2xyT3ZlcmZsb3csCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDbGVhcl9SZWdpc3Rlcik7CisJd3JpdGViKDB4MDAsCisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfSW50ZXJydXB0X0NvbnRyb2wpOworCisJLyogU2V0IGZpbHRlciBpbnRlcnZhbCB0byAwICAoMzJiaXQgcmVnKSAqLworCXdyaXRlYigweDAwMDAwMDAwLCBwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgRmlsdGVyX0ludGVydmFsKTsKKworCXJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShkZXYtPmlycSwgbmlfNjV4eF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkibmlfNjV4eCIsIGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2LT5pcnEgPSAwOworCQlwcmludGsoIiBpcnEgbm90IGF2YWlsYWJsZSIpOworCX0KKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWlmIChwcml2YXRlKGRldikgJiYgcHJpdmF0ZShkZXYpLT5taXRlCisJCSYmIHByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIpIHsKKwkJd3JpdGViKDB4MDAsCisJCQlwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCU1hc3Rlcl9JbnRlcnJ1cHRfQ29udHJvbCk7CisJfQorCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisKKwlpZiAocHJpdmF0ZShkZXYpKSB7CisJCXVuc2lnbmVkIGk7CisJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgKytpKSB7CisJCQlpZiAoZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUpIHsKKwkJCQlrZnJlZShkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZSk7CisJCQkJZGV2LT5zdWJkZXZpY2VzW2ldLnByaXZhdGUgPSBOVUxMOworCQkJfQorCQl9CisJCWlmIChwcml2YXRlKGRldiktPm1pdGUpIHsKKwkJCW1pdGVfdW5zZXR1cChwcml2YXRlKGRldiktPm1pdGUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY1eHhfZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KQoreworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlpbnQgaTsKKworCWZvciAobWl0ZSA9IG1pdGVfZGV2aWNlczsgbWl0ZTsgbWl0ZSA9IG1pdGUtPm5leHQpIHsKKwkJaWYgKG1pdGUtPnVzZWQpCisJCQljb250aW51ZTsKKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IG1pdGUtPnBjaWRldi0+YnVzLT5udW1iZXIgfHwKKwkJCQlzbG90ICE9IFBDSV9TTE9UKG1pdGUtPnBjaWRldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBuX25pXzY1eHhfYm9hcmRzOyBpKyspIHsKKwkJCWlmIChtaXRlX2RldmljZV9pZChtaXRlKSA9PSBuaV82NXh4X2JvYXJkc1tpXS5kZXZfaWQpIHsKKwkJCQlkZXYtPmJvYXJkX3B0ciA9IG5pXzY1eHhfYm9hcmRzICsgaTsKKwkJCQlwcml2YXRlKGRldiktPm1pdGUgPSBtaXRlOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwltaXRlX2xpc3RfZGV2aWNlcygpOworCXJldHVybiAtRUlPOworfQorCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9uaV82NXh4LCBuaV82NXh4X3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGUzNWJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYwpAQCAtMCwwICsxLDEzMjQgQEAKKy8qCisgIGNvbWVkaS9kcml2ZXJzL25pXzY2MHguYworICBIYXJkd2FyZSBkcml2ZXIgZm9yIE5JIDY2MHggZGV2aWNlcworCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKy8qCitEcml2ZXI6IG5pXzY2MHgKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyA2NjB4IGNvdW50ZXIvdGltZXIgYm9hcmRzCitEZXZpY2VzOgorW05hdGlvbmFsIEluc3RydW1lbnRzXSBQQ0ktNjYwMSAobmlfNjYweCksIFBDSS02NjAyLCBQWEktNjYwMiwKKwlQWEktNjYwOAorQXV0aG9yOiBKLlAuIE1lbGxvciA8anBtZWxsb3JAcm9zZS1odWxtYW4uZWR1PiwKKwlIZXJtYW4uQnJ1eW5pbmNreEBtZWNoLmt1bGV1dmVuLmFjLmJlLAorCVdpbS5NZWV1c3NlbkBtZWNoLmt1bGV1dmVuLmFjLmJlLAorCUtsYWFzLkdhZGV5bmVAbWVjaC5rdWxldXZlbi5hYy5iZSwKKwlGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitVcGRhdGVkOiBUaHUgT2N0IDE4IDEyOjU2OjA2IEVEVCAyMDA3CitTdGF0dXM6IGV4cGVyaW1lbnRhbAorCitFbmNvZGVycyB3b3JrLiAgUHVsc2VHZW5lcmF0aW9uIChib3RoIHNpbmdsZSBwdWxzZSBhbmQgcHVsc2UgdHJhaW4pCit3b3Jrcy4gQnVmZmVyZWQgY29tbWFuZHMgd29yayBmb3IgaW5wdXQgYnV0IG5vdCBvdXRwdXQuCisKK1JlZmVyZW5jZXM6CitEQVEgNjYweCBSZWdpc3Rlci1MZXZlbCBQcm9ncmFtbWVyIE1hbnVhbCAgKE5JIDM3MDUwNUEtMDEpCitEQVEgNjYwMS82NjAyIFVzZXIgTWFudWFsIChOSSAzMjIxMzdCLTAxKQorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSAibWl0ZS5oIgorI2luY2x1ZGUgIm5pX3Rpby5oIgorCitlbnVtIG5pXzY2MHhfY29uc3RhbnRzIHsKKwltaW5fY291bnRlcl9wZmlfY2hhbiA9IDgsCisJbWF4X2Rpb19wZmlfY2hhbiA9IDMxLAorCWNvdW50ZXJzX3Blcl9jaGlwID0gNAorfTsKKworI2RlZmluZSBOVU1fUEZJX0NIQU5ORUxTIDQwCisvLyByZWFsbHkgdGhlcmUgYXJlIG9ubHkgdXAgdG8gMyBkbWEgY2hhbm5lbHMsIGJ1dCB0aGUgcmVnaXN0ZXIgbGF5b3V0IGFsbG93cyBmb3IgNAorI2RlZmluZSBNQVhfRE1BX0NIQU5ORUwgNAorCisvKiBTZWUgUmVnaXN0ZXItTGV2ZWwgUHJvZ3JhbW1lciBNYW51YWwgcGFnZSAzLjEgKi8KK2VudW0gTklfNjYweF9SZWdpc3RlciB7CisJRzBJbnRlcnJ1cHRBY2tub3dsZWRnZSwKKwlHMFN0YXR1c1JlZ2lzdGVyLAorCUcxSW50ZXJydXB0QWNrbm93bGVkZ2UsCisJRzFTdGF0dXNSZWdpc3RlciwKKwlHMDFTdGF0dXNSZWdpc3RlciwKKwlHMENvbW1hbmRSZWdpc3RlciwKKwlTVENESU9QYXJhbGxlbElucHV0LAorCUcxQ29tbWFuZFJlZ2lzdGVyLAorCUcwSFdTYXZlUmVnaXN0ZXIsCisJRzFIV1NhdmVSZWdpc3RlciwKKwlTVENESU9PdXRwdXQsCisJU1RDRElPQ29udHJvbCwKKwlHMFNXU2F2ZVJlZ2lzdGVyLAorCUcxU1dTYXZlUmVnaXN0ZXIsCisJRzBNb2RlUmVnaXN0ZXIsCisJRzAxSm9pbnRTdGF0dXMxUmVnaXN0ZXIsCisJRzFNb2RlUmVnaXN0ZXIsCisJU1RDRElPU2VyaWFsSW5wdXQsCisJRzBMb2FkQVJlZ2lzdGVyLAorCUcwMUpvaW50U3RhdHVzMlJlZ2lzdGVyLAorCUcwTG9hZEJSZWdpc3RlciwKKwlHMUxvYWRBUmVnaXN0ZXIsCisJRzFMb2FkQlJlZ2lzdGVyLAorCUcwSW5wdXRTZWxlY3RSZWdpc3RlciwKKwlHMUlucHV0U2VsZWN0UmVnaXN0ZXIsCisJRzBBdXRvaW5jcmVtZW50UmVnaXN0ZXIsCisJRzFBdXRvaW5jcmVtZW50UmVnaXN0ZXIsCisJRzAxSm9pbnRSZXNldFJlZ2lzdGVyLAorCUcwSW50ZXJydXB0RW5hYmxlLAorCUcxSW50ZXJydXB0RW5hYmxlLAorCUcwQ291bnRpbmdNb2RlUmVnaXN0ZXIsCisJRzFDb3VudGluZ01vZGVSZWdpc3RlciwKKwlHMFNlY29uZEdhdGVSZWdpc3RlciwKKwlHMVNlY29uZEdhdGVSZWdpc3RlciwKKwlHMERNQUNvbmZpZ1JlZ2lzdGVyLAorCUcwRE1BU3RhdHVzUmVnaXN0ZXIsCisJRzFETUFDb25maWdSZWdpc3RlciwKKwlHMURNQVN0YXR1c1JlZ2lzdGVyLAorCUcySW50ZXJydXB0QWNrbm93bGVkZ2UsCisJRzJTdGF0dXNSZWdpc3RlciwKKwlHM0ludGVycnVwdEFja25vd2xlZGdlLAorCUczU3RhdHVzUmVnaXN0ZXIsCisJRzIzU3RhdHVzUmVnaXN0ZXIsCisJRzJDb21tYW5kUmVnaXN0ZXIsCisJRzNDb21tYW5kUmVnaXN0ZXIsCisJRzJIV1NhdmVSZWdpc3RlciwKKwlHM0hXU2F2ZVJlZ2lzdGVyLAorCUcyU1dTYXZlUmVnaXN0ZXIsCisJRzNTV1NhdmVSZWdpc3RlciwKKwlHMk1vZGVSZWdpc3RlciwKKwlHMjNKb2ludFN0YXR1czFSZWdpc3RlciwKKwlHM01vZGVSZWdpc3RlciwKKwlHMkxvYWRBUmVnaXN0ZXIsCisJRzIzSm9pbnRTdGF0dXMyUmVnaXN0ZXIsCisJRzJMb2FkQlJlZ2lzdGVyLAorCUczTG9hZEFSZWdpc3RlciwKKwlHM0xvYWRCUmVnaXN0ZXIsCisJRzJJbnB1dFNlbGVjdFJlZ2lzdGVyLAorCUczSW5wdXRTZWxlY3RSZWdpc3RlciwKKwlHMkF1dG9pbmNyZW1lbnRSZWdpc3RlciwKKwlHM0F1dG9pbmNyZW1lbnRSZWdpc3RlciwKKwlHMjNKb2ludFJlc2V0UmVnaXN0ZXIsCisJRzJJbnRlcnJ1cHRFbmFibGUsCisJRzNJbnRlcnJ1cHRFbmFibGUsCisJRzJDb3VudGluZ01vZGVSZWdpc3RlciwKKwlHM0NvdW50aW5nTW9kZVJlZ2lzdGVyLAorCUczU2Vjb25kR2F0ZVJlZ2lzdGVyLAorCUcyU2Vjb25kR2F0ZVJlZ2lzdGVyLAorCUcyRE1BQ29uZmlnUmVnaXN0ZXIsCisJRzJETUFTdGF0dXNSZWdpc3RlciwKKwlHM0RNQUNvbmZpZ1JlZ2lzdGVyLAorCUczRE1BU3RhdHVzUmVnaXN0ZXIsCisJRElPMzJJbnB1dCwKKwlESU8zMk91dHB1dCwKKwlDbG9ja0NvbmZpZ1JlZ2lzdGVyLAorCUdsb2JhbEludGVycnVwdFN0YXR1c1JlZ2lzdGVyLAorCURNQUNvbmZpZ1JlZ2lzdGVyLAorCUdsb2JhbEludGVycnVwdENvbmZpZ1JlZ2lzdGVyLAorCUlPQ29uZmlnUmVnMF8xLAorCUlPQ29uZmlnUmVnMl8zLAorCUlPQ29uZmlnUmVnNF81LAorCUlPQ29uZmlnUmVnNl83LAorCUlPQ29uZmlnUmVnOF85LAorCUlPQ29uZmlnUmVnMTBfMTEsCisJSU9Db25maWdSZWcxMl8xMywKKwlJT0NvbmZpZ1JlZzE0XzE1LAorCUlPQ29uZmlnUmVnMTZfMTcsCisJSU9Db25maWdSZWcxOF8xOSwKKwlJT0NvbmZpZ1JlZzIwXzIxLAorCUlPQ29uZmlnUmVnMjJfMjMsCisJSU9Db25maWdSZWcyNF8yNSwKKwlJT0NvbmZpZ1JlZzI2XzI3LAorCUlPQ29uZmlnUmVnMjhfMjksCisJSU9Db25maWdSZWczMF8zMSwKKwlJT0NvbmZpZ1JlZzMyXzMzLAorCUlPQ29uZmlnUmVnMzRfMzUsCisJSU9Db25maWdSZWczNl8zNywKKwlJT0NvbmZpZ1JlZzM4XzM5LAorCU51bVJlZ2lzdGVycywKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgSU9Db25maWdSZWcodW5zaWduZWQgcGZpX2NoYW5uZWwpCit7CisJdW5zaWduZWQgcmVnID0gSU9Db25maWdSZWcwXzEgKyBwZmlfY2hhbm5lbCAvIDI7CisJQlVHX09OKHJlZyA+IElPQ29uZmlnUmVnMzhfMzkpOworCXJldHVybiByZWc7Cit9CisKK2VudW0gbmlfNjYweF9yZWdpc3Rlcl93aWR0aCB7CisJREFUQV8xQiwKKwlEQVRBXzJCLAorCURBVEFfNEIKK307CisKK2VudW0gbmlfNjYweF9yZWdpc3Rlcl9kaXJlY3Rpb24geworCU5JXzY2MHhfUkVBRCwKKwlOSV82NjB4X1dSSVRFLAorCU5JXzY2MHhfUkVBRF9XUklURQorfTsKKworZW51bSBuaV82NjB4X3BmaV9vdXRwdXRfc2VsZWN0IHsKKwlwZmlfb3V0cHV0X3NlbGVjdF9oaWdoX1ogPSAwLAorCXBmaV9vdXRwdXRfc2VsZWN0X2NvdW50ZXIgPSAxLAorCXBmaV9vdXRwdXRfc2VsZWN0X2RvID0gMiwKKwludW1fcGZpX291dHB1dF9zZWxlY3RzCit9OworCitlbnVtIG5pXzY2MHhfc3ViZGV2aWNlcyB7CisJTklfNjYwWF9ESU9fU1VCREVWID0gMSwKKwlOSV82NjBYX0dQQ1RfU1VCREVWXzAgPSAyCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBOSV82NjBYX0dQQ1RfU1VCREVWKHVuc2lnbmVkIGluZGV4KQoreworCXJldHVybiBOSV82NjBYX0dQQ1RfU1VCREVWXzAgKyBpbmRleDsKK30KKworc3RydWN0IE5JXzY2MHhSZWdpc3RlckRhdGEgeworCisJY29uc3QgY2hhciAqbmFtZTsJLy8gUmVnaXN0ZXIgTmFtZQorCWludCBvZmZzZXQ7CQkvLyBPZmZzZXQgZnJvbSBiYXNlIGFkZHJlc3MgZnJvbSBHUENUIGNoaXAKKwllbnVtIG5pXzY2MHhfcmVnaXN0ZXJfZGlyZWN0aW9uIGRpcmVjdGlvbjsKKwllbnVtIG5pXzY2MHhfcmVnaXN0ZXJfd2lkdGggc2l6ZTsJLy8gMSBieXRlLCAyIGJ5dGVzLCBvciA0IGJ5dGVzCit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgTklfNjYweFJlZ2lzdGVyRGF0YSByZWdpc3RlckRhdGFbTnVtUmVnaXN0ZXJzXSA9IHsKKwl7IkcwIEludGVycnVwdCBBY2tub3dsZWRnZSIsIDB4MDA0LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcwIFN0YXR1cyBSZWdpc3RlciIsIDB4MDA0LCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzEgSW50ZXJydXB0IEFja25vd2xlZGdlIiwgMHgwMDYsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzEgU3RhdHVzIFJlZ2lzdGVyIiwgMHgwMDYsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMDEgU3RhdHVzIFJlZ2lzdGVyICIsIDB4MDA4LCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzAgQ29tbWFuZCBSZWdpc3RlciIsIDB4MDBDLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IlNUQyBESU8gUGFyYWxsZWwgSW5wdXQiLCAweDAwRSwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkcxIENvbW1hbmQgUmVnaXN0ZXIiLCAweDAwRSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMCBIVyBTYXZlIFJlZ2lzdGVyIiwgMHgwMTAsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJHMSBIVyBTYXZlIFJlZ2lzdGVyIiwgMHgwMTQsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJTVEMgRElPIE91dHB1dCIsIDB4MDE0LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IlNUQyBESU8gQ29udHJvbCIsIDB4MDE2LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcwIFNXIFNhdmUgUmVnaXN0ZXIiLCAweDAxOCwgTklfNjYweF9SRUFELCBEQVRBXzRCfSwKKwl7IkcxIFNXIFNhdmUgUmVnaXN0ZXIiLCAweDAxQywgTklfNjYweF9SRUFELCBEQVRBXzRCfSwKKwl7IkcwIE1vZGUgUmVnaXN0ZXIiLCAweDAzNCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMDEgSm9pbnQgU3RhdHVzIDEgUmVnaXN0ZXIiLCAweDAzNiwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkcxIE1vZGUgUmVnaXN0ZXIiLCAweDAzNiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJTVEMgRElPIFNlcmlhbCBJbnB1dCIsIDB4MDM4LCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzAgTG9hZCBBIFJlZ2lzdGVyIiwgMHgwMzgsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiRzAxIEpvaW50IFN0YXR1cyAyIFJlZ2lzdGVyIiwgMHgwM0EsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMCBMb2FkIEIgUmVnaXN0ZXIiLCAweDAzQywgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJHMSBMb2FkIEEgUmVnaXN0ZXIiLCAweDA0MCwgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJHMSBMb2FkIEIgUmVnaXN0ZXIiLCAweDA0NCwgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJHMCBJbnB1dCBTZWxlY3QgUmVnaXN0ZXIiLCAweDA0OCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMSBJbnB1dCBTZWxlY3QgUmVnaXN0ZXIiLCAweDA0QSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMCBBdXRvaW5jcmVtZW50IFJlZ2lzdGVyIiwgMHgwODgsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzEgQXV0b2luY3JlbWVudCBSZWdpc3RlciIsIDB4MDhBLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcwMSBKb2ludCBSZXNldCBSZWdpc3RlciIsIDB4MDkwLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcwIEludGVycnVwdCBFbmFibGUiLCAweDA5MiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMSBJbnRlcnJ1cHQgRW5hYmxlIiwgMHgwOTYsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzAgQ291bnRpbmcgTW9kZSBSZWdpc3RlciIsIDB4MEIwLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcxIENvdW50aW5nIE1vZGUgUmVnaXN0ZXIiLCAweDBCMiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMCBTZWNvbmQgR2F0ZSBSZWdpc3RlciIsIDB4MEI0LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcxIFNlY29uZCBHYXRlIFJlZ2lzdGVyIiwgMHgwQjYsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzAgRE1BIENvbmZpZyBSZWdpc3RlciIsIDB4MEI4LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcwIERNQSBTdGF0dXMgUmVnaXN0ZXIiLCAweDBCOCwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkcxIERNQSBDb25maWcgUmVnaXN0ZXIiLCAweDBCQSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMSBETUEgU3RhdHVzIFJlZ2lzdGVyIiwgMHgwQkEsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMiBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UiLCAweDEwNCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMiBTdGF0dXMgUmVnaXN0ZXIiLCAweDEwNCwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkczIEludGVycnVwdCBBY2tub3dsZWRnZSIsIDB4MTA2LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkczIFN0YXR1cyBSZWdpc3RlciIsIDB4MTA2LCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzIzIFN0YXR1cyBSZWdpc3RlciIsIDB4MTA4LCBOSV82NjB4X1JFQUQsIERBVEFfMkJ9LAorCXsiRzIgQ29tbWFuZCBSZWdpc3RlciIsIDB4MTBDLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkczIENvbW1hbmQgUmVnaXN0ZXIiLCAweDEwRSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMiBIVyBTYXZlIFJlZ2lzdGVyIiwgMHgxMTAsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJHMyBIVyBTYXZlIFJlZ2lzdGVyIiwgMHgxMTQsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJHMiBTVyBTYXZlIFJlZ2lzdGVyIiwgMHgxMTgsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJHMyBTVyBTYXZlIFJlZ2lzdGVyIiwgMHgxMUMsIE5JXzY2MHhfUkVBRCwgREFUQV80Qn0sCisJeyJHMiBNb2RlIFJlZ2lzdGVyIiwgMHgxMzQsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzIzIEpvaW50IFN0YXR1cyAxIFJlZ2lzdGVyIiwgMHgxMzYsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMyBNb2RlIFJlZ2lzdGVyIiwgMHgxMzYsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzIgTG9hZCBBIFJlZ2lzdGVyIiwgMHgxMzgsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiRzIzIEpvaW50IFN0YXR1cyAyIFJlZ2lzdGVyIiwgMHgxM0EsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyJHMiBMb2FkIEIgUmVnaXN0ZXIiLCAweDEzQywgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJHMyBMb2FkIEEgUmVnaXN0ZXIiLCAweDE0MCwgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJHMyBMb2FkIEIgUmVnaXN0ZXIiLCAweDE0NCwgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJHMiBJbnB1dCBTZWxlY3QgUmVnaXN0ZXIiLCAweDE0OCwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMyBJbnB1dCBTZWxlY3QgUmVnaXN0ZXIiLCAweDE0QSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMiBBdXRvaW5jcmVtZW50IFJlZ2lzdGVyIiwgMHgxODgsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzMgQXV0b2luY3JlbWVudCBSZWdpc3RlciIsIDB4MThBLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcyMyBKb2ludCBSZXNldCBSZWdpc3RlciIsIDB4MTkwLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcyIEludGVycnVwdCBFbmFibGUiLCAweDE5MiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMyBJbnRlcnJ1cHQgRW5hYmxlIiwgMHgxOTYsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzIgQ291bnRpbmcgTW9kZSBSZWdpc3RlciIsIDB4MUIwLCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkczIENvdW50aW5nIE1vZGUgUmVnaXN0ZXIiLCAweDFCMiwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMyBTZWNvbmQgR2F0ZSBSZWdpc3RlciIsIDB4MUI2LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcyIFNlY29uZCBHYXRlIFJlZ2lzdGVyIiwgMHgxQjQsIE5JXzY2MHhfV1JJVEUsIERBVEFfMkJ9LAorCXsiRzIgRE1BIENvbmZpZyBSZWdpc3RlciIsIDB4MUI4LCBOSV82NjB4X1dSSVRFLCBEQVRBXzJCfSwKKwl7IkcyIERNQSBTdGF0dXMgUmVnaXN0ZXIiLCAweDFCOCwgTklfNjYweF9SRUFELCBEQVRBXzJCfSwKKwl7IkczIERNQSBDb25maWcgUmVnaXN0ZXIiLCAweDFCQSwgTklfNjYweF9XUklURSwgREFUQV8yQn0sCisJeyJHMyBETUEgU3RhdHVzIFJlZ2lzdGVyIiwgMHgxQkEsIE5JXzY2MHhfUkVBRCwgREFUQV8yQn0sCisJeyIzMiBiaXQgRGlnaXRhbCBJbnB1dCIsIDB4NDE0LCBOSV82NjB4X1JFQUQsIERBVEFfNEJ9LAorCXsiMzIgYml0IERpZ2l0YWwgT3V0cHV0IiwgMHg1MTAsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiQ2xvY2sgQ29uZmlnIFJlZ2lzdGVyIiwgMHg3M0MsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiR2xvYmFsIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIiLCAweDc1NCwgTklfNjYweF9SRUFELCBEQVRBXzRCfSwKKwl7IkRNQSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIiwgMHg3NkMsIE5JXzY2MHhfV1JJVEUsIERBVEFfNEJ9LAorCXsiR2xvYmFsIEludGVycnVwdCBDb25maWcgUmVnaXN0ZXIiLCAweDc3MCwgTklfNjYweF9XUklURSwgREFUQV80Qn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMC0xIiwgMHg3N0MsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMi0zIiwgMHg3N0UsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgNC01IiwgMHg3ODAsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgNi03IiwgMHg3ODIsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgOC05IiwgMHg3ODQsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMTAtMTEiLCAweDc4NiwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAxMi0xMyIsIDB4Nzg4LCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDE0LTE1IiwgMHg3OEEsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMTYtMTciLCAweDc4QywgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAxOC0xOSIsIDB4NzhFLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDIwLTIxIiwgMHg3OTAsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMjItMjMiLCAweDc5MiwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAyNC0yNSIsIDB4Nzk0LCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDI2LTI3IiwgMHg3OTYsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMjgtMjkiLCAweDc5OCwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAzMC0zMSIsIDB4NzlBLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDMyLTMzIiwgMHg3OUMsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0sCisJeyJJTyBDb25maWcgUmVnaXN0ZXIgMzQtMzUiLCAweDc5RSwgTklfNjYweF9SRUFEX1dSSVRFLCBEQVRBXzJCfSwKKwl7IklPIENvbmZpZyBSZWdpc3RlciAzNi0zNyIsIDB4N0EwLCBOSV82NjB4X1JFQURfV1JJVEUsIERBVEFfMkJ9LAorCXsiSU8gQ29uZmlnIFJlZ2lzdGVyIDM4LTM5IiwgMHg3QTIsIE5JXzY2MHhfUkVBRF9XUklURSwgREFUQV8yQn0KK307CisKKy8vIGtpbmQgb2YgRU5BQkxFIGZvciB0aGUgc2Vjb25kIGNvdW50ZXIKK2VudW0gY2xvY2tfY29uZmlnX3JlZ2lzdGVyX2JpdHMgeworCUNvdW50ZXJTd2FwID0gMHgxIDw8IDIxCit9OworCisvLyBpb2NvbmZpZ3JlZworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpb2NvbmZpZ19iaXRzaGlmdCh1bnNpZ25lZCBwZmlfY2hhbm5lbCkKK3sKKwlpZiAocGZpX2NoYW5uZWwgJSAyKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiA4OworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwZmlfb3V0cHV0X3NlbGVjdF9tYXNrKHVuc2lnbmVkIHBmaV9jaGFubmVsKQoreworCXJldHVybiAweDMgPDwgaW9jb25maWdfYml0c2hpZnQocGZpX2NoYW5uZWwpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwZmlfb3V0cHV0X3NlbGVjdF9iaXRzKHVuc2lnbmVkIHBmaV9jaGFubmVsLAorCXVuc2lnbmVkIG91dHB1dF9zZWxlY3QpCit7CisJcmV0dXJuIChvdXRwdXRfc2VsZWN0ICYgMHgzKSA8PCBpb2NvbmZpZ19iaXRzaGlmdChwZmlfY2hhbm5lbCk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHBmaV9pbnB1dF9zZWxlY3RfbWFzayh1bnNpZ25lZCBwZmlfY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHg3IDw8ICg0ICsgaW9jb25maWdfYml0c2hpZnQocGZpX2NoYW5uZWwpKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcGZpX2lucHV0X3NlbGVjdF9iaXRzKHVuc2lnbmVkIHBmaV9jaGFubmVsLAorCXVuc2lnbmVkIGlucHV0X3NlbGVjdCkKK3sKKwlyZXR1cm4gKGlucHV0X3NlbGVjdCAmIDB4NykgPDwgKDQgKyBpb2NvbmZpZ19iaXRzaGlmdChwZmlfY2hhbm5lbCkpOworfQorCisvLyBkbWEgY29uZmlndXJhdGlvbiByZWdpc3RlciBiaXRzCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRtYV9zZWxlY3RfbWFzayh1bnNpZ25lZCBkbWFfY2hhbm5lbCkKK3sKKwlCVUdfT04oZG1hX2NoYW5uZWwgPj0gTUFYX0RNQV9DSEFOTkVMKTsKKwlyZXR1cm4gMHgxZiA8PCAoOCAqIGRtYV9jaGFubmVsKTsKK30KK2VudW0gZG1hX3NlbGVjdGlvbiB7CisJZG1hX3NlbGVjdGlvbl9ub25lID0gMHgxZiwKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRtYV9zZWxlY3Rpb25fY291bnRlcih1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCUJVR19PTihjb3VudGVyX2luZGV4ID49IGNvdW50ZXJzX3Blcl9jaGlwKTsKKwlyZXR1cm4gY291bnRlcl9pbmRleDsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZG1hX3NlbGVjdF9iaXRzKHVuc2lnbmVkIGRtYV9jaGFubmVsLCB1bnNpZ25lZCBzZWxlY3Rpb24pCit7CisJQlVHX09OKGRtYV9jaGFubmVsID49IE1BWF9ETUFfQ0hBTk5FTCk7CisJcmV0dXJuIChzZWxlY3Rpb24gPDwgKDggKiBkbWFfY2hhbm5lbCkpICYgZG1hX3NlbGVjdF9tYXNrKGRtYV9jaGFubmVsKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZG1hX3Jlc2V0X2JpdCh1bnNpZ25lZCBkbWFfY2hhbm5lbCkKK3sKKwlCVUdfT04oZG1hX2NoYW5uZWwgPj0gTUFYX0RNQV9DSEFOTkVMKTsKKwlyZXR1cm4gMHg4MCA8PCAoOCAqIGRtYV9jaGFubmVsKTsKK30KKworZW51bSBnbG9iYWxfaW50ZXJydXB0X3N0YXR1c19yZWdpc3Rlcl9iaXRzIHsKKwlDb3VudGVyXzBfSW50X0JpdCA9IDB4MTAwLAorCUNvdW50ZXJfMV9JbnRfQml0ID0gMHgyMDAsCisJQ291bnRlcl8yX0ludF9CaXQgPSAweDQwMCwKKwlDb3VudGVyXzNfSW50X0JpdCA9IDB4ODAwLAorCUNhc2NhZGVfSW50X0JpdCA9IDB4MjAwMDAwMDAsCisJR2xvYmFsX0ludF9CaXQgPSAweDgwMDAwMDAwCit9OworCitlbnVtIGdsb2JhbF9pbnRlcnJ1cHRfY29uZmlnX3JlZ2lzdGVyX2JpdHMgeworCUNhc2NhZGVfSW50X0VuYWJsZV9CaXQgPSAweDIwMDAwMDAwLAorCUdsb2JhbF9JbnRfUG9sYXJpdHlfQml0ID0gMHg0MDAwMDAwMCwKKwlHbG9iYWxfSW50X0VuYWJsZV9CaXQgPSAweDgwMDAwMDAwCit9OworCisvLyBPZmZzZXQgb2YgdGhlIEdQQ1QgY2hpcHMgZnJvbSB0aGUgYmFzZS1hZHJlc3Mgb2YgdGhlIGNhcmQKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBHUENUX09GRlNFVFsyXSA9IHsgMHgwLCAweDgwMCB9OwkvKiBGaXJzdCBjaGlwIGlzIGF0IGJhc2UtYWRkcmVzcyArCisJCQkJCQkJICAgMHgwMCwgZXRjLiAqLworCisvKiBCb2FyZCBkZXNjcmlwdGlvbiovCitzdHJ1Y3QgbmlfNjYweF9ib2FyZCB7CisJdW5zaWduZWQgc2hvcnQgZGV2X2lkOwkvKiBgbHNwY2lgIHdpbGwgc2hvdyB5b3UgdGhpcyAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbl9jaGlwczsJLyogdG90YWwgbnVtYmVyIG9mIFRJTyBjaGlwcyAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuaV82NjB4X2JvYXJkIG5pXzY2MHhfYm9hcmRzW10gPSB7CisJeworCSAgICAgIGRldl9pZDoJMHgyYzYwLAorCSAgICAgIG5hbWU6CSJQQ0ktNjYwMSIsCisJICAgICAgbl9jaGlwczoJMSwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDEzMTAsCisJICAgICAgbmFtZToJIlBDSS02NjAyIiwKKwkgICAgICBuX2NoaXBzOgkyLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MTM2MCwKKwkgICAgICBuYW1lOgkiUFhJLTY2MDIiLAorCSAgICAgIG5fY2hpcHM6CTIsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHgyY2MwLAorCSAgICAgIG5hbWU6CSJQWEktNjYwOCIsCisJICAgICAgbl9jaGlwczoJMiwKKwkJfSwKK307CisKKyNkZWZpbmUgTklfNjYwWF9NQVhfTlVNX0NISVBTIDIKKyNkZWZpbmUgTklfNjYwWF9NQVhfTlVNX0NPVU5URVJTIChOSV82NjBYX01BWF9OVU1fQ0hJUFMgKiBjb3VudGVyc19wZXJfY2hpcCkKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5pXzY2MHhfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJjNjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTMxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMzYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJjYzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG5pXzY2MHhfcGNpX3RhYmxlKTsKKworc3RydWN0IG5pXzY2MHhfcHJpdmF0ZSB7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXY7CisJdWludDY0X3QgcGZpX2RpcmVjdGlvbl9iaXRzOworCXN0cnVjdCBtaXRlX2RtYV9kZXNjcmlwdG9yX3JpbmcKKwkqbWl0ZV9yaW5nc1tOSV82NjBYX01BWF9OVU1fQ0hJUFNdW2NvdW50ZXJzX3Blcl9jaGlwXTsKKwlzcGlubG9ja190IG1pdGVfY2hhbm5lbF9sb2NrOworCXVuc2lnbmVkIGRtYV9jb25maWd1cmF0aW9uX3NvZnRfY29waWVzW05JXzY2MFhfTUFYX05VTV9DSElQU107CisJc3BpbmxvY2tfdCBzb2Z0X3JlZ19jb3B5X2xvY2s7CisJdW5zaWduZWQgc2hvcnQgcGZpX291dHB1dF9zZWxlY3RzW05VTV9QRklfQ0hBTk5FTFNdOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlfNjYweF9wcml2YXRlICpwcml2YXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXJldHVybiBkZXYtPnByaXZhdGU7Cit9CisKKy8qIGluaXRpYWxpemVkIGluIG5pXzY2MHhfZmluZF9kZXZpY2UoKSAqLworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbmlfNjYweF9ib2FyZCAqYm9hcmQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIGRldi0+Ym9hcmRfcHRyOworfQorCisjZGVmaW5lIG5fbmlfNjYweF9ib2FyZHMgKHNpemVvZihuaV82NjB4X2JvYXJkcykvc2l6ZW9mKG5pXzY2MHhfYm9hcmRzWzBdKSkKKworc3RhdGljIGludCBuaV82NjB4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG5pXzY2MHhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB2b2lkIGluaXRfdGlvX2NoaXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGlwc2V0KTsKK3N0YXRpYyB2b2lkIG5pXzY2MHhfc2VsZWN0X3BmaV9vdXRwdXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHBmaV9jaGFubmVsLAorCXVuc2lnbmVkIG91dHB1dF9zZWxlY3QpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX25pXzY2MHggPSB7CisgICAgICBkcml2ZXJfbmFtZToibmlfNjYweCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6bmlfNjYweF9hdHRhY2gsCisgICAgICBkZXRhY2g6bmlfNjYweF9kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9uaV82NjB4LCBuaV82NjB4X3BjaV90YWJsZSk7CisKK3N0YXRpYyBpbnQgbmlfNjYweF9maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpOworc3RhdGljIGludCBuaV82NjB4X3NldF9wZmlfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbiwKKwl1bnNpZ25lZCBzb3VyY2UpOworCisvKiBQb3NzaWJsZSBpbnN0cnVjdGlvbnMgZm9yIGEgR1BDVCAqLworc3RhdGljIGludCBuaV82NjB4X0dQQ1Rfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfNjYweF9HUENUX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pXzY2MHhfR1BDVF93aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKiBQb3NzaWJsZSBpbnN0cnVjdGlvbnMgZm9yIERpZ2l0YWwgSU8gKi8KK3N0YXRpYyBpbnQgbmlfNjYweF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfNjYweF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmlfNjYweF9udW1fY291bnRlcnMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcmV0dXJuIGJvYXJkKGRldiktPm5fY2hpcHMgKiBjb3VudGVyc19wZXJfY2hpcDsKK30KKworc3RhdGljIGVudW0gTklfNjYweF9SZWdpc3RlciBuaV9ncGN0X3RvXzY2MHhfcmVnaXN0ZXIoZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZykKK3sKKwllbnVtIE5JXzY2MHhfUmVnaXN0ZXIgbmlfNjYweF9yZWdpc3RlcjsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgTklUSU9fRzBfQXV0b2luY3JlbWVudF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMEF1dG9pbmNyZW1lbnRSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9BdXRvaW5jcmVtZW50X1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxQXV0b2luY3JlbWVudFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX0F1dG9pbmNyZW1lbnRfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJBdXRvaW5jcmVtZW50UmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfQXV0b2luY3JlbWVudF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM0F1dG9pbmNyZW1lbnRSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9Db21tYW5kX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwQ29tbWFuZFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0NvbW1hbmRfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFDb21tYW5kUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfQ29tbWFuZF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMkNvbW1hbmRSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19Db21tYW5kX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczQ29tbWFuZFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0hXX1NhdmVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBIV1NhdmVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9IV19TYXZlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxSFdTYXZlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfSFdfU2F2ZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMkhXU2F2ZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0czX0hXX1NhdmVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNIV1NhdmVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9TV19TYXZlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwU1dTYXZlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfU1dfU2F2ZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMVNXU2F2ZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX1NXX1NhdmVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJTV1NhdmVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19TV19TYXZlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczU1dTYXZlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfTW9kZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHME1vZGVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9Nb2RlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxTW9kZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX01vZGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJNb2RlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfTW9kZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM01vZGVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9Mb2FkQV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMExvYWRBUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfTG9hZEFfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFMb2FkQVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX0xvYWRBX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyTG9hZEFSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19Mb2FkQV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM0xvYWRBUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfTG9hZEJfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBMb2FkQlJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0xvYWRCX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxTG9hZEJSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9Mb2FkQl9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMkxvYWRCUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfTG9hZEJfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNMb2FkQlJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0lucHV0X1NlbGVjdF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMElucHV0U2VsZWN0UmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfSW5wdXRfU2VsZWN0X1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxSW5wdXRTZWxlY3RSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9JbnB1dF9TZWxlY3RfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJJbnB1dFNlbGVjdFJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0czX0lucHV0X1NlbGVjdF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM0lucHV0U2VsZWN0UmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzAxX1N0YXR1c19SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMDFTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMjNfU3RhdHVzX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyM1N0YXR1c1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwMV9Kb2ludF9SZXNldF9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMDFKb2ludFJlc2V0UmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzIzX0pvaW50X1Jlc2V0X1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyM0pvaW50UmVzZXRSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfSm9pbnRfU3RhdHVzMV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMDFKb2ludFN0YXR1czFSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMjNfSm9pbnRfU3RhdHVzMV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMjNKb2ludFN0YXR1czFSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfSm9pbnRfU3RhdHVzMl9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMDFKb2ludFN0YXR1czJSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMjNfSm9pbnRfU3RhdHVzMl9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMjNKb2ludFN0YXR1czJSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9Db3VudGluZ19Nb2RlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwQ291bnRpbmdNb2RlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfQ291bnRpbmdfTW9kZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMUNvdW50aW5nTW9kZVJlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX0NvdW50aW5nX01vZGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJDb3VudGluZ01vZGVSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19Db3VudGluZ19Nb2RlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczQ291bnRpbmdNb2RlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfU2Vjb25kX0dhdGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTZWNvbmRHYXRlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfU2Vjb25kX0dhdGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFTZWNvbmRHYXRlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfU2Vjb25kX0dhdGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJTZWNvbmRHYXRlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfU2Vjb25kX0dhdGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNTZWNvbmRHYXRlUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfRE1BX0NvbmZpZ19SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMERNQUNvbmZpZ1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0RNQV9TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBETUFTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9ETUFfQ29uZmlnX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxRE1BQ29uZmlnUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfRE1BX1N0YXR1c19SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMURNQVN0YXR1c1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cyX0RNQV9Db25maWdfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJETUFDb25maWdSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9ETUFfU3RhdHVzX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcyRE1BU3RhdHVzUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzNfRE1BX0NvbmZpZ19SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM0RNQUNvbmZpZ1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0czX0RNQV9TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNETUFTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBJbnRlcnJ1cHRBY2tub3dsZWRnZTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFJbnRlcnJ1cHRBY2tub3dsZWRnZTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzJJbnRlcnJ1cHRBY2tub3dsZWRnZTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzNJbnRlcnJ1cHRBY2tub3dsZWRnZTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMl9TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19TdGF0dXNfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTdGF0dXNSZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9JbnRlcnJ1cHRfRW5hYmxlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcwSW50ZXJydXB0RW5hYmxlOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0ludGVycnVwdF9FbmFibGVfUmVnOgorCQluaV82NjB4X3JlZ2lzdGVyID0gRzFJbnRlcnJ1cHRFbmFibGU7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzJfSW50ZXJydXB0X0VuYWJsZV9SZWc6CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMkludGVycnVwdEVuYWJsZTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HM19JbnRlcnJ1cHRfRW5hYmxlX1JlZzoKKwkJbmlfNjYweF9yZWdpc3RlciA9IEczSW50ZXJydXB0RW5hYmxlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydF9wcmludGsoIiVzOiB1bmhhbmRsZWQgcmVnaXN0ZXIgMHgleCBpbiBzd2l0Y2guXG4iLAorCQkJX19GVU5DVElPTl9fLCByZWcpOworCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gbmlfNjYweF9yZWdpc3RlcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgY2hpcF9pbmRleCwgdW5zaWduZWQgYml0cywgZW51bSBOSV82NjB4X1JlZ2lzdGVyIHJlZykKK3sKKwl2b2lkICpjb25zdCB3cml0ZV9hZGRyZXNzID0KKwkJcHJpdmF0ZShkZXYpLT5taXRlLT5kYXFfaW9fYWRkciArIEdQQ1RfT0ZGU0VUW2NoaXBfaW5kZXhdICsKKwkJcmVnaXN0ZXJEYXRhW3JlZ10ub2Zmc2V0OworCisJc3dpdGNoIChyZWdpc3RlckRhdGFbcmVnXS5zaXplKSB7CisJY2FzZSBEQVRBXzJCOgorCQl3cml0ZXcoYml0cywgd3JpdGVfYWRkcmVzcyk7CisJCWJyZWFrOworCWNhc2UgREFUQV80QjoKKwkJd3JpdGVsKGJpdHMsIHdyaXRlX2FkZHJlc3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydF9wcmludGsoIiVzOiAlczogYnVnISB1bmhhbmRsZWQgY2FzZSAocmVnPTB4JXgpIGluIHN3aXRjaC5cbiIsCisJCQlfX0ZJTEVfXywgX19GVU5DVElPTl9fLCByZWcpOworCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG5pXzY2MHhfcmVhZF9yZWdpc3RlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBjaGlwX2luZGV4LCBlbnVtIE5JXzY2MHhfUmVnaXN0ZXIgcmVnKQoreworCXZvaWQgKmNvbnN0IHJlYWRfYWRkcmVzcyA9CisJCXByaXZhdGUoZGV2KS0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHUENUX09GRlNFVFtjaGlwX2luZGV4XSArCisJCXJlZ2lzdGVyRGF0YVtyZWddLm9mZnNldDsKKworCXN3aXRjaCAocmVnaXN0ZXJEYXRhW3JlZ10uc2l6ZSkgeworCWNhc2UgREFUQV8yQjoKKwkJcmV0dXJuIHJlYWR3KHJlYWRfYWRkcmVzcyk7CisJCWJyZWFrOworCWNhc2UgREFUQV80QjoKKwkJcmV0dXJuIHJlYWRsKHJlYWRfYWRkcmVzcyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aygiJXM6ICVzOiBidWchIHVuaGFuZGxlZCBjYXNlIChyZWc9MHgleCkgaW4gc3dpdGNoLlxuIiwKKwkJCV9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIHJlZyk7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5pX2dwY3Rfd3JpdGVfcmVnaXN0ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIGJpdHMsCisJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXYtPmRldjsKKwllbnVtIE5JXzY2MHhfUmVnaXN0ZXIgbmlfNjYweF9yZWdpc3RlciA9IG5pX2dwY3RfdG9fNjYweF9yZWdpc3RlcihyZWcpOworCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCBjb3VudGVyLT5jaGlwX2luZGV4LCBiaXRzLAorCQluaV82NjB4X3JlZ2lzdGVyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pX2dwY3RfcmVhZF9yZWdpc3RlcihzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBjb3VudGVyLT5jb3VudGVyX2Rldi0+ZGV2OworCWVudW0gTklfNjYweF9SZWdpc3RlciBuaV82NjB4X3JlZ2lzdGVyID0gbmlfZ3BjdF90b182NjB4X3JlZ2lzdGVyKHJlZyk7CisJcmV0dXJuIG5pXzY2MHhfcmVhZF9yZWdpc3RlcihkZXYsIGNvdW50ZXItPmNoaXBfaW5kZXgsCisJCW5pXzY2MHhfcmVnaXN0ZXIpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtaXRlX2RtYV9kZXNjcmlwdG9yX3JpbmcgKm1pdGVfcmluZyhzdHJ1Y3QgbmlfNjYweF9wcml2YXRlICogcHJpdiwKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwlyZXR1cm4gcHJpdi0+bWl0ZV9yaW5nc1tjb3VudGVyLT5jaGlwX2luZGV4XVtjb3VudGVyLT5jb3VudGVyX2luZGV4XTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5pXzY2MHhfc2V0X2RtYV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIG1pdGVfY2hhbm5lbCwgc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnByaXZhdGUoZGV2KS0+c29mdF9yZWdfY29weV9sb2NrLCBmbGFncyk7CisJcHJpdmF0ZShkZXYpLT5kbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjb3VudGVyLT5jaGlwX2luZGV4XSAmPQorCQl+ZG1hX3NlbGVjdF9tYXNrKG1pdGVfY2hhbm5lbCk7CisJcHJpdmF0ZShkZXYpLT5kbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjb3VudGVyLT5jaGlwX2luZGV4XSB8PQorCQlkbWFfc2VsZWN0X2JpdHMobWl0ZV9jaGFubmVsLAorCQlkbWFfc2VsZWN0aW9uX2NvdW50ZXIoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCBjb3VudGVyLT5jaGlwX2luZGV4LAorCQlwcml2YXRlKGRldiktPmRtYV9jb25maWd1cmF0aW9uX3NvZnRfY29waWVzW2NvdW50ZXItPgorCQkJY2hpcF9pbmRleF0gfCBkbWFfcmVzZXRfYml0KG1pdGVfY2hhbm5lbCksCisJCURNQUNvbmZpZ1JlZ2lzdGVyKTsKKwltbWlvd2IoKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdmF0ZShkZXYpLT5zb2Z0X3JlZ19jb3B5X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5pXzY2MHhfdW5zZXRfZG1hX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgbWl0ZV9jaGFubmVsLCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmcHJpdmF0ZShkZXYpLT5zb2Z0X3JlZ19jb3B5X2xvY2ssIGZsYWdzKTsKKwlwcml2YXRlKGRldiktPmRtYV9jb25maWd1cmF0aW9uX3NvZnRfY29waWVzW2NvdW50ZXItPmNoaXBfaW5kZXhdICY9CisJCX5kbWFfc2VsZWN0X21hc2sobWl0ZV9jaGFubmVsKTsKKwlwcml2YXRlKGRldiktPmRtYV9jb25maWd1cmF0aW9uX3NvZnRfY29waWVzW2NvdW50ZXItPmNoaXBfaW5kZXhdIHw9CisJCWRtYV9zZWxlY3RfYml0cyhtaXRlX2NoYW5uZWwsIGRtYV9zZWxlY3Rpb25fbm9uZSk7CisJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIGNvdW50ZXItPmNoaXBfaW5kZXgsCisJCXByaXZhdGUoZGV2KS0+ZG1hX2NvbmZpZ3VyYXRpb25fc29mdF9jb3BpZXNbY291bnRlci0+CisJCQljaGlwX2luZGV4XSwgRE1BQ29uZmlnUmVnaXN0ZXIpOworCW1taW93YigpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2YXRlKGRldiktPnNvZnRfcmVnX2NvcHlfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfcmVxdWVzdF9taXRlX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIGVudW0gY29tZWRpX2lvX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbWl0ZV9jaGFubmVsICptaXRlX2NoYW47CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnByaXZhdGUoZGV2KS0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlCVUdfT04oY291bnRlci0+bWl0ZV9jaGFuKTsKKwltaXRlX2NoYW4gPQorCQltaXRlX3JlcXVlc3RfY2hhbm5lbChwcml2YXRlKGRldiktPm1pdGUsIG1pdGVfcmluZyhwcml2YXRlKGRldiksCisJCQljb3VudGVyKSk7CisJaWYgKG1pdGVfY2hhbiA9PSBOVUxMKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2YXRlKGRldiktPm1pdGVfY2hhbm5lbF9sb2NrLAorCQkJZmxhZ3MpOworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImZhaWxlZCB0byByZXNlcnZlIG1pdGUgZG1hIGNoYW5uZWwgZm9yIGNvdW50ZXIuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCW1pdGVfY2hhbi0+ZGlyID0gZGlyZWN0aW9uOworCW5pX3Rpb19zZXRfbWl0ZV9jaGFubmVsKGNvdW50ZXIsIG1pdGVfY2hhbik7CisJbmlfNjYweF9zZXRfZG1hX2NoYW5uZWwoZGV2LCBtaXRlX2NoYW4tPmNoYW5uZWwsIGNvdW50ZXIpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2YXRlKGRldiktPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbmlfNjYweF9yZWxlYXNlX21pdGVfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmcHJpdmF0ZShkZXYpLT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChjb3VudGVyLT5taXRlX2NoYW4pIHsKKwkJc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuID0gY291bnRlci0+bWl0ZV9jaGFuOworCisJCW5pXzY2MHhfdW5zZXRfZG1hX2NoYW5uZWwoZGV2LCBtaXRlX2NoYW4tPmNoYW5uZWwsIGNvdW50ZXIpOworCQluaV90aW9fc2V0X21pdGVfY2hhbm5lbChjb3VudGVyLCBOVUxMKTsKKwkJbWl0ZV9yZWxlYXNlX2NoYW5uZWwobWl0ZV9jaGFuKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXZhdGUoZGV2KS0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBuaV82NjB4X2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCByZXR2YWw7CisKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHN1YmRldl90b19jb3VudGVyKHMpOworLy8gICAgICBjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwlyZXR2YWwgPSBuaV82NjB4X3JlcXVlc3RfbWl0ZV9jaGFubmVsKGRldiwgY291bnRlciwgQ09NRURJX0lOUFVUKTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkibm8gZG1hIGNoYW5uZWwgYXZhaWxhYmxlIGZvciB1c2UgYnkgY291bnRlciIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwluaV90aW9fYWNrbm93bGVkZ2VfYW5kX2NvbmZpcm0oY291bnRlciwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJcmV0dmFsID0gbmlfdGlvX2NtZChjb3VudGVyLCBzLT5hc3luYyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyID0gc3ViZGV2X3RvX2NvdW50ZXIocyk7CisKKwlyZXR1cm4gbmlfdGlvX2NtZHRlc3QoY291bnRlciwgY21kKTsKK30KKworc3RhdGljIGludCBuaV82NjB4X2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyID0gc3ViZGV2X3RvX2NvdW50ZXIocyk7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IG5pX3Rpb19jYW5jZWwoY291bnRlcik7CisJbmlfNjYweF9yZWxlYXNlX21pdGVfY2hhbm5lbChkZXYsIGNvdW50ZXIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90aW9fY291bnRlcnN3YXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGlwc2V0KQoreworCS8qIFNlZSBQLiAzLjUgb2YgdGhlIFJlZ2lzdGVyLUxldmVsIFByb2dyYW1taW5nIG1hbnVhbC4gIFRoZQorCSAgIENvdW50ZXJTd2FwIGJpdCBoYXMgdG8gYmUgc2V0IG9uIHRoZSBzZWNvbmQgY2hpcCwgb3RoZXJ3aXNlCisJICAgaXQgd2lsbCB0cnkgdG8gdXNlIHRoZSBzYW1lIHBpbnMgYXMgdGhlIGZpcnN0IGNoaXAuCisJICovCisJaWYgKGNoaXBzZXQpCisJCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCBjaGlwc2V0LCBDb3VudGVyU3dhcCwKKwkJCUNsb2NrQ29uZmlnUmVnaXN0ZXIpOworCWVsc2UKKwkJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIGNoaXBzZXQsIDAsIENsb2NrQ29uZmlnUmVnaXN0ZXIpOworfQorCitzdGF0aWMgdm9pZCBuaV82NjB4X2hhbmRsZV9ncGN0X2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJbmlfdGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3ViZGV2X3RvX2NvdW50ZXIocyksIHMpOworCWlmIChzLT5hc3luYy0+ZXZlbnRzKSB7CisJCWlmIChzLT5hc3luYy0+CisJCQlldmVudHMgJiAoQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUiB8CisJCQkJQ09NRURJX0NCX09WRVJGTE9XKSkgeworCQkJbmlfNjYweF9jYW5jZWwoZGV2LCBzKTsKKwkJfQorCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBuaV82NjB4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGk7CisKKwlpZiAoZGV2LT5hdHRhY2hlZCA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisJc21wX21iKCk7CisJZm9yIChpID0gMDsgaSA8IG5pXzY2MHhfbnVtX2NvdW50ZXJzKGRldik7ICsraSkgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfNjYwWF9HUENUX1NVQkRFVihpKTsKKwkJbmlfNjYweF9oYW5kbGVfZ3BjdF9pbnRlcnJ1cHQoZGV2LCBzKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfYnVmX2NoYW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pdGVfYnVmX2NoYW5nZShtaXRlX3JpbmcocHJpdmF0ZShkZXYpLCBzdWJkZXZfdG9fY291bnRlcihzKSksCisJCXMtPmFzeW5jKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfYWxsb2NhdGVfcHJpdmF0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGk7CisKKwlpZiAoKHJldHZhbCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IG5pXzY2MHhfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXR2YWw7CisJc3Bpbl9sb2NrX2luaXQoJnByaXZhdGUoZGV2KS0+bWl0ZV9jaGFubmVsX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwcml2YXRlKGRldiktPnNvZnRfcmVnX2NvcHlfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IE5VTV9QRklfQ0hBTk5FTFM7ICsraSkgeworCQlwcml2YXRlKGRldiktPnBmaV9vdXRwdXRfc2VsZWN0c1tpXSA9IHBmaV9vdXRwdXRfc2VsZWN0X2NvdW50ZXI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfYWxsb2NfbWl0ZV9yaW5ncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwl1bnNpZ25lZCBpOworCXVuc2lnbmVkIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgYm9hcmQoZGV2KS0+bl9jaGlwczsgKytpKSB7CisJCWZvciAoaiA9IDA7IGogPCBjb3VudGVyc19wZXJfY2hpcDsgKytqKSB7CisJCQlwcml2YXRlKGRldiktPm1pdGVfcmluZ3NbaV1bal0gPQorCQkJCW1pdGVfYWxsb2NfcmluZyhwcml2YXRlKGRldiktPm1pdGUpOworCQkJaWYgKHByaXZhdGUoZGV2KS0+bWl0ZV9yaW5nc1tpXVtqXSA9PSBOVUxMKSB7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5pXzY2MHhfZnJlZV9taXRlX3JpbmdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGk7CisJdW5zaWduZWQgajsKKworCWZvciAoaSA9IDA7IGkgPCBib2FyZChkZXYpLT5uX2NoaXBzOyArK2kpIHsKKwkJZm9yIChqID0gMDsgaiA8IGNvdW50ZXJzX3Blcl9jaGlwOyArK2opIHsKKwkJCW1pdGVfZnJlZV9yaW5nKHByaXZhdGUoZGV2KS0+bWl0ZV9yaW5nc1tpXVtqXSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgbmlfNjYweF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpOworCXVuc2lnbmVkIGdsb2JhbF9pbnRlcnJ1cHRfY29uZmlnX2JpdHM7CisKKwlwcmludGsoImNvbWVkaSVkOiBuaV82NjB4OiAiLCBkZXYtPm1pbm9yKTsKKworCXJldCA9IG5pXzY2MHhfYWxsb2NhdGVfcHJpdmF0ZShkZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldCA9IG5pXzY2MHhfZmluZF9kZXZpY2UoZGV2LCBpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGV2LT5ib2FyZF9uYW1lID0gYm9hcmQoZGV2KS0+bmFtZTsKKworCXJldCA9IG1pdGVfc2V0dXAyKHByaXZhdGUoZGV2KS0+bWl0ZSwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwljb21lZGlfc2V0X2h3X2RldihkZXYsICZwcml2YXRlKGRldiktPm1pdGUtPnBjaWRldi0+ZGV2KTsKKwlyZXQgPSBuaV82NjB4X2FsbG9jX21pdGVfcmluZ3MoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXByaW50aygiICVzICIsIGRldi0+Ym9hcmRfbmFtZSk7CisKKwlkZXYtPm5fc3ViZGV2aWNlcyA9IDIgKyBOSV82NjBYX01BWF9OVU1fQ09VTlRFUlM7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIGRldi0+bl9zdWJkZXZpY2VzKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogT2xkIEdFTkVSQUwtUFVSUE9TRSBDT1VOVEVSL1RJTUUgKEdQQ1QpIHN1YmRldmljZSwgbm8gbG9uZ2VyIHVzZWQgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JXzY2MFhfRElPX1NVQkRFVjsKKwkvKiBESUdJVEFMIEkvTyBTVUJERVZJQ0UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSBOVU1fUEZJX0NIQU5ORUxTOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gbmlfNjYweF9kaW9faW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gbmlfNjYweF9kaW9faW5zbl9jb25maWc7CisJcy0+aW9fYml0cyA9IDA7CQkvKiBhbGwgYml0cyBkZWZhdWx0IHRvIGlucHV0ICovCisJLy8gd2UgdXNlIHRoZSBpb2NvbmZpZyByZWdpc3RlcnMgdG8gY29udHJvbCBkaW8gZGlyZWN0aW9uLCBzbyB6ZXJvIG91dHB1dCBlbmFibGVzIGluIHN0YyBkaW8gY29udHJvbCByZWcKKwluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgMCwgMCwgU1RDRElPQ29udHJvbCk7CisKKwlwcml2YXRlKGRldiktPmNvdW50ZXJfZGV2ID0gbmlfZ3BjdF9kZXZpY2VfY29uc3RydWN0KGRldiwKKwkJJm5pX2dwY3Rfd3JpdGVfcmVnaXN0ZXIsICZuaV9ncGN0X3JlYWRfcmVnaXN0ZXIsCisJCW5pX2dwY3RfdmFyaWFudF82NjB4LCBuaV82NjB4X251bV9jb3VudGVycyhkZXYpKTsKKwlpZiAocHJpdmF0ZShkZXYpLT5jb3VudGVyX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmb3IgKGkgPSAwOyBpIDwgTklfNjYwWF9NQVhfTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JXzY2MFhfR1BDVF9TVUJERVYoaSk7CisJCWlmIChpIDwgbmlfNjYweF9udW1fY291bnRlcnMoZGV2KSkgeworCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7CisJCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJCVNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9MU0FNUEwgfAorCQkJCVNERl9DTURfUkVBRCAvKiB8IFNERl9DTURfV1JJVEUgKi8gOworCQkJcy0+bl9jaGFuID0gMzsKKwkJCXMtPm1heGRhdGEgPSAweGZmZmZmZmZmOworCQkJcy0+aW5zbl9yZWFkID0gbmlfNjYweF9HUENUX3JpbnNuOworCQkJcy0+aW5zbl93cml0ZSA9IG5pXzY2MHhfR1BDVF93aW5zbjsKKwkJCXMtPmluc25fY29uZmlnID0gbmlfNjYweF9HUENUX2luc25fY29uZmlnOworCQkJcy0+ZG9fY21kID0gJm5pXzY2MHhfY21kOworCQkJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwkJCXMtPmRvX2NtZHRlc3QgPSAmbmlfNjYweF9jbWR0ZXN0OworCQkJcy0+Y2FuY2VsID0gJm5pXzY2MHhfY2FuY2VsOworCQkJcy0+YXN5bmNfZG1hX2RpciA9IERNQV9CSURJUkVDVElPTkFMOworCQkJcy0+YnVmX2NoYW5nZSA9ICZuaV82NjB4X2J1Zl9jaGFuZ2U7CisJCQlzLT5wcml2YXRlID0gJnByaXZhdGUoZGV2KS0+Y291bnRlcl9kZXYtPmNvdW50ZXJzW2ldOworCisJCQlwcml2YXRlKGRldiktPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tpXS5jaGlwX2luZGV4ID0KKwkJCQlpIC8gY291bnRlcnNfcGVyX2NoaXA7CisJCQlwcml2YXRlKGRldiktPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tpXS5jb3VudGVyX2luZGV4ID0KKwkJCQlpICUgY291bnRlcnNfcGVyX2NoaXA7CisJCX0gZWxzZSB7CisJCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBib2FyZChkZXYpLT5uX2NoaXBzOyArK2kpIHsKKwkJaW5pdF90aW9fY2hpcChkZXYsIGkpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbmlfNjYweF9udW1fY291bnRlcnMoZGV2KTsgKytpKSB7CisJCW5pX3Rpb19pbml0X2NvdW50ZXIoJnByaXZhdGUoZGV2KS0+Y291bnRlcl9kZXYtPmNvdW50ZXJzW2ldKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IE5VTV9QRklfQ0hBTk5FTFM7ICsraSkgeworCQlpZiAoaSA8IG1pbl9jb3VudGVyX3BmaV9jaGFuKQorCQkJbmlfNjYweF9zZXRfcGZpX3JvdXRpbmcoZGV2LCBpLCBwZmlfb3V0cHV0X3NlbGVjdF9kbyk7CisJCWVsc2UKKwkJCW5pXzY2MHhfc2V0X3BmaV9yb3V0aW5nKGRldiwgaSwKKwkJCQlwZmlfb3V0cHV0X3NlbGVjdF9jb3VudGVyKTsKKwkJbmlfNjYweF9zZWxlY3RfcGZpX291dHB1dChkZXYsIGksIHBmaV9vdXRwdXRfc2VsZWN0X2hpZ2hfWik7CisJfQorCS8qIHRvIGJlIHNhZmUsIHNldCBjb3VudGVyc3dhcCBiaXRzIG9uIHRpbyBjaGlwcyBhZnRlciBhbGwgdGhlIGNvdW50ZXIKKwkgICBvdXRwdXRzIGhhdmUgYmVlbiBzZXQgdG8gaGlnaCBpbXBlZGFuY2UgbW9kZSAqLworCWZvciAoaSA9IDA7IGkgPCBib2FyZChkZXYpLT5uX2NoaXBzOyArK2kpIHsKKwkJc2V0X3Rpb19jb3VudGVyc3dhcChkZXYsIGkpOworCX0KKwlpZiAoKHJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShtaXRlX2lycShwcml2YXRlKGRldiktPm1pdGUpLAorCQkJCSZuaV82NjB4X2ludGVycnVwdCwgSVJRRl9TSEFSRUQsICJuaV82NjB4IiwKKwkJCQlkZXYpKSA8IDApIHsKKwkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlkZXYtPmlycSA9IG1pdGVfaXJxKHByaXZhdGUoZGV2KS0+bWl0ZSk7CisJZ2xvYmFsX2ludGVycnVwdF9jb25maWdfYml0cyA9IEdsb2JhbF9JbnRfRW5hYmxlX0JpdDsKKwlpZiAoYm9hcmQoZGV2KS0+bl9jaGlwcyA+IDEpCisJCWdsb2JhbF9pbnRlcnJ1cHRfY29uZmlnX2JpdHMgfD0gQ2FzY2FkZV9JbnRfRW5hYmxlX0JpdDsKKwluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgMCwgZ2xvYmFsX2ludGVycnVwdF9jb25maWdfYml0cywKKwkJR2xvYmFsSW50ZXJydXB0Q29uZmlnUmVnaXN0ZXIpOworCXByaW50aygiYXR0YWNoZWRcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IG5pXzY2MHg6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwkvKiBGcmVlIGlycSAqLworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAocHJpdmF0ZShkZXYpLT5jb3VudGVyX2RldikKKwkJCW5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3kocHJpdmF0ZShkZXYpLT5jb3VudGVyX2Rldik7CisJCWlmIChwcml2YXRlKGRldiktPm1pdGUpIHsKKwkJCW5pXzY2MHhfZnJlZV9taXRlX3JpbmdzKGRldik7CisJCQltaXRlX3Vuc2V0dXAocHJpdmF0ZShkZXYpLT5taXRlKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbmlfNjYweF9HUENUX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlyZXR1cm4gbmlfdGlvX3JpbnNuKHN1YmRldl90b19jb3VudGVyKHMpLCBpbnNuLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF90aW9fY2hpcChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGNoaXBzZXQpCit7CisJdW5zaWduZWQgaTsKKworCS8vIGluaXQgZG1hIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIKKwlwcml2YXRlKGRldiktPmRtYV9jb25maWd1cmF0aW9uX3NvZnRfY29waWVzW2NoaXBzZXRdID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RNQV9DSEFOTkVMOyArK2kpIHsKKwkJcHJpdmF0ZShkZXYpLT5kbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjaGlwc2V0XSB8PQorCQkJZG1hX3NlbGVjdF9iaXRzKGksCisJCQlkbWFfc2VsZWN0aW9uX25vbmUpICYgZG1hX3NlbGVjdF9tYXNrKGkpOworCX0KKwluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgY2hpcHNldCwKKwkJcHJpdmF0ZShkZXYpLT5kbWFfY29uZmlndXJhdGlvbl9zb2Z0X2NvcGllc1tjaGlwc2V0XSwKKwkJRE1BQ29uZmlnUmVnaXN0ZXIpOworCWZvcihpID0gMDsgaSA8IE5VTV9QRklfQ0hBTk5FTFM7ICsraSkKKwl7CisJCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCBjaGlwc2V0LCAwLCBJT0NvbmZpZ1JlZyhpKSk7CisJfQorfQorCitzdGF0aWMgaW50CituaV82NjB4X0dQQ1RfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXJldHVybiBuaV90aW9faW5zbl9jb25maWcoc3ViZGV2X3RvX2NvdW50ZXIocyksIGluc24sIGRhdGEpOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfR1BDVF93aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJcmV0dXJuIG5pX3Rpb193aW5zbihzdWJkZXZfdG9fY291bnRlcihzKSwgaW5zbiwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjYweF9maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpCit7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCWludCBpOworCisJZm9yIChtaXRlID0gbWl0ZV9kZXZpY2VzOyBtaXRlOyBtaXRlID0gbWl0ZS0+bmV4dCkgeworCQlpZiAobWl0ZS0+dXNlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJCWlmIChidXMgIT0gbWl0ZS0+cGNpZGV2LT5idXMtPm51bWJlciB8fAorCQkJCXNsb3QgIT0gUENJX1NMT1QobWl0ZS0+cGNpZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgbl9uaV82NjB4X2JvYXJkczsgaSsrKSB7CisJCQlpZiAobWl0ZV9kZXZpY2VfaWQobWl0ZSkgPT0gbmlfNjYweF9ib2FyZHNbaV0uZGV2X2lkKSB7CisJCQkJZGV2LT5ib2FyZF9wdHIgPSBuaV82NjB4X2JvYXJkcyArIGk7CisJCQkJcHJpdmF0ZShkZXYpLT5taXRlID0gbWl0ZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKwlwcmludGsoIm5vIGRldmljZSBmb3VuZFxuIik7CisJbWl0ZV9saXN0X2RldmljZXMoKTsKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBuaV82NjB4X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGJhc2VfYml0ZmllbGRfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLy8gQ2hlY2sgaWYgd2UgaGF2ZSB0byB3cml0ZSBzb21lIGJpdHMKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+KGRhdGFbMF0gPDwgYmFzZV9iaXRmaWVsZF9jaGFubmVsKTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKSA8PCBiYXNlX2JpdGZpZWxkX2NoYW5uZWw7CisJCS8qIFdyaXRlIG91dCB0aGUgbmV3IGRpZ2l0YWwgb3V0cHV0IGxpbmVzICovCisJCW5pXzY2MHhfd3JpdGVfcmVnaXN0ZXIoZGV2LCAwLCBzLT5zdGF0ZSwgRElPMzJPdXRwdXQpOworCX0KKwkvKiBvbiByZXR1cm4sIGRhdGFbMV0gY29udGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBkaWdpdGFsCisJICogaW5wdXQgYW5kIG91dHB1dCBsaW5lcy4gKi8KKwlkYXRhWzFdID0KKwkJKG5pXzY2MHhfcmVhZF9yZWdpc3RlcihkZXYsIDAsCisJCQlESU8zMklucHV0KSA+PiBiYXNlX2JpdGZpZWxkX2NoYW5uZWwpOworCXJldHVybiAyOworfQorCitzdGF0aWMgdm9pZCBuaV82NjB4X3NlbGVjdF9wZmlfb3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBwZmlfY2hhbm5lbCwKKwl1bnNpZ25lZCBvdXRwdXRfc2VsZWN0KQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjb3VudGVyXzRfN19maXJzdF9wZmkgPSA4OworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjb3VudGVyXzRfN19sYXN0X3BmaSA9IDIzOworCXVuc2lnbmVkIGFjdGl2ZV9jaGlwc2V0ID0gMDsKKwl1bnNpZ25lZCBpZGxlX2NoaXBzZXQgPSAwOworCXVuc2lnbmVkIGFjdGl2ZV9iaXRzOworCXVuc2lnbmVkIGlkbGVfYml0czsKKworCWlmKGJvYXJkKGRldiktPm5fY2hpcHMgPiAxKSB7CisJCWlmKG91dHB1dF9zZWxlY3QgPT0gcGZpX291dHB1dF9zZWxlY3RfY291bnRlciAmJgorCQkJcGZpX2NoYW5uZWwgPj0gY291bnRlcl80XzdfZmlyc3RfcGZpICYmCisJCQlwZmlfY2hhbm5lbCA8PSBjb3VudGVyXzRfN19sYXN0X3BmaSkgeworCQkJYWN0aXZlX2NoaXBzZXQgPSAxOworCQkJaWRsZV9jaGlwc2V0ID0gMDsKKwkJfWVsc2UgeworCQkJYWN0aXZlX2NoaXBzZXQgPSAwOworCQkJaWRsZV9jaGlwc2V0ID0gMTsKKwkJfQorCX0KKworCWlmKGlkbGVfY2hpcHNldCAhPSBhY3RpdmVfY2hpcHNldCkgeworCQlpZGxlX2JpdHMgPSBuaV82NjB4X3JlYWRfcmVnaXN0ZXIoZGV2LCBpZGxlX2NoaXBzZXQsIElPQ29uZmlnUmVnKHBmaV9jaGFubmVsKSk7CisJCWlkbGVfYml0cyAmPSB+cGZpX291dHB1dF9zZWxlY3RfbWFzayhwZmlfY2hhbm5lbCk7CisJCWlkbGVfYml0cyB8PSBwZmlfb3V0cHV0X3NlbGVjdF9iaXRzKHBmaV9jaGFubmVsLCBwZmlfb3V0cHV0X3NlbGVjdF9oaWdoX1opOworCQluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgaWRsZV9jaGlwc2V0LCBpZGxlX2JpdHMsIElPQ29uZmlnUmVnKHBmaV9jaGFubmVsKSk7CisJfQorCisJYWN0aXZlX2JpdHMgPSBuaV82NjB4X3JlYWRfcmVnaXN0ZXIoZGV2LCBhY3RpdmVfY2hpcHNldCwgSU9Db25maWdSZWcocGZpX2NoYW5uZWwpKTsKKwlhY3RpdmVfYml0cyAmPSB+cGZpX291dHB1dF9zZWxlY3RfbWFzayhwZmlfY2hhbm5lbCk7CisJYWN0aXZlX2JpdHMgfD0gcGZpX291dHB1dF9zZWxlY3RfYml0cyhwZmlfY2hhbm5lbCwgb3V0cHV0X3NlbGVjdCk7CisJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIGFjdGl2ZV9jaGlwc2V0LCBhY3RpdmVfYml0cywgSU9Db25maWdSZWcocGZpX2NoYW5uZWwpKTsKK30KKworc3RhdGljIGludCBuaV82NjB4X3NldF9wZmlfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbiwKKwl1bnNpZ25lZCBzb3VyY2UpCit7CisJaWYgKHNvdXJjZSA+IG51bV9wZmlfb3V0cHV0X3NlbGVjdHMpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChzb3VyY2UgPT0gcGZpX291dHB1dF9zZWxlY3RfaGlnaF9aKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2hhbiA8IG1pbl9jb3VudGVyX3BmaV9jaGFuKSB7CisJCWlmIChzb3VyY2UgPT0gcGZpX291dHB1dF9zZWxlY3RfY291bnRlcikKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAoY2hhbiA+IG1heF9kaW9fcGZpX2NoYW4pIHsKKwkJaWYgKHNvdXJjZSA9PSBwZmlfb3V0cHV0X3NlbGVjdF9kbykKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKwlCVUdfT04oY2hhbiA+PSBOVU1fUEZJX0NIQU5ORUxTKTsKKworCXByaXZhdGUoZGV2KS0+cGZpX291dHB1dF9zZWxlY3RzW2NoYW5dID0gc291cmNlOworCWlmIChwcml2YXRlKGRldiktPnBmaV9kaXJlY3Rpb25fYml0cyAmICgoKHVpbnQ2NF90KSAxKSA8PCBjaGFuKSkKKwkJbmlfNjYweF9zZWxlY3RfcGZpX291dHB1dChkZXYsIGNoYW4sCisJCQlwcml2YXRlKGRldiktPnBmaV9vdXRwdXRfc2VsZWN0c1tjaGFuXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV82NjB4X2dldF9wZmlfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbikKK3sKKwlCVUdfT04oY2hhbiA+PSBOVU1fUEZJX0NIQU5ORUxTKTsKKwlyZXR1cm4gcHJpdmF0ZShkZXYpLT5wZmlfb3V0cHV0X3NlbGVjdHNbY2hhbl07Cit9CisKK3N0YXRpYyB2b2lkIG5pNjYweF9jb25maWdfZmlsdGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBwZmlfY2hhbm5lbCwKKwllbnVtIG5pX2dwY3RfZmlsdGVyX3NlbGVjdCBmaWx0ZXIpCit7CisJdW5zaWduZWQgYml0cyA9IG5pXzY2MHhfcmVhZF9yZWdpc3RlcihkZXYsIDAsIElPQ29uZmlnUmVnKHBmaV9jaGFubmVsKSk7CisJYml0cyAmPSB+cGZpX2lucHV0X3NlbGVjdF9tYXNrKHBmaV9jaGFubmVsKTsKKwliaXRzIHw9IHBmaV9pbnB1dF9zZWxlY3RfYml0cyhwZmlfY2hhbm5lbCwgZmlsdGVyKTsKKwluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgMCwgYml0cywgSU9Db25maWdSZWcocGZpX2NoYW5uZWwpKTsKK30KKworc3RhdGljIGludCBuaV82NjB4X2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcworCSAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKKwkgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKKwkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcHJpdmF0ZShkZXYpLT5wZmlfZGlyZWN0aW9uX2JpdHMgfD0gKCh1aW50NjRfdCkgMSkgPDwgY2hhbjsKKwkJbmlfNjYweF9zZWxlY3RfcGZpX291dHB1dChkZXYsIGNoYW4sCisJCQlwcml2YXRlKGRldiktPnBmaV9vdXRwdXRfc2VsZWN0c1tjaGFuXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlwcml2YXRlKGRldiktPnBmaV9kaXJlY3Rpb25fYml0cyAmPSB+KCgodWludDY0X3QpIDEpIDw8IGNoYW4pOworCQluaV82NjB4X3NlbGVjdF9wZmlfb3V0cHV0KGRldiwgY2hhbiwgcGZpX291dHB1dF9zZWxlY3RfaGlnaF9aKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJKHByaXZhdGUoZGV2KS0+CisJCQlwZmlfZGlyZWN0aW9uX2JpdHMgJiAoKCh1aW50NjRfdCkgMSkgPDwgY2hhbikpID8KKwkJCUNPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiAwOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX1JPVVRJTkc6CisJCXJldHVybiBuaV82NjB4X3NldF9wZmlfcm91dGluZyhkZXYsIGNoYW4sIGRhdGFbMV0pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0dFVF9ST1VUSU5HOgorCQlkYXRhWzFdID0gbmlfNjYweF9nZXRfcGZpX3JvdXRpbmcoZGV2LCBjaGFuKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19GSUxURVI6CisJCW5pNjYweF9jb25maWdfZmlsdGVyKGRldiwgY2hhbiwgZGF0YVsxXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9OworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzMTJlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKQEAgLTAsMCArMSwzMzcgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBOSSA2NzB4IGRldmljZXMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogbmlfNjcweAorRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIDY3MHgKK0F1dGhvcjogQmFydCBKb3JpcyA8YmpvcmlzQGFkdmFsdmFzLmJlPgorVXBkYXRlZDogV2VkLCAxMSBEZWMgMjAwMiAxODoyNTozNSAtMDgwMAorRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBQQ0ktNjcwMyAobmlfNjcweCksIFBDSS02NzA0CitTdGF0dXM6IHVua25vd24KKworQ29tbWFuZHMgYXJlIG5vdCBzdXBwb3J0ZWQuCisqLworCisvKgorCUJhcnQgSm9yaXMgPGJqb3Jpc0BhZHZhbHZhcy5iZT4gTGFzdCB1cGRhdGVkIG9uIDIwLzA4LzIwMDEKKworCU1hbnVhbHM6CisKKwkzMjIxMTBhLnBkZglQQ0kvUFhJLTY3MDQgVXNlciBNYW51YWwKKwkzMjIxMTBiLnBkZglQQ0kvUFhJLTY3MDMvNjcwNCBVc2VyIE1hbnVhbAorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlICJtaXRlLmgiCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9OQVRJTlNUCTB4MTA5MworCisjZGVmaW5lIEFPX1ZBTFVFX09GRlNFVAkJCTB4MDAKKyNkZWZpbmUJQU9fQ0hBTl9PRkZTRVQJCQkweDBjCisjZGVmaW5lCUFPX1NUQVRVU19PRkZTRVQJCTB4MTAKKyNkZWZpbmUgQU9fQ09OVFJPTF9PRkZTRVQJCTB4MTAKKyNkZWZpbmUJRElPX1BPUlQwX0RJUl9PRkZTRVQJMHgyMAorI2RlZmluZQlESU9fUE9SVDBfREFUQV9PRkZTRVQJMHgyNAorI2RlZmluZQlESU9fUE9SVDFfRElSX09GRlNFVAkweDI4CisjZGVmaW5lCURJT19QT1JUMV9EQVRBX09GRlNFVAkweDJjCisjZGVmaW5lCU1JU0NfU1RBVFVTX09GRlNFVAkJMHgxNAorI2RlZmluZQlNSVNDX0NPTlRST0xfT0ZGU0VUCQkweDE0CisKKy8qIEJvYXJkIGRlc2NyaXB0aW9uKi8KKworc3RydWN0IG5pXzY3MHhfYm9hcmQgeworCXVuc2lnbmVkIHNob3J0IGRldl9pZDsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIHNob3J0IGFvX2NoYW5zOworCXVuc2lnbmVkIHNob3J0IGFvX2JpdHM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5pXzY3MHhfYm9hcmQgbmlfNjcweF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgZGV2X2lkOgkweDJjOTAsCisJICAgICAgbmFtZToJIlBDSS02NzAzIiwKKwkgICAgICBhb19jaGFuczoxNiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDE5MjAsCisJICAgICAgbmFtZToJIlBYSS02NzA0IiwKKwkgICAgICBhb19jaGFuczozMiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDEyOTAsCisJICAgICAgbmFtZToJIlBDSS02NzA0IiwKKwkgICAgICBhb19jaGFuczozMiwKKwkgICAgICBhb19iaXRzOgkxNiwKKwkJfSwKK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShuaV82NzB4X3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyYzkwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE5MjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCS8veyBQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MDAwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAorCXswfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG5pXzY3MHhfcGNpX3RhYmxlKTsKKworI2RlZmluZSB0aGlzYm9hcmQgKChzdHJ1Y3QgbmlfNjcweF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgbmlfNjcweF9wcml2YXRlIHsKKworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlpbnQgYm9hcmR0eXBlOworCWludCBkaW87CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzMyXTsKK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IG5pXzY3MHhfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgbl9uaV82NzB4X2JvYXJkcyAoc2l6ZW9mKG5pXzY3MHhfYm9hcmRzKS9zaXplb2YobmlfNjcweF9ib2FyZHNbMF0pKQorCitzdGF0aWMgaW50IG5pXzY3MHhfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgbmlfNjcweF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX25pXzY3MHggPSB7CisgICAgICBkcml2ZXJfbmFtZToibmlfNjcweCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6bmlfNjcweF9hdHRhY2gsCisgICAgICBkZXRhY2g6bmlfNjcweF9kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9uaV82NzB4LCBuaV82NzB4X3BjaV90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV8wXzIwbUEgPSB7IDEsIHtSQU5HRV9tQSgwLCAyMCl9IH07CisKK3N0YXRpYyBpbnQgbmlfNjcweF9maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpOworCitzdGF0aWMgaW50IG5pXzY3MHhfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfNjcweF9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV82NzB4X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfNjcweF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBuaV82NzB4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgcmV0OworCWludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogbmlfNjcweDogIiwgZGV2LT5taW5vcik7CisKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IG5pXzY3MHhfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBuaV82NzB4X2ZpbmRfZGV2aWNlKGRldiwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1pdGVfc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisJZGV2LT5pcnEgPSBtaXRlX2lycShkZXZwcml2LT5taXRlKTsKKwlwcmludGsoIiAlcyIsIGRldi0+Ym9hcmRfbmFtZSk7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5hb19jaGFuczsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCWlmIChzLT5uX2NoYW4gPT0gMzIpIHsKKwkJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKipyYW5nZV90YWJsZV9saXN0OworCisJCXJhbmdlX3RhYmxlX2xpc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqKSAqIDMyLAorCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghcmFuZ2VfdGFibGVfbGlzdCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlzLT5yYW5nZV90YWJsZV9saXN0ID0gcmFuZ2VfdGFibGVfbGlzdDsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJCXJhbmdlX3RhYmxlX2xpc3RbaV0gPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJcmFuZ2VfdGFibGVfbGlzdFsxNiArIGldID0gJnJhbmdlXzBfMjBtQTsKKwkJfQorCX0gZWxzZSB7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMDsKKwl9CisJcy0+aW5zbl93cml0ZSA9ICZuaV82NzB4X2FvX3dpbnNuOworCXMtPmluc25fcmVhZCA9ICZuaV82NzB4X2FvX3JpbnNuOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IG5pXzY3MHhfZGlvX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IG5pXzY3MHhfZGlvX2luc25fY29uZmlnOworCisJd3JpdGVsKDB4MTAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgTUlTQ19DT05UUk9MX09GRlNFVCk7CS8qIENvbmZpZyBvZiBtaXNjIHJlZ2lzdGVycyAqLworCXdyaXRlbCgweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFPX0NPTlRST0xfT0ZGU0VUKTsJLyogQ29uZmlnIG9mIGFvIHJlZ2lzdGVycyAqLworCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV82NzB4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBuaV82NzB4OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+c3ViZGV2aWNlc1swXS5yYW5nZV90YWJsZV9saXN0KSB7CisJCWtmcmVlKGRldi0+c3ViZGV2aWNlc1swXS5yYW5nZV90YWJsZV9saXN0KTsKKwl9CisJaWYgKGRldi0+cHJpdmF0ZSAmJiBkZXZwcml2LT5taXRlKQorCQltaXRlX3Vuc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY3MHhfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiBDaGFubmVsIG51bWJlciBtYXBwaW5nIDoKKworCSAgIE5JIDY3MDMvIE5JIDY3MDQgICAgIHwgTkkgNjcwNCBPbmx5CisJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgIHZjaCgwKSAgICAgICA6ICAgICAgIDAgICAgICAgfCBpY2goMTYpICAgICAgIDogICAgICAgMQorCSAgIHZjaCgxKSAgICAgICA6ICAgICAgIDIgICAgICAgfCBpY2goMTcpICAgICAgIDogICAgICAgMworCSAgIC4gICAgOiAgICAgICAuICAgICAgIHwgICAuICAgICAgICAgICAgICAgICAgIC4KKwkgICAuICAgIDogICAgICAgLiAgICAgICB8ICAgLiAgICAgICAgICAgICAgICAgICAuCisJICAgLiAgICA6ICAgICAgIC4gICAgICAgfCAgIC4gICAgICAgICAgICAgICAgICAgLgorCSAgIHZjaCgxNSkgICAgICA6ICAgICAgIDMwICAgICAgfCBpY2goMzEpICAgICAgIDogICAgICAgMzEgICAgICAqLworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQl3cml0ZWwoKChjaGFuICYgMTUpIDw8IDEpIHwgKChjaGFuICYgMTYpID4+IDQpLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFPX0NIQU5fT0ZGU0VUKTsJLyogRmlyc3Qgd3JpdGUgaW4gY2hhbm5lbCByZWdpc3RlciB3aGljaCBjaGFubmVsIHRvIHVzZSAqLworCQl3cml0ZWwoZGF0YVtpXSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBT19WQUxVRV9PRkZTRVQpOwkvKiB3cml0ZSBjaGFubmVsIHZhbHVlICovCisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBuaV82NzB4X2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjcweF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFRoZSBpbnNuIGRhdGEgaXMgYSBtYXNrIGluIGRhdGFbMF0gYW5kIHRoZSBuZXcgZGF0YQorCSAqIGluIGRhdGFbMV0sIGVhY2ggY2hhbm5lbCBjb29yZXNwb25kaW5nIHRvIGEgYml0LiAqLworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwkJd3JpdGVsKHMtPnN0YXRlLAorCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBESU9fUE9SVDBfREFUQV9PRkZTRVQpOworCX0KKworCS8qIG9uIHJldHVybiwgZGF0YVsxXSBjb250YWlucyB0aGUgdmFsdWUgb2YgdGhlIGRpZ2l0YWwKKwkgKiBpbnB1dCBsaW5lcy4gKi8KKwlkYXRhWzFdID0gcmVhZGwoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBESU9fUE9SVDBfREFUQV9PRkZTRVQpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfNjcweF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gMSA8PCBjaGFuOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+KDEgPDwgY2hhbik7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShzLT4KKwkJCWlvX2JpdHMgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwl3cml0ZWwocy0+aW9fYml0cywgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBESU9fUE9SVDBfRElSX09GRlNFVCk7CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworc3RhdGljIGludCBuaV82NzB4X2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGU7CisJaW50IGk7CisKKwlmb3IgKG1pdGUgPSBtaXRlX2RldmljZXM7IG1pdGU7IG1pdGUgPSBtaXRlLT5uZXh0KSB7CisJCWlmIChtaXRlLT51c2VkKQorCQkJY29udGludWU7CisJCWlmIChidXMgfHwgc2xvdCkgeworCQkJaWYgKGJ1cyAhPSBtaXRlLT5wY2lkZXYtPmJ1cy0+bnVtYmVyCisJCQkJfHwgc2xvdCAhPSBQQ0lfU0xPVChtaXRlLT5wY2lkZXYtPmRldmZuKSkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBuX25pXzY3MHhfYm9hcmRzOyBpKyspIHsKKwkJCWlmIChtaXRlX2RldmljZV9pZChtaXRlKSA9PSBuaV82NzB4X2JvYXJkc1tpXS5kZXZfaWQpIHsKKwkJCQlkZXYtPmJvYXJkX3B0ciA9IG5pXzY3MHhfYm9hcmRzICsgaTsKKwkJCQlkZXZwcml2LT5taXRlID0gbWl0ZTsKKworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwltaXRlX2xpc3RfZGV2aWNlcygpOworCXJldHVybiAtRUlPOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2EyMTUwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRfYTIxNTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDQ1YmYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2EyMTUwLmMKQEAgLTAsMCArMSw5MDkgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfYXRfYTIxNTAuYworICAgIERyaXZlciBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgQVQtQTIxNTAgYm9hcmRzCisgICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKK0RyaXZlcjogbmlfYXRfYTIxNTAKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyBBVC1BMjE1MAorQXV0aG9yOiBGcmFuayBNb3JpIEhlc3MKK1N0YXR1czogd29ya3MKK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gQVQtQTIxNTBDIChhdF9hMjE1MGMpLCBBVC0yMTUwUyAoYXRfYTIxNTBzKQorCitJZiB5b3Ugd2FudCB0byBhYyBjb3VwbGUgdGhlIGJvYXJkJ3MgaW5wdXRzLCB1c2UgQVJFRl9PVEhFUi4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRIChvcHRpb25hbCwgcmVxdWlyZWQgZm9yIHRpbWVkIGNvbnZlcnNpb25zKQorICBbMl0gLSBETUEgKG9wdGlvbmFsLCByZXF1aXJlZCBmb3IgdGltZWQgY29udmVyc2lvbnMpCisKKyovCisvKgorWWV0IGFub3RoZXIgZHJpdmVyIGZvciBvYnNvbGV0ZSBoYXJkd2FyZSBicm91Z2h0IHRvIHlvdSBieSBGcmFuayBIZXNzLgorVGVzdGluZyBhbmQgZGVidWdnaW5nIGhlbHAgcHJvdmlkZWQgYnkgRGF2ZSBBbmRydWN6eWsuCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBib2FyZHM6CisKK0FULUEyMTUwQworQVQtQTIxNTBTCisKK1RoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhlaXIgbWFzdGVyIGNsb2NrIGZyZXF1ZW5jaWVzLgorCitPcHRpb25zOgorCVswXSAtIGJhc2UgaW8gYWRkcmVzcworCVsxXSAtIGlycQorCVsyXSAtIGRtYSBjaGFubmVsCisKK1JlZmVyZW5jZXMgKGZyb20gZnRwOi8vZnRwLm5hdGluc3QuY29tL3N1cHBvcnQvbWFudWFscyk6CisKKwkgICAzMjAzNjAucGRmICBBVC1BMjE1MCBVc2VyIE1hbnVhbAorCitUT0RPOgorCithbmFsb2cgbGV2ZWwgdHJpZ2dlcmluZworVFJJR19XQUtFX0VPUworCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisKKyNpbmNsdWRlICI4MjUzLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyNkZWZpbmUgQTIxNTBfU0laRSAgICAgICAgICAgMjgKKyNkZWZpbmUgQTIxNTBfRE1BX0JVRkZFUl9TSVpFCTB4ZmYwMAkvLyBzaXplIGluIGJ5dGVzIG9mIGRtYSBidWZmZXIKKworLy8jZGVmaW5lIEEyMTUwX0RFQlVHICAgLy8gZW5hYmxlIGRlYnVnZ2luZyBjb2RlCisjdW5kZWYgQTIxNTBfREVCVUcJCS8vIGRpc2FibGUgZGVidWdnaW5nIGNvZGUKKworLyogUmVnaXN0ZXJzIGFuZCBiaXRzICovCisjZGVmaW5lIENPTkZJR19SRUcJCTB4MAorI2RlZmluZSAgIENIQU5ORUxfQklUUyh4KQkJKCh4KSAmIDB4NykKKyNkZWZpbmUgICBDSEFOTkVMX01BU0sJCTB4NworI2RlZmluZSAgIENMT0NLX1NFTEVDVF9CSVRTKHgpCQkoKCh4KSAmIDB4MykgPDwgMykKKyNkZWZpbmUgICBDTE9DS19ESVZJU09SX0JJVFMoeCkJCSgoKHgpICYgMHgzKSA8PCA1KQorI2RlZmluZSAgIENMT0NLX01BU0sJCSgweGYgPDwgMykKKyNkZWZpbmUgICBFTkFCTEUwX0JJVAkJMHg4MAkvLyBlbmFibGUgKGRvbid0IGludGVybmFsbHkgZ3JvdW5kKSBjaGFubmVscyAwIGFuZCAxCisjZGVmaW5lICAgRU5BQkxFMV9CSVQJCTB4MTAwCS8vIGVuYWJsZSAoZG9uJ3QgaW50ZXJuYWxseSBncm91bmQpIGNoYW5uZWxzIDIgYW5kIDMKKyNkZWZpbmUgICBBQzBfQklUCQkweDIwMAkvLyBhYyBjb3VwbGUgY2hhbm5lbHMgMCwxCisjZGVmaW5lICAgQUMxX0JJVAkJMHg0MDAJLy8gYWMgY291cGxlIGNoYW5uZWxzIDIsMworI2RlZmluZSAgIEFQRF9CSVQJCTB4ODAwCS8vIGFuYWxvZyBwb3dlciBkb3duCisjZGVmaW5lICAgRFBEX0JJVAkJMHgxMDAwCS8vIGRpZ2l0YWwgcG93ZXIgZG93bgorI2RlZmluZSBUUklHR0VSX1JFRwkJMHgyCS8vIHRyaWdnZXIgY29uZmlnIHJlZ2lzdGVyCisjZGVmaW5lICAgUE9TVF9UUklHR0VSX0JJVFMJCTB4MgorI2RlZmluZSAgIERFTEFZX1RSSUdHRVJfQklUUwkJMHgzCisjZGVmaW5lICAgSFdfVFJJR19FTgkJMHgxMAkvLyBlbmFibGUgaGFyZHdhcmUgdHJpZ2dlcgorI2RlZmluZSBGSUZPX1NUQVJUX1JFRwkJMHg2CS8vIHNvZnR3YXJlIHN0YXJ0IGFxdWlzdGlvbiB0cmlnZ2VyCisjZGVmaW5lIEZJRk9fUkVTRVRfUkVHCQkweDgJLy8gY2xlYXJzIGZpZm8gKyBmaWZvIGZsYWdzCisjZGVmaW5lIEZJRk9fREFUQV9SRUcJCTB4YQkvLyByZWFkIGRhdGEKKyNkZWZpbmUgRE1BX1RDX0NMRUFSX1JFRwkJMHhlCS8vIGNsZWFyIGRtYSB0ZXJtaW5hbCBjb3VudCBpbnRlcnJ1cHQKKyNkZWZpbmUgU1RBVFVTX1JFRwkJMHgxMgkvLyByZWFkIG9ubHkKKyNkZWZpbmUgICBGTkVfQklUCQkweDEJLy8gZmlmbyBub3QgZW1wdHkKKyNkZWZpbmUgICBPVkZMX0JJVAkJMHg4CS8vIGZpZm8gb3ZlcmZsb3cKKyNkZWZpbmUgICBFREFRX0JJVAkJMHgxMAkvLyBlbmQgb2YgYXF1aXNpdGlvbiBpbnRlcnJ1cHQKKyNkZWZpbmUgICBEQ0FMX0JJVAkJMHgyMAkvLyBvZmZzZXQgY2FsaWJyYXRpb24gaW4gcHJvZ3Jlc3MKKyNkZWZpbmUgICBJTlRSX0JJVAkJMHg0MAkvLyBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQKKyNkZWZpbmUgICBETUFfVENfQklUCQkweDgwCS8vIGRtYSB0ZXJtaW5hbCBjb3VudCBpbnRlcnJ1cHQgaGFzIG9jY3VyZWQKKyNkZWZpbmUgICBJRF9CSVRTKHgpCSgoKHgpID4+IDgpICYgMHgzKQorI2RlZmluZSBJUlFfRE1BX0NOVFJMX1JFRwkJMHgxMgkvLyB3cml0ZSBvbmx5CisjZGVmaW5lICAgRE1BX0NIQU5fQklUUyh4KQkJKCh4KSAmIDB4NykJLy8gc2V0cyBkbWEgY2hhbm5lbAorI2RlZmluZSAgIERNQV9FTl9CSVQJCTB4OAkvLyBlbmFibGVzIGRtYQorI2RlZmluZSAgIElSUV9MVkxfQklUUyh4KQkJKCgoeCkgJiAweGYpIDw8IDQpCS8vIHNldHMgaXJxIGxldmVsCisjZGVmaW5lICAgRklGT19JTlRSX0VOX0JJVAkJMHgxMDAJLy8gZW5hYmxlIGZpZm8gaW50ZXJydXB0cworI2RlZmluZSAgIEZJRk9fSU5UUl9GSEZfQklUCQkweDIwMAkvLyBpbnRlcnJ1cHQgZmlmbyBoYWxmIGZ1bGwKKyNkZWZpbmUgICBETUFfSU5UUl9FTl9CSVQgCQkweDgwMAkvLyBlbmFibGUgaW50ZXJydXB0IG9uIGRtYSB0ZXJtaW5hbCBjb3VudAorI2RlZmluZSAgIERNQV9ERU1fRU5fQklUCTB4MTAwMAkvLyBlbmFibGVzIGRlbWFuZCBtb2RlIGRtYQorI2RlZmluZSBJODI1M19CQVNFX1JFRwkJMHgxNAorI2RlZmluZSBJODI1M19NT0RFX1JFRwkJMHgxNworI2RlZmluZSAgIEhXX0NPVU5UX0RJU0FCTEUJCTB4MzAJLy8gZGlzYWJsZSBoYXJkd2FyZSBjb3VudGluZyBvZiBjb252ZXJzaW9ucworCitzdHJ1Y3QgYTIxNTBfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGNsb2NrWzRdOwkJLy8gbWFzdGVyIGNsb2NrIHBlcmlvZHMsIGluIG5hbm9zZWNvbmRzCisJaW50IG51bV9jbG9ja3M7CQkvLyBudW1iZXIgb2YgYXZhaWxhYmxlIG1hc3RlciBjbG9jayBzcGVlZHMKKwlpbnQgYWlfc3BlZWQ7CQkvLyBtYXhpbXVtIGNvbnZlcnNpb24gcmF0ZSBpbiBuYW5vc2Vjb25kcworfTsKKworLy9hbmFsb2cgaW5wdXQgcmFuZ2UKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hMjE1MCA9IHsKKwkxLAorCXsKKwkJCVJBTkdFKC0yLjgyOCwgMi44MjgpLAorCQl9Cit9OworCisvLyBlbnVtIG11c3QgbWF0Y2ggYm9hcmQgaW5kaWNlcworZW51bSB7IGEyMTUwX2MsIGEyMTUwX3MgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYTIxNTBfYm9hcmQgYTIxNTBfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJhdC1hMjE1MGMiLAorCSAgICAgIGNsb2NrOgl7MzEyNTAsIDIyNjc2LCAyMDgzMywgMTk1MzF9LAorCSAgICAgIG51bV9jbG9ja3M6NCwKKwkgICAgICBhaV9zcGVlZDoxOTUzMSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImF0LWEyMTUwcyIsCisJICAgICAgY2xvY2s6CXs2MjUwMCwgNTAwMDAsIDQxNjY3LCAwfSwKKwkgICAgICBudW1fY2xvY2tzOjMsCisJICAgICAgYWlfc3BlZWQ6NDE2NjcsCisJCX0sCit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBhMjE1MF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgYTIxNTBfcHJpdmF0ZSB7CisKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY291bnQ7CS8qIG51bWJlciBvZiBkYXRhIHBvaW50cyBsZWZ0IHRvIGJlIHRha2VuICovCisJdW5zaWduZWQgaW50IGRtYTsJLy8gZG1hIGNoYW5uZWwKKwlzMTYgKmRtYV9idWZmZXI7CS8vIGRtYSBidWZmZXIKKwl1bnNpZ25lZCBpbnQgZG1hX3RyYW5zZmVyX3NpemU7CS8vIHNpemUgaW4gYnl0ZXMgb2YgZG1hIHRyYW5zZmVycworCWludCBpcnFfZG1hX2JpdHM7CS8vIGlycS9kbWEgcmVnaXN0ZXIgYml0cworCWludCBjb25maWdfYml0czsJLy8gY29uZmlnIHJlZ2lzdGVyIGJpdHMKK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGEyMTUwX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgYTIxNTBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgYTIxNTBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgYTIxNTBfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2EyMTUwID0geworICAgICAgZHJpdmVyX25hbWU6Im5pX2F0X2EyMTUwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphMjE1MF9hdHRhY2gsCisgICAgICBkZXRhY2g6YTIxNTBfZGV0YWNoLAorfTsKKworc3RhdGljIGlycXJldHVybl90IGEyMTUwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKK3N0YXRpYyBpbnQgYTIxNTBfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgYTIxNTBfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBhMjE1MF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBhMjE1MF9nZXRfdGltaW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKnBlcmlvZCwKKwlpbnQgZmxhZ3MpOworc3RhdGljIGludCBhMjE1MF9wcm9iZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IGEyMTUwX3NldF9jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW5uZWwsCisJdW5zaWduZWQgaW50IG51bV9jaGFubmVscyk7CisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2EyMTUwKTsKKworI2lmZGVmIEEyMTUwX0RFQlVHCisKK3N0YXRpYyB2b2lkIG5pX2R1bXBfcmVncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlydF9wcmludGsoImNvbmZpZyBiaXRzIDB4JXhcbiIsIGRldnByaXYtPmNvbmZpZ19iaXRzKTsKKwlydF9wcmludGsoImlycSBkbWEgYml0cyAweCV4XG4iLCBkZXZwcml2LT5pcnFfZG1hX2JpdHMpOworCXJ0X3ByaW50aygic3RhdHVzIGJpdHMgMHgleFxuIiwgaW53KGRldi0+aW9iYXNlICsgU1RBVFVTX1JFRykpOworfQorCisjZW5kaWYKKworLyogaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSAqLworc3RhdGljIGlycXJldHVybl90IGEyMTUwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCWludCBpOworCWludCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZDsKKwl1bnNpZ25lZCBpbnQgbWF4X3BvaW50cywgbnVtX3BvaW50cywgcmVzaWR1ZSwgbGVmdG92ZXI7CisJc2hvcnQgZHBudDsKKwlzdGF0aWMgY29uc3QgaW50IHNhbXBsZV9zaXplID0gc2l6ZW9mKGRldnByaXYtPmRtYV9idWZmZXJbMF0pOworCisJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicHJlbWF0dXJlIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCS8vIGluaXRpYWxpemUgYXN5bmMgaGVyZSB0byBtYWtlIHN1cmUgcyBpcyBub3QgTlVMTAorCWFzeW5jID0gcy0+YXN5bmM7CisJYXN5bmMtPmV2ZW50cyA9IDA7CisJY21kID0gJmFzeW5jLT5jbWQ7CisKKwlzdGF0dXMgPSBpbncoZGV2LT5pb2Jhc2UgKyBTVEFUVVNfUkVHKTsKKworCWlmICgoc3RhdHVzICYgSU5UUl9CSVQpID09IDApIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInNwdXJpb3VzIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJaWYgKHN0YXR1cyAmIE9WRkxfQklUKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJmaWZvIG92ZXJmbG93Iik7CisJCWEyMTUwX2NhbmNlbChkZXYsIHMpOworCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJfQorCisJaWYgKChzdGF0dXMgJiBETUFfVENfQklUKSA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJjYXVnaHQgbm9uLWRtYSBpbnRlcnJ1cHQ/ICBBYm9ydGluZy4iKTsKKwkJYTIxNTBfY2FuY2VsKGRldiwgcyk7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkvKiBjbGVhciBmbGlwLWZsb3AgdG8gbWFrZSBzdXJlIDItYnl0ZSByZWdpc3RlcnMgZm9yCisJICogY291bnQgYW5kIGFkZHJlc3MgZ2V0IHNldCBjb3JyZWN0bHkgKi8KKwljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hKTsKKworCS8vIGZpZ3VyZSBvdXQgaG93IG1hbnkgcG9pbnRzIHRvIHJlYWQKKwltYXhfcG9pbnRzID0gZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgLyBzYW1wbGVfc2l6ZTsKKwkvKiByZXNpZHVlIGlzIHRoZSBudW1iZXIgb2YgcG9pbnRzIGxlZnQgdG8gYmUgZG9uZSBvbiB0aGUgZG1hCisJICogdHJhbnNmZXIuICBJdCBzaG91bGQgYWx3YXlzIGJlIHplcm8gYXQgdGhpcyBwb2ludCB1bmxlc3MKKwkgKiB0aGUgc3RvcF9zcmMgaXMgc2V0IHRvIGV4dGVybmFsIHRyaWdnZXJpbmcuCisJICovCisJcmVzaWR1ZSA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5kbWEpIC8gc2FtcGxlX3NpemU7CisJbnVtX3BvaW50cyA9IG1heF9wb2ludHMgLSByZXNpZHVlOworCWlmIChkZXZwcml2LT5jb3VudCA8IG51bV9wb2ludHMgJiYgY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQorCQludW1fcG9pbnRzID0gZGV2cHJpdi0+Y291bnQ7CisKKwkvLyBmaWd1cmUgb3V0IGhvdyBtYW55IHBvaW50cyB3aWxsIGJlIHN0b3JlZCBuZXh0IHRpbWUKKwlsZWZ0b3ZlciA9IDA7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWxlZnRvdmVyID0gZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgLyBzYW1wbGVfc2l6ZTsKKwl9IGVsc2UgaWYgKGRldnByaXYtPmNvdW50ID4gbWF4X3BvaW50cykgeworCQlsZWZ0b3ZlciA9IGRldnByaXYtPmNvdW50IC0gbWF4X3BvaW50czsKKwkJaWYgKGxlZnRvdmVyID4gbWF4X3BvaW50cykKKwkJCWxlZnRvdmVyID0gbWF4X3BvaW50czsKKwl9CisJLyogdGhlcmUgc2hvdWxkIG9ubHkgYmUgYSByZXNpZHVlIGlmIGNvbGxlY3Rpb24gd2FzIHN0b3BwZWQgYnkgaGF2aW5nCisJICogdGhlIHN0b3Bfc3JjIHNldCB0byBhbiBleHRlcm5hbCB0cmlnZ2VyLCBpbiB3aGljaCBjYXNlIHRoZXJlCisJICogd2lsbCBiZSBubyBtb3JlIGRhdGEKKwkgKi8KKwlpZiAocmVzaWR1ZSkKKwkJbGVmdG92ZXIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wb2ludHM7IGkrKykgeworCQkvKiB3cml0ZSBkYXRhIHBvaW50IHRvIGNvbWVkaSBidWZmZXIgKi8KKwkJZHBudCA9IGRldnByaXYtPmRtYV9idWZmZXJbaV07CisJCS8vIGNvbnZlcnQgZnJvbSAyJ3MgY29tcGxlbWVudCB0byB1bnNpZ25lZCBjb2RpbmcKKwkJZHBudCBePSAweDgwMDA7CisJCWNmY193cml0ZV90b19idWZmZXIocywgZHBudCk7CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJCWlmICgtLWRldnByaXYtPmNvdW50ID09IDApIHsJLyogZW5kIG9mIGFjcXVpc2l0aW9uICovCisJCQkJYTIxNTBfY2FuY2VsKGRldiwgcyk7CisJCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCS8vIHJlLWVuYWJsZSAgZG1hCisJaWYgKGxlZnRvdmVyKSB7CisJCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWEsIHZpcnRfdG9fYnVzKGRldnByaXYtPmRtYV9idWZmZXIpKTsKKwkJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsIGxlZnRvdmVyICogc2FtcGxlX3NpemUpOworCQllbmFibGVfZG1hKGRldnByaXYtPmRtYSk7CisJfQorCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCisJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKworCS8qIGNsZWFyIGludGVycnVwdCAqLworCW91dHcoMHgwMCwgZGV2LT5pb2Jhc2UgKyBETUFfVENfQ0xFQVJfUkVHKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLy8gcHJvYmVzIGJvYXJkIHR5cGUsIHJldHVybnMgb2Zmc2V0CitzdGF0aWMgaW50IGEyMTUwX3Byb2JlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBzdGF0dXMgPSBpbncoZGV2LT5pb2Jhc2UgKyBTVEFUVVNfUkVHKTsKKwlyZXR1cm4gSURfQklUUyhzdGF0dXMpOworfQorCitzdGF0aWMgaW50IGEyMTUwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXVuc2lnbmVkIGludCBpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwl1bnNpZ25lZCBpbnQgZG1hID0gaXQtPm9wdGlvbnNbMl07CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMjAwMDsKKwlpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzOiBpbyAweCVseCIsIGRldi0+bWlub3IsIGRyaXZlcl9hMjE1MC5kcml2ZXJfbmFtZSwKKwkJaW9iYXNlKTsKKwlpZiAoaXJxKSB7CisJCXByaW50aygiLCBpcnEgJXUiLCBpcnEpOworCX0gZWxzZSB7CisJCXByaW50aygiLCBubyBpcnEiKTsKKwl9CisJaWYgKGRtYSkgeworCQlwcmludGsoIiwgZG1hICV1IiwgZG1hKTsKKwl9IGVsc2UgeworCQlwcmludGsoIiwgbm8gZG1hIik7CisJfQorCXByaW50aygiXG4iKTsKKworCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGRldi0+cHJpdmF0ZSAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBhMjE1MF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChpb2Jhc2UgPT0gMCkgeworCQlwcmludGsoIiBpbyBiYXNlIGFkZHJlc3MgcmVxdWlyZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjaGVjayBpZiBpbyBhZGRyZXNzZXMgYXJlIGF2YWlsYWJsZSAqLworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBBMjE1MF9TSVpFLCBkcml2ZXJfYTIxNTAuZHJpdmVyX25hbWUpKSB7CisJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJLyogZ3JhYiBvdXIgSVJRICovCisJaWYgKGlycSkgeworCQkvLyBjaGVjayB0aGF0IGlycSBpcyBzdXBwb3J0ZWQKKwkJaWYgKGlycSA8IDMgfHwgaXJxID09IDggfHwgaXJxID09IDEzIHx8IGlycSA+IDE1KSB7CisJCQlwcmludGsoIiBpbnZhbGlkIGlycSBsaW5lICV1XG4iLCBpcnEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGEyMTUwX2ludGVycnVwdCwgMCwKKwkJCQlkcml2ZXJfYTIxNTAuZHJpdmVyX25hbWUsIGRldikpIHsKKwkJCXByaW50aygidW5hYmxlIHRvIGFsbG9jYXRlIGlycSAldVxuIiwgaXJxKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRldnByaXYtPmlycV9kbWFfYml0cyB8PSBJUlFfTFZMX0JJVFMoaXJxKTsKKwkJZGV2LT5pcnEgPSBpcnE7CisJfQorCS8vIGluaXRpYWxpemUgZG1hCisJaWYgKGRtYSkgeworCQlpZiAoZG1hID09IDQgfHwgZG1hID4gNykgeworCQkJcHJpbnRrKCIgaW52YWxpZCBkbWEgY2hhbm5lbCAldVxuIiwgZG1hKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChyZXF1ZXN0X2RtYShkbWEsIGRyaXZlcl9hMjE1MC5kcml2ZXJfbmFtZSkpIHsKKwkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgY2hhbm5lbCAldVxuIiwgZG1hKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRldnByaXYtPmRtYSA9IGRtYTsKKwkJZGV2cHJpdi0+ZG1hX2J1ZmZlciA9CisJCQlrbWFsbG9jKEEyMTUwX0RNQV9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCQlpZiAoZGV2cHJpdi0+ZG1hX2J1ZmZlciA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZGlzYWJsZV9kbWEoZG1hKTsKKwkJc2V0X2RtYV9tb2RlKGRtYSwgRE1BX01PREVfUkVBRCk7CisKKwkJZGV2cHJpdi0+aXJxX2RtYV9iaXRzIHw9IERNQV9DSEFOX0JJVFMoZG1hKTsKKwl9CisKKwlkZXYtPmJvYXJkX3B0ciA9IGEyMTUwX2JvYXJkcyArIGEyMTUwX3Byb2JlKGRldik7CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX09USEVSIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bGVuX2NoYW5saXN0ID0gNDsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2EyMTUwOworCXMtPmRvX2NtZCA9IGEyMTUwX2FpX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gYTIxNTBfYWlfY21kdGVzdDsKKwlzLT5pbnNuX3JlYWQgPSBhMjE1MF9haV9yaW5zbjsKKwlzLT5jYW5jZWwgPSBhMjE1MF9jYW5jZWw7CisKKwkvKiBuZWVkIHRvIGRvIHRoaXMgZm9yIHNvZnR3YXJlIGNvdW50aW5nIG9mIGNvbXBsZXRlZCBjb252ZXJzaW9ucywgdG8KKwkgKiBwcmV2ZW50IGhhcmR3YXJlIGNvdW50IGZyb20gc3RvcHBpbmcgYXF1aXNpdGlvbiAqLworCW91dHcoSFdfQ09VTlRfRElTQUJMRSwgZGV2LT5pb2Jhc2UgKyBJODI1M19NT0RFX1JFRyk7CisKKwkvLyBzZXQgY2FyZCdzIGlycSBhbmQgZG1hIGxldmVscworCW91dHcoZGV2cHJpdi0+aXJxX2RtYV9iaXRzLCBkZXYtPmlvYmFzZSArIElSUV9ETUFfQ05UUkxfUkVHKTsKKworCS8vIHJlc2V0IGFuZCBzeW5jIGFkYyBjbG9jayBjaXJjdWl0cnkKKwlvdXR3X3AoRFBEX0JJVCB8IEFQRF9CSVQsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisJb3V0d19wKERQRF9CSVQsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisJLy8gaW5pdGlhbGl6ZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyCisJZGV2cHJpdi0+Y29uZmlnX2JpdHMgPSAwOworCW91dHcoZGV2cHJpdi0+Y29uZmlnX2JpdHMsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisJLy8gd2FpdCB1bnRpbCBvZmZzZXQgY2FsaWJyYXRpb24gaXMgZG9uZSwgdGhlbiBlbmFibGUgYW5hbG9nIGlucHV0cworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJaWYgKChEQ0FMX0JJVCAmIGludyhkZXYtPmlvYmFzZSArIFNUQVRVU19SRUcpKSA9PSAwKQorCQkJYnJlYWs7CisJCWNvbWVkaV91ZGVsYXkoMTAwMCk7CisJfQorCWlmIChpID09IHRpbWVvdXQpIHsKKwkJcHJpbnRrKCIgdGltZWQgb3V0IHdhaXRpbmcgZm9yIG9mZnNldCBjYWxpYnJhdGlvbiB0byBjb21wbGV0ZVxuIik7CisJCXJldHVybiAtRVRJTUU7CisJfQorCWRldnByaXYtPmNvbmZpZ19iaXRzIHw9IEVOQUJMRTBfQklUIHwgRU5BQkxFMV9CSVQ7CisJb3V0dyhkZXZwcml2LT5jb25maWdfYml0cywgZGV2LT5pb2Jhc2UgKyBDT05GSUdfUkVHKTsKKworCXJldHVybiAwOworfTsKKworc3RhdGljIGludCBhMjE1MF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogJXM6IHJlbW92ZVxuIiwgZGV2LT5taW5vciwgZHJpdmVyX2EyMTUwLmRyaXZlcl9uYW1lKTsKKworCS8qIG9ubHkgZnJlZSBzdHVmZiBpZiBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCAqLworCWlmIChkZXYtPmlvYmFzZSkgeworCQkvLyBwdXQgYm9hcmQgaW4gcG93ZXItZG93biBtb2RlCisJCW91dHcoQVBEX0JJVCB8IERQRF9CSVQsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBBMjE1MF9TSVpFKTsKKwl9CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2cHJpdikgeworCQlpZiAoZGV2cHJpdi0+ZG1hKQorCQkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkJaWYgKGRldnByaXYtPmRtYV9idWZmZXIpCisJCQlrZnJlZShkZXZwcml2LT5kbWFfYnVmZmVyKTsKKwl9CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgYTIxNTBfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLy8gZGlzYWJsZSBkbWEgb24gY2FyZAorCWRldnByaXYtPmlycV9kbWFfYml0cyAmPSB+RE1BX0lOVFJfRU5fQklUICYgfkRNQV9FTl9CSVQ7CisJb3V0dyhkZXZwcml2LT5pcnFfZG1hX2JpdHMsIGRldi0+aW9iYXNlICsgSVJRX0RNQV9DTlRSTF9SRUcpOworCisJLy8gZGlzYWJsZSBjb21wdXRlcidzIGRtYQorCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYSk7CisKKwkvLyBjbGVhciBmaWZvIGFuZCByZXNldCB0cmlnZ2VyaW5nIGNpcmN1aXRyeQorCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBGSUZPX1JFU0VUX1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhMjE1MF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKwlpbnQgc3RhcnRDaGFuOworCWludCBpOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVI7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNib2FyZC0+YWlfc3BlZWQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWEyMTUwX2dldF90aW1pbmcoZGV2LCAmY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5mbGFncyk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLy8gY2hlY2sgY2hhbm5lbC9nYWluIGxpc3QgYWdhaW5zdCBjYXJkJ3MgbGltaXRhdGlvbnMKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQlzdGFydENoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCQlmb3IgKGkgPSAxOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0gKHN0YXJ0Q2hhbiArIGkpKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImVudHJpZXMgaW4gY2hhbmxpc3QgbXVzdCBiZSBjb25zZWN1dGl2ZSBjaGFubmVscywgY291bnRpbmcgdXB3YXJkc1xuIik7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwkJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID09IDIgJiYgQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSA9PSAxKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJsZW5ndGggMiBjaGFubGlzdCBtdXN0IGJlIGNoYW5uZWxzIDAsMSBvciBjaGFubmVscyAyLDMiKTsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSAzKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJjaGFubGlzdCBtdXN0IGhhdmUgMSwyIG9yIDQgY2hhbm5lbHMiKTsKKwkJCWVycisrOworCQl9CisJCWlmIChDUl9BUkVGKGNtZC0+Y2hhbmxpc3RbMF0pICE9IENSX0FSRUYoY21kLT5jaGFubGlzdFsxXSkgfHwKKwkJCUNSX0FSRUYoY21kLT5jaGFubGlzdFsyXSkgIT0gQ1JfQVJFRihjbWQtPmNoYW5saXN0WzNdKSkKKwkJeworCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkiY2hhbm5lbHMgMC8xIGFuZCAyLzMgbXVzdCBoYXZlIHRoZSBzYW1lIGFuYWxvZyByZWZlcmVuY2UiKTsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhMjE1MF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdW5zaWduZWQgaW50IG9sZF9jb25maWdfYml0cyA9IGRldnByaXYtPmNvbmZpZ19iaXRzOworCXVuc2lnbmVkIGludCB0cmlnZ2VyX2JpdHM7CisKKwlpZiAoIWRldi0+aXJxIHx8ICFkZXZwcml2LT5kbWEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSIgaXJxIGFuZCBkbWEgcmVxdWlyZWQsIGNhbm5vdCBkbyBoYXJkd2FyZSBjb252ZXJzaW9ucyIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChjbWQtPmZsYWdzICYgVFJJR19SVCkgeworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJIiBkbWEgaW5jb21wYXRpYmxlIHdpdGggaGFyZCByZWFsLXRpbWUgaW50ZXJydXB0IChUUklHX1JUKSwgYWJvcnRpbmciKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvLyBjbGVhciBmaWZvIGFuZCByZXNldCB0cmlnZ2VyaW5nIGNpcmN1aXRyeQorCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBGSUZPX1JFU0VUX1JFRyk7CisKKwkvKiBzZXR1cCBjaGFubGlzdCAqLworCWlmIChhMjE1MF9zZXRfY2hhbmxpc3QoZGV2LCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pLAorCQkJY21kLT5jaGFubGlzdF9sZW4pIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLy8gc2V0dXAgYWMvZGMgY291cGxpbmcKKwlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKSA9PSBBUkVGX09USEVSKQorCQlkZXZwcml2LT5jb25maWdfYml0cyB8PSBBQzBfQklUOworCWVsc2UKKwkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgJj0gfkFDMF9CSVQ7CisJaWYgKENSX0FSRUYoY21kLT5jaGFubGlzdFsyXSkgPT0gQVJFRl9PVEhFUikKKwkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgfD0gQUMxX0JJVDsKKwllbHNlCisJCWRldnByaXYtPmNvbmZpZ19iaXRzICY9IH5BQzFfQklUOworCisJLy8gc2V0dXAgdGltaW5nCisJYTIxNTBfZ2V0X3RpbWluZyhkZXYsICZjbWQtPnNjYW5fYmVnaW5fYXJnLCBjbWQtPmZsYWdzKTsKKworCS8vIHNlbmQgdGltaW5nLCBjaGFubmVsLCBjb25maWcgYml0cworCW91dHcoZGV2cHJpdi0+Y29uZmlnX2JpdHMsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisKKwkvLyBpbml0aWFsaXplIG51bWJlciBvZiBzYW1wbGVzIHJlbWFpbmluZworCWRldnByaXYtPmNvdW50ID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCisJLy8gZW5hYmxlIGNvbXB1dGVyJ3MgZG1hCisJbG9ja19mbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkvKiBjbGVhciBmbGlwLWZsb3AgdG8gbWFrZSBzdXJlIDItYnl0ZSByZWdpc3RlcnMgZm9yCisJICogY291bnQgYW5kIGFkZHJlc3MgZ2V0IHNldCBjb3JyZWN0bHkgKi8KKwljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hKTsKKwlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hLCB2aXJ0X3RvX2J1cyhkZXZwcml2LT5kbWFfYnVmZmVyKSk7CisJLy8gc2V0IHNpemUgb2YgdHJhbnNmZXIgdG8gZmlsbCBpbiAxLzMgc2Vjb25kCisjZGVmaW5lIE9ORV9USElSRF9TRUNPTkQgMzMzMzMzMzMzCisJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgPQorCQlzaXplb2YoZGV2cHJpdi0+ZG1hX2J1ZmZlclswXSkgKiBjbWQtPmNoYW5saXN0X2xlbiAqCisJCU9ORV9USElSRF9TRUNPTkQgLyBjbWQtPnNjYW5fYmVnaW5fYXJnOworCWlmIChkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSA+IEEyMTUwX0RNQV9CVUZGRVJfU0laRSkKKwkJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgPSBBMjE1MF9ETUFfQlVGRkVSX1NJWkU7CisJaWYgKGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplIDwgc2l6ZW9mKGRldnByaXYtPmRtYV9idWZmZXJbMF0pKQorCQlkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSA9IHNpemVvZihkZXZwcml2LT5kbWFfYnVmZmVyWzBdKTsKKwlkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSAtPQorCQlkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSAlIHNpemVvZihkZXZwcml2LT5kbWFfYnVmZmVyWzBdKTsKKwlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYSwgZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUpOworCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwlyZWxlYXNlX2RtYV9sb2NrKGxvY2tfZmxhZ3MpOworCisJLyogY2xlYXIgZG1hIGludGVycnVwdCBiZWZvcmUgZW5hYmxpbmcgaXQsIHRvIHRyeSBhbmQgZ2V0IHJpZCBvZiB0aGF0CisJICogb25lIHNwdXJpb3VzIGludGVycnVwdCB0aGF0IGhhcyBiZWVuIGhhcHBlbmluZyAqLworCW91dHcoMHgwMCwgZGV2LT5pb2Jhc2UgKyBETUFfVENfQ0xFQVJfUkVHKTsKKworCS8vIGVuYWJsZSBkbWEgb24gY2FyZAorCWRldnByaXYtPmlycV9kbWFfYml0cyB8PSBETUFfSU5UUl9FTl9CSVQgfCBETUFfRU5fQklUOworCW91dHcoZGV2cHJpdi0+aXJxX2RtYV9iaXRzLCBkZXYtPmlvYmFzZSArIElSUV9ETUFfQ05UUkxfUkVHKTsKKworCS8vIG1heSBuZWVkIHRvIHdhaXQgNzIgc2FtcGxpbmcgcGVyaW9kcyBpZiB0aW1pbmcgd2FzIGNoYW5nZWQKKwlpODI1NF9sb2FkKGRldi0+aW9iYXNlICsgSTgyNTNfQkFTRV9SRUcsIDAsIDIsIDcyLCAwKTsKKworCS8vIHNldHVwIHN0YXJ0IHRyaWdnZXJpbmcKKwl0cmlnZ2VyX2JpdHMgPSAwOworCS8vIGRlY2lkZSBpZiB3ZSBuZWVkIHRvIHdhaXQgNzIgcGVyaW9kcyBmb3IgdmFsaWQgZGF0YQorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVyAmJgorCQkob2xkX2NvbmZpZ19iaXRzICYgQ0xPQ0tfTUFTSykgIT0KKwkJKGRldnByaXYtPmNvbmZpZ19iaXRzICYgQ0xPQ0tfTUFTSykpIHsKKwkJLy8gc2V0IHRyaWdnZXIgc291cmNlIHRvIGRlbGF5IHRyaWdnZXIKKwkJdHJpZ2dlcl9iaXRzIHw9IERFTEFZX1RSSUdHRVJfQklUUzsKKwl9IGVsc2UgeworCQkvLyBvdGhlcndpc2Ugbm8gZGVsYXkKKwkJdHJpZ2dlcl9iaXRzIHw9IFBPU1RfVFJJR0dFUl9CSVRTOworCX0KKwkvLyBlbmFibGUgZXh0ZXJuYWwgaGFyZHdhcmUgdHJpZ2dlcgorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQl0cmlnZ2VyX2JpdHMgfD0gSFdfVFJJR19FTjsKKwl9IGVsc2UgaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfT1RIRVIpIHsKKwkJLy8gWFhYIGFkZCBzdXBwb3J0IGZvciBsZXZlbC9zbG9wZSBzdGFydCB0cmlnZ2VyIHVzaW5nIFRSSUdfT1RIRVIKKwkJY29tZWRpX2Vycm9yKGRldiwgInlvdSBzaG91bGRuJ3Qgc2VlIHRoaXM/Iik7CisJfQorCS8vIHNlbmQgdHJpZ2dlciBjb25maWcgYml0cworCW91dHcodHJpZ2dlcl9iaXRzLCBkZXYtPmlvYmFzZSArIFRSSUdHRVJfUkVHKTsKKworCS8vIHN0YXJ0IGFxdWlzaXRpb24gZm9yIHNvZnQgdHJpZ2dlcgorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykgeworCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgRklGT19TVEFSVF9SRUcpOworCX0KKyNpZmRlZiBBMjE1MF9ERUJVRworCW5pX2R1bXBfcmVncyhkZXYpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhMjE1MF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGksIG47CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDAwOworCXN0YXRpYyBjb25zdCBpbnQgZmlsdGVyX2RlbGF5ID0gMzY7CisKKwkvLyBjbGVhciBmaWZvIGFuZCByZXNldCB0cmlnZ2VyaW5nIGNpcmN1aXRyeQorCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBGSUZPX1JFU0VUX1JFRyk7CisKKwkvKiBzZXR1cCBjaGFubGlzdCAqLworCWlmIChhMjE1MF9zZXRfY2hhbmxpc3QoZGV2LCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwgMSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvLyBzZXQgZGMgY291cGxpbmcKKwlkZXZwcml2LT5jb25maWdfYml0cyAmPSB+QUMwX0JJVDsKKwlkZXZwcml2LT5jb25maWdfYml0cyAmPSB+QUMxX0JJVDsKKworCS8vIHNlbmQgdGltaW5nLCBjaGFubmVsLCBjb25maWcgYml0cworCW91dHcoZGV2cHJpdi0+Y29uZmlnX2JpdHMsIGRldi0+aW9iYXNlICsgQ09ORklHX1JFRyk7CisKKwkvLyBkaXNhYmxlIGRtYSBvbiBjYXJkCisJZGV2cHJpdi0+aXJxX2RtYV9iaXRzICY9IH5ETUFfSU5UUl9FTl9CSVQgJiB+RE1BX0VOX0JJVDsKKwlvdXR3KGRldnByaXYtPmlycV9kbWFfYml0cywgZGV2LT5pb2Jhc2UgKyBJUlFfRE1BX0NOVFJMX1JFRyk7CisKKwkvLyBzZXR1cCBzdGFydCB0cmlnZ2VyaW5nCisJb3V0dygwLCBkZXYtPmlvYmFzZSArIFRSSUdHRVJfUkVHKTsKKworCS8vIHN0YXJ0IGFxdWlzaXRpb24gZm9yIHNvZnQgdHJpZ2dlcgorCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBGSUZPX1NUQVJUX1JFRyk7CisKKwkvKiB0aGVyZSBpcyBhIDM1LjYgc2FtcGxlIGRlbGF5IGZvciBkYXRhIHRvIGdldCB0aHJvdWdoIHRoZSBhbnRpYWxpYXMgZmlsdGVyICovCisJZm9yIChuID0gMDsgbiA8IGZpbHRlcl9kZWxheTsgbisrKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmIChpbncoZGV2LT5pb2Jhc2UgKyBTVEFUVVNfUkVHKSAmIEZORV9CSVQpCisJCQkJYnJlYWs7CisJCQljb21lZGlfdWRlbGF5KDEpOworCQl9CisJCWlmIChpID09IHRpbWVvdXQpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1lb3V0Iik7CisJCQlyZXR1cm4gLUVUSU1FOworCQl9CisJCWludyhkZXYtPmlvYmFzZSArIEZJRk9fREFUQV9SRUcpOworCX0KKworCS8vIHJlYWQgZGF0YQorCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQkJaWYgKGludyhkZXYtPmlvYmFzZSArIFNUQVRVU19SRUcpICYgRk5FX0JJVCkKKwkJCQlicmVhazsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJaWYgKGkgPT0gdGltZW91dCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXQiKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKyNpZmRlZiBBMjE1MF9ERUJVRworCQluaV9kdW1wX3JlZ3MoZGV2KTsKKyNlbmRpZgorCQlkYXRhW25dID0gaW53KGRldi0+aW9iYXNlICsgRklGT19EQVRBX1JFRyk7CisjaWZkZWYgQTIxNTBfREVCVUcKKwkJcnRfcHJpbnRrKCIgZGF0YSBpcyAlaVxuIiwgZGF0YVtuXSk7CisjZW5kaWYKKwkJZGF0YVtuXSBePSAweDgwMDA7CisJfQorCisJLy8gY2xlYXIgZmlmbyBhbmQgcmVzZXQgdHJpZ2dlcmluZyBjaXJjdWl0cnkKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgRklGT19SRVNFVF9SRUcpOworCisJcmV0dXJuIG47Cit9CisKKy8qIHNldHMgYml0cyBpbiBkZXZwcml2LT5jbG9ja19iaXRzIHRvIG5lYXJlc3QgYXBwcm94aW1hdGlvbiBvZiByZXF1ZXN0ZWQgcGVyaW9kLAorICogYWRqdXN0cyByZXF1ZXN0ZWQgcGVyaW9kIHRvIGFjdHVhbCB0aW1pbmcuICovCitzdGF0aWMgaW50IGEyMTUwX2dldF90aW1pbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCAqcGVyaW9kLAorCWludCBmbGFncykKK3sKKwlpbnQgbHViLCBnbGIsIHRlbXA7CisJaW50IGx1Yl9kaXZpc29yX3NoaWZ0LCBsdWJfaW5kZXgsIGdsYl9kaXZpc29yX3NoaWZ0LCBnbGJfaW5kZXg7CisJaW50IGksIGo7CisKKwkvLyBpbml0aWFsaXplIGdyZWF0ZXN0IGxvd2VyIGFuZCBsZWFzdCB1cHBlciBib3VuZHMKKwlsdWJfZGl2aXNvcl9zaGlmdCA9IDM7CisJbHViX2luZGV4ID0gMDsKKwlsdWIgPSB0aGlzYm9hcmQtPmNsb2NrW2x1Yl9pbmRleF0gKiAoMSA8PCBsdWJfZGl2aXNvcl9zaGlmdCk7CisJZ2xiX2Rpdmlzb3Jfc2hpZnQgPSAwOworCWdsYl9pbmRleCA9IHRoaXNib2FyZC0+bnVtX2Nsb2NrcyAtIDE7CisJZ2xiID0gdGhpc2JvYXJkLT5jbG9ja1tnbGJfaW5kZXhdICogKDEgPDwgZ2xiX2Rpdmlzb3Jfc2hpZnQpOworCisJLy8gbWFrZSBzdXJlIHBlcmlvZCBpcyBpbiBhdmFpbGFibGUgcmFuZ2UKKwlpZiAoKnBlcmlvZCA8IGdsYikKKwkJKnBlcmlvZCA9IGdsYjsKKwlpZiAoKnBlcmlvZCA+IGx1YikKKwkJKnBlcmlvZCA9IGx1YjsKKworCS8vIHdlIGNhbiBtdWx0aXBseSBwZXJpb2QgYnkgMSwgMiwgNCwgb3IgOCwgdXNpbmcgKDEgPDwgaSkKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCS8vIHRoZXJlIGFyZSBhIG1heGltdW0gb2YgNCBtYXN0ZXIgY2xvY2tzCisJCWZvciAoaiA9IDA7IGogPCB0aGlzYm9hcmQtPm51bV9jbG9ja3M7IGorKykgeworCQkJLy8gdGVtcCBpcyB0aGUgcGVyaW9kIGluIG5hbm9zZWMgd2UgYXJlIGV2YWx1YXRpbmcKKwkJCXRlbXAgPSB0aGlzYm9hcmQtPmNsb2NrW2pdICogKDEgPDwgaSk7CisJCQkvLyBpZiBpdCBpcyB0aGUgYmVzdCBtYXRjaCB5ZXQKKwkJCWlmICh0ZW1wIDwgbHViICYmIHRlbXAgPj0gKnBlcmlvZCkgeworCQkJCWx1Yl9kaXZpc29yX3NoaWZ0ID0gaTsKKwkJCQlsdWJfaW5kZXggPSBqOworCQkJCWx1YiA9IHRlbXA7CisJCQl9CisJCQlpZiAodGVtcCA+IGdsYiAmJiB0ZW1wIDw9ICpwZXJpb2QpIHsKKwkJCQlnbGJfZGl2aXNvcl9zaGlmdCA9IGk7CisJCQkJZ2xiX2luZGV4ID0gajsKKwkJCQlnbGIgPSB0ZW1wOworCQkJfQorCQl9CisJfQorCWZsYWdzICY9IFRSSUdfUk9VTkRfTUFTSzsKKwlzd2l0Y2ggKGZsYWdzKSB7CisJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJZGVmYXVsdDoKKwkJLy8gaWYgbGVhc3QgdXBwZXIgYm91bmQgaXMgYmV0dGVyIGFwcHJveGltYXRpb24KKwkJaWYgKGx1YiAtICpwZXJpb2QgPCAqcGVyaW9kIC0gZ2xiKSB7CisJCQkqcGVyaW9kID0gbHViOworCQl9IGVsc2UgeworCQkJKnBlcmlvZCA9IGdsYjsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfUk9VTkRfVVA6CisJCSpwZXJpb2QgPSBsdWI7CisJCWJyZWFrOworCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkqcGVyaW9kID0gZ2xiOworCQlicmVhazsKKwl9CisKKwkvLyBzZXQgY2xvY2sgYml0cyBmb3IgY29uZmlnIHJlZ2lzdGVyIGFwcHJvcHJpYXRlbHkKKwlkZXZwcml2LT5jb25maWdfYml0cyAmPSB+Q0xPQ0tfTUFTSzsKKwlpZiAoKnBlcmlvZCA9PSBsdWIpIHsKKwkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgfD0KKwkJCUNMT0NLX1NFTEVDVF9CSVRTKGx1Yl9pbmRleCkgfAorCQkJQ0xPQ0tfRElWSVNPUl9CSVRTKGx1Yl9kaXZpc29yX3NoaWZ0KTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5jb25maWdfYml0cyB8PQorCQkJQ0xPQ0tfU0VMRUNUX0JJVFMoZ2xiX2luZGV4KSB8CisJCQlDTE9DS19ESVZJU09SX0JJVFMoZ2xiX2Rpdmlzb3Jfc2hpZnQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGEyMTUwX3NldF9jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHN0YXJ0X2NoYW5uZWwsCisJdW5zaWduZWQgaW50IG51bV9jaGFubmVscykKK3sKKwlpZiAoc3RhcnRfY2hhbm5lbCArIG51bV9jaGFubmVscyA+IDQpCisJCXJldHVybiAtMTsKKworCWRldnByaXYtPmNvbmZpZ19iaXRzICY9IH5DSEFOTkVMX01BU0s7CisKKwlzd2l0Y2ggKG51bV9jaGFubmVscykgeworCWNhc2UgMToKKwkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgfD0gQ0hBTk5FTF9CSVRTKDB4NCB8IHN0YXJ0X2NoYW5uZWwpOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmIChzdGFydF9jaGFubmVsID09IDApIHsKKwkJCWRldnByaXYtPmNvbmZpZ19iaXRzIHw9IENIQU5ORUxfQklUUygweDIpOworCQl9IGVsc2UgaWYgKHN0YXJ0X2NoYW5uZWwgPT0gMikgeworCQkJZGV2cHJpdi0+Y29uZmlnX2JpdHMgfD0gQ0hBTk5FTF9CSVRTKDB4Myk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSA0OgorCQlkZXZwcml2LT5jb25maWdfYml0cyB8PSBDSEFOTkVMX0JJVFMoMHgxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0X2FvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNjNDZiNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdF9hby5jCkBAIC0wLDAgKzEsNDU0IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pX2F0X2FvLmMKKyAgICBEcml2ZXIgZm9yIE5JIEFULUFPLTYvMTAgYm9hcmRzCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwLDIwMDIgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IG5pX2F0X2FvCitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgQVQtQU8tNi8xMAorRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBBVC1BTy02IChhdC1hby02KSwgQVQtQU8tMTAgKGF0LWFvLTEwKQorU3RhdHVzOiBzaG91bGQgd29yaworQXV0aG9yOiBkcworVXBkYXRlZDogU3VuIERlYyAyNiAxMjoyNjoyOCBFU1QgMjAwNAorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEgKHVudXNlZCkKKyAgWzJdIC0gRE1BICh1bnVzZWQpCisgIFszXSAtIGFuYWxvZyBvdXRwdXQgcmFuZ2UsIHNldCBieSBqdW1wZXJzIG9uIGhhcmR3YXJlICgwIGZvciAtMTAgdG8gMTBWIGJpcG9sYXIsIDEgZm9yIDBWIHRvIDEwViB1bmlwb2xhcikKKworKi8KKy8qCisgKiBSZWdpc3Rlci1sZXZlbCBwcm9ncmFtbWluZyBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTkkKKyAqIGRvY3VtZW50IDMyMDM3OS5wZGYuCisgKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKy8qIGJvYXJkIGVnaXN0ZXJzICovCisvKiByZWdpc3RlcnMgd2l0aCBfMl8gYXJlIGFjY2Vzc2VkIHdoZW4gR1JQMldSIGlzIHNldCBpbiBDRkcxICovCisKKyNkZWZpbmUgQVRBT19TSVpFIDB4MjAKKworI2RlZmluZSBBVEFPXzJfRE1BVENDTFIJCTB4MDAJLyogVyAxNiAqLworI2RlZmluZSBBVEFPX0RJTgkJMHgwMAkvKiBSIDE2ICovCisjZGVmaW5lIEFUQU9fRE9VVAkJMHgwMAkvKiBXIDE2ICovCisKKyNkZWZpbmUgQVRBT19DRkcyCQkweDAyCS8qIFcgMTYgKi8KKyNkZWZpbmUgQ0FMTEQxCTB4ODAwMAorI2RlZmluZSBDQUxMRDAJMHg0MDAwCisjZGVmaW5lIEZGUlRFTgkweDIwMDAKKyNkZWZpbmUgREFDMlM4CTB4MTAwMAorI2RlZmluZSBEQUMyUzYJMHgwODAwCisjZGVmaW5lIERBQzJTNAkweDA0MDAKKyNkZWZpbmUgREFDMlMyCTB4MDIwMAorI2RlZmluZSBEQUMyUzAJMHgwMTAwCisjZGVmaW5lIExEQUM4CQkweDAwODAKKyNkZWZpbmUgTERBQzYJCTB4MDA0MAorI2RlZmluZSBMREFDNAkJMHgwMDIwCisjZGVmaW5lIExEQUMyCQkweDAwMTAKKyNkZWZpbmUgTERBQzAJCTB4MDAwOAorI2RlZmluZSBQUk9NRU4JMHgwMDA0CisjZGVmaW5lIFNDTEsJCTB4MDAwMgorI2RlZmluZSBTREFUQQkJMHgwMDAxCisKKyNkZWZpbmUgQVRBT18yX0lOVDFDTFIJCTB4MDIJLyogVyAxNiAqLworCisjZGVmaW5lIEFUQU9fQ0ZHMwkJMHgwNAkvKiBXIDE2ICovCisjZGVmaW5lIERNQU1PREUJMHgwMDQwCisjZGVmaW5lIENMS09VVAkweDAwMjAKKyNkZWZpbmUgUkNMS0VOCTB4MDAxMAorI2RlZmluZSBET1VURU4yCTB4MDAwOAorI2RlZmluZSBET1VURU4xCTB4MDAwNAorI2RlZmluZSBFTjJfNVYJMHgwMDAyCisjZGVmaW5lIFNDQU5FTgkweDAwMDEKKworI2RlZmluZSBBVEFPXzJfSU5UMkNMUgkJMHgwNAkvKiBXIDE2ICovCisKKyNkZWZpbmUgQVRBT184MkM1M19CQVNFCQkweDA2CS8qIFJXIDggKi8KKworI2RlZmluZSBBVEFPXzgyQzUzX0NOVFIxCTB4MDYJLyogUlcgOCAqLworI2RlZmluZSBBVEFPXzgyQzUzX0NOVFIyCTB4MDcJLyogUlcgOCAqLworI2RlZmluZSBBVEFPXzgyQzUzX0NOVFIzCTB4MDgJLyogUlcgOCAqLworI2RlZmluZSBBVEFPXzgyQzUzX0NOVFJDTUQJMHgwOQkvKiBXIDggKi8KKyNkZWZpbmUgQ05UUlNFTDEJMHg4MAorI2RlZmluZSBDTlRSU0VMMAkweDQwCisjZGVmaW5lIFJXU0VMMQkweDIwCisjZGVmaW5lIFJXU0VMMAkweDEwCisjZGVmaW5lIE1PREVTRUwyCTB4MDgKKyNkZWZpbmUgTU9ERVNFTDEJMHgwNAorI2RlZmluZSBNT0RFU0VMMAkweDAyCisjZGVmaW5lIEJDRFNFTAkweDAxCisgIC8qIHJlYWQtYmFjayBjb21tYW5kICovCisjZGVmaW5lIENPVU5UCQkweDIwCisjZGVmaW5lIFNUQVRVUwkweDEwCisjZGVmaW5lIENOVFIzCQkweDA4CisjZGVmaW5lIENOVFIyCQkweDA0CisjZGVmaW5lIENOVFIxCQkweDAyCisgIC8qIHN0YXR1cyAqLworI2RlZmluZSBPVVQJCTB4ODAKKyNkZWZpbmUgX05VTEwJCTB4NDAKKyNkZWZpbmUgUlcxCQkweDIwCisjZGVmaW5lIFJXMAkJMHgxMAorI2RlZmluZSBNT0RFMgkJMHgwOAorI2RlZmluZSBNT0RFMQkJMHgwNAorI2RlZmluZSBNT0RFMAkJMHgwMgorI2RlZmluZSBCQ0QJCTB4MDEKKworI2RlZmluZSBBVEFPXzJfUlRTSVNIRlQJCTB4MDYJLyogVyA4ICovCisjZGVmaW5lIFJTSQkJMHgwMQorCisjZGVmaW5lIEFUQU9fMl9SVFNJU1RSQgkJMHgwNwkvKiBXIDggKi8KKworI2RlZmluZSBBVEFPX0NGRzEJCTB4MGEJLyogVyAxNiAqLworI2RlZmluZSBFWFRJTlQyRU4JMHg4MDAwCisjZGVmaW5lIEVYVElOVDFFTgkweDQwMDAKKyNkZWZpbmUgQ05USU5UMkVOCTB4MjAwMAorI2RlZmluZSBDTlRJTlQxRU4JMHgxMDAwCisjZGVmaW5lIFRDSU5URU4JMHgwODAwCisjZGVmaW5lIENOVDFTUkMJMHgwNDAwCisjZGVmaW5lIENOVDJTUkMJMHgwMjAwCisjZGVmaW5lIEZJRk9FTgkweDAxMDAKKyNkZWZpbmUgR1JQMldSCTB4MDA4MAorI2RlZmluZSBFWFRVUERFTgkweDAwNDAKKyNkZWZpbmUgRE1BUlEJCTB4MDAyMAorI2RlZmluZSBETUFFTgkJMHgwMDEwCisjZGVmaW5lIENIX21hc2sJMHgwMDBmCisjZGVmaW5lIEFUQU9fU1RBVFVTCQkweDBhCS8qIFIgMTYgKi8KKyNkZWZpbmUgRkgJCTB4MDA0MAorI2RlZmluZSBGRQkJMHgwMDIwCisjZGVmaW5lIEZGCQkweDAwMTAKKyNkZWZpbmUgSU5UMgkJMHgwMDA4CisjZGVmaW5lIElOVDEJCTB4MDAwNAorI2RlZmluZSBUQ0lOVAkJMHgwMDAyCisjZGVmaW5lIFBST01PVVQJMHgwMDAxCisKKyNkZWZpbmUgQVRBT19GSUZPX1dSSVRFCQkweDBjCS8qIFcgMTYgKi8KKyNkZWZpbmUgQVRBT19GSUZPX0NMRUFSCQkweDBjCS8qIFIgMTYgKi8KKyNkZWZpbmUgQVRBT19EQUNuKHgpCQkoMHgwYyArIDIqKHgpKQkvKiBXICovCisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHR3byBpbWFnaW5hcnkgYm9hcmRzLiAgRGVzY3JpYmluZyB0aGUKKyAqIGJvYXJkcyBpbiB0aGlzIHdheSBpcyBvcHRpb25hbCwgYW5kIGNvbXBsZXRlbHkgZHJpdmVyLWRlcGVuZGVudC4KKyAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgorICovCitzdHJ1Y3QgYXRhb19ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbl9hb19jaGFuczsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhb19ib2FyZCBhdGFvX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkiYWktYW8tNiIsCisJICAgICAgbl9hb19jaGFuczo2LAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiYWktYW8tMTAiLAorCSAgICAgIG5fYW9fY2hhbnM6MTAsCisJCX0sCit9OworCisjZGVmaW5lIHRoaXNib2FyZCAoKHN0cnVjdCBhdGFvX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBhdGFvX3ByaXZhdGUgeworCisJdW5zaWduZWQgc2hvcnQgY2ZnMTsKKwl1bnNpZ25lZCBzaG9ydCBjZmcyOworCXVuc2lnbmVkIHNob3J0IGNmZzM7CisKKwkvKiBVc2VkIGZvciBBTyByZWFkYmFjayAqLworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1sxMF07Cit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgYXRhb19wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IGF0YW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgYXRhb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9hdGFvID0geworICAgICAgZHJpdmVyX25hbWU6Im5pX2F0X2FvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDphdGFvX2F0dGFjaCwKKyAgICAgIGRldGFjaDphdGFvX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmF0YW9fYm9hcmRzWzBdLm5hbWUsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBhdGFvX2JvYXJkKSwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoYXRhb19ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBhdGFvX2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfYXRhbyk7CisKK3N0YXRpYyB2b2lkIGF0YW9fcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgaW50IGF0YW9fYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYXRhb19hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBhdGFvX2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYXRhb19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYXRhb19jYWxpYl9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgYXRhb19jYWxpYl9pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgYXRhb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJaW50IGFvX3VuaXBvbGFyOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJaWYgKGlvYmFzZSA9PSAwKQorCQlpb2Jhc2UgPSAweDFjMDsKKwlhb191bmlwb2xhciA9IGl0LT5vcHRpb25zWzNdOworCisJcHJpbnRrKCJjb21lZGklZDogbmlfYXRfYW86IDB4JTA0bHgiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIEFUQU9fU0laRSwgIm5pX2F0X2FvIikpIHsKKwkJcHJpbnRrKCIgSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwkvL2Rldi0+Ym9hcmRfcHRyID0gYXRhb19wcm9iZShkZXYpOworCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGF0YW9fcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5uX2FvX2NoYW5zOworCXMtPm1heGRhdGEgPSAoMSA8PCAxMikgLSAxOworCWlmIChhb191bmlwb2xhcikKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5pcG9sYXIxMDsKKwllbHNlCisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMDsKKwlzLT5pbnNuX3dyaXRlID0gJmF0YW9fYW9fd2luc247CisJcy0+aW5zbl9yZWFkID0gJmF0YW9fYW9fcmluc247CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+aW5zbl9iaXRzID0gYXRhb19kaW9faW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gYXRhb19kaW9faW5zbl9jb25maWc7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBjYWxkYWMgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NBTElCOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9JTlRFUk5BTDsKKwlzLT5uX2NoYW4gPSAyMTsKKwlzLT5tYXhkYXRhID0gMHhmZjsKKwlzLT5pbnNuX3JlYWQgPSBhdGFvX2NhbGliX2luc25fcmVhZDsKKwlzLT5pbnNuX3dyaXRlID0gYXRhb19jYWxpYl9pbnNuX3dyaXRlOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJLyogZWVwcm9tIHN1YmRldmljZSAqLworCS8vcy0+dHlwZT1DT01FRElfU1VCRF9FRVBST007CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKworCWF0YW9fcmVzZXQoZGV2KTsKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0YW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IGF0YW86IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBBVEFPX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0YW9fcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJLyogVGhpcyBpcyB0aGUgcmVzZXQgc2VxdWVuY2UgZGVzY3JpYmVkIGluIHRoZSBtYW51YWwgKi8KKworCWRldnByaXYtPmNmZzEgPSAwOworCW91dHcoZGV2cHJpdi0+Y2ZnMSwgZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzEpOworCisJb3V0YihSV1NFTDAgfCBNT0RFU0VMMiwgZGV2LT5pb2Jhc2UgKyBBVEFPXzgyQzUzX0NOVFJDTUQpOworCW91dGIoMHgwMywgZGV2LT5pb2Jhc2UgKyBBVEFPXzgyQzUzX0NOVFIxKTsKKwlvdXRiKENOVFJTRUwwIHwgUldTRUwwIHwgTU9ERVNFTDIsIGRldi0+aW9iYXNlICsgQVRBT184MkM1M19DTlRSQ01EKTsKKworCWRldnByaXYtPmNmZzIgPSAwOworCW91dHcoZGV2cHJpdi0+Y2ZnMiwgZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzIpOworCisJZGV2cHJpdi0+Y2ZnMyA9IDA7CisJb3V0dyhkZXZwcml2LT5jZmczLCBkZXYtPmlvYmFzZSArIEFUQU9fQ0ZHMyk7CisKKwlpbncoZGV2LT5pb2Jhc2UgKyBBVEFPX0ZJRk9fQ0xFQVIpOworCisJZGV2cHJpdi0+Y2ZnMSB8PSBHUlAyV1I7CisJb3V0dyhkZXZwcml2LT5jZmcxLCBkZXYtPmlvYmFzZSArIEFUQU9fQ0ZHMSk7CisKKwlvdXR3KDAsIGRldi0+aW9iYXNlICsgQVRBT18yX0lOVDFDTFIpOworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBBVEFPXzJfSU5UMkNMUik7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIEFUQU9fMl9ETUFUQ0NMUik7CisKKwlkZXZwcml2LT5jZmcxICY9IH5HUlAyV1I7CisJb3V0dyhkZXZwcml2LT5jZmcxLCBkZXYtPmlvYmFzZSArIEFUQU9fQ0ZHMSk7Cit9CisKK3N0YXRpYyBpbnQgYXRhb19hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlzaG9ydCBiaXRzOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQliaXRzID0gZGF0YVtpXSAtIDB4ODAwOworCQlpZiAoY2hhbiA9PSAwKSB7CisJCQlkZXZwcml2LT5jZmcxIHw9IEdSUDJXUjsKKwkJCW91dHcoZGV2cHJpdi0+Y2ZnMSwgZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzEpOworCQl9CisJCW91dHcoYml0cywgZGV2LT5pb2Jhc2UgKyBBVEFPX0RBQ24oY2hhbikpOworCQlpZiAoY2hhbiA9PSAwKSB7CisJCQlkZXZwcml2LT5jZmcxICY9IH5HUlAyV1I7CisJCQlvdXR3KGRldnByaXYtPmNmZzEsIGRldi0+aW9iYXNlICsgQVRBT19DRkcxKTsKKwkJfQorCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgYXRhb19hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGF0YW9fZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJCW91dHcocy0+c3RhdGUsIGRldi0+aW9iYXNlICsgQVRBT19ET1VUKTsKKwl9CisKKwlkYXRhWzFdID0gaW53KGRldi0+aW9iYXNlICsgQVRBT19ESU4pOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYXRhb19kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgaW50IG1hc2ssIGJpdDsKKworCS8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcworCSAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKKwkgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKKwkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KKworCW1hc2sgPSAoY2hhbiA8IDQpID8gMHgwZiA6IDB4ZjA7CisJYml0ID0gKGNoYW4gPCA0KSA/IERPVVRFTjEgOiBET1VURU4yOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IG1hc2s7CisJCWRldnByaXYtPmNmZzMgfD0gYml0OworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJcy0+aW9fYml0cyAmPSB+bWFzazsKKwkJZGV2cHJpdi0+Y2ZnMyAmPSB+Yml0OworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJZGF0YVsxXSA9CisJCQkocy0+CisJCQlpb19iaXRzICYgKDEgPDwgY2hhbikpID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlvdXR3KGRldnByaXYtPmNmZzMsIGRldi0+aW9iYXNlICsgQVRBT19DRkczKTsKKworCXJldHVybiAxOworfQorCisvKgorICogRmlndXJlIDItMSBpbiB0aGUgbWFudWFsIHNob3dzIDMgY2hpcHMgbGFiZWxlZCBEQUM4ODAwLCB3aGljaAorICogYXJlIDgtY2hhbm5lbCA4LWJpdCBEQUNzLiAgVGhlc2UgYXJlIG1vc3QgbGlrZWx5IHRoZSBjYWxpYnJhdGlvbgorICogREFDcy4gIEl0IGlzIG5vdCBleHBsaWNpdGx5IHN0YXRlZCBpbiB0aGUgbWFudWFsIGhvdyB0byBhY2Nlc3MKKyAqIHRoZSBjYWxkYWNzLCBidXQgd2UgY2FuIGd1ZXNzLgorICovCitzdGF0aWMgaW50IGF0YW9fY2FsaWJfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSAwOwkvKiBYWFggKi8KKwl9CisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyBpbnQgYXRhb19jYWxpYl9pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgYml0c3RyaW5nLCBiaXQ7CisJdW5zaWduZWQgaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWJpdHN0cmluZyA9ICgoY2hhbiAmIDB4NykgPDwgOCkgfCAoZGF0YVtpbnNuLT5uIC0gMV0gJiAweGZmKTsKKworCWZvciAoYml0ID0gMSA8PCAoMTEgLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJb3V0dyhkZXZwcml2LT5jZmcyIHwgKChiaXQgJiBiaXRzdHJpbmcpID8gU0RBVEEgOiAwKSwKKwkJCWRldi0+aW9iYXNlICsgQVRBT19DRkcyKTsKKwkJb3V0dyhkZXZwcml2LT5jZmcyIHwgU0NMSyB8ICgoYml0ICYgYml0c3RyaW5nKSA/IFNEQVRBIDogMCksCisJCQlkZXYtPmlvYmFzZSArIEFUQU9fQ0ZHMik7CisJfQorCS8qIHN0cm9iZSB0aGUgYXBwcm9wcmlhdGUgY2FsZGFjICovCisJb3V0dyhkZXZwcml2LT5jZmcyIHwgKCgoY2hhbiA+PiAzKSArIDEpIDw8IDE0KSwKKwkJZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzIpOworCW91dHcoZGV2cHJpdi0+Y2ZnMiwgZGV2LT5pb2Jhc2UgKyBBVEFPX0NGRzIpOworCisJcmV0dXJuIGluc24tPm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzM4NTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8uYwpAQCAtMCwwICsxLDUxMyBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9uaV9hdG1pby5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBOSSBBVC1NSU8gRSBzZXJpZXMgY2FyZHMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKy8qCitEcml2ZXI6IG5pX2F0bWlvCitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgQVQtTUlPLUUgc2VyaWVzCitBdXRob3I6IGRzCitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIEFULU1JTy0xNkUtMSAobmlfYXRtaW8pLAorICBBVC1NSU8tMTZFLTIsIEFULU1JTy0xNkUtMTAsIEFULU1JTy0xNkRFLTEwLCBBVC1NSU8tNjRFLTMsCisgIEFULU1JTy0xNlhFLTUwLCBBVC1NSU8tMTZYRS0xMCwgQVQtQUktMTZYRS0xMAorU3RhdHVzOiB3b3JrcworVXBkYXRlZDogVGh1IE1heSAgMSAyMDowMzowMiBDRFQgMjAwMworCitUaGUgZHJpdmVyIGhhcyAyLjYga2VybmVsIGlzYXBucCBzdXBwb3J0LCBhbmQKK3dpbGwgYXV0b21hdGljYWxseSBwcm9iZSBmb3IgYSBzdXBwb3J0ZWQgYm9hcmQgaWYgdGhlCitJL08gYmFzZSBpcyBsZWZ0IHVuc3BlY2lmaWVkIHdpdGggY29tZWRpX2NvbmZpZy4KK0hvd2V2ZXIsIG1hbnkgb2YKK3RoZSBpc2FwbnAgaWQgbnVtYmVycyBhcmUgdW5rbm93bi4gIElmIHlvdXIgYm9hcmQgaXMgbm90CityZWNvZ25pemVkLCBwbGVhc2Ugc2VuZCB0aGUgb3V0cHV0IG9mICdjYXQgL3Byb2MvaXNhcG5wJworKHlvdSBtYXkgbmVlZCB0byBtb2Rwcm9iZSB0aGUgaXNhLXBucCBtb2R1bGUgZm9yCisvcHJvYy9pc2FwbnAgdG8gZXhpc3QpIHNvIHRoZQoraWQgbnVtYmVycyBmb3IgeW91ciBib2FyZCBjYW4gYmUgYWRkZWQgdG8gdGhlIGRyaXZlci4KKworT3RoZXJ3aXNlLCB5b3UgY2FuIHVzZSB0aGUgaXNhcG5wdG9vbHMgcGFja2FnZSB0byBjb25maWd1cmUKK3lvdXIgYm9hcmQuICBVc2UgaXNhcG5wIHRvCitjb25maWd1cmUgdGhlIEkvTyBiYXNlIGFuZCBJUlEgZm9yIHRoZSBib2FyZCwgYW5kIHRoZW4gcGFzcwordGhlIHNhbWUgdmFsdWVzIGFzCitwYXJhbWV0ZXJzIGluIGNvbWVkaV9jb25maWcuICBBIHNhbXBsZSBpc2FwbnAuY29uZiBmaWxlIGlzIGluY2x1ZGVkCitpbiB0aGUgZXRjLyBkaXJlY3Rvcnkgb2YgQ29tZWRpbGliLgorCitDb21lZGlsaWIgaW5jbHVkZXMgYSB1dGlsaXR5IHRvIGF1dG9jYWxpYnJhdGUgdGhlc2UgYm9hcmRzLiAgVGhlCitib2FyZHMgc2VlbSB0byBib290IGludG8gYSBzdGF0ZSB3aGVyZSB0aGUgYWxsIGNhbGlicmF0aW9uIERBQ3MKK2FyZSBhdCBvbmUgZXh0cmVtZSBvZiB0aGVpciByYW5nZSwgdGh1cyB0aGUgZGVmYXVsdCBjYWxpYnJhdGlvbgoraXMgdGVycmlibGUuICBDYWxpYnJhdGlvbiBhdCBib290IGlzIHN0cm9uZ2x5IGVuY291cmFnZWQuCisKK1RvIHVzZSB0aGUgZXh0ZW5kZWQgZGlnaXRhbCBJL08gb24gc29tZSBvZiB0aGUgYm9hcmRzLCBlbmFibGUgdGhlCis4MjU1IGRyaXZlciB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBDb21lZGkgc291cmNlIHRyZWUuCisKK0V4dGVybmFsIHRyaWdnZXJpbmcgaXMgc3VwcG9ydGVkIGZvciBzb21lIGV2ZW50cy4gIFRoZSBjaGFubmVsIGluZGV4Cisoc2Nhbl9iZWdpbl9hcmcsIGV0Yy4pIG1hcHMgdG8gUEZJMCAtIFBGSTkuCisKK1NvbWUgb2YgdGhlIG1vcmUgZXNvdGVyaWMgdHJpZ2dlcmluZyBwb3NzaWJpbGl0aWVzIG9mIHRoZXNlIGJvYXJkcworYXJlIG5vdCBzdXBwb3J0ZWQuCisqLworLyoKKwlUaGUgcmVhbCBndXRzIG9mIHRoZSBkcml2ZXIgaXMgaW4gbmlfbWlvX2NvbW1vbi5jLCB3aGljaCBpcyBpbmNsdWRlZAorCWJvdGggaGVyZSBhbmQgaW4gbmlfcGNpbWlvLmMKKworCUludGVycnVwdCBzdXBwb3J0IGFkZGVkIGJ5IFRydXh0b24gRnVsdG9uIDx0cnV4QHRydXh0b24uY29tPgorCisJUmVmZXJlbmNlcyBmb3Igc3BlY2lmaWNhdGlvbnM6CisKKwkgICAzNDA3NDdiLnBkZiAgUmVnaXN0ZXIgTGV2ZWwgUHJvZ3JhbW1lciBNYW51YWwgKG9ic29sZXRlKQorCSAgIDM0MDc0N2MucGRmICBSZWdpc3RlciBMZXZlbCBQcm9ncmFtbWVyIE1hbnVhbCAobmV3KQorCSAgIERBUS1TVEMgcmVmZXJlbmNlIG1hbnVhbAorCisJT3RoZXIgcG9zc2libHkgcmVsZXZhbnQgaW5mbzoKKworCSAgIDMyMDUxN2MucGRmICBVc2VyIG1hbnVhbCAob2Jzb2xldGUpCisJICAgMzIwNTE3Zi5wZGYgIFVzZXIgbWFudWFsIChuZXcpCisJICAgMzIwODg5YS5wZGYgIGRlbGV0ZQorCSAgIDMyMDkwNmMucGRmICBtYXhpbXVtIHNpZ25hbCByYXRpbmdzCisJICAgMzIxMDY2YS5wZGYgIGFib3V0IDE2eAorCSAgIDMyMTc5MWEucGRmICBkaXNjb250aW51YXRpb24gb2YgYXQtbWlvLTE2ZS0xMCByZXYuIGMKKwkgICAzMjE4MDhhLnBkZiAgYWJvdXQgYXQtbWlvLTE2ZS0xMCByZXYgUAorCSAgIDMyMTgzN2EucGRmICBkaXNjb250aW51YXRpb24gb2YgYXQtbWlvLTE2ZGUtMTAgcmV2IGQKKwkgICAzMjE4MzhhLnBkZiAgYWJvdXQgYXQtbWlvLTE2ZGUtMTAgcmV2IE4KKworCUlTU1VFUzoKKworCW5lZWQgdG8gZGVhbCB3aXRoIGV4dGVybmFsIHJlZmVyZW5jZSBmb3IgREFDLCBhbmQgb3RoZXIgREFDCisJcHJvcGVydGllcyBpbiBib2FyZCBwcm9wZXJ0aWVzCisKKwlkZWFsIHdpdGggYXQtbWlvLTE2ZGUtMTAgcmV2aXNpb24gRCB0byBOIGNoYW5nZXMsIGV0Yy4KKworKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2FwbnAuaD4KKworI2luY2x1ZGUgIm5pX3N0Yy5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKworI3VuZGVmIERFQlVHCisKKyNkZWZpbmUgQVRNSU8gMQorI3VuZGVmIFBDSU1JTworCisvKgorICogIEFUIHNwZWNpZmljIHNldHVwCisgKi8KKworI2RlZmluZSBOSV9TSVpFIDB4MjAKKworI2RlZmluZSBNQVhfTl9DQUxEQUNTIDMyCisKK3N0YXRpYyBjb25zdCBuaV9ib2FyZCBuaV9ib2FyZHNbXSA9IHsKKyAgICAgIHtkZXZpY2VfaWQ6NDQsCisJICAgICAgaXNhcG5wX2lkOjB4MDAwMCwvKiBYWFggdW5rbm93biAqLworCSAgICAgIG5hbWU6CSJhdC1taW8tMTZlLTEiLAorCSAgICAgIG5fYWRjaGFuOjE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWlfZmlmb19kZXB0aDo4MTkyLAorCSAgICAgIGFsd2F5c2RpdGhlcjowLAorCSAgICAgIGdhaW5sa3VwOmFpX2dhaW5fMTYsCisJICAgICAgYWlfc3BlZWQ6ODAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb19maWZvX2RlcHRoOjIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJICAgICAgYW9fdW5pcG9sYXI6MSwKKwkgICAgICBhb19zcGVlZDoxMDAwLAorCSAgICAgIGhhc184MjU1OjAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJICAgICAgY2FsZGFjOgl7bWI4ODM0MX0sCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjI1LAorCSAgICAgIGlzYXBucF9pZDoweDE5MDAsCisJICAgICAgbmFtZToJImF0LW1pby0xNmUtMiIsCisJICAgICAgbl9hZGNoYW46MTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjIwNDgsCisJICAgICAgYWx3YXlzZGl0aGVyOjAsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNiwKKwkgICAgICBhaV9zcGVlZDoyMDAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb19maWZvX2RlcHRoOjIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJICAgICAgYW9fdW5pcG9sYXI6MSwKKwkgICAgICBhb19zcGVlZDoxMDAwLAorCSAgICAgIGhhc184MjU1OjAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJICAgICAgY2FsZGFjOgl7bWI4ODM0MX0sCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjM2LAorCSAgICAgIGlzYXBucF9pZDoweDI0MDAsCisJICAgICAgbmFtZToJImF0LW1pby0xNmUtMTAiLAorCSAgICAgIG5fYWRjaGFuOjE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWlfZmlmb19kZXB0aDo1MTIsCisJICAgICAgYWx3YXlzZGl0aGVyOjAsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTIsCisJICAgICAgYW9fZmlmb19kZXB0aDowLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCSAgICAgIGFvX3VuaXBvbGFyOjEsCisJICAgICAgYW9fc3BlZWQ6MTAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJICAgICAgY2FsZGFjOgl7YWQ4ODA0X2RlYnVnfSwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorICAgICAge2RldmljZV9pZDozNywKKwkgICAgICBpc2FwbnBfaWQ6MHgyNTAwLAorCSAgICAgIG5hbWU6CSJhdC1taW8tMTZkZS0xMCIsCisJICAgICAgbl9hZGNoYW46MTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjUxMiwKKwkgICAgICBhbHdheXNkaXRoZXI6MCwKKwkgICAgICBnYWlubGt1cDphaV9nYWluXzE2LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb19maWZvX2RlcHRoOjAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJICAgICAgYW9fdW5pcG9sYXI6MSwKKwkgICAgICBhb19zcGVlZDoxMDAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkgICAgICBjYWxkYWM6CXthZDg4MDRfZGVidWd9LAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjM4LAorCSAgICAgIGlzYXBucF9pZDoweDI2MDAsCisJICAgICAgbmFtZToJImF0LW1pby02NGUtMyIsCisJICAgICAgbl9hZGNoYW46NjQsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjIwNDgsCisJICAgICAgYWx3YXlzZGl0aGVyOjAsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNiwKKwkgICAgICBhaV9zcGVlZDoyMDAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb19maWZvX2RlcHRoOjIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJICAgICAgYW9fdW5pcG9sYXI6MSwKKwkgICAgICBhb19zcGVlZDoxMDAwLAorCSAgICAgIGhhc184MjU1OjAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJICAgICAgY2FsZGFjOgl7YWQ4ODA0X2RlYnVnfSwKKwkJfSwKKyAgICAgIHtkZXZpY2VfaWQ6MzksCisJICAgICAgaXNhcG5wX2lkOjB4MjcwMCwKKwkgICAgICBuYW1lOgkiYXQtbWlvLTE2eGUtNTAiLAorCSAgICAgIG5fYWRjaGFuOjE2LAorCSAgICAgIGFkYml0czoJMTYsCisJICAgICAgYWlfZmlmb19kZXB0aDo1MTIsCisJICAgICAgYWx3YXlzZGl0aGVyOjEsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl84LAorCSAgICAgIGFpX3NwZWVkOjUwMDAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb19maWZvX2RlcHRoOjAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCSAgICAgIGFvX3VuaXBvbGFyOjAsCisJICAgICAgYW9fc3BlZWQ6NTAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJICAgICAgY2FsZGFjOgl7ZGFjODgwMCwgZGFjODA0M30sCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKyAgICAgIHtkZXZpY2VfaWQ6NTAsCisJICAgICAgaXNhcG5wX2lkOjB4MDAwMCwvKiBYWFggdW5rbm93biAqLworCSAgICAgIG5hbWU6CSJhdC1taW8tMTZ4ZS0xMCIsCisJICAgICAgbl9hZGNoYW46MTYsCisJICAgICAgYWRiaXRzOgkxNiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjUxMiwKKwkgICAgICBhbHdheXNkaXRoZXI6MSwKKwkgICAgICBnYWlubGt1cDphaV9nYWluXzE0LAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxNiwKKwkgICAgICBhb19maWZvX2RlcHRoOjIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJICAgICAgYW9fdW5pcG9sYXI6MSwKKwkgICAgICBhb19zcGVlZDoxMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCSAgICAgIGNhbGRhYzoJe2RhYzg4MDAsIGRhYzgwNDMsIGFkODUyMn0sCisJICAgICAgaGFzXzgyNTU6MCwKKwkJfSwKKyAgICAgIHtkZXZpY2VfaWQ6NTEsCisJICAgICAgaXNhcG5wX2lkOjB4MDAwMCwvKiBYWFggdW5rbm93biAqLworCSAgICAgIG5hbWU6CSJhdC1haS0xNnhlLTEwIiwKKwkgICAgICBuX2FkY2hhbjoxNiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFpX2ZpZm9fZGVwdGg6NTEyLAorCSAgICAgIGFsd2F5c2RpdGhlcjoxLAkvKiB1bmtub3duICovCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNCwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBuX2FvY2hhbjowLAorCSAgICAgIGFvYml0czoJMCwKKwkgICAgICBhb19maWZvX2RlcHRoOjAsCisJICAgICAgYW9fdW5pcG9sYXI6MCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkgICAgICBjYWxkYWM6CXtkYWM4ODAwLCBkYWM4MDQzLCBhZDg1MjJ9LAorCSAgICAgIGhhc184MjU1OjAsCisJCX0KK307CisKK3N0YXRpYyBjb25zdCBpbnQgbmlfaXJxcGluW10gPQorCXsgLTEsIC0xLCAtMSwgMCwgMSwgMiwgLTEsIDMsIC0xLCAtMSwgNCwgNSwgNiwgLTEsIC0xLCA3IH07CisKKyNkZWZpbmUgaW50ZXJydXB0X3BpbihhKQkobmlfaXJxcGluWyhhKV0pCisKKyNkZWZpbmUgSVJRX1BPTEFSSVRZIDAKKworI2RlZmluZSBOSV9FX0lSUV9GTEFHUwkJMAorCit0eXBlZGVmIHN0cnVjdCB7CisJc3RydWN0IHBucF9kZXYgKmlzYXBucF9kZXY7CisgTklfUFJJVkFURV9DT01NT059IG5pX3ByaXZhdGU7CisjZGVmaW5lIGRldnByaXYgKChuaV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKiBIb3cgd2UgYWNjZXNzIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIG5pX3dyaXRlbChhLGIpCQkob3V0bCgoYSksKGIpK2Rldi0+aW9iYXNlKSkKKyNkZWZpbmUgbmlfcmVhZGwoYSkJCShpbmwoKGEpK2Rldi0+aW9iYXNlKSkKKyNkZWZpbmUgbmlfd3JpdGV3KGEsYikJCShvdXR3KChhKSwoYikrZGV2LT5pb2Jhc2UpKQorI2RlZmluZSBuaV9yZWFkdyhhKQkJKGludygoYSkrZGV2LT5pb2Jhc2UpKQorI2RlZmluZSBuaV93cml0ZWIoYSxiKQkJKG91dGIoKGEpLChiKStkZXYtPmlvYmFzZSkpCisjZGVmaW5lIG5pX3JlYWRiKGEpCQkoaW5iKChhKStkZXYtPmlvYmFzZSkpCisKKy8qIEhvdyB3ZSBhY2Nlc3Mgd2luZG93ZWQgcmVnaXN0ZXJzICovCisKKy8qIFdlIGF1dG9tYXRpY2FsbHkgdGFrZSBhZHZhbnRhZ2Ugb2YgU1RDIHJlZ2lzdGVycyB0aGF0IGNhbiBiZQorICogcmVhZC93cml0dGVuIGRpcmVjdGx5IGluIHRoZSBJL08gc3BhY2Ugb2YgdGhlIGJvYXJkLiAgVGhlCisgKiBBVC1NSU8gZGV2aWNlcyBtYXAgdGhlIGxvdyA4IFNUQyByZWdpc3RlcnMgdG8gaW9iYXNlK2FkZHIqMi4gKi8KKworc3RhdGljIHZvaWQgbmlfYXRtaW9fd2luX291dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgZGF0YSwgaW50IGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwlpZiAoKGFkZHIpIDwgOCkgeworCQluaV93cml0ZXcoZGF0YSwgYWRkciAqIDIpOworCX0gZWxzZSB7CisJCW5pX3dyaXRldyhhZGRyLCBXaW5kb3dfQWRkcmVzcyk7CisJCW5pX3dyaXRldyhkYXRhLCBXaW5kb3dfRGF0YSk7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdWludDE2X3QgbmlfYXRtaW9fd2luX2luKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVpbnQxNl90IHJldDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwlpZiAoYWRkciA8IDgpIHsKKwkJcmV0ID0gbmlfcmVhZHcoYWRkciAqIDIpOworCX0gZWxzZSB7CisJCW5pX3dyaXRldyhhZGRyLCBXaW5kb3dfQWRkcmVzcyk7CisJCXJldCA9IG5pX3JlYWR3KFdpbmRvd19EYXRhKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBucF9kZXZpY2VfaWQgZGV2aWNlX2lkc1tdID0geworCXsuaWQgPSAiTklDMTkwMCIsLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICJOSUMyNDAwIiwuZHJpdmVyX2RhdGEgPSAwfSwKKwl7LmlkID0gIk5JQzI1MDAiLC5kcml2ZXJfZGF0YSA9IDB9LAorCXsuaWQgPSAiTklDMjYwMCIsLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICJOSUMyNzAwIiwuZHJpdmVyX2RhdGEgPSAwfSwKKwl7LmlkID0gIiJ9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBpbnQgbmlfYXRtaW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgbmlfYXRtaW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYXRtaW8gPSB7CisgICAgICBkcml2ZXJfbmFtZToibmlfYXRtaW8iLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOm5pX2F0bWlvX2F0dGFjaCwKKyAgICAgIGRldGFjaDpuaV9hdG1pb19kZXRhY2gsCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX2F0bWlvKTsKKworI2luY2x1ZGUgIm5pX21pb19jb21tb24uYyIKKworc3RhdGljIGludCBuaV9nZXRib2FyZHR5cGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCisvKiBjbGVhbiB1cCBhbGxvY2F0ZWQgcmVzb3VyY2VzICovCitzdGF0aWMgaW50IG5pX2F0bWlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwltaW9fY29tbW9uX2RldGFjaChkZXYpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgTklfU0laRSk7CisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisJaWYgKGRldnByaXYtPmlzYXBucF9kZXYpCisJCXBucF9kZXZpY2VfZGV0YWNoKGRldnByaXYtPmlzYXBucF9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfaXNhcG5wX2ZpbmRfYm9hcmQoc3RydWN0IHBucF9kZXYgKipkZXYpCit7CisJc3RydWN0IHBucF9kZXYgKmlzYXBucF9kZXYgPSBOVUxMOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5fbmlfYm9hcmRzOyBpKyspIHsKKwkJaXNhcG5wX2RldiA9IHBucF9maW5kX2RldihOVUxMLAorCQkJSVNBUE5QX1ZFTkRPUignTicsICdJJywgJ0MnKSwKKwkJCUlTQVBOUF9GVU5DVElPTihuaV9ib2FyZHNbaV0uaXNhcG5wX2lkKSwgTlVMTCk7CisKKwkJaWYgKGlzYXBucF9kZXYgPT0gTlVMTCB8fCBpc2FwbnBfZGV2LT5jYXJkID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlpZiAocG5wX2RldmljZV9hdHRhY2goaXNhcG5wX2RldikgPCAwKSB7CisJCQlwcmludGsoIm5pX2F0bWlvOiAlcyBmb3VuZCBidXQgYWxyZWFkeSBhY3RpdmUsIHNraXBwaW5nLlxuIiwgbmlfYm9hcmRzW2ldLm5hbWUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHBucF9hY3RpdmF0ZV9kZXYoaXNhcG5wX2RldikgPCAwKSB7CisJCQlwbnBfZGV2aWNlX2RldGFjaChpc2FwbnBfZGV2KTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCWlmICghcG5wX3BvcnRfdmFsaWQoaXNhcG5wX2RldiwgMCkKKwkJCXx8ICFwbnBfaXJxX3ZhbGlkKGlzYXBucF9kZXYsIDApKSB7CisJCQlwbnBfZGV2aWNlX2RldGFjaChpc2FwbnBfZGV2KTsKKwkJCXByaW50aygibmlfYXRtaW86IHBucCBpbnZhbGlkIHBvcnQgb3IgaXJxLCBhYm9ydGluZ1xuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlicmVhazsKKwl9CisJaWYgKGkgPT0gbl9uaV9ib2FyZHMpCisJCXJldHVybiAtRU5PREVWOworCSpkZXYgPSBpc2FwbnBfZGV2OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX2F0bWlvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgcG5wX2RldiAqaXNhcG5wX2RldjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCWludCBib2FyZDsKKwl1bnNpZ25lZCBpbnQgaXJxOworCisJLyogYWxsb2NhdGUgcHJpdmF0ZSBhcmVhICovCisJaWYgKChyZXQgPSBuaV9hbGxvY19wcml2YXRlKGRldikpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkZXZwcml2LT5zdGNfd3JpdGV3ID0gJm5pX2F0bWlvX3dpbl9vdXQ7CisJZGV2cHJpdi0+c3RjX3JlYWR3ID0gJm5pX2F0bWlvX3dpbl9pbjsKKwlkZXZwcml2LT5zdGNfd3JpdGVsID0gJndpbl9vdXQyOworCWRldnByaXYtPnN0Y19yZWFkbCA9ICZ3aW5faW4yOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJaXNhcG5wX2RldiA9IE5VTEw7CisJaWYgKGlvYmFzZSA9PSAwKSB7CisJCXJldCA9IG5pX2lzYXBucF9maW5kX2JvYXJkKCZpc2FwbnBfZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlvYmFzZSA9IHBucF9wb3J0X3N0YXJ0KGlzYXBucF9kZXYsIDApOworCQlpcnEgPSBwbnBfaXJxKGlzYXBucF9kZXYsIDApOworCQlkZXZwcml2LT5pc2FwbnBfZGV2ID0gaXNhcG5wX2RldjsKKwl9CisKKwkvKiByZXNlcnZlIG91ciBJL08gcmVnaW9uICovCisKKwlwcmludGsoImNvbWVkaSVkOiBuaV9hdG1pbzogMHglMDRseCIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIE5JX1NJWkUsICJuaV9hdG1pbyIpKSB7CisJCXByaW50aygiIEkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKyNpZmRlZiBERUJVRworCS8qIGJvYXJkIGV4aXN0ZW5jZSBzYW5pdHkgY2hlY2sgKi8KKwl7CisJCWludCBpOworCisJCXByaW50aygiIGJvYXJkIGZpbmdlcnByaW50OiIpOworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gMikgeworCQkJcHJpbnRrKCIgJTA0eCAlMDJ4IiwgaW53KGRldi0+aW9iYXNlICsgaSksCisJCQkJaW5iKGRldi0+aW9iYXNlICsgaSArIDEpKTsKKwkJfQorCX0KKyNlbmRpZgorCisJLyogZ2V0IGJvYXJkIHR5cGUgKi8KKworCWJvYXJkID0gbmlfZ2V0Ym9hcmR0eXBlKGRldik7CisJaWYgKGJvYXJkIDwgMCkKKwkJcmV0dXJuIC1FSU87CisKKwlkZXYtPmJvYXJkX3B0ciA9IG5pX2JvYXJkcyArIGJvYXJkOworCisJcHJpbnRrKCIgJXMiLCBib2FyZHR5cGUubmFtZSk7CisJZGV2LT5ib2FyZF9uYW1lID0gYm9hcmR0eXBlLm5hbWU7CisKKwkvKiBpcnEgc3R1ZmYgKi8KKworCWlmIChpcnEgIT0gMCkgeworCQlpZiAoaXJxID4gMTUgfHwgbmlfaXJxcGluW2lycV0gPT0gLTEpIHsKKwkJCXByaW50aygiIGludmFsaWQgaXJxICV1XG4iLCBpcnEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJcHJpbnRrKCIgKCBpcnEgPSAldSApIiwgaXJxKTsKKwkJaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBuaV9FX2ludGVycnVwdCwKKwkJCQkJTklfRV9JUlFfRkxBR1MsICJuaV9hdG1pbyIsIGRldikpIDwgMCkgeworCQkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZGV2LT5pcnEgPSBpcnE7CisJfQorCisJLyogZ2VuZXJpYyBFIHNlcmllcyBzdHVmZiBpbiBuaV9taW9fY29tbW9uLmMgKi8KKworCWlmICgocmV0ID0gbmlfRV9pbml0KGRldiwgaXQpKSA8IDApIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9nZXRib2FyZHR5cGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGRldmljZV9pZCA9IG5pX3JlYWRfZWVwcm9tKGRldiwgNTExKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuX25pX2JvYXJkczsgaSsrKSB7CisJCWlmIChuaV9ib2FyZHNbaV0uZGV2aWNlX2lkID09IGRldmljZV9pZCkgeworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisJaWYgKGRldmljZV9pZCA9PSAyNTUpIHsKKwkJcHJpbnRrKCIgY2FuJ3QgZmluZCBib2FyZFxuIik7CisJfSBlbHNlIGlmIChkZXZpY2VfaWQgPT0gMCkgeworCQlwcmludGsoIiBFRVBST00gcmVhZCBlcnJvciAoPykgb3IgZGV2aWNlIG5vdCBmb3VuZFxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIgdW5rbm93biBkZXZpY2UgSUQgJWQgLS0gY29udGFjdCBhdXRob3JcbiIsIGRldmljZV9pZCk7CisJfQorCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pbzE2ZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2F0bWlvMTZkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVmY2QxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pbzE2ZC5jCkBAIC0wLDAgKzEsODYwIEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8xNmQuYworICAgSGFyZHdhcmUgZHJpdmVyIGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBBVC1NSU8xNkQgYm9hcmQKKyAgIENvcHlyaWdodCAoQykgMjAwMCBDaHJpcyBSLiBCYXVnaGVyIDxiYXVnaGVyQGVudGVyYWN0LmNvbT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBuaV9hdG1pbzE2ZAorRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIEFULU1JTy0xNkQKK0F1dGhvcjogQ2hyaXMgUi4gQmF1Z2hlciA8YmF1Z2hlckBlbnRlcmFjdC5jb20+CitTdGF0dXM6IHVua25vd24KK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gQVQtTUlPLTE2IChhdG1pbzE2KSwgQVQtTUlPLTE2RCAoYXRtaW8xNmQpCisqLworLyoKKyAqIEkgbXVzdCBnaXZlIGNyZWRpdCBoZXJlIHRvIE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PiB3aG8KKyAqIHdyb3RlIHRoZSBkcml2ZXIgZm9yIEFkdmFudGVjJ3MgcGNsODEyIGJvYXJkcy4gSSB1c2VkIHRoZSBpbnRlcnJ1cHQKKyAqIGhhbmRsaW5nIGNvZGUgZnJvbSBoaXMgZHJpdmVyIGFzIGFuIGV4YW1wbGUgZm9yIHRoaXMgb25lLgorICoKKyAqIENocmlzIEJhdWdoZXIKKyAqIDUvMS8yMDAwCisgKgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiODI1NS5oIgorCisvKiBDb25maWd1cmF0aW9uIGFuZCBTdGF0dXMgUmVnaXN0ZXJzICovCisjZGVmaW5lIENPTV9SRUdfMQkweDAwCS8qIHdvIDE2ICovCisjZGVmaW5lIFNUQVRfUkVHCTB4MDAJLyogcm8gMTYgKi8KKyNkZWZpbmUgQ09NX1JFR18yCTB4MDIJLyogd28gMTYgKi8KKy8qIEV2ZW50IFN0cm9iZSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU1RBUlRfQ09OVkVSVF9SRUcJMHgwOAkvKiB3byAxNiAqLworI2RlZmluZSBTVEFSVF9EQVFfUkVHCQkweDBBCS8qIHdvIDE2ICovCisjZGVmaW5lIEFEX0NMRUFSX1JFRwkJMHgwQwkvKiB3byAxNiAqLworI2RlZmluZSBFWFRfU1RST0JFX1JFRwkJMHgwRQkvKiB3byAxNiAqLworLyogQW5hbG9nIE91dHB1dCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgREFDMF9SRUcJCTB4MTAJLyogd28gMTYgKi8KKyNkZWZpbmUgREFDMV9SRUcJCTB4MTIJLyogd28gMTYgKi8KKyNkZWZpbmUgSU5UMkNMUl9SRUcJCTB4MTQJLyogd28gMTYgKi8KKy8qIEFuYWxvZyBJbnB1dCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgTVVYX0NOVFJfUkVHCQkweDA0CS8qIHdvIDE2ICovCisjZGVmaW5lIE1VWF9HQUlOX1JFRwkJMHgwNgkvKiB3byAxNiAqLworI2RlZmluZSBBRF9GSUZPX1JFRwkJMHgxNgkvKiBybyAxNiAqLworI2RlZmluZSBETUFfVENfSU5UX0NMUl9SRUcJMHgxNgkvKiB3byAxNiAqLworLyogQU05NTEzQSBDb3VudGVyL1RpbWVyIFJlZ2lzdGVycyAqLworI2RlZmluZSBBTTk1MTNBX0RBVEFfUkVHCTB4MTgJLyogcncgMTYgKi8KKyNkZWZpbmUgQU05NTEzQV9DT01fUkVHCQkweDFBCS8qIHdvIDE2ICovCisjZGVmaW5lIEFNOTUxM0FfU1RBVF9SRUcJMHgxQQkvKiBybyAxNiAqLworLyogTUlPLTE2IERpZ2l0YWwgSS9PIFJlZ2lzdGVycyAqLworI2RlZmluZSBNSU9fMTZfRElHX0lOX1JFRwkweDFDCS8qIHJvIDE2ICovCisjZGVmaW5lIE1JT18xNl9ESUdfT1VUX1JFRwkweDFDCS8qIHdvIDE2ICovCisvKiBSVFNJIFN3aXRjaCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUlRTSV9TV19TSElGVF9SRUcJMHgxRQkvKiB3byA4ICovCisjZGVmaW5lIFJUU0lfU1dfU1RST0JFX1JFRwkweDFGCS8qIHdvIDggKi8KKy8qIERJTy0yNCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgRElPXzI0X1BPUlRBX1JFRwkweDAwCS8qIHJ3IDggKi8KKyNkZWZpbmUgRElPXzI0X1BPUlRCX1JFRwkweDAxCS8qIHJ3IDggKi8KKyNkZWZpbmUgRElPXzI0X1BPUlRDX1JFRwkweDAyCS8qIHJ3IDggKi8KKyNkZWZpbmUgRElPXzI0X0NORkdfUkVHCQkweDAzCS8qIHdvIDggKi8KKworLyogQ29tbWFuZCBSZWdpc3RlciBiaXRzICovCisjZGVmaW5lIENPTVJFRzFfMlNDQURDCQkweDAwMDEKKyNkZWZpbmUgQ09NUkVHMV8xNjMyQ05UCQkweDAwMDIKKyNkZWZpbmUgQ09NUkVHMV9TQ0FORU4JCTB4MDAwOAorI2RlZmluZSBDT01SRUcxX0RBUUVOCQkweDAwMTAKKyNkZWZpbmUgQ09NUkVHMV9ETUFFTgkJMHgwMDIwCisjZGVmaW5lIENPTVJFRzFfQ09OVklOVEVOCTB4MDA4MAorI2RlZmluZSBDT01SRUcyX1NDTjIJCTB4MDAxMAorI2RlZmluZSBDT01SRUcyX0lOVEVOCQkweDAwODAKKyNkZWZpbmUgQ09NUkVHMl9ET1VURU4wCQkweDAxMDAKKyNkZWZpbmUgQ09NUkVHMl9ET1VURU4xCQkweDAyMDAKKy8qIFN0YXR1cyBSZWdpc3RlciBiaXRzICovCisjZGVmaW5lIFNUQVRfQURfT1ZFUlJVTgkJMHgwMTAwCisjZGVmaW5lIFNUQVRfQURfT1ZFUkZMT1cJMHgwMjAwCisjZGVmaW5lIFNUQVRfQURfREFRUFJPRwkJMHgwODAwCisjZGVmaW5lIFNUQVRfQURfQ09OVkFWQUlMCTB4MjAwMAorI2RlZmluZSBTVEFUX0FEX0RBUVNUT1BJTlQJMHg0MDAwCisvKiBBTTk1MTNBIENvdW50ZXIvVGltZXIgZGVmaW5lcyAqLworI2RlZmluZSBDTE9DS18xX01IWgkJMHg4QjI1CisjZGVmaW5lIENMT0NLXzEwMF9LSFoJMHg4QzI1CisjZGVmaW5lIENMT0NLXzEwX0tIWgkweDhEMjUKKyNkZWZpbmUgQ0xPQ0tfMV9LSFoJCTB4OEUyNQorI2RlZmluZSBDTE9DS18xMDBfSFoJMHg4RjI1CisvKiBPdGhlciBtaXNjZWxsYW5lb3VzIGRlZmluZXMgKi8KKyNkZWZpbmUgQVRNSU8xNkRfU0laRQkzMgkvKiBidXMgYWRkcmVzcyByYW5nZSAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGF0bWlvMTZkX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIEFUTUlPMTZEX1RJTUVPVVQgMTAKKworc3RydWN0IGF0bWlvMTZfYm9hcmRfdCB7CisKKwljb25zdCBjaGFyICpuYW1lOworCWludCBoYXNfODI1NTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRtaW8xNl9ib2FyZF90IGF0bWlvMTZfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJhdG1pbzE2IiwKKwkgICAgICBoYXNfODI1NTowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkiYXRtaW8xNmQiLAorCSAgICAgIGhhc184MjU1OjEsCisJCX0sCit9OworCisjZGVmaW5lIG5fYXRtaW8xNl9ib2FyZHMgc2l6ZW9mKGF0bWlvMTZfYm9hcmRzKS9zaXplb2YoYXRtaW8xNl9ib2FyZHNbMF0pCisKKyNkZWZpbmUgYm9hcmR0eXBlICgoY29uc3Qgc3RydWN0IGF0bWlvMTZfYm9hcmRfdCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCitzdGF0aWMgaW50IGF0bWlvMTZkX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGF0bWlvMTZkX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaXJxcmV0dXJuX3QgYXRtaW8xNmRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIGludCBhdG1pbzE2ZF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBhdG1pbzE2ZF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IGF0bWlvMTZkX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIHJlc2V0X2NvdW50ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB2b2lkIHJlc2V0X2F0bWlvMTZkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworLyogbWFpbiBkcml2ZXIgc3RydWN0ICovCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2F0bWlvMTZkID0geworICAgICAgZHJpdmVyX25hbWU6ImF0bWlvMTYiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOmF0bWlvMTZkX2F0dGFjaCwKKyAgICAgIGRldGFjaDphdG1pbzE2ZF9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZhdG1pbzE2X2JvYXJkc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYXRtaW8xNl9ib2FyZHMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBhdG1pbzE2X2JvYXJkX3QpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9hdG1pbzE2ZCk7CisKKy8qIHJhbmdlIHN0cnVjdHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hdG1pbzE2ZF9haV8xMF9iaXBvbGFyID0geyA0LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDEpLAorCQkJQklQX1JBTkdFKDAuMSksCisJCQlCSVBfUkFOR0UoMC4wMikKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYXRtaW8xNmRfYWlfNV9iaXBvbGFyID0geyA0LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMC41KSwKKwkJCUJJUF9SQU5HRSgwLjA1KSwKKwkJCUJJUF9SQU5HRSgwLjAxKQorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hdG1pbzE2ZF9haV91bmlwb2xhciA9IHsgNCwgeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDIpCisJfQorfTsKKworLyogcHJpdmF0ZSBkYXRhIHN0cnVjdCAqLworc3RydWN0IGF0bWlvMTZkX3ByaXZhdGUgeworCWVudW0geyBhZGNfZGlmZiwgYWRjX3NpbmdsZWVuZGVkIH0gYWRjX211eDsKKwllbnVtIHsgYWRjX2JpcG9sYXIxMCwgYWRjX2JpcG9sYXI1LCBhZGNfdW5pcG9sYXIxMCB9IGFkY19yYW5nZTsKKwllbnVtIHsgYWRjXzJjb21wLCBhZGNfc3RyYWlnaHQgfSBhZGNfY29kaW5nOworCWVudW0geyBkYWNfYmlwb2xhciwgZGFjX3VuaXBvbGFyIH0gZGFjMF9yYW5nZSwgZGFjMV9yYW5nZTsKKwllbnVtIHsgZGFjX2ludGVybmFsLCBkYWNfZXh0ZXJuYWwgfSBkYWMwX3JlZmVyZW5jZSwgZGFjMV9yZWZlcmVuY2U7CisJZW51bSB7IGRhY18yY29tcCwgZGFjX3N0cmFpZ2h0IH0gZGFjMF9jb2RpbmcsIGRhYzFfY29kaW5nOworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphb19yYW5nZV90eXBlX2xpc3RbMl07CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworCXVuc2lnbmVkIGludCBjb21fcmVnXzFfc3RhdGU7CS8qIGN1cnJlbnQgc3RhdGUgb2YgY29tbWFuZCByZWdpc3RlciAxICovCisJdW5zaWduZWQgaW50IGNvbV9yZWdfMl9zdGF0ZTsJLyogY3VycmVudCBzdGF0ZSBvZiBjb21tYW5kIHJlZ2lzdGVyIDIgKi8KK307CisKK3N0YXRpYyB2b2lkIHJlc2V0X2NvdW50ZXJzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8qIENvdW50ZXIgMiAqLworCW91dHcoMHhGRkMyLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEZGMDIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4NCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwlvdXR3KDB4RkYwQSwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHgzLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjQyLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEZGNDIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkvKiBDb3VudGVyIDMgKi8KKwlvdXR3KDB4RkZDNCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHhGRjAzLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweDQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGMEIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4MywgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwlvdXR3KDB4RkY0NCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHhGRjQ0LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJLyogQ291bnRlciA0ICovCisJb3V0dygweEZGQzgsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4RkYwNCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHg0LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjBDLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweDMsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGNDgsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4RkY0OCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCS8qIENvdW50ZXIgNSAqLworCW91dHcoMHhGRkQwLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEZGMDUsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4NCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwlvdXR3KDB4RkYwRCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHgzLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjUwLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEZGNTAsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBBRF9DTEVBUl9SRUcpOworfQorCitzdGF0aWMgdm9pZCByZXNldF9hdG1pbzE2ZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKworCS8qIG5vdyB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGJvYXJkICovCisJb3V0dygwLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMSk7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMik7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIE1VWF9HQUlOX1JFRyk7CisJLyogaW5pdCBBTTk1MTNBIHRpbWVyICovCisJb3V0dygweEZGRkYsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4RkZFRiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcoMHhGRjE3LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweEYwMDAsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJZm9yIChpID0gMTsgaSA8PSA1OyArK2kpIHsKKwkJb3V0dygweEZGMDAgKyBpLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJCW91dHcoMHgwMDA0LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQlvdXR3KDB4RkYwOCArIGksIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJb3V0dygweDMsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJfQorCW91dHcoMHhGRjVGLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJLyogdGltZXIgaW5pdCBkb25lICovCisJb3V0dygwLCBkZXYtPmlvYmFzZSArIEFEX0NMRUFSX1JFRyk7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIElOVDJDTFJfUkVHKTsKKwkvKiBzZWxlY3Qgc3RyYWlnaHQgYmluYXJ5IG1vZGUgZm9yIEFuYWxvZyBJbnB1dCAqLworCWRldnByaXYtPmNvbV9yZWdfMV9zdGF0ZSB8PSAxOworCW91dHcoZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMSk7CisJZGV2cHJpdi0+YWRjX2NvZGluZyA9IGFkY19zdHJhaWdodDsKKwkvKiB6ZXJvIHRoZSBhbmFsb2cgb3V0cHV0cyAqLworCW91dHcoMjA0OCwgZGV2LT5pb2Jhc2UgKyBEQUMwX1JFRyk7CisJb3V0dygyMDQ4LCBkZXYtPmlvYmFzZSArIERBQzFfUkVHKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGF0bWlvMTZkX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworLy8gICAgICBwcmludGsoImF0bWlvMTZkX2ludGVycnVwdCFcbiIpOworCisJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGludyhkZXYtPmlvYmFzZSArIEFEX0ZJRk9fUkVHKSk7CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgYXRtaW8xNmRfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwLCB0bXA7CisjaWZkZWYgREVCVUcxCisJcHJpbnRrKCJhdG1pbzE2ZF9haV9jbWR0ZXN0XG4iKTsKKyNlbmRpZgorCS8qIG1ha2Ugc3VyZSB0cmlnZ2VycyBhcmUgdmFsaWQgKi8KKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1cgfCBUUklHX1RJTUVSOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUjsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJsaXR5IGlzIG5vdCBhbiBpc3N1ZSBoZXJlICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIpCisJCWVycisrOworCWlmIChjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykgeworCQkvKiBpbnRlcm5hbCB0cmlnZ2VyICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworI2lmIDAKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQkvKiBzaG91bGQgYmUgbGV2ZWwvZWRnZSwgaGkvbG8gc3BlY2lmaWNhdGlvbiBoZXJlICovCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKyNlbmRpZgorCX0KKworCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgMTAwMDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDEwMDAwOworCQllcnIrKzsKKwl9CisjaWYgMAorCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gU0xPV0VTVF9USU1FUikgeworCQljbWQtPmNvbnZlcnRfYXJnID0gU0xPV0VTVF9USU1FUjsKKwkJZXJyKys7CisJfQorI2VuZGlmCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCS8qIGFueSBjb3VudCBpcyBhbGxvd2VkICovCisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWlvMTZkX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBpbnQgdGltZXIsIGJhc2VfY2xvY2s7CisJdW5zaWduZWQgaW50IHNhbXBsZV9jb3VudCwgdG1wLCBjaGFuLCBnYWluOworCWludCBpOworI2lmZGVmIERFQlVHMQorCXByaW50aygiYXRtaW8xNmRfYWlfY21kXG4iKTsKKyNlbmRpZgorCS8qIFRoaXMgaXMgc2xvd2x5IGJlY29taW5nIGEgd29ya2luZyBjb21tYW5kIGludGVyZmFjZS4gKgorCSAqIEl0IGlzIHN0aWxsIHViZXItZXhwZXJpbWVudGFsICovCisKKwlyZXNldF9jb3VudGVycyhkZXYpOworCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CisKKwkvKiBjaGVjayBpZiBzY2FubmluZyBtdWx0aXBsZSBjaGFubmVscyAqLworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA8IDIpIHsKKwkJZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlICY9IH5DT01SRUcxX1NDQU5FTjsKKwkJb3V0dyhkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUsIGRldi0+aW9iYXNlICsgQ09NX1JFR18xKTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUgfD0gQ09NUkVHMV9TQ0FORU47CisJCWRldnByaXYtPmNvbV9yZWdfMl9zdGF0ZSB8PSBDT01SRUcyX1NDTjI7CisJCW91dHcoZGV2cHJpdi0+Y29tX3JlZ18xX3N0YXRlLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMSk7CisJCW91dHcoZGV2cHJpdi0+Y29tX3JlZ18yX3N0YXRlLCBkZXYtPmlvYmFzZSArIENPTV9SRUdfMik7CisJfQorCisJLyogU2V0dXAgdGhlIE11eC1HYWluIENvdW50ZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47ICsraSkgeworCQljaGFuID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKTsKKwkJZ2FpbiA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pOworCQlvdXR3KGksIGRldi0+aW9iYXNlICsgTVVYX0NOVFJfUkVHKTsKKwkJdG1wID0gY2hhbiB8IChnYWluIDw8IDYpOworCQlpZiAoaSA9PSBjbWQtPnNjYW5fZW5kX2FyZyAtIDEpCisJCQl0bXAgfD0gMHgwMDEwOwkvKiBzZXQgTEFTVE9ORSBiaXQgKi8KKwkJb3V0dyh0bXAsIGRldi0+aW9iYXNlICsgTVVYX0dBSU5fUkVHKTsKKwl9CisKKwkvKiBOb3cgcHJvZ3JhbSB0aGUgc2FtcGxlIGludGVydmFsIHRpbWVyICovCisJLyogRmlndXJlIG91dCB3aGljaCBjbG9jayB0byB1c2UgdGhlbiBnZXQgYW4KKwkgKiBhcHByb3ByaWF0ZSB0aW1lciB2YWx1ZSAqLworCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgNjU1MzYwMDApIHsKKwkJYmFzZV9jbG9jayA9IENMT0NLXzFfTUhaOworCQl0aW1lciA9IGNtZC0+Y29udmVydF9hcmcgLyAxMDAwOworCX0gZWxzZSBpZiAoY21kLT5jb252ZXJ0X2FyZyA8IDY1NTM2MDAwMCkgeworCQliYXNlX2Nsb2NrID0gQ0xPQ0tfMTAwX0tIWjsKKwkJdGltZXIgPSBjbWQtPmNvbnZlcnRfYXJnIC8gMTAwMDA7CisJfSBlbHNlIGlmIChjbWQtPmNvbnZlcnRfYXJnIDw9IDB4ZmZmZmZmZmYgLyogNjU1MzYwMDAwMCAqLyApIHsKKwkJYmFzZV9jbG9jayA9IENMT0NLXzEwX0tIWjsKKwkJdGltZXIgPSBjbWQtPmNvbnZlcnRfYXJnIC8gMTAwMDAwOworCX0gZWxzZSBpZiAoY21kLT5jb252ZXJ0X2FyZyA8PSAweGZmZmZmZmZmIC8qIDY1NTM2MDAwMDAwICovICkgeworCQliYXNlX2Nsb2NrID0gQ0xPQ0tfMV9LSFo7CisJCXRpbWVyID0gY21kLT5jb252ZXJ0X2FyZyAvIDEwMDAwMDA7CisJfQorCW91dHcoMHhGRjAzLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dyhiYXNlX2Nsb2NrLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCW91dHcoMHhGRjBCLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweDIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGNDQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlvdXR3KDB4RkZGMywgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCW91dHcodGltZXIsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGMjQsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKworCS8qIE5vdyBmaWd1cmUgb3V0IGhvdyBtYW55IHNhbXBsZXMgdG8gZ2V0ICovCisJLyogYW5kIHByb2dyYW0gdGhlIHNhbXBsZSBjb3VudGVyICovCisJc2FtcGxlX2NvdW50ID0gY21kLT5zdG9wX2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnOworCW91dHcoMHhGRjA0LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJb3V0dygweDEwMjUsIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJb3V0dygweEZGMEMsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwlpZiAoc2FtcGxlX2NvdW50IDwgNjU1MzYpIHsKKwkJLyogdXNlIG9ubHkgQ291bnRlciA0ICovCisJCW91dHcoc2FtcGxlX2NvdW50LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQlvdXR3KDB4RkY0OCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KDB4RkZGNCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KDB4RkYyOCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUgJj0gfkNPTVJFRzFfMTYzMkNOVDsKKwkJb3V0dyhkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUsIGRldi0+aW9iYXNlICsgQ09NX1JFR18xKTsKKwl9IGVsc2UgeworCQkvKiBDb3VudGVyIDQgYW5kIDUgYXJlIG5lZWRlZCAqLworCQlpZiAoKHRtcCA9IHNhbXBsZV9jb3VudCAmIDB4RkZGRikpIHsKKwkJCW91dHcodG1wIC0gMSwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJfSBlbHNlIHsKKwkJCW91dHcoMHhGRkZGLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQl9CisJCW91dHcoMHhGRjQ4LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJb3V0dygweEZGMjgsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJb3V0dygweEZGMDUsIGRldi0+aW9iYXNlICsgQU05NTEzQV9DT01fUkVHKTsKKwkJb3V0dygweDI1LCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQlvdXR3KDB4RkYwRCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQl0bXAgPSBzYW1wbGVfY291bnQgJiAweEZGRkY7CisJCWlmICgodG1wID09IDApIHx8ICh0bXAgPT0gMSkpIHsKKwkJCW91dHcoKHNhbXBsZV9jb3VudCA+PiAxNikgJiAweEZGRkYsCisJCQkJZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJfSBlbHNlIHsKKwkJCW91dHcoKChzYW1wbGVfY291bnQgPj4gMTYpICYgMHhGRkZGKSArIDEsCisJCQkJZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0RBVEFfUkVHKTsKKwkJfQorCQlvdXR3KDB4RkY3MCwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUgfD0gQ09NUkVHMV8xNjMyQ05UOworCQlvdXR3KGRldnByaXYtPmNvbV9yZWdfMV9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBDT01fUkVHXzEpOworCX0KKworCS8qIFByb2dyYW0gdGhlIHNjYW4gaW50ZXJ2YWwgdGltZXIgT05MWSBJRiBTQ0FOTklORyBJUyBFTkFCTEVEICovCisJLyogRmlndXJlIG91dCB3aGljaCBjbG9jayB0byB1c2UgdGhlbiBnZXQgYW4KKwkgKiBhcHByb3ByaWF0ZSB0aW1lciB2YWx1ZSAqLworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IDEpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCA2NTUzNjAwMCkgeworCQkJYmFzZV9jbG9jayA9IENMT0NLXzFfTUhaOworCQkJdGltZXIgPSBjbWQtPnNjYW5fYmVnaW5fYXJnIC8gMTAwMDsKKwkJfSBlbHNlIGlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgNjU1MzYwMDAwKSB7CisJCQliYXNlX2Nsb2NrID0gQ0xPQ0tfMTAwX0tIWjsKKwkJCXRpbWVyID0gY21kLT5zY2FuX2JlZ2luX2FyZyAvIDEwMDAwOworCQl9IGVsc2UgaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCAweGZmZmZmZmZmIC8qIDY1NTM2MDAwMDAgKi8gKSB7CisJCQliYXNlX2Nsb2NrID0gQ0xPQ0tfMTBfS0haOworCQkJdGltZXIgPSBjbWQtPnNjYW5fYmVnaW5fYXJnIC8gMTAwMDAwOworCQl9IGVsc2UgaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCAweGZmZmZmZmZmIC8qIDY1NTM2MDAwMDAwICovICkgeworCQkJYmFzZV9jbG9jayA9IENMT0NLXzFfS0haOworCQkJdGltZXIgPSBjbWQtPnNjYW5fYmVnaW5fYXJnIC8gMTAwMDAwMDsKKwkJfQorCQlvdXR3KDB4RkYwMiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KGJhc2VfY2xvY2ssIGRldi0+aW9iYXNlICsgQU05NTEzQV9EQVRBX1JFRyk7CisJCW91dHcoMHhGRjBBLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfQ09NX1JFRyk7CisJCW91dHcoMHgyLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQlvdXR3KDB4RkY0MiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KDB4RkZGMiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCQlvdXR3KHRpbWVyLCBkZXYtPmlvYmFzZSArIEFNOTUxM0FfREFUQV9SRUcpOworCQlvdXR3KDB4RkYyMiwgZGV2LT5pb2Jhc2UgKyBBTTk1MTNBX0NPTV9SRUcpOworCX0KKworCS8qIENsZWFyIHRoZSBBL0QgRklGTyBhbmQgcmVzZXQgdGhlIE1VWCBjb3VudGVyICovCisJb3V0dygwLCBkZXYtPmlvYmFzZSArIEFEX0NMRUFSX1JFRyk7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIE1VWF9DTlRSX1JFRyk7CisJb3V0dygwLCBkZXYtPmlvYmFzZSArIElOVDJDTFJfUkVHKTsKKwkvKiBlbmFibGUgdGhpcyBhY3F1aXNpdGlvbiBvcGVyYXRpb24gKi8KKwlkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUgfD0gQ09NUkVHMV9EQVFFTjsKKwlvdXR3KGRldnByaXYtPmNvbV9yZWdfMV9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBDT01fUkVHXzEpOworCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGZvciBjb252ZXJzaW9uIGNvbXBsZXRpb24gKi8KKwlkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUgfD0gQ09NUkVHMV9DT05WSU5URU47CisJZGV2cHJpdi0+Y29tX3JlZ18yX3N0YXRlIHw9IENPTVJFRzJfSU5URU47CisJb3V0dyhkZXZwcml2LT5jb21fcmVnXzFfc3RhdGUsIGRldi0+aW9iYXNlICsgQ09NX1JFR18xKTsKKwlvdXR3KGRldnByaXYtPmNvbV9yZWdfMl9zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBDT01fUkVHXzIpOworCS8qIGFwcGx5IGEgdHJpZ2dlci4gdGhpcyBzdGFydHMgdGhlIGNvdW50ZXJzISAqLworCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBTVEFSVF9EQVFfUkVHKTsKKworCXJldHVybiAwOworfQorCisvKiBUaGlzIHdpbGwgY2FuY2VsIGEgcnVubmluZyBhY3F1aXNpdGlvbiBvcGVyYXRpb24gKi8KK3N0YXRpYyBpbnQgYXRtaW8xNmRfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJcmVzZXRfYXRtaW8xNmQoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKiBNb2RlIDAgaXMgdXNlZCB0byBnZXQgYSBzaW5nbGUgY29udmVyc2lvbiBvbiBkZW1hbmQgKi8KK3N0YXRpYyBpbnQgYXRtaW8xNmRfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgdDsKKwlpbnQgY2hhbjsKKwlpbnQgZ2FpbjsKKwlpbnQgc3RhdHVzOworCisjaWZkZWYgREVCVUcxCisJcHJpbnRrKCJhdG1pbzE2ZF9haV9pbnNuX3JlYWRcbiIpOworI2VuZGlmCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWdhaW4gPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisKKwkvKiByZXNldCB0aGUgQW5hbG9nIGlucHV0IGNpcmN1aXRyeSAqLworCS8vb3V0dyggMCwgZGV2LT5pb2Jhc2UrQURfQ0xFQVJfUkVHICk7CisJLyogcmVzZXQgdGhlIEFuYWxvZyBJbnB1dCBNVVggQ291bnRlciB0byAwICovCisJLy9vdXR3KCAwLCBkZXYtPmlvYmFzZStNVVhfQ05UUl9SRUcgKTsKKworCS8qIHNldCB0aGUgSW5wdXQgTVVYIGdhaW4gKi8KKwlvdXR3KGNoYW4gfCAoZ2FpbiA8PCA2KSwgZGV2LT5pb2Jhc2UgKyBNVVhfR0FJTl9SRUcpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkvKiBzdGFydCB0aGUgY29udmVyc2lvbiAqLworCQlvdXR3KDAsIGRldi0+aW9iYXNlICsgU1RBUlRfQ09OVkVSVF9SRUcpOworCQkvKiB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KKwkJZm9yICh0ID0gMDsgdCA8IEFUTUlPMTZEX1RJTUVPVVQ7IHQrKykgeworCQkJLyogY2hlY2sgY29udmVyc2lvbiBzdGF0dXMgKi8KKwkJCXN0YXR1cyA9IGludyhkZXYtPmlvYmFzZSArIFNUQVRfUkVHKTsKKyNpZmRlZiBERUJVRzEKKwkJCXByaW50aygic3RhdHVzPSV4XG4iLCBzdGF0dXMpOworI2VuZGlmCisJCQlpZiAoc3RhdHVzICYgU1RBVF9BRF9DT05WQVZBSUwpIHsKKwkJCQkvKiByZWFkIHRoZSBkYXRhIG5vdyAqLworCQkJCWRhdGFbaV0gPSBpbncoZGV2LT5pb2Jhc2UgKyBBRF9GSUZPX1JFRyk7CisJCQkJLyogY2hhbmdlIHRvIHR3bydzIGNvbXBsZW1lbnQgaWYgbmVlZCBiZSAqLworCQkJCWlmIChkZXZwcml2LT5hZGNfY29kaW5nID09IGFkY18yY29tcCkgeworCQkJCQlkYXRhW2ldIF49IDB4ODAwOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzdGF0dXMgJiBTVEFUX0FEX09WRVJGTE9XKSB7CisJCQkJcHJpbnRrKCJhdG1pbzE2ZDogYS9kIEZJRk8gb3ZlcmZsb3dcbiIpOworCQkJCW91dHcoMCwgZGV2LT5pb2Jhc2UgKyBBRF9DTEVBUl9SRUcpOworCisJCQkJcmV0dXJuIC1FVElNRTsKKwkJCX0KKwkJfQorCQkvKiBlbmQgd2FpdGluZywgbm93IGNoZWNrIGlmIGl0IHRpbWVkIG91dCAqLworCQlpZiAodCA9PSBBVE1JTzE2RF9USU1FT1VUKSB7CisJCQlydF9wcmludGsoImF0bWlvMTZkOiB0aW1lb3V0XG4iKTsKKworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCX0KKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGF0bWlvMTZkX2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisjaWZkZWYgREVCVUcxCisJcHJpbnRrKCJhdG1pbzE2ZF9hb19pbnNuX3JlYWRcbiIpOworI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisJfQorCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgYXRtaW8xNmRfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW47CisJaW50IGQ7CisjaWZkZWYgREVCVUcxCisJcHJpbnRrKCJhdG1pbzE2ZF9hb19pbnNuX3dyaXRlXG4iKTsKKyNlbmRpZgorCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkID0gZGF0YVtpXTsKKwkJc3dpdGNoIChjaGFuKSB7CisJCWNhc2UgMDoKKwkJCWlmIChkZXZwcml2LT5kYWMwX2NvZGluZyA9PSBkYWNfMmNvbXApIHsKKwkJCQlkIF49IDB4ODAwOworCQkJfQorCQkJb3V0dyhkLCBkZXYtPmlvYmFzZSArIERBQzBfUkVHKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpZiAoZGV2cHJpdi0+ZGFjMV9jb2RpbmcgPT0gZGFjXzJjb21wKSB7CisJCQkJZCBePSAweDgwMDsKKwkJCX0KKwkJCW91dHcoZCwgZGV2LT5pb2Jhc2UgKyBEQUMxX1JFRyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwl9CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgYXRtaW8xNmRfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gfCBkYXRhWzFdKTsKKwkJb3V0dyhzLT5zdGF0ZSwgZGV2LT5pb2Jhc2UgKyBNSU9fMTZfRElHX09VVF9SRUcpOworCX0KKwlkYXRhWzFdID0gaW53KGRldi0+aW9iYXNlICsgTUlPXzE2X0RJR19JTl9SRUcpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgYXRtaW8xNmRfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgbWFzazsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJbWFzayA9IChDUl9DSEFOKGluc24tPmNoYW5zcGVjKSA8IDQpID8gMHgwZiA6IDB4ZjA7CisJCXMtPmlvX2JpdHMgJj0gfm1hc2s7CisJCWlmIChkYXRhW2ldKQorCQkJcy0+aW9fYml0cyB8PSBtYXNrOworCX0KKwlkZXZwcml2LT5jb21fcmVnXzJfc3RhdGUgJj0gfihDT01SRUcyX0RPVVRFTjAgfCBDT01SRUcyX0RPVVRFTjEpOworCWlmIChzLT5pb19iaXRzICYgMHgwZikKKwkJZGV2cHJpdi0+Y29tX3JlZ18yX3N0YXRlIHw9IENPTVJFRzJfRE9VVEVOMDsKKwlpZiAocy0+aW9fYml0cyAmIDB4ZjApCisJCWRldnByaXYtPmNvbV9yZWdfMl9zdGF0ZSB8PSBDT01SRUcyX0RPVVRFTjE7CisJb3V0dyhkZXZwcml2LT5jb21fcmVnXzJfc3RhdGUsIGRldi0+aW9iYXNlICsgQ09NX1JFR18yKTsKKworCXJldHVybiBpOworfQorCisvKgorICAgb3B0aW9uc1swXSAtIEkvTyBwb3J0CisgICBvcHRpb25zWzFdIC0gTUlPIGlycQorICAgICAgICAgICAgICAgIDAgPT0gbm8gaXJxCisgICAgICAgICAgICAgICAgTiA9PSBpcnEgTiB7Myw0LDUsNiw3LDksMTAsMTEsMTIsMTQsMTV9CisgICBvcHRpb25zWzJdIC0gRElPIGlycQorICAgICAgICAgICAgICAgIDAgPT0gbm8gaXJxCisgICAgICAgICAgICAgICAgTiA9PSBpcnEgTiB7Myw0LDUsNiw3LDl9CisgICBvcHRpb25zWzNdIC0gRE1BMSBjaGFubmVsCisgICAgICAgICAgICAgICAgMCA9PSBubyBETUEKKyAgICAgICAgICAgICAgICBOID09IERNQSBOIHs1LDYsN30KKyAgIG9wdGlvbnNbNF0gLSBETUEyIGNoYW5uZWwKKyAgICAgICAgICAgICAgICAwID09IG5vIERNQQorICAgICAgICAgICAgICAgIE4gPT0gRE1BIE4gezUsNiw3fQorCisgICBvcHRpb25zWzVdIC0gYS9kIG11eAorICAgCTA9ZGlmZmVyZW50aWFsLCAxPXNpbmdsZQorICAgb3B0aW9uc1s2XSAtIGEvZCByYW5nZQorICAgCTA9Ymlwb2xhcjEwLCAxPWJpcG9sYXI1LCAyPXVuaXBvbGFyMTAKKworICAgb3B0aW9uc1s3XSAtIGRhYzAgcmFuZ2UKKyAgIAkwPWJpcG9sYXIsIDE9dW5pcG9sYXIKKyAgIG9wdGlvbnNbOF0gLSBkYWMwIHJlZmVyZW5jZQorICAgIDA9aW50ZXJuYWwsIDE9ZXh0ZXJuYWwKKyAgIG9wdGlvbnNbOV0gLSBkYWMwIGNvZGluZworICAgCTA9MidzIGNvbXAsIDE9c3RyYWlnaHQgYmluYXJ5CisKKyAgIG9wdGlvbnNbMTBdIC0gZGFjMSByYW5nZQorICAgb3B0aW9uc1sxMV0gLSBkYWMxIHJlZmVyZW5jZQorICAgb3B0aW9uc1sxMl0gLSBkYWMxIGNvZGluZworICovCisKK3N0YXRpYyBpbnQgYXRtaW8xNmRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJaW50IHJldDsKKworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJLyogbWFrZSBzdXJlIHRoZSBhZGRyZXNzIHJhbmdlIGlzIGZyZWUgYW5kIGFsbG9jYXRlIGl0ICovCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogYXRtaW8xNmQ6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgQVRNSU8xNkRfU0laRSwgIm5pX2F0bWlvMTZkIikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCS8qIGJvYXJkIG5hbWUgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSBib2FyZHR5cGUtPm5hbWU7CisKKwlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgYXRtaW8xNmRfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiByZXNldCB0aGUgYXRtaW8xNmQgaGFyZHdhcmUgKi8KKwlyZXNldF9hdG1pbzE2ZChkZXYpOworCisJLyogY2hlY2sgaWYgb3VyIGludGVycnVwdCBpcyBhdmFpbGFibGUgYW5kIGdldCBpdCAqLworCWlycSA9IGl0LT5vcHRpb25zWzFdOworCWlmIChpcnEpIHsKKwkJaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBhdG1pbzE2ZF9pbnRlcnJ1cHQsCisJCQkJCTAsICJhdG1pbzE2ZCIsIGRldikpIDwgMCkgeworCQkJcHJpbnRrKCJmYWlsZWQgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBpcnEpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlkZXYtPmlycSA9IGlycTsKKwkJcHJpbnRrKCIoIGlycSA9ICV1IClcbiIsIGlycSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIoIG5vIGlycSApIik7CisJfQorCisJLyogc2V0IGRldmljZSBvcHRpb25zICovCisJZGV2cHJpdi0+YWRjX211eCA9IGl0LT5vcHRpb25zWzVdOworCWRldnByaXYtPmFkY19yYW5nZSA9IGl0LT5vcHRpb25zWzZdOworCisJZGV2cHJpdi0+ZGFjMF9yYW5nZSA9IGl0LT5vcHRpb25zWzddOworCWRldnByaXYtPmRhYzBfcmVmZXJlbmNlID0gaXQtPm9wdGlvbnNbOF07CisJZGV2cHJpdi0+ZGFjMF9jb2RpbmcgPSBpdC0+b3B0aW9uc1s5XTsKKwlkZXZwcml2LT5kYWMxX3JhbmdlID0gaXQtPm9wdGlvbnNbMTBdOworCWRldnByaXYtPmRhYzFfcmVmZXJlbmNlID0gaXQtPm9wdGlvbnNbMTFdOworCWRldnByaXYtPmRhYzFfY29kaW5nID0gaXQtPm9wdGlvbnNbMTJdOworCisJLyogc2V0dXAgc3ViLWRldmljZXMgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkvKiBhaSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSAoZGV2cHJpdi0+YWRjX211eCA/IDE2IDogOCk7CisJcy0+bGVuX2NoYW5saXN0ID0gMTY7CisJcy0+aW5zbl9yZWFkID0gYXRtaW8xNmRfYWlfaW5zbl9yZWFkOworCXMtPmRvX2NtZHRlc3QgPSBhdG1pbzE2ZF9haV9jbWR0ZXN0OworCXMtPmRvX2NtZCA9IGF0bWlvMTZkX2FpX2NtZDsKKwlzLT5jYW5jZWwgPSBhdG1pbzE2ZF9haV9jYW5jZWw7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmOwkvKiA0MDk1IGRlY2ltYWwgKi8KKwlzd2l0Y2ggKGRldnByaXYtPmFkY19yYW5nZSkgeworCWNhc2UgYWRjX2JpcG9sYXIxMDoKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYXRtaW8xNmRfYWlfMTBfYmlwb2xhcjsKKwkJYnJlYWs7CisJY2FzZSBhZGNfYmlwb2xhcjU6CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2F0bWlvMTZkX2FpXzVfYmlwb2xhcjsKKwkJYnJlYWs7CisJY2FzZSBhZGNfdW5pcG9sYXIxMDoKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYXRtaW8xNmRfYWlfdW5pcG9sYXI7CisJCWJyZWFrOworCX0KKworCS8qIGFvIHN1YmRldmljZSAqLworCXMrKzsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDI7CisJcy0+aW5zbl9yZWFkID0gYXRtaW8xNmRfYW9faW5zbl9yZWFkOworCXMtPmluc25fd3JpdGUgPSBhdG1pbzE2ZF9hb19pbnNuX3dyaXRlOworCXMtPm1heGRhdGEgPSAweGZmZjsJLyogNDA5NSBkZWNpbWFsICovCisJcy0+cmFuZ2VfdGFibGVfbGlzdCA9IGRldnByaXYtPmFvX3JhbmdlX3R5cGVfbGlzdDsKKwlzd2l0Y2ggKGRldnByaXYtPmRhYzBfcmFuZ2UpIHsKKwljYXNlIGRhY19iaXBvbGFyOgorCQlkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3RbMF0gPSAmcmFuZ2VfYmlwb2xhcjEwOworCQlicmVhazsKKwljYXNlIGRhY191bmlwb2xhcjoKKwkJZGV2cHJpdi0+YW9fcmFuZ2VfdHlwZV9saXN0WzBdID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJCWJyZWFrOworCX0KKwlzd2l0Y2ggKGRldnByaXYtPmRhYzFfcmFuZ2UpIHsKKwljYXNlIGRhY19iaXBvbGFyOgorCQlkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3RbMV0gPSAmcmFuZ2VfYmlwb2xhcjEwOworCQlicmVhazsKKwljYXNlIGRhY191bmlwb2xhcjoKKwkJZGV2cHJpdi0+YW9fcmFuZ2VfdHlwZV9saXN0WzFdID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJCWJyZWFrOworCX0KKworCS8qIERpZ2l0YWwgSS9PICovCisJcysrOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gYXRtaW8xNmRfZGlvX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IGF0bWlvMTZkX2Rpb19pbnNuX2NvbmZpZzsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJLyogODI1NSBzdWJkZXZpY2UgKi8KKwlzKys7CisJaWYgKGJvYXJkdHlwZS0+aGFzXzgyNTUpIHsKKwkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsIGRldi0+aW9iYXNlKTsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworLyogZG9uJ3QgeWV0IGtub3cgaG93IHRvIGRlYWwgd2l0aCBjb3VudGVyL3RpbWVycyAqLworI2lmIDAKKwlzKys7CisJLyogZG8gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVElNRVI7CisJcy0+bl9jaGFuID0gMDsKKwlzLT5tYXhkYXRhID0gMAorI2VuZGlmCisJCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0bWlvMTZkX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBhdG1pbzE2ZDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPnN1YmRldmljZXMgJiYgYm9hcmR0eXBlLT5oYXNfODI1NSkKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDMpOworCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlyZXNldF9hdG1pbzE2ZChkZXYpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgQVRNSU8xNkRfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYTMxYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCkBAIC0wLDAgKzEsODQxIEBACisvKgorICogICAgIGNvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYworICogICAgIERyaXZlciBmb3IgREFRQ2FyZC03MDAgRElPIG9ubHkKKyAqICAgICBjb3BpZWQgZnJvbSA4MjU1CisgKgorICogICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTggRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworLyoKK0RyaXZlcjogbmlfZGFxXzcwMAorRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIFBDTUNJQSBEQVFDYXJkLTcwMCBESU8gb25seQorQXV0aG9yOiBGcmVkIEJyb29rcyA8bnNhc3Bvb2tAbnNhc3Bvb2suY29tPiwKKyAgYmFzZWQgb24gbmlfZGFxX2RpbzI0IGJ5IERhbmllbCBWZWNpbm8gQ2FzdGVsIDxkdmVjaW5vQGFibGUuZXM+CitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIFBDTUNJQSBEQVEtQ2FyZC03MDAgKG5pX2RhcV83MDApCitTdGF0dXM6IHdvcmtzCitVcGRhdGVkOiBUaHUsIDIxIEZlYiAyMDA4IDEyOjA3OjIwICswMDAwCisKK1RoZSBkYXFjYXJkLTcwMCBhcHBlYXJzIGluIENvbWVkaSBhcyBhIHNpbmdsZSBkaWdpdGFsIEkvTyBzdWJkZXZpY2Ugd2l0aAorMTYgY2hhbm5lbHMuICBUaGUgY2hhbm5lbCAwIGNvcnJlc3BvbmRzIHRvIHRoZSBkYXFjYXJkLTcwMCdzIG91dHB1dAorcG9ydCwgYml0IDA7IGNoYW5uZWwgOCBjb3JyZXNwb25kcyB0byB0aGUgaW5wdXQgcG9ydCwgYml0IDAuCisKK0RpcmVjdGlvbiBjb25maWd1cmF0aW9uOiBjaGFubmVscyAwLTcgb3V0cHV0LCA4LTE1IGlucHV0ICg4MjI1IGRldmljZQorZW11IGFzIHBvcnQgQSBvdXRwdXQsIHBvcnQgQiBpbnB1dCwgcG9ydCBDIE4vQSkuCisKK0lSUSBpcyBhc3NpZ25lZCBidXQgbm90IHVzZWQuCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2N1cl9kZXYgPSBOVUxMOworCisjZGVmaW5lIERJTzcwMF9TSVpFIDgJCS8vIHNpemUgb2YgaW8gcmVnaW9uIHVzZWQgYnkgYm9hcmQKKworc3RhdGljIGludCBkaW83MDBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGlvNzAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK2VudW0gZGlvNzAwX2J1c3R5cGUgeyBwY21jaWFfYnVzdHlwZSB9OworCitzdHJ1Y3QgZGlvNzAwX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkZXZpY2VfaWQ7CQkvLyBkZXZpY2UgaWQgZm9yIHBjbWNpYSBib2FyZAorCWVudW0gZGlvNzAwX2J1c3R5cGUgYnVzdHlwZTsJLy8gUENNQ0lBCisJaW50IGhhdmVfZGlvOwkJLy8gaGF2ZSBkYXFjYXJkLTcwMCBkaW8KKwkvLyBmdW5jdGlvbiBwb2ludGVycyBzbyB3ZSBjYW4gdXNlIGluYi9vdXRiIG9yIHJlYWRiL3dyaXRlYgorCS8vIGFzIGFwcHJvcHJpYXRlCisJdW5zaWduZWQgaW50ICgqcmVhZF9ieXRlKSAodW5zaWduZWQgaW50IGFkZHJlc3MpOworCXZvaWQgKCp3cml0ZV9ieXRlKSAodW5zaWduZWQgaW50IGJ5dGUsIHVuc2lnbmVkIGludCBhZGRyZXNzKTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGlvNzAwX2JvYXJkIGRpbzcwMF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRhcWNhcmQtNzAwIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg0NzQzLC8vIDB4MTBiIGlzIG1hbnVmYWN0dXJlciBpZCwgMHg0NzQzIGlzIGRldmljZSBpZAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYV9idXN0eXBlLAorCSAgICAgIGhhdmVfZGlvOjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJuaV9kYXFfNzAwIiwKKwkgICAgICBkZXZpY2VfaWQ6MHg0NzQzLC8vIDB4MTBiIGlzIG1hbnVmYWN0dXJlciBpZCwgMHg0NzQzIGlzIGRldmljZSBpZAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYV9idXN0eXBlLAorCSAgICAgIGhhdmVfZGlvOjEsCisJCX0sCit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBkaW83MDBfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IGRpbzcwMF9wcml2YXRlIHsKKworCWludCBkYXRhOwkJLyogbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGxlZnQgdG8gYmUgdGFrZW4gKi8KK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IGRpbzcwMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RpbzcwMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJuaV9kYXFfNzAwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkaW83MDBfYXR0YWNoLAorICAgICAgZGV0YWNoOmRpbzcwMF9kZXRhY2gsCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKGRpbzcwMF9ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBkaW83MDBfYm9hcmQpLAorICAgICAgYm9hcmRfbmFtZTomZGlvNzAwX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgZGlvNzAwX2JvYXJkKSwKK307CisKKy8qCXRoZSByZWFsIGRyaXZlciByb3V0aW5lcwkqLworCisjZGVmaW5lIF83MDBfU0laRSA4CisKKyNkZWZpbmUgXzcwMF9EQVRBIDAKKworI2RlZmluZSBESU9fVwkJMHgwNAorI2RlZmluZSBESU9fUgkJMHgwNQorCitzdHJ1Y3Qgc3ViZGV2XzcwMF9zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgY2JfYXJnOworCWludCAoKmNiX2Z1bmMpIChpbnQsIGludCwgaW50LCB1bnNpZ25lZCBsb25nKTsKKwlpbnQgaGF2ZV9pcnE7Cit9OworCisjZGVmaW5lIENBTExCQUNLX0FSRwkoKChzdHJ1Y3Qgc3ViZGV2XzcwMF9zdHJ1Y3QgKilzLT5wcml2YXRlKS0+Y2JfYXJnKQorI2RlZmluZSBDQUxMQkFDS19GVU5DCSgoKHN0cnVjdCBzdWJkZXZfNzAwX3N0cnVjdCAqKXMtPnByaXZhdGUpLT5jYl9mdW5jKQorI2RlZmluZSBzdWJkZXZwcml2CSgoc3RydWN0IHN1YmRldl83MDBfc3RydWN0ICopcy0+cHJpdmF0ZSkKKworc3RhdGljIHZvaWQgZG9fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCit2b2lkIHN1YmRldl83MDBfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc2hvcnQgZDsKKworCWQgPSBDQUxMQkFDS19GVU5DKDAsIF83MDBfREFUQSwgMCwgQ0FMTEJBQ0tfQVJHKTsKKworCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBkKTsKKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT1M7CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworc3RhdGljIGludCBzdWJkZXZfNzAwX2NiKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJLyogcG9ydCBpcyBhbHdheXMgQSBmb3Igb3V0cHV0IGFuZCBCIGZvciBpbnB1dCAoODI1NSBlbXUpICovCisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBhcmc7CisKKwlpZiAoZGlyKSB7CisJCW91dGIoZGF0YSwgaW9iYXNlICsgRElPX1cpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gaW5iKGlvYmFzZSArIERJT19SKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzcwMF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKworCQlpZiAoZGF0YVswXSAmIDB4ZmYpCisJCQlDQUxMQkFDS19GVU5DKDEsIF83MDBfREFUQSwgcy0+c3RhdGUgJiAweGZmLAorCQkJCUNBTExCQUNLX0FSRyk7CisJfQorCisJZGF0YVsxXSA9IHMtPnN0YXRlICYgMHhmZjsKKwlkYXRhWzFdIHw9IENBTExCQUNLX0ZVTkMoMCwgXzcwMF9EQVRBLCAwLCBDQUxMQkFDS19BUkcpIDw8IDg7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBzdWJkZXZfNzAwX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShzLT5pb19iaXRzICYgKDEgPDwgQ1JfQ0hBTihpbnNuLT4KKwkJCQkJY2hhbnNwZWMpKSkgPyBDT01FRElfT1VUUFVUIDoKKwkJCUNPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBkb19jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sJCQkJLyogdXNlIHBvd2VydXAgZGVmYXVsdHMgKi8KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzcwMF9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIHN0ZXAgMSAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDIgKi8KKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzICovCisKKwlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSAxKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJY21kLT5zdG9wX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiAzOworCisJLyogc3RlcCA0ICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1YmRldl83MDBfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLyogRklYTUUgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1YmRldl83MDBfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLyogRklYTUUgKi8KKworCXJldHVybiAwOworfQorCitpbnQgc3ViZGV2XzcwMF9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIGludCAoKmNiKSAoaW50LAorCQlpbnQsIGludCwgdW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDE2OworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+bWF4ZGF0YSA9IDE7CisKKwlzLT5wcml2YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN1YmRldl83MDBfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzLT5wcml2YXRlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUNBTExCQUNLX0FSRyA9IGFyZzsKKwlpZiAoY2IgPT0gTlVMTCkgeworCQlDQUxMQkFDS19GVU5DID0gc3ViZGV2XzcwMF9jYjsKKwl9IGVsc2UgeworCQlDQUxMQkFDS19GVU5DID0gY2I7CisJfQorCXMtPmluc25fYml0cyA9IHN1YmRldl83MDBfaW5zbjsKKwlzLT5pbnNuX2NvbmZpZyA9IHN1YmRldl83MDBfaW5zbl9jb25maWc7CisKKwlzLT5zdGF0ZSA9IDA7CisJcy0+aW9fYml0cyA9IDB4MDBmZjsKKwlkb19jb25maWcoZGV2LCBzKTsKKworCXJldHVybiAwOworfQorCitpbnQgc3ViZGV2XzcwMF9pbml0X2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWludCAoKmNiKSAoaW50LCBpbnQsIGludCwgdW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzdWJkZXZfNzAwX2luaXQoZGV2LCBzLCBjYiwgYXJnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMtPmRvX2NtZHRlc3QgPSBzdWJkZXZfNzAwX2NtZHRlc3Q7CisJcy0+ZG9fY21kID0gc3ViZGV2XzcwMF9jbWQ7CisJcy0+Y2FuY2VsID0gc3ViZGV2XzcwMF9jYW5jZWw7CisKKwlzdWJkZXZwcml2LT5oYXZlX2lycSA9IDE7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzdWJkZXZfNzAwX2NsZWFudXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpZiAocy0+cHJpdmF0ZSkgeworCQlpZiAoc3ViZGV2cHJpdi0+aGF2ZV9pcnEpIHsKKwkJfQorCisJCWtmcmVlKHMtPnByaXZhdGUpOworCX0KK30KKworRVhQT1JUX1NZTUJPTChzdWJkZXZfNzAwX2luaXQpOworRVhQT1JUX1NZTUJPTChzdWJkZXZfNzAwX2luaXRfaXJxKTsKK0VYUE9SVF9TWU1CT0woc3ViZGV2XzcwMF9jbGVhbnVwKTsKK0VYUE9SVF9TWU1CT0woc3ViZGV2XzcwMF9pbnRlcnJ1cHQpOworCitzdGF0aWMgaW50IGRpbzcwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSAwOworI2lmZGVmIGluY29tcGxldGUKKwl1bnNpZ25lZCBpbnQgaXJxID0gMDsKKyNlbmRpZgorCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGV2LT5wcml2YXRlICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRpbzcwMF9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8vIGdldCBiYXNlIGFkZHJlc3MsIGlycSBldGMuIGJhc2VkIG9uIGJ1c3R5cGUKKwlzd2l0Y2ggKHRoaXNib2FyZC0+YnVzdHlwZSkgeworCWNhc2UgcGNtY2lhX2J1c3R5cGU6CisJCWxpbmsgPSBwY21jaWFfY3VyX2RldjsJLyogWFhYIGhhY2sgKi8KKwkJaWYgKCFsaW5rKQorCQkJcmV0dXJuIC1FSU87CisJCWlvYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKyNpZmRlZiBpbmNvbXBsZXRlCisJCWlycSA9IGxpbmstPmlycS5Bc3NpZ25lZElSUTsKKyNlbmRpZgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoImJ1ZyEgY291bGRuJ3QgZGV0ZXJtaW5lIGJvYXJkIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXByaW50aygiY29tZWRpJWQ6IG5pX2RhcV83MDA6ICVzLCBpbyAweCVseCIsIGRldi0+bWlub3IsCisJCXRoaXNib2FyZC0+bmFtZSwgaW9iYXNlKTsKKyNpZmRlZiBpbmNvbXBsZXRlCisJaWYgKGlycSkgeworCQlwcmludGsoIiwgaXJxICV1IiwgaXJxKTsKKwl9CisjZW5kaWYKKworCXByaW50aygiXG4iKTsKKworCWlmIChpb2Jhc2UgPT0gMCkgeworCQlwcmludGsoImlvIGJhc2UgYWRkcmVzcyBpcyB6ZXJvIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisjaWZkZWYgaW5jb21wbGV0ZQorCS8qIGdyYWIgb3VyIElSUSAqLworCWRldi0+aXJxID0gaXJxOworI2VuZGlmCisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBEQVFDYXJkLTcwMCBkaW8gKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzdWJkZXZfNzAwX2luaXQoZGV2LCBzLCBOVUxMLCBkZXYtPmlvYmFzZSk7CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgZGlvNzAwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBuaV9kYXFfNzAwOiBjcy1yZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+c3ViZGV2aWNlcykKKwkJc3ViZGV2XzcwMF9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMCk7CisKKwlpZiAodGhpc2JvYXJkLT5idXN0eXBlICE9IHBjbWNpYV9idXN0eXBlICYmIGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRElPNzAwX1NJWkUpOworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJcmV0dXJuIDA7Cit9OworCisvLyBQQ01DSUEgY3JhcAorCisvKgorICAgQWxsIHRoZSBQQ01DSUEgbW9kdWxlcyB1c2UgUENNQ0lBX0RFQlVHIHRvIGNvbnRyb2wgZGVidWdnaW5nLiAgSWYKKyAgIHlvdSBkbyBub3QgZGVmaW5lIFBDTUNJQV9ERUJVRyBhdCBhbGwsIGFsbCB0aGUgZGVidWcgY29kZSB3aWxsIGJlCisgICBsZWZ0IG91dC4gIElmIHlvdSBjb21waWxlIHdpdGggUENNQ0lBX0RFQlVHPTAsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwKKyAgIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIC0tIGJ1dCBpdCBjYW4gdGhlbiBiZSBlbmFibGVkIGZvciBzcGVjaWZpYworICAgbW9kdWxlcyBhdCBsb2FkIHRpbWUgd2l0aCBhICdwY19kZWJ1Zz0jJyBvcHRpb24gdG8gaW5zbW9kLgorKi8KKyNpZmRlZiBQQ01DSUFfREVCVUcKK3N0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Cittb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7CisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCitzdGF0aWMgY2hhciAqdmVyc2lvbiA9ICJuaV9kYXFfNzAwLmMsIGJhc2VkIG9uIGR1bW15X2NzLmMiOworI2Vsc2UKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKKyNlbmRpZgorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgZGlvNzAwX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBkaW83MDBfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgaW50IGRpbzcwMF9jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CitzdGF0aWMgaW50IGRpbzcwMF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworLyoKKyAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQorICAgImluc3RhbmNlcyIgb2YgdGhlIGRyaXZlciwgd2hlcmUgZWFjaCBpbnN0YW5jZSByZXByZXNlbnRzIGV2ZXJ5dGhpbmcKKyAgIG5lZWRlZCB0byBtYW5hZ2Ugb25lIGFjdHVhbCBQQ01DSUEgY2FyZC4KKyovCisKK3N0YXRpYyBpbnQgZGlvNzAwX2NzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIGRpbzcwMF9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CisKKy8qCisgICBZb3UnbGwgYWxzbyBuZWVkIHRvIHByb3RvdHlwZSBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IHdpbGwgYWN0dWFsbHkKKyAgIGJlIHVzZWQgdG8gdGFsayB0byB5b3VyIGRldmljZS4gIFNlZSAnbWVtb3J5X2NzJyBmb3IgYSBnb29kIGV4YW1wbGUKKyAgIG9mIGEgZnVsbHkgc2VsZi1zdWZmaWNpZW50IGRyaXZlcjsgdGhlIG90aGVyIGRyaXZlcnMgcmVseSBtb3JlIG9yCisgICBsZXNzIG9uIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuCisqLworCisvKgorICAgVGhlIGRldl9pbmZvIHZhcmlhYmxlIGlzIHRoZSAia2V5IiB0aGF0IGlzIHVzZWQgdG8gbWF0Y2ggdXAgdGhpcworICAgZGV2aWNlIGRyaXZlciB3aXRoIGFwcHJvcHJpYXRlIGNhcmRzLCB0aHJvdWdoIHRoZSBjYXJkIGNvbmZpZ3VyYXRpb24KKyAgIGRhdGFiYXNlLgorKi8KKworc3RhdGljIGNvbnN0IGRldl9pbmZvX3QgZGV2X2luZm8gPSAibmlfZGFxXzcwMCI7CisKK3N0cnVjdCBsb2NhbF9pbmZvX3QgeworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCWRldl9ub2RlX3Qgbm9kZTsKKwlpbnQgc3RvcDsKKwlzdHJ1Y3QgYnVzX29wZXJhdGlvbnMgKmJ1czsKK307CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGlvNzAwX2NzX2F0dGFjaCgpIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nCisgICAgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCisgICAgd2l0aCBDYXJkIFNlcnZpY2VzLgorCisgICAgVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CisgICAgY29uZmlndXJlIHRoZSBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEKKyAgICBjYXJkIGluc2VydGlvbiBldmVudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgZGlvNzAwX2NzX2F0dGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbDsKKworCXByaW50ayhLRVJOX0lORk8gIm5pX2RhcV83MDA6ICBjcy1hdHRhY2hcbiIpOworCisJREVCVUcoMCwgImRpbzcwMF9jc19hdHRhY2goKVxuIik7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLworCWxvY2FsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOworCWlmICghbG9jYWwpCisJCXJldHVybiAtRU5PTUVNOworCWxvY2FsLT5saW5rID0gbGluazsKKwlsaW5rLT5wcml2ID0gbG9jYWw7CisKKwkvKiBJbnRlcnJ1cHQgc2V0dXAgKi8KKwlsaW5rLT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0VYQ0xVU0lWRTsKKwlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfTEVWRUxfSUQ7CisJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOworCisJLyoKKwkgICBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcworCSAgIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvciBhbG1vc3QKKwkgICBldmVyeXRoaW5nLiAgSW4gbW9zdCBjbGllbnRzLCBtYW55IGRldGFpbHMgKGkuZS4sIG51bWJlciwgc2l6ZXMsCisJICAgYW5kIGF0dHJpYnV0ZXMgb2YgSU8gd2luZG93cykgYXJlIGZpeGVkIGJ5IHRoZSBuYXR1cmUgb2YgdGhlCisJICAgZGV2aWNlLCBhbmQgY2FuIGJlIGhhcmQtd2lyZWQgaGVyZS4KKwkgKi8KKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOworCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCisJcGNtY2lhX2N1cl9kZXYgPSBsaW5rOworCisJZGlvNzAwX2NvbmZpZyhsaW5rKTsKKworCXJldHVybiAwOworfQkJCQkvKiBkaW83MDBfY3NfYXR0YWNoICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhpcyBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIuICBUaGUgZGV2aWNlIGlzIGRlLXJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKKyAgICBzdHJ1Y3R1cmVzIGFyZSBmcmVlZC4gIE90aGVyd2lzZSwgdGhlIHN0cnVjdHVyZXMgd2lsbCBiZSBmcmVlZAorICAgIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRpbzcwMF9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisKKwlwcmludGsoS0VSTl9JTkZPICJuaV9kYXFfNzAwOiBjcy1kZXRhY2ghXG4iKTsKKworCURFQlVHKDAsICJkaW83MDBfY3NfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKworCWlmIChsaW5rLT5kZXZfbm9kZSkgeworCQkoKHN0cnVjdCBsb2NhbF9pbmZvX3QgKikgbGluay0+cHJpdiktPnN0b3AgPSAxOworCQlkaW83MDBfcmVsZWFzZShsaW5rKTsKKwl9CisKKwkvKiBUaGlzIHBvaW50cyB0byB0aGUgcGFyZW50IHN0cnVjdCBsb2NhbF9pbmZvX3Qgc3RydWN0ICovCisJaWYgKGxpbmstPnByaXYpCisJCWtmcmVlKGxpbmstPnByaXYpOworCit9CQkJCS8qIGRpbzcwMF9jc19kZXRhY2ggKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBkaW83MDBfY29uZmlnKCkgaXMgc2NoZWR1bGVkIHRvIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CisgICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCisgICAgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgZGlvNzAwX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpkZXYgPSBsaW5rLT5wcml2OworCXR1cGxlX3QgdHVwbGU7CisJY2lzcGFyc2VfdCBwYXJzZTsKKwlpbnQgbGFzdF9yZXQ7CisJdV9jaGFyIGJ1Zls2NF07CisJd2luX3JlcV90IHJlcTsKKwltZW1yZXFfdCBtYXA7CisJY2lzdHBsX2NmdGFibGVfZW50cnlfdCBkZmx0ID0geyAwIH07CisKKwlwcmludGsoS0VSTl9JTkZPICJuaV9kYXFfNzAwOiAgY3MtY29uZmlnXG4iKTsKKworCURFQlVHKDAsICJkaW83MDBfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKworCS8qCisJICAgVGhpcyByZWFkcyB0aGUgY2FyZCdzIENPTkZJRyB0dXBsZSB0byBmaW5kIGl0cyBjb25maWd1cmF0aW9uCisJICAgcmVnaXN0ZXJzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7CisJdHVwbGUuQXR0cmlidXRlcyA9IDA7CisJdHVwbGUuVHVwbGVEYXRhID0gYnVmOworCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSAhPSAwKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSkgIT0gMCkgeworCQljc19lcnJvcihsaW5rLCBHZXRUdXBsZURhdGEsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCWlmICgobGFzdF9yZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpKSAhPSAwKSB7CisJCWNzX2Vycm9yKGxpbmssIFBhcnNlVHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOworCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKKworCS8qCisJICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKKwkgICBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nCisJICAgdm9sdGFnZSwgSU8gd2luZG93LCBtZW1vcnkgd2luZG93LCBhbmQgaW50ZXJydXB0IHNldHRpbmdzLgorCisJICAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FyZCB0byBiZSBjb25maWd1cmVkOiB3ZSB1c2UKKwkgICBqdXN0IHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gdGhlIENJUy4gIEluIGFuIGlkZWFsIHdvcmxkLAorCSAgIHRoaXMgd291bGQgd29yayBmb3IgYW55IFBDTUNJQSBjYXJkLCBidXQgaXQgcmVxdWlyZXMgYSBjb21wbGV0ZQorCSAgIGFuZCBhY2N1cmF0ZSBDSVMuICBJbiBwcmFjdGljZSwgYSBkcml2ZXIgdXN1YWxseSAia25vd3MiIG1vc3Qgb2YKKwkgICB0aGVzZSB0aGluZ3Mgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBDSVMsIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzCisJICAgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApIHsKKwkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJd2hpbGUgKDEpIHsKKwkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKKwkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpICE9IDApCisJCQlnb3RvIG5leHRfZW50cnk7CisJCWlmIChwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpICE9IDApCisJCQlnb3RvIG5leHRfZW50cnk7CisKKwkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9ERUZBVUxUKQorCQkJZGZsdCA9ICpjZmc7CisJCWlmIChjZmctPmluZGV4ID09IDApCisJCQlnb3RvIG5leHRfZW50cnk7CisJCWxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSBjZmctPmluZGV4OworCisJCS8qIERvZXMgdGhpcyBjYXJkIG5lZWQgYXVkaW8gb3V0cHV0PyAqLworCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0FVRElPKSB7CisJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfU1BLUjsKKwkJCWxpbmstPmNvbmYuU3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CisJCX0KKworCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQorCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KKwkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKKwkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKKwkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQkJbGluay0+aW8uQXR0cmlidXRlczIgPSBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKKwkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQl9CisJCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQkJaWYgKHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbykgIT0gMCkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KKworCQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC5tZW0ubndpbiA+IDApKSB7CisJCQljaXN0cGxfbWVtX3QgKm1lbSA9CisJCQkJKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQubWVtOworCQkJcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9DTTsKKwkJCXJlcS5BdHRyaWJ1dGVzIHw9IFdJTl9FTkFCTEU7CisJCQlyZXEuQmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKKwkJCXJlcS5TaXplID0gbWVtLT53aW5bMF0ubGVuOworCQkJaWYgKHJlcS5TaXplIDwgMHgxMDAwKQorCQkJCXJlcS5TaXplID0gMHgxMDAwOworCQkJcmVxLkFjY2Vzc1NwZWVkID0gMDsKKwkJCWlmIChwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKQorCQkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJCW1hcC5QYWdlID0gMDsKKwkJCW1hcC5DYXJkT2Zmc2V0ID0gbWVtLT53aW5bMF0uY2FyZF9hZGRyOworCQkJaWYgKHBjbWNpYV9tYXBfbWVtX3BhZ2UobGluay0+d2luLCAmbWFwKSkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KKwkJLyogSWYgd2UgZ290IHRoaXMgZmFyLCB3ZSdyZSBjb29sISAqLworCQlicmVhazsKKworCSAgICAgIG5leHRfZW50cnk6CisJCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X25leHRfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gMCkgeworCQkJY3NfZXJyb3IobGluaywgR2V0TmV4dFR1cGxlLCBsYXN0X3JldCk7CisJCQlnb3RvIGNzX2ZhaWxlZDsKKwkJfQorCX0KKworCS8qCisJICAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQorCSAgIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCwgdW5sZXNzIHRoZSAnSGFuZGxlcicgbWVtYmVyIG9mIHRoZQorCSAgIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCisJICovCisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSkgIT0gMCkgeworCQkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgbGFzdF9yZXQpOworCQkJZ290byBjc19mYWlsZWQ7CisJCX0KKworCS8qCisJICAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKKwkgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCisJICAgY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KKwkgKi8KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpICE9IDApIHsKKwkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCisJLyoKKwkgICBBdCB0aGlzIHBvaW50LCB0aGUgZGV2X25vZGVfdCBzdHJ1Y3R1cmUocykgbmVlZCB0byBiZQorCSAgIGluaXRpYWxpemVkIGFuZCBhcnJhbmdlZCBpbiBhIGxpbmtlZCBsaXN0IGF0IGxpbmstPmRldi4KKwkgKi8KKwlzcHJpbnRmKGRldi0+bm9kZS5kZXZfbmFtZSwgIm5pX2RhcV83MDAiKTsKKwlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOworCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKKworCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4IiwKKwkJZGV2LT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMxKQorCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCisJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOworCWlmIChsaW5rLT53aW4pCisJCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLkJhc2UsCisJCQlyZXEuQmFzZSArIHJlcS5TaXplIC0gMSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuOworCisgICAgICBjc19mYWlsZWQ6CisJcHJpbnRrKEtFUk5fSU5GTyAibmlfZGFxXzcwMCBjcyBmYWlsZWQiKTsKKwlkaW83MDBfcmVsZWFzZShsaW5rKTsKKworfQkJCQkvKiBkaW83MDBfY29uZmlnICovCisKK3N0YXRpYyB2b2lkIGRpbzcwMF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCURFQlVHKDAsICJkaW83MDBfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Cit9CQkJCS8qIGRpbzcwMF9yZWxlYXNlICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhlIGNhcmQgc3RhdHVzIGV2ZW50IGhhbmRsZXIuICBNb3N0bHksIHRoaXMgc2NoZWR1bGVzIG90aGVyCisgICAgc3R1ZmYgdG8gcnVuIGFmdGVyIGFuIGV2ZW50IGlzIHJlY2VpdmVkLgorCisgICAgV2hlbiBhIENBUkRfUkVNT1ZBTCBldmVudCBpcyByZWNlaXZlZCwgd2UgaW1tZWRpYXRlbHkgc2V0IGEKKyAgICBwcml2YXRlIGZsYWcgdG8gYmxvY2sgZnV0dXJlIGFjY2Vzc2VzIHRvIHRoaXMgZGV2aWNlLiAgQWxsIHRoZQorICAgIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IGFjY2VzcyB0aGUgZGV2aWNlIHNob3VsZCBjaGVjayB0aGlzIGZsYWcKKyAgICB0byBtYWtlIHN1cmUgdGhlIGNhcmQgaXMgc3RpbGwgcHJlc2VudC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBpbnQgZGlvNzAwX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJLyogTWFyayB0aGUgZGV2aWNlIGFzIHN0b3BwZWQsIHRvIGJsb2NrIElPIHVudGlsIGxhdGVyICovCisJbG9jYWwtPnN0b3AgPSAxOworCXJldHVybiAwOworfQkJCQkvKiBkaW83MDBfY3Nfc3VzcGVuZCAqLworCitzdGF0aWMgaW50IGRpbzcwMF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJbG9jYWwtPnN0b3AgPSAwOworCXJldHVybiAwOworfQkJCQkvKiBkaW83MDBfY3NfcmVzdW1lICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgZGlvNzAwX2NzX2lkc1tdID0geworCS8qIE4uQi4gVGhlc2UgSURzIHNob3VsZCBtYXRjaCB0aG9zZSBpbiBkaW83MDBfYm9hcmRzICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTBiLCAweDQ3NDMpLAkvKiBkYXFjYXJkLTcwMCAqLworCVBDTUNJQV9ERVZJQ0VfTlVMTAorfTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIGRpbzcwMF9jc19pZHMpOworCitzdHJ1Y3QgcGNtY2lhX2RyaXZlciBkaW83MDBfY3NfZHJpdmVyID0geworCS5wcm9iZSA9IGRpbzcwMF9jc19hdHRhY2gsCisJLnJlbW92ZSA9IGRpbzcwMF9jc19kZXRhY2gsCisJLnN1c3BlbmQgPSBkaW83MDBfY3Nfc3VzcGVuZCwKKwkucmVzdW1lID0gZGlvNzAwX2NzX3Jlc3VtZSwKKwkuaWRfdGFibGUgPSBkaW83MDBfY3NfaWRzLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kcnYgPSB7CisJCQkubmFtZSA9IGRldl9pbmZvLAorCQl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9kaW83MDBfY3Modm9pZCkKK3sKKwlwcmludGsoIm5pX2RhcV83MDA6ICBjcy1pbml0IFxuIik7CisJREVCVUcoMCwgIiVzXG4iLCB2ZXJzaW9uKTsKKwlwY21jaWFfcmVnaXN0ZXJfZHJpdmVyKCZkaW83MDBfY3NfZHJpdmVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfZGlvNzAwX2NzKHZvaWQpCit7CisJREVCVUcoMCwgIm5pX2RhcV83MDA6IHVubG9hZGluZ1xuIik7CisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZkaW83MDBfY3NfZHJpdmVyKTsKK30KK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW5pdF9kaW83MDBfY3MoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGlvNzAwKTsKK30KKwordm9pZCBfX2V4aXQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlleGl0X2RpbzcwMF9jcygpOworCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX2RpbzcwMCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxX2RpbzI0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlYzVjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYwpAQCAtMCwwICsxLDU5OCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9uaV9kYXFfZGlvMjQuYworICAgIERyaXZlciBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENNQ0lBIERBUS1DYXJkIERJTy0yNAorICAgIENvcHlyaWdodCAoQykgMjAwMiBEYW5pZWwgVmVjaW5vIENhc3RlbCA8ZHZlY2lub0BhYmxlLmVzPgorCisgICAgUENNQ0lBIGNyYXAgYXQgZW5kIG9mIGZpbGUgaXMgYWRhcHRlZCBmcm9tIGR1bW15X2NzLmMgMS4zMSAyMDAxLzA4LzI0IDEyOjEzOjEzCisgICAgZnJvbSB0aGUgcGNtY2lhIHBhY2thZ2UuCisgICAgVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBwY21jaWEgZHVtbXlfY3MuYyBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCisgICAgPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKKyAgICBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisvKgorRHJpdmVyOiBuaV9kYXFfZGlvMjQKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ01DSUEgREFRLUNhcmQgRElPLTI0CitBdXRob3I6IERhbmllbCBWZWNpbm8gQ2FzdGVsIDxkdmVjaW5vQGFibGUuZXM+CitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIFBDTUNJQSBEQVEtQ2FyZCBESU8tMjQgKG5pX2RhcV9kaW8yNCkKK1N0YXR1czogPworVXBkYXRlZDogVGh1LCAwNyBOb3YgMjAwMiAyMTo1MzowNiAtMDgwMAorCitUaGlzIGlzIGp1c3QgYSB3cmFwcGVyIGFyb3VuZCB0aGUgODI1NS5vIGRyaXZlciB0byBwcm9wZXJseSBoYW5kbGUKK3RoZSBQQ01DSUEgaW50ZXJmYWNlLgorKi8KKworLy8jZGVmaW5lIExBQlBDX0RFQlVHICAgLy8gZW5hYmxlIGRlYnVnZ2luZyBtZXNzYWdlcworI3VuZGVmIExBQlBDX0RFQlVHCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSAiODI1NS5oIgorCisjaW5jbHVkZSA8cGNtY2lhL2NzX3R5cGVzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2NzLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3RwbC5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXNyZWcuaD4KKyNpbmNsdWRlIDxwY21jaWEvZHMuaD4KKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWFfY3VyX2RldiA9IE5VTEw7CisKKyNkZWZpbmUgRElPMjRfU0laRSA0CQkvLyBzaXplIG9mIGlvIHJlZ2lvbiB1c2VkIGJ5IGJvYXJkCisKK3N0YXRpYyBpbnQgZGlvMjRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGlvMjRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworZW51bSBkaW8yNF9idXN0eXBlIHsgcGNtY2lhX2J1c3R5cGUgfTsKKwordHlwZWRlZiBzdHJ1Y3QgZGlvMjRfYm9hcmRfc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkZXZpY2VfaWQ7CQkvLyBkZXZpY2UgaWQgZm9yIHBjbWNpYSBib2FyZAorCWVudW0gZGlvMjRfYnVzdHlwZSBidXN0eXBlOwkvLyBQQ01DSUEKKwlpbnQgaGF2ZV9kaW87CQkvLyBoYXZlIDgyNTUgY2hpcAorCS8vIGZ1bmN0aW9uIHBvaW50ZXJzIHNvIHdlIGNhbiB1c2UgaW5iL291dGIgb3IgcmVhZGIvd3JpdGViIGFzIGFwcHJvcHJpYXRlCisJdW5zaWduZWQgaW50ICgqcmVhZF9ieXRlKSAodW5zaWduZWQgaW50IGFkZHJlc3MpOworCXZvaWQgKCp3cml0ZV9ieXRlKSAodW5zaWduZWQgaW50IGJ5dGUsIHVuc2lnbmVkIGludCBhZGRyZXNzKTsKK30gZGlvMjRfYm9hcmQ7CisKK3N0YXRpYyBjb25zdCBkaW8yNF9ib2FyZCBkaW8yNF9ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRhcWNhcmQtZGlvMjQiLAorCSAgICAgIGRldmljZV9pZDoweDQ3NWMsLy8gMHgxMGIgaXMgbWFudWZhY3R1cmVyIGlkLCAweDQ3NWMgaXMgZGV2aWNlIGlkCisJICAgICAgYnVzdHlwZToJcGNtY2lhX2J1c3R5cGUsCisJICAgICAgaGF2ZV9kaW86MSwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJIm5pX2RhcV9kaW8yNCIsCisJICAgICAgZGV2aWNlX2lkOjB4NDc1YywvLyAweDEwYiBpcyBtYW51ZmFjdHVyZXIgaWQsIDB4NDc1YyBpcyBkZXZpY2UgaWQKKwkgICAgICBidXN0eXBlOglwY21jaWFfYnVzdHlwZSwKKwkgICAgICBoYXZlX2RpbzoxLAorCQl9LAorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBkaW8yNF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdHJ1Y3QgZGlvMjRfcHJpdmF0ZSB7CisKKwlpbnQgZGF0YTsJCS8qIG51bWJlciBvZiBkYXRhIHBvaW50cyBsZWZ0IHRvIGJlIHRha2VuICovCit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBkaW8yNF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RpbzI0ID0geworICAgICAgZHJpdmVyX25hbWU6Im5pX2RhcV9kaW8yNCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGlvMjRfYXR0YWNoLAorICAgICAgZGV0YWNoOmRpbzI0X2RldGFjaCwKKyAgICAgIG51bV9uYW1lczpzaXplb2YoZGlvMjRfYm9hcmRzKSAvIHNpemVvZihkaW8yNF9ib2FyZCksCisgICAgICBib2FyZF9uYW1lOiZkaW8yNF9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2YoZGlvMjRfYm9hcmQpLAorfTsKKworc3RhdGljIGludCBkaW8yNF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSAwOworI2lmZGVmIGluY29tcGxldGUKKwl1bnNpZ25lZCBpbnQgaXJxID0gMDsKKyNlbmRpZgorCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGV2LT5wcml2YXRlICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRpbzI0X3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLy8gZ2V0IGJhc2UgYWRkcmVzcywgaXJxIGV0Yy4gYmFzZWQgb24gYnVzdHlwZQorCXN3aXRjaCAodGhpc2JvYXJkLT5idXN0eXBlKSB7CisJY2FzZSBwY21jaWFfYnVzdHlwZToKKwkJbGluayA9IHBjbWNpYV9jdXJfZGV2OwkvKiBYWFggaGFjayAqLworCQlpZiAoIWxpbmspCisJCQlyZXR1cm4gLUVJTzsKKwkJaW9iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOworI2lmZGVmIGluY29tcGxldGUKKwkJaXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROworI2VuZGlmCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiYnVnISBjb3VsZG4ndCBkZXRlcm1pbmUgYm9hcmQgdHlwZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcHJpbnRrKCJjb21lZGklZDogbmlfZGFxX2RpbzI0OiAlcywgaW8gMHglbHgiLCBkZXYtPm1pbm9yLAorCQl0aGlzYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisjaWZkZWYgaW5jb21wbGV0ZQorCWlmIChpcnEpIHsKKwkJcHJpbnRrKCIsIGlycSAldSIsIGlycSk7CisJfQorI2VuZGlmCisKKwlwcmludGsoIlxuIik7CisKKwlpZiAoaW9iYXNlID09IDApIHsKKwkJcHJpbnRrKCJpbyBiYXNlIGFkZHJlc3MgaXMgemVybyFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworI2lmZGVmIGluY29tcGxldGUKKwkvKiBncmFiIG91ciBJUlEgKi8KKwlkZXYtPmlycSA9IGlycTsKKyNlbmRpZgorCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogODI1NSBkaW8gKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgTlVMTCwgZGV2LT5pb2Jhc2UpOworCisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgaW50IGRpbzI0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBuaV9kYXFfZGlvMjQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5zdWJkZXZpY2VzKQorCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMCk7CisKKwlpZiAodGhpc2JvYXJkLT5idXN0eXBlICE9IHBjbWNpYV9idXN0eXBlICYmIGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRElPMjRfU0laRSk7CisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlyZXR1cm4gMDsKK307CisKKy8vIFBDTUNJQSBjcmFwCisKKy8qCisgICBBbGwgdGhlIFBDTUNJQSBtb2R1bGVzIHVzZSBQQ01DSUFfREVCVUcgdG8gY29udHJvbCBkZWJ1Z2dpbmcuICBJZgorICAgeW91IGRvIG5vdCBkZWZpbmUgUENNQ0lBX0RFQlVHIGF0IGFsbCwgYWxsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwgYmUKKyAgIGxlZnQgb3V0LiAgSWYgeW91IGNvbXBpbGUgd2l0aCBQQ01DSUFfREVCVUc9MCwgdGhlIGRlYnVnIGNvZGUgd2lsbAorICAgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0gYnV0IGl0IGNhbiB0aGVuIGJlIGVuYWJsZWQgZm9yIHNwZWNpZmljCisgICBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEgJ3BjX2RlYnVnPSMnIG9wdGlvbiB0byBpbnNtb2QuCisqLworI2lmZGVmIFBDTUNJQV9ERUJVRworc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKK21vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKK3N0YXRpYyBjaGFyICp2ZXJzaW9uID0gIm5pX2RhcV9kaW8yNC5jLCBiYXNlZCBvbiBkdW1teV9jcy5jIjsKKyNlbHNlCisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRpbzI0X2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBkaW8yNF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyBpbnQgZGlvMjRfY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworc3RhdGljIGludCBkaW8yNF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworLyoKKyAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQorICAgImluc3RhbmNlcyIgb2YgdGhlIGRyaXZlciwgd2hlcmUgZWFjaCBpbnN0YW5jZSByZXByZXNlbnRzIGV2ZXJ5dGhpbmcKKyAgIG5lZWRlZCB0byBtYW5hZ2Ugb25lIGFjdHVhbCBQQ01DSUEgY2FyZC4KKyovCisKK3N0YXRpYyBpbnQgZGlvMjRfY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworc3RhdGljIHZvaWQgZGlvMjRfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworCisvKgorICAgWW91J2xsIGFsc28gbmVlZCB0byBwcm90b3R5cGUgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGFjdHVhbGx5CisgICBiZSB1c2VkIHRvIHRhbGsgdG8geW91ciBkZXZpY2UuICBTZWUgJ21lbW9yeV9jcycgZm9yIGEgZ29vZCBleGFtcGxlCisgICBvZiBhIGZ1bGx5IHNlbGYtc3VmZmljaWVudCBkcml2ZXI7IHRoZSBvdGhlciBkcml2ZXJzIHJlbHkgbW9yZSBvcgorICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgorKi8KKworLyoKKyAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKKyAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCisgICBkYXRhYmFzZS4KKyovCisKK3N0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gIm5pX2RhcV9kaW8yNCI7CisKK3R5cGVkZWYgc3RydWN0IGxvY2FsX2luZm9fdCB7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJZGV2X25vZGVfdCBub2RlOworCWludCBzdG9wOworCXN0cnVjdCBidXNfb3BlcmF0aW9ucyAqYnVzOworfSBsb2NhbF9pbmZvX3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGlvMjRfY3NfYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKKyAgICBsb2NhbCBkYXRhIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuCisKKyAgICBUaGUgZGV2X2xpbmsgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkKKyAgICBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYQorICAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBkaW8yNF9jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJbG9jYWxfaW5mb190ICpsb2NhbDsKKworCXByaW50ayhLRVJOX0lORk8gIm5pX2RhcV9kaW8yNDogSE9MQSBTT1kgWU8gLSBDUy1hdHRhY2ghXG4iKTsKKworCURFQlVHKDAsICJkaW8yNF9jc19hdHRhY2goKVxuIik7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLworCWxvY2FsID0ga3phbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsb2NhbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbG9jYWwtPmxpbmsgPSBsaW5rOworCWxpbmstPnByaXYgPSBsb2NhbDsKKworCS8qIEludGVycnVwdCBzZXR1cCAqLworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5pcnEuSGFuZGxlciA9IE5VTEw7CisKKwkvKgorCSAgIEdlbmVyYWwgc29ja2V0IGNvbmZpZ3VyYXRpb24gZGVmYXVsdHMgY2FuIGdvIGhlcmUuICBJbiB0aGlzCisJICAgY2xpZW50LCB3ZSBhc3N1bWUgdmVyeSBsaXR0bGUsIGFuZCByZWx5IG9uIHRoZSBDSVMgZm9yIGFsbW9zdAorCSAgIGV2ZXJ5dGhpbmcuICBJbiBtb3N0IGNsaWVudHMsIG1hbnkgZGV0YWlscyAoaS5lLiwgbnVtYmVyLCBzaXplcywKKwkgICBhbmQgYXR0cmlidXRlcyBvZiBJTyB3aW5kb3dzKSBhcmUgZml4ZWQgYnkgdGhlIG5hdHVyZSBvZiB0aGUKKwkgICBkZXZpY2UsIGFuZCBjYW4gYmUgaGFyZC13aXJlZCBoZXJlLgorCSAqLworCWxpbmstPmNvbmYuQXR0cmlidXRlcyA9IDA7CisJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisKKwlwY21jaWFfY3VyX2RldiA9IGxpbms7CisKKwlkaW8yNF9jb25maWcobGluayk7CisKKwlyZXR1cm4gMDsKK30JCQkJLyogZGlvMjRfY3NfYXR0YWNoICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgVGhpcyBkZWxldGVzIGEgZHJpdmVyICJpbnN0YW5jZSIuICBUaGUgZGV2aWNlIGlzIGRlLXJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKKyAgICBzdHJ1Y3R1cmVzIGFyZSBmcmVlZC4gIE90aGVyd2lzZSwgdGhlIHN0cnVjdHVyZXMgd2lsbCBiZSBmcmVlZAorICAgIHdoZW4gdGhlIGRldmljZSBpcyByZWxlYXNlZC4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGRpbzI0X2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKworCXByaW50ayhLRVJOX0lORk8gIm5pX2RhcV9kaW8yNDogSE9MQSBTT1kgWU8gLSBjcy1kZXRhY2ghXG4iKTsKKworCURFQlVHKDAsICJkaW8yNF9jc19kZXRhY2goMHglcClcbiIsIGxpbmspOworCisJaWYgKGxpbmstPmRldl9ub2RlKSB7CisJCSgobG9jYWxfaW5mb190ICopIGxpbmstPnByaXYpLT5zdG9wID0gMTsKKwkJZGlvMjRfcmVsZWFzZShsaW5rKTsKKwl9CisKKwkvKiBUaGlzIHBvaW50cyB0byB0aGUgcGFyZW50IGxvY2FsX2luZm9fdCBzdHJ1Y3QgKi8KKwlpZiAobGluay0+cHJpdikKKwkJa2ZyZWUobGluay0+cHJpdik7CisKK30JCQkJLyogZGlvMjRfY3NfZGV0YWNoICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGlvMjRfY29uZmlnKCkgaXMgc2NoZWR1bGVkIHRvIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CisgICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCisgICAgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgZGlvMjRfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKKwl0dXBsZV90IHR1cGxlOworCWNpc3BhcnNlX3QgcGFyc2U7CisJaW50IGxhc3RfcmV0OworCXVfY2hhciBidWZbNjRdOworCXdpbl9yZXFfdCByZXE7CisJbWVtcmVxX3QgbWFwOworCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OworCisJcHJpbnRrKEtFUk5fSU5GTyAibmlfZGFxX2RpbzI0OiBIT0xBIFNPWSBZTyEgLSBjb25maWdcbiIpOworCisJREVCVUcoMCwgImRpbzI0X2NvbmZpZygweCVwKVxuIiwgbGluayk7CisKKwkvKgorCSAgIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbgorCSAgIHJlZ2lzdGVycy4KKwkgKi8KKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOworCXR1cGxlLkF0dHJpYnV0ZXMgPSAwOworCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKKwl0dXBsZS5UdXBsZURhdGFNYXggPSBzaXplb2YoYnVmKTsKKwl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkgIT0gMCkgeworCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpICE9IDApIHsKKwkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkgIT0gMCkgeworCQljc19lcnJvcihsaW5rLCBQYXJzZVR1cGxlLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlsaW5rLT5jb25mLkNvbmZpZ0Jhc2UgPSBwYXJzZS5jb25maWcuYmFzZTsKKwlsaW5rLT5jb25mLlByZXNlbnQgPSBwYXJzZS5jb25maWcucm1hc2tbMF07CisKKwkvKgorCSAgIEluIHRoaXMgbG9vcCwgd2Ugc2NhbiB0aGUgQ0lTIGZvciBjb25maWd1cmF0aW9uIHRhYmxlIGVudHJpZXMsCisJICAgZWFjaCBvZiB3aGljaCBkZXNjcmliZXMgYSB2YWxpZCBjYXJkIGNvbmZpZ3VyYXRpb24sIGluY2x1ZGluZworCSAgIHZvbHRhZ2UsIElPIHdpbmRvdywgbWVtb3J5IHdpbmRvdywgYW5kIGludGVycnVwdCBzZXR0aW5ncy4KKworCSAgIFdlIG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNhcmQgdG8gYmUgY29uZmlndXJlZDogd2UgdXNlCisJICAganVzdCB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBDSVMuICBJbiBhbiBpZGVhbCB3b3JsZCwKKwkgICB0aGlzIHdvdWxkIHdvcmsgZm9yIGFueSBQQ01DSUEgY2FyZCwgYnV0IGl0IHJlcXVpcmVzIGEgY29tcGxldGUKKwkgICBhbmQgYWNjdXJhdGUgQ0lTLiAgSW4gcHJhY3RpY2UsIGEgZHJpdmVyIHVzdWFsbHkgImtub3dzIiBtb3N0IG9mCisJICAgdGhlc2UgdGhpbmdzIHdpdGhvdXQgY29uc3VsdGluZyB0aGUgQ0lTLCBhbmQgbW9zdCBjbGllbnQgZHJpdmVycworCSAgIHdpbGwgb25seSB1c2UgdGhlIENJUyB0byBmaWxsIGluIGltcGxlbWVudGF0aW9uLWRlZmluZWQgZGV0YWlscy4KKwkgKi8KKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSAhPSAwKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCXdoaWxlICgxKSB7CisJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmNmZyA9ICYocGFyc2UuY2Z0YWJsZV9lbnRyeSk7CisJCWlmIChwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSAhPSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSAhPSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCisJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKKwkJCWRmbHQgPSAqY2ZnOworCQlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKKworCQkvKiBEb2VzIHRoaXMgY2FyZCBuZWVkIGF1ZGlvIG91dHB1dD8gKi8KKwkJaWYgKGNmZy0+ZmxhZ3MgJiBDSVNUUExfQ0ZUQUJMRV9BVURJTykgeworCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX1NQS1I7CisJCQlsaW5rLT5jb25mLlN0YXR1cyA9IENDU1JfQVVESU9fRU5BOworCQl9CisKKwkJLyogRG8gd2UgbmVlZCB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQ/ICovCisJCWlmIChjZmctPmlycS5JUlFJbmZvMSB8fCBkZmx0LmlycS5JUlFJbmZvMSkKKwkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9JUlE7CisKKwkJLyogSU8gd2luZG93IHNldHRpbmdzICovCisJCWxpbmstPmlvLk51bVBvcnRzMSA9IGxpbmstPmlvLk51bVBvcnRzMiA9IDA7CisJCWlmICgoY2ZnLT5pby5ud2luID4gMCkgfHwgKGRmbHQuaW8ubndpbiA+IDApKSB7CisJCQljaXN0cGxfaW9fdCAqaW8gPSAoY2ZnLT5pby5ud2luKSA/ICZjZmctPmlvIDogJmRmbHQuaW87CisJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF9BVVRPOworCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzhCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCQkJaWYgKCEoaW8tPmZsYWdzICYgQ0lTVFBMX0lPXzE2QklUKSkKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMSA9IElPX0RBVEFfUEFUSF9XSURUSF84OworCQkJbGluay0+aW8uSU9BZGRyTGluZXMgPSBpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSzsKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSA9IGlvLT53aW5bMF0uYmFzZTsKKwkJCWxpbmstPmlvLk51bVBvcnRzMSA9IGlvLT53aW5bMF0ubGVuOworCQkJaWYgKGlvLT5ud2luID4gMSkgeworCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMyID0gbGluay0+aW8uQXR0cmlidXRlczE7CisJCQkJbGluay0+aW8uQmFzZVBvcnQyID0gaW8tPndpblsxXS5iYXNlOworCQkJCWxpbmstPmlvLk51bVBvcnRzMiA9IGlvLT53aW5bMV0ubGVuOworCQkJfQorCQkJLyogVGhpcyByZXNlcnZlcyBJTyBzcGFjZSBidXQgZG9lc24ndCBhY3R1YWxseSBlbmFibGUgaXQgKi8KKwkJCWlmIChwY21jaWFfcmVxdWVzdF9pbyhsaW5rLCAmbGluay0+aW8pICE9IDApCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisKKwkJaWYgKChjZmctPm1lbS5ud2luID4gMCkgfHwgKGRmbHQubWVtLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX21lbV90ICptZW0gPQorCQkJCShjZmctPm1lbS5ud2luKSA/ICZjZmctPm1lbSA6ICZkZmx0Lm1lbTsKKwkJCXJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfMTYgfCBXSU5fTUVNT1JZX1RZUEVfQ007CisJCQlyZXEuQXR0cmlidXRlcyB8PSBXSU5fRU5BQkxFOworCQkJcmVxLkJhc2UgPSBtZW0tPndpblswXS5ob3N0X2FkZHI7CisJCQlyZXEuU2l6ZSA9IG1lbS0+d2luWzBdLmxlbjsKKwkJCWlmIChyZXEuU2l6ZSA8IDB4MTAwMCkKKwkJCQlyZXEuU2l6ZSA9IDB4MTAwMDsKKwkJCXJlcS5BY2Nlc3NTcGVlZCA9IDA7CisJCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCQltYXAuUGFnZSA9IDA7CisJCQltYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKKwkJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1hcCkpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisJCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KKwkJYnJlYWs7CisKKwkgICAgICBuZXh0X2VudHJ5OgorCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpICE9IDApIHsKKwkJCWNzX2Vycm9yKGxpbmssIEdldE5leHRUdXBsZSwgbGFzdF9yZXQpOworCQkJZ290byBjc19mYWlsZWQ7CisJCX0KKwl9CisKKwkvKgorCSAgIEFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYXNzaWduIGEKKwkgICBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQsIHVubGVzcyB0aGUgJ0hhbmRsZXInIG1lbWJlciBvZiB0aGUKKwkgICBpcnEgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLgorCSAqLworCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCisJCWlmICgobGFzdF9yZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpICE9IDApIHsKKwkJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGxhc3RfcmV0KTsKKwkJCWdvdG8gY3NfZmFpbGVkOworCQl9CisKKwkvKgorCSAgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCisJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQorCSAgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCisJICovCisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSAhPSAwKSB7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKworCS8qCisJICAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKKwkgICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuCisJICovCisJc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsICJuaV9kYXFfZGlvMjQiKTsKKwlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOworCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKKworCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4IiwKKwkJZGV2LT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMxKQorCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCisJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOworCWlmIChsaW5rLT53aW4pCisJCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLkJhc2UsCisJCQlyZXEuQmFzZSArIHJlcS5TaXplIC0gMSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuOworCisgICAgICBjc19mYWlsZWQ6CisJcHJpbnRrKEtFUk5fSU5GTyAiRmFsbG8iKTsKKwlkaW8yNF9yZWxlYXNlKGxpbmspOworCit9CQkJCS8qIGRpbzI0X2NvbmZpZyAqLworCitzdGF0aWMgdm9pZCBkaW8yNF9yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCURFQlVHKDAsICJkaW8yNF9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKworCXBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKK30JCQkJLyogZGlvMjRfcmVsZWFzZSAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFRoZSBjYXJkIHN0YXR1cyBldmVudCBoYW5kbGVyLiAgTW9zdGx5LCB0aGlzIHNjaGVkdWxlcyBvdGhlcgorICAgIHN0dWZmIHRvIHJ1biBhZnRlciBhbiBldmVudCBpcyByZWNlaXZlZC4KKworICAgIFdoZW4gYSBDQVJEX1JFTU9WQUwgZXZlbnQgaXMgcmVjZWl2ZWQsIHdlIGltbWVkaWF0ZWx5IHNldCBhCisgICAgcHJpdmF0ZSBmbGFnIHRvIGJsb2NrIGZ1dHVyZSBhY2Nlc3NlcyB0byB0aGlzIGRldmljZS4gIEFsbCB0aGUKKyAgICBmdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBhY2Nlc3MgdGhlIGRldmljZSBzaG91bGQgY2hlY2sgdGhpcyBmbGFnCisgICAgdG8gbWFrZSBzdXJlIHRoZSBjYXJkIGlzIHN0aWxsIHByZXNlbnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IGRpbzI0X2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CisKKwkvKiBNYXJrIHRoZSBkZXZpY2UgYXMgc3RvcHBlZCwgdG8gYmxvY2sgSU8gdW50aWwgbGF0ZXIgKi8KKwlsb2NhbC0+c3RvcCA9IDE7CisJcmV0dXJuIDA7Cit9CQkJCS8qIGRpbzI0X2NzX3N1c3BlbmQgKi8KKworc3RhdGljIGludCBkaW8yNF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJbG9jYWxfaW5mb190ICpsb2NhbCA9IGxpbmstPnByaXY7CisKKwlsb2NhbC0+c3RvcCA9IDA7CisJcmV0dXJuIDA7Cit9CQkJCS8qIGRpbzI0X2NzX3Jlc3VtZSAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlX2lkIGRpbzI0X2NzX2lkc1tdID0geworCS8qIE4uQi4gVGhlc2UgSURzIHNob3VsZCBtYXRjaCB0aG9zZSBpbiBkaW8yNF9ib2FyZHMgKi8KKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMGIsIDB4NDc1YyksCS8qIGRhcWNhcmQtZGlvMjQgKi8KKwlQQ01DSUFfREVWSUNFX05VTEwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBkaW8yNF9jc19pZHMpOworCitzdHJ1Y3QgcGNtY2lhX2RyaXZlciBkaW8yNF9jc19kcml2ZXIgPSB7CisJLnByb2JlID0gZGlvMjRfY3NfYXR0YWNoLAorCS5yZW1vdmUgPSBkaW8yNF9jc19kZXRhY2gsCisJLnN1c3BlbmQgPSBkaW8yNF9jc19zdXNwZW5kLAorCS5yZXN1bWUgPSBkaW8yNF9jc19yZXN1bWUsCisJLmlkX3RhYmxlID0gZGlvMjRfY3NfaWRzLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kcnYgPSB7CisJCQkubmFtZSA9IGRldl9pbmZvLAorCQl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9kaW8yNF9jcyh2b2lkKQoreworCXByaW50aygibmlfZGFxX2RpbzI0OiBIT0xBIFNPWSBZTyFcbiIpOworCURFQlVHKDAsICIlc1xuIiwgdmVyc2lvbik7CisJcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmZGlvMjRfY3NfZHJpdmVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfZGlvMjRfY3Modm9pZCkKK3sKKwlERUJVRygwLCAibmlfZGlvMjQ6IHVubG9hZGluZ1xuIik7CisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZkaW8yNF9jc19kcml2ZXIpOworfQorCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGluaXRfZGlvMjRfY3MoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBjb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfZGlvMjQpOworfQorCit2b2lkIF9fZXhpdCBjbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWV4aXRfZGlvMjRfY3MoKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kaW8yNCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ODk4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYwpAQCAtMCwwICsxLDIwMDUgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYworICAgIERyaXZlciBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgTGFiLVBDIHNlcmllcyBib2FyZHMgYW5kIGNvbXBhdGlibGVzCisgICAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisvKgorRHJpdmVyOiBuaV9sYWJwYworRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIExhYi1QQyAoJiBjb21wYXRpYmxlcykKK0F1dGhvcjogRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBMYWItUEMtMTIwMCAobGFicGMtMTIwMCksCisgIExhYi1QQy0xMjAwQUkgKGxhYnBjLTEyMDBhaSksIExhYi1QQysgKGxhYi1wYyspLCBQQ0ktMTIwMCAobmlfbGFicGMpCitTdGF0dXM6IHdvcmtzCisKK1Rlc3RlZCB3aXRoIGxhYi1wYy0xMjAwLiAgRm9yIHRoZSBvbGRlciBMYWItUEMrLCBub3QgYWxsIGlucHV0IHJhbmdlcworYW5kIGFuYWxvZyByZWZlcmVuY2VzIHdpbGwgd29yaywgdGhlIGF2YWlsYWJsZSByYW5nZXMvYXJlZnMgd2lsbAorZGVwZW5kIG9uIGhvdyB5b3UgaGF2ZSBjb25maWd1cmVkIHRoZSBqdW1wZXJzIG9uIHlvdXIgYm9hcmQKKyhzZWUgeW91ciBvd25lcidzIG1hbnVhbCkuCisKK0tlcm5lbC1sZXZlbCBJU0EgcGx1Zy1hbmQtcGxheSBzdXBwb3J0IGZvciB0aGUgbGFiLXBjLTEyMDAKK2JvYXJkcyBoYXMgbm90Cit5ZXQgYmVlbiBhZGRlZCB0byB0aGUgZHJpdmVyLCBtYWlubHkgZHVlIHRvIHRoZSBmYWN0IHRoYXQKK0kgZG9uJ3Qga25vdyB0aGUgZGV2aWNlIGlkIG51bWJlcnMuICBJZiB5b3UgaGF2ZSBvbmUKK29mIHRoZXNlIGJvYXJkcywKK3BsZWFzZSBmaWxlIGEgYnVnIHJlcG9ydCBhdCBodHRwczovL2J1Z3MuY29tZWRpLm9yZy8KK3NvIEkgY2FuIGdldCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20geW91LgorCitUaGUgMTIwMCBzZXJpZXMgYm9hcmRzIGhhdmUgb25ib2FyZCBjYWxpYnJhdGlvbiBkYWNzIGZvciBjb3JyZWN0aW5nCithbmFsb2cgaW5wdXQvb3V0cHV0IG9mZnNldHMgYW5kIGdhaW5zLiAgVGhlIHByb3BlciBzZXR0aW5ncyBmb3IgdGhlc2UKK2NhbGRhY3MgYXJlIHN0b3JlZCBvbiB0aGUgYm9hcmQncyBlZXByb20uICBUbyByZWFkIHRoZSBjYWxkYWMgdmFsdWVzCitmcm9tIHRoZSBlZXByb20gYW5kIHN0b3JlIHRoZW0gaW50byBhIGZpbGUgdGhhdCBjYW4gYmUgdGhlbiBiZSB1c2VkIGJ5Citjb21lZGlsaWIsIHVzZSB0aGUgY29tZWRpX2NhbGlicmF0ZSBwcm9ncmFtLgorCitDb25maWd1cmF0aW9uIG9wdGlvbnMgLSBJU0EgYm9hcmRzOgorICBbMF0gLSBJL08gcG9ydCBiYXNlIGFkZHJlc3MKKyAgWzFdIC0gSVJRIChvcHRpb25hbCwgcmVxdWlyZWQgZm9yIHRpbWVkIG9yIGV4dGVybmFsbHkgdHJpZ2dlcmVkIGNvbnZlcnNpb25zKQorICBbMl0gLSBETUEgY2hhbm5lbCAob3B0aW9uYWwpCisKK0NvbmZpZ3VyYXRpb24gb3B0aW9ucyAtIFBDSSBib2FyZHM6CisgIFswXSAtIGJ1cyAob3B0aW9uYWwpCisgIFsxXSAtIHNsb3QgKG9wdGlvbmFsKQorCitUaGUgTGFiLXBjKyBoYXMgcXVpcmt5IGNoYW5saXN0IHJlcXVpcmVtZW50cword2hlbiBzY2FubmluZyBtdWx0aXBsZSBjaGFubmVscy4gIE11bHRpcGxlIGNoYW5uZWwgc2Nhbgorc2VxdWVuY2UgbXVzdCBzdGFydCBhdCBoaWdoZXN0IGNoYW5uZWwsIHRoZW4gZGVjcmVtZW50IGRvd24gdG8KK2NoYW5uZWwgMC4gIFRoZSByZXN0IG9mIHRoZSBjYXJkcyBjYW4gc2NhbiBkb3duIGxpa2UgbGFiLXBjKyBvciBzY2FuCit1cCBmcm9tIGNoYW5uZWwgemVyby4gIENoYW5saXN0cyBjb25zaXN0aW5nIG9mIGFsbCBvbmUgY2hhbm5lbAorYXJlIGFsc28gbGVnYWwsIGFuZCBhbGxvdyB5b3UgdG8gcGFjZSBjb252ZXJzaW9ucyBpbiBidXJzdHMuCisKKyovCisKKy8qCisKK05JIG1hbnVhbHM6CiszNDEzMDlhIChsYWJwYy0xMjAwIHJlZ2lzdGVyIG1hbnVhbCkKKzM0MDkxNGEgKHBjaS0xMjAwKQorMzIwNTAyYiAobGFiLXBjKykKKworKi8KKworI3VuZGVmIExBQlBDX0RFQlVHCisvLyNkZWZpbmUgTEFCUENfREVCVUcgICAvLyBlbmFibGUgZGVidWdnaW5nIG1lc3NhZ2VzCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJtaXRlLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisjaW5jbHVkZSAibmlfbGFicGMuaCIKKworI2RlZmluZSBEUlZfTkFNRSAibmlfbGFicGMiCisKKyNkZWZpbmUgTEFCUENfU0laRSAgICAgICAgICAgMzIJLy8gc2l6ZSBvZiBpbyByZWdpb24gdXNlZCBieSBib2FyZAorI2RlZmluZSBMQUJQQ19USU1FUl9CQVNFICAgICAgICAgICAgNTAwCS8vIDIgTUh6IG1hc3RlciBjbG9jaworCisvKiBSZWdpc3RlcnMgZm9yIHRoZSBsYWItcGMrICovCisKKy8vd3JpdGUtb25seSByZWdpc3RlcnMKKyNkZWZpbmUgQ09NTUFORDFfUkVHCTB4MAorI2RlZmluZSAgIEFEQ19HQUlOX01BU0sJKDB4NyA8PCA0KQorI2RlZmluZSAgIEFEQ19DSEFOX0JJVFMoeCkJKCh4KSAmIDB4NykKKyNkZWZpbmUgICBBRENfU0NBTl9FTl9CSVQJMHg4MAkvLyBlbmFibGVzIG11bHRpIGNoYW5uZWwgc2NhbnMKKyNkZWZpbmUgQ09NTUFORDJfUkVHCTB4MQorI2RlZmluZSAgIFBSRVRSSUdfQklUCTB4MQkvLyBlbmFibGUgcHJldHJpZ2dlcmluZyAodXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIFNXVFJJRykKKyNkZWZpbmUgICBIV1RSSUdfQklUCTB4MgkvLyBlbmFibGUgcGFjZWQgY29udmVyc2lvbnMgb24gZXh0ZXJuYWwgdHJpZ2dlcgorI2RlZmluZSAgIFNXVFJJR19CSVQJMHg0CS8vIGVuYWJsZSBwYWNlZCBjb252ZXJzaW9ucworI2RlZmluZSAgIENBU0NBREVfQklUCTB4OAkvLyB1c2UgdHdvIGNhc2NhZGVkIGNvdW50ZXJzIGZvciBwYWNpbmcKKyNkZWZpbmUgICBEQUNfUEFDRURfQklUKGNoYW5uZWwpCSgweDQwIDw8ICgoY2hhbm5lbCkgJiAweDEpKQorI2RlZmluZSBDT01NQU5EM19SRUcJMHgyCisjZGVmaW5lICAgRE1BX0VOX0JJVAkweDEJLy8gZW5hYmxlIGRtYSB0cmFuc2ZlcnMKKyNkZWZpbmUgICBESU9fSU5UUl9FTl9CSVQJMHgyCS8vIGVuYWJsZSBpbnRlcnJ1cHRzIGZvciA4MjU1CisjZGVmaW5lICAgRE1BVENfSU5UUl9FTl9CSVQJMHg0CS8vIGVuYWJsZSBkbWEgdGVybWluYWwgY291bnQgaW50ZXJydXB0CisjZGVmaW5lICAgVElNRVJfSU5UUl9FTl9CSVQJMHg4CS8vIGVuYWJsZSB0aW1lciBpbnRlcnJ1cHQKKyNkZWZpbmUgICBFUlJfSU5UUl9FTl9CSVQJMHgxMAkvLyBlbmFibGUgZXJyb3IgaW50ZXJydXB0CisjZGVmaW5lICAgQURDX0ZORV9JTlRSX0VOX0JJVAkweDIwCS8vIGVuYWJsZSBmaWZvIG5vdCBlbXB0eSBpbnRlcnJ1cHQKKyNkZWZpbmUgQURDX0NPTlZFUlRfUkVHCTB4MworI2RlZmluZSBEQUNfTFNCX1JFRyhjaGFubmVsKQkoMHg0ICsgMiAqICgoY2hhbm5lbCkgJiAweDEpKQorI2RlZmluZSBEQUNfTVNCX1JFRyhjaGFubmVsKQkoMHg1ICsgMiAqICgoY2hhbm5lbCkgJiAweDEpKQorI2RlZmluZSBBRENfQ0xFQVJfUkVHCTB4OAorI2RlZmluZSBETUFUQ19DTEVBUl9SRUcJMHhhCisjZGVmaW5lIFRJTUVSX0NMRUFSX1JFRwkweGMKKyNkZWZpbmUgQ09NTUFORDZfUkVHCTB4ZQkvLyAxMjAwIGJvYXJkcyBvbmx5CisjZGVmaW5lICAgQURDX0NPTU1PTl9CSVQJMHgxCS8vIHNlbGVjdCBncm91bmQgb3IgY29tbW9uLW1vZGUgcmVmZXJlbmNlCisjZGVmaW5lICAgQURDX1VOSVBfQklUCTB4MgkvLyBhZGMgdW5pcG9sYXIKKyNkZWZpbmUgICBEQUNfVU5JUF9CSVQoY2hhbm5lbCkJKDB4NCA8PCAoKGNoYW5uZWwpICYgMHgxKSkJLy8gZGFjIHVuaXBvbGFyCisjZGVmaW5lICAgQURDX0ZIRl9JTlRSX0VOX0JJVAkweDIwCS8vIGVuYWJsZSBmaWZvIGhhbGYgZnVsbCBpbnRlcnJ1cHQKKyNkZWZpbmUgICBBMV9JTlRSX0VOX0JJVAkweDQwCS8vIGVuYWJsZSBpbnRlcnJ1cHQgb24gZW5kIG9mIGhhcmR3YXJlIGNvdW50CisjZGVmaW5lICAgQURDX1NDQU5fVVBfQklUIDB4ODAJLy8gc2NhbiB1cCBmcm9tIGNoYW5uZWwgemVybyBpbnN0ZWFkIG9mIGRvd24gdG8gemVybworI2RlZmluZSBDT01NQU5ENF9SRUcJMHhmCisjZGVmaW5lICAgSU5URVJWQUxfU0NBTl9FTl9CSVQJMHgxCS8vIGVuYWJsZXMgJ2ludGVydmFsJyBzY2FubmluZworI2RlZmluZSAgIEVYVF9TQ0FOX0VOX0JJVAkweDIJLy8gZW5hYmxlcyBleHRlcm5hbCBzaWduYWwgb24gY291bnRlciBiMSBvdXRwdXQgdG8gdHJpZ2dlciBzY2FuCisjZGVmaW5lICAgRVhUX0NPTlZFUlRfT1VUX0JJVAkweDQJLy8gY2hvb3NlcyBkaXJlY3Rpb24gKG91dHB1dCBvciBpbnB1dCkgZm9yIEVYVENPTlYqIGxpbmUKKyNkZWZpbmUgICBBRENfRElGRl9CSVQJMHg4CS8vIGNob29zZXMgZGlmZmVyZW50aWFsIGlucHV0cyBmb3IgYWRjIChpbiBjb25qdW5jdGlvbiB3aXRoIGJvYXJkIGp1bXBlcikKKyNkZWZpbmUgICBFWFRfQ09OVkVSVF9ESVNBQkxFX0JJVAkweDEwCisjZGVmaW5lIENPTU1BTkQ1X1JFRwkweDFjCS8vIDEyMDAgYm9hcmRzIG9ubHksIGNhbGlicmF0aW9uIHN0dWZmCisjZGVmaW5lICAgRUVQUk9NX1dSSVRFX1VOUFJPVEVDVF9CSVQJMHg0CS8vIGVuYWJsZSBlZXByb20gZm9yIHdyaXRlCisjZGVmaW5lICAgRElUSEVSX0VOX0JJVAkweDgJLy8gZW5hYmxlIGRpdGhlcmluZworI2RlZmluZSAgIENBTERBQ19MT0FEX0JJVAkweDEwCS8vIGxvYWQgY2FsaWJyYXRpb24gZGFjCisjZGVmaW5lICAgU0NMT0NLX0JJVAkweDIwCS8vIHNlcmlhbCBjbG9jayAtIHJpc2luZyBlZGdlIHdyaXRlcywgZmFsbGluZyBlZGdlIHJlYWRzCisjZGVmaW5lICAgU0RBVEFfQklUCTB4NDAJLy8gc2VyaWFsIGRhdGEgYml0IGZvciB3cml0aW5nIHRvIGVlcHJvbSBvciBjYWxpYnJhdGlvbiBkYWNzCisjZGVmaW5lICAgRUVQUk9NX0VOX0JJVAkweDgwCS8vIGVuYWJsZSBlZXByb20gZm9yIHJlYWQvd3JpdGUKKyNkZWZpbmUgSU5URVJWQUxfQ09VTlRfUkVHCTB4MWUKKyNkZWZpbmUgSU5URVJWQUxfTE9BRF9SRUcJMHgxZgorI2RlZmluZSAgIElOVEVSVkFMX0xPQURfQklUUwkweDEKKworLy8gcmVhZC1vbmx5IHJlZ2lzdGVycworI2RlZmluZSBTVEFUVVMxX1JFRwkweDAKKyNkZWZpbmUgICBEQVRBX0FWQUlMX0JJVAkweDEJLy8gZGF0YSBpcyBhdmFpbGFibGUgaW4gZmlmbworI2RlZmluZSAgIE9WRVJSVU5fQklUCTB4MgkvLyBvdmVycnVuIGhhcyBvY2N1cnJlZAorI2RlZmluZSAgIE9WRVJGTE9XX0JJVAkweDQJLy8gZmlmbyBvdmVyZmxvdworI2RlZmluZSAgIFRJTUVSX0JJVAkweDgJLy8gdGltZXIgaW50ZXJydXB0IGhhcyBvY2N1cmVkCisjZGVmaW5lICAgRE1BVENfQklUCTB4MTAJLy8gZG1hIHRlcm1pbmFsIGNvdW50IGhhcyBvY2N1cmVkCisjZGVmaW5lICAgRVhUX1RSSUdfQklUCTB4NDAJLy8gZXh0ZXJuYWwgdHJpZ2dlciBoYXMgb2NjdXJlZAorI2RlZmluZSBTVEFUVVMyX1JFRwkweDFkCS8vIDEyMDAgYm9hcmRzIG9ubHkKKyNkZWZpbmUgICBFRVBST01fT1VUX0JJVAkweDEJLy8gcHJvZ3JhbW1hYmxlIGVlcHJvbSBzZXJpYWwgb3V0cHV0CisjZGVmaW5lICAgQTFfVENfQklUCTB4MgkvLyBjb3VudGVyIEExIHRlcm1pbmFsIGNvdW50CisjZGVmaW5lICAgRk5IRl9CSVQJMHg0CS8vIGZpZm8gbm90IGhhbGYgZnVsbAorI2RlZmluZSBBRENfRklGT19SRUcJMHhhCisKKyNkZWZpbmUgRElPX0JBU0VfUkVHCTB4MTAKKyNkZWZpbmUgQ09VTlRFUl9BX0JBU0VfUkVHCTB4MTQKKyNkZWZpbmUgQ09VTlRFUl9BX0NPTlRST0xfUkVHCShDT1VOVEVSX0FfQkFTRV9SRUcgKyAweDMpCisjZGVmaW5lICAgSU5JVF9BMF9CSVRTCTB4MTQJLy8gY2hlY2sgbW9kZXMgcHV0IGNvbnZlcnNpb24gcGFjZXIgb3V0cHV0IGluIGhhcm1sZXNzIHN0YXRlIChhMCBtb2RlIDIpCisjZGVmaW5lICAgSU5JVF9BMV9CSVRTCTB4NzAJLy8gcHV0IGhhcmR3YXJlIGNvbnZlcnNpb24gY291bnRlciBvdXRwdXQgaW4gaGFybWxlc3Mgc3RhdGUgKGExIG1vZGUgMCkKKyNkZWZpbmUgQ09VTlRFUl9CX0JBU0VfUkVHCTB4MTgKKworc3RhdGljIGludCBsYWJwY19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBsYWJwY19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaXJxcmV0dXJuX3QgbGFicGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIGludCBsYWJwY19kcmFpbl9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB2b2lkIGxhYnBjX2RyYWluX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBoYW5kbGVfaXNhX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdm9pZCBsYWJwY19kcmFpbl9kcmVncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IGxhYnBjX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IGxhYnBjX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgbGFicGNfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbGFicGNfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbGFicGNfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbGFicGNfY2FsaWJfcmVhZF9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGxhYnBjX2NhbGliX3dyaXRlX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbGFicGNfZWVwcm9tX3JlYWRfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBsYWJwY19lZXByb21fd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19zdWdnZXN0X3RyYW5zZmVyX3NpemUoc3RydWN0IGNvbWVkaV9jbWQgY21kKTsKK3N0YXRpYyB2b2lkIGxhYnBjX2FkY190aW1pbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfY21kICogY21kKTsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorc3RhdGljIGludCBsYWJwY19maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCk7CisjZW5kaWYKK3N0YXRpYyBpbnQgbGFicGNfZGlvX21lbV9jYWxsYmFjayhpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsCisJdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgbGFicGNfc2VyaWFsX291dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHZhbHVlLAorCXVuc2lnbmVkIGludCBudW1fYml0cyk7CitzdGF0aWMgdW5zaWduZWQgaW50IGxhYnBjX3NlcmlhbF9pbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgdW5zaWduZWQgaW50IGxhYnBjX2VlcHJvbV9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBhZGRyZXNzKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFicGNfZWVwcm9tX3JlYWRfc3RhdHVzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFicGNfZWVwcm9tX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBhZGRyZXNzLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworc3RhdGljIHZvaWQgd3JpdGVfY2FsZGFjKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpOworCitlbnVtIHNjYW5fbW9kZSB7CisJTU9ERV9TSU5HTEVfQ0hBTiwKKwlNT0RFX1NJTkdMRV9DSEFOX0lOVEVSVkFMLAorCU1PREVfTVVMVF9DSEFOX1VQLAorCU1PREVfTVVMVF9DSEFOX0RPV04sCit9OworCisvL2FuYWxvZyBpbnB1dCByYW5nZXMKKyNkZWZpbmUgTlVNX0xBQlBDX1BMVVNfQUlfUkFOR0VTIDE2CisvLyBpbmRpY2F0ZXMgdW5pcG9sYXIgcmFuZ2VzCitzdGF0aWMgY29uc3QgaW50IGxhYnBjX3BsdXNfaXNfdW5pcG9sYXJbTlVNX0xBQlBDX1BMVVNfQUlfUkFOR0VTXSA9IHsKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMSwKKwkxLAorCTEsCisJMSwKKwkxLAorCTEsCisJMSwKKwkxLAorfTsKKworLy8gbWFwIHJhbmdlIGluZGV4IHRvIGdhaW4gYml0cworc3RhdGljIGNvbnN0IGludCBsYWJwY19wbHVzX2FpX2dhaW5fYml0c1tOVU1fTEFCUENfUExVU19BSV9SQU5HRVNdID0geworCTB4MDAsCisJMHgxMCwKKwkweDIwLAorCTB4MzAsCisJMHg0MCwKKwkweDUwLAorCTB4NjAsCisJMHg3MCwKKwkweDAwLAorCTB4MTAsCisJMHgyMCwKKwkweDMwLAorCTB4NDAsCisJMHg1MCwKKwkweDYwLAorCTB4NzAsCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2xhYnBjX3BsdXNfYWkgPSB7CisJTlVNX0xBQlBDX1BMVVNfQUlfUkFOR0VTLAorCXsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSg0KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4yNSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjA1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoOCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMiksCisJCQlVTklfUkFOR0UoMSksCisJCQlVTklfUkFOR0UoMC41KSwKKwkJCVVOSV9SQU5HRSgwLjIpLAorCQkJVU5JX1JBTkdFKDAuMSksCisJCX0KK307CisKKyNkZWZpbmUgTlVNX0xBQlBDXzEyMDBfQUlfUkFOR0VTIDE0CisvLyBpbmRpY2F0ZXMgdW5pcG9sYXIgcmFuZ2VzCitjb25zdCBpbnQgbGFicGNfMTIwMF9pc191bmlwb2xhcltOVU1fTEFCUENfMTIwMF9BSV9SQU5HRVNdID0geworCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwkwLAorCTAsCisJMSwKKwkxLAorCTEsCisJMSwKKwkxLAorCTEsCisJMSwKK307CisKKy8vIG1hcCByYW5nZSBpbmRleCB0byBnYWluIGJpdHMKK2NvbnN0IGludCBsYWJwY18xMjAwX2FpX2dhaW5fYml0c1tOVU1fTEFCUENfMTIwMF9BSV9SQU5HRVNdID0geworCTB4MDAsCisJMHgyMCwKKwkweDMwLAorCTB4NDAsCisJMHg1MCwKKwkweDYwLAorCTB4NzAsCisJMHgwMCwKKwkweDIwLAorCTB4MzAsCisJMHg0MCwKKwkweDUwLAorCTB4NjAsCisJMHg3MCwKK307Citjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9sYWJwY18xMjAwX2FpID0geworCU5VTV9MQUJQQ18xMjAwX0FJX1JBTkdFUywKKwl7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjUpLAorCQkJQklQX1JBTkdFKDAuMjUpLAorCQkJQklQX1JBTkdFKDAuMSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIpLAorCQkJVU5JX1JBTkdFKDEpLAorCQkJVU5JX1JBTkdFKDAuNSksCisJCQlVTklfUkFOR0UoMC4yKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQl9Cit9OworCisvL2FuYWxvZyBvdXRwdXQgcmFuZ2VzCisjZGVmaW5lIEFPX1JBTkdFX0lTX1VOSVBPTEFSIDB4MQorc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2xhYnBjX2FvID0geworCTIsCisJeworCQkJQklQX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJfQorfTsKKworLyogZnVuY3Rpb25zIHRoYXQgZG8gaW5iL291dGIgYW5kIHJlYWRiL3dyaXRlYiBzbyB3ZSBjYW4gdXNlCisgKiBmdW5jdGlvbiBwb2ludGVycyB0byBkZWNpZGUgd2hpY2ggdG8gdXNlICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsYWJwY19pbmIodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiBpbmIoYWRkcmVzcyk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbGFicGNfb3V0Yih1bnNpZ25lZCBpbnQgYnl0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCW91dGIoYnl0ZSwgYWRkcmVzcyk7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBsYWJwY19yZWFkYih1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJcmV0dXJuIHJlYWRiKCh2b2lkICopYWRkcmVzcyk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbGFicGNfd3JpdGViKHVuc2lnbmVkIGludCBieXRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJd3JpdGViKGJ5dGUsICh2b2lkICopYWRkcmVzcyk7Cit9CisKK3N0YXRpYyBjb25zdCBsYWJwY19ib2FyZCBsYWJwY19ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImxhYi1wYy0xMjAwIiwKKwkgICAgICBhaV9zcGVlZDoxMDAwMCwKKwkgICAgICBidXN0eXBlOglpc2FfYnVzdHlwZSwKKwkgICAgICByZWdpc3Rlcl9sYXlvdXQ6bGFicGNfMTIwMF9sYXlvdXQsCisJICAgICAgaGFzX2FvOgkxLAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZyYW5nZV9sYWJwY18xMjAwX2FpLAorCSAgICAgIGFpX3JhbmdlX2NvZGU6bGFicGNfMTIwMF9haV9nYWluX2JpdHMsCisJICAgICAgYWlfcmFuZ2VfaXNfdW5pcG9sYXI6bGFicGNfMTIwMF9pc191bmlwb2xhciwKKwkgICAgICBhaV9zY2FuX3VwOjEsCisJICAgICAgbWVtb3J5X21hcHBlZF9pbzowLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkibGFiLXBjLTEyMDBhaSIsCisJICAgICAgYWlfc3BlZWQ6MTAwMDAsCisJICAgICAgYnVzdHlwZToJaXNhX2J1c3R5cGUsCisJICAgICAgcmVnaXN0ZXJfbGF5b3V0OmxhYnBjXzEyMDBfbGF5b3V0LAorCSAgICAgIGhhc19hbzoJMCwKKwkgICAgICBhaV9yYW5nZV90YWJsZTomcmFuZ2VfbGFicGNfMTIwMF9haSwKKwkgICAgICBhaV9yYW5nZV9jb2RlOmxhYnBjXzEyMDBfYWlfZ2Fpbl9iaXRzLAorCSAgICAgIGFpX3JhbmdlX2lzX3VuaXBvbGFyOmxhYnBjXzEyMDBfaXNfdW5pcG9sYXIsCisJICAgICAgYWlfc2Nhbl91cDoxLAorCSAgICAgIG1lbW9yeV9tYXBwZWRfaW86MCwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJImxhYi1wYysiLAorCSAgICAgIGFpX3NwZWVkOjEyMDAwLAorCSAgICAgIGJ1c3R5cGU6CWlzYV9idXN0eXBlLAorCSAgICAgIHJlZ2lzdGVyX2xheW91dDpsYWJwY19wbHVzX2xheW91dCwKKwkgICAgICBoYXNfYW86CTEsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JnJhbmdlX2xhYnBjX3BsdXNfYWksCisJICAgICAgYWlfcmFuZ2VfY29kZTpsYWJwY19wbHVzX2FpX2dhaW5fYml0cywKKwkgICAgICBhaV9yYW5nZV9pc191bmlwb2xhcjpsYWJwY19wbHVzX2lzX3VuaXBvbGFyLAorCSAgICAgIGFpX3NjYW5fdXA6MCwKKwkgICAgICBtZW1vcnlfbWFwcGVkX2lvOjAsCisJCX0sCisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwl7CisJCW5hbWU6CSJwY2ktMTIwMCIsCisJCWRldmljZV9pZDoweDE2MSwKKwkJYWlfc3BlZWQ6MTAwMDAsCisJCWJ1c3R5cGU6CXBjaV9idXN0eXBlLAorCQlyZWdpc3Rlcl9sYXlvdXQ6bGFicGNfMTIwMF9sYXlvdXQsCisJCWhhc19hbzoJMSwKKwkJYWlfcmFuZ2VfdGFibGU6JnJhbmdlX2xhYnBjXzEyMDBfYWksCisJCWFpX3JhbmdlX2NvZGU6bGFicGNfMTIwMF9haV9nYWluX2JpdHMsCisJCWFpX3JhbmdlX2lzX3VuaXBvbGFyOmxhYnBjXzEyMDBfaXNfdW5pcG9sYXIsCisJCWFpX3NjYW5fdXA6MSwKKwkJbWVtb3J5X21hcHBlZF9pbzoxLAorCQl9LAorCS8vIGR1bW15IGVudHJ5IHNvIHBjaSBib2FyZCB3b3JrcyB3aGVuIGNvbWVkaV9jb25maWcgaXMgcGFzc2VkIGRyaXZlciBuYW1lCisJeworCQkubmFtZSA9IERSVl9OQU1FLAorCQkuYnVzdHlwZSA9IHBjaV9idXN0eXBlLAorCQl9LAorI2VuZGlmCit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGxhYnBjX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBjb25zdCBpbnQgZG1hX2J1ZmZlcl9zaXplID0gMHhmZjAwOwkvLyBzaXplIGluIGJ5dGVzIG9mIGRtYSBidWZmZXIKK3N0YXRpYyBjb25zdCBpbnQgc2FtcGxlX3NpemUgPSAyOwkvLyAyIGJ5dGVzIHBlciBzYW1wbGUKKworI2RlZmluZSBkZXZwcml2ICgobGFicGNfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9sYWJwYyA9IHsKKwkuZHJpdmVyX25hbWUgPSBEUlZfTkFNRSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLmF0dGFjaCA9IGxhYnBjX2F0dGFjaCwKKwkuZGV0YWNoID0gbGFicGNfY29tbW9uX2RldGFjaCwKKwkubnVtX25hbWVzID0gc2l6ZW9mKGxhYnBjX2JvYXJkcykgLyBzaXplb2YobGFicGNfYm9hcmQpLAorCS5ib2FyZF9uYW1lID0gJmxhYnBjX2JvYXJkc1swXS5uYW1lLAorCS5vZmZzZXQgPSBzaXplb2YobGFicGNfYm9hcmQpLAorfTsKKworI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobGFicGNfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJezB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbGFicGNfcGNpX3RhYmxlKTsKKyNlbmRpZiAvKiBDT05GSUdfQ09NRURJX1BDSSAqLworCitzdGF0aWMgaW5saW5lIGludCBsYWJwY19jb3VudGVyX2xvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHJlc3MsIHVuc2lnbmVkIGludCBjb3VudGVyX251bWJlciwKKwl1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCBtb2RlKQoreworCWlmICh0aGlzYm9hcmQtPm1lbW9yeV9tYXBwZWRfaW8pCisJCXJldHVybiBpODI1NF9tbV9sb2FkKCh2b2lkICopYmFzZV9hZGRyZXNzLCAwLCBjb3VudGVyX251bWJlciwKKwkJCWNvdW50LCBtb2RlKTsKKwllbHNlCisJCXJldHVybiBpODI1NF9sb2FkKGJhc2VfYWRkcmVzcywgMCwgY291bnRlcl9udW1iZXIsIGNvdW50LCBtb2RlKTsKK30KKworaW50IGxhYnBjX2NvbW1vbl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGxvbmcgaW9iYXNlLAorCXVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBkbWFfY2hhbikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGRtYV9mbGFncywgaXNyX2ZsYWdzOworCXNob3J0IGxzYiwgbXNiOworCisJcHJpbnRrKCJjb21lZGklZDogbmlfbGFicGM6ICVzLCBpbyAweCVseCIsIGRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSwKKwkJaW9iYXNlKTsKKwlpZiAoaXJxKSB7CisJCXByaW50aygiLCBpcnEgJXUiLCBpcnEpOworCX0KKwlpZiAoZG1hX2NoYW4pIHsKKwkJcHJpbnRrKCIsIGRtYSAldSIsIGRtYV9jaGFuKTsKKwl9CisJcHJpbnRrKCJcbiIpOworCisJaWYgKGlvYmFzZSA9PSAwKSB7CisJCXByaW50aygiaW8gYmFzZSBhZGRyZXNzIGlzIHplcm8hXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8vIHJlcXVlc3QgaW8gcmVnaW9ucyBmb3IgaXNhIGJvYXJkcworCWlmICh0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gaXNhX2J1c3R5cGUpIHsKKwkJLyogY2hlY2sgaWYgaW8gYWRkcmVzc2VzIGFyZSBhdmFpbGFibGUgKi8KKwkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIExBQlBDX1NJWkUsCisJCQkJZHJpdmVyX2xhYnBjLmRyaXZlcl9uYW1lKSkgeworCQkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmICh0aGlzYm9hcmQtPm1lbW9yeV9tYXBwZWRfaW8pIHsKKwkJZGV2cHJpdi0+cmVhZF9ieXRlID0gbGFicGNfcmVhZGI7CisJCWRldnByaXYtPndyaXRlX2J5dGUgPSBsYWJwY193cml0ZWI7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+cmVhZF9ieXRlID0gbGFicGNfaW5iOworCQlkZXZwcml2LT53cml0ZV9ieXRlID0gbGFicGNfb3V0YjsKKwl9CisJLy8gaW5pdGlhbGl6ZSBib2FyZCdzIGNvbW1hbmQgcmVnaXN0ZXJzCisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQxX1JFRyk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMl9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQyX1JFRyk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kM19iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQzX1JFRyk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNF9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ0X1JFRyk7CisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KSB7CisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNl9iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBDT01NQU5ENl9SRUcpOworCX0KKworCS8qIGdyYWIgb3VyIElSUSAqLworCWlmIChpcnEpIHsKKwkJaXNyX2ZsYWdzID0gMDsKKwkJaWYgKHRoaXNib2FyZC0+YnVzdHlwZSA9PSBwY2lfYnVzdHlwZSkKKwkJCWlzcl9mbGFncyB8PSBJUlFGX1NIQVJFRDsKKwkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGxhYnBjX2ludGVycnVwdCwgaXNyX2ZsYWdzLAorCQkJCWRyaXZlcl9sYWJwYy5kcml2ZXJfbmFtZSwgZGV2KSkgeworCQkJcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBpcnEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJZGV2LT5pcnEgPSBpcnE7CisKKwkvLyBncmFiIGRtYSBjaGFubmVsCisJaWYgKGRtYV9jaGFuID4gMykgeworCQlwcmludGsoIiBpbnZhbGlkIGRtYSBjaGFubmVsICV1XG4iLCBkbWFfY2hhbik7CisJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAoZG1hX2NoYW4pIHsKKwkJLy8gYWxsb2NhdGUgZG1hIGJ1ZmZlcgorCQlkZXZwcml2LT5kbWFfYnVmZmVyID0KKwkJCWttYWxsb2MoZG1hX2J1ZmZlcl9zaXplLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJCWlmIChkZXZwcml2LT5kbWFfYnVmZmVyID09IE5VTEwpIHsKKwkJCXByaW50aygiIGZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgYnVmZmVyXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCWlmIChyZXF1ZXN0X2RtYShkbWFfY2hhbiwgZHJpdmVyX2xhYnBjLmRyaXZlcl9uYW1lKSkgeworCQkJcHJpbnRrKCIgZmFpbGVkIHRvIGFsbG9jYXRlIGRtYSBjaGFubmVsICV1XG4iLAorCQkJCWRtYV9jaGFuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRldnByaXYtPmRtYV9jaGFuID0gZG1hX2NoYW47CisJCWRtYV9mbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYV9jaGFuLCBETUFfTU9ERV9SRUFEKTsKKwkJcmVsZWFzZV9kbWFfbG9jayhkbWFfZmxhZ3MpOworCX0KKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgNSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0KKwkJU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9DT01NT04gfCBTREZfRElGRiB8CisJCVNERl9DTURfUkVBRDsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmxlbl9jaGFubGlzdCA9IDg7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IDEyKSAtIDE7CS8vIDEyIGJpdCByZXNvbHV0aW9uCisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPmFpX3JhbmdlX3RhYmxlOworCXMtPmRvX2NtZCA9IGxhYnBjX2FpX2NtZDsKKwlzLT5kb19jbWR0ZXN0ID0gbGFicGNfYWlfY21kdGVzdDsKKwlzLT5pbnNuX3JlYWQgPSBsYWJwY19haV9yaW5zbjsKKwlzLT5jYW5jZWwgPSBsYWJwY19jYW5jZWw7CisKKwkvKiBhbmFsb2cgb3V0cHV0ICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJaWYgKHRoaXNib2FyZC0+aGFzX2FvKSB7CisvKiBDb3VsZCBwcm92aWRlIGNvbW1hbmQgc3VwcG9ydCwgZXhjZXB0IGl0IG9ubHkgaGFzIGEgb25lIHNhbXBsZQorICogaGFyZHdhcmUgYnVmZmVyIGZvciBhbmFsb2cgb3V0cHV0IGFuZCBubyB1bmRlcnJ1biBmbGFnLiAqLworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQ7CisJCXMtPm5fY2hhbiA9IE5VTV9BT19DSEFOOworCQlzLT5tYXhkYXRhID0gKDEgPDwgMTIpIC0gMTsJLy8gMTIgYml0IHJlc29sdXRpb24KKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfbGFicGNfYW87CisJCXMtPmluc25fcmVhZCA9IGxhYnBjX2FvX3JpbnNuOworCQlzLT5pbnNuX3dyaXRlID0gbGFicGNfYW9fd2luc247CisJCS8qIGluaXRpYWxpemUgYW5hbG9nIG91dHB1dHMgdG8gYSBrbm93biB2YWx1ZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcy0+bl9jaGFuOyBpKyspIHsKKwkJCWRldnByaXYtPmFvX3ZhbHVlW2ldID0gcy0+bWF4ZGF0YSAvIDI7CisJCQlsc2IgPSBkZXZwcml2LT5hb192YWx1ZVtpXSAmIDB4ZmY7CisJCQltc2IgPSAoZGV2cHJpdi0+YW9fdmFsdWVbaV0gPj4gOCkgJiAweGZmOworCQkJZGV2cHJpdi0+d3JpdGVfYnl0ZShsc2IsIGRldi0+aW9iYXNlICsgREFDX0xTQl9SRUcoaSkpOworCQkJZGV2cHJpdi0+d3JpdGVfYnl0ZShtc2IsIGRldi0+aW9iYXNlICsgREFDX01TQl9SRUcoaSkpOworCQl9CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwkvKiA4MjU1IGRpbyAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8vIGlmIGJvYXJkIHVzZXMgaW8gbWVtb3J5IHdlIGhhdmUgdG8gZ2l2ZSBhIGN1c3RvbSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgODI1NSBkcml2ZXIKKwlpZiAodGhpc2JvYXJkLT5tZW1vcnlfbWFwcGVkX2lvKQorCQlzdWJkZXZfODI1NV9pbml0KGRldiwgcywgbGFicGNfZGlvX21lbV9jYWxsYmFjaywKKwkJCSh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArIERJT19CQVNFX1JFRykpOworCWVsc2UKKwkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsIGRldi0+aW9iYXNlICsgRElPX0JBU0VfUkVHKTsKKworCS8vIGNhbGlicmF0aW9uIHN1YmRldmljZXMgZm9yIGJvYXJkcyB0aGF0IGhhdmUgb25lCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9DQUxJQjsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0lOVEVSTkFMOworCQlzLT5uX2NoYW4gPSAxNjsKKwkJcy0+bWF4ZGF0YSA9IDB4ZmY7CisJCXMtPmluc25fcmVhZCA9IGxhYnBjX2NhbGliX3JlYWRfaW5zbjsKKwkJcy0+aW5zbl93cml0ZSA9IGxhYnBjX2NhbGliX3dyaXRlX2luc247CisKKwkJZm9yIChpID0gMDsgaSA8IHMtPm5fY2hhbjsgaSsrKQorCQkJd3JpdGVfY2FsZGFjKGRldiwgaSwgcy0+bWF4ZGF0YSAvIDIpOworCX0gZWxzZQorCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJLyogRUVQUk9NICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDQ7CisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9NRU1PUlk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9JTlRFUk5BTDsKKwkJcy0+bl9jaGFuID0gRUVQUk9NX1NJWkU7CisJCXMtPm1heGRhdGEgPSAweGZmOworCQlzLT5pbnNuX3JlYWQgPSBsYWJwY19lZXByb21fcmVhZF9pbnNuOworCQlzLT5pbnNuX3dyaXRlID0gbGFicGNfZWVwcm9tX3dyaXRlX2luc247CisKKwkJZm9yIChpID0gMDsgaSA8IEVFUFJPTV9TSVpFOyBpKyspIHsKKwkJCWRldnByaXYtPmVlcHJvbV9kYXRhW2ldID0gbGFicGNfZWVwcm9tX3JlYWQoZGV2LCBpKTsKKwkJfQorI2lmZGVmIExBQlBDX0RFQlVHCisJCXByaW50aygiIGVlcHJvbToiKTsKKwkJZm9yIChpID0gMDsgaSA8IEVFUFJPTV9TSVpFOyBpKyspIHsKKwkJCXByaW50aygiICVpOjB4JXggIiwgaSwgZGV2cHJpdi0+ZWVwcm9tX2RhdGFbaV0pOworCQl9CisJCXByaW50aygiXG4iKTsKKyNlbmRpZgorCX0gZWxzZQorCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gMDsKKwl1bnNpZ25lZCBpbnQgaXJxID0gMDsKKwl1bnNpZ25lZCBpbnQgZG1hX2NoYW4gPSAwOworI2lmZGVmIENPTkZJR19DT01FRElfUENJCisJaW50IHJldHZhbDsKKyNlbmRpZgorCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGV2LT5wcml2YXRlICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YobGFicGNfcHJpdmF0ZSkpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvLyBnZXQgYmFzZSBhZGRyZXNzLCBpcnEgZXRjLiBiYXNlZCBvbiBidXN0eXBlCisJc3dpdGNoICh0aGlzYm9hcmQtPmJ1c3R5cGUpIHsKKwljYXNlIGlzYV9idXN0eXBlOgorCQlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwkJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJCWRtYV9jaGFuID0gaXQtPm9wdGlvbnNbMl07CisJCWJyZWFrOworCWNhc2UgcGNpX2J1c3R5cGU6CisjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKKwkJcmV0dmFsID0gbGFicGNfZmluZF9kZXZpY2UoZGV2LCBpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0pOworCQlpZiAocmV0dmFsIDwgMCkgeworCQkJcmV0dXJuIHJldHZhbDsKKwkJfQorCQlyZXR2YWwgPSBtaXRlX3NldHVwKGRldnByaXYtPm1pdGUpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJCWlvYmFzZSA9ICh1bnNpZ25lZCBsb25nKWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyOworCQlpcnEgPSBtaXRlX2lycShkZXZwcml2LT5taXRlKTsKKyNlbHNlCisJCXByaW50aygiIHRoaXMgZHJpdmVyIGhhcyBub3QgYmVlbiBidWlsdCB3aXRoIFBDSSBzdXBwb3J0LlxuIik7CisJCXJldHVybiAtRUlOVkFMOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgcGNtY2lhX2J1c3R5cGU6CisJCXByaW50aygiIHRoaXMgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgcGNtY2lhIGNhcmRzLCB1c2UgbmlfbGFicGNfY3Mub1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoImJ1ZyEgY291bGRuJ3QgZGV0ZXJtaW5lIGJvYXJkIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxhYnBjX2NvbW1vbl9hdHRhY2goZGV2LCBpb2Jhc2UsIGlycSwgZG1hX2NoYW4pOworfQorCisvLyBhZGFwdGVkIGZyb20gbmlfcGNpbWlvIGZvciBmaW5kaW5nIG1pdGUgYmFzZWQgYm9hcmRzIChwYy0xMjAwKQorI2lmZGVmIENPTkZJR19DT01FRElfUENJCitzdGF0aWMgaW50IGxhYnBjX2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGludCBidXMsIGludCBzbG90KQoreworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlpbnQgaTsKKwlmb3IgKG1pdGUgPSBtaXRlX2RldmljZXM7IG1pdGU7IG1pdGUgPSBtaXRlLT5uZXh0KSB7CisJCWlmIChtaXRlLT51c2VkKQorCQkJY29udGludWU7CisJCS8vIGlmIGJ1cy9zbG90IGFyZSBzcGVjaWZpZWQgdGhlbiBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgYnVzL3Nsb3QKKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IG1pdGUtPnBjaWRldi0+YnVzLT5udW1iZXIKKwkJCQl8fCBzbG90ICE9IFBDSV9TTE9UKG1pdGUtPnBjaWRldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBkcml2ZXJfbGFicGMubnVtX25hbWVzOyBpKyspIHsKKwkJCWlmIChsYWJwY19ib2FyZHNbaV0uYnVzdHlwZSAhPSBwY2lfYnVzdHlwZSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChtaXRlX2RldmljZV9pZChtaXRlKSA9PSBsYWJwY19ib2FyZHNbaV0uZGV2aWNlX2lkKSB7CisJCQkJZGV2cHJpdi0+bWl0ZSA9IG1pdGU7CisJCQkJLy8gZml4dXAgYm9hcmQgcG9pbnRlciwgaW4gY2FzZSB3ZSB3ZXJlIHVzaW5nIHRoZSBkdW1teSAibmlfbGFicGMiIGVudHJ5CisJCQkJZGV2LT5ib2FyZF9wdHIgPSAmbGFicGNfYm9hcmRzW2ldOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwltaXRlX2xpc3RfZGV2aWNlcygpOworCXJldHVybiAtRUlPOworfQorI2VuZGlmCisKK2ludCBsYWJwY19jb21tb25fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IG5pX2xhYnBjOiBkZXRhY2hcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+c3ViZGV2aWNlcykKKwkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIDIpOworCisJLyogb25seSBmcmVlIHN0dWZmIGlmIGl0IGhhcyBiZWVuIGFsbG9jYXRlZCBieSBfYXR0YWNoICovCisJaWYgKGRldnByaXYtPmRtYV9idWZmZXIpCisJCWtmcmVlKGRldnByaXYtPmRtYV9idWZmZXIpOworCWlmIChkZXZwcml2LT5kbWFfY2hhbikKKwkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWlmICh0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gaXNhX2J1c3R5cGUgJiYgZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBMQUJQQ19TSVpFKTsKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorCWlmIChkZXZwcml2LT5taXRlKQorCQltaXRlX3Vuc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CisjZW5kaWYKKworCXJldHVybiAwOworfTsKKworc3RhdGljIHZvaWQgbGFicGNfY2xlYXJfYWRjX2ZpZm8oY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgQURDX0NMRUFSX1JFRyk7CisJZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsgQURDX0ZJRk9fUkVHKTsKKwlkZXZwcml2LT5yZWFkX2J5dGUoZGV2LT5pb2Jhc2UgKyBBRENfRklGT19SRUcpOworfQorCitzdGF0aWMgaW50IGxhYnBjX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5jb21tYW5kMl9iaXRzICY9IH5TV1RSSUdfQklUICYgfkhXVFJJR19CSVQgJiB+UFJFVFJJR19CSVQ7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMl9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQyX1JFRyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWRldnByaXYtPmNvbW1hbmQzX2JpdHMgPSAwOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDNfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EM19SRUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIHNjYW5fbW9kZSBsYWJwY19haV9zY2FuX21vZGUoY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID09IDEpCisJCXJldHVybiBNT0RFX1NJTkdMRV9DSEFOOworCisJLyogY2hhbmxpc3QgbWF5IGJlIE5VTEwgZHVyaW5nIGNtZHRlc3QuICovCisJaWYgKGNtZC0+Y2hhbmxpc3QgPT0gTlVMTCkKKwkJcmV0dXJuIE1PREVfTVVMVF9DSEFOX1VQOworCisJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFswXSkgPT0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzFdKSkKKwkJcmV0dXJuIE1PREVfU0lOR0xFX0NIQU5fSU5URVJWQUw7CisKKwlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzBdKSA8IENSX0NIQU4oY21kLT5jaGFubGlzdFsxXSkpCisJCXJldHVybiBNT0RFX01VTFRfQ0hBTl9VUDsKKworCWlmIChDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pID4gQ1JfQ0hBTihjbWQtPmNoYW5saXN0WzFdKSkKKwkJcmV0dXJuIE1PREVfTVVMVF9DSEFOX0RPV047CisKKwlydF9wcmludGsoIm5pX2xhYnBjOiBidWchIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlblxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsYWJwY19haV9jaGFubGlzdF9pbnZhbGlkKGNvbnN0IHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCWNvbnN0IHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBtb2RlLCBjaGFubmVsLCByYW5nZSwgYXJlZiwgaTsKKworCWlmIChjbWQtPmNoYW5saXN0ID09IE5VTEwpCisJCXJldHVybiAwOworCisJbW9kZSA9IGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpOworCisJaWYgKG1vZGUgPT0gTU9ERV9TSU5HTEVfQ0hBTikKKwkJcmV0dXJuIDA7CisKKwlpZiAobW9kZSA9PSBNT0RFX1NJTkdMRV9DSEFOX0lOVEVSVkFMKSB7CisJCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IDB4ZmYpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJIm5pX2xhYnBjOiBjaGFubGlzdCB0b28gbG9uZyBmb3Igc2luZ2xlIGNoYW5uZWwgaW50ZXJ2YWwgbW9kZVxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCWNoYW5uZWwgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CisJYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIE1PREVfU0lOR0xFX0NIQU5fSU5URVJWQUw6CisJCQlpZiAoQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2ldKSAhPSBjaGFubmVsKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImNoYW5uZWwgc2Nhbm5pbmcgb3JkZXIgc3BlY2lmaWVkIGluIGNoYW5saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUuXG4iKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIE1PREVfTVVMVF9DSEFOX1VQOgorCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0gaSkgeworCQkJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkJCSJjaGFubmVsIHNjYW5uaW5nIG9yZGVyIHNwZWNpZmllZCBpbiBjaGFubGlzdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLlxuIik7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBNT0RFX01VTFRfQ0hBTl9ET1dOOgorCQkJaWYgKENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSkgIT0KKwkJCQljbWQtPmNoYW5saXN0X2xlbiAtIGkgLSAxKSB7CisJCQkJY29tZWRpX2Vycm9yKGRldiwKKwkJCQkJImNoYW5uZWwgc2Nhbm5pbmcgb3JkZXIgc3BlY2lmaWVkIGluIGNoYW5saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUuXG4iKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcnRfcHJpbnRrKCJuaV9sYWJwYzogYnVnISBpbiBjaGFubGlzdCBjaGVja1xuIik7CisJCQlyZXR1cm4gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbaV0pICE9IHJhbmdlKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgcmFuZ2VcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlpZiAoQ1JfQVJFRihjbWQtPmNoYW5saXN0W2ldKSAhPSBhcmVmKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LAorCQkJCSJlbnRyaWVzIGluIGNoYW5saXN0IG11c3QgYWxsIGhhdmUgdGhlIHNhbWUgcmVmZXJlbmNlXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfdXNlX2NvbnRpbnVvdXNfbW9kZShjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpZiAobGFicGNfYWlfc2Nhbl9tb2RlKGNtZCkgPT0gTU9ERV9TSU5HTEVfQ0hBTikKKwkJcmV0dXJuIDE7CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0ZPTExPVykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19haV9jb252ZXJ0X3BlcmlvZChjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSKQorCQlyZXR1cm4gMDsKKworCWlmIChsYWJwY19haV9zY2FuX21vZGUoY21kKSA9PSBNT0RFX1NJTkdMRV9DSEFOICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKKwkJcmV0dXJuIGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisKKwlyZXR1cm4gY21kLT5jb252ZXJ0X2FyZzsKK30KKworc3RhdGljIHZvaWQgbGFicGNfc2V0X2FpX2NvbnZlcnRfcGVyaW9kKHN0cnVjdCBjb21lZGlfY21kICogY21kLCB1bnNpZ25lZCBpbnQgbnMpCit7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikKKwkJcmV0dXJuOworCisJaWYgKGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpID09IE1PREVfU0lOR0xFX0NIQU4gJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBuczsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJY21kLT5jb252ZXJ0X2FyZyA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJfSBlbHNlCisJCWNtZC0+Y29udmVydF9hcmcgPSBuczsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19haV9zY2FuX3BlcmlvZChjb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSKQorCQlyZXR1cm4gMDsKKworCWlmIChsYWJwY19haV9zY2FuX21vZGUoY21kKSA9PSBNT0RFX1NJTkdMRV9DSEFOICYmCisJCWNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gY21kLT5zY2FuX2JlZ2luX2FyZzsKK30KKworc3RhdGljIHZvaWQgbGFicGNfc2V0X2FpX3NjYW5fcGVyaW9kKHN0cnVjdCBjb21lZGlfY21kICogY21kLCB1bnNpZ25lZCBpbnQgbnMpCit7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUikKKwkJcmV0dXJuOworCisJaWYgKGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpID09IE1PREVfU0lOR0xFX0NIQU4gJiYKKwkJY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKQorCQlyZXR1cm47CisKKwljbWQtPnNjYW5fYmVnaW5fYXJnID0gbnM7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXAsIHRtcDI7CisJaW50IHN0b3BfbWFzazsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfRVhUOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19GT0xMT1cgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCXN0b3BfbWFzayA9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KQorCQlzdG9wX21hc2sgfD0gVFJJR19FWFQ7CisJY21kLT5zdG9wX3NyYyAmPSBzdG9wX21hc2s7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJgorCQljbWQtPnN0b3Bfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCS8vIGNhbid0IGhhdmUgZXh0ZXJuYWwgc3RvcCBhbmQgc3RhcnQgdHJpZ2dlcnMgYXQgb25jZQorCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCAmJiBjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnID09IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNib2FyZC0+YWlfc3BlZWQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzYm9hcmQtPmFpX3NwZWVkOworCQkJZXJyKys7CisJCX0KKwl9CisJLy8gbWFrZSBzdXJlIHNjYW4gdGltaW5nIGlzIG5vdCB0b28gZmFzdAorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUiAmJgorCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPmNoYW5saXN0X2xlbjsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwKKwkJCXRoaXNib2FyZC0+YWlfc3BlZWQgKiBjbWQtPmNoYW5saXN0X2xlbikgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJdGhpc2JvYXJkLT5haV9zcGVlZCAqIGNtZC0+Y2hhbmxpc3RfbGVuOworCQkJZXJyKys7CisJCX0KKwl9CisJLy8gc3RvcCBzb3VyY2UKKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCWlmICghY21kLT5zdG9wX2FyZykgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfTk9ORToKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwkJLy8gVFJJR19FWFQgZG9lc24ndCBjYXJlIHNpbmNlIGl0IGRvZXNuJ3QgdHJpZ2dlciBvZmYgYSBudW1iZXJlZCBjaGFubmVsCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCXRtcDIgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCWxhYnBjX2FkY190aW1pbmcoZGV2LCBjbWQpOworCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZyB8fCB0bXAyICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlpZiAobGFicGNfYWlfY2hhbmxpc3RfaW52YWxpZChkZXYsIGNtZCkpCisJCXJldHVybiA1OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IGNoYW5uZWwsIHJhbmdlLCBhcmVmOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWludCByZXQ7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJZW51bSB0cmFuc2Zlcl90eXBlIHhmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZGV2LT5pcnEpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgIm5vIGlycSBhc3NpZ25lZCwgY2Fubm90IHBlcmZvcm0gY29tbWFuZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmFuZ2UgPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0WzBdKTsKKwlhcmVmID0gQ1JfQVJFRihjbWQtPmNoYW5saXN0WzBdKTsKKworCS8vIG1ha2Ugc3VyZSBib2FyZCBpcyBkaXNhYmxlZCBiZWZvcmUgc2V0dGluZyB1cCBhcXVpc2l0aW9uCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyAmPSB+U1dUUklHX0JJVCAmIH5IV1RSSUdfQklUICYgflBSRVRSSUdfQklUOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDJfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMl9SRUcpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlkZXZwcml2LT5jb21tYW5kM19iaXRzID0gMDsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQzX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDNfUkVHKTsKKworCS8vIGluaXRpYWxpemUgc29mdHdhcmUgY29udmVyc2lvbiBjb3VudAorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpIHsKKwkJZGV2cHJpdi0+Y291bnQgPSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW47CisJfQorCS8vIHNldHVwIGhhcmR3YXJlIGNvbnZlcnNpb24gY291bnRlcgorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKSB7CisJCS8vIGxvYWQgY291bnRlciBhMSB3aXRoIGNvdW50IG9mIDMgKHBjKyBtYW51YWwgc2F5cyB0aGlzIGlzIG1pbmltdW0gYWxsb3dlZCkgdXNpbmcgbW9kZSAwCisJCXJldCA9IGxhYnBjX2NvdW50ZXJfbG9hZChkZXYsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0JBU0VfUkVHLAorCQkJMSwgMywgMCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3IgbG9hZGluZyBjb3VudGVyIGExIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UJCQkvLyBvdGhlcndpc2UsIGp1c3QgcHV0IGExIGluIG1vZGUgMCB3aXRoIG5vIGNvdW50IHRvIHNldCBpdHMgb3V0cHV0IGxvdworCQlkZXZwcml2LT53cml0ZV9ieXRlKElOSVRfQTFfQklUUywKKwkJCWRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0NPTlRST0xfUkVHKTsKKworCS8vIGZpZ3VyZSBvdXQgd2hhdCBtZXRob2Qgd2Ugd2lsbCB1c2UgdG8gdHJhbnNmZXIgZGF0YQorCWlmIChkZXZwcml2LT5kbWFfY2hhbiAmJgkvLyBuZWVkIGEgZG1hIGNoYW5uZWwgYWxsb2NhdGVkCisJCS8vIGRtYSB1bnNhZmUgYXQgUlQgcHJpb3JpdHksIGFuZCB0b28gbXVjaCBzZXR1cCB0aW1lIGZvciBUUklHX1dBS0VfRU9TIGZvcgorCQkoY21kLT5mbGFncyAmIChUUklHX1dBS0VfRU9TIHwgVFJJR19SVCkpID09IDAgJiYKKwkJLy8gb25seSBhdmFpbGFibGUgb24gdGhlIGlzYSBib2FyZHMKKwkJdGhpc2JvYXJkLT5idXN0eXBlID09IGlzYV9idXN0eXBlKSB7CisJCXhmZXIgPSBpc2FfZG1hX3RyYW5zZmVyOworCX0gZWxzZSBpZiAodGhpc2JvYXJkLT5yZWdpc3Rlcl9sYXlvdXQgPT0gbGFicGNfMTIwMF9sYXlvdXQgJiYJLy8gcGMtcGx1cyBoYXMgbm8gZmlmby1oYWxmIGZ1bGwgaW50ZXJydXB0CisJCS8vIHdha2UtZW5kLW9mLXNjYW4gc2hvdWxkIGludGVycnVwdCBvbiBmaWZvIG5vdCBlbXB0eQorCQkoY21kLT5mbGFncyAmIFRSSUdfV0FLRV9FT1MpID09IDAgJiYKKwkJLy8gbWFrZSBzdXJlIHdlIGFyZSB0YWtpbmcgbW9yZSB0aGFuIGp1c3QgYSBmZXcgcG9pbnRzCisJCShjbWQtPnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQgfHwgZGV2cHJpdi0+Y291bnQgPiAyNTYpKSB7CisJCXhmZXIgPSBmaWZvX2hhbGZfZnVsbF90cmFuc2ZlcjsKKwl9IGVsc2UKKwkJeGZlciA9IGZpZm9fbm90X2VtcHR5X3RyYW5zZmVyOworCWRldnByaXYtPmN1cnJlbnRfdHJhbnNmZXIgPSB4ZmVyOworCisJLy8gc2V0dXAgY29tbWFuZDYgcmVnaXN0ZXIgZm9yIDEyMDAgYm9hcmRzCisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KSB7CisJCS8vIHJlZmVyZW5jZSBpbnB1dHMgdG8gZ3JvdW5kIG9yIGNvbW1vbj8KKwkJaWYgKGFyZWYgIT0gQVJFRl9HUk9VTkQpCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzIHw9IEFEQ19DT01NT05fQklUOworCQllbHNlCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzICY9IH5BRENfQ09NTU9OX0JJVDsKKwkJLy8gYmlwb2xhciBvciB1bmlwb2xhciByYW5nZT8KKwkJaWYgKHRoaXNib2FyZC0+YWlfcmFuZ2VfaXNfdW5pcG9sYXJbcmFuZ2VdKQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyB8PSBBRENfVU5JUF9CSVQ7CisJCWVsc2UKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkFEQ19VTklQX0JJVDsKKwkJLy8gaW50ZXJydXB0IG9uIGZpZm8gaGFsZiBmdWxsPworCQlpZiAoeGZlciA9PSBmaWZvX2hhbGZfZnVsbF90cmFuc2ZlcikKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgfD0gQURDX0ZIRl9JTlRSX0VOX0JJVDsKKwkJZWxzZQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyAmPSB+QURDX0ZIRl9JTlRSX0VOX0JJVDsKKwkJLy8gZW5hYmxlIGludGVycnVwdCBvbiBjb3VudGVyIGExIHRlcm1pbmFsIGNvdW50PworCQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgfD0gQTFfSU5UUl9FTl9CSVQ7CisJCWVsc2UKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkExX0lOVFJfRU5fQklUOworCQkvLyBhcmUgd2Ugc2Nhbm5pbmcgdXAgb3IgZG93biB0aHJvdWdoIGNoYW5uZWxzPworCQlpZiAobGFicGNfYWlfc2Nhbl9tb2RlKGNtZCkgPT0gTU9ERV9NVUxUX0NIQU5fVVApCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzIHw9IEFEQ19TQ0FOX1VQX0JJVDsKKwkJZWxzZQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyAmPSB+QURDX1NDQU5fVVBfQklUOworCQkvLyB3cml0ZSB0byByZWdpc3RlcgorCQlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ2X2JpdHMsCisJCQlkZXYtPmlvYmFzZSArIENPTU1BTkQ2X1JFRyk7CisJfQorCisJLyogc2V0dXAgY2hhbm5lbCBsaXN0LCBldGMgKGNvbW1hbmQxIHJlZ2lzdGVyKSAqLworCWRldnByaXYtPmNvbW1hbmQxX2JpdHMgPSAwOworCWlmIChsYWJwY19haV9zY2FuX21vZGUoY21kKSA9PSBNT0RFX01VTFRfQ0hBTl9VUCkKKwkJY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtjbWQtPmNoYW5saXN0X2xlbiAtIDFdKTsKKwllbHNlCisJCWNoYW5uZWwgPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbMF0pOworCS8vIG11bmdlIGNoYW5uZWwgYml0cyBmb3IgZGlmZmVyZW50aWFsIC8gc2NhbiBkaXNhYmxlZCBtb2RlCisJaWYgKGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpICE9IE1PREVfU0lOR0xFX0NIQU4gJiYgYXJlZiA9PSBBUkVGX0RJRkYpCisJCWNoYW5uZWwgKj0gMjsKKwlkZXZwcml2LT5jb21tYW5kMV9iaXRzIHw9IEFEQ19DSEFOX0JJVFMoY2hhbm5lbCk7CisJZGV2cHJpdi0+Y29tbWFuZDFfYml0cyB8PSB0aGlzYm9hcmQtPmFpX3JhbmdlX2NvZGVbcmFuZ2VdOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDFfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMV9SRUcpOworCS8vIG1hbnVhbCBzYXlzIHRvIHNldCBzY2FuIGVuYWJsZSBiaXQgb24gc2Vjb25kIHBhc3MKKwlpZiAobGFicGNfYWlfc2Nhbl9tb2RlKGNtZCkgPT0gTU9ERV9NVUxUX0NIQU5fVVAgfHwKKwkJbGFicGNfYWlfc2Nhbl9tb2RlKGNtZCkgPT0gTU9ERV9NVUxUX0NIQU5fRE9XTikgeworCQlkZXZwcml2LT5jb21tYW5kMV9iaXRzIHw9IEFEQ19TQ0FOX0VOX0JJVDsKKwkJLyogbmVlZCBhIGJyaWVmIGRlbGF5IGJlZm9yZSBlbmFibGluZyBzY2FuLCBvciBzY2FuIGxpc3Qgd2lsbCBnZXQgc2NyZXdlZCB3aGVuIHlvdSBzd2l0Y2gKKwkJICogYmV0d2VlbiBzY2FuIHVwIHRvIHNjYW4gZG93biBtb2RlIC0gZHVubm8gd2h5ICovCisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDFfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDFfUkVHKTsKKwl9CisJLy8gc2V0dXAgYW55IGV4dGVybmFsIHRyaWdnZXJpbmcvcGFjaW5nIChjb21tYW5kNCByZWdpc3RlcikKKwlkZXZwcml2LT5jb21tYW5kNF9iaXRzID0gMDsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyB8PSBFWFRfQ09OVkVSVF9ESVNBQkxFX0JJVDsKKwkvKiBYWFggc2hvdWxkIGRpc2NhcmQgZmlyc3Qgc2NhbiB3aGVuIHVzaW5nIGludGVydmFsIHNjYW5uaW5nCisJICogc2luY2UgbWFudWFsIHNheXMgaXQgaXMgbm90IHN5bmNlZCB3aXRoIHNjYW4gY2xvY2sgKi8KKwlpZiAobGFicGNfdXNlX2NvbnRpbnVvdXNfbW9kZShjbWQpID09IDApIHsKKwkJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyB8PSBJTlRFUlZBTF9TQ0FOX0VOX0JJVDsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpCisJCQlkZXZwcml2LT5jb21tYW5kNF9iaXRzIHw9IEVYVF9TQ0FOX0VOX0JJVDsKKwl9CisJLy8gc2luZ2xlLWVuZGVkL2RpZmZlcmVudGlhbAorCWlmIChhcmVmID09IEFSRUZfRElGRikKKwkJZGV2cHJpdi0+Y29tbWFuZDRfYml0cyB8PSBBRENfRElGRl9CSVQ7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNF9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ0X1JFRyk7CisKKwlkZXZwcml2LT53cml0ZV9ieXRlKGNtZC0+Y2hhbmxpc3RfbGVuLAorCQlkZXYtPmlvYmFzZSArIElOVEVSVkFMX0NPVU5UX1JFRyk7CisJLy8gbG9hZCBjb3VudAorCWRldnByaXYtPndyaXRlX2J5dGUoSU5URVJWQUxfTE9BRF9CSVRTLAorCQlkZXYtPmlvYmFzZSArIElOVEVSVkFMX0xPQURfUkVHKTsKKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIgfHwgY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCS8vIHNldCB1cCBwYWNpbmcKKwkJbGFicGNfYWRjX3RpbWluZyhkZXYsIGNtZCk7CisJCS8vIGxvYWQgY291bnRlciBiMCBpbiBtb2RlIDMKKwkJcmV0ID0gbGFicGNfY291bnRlcl9sb2FkKGRldiwgZGV2LT5pb2Jhc2UgKyBDT1VOVEVSX0JfQkFTRV9SRUcsCisJCQkwLCBkZXZwcml2LT5kaXZpc29yX2IwLCAzKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJlcnJvciBsb2FkaW5nIGNvdW50ZXIgYjAiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwkvLyBzZXQgdXAgY29udmVyc2lvbiBwYWNpbmcKKwlpZiAobGFicGNfYWlfY29udmVydF9wZXJpb2QoY21kKSkgeworCQkvLyBsb2FkIGNvdW50ZXIgYTAgaW4gbW9kZSAyCisJCXJldCA9IGxhYnBjX2NvdW50ZXJfbG9hZChkZXYsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0JBU0VfUkVHLAorCQkJMCwgZGV2cHJpdi0+ZGl2aXNvcl9hMCwgMik7CisJCWlmIChyZXQgPCAwKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3IgbG9hZGluZyBjb3VudGVyIGEwIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShJTklUX0EwX0JJVFMsCisJCQlkZXYtPmlvYmFzZSArIENPVU5URVJfQV9DT05UUk9MX1JFRyk7CisKKwkvLyBzZXQgdXAgc2NhbiBwYWNpbmcKKwlpZiAobGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKSkgeworCQkvLyBsb2FkIGNvdW50ZXIgYjEgaW4gbW9kZSAyCisJCXJldCA9IGxhYnBjX2NvdW50ZXJfbG9hZChkZXYsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9CX0JBU0VfUkVHLAorCQkJMSwgZGV2cHJpdi0+ZGl2aXNvcl9iMSwgMik7CisJCWlmIChyZXQgPCAwKSB7CisJCQljb21lZGlfZXJyb3IoZGV2LCAiZXJyb3IgbG9hZGluZyBjb3VudGVyIGIxIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlsYWJwY19jbGVhcl9hZGNfZmlmbyhkZXYpOworCisJLy8gc2V0IHVwIGRtYSB0cmFuc2ZlcgorCWlmICh4ZmVyID09IGlzYV9kbWFfdHJhbnNmZXIpIHsKKwkJaXJxX2ZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hX2NoYW4pOworCQkvKiBjbGVhciBmbGlwLWZsb3AgdG8gbWFrZSBzdXJlIDItYnl0ZSByZWdpc3RlcnMgZm9yCisJCSAqIGNvdW50IGFuZCBhZGRyZXNzIGdldCBzZXQgY29ycmVjdGx5ICovCisJCWNsZWFyX2RtYV9mZihkZXZwcml2LT5kbWFfY2hhbik7CisJCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWFfY2hhbiwKKwkJCXZpcnRfdG9fYnVzKGRldnByaXYtPmRtYV9idWZmZXIpKTsKKwkJLy8gc2V0IGFwcHJvcHJpYXRlIHNpemUgb2YgdHJhbnNmZXIKKwkJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUgPSBsYWJwY19zdWdnZXN0X3RyYW5zZmVyX3NpemUoKmNtZCk7CisJCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQgJiYKKwkJCWRldnByaXYtPmNvdW50ICogc2FtcGxlX3NpemUgPAorCQkJZGV2cHJpdi0+ZG1hX3RyYW5zZmVyX3NpemUpIHsKKwkJCWRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplID0KKwkJCQlkZXZwcml2LT5jb3VudCAqIHNhbXBsZV9zaXplOworCQl9CisJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hX2NoYW4sIGRldnByaXYtPmRtYV90cmFuc2Zlcl9zaXplKTsKKwkJZW5hYmxlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisJCXJlbGVhc2VfZG1hX2xvY2soaXJxX2ZsYWdzKTsKKwkJLy8gZW5hYmxlIGJvYXJkJ3MgZG1hCisJCWRldnByaXYtPmNvbW1hbmQzX2JpdHMgfD0gRE1BX0VOX0JJVCB8IERNQVRDX0lOVFJfRU5fQklUOworCX0gZWxzZQorCQlkZXZwcml2LT5jb21tYW5kM19iaXRzICY9IH5ETUFfRU5fQklUICYgfkRNQVRDX0lOVFJfRU5fQklUOworCisJLy8gZW5hYmxlIGVycm9yIGludGVycnVwdHMKKwlkZXZwcml2LT5jb21tYW5kM19iaXRzIHw9IEVSUl9JTlRSX0VOX0JJVDsKKwkvLyBlbmFibGUgZmlmbyBub3QgZW1wdHkgaW50ZXJydXB0PworCWlmICh4ZmVyID09IGZpZm9fbm90X2VtcHR5X3RyYW5zZmVyKQorCQlkZXZwcml2LT5jb21tYW5kM19iaXRzIHw9IEFEQ19GTkVfSU5UUl9FTl9CSVQ7CisJZWxzZQorCQlkZXZwcml2LT5jb21tYW5kM19iaXRzICY9IH5BRENfRk5FX0lOVFJfRU5fQklUOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDNfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EM19SRUcpOworCisJLy8gc3RhcnR1cCBhcXVpc2l0aW9uCisKKwkvLyBjb21tYW5kMiByZWcKKwkvLyB1c2UgMiBjYXNjYWRlZCBjb3VudGVycyBmb3IgcGFjaW5nCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyB8PSBDQVNDQURFX0JJVDsKKwlzd2l0Y2ggKGNtZC0+c3RhcnRfc3JjKSB7CisJY2FzZSBUUklHX0VYVDoKKwkJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyB8PSBIV1RSSUdfQklUOworCQlkZXZwcml2LT5jb21tYW5kMl9iaXRzICY9IH5QUkVUUklHX0JJVCAmIH5TV1RSSUdfQklUOworCQlicmVhazsKKwljYXNlIFRSSUdfTk9XOgorCQlkZXZwcml2LT5jb21tYW5kMl9iaXRzIHw9IFNXVFJJR19CSVQ7CisJCWRldnByaXYtPmNvbW1hbmQyX2JpdHMgJj0gflBSRVRSSUdfQklUICYgfkhXVFJJR19CSVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbWVkaV9lcnJvcihkZXYsICJidWcgd2l0aCBzdGFydF9zcmMiKTsKKwkJcmV0dXJuIC0xOworCQlicmVhazsKKwl9CisJc3dpdGNoIChjbWQtPnN0b3Bfc3JjKSB7CisJY2FzZSBUUklHX0VYVDoKKwkJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyB8PSBIV1RSSUdfQklUIHwgUFJFVFJJR19CSVQ7CisJCWJyZWFrOworCWNhc2UgVFJJR19DT1VOVDoKKwljYXNlIFRSSUdfTk9ORToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY29tZWRpX2Vycm9yKGRldiwgImJ1ZyB3aXRoIHN0b3Bfc3JjIik7CisJCXJldHVybiAtMTsKKwl9CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMl9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQyX1JFRyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCitzdGF0aWMgaXJxcmV0dXJuX3QgbGFicGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnJlYWRfc3ViZGV2OworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQ7CisKKwlpZiAoZGV2LT5hdHRhY2hlZCA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJwcmVtYXR1cmUgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlhc3luYyA9IHMtPmFzeW5jOworCWNtZCA9ICZhc3luYy0+Y21kOworCWFzeW5jLT5ldmVudHMgPSAwOworCisJLy8gcmVhZCBib2FyZCBzdGF0dXMKKwlkZXZwcml2LT5zdGF0dXMxX2JpdHMgPSBkZXZwcml2LT5yZWFkX2J5dGUoZGV2LT5pb2Jhc2UgKyBTVEFUVVMxX1JFRyk7CisJaWYgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0KQorCQlkZXZwcml2LT5zdGF0dXMyX2JpdHMgPQorCQkJZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsgU1RBVFVTMl9SRUcpOworCisJaWYgKChkZXZwcml2LT5zdGF0dXMxX2JpdHMgJiAoRE1BVENfQklUIHwgVElNRVJfQklUIHwgT1ZFUkZMT1dfQklUIHwKKwkJCQlPVkVSUlVOX0JJVCB8IERBVEFfQVZBSUxfQklUKSkgPT0gMAorCQkmJiAoZGV2cHJpdi0+c3RhdHVzMl9iaXRzICYgQTFfVENfQklUKSA9PSAwCisJCSYmIChkZXZwcml2LT5zdGF0dXMyX2JpdHMgJiBGTkhGX0JJVCkpIHsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWlmIChkZXZwcml2LT5zdGF0dXMxX2JpdHMgJiBPVkVSUlVOX0JJVCkgeworCQkvLyBjbGVhciBlcnJvciBpbnRlcnJ1cHQKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgQURDX0NMRUFSX1JFRyk7CisJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SIHwgQ09NRURJX0NCX0VPQTsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCWNvbWVkaV9lcnJvcihkZXYsICJvdmVycnVuIik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAoZGV2cHJpdi0+Y3VycmVudF90cmFuc2ZlciA9PSBpc2FfZG1hX3RyYW5zZmVyKSB7CisJCS8vIGlmIGEgZG1hIHRlcm1pbmFsIGNvdW50IG9mIGV4dGVybmFsIHN0b3AgdHJpZ2dlciBoYXMgb2NjdXJyZWQKKwkJaWYgKGRldnByaXYtPnN0YXR1czFfYml0cyAmIERNQVRDX0JJVCB8fAorCQkJKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0CisJCQkJJiYgZGV2cHJpdi0+c3RhdHVzMl9iaXRzICYgQTFfVENfQklUKSkgeworCQkJaGFuZGxlX2lzYV9kbWEoZGV2KTsKKwkJfQorCX0gZWxzZQorCQlsYWJwY19kcmFpbl9maWZvKGRldik7CisKKwlpZiAoZGV2cHJpdi0+c3RhdHVzMV9iaXRzICYgVElNRVJfQklUKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJoYW5kbGVkIHRpbWVyIGludGVycnVwdD8iKTsKKwkJLy8gY2xlYXIgaXQKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgVElNRVJfQ0xFQVJfUkVHKTsKKwl9CisKKwlpZiAoZGV2cHJpdi0+c3RhdHVzMV9iaXRzICYgT1ZFUkZMT1dfQklUKSB7CisJCS8vIGNsZWFyIGVycm9yIGludGVycnVwdAorCQlkZXZwcml2LT53cml0ZV9ieXRlKDB4MSwgZGV2LT5pb2Jhc2UgKyBBRENfQ0xFQVJfUkVHKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJY29tZWRpX2Vycm9yKGRldiwgIm92ZXJmbG93Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJLy8gaGFuZGxlIGV4dGVybmFsIHN0b3AgdHJpZ2dlcgorCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKSB7CisJCWlmIChkZXZwcml2LT5zdGF0dXMyX2JpdHMgJiBBMV9UQ19CSVQpIHsKKwkJCWxhYnBjX2RyYWluX2RyZWdzKGRldik7CisJCQlsYWJwY19jYW5jZWwoZGV2LCBzKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorCX0KKworCS8qIFRSSUdfQ09VTlQgZW5kIG9mIGFjcXVpc2l0aW9uICovCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoZGV2cHJpdi0+Y291bnQgPT0gMCkgeworCQkJbGFicGNfY2FuY2VsKGRldiwgcyk7CisJCQlhc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCX0KKwl9CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8vIHJlYWQgYWxsIGF2YWlsYWJsZSBzYW1wbGVzIGZyb20gYWkgZmlmbworc3RhdGljIGludCBsYWJwY19kcmFpbl9maWZvKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGludCBsc2IsIG1zYjsKKwlzaG9ydCBkYXRhOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jID0gZGV2LT5yZWFkX3N1YmRldi0+YXN5bmM7CisJY29uc3QgaW50IHRpbWVvdXQgPSAxMDAwMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWRldnByaXYtPnN0YXR1czFfYml0cyA9IGRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIFNUQVRVUzFfUkVHKTsKKworCWZvciAoaSA9IDA7IChkZXZwcml2LT5zdGF0dXMxX2JpdHMgJiBEQVRBX0FWQUlMX0JJVCkgJiYgaSA8IHRpbWVvdXQ7CisJCWkrKykgeworCQkvLyBxdWl0IGlmIHdlIGhhdmUgYWxsIHRoZSBkYXRhIHdlIHdhbnQKKwkJaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQkJaWYgKGRldnByaXYtPmNvdW50ID09IDApCisJCQkJYnJlYWs7CisJCQlkZXZwcml2LT5jb3VudC0tOworCQl9CisJCWxzYiA9IGRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIEFEQ19GSUZPX1JFRyk7CisJCW1zYiA9IGRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIEFEQ19GSUZPX1JFRyk7CisJCWRhdGEgPSAobXNiIDw8IDgpIHwgbHNiOworCQljZmNfd3JpdGVfdG9fYnVmZmVyKGRldi0+cmVhZF9zdWJkZXYsIGRhdGEpOworCQlkZXZwcml2LT5zdGF0dXMxX2JpdHMgPQorCQkJZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsgU1RBVFVTMV9SRUcpOworCX0KKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJhaSB0aW1lb3V0LCBmaWZvIG5ldmVyIGVtcHRpZXMiKTsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxhYnBjX2RyYWluX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+cmVhZF9zdWJkZXY7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG1heF9wb2ludHMsIG51bV9wb2ludHMsIHJlc2lkdWUsIGxlZnRvdmVyOworCWludCBpOworCisJc3RhdHVzID0gZGV2cHJpdi0+c3RhdHVzMV9iaXRzOworCisJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYV9jaGFuKTsKKwkvKiBjbGVhciBmbGlwLWZsb3AgdG8gbWFrZSBzdXJlIDItYnl0ZSByZWdpc3RlcnMgZm9yCisJICogY291bnQgYW5kIGFkZHJlc3MgZ2V0IHNldCBjb3JyZWN0bHkgKi8KKwljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hX2NoYW4pOworCisJLy8gZmlndXJlIG91dCBob3cgbWFueSBwb2ludHMgdG8gcmVhZAorCW1heF9wb2ludHMgPSBkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSAvIHNhbXBsZV9zaXplOworCS8qIHJlc2lkdWUgaXMgdGhlIG51bWJlciBvZiBwb2ludHMgbGVmdCB0byBiZSBkb25lIG9uIHRoZSBkbWEKKwkgKiB0cmFuc2Zlci4gIEl0IHNob3VsZCBhbHdheXMgYmUgemVybyBhdCB0aGlzIHBvaW50IHVubGVzcworCSAqIHRoZSBzdG9wX3NyYyBpcyBzZXQgdG8gZXh0ZXJuYWwgdHJpZ2dlcmluZy4KKwkgKi8KKwlyZXNpZHVlID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmRtYV9jaGFuKSAvIHNhbXBsZV9zaXplOworCW51bV9wb2ludHMgPSBtYXhfcG9pbnRzIC0gcmVzaWR1ZTsKKwlpZiAoZGV2cHJpdi0+Y291bnQgPCBudW1fcG9pbnRzICYmIGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKKwkJbnVtX3BvaW50cyA9IGRldnByaXYtPmNvdW50OworCisJLy8gZmlndXJlIG91dCBob3cgbWFueSBwb2ludHMgd2lsbCBiZSBzdG9yZWQgbmV4dCB0aW1lCisJbGVmdG92ZXIgPSAwOworCWlmIChhc3luYy0+Y21kLnN0b3Bfc3JjICE9IFRSSUdfQ09VTlQpIHsKKwkJbGVmdG92ZXIgPSBkZXZwcml2LT5kbWFfdHJhbnNmZXJfc2l6ZSAvIHNhbXBsZV9zaXplOworCX0gZWxzZSBpZiAoZGV2cHJpdi0+Y291bnQgPiBudW1fcG9pbnRzKSB7CisJCWxlZnRvdmVyID0gZGV2cHJpdi0+Y291bnQgLSBudW1fcG9pbnRzOworCQlpZiAobGVmdG92ZXIgPiBtYXhfcG9pbnRzKQorCQkJbGVmdG92ZXIgPSBtYXhfcG9pbnRzOworCX0KKworCS8qIHdyaXRlIGRhdGEgdG8gY29tZWRpIGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fcG9pbnRzOyBpKyspIHsKKwkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBkZXZwcml2LT5kbWFfYnVmZmVyW2ldKTsKKwl9CisJaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKKwkJZGV2cHJpdi0+Y291bnQgLT0gbnVtX3BvaW50czsKKworCS8vIHNldCBhZGRyZXNzIGFuZCBjb3VudCBmb3IgbmV4dCB0cmFuc2ZlcgorCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWFfY2hhbiwgdmlydF90b19idXMoZGV2cHJpdi0+ZG1hX2J1ZmZlcikpOworCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hX2NoYW4sIGxlZnRvdmVyICogc2FtcGxlX3NpemUpOworCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCisJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9pc2FfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWxhYnBjX2RyYWluX2RtYShkZXYpOworCisJZW5hYmxlX2RtYShkZXZwcml2LT5kbWFfY2hhbik7CisKKwkvLyBjbGVhciBkbWEgdGMgaW50ZXJydXB0CisJZGV2cHJpdi0+d3JpdGVfYnl0ZSgweDEsIGRldi0+aW9iYXNlICsgRE1BVENfQ0xFQVJfUkVHKTsKK30KKworLyogbWFrZXMgc3VyZSBhbGwgZGF0YSBhcXVpcmVkIGJ5IGJvYXJkIGlzIHRyYW5zZmVyZWQgdG8gY29tZWRpICh1c2VkCisgKiB3aGVuIGFxdWlzaXRpb24gaXMgdGVybWluYXRlZCBieSBzdG9wX3NyYyA9PSBUUklHX0VYVCkuICovCitzdGF0aWMgdm9pZCBsYWJwY19kcmFpbl9kcmVncyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoZGV2cHJpdi0+Y3VycmVudF90cmFuc2ZlciA9PSBpc2FfZG1hX3RyYW5zZmVyKQorCQlsYWJwY19kcmFpbl9kbWEoZGV2KTsKKworCWxhYnBjX2RyYWluX2ZpZm8oZGV2KTsKK30KKworc3RhdGljIGludCBsYWJwY19haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIG47CisJaW50IGNoYW4sIHJhbmdlOworCWludCBsc2IsIG1zYjsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8vIGRpc2FibGUgdGltZWQgY29udmVyc2lvbnMKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5jb21tYW5kMl9iaXRzICY9IH5TV1RSSUdfQklUICYgfkhXVFJJR19CSVQgJiB+UFJFVFJJR19CSVQ7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMl9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQyX1JFRyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCS8vIGRpc2FibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gYW5kIGRtYQorCWRldnByaXYtPmNvbW1hbmQzX2JpdHMgPSAwOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDNfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EM19SRUcpOworCisJLyogc2V0IGdhaW4gYW5kIGNoYW5uZWwgKi8KKwlkZXZwcml2LT5jb21tYW5kMV9iaXRzID0gMDsKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJZGV2cHJpdi0+Y29tbWFuZDFfYml0cyB8PSB0aGlzYm9hcmQtPmFpX3JhbmdlX2NvZGVbcmFuZ2VdOworCS8vIG11bmdlIGNoYW5uZWwgYml0cyBmb3IgZGlmZmVyZW50aWFsL3NjYW4gZGlzYWJsZWQgbW9kZQorCWlmIChDUl9BUkVGKGluc24tPmNoYW5zcGVjKSA9PSBBUkVGX0RJRkYpCisJCWNoYW4gKj0gMjsKKwlkZXZwcml2LT5jb21tYW5kMV9iaXRzIHw9IEFEQ19DSEFOX0JJVFMoY2hhbik7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQxX1JFRyk7CisKKwkvLyBzZXR1cCBjb21tYW5kNiByZWdpc3RlciBmb3IgMTIwMCBib2FyZHMKKwlpZiAodGhpc2JvYXJkLT5yZWdpc3Rlcl9sYXlvdXQgPT0gbGFicGNfMTIwMF9sYXlvdXQpIHsKKwkJLy8gcmVmZXJlbmNlIGlucHV0cyB0byBncm91bmQgb3IgY29tbW9uPworCQlpZiAoQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgIT0gQVJFRl9HUk9VTkQpCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzIHw9IEFEQ19DT01NT05fQklUOworCQllbHNlCisJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzICY9IH5BRENfQ09NTU9OX0JJVDsKKwkJLy8gYmlwb2xhciBvciB1bmlwb2xhciByYW5nZT8KKwkJaWYgKHRoaXNib2FyZC0+YWlfcmFuZ2VfaXNfdW5pcG9sYXJbcmFuZ2VdKQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyB8PSBBRENfVU5JUF9CSVQ7CisJCWVsc2UKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkFEQ19VTklQX0JJVDsKKwkJLy8gZG9uJ3QgaW50ZXJydXB0IG9uIGZpZm8gaGFsZiBmdWxsCisJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkFEQ19GSEZfSU5UUl9FTl9CSVQ7CisJCS8vIGRvbid0IGVuYWJsZSBpbnRlcnJ1cHQgb24gY291bnRlciBhMSB0ZXJtaW5hbCBjb3VudD8KKwkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyAmPSB+QTFfSU5UUl9FTl9CSVQ7CisJCS8vIHdyaXRlIHRvIHJlZ2lzdGVyCisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDZfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDZfUkVHKTsKKwl9CisJLy8gc2V0dXAgY29tbWFuZDQgcmVnaXN0ZXIKKwlkZXZwcml2LT5jb21tYW5kNF9iaXRzID0gMDsKKwlkZXZwcml2LT5jb21tYW5kNF9iaXRzIHw9IEVYVF9DT05WRVJUX0RJU0FCTEVfQklUOworCS8vIHNpbmdsZS1lbmRlZC9kaWZmZXJlbnRpYWwKKwlpZiAoQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgPT0gQVJFRl9ESUZGKQorCQlkZXZwcml2LT5jb21tYW5kNF9iaXRzIHw9IEFEQ19ESUZGX0JJVDsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ0X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDRfUkVHKTsKKworCS8vIGluaXRpYWxpemUgcGFjZXIgY291bnRlciBvdXRwdXQgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QgY2F1c2UgYW55IHByb2JsZW1zCisJZGV2cHJpdi0+d3JpdGVfYnl0ZShJTklUX0EwX0JJVFMsIGRldi0+aW9iYXNlICsgQ09VTlRFUl9BX0NPTlRST0xfUkVHKTsKKworCWxhYnBjX2NsZWFyX2FkY19maWZvKGRldik7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlkZXZwcml2LT53cml0ZV9ieXRlKDB4MSwgZGV2LT5pb2Jhc2UgKyBBRENfQ09OVkVSVF9SRUcpOworCisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmIChkZXZwcml2LT5yZWFkX2J5dGUoZGV2LT5pb2Jhc2UgKworCQkJCQlTVEFUVVMxX1JFRykgJiBEQVRBX0FWQUlMX0JJVCkKKwkJCQlicmVhazsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJaWYgKGkgPT0gdGltZW91dCkgeworCQkJY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXQiKTsKKwkJCXJldHVybiAtRVRJTUU7CisJCX0KKwkJbHNiID0gZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsgQURDX0ZJRk9fUkVHKTsKKwkJbXNiID0gZGV2cHJpdi0+cmVhZF9ieXRlKGRldi0+aW9iYXNlICsgQURDX0ZJRk9fUkVHKTsKKwkJZGF0YVtuXSA9IChtc2IgPDwgOCkgfCBsc2I7CisJfQorCisJcmV0dXJuIG47Cit9CisKKy8vIGFuYWxvZyBvdXRwdXQgaW5zbgorc3RhdGljIGludCBsYWJwY19hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW5uZWwsIHJhbmdlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxzYiwgbXNiOworCisJY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLy8gdHVybiBvZmYgcGFjaW5nIG9mIGFuYWxvZyBvdXRwdXQgY2hhbm5lbAorCS8qIG5vdGU6IGhhcmR3YXJlIGJ1ZyBpbiBkYXFjYXJkLTEyMDAgbWVhbnMgcGFjaW5nIGNhbm5vdAorCSAqIGJlIGluZGVwZW5kZW50bHkgZW5hYmxlZC9kaXNhYmxlZCBmb3IgaXRzIHRoZSB0d28gY2hhbm5lbHMgKi8KKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlkZXZwcml2LT5jb21tYW5kMl9iaXRzICY9IH5EQUNfUEFDRURfQklUKGNoYW5uZWwpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDJfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMl9SRUcpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwkvLyBzZXQgcmFuZ2UKKwlpZiAodGhpc2JvYXJkLT5yZWdpc3Rlcl9sYXlvdXQgPT0gbGFicGNfMTIwMF9sYXlvdXQpIHsKKwkJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJCWlmIChyYW5nZSAmIEFPX1JBTkdFX0lTX1VOSVBPTEFSKQorCQkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyB8PSBEQUNfVU5JUF9CSVQoY2hhbm5lbCk7CisJCWVsc2UKKwkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkRBQ19VTklQX0JJVChjaGFubmVsKTsKKwkJLy8gd3JpdGUgdG8gcmVnaXN0ZXIKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNl9iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBDT01NQU5ENl9SRUcpOworCX0KKwkvLyBzZW5kIGRhdGEKKwlsc2IgPSBkYXRhWzBdICYgMHhmZjsKKwltc2IgPSAoZGF0YVswXSA+PiA4KSAmIDB4ZmY7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShsc2IsIGRldi0+aW9iYXNlICsgREFDX0xTQl9SRUcoY2hhbm5lbCkpOworCWRldnByaXYtPndyaXRlX2J5dGUobXNiLCBkZXYtPmlvYmFzZSArIERBQ19NU0JfUkVHKGNoYW5uZWwpKTsKKworCS8vIHJlbWVtYmVyIHZhbHVlIGZvciByZWFkYmFjaworCWRldnByaXYtPmFvX3ZhbHVlW2NoYW5uZWxdID0gZGF0YVswXTsKKworCXJldHVybiAxOworfQorCisvLyBhbmFsb2cgb3V0cHV0IHJlYWRiYWNrIGluc24KK3N0YXRpYyBpbnQgbGFicGNfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5hb192YWx1ZVtDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBsYWJwY19jYWxpYl9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5jYWxkYWNbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfY2FsaWJfd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXdyaXRlX2NhbGRhYyhkZXYsIGNoYW5uZWwsIGRhdGFbMF0pOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGxhYnBjX2VlcHJvbV9yZWFkX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5lZXByb21fZGF0YVtDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBsYWJwY19lZXByb21fd3JpdGVfaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgcmV0OworCisJLy8gb25seSBhbGxvdyB3cml0ZXMgdG8gdXNlciBhcmVhIG9mIGVlcHJvbQorCWlmIChjaGFubmVsIDwgMTYgfHwgY2hhbm5lbCA+IDEyNykgeworCQlwcmludGsoImVlcHJvbSB3cml0ZXMgYXJlIG9ubHkgYWxsb3dlZCB0byBjaGFubmVscyAxNiB0aHJvdWdoIDEyNyAodGhlIHBvaW50ZXIgYW5kIHVzZXIgYXJlYXMpIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGxhYnBjX2VlcHJvbV93cml0ZShkZXYsIGNoYW5uZWwsIGRhdGFbMF0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDE7Cit9CisKKy8vIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBzdWdnZXN0cyBhIGRtYSB0cmFuc2ZlciBzaXplIGluIGJ5dGVzCitzdGF0aWMgdW5zaWduZWQgaW50IGxhYnBjX3N1Z2dlc3RfdHJhbnNmZXJfc2l6ZShzdHJ1Y3QgY29tZWRpX2NtZCBjbWQpCit7CisJdW5zaWduZWQgaW50IHNpemU7CisJdW5zaWduZWQgaW50IGZyZXE7CisKKwlpZiAoY21kLmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpCisJCWZyZXEgPSAxMDAwMDAwMDAwIC8gY21kLmNvbnZlcnRfYXJnOworCS8vIHJldHVybiBzb21lIGRlZmF1bHQgdmFsdWUKKwllbHNlCisJCWZyZXEgPSAweGZmZmZmZmZmOworCisJLy8gbWFrZSBidWZmZXIgZmlsbCBpbiBubyBtb3JlIHRoYW4gMS8zIHNlY29uZAorCXNpemUgPSAoZnJlcSAvIDMpICogc2FtcGxlX3NpemU7CisKKwkvLyBzZXQgYSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNpemUgYWxsb3dlZAorCWlmIChzaXplID4gZG1hX2J1ZmZlcl9zaXplKQorCQlzaXplID0gZG1hX2J1ZmZlcl9zaXplIC0gZG1hX2J1ZmZlcl9zaXplICUgc2FtcGxlX3NpemU7CisJZWxzZSBpZiAoc2l6ZSA8IHNhbXBsZV9zaXplKQorCQlzaXplID0gc2FtcGxlX3NpemU7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworLy8gZmlndXJlcyBvdXQgd2hhdCBjb3VudGVyIHZhbHVlcyB0byB1c2UgYmFzZWQgb24gY29tbWFuZAorc3RhdGljIHZvaWQgbGFicGNfYWRjX3RpbWluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJY29uc3QgaW50IG1heF9jb3VudGVyX3ZhbHVlID0gMHgxMDAwMDsJLy8gbWF4IHZhbHVlIGZvciAxNiBiaXQgY291bnRlciBpbiBtb2RlIDIKKwljb25zdCBpbnQgbWluX2NvdW50ZXJfdmFsdWUgPSAyOwkvLyBtaW4gdmFsdWUgZm9yIDE2IGJpdCBjb3VudGVyIGluIG1vZGUgMgorCXVuc2lnbmVkIGludCBiYXNlX3BlcmlvZDsKKworCS8vIGlmIGJvdGggY29udmVydCBhbmQgc2NhbiB0cmlnZ2VycyBhcmUgVFJJR19USU1FUiwgdGhlbiB0aGV5IGJvdGggcmVseSBvbiBjb3VudGVyIGIwCisJaWYgKGxhYnBjX2FpX2NvbnZlcnRfcGVyaW9kKGNtZCkgJiYgbGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKSkgeworCQkvLyBwaWNrIHRoZSBsb3dlc3QgYjAgZGl2aXNvciB2YWx1ZSB3ZSBjYW4gKGZvciBtYXhpbXVtIGlucHV0IGNsb2NrIHNwZWVkIG9uIGNvbnZlcnQgYW5kIHNjYW4gY291bnRlcnMpCisJCWRldnByaXYtPmRpdmlzb3JfYjAgPSAobGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKSAtIDEpIC8KKwkJCShMQUJQQ19USU1FUl9CQVNFICogbWF4X2NvdW50ZXJfdmFsdWUpICsgMTsKKwkJaWYgKGRldnByaXYtPmRpdmlzb3JfYjAgPCBtaW5fY291bnRlcl92YWx1ZSkKKwkJCWRldnByaXYtPmRpdmlzb3JfYjAgPSBtaW5fY291bnRlcl92YWx1ZTsKKwkJaWYgKGRldnByaXYtPmRpdmlzb3JfYjAgPiBtYXhfY291bnRlcl92YWx1ZSkKKwkJCWRldnByaXYtPmRpdmlzb3JfYjAgPSBtYXhfY291bnRlcl92YWx1ZTsKKworCQliYXNlX3BlcmlvZCA9IExBQlBDX1RJTUVSX0JBU0UgKiBkZXZwcml2LT5kaXZpc29yX2IwOworCisJCS8vIHNldCBhMCBmb3IgY29udmVyc2lvbiBmcmVxdWVuY3kgYW5kIGIxIGZvciBzY2FuIGZyZXF1ZW5jeQorCQlzd2l0Y2ggKGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spIHsKKwkJZGVmYXVsdDoKKwkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJCQlkZXZwcml2LT5kaXZpc29yX2EwID0KKwkJCQkobGFicGNfYWlfY29udmVydF9wZXJpb2QoY21kKSArCisJCQkJKGJhc2VfcGVyaW9kIC8gMikpIC8gYmFzZV9wZXJpb2Q7CisJCQlkZXZwcml2LT5kaXZpc29yX2IxID0KKwkJCQkobGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKSArCisJCQkJKGJhc2VfcGVyaW9kIC8gMikpIC8gYmFzZV9wZXJpb2Q7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX1VQOgorCQkJZGV2cHJpdi0+ZGl2aXNvcl9hMCA9CisJCQkJKGxhYnBjX2FpX2NvbnZlcnRfcGVyaW9kKGNtZCkgKyAoYmFzZV9wZXJpb2QgLQorCQkJCQkxKSkgLyBiYXNlX3BlcmlvZDsKKwkJCWRldnByaXYtPmRpdmlzb3JfYjEgPQorCQkJCShsYWJwY19haV9zY2FuX3BlcmlvZChjbWQpICsgKGJhc2VfcGVyaW9kIC0KKwkJCQkJMSkpIC8gYmFzZV9wZXJpb2Q7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCQlkZXZwcml2LT5kaXZpc29yX2EwID0KKwkJCQlsYWJwY19haV9jb252ZXJ0X3BlcmlvZChjbWQpIC8gYmFzZV9wZXJpb2Q7CisJCQlkZXZwcml2LT5kaXZpc29yX2IxID0KKwkJCQlsYWJwY19haV9zY2FuX3BlcmlvZChjbWQpIC8gYmFzZV9wZXJpb2Q7CisJCQlicmVhazsKKwkJfQorCQkvLyBtYWtlIHN1cmUgYTAgYW5kIGIxIHZhbHVlcyBhcmUgYWNjZXB0YWJsZQorCQlpZiAoZGV2cHJpdi0+ZGl2aXNvcl9hMCA8IG1pbl9jb3VudGVyX3ZhbHVlKQorCQkJZGV2cHJpdi0+ZGl2aXNvcl9hMCA9IG1pbl9jb3VudGVyX3ZhbHVlOworCQlpZiAoZGV2cHJpdi0+ZGl2aXNvcl9hMCA+IG1heF9jb3VudGVyX3ZhbHVlKQorCQkJZGV2cHJpdi0+ZGl2aXNvcl9hMCA9IG1heF9jb3VudGVyX3ZhbHVlOworCQlpZiAoZGV2cHJpdi0+ZGl2aXNvcl9iMSA8IG1pbl9jb3VudGVyX3ZhbHVlKQorCQkJZGV2cHJpdi0+ZGl2aXNvcl9iMSA9IG1pbl9jb3VudGVyX3ZhbHVlOworCQlpZiAoZGV2cHJpdi0+ZGl2aXNvcl9iMSA+IG1heF9jb3VudGVyX3ZhbHVlKQorCQkJZGV2cHJpdi0+ZGl2aXNvcl9iMSA9IG1heF9jb3VudGVyX3ZhbHVlOworCQkvLyB3cml0ZSBjb3JyZWN0ZWQgdGltaW5ncyB0byBjb21tYW5kCisJCWxhYnBjX3NldF9haV9jb252ZXJ0X3BlcmlvZChjbWQsCisJCQliYXNlX3BlcmlvZCAqIGRldnByaXYtPmRpdmlzb3JfYTApOworCQlsYWJwY19zZXRfYWlfc2Nhbl9wZXJpb2QoY21kLAorCQkJYmFzZV9wZXJpb2QgKiBkZXZwcml2LT5kaXZpc29yX2IxKTsKKwkJLy8gaWYgb25seSBvbmUgVFJJR19USU1FUiBpcyB1c2VkLCB3ZSBjYW4gZW1wbG95IHRoZSBnZW5lcmljIGNhc2NhZGVkIHRpbWluZyBmdW5jdGlvbnMKKwl9IGVsc2UgaWYgKGxhYnBjX2FpX3NjYW5fcGVyaW9kKGNtZCkpIHsKKwkJdW5zaWduZWQgaW50IHNjYW5fcGVyaW9kOworCisJCXNjYW5fcGVyaW9kID0gbGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKTsKKwkJLyogY2FsY3VsYXRlIGNhc2NhZGVkIGNvdW50ZXIgdmFsdWVzIHRoYXQgZ2l2ZSBkZXNpcmVkIHNjYW4gdGltaW5nICovCisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihMQUJQQ19USU1FUl9CQVNFLAorCQkJJihkZXZwcml2LT5kaXZpc29yX2IxKSwgJihkZXZwcml2LT5kaXZpc29yX2IwKSwKKwkJCSZzY2FuX3BlcmlvZCwgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWxhYnBjX3NldF9haV9zY2FuX3BlcmlvZChjbWQsIHNjYW5fcGVyaW9kKTsKKwl9IGVsc2UgaWYgKGxhYnBjX2FpX2NvbnZlcnRfcGVyaW9kKGNtZCkpIHsKKwkJdW5zaWduZWQgaW50IGNvbnZlcnRfcGVyaW9kOworCisJCWNvbnZlcnRfcGVyaW9kID0gbGFicGNfYWlfY29udmVydF9wZXJpb2QoY21kKTsKKwkJLyogY2FsY3VsYXRlIGNhc2NhZGVkIGNvdW50ZXIgdmFsdWVzIHRoYXQgZ2l2ZSBkZXNpcmVkIGNvbnZlcnNpb24gdGltaW5nICovCisJCWk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXJfMmRpdihMQUJQQ19USU1FUl9CQVNFLAorCQkJJihkZXZwcml2LT5kaXZpc29yX2EwKSwgJihkZXZwcml2LT5kaXZpc29yX2IwKSwKKwkJCSZjb252ZXJ0X3BlcmlvZCwgY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWxhYnBjX3NldF9haV9jb252ZXJ0X3BlcmlvZChjbWQsIGNvbnZlcnRfcGVyaW9kKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbGFicGNfZGlvX21lbV9jYWxsYmFjayhpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsCisJdW5zaWduZWQgbG9uZyBpb2Jhc2UpCit7CisJaWYgKGRpcikgeworCQl3cml0ZWIoZGF0YSwgKHZvaWQgKikoaW9iYXNlICsgcG9ydCkpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gcmVhZGIoKHZvaWQgKikoaW9iYXNlICsgcG9ydCkpOworCX0KK30KKworLy8gbG93bGV2ZWwgd3JpdGUgdG8gZWVwcm9tL2RhYworc3RhdGljIHZvaWQgbGFicGNfc2VyaWFsX291dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHZhbHVlLAorCXVuc2lnbmVkIGludCB2YWx1ZV93aWR0aCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPD0gdmFsdWVfd2lkdGg7IGkrKykgeworCQkvLyBjbGVhciBzZXJpYWwgY2xvY2sKKwkJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+U0NMT0NLX0JJVDsKKwkJLy8gc2VuZCBiaXRzIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGZpcnN0CisJCWlmICh2YWx1ZSAmICgxIDw8ICh2YWx1ZV93aWR0aCAtIGkpKSkKKwkJCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgfD0gU0RBVEFfQklUOworCQllbHNlCisJCQlkZXZwcml2LT5jb21tYW5kNV9iaXRzICY9IH5TREFUQV9CSVQ7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywKKwkJCWRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKwkJLy8gc2V0IGNsb2NrIHRvIGxvYWQgYml0CisJCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgfD0gU0NMT0NLX0JJVDsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCX0KK30KKworLy8gbG93bGV2ZWwgcmVhZCBmcm9tIGVlcHJvbQorc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19zZXJpYWxfaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbHVlID0gMDsKKwlpbnQgaTsKKwljb25zdCBpbnQgdmFsdWVfd2lkdGggPSA4OwkvLyBudW1iZXIgb2YgYml0cyB3aWRlIHZhbHVlcyBhcmUKKworCWZvciAoaSA9IDE7IGkgPD0gdmFsdWVfd2lkdGg7IGkrKykgeworCQkvLyBzZXQgc2VyaWFsIGNsb2NrCisJCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgfD0gU0NMT0NLX0JJVDsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCQkvLyBjbGVhciBjbG9jayBiaXQKKwkJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+U0NMT0NLX0JJVDsKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLAorCQkJZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCQkvLyByZWFkIGJpdHMgbW9zdCBzaWduaWZpY2FudCBiaXQgZmlyc3QKKwkJY29tZWRpX3VkZWxheSgxKTsKKwkJZGV2cHJpdi0+c3RhdHVzMl9iaXRzID0KKwkJCWRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIFNUQVRVUzJfUkVHKTsKKwkJaWYgKGRldnByaXYtPnN0YXR1czJfYml0cyAmIEVFUFJPTV9PVVRfQklUKSB7CisJCQl2YWx1ZSB8PSAxIDw8ICh2YWx1ZV93aWR0aCAtIGkpOworCQl9CisJfQorCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGxhYnBjX2VlcHJvbV9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgYWRkcmVzcykKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJY29uc3QgaW50IHJlYWRfaW5zdHJ1Y3Rpb24gPSAweDM7CS8vIGJpdHMgdG8gdGVsbCBlZXByb20gdG8gZXhwZWN0IGEgcmVhZAorCWNvbnN0IGludCB3cml0ZV9sZW5ndGggPSA4OwkvLyA4IGJpdCB3cml0ZSBsZW5ndGhzIHRvIGVlcHJvbQorCisJLy8gZW5hYmxlIHJlYWQvd3JpdGUgdG8gZWVwcm9tCisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+RUVQUk9NX0VOX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgfD0gRUVQUk9NX0VOX0JJVCB8IEVFUFJPTV9XUklURV9VTlBST1RFQ1RfQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisKKwkvLyBzZW5kIHJlYWQgaW5zdHJ1Y3Rpb24KKwlsYWJwY19zZXJpYWxfb3V0KGRldiwgcmVhZF9pbnN0cnVjdGlvbiwgd3JpdGVfbGVuZ3RoKTsKKwkvLyBzZW5kIDggYml0IGFkZHJlc3MgdG8gcmVhZCBmcm9tCisJbGFicGNfc2VyaWFsX291dChkZXYsIGFkZHJlc3MsIHdyaXRlX2xlbmd0aCk7CisJLy8gcmVhZCByZXN1bHQKKwl2YWx1ZSA9IGxhYnBjX3NlcmlhbF9pbihkZXYpOworCisJLy8gZGlzYWJsZSByZWFkL3dyaXRlIHRvIGVlcHJvbQorCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0gfkVFUFJPTV9FTl9CSVQgJiB+RUVQUk9NX1dSSVRFX1VOUFJPVEVDVF9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19lZXByb21fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgaW50IGFkZHJlc3MsIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwljb25zdCBpbnQgd3JpdGVfZW5hYmxlX2luc3RydWN0aW9uID0gMHg2OworCWNvbnN0IGludCB3cml0ZV9pbnN0cnVjdGlvbiA9IDB4MjsKKwljb25zdCBpbnQgd3JpdGVfbGVuZ3RoID0gODsJLy8gOCBiaXQgd3JpdGUgbGVuZ3RocyB0byBlZXByb20KKwljb25zdCBpbnQgd3JpdGVfaW5fcHJvZ3Jlc3NfYml0ID0gMHgxOworCWNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDA7CisJaW50IGk7CisKKwkvLyBtYWtlIHN1cmUgdGhlcmUgaXNuJ3QgYWxyZWFkeSBhIHdyaXRlIGluIHByb2dyZXNzCisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQlpZiAoKGxhYnBjX2VlcHJvbV9yZWFkX3N0YXR1cyhkZXYpICYgd3JpdGVfaW5fcHJvZ3Jlc3NfYml0KSA9PQorCQkJMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJlZXByb20gd3JpdGUgdGltZWQgb3V0Iik7CisJCXJldHVybiAtRVRJTUU7CisJfQorCS8vIHVwZGF0ZSBzb2Z0d2FyZSBjb3B5IG9mIGVlcHJvbQorCWRldnByaXYtPmVlcHJvbV9kYXRhW2FkZHJlc3NdID0gdmFsdWU7CisKKwkvLyBlbmFibGUgcmVhZC93cml0ZSB0byBlZXByb20KKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzICY9IH5FRVBST01fRU5fQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyB8PSBFRVBST01fRU5fQklUIHwgRUVQUk9NX1dSSVRFX1VOUFJPVEVDVF9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKworCS8vIHNlbmQgd3JpdGVfZW5hYmxlIGluc3RydWN0aW9uCisJbGFicGNfc2VyaWFsX291dChkZXYsIHdyaXRlX2VuYWJsZV9pbnN0cnVjdGlvbiwgd3JpdGVfbGVuZ3RoKTsKKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzICY9IH5FRVBST01fRU5fQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisKKwkvLyBzZW5kIHdyaXRlIGluc3RydWN0aW9uCisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyB8PSBFRVBST01fRU5fQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisJbGFicGNfc2VyaWFsX291dChkZXYsIHdyaXRlX2luc3RydWN0aW9uLCB3cml0ZV9sZW5ndGgpOworCS8vIHNlbmQgOCBiaXQgYWRkcmVzcyB0byB3cml0ZSB0bworCWxhYnBjX3NlcmlhbF9vdXQoZGV2LCBhZGRyZXNzLCB3cml0ZV9sZW5ndGgpOworCS8vIHdyaXRlIHZhbHVlCisJbGFicGNfc2VyaWFsX291dChkZXYsIHZhbHVlLCB3cml0ZV9sZW5ndGgpOworCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0gfkVFUFJPTV9FTl9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKworCS8vIGRpc2FibGUgcmVhZC93cml0ZSB0byBlZXByb20KKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzICY9IH5FRVBST01fRU5fQklUICYgfkVFUFJPTV9XUklURV9VTlBST1RFQ1RfQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsYWJwY19lZXByb21fcmVhZF9zdGF0dXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCWNvbnN0IGludCByZWFkX3N0YXR1c19pbnN0cnVjdGlvbiA9IDB4NTsKKwljb25zdCBpbnQgd3JpdGVfbGVuZ3RoID0gODsJLy8gOCBiaXQgd3JpdGUgbGVuZ3RocyB0byBlZXByb20KKworCS8vIGVuYWJsZSByZWFkL3dyaXRlIHRvIGVlcHJvbQorCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0gfkVFUFJPTV9FTl9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKwlkZXZwcml2LT5jb21tYW5kNV9iaXRzIHw9IEVFUFJPTV9FTl9CSVQgfCBFRVBST01fV1JJVEVfVU5QUk9URUNUX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCisJLy8gc2VuZCByZWFkIHN0YXR1cyBpbnN0cnVjdGlvbgorCWxhYnBjX3NlcmlhbF9vdXQoZGV2LCByZWFkX3N0YXR1c19pbnN0cnVjdGlvbiwgd3JpdGVfbGVuZ3RoKTsKKwkvLyByZWFkIHJlc3VsdAorCXZhbHVlID0gbGFicGNfc2VyaWFsX2luKGRldik7CisKKwkvLyBkaXNhYmxlIHJlYWQvd3JpdGUgdG8gZWVwcm9tCisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+RUVQUk9NX0VOX0JJVCAmIH5FRVBST01fV1JJVEVfVU5QUk9URUNUX0JJVDsKKwljb21lZGlfdWRlbGF5KDEpOworCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDVfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENV9SRUcpOworCisJcmV0dXJuIHZhbHVlOworfQorCisvLyB3cml0ZXMgdG8gOCBiaXQgY2FsaWJyYXRpb24gZGFjcworc3RhdGljIHZvaWQgd3JpdGVfY2FsZGFjKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJaWYgKHZhbHVlID09IGRldnByaXYtPmNhbGRhY1tjaGFubmVsXSkKKwkJcmV0dXJuOworCWRldnByaXYtPmNhbGRhY1tjaGFubmVsXSA9IHZhbHVlOworCisJLy8gY2xlYXIgY2FsZGFjIGxvYWQgYml0IGFuZCBtYWtlIHN1cmUgd2UgZG9uJ3Qgd3JpdGUgdG8gZWVwcm9tCisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPQorCQl+Q0FMREFDX0xPQURfQklUICYgfkVFUFJPTV9FTl9CSVQgJiB+RUVQUk9NX1dSSVRFX1VOUFJPVEVDVF9CSVQ7CisJY29tZWRpX3VkZWxheSgxKTsKKwlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ1X2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDVfUkVHKTsKKworCS8vIHdyaXRlIDQgYml0IGNoYW5uZWwKKwlsYWJwY19zZXJpYWxfb3V0KGRldiwgY2hhbm5lbCwgNCk7CisJLy8gd3JpdGUgOCBiaXQgY2FsZGFjIHZhbHVlCisJbGFicGNfc2VyaWFsX291dChkZXYsIHZhbHVlLCA4KTsKKworCS8vIHNldCBhbmQgY2xlYXIgY2FsZGFjIGJpdCB0byBsb2FkIGNhbGRhYyB2YWx1ZQorCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgfD0gQ0FMREFDX0xPQURfQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7CisJZGV2cHJpdi0+Y29tbWFuZDVfYml0cyAmPSB+Q0FMREFDX0xPQURfQklUOworCWNvbWVkaV91ZGVsYXkoMSk7CisJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kNV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQ1X1JFRyk7Cit9CisKKyNpZmRlZiBDT05GSUdfQ09NRURJX1BDSQorQ09NRURJX1BDSV9JTklUQ0xFQU5VUChkcml2ZXJfbGFicGMsIGxhYnBjX3BjaV90YWJsZSk7CisjZWxzZQorQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9sYWJwYyk7CisjZW5kaWYKKworRVhQT1JUX1NZTUJPTF9HUEwobGFicGNfY29tbW9uX2F0dGFjaCk7CitFWFBPUlRfU1lNQk9MX0dQTChsYWJwY19jb21tb25fZGV0YWNoKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHJhbmdlX2xhYnBjXzEyMDBfYWkpOworRVhQT1JUX1NZTUJPTF9HUEwobGFicGNfMTIwMF9haV9nYWluX2JpdHMpOworRVhQT1JUX1NZTUJPTF9HUEwobGFicGNfMTIwMF9pc191bmlwb2xhcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NGIwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuaApAQCAtMCwwICsxLDg1IEBACisvKgorICAgIG5pX2xhYnBjLmgKKworICAgIEhlYWRlciBmb3IgbmlfbGFicGMuYyBhbmQgbmlfbGFicGNfY3MuYworCisgICAgQ29weXJpZ2h0IChDKSAyMDAzIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaWZuZGVmIF9OSV9MQUJQQ19ICisjZGVmaW5lIF9OSV9MQUJQQ19ICisKKyNkZWZpbmUgRUVQUk9NX1NJWkUJMjU2CS8vIDI1NiBieXRlIGVlcHJvbQorI2RlZmluZSBOVU1fQU9fQ0hBTgkyCS8vIGJvYXJkcyBoYXZlIHR3byBhbmFsb2cgb3V0cHV0IGNoYW5uZWxzCisKK2VudW0gbGFicGNfYnVzdHlwZSB7IGlzYV9idXN0eXBlLCBwY2lfYnVzdHlwZSwgcGNtY2lhX2J1c3R5cGUgfTsKK2VudW0gbGFicGNfcmVnaXN0ZXJfbGF5b3V0IHsgbGFicGNfcGx1c19sYXlvdXQsIGxhYnBjXzEyMDBfbGF5b3V0IH07CitlbnVtIHRyYW5zZmVyX3R5cGUgeyBmaWZvX25vdF9lbXB0eV90cmFuc2ZlciwgZmlmb19oYWxmX2Z1bGxfdHJhbnNmZXIsCisJCWlzYV9kbWFfdHJhbnNmZXIgfTsKKwordHlwZWRlZiBzdHJ1Y3QgbGFicGNfYm9hcmRfc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBkZXZpY2VfaWQ7CQkvLyBkZXZpY2UgaWQgZm9yIHBjaSBhbmQgcGNtY2lhIGJvYXJkcworCWludCBhaV9zcGVlZDsJCS8vIG1heGltdW0gaW5wdXQgc3BlZWQgaW4gbmFub3NlY29uZHMKKwllbnVtIGxhYnBjX2J1c3R5cGUgYnVzdHlwZTsJLy8gSVNBL1BDSS9ldGMuCisJZW51bSBsYWJwY19yZWdpc3Rlcl9sYXlvdXQgcmVnaXN0ZXJfbGF5b3V0OwkvLyAxMjAwIGhhcyBleHRyYSByZWdpc3RlcnMgY29tcGFyZWQgdG8gcGMrCisJaW50IGhhc19hbzsJCS8vIGhhcyBhbmFsb2cgb3V0cHV0IHRydWUvZmFsc2UKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfdGFibGU7CisJY29uc3QgaW50ICphaV9yYW5nZV9jb2RlOworCWNvbnN0IGludCAqYWlfcmFuZ2VfaXNfdW5pcG9sYXI7CisJdW5zaWduZWQgYWlfc2Nhbl91cDoxOwkvLyBib2FyZCBjYW4gYXV0byBzY2FuIHVwIGluIGFpIGNoYW5uZWxzLCBub3QganVzdCBkb3duCisJdW5zaWduZWQgbWVtb3J5X21hcHBlZF9pbzoxOwkvKiB1c2VzIG1lbW9yeSBtYXBwZWQgaW8gaW5zdGVhZCBvZiBpb3BvcnRzICovCit9IGxhYnBjX2JvYXJkOworCit0eXBlZGVmIHN0cnVjdCB7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOwkvLyBmb3IgbWl0ZSBjaGlwIG9uIHBjaS0xMjAwCisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBsb25nIGNvdW50OwkvKiBudW1iZXIgb2YgZGF0YSBwb2ludHMgbGVmdCB0byBiZSB0YWtlbiAqLworCXVuc2lnbmVkIGludCBhb192YWx1ZVtOVU1fQU9fQ0hBTl07CS8vIHNvZnR3YXJlIGNvcHkgb2YgYW5hbG9nIG91dHB1dCB2YWx1ZXMKKwkvLyBzb2Z0d2FyZSBjb3B5cyBvZiBiaXRzIHdyaXR0ZW4gdG8gY29tbWFuZCByZWdpc3RlcnMKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29tbWFuZDFfYml0czsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29tbWFuZDJfYml0czsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29tbWFuZDNfYml0czsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29tbWFuZDRfYml0czsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29tbWFuZDVfYml0czsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29tbWFuZDZfYml0czsKKwkvLyBzdG9yZSBsYXN0IHJlYWQgb2YgYm9hcmQgc3RhdHVzIHJlZ2lzdGVycworCXZvbGF0aWxlIHVuc2lnbmVkIGludCBzdGF0dXMxX2JpdHM7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IHN0YXR1czJfYml0czsKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcl9hMDsJLyogdmFsdWUgdG8gbG9hZCBpbnRvIGJvYXJkJ3MgY291bnRlciBhMCAoY29udmVyc2lvbiBwYWNpbmcpIGZvciB0aW1lZCBjb252ZXJzaW9ucyAqLworCXVuc2lnbmVkIGludCBkaXZpc29yX2IwOwkvKiB2YWx1ZSB0byBsb2FkIGludG8gYm9hcmQncyBjb3VudGVyIGIwIChtYXN0ZXIpIGZvciB0aW1lZCBjb252ZXJzaW9ucyAqLworCXVuc2lnbmVkIGludCBkaXZpc29yX2IxOwkvKiB2YWx1ZSB0byBsb2FkIGludG8gYm9hcmQncyBjb3VudGVyIGIxIChzY2FuIHBhY2luZykgZm9yIHRpbWVkIGNvbnZlcnNpb25zICovCisJdW5zaWduZWQgaW50IGRtYV9jaGFuOwkvLyBkbWEgY2hhbm5lbCB0byB1c2UKKwl1MTYgKmRtYV9idWZmZXI7CS8vIGJ1ZmZlciBhaSB3aWxsIGRtYSBpbnRvCisJdW5zaWduZWQgaW50IGRtYV90cmFuc2Zlcl9zaXplOwkvLyB0cmFuc2ZlciBzaXplIGluIGJ5dGVzIGZvciBjdXJyZW50IHRyYW5zZmVyCisJZW51bSB0cmFuc2Zlcl90eXBlIGN1cnJlbnRfdHJhbnNmZXI7CS8vIHdlIGFyZSB1c2luZyBkbWEvZmlmby1oYWxmLWZ1bGwvZXRjLgorCXVuc2lnbmVkIGludCBlZXByb21fZGF0YVtFRVBST01fU0laRV07CS8vIHN0b3JlcyBjb250ZW50cyBvZiBib2FyZCdzIGVlcHJvbQorCXVuc2lnbmVkIGludCBjYWxkYWNbMTZdOwkvLyBzdG9yZXMgc2V0dGluZ3Mgb2YgY2FsaWJyYXRpb24gZGFjcworCS8vIGZ1bmN0aW9uIHBvaW50ZXJzIHNvIHdlIGNhbiB1c2UgaW5iL291dGIgb3IgcmVhZGIvd3JpdGViIGFzIGFwcHJvcHJpYXRlCisJdW5zaWduZWQgaW50ICgqcmVhZF9ieXRlKSAodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKKwl2b2lkICgqd3JpdGVfYnl0ZSkgKHVuc2lnbmVkIGludCBieXRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworfSBsYWJwY19wcml2YXRlOworCitpbnQgbGFicGNfY29tbW9uX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgbG9uZyBpb2Jhc2UsCisJdW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGRtYSk7CitpbnQgbGFicGNfY29tbW9uX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK2V4dGVybiBjb25zdCBpbnQgbGFicGNfMTIwMF9pc191bmlwb2xhcltdOworZXh0ZXJuIGNvbnN0IGludCBsYWJwY18xMjAwX2FpX2dhaW5fYml0c1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2xhYnBjXzEyMDBfYWk7CisKKyNlbmRpZiAvKiBfTklfTEFCUENfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzBjZTJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2xhYnBjX2NzLmMKQEAgLTAsMCArMSw1NzMgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfbGFicGNfY3MuYworICAgIERyaXZlciBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgZGFxY2FyZC0xMjAwIGJvYXJkcworICAgIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMyBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICBQQ01DSUEgY3JhcCBpcyBhZGFwdGVkIGZyb20gZHVtbXlfY3MuYyAxLjMxIDIwMDEvMDgvMjQgMTI6MTM6MTMKKyAgICBmcm9tIHRoZSBwY21jaWEgcGFja2FnZS4KKyAgICBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIHBjbWNpYSBkdW1teV9jcy5jIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKKyAgICA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZCBBLiBIaW5kcworICAgIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgQS4gSGluZHMuCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworLyoKK0RyaXZlcjogbmlfbGFicGNfY3MKK0Rlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyBMYWItUEMgKCYgY29tcGF0aWJsZXMpCitBdXRob3I6IEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gREFRQ2FyZC0xMjAwIChkYXFjYXJkLTEyMDApCitTdGF0dXM6IHdvcmtzCisKK1RoYW5rcyBnbyB0byBGcmVkcmlrIExpbmd2YWxsIGZvciBtdWNoIHRlc3RpbmcgYW5kIHBlcnNldmVyYW5jZSBpbgoraGVscGluZyB0byBkZWJ1ZyBkYXFjYXJkLTEyMDAgc3VwcG9ydC4KKworVGhlIDEyMDAgc2VyaWVzIGJvYXJkcyBoYXZlIG9uYm9hcmQgY2FsaWJyYXRpb24gZGFjcyBmb3IgY29ycmVjdGluZworYW5hbG9nIGlucHV0L291dHB1dCBvZmZzZXRzIGFuZCBnYWlucy4gIFRoZSBwcm9wZXIgc2V0dGluZ3MgZm9yIHRoZXNlCitjYWxkYWNzIGFyZSBzdG9yZWQgb24gdGhlIGJvYXJkJ3MgZWVwcm9tLiAgVG8gcmVhZCB0aGUgY2FsZGFjIHZhbHVlcworZnJvbSB0aGUgZWVwcm9tIGFuZCBzdG9yZSB0aGVtIGludG8gYSBmaWxlIHRoYXQgY2FuIGJlIHRoZW4gYmUgdXNlZCBieQorY29tZWRpbGliLCB1c2UgdGhlIGNvbWVkaV9jYWxpYnJhdGUgcHJvZ3JhbS4KKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBub25lCisKK1RoZSBkYXFjYXJkLTEyMDAgaGFzIHF1aXJreSBjaGFubGlzdCByZXF1aXJlbWVudHMKK3doZW4gc2Nhbm5pbmcgbXVsdGlwbGUgY2hhbm5lbHMuICBNdWx0aXBsZSBjaGFubmVsIHNjYW4KK3NlcXVlbmNlIG11c3Qgc3RhcnQgYXQgaGlnaGVzdCBjaGFubmVsLCB0aGVuIGRlY3JlbWVudCBkb3duIHRvCitjaGFubmVsIDAuICBDaGFubGlzdHMgY29uc2lzdGluZyBvZiBhbGwgb25lIGNoYW5uZWwKK2FyZSBhbHNvIGxlZ2FsLCBhbmQgYWxsb3cgeW91IHRvIHBhY2UgY29udmVyc2lvbnMgaW4gYnVyc3RzLgorCisqLworCisvKgorCitOSSBtYW51YWxzOgorMzQwOTg4YSAoZGFxY2FyZC0xMjAwKQorCisqLworCisjdW5kZWYgTEFCUENfREVCVUcKKy8vI2RlZmluZSBMQUJQQ19ERUJVRyAgIC8vIGVuYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMKKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgIjgyNTMuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisjaW5jbHVkZSAibmlfbGFicGMuaCIKKworI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgorI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzcmVnLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhX2N1cl9kZXYgPSBOVUxMOworCitzdGF0aWMgaW50IGxhYnBjX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CisKK3N0YXRpYyBjb25zdCBsYWJwY19ib2FyZCBsYWJwY19jc19ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgbmFtZToJImRhcWNhcmQtMTIwMCIsCisJICAgICAgZGV2aWNlX2lkOjB4MTAzLAkvLyAweDEwYiBpcyBtYW51ZmFjdHVyZXIgaWQsIDB4MTAzIGlzIGRldmljZSBpZAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYV9idXN0eXBlLAorCSAgICAgIHJlZ2lzdGVyX2xheW91dDpsYWJwY18xMjAwX2xheW91dCwKKwkgICAgICBoYXNfYW86CTEsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JnJhbmdlX2xhYnBjXzEyMDBfYWksCisJICAgICAgYWlfcmFuZ2VfY29kZTpsYWJwY18xMjAwX2FpX2dhaW5fYml0cywKKwkgICAgICBhaV9yYW5nZV9pc191bmlwb2xhcjpsYWJwY18xMjAwX2lzX3VuaXBvbGFyLAorCSAgICAgIGFpX3NjYW5fdXA6MCwKKwkgICAgICBtZW1vcnlfbWFwcGVkX2lvOjAsCisJCX0sCisJLyogZHVwbGljYXRlIGVudHJ5LCB0byBzdXBwb3J0IHVzaW5nIGFsdGVybmF0ZSBuYW1lICovCisJeworCSAgICAgIG5hbWU6CSJuaV9sYWJwY19jcyIsCisJICAgICAgZGV2aWNlX2lkOjB4MTAzLAorCSAgICAgIGFpX3NwZWVkOjEwMDAwLAorCSAgICAgIGJ1c3R5cGU6CXBjbWNpYV9idXN0eXBlLAorCSAgICAgIHJlZ2lzdGVyX2xheW91dDpsYWJwY18xMjAwX2xheW91dCwKKwkgICAgICBoYXNfYW86CTEsCisJICAgICAgYWlfcmFuZ2VfdGFibGU6JnJhbmdlX2xhYnBjXzEyMDBfYWksCisJICAgICAgYWlfcmFuZ2VfY29kZTpsYWJwY18xMjAwX2FpX2dhaW5fYml0cywKKwkgICAgICBhaV9yYW5nZV9pc191bmlwb2xhcjpsYWJwY18xMjAwX2lzX3VuaXBvbGFyLAorCSAgICAgIGFpX3NjYW5fdXA6MCwKKwkgICAgICBtZW1vcnlfbWFwcGVkX2lvOjAsCisJCX0sCit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IGxhYnBjX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfbGFicGNfY3MgPSB7CisJLmRyaXZlcl9uYW1lID0gIm5pX2xhYnBjX2NzIiwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLmF0dGFjaCA9ICZsYWJwY19hdHRhY2gsCisJLmRldGFjaCA9ICZsYWJwY19jb21tb25fZGV0YWNoLAorCS5udW1fbmFtZXMgPSBzaXplb2YobGFicGNfY3NfYm9hcmRzKSAvIHNpemVvZihsYWJwY19ib2FyZCksCisJLmJvYXJkX25hbWUgPSAmbGFicGNfY3NfYm9hcmRzWzBdLm5hbWUsCisJLm9mZnNldCA9IHNpemVvZihsYWJwY19ib2FyZCksCit9OworCitzdGF0aWMgaW50IGxhYnBjX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IDA7CisJdW5zaWduZWQgaW50IGlycSA9IDA7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkZXYtPnByaXZhdGUgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihsYWJwY19wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8vIGdldCBiYXNlIGFkZHJlc3MsIGlycSBldGMuIGJhc2VkIG9uIGJ1c3R5cGUKKwlzd2l0Y2ggKHRoaXNib2FyZC0+YnVzdHlwZSkgeworCWNhc2UgcGNtY2lhX2J1c3R5cGU6CisJCWxpbmsgPSBwY21jaWFfY3VyX2RldjsJLyogWFhYIGhhY2sgKi8KKwkJaWYgKCFsaW5rKQorCQkJcmV0dXJuIC1FSU87CisJCWlvYmFzZSA9IGxpbmstPmlvLkJhc2VQb3J0MTsKKwkJaXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoImJ1ZyEgY291bGRuJ3QgZGV0ZXJtaW5lIGJvYXJkIHR5cGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBsYWJwY19jb21tb25fYXR0YWNoKGRldiwgaW9iYXNlLCBpcnEsIDApOworfQorCisvKgorICAgQWxsIHRoZSBQQ01DSUEgbW9kdWxlcyB1c2UgUENNQ0lBX0RFQlVHIHRvIGNvbnRyb2wgZGVidWdnaW5nLiAgSWYKKyAgIHlvdSBkbyBub3QgZGVmaW5lIFBDTUNJQV9ERUJVRyBhdCBhbGwsIGFsbCB0aGUgZGVidWcgY29kZSB3aWxsIGJlCisgICBsZWZ0IG91dC4gIElmIHlvdSBjb21waWxlIHdpdGggUENNQ0lBX0RFQlVHPTAsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwKKyAgIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIC0tIGJ1dCBpdCBjYW4gdGhlbiBiZSBlbmFibGVkIGZvciBzcGVjaWZpYworICAgbW9kdWxlcyBhdCBsb2FkIHRpbWUgd2l0aCBhICdwY19kZWJ1Zz0jJyBvcHRpb24gdG8gaW5zbW9kLgorKi8KKyNpZmRlZiBQQ01DSUFfREVCVUcKK3N0YXRpYyBpbnQgcGNfZGVidWcgPSBQQ01DSUFfREVCVUc7Cittb2R1bGVfcGFyYW0ocGNfZGVidWcsIGludCwgMDY0NCk7CisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpCitzdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9CisJIm5pX2xhYnBjLmMsIGJhc2VkIG9uIGR1bW15X2NzLmMgMS4zMSAyMDAxLzA4LzI0IDEyOjEzOjEzIjsKKyNlbHNlCisjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCisjZW5kaWYKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qCisgICBUaGUgZXZlbnQoKSBmdW5jdGlvbiBpcyB0aGlzIGRyaXZlcidzIENhcmQgU2VydmljZXMgZXZlbnQgaGFuZGxlci4KKyAgIEl0IHdpbGwgYmUgY2FsbGVkIGJ5IENhcmQgU2VydmljZXMgd2hlbiBhbiBhcHByb3ByaWF0ZSBjYXJkIHN0YXR1cworICAgZXZlbnQgaXMgcmVjZWl2ZWQuICBUaGUgY29uZmlnKCkgYW5kIHJlbGVhc2UoKSBlbnRyeSBwb2ludHMgYXJlCisgICB1c2VkIHRvIGNvbmZpZ3VyZSBvciByZWxlYXNlIGEgc29ja2V0LCBpbiByZXNwb25zZSB0byBjYXJkCisgICBpbnNlcnRpb24gYW5kIGVqZWN0aW9uIGV2ZW50cy4gIFRoZXkgYXJlIGludm9rZWQgZnJvbSB0aGUgZHVtbXkKKyAgIGV2ZW50IGhhbmRsZXIuCisKKyAgIEtlcm5lbCB2ZXJzaW9uIDIuNi4xNiB1cHdhcmRzIHVzZXMgc3VzcGVuZCgpIGFuZCByZXN1bWUoKSBmdW5jdGlvbnMKKyAgIGluc3RlYWQgb2YgYW4gZXZlbnQoKSBmdW5jdGlvbi4KKyovCisKK3N0YXRpYyB2b2lkIGxhYnBjX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBsYWJwY19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyBpbnQgbGFicGNfY3Nfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOworc3RhdGljIGludCBsYWJwY19jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworLyoKKyAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQorICAgImluc3RhbmNlcyIgb2YgdGhlIGRyaXZlciwgd2hlcmUgZWFjaCBpbnN0YW5jZSByZXByZXNlbnRzIGV2ZXJ5dGhpbmcKKyAgIG5lZWRlZCB0byBtYW5hZ2Ugb25lIGFjdHVhbCBQQ01DSUEgY2FyZC4KKyovCisKK3N0YXRpYyBpbnQgbGFicGNfY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworc3RhdGljIHZvaWQgbGFicGNfY3NfZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICopOworCisvKgorICAgWW91J2xsIGFsc28gbmVlZCB0byBwcm90b3R5cGUgYWxsIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGFjdHVhbGx5CisgICBiZSB1c2VkIHRvIHRhbGsgdG8geW91ciBkZXZpY2UuICBTZWUgJ21lbW9yeV9jcycgZm9yIGEgZ29vZCBleGFtcGxlCisgICBvZiBhIGZ1bGx5IHNlbGYtc3VmZmljaWVudCBkcml2ZXI7IHRoZSBvdGhlciBkcml2ZXJzIHJlbHkgbW9yZSBvcgorICAgbGVzcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLgorKi8KKworLyoKKyAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKKyAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCisgICBkYXRhYmFzZS4KKyovCisKK3N0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gImRhcWNhcmQtMTIwMCI7CisKK3R5cGVkZWYgc3RydWN0IGxvY2FsX2luZm9fdCB7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJZGV2X25vZGVfdCBub2RlOworCWludCBzdG9wOworCXN0cnVjdCBidXNfb3BlcmF0aW9ucyAqYnVzOworfSBsb2NhbF9pbmZvX3Q7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgbGFicGNfY3NfYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKKyAgICBsb2NhbCBkYXRhIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQKKyAgICB3aXRoIENhcmQgU2VydmljZXMuCisKKyAgICBUaGUgZGV2X2xpbmsgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkKKyAgICBjb25maWd1cmUgdGhlIGNhcmQgYXQgdGhpcyBwb2ludCAtLSB3ZSB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYQorICAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBsYWJwY19jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJbG9jYWxfaW5mb190ICpsb2NhbDsKKworCURFQlVHKDAsICJsYWJwY19jc19hdHRhY2goKVxuIik7CisKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgcHJpdmF0ZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSAqLworCWxvY2FsID0ga3phbGxvYyhzaXplb2YobG9jYWxfaW5mb190KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsb2NhbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbG9jYWwtPmxpbmsgPSBsaW5rOworCWxpbmstPnByaXYgPSBsb2NhbDsKKworCS8qIEludGVycnVwdCBzZXR1cCAqLworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0ZPUkNFRF9QVUxTRTsKKwlsaW5rLT5pcnEuSVJRSW5mbzEgPSBJUlFfSU5GTzJfVkFMSUQgfCBJUlFfUFVMU0VfSUQ7CisJbGluay0+aXJxLkhhbmRsZXIgPSBOVUxMOworCisJLyoKKwkgICBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcworCSAgIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvciBhbG1vc3QKKwkgICBldmVyeXRoaW5nLiAgSW4gbW9zdCBjbGllbnRzLCBtYW55IGRldGFpbHMgKGkuZS4sIG51bWJlciwgc2l6ZXMsCisJICAgYW5kIGF0dHJpYnV0ZXMgb2YgSU8gd2luZG93cykgYXJlIGZpeGVkIGJ5IHRoZSBuYXR1cmUgb2YgdGhlCisJICAgZGV2aWNlLCBhbmQgY2FuIGJlIGhhcmQtd2lyZWQgaGVyZS4KKwkgKi8KKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOworCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCisJcGNtY2lhX2N1cl9kZXYgPSBsaW5rOworCisJbGFicGNfY29uZmlnKGxpbmspOworCisJcmV0dXJuIDA7Cit9CQkJCS8qIGxhYnBjX2NzX2F0dGFjaCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFRoaXMgZGVsZXRlcyBhIGRyaXZlciAiaW5zdGFuY2UiLiAgVGhlIGRldmljZSBpcyBkZS1yZWdpc3RlcmVkCisgICAgd2l0aCBDYXJkIFNlcnZpY2VzLiAgSWYgaXQgaGFzIGJlZW4gcmVsZWFzZWQsIGFsbCBsb2NhbCBkYXRhCisgICAgc3RydWN0dXJlcyBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQKKyAgICB3aGVuIHRoZSBkZXZpY2UgaXMgcmVsZWFzZWQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgdm9pZCBsYWJwY19jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJREVCVUcoMCwgImxhYnBjX2NzX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisKKwkvKgorCSAgIElmIHRoZSBkZXZpY2UgaXMgY3VycmVudGx5IGNvbmZpZ3VyZWQgYW5kIGFjdGl2ZSwgd2Ugd29uJ3QKKwkgICBhY3R1YWxseSBkZWxldGUgaXQgeWV0LiAgSW5zdGVhZCwgaXQgaXMgbWFya2VkIHNvIHRoYXQgd2hlbgorCSAgIHRoZSByZWxlYXNlKCkgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGF0IHdpbGwgdHJpZ2dlciBhIHByb3BlcgorCSAgIGRldGFjaCgpLgorCSAqLworCWlmIChsaW5rLT5kZXZfbm9kZSkgeworCQkoKGxvY2FsX2luZm9fdCAqKSBsaW5rLT5wcml2KS0+c3RvcCA9IDE7CisJCWxhYnBjX3JlbGVhc2UobGluayk7CisJfQorCisJLyogVGhpcyBwb2ludHMgdG8gdGhlIHBhcmVudCBsb2NhbF9pbmZvX3Qgc3RydWN0ICovCisJaWYgKGxpbmstPnByaXYpCisJCWtmcmVlKGxpbmstPnByaXYpOworCit9CQkJCS8qIGxhYnBjX2NzX2RldGFjaCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGxhYnBjX2NvbmZpZygpIGlzIHNjaGVkdWxlZCB0byBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudAorICAgIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQorICAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyB2b2lkIGxhYnBjX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlsb2NhbF9pbmZvX3QgKmRldiA9IGxpbmstPnByaXY7CisJdHVwbGVfdCB0dXBsZTsKKwljaXNwYXJzZV90IHBhcnNlOworCWludCBsYXN0X3JldDsKKwl1X2NoYXIgYnVmWzY0XTsKKwl3aW5fcmVxX3QgcmVxOworCW1lbXJlcV90IG1hcDsKKwljaXN0cGxfY2Z0YWJsZV9lbnRyeV90IGRmbHQgPSB7IDAgfTsKKworCURFQlVHKDAsICJsYWJwY19jb25maWcoMHglcClcbiIsIGxpbmspOworCisJLyoKKwkgICBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24KKwkgICByZWdpc3RlcnMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NPTkZJRzsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwl0dXBsZS5UdXBsZURhdGEgPSBidWY7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSkpIHsKKwkJY3NfZXJyb3IobGluaywgR2V0VHVwbGVEYXRhLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkpIHsKKwkJY3NfZXJyb3IobGluaywgUGFyc2VUdXBsZSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJbGluay0+Y29uZi5Db25maWdCYXNlID0gcGFyc2UuY29uZmlnLmJhc2U7CisJbGluay0+Y29uZi5QcmVzZW50ID0gcGFyc2UuY29uZmlnLnJtYXNrWzBdOworCisJLyoKKwkgICBJbiB0aGlzIGxvb3AsIHdlIHNjYW4gdGhlIENJUyBmb3IgY29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzLAorCSAgIGVhY2ggb2Ygd2hpY2ggZGVzY3JpYmVzIGEgdmFsaWQgY2FyZCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcKKwkgICB2b2x0YWdlLCBJTyB3aW5kb3csIG1lbW9yeSB3aW5kb3csIGFuZCBpbnRlcnJ1cHQgc2V0dGluZ3MuCisKKwkgICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZSBjYXJkIHRvIGJlIGNvbmZpZ3VyZWQ6IHdlIHVzZQorCSAgIGp1c3QgdGhlIGluZm9ybWF0aW9uIGF2YWlsYWJsZSBpbiB0aGUgQ0lTLiAgSW4gYW4gaWRlYWwgd29ybGQsCisJICAgdGhpcyB3b3VsZCB3b3JrIGZvciBhbnkgUENNQ0lBIGNhcmQsIGJ1dCBpdCByZXF1aXJlcyBhIGNvbXBsZXRlCisJICAgYW5kIGFjY3VyYXRlIENJUy4gIEluIHByYWN0aWNlLCBhIGRyaXZlciB1c3VhbGx5ICJrbm93cyIgbW9zdCBvZgorCSAgIHRoZXNlIHRoaW5ncyB3aXRob3V0IGNvbnN1bHRpbmcgdGhlIENJUywgYW5kIG1vc3QgY2xpZW50IGRyaXZlcnMKKwkgICB3aWxsIG9ubHkgdXNlIHRoZSBDSVMgdG8gZmlsbCBpbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIGRldGFpbHMuCisJICovCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX0NGVEFCTEVfRU5UUlk7CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKSkpIHsKKwkJY3NfZXJyb3IobGluaywgR2V0Rmlyc3RUdXBsZSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJd2hpbGUgKDEpIHsKKwkJY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnID0gJihwYXJzZS5jZnRhYmxlX2VudHJ5KTsKKwkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlpZiAocGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKSkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQlpZiAoY2ZnLT5mbGFncyAmIENJU1RQTF9DRlRBQkxFX0RFRkFVTFQpCisJCQlkZmx0ID0gKmNmZzsKKwkJaWYgKGNmZy0+aW5kZXggPT0gMCkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKwkJbGluay0+Y29uZi5Db25maWdJbmRleCA9IGNmZy0+aW5kZXg7CisKKwkJLyogRG9lcyB0aGlzIGNhcmQgbmVlZCBhdWRpbyBvdXRwdXQ/ICovCisJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfQVVESU8pIHsKKwkJCWxpbmstPmNvbmYuQXR0cmlidXRlcyB8PSBDT05GX0VOQUJMRV9TUEtSOworCQkJbGluay0+Y29uZi5TdGF0dXMgPSBDQ1NSX0FVRElPX0VOQTsKKwkJfQorCisJCS8qIERvIHdlIG5lZWQgdG8gYWxsb2NhdGUgYW4gaW50ZXJydXB0PyAqLworCQlpZiAoY2ZnLT5pcnEuSVJRSW5mbzEgfHwgZGZsdC5pcnEuSVJRSW5mbzEpCisJCQlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgfD0gQ09ORl9FTkFCTEVfSVJROworCisJCS8qIElPIHdpbmRvdyBzZXR0aW5ncyAqLworCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBsaW5rLT5pby5OdW1Qb3J0czIgPSAwOworCQlpZiAoKGNmZy0+aW8ubndpbiA+IDApIHx8IChkZmx0LmlvLm53aW4gPiAwKSkgeworCQkJY2lzdHBsX2lvX3QgKmlvID0gKGNmZy0+aW8ubndpbikgPyAmY2ZnLT5pbyA6ICZkZmx0LmlvOworCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfODsKKwkJCWxpbmstPmlvLklPQWRkckxpbmVzID0gaW8tPmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJCQlsaW5rLT5pby5CYXNlUG9ydDEgPSBpby0+d2luWzBdLmJhc2U7CisJCQlsaW5rLT5pby5OdW1Qb3J0czEgPSBpby0+d2luWzBdLmxlbjsKKwkJCWlmIChpby0+bndpbiA+IDEpIHsKKwkJCQlsaW5rLT5pby5BdHRyaWJ1dGVzMiA9IGxpbmstPmlvLkF0dHJpYnV0ZXMxOworCQkJCWxpbmstPmlvLkJhc2VQb3J0MiA9IGlvLT53aW5bMV0uYmFzZTsKKwkJCQlsaW5rLT5pby5OdW1Qb3J0czIgPSBpby0+d2luWzFdLmxlbjsKKwkJCX0KKwkJCS8qIFRoaXMgcmVzZXJ2ZXMgSU8gc3BhY2UgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZW5hYmxlIGl0ICovCisJCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCX0KKworCQlpZiAoKGNmZy0+bWVtLm53aW4gPiAwKSB8fCAoZGZsdC5tZW0ubndpbiA+IDApKSB7CisJCQljaXN0cGxfbWVtX3QgKm1lbSA9CisJCQkJKGNmZy0+bWVtLm53aW4pID8gJmNmZy0+bWVtIDogJmRmbHQubWVtOworCQkJcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9DTTsKKwkJCXJlcS5BdHRyaWJ1dGVzIHw9IFdJTl9FTkFCTEU7CisJCQlyZXEuQmFzZSA9IG1lbS0+d2luWzBdLmhvc3RfYWRkcjsKKwkJCXJlcS5TaXplID0gbWVtLT53aW5bMF0ubGVuOworCQkJaWYgKHJlcS5TaXplIDwgMHgxMDAwKQorCQkJCXJlcS5TaXplID0gMHgxMDAwOworCQkJcmVxLkFjY2Vzc1NwZWVkID0gMDsKKwkJCWxpbmstPndpbiA9ICh3aW5kb3dfaGFuZGxlX3QpIGxpbms7CisJCQlpZiAocGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSkKKwkJCQlnb3RvIG5leHRfZW50cnk7CisJCQltYXAuUGFnZSA9IDA7CisJCQltYXAuQ2FyZE9mZnNldCA9IG1lbS0+d2luWzBdLmNhcmRfYWRkcjsKKwkJCWlmIChwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1hcCkpCisJCQkJZ290byBuZXh0X2VudHJ5OworCQl9CisJCS8qIElmIHdlIGdvdCB0aGlzIGZhciwgd2UncmUgY29vbCEgKi8KKwkJYnJlYWs7CisKKwkgICAgICBuZXh0X2VudHJ5OgorCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9uZXh0X3R1cGxlKGxpbmssICZ0dXBsZSkpKSB7CisJCQljc19lcnJvcihsaW5rLCBHZXROZXh0VHVwbGUsIGxhc3RfcmV0KTsKKwkJCWdvdG8gY3NfZmFpbGVkOworCQl9CisJfQorCisJLyoKKwkgICBBbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFzc2lnbiBhCisJICAgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LCB1bmxlc3MgdGhlICdIYW5kbGVyJyBtZW1iZXIgb2YgdGhlCisJICAgaXJxIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZC4KKwkgKi8KKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCQlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfaXJxKGxpbmssICZsaW5rLT5pcnEpKSkgeworCQkJY3NfZXJyb3IobGluaywgUmVxdWVzdElSUSwgbGFzdF9yZXQpOworCQkJZ290byBjc19mYWlsZWQ7CisJCX0KKworCS8qCisJICAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKKwkgICB0aGUgSS9PIHdpbmRvd3MgYW5kIHRoZSBpbnRlcnJ1cHQgbWFwcGluZywgYW5kIHB1dHRpbmcgdGhlCisJICAgY2FyZCBhbmQgaG9zdCBpbnRlcmZhY2UgaW50byAiTWVtb3J5IGFuZCBJTyIgbW9kZS4KKwkgKi8KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpKSB7CisJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RDb25maWd1cmF0aW9uLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKworCS8qCisJICAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKKwkgICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXYuCisJICovCisJc3ByaW50ZihkZXYtPm5vZGUuZGV2X25hbWUsICJkYXFjYXJkLTEyMDAiKTsKKwlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOworCWxpbmstPmRldl9ub2RlID0gJmRldi0+bm9kZTsKKworCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KKwlwcmludGsoS0VSTl9JTkZPICIlczogaW5kZXggMHglMDJ4IiwKKwkJZGV2LT5ub2RlLmRldl9uYW1lLCBsaW5rLT5jb25mLkNvbmZpZ0luZGV4KTsKKwlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQorCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMxKQorCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MSArIGxpbmstPmlvLk51bVBvcnRzMSAtIDEpOworCWlmIChsaW5rLT5pby5OdW1Qb3J0czIpCisJCXByaW50aygiICYgMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MiwKKwkJCWxpbmstPmlvLkJhc2VQb3J0MiArIGxpbmstPmlvLk51bVBvcnRzMiAtIDEpOworCWlmIChsaW5rLT53aW4pCisJCXByaW50aygiLCBtZW0gMHglMDZseC0weCUwNmx4IiwgcmVxLkJhc2UsCisJCQlyZXEuQmFzZSArIHJlcS5TaXplIC0gMSk7CisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuOworCisgICAgICBjc19mYWlsZWQ6CisJbGFicGNfcmVsZWFzZShsaW5rKTsKKworfQkJCQkvKiBsYWJwY19jb25maWcgKi8KKworc3RhdGljIHZvaWQgbGFicGNfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlERUJVRygwLCAibGFicGNfcmVsZWFzZSgweCVwKVxuIiwgbGluayk7CisKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Cit9CQkJCS8qIGxhYnBjX3JlbGVhc2UgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBUaGUgY2FyZCBzdGF0dXMgZXZlbnQgaGFuZGxlci4gIE1vc3RseSwgdGhpcyBzY2hlZHVsZXMgb3RoZXIKKyAgICBzdHVmZiB0byBydW4gYWZ0ZXIgYW4gZXZlbnQgaXMgcmVjZWl2ZWQuCisKKyAgICBXaGVuIGEgQ0FSRF9SRU1PVkFMIGV2ZW50IGlzIHJlY2VpdmVkLCB3ZSBpbW1lZGlhdGVseSBzZXQgYQorICAgIHByaXZhdGUgZmxhZyB0byBibG9jayBmdXR1cmUgYWNjZXNzZXMgdG8gdGhpcyBkZXZpY2UuICBBbGwgdGhlCisgICAgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgYWNjZXNzIHRoZSBkZXZpY2Ugc2hvdWxkIGNoZWNrIHRoaXMgZmxhZworICAgIHRvIG1ha2Ugc3VyZSB0aGUgY2FyZCBpcyBzdGlsbCBwcmVzZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBsYWJwY19jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJLyogTWFyayB0aGUgZGV2aWNlIGFzIHN0b3BwZWQsIHRvIGJsb2NrIElPIHVudGlsIGxhdGVyICovCisJbG9jYWwtPnN0b3AgPSAxOworCXJldHVybiAwOworfQkJCQkvKiBsYWJwY19jc19zdXNwZW5kICovCisKK3N0YXRpYyBpbnQgbGFicGNfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJbG9jYWwtPnN0b3AgPSAwOworCXJldHVybiAwOworfQkJCQkvKiBsYWJwY19jc19yZXN1bWUgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBsYWJwY19jc19pZHNbXSA9IHsKKwkvKiBOLkIuIFRoZXNlIElEcyBzaG91bGQgbWF0Y2ggdGhvc2UgaW4gbGFicGNfY3NfYm9hcmRzIChuaV9sYWJwYy5jKSAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwYiwgMHgwMTAzKSwJLyogZGFxY2FyZC0xMjAwICovCisJUENNQ0lBX0RFVklDRV9OVUxMCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgbGFicGNfY3NfaWRzKTsKKworc3RydWN0IHBjbWNpYV9kcml2ZXIgbGFicGNfY3NfZHJpdmVyID0geworCS5wcm9iZSA9IGxhYnBjX2NzX2F0dGFjaCwKKwkucmVtb3ZlID0gbGFicGNfY3NfZGV0YWNoLAorCS5zdXNwZW5kID0gbGFicGNfY3Nfc3VzcGVuZCwKKwkucmVzdW1lID0gbGFicGNfY3NfcmVzdW1lLAorCS5pZF90YWJsZSA9IGxhYnBjX2NzX2lkcywKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZHJ2ID0geworCQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfbGFicGNfY3Modm9pZCkKK3sKKwlERUJVRygwLCAiJXNcbiIsIHZlcnNpb24pOworCXBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJmxhYnBjX2NzX2RyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2xhYnBjX2NzKHZvaWQpCit7CisJREVCVUcoMCwgIm5pX2xhYnBjOiB1bmxvYWRpbmdcbiIpOworCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmbGFicGNfY3NfZHJpdmVyKTsKK30KKworaW50IF9faW5pdCBsYWJwY19pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpbml0X2xhYnBjX2NzKCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX2xhYnBjX2NzKTsKK30KKwordm9pZCBfX2V4aXQgbGFicGNfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlleGl0X2xhYnBjX2NzKCk7CisJY29tZWRpX2RyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXJfbGFicGNfY3MpOworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfaW5pdChsYWJwY19pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChsYWJwY19leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDJiZDBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwpAQCAtMCwwICsxLDU4NjIgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBEQVEtU1RDIGJhc2VkIGJvYXJkcworCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5Ny0yMDAxIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA2IEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisvKgorCVRoaXMgZmlsZSBpcyBtZWFudCB0byBiZSBpbmNsdWRlZCBieSBhbm90aGVyIGZpbGUsIGUuZy4sCisJbmlfYXRtaW8uYyBvciBuaV9wY2ltaW8uYy4KKworCUludGVycnVwdCBzdXBwb3J0IG9yaWdpbmFsbHkgYWRkZWQgYnkgVHJ1eHRvbiBGdWx0b24KKwk8dHJ1eEB0cnV4dG9uLmNvbT4KKworCVJlZmVyZW5jZXMgKGZyb20gZnRwOi8vZnRwLm5hdGluc3QuY29tL3N1cHBvcnQvbWFudWFscyk6CisKKwkgICAzNDA3NDdiLnBkZiAgQVQtTUlPIEUgc2VyaWVzIFJlZ2lzdGVyIExldmVsIFByb2dyYW1tZXIgTWFudWFsCisJICAgMzQxMDc5Yi5wZGYgIFBDSSBFIFNlcmllcyBSTFBNCisJICAgMzQwOTM0Yi5wZGYgIERBUS1TVEMgcmVmZXJlbmNlIG1hbnVhbAorCTY3eHggYW5kIDYxMXggcmVnaXN0ZXJzIChmcm9tIGh0dHA6Ly93d3cubmkuY29tL3BkZi9kYXEvdXMpCisJcmVsZWFzZV9uaTYxMXgucGRmCisJcmVsZWFzZV9uaTY3eHgucGRmCisJT3RoZXIgcG9zc2libHkgcmVsZXZhbnQgaW5mbzoKKworCSAgIDMyMDUxN2MucGRmICBVc2VyIG1hbnVhbCAob2Jzb2xldGUpCisJICAgMzIwNTE3Zi5wZGYgIFVzZXIgbWFudWFsIChuZXcpCisJICAgMzIwODg5YS5wZGYgIGRlbGV0ZQorCSAgIDMyMDkwNmMucGRmICBtYXhpbXVtIHNpZ25hbCByYXRpbmdzCisJICAgMzIxMDY2YS5wZGYgIGFib3V0IDE2eAorCSAgIDMyMTc5MWEucGRmICBkaXNjb250aW51YXRpb24gb2YgYXQtbWlvLTE2ZS0xMCByZXYuIGMKKwkgICAzMjE4MDhhLnBkZiAgYWJvdXQgYXQtbWlvLTE2ZS0xMCByZXYgUAorCSAgIDMyMTgzN2EucGRmICBkaXNjb250aW51YXRpb24gb2YgYXQtbWlvLTE2ZGUtMTAgcmV2IGQKKwkgICAzMjE4MzhhLnBkZiAgYWJvdXQgYXQtbWlvLTE2ZGUtMTAgcmV2IE4KKworCUlTU1VFUzoKKworCSAtIHRoZSBpbnRlcnJ1cHQgcm91dGluZSBuZWVkcyB0byBiZSBjbGVhbmVkIHVwCisKKwkyMDA2LTAyLTA3OiBTLVNlcmllcyBQQ0ktNjE0MzogU3VwcG9ydCBoYXMgYmVlbiBhZGRlZCBidXQgaXMgbm90CisJCWZ1bGx5IHRlc3RlZCBhcyB5ZXQuIFRlcnJ5IEJhcm5hYnksIEJFQU0gTHRkLgorKi8KKworLy8jZGVmaW5lIERFQlVHX0lOVEVSUlVQVAorLy8jZGVmaW5lIERFQlVHX1NUQVRVU19BCisvLyNkZWZpbmUgREVCVUdfU1RBVFVTX0IKKworI2luY2x1ZGUgIjgyNTUuaCIKKyNpbmNsdWRlICJtaXRlLmgiCisjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCisKKyNpZm5kZWYgTURQUklOVEsKKyNkZWZpbmUgTURQUklOVEsoZm9ybWF0LGFyZ3MuLi4pCisjZW5kaWYKKworLyogQSB0aW1lb3V0IGNvdW50ICovCisjZGVmaW5lIE5JX1RJTUVPVVQgMTAwMAorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG9sZF9SVFNJX2Nsb2NrX2NoYW5uZWwgPSA3OworCisvKiBOb3RlOiB0aGlzIHRhYmxlIG11c3QgbWF0Y2ggdGhlIGFpX2dhaW5fKiBkZWZpbml0aW9ucyAqLworc3RhdGljIGNvbnN0IHNob3J0IG5pX2dhaW5sa3VwW11bMTZdID0geworCVthaV9nYWluXzE2XSA9IHswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LAorCQkweDEwMCwgMHgxMDEsIDB4MTAyLCAweDEwMywgMHgxMDQsIDB4MTA1LCAweDEwNiwgMHgxMDd9LAorCVthaV9nYWluXzhdID0gezEsIDIsIDQsIDcsIDB4MTAxLCAweDEwMiwgMHgxMDQsIDB4MTA3fSwKKwlbYWlfZ2Fpbl8xNF0gPSB7MSwgMiwgMywgNCwgNSwgNiwgNywKKwkJMHgxMDEsIDB4MTAyLCAweDEwMywgMHgxMDQsIDB4MTA1LCAweDEwNiwgMHgxMDd9LAorCVthaV9nYWluXzRdID0gezAsIDEsIDQsIDd9LAorCVthaV9nYWluXzYxMXhdID0gezB4MDBhLCAweDAwYiwgMHgwMDEsIDB4MDAyLAorCQkweDAwMywgMHgwMDQsIDB4MDA1LCAweDAwNn0sCisJW2FpX2dhaW5fNjIyeF0gPSB7MCwgMSwgNCwgNX0sCisJW2FpX2dhaW5fNjI4eF0gPSB7MSwgMiwgMywgNCwgNSwgNiwgN30sCisJW2FpX2dhaW5fNjE0M10gPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfRV9haSA9IHsgMTYsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIuNSwgMi41KSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjUsIDAuNSksCisJCQlSQU5HRSgtMC4yNSwgMC4yNSksCisJCQlSQU5HRSgtMC4xLCAwLjEpLAorCQkJUkFOR0UoLTAuMDUsIDAuMDUpLAorCQkJUkFOR0UoMCwgMjApLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0UoMCwgNSksCisJCQlSQU5HRSgwLCAyKSwKKwkJCVJBTkdFKDAsIDEpLAorCQkJUkFOR0UoMCwgMC41KSwKKwkJCVJBTkdFKDAsIDAuMiksCisJCQlSQU5HRSgwLCAwLjEpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfRV9haV9saW1pdGVkID0geyA4LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjEsIDAuMSksCisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgwLCA1KSwKKwkJCVJBTkdFKDAsIDEpLAorCQkJUkFOR0UoMCwgMC4xKSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX25pX0VfYWlfbGltaXRlZDE0ID0geyAxNCwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJCQlSQU5HRSgtNSwgNSksCisJCQlSQU5HRSgtMiwgMiksCisJCQlSQU5HRSgtMSwgMSksCisJCQlSQU5HRSgtMC41LCAwLjUpLAorCQkJUkFOR0UoLTAuMiwgMC4yKSwKKwkJCVJBTkdFKC0wLjEsIDAuMSksCisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgwLCA1KSwKKwkJCVJBTkdFKDAsIDIpLAorCQkJUkFOR0UoMCwgMSksCisJCQlSQU5HRSgwLCAwLjUpLAorCQkJUkFOR0UoMCwgMC4yKSwKKwkJCVJBTkdFKDAsIDAuMSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9uaV9FX2FpX2JpcG9sYXI0ID0geyA0LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0wLjUsIDAuNSksCisJCQlSQU5HRSgtMC4wNSwgMC4wNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9uaV9FX2FpXzYxMXggPSB7IDgsIHsKKwkJCVJBTkdFKC01MCwgNTApLAorCQkJUkFOR0UoLTIwLCAyMCksCisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0yLCAyKSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjUsIDAuNSksCisJCQlSQU5HRSgtMC4yLCAwLjIpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfTV9haV82MjJ4ID0geyA0LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC0wLjIsIDAuMiksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9uaV9NX2FpXzYyOHggPSB7IDcsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoLTUsIDUpLAorCQkJUkFOR0UoLTIsIDIpLAorCQkJUkFOR0UoLTEsIDEpLAorCQkJUkFOR0UoLTAuNSwgMC41KSwKKwkJCVJBTkdFKC0wLjIsIDAuMiksCisJCQlSQU5HRSgtMC4xLCAwLjEpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfU19haV82MTQzID0geyAxLCB7CisJCQlSQU5HRSgtNSwgKzUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfRV9hb19leHQgPSB7IDQsIHsKKwkJCVJBTkdFKC0xMCwgMTApLAorCQkJUkFOR0UoMCwgMTApLAorCQkJUkFOR0VfZXh0KC0xLCAxKSwKKwkJCVJBTkdFX2V4dCgwLCAxKSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0IG5pX3JhbmdlX2xrdXBbXSA9IHsKKwlbYWlfZ2Fpbl8xNl0gPSAmcmFuZ2VfbmlfRV9haSwKKwlbYWlfZ2Fpbl84XSA9ICZyYW5nZV9uaV9FX2FpX2xpbWl0ZWQsCisJW2FpX2dhaW5fMTRdID0gJnJhbmdlX25pX0VfYWlfbGltaXRlZDE0LAorCVthaV9nYWluXzRdID0gJnJhbmdlX25pX0VfYWlfYmlwb2xhcjQsCisJW2FpX2dhaW5fNjExeF0gPSAmcmFuZ2VfbmlfRV9haV82MTF4LAorCVthaV9nYWluXzYyMnhdID0gJnJhbmdlX25pX01fYWlfNjIyeCwKKwlbYWlfZ2Fpbl82Mjh4XSA9ICZyYW5nZV9uaV9NX2FpXzYyOHgsCisJW2FpX2dhaW5fNjE0M10gPSAmcmFuZ2VfbmlfU19haV82MTQzCit9OworCitzdGF0aWMgaW50IG5pX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX2NkaW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgbmlfY2Rpb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IG5pX2NkaW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIHZvaWQgaGFuZGxlX2NkaW9faW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgbmlfY2RvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ251bSk7CisKK3N0YXRpYyBpbnQgbmlfc2VyaWFsX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX3NlcmlhbF9od19yZWFkd3JpdGU4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgY2hhciBkYXRhX291dCwgdW5zaWduZWQgY2hhciAqZGF0YV9pbik7CitzdGF0aWMgaW50IG5pX3NlcmlhbF9zd19yZWFkd3JpdGU4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgY2hhciBkYXRhX291dCwgdW5zaWduZWQgY2hhciAqZGF0YV9pbik7CisKK3N0YXRpYyBpbnQgbmlfY2FsaWJfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX2NhbGliX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBuaV9lZXByb21faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX21fc2VyaWVzX2VlcHJvbV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworc3RhdGljIGludCBuaV9wZmlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX3BmaV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIHVuc2lnbmVkIG5pX29sZF9nZXRfcGZpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4pOworCitzdGF0aWMgdm9pZCBuaV9ydHNpX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBuaV9ydHNpX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBuaV9ydHNpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyB2b2lkIGNhbGRhY19zZXR1cChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgbmlfcmVhZF9lZXByb20oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhZGRyKTsKKworI2lmZGVmIERFQlVHX1NUQVRVU19BCitzdGF0aWMgdm9pZCBuaV9taW9fcHJpbnRfc3RhdHVzX2EoaW50IHN0YXR1cyk7CisjZWxzZQorI2RlZmluZSBuaV9taW9fcHJpbnRfc3RhdHVzX2EoYSkKKyNlbmRpZgorI2lmZGVmIERFQlVHX1NUQVRVU19CCitzdGF0aWMgdm9pZCBuaV9taW9fcHJpbnRfc3RhdHVzX2IoaW50IHN0YXR1cyk7CisjZWxzZQorI2RlZmluZSBuaV9taW9fcHJpbnRfc3RhdHVzX2IoYSkKKyNlbmRpZgorCitzdGF0aWMgaW50IG5pX2FpX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworI2lmbmRlZiBQQ0lETUEKK3N0YXRpYyB2b2lkIG5pX2hhbmRsZV9maWZvX2hhbGZfZnVsbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IG5pX2FvX2ZpZm9faGFsZl9lbXB0eShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgbmlfaGFuZGxlX2ZpZm9fZHJlZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBuaV9haV9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pOworc3RhdGljIHZvaWQgbmlfbG9hZF9jaGFubmVsZ2Fpbl9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgbl9jaGFuLAorCXVuc2lnbmVkIGludCAqbGlzdCk7CitzdGF0aWMgdm9pZCBzaHV0ZG93bl9haV9jb21tYW5kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIGludCBuaV9hb19pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pOworCitzdGF0aWMgaW50IG5pX2FvX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworCitzdGF0aWMgaW50IG5pXzgyNTVfY2FsbGJhY2soaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLCB1bnNpZ25lZCBsb25nIGFyZyk7CisKK3N0YXRpYyBpbnQgbmlfZ3BjdF9pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX2dwY3RfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IG5pX2dwY3RfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfZ3BjdF9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgaW50IG5pX2dwY3RfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgbmlfZ3BjdF9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CitzdGF0aWMgdm9pZCBoYW5kbGVfZ3BjdF9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJdW5zaWduZWQgc2hvcnQgY291bnRlcl9pbmRleCk7CisKK3N0YXRpYyBpbnQgaW5pdF9jczU1Mjkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCBjczU1MjlfZG9fY29udmVyc2lvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgKmRhdGEpOworc3RhdGljIGludCBjczU1MjlfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisjaWZkZWYgTklfQ1M1NTI5X0RFQlVHCitzdGF0aWMgdW5zaWduZWQgaW50IGNzNTUyOV9jb25maWdfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgcmVnX3NlbGVjdF9iaXRzKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgY3M1NTI5X2NvbmZpZ193cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IHZhbHVlLAorCXVuc2lnbmVkIGludCByZWdfc2VsZWN0X2JpdHMpOworCitzdGF0aWMgaW50IG5pX21fc2VyaWVzX3B3bV9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgbmlfNjE0M19wd21fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgbmlfc2V0X21hc3Rlcl9jbG9jayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc291cmNlLAorCXVuc2lnbmVkIHBlcmlvZF9ucyk7CitzdGF0aWMgdm9pZCBhY2tfYV9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0IGFfc3RhdHVzKTsKK3N0YXRpYyB2b2lkIGFja19iX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgYl9zdGF0dXMpOworCitlbnVtIGFpbW9kZXMgeworCUFJTU9ERV9OT05FID0gMCwKKwlBSU1PREVfSEFMRl9GVUxMID0gMSwKKwlBSU1PREVfU0NBTiA9IDIsCisJQUlNT0RFX1NBTVBMRSA9IDMsCit9OworCitlbnVtIG5pX2NvbW1vbl9zdWJkZXZpY2VzIHsKKwlOSV9BSV9TVUJERVYsCisJTklfQU9fU1VCREVWLAorCU5JX0RJT19TVUJERVYsCisJTklfODI1NV9ESU9fU1VCREVWLAorCU5JX1VOVVNFRF9TVUJERVYsCisJTklfQ0FMSUJSQVRJT05fU1VCREVWLAorCU5JX0VFUFJPTV9TVUJERVYsCisJTklfUEZJX0RJT19TVUJERVYsCisJTklfQ1M1NTI5X0NBTElCUkFUSU9OX1NVQkRFViwKKwlOSV9TRVJJQUxfU1VCREVWLAorCU5JX1JUU0lfU1VCREVWLAorCU5JX0dQQ1QwX1NVQkRFViwKKwlOSV9HUENUMV9TVUJERVYsCisJTklfRlJFUV9PVVRfU1VCREVWLAorCU5JX05VTV9TVUJERVZJQ0VTCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBOSV9HUENUX1NVQkRFVih1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JX0dQQ1QwX1NVQkRFVjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklfR1BDVDFfU1VCREVWOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJQlVHKCk7CisJcmV0dXJuIE5JX0dQQ1QwX1NVQkRFVjsKK30KKworZW51bSB0aW1lYmFzZV9uYW5vc2Vjb25kcyB7CisJVElNRUJBU0VfMV9OUyA9IDUwLAorCVRJTUVCQVNFXzJfTlMgPSAxMDAwMAorfTsKKworI2RlZmluZSBTRVJJQUxfRElTQUJMRUQJCTAKKyNkZWZpbmUgU0VSSUFMXzYwME5TCQk2MDAKKyNkZWZpbmUgU0VSSUFMXzFfMlVTCQkxMjAwCisjZGVmaW5lIFNFUklBTF8xMFVTCQkJMTAwMDAKKworc3RhdGljIGNvbnN0IGludCBudW1fYWRjX3N0YWdlc182MTF4ID0gMzsKKworc3RhdGljIHZvaWQgaGFuZGxlX2FfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBzaG9ydCBzdGF0dXMsCisJdW5zaWduZWQgYWlfbWl0ZV9zdGF0dXMpOworc3RhdGljIHZvaWQgaGFuZGxlX2JfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBzaG9ydCBzdGF0dXMsCisJdW5zaWduZWQgYW9fbWl0ZV9zdGF0dXMpOworc3RhdGljIHZvaWQgZ2V0X2xhc3Rfc2FtcGxlXzYxMXgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHZvaWQgZ2V0X2xhc3Rfc2FtcGxlXzYxNDMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbmlfc2V0X2JpdGZpZWxkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgcmVnLAorCXVuc2lnbmVkIGJpdF9tYXNrLCB1bnNpZ25lZCBiaXRfdmFsdWVzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPnNvZnRfcmVnX2NvcHlfbG9jaywgZmxhZ3MpOworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXI6CisJCWRldnByaXYtPmludF9hX2VuYWJsZV9yZWcgJj0gfmJpdF9tYXNrOworCQlkZXZwcml2LT5pbnRfYV9lbmFibGVfcmVnIHw9IGJpdF92YWx1ZXMgJiBiaXRfbWFzazsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmludF9hX2VuYWJsZV9yZWcsCisJCQlJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIEludGVycnVwdF9CX0VuYWJsZV9SZWdpc3RlcjoKKwkJZGV2cHJpdi0+aW50X2JfZW5hYmxlX3JlZyAmPSB+Yml0X21hc2s7CisJCWRldnByaXYtPmludF9iX2VuYWJsZV9yZWcgfD0gYml0X3ZhbHVlcyAmIGJpdF9tYXNrOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+aW50X2JfZW5hYmxlX3JlZywKKwkJCUludGVycnVwdF9CX0VuYWJsZV9SZWdpc3Rlcik7CisJCWJyZWFrOworCWNhc2UgSU9fQmlkaXJlY3Rpb25fUGluX1JlZ2lzdGVyOgorCQlkZXZwcml2LT5pb19iaWRpcmVjdGlvbl9waW5fcmVnICY9IH5iaXRfbWFzazsKKwkJZGV2cHJpdi0+aW9fYmlkaXJlY3Rpb25fcGluX3JlZyB8PSBiaXRfdmFsdWVzICYgYml0X21hc2s7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5pb19iaWRpcmVjdGlvbl9waW5fcmVnLAorCQkJSU9fQmlkaXJlY3Rpb25fUGluX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJY2FzZSBBSV9BT19TZWxlY3Q6CisJCWRldnByaXYtPmFpX2FvX3NlbGVjdF9yZWcgJj0gfmJpdF9tYXNrOworCQlkZXZwcml2LT5haV9hb19zZWxlY3RfcmVnIHw9IGJpdF92YWx1ZXMgJiBiaXRfbWFzazsKKwkJbmlfd3JpdGViKGRldnByaXYtPmFpX2FvX3NlbGVjdF9yZWcsIEFJX0FPX1NlbGVjdCk7CisJCWJyZWFrOworCWNhc2UgRzBfRzFfU2VsZWN0OgorCQlkZXZwcml2LT5nMF9nMV9zZWxlY3RfcmVnICY9IH5iaXRfbWFzazsKKwkJZGV2cHJpdi0+ZzBfZzFfc2VsZWN0X3JlZyB8PSBiaXRfdmFsdWVzICYgYml0X21hc2s7CisJCW5pX3dyaXRlYihkZXZwcml2LT5nMF9nMV9zZWxlY3RfcmVnLCBHMF9HMV9TZWxlY3QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlydF9wcmludGsoIldhcm5pbmcgJXMoKSBjYWxsZWQgd2l0aCBpbnZhbGlkIHJlZ2lzdGVyXG4iLAorCQkJX19GVU5DVElPTl9fKTsKKwkJcnRfcHJpbnRrKCJyZWcgaXMgJWRcbiIsIHJlZyk7CisJCWJyZWFrOworCX0KKwltbWlvd2IoKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+c29mdF9yZWdfY29weV9sb2NrLCBmbGFncyk7Cit9CisKKyNpZmRlZiBQQ0lETUEKK3N0YXRpYyBpbnQgbmlfYWlfZHJhaW5fZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworLyogRE1BIGNoYW5uZWwgc2V0dXAgKi8KKworLy8gbmVnYXRpdmUgY2hhbm5lbCBtZWFucyBubyBjaGFubmVsCitzdGF0aWMgaW5saW5lIHZvaWQgbmlfc2V0X2FpX2RtYV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBiaXRmaWVsZDsKKworCWlmIChjaGFubmVsID49IDApIHsKKwkJYml0ZmllbGQgPQorCQkJKG5pX3N0Y19kbWFfY2hhbm5lbF9zZWxlY3RfYml0ZmllbGQoY2hhbm5lbCkgPDwKKwkJCUFJX0RNQV9TZWxlY3RfU2hpZnQpICYgQUlfRE1BX1NlbGVjdF9NYXNrOworCX0gZWxzZSB7CisJCWJpdGZpZWxkID0gMDsKKwl9CisJbmlfc2V0X2JpdGZpZWxkKGRldiwgQUlfQU9fU2VsZWN0LCBBSV9ETUFfU2VsZWN0X01hc2ssIGJpdGZpZWxkKTsKK30KKworLy8gbmVnYXRpdmUgY2hhbm5lbCBtZWFucyBubyBjaGFubmVsCitzdGF0aWMgaW5saW5lIHZvaWQgbmlfc2V0X2FvX2RtYV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBiaXRmaWVsZDsKKworCWlmIChjaGFubmVsID49IDApIHsKKwkJYml0ZmllbGQgPQorCQkJKG5pX3N0Y19kbWFfY2hhbm5lbF9zZWxlY3RfYml0ZmllbGQoY2hhbm5lbCkgPDwKKwkJCUFPX0RNQV9TZWxlY3RfU2hpZnQpICYgQU9fRE1BX1NlbGVjdF9NYXNrOworCX0gZWxzZSB7CisJCWJpdGZpZWxkID0gMDsKKwl9CisJbmlfc2V0X2JpdGZpZWxkKGRldiwgQUlfQU9fU2VsZWN0LCBBT19ETUFfU2VsZWN0X01hc2ssIGJpdGZpZWxkKTsKK30KKworLy8gbmVnYXRpdmUgbWl0ZV9jaGFubmVsIG1lYW5zIG5vIGNoYW5uZWwKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV9zZXRfZ3BjdF9kbWFfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBncGN0X2luZGV4LCBpbnQgbWl0ZV9jaGFubmVsKQoreworCXVuc2lnbmVkIGJpdGZpZWxkOworCisJaWYgKG1pdGVfY2hhbm5lbCA+PSAwKSB7CisJCWJpdGZpZWxkID0gR1BDVF9ETUFfU2VsZWN0X0JpdHMoZ3BjdF9pbmRleCwgbWl0ZV9jaGFubmVsKTsKKwl9IGVsc2UgeworCQliaXRmaWVsZCA9IDA7CisJfQorCW5pX3NldF9iaXRmaWVsZChkZXYsIEcwX0cxX1NlbGVjdCwgR1BDVF9ETUFfU2VsZWN0X01hc2soZ3BjdF9pbmRleCksCisJCWJpdGZpZWxkKTsKK30KKworLy8gbmVnYXRpdmUgbWl0ZV9jaGFubmVsIG1lYW5zIG5vIGNoYW5uZWwKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV9zZXRfY2RvX2RtYV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbWl0ZV9jaGFubmVsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPnNvZnRfcmVnX2NvcHlfbG9jaywgZmxhZ3MpOworCWRldnByaXYtPmNkaW9fZG1hX3NlbGVjdF9yZWcgJj0gfkNET19ETUFfU2VsZWN0X01hc2s7CisJaWYgKG1pdGVfY2hhbm5lbCA+PSAwKSB7CisJCS8qWFhYIGp1c3QgZ3Vlc3Npbmcgbmlfc3RjX2RtYV9jaGFubmVsX3NlbGVjdF9iaXRmaWVsZCgpIHJldHVybnMgdGhlIHJpZ2h0IGJpdHMsCisJCSAgIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoZSBjZGlvIGRtYSBzZWxlY3Rpb24gd29ya3MganVzdCBsaWtlIGFpL2FvL2dwY3QuCisJCSAgIERlZmluaXRlbHkgd29ya3MgZm9yIGRtYSBjaGFubmVscyAwIGFuZCAxLiAqLworCQlkZXZwcml2LT5jZGlvX2RtYV9zZWxlY3RfcmVnIHw9CisJCQkobmlfc3RjX2RtYV9jaGFubmVsX3NlbGVjdF9iaXRmaWVsZChtaXRlX2NoYW5uZWwpIDw8CisJCQlDRE9fRE1BX1NlbGVjdF9TaGlmdCkgJiBDRE9fRE1BX1NlbGVjdF9NYXNrOworCX0KKwluaV93cml0ZWIoZGV2cHJpdi0+Y2Rpb19kbWFfc2VsZWN0X3JlZywgTV9PZmZzZXRfQ0RJT19ETUFfU2VsZWN0KTsKKwltbWlvd2IoKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+c29mdF9yZWdfY29weV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbmlfcmVxdWVzdF9haV9taXRlX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlCVUdfT04oZGV2cHJpdi0+YWlfbWl0ZV9jaGFuKTsKKwlkZXZwcml2LT5haV9taXRlX2NoYW4gPQorCQltaXRlX3JlcXVlc3RfY2hhbm5lbChkZXZwcml2LT5taXRlLCBkZXZwcml2LT5haV9taXRlX3JpbmcpOworCWlmIChkZXZwcml2LT5haV9taXRlX2NoYW4gPT0gTlVMTCkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssCisJCQlmbGFncyk7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiZmFpbGVkIHRvIHJlc2VydmUgbWl0ZSBkbWEgY2hhbm5lbCBmb3IgYW5hbG9nIGlucHV0LiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlkZXZwcml2LT5haV9taXRlX2NoYW4tPmRpciA9IENPTUVESV9JTlBVVDsKKwluaV9zZXRfYWlfZG1hX2NoYW5uZWwoZGV2LCBkZXZwcml2LT5haV9taXRlX2NoYW4tPmNoYW5uZWwpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX3JlcXVlc3RfYW9fbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJQlVHX09OKGRldnByaXYtPmFvX21pdGVfY2hhbik7CisJZGV2cHJpdi0+YW9fbWl0ZV9jaGFuID0KKwkJbWl0ZV9yZXF1ZXN0X2NoYW5uZWwoZGV2cHJpdi0+bWl0ZSwgZGV2cHJpdi0+YW9fbWl0ZV9yaW5nKTsKKwlpZiAoZGV2cHJpdi0+YW9fbWl0ZV9jaGFuID09IE5VTEwpIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLAorCQkJZmxhZ3MpOworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImZhaWxlZCB0byByZXNlcnZlIG1pdGUgZG1hIGNoYW5uZWwgZm9yIGFuYWxvZyBvdXR1dC4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZGV2cHJpdi0+YW9fbWl0ZV9jaGFuLT5kaXIgPSBDT01FRElfT1VUUFVUOworCW5pX3NldF9hb19kbWFfY2hhbm5lbChkZXYsIGRldnByaXYtPmFvX21pdGVfY2hhbi0+Y2hhbm5lbCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfcmVxdWVzdF9ncGN0X21pdGVfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBncGN0X2luZGV4LCBlbnVtIGNvbWVkaV9pb19kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG1pdGVfY2hhbm5lbCAqbWl0ZV9jaGFuOworCisJQlVHX09OKGdwY3RfaW5kZXggPj0gTlVNX0dQQ1QpOworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlCVUdfT04oZGV2cHJpdi0+Y291bnRlcl9kZXYtPmNvdW50ZXJzW2dwY3RfaW5kZXhdLm1pdGVfY2hhbik7CisJbWl0ZV9jaGFuID0KKwkJbWl0ZV9yZXF1ZXN0X2NoYW5uZWwoZGV2cHJpdi0+bWl0ZSwKKwkJZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbZ3BjdF9pbmRleF0pOworCWlmIChtaXRlX2NoYW4gPT0gTlVMTCkgeworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssCisJCQlmbGFncyk7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiZmFpbGVkIHRvIHJlc2VydmUgbWl0ZSBkbWEgY2hhbm5lbCBmb3IgY291bnRlci4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJbWl0ZV9jaGFuLT5kaXIgPSBkaXJlY3Rpb247CisJbmlfdGlvX3NldF9taXRlX2NoYW5uZWwoJmRldnByaXYtPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tncGN0X2luZGV4XSwKKwkJbWl0ZV9jaGFuKTsKKwluaV9zZXRfZ3BjdF9kbWFfY2hhbm5lbChkZXYsIGdwY3RfaW5kZXgsIG1pdGVfY2hhbi0+Y2hhbm5lbCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvLyBQQ0lETUEKKworc3RhdGljIGludCBuaV9yZXF1ZXN0X2Nkb19taXRlX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisjaWZkZWYgUENJRE1BCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlCVUdfT04oZGV2cHJpdi0+Y2RvX21pdGVfY2hhbik7CisJZGV2cHJpdi0+Y2RvX21pdGVfY2hhbiA9CisJCW1pdGVfcmVxdWVzdF9jaGFubmVsKGRldnByaXYtPm1pdGUsIGRldnByaXYtPmNkb19taXRlX3JpbmcpOworCWlmIChkZXZwcml2LT5jZG9fbWl0ZV9jaGFuID09IE5VTEwpIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLAorCQkJZmxhZ3MpOworCQljb21lZGlfZXJyb3IoZGV2LAorCQkJImZhaWxlZCB0byByZXNlcnZlIG1pdGUgZG1hIGNoYW5uZWwgZm9yIGNvcnJlbGF0ZWQgZGlnaXRhbCBvdXR1dC4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZGV2cHJpdi0+Y2RvX21pdGVfY2hhbi0+ZGlyID0gQ09NRURJX09VVFBVVDsKKwluaV9zZXRfY2RvX2RtYV9jaGFubmVsKGRldiwgZGV2cHJpdi0+Y2RvX21pdGVfY2hhbi0+Y2hhbm5lbCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisjZW5kaWYgLy8gUENJRE1BCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5pX3JlbGVhc2VfYWlfbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworI2lmZGVmIFBDSURNQQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJaWYgKGRldnByaXYtPmFpX21pdGVfY2hhbikgeworCQluaV9zZXRfYWlfZG1hX2NoYW5uZWwoZGV2LCAtMSk7CisJCW1pdGVfcmVsZWFzZV9jaGFubmVsKGRldnByaXYtPmFpX21pdGVfY2hhbik7CisJCWRldnByaXYtPmFpX21pdGVfY2hhbiA9IE5VTEw7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworI2VuZGlmIC8vIFBDSURNQQorfQorCitzdGF0aWMgdm9pZCBuaV9yZWxlYXNlX2FvX21pdGVfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKyNpZmRlZiBQQ0lETUEKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5hb19taXRlX2NoYW4pIHsKKwkJbmlfc2V0X2FvX2RtYV9jaGFubmVsKGRldiwgLTEpOworCQltaXRlX3JlbGVhc2VfY2hhbm5lbChkZXZwcml2LT5hb19taXRlX2NoYW4pOworCQlkZXZwcml2LT5hb19taXRlX2NoYW4gPSBOVUxMOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKyNlbmRpZiAvLyBQQ0lETUEKK30KKwordm9pZCBuaV9yZWxlYXNlX2dwY3RfbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBncGN0X2luZGV4KQoreworI2lmZGVmIFBDSURNQQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlCVUdfT04oZ3BjdF9pbmRleCA+PSBOVU1fR1BDVCk7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5jb3VudGVyX2Rldi0+Y291bnRlcnNbZ3BjdF9pbmRleF0ubWl0ZV9jaGFuKSB7CisJCXN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbiA9CisJCQlkZXZwcml2LT5jb3VudGVyX2Rldi0+Y291bnRlcnNbZ3BjdF9pbmRleF0ubWl0ZV9jaGFuOworCisJCW5pX3NldF9ncGN0X2RtYV9jaGFubmVsKGRldiwgZ3BjdF9pbmRleCwgLTEpOworCQluaV90aW9fc2V0X21pdGVfY2hhbm5lbCgmZGV2cHJpdi0+Y291bnRlcl9kZXYtPgorCQkJY291bnRlcnNbZ3BjdF9pbmRleF0sIE5VTEwpOworCQltaXRlX3JlbGVhc2VfY2hhbm5lbChtaXRlX2NoYW4pOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKyNlbmRpZiAvLyBQQ0lETUEKK30KKworc3RhdGljIHZvaWQgbmlfcmVsZWFzZV9jZG9fbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworI2lmZGVmIFBDSURNQQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJaWYgKGRldnByaXYtPmNkb19taXRlX2NoYW4pIHsKKwkJbmlfc2V0X2Nkb19kbWFfY2hhbm5lbChkZXYsIC0xKTsKKwkJbWl0ZV9yZWxlYXNlX2NoYW5uZWwoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbik7CisJCWRldnByaXYtPmNkb19taXRlX2NoYW4gPSBOVUxMOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKyNlbmRpZiAvLyBQQ0lETUEKK30KKworLy8gZS1zZXJpZXMgYm9hcmRzIHVzZSB0aGUgc2Vjb25kIGlycSBzaWduYWxzIHRvIGdlbmVyYXRlIGRtYSByZXF1ZXN0cyBmb3IgdGhlaXIgY291bnRlcnMKKyNpZmRlZiBQQ0lETUEKK3N0YXRpYyB2b2lkIG5pX2Vfc2VyaWVzX2VuYWJsZV9zZWNvbmRfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGdwY3RfaW5kZXgsIHNob3J0IGVuYWJsZSkKK3sKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCXJldHVybjsKKwlzd2l0Y2ggKGdwY3RfaW5kZXgpIHsKKwljYXNlIDA6CisJCWlmIChlbmFibGUpIHsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBHMF9HYXRlX1NlY29uZF9JcnFfRW5hYmxlLAorCQkJCVNlY29uZF9JUlFfQV9FbmFibGVfUmVnaXN0ZXIpOworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDAsCisJCQkJU2Vjb25kX0lSUV9BX0VuYWJsZV9SZWdpc3Rlcik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpZiAoZW5hYmxlKSB7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgRzFfR2F0ZV9TZWNvbmRfSXJxX0VuYWJsZSwKKwkJCQlTZWNvbmRfSVJRX0JfRW5hYmxlX1JlZ2lzdGVyKTsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAwLAorCQkJCVNlY29uZF9JUlFfQl9FbmFibGVfUmVnaXN0ZXIpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9Cit9CisjZW5kaWYgLy8gUENJRE1BCisKK3N0YXRpYyB2b2lkIG5pX2NsZWFyX2FpX2ZpZm8oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykgeworCQkvLyBGbHVzaCB0aGUgNjE0MyBkYXRhIEZJRk8KKwkJbmlfd3JpdGVsKDB4MTAsIEFJRklGT19Db250cm9sXzYxNDMpOwkvLyBGbHVzaCBmaWZvCisJCW5pX3dyaXRlbCgweDAwLCBBSUZJRk9fQ29udHJvbF82MTQzKTsJLy8gRmx1c2ggZmlmbworCQl3aGlsZSAobmlfcmVhZGwoQUlGSUZPX1N0YXR1c182MTQzKSAmIDB4MTApIDsJLy8gV2FpdCBmb3IgY29tcGxldGUKKwl9IGVsc2UgeworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMSwgQURDX0ZJRk9fQ2xlYXIpOworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MjV4KSB7CisJCQluaV93cml0ZWIoMCwgTV9PZmZzZXRfU3RhdGljX0FJX0NvbnRyb2woMCkpOworCQkJbmlfd3JpdGViKDEsIE1fT2Zmc2V0X1N0YXRpY19BSV9Db250cm9sKDApKTsKKyNpZiAwCisJCQkvKiB0aGUgTkkgZXhhbXBsZSBjb2RlIGRvZXMgMyBjb252ZXJ0IHB1bHNlcyBmb3IgNjI1eCBib2FyZHMsCisJCQkgICBidXQgdGhhdCBhcHBlYXJzIHRvIGJlIHdyb25nIGluIHByYWN0aWNlLiAqLworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NPTlZFUlRfUHVsc2UsCisJCQkJQUlfQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9DT05WRVJUX1B1bHNlLAorCQkJCUFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfQ09OVkVSVF9QdWxzZSwKKwkJCQlBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworI2VuZGlmCisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdpbl9vdXQyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MzJfdCBkYXRhLCBpbnQgcmVnKQoreworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkYXRhID4+IDE2LCByZWcpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkYXRhICYgMHhmZmZmLCByZWcgKyAxKTsKK30KKworc3RhdGljIHVpbnQzMl90IHdpbl9pbjIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCByZWcpCit7CisJdWludDMyX3QgYml0czsKKwliaXRzID0gZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgcmVnKSA8PCAxNjsKKwliaXRzIHw9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIHJlZyArIDEpOworCXJldHVybiBiaXRzOworfQorCisjZGVmaW5lIGFvX3dpbl9vdXQoZGF0YSxhZGRyKSBuaV9hb193aW5fb3V0dyhkZXYsZGF0YSxhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIG5pX2FvX3dpbl9vdXR3KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBkYXRhLCBpbnQgYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworCW5pX3dyaXRldyhhZGRyLCBBT19XaW5kb3dfQWRkcmVzc182MTF4KTsKKwluaV93cml0ZXcoZGF0YSwgQU9fV2luZG93X0RhdGFfNjExeCk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV9hb193aW5fb3V0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDMyX3QgZGF0YSwgaW50IGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwluaV93cml0ZXcoYWRkciwgQU9fV2luZG93X0FkZHJlc3NfNjExeCk7CisJbmlfd3JpdGVsKGRhdGEsIEFPX1dpbmRvd19EYXRhXzYxMXgpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IG5pX2FvX3dpbl9pbncoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgc2hvcnQgZGF0YTsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwluaV93cml0ZXcoYWRkciwgQU9fV2luZG93X0FkZHJlc3NfNjExeCk7CisJZGF0YSA9IG5pX3JlYWR3KEFPX1dpbmRvd19EYXRhXzYxMXgpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworCXJldHVybiBkYXRhOworfQorCisvKiBuaV9zZXRfYml0cyggKSBhbGxvd3MgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBuaV9taW9fY29tbW9uIGRyaXZlciB0bworKiBzaGFyZSByZWdpc3RlcnMgKHN1Y2ggYXMgSW50ZXJydXB0X0FfUmVnaXN0ZXIpIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aAorKiBlYWNoIG90aGVyLgorKgorKiBOT1RFOiB0aGUgc3dpdGNoL2Nhc2Ugc3RhdGVtZW50cyBhcmUgb3B0aW1pemVkIG91dCBmb3IgYSBjb25zdGFudCBhcmd1bWVudAorKiBzbyB0aGlzIGlzIGFjdHVhbGx5IHF1aXRlIGZhc3QtLS0gIElmIHlvdSBtdXN0IHdyYXAgYW5vdGhlciBmdW5jdGlvbiBhcm91bmQgdGhpcworKiBtYWtlIGl0IGlubGluZSB0byBhdm9pZCBhIGxhcmdlIHNwZWVkIHBlbmFsdHkuCisqCisqIHZhbHVlIHNob3VsZCBvbmx5IGJlIDEgb3IgMC4KKyovCitzdGF0aWMgaW5saW5lIHZvaWQgbmlfc2V0X2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCByZWcsIHVuc2lnbmVkIGJpdHMsCisJdW5zaWduZWQgdmFsdWUpCit7CisJdW5zaWduZWQgYml0X3ZhbHVlczsKKworCWlmICh2YWx1ZSkKKwkJYml0X3ZhbHVlcyA9IGJpdHM7CisJZWxzZQorCQliaXRfdmFsdWVzID0gMDsKKwluaV9zZXRfYml0ZmllbGQoZGV2LCByZWcsIGJpdHMsIGJpdF92YWx1ZXMpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbmlfRV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwl1bnNpZ25lZCBzaG9ydCBhX3N0YXR1czsKKwl1bnNpZ25lZCBzaG9ydCBiX3N0YXR1czsKKwl1bnNpZ25lZCBpbnQgYWlfbWl0ZV9zdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCBhb19taXRlX3N0YXR1cyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKyNpZmRlZiBQQ0lETUEKKwlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGUgPSBkZXZwcml2LT5taXRlOworI2VuZGlmCisKKwlpZiAoZGV2LT5hdHRhY2hlZCA9PSAwKQorCQlyZXR1cm4gSVJRX05PTkU7CisJc21wX21iKCk7CQkvLyBtYWtlIHN1cmUgZGV2LT5hdHRhY2hlZCBpcyBjaGVja2VkIGJlZm9yZSBoYW5kbGVyIGRvZXMgYW55dGhpbmcgZWxzZS4KKworCS8vIGxvY2sgdG8gYXZvaWQgcmFjZSB3aXRoIGNvbWVkaV9wb2xsCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJYV9zdGF0dXMgPSBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBBSV9TdGF0dXNfMV9SZWdpc3Rlcik7CisJYl9zdGF0dXMgPSBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBBT19TdGF0dXNfMV9SZWdpc3Rlcik7CisjaWZkZWYgUENJRE1BCisJaWYgKG1pdGUpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnc190b287CisKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywKKwkJCWZsYWdzX3Rvbyk7CisJCWlmIChkZXZwcml2LT5haV9taXRlX2NoYW4pIHsKKwkJCWFpX21pdGVfc3RhdHVzID0gbWl0ZV9nZXRfc3RhdHVzKGRldnByaXYtPmFpX21pdGVfY2hhbik7CisJCQlpZiAoYWlfbWl0ZV9zdGF0dXMgJiBDSFNSX0xJTktDKQorCQkJCXdyaXRlbChDSE9SX0NMUkxDLAorCQkJCQlkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKworCQkJCQlNSVRFX0NIT1IoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuLT4KKwkJCQkJCWNoYW5uZWwpKTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+YW9fbWl0ZV9jaGFuKSB7CisJCQlhb19taXRlX3N0YXR1cyA9IG1pdGVfZ2V0X3N0YXR1cyhkZXZwcml2LT5hb19taXRlX2NoYW4pOworCQkJaWYgKGFvX21pdGVfc3RhdHVzICYgQ0hTUl9MSU5LQykKKwkJCQl3cml0ZWwoQ0hPUl9DTFJMQywKKwkJCQkJbWl0ZS0+bWl0ZV9pb19hZGRyICsKKwkJCQkJTUlURV9DSE9SKGRldnByaXYtPmFvX21pdGVfY2hhbi0+CisJCQkJCQljaGFubmVsKSk7CisJCX0KKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLAorCQkJZmxhZ3NfdG9vKTsKKwl9CisjZW5kaWYKKwlhY2tfYV9pbnRlcnJ1cHQoZGV2LCBhX3N0YXR1cyk7CisJYWNrX2JfaW50ZXJydXB0KGRldiwgYl9zdGF0dXMpOworCWlmICgoYV9zdGF0dXMgJiBJbnRlcnJ1cHRfQV9TdCkgfHwgKGFpX21pdGVfc3RhdHVzICYgQ0hTUl9JTlQpKQorCQloYW5kbGVfYV9pbnRlcnJ1cHQoZGV2LCBhX3N0YXR1cywgYWlfbWl0ZV9zdGF0dXMpOworCWlmICgoYl9zdGF0dXMgJiBJbnRlcnJ1cHRfQl9TdCkgfHwgKGFvX21pdGVfc3RhdHVzICYgQ0hTUl9JTlQpKQorCQloYW5kbGVfYl9pbnRlcnJ1cHQoZGV2LCBiX3N0YXR1cywgYW9fbWl0ZV9zdGF0dXMpOworCWhhbmRsZV9ncGN0X2ludGVycnVwdChkZXYsIDApOworCWhhbmRsZV9ncGN0X2ludGVycnVwdChkZXYsIDEpOworCWhhbmRsZV9jZGlvX2ludGVycnVwdChkZXYpOworCisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKyNpZmRlZiBQQ0lETUEKK3N0YXRpYyB2b2lkIG5pX3N5bmNfYWlfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQUlfU1VCREVWOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJaWYgKGRldnByaXYtPmFpX21pdGVfY2hhbikKKwkJbWl0ZV9zeW5jX2lucHV0X2RtYShkZXZwcml2LT5haV9taXRlX2NoYW4sIHMtPmFzeW5jKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbWl0ZV9oYW5kbGVfYl9saW5rYyhzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQU9fU1VCREVWOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJaWYgKGRldnByaXYtPmFvX21pdGVfY2hhbikgeworCQltaXRlX3N5bmNfb3V0cHV0X2RtYShkZXZwcml2LT5hb19taXRlX2NoYW4sIHMtPmFzeW5jKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbmlfYW9fd2FpdF9mb3JfZG1hX2xvYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDA7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQl1bnNpZ25lZCBzaG9ydCBiX3N0YXR1czsKKworCQliX3N0YXR1cyA9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIEFPX1N0YXR1c18xX1JlZ2lzdGVyKTsKKwkJaWYgKGJfc3RhdHVzICYgQU9fRklGT19IYWxmX0Z1bGxfU3QpCisJCQlicmVhazsKKwkJLyogaWYgd2UgcG9sbCB0b28gb2Z0ZW4sIHRoZSBwY2kgYnVzIGFjdGl2aXR5IHNlZW1zCisJCSAgIHRvIHNsb3cgdGhlIGRtYSB0cmFuc2ZlciBkb3duICovCisJCWNvbWVkaV91ZGVsYXkoMTApOworCX0KKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgZG1hIGxvYWQiKTsKKwkJcmV0dXJuIC1FUElQRTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvL1BDSURNQQorc3RhdGljIHZvaWQgbmlfaGFuZGxlX2VvcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWlmIChkZXZwcml2LT5haW1vZGUgPT0gQUlNT0RFX1NDQU4pIHsKKyNpZmRlZiBQQ0lETUEKKwkJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTA7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCW5pX3N5bmNfYWlfZG1hKGRldik7CisJCQlpZiAoKHMtPmFzeW5jLT5ldmVudHMgJiBDT01FRElfQ0JfRU9TKSkKKwkJCQlicmVhazsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKyNlbHNlCisJCW5pX2hhbmRsZV9maWZvX2RyZWdzKGRldik7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPUzsKKyNlbmRpZgorCX0KKwkvKiBoYW5kbGUgc3BlY2lhbCBjYXNlIG9mIHNpbmdsZSBzY2FuIHVzaW5nIEFJX0VuZF9Pbl9FbmRfT2ZfU2NhbiAqLworCWlmICgoZGV2cHJpdi0+YWlfY21kMiAmIEFJX0VuZF9Pbl9FbmRfT2ZfU2NhbikpIHsKKwkJc2h1dGRvd25fYWlfY29tbWFuZChkZXYpOworCX0KK30KKworc3RhdGljIHZvaWQgc2h1dGRvd25fYWlfY29tbWFuZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FJX1NVQkRFVjsKKworI2lmZGVmIFBDSURNQQorCW5pX2FpX2RyYWluX2RtYShkZXYpOworI2VuZGlmCisJbmlfaGFuZGxlX2ZpZm9fZHJlZ3MoZGV2KTsKKwlnZXRfbGFzdF9zYW1wbGVfNjExeChkZXYpOworCWdldF9sYXN0X3NhbXBsZV82MTQzKGRldik7CisKKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7Cit9CisKK3N0YXRpYyB2b2lkIG5pX2V2ZW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaWYgKHMtPmFzeW5jLT4KKwkJZXZlbnRzICYgKENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9PVkVSRkxPVyB8IENPTUVESV9DQl9FT0EpKQorCXsKKwkJc3dpdGNoIChzIC0gZGV2LT5zdWJkZXZpY2VzKSB7CisJCWNhc2UgTklfQUlfU1VCREVWOgorCQkJbmlfYWlfcmVzZXQoZGV2LCBzKTsKKwkJCWJyZWFrOworCQljYXNlIE5JX0FPX1NVQkRFVjoKKwkJCW5pX2FvX3Jlc2V0KGRldiwgcyk7CisJCQlicmVhazsKKwkJY2FzZSBOSV9HUENUMF9TVUJERVY6CisJCWNhc2UgTklfR1BDVDFfU1VCREVWOgorCQkJbmlfZ3BjdF9jYW5jZWwoZGV2LCBzKTsKKwkJCWJyZWFrOworCQljYXNlIE5JX0RJT19TVUJERVY6CisJCQluaV9jZGlvX2NhbmNlbChkZXYsIHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2dwY3RfaW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIHNob3J0IGNvdW50ZXJfaW5kZXgpCit7CisjaWZkZWYgUENJRE1BCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9HUENUX1NVQkRFVihjb3VudGVyX2luZGV4KTsKKworCW5pX3Rpb19oYW5kbGVfaW50ZXJydXB0KCZkZXZwcml2LT5jb3VudGVyX2Rldi0+Y291bnRlcnNbY291bnRlcl9pbmRleF0sCisJCXMpOworCWlmIChzLT5hc3luYy0+ZXZlbnRzKQorCQluaV9ldmVudChkZXYsIHMpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGFja19hX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgYV9zdGF0dXMpCit7CisJdW5zaWduZWQgc2hvcnQgYWNrID0gMDsKKworCWlmIChhX3N0YXR1cyAmIEFJX1NDX1RDX1N0KSB7CisJCWFjayB8PSBBSV9TQ19UQ19JbnRlcnJ1cHRfQWNrOworCX0KKwlpZiAoYV9zdGF0dXMgJiBBSV9TVEFSVDFfU3QpIHsKKwkJYWNrIHw9IEFJX1NUQVJUMV9JbnRlcnJ1cHRfQWNrOworCX0KKwlpZiAoYV9zdGF0dXMgJiBBSV9TVEFSVF9TdCkgeworCQlhY2sgfD0gQUlfU1RBUlRfSW50ZXJydXB0X0FjazsKKwl9CisJaWYgKGFfc3RhdHVzICYgQUlfU1RPUF9TdCkgeworCQkvKiBub3Qgc3VyZSB3aHkgd2UgdXNlZCB0byBhY2sgdGhlIFNUQVJUIGhlcmUgYWxzbywgaW5zdGVhZCBvZiBkb2luZyBpdCBpbmRlcGVuZGVudGx5LiBGcmFuayBIZXNzIDIwMDctMDctMDYgKi8KKwkJYWNrIHw9IEFJX1NUT1BfSW50ZXJydXB0X0FjayAvKnwgQUlfU1RBUlRfSW50ZXJydXB0X0FjayAqLyA7CisJfQorCWlmIChhY2spCisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBhY2ssIEludGVycnVwdF9BX0Fja19SZWdpc3Rlcik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9hX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgc3RhdHVzLAorCXVuc2lnbmVkIGFpX21pdGVfc3RhdHVzKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQUlfU1VCREVWOworCisJLy82N3h4IGJvYXJkcyBkb24ndCBoYXZlIGFpIHN1YmRldmljZSwgYnV0IHRoZWlyIGdwY3QwIG1pZ2h0IGdlbmVyYXRlIGFuIGEgaW50ZXJydXB0CisJaWYgKHMtPnR5cGUgPT0gQ09NRURJX1NVQkRfVU5VU0VEKQorCQlyZXR1cm47CisKKyNpZmRlZiBERUJVR19JTlRFUlJVUFQKKwlydF9wcmludGsKKwkJKCJuaV9taW9fY29tbW9uOiBpbnRlcnJ1cHQ6IGFfc3RhdHVzPSUwNHggYWlfbWl0ZV9zdGF0dXM9JTA4eFxuIiwKKwkJc3RhdHVzLCBhaV9taXRlX3N0YXR1cyk7CisJbmlfbWlvX3ByaW50X3N0YXR1c19hKHN0YXR1cyk7CisjZW5kaWYKKyNpZmRlZiBQQ0lETUEKKwlpZiAoYWlfbWl0ZV9zdGF0dXMgJiBDSFNSX0xJTktDKSB7CisJCW5pX3N5bmNfYWlfZG1hKGRldik7CisJfQorCisJaWYgKGFpX21pdGVfc3RhdHVzICYgfihDSFNSX0lOVCB8IENIU1JfTElOS0MgfCBDSFNSX0RPTkUgfCBDSFNSX01SRFkgfAorCQkJQ0hTUl9EUkRZIHwgQ0hTUl9EUlExIHwgQ0hTUl9EUlEwIHwgQ0hTUl9FUlJPUiB8CisJCQlDSFNSX1NBQk9SVCB8IENIU1JfWEZFUlIgfCBDSFNSX0x4RVJSX21hc2spKSB7CisJCXJ0X3ByaW50aworCQkJKCJ1bmtub3duIG1pdGUgaW50ZXJydXB0LCBhY2shIChhaV9taXRlX3N0YXR1cz0lMDh4KVxuIiwKKwkJCWFpX21pdGVfc3RhdHVzKTsKKwkJLy9taXRlX3ByaW50X2Noc3IoYWlfbWl0ZV9zdGF0dXMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCS8vZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCX0KKyNlbmRpZgorCisJLyogdGVzdCBmb3IgYWxsIHVuY29tbW9uIGludGVycnVwdCBldmVudHMgYXQgdGhlIHNhbWUgdGltZSAqLworCWlmIChzdGF0dXMgJiAoQUlfT3ZlcnJ1bl9TdCB8IEFJX092ZXJmbG93X1N0IHwgQUlfU0NfVENfRXJyb3JfU3QgfAorCQkJQUlfU0NfVENfU3QgfCBBSV9TVEFSVDFfU3QpKSB7CisJCWlmIChzdGF0dXMgPT0gMHhmZmZmKSB7CisJCQlydF9wcmludGsKKwkJCQkoIm5pX21pb19jb21tb246IGFfc3RhdHVzPTB4ZmZmZi4gIENhcmQgcmVtb3ZlZD9cbiIpOworCQkJLyogd2UgcHJvYmFibHkgYXJlbid0IGV2ZW4gcnVubmluZyBhIGNvbW1hbmQgbm93LAorCQkJICogc28gaXQncyBhIGdvb2QgaWRlYSB0byBiZSBjYXJlZnVsLiAqLworCQkJaWYgKGNvbWVkaV9nZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHMpICYgU1JGX1JVTk5JTkcpIHsKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9CisJCQkJCUNPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9FT0E7CisJCQkJbmlfZXZlbnQoZGV2LCBzKTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfQorCQlpZiAoc3RhdHVzICYgKEFJX092ZXJydW5fU3QgfCBBSV9PdmVyZmxvd19TdCB8CisJCQkJQUlfU0NfVENfRXJyb3JfU3QpKSB7CisJCQlydF9wcmludGsoIm5pX21pb19jb21tb246IGFpIGVycm9yIGFfc3RhdHVzPSUwNHhcbiIsCisJCQkJc3RhdHVzKTsKKwkJCW5pX21pb19wcmludF9zdGF0dXNfYShzdGF0dXMpOworCisJCQlzaHV0ZG93bl9haV9jb21tYW5kKGRldik7CisKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCQkJaWYgKHN0YXR1cyAmIChBSV9PdmVycnVuX1N0IHwgQUlfT3ZlcmZsb3dfU3QpKQorCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOworCisJCQluaV9ldmVudChkZXYsIHMpOworCisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHN0YXR1cyAmIEFJX1NDX1RDX1N0KSB7CisjaWZkZWYgREVCVUdfSU5URVJSVVBUCisJCQlydF9wcmludGsoIm5pX21pb19jb21tb246IFNDX1RDIGludGVycnVwdFxuIik7CisjZW5kaWYKKwkJCWlmICghZGV2cHJpdi0+YWlfY29udGludW91cykgeworCQkJCXNodXRkb3duX2FpX2NvbW1hbmQoZGV2KTsKKwkJCX0KKwkJfQorCX0KKyNpZm5kZWYgUENJRE1BCisJaWYgKHN0YXR1cyAmIEFJX0ZJRk9fSGFsZl9GdWxsX1N0KSB7CisJCWludCBpOworCQlzdGF0aWMgY29uc3QgaW50IHRpbWVvdXQgPSAxMDsKKwkJLyogcGNtY2lhIGNhcmRzIChhdCBsZWFzdCA2MDM2KSBzZWVtIHRvIHN0b3AgcHJvZHVjaW5nIGludGVycnVwdHMgaWYgd2UKKwkJICpmYWlsIHRvIGdldCB0aGUgZmlmbyBsZXNzIHRoYW4gaGFsZiBmdWxsLCBzbyBsb29wIHRvIGJlIHN1cmUuKi8KKwkJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7ICsraSkgeworCQkJbmlfaGFuZGxlX2ZpZm9faGFsZl9mdWxsKGRldik7CisJCQlpZiAoKGRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJCQlBSV9TdGF0dXNfMV9SZWdpc3RlcikgJgorCQkJCQlBSV9GSUZPX0hhbGZfRnVsbF9TdCkgPT0gMCkKKwkJCQlicmVhazsKKwkJfQorCX0KKyNlbmRpZiAvLyAhUENJRE1BCisKKwlpZiAoKHN0YXR1cyAmIEFJX1NUT1BfU3QpKSB7CisJCW5pX2hhbmRsZV9lb3MoZGV2LCBzKTsKKwl9CisKKwluaV9ldmVudChkZXYsIHMpOworCisjaWZkZWYgREVCVUdfSU5URVJSVVBUCisJc3RhdHVzID0gZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgQUlfU3RhdHVzXzFfUmVnaXN0ZXIpOworCWlmIChzdGF0dXMgJiBJbnRlcnJ1cHRfQV9TdCkgeworCQlydF9wcmludGsKKwkJCSgiaGFuZGxlX2FfaW50ZXJydXB0OiBkaWRuJ3QgY2xlYXIgaW50ZXJydXB0PyBzdGF0dXM9MHgleFxuIiwKKwkJCXN0YXR1cyk7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGFja19iX2ludGVycnVwdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgYl9zdGF0dXMpCit7CisJdW5zaWduZWQgc2hvcnQgYWNrID0gMDsKKwlpZiAoYl9zdGF0dXMgJiBBT19CQ19UQ19TdCkgeworCQlhY2sgfD0gQU9fQkNfVENfSW50ZXJydXB0X0FjazsKKwl9CisJaWYgKGJfc3RhdHVzICYgQU9fT3ZlcnJ1bl9TdCkgeworCQlhY2sgfD0gQU9fRXJyb3JfSW50ZXJydXB0X0FjazsKKwl9CisJaWYgKGJfc3RhdHVzICYgQU9fU1RBUlRfU3QpIHsKKwkJYWNrIHw9IEFPX1NUQVJUX0ludGVycnVwdF9BY2s7CisJfQorCWlmIChiX3N0YXR1cyAmIEFPX1NUQVJUMV9TdCkgeworCQlhY2sgfD0gQU9fU1RBUlQxX0ludGVycnVwdF9BY2s7CisJfQorCWlmIChiX3N0YXR1cyAmIEFPX1VDX1RDX1N0KSB7CisJCWFjayB8PSBBT19VQ19UQ19JbnRlcnJ1cHRfQWNrOworCX0KKwlpZiAoYl9zdGF0dXMgJiBBT19VSTJfVENfU3QpIHsKKwkJYWNrIHw9IEFPX1VJMl9UQ19JbnRlcnJ1cHRfQWNrOworCX0KKwlpZiAoYl9zdGF0dXMgJiBBT19VUERBVEVfU3QpIHsKKwkJYWNrIHw9IEFPX1VQREFURV9JbnRlcnJ1cHRfQWNrOworCX0KKwlpZiAoYWNrKQorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgYWNrLCBJbnRlcnJ1cHRfQl9BY2tfUmVnaXN0ZXIpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYl9pbnRlcnJ1cHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0IGJfc3RhdHVzLAorCXVuc2lnbmVkIGFvX21pdGVfc3RhdHVzKQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQU9fU1VCREVWOworCS8vdW5zaWduZWQgc2hvcnQgYWNrPTA7CisjaWZkZWYgREVCVUdfSU5URVJSVVBUCisJcnRfcHJpbnRrKCJuaV9taW9fY29tbW9uOiBpbnRlcnJ1cHQ6IGJfc3RhdHVzPSUwNHggbTFfc3RhdHVzPSUwOHhcbiIsCisJCWJfc3RhdHVzLCBhb19taXRlX3N0YXR1cyk7CisJbmlfbWlvX3ByaW50X3N0YXR1c19iKGJfc3RhdHVzKTsKKyNlbmRpZgorCisjaWZkZWYgUENJRE1BCisJLyogQ3VycmVudGx5LCBtaXRlLmMgcmVxdWlyZXMgdXMgdG8gaGFuZGxlIExJTktDICovCisJaWYgKGFvX21pdGVfc3RhdHVzICYgQ0hTUl9MSU5LQykgeworCQltaXRlX2hhbmRsZV9iX2xpbmtjKGRldnByaXYtPm1pdGUsIGRldik7CisJfQorCisJaWYgKGFvX21pdGVfc3RhdHVzICYgfihDSFNSX0lOVCB8IENIU1JfTElOS0MgfCBDSFNSX0RPTkUgfCBDSFNSX01SRFkgfAorCQkJQ0hTUl9EUkRZIHwgQ0hTUl9EUlExIHwgQ0hTUl9EUlEwIHwgQ0hTUl9FUlJPUiB8CisJCQlDSFNSX1NBQk9SVCB8IENIU1JfWEZFUlIgfCBDSFNSX0x4RVJSX21hc2spKSB7CisJCXJ0X3ByaW50aworCQkJKCJ1bmtub3duIG1pdGUgaW50ZXJydXB0LCBhY2shIChhb19taXRlX3N0YXR1cz0lMDh4KVxuIiwKKwkJCWFvX21pdGVfc3RhdHVzKTsKKwkJLy9taXRlX3ByaW50X2Noc3IoYW9fbWl0ZV9zdGF0dXMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJfQorI2VuZGlmCisKKwlpZiAoYl9zdGF0dXMgPT0gMHhmZmZmKQorCQlyZXR1cm47CisJaWYgKGJfc3RhdHVzICYgQU9fT3ZlcnJ1bl9TdCkgeworCQlydF9wcmludGsKKwkJCSgibmlfbWlvX2NvbW1vbjogQU8gRklGTyB1bmRlcnJ1biBzdGF0dXM9MHglMDR4IHN0YXR1czI9MHglMDR4XG4iLAorCQkJYl9zdGF0dXMsIGRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJQU9fU3RhdHVzXzJfUmVnaXN0ZXIpKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CisJfQorCisJaWYgKGJfc3RhdHVzICYgQU9fQkNfVENfU3QpIHsKKwkJTURQUklOVEsoIm5pX21pb19jb21tb246IEFPIEJDX1RDIHN0YXR1cz0weCUwNHggc3RhdHVzMj0weCUwNHhcbiIsIGJfc3RhdHVzLCBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBBT19TdGF0dXNfMl9SZWdpc3RlcikpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfQorI2lmbmRlZiBQQ0lETUEKKwlpZiAoYl9zdGF0dXMgJiBBT19GSUZPX1JlcXVlc3RfU3QpIHsKKwkJaW50IHJldDsKKworCQlyZXQgPSBuaV9hb19maWZvX2hhbGZfZW1wdHkoZGV2LCBzKTsKKwkJaWYgKCFyZXQpIHsKKwkJCXJ0X3ByaW50aygibmlfbWlvX2NvbW1vbjogQU8gYnVmZmVyIHVuZGVycnVuXG4iKTsKKwkJCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyLAorCQkJCUFPX0ZJRk9fSW50ZXJydXB0X0VuYWJsZSB8CisJCQkJQU9fRXJyb3JfSW50ZXJydXB0X0VuYWJsZSwgMCk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJfQorCX0KKyNlbmRpZgorCisJbmlfZXZlbnQoZGV2LCBzKTsKK30KKworI2lmZGVmIERFQlVHX1NUQVRVU19BCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qgc3RhdHVzX2Ffc3RyaW5nc1tdID0geworCSJwYXNzdGhydTAiLCAiZmlmbyIsICJHMF9nYXRlIiwgIkcwX1RDIiwKKwkic3RvcCIsICJzdGFydCIsICJzY190YyIsICJzdGFydDEiLAorCSJzdGFydDIiLCAic2NfdGNfZXJyb3IiLCAib3ZlcmZsb3ciLCAib3ZlcnJ1biIsCisJImZpZm9fZW1wdHkiLCAiZmlmb19oYWxmX2Z1bGwiLCAiZmlmb19mdWxsIiwgImludGVycnVwdF9hIgorfTsKKworc3RhdGljIHZvaWQgbmlfbWlvX3ByaW50X3N0YXR1c19hKGludCBzdGF0dXMpCit7CisJaW50IGk7CisKKwlydF9wcmludGsoIkEgc3RhdHVzOiIpOworCWZvciAoaSA9IDE1OyBpID49IDA7IGktLSkgeworCQlpZiAoc3RhdHVzICYgKDEgPDwgaSkpIHsKKwkJCXJ0X3ByaW50aygiICVzIiwgc3RhdHVzX2Ffc3RyaW5nc1tpXSk7CisJCX0KKwl9CisJcnRfcHJpbnRrKCJcbiIpOworfQorI2VuZGlmCisKKyNpZmRlZiBERUJVR19TVEFUVVNfQgorc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN0YXR1c19iX3N0cmluZ3NbXSA9IHsKKwkicGFzc3RocnUxIiwgImZpZm8iLCAiRzFfZ2F0ZSIsICJHMV9UQyIsCisJIlVJMl9UQyIsICJVUERBVEUiLCAiVUNfVEMiLCAiQkNfVEMiLAorCSJzdGFydDEiLCAib3ZlcnJ1biIsICJzdGFydCIsICJiY190Y19lcnJvciIsCisJImZpZm9fZW1wdHkiLCAiZmlmb19oYWxmX2Z1bGwiLCAiZmlmb19mdWxsIiwgImludGVycnVwdF9iIgorfTsKKworc3RhdGljIHZvaWQgbmlfbWlvX3ByaW50X3N0YXR1c19iKGludCBzdGF0dXMpCit7CisJaW50IGk7CisKKwlydF9wcmludGsoIkIgc3RhdHVzOiIpOworCWZvciAoaSA9IDE1OyBpID49IDA7IGktLSkgeworCQlpZiAoc3RhdHVzICYgKDEgPDwgaSkpIHsKKwkJCXJ0X3ByaW50aygiICVzIiwgc3RhdHVzX2Jfc3RyaW5nc1tpXSk7CisJCX0KKwl9CisJcnRfcHJpbnRrKCJcbiIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgUENJRE1BCisKK3N0YXRpYyB2b2lkIG5pX2FvX2ZpZm9fbG9hZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBpbnQgbikKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmYXN5bmMtPmNtZDsKKwlpbnQgY2hhbjsKKwlpbnQgaTsKKwlzaG9ydCBkOworCXUzMiBwYWNrZWRfZGF0YTsKKwlpbnQgcmFuZ2U7CisJaW50IGVyciA9IDE7CisKKwljaGFuID0gYXN5bmMtPmN1cl9jaGFuOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJZXJyICY9IGNvbWVkaV9idWZfZ2V0KGFzeW5jLCAmZCk7CisJCWlmIChlcnIgPT0gMCkKKwkJCWJyZWFrOworCisJCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtjaGFuXSk7CisKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ182eHh4X21hc2spIHsKKwkJCXBhY2tlZF9kYXRhID0gZCAmIDB4ZmZmZjsKKwkJCS8qIDY3MTEgb25seSBoYXMgMTYgYml0IHdpZGUgYW8gZmlmbyAqLworCQkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAhPSBuaV9yZWdfNjcxMSkgeworCQkJCWVyciAmPSBjb21lZGlfYnVmX2dldChhc3luYywgJmQpOworCQkJCWlmIChlcnIgPT0gMCkKKwkJCQkJYnJlYWs7CisJCQkJY2hhbisrOworCQkJCWkrKzsKKwkJCQlwYWNrZWRfZGF0YSB8PSAoZCA8PCAxNikgJiAweGZmZmYwMDAwOworCQkJfQorCQkJbmlfd3JpdGVsKHBhY2tlZF9kYXRhLCBEQUNfRklGT19EYXRhXzYxMXgpOworCQl9IGVsc2UgeworCQkJbmlfd3JpdGV3KGQsIERBQ19GSUZPX0RhdGEpOworCQl9CisJCWNoYW4rKzsKKwkJY2hhbiAlPSBjbWQtPmNoYW5saXN0X2xlbjsKKwl9CisJYXN5bmMtPmN1cl9jaGFuID0gY2hhbjsKKwlpZiAoZXJyID09IDApIHsKKwkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CisJfQorfQorCisvKgorICogIFRoZXJlJ3MgYSBzbWFsbCBwcm9ibGVtIGlmIHRoZSBGSUZPIGdldHMgcmVhbGx5IGxvdyBhbmQgd2UKKyAqICBkb24ndCBoYXZlIHRoZSBkYXRhIHRvIGZpbGwgaXQuICBCYXNpY2FsbHksIGlmIGFmdGVyIHdlIGZpbGwKKyAqICB0aGUgRklGTyB3aXRoIGFsbCB0aGUgZGF0YSBhdmFpbGFibGUsIHRoZSBGSUZPIGlzIF9zdGlsbF8KKyAqICBsZXNzIHRoYW4gaGFsZiBmdWxsLCB3ZSBuZXZlciBjbGVhciB0aGUgaW50ZXJydXB0LiAgSWYgdGhlCisgKiAgSVJRIGlzIGluIGVkZ2UgbW9kZSwgd2UgbmV2ZXIgZ2V0IGFub3RoZXIgaW50ZXJydXB0LCBiZWNhdXNlCisgKiAgdGhpcyBvbmUgd2Fzbid0IGNsZWFyZWQuICBJZiBpbiBsZXZlbCBtb2RlLCB3ZSBnZXQgZmxvb2RlZAorICogIHdpdGggaW50ZXJydXB0cyB0aGF0IHdlIGNhbid0IGZ1bGZpbGwsIGJlY2F1c2Ugbm90aGluZyBldmVyCisgKiAgZ2V0cyBwdXQgaW50byB0aGUgYnVmZmVyLgorICoKKyAqICBUaGlzIGtpbmQgb2Ygc2l0dWF0aW9uIGlzIHJlY292ZXJhYmxlLCBidXQgaXQgaXMgZWFzaWVyIHRvCisgKiAganVzdCBwcmV0ZW5kIHdlIGhhZCBhIEZJRk8gdW5kZXJydW4sIHNpbmNlIHRoZXJlIGlzIGEgZ29vZAorICogIGNoYW5jZSBpdCB3aWxsIGhhcHBlbiBhbnl3YXkuICBUaGlzIGlzIF9ub3RfIHRoZSBjYXNlIGZvcgorICogIFJUIGNvZGUsIGFzIFJUIGNvZGUgbWlnaHQgcHVycG9zZWx5IGJlIHJ1bm5pbmcgY2xvc2UgdG8gdGhlCisgKiAgbWV0YWwuICBOZWVkcyB0byBiZSBmaXhlZCBldmVudHVhbGx5LgorICovCitzdGF0aWMgaW50IG5pX2FvX2ZpZm9faGFsZl9lbXB0eShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBuOworCisJbiA9IGNvbWVkaV9idWZfcmVhZF9uX2F2YWlsYWJsZShzLT5hc3luYyk7CisJaWYgKG4gPT0gMCkgeworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJcmV0dXJuIDA7CisJfQorCisJbiAvPSBzaXplb2Yoc2hvcnQpOworCWlmIChuID4gYm9hcmR0eXBlLmFvX2ZpZm9fZGVwdGggLyAyKQorCQluID0gYm9hcmR0eXBlLmFvX2ZpZm9fZGVwdGggLyAyOworCisJbmlfYW9fZmlmb19sb2FkKGRldiwgcywgbik7CisKKwlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX2FvX3ByZXBfZmlmbyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBuOworCisJLyogcmVzZXQgZmlmbyAqLworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAxLCBEQUNfRklGT19DbGVhcik7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ182eHh4X21hc2spCisJCW5pX2FvX3dpbl9vdXRsKGRldiwgMHg2LCBBT19GSUZPX09mZnNldF9Mb2FkXzYxMXgpOworCisJLyogbG9hZCBzb21lIGRhdGEgKi8KKwluID0gY29tZWRpX2J1Zl9yZWFkX25fYXZhaWxhYmxlKHMtPmFzeW5jKTsKKwlpZiAobiA9PSAwKQorCQlyZXR1cm4gMDsKKworCW4gLz0gc2l6ZW9mKHNob3J0KTsKKwlpZiAobiA+IGJvYXJkdHlwZS5hb19maWZvX2RlcHRoKQorCQluID0gYm9hcmR0eXBlLmFvX2ZpZm9fZGVwdGg7CisKKwluaV9hb19maWZvX2xvYWQoZGV2LCBzLCBuKTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgdm9pZCBuaV9haV9maWZvX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgaW50IG4pCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlpbnQgaTsKKworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxMXgpIHsKKwkJc2hvcnQgZGF0YVsyXTsKKwkJdTMyIGRsOworCisJCWZvciAoaSA9IDA7IGkgPCBuIC8gMjsgaSsrKSB7CisJCQlkbCA9IG5pX3JlYWRsKEFEQ19GSUZPX0RhdGFfNjExeCk7CisJCQkvKiBUaGlzIG1heSBnZXQgdGhlIGhpL2xvIGRhdGEgaW4gdGhlIHdyb25nIG9yZGVyICovCisJCQlkYXRhWzBdID0gKGRsID4+IDE2KSAmIDB4ZmZmZjsKKwkJCWRhdGFbMV0gPSBkbCAmIDB4ZmZmZjsKKwkJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwkJfQorCQkvKiBDaGVjayBpZiB0aGVyZSdzIGEgc2luZ2xlIHNhbXBsZSBzdHVjayBpbiB0aGUgRklGTyAqLworCQlpZiAobiAlIDIpIHsKKwkJCWRsID0gbmlfcmVhZGwoQURDX0ZJRk9fRGF0YV82MTF4KTsKKwkJCWRhdGFbMF0gPSBkbCAmIDB4ZmZmZjsKKwkJCWNmY193cml0ZV90b19idWZmZXIocywgZGF0YVswXSk7CisJCX0KKwl9IGVsc2UgaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykgeworCQlzaG9ydCBkYXRhWzJdOworCQl1MzIgZGw7CisKKwkJLy8gVGhpcyBqdXN0IHJlYWRzIHRoZSBGSUZPIGFzc3VtaW5nIHRoZSBkYXRhIGlzIHByZXNlbnQsIG5vIGNoZWNrcyBvbiB0aGUgRklGTyBzdGF0dXMgYXJlIHBlcmZvcm1lZAorCQlmb3IgKGkgPSAwOyBpIDwgbiAvIDI7IGkrKykgeworCQkJZGwgPSBuaV9yZWFkbChBSUZJRk9fRGF0YV82MTQzKTsKKworCQkJZGF0YVswXSA9IChkbCA+PiAxNikgJiAweGZmZmY7CisJCQlkYXRhWzFdID0gZGwgJiAweGZmZmY7CisJCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRhdGEsIHNpemVvZihkYXRhKSk7CisJCX0KKwkJaWYgKG4gJSAyKSB7CisJCQkvKiBBc3N1bWUgdGhlcmUgaXMgYSBzaW5nbGUgc2FtcGxlIHN0dWNrIGluIHRoZSBGSUZPICovCisJCQluaV93cml0ZWwoMHgwMSwgQUlGSUZPX0NvbnRyb2xfNjE0Myk7CS8vIEdldCBzdHJhbmRlZCBzYW1wbGUgaW50byBGSUZPCisJCQlkbCA9IG5pX3JlYWRsKEFJRklGT19EYXRhXzYxNDMpOworCQkJZGF0YVswXSA9IChkbCA+PiAxNikgJiAweGZmZmY7CisJCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIGRhdGFbMF0pOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG4gPiBzaXplb2YoZGV2cHJpdi0+YWlfZmlmb19idWZmZXIpIC8KKwkJCXNpemVvZihkZXZwcml2LT5haV9maWZvX2J1ZmZlclswXSkpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJidWchIGFpX2ZpZm9fYnVmZmVyIHRvbyBzbWFsbCIpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1I7CisJCQlyZXR1cm47CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJZGV2cHJpdi0+YWlfZmlmb19idWZmZXJbaV0gPQorCQkJCW5pX3JlYWR3KEFEQ19GSUZPX0RhdGFfUmVnaXN0ZXIpOworCQl9CisJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGV2cHJpdi0+YWlfZmlmb19idWZmZXIsCisJCQluICogc2l6ZW9mKGRldnByaXYtPmFpX2ZpZm9fYnVmZmVyWzBdKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBuaV9oYW5kbGVfZmlmb19oYWxmX2Z1bGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IG47CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9BSV9TVUJERVY7CisKKwluID0gYm9hcmR0eXBlLmFpX2ZpZm9fZGVwdGggLyAyOworCisJbmlfYWlfZmlmb19yZWFkKGRldiwgcywgbik7Cit9CisjZW5kaWYKKworI2lmZGVmIFBDSURNQQorc3RhdGljIGludCBuaV9haV9kcmFpbl9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZiAoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJCWlmICgoZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwKKwkJCQkJCUFJX1N0YXR1c18xX1JlZ2lzdGVyKSAmCisJCQkJCUFJX0ZJRk9fRW1wdHlfU3QpCisJCQkJJiYgbWl0ZV9ieXRlc19pbl90cmFuc2l0KGRldnByaXYtPgorCQkJCQlhaV9taXRlX2NoYW4pID09IDApCisJCQkJYnJlYWs7CisJCQljb21lZGlfdWRlbGF5KDUpOworCQl9CisJCWlmIChpID09IHRpbWVvdXQpIHsKKwkJCXJ0X3ByaW50aworCQkJCSgibmlfbWlvX2NvbW1vbjogd2FpdCBmb3IgZG1hIGRyYWluIHRpbWVkIG91dFxuIik7CisJCQlydF9wcmludGsKKwkJCQkoIm1pdGVfYnl0ZXNfaW5fdHJhbnNpdD0laSwgQUlfU3RhdHVzMV9SZWdpc3Rlcj0weCV4XG4iLAorCQkJCW1pdGVfYnl0ZXNfaW5fdHJhbnNpdChkZXZwcml2LT5haV9taXRlX2NoYW4pLAorCQkJCWRldnByaXYtPnN0Y19yZWFkdyhkZXYsIEFJX1N0YXR1c18xX1JlZ2lzdGVyKSk7CisJCQlyZXR2YWwgPSAtMTsKKwkJfQorCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKworCW5pX3N5bmNfYWlfZG1hKGRldik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorI2VuZGlmCisvKgorICAgRW1wdGllcyB0aGUgQUkgZmlmbworKi8KK3N0YXRpYyB2b2lkIG5pX2hhbmRsZV9maWZvX2RyZWdzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQUlfU1VCREVWOworCXNob3J0IGRhdGFbMl07CisJdTMyIGRsOworCXNob3J0IGZpZm9fZW1wdHk7CisJaW50IGk7CisKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KSB7CisJCXdoaWxlICgoZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwKKwkJCQkJQUlfU3RhdHVzXzFfUmVnaXN0ZXIpICYKKwkJCQlBSV9GSUZPX0VtcHR5X1N0KSA9PSAwKSB7CisJCQlkbCA9IG5pX3JlYWRsKEFEQ19GSUZPX0RhdGFfNjExeCk7CisKKwkJCS8qIFRoaXMgbWF5IGdldCB0aGUgaGkvbG8gZGF0YSBpbiB0aGUgd3Jvbmcgb3JkZXIgKi8KKwkJCWRhdGFbMF0gPSAoZGwgPj4gMTYpOworCQkJZGF0YVsxXSA9IChkbCAmIDB4ZmZmZik7CisJCQljZmNfd3JpdGVfYXJyYXlfdG9fYnVmZmVyKHMsIGRhdGEsIHNpemVvZihkYXRhKSk7CisJCX0KKwl9IGVsc2UgaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykgeworCQlpID0gMDsKKwkJd2hpbGUgKG5pX3JlYWRsKEFJRklGT19TdGF0dXNfNjE0MykgJiAweDA0KSB7CisJCQlkbCA9IG5pX3JlYWRsKEFJRklGT19EYXRhXzYxNDMpOworCisJCQkvKiBUaGlzIG1heSBnZXQgdGhlIGhpL2xvIGRhdGEgaW4gdGhlIHdyb25nIG9yZGVyICovCisJCQlkYXRhWzBdID0gKGRsID4+IDE2KTsKKwkJCWRhdGFbMV0gPSAoZGwgJiAweGZmZmYpOworCQkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLCBkYXRhLCBzaXplb2YoZGF0YSkpOworCQkJaSArPSAyOworCQl9CisJCS8vIENoZWNrIGlmIHN0cmFuZGVkIHNhbXBsZSBpcyBwcmVzZW50CisJCWlmIChuaV9yZWFkbChBSUZJRk9fU3RhdHVzXzYxNDMpICYgMHgwMSkgeworCQkJbmlfd3JpdGVsKDB4MDEsIEFJRklGT19Db250cm9sXzYxNDMpOwkvLyBHZXQgc3RyYW5kZWQgc2FtcGxlIGludG8gRklGTworCQkJZGwgPSBuaV9yZWFkbChBSUZJRk9fRGF0YV82MTQzKTsKKwkJCWRhdGFbMF0gPSAoZGwgPj4gMTYpICYgMHhmZmZmOworCQkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBkYXRhWzBdKTsKKwkJfQorCisJfSBlbHNlIHsKKwkJZmlmb19lbXB0eSA9CisJCQlkZXZwcml2LT5zdGNfcmVhZHcoZGV2LAorCQkJQUlfU3RhdHVzXzFfUmVnaXN0ZXIpICYgQUlfRklGT19FbXB0eV9TdDsKKwkJd2hpbGUgKGZpZm9fZW1wdHkgPT0gMCkgeworCQkJZm9yIChpID0gMDsKKwkJCQlpIDwKKwkJCQlzaXplb2YoZGV2cHJpdi0+YWlfZmlmb19idWZmZXIpIC8KKwkJCQlzaXplb2YoZGV2cHJpdi0+YWlfZmlmb19idWZmZXJbMF0pOyBpKyspIHsKKwkJCQlmaWZvX2VtcHR5ID0KKwkJCQkJZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwKKwkJCQkJQUlfU3RhdHVzXzFfUmVnaXN0ZXIpICYKKwkJCQkJQUlfRklGT19FbXB0eV9TdDsKKwkJCQlpZiAoZmlmb19lbXB0eSkKKwkJCQkJYnJlYWs7CisJCQkJZGV2cHJpdi0+YWlfZmlmb19idWZmZXJbaV0gPQorCQkJCQluaV9yZWFkdyhBRENfRklGT19EYXRhX1JlZ2lzdGVyKTsKKwkJCX0KKwkJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywgZGV2cHJpdi0+YWlfZmlmb19idWZmZXIsCisJCQkJaSAqIHNpemVvZihkZXZwcml2LT5haV9maWZvX2J1ZmZlclswXSkpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBnZXRfbGFzdF9zYW1wbGVfNjExeChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FJX1NVQkRFVjsKKwlzaG9ydCBkYXRhOworCXUzMiBkbDsKKworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxMXgpCisJCXJldHVybjsKKworCS8qIENoZWNrIGlmIHRoZXJlJ3MgYSBzaW5nbGUgc2FtcGxlIHN0dWNrIGluIHRoZSBGSUZPICovCisJaWYgKG5pX3JlYWRiKFhYWF9TdGF0dXMpICYgMHg4MCkgeworCQlkbCA9IG5pX3JlYWRsKEFEQ19GSUZPX0RhdGFfNjExeCk7CisJCWRhdGEgPSAoZGwgJiAweGZmZmYpOworCQljZmNfd3JpdGVfdG9fYnVmZmVyKHMsIGRhdGEpOworCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X2xhc3Rfc2FtcGxlXzYxNDMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9BSV9TVUJERVY7CisJc2hvcnQgZGF0YTsKKwl1MzIgZGw7CisKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICE9IG5pX3JlZ182MTQzKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBpZiB0aGVyZSdzIGEgc2luZ2xlIHNhbXBsZSBzdHVjayBpbiB0aGUgRklGTyAqLworCWlmIChuaV9yZWFkbChBSUZJRk9fU3RhdHVzXzYxNDMpICYgMHgwMSkgeworCQluaV93cml0ZWwoMHgwMSwgQUlGSUZPX0NvbnRyb2xfNjE0Myk7CS8vIEdldCBzdHJhbmRlZCBzYW1wbGUgaW50byBGSUZPCisJCWRsID0gbmlfcmVhZGwoQUlGSUZPX0RhdGFfNjE0Myk7CisKKwkJLyogVGhpcyBtYXkgZ2V0IHRoZSBoaS9sbyBkYXRhIGluIHRoZSB3cm9uZyBvcmRlciAqLworCQlkYXRhID0gKGRsID4+IDE2KSAmIDB4ZmZmZjsKKwkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBkYXRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5pX2FpX211bmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IG51bV9ieXRlcywgdW5zaWduZWQgaW50IGNoYW5faW5kZXgpCit7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gbnVtX2J5dGVzIC8gYnl0ZXNfcGVyX3NhbXBsZShzKTsKKwlzaG9ydCAqYXJyYXkgPSBkYXRhOworCXVuc2lnbmVkIGludCAqbGFycmF5ID0gZGF0YTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyNpZmRlZiBQQ0lETUEKKwkJaWYgKHMtPnN1YmRldl9mbGFncyAmIFNERl9MU0FNUEwpCisJCQlsYXJyYXlbaV0gPSBsZTMyX3RvX2NwdShsYXJyYXlbaV0pOworCQllbHNlCisJCQlhcnJheVtpXSA9IGxlMTZfdG9fY3B1KGFycmF5W2ldKTsKKyNlbmRpZgorCQlpZiAocy0+c3ViZGV2X2ZsYWdzICYgU0RGX0xTQU1QTCkKKwkJCWxhcnJheVtpXSArPSBkZXZwcml2LT5haV9vZmZzZXRbY2hhbl9pbmRleF07CisJCWVsc2UKKwkJCWFycmF5W2ldICs9IGRldnByaXYtPmFpX29mZnNldFtjaGFuX2luZGV4XTsKKwkJY2hhbl9pbmRleCsrOworCQljaGFuX2luZGV4ICU9IGFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOworCX0KK30KKworI2lmZGVmIFBDSURNQQorCitzdGF0aWMgaW50IG5pX2FpX3NldHVwX01JVEVfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQUlfU1VCREVWOworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJldHZhbCA9IG5pX3JlcXVlc3RfYWlfbWl0ZV9jaGFubmVsKGRldik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKy8vICAgICAgcnRfcHJpbnRrKCJjb21lZGlfZGVidWc6IHVzaW5nIG1pdGUgY2hhbm5lbCAlaSBmb3IgYWkuXG4iLCBkZXZwcml2LT5haV9taXRlX2NoYW4tPmNoYW5uZWwpOworCisJLyogd3JpdGUgYWxsb2MgdGhlIGVudGlyZSBidWZmZXIgKi8KKwljb21lZGlfYnVmX3dyaXRlX2FsbG9jKHMtPmFzeW5jLCBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3opOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmKGRldnByaXYtPmFpX21pdGVfY2hhbiA9PSBOVUxMKQorCXsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlPOworCX0KKworCXN3aXRjaCAoYm9hcmR0eXBlLnJlZ190eXBlKSB7CisJY2FzZSBuaV9yZWdfNjExeDoKKwljYXNlIG5pX3JlZ182MTQzOgorCQltaXRlX3ByZXBfZG1hKGRldnByaXYtPmFpX21pdGVfY2hhbiwgMzIsIDE2KTsKKwkJYnJlYWs7CisJY2FzZSBuaV9yZWdfNjI4eDoKKwkJbWl0ZV9wcmVwX2RtYShkZXZwcml2LT5haV9taXRlX2NoYW4sIDMyLCAzMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1pdGVfcHJlcF9kbWEoZGV2cHJpdi0+YWlfbWl0ZV9jaGFuLCAxNiwgMTYpOworCQlicmVhazsKKwl9OworCS8qc3RhcnQgdGhlIE1JVEUgKi8KKwltaXRlX2RtYV9hcm0oZGV2cHJpdi0+YWlfbWl0ZV9jaGFuKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX2FvX3NldHVwX01JVEVfZG1hKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQU9fU1VCREVWOworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJldHZhbCA9IG5pX3JlcXVlc3RfYW9fbWl0ZV9jaGFubmVsKGRldik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qIHJlYWQgYWxsb2MgdGhlIGVudGlyZSBidWZmZXIgKi8KKwljb21lZGlfYnVmX3JlYWRfYWxsb2Mocy0+YXN5bmMsIHMtPmFzeW5jLT5wcmVhbGxvY19idWZzeik7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJaWYgKGRldnByaXYtPmFvX21pdGVfY2hhbikgeworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgKG5pX3JlZ182MTF4IHwgbmlfcmVnXzY3MTMpKSB7CisJCQltaXRlX3ByZXBfZG1hKGRldnByaXYtPmFvX21pdGVfY2hhbiwgMzIsIDMyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGRvaW5nIDMyIGluc3RlYWQgb2YgMTYgYml0IHdpZGUgdHJhbnNmZXJzIGZyb20gbWVtb3J5CisJCQkgICBtYWtlcyB0aGUgbWl0ZSBkbyAzMiBiaXQgcGNpIHRyYW5zZmVycywgZG91YmxpbmcgcGNpIGJhbmR3aWR0aC4gKi8KKwkJCW1pdGVfcHJlcF9kbWEoZGV2cHJpdi0+YW9fbWl0ZV9jaGFuLCAxNiwgMzIpOworCQl9CisJCW1pdGVfZG1hX2FybShkZXZwcml2LT5hb19taXRlX2NoYW4pOworCX0gZWxzZQorCQlyZXR2YWwgPSAtRUlPOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworI2VuZGlmIC8vIFBDSURNQQorCisvKgorICAgdXNlZCBmb3IgYm90aCBjYW5jZWwgaW9jdGwgYW5kIGJvYXJkIGluaXRpYWxpemF0aW9uCisKKyAgIHRoaXMgaXMgcHJldHR5IGhhcnNoIGZvciBhIGNhbmNlbCwgYnV0IGl0IHdvcmtzLi4uCisgKi8KKworc3RhdGljIGludCBuaV9haV9yZXNldChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCW5pX3JlbGVhc2VfYWlfbWl0ZV9jaGFubmVsKGRldik7CisJLyogYWkgY29uZmlndXJhdGlvbiAqLworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9Db25maWd1cmF0aW9uX1N0YXJ0IHwgQUlfUmVzZXQsCisJCUpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKworCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyLAorCQlBSV9TQ19UQ19JbnRlcnJ1cHRfRW5hYmxlIHwgQUlfU1RBUlQxX0ludGVycnVwdF9FbmFibGUgfAorCQlBSV9TVEFSVDJfSW50ZXJydXB0X0VuYWJsZSB8IEFJX1NUQVJUX0ludGVycnVwdF9FbmFibGUgfAorCQlBSV9TVE9QX0ludGVycnVwdF9FbmFibGUgfCBBSV9FcnJvcl9JbnRlcnJ1cHRfRW5hYmxlIHwKKwkJQUlfRklGT19JbnRlcnJ1cHRfRW5hYmxlLCAwKTsKKworCW5pX2NsZWFyX2FpX2ZpZm8oZGV2KTsKKworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxNDMpCisJCW5pX3dyaXRlYigwLCBNaXNjX0NvbW1hbmQpOworCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0Rpc2FybSwgQUlfQ29tbWFuZF8xX1JlZ2lzdGVyKTsJLyogcmVzZXQgcHVsc2VzICovCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsCisJCUFJX1N0YXJ0X1N0b3AgfCBBSV9Nb2RlXzFfUmVzZXJ2ZWQgLyp8IEFJX1RyaWdnZXJfT25jZSAqLyAsCisJCUFJX01vZGVfMV9SZWdpc3Rlcik7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDB4MDAwMCwgQUlfTW9kZV8yX1JlZ2lzdGVyKTsKKwkvKiBnZW5lcmF0ZSBGSUZPIGludGVycnVwdHMgb24gbm9uLWVtcHR5ICovCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsICgwIDw8IDYpIHwgMHgwMDAwLCBBSV9Nb2RlXzNfUmVnaXN0ZXIpOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxMXgpIHsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NISUZUSU5fUHVsc2VfV2lkdGggfAorCQkJQUlfU09DX1BvbGFyaXR5IHwKKwkJCUFJX0xPQ0FMTVVYX0NMS19QdWxzZV9XaWR0aCwgQUlfUGVyc29uYWxfUmVnaXN0ZXIpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU0NBTl9JTl9QUk9HX091dHB1dF9TZWxlY3QoMykgfAorCQkJQUlfRVhUTVVYX0NMS19PdXRwdXRfU2VsZWN0KDApIHwKKwkJCUFJX0xPQ0FMTVVYX0NMS19PdXRwdXRfU2VsZWN0KDIpIHwKKwkJCUFJX1NDX1RDX091dHB1dF9TZWxlY3QoMykgfAorCQkJQUlfQ09OVkVSVF9PdXRwdXRfU2VsZWN0KEFJX0NPTlZFUlRfT3V0cHV0X0VuYWJsZV9IaWdoKSwKKwkJCUFJX091dHB1dF9Db250cm9sX1JlZ2lzdGVyKTsKKwl9IGVsc2UgaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykgeworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU0hJRlRJTl9QdWxzZV9XaWR0aCB8CisJCQlBSV9TT0NfUG9sYXJpdHkgfAorCQkJQUlfTE9DQUxNVVhfQ0xLX1B1bHNlX1dpZHRoLCBBSV9QZXJzb25hbF9SZWdpc3Rlcik7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TQ0FOX0lOX1BST0dfT3V0cHV0X1NlbGVjdCgzKSB8CisJCQlBSV9FWFRNVVhfQ0xLX091dHB1dF9TZWxlY3QoMCkgfAorCQkJQUlfTE9DQUxNVVhfQ0xLX091dHB1dF9TZWxlY3QoMikgfAorCQkJQUlfU0NfVENfT3V0cHV0X1NlbGVjdCgzKSB8CisJCQlBSV9DT05WRVJUX091dHB1dF9TZWxlY3QoQUlfQ09OVkVSVF9PdXRwdXRfRW5hYmxlX0xvdyksCisJCQlBSV9PdXRwdXRfQ29udHJvbF9SZWdpc3Rlcik7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgYWlfb3V0cHV0X2NvbnRyb2xfYml0czsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NISUZUSU5fUHVsc2VfV2lkdGggfAorCQkJQUlfU09DX1BvbGFyaXR5IHwKKwkJCUFJX0NPTlZFUlRfUHVsc2VfV2lkdGggfAorCQkJQUlfTE9DQUxNVVhfQ0xLX1B1bHNlX1dpZHRoLCBBSV9QZXJzb25hbF9SZWdpc3Rlcik7CisJCWFpX291dHB1dF9jb250cm9sX2JpdHMgPSBBSV9TQ0FOX0lOX1BST0dfT3V0cHV0X1NlbGVjdCgzKSB8CisJCQlBSV9FWFRNVVhfQ0xLX091dHB1dF9TZWxlY3QoMCkgfAorCQkJQUlfTE9DQUxNVVhfQ0xLX091dHB1dF9TZWxlY3QoMikgfAorCQkJQUlfU0NfVENfT3V0cHV0X1NlbGVjdCgzKTsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjIyeCkKKwkJCWFpX291dHB1dF9jb250cm9sX2JpdHMgfD0KKwkJCQlBSV9DT05WRVJUX091dHB1dF9TZWxlY3QKKwkJCQkoQUlfQ09OVkVSVF9PdXRwdXRfRW5hYmxlX0hpZ2gpOworCQllbHNlCisJCQlhaV9vdXRwdXRfY29udHJvbF9iaXRzIHw9CisJCQkJQUlfQ09OVkVSVF9PdXRwdXRfU2VsZWN0CisJCQkJKEFJX0NPTlZFUlRfT3V0cHV0X0VuYWJsZV9Mb3cpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgYWlfb3V0cHV0X2NvbnRyb2xfYml0cywKKwkJCUFJX091dHB1dF9Db250cm9sX1JlZ2lzdGVyKTsKKwl9CisJLyogdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLCBiZWNhdXNlIHRoZXJlCisJICogYXJlIG5vIGJhY2t1cCByZWdpc3RlcnMgaW4gZGV2cHJpdi4gIElmIHlvdSB3YW50IHRvIGNoYW5nZQorCSAqIGFueSBvZiB0aGVzZSwgYWRkIGEgYmFja3VwIHJlZ2lzdGVyIGFuZCBvdGhlciBhcHByb3ByaWF0ZSBjb2RlOgorCSAqICAgICAgQUlfTW9kZV8xX1JlZ2lzdGVyCisJICogICAgICBBSV9Nb2RlXzNfUmVnaXN0ZXIKKwkgKiAgICAgIEFJX1BlcnNvbmFsX1JlZ2lzdGVyCisJICogICAgICBBSV9PdXRwdXRfQ29udHJvbF9SZWdpc3RlcgorCSAqLworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TQ19UQ19FcnJvcl9Db25maXJtIHwgQUlfU1RBUlRfSW50ZXJydXB0X0FjayB8IEFJX1NUQVJUMl9JbnRlcnJ1cHRfQWNrIHwgQUlfU1RBUlQxX0ludGVycnVwdF9BY2sgfCBBSV9TQ19UQ19JbnRlcnJ1cHRfQWNrIHwgQUlfRXJyb3JfSW50ZXJydXB0X0FjayB8IEFJX1NUT1BfSW50ZXJydXB0X0FjaywgSW50ZXJydXB0X0FfQWNrX1JlZ2lzdGVyKTsJLyogY2xlYXIgaW50ZXJydXB0cyAqLworCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NvbmZpZ3VyYXRpb25fRW5kLCBKb2ludF9SZXNldF9SZWdpc3Rlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9haV9wb2xsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJaW50IGNvdW50OworCisJLy8gbG9jayB0byBhdm9pZCByYWNlIHdpdGggaW50ZXJydXB0IGhhbmRsZXIKKwlpZiAoaW5faW50ZXJydXB0KCkgPT0gMCkKKwkJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisjaWZuZGVmIFBDSURNQQorCW5pX2hhbmRsZV9maWZvX2RyZWdzKGRldik7CisjZWxzZQorCW5pX3N5bmNfYWlfZG1hKGRldik7CisjZW5kaWYKKwljb3VudCA9IHMtPmFzeW5jLT5idWZfd3JpdGVfY291bnQgLSBzLT5hc3luYy0+YnVmX3JlYWRfY291bnQ7CisJaWYgKGluX2ludGVycnVwdCgpID09IDApCisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgbmlfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgbjsKKwljb25zdCB1bnNpZ25lZCBpbnQgbWFzayA9ICgxIDw8IGJvYXJkdHlwZS5hZGJpdHMpIC0gMTsKKwl1bnNpZ25lZCBzaWduYml0czsKKwl1bnNpZ25lZCBzaG9ydCBkOworCXVuc2lnbmVkIGxvbmcgZGw7CisKKwluaV9sb2FkX2NoYW5uZWxnYWluX2xpc3QoZGV2LCAxLCAmaW5zbi0+Y2hhbnNwZWMpOworCisJbmlfY2xlYXJfYWlfZmlmbyhkZXYpOworCisJc2lnbmJpdHMgPSBkZXZwcml2LT5haV9vZmZzZXRbMF07CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkgeworCQlmb3IgKG4gPSAwOyBuIDwgbnVtX2FkY19zdGFnZXNfNjExeDsgbisrKSB7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfQ09OVkVSVF9QdWxzZSwKKwkJCQlBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJfQorCQlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfQ09OVkVSVF9QdWxzZSwKKwkJCQlBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCQkJLyogVGhlIDYxMXggaGFzIHNjcmV3eSAzMi1iaXQgRklGT3MuICovCisJCQlkID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBOSV9USU1FT1VUOyBpKyspIHsKKwkJCQlpZiAobmlfcmVhZGIoWFhYX1N0YXR1cykgJiAweDgwKSB7CisJCQkJCWQgPSAobmlfcmVhZGwoQURDX0ZJRk9fRGF0YV82MTF4KSA+PiAxNikKKwkJCQkJCSYgMHhmZmZmOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKCEoZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwKKwkJCQkJCQlBSV9TdGF0dXNfMV9SZWdpc3RlcikgJgorCQkJCQkJQUlfRklGT19FbXB0eV9TdCkpIHsKKwkJCQkJZCA9IG5pX3JlYWRsKEFEQ19GSUZPX0RhdGFfNjExeCkgJgorCQkJCQkJMHhmZmZmOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA9PSBOSV9USU1FT1VUKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgibmlfbWlvX2NvbW1vbjogdGltZW91dCBpbiA2MTF4IG5pX2FpX2luc25fcmVhZFxuIik7CisJCQkJcmV0dXJuIC1FVElNRTsKKwkJCX0KKwkJCWQgKz0gc2lnbmJpdHM7CisJCQlkYXRhW25dID0gZDsKKwkJfQorCX0gZWxzZSBpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTQzKSB7CisJCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9DT05WRVJUX1B1bHNlLAorCQkJCUFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisKKwkJCS8qIFRoZSA2MTQzIGhhcyAzMi1iaXQgRklGT3MuIFlvdSBuZWVkIHRvIHN0cm9iZSBhIGJpdCB0byBtb3ZlIGEgc2luZ2xlIDE2Yml0IHN0cmFuZGVkIHNhbXBsZSBpbnRvIHRoZSBGSUZPICovCisJCQlkbCA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgTklfVElNRU9VVDsgaSsrKSB7CisJCQkJaWYgKG5pX3JlYWRsKEFJRklGT19TdGF0dXNfNjE0MykgJiAweDAxKSB7CisJCQkJCW5pX3dyaXRlbCgweDAxLCBBSUZJRk9fQ29udHJvbF82MTQzKTsJLy8gR2V0IHN0cmFuZGVkIHNhbXBsZSBpbnRvIEZJRk8KKwkJCQkJZGwgPSBuaV9yZWFkbChBSUZJRk9fRGF0YV82MTQzKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKGkgPT0gTklfVElNRU9VVCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIm5pX21pb19jb21tb246IHRpbWVvdXQgaW4gNjE0MyBuaV9haV9pbnNuX3JlYWRcbiIpOworCQkJCXJldHVybiAtRVRJTUU7CisJCQl9CisJCQlkYXRhW25dID0gKCgoZGwgPj4gMTYpICYgMHhGRkZGKSArIHNpZ25iaXRzKSAmIDB4RkZGRjsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9DT05WRVJUX1B1bHNlLAorCQkJCUFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCQlmb3IgKGkgPSAwOyBpIDwgTklfVElNRU9VVDsgaSsrKSB7CisJCQkJaWYgKCEoZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwKKwkJCQkJCQlBSV9TdGF0dXNfMV9SZWdpc3RlcikgJgorCQkJCQkJQUlfRklGT19FbXB0eV9TdCkpCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGkgPT0gTklfVElNRU9VVCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIm5pX21pb19jb21tb246IHRpbWVvdXQgaW4gbmlfYWlfaW5zbl9yZWFkXG4iKTsKKwkJCQlyZXR1cm4gLUVUSU1FOworCQkJfQorCQkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCQkJZGF0YVtuXSA9CisJCQkJCW5pX3JlYWRsKE1fT2Zmc2V0X0FJX0ZJRk9fRGF0YSkgJiBtYXNrOworCQkJfSBlbHNlIHsKKwkJCQlkID0gbmlfcmVhZHcoQURDX0ZJRk9fRGF0YV9SZWdpc3Rlcik7CisJCQkJZCArPSBzaWduYml0czsJLyogc3VidGxlOiBuZWVkcyB0byBiZSBzaG9ydCBhZGRpdGlvbiAqLworCQkJCWRhdGFbbl0gPSBkOworCQkJfQorCQl9CisJfQorCXJldHVybiBpbnNuLT5uOworfQorCit2b2lkIG5pX3ByaW1lX2NoYW5uZWxnYWluX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaW50IGk7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NPTlZFUlRfUHVsc2UsIEFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJZm9yIChpID0gMDsgaSA8IE5JX1RJTUVPVVQ7ICsraSkgeworCQlpZiAoIShkZXZwcml2LT5zdGNfcmVhZHcoZGV2LAorCQkJCQlBSV9TdGF0dXNfMV9SZWdpc3RlcikgJgorCQkJCUFJX0ZJRk9fRW1wdHlfU3QpKSB7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMSwgQURDX0ZJRk9fQ2xlYXIpOworCQkJcmV0dXJuOworCQl9CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJfQorCXJ0X3ByaW50aygibmlfbWlvX2NvbW1vbjogdGltZW91dCBsb2FkaW5nIGNoYW5uZWwvZ2FpbiBsaXN0XG4iKTsKK30KKworc3RhdGljIHZvaWQgbmlfbV9zZXJpZXNfbG9hZF9jaGFubmVsZ2Fpbl9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXVuc2lnbmVkIGludCBuX2NoYW4sIHVuc2lnbmVkIGludCAqbGlzdCkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbiwgcmFuZ2UsIGFyZWY7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBkaXRoZXI7CisJdW5zaWduZWQgcmFuZ2VfY29kZTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAxLCBDb25maWd1cmF0aW9uX01lbW9yeV9DbGVhcik7CisKKy8vICAgICAgb2Zmc2V0ID0gMSA8PCAoYm9hcmR0eXBlLmFkYml0cyAtIDEpOworCWlmICgobGlzdFswXSAmIENSX0FMVF9TT1VSQ0UpKSB7CisJCXVuc2lnbmVkIGJ5cGFzc19iaXRzOworCQljaGFuID0gQ1JfQ0hBTihsaXN0WzBdKTsKKwkJcmFuZ2UgPSBDUl9SQU5HRShsaXN0WzBdKTsKKwkJcmFuZ2VfY29kZSA9IG5pX2dhaW5sa3VwW2JvYXJkdHlwZS5nYWlubGt1cF1bcmFuZ2VdOworCQlkaXRoZXIgPSAoKGxpc3RbMF0gJiBDUl9BTFRfRklMVEVSKSAhPSAwKTsKKwkJYnlwYXNzX2JpdHMgPSBNU2VyaWVzX0FJX0J5cGFzc19Db25maWdfRklGT19CaXQ7CisJCWJ5cGFzc19iaXRzIHw9IGNoYW47CisJCWJ5cGFzc19iaXRzIHw9CisJCQkoZGV2cHJpdi0+CisJCQlhaV9jYWxpYl9zb3VyY2UpICYgKE1TZXJpZXNfQUlfQnlwYXNzX0NhbF9TZWxfUG9zX01hc2sgfAorCQkJTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9OZWdfTWFzayB8CisJCQlNU2VyaWVzX0FJX0J5cGFzc19Nb2RlX011eF9NYXNrIHwKKwkJCU1TZXJpZXNfQU9fQnlwYXNzX0FPX0NhbF9TZWxfTWFzayk7CisJCWJ5cGFzc19iaXRzIHw9IE1TZXJpZXNfQUlfQnlwYXNzX0dhaW5fQml0cyhyYW5nZV9jb2RlKTsKKwkJaWYgKGRpdGhlcikKKwkJCWJ5cGFzc19iaXRzIHw9IE1TZXJpZXNfQUlfQnlwYXNzX0RpdGhlcl9CaXQ7CisJCS8vIGRvbid0IHVzZSAyJ3MgY29tcGxlbWVudCBlbmNvZGluZworCQlieXBhc3NfYml0cyB8PSBNU2VyaWVzX0FJX0J5cGFzc19Qb2xhcml0eV9CaXQ7CisJCW5pX3dyaXRlbChieXBhc3NfYml0cywgTV9PZmZzZXRfQUlfQ29uZmlnX0ZJRk9fQnlwYXNzKTsKKwl9IGVsc2UgeworCQluaV93cml0ZWwoMCwgTV9PZmZzZXRfQUlfQ29uZmlnX0ZJRk9fQnlwYXNzKTsKKwl9CisJb2Zmc2V0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuOyBpKyspIHsKKwkJdW5zaWduZWQgY29uZmlnX2JpdHMgPSAwOworCQljaGFuID0gQ1JfQ0hBTihsaXN0W2ldKTsKKwkJYXJlZiA9IENSX0FSRUYobGlzdFtpXSk7CisJCXJhbmdlID0gQ1JfUkFOR0UobGlzdFtpXSk7CisJCWRpdGhlciA9ICgobGlzdFtpXSAmIENSX0FMVF9GSUxURVIpICE9IDApOworCisJCXJhbmdlX2NvZGUgPSBuaV9nYWlubGt1cFtib2FyZHR5cGUuZ2FpbmxrdXBdW3JhbmdlXTsKKwkJZGV2cHJpdi0+YWlfb2Zmc2V0W2ldID0gb2Zmc2V0OworCQlzd2l0Y2ggKGFyZWYpIHsKKwkJY2FzZSBBUkVGX0RJRkY6CisJCQljb25maWdfYml0cyB8PQorCQkJCU1TZXJpZXNfQUlfQ29uZmlnX0NoYW5uZWxfVHlwZV9EaWZmZXJlbnRpYWxfQml0czsKKwkJCWJyZWFrOworCQljYXNlIEFSRUZfQ09NTU9OOgorCQkJY29uZmlnX2JpdHMgfD0KKwkJCQlNU2VyaWVzX0FJX0NvbmZpZ19DaGFubmVsX1R5cGVfQ29tbW9uX1JlZl9CaXRzOworCQkJYnJlYWs7CisJCWNhc2UgQVJFRl9HUk9VTkQ6CisJCQljb25maWdfYml0cyB8PQorCQkJCU1TZXJpZXNfQUlfQ29uZmlnX0NoYW5uZWxfVHlwZV9Hcm91bmRfUmVmX0JpdHM7CisJCQlicmVhazsKKwkJY2FzZSBBUkVGX09USEVSOgorCQkJYnJlYWs7CisJCX0KKwkJY29uZmlnX2JpdHMgfD0gTVNlcmllc19BSV9Db25maWdfQ2hhbm5lbF9CaXRzKGNoYW4pOworCQljb25maWdfYml0cyB8PQorCQkJTVNlcmllc19BSV9Db25maWdfQmFua19CaXRzKGJvYXJkdHlwZS5yZWdfdHlwZSwgY2hhbik7CisJCWNvbmZpZ19iaXRzIHw9IE1TZXJpZXNfQUlfQ29uZmlnX0dhaW5fQml0cyhyYW5nZV9jb2RlKTsKKwkJaWYgKGkgPT0gbl9jaGFuIC0gMSkKKwkJCWNvbmZpZ19iaXRzIHw9IE1TZXJpZXNfQUlfQ29uZmlnX0xhc3RfQ2hhbm5lbF9CaXQ7CisJCWlmIChkaXRoZXIpCisJCQljb25maWdfYml0cyB8PSBNU2VyaWVzX0FJX0NvbmZpZ19EaXRoZXJfQml0OworCQkvLyBkb24ndCB1c2UgMidzIGNvbXBsZW1lbnQgZW5jb2RpbmcKKwkJY29uZmlnX2JpdHMgfD0gTVNlcmllc19BSV9Db25maWdfUG9sYXJpdHlfQml0OworCQluaV93cml0ZXcoY29uZmlnX2JpdHMsIE1fT2Zmc2V0X0FJX0NvbmZpZ19GSUZPX0RhdGEpOworCX0KKwluaV9wcmltZV9jaGFubmVsZ2Fpbl9saXN0KGRldik7Cit9CisKKy8qCisgKiBOb3RlcyBvbiB0aGUgNjExMCBhbmQgNjExMToKKyAqIFRoZXNlIGJvYXJkcyBhIHNsaWdodGx5IGRpZmZlcmVudCB0aGFuIHRoZSByZXN0IG9mIHRoZSBzZXJpZXMsIHNpbmNlCisgKiB0aGV5IGhhdmUgbXVsdGlwbGUgQS9EIGNvbnZlcnRlcnMuCisgKiBGcm9tIHRoZSBkcml2ZXIgc2lkZSwgdGhlIGNvbmZpZ3VyYXRpb24gbWVtb3J5IGlzIGEKKyAqIGxpdHRsZSBkaWZmZXJlbnQuCisgKiBDb25maWd1cmF0aW9uIE1lbW9yeSBMb3c6CisgKiAgIGJpdHMgMTUtOTogc2FtZQorICogICBiaXQgODogdW5pcG9sYXIvYmlwb2xhciAoc2hvdWxkIGJlIDAgZm9yIGJpcG9sYXIpCisgKiAgIGJpdHMgMC0zOiBnYWluLiAgVGhpcyBpcyA0IGJpdHMgaW5zdGVhZCBvZiAzIGZvciB0aGUgb3RoZXIgYm9hcmRzCisgKiAgICAgICAxMDAxIGdhaW49MC4xICgrLy0gNTApCisgKiAgICAgICAxMDEwIDAuMgorICogICAgICAgMTAxMSAwLjEKKyAqICAgICAgIDAwMDEgMQorICogICAgICAgMDAxMCAyCisgKiAgICAgICAwMDExIDUKKyAqICAgICAgIDAxMDAgMTAKKyAqICAgICAgIDAxMDEgMjAKKyAqICAgICAgIDAxMTAgNTAKKyAqIENvbmZpZ3VyYXRpb24gTWVtb3J5IEhpZ2g6CisgKiAgIGJpdHMgMTItMTQ6IENoYW5uZWwgVHlwZQorICogICAgICAgMDAxIGZvciBkaWZmZXJlbnRpYWwKKyAqICAgICAgIDAwMCBmb3IgY2FsaWJyYXRpb24KKyAqICAgYml0IDExOiBjb3VwbGluZyAgKHRoaXMgaXMgbm90IGN1cnJlbnRseSBoYW5kbGVkKQorICogICAgICAgMSBBQyBjb3VwbGluZworICogICAgICAgMCBEQyBjb3VwbGluZworICogICBiaXRzIDAtMjogY2hhbm5lbAorICogICAgICAgdmFsaWQgY2hhbm5lbHMgYXJlIDAtMworICovCitzdGF0aWMgdm9pZCBuaV9sb2FkX2NoYW5uZWxnYWluX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBuX2NoYW4sCisJdW5zaWduZWQgaW50ICpsaXN0KQoreworCXVuc2lnbmVkIGludCBjaGFuLCByYW5nZSwgYXJlZjsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaGksIGxvOworCXVuc2lnbmVkIG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgZGl0aGVyOworCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCW5pX21fc2VyaWVzX2xvYWRfY2hhbm5lbGdhaW5fbGlzdChkZXYsIG5fY2hhbiwgbGlzdCk7CisJCXJldHVybjsKKwl9CisJaWYgKG5fY2hhbiA9PSAxICYmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxMXgpCisJCSYmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxNDMpKSB7CisJCWlmIChkZXZwcml2LT5jaGFuZ2Fpbl9zdGF0ZQorCQkJJiYgZGV2cHJpdi0+Y2hhbmdhaW5fc3BlYyA9PSBsaXN0WzBdKSB7CisJCQkvLyByZWFkeSB0byBnby4KKwkJCXJldHVybjsKKwkJfQorCQlkZXZwcml2LT5jaGFuZ2Fpbl9zdGF0ZSA9IDE7CisJCWRldnByaXYtPmNoYW5nYWluX3NwZWMgPSBsaXN0WzBdOworCX0gZWxzZSB7CisJCWRldnByaXYtPmNoYW5nYWluX3N0YXRlID0gMDsKKwl9CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMSwgQ29uZmlndXJhdGlvbl9NZW1vcnlfQ2xlYXIpOworCisJLy8gU2V0IHVwIENhbGlicmF0aW9uIG1vZGUgaWYgcmVxdWlyZWQKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTQzKSB7CisJCWlmICgobGlzdFswXSAmIENSX0FMVF9TT1VSQ0UpCisJCQkmJiAhZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlX2VuYWJsZWQpIHsKKwkJCS8vIFN0cm9iZSBSZWxheSBlbmFibGUgYml0CisJCQluaV93cml0ZXcoZGV2cHJpdi0+CisJCQkJYWlfY2FsaWJfc291cmNlIHwKKwkJCQlDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDNfUmVsYXlPbiwKKwkJCQlDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDMpOworCQkJbmlfd3JpdGV3KGRldnByaXYtPmFpX2NhbGliX3NvdXJjZSwKKwkJCQlDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDMpOworCQkJZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlX2VuYWJsZWQgPSAxOworCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsJLy8gQWxsb3cgcmVsYXlzIHRvIGNoYW5nZQorCQl9IGVsc2UgaWYgKCEobGlzdFswXSAmIENSX0FMVF9TT1VSQ0UpCisJCQkmJiBkZXZwcml2LT5haV9jYWxpYl9zb3VyY2VfZW5hYmxlZCkgeworCQkJLy8gU3Ryb2JlIFJlbGF5IGRpc2FibGUgYml0CisJCQluaV93cml0ZXcoZGV2cHJpdi0+CisJCQkJYWlfY2FsaWJfc291cmNlIHwKKwkJCQlDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDNfUmVsYXlPZmYsCisJCQkJQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzKTsKKwkJCW5pX3dyaXRldyhkZXZwcml2LT5haV9jYWxpYl9zb3VyY2UsCisJCQkJQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzKTsKKwkJCWRldnByaXYtPmFpX2NhbGliX3NvdXJjZV9lbmFibGVkID0gMDsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMCk7CS8vIEFsbG93IHJlbGF5cyB0byBjaGFuZ2UKKwkJfQorCX0KKworCW9mZnNldCA9IDEgPDwgKGJvYXJkdHlwZS5hZGJpdHMgLSAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuOyBpKyspIHsKKwkJaWYgKChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxNDMpCisJCQkmJiAobGlzdFtpXSAmIENSX0FMVF9TT1VSQ0UpKSB7CisJCQljaGFuID0gZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlOworCQl9IGVsc2UgeworCQkJY2hhbiA9IENSX0NIQU4obGlzdFtpXSk7CisJCX0KKwkJYXJlZiA9IENSX0FSRUYobGlzdFtpXSk7CisJCXJhbmdlID0gQ1JfUkFOR0UobGlzdFtpXSk7CisJCWRpdGhlciA9ICgobGlzdFtpXSAmIENSX0FMVF9GSUxURVIpICE9IDApOworCisJCS8qIGZpeCB0aGUgZXh0ZXJuYWwvaW50ZXJuYWwgcmFuZ2UgZGlmZmVyZW5jZXMgKi8KKwkJcmFuZ2UgPSBuaV9nYWlubGt1cFtib2FyZHR5cGUuZ2FpbmxrdXBdW3JhbmdlXTsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkKKwkJCWRldnByaXYtPmFpX29mZnNldFtpXSA9IG9mZnNldDsKKwkJZWxzZQorCQkJZGV2cHJpdi0+YWlfb2Zmc2V0W2ldID0gKHJhbmdlICYgMHgxMDApID8gMCA6IG9mZnNldDsKKworCQloaSA9IDA7CisJCWlmICgobGlzdFtpXSAmIENSX0FMVF9TT1VSQ0UpKSB7CisJCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KQorCQkJCW5pX3dyaXRldyhDUl9DSEFOKGxpc3RbaV0pICYgMHgwMDAzLAorCQkJCQlDYWxpYnJhdGlvbl9DaGFubmVsX1NlbGVjdF82MTF4KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxMXgpCisJCQkJYXJlZiA9IEFSRUZfRElGRjsKKwkJCWVsc2UgaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykKKwkJCQlhcmVmID0gQVJFRl9PVEhFUjsKKwkJCXN3aXRjaCAoYXJlZikgeworCQkJY2FzZSBBUkVGX0RJRkY6CisJCQkJaGkgfD0gQUlfRElGRkVSRU5USUFMOworCQkJCWJyZWFrOworCQkJY2FzZSBBUkVGX0NPTU1PTjoKKwkJCQloaSB8PSBBSV9DT01NT047CisJCQkJYnJlYWs7CisJCQljYXNlIEFSRUZfR1JPVU5EOgorCQkJCWhpIHw9IEFJX0dST1VORDsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVJFRl9PVEhFUjoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQloaSB8PSBBSV9DT05GSUdfQ0hBTk5FTChjaGFuKTsKKworCQluaV93cml0ZXcoaGksIENvbmZpZ3VyYXRpb25fTWVtb3J5X0hpZ2gpOworCisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxNDMpIHsKKwkJCWxvID0gcmFuZ2U7CisJCQlpZiAoaSA9PSBuX2NoYW4gLSAxKQorCQkJCWxvIHw9IEFJX0xBU1RfQ0hBTk5FTDsKKwkJCWlmIChkaXRoZXIpCisJCQkJbG8gfD0gQUlfRElUSEVSOworCisJCQluaV93cml0ZXcobG8sIENvbmZpZ3VyYXRpb25fTWVtb3J5X0xvdyk7CisJCX0KKwl9CisKKwkvKiBwcmltZSB0aGUgY2hhbm5lbC9nYWluIGxpc3QgKi8KKwlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSAhPSBuaV9yZWdfNjExeCkKKwkJJiYgKGJvYXJkdHlwZS5yZWdfdHlwZSAhPSBuaV9yZWdfNjE0MykpIHsKKwkJbmlfcHJpbWVfY2hhbm5lbGdhaW5fbGlzdChkZXYpOworCX0KK30KKworc3RhdGljIGludCBuaV9uc190b190aW1lcihjb25zdCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgbmFub3NlYywKKwlpbnQgcm91bmRfbW9kZSkKK3sKKwlpbnQgZGl2aWRlcjsKKwlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKKwljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwlkZWZhdWx0OgorCQlkaXZpZGVyID0gKG5hbm9zZWMgKyBkZXZwcml2LT5jbG9ja19ucyAvIDIpIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCWJyZWFrOworCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQlkaXZpZGVyID0gKG5hbm9zZWMpIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCWJyZWFrOworCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJZGl2aWRlciA9IChuYW5vc2VjICsgZGV2cHJpdi0+Y2xvY2tfbnMgLSAxKSAvIGRldnByaXYtPmNsb2NrX25zOworCQlicmVhazsKKwl9CisJcmV0dXJuIGRpdmlkZXIgLSAxOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfdGltZXJfdG9fbnMoY29uc3Qgc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCB0aW1lcikKK3sKKwlyZXR1cm4gZGV2cHJpdi0+Y2xvY2tfbnMgKiAodGltZXIgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pX21pbl9haV9zY2FuX3BlcmlvZF9ucyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBudW1fY2hhbm5lbHMpCit7CisJc3dpdGNoIChib2FyZHR5cGUucmVnX3R5cGUpIHsKKwljYXNlIG5pX3JlZ182MTF4OgorCWNhc2UgbmlfcmVnXzYxNDM6CisJCS8vIHNpbXVsdGFuZW91c2x5LXNhbXBsZWQgaW5wdXRzCisJCXJldHVybiBib2FyZHR5cGUuYWlfc3BlZWQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8vIG11bHRpcGxleGVkIGlucHV0cworCQlicmVhazsKKwl9OworCXJldHVybiBib2FyZHR5cGUuYWlfc3BlZWQgKiBudW1fY2hhbm5lbHM7Cit9CisKK3N0YXRpYyBpbnQgbmlfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisJaW50IHNvdXJjZXM7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJaWYgKChjbWQtPmZsYWdzICYgQ01ERl9XUklURSkpIHsKKwkJY21kLT5mbGFncyAmPSB+Q01ERl9XUklURTsKKwl9CisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVyB8IFRSSUdfSU5UIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwlzb3VyY2VzID0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICgoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KQorCQl8fCAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTQzKSkKKwkJc291cmNlcyB8PSBUUklHX05PVzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IHNvdXJjZXM7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIG5vdGUgdGhhdCBtdXR1YWwgY29tcGF0aWJsaXR5IGlzIG5vdCBhbiBpc3N1ZSBoZXJlICovCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmCisJCWNtZC0+c3RhcnRfc3JjICE9IFRSSUdfSU5UICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX09USEVSKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVykKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQkvKiBleHRlcm5hbCB0cmlnZ2VyICovCisJCXVuc2lnbmVkIGludCB0bXAgPSBDUl9DSEFOKGNtZC0+c3RhcnRfYXJnKTsKKworCQlpZiAodG1wID4gMTYpCisJCQl0bXAgPSAxNjsKKwkJdG1wIHw9IChjbWQtPnN0YXJ0X2FyZyAmIChDUl9JTlZFUlQgfCBDUl9FREdFKSk7CisJCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSB0bXApIHsKKwkJCWNtZC0+c3RhcnRfYXJnID0gdG1wOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQkJLyogdHJ1ZSBmb3IgYm90aCBUUklHX05PVyBhbmQgVFJJR19JTlQgKi8KKwkJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBuaV9taW5fYWlfc2Nhbl9wZXJpb2RfbnMoZGV2LAorCQkJCWNtZC0+Y2hhbmxpc3RfbGVuKSkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJbmlfbWluX2FpX3NjYW5fcGVyaW9kX25zKGRldiwKKwkJCQljbWQtPmNoYW5saXN0X2xlbik7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA+IGRldnByaXYtPmNsb2NrX25zICogMHhmZmZmZmYpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBkZXZwcml2LT5jbG9ja19ucyAqIDB4ZmZmZmZmOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQl1bnNpZ25lZCBpbnQgdG1wID0gQ1JfQ0hBTihjbWQtPnNjYW5fYmVnaW5fYXJnKTsKKworCQlpZiAodG1wID4gMTYpCisJCQl0bXAgPSAxNjsKKwkJdG1wIHw9IChjbWQtPnNjYW5fYmVnaW5fYXJnICYgKENSX0lOVkVSVCB8IENSX0VER0UpKTsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gdG1wKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gdG1wOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19PVEhFUiAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZykgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmICgoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KQorCQkJfHwgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykpIHsKKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgYm9hcmR0eXBlLmFpX3NwZWVkKSB7CisJCQkJY21kLT5jb252ZXJ0X2FyZyA9IGJvYXJkdHlwZS5haV9zcGVlZDsKKwkJCQllcnIrKzsKKwkJCX0KKwkJCWlmIChjbWQtPmNvbnZlcnRfYXJnID4gZGV2cHJpdi0+Y2xvY2tfbnMgKiAweGZmZmYpIHsKKwkJCQljbWQtPmNvbnZlcnRfYXJnID0gZGV2cHJpdi0+Y2xvY2tfbnMgKiAweGZmZmY7CisJCQkJZXJyKys7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQl1bnNpZ25lZCBpbnQgdG1wID0gQ1JfQ0hBTihjbWQtPmNvbnZlcnRfYXJnKTsKKworCQlpZiAodG1wID4gMTYpCisJCQl0bXAgPSAxNjsKKwkJdG1wIHw9IChjbWQtPmNvbnZlcnRfYXJnICYgKENSX0FMVF9GSUxURVIgfCBDUl9JTlZFUlQpKTsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gdG1wKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gdG1wOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQl1bnNpZ25lZCBpbnQgbWF4X2NvdW50ID0gMHgwMTAwMDAwMDsKKworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KQorCQkJbWF4X2NvdW50IC09IG51bV9hZGNfc3RhZ2VzXzYxMXg7CisJCWlmIChjbWQtPnN0b3BfYXJnID4gbWF4X2NvdW50KSB7CisJCQljbWQtPnN0b3BfYXJnID0gbWF4X2NvdW50OworCQkJZXJyKys7CisJCX0KKwkJaWYgKGNtZC0+c3RvcF9hcmcgPCAxKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMTsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5zY2FuX2JlZ2luX2FyZzsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQluaV90aW1lcl90b19ucyhkZXYsIG5pX25zX3RvX3RpbWVyKGRldiwKKwkJCQljbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spKTsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKChib2FyZHR5cGUucmVnX3R5cGUgIT0gbmlfcmVnXzYxMXgpCisJCQkmJiAoYm9hcmR0eXBlLnJlZ190eXBlICE9IG5pX3JlZ182MTQzKSkgeworCQkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJCWNtZC0+Y29udmVydF9hcmcgPQorCQkJCW5pX3RpbWVyX3RvX25zKGRldiwgbmlfbnNfdG9fdGltZXIoZGV2LAorCQkJCQljbWQtPmNvbnZlcnRfYXJnLAorCQkJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKSk7CisJCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQkJZXJyKys7CisJCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSICYmCisJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQkJY21kLT5jb252ZXJ0X2FyZyAqIGNtZC0+c2Nhbl9lbmRfYXJnKSB7CisJCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9CisJCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKKwkJCQllcnIrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCB0aW1lcjsKKwlpbnQgbW9kZTEgPSAwOwkJLyogbW9kZTEgaXMgbmVlZGVkIGZvciBib3RoIHN0b3AgYW5kIGNvbnZlcnQgKi8KKwlpbnQgbW9kZTIgPSAwOworCWludCBzdGFydF9zdG9wX3NlbGVjdCA9IDA7CisJdW5zaWduZWQgaW50IHN0b3BfY291bnQ7CisJaW50IGludGVycnVwdF9hX2VuYWJsZSA9IDA7CisKKwlNRFBSSU5USygibmlfYWlfY21kXG4iKTsKKwlpZiAoZGV2LT5pcnEgPT0gMCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiY2Fubm90IHJ1biBjb21tYW5kIHdpdGhvdXQgYW4gaXJxIik7CisJCXJldHVybiAtRUlPOworCX0KKwluaV9jbGVhcl9haV9maWZvKGRldik7CisKKwluaV9sb2FkX2NoYW5uZWxnYWluX2xpc3QoZGV2LCBjbWQtPmNoYW5saXN0X2xlbiwgY21kLT5jaGFubGlzdCk7CisKKwkvKiBzdGFydCBjb25maWd1cmF0aW9uICovCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NvbmZpZ3VyYXRpb25fU3RhcnQsIEpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKworCS8qIGRpc2FibGUgYW5hbG9nIHRyaWdnZXJpbmcgZm9yIG5vdywgc2luY2UgaXQKKwkgKiBpbnRlcmZlcmVzIHdpdGggdGhlIHVzZSBvZiBwZmkwICovCisJZGV2cHJpdi0+YW5fdHJpZ19ldGNfcmVnICY9IH5BbmFsb2dfVHJpZ2dlcl9FbmFibGU7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFuX3RyaWdfZXRjX3JlZywKKwkJQW5hbG9nX1RyaWdnZXJfRXRjX1JlZ2lzdGVyKTsKKworCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfSU5UOgorCWNhc2UgVFJJR19OT1c6CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TVEFSVDJfU2VsZWN0KDApIHwKKwkJCUFJX1NUQVJUMV9TeW5jIHwgQUlfU1RBUlQxX0VkZ2UgfCBBSV9TVEFSVDFfU2VsZWN0KDApLAorCQkJQUlfVHJpZ2dlcl9TZWxlY3RfUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQl7CisJCQlpbnQgY2hhbiA9IENSX0NIQU4oY21kLT5zdGFydF9hcmcpOworCQkJdW5zaWduZWQgaW50IGJpdHMgPSBBSV9TVEFSVDJfU2VsZWN0KDApIHwKKwkJCQlBSV9TVEFSVDFfU3luYyB8IEFJX1NUQVJUMV9TZWxlY3QoY2hhbiArIDEpOworCisJCQlpZiAoY21kLT5zdGFydF9hcmcgJiBDUl9JTlZFUlQpCisJCQkJYml0cyB8PSBBSV9TVEFSVDFfUG9sYXJpdHk7CisJCQlpZiAoY21kLT5zdGFydF9hcmcgJiBDUl9FREdFKQorCQkJCWJpdHMgfD0gQUlfU1RBUlQxX0VkZ2U7CisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgYml0cywKKwkJCQlBSV9UcmlnZ2VyX1NlbGVjdF9SZWdpc3Rlcik7CisJCQlicmVhazsKKwkJfQorCX0KKworCW1vZGUyICY9IH5BSV9QcmVfVHJpZ2dlcjsKKwltb2RlMiAmPSB+QUlfU0NfSW5pdGlhbF9Mb2FkX1NvdXJjZTsKKwltb2RlMiAmPSB+QUlfU0NfUmVsb2FkX01vZGU7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIG1vZGUyLCBBSV9Nb2RlXzJfUmVnaXN0ZXIpOworCisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID09IDEgfHwgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjExeCkKKwkJfHwgKGJvYXJkdHlwZS5yZWdfdHlwZSA9PSBuaV9yZWdfNjE0MykpIHsKKwkJc3RhcnRfc3RvcF9zZWxlY3QgfD0gQUlfU1RPUF9Qb2xhcml0eTsKKwkJc3RhcnRfc3RvcF9zZWxlY3QgfD0gQUlfU1RPUF9TZWxlY3QoMzEpOwkvLyBsb2dpYyBsb3cKKwkJc3RhcnRfc3RvcF9zZWxlY3QgfD0gQUlfU1RPUF9TeW5jOworCX0gZWxzZSB7CisJCXN0YXJ0X3N0b3Bfc2VsZWN0IHw9IEFJX1NUT1BfU2VsZWN0KDE5KTsJLy8gYWkgY29uZmlndXJhdGlvbiBtZW1vcnkKKwl9CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIHN0YXJ0X3N0b3Bfc2VsZWN0LAorCQlBSV9TVEFSVF9TVE9QX1NlbGVjdF9SZWdpc3Rlcik7CisKKwlkZXZwcml2LT5haV9jbWQyID0gMDsKKwlzd2l0Y2ggKGNtZC0+c3RvcF9zcmMpIHsKKwljYXNlIFRSSUdfQ09VTlQ6CisJCXN0b3BfY291bnQgPSBjbWQtPnN0b3BfYXJnIC0gMTsKKworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KSB7CisJCQkvLyBoYXZlIHRvIHRha2UgMyBzdGFnZSBhZGMgcGlwZWxpbmUgaW50byBhY2NvdW50CisJCQlzdG9wX2NvdW50ICs9IG51bV9hZGNfc3RhZ2VzXzYxMXg7CisJCX0KKwkJLyogc3RhZ2UgbnVtYmVyIG9mIHNjYW5zICovCisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCBzdG9wX2NvdW50LCBBSV9TQ19Mb2FkX0FfUmVnaXN0ZXJzKTsKKworCQltb2RlMSB8PSBBSV9TdGFydF9TdG9wIHwgQUlfTW9kZV8xX1Jlc2VydmVkIHwgQUlfVHJpZ2dlcl9PbmNlOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgbW9kZTEsIEFJX01vZGVfMV9SZWdpc3Rlcik7CisJCS8qIGxvYWQgU0MgKFNjYW4gQ291bnQpICovCisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TQ19Mb2FkLCBBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCisJCWRldnByaXYtPmFpX2NvbnRpbnVvdXMgPSAwOworCQlpZiAoc3RvcF9jb3VudCA9PSAwKSB7CisJCQlkZXZwcml2LT5haV9jbWQyIHw9IEFJX0VuZF9Pbl9FbmRfT2ZfU2NhbjsKKwkJCWludGVycnVwdF9hX2VuYWJsZSB8PSBBSV9TVE9QX0ludGVycnVwdF9FbmFibGU7CisJCQkvLyB0aGlzIGlzIHJlcXVpcmVkIHRvIGdldCB0aGUgbGFzdCBzYW1wbGUgZm9yIGNoYW5saXN0X2xlbiA+IDEsIG5vdCBzdXJlIHdoeQorCQkJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gMSkKKwkJCQlzdGFydF9zdG9wX3NlbGVjdCB8PQorCQkJCQlBSV9TVE9QX1BvbGFyaXR5IHwgQUlfU1RPUF9FZGdlOworCQl9CisJCWJyZWFrOworCWNhc2UgVFJJR19OT05FOgorCQkvKiBzdGFnZSBudW1iZXIgb2Ygc2NhbnMgKi8KKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIDAsIEFJX1NDX0xvYWRfQV9SZWdpc3RlcnMpOworCisJCW1vZGUxIHw9IEFJX1N0YXJ0X1N0b3AgfCBBSV9Nb2RlXzFfUmVzZXJ2ZWQgfCBBSV9Db250aW51b3VzOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgbW9kZTEsIEFJX01vZGVfMV9SZWdpc3Rlcik7CisKKwkJLyogbG9hZCBTQyAoU2NhbiBDb3VudCkgKi8KKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NDX0xvYWQsIEFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisKKwkJZGV2cHJpdi0+YWlfY29udGludW91cyA9IDE7CisKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQkvKgorCQkgICBzdG9wIGJpdHMgZm9yIG5vbiA2MTF4IGJvYXJkcworCQkgICBBSV9TSV9TcGVjaWFsX1RyaWdnZXJfRGVsYXk9MAorCQkgICBBSV9QcmVfVHJpZ2dlcj0wCisJCSAgIEFJX1NUQVJUX1NUT1BfU2VsZWN0X1JlZ2lzdGVyOgorCQkgICBBSV9TVEFSVF9Qb2xhcml0eT0wICg/KSAgICAgIHJpc2luZyBlZGdlCisJCSAgIEFJX1NUQVJUX0VkZ2U9MSAgICAgICAgICAgICAgZWRnZSB0cmlnZ2VyZWQKKwkJICAgQUlfU1RBUlRfU3luYz0xICg/KQorCQkgICBBSV9TVEFSVF9TZWxlY3Q9MCAgICAgICAgICAgIFNJX1RDCisJCSAgIEFJX1NUT1BfUG9sYXJpdHk9MCAgICAgICAgICAgcmlzaW5nIGVkZ2UKKwkJICAgQUlfU1RPUF9FZGdlPTAgICAgICAgICAgICAgICBsZXZlbAorCQkgICBBSV9TVE9QX1N5bmM9MQorCQkgICBBSV9TVE9QX1NlbGVjdD0xOSAgICAgICAgICAgIGV4dGVybmFsIHBpbiAoY29uZmlndXJhdGlvbiBtZW0pCisJCSAqLworCQlzdGFydF9zdG9wX3NlbGVjdCB8PSBBSV9TVEFSVF9FZGdlIHwgQUlfU1RBUlRfU3luYzsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIHN0YXJ0X3N0b3Bfc2VsZWN0LAorCQkJQUlfU1RBUlRfU1RPUF9TZWxlY3RfUmVnaXN0ZXIpOworCisJCW1vZGUyIHw9IEFJX1NJX1JlbG9hZF9Nb2RlKDApOworCQkvKiBBSV9TSV9Jbml0aWFsX0xvYWRfU291cmNlPUEgKi8KKwkJbW9kZTIgJj0gfkFJX1NJX0luaXRpYWxfTG9hZF9Tb3VyY2U7CisJCS8vbW9kZTIgfD0gQUlfU0NfUmVsb2FkX01vZGU7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBtb2RlMiwgQUlfTW9kZV8yX1JlZ2lzdGVyKTsKKworCQkvKiBsb2FkIFNJICovCisJCXRpbWVyID0gbmlfbnNfdG9fdGltZXIoZGV2LCBjbWQtPnNjYW5fYmVnaW5fYXJnLAorCQkJVFJJR19ST1VORF9ORUFSRVNUKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIHRpbWVyLCBBSV9TSV9Mb2FkX0FfUmVnaXN0ZXJzKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NJX0xvYWQsIEFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICYgQ1JfRURHRSkKKwkJCXN0YXJ0X3N0b3Bfc2VsZWN0IHw9IEFJX1NUQVJUX0VkZ2U7CisJCS8qIEFJX1NUQVJUX1BvbGFyaXR5PT0xIGlzIGZhbGxpbmcgZWRnZSAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAmIENSX0lOVkVSVCkKKwkJCXN0YXJ0X3N0b3Bfc2VsZWN0IHw9IEFJX1NUQVJUX1BvbGFyaXR5OworCQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBjbWQtPmNvbnZlcnRfc3JjIHx8CisJCQkoY21kLT5zY2FuX2JlZ2luX2FyZyAmIH5DUl9FREdFKSAhPQorCQkJKGNtZC0+Y29udmVydF9hcmcgJiB+Q1JfRURHRSkpCisJCQlzdGFydF9zdG9wX3NlbGVjdCB8PSBBSV9TVEFSVF9TeW5jOworCQlzdGFydF9zdG9wX3NlbGVjdCB8PQorCQkJQUlfU1RBUlRfU2VsZWN0KDEgKyBDUl9DSEFOKGNtZC0+c2Nhbl9iZWdpbl9hcmcpKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIHN0YXJ0X3N0b3Bfc2VsZWN0LAorCQkJQUlfU1RBUlRfU1RPUF9TZWxlY3RfUmVnaXN0ZXIpOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGNtZC0+Y29udmVydF9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJY2FzZSBUUklHX05PVzoKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPT0gMCB8fCBjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfTk9XKQorCQkJdGltZXIgPSAxOworCQllbHNlCisJCQl0aW1lciA9IG5pX25zX3RvX3RpbWVyKGRldiwgY21kLT5jb252ZXJ0X2FyZywKKwkJCQlUUklHX1JPVU5EX05FQVJFU1QpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMSwgQUlfU0kyX0xvYWRfQV9SZWdpc3Rlcik7CS8qIDAsMCBkb2VzIG5vdCB3b3JrLiAqLworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgdGltZXIsIEFJX1NJMl9Mb2FkX0JfUmVnaXN0ZXIpOworCisJCS8qIEFJX1NJMl9SZWxvYWRfTW9kZSA9IGFsdGVybmF0ZSAqLworCQkvKiBBSV9TSTJfSW5pdGlhbF9Mb2FkX1NvdXJjZSA9IEEgKi8KKwkJbW9kZTIgJj0gfkFJX1NJMl9Jbml0aWFsX0xvYWRfU291cmNlOworCQltb2RlMiB8PSBBSV9TSTJfUmVsb2FkX01vZGU7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBtb2RlMiwgQUlfTW9kZV8yX1JlZ2lzdGVyKTsKKworCQkvKiBBSV9TSTJfTG9hZCAqLworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfU0kyX0xvYWQsIEFJX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisKKwkJbW9kZTIgfD0gQUlfU0kyX1JlbG9hZF9Nb2RlOwkvLyBhbHRlcm5hdGUKKwkJbW9kZTIgfD0gQUlfU0kyX0luaXRpYWxfTG9hZF9Tb3VyY2U7CS8vIEIKKworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgbW9kZTIsIEFJX01vZGVfMl9SZWdpc3Rlcik7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCW1vZGUxIHw9IEFJX0NPTlZFUlRfU291cmNlX1NlbGVjdCgxICsgY21kLT5jb252ZXJ0X2FyZyk7CisJCWlmICgoY21kLT5jb252ZXJ0X2FyZyAmIENSX0lOVkVSVCkgPT0gMCkKKwkJCW1vZGUxIHw9IEFJX0NPTlZFUlRfU291cmNlX1BvbGFyaXR5OworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgbW9kZTEsIEFJX01vZGVfMV9SZWdpc3Rlcik7CisKKwkJbW9kZTIgfD0gQUlfU3RhcnRfU3RvcF9HYXRlX0VuYWJsZSB8IEFJX1NDX0dhdGVfRW5hYmxlOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgbW9kZTIsIEFJX01vZGVfMl9SZWdpc3Rlcik7CisKKwkJYnJlYWs7CisJfQorCisJaWYgKGRldi0+aXJxKSB7CisKKwkJLyogaW50ZXJydXB0IG9uIEZJRk8sIGVycm9ycywgU0NfVEMgKi8KKwkJaW50ZXJydXB0X2FfZW5hYmxlIHw9IEFJX0Vycm9yX0ludGVycnVwdF9FbmFibGUgfAorCQkJQUlfU0NfVENfSW50ZXJydXB0X0VuYWJsZTsKKworI2lmbmRlZiBQQ0lETUEKKwkJaW50ZXJydXB0X2FfZW5hYmxlIHw9IEFJX0ZJRk9fSW50ZXJydXB0X0VuYWJsZTsKKyNlbmRpZgorCisJCWlmIChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUworCQkJfHwgKGRldnByaXYtPmFpX2NtZDIgJiBBSV9FbmRfT25fRW5kX09mX1NjYW4pKSB7CisJCQkvKiB3YWtlIG9uIGVuZC1vZi1zY2FuICovCisJCQlkZXZwcml2LT5haW1vZGUgPSBBSU1PREVfU0NBTjsKKwkJfSBlbHNlIHsKKwkJCWRldnByaXYtPmFpbW9kZSA9IEFJTU9ERV9IQUxGX0ZVTEw7CisJCX0KKworCQlzd2l0Y2ggKGRldnByaXYtPmFpbW9kZSkgeworCQljYXNlIEFJTU9ERV9IQUxGX0ZVTEw6CisJCQkvKmdlbmVyYXRlIEZJRk8gaW50ZXJydXB0cyBhbmQgRE1BIHJlcXVlc3RzIG9uIGhhbGYtZnVsbCAqLworI2lmZGVmIFBDSURNQQorCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0ZJRk9fTW9kZV9IRl90b19FLAorCQkJCUFJX01vZGVfM19SZWdpc3Rlcik7CisjZWxzZQorCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0ZJRk9fTW9kZV9IRiwKKwkJCQlBSV9Nb2RlXzNfUmVnaXN0ZXIpOworI2VuZGlmCisJCQlicmVhazsKKwkJY2FzZSBBSU1PREVfU0FNUExFOgorCQkJLypnZW5lcmF0ZSBGSUZPIGludGVycnVwdHMgb24gbm9uLWVtcHR5ICovCisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfRklGT19Nb2RlX05FLAorCQkJCUFJX01vZGVfM19SZWdpc3Rlcik7CisJCQlicmVhazsKKwkJY2FzZSBBSU1PREVfU0NBTjoKKyNpZmRlZiBQQ0lETUEKKwkJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9GSUZPX01vZGVfTkUsCisJCQkJQUlfTW9kZV8zX1JlZ2lzdGVyKTsKKyNlbHNlCisJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQUlfRklGT19Nb2RlX0hGLAorCQkJCUFJX01vZGVfM19SZWdpc3Rlcik7CisjZW5kaWYKKwkJCWludGVycnVwdF9hX2VuYWJsZSB8PSBBSV9TVE9QX0ludGVycnVwdF9FbmFibGU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0Vycm9yX0ludGVycnVwdF9BY2sgfCBBSV9TVE9QX0ludGVycnVwdF9BY2sgfCBBSV9TVEFSVF9JbnRlcnJ1cHRfQWNrIHwgQUlfU1RBUlQyX0ludGVycnVwdF9BY2sgfCBBSV9TVEFSVDFfSW50ZXJydXB0X0FjayB8IEFJX1NDX1RDX0ludGVycnVwdF9BY2sgfCBBSV9TQ19UQ19FcnJvcl9Db25maXJtLCBJbnRlcnJ1cHRfQV9BY2tfUmVnaXN0ZXIpOwkvKiBjbGVhciBpbnRlcnJ1cHRzICovCisKKwkJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXIsCisJCQlpbnRlcnJ1cHRfYV9lbmFibGUsIDEpOworCisJCU1EUFJJTlRLKCJJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXIgPSAweCUwNHhcbiIsCisJCQlkZXZwcml2LT5pbnRfYV9lbmFibGVfcmVnKTsKKwl9IGVsc2UgeworCQkvKiBpbnRlcnJ1cHQgb24gbm90aGluZyAqLworCQluaV9zZXRfYml0cyhkZXYsIEludGVycnVwdF9BX0VuYWJsZV9SZWdpc3RlciwgfjAsIDApOworCisJCS8qIFhYWCBzdGFydCBwb2xsaW5nIGlmIG5lY2Vzc2FyeSAqLworCQlNRFBSSU5USygiaW50ZXJydXB0aW5nIG9uIG5vdGhpbmdcbiIpOworCX0KKworCS8qIGVuZCBjb25maWd1cmF0aW9uICovCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX0NvbmZpZ3VyYXRpb25fRW5kLCBKb2ludF9SZXNldF9SZWdpc3Rlcik7CisKKwlzd2l0Y2ggKGNtZC0+c2Nhbl9iZWdpbl9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LAorCQkJQUlfU0kyX0FybSB8IEFJX1NJX0FybSB8IEFJX0RJVl9Bcm0gfCBBSV9TQ19Bcm0sCisJCQlBSV9Db21tYW5kXzFfUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQkvKiBYWFggQUlfU0lfQXJtPyAqLworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwKKwkJCUFJX1NJMl9Bcm0gfCBBSV9TSV9Bcm0gfCBBSV9ESVZfQXJtIHwgQUlfU0NfQXJtLAorCQkJQUlfQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJfQorCisjaWZkZWYgUENJRE1BCisJeworCQlpbnQgcmV0dmFsID0gbmlfYWlfc2V0dXBfTUlURV9kbWEoZGV2KTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorCS8vbWl0ZV9kdW1wX3JlZ3MoZGV2cHJpdi0+bWl0ZSk7CisjZW5kaWYKKworCXN3aXRjaCAoY21kLT5zdGFydF9zcmMpIHsKKwljYXNlIFRSSUdfTk9XOgorCQkvKiBBSV9TVEFSVDFfUHVsc2UgKi8KKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFJX1NUQVJUMV9QdWxzZSB8IGRldnByaXYtPmFpX2NtZDIsCisJCQlBSV9Db21tYW5kXzJfUmVnaXN0ZXIpOworCQlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0lOVDoKKwkJcy0+YXN5bmMtPmludHRyaWcgPSAmbmlfYWlfaW50dHJpZzsKKwkJYnJlYWs7CisJfQorCisJTURQUklOVEsoImV4aXQgbmlfYWlfY21kXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX2FpX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgdHJpZ251bSkKK3sKKwlpZiAodHJpZ251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBSV9TVEFSVDFfUHVsc2UgfCBkZXZwcml2LT5haV9jbWQyLAorCQlBSV9Db21tYW5kXzJfUmVnaXN0ZXIpOworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX2FpX2NvbmZpZ19hbmFsb2dfdHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IG5pX2FpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19BTkFMT0dfVFJJRzoKKwkJcmV0dXJuIG5pX2FpX2NvbmZpZ19hbmFsb2dfdHJpZyhkZXYsIHMsIGluc24sIGRhdGEpOworCWNhc2UgSU5TTl9DT05GSUdfQUxUX1NPVVJDRToKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCQlpZiAoZGF0YVsxXSAmIH4oTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9Qb3NfTWFzayB8CisJCQkJCU1TZXJpZXNfQUlfQnlwYXNzX0NhbF9TZWxfTmVnX01hc2sgfAorCQkJCQlNU2VyaWVzX0FJX0J5cGFzc19Nb2RlX011eF9NYXNrIHwKKwkJCQkJTVNlcmllc19BT19CeXBhc3NfQU9fQ2FsX1NlbF9NYXNrKSkgeworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlID0gZGF0YVsxXTsKKwkJfSBlbHNlIGlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxNDMpIHsKKwkJCXVuc2lnbmVkIGludCBjYWxpYl9zb3VyY2U7CisKKwkJCWNhbGliX3NvdXJjZSA9IGRhdGFbMV0gJiAweGY7CisKKwkJCWlmIChjYWxpYl9zb3VyY2UgPiAweEYpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWRldnByaXYtPmFpX2NhbGliX3NvdXJjZSA9IGNhbGliX3NvdXJjZTsKKwkJCW5pX3dyaXRldyhjYWxpYl9zb3VyY2UsIENhbGlicmF0aW9uX0NoYW5uZWxfNjE0Myk7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgY2FsaWJfc291cmNlOworCQkJdW5zaWduZWQgaW50IGNhbGliX3NvdXJjZV9hZGp1c3Q7CisKKwkJCWNhbGliX3NvdXJjZSA9IGRhdGFbMV0gJiAweGY7CisJCQljYWxpYl9zb3VyY2VfYWRqdXN0ID0gKGRhdGFbMV0gPj4gNCkgJiAweGZmOworCisJCQlpZiAoY2FsaWJfc291cmNlID49IDgpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlkZXZwcml2LT5haV9jYWxpYl9zb3VyY2UgPSBjYWxpYl9zb3VyY2U7CisJCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTF4KSB7CisJCQkJbmlfd3JpdGViKGNhbGliX3NvdXJjZV9hZGp1c3QsCisJCQkJCUNhbF9HYWluX1NlbGVjdF82MTF4KTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gMjsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBuaV9haV9jb25maWdfYW5hbG9nX3RyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBhLCBiLCBtb2RlYml0czsKKwlpbnQgZXJyID0gMDsKKworCS8qIGRhdGFbMV0gaXMgZmxhZ3MKKwkgKiBkYXRhWzJdIGlzIGFuYWxvZyBsaW5lCisJICogZGF0YVszXSBpcyBzZXQgbGV2ZWwKKwkgKiBkYXRhWzRdIGlzIHJlc2V0IGxldmVsICovCisJaWYgKCFib2FyZHR5cGUuaGFzX2FuYWxvZ190cmlnKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoKGRhdGFbMV0gJiAweGZmZmYwMDAwKSAhPSBDT01FRElfRVZfU0NBTl9CRUdJTikgeworCQlkYXRhWzFdICY9IChDT01FRElfRVZfU0NBTl9CRUdJTiB8IDB4ZmZmZik7CisJCWVycisrOworCX0KKwlpZiAoZGF0YVsyXSA+PSBib2FyZHR5cGUubl9hZGNoYW4pIHsKKwkJZGF0YVsyXSA9IGJvYXJkdHlwZS5uX2FkY2hhbiAtIDE7CisJCWVycisrOworCX0KKwlpZiAoZGF0YVszXSA+IDI1NSkgewkvKiBhICovCisJCWRhdGFbM10gPSAyNTU7CisJCWVycisrOworCX0KKwlpZiAoZGF0YVs0XSA+IDI1NSkgewkvKiBiICovCisJCWRhdGFbNF0gPSAyNTU7CisJCWVycisrOworCX0KKwkvKgorCSAqIDAwIGlnbm9yZQorCSAqIDAxIHNldAorCSAqIDEwIHJlc2V0CisJICoKKwkgKiBtb2RlczoKKwkgKiAgIDEgbGV2ZWw6ICAgICAgICAgICAgICAgICAgICArYi0gICArYS0KKwkgKiAgICAgaGlnaCBtb2RlICAgICAgICAgICAgICAgIDAwIDAwIDAxIDEwCisJICogICAgIGxvdyBtb2RlICAgICAgICAgICAgICAgICAwMCAwMCAxMCAwMQorCSAqICAgMiBsZXZlbDogKGE8YikKKwkgKiAgICAgaHlzdGVyZXNpcyBsb3cgbW9kZSAgICAgIDEwIDAwIDAwIDAxCisJICogICAgIGh5c3RlcmVzaXMgaGlnaCBtb2RlICAgICAwMSAwMCAwMCAxMAorCSAqICAgICBtaWRkbGUgbW9kZSAgICAgICAgICAgICAgMTAgMDEgMDEgMTAKKwkgKi8KKworCWEgPSBkYXRhWzNdOworCWIgPSBkYXRhWzRdOworCW1vZGViaXRzID0gZGF0YVsxXSAmIDB4ZmY7CisJaWYgKG1vZGViaXRzICYgMHhmMCkgeworCQkvKiB0d28gbGV2ZWwgbW9kZSAqLworCQlpZiAoYiA8IGEpIHsKKwkJCS8qIHN3YXAgb3JkZXIgKi8KKwkJCWEgPSBkYXRhWzRdOworCQkJYiA9IGRhdGFbM107CisJCQltb2RlYml0cyA9CisJCQkJKChkYXRhWzFdICYgMHhmKSA8PCA0KSB8ICgoZGF0YVsxXSAmIDB4ZjApID4+CisJCQkJNCk7CisJCX0KKwkJZGV2cHJpdi0+YXRyaWdfbG93ID0gYTsKKwkJZGV2cHJpdi0+YXRyaWdfaGlnaCA9IGI7CisJCXN3aXRjaCAobW9kZWJpdHMpIHsKKwkJY2FzZSAweDgxOgkvKiBsb3cgaHlzdGVyZXNpcyBtb2RlICovCisJCQlkZXZwcml2LT5hdHJpZ19tb2RlID0gNjsKKwkJCWJyZWFrOworCQljYXNlIDB4NDI6CS8qIGhpZ2ggaHlzdGVyZXNpcyBtb2RlICovCisJCQlkZXZwcml2LT5hdHJpZ19tb2RlID0gMzsKKwkJCWJyZWFrOworCQljYXNlIDB4OTY6CS8qIG1pZGRsZSB3aW5kb3cgbW9kZSAqLworCQkJZGV2cHJpdi0+YXRyaWdfbW9kZSA9IDI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRhdGFbMV0gJj0gfjB4ZmY7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIG9uZSBsZXZlbCBtb2RlICovCisJCWlmIChiICE9IDApIHsKKwkJCWRhdGFbNF0gPSAwOworCQkJZXJyKys7CisJCX0KKwkJc3dpdGNoIChtb2RlYml0cykgeworCQljYXNlIDB4MDY6CS8qIGhpZ2ggd2luZG93IG1vZGUgKi8KKwkJCWRldnByaXYtPmF0cmlnX2hpZ2ggPSBhOworCQkJZGV2cHJpdi0+YXRyaWdfbW9kZSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAweDA5OgkvKiBsb3cgd2luZG93IG1vZGUgKi8KKwkJCWRldnByaXYtPmF0cmlnX2xvdyA9IGE7CisJCQlkZXZwcml2LT5hdHJpZ19tb2RlID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGF0YVsxXSAmPSB+MHhmZjsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChlcnIpCisJCXJldHVybiAtRUFHQUlOOworCXJldHVybiA1OworfQorCisvKiBtdW5nZSBkYXRhIGZyb20gdW5zaWduZWQgdG8gMidzIGNvbXBsZW1lbnQgZm9yIGFuYWxvZyBvdXRwdXQgYmlwb2xhciBtb2RlcyAqLworc3RhdGljIHZvaWQgbmlfYW9fbXVuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbnVtX2J5dGVzLCB1bnNpZ25lZCBpbnQgY2hhbl9pbmRleCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyA9IHMtPmFzeW5jOworCXVuc2lnbmVkIGludCByYW5nZTsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBsZW5ndGggPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOworCXNob3J0ICphcnJheSA9IGRhdGE7CisKKwlvZmZzZXQgPSAxIDw8IChib2FyZHR5cGUuYW9iaXRzIC0gMSk7CisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCXJhbmdlID0gQ1JfUkFOR0UoYXN5bmMtPmNtZC5jaGFubGlzdFtjaGFuX2luZGV4XSk7CisJCWlmIChib2FyZHR5cGUuYW9fdW5pcG9sYXIgPT0gMCB8fCAocmFuZ2UgJiAxKSA9PSAwKQorCQkJYXJyYXlbaV0gLT0gb2Zmc2V0OworI2lmZGVmIFBDSURNQQorCQlhcnJheVtpXSA9IGNwdV90b19sZTE2KGFycmF5W2ldKTsKKyNlbmRpZgorCQljaGFuX2luZGV4Kys7CisJCWNoYW5faW5kZXggJT0gYXN5bmMtPmNtZC5jaGFubGlzdF9sZW47CisJfQorfQorCitzdGF0aWMgaW50IG5pX21fc2VyaWVzX2FvX2NvbmZpZ19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHVuc2lnbmVkIGludCBjaGFuc3BlY1tdLCB1bnNpZ25lZCBpbnQgbl9jaGFucywKKwlpbnQgdGltZWQpCit7CisJdW5zaWduZWQgaW50IHJhbmdlOworCXVuc2lnbmVkIGludCBjaGFuOworCXVuc2lnbmVkIGludCBjb25mOworCWludCBpOworCWludCBpbnZlcnQgPSAwOworCisJaWYodGltZWQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGJvYXJkdHlwZS5uX2FvY2hhbjsgKytpKSB7CisJCQlkZXZwcml2LT5hb19jb25mW2ldICY9IH5NU2VyaWVzX0FPX1VwZGF0ZV9UaW1lZF9CaXQ7CisJCQluaV93cml0ZWIoZGV2cHJpdi0+YW9fY29uZltpXSwgTV9PZmZzZXRfQU9fQ29uZmlnX0JhbmsoaSkpOworCQkJbmlfd3JpdGViKDB4ZiwgTV9PZmZzZXRfQU9fV2F2ZWZvcm1fT3JkZXIoaSkpOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBuX2NoYW5zOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNvbWVkaV9rcmFuZ2UgKmtyYW5nZTsKKwkJY2hhbiA9IENSX0NIQU4oY2hhbnNwZWNbaV0pOworCQlyYW5nZSA9IENSX1JBTkdFKGNoYW5zcGVjW2ldKTsKKwkJa3JhbmdlID0gcy0+cmFuZ2VfdGFibGUtPnJhbmdlICsgcmFuZ2U7CisJCWludmVydCA9IDA7CisJCWNvbmYgPSAwOworCQlzd2l0Y2ggKGtyYW5nZS0+bWF4IC0ga3JhbmdlLT5taW4pIHsKKwkJY2FzZSAyMDAwMDAwMDoKKwkJCWNvbmYgfD0gTVNlcmllc19BT19EQUNfUmVmZXJlbmNlXzEwVl9JbnRlcm5hbF9CaXRzOworCQkJbmlfd3JpdGViKDAsIE1fT2Zmc2V0X0FPX1JlZmVyZW5jZV9BdHRlbnVhdGlvbihjaGFuKSk7CisJCQlicmVhazsKKwkJY2FzZSAxMDAwMDAwMDoKKwkJCWNvbmYgfD0gTVNlcmllc19BT19EQUNfUmVmZXJlbmNlXzVWX0ludGVybmFsX0JpdHM7CisJCQluaV93cml0ZWIoMCwgTV9PZmZzZXRfQU9fUmVmZXJlbmNlX0F0dGVudWF0aW9uKGNoYW4pKTsKKwkJCWJyZWFrOworCQljYXNlIDQwMDAwMDA6CisJCQljb25mIHw9IE1TZXJpZXNfQU9fREFDX1JlZmVyZW5jZV8xMFZfSW50ZXJuYWxfQml0czsKKwkJCW5pX3dyaXRlYihNU2VyaWVzX0F0dGVudWF0ZV94NV9CaXQsCisJCQkJTV9PZmZzZXRfQU9fUmVmZXJlbmNlX0F0dGVudWF0aW9uKGNoYW4pKTsKKwkJCWJyZWFrOworCQljYXNlIDIwMDAwMDA6CisJCQljb25mIHw9IE1TZXJpZXNfQU9fREFDX1JlZmVyZW5jZV81Vl9JbnRlcm5hbF9CaXRzOworCQkJbmlfd3JpdGViKE1TZXJpZXNfQXR0ZW51YXRlX3g1X0JpdCwKKwkJCQlNX09mZnNldF9BT19SZWZlcmVuY2VfQXR0ZW51YXRpb24oY2hhbikpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlydF9wcmludGsoIiVzOiBidWchIHVuaGFuZGxlZCBhbyByZWZlcmVuY2Ugdm9sdGFnZVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18pOworCQkJYnJlYWs7CisJCX0KKwkJc3dpdGNoIChrcmFuZ2UtPm1heCArIGtyYW5nZS0+bWluKSB7CisJCWNhc2UgMDoKKwkJCWNvbmYgfD0gTVNlcmllc19BT19EQUNfT2Zmc2V0XzBWX0JpdHM7CisJCQlicmVhazsKKwkJY2FzZSAxMDAwMDAwMDoKKwkJCWNvbmYgfD0gTVNlcmllc19BT19EQUNfT2Zmc2V0XzVWX0JpdHM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJ0X3ByaW50aygiJXM6IGJ1ZyEgdW5oYW5kbGVkIGFvIG9mZnNldCB2b2x0YWdlXG4iLAorCQkJCV9fRlVOQ1RJT05fXyk7CisJCQlicmVhazsKKwkJfQorCQlpZiAodGltZWQpCisJCQljb25mIHw9IE1TZXJpZXNfQU9fVXBkYXRlX1RpbWVkX0JpdDsKKwkJbmlfd3JpdGViKGNvbmYsIE1fT2Zmc2V0X0FPX0NvbmZpZ19CYW5rKGNoYW4pKTsKKwkJZGV2cHJpdi0+YW9fY29uZltjaGFuXSA9IGNvbmY7CisJCW5pX3dyaXRlYihpLCBNX09mZnNldF9BT19XYXZlZm9ybV9PcmRlcihjaGFuKSk7CisJfQorCXJldHVybiBpbnZlcnQ7Cit9CisKK3N0YXRpYyBpbnQgbmlfb2xkX2FvX2NvbmZpZ19jaGFubGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCBjaGFuc3BlY1tdLCB1bnNpZ25lZCBpbnQgbl9jaGFucykKK3sKKwl1bnNpZ25lZCBpbnQgcmFuZ2U7CisJdW5zaWduZWQgaW50IGNoYW47CisJdW5zaWduZWQgaW50IGNvbmY7CisJaW50IGk7CisJaW50IGludmVydCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9jaGFuczsgaSsrKSB7CisJCWNoYW4gPSBDUl9DSEFOKGNoYW5zcGVjW2ldKTsKKwkJcmFuZ2UgPSBDUl9SQU5HRShjaGFuc3BlY1tpXSk7CisJCWNvbmYgPSBBT19DaGFubmVsKGNoYW4pOworCisJCWlmIChib2FyZHR5cGUuYW9fdW5pcG9sYXIpIHsKKwkJCWlmICgocmFuZ2UgJiAxKSA9PSAwKSB7CisJCQkJY29uZiB8PSBBT19CaXBvbGFyOworCQkJCWludmVydCA9ICgxIDw8IChib2FyZHR5cGUuYW9iaXRzIC0gMSkpOworCQkJfSBlbHNlIHsKKwkJCQlpbnZlcnQgPSAwOworCQkJfQorCQkJaWYgKHJhbmdlICYgMikKKwkJCQljb25mIHw9IEFPX0V4dF9SZWY7CisJCX0gZWxzZSB7CisJCQljb25mIHw9IEFPX0JpcG9sYXI7CisJCQlpbnZlcnQgPSAoMSA8PCAoYm9hcmR0eXBlLmFvYml0cyAtIDEpKTsKKwkJfQorCisJCS8qIG5vdCBhbGwgYm9hcmRzIGNhbiBkZWdsaXRjaCwgYnV0IHRoaXMgc2hvdWxkbid0IGh1cnQgKi8KKwkJaWYgKGNoYW5zcGVjW2ldICYgQ1JfREVHTElUQ0gpCisJCQljb25mIHw9IEFPX0RlZ2xpdGNoOworCisJCS8qIGFuYWxvZyByZWZlcmVuY2UgKi8KKwkJLyogQVJFRl9PVEhFUiBjb25uZWN0cyBBTyBncm91bmQgdG8gQUkgZ3JvdW5kLCBpIHRoaW5rICovCisJCWNvbmYgfD0gKENSX0FSRUYoY2hhbnNwZWNbaV0pID09CisJCQlBUkVGX09USEVSKSA/IEFPX0dyb3VuZF9SZWYgOiAwOworCisJCW5pX3dyaXRldyhjb25mLCBBT19Db25maWd1cmF0aW9uKTsKKwkJZGV2cHJpdi0+YW9fY29uZltjaGFuXSA9IGNvbmY7CisJfQorCXJldHVybiBpbnZlcnQ7Cit9CisKK3N0YXRpYyBpbnQgbmlfYW9fY29uZmlnX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IGNoYW5zcGVjW10sIHVuc2lnbmVkIGludCBuX2NoYW5zLCBpbnQgdGltZWQpCit7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQlyZXR1cm4gbmlfbV9zZXJpZXNfYW9fY29uZmlnX2NoYW5saXN0KGRldiwgcywgY2hhbnNwZWMsIG5fY2hhbnMsCisJCQl0aW1lZCk7CisJZWxzZQorCQlyZXR1cm4gbmlfb2xkX2FvX2NvbmZpZ19jaGFubGlzdChkZXYsIHMsIGNoYW5zcGVjLCBuX2NoYW5zKTsKK30KK3N0YXRpYyBpbnQgbmlfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+YW9bQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbmlfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBpbnQgaW52ZXJ0OworCisJaW52ZXJ0ID0gbmlfYW9fY29uZmlnX2NoYW5saXN0KGRldiwgcywgJmluc24tPmNoYW5zcGVjLCAxLCAwKTsKKworCWRldnByaXYtPmFvW2NoYW5dID0gZGF0YVswXTsKKworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgeworCQluaV93cml0ZXcoZGF0YVswXSwgTV9PZmZzZXRfREFDX0RpcmVjdF9EYXRhKGNoYW4pKTsKKwl9IGVsc2UKKwkJbmlfd3JpdGV3KGRhdGFbMF0gXiBpbnZlcnQsCisJCQkoY2hhbikgPyBEQUMxX0RpcmVjdF9EYXRhIDogREFDMF9EaXJlY3RfRGF0YSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9hb19pbnNuX3dyaXRlXzY3MXgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIGludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgaW50IGludmVydDsKKworCWFvX3dpbl9vdXQoMSA8PCBjaGFuLCBBT19JbW1lZGlhdGVfNjcxeCk7CisJaW52ZXJ0ID0gMSA8PCAoYm9hcmR0eXBlLmFvYml0cyAtIDEpOworCisJbmlfYW9fY29uZmlnX2NoYW5saXN0KGRldiwgcywgJmluc24tPmNoYW5zcGVjLCAxLCAwKTsKKworCWRldnByaXYtPmFvW2NoYW5dID0gZGF0YVswXTsKKwlhb193aW5fb3V0KGRhdGFbMF0gXiBpbnZlcnQsIERBQ3hfRGlyZWN0X0RhdGFfNjcxeChjaGFuKSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9hb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfSEFSRFdBUkVfQlVGRkVSX1NJWkU6CisJCXN3aXRjaChkYXRhWzFdKQorCQl7CisJCWNhc2UgQ09NRURJX09VVFBVVDoKKwkJCWRhdGFbMl0gPSAxICsgYm9hcmR0eXBlLmFvX2ZpZm9fZGVwdGggKiBzaXplb2Yoc2hvcnQpOworCQkJaWYoZGV2cHJpdi0+bWl0ZSkgZGF0YVsyXSArPSBkZXZwcml2LT5taXRlLT5maWZvX3NpemU7CisJCQlicmVhazsKKwkJY2FzZSBDT01FRElfSU5QVVQ6CisJCQlkYXRhWzJdID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBuaV9hb19pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pCit7CisJaW50IHJldDsKKwlpbnQgaW50ZXJydXB0X2JfYml0czsKKwlpbnQgaTsKKwlzdGF0aWMgY29uc3QgaW50IHRpbWVvdXQgPSAxMDAwOworCisJaWYgKHRyaWdudW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBOdWxsIHRyaWcgYXQgYmVnaW5uaW5nIHByZXZlbnQgYW8gc3RhcnQgdHJpZ2dlciBmcm9tIGV4ZWN1dGluZyBtb3JlIHRoYW4KKwkgICBvbmNlIHBlciBjb21tYW5kIChhbmQgZG9pbmcgdGhpbmdzIGxpa2UgdHJ5aW5nIHRvIGFsbG9jYXRlIHRoZSBhbyBkbWEgY2hhbm5lbAorCSAgIG11bHRpcGxlIHRpbWVzKSAqLworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyLAorCQlBT19GSUZPX0ludGVycnVwdF9FbmFibGUgfCBBT19FcnJvcl9JbnRlcnJ1cHRfRW5hYmxlLCAwKTsKKwlpbnRlcnJ1cHRfYl9iaXRzID0gQU9fRXJyb3JfSW50ZXJydXB0X0VuYWJsZTsKKyNpZmRlZiBQQ0lETUEKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgMSwgREFDX0ZJRk9fQ2xlYXIpOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfNnh4eF9tYXNrKQorCQluaV9hb193aW5fb3V0bChkZXYsIDB4NiwgQU9fRklGT19PZmZzZXRfTG9hZF82MTF4KTsKKwlyZXQgPSBuaV9hb19zZXR1cF9NSVRFX2RtYShkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0ID0gbmlfYW9fd2FpdF9mb3JfZG1hX2xvYWQoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKyNlbHNlCisJcmV0ID0gbmlfYW9fcHJlcF9maWZvKGRldiwgcyk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gLUVQSVBFOworCisJaW50ZXJydXB0X2JfYml0cyB8PSBBT19GSUZPX0ludGVycnVwdF9FbmFibGU7CisjZW5kaWYKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMyB8IEFPX05vdF9Bbl9VUERBVEUsCisJCUFPX01vZGVfM19SZWdpc3Rlcik7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX21vZGUzLCBBT19Nb2RlXzNfUmVnaXN0ZXIpOworCS8qIHdhaXQgZm9yIERBQ3MgdG8gYmUgbG9hZGVkICovCisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQljb21lZGlfdWRlbGF5KDEpOworCQlpZiAoKGRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJCUpvaW50X1N0YXR1c18yX1JlZ2lzdGVyKSAmCisJCQkJQU9fVE1SREFDV1JzX0luX1Byb2dyZXNzX1N0KSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IHRpbWVvdXQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgQU9fVE1SREFDV1JzX0luX1Byb2dyZXNzX1N0IHRvIGNsZWFyIik7CisJCXJldHVybiAtRUlPOworCX0KKwkvLyBzdGMgbWFudWFsIHNheXMgd2UgYXJlIG5lZWQgdG8gY2xlYXIgZXJyb3IgaW50ZXJydXB0IGFmdGVyIEFPX1RNUkRBQ1dSc19Jbl9Qcm9ncmVzc19TdCBjbGVhcnMKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fRXJyb3JfSW50ZXJydXB0X0FjaywKKwkJSW50ZXJydXB0X0JfQWNrX1JlZ2lzdGVyKTsKKworCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyLCBpbnRlcnJ1cHRfYl9iaXRzLCAxKTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LAorCQlkZXZwcml2LT4KKwkJYW9fY21kMSB8IEFPX1VJX0FybSB8IEFPX1VDX0FybSB8IEFPX0JDX0FybSB8CisJCUFPX0RBQzFfVXBkYXRlX01vZGUgfCBBT19EQUMwX1VwZGF0ZV9Nb2RlLAorCQlBT19Db21tYW5kXzFfUmVnaXN0ZXIpOworCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX2NtZDIgfCBBT19TVEFSVDFfUHVsc2UsCisJCUFPX0NvbW1hbmRfMl9SZWdpc3Rlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9hb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJaW50IGJpdHM7CisJaW50IGk7CisJdW5zaWduZWQgdHJpZ3ZhcjsKKworCWlmIChkZXYtPmlycSA9PSAwKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJjYW5ub3QgcnVuIGNvbW1hbmQgd2l0aG91dCBhbiBpcnEiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX0NvbmZpZ3VyYXRpb25fU3RhcnQsIEpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19EaXNhcm0sIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnXzZ4eHhfbWFzaykgeworCQlhb193aW5fb3V0KENMRUFSX1dHLCBBT19NaXNjXzYxMXgpOworCisJCWJpdHMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47IGkrKykgeworCQkJaW50IGNoYW47CisKKwkJCWNoYW4gPSBDUl9DSEFOKGNtZC0+Y2hhbmxpc3RbaV0pOworCQkJYml0cyB8PSAxIDw8IGNoYW47CisJCQlhb193aW5fb3V0KGNoYW4sIEFPX1dhdmVmb3JtX0dlbmVyYXRpb25fNjExeCk7CisJCX0KKwkJYW9fd2luX291dChiaXRzLCBBT19UaW1lZF82MTF4KTsKKwl9CisKKwluaV9hb19jb25maWdfY2hhbmxpc3QoZGV2LCBzLCBjbWQtPmNoYW5saXN0LCBjbWQtPmNoYW5saXN0X2xlbiwgMSk7CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX05PTkUpIHsKKwkJZGV2cHJpdi0+YW9fbW9kZTEgfD0gQU9fQ29udGludW91czsKKwkJZGV2cHJpdi0+YW9fbW9kZTEgJj0gfkFPX1RyaWdnZXJfT25jZTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5hb19tb2RlMSAmPSB+QU9fQ29udGludW91czsKKwkJZGV2cHJpdi0+YW9fbW9kZTEgfD0gQU9fVHJpZ2dlcl9PbmNlOworCX0KKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTEsIEFPX01vZGVfMV9SZWdpc3Rlcik7CisJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19JTlQ6CisJY2FzZSBUUklHX05PVzoKKwkJZGV2cHJpdi0+YW9fdHJpZ2dlcl9zZWxlY3QgJj0KKwkJCX4oQU9fU1RBUlQxX1BvbGFyaXR5IHwgQU9fU1RBUlQxX1NlbGVjdCgtMSkpOworCQlkZXZwcml2LT5hb190cmlnZ2VyX3NlbGVjdCB8PSBBT19TVEFSVDFfRWRnZSB8IEFPX1NUQVJUMV9TeW5jOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fdHJpZ2dlcl9zZWxlY3QsCisJCQlBT19UcmlnZ2VyX1NlbGVjdF9SZWdpc3Rlcik7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisgICAgICAgICAgICAgICAgZGV2cHJpdi0+YW9fdHJpZ2dlcl9zZWxlY3QgPSBBT19TVEFSVDFfU2VsZWN0KENSX0NIQU4oY21kLT5zdGFydF9hcmcpKzEpOworCQlpZiAoY21kLT5zdGFydF9hcmcgJiBDUl9JTlZFUlQpCisJCQlkZXZwcml2LT5hb190cmlnZ2VyX3NlbGVjdCB8PSBBT19TVEFSVDFfUG9sYXJpdHk7ICAvLyAwPWFjdGl2ZSBoaWdoLCAxPWFjdGl2ZSBsb3cuIHNlZSBkYXEtc3RjIDMtMjQgKHAxODYpCisJCWlmIChjbWQtPnN0YXJ0X2FyZyAmIENSX0VER0UpCisJCQlkZXZwcml2LT5hb190cmlnZ2VyX3NlbGVjdCB8PSBBT19TVEFSVDFfRWRnZTsgICAgICAvLyAwPWVkZ2UgZGV0ZWN0aW9uIGRpc2FibGVkLCAxPWVuYWJsZWQKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX3RyaWdnZXJfc2VsZWN0LCBBT19UcmlnZ2VyX1NlbGVjdF9SZWdpc3Rlcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJZGV2cHJpdi0+YW9fbW9kZTMgJj0gfkFPX1RyaWdnZXJfTGVuZ3RoOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMywgQU9fTW9kZV8zX1JlZ2lzdGVyKTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMSwgQU9fTW9kZV8xX1JlZ2lzdGVyKTsKKwlkZXZwcml2LT5hb19tb2RlMiAmPSB+QU9fQkNfSW5pdGlhbF9Mb2FkX1NvdXJjZTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTIsIEFPX01vZGVfMl9SZWdpc3Rlcik7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCAweGZmZmZmZiwgQU9fQkNfTG9hZF9BX1JlZ2lzdGVyKTsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgMCwgQU9fQkNfTG9hZF9BX1JlZ2lzdGVyKTsKKwl9CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX0JDX0xvYWQsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fbW9kZTIgJj0gfkFPX1VDX0luaXRpYWxfTG9hZF9Tb3VyY2U7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX21vZGUyLCBBT19Nb2RlXzJfUmVnaXN0ZXIpOworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJaWYoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCXsKKwkJCS8vIHRoaXMgaXMgaG93IHRoZSBOSSBleGFtcGxlIGNvZGUgZG9lcyBpdCBmb3IgbS1zZXJpZXMgYm9hcmRzLCB2ZXJpZmllZCBjb3JyZWN0IHdpdGggNjI1OQorCQkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIGNtZC0+c3RvcF9hcmcgLSAxLCBBT19VQ19Mb2FkX0FfUmVnaXN0ZXIpOworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX1VDX0xvYWQsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCX1lbHNlCisJCXsKKwkJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCBjbWQtPnN0b3BfYXJnLCBBT19VQ19Mb2FkX0FfUmVnaXN0ZXIpOworCQkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX1VDX0xvYWQsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgY21kLT5zdG9wX2FyZyAtIDEsCisJCQkJQU9fVUNfTG9hZF9BX1JlZ2lzdGVyKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFRSSUdfTk9ORToKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIDB4ZmZmZmZmLCBBT19VQ19Mb2FkX0FfUmVnaXN0ZXIpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fVUNfTG9hZCwgQU9fQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIDB4ZmZmZmZmLCBBT19VQ19Mb2FkX0FfUmVnaXN0ZXIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgMCwgQU9fVUNfTG9hZF9BX1JlZ2lzdGVyKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX1VDX0xvYWQsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCBjbWQtPnN0b3BfYXJnLCBBT19VQ19Mb2FkX0FfUmVnaXN0ZXIpOworCX0KKworCWRldnByaXYtPmFvX21vZGUxICY9CisJCX4oQU9fVUlfU291cmNlX1NlbGVjdCgweDFmKSB8IEFPX1VJX1NvdXJjZV9Qb2xhcml0eSB8CisJCUFPX1VQREFURV9Tb3VyY2VfU2VsZWN0KDB4MWYpIHwgQU9fVVBEQVRFX1NvdXJjZV9Qb2xhcml0eSk7CisJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlkZXZwcml2LT5hb19jbWQyICY9IH5BT19CQ19HYXRlX0VuYWJsZTsKKwkJdHJpZ3ZhciA9CisJCQluaV9uc190b190aW1lcihkZXYsIGNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQlUUklHX1JPVU5EX05FQVJFU1QpOworCQlkZXZwcml2LT5zdGNfd3JpdGVsKGRldiwgMSwgQU9fVUlfTG9hZF9BX1JlZ2lzdGVyKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX1VJX0xvYWQsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJCWRldnByaXYtPnN0Y193cml0ZWwoZGV2LCB0cmlndmFyLCBBT19VSV9Mb2FkX0FfUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIFRSSUdfRVhUOgorCQlkZXZwcml2LT5hb19tb2RlMSB8PQorCQkJQU9fVVBEQVRFX1NvdXJjZV9TZWxlY3QoY21kLT5zY2FuX2JlZ2luX2FyZyk7CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICYgQ1JfSU5WRVJUKQorCQkJZGV2cHJpdi0+YW9fbW9kZTEgfD0gQU9fVVBEQVRFX1NvdXJjZV9Qb2xhcml0eTsKKwkJZGV2cHJpdi0+YW9fY21kMiB8PSBBT19CQ19HYXRlX0VuYWJsZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fY21kMiwgQU9fQ29tbWFuZF8yX1JlZ2lzdGVyKTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTEsIEFPX01vZGVfMV9SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fbW9kZTIgJj0KKwkJfihBT19VSV9SZWxvYWRfTW9kZSgzKSB8IEFPX1VJX0luaXRpYWxfTG9hZF9Tb3VyY2UpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMiwgQU9fTW9kZV8yX1JlZ2lzdGVyKTsKKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyA+IDEpIHsKKwkJZGV2cHJpdi0+YW9fbW9kZTEgfD0gQU9fTXVsdGlwbGVfQ2hhbm5lbHM7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LAorCQkJQU9fTnVtYmVyX09mX0NoYW5uZWxzKGNtZC0+c2Nhbl9lbmRfYXJnIC0KKwkJCQkxKSB8CisJCQlBT19VUERBVEVfT3V0cHV0X1NlbGVjdAorCQkJKEFPX1VwZGF0ZV9PdXRwdXRfSGlnaF9aKSwKKwkJCUFPX091dHB1dF9Db250cm9sX1JlZ2lzdGVyKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBiaXRzOworCQlkZXZwcml2LT5hb19tb2RlMSAmPSB+QU9fTXVsdGlwbGVfQ2hhbm5lbHM7CisJCWJpdHMgPSBBT19VUERBVEVfT3V0cHV0X1NlbGVjdChBT19VcGRhdGVfT3V0cHV0X0hpZ2hfWik7CisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiAobmlfcmVnX21fc2VyaWVzX21hc2sgfCBuaV9yZWdfNnh4eF9tYXNrKSkgeworCQkJYml0cyB8PSBBT19OdW1iZXJfT2ZfQ2hhbm5lbHMoMCk7CisJCX0gZWxzZSB7CisJCQliaXRzIHw9IEFPX051bWJlcl9PZl9DaGFubmVscyhDUl9DSEFOKGNtZC0+CisJCQkJCWNoYW5saXN0WzBdKSk7CisJCX0KKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGJpdHMsCisJCQlBT19PdXRwdXRfQ29udHJvbF9SZWdpc3Rlcik7CisJfQorCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMSwgQU9fTW9kZV8xX1JlZ2lzdGVyKTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19EQUMwX1VwZGF0ZV9Nb2RlIHwgQU9fREFDMV9VcGRhdGVfTW9kZSwKKwkJQU9fQ29tbWFuZF8xX1JlZ2lzdGVyKTsKKworCWRldnByaXYtPmFvX21vZGUzIHw9IEFPX1N0b3BfT25fT3ZlcnJ1bl9FcnJvcjsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTMsIEFPX01vZGVfM19SZWdpc3Rlcik7CisKKwlkZXZwcml2LT5hb19tb2RlMiAmPSB+QU9fRklGT19Nb2RlX01hc2s7CisjaWZkZWYgUENJRE1BCisJZGV2cHJpdi0+YW9fbW9kZTIgfD0gQU9fRklGT19Nb2RlX0hGX3RvX0Y7CisjZWxzZQorCWRldnByaXYtPmFvX21vZGUyIHw9IEFPX0ZJRk9fTW9kZV9IRjsKKyNlbmRpZgorCWRldnByaXYtPmFvX21vZGUyICY9IH5BT19GSUZPX1JldHJhbnNtaXRfRW5hYmxlOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMiwgQU9fTW9kZV8yX1JlZ2lzdGVyKTsKKworCWJpdHMgPSBBT19CQ19Tb3VyY2VfU2VsZWN0IHwgQU9fVVBEQVRFX1B1bHNlX1dpZHRoIHwKKwkJQU9fVE1SREFDV1JfUHVsc2VfV2lkdGg7CisJaWYgKGJvYXJkdHlwZS5hb19maWZvX2RlcHRoKQorCQliaXRzIHw9IEFPX0ZJRk9fRW5hYmxlOworCWVsc2UKKwkJYml0cyB8PSBBT19ETUFfUElPX0NvbnRyb2w7CisjaWYgMAorCS8qIEYgSGVzczogd2luZG93cyBkcml2ZXIgZG9lcyBub3Qgc2V0IEFPX051bWJlcl9PZl9EQUNfUGFja2FnZXMgYml0IGZvciA2MjgxLAorCSAgIHZlcmlmaWVkIHdpdGggYnVzIGFuYWx5emVyLiAqLworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJYml0cyB8PSBBT19OdW1iZXJfT2ZfREFDX1BhY2thZ2VzOworI2VuZGlmCisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGJpdHMsIEFPX1BlcnNvbmFsX1JlZ2lzdGVyKTsKKwkvLyBlbmFibGUgc2VuZGluZyBvZiBhbyBkbWEgcmVxdWVzdHMKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fQU9GUkVRX0VuYWJsZSwgQU9fU3RhcnRfU2VsZWN0X1JlZ2lzdGVyKTsKKworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19Db25maWd1cmF0aW9uX0VuZCwgSm9pbnRfUmVzZXRfUmVnaXN0ZXIpOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fQkNfVENfSW50ZXJydXB0X0FjaywKKwkJCUludGVycnVwdF9CX0Fja19SZWdpc3Rlcik7CisJCW5pX3NldF9iaXRzKGRldiwgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyLAorCQkJQU9fQkNfVENfSW50ZXJydXB0X0VuYWJsZSwgMSk7CisJfQorCisJcy0+YXN5bmMtPmludHRyaWcgPSAmbmlfYW9faW50dHJpZzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX2FvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCWlmICgoY21kLT5mbGFncyAmIENNREZfV1JJVEUpID09IDApIHsKKwkJY21kLT5mbGFncyB8PSBDTURGX1dSSVRFOworCX0KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfSU5UIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CisJCS8qIGV4dGVybmFsIHRyaWdnZXIgKi8KKwkJdW5zaWduZWQgaW50IHRtcCA9IENSX0NIQU4oY21kLT5zdGFydF9hcmcpOworCisJCWlmICh0bXAgPiAxOCkKKwkJCXRtcCA9IDE4OworCQl0bXAgfD0gKGNtZC0+c3RhcnRfYXJnICYgKENSX0lOVkVSVCB8IENSX0VER0UpKTsKKwkJaWYgKGNtZC0+c3RhcnRfYXJnICE9IHRtcCkgeworCQkJY21kLT5zdGFydF9hcmcgPSB0bXA7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCQkvKiB0cnVlIGZvciBib3RoIFRSSUdfTk9XIGFuZCBUUklHX0lOVCAqLworCQkJY21kLT5zdGFydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IGJvYXJkdHlwZS5hb19zcGVlZCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IGJvYXJkdHlwZS5hb19zcGVlZDsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gZGV2cHJpdi0+Y2xvY2tfbnMgKiAweGZmZmZmZikgewkvKiBYWFggY2hlY2sgKi8KKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBkZXZwcml2LT5jbG9ja19ucyAqIDB4ZmZmZmZmOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewkvKiBYWFggY2hlY2sgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgPiAweDAwZmZmZmZmKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMHgwMGZmZmZmZjsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJbmlfdGltZXJfdG9fbnMoZGV2LCBuaV9uc190b190aW1lcihkZXYsCisJCQkJY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKSk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykKKwkJCWVycisrOworCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCS8qIHN0ZXAgNTogZml4IHVwIGNoYW5saXN0ICovCisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX2FvX3Jlc2V0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJLy9kZXZwcml2LT5hbzBwPTB4MDAwMDsKKwkvL25pX3dyaXRldyhkZXZwcml2LT5hbzBwLEFPX0NvbmZpZ3VyYXRpb24pOworCisJLy9kZXZwcml2LT5hbzFwPUFPX0NoYW5uZWwoMSk7CisJLy9uaV93cml0ZXcoZGV2cHJpdi0+YW8xcCxBT19Db25maWd1cmF0aW9uKTsKKworCW5pX3JlbGVhc2VfYW9fbWl0ZV9jaGFubmVsKGRldik7CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fQ29uZmlndXJhdGlvbl9TdGFydCwgSm9pbnRfUmVzZXRfUmVnaXN0ZXIpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19EaXNhcm0sIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXIsIH4wLCAwKTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgQU9fQkNfU291cmNlX1NlbGVjdCwgQU9fUGVyc29uYWxfUmVnaXN0ZXIpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAweDNmOTgsIEludGVycnVwdF9CX0Fja19SZWdpc3Rlcik7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIEFPX0JDX1NvdXJjZV9TZWxlY3QgfCBBT19VUERBVEVfUHVsc2VfV2lkdGggfAorCQlBT19UTVJEQUNXUl9QdWxzZV9XaWR0aCwgQU9fUGVyc29uYWxfUmVnaXN0ZXIpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAwLCBBT19PdXRwdXRfQ29udHJvbF9SZWdpc3Rlcik7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDAsIEFPX1N0YXJ0X1NlbGVjdF9SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fY21kMSA9IDA7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX2NtZDEsIEFPX0NvbW1hbmRfMV9SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fY21kMiA9IDA7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX2NtZDIsIEFPX0NvbW1hbmRfMl9SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fbW9kZTEgPSAwOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb19tb2RlMSwgQU9fTW9kZV8xX1JlZ2lzdGVyKTsKKwlkZXZwcml2LT5hb19tb2RlMiA9IDA7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFvX21vZGUyLCBBT19Nb2RlXzJfUmVnaXN0ZXIpOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJZGV2cHJpdi0+YW9fbW9kZTMgPSBBT19MYXN0X0dhdGVfRGlzYWJsZTsKKwllbHNlCisJCWRldnByaXYtPmFvX21vZGUzID0gMDsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW9fbW9kZTMsIEFPX01vZGVfM19SZWdpc3Rlcik7CisJZGV2cHJpdi0+YW9fdHJpZ2dlcl9zZWxlY3QgPSAwOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5hb190cmlnZ2VyX3NlbGVjdCwKKwkJQU9fVHJpZ2dlcl9TZWxlY3RfUmVnaXN0ZXIpOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfNnh4eF9tYXNrKSB7CisJCXVuc2lnbmVkIGltbWVkaWF0ZV9iaXRzID0gMDsKKwkJdW5zaWduZWQgaTsKKwkJZm9yKGkgPSAwOyBpIDwgcy0+bl9jaGFuOyArK2kpCisJCXsKKwkJCWltbWVkaWF0ZV9iaXRzIHw9IDEgPDwgaTsKKwkJfQorCQlhb193aW5fb3V0KGltbWVkaWF0ZV9iaXRzLCBBT19JbW1lZGlhdGVfNjcxeCk7CisJCWFvX3dpbl9vdXQoQ0xFQVJfV0csIEFPX01pc2NfNjExeCk7CisJfQorCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBBT19Db25maWd1cmF0aW9uX0VuZCwgSm9pbnRfUmVzZXRfUmVnaXN0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKKy8vIGRpZ2l0YWwgaW8KKworc3RhdGljIGludCBuaV9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworI2lmZGVmIERFQlVHX0RJTworCXJ0X3ByaW50aygibmlfZGlvX2luc25fY29uZmlnKCkgY2hhbj0lZCBpbz0lZFxuIiwKKwkJQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksIGRhdGFbMF0pOworI2VuZGlmCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IDEgPDwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH4oMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShzLT5pb19iaXRzICYgKDEgPDwgQ1JfQ0hBTihpbnNuLT4KKwkJCQkJY2hhbnNwZWMpKSkgPyBDT01FRElfT1VUUFVUIDoKKwkJCUNPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldnByaXYtPmRpb19jb250cm9sICY9IH5ESU9fUGluc19EaXJfTWFzazsKKwlkZXZwcml2LT5kaW9fY29udHJvbCB8PSBESU9fUGluc19EaXIocy0+aW9fYml0cyk7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmRpb19jb250cm9sLCBESU9fQ29udHJvbF9SZWdpc3Rlcik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKyNpZmRlZiBERUJVR19ESU8KKwlydF9wcmludGsoIm5pX2Rpb19pbnNuX2JpdHMoKSBtYXNrPTB4JXggYml0cz0weCV4XG4iLCBkYXRhWzBdLCBkYXRhWzFdKTsKKyNlbmRpZgorCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkYXRhWzBdKSB7CisJCS8qIFBlcmZvcm0gY2hlY2sgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCB1c2luZyB0aGUKKwkJICAgc2VyaWFsIHBhcnQgb2YgdGhlIGRpbyAqLworCQlpZiAoKGRhdGFbMF0gJiAoRElPX1NESU4gfCBESU9fU0RPVVQpKQorCQkJJiYgZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJZGV2cHJpdi0+ZGlvX291dHB1dCAmPSB+RElPX1BhcmFsbGVsX0RhdGFfTWFzazsKKwkJZGV2cHJpdi0+ZGlvX291dHB1dCB8PSBESU9fUGFyYWxsZWxfRGF0YV9PdXQocy0+c3RhdGUpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+ZGlvX291dHB1dCwKKwkJCURJT19PdXRwdXRfUmVnaXN0ZXIpOworCX0KKwlkYXRhWzFdID0gZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgRElPX1BhcmFsbGVsX0lucHV0X1JlZ2lzdGVyKTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IG5pX21fc2VyaWVzX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisjaWZkZWYgREVCVUdfRElPCisJcnRfcHJpbnRrKCJuaV9tX3Nlcmllc19kaW9faW5zbl9jb25maWcoKSBjaGFuPSVkIGlvPSVkXG4iLAorCQlDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwgZGF0YVswXSk7CisjZW5kaWYKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCXMtPmlvX2JpdHMgJj0gfigxIDw8IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJKHMtPmlvX2JpdHMgJiAoMSA8PCBDUl9DSEFOKGluc24tPgorCQkJCQljaGFuc3BlYykpKSA/IENPTUVESV9PVVRQVVQgOgorCQkJQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbmlfd3JpdGVsKHMtPmlvX2JpdHMsIE1fT2Zmc2V0X0RJT19EaXJlY3Rpb24pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbmlfbV9zZXJpZXNfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisjaWZkZWYgREVCVUdfRElPCisJcnRfcHJpbnRrKCJuaV9tX3Nlcmllc19kaW9faW5zbl9iaXRzKCkgbWFzaz0weCV4IGJpdHM9MHgleFxuIiwgZGF0YVswXSwKKwkJZGF0YVsxXSk7CisjZW5kaWYKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJbmlfd3JpdGVsKHMtPnN0YXRlLCBNX09mZnNldF9TdGF0aWNfRGlnaXRhbF9PdXRwdXQpOworCX0KKwlkYXRhWzFdID0gbmlfcmVhZGwoTV9PZmZzZXRfU3RhdGljX0RpZ2l0YWxfSW5wdXQpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfY2Rpb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKwlpbnQgc291cmNlczsKKwl1bnNpZ25lZCBpOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCXNvdXJjZXMgPSBUUklHX0lOVDsKKwljbWQtPnN0YXJ0X3NyYyAmPSBzb3VyY2VzOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUuLi4gKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0lOVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUpCisJCWVycisrOworCS8qIC4uLiBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UKSB7CisJCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCQljbWQtPnN0YXJ0X2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCkgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQl0bXAgJj0gQ1JfUEFDS19GTEFHUyhDRE9fU2FtcGxlX1NvdXJjZV9TZWxlY3RfTWFzaywgMCwgMCwKKwkJCUNSX0lOVkVSVCk7CisJCWlmICh0bXAgIT0gY21kLT5zY2FuX2JlZ2luX2FyZykgeworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJLyogc3RlcCA1OiBjaGVjayBjaGFubGlzdCAqLworCisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyArK2kpIHsKKwkJaWYgKGNtZC0+Y2hhbmxpc3RbaV0gIT0gaSkKKwkJCWVyciA9IDE7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9jZGlvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWNvbnN0IHN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBjZG9fbW9kZV9iaXRzID0gQ0RPX0ZJRk9fTW9kZV9CaXQgfCBDRE9fSGFsdF9Pbl9FcnJvcl9CaXQ7CisJaW50IHJldHZhbDsKKworCW5pX3dyaXRlbChDRE9fUmVzZXRfQml0LCBNX09mZnNldF9DRElPX0NvbW1hbmQpOworCXN3aXRjaCAoY21kLT5zY2FuX2JlZ2luX3NyYykgeworCWNhc2UgVFJJR19FWFQ6CisJCWNkb19tb2RlX2JpdHMgfD0KKwkJCUNSX0NIQU4oY21kLT4KKwkJCXNjYW5fYmVnaW5fYXJnKSAmIENET19TYW1wbGVfU291cmNlX1NlbGVjdF9NYXNrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICYgQ1JfSU5WRVJUKQorCQljZG9fbW9kZV9iaXRzIHw9IENET19Qb2xhcml0eV9CaXQ7CisJbmlfd3JpdGVsKGNkb19tb2RlX2JpdHMsIE1fT2Zmc2V0X0NET19Nb2RlKTsKKwlpZiAocy0+aW9fYml0cykgeworCQluaV93cml0ZWwocy0+c3RhdGUsIE1fT2Zmc2V0X0NET19GSUZPX0RhdGEpOworCQluaV93cml0ZWwoQ0RPX1NXX1VwZGF0ZV9CaXQsIE1fT2Zmc2V0X0NESU9fQ29tbWFuZCk7CisJCW5pX3dyaXRlbChzLT5pb19iaXRzLCBNX09mZnNldF9DRE9fTWFza19FbmFibGUpOworCX0gZWxzZSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkiYXR0ZW1wdGVkIHRvIHJ1biBkaWdpdGFsIG91dHB1dCBjb21tYW5kIHdpdGggbm8gbGluZXMgY29uZmlndXJlZCBhcyBvdXRwdXRzIik7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR2YWwgPSBuaV9yZXF1ZXN0X2Nkb19taXRlX2NoYW5uZWwoZGV2KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlyZXR1cm4gcmV0dmFsOworCX0KKwlzLT5hc3luYy0+aW50dHJpZyA9ICZuaV9jZG9faW50dHJpZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9jZG9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKQoreworI2lmZGVmIFBDSURNQQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisjZW5kaWYKKwlpbnQgcmV0dmFsID0gMDsKKwl1bnNpZ25lZCBpOworCWNvbnN0IHVuc2lnbmVkIHRpbWVvdXQgPSAxMDA7CisKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwkvKiByZWFkIGFsbG9jIHRoZSBlbnRpcmUgYnVmZmVyICovCisJY29tZWRpX2J1Zl9yZWFkX2FsbG9jKHMtPmFzeW5jLCBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3opOworCisjaWZkZWYgUENJRE1BCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5jZG9fbWl0ZV9jaGFuKSB7CisJCW1pdGVfcHJlcF9kbWEoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbiwgMzIsIDMyKTsKKwkJbWl0ZV9kbWFfYXJtKGRldnByaXYtPmNkb19taXRlX2NoYW4pOworCX0gZWxzZSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJCVUc6IG5vIGNkbyBtaXRlIGNoYW5uZWw/Iik7CisJCXJldHZhbCA9IC1FSU87CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworI2VuZGlmCisvLyBYWFggbm90IHN1cmUgd2hhdCBpbnRlcnJ1cHQgQyBncm91cCBkb2VzCisvLyAgICAgIG5pX3dyaXRlYihJbnRlcnJ1cHRfR3JvdXBfQ19FbmFibGVfQml0LCBNX09mZnNldF9JbnRlcnJ1cHRfQ19FbmFibGUpOworCS8vd2FpdCBmb3IgZG1hIHRvIGZpbGwgb3V0cHV0IGZpZm8KKwlmb3IgKGkgPSAwOyBpIDwgdGltZW91dDsgKytpKSB7CisJCWlmIChuaV9yZWFkbChNX09mZnNldF9DRElPX1N0YXR1cykgJiBDRE9fRklGT19GdWxsX0JpdCkKKwkJCWJyZWFrOworCQljb21lZGlfdWRlbGF5KDEwKTsKKwl9CisJaWYgKGkgPT0gdGltZW91dCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiZG1hIGZhaWxlZCB0byBmaWxsIGNkbyBmaWZvISIpOworCQluaV9jZGlvX2NhbmNlbChkZXYsIHMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJbmlfd3JpdGVsKENET19Bcm1fQml0IHwgQ0RPX0Vycm9yX0ludGVycnVwdF9FbmFibGVfU2V0X0JpdCB8CisJCUNET19FbXB0eV9GSUZPX0ludGVycnVwdF9FbmFibGVfU2V0X0JpdCwgTV9PZmZzZXRfQ0RJT19Db21tYW5kKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5pX2NkaW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJbmlfd3JpdGVsKENET19EaXNhcm1fQml0IHwgQ0RPX0Vycm9yX0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0IHwKKwkJQ0RPX0VtcHR5X0ZJRk9fSW50ZXJydXB0X0VuYWJsZV9DbGVhcl9CaXQgfAorCQlDRE9fRklGT19SZXF1ZXN0X0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0LAorCQlNX09mZnNldF9DRElPX0NvbW1hbmQpOworLy8gWFhYIG5vdCBzdXJlIHdoYXQgaW50ZXJydXB0IEMgZ3JvdXAgZG9lcworLy8gICAgICBuaV93cml0ZWIoMCwgTV9PZmZzZXRfSW50ZXJydXB0X0NfRW5hYmxlKTsKKwluaV93cml0ZWwoMCwgTV9PZmZzZXRfQ0RPX01hc2tfRW5hYmxlKTsKKwluaV9yZWxlYXNlX2Nkb19taXRlX2NoYW5uZWwoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NkaW9faW50ZXJydXB0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGNkaW9fc3RhdHVzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfRElPX1NVQkRFVjsKKyNpZmRlZiBQQ0lETUEKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworI2VuZGlmCisKKwlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSA9PSAwKSB7CisJCXJldHVybjsKKwl9CisjaWZkZWYgUENJRE1BCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCWlmIChkZXZwcml2LT5jZG9fbWl0ZV9jaGFuKSB7CisJCXVuc2lnbmVkIGNkb19taXRlX3N0YXR1cyA9CisJCQltaXRlX2dldF9zdGF0dXMoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbik7CisJCWlmIChjZG9fbWl0ZV9zdGF0dXMgJiBDSFNSX0xJTktDKSB7CisJCQl3cml0ZWwoQ0hPUl9DTFJMQywKKwkJCQlkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKworCQkJCU1JVEVfQ0hPUihkZXZwcml2LT5jZG9fbWl0ZV9jaGFuLT5jaGFubmVsKSk7CisJCX0KKwkJbWl0ZV9zeW5jX291dHB1dF9kbWEoZGV2cHJpdi0+Y2RvX21pdGVfY2hhbiwgcy0+YXN5bmMpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKyNlbmRpZgorCisJY2Rpb19zdGF0dXMgPSBuaV9yZWFkbChNX09mZnNldF9DRElPX1N0YXR1cyk7CisJaWYgKGNkaW9fc3RhdHVzICYgKENET19PdmVycnVuX0JpdCB8IENET19VbmRlcmZsb3dfQml0KSkgeworLy8gICAgICAgICAgICAgIHJ0X3ByaW50aygiY2RpbyBlcnJvcjogc3RhdHV4PTB4JXhcbiIsIGNkaW9fc3RhdHVzKTsKKwkJbmlfd3JpdGVsKENET19FcnJvcl9JbnRlcnJ1cHRfQ29uZmlybV9CaXQsIE1fT2Zmc2V0X0NESU9fQ29tbWFuZCk7CS8vIFhYWCBqdXN0IGd1ZXNzaW5nIHRoaXMgaXMgbmVlZGVkIGFuZCBkb2VzIHNvbWV0aGluZyB1c2VmdWwKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfT1ZFUkZMT1c7CisJfQorCWlmIChjZGlvX3N0YXR1cyAmIENET19GSUZPX0VtcHR5X0JpdCkgeworLy8gICAgICAgICAgICAgIHJ0X3ByaW50aygiY2RpbyBmaWZvIGVtcHR5XG4iKTsKKwkJbmlfd3JpdGVsKENET19FbXB0eV9GSUZPX0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0LAorCQkJTV9PZmZzZXRfQ0RJT19Db21tYW5kKTsKKy8vICAgICAgICAgICAgICBzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJfQorCW5pX2V2ZW50KGRldiwgcyk7Cit9CisKK3N0YXRpYyBpbnQgbmlfc2VyaWFsX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgZXJyID0gaW5zbi0+bjsKKwl1bnNpZ25lZCBjaGFyIGJ5dGVfb3V0LCBieXRlX2luID0gMDsKKworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19TRVJJQUxfQ0xPQ0s6CisKKyNpZmRlZiBERUJVR19ESU8KKwkJcnRfcHJpbnRrKCJTUEkgc2VyaWFsIGNsb2NrIENvbmZpZyBjZFxuIiwgZGF0YVsxXSk7CisjZW5kaWYKKwkJZGV2cHJpdi0+c2VyaWFsX2h3X21vZGUgPSAxOworCQlkZXZwcml2LT5kaW9fY29udHJvbCB8PSBESU9fSFdfU2VyaWFsX0VuYWJsZTsKKworCQlpZiAoZGF0YVsxXSA9PSBTRVJJQUxfRElTQUJMRUQpIHsKKwkJCWRldnByaXYtPnNlcmlhbF9od19tb2RlID0gMDsKKwkJCWRldnByaXYtPmRpb19jb250cm9sICY9IH4oRElPX0hXX1NlcmlhbF9FbmFibGUgfAorCQkJCURJT19Tb2Z0d2FyZV9TZXJpYWxfQ29udHJvbCk7CisJCQlkYXRhWzFdID0gU0VSSUFMX0RJU0FCTEVEOworCQkJZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zID0gZGF0YVsxXTsKKwkJfSBlbHNlIGlmIChkYXRhWzFdIDw9IFNFUklBTF82MDBOUykgeworCQkJLyogV2FybmluZzogdGhpcyBjbG9jayBzcGVlZCBpcyB0b28gZmFzdCB0byByZWxpYWJseQorCQkJICAgY29udHJvbCBTQ1hJLiAqLworCQkJZGV2cHJpdi0+ZGlvX2NvbnRyb2wgJj0gfkRJT19IV19TZXJpYWxfVGltZWJhc2U7CisJCQlkZXZwcml2LT5jbG9ja19hbmRfZm91dCB8PSBTbG93X0ludGVybmFsX1RpbWViYXNlOworCQkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgJj0gfkRJT19TZXJpYWxfT3V0X0RpdmlkZV9CeV8yOworCQkJZGF0YVsxXSA9IFNFUklBTF82MDBOUzsKKwkJCWRldnByaXYtPnNlcmlhbF9pbnRlcnZhbF9ucyA9IGRhdGFbMV07CisJCX0gZWxzZSBpZiAoZGF0YVsxXSA8PSBTRVJJQUxfMV8yVVMpIHsKKwkJCWRldnByaXYtPmRpb19jb250cm9sICY9IH5ESU9fSFdfU2VyaWFsX1RpbWViYXNlOworCQkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgfD0gU2xvd19JbnRlcm5hbF9UaW1lYmFzZSB8CisJCQkJRElPX1NlcmlhbF9PdXRfRGl2aWRlX0J5XzI7CisJCQlkYXRhWzFdID0gU0VSSUFMXzFfMlVTOworCQkJZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zID0gZGF0YVsxXTsKKwkJfSBlbHNlIGlmIChkYXRhWzFdIDw9IFNFUklBTF8xMFVTKSB7CisJCQlkZXZwcml2LT5kaW9fY29udHJvbCB8PSBESU9fSFdfU2VyaWFsX1RpbWViYXNlOworCQkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgfD0gU2xvd19JbnRlcm5hbF9UaW1lYmFzZSB8CisJCQkJRElPX1NlcmlhbF9PdXRfRGl2aWRlX0J5XzI7CisJCQkvKiBOb3RlOiBESU9fU2VyaWFsX091dF9EaXZpZGVfQnlfMiBvbmx5IGFmZmVjdHMKKwkJCSAgIDYwMG5zLzEuMnVzLiBJZiB5b3UgdHVybiBkaXZpZGVfYnlfMiBvZmYgd2l0aCB0aGUKKwkJCSAgIHNsb3cgY2xvY2ssIHlvdSB3aWxsIHN0aWxsIGdldCAxMHVzLCBleGNlcHQgdGhlbgorCQkJICAgYWxsIHlvdXIgZGVsYXlzIGFyZSB3cm9uZy4gKi8KKwkJCWRhdGFbMV0gPSBTRVJJQUxfMTBVUzsKKwkJCWRldnByaXYtPnNlcmlhbF9pbnRlcnZhbF9ucyA9IGRhdGFbMV07CisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5kaW9fY29udHJvbCAmPSB+KERJT19IV19TZXJpYWxfRW5hYmxlIHwKKwkJCQlESU9fU29mdHdhcmVfU2VyaWFsX0NvbnRyb2wpOworCQkJZGV2cHJpdi0+c2VyaWFsX2h3X21vZGUgPSAwOworCQkJZGF0YVsxXSA9IChkYXRhWzFdIC8gMTAwMCkgKiAxMDAwOworCQkJZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zID0gZGF0YVsxXTsKKwkJfQorCisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5kaW9fY29udHJvbCwKKwkJCURJT19Db250cm9sX1JlZ2lzdGVyKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmNsb2NrX2FuZF9mb3V0LAorCQkJQ2xvY2tfYW5kX0ZPVVRfUmVnaXN0ZXIpOworCQlyZXR1cm4gMTsKKworCQlicmVhazsKKworCWNhc2UgSU5TTl9DT05GSUdfQklESVJFQ1RJT05BTF9EQVRBOgorCisJCWlmIChkZXZwcml2LT5zZXJpYWxfaW50ZXJ2YWxfbnMgPT0gMCkgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlieXRlX291dCA9IGRhdGFbMV0gJiAweEZGOworCisJCWlmIChkZXZwcml2LT5zZXJpYWxfaHdfbW9kZSkgeworCQkJZXJyID0gbmlfc2VyaWFsX2h3X3JlYWR3cml0ZTgoZGV2LCBzLCBieXRlX291dCwKKwkJCQkmYnl0ZV9pbik7CisJCX0gZWxzZSBpZiAoZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zID4gMCkgeworCQkJZXJyID0gbmlfc2VyaWFsX3N3X3JlYWR3cml0ZTgoZGV2LCBzLCBieXRlX291dCwKKwkJCQkmYnl0ZV9pbik7CisJCX0gZWxzZSB7CisJCQlydF9wcmludGsoIm5pX3NlcmlhbF9pbnNuX2NvbmZpZzogc2VyaWFsIGRpc2FibGVkIVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWRhdGFbMV0gPSBieXRlX2luICYgMHhGRjsKKwkJcmV0dXJuIGluc24tPm47CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCit9CisKK3N0YXRpYyBpbnQgbmlfc2VyaWFsX2h3X3JlYWR3cml0ZTgoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBjaGFyIGRhdGFfb3V0LCB1bnNpZ25lZCBjaGFyICpkYXRhX2luKQoreworCXVuc2lnbmVkIGludCBzdGF0dXMxOworCWludCBlcnIgPSAwLCBjb3VudCA9IDIwOworCisjaWZkZWYgREVCVUdfRElPCisJcnRfcHJpbnRrKCJuaV9zZXJpYWxfaHdfcmVhZHdyaXRlODogb3V0cHV0dGluZyAweCV4XG4iLCBkYXRhX291dCk7CisjZW5kaWYKKworCWRldnByaXYtPmRpb19vdXRwdXQgJj0gfkRJT19TZXJpYWxfRGF0YV9NYXNrOworCWRldnByaXYtPmRpb19vdXRwdXQgfD0gRElPX1NlcmlhbF9EYXRhX091dChkYXRhX291dCk7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmRpb19vdXRwdXQsIERJT19PdXRwdXRfUmVnaXN0ZXIpOworCisJc3RhdHVzMSA9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIEpvaW50X1N0YXR1c18xX1JlZ2lzdGVyKTsKKwlpZiAoc3RhdHVzMSAmIERJT19TZXJpYWxfSU9fSW5fUHJvZ3Jlc3NfU3QpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIEVycm9yOworCX0KKworCWRldnByaXYtPmRpb19jb250cm9sIHw9IERJT19IV19TZXJpYWxfU3RhcnQ7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmRpb19jb250cm9sLCBESU9fQ29udHJvbF9SZWdpc3Rlcik7CisJZGV2cHJpdi0+ZGlvX2NvbnRyb2wgJj0gfkRJT19IV19TZXJpYWxfU3RhcnQ7CisKKwkvKiBXYWl0IHVudGlsIFNUQyBzYXlzIHdlJ3JlIGRvbmUsIGJ1dCBkb24ndCBsb29wIGluZmluaXRlbHkuICovCisJd2hpbGUgKChzdGF0dXMxID0KKwkJCWRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJSm9pbnRfU3RhdHVzXzFfUmVnaXN0ZXIpKSAmCisJCURJT19TZXJpYWxfSU9fSW5fUHJvZ3Jlc3NfU3QpIHsKKwkJLyogRGVsYXkgb25lIGJpdCBwZXIgbG9vcCAqLworCQljb21lZGlfdWRlbGF5KChkZXZwcml2LT5zZXJpYWxfaW50ZXJ2YWxfbnMgKyA5OTkpIC8gMTAwMCk7CisJCWlmICgtLWNvdW50IDwgMCkgeworCQkJcnRfcHJpbnRrCisJCQkJKCJuaV9zZXJpYWxfaHdfcmVhZHdyaXRlODogU1BJIHNlcmlhbCBJL08gZGlkbid0IGZpbmlzaCBpbiB0aW1lIVxuIik7CisJCQllcnIgPSAtRVRJTUU7CisJCQlnb3RvIEVycm9yOworCQl9CisJfQorCisJLyogRGVsYXkgZm9yIGxhc3QgYml0LiBUaGlzIGRlbGF5IGlzIGFic29sdXRlbHkgbmVjZXNzYXJ5LCBiZWNhdXNlCisJICAgRElPX1NlcmlhbF9JT19Jbl9Qcm9ncmVzc19TdCBnb2VzIGhpZ2ggb25lIGJpdCB0b28gZWFybHkuICovCisJY29tZWRpX3VkZWxheSgoZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zICsgOTk5KSAvIDEwMDApOworCisJaWYgKGRhdGFfaW4gIT0gTlVMTCkgeworCQkqZGF0YV9pbiA9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIERJT19TZXJpYWxfSW5wdXRfUmVnaXN0ZXIpOworI2lmZGVmIERFQlVHX0RJTworCQlydF9wcmludGsoIm5pX3NlcmlhbF9od19yZWFkd3JpdGU4OiBpbnB1dHRlZCAweCV4XG4iLCAqZGF0YV9pbik7CisjZW5kaWYKKwl9CisKKyAgICAgIEVycm9yOgorCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5kaW9fY29udHJvbCwgRElPX0NvbnRyb2xfUmVnaXN0ZXIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBuaV9zZXJpYWxfc3dfcmVhZHdyaXRlOChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGNoYXIgZGF0YV9vdXQsIHVuc2lnbmVkIGNoYXIgKmRhdGFfaW4pCit7CisJdW5zaWduZWQgY2hhciBtYXNrLCBpbnB1dCA9IDA7CisKKyNpZmRlZiBERUJVR19ESU8KKwlydF9wcmludGsoIm5pX3NlcmlhbF9zd19yZWFkd3JpdGU4OiBvdXRwdXR0aW5nIDB4JXhcbiIsIGRhdGFfb3V0KTsKKyNlbmRpZgorCisJLyogV2FpdCBmb3Igb25lIGJpdCBiZWZvcmUgdHJhbnNmZXIgKi8KKwljb21lZGlfdWRlbGF5KChkZXZwcml2LT5zZXJpYWxfaW50ZXJ2YWxfbnMgKyA5OTkpIC8gMTAwMCk7CisKKwlmb3IgKG1hc2sgPSAweDgwOyBtYXNrOyBtYXNrID4+PSAxKSB7CisJCS8qIE91dHB1dCBjdXJyZW50IGJpdDsgbm90ZSB0aGF0IHdlIGNhbm5vdCB0b3VjaCBzLT5zdGF0ZQorCQkgICBiZWNhdXNlIGl0IGlzIGEgcGVyLXN1YmRldmljZSBmaWVsZCwgYW5kIHNlcmlhbCBpcworCQkgICBhIHNlcGFyYXRlIHN1YmRldmljZSBmcm9tIERJTy4gKi8KKwkJZGV2cHJpdi0+ZGlvX291dHB1dCAmPSB+RElPX1NET1VUOworCQlpZiAoZGF0YV9vdXQgJiBtYXNrKSB7CisJCQlkZXZwcml2LT5kaW9fb3V0cHV0IHw9IERJT19TRE9VVDsKKwkJfQorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+ZGlvX291dHB1dCwKKwkJCURJT19PdXRwdXRfUmVnaXN0ZXIpOworCisJCS8qIEFzc2VydCBTRENMSyAoYWN0aXZlIGxvdywgaW52ZXJ0ZWQpLCB3YWl0IGZvciBoYWxmIG9mCisJCSAgIHRoZSBkZWxheSwgZGVhc3NlcnQgU0RDTEssIGFuZCB3YWl0IGZvciB0aGUgb3RoZXIgaGFsZi4gKi8KKwkJZGV2cHJpdi0+ZGlvX2NvbnRyb2wgfD0gRElPX1NvZnR3YXJlX1NlcmlhbF9Db250cm9sOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+ZGlvX2NvbnRyb2wsCisJCQlESU9fQ29udHJvbF9SZWdpc3Rlcik7CisKKwkJY29tZWRpX3VkZWxheSgoZGV2cHJpdi0+c2VyaWFsX2ludGVydmFsX25zICsgOTk5KSAvIDIwMDApOworCisJCWRldnByaXYtPmRpb19jb250cm9sICY9IH5ESU9fU29mdHdhcmVfU2VyaWFsX0NvbnRyb2w7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5kaW9fY29udHJvbCwKKwkJCURJT19Db250cm9sX1JlZ2lzdGVyKTsKKworCQljb21lZGlfdWRlbGF5KChkZXZwcml2LT5zZXJpYWxfaW50ZXJ2YWxfbnMgKyA5OTkpIC8gMjAwMCk7CisKKwkJLyogSW5wdXQgY3VycmVudCBiaXQgKi8KKwkJaWYgKGRldnByaXYtPnN0Y19yZWFkdyhkZXYsCisJCQkJRElPX1BhcmFsbGVsX0lucHV0X1JlZ2lzdGVyKSAmIERJT19TRElOKSB7CisvKgkJCXJ0X3ByaW50aygiRElPX1BfSV9SOiAweCV4XG4iLCBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBESU9fUGFyYWxsZWxfSW5wdXRfUmVnaXN0ZXIpKTsgKi8KKwkJCWlucHV0IHw9IG1hc2s7CisJCX0KKwl9CisjaWZkZWYgREVCVUdfRElPCisJcnRfcHJpbnRrKCJuaV9zZXJpYWxfc3dfcmVhZHdyaXRlODogaW5wdXR0ZWQgMHgleFxuIiwgaW5wdXQpOworI2VuZGlmCisJaWYgKGRhdGFfaW4pCisJCSpkYXRhX2luID0gaW5wdXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWlvX2NvbW1vbl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+Y291bnRlcl9kZXYpIHsKKwkJCW5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3koZGV2cHJpdi0+Y291bnRlcl9kZXYpOworCQl9CisJfQorCWlmIChkZXYtPnN1YmRldmljZXMgJiYgYm9hcmR0eXBlLmhhc184MjU1KQorCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgTklfODI1NV9ESU9fU1VCREVWKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9hb182N3h4KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcy0+bl9jaGFuOyBpKyspCisJeworCQluaV9hb193aW5fb3V0dyhkZXYsIEFPX0NoYW5uZWwoaSkgfCAweDAsCisJCQlBT19Db25maWd1cmF0aW9uXzJfNjd4eCk7CisJfQorCWFvX3dpbl9vdXQoMHgwLCBBT19MYXRlcl9TaW5nbGVfUG9pbnRfVXBkYXRlcyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9ncGN0X3RvX3N0Y19yZWdpc3RlcihlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKQoreworCXVuc2lnbmVkIHN0Y19yZWdpc3RlcjsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgTklUSU9fRzBfQXV0b2luY3JlbWVudF9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfQXV0b2luY3JlbWVudF9SZWdpc3RlcigwKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9BdXRvaW5jcmVtZW50X1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19BdXRvaW5jcmVtZW50X1JlZ2lzdGVyKDEpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0NvbW1hbmRfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX0NvbW1hbmRfUmVnaXN0ZXIoMCk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfQ29tbWFuZF9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfQ29tbWFuZF9SZWdpc3RlcigxKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9IV19TYXZlX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19IV19TYXZlX1JlZ2lzdGVyKDApOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0hXX1NhdmVfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX0hXX1NhdmVfUmVnaXN0ZXIoMSk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfU1dfU2F2ZV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfU2F2ZV9SZWdpc3RlcigwKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9TV19TYXZlX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19TYXZlX1JlZ2lzdGVyKDEpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX01vZGVfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX01vZGVfUmVnaXN0ZXIoMCk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfTW9kZV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfTW9kZV9SZWdpc3RlcigxKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9Mb2FkQV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfTG9hZF9BX1JlZ2lzdGVyKDApOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0xvYWRBX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gR19Mb2FkX0FfUmVnaXN0ZXIoMSk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfTG9hZEJfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX0xvYWRfQl9SZWdpc3RlcigwKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9Mb2FkQl9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfTG9hZF9CX1JlZ2lzdGVyKDEpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0lucHV0X1NlbGVjdF9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfSW5wdXRfU2VsZWN0X1JlZ2lzdGVyKDApOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0lucHV0X1NlbGVjdF9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEdfSW5wdXRfU2VsZWN0X1JlZ2lzdGVyKDEpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwMV9TdGF0dXNfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBHX1N0YXR1c19SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfSm9pbnRfUmVzZXRfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBKb2ludF9SZXNldF9SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfSm9pbnRfU3RhdHVzMV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEpvaW50X1N0YXR1c18xX1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwMV9Kb2ludF9TdGF0dXMyX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gSm9pbnRfU3RhdHVzXzJfUmVnaXN0ZXI7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzBfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gSW50ZXJydXB0X0FfQWNrX1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0ludGVycnVwdF9BY2tub3dsZWRnZV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IEludGVycnVwdF9CX0Fja19SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9TdGF0dXNfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBBSV9TdGF0dXNfMV9SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMV9TdGF0dXNfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBBT19TdGF0dXNfMV9SZWdpc3RlcjsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9JbnRlcnJ1cHRfRW5hYmxlX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0ludGVycnVwdF9FbmFibGVfUmVnOgorCQlzdGNfcmVnaXN0ZXIgPSBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aygiJXM6IHVuaGFuZGxlZCByZWdpc3RlciAweCV4IGluIHN3aXRjaC5cbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJlZyk7CisJCUJVRygpOworCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBzdGNfcmVnaXN0ZXI7Cit9CisKK3N0YXRpYyB2b2lkIG5pX2dwY3Rfd3JpdGVfcmVnaXN0ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIGJpdHMsCisJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXYtPmRldjsKKwl1bnNpZ25lZCBzdGNfcmVnaXN0ZXI7CisJLyogYml0cyBpbiB0aGUgam9pbiByZXNldCByZWdpc3RlciB3aGljaCBhcmUgcmVsZXZhbnQgdG8gY291bnRlcnMgKi8KKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgZ3BjdF9qb2ludF9yZXNldF9tYXNrID0gRzBfUmVzZXQgfCBHMV9SZXNldDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgZ3BjdF9pbnRlcnJ1cHRfYV9lbmFibGVfbWFzayA9CisJCUcwX0dhdGVfSW50ZXJydXB0X0VuYWJsZSB8IEcwX1RDX0ludGVycnVwdF9FbmFibGU7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdwY3RfaW50ZXJydXB0X2JfZW5hYmxlX21hc2sgPQorCQlHMV9HYXRlX0ludGVycnVwdF9FbmFibGUgfCBHMV9UQ19JbnRlcnJ1cHRfRW5hYmxlOworCisJc3dpdGNoIChyZWcpIHsKKwkJLyogbS1zZXJpZXMtb25seSByZWdpc3RlcnMgKi8KKwljYXNlIE5JVElPX0cwX0NvdW50aW5nX01vZGVfUmVnOgorCQluaV93cml0ZXcoYml0cywgTV9PZmZzZXRfRzBfQ291bnRpbmdfTW9kZSk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfQ291bnRpbmdfTW9kZV9SZWc6CisJCW5pX3dyaXRldyhiaXRzLCBNX09mZnNldF9HMV9Db3VudGluZ19Nb2RlKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9TZWNvbmRfR2F0ZV9SZWc6CisJCW5pX3dyaXRldyhiaXRzLCBNX09mZnNldF9HMF9TZWNvbmRfR2F0ZSk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfU2Vjb25kX0dhdGVfUmVnOgorCQluaV93cml0ZXcoYml0cywgTV9PZmZzZXRfRzFfU2Vjb25kX0dhdGUpOworCQlicmVhazsKKwljYXNlIE5JVElPX0cwX0RNQV9Db25maWdfUmVnOgorCQluaV93cml0ZXcoYml0cywgTV9PZmZzZXRfRzBfRE1BX0NvbmZpZyk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfRE1BX0NvbmZpZ19SZWc6CisJCW5pX3dyaXRldyhiaXRzLCBNX09mZnNldF9HMV9ETUFfQ29uZmlnKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMF9BQlpfUmVnOgorCQluaV93cml0ZXcoYml0cywgTV9PZmZzZXRfRzBfTVNlcmllc19BQlopOworCQlicmVhazsKKwljYXNlIE5JVElPX0cxX0FCWl9SZWc6CisJCW5pX3dyaXRldyhiaXRzLCBNX09mZnNldF9HMV9NU2VyaWVzX0FCWik7CisJCWJyZWFrOworCisJCS8qIDMyIGJpdCByZWdpc3RlcnMgKi8KKwljYXNlIE5JVElPX0cwX0xvYWRBX1JlZzoKKwljYXNlIE5JVElPX0cxX0xvYWRBX1JlZzoKKwljYXNlIE5JVElPX0cwX0xvYWRCX1JlZzoKKwljYXNlIE5JVElPX0cxX0xvYWRCX1JlZzoKKwkJc3RjX3JlZ2lzdGVyID0gbmlfZ3BjdF90b19zdGNfcmVnaXN0ZXIocmVnKTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbChkZXYsIGJpdHMsIHN0Y19yZWdpc3Rlcik7CisJCWJyZWFrOworCisJCS8qIDE2IGJpdCByZWdpc3RlcnMgKi8KKwljYXNlIE5JVElPX0cwX0ludGVycnVwdF9FbmFibGVfUmVnOgorCQlCVUdfT04oYml0cyAmIH5ncGN0X2ludGVycnVwdF9hX2VuYWJsZV9tYXNrKTsKKwkJbmlfc2V0X2JpdGZpZWxkKGRldiwgSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyLAorCQkJZ3BjdF9pbnRlcnJ1cHRfYV9lbmFibGVfbWFzaywgYml0cyk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfSW50ZXJydXB0X0VuYWJsZV9SZWc6CisJCUJVR19PTihiaXRzICYgfmdwY3RfaW50ZXJydXB0X2JfZW5hYmxlX21hc2spOworCQluaV9zZXRfYml0ZmllbGQoZGV2LCBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXIsCisJCQlncGN0X2ludGVycnVwdF9iX2VuYWJsZV9tYXNrLCBiaXRzKTsKKwkJYnJlYWs7CisJY2FzZSBOSVRJT19HMDFfSm9pbnRfUmVzZXRfUmVnOgorCQlCVUdfT04oYml0cyAmIH5ncGN0X2pvaW50X3Jlc2V0X21hc2spOworCQkvKiBmYWxsLXRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlzdGNfcmVnaXN0ZXIgPSBuaV9ncGN0X3RvX3N0Y19yZWdpc3RlcihyZWcpOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgYml0cywgc3RjX3JlZ2lzdGVyKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9ncGN0X3JlYWRfcmVnaXN0ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXYtPmRldjsKKwl1bnNpZ25lZCBzdGNfcmVnaXN0ZXI7CisJc3dpdGNoIChyZWcpIHsKKwkJLyogbS1zZXJpZXMgb25seSByZWdpc3RlcnMgKi8KKwljYXNlIE5JVElPX0cwX0RNQV9TdGF0dXNfUmVnOgorCQlyZXR1cm4gbmlfcmVhZHcoTV9PZmZzZXRfRzBfRE1BX1N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgTklUSU9fRzFfRE1BX1N0YXR1c19SZWc6CisJCXJldHVybiBuaV9yZWFkdyhNX09mZnNldF9HMV9ETUFfU3RhdHVzKTsKKwkJYnJlYWs7CisKKwkJLyogMzIgYml0IHJlZ2lzdGVycyAqLworCWNhc2UgTklUSU9fRzBfSFdfU2F2ZV9SZWc6CisJY2FzZSBOSVRJT19HMV9IV19TYXZlX1JlZzoKKwljYXNlIE5JVElPX0cwX1NXX1NhdmVfUmVnOgorCWNhc2UgTklUSU9fRzFfU1dfU2F2ZV9SZWc6CisJCXN0Y19yZWdpc3RlciA9IG5pX2dwY3RfdG9fc3RjX3JlZ2lzdGVyKHJlZyk7CisJCXJldHVybiBkZXZwcml2LT5zdGNfcmVhZGwoZGV2LCBzdGNfcmVnaXN0ZXIpOworCQlicmVhazsKKworCQkvKiAxNiBiaXQgcmVnaXN0ZXJzICovCisJZGVmYXVsdDoKKwkJc3RjX3JlZ2lzdGVyID0gbmlfZ3BjdF90b19zdGNfcmVnaXN0ZXIocmVnKTsKKwkJcmV0dXJuIGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIHN0Y19yZWdpc3Rlcik7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9mcmVxX291dF9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBkZXZwcml2LT5jbG9ja19hbmRfZm91dCAmIEZPVVRfRGl2aWRlcl9tYXNrOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX2ZyZXFfb3V0X2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0ICY9IH5GT1VUX0VuYWJsZTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQsCisJCUNsb2NrX2FuZF9GT1VUX1JlZ2lzdGVyKTsKKwlkZXZwcml2LT5jbG9ja19hbmRfZm91dCAmPSB+Rk9VVF9EaXZpZGVyX21hc2s7CisJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgfD0gRk9VVF9EaXZpZGVyKGRhdGFbMF0pOworCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0IHw9IEZPVVRfRW5hYmxlOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5jbG9ja19hbmRfZm91dCwKKwkJQ2xvY2tfYW5kX0ZPVVRfUmVnaXN0ZXIpOworCXJldHVybiBpbnNuLT5uOworfQorCitzdGF0aWMgaW50IG5pX3NldF9mcmVxX291dF9jbG9jayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGNsb2NrX3NvdXJjZSkKK3sKKwlzd2l0Y2ggKGNsb2NrX3NvdXJjZSkgeworCWNhc2UgTklfRlJFUV9PVVRfVElNRUJBU0VfMV9ESVZfMl9DTE9DS19TUkM6CisJCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0ICY9IH5GT1VUX1RpbWViYXNlX1NlbGVjdDsKKwkJYnJlYWs7CisJY2FzZSBOSV9GUkVRX09VVF9USU1FQkFTRV8yX0NMT0NLX1NSQzoKKwkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgfD0gRk9VVF9UaW1lYmFzZV9TZWxlY3Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQsCisJCUNsb2NrX2FuZF9GT1VUX1JlZ2lzdGVyKTsKKwlyZXR1cm4gMzsKK30KKworc3RhdGljIHZvaWQgbmlfZ2V0X2ZyZXFfb3V0X2Nsb2NrKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgKiBjbG9ja19zb3VyY2UsCisJdW5zaWduZWQgaW50ICogY2xvY2tfcGVyaW9kX25zKQoreworCWlmIChkZXZwcml2LT5jbG9ja19hbmRfZm91dCAmIEZPVVRfVGltZWJhc2VfU2VsZWN0KSB7CisJCSpjbG9ja19zb3VyY2UgPSBOSV9GUkVRX09VVF9USU1FQkFTRV8yX0NMT0NLX1NSQzsKKwkJKmNsb2NrX3BlcmlvZF9ucyA9IFRJTUVCQVNFXzJfTlM7CisJfSBlbHNlIHsKKwkJKmNsb2NrX3NvdXJjZSA9IE5JX0ZSRVFfT1VUX1RJTUVCQVNFXzFfRElWXzJfQ0xPQ0tfU1JDOworCQkqY2xvY2tfcGVyaW9kX25zID0gVElNRUJBU0VfMV9OUyAqIDI7CisJfQorfQorCitzdGF0aWMgaW50IG5pX2ZyZXFfb3V0X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX1NFVF9DTE9DS19TUkM6CisJCXJldHVybiBuaV9zZXRfZnJlcV9vdXRfY2xvY2soZGV2LCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfQ0xPQ0tfU1JDOgorCQluaV9nZXRfZnJlcV9vdXRfY2xvY2soZGV2LCAmZGF0YVsxXSwgJmRhdGFbMl0pOworCQlyZXR1cm4gMzsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgbmlfYWxsb2NfcHJpdmF0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihuaV9wcml2YXRlKSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+d2luZG93X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5zb2Z0X3JlZ19jb3B5X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jayk7CisKKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgbmlfRV9pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGo7CisJZW51bSBuaV9ncGN0X3ZhcmlhbnQgY291bnRlcl92YXJpYW50OworCisJaWYgKGJvYXJkdHlwZS5uX2FvY2hhbiA+IE1BWF9OX0FPX0NIQU4pIHsKKwkJcHJpbnRrKCJidWchIGJvYXJkdHlwZS5uX2FvY2hhbiA+IE1BWF9OX0FPX0NIQU5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIE5JX05VTV9TVUJERVZJQ0VTKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogYW5hbG9nIGlucHV0IHN1YmRldmljZSAqLworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0FJX1NVQkRFVjsKKwlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwlpZiAoYm9hcmR0eXBlLm5fYWRjaGFuKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCVNERl9SRUFEQUJMRSB8IFNERl9ESUZGIHwgU0RGX0RJVEhFUiB8IFNERl9DTURfUkVBRDsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAhPSBuaV9yZWdfNjExeCkKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfR1JPVU5EIHwgU0RGX0NPTU1PTiB8IFNERl9PVEhFUjsKKwkJaWYgKGJvYXJkdHlwZS5hZGJpdHMgPiAxNikKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfTFNBTVBMOworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX1NPRlRfQ0FMSUJSQVRFRDsKKwkJcy0+bl9jaGFuID0gYm9hcmR0eXBlLm5fYWRjaGFuOworCQlzLT5sZW5fY2hhbmxpc3QgPSA1MTI7CisJCXMtPm1heGRhdGEgPSAoMSA8PCBib2FyZHR5cGUuYWRiaXRzKSAtIDE7CisJCXMtPnJhbmdlX3RhYmxlID0gbmlfcmFuZ2VfbGt1cFtib2FyZHR5cGUuZ2FpbmxrdXBdOworCQlzLT5pbnNuX3JlYWQgPSAmbmlfYWlfaW5zbl9yZWFkOworCQlzLT5pbnNuX2NvbmZpZyA9ICZuaV9haV9pbnNuX2NvbmZpZzsKKwkJcy0+ZG9fY21kdGVzdCA9ICZuaV9haV9jbWR0ZXN0OworCQlzLT5kb19jbWQgPSAmbmlfYWlfY21kOworCQlzLT5jYW5jZWwgPSAmbmlfYWlfcmVzZXQ7CisJCXMtPnBvbGwgPSAmbmlfYWlfcG9sbDsKKwkJcy0+bXVuZ2UgPSAmbmlfYWlfbXVuZ2U7CisjaWZkZWYgUENJRE1BCisJCXMtPmFzeW5jX2RtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0U7CisjZW5kaWYKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfQU9fU1VCREVWOworCWlmIChib2FyZHR5cGUubl9hb2NoYW4pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfREVHTElUQ0ggfCBTREZfR1JPVU5EOworCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX1NPRlRfQ0FMSUJSQVRFRDsKKwkJcy0+bl9jaGFuID0gYm9hcmR0eXBlLm5fYW9jaGFuOworCQlzLT5tYXhkYXRhID0gKDEgPDwgYm9hcmR0eXBlLmFvYml0cykgLSAxOworCQlzLT5yYW5nZV90YWJsZSA9IGJvYXJkdHlwZS5hb19yYW5nZV90YWJsZTsKKwkJcy0+aW5zbl9yZWFkID0gJm5pX2FvX2luc25fcmVhZDsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ182eHh4X21hc2spIHsKKwkJCXMtPmluc25fd3JpdGUgPSAmbmlfYW9faW5zbl93cml0ZV82NzF4OworCQl9IGVsc2UgeworCQkJcy0+aW5zbl93cml0ZSA9ICZuaV9hb19pbnNuX3dyaXRlOworCQl9CisJCXMtPmluc25fY29uZmlnID0gJm5pX2FvX2luc25fY29uZmlnOworI2lmZGVmIFBDSURNQQorCQlpZiAoYm9hcmR0eXBlLm5fYW9jaGFuKSB7CisJCQlzLT5hc3luY19kbWFfZGlyID0gRE1BX1RPX0RFVklDRTsKKyNlbHNlCisJCWlmIChib2FyZHR5cGUuYW9fZmlmb19kZXB0aCkgeworI2VuZGlmCisJCQlkZXYtPndyaXRlX3N1YmRldiA9IHM7CisJCQlzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9XUklURTsKKwkJCXMtPmRvX2NtZCA9ICZuaV9hb19jbWQ7CisJCQlzLT5kb19jbWR0ZXN0ID0gJm5pX2FvX2NtZHRlc3Q7CisJCQlzLT5sZW5fY2hhbmxpc3QgPSBib2FyZHR5cGUubl9hb2NoYW47CisJCQlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSA9PSAwKQorCQkJCXMtPm11bmdlID0gbmlfYW9fbXVuZ2U7CisJCX0KKwkJcy0+Y2FuY2VsID0gJm5pX2FvX3Jlc2V0OworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCWlmICgoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnXzY3eHhfbWFzaykpCisJCWluaXRfYW9fNjd4eChkZXYsIHMpOworCisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICovCisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfRElPX1NVQkRFVjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9SRUFEQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5pb19iaXRzID0gMDsJCS8qIGFsbCBiaXRzIGlucHV0ICovCisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5uX2NoYW4gPSBib2FyZHR5cGUubnVtX3AwX2Rpb19jaGFubmVsczsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spIHsKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9CisJCQlTREZfTFNBTVBMIHwgU0RGX0NNRF9XUklURSAvKiB8IFNERl9DTURfUkVBRCAqLyA7CisJCXMtPmluc25fYml0cyA9ICZuaV9tX3Nlcmllc19kaW9faW5zbl9iaXRzOworCQlzLT5pbnNuX2NvbmZpZyA9ICZuaV9tX3Nlcmllc19kaW9faW5zbl9jb25maWc7CisJCXMtPmRvX2NtZCA9ICZuaV9jZGlvX2NtZDsKKwkJcy0+ZG9fY21kdGVzdCA9ICZuaV9jZGlvX2NtZHRlc3Q7CisJCXMtPmNhbmNlbCA9ICZuaV9jZGlvX2NhbmNlbDsKKwkJcy0+YXN5bmNfZG1hX2RpciA9IERNQV9CSURJUkVDVElPTkFMOworCQlzLT5sZW5fY2hhbmxpc3QgPSBzLT5uX2NoYW47CisKKwkJbmlfd3JpdGVsKENET19SZXNldF9CaXQgfCBDRElfUmVzZXRfQml0LCBNX09mZnNldF9DRElPX0NvbW1hbmQpOworCQluaV93cml0ZWwocy0+aW9fYml0cywgTV9PZmZzZXRfRElPX0RpcmVjdGlvbik7CisJfSBlbHNlIHsKKwkJcy0+aW5zbl9iaXRzID0gJm5pX2Rpb19pbnNuX2JpdHM7CisJCXMtPmluc25fY29uZmlnID0gJm5pX2Rpb19pbnNuX2NvbmZpZzsKKwkJZGV2cHJpdi0+ZGlvX2NvbnRyb2wgPSBESU9fUGluc19EaXIocy0+aW9fYml0cyk7CisJCW5pX3dyaXRldyhkZXZwcml2LT5kaW9fY29udHJvbCwgRElPX0NvbnRyb2xfUmVnaXN0ZXIpOworCX0KKworCS8qIDgyNTUgZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JXzgyNTVfRElPX1NVQkRFVjsKKwlpZiAoYm9hcmR0eXBlLmhhc184MjU1KSB7CisJCXN1YmRldl84MjU1X2luaXQoZGV2LCBzLCBuaV84MjU1X2NhbGxiYWNrLCAodW5zaWduZWQgbG9uZylkZXYpOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJLyogZm9ybWVybHkgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXIvdGltZXIgZGV2aWNlLCBidXQgbm8gbG9uZ2VyIHVzZWQgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfVU5VU0VEX1NVQkRFVjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCisJLyogY2FsaWJyYXRpb24gc3ViZGV2aWNlIC0tIGFpIGFuZCBhbyAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9DQUxJQlJBVElPTl9TVUJERVY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NBTElCOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgeworCQkvLyBpbnRlcm5hbCBQV00gYW5hbG9nIG91dHB1dCB1c2VkIGZvciBBSSBub25saW5lYXJpdHkgY2FsaWJyYXRpb24KKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX0lOVEVSTkFMOworCQlzLT5pbnNuX2NvbmZpZyA9ICZuaV9tX3Nlcmllc19wd21fY29uZmlnOworCQlzLT5uX2NoYW4gPSAxOworCQlzLT5tYXhkYXRhID0gMDsKKwkJbmlfd3JpdGVsKDB4MCwgTV9PZmZzZXRfQ2FsX1BXTSk7CisJfSBlbHNlIGlmIChib2FyZHR5cGUucmVnX3R5cGUgPT0gbmlfcmVnXzYxNDMpIHsKKwkJLy8gaW50ZXJuYWwgUFdNIGFuYWxvZyBvdXRwdXQgdXNlZCBmb3IgQUkgbm9ubGluZWFyaXR5IGNhbGlicmF0aW9uCisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9JTlRFUk5BTDsKKwkJcy0+aW5zbl9jb25maWcgPSAmbmlfNjE0M19wd21fY29uZmlnOworCQlzLT5uX2NoYW4gPSAxOworCQlzLT5tYXhkYXRhID0gMDsKKwl9IGVsc2UgeworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEUgfCBTREZfSU5URVJOQUw7CisJCXMtPmluc25fcmVhZCA9ICZuaV9jYWxpYl9pbnNuX3JlYWQ7CisJCXMtPmluc25fd3JpdGUgPSAmbmlfY2FsaWJfaW5zbl93cml0ZTsKKwkJY2FsZGFjX3NldHVwKGRldiwgcyk7CisJfQorCisJLyogRUVQUk9NICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0VFUFJPTV9TVUJERVY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX01FTU9SWTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfSU5URVJOQUw7CisJcy0+bWF4ZGF0YSA9IDB4ZmY7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCXMtPm5fY2hhbiA9IE1fU0VSSUVTX0VFUFJPTV9TSVpFOworCQlzLT5pbnNuX3JlYWQgPSAmbmlfbV9zZXJpZXNfZWVwcm9tX2luc25fcmVhZDsKKwl9IGVsc2UgeworCQlzLT5uX2NoYW4gPSA1MTI7CisJCXMtPmluc25fcmVhZCA9ICZuaV9lZXByb21faW5zbl9yZWFkOworCX0KKworCS8qIFBGSSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9QRklfRElPX1NVQkRFVjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9JTlRFUk5BTDsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spIHsKKwkJdW5zaWduZWQgaTsKKwkJcy0+bl9jaGFuID0gMTY7CisJCW5pX3dyaXRldyhzLT5zdGF0ZSwgTV9PZmZzZXRfUEZJX0RPKTsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9QRklfT1VUUFVUX1NFTEVDVF9SRUdTOyArK2kpIHsKKwkJCW5pX3dyaXRldyhkZXZwcml2LT5wZmlfb3V0cHV0X3NlbGVjdF9yZWdbaV0sCisJCQkJTV9PZmZzZXRfUEZJX091dHB1dF9TZWxlY3QoaSArIDEpKTsKKwkJfQorCX0gZWxzZSB7CisJCXMtPm5fY2hhbiA9IDEwOworCX0KKwlzLT5tYXhkYXRhID0gMTsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spIHsKKwkJcy0+aW5zbl9iaXRzID0gJm5pX3BmaV9pbnNuX2JpdHM7CisJfQorCXMtPmluc25fY29uZmlnID0gJm5pX3BmaV9pbnNuX2NvbmZpZzsKKwluaV9zZXRfYml0cyhkZXYsIElPX0JpZGlyZWN0aW9uX1Bpbl9SZWdpc3RlciwgfjAsIDApOworCisJLyogY3M1NTI5IGNhbGlicmF0aW9uIGFkYyAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBOSV9DUzU1MjlfQ0FMSUJSQVRJT05fU1VCREVWOworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfNjd4eF9tYXNrKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0RJRkYgfCBTREZfSU5URVJOQUw7CisJCS8vIG9uZSBjaGFubmVsIGZvciBlYWNoIGFuYWxvZyBvdXRwdXQgY2hhbm5lbAorCQlzLT5uX2NoYW4gPSBib2FyZHR5cGUubl9hb2NoYW47CisJCXMtPm1heGRhdGEgPSAoMSA8PCAxNikgLSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOwkvKiBYWFggKi8KKwkJcy0+aW5zbl9yZWFkID0gY3M1NTI5X2FpX2luc25fcmVhZDsKKwkJcy0+aW5zbl9jb25maWcgPSBOVUxMOworCQlpbml0X2NzNTUyOShkZXYpOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CisJfQorCisJLyogU2VyaWFsICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX1NFUklBTF9TVUJERVY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX1NFUklBTDsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfSU5URVJOQUw7CisJcy0+bl9jaGFuID0gMTsKKwlzLT5tYXhkYXRhID0gMHhmZjsKKwlzLT5pbnNuX2NvbmZpZyA9IG5pX3NlcmlhbF9pbnNuX2NvbmZpZzsKKwlkZXZwcml2LT5zZXJpYWxfaW50ZXJ2YWxfbnMgPSAwOworCWRldnByaXYtPnNlcmlhbF9od19tb2RlID0gMDsKKworCS8qIFJUU0kgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgTklfUlRTSV9TVUJERVY7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfSU5URVJOQUw7CisJcy0+bl9jaGFuID0gODsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5pbnNuX2JpdHMgPSBuaV9ydHNpX2luc25fYml0czsKKwlzLT5pbnNuX2NvbmZpZyA9IG5pX3J0c2lfaW5zbl9jb25maWc7CisJbmlfcnRzaV9pbml0KGRldik7CisKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spIHsKKwkJY291bnRlcl92YXJpYW50ID0gbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOworCX0gZWxzZSB7CisJCWNvdW50ZXJfdmFyaWFudCA9IG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczsKKwl9CisJZGV2cHJpdi0+Y291bnRlcl9kZXYgPSBuaV9ncGN0X2RldmljZV9jb25zdHJ1Y3QoZGV2LAorCQkmbmlfZ3BjdF93cml0ZV9yZWdpc3RlciwgJm5pX2dwY3RfcmVhZF9yZWdpc3RlciwKKwkJY291bnRlcl92YXJpYW50LCBOVU1fR1BDVCk7CisJLyogR2VuZXJhbCBwdXJwb3NlIGNvdW50ZXJzICovCisJZm9yIChqID0gMDsgaiA8IE5VTV9HUENUOyArK2opIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0dQQ1RfU1VCREVWKGopOworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwkJcy0+c3ViZGV2X2ZsYWdzID0KKwkJCVNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRSB8IFNERl9MU0FNUEwgfCBTREZfQ01EX1JFQUQKKwkJCS8qIHwgU0RGX0NNRF9XUklURSAqLyA7CisJCXMtPm5fY2hhbiA9IDM7CisJCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJCXMtPm1heGRhdGEgPSAweGZmZmZmZmZmOworCQllbHNlCisJCQlzLT5tYXhkYXRhID0gMHhmZmZmZmY7CisJCXMtPmluc25fcmVhZCA9ICZuaV9ncGN0X2luc25fcmVhZDsKKwkJcy0+aW5zbl93cml0ZSA9ICZuaV9ncGN0X2luc25fd3JpdGU7CisJCXMtPmluc25fY29uZmlnID0gJm5pX2dwY3RfaW5zbl9jb25maWc7CisJCXMtPmRvX2NtZCA9ICZuaV9ncGN0X2NtZDsKKwkJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwkJcy0+ZG9fY21kdGVzdCA9ICZuaV9ncGN0X2NtZHRlc3Q7CisJCXMtPmNhbmNlbCA9ICZuaV9ncGN0X2NhbmNlbDsKKwkJcy0+YXN5bmNfZG1hX2RpciA9IERNQV9CSURJUkVDVElPTkFMOworCQlzLT5wcml2YXRlID0gJmRldnByaXYtPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tqXTsKKworCQlkZXZwcml2LT5jb3VudGVyX2Rldi0+Y291bnRlcnNbal0uY2hpcF9pbmRleCA9IDA7CisJCWRldnByaXYtPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tqXS5jb3VudGVyX2luZGV4ID0gajsKKwkJbmlfdGlvX2luaXRfY291bnRlcigmZGV2cHJpdi0+Y291bnRlcl9kZXYtPmNvdW50ZXJzW2pdKTsKKwl9CisKKwkvKiBGcmVxdWVuY3kgb3V0cHV0ICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIE5JX0ZSRVFfT1VUX1NVQkRFVjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEU7CisJcy0+bl9jaGFuID0gMTsKKwlzLT5tYXhkYXRhID0gMHhmOworCXMtPmluc25fcmVhZCA9ICZuaV9mcmVxX291dF9pbnNuX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9ICZuaV9mcmVxX291dF9pbnNuX3dyaXRlOworCXMtPmluc25fY29uZmlnID0gJm5pX2ZyZXFfb3V0X2luc25fY29uZmlnOworCisJLyogYWkgY29uZmlndXJhdGlvbiAqLworCW5pX2FpX3Jlc2V0KGRldiwgZGV2LT5zdWJkZXZpY2VzICsgTklfQUlfU1VCREVWKTsKKwlpZiAoKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ182eHh4X21hc2spID09IDApIHsKKwkJLy8gQkVBTSBpcyB0aGlzIG5lZWRlZCBmb3IgUENJLTYxNDMgPz8KKwkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQgPQorCQkJU2xvd19JbnRlcm5hbF9UaW1lX0RpdmlkZV9CeV8yIHwKKwkJCVNsb3dfSW50ZXJuYWxfVGltZWJhc2UgfAorCQkJQ2xvY2tfVG9fQm9hcmRfRGl2aWRlX0J5XzIgfAorCQkJQ2xvY2tfVG9fQm9hcmQgfAorCQkJQUlfT3V0cHV0X0RpdmlkZV9CeV8yIHwgQU9fT3V0cHV0X0RpdmlkZV9CeV8yOworCX0gZWxzZSB7CisJCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0ID0KKwkJCVNsb3dfSW50ZXJuYWxfVGltZV9EaXZpZGVfQnlfMiB8CisJCQlTbG93X0ludGVybmFsX1RpbWViYXNlIHwKKwkJCUNsb2NrX1RvX0JvYXJkX0RpdmlkZV9CeV8yIHwgQ2xvY2tfVG9fQm9hcmQ7CisJfQorCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5jbG9ja19hbmRfZm91dCwKKwkJQ2xvY2tfYW5kX0ZPVVRfUmVnaXN0ZXIpOworCisJLyogYW5hbG9nIG91dHB1dCBjb25maWd1cmF0aW9uICovCisJbmlfYW9fcmVzZXQoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBOSV9BT19TVUJERVYpOworCisJaWYgKGRldi0+aXJxKSB7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LAorCQkJKElSUV9QT0xBUklUWSA/IEludGVycnVwdF9PdXRwdXRfUG9sYXJpdHkgOiAwKSB8CisJCQkoSW50ZXJydXB0X091dHB1dF9Pbl8zX1BpbnMgJiAwKSB8IEludGVycnVwdF9BX0VuYWJsZSB8CisJCQlJbnRlcnJ1cHRfQl9FbmFibGUgfAorCQkJSW50ZXJydXB0X0FfT3V0cHV0X1NlbGVjdChpbnRlcnJ1cHRfcGluKGRldi0+CisJCQkJCWlycSkpIHwKKwkJCUludGVycnVwdF9CX091dHB1dF9TZWxlY3QoaW50ZXJydXB0X3BpbihkZXYtPmlycSkpLAorCQkJSW50ZXJydXB0X0NvbnRyb2xfUmVnaXN0ZXIpOworCX0KKworCS8qIERNQSBzZXR1cCAqLworCW5pX3dyaXRlYihkZXZwcml2LT5haV9hb19zZWxlY3RfcmVnLCBBSV9BT19TZWxlY3QpOworCW5pX3dyaXRlYihkZXZwcml2LT5nMF9nMV9zZWxlY3RfcmVnLCBHMF9HMV9TZWxlY3QpOworCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ182eHh4X21hc2spIHsKKwkJbmlfd3JpdGViKDAsIE1hZ2ljXzYxMXgpOworCX0gZWxzZSBpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spIHsKKwkJaW50IGNoYW5uZWw7CisJCWZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBib2FyZHR5cGUubl9hb2NoYW47ICsrY2hhbm5lbCkgeworCQkJbmlfd3JpdGViKDB4ZiwgTV9PZmZzZXRfQU9fV2F2ZWZvcm1fT3JkZXIoY2hhbm5lbCkpOworCQkJbmlfd3JpdGViKDB4MCwKKwkJCQlNX09mZnNldF9BT19SZWZlcmVuY2VfQXR0ZW51YXRpb24oY2hhbm5lbCkpOworCQl9CisJCW5pX3dyaXRlYigweDAsIE1fT2Zmc2V0X0FPX0NhbGlicmF0aW9uKTsKKwl9CisKKwlwcmludGsoIlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmlfODI1NV9jYWxsYmFjayhpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgYXJnOworCisJaWYgKGRpcikgeworCQluaV93cml0ZWIoZGF0YSwgUG9ydF9BICsgMiAqIHBvcnQpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gbmlfcmVhZGIoUG9ydF9BICsgMiAqIHBvcnQpOworCX0KK30KKworLyoKKwlwcmVzZW50cyB0aGUgRUVQUk9NIGFzIGEgc3ViZGV2aWNlCisqLworCitzdGF0aWMgaW50IG5pX2VlcHJvbV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWRhdGFbMF0gPSBuaV9yZWFkX2VlcHJvbShkZXYsIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpKTsKKworCXJldHVybiAxOworfQorCisvKgorCXJlYWRzIGJ5dGVzIG91dCBvZiBlZXByb20KKyovCisKK3N0YXRpYyBpbnQgbmlfcmVhZF9lZXByb20oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhZGRyKQoreworCWludCBiaXQ7CisJaW50IGJpdHN0cmluZzsKKworCWJpdHN0cmluZyA9IDB4MDMwMCB8ICgoYWRkciAmIDB4MTAwKSA8PCAzKSB8IChhZGRyICYgMHhmZik7CisJbmlfd3JpdGViKDB4MDQsIFNlcmlhbF9Db21tYW5kKTsKKwlmb3IgKGJpdCA9IDB4ODAwMDsgYml0OyBiaXQgPj49IDEpIHsKKwkJbmlfd3JpdGViKDB4MDQgfCAoKGJpdCAmIGJpdHN0cmluZykgPyAweDAyIDogMCksCisJCQlTZXJpYWxfQ29tbWFuZCk7CisJCW5pX3dyaXRlYigweDA1IHwgKChiaXQgJiBiaXRzdHJpbmcpID8gMHgwMiA6IDApLAorCQkJU2VyaWFsX0NvbW1hbmQpOworCX0KKwliaXRzdHJpbmcgPSAwOworCWZvciAoYml0ID0gMHg4MDsgYml0OyBiaXQgPj49IDEpIHsKKwkJbmlfd3JpdGViKDB4MDQsIFNlcmlhbF9Db21tYW5kKTsKKwkJbmlfd3JpdGViKDB4MDUsIFNlcmlhbF9Db21tYW5kKTsKKwkJYml0c3RyaW5nIHw9ICgobmlfcmVhZGIoWFhYX1N0YXR1cykgJiBQUk9NT1VUKSA/IGJpdCA6IDApOworCX0KKwluaV93cml0ZWIoMHgwMCwgU2VyaWFsX0NvbW1hbmQpOworCisJcmV0dXJuIGJpdHN0cmluZzsKK30KKworc3RhdGljIGludCBuaV9tX3Nlcmllc19lZXByb21faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzBdID0gZGV2cHJpdi0+ZWVwcm9tX2J1ZmZlcltDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuaV9nZXRfcHdtX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlkYXRhWzFdID0gZGV2cHJpdi0+cHdtX3VwX2NvdW50ICogZGV2cHJpdi0+Y2xvY2tfbnM7CisJZGF0YVsyXSA9IGRldnByaXYtPnB3bV9kb3duX2NvdW50ICogZGV2cHJpdi0+Y2xvY2tfbnM7CisJcmV0dXJuIDM7Cit9CisKK3N0YXRpYyBpbnQgbmlfbV9zZXJpZXNfcHdtX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgdXBfY291bnQsIGRvd25fY291bnQ7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19QV01fT1VUUFVUOgorCQlzd2l0Y2ggKGRhdGFbMV0pIHsKKwkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJCQl1cF9jb3VudCA9CisJCQkJKGRhdGFbMl0gKworCQkJCWRldnByaXYtPmNsb2NrX25zIC8gMikgLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfRE9XTjoKKwkJCXVwX2NvdW50ID0gZGF0YVsyXSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJCXVwX2NvdW50ID0KKwkJCQkoZGF0YVsyXSArIGRldnByaXYtPmNsb2NrX25zIC0KKwkJCQkxKSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXN3aXRjaCAoZGF0YVszXSkgeworCQljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwkJCWRvd25fY291bnQgPQorCQkJCShkYXRhWzRdICsKKwkJCQlkZXZwcml2LT5jbG9ja19ucyAvIDIpIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCQlkb3duX2NvdW50ID0gZGF0YVs0XSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9VUDoKKwkJCWRvd25fY291bnQgPQorCQkJCShkYXRhWzRdICsgZGV2cHJpdi0+Y2xvY2tfbnMgLQorCQkJCTEpIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHVwX2NvdW50ICogZGV2cHJpdi0+Y2xvY2tfbnMgIT0gZGF0YVsyXSB8fAorCQkJZG93bl9jb3VudCAqIGRldnByaXYtPmNsb2NrX25zICE9IGRhdGFbNF0pIHsKKwkJCWRhdGFbMl0gPSB1cF9jb3VudCAqIGRldnByaXYtPmNsb2NrX25zOworCQkJZGF0YVs0XSA9IGRvd25fY291bnQgKiBkZXZwcml2LT5jbG9ja19uczsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCW5pX3dyaXRlbChNU2VyaWVzX0NhbF9QV01fSGlnaF9UaW1lX0JpdHModXBfY291bnQpIHwKKwkJCU1TZXJpZXNfQ2FsX1BXTV9Mb3dfVGltZV9CaXRzKGRvd25fY291bnQpLAorCQkJTV9PZmZzZXRfQ2FsX1BXTSk7CisJCWRldnByaXYtPnB3bV91cF9jb3VudCA9IHVwX2NvdW50OworCQlkZXZwcml2LT5wd21fZG93bl9jb3VudCA9IGRvd25fY291bnQ7CisJCXJldHVybiA1OworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0dFVF9QV01fT1VUUFVUOgorCQlyZXR1cm4gbmlfZ2V0X3B3bV9jb25maWcoZGV2LCBkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV82MTQzX3B3bV9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXVuc2lnbmVkIHVwX2NvdW50LCBkb3duX2NvdW50OworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfUFdNX09VVFBVVDoKKwkJc3dpdGNoIChkYXRhWzFdKSB7CisJCWNhc2UgVFJJR19ST1VORF9ORUFSRVNUOgorCQkJdXBfY291bnQgPQorCQkJCShkYXRhWzJdICsKKwkJCQlkZXZwcml2LT5jbG9ja19ucyAvIDIpIC8gZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlicmVhazsKKwkJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCQl1cF9jb3VudCA9IGRhdGFbMl0gLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfVVA6CisJCQl1cF9jb3VudCA9CisJCQkJKGRhdGFbMl0gKyBkZXZwcml2LT5jbG9ja19ucyAtCisJCQkJMSkgLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlzd2l0Y2ggKGRhdGFbM10pIHsKKwkJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CisJCQlkb3duX2NvdW50ID0KKwkJCQkoZGF0YVs0XSArCisJCQkJZGV2cHJpdi0+Y2xvY2tfbnMgLyAyKSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWNhc2UgVFJJR19ST1VORF9ET1dOOgorCQkJZG93bl9jb3VudCA9IGRhdGFbNF0gLyBkZXZwcml2LT5jbG9ja19uczsKKwkJCWJyZWFrOworCQljYXNlIFRSSUdfUk9VTkRfVVA6CisJCQlkb3duX2NvdW50ID0KKwkJCQkoZGF0YVs0XSArIGRldnByaXYtPmNsb2NrX25zIC0KKwkJCQkxKSAvIGRldnByaXYtPmNsb2NrX25zOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmICh1cF9jb3VudCAqIGRldnByaXYtPmNsb2NrX25zICE9IGRhdGFbMl0gfHwKKwkJCWRvd25fY291bnQgKiBkZXZwcml2LT5jbG9ja19ucyAhPSBkYXRhWzRdKSB7CisJCQlkYXRhWzJdID0gdXBfY291bnQgKiBkZXZwcml2LT5jbG9ja19uczsKKwkJCWRhdGFbNF0gPSBkb3duX2NvdW50ICogZGV2cHJpdi0+Y2xvY2tfbnM7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQluaV93cml0ZWwodXBfY291bnQsIENhbGlicmF0aW9uX0hpZ2hUaW1lXzYxNDMpOworCQlkZXZwcml2LT5wd21fdXBfY291bnQgPSB1cF9jb3VudDsKKwkJbmlfd3JpdGVsKGRvd25fY291bnQsIENhbGlicmF0aW9uX0xvd1RpbWVfNjE0Myk7CisJCWRldnByaXYtPnB3bV9kb3duX2NvdW50ID0gZG93bl9jb3VudDsKKwkJcmV0dXJuIDU7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX1BXTV9PVVRQVVQ6CisJCXJldHVybiBuaV9nZXRfcHdtX2NvbmZpZyhkZXYsIGRhdGEpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5pX3dyaXRlX2NhbGRhYyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFkZHIsIGludCB2YWwpOworLyoKKwljYWxpYnJhdGlvbiBzdWJkZXZpY2UKKyovCitzdGF0aWMgaW50IG5pX2NhbGliX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCW5pX3dyaXRlX2NhbGRhYyhkZXYsIENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpLCBkYXRhWzBdKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX2NhbGliX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJZGF0YVswXSA9IGRldnByaXYtPmNhbGRhY3NbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGFja19tYjg4MzQxKGludCBhZGRyLCBpbnQgdmFsLCBpbnQgKmJpdHN0cmluZyk7CitzdGF0aWMgaW50IHBhY2tfZGFjODgwMChpbnQgYWRkciwgaW50IHZhbCwgaW50ICpiaXRzdHJpbmcpOworc3RhdGljIGludCBwYWNrX2RhYzgwNDMoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKTsKK3N0YXRpYyBpbnQgcGFja19hZDg1MjIoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKTsKK3N0YXRpYyBpbnQgcGFja19hZDg4MDQoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKTsKK3N0YXRpYyBpbnQgcGFja19hZDg4NDIoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKTsKKworc3RydWN0IGNhbGRhY19zdHJ1Y3QgeworCWludCBuX2NoYW5zOworCWludCBuX2JpdHM7CisJaW50ICgqcGFja2JpdHMpIChpbnQsIGludCwgaW50ICopOworfTsKKworc3RhdGljIHN0cnVjdCBjYWxkYWNfc3RydWN0IGNhbGRhY3NbXSA9IHsKKwlbbWI4ODM0MV0gPSB7MTIsIDgsIHBhY2tfbWI4ODM0MX0sCisJW2RhYzg4MDBdID0gezgsIDgsIHBhY2tfZGFjODgwMH0sCisJW2RhYzgwNDNdID0gezEsIDEyLCBwYWNrX2RhYzgwNDN9LAorCVthZDg1MjJdID0gezIsIDEyLCBwYWNrX2FkODUyMn0sCisJW2FkODgwNF0gPSB7MTIsIDgsIHBhY2tfYWQ4ODA0fSwKKwlbYWQ4ODQyXSA9IHs4LCA4LCBwYWNrX2FkODg0Mn0sCisJW2FkODgwNF9kZWJ1Z10gPSB7MTYsIDgsIHBhY2tfYWQ4ODA0fSwKK307CisKK3N0YXRpYyB2b2lkIGNhbGRhY19zZXR1cChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBpLCBqOworCWludCBuX2RhY3M7CisJaW50IG5fY2hhbnMgPSAwOworCWludCBuX2JpdHM7CisJaW50IGRpZmZiaXRzID0gMDsKKwlpbnQgdHlwZTsKKwlpbnQgY2hhbjsKKworCXR5cGUgPSBib2FyZHR5cGUuY2FsZGFjWzBdOworCWlmICh0eXBlID09IGNhbGRhY19ub25lKQorCQlyZXR1cm47CisJbl9iaXRzID0gY2FsZGFjc1t0eXBlXS5uX2JpdHM7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQl0eXBlID0gYm9hcmR0eXBlLmNhbGRhY1tpXTsKKwkJaWYgKHR5cGUgPT0gY2FsZGFjX25vbmUpCisJCQlicmVhazsKKwkJaWYgKGNhbGRhY3NbdHlwZV0ubl9iaXRzICE9IG5fYml0cykKKwkJCWRpZmZiaXRzID0gMTsKKwkJbl9jaGFucyArPSBjYWxkYWNzW3R5cGVdLm5fY2hhbnM7CisJfQorCW5fZGFjcyA9IGk7CisJcy0+bl9jaGFuID0gbl9jaGFuczsKKworCWlmIChkaWZmYml0cykgeworCQl1bnNpZ25lZCBpbnQgKm1heGRhdGFfbGlzdDsKKworCQlpZiAobl9jaGFucyA+IE1BWF9OX0NBTERBQ1MpIHsKKwkJCXByaW50aygiQlVHISBNQVhfTl9DQUxEQUNTIHRvbyBzbWFsbFxuIik7CisJCX0KKwkJcy0+bWF4ZGF0YV9saXN0ID0gbWF4ZGF0YV9saXN0ID0gZGV2cHJpdi0+Y2FsZGFjX21heGRhdGFfbGlzdDsKKwkJY2hhbiA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBuX2RhY3M7IGkrKykgeworCQkJdHlwZSA9IGJvYXJkdHlwZS5jYWxkYWNbaV07CisJCQlmb3IgKGogPSAwOyBqIDwgY2FsZGFjc1t0eXBlXS5uX2NoYW5zOyBqKyspIHsKKwkJCQltYXhkYXRhX2xpc3RbY2hhbl0gPQorCQkJCQkoMSA8PCBjYWxkYWNzW3R5cGVdLm5fYml0cykgLSAxOworCQkJCWNoYW4rKzsKKwkJCX0KKwkJfQorCisJCWZvciAoY2hhbiA9IDA7IGNoYW4gPCBzLT5uX2NoYW47IGNoYW4rKykKKwkJCW5pX3dyaXRlX2NhbGRhYyhkZXYsIGksIHMtPm1heGRhdGFfbGlzdFtpXSAvIDIpOworCX0gZWxzZSB7CisJCXR5cGUgPSBib2FyZHR5cGUuY2FsZGFjWzBdOworCQlzLT5tYXhkYXRhID0gKDEgPDwgY2FsZGFjc1t0eXBlXS5uX2JpdHMpIC0gMTsKKworCQlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgcy0+bl9jaGFuOyBjaGFuKyspCisJCQluaV93cml0ZV9jYWxkYWMoZGV2LCBpLCBzLT5tYXhkYXRhIC8gMik7CisJfQorfQorCitzdGF0aWMgdm9pZCBuaV93cml0ZV9jYWxkYWMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhZGRyLCBpbnQgdmFsKQoreworCXVuc2lnbmVkIGludCBsb2FkYml0ID0gMCwgYml0cyA9IDAsIGJpdCwgYml0c3RyaW5nID0gMDsKKwlpbnQgaTsKKwlpbnQgdHlwZTsKKworCS8vcHJpbnRrKCJuaV93cml0ZV9jYWxkYWM6IGNoYW49JWQgdmFsPSVkXG4iLGFkZHIsdmFsKTsKKwlpZiAoZGV2cHJpdi0+Y2FsZGFjc1thZGRyXSA9PSB2YWwpCisJCXJldHVybjsKKwlkZXZwcml2LT5jYWxkYWNzW2FkZHJdID0gdmFsOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQl0eXBlID0gYm9hcmR0eXBlLmNhbGRhY1tpXTsKKwkJaWYgKHR5cGUgPT0gY2FsZGFjX25vbmUpCisJCQlicmVhazsKKwkJaWYgKGFkZHIgPCBjYWxkYWNzW3R5cGVdLm5fY2hhbnMpIHsKKwkJCWJpdHMgPSBjYWxkYWNzW3R5cGVdLnBhY2tiaXRzKGFkZHIsIHZhbCwgJmJpdHN0cmluZyk7CisJCQlsb2FkYml0ID0gU2VyRGFjTGQoaSk7CisJCQkvL3ByaW50aygiY2FsZGFjOiB1c2luZyBpPSVkIGFkZHI9JWQgJXhcbiIsaSxhZGRyLGJpdHN0cmluZyk7CisJCQlicmVhazsKKwkJfQorCQlhZGRyIC09IGNhbGRhY3NbdHlwZV0ubl9jaGFuczsKKwl9CisKKwlmb3IgKGJpdCA9IDEgPDwgKGJpdHMgLSAxKTsgYml0OyBiaXQgPj49IDEpIHsKKwkJbmlfd3JpdGViKCgoYml0ICYgYml0c3RyaW5nKSA/IDB4MDIgOiAwKSwgU2VyaWFsX0NvbW1hbmQpOworCQljb21lZGlfdWRlbGF5KDEpOworCQluaV93cml0ZWIoMSB8ICgoYml0ICYgYml0c3RyaW5nKSA/IDB4MDIgOiAwKSwgU2VyaWFsX0NvbW1hbmQpOworCQljb21lZGlfdWRlbGF5KDEpOworCX0KKwluaV93cml0ZWIobG9hZGJpdCwgU2VyaWFsX0NvbW1hbmQpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJbmlfd3JpdGViKDAsIFNlcmlhbF9Db21tYW5kKTsKK30KKworc3RhdGljIGludCBwYWNrX21iODgzNDEoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKQoreworCS8qCisJICAgRnVqaXRzdSBNQiA4ODM0MQorCSAgIE5vdGUgdGhhdCBhZGRyZXNzIGJpdHMgYXJlIHJldmVyc2VkLiAgVGhhbmtzIHRvCisJICAgSW5nbyBLZWVuIGZvciBub3RpY2luZyB0aGlzLgorCisJICAgTm90ZSBhbHNvIHRoYXQgdGhlIDg4MzQxIGV4cGVjdHMgYWRkcmVzcyB2YWx1ZXMgZnJvbQorCSAgIDEtMTIsIHdoZXJlYXMgd2UgdXNlIGNoYW5uZWwgbnVtYmVycyAwLTExLiAgVGhlIE5JCisJICAgZG9jcyB1c2UgMS0xMiwgYWxzbywgc28gYmUgY2FyZWZ1bCBoZXJlLgorCSAqLworCWFkZHIrKzsKKwkqYml0c3RyaW5nID0gKChhZGRyICYgMHgxKSA8PCAxMSkgfAorCQkoKGFkZHIgJiAweDIpIDw8IDkpIHwKKwkJKChhZGRyICYgMHg0KSA8PCA3KSB8ICgoYWRkciAmIDB4OCkgPDwgNSkgfCAodmFsICYgMHhmZik7CisJcmV0dXJuIDEyOworfQorCitzdGF0aWMgaW50IHBhY2tfZGFjODgwMChpbnQgYWRkciwgaW50IHZhbCwgaW50ICpiaXRzdHJpbmcpCit7CisJKmJpdHN0cmluZyA9ICgoYWRkciAmIDB4NykgPDwgOCkgfCAodmFsICYgMHhmZik7CisJcmV0dXJuIDExOworfQorCitzdGF0aWMgaW50IHBhY2tfZGFjODA0MyhpbnQgYWRkciwgaW50IHZhbCwgaW50ICpiaXRzdHJpbmcpCit7CisJKmJpdHN0cmluZyA9IHZhbCAmIDB4ZmZmOworCXJldHVybiAxMjsKK30KKworc3RhdGljIGludCBwYWNrX2FkODUyMihpbnQgYWRkciwgaW50IHZhbCwgaW50ICpiaXRzdHJpbmcpCit7CisJKmJpdHN0cmluZyA9ICh2YWwgJiAweGZmZikgfCAoYWRkciA/IDB4YzAwMCA6IDB4YTAwMCk7CisJcmV0dXJuIDE2OworfQorCitzdGF0aWMgaW50IHBhY2tfYWQ4ODA0KGludCBhZGRyLCBpbnQgdmFsLCBpbnQgKmJpdHN0cmluZykKK3sKKwkqYml0c3RyaW5nID0gKChhZGRyICYgMHhmKSA8PCA4KSB8ICh2YWwgJiAweGZmKTsKKwlyZXR1cm4gMTI7Cit9CisKK3N0YXRpYyBpbnQgcGFja19hZDg4NDIoaW50IGFkZHIsIGludCB2YWwsIGludCAqYml0c3RyaW5nKQoreworCSpiaXRzdHJpbmcgPSAoKGFkZHIgKyAxKSA8PCA4KSB8ICh2YWwgJiAweGZmKTsKKwlyZXR1cm4gMTI7Cit9CisKKyNpZiAwCisvKgorICoJUmVhZCB0aGUgR1BDVHMgY3VycmVudCB2YWx1ZS4KKyAqLworc3RhdGljIGludCBHUENUX0dfV2F0Y2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGFuKQoreworCXVuc2lnbmVkIGludCBoaTEsIGhpMiwgbG87CisKKwlkZXZwcml2LT5ncGN0X2NvbW1hbmRbY2hhbl0gJj0gfkdfU2F2ZV9UcmFjZTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Z3BjdF9jb21tYW5kW2NoYW5dLAorCQlHX0NvbW1hbmRfUmVnaXN0ZXIoY2hhbikpOworCisJZGV2cHJpdi0+Z3BjdF9jb21tYW5kW2NoYW5dIHw9IEdfU2F2ZV9UcmFjZTsKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Z3BjdF9jb21tYW5kW2NoYW5dLAorCQlHX0NvbW1hbmRfUmVnaXN0ZXIoY2hhbikpOworCisJLyogVGhpcyBwcm9jZWR1cmUgaXMgdXNlZCBiZWNhdXNlIHRoZSB0d28gcmVnaXN0ZXJzIGNhbm5vdAorCSAqIGJlIHJlYWQgYXRvbWljYWxseS4gKi8KKwlkbyB7CisJCWhpMSA9IGRldnByaXYtPnN0Y19yZWFkdyhkZXYsIEdfU2F2ZV9SZWdpc3Rlcl9IaWdoKGNoYW4pKTsKKwkJbG8gPSBkZXZwcml2LT5zdGNfcmVhZHcoZGV2LCBHX1NhdmVfUmVnaXN0ZXJfTG93KGNoYW4pKTsKKwkJaGkyID0gZGV2cHJpdi0+c3RjX3JlYWR3KGRldiwgR19TYXZlX1JlZ2lzdGVyX0hpZ2goY2hhbikpOworCX0gd2hpbGUgKGhpMSAhPSBoaTIpOworCisJcmV0dXJuIChoaTEgPDwgMTYpIHwgbG87Cit9CisKK3N0YXRpYyB2b2lkIEdQQ1RfUmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGFuKQoreworCWludCB0ZW1wX2Fja19yZWcgPSAwOworCisJLy9wcmludGsoIkdQQ1RfUmVzZXQuLi4iKTsKKwlkZXZwcml2LT5ncGN0X2N1cl9vcGVyYXRpb25bY2hhbl0gPSBHUENUX1JFU0VUOworCisJc3dpdGNoIChjaGFuKSB7CisJY2FzZSAwOgorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgRzBfUmVzZXQsIEpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKwkJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXIsCisJCQlHMF9UQ19JbnRlcnJ1cHRfRW5hYmxlLCAwKTsKKwkJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXIsCisJCQlHMF9HYXRlX0ludGVycnVwdF9FbmFibGUsIDApOworCQl0ZW1wX2Fja19yZWcgfD0gRzBfR2F0ZV9FcnJvcl9Db25maXJtOworCQl0ZW1wX2Fja19yZWcgfD0gRzBfVENfRXJyb3JfQ29uZmlybTsKKwkJdGVtcF9hY2tfcmVnIHw9IEcwX1RDX0ludGVycnVwdF9BY2s7CisJCXRlbXBfYWNrX3JlZyB8PSBHMF9HYXRlX0ludGVycnVwdF9BY2s7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCB0ZW1wX2Fja19yZWcsCisJCQlJbnRlcnJ1cHRfQV9BY2tfUmVnaXN0ZXIpOworCisJCS8vcHJvYmxlbS4uLnRoaXMgaW50ZXJmZXJlcyB3aXRoIHRoZSBvdGhlciBjdHIuLi4KKwkJZGV2cHJpdi0+YW5fdHJpZ19ldGNfcmVnIHw9IEdQRk9fMF9PdXRwdXRfRW5hYmxlOworCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+YW5fdHJpZ19ldGNfcmVnLAorCQkJQW5hbG9nX1RyaWdnZXJfRXRjX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgRzFfUmVzZXQsIEpvaW50X1Jlc2V0X1JlZ2lzdGVyKTsKKwkJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXIsCisJCQlHMV9UQ19JbnRlcnJ1cHRfRW5hYmxlLCAwKTsKKwkJbmlfc2V0X2JpdHMoZGV2LCBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXIsCisJCQlHMF9HYXRlX0ludGVycnVwdF9FbmFibGUsIDApOworCQl0ZW1wX2Fja19yZWcgfD0gRzFfR2F0ZV9FcnJvcl9Db25maXJtOworCQl0ZW1wX2Fja19yZWcgfD0gRzFfVENfRXJyb3JfQ29uZmlybTsKKwkJdGVtcF9hY2tfcmVnIHw9IEcxX1RDX0ludGVycnVwdF9BY2s7CisJCXRlbXBfYWNrX3JlZyB8PSBHMV9HYXRlX0ludGVycnVwdF9BY2s7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCB0ZW1wX2Fja19yZWcsCisJCQlJbnRlcnJ1cHRfQl9BY2tfUmVnaXN0ZXIpOworCisJCWRldnByaXYtPmFuX3RyaWdfZXRjX3JlZyB8PSBHUEZPXzFfT3V0cHV0X0VuYWJsZTsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPmFuX3RyaWdfZXRjX3JlZywKKwkJCUFuYWxvZ19UcmlnZ2VyX0V0Y19SZWdpc3Rlcik7CisJCWJyZWFrOworCX07CisKKwlkZXZwcml2LT5ncGN0X21vZGVbY2hhbl0gPSAwOworCWRldnByaXYtPmdwY3RfaW5wdXRfc2VsZWN0W2NoYW5dID0gMDsKKwlkZXZwcml2LT5ncGN0X2NvbW1hbmRbY2hhbl0gPSAwOworCisJZGV2cHJpdi0+Z3BjdF9jb21tYW5kW2NoYW5dIHw9IEdfU3luY2hyb25pemVkX0dhdGU7CisKKwlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+Z3BjdF9tb2RlW2NoYW5dLAorCQlHX01vZGVfUmVnaXN0ZXIoY2hhbikpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ncGN0X2lucHV0X3NlbGVjdFtjaGFuXSwKKwkJR19JbnB1dF9TZWxlY3RfUmVnaXN0ZXIoY2hhbikpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAwLCBHX0F1dG9pbmNyZW1lbnRfUmVnaXN0ZXIoY2hhbikpOworCisJLy9wcmludGsoImV4aXQgR1BDVF9SZXNldFxuIik7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IG5pX2dwY3RfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyID0gcy0+cHJpdmF0ZTsKKwlyZXR1cm4gbmlfdGlvX2luc25fY29uZmlnKGNvdW50ZXIsIGluc24sIGRhdGEpOworfQorCitzdGF0aWMgaW50IG5pX2dwY3RfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CisJcmV0dXJuIG5pX3Rpb19yaW5zbihjb3VudGVyLCBpbnNuLCBkYXRhKTsKK30KKworc3RhdGljIGludCBuaV9ncGN0X2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyID0gcy0+cHJpdmF0ZTsKKwlyZXR1cm4gbmlfdGlvX3dpbnNuKGNvdW50ZXIsIGluc24sIGRhdGEpOworfQorCitzdGF0aWMgaW50IG5pX2dwY3RfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IHJldHZhbDsKKyNpZmRlZiBQQ0lETUEKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CisvLyAgICAgIGNvbnN0IHN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCXJldHZhbCA9IG5pX3JlcXVlc3RfZ3BjdF9taXRlX2NoYW5uZWwoZGV2LCBjb3VudGVyLT5jb3VudGVyX2luZGV4LAorCQlDT01FRElfSU5QVVQpOworCWlmIChyZXR2YWwpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwKKwkJCSJubyBkbWEgY2hhbm5lbCBhdmFpbGFibGUgZm9yIHVzZSBieSBjb3VudGVyIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCW5pX3Rpb19hY2tub3dsZWRnZV9hbmRfY29uZmlybShjb3VudGVyLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwluaV9lX3Nlcmllc19lbmFibGVfc2Vjb25kX2lycShkZXYsIGNvdW50ZXItPmNvdW50ZXJfaW5kZXgsIDEpOworCXJldHZhbCA9IG5pX3Rpb19jbWQoY291bnRlciwgcy0+YXN5bmMpOworI2Vsc2UKKwlyZXR2YWwgPSAtRU5PVFNVUFA7CisjZW5kaWYKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5pX2dwY3RfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworI2lmZGVmIFBDSURNQQorCXN0cnVjdCBuaV9ncGN0ICpjb3VudGVyID0gcy0+cHJpdmF0ZTsKKworCXJldHVybiBuaV90aW9fY21kdGVzdChjb3VudGVyLCBjbWQpOworI2Vsc2UKKwlyZXR1cm4gLUVOT1RTVVBQOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgbmlfZ3BjdF9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKyNpZmRlZiBQQ0lETUEKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IG5pX3Rpb19jYW5jZWwoY291bnRlcik7CisJbmlfZV9zZXJpZXNfZW5hYmxlX3NlY29uZF9pcnEoZGV2LCBjb3VudGVyLT5jb3VudGVyX2luZGV4LCAwKTsKKwluaV9yZWxlYXNlX2dwY3RfbWl0ZV9jaGFubmVsKGRldiwgY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJcmV0dXJuIHJldHZhbDsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyoKKyAqCisgKiAgUHJvZ3JhbW1hYmxlIEZ1bmN0aW9uIElucHV0cworICoKKyAqLworCitzdGF0aWMgaW50IG5pX21fc2VyaWVzX3NldF9wZmlfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbiwKKwl1bnNpZ25lZCBzb3VyY2UpCit7CisJdW5zaWduZWQgcGZpX3JlZ19pbmRleDsKKwl1bnNpZ25lZCBhcnJheV9vZmZzZXQ7CisJaWYgKChzb3VyY2UgJiAweDFmKSAhPSBzb3VyY2UpCisJCXJldHVybiAtRUlOVkFMOworCXBmaV9yZWdfaW5kZXggPSAxICsgY2hhbiAvIDM7CisJYXJyYXlfb2Zmc2V0ID0gcGZpX3JlZ19pbmRleCAtIDE7CisJZGV2cHJpdi0+cGZpX291dHB1dF9zZWxlY3RfcmVnW2FycmF5X29mZnNldF0gJj0KKwkJfk1TZXJpZXNfUEZJX091dHB1dF9TZWxlY3RfTWFzayhjaGFuKTsKKwlkZXZwcml2LT5wZmlfb3V0cHV0X3NlbGVjdF9yZWdbYXJyYXlfb2Zmc2V0XSB8PQorCQlNU2VyaWVzX1BGSV9PdXRwdXRfU2VsZWN0X0JpdHMoY2hhbiwgc291cmNlKTsKKwluaV93cml0ZXcoZGV2cHJpdi0+cGZpX291dHB1dF9zZWxlY3RfcmVnW2FycmF5X29mZnNldF0sCisJCU1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0KHBmaV9yZWdfaW5kZXgpKTsKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBuaV9vbGRfc2V0X3BmaV9yb3V0aW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFuLAorCXVuc2lnbmVkIHNvdXJjZSkKK3sKKwkvLyBwcmUtbS1zZXJpZXMgYm9hcmRzIGhhdmUgZml4ZWQgc2lnbmFscyBvbiBwZmkgcGlucworCWlmIChzb3VyY2UgIT0gbmlfb2xkX2dldF9wZmlfcm91dGluZyhkZXYsIGNoYW4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBuaV9zZXRfcGZpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4sCisJdW5zaWduZWQgc291cmNlKQoreworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJcmV0dXJuIG5pX21fc2VyaWVzX3NldF9wZmlfcm91dGluZyhkZXYsIGNoYW4sIHNvdXJjZSk7CisJZWxzZQorCQlyZXR1cm4gbmlfb2xkX3NldF9wZmlfcm91dGluZyhkZXYsIGNoYW4sIHNvdXJjZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9tX3Nlcmllc19nZXRfcGZpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4pCit7CisJY29uc3QgdW5zaWduZWQgYXJyYXlfb2Zmc2V0ID0gY2hhbiAvIDM7CisJcmV0dXJuIE1TZXJpZXNfUEZJX091dHB1dF9TZWxlY3RfU291cmNlKGNoYW4sCisJCWRldnByaXYtPnBmaV9vdXRwdXRfc2VsZWN0X3JlZ1thcnJheV9vZmZzZXRdKTsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pX29sZF9nZXRfcGZpX3JvdXRpbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4pCit7CisJLy8gcHJlLW0tc2VyaWVzIGJvYXJkcyBoYXZlIGZpeGVkIHNpZ25hbHMgb24gcGZpIHBpbnMKKwlzd2l0Y2ggKGNoYW4pIHsKKwljYXNlIDA6CisJCXJldHVybiBOSV9QRklfT1VUUFVUX0FJX1NUQVJUMTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklfUEZJX09VVFBVVF9BSV9TVEFSVDI7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JX1BGSV9PVVRQVVRfQUlfQ09OVkVSVDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXR1cm4gTklfUEZJX09VVFBVVF9HX1NSQzE7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcmV0dXJuIE5JX1BGSV9PVVRQVVRfR19HQVRFMTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlyZXR1cm4gTklfUEZJX09VVFBVVF9BT19VUERBVEVfTjsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlyZXR1cm4gTklfUEZJX09VVFBVVF9BT19TVEFSVDE7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJcmV0dXJuIE5JX1BGSV9PVVRQVVRfQUlfU1RBUlRfUFVMU0U7CisJCWJyZWFrOworCWNhc2UgODoKKwkJcmV0dXJuIE5JX1BGSV9PVVRQVVRfR19TUkMwOworCQlicmVhazsKKwljYXNlIDk6CisJCXJldHVybiBOSV9QRklfT1VUUFVUX0dfR0FURTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aygiJXM6IGJ1ZywgdW5oYW5kbGVkIGNhc2UgaW4gc3dpdGNoLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfZ2V0X3BmaV9yb3V0aW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFuKQoreworCWlmIChib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykKKwkJcmV0dXJuIG5pX21fc2VyaWVzX2dldF9wZmlfcm91dGluZyhkZXYsIGNoYW4pOworCWVsc2UKKwkJcmV0dXJuIG5pX29sZF9nZXRfcGZpX3JvdXRpbmcoZGV2LCBjaGFuKTsKK30KKworc3RhdGljIGludCBuaV9jb25maWdfZmlsdGVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBwZmlfY2hhbm5lbCwKKwllbnVtIG5pX3BmaV9maWx0ZXJfc2VsZWN0IGZpbHRlcikKK3sKKwl1bnNpZ25lZCBiaXRzOworCWlmICgoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spID09IDApIHsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisJYml0cyA9IG5pX3JlYWRsKE1fT2Zmc2V0X1BGSV9GaWx0ZXIpOworCWJpdHMgJj0gfk1TZXJpZXNfUEZJX0ZpbHRlcl9TZWxlY3RfTWFzayhwZmlfY2hhbm5lbCk7CisJYml0cyB8PSBNU2VyaWVzX1BGSV9GaWx0ZXJfU2VsZWN0X0JpdHMocGZpX2NoYW5uZWwsIGZpbHRlcik7CisJbmlfd3JpdGVsKGJpdHMsIE1fT2Zmc2V0X1BGSV9GaWx0ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX3BmaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmICgoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spID09IDApIHsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisJCW5pX3dyaXRldyhzLT5zdGF0ZSwgTV9PZmZzZXRfUEZJX0RPKTsKKwl9CisJZGF0YVsxXSA9IG5pX3JlYWR3KE1fT2Zmc2V0X1BGSV9ESSk7CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfcGZpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbjsKKworCWlmIChpbnNuLT5uIDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIENPTUVESV9PVVRQVVQ6CisJCW5pX3NldF9iaXRzKGRldiwgSU9fQmlkaXJlY3Rpb25fUGluX1JlZ2lzdGVyLCAxIDw8IGNoYW4sIDEpOworCQlicmVhazsKKwljYXNlIENPTUVESV9JTlBVVDoKKwkJbmlfc2V0X2JpdHMoZGV2LCBJT19CaWRpcmVjdGlvbl9QaW5fUmVnaXN0ZXIsIDEgPDwgY2hhbiwgMCk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShkZXZwcml2LT4KKwkJCWlvX2JpZGlyZWN0aW9uX3Bpbl9yZWcgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDoKKwkJCUNPTUVESV9JTlBVVDsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX1JPVVRJTkc6CisJCXJldHVybiBuaV9zZXRfcGZpX3JvdXRpbmcoZGV2LCBjaGFuLCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfUk9VVElORzoKKwkJZGF0YVsxXSA9IG5pX2dldF9wZmlfcm91dGluZyhkZXYsIGNoYW4pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0ZJTFRFUjoKKwkJcmV0dXJuIG5pX2NvbmZpZ19maWx0ZXIoZGV2LCBjaGFuLCBkYXRhWzFdKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKgorICoKKyAqICBOSSBSVFNJIEJ1cyBGdW5jdGlvbnMKKyAqCisgKi8KK3N0YXRpYyB2b2lkIG5pX3J0c2lfaW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwkvLyBJbml0aWFsaXNlcyB0aGUgUlRTSSBidXMgc2lnbmFsIHN3aXRjaCB0byBhIGRlZmF1bHQgc3RhdGUKKworCS8vIFNldCBjbG9jayBtb2RlIHRvIGludGVybmFsCisJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQyID0gTVNlcmllc19SVFNJXzEwTUh6X0JpdDsKKwlpZiAobmlfc2V0X21hc3Rlcl9jbG9jayhkZXYsIE5JX01JT19JTlRFUk5BTF9DTE9DSywgMCkgPCAwKSB7CisJCXJ0X3ByaW50aygibmlfc2V0X21hc3Rlcl9jbG9jayBmYWlsZWQsIGJ1Zz8iKTsKKwl9CisJLy8gZGVmYXVsdCBpbnRlcm5hbCBsaW5lcyByb3V0aW5nIHRvIFJUU0kgYnVzIGxpbmVzCisJZGV2cHJpdi0+cnRzaV90cmlnX2Ffb3V0cHV0X3JlZyA9CisJCVJUU0lfVHJpZ19PdXRwdXRfQml0cygwLAorCQlOSV9SVFNJX09VVFBVVF9BRFJfU1RBUlQxKSB8IFJUU0lfVHJpZ19PdXRwdXRfQml0cygxLAorCQlOSV9SVFNJX09VVFBVVF9BRFJfU1RBUlQyKSB8IFJUU0lfVHJpZ19PdXRwdXRfQml0cygyLAorCQlOSV9SVFNJX09VVFBVVF9TQ0xLRykgfCBSVFNJX1RyaWdfT3V0cHV0X0JpdHMoMywKKwkJTklfUlRTSV9PVVRQVVRfREFDVVBETik7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPnJ0c2lfdHJpZ19hX291dHB1dF9yZWcsCisJCVJUU0lfVHJpZ19BX091dHB1dF9SZWdpc3Rlcik7CisJZGV2cHJpdi0+cnRzaV90cmlnX2Jfb3V0cHV0X3JlZyA9CisJCVJUU0lfVHJpZ19PdXRwdXRfQml0cyg0LAorCQlOSV9SVFNJX09VVFBVVF9EQV9TVEFSVDEpIHwgUlRTSV9UcmlnX091dHB1dF9CaXRzKDUsCisJCU5JX1JUU0lfT1VUUFVUX0dfU1JDMCkgfCBSVFNJX1RyaWdfT3V0cHV0X0JpdHMoNiwKKwkJTklfUlRTSV9PVVRQVVRfR19HQVRFMCk7CisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQlkZXZwcml2LT5ydHNpX3RyaWdfYl9vdXRwdXRfcmVnIHw9CisJCQlSVFNJX1RyaWdfT3V0cHV0X0JpdHMoNywgTklfUlRTSV9PVVRQVVRfUlRTSV9PU0MpOworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ydHNpX3RyaWdfYl9vdXRwdXRfcmVnLAorCQlSVFNJX1RyaWdfQl9PdXRwdXRfUmVnaXN0ZXIpOworCisJLy8gU2V0cyB0aGUgc291cmNlIGFuZCBkaXJlY3Rpb24gb2YgdGhlIDQgb24gYm9hcmQgbGluZXMKKy8vICAgICAgZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIDB4MDAwMCwgUlRTSV9Cb2FyZF9SZWdpc3Rlcik7Cit9CisKK3N0YXRpYyBpbnQgbmlfcnRzaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IDA7CisKKwlyZXR1cm4gMjsKK30KKworLyogRmluZCBiZXN0IG11bHRpcGxpZXIvZGl2aWRlciB0byB0cnkgYW5kIGdldCB0aGUgUExMIHJ1bm5pbmcgYXQgODAgTUh6CisgKiBnaXZlbiBhbiBhcmJpdHJhcnkgZnJlcXVlbmN5IGlucHV0IGNsb2NrICovCitzdGF0aWMgaW50IG5pX21zZXJpZXNfZ2V0X3BsbF9wYXJhbWV0ZXJzKHVuc2lnbmVkIHJlZmVyZW5jZV9wZXJpb2RfbnMsCisJdW5zaWduZWQgKmZyZXFfZGl2aWRlciwgdW5zaWduZWQgKmZyZXFfbXVsdGlwbGllciwKKwl1bnNpZ25lZCAqYWN0dWFsX3BlcmlvZF9ucykKK3sKKwl1bnNpZ25lZCBkaXY7CisJdW5zaWduZWQgYmVzdF9kaXYgPSAxOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfZGl2ID0gMHgxMDsKKwl1bnNpZ25lZCBtdWx0OworCXVuc2lnbmVkIGJlc3RfbXVsdCA9IDE7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heF9tdWx0ID0gMHgxMDA7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHBpY29fcGVyX25hbm8gPSAxMDAwOworCisJY29uc3QgdW5zaWduZWQgcmVmZXJlbmNlX3BpY29zZWMgPSByZWZlcmVuY2VfcGVyaW9kX25zICogcGljb19wZXJfbmFubzsKKwkvKiBtLXNlcmllcyB3YW50cyB0aGUgcGhhc2VkLWxvY2tlZCBsb29wIHRvIG91dHB1dCA4ME1Ieiwgd2hpY2ggaXMgZGl2aWRlZCBieSA0IHRvCisJICogMjAgTUh6IGZvciBtb3N0IHRpbWluZyBjbG9ja3MgKi8KKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgdGFyZ2V0X3BpY29zZWMgPSAxMjUwMDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgZnVkZ2VfZmFjdG9yXzgwX3RvXzIwTWh6ID0gNDsKKwlpbnQgYmVzdF9wZXJpb2RfcGljb3NlYyA9IDA7CisJZm9yIChkaXYgPSAxOyBkaXYgPD0gbWF4X2RpdjsgKytkaXYpIHsKKwkJZm9yIChtdWx0ID0gMTsgbXVsdCA8PSBtYXhfbXVsdDsgKyttdWx0KSB7CisJCQl1bnNpZ25lZCBuZXdfcGVyaW9kX3BzID0KKwkJCQkocmVmZXJlbmNlX3BpY29zZWMgKiBkaXYpIC8gbXVsdDsKKwkJCWlmIChhYnMobmV3X3BlcmlvZF9wcyAtIHRhcmdldF9waWNvc2VjKSA8CisJCQkJYWJzKGJlc3RfcGVyaW9kX3BpY29zZWMgLSB0YXJnZXRfcGljb3NlYykpIHsKKwkJCQliZXN0X3BlcmlvZF9waWNvc2VjID0gbmV3X3BlcmlvZF9wczsKKwkJCQliZXN0X2RpdiA9IGRpdjsKKwkJCQliZXN0X211bHQgPSBtdWx0OworCQkJfQorCQl9CisJfQorCWlmIChiZXN0X3BlcmlvZF9waWNvc2VjID09IDApIHsKKwkJcnRfcHJpbnRrKCIlczogYnVnLCBmYWlsZWQgdG8gZmluZCBwbGwgcGFyYW1ldGVyc1xuIiwKKwkJCV9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlPOworCX0KKwkqZnJlcV9kaXZpZGVyID0gYmVzdF9kaXY7CisJKmZyZXFfbXVsdGlwbGllciA9IGJlc3RfbXVsdDsKKwkqYWN0dWFsX3BlcmlvZF9ucyA9CisJCShiZXN0X3BlcmlvZF9waWNvc2VjICogZnVkZ2VfZmFjdG9yXzgwX3RvXzIwTWh6ICsKKwkJKHBpY29fcGVyX25hbm8gLyAyKSkgLyBwaWNvX3Blcl9uYW5vOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG51bV9jb25maWd1cmFibGVfcnRzaV9jaGFubmVscyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCXJldHVybiA4OworCWVsc2UKKwkJcmV0dXJuIDc7Cit9CisKK3N0YXRpYyBpbnQgbmlfbXNlcmllc19zZXRfcGxsX21hc3Rlcl9jbG9jayhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc291cmNlLAorCXVuc2lnbmVkIHBlcmlvZF9ucykKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluX3BlcmlvZF9ucyA9IDUwOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfcGVyaW9kX25zID0gMTAwMDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgdGltZW91dCA9IDEwMDA7CisJdW5zaWduZWQgcGxsX2NvbnRyb2xfYml0czsKKwl1bnNpZ25lZCBmcmVxX2RpdmlkZXI7CisJdW5zaWduZWQgZnJlcV9tdWx0aXBsaWVyOworCXVuc2lnbmVkIGk7CisJaW50IHJldHZhbDsKKwlpZiAoc291cmNlID09IE5JX01JT19QTExfUFhJMTBfQ0xPQ0spCisJCXBlcmlvZF9ucyA9IDEwMDsKKwkvLyB0aGVzZSBsaW1pdHMgYXJlIHNvbWV3aGF0IGFyYml0cmFyeSwgYnV0IE5JIGFkdmVydGlzZXMgMSB0byAyME1IeiByYW5nZSBzbyB3ZSdsbCB1c2UgdGhhdAorCWlmIChwZXJpb2RfbnMgPCBtaW5fcGVyaW9kX25zIHx8IHBlcmlvZF9ucyA+IG1heF9wZXJpb2RfbnMpIHsKKwkJcnRfcHJpbnRrCisJCQkoIiVzOiB5b3UgbXVzdCBzcGVjaWZ5IGFuIGlucHV0IGNsb2NrIGZyZXF1ZW5jeSBiZXR3ZWVuICVpIGFuZCAlaSBuYW5vc2VjICIKKwkJCSJmb3IgdGhlIHBoYXNlZC1sb2NrIGxvb3AuXG4iLCBfX0ZVTkNUSU9OX18sCisJCQltaW5fcGVyaW9kX25zLCBtYXhfcGVyaW9kX25zKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnICY9IH5Vc2VfUlRTSV9DbG9ja19CaXQ7CisJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnLAorCQlSVFNJX1RyaWdfRGlyZWN0aW9uX1JlZ2lzdGVyKTsKKwlwbGxfY29udHJvbF9iaXRzID0KKwkJTVNlcmllc19QTExfRW5hYmxlX0JpdCB8IE1TZXJpZXNfUExMX1ZDT19Nb2RlXzc1XzE1ME1Iel9CaXRzOworCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0MiB8PQorCQlNU2VyaWVzX1RpbWViYXNlMV9TZWxlY3RfQml0IHwgTVNlcmllc19UaW1lYmFzZTNfU2VsZWN0X0JpdDsKKwlkZXZwcml2LT5jbG9ja19hbmRfZm91dDIgJj0gfk1TZXJpZXNfUExMX0luX1NvdXJjZV9TZWxlY3RfTWFzazsKKwlzd2l0Y2ggKHNvdXJjZSkgeworCWNhc2UgTklfTUlPX1BMTF9QWElfU1RBUl9UUklHR0VSX0NMT0NLOgorCQlkZXZwcml2LT5jbG9ja19hbmRfZm91dDIgfD0KKwkJCU1TZXJpZXNfUExMX0luX1NvdXJjZV9TZWxlY3RfU3Rhcl9UcmlnZ2VyX0JpdHM7CisJCXJldHZhbCA9IG5pX21zZXJpZXNfZ2V0X3BsbF9wYXJhbWV0ZXJzKHBlcmlvZF9ucywgJmZyZXFfZGl2aWRlciwKKwkJCSZmcmVxX211bHRpcGxpZXIsICZkZXZwcml2LT5jbG9ja19ucyk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJYnJlYWs7CisJY2FzZSBOSV9NSU9fUExMX1BYSTEwX0NMT0NLOgorCQkvKiBweGkgY2xvY2sgaXMgMTBNSHogKi8KKwkJZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQyIHw9CisJCQlNU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X1BYSV9DbG9jazEwOworCQlyZXR2YWwgPSBuaV9tc2VyaWVzX2dldF9wbGxfcGFyYW1ldGVycyhwZXJpb2RfbnMsICZmcmVxX2RpdmlkZXIsCisJCQkmZnJlcV9tdWx0aXBsaWVyLCAmZGV2cHJpdi0+Y2xvY2tfbnMpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCXJldHVybiByZXR2YWw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXsKKwkJCXVuc2lnbmVkIHJ0c2lfY2hhbm5lbDsKKwkJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfcnRzaV9jaGFubmVsID0gNzsKKwkJCWZvciAocnRzaV9jaGFubmVsID0gMDsgcnRzaV9jaGFubmVsIDw9IG1heF9ydHNpX2NoYW5uZWw7CisJCQkJKytydHNpX2NoYW5uZWwpIHsKKwkJCQlpZiAoc291cmNlID09CisJCQkJCU5JX01JT19QTExfUlRTSV9DTE9DSyhydHNpX2NoYW5uZWwpKSB7CisJCQkJCWRldnByaXYtPmNsb2NrX2FuZF9mb3V0MiB8PQorCQkJCQkJTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9SVFNJX0JpdHMKKwkJCQkJCShydHNpX2NoYW5uZWwpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAocnRzaV9jaGFubmVsID4gbWF4X3J0c2lfY2hhbm5lbCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXJldHZhbCA9IG5pX21zZXJpZXNfZ2V0X3BsbF9wYXJhbWV0ZXJzKHBlcmlvZF9ucywKKwkJCQkmZnJlcV9kaXZpZGVyLCAmZnJlcV9tdWx0aXBsaWVyLAorCQkJCSZkZXZwcml2LT5jbG9ja19ucyk7CisJCQlpZiAocmV0dmFsIDwgMCkKKwkJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCWJyZWFrOworCX0KKwluaV93cml0ZXcoZGV2cHJpdi0+Y2xvY2tfYW5kX2ZvdXQyLCBNX09mZnNldF9DbG9ja19hbmRfRm91dDIpOworCXBsbF9jb250cm9sX2JpdHMgfD0KKwkJTVNlcmllc19QTExfRGl2aXNvcl9CaXRzKGZyZXFfZGl2aWRlcikgfAorCQlNU2VyaWVzX1BMTF9NdWx0aXBsaWVyX0JpdHMoZnJlcV9tdWx0aXBsaWVyKTsKKy8vICAgICAgcnRfcHJpbnRrKCJ1c2luZyBkaXZpZGVyPSVpLCBtdWx0aXBsaWVyPSVpIGZvciBQTEwuICBwbGxfY29udHJvbF9iaXRzID0gMHgleFxuIiwgZnJlcV9kaXZpZGVyLCBmcmVxX211bHRpcGxpZXIsIHBsbF9jb250cm9sX2JpdHMpOworLy8gICAgICBydF9wcmludGsoImNsb2NrX25zPSVkXG4iLCBkZXZwcml2LT5jbG9ja19ucyk7CisJbmlfd3JpdGV3KHBsbF9jb250cm9sX2JpdHMsIE1fT2Zmc2V0X1BMTF9Db250cm9sKTsKKwlkZXZwcml2LT5jbG9ja19zb3VyY2UgPSBzb3VyY2U7CisJLyogaXQgc2VlbXMgdG8gdHlwaWNhbGx5IHRha2UgYSBmZXcgaHVuZHJlZCBtaWNyb3NlY29uZHMgZm9yIFBMTCB0byBsb2NrICovCisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7ICsraSkgeworCQlpZiAobmlfcmVhZHcoTV9PZmZzZXRfUExMX1N0YXR1cykgJiBNU2VyaWVzX1BMTF9Mb2NrZWRfQml0KSB7CisJCQlicmVhazsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfQorCWlmIChpID09IHRpbWVvdXQpIHsKKwkJcnRfcHJpbnRrCisJCQkoIiVzOiB0aW1lZCBvdXQgd2FpdGluZyBmb3IgUExMIHRvIGxvY2sgdG8gcmVmZXJlbmNlIGNsb2NrIHNvdXJjZSAlaSB3aXRoIHBlcmlvZCAlaSBucy5cbiIsCisJCQlfX0ZVTkNUSU9OX18sIHNvdXJjZSwgcGVyaW9kX25zKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCXJldHVybiAzOworfQorCitzdGF0aWMgaW50IG5pX3NldF9tYXN0ZXJfY2xvY2soc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNvdXJjZSwKKwl1bnNpZ25lZCBwZXJpb2RfbnMpCit7CisJaWYgKHNvdXJjZSA9PSBOSV9NSU9fSU5URVJOQUxfQ0xPQ0spIHsKKwkJZGV2cHJpdi0+cnRzaV90cmlnX2RpcmVjdGlvbl9yZWcgJj0gflVzZV9SVFNJX0Nsb2NrX0JpdDsKKwkJZGV2cHJpdi0+c3RjX3dyaXRldyhkZXYsIGRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnLAorCQkJUlRTSV9UcmlnX0RpcmVjdGlvbl9SZWdpc3Rlcik7CisJCWRldnByaXYtPmNsb2NrX25zID0gVElNRUJBU0VfMV9OUzsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCQlkZXZwcml2LT5jbG9ja19hbmRfZm91dDIgJj0KKwkJCQl+KE1TZXJpZXNfVGltZWJhc2UxX1NlbGVjdF9CaXQgfAorCQkJCU1TZXJpZXNfVGltZWJhc2UzX1NlbGVjdF9CaXQpOworCQkJbmlfd3JpdGV3KGRldnByaXYtPmNsb2NrX2FuZF9mb3V0MiwKKwkJCQlNX09mZnNldF9DbG9ja19hbmRfRm91dDIpOworCQkJbmlfd3JpdGV3KDAsIE1fT2Zmc2V0X1BMTF9Db250cm9sKTsKKwkJfQorCQlkZXZwcml2LT5jbG9ja19zb3VyY2UgPSBzb3VyY2U7CisJfSBlbHNlIHsKKwkJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCQlyZXR1cm4gbmlfbXNlcmllc19zZXRfcGxsX21hc3Rlcl9jbG9jayhkZXYsIHNvdXJjZSwKKwkJCQlwZXJpb2RfbnMpOworCQl9IGVsc2UgeworCQkJaWYgKHNvdXJjZSA9PSBOSV9NSU9fUlRTSV9DTE9DSykgeworCQkJCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnIHw9CisJCQkJCVVzZV9SVFNJX0Nsb2NrX0JpdDsKKwkJCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwKKwkJCQkJZGV2cHJpdi0+cnRzaV90cmlnX2RpcmVjdGlvbl9yZWcsCisJCQkJCVJUU0lfVHJpZ19EaXJlY3Rpb25fUmVnaXN0ZXIpOworCQkJCWlmIChwZXJpb2RfbnMgPT0gMCkgeworCQkJCQlydF9wcmludGsKKwkJCQkJCSgiJXM6IHdlIGRvbid0IGhhbmRsZSBhbiB1bnNwZWNpZmllZCBjbG9jayBwZXJpb2QgY29ycmVjdGx5IHlldCwgcmV0dXJuaW5nIGVycm9yLlxuIiwKKwkJCQkJCV9fRlVOQ1RJT05fXyk7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0gZWxzZSB7CisJCQkJCWRldnByaXYtPmNsb2NrX25zID0gcGVyaW9kX25zOworCQkJCX0KKwkJCQlkZXZwcml2LT5jbG9ja19zb3VyY2UgPSBzb3VyY2U7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlyZXR1cm4gMzsKK30KKworc3RhdGljIGludCBuaV92YWxpZF9ydHNpX291dHB1dF9zb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGNoYW4sCisJdW5zaWduZWQgc291cmNlKQoreworCWlmIChjaGFuID49IG51bV9jb25maWd1cmFibGVfcnRzaV9jaGFubmVscyhkZXYpKSB7CisJCWlmIChjaGFuID09IG9sZF9SVFNJX2Nsb2NrX2NoYW5uZWwpIHsKKwkJCWlmIChzb3VyY2UgPT0gTklfUlRTSV9PVVRQVVRfUlRTSV9PU0MpCisJCQkJcmV0dXJuIDE7CisJCQllbHNlIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCIlczogaW52YWxpZCBzb3VyY2UgZm9yIGNoYW5uZWw9JWksIGNoYW5uZWwgJWkgaXMgYWx3YXlzIHRoZSBSVFNJIGNsb2NrIGZvciBwcmUtbS1zZXJpZXMgYm9hcmRzLlxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCBjaGFuLAorCQkJCQlvbGRfUlRTSV9jbG9ja19jaGFubmVsKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJc3dpdGNoIChzb3VyY2UpIHsKKwljYXNlIE5JX1JUU0lfT1VUUFVUX0FEUl9TVEFSVDE6CisJY2FzZSBOSV9SVFNJX09VVFBVVF9BRFJfU1RBUlQyOgorCWNhc2UgTklfUlRTSV9PVVRQVVRfU0NMS0c6CisJY2FzZSBOSV9SVFNJX09VVFBVVF9EQUNVUEROOgorCWNhc2UgTklfUlRTSV9PVVRQVVRfREFfU1RBUlQxOgorCWNhc2UgTklfUlRTSV9PVVRQVVRfR19TUkMwOgorCWNhc2UgTklfUlRTSV9PVVRQVVRfR19HQVRFMDoKKwljYXNlIE5JX1JUU0lfT1VUUFVUX1JHT1VUMDoKKwljYXNlIE5JX1JUU0lfT1VUUFVUX1JUU0lfQlJEXzA6CisJCXJldHVybiAxOworCQlicmVhazsKKwljYXNlIE5JX1JUU0lfT1VUUFVUX1JUU0lfT1NDOgorCQlpZiAoYm9hcmR0eXBlLnJlZ190eXBlICYgbmlfcmVnX21fc2VyaWVzX21hc2spCisJCQlyZXR1cm4gMTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmlfc2V0X3J0c2lfcm91dGluZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgY2hhbiwKKwl1bnNpZ25lZCBzb3VyY2UpCit7CisJaWYgKG5pX3ZhbGlkX3J0c2lfb3V0cHV0X3NvdXJjZShkZXYsIGNoYW4sIHNvdXJjZSkgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNoYW4gPCA0KSB7CisJCWRldnByaXYtPnJ0c2lfdHJpZ19hX291dHB1dF9yZWcgJj0gflJUU0lfVHJpZ19PdXRwdXRfTWFzayhjaGFuKTsKKwkJZGV2cHJpdi0+cnRzaV90cmlnX2Ffb3V0cHV0X3JlZyB8PQorCQkJUlRTSV9UcmlnX091dHB1dF9CaXRzKGNoYW4sIHNvdXJjZSk7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ydHNpX3RyaWdfYV9vdXRwdXRfcmVnLAorCQkJUlRTSV9UcmlnX0FfT3V0cHV0X1JlZ2lzdGVyKTsKKwl9IGVsc2UgaWYgKGNoYW4gPCA4KSB7CisJCWRldnByaXYtPnJ0c2lfdHJpZ19iX291dHB1dF9yZWcgJj0gflJUU0lfVHJpZ19PdXRwdXRfTWFzayhjaGFuKTsKKwkJZGV2cHJpdi0+cnRzaV90cmlnX2Jfb3V0cHV0X3JlZyB8PQorCQkJUlRTSV9UcmlnX091dHB1dF9CaXRzKGNoYW4sIHNvdXJjZSk7CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ydHNpX3RyaWdfYl9vdXRwdXRfcmVnLAorCQkJUlRTSV9UcmlnX0JfT3V0cHV0X1JlZ2lzdGVyKTsKKwl9CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9nZXRfcnRzaV9yb3V0aW5nKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBjaGFuKQoreworCWlmIChjaGFuIDwgNCkgeworCQlyZXR1cm4gUlRTSV9UcmlnX091dHB1dF9Tb3VyY2UoY2hhbiwKKwkJCWRldnByaXYtPnJ0c2lfdHJpZ19hX291dHB1dF9yZWcpOworCX0gZWxzZSBpZiAoY2hhbiA8IG51bV9jb25maWd1cmFibGVfcnRzaV9jaGFubmVscyhkZXYpKSB7CisJCXJldHVybiBSVFNJX1RyaWdfT3V0cHV0X1NvdXJjZShjaGFuLAorCQkJZGV2cHJpdi0+cnRzaV90cmlnX2Jfb3V0cHV0X3JlZyk7CisJfSBlbHNlIHsKKwkJaWYgKGNoYW4gPT0gb2xkX1JUU0lfY2xvY2tfY2hhbm5lbCkKKwkJCXJldHVybiBOSV9SVFNJX09VVFBVVF9SVFNJX09TQzsKKwkJcnRfcHJpbnRrKCIlczogYnVnISBzaG91bGQgbmV2ZXIgZ2V0IGhlcmU/XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmlfcnRzaV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJdW5zaWduZWQgaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCWlmIChjaGFuIDwgbnVtX2NvbmZpZ3VyYWJsZV9ydHNpX2NoYW5uZWxzKGRldikpIHsKKwkJCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnIHw9CisJCQkJUlRTSV9PdXRwdXRfQml0KGNoYW4sCisJCQkJKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSAhPQorCQkJCTApOworCQl9IGVsc2UgaWYgKGNoYW4gPT0gb2xkX1JUU0lfY2xvY2tfY2hhbm5lbCkgeworCQkJZGV2cHJpdi0+cnRzaV90cmlnX2RpcmVjdGlvbl9yZWcgfD0KKwkJCQlEcml2ZV9SVFNJX0Nsb2NrX0JpdDsKKwkJfQorCQlkZXZwcml2LT5zdGNfd3JpdGV3KGRldiwgZGV2cHJpdi0+cnRzaV90cmlnX2RpcmVjdGlvbl9yZWcsCisJCQlSVFNJX1RyaWdfRGlyZWN0aW9uX1JlZ2lzdGVyKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fSU5QVVQ6CisJCWlmIChjaGFuIDwgbnVtX2NvbmZpZ3VyYWJsZV9ydHNpX2NoYW5uZWxzKGRldikpIHsKKwkJCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnICY9CisJCQkJflJUU0lfT3V0cHV0X0JpdChjaGFuLAorCQkJCShib2FyZHR5cGUucmVnX3R5cGUgJiBuaV9yZWdfbV9zZXJpZXNfbWFzaykgIT0KKwkJCQkwKTsKKwkJfSBlbHNlIGlmIChjaGFuID09IG9sZF9SVFNJX2Nsb2NrX2NoYW5uZWwpIHsKKwkJCWRldnByaXYtPnJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnICY9CisJCQkJfkRyaXZlX1JUU0lfQ2xvY2tfQml0OworCQl9CisJCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCBkZXZwcml2LT5ydHNpX3RyaWdfZGlyZWN0aW9uX3JlZywKKwkJCVJUU0lfVHJpZ19EaXJlY3Rpb25fUmVnaXN0ZXIpOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJaWYgKGNoYW4gPCBudW1fY29uZmlndXJhYmxlX3J0c2lfY2hhbm5lbHMoZGV2KSkgeworCQkJZGF0YVsxXSA9CisJCQkJKGRldnByaXYtPgorCQkJCXJ0c2lfdHJpZ19kaXJlY3Rpb25fcmVnICYgUlRTSV9PdXRwdXRfQml0KGNoYW4sCisJCQkJCShib2FyZHR5cGUuCisJCQkJCQlyZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQkJCQkhPQorCQkJCQkwKSkgPyBJTlNOX0NPTkZJR19ESU9fT1VUUFVUIDoKKwkJCQlJTlNOX0NPTkZJR19ESU9fSU5QVVQ7CisJCX0gZWxzZSBpZiAoY2hhbiA9PSBvbGRfUlRTSV9jbG9ja19jaGFubmVsKSB7CisJCQlkYXRhWzFdID0KKwkJCQkoZGV2cHJpdi0+CisJCQkJcnRzaV90cmlnX2RpcmVjdGlvbl9yZWcgJiBEcml2ZV9SVFNJX0Nsb2NrX0JpdCkKKwkJCQk/IElOU05fQ09ORklHX0RJT19PVVRQVVQgOgorCQkJCUlOU05fQ09ORklHX0RJT19JTlBVVDsKKwkJfQorCQlyZXR1cm4gMjsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19TRVRfQ0xPQ0tfU1JDOgorCQlyZXR1cm4gbmlfc2V0X21hc3Rlcl9jbG9jayhkZXYsIGRhdGFbMV0sIGRhdGFbMl0pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0dFVF9DTE9DS19TUkM6CisJCWRhdGFbMV0gPSBkZXZwcml2LT5jbG9ja19zb3VyY2U7CisJCWRhdGFbMl0gPSBkZXZwcml2LT5jbG9ja19uczsKKwkJcmV0dXJuIDM7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX1JPVVRJTkc6CisJCXJldHVybiBuaV9zZXRfcnRzaV9yb3V0aW5nKGRldiwgY2hhbiwgZGF0YVsxXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX1JPVVRJTkc6CisJCWRhdGFbMV0gPSBuaV9nZXRfcnRzaV9yb3V0aW5nKGRldiwgY2hhbik7CisJCXJldHVybiAyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNzNTUyOV93YWl0X2Zvcl9pZGxlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKKwljb25zdCBpbnQgdGltZW91dCA9IEhaOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHRpbWVvdXQ7IGkrKykgeworCQlzdGF0dXMgPSBuaV9hb193aW5faW53KGRldiwgQ0FMX0FEQ19TdGF0dXNfNjd4eCk7CisJCWlmICgoc3RhdHVzICYgQ1NTX0FEQ19CVVNZKSA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAoc2NoZWR1bGVfdGltZW91dCgxKSkgeworCQkJcmV0dXJuIC1FSU87CisJCX0KKwl9CisvL3ByaW50aygibG9vcGVkICVpIHRpbWVzIHdhaXRpbmcgZm9yIGlkbGVcbiIsIGkpOworCWlmIChpID09IHRpbWVvdXQpIHsKKwkJcnRfcHJpbnRrKCIlczogJXM6IHRpbWVvdXRcbiIsIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVUSU1FOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3M1NTI5X2NvbW1hbmQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIHNob3J0IHZhbHVlKQoreworCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwMDsKKwlpbnQgaTsKKworCW5pX2FvX3dpbl9vdXR3KGRldiwgdmFsdWUsIENBTF9BRENfQ29tbWFuZF82N3h4KTsKKwkvKiBnaXZlIHRpbWUgZm9yIGNvbW1hbmQgdG8gc3RhcnQgYmVpbmcgc2VyaWFsbHkgY2xvY2tlZCBpbnRvIGNzNTUyOS4KKwkgKiB0aGlzIGluc3VyZXMgdGhhdCB0aGUgQ1NTX0FEQ19CVVNZIGJpdCB3aWxsIGdldCBwcm9wZXJseQorCSAqIHNldCBiZWZvcmUgd2UgZXhpdCB0aGlzIGZ1bmN0aW9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJaWYgKChuaV9hb193aW5faW53KGRldiwgQ0FMX0FEQ19TdGF0dXNfNjd4eCkgJiBDU1NfQURDX0JVU1kpKQorCQkJYnJlYWs7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJfQorLy9wcmludGsoImxvb3BlZCAlaSB0aW1lcyB3cml0aW5nIGNvbW1hbmQgdG8gY3M1NTI5XG4iLCBpKTsKKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJwb3NzaWJsZSBwcm9ibGVtIC0gbmV2ZXIgc2F3IGFkYyBnbyBidXN5PyIpOworCX0KK30KKworLyogd3JpdGUgdG8gY3M1NTI5IHJlZ2lzdGVyICovCitzdGF0aWMgdm9pZCBjczU1MjlfY29uZmlnX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgdmFsdWUsCisJdW5zaWduZWQgaW50IHJlZ19zZWxlY3RfYml0cykKK3sKKwluaV9hb193aW5fb3V0dyhkZXYsICgodmFsdWUgPj4gMTYpICYgMHhmZiksCisJCUNBTF9BRENfQ29uZmlnX0RhdGFfSGlnaF9Xb3JkXzY3eHgpOworCW5pX2FvX3dpbl9vdXR3KGRldiwgKHZhbHVlICYgMHhmZmZmKSwKKwkJQ0FMX0FEQ19Db25maWdfRGF0YV9Mb3dfV29yZF82N3h4KTsKKwlyZWdfc2VsZWN0X2JpdHMgJj0gQ1NDTURfUkVHSVNURVJfU0VMRUNUX01BU0s7CisJY3M1NTI5X2NvbW1hbmQoZGV2LCBDU0NNRF9DT01NQU5EIHwgcmVnX3NlbGVjdF9iaXRzKTsKKwlpZiAoY3M1NTI5X3dhaXRfZm9yX2lkbGUoZGV2KSkKKwkJY29tZWRpX2Vycm9yKGRldiwgInRpbWUgb3Igc2lnbmFsIGluIGNzNTUyOV9jb25maWdfd3JpdGUoKSIpOworfQorCisjaWZkZWYgTklfQ1M1NTI5X0RFQlVHCisvKiByZWFkIGZyb20gY3M1NTI5IHJlZ2lzdGVyICovCitzdGF0aWMgdW5zaWduZWQgaW50IGNzNTUyOV9jb25maWdfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl1bnNpZ25lZCBpbnQgcmVnX3NlbGVjdF9iaXRzKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCXJlZ19zZWxlY3RfYml0cyAmPSBDU0NNRF9SRUdJU1RFUl9TRUxFQ1RfTUFTSzsKKwljczU1MjlfY29tbWFuZChkZXYsIENTQ01EX0NPTU1BTkQgfCBDU0NNRF9SRUFEIHwgcmVnX3NlbGVjdF9iaXRzKTsKKwlpZiAoY3M1NTI5X3dhaXRfZm9yX2lkbGUoZGV2KSkKKwkJY29tZWRpX2Vycm9yKGRldiwgInRpbWVvdXQgb3Igc2lnbmFsIGluIGNzNTUyOV9jb25maWdfcmVhZCgpIik7CisJdmFsdWUgPSAobmlfYW9fd2luX2ludyhkZXYsCisJCQlDQUxfQURDX0NvbmZpZ19EYXRhX0hpZ2hfV29yZF82N3h4KSA8PCAxNikgJiAweGZmMDAwMDsKKwl2YWx1ZSB8PSBuaV9hb193aW5faW53KGRldiwgQ0FMX0FEQ19Db25maWdfRGF0YV9Mb3dfV29yZF82N3h4KSAmIDB4ZmZmZjsKKwlyZXR1cm4gdmFsdWU7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBjczU1MjlfZG9fY29udmVyc2lvbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgc2hvcnQgKmRhdGEpCit7CisJaW50IHJldHZhbDsKKwl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CisKKwljczU1MjlfY29tbWFuZChkZXYsIENTQ01EX0NPTU1BTkQgfCBDU0NNRF9TSU5HTEVfQ09OVkVSU0lPTik7CisJcmV0dmFsID0gY3M1NTI5X3dhaXRfZm9yX2lkbGUoZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsCisJCQkidGltZW91dCBvciBzaWduYWwgaW4gY3M1NTI5X2RvX2NvbnZlcnNpb24oKSIpOworCQlyZXR1cm4gLUVUSU1FOworCX0KKwlzdGF0dXMgPSBuaV9hb193aW5faW53KGRldiwgQ0FMX0FEQ19TdGF0dXNfNjd4eCk7CisJaWYgKHN0YXR1cyAmIENTU19PU0NfREVURUNUKSB7CisJCXJ0X3ByaW50aworCQkJKCJuaV9taW9fY29tbW9uOiBjczU1MjkgY29udmVyc2lvbiBlcnJvciwgc3RhdHVzIENTU19PU0NfREVURUNUXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChzdGF0dXMgJiBDU1NfT1ZFUlJBTkdFKSB7CisJCXJ0X3ByaW50aworCQkJKCJuaV9taW9fY29tbW9uOiBjczU1MjkgY29udmVyc2lvbiBlcnJvciwgb3ZlcnJhbmdlIChpZ25vcmluZylcbiIpOworCX0KKwlpZiAoZGF0YSkgeworCQkqZGF0YSA9IG5pX2FvX3dpbl9pbncoZGV2LCBDQUxfQURDX0RhdGFfNjd4eCk7CisJCS8qIGNzNTUyOSByZXR1cm5zIDE2IGJpdCBzaWduZWQgZGF0YSBpbiBiaXBvbGFyIG1vZGUgKi8KKwkJKmRhdGEgXj0gKDEgPDwgMTUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjczU1MjlfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbiwgcmV0dmFsOworCXVuc2lnbmVkIHNob3J0IHNhbXBsZTsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbF9zZWxlY3Q7CisJY29uc3QgdW5zaWduZWQgaW50IElOVEVSTkFMX1JFRiA9IDB4MTAwMDsKKworCS8qIFNldCBjYWxpYnJhdGlvbiBhZGMgc291cmNlLiAgRG9jcyBsaWUsIHJlZmVyZW5jZSBzZWxlY3QgYml0cyA4IHRvIDExCisJICogZG8gbm90aGluZy4gYml0IDEyIHNlZW1zIHRvIGNob29zZXMgaW50ZXJuYWwgcmVmZXJlbmNlIHZvbHRhZ2UsIGJpdAorCSAqIDEzIGNhdXNlcyB0aGUgYWRjIGlucHV0IHRvIGdvIG92ZXJyYW5nZSAobWF5YmUgcmVhZHMgZXh0ZXJuYWwgcmVmZXJlbmNlPykgKi8KKwlpZiAoaW5zbi0+Y2hhbnNwZWMgJiBDUl9BTFRfU09VUkNFKQorCQljaGFubmVsX3NlbGVjdCA9IElOVEVSTkFMX1JFRjsKKwllbHNlCisJCWNoYW5uZWxfc2VsZWN0ID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJbmlfYW9fd2luX291dHcoZGV2LCBjaGFubmVsX3NlbGVjdCwgQU9fQ2FsaWJyYXRpb25fQ2hhbm5lbF9TZWxlY3RfNjd4eCk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCXJldHZhbCA9IGNzNTUyOV9kb19jb252ZXJzaW9uKGRldiwgJnNhbXBsZSk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJcmV0dXJuIHJldHZhbDsKKwkJZGF0YVtuXSA9IHNhbXBsZTsKKwl9CisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jczU1Mjkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgaW50IGNvbmZpZ19iaXRzID0KKwkJQ1NDRkdfUE9SVF9NT0RFIHwgQ1NDRkdfV09SRF9SQVRFXzIxODBfQ1lDTEVTOworCisjaWYgMQorCS8qIGRvIHNlbGYtY2FsaWJyYXRpb24gKi8KKwljczU1MjlfY29uZmlnX3dyaXRlKGRldiwgY29uZmlnX2JpdHMgfCBDU0NGR19TRUxGX0NBTF9PRkZTRVRfR0FJTiwKKwkJQ1NDTURfQ09ORklHX1JFR0lTVEVSKTsKKwkvKiBuZWVkIHRvIGZvcmNlIGEgY29udmVyc2lvbiBmb3IgY2FsaWJyYXRpb24gdG8gcnVuICovCisJY3M1NTI5X2RvX2NvbnZlcnNpb24oZGV2LCBOVUxMKTsKKyNlbHNlCisJLyogZm9yY2UgZ2FpbiBjYWxpYnJhdGlvbiB0byAxICovCisJY3M1NTI5X2NvbmZpZ193cml0ZShkZXYsIDB4NDAwMDAwLCBDU0NNRF9HQUlOX1JFR0lTVEVSKTsKKwljczU1MjlfY29uZmlnX3dyaXRlKGRldiwgY29uZmlnX2JpdHMgfCBDU0NGR19TRUxGX0NBTF9PRkZTRVQsCisJCUNTQ01EX0NPTkZJR19SRUdJU1RFUik7CisJaWYgKGNzNTUyOV93YWl0X2Zvcl9pZGxlKGRldikpCisJCWNvbWVkaV9lcnJvcihkZXYsICJ0aW1lb3V0IG9yIHNpZ25hbCBpbiBpbml0X2NzNTUyOSgpXG4iKTsKKyNlbmRpZgorI2lmZGVmIE5JX0NTNTUyOV9ERUJVRworCXJ0X3ByaW50aygiY29uZmlnOiAweCV4XG4iLCBjczU1MjlfY29uZmlnX3JlYWQoZGV2LAorCQlDU0NNRF9DT05GSUdfUkVHSVNURVIpKTsKKwlydF9wcmludGsoImdhaW46IDB4JXhcbiIsIGNzNTUyOV9jb25maWdfcmVhZChkZXYsCisJCUNTQ01EX0dBSU5fUkVHSVNURVIpKTsKKwlydF9wcmludGsoIm9mZnNldDogMHgleFxuIiwgY3M1NTI5X2NvbmZpZ19yZWFkKGRldiwKKwkJQ1NDTURfT0ZGU0VUX1JFR0lTVEVSKSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjM1N2MyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jCkBAIC0wLDAgKzEsNTUxIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL25pX21pb19jcy5jCisgICAgSGFyZHdhcmUgZHJpdmVyIGZvciBOSSBQQ01DSUEgTUlPIEUgc2VyaWVzIGNhcmRzCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKy8qCitEcml2ZXI6IG5pX21pb19jcworRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIERBUUNhcmQgRSBzZXJpZXMKK0F1dGhvcjogZHMKK1N0YXR1czogd29ya3MKK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gREFRQ2FyZC1BSS0xNlhFLTUwIChuaV9taW9fY3MpLAorICBEQVFDYXJkLUFJLTE2RS00LCBEQVFDYXJkLTYwNjJFLCBEQVFDYXJkLTYwMjRFLCBEQVFDYXJkLTYwMzZFCitVcGRhdGVkOiBUaHUgT2N0IDIzIDE5OjQzOjE3IENEVCAyMDAzCisKK1NlZSB0aGUgbm90ZXMgaW4gdGhlIG5pX2F0bWlvLm8gZHJpdmVyLgorKi8KKy8qCisJVGhlIHJlYWwgZ3V0cyBvZiB0aGUgZHJpdmVyIGlzIGluIG5pX21pb19jb21tb24uYywgd2hpY2ggaXMKKwlpbmNsdWRlZCBieSBhbGwgdGhlIEUgc2VyaWVzIGRyaXZlcnMuCisKKwlSZWZlcmVuY2VzIGZvciBzcGVjaWZpY2F0aW9uczoKKworCSAgIDM0MTA4MGEucGRmICBEQVFDYXJkIEUgU2VyaWVzIFJlZ2lzdGVyIExldmVsIFByb2dyYW1tZXIgTWFudWFsCisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJuaV9zdGMuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CisKKyN1bmRlZiBERUJVRworCisjZGVmaW5lIEFUTUlPIDEKKyN1bmRlZiBQQ0lNSU8KKworLyoKKyAqICBBVCBzcGVjaWZpYyBzZXR1cAorICovCisKKyNkZWZpbmUgTklfU0laRSAweDIwCisKKyNkZWZpbmUgTUFYX05fQ0FMREFDUyAzMgorCitzdGF0aWMgY29uc3QgbmlfYm9hcmQgbmlfYm9hcmRzW10gPSB7CisgICAgICB7ZGV2aWNlX2lkOjB4MDEwZCwKKwkgICAgICBuYW1lOgkiREFRQ2FyZC1haS0xNnhlLTUwIiwKKwkgICAgICBuX2FkY2hhbjoxNiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFpX2ZpZm9fZGVwdGg6MTAyNCwKKwkgICAgICBhbHdheXNkaXRoZXI6MCwKKwkgICAgICBnYWlubGt1cDphaV9nYWluXzgsCisJICAgICAgYWlfc3BlZWQ6NTAwMCwKKwkgICAgICBuX2FvY2hhbjowLAorCSAgICAgIGFvYml0czoJMCwKKwkgICAgICBhb19maWZvX2RlcHRoOjAsCisJICAgICAgYW9fdW5pcG9sYXI6MCwKKwkgICAgICBudW1fcDBfZGlvX2NoYW5uZWxzOjgsCisJICAgICAgaGFzXzgyNTU6MCwKKwkgICAgICBjYWxkYWM6CXtkYWM4ODAwLCBkYWM4MDQzfSwKKwkJfSwKKyAgICAgIHtkZXZpY2VfaWQ6MHgwMTBjLAorCSAgICAgIG5hbWU6CSJEQVFDYXJkLWFpLTE2ZS00IiwKKwkgICAgICBuX2FkY2hhbjoxNiwKKwkgICAgICBhZGJpdHM6CTEyLAorCSAgICAgIGFpX2ZpZm9fZGVwdGg6MTAyNCwKKwkgICAgICBhbHdheXNkaXRoZXI6MCwKKwkgICAgICBnYWlubGt1cDphaV9nYWluXzE2LAorCSAgICAgIGFpX3NwZWVkOjQwMDAsCisJICAgICAgbl9hb2NoYW46MCwKKwkgICAgICBhb2JpdHM6CTAsCisJICAgICAgYW9fZmlmb19kZXB0aDowLAorCSAgICAgIGFvX3VuaXBvbGFyOjAsCisJICAgICAgbnVtX3AwX2Rpb19jaGFubmVsczo4LAorCSAgICAgIGhhc184MjU1OjAsCisJICAgICAgY2FsZGFjOgl7bWI4ODM0MX0sCS8qIHZlcmlmaWVkICovCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjB4MDJjNCwKKwkgICAgICBuYW1lOgkiREFRQ2FyZC02MDYyRSIsCisJICAgICAgbl9hZGNoYW46MTYsCisJICAgICAgYWRiaXRzOgkxMiwKKwkgICAgICBhaV9maWZvX2RlcHRoOjgxOTIsCisJICAgICAgYWx3YXlzZGl0aGVyOjAsCisJICAgICAgZ2FpbmxrdXA6YWlfZ2Fpbl8xNiwKKwkgICAgICBhaV9zcGVlZDoyMDAwLAorCSAgICAgIG5fYW9jaGFuOjIsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb19maWZvX2RlcHRoOjIwNDgsCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JnJhbmdlX2JpcG9sYXIxMCwKKwkgICAgICBhb191bmlwb2xhcjowLAorCSAgICAgIGFvX3NwZWVkOjExNzYsCisJICAgICAgbnVtX3AwX2Rpb19jaGFubmVsczo4LAorCSAgICAgIGhhc184MjU1OjAsCisJICAgICAgY2FsZGFjOgl7YWQ4ODA0X2RlYnVnfSwJLyogdmVyaWZpZWQgKi8KKwkJfSwKKyAgICAgIHtkZXZpY2VfaWQ6MHgwNzVlLAorCSAgICAgIG5hbWU6CSJEQVFDYXJkLTYwMjRFIiwJLyogc3BlY3MgaW5jb3JyZWN0ISAqLworCSAgICAgIG5fYWRjaGFuOjE2LAorCSAgICAgIGFkYml0czoJMTIsCisJICAgICAgYWlfZmlmb19kZXB0aDoxMDI0LAorCSAgICAgIGFsd2F5c2RpdGhlcjowLAorCSAgICAgIGdhaW5sa3VwOmFpX2dhaW5fMTYsCisJICAgICAgYWlfc3BlZWQ6NTAwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTIsCisJICAgICAgYW9fZmlmb19kZXB0aDowLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZyYW5nZV9iaXBvbGFyMTAsCisJICAgICAgYW9fdW5pcG9sYXI6MCwKKwkgICAgICBhb19zcGVlZDoxMDAwMDAwLAorCSAgICAgIG51bV9wMF9kaW9fY2hhbm5lbHM6OCwKKwkgICAgICBoYXNfODI1NTowLAorCSAgICAgIGNhbGRhYzoJe2FkODgwNF9kZWJ1Z30sCisJCX0sCisgICAgICB7ZGV2aWNlX2lkOjB4MDI0NSwKKwkgICAgICBuYW1lOgkiREFRQ2FyZC02MDM2RSIsCS8qIHNwZWNzIGluY29ycmVjdCEgKi8KKwkgICAgICBuX2FkY2hhbjoxNiwKKwkgICAgICBhZGJpdHM6CTE2LAorCSAgICAgIGFpX2ZpZm9fZGVwdGg6MTAyNCwKKwkgICAgICBhbHdheXNkaXRoZXI6MSwKKwkgICAgICBnYWlubGt1cDphaV9nYWluXzQsCisJICAgICAgYWlfc3BlZWQ6NTAwMCwKKwkgICAgICBuX2FvY2hhbjoyLAorCSAgICAgIGFvYml0czoJMTYsCisJICAgICAgYW9fZmlmb19kZXB0aDowLAorCSAgICAgIGFvX3JhbmdlX3RhYmxlOiZyYW5nZV9iaXBvbGFyMTAsCisJICAgICAgYW9fdW5pcG9sYXI6MCwKKwkgICAgICBhb19zcGVlZDoxMDAwMDAwLAorCSAgICAgIG51bV9wMF9kaW9fY2hhbm5lbHM6OCwKKwkgICAgICBoYXNfODI1NTowLAorCSAgICAgIGNhbGRhYzoJe2FkODgwNF9kZWJ1Z30sCisJCX0sCisjaWYgMAorICAgICAge2RldmljZV9pZDoweDAwMDAsCS8qIHVua25vd24gKi8KKwkgICAgICBuYW1lOgkiREFRQ2FyZC02NzE1IiwKKwkgICAgICBuX2FkY2hhbjowLAorCSAgICAgIG5fYW9jaGFuOjgsCisJICAgICAgYW9iaXRzOgkxMiwKKwkgICAgICBhb182NzF4Ogk4MTkyLAorCSAgICAgIG51bV9wMF9kaW9fY2hhbm5lbHM6OCwKKwkgICAgICBjYWxkYWM6CXttYjg4MzQxLCBtYjg4MzQxfSwKKwkJfSwKKyNlbmRpZgorCS8qIE4uQi4gVXBkYXRlIG5pX21pb19jc19pZHNbXSB3aGVuIGVudHJpZXMgYWRkZWQgYWJvdmUuICovCit9OworCisjZGVmaW5lIGludGVycnVwdF9waW4oYSkJMAorCisjZGVmaW5lIElSUV9QT0xBUklUWSAxCisKKyNkZWZpbmUgTklfRV9JUlFfRkxBR1MJCUlSUUZfU0hBUkVECisKK3N0cnVjdCBuaV9wcml2YXRlIHsKKworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCisgTklfUFJJVkFURV9DT01NT059OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgbmlfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworLyogSG93IHdlIGFjY2VzcyByZWdpc3RlcnMgKi8KKworI2RlZmluZSBuaV93cml0ZWwoYSxiKQkJKG91dGwoKGEpLChiKStkZXYtPmlvYmFzZSkpCisjZGVmaW5lIG5pX3JlYWRsKGEpCQkoaW5sKChhKStkZXYtPmlvYmFzZSkpCisjZGVmaW5lIG5pX3dyaXRldyhhLGIpCQkob3V0dygoYSksKGIpK2Rldi0+aW9iYXNlKSkKKyNkZWZpbmUgbmlfcmVhZHcoYSkJCShpbncoKGEpK2Rldi0+aW9iYXNlKSkKKyNkZWZpbmUgbmlfd3JpdGViKGEsYikJCShvdXRiKChhKSwoYikrZGV2LT5pb2Jhc2UpKQorI2RlZmluZSBuaV9yZWFkYihhKQkJKGluYigoYSkrZGV2LT5pb2Jhc2UpKQorCisvKiBIb3cgd2UgYWNjZXNzIHdpbmRvd2VkIHJlZ2lzdGVycyAqLworCisvKiBXZSBhdXRvbWF0aWNhbGx5IHRha2UgYWR2YW50YWdlIG9mIFNUQyByZWdpc3RlcnMgdGhhdCBjYW4gYmUKKyAqIHJlYWQvd3JpdHRlbiBkaXJlY3RseSBpbiB0aGUgSS9PIHNwYWNlIG9mIHRoZSBib2FyZC4gIFRoZQorICogREFRQ2FyZCBkZXZpY2VzIG1hcCB0aGUgbG93IDggU1RDIHJlZ2lzdGVycyB0byBpb2Jhc2UrYWRkcioyLiAqLworCitzdGF0aWMgdm9pZCBtaW9fY3Nfd2luX291dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgZGF0YSwgaW50IGFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKwlpZiAoYWRkciA8IDgpIHsKKwkJbmlfd3JpdGV3KGRhdGEsIGFkZHIgKiAyKTsKKwl9IGVsc2UgeworCQluaV93cml0ZXcoYWRkciwgV2luZG93X0FkZHJlc3MpOworCQluaV93cml0ZXcoZGF0YSwgV2luZG93X0RhdGEpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHVpbnQxNl90IG1pb19jc193aW5faW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhZGRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdWludDE2X3QgcmV0OworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworCWlmIChhZGRyIDwgOCkgeworCQlyZXQgPSBuaV9yZWFkdyhhZGRyICogMik7CisJfSBlbHNlIHsKKwkJbmlfd3JpdGV3KGFkZHIsIFdpbmRvd19BZGRyZXNzKTsKKwkJcmV0ID0gbmlfcmVhZHcoV2luZG93X0RhdGEpOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+d2luZG93X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWlvX2NzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IG1pb19jc19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9uaV9taW9fY3MgPSB7CisgICAgICBkcml2ZXJfbmFtZToibmlfbWlvX2NzIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDptaW9fY3NfYXR0YWNoLAorICAgICAgZGV0YWNoOm1pb19jc19kZXRhY2gsCit9OworCisjaW5jbHVkZSAibmlfbWlvX2NvbW1vbi5jIgorCitzdGF0aWMgaW50IG5pX2dldGJvYXJkdHlwZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworCisvKiBjbGVhbiB1cCBhbGxvY2F0ZWQgcmVzb3VyY2VzICovCisvKiBjYWxsZWQgd2hlbiBkcml2ZXIgaXMgcmVtb3ZlZCAqLworc3RhdGljIGludCBtaW9fY3NfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCW1pb19jb21tb25fZGV0YWNoKGRldik7CisKKwkvKiBQQ01DSUEgbGF5ZXIgZnJlZXMgdGhlIElPIHJlZ2lvbiAqLworCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWlvX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBjc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKK3N0YXRpYyB2b2lkIGNzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKKworc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpjdXJfZGV2ID0gTlVMTDsKK3N0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gIm5pX21pb19jcyI7CitzdGF0aWMgZGV2X25vZGVfdCBkZXZfbm9kZSA9IHsKKwkibmlfbWlvX2NzIiwKKwlDT01FRElfTUFKT1IsIDAsCisJTlVMTAorfTsKK3N0YXRpYyBpbnQgY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzE2OworCWxpbmstPmlvLk51bVBvcnRzMSA9IDE2OworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFOworCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7CisJbGluay0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisKKwljdXJfZGV2ID0gbGluazsKKworCW1pb19jc19jb25maWcobGluayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3NfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7Cit9CisKK3N0YXRpYyB2b2lkIGNzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlEUFJJTlRLKCJjc19kZXRhY2gobGluaz0lcClcbiIsIGxpbmspOworCisJaWYgKGxpbmstPmRldl9ub2RlKSB7CisJCWNzX3JlbGVhc2UobGluayk7CisJfQorfQorCitzdGF0aWMgaW50IG1pb19jc19zdXNwZW5kKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCURQUklOVEsoInBtIHN1c3BlbmRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWlvX2NzX3Jlc3VtZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwlEUFJJTlRLKCJwbSByZXN1bWVcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtaW9fY3NfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXR1cGxlX3QgdHVwbGU7CisJdV9zaG9ydCBidWZbMTI4XTsKKwljaXNwYXJzZV90IHBhcnNlOworCWludCBtYW5maWQgPSAwLCBwcm9kaWQgPSAwOworCWludCByZXQ7CisKKwlEUFJJTlRLKCJtaW9fY3NfY29uZmlnKGxpbms9JXApXG4iLCBsaW5rKTsKKworCXR1cGxlLlR1cGxlRGF0YSA9IChjaXNkYXRhX3QgKikgYnVmOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKwl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7CisJdHVwbGUuQXR0cmlidXRlcyA9IDA7CisKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ09ORklHOworCXJldCA9IHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUobGluaywgJnR1cGxlKTsKKwlyZXQgPSBwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKTsKKwlyZXQgPSBwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpOworCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOworCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKKworI2lmIDAKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOworCXR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OIHwgVFVQTEVfUkVUVVJOX0xJTks7CisJaW5mby0+bXVsdGkoZmlyc3RfdHVwbGUobGluaywgJnR1cGxlLCAmcGFyc2UpID09IDApOworI2VuZGlmCisKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOworCXR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOworCWlmICgocGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpID09IDApICYmCisJCShwY21jaWFfZ2V0X3R1cGxlX2RhdGEobGluaywgJnR1cGxlKSA9PSAwKSkgeworCQltYW5maWQgPSBsZTE2X3RvX2NwdShidWZbMF0pOworCQlwcm9kaWQgPSBsZTE2X3RvX2NwdShidWZbMV0pOworCX0KKwkvL3ByaW50aygibWFuZmlkID0gMHglMDR4LCAweCUwNHhcbiIsbWFuZmlkLHByb2RpZCk7CisKKwl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfQ0ZUQUJMRV9FTlRSWTsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwlyZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSk7CisJcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSk7CisJcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgJnBhcnNlKTsKKworI2lmIDAKKwlwcmludGsoIiBpbmRleDogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5pbmRleCk7CisJcHJpbnRrKCIgZmxhZ3M6IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkuZmxhZ3MpOworCXByaW50aygiIGlvIGZsYWdzOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLmZsYWdzKTsKKwlwcmludGsoIiBpbyBud2luOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLm53aW4pOworCXByaW50aygiIGlvIGJhc2U6IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkuaW8ud2luWzBdLmJhc2UpOworCXByaW50aygiIGlvIGxlbjogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5pby53aW5bMF0ubGVuKTsKKwlwcmludGsoIiBpcnExOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5LmlycS5JUlFJbmZvMSk7CisJcHJpbnRrKCIgaXJxMjogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5pcnEuSVJRSW5mbzIpOworCXByaW50aygiIG1lbSBmbGFnczogMHgleFxuIiwgcGFyc2UuY2Z0YWJsZV9lbnRyeS5tZW0uZmxhZ3MpOworCXByaW50aygiIG1lbSBud2luOiAweCV4XG4iLCBwYXJzZS5jZnRhYmxlX2VudHJ5Lm1lbS5ud2luKTsKKwlwcmludGsoIiBzdWJ0dXBsZXM6IDB4JXhcbiIsIHBhcnNlLmNmdGFibGVfZW50cnkuc3VidHVwbGVzKTsKKyNlbmRpZgorCisjaWYgMAorCWxpbmstPmlvLk51bVBvcnRzMSA9IDB4MjA7CisJbGluay0+aW8uSU9BZGRyTGluZXMgPSA1OworCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisjZW5kaWYKKwlsaW5rLT5pby5OdW1Qb3J0czEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLndpblswXS5sZW47CisJbGluay0+aW8uSU9BZGRyTGluZXMgPQorCQlwYXJzZS5jZnRhYmxlX2VudHJ5LmlvLmZsYWdzICYgQ0lTVFBMX0lPX0xJTkVTX01BU0s7CisJbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKworCXsKKwkJaW50IGJhc2U7CisJCWZvciAoYmFzZSA9IDB4MDAwOyBiYXNlIDwgMHg0MDA7IGJhc2UgKz0gMHgyMCkgeworCQkJbGluay0+aW8uQmFzZVBvcnQxID0gYmFzZTsKKwkJCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2lvKGxpbmssICZsaW5rLT5pbyk7CisJCQkvL3ByaW50aygiUmVxdWVzdElPIDB4JTAyeFxuIixyZXQpOworCQkJaWYgKCFyZXQpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlsaW5rLT5pcnEuSVJRSW5mbzEgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlycS5JUlFJbmZvMTsKKwlsaW5rLT5pcnEuSVJRSW5mbzIgPSBwYXJzZS5jZnRhYmxlX2VudHJ5LmlycS5JUlFJbmZvMjsKKwlyZXQgPSBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSk7CisJaWYgKHJldCkgeworCQlwcmludGsoInBjbWNpYV9yZXF1ZXN0X2lycSgpIHJldHVybmVkIGVycm9yOiAlaVxuIiwgcmV0KTsKKwl9CisJLy9wcmludGsoIlJlcXVlc3RJUlEgMHglMDJ4XG4iLHJldCk7CisKKwlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKKworCXJldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpOworCS8vcHJpbnRrKCJSZXF1ZXN0Q29uZmlndXJhdGlvbiAlZFxuIixyZXQpOworCisJbGluay0+ZGV2X25vZGUgPSAmZGV2X25vZGU7Cit9CisKK3N0YXRpYyBpbnQgbWlvX2NzX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKwl1bnNpZ25lZCBpbnQgaXJxOworCWludCByZXQ7CisKKwlEUFJJTlRLKCJtaW9fY3NfYXR0YWNoKGRldj0lcCxpdD0lcClcbiIsIGRldiwgaXQpOworCisJbGluayA9IGN1cl9kZXY7CQkvKiBYWFggaGFjayAqLworCWlmICghbGluaykKKwkJcmV0dXJuIC1FSU87CisKKwlkZXYtPmRyaXZlciA9ICZkcml2ZXJfbmlfbWlvX2NzOworCWRldi0+aW9iYXNlID0gbGluay0+aW8uQmFzZVBvcnQxOworCisJaXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROworCisJcHJpbnRrKCJjb21lZGklZDogJXM6IERBUUNhcmQ6IGlvIDB4JTA0bHgsIGlycSAldSwgIiwKKwkJZGV2LT5taW5vciwgZGV2LT5kcml2ZXItPmRyaXZlcl9uYW1lLCBkZXYtPmlvYmFzZSwgaXJxKTsKKworI2lmIDAKKwl7CisJCWludCBpOworCisJCXByaW50aygiIGJvYXJkIGZpbmdlcnByaW50OiIpOworCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkgKz0gMikgeworCQkJcHJpbnRrKCIgJTA0eCAlMDJ4IiwgaW53KGRldi0+aW9iYXNlICsgaSksCisJCQkJaW5iKGRldi0+aW9iYXNlICsgaSArIDEpKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJCXByaW50aygiIGJvYXJkIGZpbmdlcnByaW50ICh3aW5kb3dlZCk6Iik7CisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQlwcmludGsoIiAweCUwNHgiLCB3aW5faW4oaSkpOworCQl9CisJCXByaW50aygiXG4iKTsKKwl9CisjZW5kaWYKKworCWRldi0+Ym9hcmRfcHRyID0gbmlfYm9hcmRzICsgbmlfZ2V0Ym9hcmR0eXBlKGRldiwgbGluayk7CisKKwlwcmludGsoIiAlcyIsIGJvYXJkdHlwZS5uYW1lKTsKKwlkZXYtPmJvYXJkX25hbWUgPSBib2FyZHR5cGUubmFtZTsKKworCWlmICgocmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgbmlfRV9pbnRlcnJ1cHQsIE5JX0VfSVJRX0ZMQUdTLAorCQkJCSJuaV9taW9fY3MiLCBkZXYpKSA8IDApIHsKKwkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2LT5pcnEgPSBpcnE7CisKKwkvKiBhbGxvY2F0ZSBwcml2YXRlIGFyZWEgKi8KKwlpZiAoKHJldCA9IG5pX2FsbG9jX3ByaXZhdGUoZGV2KSkgPCAwKQorCQlyZXR1cm4gcmV0OworCWRldnByaXYtPnN0Y193cml0ZXcgPSAmbWlvX2NzX3dpbl9vdXQ7CisJZGV2cHJpdi0+c3RjX3JlYWR3ID0gJm1pb19jc193aW5faW47CisJZGV2cHJpdi0+c3RjX3dyaXRlbCA9ICZ3aW5fb3V0MjsKKwlkZXZwcml2LT5zdGNfcmVhZGwgPSAmd2luX2luMjsKKworCWlmICgocmV0ID0gbmlfRV9pbml0KGRldiwgaXQpKSA8IDApIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfcHJvZGlkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKK3sKKwl0dXBsZV90IHR1cGxlOworCXVfc2hvcnQgYnVmWzEyOF07CisJaW50IHByb2RpZCA9IDA7CisKKwl0dXBsZS5UdXBsZURhdGEgPSAoY2lzZGF0YV90ICopIGJ1ZjsKKwl0dXBsZS5UdXBsZU9mZnNldCA9IDA7CisJdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7CisJdHVwbGUuQXR0cmlidXRlcyA9IFRVUExFX1JFVFVSTl9DT01NT047CisJaWYgKChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkgPT0gMCkgJiYKKwkJKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsaW5rLCAmdHVwbGUpID09IDApKSB7CisJCXByb2RpZCA9IGxlMTZfdG9fY3B1KGJ1ZlsxXSk7CisJfQorCisJcmV0dXJuIHByb2RpZDsKK30KKworc3RhdGljIGludCBuaV9nZXRib2FyZHR5cGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCWludCBpZDsKKwlpbnQgaTsKKworCWlkID0gZ2V0X3Byb2RpZChkZXYsIGxpbmspOworCisJZm9yIChpID0gMDsgaSA8IG5fbmlfYm9hcmRzOyBpKyspIHsKKwkJaWYgKG5pX2JvYXJkc1tpXS5kZXZpY2VfaWQgPT0gaWQpIHsKKwkJCXJldHVybiBpOworCQl9CisJfQorCisJcHJpbnRrKCJ1bmtub3duIGJvYXJkIDB4JTA0eCAtLSBwcmV0ZW5kIGl0IGlzIGEgIiwgaWQpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBNT0RVTEUKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgbmlfbWlvX2NzX2lkc1tdID0geworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwYiwgMHgwMTBkKSwJLyogREFRQ2FyZC1haS0xNnhlLTUwICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTBiLCAweDAxMGMpLAkvKiBEQVFDYXJkLWFpLTE2ZS00ICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTBiLCAweDAyYzQpLAkvKiBEQVFDYXJkLTYwNjJFICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTBiLCAweDA3NWUpLAkvKiBEQVFDYXJkLTYwMjRFICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTBiLCAweDAyNDUpLAkvKiBEQVFDYXJkLTYwMzZFICovCisJUENNQ0lBX0RFVklDRV9OVUxMCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgbmlfbWlvX2NzX2lkcyk7CisKK3N0cnVjdCBwY21jaWFfZHJpdmVyIG5pX21pb19jc19kcml2ZXIgPSB7CisJLnByb2JlID0gJmNzX2F0dGFjaCwKKwkucmVtb3ZlID0gJmNzX2RldGFjaCwKKwkuc3VzcGVuZCA9ICZtaW9fY3Nfc3VzcGVuZCwKKwkucmVzdW1lID0gJm1pb19jc19yZXN1bWUsCisJLmlkX3RhYmxlID0gbmlfbWlvX2NzX2lkcywKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkuZHJ2ID0geworCQkJLm5hbWUgPSBkZXZfaW5mbywKKwkJfSwKK307CisKK2ludCBpbml0X21vZHVsZSh2b2lkKQoreworCXBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJm5pX21pb19jc19kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9uaV9taW9fY3MpOworCXJldHVybiAwOworfQorCit2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJcGNtY2lhX3VucmVnaXN0ZXJfZHJpdmVyKCZuaV9taW9fY3NfZHJpdmVyKTsKKyNpZiAwCisJd2hpbGUgKGN1cl9kZXYgIT0gTlVMTCkKKwkJY3NfZGV0YWNoKGN1cl9kZXYtPmhhbmRsZSk7CisjZW5kaWYKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9uaV9taW9fY3MpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdkZWYyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwpAQCAtMCwwICsxLDEzMDIgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKKyAgICBkcml2ZXIgZm9yIE5hdGlvbmFsIEluc3RydW1lbnRzIFBDSS1ESU8tOTYvUENJLTY1MDgKKyAgICAgICAgICAgICAgIE5hdGlvbmFsIEluc3RydW1lbnRzIFBDSS1ESU8tMzJIUworICAgICAgICAgICAgICAgTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLTY1MDMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogbmlfcGNpZGlvCitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLURJTzMySFMsIFBDSS1ESU85NiwgUENJLTY1MzMsIFBDSS02NTAzCitBdXRob3I6IGRzCitTdGF0dXM6IHdvcmtzCitEZXZpY2VzOiBbTmF0aW9uYWwgSW5zdHJ1bWVudHNdIFBDSS1ESU8tMzJIUyAobmlfcGNpZGlvKSwgUFhJLTY1MzMsCisgIFBDSS1ESU8tOTYsIFBDSS1ESU8tOTZCLCBQWEktNjUwOCwgUENJLTY1MDMsIFBDSS02NTAzQiwgUENJLTY1MDNYLAorICBQWEktNjUwMywgUENJLTY1MzMsIFBDSS02NTM0CitVcGRhdGVkOiBTdW4sIDIxIEFwciAyMDAyIDIxOjAzOjM4IC0wNzAwCisKK1RoZSBESU8tOTYgYXBwZWFycyBhcyBmb3VyIDgyNTUgc3ViZGV2aWNlcy4gIFNlZSB0aGUgODI1NQorZHJpdmVyIG5vdGVzIGZvciBkZXRhaWxzLgorCitUaGUgRElPMzJIUyBib2FyZCBhcHBlYXJzIGFzIG9uZSBzdWJkZXZpY2UsIHdpdGggMzIgY2hhbm5lbHMuCitFYWNoIGNoYW5uZWwgaXMgaW5kaXZpZHVhbGx5IEkvTyBjb25maWd1cmFibGUuICBUaGUgY2hhbm5lbCBvcmRlcgoraXMgMD1BMCwgMT1BMSwgMj1BMiwgLi4uIDg9QjAsIDE2PUMwLCAyND1EMC4gIFRoZSBkcml2ZXIgb25seQorc3VwcG9ydHMgc2ltcGxlIGRpZ2l0YWwgSS9POyBubyBoYW5kc2hha2luZyBpcyBzdXBwb3J0ZWQuCisKK0RNQSBtb3N0bHkgd29ya3MgZm9yIHRoZSBQQ0ktRElPMzJIUywgYnV0IG9ubHkgaW4gdGltZWQgaW5wdXQgbW9kZS4KKworVGhpcyBkcml2ZXIgY291bGQgYmUgZWFzaWx5IG1vZGlmaWVkIHRvIHN1cHBvcnQgQVQtTUlPMzJIUyBhbmQKK0FULU1JTzk2LgorCitUaGUgUENJLTY1MzQgcmVxdWlyZXMgYSBmaXJtd2FyZSB1cGxvYWQgYWZ0ZXIgcG93ZXItdXAgdG8gd29yaywgdGhlCitmaXJtd2FyZSBkYXRhIGFuZCBpbnN0cnVjdGlvbnMgZm9yIGxvYWRpbmcgaXQgd2l0aCBjb21lZGlfY29uZmlnCitpdCBhcmUgY29udGFpbmVkIGluIHRoZQorY29tZWRpX25vbmZyZWVfZmlybXdhcmUgdGFyYmFsbCBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmNvbWVkaS5vcmcKKyovCisKKy8qCisgICBUaGlzIGRyaXZlciBpcyBmb3IgYm90aCB0aGUgTkkgUENJLURJTy0zMkhTIGFuZCB0aGUgUENJLURJTy05NiwKKyAgIHdoaWNoIGhhdmUgdmVyeSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4gIEJ1dCwgc2luY2UgdGhlICc5NiBpcworICAgc28gc2ltcGxlLCBpdCBpcyBpbmNsdWRlZCBoZXJlLgorCisgICBNYW51YWxzIChhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAubmF0aW5zdC5jb20vc3VwcG9ydC9tYW51YWxzKQorCisJMzIwOTM4Yy5wZGYJUENJLURJTy05Ni9QWEktNjUwOC9QQ0ktNjUwMyBVc2VyIE1hbnVhbAorCTMyMTQ2NGIucGRmCUFUL1BDSS1ESU8tMzJIUyBVc2VyIE1hbnVhbAorCTM0MTMyOUEucGRmCVBDSS02NTMzIFJlZ2lzdGVyLUxldmVsIFByb2dyYW1tZXIgTWFudWFsCisJMzQxMzMwQS5wZGYJREFRLURJTyBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbAorCisgKi8KKworI2RlZmluZSBVU0VfRE1BCisvLyNkZWZpbmUgREVCVUcgMQorLy8jZGVmaW5lIERFQlVHX0ZMQUdTCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgIm1pdGUuaCIKKyNpbmNsdWRlICI4MjU1LmgiCisKKyN1bmRlZiBEUFJJTlRLCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgRFBSSU5USyhmb3JtYXQsIGFyZ3MuLi4pCXByaW50ayhmb3JtYXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEUFJJTlRLKGZvcm1hdCwgYXJncy4uLikKKyNlbmRpZgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTkFUSU5TVAkweDEwOTMKKworI2RlZmluZSBQQ0lfRElPX1NJWkUgNDA5NgorI2RlZmluZSBQQ0lfTUlURV9TSVpFIDQwOTYKKworLyogZGVmaW5lcyBmb3IgdGhlIFBDSS1ESU8tOTYgKi8KKworI2RlZmluZSBOSURJT184MjU1X0JBU0UoeCkJKCh4KSo0KQorI2RlZmluZSBOSURJT19BIDAKKyNkZWZpbmUgTklESU9fQiA0CisjZGVmaW5lIE5JRElPX0MgOAorI2RlZmluZSBOSURJT19EIDEyCisKKy8qIGRlZmluZXMgZm9yIHRoZSBQQ0ktRElPLTMySFMgKi8KKworI2RlZmluZSBXaW5kb3dfQWRkcmVzcwkJCTQJLyogVyAqLworI2RlZmluZSBJbnRlcnJ1cHRfQW5kX1dpbmRvd19TdGF0dXMJNAkvKiBSICovCisjZGVmaW5lIEludFN0YXR1czEJCQkJKDE8PDApCisjZGVmaW5lIEludFN0YXR1czIJCQkJKDE8PDEpCisjZGVmaW5lIFdpbmRvd0FkZHJlc3NTdGF0dXNfbWFzawkJMHg3YworCisjZGVmaW5lIE1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sIDUJLyogVyAqLworI2RlZmluZSBJbnRlcnJ1cHRMaW5lKHgpCQkJKCh4KSYzKQorI2RlZmluZSBPcGVuSW50CQkJCSgxPDwyKQorI2RlZmluZSBHcm91cF9TdGF0dXMJCQk1CS8qIFIgKi8KKyNkZWZpbmUgRGF0YUxlZnQJCQkJKDE8PDApCisjZGVmaW5lIFJlcQkJCQkJKDE8PDIpCisjZGVmaW5lIFN0b3BUcmlnCQkJCSgxPDwzKQorCisjZGVmaW5lIEdyb3VwXzFfRmxhZ3MJCQk2CS8qIFIgKi8KKyNkZWZpbmUgR3JvdXBfMl9GbGFncwkJCTcJLyogUiAqLworI2RlZmluZSBUcmFuc2ZlclJlYWR5CQkJCSgxPDwwKQorI2RlZmluZSBDb3VudEV4cGlyZWQJCQkJKDE8PDEpCisjZGVmaW5lIFdhaXRlZAkJCQkoMTw8NSkKKyNkZWZpbmUgUHJpbWFyeVRDCQkJCSgxPDw2KQorI2RlZmluZSBTZWNvbmRhcnlUQwkJCQkoMTw8NykKKyAgLy8jZGVmaW5lIFNlcmlhbFJvc2UKKyAgLy8jZGVmaW5lIFJlcVJvc2UKKyAgLy8jZGVmaW5lIFBhdXNlZAorCisjZGVmaW5lIEdyb3VwXzFfRmlyc3RfQ2xlYXIJCTYJLyogVyAqLworI2RlZmluZSBHcm91cF8yX0ZpcnN0X0NsZWFyCQk3CS8qIFcgKi8KKyNkZWZpbmUgQ2xlYXJXYWl0ZWQJCQkJKDE8PDMpCisjZGVmaW5lIENsZWFyUHJpbWFyeVRDCQkJKDE8PDQpCisjZGVmaW5lIENsZWFyU2Vjb25kYXJ5VEMJCQkoMTw8NSkKKyNkZWZpbmUgRE1BUmVzZXQJCQkJKDE8PDYpCisjZGVmaW5lIEZJRk9SZXNldAkJCQkoMTw8NykKKyNkZWZpbmUgQ2xlYXJBbGwJCQkJMHhmOAorCisjZGVmaW5lIEdyb3VwXzFfRklGTwkJCTgJLyogVyAqLworI2RlZmluZSBHcm91cF8yX0ZJRk8JCQkxMgkvKiBXICovCisKKyNkZWZpbmUgVHJhbnNmZXJfQ291bnQJCQkyMAorI2RlZmluZSBDaGlwX0lEX0QJCQkyNAorI2RlZmluZSBDaGlwX0lEX0kJCQkyNQorI2RlZmluZSBDaGlwX0lEX08JCQkyNgorI2RlZmluZSBDaGlwX1ZlcnNpb24JCQkyNworI2RlZmluZSBQb3J0X0lPKHgpCQkJKDI4Kyh4KSkKKyNkZWZpbmUgUG9ydF9QaW5fRGlyZWN0aW9ucyh4KQkJKDMyKyh4KSkKKyNkZWZpbmUgUG9ydF9QaW5fTWFzayh4KQkJKDM2Kyh4KSkKKyNkZWZpbmUgUG9ydF9QaW5fUG9sYXJpdGllcyh4KQkJKDQwKyh4KSkKKworI2RlZmluZSBNYXN0ZXJfQ2xvY2tfUm91dGluZwkJNDUKKyNkZWZpbmUgUlRTSUNsb2NraW5nKHgpCQkJKCgoeCkmMyk8PDQpCisKKyNkZWZpbmUgR3JvdXBfMV9TZWNvbmRfQ2xlYXIJCTQ2CS8qIFcgKi8KKyNkZWZpbmUgR3JvdXBfMl9TZWNvbmRfQ2xlYXIJCTQ3CS8qIFcgKi8KKyNkZWZpbmUgQ2xlYXJFeHBpcmVkCQkJCSgxPDwwKQorCisjZGVmaW5lIFBvcnRfUGF0dGVybih4KQkJCSg0OCsoeCkpCisKKyNkZWZpbmUgRGF0YV9QYXRoCQkJNjQKKyNkZWZpbmUgRklGT0VuYWJsZUEJCSgxPDwwKQorI2RlZmluZSBGSUZPRW5hYmxlQgkJKDE8PDEpCisjZGVmaW5lIEZJRk9FbmFibGVDCQkoMTw8MikKKyNkZWZpbmUgRklGT0VuYWJsZUQJCSgxPDwzKQorI2RlZmluZSBGdW5uZWxpbmcoeCkJCSgoKHgpJjMpPDw0KQorI2RlZmluZSBHcm91cERpcmVjdGlvbgkoMTw8NykKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8xCQk2NQorI2RlZmluZSBPcE1vZGUJCQkJUHJvdG9jb2xfUmVnaXN0ZXJfMQorI2RlZmluZSBSdW5Nb2RlKHgpCQkoKHgpJjcpCisjZGVmaW5lIE51bWJlcmVkCQkoMTw8MykKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8yCQk2NgorI2RlZmluZSBDbG9ja1JlZwkJCVByb3RvY29sX1JlZ2lzdGVyXzIKKyNkZWZpbmUgQ2xvY2tMaW5lKHgpCQkoKCh4KSYzKTw8NSkKKyNkZWZpbmUgSW52ZXJ0U3RvcFRyaWcJKDE8PDcpCisjZGVmaW5lIERhdGFMYXRjaGluZyh4KSAgICAgICAoKCh4KSYzKTw8NSkKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8zCQk2NworI2RlZmluZSBTZXF1ZW5jZQkJCVByb3RvY29sX1JlZ2lzdGVyXzMKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8xNAkJNjgJLyogMTYgYml0ICovCisjZGVmaW5lIENsb2NrU3BlZWQJCQlQcm90b2NvbF9SZWdpc3Rlcl8xNAorCisjZGVmaW5lIFByb3RvY29sX1JlZ2lzdGVyXzQJCTcwCisjZGVmaW5lIFJlcVJlZwkJCQlQcm90b2NvbF9SZWdpc3Rlcl80CisjZGVmaW5lIFJlcUNvbmRpdGlvbmluZyh4KQkoKCh4KSY3KTw8MykKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl81CQk3MQorI2RlZmluZSBCbG9ja01vZGUJCQlQcm90b2NvbF9SZWdpc3Rlcl81CisKKyNkZWZpbmUgRklGT19Db250cm9sCQkJNzIKKyNkZWZpbmUgUmVhZHlMZXZlbCh4KQkJKCh4KSY3KQorCisjZGVmaW5lIFByb3RvY29sX1JlZ2lzdGVyXzYJCTczCisjZGVmaW5lIExpbmVQb2xhcml0aWVzCQkJUHJvdG9jb2xfUmVnaXN0ZXJfNgorI2RlZmluZSBJbnZlcnRBY2sJCSgxPDwwKQorI2RlZmluZSBJbnZlcnRSZXEJCSgxPDwxKQorI2RlZmluZSBJbnZlcnRDbG9jawkJKDE8PDIpCisjZGVmaW5lIEludmVydFNlcmlhbAkJKDE8PDMpCisjZGVmaW5lIE9wZW5BY2sJCSgxPDw0KQorI2RlZmluZSBPcGVuQ2xvY2sJCSgxPDw1KQorCisjZGVmaW5lIFByb3RvY29sX1JlZ2lzdGVyXzcJCTc0CisjZGVmaW5lIEFja1NlcgkJCQlQcm90b2NvbF9SZWdpc3Rlcl83CisjZGVmaW5lIEFja0xpbmUoeCkJCSgoKHgpJjMpPDwyKQorI2RlZmluZSBFeGNoYW5nZVBpbnMJCSgxPDw3KQorCisjZGVmaW5lIEludGVycnVwdF9Db250cm9sCQk3NQorICAvKiBiaXRzIHNhbWUgYXMgZmxhZ3MgKi8KKworI2RlZmluZSBETUFfTGluZV9Db250cm9sX0dyb3VwMQkJNzYKKyNkZWZpbmUgRE1BX0xpbmVfQ29udHJvbF9Hcm91cDIJCTEwOAorLy8gY2hhbm5lbCB6ZXJvIGlzIG5vbmUKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcHJpbWFyeV9ETUFDaGFubmVsX2JpdHModW5zaWduZWQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCAmIDB4MzsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2Vjb25kYXJ5X0RNQUNoYW5uZWxfYml0cyh1bnNpZ25lZCBjaGFubmVsKQoreworCXJldHVybiAoY2hhbm5lbCA8PCAyKSAmIDB4YzsKK30KKworI2RlZmluZSBUcmFuc2Zlcl9TaXplX0NvbnRyb2wJCTc3CisjZGVmaW5lIFRyYW5zZmVyV2lkdGgoeCkJKCh4KSYzKQorI2RlZmluZSBUcmFuc2Zlckxlbmd0aCh4KQkoKCh4KSYzKTw8MykKKyNkZWZpbmUgUmVxdWlyZVJMZXZlbAkJKDE8PDUpCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfMTUJCTc5CisjZGVmaW5lIERBUU9wdGlvbnMJCQlQcm90b2NvbF9SZWdpc3Rlcl8xNQorI2RlZmluZSBTdGFydFNvdXJjZSh4KQkJCSgoeCkmMHgzKQorI2RlZmluZSBJbnZlcnRTdGFydAkJCQkoMTw8MikKKyNkZWZpbmUgU3RvcFNvdXJjZSh4KQkJCQkoKCh4KSYweDMpPDwzKQorI2RlZmluZSBSZXFTdGFydAkJCQkoMTw8NikKKyNkZWZpbmUgUHJlU3RhcnQJCQkJKDE8PDcpCisKKyNkZWZpbmUgUGF0dGVybl9EZXRlY3Rpb24JCTgxCisjZGVmaW5lIERldGVjdGlvbk1ldGhvZAkJCSgxPDwwKQorI2RlZmluZSBJbnZlcnRNYXRjaAkJCQkoMTw8MSkKKyNkZWZpbmUgSUVfUGF0dGVybl9EZXRlY3Rpb24JCQkoMTw8MikKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl85CQk4MgorI2RlZmluZSBSZXFEZWxheQkJCVByb3RvY29sX1JlZ2lzdGVyXzkKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8xMAkJODMKKyNkZWZpbmUgUmVxTm90RGVsYXkJCQlQcm90b2NvbF9SZWdpc3Rlcl8xMAorCisjZGVmaW5lIFByb3RvY29sX1JlZ2lzdGVyXzExCQk4NAorI2RlZmluZSBBY2tEZWxheQkJCVByb3RvY29sX1JlZ2lzdGVyXzExCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfMTIJCTg1CisjZGVmaW5lIEFja05vdERlbGF5CQkJUHJvdG9jb2xfUmVnaXN0ZXJfMTIKKworI2RlZmluZSBQcm90b2NvbF9SZWdpc3Rlcl8xMwkJODYKKyNkZWZpbmUgRGF0YTFEZWxheQkJCVByb3RvY29sX1JlZ2lzdGVyXzEzCisKKyNkZWZpbmUgUHJvdG9jb2xfUmVnaXN0ZXJfOAkJODgJLyogMzIgYml0ICovCisjZGVmaW5lIFN0YXJ0RGVsYXkJCQlQcm90b2NvbF9SZWdpc3Rlcl84CisKK2VudW0gcGNpXzY1MzRfZmlybXdhcmVfcmVnaXN0ZXJzIHsJLyogMTYgYml0ICovCisJRmlybXdhcmVfQ29udHJvbF9SZWdpc3RlciA9IDB4MTAwLAorCUZpcm13YXJlX1N0YXR1c19SZWdpc3RlciA9IDB4MTA0LAorCUZpcm13YXJlX0RhdGFfUmVnaXN0ZXIgPSAweDEwOCwKKwlGaXJtd2FyZV9NYXNrX1JlZ2lzdGVyID0gMHgxMGMsCisJRmlybXdhcmVfRGVidWdfUmVnaXN0ZXIgPSAweDExMCwKK307CisvKiBtYWluIGZwZ2EgcmVnaXN0ZXJzICgzMiBiaXQpKi8KK2VudW0gcGNpXzY1MzRfZnBnYV9yZWdpc3RlcnMgeworCUZQR0FfQ29udHJvbDFfUmVnaXN0ZXIgPSAweDIwMCwKKwlGUEdBX0NvbnRyb2wyX1JlZ2lzdGVyID0gMHgyMDQsCisJRlBHQV9JcnFfTWFza19SZWdpc3RlciA9IDB4MjA4LAorCUZQR0FfU3RhdHVzX1JlZ2lzdGVyID0gMHgyMGMsCisJRlBHQV9TaWduYXR1cmVfUmVnaXN0ZXIgPSAweDIxMCwKKwlGUEdBX1NDQUxTX0NvdW50ZXJfUmVnaXN0ZXIgPSAweDI4MCwJLyp3cml0ZS1jbGVhciAqLworCUZQR0FfU0NBTVNfQ291bnRlcl9SZWdpc3RlciA9IDB4Mjg0LAkvKndyaXRlLWNsZWFyICovCisJRlBHQV9TQ0JMU19Db3VudGVyX1JlZ2lzdGVyID0gMHgyODgsCS8qd3JpdGUtY2xlYXIgKi8KKwlGUEdBX1NDQk1TX0NvdW50ZXJfUmVnaXN0ZXIgPSAweDI4YywJLyp3cml0ZS1jbGVhciAqLworCUZQR0FfVGVtcF9Db250cm9sX1JlZ2lzdGVyID0gMHgyYTAsCisJRlBHQV9EQVJfUmVnaXN0ZXIgPSAweDJhOCwKKwlGUEdBX0VMQ19SZWFkX1JlZ2lzdGVyID0gMHgyYjgsCisJRlBHQV9FTENfV3JpdGVfUmVnaXN0ZXIgPSAweDJiYywKK307CitlbnVtIEZQR0FfQ29udHJvbF9CaXRzIHsKKwlGUEdBX0VuYWJsZV9CaXQgPSAweDgwMDAsCit9OworCisjZGVmaW5lIFRJTUVSX0JBU0UgNTAJCS8qIG5hbm9zZWNvbmRzICovCisKKyNpZmRlZiBVU0VfRE1BCisjZGVmaW5lIEludEVuIChDb3VudEV4cGlyZWR8V2FpdGVkfFByaW1hcnlUQ3xTZWNvbmRhcnlUQykKKyNlbHNlCisjZGVmaW5lIEludEVuIChUcmFuc2ZlclJlYWR5fENvdW50RXhwaXJlZHxXYWl0ZWR8UHJpbWFyeVRDfFNlY29uZGFyeVRDKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgbmlkaW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgbmlkaW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgbmlfcGNpZGlvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2lkaW8gPSB7CisgICAgICBkcml2ZXJfbmFtZToibmlfcGNpZGlvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpuaWRpb19hdHRhY2gsCisgICAgICBkZXRhY2g6bmlkaW9fZGV0YWNoLAorfTsKKworc3RydWN0IG5pZGlvX2JvYXJkIHsKKworCWludCBkZXZfaWQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbl84MjU1OworCXVuc2lnbmVkIGludCBpc19kaW9kYXE6MTsKKwl1bnNpZ25lZCBpbnQgdXNlc19maXJtd2FyZToxOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuaWRpb19ib2FyZCBuaWRpb19ib2FyZHNbXSA9IHsKKwl7CisJICAgICAgZGV2X2lkOgkweDExNTAsCisJICAgICAgbmFtZToJInBjaS1kaW8tMzJocyIsCisJICAgICAgbl84MjU1OgkwLAorCSAgICAgIGlzX2Rpb2RhcToxLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MTMyMCwKKwkgICAgICBuYW1lOgkicHhpLTY1MzMiLAorCSAgICAgIG5fODI1NToJMCwKKwkgICAgICBpc19kaW9kYXE6MSwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDEyYjAsCisJICAgICAgbmFtZToJInBjaS02NTM0IiwKKwkgICAgICBuXzgyNTU6CTAsCisJICAgICAgaXNfZGlvZGFxOjEsCisJICAgICAgdXNlc19maXJtd2FyZToxLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MDE2MCwKKwkgICAgICBuYW1lOgkicGNpLWRpby05NiIsCisJICAgICAgbl84MjU1Ogk0LAorCSAgICAgIGlzX2Rpb2RhcTowLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MTYzMCwKKwkgICAgICBuYW1lOgkicGNpLWRpby05NmIiLAorCSAgICAgIG5fODI1NToJNCwKKwkgICAgICBpc19kaW9kYXE6MCwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDEzYzAsCisJICAgICAgbmFtZToJInB4aS02NTA4IiwKKwkgICAgICBuXzgyNTU6CTQsCisJICAgICAgaXNfZGlvZGFxOjAsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHgwNDAwLAorCSAgICAgIG5hbWU6CSJwY2ktNjUwMyIsCisJICAgICAgbl84MjU1OgkxLAorCSAgICAgIGlzX2Rpb2RhcTowLAorCQl9LAorCXsKKwkgICAgICBkZXZfaWQ6CTB4MTI1MCwKKwkgICAgICBuYW1lOgkicGNpLTY1MDNiIiwKKwkgICAgICBuXzgyNTU6CTEsCisJICAgICAgaXNfZGlvZGFxOjAsCisJCX0sCisJeworCSAgICAgIGRldl9pZDoJMHgxN2QwLAorCSAgICAgIG5hbWU6CSJwY2ktNjUwM3giLAorCSAgICAgIG5fODI1NToJMSwKKwkgICAgICBpc19kaW9kYXE6MCwKKwkJfSwKKwl7CisJICAgICAgZGV2X2lkOgkweDE4MDAsCisJICAgICAgbmFtZToJInB4aS02NTAzIiwKKwkgICAgICBuXzgyNTU6CTEsCisJICAgICAgaXNfZGlvZGFxOjAsCisJCX0sCit9OworCisjZGVmaW5lIG5fbmlkaW9fYm9hcmRzIChzaXplb2YobmlkaW9fYm9hcmRzKS9zaXplb2YobmlkaW9fYm9hcmRzWzBdKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBuaWRpb19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobmlfcGNpZGlvX3BjaV90YWJsZSkgPSB7CisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMTUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDEzMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTJiMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgwMTYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE2MzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTNjMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgwNDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDEyNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTdkMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxODAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuaV9wY2lkaW9fcGNpX3RhYmxlKTsKKworc3RydWN0IG5pZGlvOTZfcHJpdmF0ZSB7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCWludCBib2FyZHR5cGU7CisJaW50IGRpbzsKKwl1bnNpZ25lZCBzaG9ydCBPcE1vZGVCaXRzOworCXN0cnVjdCBtaXRlX2NoYW5uZWwgKmRpX21pdGVfY2hhbjsKKwlzdHJ1Y3QgbWl0ZV9kbWFfZGVzY3JpcHRvcl9yaW5nICpkaV9taXRlX3Jpbmc7CisJc3BpbmxvY2tfdCBtaXRlX2NoYW5uZWxfbG9jazsKK307CisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgbmlkaW85Nl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IG5pX3BjaWRpb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpOworc3RhdGljIGludCBuaV9wY2lkaW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpOworc3RhdGljIGludCBuaV9wY2lkaW9faW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKTsKK3N0YXRpYyBpbnQgbmlkaW9fZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KTsKK3N0YXRpYyBpbnQgbmlfcGNpZGlvX25zX3RvX3RpbWVyKGludCAqbmFub3NlYywgaW50IHJvdW5kX21vZGUpOworc3RhdGljIGludCBzZXR1cF9taXRlX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworI2lmZGVmIERFQlVHX0ZMQUdTCitzdGF0aWMgdm9pZCBuaV9wY2lkaW9fcHJpbnRfZmxhZ3ModW5zaWduZWQgaW50IGZsYWdzKTsKK3N0YXRpYyB2b2lkIG5pX3BjaWRpb19wcmludF9zdGF0dXModW5zaWduZWQgaW50IHN0YXR1cyk7CisjZWxzZQorI2RlZmluZSBuaV9wY2lkaW9fcHJpbnRfZmxhZ3MoeCkKKyNkZWZpbmUgbmlfcGNpZGlvX3ByaW50X3N0YXR1cyh4KQorI2VuZGlmCisKK3N0YXRpYyBpbnQgbmlfcGNpZGlvX3JlcXVlc3RfZGlfbWl0ZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7CisJQlVHX09OKGRldnByaXYtPmRpX21pdGVfY2hhbik7CisJZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuID0KKwkJbWl0ZV9yZXF1ZXN0X2NoYW5uZWxfaW5fcmFuZ2UoZGV2cHJpdi0+bWl0ZSwKKwkJZGV2cHJpdi0+ZGlfbWl0ZV9yaW5nLCAxLCAyKTsKKwlpZiAoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuID09IE5VTEwpIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLAorCQkJZmxhZ3MpOworCQljb21lZGlfZXJyb3IoZGV2LCAiZmFpbGVkIHRvIHJlc2VydmUgbWl0ZSBkbWEgY2hhbm5lbC4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJd3JpdGViKHByaW1hcnlfRE1BQ2hhbm5lbF9iaXRzKGRldnByaXYtPmRpX21pdGVfY2hhbi0+Y2hhbm5lbCkgfAorCQlzZWNvbmRhcnlfRE1BQ2hhbm5lbF9iaXRzKGRldnByaXYtPmRpX21pdGVfY2hhbi0+Y2hhbm5lbCksCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRE1BX0xpbmVfQ29udHJvbF9Hcm91cDEpOworCW1taW93YigpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5taXRlX2NoYW5uZWxfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuaV9wY2lkaW9fcmVsZWFzZV9kaV9taXRlX2NoYW5uZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGZsYWdzKTsKKwlpZiAoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuKSB7CisJCW1pdGVfZG1hX2Rpc2FybShkZXZwcml2LT5kaV9taXRlX2NoYW4pOworCQltaXRlX2RtYV9yZXNldChkZXZwcml2LT5kaV9taXRlX2NoYW4pOworCQltaXRlX3JlbGVhc2VfY2hhbm5lbChkZXZwcml2LT5kaV9taXRlX2NoYW4pOworCQlkZXZwcml2LT5kaV9taXRlX2NoYW4gPSBOVUxMOworCQl3cml0ZWIocHJpbWFyeV9ETUFDaGFubmVsX2JpdHMoMCkgfAorCQkJc2Vjb25kYXJ5X0RNQUNoYW5uZWxfYml0cygwKSwKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRE1BX0xpbmVfQ29udHJvbF9Hcm91cDEpOworCQltbWlvd2IoKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbmlkaW85Nl84MjU1X2NiKGludCBkaXIsIGludCBwb3J0LCBpbnQgZGF0YSwgdW5zaWduZWQgbG9uZyBpb2Jhc2UpCit7CisJaWYgKGRpcikgeworCQl3cml0ZWIoZGF0YSwgKHZvaWQgKikoaW9iYXNlICsgcG9ydCkpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gcmVhZGIoKHZvaWQgKikoaW9iYXNlICsgcG9ydCkpOworCX0KK30KKwordm9pZCBuaV9wY2lkaW9fZXZlbnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpZiAocy0+YXN5bmMtPgorCQlldmVudHMgJiAoQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUiB8IENPTUVESV9DQl9PVkVSRkxPVykpCisJeworCQluaV9wY2lkaW9fY2FuY2VsKGRldiwgcyk7CisJfQorCWNvbWVkaV9ldmVudChkZXYsIHMpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbmlkaW9faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMgPSBzLT5hc3luYzsKKwlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGUgPSBkZXZwcml2LT5taXRlOworCisJLy9pbnQgaSwgajsKKwlsb25nIGludCBBdXhEYXRhID0gMDsKKwlzaG9ydCBkYXRhMSA9IDA7CisJc2hvcnQgZGF0YTIgPSAwOworCWludCBmbGFnczsKKwlpbnQgc3RhdHVzOworCWludCB3b3JrID0gMDsKKwl1bnNpZ25lZCBpbnQgbV9zdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJLy9pbnRlcnJ1cGNpb25zIHBhcmFzaXRlcworCWlmIChkZXYtPmF0dGFjaGVkID09IDApIHsKKwkJLy8gYXNzdW1lIGl0J3MgZnJvbSBhbm90aGVyIGNhcmQKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCXN0YXR1cyA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJSW50ZXJydXB0X0FuZF9XaW5kb3dfU3RhdHVzKTsKKwlmbGFncyA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgR3JvdXBfMV9GbGFncyk7CisKKwlEUFJJTlRLKCJuaV9wY2lkaW9faW50ZXJydXB0OiBzdGF0dXM9MHglMDJ4LGZsYWdzPTB4JTAyeFxuIiwKKwkJc3RhdHVzLCBmbGFncyk7CisJbmlfcGNpZGlvX3ByaW50X2ZsYWdzKGZsYWdzKTsKKwluaV9wY2lkaW9fcHJpbnRfc3RhdHVzKHN0YXR1cyk7CisKKwkvL3ByaW50aygiYnVmWzBdPSUwOHhcbiIsKih1bnNpZ25lZCBpbnQgKilhc3luYy0+cHJlYWxsb2NfYnVmKTsKKwkvL3ByaW50aygiYnVmWzQwOTZdPSUwOHhcbiIsKih1bnNpZ25lZCBpbnQgKikoYXN5bmMtPnByZWFsbG9jX2J1Zis0MDk2KSk7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBpcnFfZmxhZ3MpOworCWlmIChkZXZwcml2LT5kaV9taXRlX2NoYW4pCisJCW1fc3RhdHVzID0gbWl0ZV9nZXRfc3RhdHVzKGRldnByaXYtPmRpX21pdGVfY2hhbik7CisjaWZkZWYgTUlURV9ERUJVRworCW1pdGVfcHJpbnRfY2hzcihtX3N0YXR1cyk7CisjZW5kaWYKKwkvL3ByaW50aygibWl0ZV9ieXRlc190cmFuc2ZlcnJlZDogJWRcbiIsbWl0ZV9ieXRlc190cmFuc2ZlcnJlZChtaXRlLERJX0RNQV9DSEFOKSk7CisJLy9taXRlX2R1bXBfcmVncyhtaXRlKTsKKwlpZiAobV9zdGF0dXMgJiBDSFNSX0lOVCkgeworCQlpZiAobV9zdGF0dXMgJiBDSFNSX0xJTktDKSB7CisJCQl3cml0ZWwoQ0hPUl9DTFJMQywKKwkJCQltaXRlLT5taXRlX2lvX2FkZHIgKworCQkJCU1JVEVfQ0hPUihkZXZwcml2LT5kaV9taXRlX2NoYW4tPmNoYW5uZWwpKTsKKwkJCW1pdGVfc3luY19pbnB1dF9kbWEoZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuLCBzLT5hc3luYyk7CisJCQkvKiBYWFggbmVlZCB0byBieXRlc3dhcCAqLworCQl9CisJCWlmIChtX3N0YXR1cyAmIH4oQ0hTUl9JTlQgfCBDSFNSX0xJTktDIHwgQ0hTUl9ET05FIHwgQ0hTUl9EUkRZIHwKKwkJCQlDSFNSX0RSUTEgfCBDSFNSX01SRFkpKSB7CisJCQlEUFJJTlRLKCJ1bmtub3duIG1pdGUgaW50ZXJydXB0LCBkaXNhYmxpbmcgSVJRXG4iKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwkJfQorCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2ssIGlycV9mbGFncyk7CisKKwl3aGlsZSAoc3RhdHVzICYgRGF0YUxlZnQpIHsKKwkJd29yaysrOworCQlpZiAod29yayA+IDIwKSB7CisJCQlEUFJJTlRLKCJ0b28gbXVjaCB3b3JrIGluIGludGVycnVwdFxuIik7CisJCQl3cml0ZWIoMHgwMCwKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJTWFzdGVyX0RNQV9BbmRfSW50ZXJydXB0X0NvbnRyb2wpOworCQkJYnJlYWs7CisJCX0KKworCQlmbGFncyAmPSBJbnRFbjsKKworCQlpZiAoZmxhZ3MgJiBUcmFuc2ZlclJlYWR5KSB7CisJCQkvL0RQUklOVEsoIlRyYW5zZmVyUmVhZHlcbiIpOworCQkJd2hpbGUgKGZsYWdzICYgVHJhbnNmZXJSZWFkeSkgeworCQkJCXdvcmsrKzsKKwkJCQlpZiAod29yayA+IDEwMCkgeworCQkJCQlEUFJJTlRLKCJ0b28gbXVjaCB3b3JrIGluIGludGVycnVwdFxuIik7CisJCQkJCXdyaXRlYigweDAwLAorCQkJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCQkJTWFzdGVyX0RNQV9BbmRfSW50ZXJydXB0X0NvbnRyb2wpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJQXV4RGF0YSA9CisJCQkJCXJlYWRsKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQkJR3JvdXBfMV9GSUZPKTsKKwkJCQlkYXRhMSA9IEF1eERhdGEgJiAweGZmZmY7CisJCQkJZGF0YTIgPSAoQXV4RGF0YSAmIDB4ZmZmZjAwMDApID4+IDE2OworCQkJCWNvbWVkaV9idWZfcHV0KGFzeW5jLCBkYXRhMSk7CisJCQkJY29tZWRpX2J1Zl9wdXQoYXN5bmMsIGRhdGEyKTsKKwkJCQkvL0RQUklOVEsoInJlYWQ6JWQsICVkXG4iLGRhdGExLGRhdGEyKTsKKwkJCQlmbGFncyA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQkJR3JvdXBfMV9GbGFncyk7CisJCQl9CisJCQkvL0RQUklOVEsoImJ1Zl9pbnRfY291bnQ6ICVkXG4iLGFzeW5jLT5idWZfaW50X2NvdW50KTsKKwkJCS8vRFBSSU5USygiMSkgSW50RW49JWQsZmxhZ3M9JWQsc3RhdHVzPSVkXG4iLEludEVuLGZsYWdzLHN0YXR1cyk7CisJCQkvL25pX3BjaWRpb19wcmludF9mbGFncyhmbGFncyk7CisJCQkvL25pX3BjaWRpb19wcmludF9zdGF0dXMoc3RhdHVzKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOworCQl9CisKKwkJaWYgKGZsYWdzICYgQ291bnRFeHBpcmVkKSB7CisJCQlEUFJJTlRLKCJDb3VudEV4cGlyZWRcbiIpOworCQkJd3JpdGViKENsZWFyRXhwaXJlZCwKKwkJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJR3JvdXBfMV9TZWNvbmRfQ2xlYXIpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCisJCQl3cml0ZWIoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBPcE1vZGUpOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoZmxhZ3MgJiBXYWl0ZWQpIHsKKwkJCURQUklOVEsoIldhaXRlZFxuIik7CisJCQl3cml0ZWIoQ2xlYXJXYWl0ZWQsCisJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCUdyb3VwXzFfRmlyc3RfQ2xlYXIpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoZmxhZ3MgJiBQcmltYXJ5VEMpIHsKKwkJCURQUklOVEsoIlByaW1hcnlUQ1xuIik7CisJCQl3cml0ZWIoQ2xlYXJQcmltYXJ5VEMsCisJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCUdyb3VwXzFfRmlyc3RfQ2xlYXIpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQl9IGVsc2UgaWYgKGZsYWdzICYgU2Vjb25kYXJ5VEMpIHsKKwkJCURQUklOVEsoIlNlY29uZGFyeVRDXG4iKTsKKwkJCXdyaXRlYihDbGVhclNlY29uZGFyeVRDLAorCQkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQlHcm91cF8xX0ZpcnN0X0NsZWFyKTsKKwkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorI2lmIDAKKwkJZWxzZSB7CisJCQlwcmludGsoIm5pX3BjaWRpbzogdW5rbm93biBpbnRlcnJ1cHRcbiIpOworCQkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOworCQkJd3JpdGViKDB4MDAsCisJCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCU1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sKTsKKwkJfQorI2VuZGlmCisJCWZsYWdzID0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHcm91cF8xX0ZsYWdzKTsKKwkJc3RhdHVzID0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJSW50ZXJydXB0X0FuZF9XaW5kb3dfU3RhdHVzKTsKKwkJLy9EUFJJTlRLKCJsb29wIGVuZDogSW50RW49MHglMDJ4LGZsYWdzPTB4JTAyeCxzdGF0dXM9MHglMDJ4XG4iLAorCQkvLyAgICAgIEludEVuLGZsYWdzLHN0YXR1cyk7CisJCS8vbmlfcGNpZGlvX3ByaW50X2ZsYWdzKGZsYWdzKTsKKwkJLy9uaV9wY2lkaW9fcHJpbnRfc3RhdHVzKHN0YXR1cyk7CisJfQorCisgICAgICBvdXQ6CisJbmlfcGNpZGlvX2V2ZW50KGRldiwgcyk7CisjaWYgMAorCWlmICghdGFnKSB7CisJCXdyaXRlYigweDAzLAorCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJTWFzdGVyX0RNQV9BbmRfSW50ZXJydXB0X0NvbnRyb2wpOworCX0KKyNlbmRpZgorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIERFQlVHX0ZMQUdTCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZmxhZ3Nfc3RyaW5nc1tdID0geworCSJUcmFuc2ZlclJlYWR5IiwgIkNvdW50RXhwaXJlZCIsICIyIiwgIjMiLAorCSI0IiwgIldhaXRlZCIsICJQcmltYXJ5VEMiLCAiU2Vjb25kYXJ5VEMiLAorfTsKK3N0YXRpYyB2b2lkIG5pX3BjaWRpb19wcmludF9mbGFncyh1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IGk7CisKKwlwcmludGsoImdyb3VwXzFfZmxhZ3M6Iik7CisJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKGZsYWdzICYgKDEgPDwgaSkpIHsKKwkJCXByaW50aygiICVzIiwgZmxhZ3Nfc3RyaW5nc1tpXSk7CisJCX0KKwl9CisJcHJpbnRrKCJcbiIpOworfQorc3RhdGljIGNoYXIgKnN0YXR1c19zdHJpbmdzW10gPSB7CisJIkRhdGFMZWZ0MSIsICJSZXNlcnZlZDEiLCAiUmVxMSIsICJTdG9wVHJpZzEiLAorCSJEYXRhTGVmdDIiLCAiUmVzZXJ2ZWQyIiwgIlJlcTIiLCAiU3RvcFRyaWcyIiwKK307CitzdGF0aWMgdm9pZCBuaV9wY2lkaW9fcHJpbnRfc3RhdHVzKHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlpbnQgaTsKKworCXByaW50aygiZ3JvdXBfc3RhdHVzOiIpOworCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChmbGFncyAmICgxIDw8IGkpKSB7CisJCQlwcmludGsoIiAlcyIsIHN0YXR1c19zdHJpbmdzW2ldKTsKKwkJfQorCX0KKwlwcmludGsoIlxuIik7Cit9CisjZW5kaWYKKworI2lmZGVmIHVudXNlZAorc3RhdGljIHZvaWQgZGVidWdfaW50KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBhLCBiOworCXN0YXRpYyBpbnQgbl9pbnQgPSAwOworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisJYSA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgR3JvdXBfU3RhdHVzKTsKKwliID0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHcm91cF8xX0ZsYWdzKTsKKworCWlmIChuX2ludCA8IDEwKSB7CisJCURQUklOVEsoInN0YXR1cyAweCUwMnggZmxhZ3MgMHglMDJ4IHRpbWUgJTA2ZFxuIiwgYSwgYiwKKwkJCShpbnQpdHYudHZfdXNlYyk7CisJfQorCisJd2hpbGUgKGIgJiAxKSB7CisJCXdyaXRldygweGZmLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEdyb3VwXzFfRklGTyk7CisJCWIgPSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEdyb3VwXzFfRmxhZ3MpOworCX0KKworCWIgPSByZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEdyb3VwXzFfRmxhZ3MpOworCisJaWYgKG5faW50IDwgMTApIHsKKwkJRFBSSU5USygibmV3IHN0YXR1cyAweCUwMnhcbiIsIGIpOworCQluX2ludCsrOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW50IG5pX3BjaWRpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCQlzLT5pb19iaXRzIHw9IDEgPDwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH4oMSA8PCBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQlkYXRhWzFdID0KKwkJCShzLT5pb19iaXRzICYgKDEgPDwgQ1JfQ0hBTihpbnNuLT4KKwkJCQkJY2hhbnNwZWMpKSkgPyBDT01FRElfT1VUUFVUIDoKKwkJCUNPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl3cml0ZWwocy0+aW9fYml0cywgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBQb3J0X1Bpbl9EaXJlY3Rpb25zKDApKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX3BjaWRpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQl3cml0ZWwocy0+c3RhdGUsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9JTygwKSk7CisJfQorCWRhdGFbMV0gPSByZWFkbChkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfSU8oMCkpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgbmlfcGNpZGlvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XIHwgVFJJR19JTlQ7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0lOVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgorCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJLyogc2FtZSBmb3IgYm90aCBUUklHX0lOVCBhbmQgVFJJR19OT1cgKi8KKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIE1BWF9TUEVFRAkoVElNRVJfQkFTRSkJLyogaW4gbmFub3NlY29uZHMgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSBNQVhfU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQkvKiBubyBtaW51bXVtIHNwZWVkICovCisJfSBlbHNlIHsKKwkJLyogVFJJR19FWFQgKi8KKwkJLyogc2hvdWxkIGJlIGxldmVsL2VkZ2UsIGhpL2xvIHNwZWNpZmljYXRpb24gaGVyZSAqLworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyAhPSAwKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQkvKiBubyBsaW1pdCAqLworCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCW5pX3BjaWRpb19uc190b190aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX3BjaWRpb19uc190b190aW1lcihpbnQgKm5hbm9zZWMsIGludCByb3VuZF9tb2RlKQoreworCWludCBkaXZpZGVyLCBiYXNlOworCisJYmFzZSA9IFRJTUVSX0JBU0U7CisKKwlzd2l0Y2ggKHJvdW5kX21vZGUpIHsKKwljYXNlIFRSSUdfUk9VTkRfTkVBUkVTVDoKKwlkZWZhdWx0OgorCQlkaXZpZGVyID0gKCpuYW5vc2VjICsgYmFzZSAvIDIpIC8gYmFzZTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX0RPV046CisJCWRpdmlkZXIgPSAoKm5hbm9zZWMpIC8gYmFzZTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX1JPVU5EX1VQOgorCQlkaXZpZGVyID0gKCpuYW5vc2VjICsgYmFzZSAtIDEpIC8gYmFzZTsKKwkJYnJlYWs7CisJfQorCisJKm5hbm9zZWMgPSBiYXNlICogZGl2aWRlcjsKKwlyZXR1cm4gZGl2aWRlcjsKK30KKworc3RhdGljIGludCBuaV9wY2lkaW9fY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJLyogWFhYIGNvbmZpZ3VyZSBwb3J0cyBmb3IgaW5wdXQgKi8KKwl3cml0ZWwoMHgwMDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUGluX0RpcmVjdGlvbnMoMCkpOworCisJaWYgKDEpIHsKKwkJLyogZW5hYmxlIGZpZm9zIEEgQiBDIEQgKi8KKwkJd3JpdGViKDB4MGYsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRGF0YV9QYXRoKTsKKworCQkvKiBzZXQgdHJhbnNmZXIgd2lkdGggYSAzMiBiaXRzICovCisJCXdyaXRlYihUcmFuc2ZlcldpZHRoKDApIHwgVHJhbnNmZXJMZW5ndGgoMCksCisJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFRyYW5zZmVyX1NpemVfQ29udHJvbCk7CisJfSBlbHNlIHsKKwkJd3JpdGViKDB4MDMsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRGF0YV9QYXRoKTsKKwkJd3JpdGViKFRyYW5zZmVyV2lkdGgoMykgfCBUcmFuc2Zlckxlbmd0aCgwKSwKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgVHJhbnNmZXJfU2l6ZV9Db250cm9sKTsKKwl9CisKKwkvKiBwcm90b2NvbCBjb25maWd1cmF0aW9uICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKiBwYWdlIDQtNSwgImlucHV0IHdpdGggaW50ZXJuYWwgUkVRcyIgKi8KKwkJd3JpdGViKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgT3BNb2RlKTsKKwkJd3JpdGViKDB4MDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQ2xvY2tSZWcpOworCQl3cml0ZWIoMSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBTZXF1ZW5jZSk7CisJCXdyaXRlYigweDA0LCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFJlcVJlZyk7CisJCXdyaXRlYig0LCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEJsb2NrTW9kZSk7CisJCXdyaXRlYigzLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIExpbmVQb2xhcml0aWVzKTsKKwkJd3JpdGViKDB4YzAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQWNrU2VyKTsKKwkJd3JpdGVsKG5pX3BjaWRpb19uc190b190aW1lcigmY21kLT5zY2FuX2JlZ2luX2FyZywKKwkJCQlUUklHX1JPVU5EX05FQVJFU1QpLAorCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBTdGFydERlbGF5KTsKKwkJd3JpdGViKDEsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUmVxRGVsYXkpOworCQl3cml0ZWIoMSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBSZXFOb3REZWxheSk7CisJCXdyaXRlYigxLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFja0RlbGF5KTsKKwkJd3JpdGViKDB4MGIsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQWNrTm90RGVsYXkpOworCQl3cml0ZWIoMHgwMSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBEYXRhMURlbGF5KTsKKwkJLyogbWFudWFsLCBwYWdlIDQtNTogQ2xvY2tTcGVlZCBjb21tZW50IGlzIGluY29ycmVjdGx5IGxpc3RlZAorCQkgKiBvbiBEQVFPcHRpb25zICovCisJCXdyaXRldygwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENsb2NrU3BlZWQpOworCQl3cml0ZWIoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBEQVFPcHRpb25zKTsKKwl9IGVsc2UgeworCQkvKiBUUklHX0VYVCAqLworCQkvKiBwYWdlIDQtNSwgImlucHV0IHdpdGggZXh0ZXJuYWwgUkVRcyIgKi8KKwkJd3JpdGViKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgT3BNb2RlKTsKKwkJd3JpdGViKDB4MDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQ2xvY2tSZWcpOworCQl3cml0ZWIoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBTZXF1ZW5jZSk7CisJCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFJlcVJlZyk7CisJCXdyaXRlYig0LCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEJsb2NrTW9kZSk7CisJCXdyaXRlYigwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIExpbmVQb2xhcml0aWVzKTsKKwkJd3JpdGViKDB4MDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQWNrU2VyKTsKKwkJd3JpdGVsKDEsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgU3RhcnREZWxheSk7CisJCXdyaXRlYigxLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFJlcURlbGF5KTsKKwkJd3JpdGViKDEsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUmVxTm90RGVsYXkpOworCQl3cml0ZWIoMSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBY2tEZWxheSk7CisJCXdyaXRlYigweDBDLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFja05vdERlbGF5KTsKKwkJd3JpdGViKDB4MTAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRGF0YTFEZWxheSk7CisJCXdyaXRldygwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENsb2NrU3BlZWQpOworCQl3cml0ZWIoMHg2MCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBEQVFPcHRpb25zKTsKKwl9CisKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCXdyaXRlbChjbWQtPnN0b3BfYXJnLAorCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBUcmFuc2Zlcl9Db3VudCk7CisJfSBlbHNlIHsKKwkJLyogWFhYICovCisJfQorCisjaWZkZWYgVVNFX0RNQQorCXdyaXRlYihDbGVhclByaW1hcnlUQyB8IENsZWFyU2Vjb25kYXJ5VEMsCisJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgR3JvdXBfMV9GaXJzdF9DbGVhcik7CisKKwl7CisJCWludCByZXR2YWwgPSBzZXR1cF9taXRlX2RtYShkZXYsIHMpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CisjZWxzZQorCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIERNQV9MaW5lX0NvbnRyb2xfR3JvdXAxKTsKKyNlbmRpZgorCXdyaXRlYigweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIERNQV9MaW5lX0NvbnRyb2xfR3JvdXAyKTsKKworCS8qIGNsZWFyIGFuZCBlbmFibGUgaW50ZXJydXB0cyAqLworCXdyaXRlYigweGZmLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEdyb3VwXzFfRmlyc3RfQ2xlYXIpOworCS8vd3JpdGViKENsZWFyRXhwaXJlZCxkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkcitHcm91cF8xX1NlY29uZF9DbGVhcik7CisKKwl3cml0ZWIoSW50RW4sIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgSW50ZXJydXB0X0NvbnRyb2wpOworCXdyaXRlYigweDAzLAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIE1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sKTsKKworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfTk9ORSkgeworCQlkZXZwcml2LT5PcE1vZGVCaXRzID0gRGF0YUxhdGNoaW5nKDApIHwgUnVuTW9kZSg3KTsKKwl9IGVsc2UgewkJLy8gVFJJR19USU1FUgorCQlkZXZwcml2LT5PcE1vZGVCaXRzID0gTnVtYmVyZWQgfCBSdW5Nb2RlKDcpOworCX0KKwlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19OT1cpIHsKKwkJLyogc3RhcnQgKi8KKwkJd3JpdGViKGRldnByaXYtPk9wTW9kZUJpdHMsCisJCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIE9wTW9kZSk7CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKiBUUklHX0lOVCAqLworCQlzLT5hc3luYy0+aW50dHJpZyA9IG5pX3BjaWRpb19pbnR0cmlnOworCX0KKworCURQUklOVEsoIm5pX3BjaWRpbzogY29tbWFuZCBzdGFydGVkXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXR1cF9taXRlX2RtYShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBuaV9wY2lkaW9fcmVxdWVzdF9kaV9taXRlX2NoYW5uZWwoZGV2KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJZGV2cHJpdi0+ZGlfbWl0ZV9jaGFuLT5kaXIgPSBDT01FRElfSU5QVVQ7CisKKwltaXRlX3ByZXBfZG1hKGRldnByaXYtPmRpX21pdGVfY2hhbiwgMzIsIDMyKTsKKworCW1pdGVfZG1hX2FybShkZXZwcml2LT5kaV9taXRlX2NoYW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX3BjaWRpb19pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pCit7CisJaWYgKHRyaWdudW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3cml0ZWIoZGV2cHJpdi0+T3BNb2RlQml0cywgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBPcE1vZGUpOworCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG5pX3BjaWRpb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl3cml0ZWIoMHgwMCwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBNYXN0ZXJfRE1BX0FuZF9JbnRlcnJ1cHRfQ29udHJvbCk7CisJbmlfcGNpZGlvX3JlbGVhc2VfZGlfbWl0ZV9jaGFubmVsKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9wY2lkaW9fY2hhbmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbWl0ZV9idWZfY2hhbmdlKGRldnByaXYtPmRpX21pdGVfcmluZywgcy0+YXN5bmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbWVtc2V0KHMtPmFzeW5jLT5wcmVhbGxvY19idWYsIDB4YWEsIHMtPmFzeW5jLT5wcmVhbGxvY19idWZzeik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2lfNjUzNF9sb2FkX2ZwZ2Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBmcGdhX2luZGV4LCB1OCAqIGRhdGEsCisJaW50IGRhdGFfbGVuKQoreworCXN0YXRpYyBjb25zdCBpbnQgdGltZW91dCA9IDEwMDA7CisJaW50IGksIGo7CisJd3JpdGV3KDB4ODAgfCBmcGdhX2luZGV4LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpcm13YXJlX0NvbnRyb2xfUmVnaXN0ZXIpOworCXdyaXRldygweGMwIHwgZnBnYV9pbmRleCwKKwkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaXJtd2FyZV9Db250cm9sX1JlZ2lzdGVyKTsKKwlmb3IgKGkgPSAwOworCQkocmVhZHcoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKworCQkJCUZpcm13YXJlX1N0YXR1c19SZWdpc3RlcikgJiAweDIpID09IDAKKwkJJiYgaSA8IHRpbWVvdXQ7ICsraSkgeworCQl1ZGVsYXkoMSk7CisJfQorCWlmIChpID09IHRpbWVvdXQpIHsKKwkJcHJpbnRrKCJuaV9wY2lkaW86IGZhaWxlZCB0byBsb2FkIGZwZ2EgJWksIHdhaXRpbmcgZm9yIHN0YXR1cyAweDJcbiIsIGZwZ2FfaW5kZXgpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJd3JpdGV3KDB4ODAgfCBmcGdhX2luZGV4LAorCQlkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpcm13YXJlX0NvbnRyb2xfUmVnaXN0ZXIpOworCWZvciAoaSA9IDA7CisJCXJlYWR3KGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmlybXdhcmVfU3RhdHVzX1JlZ2lzdGVyKSAhPQorCQkweDMgJiYgaSA8IHRpbWVvdXQ7ICsraSkgeworCQl1ZGVsYXkoMSk7CisJfQorCWlmIChpID09IHRpbWVvdXQpIHsKKwkJcHJpbnRrKCJuaV9wY2lkaW86IGZhaWxlZCB0byBsb2FkIGZwZ2EgJWksIHdhaXRpbmcgZm9yIHN0YXR1cyAweDNcbiIsIGZwZ2FfaW5kZXgpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZm9yIChqID0gMDsgaiArIDEgPCBkYXRhX2xlbjspIHsKKwkJdW5zaWduZWQgaW50IHZhbHVlID0gZGF0YVtqKytdOworCQl2YWx1ZSB8PSBkYXRhW2orK10gPDwgODsKKwkJd3JpdGV3KHZhbHVlLAorCQkJZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGaXJtd2FyZV9EYXRhX1JlZ2lzdGVyKTsKKwkJZm9yIChpID0gMDsKKwkJCShyZWFkdyhkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArCisJCQkJCUZpcm13YXJlX1N0YXR1c19SZWdpc3RlcikgJiAweDIpID09IDAKKwkJCSYmIGkgPCB0aW1lb3V0OyArK2kpIHsKKwkJCXVkZWxheSgxKTsKKwkJfQorCQlpZiAoaSA9PSB0aW1lb3V0KSB7CisJCQlwcmludGsoIm5pX3BjaWRpbzogZmFpbGVkIHRvIGxvYWQgd29yZCBpbnRvIGZwZ2EgJWlcbiIsCisJCQkJZnBnYV9pbmRleCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlpZiAobmVlZF9yZXNjaGVkKCkpCisJCQlzY2hlZHVsZSgpOworCX0KKwl3cml0ZXcoMHgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZpcm13YXJlX0NvbnRyb2xfUmVnaXN0ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaV82NTM0X3Jlc2V0X2ZwZ2Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBmcGdhX2luZGV4KQoreworCXJldHVybiBwY2lfNjUzNF9sb2FkX2ZwZ2EoZGV2LCBmcGdhX2luZGV4LCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludCBwY2lfNjUzNF9yZXNldF9mcGdhcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgcmV0OworCWludCBpOworCXdyaXRldygweDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmlybXdhcmVfQ29udHJvbF9SZWdpc3Rlcik7CisJZm9yIChpID0gMDsgaSA8IDM7ICsraSkgeworCQlyZXQgPSBwY2lfNjUzNF9yZXNldF9mcGdhKGRldiwgaSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJfQorCXdyaXRldygweDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRmlybXdhcmVfTWFza19SZWdpc3Rlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGNpXzY1MzRfaW5pdF9tYWluX2ZwZ2Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJd3JpdGVsKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRlBHQV9Db250cm9sMV9SZWdpc3Rlcik7CisJd3JpdGVsKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRlBHQV9Db250cm9sMl9SZWdpc3Rlcik7CisJd3JpdGVsKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRlBHQV9TQ0FMU19Db3VudGVyX1JlZ2lzdGVyKTsKKwl3cml0ZWwoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBGUEdBX1NDQU1TX0NvdW50ZXJfUmVnaXN0ZXIpOworCXdyaXRlbCgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEZQR0FfU0NCTFNfQ291bnRlcl9SZWdpc3Rlcik7CisJd3JpdGVsKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgRlBHQV9TQ0JNU19Db3VudGVyX1JlZ2lzdGVyKTsKK30KKworc3RhdGljIGludCBwY2lfNjUzNF91cGxvYWRfZmlybXdhcmUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBvcHRpb25zW10pCit7CisJaW50IHJldDsKKwl2b2lkICptYWluX2ZwZ2FfZGF0YSwgKnNjYXJhYl9hX2RhdGEsICpzY2FyYWJfYl9kYXRhOworCWludCBtYWluX2ZwZ2FfZGF0YV9sZW4sIHNjYXJhYl9hX2RhdGFfbGVuLCBzY2FyYWJfYl9kYXRhX2xlbjsKKworCWlmIChvcHRpb25zW0NPTUVESV9ERVZDT05GX0FVWF9EQVRBX0xFTkdUSF0gPT0gMCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gcGNpXzY1MzRfcmVzZXRfZnBnYXMoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwltYWluX2ZwZ2FfZGF0YSA9IGNvbWVkaV9hdXhfZGF0YShvcHRpb25zLCAwKTsKKwltYWluX2ZwZ2FfZGF0YV9sZW4gPSBvcHRpb25zW0NPTUVESV9ERVZDT05GX0FVWF9EQVRBMF9MRU5HVEhdOworCXJldCA9IHBjaV82NTM0X2xvYWRfZnBnYShkZXYsIDIsIG1haW5fZnBnYV9kYXRhLCBtYWluX2ZwZ2FfZGF0YV9sZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXBjaV82NTM0X2luaXRfbWFpbl9mcGdhKGRldik7CisJc2NhcmFiX2FfZGF0YSA9IGNvbWVkaV9hdXhfZGF0YShvcHRpb25zLCAxKTsKKwlzY2FyYWJfYV9kYXRhX2xlbiA9IG9wdGlvbnNbQ09NRURJX0RFVkNPTkZfQVVYX0RBVEExX0xFTkdUSF07CisJcmV0ID0gcGNpXzY1MzRfbG9hZF9mcGdhKGRldiwgMCwgc2NhcmFiX2FfZGF0YSwgc2NhcmFiX2FfZGF0YV9sZW4pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXNjYXJhYl9iX2RhdGEgPSBjb21lZGlfYXV4X2RhdGEob3B0aW9ucywgMik7CisJc2NhcmFiX2JfZGF0YV9sZW4gPSBvcHRpb25zW0NPTUVESV9ERVZDT05GX0FVWF9EQVRBMl9MRU5HVEhdOworCXJldCA9IHBjaV82NTM0X2xvYWRfZnBnYShkZXYsIDEsIHNjYXJhYl9iX2RhdGEsIHNjYXJhYl9iX2RhdGFfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaWRpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGk7CisJaW50IHJldDsKKwlpbnQgbl9zdWJkZXZpY2VzOworCXVuc2lnbmVkIGludCBpcnE7CisKKwlwcmludGsoImNvbWVkaSVkOiBuaWRpbzoiLCBkZXYtPm1pbm9yKTsKKworCWlmICgocmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgbmlkaW85Nl9wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlzcGluX2xvY2tfaW5pdCgmZGV2cHJpdi0+bWl0ZV9jaGFubmVsX2xvY2spOworCisJcmV0ID0gbmlkaW9fZmluZF9kZXZpY2UoZGV2LCBpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbWl0ZV9zZXR1cChkZXZwcml2LT5taXRlKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoImVycm9yIHNldHRpbmcgdXAgbWl0ZVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCWNvbWVkaV9zZXRfaHdfZGV2KGRldiwgJmRldnByaXYtPm1pdGUtPnBjaWRldi0+ZGV2KTsKKwlkZXZwcml2LT5kaV9taXRlX3JpbmcgPSBtaXRlX2FsbG9jX3JpbmcoZGV2cHJpdi0+bWl0ZSk7CisJaWYgKGRldnByaXYtPmRpX21pdGVfcmluZyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisJaXJxID0gbWl0ZV9pcnEoZGV2cHJpdi0+bWl0ZSk7CisJcHJpbnRrKCIgJXMiLCBkZXYtPmJvYXJkX25hbWUpOworCWlmICh0aGlzX2JvYXJkLT51c2VzX2Zpcm13YXJlKSB7CisJCXJldCA9IHBjaV82NTM0X3VwbG9hZF9maXJtd2FyZShkZXYsIGl0LT5vcHRpb25zKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoIXRoaXNfYm9hcmQtPmlzX2Rpb2RhcSkgeworCQluX3N1YmRldmljZXMgPSB0aGlzX2JvYXJkLT5uXzgyNTU7CisJfSBlbHNlIHsKKwkJbl9zdWJkZXZpY2VzID0gMTsKKwl9CisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZpY2VzKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCF0aGlzX2JvYXJkLT5pc19kaW9kYXEpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRoaXNfYm9hcmQtPm5fODI1NTsgaSsrKSB7CisJCQlzdWJkZXZfODI1NV9pbml0KGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSwKKwkJCQluaWRpbzk2XzgyNTVfY2IsCisJCQkJKHVuc2lnbmVkIGxvbmcpKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCQkJTklESU9fODI1NV9CQVNFKGkpKSk7CisJCX0KKwl9IGVsc2UgeworCisJCXByaW50aygiIHJldj0lZCIsCisJCQlyZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIENoaXBfVmVyc2lvbikpOworCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCisJCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCQlzLT5zdWJkZXZfZmxhZ3MgPQorCQkJU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0xTQU1QTCB8IFNERl9QQUNLRUQgfAorCQkJU0RGX0NNRF9SRUFEOworCQlzLT5uX2NoYW4gPSAzMjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmluc25fY29uZmlnID0gJm5pX3BjaWRpb19pbnNuX2NvbmZpZzsKKwkJcy0+aW5zbl9iaXRzID0gJm5pX3BjaWRpb19pbnNuX2JpdHM7CisJCXMtPmRvX2NtZCA9ICZuaV9wY2lkaW9fY21kOworCQlzLT5kb19jbWR0ZXN0ID0gJm5pX3BjaWRpb19jbWR0ZXN0OworCQlzLT5jYW5jZWwgPSAmbmlfcGNpZGlvX2NhbmNlbDsKKwkJcy0+bGVuX2NoYW5saXN0ID0gMzI7CS8qIFhYWCAqLworCQlzLT5idWZfY2hhbmdlID0gJm5pX3BjaWRpb19jaGFuZ2U7CisJCXMtPmFzeW5jX2RtYV9kaXIgPSBETUFfQklESVJFQ1RJT05BTDsKKworCQl3cml0ZWwoMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBQb3J0X0lPKDApKTsKKwkJd3JpdGVsKDAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgUG9ydF9QaW5fRGlyZWN0aW9ucygwKSk7CisJCXdyaXRlbCgwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIFBvcnRfUGluX01hc2soMCkpOworCisJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiBib2FyZCAqLworCQl3cml0ZWIoMHgwMCwKKwkJCWRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKKwkJCU1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sKTsKKworCQlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBuaWRpb19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJIm5pX3BjaWRpbyIsIGRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoIiBpcnEgbm90IGF2YWlsYWJsZSIpOworCQl9CisJCWRldi0+aXJxID0gaXJxOworCX0KKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pZGlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKworCWlmICh0aGlzX2JvYXJkICYmICF0aGlzX2JvYXJkLT5pc19kaW9kYXEpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRoaXNfYm9hcmQtPm5fODI1NTsgaSsrKSB7CisJCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSk7CisJCX0KKwl9CisKKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCWlmIChkZXZwcml2KSB7CisJCWlmIChkZXZwcml2LT5kaV9taXRlX3JpbmcpIHsKKwkJCW1pdGVfZnJlZV9yaW5nKGRldnByaXYtPmRpX21pdGVfcmluZyk7CisJCQlkZXZwcml2LT5kaV9taXRlX3JpbmcgPSBOVUxMOworCQl9CisJCWlmIChkZXZwcml2LT5taXRlKQorCQkJbWl0ZV91bnNldHVwKGRldnByaXYtPm1pdGUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaWRpb19maW5kX2RldmljZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGJ1cywgaW50IHNsb3QpCit7CisJc3RydWN0IG1pdGVfc3RydWN0ICptaXRlOworCWludCBpOworCisJZm9yIChtaXRlID0gbWl0ZV9kZXZpY2VzOyBtaXRlOyBtaXRlID0gbWl0ZS0+bmV4dCkgeworCQlpZiAobWl0ZS0+dXNlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoYnVzIHx8IHNsb3QpIHsKKwkJCWlmIChidXMgIT0gbWl0ZS0+cGNpZGV2LT5idXMtPm51bWJlciB8fAorCQkJCXNsb3QgIT0gUENJX1NMT1QobWl0ZS0+cGNpZGV2LT5kZXZmbikpCisJCQkJY29udGludWU7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG5fbmlkaW9fYm9hcmRzOyBpKyspIHsKKwkJCWlmIChtaXRlX2RldmljZV9pZChtaXRlKSA9PSBuaWRpb19ib2FyZHNbaV0uZGV2X2lkKSB7CisJCQkJZGV2LT5ib2FyZF9wdHIgPSBuaWRpb19ib2FyZHMgKyBpOworCQkJCWRldnByaXYtPm1pdGUgPSBtaXRlOworCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisJcHJpbnRrKCJubyBkZXZpY2UgZm91bmRcbiIpOworCW1pdGVfbGlzdF9kZXZpY2VzKCk7CisJcmV0dXJuIC1FSU87Cit9CisKK0NPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3BjaWRpbywgbmlfcGNpZGlvX3BjaV90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyYWJhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYwpAQCAtMCwwICsxLDE3ODggQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKKyAgICBIYXJkd2FyZSBkcml2ZXIgZm9yIE5JIFBDSS1NSU8gRSBzZXJpZXMgY2FyZHMKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTctOCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKy8qCitEcml2ZXI6IG5pX3BjaW1pbworRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIFBDSS1NSU8tRSBzZXJpZXMgYW5kIE0gc2VyaWVzIChhbGwgYm9hcmRzKQorQXV0aG9yOiBkcywgSm9obiBIYWxsZW4sIEZyYW5rIE1vcmkgSGVzcywgUm9sZiBNdWVsbGVyLCBIZXJiZXJ0IFBlcmVtYW5zLAorICBIZXJtYW4gQnJ1eW5pbmNreCwgVGVycnkgQmFybmFieQorU3RhdHVzOiB3b3JrcworRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBQQ0ktTUlPLTE2WEUtNTAgKG5pX3BjaW1pbyksCisgIFBDSS1NSU8tMTZYRS0xMCwgUFhJLTYwMzBFLCBQQ0ktTUlPLTE2RS0xLCBQQ0ktTUlPLTE2RS00LCBQQ0ktNjAxNCwgUENJLTYwNDBFLAorICBQWEktNjA0MEUsIFBDSS02MDMwRSwgUENJLTYwMzFFLCBQQ0ktNjAzMkUsIFBDSS02MDMzRSwgUENJLTYwNzFFLCBQQ0ktNjAyM0UsCisgIFBDSS02MDI0RSwgUENJLTYwMjVFLCBQWEktNjAyNUUsIFBDSS02MDM0RSwgUENJLTYwMzVFLCBQQ0ktNjA1MkUsCisgIFBDSS02MTEwLCBQQ0ktNjExMSwgUENJLTYyMjAsIFBDSS02MjIxLCBQQ0ktNjIyNCwgUFhJLTYyMjQsIFBDSS02MjI1LAorICBQQ0ktNjIyOSwgUENJLTYyNTAsIFBDSS02MjUxLCBQQ0llLTYyNTEsIFBDSS02MjU0LCBQQ0ktNjI1OSwgUENJZS02MjU5LAorICBQQ0ktNjI4MCwgUENJLTYyODEsIFBYSS02MjgxLCBQQ0ktNjI4NCwgUENJLTYyODksCisgIFBDSS02NzExLCBQWEktNjcxMSwgUENJLTY3MTMsIFBYSS02NzEzLAorICBQWEktNjA3MUUsIFBDSS02MDcwRSwgUFhJLTYwNzBFLAorICBQWEktNjA1MkUsIFBDSS02MDM2RSwgUENJLTY3MzEsIFBDSS02NzMzLCBQWEktNjczMywKKyAgUENJLTYxNDMsIFBYSS02MTQzCitVcGRhdGVkOiBXZWQsIDAzIERlYyAyMDA4IDEwOjUxOjQ3ICswMDAwCisKK1RoZXNlIGJvYXJkcyBhcmUgYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgQVQtTUlPIEUgc2VyaWVzLCBleGNlcHQgdGhhdAordGhleSB1c2UgdGhlIFBDSSBidXMgaW5zdGVhZCBvZiBJU0EgKGkuZS4sIEFUKS4gIFNlZSB0aGUgbm90ZXMgZm9yCit0aGUgbmlfYXRtaW8ubyBkcml2ZXIgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgYm9hcmRzLgorCitBdXRvY2FsaWJyYXRpb24gaXMgc3VwcG9ydGVkIG9uIG1hbnkgb2YgdGhlIGRldmljZXMsIHVzaW5nIHRoZQorY29tZWRpX2NhbGlicmF0ZSAob3IgY29tZWRpX3NvZnRfY2FsaWJyYXRlIGZvciBtLXNlcmllcykgdXRpbGl0eS4KK00tU2VyaWVzIGJvYXJkcyBkbyBhbmFsb2cgaW5wdXQgYW5kIGFuYWxvZyBvdXRwdXQgY2FsaWJyYXRpb24gZW50aXJlbHkKK2luIHNvZnR3YXJlLiBUaGUgc29mdHdhcmUgY2FsaWJyYXRpb24gY29ycmVjdHMKK3RoZSBhbmFsb2cgaW5wdXQgZm9yIG9mZnNldCwgZ2FpbiBhbmQKK25vbmxpbmVhcml0eS4gIFRoZSBhbmFsb2cgb3V0cHV0cyBhcmUgY29ycmVjdGVkIGZvciBvZmZzZXQgYW5kIGdhaW4uCitTZWUgdGhlIGNvbWVkaWxpYiBkb2N1bWVudGF0aW9uIG9uIGNvbWVkaV9nZXRfc29mdGNhbF9jb252ZXJ0ZXIoKSBmb3IKK21vcmUgaW5mb3JtYXRpb24uCisKK0J5IGRlZmF1bHQsIHRoZSBkcml2ZXIgdXNlcyBETUEgdG8gdHJhbnNmZXIgYW5hbG9nIGlucHV0IGRhdGEgdG8KK21lbW9yeS4gIFdoZW4gRE1BIGlzIGVuYWJsZWQsIG5vdCBhbGwgdHJpZ2dlcmluZyBmZWF0dXJlcyBhcmUKK3N1cHBvcnRlZC4KKworRGlnaXRhbCBJL08gbWF5IG5vdCB3b3JrIG9uIDY3M3guCisKK05vdGUgdGhhdCB0aGUgUENJLTYxNDMgaXMgYSBzaW11bHRhaW5lb3VzIHNhbXBsaW5nIGRldmljZSB3aXRoIDggY29udmVydG9ycy4KK1dpdGggdGhpcyBib2FyZCBhbGwgb2YgdGhlIGNvbnZlcnRvcnMgcGVyZm9ybSBvbmUgc2ltdWx0YWluZW91cyBzYW1wbGUgZHVyaW5nCithIHNjYW4gaW50ZXJ2YWwuIFRoZSBwZXJpb2QgZm9yIGEgc2NhbiBpcyB1c2VkIGZvciB0aGUgY29udmVydCB0aW1lIGluIGEKK0NvbWVkaSBjbWQuIFRoZSBjb252ZXJ0IHRyaWdnZXIgc291cmNlIGlzIG5vcm1hbGx5IHNldCB0byBUUklHX05PVyBieSBkZWZhdWx0LgorCitUaGUgUlRTSSB0cmlnZ2VyIGJ1cyBpcyBzdXBwb3J0ZWQgb24gdGhlc2UgY2FyZHMgb24KK3N1YmRldmljZSAxMC4gU2VlIHRoZSBjb21lZGlsaWIgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworSW5mb3JtYXRpb24gKG51bWJlciBvZiBjaGFubmVscywgYml0cywgZXRjLikgZm9yIHNvbWUgZGV2aWNlcyBtYXkgYmUKK2luY29ycmVjdC4gIFBsZWFzZSBjaGVjayB0aGlzIGFuZCBzdWJtaXQgYSBidWcgaWYgdGhlcmUgYXJlIHByb2JsZW1zCitmb3IgeW91ciBkZXZpY2UuCisKK1NDWEkgaXMgcHJvYmFibHkgYnJva2VuIGZvciBtLXNlcmllcyBib2FyZHMuCisKK0J1Z3M6CisgLSBXaGVuIERNQSBpcyBlbmFibGVkLCBDT01FRElfRVZfQ09OVkVSVCBkb2VzCisgICBub3Qgd29yayBjb3JyZWN0bHkuCisKKyovCisvKgorCVRoZSBQQ0ktTUlPIEUgc2VyaWVzIGRyaXZlciB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5CisJVG9tYXN6IE1vdHlsZXdza2kgPC4uLj4sIGFuZCBwb3J0ZWQgdG8gY29tZWRpIGJ5IGRzLgorCisJUmVmZXJlbmNlczoKKworCSAgIDM0MTA3OWIucGRmICBQQ0kgRSBTZXJpZXMgUmVnaXN0ZXItTGV2ZWwgUHJvZ3JhbW1lciBNYW51YWwKKwkgICAzNDA5MzRiLnBkZiAgREFRLVNUQyByZWZlcmVuY2UgbWFudWFsCisKKwkgICAzMjIwODBiLnBkZiAgNjcxMS82NzEzLzY3MTUgVXNlciBNYW51YWwKKworCSAgIDMyMDk0NWMucGRmICBQQ0kgRSBTZXJpZXMgVXNlciBNYW51YWwKKwkgICAzMjIxMzhhLnBkZiAgUENJLTYwNTJFIGFuZCBEQVFQYWQtNjA1MkUgVXNlciBNYW51YWwKKworCUlTU1VFUzoKKworCW5lZWQgdG8gZGVhbCB3aXRoIGV4dGVybmFsIHJlZmVyZW5jZSBmb3IgREFDLCBhbmQgb3RoZXIgREFDCisJcHJvcGVydGllcyBpbiBib2FyZCBwcm9wZXJ0aWVzCisKKwlkZWFsIHdpdGggYXQtbWlvLTE2ZGUtMTAgcmV2aXNpb24gRCB0byBOIGNoYW5nZXMsIGV0Yy4KKworCW5lZWQgdG8gYWRkIG90aGVyIENBTERBQyB0eXBlCisKKwluZWVkIHRvIHNsb3cgZG93biBEQUMgbG9hZGluZy4gIEkgZG9uJ3QgdHJ1c3QgTkkncyBjbGFpbSB0aGF0CisJdHdvIHdyaXRlcyB0byB0aGUgUENJIGJ1cyBzbG93cyBJTyBlbm91Z2guICBJIHdvdWxkIHByZWZlciB0bworCXVzZSBjb21lZGlfdWRlbGF5KCkuICBUaW1pbmcgc3BlY3M6IChjbG9jaykKKwkJQUQ4NTIyCQkzMG5zCisJCURBQzgwNDMJCTEyMG5zCisJCURBQzg4MDAJCTYwbnMKKwkJTUI4ODM0MQkJPworCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgIm5pX3N0Yy5oIgorI2luY2x1ZGUgIm1pdGUuaCIKKworLy8jZGVmaW5lIFBDSV9ERUJVRworCisjZGVmaW5lIFBDSURNQQorCisjZGVmaW5lIFBDSU1JTyAxCisjdW5kZWYgQVRNSU8KKworI2RlZmluZSBNQVhfTl9DQUxEQUNTICgxNisxNisyKQorCisjZGVmaW5lIERSVl9OQU1FICJuaV9wY2ltaW8iCisKKy8qIFRoZSBmb2xsb3dpbmcgdHdvIHRhYmxlcyBtdXN0IGJlIGluIHRoZSBzYW1lIG9yZGVyICovCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobmlfcGNpX3RhYmxlKSA9IHsKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDAxNjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTE3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMTgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDExOTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTFiMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMWMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDExZDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTI3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxMzMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDEzNDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTM1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxNGUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE0ZjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTU4MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxNWIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE4ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTg3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgxOGIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDE4YzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MjQxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyNDIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDI0MzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4Mjg5MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyOGMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJhNjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MmE3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyYTgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJhYjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MmI4MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHgyYjkwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDJjODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MmNhMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGFhLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYWIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBhYywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGFmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBiNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGI2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYjcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBiOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGJjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwYmQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzBiZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MGMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcwZjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzEwZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTZjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7UENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDcxN2YsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXtQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4NzFiYywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfTkFUSU5TVCwgMHg3MTdkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuaV9wY2lfdGFibGUpOworCisvKiBUaGVzZSBhcmUgbm90IGFsbCB0aGUgcG9zc2libGUgYW8gcmFuZ2VzIGZvciA2Mjh4IGJvYXJkcy4KKyBUaGV5IGNhbiBkbyBPRkZTRVQgKy0gUkVGRVJFTkNFIHdoZXJlIE9GRlNFVCBjYW4gYmUKKyAwViwgNVYsIEFQRkk8MCwxPiwgb3IgQU88MC4uLjM+IGFuZCBSQU5HRSBjYW4KKyBiZSAxMFYsIDVWLCAyViwgMVYsIEFQRkk8MCwxPiwgQU88MC4uLjM+LiAgVGhhdCdzCisgNjMgZGlmZmVyZW50IHBvc3NpYmlsaXRpZXMuICBBbiBBTyBjaGFubmVsCisgY2FuIG5vdCBhY3QgYXMgaXQncyBvd24gT0ZGU0VUIG9yIFJFRkVSRU5DRS4KKyovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfTV82Mjh4X2FvID0geyA4LCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFKC0yLCAyKSwKKwkJCVJBTkdFKC0xLCAxKSwKKwkJCVJBTkdFKC01LCAxNSksCisJCQlSQU5HRSgwLCAxMCksCisJCQlSQU5HRSgzLCA3KSwKKwkJCVJBTkdFKDQsIDYpLAorCQkJUkFOR0VfZXh0KC0xLCAxKQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfbmlfTV82MjV4X2FvID0geyAzLCB7CisJCQlSQU5HRSgtMTAsIDEwKSwKKwkJCVJBTkdFKC01LCA1KSwKKwkJCVJBTkdFX2V4dCgtMSwgMSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX25pX01fNjIyeF9hbyA9IHsgMSwgeworCQkJUkFOR0UoLTEwLCAxMCksCisJfQorfTsKKworc3RhdGljIGNvbnN0IG5pX2JvYXJkIG5pX2JvYXJkc1tdID0geworCXsKKwkJCS5kZXZpY2VfaWQgPSAweDAxNjIsCS8vIE5JIGFsc28gc2F5cyAweDE2MjAuICB0eXBvPworCQkJLm5hbWUgPSAicGNpLW1pby0xNnhlLTUwIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzgsCisJCQkuYWlfc3BlZWQgPSA1MDAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDUwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtkYWM4ODAwLCBkYWM4MDQzfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MTE3MCwKKwkJCS5uYW1lID0gInBjaS1taW8tMTZ4ZS0xMCIsCS8vIGFrYSBwY2ktNjAzMEUKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTQsCisJCQkuYWlfc3BlZWQgPSAxMDAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2RhYzg4MDAsIGRhYzgwNDMsIGFkODUyMn0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDI4YzAsCisJCQkubmFtZSA9ICJwY2ktNjAxNCIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzQsCisJCQkuYWlfc3BlZWQgPSA1MDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMTAwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxMWQwLAorCQkJLm5hbWUgPSAicHhpLTYwMzBlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTQsCisJCQkuYWlfc3BlZWQgPSAxMDAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2RhYzg4MDAsIGRhYzgwNDMsIGFkODUyMn0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDExODAsCisJCQkubmFtZSA9ICJwY2ktbWlvLTE2ZS0xIiwJLyogYWthIHBjaS02MDcwZSAqLworCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNiwKKwkJCS5haV9zcGVlZCA9IDgwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7bWI4ODM0MX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDExOTAsCisJCQkubmFtZSA9ICJwY2ktbWlvLTE2ZS00IiwJLyogYWthIHBjaS02MDQwZSAqLworCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNiwKKwkJCS8qIE5vdGU6IHRoZXJlIGhhdmUgYmVlbiByZXBvcnRlZCBwcm9ibGVtcyB3aXRoIGZ1bGwgc3BlZWQKKwkJCSAqIG9uIHRoaXMgYm9hcmQgKi8KKwkJCS5haV9zcGVlZCA9IDIwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwJLy8gZG9jIHNheXMgbWI4ODM0MQorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxMWMwLAorCQkJLm5hbWUgPSAicHhpLTYwNDBlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTYsCisJCQkuYWlfc3BlZWQgPSAyMDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxMiwKKwkJCS5hb19maWZvX2RlcHRoID0gNTEyLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge21iODgzNDF9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKworCXsKKwkJCS5kZXZpY2VfaWQgPSAweDEzMzAsCisJCQkubmFtZSA9ICJwY2ktNjAzMWUiLAorCQkJLm5fYWRjaGFuID0gNjQsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNCwKKwkJCS5haV9zcGVlZCA9IDEwMDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gMjA0OCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9FX2FvX2V4dCwKKwkJCS5hb191bmlwb2xhciA9IDEsCisJCQkuYW9fc3BlZWQgPSAxMDAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7ZGFjODgwMCwgZGFjODA0MywgYWQ4NTIyfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MTI3MCwKKwkJCS5uYW1lID0gInBjaS02MDMyZSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzE0LAorCQkJLmFpX3NwZWVkID0gMTAwMDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtkYWM4ODAwLCBkYWM4MDQzLCBhZDg1MjJ9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxMzQwLAorCQkJLm5hbWUgPSAicGNpLTYwMzNlIiwKKwkJCS5uX2FkY2hhbiA9IDY0LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTQsCisJCQkuYWlfc3BlZWQgPSAxMDAwMCwKKwkJCS5uX2FvY2hhbiA9IDAsCisJCQkuYW9iaXRzID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2RhYzg4MDAsIGRhYzgwNDMsIGFkODUyMn0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDEzNTAsCisJCQkubmFtZSA9ICJwY2ktNjA3MWUiLAorCQkJLm5fYWRjaGFuID0gNjQsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNiwKKwkJCS5haV9zcGVlZCA9IDgwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MmE2MCwKKwkJCS5uYW1lID0gInBjaS02MDIzZSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxMiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDAsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzQsCisJCQkuYWlfc3BlZWQgPSA1MDAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwJLyogbWFudWFsIGlzIHdyb25nICovCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDJhNzAsCisJCQkubmFtZSA9ICJwY2ktNjAyNGUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl80LAorCQkJLmFpX3NwZWVkID0gNTAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwJLyogbWFudWFsIGlzIHdyb25nICovCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDJhODAsCisJCQkubmFtZSA9ICJwY2ktNjAyNWUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl80LAorCQkJLmFpX3NwZWVkID0gNTAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwJLyogbWFudWFsIGlzIHdyb25nICovCisJCQkuaGFzXzgyNTUgPSAxLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDJhYjAsCisJCQkubmFtZSA9ICJweGktNjAyNWUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl80LAorCQkJLmFpX3NwZWVkID0gNTAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAkvKiBtYW51YWwgaXMgd3JvbmcgKi8KKwkJCS5oYXNfODI1NSA9IDEsCisJCX0sCisKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgyY2EwLAorCQkJLm5hbWUgPSAicGNpLTYwMzRlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNCwKKwkJCS5haV9zcGVlZCA9IDUwMDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgyYzgwLAorCQkJLm5hbWUgPSAicGNpLTYwMzVlIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNCwKKwkJCS5haV9zcGVlZCA9IDUwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fc3BlZWQgPSAxMDAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDE4YjAsCisJCQkubmFtZSA9ICJwY2ktNjA1MmUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNiwKKwkJCS5haV9zcGVlZCA9IDMwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19maWZvX2RlcHRoID0gMjA0OCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9FX2FvX2V4dCwKKwkJCS5hb19zcGVlZCA9IDMwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1ZywgYWQ4ODA0X2RlYnVnLCBhZDg1MjJ9LAkvKiBtYW51YWwgaXMgd3JvbmcgKi8KKwkJfSwKKwl7LmRldmljZV9pZCA9IDB4MTRlMCwKKwkJCS5uYW1lID0gInBjaS02MTEwIiwKKwkJCS5uX2FkY2hhbiA9IDQsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDgxOTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjExeCwKKwkJCS5haV9zcGVlZCA9IDIwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjExeCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3NwZWVkID0gMjUwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDQsIGFkODgwNH0sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MTRmMCwKKwkJCS5uYW1lID0gInBjaS02MTExIiwKKwkJCS5uX2FkY2hhbiA9IDIsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDgxOTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjExeCwKKwkJCS5haV9zcGVlZCA9IDIwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjExeCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3NwZWVkID0gMjUwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDQsIGFkODgwNH0sCisJCX0sCisjaWYgMAorCS8qIFRoZSA2MTE1IGJvYXJkcyBwcm9iYWJseSBuZWVkIHRoZWlyIG93biBkcml2ZXIgKi8KKwl7CisJCQkuZGV2aWNlX2lkID0gMHgyZWQwLAorCQkJLm5hbWUgPSAicGNpLTYxMTUiLAorCQkJLm5fYWRjaGFuID0gNCwKKwkJCS5hZGJpdHMgPSAxMiwKKwkJCS5haV9maWZvX2RlcHRoID0gODE5MiwKKwkJCS5hbHdheXNkaXRoZXIgPSAwLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MTF4LAorCQkJLmFpX3NwZWVkID0gMTAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb182NzF4ID0gMSwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fc3BlZWQgPSAyNTAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnXzYxMXggPSAxLAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1ZywgYWQ4ODA0X2RlYnVnfSwJLyogWFhYICovCisJCX0sCisjZW5kaWYKKyNpZiAwCisJeworCQkJLmRldmljZV9pZCA9IDB4MDAwMCwKKwkJCS5uYW1lID0gInB4aS02MTE1IiwKKwkJCS5uX2FkY2hhbiA9IDQsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDgxOTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjExeCwKKwkJCS5haV9zcGVlZCA9IDEwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fNjcxeCA9IDEsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3NwZWVkID0gMjUwLAorCQkJLnJlZ182MTF4ID0gMSwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCWNhbGRhYyA9IHthZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1ZywgYWQ4ODA0X2RlYnVnfSwJLyogWFhYICovCisJCX0sCisjZW5kaWYKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxODgwLAorCQkJLm5hbWUgPSAicGNpLTY3MTEiLAorCQkJLm5fYWRjaGFuID0gMCwJLyogbm8gYW5hbG9nIGlucHV0ICovCisJCQkubl9hb2NoYW4gPSA0LAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMTYzODQsCisJCQkvKiBkYXRhIHNoZWV0IHNheXMgODE5MiwgYnV0IGZpZm8gcmVhbGx5IGhvbGRzIDE2Mzg0IHNhbXBsZXMgKi8KKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fc3BlZWQgPSAxMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzY3MTEsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MmI5MCwKKwkJCS5uYW1lID0gInB4aS02NzExIiwKKwkJCS5uX2FkY2hhbiA9IDAsCS8qIG5vIGFuYWxvZyBpbnB1dCAqLworCQkJLm5fYW9jaGFuID0gNCwKKwkJCS5hb2JpdHMgPSAxMiwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDE2Mzg0LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjcxMSwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxODcwLAorCQkJLm5hbWUgPSAicGNpLTY3MTMiLAorCQkJLm5fYWRjaGFuID0gMCwJLyogbm8gYW5hbG9nIGlucHV0ICovCisJCQkubl9hb2NoYW4gPSA4LAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMTYzODQsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwLAorCQkJLmFvX3NwZWVkID0gMTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182NzEzLAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1Z30sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MmI4MCwKKwkJCS5uYW1lID0gInB4aS02NzEzIiwKKwkJCS5uX2FkY2hhbiA9IDAsCS8qIG5vIGFuYWxvZyBpbnB1dCAqLworCQkJLm5fYW9jaGFuID0gOCwKKwkJCS5hb2JpdHMgPSAxMiwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDE2Mzg0LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjcxMywKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnLCBhZDg4MDRfZGVidWd9LAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDI0MzAsCisJCQkubmFtZSA9ICJwY2ktNjczMSIsCisJCQkubl9hZGNoYW4gPSAwLAkvKiBubyBhbmFsb2cgaW5wdXQgKi8KKwkJCS5uX2FvY2hhbiA9IDQsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkyLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjcxMSwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwKKwkJfSwKKyNpZiAwCQkJCS8qIG5lZWQgZGV2aWNlIGlkcyAqLworCXsKKwkJCS5kZXZpY2VfaWQgPSAweDAsCisJCQkubmFtZSA9ICJweGktNjczMSIsCisJCQkubl9hZGNoYW4gPSAwLAkvKiBubyBhbmFsb2cgaW5wdXQgKi8KKwkJCS5uX2FvY2hhbiA9IDQsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkyLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182NzExLAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAorCQl9LAorI2VuZGlmCisJeworCQkJLmRldmljZV9pZCA9IDB4MjQxMCwKKwkJCS5uYW1lID0gInBjaS02NzMzIiwKKwkJCS5uX2FkY2hhbiA9IDAsCS8qIG5vIGFuYWxvZyBpbnB1dCAqLworCQkJLm5fYW9jaGFuID0gOCwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDE2Mzg0LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIxMCwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjcxMywKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnLCBhZDg4MDRfZGVidWd9LAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDI0MjAsCisJCQkubmFtZSA9ICJweGktNjczMyIsCisJCQkubl9hZGNoYW4gPSAwLAkvKiBubyBhbmFsb2cgaW5wdXQgKi8KKwkJCS5uX2FvY2hhbiA9IDgsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAxNjM4NCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fc3BlZWQgPSAxMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzY3MTMsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1ZywgYWQ4ODA0X2RlYnVnfSwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxNWIwLAorCQkJLm5hbWUgPSAicHhpLTYwNzFlIiwKKwkJCS5uX2FkY2hhbiA9IDY0LAorCQkJLmFkYml0cyA9IDEyLAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTYsCisJCQkuYWlfc3BlZWQgPSA4MDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDEyLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDEwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1Z30sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDExYjAsCisJCQkubmFtZSA9ICJweGktNjA3MGUiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTIsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS5hbHdheXNkaXRoZXIgPSAxLAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl8xNiwKKwkJCS5haV9zcGVlZCA9IDgwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTIsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7YWQ4ODA0X2RlYnVnfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4MThjMCwKKwkJCS5uYW1lID0gInB4aS02MDUyZSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzE2LAorCQkJLmFpX3NwZWVkID0gMzAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAyMDQ4LAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX0VfYW9fZXh0LAorCQkJLmFvX3NwZWVkID0gMzAwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7bWI4ODM0MSwgbWI4ODM0MSwgYWQ4NTIyfSwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHgxNTgwLAorCQkJLm5hbWUgPSAicHhpLTYwMzFlIiwKKwkJCS5uX2FkY2hhbiA9IDY0LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA1MTIsCisJCQkuYWx3YXlzZGl0aGVyID0gMSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fMTQsCisJCQkuYWlfc3BlZWQgPSAxMDAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDIwNDgsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfRV9hb19leHQsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMTAwMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2RhYzg4MDAsIGRhYzgwNDMsIGFkODUyMn0sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4Mjg5MCwKKwkJCS5uYW1lID0gInBjaS02MDM2ZSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNTEyLAorCQkJLmFsd2F5c2RpdGhlciA9IDEsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzQsCisJCQkuYWlfc3BlZWQgPSA1MDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTAsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMTAwMDAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWd9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGIwLAorCQkJLm5hbWUgPSAicGNpLTYyMjAiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDUxMiwKKwkJCS8vRklYTUU6ICBndWVzcworCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MjJ4LAorCQkJLmFpX3NwZWVkID0gNDAwMCwKKwkJCS5uX2FvY2hhbiA9IDAsCisJCQkuYW9iaXRzID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjJ4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGFmLAorCQkJLm5hbWUgPSAicGNpLTYyMjEiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDQwOTUsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyMngsCisJCQkuYWlfc3BlZWQgPSA0MDAwLAorCQkJLm5fYW9jaGFuID0gMiwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gODE5MSwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9NXzYyMnhfYW8sCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjIyeCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fc3BlZWQgPSAxMjAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcxYmMsCisJCQkubmFtZSA9ICJwY2ktNjIyMV8zN3BpbiIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjIyeCwKKwkJCS5haV9zcGVlZCA9IDQwMDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX01fNjIyeF9hbywKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjJ4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDEyMDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBmMiwKKwkJCS5uYW1lID0gInBjaS02MjI0IiwKKwkJCS5uX2FkY2hhbiA9IDMyLAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MjJ4LAorCQkJLmFpX3NwZWVkID0gNDAwMCwKKwkJCS5uX2FvY2hhbiA9IDAsCisJCQkuYW9iaXRzID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjJ4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gMzIsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBmMywKKwkJCS5uYW1lID0gInB4aS02MjI0IiwKKwkJCS5uX2FkY2hhbiA9IDMyLAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MjJ4LAorCQkJLmFpX3NwZWVkID0gNDAwMCwKKwkJCS5uX2FvY2hhbiA9IDAsCisJCQkuYW9iaXRzID0gMCwKKwkJCS5hb19maWZvX2RlcHRoID0gMCwKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjJ4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gMzIsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzE2YywKKwkJCS5uYW1lID0gInBjaS02MjI1IiwKKwkJCS5uX2FkY2hhbiA9IDgwLAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MjJ4LAorCQkJLmFpX3NwZWVkID0gNDAwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjJ4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyMngsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMTIwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gMzIsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBhYSwKKwkJCS5uYW1lID0gInBjaS02MjI5IiwKKwkJCS5uX2FkY2hhbiA9IDMyLAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82MjJ4LAorCQkJLmFpX3NwZWVkID0gNDAwMCwKKwkJCS5uX2FvY2hhbiA9IDQsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjJ4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyMngsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMTIwMCwKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gMzIsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBiNCwKKwkJCS5uYW1lID0gInBjaS02MjUwIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82Mjh4LAorCQkJLmFpX3NwZWVkID0gODAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyNXgsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwYjgsCisJCQkubmFtZSA9ICJwY2ktNjI1MSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjI4eCwKKwkJCS5haV9zcGVlZCA9IDgwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjV4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyNXgsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMzU3LAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcxN2QsCisJCQkubmFtZSA9ICJwY2llLTYyNTEiLAorCQkJLm5fYWRjaGFuID0gMTYsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDQwOTUsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyOHgsCisJCQkuYWlfc3BlZWQgPSA4MDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX01fNjI1eF9hbywKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182MjV4LAorCQkJLmFvX3VuaXBvbGFyID0gMCwKKwkJCS5hb19zcGVlZCA9IDM1NywKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGI3LAorCQkJLm5hbWUgPSAicGNpLTYyNTQiLAorCQkJLm5fYWRjaGFuID0gMzIsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDQwOTUsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyOHgsCisJCQkuYWlfc3BlZWQgPSA4MDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjI1eCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDMyLAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwYWIsCisJCQkubmFtZSA9ICJwY2ktNjI1OSIsCisJCQkubl9hZGNoYW4gPSAzMiwKKwkJCS5hZGJpdHMgPSAxNiwKKwkJCS5haV9maWZvX2RlcHRoID0gNDA5NSwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjI4eCwKKwkJCS5haV9zcGVlZCA9IDgwMCwKKwkJCS5uX2FvY2hhbiA9IDQsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82MjV4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyNXgsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX3NwZWVkID0gMzU3LAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSAzMiwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MTdmLAorCQkJLm5hbWUgPSAicGNpZS02MjU5IiwKKwkJCS5uX2FkY2hhbiA9IDMyLAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSA0MDk1LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82Mjh4LAorCQkJLmFpX3NwZWVkID0gODAwLAorCQkJLm5fYW9jaGFuID0gNCwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gODE5MSwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9NXzYyNXhfYW8sCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjI1eCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fc3BlZWQgPSAzNTcsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDMyLAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwYjYsCisJCQkubmFtZSA9ICJwY2ktNjI4MCIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxOCwKKwkJCS5haV9maWZvX2RlcHRoID0gMjA0NywKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjI4eCwKKwkJCS5haV9zcGVlZCA9IDE2MDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjI4eCwKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2NhbGRhY19ub25lfSwKKwkJCS5oYXNfODI1NSA9IDAsCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzBiZCwKKwkJCS5uYW1lID0gInBjaS02MjgxIiwKKwkJCS5uX2FkY2hhbiA9IDE2LAorCQkJLmFkYml0cyA9IDE4LAorCQkJLmFpX2ZpZm9fZGVwdGggPSAyMDQ3LAorCQkJLmdhaW5sa3VwID0gYWlfZ2Fpbl82Mjh4LAorCQkJLmFpX3NwZWVkID0gMTYwMCwKKwkJCS5uX2FvY2hhbiA9IDIsCisJCQkuYW9iaXRzID0gMTYsCisJCQkuYW9fZmlmb19kZXB0aCA9IDgxOTEsCisJCQkuYW9fcmFuZ2VfdGFibGUgPSAmcmFuZ2VfbmlfTV82Mjh4X2FvLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyOHgsCisJCQkuYW9fdW5pcG9sYXIgPSAxLAorCQkJLmFvX3NwZWVkID0gMzU3LAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwYmYsCisJCQkubmFtZSA9ICJweGktNjI4MSIsCisJCQkubl9hZGNoYW4gPSAxNiwKKwkJCS5hZGJpdHMgPSAxOCwKKwkJCS5haV9maWZvX2RlcHRoID0gMjA0NywKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjI4eCwKKwkJCS5haV9zcGVlZCA9IDE2MDAsCisJCQkubl9hb2NoYW4gPSAyLAorCQkJLmFvYml0cyA9IDE2LAorCQkJLmFvX2ZpZm9fZGVwdGggPSA4MTkxLAorCQkJLmFvX3JhbmdlX3RhYmxlID0gJnJhbmdlX25pX01fNjI4eF9hbywKKwkJCS5yZWdfdHlwZSA9IG5pX3JlZ182Mjh4LAorCQkJLmFvX3VuaXBvbGFyID0gMSwKKwkJCS5hb19zcGVlZCA9IDM1NywKKwkJCS5udW1fcDBfZGlvX2NoYW5uZWxzID0gOCwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGJjLAorCQkJLm5hbWUgPSAicGNpLTYyODQiLAorCQkJLm5fYWRjaGFuID0gMzIsCisJCQkuYWRiaXRzID0gMTgsCisJCQkuYWlfZmlmb19kZXB0aCA9IDIwNDcsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyOHgsCisJCQkuYWlfc3BlZWQgPSAxNjAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYyOHgsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSAzMiwKKwkJCS5jYWxkYWMgPSB7Y2FsZGFjX25vbmV9LAorCQkJLmhhc184MjU1ID0gMCwKKwkJfSwKKwl7CisJCQkuZGV2aWNlX2lkID0gMHg3MGFjLAorCQkJLm5hbWUgPSAicGNpLTYyODkiLAorCQkJLm5fYWRjaGFuID0gMzIsCisJCQkuYWRiaXRzID0gMTgsCisJCQkuYWlfZmlmb19kZXB0aCA9IDIwNDcsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYyOHgsCisJCQkuYWlfc3BlZWQgPSAxNjAwLAorCQkJLm5fYW9jaGFuID0gNCwKKwkJCS5hb2JpdHMgPSAxNiwKKwkJCS5hb19maWZvX2RlcHRoID0gODE5MSwKKwkJCS5hb19yYW5nZV90YWJsZSA9ICZyYW5nZV9uaV9NXzYyOHhfYW8sCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjI4eCwKKwkJCS5hb191bmlwb2xhciA9IDEsCisJCQkuYW9fc3BlZWQgPSAzNTcsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDMyLAorCQkJLmNhbGRhYyA9IHtjYWxkYWNfbm9uZX0sCisJCQkuaGFzXzgyNTUgPSAwLAorCQl9LAorCXsKKwkJCS5kZXZpY2VfaWQgPSAweDcwQzAsCisJCQkubmFtZSA9ICJwY2ktNjE0MyIsCisJCQkubl9hZGNoYW4gPSA4LAorCQkJLmFkYml0cyA9IDE2LAorCQkJLmFpX2ZpZm9fZGVwdGggPSAxMDI0LAorCQkJLmFsd2F5c2RpdGhlciA9IDAsCisJCQkuZ2FpbmxrdXAgPSBhaV9nYWluXzYxNDMsCisJCQkuYWlfc3BlZWQgPSA0MDAwLAorCQkJLm5fYW9jaGFuID0gMCwKKwkJCS5hb2JpdHMgPSAwLAorCQkJLnJlZ190eXBlID0gbmlfcmVnXzYxNDMsCisJCQkuYW9fdW5pcG9sYXIgPSAwLAorCQkJLmFvX2ZpZm9fZGVwdGggPSAwLAorCQkJLm51bV9wMF9kaW9fY2hhbm5lbHMgPSA4LAorCQkJLmNhbGRhYyA9IHthZDg4MDRfZGVidWcsIGFkODgwNF9kZWJ1Z30sCisJCX0sCisJeworCQkJLmRldmljZV9pZCA9IDB4NzEwRCwKKwkJCS5uYW1lID0gInB4aS02MTQzIiwKKwkJCS5uX2FkY2hhbiA9IDgsCisJCQkuYWRiaXRzID0gMTYsCisJCQkuYWlfZmlmb19kZXB0aCA9IDEwMjQsCisJCQkuYWx3YXlzZGl0aGVyID0gMCwKKwkJCS5nYWlubGt1cCA9IGFpX2dhaW5fNjE0MywKKwkJCS5haV9zcGVlZCA9IDQwMDAsCisJCQkubl9hb2NoYW4gPSAwLAorCQkJLmFvYml0cyA9IDAsCisJCQkucmVnX3R5cGUgPSBuaV9yZWdfNjE0MywKKwkJCS5hb191bmlwb2xhciA9IDAsCisJCQkuYW9fZmlmb19kZXB0aCA9IDAsCisJCQkubnVtX3AwX2Rpb19jaGFubmVscyA9IDgsCisJCQkuY2FsZGFjID0ge2FkODgwNF9kZWJ1ZywgYWQ4ODA0X2RlYnVnfSwKKwkJfSwKK307CisKKyNkZWZpbmUgbl9wY2ltaW9fYm9hcmRzICgoc2l6ZW9mKG5pX2JvYXJkcykvc2l6ZW9mKG5pX2JvYXJkc1swXSkpKQorCitzdGF0aWMgaW50IHBjaW1pb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2ltaW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNpbWlvID0geworCWRyaXZlcl9uYW1lOiBEUlZfTkFNRSwKKwltb2R1bGU6VEhJU19NT0RVTEUsCisJYXR0YWNoOnBjaW1pb19hdHRhY2gsCisJZGV0YWNoOnBjaW1pb19kZXRhY2gsCit9OworCitDT01FRElfUENJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2ltaW8sIG5pX3BjaV90YWJsZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworTklfUFJJVkFURV9DT01NT059IG5pX3ByaXZhdGU7CisjZGVmaW5lIGRldnByaXYgKChuaV9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKiBIb3cgd2UgYWNjZXNzIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIG5pX3dyaXRlbChhLGIpCSh3cml0ZWwoKGEpLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIChiKSkpCisjZGVmaW5lIG5pX3JlYWRsKGEpCShyZWFkbChkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIChhKSkpCisjZGVmaW5lIG5pX3dyaXRldyhhLGIpCSh3cml0ZXcoKGEpLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIChiKSkpCisjZGVmaW5lIG5pX3JlYWR3KGEpCShyZWFkdyhkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIChhKSkpCisjZGVmaW5lIG5pX3dyaXRlYihhLGIpCSh3cml0ZWIoKGEpLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIChiKSkpCisjZGVmaW5lIG5pX3JlYWRiKGEpCShyZWFkYihkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIChhKSkpCisKKy8qIEhvdyB3ZSBhY2Nlc3MgU1RDIHJlZ2lzdGVycyAqLworCisvKiBXZSBhdXRvbWF0aWNhbGx5IHRha2UgYWR2YW50YWdlIG9mIFNUQyByZWdpc3RlcnMgdGhhdCBjYW4gYmUKKyAqIHJlYWQvd3JpdHRlbiBkaXJlY3RseSBpbiB0aGUgSS9PIHNwYWNlIG9mIHRoZSBib2FyZC4gIE1vc3QKKyAqIFBDSU1JTyBkZXZpY2VzIG1hcCB0aGUgbG93IDggU1RDIHJlZ2lzdGVycyB0byBpb2Jhc2UrYWRkcioyLgorICogVGhlIDYxMXggZGV2aWNlcyBtYXAgdGhlIHdyaXRlIHJlZ2lzdGVycyB0byBpb2Jhc2UrYWRkcioyLCBhbmQKKyAqIHRoZSByZWFkIHJlZ2lzdGVycyB0byBpb2Jhc2UrKGFkZHItMSkqMi4gKi8KKy8qIEhvd2V2ZXIsIHRoZSA2MTF4IGJvYXJkcyBzdGlsbCBhcmVuJ3Qgd29ya2luZywgc28gSSdtIGRpc2FibGluZworICogbm9uLXdpbmRvd2VkIFNUQyBhY2Nlc3MgdGVtcG9yYXJpbHkgKi8KKworc3RhdGljIHZvaWQgZV9zZXJpZXNfd2luX291dChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgZGF0YSwgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworCW5pX3dyaXRldyhyZWcsIFdpbmRvd19BZGRyZXNzKTsKKwluaV93cml0ZXcoZGF0YSwgV2luZG93X0RhdGEpOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdWludDE2X3QgZV9zZXJpZXNfd2luX2luKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgcmVnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdWludDE2X3QgcmV0OworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXZwcml2LT53aW5kb3dfbG9jaywgZmxhZ3MpOworCW5pX3dyaXRldyhyZWcsIFdpbmRvd19BZGRyZXNzKTsKKwlyZXQgPSBuaV9yZWFkdyhXaW5kb3dfRGF0YSk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPndpbmRvd19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtX3Nlcmllc19zdGNfd3JpdGV3KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBkYXRhLCBpbnQgcmVnKQoreworCXVuc2lnbmVkIG9mZnNldDsKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgQURDX0ZJRk9fQ2xlYXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FJX0ZJRk9fQ2xlYXI7CisJCWJyZWFrOworCWNhc2UgQUlfQ29tbWFuZF8xX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9Db21tYW5kXzE7CisJCWJyZWFrOworCWNhc2UgQUlfQ29tbWFuZF8yX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9Db21tYW5kXzI7CisJCWJyZWFrOworCWNhc2UgQUlfTW9kZV8xX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9Nb2RlXzE7CisJCWJyZWFrOworCWNhc2UgQUlfTW9kZV8yX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9Nb2RlXzI7CisJCWJyZWFrOworCWNhc2UgQUlfTW9kZV8zX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9Nb2RlXzM7CisJCWJyZWFrOworCWNhc2UgQUlfT3V0cHV0X0NvbnRyb2xfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FJX091dHB1dF9Db250cm9sOworCQlicmVhazsKKwljYXNlIEFJX1BlcnNvbmFsX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9QZXJzb25hbDsKKwkJYnJlYWs7CisJY2FzZSBBSV9TSTJfTG9hZF9BX1JlZ2lzdGVyOgorCQkvLyB0aGlzIGlzIGFjdHVhbGx5IGEgMzIgYml0IHJlZ2lzdGVyIG9uIG0gc2VyaWVzIGJvYXJkcworCQluaV93cml0ZWwoZGF0YSwgTV9PZmZzZXRfQUlfU0kyX0xvYWRfQSk7CisJCXJldHVybjsKKwkJYnJlYWs7CisJY2FzZSBBSV9TSTJfTG9hZF9CX1JlZ2lzdGVyOgorCQkvLyB0aGlzIGlzIGFjdHVhbGx5IGEgMzIgYml0IHJlZ2lzdGVyIG9uIG0gc2VyaWVzIGJvYXJkcworCQluaV93cml0ZWwoZGF0YSwgTV9PZmZzZXRfQUlfU0kyX0xvYWRfQik7CisJCXJldHVybjsKKwkJYnJlYWs7CisJY2FzZSBBSV9TVEFSVF9TVE9QX1NlbGVjdF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQUlfU1RBUlRfU1RPUF9TZWxlY3Q7CisJCWJyZWFrOworCWNhc2UgQUlfVHJpZ2dlcl9TZWxlY3RfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FJX1RyaWdnZXJfU2VsZWN0OworCQlicmVhazsKKwljYXNlIEFuYWxvZ19UcmlnZ2VyX0V0Y19SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQW5hbG9nX1RyaWdnZXJfRXRjOworCQlicmVhazsKKwljYXNlIEFPX0NvbW1hbmRfMV9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fQ29tbWFuZF8xOworCQlicmVhazsKKwljYXNlIEFPX0NvbW1hbmRfMl9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fQ29tbWFuZF8yOworCQlicmVhazsKKwljYXNlIEFPX01vZGVfMV9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fTW9kZV8xOworCQlicmVhazsKKwljYXNlIEFPX01vZGVfMl9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fTW9kZV8yOworCQlicmVhazsKKwljYXNlIEFPX01vZGVfM19SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fTW9kZV8zOworCQlicmVhazsKKwljYXNlIEFPX091dHB1dF9Db250cm9sX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19PdXRwdXRfQ29udHJvbDsKKwkJYnJlYWs7CisJY2FzZSBBT19QZXJzb25hbF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQU9fUGVyc29uYWw7CisJCWJyZWFrOworCWNhc2UgQU9fU3RhcnRfU2VsZWN0X1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19TdGFydF9TZWxlY3Q7CisJCWJyZWFrOworCWNhc2UgQU9fVHJpZ2dlcl9TZWxlY3RfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FPX1RyaWdnZXJfU2VsZWN0OworCQlicmVhazsKKwljYXNlIENsb2NrX2FuZF9GT1VUX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9DbG9ja19hbmRfRk9VVDsKKwkJYnJlYWs7CisJY2FzZSBDb25maWd1cmF0aW9uX01lbW9yeV9DbGVhcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQ29uZmlndXJhdGlvbl9NZW1vcnlfQ2xlYXI7CisJCWJyZWFrOworCWNhc2UgREFDX0ZJRk9fQ2xlYXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FPX0ZJRk9fQ2xlYXI7CisJCWJyZWFrOworCWNhc2UgRElPX0NvbnRyb2xfUmVnaXN0ZXI6CisJCXJ0X3ByaW50aworCQkJKCIlczogRklYTUU6IHJlZ2lzdGVyIDB4JXggZG9lcyBub3QgbWFwIGNsZWFubHkgb24gdG8gbS1zZXJpZXMgYm9hcmRzLlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVnKTsKKwkJcmV0dXJuOworCQlicmVhazsKKwljYXNlIEdfQXV0b2luY3JlbWVudF9SZWdpc3RlcigwKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzBfQXV0b2luY3JlbWVudDsKKwkJYnJlYWs7CisJY2FzZSBHX0F1dG9pbmNyZW1lbnRfUmVnaXN0ZXIoMSk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cxX0F1dG9pbmNyZW1lbnQ7CisJCWJyZWFrOworCWNhc2UgR19Db21tYW5kX1JlZ2lzdGVyKDApOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMF9Db21tYW5kOworCQlicmVhazsKKwljYXNlIEdfQ29tbWFuZF9SZWdpc3RlcigxKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzFfQ29tbWFuZDsKKwkJYnJlYWs7CisJY2FzZSBHX0lucHV0X1NlbGVjdF9SZWdpc3RlcigwKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzBfSW5wdXRfU2VsZWN0OworCQlicmVhazsKKwljYXNlIEdfSW5wdXRfU2VsZWN0X1JlZ2lzdGVyKDEpOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMV9JbnB1dF9TZWxlY3Q7CisJCWJyZWFrOworCWNhc2UgR19Nb2RlX1JlZ2lzdGVyKDApOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMF9Nb2RlOworCQlicmVhazsKKwljYXNlIEdfTW9kZV9SZWdpc3RlcigxKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzFfTW9kZTsKKwkJYnJlYWs7CisJY2FzZSBJbnRlcnJ1cHRfQV9BY2tfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0ludGVycnVwdF9BX0FjazsKKwkJYnJlYWs7CisJY2FzZSBJbnRlcnJ1cHRfQV9FbmFibGVfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0ludGVycnVwdF9BX0VuYWJsZTsKKwkJYnJlYWs7CisJY2FzZSBJbnRlcnJ1cHRfQl9BY2tfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0ludGVycnVwdF9CX0FjazsKKwkJYnJlYWs7CisJY2FzZSBJbnRlcnJ1cHRfQl9FbmFibGVfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0ludGVycnVwdF9CX0VuYWJsZTsKKwkJYnJlYWs7CisJY2FzZSBJbnRlcnJ1cHRfQ29udHJvbF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfSW50ZXJydXB0X0NvbnRyb2w7CisJCWJyZWFrOworCWNhc2UgSU9fQmlkaXJlY3Rpb25fUGluX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9JT19CaWRpcmVjdGlvbl9QaW47CisJCWJyZWFrOworCWNhc2UgSm9pbnRfUmVzZXRfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0pvaW50X1Jlc2V0OworCQlicmVhazsKKwljYXNlIFJUU0lfVHJpZ19BX091dHB1dF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfUlRTSV9UcmlnX0FfT3V0cHV0OworCQlicmVhazsKKwljYXNlIFJUU0lfVHJpZ19CX091dHB1dF9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfUlRTSV9UcmlnX0JfT3V0cHV0OworCQlicmVhazsKKwljYXNlIFJUU0lfVHJpZ19EaXJlY3Rpb25fUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X1JUU0lfVHJpZ19EaXJlY3Rpb247CisJCWJyZWFrOworCQkvKiBGSVhNRTogRElPX091dHB1dF9SZWdpc3RlciAoMTYgYml0IHJlZykgaXMgcmVwbGFjZWQgYnkgTV9PZmZzZXRfU3RhdGljX0RpZ2l0YWxfT3V0cHV0ICgzMiBiaXQpCisJCSAgIGFuZCBNX09mZnNldF9TQ1hJX1NlcmlhbF9EYXRhX091dCAoOCBiaXQpICovCisJZGVmYXVsdDoKKwkJcnRfcHJpbnRrKCIlczogYnVnISB1bmhhbmRsZWQgcmVnaXN0ZXI9MHgleCBpbiBzd2l0Y2guXG4iLAorCQkJX19GVU5DVElPTl9fLCByZWcpOworCQlCVUcoKTsKKwkJcmV0dXJuOworCQlicmVhazsKKwl9CisJbmlfd3JpdGV3KGRhdGEsIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1aW50MTZfdCBtX3Nlcmllc19zdGNfcmVhZHcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCByZWcpCit7CisJdW5zaWduZWQgb2Zmc2V0OworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBBSV9TdGF0dXNfMV9SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfQUlfU3RhdHVzXzE7CisJCWJyZWFrOworCWNhc2UgQU9fU3RhdHVzXzFfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FPX1N0YXR1c18xOworCQlicmVhazsKKwljYXNlIEFPX1N0YXR1c18yX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19TdGF0dXNfMjsKKwkJYnJlYWs7CisJY2FzZSBESU9fU2VyaWFsX0lucHV0X1JlZ2lzdGVyOgorCQlyZXR1cm4gbmlfcmVhZGIoTV9PZmZzZXRfU0NYSV9TZXJpYWxfRGF0YV9Jbik7CisJCWJyZWFrOworCWNhc2UgSm9pbnRfU3RhdHVzXzFfUmVnaXN0ZXI6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0pvaW50X1N0YXR1c18xOworCQlicmVhazsKKwljYXNlIEpvaW50X1N0YXR1c18yX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9Kb2ludF9TdGF0dXNfMjsKKwkJYnJlYWs7CisJY2FzZSBHX1N0YXR1c19SZWdpc3RlcjoKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzAxX1N0YXR1czsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnRfcHJpbnRrKCIlczogYnVnISB1bmhhbmRsZWQgcmVnaXN0ZXI9MHgleCBpbiBzd2l0Y2guXG4iLAorCQkJX19GVU5DVElPTl9fLCByZWcpOworCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gbmlfcmVhZHcob2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbV9zZXJpZXNfc3RjX3dyaXRlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgdWludDMyX3QgZGF0YSwgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBvZmZzZXQ7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIEFJX1NDX0xvYWRfQV9SZWdpc3RlcnM6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0FJX1NDX0xvYWRfQTsKKwkJYnJlYWs7CisJY2FzZSBBSV9TSV9Mb2FkX0FfUmVnaXN0ZXJzOgorCQlvZmZzZXQgPSBNX09mZnNldF9BSV9TSV9Mb2FkX0E7CisJCWJyZWFrOworCWNhc2UgQU9fQkNfTG9hZF9BX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19CQ19Mb2FkX0E7CisJCWJyZWFrOworCWNhc2UgQU9fVUNfTG9hZF9BX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19VQ19Mb2FkX0E7CisJCWJyZWFrOworCWNhc2UgQU9fVUlfTG9hZF9BX1JlZ2lzdGVyOgorCQlvZmZzZXQgPSBNX09mZnNldF9BT19VSV9Mb2FkX0E7CisJCWJyZWFrOworCWNhc2UgR19Mb2FkX0FfUmVnaXN0ZXIoMCk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cwX0xvYWRfQTsKKwkJYnJlYWs7CisJY2FzZSBHX0xvYWRfQV9SZWdpc3RlcigxKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzFfTG9hZF9BOworCQlicmVhazsKKwljYXNlIEdfTG9hZF9CX1JlZ2lzdGVyKDApOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMF9Mb2FkX0I7CisJCWJyZWFrOworCWNhc2UgR19Mb2FkX0JfUmVnaXN0ZXIoMSk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cxX0xvYWRfQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcnRfcHJpbnRrKCIlczogYnVnISB1bmhhbmRsZWQgcmVnaXN0ZXI9MHgleCBpbiBzd2l0Y2guXG4iLAorCQkJX19GVU5DVElPTl9fLCByZWcpOworCQlCVUcoKTsKKwkJcmV0dXJuOworCQlicmVhazsKKwl9CisJbmlfd3JpdGVsKGRhdGEsIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBtX3Nlcmllc19zdGNfcmVhZGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCByZWcpCit7CisJdW5zaWduZWQgb2Zmc2V0OworCXN3aXRjaCAocmVnKSB7CisJY2FzZSBHX0hXX1NhdmVfUmVnaXN0ZXIoMCk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cwX0hXX1NhdmU7CisJCWJyZWFrOworCWNhc2UgR19IV19TYXZlX1JlZ2lzdGVyKDEpOgorCQlvZmZzZXQgPSBNX09mZnNldF9HMV9IV19TYXZlOworCQlicmVhazsKKwljYXNlIEdfU2F2ZV9SZWdpc3RlcigwKToKKwkJb2Zmc2V0ID0gTV9PZmZzZXRfRzBfU2F2ZTsKKwkJYnJlYWs7CisJY2FzZSBHX1NhdmVfUmVnaXN0ZXIoMSk6CisJCW9mZnNldCA9IE1fT2Zmc2V0X0cxX1NhdmU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJ0X3ByaW50aygiJXM6IGJ1ZyEgdW5oYW5kbGVkIHJlZ2lzdGVyPTB4JXggaW4gc3dpdGNoLlxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVnKTsKKwkJQlVHKCk7CisJCXJldHVybiAwOworCQlicmVhazsKKwl9CisJcmV0dXJuIG5pX3JlYWRsKG9mZnNldCk7Cit9CisKKyNkZWZpbmUgaW50ZXJydXB0X3BpbihhKQkwCisjZGVmaW5lIElSUV9QT0xBUklUWSAxCisKKyNkZWZpbmUgTklfRV9JUlFfRkxBR1MJCUlSUUZfU0hBUkVECisKKyNpbmNsdWRlICJuaV9taW9fY29tbW9uLmMiCisKK3N0YXRpYyBpbnQgcGNpbWlvX2ZpbmRfZGV2aWNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYnVzLCBpbnQgc2xvdCk7CitzdGF0aWMgaW50IHBjaW1pb19haV9jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKTsKK3N0YXRpYyBpbnQgcGNpbWlvX2FvX2NoYW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpOworc3RhdGljIGludCBwY2ltaW9fZ3BjdDBfY2hhbmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSk7CitzdGF0aWMgaW50IHBjaW1pb19ncGN0MV9jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKTsKK3N0YXRpYyBpbnQgcGNpbWlvX2Rpb19jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKTsKKworc3RhdGljIHZvaWQgbV9zZXJpZXNfaW5pdF9lZXByb21fYnVmZmVyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXN0YXRpYyBjb25zdCBpbnQgU3RhcnRfQ2FsX0VFUFJPTSA9IDB4NDAwOworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCB3aW5kb3dfc2l6ZSA9IDEwOworCXN0YXRpYyBjb25zdCBpbnQgc2VyaWFsX251bWJlcl9lZXByb21fb2Zmc2V0ID0gMHg0OworCXN0YXRpYyBjb25zdCBpbnQgc2VyaWFsX251bWJlcl9lZXByb21fbGVuZ3RoID0gMHg0OworCXVuc2lnbmVkIG9sZF9pb2R3YnNyX2JpdHM7CisJdW5zaWduZWQgb2xkX2lvZHdic3IxX2JpdHM7CisJdW5zaWduZWQgb2xkX2lvZHdjcjFfYml0czsKKwlpbnQgaTsKKworCW9sZF9pb2R3YnNyX2JpdHMgPSByZWFkbChkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0lPRFdCU1IpOworCW9sZF9pb2R3YnNyMV9iaXRzID0gcmVhZGwoZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9JT0RXQlNSXzEpOworCW9sZF9pb2R3Y3IxX2JpdHMgPSByZWFkbChkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0lPRFdDUl8xKTsKKwl3cml0ZWwoMHgwLCBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0lPRFdCU1IpOworCXdyaXRlbCgoKDB4ODAgfCB3aW5kb3dfc2l6ZSkgfCBkZXZwcml2LT5taXRlLT5kYXFfcGh5c19hZGRyKSwKKwkJZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9JT0RXQlNSXzEpOworCXdyaXRlbCgweDEgfCBvbGRfaW9kd2NyMV9iaXRzLCBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0lPRFdDUl8xKTsKKwl3cml0ZWwoMHhmLCBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyAweDMwKTsKKworCUJVR19PTihzZXJpYWxfbnVtYmVyX2VlcHJvbV9sZW5ndGggPiBzaXplb2YoZGV2cHJpdi0+c2VyaWFsX251bWJlcikpOworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWxfbnVtYmVyX2VlcHJvbV9sZW5ndGg7ICsraSkgeworCQljaGFyICpieXRlX3B0ciA9IChjaGFyKikmZGV2cHJpdi0+c2VyaWFsX251bWJlciArIGk7CisJCSpieXRlX3B0ciA9IG5pX3JlYWRiKHNlcmlhbF9udW1iZXJfZWVwcm9tX29mZnNldCArIGkpOworCX0KKwlkZXZwcml2LT5zZXJpYWxfbnVtYmVyID0gYmUzMl90b19jcHUoZGV2cHJpdi0+c2VyaWFsX251bWJlcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTV9TRVJJRVNfRUVQUk9NX1NJWkU7ICsraSkgeworCQlkZXZwcml2LT5lZXByb21fYnVmZmVyW2ldID0gbmlfcmVhZGIoU3RhcnRfQ2FsX0VFUFJPTSArIGkpOworCX0KKworCXdyaXRlbChvbGRfaW9kd2JzcjFfYml0cywgZGV2cHJpdi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsgTUlURV9JT0RXQlNSXzEpOworCXdyaXRlbChvbGRfaW9kd2Jzcl9iaXRzLCBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0lPRFdCU1IpOworCXdyaXRlbChvbGRfaW9kd2NyMV9iaXRzLCBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyBNSVRFX0lPRFdDUl8xKTsKKwl3cml0ZWwoMHgwLCBkZXZwcml2LT5taXRlLT5taXRlX2lvX2FkZHIgKyAweDMwKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF82MTQzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8vIERpc2FibGUgaW50ZXJydXB0cworCWRldnByaXYtPnN0Y193cml0ZXcoZGV2LCAwLCBJbnRlcnJ1cHRfQ29udHJvbF9SZWdpc3Rlcik7CisKKwkvLyBJbml0aWFsaXNlIDYxNDMgQUkgc3BlY2lmaWMgYml0cworCW5pX3dyaXRlYigweDAwLCBNYWdpY182MTQzKTsJLy8gU2V0IEcwLEcxIERNQSBtb2RlIHRvIEUgc2VyaWVzIHZlcnNpb24KKwluaV93cml0ZWIoMHg4MCwgUGlwZWxpbmVEZWxheV82MTQzKTsJLy8gU2V0IEVPQ01vZGUsIEFEQ01vZGUgYW5kIHBpcGVsaW5lZGVsYXkKKwluaV93cml0ZWIoMHgwMCwgRU9DX1NldF82MTQzKTsJLy8gU2V0IEVPQyBEZWxheQorCisJbmlfd3JpdGVsKGJvYXJkdHlwZS5haV9maWZvX2RlcHRoIC8gMiwgQUlGSUZPX0ZsYWdfNjE0Myk7CS8vIFNldCB0aGUgRklGTyBoYWxmIGZ1bGwgbGV2ZWwKKworCS8vIFN0cm9iZSBSZWxheSBkaXNhYmxlIGJpdAorCWRldnByaXYtPmFpX2NhbGliX3NvdXJjZV9lbmFibGVkID0gMDsKKwluaV93cml0ZXcoZGV2cHJpdi0+YWlfY2FsaWJfc291cmNlIHwgQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzX1JlbGF5T2ZmLAorCQlDYWxpYnJhdGlvbl9DaGFubmVsXzYxNDMpOworCW5pX3dyaXRldyhkZXZwcml2LT5haV9jYWxpYl9zb3VyY2UsIENhbGlicmF0aW9uX0NoYW5uZWxfNjE0Myk7Cit9CisKKy8qIGNsZWFucyB1cCBhbGxvY2F0ZWQgcmVzb3VyY2VzICovCitzdGF0aWMgaW50IHBjaW1pb19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJbWlvX2NvbW1vbl9kZXRhY2goZGV2KTsKKwlpZiAoZGV2LT5pcnEpIHsKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCX0KKwlpZiAoZGV2LT5wcml2YXRlKSB7CisJCW1pdGVfZnJlZV9yaW5nKGRldnByaXYtPmFpX21pdGVfcmluZyk7CisJCW1pdGVfZnJlZV9yaW5nKGRldnByaXYtPmFvX21pdGVfcmluZyk7CisJCW1pdGVfZnJlZV9yaW5nKGRldnByaXYtPmNkb19taXRlX3JpbmcpOworCQltaXRlX2ZyZWVfcmluZyhkZXZwcml2LT5ncGN0X21pdGVfcmluZ1swXSk7CisJCW1pdGVfZnJlZV9yaW5nKGRldnByaXYtPmdwY3RfbWl0ZV9yaW5nWzFdKTsKKwkJaWYgKGRldnByaXYtPm1pdGUpCisJCQltaXRlX3Vuc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpbWlvX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCisJcHJpbnRrKCJjb21lZGklZDogbmlfcGNpbWlvOiIsIGRldi0+bWlub3IpOworCisJcmV0ID0gbmlfYWxsb2NfcHJpdmF0ZShkZXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gcGNpbWlvX2ZpbmRfZGV2aWNlKGRldiwgaXQtPm9wdGlvbnNbMF0sIGl0LT5vcHRpb25zWzFdKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXByaW50aygiICVzIiwgYm9hcmR0eXBlLm5hbWUpOworCWRldi0+Ym9hcmRfbmFtZSA9IGJvYXJkdHlwZS5uYW1lOworCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKSB7CisJCWRldnByaXYtPnN0Y193cml0ZXcgPSAmbV9zZXJpZXNfc3RjX3dyaXRldzsKKwkJZGV2cHJpdi0+c3RjX3JlYWR3ID0gJm1fc2VyaWVzX3N0Y19yZWFkdzsKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbCA9ICZtX3Nlcmllc19zdGNfd3JpdGVsOworCQlkZXZwcml2LT5zdGNfcmVhZGwgPSAmbV9zZXJpZXNfc3RjX3JlYWRsOworCX0gZWxzZSB7CisJCWRldnByaXYtPnN0Y193cml0ZXcgPSAmZV9zZXJpZXNfd2luX291dDsKKwkJZGV2cHJpdi0+c3RjX3JlYWR3ID0gJmVfc2VyaWVzX3dpbl9pbjsKKwkJZGV2cHJpdi0+c3RjX3dyaXRlbCA9ICZ3aW5fb3V0MjsKKwkJZGV2cHJpdi0+c3RjX3JlYWRsID0gJndpbl9pbjI7CisJfQorCisJcmV0ID0gbWl0ZV9zZXR1cChkZXZwcml2LT5taXRlKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoIiBlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwljb21lZGlfc2V0X2h3X2RldihkZXYsICZkZXZwcml2LT5taXRlLT5wY2lkZXYtPmRldik7CisJZGV2cHJpdi0+YWlfbWl0ZV9yaW5nID0gbWl0ZV9hbGxvY19yaW5nKGRldnByaXYtPm1pdGUpOworCWlmIChkZXZwcml2LT5haV9taXRlX3JpbmcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2cHJpdi0+YW9fbWl0ZV9yaW5nID0gbWl0ZV9hbGxvY19yaW5nKGRldnByaXYtPm1pdGUpOworCWlmIChkZXZwcml2LT5hb19taXRlX3JpbmcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2cHJpdi0+Y2RvX21pdGVfcmluZyA9IG1pdGVfYWxsb2NfcmluZyhkZXZwcml2LT5taXRlKTsKKwlpZiAoZGV2cHJpdi0+Y2RvX21pdGVfcmluZyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXZwcml2LT5ncGN0X21pdGVfcmluZ1swXSA9IG1pdGVfYWxsb2NfcmluZyhkZXZwcml2LT5taXRlKTsKKwlpZiAoZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbMF0gPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2cHJpdi0+Z3BjdF9taXRlX3JpbmdbMV0gPSBtaXRlX2FsbG9jX3JpbmcoZGV2cHJpdi0+bWl0ZSk7CisJaWYgKGRldnByaXYtPmdwY3RfbWl0ZV9yaW5nWzFdID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGJvYXJkdHlwZS5yZWdfdHlwZSAmIG5pX3JlZ19tX3Nlcmllc19tYXNrKQorCQltX3Nlcmllc19pbml0X2VlcHJvbV9idWZmZXIoZGV2KTsKKwlpZiAoYm9hcmR0eXBlLnJlZ190eXBlID09IG5pX3JlZ182MTQzKQorCQlpbml0XzYxNDMoZGV2KTsKKworCWRldi0+aXJxID0gbWl0ZV9pcnEoZGV2cHJpdi0+bWl0ZSk7CisKKwlpZiAoZGV2LT5pcnEgPT0gMCkgeworCQlwcmludGsoIiB1bmtub3duIGlycSAoYmFkKVxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIgKCBpcnEgPSAldSApIiwgZGV2LT5pcnEpOworCQlpZiAoKHJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShkZXYtPmlycSwgbmlfRV9pbnRlcnJ1cHQsCisJCQkJCU5JX0VfSVJRX0ZMQUdTLCBEUlZfTkFNRSwKKwkJCQkJZGV2KSkgPCAwKSB7CisJCQlwcmludGsoIiBpcnEgbm90IGF2YWlsYWJsZVxuIik7CisJCQlkZXYtPmlycSA9IDA7CisJCX0KKwl9CisKKwlyZXQgPSBuaV9FX2luaXQoZGV2LCBpdCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXYtPnN1YmRldmljZXNbTklfQUlfU1VCREVWXS5idWZfY2hhbmdlID0gJnBjaW1pb19haV9jaGFuZ2U7CisJZGV2LT5zdWJkZXZpY2VzW05JX0FPX1NVQkRFVl0uYnVmX2NoYW5nZSA9ICZwY2ltaW9fYW9fY2hhbmdlOworCWRldi0+c3ViZGV2aWNlc1tOSV9HUENUX1NVQkRFVigwKV0uYnVmX2NoYW5nZSA9ICZwY2ltaW9fZ3BjdDBfY2hhbmdlOworCWRldi0+c3ViZGV2aWNlc1tOSV9HUENUX1NVQkRFVigxKV0uYnVmX2NoYW5nZSA9ICZwY2ltaW9fZ3BjdDFfY2hhbmdlOworCWRldi0+c3ViZGV2aWNlc1tOSV9ESU9fU1VCREVWXS5idWZfY2hhbmdlID0gJnBjaW1pb19kaW9fY2hhbmdlOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwY2ltaW9fZmluZF9kZXZpY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBidXMsIGludCBzbG90KQoreworCXN0cnVjdCBtaXRlX3N0cnVjdCAqbWl0ZTsKKwlpbnQgaTsKKworCWZvciAobWl0ZSA9IG1pdGVfZGV2aWNlczsgbWl0ZTsgbWl0ZSA9IG1pdGUtPm5leHQpIHsKKwkJaWYgKG1pdGUtPnVzZWQpCisJCQljb250aW51ZTsKKwkJaWYgKGJ1cyB8fCBzbG90KSB7CisJCQlpZiAoYnVzICE9IG1pdGUtPnBjaWRldi0+YnVzLT5udW1iZXIgfHwKKwkJCQlzbG90ICE9IFBDSV9TTE9UKG1pdGUtPnBjaWRldi0+ZGV2Zm4pKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IG5fcGNpbWlvX2JvYXJkczsgaSsrKSB7CisJCQlpZiAobWl0ZV9kZXZpY2VfaWQobWl0ZSkgPT0gbmlfYm9hcmRzW2ldLmRldmljZV9pZCkgeworCQkJCWRldi0+Ym9hcmRfcHRyID0gbmlfYm9hcmRzICsgaTsKKwkJCQlkZXZwcml2LT5taXRlID0gbWl0ZTsKKworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwltaXRlX2xpc3RfZGV2aWNlcygpOworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgaW50IHBjaW1pb19haV9jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+YWlfbWl0ZV9yaW5nLCBzLT5hc3luYyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2ltaW9fYW9fY2hhbmdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgbG9uZyBuZXdfc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbWl0ZV9idWZfY2hhbmdlKGRldnByaXYtPmFvX21pdGVfcmluZywgcy0+YXN5bmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpbWlvX2dwY3QwX2NoYW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pdGVfYnVmX2NoYW5nZShkZXZwcml2LT5ncGN0X21pdGVfcmluZ1swXSwgcy0+YXN5bmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpbWlvX2dwY3QxX2NoYW5nZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGxvbmcgbmV3X3NpemUpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pdGVfYnVmX2NoYW5nZShkZXZwcml2LT5ncGN0X21pdGVfcmluZ1sxXSwgcy0+YXN5bmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpbWlvX2Rpb19jaGFuZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBsb25nIG5ld19zaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSBtaXRlX2J1Zl9jaGFuZ2UoZGV2cHJpdi0+Y2RvX21pdGVfcmluZywgcy0+YXN5bmMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfc3RjLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfc3RjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViZjUyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9zdGMuaApAQCAtMCwwICsxLDE0OTggQEAKKy8qCisgICAgbW9kdWxlL25pX3N0Yy5oCisgICAgUmVnaXN0ZXIgZGVzY3JpcHRpb25zIGZvciBOSSBEQVEtU1RDIGNoaXAKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDE5OTgtOSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisvKgorCVJlZmVyZW5jZXM6CisJICAgIERBUS1TVEMgVGVjaG5pY2FsIFJlZmVyZW5jZSBNYW51YWwKKyovCisKKyNpZm5kZWYgX0NPTUVESV9OSV9TVENfSAorI2RlZmluZSBfQ09NRURJX05JX1NUQ19ICisKKyNpbmNsdWRlICJuaV90aW8uaCIKKworI2RlZmluZSBfYml0MTUJCTB4ODAwMAorI2RlZmluZSBfYml0MTQJCTB4NDAwMAorI2RlZmluZSBfYml0MTMJCTB4MjAwMAorI2RlZmluZSBfYml0MTIJCTB4MTAwMAorI2RlZmluZSBfYml0MTEJCTB4MDgwMAorI2RlZmluZSBfYml0MTAJCTB4MDQwMAorI2RlZmluZSBfYml0OQkJMHgwMjAwCisjZGVmaW5lIF9iaXQ4CQkweDAxMDAKKyNkZWZpbmUgX2JpdDcJCTB4MDA4MAorI2RlZmluZSBfYml0NgkJMHgwMDQwCisjZGVmaW5lIF9iaXQ1CQkweDAwMjAKKyNkZWZpbmUgX2JpdDQJCTB4MDAxMAorI2RlZmluZSBfYml0MwkJMHgwMDA4CisjZGVmaW5lIF9iaXQyCQkweDAwMDQKKyNkZWZpbmUgX2JpdDEJCTB4MDAwMgorI2RlZmluZSBfYml0MAkJMHgwMDAxCisKKyNkZWZpbmUgTlVNX1BGSV9PVVRQVVRfU0VMRUNUX1JFR1MgNgorCisvKiBSZWdpc3RlcnMgaW4gdGhlIE5hdGlvbmFsIEluc3RydW1lbnRzIERBUS1TVEMgY2hpcCAqLworCisjZGVmaW5lIEludGVycnVwdF9BX0Fja19SZWdpc3RlcgkyCisjZGVmaW5lIEcwX0dhdGVfSW50ZXJydXB0X0FjawkJCV9iaXQxNQorI2RlZmluZSBHMF9UQ19JbnRlcnJ1cHRfQWNrCQkJX2JpdDE0CisjZGVmaW5lIEFJX0Vycm9yX0ludGVycnVwdF9BY2sJCQlfYml0MTMKKyNkZWZpbmUgQUlfU1RPUF9JbnRlcnJ1cHRfQWNrCQkJX2JpdDEyCisjZGVmaW5lIEFJX1NUQVJUX0ludGVycnVwdF9BY2sJCQlfYml0MTEKKyNkZWZpbmUgQUlfU1RBUlQyX0ludGVycnVwdF9BY2sJCQlfYml0MTAKKyNkZWZpbmUgQUlfU1RBUlQxX0ludGVycnVwdF9BY2sJCQlfYml0OQorI2RlZmluZSBBSV9TQ19UQ19JbnRlcnJ1cHRfQWNrCQkJX2JpdDgKKyNkZWZpbmUgQUlfU0NfVENfRXJyb3JfQ29uZmlybQkJCV9iaXQ3CisjZGVmaW5lIEcwX1RDX0Vycm9yX0NvbmZpcm0JCQlfYml0NgorI2RlZmluZSBHMF9HYXRlX0Vycm9yX0NvbmZpcm0JCQlfYml0NQorCisjZGVmaW5lIEFJX1N0YXR1c18xX1JlZ2lzdGVyCQkyCisjZGVmaW5lIEludGVycnVwdF9BX1N0CQkJCTB4ODAwMAorI2RlZmluZSBBSV9GSUZPX0Z1bGxfU3QJCQkJMHg0MDAwCisjZGVmaW5lIEFJX0ZJRk9fSGFsZl9GdWxsX1N0CQkJMHgyMDAwCisjZGVmaW5lIEFJX0ZJRk9fRW1wdHlfU3QJCQkweDEwMDAKKyNkZWZpbmUgQUlfT3ZlcnJ1bl9TdAkJCQkweDA4MDAKKyNkZWZpbmUgQUlfT3ZlcmZsb3dfU3QJCQkJMHgwNDAwCisjZGVmaW5lIEFJX1NDX1RDX0Vycm9yX1N0CQkJMHgwMjAwCisjZGVmaW5lIEFJX1NUQVJUMl9TdAkJCQkweDAxMDAKKyNkZWZpbmUgQUlfU1RBUlQxX1N0CQkJCTB4MDA4MAorI2RlZmluZSBBSV9TQ19UQ19TdAkJCQkweDAwNDAKKyNkZWZpbmUgQUlfU1RBUlRfU3QJCQkJMHgwMDIwCisjZGVmaW5lIEFJX1NUT1BfU3QJCQkJMHgwMDEwCisjZGVmaW5lIEcwX1RDX1N0CQkJCTB4MDAwOAorI2RlZmluZSBHMF9HYXRlX0ludGVycnVwdF9TdAkJCTB4MDAwNAorI2RlZmluZSBBSV9GSUZPX1JlcXVlc3RfU3QJCQkweDAwMDIKKyNkZWZpbmUgUGFzc19UaHJ1XzBfSW50ZXJydXB0X1N0CQkweDAwMDEKKworI2RlZmluZSBBSV9TdGF0dXNfMl9SZWdpc3RlcgkJNQorCisjZGVmaW5lIEludGVycnVwdF9CX0Fja19SZWdpc3RlcgkzCitlbnVtIEludGVycnVwdF9CX0Fja19CaXRzIHsKKwlHMV9HYXRlX0Vycm9yX0NvbmZpcm0gPSBfYml0MSwKKwlHMV9UQ19FcnJvcl9Db25maXJtID0gX2JpdDIsCisJQU9fQkNfVENfVHJpZ2dlcl9FcnJvcl9Db25maXJtID0gX2JpdDMsCisJQU9fQkNfVENfRXJyb3JfQ29uZmlybSA9IF9iaXQ0LAorCUFPX1VJMl9UQ19FcnJvcl9Db25mcmltID0gX2JpdDUsCisJQU9fVUkyX1RDX0ludGVycnVwdF9BY2sgPSBfYml0NiwKKwlBT19VQ19UQ19JbnRlcnJ1cHRfQWNrID0gX2JpdDcsCisJQU9fQkNfVENfSW50ZXJydXB0X0FjayA9IF9iaXQ4LAorCUFPX1NUQVJUMV9JbnRlcnJ1cHRfQWNrID0gX2JpdDksCisJQU9fVVBEQVRFX0ludGVycnVwdF9BY2sgPSBfYml0MTAsCisJQU9fU1RBUlRfSW50ZXJydXB0X0FjayA9IF9iaXQxMSwKKwlBT19TVE9QX0ludGVycnVwdF9BY2sgPSBfYml0MTIsCisJQU9fRXJyb3JfSW50ZXJydXB0X0FjayA9IF9iaXQxMywKKwlHMV9UQ19JbnRlcnJ1cHRfQWNrID0gX2JpdDE0LAorCUcxX0dhdGVfSW50ZXJydXB0X0FjayA9IF9iaXQxNQorfTsKKworI2RlZmluZSBBT19TdGF0dXNfMV9SZWdpc3RlcgkJMworI2RlZmluZSBJbnRlcnJ1cHRfQl9TdAkJCQlfYml0MTUKKyNkZWZpbmUgQU9fRklGT19GdWxsX1N0CQkJCV9iaXQxNAorI2RlZmluZSBBT19GSUZPX0hhbGZfRnVsbF9TdAkJCV9iaXQxMworI2RlZmluZSBBT19GSUZPX0VtcHR5X1N0CQkJX2JpdDEyCisjZGVmaW5lIEFPX0JDX1RDX0Vycm9yX1N0CQkJX2JpdDExCisjZGVmaW5lIEFPX1NUQVJUX1N0CQkJCV9iaXQxMAorI2RlZmluZSBBT19PdmVycnVuX1N0CQkJCV9iaXQ5CisjZGVmaW5lIEFPX1NUQVJUMV9TdAkJCQlfYml0OAorI2RlZmluZSBBT19CQ19UQ19TdAkJCQlfYml0NworI2RlZmluZSBBT19VQ19UQ19TdAkJCQlfYml0NgorI2RlZmluZSBBT19VUERBVEVfU3QJCQkJX2JpdDUKKyNkZWZpbmUgQU9fVUkyX1RDX1N0CQkJCV9iaXQ0CisjZGVmaW5lIEcxX1RDX1N0CQkJCV9iaXQzCisjZGVmaW5lIEcxX0dhdGVfSW50ZXJydXB0X1N0CQkJX2JpdDIKKyNkZWZpbmUgQU9fRklGT19SZXF1ZXN0X1N0CQkJX2JpdDEKKyNkZWZpbmUgUGFzc19UaHJ1XzFfSW50ZXJydXB0X1N0CQlfYml0MAorCisjZGVmaW5lIEFJX0NvbW1hbmRfMl9SZWdpc3RlcgkJNAorI2RlZmluZSBBSV9FbmRfT25fU0NfVEMJCQkJX2JpdDE1CisjZGVmaW5lIEFJX0VuZF9Pbl9FbmRfT2ZfU2NhbgkJCV9iaXQxNAorI2RlZmluZSBBSV9TVEFSVDFfRGlzYWJsZQkJCV9iaXQxMQorI2RlZmluZSBBSV9TQ19TYXZlX1RyYWNlCQkJX2JpdDEwCisjZGVmaW5lIEFJX1NJX1N3aXRjaF9Mb2FkX09uX1NDX1RDCQlfYml0OQorI2RlZmluZSBBSV9TSV9Td2l0Y2hfTG9hZF9Pbl9TVE9QCQlfYml0OAorI2RlZmluZSBBSV9TSV9Td2l0Y2hfTG9hZF9Pbl9UQwkJCV9iaXQ3CisjZGVmaW5lIEFJX1NDX1N3aXRjaF9Mb2FkX09uX1RDCQkJX2JpdDQKKyNkZWZpbmUgQUlfU1RPUF9QdWxzZQkJCQlfYml0MworI2RlZmluZSBBSV9TVEFSVF9QdWxzZQkJCQlfYml0MgorI2RlZmluZSBBSV9TVEFSVDJfUHVsc2UJCQkJX2JpdDEKKyNkZWZpbmUgQUlfU1RBUlQxX1B1bHNlCQkJCV9iaXQwCisKKyNkZWZpbmUgQU9fQ29tbWFuZF8yX1JlZ2lzdGVyCQk1CisjZGVmaW5lIEFPX0VuZF9Pbl9CQ19UQyh4KQkJCSgoKHgpICYgMHgzKSA8PCAxNCkKKyNkZWZpbmUgQU9fU3RhcnRfU3RvcF9HYXRlX0VuYWJsZQkJX2JpdDEzCisjZGVmaW5lIEFPX1VDX1NhdmVfVHJhY2UJCQlfYml0MTIKKyNkZWZpbmUgQU9fQkNfR2F0ZV9FbmFibGUJCQlfYml0MTEKKyNkZWZpbmUgQU9fQkNfU2F2ZV9UcmFjZQkJCV9iaXQxMAorI2RlZmluZSBBT19VSV9Td2l0Y2hfTG9hZF9Pbl9CQ19UQwkJX2JpdDkKKyNkZWZpbmUgQU9fVUlfU3dpdGNoX0xvYWRfT25fU3RvcAkJX2JpdDgKKyNkZWZpbmUgQU9fVUlfU3dpdGNoX0xvYWRfT25fVEMJCQlfYml0NworI2RlZmluZSBBT19VQ19Td2l0Y2hfTG9hZF9Pbl9CQ19UQwkJX2JpdDYKKyNkZWZpbmUgQU9fVUNfU3dpdGNoX0xvYWRfT25fVEMJCQlfYml0NQorI2RlZmluZSBBT19CQ19Td2l0Y2hfTG9hZF9Pbl9UQwkJCV9iaXQ0CisjZGVmaW5lIEFPX011dGVfQgkJCQlfYml0MworI2RlZmluZSBBT19NdXRlX0EJCQkJX2JpdDIKKyNkZWZpbmUgQU9fVVBEQVRFMl9QdWxzZQkJCV9iaXQxCisjZGVmaW5lIEFPX1NUQVJUMV9QdWxzZQkJCQlfYml0MAorCisjZGVmaW5lIEFPX1N0YXR1c18yX1JlZ2lzdGVyCQk2CisKKyNkZWZpbmUgRElPX1BhcmFsbGVsX0lucHV0X1JlZ2lzdGVyCTcKKworI2RlZmluZSBBSV9Db21tYW5kXzFfUmVnaXN0ZXIJCTgKKyNkZWZpbmUgQUlfQW5hbG9nX1RyaWdnZXJfUmVzZXQJCQlfYml0MTQKKyNkZWZpbmUgQUlfRGlzYXJtCQkJCV9iaXQxMworI2RlZmluZSBBSV9TSTJfQXJtCQkJCV9iaXQxMgorI2RlZmluZSBBSV9TSTJfTG9hZAkJCQlfYml0MTEKKyNkZWZpbmUgQUlfU0lfQXJtCQkJCV9iaXQxMAorI2RlZmluZSBBSV9TSV9Mb2FkCQkJCV9iaXQ5CisjZGVmaW5lIEFJX0RJVl9Bcm0JCQkJX2JpdDgKKyNkZWZpbmUgQUlfRElWX0xvYWQJCQkJX2JpdDcKKyNkZWZpbmUgQUlfU0NfQXJtCQkJCV9iaXQ2CisjZGVmaW5lIEFJX1NDX0xvYWQJCQkJX2JpdDUKKyNkZWZpbmUgQUlfU0NBTl9JTl9QUk9HX1B1bHNlCQkJX2JpdDQKKyNkZWZpbmUgQUlfRVhUTVVYX0NMS19QdWxzZQkJCV9iaXQzCisjZGVmaW5lIEFJX0xPQ0FMTVVYX0NMS19QdWxzZQkJCV9iaXQyCisjZGVmaW5lIEFJX1NDX1RDX1B1bHNlCQkJIAlfYml0MQorI2RlZmluZSBBSV9DT05WRVJUX1B1bHNlCQkJX2JpdDAKKworI2RlZmluZSBBT19Db21tYW5kXzFfUmVnaXN0ZXIJCTkKKyNkZWZpbmUgQU9fQW5hbG9nX1RyaWdnZXJfUmVzZXQJCQlfYml0MTUKKyNkZWZpbmUgQU9fU1RBUlRfUHVsc2UJCQkJX2JpdDE0CisjZGVmaW5lIEFPX0Rpc2FybQkJCQlfYml0MTMKKyNkZWZpbmUgQU9fVUkyX0FybV9EaXNhcm0JCQlfYml0MTIKKyNkZWZpbmUgQU9fVUkyX0xvYWQJCQkJX2JpdDExCisjZGVmaW5lIEFPX1VJX0FybQkJCQlfYml0MTAKKyNkZWZpbmUgQU9fVUlfTG9hZAkJCQlfYml0OQorI2RlZmluZSBBT19VQ19Bcm0JCQkJX2JpdDgKKyNkZWZpbmUgQU9fVUNfTG9hZAkJCQlfYml0NworI2RlZmluZSBBT19CQ19Bcm0JCQkJX2JpdDYKKyNkZWZpbmUgQU9fQkNfTG9hZAkJCQlfYml0NQorI2RlZmluZSBBT19EQUMxX1VwZGF0ZV9Nb2RlCQkJX2JpdDQKKyNkZWZpbmUgQU9fTERBQzFfU291cmNlX1NlbGVjdAkJCV9iaXQzCisjZGVmaW5lIEFPX0RBQzBfVXBkYXRlX01vZGUJCQlfYml0MgorI2RlZmluZSBBT19MREFDMF9Tb3VyY2VfU2VsZWN0CQkJX2JpdDEKKyNkZWZpbmUgQU9fVVBEQVRFX1B1bHNlCQkJCV9iaXQwCisKKyNkZWZpbmUgRElPX091dHB1dF9SZWdpc3RlcgkJMTAKKyNkZWZpbmUgRElPX1BhcmFsbGVsX0RhdGFfT3V0KGEpICAgICAgICAgICAgICAgICgoYSkmMHhmZikKKyNkZWZpbmUgRElPX1BhcmFsbGVsX0RhdGFfTWFzayAgICAgICAgICAgICAgICAgIDB4ZmYKKyNkZWZpbmUgRElPX1NET1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9iaXQwCisjZGVmaW5lIERJT19TRElOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYml0NAorI2RlZmluZSBESU9fU2VyaWFsX0RhdGFfT3V0KGEpICAgICAgICAgICAgICAgICAgKCgoYSkmMHhmZik8PDgpCisjZGVmaW5lIERJT19TZXJpYWxfRGF0YV9NYXNrICAgICAgICAgICAgICAgICAgICAweGZmMDAKKworI2RlZmluZSBESU9fQ29udHJvbF9SZWdpc3RlcgkJMTEKKyNkZWZpbmUgRElPX1NvZnR3YXJlX1NlcmlhbF9Db250cm9sICAgICAgICAgICAgIF9iaXQxMQorI2RlZmluZSBESU9fSFdfU2VyaWFsX1RpbWViYXNlICAgICAgICAgICAgICAgICAgX2JpdDEwCisjZGVmaW5lIERJT19IV19TZXJpYWxfRW5hYmxlICAgICAgICAgICAgICAgICAgICBfYml0OQorI2RlZmluZSBESU9fSFdfU2VyaWFsX1N0YXJ0ICAgICAgICAgICAgICAgICAgICAgX2JpdDgKKyNkZWZpbmUgRElPX1BpbnNfRGlyKGEpICAgICAgICAgICAgICAgICAgICAgICAgICgoYSkmMHhmZikKKyNkZWZpbmUgRElPX1BpbnNfRGlyX01hc2sgICAgICAgICAgICAgICAgICAgICAgIDB4ZmYKKworI2RlZmluZSBBSV9Nb2RlXzFfUmVnaXN0ZXIJCTEyCisjZGVmaW5lIEFJX0NPTlZFUlRfU291cmNlX1NlbGVjdChhKQkJKCgoYSkgJiAweDFmKSA8PCAxMSkKKyNkZWZpbmUgQUlfU0lfU291cmNlX3NlbGVjdChhKQkJCSgoKGEpICYgMHgxZikgPDwgNikKKyNkZWZpbmUgQUlfQ09OVkVSVF9Tb3VyY2VfUG9sYXJpdHkJCV9iaXQ1CisjZGVmaW5lIEFJX1NJX1NvdXJjZV9Qb2xhcml0eQkJX2JpdDQKKyNkZWZpbmUgQUlfU3RhcnRfU3RvcAkJCQlfYml0MworI2RlZmluZSBBSV9Nb2RlXzFfUmVzZXJ2ZWQJCQlfYml0MgorI2RlZmluZSBBSV9Db250aW51b3VzCQkJCV9iaXQxCisjZGVmaW5lIEFJX1RyaWdnZXJfT25jZQkJCQlfYml0MAorCisjZGVmaW5lIEFJX01vZGVfMl9SZWdpc3RlcgkJMTMKKyNkZWZpbmUgQUlfU0NfR2F0ZV9FbmFibGUJCQlfYml0MTUKKyNkZWZpbmUgQUlfU3RhcnRfU3RvcF9HYXRlX0VuYWJsZQkJX2JpdDE0CisjZGVmaW5lIEFJX1ByZV9UcmlnZ2VyCQkJCV9iaXQxMworI2RlZmluZSBBSV9FeHRlcm5hbF9NVVhfUHJlc2VudAkJCV9iaXQxMgorI2RlZmluZSBBSV9TSTJfSW5pdGlhbF9Mb2FkX1NvdXJjZQkJX2JpdDkKKyNkZWZpbmUgQUlfU0kyX1JlbG9hZF9Nb2RlCQkJX2JpdDgKKyNkZWZpbmUgQUlfU0lfSW5pdGlhbF9Mb2FkX1NvdXJjZQkJX2JpdDcKKyNkZWZpbmUgQUlfU0lfUmVsb2FkX01vZGUoYSkJCQkoKChhKSAmIDB4Nyk8PDQpCisjZGVmaW5lIEFJX1NJX1dyaXRlX1N3aXRjaAkJCV9iaXQzCisjZGVmaW5lIEFJX1NDX0luaXRpYWxfTG9hZF9Tb3VyY2UJCV9iaXQyCisjZGVmaW5lIEFJX1NDX1JlbG9hZF9Nb2RlCQkJX2JpdDEKKyNkZWZpbmUgQUlfU0NfV3JpdGVfU3dpdGNoCQkJX2JpdDAKKworI2RlZmluZSBBSV9TSV9Mb2FkX0FfUmVnaXN0ZXJzCQkxNAorI2RlZmluZSBBSV9TSV9Mb2FkX0JfUmVnaXN0ZXJzCQkxNgorI2RlZmluZSBBSV9TQ19Mb2FkX0FfUmVnaXN0ZXJzCQkxOAorI2RlZmluZSBBSV9TQ19Mb2FkX0JfUmVnaXN0ZXJzCQkyMAorI2RlZmluZSBBSV9TSV9TYXZlX1JlZ2lzdGVycwkJNjQKKyNkZWZpbmUgQUlfU0NfU2F2ZV9SZWdpc3RlcnMJCTY2CisKKyNkZWZpbmUgQUlfU0kyX0xvYWRfQV9SZWdpc3RlcgkJMjMKKyNkZWZpbmUgQUlfU0kyX0xvYWRfQl9SZWdpc3RlcgkJMjUKKworI2RlZmluZSBKb2ludF9TdGF0dXNfMV9SZWdpc3RlciAgICAgICAgIDI3CisjZGVmaW5lIERJT19TZXJpYWxfSU9fSW5fUHJvZ3Jlc3NfU3QgICAgICAgICAgICBfYml0MTIKKworI2RlZmluZSBESU9fU2VyaWFsX0lucHV0X1JlZ2lzdGVyICAgICAgIDI4CisjZGVmaW5lIEpvaW50X1N0YXR1c18yX1JlZ2lzdGVyICAgICAgICAgMjkKK2VudW0gSm9pbnRfU3RhdHVzXzJfQml0cyB7CisJQU9fVE1SREFDV1JzX0luX1Byb2dyZXNzX1N0ID0gMHgyMCwKK307CisKKyNkZWZpbmUgQU9fTW9kZV8xX1JlZ2lzdGVyCQkzOAorI2RlZmluZSBBT19VUERBVEVfU291cmNlX1NlbGVjdCh4KQkJKCgoeCkmMHgxZik8PDExKQorI2RlZmluZSBBT19VSV9Tb3VyY2VfU2VsZWN0KHgpCQkJKCgoeCkmMHgxZik8PDYpCisjZGVmaW5lIEFPX011bHRpcGxlX0NoYW5uZWxzCQkJX2JpdDUKKyNkZWZpbmUgQU9fVVBEQVRFX1NvdXJjZV9Qb2xhcml0eQkJX2JpdDQKKyNkZWZpbmUgQU9fVUlfU291cmNlX1BvbGFyaXR5CQkJX2JpdDMKKyNkZWZpbmUgQU9fVUNfU3dpdGNoX0xvYWRfRXZlcnlfVEMJCV9iaXQyCisjZGVmaW5lIEFPX0NvbnRpbnVvdXMJCQkJX2JpdDEKKyNkZWZpbmUgQU9fVHJpZ2dlcl9PbmNlCQkJCV9iaXQwCisKKyNkZWZpbmUgQU9fTW9kZV8yX1JlZ2lzdGVyCQkzOQorI2RlZmluZSBBT19GSUZPX01vZGVfTWFzayAoIDB4MyA8PCAxNCApCitlbnVtIEFPX0ZJRk9fTW9kZV9CaXRzIHsKKwlBT19GSUZPX01vZGVfSEZfdG9fRiA9ICgzIDw8IDE0KSwKKwlBT19GSUZPX01vZGVfRiA9ICgyIDw8IDE0KSwKKwlBT19GSUZPX01vZGVfSEYgPSAoMSA8PCAxNCksCisJQU9fRklGT19Nb2RlX0UgPSAoMCA8PCAxNCksCit9OworI2RlZmluZSBBT19GSUZPX1JldHJhbnNtaXRfRW5hYmxlCQlfYml0MTMKKyNkZWZpbmUgQU9fU1RBUlQxX0Rpc2FibGUJCQlfYml0MTIKKyNkZWZpbmUgQU9fVUNfSW5pdGlhbF9Mb2FkX1NvdXJjZQkJX2JpdDExCisjZGVmaW5lIEFPX1VDX1dyaXRlX1N3aXRjaAkJCV9iaXQxMAorI2RlZmluZSBBT19VSTJfSW5pdGlhbF9Mb2FkX1NvdXJjZQkJX2JpdDkKKyNkZWZpbmUgQU9fVUkyX1JlbG9hZF9Nb2RlCQkJX2JpdDgKKyNkZWZpbmUgQU9fVUlfSW5pdGlhbF9Mb2FkX1NvdXJjZQkJX2JpdDcKKyNkZWZpbmUgQU9fVUlfUmVsb2FkX01vZGUoeCkJCQkoKCh4KSAmIDB4NykgPDwgNCkKKyNkZWZpbmUgQU9fVUlfV3JpdGVfU3dpdGNoCQkJX2JpdDMKKyNkZWZpbmUgQU9fQkNfSW5pdGlhbF9Mb2FkX1NvdXJjZQkJX2JpdDIKKyNkZWZpbmUgQU9fQkNfUmVsb2FkX01vZGUJCQlfYml0MQorI2RlZmluZSBBT19CQ19Xcml0ZV9Td2l0Y2gJCQlfYml0MAorCisjZGVmaW5lIEFPX1VJX0xvYWRfQV9SZWdpc3RlcgkJNDAKKyNkZWZpbmUgQU9fVUlfTG9hZF9BX1JlZ2lzdGVyX0hpZ2gJNDAKKyNkZWZpbmUgQU9fVUlfTG9hZF9BX1JlZ2lzdGVyX0xvdwk0MQorI2RlZmluZSBBT19VSV9Mb2FkX0JfUmVnaXN0ZXIJCTQyCisjZGVmaW5lIEFPX1VJX1NhdmVfUmVnaXN0ZXJzCQkxNgorI2RlZmluZSBBT19CQ19Mb2FkX0FfUmVnaXN0ZXIJCTQ0CisjZGVmaW5lIEFPX0JDX0xvYWRfQV9SZWdpc3Rlcl9IaWdoCTQ0CisjZGVmaW5lIEFPX0JDX0xvYWRfQV9SZWdpc3Rlcl9Mb3cJNDUKKyNkZWZpbmUgQU9fQkNfTG9hZF9CX1JlZ2lzdGVyCQk0NgorI2RlZmluZSBBT19CQ19Mb2FkX0JfUmVnaXN0ZXJfSGlnaAk0NgorI2RlZmluZSBBT19CQ19Mb2FkX0JfUmVnaXN0ZXJfTG93CTQ3CisjZGVmaW5lIEFPX0JDX1NhdmVfUmVnaXN0ZXJzCQkxOAorI2RlZmluZSBBT19VQ19Mb2FkX0FfUmVnaXN0ZXIJCTQ4CisjZGVmaW5lIEFPX1VDX0xvYWRfQV9SZWdpc3Rlcl9IaWdoCTQ4CisjZGVmaW5lIEFPX1VDX0xvYWRfQV9SZWdpc3Rlcl9Mb3cJNDkKKyNkZWZpbmUgQU9fVUNfTG9hZF9CX1JlZ2lzdGVyCQk1MAorI2RlZmluZSBBT19VQ19TYXZlX1JlZ2lzdGVycwkJMjAKKworI2RlZmluZSBDbG9ja19hbmRfRk9VVF9SZWdpc3RlcgkJNTYKK2VudW0gQ2xvY2tfYW5kX0ZPVVRfYml0cyB7CisJRk9VVF9FbmFibGUgPSBfYml0MTUsCisJRk9VVF9UaW1lYmFzZV9TZWxlY3QgPSBfYml0MTQsCisJRElPX1NlcmlhbF9PdXRfRGl2aWRlX0J5XzIgPSBfYml0MTMsCisJU2xvd19JbnRlcm5hbF9UaW1lX0RpdmlkZV9CeV8yID0gX2JpdDEyLAorCVNsb3dfSW50ZXJuYWxfVGltZWJhc2UgPSBfYml0MTEsCisJR19Tb3VyY2VfRGl2aWRlX0J5XzIgPSBfYml0MTAsCisJQ2xvY2tfVG9fQm9hcmRfRGl2aWRlX0J5XzIgPSBfYml0OSwKKwlDbG9ja19Ub19Cb2FyZCA9IF9iaXQ4LAorCUFJX091dHB1dF9EaXZpZGVfQnlfMiA9IF9iaXQ3LAorCUFJX1NvdXJjZV9EaXZpZGVfQnlfMiA9IF9iaXQ2LAorCUFPX091dHB1dF9EaXZpZGVfQnlfMiA9IF9iaXQ1LAorCUFPX1NvdXJjZV9EaXZpZGVfQnlfMiA9IF9iaXQ0LAorCUZPVVRfRGl2aWRlcl9tYXNrID0gMHhmCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBGT1VUX0RpdmlkZXIodW5zaWduZWQgZGl2aWRlcikKK3sKKwlyZXR1cm4gKGRpdmlkZXIgJiBGT1VUX0RpdmlkZXJfbWFzayk7Cit9CisKKyNkZWZpbmUgSU9fQmlkaXJlY3Rpb25fUGluX1JlZ2lzdGVyCTU3CisjZGVmaW5lCVJUU0lfVHJpZ19EaXJlY3Rpb25fUmVnaXN0ZXIJNTgKK2VudW0gUlRTSV9UcmlnX0RpcmVjdGlvbl9CaXRzIHsKKwlEcml2ZV9SVFNJX0Nsb2NrX0JpdCA9IDB4MSwKKwlVc2VfUlRTSV9DbG9ja19CaXQgPSAweDIsCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBSVFNJX091dHB1dF9CaXQodW5zaWduZWQgY2hhbm5lbCwgaW50IGlzX21zZXJpZXMpCit7CisJdW5zaWduZWQgbWF4X2NoYW5uZWw7CisJdW5zaWduZWQgYmFzZV9iaXRfc2hpZnQ7CisJaWYgKGlzX21zZXJpZXMpIHsKKwkJYmFzZV9iaXRfc2hpZnQgPSA4OworCQltYXhfY2hhbm5lbCA9IDc7CisJfSBlbHNlIHsKKwkJYmFzZV9iaXRfc2hpZnQgPSA5OworCQltYXhfY2hhbm5lbCA9IDY7CisJfQorCWlmIChjaGFubmVsID4gbWF4X2NoYW5uZWwpIHsKKwkJcnRfcHJpbnRrKCIlczogYnVnLCBpbnZhbGlkIFJUU0lfY2hhbm5lbD0laVxuIiwgX19GVU5DVElPTl9fLAorCQkJY2hhbm5lbCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMSA8PCAoYmFzZV9iaXRfc2hpZnQgKyBjaGFubmVsKTsKK30KKworI2RlZmluZSBJbnRlcnJ1cHRfQ29udHJvbF9SZWdpc3Rlcgk1OQorI2RlZmluZSBJbnRlcnJ1cHRfQl9FbmFibGUJCQlfYml0MTUKKyNkZWZpbmUgSW50ZXJydXB0X0JfT3V0cHV0X1NlbGVjdCh4KQkJKCh4KTw8MTIpCisjZGVmaW5lIEludGVycnVwdF9BX0VuYWJsZQkJCV9iaXQxMQorI2RlZmluZSBJbnRlcnJ1cHRfQV9PdXRwdXRfU2VsZWN0KHgpCQkoKHgpPDw4KQorI2RlZmluZSBQYXNzX1RocnVfMF9JbnRlcnJ1cHRfUG9sYXJpdHkJCV9iaXQzCisjZGVmaW5lIFBhc3NfVGhydV8xX0ludGVycnVwdF9Qb2xhcml0eQkJX2JpdDIKKyNkZWZpbmUgSW50ZXJydXB0X091dHB1dF9Pbl8zX1BpbnMJCV9iaXQxCisjZGVmaW5lIEludGVycnVwdF9PdXRwdXRfUG9sYXJpdHkJCV9iaXQwCisKKyNkZWZpbmUgQUlfT3V0cHV0X0NvbnRyb2xfUmVnaXN0ZXIJNjAKKyNkZWZpbmUgQUlfU1RBUlRfT3V0cHV0X1NlbGVjdAkJCV9iaXQxMAorI2RlZmluZSBBSV9TQ0FOX0lOX1BST0dfT3V0cHV0X1NlbGVjdCh4KQkoKCh4KSAmIDB4MykgPDwgOCkKKyNkZWZpbmUgQUlfRVhUTVVYX0NMS19PdXRwdXRfU2VsZWN0KHgpCQkoKCh4KSAmIDB4MykgPDwgNikKKyNkZWZpbmUgQUlfTE9DQUxNVVhfQ0xLX091dHB1dF9TZWxlY3QoeCkJKCh4KTw8NCkKKyNkZWZpbmUgQUlfU0NfVENfT3V0cHV0X1NlbGVjdCh4KQkJKCh4KTw8MikKK2VudW0gYWlfY29udmVydF9vdXRwdXRfc2VsZWN0aW9uIHsKKwlBSV9DT05WRVJUX091dHB1dF9IaWdoX1ogPSAwLAorCUFJX0NPTlZFUlRfT3V0cHV0X0dyb3VuZCA9IDEsCisJQUlfQ09OVkVSVF9PdXRwdXRfRW5hYmxlX0xvdyA9IDIsCisJQUlfQ09OVkVSVF9PdXRwdXRfRW5hYmxlX0hpZ2ggPSAzCit9Oworc3RhdGljIHVuc2lnbmVkIEFJX0NPTlZFUlRfT3V0cHV0X1NlbGVjdChlbnVtIGFpX2NvbnZlcnRfb3V0cHV0X3NlbGVjdGlvbgorCXNlbGVjdGlvbikKK3sKKwlyZXR1cm4gc2VsZWN0aW9uICYgMHgzOworfQorCisjZGVmaW5lIEFJX1NUQVJUX1NUT1BfU2VsZWN0X1JlZ2lzdGVyCTYyCisjZGVmaW5lIEFJX1NUQVJUX1BvbGFyaXR5CQkJX2JpdDE1CisjZGVmaW5lIEFJX1NUT1BfUG9sYXJpdHkJCQlfYml0MTQKKyNkZWZpbmUgQUlfU1RPUF9TeW5jCQkJCV9iaXQxMworI2RlZmluZSBBSV9TVE9QX0VkZ2UJCQkJX2JpdDEyCisjZGVmaW5lIEFJX1NUT1BfU2VsZWN0KGEpCQkJKCgoYSkgJiAweDFmKTw8NykKKyNkZWZpbmUgQUlfU1RBUlRfU3luYwkJCQlfYml0NgorI2RlZmluZSBBSV9TVEFSVF9FZGdlCQkJCV9iaXQ1CisjZGVmaW5lIEFJX1NUQVJUX1NlbGVjdChhKQkJCSgoYSkgJiAweDFmKQorCisjZGVmaW5lIEFJX1RyaWdnZXJfU2VsZWN0X1JlZ2lzdGVyCTYzCisjZGVmaW5lIEFJX1NUQVJUMV9Qb2xhcml0eQkJCV9iaXQxNQorI2RlZmluZSBBSV9TVEFSVDJfUG9sYXJpdHkJCQlfYml0MTQKKyNkZWZpbmUgQUlfU1RBUlQyX1N5bmMJCQkJX2JpdDEzCisjZGVmaW5lIEFJX1NUQVJUMl9FZGdlCQkJCV9iaXQxMgorI2RlZmluZSBBSV9TVEFSVDJfU2VsZWN0KGEpCQkJKCgoYSkgJiAweDFmKSA8PCA3KQorI2RlZmluZSBBSV9TVEFSVDFfU3luYwkJCQlfYml0NgorI2RlZmluZSBBSV9TVEFSVDFfRWRnZQkJCQlfYml0NQorI2RlZmluZSBBSV9TVEFSVDFfU2VsZWN0KGEpCQkJKChhKSAmIDB4MWYpCisKKyNkZWZpbmUgQUlfRElWX0xvYWRfQV9SZWdpc3Rlcgk2NAorCisjZGVmaW5lIEFPX1N0YXJ0X1NlbGVjdF9SZWdpc3Rlcgk2NgorI2RlZmluZSBBT19VSTJfU29mdHdhcmVfR2F0ZQkJCV9iaXQxNQorI2RlZmluZSBBT19VSTJfRXh0ZXJuYWxfR2F0ZV9Qb2xhcml0eQkJX2JpdDE0CisjZGVmaW5lIEFPX1NUQVJUX1BvbGFyaXR5CQkJX2JpdDEzCisjZGVmaW5lIEFPX0FPRlJFUV9FbmFibGUJCQlfYml0MTIKKyNkZWZpbmUgQU9fVUkyX0V4dGVybmFsX0dhdGVfU2VsZWN0KGEpCQkoKChhKSAmIDB4MWYpIDw8IDcpCisjZGVmaW5lIEFPX1NUQVJUX1N5bmMJCQkJX2JpdDYKKyNkZWZpbmUgQU9fU1RBUlRfRWRnZQkJCQlfYml0NQorI2RlZmluZSBBT19TVEFSVF9TZWxlY3QoYSkJCQkoKGEpICYgMHgxZikKKworI2RlZmluZSBBT19UcmlnZ2VyX1NlbGVjdF9SZWdpc3Rlcgk2NworI2RlZmluZSBBT19VSTJfRXh0ZXJuYWxfR2F0ZV9FbmFibGUJCV9iaXQxNQorI2RlZmluZSBBT19EZWxheWVkX1NUQVJUMQkJCV9iaXQxNAorI2RlZmluZSBBT19TVEFSVDFfUG9sYXJpdHkJCQlfYml0MTMKKyNkZWZpbmUgQU9fVUkyX1NvdXJjZV9Qb2xhcml0eQkJCV9iaXQxMgorI2RlZmluZSBBT19VSTJfU291cmNlX1NlbGVjdCh4KQkJCSgoKHgpJjB4MWYpPDw3KQorI2RlZmluZSBBT19TVEFSVDFfU3luYwkJCQlfYml0NgorI2RlZmluZSBBT19TVEFSVDFfRWRnZQkJCQlfYml0NQorI2RlZmluZSBBT19TVEFSVDFfU2VsZWN0KHgpCQkJKCgoeCkmMHgxZik8PDApCisKKyNkZWZpbmUgQU9fTW9kZV8zX1JlZ2lzdGVyCQk3MAorI2RlZmluZSBBT19VSTJfU3dpdGNoX0xvYWRfTmV4dF9UQwkJX2JpdDEzCisjZGVmaW5lIEFPX1VDX1N3aXRjaF9Mb2FkX0V2ZXJ5X0JDX1RDCQlfYml0MTIKKyNkZWZpbmUgQU9fVHJpZ2dlcl9MZW5ndGgJCQlfYml0MTEKKyNkZWZpbmUgQU9fU3RvcF9Pbl9PdmVycnVuX0Vycm9yCQlfYml0NQorI2RlZmluZSBBT19TdG9wX09uX0JDX1RDX1RyaWdnZXJfRXJyb3IJCV9iaXQ0CisjZGVmaW5lIEFPX1N0b3BfT25fQkNfVENfRXJyb3IJCQlfYml0MworI2RlZmluZSBBT19Ob3RfQW5fVVBEQVRFCQkJX2JpdDIKKyNkZWZpbmUgQU9fU29mdHdhcmVfR2F0ZQkJCV9iaXQxCisjZGVmaW5lIEFPX0xhc3RfR2F0ZV9EaXNhYmxlCQlfYml0MAkvKiBNIFNlcmllcyBvbmx5ICovCisKKyNkZWZpbmUgSm9pbnRfUmVzZXRfUmVnaXN0ZXIJCTcyCisjZGVmaW5lIFNvZnR3YXJlX1Jlc2V0CQkJX2JpdDExCisjZGVmaW5lIEFPX0NvbmZpZ3VyYXRpb25fRW5kCQkJX2JpdDkKKyNkZWZpbmUgQUlfQ29uZmlndXJhdGlvbl9FbmQJCQlfYml0OAorI2RlZmluZSBBT19Db25maWd1cmF0aW9uX1N0YXJ0CQkJX2JpdDUKKyNkZWZpbmUgQUlfQ29uZmlndXJhdGlvbl9TdGFydAkJCV9iaXQ0CisjZGVmaW5lIEcxX1Jlc2V0CQkJCV9iaXQzCisjZGVmaW5lIEcwX1Jlc2V0CQkJCV9iaXQyCisjZGVmaW5lIEFPX1Jlc2V0CQkJCV9iaXQxCisjZGVmaW5lIEFJX1Jlc2V0CQkJCV9iaXQwCisKKyNkZWZpbmUgSW50ZXJydXB0X0FfRW5hYmxlX1JlZ2lzdGVyCTczCisjZGVmaW5lIFBhc3NfVGhydV8wX0ludGVycnVwdF9FbmFibGUJCV9iaXQ5CisjZGVmaW5lIEcwX0dhdGVfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDgKKyNkZWZpbmUgQUlfRklGT19JbnRlcnJ1cHRfRW5hYmxlCQlfYml0NworI2RlZmluZSBHMF9UQ19JbnRlcnJ1cHRfRW5hYmxlCQkJX2JpdDYKKyNkZWZpbmUgQUlfRXJyb3JfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDUKKyNkZWZpbmUgQUlfU1RPUF9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0NAorI2RlZmluZSBBSV9TVEFSVF9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0MworI2RlZmluZSBBSV9TVEFSVDJfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDIKKyNkZWZpbmUgQUlfU1RBUlQxX0ludGVycnVwdF9FbmFibGUJCV9iaXQxCisjZGVmaW5lIEFJX1NDX1RDX0ludGVycnVwdF9FbmFibGUJCV9iaXQwCisKKyNkZWZpbmUgSW50ZXJydXB0X0JfRW5hYmxlX1JlZ2lzdGVyCTc1CisjZGVmaW5lIFBhc3NfVGhydV8xX0ludGVycnVwdF9FbmFibGUJCV9iaXQxMQorI2RlZmluZSBHMV9HYXRlX0ludGVycnVwdF9FbmFibGUJCV9iaXQxMAorI2RlZmluZSBHMV9UQ19JbnRlcnJ1cHRfRW5hYmxlCQkJX2JpdDkKKyNkZWZpbmUgQU9fRklGT19JbnRlcnJ1cHRfRW5hYmxlCQlfYml0OAorI2RlZmluZSBBT19VSTJfVENfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDcKKyNkZWZpbmUgQU9fVUNfVENfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDYKKyNkZWZpbmUgQU9fRXJyb3JfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDUKKyNkZWZpbmUgQU9fU1RPUF9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0NAorI2RlZmluZSBBT19TVEFSVF9JbnRlcnJ1cHRfRW5hYmxlCQlfYml0MworI2RlZmluZSBBT19VUERBVEVfSW50ZXJydXB0X0VuYWJsZQkJX2JpdDIKKyNkZWZpbmUgQU9fU1RBUlQxX0ludGVycnVwdF9FbmFibGUJCV9iaXQxCisjZGVmaW5lIEFPX0JDX1RDX0ludGVycnVwdF9FbmFibGUJCV9iaXQwCisKKyNkZWZpbmUgU2Vjb25kX0lSUV9BX0VuYWJsZV9SZWdpc3Rlcgk3NAorZW51bSBTZWNvbmRfSVJRX0FfRW5hYmxlX0JpdHMgeworCUFJX1NDX1RDX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDAsCisJQUlfU1RBUlQxX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDEsCisJQUlfU1RBUlQyX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDIsCisJQUlfU1RBUlRfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0MywKKwlBSV9TVE9QX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDQsCisJQUlfRXJyb3JfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0NSwKKwlHMF9UQ19TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQ2LAorCUFJX0ZJRk9fU2Vjb25kX0lycV9FbmFibGUgPSBfYml0NywKKwlHMF9HYXRlX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDgsCisJUGFzc19UaHJ1XzBfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0OQorfTsKKworI2RlZmluZSBTZWNvbmRfSVJRX0JfRW5hYmxlX1JlZ2lzdGVyCTc2CitlbnVtIFNlY29uZF9JUlFfQl9FbmFibGVfQml0cyB7CisJQU9fQkNfVENfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0MCwKKwlBT19TVEFSVDFfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0MSwKKwlBT19VUERBVEVfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0MiwKKwlBT19TVEFSVF9TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQzLAorCUFPX1NUT1BfU2Vjb25kX0lycV9FbmFibGUgPSBfYml0NCwKKwlBT19FcnJvcl9TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQ1LAorCUFPX1VDX1RDX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDYsCisJQU9fVUkyX1RDX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDcsCisJQU9fRklGT19TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQ4LAorCUcxX1RDX1NlY29uZF9JcnFfRW5hYmxlID0gX2JpdDksCisJRzFfR2F0ZV9TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQxMCwKKwlQYXNzX1RocnVfMV9TZWNvbmRfSXJxX0VuYWJsZSA9IF9iaXQxMQorfTsKKworI2RlZmluZSBBSV9QZXJzb25hbF9SZWdpc3RlcgkJNzcKKyNkZWZpbmUgQUlfU0hJRlRJTl9QdWxzZV9XaWR0aAkJCV9iaXQxNQorI2RlZmluZSBBSV9FT0NfUG9sYXJpdHkJCQkJX2JpdDE0CisjZGVmaW5lIEFJX1NPQ19Qb2xhcml0eQkJCQlfYml0MTMKKyNkZWZpbmUgQUlfU0hJRlRJTl9Qb2xhcml0eQkJCV9iaXQxMgorI2RlZmluZSBBSV9DT05WRVJUX1B1bHNlX1RpbWViYXNlCQlfYml0MTEKKyNkZWZpbmUgQUlfQ09OVkVSVF9QdWxzZV9XaWR0aAkJCV9iaXQxMAorI2RlZmluZSBBSV9DT05WRVJUX09yaWdpbmFsX1B1bHNlCQlfYml0OQorI2RlZmluZSBBSV9GSUZPX0ZsYWdzX1BvbGFyaXR5CQkJX2JpdDgKKyNkZWZpbmUgQUlfT3ZlcnJ1bl9Nb2RlCQkJCV9iaXQ3CisjZGVmaW5lIEFJX0VYVE1VWF9DTEtfUHVsc2VfV2lkdGgJCV9iaXQ2CisjZGVmaW5lIEFJX0xPQ0FMTVVYX0NMS19QdWxzZV9XaWR0aAkJX2JpdDUKKyNkZWZpbmUgQUlfQUlGUkVRX1BvbGFyaXR5CQkJX2JpdDQKKworI2RlZmluZSBBT19QZXJzb25hbF9SZWdpc3RlcgkJNzgKK2VudW0gQU9fUGVyc29uYWxfQml0cyB7CisJQU9fSW50ZXJ2YWxfQnVmZmVyX01vZGUgPSAxIDw8IDMsCisJQU9fQkNfU291cmNlX1NlbGVjdCA9IDEgPDwgNCwKKwlBT19VUERBVEVfUHVsc2VfV2lkdGggPSAxIDw8IDUsCisJQU9fVVBEQVRFX1B1bHNlX1RpbWViYXNlID0gMSA8PCA2LAorCUFPX1VQREFURV9PcmlnaW5hbF9QdWxzZSA9IDEgPDwgNywKKwlBT19ETUFfUElPX0NvbnRyb2wgPSAxIDw8IDgsCS8qIE0gU2VyaWVzOiByZXNlcnZlZCAqLworCUFPX0FPRlJFUV9Qb2xhcml0eSA9IDEgPDwgOSwJLyogTSBTZXJpZXM6IHJlc2VydmVkICovCisJQU9fRklGT19FbmFibGUgPSAxIDw8IDEwLAorCUFPX0ZJRk9fRmxhZ3NfUG9sYXJpdHkgPSAxIDw8IDExLAkvKiBNIFNlcmllczogcmVzZXJ2ZWQgKi8KKwlBT19UTVJEQUNXUl9QdWxzZV9XaWR0aCA9IDEgPDwgMTIsCisJQU9fRmFzdF9DUFUgPSAxIDw8IDEzLAkvKiBNIFNlcmllczogcmVzZXJ2ZWQgKi8KKwlBT19OdW1iZXJfT2ZfREFDX1BhY2thZ2VzID0gMSA8PCAxNCwJLy8gMSBmb3IgInNpbmdsZSIgbW9kZSwgMCBmb3IgImR1YWwiCisJQU9fTXVsdGlwbGVfREFDU19QZXJfUGFja2FnZSA9IDEgPDwgMTUJLy8gbS1zZXJpZXMgb25seQorfTsKKyNkZWZpbmUJUlRTSV9UcmlnX0FfT3V0cHV0X1JlZ2lzdGVyCTc5CisjZGVmaW5lCVJUU0lfVHJpZ19CX091dHB1dF9SZWdpc3Rlcgk4MAorZW51bSBSVFNJX1RyaWdfQl9PdXRwdXRfQml0cyB7CisJUlRTSV9TdWJfU2VsZWN0aW9uXzFfQml0ID0gMHg4MDAwCS8vIG5vdCBmb3IgbS1zZXJpZXMKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIFJUU0lfVHJpZ19PdXRwdXRfQml0cyh1bnNpZ25lZCBydHNpX2NoYW5uZWwsCisJdW5zaWduZWQgc291cmNlKQoreworCXJldHVybiAoc291cmNlICYgMHhmKSA8PCAoKHJ0c2lfY2hhbm5lbCAlIDQpICogNCk7Cit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBSVFNJX1RyaWdfT3V0cHV0X01hc2sodW5zaWduZWQgcnRzaV9jaGFubmVsKQoreworCXJldHVybiAweGYgPDwgKChydHNpX2NoYW5uZWwgJSA0KSAqIDQpOworfTsKKworLy8gaW52ZXJzZSB0byBSVFNJX1RyaWdfT3V0cHV0X0JpdHMoKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBSVFNJX1RyaWdfT3V0cHV0X1NvdXJjZSh1bnNpZ25lZCBydHNpX2NoYW5uZWwsCisJdW5zaWduZWQgYml0cykKK3sKKwlyZXR1cm4gKGJpdHMgPj4gKChydHNpX2NoYW5uZWwgJSA0KSAqIDQpKSAmIDB4ZjsKK307CisKKyNkZWZpbmUJUlRTSV9Cb2FyZF9SZWdpc3RlcgkJODEKKyNkZWZpbmUgV3JpdGVfU3Ryb2JlXzBfUmVnaXN0ZXIJCTgyCisjZGVmaW5lIFdyaXRlX1N0cm9iZV8xX1JlZ2lzdGVyCQk4MworI2RlZmluZSBXcml0ZV9TdHJvYmVfMl9SZWdpc3RlcgkJODQKKyNkZWZpbmUgV3JpdGVfU3Ryb2JlXzNfUmVnaXN0ZXIJCTg1CisKKyNkZWZpbmUgQU9fT3V0cHV0X0NvbnRyb2xfUmVnaXN0ZXIJODYKKyNkZWZpbmUgQU9fRXh0ZXJuYWxfR2F0ZV9FbmFibGUJCQlfYml0MTUKKyNkZWZpbmUgQU9fRXh0ZXJuYWxfR2F0ZV9TZWxlY3QoeCkJCSgoKHgpJjB4MWYpPDwxMCkKKyNkZWZpbmUgQU9fTnVtYmVyX09mX0NoYW5uZWxzKHgpCQkoKCh4KSYweGYpPDw2KQorI2RlZmluZSBBT19VUERBVEUyX091dHB1dF9TZWxlY3QoeCkJCSgoKHgpJjB4Myk8PDQpCisjZGVmaW5lIEFPX0V4dGVybmFsX0dhdGVfUG9sYXJpdHkJCV9iaXQzCisjZGVmaW5lIEFPX1VQREFURTJfT3V0cHV0X1RvZ2dsZQkJX2JpdDIKK2VudW0gYW9fdXBkYXRlX291dHB1dF9zZWxlY3Rpb24geworCUFPX1VwZGF0ZV9PdXRwdXRfSGlnaF9aID0gMCwKKwlBT19VcGRhdGVfT3V0cHV0X0dyb3VuZCA9IDEsCisJQU9fVXBkYXRlX091dHB1dF9FbmFibGVfTG93ID0gMiwKKwlBT19VcGRhdGVfT3V0cHV0X0VuYWJsZV9IaWdoID0gMworfTsKK3N0YXRpYyB1bnNpZ25lZCBBT19VUERBVEVfT3V0cHV0X1NlbGVjdChlbnVtIGFvX3VwZGF0ZV9vdXRwdXRfc2VsZWN0aW9uCisJc2VsZWN0aW9uKQoreworCXJldHVybiBzZWxlY3Rpb24gJiAweDM7Cit9CisKKyNkZWZpbmUgQUlfTW9kZV8zX1JlZ2lzdGVyCQk4NworI2RlZmluZSBBSV9UcmlnZ2VyX0xlbmd0aAkJCV9iaXQxNQorI2RlZmluZSBBSV9EZWxheV9TVEFSVAkJCQlfYml0MTQKKyNkZWZpbmUgQUlfU29mdHdhcmVfR2F0ZQkJCV9iaXQxMworI2RlZmluZSBBSV9TSV9TcGVjaWFsX1RyaWdnZXJfRGVsYXkJCV9iaXQxMgorI2RlZmluZSBBSV9TSTJfU291cmNlX1NlbGVjdAkJCV9iaXQxMQorI2RlZmluZSBBSV9EZWxheWVkX1NUQVJUMgkJCV9iaXQxMAorI2RlZmluZSBBSV9EZWxheWVkX1NUQVJUMQkJCV9iaXQ5CisjZGVmaW5lIEFJX0V4dGVybmFsX0dhdGVfTW9kZQkJCV9iaXQ4CisjZGVmaW5lIEFJX0ZJRk9fTW9kZV9IRl90b19FCQkJKDM8PDYpCisjZGVmaW5lIEFJX0ZJRk9fTW9kZV9GCQkJCSgyPDw2KQorI2RlZmluZSBBSV9GSUZPX01vZGVfSEYJCQkJKDE8PDYpCisjZGVmaW5lIEFJX0ZJRk9fTW9kZV9ORQkJCQkoMDw8NikKKyNkZWZpbmUgQUlfRXh0ZXJuYWxfR2F0ZV9Qb2xhcml0eQkJX2JpdDUKKyNkZWZpbmUgQUlfRXh0ZXJuYWxfR2F0ZV9TZWxlY3QoYSkJCSgoYSkgJiAweDFmKQorCisjZGVmaW5lIEdfQXV0b2luY3JlbWVudF9SZWdpc3RlcihhKQkoNjgrKGEpKQorI2RlZmluZSBHX0NvbW1hbmRfUmVnaXN0ZXIoYSkJCSg2KyhhKSkKKyNkZWZpbmUgR19IV19TYXZlX1JlZ2lzdGVyKGEpCQkoOCsoYSkqMikKKyNkZWZpbmUgR19IV19TYXZlX1JlZ2lzdGVyX0hpZ2goYSkJKDgrKGEpKjIpCisjZGVmaW5lIEdfSFdfU2F2ZV9SZWdpc3Rlcl9Mb3coYSkJKDkrKGEpKjIpCisjZGVmaW5lIEdfSW5wdXRfU2VsZWN0X1JlZ2lzdGVyKGEpCSgzNisoYSkpCisjZGVmaW5lIEdfTG9hZF9BX1JlZ2lzdGVyKGEpCQkoMjgrKGEpKjQpCisjZGVmaW5lIEdfTG9hZF9BX1JlZ2lzdGVyX0hpZ2goYSkJKDI4KyhhKSo0KQorI2RlZmluZSBHX0xvYWRfQV9SZWdpc3Rlcl9Mb3coYSkJKDI5KyhhKSo0KQorI2RlZmluZSBHX0xvYWRfQl9SZWdpc3RlcihhKQkJKDMwKyhhKSo0KQorI2RlZmluZSBHX0xvYWRfQl9SZWdpc3Rlcl9IaWdoKGEpCSgzMCsoYSkqNCkKKyNkZWZpbmUgR19Mb2FkX0JfUmVnaXN0ZXJfTG93KGEpCSgzMSsoYSkqNCkKKyNkZWZpbmUgR19Nb2RlX1JlZ2lzdGVyKGEpCQkoMjYrKGEpKQorI2RlZmluZSBHX1NhdmVfUmVnaXN0ZXIoYSkJCSgxMisoYSkqMikKKyNkZWZpbmUgR19TYXZlX1JlZ2lzdGVyX0hpZ2goYSkJCSgxMisoYSkqMikKKyNkZWZpbmUgR19TYXZlX1JlZ2lzdGVyX0xvdyhhKQkJKDEzKyhhKSoyKQorI2RlZmluZSBHX1N0YXR1c19SZWdpc3RlcgkJNAorI2RlZmluZSBBbmFsb2dfVHJpZ2dlcl9FdGNfUmVnaXN0ZXIJNjEKKworLyogY29tbWFuZCByZWdpc3RlciAqLworI2RlZmluZSBHX0Rpc2FybV9Db3B5CQkJX2JpdDE1CS8qIHN0cm9iZSAqLworI2RlZmluZSBHX1NhdmVfVHJhY2VfQ29weQkJX2JpdDE0CisjZGVmaW5lIEdfQXJtX0NvcHkJCQlfYml0MTMJLyogc3Ryb2JlICovCisjZGVmaW5lIEdfQmFua19Td2l0Y2hfU3RhcnQJCV9iaXQxMAkvKiBzdHJvYmUgKi8KKyNkZWZpbmUgR19MaXR0bGVfQmlnX0VuZGlhbgkJX2JpdDkKKyNkZWZpbmUgR19TeW5jaHJvbml6ZWRfR2F0ZQkJX2JpdDgKKyNkZWZpbmUgR19Xcml0ZV9Td2l0Y2gJCQlfYml0NworI2RlZmluZSBHX1VwX0Rvd24oYSkJCQkoKChhKSYweDAzKTw8NSkKKyNkZWZpbmUgR19EaXNhcm0JCQlfYml0NAkvKiBzdHJvYmUgKi8KKyNkZWZpbmUgR19BbmFsb2dfVHJpZ2dlcl9SZXNldAkJX2JpdDMJLyogc3Ryb2JlICovCisjZGVmaW5lIEdfU2F2ZV9UcmFjZQkJCV9iaXQxCisjZGVmaW5lIEdfQXJtCQkJCV9iaXQwCS8qIHN0cm9iZSAqLworCisvKmNoYW5uZWwgYWdub3N0aWMgbmFtZXMgZm9yIHRoZSBjb21tYW5kIHJlZ2lzdGVyICNkZWZpbmVzICovCisjZGVmaW5lIEdfQmFua19Td2l0Y2hfRW5hYmxlCQlfYml0MTIKKyNkZWZpbmUgR19CYW5rX1N3aXRjaF9Nb2RlCQlfYml0MTEKKyNkZWZpbmUgR19Mb2FkCQkJCV9iaXQyCS8qIHN0cm9iZSAqLworCisvKiBpbnB1dCBzZWxlY3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgR19HYXRlX1NlbGVjdChhKQkJKCgoYSkmMHgxZik8PDcpCisjZGVmaW5lIEdfU291cmNlX1NlbGVjdChhKQkJKCgoYSkmMHgxZik8PDIpCisjZGVmaW5lIEdfV3JpdGVfQWNrbm93bGVkZ2VzX0lycQlfYml0MQorI2RlZmluZSBHX1JlYWRfQWNrbm93bGVkZ2VzX0lycQkJX2JpdDAKKworLyogc2FtZSBpbnB1dCBzZWxlY3QgcmVnaXN0ZXIsIGJ1dCB3aXRoIGNoYW5uZWwgYWdub3N0aWMgbmFtZXMgKi8KKyNkZWZpbmUgR19Tb3VyY2VfUG9sYXJpdHkJCV9iaXQxNQorI2RlZmluZSBHX091dHB1dF9Qb2xhcml0eQkJX2JpdDE0CisjZGVmaW5lIEdfT1JfR2F0ZQkJCV9iaXQxMworI2RlZmluZSBHX0dhdGVfU2VsZWN0X0xvYWRfU291cmNlCV9iaXQxMgorCisvKiBtb2RlIHJlZ2lzdGVyICovCisjZGVmaW5lIEdfTG9hZGluZ19Pbl9UQwkJCV9iaXQxMgorI2RlZmluZSBHX091dHB1dF9Nb2RlKGEpCQkoKChhKSYweDAzKTw8OCkKKyNkZWZpbmUgR19UcmlnZ2VyX01vZGVfRm9yX0VkZ2VfR2F0ZShhKQkoKChhKSYweDAzKTw8MykKKyNkZWZpbmUgR19HYXRpbmdfTW9kZShhKQkJKCgoYSkmMHgwMyk8PDApCisKKy8qIHNhbWUgaW5wdXQgbW9kZSByZWdpc3RlciwgYnV0IHdpdGggY2hhbm5lbCBhZ25vc3RpYyBuYW1lcyAqLworI2RlZmluZSBHX0xvYWRfU291cmNlX1NlbGVjdAkJX2JpdDcKKyNkZWZpbmUgR19SZWxvYWRfU291cmNlX1N3aXRjaGluZwlfYml0MTUKKyNkZWZpbmUgR19Mb2FkaW5nX09uX0dhdGUJCV9iaXQxNAorI2RlZmluZSBHX0dhdGVfUG9sYXJpdHkgCQlfYml0MTMKKworI2RlZmluZSBHX0NvdW50aW5nX09uY2UoYSkJCSgoKGEpJjB4MDMpPDwxMCkKKyNkZWZpbmUgR19TdG9wX01vZGUoYSkJCQkoKChhKSYweDAzKTw8NSkKKyNkZWZpbmUgR19HYXRlX09uX0JvdGhfRWRnZXMJCV9iaXQyCisKKy8qIEdfU3RhdHVzX1JlZ2lzdGVyICovCisjZGVmaW5lIEcxX0dhdGVfRXJyb3JfU3QJCV9iaXQxNQorI2RlZmluZSBHMF9HYXRlX0Vycm9yX1N0CQlfYml0MTQKKyNkZWZpbmUgRzFfVENfRXJyb3JfU3QJCQlfYml0MTMKKyNkZWZpbmUgRzBfVENfRXJyb3JfU3QJCQlfYml0MTIKKyNkZWZpbmUgRzFfTm9fTG9hZF9CZXR3ZWVuX0dhdGVzX1N0CV9iaXQxMQorI2RlZmluZSBHMF9Ob19Mb2FkX0JldHdlZW5fR2F0ZXNfU3QJX2JpdDEwCisjZGVmaW5lIEcxX0FybWVkX1N0CQkJX2JpdDkKKyNkZWZpbmUgRzBfQXJtZWRfU3QJCQlfYml0OAorI2RlZmluZSBHMV9TdGFsZV9EYXRhX1N0CQlfYml0NworI2RlZmluZSBHMF9TdGFsZV9EYXRhX1N0CQlfYml0NgorI2RlZmluZSBHMV9OZXh0X0xvYWRfU291cmNlX1N0CQlfYml0NQorI2RlZmluZSBHMF9OZXh0X0xvYWRfU291cmNlX1N0CQlfYml0NAorI2RlZmluZSBHMV9Db3VudGluZ19TdAkJCV9iaXQzCisjZGVmaW5lIEcwX0NvdW50aW5nX1N0CQkJX2JpdDIKKyNkZWZpbmUgRzFfU2F2ZV9TdAkJCV9iaXQxCisjZGVmaW5lIEcwX1NhdmVfU3QJCQlfYml0MAorCisvKiBnZW5lcmFsIHB1cnBvc2UgY291bnRlciB0aW1lciAqLworI2RlZmluZSBHX0F1dG9pbmNyZW1lbnQoYSkgICAgICAgICAgICAgICgoYSk8PDApCisKKy8qQW5hbG9nX1RyaWdnZXJfRXRjX1JlZ2lzdGVyKi8KKyNkZWZpbmUgQW5hbG9nX1RyaWdnZXJfTW9kZSh4KSAoKHgpICYgMHg3KQorI2RlZmluZSBBbmFsb2dfVHJpZ2dlcl9FbmFibGUgX2JpdDMKKyNkZWZpbmUgQW5hbG9nX1RyaWdnZXJfRHJpdmUgX2JpdDQKKyNkZWZpbmUgR1BGT18xX091dHB1dF9TZWxlY3QJCV9iaXQ3CisjZGVmaW5lIEdQRk9fMF9PdXRwdXRfU2VsZWN0KGEpCQkoKGEpPDwxMSkKKyNkZWZpbmUgR1BGT18wX091dHB1dF9FbmFibGUJCV9iaXQxNAorI2RlZmluZSBHUEZPXzFfT3V0cHV0X0VuYWJsZQkJX2JpdDE1CisKKy8qIEFkZGl0aW9uYWwgd2luZG93ZWQgcmVnaXN0ZXJzIHVuaXF1ZSB0byBFIHNlcmllcyAqLworCisvKiAxNiBiaXQgcmVnaXN0ZXJzIHNoYWRvd2VkIGZyb20gREFRLVNUQyAqLworI2RlZmluZSBXaW5kb3dfQWRkcmVzcwkJCTB4MDAKKyNkZWZpbmUgV2luZG93X0RhdGEJCQkweDAyCisKKyNkZWZpbmUgQ29uZmlndXJhdGlvbl9NZW1vcnlfQ2xlYXIJODIKKyNkZWZpbmUgQURDX0ZJRk9fQ2xlYXIJCQk4MworI2RlZmluZSBEQUNfRklGT19DbGVhcgkJCTg0CisKKy8qIGkvbyBwb3J0IG9mZnNldHMgKi8KKworLyogOCBiaXQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFhYWF9TdGF0dXMJCQkweDAxCitlbnVtIFhYWF9TdGF0dXNfQml0cyB7CisJUFJPTU9VVCA9IDB4MSwKKwlBSV9GSUZPX0xPV0VSX05PVF9FTVBUWSA9IDB4OCwKK307CisjZGVmaW5lIFNlcmlhbF9Db21tYW5kCQkJMHgwZAorI2RlZmluZSBNaXNjX0NvbW1hbmQJCQkweDBmCisjZGVmaW5lIFBvcnRfQQkJCQkweDE5CisjZGVmaW5lIFBvcnRfQgkJCQkweDFiCisjZGVmaW5lIFBvcnRfQwkJCQkweDFkCisjZGVmaW5lIENvbmZpZ3VyYXRpb24JCQkweDFmCisjZGVmaW5lIFN0cm9iZXMJCQkJMHgwMQorI2RlZmluZSBDaGFubmVsX0FfTW9kZQkJCTB4MDMKKyNkZWZpbmUgQ2hhbm5lbF9CX01vZGUJCQkweDA1CisjZGVmaW5lIENoYW5uZWxfQ19Nb2RlCQkJMHgwNworI2RlZmluZSBBSV9BT19TZWxlY3QJCQkweDA5CitlbnVtIEFJX0FPX1NlbGVjdF9CaXRzIHsKKwlBSV9ETUFfU2VsZWN0X1NoaWZ0ID0gMCwKKwlBSV9ETUFfU2VsZWN0X01hc2sgPSAweGYsCisJQU9fRE1BX1NlbGVjdF9TaGlmdCA9IDQsCisJQU9fRE1BX1NlbGVjdF9NYXNrID0gMHhmIDw8IEFPX0RNQV9TZWxlY3RfU2hpZnQKK307CisjZGVmaW5lIEcwX0cxX1NlbGVjdAkJCTB4MGIKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbmlfc3RjX2RtYV9jaGFubmVsX3NlbGVjdF9iaXRmaWVsZCh1bnNpZ25lZCBjaGFubmVsKQoreworCWlmIChjaGFubmVsIDwgNCkKKwkJcmV0dXJuIDEgPDwgY2hhbm5lbDsKKwlpZiAoY2hhbm5lbCA9PSA0KQorCQlyZXR1cm4gMHgzOworCWlmIChjaGFubmVsID09IDUpCisJCXJldHVybiAweDU7CisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIEdQQ1RfRE1BX1NlbGVjdF9CaXRzKHVuc2lnbmVkIGdwY3RfaW5kZXgsCisJdW5zaWduZWQgbWl0ZV9jaGFubmVsKQoreworCUJVR19PTihncGN0X2luZGV4ID4gMSk7CisJcmV0dXJuIG5pX3N0Y19kbWFfY2hhbm5lbF9zZWxlY3RfYml0ZmllbGQobWl0ZV9jaGFubmVsKSA8PCAoNCAqCisJCWdwY3RfaW5kZXgpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBHUENUX0RNQV9TZWxlY3RfTWFzayh1bnNpZ25lZCBncGN0X2luZGV4KQoreworCUJVR19PTihncGN0X2luZGV4ID4gMSk7CisJcmV0dXJuIDB4ZiA8PCAoNCAqIGdwY3RfaW5kZXgpOworfQorCisvKiAxNiBiaXQgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgQ29uZmlndXJhdGlvbl9NZW1vcnlfTG93CTB4MTAKK2VudW0gQ29uZmlndXJhdGlvbl9NZW1vcnlfTG93X0JpdHMgeworCUFJX0RJVEhFUiA9IDB4MjAwLAorCUFJX0xBU1RfQ0hBTk5FTCA9IDB4ODAwMCwKK307CisjZGVmaW5lIENvbmZpZ3VyYXRpb25fTWVtb3J5X0hpZ2gJMHgxMgorZW51bSBDb25maWd1cmF0aW9uX01lbW9yeV9IaWdoX0JpdHMgeworCUFJX0FDX0NPVVBMRSA9IDB4ODAwLAorCUFJX0RJRkZFUkVOVElBTCA9IDB4MTAwMCwKKwlBSV9DT01NT04gPSAweDIwMDAsCisJQUlfR1JPVU5EID0gMHgzMDAwLAorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IEFJX0NPTkZJR19DSEFOTkVMKHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCXJldHVybiAoY2hhbm5lbCAmIDB4M2YpOworfQorCisjZGVmaW5lIEFEQ19GSUZPX0RhdGFfUmVnaXN0ZXIJCTB4MWMKKworI2RlZmluZSBBT19Db25maWd1cmF0aW9uCQkweDE2CisjZGVmaW5lIEFPX0JpcG9sYXIJCV9iaXQwCisjZGVmaW5lIEFPX0RlZ2xpdGNoCQlfYml0MQorI2RlZmluZSBBT19FeHRfUmVmCQlfYml0MgorI2RlZmluZSBBT19Hcm91bmRfUmVmCQlfYml0MworI2RlZmluZSBBT19DaGFubmVsKHgpCQkoKHgpIDw8IDgpCisKKyNkZWZpbmUgREFDX0ZJRk9fRGF0YQkJCTB4MWUKKyNkZWZpbmUgREFDMF9EaXJlY3RfRGF0YQkJMHgxOAorI2RlZmluZSBEQUMxX0RpcmVjdF9EYXRhCQkweDFhCisKKy8qIDYxMXggcmVnaXN0ZXJzICh0aGVzZSBib2FyZHMgZGlmZmVyIGZyb20gdGhlIGUtc2VyaWVzKSAqLworCisjZGVmaW5lIE1hZ2ljXzYxMXgJCQkweDE5CS8qIHc4IChuZXcpICovCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfU2VsZWN0XzYxMXgJMHgxYQkvKiB3MTYgKG5ldykgKi8KKyNkZWZpbmUgQURDX0ZJRk9fRGF0YV82MTF4CQkweDFjCS8qIHIzMiAoaW5jb21wYXRpYmxlKSAqLworI2RlZmluZSBBSV9GSUZPX09mZnNldF9Mb2FkXzYxMXgJMHgwNQkvKiByOCAobmV3KSAqLworI2RlZmluZSBEQUNfRklGT19EYXRhXzYxMXgJCTB4MTQJLyogdzMyIChpbmNvbXBhdGlibGUpICovCisjZGVmaW5lIENhbF9HYWluX1NlbGVjdF82MTF4CQkweDA1CS8qIHc4IChuZXcpICovCisKKyNkZWZpbmUgQU9fV2luZG93X0FkZHJlc3NfNjExeAkJMHgxOAorI2RlZmluZSBBT19XaW5kb3dfRGF0YV82MTF4CQkweDFlCisKKy8qIDYxNDMgcmVnaXN0ZXJzICovCisjZGVmaW5lIE1hZ2ljXzYxNDMJCQkweDE5CS8qIHc4ICovCisjZGVmaW5lIEcwRzFfRE1BX1NlbGVjdF82MTQzCQkweDBCCS8qIHc4ICovCisjZGVmaW5lIFBpcGVsaW5lRGVsYXlfNjE0MwkJMHgxZgkvKiB3OCAqLworI2RlZmluZSBFT0NfU2V0XzYxNDMJCQkweDFECS8qIHc4ICovCisjZGVmaW5lIEFJRE1BX1NlbGVjdF82MTQzCQkweDA5CS8qIHc4ICovCisjZGVmaW5lIEFJRklGT19EYXRhXzYxNDMJCTB4OEMJLyogdzMyICovCisjZGVmaW5lIEFJRklGT19GbGFnXzYxNDMJCTB4ODQJLyogdzMyICovCisjZGVmaW5lIEFJRklGT19Db250cm9sXzYxNDMJCTB4ODgJLyogdzMyICovCisjZGVmaW5lIEFJRklGT19TdGF0dXNfNjE0MwkJMHg4OAkvKiB3MzIgKi8KKyNkZWZpbmUgQUlGSUZPX0RNQVRocmVzaG9sZF82MTQzCTB4OTAJLyogdzMyICovCisjZGVmaW5lIEFJRklGT19Xb3Jkc19BdmFpbGFibGVfNjE0MwkweDk0CS8qIHczMiAqLworCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfNjE0MwkweDQyCS8qIHcxNiAqLworI2RlZmluZSBDYWxpYnJhdGlvbl9Mb3dUaW1lXzYxNDMJMHgyMAkvKiB3MTYgKi8KKyNkZWZpbmUgQ2FsaWJyYXRpb25fSGlnaFRpbWVfNjE0MwkweDIyCS8qIHcxNiAqLworI2RlZmluZSBSZWxheV9Db3VudGVyX0xvYWRfVmFsX182MTQzCTB4NEMJLyogdzMyICovCisjZGVmaW5lIFNpZ25hdHVyZV82MTQzCQkJMHg1MAkvKiB3MzIgKi8KKyNkZWZpbmUgUmVsZWFzZV9EYXRlXzYxNDMJCTB4NTQJLyogdzMyICovCisjZGVmaW5lIFJlbGVhc2VfT2xkZXN0X0RhdGVfNjE0MwkweDU4CS8qIHczMiAqLworCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfNjE0M19SZWxheU9uCTB4ODAwMAkvKiBDYWxpYnJhdGlvbiByZWxheSBzd2l0Y2ggT24gKi8KKyNkZWZpbmUgQ2FsaWJyYXRpb25fQ2hhbm5lbF82MTQzX1JlbGF5T2ZmCTB4NDAwMAkvKiBDYWxpYnJhdGlvbiByZWxheSBzd2l0Y2ggT2ZmICovCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfR25kX0duZAkweDAwCS8qIE9mZnNldCBDYWxpYnJhdGlvbiAqLworI2RlZmluZSBDYWxpYnJhdGlvbl9DaGFubmVsXzJ2NV9HbmQJMHgwMgkvKiAyLjVWIFJlZmVyZW5jZSAqLworI2RlZmluZSBDYWxpYnJhdGlvbl9DaGFubmVsX1B3bV9HbmQJMHgwNQkvKiArLy0gNVYgU2VsZiBDYWwgKi8KKyNkZWZpbmUgQ2FsaWJyYXRpb25fQ2hhbm5lbF8ydjVfUHdtCTB4MGEJLyogUFdNIENhbGlicmF0aW9uICovCisjZGVmaW5lIENhbGlicmF0aW9uX0NoYW5uZWxfUHdtX1B3bQkweDBkCS8qIENNUlIgKi8KKyNkZWZpbmUgQ2FsaWJyYXRpb25fQ2hhbm5lbF9HbmRfUHdtCTB4MGUJLyogUFdNIENhbGlicmF0aW9uICovCisKKy8qIDY3MXgsIDYxMXggcmVnaXN0ZXJzICovCisKKy8qIDY3MXhpLCA2MTF4IHdpbmRvd2VkIGFvIHJlZ2lzdGVycyAqLworZW51bSB3aW5kb3dlZF9yZWdzXzY3eHhfNjF4eCB7CisJQU9fSW1tZWRpYXRlXzY3MXggPSAweDExLAkvKiBXIDE2ICovCisJQU9fVGltZWRfNjExeCA9IDB4MTAsCS8qIFcgMTYgKi8KKwlBT19GSUZPX09mZnNldF9Mb2FkXzYxMXggPSAweDEzLAkvKiBXMzIgKi8KKwlBT19MYXRlcl9TaW5nbGVfUG9pbnRfVXBkYXRlcyA9IDB4MTQsCS8qIFcgMTYgKi8KKwlBT19XYXZlZm9ybV9HZW5lcmF0aW9uXzYxMXggPSAweDE1LAkvKiBXIDE2ICovCisJQU9fTWlzY182MTF4ID0gMHgxNiwJLyogVyAxNiAqLworCUFPX0NhbGlicmF0aW9uX0NoYW5uZWxfU2VsZWN0XzY3eHggPSAweDE3LAkvKiBXIDE2ICovCisJQU9fQ29uZmlndXJhdGlvbl8yXzY3eHggPSAweDE4LAkvKiBXIDE2ICovCisJQ0FMX0FEQ19Db21tYW5kXzY3eHggPSAweDE5LAkvKiBXIDggKi8KKwlDQUxfQURDX1N0YXR1c182N3h4ID0gMHgxYSwJLyogUiA4ICovCisJQ0FMX0FEQ19EYXRhXzY3eHggPSAweDFiLAkvKiBSIDE2ICovCisJQ0FMX0FEQ19Db25maWdfRGF0YV9IaWdoX1dvcmRfNjd4eCA9IDB4MWMsCS8qIFJXIDE2ICovCisJQ0FMX0FEQ19Db25maWdfRGF0YV9Mb3dfV29yZF82N3h4ID0gMHgxZCwJLyogUlcgMTYgKi8KK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBEQUN4X0RpcmVjdF9EYXRhXzY3MXgoaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIGNoYW5uZWw7Cit9CitlbnVtIEFPX01pc2NfNjExeF9CaXRzIHsKKwlDTEVBUl9XRyA9IDEsCit9OworZW51bSBjczU1MjlfY29uZmlndXJhdGlvbl9iaXRzIHsKKwlDU0NGR19DQUxfQ09OVFJPTF9NQVNLID0gMHg3LAorCUNTQ0ZHX1NFTEZfQ0FMX09GRlNFVCA9IDB4MSwKKwlDU0NGR19TRUxGX0NBTF9HQUlOID0gMHgyLAorCUNTQ0ZHX1NFTEZfQ0FMX09GRlNFVF9HQUlOID0gMHgzLAorCUNTQ0ZHX1NZU1RFTV9DQUxfT0ZGU0VUID0gMHg1LAorCUNTQ0ZHX1NZU1RFTV9DQUxfR0FJTiA9IDB4NiwKKwlDU0NGR19ET05FID0gMSA8PCAzLAorCUNTQ0ZHX1BPV0VSX1NBVkVfU0VMRUNUID0gMSA8PCA0LAorCUNTQ0ZHX1BPUlRfTU9ERSA9IDEgPDwgNSwKKwlDU0NGR19SRVNFVF9WQUxJRCA9IDEgPDwgNiwKKwlDU0NGR19SRVNFVCA9IDEgPDwgNywKKwlDU0NGR19VTklQT0xBUiA9IDEgPDwgMTIsCisJQ1NDRkdfV09SRF9SQVRFXzIxODBfQ1lDTEVTID0gMHgwIDw8IDEzLAorCUNTQ0ZHX1dPUkRfUkFURV8xMDkyX0NZQ0xFUyA9IDB4MSA8PCAxMywKKwlDU0NGR19XT1JEX1JBVEVfNTMyX0NZQ0xFUyA9IDB4MiA8PCAxMywKKwlDU0NGR19XT1JEX1JBVEVfMzg4X0NZQ0xFUyA9IDB4MyA8PCAxMywKKwlDU0NGR19XT1JEX1JBVEVfMzI0X0NZQ0xFUyA9IDB4NCA8PCAxMywKKwlDU0NGR19XT1JEX1JBVEVfMTc0NDRfQ1lDTEVTID0gMHg1IDw8IDEzLAorCUNTQ0ZHX1dPUkRfUkFURV84NzI0X0NZQ0xFUyA9IDB4NiA8PCAxMywKKwlDU0NGR19XT1JEX1JBVEVfNDM2NF9DWUNMRVMgPSAweDcgPDwgMTMsCisJQ1NDRkdfV09SRF9SQVRFX01BU0sgPSAweDcgPDwgMTMsCisJQ1NDRkdfTE9XX1BPV0VSID0gMSA8PCAxNiwKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBDUzU1MjlfQ09ORklHX0RPVVQoaW50IG91dHB1dCkKK3sKKwlyZXR1cm4gMSA8PCAoMTggKyBvdXRwdXQpOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgQ1M1NTI5X0NPTkZJR19BT1VUKGludCBvdXRwdXQpCit7CisJcmV0dXJuIDEgPDwgKDIyICsgb3V0cHV0KTsKK30KK2VudW0gY3M1NTI5X2NvbW1hbmRfYml0cyB7CisJQ1NDTURfUE9XRVJfU0FWRSA9IDB4MSwKKwlDU0NNRF9SRUdJU1RFUl9TRUxFQ1RfTUFTSyA9IDB4ZSwKKwlDU0NNRF9PRkZTRVRfUkVHSVNURVIgPSAweDAsCisJQ1NDTURfR0FJTl9SRUdJU1RFUiA9IDB4MiwKKwlDU0NNRF9DT05GSUdfUkVHSVNURVIgPSAweDQsCisJQ1NDTURfUkVBRCA9IDB4MTAsCisJQ1NDTURfQ09OVElOVU9VU19DT05WRVJTSU9OUyA9IDB4MjAsCisJQ1NDTURfU0lOR0xFX0NPTlZFUlNJT04gPSAweDQwLAorCUNTQ01EX0NPTU1BTkQgPSAweDgwLAorfTsKK2VudW0gY3M1NTI5X3N0YXR1c19iaXRzIHsKKwlDU1NfQURDX0JVU1kgPSAweDEsCisJQ1NTX09TQ19ERVRFQ1QgPSAweDIsCS8qIGluZGljYXRlcyBhZGMgZXJyb3IgKi8KKwlDU1NfT1ZFUlJBTkdFID0gMHg0LAorfTsKKyNkZWZpbmUgU2VyRGFjTGQoeCkJCQkoMHgwODw8KHgpKQorCisvKgorCVRoaXMgaXMgc3R1ZmYgdW5pcXVlIHRvIHRoZSBOSSBFIHNlcmllcyBkcml2ZXJzLAorCWJ1dCBJIHRob3VnaHQgSSdkIHB1dCBpdCBoZXJlIGFueXdheS4KKyovCisKK2VudW0geyBhaV9nYWluXzE2ID0KKwkJMCwgYWlfZ2Fpbl84LCBhaV9nYWluXzE0LCBhaV9nYWluXzQsIGFpX2dhaW5fNjExeCwgYWlfZ2Fpbl82MjJ4LAorCQlhaV9nYWluXzYyOHgsIGFpX2dhaW5fNjE0MyB9OworZW51bSBjYWxkYWNfZW51bSB7IGNhbGRhY19ub25lID0gMCwgbWI4ODM0MSwgZGFjODgwMCwgZGFjODA0MywgYWQ4NTIyLAorCWFkODgwNCwgYWQ4ODQyLCBhZDg4MDRfZGVidWcKK307CitlbnVtIG5pX3JlZ190eXBlIHsKKwluaV9yZWdfbm9ybWFsID0gMHgwLAorCW5pX3JlZ182MTF4ID0gMHgxLAorCW5pX3JlZ182NzExID0gMHgyLAorCW5pX3JlZ182NzEzID0gMHg0LAorCW5pX3JlZ182N3h4X21hc2sgPSAweDYsCisJbmlfcmVnXzZ4eHhfbWFzayA9IDB4NywKKwluaV9yZWdfNjIyeCA9IDB4OCwKKwluaV9yZWdfNjI1eCA9IDB4MTAsCisJbmlfcmVnXzYyOHggPSAweDE4LAorCW5pX3JlZ19tX3Nlcmllc19tYXNrID0gMHgxOCwKKwluaV9yZWdfNjE0MyA9IDB4MjAKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9uaV9FX2FvX2V4dDsKKworZW51bSBtX3Nlcmllc19yZWdpc3Rlcl9vZmZzZXRzIHsKKwlNX09mZnNldF9DRElPX0RNQV9TZWxlY3QgPSAweDcsCS8vIHdyaXRlCisJTV9PZmZzZXRfU0NYSV9TdGF0dXMgPSAweDcsCS8vIHJlYWQKKwlNX09mZnNldF9BSV9BT19TZWxlY3QgPSAweDksCS8vIHdyaXRlLCBzYW1lIG9mZnNldCBhcyBlLXNlcmllcworCU1fT2Zmc2V0X1NDWElfU2VyaWFsX0RhdGFfSW4gPSAweDksCS8vIHJlYWQKKwlNX09mZnNldF9HMF9HMV9TZWxlY3QgPSAweGIsCS8vIHdyaXRlLCBzYW1lIG9mZnNldCBhcyBlLXNlcmllcworCU1fT2Zmc2V0X01pc2NfQ29tbWFuZCA9IDB4ZiwKKwlNX09mZnNldF9TQ1hJX1NlcmlhbF9EYXRhX091dCA9IDB4MTEsCisJTV9PZmZzZXRfU0NYSV9Db250cm9sID0gMHgxMywKKwlNX09mZnNldF9TQ1hJX091dHB1dF9FbmFibGUgPSAweDE1LAorCU1fT2Zmc2V0X0FJX0ZJRk9fRGF0YSA9IDB4MWMsCisJTV9PZmZzZXRfU3RhdGljX0RpZ2l0YWxfT3V0cHV0ID0gMHgyNCwJLy8gd3JpdGUKKwlNX09mZnNldF9TdGF0aWNfRGlnaXRhbF9JbnB1dCA9IDB4MjQsCS8vIHJlYWQKKwlNX09mZnNldF9ESU9fRGlyZWN0aW9uID0gMHgyOCwKKwlNX09mZnNldF9DYWxfUFdNID0gMHg0MCwKKwlNX09mZnNldF9BSV9Db25maWdfRklGT19EYXRhID0gMHg1ZSwKKwlNX09mZnNldF9JbnRlcnJ1cHRfQ19FbmFibGUgPSAweDg4LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0ludGVycnVwdF9DX1N0YXR1cyA9IDB4ODgsCS8vIHJlYWQKKwlNX09mZnNldF9BbmFsb2dfVHJpZ2dlcl9Db250cm9sID0gMHg4YywKKwlNX09mZnNldF9BT19TZXJpYWxfSW50ZXJydXB0X0VuYWJsZSA9IDB4YTAsCisJTV9PZmZzZXRfQU9fU2VyaWFsX0ludGVycnVwdF9BY2sgPSAweGExLAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FPX1NlcmlhbF9JbnRlcnJ1cHRfU3RhdHVzID0gMHhhMSwJLy8gcmVhZAorCU1fT2Zmc2V0X0FPX0NhbGlicmF0aW9uID0gMHhhMywKKwlNX09mZnNldF9BT19GSUZPX0RhdGEgPSAweGE0LAorCU1fT2Zmc2V0X1BGSV9GaWx0ZXIgPSAweGIwLAorCU1fT2Zmc2V0X1JUU0lfRmlsdGVyID0gMHhiNCwKKwlNX09mZnNldF9TQ1hJX0xlZ2FjeV9Db21wYXRpYmlsaXR5ID0gMHhiYywKKwlNX09mZnNldF9JbnRlcnJ1cHRfQV9BY2sgPSAweDEwNCwJLy8gd3JpdGUKKwlNX09mZnNldF9BSV9TdGF0dXNfMSA9IDB4MTA0LAkvLyByZWFkCisJTV9PZmZzZXRfSW50ZXJydXB0X0JfQWNrID0gMHgxMDYsCS8vIHdyaXRlCisJTV9PZmZzZXRfQU9fU3RhdHVzXzEgPSAweDEwNiwJLy8gcmVhZAorCU1fT2Zmc2V0X0FJX0NvbW1hbmRfMiA9IDB4MTA4LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0cwMV9TdGF0dXMgPSAweDEwOCwJLy8gcmVhZAorCU1fT2Zmc2V0X0FPX0NvbW1hbmRfMiA9IDB4MTBhLAorCU1fT2Zmc2V0X0FPX1N0YXR1c18yID0gMHgxMGMsCS8vIHJlYWQKKwlNX09mZnNldF9HMF9Db21tYW5kID0gMHgxMGMsCS8vIHdyaXRlCisJTV9PZmZzZXRfRzFfQ29tbWFuZCA9IDB4MTBlLAkvLyB3cml0ZQorCU1fT2Zmc2V0X0cwX0hXX1NhdmUgPSAweDExMCwKKwlNX09mZnNldF9HMF9IV19TYXZlX0hpZ2ggPSAweDExMCwKKwlNX09mZnNldF9BSV9Db21tYW5kXzEgPSAweDExMCwKKwlNX09mZnNldF9HMF9IV19TYXZlX0xvdyA9IDB4MTEyLAorCU1fT2Zmc2V0X0FPX0NvbW1hbmRfMSA9IDB4MTEyLAorCU1fT2Zmc2V0X0cxX0hXX1NhdmUgPSAweDExNCwKKwlNX09mZnNldF9HMV9IV19TYXZlX0hpZ2ggPSAweDExNCwKKwlNX09mZnNldF9HMV9IV19TYXZlX0xvdyA9IDB4MTE2LAorCU1fT2Zmc2V0X0FJX01vZGVfMSA9IDB4MTE4LAorCU1fT2Zmc2V0X0cwX1NhdmUgPSAweDExOCwKKwlNX09mZnNldF9HMF9TYXZlX0hpZ2ggPSAweDExOCwKKwlNX09mZnNldF9BSV9Nb2RlXzIgPSAweDExYSwKKwlNX09mZnNldF9HMF9TYXZlX0xvdyA9IDB4MTFhLAorCU1fT2Zmc2V0X0FJX1NJX0xvYWRfQSA9IDB4MTFjLAorCU1fT2Zmc2V0X0cxX1NhdmUgPSAweDExYywKKwlNX09mZnNldF9HMV9TYXZlX0hpZ2ggPSAweDExYywKKwlNX09mZnNldF9HMV9TYXZlX0xvdyA9IDB4MTFlLAorCU1fT2Zmc2V0X0FJX1NJX0xvYWRfQiA9IDB4MTIwLAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FPX1VJX1NhdmUgPSAweDEyMCwJLy8gcmVhZAorCU1fT2Zmc2V0X0FJX1NDX0xvYWRfQSA9IDB4MTI0LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FPX0JDX1NhdmUgPSAweDEyNCwJLy8gcmVhZAorCU1fT2Zmc2V0X0FJX1NDX0xvYWRfQiA9IDB4MTI4LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FPX1VDX1NhdmUgPSAweDEyOCwJLy9yZWFkCisJTV9PZmZzZXRfQUlfU0kyX0xvYWRfQSA9IDB4MTJjLAorCU1fT2Zmc2V0X0FJX1NJMl9Mb2FkX0IgPSAweDEzMCwKKwlNX09mZnNldF9HMF9Nb2RlID0gMHgxMzQsCisJTV9PZmZzZXRfRzFfTW9kZSA9IDB4MTM2LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0pvaW50X1N0YXR1c18xID0gMHgxMzYsCS8vIHJlYWQKKwlNX09mZnNldF9HMF9Mb2FkX0EgPSAweDEzOCwKKwlNX09mZnNldF9Kb2ludF9TdGF0dXNfMiA9IDB4MTNhLAorCU1fT2Zmc2V0X0cwX0xvYWRfQiA9IDB4MTNjLAorCU1fT2Zmc2V0X0cxX0xvYWRfQSA9IDB4MTQwLAorCU1fT2Zmc2V0X0cxX0xvYWRfQiA9IDB4MTQ0LAorCU1fT2Zmc2V0X0cwX0lucHV0X1NlbGVjdCA9IDB4MTQ4LAorCU1fT2Zmc2V0X0cxX0lucHV0X1NlbGVjdCA9IDB4MTRhLAorCU1fT2Zmc2V0X0FPX01vZGVfMSA9IDB4MTRjLAorCU1fT2Zmc2V0X0FPX01vZGVfMiA9IDB4MTRlLAorCU1fT2Zmc2V0X0FPX1VJX0xvYWRfQSA9IDB4MTUwLAorCU1fT2Zmc2V0X0FPX1VJX0xvYWRfQiA9IDB4MTU0LAorCU1fT2Zmc2V0X0FPX0JDX0xvYWRfQSA9IDB4MTU4LAorCU1fT2Zmc2V0X0FPX0JDX0xvYWRfQiA9IDB4MTVjLAorCU1fT2Zmc2V0X0FPX1VDX0xvYWRfQSA9IDB4MTYwLAorCU1fT2Zmc2V0X0FPX1VDX0xvYWRfQiA9IDB4MTY0LAorCU1fT2Zmc2V0X0Nsb2NrX2FuZF9GT1VUID0gMHgxNzAsCisJTV9PZmZzZXRfSU9fQmlkaXJlY3Rpb25fUGluID0gMHgxNzIsCisJTV9PZmZzZXRfUlRTSV9UcmlnX0RpcmVjdGlvbiA9IDB4MTc0LAorCU1fT2Zmc2V0X0ludGVycnVwdF9Db250cm9sID0gMHgxNzYsCisJTV9PZmZzZXRfQUlfT3V0cHV0X0NvbnRyb2wgPSAweDE3OCwKKwlNX09mZnNldF9BbmFsb2dfVHJpZ2dlcl9FdGMgPSAweDE3YSwKKwlNX09mZnNldF9BSV9TVEFSVF9TVE9QX1NlbGVjdCA9IDB4MTdjLAorCU1fT2Zmc2V0X0FJX1RyaWdnZXJfU2VsZWN0ID0gMHgxN2UsCisJTV9PZmZzZXRfQUlfU0lfU2F2ZSA9IDB4MTgwLAkvLyByZWFkCisJTV9PZmZzZXRfQUlfRElWX0xvYWRfQSA9IDB4MTgwLAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FJX1NDX1NhdmUgPSAweDE4NCwJLy8gcmVhZAorCU1fT2Zmc2V0X0FPX1N0YXJ0X1NlbGVjdCA9IDB4MTg0LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0FPX1RyaWdnZXJfU2VsZWN0ID0gMHgxODYsCisJTV9PZmZzZXRfQU9fTW9kZV8zID0gMHgxOGMsCisJTV9PZmZzZXRfRzBfQXV0b2luY3JlbWVudCA9IDB4MTg4LAorCU1fT2Zmc2V0X0cxX0F1dG9pbmNyZW1lbnQgPSAweDE4YSwKKwlNX09mZnNldF9Kb2ludF9SZXNldCA9IDB4MTkwLAorCU1fT2Zmc2V0X0ludGVycnVwdF9BX0VuYWJsZSA9IDB4MTkyLAorCU1fT2Zmc2V0X0ludGVycnVwdF9CX0VuYWJsZSA9IDB4MTk2LAorCU1fT2Zmc2V0X0FJX1BlcnNvbmFsID0gMHgxOWEsCisJTV9PZmZzZXRfQU9fUGVyc29uYWwgPSAweDE5YywKKwlNX09mZnNldF9SVFNJX1RyaWdfQV9PdXRwdXQgPSAweDE5ZSwKKwlNX09mZnNldF9SVFNJX1RyaWdfQl9PdXRwdXQgPSAweDFhMCwKKwlNX09mZnNldF9SVFNJX1NoYXJlZF9NVVggPSAweDFhMiwKKwlNX09mZnNldF9BT19PdXRwdXRfQ29udHJvbCA9IDB4MWFjLAorCU1fT2Zmc2V0X0FJX01vZGVfMyA9IDB4MWFlLAorCU1fT2Zmc2V0X0NvbmZpZ3VyYXRpb25fTWVtb3J5X0NsZWFyID0gMHgxYTQsCisJTV9PZmZzZXRfQUlfRklGT19DbGVhciA9IDB4MWE2LAorCU1fT2Zmc2V0X0FPX0ZJRk9fQ2xlYXIgPSAweDFhOCwKKwlNX09mZnNldF9HMF9Db3VudGluZ19Nb2RlID0gMHgxYjAsCisJTV9PZmZzZXRfRzFfQ291bnRpbmdfTW9kZSA9IDB4MWIyLAorCU1fT2Zmc2V0X0cwX1NlY29uZF9HYXRlID0gMHgxYjQsCisJTV9PZmZzZXRfRzFfU2Vjb25kX0dhdGUgPSAweDFiNiwKKwlNX09mZnNldF9HMF9ETUFfQ29uZmlnID0gMHgxYjgsCS8vIHdyaXRlCisJTV9PZmZzZXRfRzBfRE1BX1N0YXR1cyA9IDB4MWI4LAkvLyByZWFkCisJTV9PZmZzZXRfRzFfRE1BX0NvbmZpZyA9IDB4MWJhLAkvLyB3cml0ZQorCU1fT2Zmc2V0X0cxX0RNQV9TdGF0dXMgPSAweDFiYSwJLy8gcmVhZAorCU1fT2Zmc2V0X0cwX01TZXJpZXNfQUJaID0gMHgxYzAsCisJTV9PZmZzZXRfRzFfTVNlcmllc19BQlogPSAweDFjMiwKKwlNX09mZnNldF9DbG9ja19hbmRfRm91dDIgPSAweDFjNCwKKwlNX09mZnNldF9QTExfQ29udHJvbCA9IDB4MWM2LAorCU1fT2Zmc2V0X1BMTF9TdGF0dXMgPSAweDFjOCwKKwlNX09mZnNldF9QRklfT3V0cHV0X1NlbGVjdF8xID0gMHgxZDAsCisJTV9PZmZzZXRfUEZJX091dHB1dF9TZWxlY3RfMiA9IDB4MWQyLAorCU1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0XzMgPSAweDFkNCwKKwlNX09mZnNldF9QRklfT3V0cHV0X1NlbGVjdF80ID0gMHgxZDYsCisJTV9PZmZzZXRfUEZJX091dHB1dF9TZWxlY3RfNSA9IDB4MWQ4LAorCU1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0XzYgPSAweDFkYSwKKwlNX09mZnNldF9QRklfREkgPSAweDFkYywKKwlNX09mZnNldF9QRklfRE8gPSAweDFkZSwKKwlNX09mZnNldF9BSV9Db25maWdfRklGT19CeXBhc3MgPSAweDIxOCwKKwlNX09mZnNldF9TQ1hJX0RJT19FbmFibGUgPSAweDIxYywKKwlNX09mZnNldF9DRElfRklGT19EYXRhID0gMHgyMjAsCS8vIHJlYWQKKwlNX09mZnNldF9DRE9fRklGT19EYXRhID0gMHgyMjAsCS8vIHdyaXRlCisJTV9PZmZzZXRfQ0RJT19TdGF0dXMgPSAweDIyNCwJLy8gcmVhZAorCU1fT2Zmc2V0X0NESU9fQ29tbWFuZCA9IDB4MjI0LAkvLyB3cml0ZQorCU1fT2Zmc2V0X0NESV9Nb2RlID0gMHgyMjgsCisJTV9PZmZzZXRfQ0RPX01vZGUgPSAweDIyYywKKwlNX09mZnNldF9DRElfTWFza19FbmFibGUgPSAweDIzMCwKKwlNX09mZnNldF9DRE9fTWFza19FbmFibGUgPSAweDIzNCwKK307CitzdGF0aWMgaW5saW5lIGludCBNX09mZnNldF9BT19XYXZlZm9ybV9PcmRlcihpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHhjMiArIDB4NCAqIGNoYW5uZWw7Cit9Oworc3RhdGljIGlubGluZSBpbnQgTV9PZmZzZXRfQU9fQ29uZmlnX0JhbmsoaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIDB4YzMgKyAweDQgKiBjaGFubmVsOworfTsKK3N0YXRpYyBpbmxpbmUgaW50IE1fT2Zmc2V0X0RBQ19EaXJlY3RfRGF0YShpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHhjMCArIDB4NCAqIGNoYW5uZWw7Cit9CitzdGF0aWMgaW5saW5lIGludCBNX09mZnNldF9HZW5fUFdNKGludCBjaGFubmVsKQoreworCXJldHVybiAweDQ0ICsgMHgyICogY2hhbm5lbDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IE1fT2Zmc2V0X1N0YXRpY19BSV9Db250cm9sKGludCBpKQoreworCWludCBvZmZzZXRbXSA9IHsKKwkJMHg2NCwKKwkJMHgyNjEsCisJCTB4MjYyLAorCQkweDI2MywKKwl9OworCWlmICgoKHVuc2lnbmVkKWkpID49IHNpemVvZihvZmZzZXQpIC8gc2l6ZW9mKG9mZnNldFswXSkpIHsKKwkJcnRfcHJpbnRrKCIlczogaW52YWxpZCBjaGFubmVsPSVpXG4iLCBfX0ZVTkNUSU9OX18sIGkpOworCQlyZXR1cm4gb2Zmc2V0WzBdOworCX0KKwlyZXR1cm4gb2Zmc2V0W2ldOworfTsKK3N0YXRpYyBpbmxpbmUgaW50IE1fT2Zmc2V0X0FPX1JlZmVyZW5jZV9BdHRlbnVhdGlvbihpbnQgY2hhbm5lbCkKK3sKKwlpbnQgb2Zmc2V0W10gPSB7CisJCTB4MjY0LAorCQkweDI2NSwKKwkJMHgyNjYsCisJCTB4MjY3CisJfTsKKwlpZiAoKCh1bnNpZ25lZCljaGFubmVsKSA+PSBzaXplb2Yob2Zmc2V0KSAvIHNpemVvZihvZmZzZXRbMF0pKSB7CisJCXJ0X3ByaW50aygiJXM6IGludmFsaWQgY2hhbm5lbD0laVxuIiwgX19GVU5DVElPTl9fLCBjaGFubmVsKTsKKwkJcmV0dXJuIG9mZnNldFswXTsKKwl9CisJcmV0dXJuIG9mZnNldFtjaGFubmVsXTsKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0KHVuc2lnbmVkIG4pCit7CisJaWYgKG4gPCAxIHx8IG4gPiBOVU1fUEZJX09VVFBVVF9TRUxFQ1RfUkVHUykgeworCQlydF9wcmludGsoIiVzOiBpbnZhbGlkIHBmaSBvdXRwdXQgc2VsZWN0IHJlZ2lzdGVyPSVpXG4iLAorCQkJX19GVU5DVElPTl9fLCBuKTsKKwkJcmV0dXJuIE1fT2Zmc2V0X1BGSV9PdXRwdXRfU2VsZWN0XzE7CisJfQorCXJldHVybiBNX09mZnNldF9QRklfT3V0cHV0X1NlbGVjdF8xICsgKG4gLSAxKSAqIDI7Cit9CisKK2VudW0gTVNlcmllc19BSV9Db25maWdfRklGT19EYXRhX0JpdHMgeworCU1TZXJpZXNfQUlfQ29uZmlnX0NoYW5uZWxfVHlwZV9NYXNrID0gMHg3IDw8IDYsCisJTVNlcmllc19BSV9Db25maWdfQ2hhbm5lbF9UeXBlX0NhbGlicmF0aW9uX0JpdHMgPSAweDAsCisJTVNlcmllc19BSV9Db25maWdfQ2hhbm5lbF9UeXBlX0RpZmZlcmVudGlhbF9CaXRzID0gMHgxIDw8IDYsCisJTVNlcmllc19BSV9Db25maWdfQ2hhbm5lbF9UeXBlX0NvbW1vbl9SZWZfQml0cyA9IDB4MiA8PCA2LAorCU1TZXJpZXNfQUlfQ29uZmlnX0NoYW5uZWxfVHlwZV9Hcm91bmRfUmVmX0JpdHMgPSAweDMgPDwgNiwKKwlNU2VyaWVzX0FJX0NvbmZpZ19DaGFubmVsX1R5cGVfQXV4X0JpdHMgPSAweDUgPDwgNiwKKwlNU2VyaWVzX0FJX0NvbmZpZ19DaGFubmVsX1R5cGVfR2hvc3RfQml0cyA9IDB4NyA8PCA2LAorCU1TZXJpZXNfQUlfQ29uZmlnX1BvbGFyaXR5X0JpdCA9IDB4MTAwMCwJLy8gMCBmb3IgMidzIGNvbXBsZW1lbnQgZW5jb2RpbmcKKwlNU2VyaWVzX0FJX0NvbmZpZ19EaXRoZXJfQml0ID0gMHgyMDAwLAorCU1TZXJpZXNfQUlfQ29uZmlnX0xhc3RfQ2hhbm5lbF9CaXQgPSAweDQwMDAsCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX0FJX0NvbmZpZ19DaGFubmVsX0JpdHModW5zaWduZWQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY2hhbm5lbCAmIDB4ZjsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTVNlcmllc19BSV9Db25maWdfQmFua19CaXRzKGVudW0gbmlfcmVnX3R5cGUgcmVnX3R5cGUsCisJdW5zaWduZWQgY2hhbm5lbCkKK3sKKwl1bnNpZ25lZCBiaXRzID0gY2hhbm5lbCAmIDB4MzA7CisJaWYgKHJlZ190eXBlID09IG5pX3JlZ182MjJ4KSB7CisJCWlmIChjaGFubmVsICYgMHg0MCkKKwkJCWJpdHMgfD0gMHg0MDA7CisJfQorCXJldHVybiBiaXRzOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX0FJX0NvbmZpZ19HYWluX0JpdHModW5zaWduZWQgcmFuZ2UpCit7CisJcmV0dXJuIChyYW5nZSAmIDB4NykgPDwgOTsKK30KKworZW51bSBNU2VyaWVzX0Nsb2NrX2FuZF9Gb3V0Ml9CaXRzIHsKKwlNU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X1JUU0kwX0JpdHMgPSAweGIsCisJTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9TdGFyX1RyaWdnZXJfQml0cyA9IDB4MTQsCisJTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9SVFNJN19CaXRzID0gMHgxYiwKKwlNU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X1BYSV9DbG9jazEwID0gMHgxZCwKKwlNU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X01hc2sgPSAweDFmLAorCU1TZXJpZXNfVGltZWJhc2UxX1NlbGVjdF9CaXQgPSAweDIwLAkvLyB1c2UgUExMIGZvciB0aW1lYmFzZSAxCisJTVNlcmllc19UaW1lYmFzZTNfU2VsZWN0X0JpdCA9IDB4NDAsCS8vIHVzZSBQTEwgZm9yIHRpbWViYXNlIDMKKwkvKiB1c2UgMTBNSHogaW5zdGVhZCBvZiAyME1IeiBmb3IgUlRTSSBjbG9jayBmcmVxdWVuY3kuICBBcHBlYXJzCisJICAgdG8gaGF2ZSBubyBlZmZlY3QsIGF0IGxlYXN0IG9uIHB4aS02MjgxLCB3aGljaCBhbHdheXMgdXNlcworCSAgIDIwTUh6IHJ0c2kgY2xvY2sgZnJlcXVlbmN5ICovCisJTVNlcmllc19SVFNJXzEwTUh6X0JpdCA9IDB4ODAKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfUExMX0luX1NvdXJjZV9TZWxlY3RfUlRTSV9CaXRzKHVuc2lnbmVkCisJUlRTSV9jaGFubmVsKQoreworCWlmIChSVFNJX2NoYW5uZWwgPiA3KSB7CisJCXJ0X3ByaW50aygiJXM6IGJ1ZywgaW52YWxpZCBSVFNJX2NoYW5uZWw9JWlcbiIsIF9fRlVOQ1RJT05fXywKKwkJCVJUU0lfY2hhbm5lbCk7CisJCXJldHVybiAwOworCX0KKwlpZiAoUlRTSV9jaGFubmVsID09IDcpCisJCXJldHVybiBNU2VyaWVzX1BMTF9Jbl9Tb3VyY2VfU2VsZWN0X1JUU0k3X0JpdHM7CisJZWxzZQorCQlyZXR1cm4gTVNlcmllc19QTExfSW5fU291cmNlX1NlbGVjdF9SVFNJMF9CaXRzICsgUlRTSV9jaGFubmVsOworfQorCitlbnVtIE1TZXJpZXNfUExMX0NvbnRyb2xfQml0cyB7CisJTVNlcmllc19QTExfRW5hYmxlX0JpdCA9IDB4MTAwMCwKKwlNU2VyaWVzX1BMTF9WQ09fTW9kZV8yMDBfMzI1TUh6X0JpdHMgPSAweDAsCisJTVNlcmllc19QTExfVkNPX01vZGVfMTc1XzIyNU1Iel9CaXRzID0gMHgyMDAwLAorCU1TZXJpZXNfUExMX1ZDT19Nb2RlXzEwMF8yMjVNSHpfQml0cyA9IDB4NDAwMCwKKwlNU2VyaWVzX1BMTF9WQ09fTW9kZV83NV8xNTBNSHpfQml0cyA9IDB4NjAwMCwKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfUExMX0Rpdmlzb3JfQml0cyh1bnNpZ25lZCBkaXZpc29yKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfZGl2aXNvciA9IDB4MTA7CisJaWYgKGRpdmlzb3IgPCAxIHx8IGRpdmlzb3IgPiBtYXhfZGl2aXNvcikgeworCQlydF9wcmludGsoIiVzOiBidWcsIGludmFsaWQgZGl2aXNvcj0laVxuIiwgX19GVU5DVElPTl9fLAorCQkJZGl2aXNvcik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gKGRpdmlzb3IgJiAweGYpIDw8IDg7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfUExMX011bHRpcGxpZXJfQml0cyh1bnNpZ25lZCBtdWx0aXBsaWVyKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhfbXVsdGlwbGllciA9IDB4MTAwOworCWlmIChtdWx0aXBsaWVyIDwgMSB8fCBtdWx0aXBsaWVyID4gbWF4X211bHRpcGxpZXIpIHsKKwkJcnRfcHJpbnRrKCIlczogYnVnLCBpbnZhbGlkIG11bHRpcGxpZXI9JWlcbiIsIF9fRlVOQ1RJT05fXywKKwkJCW11bHRpcGxpZXIpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIG11bHRpcGxpZXIgJiAweGZmOworfQorCitlbnVtIE1TZXJpZXNfUExMX1N0YXR1cyB7CisJTVNlcmllc19QTExfTG9ja2VkX0JpdCA9IDB4MQorfTsKKworZW51bSBNU2VyaWVzX0FJX0NvbmZpZ19GSUZPX0J5cGFzc19CaXRzIHsKKwlNU2VyaWVzX0FJX0J5cGFzc19DaGFubmVsX01hc2sgPSAweDcsCisJTVNlcmllc19BSV9CeXBhc3NfQmFua19NYXNrID0gMHg3OCwKKwlNU2VyaWVzX0FJX0J5cGFzc19DYWxfU2VsX1Bvc19NYXNrID0gMHgzODAsCisJTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9OZWdfTWFzayA9IDB4MWMwMCwKKwlNU2VyaWVzX0FJX0J5cGFzc19Nb2RlX011eF9NYXNrID0gMHg2MDAwLAorCU1TZXJpZXNfQU9fQnlwYXNzX0FPX0NhbF9TZWxfTWFzayA9IDB4MzgwMDAsCisJTVNlcmllc19BSV9CeXBhc3NfR2Fpbl9NYXNrID0gMHgxYzAwMDAsCisJTVNlcmllc19BSV9CeXBhc3NfRGl0aGVyX0JpdCA9IDB4MjAwMDAwLAorCU1TZXJpZXNfQUlfQnlwYXNzX1BvbGFyaXR5X0JpdCA9IDB4NDAwMDAwLAkvLyAwIGZvciAyJ3MgY29tcGxlbWVudCBlbmNvZGluZworCU1TZXJpZXNfQUlfQnlwYXNzX0NvbmZpZ19GSUZPX0JpdCA9IDB4ODAwMDAwMDAKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfQUlfQnlwYXNzX0NhbF9TZWxfUG9zX0JpdHMoaW50CisJY2FsaWJyYXRpb25fc291cmNlKQoreworCXJldHVybiAoY2FsaWJyYXRpb25fc291cmNlIDw8IDcpICYgTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9Qb3NfTWFzazsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9OZWdfQml0cyhpbnQKKwljYWxpYnJhdGlvbl9zb3VyY2UpCit7CisJcmV0dXJuIChjYWxpYnJhdGlvbl9zb3VyY2UgPDwgMTApICYgTVNlcmllc19BSV9CeXBhc3NfQ2FsX1NlbF9Qb3NfTWFzazsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTVNlcmllc19BSV9CeXBhc3NfR2Fpbl9CaXRzKGludCBnYWluKQoreworCXJldHVybiAoZ2FpbiA8PCAxOCkgJiBNU2VyaWVzX0FJX0J5cGFzc19HYWluX01hc2s7Cit9CisKK2VudW0gTVNlcmllc19BT19Db25maWdfQmFua19CaXRzIHsKKwlNU2VyaWVzX0FPX0RBQ19PZmZzZXRfU2VsZWN0X01hc2sgPSAweDcsCisJTVNlcmllc19BT19EQUNfT2Zmc2V0XzBWX0JpdHMgPSAweDAsCisJTVNlcmllc19BT19EQUNfT2Zmc2V0XzVWX0JpdHMgPSAweDEsCisJTVNlcmllc19BT19EQUNfUmVmZXJlbmNlX01hc2sgPSAweDM4LAorCU1TZXJpZXNfQU9fREFDX1JlZmVyZW5jZV8xMFZfSW50ZXJuYWxfQml0cyA9IDB4MCwKKwlNU2VyaWVzX0FPX0RBQ19SZWZlcmVuY2VfNVZfSW50ZXJuYWxfQml0cyA9IDB4OCwKKwlNU2VyaWVzX0FPX1VwZGF0ZV9UaW1lZF9CaXQgPSAweDQwLAorCU1TZXJpZXNfQU9fQmlwb2xhcl9CaXQgPSAweDgwCS8vIHR1cm5zIG9uIDIncyBjb21wbGVtZW50IGVuY29kaW5nCit9OworCitlbnVtIE1TZXJpZXNfQU9fUmVmZXJlbmNlX0F0dGVudWF0aW9uX0JpdHMgeworCU1TZXJpZXNfQXR0ZW51YXRlX3g1X0JpdCA9IDB4MQorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX0NhbF9QV01fSGlnaF9UaW1lX0JpdHModW5zaWduZWQgY291bnQpCit7CisJcmV0dXJuIChjb3VudCA8PCAxNikgJiAweGZmZmYwMDAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfQ2FsX1BXTV9Mb3dfVGltZV9CaXRzKHVuc2lnbmVkIGNvdW50KQoreworCXJldHVybiBjb3VudCAmIDB4ZmZmZjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX1BGSV9PdXRwdXRfU2VsZWN0X01hc2sodW5zaWduZWQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHgxZiA8PCAoY2hhbm5lbCAlIDMpICogNTsKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfUEZJX091dHB1dF9TZWxlY3RfQml0cyh1bnNpZ25lZCBjaGFubmVsLAorCXVuc2lnbmVkIHNvdXJjZSkKK3sKKwlyZXR1cm4gKHNvdXJjZSAmIDB4MWYpIDw8ICgoY2hhbm5lbCAlIDMpICogNSk7Cit9OworCisvLyBpbnZlcnNlIHRvIE1TZXJpZXNfUEZJX091dHB1dF9TZWxlY3RfQml0cworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX1BGSV9PdXRwdXRfU2VsZWN0X1NvdXJjZSh1bnNpZ25lZCBjaGFubmVsLAorCXVuc2lnbmVkIGJpdHMpCit7CisJcmV0dXJuIChiaXRzID4+ICgoY2hhbm5lbCAlIDMpICogNSkpICYgMHgxZjsKK307CisKK2VudW0gTVNlcmllc19HaV9ETUFfQ29uZmlnX0JpdHMgeworCUdpX0RNQV9CYW5rU1dfRXJyb3JfQml0ID0gMHgxMCwKKwlHaV9ETUFfUmVzZXRfQml0ID0gMHg4LAorCUdpX0RNQV9JbnRfRW5hYmxlX0JpdCA9IDB4NCwKKwlHaV9ETUFfV3JpdGVfQml0ID0gMHgyLAorCUdpX0RNQV9FbmFibGVfQml0ID0gMHgxLAorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBNU2VyaWVzX1BGSV9GaWx0ZXJfU2VsZWN0X01hc2sodW5zaWduZWQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gMHgzIDw8IChjaGFubmVsICogMik7Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE1TZXJpZXNfUEZJX0ZpbHRlcl9TZWxlY3RfQml0cyh1bnNpZ25lZCBjaGFubmVsLAorCXVuc2lnbmVkIGZpbHRlcikKK3sKKwlyZXR1cm4gKGZpbHRlciA8PCAoY2hhbm5lbCAqCisJCQkyKSkgJiBNU2VyaWVzX1BGSV9GaWx0ZXJfU2VsZWN0X01hc2soY2hhbm5lbCk7Cit9CisKK2VudW0gQ0RJT19ETUFfU2VsZWN0X0JpdHMgeworCUNESV9ETUFfU2VsZWN0X1NoaWZ0ID0gMCwKKwlDRElfRE1BX1NlbGVjdF9NYXNrID0gMHhmLAorCUNET19ETUFfU2VsZWN0X1NoaWZ0ID0gNCwKKwlDRE9fRE1BX1NlbGVjdF9NYXNrID0gMHhmIDw8IENET19ETUFfU2VsZWN0X1NoaWZ0Cit9OworCitlbnVtIENESU9fU3RhdHVzX0JpdHMgeworCUNET19GSUZPX0VtcHR5X0JpdCA9IDB4MSwKKwlDRE9fRklGT19GdWxsX0JpdCA9IDB4MiwKKwlDRE9fRklGT19SZXF1ZXN0X0JpdCA9IDB4NCwKKwlDRE9fT3ZlcnJ1bl9CaXQgPSAweDgsCisJQ0RPX1VuZGVyZmxvd19CaXQgPSAweDEwLAorCUNESV9GSUZPX0VtcHR5X0JpdCA9IDB4MTAwMDAsCisJQ0RJX0ZJRk9fRnVsbF9CaXQgPSAweDIwMDAwLAorCUNESV9GSUZPX1JlcXVlc3RfQml0ID0gMHg0MDAwMCwKKwlDRElfT3ZlcnJ1bl9CaXQgPSAweDgwMDAwLAorCUNESV9PdmVyZmxvd19CaXQgPSAweDEwMDAwMAorfTsKKworZW51bSBDRElPX0NvbW1hbmRfQml0cyB7CisJQ0RPX0Rpc2FybV9CaXQgPSAweDEsCisJQ0RPX0FybV9CaXQgPSAweDIsCisJQ0RJX0Rpc2FybV9CaXQgPSAweDQsCisJQ0RJX0FybV9CaXQgPSAweDgsCisJQ0RPX1Jlc2V0X0JpdCA9IDB4MTAsCisJQ0RJX1Jlc2V0X0JpdCA9IDB4MjAsCisJQ0RPX0Vycm9yX0ludGVycnVwdF9FbmFibGVfU2V0X0JpdCA9IDB4NDAsCisJQ0RPX0Vycm9yX0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0ID0gMHg4MCwKKwlDRElfRXJyb3JfSW50ZXJydXB0X0VuYWJsZV9TZXRfQml0ID0gMHgxMDAsCisJQ0RJX0Vycm9yX0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0ID0gMHgyMDAsCisJQ0RPX0ZJRk9fUmVxdWVzdF9JbnRlcnJ1cHRfRW5hYmxlX1NldF9CaXQgPSAweDQwMCwKKwlDRE9fRklGT19SZXF1ZXN0X0ludGVycnVwdF9FbmFibGVfQ2xlYXJfQml0ID0gMHg4MDAsCisJQ0RJX0ZJRk9fUmVxdWVzdF9JbnRlcnJ1cHRfRW5hYmxlX1NldF9CaXQgPSAweDEwMDAsCisJQ0RJX0ZJRk9fUmVxdWVzdF9JbnRlcnJ1cHRfRW5hYmxlX0NsZWFyX0JpdCA9IDB4MjAwMCwKKwlDRE9fRXJyb3JfSW50ZXJydXB0X0NvbmZpcm1fQml0ID0gMHg0MDAwLAorCUNESV9FcnJvcl9JbnRlcnJ1cHRfQ29uZmlybV9CaXQgPSAweDgwMDAsCisJQ0RPX0VtcHR5X0ZJRk9fSW50ZXJydXB0X0VuYWJsZV9TZXRfQml0ID0gMHgxMDAwMCwKKwlDRE9fRW1wdHlfRklGT19JbnRlcnJ1cHRfRW5hYmxlX0NsZWFyX0JpdCA9IDB4MjAwMDAsCisJQ0RPX1NXX1VwZGF0ZV9CaXQgPSAweDgwMDAwLAorCUNESV9TV19VcGRhdGVfQml0ID0gMHgxMDAwMDAKK307CisKK2VudW0gQ0RJX01vZGVfQml0cyB7CisJQ0RJX1NhbXBsZV9Tb3VyY2VfU2VsZWN0X01hc2sgPSAweDNmLAorCUNESV9IYWx0X09uX0Vycm9yX0JpdCA9IDB4MjAwLAorCUNESV9Qb2xhcml0eV9CaXQgPSAweDQwMCwJLy8gc2FtcGxlIGNsb2NrIG9uIGZhbGxpbmcgZWRnZQorCUNESV9GSUZPX01vZGVfQml0ID0gMHg4MDAsCS8vIHNldCBmb3IgaGFsZiBmdWxsIG1vZGUsIGNsZWFyIGZvciBub3QgZW1wdHkgbW9kZQorCUNESV9EYXRhX0xhbmVfTWFzayA9IDB4MzAwMCwJLy8gZGF0YSBsYW5lcyBzcGVjaWZ5IHdoaWNoIGRpbyBjaGFubmVscyBtYXAgdG8gYnl0ZSBvciB3b3JkIGFjY2Vzc2VzIHRvIHRoZSBkaW8gZmlmb3MKKwlDRElfRGF0YV9MYW5lXzBfMTVfQml0cyA9IDB4MCwKKwlDRElfRGF0YV9MYW5lXzE2XzMxX0JpdHMgPSAweDEwMDAsCisJQ0RJX0RhdGFfTGFuZV8wXzdfQml0cyA9IDB4MCwKKwlDRElfRGF0YV9MYW5lXzhfMTVfQml0cyA9IDB4MTAwMCwKKwlDRElfRGF0YV9MYW5lXzE2XzIzX0JpdHMgPSAweDIwMDAsCisJQ0RJX0RhdGFfTGFuZV8yNF8zMV9CaXRzID0gMHgzMDAwCit9OworCitlbnVtIENET19Nb2RlX0JpdHMgeworCUNET19TYW1wbGVfU291cmNlX1NlbGVjdF9NYXNrID0gMHgzZiwKKwlDRE9fUmV0cmFuc21pdF9CaXQgPSAweDEwMCwKKwlDRE9fSGFsdF9Pbl9FcnJvcl9CaXQgPSAweDIwMCwKKwlDRE9fUG9sYXJpdHlfQml0ID0gMHg0MDAsCS8vIHNhbXBsZSBjbG9jayBvbiBmYWxsaW5nIGVkZ2UKKwlDRE9fRklGT19Nb2RlX0JpdCA9IDB4ODAwLAkvLyBzZXQgZm9yIGhhbGYgZnVsbCBtb2RlLCBjbGVhciBmb3Igbm90IGZ1bGwgbW9kZQorCUNET19EYXRhX0xhbmVfTWFzayA9IDB4MzAwMCwJLy8gZGF0YSBsYW5lcyBzcGVjaWZ5IHdoaWNoIGRpbyBjaGFubmVscyBtYXAgdG8gYnl0ZSBvciB3b3JkIGFjY2Vzc2VzIHRvIHRoZSBkaW8gZmlmb3MKKwlDRE9fRGF0YV9MYW5lXzBfMTVfQml0cyA9IDB4MCwKKwlDRE9fRGF0YV9MYW5lXzE2XzMxX0JpdHMgPSAweDEwMDAsCisJQ0RPX0RhdGFfTGFuZV8wXzdfQml0cyA9IDB4MCwKKwlDRE9fRGF0YV9MYW5lXzhfMTVfQml0cyA9IDB4MTAwMCwKKwlDRE9fRGF0YV9MYW5lXzE2XzIzX0JpdHMgPSAweDIwMDAsCisJQ0RPX0RhdGFfTGFuZV8yNF8zMV9CaXRzID0gMHgzMDAwCit9OworCitlbnVtIEludGVycnVwdF9DX0VuYWJsZV9CaXRzIHsKKwlJbnRlcnJ1cHRfR3JvdXBfQ19FbmFibGVfQml0ID0gMHgxCit9OworCitlbnVtIEludGVycnVwdF9DX1N0YXR1c19CaXRzIHsKKwlJbnRlcnJ1cHRfR3JvdXBfQ19TdGF0dXNfQml0ID0gMHgxCit9OworCisjZGVmaW5lIE1fU0VSSUVTX0VFUFJPTV9TSVpFIDEwMjQKKwordHlwZWRlZiBzdHJ1Y3QgbmlfYm9hcmRfc3RydWN0IHsKKwlpbnQgZGV2aWNlX2lkOworCWludCBpc2FwbnBfaWQ7CisJY2hhciAqbmFtZTsKKworCWludCBuX2FkY2hhbjsKKwlpbnQgYWRiaXRzOworCisJaW50IGFpX2ZpZm9fZGVwdGg7CisJdW5zaWduZWQgaW50IGFsd2F5c2RpdGhlcjoxOworCWludCBnYWlubGt1cDsKKwlpbnQgYWlfc3BlZWQ7CisKKwlpbnQgbl9hb2NoYW47CisJaW50IGFvYml0czsKKwlpbnQgYW9fZmlmb19kZXB0aDsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfdGFibGU7CisJdW5zaWduZWQgYW9fc3BlZWQ7CisKKwl1bnNpZ25lZCBudW1fcDBfZGlvX2NoYW5uZWxzOworCisJaW50IHJlZ190eXBlOworCXVuc2lnbmVkIGludCBhb191bmlwb2xhcjoxOworCXVuc2lnbmVkIGludCBoYXNfODI1NToxOworCXVuc2lnbmVkIGludCBoYXNfYW5hbG9nX3RyaWc6MTsKKworCWVudW0gY2FsZGFjX2VudW0gY2FsZGFjWzNdOworfSBuaV9ib2FyZDsKKworI2RlZmluZSBuX25pX2JvYXJkcyAgKHNpemVvZihuaV9ib2FyZHMpL3NpemVvZihuaV9ib2FyZCkpCisKKyNkZWZpbmUgYm9hcmR0eXBlICgqKG5pX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKyNkZWZpbmUgTUFYX05fQU9fQ0hBTiA4CisjZGVmaW5lIE5VTV9HUENUIDIKKworI2RlZmluZSBOSV9QUklWQVRFX0NPTU1PTgkJCQkJXAorCXVpbnQxNl90ICgqc3RjX3JlYWR3KShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBpbnQgcmVnaXN0ZXIpOwlcCisJdWludDMyX3QgKCpzdGNfcmVhZGwpKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGludCByZWdpc3Rlcik7CVwKKwl2b2lkICgqc3RjX3dyaXRldykoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgdmFsdWUsIGludCByZWdpc3Rlcik7CVwKKwl2b2lkICgqc3RjX3dyaXRlbCkoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDMyX3QgdmFsdWUsIGludCByZWdpc3Rlcik7CVwKKwlcCisJdW5zaWduZWQgc2hvcnQgZGlvX291dHB1dDsJCQkJXAorCXVuc2lnbmVkIHNob3J0IGRpb19jb250cm9sOwkJCQlcCisJaW50IGFvMHAsYW8xcDsJCQkJCQlcCisJaW50IGxhc3RjaGFuOwkJCQkJCVwKKwlpbnQgbGFzdF9kbzsJCQkJCQlcCisJaW50IHJ0X2lycTsJCQkJCQlcCisJaW50IGlycW1hc2s7CQkJCQkJXAorCWludCBhaW1vZGU7CQkJCQkJXAorCWludCBhaV9jb250aW51b3VzOwkJCQkJXAorCWludCBibG9ja3NpemU7CQkJCQkJXAorCWludCBuX2xlZnQ7CQkJCQkJXAorCXVuc2lnbmVkIGludCBhaV9jYWxpYl9zb3VyY2U7CQkJCVwKKwl1bnNpZ25lZCBpbnQgYWlfY2FsaWJfc291cmNlX2VuYWJsZWQ7CQkJXAorCXNwaW5sb2NrX3Qgd2luZG93X2xvY2s7IFwKKwlzcGlubG9ja190IHNvZnRfcmVnX2NvcHlfbG9jazsgXAorCXNwaW5sb2NrX3QgbWl0ZV9jaGFubmVsX2xvY2s7IFwKKwkJCQkJCQkJXAorCWludCBjaGFuZ2Fpbl9zdGF0ZTsJCQkJCVwKKwl1bnNpZ25lZCBpbnQgY2hhbmdhaW5fc3BlYzsJCQkJXAorCQkJCQkJCQlcCisJdW5zaWduZWQgaW50IGNhbGRhY19tYXhkYXRhX2xpc3RbTUFYX05fQ0FMREFDU107CVwKKwl1bnNpZ25lZCBzaG9ydCBhb1tNQVhfTl9BT19DSEFOXTsJCQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBjYWxkYWNzW01BWF9OX0NBTERBQ1NdOwkJCQlcCisJCQkJCQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBhaV9jbWQyOwlcCisJCQkJCQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBhb19jb25mW01BWF9OX0FPX0NIQU5dOwkJCQlcCisJdW5zaWduZWQgc2hvcnQgYW9fbW9kZTE7CQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBhb19tb2RlMjsJCQkJXAorCXVuc2lnbmVkIHNob3J0IGFvX21vZGUzOwkJCQlcCisJdW5zaWduZWQgc2hvcnQgYW9fY21kMTsJCQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBhb19jbWQyOwkJCQkJXAorCXVuc2lnbmVkIHNob3J0IGFvX2NtZDM7CQkJCQlcCisJdW5zaWduZWQgc2hvcnQgYW9fdHJpZ2dlcl9zZWxlY3Q7CQkJXAorCQkJCQkJCQlcCisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldjsJXAorCXVuc2lnbmVkIHNob3J0IGFuX3RyaWdfZXRjX3JlZzsJCQkJXAorCQkJCQkJCQlcCisJdW5zaWduZWQgYWlfb2Zmc2V0WzUxMl07CQkJCVwKKwkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgc2VyaWFsX2ludGVydmFsX25zOyAgICAgICAgICAgICAgICAgICAgICAgXAorCXVuc2lnbmVkIGNoYXIgc2VyaWFsX2h3X21vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXVuc2lnbmVkIHNob3J0IGNsb2NrX2FuZF9mb3V0OwkJCQlcCisJdW5zaWduZWQgc2hvcnQgY2xvY2tfYW5kX2ZvdXQyOwkJCQlcCisJCQkJCQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBpbnRfYV9lbmFibGVfcmVnOwkJCVwKKwl1bnNpZ25lZCBzaG9ydCBpbnRfYl9lbmFibGVfcmVnOwkJCVwKKwl1bnNpZ25lZCBzaG9ydCBpb19iaWRpcmVjdGlvbl9waW5fcmVnOwkJCVwKKwl1bnNpZ25lZCBzaG9ydCBydHNpX3RyaWdfZGlyZWN0aW9uX3JlZzsJCQlcCisJdW5zaWduZWQgc2hvcnQgcnRzaV90cmlnX2Ffb3V0cHV0X3JlZzsgXAorCXVuc2lnbmVkIHNob3J0IHJ0c2lfdHJpZ19iX291dHB1dF9yZWc7IFwKKwl1bnNpZ25lZCBzaG9ydCBwZmlfb3V0cHV0X3NlbGVjdF9yZWdbTlVNX1BGSV9PVVRQVVRfU0VMRUNUX1JFR1NdOyBcCisJdW5zaWduZWQgc2hvcnQgYWlfYW9fc2VsZWN0X3JlZzsgXAorCXVuc2lnbmVkIHNob3J0IGcwX2cxX3NlbGVjdF9yZWc7IFwKKwl1bnNpZ25lZCBzaG9ydCBjZGlvX2RtYV9zZWxlY3RfcmVnOyBcCisJXAorCXVuc2lnbmVkIGNsb2NrX25zOyBcCisJdW5zaWduZWQgY2xvY2tfc291cmNlOyBcCisJXAorCXVuc2lnbmVkIHNob3J0IGF0cmlnX21vZGU7CQkJCVwKKwl1bnNpZ25lZCBzaG9ydCBhdHJpZ19oaWdoOwkJCQlcCisJdW5zaWduZWQgc2hvcnQgYXRyaWdfbG93OwkJCQlcCisJXAorCXVuc2lnbmVkIHNob3J0IHB3bV91cF9jb3VudDsJXAorCXVuc2lnbmVkIHNob3J0IHB3bV9kb3duX2NvdW50OwlcCisJXAorCXNob3J0IGFpX2ZpZm9fYnVmZmVyWzB4MjAwMF07CQkJCVwKKwl1aW50OF90IGVlcHJvbV9idWZmZXJbTV9TRVJJRVNfRUVQUk9NX1NJWkVdOyBcCisJdWludDMyX3Qgc2VyaWFsX251bWJlcjsgXAorCVwKKwlzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGU7IFwKKwlzdHJ1Y3QgbWl0ZV9jaGFubmVsICphaV9taXRlX2NoYW47IFwKKwlzdHJ1Y3QgbWl0ZV9jaGFubmVsICphb19taXRlX2NoYW47XAorCXN0cnVjdCBtaXRlX2NoYW5uZWwgKmNkb19taXRlX2NoYW47XAorCXN0cnVjdCBtaXRlX2RtYV9kZXNjcmlwdG9yX3JpbmcgKmFpX21pdGVfcmluZzsgXAorCXN0cnVjdCBtaXRlX2RtYV9kZXNjcmlwdG9yX3JpbmcgKmFvX21pdGVfcmluZzsgXAorCXN0cnVjdCBtaXRlX2RtYV9kZXNjcmlwdG9yX3JpbmcgKmNkb19taXRlX3Jpbmc7IFwKKwlzdHJ1Y3QgbWl0ZV9kbWFfZGVzY3JpcHRvcl9yaW5nICpncGN0X21pdGVfcmluZ1tOVU1fR1BDVF07CisKKyNlbmRpZiAvKiBfQ09NRURJX05JX1NUQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVhOTU3NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV90aW8uYwpAQCAtMCwwICsxLDE2OTEgQEAKKy8qCisgIGNvbWVkaS9kcml2ZXJzL25pX3Rpby5jCisgIFN1cHBvcnQgZm9yIE5JIGdlbmVyYWwgcHVycG9zZSBjb3VudGVycworCisgIENvcHlyaWdodCAoQykgMjAwNiBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKworLyoKK0RyaXZlcjogbmlfdGlvCitEZXNjcmlwdGlvbjogTmF0aW9uYWwgSW5zdHJ1bWVudHMgZ2VuZXJhbCBwdXJwb3NlIGNvdW50ZXJzCitEZXZpY2VzOgorQXV0aG9yOiBKLlAuIE1lbGxvciA8anBtZWxsb3JAcm9zZS1odWxtYW4uZWR1PiwKKwlIZXJtYW4uQnJ1eW5pbmNreEBtZWNoLmt1bGV1dmVuLmFjLmJlLAorCVdpbS5NZWV1c3NlbkBtZWNoLmt1bGV1dmVuLmFjLmJlLAorCUtsYWFzLkdhZGV5bmVAbWVjaC5rdWxldXZlbi5hYy5iZSwKKwlGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitVcGRhdGVkOiBUaHUgTm92IDE2IDA5OjUwOjMyIEVTVCAyMDA2CitTdGF0dXM6IHdvcmtzCisKK1RoaXMgbW9kdWxlIGlzIG5vdCB1c2VkIGRpcmVjdGx5IGJ5IGVuZC11c2Vycy4gIFJhdGhlciwgaXQKK2lzIHVzZWQgYnkgb3RoZXIgZHJpdmVycyAoZm9yIGV4YW1wbGUgbmlfNjYweCBhbmQgbmlfcGNpbWlvKQordG8gcHJvdmlkZSBzdXBwb3J0IGZvciBOSSdzIGdlbmVyYWwgcHVycG9zZSBjb3VudGVycy4gIEl0IHdhcworb3JpZ2luYWxseSBiYXNlZCBvbiB0aGUgY291bnRlciBjb2RlIGZyb20gbmlfNjYweC5jIGFuZAorbmlfbWlvX2NvbW1vbi5jLgorCitSZWZlcmVuY2VzOgorREFRIDY2MHggUmVnaXN0ZXItTGV2ZWwgUHJvZ3JhbW1lciBNYW51YWwgIChOSSAzNzA1MDVBLTAxKQorREFRIDY2MDEvNjYwMiBVc2VyIE1hbnVhbCAoTkkgMzIyMTM3Qi0wMSkKKzM0MDkzNGIucGRmICBEQVEtU1RDIHJlZmVyZW5jZSBtYW51YWwKKworKi8KKy8qCitUT0RPOgorCVN1cHBvcnQgdXNlIG9mIGJvdGggYmFua3MgWCBhbmQgWQorKi8KKworI2luY2x1ZGUgIm5pX3Rpb19pbnRlcm5hbC5oIgorCitzdGF0aWMgdWludDY0X3QgbmlfdGlvX2Nsb2NrX3BlcmlvZF9wcyhjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwl1bnNpZ25lZCBnZW5lcmljX2Nsb2NrX3NvdXJjZSk7CitzdGF0aWMgdW5zaWduZWQgbmlfdGlvX2dlbmVyaWNfY2xvY2tfc3JjX3NlbGVjdChjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcik7CisKK01PRFVMRV9BVVRIT1IoIkNvbWVkaSA8Y29tZWRpQGNvbWVkaS5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBzdXBwb3J0IGZvciBOSSBnZW5lcmFsLXB1cnBvc2UgY291bnRlcnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGlubGluZSBlbnVtIEdpX0NvdW50aW5nX01vZGVfUmVnX0JpdHMgR2lfQWx0ZXJuYXRlX1N5bmNfQml0KGVudW0KKwluaV9ncGN0X3ZhcmlhbnQgdmFyaWFudCkKK3sKKwlzd2l0Y2ggKHZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQlyZXR1cm4gR2lfTV9TZXJpZXNfQWx0ZXJuYXRlX1N5bmNfQml0OworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQlyZXR1cm4gR2lfNjYweF9BbHRlcm5hdGVfU3luY19CaXQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGVudW0gR2lfQ291bnRpbmdfTW9kZV9SZWdfQml0cyBHaV9QcmVzY2FsZV9YMl9CaXQoZW51bQorCW5pX2dwY3RfdmFyaWFudCB2YXJpYW50KQoreworCXN3aXRjaCAodmFyaWFudCkgeworCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJCXJldHVybiBHaV9NX1Nlcmllc19QcmVzY2FsZV9YMl9CaXQ7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCXJldHVybiBHaV82NjB4X1ByZXNjYWxlX1gyX0JpdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgZW51bSBHaV9Db3VudGluZ19Nb2RlX1JlZ19CaXRzIEdpX1ByZXNjYWxlX1g4X0JpdChlbnVtCisJbmlfZ3BjdF92YXJpYW50IHZhcmlhbnQpCit7CisJc3dpdGNoICh2YXJpYW50KSB7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJCXJldHVybiAwOworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwkJcmV0dXJuIEdpX01fU2VyaWVzX1ByZXNjYWxlX1g4X0JpdDsKKwkJYnJlYWs7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJcmV0dXJuIEdpXzY2MHhfUHJlc2NhbGVfWDhfQml0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBlbnVtIEdpX0NvdW50aW5nX01vZGVfUmVnX0JpdHMgR2lfSFdfQXJtX1NlbGVjdF9NYXNrKGVudW0KKwluaV9ncGN0X3ZhcmlhbnQgdmFyaWFudCkKK3sKKwlzd2l0Y2ggKHZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQlyZXR1cm4gR2lfTV9TZXJpZXNfSFdfQXJtX1NlbGVjdF9NYXNrOworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQlyZXR1cm4gR2lfNjYweF9IV19Bcm1fU2VsZWN0X01hc2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGNsb2NrIHNvdXJjZXMgZm9yIG5pXzY2MHggYm9hcmRzLCBnZXQgYml0cyB3aXRoIEdpX1NvdXJjZV9TZWxlY3RfQml0cygpICovCitlbnVtIG5pXzY2MHhfY2xvY2tfc291cmNlIHsKKwlOSV82NjB4X1RpbWViYXNlXzFfQ2xvY2sgPSAweDAsCS8qIDIwTUh6ICovCisJTklfNjYweF9Tb3VyY2VfUGluX2lfQ2xvY2sgPSAweDEsCisJTklfNjYweF9OZXh0X0dhdGVfQ2xvY2sgPSAweGEsCisJTklfNjYweF9UaW1lYmFzZV8yX0Nsb2NrID0gMHgxMiwJLyogMTAwS0h6ICovCisJTklfNjYweF9OZXh0X1RDX0Nsb2NrID0gMHgxMywKKwlOSV82NjB4X1RpbWViYXNlXzNfQ2xvY2sgPSAweDFlLAkvKiA4ME1IeiAqLworCU5JXzY2MHhfTG9naWNfTG93X0Nsb2NrID0gMHgxZiwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsID0gNjsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfNjYweF9SVFNJX0Nsb2NrKHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV82NjB4X21heF9ydHNpX2NoYW5uZWwpOworCXJldHVybiAoMHhiICsgbik7Cit9CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbmlfNjYweF9tYXhfc291cmNlX3BpbiA9IDc7CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE5JXzY2MHhfU291cmNlX1Bpbl9DbG9jayh1bnNpZ25lZCBuKQoreworCUJVR19PTihuID4gbmlfNjYweF9tYXhfc291cmNlX3Bpbik7CisJcmV0dXJuICgweDIgKyBuKTsKK30KKworLyogY2xvY2sgc291cmNlcyBmb3IgbmkgZSBhbmQgbSBzZXJpZXMgYm9hcmRzLCBnZXQgYml0cyB3aXRoIEdpX1NvdXJjZV9TZWxlY3RfQml0cygpICovCitlbnVtIG5pX21fc2VyaWVzX2Nsb2NrX3NvdXJjZSB7CisJTklfTV9TZXJpZXNfVGltZWJhc2VfMV9DbG9jayA9IDB4MCwJLyogMjBNSHogKi8KKwlOSV9NX1Nlcmllc19UaW1lYmFzZV8yX0Nsb2NrID0gMHgxMiwJLyogMTAwS0h6ICovCisJTklfTV9TZXJpZXNfTmV4dF9UQ19DbG9jayA9IDB4MTMsCisJTklfTV9TZXJpZXNfTmV4dF9HYXRlX0Nsb2NrID0gMHgxNCwJLyogd2hlbiBHaV9TcmNfU3ViU2VsZWN0ID0gMCAqLworCU5JX01fU2VyaWVzX1BYSV9TdGFyX1RyaWdnZXJfQ2xvY2sgPSAweDE0LAkvKiB3aGVuIEdpX1NyY19TdWJTZWxlY3QgPSAxICovCisJTklfTV9TZXJpZXNfUFhJMTBfQ2xvY2sgPSAweDFkLAorCU5JX01fU2VyaWVzX1RpbWViYXNlXzNfQ2xvY2sgPSAweDFlLAkvKiA4ME1Ieiwgd2hlbiBHaV9TcmNfU3ViU2VsZWN0ID0gMCAqLworCU5JX01fU2VyaWVzX0FuYWxvZ19UcmlnZ2VyX091dF9DbG9jayA9IDB4MWUsCS8qIHdoZW4gR2lfU3JjX1N1YlNlbGVjdCA9IDEgKi8KKwlOSV9NX1Nlcmllc19Mb2dpY19Mb3dfQ2xvY2sgPSAweDFmLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWwgPSAxNTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfTV9TZXJpZXNfUEZJX0Nsb2NrKHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWwpOworCWlmIChuIDwgMTApCisJCXJldHVybiAxICsgbjsKKwllbHNlCisJCXJldHVybiAweGIgKyBuOworfQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWwgPSA3Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBOSV9NX1Nlcmllc19SVFNJX0Nsb2NrKHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV9tX3Nlcmllc19tYXhfcnRzaV9jaGFubmVsKTsKKwlpZiAobiA9PSA3KQorCQlyZXR1cm4gMHgxYjsKKwllbHNlCisJCXJldHVybiAweGIgKyBuOworfQorCitlbnVtIG5pXzY2MHhfZ2F0ZV9zZWxlY3QgeworCU5JXzY2MHhfU291cmNlX1Bpbl9pX0dhdGVfU2VsZWN0ID0gMHgwLAorCU5JXzY2MHhfR2F0ZV9QaW5faV9HYXRlX1NlbGVjdCA9IDB4MSwKKwlOSV82NjB4X05leHRfU1JDX0dhdGVfU2VsZWN0ID0gMHhhLAorCU5JXzY2MHhfTmV4dF9PdXRfR2F0ZV9TZWxlY3QgPSAweDE0LAorCU5JXzY2MHhfTG9naWNfTG93X0dhdGVfU2VsZWN0ID0gMHgxZiwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbmlfNjYweF9tYXhfZ2F0ZV9waW4gPSA3Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBOSV82NjB4X0dhdGVfUGluX0dhdGVfU2VsZWN0KHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV82NjB4X21heF9nYXRlX3Bpbik7CisJcmV0dXJuIDB4MiArIG47Cit9CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIE5JXzY2MHhfUlRTSV9HYXRlX1NlbGVjdCh1bnNpZ25lZCBuKQoreworCUJVR19PTihuID4gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKTsKKwlyZXR1cm4gMHhiICsgbjsKK30KKworZW51bSBuaV9tX3Nlcmllc19nYXRlX3NlbGVjdCB7CisJTklfTV9TZXJpZXNfVGltZXN0YW1wX011eF9HYXRlX1NlbGVjdCA9IDB4MCwKKwlOSV9NX1Nlcmllc19BSV9TVEFSVDJfR2F0ZV9TZWxlY3QgPSAweDEyLAorCU5JX01fU2VyaWVzX1BYSV9TdGFyX1RyaWdnZXJfR2F0ZV9TZWxlY3QgPSAweDEzLAorCU5JX01fU2VyaWVzX05leHRfT3V0X0dhdGVfU2VsZWN0ID0gMHgxNCwKKwlOSV9NX1Nlcmllc19BSV9TVEFSVDFfR2F0ZV9TZWxlY3QgPSAweDFjLAorCU5JX01fU2VyaWVzX05leHRfU1JDX0dhdGVfU2VsZWN0ID0gMHgxZCwKKwlOSV9NX1Nlcmllc19BbmFsb2dfVHJpZ2dlcl9PdXRfR2F0ZV9TZWxlY3QgPSAweDFlLAorCU5JX01fU2VyaWVzX0xvZ2ljX0xvd19HYXRlX1NlbGVjdCA9IDB4MWYsCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBOSV9NX1Nlcmllc19SVFNJX0dhdGVfU2VsZWN0KHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV9tX3Nlcmllc19tYXhfcnRzaV9jaGFubmVsKTsKKwlpZiAobiA9PSA3KQorCQlyZXR1cm4gMHgxYjsKKwlyZXR1cm4gMHhiICsgbjsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfTV9TZXJpZXNfUEZJX0dhdGVfU2VsZWN0KHVuc2lnbmVkIG4pCit7CisJQlVHX09OKG4gPiBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWwpOworCWlmIChuIDwgMTApCisJCXJldHVybiAxICsgbjsKKwlyZXR1cm4gMHhiICsgbjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBHaV9Tb3VyY2VfU2VsZWN0X0JpdHModW5zaWduZWQgc291cmNlKQoreworCXJldHVybiAoc291cmNlIDw8IEdpX1NvdXJjZV9TZWxlY3RfU2hpZnQpICYgR2lfU291cmNlX1NlbGVjdF9NYXNrOworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBHaV9HYXRlX1NlbGVjdF9CaXRzKHVuc2lnbmVkIGdhdGVfc2VsZWN0KQoreworCXJldHVybiAoZ2F0ZV9zZWxlY3QgPDwgR2lfR2F0ZV9TZWxlY3RfU2hpZnQpICYgR2lfR2F0ZV9TZWxlY3RfTWFzazsKK30KKworZW51bSBuaV82NjB4X3NlY29uZF9nYXRlX3NlbGVjdCB7CisJTklfNjYweF9Tb3VyY2VfUGluX2lfU2Vjb25kX0dhdGVfU2VsZWN0ID0gMHgwLAorCU5JXzY2MHhfVXBfRG93bl9QaW5faV9TZWNvbmRfR2F0ZV9TZWxlY3QgPSAweDEsCisJTklfNjYweF9OZXh0X1NSQ19TZWNvbmRfR2F0ZV9TZWxlY3QgPSAweGEsCisJTklfNjYweF9OZXh0X091dF9TZWNvbmRfR2F0ZV9TZWxlY3QgPSAweDE0LAorCU5JXzY2MHhfU2VsZWN0ZWRfR2F0ZV9TZWNvbmRfR2F0ZV9TZWxlY3QgPSAweDFlLAorCU5JXzY2MHhfTG9naWNfTG93X1NlY29uZF9HYXRlX1NlbGVjdCA9IDB4MWYsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIG5pXzY2MHhfbWF4X3VwX2Rvd25fcGluID0gNzsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfNjYweF9VcF9Eb3duX1Bpbl9TZWNvbmRfR2F0ZV9TZWxlY3QodW5zaWduZWQgbikKK3sKKwlCVUdfT04obiA+IG5pXzY2MHhfbWF4X3VwX2Rvd25fcGluKTsKKwlyZXR1cm4gMHgyICsgbjsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgTklfNjYweF9SVFNJX1NlY29uZF9HYXRlX1NlbGVjdCh1bnNpZ25lZCBuKQoreworCUJVR19PTihuID4gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKTsKKwlyZXR1cm4gMHhiICsgbjsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjb3VudGVyX3N0YXR1c19tYXNrID0KKwlDT01FRElfQ09VTlRFUl9BUk1FRCB8IENPTUVESV9DT1VOVEVSX0NPVU5USU5HOworCitzdGF0aWMgaW50IF9faW5pdCBuaV90aW9faW5pdF9tb2R1bGUodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQobmlfdGlvX2luaXRfbW9kdWxlKTsKKworc3RhdGljIHZvaWQgX19leGl0IG5pX3Rpb19jbGVhbnVwX21vZHVsZSh2b2lkKQoreworfQorCittb2R1bGVfZXhpdChuaV90aW9fY2xlYW51cF9tb2R1bGUpOworCitzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKm5pX2dwY3RfZGV2aWNlX2NvbnN0cnVjdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwl2b2lkICgqd3JpdGVfcmVnaXN0ZXIpIChzdHJ1Y3QgbmlfZ3BjdCAqIGNvdW50ZXIsIHVuc2lnbmVkIGJpdHMsCisJCWVudW0gbmlfZ3BjdF9yZWdpc3RlciByZWcpLAorCXVuc2lnbmVkICgqcmVhZF9yZWdpc3RlcikgKHN0cnVjdCBuaV9ncGN0ICogY291bnRlciwKKwkJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZyksIGVudW0gbmlfZ3BjdF92YXJpYW50IHZhcmlhbnQsCisJdW5zaWduZWQgbnVtX2NvdW50ZXJzKQoreworCXVuc2lnbmVkIGk7CisKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IG5pX2dwY3RfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNvdW50ZXJfZGV2ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWNvdW50ZXJfZGV2LT5kZXYgPSBkZXY7CisJY291bnRlcl9kZXYtPndyaXRlX3JlZ2lzdGVyID0gd3JpdGVfcmVnaXN0ZXI7CisJY291bnRlcl9kZXYtPnJlYWRfcmVnaXN0ZXIgPSByZWFkX3JlZ2lzdGVyOworCWNvdW50ZXJfZGV2LT52YXJpYW50ID0gdmFyaWFudDsKKwlzcGluX2xvY2tfaW5pdCgmY291bnRlcl9kZXYtPnJlZ3NfbG9jayk7CisJQlVHX09OKG51bV9jb3VudGVycyA9PSAwKTsKKwljb3VudGVyX2Rldi0+Y291bnRlcnMgPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgbmlfZ3BjdCkgKiBudW1fY291bnRlcnMsIEdGUF9LRVJORUwpOworCWlmIChjb3VudGVyX2Rldi0+Y291bnRlcnMgPT0gTlVMTCkgeworCQlrZnJlZShjb3VudGVyX2Rldik7CisJCXJldHVybiBOVUxMOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKKwkJY291bnRlcl9kZXYtPmNvdW50ZXJzW2ldLmNvdW50ZXJfZGV2ID0gY291bnRlcl9kZXY7CisJCXNwaW5fbG9ja19pbml0KCZjb3VudGVyX2Rldi0+Y291bnRlcnNbaV0ubG9jayk7CisJfQorCWNvdW50ZXJfZGV2LT5udW1fY291bnRlcnMgPSBudW1fY291bnRlcnM7CisJcmV0dXJuIGNvdW50ZXJfZGV2OworfQorCit2b2lkIG5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3koc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldikKK3sKKwlpZiAoY291bnRlcl9kZXYtPmNvdW50ZXJzID09IE5VTEwpCisJCXJldHVybjsKKwlrZnJlZShjb3VudGVyX2Rldi0+Y291bnRlcnMpOworCWtmcmVlKGNvdW50ZXJfZGV2KTsKK30KKworc3RhdGljIGludCBuaV90aW9fc2Vjb25kX2dhdGVfcmVnaXN0ZXJzX3ByZXNlbnQoY29uc3Qgc3RydWN0IG5pX2dwY3RfZGV2aWNlCisJKmNvdW50ZXJfZGV2KQoreworCXN3aXRjaCAoY291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCXJldHVybiAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuaV90aW9fcmVzZXRfY291bnRfYW5kX2Rpc2FybShzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLCBHaV9SZXNldF9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCU5JVElPX0d4eF9Kb2ludF9SZXNldF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworfQorCit2b2lkIG5pX3Rpb19pbml0X2NvdW50ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCisJbmlfdGlvX3Jlc2V0X2NvdW50X2FuZF9kaXNhcm0oY291bnRlcik7CisJLyogaW5pdGlhbGl6ZSBjb3VudGVyIHJlZ2lzdGVycyAqLworCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX0F1dG9pbmNyZW1lbnRfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpXSA9CisJCTB4MDsKKwl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLAorCQljb3VudGVyX2Rldi0+cmVnc1tOSVRJT19HaV9BdXRvaW5jcmVtZW50X1JlZyhjb3VudGVyLT4KKwkJCQljb3VudGVyX2luZGV4KV0sCisJCU5JVElPX0dpX0F1dG9pbmNyZW1lbnRfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwgTklUSU9fR2lfQ29tbWFuZF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCX4wLCBHaV9TeW5jaHJvbml6ZV9HYXRlX0JpdCk7CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsIE5JVElPX0dpX01vZGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLCB+MCwKKwkJMCk7CisJY291bnRlcl9kZXYtPnJlZ3NbTklUSU9fR2lfTG9hZEFfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpXSA9IDB4MDsKKwl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLAorCQljb3VudGVyX2Rldi0+cmVnc1tOSVRJT19HaV9Mb2FkQV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCldLAorCQlOSVRJT19HaV9Mb2FkQV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX0xvYWRCX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KV0gPSAweDA7CisJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwKKwkJY291bnRlcl9kZXYtPnJlZ3NbTklUSU9fR2lfTG9hZEJfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpXSwKKwkJTklUSU9fR2lfTG9hZEJfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJTklUSU9fR2lfSW5wdXRfU2VsZWN0X1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwgfjAsIDApOworCWlmIChuaV90aW9fY291bnRpbmdfbW9kZV9yZWdpc3RlcnNfcHJlc2VudChjb3VudGVyX2RldikpIHsKKwkJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCQlOSVRJT19HaV9Db3VudGluZ19Nb2RlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwgfjAsCisJCQkwKTsKKwl9CisJaWYgKG5pX3Rpb19zZWNvbmRfZ2F0ZV9yZWdpc3RlcnNfcHJlc2VudChjb3VudGVyX2RldikpIHsKKwkJY291bnRlcl9kZXYtPnJlZ3NbTklUSU9fR2lfU2Vjb25kX0dhdGVfUmVnKGNvdW50ZXItPgorCQkJCWNvdW50ZXJfaW5kZXgpXSA9IDB4MDsKKwkJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwKKwkJCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX1NlY29uZF9HYXRlX1JlZyhjb3VudGVyLT4KKwkJCQkJY291bnRlcl9pbmRleCldLAorCQkJTklUSU9fR2lfU2Vjb25kX0dhdGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0RNQV9Db25maWdfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLCB+MCwgMHgwKTsKKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJTklUSU9fR2lfSW50ZXJydXB0X0VuYWJsZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksIH4wLCAweDApOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG5pX3Rpb19jb3VudGVyX3N0YXR1cyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdHVzID0gMDsKKwljb25zdCB1bnNpZ25lZCBiaXRzID0gcmVhZF9yZWdpc3Rlcihjb3VudGVyLAorCQlOSVRJT19HeHhfU3RhdHVzX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJaWYgKGJpdHMgJiBHaV9Bcm1lZF9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCkpIHsKKwkJc3RhdHVzIHw9IENPTUVESV9DT1VOVEVSX0FSTUVEOworCQlpZiAoYml0cyAmIEdpX0NvdW50aW5nX0JpdChjb3VudGVyLT5jb3VudGVyX2luZGV4KSkKKwkJCXN0YXR1cyB8PSBDT01FRElfQ09VTlRFUl9DT1VOVElORzsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgbmlfdGlvX3NldF9zeW5jX21vZGUoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIGludCBmb3JjZV9hbHRfc3luYykKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJY29uc3QgdW5zaWduZWQgY291bnRpbmdfbW9kZV9yZWcgPQorCQlOSVRJT19HaV9Db3VudGluZ19Nb2RlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKKwlzdGF0aWMgY29uc3QgdWludDY0X3QgbWluX25vcm1hbF9zeW5jX3BlcmlvZF9wcyA9IDI1MDAwOworCWNvbnN0IHVpbnQ2NF90IGNsb2NrX3BlcmlvZF9wcyA9IG5pX3Rpb19jbG9ja19wZXJpb2RfcHMoY291bnRlciwKKwkJbmlfdGlvX2dlbmVyaWNfY2xvY2tfc3JjX3NlbGVjdChjb3VudGVyKSk7CisKKwlpZiAobmlfdGlvX2NvdW50aW5nX21vZGVfcmVnaXN0ZXJzX3ByZXNlbnQoY291bnRlcl9kZXYpID09IDApCisJCXJldHVybjsKKworCXN3aXRjaCAobmlfdGlvX2dldF9zb2Z0X2NvcHkoY291bnRlciwKKwkJCWNvdW50aW5nX21vZGVfcmVnKSAmIEdpX0NvdW50aW5nX01vZGVfTWFzaykgeworCWNhc2UgR2lfQ291bnRpbmdfTW9kZV9RdWFkcmF0dXJlWDFfQml0czoKKwljYXNlIEdpX0NvdW50aW5nX01vZGVfUXVhZHJhdHVyZVgyX0JpdHM6CisJY2FzZSBHaV9Db3VudGluZ19Nb2RlX1F1YWRyYXR1cmVYNF9CaXRzOgorCWNhc2UgR2lfQ291bnRpbmdfTW9kZV9TeW5jX1NvdXJjZV9CaXRzOgorCQlmb3JjZV9hbHRfc3luYyA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwkvKiBJdCdzIG5vdCBjbGVhciB3aGF0IHdlIHNob3VsZCBkbyBpZiBjbG9ja19wZXJpb2QgaXMgdW5rbm93biwgc28gd2UgYXJlIG5vdAorCSAgIHVzaW5nIHRoZSBhbHQgc3luYyBiaXQgaW4gdGhhdCBjYXNlLCBidXQgYWxsb3cgdGhlIGNhbGxlciB0byBkZWNpZGUgYnkgdXNpbmcgdGhlCisJICAgZm9yY2VfYWx0X3N5bmMgcGFyYW1ldGVyLiAqLworCWlmIChmb3JjZV9hbHRfc3luYyB8fAorCQkoY2xvY2tfcGVyaW9kX3BzCisJCQkmJiBjbG9ja19wZXJpb2RfcHMgPCBtaW5fbm9ybWFsX3N5bmNfcGVyaW9kX3BzKSkgeworCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwgY291bnRpbmdfbW9kZV9yZWcsCisJCQlHaV9BbHRlcm5hdGVfU3luY19CaXQoY291bnRlcl9kZXYtPnZhcmlhbnQpLAorCQkJR2lfQWx0ZXJuYXRlX1N5bmNfQml0KGNvdW50ZXJfZGV2LT52YXJpYW50KSk7CisJfSBlbHNlIHsKKwkJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsIGNvdW50aW5nX21vZGVfcmVnLAorCQkJR2lfQWx0ZXJuYXRlX1N5bmNfQml0KGNvdW50ZXJfZGV2LT52YXJpYW50KSwgMHgwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmlfdGlvX3NldF9jb3VudGVyX21vZGUoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIG1vZGUpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCXVuc2lnbmVkIG1vZGVfcmVnX21hc2s7CisJdW5zaWduZWQgbW9kZV9yZWdfdmFsdWVzOworCXVuc2lnbmVkIGlucHV0X3NlbGVjdF9iaXRzID0gMDsKKwkvKiB0aGVzZSBiaXRzIG1hcCBkaXJlY3RseSBvbiB0byB0aGUgbW9kZSByZWdpc3RlciAqLworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBtb2RlX3JlZ19kaXJlY3RfbWFzayA9CisJCU5JX0dQQ1RfR0FURV9PTl9CT1RIX0VER0VTX0JJVCB8IE5JX0dQQ1RfRURHRV9HQVRFX01PREVfTUFTSyB8CisJCU5JX0dQQ1RfU1RPUF9NT0RFX01BU0sgfCBOSV9HUENUX09VVFBVVF9NT0RFX01BU0sgfAorCQlOSV9HUENUX0hBUkRXQVJFX0RJU0FSTV9NQVNLIHwgTklfR1BDVF9MT0FESU5HX09OX1RDX0JJVCB8CisJCU5JX0dQQ1RfTE9BRElOR19PTl9HQVRFX0JJVCB8IE5JX0dQQ1RfTE9BRF9CX1NFTEVDVF9CSVQ7CisKKwltb2RlX3JlZ19tYXNrID0gbW9kZV9yZWdfZGlyZWN0X21hc2sgfCBHaV9SZWxvYWRfU291cmNlX1N3aXRjaGluZ19CaXQ7CisJbW9kZV9yZWdfdmFsdWVzID0gbW9kZSAmIG1vZGVfcmVnX2RpcmVjdF9tYXNrOworCXN3aXRjaCAobW9kZSAmIE5JX0dQQ1RfUkVMT0FEX1NPVVJDRV9NQVNLKSB7CisJY2FzZSBOSV9HUENUX1JFTE9BRF9TT1VSQ0VfRklYRURfQklUUzoKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1JFTE9BRF9TT1VSQ0VfU1dJVENISU5HX0JJVFM6CisJCW1vZGVfcmVnX3ZhbHVlcyB8PSBHaV9SZWxvYWRfU291cmNlX1N3aXRjaGluZ19CaXQ7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9SRUxPQURfU09VUkNFX0dBVEVfU0VMRUNUX0JJVFM6CisJCWlucHV0X3NlbGVjdF9iaXRzIHw9IEdpX0dhdGVfU2VsZWN0X0xvYWRfU291cmNlX0JpdDsKKwkJbW9kZV9yZWdfbWFzayB8PSBHaV9HYXRpbmdfTW9kZV9NYXNrOworCQltb2RlX3JlZ192YWx1ZXMgfD0gR2lfTGV2ZWxfR2F0aW5nX0JpdHM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwgTklUSU9fR2lfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCW1vZGVfcmVnX21hc2ssIG1vZGVfcmVnX3ZhbHVlcyk7CisKKwlpZiAobmlfdGlvX2NvdW50aW5nX21vZGVfcmVnaXN0ZXJzX3ByZXNlbnQoY291bnRlcl9kZXYpKSB7CisJCXVuc2lnbmVkIGNvdW50aW5nX21vZGVfYml0cyA9IDA7CisJCWNvdW50aW5nX21vZGVfYml0cyB8PQorCQkJKG1vZGUgPj4gTklfR1BDVF9DT1VOVElOR19NT0RFX1NISUZUKSAmCisJCQlHaV9Db3VudGluZ19Nb2RlX01hc2s7CisJCWNvdW50aW5nX21vZGVfYml0cyB8PQorCQkJKChtb2RlID4+IE5JX0dQQ1RfSU5ERVhfUEhBU0VfQklUU0hJRlQpIDw8CisJCQlHaV9JbmRleF9QaGFzZV9CaXRzaGlmdCkgJiBHaV9JbmRleF9QaGFzZV9NYXNrOworCQlpZiAobW9kZSAmIE5JX0dQQ1RfSU5ERVhfRU5BQkxFX0JJVCkgeworCQkJY291bnRpbmdfbW9kZV9iaXRzIHw9IEdpX0luZGV4X01vZGVfQml0OworCQl9CisJCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQkJTklUSU9fR2lfQ291bnRpbmdfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCQlHaV9Db3VudGluZ19Nb2RlX01hc2sgfCBHaV9JbmRleF9QaGFzZV9NYXNrIHwKKwkJCUdpX0luZGV4X01vZGVfQml0LCBjb3VudGluZ19tb2RlX2JpdHMpOworCQluaV90aW9fc2V0X3N5bmNfbW9kZShjb3VudGVyLCAwKTsKKwl9CisKKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwgTklUSU9fR2lfQ29tbWFuZF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX1VwX0Rvd25fTWFzaywKKwkJKG1vZGUgPj4gTklfR1BDVF9DT1VOVElOR19ESVJFQ1RJT05fU0hJRlQpIDw8IEdpX1VwX0Rvd25fU2hpZnQpOworCisJaWYgKG1vZGUgJiBOSV9HUENUX09SX0dBVEVfQklUKSB7CisJCWlucHV0X3NlbGVjdF9iaXRzIHw9IEdpX09yX0dhdGVfQml0OworCX0KKwlpZiAobW9kZSAmIE5JX0dQQ1RfSU5WRVJUX09VVFBVVF9CSVQpIHsKKwkJaW5wdXRfc2VsZWN0X2JpdHMgfD0gR2lfT3V0cHV0X1BvbGFyaXR5X0JpdDsKKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX0dhdGVfU2VsZWN0X0xvYWRfU291cmNlX0JpdCB8IEdpX09yX0dhdGVfQml0IHwKKwkJR2lfT3V0cHV0X1BvbGFyaXR5X0JpdCwgaW5wdXRfc2VsZWN0X2JpdHMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBuaV90aW9fYXJtKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBpbnQgYXJtLCB1bnNpZ25lZCBzdGFydF90cmlnZ2VyKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKworCXVuc2lnbmVkIGNvbW1hbmRfdHJhbnNpZW50X2JpdHMgPSAwOworCisJaWYgKGFybSkgeworCQlzd2l0Y2ggKHN0YXJ0X3RyaWdnZXIpIHsKKwkJY2FzZSBOSV9HUENUX0FSTV9JTU1FRElBVEU6CisJCQljb21tYW5kX3RyYW5zaWVudF9iaXRzIHw9IEdpX0FybV9CaXQ7CisJCQlicmVhazsKKwkJY2FzZSBOSV9HUENUX0FSTV9QQUlSRURfSU1NRURJQVRFOgorCQkJY29tbWFuZF90cmFuc2llbnRfYml0cyB8PSBHaV9Bcm1fQml0IHwgR2lfQXJtX0NvcHlfQml0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlpZiAobmlfdGlvX2NvdW50aW5nX21vZGVfcmVnaXN0ZXJzX3ByZXNlbnQoY291bnRlcl9kZXYpKSB7CisJCQl1bnNpZ25lZCBjb3VudGluZ19tb2RlX2JpdHMgPSAwOworCisJCQlzd2l0Y2ggKHN0YXJ0X3RyaWdnZXIpIHsKKwkJCWNhc2UgTklfR1BDVF9BUk1fSU1NRURJQVRFOgorCQkJY2FzZSBOSV9HUENUX0FSTV9QQUlSRURfSU1NRURJQVRFOgorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpZiAoc3RhcnRfdHJpZ2dlciAmIE5JX0dQQ1RfQVJNX1VOS05PV04pIHsKKwkJCQkJLyogcGFzcy10aHJvdWdoIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIHNvIHdlIGNhbiBmaWd1cmUgb3V0IHdoYXQgc2VsZWN0IGxhdGVyICovCisJCQkJCXVuc2lnbmVkIGh3X2FybV9zZWxlY3RfYml0cyA9CisJCQkJCQkoc3RhcnRfdHJpZ2dlciA8PAorCQkJCQkJR2lfSFdfQXJtX1NlbGVjdF9TaGlmdCkgJgorCQkJCQkJR2lfSFdfQXJtX1NlbGVjdF9NYXNrCisJCQkJCQkoY291bnRlcl9kZXYtPnZhcmlhbnQpOworCisJCQkJCWNvdW50aW5nX21vZGVfYml0cyB8PQorCQkJCQkJR2lfSFdfQXJtX0VuYWJsZV9CaXQgfAorCQkJCQkJaHdfYXJtX3NlbGVjdF9iaXRzOworCQkJCX0gZWxzZSB7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQkJCU5JVElPX0dpX0NvdW50aW5nX01vZGVfUmVnKGNvdW50ZXItPgorCQkJCQljb3VudGVyX2luZGV4KSwKKwkJCQlHaV9IV19Bcm1fU2VsZWN0X01hc2soY291bnRlcl9kZXYtPgorCQkJCQl2YXJpYW50KSB8IEdpX0hXX0FybV9FbmFibGVfQml0LAorCQkJCWNvdW50aW5nX21vZGVfYml0cyk7CisJCX0KKwl9IGVsc2UgeworCQljb21tYW5kX3RyYW5zaWVudF9iaXRzIHw9IEdpX0Rpc2FybV9CaXQ7CisJfQorCW5pX3Rpb19zZXRfYml0c190cmFuc2llbnQoY291bnRlciwKKwkJTklUSU9fR2lfQ29tbWFuZF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksIDAsIDAsCisJCWNvbW1hbmRfdHJhbnNpZW50X2JpdHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfNjYweF9zb3VyY2Vfc2VsZWN0X2JpdHModW5zaWduZWQgaW50IGNsb2NrX3NvdXJjZSkKK3sKKwl1bnNpZ25lZCBuaV82NjB4X2Nsb2NrOworCXVuc2lnbmVkIGk7CisJY29uc3QgdW5zaWduZWQgY2xvY2tfc2VsZWN0X2JpdHMgPQorCQljbG9ja19zb3VyY2UgJiBOSV9HUENUX0NMT0NLX1NSQ19TRUxFQ1RfTUFTSzsKKworCXN3aXRjaCAoY2xvY2tfc2VsZWN0X2JpdHMpIHsKKwljYXNlIE5JX0dQQ1RfVElNRUJBU0VfMV9DTE9DS19TUkNfQklUUzoKKwkJbmlfNjYweF9jbG9jayA9IE5JXzY2MHhfVGltZWJhc2VfMV9DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzJfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pXzY2MHhfY2xvY2sgPSBOSV82NjB4X1RpbWViYXNlXzJfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9USU1FQkFTRV8zX0NMT0NLX1NSQ19CSVRTOgorCQluaV82NjB4X2Nsb2NrID0gTklfNjYweF9UaW1lYmFzZV8zX0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfTE9HSUNfTE9XX0NMT0NLX1NSQ19CSVRTOgorCQluaV82NjB4X2Nsb2NrID0gTklfNjYweF9Mb2dpY19Mb3dfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9TT1VSQ0VfUElOX2lfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pXzY2MHhfY2xvY2sgPSBOSV82NjB4X1NvdXJjZV9QaW5faV9DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX05FWFRfR0FURV9DTE9DS19TUkNfQklUUzoKKwkJbmlfNjYweF9jbG9jayA9IE5JXzY2MHhfTmV4dF9HYXRlX0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfTkVYVF9UQ19DTE9DS19TUkNfQklUUzoKKwkJbmlfNjYweF9jbG9jayA9IE5JXzY2MHhfTmV4dF9UQ19DbG9jazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKGNsb2NrX3NlbGVjdF9iaXRzID09IE5JX0dQQ1RfUlRTSV9DTE9DS19TUkNfQklUUyhpKSkgeworCQkJCW5pXzY2MHhfY2xvY2sgPSBOSV82NjB4X1JUU0lfQ2xvY2soaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfc291cmNlX3BpbjsgKytpKSB7CisJCQlpZiAoY2xvY2tfc2VsZWN0X2JpdHMgPT0KKwkJCQlOSV9HUENUX1NPVVJDRV9QSU5fQ0xPQ0tfU1JDX0JJVFMoaSkpIHsKKwkJCQluaV82NjB4X2Nsb2NrID0gTklfNjYweF9Tb3VyY2VfUGluX0Nsb2NrKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X3NvdXJjZV9waW4pCisJCQlicmVhazsKKwkJbmlfNjYweF9jbG9jayA9IDA7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIEdpX1NvdXJjZV9TZWxlY3RfQml0cyhuaV82NjB4X2Nsb2NrKTsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pX21fc2VyaWVzX3NvdXJjZV9zZWxlY3RfYml0cyh1bnNpZ25lZCBpbnQgY2xvY2tfc291cmNlKQoreworCXVuc2lnbmVkIG5pX21fc2VyaWVzX2Nsb2NrOworCXVuc2lnbmVkIGk7CisJY29uc3QgdW5zaWduZWQgY2xvY2tfc2VsZWN0X2JpdHMgPQorCQljbG9ja19zb3VyY2UgJiBOSV9HUENUX0NMT0NLX1NSQ19TRUxFQ1RfTUFTSzsKKwlzd2l0Y2ggKGNsb2NrX3NlbGVjdF9iaXRzKSB7CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzFfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfVGltZWJhc2VfMV9DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzJfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfVGltZWJhc2VfMl9DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzNfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfVGltZWJhc2VfM19DbG9jazsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX0xPR0lDX0xPV19DTE9DS19TUkNfQklUUzoKKwkJbmlfbV9zZXJpZXNfY2xvY2sgPSBOSV9NX1Nlcmllc19Mb2dpY19Mb3dfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9ORVhUX0dBVEVfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfTmV4dF9HYXRlX0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfTkVYVF9UQ19DTE9DS19TUkNfQklUUzoKKwkJbmlfbV9zZXJpZXNfY2xvY2sgPSBOSV9NX1Nlcmllc19OZXh0X1RDX0Nsb2NrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfUFhJMTBfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfUFhJMTBfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9QWElfU1RBUl9UUklHR0VSX0NMT0NLX1NSQ19CSVRTOgorCQluaV9tX3Nlcmllc19jbG9jayA9IE5JX01fU2VyaWVzX1BYSV9TdGFyX1RyaWdnZXJfQ2xvY2s7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9BTkFMT0dfVFJJR0dFUl9PVVRfQ0xPQ0tfU1JDX0JJVFM6CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfQW5hbG9nX1RyaWdnZXJfT3V0X0Nsb2NrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmb3IgKGkgPSAwOyBpIDw9IG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKGNsb2NrX3NlbGVjdF9iaXRzID09IE5JX0dQQ1RfUlRTSV9DTE9DS19TUkNfQklUUyhpKSkgeworCQkJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfUlRTSV9DbG9jayhpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV9tX3Nlcmllc19tYXhfcnRzaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfbV9zZXJpZXNfbWF4X3BmaV9jaGFubmVsOyArK2kpIHsKKwkJCWlmIChjbG9ja19zZWxlY3RfYml0cyA9PSBOSV9HUENUX1BGSV9DTE9DS19TUkNfQklUUyhpKSkgeworCQkJCW5pX21fc2VyaWVzX2Nsb2NrID0gTklfTV9TZXJpZXNfUEZJX0Nsb2NrKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pX21fc2VyaWVzX21heF9wZmlfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlydF9wcmludGsoImludmFsaWQgY2xvY2sgc291cmNlIDB4JWx4XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpY2xvY2tfc291cmNlKTsKKwkJQlVHKCk7CisJCW5pX21fc2VyaWVzX2Nsb2NrID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBHaV9Tb3VyY2VfU2VsZWN0X0JpdHMobmlfbV9zZXJpZXNfY2xvY2spOworfTsKKworc3RhdGljIHZvaWQgbmlfdGlvX3NldF9zb3VyY2Vfc3Vic2VsZWN0KHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGludCBjbG9ja19zb3VyY2UpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCWNvbnN0IHVuc2lnbmVkIHNlY29uZF9nYXRlX3JlZyA9CisJCU5JVElPX0dpX1NlY29uZF9HYXRlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKKworCWlmIChjb3VudGVyX2Rldi0+dmFyaWFudCAhPSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXMpCisJCXJldHVybjsKKwlzd2l0Y2ggKGNsb2NrX3NvdXJjZSAmIE5JX0dQQ1RfQ0xPQ0tfU1JDX1NFTEVDVF9NQVNLKSB7CisJCS8qIEdpX1NvdXJjZV9TdWJzZWxlY3QgaXMgemVybyAqLworCWNhc2UgTklfR1BDVF9ORVhUX0dBVEVfQ0xPQ0tfU1JDX0JJVFM6CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzNfQ0xPQ0tfU1JDX0JJVFM6CisJCWNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10gJj0gfkdpX1NvdXJjZV9TdWJzZWxlY3RfQml0OworCQlicmVhazsKKwkJLyogR2lfU291cmNlX1N1YnNlbGVjdCBpcyBvbmUgKi8KKwljYXNlIE5JX0dQQ1RfQU5BTE9HX1RSSUdHRVJfT1VUX0NMT0NLX1NSQ19CSVRTOgorCWNhc2UgTklfR1BDVF9QWElfU1RBUl9UUklHR0VSX0NMT0NLX1NSQ19CSVRTOgorCQljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddIHw9IEdpX1NvdXJjZV9TdWJzZWxlY3RfQml0OworCQlicmVhazsKKwkJLyogR2lfU291cmNlX1N1YnNlbGVjdCBkb2Vzbid0IG1hdHRlciAqLworCWRlZmF1bHQ6CisJCXJldHVybjsKKwkJYnJlYWs7CisJfQorCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10sCisJCXNlY29uZF9nYXRlX3JlZyk7Cit9CisKK3N0YXRpYyBpbnQgbmlfdGlvX3NldF9jbG9ja19zcmMoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJdW5zaWduZWQgaW50IGNsb2NrX3NvdXJjZSwgdW5zaWduZWQgaW50IHBlcmlvZF9ucykKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJdW5zaWduZWQgaW5wdXRfc2VsZWN0X2JpdHMgPSAwOworCXN0YXRpYyBjb25zdCB1aW50NjRfdCBwaWNvX3Blcl9uYW5vID0gMTAwMDsKKworLypGSVhNRTogdmFsaWRhdGUgY2xvY2sgc291cmNlICovCisJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgeworCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCWlucHV0X3NlbGVjdF9iaXRzIHw9IG5pXzY2MHhfc291cmNlX3NlbGVjdF9iaXRzKGNsb2NrX3NvdXJjZSk7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQlpbnB1dF9zZWxlY3RfYml0cyB8PQorCQkJbmlfbV9zZXJpZXNfc291cmNlX3NlbGVjdF9iaXRzKGNsb2NrX3NvdXJjZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJaWYgKGNsb2NrX3NvdXJjZSAmIE5JX0dQQ1RfSU5WRVJUX0NMT0NLX1NSQ19CSVQpCisJCWlucHV0X3NlbGVjdF9iaXRzIHw9IEdpX1NvdXJjZV9Qb2xhcml0eV9CaXQ7CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX1NvdXJjZV9TZWxlY3RfTWFzayB8IEdpX1NvdXJjZV9Qb2xhcml0eV9CaXQsCisJCWlucHV0X3NlbGVjdF9iaXRzKTsKKwluaV90aW9fc2V0X3NvdXJjZV9zdWJzZWxlY3QoY291bnRlciwgY2xvY2tfc291cmNlKTsKKwlpZiAobmlfdGlvX2NvdW50aW5nX21vZGVfcmVnaXN0ZXJzX3ByZXNlbnQoY291bnRlcl9kZXYpKSB7CisJCWNvbnN0IHVuc2lnbmVkIHByZXNjYWxpbmdfbW9kZSA9CisJCQljbG9ja19zb3VyY2UgJiBOSV9HUENUX1BSRVNDQUxFX01PREVfQ0xPQ0tfU1JDX01BU0s7CisJCXVuc2lnbmVkIGNvdW50aW5nX21vZGVfYml0cyA9IDA7CisKKwkJc3dpdGNoIChwcmVzY2FsaW5nX21vZGUpIHsKKwkJY2FzZSBOSV9HUENUX05PX1BSRVNDQUxFX0NMT0NLX1NSQ19CSVRTOgorCQkJYnJlYWs7CisJCWNhc2UgTklfR1BDVF9QUkVTQ0FMRV9YMl9DTE9DS19TUkNfQklUUzoKKwkJCWNvdW50aW5nX21vZGVfYml0cyB8PQorCQkJCUdpX1ByZXNjYWxlX1gyX0JpdChjb3VudGVyX2Rldi0+dmFyaWFudCk7CisJCQlicmVhazsKKwkJY2FzZSBOSV9HUENUX1BSRVNDQUxFX1g4X0NMT0NLX1NSQ19CSVRTOgorCQkJY291bnRpbmdfbW9kZV9iaXRzIHw9CisJCQkJR2lfUHJlc2NhbGVfWDhfQml0KGNvdW50ZXJfZGV2LT52YXJpYW50KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJCU5JVElPX0dpX0NvdW50aW5nX01vZGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQkJR2lfUHJlc2NhbGVfWDJfQml0KGNvdW50ZXJfZGV2LT4KKwkJCQl2YXJpYW50KSB8IEdpX1ByZXNjYWxlX1g4X0JpdChjb3VudGVyX2Rldi0+CisJCQkJdmFyaWFudCksIGNvdW50aW5nX21vZGVfYml0cyk7CisJfQorCWNvdW50ZXItPmNsb2NrX3BlcmlvZF9wcyA9IHBpY29fcGVyX25hbm8gKiBwZXJpb2RfbnM7CisJbmlfdGlvX3NldF9zeW5jX21vZGUoY291bnRlciwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV90aW9fY2xvY2tfc3JjX21vZGlmaWVycyhjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJY29uc3QgdW5zaWduZWQgY291bnRpbmdfbW9kZV9iaXRzID0gbmlfdGlvX2dldF9zb2Z0X2NvcHkoY291bnRlciwKKwkJTklUSU9fR2lfQ291bnRpbmdfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCXVuc2lnbmVkIGJpdHMgPSAwOworCisJaWYgKG5pX3Rpb19nZXRfc29mdF9jb3B5KGNvdW50ZXIsCisJCQlOSVRJT19HaV9JbnB1dF9TZWxlY3RfUmVnKGNvdW50ZXItPgorCQkJCWNvdW50ZXJfaW5kZXgpKSAmIEdpX1NvdXJjZV9Qb2xhcml0eV9CaXQpCisJCWJpdHMgfD0gTklfR1BDVF9JTlZFUlRfQ0xPQ0tfU1JDX0JJVDsKKwlpZiAoY291bnRpbmdfbW9kZV9iaXRzICYgR2lfUHJlc2NhbGVfWDJfQml0KGNvdW50ZXJfZGV2LT52YXJpYW50KSkKKwkJYml0cyB8PSBOSV9HUENUX1BSRVNDQUxFX1gyX0NMT0NLX1NSQ19CSVRTOworCWlmIChjb3VudGluZ19tb2RlX2JpdHMgJiBHaV9QcmVzY2FsZV9YOF9CaXQoY291bnRlcl9kZXYtPnZhcmlhbnQpKQorCQliaXRzIHw9IE5JX0dQQ1RfUFJFU0NBTEVfWDhfQ0xPQ0tfU1JDX0JJVFM7CisJcmV0dXJuIGJpdHM7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9tX3Nlcmllc19jbG9ja19zcmNfc2VsZWN0KGNvbnN0IHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwljb25zdCB1bnNpZ25lZCBzZWNvbmRfZ2F0ZV9yZWcgPQorCQlOSVRJT19HaV9TZWNvbmRfR2F0ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJdW5zaWduZWQgY2xvY2tfc291cmNlID0gMDsKKwl1bnNpZ25lZCBpOworCWNvbnN0IHVuc2lnbmVkIGlucHV0X3NlbGVjdCA9IChuaV90aW9fZ2V0X3NvZnRfY29weShjb3VudGVyLAorCQkJTklUSU9fR2lfSW5wdXRfU2VsZWN0X1JlZyhjb3VudGVyLT4KKwkJCQljb3VudGVyX2luZGV4KSkgJiBHaV9Tb3VyY2VfU2VsZWN0X01hc2spID4+CisJCUdpX1NvdXJjZV9TZWxlY3RfU2hpZnQ7CisKKwlzd2l0Y2ggKGlucHV0X3NlbGVjdCkgeworCWNhc2UgTklfTV9TZXJpZXNfVGltZWJhc2VfMV9DbG9jazoKKwkJY2xvY2tfc291cmNlID0gTklfR1BDVF9USU1FQkFTRV8xX0NMT0NLX1NSQ19CSVRTOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX1RpbWViYXNlXzJfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfVElNRUJBU0VfMl9DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV9NX1Nlcmllc19UaW1lYmFzZV8zX0Nsb2NrOgorCQlpZiAoY291bnRlcl9kZXYtPgorCQkJcmVnc1tzZWNvbmRfZ2F0ZV9yZWddICYgR2lfU291cmNlX1N1YnNlbGVjdF9CaXQpCisJCQljbG9ja19zb3VyY2UgPQorCQkJCU5JX0dQQ1RfQU5BTE9HX1RSSUdHRVJfT1VUX0NMT0NLX1NSQ19CSVRTOworCQllbHNlCisJCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1RJTUVCQVNFXzNfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfTG9naWNfTG93X0Nsb2NrOgorCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX0xPR0lDX0xPV19DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV9NX1Nlcmllc19OZXh0X0dhdGVfQ2xvY2s6CisJCWlmIChjb3VudGVyX2Rldi0+CisJCQlyZWdzW3NlY29uZF9nYXRlX3JlZ10gJiBHaV9Tb3VyY2VfU3Vic2VsZWN0X0JpdCkKKwkJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfUFhJX1NUQVJfVFJJR0dFUl9DTE9DS19TUkNfQklUUzsKKwkJZWxzZQorCQkJY2xvY2tfc291cmNlID0gTklfR1BDVF9ORVhUX0dBVEVfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfUFhJMTBfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfUFhJMTBfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfTmV4dF9UQ19DbG9jazoKKwkJY2xvY2tfc291cmNlID0gTklfR1BDVF9ORVhUX1RDX0NMT0NLX1NSQ19CSVRTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmb3IgKGkgPSAwOyBpIDw9IG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKGlucHV0X3NlbGVjdCA9PSBOSV9NX1Nlcmllc19SVFNJX0Nsb2NrKGkpKSB7CisJCQkJY2xvY2tfc291cmNlID0gTklfR1BDVF9SVFNJX0NMT0NLX1NSQ19CSVRTKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWwpCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8PSBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKGlucHV0X3NlbGVjdCA9PSBOSV9NX1Nlcmllc19QRklfQ2xvY2soaSkpIHsKKwkJCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1BGSV9DTE9DS19TUkNfQklUUyhpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWwpCisJCQlicmVhazsKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwljbG9ja19zb3VyY2UgfD0gbmlfdGlvX2Nsb2NrX3NyY19tb2RpZmllcnMoY291bnRlcik7CisJcmV0dXJuIGNsb2NrX3NvdXJjZTsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pXzY2MHhfY2xvY2tfc3JjX3NlbGVjdChjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwl1bnNpZ25lZCBjbG9ja19zb3VyY2UgPSAwOworCXVuc2lnbmVkIGk7CisJY29uc3QgdW5zaWduZWQgaW5wdXRfc2VsZWN0ID0gKG5pX3Rpb19nZXRfc29mdF9jb3B5KGNvdW50ZXIsCisJCQlOSVRJT19HaV9JbnB1dF9TZWxlY3RfUmVnKGNvdW50ZXItPgorCQkJCWNvdW50ZXJfaW5kZXgpKSAmIEdpX1NvdXJjZV9TZWxlY3RfTWFzaykgPj4KKwkJR2lfU291cmNlX1NlbGVjdF9TaGlmdDsKKworCXN3aXRjaCAoaW5wdXRfc2VsZWN0KSB7CisJY2FzZSBOSV82NjB4X1RpbWViYXNlXzFfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfVElNRUJBU0VfMV9DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X1RpbWViYXNlXzJfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfVElNRUJBU0VfMl9DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X1RpbWViYXNlXzNfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfVElNRUJBU0VfM19DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X0xvZ2ljX0xvd19DbG9jazoKKwkJY2xvY2tfc291cmNlID0gTklfR1BDVF9MT0dJQ19MT1dfQ0xPQ0tfU1JDX0JJVFM7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9Tb3VyY2VfUGluX2lfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfU09VUkNFX1BJTl9pX0NMT0NLX1NSQ19CSVRTOworCQlicmVhazsKKwljYXNlIE5JXzY2MHhfTmV4dF9HYXRlX0Nsb2NrOgorCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX05FWFRfR0FURV9DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X05leHRfVENfQ2xvY2s6CisJCWNsb2NrX3NvdXJjZSA9IE5JX0dQQ1RfTkVYVF9UQ19DTE9DS19TUkNfQklUUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKGlucHV0X3NlbGVjdCA9PSBOSV82NjB4X1JUU0lfQ2xvY2soaSkpIHsKKwkJCQljbG9ja19zb3VyY2UgPSBOSV9HUENUX1JUU0lfQ0xPQ0tfU1JDX0JJVFMoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfc291cmNlX3BpbjsgKytpKSB7CisJCQlpZiAoaW5wdXRfc2VsZWN0ID09IE5JXzY2MHhfU291cmNlX1Bpbl9DbG9jayhpKSkgeworCQkJCWNsb2NrX3NvdXJjZSA9CisJCQkJCU5JX0dQQ1RfU09VUkNFX1BJTl9DTE9DS19TUkNfQklUUyhpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV82NjB4X21heF9zb3VyY2VfcGluKQorCQkJYnJlYWs7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJY2xvY2tfc291cmNlIHw9IG5pX3Rpb19jbG9ja19zcmNfbW9kaWZpZXJzKGNvdW50ZXIpOworCXJldHVybiBjbG9ja19zb3VyY2U7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBuaV90aW9fZ2VuZXJpY19jbG9ja19zcmNfc2VsZWN0KGNvbnN0IHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQoreworCXN3aXRjaCAoY291bnRlci0+Y291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwkJcmV0dXJuIG5pX21fc2VyaWVzX2Nsb2NrX3NyY19zZWxlY3QoY291bnRlcik7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCXJldHVybiBuaV82NjB4X2Nsb2NrX3NyY19zZWxlY3QoY291bnRlcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBuaV90aW9fY2xvY2tfcGVyaW9kX3BzKGNvbnN0IHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGdlbmVyaWNfY2xvY2tfc291cmNlKQoreworCXVpbnQ2NF90IGNsb2NrX3BlcmlvZF9wczsKKworCXN3aXRjaCAoZ2VuZXJpY19jbG9ja19zb3VyY2UgJiBOSV9HUENUX0NMT0NLX1NSQ19TRUxFQ1RfTUFTSykgeworCWNhc2UgTklfR1BDVF9USU1FQkFTRV8xX0NMT0NLX1NSQ19CSVRTOgorCQljbG9ja19wZXJpb2RfcHMgPSA1MDAwMDsKKwkJYnJlYWs7CisJY2FzZSBOSV9HUENUX1RJTUVCQVNFXzJfQ0xPQ0tfU1JDX0JJVFM6CisJCWNsb2NrX3BlcmlvZF9wcyA9IDEwMDAwMDAwOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfVElNRUJBU0VfM19DTE9DS19TUkNfQklUUzoKKwkJY2xvY2tfcGVyaW9kX3BzID0gMTI1MDA7CisJCWJyZWFrOworCWNhc2UgTklfR1BDVF9QWEkxMF9DTE9DS19TUkNfQklUUzoKKwkJY2xvY2tfcGVyaW9kX3BzID0gMTAwMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBjbG9jayBwZXJpb2QgaXMgc3BlY2lmaWVkIGJ5IHVzZXIgd2l0aCBwcmVzY2FsaW5nIGFscmVhZHkgdGFrZW4gaW50byBhY2NvdW50LiAqLworCQlyZXR1cm4gY291bnRlci0+Y2xvY2tfcGVyaW9kX3BzOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGdlbmVyaWNfY2xvY2tfc291cmNlICYgTklfR1BDVF9QUkVTQ0FMRV9NT0RFX0NMT0NLX1NSQ19NQVNLKSB7CisJY2FzZSBOSV9HUENUX05PX1BSRVNDQUxFX0NMT0NLX1NSQ19CSVRTOgorCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfUFJFU0NBTEVfWDJfQ0xPQ0tfU1JDX0JJVFM6CisJCWNsb2NrX3BlcmlvZF9wcyAqPSAyOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfUFJFU0NBTEVfWDhfQ0xPQ0tfU1JDX0JJVFM6CisJCWNsb2NrX3BlcmlvZF9wcyAqPSA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBjbG9ja19wZXJpb2RfcHM7Cit9CisKK3N0YXRpYyB2b2lkIG5pX3Rpb19nZXRfY2xvY2tfc3JjKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGludCAqIGNsb2NrX3NvdXJjZSwgdW5zaWduZWQgaW50ICogcGVyaW9kX25zKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBwaWNvX3Blcl9uYW5vID0gMTAwMDsKKwl1aW50NjRfdCB0ZW1wNjQ7CisJKmNsb2NrX3NvdXJjZSA9IG5pX3Rpb19nZW5lcmljX2Nsb2NrX3NyY19zZWxlY3QoY291bnRlcik7CisJdGVtcDY0ID0gbmlfdGlvX2Nsb2NrX3BlcmlvZF9wcyhjb3VudGVyLCAqY2xvY2tfc291cmNlKTsKKwlkb19kaXYodGVtcDY0LCBwaWNvX3Blcl9uYW5vKTsKKwkqcGVyaW9kX25zID0gdGVtcDY0OworfQorCitzdGF0aWMgdm9pZCBuaV90aW9fc2V0X2ZpcnN0X2dhdGVfbW9kaWZpZXJzKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGludCBnYXRlX3NvdXJjZSkKK3sKKwljb25zdCB1bnNpZ25lZCBtb2RlX21hc2sgPSBHaV9HYXRlX1BvbGFyaXR5X0JpdCB8IEdpX0dhdGluZ19Nb2RlX01hc2s7CisJdW5zaWduZWQgbW9kZV92YWx1ZXMgPSAwOworCisJaWYgKGdhdGVfc291cmNlICYgQ1JfSU5WRVJUKSB7CisJCW1vZGVfdmFsdWVzIHw9IEdpX0dhdGVfUG9sYXJpdHlfQml0OworCX0KKwlpZiAoZ2F0ZV9zb3VyY2UgJiBDUl9FREdFKSB7CisJCW1vZGVfdmFsdWVzIHw9IEdpX1Jpc2luZ19FZGdlX0dhdGluZ19CaXRzOworCX0gZWxzZSB7CisJCW1vZGVfdmFsdWVzIHw9IEdpX0xldmVsX0dhdGluZ19CaXRzOworCX0KKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwgTklUSU9fR2lfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCW1vZGVfbWFzaywgbW9kZV92YWx1ZXMpOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfc2V0X2ZpcnN0X2dhdGUoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIGludCBnYXRlX3NvdXJjZSkKK3sKKwljb25zdCB1bnNpZ25lZCBzZWxlY3RlZF9nYXRlID0gQ1JfQ0hBTihnYXRlX3NvdXJjZSk7CisJLyogYml0cyBvZiBzZWxlY3RlZF9nYXRlIHRoYXQgbWF5IGJlIG1lYW5pbmdmdWwgdG8gaW5wdXQgc2VsZWN0IHJlZ2lzdGVyICovCisJY29uc3QgdW5zaWduZWQgc2VsZWN0ZWRfZ2F0ZV9tYXNrID0gMHgxZjsKKwl1bnNpZ25lZCBuaV82NjB4X2dhdGVfc2VsZWN0OworCXVuc2lnbmVkIGk7CisKKwlzd2l0Y2ggKHNlbGVjdGVkX2dhdGUpIHsKKwljYXNlIE5JX0dQQ1RfTkVYVF9TT1VSQ0VfR0FURV9TRUxFQ1Q6CisJCW5pXzY2MHhfZ2F0ZV9zZWxlY3QgPSBOSV82NjB4X05leHRfU1JDX0dhdGVfU2VsZWN0OworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfTkVYVF9PVVRfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX0xPR0lDX0xPV19HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfU09VUkNFX1BJTl9pX0dBVEVfU0VMRUNUOgorCWNhc2UgTklfR1BDVF9HQVRFX1BJTl9pX0dBVEVfU0VMRUNUOgorCQluaV82NjB4X2dhdGVfc2VsZWN0ID0gc2VsZWN0ZWRfZ2F0ZSAmIHNlbGVjdGVkX2dhdGVfbWFzazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKHNlbGVjdGVkX2dhdGUgPT0gTklfR1BDVF9SVFNJX0dBVEVfU0VMRUNUKGkpKSB7CisJCQkJbmlfNjYweF9nYXRlX3NlbGVjdCA9CisJCQkJCXNlbGVjdGVkX2dhdGUgJiBzZWxlY3RlZF9nYXRlX21hc2s7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfZ2F0ZV9waW47ICsraSkgeworCQkJaWYgKHNlbGVjdGVkX2dhdGUgPT0gTklfR1BDVF9HQVRFX1BJTl9HQVRFX1NFTEVDVChpKSkgeworCQkJCW5pXzY2MHhfZ2F0ZV9zZWxlY3QgPQorCQkJCQlzZWxlY3RlZF9nYXRlICYgc2VsZWN0ZWRfZ2F0ZV9tYXNrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X2dhdGVfcGluKQorCQkJYnJlYWs7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX0dhdGVfU2VsZWN0X01hc2ssIEdpX0dhdGVfU2VsZWN0X0JpdHMobmlfNjYweF9nYXRlX3NlbGVjdCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX21fc2VyaWVzX3NldF9maXJzdF9nYXRlKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGludCBnYXRlX3NvdXJjZSkKK3sKKwljb25zdCB1bnNpZ25lZCBzZWxlY3RlZF9nYXRlID0gQ1JfQ0hBTihnYXRlX3NvdXJjZSk7CisJLyogYml0cyBvZiBzZWxlY3RlZF9nYXRlIHRoYXQgbWF5IGJlIG1lYW5pbmdmdWwgdG8gaW5wdXQgc2VsZWN0IHJlZ2lzdGVyICovCisJY29uc3QgdW5zaWduZWQgc2VsZWN0ZWRfZ2F0ZV9tYXNrID0gMHgxZjsKKwl1bnNpZ25lZCBuaV9tX3Nlcmllc19nYXRlX3NlbGVjdDsKKwl1bnNpZ25lZCBpOworCisJc3dpdGNoIChzZWxlY3RlZF9nYXRlKSB7CisJY2FzZSBOSV9HUENUX1RJTUVTVEFNUF9NVVhfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX0FJX1NUQVJUMl9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfUFhJX1NUQVJfVFJJR0dFUl9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfTkVYVF9PVVRfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX0FJX1NUQVJUMV9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfTkVYVF9TT1VSQ0VfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX0FOQUxPR19UUklHR0VSX09VVF9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfTE9HSUNfTE9XX0dBVEVfU0VMRUNUOgorCQluaV9tX3Nlcmllc19nYXRlX3NlbGVjdCA9IHNlbGVjdGVkX2dhdGUgJiBzZWxlY3RlZF9nYXRlX21hc2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfbV9zZXJpZXNfbWF4X3J0c2lfY2hhbm5lbDsgKytpKSB7CisJCQlpZiAoc2VsZWN0ZWRfZ2F0ZSA9PSBOSV9HUENUX1JUU0lfR0FURV9TRUxFQ1QoaSkpIHsKKwkJCQluaV9tX3Nlcmllc19nYXRlX3NlbGVjdCA9CisJCQkJCXNlbGVjdGVkX2dhdGUgJiBzZWxlY3RlZF9nYXRlX21hc2s7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfbV9zZXJpZXNfbWF4X3J0c2lfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDw9IG5pX21fc2VyaWVzX21heF9wZmlfY2hhbm5lbDsgKytpKSB7CisJCQlpZiAoc2VsZWN0ZWRfZ2F0ZSA9PSBOSV9HUENUX1BGSV9HQVRFX1NFTEVDVChpKSkgeworCQkJCW5pX21fc2VyaWVzX2dhdGVfc2VsZWN0ID0KKwkJCQkJc2VsZWN0ZWRfZ2F0ZSAmIHNlbGVjdGVkX2dhdGVfbWFzazsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV9tX3Nlcmllc19tYXhfcGZpX2NoYW5uZWwpCisJCQlicmVhazsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJTklUSU9fR2lfSW5wdXRfU2VsZWN0X1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJR2lfR2F0ZV9TZWxlY3RfTWFzaywKKwkJR2lfR2F0ZV9TZWxlY3RfQml0cyhuaV9tX3Nlcmllc19nYXRlX3NlbGVjdCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pXzY2MHhfc2V0X3NlY29uZF9nYXRlKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXVuc2lnbmVkIGludCBnYXRlX3NvdXJjZSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJY29uc3QgdW5zaWduZWQgc2Vjb25kX2dhdGVfcmVnID0KKwkJTklUSU9fR2lfU2Vjb25kX0dhdGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpOworCWNvbnN0IHVuc2lnbmVkIHNlbGVjdGVkX3NlY29uZF9nYXRlID0gQ1JfQ0hBTihnYXRlX3NvdXJjZSk7CisJLyogYml0cyBvZiBzZWNvbmRfZ2F0ZSB0aGF0IG1heSBiZSBtZWFuaW5nZnVsIHRvIHNlY29uZCBnYXRlIHJlZ2lzdGVyICovCisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNlbGVjdGVkX3NlY29uZF9nYXRlX21hc2sgPSAweDFmOworCXVuc2lnbmVkIG5pXzY2MHhfc2Vjb25kX2dhdGVfc2VsZWN0OworCXVuc2lnbmVkIGk7CisKKwlzd2l0Y2ggKHNlbGVjdGVkX3NlY29uZF9nYXRlKSB7CisJY2FzZSBOSV9HUENUX1NPVVJDRV9QSU5faV9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfVVBfRE9XTl9QSU5faV9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfU0VMRUNURURfR0FURV9HQVRFX1NFTEVDVDoKKwljYXNlIE5JX0dQQ1RfTkVYVF9PVVRfR0FURV9TRUxFQ1Q6CisJY2FzZSBOSV9HUENUX0xPR0lDX0xPV19HQVRFX1NFTEVDVDoKKwkJbmlfNjYweF9zZWNvbmRfZ2F0ZV9zZWxlY3QgPQorCQkJc2VsZWN0ZWRfc2Vjb25kX2dhdGUgJiBzZWxlY3RlZF9zZWNvbmRfZ2F0ZV9tYXNrOworCQlicmVhazsKKwljYXNlIE5JX0dQQ1RfTkVYVF9TT1VSQ0VfR0FURV9TRUxFQ1Q6CisJCW5pXzY2MHhfc2Vjb25kX2dhdGVfc2VsZWN0ID0KKwkJCU5JXzY2MHhfTmV4dF9TUkNfU2Vjb25kX0dhdGVfU2VsZWN0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmb3IgKGkgPSAwOyBpIDw9IG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbDsgKytpKSB7CisJCQlpZiAoc2VsZWN0ZWRfc2Vjb25kX2dhdGUgPT0gTklfR1BDVF9SVFNJX0dBVEVfU0VMRUNUKGkpKSB7CisJCQkJbmlfNjYweF9zZWNvbmRfZ2F0ZV9zZWxlY3QgPQorCQkJCQlzZWxlY3RlZF9zZWNvbmRfZ2F0ZSAmCisJCQkJCXNlbGVjdGVkX3NlY29uZF9nYXRlX21hc2s7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfNjYweF9tYXhfcnRzaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCWZvciAoaSA9IDA7IGkgPD0gbmlfNjYweF9tYXhfdXBfZG93bl9waW47ICsraSkgeworCQkJaWYgKHNlbGVjdGVkX3NlY29uZF9nYXRlID09CisJCQkJTklfR1BDVF9VUF9ET1dOX1BJTl9HQVRFX1NFTEVDVChpKSkgeworCQkJCW5pXzY2MHhfc2Vjb25kX2dhdGVfc2VsZWN0ID0KKwkJCQkJc2VsZWN0ZWRfc2Vjb25kX2dhdGUgJgorCQkJCQlzZWxlY3RlZF9zZWNvbmRfZ2F0ZV9tYXNrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X3VwX2Rvd25fcGluKQorCQkJYnJlYWs7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9OworCWNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10gfD0gR2lfU2Vjb25kX0dhdGVfTW9kZV9CaXQ7CisJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSAmPSB+R2lfU2Vjb25kX0dhdGVfU2VsZWN0X01hc2s7CisJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSB8PQorCQlHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfQml0cyhuaV82NjB4X3NlY29uZF9nYXRlX3NlbGVjdCk7CisJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwgY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSwKKwkJc2Vjb25kX2dhdGVfcmVnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuaV9tX3Nlcmllc19zZXRfc2Vjb25kX2dhdGUoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJdW5zaWduZWQgaW50IGdhdGVfc291cmNlKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwljb25zdCB1bnNpZ25lZCBzZWNvbmRfZ2F0ZV9yZWcgPQorCQlOSVRJT19HaV9TZWNvbmRfR2F0ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJY29uc3QgdW5zaWduZWQgc2VsZWN0ZWRfc2Vjb25kX2dhdGUgPSBDUl9DSEFOKGdhdGVfc291cmNlKTsKKwkvKiBiaXRzIG9mIHNlY29uZF9nYXRlIHRoYXQgbWF5IGJlIG1lYW5pbmdmdWwgdG8gc2Vjb25kIGdhdGUgcmVnaXN0ZXIgKi8KKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2VsZWN0ZWRfc2Vjb25kX2dhdGVfbWFzayA9IDB4MWY7CisJdW5zaWduZWQgbmlfbV9zZXJpZXNfc2Vjb25kX2dhdGVfc2VsZWN0OworCisJLyogRklYTUU6IFdlIGRvbid0IGtub3cgd2hhdCB0aGUgbS1zZXJpZXMgc2Vjb25kIGdhdGUgY29kZXMgYXJlLCBzbyB3ZSdsbCBqdXN0IHBhc3MKKwkgICB0aGUgYml0cyB0aHJvdWdoIGZvciBub3cuICovCisJc3dpdGNoIChzZWxlY3RlZF9zZWNvbmRfZ2F0ZSkgeworCWRlZmF1bHQ6CisJCW5pX21fc2VyaWVzX3NlY29uZF9nYXRlX3NlbGVjdCA9CisJCQlzZWxlY3RlZF9zZWNvbmRfZ2F0ZSAmIHNlbGVjdGVkX3NlY29uZF9nYXRlX21hc2s7CisJCWJyZWFrOworCX07CisJY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSB8PSBHaV9TZWNvbmRfR2F0ZV9Nb2RlX0JpdDsKKwljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddICY9IH5HaV9TZWNvbmRfR2F0ZV9TZWxlY3RfTWFzazsKKwljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddIHw9CisJCUdpX1NlY29uZF9HYXRlX1NlbGVjdF9CaXRzKG5pX21fc2VyaWVzX3NlY29uZF9nYXRlX3NlbGVjdCk7CisJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwgY291bnRlcl9kZXYtPnJlZ3Nbc2Vjb25kX2dhdGVfcmVnXSwKKwkJc2Vjb25kX2dhdGVfcmVnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG5pX3Rpb19zZXRfZ2F0ZV9zcmMoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHVuc2lnbmVkIGdhdGVfaW5kZXgsCisJdW5zaWduZWQgaW50IGdhdGVfc291cmNlKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwljb25zdCB1bnNpZ25lZCBzZWNvbmRfZ2F0ZV9yZWcgPQorCQlOSVRJT19HaV9TZWNvbmRfR2F0ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisKKwlzd2l0Y2ggKGdhdGVfaW5kZXgpIHsKKwljYXNlIDA6CisJCWlmIChDUl9DSEFOKGdhdGVfc291cmNlKSA9PSBOSV9HUENUX0RJU0FCTEVEX0dBVEVfU0VMRUNUKSB7CisJCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJCQlOSVRJT19HaV9Nb2RlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJCQlHaV9HYXRpbmdfTW9kZV9NYXNrLCBHaV9HYXRpbmdfRGlzYWJsZWRfQml0cyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQluaV90aW9fc2V0X2ZpcnN0X2dhdGVfbW9kaWZpZXJzKGNvdW50ZXIsIGdhdGVfc291cmNlKTsKKwkJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgeworCQljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJCQlyZXR1cm4gbmlfbV9zZXJpZXNfc2V0X2ZpcnN0X2dhdGUoY291bnRlciwgZ2F0ZV9zb3VyY2UpOworCQkJYnJlYWs7CisJCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCQlyZXR1cm4gbmlfNjYweF9zZXRfZmlyc3RfZ2F0ZShjb3VudGVyLCBnYXRlX3NvdXJjZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpZiAobmlfdGlvX3NlY29uZF9nYXRlX3JlZ2lzdGVyc19wcmVzZW50KGNvdW50ZXJfZGV2KSA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChDUl9DSEFOKGdhdGVfc291cmNlKSA9PSBOSV9HUENUX0RJU0FCTEVEX0dBVEVfU0VMRUNUKSB7CisJCQljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddICY9CisJCQkJfkdpX1NlY29uZF9HYXRlX01vZGVfQml0OworCQkJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwKKwkJCQljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddLAorCQkJCXNlY29uZF9nYXRlX3JlZyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoZ2F0ZV9zb3VyY2UgJiBDUl9JTlZFUlQpIHsKKwkJCWNvdW50ZXJfZGV2LT5yZWdzW3NlY29uZF9nYXRlX3JlZ10gfD0KKwkJCQlHaV9TZWNvbmRfR2F0ZV9Qb2xhcml0eV9CaXQ7CisJCX0gZWxzZSB7CisJCQljb3VudGVyX2Rldi0+cmVnc1tzZWNvbmRfZ2F0ZV9yZWddICY9CisJCQkJfkdpX1NlY29uZF9HYXRlX1BvbGFyaXR5X0JpdDsKKwkJfQorCQlzd2l0Y2ggKGNvdW50ZXJfZGV2LT52YXJpYW50KSB7CisJCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQkJcmV0dXJuIG5pX21fc2VyaWVzX3NldF9zZWNvbmRfZ2F0ZShjb3VudGVyLAorCQkJCWdhdGVfc291cmNlKTsKKwkJCWJyZWFrOworCQljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgorCQkJcmV0dXJuIG5pXzY2MHhfc2V0X3NlY29uZF9nYXRlKGNvdW50ZXIsIGdhdGVfc291cmNlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pX3Rpb19zZXRfb3RoZXJfc3JjKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCB1bnNpZ25lZCBpbmRleCwKKwl1bnNpZ25lZCBpbnQgc291cmNlKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKworCWlmIChjb3VudGVyX2Rldi0+dmFyaWFudCA9PSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXMpIHsKKwkJdW5zaWduZWQgaW50IGFiel9yZWcsIHNoaWZ0LCBtYXNrOworCisJCWFiel9yZWcgPSBOSVRJT19HaV9BQlpfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpOworCQlzd2l0Y2ggKGluZGV4KSB7CisJCWNhc2UgTklfR1BDVF9TT1VSQ0VfRU5DT0RFUl9BOgorCQkJc2hpZnQgPSAxMDsKKwkJCWJyZWFrOworCQljYXNlIE5JX0dQQ1RfU09VUkNFX0VOQ09ERVJfQjoKKwkJCXNoaWZ0ID0gNTsKKwkJCWJyZWFrOworCQljYXNlIE5JX0dQQ1RfU09VUkNFX0VOQ09ERVJfWjoKKwkJCXNoaWZ0ID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQltYXNrID0gMHgxZiA8PCBzaGlmdDsKKwkJaWYgKHNvdXJjZSA+IDB4MWYpIHsKKwkJCS8qIERpc2FibGUgZ2F0ZSAqLworCQkJc291cmNlID0gMHgxZjsKKwkJfQorCQljb3VudGVyX2Rldi0+cmVnc1thYnpfcmVnXSAmPSB+bWFzazsKKwkJY291bnRlcl9kZXYtPnJlZ3NbYWJ6X3JlZ10gfD0gKHNvdXJjZSA8PCBzaGlmdCkgJiBtYXNrOworCQl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLCBjb3VudGVyX2Rldi0+cmVnc1thYnpfcmVnXSwgYWJ6X3JlZyk7CisvLyAgICAgICAgICAgICAgcnRfcHJpbnRrKCIlcyAleCAlZCAlZFxuIiwgX19GVU5DVElPTl9fLCBjb3VudGVyX2Rldi0+cmVnc1thYnpfcmVnXSwgaW5kZXgsIHNvdXJjZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHVuc2lnbmVkIG5pXzY2MHhfZmlyc3RfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlKHVuc2lnbmVkCisJbmlfNjYweF9nYXRlX3NlbGVjdCkKK3sKKwl1bnNpZ25lZCBpOworCisJc3dpdGNoIChuaV82NjB4X2dhdGVfc2VsZWN0KSB7CisJY2FzZSBOSV82NjB4X1NvdXJjZV9QaW5faV9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfU09VUkNFX1BJTl9pX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JXzY2MHhfR2F0ZV9QaW5faV9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfR0FURV9QSU5faV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X05leHRfU1JDX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9ORVhUX1NPVVJDRV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X05leHRfT3V0X0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9ORVhUX09VVF9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X0xvZ2ljX0xvd19HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfTE9HSUNfTE9XX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmb3IgKGkgPSAwOyBpIDw9IG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbDsgKytpKSB7CisJCQlpZiAobmlfNjYweF9nYXRlX3NlbGVjdCA9PSBOSV82NjB4X1JUU0lfR2F0ZV9TZWxlY3QoaSkpIHsKKwkJCQlyZXR1cm4gTklfR1BDVF9SVFNJX0dBVEVfU0VMRUNUKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X3J0c2lfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDw9IG5pXzY2MHhfbWF4X2dhdGVfcGluOyArK2kpIHsKKwkJCWlmIChuaV82NjB4X2dhdGVfc2VsZWN0ID09CisJCQkJTklfNjYweF9HYXRlX1Bpbl9HYXRlX1NlbGVjdChpKSkgeworCQkJCXJldHVybiBOSV9HUENUX0dBVEVfUElOX0dBVEVfU0VMRUNUKGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpIDw9IG5pXzY2MHhfbWF4X2dhdGVfcGluKQorCQkJYnJlYWs7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgdW5zaWduZWQgbmlfbV9zZXJpZXNfZmlyc3RfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlKHVuc2lnbmVkCisJbmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QpCit7CisJdW5zaWduZWQgaTsKKworCXN3aXRjaCAobmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QpIHsKKwljYXNlIE5JX01fU2VyaWVzX1RpbWVzdGFtcF9NdXhfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX1RJTUVTVEFNUF9NVVhfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfQUlfU1RBUlQyX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9BSV9TVEFSVDJfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfUFhJX1N0YXJfVHJpZ2dlcl9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfUFhJX1NUQVJfVFJJR0dFUl9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV9NX1Nlcmllc19OZXh0X091dF9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfTkVYVF9PVVRfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfQUlfU1RBUlQxX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9BSV9TVEFSVDFfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfTV9TZXJpZXNfTmV4dF9TUkNfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX05FWFRfU09VUkNFX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX0FuYWxvZ19UcmlnZ2VyX091dF9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfQU5BTE9HX1RSSUdHRVJfT1VUX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JX01fU2VyaWVzX0xvZ2ljX0xvd19HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfTE9HSUNfTE9XX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmb3IgKGkgPSAwOyBpIDw9IG5pX21fc2VyaWVzX21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKG5pX21fc2VyaWVzX2dhdGVfc2VsZWN0ID09CisJCQkJTklfTV9TZXJpZXNfUlRTSV9HYXRlX1NlbGVjdChpKSkgeworCQkJCXJldHVybiBOSV9HUENUX1JUU0lfR0FURV9TRUxFQ1QoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfbV9zZXJpZXNfbWF4X3J0c2lfY2hhbm5lbCkKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDw9IG5pX21fc2VyaWVzX21heF9wZmlfY2hhbm5lbDsgKytpKSB7CisJCQlpZiAobmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QgPT0KKwkJCQlOSV9NX1Nlcmllc19QRklfR2F0ZV9TZWxlY3QoaSkpIHsKKwkJCQlyZXR1cm4gTklfR1BDVF9QRklfR0FURV9TRUxFQ1QoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfbV9zZXJpZXNfbWF4X3BmaV9jaGFubmVsKQorCQkJYnJlYWs7CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9OworCitzdGF0aWMgdW5zaWduZWQgbmlfNjYweF9zZWNvbmRfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlKHVuc2lnbmVkCisJbmlfNjYweF9nYXRlX3NlbGVjdCkKK3sKKwl1bnNpZ25lZCBpOworCisJc3dpdGNoIChuaV82NjB4X2dhdGVfc2VsZWN0KSB7CisJY2FzZSBOSV82NjB4X1NvdXJjZV9QaW5faV9TZWNvbmRfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX1NPVVJDRV9QSU5faV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X1VwX0Rvd25fUGluX2lfU2Vjb25kX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9VUF9ET1dOX1BJTl9pX0dBVEVfU0VMRUNUOworCQlicmVhazsKKwljYXNlIE5JXzY2MHhfTmV4dF9TUkNfU2Vjb25kX0dhdGVfU2VsZWN0OgorCQlyZXR1cm4gTklfR1BDVF9ORVhUX1NPVVJDRV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X05leHRfT3V0X1NlY29uZF9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfTkVYVF9PVVRfR0FURV9TRUxFQ1Q7CisJCWJyZWFrOworCWNhc2UgTklfNjYweF9TZWxlY3RlZF9HYXRlX1NlY29uZF9HYXRlX1NlbGVjdDoKKwkJcmV0dXJuIE5JX0dQQ1RfU0VMRUNURURfR0FURV9HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJY2FzZSBOSV82NjB4X0xvZ2ljX0xvd19TZWNvbmRfR2F0ZV9TZWxlY3Q6CisJCXJldHVybiBOSV9HUENUX0xPR0lDX0xPV19HQVRFX1NFTEVDVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWw7ICsraSkgeworCQkJaWYgKG5pXzY2MHhfZ2F0ZV9zZWxlY3QgPT0KKwkJCQlOSV82NjB4X1JUU0lfU2Vjb25kX0dhdGVfU2VsZWN0KGkpKSB7CisJCQkJcmV0dXJuIE5JX0dQQ1RfUlRTSV9HQVRFX1NFTEVDVChpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8PSBuaV82NjB4X21heF9ydHNpX2NoYW5uZWwpCisJCQlicmVhazsKKwkJZm9yIChpID0gMDsgaSA8PSBuaV82NjB4X21heF91cF9kb3duX3BpbjsgKytpKSB7CisJCQlpZiAobmlfNjYweF9nYXRlX3NlbGVjdCA9PQorCQkJCU5JXzY2MHhfVXBfRG93bl9QaW5fU2Vjb25kX0dhdGVfU2VsZWN0KGkpKSB7CisJCQkJcmV0dXJuIE5JX0dQQ1RfVVBfRE9XTl9QSU5fR0FURV9TRUxFQ1QoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gbmlfNjYweF9tYXhfdXBfZG93bl9waW4pCisJCQlicmVhazsKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBuaV9tX3Nlcmllc19zZWNvbmRfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlKHVuc2lnbmVkCisJbmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QpCit7CisJLypGSVhNRTogdGhlIHNlY29uZCBnYXRlIHNvdXJjZXMgZm9yIHRoZSBtIHNlcmllcyBhcmUgdW5kb2N1bWVudGVkLCBzbyB3ZSBqdXN0IHJldHVybgorCSAqIHRoZSByYXcgYml0cyBmb3Igbm93LiAqLworCXN3aXRjaCAobmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3QpIHsKKwlkZWZhdWx0OgorCQlyZXR1cm4gbmlfbV9zZXJpZXNfZ2F0ZV9zZWxlY3Q7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK307CisKK3N0YXRpYyBpbnQgbmlfdGlvX2dldF9nYXRlX3NyYyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgdW5zaWduZWQgZ2F0ZV9pbmRleCwKKwl1bnNpZ25lZCBpbnQgKiBnYXRlX3NvdXJjZSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJY29uc3QgdW5zaWduZWQgbW9kZV9iaXRzID0gbmlfdGlvX2dldF9zb2Z0X2NvcHkoY291bnRlciwKKwkJTklUSU9fR2lfTW9kZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCWNvbnN0IHVuc2lnbmVkIHNlY29uZF9nYXRlX3JlZyA9CisJCU5JVElPX0dpX1NlY29uZF9HYXRlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKKwl1bnNpZ25lZCBnYXRlX3NlbGVjdF9iaXRzOworCisJc3dpdGNoIChnYXRlX2luZGV4KSB7CisJY2FzZSAwOgorCQlpZiAoKG1vZGVfYml0cyAmIEdpX0dhdGluZ19Nb2RlX01hc2spID09CisJCQlHaV9HYXRpbmdfRGlzYWJsZWRfQml0cykgeworCQkJKmdhdGVfc291cmNlID0gTklfR1BDVF9ESVNBQkxFRF9HQVRFX1NFTEVDVDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJZ2F0ZV9zZWxlY3RfYml0cyA9CisJCQkJKG5pX3Rpb19nZXRfc29mdF9jb3B5KGNvdW50ZXIsCisJCQkJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+CisJCQkJCQljb3VudGVyX2luZGV4KSkgJgorCQkJCUdpX0dhdGVfU2VsZWN0X01hc2spID4+IEdpX0dhdGVfU2VsZWN0X1NoaWZ0OworCQl9CisJCXN3aXRjaCAoY291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCQkJKmdhdGVfc291cmNlID0KKwkJCQluaV9tX3Nlcmllc19maXJzdF9nYXRlX3RvX2dlbmVyaWNfZ2F0ZV9zb3VyY2UKKwkJCQkoZ2F0ZV9zZWxlY3RfYml0cyk7CisJCQlicmVhazsKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJCSpnYXRlX3NvdXJjZSA9CisJCQkJbmlfNjYweF9maXJzdF9nYXRlX3RvX2dlbmVyaWNfZ2F0ZV9zb3VyY2UKKwkJCQkoZ2F0ZV9zZWxlY3RfYml0cyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG1vZGVfYml0cyAmIEdpX0dhdGVfUG9sYXJpdHlfQml0KSB7CisJCQkqZ2F0ZV9zb3VyY2UgfD0gQ1JfSU5WRVJUOworCQl9CisJCWlmICgobW9kZV9iaXRzICYgR2lfR2F0aW5nX01vZGVfTWFzaykgIT0gR2lfTGV2ZWxfR2F0aW5nX0JpdHMpIHsKKwkJCSpnYXRlX3NvdXJjZSB8PSBDUl9FREdFOworCQl9CisJCWJyZWFrOworCWNhc2UgMToKKwkJaWYgKChtb2RlX2JpdHMgJiBHaV9HYXRpbmdfTW9kZV9NYXNrKSA9PSBHaV9HYXRpbmdfRGlzYWJsZWRfQml0cworCQkJfHwgKGNvdW50ZXJfZGV2LT4KKwkJCQlyZWdzW3NlY29uZF9nYXRlX3JlZ10gJiBHaV9TZWNvbmRfR2F0ZV9Nb2RlX0JpdCkKKwkJCT09IDApIHsKKwkJCSpnYXRlX3NvdXJjZSA9IE5JX0dQQ1RfRElTQUJMRURfR0FURV9TRUxFQ1Q7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWdhdGVfc2VsZWN0X2JpdHMgPQorCQkJCShjb3VudGVyX2Rldi0+CisJCQkJcmVnc1tzZWNvbmRfZ2F0ZV9yZWddICYKKwkJCQlHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfTWFzaykgPj4KKwkJCQlHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfU2hpZnQ7CisJCX0KKwkJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgeworCQljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJCQkqZ2F0ZV9zb3VyY2UgPQorCQkJCW5pX21fc2VyaWVzX3NlY29uZF9nYXRlX3RvX2dlbmVyaWNfZ2F0ZV9zb3VyY2UKKwkJCQkoZ2F0ZV9zZWxlY3RfYml0cyk7CisJCQlicmVhazsKKwkJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJCSpnYXRlX3NvdXJjZSA9CisJCQkJbmlfNjYweF9zZWNvbmRfZ2F0ZV90b19nZW5lcmljX2dhdGVfc291cmNlCisJCQkJKGdhdGVfc2VsZWN0X2JpdHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb3VudGVyX2Rldi0+CisJCQlyZWdzW3NlY29uZF9nYXRlX3JlZ10gJiBHaV9TZWNvbmRfR2F0ZV9Qb2xhcml0eV9CaXQpIHsKKwkJCSpnYXRlX3NvdXJjZSB8PSBDUl9JTlZFUlQ7CisJCX0KKwkJLyogc2Vjb25kIGdhdGUgY2FuJ3QgaGF2ZSBlZGdlL2xldmVsIG1vZGUgc2V0IGluZGVwZW5kZW50bHkgKi8KKwkJaWYgKChtb2RlX2JpdHMgJiBHaV9HYXRpbmdfTW9kZV9NYXNrKSAhPSBHaV9MZXZlbF9HYXRpbmdfQml0cykgeworCQkJKmdhdGVfc291cmNlIHw9IENSX0VER0U7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG5pX3Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfU0VUX0NPVU5URVJfTU9ERToKKwkJcmV0dXJuIG5pX3Rpb19zZXRfY291bnRlcl9tb2RlKGNvdW50ZXIsIGRhdGFbMV0pOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0FSTToKKwkJcmV0dXJuIG5pX3Rpb19hcm0oY291bnRlciwgMSwgZGF0YVsxXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElTQVJNOgorCQluaV90aW9fYXJtKGNvdW50ZXIsIDAsIDApOworCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfQ09VTlRFUl9TVEFUVVM6CisJCWRhdGFbMV0gPSBuaV90aW9fY291bnRlcl9zdGF0dXMoY291bnRlcik7CisJCWRhdGFbMl0gPSBjb3VudGVyX3N0YXR1c19tYXNrOworCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19TRVRfQ0xPQ0tfU1JDOgorCQlyZXR1cm4gbmlfdGlvX3NldF9jbG9ja19zcmMoY291bnRlciwgZGF0YVsxXSwgZGF0YVsyXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfR0VUX0NMT0NLX1NSQzoKKwkJbmlfdGlvX2dldF9jbG9ja19zcmMoY291bnRlciwgJmRhdGFbMV0sICZkYXRhWzJdKTsKKwkJcmV0dXJuIDA7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfU0VUX0dBVEVfU1JDOgorCQlyZXR1cm4gbmlfdGlvX3NldF9nYXRlX3NyYyhjb3VudGVyLCBkYXRhWzFdLCBkYXRhWzJdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19HRVRfR0FURV9TUkM6CisJCXJldHVybiBuaV90aW9fZ2V0X2dhdGVfc3JjKGNvdW50ZXIsIGRhdGFbMV0sICZkYXRhWzJdKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19TRVRfT1RIRVJfU1JDOgorCQlyZXR1cm4gbmlfdGlvX3NldF9vdGhlcl9zcmMoY291bnRlciwgZGF0YVsxXSwgZGF0YVsyXSk7CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfUkVTRVQ6CisJCW5pX3Rpb19yZXNldF9jb3VudF9hbmRfZGlzYXJtKGNvdW50ZXIpOworCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgbmlfdGlvX3JpbnNuKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwljb25zdCB1bnNpZ25lZCBjaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgZmlyc3RfcmVhZDsKKwl1bnNpZ25lZCBzZWNvbmRfcmVhZDsKKwl1bnNpZ25lZCBjb3JyZWN0X3JlYWQ7CisKKwlpZiAoaW5zbi0+biA8IDEpCisJCXJldHVybiAwOworCXN3aXRjaCAoY2hhbm5lbCkgeworCWNhc2UgMDoKKwkJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCQlOSVRJT19HaV9Db21tYW5kX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJCUdpX1NhdmVfVHJhY2VfQml0LCAwKTsKKwkJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCQlOSVRJT19HaV9Db21tYW5kX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJCUdpX1NhdmVfVHJhY2VfQml0LCBHaV9TYXZlX1RyYWNlX0JpdCk7CisJCS8qIFRoZSBjb3VudCBkb2Vzbid0IGdldCBsYXRjaGVkIHVudGlsIHRoZSBuZXh0IGNsb2NrIGVkZ2UsIHNvIGl0IGlzIHBvc3NpYmxlIHRoZSBjb3VudAorCQkgICBtYXkgY2hhbmdlIChvbmNlKSB3aGlsZSB3ZSBhcmUgcmVhZGluZy4gIFNpbmNlIHRoZSByZWFkIG9mIHRoZSBTV19TYXZlX1JlZyBpc24ndAorCQkgICBhdG9taWMgKGFwcGFyZW50bHkgZXZlbiB3aGVuIGl0J3MgYSAzMiBiaXQgcmVnaXN0ZXIgYWNjb3JkaW5nIHRvIDY2MHggZG9jcyksCisJCSAgIHdlIG5lZWQgdG8gcmVhZCB0d2ljZSBhbmQgbWFrZSBzdXJlIHRoZSByZWFkaW5nIGhhc24ndCBjaGFuZ2VkLiAgSWYgaXQgaGFzLAorCQkgICBhIHRoaXJkIHJlYWQgd2lsbCBiZSBjb3JyZWN0IHNpbmNlIHRoZSBjb3VudCB2YWx1ZSB3aWxsIGRlZmluaXRlbHkgaGF2ZSBsYXRjaGVkIGJ5IHRoZW4uICovCisJCWZpcnN0X3JlYWQgPQorCQkJcmVhZF9yZWdpc3Rlcihjb3VudGVyLAorCQkJTklUSU9fR2lfU1dfU2F2ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCQlzZWNvbmRfcmVhZCA9CisJCQlyZWFkX3JlZ2lzdGVyKGNvdW50ZXIsCisJCQlOSVRJT19HaV9TV19TYXZlX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJCWlmIChmaXJzdF9yZWFkICE9IHNlY29uZF9yZWFkKQorCQkJY29ycmVjdF9yZWFkID0KKwkJCQlyZWFkX3JlZ2lzdGVyKGNvdW50ZXIsCisJCQkJTklUSU9fR2lfU1dfU2F2ZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCQllbHNlCisJCQljb3JyZWN0X3JlYWQgPSBmaXJzdF9yZWFkOworCQlkYXRhWzBdID0gY29ycmVjdF9yZWFkOworCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkYXRhWzBdID0KKwkJCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX0xvYWRBX1JlZyhjb3VudGVyLT4KKwkJCQljb3VudGVyX2luZGV4KV07CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGF0YVswXSA9CisJCQljb3VudGVyX2Rldi0+cmVnc1tOSVRJT19HaV9Mb2FkQl9SZWcoY291bnRlci0+CisJCQkJY291bnRlcl9pbmRleCldOworCQlicmVhazsKKwl9OworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbmlfdGlvX25leHRfbG9hZF9yZWdpc3RlcihzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlcikKK3sKKwljb25zdCB1bnNpZ25lZCBiaXRzID0gcmVhZF9yZWdpc3Rlcihjb3VudGVyLAorCQlOSVRJT19HeHhfU3RhdHVzX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisKKwlpZiAoYml0cyAmIEdpX05leHRfTG9hZF9Tb3VyY2VfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKSB7CisJCXJldHVybiBOSVRJT19HaV9Mb2FkQl9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIE5JVElPX0dpX0xvYWRBX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KTsKKwl9Cit9CisKK2ludCBuaV90aW9fd2luc24oc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCWNvbnN0IHVuc2lnbmVkIGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBsb2FkX3JlZzsKKworCWlmIChpbnNuLT5uIDwgMSkKKwkJcmV0dXJuIDA7CisJc3dpdGNoIChjaGFubmVsKSB7CisJY2FzZSAwOgorCQkvKiBVbnNhZmUgaWYgY291bnRlciBpcyBhcm1lZC4gIFNob3VsZCBwcm9iYWJseSBjaGVjayBzdGF0dXMgYW5kIHJldHVybiAtRUJVU1kgaWYgYXJtZWQuICovCisJCS8qIERvbid0IGRpc3R1cmIgbG9hZCBzb3VyY2Ugc2VsZWN0LCBqdXN0IHVzZSB3aGljaGV2ZXIgbG9hZCByZWdpc3RlciBpcyBhbHJlYWR5IHNlbGVjdGVkLiAqLworCQlsb2FkX3JlZyA9IG5pX3Rpb19uZXh0X2xvYWRfcmVnaXN0ZXIoY291bnRlcik7CisJCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGRhdGFbMF0sIGxvYWRfcmVnKTsKKwkJbmlfdGlvX3NldF9iaXRzX3RyYW5zaWVudChjb3VudGVyLAorCQkJTklUSU9fR2lfQ29tbWFuZF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksIDAsIDAsCisJCQlHaV9Mb2FkX0JpdCk7CisJCS8qIHJlc3RvcmUgc3RhdGUgb2YgbG9hZCByZWcgdG8gd2hhdGV2ZXIgdGhlIHVzZXIgc2V0IGxhc3Qgc2V0IGl0IHRvICovCisJCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGNvdW50ZXJfZGV2LT5yZWdzW2xvYWRfcmVnXSwgbG9hZF9yZWcpOworCQlicmVhazsKKwljYXNlIDE6CisJCWNvdW50ZXJfZGV2LT5yZWdzW05JVElPX0dpX0xvYWRBX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KV0gPQorCQkJZGF0YVswXTsKKwkJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwgZGF0YVswXSwKKwkJCU5JVElPX0dpX0xvYWRBX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY291bnRlcl9kZXYtPnJlZ3NbTklUSU9fR2lfTG9hZEJfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpXSA9CisJCQlkYXRhWzBdOworCQl3cml0ZV9yZWdpc3Rlcihjb3VudGVyLCBkYXRhWzBdLAorCQkJTklUSU9fR2lfTG9hZEJfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX3JpbnNuKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb193aW5zbik7CitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9faW5zbl9jb25maWcpOworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2luaXRfY291bnRlcik7CitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9fYXJtKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19zZXRfZ2F0ZV9zcmMpOworRVhQT1JUX1NZTUJPTF9HUEwobmlfZ3BjdF9kZXZpY2VfY29uc3RydWN0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX2dwY3RfZGV2aWNlX2Rlc3Ryb3kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpby5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MjlkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvLmgKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgICAgZHJpdmVycy9uaV90aW8uaAorICAgIEhlYWRlciBmaWxlIGZvciBOSSBnZW5lcmFsIHB1cnBvc2UgY291bnRlciBzdXBwb3J0IGNvZGUgKG5pX3Rpby5jKQorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpZm5kZWYgX0NPTUVESV9OSV9USU9fSAorI2RlZmluZSBfQ09NRURJX05JX1RJT19ICisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworLy8gZm9yd2FyZCBkZWNsYXJhdGlvbnMKK3N0cnVjdCBtaXRlX3N0cnVjdDsKK3N0cnVjdCBuaV9ncGN0X2RldmljZTsKKworZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHsKKwlOSVRJT19HMF9BdXRvaW5jcmVtZW50X1JlZywKKwlOSVRJT19HMV9BdXRvaW5jcmVtZW50X1JlZywKKwlOSVRJT19HMl9BdXRvaW5jcmVtZW50X1JlZywKKwlOSVRJT19HM19BdXRvaW5jcmVtZW50X1JlZywKKwlOSVRJT19HMF9Db21tYW5kX1JlZywKKwlOSVRJT19HMV9Db21tYW5kX1JlZywKKwlOSVRJT19HMl9Db21tYW5kX1JlZywKKwlOSVRJT19HM19Db21tYW5kX1JlZywKKwlOSVRJT19HMF9IV19TYXZlX1JlZywKKwlOSVRJT19HMV9IV19TYXZlX1JlZywKKwlOSVRJT19HMl9IV19TYXZlX1JlZywKKwlOSVRJT19HM19IV19TYXZlX1JlZywKKwlOSVRJT19HMF9TV19TYXZlX1JlZywKKwlOSVRJT19HMV9TV19TYXZlX1JlZywKKwlOSVRJT19HMl9TV19TYXZlX1JlZywKKwlOSVRJT19HM19TV19TYXZlX1JlZywKKwlOSVRJT19HMF9Nb2RlX1JlZywKKwlOSVRJT19HMV9Nb2RlX1JlZywKKwlOSVRJT19HMl9Nb2RlX1JlZywKKwlOSVRJT19HM19Nb2RlX1JlZywKKwlOSVRJT19HMF9Mb2FkQV9SZWcsCisJTklUSU9fRzFfTG9hZEFfUmVnLAorCU5JVElPX0cyX0xvYWRBX1JlZywKKwlOSVRJT19HM19Mb2FkQV9SZWcsCisJTklUSU9fRzBfTG9hZEJfUmVnLAorCU5JVElPX0cxX0xvYWRCX1JlZywKKwlOSVRJT19HMl9Mb2FkQl9SZWcsCisJTklUSU9fRzNfTG9hZEJfUmVnLAorCU5JVElPX0cwX0lucHV0X1NlbGVjdF9SZWcsCisJTklUSU9fRzFfSW5wdXRfU2VsZWN0X1JlZywKKwlOSVRJT19HMl9JbnB1dF9TZWxlY3RfUmVnLAorCU5JVElPX0czX0lucHV0X1NlbGVjdF9SZWcsCisJTklUSU9fRzBfQ291bnRpbmdfTW9kZV9SZWcsCisJTklUSU9fRzFfQ291bnRpbmdfTW9kZV9SZWcsCisJTklUSU9fRzJfQ291bnRpbmdfTW9kZV9SZWcsCisJTklUSU9fRzNfQ291bnRpbmdfTW9kZV9SZWcsCisJTklUSU9fRzBfU2Vjb25kX0dhdGVfUmVnLAorCU5JVElPX0cxX1NlY29uZF9HYXRlX1JlZywKKwlOSVRJT19HMl9TZWNvbmRfR2F0ZV9SZWcsCisJTklUSU9fRzNfU2Vjb25kX0dhdGVfUmVnLAorCU5JVElPX0cwMV9TdGF0dXNfUmVnLAorCU5JVElPX0cyM19TdGF0dXNfUmVnLAorCU5JVElPX0cwMV9Kb2ludF9SZXNldF9SZWcsCisJTklUSU9fRzIzX0pvaW50X1Jlc2V0X1JlZywKKwlOSVRJT19HMDFfSm9pbnRfU3RhdHVzMV9SZWcsCisJTklUSU9fRzIzX0pvaW50X1N0YXR1czFfUmVnLAorCU5JVElPX0cwMV9Kb2ludF9TdGF0dXMyX1JlZywKKwlOSVRJT19HMjNfSm9pbnRfU3RhdHVzMl9SZWcsCisJTklUSU9fRzBfRE1BX0NvbmZpZ19SZWcsCisJTklUSU9fRzFfRE1BX0NvbmZpZ19SZWcsCisJTklUSU9fRzJfRE1BX0NvbmZpZ19SZWcsCisJTklUSU9fRzNfRE1BX0NvbmZpZ19SZWcsCisJTklUSU9fRzBfRE1BX1N0YXR1c19SZWcsCisJTklUSU9fRzFfRE1BX1N0YXR1c19SZWcsCisJTklUSU9fRzJfRE1BX1N0YXR1c19SZWcsCisJTklUSU9fRzNfRE1BX1N0YXR1c19SZWcsCisJTklUSU9fRzBfQUJaX1JlZywKKwlOSVRJT19HMV9BQlpfUmVnLAorCU5JVElPX0cwX0ludGVycnVwdF9BY2tub3dsZWRnZV9SZWcsCisJTklUSU9fRzFfSW50ZXJydXB0X0Fja25vd2xlZGdlX1JlZywKKwlOSVRJT19HMl9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnLAorCU5JVElPX0czX0ludGVycnVwdF9BY2tub3dsZWRnZV9SZWcsCisJTklUSU9fRzBfU3RhdHVzX1JlZywKKwlOSVRJT19HMV9TdGF0dXNfUmVnLAorCU5JVElPX0cyX1N0YXR1c19SZWcsCisJTklUSU9fRzNfU3RhdHVzX1JlZywKKwlOSVRJT19HMF9JbnRlcnJ1cHRfRW5hYmxlX1JlZywKKwlOSVRJT19HMV9JbnRlcnJ1cHRfRW5hYmxlX1JlZywKKwlOSVRJT19HMl9JbnRlcnJ1cHRfRW5hYmxlX1JlZywKKwlOSVRJT19HM19JbnRlcnJ1cHRfRW5hYmxlX1JlZywKKwlOSVRJT19OdW1fUmVnaXN0ZXJzLAorfTsKKworZW51bSBuaV9ncGN0X3ZhcmlhbnQgeworCW5pX2dwY3RfdmFyaWFudF9lX3NlcmllcywKKwluaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXMsCisJbmlfZ3BjdF92YXJpYW50XzY2MHgKK307CisKK3N0cnVjdCBuaV9ncGN0IHsKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2OworCXVuc2lnbmVkIGNvdW50ZXJfaW5kZXg7CisJdW5zaWduZWQgY2hpcF9pbmRleDsKKwl1aW50NjRfdCBjbG9ja19wZXJpb2RfcHM7CS8qIGNsb2NrIHBlcmlvZCBpbiBwaWNvc2Vjb25kcyAqLworCXN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbjsKKwlzcGlubG9ja190IGxvY2s7Cit9OworCitzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgeworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXY7CisJdm9pZCAoKndyaXRlX3JlZ2lzdGVyKSAoc3RydWN0IG5pX2dwY3QgKiBjb3VudGVyLCB1bnNpZ25lZCBiaXRzLAorCQllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKTsKKwl1bnNpZ25lZCAoKnJlYWRfcmVnaXN0ZXIpIChzdHJ1Y3QgbmlfZ3BjdCAqIGNvdW50ZXIsCisJCWVudW0gbmlfZ3BjdF9yZWdpc3RlciByZWcpOworCWVudW0gbmlfZ3BjdF92YXJpYW50IHZhcmlhbnQ7CisJc3RydWN0IG5pX2dwY3QgKmNvdW50ZXJzOworCXVuc2lnbmVkIG51bV9jb3VudGVyczsKKwl1bnNpZ25lZCByZWdzW05JVElPX051bV9SZWdpc3RlcnNdOworCXNwaW5sb2NrX3QgcmVnc19sb2NrOworfTsKKworZXh0ZXJuIHN0cnVjdCBuaV9ncGN0X2RldmljZSAqbmlfZ3BjdF9kZXZpY2VfY29uc3RydWN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXZvaWQgKCp3cml0ZV9yZWdpc3RlcikgKHN0cnVjdCBuaV9ncGN0ICogY291bnRlciwgdW5zaWduZWQgYml0cywKKwkJZW51bSBuaV9ncGN0X3JlZ2lzdGVyIHJlZyksCisJdW5zaWduZWQgKCpyZWFkX3JlZ2lzdGVyKSAoc3RydWN0IG5pX2dwY3QgKiBjb3VudGVyLAorCQllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKSwgZW51bSBuaV9ncGN0X3ZhcmlhbnQgdmFyaWFudCwKKwl1bnNpZ25lZCBudW1fY291bnRlcnMpOworZXh0ZXJuIHZvaWQgbmlfZ3BjdF9kZXZpY2VfZGVzdHJveShzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2KTsKK2V4dGVybiB2b2lkIG5pX3Rpb19pbml0X2NvdW50ZXIoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpOworZXh0ZXJuIGludCBuaV90aW9fcmluc24oc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitleHRlcm4gaW50IG5pX3Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK2V4dGVybiBpbnQgbmlfdGlvX3dpbnNuKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworZXh0ZXJuIGludCBuaV90aW9fY21kKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYyk7CitleHRlcm4gaW50IG5pX3Rpb19jbWR0ZXN0KHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitleHRlcm4gaW50IG5pX3Rpb19jYW5jZWwoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpOworZXh0ZXJuIHZvaWQgbmlfdGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK2V4dGVybiB2b2lkIG5pX3Rpb19zZXRfbWl0ZV9jaGFubmVsKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbik7CitleHRlcm4gdm9pZCBuaV90aW9fYWNrbm93bGVkZ2VfYW5kX2NvbmZpcm0oc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsCisJaW50ICpnYXRlX2Vycm9yLCBpbnQgKnRjX2Vycm9yLCBpbnQgKnBlcm1fc3RhbGVfZGF0YSwgaW50ICpzdGFsZV9kYXRhKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmlfZ3BjdCAqc3ViZGV2X3RvX2NvdW50ZXIoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXJldHVybiBzLT5wcml2YXRlOworfQorCisjZW5kaWYgLyogX0NPTUVESV9OSV9USU9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpb19pbnRlcm5hbC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3Rpb19pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNWIxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvX2ludGVybmFsLmgKQEAgLTAsMCArMSw3NzQgQEAKKy8qCisgICAgZHJpdmVycy9uaV90aW9faW50ZXJuYWwuaAorICAgIEhlYWRlciBmaWxlIGZvciBOSSBnZW5lcmFsIHB1cnBvc2UgY291bnRlciBzdXBwb3J0IGNvZGUgKG5pX3Rpby5jIGFuZAorICAgIG5pX3Rpb2NtZC5jKQorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisKKyNpZm5kZWYgX0NPTUVESV9OSV9USU9fSU5URVJOQUxfSAorI2RlZmluZSBfQ09NRURJX05JX1RJT19JTlRFUk5BTF9ICisKKyNpbmNsdWRlICJuaV90aW8uaCIKKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfQXV0b2luY3JlbWVudF9SZWcodW5zaWduZWQKKwljb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0F1dG9pbmNyZW1lbnRfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9BdXRvaW5jcmVtZW50X1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfQXV0b2luY3JlbWVudF9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0F1dG9pbmNyZW1lbnRfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9Db21tYW5kX1JlZyh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0NvbW1hbmRfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9Db21tYW5kX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfQ29tbWFuZF9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0NvbW1hbmRfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9Db3VudGluZ19Nb2RlX1JlZyh1bnNpZ25lZAorCWNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCQlyZXR1cm4gTklUSU9fRzBfQ291bnRpbmdfTW9kZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX0NvdW50aW5nX01vZGVfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9Db3VudGluZ19Nb2RlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzNfQ291bnRpbmdfTW9kZV9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcodW5zaWduZWQKKwljb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0lucHV0X1NlbGVjdF9SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX0lucHV0X1NlbGVjdF9SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JVElPX0cyX0lucHV0X1NlbGVjdF9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0lucHV0X1NlbGVjdF9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0d4eF9Kb2ludF9SZXNldF9SZWcodW5zaWduZWQKKwljb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMDFfSm9pbnRfUmVzZXRfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzIzX0pvaW50X1Jlc2V0X1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR3h4X0pvaW50X1N0YXR1czFfUmVnKHVuc2lnbmVkCisJY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzAxX0pvaW50X1N0YXR1czFfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzIzX0pvaW50X1N0YXR1czFfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HeHhfSm9pbnRfU3RhdHVzMl9SZWcodW5zaWduZWQKKwljb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMDFfSm9pbnRfU3RhdHVzMl9SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HMjNfSm9pbnRfU3RhdHVzMl9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0d4eF9TdGF0dXNfUmVnKHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cwMV9TdGF0dXNfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzIzX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0xvYWRBX1JlZyh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0xvYWRBX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzFfTG9hZEFfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9Mb2FkQV9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0xvYWRBX1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfTG9hZEJfUmVnKHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCQlyZXR1cm4gTklUSU9fRzBfTG9hZEJfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9Mb2FkQl9SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JVElPX0cyX0xvYWRCX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzNfTG9hZEJfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9Nb2RlX1JlZyh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX01vZGVfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9Nb2RlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfTW9kZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX01vZGVfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9TV19TYXZlX1JlZyhpbnQgY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9TV19TYXZlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzFfU1dfU2F2ZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JVElPX0cyX1NXX1NhdmVfUmVnOworCQlicmVhazsKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HM19TV19TYXZlX1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfU2Vjb25kX0dhdGVfUmVnKGludCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX1NlY29uZF9HYXRlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXR1cm4gTklUSU9fRzFfU2Vjb25kX0dhdGVfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9TZWNvbmRfR2F0ZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX1NlY29uZF9HYXRlX1JlZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIG5pX2dwY3RfcmVnaXN0ZXIgTklUSU9fR2lfRE1BX0NvbmZpZ19SZWcoaW50IGNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCQlyZXR1cm4gTklUSU9fRzBfRE1BX0NvbmZpZ19SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX0RNQV9Db25maWdfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9ETUFfQ29uZmlnX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzNfRE1BX0NvbmZpZ19SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0RNQV9TdGF0dXNfUmVnKGludCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0RNQV9TdGF0dXNfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9ETUFfU3RhdHVzX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXR1cm4gTklUSU9fRzJfRE1BX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX0RNQV9TdGF0dXNfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9BQlpfUmVnKGludCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX0FCWl9SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX0FCWl9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0ludGVycnVwdF9BY2tub3dsZWRnZV9SZWcoaW50CisJY291bnRlcl9pbmRleCkKK3sKKwlzd2l0Y2ggKGNvdW50ZXJfaW5kZXgpIHsKKwljYXNlIDA6CisJCXJldHVybiBOSVRJT19HMF9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldHVybiBOSVRJT19HMV9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOworCQlicmVhazsKKwljYXNlIDM6CisJCXJldHVybiBOSVRJT19HM19JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfUmVnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gbmlfZ3BjdF9yZWdpc3RlciBOSVRJT19HaV9TdGF0dXNfUmVnKGludCBjb3VudGVyX2luZGV4KQoreworCXN3aXRjaCAoY291bnRlcl9pbmRleCkgeworCWNhc2UgMDoKKwkJcmV0dXJuIE5JVElPX0cwX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmV0dXJuIE5JVElPX0cyX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJcmV0dXJuIE5JVElPX0czX1N0YXR1c19SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgZW51bSBuaV9ncGN0X3JlZ2lzdGVyIE5JVElPX0dpX0ludGVycnVwdF9FbmFibGVfUmVnKGludAorCWNvdW50ZXJfaW5kZXgpCit7CisJc3dpdGNoIChjb3VudGVyX2luZGV4KSB7CisJY2FzZSAwOgorCQlyZXR1cm4gTklUSU9fRzBfSW50ZXJydXB0X0VuYWJsZV9SZWc7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcmV0dXJuIE5JVElPX0cxX0ludGVycnVwdF9FbmFibGVfUmVnOworCQlicmVhazsKKwljYXNlIDI6CisJCXJldHVybiBOSVRJT19HMl9JbnRlcnJ1cHRfRW5hYmxlX1JlZzsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlyZXR1cm4gTklUSU9fRzNfSW50ZXJydXB0X0VuYWJsZV9SZWc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2VudW0gR2lfQXV0b19JbmNyZW1lbnRfUmVnX0JpdHMgeworCUdpX0F1dG9fSW5jcmVtZW50X01hc2sgPSAweGZmCit9OworCisjZGVmaW5lIEdpX1VwX0Rvd25fU2hpZnQgNQorZW51bSBHaV9Db21tYW5kX1JlZ19CaXRzIHsKKwlHaV9Bcm1fQml0ID0gMHgxLAorCUdpX1NhdmVfVHJhY2VfQml0ID0gMHgyLAorCUdpX0xvYWRfQml0ID0gMHg0LAorCUdpX0Rpc2FybV9CaXQgPSAweDEwLAorCUdpX1VwX0Rvd25fTWFzayA9IDB4MyA8PCBHaV9VcF9Eb3duX1NoaWZ0LAorCUdpX0Fsd2F5c19Eb3duX0JpdHMgPSAweDAgPDwgR2lfVXBfRG93bl9TaGlmdCwKKwlHaV9BbHdheXNfVXBfQml0cyA9IDB4MSA8PCBHaV9VcF9Eb3duX1NoaWZ0LAorCUdpX1VwX0Rvd25fSGFyZHdhcmVfSU9fQml0cyA9IDB4MiA8PCBHaV9VcF9Eb3duX1NoaWZ0LAorCUdpX1VwX0Rvd25fSGFyZHdhcmVfR2F0ZV9CaXRzID0gMHgzIDw8IEdpX1VwX0Rvd25fU2hpZnQsCisJR2lfV3JpdGVfU3dpdGNoX0JpdCA9IDB4ODAsCisJR2lfU3luY2hyb25pemVfR2F0ZV9CaXQgPSAweDEwMCwKKwlHaV9MaXR0bGVfQmlnX0VuZGlhbl9CaXQgPSAweDIwMCwKKwlHaV9CYW5rX1N3aXRjaF9TdGFydF9CaXQgPSAweDQwMCwKKwlHaV9CYW5rX1N3aXRjaF9Nb2RlX0JpdCA9IDB4ODAwLAorCUdpX0JhbmtfU3dpdGNoX0VuYWJsZV9CaXQgPSAweDEwMDAsCisJR2lfQXJtX0NvcHlfQml0ID0gMHgyMDAwLAorCUdpX1NhdmVfVHJhY2VfQ29weV9CaXQgPSAweDQwMDAsCisJR2lfRGlzYXJtX0NvcHlfQml0ID0gMHg4MDAwCit9OworCisjZGVmaW5lIEdpX0luZGV4X1BoYXNlX0JpdHNoaWZ0IDUKKyNkZWZpbmUgR2lfSFdfQXJtX1NlbGVjdF9TaGlmdCA4CitlbnVtIEdpX0NvdW50aW5nX01vZGVfUmVnX0JpdHMgeworCUdpX0NvdW50aW5nX01vZGVfTWFzayA9IDB4NywKKwlHaV9Db3VudGluZ19Nb2RlX05vcm1hbF9CaXRzID0gMHgwLAorCUdpX0NvdW50aW5nX01vZGVfUXVhZHJhdHVyZVgxX0JpdHMgPSAweDEsCisJR2lfQ291bnRpbmdfTW9kZV9RdWFkcmF0dXJlWDJfQml0cyA9IDB4MiwKKwlHaV9Db3VudGluZ19Nb2RlX1F1YWRyYXR1cmVYNF9CaXRzID0gMHgzLAorCUdpX0NvdW50aW5nX01vZGVfVHdvX1B1bHNlX0JpdHMgPSAweDQsCisJR2lfQ291bnRpbmdfTW9kZV9TeW5jX1NvdXJjZV9CaXRzID0gMHg2LAorCUdpX0luZGV4X01vZGVfQml0ID0gMHgxMCwKKwlHaV9JbmRleF9QaGFzZV9NYXNrID0gMHgzIDw8IEdpX0luZGV4X1BoYXNlX0JpdHNoaWZ0LAorCUdpX0luZGV4X1BoYXNlX0xvd0FfTG93QiA9IDB4MCA8PCBHaV9JbmRleF9QaGFzZV9CaXRzaGlmdCwKKwlHaV9JbmRleF9QaGFzZV9Mb3dBX0hpZ2hCID0gMHgxIDw8IEdpX0luZGV4X1BoYXNlX0JpdHNoaWZ0LAorCUdpX0luZGV4X1BoYXNlX0hpZ2hBX0xvd0IgPSAweDIgPDwgR2lfSW5kZXhfUGhhc2VfQml0c2hpZnQsCisJR2lfSW5kZXhfUGhhc2VfSGlnaEFfSGlnaEIgPSAweDMgPDwgR2lfSW5kZXhfUGhhc2VfQml0c2hpZnQsCisJR2lfSFdfQXJtX0VuYWJsZV9CaXQgPSAweDgwLAkvKiBmcm9tIG0tc2VyaWVzIGV4YW1wbGUgY29kZSwgbm90IGRvY3VtZW50ZWQgaW4gNjYweCByZWdpc3RlciBsZXZlbCBtYW51YWwgKi8KKwlHaV82NjB4X0hXX0FybV9TZWxlY3RfTWFzayA9IDB4NyA8PCBHaV9IV19Bcm1fU2VsZWN0X1NoaWZ0LAkvKiBmcm9tIG0tc2VyaWVzIGV4YW1wbGUgY29kZSwgbm90IGRvY3VtZW50ZWQgaW4gNjYweCByZWdpc3RlciBsZXZlbCBtYW51YWwgKi8KKwlHaV82NjB4X1ByZXNjYWxlX1g4X0JpdCA9IDB4MTAwMCwKKwlHaV9NX1Nlcmllc19QcmVzY2FsZV9YOF9CaXQgPSAweDIwMDAsCisJR2lfTV9TZXJpZXNfSFdfQXJtX1NlbGVjdF9NYXNrID0gMHgxZiA8PCBHaV9IV19Bcm1fU2VsZWN0X1NoaWZ0LAorCS8qIG11c3QgYmUgc2V0IGZvciBjbG9ja3Mgb3ZlciA0ME1Ieiwgd2hpY2ggaW5jbHVkZXMgc3luY2hyb25vdXMgY291bnRpbmcgYW5kIHF1YWRyYXR1cmUgbW9kZXMgKi8KKwlHaV82NjB4X0FsdGVybmF0ZV9TeW5jX0JpdCA9IDB4MjAwMCwKKwlHaV9NX1Nlcmllc19BbHRlcm5hdGVfU3luY19CaXQgPSAweDQwMDAsCisJR2lfNjYweF9QcmVzY2FsZV9YMl9CaXQgPSAweDQwMDAsCS8qIGZyb20gbS1zZXJpZXMgZXhhbXBsZSBjb2RlLCBub3QgZG9jdW1lbnRlZCBpbiA2NjB4IHJlZ2lzdGVyIGxldmVsIG1hbnVhbCAqLworCUdpX01fU2VyaWVzX1ByZXNjYWxlX1gyX0JpdCA9IDB4ODAwMCwKK307CisKKyNkZWZpbmUgR2lfU291cmNlX1NlbGVjdF9TaGlmdCAyCisjZGVmaW5lIEdpX0dhdGVfU2VsZWN0X1NoaWZ0IDcKK2VudW0gR2lfSW5wdXRfU2VsZWN0X0JpdHMgeworCUdpX1JlYWRfQWNrbm93bGVkZ2VzX0lycSA9IDB4MSwJLy8gbm90IHByZXNlbnQgb24gNjYweAorCUdpX1dyaXRlX0Fja25vd2xlZGdlc19JcnEgPSAweDIsCS8vIG5vdCBwcmVzZW50IG9uIDY2MHgKKwlHaV9Tb3VyY2VfU2VsZWN0X01hc2sgPSAweDdjLAorCUdpX0dhdGVfU2VsZWN0X01hc2sgPSAweDFmIDw8IEdpX0dhdGVfU2VsZWN0X1NoaWZ0LAorCUdpX0dhdGVfU2VsZWN0X0xvYWRfU291cmNlX0JpdCA9IDB4MTAwMCwKKwlHaV9Pcl9HYXRlX0JpdCA9IDB4MjAwMCwKKwlHaV9PdXRwdXRfUG9sYXJpdHlfQml0ID0gMHg0MDAwLAkvKiBzZXQgdG8gaW52ZXJ0ICovCisJR2lfU291cmNlX1BvbGFyaXR5X0JpdCA9IDB4ODAwMAkvKiBzZXQgdG8gaW52ZXJ0ICovCit9OworCitlbnVtIEdpX01vZGVfQml0cyB7CisJR2lfR2F0aW5nX01vZGVfTWFzayA9IDB4MywKKwlHaV9HYXRpbmdfRGlzYWJsZWRfQml0cyA9IDB4MCwKKwlHaV9MZXZlbF9HYXRpbmdfQml0cyA9IDB4MSwKKwlHaV9SaXNpbmdfRWRnZV9HYXRpbmdfQml0cyA9IDB4MiwKKwlHaV9GYWxsaW5nX0VkZ2VfR2F0aW5nX0JpdHMgPSAweDMsCisJR2lfR2F0ZV9Pbl9Cb3RoX0VkZ2VzX0JpdCA9IDB4NCwJLyogdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHJpc2luZyBlZGdlIGdhdGluZyBtb2RlICovCisJR2lfVHJpZ2dlcl9Nb2RlX2Zvcl9FZGdlX0dhdGVfTWFzayA9IDB4MTgsCisJR2lfRWRnZV9HYXRlX1N0YXJ0c19TdG9wc19CaXRzID0gMHgwLAorCUdpX0VkZ2VfR2F0ZV9TdG9wc19TdGFydHNfQml0cyA9IDB4OCwKKwlHaV9FZGdlX0dhdGVfU3RhcnRzX0JpdHMgPSAweDEwLAorCUdpX0VkZ2VfR2F0ZV9Ob19TdGFydHNfb3JfU3RvcHNfQml0cyA9IDB4MTgsCisJR2lfU3RvcF9Nb2RlX01hc2sgPSAweDYwLAorCUdpX1N0b3Bfb25fR2F0ZV9CaXRzID0gMHgwMCwKKwlHaV9TdG9wX29uX0dhdGVfb3JfVENfQml0cyA9IDB4MjAsCisJR2lfU3RvcF9vbl9HYXRlX29yX1NlY29uZF9UQ19CaXRzID0gMHg0MCwKKwlHaV9Mb2FkX1NvdXJjZV9TZWxlY3RfQml0ID0gMHg4MCwKKwlHaV9PdXRwdXRfTW9kZV9NYXNrID0gMHgzMDAsCisJR2lfT3V0cHV0X1RDX1B1bHNlX0JpdHMgPSAweDEwMCwKKwlHaV9PdXRwdXRfVENfVG9nZ2xlX0JpdHMgPSAweDIwMCwKKwlHaV9PdXRwdXRfVENfb3JfR2F0ZV9Ub2dnbGVfQml0cyA9IDB4MzAwLAorCUdpX0NvdW50aW5nX09uY2VfTWFzayA9IDB4YzAwLAorCUdpX05vX0hhcmR3YXJlX0Rpc2FybV9CaXRzID0gMHgwMDAsCisJR2lfRGlzYXJtX2F0X1RDX0JpdHMgPSAweDQwMCwKKwlHaV9EaXNhcm1fYXRfR2F0ZV9CaXRzID0gMHg4MDAsCisJR2lfRGlzYXJtX2F0X1RDX29yX0dhdGVfQml0cyA9IDB4YzAwLAorCUdpX0xvYWRpbmdfT25fVENfQml0ID0gMHgxMDAwLAorCUdpX0dhdGVfUG9sYXJpdHlfQml0ID0gMHgyMDAwLAorCUdpX0xvYWRpbmdfT25fR2F0ZV9CaXQgPSAweDQwMDAsCisJR2lfUmVsb2FkX1NvdXJjZV9Td2l0Y2hpbmdfQml0ID0gMHg4MDAwCit9OworCisjZGVmaW5lIEdpX1NlY29uZF9HYXRlX1NlbGVjdF9TaGlmdCA3CisvKkZJWE1FOiBtLXNlcmllcyBoYXMgYSBzZWNvbmQgZ2F0ZSBzdWJzZWxlY3QgYml0ICovCisvKkZJWE1FOiBtLXNlcmllcyBzZWNvbmQgZ2F0ZSBzb3VyY2VzIGFyZSB1bmRvY3VtZW50ZWQgKGJ5IE5JKSovCitlbnVtIEdpX1NlY29uZF9HYXRlX0JpdHMgeworCUdpX1NlY29uZF9HYXRlX01vZGVfQml0ID0gMHgxLAorCUdpX1NlY29uZF9HYXRlX1NlbGVjdF9NYXNrID0gMHgxZiA8PCBHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfU2hpZnQsCisJR2lfU2Vjb25kX0dhdGVfUG9sYXJpdHlfQml0ID0gMHgyMDAwLAorCUdpX1NlY29uZF9HYXRlX1N1YnNlbGVjdF9CaXQgPSAweDQwMDAsCS8qIG0tc2VyaWVzIG9ubHkgKi8KKwlHaV9Tb3VyY2VfU3Vic2VsZWN0X0JpdCA9IDB4ODAwMAkvKiBtLXNlcmllcyBvbmx5ICovCit9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBHaV9TZWNvbmRfR2F0ZV9TZWxlY3RfQml0cyh1bnNpZ25lZCBzZWNvbmRfZ2F0ZV9zZWxlY3QpCit7CisJcmV0dXJuIChzZWNvbmRfZ2F0ZV9zZWxlY3QgPDwgR2lfU2Vjb25kX0dhdGVfU2VsZWN0X1NoaWZ0KSAmCisJCUdpX1NlY29uZF9HYXRlX1NlbGVjdF9NYXNrOworfQorCitlbnVtIEd4eF9TdGF0dXNfQml0cyB7CisJRzBfU2F2ZV9CaXQgPSAweDEsCisJRzFfU2F2ZV9CaXQgPSAweDIsCisJRzBfQ291bnRpbmdfQml0ID0gMHg0LAorCUcxX0NvdW50aW5nX0JpdCA9IDB4OCwKKwlHMF9OZXh0X0xvYWRfU291cmNlX0JpdCA9IDB4MTAsCisJRzFfTmV4dF9Mb2FkX1NvdXJjZV9CaXQgPSAweDIwLAorCUcwX1N0YWxlX0RhdGFfQml0ID0gMHg0MCwKKwlHMV9TdGFsZV9EYXRhX0JpdCA9IDB4ODAsCisJRzBfQXJtZWRfQml0ID0gMHgxMDAsCisJRzFfQXJtZWRfQml0ID0gMHgyMDAsCisJRzBfTm9fTG9hZF9CZXR3ZWVuX0dhdGVzX0JpdCA9IDB4NDAwLAorCUcxX05vX0xvYWRfQmV0d2Vlbl9HYXRlc19CaXQgPSAweDgwMCwKKwlHMF9UQ19FcnJvcl9CaXQgPSAweDEwMDAsCisJRzFfVENfRXJyb3JfQml0ID0gMHgyMDAwLAorCUcwX0dhdGVfRXJyb3JfQml0ID0gMHg0MDAwLAorCUcxX0dhdGVfRXJyb3JfQml0ID0gMHg4MDAwCit9Oworc3RhdGljIGlubGluZSBlbnVtIEd4eF9TdGF0dXNfQml0cyBHaV9Db3VudGluZ19CaXQodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9Db3VudGluZ19CaXQ7CisJcmV0dXJuIEcwX0NvdW50aW5nX0JpdDsKK30KK3N0YXRpYyBpbmxpbmUgZW51bSBHeHhfU3RhdHVzX0JpdHMgR2lfQXJtZWRfQml0KHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJaWYgKGNvdW50ZXJfaW5kZXggJSAyKQorCQlyZXR1cm4gRzFfQXJtZWRfQml0OworCXJldHVybiBHMF9Bcm1lZF9CaXQ7Cit9CitzdGF0aWMgaW5saW5lIGVudW0gR3h4X1N0YXR1c19CaXRzIEdpX05leHRfTG9hZF9Tb3VyY2VfQml0KHVuc2lnbmVkCisJY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9OZXh0X0xvYWRfU291cmNlX0JpdDsKKwlyZXR1cm4gRzBfTmV4dF9Mb2FkX1NvdXJjZV9CaXQ7Cit9CitzdGF0aWMgaW5saW5lIGVudW0gR3h4X1N0YXR1c19CaXRzIEdpX1N0YWxlX0RhdGFfQml0KHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJaWYgKGNvdW50ZXJfaW5kZXggJSAyKQorCQlyZXR1cm4gRzFfU3RhbGVfRGF0YV9CaXQ7CisJcmV0dXJuIEcwX1N0YWxlX0RhdGFfQml0OworfQorc3RhdGljIGlubGluZSBlbnVtIEd4eF9TdGF0dXNfQml0cyBHaV9UQ19FcnJvcl9CaXQodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9UQ19FcnJvcl9CaXQ7CisJcmV0dXJuIEcwX1RDX0Vycm9yX0JpdDsKK30KK3N0YXRpYyBpbmxpbmUgZW51bSBHeHhfU3RhdHVzX0JpdHMgR2lfR2F0ZV9FcnJvcl9CaXQodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9HYXRlX0Vycm9yX0JpdDsKKwlyZXR1cm4gRzBfR2F0ZV9FcnJvcl9CaXQ7Cit9CisKKy8qIGpvaW50IHJlc2V0IHJlZ2lzdGVyIGJpdHMgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgR2lfUmVzZXRfQml0KHVuc2lnbmVkIGNvdW50ZXJfaW5kZXgpCit7CisJcmV0dXJuIDB4MSA8PCAoMiArIChjb3VudGVyX2luZGV4ICUgMikpOworfQorCitlbnVtIEd4eF9Kb2ludF9TdGF0dXMyX0JpdHMgeworCUcwX091dHB1dF9CaXQgPSAweDEsCisJRzFfT3V0cHV0X0JpdCA9IDB4MiwKKwlHMF9IV19TYXZlX0JpdCA9IDB4MTAwMCwKKwlHMV9IV19TYXZlX0JpdCA9IDB4MjAwMCwKKwlHMF9QZXJtYW5lbnRfU3RhbGVfQml0ID0gMHg0MDAwLAorCUcxX1Blcm1hbmVudF9TdGFsZV9CaXQgPSAweDgwMDAKK307CitzdGF0aWMgaW5saW5lIGVudW0gR3h4X0pvaW50X1N0YXR1czJfQml0cyBHaV9QZXJtYW5lbnRfU3RhbGVfQml0KHVuc2lnbmVkCisJY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9QZXJtYW5lbnRfU3RhbGVfQml0OworCXJldHVybiBHMF9QZXJtYW5lbnRfU3RhbGVfQml0OworfQorCitlbnVtIEdpX0RNQV9Db25maWdfUmVnX0JpdHMgeworCUdpX0RNQV9FbmFibGVfQml0ID0gMHgxLAorCUdpX0RNQV9Xcml0ZV9CaXQgPSAweDIsCisJR2lfRE1BX0ludF9CaXQgPSAweDQKK307CisKK2VudW0gR2lfRE1BX1N0YXR1c19SZWdfQml0cyB7CisJR2lfRE1BX1JlYWRiYW5rX0JpdCA9IDB4MjAwMCwKKwlHaV9EUlFfRXJyb3JfQml0ID0gMHg0MDAwLAorCUdpX0RSUV9TdGF0dXNfQml0ID0gMHg4MDAwCit9OworCitlbnVtIEcwMl9JbnRlcnJ1cHRfQWNrbm93bGVkZ2VfQml0cyB7CisJRzBfR2F0ZV9FcnJvcl9Db25maXJtX0JpdCA9IDB4MjAsCisJRzBfVENfRXJyb3JfQ29uZmlybV9CaXQgPSAweDQwCit9OworZW51bSBHMTNfSW50ZXJydXB0X0Fja25vd2xlZGdlX0JpdHMgeworCUcxX0dhdGVfRXJyb3JfQ29uZmlybV9CaXQgPSAweDIsCisJRzFfVENfRXJyb3JfQ29uZmlybV9CaXQgPSAweDQKK307CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIEdpX0dhdGVfRXJyb3JfQ29uZmlybV9CaXQodW5zaWduZWQgY291bnRlcl9pbmRleCkKK3sKKwlpZiAoY291bnRlcl9pbmRleCAlIDIpCisJCXJldHVybiBHMV9HYXRlX0Vycm9yX0NvbmZpcm1fQml0OworCXJldHVybiBHMF9HYXRlX0Vycm9yX0NvbmZpcm1fQml0OworfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBHaV9UQ19FcnJvcl9Db25maXJtX0JpdCh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCWlmIChjb3VudGVyX2luZGV4ICUgMikKKwkJcmV0dXJuIEcxX1RDX0Vycm9yX0NvbmZpcm1fQml0OworCXJldHVybiBHMF9UQ19FcnJvcl9Db25maXJtX0JpdDsKK30KKworLy8gYml0cyB0aGF0IGFyZSB0aGUgc2FtZSBpbiBHMC9HMiBhbmQgRzEvRzMgaW50ZXJydXB0IGFja25vd2xlZGdlIHJlZ2lzdGVycworZW51bSBHeHhfSW50ZXJydXB0X0Fja25vd2xlZGdlX0JpdHMgeworCUdpX1RDX0ludGVycnVwdF9BY2tfQml0ID0gMHg0MDAwLAorCUdpX0dhdGVfSW50ZXJydXB0X0Fja19CaXQgPSAweDgwMDAKK307CisKK2VudW0gR2lfU3RhdHVzX0JpdHMgeworCUdpX0dhdGVfSW50ZXJydXB0X0JpdCA9IDB4NCwKKwlHaV9UQ19CaXQgPSAweDgsCisJR2lfSW50ZXJydXB0X0JpdCA9IDB4ODAwMAorfTsKKworZW51bSBHMDJfSW50ZXJydXB0X0VuYWJsZV9CaXRzIHsKKwlHMF9UQ19JbnRlcnJ1cHRfRW5hYmxlX0JpdCA9IDB4NDAsCisJRzBfR2F0ZV9JbnRlcnJ1cHRfRW5hYmxlX0JpdCA9IDB4MTAwCit9OworZW51bSBHMTNfSW50ZXJydXB0X0VuYWJsZV9CaXRzIHsKKwlHMV9UQ19JbnRlcnJ1cHRfRW5hYmxlX0JpdCA9IDB4MjAwLAorCUcxX0dhdGVfSW50ZXJydXB0X0VuYWJsZV9CaXQgPSAweDQwMAorfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgR2lfR2F0ZV9JbnRlcnJ1cHRfRW5hYmxlX0JpdCh1bnNpZ25lZCBjb3VudGVyX2luZGV4KQoreworCXVuc2lnbmVkIGJpdDsKKworCWlmIChjb3VudGVyX2luZGV4ICUgMikgeworCQliaXQgPSBHMV9HYXRlX0ludGVycnVwdF9FbmFibGVfQml0OworCX0gZWxzZSB7CisJCWJpdCA9IEcwX0dhdGVfSW50ZXJydXB0X0VuYWJsZV9CaXQ7CisJfQorCXJldHVybiBiaXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9yZWdpc3RlcihzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgdW5zaWduZWQgYml0cywKKwllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKQoreworCUJVR19PTihyZWcgPj0gTklUSU9fTnVtX1JlZ2lzdGVycyk7CisJY291bnRlci0+Y291bnRlcl9kZXYtPndyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGJpdHMsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcmVhZF9yZWdpc3RlcihzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnKQoreworCUJVR19PTihyZWcgPj0gTklUSU9fTnVtX1JlZ2lzdGVycyk7CisJcmV0dXJuIGNvdW50ZXItPmNvdW50ZXJfZGV2LT5yZWFkX3JlZ2lzdGVyKGNvdW50ZXIsIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5pX3Rpb19jb3VudGluZ19tb2RlX3JlZ2lzdGVyc19wcmVzZW50KAorCWNvbnN0IHN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYpCit7CisJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgeworCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCQlyZXR1cm4gMDsKKwkJYnJlYWs7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuaV90aW9fc2V0X2JpdHNfdHJhbnNpZW50KHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCWVudW0gbmlfZ3BjdF9yZWdpc3RlciByZWdpc3Rlcl9pbmRleCwgdW5zaWduZWQgYml0X21hc2ssCisJdW5zaWduZWQgYml0X3ZhbHVlcywgdW5zaWduZWQgdHJhbnNpZW50X2JpdF92YWx1ZXMpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlCVUdfT04ocmVnaXN0ZXJfaW5kZXggPj0gTklUSU9fTnVtX1JlZ2lzdGVycyk7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyX2Rldi0+cmVnc19sb2NrLCBmbGFncyk7CisJY291bnRlcl9kZXYtPnJlZ3NbcmVnaXN0ZXJfaW5kZXhdICY9IH5iaXRfbWFzazsKKwljb3VudGVyX2Rldi0+cmVnc1tyZWdpc3Rlcl9pbmRleF0gfD0gKGJpdF92YWx1ZXMgJiBiaXRfbWFzayk7CisJd3JpdGVfcmVnaXN0ZXIoY291bnRlciwKKwkJY291bnRlcl9kZXYtPnJlZ3NbcmVnaXN0ZXJfaW5kZXhdIHwgdHJhbnNpZW50X2JpdF92YWx1ZXMsCisJCXJlZ2lzdGVyX2luZGV4KTsKKwltbWlvd2IoKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY291bnRlcl9kZXYtPnJlZ3NfbG9jaywgZmxhZ3MpOworfQorCisvKiBuaV90aW9fc2V0X2JpdHMoICkgaXMgZm9yIHNhZmVseSB3cml0aW5nIHRvIHJlZ2lzdGVycyB3aG9zZSBiaXRzIG1heSBiZQordHdpZGRsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQsIG9yIHdob3NlIHNvZnR3YXJlIGNvcHkgbWF5IGJlIHJlYWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCisqLworc3RhdGljIGlubGluZSB2b2lkIG5pX3Rpb19zZXRfYml0cyhzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnaXN0ZXJfaW5kZXgsIHVuc2lnbmVkIGJpdF9tYXNrLAorCXVuc2lnbmVkIGJpdF92YWx1ZXMpCit7CisJbmlfdGlvX3NldF9iaXRzX3RyYW5zaWVudChjb3VudGVyLCByZWdpc3Rlcl9pbmRleCwgYml0X21hc2ssIGJpdF92YWx1ZXMsCisJCTB4MCk7Cit9CisKKy8qIG5pX3Rpb19nZXRfc29mdF9jb3B5KCApIGlzIGZvciBzYWZlbHkgcmVhZGluZyB0aGUgc29mdHdhcmUgY29weSBvZiBhIHJlZ2lzdGVyCit3aG9zZSBiaXRzIG1pZ2h0IGJlIG1vZGlmaWVkIGluIGludGVycnVwdCBjb250ZXh0LCBvciB3aG9zZSBzb2Z0d2FyZSBjb3B5CittaWdodCBuZWVkIHRvIGJlIHJlYWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCisqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBuaV90aW9fZ2V0X3NvZnRfY29weShjb25zdCBzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwKKwllbnVtIG5pX2dwY3RfcmVnaXN0ZXIgcmVnaXN0ZXJfaW5kZXgpCit7CisJc3RydWN0IG5pX2dwY3RfZGV2aWNlICpjb3VudGVyX2RldiA9IGNvdW50ZXItPmNvdW50ZXJfZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgdmFsdWU7CisKKwlCVUdfT04ocmVnaXN0ZXJfaW5kZXggPj0gTklUSU9fTnVtX1JlZ2lzdGVycyk7CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyX2Rldi0+cmVnc19sb2NrLCBmbGFncyk7CisJdmFsdWUgPSBjb3VudGVyX2Rldi0+cmVnc1tyZWdpc3Rlcl9pbmRleF07CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvdW50ZXJfZGV2LT5yZWdzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK2ludCBuaV90aW9fYXJtKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBpbnQgYXJtLCB1bnNpZ25lZCBzdGFydF90cmlnZ2VyKTsKK2ludCBuaV90aW9fc2V0X2dhdGVfc3JjKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCB1bnNpZ25lZCBnYXRlX2luZGV4LAorCXVuc2lnbmVkIGludCBnYXRlX3NvdXJjZSk7CisKKyNlbmRpZiAvKiBfQ09NRURJX05JX1RJT19JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvY21kLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfdGlvY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZhMjZlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV90aW9jbWQuYwpAQCAtMCwwICsxLDUyMyBAQAorLyoKKyAgY29tZWRpL2RyaXZlcnMvbmlfdGlvY21kLmMKKyAgQ29tbWFuZCBzdXBwb3J0IGZvciBOSSBnZW5lcmFsIHB1cnBvc2UgY291bnRlcnMKKworICBDb3B5cmlnaHQgKEMpIDIwMDYgRnJhbmsgTW9yaSBIZXNzIDxmbWhlc3NAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKy8qCitEcml2ZXI6IG5pX3Rpb2NtZAorRGVzY3JpcHRpb246IE5hdGlvbmFsIEluc3RydW1lbnRzIGdlbmVyYWwgcHVycG9zZSBjb3VudGVycyBjb21tYW5kIHN1cHBvcnQKK0RldmljZXM6CitBdXRob3I6IEouUC4gTWVsbG9yIDxqcG1lbGxvckByb3NlLWh1bG1hbi5lZHU+LAorCUhlcm1hbi5CcnV5bmluY2t4QG1lY2gua3VsZXV2ZW4uYWMuYmUsCisJV2ltLk1lZXVzc2VuQG1lY2gua3VsZXV2ZW4uYWMuYmUsCisJS2xhYXMuR2FkZXluZUBtZWNoLmt1bGV1dmVuLmFjLmJlLAorCUZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK1VwZGF0ZWQ6IEZyaSwgMTEgQXByIDIwMDggMTI6MzI6MzUgKzAxMDAKK1N0YXR1czogd29ya3MKKworVGhpcyBtb2R1bGUgaXMgbm90IHVzZWQgZGlyZWN0bHkgYnkgZW5kLXVzZXJzLiAgUmF0aGVyLCBpdAoraXMgdXNlZCBieSBvdGhlciBkcml2ZXJzIChmb3IgZXhhbXBsZSBuaV82NjB4IGFuZCBuaV9wY2ltaW8pCit0byBwcm92aWRlIGNvbW1hbmQgc3VwcG9ydCBmb3IgTkkncyBnZW5lcmFsIHB1cnBvc2UgY291bnRlcnMuCitJdCB3YXMgb3JpZ2luYWxseSBzcGxpdCBvdXQgb2YgbmlfdGlvLmMgdG8gc3RvcCB0aGUgJ25pX3RpbycKK21vZHVsZSBkZXBlbmRpbmcgb24gdGhlICdtaXRlJyBtb2R1bGUuCisKK1JlZmVyZW5jZXM6CitEQVEgNjYweCBSZWdpc3Rlci1MZXZlbCBQcm9ncmFtbWVyIE1hbnVhbCAgKE5JIDM3MDUwNUEtMDEpCitEQVEgNjYwMS82NjAyIFVzZXIgTWFudWFsIChOSSAzMjIxMzdCLTAxKQorMzQwOTM0Yi5wZGYgIERBUS1TVEMgcmVmZXJlbmNlIG1hbnVhbAorCisqLworLyoKK1RPRE86CisJU3VwcG9ydCB1c2Ugb2YgYm90aCBiYW5rcyBYIGFuZCBZCisqLworCisjaW5jbHVkZSAibmlfdGlvX2ludGVybmFsLmgiCisjaW5jbHVkZSAibWl0ZS5oIgorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgPGNvbWVkaUBjb21lZGkub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgY29tbWFuZCBzdXBwb3J0IGZvciBOSSBnZW5lcmFsLXB1cnBvc2UgY291bnRlcnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIHZvaWQgbmlfdGlvX2NvbmZpZ3VyZV9kbWEoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHNob3J0IGVuYWJsZSwKKwlzaG9ydCByZWFkX25vdF93cml0ZSkKK3sKKwlzdHJ1Y3QgbmlfZ3BjdF9kZXZpY2UgKmNvdW50ZXJfZGV2ID0gY291bnRlci0+Y291bnRlcl9kZXY7CisJdW5zaWduZWQgaW5wdXRfc2VsZWN0X2JpdHMgPSAwOworCisJaWYgKGVuYWJsZSkgeworCQlpZiAocmVhZF9ub3Rfd3JpdGUpIHsKKwkJCWlucHV0X3NlbGVjdF9iaXRzIHw9IEdpX1JlYWRfQWNrbm93bGVkZ2VzX0lycTsKKwkJfSBlbHNlIHsKKwkJCWlucHV0X3NlbGVjdF9iaXRzIHw9IEdpX1dyaXRlX0Fja25vd2xlZGdlc19JcnE7CisJCX0KKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsCisJCU5JVElPX0dpX0lucHV0X1NlbGVjdF9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX1JlYWRfQWNrbm93bGVkZ2VzX0lycSB8IEdpX1dyaXRlX0Fja25vd2xlZGdlc19JcnEsCisJCWlucHV0X3NlbGVjdF9iaXRzKTsKKwlzd2l0Y2ggKGNvdW50ZXJfZGV2LT52YXJpYW50KSB7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfZV9zZXJpZXM6CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCXsKKwkJCXVuc2lnbmVkIGdpX2RtYV9jb25maWdfYml0cyA9IDA7CisKKwkJCWlmIChlbmFibGUpIHsKKwkJCQlnaV9kbWFfY29uZmlnX2JpdHMgfD0gR2lfRE1BX0VuYWJsZV9CaXQ7CisJCQkJZ2lfZG1hX2NvbmZpZ19iaXRzIHw9IEdpX0RNQV9JbnRfQml0OworCQkJfQorCQkJaWYgKHJlYWRfbm90X3dyaXRlID09IDApIHsKKwkJCQlnaV9kbWFfY29uZmlnX2JpdHMgfD0gR2lfRE1BX1dyaXRlX0JpdDsKKwkJCX0KKwkJCW5pX3Rpb19zZXRfYml0cyhjb3VudGVyLAorCQkJCU5JVElPX0dpX0RNQV9Db25maWdfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQkJCUdpX0RNQV9FbmFibGVfQml0IHwgR2lfRE1BX0ludF9CaXQgfAorCQkJCUdpX0RNQV9Xcml0ZV9CaXQsIGdpX2RtYV9jb25maWdfYml0cyk7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG5pX3Rpb19pbnB1dF9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKwlzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciA9IHMtPnByaXZhdGU7CisKKwlCVUdfT04oY291bnRlciA9PSBOVUxMKTsKKwlpZiAodHJpZ251bSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworCWlmIChjb3VudGVyLT5taXRlX2NoYW4pCisJCW1pdGVfZG1hX2FybShjb3VudGVyLT5taXRlX2NoYW4pOworCWVsc2UKKwkJcmV0dmFsID0gLUVJTzsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IG5pX3Rpb19hcm0oY291bnRlciwgMSwgTklfR1BDVF9BUk1fSU1NRURJQVRFKTsKKwlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5pX3Rpb19pbnB1dF9jbWQoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jKQoreworCXN0cnVjdCBuaV9ncGN0X2RldmljZSAqY291bnRlcl9kZXYgPSBjb3VudGVyLT5jb3VudGVyX2RldjsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJmFzeW5jLT5jbWQ7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiB3cml0ZSBhbGxvYyB0aGUgZW50aXJlIGJ1ZmZlciAqLworCWNvbWVkaV9idWZfd3JpdGVfYWxsb2MoYXN5bmMsIGFzeW5jLT5wcmVhbGxvY19idWZzeik7CisJY291bnRlci0+bWl0ZV9jaGFuLT5kaXIgPSBDT01FRElfSU5QVVQ7CisJc3dpdGNoIChjb3VudGVyX2Rldi0+dmFyaWFudCkgeworCWNhc2UgbmlfZ3BjdF92YXJpYW50X21fc2VyaWVzOgorCWNhc2UgbmlfZ3BjdF92YXJpYW50XzY2MHg6CisJCW1pdGVfcHJlcF9kbWEoY291bnRlci0+bWl0ZV9jaGFuLCAzMiwgMzIpOworCQlicmVhazsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9lX3NlcmllczoKKwkJbWl0ZV9wcmVwX2RtYShjb3VudGVyLT5taXRlX2NoYW4sIDE2LCAzMik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKwl9CisJbmlfdGlvX3NldF9iaXRzKGNvdW50ZXIsIE5JVElPX0dpX0NvbW1hbmRfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQlHaV9TYXZlX1RyYWNlX0JpdCwgMCk7CisJbmlfdGlvX2NvbmZpZ3VyZV9kbWEoY291bnRlciwgMSwgMSk7CisJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19OT1c6CisJCWFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKwkJbWl0ZV9kbWFfYXJtKGNvdW50ZXItPm1pdGVfY2hhbik7CisJCXJldHZhbCA9IG5pX3Rpb19hcm0oY291bnRlciwgMSwgTklfR1BDVF9BUk1fSU1NRURJQVRFKTsKKwkJYnJlYWs7CisJY2FzZSBUUklHX0lOVDoKKwkJYXN5bmMtPmludHRyaWcgPSAmbmlfdGlvX2lucHV0X2ludHRyaWc7CisJCWJyZWFrOworCWNhc2UgVFJJR19FWFQ6CisJCWFzeW5jLT5pbnR0cmlnID0gTlVMTDsKKwkJbWl0ZV9kbWFfYXJtKGNvdW50ZXItPm1pdGVfY2hhbik7CisJCXJldHZhbCA9IG5pX3Rpb19hcm0oY291bnRlciwgMSwgY21kLT5zdGFydF9hcmcpOworCWNhc2UgVFJJR19PVEhFUjoKKwkJYXN5bmMtPmludHRyaWcgPSBOVUxMOworCQltaXRlX2RtYV9hcm0oY291bnRlci0+bWl0ZV9jaGFuKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5pX3Rpb19vdXRwdXRfY21kKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYykKK3sKKwlydF9wcmludGsoIm5pX3Rpbzogb3V0cHV0IGNvbW1hbmRzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXG4iKTsKKwlyZXR1cm4gLUVOT1RTVVBQOworCisJY291bnRlci0+bWl0ZV9jaGFuLT5kaXIgPSBDT01FRElfT1VUUFVUOworCW1pdGVfcHJlcF9kbWEoY291bnRlci0+bWl0ZV9jaGFuLCAzMiwgMzIpOworCW5pX3Rpb19jb25maWd1cmVfZG1hKGNvdW50ZXIsIDEsIDApOworCW1pdGVfZG1hX2FybShjb3VudGVyLT5taXRlX2NoYW4pOworCXJldHVybiBuaV90aW9fYXJtKGNvdW50ZXIsIDEsIE5JX0dQQ1RfQVJNX0lNTUVESUFURSk7Cit9CisKK3N0YXRpYyBpbnQgbmlfdGlvX2NtZF9zZXR1cChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCWludCBzZXRfZ2F0ZV9zb3VyY2UgPSAwOworCXVuc2lnbmVkIGdhdGVfc291cmNlOworCWludCByZXR2YWwgPSAwOworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHsKKwkJc2V0X2dhdGVfc291cmNlID0gMTsKKwkJZ2F0ZV9zb3VyY2UgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCX0gZWxzZSBpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQlzZXRfZ2F0ZV9zb3VyY2UgPSAxOworCQlnYXRlX3NvdXJjZSA9IGNtZC0+Y29udmVydF9hcmc7CisJfQorCWlmIChzZXRfZ2F0ZV9zb3VyY2UpIHsKKwkJcmV0dmFsID0gbmlfdGlvX3NldF9nYXRlX3NyYyhjb3VudGVyLCAwLCBnYXRlX3NvdXJjZSk7CisJfQorCWlmIChjbWQtPmZsYWdzICYgVFJJR19XQUtFX0VPUykgeworCQluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJCU5JVElPX0dpX0ludGVycnVwdF9FbmFibGVfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpLAorCQkJR2lfR2F0ZV9JbnRlcnJ1cHRfRW5hYmxlX0JpdChjb3VudGVyLT5jb3VudGVyX2luZGV4KSwKKwkJCUdpX0dhdGVfSW50ZXJydXB0X0VuYWJsZV9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCkpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgbmlfdGlvX2NtZChzdHJ1Y3QgbmlfZ3BjdCAqY291bnRlciwgc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZhc3luYy0+Y21kOworCWludCByZXR2YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmNvdW50ZXItPmxvY2ssIGZsYWdzKTsKKwlpZiAoY291bnRlci0+bWl0ZV9jaGFuID09IE5VTEwpIHsKKwkJcnRfcHJpbnRrCisJCQkoIm5pX3RpbzogY29tbWFuZHMgb25seSBzdXBwb3J0ZWQgd2l0aCBETUEuICBJbnRlcnJ1cHQtZHJpdmVuIGNvbW1hbmRzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXG4iKTsKKwkJcmV0dmFsID0gLUVJTzsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBuaV90aW9fY21kX3NldHVwKGNvdW50ZXIsIGFzeW5jKTsKKwkJaWYgKHJldHZhbCA9PSAwKSB7CisJCQlpZiAoY21kLT5mbGFncyAmIENNREZfV1JJVEUpIHsKKwkJCQlyZXR2YWwgPSBuaV90aW9fb3V0cHV0X2NtZChjb3VudGVyLCBhc3luYyk7CisJCQl9IGVsc2UgeworCQkJCXJldHZhbCA9IG5pX3Rpb19pbnB1dF9jbWQoY291bnRlciwgYXN5bmMpOworCQkJfQorCQl9CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IG5pX3Rpb19jbWR0ZXN0KHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wOworCWludCBzb3VyY2VzOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCXNvdXJjZXMgPSBUUklHX05PVyB8IFRSSUdfSU5UIHwgVFJJR19PVEhFUjsKKwlpZiAobmlfdGlvX2NvdW50aW5nX21vZGVfcmVnaXN0ZXJzX3ByZXNlbnQoY291bnRlci0+Y291bnRlcl9kZXYpKQorCQlzb3VyY2VzIHw9IFRSSUdfRVhUOworCWNtZC0+c3RhcnRfc3JjICY9IHNvdXJjZXM7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRk9MTE9XIHwgVFJJR19FWFQgfCBUUklHX09USEVSOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCXNvdXJjZXMgPSBUUklHX05PVyB8IFRSSUdfRVhUIHwgVFJJR19PVEhFUjsKKwljbWQtPmNvbnZlcnRfc3JjICY9IHNvdXJjZXM7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZS4uLiAqLworCisJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmCisJCWNtZC0+c3RhcnRfc3JjICE9IFRSSUdfSU5UICYmCisJCWNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfT1RIRVIpCisJCWVycisrOworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX09USEVSKQorCQllcnIrKzsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX09USEVSICYmCisJCWNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVykKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKwkvKiAuLi4gYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKwlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkgeworCQlpZiAoY21kLT5zdGFydF9hcmcgIT0gMCkgeworCQkJY21kLT5zdGFydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19FWFQpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBuaV90aW9fY2FuY2VsKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwluaV90aW9fYXJtKGNvdW50ZXIsIDAsIDApOworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworCWlmIChjb3VudGVyLT5taXRlX2NoYW4pIHsKKwkJbWl0ZV9kbWFfZGlzYXJtKGNvdW50ZXItPm1pdGVfY2hhbik7CisJfQorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJbmlfdGlvX2NvbmZpZ3VyZV9kbWEoY291bnRlciwgMCwgMCk7CisKKwluaV90aW9fc2V0X2JpdHMoY291bnRlciwKKwkJTklUSU9fR2lfSW50ZXJydXB0X0VuYWJsZV9SZWcoY291bnRlci0+Y291bnRlcl9pbmRleCksCisJCUdpX0dhdGVfSW50ZXJydXB0X0VuYWJsZV9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCksIDB4MCk7CisJcmV0dXJuIDA7Cit9CisKKwkvKiBEdXJpbmcgYnVmZmVyZWQgaW5wdXQgY291bnRlciBvcGVyYXRpb24gZm9yIGUtc2VyaWVzLCB0aGUgZ2F0ZSBpbnRlcnJ1cHQgaXMgYWNrZWQKKwkgICBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBkbWEgY29udHJvbGxlciwgZHVlIHRvIHRoZSBHaV9SZWFkL1dyaXRlX0Fja25vd2xlZGdlc19JUlEgYml0cworCSAgIGluIHRoZSBpbnB1dCBzZWxlY3QgcmVnaXN0ZXIuICAqLworc3RhdGljIGludCBzaG91bGRfYWNrX2dhdGUoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0dmFsID0gMDsKKworCXN3aXRjaCAoY291bnRlci0+Y291bnRlcl9kZXYtPnZhcmlhbnQpIHsKKwljYXNlIG5pX2dwY3RfdmFyaWFudF9tX3NlcmllczoKKwljYXNlIG5pX2dwY3RfdmFyaWFudF82NjB4OgkvLyBub3Qgc3VyZSBpZiA2NjB4IHJlYWxseSBzdXBwb3J0cyBnYXRlIGludGVycnVwdHMgKHRoZSBiaXRzIGFyZSBub3QgbGlzdGVkIGluIHJlZ2lzdGVyLWxldmVsIG1hbnVhbCkKKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmNvdW50ZXItPmxvY2ssIGZsYWdzKTsKKwkJeworCQkJaWYgKGNvdW50ZXItPm1pdGVfY2hhbiA9PSBOVUxMIHx8CisJCQkJY291bnRlci0+bWl0ZV9jaGFuLT5kaXIgIT0gQ09NRURJX0lOUFVUIHx8CisJCQkJKG1pdGVfZG9uZShjb3VudGVyLT5taXRlX2NoYW4pKSkgeworCQkJCXJldHZhbCA9IDE7CisJCQl9CisJCX0KKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvdW50ZXItPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgbmlfdGlvX2Fja25vd2xlZGdlX2FuZF9jb25maXJtKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLCBpbnQgKmdhdGVfZXJyb3IsCisJaW50ICp0Y19lcnJvciwgaW50ICpwZXJtX3N0YWxlX2RhdGEsIGludCAqc3RhbGVfZGF0YSkKK3sKKwljb25zdCB1bnNpZ25lZCBzaG9ydCBneHhfc3RhdHVzID0gcmVhZF9yZWdpc3Rlcihjb3VudGVyLAorCQlOSVRJT19HeHhfU3RhdHVzX1JlZyhjb3VudGVyLT5jb3VudGVyX2luZGV4KSk7CisJY29uc3QgdW5zaWduZWQgc2hvcnQgZ2lfc3RhdHVzID0gcmVhZF9yZWdpc3Rlcihjb3VudGVyLAorCQlOSVRJT19HaV9TdGF0dXNfUmVnKGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKTsKKwl1bnNpZ25lZCBhY2sgPSAwOworCisJaWYgKGdhdGVfZXJyb3IpCisJCSpnYXRlX2Vycm9yID0gMDsKKwlpZiAodGNfZXJyb3IpCisJCSp0Y19lcnJvciA9IDA7CisJaWYgKHBlcm1fc3RhbGVfZGF0YSkKKwkJKnBlcm1fc3RhbGVfZGF0YSA9IDA7CisJaWYgKHN0YWxlX2RhdGEpCisJCSpzdGFsZV9kYXRhID0gMDsKKworCWlmIChneHhfc3RhdHVzICYgR2lfR2F0ZV9FcnJvcl9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCkpIHsKKwkJYWNrIHw9IEdpX0dhdGVfRXJyb3JfQ29uZmlybV9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCk7CisJCWlmIChnYXRlX2Vycm9yKSB7CisJCQkvKjY2MHggZG9uJ3Qgc3VwcG9ydCBhdXRvbWF0aWMgYWNrbm93bGVkZ2VtZW50IG9mIGdhdGUgaW50ZXJydXB0IHZpYSBkbWEgcmVhZC93cml0ZQorCQkJICAgYW5kIHJlcG9ydCBib2d1cyBnYXRlIGVycm9ycyAqLworCQkJaWYgKGNvdW50ZXItPmNvdW50ZXJfZGV2LT52YXJpYW50ICE9CisJCQkJbmlfZ3BjdF92YXJpYW50XzY2MHgpIHsKKwkJCQkqZ2F0ZV9lcnJvciA9IDE7CisJCQl9CisJCX0KKwl9CisJaWYgKGd4eF9zdGF0dXMgJiBHaV9UQ19FcnJvcl9CaXQoY291bnRlci0+Y291bnRlcl9pbmRleCkpIHsKKwkJYWNrIHw9IEdpX1RDX0Vycm9yX0NvbmZpcm1fQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpOworCQlpZiAodGNfZXJyb3IpCisJCQkqdGNfZXJyb3IgPSAxOworCX0KKwlpZiAoZ2lfc3RhdHVzICYgR2lfVENfQml0KSB7CisJCWFjayB8PSBHaV9UQ19JbnRlcnJ1cHRfQWNrX0JpdDsKKwl9CisJaWYgKGdpX3N0YXR1cyAmIEdpX0dhdGVfSW50ZXJydXB0X0JpdCkgeworCQlpZiAoc2hvdWxkX2Fja19nYXRlKGNvdW50ZXIpKQorCQkJYWNrIHw9IEdpX0dhdGVfSW50ZXJydXB0X0Fja19CaXQ7CisJfQorCWlmIChhY2spCisJCXdyaXRlX3JlZ2lzdGVyKGNvdW50ZXIsIGFjaywKKwkJCU5JVElPX0dpX0ludGVycnVwdF9BY2tub3dsZWRnZV9SZWcoY291bnRlci0+CisJCQkJY291bnRlcl9pbmRleCkpOworCWlmIChuaV90aW9fZ2V0X3NvZnRfY29weShjb3VudGVyLAorCQkJTklUSU9fR2lfTW9kZV9SZWcoY291bnRlci0+CisJCQkJY291bnRlcl9pbmRleCkpICYgR2lfTG9hZGluZ19Pbl9HYXRlX0JpdCkgeworCQlpZiAoZ3h4X3N0YXR1cyAmIEdpX1N0YWxlX0RhdGFfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKSB7CisJCQlpZiAoc3RhbGVfZGF0YSkKKwkJCQkqc3RhbGVfZGF0YSA9IDE7CisJCX0KKwkJaWYgKHJlYWRfcmVnaXN0ZXIoY291bnRlciwKKwkJCQlOSVRJT19HeHhfSm9pbnRfU3RhdHVzMl9SZWcoY291bnRlci0+CisJCQkJCWNvdW50ZXJfaW5kZXgpKSAmCisJCQlHaV9QZXJtYW5lbnRfU3RhbGVfQml0KGNvdW50ZXItPmNvdW50ZXJfaW5kZXgpKSB7CisJCQlydF9wcmludGsoIiVzOiBHaV9QZXJtYW5lbnRfU3RhbGVfRGF0YSBkZXRlY3RlZC5cbiIsCisJCQkJX19GVU5DVElPTl9fKTsKKwkJCWlmIChwZXJtX3N0YWxlX2RhdGEpCisJCQkJKnBlcm1fc3RhbGVfZGF0YSA9IDE7CisJCX0KKwl9Cit9CisKK3ZvaWQgbmlfdGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IG5pX2dwY3QgKmNvdW50ZXIsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBncGN0X21pdGVfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGdhdGVfZXJyb3I7CisJaW50IHRjX2Vycm9yOworCWludCBwZXJtX3N0YWxlX2RhdGE7CisKKwluaV90aW9fYWNrbm93bGVkZ2VfYW5kX2NvbmZpcm0oY291bnRlciwgJmdhdGVfZXJyb3IsICZ0Y19lcnJvciwKKwkJJnBlcm1fc3RhbGVfZGF0YSwgTlVMTCk7CisJaWYgKGdhdGVfZXJyb3IpIHsKKwkJcnRfcHJpbnRrKCIlczogR2lfR2F0ZV9FcnJvciBkZXRlY3RlZC5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOworCX0KKwlpZiAocGVybV9zdGFsZV9kYXRhKSB7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VSUk9SOworCX0KKwlzd2l0Y2ggKGNvdW50ZXItPmNvdW50ZXJfZGV2LT52YXJpYW50KSB7CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfbV9zZXJpZXM6CisJY2FzZSBuaV9ncGN0X3ZhcmlhbnRfNjYweDoKKwkJaWYgKHJlYWRfcmVnaXN0ZXIoY291bnRlciwKKwkJCQlOSVRJT19HaV9ETUFfU3RhdHVzX1JlZyhjb3VudGVyLT4KKwkJCQkJY291bnRlcl9pbmRleCkpICYgR2lfRFJRX0Vycm9yX0JpdCkgeworCQkJcnRfcHJpbnRrKCIlczogR2lfRFJRX0Vycm9yIGRldGVjdGVkLlxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX09WRVJGTE9XOworCQl9CisJCWJyZWFrOworCWNhc2UgbmlfZ3BjdF92YXJpYW50X2Vfc2VyaWVzOgorCQlicmVhazsKKwl9CisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJaWYgKGNvdW50ZXItPm1pdGVfY2hhbiA9PSBOVUxMKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisJZ3BjdF9taXRlX3N0YXR1cyA9IG1pdGVfZ2V0X3N0YXR1cyhjb3VudGVyLT5taXRlX2NoYW4pOworCWlmIChncGN0X21pdGVfc3RhdHVzICYgQ0hTUl9MSU5LQykgeworCQl3cml0ZWwoQ0hPUl9DTFJMQywKKwkJCWNvdW50ZXItPm1pdGVfY2hhbi0+bWl0ZS0+bWl0ZV9pb19hZGRyICsKKwkJCU1JVEVfQ0hPUihjb3VudGVyLT5taXRlX2NoYW4tPmNoYW5uZWwpKTsKKwl9CisJbWl0ZV9zeW5jX2lucHV0X2RtYShjb3VudGVyLT5taXRlX2NoYW4sIHMtPmFzeW5jKTsKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY291bnRlci0+bG9jaywgZmxhZ3MpOworfQorCit2b2lkIG5pX3Rpb19zZXRfbWl0ZV9jaGFubmVsKHN0cnVjdCBuaV9ncGN0ICpjb3VudGVyLAorCXN0cnVjdCBtaXRlX2NoYW5uZWwgKm1pdGVfY2hhbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7CisJY291bnRlci0+bWl0ZV9jaGFuID0gbWl0ZV9jaGFuOworCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3VudGVyLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG5pX3Rpb2NtZF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChuaV90aW9jbWRfaW5pdF9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbmlfdGlvY21kX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7Cit9CisKK21vZHVsZV9leGl0KG5pX3Rpb2NtZF9jbGVhbnVwX21vZHVsZSk7CisKK0VYUE9SVF9TWU1CT0xfR1BMKG5pX3Rpb19jbWQpOworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2NtZHRlc3QpOworRVhQT1JUX1NZTUJPTF9HUEwobmlfdGlvX2NhbmNlbCk7CitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9faGFuZGxlX2ludGVycnVwdCk7CitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9fc2V0X21pdGVfY2hhbm5lbCk7CitFWFBPUlRfU1lNQk9MX0dQTChuaV90aW9fYWNrbm93bGVkZ2VfYW5kX2NvbmZpcm0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNDI1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzExLmMKQEAgLTAsMCArMSw2MjMgQEAKKy8qCisgICBjb21lZGkvZHJpdmVycy9wY2w3MTEuYworICAgaGFyZHdhcmUgZHJpdmVyIGZvciBQQy1MYWJDYXJkIFBDTC03MTEgYW5kIEFkU3lzIEFDTC04MTEyCisgICBhbmQgY29tcGF0aWJsZXMKKworICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorICAgSmFubmUgSmFsa2FuZW4gPGphbGthbmVuQGNzLmh1dC5maT4KKyAgIEVyaWMgQnVubiA8ZWJ1QGNzLmh1dC5maT4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICovCisvKgorRHJpdmVyOiBwY2w3MTEKK0Rlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENMLTcxMSBhbmQgNzExYiwgQURMaW5rIEFDTC04MTEyCitBdXRob3I6IGRzLCBKYW5uZSBKYWxrYW5lbiA8amFsa2FuZW5AY3MuaHV0LmZpPiwgRXJpYyBCdW5uIDxlYnVAY3MuaHV0LmZpPgorU3RhdHVzOiBtb3N0bHkgY29tcGxldGUKK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDTC03MTEgKHBjbDcxMSksIFBDTC03MTFCIChwY2w3MTFiKSwKKyAgW0FkTGlua10gQUNMLTgxMTJIRyAoYWNsODExMmhnKSwgQUNMLTgxMTJERyAoYWNsODExMmRnKQorCitTaW5jZSB0aGVzZSBib2FyZHMgZG8gbm90IGhhdmUgRE1BIG9yIEZJRk9zLCBvbmx5IGltbWVkaWF0ZSBtb2RlIGlzCitzdXBwb3J0ZWQuCisKKyovCisKKy8qCisgICBEYXZlIEFuZHJ1Y3p5ayA8ZGF2ZUB0ZWNoLmJ1ZmZhbG9zdGF0ZS5lZHU+IGFsc28gd3JvdGUgYQorICAgZHJpdmVyIGZvciB0aGUgUENMLTcxMS4gIEkgdXNlZCBhIGZldyBpZGVhcyBmcm9tIGhpcyBkcml2ZXIKKyAgIGhlcmUuICBIaXMgZHJpdmVyIGFsc28gaGFzIG1vcmUgY29tbWVudHMsIGlmIHlvdSBhcmUKKyAgIGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBkcml2ZXIgd29ya3MuCisgICBodHRwOi8vdGVjaC5idWZmYWxvc3RhdGUuZWR1L35kYXZlL2RyaXZlci8KKworICAgVGhlIEFDTC04MTEyIGRyaXZlciB3YXMgaGFja2VkIGZyb20gdGhlIHNvdXJjZXMgb2YgdGhlIFBDTC03MTEKKyAgIGRyaXZlciAodGhlIDc0NCBjaGlwIHVzZWQgb24gdGhlIDgxMTIgaXMgYWxtb3N0IHRoZSBzYW1lIGFzCisgICB0aGUgNzExYiBjaGlwLCBidXQgaXQgaGFzIG1vcmUgSS9PIGNoYW5uZWxzKSBieQorICAgSmFubmUgSmFsa2FuZW4gKGphbGthbmVuQGNzLmh1dC5maSkgYW5kCisgICBFcmlrIEJ1bm4gKGVidUBjcy5odXQuZmkpLiAgUmVtZXJnZWQgd2l0aCB0aGUgUENMLTcxMSBkcml2ZXIKKyAgIGJ5IGRzLgorCisgICBbYWNsLTgxMTJdCisgICBUaGlzIGRyaXZlciBzdXBwb3J0cyBib3RoIFRSSUdOT1cgYW5kIFRSSUdDTEssCisgICBidXQgZG9lcyBub3QgeWV0IHN1cHBvcnQgRE1BIHRyYW5zZmVycy4gIEl0IGFsc28gc3VwcG9ydHMKKyAgIGJvdGggaGlnaCAoSEcpIGFuZCBsb3cgKERHKSB2ZXJzaW9ucyBvZiB0aGUgY2FyZCwgdGhvdWdoCisgICB0aGUgSEcgdmVyc2lvbiBoYXMgYmVlbiB1bnRlc3RlZC4KKworICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICI4MjUzLmgiCisKKyNkZWZpbmUgUENMNzExX1NJWkUgMTYKKworI2RlZmluZSBQQ0w3MTFfQ1RSMCAwCisjZGVmaW5lIFBDTDcxMV9DVFIxIDEKKyNkZWZpbmUgUENMNzExX0NUUjIgMgorI2RlZmluZSBQQ0w3MTFfQ1RSQ1RMIDMKKyNkZWZpbmUgUENMNzExX0FEX0xPIDQKKyNkZWZpbmUgUENMNzExX0RBMF9MTyA0CisjZGVmaW5lIFBDTDcxMV9BRF9ISSA1CisjZGVmaW5lIFBDTDcxMV9EQTBfSEkgNQorI2RlZmluZSBQQ0w3MTFfRElfTE8gNgorI2RlZmluZSBQQ0w3MTFfREExX0xPIDYKKyNkZWZpbmUgUENMNzExX0RJX0hJIDcKKyNkZWZpbmUgUENMNzExX0RBMV9ISSA3CisjZGVmaW5lIFBDTDcxMV9DTFJJTlRSIDgKKyNkZWZpbmUgUENMNzExX0dBSU4gOQorI2RlZmluZSBQQ0w3MTFfTVVYIDEwCisjZGVmaW5lIFBDTDcxMV9NT0RFIDExCisjZGVmaW5lIFBDTDcxMV9TT0ZUVFJJRyAxMgorI2RlZmluZSBQQ0w3MTFfRE9fTE8gMTMKKyNkZWZpbmUgUENMNzExX0RPX0hJIDE0CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2w3MTFiX2FpID0geyA1LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJCQlCSVBfUkFOR0UoMC4zMTI1KQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWNsODExMmhnX2FpID0geyAxMiwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDEpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDEpCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hY2w4MTEyZGdfYWkgPSB7IDksIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgxMCkKKwl9Cit9OworCisvKgorICogZmxhZ3MKKyAqLworCisjZGVmaW5lIFBDTDcxMV9USU1FT1VUIDEwMAorI2RlZmluZSBQQ0w3MTFfRFJEWSAweDEwCisKK3N0YXRpYyBjb25zdCBpbnQgaTgyNTNfb3NjX2Jhc2UgPSA1MDA7CS8qIDIgTWh6ICovCisKK3N0cnVjdCBwY2w3MTFfYm9hcmQgeworCisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgaXNfcGNsNzExYjsKKwlpbnQgaXNfODExMjsKKwlpbnQgaXNfZGc7CisJaW50IG5fcmFuZ2VzOworCWludCBuX2FpY2hhbjsKKwlpbnQgbl9hb2NoYW47CisJaW50IG1heGlycTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfdHlwZTsKK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2w3MTFfYm9hcmQgYm9hcmR0eXBlc1tdID0geworCXsicGNsNzExIiwgMCwgMCwgMCwgNSwgOCwgMSwgMCwgJnJhbmdlX2JpcG9sYXI1fSwKKwl7InBjbDcxMWIiLCAxLCAwLCAwLCA1LCA4LCAxLCA3LCAmcmFuZ2VfcGNsNzExYl9haX0sCisJeyJhY2w4MTEyaGciLCAwLCAxLCAwLCAxMiwgMTYsIDIsIDE1LCAmcmFuZ2VfYWNsODExMmhnX2FpfSwKKwl7ImFjbDgxMTJkZyIsIDAsIDEsIDEsIDksIDE2LCAyLCAxNSwgJnJhbmdlX2FjbDgxMTJkZ19haX0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgcGNsNzExX2JvYXJkKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBwY2w3MTFfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIGludCBwY2w3MTFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNsNzExX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjbDcxMSA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJwY2w3MTEiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbDcxMV9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNsNzExX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwY2w3MTFfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w3MTEpOworCitzdHJ1Y3QgcGNsNzExX3ByaXZhdGUgeworCisJaW50IGJvYXJkOworCWludCBhZGNoYW47CisJaW50IG50cmlnOworCWludCBhaXBbOF07CisJaW50IG1vZGU7CisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOworCXVuc2lnbmVkIGludCBkaXZpc29yMTsKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjI7Cit9OworCisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBwY2w3MTFfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGlycXJldHVybl90IHBjbDcxMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlpbnQgbG8sIGhpOworCWludCBkYXRhOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwloaSA9IGluYihkZXYtPmlvYmFzZSArIFBDTDcxMV9BRF9ISSk7CisJbG8gPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQURfTE8pOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ0xSSU5UUik7CisKKwlkYXRhID0gKGhpIDw8IDgpIHwgbG87CisKKwkvKiBGSVhNRSEgTm90aGluZyBlbHNlIHNldHMgbnRyaWchICovCisJaWYgKCEoLS1kZXZwcml2LT5udHJpZykpIHsKKwkJaWYgKHRoaXNfYm9hcmQtPmlzXzgxMTIpIHsKKwkJCW91dGIoMSwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfTU9ERSk7CisJCX0gZWxzZSB7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX01PREUpOworCQl9CisKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCX0KKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIHBjbDcxMV9zZXRfY2hhbmdhaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBjaGFuKQoreworCWludCBjaGFuX3JlZ2lzdGVyOworCisJb3V0YihDUl9SQU5HRShjaGFuKSwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfR0FJTik7CisKKwljaGFuX3JlZ2lzdGVyID0gQ1JfQ0hBTihjaGFuKTsKKworCWlmICh0aGlzX2JvYXJkLT5pc184MTEyKSB7CisKKwkJLyoKKwkJICogIFNldCB0aGUgY29ycmVjdCBjaGFubmVsLiAgVGhlIHR3byBjaGFubmVsIGJhbmtzIGFyZSBzd2l0Y2hlZAorCQkgKiAgdXNpbmcgdGhlIG1hc2sgdmFsdWUuCisJCSAqICBOQjogVG8gdXNlIGRpZmZlcmVudGlhbCBjaGFubmVscywgeW91IHNob3VsZCB1c2UgbWFzayA9IDB4MzAsCisJCSAqICBidXQgSSBoYXZlbid0IHdyaXR0ZW4gdGhlIHN1cHBvcnQgZm9yIHRoaXMgeWV0LiAvSkoKKwkJICovCisKKwkJaWYgKGNoYW5fcmVnaXN0ZXIgPj0gOCkgeworCQkJY2hhbl9yZWdpc3RlciA9IDB4MjAgfCAoY2hhbl9yZWdpc3RlciAmIDB4Nyk7CisJCX0gZWxzZSB7CisJCQljaGFuX3JlZ2lzdGVyIHw9IDB4MTA7CisJCX0KKwl9IGVsc2UgeworCQlvdXRiKGNoYW5fcmVnaXN0ZXIsIGRldi0+aW9iYXNlICsgUENMNzExX01VWCk7CisJfQorfQorCitzdGF0aWMgaW50IHBjbDcxMV9haV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaSwgbjsKKwlpbnQgaGksIGxvOworCisJcGNsNzExX3NldF9jaGFuZ2FpbihkZXYsIGluc24tPmNoYW5zcGVjKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLyoKKwkJICogIFdyaXRlIHRoZSBjb3JyZWN0IG1vZGUgKHNvZnR3YXJlIHBvbGxpbmcpIGFuZCBzdGFydCBwb2xsaW5nIGJ5IHdyaXRpbmcKKwkJICogIHRvIHRoZSB0cmlnZ2VyIHJlZ2lzdGVyCisJCSAqLworCQlvdXRiKDEsIGRldi0+aW9iYXNlICsgUENMNzExX01PREUpOworCisJCWlmICh0aGlzX2JvYXJkLT5pc184MTEyKSB7CisJCX0gZWxzZSB7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX1NPRlRUUklHKTsKKwkJfQorCisJCWkgPSBQQ0w3MTFfVElNRU9VVDsKKwkJd2hpbGUgKC0taSkgeworCQkJaGkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQURfSEkpOworCQkJaWYgKCEoaGkgJiBQQ0w3MTFfRFJEWSkpCisJCQkJZ290byBvazsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJcnRfcHJpbnRrKCJjb21lZGklZDogcGNsNzExOiBBL0QgdGltZW91dFxuIiwgZGV2LT5taW5vcik7CisJCXJldHVybiAtRVRJTUU7CisKKwkgICAgICBvazoKKwkJbG8gPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQURfTE8pOworCisJCWRhdGFbbl0gPSAoKGhpICYgMHhmKSA8PCA4KSB8IGxvOworCX0KKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHBjbDcxMV9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IHRtcDsKKwlpbnQgZXJyID0gMDsKKworCS8qIHN0ZXAgMSAqLworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDIgKi8KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMyAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19FWFQpIHsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisjZGVmaW5lIE1BWF9TUEVFRCAxMDAwCisjZGVmaW5lIFRJTUVSX0JBU0UgMTAwCisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgTUFYX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUFYX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwl9CisJaWYgKGNtZC0+Y29udmVydF9hcmcgIT0gMCkgeworCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19OT05FKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBpZ25vcmUgKi8KKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNCAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fYXJnOworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyXzJkaXYoVElNRVJfQkFTRSwKKwkJCSZkZXZwcml2LT5kaXZpc29yMSwgJmRldnByaXYtPmRpdmlzb3IyLAorCQkJJmNtZC0+c2Nhbl9iZWdpbl9hcmcsIGNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9hcmcpCisJCQllcnIrKzsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gNDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbDcxMV9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlpbnQgdGltZXIxLCB0aW1lcjI7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCisJcGNsNzExX3NldF9jaGFuZ2FpbihkZXYsIGNtZC0+Y2hhbmxpc3RbMF0pOworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQkvKgorCQkgKiAgU2V0IHRpbWVycworCQkgKiAgICAgIHRpbWVyIGNoaXAgaXMgYW4gODI1Mywgd2l0aCB0aW1lcnMgMSBhbmQgMgorCQkgKiAgICAgIGNhc2NhZGVkCisJCSAqICAweDc0ID0gU2VsZWN0IENvdW50ZXIgMSB8IExTQi9NU0IgfCBNb2RlPTIgfCBCaW5hcnkKKwkJICogICAgICAgIE1vZGUgMiA9IFJhdGUgZ2VuZXJhdG9yCisJCSAqCisJCSAqICAweGI0ID0gU2VsZWN0IENvdW50ZXIgMiB8IExTQi9NU0IgfCBNb2RlPTIgfCBCaW5hcnkKKwkJICovCisKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihpODI1M19vc2NfYmFzZSwgJnRpbWVyMSwgJnRpbWVyMiwKKwkJCSZjbWQtPnNjYW5fYmVnaW5fYXJnLCBUUklHX1JPVU5EX05FQVJFU1QpOworCisJCW91dGIoMHg3NCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ1RSQ1RMKTsKKwkJb3V0Yih0aW1lcjEgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9DVFIxKTsKKwkJb3V0YigodGltZXIxID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ1RSMSk7CisJCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ1RSQ1RMKTsKKwkJb3V0Yih0aW1lcjIgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9DVFIyKTsKKwkJb3V0YigodGltZXIyID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ1RSMik7CisKKwkJLyogY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzIChqdXN0IGluIGNhc2UpICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfQ0xSSU5UUik7CisKKwkJLyoKKwkJICogIFNldCBtb2RlIHRvIElSUSB0cmFuc2ZlcgorCQkgKi8KKwkJb3V0YihkZXZwcml2LT5tb2RlIHwgNiwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfTU9ERSk7CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQlvdXRiKGRldnByaXYtPm1vZGUgfCAzLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9NT0RFKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAgIGFuYWxvZyBvdXRwdXQKKyovCitzdGF0aWMgaW50IHBjbDcxMV9hb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlvdXRiKChkYXRhW25dICYgMHhmZiksCisJCQlkZXYtPmlvYmFzZSArIChjaGFuID8gUENMNzExX0RBMV9MTyA6IFBDTDcxMV9EQTBfTE8pKTsKKwkJb3V0YigoZGF0YVtuXSA+PiA4KSwKKwkJCWRldi0+aW9iYXNlICsgKGNoYW4gPyBQQ0w3MTFfREExX0hJIDogUENMNzExX0RBMF9ISSkpOworCisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtuXTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBwY2w3MTFfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlkYXRhW25dID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisJfQorCisJcmV0dXJuIG47CisKK30KKworLyogRGlnaXRhbCBwb3J0IHJlYWQgLSBVbnRlc3RlZCBvbiA4MTEyICovCitzdGF0aWMgaW50IHBjbDcxMV9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIFBDTDcxMV9ESV9MTykgfAorCQkoaW5iKGRldi0+aW9iYXNlICsgUENMNzExX0RJX0hJKSA8PCA4KTsKKworCXJldHVybiAyOworfQorCisvKiBEaWdpdGFsIHBvcnQgd3JpdGUgLSBVbnRlc3RlZCBvbiA4MTEyICovCitzdGF0aWMgaW50IHBjbDcxMV9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCX0KKwlpZiAoZGF0YVswXSAmIDB4MDBmZikKKwkJb3V0YihzLT5zdGF0ZSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMNzExX0RPX0xPKTsKKwlpZiAoZGF0YVswXSAmIDB4ZmYwMCkKKwkJb3V0Yigocy0+c3RhdGUgPj4gOCksIGRldi0+aW9iYXNlICsgUENMNzExX0RPX0hJKTsKKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCisvKiAgRnJlZSBhbnkgcmVzb3VyY2VzIHRoYXQgd2UgaGF2ZSBjbGFpbWVkICAqLworc3RhdGljIGludCBwY2w3MTFfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IHBjbDcxMTogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlycSkKKwkJY29tZWRpX2ZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUENMNzExX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qICBJbml0aWFsaXphdGlvbiAqLworc3RhdGljIGludCBwY2w3MTFfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlycTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCS8qIGNsYWltIG91ciBJL08gc3BhY2UgKi8KKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHBjbDcxMTogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBQQ0w3MTFfU0laRSwgInBjbDcxMSIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwkvKiB0aGVyZSBzaG91bGQgYmUgYSBzYW5pdHkgY2hlY2sgaGVyZSAqLworCisJLyogc2V0IHVwIHNvbWUgbmFtZSBzdHVmZiAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisKKwkvKiBncmFiIG91ciBJUlEgKi8KKwlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwlpZiAoaXJxID4gdGhpc19ib2FyZC0+bWF4aXJxKSB7CisJCXByaW50aygiaXJxIG91dCBvZiByYW5nZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoaXJxKSB7CisJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBwY2w3MTFfaW50ZXJydXB0LCAwLCAicGNsNzExIiwgZGV2KSkgeworCQkJcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgaXJxICV1XG4iLCBpcnEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQlwcmludGsoIiggaXJxID0gJXUgKVxuIiwgaXJxKTsKKwkJfQorCX0KKwlkZXYtPmlycSA9IGlycTsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2w3MTFfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBBSSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsKKwlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPmFpX3JhbmdlX3R5cGU7CisJcy0+aW5zbl9yZWFkID0gcGNsNzExX2FpX2luc247CisJaWYgKGlycSkgeworCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfUkVBRDsKKwkJcy0+ZG9fY21kdGVzdCA9IHBjbDcxMV9haV9jbWR0ZXN0OworCQlzLT5kb19jbWQgPSBwY2w3MTFfYWlfY21kOworCX0KKworCXMrKzsKKwkvKiBBTyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXI1OworCXMtPmluc25fd3JpdGUgPSBwY2w3MTFfYW9faW5zbjsKKwlzLT5pbnNuX3JlYWQgPSBwY2w3MTFfYW9faW5zbl9yZWFkOworCisJcysrOworCS8qIDE2LWJpdCBkaWdpdGFsIGlucHV0ICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxNjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IHBjbDcxMV9kaV9pbnNuX2JpdHM7CisKKwlzKys7CisJLyogMTYtYml0IGRpZ2l0YWwgb3V0ICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxNjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnN0YXRlID0gMDsKKwlzLT5pbnNuX2JpdHMgPSBwY2w3MTFfZG9faW5zbl9iaXRzOworCisJLyoKKwkgICB0aGlzIGlzIHRoZSAiYmFzZSB2YWx1ZSIgZm9yIHRoZSBtb2RlIHJlZ2lzdGVyLCB3aGljaCBpcworCSAgIHVzZWQgZm9yIHRoZSBpcnEgb24gdGhlIFBDTDcxMQorCSAqLworCWlmICh0aGlzX2JvYXJkLT5pc19wY2w3MTFiKSB7CisJCWRldnByaXYtPm1vZGUgPSAoZGV2LT5pcnEgPDwgNCk7CisJfQorCisJLyogY2xlYXIgREFDICovCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9EQTBfTE8pOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w3MTFfREEwX0hJKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX0RBMV9MTyk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9EQTFfSEkpOworCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxZTc4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjQuYwpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9wY2w3MjQuYworCisgICAgTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CisKKyAgICBoYXJkd2FyZSBkcml2ZXIgZm9yIEFkdmFudGVjaCBjYXJkczoKKyAgICAgY2FyZDogICBQQ0wtNzI0LCBQQ0wtNzIyLCBQQ0wtNzMxCisgICAgIGRyaXZlcjogcGNsNzI0LCAgcGNsNzIyLCAgcGNsNzMxCisgICAgYW5kIEFETGluayBjYXJkczoKKyAgICAgY2FyZDogICBBQ0wtNzEyMiwgQUNMLTcxMjQsIFBFVC00OERJTworICAgICBkcml2ZXI6IGFjbDcxMjIsICBhY2w3MTI0LCAgcGV0NDhkaW8KKworICAgIE9wdGlvbnMgZm9yIFBDTC03MjQsIFBDTC03MzEsIEFDTC03MTI0IGFuZCBQRVQtNDhESU86CisgICAgIFswXSAtIElPIEJhc2UKKworICAgIE9wdGlvbnMgZm9yIFBDTC03MjIgYW5kIEFDTC03MTIyOgorICAgICBbMF0gLSBJTyBCYXNlCisgICAgIFsxXSAtIElSUSAoMD1kaXNhYmxlIElSUSkgSVJRIGlzbid0IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUhCisgICAgIFsyXSAtbnVtYmVyIG9mIERJTzoKKyAgICAgICAgICAgICAgMCwgMTQ0OiAxNDQgRElPIGNvbmZpZ3VyYXRpb24KKwkgICAgICAxLCAgOTY6ICA5NiBESU8gY29uZmlndXJhdGlvbgorKi8KKy8qCitEcml2ZXI6IHBjbDcyNAorRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0wtNzI0LCBQQ0wtNzIyLCBQQ0wtNzMxIEFETGluayBBQ0wtNzEyMiwgQUNMLTcxMjQsCisgIFBFVC00OERJTworQXV0aG9yOiBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDTC03MjQgKHBjbDcyNCksIFBDTC03MjIgKHBjbDcyMiksIFBDTC03MzEgKHBjbDczMSksCisgIFtBRExpbmtdIEFDTC03MTIyIChhY2w3MTIyKSwgQUNMLTcxMjQgKGFjbDcxMjQpLCBQRVQtNDhESU8gKHBldDQ4ZGlvKQorU3RhdHVzOiB1bnRlc3RlZAorCitUaGlzIGlzIGRyaXZlciBmb3IgZGlnaXRhbCBJL08gYm9hcmRzIFBDTC03MjIvNzI0LzczMSB3aXRoIDE0NC8yNC80OCBESU8KK2FuZCBmb3IgZGlnaXRhbCBJL08gYm9hcmRzIEFDTC03MTIyLzcxMjQvUEVULTQ4RElPIHdpdGggMTQ0LzI0LzQ4IERJTy4KK0l0IG5lZWQgODI1NS5vIGZvciBvcGVyYXRpb25zIGFuZCBvbmx5IGltbWVkaWF0ZSBtb2RlIGlzIHN1cHBvcnRlZC4KK1NlZSB0aGUgc291cmNlIGZvciBjb25maWd1cmF0aW9uIGRldGFpbHMuCisqLworLyoKKyAqIGNoZWNrX2RyaXZlciBvdmVycmlkZXM6CisgKiAgIHN0cnVjdCBjb21lZGlfaW5zbgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICI4MjU1LmgiCisKKyNkZWZpbmUgUENMNzIyX1NJWkUgICAgMzIKKyNkZWZpbmUgUENMNzIyXzk2X1NJWkUgMTYKKyNkZWZpbmUgUENMNzI0X1NJWkUgICAgIDQKKyNkZWZpbmUgUENMNzMxX1NJWkUgICAgIDgKKyNkZWZpbmUgUEVUNDhfU0laRSAgICAgIDIKKworI2RlZmluZSBTSVpFXzgyNTUJNAorCisvLyAjZGVmaW5lIFBDTDcyNF9JUlEgICAxICAvKiBubyBJUlEgc3VwcG9ydCBub3cgKi8KKworc3RhdGljIGludCBwY2w3MjRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNsNzI0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0cnVjdCBwY2w3MjRfYm9hcmQgeworCisJY29uc3QgY2hhciAqbmFtZTsJLy8gYm9hcmQgbmFtZQorCWludCBkaW87CQkvLyBudW0gb2YgRElPCisJaW50IG51bW9mcG9ydHM7CQkvLyBudW0gb2YgODI1NSBzdWJkZXZpY2VzCisJdW5zaWduZWQgaW50IElSUWJpdHM7CS8vIGFsbG93ZWQgaW50ZXJydXB0cworCXVuc2lnbmVkIGludCBpb19yYW5nZTsJLy8gbGVuIG9mIElPIHNwYWNlCisJY2hhciBjYW5faGF2ZTk2OworCWNoYXIgaXNfcGV0NDg7Cit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNsNzI0X2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjbDcyNCIsIDI0LCAxLCAweDAwZmMsIFBDTDcyNF9TSVpFLCAwLCAwLH0sCisJeyJwY2w3MjIiLCAxNDQsIDYsIDB4MDBmYywgUENMNzIyX1NJWkUsIDEsIDAsfSwKKwl7InBjbDczMSIsIDQ4LCAyLCAweDljZmMsIFBDTDczMV9TSVpFLCAwLCAwLH0sCisJeyJhY2w3MTIyIiwgMTQ0LCA2LCAweDllZTgsIFBDTDcyMl9TSVpFLCAxLCAwLH0sCisJeyJhY2w3MTI0IiwgMjQsIDEsIDB4MDBmYywgUENMNzI0X1NJWkUsIDAsIDAsfSwKKwl7InBldDQ4ZGlvIiwgNDgsIDIsIDB4OWViOCwgUEVUNDhfU0laRSwgMCwgMSx9LAorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IHBjbDcyNF9ib2FyZCkpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNsNzI0X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNsNzI0ID0geworICAgICAgZHJpdmVyX25hbWU6InBjbDcyNCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNsNzI0X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2w3MjRfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbDcyNF9ib2FyZCksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbDcyNCk7CisKK3N0YXRpYyBpbnQgc3ViZGV2XzgyNTVfY2IoaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bnNpZ25lZCBsb25nIGlvYmFzZSA9IGFyZzsKKworCWlmIChkaXIpIHsKKwkJb3V0YihkYXRhLCBpb2Jhc2UgKyBwb3J0KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGluYihpb2Jhc2UgKyBwb3J0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3ViZGV2XzgyNTVtYXBwZWRfY2IoaW50IGRpciwgaW50IHBvcnQsIGludCBkYXRhLAorCXVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCWludCBtb3Zwb3J0ID0gU0laRV84MjU1ICogKGlvYmFzZSA+PiAxMik7CisKKwlpb2Jhc2UgJj0gMHgwZmZmOworCisJaWYgKGRpcikgeworCQlvdXRiKHBvcnQgKyBtb3Zwb3J0LCBpb2Jhc2UpOworCQlvdXRiKGRhdGEsIGlvYmFzZSArIDEpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlvdXRiKHBvcnQgKyBtb3Zwb3J0LCBpb2Jhc2UpOworCQlyZXR1cm4gaW5iKGlvYmFzZSArIDEpOworCX0KK30KKworc3RhdGljIGludCBwY2w3MjRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpb3JhbmdlOworCWludCByZXQsIGksIG5fc3ViZGV2aWNlczsKKyNpZmRlZiBQQ0w3MjRfSVJRCisJdW5zaWduZWQgaW50IGlycTsKKyNlbmRpZgorCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJaW9yYW5nZSA9IHRoaXNfYm9hcmQtPmlvX3JhbmdlOworCWlmICgodGhpc19ib2FyZC0+Y2FuX2hhdmU5NikgJiYgKChpdC0+b3B0aW9uc1sxXSA9PSAxKQorCQkJfHwgKGl0LT5vcHRpb25zWzFdID09IDk2KSkpCisJCWlvcmFuZ2UgPSBQQ0w3MjJfOTZfU0laRTsJLy8gUENMLTcyNCBpbiA5NiBESU8gY29uZmlndXJhdGlvbgorCXByaW50aygiY29tZWRpJWQ6IHBjbDcyNDogYm9hcmQ9JXMsIDB4JTAzbHggIiwgZGV2LT5taW5vciwKKwkJdGhpc19ib2FyZC0+bmFtZSwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgaW9yYW5nZSwgInBjbDcyNCIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisKKyNpZmRlZiBQQ0w3MjRfSVJRCisJaXJxID0gMDsKKwlpZiAodGhpc19ib2FyZC0+SVJRYml0cyAhPSAwKSB7CS8qIGJvYXJkIHN1cHBvcnQgSVJRICovCisJCWlycSA9IGl0LT5vcHRpb25zWzFdOworCQlpZiAoaXJxKSB7CS8qIHdlIHdhbnQgdG8gdXNlIElSUSAqLworCQkJaWYgKCgoMSA8PCBpcnEpICYgdGhpc19ib2FyZC0+SVJRYml0cykgPT0gMCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIiwgSVJRICV1IGlzIG91dCBvZiBhbGxvd2VkIHJhbmdlLCBESVNBQkxJTkcgSVQiLAorCQkJCQlpcnEpOworCQkJCWlycSA9IDA7CS8qIEJhZCBJUlEgKi8KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGludGVycnVwdF9wY2w3MjQsIDAsCisJCQkJCQkicGNsNzI0IiwgZGV2KSkgeworCQkJCQlydF9wcmludGsKKwkJCQkJCSgiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1LCBESVNBQkxJTkcgSVQiLAorCQkJCQkJaXJxKTsKKwkJCQkJaXJxID0gMDsJLyogQ2FuJ3QgdXNlIElSUSAqLworCQkJCX0gZWxzZSB7CisJCQkJCXJ0X3ByaW50aygiLCBpcnE9JXUiLCBpcnEpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWRldi0+aXJxID0gaXJxOworI2VuZGlmCisKKwlwcmludGsoIlxuIik7CisKKwluX3N1YmRldmljZXMgPSB0aGlzX2JvYXJkLT5udW1vZnBvcnRzOworCWlmICgodGhpc19ib2FyZC0+Y2FuX2hhdmU5NikgJiYgKChpdC0+b3B0aW9uc1sxXSA9PSAxKQorCQkJfHwgKGl0LT5vcHRpb25zWzFdID09IDk2KSkpCisJCW5fc3ViZGV2aWNlcyA9IDQ7CS8vIFBDTC03MjQgaW4gOTYgRElPIGNvbmZpZ3VyYXRpb24KKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CisJCWlmICh0aGlzX2JvYXJkLT5pc19wZXQ0OCkgeworCQkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGksCisJCQkJc3ViZGV2XzgyNTVtYXBwZWRfY2IsCisJCQkJKHVuc2lnbmVkIGxvbmcpKGRldi0+aW9iYXNlICsgaSAqIDB4MTAwMCkpOworCQl9IGVsc2UKKwkJCXN1YmRldl84MjU1X2luaXQoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBpLAorCQkJCXN1YmRldl84MjU1X2NiLAorCQkJCSh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArIFNJWkVfODI1NSAqIGkpKTsKKwl9OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNsNzI0X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKworLy8gICAgICBwcmludGsoImNvbWVkaSVkOiBwY2w3MjQ6IHJlbW92ZVxuIixkZXYtPm1pbm9yKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKSB7CisJCXN1YmRldl84MjU1X2NsZWFudXAoZGV2LCBkZXYtPnN1YmRldmljZXMgKyBpKTsKKwl9CisKKyNpZmRlZiBQQ0w3MjRfSVJRCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisjZW5kaWYKKworCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzX2JvYXJkLT5pb19yYW5nZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzY2YmEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNS5jCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogY29tZWRpL2RyaXZlcnMvcGNsNzI1LmMKKyAqIERyaXZlciBmb3IgUENMNzI1IGFuZCBjbG9uZXMKKyAqIERhdmlkIEEuIFNjaGxlZWYKKyAqLworLyoKK0RyaXZlcjogcGNsNzI1CitEZXNjcmlwdGlvbjogQWR2YW50ZWNoIFBDTC03MjUgKCYgY29tcGF0aWJsZXMpCitBdXRob3I6IGRzCitTdGF0dXM6IHVua25vd24KK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDTC03MjUgKHBjbDcyNSkKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIFBDTDcyNV9TSVpFIDIKKworI2RlZmluZSBQQ0w3MjVfRE8gMAorI2RlZmluZSBQQ0w3MjVfREkgMQorCitzdGF0aWMgaW50IHBjbDcyNV9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2w3MjVfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNsNzI1ID0geworICAgICAgZHJpdmVyX25hbWU6InBjbDcyNSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNsNzI1X2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2w3MjVfZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w3MjUpOworCitzdGF0aWMgaW50IHBjbDcyNV9kb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQlvdXRiKHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArIFBDTDcyNV9ETyk7CisJfQorCisJZGF0YVsxXSA9IHMtPnN0YXRlOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgcGNsNzI1X2RpX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIFBDTDcyNV9ESSk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBwY2w3MjVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogcGNsNzI1OiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFBDTDcyNV9TSVpFLCAicGNsNzI1IikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmJvYXJkX25hbWUgPSAicGNsNzI1IjsKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmlycSA9IDA7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBkbyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX2JpdHMgPSBwY2w3MjVfZG9faW5zbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJLyogZGkgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gcGNsNzI1X2RpX2luc247CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbDcyNV9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNsNzI1OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUENMNzI1X1NJWkUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiZDMzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjYuYwpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9wY2w3MjYuYworCisgICAgaGFyZHdhcmUgZHJpdmVyIGZvciBBZHZhbnRlY2ggY2FyZHM6CisgICAgIGNhcmQ6ICAgUENMLTcyNiwgUENMLTcyNywgUENMLTcyOAorICAgICBkcml2ZXI6IHBjbDcyNiwgIHBjbDcyNywgIHBjbDcyOAorICAgIGFuZCBmb3IgQURMaW5rIGNhcmRzOgorICAgICBjYXJkOiAgIEFDTC02MTI2LCBBQ0wtNjEyOAorICAgICBkcml2ZXI6IGFjbDYxMjYsICBhY2w2MTI4CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBwY2w3MjYKK0Rlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENMLTcyNiAmIGNvbXBhdGlibGVzCitBdXRob3I6IGRzCitTdGF0dXM6IHVudGVzdGVkCitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtNzI2IChwY2w3MjYpLCBQQ0wtNzI3IChwY2w3MjcpLCBQQ0wtNzI4IChwY2w3MjgpLAorICBbQURMaW5rXSBBQ0wtNjEyNiAoYWNsNjEyNiksIEFDTC02MTI4IChhY2w2MTI4KQorCitJbnRlcnJ1cHRzIGFyZSBub3Qgc3VwcG9ydGVkLgorCisgICAgT3B0aW9ucyBmb3IgUENMLTcyNjoKKyAgICAgWzBdIC0gSU8gQmFzZQorICAgICBbMl0uLi5bN10gLSBEL0Egb3V0cHV0IHJhbmdlIGZvciBjaGFubmVsIDEtNjoKKyAgICAgICAgICAgICAgIDA6IDAtNVYsIDE6IDAtMTBWLCAyOiArLy01ViwgMzogKy8tMTBWLAorCSAgICAgICA0OiA0LTIwbUEsIDU6IHVua25vd24gKGV4dGVybmFsIHJlZmVyZW5jZSkKKworICAgIE9wdGlvbnMgZm9yIFBDTC03Mjc6CisgICAgIFswXSAtIElPIEJhc2UKKyAgICAgWzJdLi4uWzEzXSAtIEQvQSBvdXRwdXQgcmFuZ2UgZm9yIGNoYW5uZWwgMS0xMjoKKyAgICAgICAgICAgICAgIDA6IDAtNVYsIDE6IDAtMTBWLCAyOiArLy01ViwKKwkgICAgICAgMzogNC0yMG1BCisKKyAgICBPcHRpb25zIGZvciBQQ0wtNzI4IGFuZCBBQ0wtNjEyODoKKyAgICAgWzBdIC0gSU8gQmFzZQorICAgICBbMl0sIFszXSAtIEQvQSBvdXRwdXQgcmFuZ2UgZm9yIGNoYW5uZWwgMSBhbmQgMjoKKyAgICAgICAgICAgICAgIDA6IDAtNVYsIDE6IDAtMTBWLCAyOiArLy01ViwgMzogKy8tMTBWLAorCSAgICAgICA0OiA0LTIwbUEsIDU6IDAtMjBtQQorCisgICAgT3B0aW9ucyBmb3IgQUNMLTYxMjY6CisgICAgIFswXSAtIElPIEJhc2UKKyAgICAgWzFdIC0gSVJRICgwPWRpc2FibGUsIDMsIDUsIDYsIDcsIDksIDEwLCAxMSwgMTIsIDE1KSAoY3VycmVudGx5IGlnbm9yZWQpCisgICAgIFsyXS4uLls3XSAtIEQvQSBvdXRwdXQgcmFuZ2UgZm9yIGNoYW5uZWwgMS02OgorICAgICAgICAgICAgICAgMDogMC01ViwgMTogMC0xMFYsIDI6ICsvLTVWLCAzOiArLy0xMFYsCisJICAgICAgIDQ6IDQtMjBtQQorKi8KKworLyoKKyAgICBUaGFua3MgdG8gQ2lyY3VpdCBTcGVjaWFsaXN0cyBmb3IgaGF2aW5nIHByb2dyYW1taW5nIGluZm8gKCEpIG9uCisgICAgdGhlaXIgd2ViIHBhZ2UuICAoaHR0cDovL3d3dy5jaXIuY29tLykKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjdW5kZWYgQUNMNjEyNl9JUlEJCS8qIG5vIGludGVycnVwdCBzdXBwb3J0ICh5ZXQpICovCisKKyNkZWZpbmUgUENMNzI2X1NJWkUgMTYKKyNkZWZpbmUgUENMNzI3X1NJWkUgMzIKKyNkZWZpbmUgUENMNzI4X1NJWkUgOAorCisjZGVmaW5lIFBDTDcyNl9EQUMwX0hJIDAKKyNkZWZpbmUgUENMNzI2X0RBQzBfTE8gMQorCisjZGVmaW5lIFBDTDcyNl9ET19ISSAxMgorI2RlZmluZSBQQ0w3MjZfRE9fTE8gMTMKKyNkZWZpbmUgUENMNzI2X0RJX0hJIDE0CisjZGVmaW5lIFBDTDcyNl9ESV9MTyAxNQorCisjZGVmaW5lIFBDTDcyN19ET19ISSAyNAorI2RlZmluZSBQQ0w3MjdfRE9fTE8gMjUKKyNkZWZpbmUgUENMNzI3X0RJX0hJICAwCisjZGVmaW5lIFBDTDcyN19ESV9MTyAgMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfNF8yMG1BID0geyAxLCB7UkFOR0VfbUEoNCwgMjApfSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlXzBfMjBtQSA9IHsgMSwge1JBTkdFX21BKDAsIDIwKX0gfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpjb25zdCByYW5nZWxpc3RfNzI2W10gPSB7CisJJnJhbmdlX3VuaXBvbGFyNSwgJnJhbmdlX3VuaXBvbGFyMTAsCisJJnJhbmdlX2JpcG9sYXI1LCAmcmFuZ2VfYmlwb2xhcjEwLAorCSZyYW5nZV80XzIwbUEsICZyYW5nZV91bmtub3duCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmNvbnN0IHJhbmdlbGlzdF83MjdbXSA9IHsKKwkmcmFuZ2VfdW5pcG9sYXI1LCAmcmFuZ2VfdW5pcG9sYXIxMCwKKwkmcmFuZ2VfYmlwb2xhcjUsCisJJnJhbmdlXzRfMjBtQQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpjb25zdCByYW5nZWxpc3RfNzI4W10gPSB7CisJJnJhbmdlX3VuaXBvbGFyNSwgJnJhbmdlX3VuaXBvbGFyMTAsCisJJnJhbmdlX2JpcG9sYXI1LCAmcmFuZ2VfYmlwb2xhcjEwLAorCSZyYW5nZV80XzIwbUEsICZyYW5nZV8wXzIwbUEKK307CisKK3N0YXRpYyBpbnQgcGNsNzI2X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbDcyNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdHJ1Y3QgcGNsNzI2X2JvYXJkIHsKKworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGRyaXZlciBuYW1lCisJaW50IG5fYW9jaGFuOwkJLy8gbnVtIG9mIEQvQSBjaGFucworCWludCBudW1fb2ZfcmFuZ2VzOwkvLyBudW0gb2YgcmFuZ2VzCisJdW5zaWduZWQgaW50IElSUWJpdHM7CS8vIGFsbG93ZWQgaW50ZXJydXB0cworCXVuc2lnbmVkIGludCBpb19yYW5nZTsJLy8gbGVuIG9mIElPIHNwYWNlCisJY2hhciBoYXZlX2RpbzsJCS8vIDE9Y2FyZCBoYXZlIERJL0RPIHBvcnRzCisJaW50IGRpX2hpOwkJLy8gcG9ydHMgZm9yIERJL0RPIG9wZXJhdGlvbnMKKwlpbnQgZGlfbG87CisJaW50IGRvX2hpOworCWludCBkb19sbzsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqY29uc3QgKnJhbmdlX3R5cGVfbGlzdDsJLy8gbGlzdCBvZiBzdXBwb3J0ZWQgcmFuZ2VzCit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNsNzI2X2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjbDcyNiIsIDYsIDYsIDB4MDAwMCwgUENMNzI2X1NJWkUsIDEsCisJCQlQQ0w3MjZfRElfSEksIFBDTDcyNl9ESV9MTywgUENMNzI2X0RPX0hJLCBQQ0w3MjZfRE9fTE8sCisJCSZyYW5nZWxpc3RfNzI2WzBdLH0sCisJeyJwY2w3MjciLCAxMiwgNCwgMHgwMDAwLCBQQ0w3MjdfU0laRSwgMSwKKwkJCVBDTDcyN19ESV9ISSwgUENMNzI3X0RJX0xPLCBQQ0w3MjdfRE9fSEksIFBDTDcyN19ET19MTywKKwkJJnJhbmdlbGlzdF83MjdbMF0sfSwKKwl7InBjbDcyOCIsIDIsIDYsIDB4MDAwMCwgUENMNzI4X1NJWkUsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkmcmFuZ2VsaXN0XzcyOFswXSx9LAorCXsiYWNsNjEyNiIsIDYsIDUsIDB4OTZlOCwgUENMNzI2X1NJWkUsIDEsCisJCQlQQ0w3MjZfRElfSEksIFBDTDcyNl9ESV9MTywgUENMNzI2X0RPX0hJLCBQQ0w3MjZfRE9fTE8sCisJCSZyYW5nZWxpc3RfNzI2WzBdLH0sCisJeyJhY2w2MTI4IiwgMiwgNiwgMHgwMDAwLCBQQ0w3MjhfU0laRSwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCSZyYW5nZWxpc3RfNzI4WzBdLH0sCit9OworCisjZGVmaW5lIG5fYm9hcmR0eXBlcyAoc2l6ZW9mKGJvYXJkdHlwZXMpL3NpemVvZihzdHJ1Y3QgcGNsNzI2X2JvYXJkKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBwY2w3MjZfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2w3MjYgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNsNzI2IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2w3MjZfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbDcyNl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6bl9ib2FyZHR5cGVzLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgcGNsNzI2X2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNsNzI2KTsKKworc3RydWN0IHBjbDcyNl9wcml2YXRlIHsKKworCWludCBiaXBvbGFyWzEyXTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0WzEyXTsKKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMTJdOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbDcyNl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IHBjbDcyNl9hb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaGksIGxvOworCWludCBuOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWxvID0gZGF0YVtuXSAmIDB4ZmY7CisJCWhpID0gKGRhdGFbbl0gPj4gOCkgJiAweGY7CisJCWlmIChkZXZwcml2LT5iaXBvbGFyW2NoYW5dKQorCQkJaGkgXj0gMHg4OworCQkvKgorCQkgKiB0aGUgcHJvZ3JhbW1pbmcgaW5mbyBkaWQgbm90IHNheSB3aGljaCBvcmRlcgorCQkgKiB0byB3cml0ZSBieXRlcy4gIHN3aXRjaCB0aGUgb3JkZXIgb2YgdGhlIG5leHQKKwkJICogdHdvIGxpbmVzIGlmIHlvdSBnZXQgZ2xpdGNoZXMuCisJCSAqLworCQlvdXRiKGhpLCBkZXYtPmlvYmFzZSArIFBDTDcyNl9EQUMwX0hJICsgMiAqIGNoYW4pOworCQlvdXRiKGxvLCBkZXYtPmlvYmFzZSArIFBDTDcyNl9EQUMwX0xPICsgMiAqIGNoYW4pOworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbbl07CisJfQorCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgcGNsNzI2X2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwlpbnQgbjsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJZGF0YVtuXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBwY2w3MjZfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyB0aGlzX2JvYXJkLT5kaV9sbykgfAorCQkoaW5iKGRldi0+aW9iYXNlICsgdGhpc19ib2FyZC0+ZGlfaGkpIDw8IDgpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgcGNsNzI2X2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJfQorCWlmIChkYXRhWzFdICYgMHgwMGZmKQorCQlvdXRiKHMtPnN0YXRlICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyB0aGlzX2JvYXJkLT5kb19sbyk7CisJaWYgKGRhdGFbMV0gJiAweGZmMDApCisJCW91dGIoKHMtPnN0YXRlID4+IDgpLCBkZXYtPmlvYmFzZSArIHRoaXNfYm9hcmQtPmRvX2hpKTsKKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHBjbDcyNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlvcmFuZ2U7CisJaW50IHJldCwgaTsKKyNpZmRlZiBBQ0w2MTI2X0lSUQorCXVuc2lnbmVkIGludCBpcnE7CisjZW5kaWYKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlvcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKKwlwcmludGsoImNvbWVkaSVkOiBwY2w3MjY6IGJvYXJkPSVzLCAweCUwM2x4ICIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIGlvcmFuZ2UsICJwY2w3MjYiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2w3MjZfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKKwkJZGV2cHJpdi0+Ymlwb2xhcltpXSA9IDA7CisJCWRldnByaXYtPnJhbmdlbGlzdFtpXSA9ICZyYW5nZV91bmtub3duOworCX0KKworI2lmZGVmIEFDTDYxMjZfSVJRCisJaXJxID0gMDsKKwlpZiAoYm9hcmR0eXBlc1tib2FyZF0uSVJRYml0cyAhPSAwKSB7CS8qIGJvYXJkIHN1cHBvcnQgSVJRICovCisJCWlycSA9IGl0LT5vcHRpb25zWzFdOworCQlkZXZwcml2LT5maXJzdF9jaGFuID0gMjsKKwkJaWYgKGlycSkgewkvKiB3ZSB3YW50IHRvIHVzZSBJUlEgKi8KKwkJCWlmICgoKDEgPDwgaXJxKSAmIGJvYXJkdHlwZXNbYm9hcmRdLklSUWJpdHMpID09IDApIHsKKwkJCQlydF9wcmludGsKKwkJCQkJKCIsIElSUSAlZCBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRElTQUJMSU5HIElUIiwKKwkJCQkJaXJxKTsKKwkJCQlpcnEgPSAwOwkvKiBCYWQgSVJRICovCisJCQl9IGVsc2UgeworCQkJCWlmIChjb21lZGlfcmVxdWVzdF9pcnEoaXJxLCBpbnRlcnJ1cHRfcGNsODE4LCAwLAorCQkJCQkJInBjbDcyNiIsIGRldikpIHsKKwkJCQkJcnRfcHJpbnRrCisJCQkJCQkoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIElSUSAlZCwgRElTQUJMSU5HIElUIiwKKwkJCQkJCWlycSk7CisJCQkJCWlycSA9IDA7CS8qIENhbid0IHVzZSBJUlEgKi8KKwkJCQl9IGVsc2UgeworCQkJCQlydF9wcmludGsoIiwgaXJxPSVkIiwgaXJxKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlkZXYtPmlycSA9IGlycTsKKyNlbmRpZgorCisJcHJpbnRrKCJcbiIpOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgMykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCS8qIGFvICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQ7CisJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9hb2NoYW47CisJcy0+bWF4ZGF0YSA9IDB4ZmZmOworCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJcy0+aW5zbl93cml0ZSA9IHBjbDcyNl9hb19pbnNuOworCXMtPmluc25fcmVhZCA9IHBjbDcyNl9hb19pbnNuX3JlYWQ7CisJcy0+cmFuZ2VfdGFibGVfbGlzdCA9IGRldnByaXYtPnJhbmdlbGlzdDsKKwlmb3IgKGkgPSAwOyBpIDwgdGhpc19ib2FyZC0+bl9hb2NoYW47IGkrKykgeworCQlpbnQgajsKKworCQlqID0gaXQtPm9wdGlvbnNbMiArIDFdOworCQlpZiAoKGogPCAwKSB8fCAoaiA+PSB0aGlzX2JvYXJkLT5udW1fb2ZfcmFuZ2VzKSkgeworCQkJcHJpbnRrKCJJbnZhbGlkIHJhbmdlIGZvciBjaGFubmVsICVkISBNdXN0IGJlIDA8PSVkPCVkXG4iLCBpLCBqLCB0aGlzX2JvYXJkLT5udW1fb2ZfcmFuZ2VzIC0gMSk7CisJCQlqID0gMDsKKwkJfQorCQlkZXZwcml2LT5yYW5nZWxpc3RbaV0gPSB0aGlzX2JvYXJkLT5yYW5nZV90eXBlX2xpc3Rbal07CisJCWlmIChkZXZwcml2LT5yYW5nZWxpc3RbaV0tPnJhbmdlWzBdLm1pbiA9PQorCQkJLWRldnByaXYtPnJhbmdlbGlzdFtpXS0+cmFuZ2VbMF0ubWF4KQorCQkJZGV2cHJpdi0+Ymlwb2xhcltpXSA9IDE7CS8qIGJpcG9sYXIgcmFuZ2UgKi8KKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvKiBkaSAqLworCWlmICghdGhpc19ib2FyZC0+aGF2ZV9kaW8pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJCXMtPm5fY2hhbiA9IDE2OworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwkJcy0+aW5zbl9iaXRzID0gcGNsNzI2X2RpX2luc25fYml0czsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwl9CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwkvKiBkbyAqLworCWlmICghdGhpc19ib2FyZC0+aGF2ZV9kaW8pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQ7CisJCXMtPm5fY2hhbiA9IDE2OworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwkJcy0+aW5zbl9iaXRzID0gcGNsNzI2X2RvX2luc25fYml0czsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY2w3MjZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworLy8gICAgICBwcmludGsoImNvbWVkaSVkOiBwY2w3MjY6IHJlbW92ZVxuIixkZXYtPm1pbm9yKTsKKworI2lmZGVmIEFDTDYxMjZfSVJRCisJaWYgKGRldi0+aXJxKSB7CisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwl9CisjZW5kaWYKKworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNfYm9hcmQtPmlvX3JhbmdlKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDczMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDczMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYzZkN2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzMwLmMKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBjb21lZGkvZHJpdmVycy9wY2w3MzAuYworICogRHJpdmVyIGZvciBBZHZhbnRlY2ggUENMLTczMCBhbmQgY2xvbmVzCisgKiBKb3PDqSBMdWlzIFPDoW5jaGV6CisgKi8KKy8qCitEcml2ZXI6IHBjbDczMAorRGVzY3JpcHRpb246IEFkdmFudGVjaCBQQ0wtNzMwICgmIGNvbXBhdGlibGVzKQorQXV0aG9yOiBKb3PDqSBMdWlzIFPDoW5jaGV6IChqc2FuY2hlenZAdGVsZWxpbmUuZXMpCitTdGF0dXM6IHVudGVzdGVkCitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtNzMwIChwY2w3MzApLCBbSUNQXSBJU08tNzMwIChpc283MzApLAorCQkgW0FkbGlua10gQUNMLTcxMzAgKGFjbDcxMzApCisKK0ludGVycnVwdHMgYXJlIG5vdCBzdXBwb3J0ZWQuCitUaGUgQUNMLTcxMzAgY2FyZCBoYXZlIGFuIDgyNTQgdGltZXIvY291bnRlciBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNkZWZpbmUgUENMNzMwX1NJWkUJCTQKKyNkZWZpbmUgQUNMNzEzMF9TSVpFCTgKKyNkZWZpbmUgUENMNzMwX0lESU9fTE8JMAkvKiBJc29sYXRlZCBEaWdpdGFsIEkvTyBsb3cgYnl0ZSAoSUQwLUlENykgKi8KKyNkZWZpbmUgUENMNzMwX0lESU9fSEkJMQkvKiBJc29sYXRlZCBEaWdpdGFsIEkvTyBoaWdoIGJ5dGUgKElEOC1JRDE1KSAqLworI2RlZmluZSBQQ0w3MzBfRElPX0xPCTIJLyogVFRMIERpZ2l0YWwgSS9PIGxvdyBieXRlIChEMC1ENykgKi8KKyNkZWZpbmUgUENMNzMwX0RJT19ISQkzCS8qIFRUTCBEaWdpdGFsIEkvTyBoaWdoIGJ5dGUgKEQ4LUQxNSkgKi8KKworc3RhdGljIGludCBwY2w3MzBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNsNzMwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0cnVjdCBwY2w3MzBfYm9hcmQgeworCisJY29uc3QgY2hhciAqbmFtZTsJLy8gYm9hcmQgbmFtZQorCXVuc2lnbmVkIGludCBpb19yYW5nZTsJLy8gbGVuIG9mIEkvTyBzcGFjZQorfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbDczMF9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeyJwY2w3MzAiLCBQQ0w3MzBfU0laRSx9LAorCXsiaXNvNzMwIiwgUENMNzMwX1NJWkUsfSwKKwl7ImFjbDcxMzAiLCBBQ0w3MTMwX1NJWkUsfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBwY2w3MzBfYm9hcmQpKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbDczMF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjbDczMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJwY2w3MzAiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbDczMF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNsNzMwX2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwY2w3MzBfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w3MzApOworCitzdGF0aWMgaW50IHBjbDczMF9kb19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCX0KKwlpZiAoZGF0YVswXSAmIDB4MDBmZikKKwkJb3V0YihzLT5zdGF0ZSAmIDB4ZmYsCisJCQlkZXYtPmlvYmFzZSArICgodW5zaWduZWQgbG9uZylzLT5wcml2YXRlKSk7CisJaWYgKGRhdGFbMF0gJiAweGZmMDApCisJCW91dGIoKHMtPnN0YXRlID4+IDgpLAorCQkJZGV2LT5pb2Jhc2UgKyAoKHVuc2lnbmVkIGxvbmcpcy0+cHJpdmF0ZSkgKyAxKTsKKworCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHBjbDczMF9kaV9pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyAoKHVuc2lnbmVkIGxvbmcpcy0+cHJpdmF0ZSkpIHwKKwkJKGluYihkZXYtPmlvYmFzZSArICgodW5zaWduZWQgbG9uZylzLT5wcml2YXRlKSArIDEpIDw8IDgpOworCisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyBpbnQgcGNsNzMwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaW9yYW5nZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlvcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKKwlwcmludGsoImNvbWVkaSVkOiBwY2w3MzA6IGJvYXJkPSVzIDB4JTA0bHggIiwgZGV2LT5taW5vciwKKwkJdGhpc19ib2FyZC0+bmFtZSwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgaW9yYW5nZSwgInBjbDczMCIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlkZXYtPmlycSA9IDA7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBJc29sYXRlZCBkbyAqLworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gMTY7CisJcy0+aW5zbl9iaXRzID0gcGNsNzMwX2RvX2luc247CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilQQ0w3MzBfSURJT19MTzsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIElzb2xhdGVkIGRpICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5pbnNuX2JpdHMgPSBwY2w3MzBfZGlfaW5zbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKVBDTDczMF9JRElPX0xPOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogVFRMIGRvICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSAxNjsKKwlzLT5pbnNuX2JpdHMgPSBwY2w3MzBfZG9faW5zbjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKVBDTDczMF9ESU9fTE87CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMzsKKwkvKiBUVEwgZGkgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDE2OworCXMtPmluc25fYml0cyA9IHBjbDczMF9kaV9pbnNuOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+cHJpdmF0ZSA9ICh2b2lkICopUENMNzMwX0RJT19MTzsKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbDczMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNsNzMwOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkZmQyMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTIuYwpAQCAtMCwwICsxLDE2MDUgQEAKKy8qCisgKiBjb21lZGkvZHJpdmVycy9wY2w4MTIuYworICoKKyAqIEF1dGhvcjogTWljaGFsIERvYmVzIDxkb2Jlc0B0ZXNuZXQuY3o+CisgKgorICogaGFyZHdhcmUgZHJpdmVyIGZvciBBZHZhbnRlY2ggY2FyZHMKKyAqICBjYXJkOiAgIFBDTC04MTIsIFBDTC04MTJQRywgUENMLTgxMywgUENMLTgxM0IKKyAqICBkcml2ZXI6IHBjbDgxMiwgIHBjbDgxMnBnLCAgcGNsODEzLCAgcGNsODEzYgorICogYW5kIGZvciBBRGxpbmsgY2FyZHMKKyAqICBjYXJkOiAgIEFDTC04MTEyREcsIEFDTC04MTEySEcsIEFDTC04MTEyUEcsIEFDTC04MTEzLCBBQ0wtODIxNgorICogIGRyaXZlcjogYWNsODExMmRnLCAgYWNsODExMmhnLCAgYWNsODExMnBnLCAgYWNsODExMywgIGFjbDgyMTYKKyAqIGFuZCBmb3IgSUNQIERBUyBjYXJkcworICogIGNhcmQ6ICAgSVNPLTgxMywgQS04MjFQR0gsIEEtODIxUEdMLCBBLTgyMVBHTC1OREEsIEEtODIyUEdILCBBLTgyMlBHTCwKKyAqICBkcml2ZXI6IGlzbzgxMywgIGE4MjFwZ2gsICBhLTgyMXBnbCwgYS04MjFwZ2xuZGEsICBhODIycGdoLCAgYTgyMnBnbCwKKyAqICBjYXJkOiAgIEEtODIzUEdILCBBLTgyM1BHTCwgQS04MjZQRworICogZHJpdmVyOiAgYTgyM3BnaCwgIGE4MjNwZ2wsICBhODI2cGcKKyAqLworLyoKK0RyaXZlcjogcGNsODEyCitEZXNjcmlwdGlvbjogQWR2YW50ZWNoIFBDTC04MTIvUEcsIFBDTC04MTMvQiwKKyAgICAgICAgICAgICBBRExpbmsgQUNMLTgxMTJERy9IRy9QRywgQUNMLTgxMTMsIEFDTC04MjE2LAorICAgICAgICAgICAgIElDUCBEQVMgQS04MjFQR0gvUEdML1BHTC1OREEsIEEtODIyUEdIL1BHTCwgQS04MjNQR0gvUEdMLCBBLTgyNlBHLAorICAgICAgICAgICAgIElDUCBEQVMgSVNPLTgxMworQXV0aG9yOiBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDTC04MTIgKHBjbDgxMiksIFBDTC04MTJQRyAocGNsODEycGcpLAorICBQQ0wtODEzIChwY2w4MTMpLCBQQ0wtODEzQiAocGNsODEzYiksIFtBRExpbmtdIEFDTC04MTEyREcgKGFjbDgxMTJkZyksCisgIEFDTC04MTEySEcgKGFjbDgxMTJoZyksIEFDTC04MTEzIChhY2wtODExMyksIEFDTC04MjE2IChhY2w4MjE2KSwKKyAgW0lDUF0gSVNPLTgxMyAoaXNvODEzKSwgQS04MjFQR0ggKGE4MjFwZ2gpLCBBLTgyMVBHTCAoYTgyMXBnbCksCisgIEEtODIxUEdMLU5EQSAoYTgyMXBjbG5kYSksIEEtODIyUEdIIChhODIycGdoKSwgQS04MjJQR0wgKGE4MjJwZ2wpLAorICBBLTgyM1BHSCAoYTgyM3BnaCksIEEtODIzUEdMIChhODIzcGdsKSwgQS04MjZQRyAoYTgyNnBnKQorVXBkYXRlZDogTW9uLCAwNiBBdWcgMjAwNyAxMjowMzoxNSArMDEwMAorU3RhdHVzOiB3b3JrcyAoSSBob3BlLiBNeSBib2FyZCBmaXJlIHVwIHVuZGVyIG15IGhhbmRzCisgICAgICAgICAgICAgICBhbmQgSSBjYW5uJ3QgdGVzdCBhbGwgZmVhdHVyZXMuKQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBpbnNuIGFuZCBjbWQgaW50ZXJmYWNlcy4gU29tZSBib2FyZHMgc3VwcG9ydCBvbmx5IGluc24KK2JlY291c2UgdGhlaXIgaGFyZHdhcmUgZG9uJ3QgYWxsb3cgbW9yZSAoUENMLTgxMy9CLCBBQ0wtODExMywgSVNPLTgxMykuCitEYXRhIHRyYW5zZmVyIG92ZXIgRE1BIGlzIHN1cHBvcnRlZCBvbmx5IHdoZW4geW91IG1lYXN1cmUgb25seSBvbmUKK2NoYW5uZWwsIHRoaXMgaXMgdG9vIGhhcmR3YXJlIGxpbWl0YXRpb24gb2YgdGhlc2UgYm9hcmRzLgorCitPcHRpb25zIGZvciBQQ0wtODEyOgorICBbMF0gLSBJTyBCYXNlCisgIFsxXSAtIElSUSAgKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNzsgMTAsIDExLCAxMiwgMTQsIDE1KQorICBbMl0gLSBETUEgICgwPWRpc2FibGUsIDEsIDMpCisgIFszXSAtIDA9dHJpZ2dlciBzb3VyY2UgaXMgaW50ZXJuYWwgODI1MyB3aXRoIDJNSHogY2xvY2sKKyAgICAgICAgMT10cmlnZ2VyIHNvdXJjZSBpcyBleHRlcm5hbAorICBbNF0gLSAwPUEvRCBpbnB1dCByYW5nZSBpcyArLy0xMFYKKyAgICAgICAgMT1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tNVYKKyAgICAgICAgMj1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMi41VgorICAgICAgICAzPUEvRCBpbnB1dCByYW5nZSBpcyArLy0xLjI1VgorICAgICAgICA0PUEvRCBpbnB1dCByYW5nZSBpcyArLy0wLjYyNVYKKyAgICAgICAgNT1BL0QgaW5wdXQgcmFuZ2UgaXMgKy8tMC4zMTI1VgorICBbNV0gLSAwPUQvQSBvdXRwdXRzIDAtNVYgIChpbnRlcm5hbCByZWZlcmVuY2UgLTVWKQorICAgICAgICAxPUQvQSBvdXRwdXRzIDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKyAgICAgICAgMj1EL0Egb3V0cHV0cyB1bmtub3cgKGV4dGVybmFsIHJlZmVyZW5jZSkKKworT3B0aW9ucyBmb3IgUENMLTgxMlBHLCBBQ0wtODExMlBHOgorICBbMF0gLSBJTyBCYXNlCisgIFsxXSAtIElSUSAgKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNzsgMTAsIDExLCAxMiwgMTQsIDE1KQorICBbMl0gLSBETUEgICgwPWRpc2FibGUsIDEsIDMpCisgIFszXSAtIDA9dHJpZ2dlciBzb3VyY2UgaXMgaW50ZXJuYWwgODI1MyB3aXRoIDJNSHogY2xvY2sKKyAgICAgICAgMT10cmlnZ2VyIHNvdXJjZSBpcyBleHRlcm5hbAorICBbNF0gLSAwPUEvRCBoYXZlIG1heCArLy01ViBpbnB1dAorICAgICAgICAxPUEvRCBoYXZlIG1heCArLy0xMFYgaW5wdXQKKyAgWzVdIC0gMD1EL0Egb3V0cHV0cyAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAgICAgICAgMT1EL0Egb3V0cHV0cyAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCisgICAgICAgIDI9RC9BIG91dHB1dHMgdW5rbm93IChleHRlcm5hbCByZWZlcmVuY2UpCisKK09wdGlvbnMgZm9yIEFDTC04MTEyREcvSEcsIEEtODIyUEdML1BHSCwgQS04MjNQR0wvUEdILCBBQ0wtODIxNiwgQS04MjZQRzoKKyAgWzBdIC0gSU8gQmFzZQorICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDc7IDEwLCAxMSwgMTIsIDE0LCAxNSkKKyAgWzJdIC0gRE1BICAoMD1kaXNhYmxlLCAxLCAzKQorICBbM10gLSAwPXRyaWdnZXIgc291cmNlIGlzIGludGVybmFsIDgyNTMgd2l0aCAyTUh6IGNsb2NrCisgICAgICAgIDE9dHJpZ2dlciBzb3VyY2UgaXMgZXh0ZXJuYWwKKyAgWzRdIC0gMD1BL0QgY2hhbm5lbHMgYXJlIFMuRS4KKyAgICAgICAgMT1BL0QgY2hhbm5lbHMgYXJlIERJRkYKKyAgWzVdIC0gMD1EL0Egb3V0cHV0cyAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAgICAgICAgMT1EL0Egb3V0cHV0cyAwLTEwViAoaW50ZXJuYWwgcmVmZXJlbmNlIC0xMFYpCisgICAgICAgIDI9RC9BIG91dHB1dHMgdW5rbm93IChleHRlcm5hbCByZWZlcmVuY2UpCisKK09wdGlvbnMgZm9yIEEtODIxUEdML1BHSDoKKyAgWzBdIC0gSU8gQmFzZQorICBbMV0gLSBJUlEgICgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCisgIFsyXSAtIDA9QS9EIGNoYW5uZWxzIGFyZSBTLkUuCisgICAgICAgIDE9QS9EIGNoYW5uZWxzIGFyZSBESUZGCisgIFszXSAtIDA9RC9BIG91dHB1dCAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAgICAgICAgMT1EL0Egb3V0cHV0IDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKworT3B0aW9ucyBmb3IgQS04MjFQR0wtTkRBOgorICBbMF0gLSBJTyBCYXNlCisgIFsxXSAtIElSUSAgKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNykKKyAgWzJdIC0gMD1BL0QgY2hhbm5lbHMgYXJlIFMuRS4KKyAgICAgICAgMT1BL0QgY2hhbm5lbHMgYXJlIERJRkYKKworT3B0aW9ucyBmb3IgUENMLTgxMzoKKyAgWzBdIC0gSU8gQmFzZQorCitPcHRpb25zIGZvciBQQ0wtODEzQjoKKyAgWzBdIC0gSU8gQmFzZQorICBbMV0gLSAwPSBiaXBvbGFyIGlucHV0cworICAgICAgICAxPSB1bmlwb2xhciBpbnB1dHMKKworT3B0aW9ucyBmb3IgQUNMLTgxMTMsIElTTy04MTM6CisgIFswXSAtIElPIEJhc2UKKyAgWzFdIC0gMD0gMTBWIGJpcG9sYXIgaW5wdXRzCisgICAgICAgIDE9IDEwViB1bmlwb2xhciBpbnB1dHMKKyAgICAgICAgMj0gMjBWIGJpcG9sYXIgaW5wdXRzCisgICAgICAgIDM9IDIwViB1bmlwb2xhciBpbnB1dHMKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorCisjdW5kZWYgUENMODEyX0VYVERFQlVHCQkvKiBpZiB0aGlzIGlzIGRlZmluZWQgdGhlbiBhIGxvdCBvZiBtZXNzYWdlcyBpcyBwcmludGVkICovCisKKy8vIGhhcmR3YXJlIHR5cGVzIG9mIHRoZSBjYXJkcworI2RlZmluZSBib2FyZFBDTDgxMlBHIAkJIDAJLyogYW5kIEFDTC04MTEyUEcgKi8KKyNkZWZpbmUgYm9hcmRQQ0w4MTNCIAkJIDEKKyNkZWZpbmUgYm9hcmRQQ0w4MTIJCSAyCisjZGVmaW5lIGJvYXJkUENMODEzIAkJIDMKKyNkZWZpbmUgYm9hcmRJU084MTMgCQkgNQorI2RlZmluZSBib2FyZEFDTDgxMTMgCQkgNgorI2RlZmluZSBib2FyZEFDTDgxMTIgCQkgNwkvKiBBQ0wtODExMkRHL0hHLCBBLTgyMlBHTC9QR0gsIEEtODIzUEdML1BHSCAqLworI2RlZmluZSBib2FyZEFDTDgyMTYJCSA4CS8qIGFuZCBJQ1AgREFTIEEtODI2UEcgKi8KKyNkZWZpbmUgYm9hcmRBODIxCQkgOQkvKiBQR0gsIFBHTCwgUEdML05EQSB2ZXJzaW9ucyAqLworCisjZGVmaW5lIFBDTHgxeF9JT1JBTkdFIAkJMTYKKworI2RlZmluZSBQQ0w4MTJfQ1RSMAkJIDAKKyNkZWZpbmUgUENMODEyX0NUUjEJCSAxCisjZGVmaW5lIFBDTDgxMl9DVFIyCQkgMgorI2RlZmluZSBQQ0w4MTJfQ1RSQ1RMCQkgMworI2RlZmluZSBQQ0w4MTJfQURfTE8JCSA0CisjZGVmaW5lIFBDTDgxMl9EQTFfTE8JCSA0CisjZGVmaW5lIFBDTDgxMl9BRF9ISQkJIDUKKyNkZWZpbmUgUENMODEyX0RBMV9ISQkJIDUKKyNkZWZpbmUgUENMODEyX0RBMl9MTwkJIDYKKyNkZWZpbmUgUENMODEyX0RJX0xPCQkgNgorI2RlZmluZSBQQ0w4MTJfREEyX0hJCQkgNworI2RlZmluZSBQQ0w4MTJfRElfSEkJCSA3CisjZGVmaW5lIFBDTDgxMl9DTFJJTlQJCSA4CisjZGVmaW5lIFBDTDgxMl9HQUlOCQkgOQorI2RlZmluZSBQQ0w4MTJfTVVYCQkxMAorI2RlZmluZSBQQ0w4MTJfTU9ERQkJMTEKKyNkZWZpbmUgUENMODEyX0NOVEVOQUJMRSAJMTAKKyNkZWZpbmUgUENMODEyX1NPRlRUUklHIAkxMgorI2RlZmluZSBQQ0w4MTJfRE9fTE8JCTEzCisjZGVmaW5lIFBDTDgxMl9ET19ISSAJCTE0CisKKyNkZWZpbmUgUENMODEyX0RSRFkgCQkweDEwCS8qID0wIGRhdGEgcmVhZHkgKi8KKworI2RlZmluZSBBQ0w4MjE2X1NUQVRVUyAJCSA4CS8qIDUuIGJpdCBzaWduYWxpemUgZGF0YSByZWFkeSAqLworCisjZGVmaW5lIEFDTDgyMTZfRFJEWSAJCTB4MjAJLyogPTAgZGF0YSByZWFkeSAqLworCisjZGVmaW5lIE1BWF9DSEFOTElTVF9MRU4JMjU2CS8qIGxlbmd0aCBvZiBzY2FuIGxpc3QgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxMnBnX2FpID0geyA1LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJCQlCSVBfUkFOR0UoMC4zMTI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxMnBnMl9haSA9IHsgNSwgeworCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlODEyX2JpcG9sYXIxXzI1ID0geyAxLCB7CisJCQlCSVBfUkFOR0UoMS4yNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZTgxMl9iaXBvbGFyMF82MjUgPSB7IDEsIHsKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZTgxMl9iaXBvbGFyMF8zMTI1ID0geyAxLCB7CisJCQlCSVBfUkFOR0UoMC4zMTI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxM2JfYWkgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxM2IyX2FpID0geyA0LCB7CisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9pc284MTNfMV9haSA9IHsgNSwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCQkJQklQX1JBTkdFKDAuMzEyNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9pc284MTNfMV8yX2FpID0geyA1LCB7CisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJCQlVTklfUkFOR0UoMC42MjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfaXNvODEzXzJfYWkgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2lzbzgxM18yXzJfYWkgPSB7IDQsIHsKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FjbDgxMTNfMV9haSA9IHsgNCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMC42MjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWNsODExM18xXzJfYWkgPSB7IDQsIHsKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX2FjbDgxMTNfMl9haSA9IHsgMywgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9hY2w4MTEzXzJfMl9haSA9IHsgMywgeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSg1KSwKKwkJCVVOSV9SQU5HRSgyLjUpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWNsODExMmRnX2FpID0geyA5LCB7CisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgwLjYyNSksCisJCQlVTklfUkFOR0UoMTApLAorCQkJVU5JX1JBTkdFKDUpLAorCQkJVU5JX1JBTkdFKDIuNSksCisJCQlVTklfUkFOR0UoMS4yNSksCisJCQlCSVBfUkFOR0UoMTApLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYWNsODExMmhnX2FpID0geyAxMiwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDEpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDEpLAorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYTgyMXBnaF9haSA9IHsgNCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMDUpLAorCX0KK307CisKK3N0YXRpYyBpbnQgcGNsODEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbDgxMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdHJ1Y3QgcGNsODEyX2JvYXJkIHsKKworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGJvYXJkIG5hbWUKKwlpbnQgYm9hcmRfdHlwZTsJCS8vIHR5cGUgb2YgdGhpcyBib2FyZAorCWludCBuX2FpY2hhbjsJCS8vIG51bSBvZiBBSSBjaGFucyBpbiBTLkUuCisJaW50IG5fYWljaGFuX2RpZmY7CS8vIERJRkYgbnVtIG9mIGNoYW5zCisJaW50IG5fYW9jaGFuOwkJLy8gbnVtIG9mIERBIGNoYW5zCisJaW50IG5fZGljaGFuOwkJLy8gREkgYW5kIERPIGNoYW5zCisJaW50IG5fZG9jaGFuOworCWludCBhaV9tYXhkYXRhOwkJLy8gQUkgcmVzb2x1dGlvbgorCXVuc2lnbmVkIGludCBhaV9uc19taW47CS8vIG1heCBzYW1wbGUgc3BlZWQgb2YgY2FyZCB2IG5zCisJdW5zaWduZWQgaW50IGk4MjU0X29zY19iYXNlOwkvLyBjbG9jayBiYXNlCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnJhbmdlbGlzdF9haTsJLy8gcmFuZ2VsaXN0IGZvciBBL0QKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VsaXN0X2FvOwkvLyByYW5nZWxpc3QgZm9yIEQvQQorCXVuc2lnbmVkIGludCBJUlFiaXRzOwkvLyBhbGxvd2VkIElSUQorCXVuc2lnbmVkIGNoYXIgRE1BYml0czsJLy8gYWxsb3dlZCBETUEgY2hhbnMKKwl1bnNpZ25lZCBjaGFyIGlvX3JhbmdlOwkvLyBpb3JhbmdlIGZvciB0aGlzIGJvYXJkCisJdW5zaWduZWQgY2hhciBoYXZlTVBDNTA4OwkvLyAxPWJvYXJkIHVzZSBNUEM1MDhBIG11bHRpcGxleG9yCit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNsODEyX2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjbDgxMiIsIGJvYXJkUENMODEyLCAxNiwgMCwgMiwgMTYsIDE2LCAweDBmZmYsCisJCQkzMzAwMCwgNTAwLCAmcmFuZ2VfYmlwb2xhcjEwLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7InBjbDgxMnBnIiwgYm9hcmRQQ0w4MTJQRywgMTYsIDAsIDIsIDE2LCAxNiwgMHgwZmZmLAorCQkJMzMwMDAsIDUwMCwgJnJhbmdlX3BjbDgxMnBnX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7ImFjbDgxMTJwZyIsIGJvYXJkUENMODEyUEcsIDE2LCAwLCAyLCAxNiwgMTYsIDB4MGZmZiwKKwkJCTEwMDAwLCA1MDAsICZyYW5nZV9wY2w4MTJwZ19haSwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJMHhkY2ZjLCAweDBhLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhY2w4MTEyZGciLCBib2FyZEFDTDgxMTIsIDE2LCA4LCAyLCAxNiwgMTYsIDB4MGZmZiwKKwkJCTEwMDAwLCA1MDAsICZyYW5nZV9hY2w4MTEyZGdfYWksICZyYW5nZV91bmlwb2xhcjUsCisJCTB4ZGNmYywgMHgwYSwgUENMeDF4X0lPUkFOR0UsIDF9LAorCXsiYWNsODExMmhnIiwgYm9hcmRBQ0w4MTEyLCAxNiwgOCwgMiwgMTYsIDE2LCAweDBmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfYWNsODExMmhnX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAxfSwKKwl7ImE4MjFwZ2wiLCBib2FyZEE4MjEsIDE2LCA4LCAxLCAxNiwgMTYsIDB4MGZmZiwKKwkJCTEwMDAwLCA1MDAsICZyYW5nZV9wY2w4MTNiX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweDAwMGMsIDB4MDAsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7ImE4MjFwZ2xuZGEiLCBib2FyZEE4MjEsIDE2LCA4LCAwLCAwLCAwLCAweDBmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfcGNsODEzYl9haSwgTlVMTCwKKwkJMHgwMDBjLCAweDAwLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhODIxcGdoIiwgYm9hcmRBODIxLCAxNiwgOCwgMSwgMTYsIDE2LCAweDBmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfYTgyMXBnaF9haSwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJMHgwMDBjLCAweDAwLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhODIycGdsIiwgYm9hcmRBQ0w4MTEyLCAxNiwgOCwgMiwgMTYsIDE2LCAweDBmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfYWNsODExMmRnX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7ImE4MjJwZ2giLCBib2FyZEFDTDgxMTIsIDE2LCA4LCAyLCAxNiwgMTYsIDB4MGZmZiwKKwkJCTEwMDAwLCA1MDAsICZyYW5nZV9hY2w4MTEyaGdfYWksICZyYW5nZV91bmlwb2xhcjUsCisJCTB4ZGNmYywgMHgwYSwgUENMeDF4X0lPUkFOR0UsIDB9LAorCXsiYTgyM3BnbCIsIGJvYXJkQUNMODExMiwgMTYsIDgsIDIsIDE2LCAxNiwgMHgwZmZmLAorCQkJODAwMCwgNTAwLCAmcmFuZ2VfYWNsODExMmRnX2FpLCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkweGRjZmMsIDB4MGEsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7ImE4MjNwZ2giLCBib2FyZEFDTDgxMTIsIDE2LCA4LCAyLCAxNiwgMTYsIDB4MGZmZiwKKwkJCTgwMDAsIDUwMCwgJnJhbmdlX2FjbDgxMTJoZ19haSwgJnJhbmdlX3VuaXBvbGFyNSwKKwkJMHhkY2ZjLCAweDBhLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJwY2w4MTMiLCBib2FyZFBDTDgxMywgMzIsIDAsIDAsIDAsIDAsIDB4MGZmZiwKKwkJCTAsIDAsICZyYW5nZV9wY2w4MTNiX2FpLCBOVUxMLAorCQkweDAwMDAsIDB4MDAsIFBDTHgxeF9JT1JBTkdFLCAwfSwKKwl7InBjbDgxM2IiLCBib2FyZFBDTDgxM0IsIDMyLCAwLCAwLCAwLCAwLCAweDBmZmYsCisJCQkwLCAwLCAmcmFuZ2VfcGNsODEzYl9haSwgTlVMTCwKKwkJMHgwMDAwLCAweDAwLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhY2w4MTEzIiwgYm9hcmRBQ0w4MTEzLCAzMiwgMCwgMCwgMCwgMCwgMHgwZmZmLAorCQkJMCwgMCwgJnJhbmdlX2FjbDgxMTNfMV9haSwgTlVMTCwKKwkJMHgwMDAwLCAweDAwLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJpc284MTMiLCBib2FyZElTTzgxMywgMzIsIDAsIDAsIDAsIDAsIDB4MGZmZiwKKwkJCTAsIDAsICZyYW5nZV9pc284MTNfMV9haSwgTlVMTCwKKwkJMHgwMDAwLCAweDAwLCBQQ0x4MXhfSU9SQU5HRSwgMH0sCisJeyJhY2w4MjE2IiwgYm9hcmRBQ0w4MjE2LCAxNiwgOCwgMiwgMTYsIDE2LCAweGZmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfcGNsODEzYjJfYWksICZyYW5nZV91bmlwb2xhcjUsCisJCTB4ZGNmYywgMHgwYSwgUENMeDF4X0lPUkFOR0UsIDF9LAorCXsiYTgyNnBnIiwgYm9hcmRBQ0w4MjE2LCAxNiwgOCwgMiwgMTYsIDE2LCAweGZmZmYsCisJCQkxMDAwMCwgNTAwLCAmcmFuZ2VfcGNsODEzYjJfYWksICZyYW5nZV91bmlwb2xhcjUsCisJCTB4ZGNmYywgMHgwYSwgUENMeDF4X0lPUkFOR0UsIDB9LAorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IHBjbDgxMl9ib2FyZCkpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNsODEyX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNsODEyID0geworICAgICAgZHJpdmVyX25hbWU6InBjbDgxMiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNsODEyX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY2w4MTJfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbDgxMl9ib2FyZCksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BjbDgxMik7CisKK3N0cnVjdCBwY2w4MTJfcHJpdmF0ZSB7CisKKwl1bnNpZ25lZCBjaGFyIHZhbGlkOwkvLyA9MSBkZXZpY2UgaXMgT0sKKwl1bnNpZ25lZCBjaGFyIGRtYTsJLy8gPjAgdXNlIGRtYSAoIHVzZWRETUEgY2hhbm5lbCkKKwl1bnNpZ25lZCBjaGFyIHVzZV9kaWZmOwkvLyA9MSBkaWZmIGlucHV0cworCXVuc2lnbmVkIGNoYXIgdXNlX01QQzsJLy8gMT1ib2FyZCB1c2VzIE1QQzUwOEEgbXVsdGlwbGV4b3IKKwl1bnNpZ25lZCBjaGFyIHVzZV9leHRfdHJnOwkvLyAxPWJvYXJkIHVzZXMgZXh0ZXJuYWwgdHJpZ2dlcgorCXVuc2lnbmVkIGNoYXIgcmFuZ2VfY29ycmVjdGlvbjsJLy8gPTEgd2UgbXVzdCBhZGQgMSB0byByYW5nZSBudW1iZXIKKwl1bnNpZ25lZCBjaGFyIG9sZF9jaGFuX3JlZzsJLy8gbGFzdGx5IHVzZWQgY2hhbi9nYWluIHBhaXIKKwl1bnNpZ25lZCBjaGFyIG9sZF9nYWluX3JlZzsKKwl1bnNpZ25lZCBjaGFyIG1vZGVfcmVnX2ludDsJLy8gdGhlcmUgaXMgc3RvcmVkIElOVCBudW1iZXIgZm9yIHNvbWUgY2FyZAorCXVuc2lnbmVkIGNoYXIgYWlfbmV2ZXJlbmRpbmc7CS8vID0xIHdlIGRvIHVubGltaXRlZCBBSQorCXVuc2lnbmVkIGNoYXIgYWlfZW9zOwkvLyAxPUVPUyB3YWtlIHVwCisJdW5zaWduZWQgY2hhciBhaV9kbWE7CS8vID0xIHdlIHVzZSBETUEKKwl1bnNpZ25lZCBpbnQgYWlfcG9sbF9wdHI7CS8vIGhvdyBtYW55IHNhbXBlcyB0cmFuc2ZlciBwb2xsCisJdW5zaWduZWQgaW50IGFpX3NjYW5zOwkvLyBsZW4gb2Ygc2Nhbmxpc3QKKwl1bnNpZ25lZCBpbnQgYWlfYWN0X3NjYW47CS8vIGhvdyBtYW55IHNjYW5zIHdlIGZpbmlzaGVkCisJdW5zaWduZWQgaW50IGFpX2NoYW5saXN0W01BWF9DSEFOTElTVF9MRU5dOwkvLyBvdXIgY29weSBvZiBjaGFubmVsL3JhbmdlIGxpc3QKKwl1bnNpZ25lZCBpbnQgYWlfbl9jaGFuOwkvLyBob3cgbWFueSBjaGFubmVscyBpcyBtZWFzdXJlZAorCXVuc2lnbmVkIGludCBhaV9mbGFnczsJLy8gZmxhZ2xpc3QKKwl1bnNpZ25lZCBpbnQgYWlfZGF0YV9sZW47CS8vIGxlbiBvZiBkYXRhIGJ1ZmZlcgorCXNob3J0ICphaV9kYXRhOwkvLyBkYXRhIGJ1ZmZlcgorCXVuc2lnbmVkIGludCBhaV9pczE2YjsJLy8gPTEgd2UgaGF2ZSAxNiBiaXQgY2FyZAorCXVuc2lnbmVkIGxvbmcgZG1hYnVmWzJdOwkvLyBQVFIgdG8gRE1BIGJ1ZgorCXVuc2lnbmVkIGludCBkbWFwYWdlc1syXTsJLy8gaG93IG1hbnkgcGFnZXMgd2UgaGF2ZSBhbGxvY2F0ZWQKKwl1bnNpZ25lZCBpbnQgaHdkbWFwdHJbMl07CS8vIEhXIFBUUiB0byBETUEgYnVmCisJdW5zaWduZWQgaW50IGh3ZG1hc2l6ZVsyXTsJLy8gRE1BIGJ1ZiBzaXplIGluIGJ5dGVzCisJdW5zaWduZWQgaW50IGRtYWJ5dGVzdG9tb3ZlWzJdOwkvLyBob3cgbWFueSBieXRlcyBETUEgdHJhbnNmZXIKKwlpbnQgbmV4dF9kbWFfYnVmOwkvLyB3aGljaCBidWZmZXIgaXMgbmV4dCB0byB1c2UKKwl1bnNpZ25lZCBpbnQgZG1hX3J1bnNfdG9fZW5kOwkvLyBob3cgbWFueSB0aW1lcyB3ZSBtdXN0IHN3aXRjaCBETUEgYnVmZmVycworCXVuc2lnbmVkIGludCBsYXN0X2RtYV9ydW47CS8vIGhvdyBtYW55IGJ5dGVzIHRvIHRyYW5zZmVyIG9uIGxhc3QgRE1BIGJ1ZmZlcgorCXVuc2lnbmVkIGludCBtYXhfODEyX2FpX21vZGUwX3Jhbmdld2FpdDsJLy8gc2V0bGluZyB0aW1lIGZvciBnYWluCisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrWzJdOwkvLyBkYXRhIGZvciBBTyByZWFkYmFjaworfTsKKworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNsODEyX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBzdGFydF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkaXZpc29yMSwKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjIpOworc3RhdGljIHZvaWQgc2V0dXBfcmFuZ2VfY2hhbm5lbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCByYW5nZWNoYW4sIGNoYXIgd2FpdCk7CitzdGF0aWMgaW50IHBjbDgxMl9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcyk7CisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2w4MTJfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgdGltZW91dCwgaGk7CisKKwlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDEsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOwkvKiBzZWxlY3Qgc29mdHdhcmUgdHJpZ2dlciAqLworCXNldHVwX3JhbmdlX2NoYW5uZWwoZGV2LCBzLCBpbnNuLT5jaGFuc3BlYywgMSk7CS8vIHNlbGVjdCBjaGFubmVsIGFuZCByZW5nZQorCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJb3V0YigyNTUsIGRldi0+aW9iYXNlICsgUENMODEyX1NPRlRUUklHKTsJLyogc3RhcnQgY29udmVyc2lvbiAqLworCQljb21lZGlfdWRlbGF5KDUpOworCQl0aW1lb3V0ID0gNTA7CS8qIHdhaXQgbWF4IDUwdXMsIGl0IG11c3QgZmluaXNoIHVuZGVyIDMzdXMgKi8KKwkJd2hpbGUgKHRpbWVvdXQtLSkgeworCQkJaGkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQURfSEkpOworCQkJaWYgKCEoaGkgJiBQQ0w4MTJfRFJEWSkpCisJCQkJZ290byBjb252X2ZpbmlzaDsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJcnRfcHJpbnRrCisJCQkoImNvbWVkaSVkOiBwY2w4MTI6ICglcyBhdCAweCVseCkgQS9EIGluc24gcmVhZCB0aW1lb3V0XG4iLAorCQkJZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lLCBkZXYtPmlvYmFzZSk7CisJCW91dGIoZGV2cHJpdi0+bW9kZV9yZWdfaW50IHwgMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CisJCXJldHVybiAtRVRJTUU7CisKKwkgICAgICBjb252X2ZpbmlzaDoKKwkJZGF0YVtuXSA9ICgoaGkgJiAweGYpIDw8IDgpIHwgaW5iKGRldi0+aW9iYXNlICsgUENMODEyX0FEX0xPKTsKKwl9CisJb3V0YihkZXZwcml2LT5tb2RlX3JlZ19pbnQgfCAwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsKKwlyZXR1cm4gbjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgYWNsODIxNl9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCB0aW1lb3V0OworCisJb3V0YigxLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9NT0RFKTsJLyogc2VsZWN0IHNvZnR3YXJlIHRyaWdnZXIgKi8KKwlzZXR1cF9yYW5nZV9jaGFubmVsKGRldiwgcywgaW5zbi0+Y2hhbnNwZWMsIDEpOwkvLyBzZWxlY3QgY2hhbm5lbCBhbmQgcmVuZ2UKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCW91dGIoMjU1LCBkZXYtPmlvYmFzZSArIFBDTDgxMl9TT0ZUVFJJRyk7CS8qIHN0YXJ0IGNvbnZlcnNpb24gKi8KKwkJY29tZWRpX3VkZWxheSg1KTsKKwkJdGltZW91dCA9IDUwOwkvKiB3YWl0IG1heCA1MHVzLCBpdCBtdXN0IGZpbmlzaCB1bmRlciAzM3VzICovCisJCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJCWlmICghKGluYihkZXYtPmlvYmFzZSArIEFDTDgyMTZfU1RBVFVTKSAmIEFDTDgyMTZfRFJEWSkpCisJCQkJZ290byBjb252X2ZpbmlzaDsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJcnRfcHJpbnRrCisJCQkoImNvbWVkaSVkOiBwY2w4MTI6ICglcyBhdCAweCVseCkgQS9EIGluc24gcmVhZCB0aW1lb3V0XG4iLAorCQkJZGV2LT5taW5vciwgZGV2LT5ib2FyZF9uYW1lLCBkZXYtPmlvYmFzZSk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CisJCXJldHVybiAtRVRJTUU7CisKKwkgICAgICBjb252X2ZpbmlzaDoKKwkJZGF0YVtuXSA9CisJCQkoaW5iKGRldi0+aW9iYXNlICsKKwkJCQlQQ0w4MTJfQURfSEkpIDw8IDgpIHwgaW5iKGRldi0+aW9iYXNlICsKKwkJCVBDTDgxMl9BRF9MTyk7CisJfQorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfTU9ERSk7CisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjbDgxMl9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlvdXRiKChkYXRhW2ldICYgMHhmZiksCisJCQlkZXYtPmlvYmFzZSArIChjaGFuID8gUENMODEyX0RBMl9MTyA6IFBDTDgxMl9EQTFfTE8pKTsKKwkJb3V0YigoZGF0YVtpXSA+PiA4KSAmIDB4MGYsCisJCQlkZXYtPmlvYmFzZSArIChjaGFuID8gUENMODEyX0RBMl9ISSA6IFBDTDgxMl9EQTFfSEkpKTsKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW2ldOworCX0KKworCXJldHVybiBpOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2w4MTJfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisJfQorCisJcmV0dXJuIGk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjbDgxMl9kaV9pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIFBDTDgxMl9ESV9MTyk7CisJZGF0YVsxXSB8PSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfRElfSEkpIDw8IDg7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNsODEyX2RvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJCW91dGIocy0+c3RhdGUgJiAweGZmLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9ET19MTyk7CisJCW91dGIoKHMtPnN0YXRlID4+IDgpLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9ET19ISSk7CisJfQorCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCisjaWZkZWYgUENMODEyX0VYVERFQlVHCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIHZvaWQgcGNsODEyX2NtZHRlc3Rfb3V0KGludCBlLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlydF9wcmludGsoInBjbDgxMiBlPSVkIHN0YXJ0c3JjPSV4IHNjYW5zcmM9JXggY29udnNyYz0leFxuIiwgZSwKKwkJY21kLT5zdGFydF9zcmMsIGNtZC0+c2Nhbl9iZWdpbl9zcmMsIGNtZC0+Y29udmVydF9zcmMpOworCXJ0X3ByaW50aygicGNsODEyIGU9JWQgc3RhcnRhcmc9JWQgc2NhbmFyZz0lZCBjb252YXJnPSVkXG4iLCBlLAorCQljbWQtPnN0YXJ0X2FyZywgY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5jb252ZXJ0X2FyZyk7CisJcnRfcHJpbnRrKCJwY2w4MTIgZT0lZCBzdG9wc3JjPSV4IHNjYW5lbmQ9JXhcbiIsIGUsIGNtZC0+c3RvcF9zcmMsCisJCWNtZC0+c2Nhbl9lbmRfc3JjKTsKKwlydF9wcmludGsoInBjbDgxMiBlPSVkIHN0b3Bhcmc9JWQgc2NhbmVuZGFyZz0lZCBjaGFubGlzdGxlbj0lZFxuIiwgZSwKKwkJY21kLT5zdG9wX2FyZywgY21kLT5zY2FuX2VuZF9hcmcsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKK30KKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2w4MTJfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXAsIGRpdmlzb3IxLCBkaXZpc29yMjsKKworI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCXJ0X3ByaW50aygicGNsODEyIEVEQkc6IEJHTjogcGNsODEyX2FpX2NtZHRlc3QoLi4uKVxuIik7CisJcGNsODEyX2NtZHRlc3Rfb3V0KC0xLCBjbWQpOworI2VuZGlmCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKworCXRtcCA9IGNtZC0+c3RhcnRfc3JjOworCWNtZC0+c3RhcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwlpZiAoZGV2cHJpdi0+dXNlX2V4dF90cmcpIHsKKwkJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX0VYVDsKKwl9IGVsc2UgeworCQljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVI7CisJfQorCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKSB7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJCXBjbDgxMl9jbWR0ZXN0X291dCgxLCBjbWQpOworCQlydF9wcmludGsKKwkJCSgicGNsODEyIEVEQkc6IEJHTjogcGNsODEyX2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTFcbiIsCisJCQllcnIpOworI2VuZGlmCisJCXJldHVybiAxOworCX0KKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cpIHsKKwkJY21kLT5zdGFydF9zcmMgPSBUUklHX05PVzsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyA9IFRSSUdfRk9MTE9XOworCQllcnIrKzsKKwl9CisKKwlpZiAoZGV2cHJpdi0+dXNlX2V4dF90cmcpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19FWFQpIHsKKwkJCWNtZC0+Y29udmVydF9zcmMgPSBUUklHX0VYVDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikgeworCQkJY21kLT5jb252ZXJ0X3NyYyA9IFRSSUdfVElNRVI7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKSB7CisJCWNtZC0+c2Nhbl9lbmRfc3JjID0gVFJJR19DT1VOVDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKSB7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJCXBjbDgxMl9jbWR0ZXN0X291dCgyLCBjbWQpOworCQlydF9wcmludGsKKwkJCSgicGNsODEyIEVEQkc6IEJHTjogcGNsODEyX2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTJcbiIsCisJCQllcnIpOworI2VuZGlmCisJCXJldHVybiAyOworCX0KKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfRVhUICovCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IE1BWF9DSEFOTElTVF9MRU4pIHsKKwkJY21kLT5jaGFubGlzdF9sZW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoIWNtZC0+c3RvcF9hcmcpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKSB7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJCXBjbDgxMl9jbWR0ZXN0X291dCgzLCBjbWQpOworCQlydF9wcmludGsKKwkJCSgicGNsODEyIEVEQkc6IEJHTjogcGNsODEyX2FpX2NtZHRlc3QoLi4uKSBlcnI9JWQgcmV0PTNcbiIsCisJCQllcnIpOworI2VuZGlmCisJCXJldHVybiAzOworCX0KKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcih0aGlzX2JvYXJkLT5pODI1NF9vc2NfYmFzZSwgJmRpdmlzb3IxLAorCQkJJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpIHsKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwkJcnRfcHJpbnRrCisJCQkoInBjbDgxMiBFREJHOiBCR046IHBjbDgxMl9haV9jbWR0ZXN0KC4uLikgZXJyPSVkIHJldD00XG4iLAorCQkJZXJyKTsKKyNlbmRpZgorCQlyZXR1cm4gNDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNsODEyX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGludCBkaXZpc29yMSA9IDAsIGRpdmlzb3IyID0gMCwgaSwgZG1hX2ZsYWdzLCBieXRlczsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBCR046IHBjbDgxMl9haV9jbWQoLi4uKVxuIik7CisjZW5kaWYKKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkZXZwcml2LT51c2VfZXh0X3RyZykgeworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX0VYVCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfVElNRVIpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfc3JjICE9IFRSSUdfQ09VTlQpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gTUFYX0NIQU5MSVNUX0xFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQorCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcih0aGlzX2JvYXJkLT5pODI1NF9vc2NfYmFzZSwKKwkJCSZkaXZpc29yMSwgJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCX0KKworCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIHBhY2VyCisKKwlkZXZwcml2LT5haV9uX2NoYW4gPSBjbWQtPmNoYW5saXN0X2xlbjsKKwltZW1jcHkoZGV2cHJpdi0+YWlfY2hhbmxpc3QsIGNtZC0+Y2hhbmxpc3QsCisJCXNpemVvZih1bnNpZ25lZCBpbnQpICogY21kLT5zY2FuX2VuZF9hcmcpOworCXNldHVwX3JhbmdlX2NoYW5uZWwoZGV2LCBzLCBkZXZwcml2LT5haV9jaGFubGlzdFswXSwgMSk7CS8vIHNlbGVjdCBmaXJzdCBjaGFubmVsIGFuZCByYW5nZQorCisJaWYgKGRldnByaXYtPmRtYSkgewkvLyBjaGVjayBpZiB3ZSBjYW4gdXNlIERNQSB0cmFuc2ZlcgorCQlkZXZwcml2LT5haV9kbWEgPSAxOworCQlmb3IgKGkgPSAxOyBpIDwgZGV2cHJpdi0+YWlfbl9jaGFuOyBpKyspCisJCQlpZiAoZGV2cHJpdi0+YWlfY2hhbmxpc3RbMF0gIT0gZGV2cHJpdi0+YWlfY2hhbmxpc3RbaV0pIHsKKwkJCQlkZXZwcml2LT5haV9kbWEgPSAwOwkvLyB3ZSBjYW5uJ3QgdXNlIERNQSA6LSgKKwkJCQlicmVhazsKKwkJCX0KKwl9IGVsc2UKKwkJZGV2cHJpdi0+YWlfZG1hID0gMDsKKworCWRldnByaXYtPmFpX2ZsYWdzID0gY21kLT5mbGFnczsKKwlkZXZwcml2LT5haV9kYXRhX2xlbiA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWZzejsKKwlkZXZwcml2LT5haV9kYXRhID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZjsKKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWRldnByaXYtPmFpX3NjYW5zID0gY21kLT5zdG9wX2FyZzsKKwkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAwOworCX0gZWxzZSB7CisJCWRldnByaXYtPmFpX3NjYW5zID0gMDsKKwkJZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcgPSAxOworCX0KKworCWRldnByaXYtPmFpX2FjdF9zY2FuID0gMDsKKwlkZXZwcml2LT5haV9wb2xsX3B0ciA9IDA7CisJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKworCWlmICgoZGV2cHJpdi0+YWlfZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgewkvLyBkb24ndCB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8KKwkJZGV2cHJpdi0+YWlfZW9zID0gMTsKKwkJaWYgKGRldnByaXYtPmFpX25fY2hhbiA9PSAxKQorCQkJZGV2cHJpdi0+YWlfZG1hID0gMDsJLy8gRE1BIGlzIHVzZWxlc3MgZm9yIHRoaXMgc2l0dWF0aW9uCisJfQorCisJaWYgKGRldnByaXYtPmFpX2RtYSkgeworCQlpZiAoZGV2cHJpdi0+YWlfZW9zKSB7CS8vIHdlIHVzZSBFT1MsIHNvIGFkYXB0IERNQSBidWZmZXIgdG8gb25lIHNjYW4KKwkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdID0KKwkJCQlkZXZwcml2LT5haV9uX2NoYW4gKiBzaXplb2Yoc2hvcnQpOworCQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMV0gPQorCQkJCWRldnByaXYtPmFpX25fY2hhbiAqIHNpemVvZihzaG9ydCk7CisJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSAxOworCQl9IGVsc2UgeworCQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF0gPSBkZXZwcml2LT5od2RtYXNpemVbMF07CisJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVsxXSA9IGRldnByaXYtPmh3ZG1hc2l6ZVsxXTsKKwkJCWlmIChkZXZwcml2LT5haV9kYXRhX2xlbiA8IGRldnByaXYtPmh3ZG1hc2l6ZVswXSkKKwkJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVswXSA9CisJCQkJCWRldnByaXYtPmFpX2RhdGFfbGVuOworCQkJaWYgKGRldnByaXYtPmFpX2RhdGFfbGVuIDwgZGV2cHJpdi0+aHdkbWFzaXplWzFdKQorCQkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzFdID0KKwkJCQkJZGV2cHJpdi0+YWlfZGF0YV9sZW47CisJCQlpZiAoZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpIHsKKwkJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlieXRlcyA9IGRldnByaXYtPmFpX25fY2hhbiAqIGRldnByaXYtPmFpX3NjYW5zICogc2l6ZW9mKHNob3J0KTsJLy8gaG93IG1hbnkgc2FtcGxlcyB3ZSBtdXN0IHRyYW5zZmVyPworCQkJCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCA9IGJ5dGVzIC8gZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF07CS8vIGhvdyBtYW55IERNQSBwYWdlcyB3ZSBtdXN0IGZpbGwKKwkJCQlkZXZwcml2LT5sYXN0X2RtYV9ydW4gPSBieXRlcyAlIGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdOwkvL29uIGxhc3QgZG1hIHRyYW5zZmVyIG11c3QgYmUgbW92ZWQKKwkJCQlpZiAoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID09IDApCisJCQkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdID0KKwkJCQkJCWRldnByaXYtPmxhc3RfZG1hX3J1bjsKKwkJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQtLTsKKwkJCX0KKwkJfQorCQlpZiAoZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMF0gPiBkZXZwcml2LT5od2RtYXNpemVbMF0pIHsKKwkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdID0gZGV2cHJpdi0+aHdkbWFzaXplWzBdOworCQkJZGV2cHJpdi0+YWlfZW9zID0gMDsKKwkJfQorCQlpZiAoZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMV0gPiBkZXZwcml2LT5od2RtYXNpemVbMV0pIHsKKwkJCWRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzFdID0gZGV2cHJpdi0+aHdkbWFzaXplWzFdOworCQkJZGV2cHJpdi0+YWlfZW9zID0gMDsKKwkJfQorCQlkZXZwcml2LT5uZXh0X2RtYV9idWYgPSAwOworCQlzZXRfZG1hX21vZGUoZGV2cHJpdi0+ZG1hLCBETUFfTU9ERV9SRUFEKTsKKwkJZG1hX2ZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwkJY2xlYXJfZG1hX2ZmKGRldnByaXYtPmRtYSk7CisJCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWEsIGRldnByaXYtPmh3ZG1hcHRyWzBdKTsKKwkJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsIGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdKTsKKwkJcmVsZWFzZV9kbWFfbG9jayhkbWFfZmxhZ3MpOworCQllbmFibGVfZG1hKGRldnByaXYtPmRtYSk7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJCXJ0X3ByaW50aworCQkJKCJwY2w4MTIgRURCRzogICBETUEgJWQgUFRSIDB4JTB4LzB4JTB4IExFTiAldS8ldSBFT1MgJWRcbiIsCisJCQlkZXZwcml2LT5kbWEsIGRldnByaXYtPmh3ZG1hcHRyWzBdLAorCQkJZGV2cHJpdi0+aHdkbWFwdHJbMV0sIGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlWzBdLAorCQkJZGV2cHJpdi0+ZG1hYnl0ZXN0b21vdmVbMV0sIGRldnByaXYtPmFpX2Vvcyk7CisjZW5kaWYKKwl9CisKKwlzd2l0Y2ggKGNtZC0+Y29udmVydF9zcmMpIHsKKwljYXNlIFRSSUdfVElNRVI6CisJCXN0YXJ0X3BhY2VyKGRldiwgMSwgZGl2aXNvcjEsIGRpdmlzb3IyKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGRldnByaXYtPmFpX2RtYSkgeworCQlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDIsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOwkvLyBsZXQncyBnbyEKKwl9IGVsc2UgeworCQlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDYsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOwkvLyBsZXQncyBnbyEKKwl9CisKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBFTkQ6IHBjbDgxMl9haV9jbWQoLi4uKVxuIik7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MTJfYWlfaW50KGludCBpcnEsIHZvaWQgKmQpCit7CisJY2hhciBlcnIgPSAxOworCXVuc2lnbmVkIGludCBtYXNrLCB0aW1lb3V0OworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKworCXMtPmFzeW5jLT5ldmVudHMgPSAwOworCisJdGltZW91dCA9IDUwOwkJLyogd2FpdCBtYXggNTB1cywgaXQgbXVzdCBmaW5pc2ggdW5kZXIgMzN1cyAqLworCWlmIChkZXZwcml2LT5haV9pczE2YikgeworCQltYXNrID0gMHhmZmZmOworCQl3aGlsZSAodGltZW91dC0tKSB7CisJCQlpZiAoIShpbmIoZGV2LT5pb2Jhc2UgKyBBQ0w4MjE2X1NUQVRVUykgJiBBQ0w4MjE2X0RSRFkpKSB7CisJCQkJZXJyID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwl9IGVsc2UgeworCQltYXNrID0gMHgwZmZmOworCQl3aGlsZSAodGltZW91dC0tKSB7CisJCQlpZiAoIShpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQURfSEkpICYgUENMODEyX0RSRFkpKSB7CisJCQkJZXJyID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwl9CisKKwlpZiAoZXJyKSB7CisJCXJ0X3ByaW50aworCQkJKCJjb21lZGklZDogcGNsODEyOiAoJXMgYXQgMHglbHgpIEEvRCBjbWQgSVJRIHdpdGhvdXQgRFJEWSFcbiIsCisJCQlkZXYtPm1pbm9yLCBkZXYtPmJvYXJkX25hbWUsIGRldi0+aW9iYXNlKTsKKwkJcGNsODEyX2FpX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsCisJCSgoaW5iKGRldi0+aW9iYXNlICsgUENMODEyX0FEX0hJKSA8PCA4KSB8IGluYihkZXYtPmlvYmFzZSArCisJCQkJUENMODEyX0FEX0xPKSkgJiBtYXNrKTsKKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKworCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgewkvKiBvbmUgc2NhbiBkb25lICovCisJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CisJCWlmICghKGRldnByaXYtPmFpX25ldmVyZW5kaW5nKSkKKwkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQkJcGNsODEyX2FpX2NhbmNlbChkZXYsIHMpOworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCX0KKwl9CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCB0cmFuc2Zlcl9mcm9tX2RtYV9idWYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzaG9ydCAqIHB0ciwgdW5zaWduZWQgaW50IGJ1ZnB0ciwgdW5zaWduZWQgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCXMtPmFzeW5jLT5ldmVudHMgPSAwOworCWZvciAoaSA9IGxlbjsgaTsgaS0tKSB7CisJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBwdHJbYnVmcHRyKytdKTsJLy8gZ2V0IG9uZSBzYW1wbGUKKworCQlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID09IDApIHsKKwkJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CisJCQlpZiAoIWRldnByaXYtPmFpX25ldmVyZW5kaW5nKQorCQkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQkJCXBjbDgxMl9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCQlicmVhazsKKwkJCQl9CisJCX0KKwl9CisKKwljb21lZGlfZXZlbnQoZGV2LCBzKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNsODEyX2FpX2RtYShpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwl1bnNpZ25lZCBsb25nIGRtYV9mbGFnczsKKwlpbnQgbGVuLCBidWZwdHI7CisJc2hvcnQgKnB0cjsKKworI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCXJ0X3ByaW50aygicGNsODEyIEVEQkc6IEJHTjogaW50ZXJydXB0X3BjbDgxMl9haV9kbWEoLi4uKVxuIik7CisjZW5kaWYKKwlwdHIgPSAoc2hvcnQgKikgZGV2cHJpdi0+ZG1hYnVmW2RldnByaXYtPm5leHRfZG1hX2J1Zl07CisJbGVuID0gKGRldnByaXYtPmRtYWJ5dGVzdG9tb3ZlW2RldnByaXYtPm5leHRfZG1hX2J1Zl0gPj4gMSkgLQorCQlkZXZwcml2LT5haV9wb2xsX3B0cjsKKworCWRldnByaXYtPm5leHRfZG1hX2J1ZiA9IDEgLSBkZXZwcml2LT5uZXh0X2RtYV9idWY7CisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwlzZXRfZG1hX21vZGUoZGV2cHJpdi0+ZG1hLCBETUFfTU9ERV9SRUFEKTsKKwlkbWFfZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOworCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWEsIGRldnByaXYtPmh3ZG1hcHRyW2RldnByaXYtPm5leHRfZG1hX2J1Zl0pOworCWlmIChkZXZwcml2LT5haV9lb3MpIHsKKwkJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsCisJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVtkZXZwcml2LT5uZXh0X2RtYV9idWZdKTsKKwl9IGVsc2UgeworCQlpZiAoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kKSB7CisJCQlzZXRfZG1hX2NvdW50KGRldnByaXYtPmRtYSwKKwkJCQlkZXZwcml2LT5kbWFieXRlc3RvbW92ZVtkZXZwcml2LT5uZXh0X2RtYV9idWZdKTsKKwkJfSBlbHNlIHsKKwkJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5sYXN0X2RtYV9ydW4pOworCQl9CisJCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZC0tOworCX0KKwlyZWxlYXNlX2RtYV9sb2NrKGRtYV9mbGFncyk7CisJZW5hYmxlX2RtYShkZXZwcml2LT5kbWEpOworCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCisJYnVmcHRyID0gZGV2cHJpdi0+YWlfcG9sbF9wdHI7CisJZGV2cHJpdi0+YWlfcG9sbF9wdHIgPSAwOworCisJdHJhbnNmZXJfZnJvbV9kbWFfYnVmKGRldiwgcywgcHRyLCBidWZwdHIsIGxlbik7CisKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBFTkQ6IGludGVycnVwdF9wY2w4MTJfYWlfZG1hKC4uLilcbiIpOworI2VuZGlmCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MTIoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0Iik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJaWYgKGRldnByaXYtPmFpX2RtYSkgeworCQlyZXR1cm4gaW50ZXJydXB0X3BjbDgxMl9haV9kbWEoaXJxLCBkKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gaW50ZXJydXB0X3BjbDgxMl9haV9pbnQoaXJxLCBkKTsKKwl9OworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIGludCBwY2w4MTJfYWlfcG9sbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IHRvcDEsIHRvcDIsIGk7CisKKwlpZiAoIWRldnByaXYtPmFpX2RtYSkKKwkJcmV0dXJuIDA7CS8vIHBvbGwgaXMgdmFsaWQgb25seSBmb3IgRE1BIHRyYW5zZmVyCisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXRvcDEgPSBnZXRfZG1hX3Jlc2lkdWUoZGV2cHJpdi0+YWlfZG1hKTsJLy8gd2hlcmUgaXMgbm93IERNQQorCQl0b3AyID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmFpX2RtYSk7CisJCWlmICh0b3AxID09IHRvcDIpCisJCQlicmVhazsKKwl9CisKKwlpZiAodG9wMSAhPSB0b3AyKSB7CisJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXRvcDEgPSBkZXZwcml2LT5kbWFieXRlc3RvbW92ZVsxIC0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSAtIHRvcDE7CS8vIHdoZXJlIGlzIG5vdyBETUEgaW4gYnVmZmVyCisJdG9wMSA+Pj0gMTsJCS8vIHNhbXBsZSBwb3NpdGlvbgorCXRvcDIgPSB0b3AxIC0gZGV2cHJpdi0+YWlfcG9sbF9wdHI7CisJaWYgKHRvcDIgPCAxKSB7CQkvLyBubyBuZXcgc2FtcGxlcworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0cmFuc2Zlcl9mcm9tX2RtYV9idWYoZGV2LCBzLAorCQkodm9pZCAqKWRldnByaXYtPmRtYWJ1ZlsxIC0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSwKKwkJZGV2cHJpdi0+YWlfcG9sbF9wdHIsIHRvcDIpOworCisJZGV2cHJpdi0+YWlfcG9sbF9wdHIgPSB0b3AxOwkvLyBuZXcgYnVmZmVyIHBvc2l0aW9uCisKKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHMtPmFzeW5jLT5idWZfd3JpdGVfY291bnQgLSBzLT5hc3luYy0+YnVmX3JlYWRfY291bnQ7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBzZXR1cF9yYW5nZV9jaGFubmVsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHJhbmdlY2hhbiwgY2hhciB3YWl0KQoreworCXVuc2lnbmVkIGNoYXIgY2hhbl9yZWcgPSBDUl9DSEFOKHJhbmdlY2hhbik7CS8vIG5vcm1hbCBib2FyZAorCXVuc2lnbmVkIGNoYXIgZ2Fpbl9yZWcgPSBDUl9SQU5HRShyYW5nZWNoYW4pICsgZGV2cHJpdi0+cmFuZ2VfY29ycmVjdGlvbjsJLy8gZ2FpbiBpbmRleAorCisJaWYgKChjaGFuX3JlZyA9PSBkZXZwcml2LT5vbGRfY2hhbl9yZWcpCisJCSYmIChnYWluX3JlZyA9PSBkZXZwcml2LT5vbGRfZ2Fpbl9yZWcpKQorCQlyZXR1cm47CQkvLyB3ZSBjYW4gcmV0dXJuLCBubyBjaGFuZ2UKKworCWRldnByaXYtPm9sZF9jaGFuX3JlZyA9IGNoYW5fcmVnOworCWRldnByaXYtPm9sZF9nYWluX3JlZyA9IGdhaW5fcmVnOworCisJaWYgKGRldnByaXYtPnVzZV9NUEMpIHsKKwkJaWYgKGRldnByaXYtPnVzZV9kaWZmKSB7CisJCQljaGFuX3JlZyA9IGNoYW5fcmVnIHwgMHgzMDsJLy8gRElGRiBpbnB1dHMKKwkJfSBlbHNlIHsKKwkJCWlmIChjaGFuX3JlZyAmIDB4ODApIHsKKwkJCQljaGFuX3JlZyA9IGNoYW5fcmVnIHwgMHgyMDsJLy8gU0UgaW5wdXRzIDgtMTUKKwkJCX0gZWxzZSB7CisJCQkJY2hhbl9yZWcgPSBjaGFuX3JlZyB8IDB4MTA7CS8vIFNFIGlucHV0cyAwLTcKKwkJCX0KKwkJfQorCX0KKworCW91dGIoY2hhbl9yZWcsIGRldi0+aW9iYXNlICsgUENMODEyX01VWCk7CS8qIHNlbGVjdCBjaGFubmVsICovCisJb3V0YihnYWluX3JlZywgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfR0FJTik7CS8qIHNlbGVjdCBnYWluICovCisKKwlpZiAod2FpdCkgeworCQljb21lZGlfdWRlbGF5KGRldnByaXYtPm1heF84MTJfYWlfbW9kZTBfcmFuZ2V3YWl0KTsJLy8gWFhYIHRoaXMgZGVwZW5kcyBvbiBzZWxlY3RlZCByYW5nZSBhbmQgY2FuIGJlIHZlcnkgbG9uZyBmb3Igc29tZSBoaWdoIGdhaW4gcmFuZ2VzIQorCX0KK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRpdmlzb3IxLAorCXVuc2lnbmVkIGludCBkaXZpc29yMikKK3sKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBCR046IHN0YXJ0X3BhY2VyKCVkLCV1LCV1KVxuIiwgbW9kZSwgZGl2aXNvcjEsCisJCWRpdmlzb3IyKTsKKyNlbmRpZgorCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ1RSQ1RMKTsKKwlvdXRiKDB4NzQsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUkNUTCk7CisJY29tZWRpX3VkZWxheSgxKTsKKworCWlmIChtb2RlID09IDEpIHsKKwkJb3V0YihkaXZpc29yMiAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUjIpOworCQlvdXRiKChkaXZpc29yMiA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODEyX0NUUjIpOworCQlvdXRiKGRpdmlzb3IxICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ1RSMSk7CisJCW91dGIoKGRpdmlzb3IxID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ1RSMSk7CisJfQorI2lmZGVmIFBDTDgxMl9FWFRERUJVRworCXJ0X3ByaW50aygicGNsODEyIEVEQkc6IEVORDogc3RhcnRfcGFjZXIoLi4uKVxuIik7CisjZW5kaWYKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIGZyZWVfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlpZiAoZGV2cHJpdi0+ZG1hYnVmWzBdKQorCQkJZnJlZV9wYWdlcyhkZXZwcml2LT5kbWFidWZbMF0sIGRldnByaXYtPmRtYXBhZ2VzWzBdKTsKKwkJaWYgKGRldnByaXYtPmRtYWJ1ZlsxXSkKKwkJCWZyZWVfcGFnZXMoZGV2cHJpdi0+ZG1hYnVmWzFdLCBkZXZwcml2LT5kbWFwYWdlc1sxXSk7CisJCWlmIChkZXZwcml2LT5kbWEpCisJCQlmcmVlX2RtYShkZXZwcml2LT5kbWEpOworCX0KKwlpZiAoZGV2LT5pcnEpCisJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzX2JvYXJkLT5pb19yYW5nZSk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IHBjbDgxMl9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoInBjbDgxMiBFREJHOiBCR046IHBjbDgxMl9haV9jYW5jZWwoLi4uKVxuIik7CisjZW5kaWYKKwlpZiAoZGV2cHJpdi0+YWlfZG1hKQorCQlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKwlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDAsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOwkvKiBTdG9wIEEvRCAqLworCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIDgyNTQKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJcnRfcHJpbnRrKCJwY2w4MTIgRURCRzogRU5EOiBwY2w4MTJfYWlfY2FuY2VsKC4uLilcbiIpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBwY2w4MTJfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJcnRfcHJpbnRrKCJwY2w4MTIgRURCRzogQkdOOiBwY2w4MTJfcmVzZXQoLi4uKVxuIik7CisjZW5kaWYKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX01VWCk7CisJb3V0YigwICsgZGV2cHJpdi0+cmFuZ2VfY29ycmVjdGlvbiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfR0FJTik7CisJZGV2cHJpdi0+b2xkX2NoYW5fcmVnID0gLTE7CS8vIGludmFsaWRhdGUgY2hhaW4vZ2FpbiBtZW1vcnkKKwlkZXZwcml2LT5vbGRfZ2Fpbl9yZWcgPSAtMTsKKworCXN3aXRjaCAodGhpc19ib2FyZC0+Ym9hcmRfdHlwZSkgeworCWNhc2UgYm9hcmRQQ0w4MTJQRzoKKwljYXNlIGJvYXJkUENMODEyOgorCWNhc2UgYm9hcmRBQ0w4MTEyOgorCWNhc2UgYm9hcmRBQ0w4MjE2OgorCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0RBMl9MTyk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfREEyX0hJKTsKKwljYXNlIGJvYXJkQTgyMToKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9EQTFfTE8pOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0RBMV9ISSk7CisJCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIDgyNTQKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxMl9ET19ISSk7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfRE9fTE8pOworCQlvdXRiKGRldnByaXYtPm1vZGVfcmVnX2ludCB8IDAsIGRldi0+aW9iYXNlICsgUENMODEyX01PREUpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODEyX0NMUklOVCk7CisJCWJyZWFrOworCWNhc2UgYm9hcmRQQ0w4MTNCOgorCWNhc2UgYm9hcmRQQ0w4MTM6CisJY2FzZSBib2FyZElTTzgxMzoKKwljYXNlIGJvYXJkQUNMODExMzoKKwkJY29tZWRpX3VkZWxheSg1KTsKKwkJYnJlYWs7CisJfQorCWNvbWVkaV91ZGVsYXkoNSk7CisjaWZkZWYgUENMODEyX0VYVERFQlVHCisJcnRfcHJpbnRrKCJwY2w4MTIgRURCRzogRU5EOiBwY2w4MTJfcmVzZXQoLi4uKVxuIik7CisjZW5kaWYKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNsODEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0LCBzdWJkZXY7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBpbnQgZG1hOworCXVuc2lnbmVkIGxvbmcgcGFnZXM7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IG5fc3ViZGV2aWNlczsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHBjbDgxMjogIGJvYXJkPSVzLCBpb3BvcnQ9MHglMDNseCIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UsICJwY2w4MTIiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2w4MTJfcHJpdmF0ZSkpKSA8IDApIHsKKwkJZnJlZV9yZXNvdXJjZXMoZGV2KTsKKwkJcmV0dXJuIHJldDsJLyogQ2FuJ3QgYWxsb2MgbWVtICovCisJfQorCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKworCWlycSA9IDA7CisJaWYgKHRoaXNfYm9hcmQtPklSUWJpdHMgIT0gMCkgewkvKiBib2FyZCBzdXBwb3J0IElSUSAqLworCQlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKKwkJaWYgKGlycSkgewkvKiB3ZSB3YW50IHRvIHVzZSBJUlEgKi8KKwkJCWlmICgoKDEgPDwgaXJxKSAmIHRoaXNfYm9hcmQtPklSUWJpdHMpID09IDApIHsKKwkJCQlwcmludGsoIiwgSVJRICV1IGlzIG91dCBvZiBhbGxvd2VkIHJhbmdlLCBESVNBQkxJTkcgSVQiLCBpcnEpOworCQkJCWlycSA9IDA7CS8qIEJhZCBJUlEgKi8KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGludGVycnVwdF9wY2w4MTIsIDAsCisJCQkJCQkicGNsODEyIiwgZGV2KSkgeworCQkJCQlwcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIElSUSAldSwgRElTQUJMSU5HIElUIiwgaXJxKTsKKwkJCQkJaXJxID0gMDsJLyogQ2FuJ3QgdXNlIElSUSAqLworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50aygiLCBpcnE9JXUiLCBpcnEpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWRldi0+aXJxID0gaXJxOworCisJZG1hID0gMDsKKwlkZXZwcml2LT5kbWEgPSBkbWE7CisJaWYgKCFkZXYtPmlycSkKKwkJZ290byBub19kbWE7CS8qIGlmIHdlIGhhdmVuJ3QgSVJRLCB3ZSBjYW4ndCB1c2UgRE1BICovCisJaWYgKHRoaXNfYm9hcmQtPkRNQWJpdHMgIT0gMCkgewkvKiBib2FyZCBzdXBwb3J0IERNQSAqLworCQlkbWEgPSBpdC0+b3B0aW9uc1syXTsKKwkJaWYgKCgoMSA8PCBkbWEpICYgdGhpc19ib2FyZC0+RE1BYml0cykgPT0gMCkgeworCQkJcHJpbnRrKCIsIERNQSBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRkFJTCFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CS8qIEJhZCBETUEgKi8KKwkJfQorCQlyZXQgPSByZXF1ZXN0X2RtYShkbWEsICJwY2w4MTIiKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgJXUsIEZBSUwhXG4iLCBkbWEpOworCQkJcmV0dXJuIC1FQlVTWTsJLyogRE1BIGlzbid0IGZyZWUgKi8KKwkJfQorCQlkZXZwcml2LT5kbWEgPSBkbWE7CisJCXByaW50aygiLCBkbWE9JXUiLCBkbWEpOworCQlwYWdlcyA9IDE7CS8qIHdlIHdhbnQgOEtCICovCisJCWRldnByaXYtPmRtYWJ1ZlswXSA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlcyk7CisJCWlmICghZGV2cHJpdi0+ZG1hYnVmWzBdKSB7CisJCQlwcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKKwkJCS8qIG1heWJlIGV4cGVyaW1lbnQgd2l0aCB0cnlfdG9fZnJlZV9wYWdlcygpIHdpbGwgaGVscCAuLi4uICovCisJCQlmcmVlX3Jlc291cmNlcyhkZXYpOworCQkJcmV0dXJuIC1FQlVTWTsJLyogbm8gYnVmZmVyIDotKCAqLworCQl9CisJCWRldnByaXYtPmRtYXBhZ2VzWzBdID0gcGFnZXM7CisJCWRldnByaXYtPmh3ZG1hcHRyWzBdID0gdmlydF90b19idXMoKHZvaWQgKilkZXZwcml2LT5kbWFidWZbMF0pOworCQlkZXZwcml2LT5od2RtYXNpemVbMF0gPSBQQUdFX1NJWkUgKiAoMSA8PCBwYWdlcyk7CisJCWRldnByaXYtPmRtYWJ1ZlsxXSA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlcyk7CisJCWlmICghZGV2cHJpdi0+ZG1hYnVmWzFdKSB7CisJCQlwcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKKwkJCWZyZWVfcmVzb3VyY2VzKGRldik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWRldnByaXYtPmRtYXBhZ2VzWzFdID0gcGFnZXM7CisJCWRldnByaXYtPmh3ZG1hcHRyWzFdID0gdmlydF90b19idXMoKHZvaWQgKilkZXZwcml2LT5kbWFidWZbMV0pOworCQlkZXZwcml2LT5od2RtYXNpemVbMV0gPSBQQUdFX1NJWkUgKiAoMSA8PCBwYWdlcyk7CisJfQorICAgICAgbm9fZG1hOgorCisJbl9zdWJkZXZpY2VzID0gMDsKKwlpZiAodGhpc19ib2FyZC0+bl9haWNoYW4gPiAwKQorCQluX3N1YmRldmljZXMrKzsKKwlpZiAodGhpc19ib2FyZC0+bl9hb2NoYW4gPiAwKQorCQluX3N1YmRldmljZXMrKzsKKwlpZiAodGhpc19ib2FyZC0+bl9kaWNoYW4gPiAwKQorCQluX3N1YmRldmljZXMrKzsKKwlpZiAodGhpc19ib2FyZC0+bl9kb2NoYW4gPiAwKQorCQluX3N1YmRldmljZXMrKzsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkgeworCQlmcmVlX3Jlc291cmNlcyhkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXN1YmRldiA9IDA7CisKKwkvKiBhbmFsb2cgaW5wdXQgKi8KKwlpZiAodGhpc19ib2FyZC0+bl9haWNoYW4gPiAwKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCQlzd2l0Y2ggKHRoaXNfYm9hcmQtPmJvYXJkX3R5cGUpIHsKKwkJY2FzZSBib2FyZEE4MjE6CisJCQlpZiAoaXQtPm9wdGlvbnNbMl0gPT0gMSkgeworCQkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuX2RpZmY7CisJCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9ESUZGOworCQkJCWRldnByaXYtPnVzZV9kaWZmID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9haWNoYW47CisJCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9HUk9VTkQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBib2FyZEFDTDgxMTI6CisJCWNhc2UgYm9hcmRBQ0w4MjE2OgorCQkJaWYgKGl0LT5vcHRpb25zWzRdID09IDEpIHsKKwkJCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbl9kaWZmOworCQkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfRElGRjsKKwkJCQlkZXZwcml2LT51c2VfZGlmZiA9IDE7CisJCQl9IGVsc2UgeworCQkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuOworCQkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfR1JPVU5EOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfR1JPVU5EOworCQkJYnJlYWs7CisJCX0KKwkJcy0+bWF4ZGF0YSA9IHRoaXNfYm9hcmQtPmFpX21heGRhdGE7CisJCXMtPmxlbl9jaGFubGlzdCA9IE1BWF9DSEFOTElTVF9MRU47CisJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cmFuZ2VsaXN0X2FpOworCQlpZiAodGhpc19ib2FyZC0+Ym9hcmRfdHlwZSA9PSBib2FyZEFDTDgyMTYpIHsKKwkJCXMtPmluc25fcmVhZCA9IGFjbDgyMTZfYWlfaW5zbl9yZWFkOworCQl9IGVsc2UgeworCQkJcy0+aW5zbl9yZWFkID0gcGNsODEyX2FpX2luc25fcmVhZDsKKwkJfQorCQlkZXZwcml2LT51c2VfTVBDID0gdGhpc19ib2FyZC0+aGF2ZU1QQzUwODsKKwkJcy0+Y2FuY2VsID0gcGNsODEyX2FpX2NhbmNlbDsKKwkJaWYgKGRldi0+aXJxKSB7CisJCQlkZXYtPnJlYWRfc3ViZGV2ID0gczsKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfQ01EX1JFQUQ7CisJCQlzLT5kb19jbWR0ZXN0ID0gcGNsODEyX2FpX2NtZHRlc3Q7CisJCQlzLT5kb19jbWQgPSBwY2w4MTJfYWlfY21kOworCQkJcy0+cG9sbCA9IHBjbDgxMl9haV9wb2xsOworCQl9CisJCXN3aXRjaCAodGhpc19ib2FyZC0+Ym9hcmRfdHlwZSkgeworCQljYXNlIGJvYXJkUENMODEyUEc6CisJCQlpZiAoaXQtPm9wdGlvbnNbNF0gPT0gMSkKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9wY2w4MTJwZzJfYWk7CisJCQlicmVhazsKKwkJY2FzZSBib2FyZFBDTDgxMjoKKwkJCXN3aXRjaCAoaXQtPm9wdGlvbnNbNF0pIHsKKwkJCWNhc2UgMDoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjU7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjJfNTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZTgxMl9iaXBvbGFyMV8yNTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZTgxMl9iaXBvbGFyMF82MjU7CisJCQkJYnJlYWs7CisJCQljYXNlIDU6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2U4MTJfYmlwb2xhcjBfMzEyNTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJCWJyZWFrOworCQkJCXByaW50aygiLCBpbmNvcnJlY3QgcmFuZ2UgbnVtYmVyICVkLCBjaGFuZ2luZyB0byAwICgrLy0xMFYpIiwgaXQtPm9wdGlvbnNbNF0pOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCQlicmVhazsKKwkJY2FzZSBib2FyZFBDTDgxM0I6CisJCQlpZiAoaXQtPm9wdGlvbnNbMV0gPT0gMSkKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9wY2w4MTNiMl9haTsKKwkJCWJyZWFrOworCQljYXNlIGJvYXJkSVNPODEzOgorCQkJc3dpdGNoIChpdC0+b3B0aW9uc1sxXSkgeworCQkJY2FzZSAwOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2lzbzgxM18xX2FpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2lzbzgxM18xXzJfYWk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfaXNvODEzXzJfYWk7CisJCQkJZGV2cHJpdi0+cmFuZ2VfY29ycmVjdGlvbiA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfaXNvODEzXzJfMl9haTsKKwkJCQlkZXZwcml2LT5yYW5nZV9jb3JyZWN0aW9uID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfaXNvODEzXzFfYWk7CisJCQkJYnJlYWs7CisJCQkJcHJpbnRrKCIsIGluY29ycmVjdCByYW5nZSBudW1iZXIgJWQsIGNoYW5naW5nIHRvIDAgIiwgaXQtPm9wdGlvbnNbMV0pOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgYm9hcmRBQ0w4MTEzOgorCQkJc3dpdGNoIChpdC0+b3B0aW9uc1sxXSkgeworCQkJY2FzZSAwOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2FjbDgxMTNfMV9haTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hY2w4MTEzXzFfMl9haTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hY2w4MTEzXzJfYWk7CisJCQkJZGV2cHJpdi0+cmFuZ2VfY29ycmVjdGlvbiA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYWNsODExM18yXzJfYWk7CisJCQkJZGV2cHJpdi0+cmFuZ2VfY29ycmVjdGlvbiA9IDE7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2FjbDgxMTNfMV9haTsKKwkJCQlicmVhazsKKwkJCQlwcmludGsoIiwgaW5jb3JyZWN0IHJhbmdlIG51bWJlciAlZCwgY2hhbmdpbmcgdG8gMCAiLCBpdC0+b3B0aW9uc1sxXSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlzdWJkZXYrKzsKKwl9CisKKwkvKiBhbmFsb2cgb3V0cHV0ICovCisJaWYgKHRoaXNfYm9hcmQtPm5fYW9jaGFuID4gMCkgeworCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2OworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRSB8IFNERl9HUk9VTkQ7CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYW9jaGFuOworCQlzLT5tYXhkYXRhID0gMHhmZmY7CisJCXMtPmxlbl9jaGFubGlzdCA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gdGhpc19ib2FyZC0+cmFuZ2VsaXN0X2FvOworCQlzLT5pbnNuX3JlYWQgPSBwY2w4MTJfYW9faW5zbl9yZWFkOworCQlzLT5pbnNuX3dyaXRlID0gcGNsODEyX2FvX2luc25fd3JpdGU7CisJCXN3aXRjaCAodGhpc19ib2FyZC0+Ym9hcmRfdHlwZSkgeworCQljYXNlIGJvYXJkQTgyMToKKwkJCWlmIChpdC0+b3B0aW9uc1szXSA9PSAxKQorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJCQlicmVhazsKKwkJY2FzZSBib2FyZFBDTDgxMjoKKwkJY2FzZSBib2FyZEFDTDgxMTI6CisJCWNhc2UgYm9hcmRQQ0w4MTJQRzoKKwkJY2FzZSBib2FyZEFDTDgyMTY6CisJCQlpZiAoaXQtPm9wdGlvbnNbNV0gPT0gMSkKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmlwb2xhcjEwOworCQkJaWYgKGl0LT5vcHRpb25zWzVdID09IDIpCisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKKwkJCWJyZWFrOworCQl9CisJCXN1YmRldisrOworCX0KKworCS8qIGRpZ2l0YWwgaW5wdXQgKi8KKwlpZiAodGhpc19ib2FyZC0+bl9kaWNoYW4gPiAwKSB7CisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXY7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2RpY2hhbjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fZGljaGFuOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2JpdHMgPSBwY2w4MTJfZGlfaW5zbl9iaXRzOworCQlzdWJkZXYrKzsKKwl9CisKKwkvKiBkaWdpdGFsIG91dHB1dCAqLworCWlmICh0aGlzX2JvYXJkLT5uX2RvY2hhbiA+IDApIHsKKwkJcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fZG9jaGFuOworCQlzLT5tYXhkYXRhID0gMTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gdGhpc19ib2FyZC0+bl9kb2NoYW47CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IHBjbDgxMl9kb19pbnNuX2JpdHM7CisJCXN1YmRldisrOworCX0KKworCXN3aXRjaCAodGhpc19ib2FyZC0+Ym9hcmRfdHlwZSkgeworCWNhc2UgYm9hcmRBQ0w4MjE2OgorCQlkZXZwcml2LT5haV9pczE2YiA9IDE7CisJY2FzZSBib2FyZFBDTDgxMlBHOgorCWNhc2UgYm9hcmRQQ0w4MTI6CisJY2FzZSBib2FyZEFDTDgxMTI6CisJCWRldnByaXYtPm1heF84MTJfYWlfbW9kZTBfcmFuZ2V3YWl0ID0gMTsKKwkJaWYgKGl0LT5vcHRpb25zWzNdID4gMCkKKwkJCWRldnByaXYtPnVzZV9leHRfdHJnID0gMTsJLy8gd2UgdXNlIGV4dGVybmFsIHRyaWdnZXIKKwljYXNlIGJvYXJkQTgyMToKKwkJZGV2cHJpdi0+bWF4XzgxMl9haV9tb2RlMF9yYW5nZXdhaXQgPSAxOworCQlkZXZwcml2LT5tb2RlX3JlZ19pbnQgPSAoaXJxIDw8IDQpICYgMHhmMDsKKwkJYnJlYWs7CisJY2FzZSBib2FyZFBDTDgxM0I6CisJY2FzZSBib2FyZFBDTDgxMzoKKwljYXNlIGJvYXJkSVNPODEzOgorCWNhc2UgYm9hcmRBQ0w4MTEzOgorCQlkZXZwcml2LT5tYXhfODEyX2FpX21vZGUwX3Jhbmdld2FpdCA9IDU7CS8qIG1heWJlIHRoZXJlIG11c3QgYnkgZ3JlYXRlc3QgdGltZW91dCAqLworCQlicmVhazsKKwl9CisKKwlwcmludGsoIlxuIik7CisJZGV2cHJpdi0+dmFsaWQgPSAxOworCisJcGNsODEyX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgaW50IHBjbDgxMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisKKyNpZmRlZiBQQ0w4MTJfRVhUREVCVUcKKwlydF9wcmludGsoImNvbWVkaSVkOiBwY2w4MTI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisjZW5kaWYKKwlmcmVlX3Jlc291cmNlcyhkZXYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNWJhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE2LmMKQEAgLTAsMCArMSwxMjUxIEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvcGNsODE2LmMKKworICAgQXV0aG9yOiAgSnVhbiBHcmlnZXJhIDxqdWFuQGdyaWdlcmEuY29tLmFyPgorICAgICAgICAgICAgYmFzZWQgb24gcGNsODE4IGJ5IE1pY2hhbCBEb2JlcyA8ZG9iZXNAdGVzbmV0LmN6PiBhbmQgYml0cyBvZiBwY2w4MTIKKworICAgaGFyZHdhcmUgZHJpdmVyIGZvciBBZHZhbnRlY2ggY2FyZHM6CisgICAgY2FyZDogICBQQ0wtODE2LCBQQ0w4MTRCCisgICAgZHJpdmVyOiBwY2w4MTYKKyovCisvKgorRHJpdmVyOiBwY2w4MTYKK0Rlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENMLTgxNiBjYXJkcywgUENMLTgxNAorQXV0aG9yOiBKdWFuIEdyaWdlcmEgPGp1YW5AZ3JpZ2VyYS5jb20uYXI+CitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ0wtODE2IChwY2w4MTYpLCBQQ0wtODE0QiAocGNsODE0YikKK1N0YXR1czogd29ya3MKK1VwZGF0ZWQ6IFR1ZSwgIDIgQXByIDIwMDIgMjM6MTU6MjEgLTA4MDAKKworUENMIDgxNiBhbmQgODE0QiBoYXZlIDE2IFNFL0RJRkYgQURDcywgMTYgREFDcywgMTYgREkgYW5kIDE2IERPLgorRGlmZmVyZW5jZXMgYXJlIGF0IHJlc29sdXRpb24gKDE2IHZzIDEyIGJpdHMpLgorCitUaGUgZHJpdmVyIHN1cHBvcnQgQUkgY29tbWFuZCBtb2RlLCBvdGhlciBzdWJkZXZpY2VzIG5vdCB3cml0dGVuLgorCitBbmFsb2cgb3V0cHV0IGFuZCBkaWdpdGFsIGlucHV0IGFuZCBvdXRwdXQgYXJlIG5vdCBzdXBwb3J0ZWQuCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gSU8gQmFzZQorICBbMV0gLSBJUlEJKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNykKKyAgWzJdIC0gRE1BCSgwPWRpc2FibGUsIDEsIDMpCisgIFszXSAtIDAsIDEwPTEwTUh6IGNsb2NrIGZvciA4MjU0CisgICAgICAgICAgICAxPSAxTUh6IGNsb2NrIGZvciA4MjU0CisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L21jMTQ2ODE4cnRjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CisKKyNpbmNsdWRlICI4MjUzLmgiCisKKyNkZWZpbmUgREVCVUcoeCkgeAorCisvLyBib2FyZHMgY29uc3RhbnRzCisvLyBJTyBzcGFjZSBsZW4KKyNkZWZpbmUgUENMeDF4X1JBTkdFIDE2CisKKy8vI2RlZmluZSBvdXRiKHgseSkgIHByaW50aygiT1VUQigleCwgMjAwKyVkKVxuIiwgeCx5LTB4MjAwKTsgb3V0Yih4LHkpCisKKy8vIElOVEVMIDgyNTQgY291bnRlcnMKKyNkZWZpbmUgUENMODE2X0NUUjAgNAorI2RlZmluZSBQQ0w4MTZfQ1RSMSA1CisjZGVmaW5lIFBDTDgxNl9DVFIyIDYKKy8vIFI6IGNvdW50ZXIgcmVhZC1iYWNrIHJlZ2lzdGVyIFc6IGNvdW50ZXIgY29udHJvbAorI2RlZmluZSBQQ0w4MTZfQ1RSQ1RMIDcKKworLy8gUjogQS9EIGhpZ2ggYnl0ZSBXOiBBL0QgcmFuZ2UgY29udHJvbAorI2RlZmluZSBQQ0w4MTZfUkFOR0UgOQorLy8gVzogY2xlYXIgSU5UIHJlcXVlc3QKKyNkZWZpbmUgUENMODE2X0NMUklOVCAxMAorLy8gUjogbmV4dCBtdXggc2NhbiBjaGFubmVsIFc6IG11eCBzY2FuIGNoYW5uZWwgJiByYW5nZSBjb250cm9sIHBvaW50ZXIKKyNkZWZpbmUgUENMODE2X01VWCAxMQorLy8gUi9XOiBvcGVyYXRpb24gY29udHJvbCByZWdpc3RlcgorI2RlZmluZSBQQ0w4MTZfQ09OVFJPTCAxMgorCisvLyBSOiByZXR1cm4gc3RhdHVzIGJ5dGUgIFc6IHNldCBETUEvSVJRCisjZGVmaW5lIFBDTDgxNl9TVEFUVVMgMTMKKyNkZWZpbmUgUENMODE2X1NUQVRVU19EUkRZX01BU0sgMHg4MAorCisvLyBSOiBsb3cgYnl0ZSBvZiBBL0QgVzogc29mdCBBL0QgdHJpZ2dlcgorI2RlZmluZSBQQ0w4MTZfQURfTE8gOAorLy8gUjogaGlnaCBieXRlIG9mIEEvRCBXOiBBL0QgcmFuZ2UgY29udHJvbAorI2RlZmluZSBQQ0w4MTZfQURfSEkgOQorCisvLyB0eXBlIG9mIGludGVycnVwdCBoYW5kbGVyCisjZGVmaW5lIElOVF9UWVBFX0FJMV9JTlQgMQorI2RlZmluZSBJTlRfVFlQRV9BSTFfRE1BIDIKKyNkZWZpbmUgSU5UX1RZUEVfQUkzX0lOVCA0CisjZGVmaW5lIElOVF9UWVBFX0FJM19ETUEgNQorI2lmZGVmIHVudXNlZAorI2RlZmluZSBJTlRfVFlQRV9BSTFfRE1BX1JUQyA5CisjZGVmaW5lIElOVF9UWVBFX0FJM19ETUFfUlRDIDEwCisKKy8vIFJUQyBzdHVmZi4uLgorI2RlZmluZSBSVENfSVJRIAk4CisjZGVmaW5lIFJUQ19JT19FWFRFTlQJMHgxMAorI2VuZGlmCisKKyNkZWZpbmUgTUFHSUNfRE1BX1dPUkQgMHg1YTVhCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2w4MTYgPSB7IDgsIHsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoNSksCisJCQlCSVBfUkFOR0UoMi41KSwKKwkJCUJJUF9SQU5HRSgxLjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwl9Cit9Oworc3RydWN0IHBjbDgxNl9ib2FyZCB7CisKKwljb25zdCBjaGFyICpuYW1lOwkvLyBib2FyZCBuYW1lCisJaW50IG5fcmFuZ2VzOwkJLy8gbGVuIG9mIHJhbmdlIGxpc3QKKwlpbnQgbl9haWNoYW47CQkvLyBudW0gb2YgQS9EIGNoYW5zIGluIGRpZmVyZW5jaWFsIG1vZGUKKwl1bnNpZ25lZCBpbnQgYWlfbnNfbWluOwkvLyBtaW5pbWFsIGFsbGxvd2VkIGRlbGF5IGJldHdlZW4gc2FtcGxlcyAoaW4gbnMpCisJaW50IG5fYW9jaGFuOwkJLy8gbnVtIG9mIEQvQSBjaGFucworCWludCBuX2RpY2hhbjsJCS8vIG51bSBvZiBESSBjaGFucworCWludCBuX2RvY2hhbjsJCS8vIG51bSBvZiBETyBjaGFucworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICphaV9yYW5nZV90eXBlOwkvLyBkZWZhdWx0IEEvRCByYW5nZWxpc3QKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfdHlwZTsJLy8gZGFmYXVsdCBEL0EgcmFuZ2VsaXN0CisJdW5zaWduZWQgaW50IGlvX3JhbmdlOwkvLyBsZW4gb2YgSU8gc3BhY2UKKwl1bnNpZ25lZCBpbnQgSVJRYml0czsJLy8gYWxsb3dlZCBpbnRlcnJ1cHRzCisJdW5zaWduZWQgaW50IERNQWJpdHM7CS8vIGFsbG93ZWQgRE1BIGNoYW5zCisJaW50IGFpX21heGRhdGE7CQkvLyBtYXhkYXRhIGZvciBBL0QKKwlpbnQgYW9fbWF4ZGF0YTsJCS8vIG1heGRhdGEgZm9yIEQvQQorCWludCBhaV9jaGFubGlzdDsJLy8gYWxsb3dlZCBsZW4gb2YgY2hhbm5lbCBsaXN0IEEvRAorCWludCBhb19jaGFubGlzdDsJLy8gYWxsb3dlZCBsZW4gb2YgY2hhbm5lbCBsaXN0IEQvQQorCWludCBpODI1NF9vc2NfYmFzZTsJLy8gMS9mcmVxdWVuY3kgb2Ygb24gYm9hcmQgb3NjaWxhdG9yIGluIG5zCit9OworCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNsODE2X2JvYXJkIGJvYXJkdHlwZXNbXSA9IHsKKwl7InBjbDgxNiIsIDgsIDE2LCAxMDAwMCwgMSwgMTYsIDE2LCAmcmFuZ2VfcGNsODE2LAorCQkJJnJhbmdlX3BjbDgxNiwgUENMeDF4X1JBTkdFLAorCQkJMHgwMGZjLAkvLyBJUlEgbWFzaworCQkJMHgwYSwJLy8gRE1BIG1hc2sKKwkJCTB4ZmZmZiwJLy8gMTYtYml0IGNhcmQKKwkJCTB4ZmZmZiwJLy8gRC9BIG1heGRhdGEKKwkJCTEwMjQsCisJCQkxLAkvLyBhbyBjaGFuIGxpc3QKKwkJMTAwfSwKKwl7InBjbDgxNGIiLCA4LCAxNiwgMTAwMDAsIDEsIDE2LCAxNiwgJnJhbmdlX3BjbDgxNiwKKwkJCSZyYW5nZV9wY2w4MTYsIFBDTHgxeF9SQU5HRSwKKwkJCTB4MDBmYywKKwkJCTB4MGEsCisJCQkweDNmZmYsCS8qIDE0IGJpdCBjYXJkICovCisJCQkweDNmZmYsCisJCQkxMDI0LAorCQkJMSwKKwkJMTAwfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBwY2w4MTZfYm9hcmQpKQorI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbDgxNl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbDgxNl9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgaW50IHBjbDgxNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBwY2w4MTZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworI2lmZGVmIHVudXNlZAorc3RhdGljIGludCBSVENfbG9jayA9IDA7CS8qIFJUQyBsb2NrICovCitzdGF0aWMgaW50IFJUQ190aW1lcl9sb2NrID0gMDsJLyogUlRDIGludCBsb2NrICovCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY2w4MTYgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNsODE2IiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY2w4MTZfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbDgxNl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHR5cGVzWzBdLm5hbWUsCisgICAgICBudW1fbmFtZXM6bl9ib2FyZHR5cGVzLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgcGNsODE2X2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNsODE2KTsKKworc3RydWN0IHBjbDgxNl9wcml2YXRlIHsKKworCXVuc2lnbmVkIGludCBkbWE7CS8vIHVzZWQgRE1BLCAwPWRvbid0IHVzZSBETUEKKwlpbnQgZG1hX3J0YzsJCS8vIDE9UlRDIHVzZWQgd2l0aCBETUEsIDA9bm8gUlRDIGFsbG9jCisjaWZkZWYgdW51c2VkCisJdW5zaWduZWQgbG9uZyBydGNfaW9iYXNlOwkvLyBSVEMgcG9ydCByZWdpb24KKwl1bnNpZ25lZCBpbnQgcnRjX2lvc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnRjX2lycTsKKyNlbmRpZgorCXVuc2lnbmVkIGxvbmcgZG1hYnVmWzJdOwkvLyBwb2ludGVycyB0byBiZWdpbiBvZiBETUEgYnVmZmVycworCXVuc2lnbmVkIGludCBkbWFwYWdlc1syXTsJLy8gbGVuIG9mIERNQSBidWZmZXJzIGluIFBBR0VfU0laRXMKKwl1bnNpZ25lZCBpbnQgaHdkbWFwdHJbMl07CS8vIGhhcmR3YXJlIGFkZHJlc3Mgb2YgRE1BIGJ1ZmZlcnMKKwl1bnNpZ25lZCBpbnQgaHdkbWFzaXplWzJdOwkvLyBsZW4gb2YgRE1BIGJ1ZmZlcnMgaW4gQnl0ZXMKKwl1bnNpZ25lZCBpbnQgZG1hc2FtcGxzaXplOwkvLyBzaXplIGluIHNhbXBsZXMgaHdkbWFzaXplWzBdLzIKKwl1bnNpZ25lZCBpbnQgbGFzdF90b3BfZG1hOwkvLyBETUEgcG9pbnRlciBpbiBsYXN0IFJUQyBpbnQKKwlpbnQgbmV4dF9kbWFfYnVmOwkvLyB3aGljaCBETUEgYnVmZmVyIHdpbGwgYmUgdXNlZCBuZXh0IHJvdW5kCisJbG9uZyBkbWFfcnVuc190b19lbmQ7CS8vIGhvdyBtYW55IHdlIG11c3QgcGVybW9ybSBETUEgdHJhbnNmZXIgdG8gZW5kIG9mIHJlY29yZAorCXVuc2lnbmVkIGxvbmcgbGFzdF9kbWFfcnVuOwkvLyBob3cgbWFueSBieXRlcyB3ZSBtdXN0IHRyYW5zZmVyIG9uIGxhc3QgRE1BIHBhZ2UKKworCXVuc2lnbmVkIGludCBhaV9zY2FuczsJLy8gbGVuIG9mIHNjYW5saXN0CisJdW5zaWduZWQgY2hhciBhaV9uZXZlcmVuZGluZzsJLy8gaWY9MSwgdGhlbiB3ZSBkbyBuZXZlcmVuZGluZyByZWNvcmQgKHlvdSBtdXN0IHVzZSBjYW5jZWwoKSkKKwlpbnQgaXJxX2ZyZWU7CQkvLyAxPWhhdmUgYWxsb2NhdGVkIElSUQorCWludCBpcnFfYmxvY2tlZDsJLy8gMT1JUlEgbm93IHVzZXMgYW55IHN1YmRldgorI2lmZGVmIHVudXNlZAorCWludCBydGNfaXJxX2Jsb2NrZWQ7CS8vIDE9d2Ugbm93IGRvIEFJIHdpdGggRE1BJlJUQworI2VuZGlmCisJaW50IGlycV93YXNfbm93X2Nsb3NlZDsJLy8gd2hlbiBJUlEgZmluaXNoLCB0aGVyZSdzIHN0b3JlZCBpbnQ4MTZfbW9kZSBmb3IgbGFzdCBpbnRlcnJ1cHQKKwlpbnQgaW50ODE2X21vZGU7CS8vIHdobyBub3cgdXNlcyBJUlEgLSAxPUFJMSBpbnQsIDI9QUkxIGRtYSwgMz1BSTMgaW50LCA0QUkzIGRtYQorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpsYXN0X2ludF9zdWI7CS8vIHB0ciB0byBzdWJkZXZpY2Ugd2hpY2ggbm93IGZpbmlzaAorCWludCBhaV9hY3Rfc2NhbjsJLy8gaG93IG1hbnkgc2NhbnMgd2UgZmluaXNoZWQKKwl1bnNpZ25lZCBpbnQgYWlfYWN0X2NoYW5saXN0WzE2XTsJLy8gTVVYIHNldHRpbmcgZm9yIGFjdHVhbCBBSSBvcGVyYXRpb25zCisJdW5zaWduZWQgaW50IGFpX2FjdF9jaGFubGlzdF9sZW47CS8vIGhvdyBsb25nIGlzIGFjdHVhbCBNVVggbGlzdAorCXVuc2lnbmVkIGludCBhaV9hY3RfY2hhbmxpc3RfcG9zOwkvLyBhY3R1YWwgcG9zaXRpb24gaW4gTVVYIGxpc3QKKwl1bnNpZ25lZCBpbnQgYWlfcG9sbF9wdHI7CS8vIGhvdyBtYW55IHNhbXBlcyB0cmFuc2ZlciBwb2xsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1Yl9haTsJLy8gcHRyIHRvIEFJIHN1YmRldmljZQorI2lmZGVmIHVudXNlZAorCXN0cnVjdCB0aW1lcl9saXN0IHJ0Y19pcnFfdGltZXI7CS8vIHRpbWVyIGZvciBSVEMgc2FuaXR5IGNoZWNrCisJdW5zaWduZWQgbG9uZyBydGNfZnJlcTsJLy8gUlRDIGludCBmcmVxCisjZW5kaWYKK307CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgY2hlY2tfYW5kX3NldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsIGludCBjaGFubGVuKTsKK3N0YXRpYyBpbnQgcGNsODE2X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRpdmlzb3IxLAorCXVuc2lnbmVkIGludCBkaXZpc29yMik7CisjaWZkZWYgdW51c2VkCitzdGF0aWMgaW50IHNldF9ydGNfaXJxX2JpdCh1bnNpZ25lZCBjaGFyIGJpdCk7CisjZW5kaWYKKworc3RhdGljIGludCBwY2w4MTZfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKTsKK3N0YXRpYyBpbnQgcGNsODE2X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgQU5BTE9HIElOUFVUIE1PREUwLCA4MTYgY2FyZHMsIHNsb3cgdmVyc2lvbgorKi8KK3N0YXRpYyBpbnQgcGNsODE2X2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IHRpbWVvdXQ7CisKKwlEUFJJTlRLKCJtb2RlIDAgYW5hbG9nIGlucHV0XG4iKTsKKwkvLyBzb2Z0d2FyZSB0cmlnZ2VyLCBETUEgYW5kIElOVCBvZmYKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOworCS8vIGNsZWFyIElOVCAoY29udmVyc2lvbiBlbmQpIGZsYWcKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7CisKKwkvLyBTZXQgdGhlIGlucHV0IGNoYW5uZWwKKwlvdXRiKENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpICYgMHhmLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9NVVgpOworCW91dGIoQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9SQU5HRSk7CS8qIHNlbGVjdCBnYWluICovCisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9MTyk7CS8qIHN0YXJ0IGNvbnZlcnNpb24gKi8KKworCQl0aW1lb3V0ID0gMTAwOworCQl3aGlsZSAodGltZW91dC0tKSB7CisJCQlpZiAoIShpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfU1RBVFVTKSAmCisJCQkJCVBDTDgxNl9TVEFUVVNfRFJEWV9NQVNLKSkgeworCQkJCS8vIHJldHVybiByZWFkIHZhbHVlCisJCQkJZGF0YVtuXSA9CisJCQkJCSgoaW5iKGRldi0+aW9iYXNlICsKKwkJCQkJCQlQQ0w4MTZfQURfSEkpIDw8IDgpIHwKKwkJCQkJKGluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9MTykpKTsKKworCQkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIChjb252ZXJzaW9uIGVuZCkgZmxhZyAqLworCQkJCWJyZWFrOworCQkJfQorCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJfQorCQkvLyBSZXR1cm4gdGltZW91dCBlcnJvcgorCQlpZiAoIXRpbWVvdXQpIHsKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgaW5zbiB0aW1lb3V0XG4iKTsKKwkJCWRhdGFbMF0gPSAwOworCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgKGNvbnZlcnNpb24gZW5kKSBmbGFnICovCisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCisJfQorCXJldHVybiBuOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBhbmFsb2cgaW5wdXQgaW50ZXJydXB0IG1vZGUgMSAmIDMsIDgxOCBjYXJkcworICAgb25lIHNhbXBsZSBwZXIgaW50ZXJydXB0IHZlcnNpb24KKyovCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbDgxNl9haV9tb2RlMTNfaW50KGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWludCBsb3csIGhpOworCWludCB0aW1lb3V0ID0gNTA7CS8qIHdhaXQgbWF4IDUwdXMgKi8KKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJaWYgKCEoaW5iKGRldi0+aW9iYXNlICsgUENMODE2X1NUQVRVUykgJgorCQkJCVBDTDgxNl9TVEFUVVNfRFJEWV9NQVNLKSkKKwkJCWJyZWFrOworCQljb21lZGlfdWRlbGF5KDEpOworCX0KKwlpZiAoIXRpbWVvdXQpIHsJCS8vIHRpbWVvdXQsIGJhaWwgZXJyb3IKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCQljb21lZGlfZXJyb3IoZGV2LCAiQS9EIG1vZGUxLzMgSVJRIHdpdGhvdXQgRFJEWSEiKTsKKwkJcGNsODE2X2FpX2NhbmNlbChkZXYsIHMpOworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwl9CisKKwkvLyBnZXQgdGhlIHNhbXBsZQorCWxvdyA9IGluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9MTyk7CisJaGkgPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQURfSEkpOworCisJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIChoaSA8PCA4KSB8IGxvdyk7CisKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisKKwlpZiAoKytkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RfcG9zID49IGRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9sZW4pCisJCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9wb3MgPSAwOworCisJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CisJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CisJfQorCisJaWYgKCFkZXZwcml2LT5haV9uZXZlcmVuZGluZykKKwkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID49IGRldnByaXYtPmFpX3NjYW5zKSB7CS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCXBjbDgxNl9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJfQorCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgYW5hbG9nIGlucHV0IGRtYSBtb2RlIDEgJiAzLCA4MTYgY2FyZHMKKyovCitzdGF0aWMgdm9pZCB0cmFuc2Zlcl9mcm9tX2RtYV9idWYoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzaG9ydCAqIHB0ciwgdW5zaWduZWQgaW50IGJ1ZnB0ciwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCXMtPmFzeW5jLT5ldmVudHMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisKKwkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIHB0cltidWZwdHIrK10pOworCisJCWlmICgrK2RldnByaXYtPmFpX2FjdF9jaGFubGlzdF9wb3MgPj0KKwkJCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9sZW4pIHsKKwkJCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9wb3MgPSAwOworCQkJZGV2cHJpdi0+YWlfYWN0X3NjYW4rKzsKKwkJfQorCisJCWlmICghZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpCisJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPj0gZGV2cHJpdi0+YWlfc2NhbnMpIHsJLy8gYWxsIGRhdGEgc2FtcGxlZAorCQkJCXBjbDgxNl9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfQkxPQ0s7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCisJY29tZWRpX2V2ZW50KGRldiwgcyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNsODE2X2FpX21vZGUxM19kbWEoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJaW50IGxlbiwgYnVmcHRyLCB0aGlzX2RtYV9idWY7CisJdW5zaWduZWQgbG9uZyBkbWFfZmxhZ3M7CisJc2hvcnQgKnB0cjsKKworCWRpc2FibGVfZG1hKGRldnByaXYtPmRtYSk7CisJdGhpc19kbWFfYnVmID0gZGV2cHJpdi0+bmV4dF9kbWFfYnVmOworCisJaWYgKChkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPiAtMSkgfHwgZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpIHsJLy8gc3dpdGNoIGRtYSBidWZzCisKKwkJZGV2cHJpdi0+bmV4dF9kbWFfYnVmID0gMSAtIGRldnByaXYtPm5leHRfZG1hX2J1ZjsKKwkJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYSwgRE1BX01PREVfUkVBRCk7CisJCWRtYV9mbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisvLyAgY2xlYXJfZG1hX2ZmIChkZXZwcml2LT5kbWEpOworCQlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hLAorCQkJZGV2cHJpdi0+aHdkbWFwdHJbZGV2cHJpdi0+bmV4dF9kbWFfYnVmXSk7CisJCWlmIChkZXZwcml2LT5kbWFfcnVuc190b19lbmQpIHsKKwkJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLAorCQkJCWRldnByaXYtPmh3ZG1hc2l6ZVtkZXZwcml2LT5uZXh0X2RtYV9idWZdKTsKKwkJfSBlbHNlIHsKKwkJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5sYXN0X2RtYV9ydW4pOworCQl9CisJCXJlbGVhc2VfZG1hX2xvY2soZG1hX2ZsYWdzKTsKKwkJZW5hYmxlX2RtYShkZXZwcml2LT5kbWEpOworCX0KKworCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZC0tOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKworCXB0ciA9IChzaG9ydCAqKSBkZXZwcml2LT5kbWFidWZbdGhpc19kbWFfYnVmXTsKKworCWxlbiA9IChkZXZwcml2LT5od2RtYXNpemVbMF0gPj4gMSkgLSBkZXZwcml2LT5haV9wb2xsX3B0cjsKKwlidWZwdHIgPSBkZXZwcml2LT5haV9wb2xsX3B0cjsKKwlkZXZwcml2LT5haV9wb2xsX3B0ciA9IDA7CisKKwl0cmFuc2Zlcl9mcm9tX2RtYV9idWYoZGV2LCBzLCBwdHIsIGJ1ZnB0ciwgbGVuKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBJTlQgcHJvY2VkdXJlCisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MTYoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlEUFJJTlRLKCI8ST4iKTsKKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicHJlbWF0dXJlIGludGVycnVwdCIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJc3dpdGNoIChkZXZwcml2LT5pbnQ4MTZfbW9kZSkgeworCWNhc2UgSU5UX1RZUEVfQUkxX0RNQToKKwljYXNlIElOVF9UWVBFX0FJM19ETUE6CisJCXJldHVybiBpbnRlcnJ1cHRfcGNsODE2X2FpX21vZGUxM19kbWEoaXJxLCBkKTsKKwljYXNlIElOVF9UWVBFX0FJMV9JTlQ6CisJY2FzZSBJTlRfVFlQRV9BSTNfSU5UOgorCQlyZXR1cm4gaW50ZXJydXB0X3BjbDgxNl9haV9tb2RlMTNfaW50KGlycSwgZCk7CisJfQorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCWlmICgoIWRldi0+aXJxKSB8ICghZGV2cHJpdi0+aXJxX2ZyZWUpIHwgKCFkZXZwcml2LT5pcnFfYmxvY2tlZCkgfAorCQkoIWRldnByaXYtPmludDgxNl9tb2RlKSkgeworCQlpZiAoZGV2cHJpdi0+aXJxX3dhc19ub3dfY2xvc2VkKSB7CisJCQlkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQgPSAwOworCQkJLy8gY29tZWRpX2Vycm9yKGRldiwibGFzdCBJUlEuLiIpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisJCWNvbWVkaV9lcnJvcihkZXYsICJiYWQgSVJRISIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCWNvbWVkaV9lcnJvcihkZXYsICJJUlEgZnJvbSB1bmtub3cgc291cmNlISIpOworCXJldHVybiBJUlFfTk9ORTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgQ09NTUFORCBNT0RFCisqLworc3RhdGljIHZvaWQgcGNsODE2X2NtZHRlc3Rfb3V0KGludCBlLCBzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlydF9wcmludGsoInBjbDgxNiBlPSVkIHN0YXJ0c3JjPSV4IHNjYW5zcmM9JXggY29udnNyYz0leFxuIiwgZSwKKwkJY21kLT5zdGFydF9zcmMsIGNtZC0+c2Nhbl9iZWdpbl9zcmMsIGNtZC0+Y29udmVydF9zcmMpOworCXJ0X3ByaW50aygicGNsODE2IGU9JWQgc3RhcnRhcmc9JWQgc2NhbmFyZz0lZCBjb252YXJnPSVkXG4iLCBlLAorCQljbWQtPnN0YXJ0X2FyZywgY21kLT5zY2FuX2JlZ2luX2FyZywgY21kLT5jb252ZXJ0X2FyZyk7CisJcnRfcHJpbnRrKCJwY2w4MTYgZT0lZCBzdG9wc3JjPSV4IHNjYW5lbmQ9JXhcbiIsIGUsIGNtZC0+c3RvcF9zcmMsCisJCWNtZC0+c2Nhbl9lbmRfc3JjKTsKKwlydF9wcmludGsoInBjbDgxNiBlPSVkIHN0b3Bhcmc9JWQgc2NhbmVuZGFyZz0lZCBjaGFubGlzdGxlbj0lZFxuIiwgZSwKKwkJY21kLT5zdG9wX2FyZywgY21kLT5zY2FuX2VuZF9hcmcsIGNtZC0+Y2hhbmxpc3RfbGVuKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgcGNsODE2X2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCkKK3sKKwlpbnQgZXJyID0gMDsKKwlpbnQgdG1wLCBkaXZpc29yMSwgZGl2aXNvcjI7CisKKwlERUJVRyhydF9wcmludGsoInBjbDgxNiBwY2w4MTJfYWlfY21kdGVzdFxuIik7CisJCXBjbDgxNl9jbWR0ZXN0X291dCgtMSwgY21kKTspOworCisJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCWlmICghY21kLT5jb252ZXJ0X3NyYyAmIChUUklHX0VYVCB8IFRSSUdfVElNRVIpKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykgeworCQljbWQtPnN0YXJ0X3NyYyA9IFRSSUdfTk9XOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0ZPTExPVykgeworCQljbWQtPnNjYW5fYmVnaW5fc3JjID0gVFJJR19GT0xMT1c7CisJCWVycisrOworCX0KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikgeworCQljbWQtPmNvbnZlcnRfc3JjID0gVFJJR19USU1FUjsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfc3JjICE9IFRSSUdfQ09VTlQpIHsKKwkJY21kLT5zY2FuX2VuZF9zcmMgPSBUUklHX0NPVU5UOworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX05PTkUgJiYgY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UKQorCQllcnIrKzsKKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIDI7CisJfQorCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCB0aGlzX2JvYXJkLT5haV9uc19taW4pIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CQkvKiBUUklHX0VYVCAqLworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7CisJCWVycisrOworCX0KKwlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiB0aGlzX2JvYXJkLT5uX2FpY2hhbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmICghY21kLT5zdG9wX2FyZykgeworCQkJY21kLT5zdG9wX2FyZyA9IDE7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CQkvKiBUUklHX05PTkUgKi8KKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCX0KKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIDM7CisJfQorCisJLyogc3RlcCA0OiBmaXggdXAgYW55IGFyZ3VtZW50cyAqLworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcih0aGlzX2JvYXJkLT5pODI1NF9vc2NfYmFzZSwKKwkJCSZkaXZpc29yMSwgJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPmFpX25zX21pbikKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5haV9uc19taW47CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIDQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNsODE2X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXVuc2lnbmVkIGludCBkaXZpc29yMSA9IDAsIGRpdmlzb3IyID0gMCwgZG1hX2ZsYWdzLCBieXRlcywgZG1haXJxOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pCisJCXJldHVybiAtRUlOVkFMOworLy8gICAgICBpZihjbWQtPmNoYW5saXN0X2xlbj5NQVhfQ0hBTkxJU1RfTEVOKSByZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGV2cHJpdi0+aXJxX2Jsb2NrZWQpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCWlmIChjbWQtPmNvbnZlcnRfYXJnIDwgdGhpc19ib2FyZC0+YWlfbnNfbWluKQorCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPmFpX25zX21pbjsKKworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKHRoaXNfYm9hcmQtPmk4MjU0X29zY19iYXNlLCAmZGl2aXNvcjEsCisJCQkmZGl2aXNvcjIsICZjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmIChkaXZpc29yMSA9PSAxKSB7CS8vIFBDTDgxNiBjcmFzaCBpZiBhbnkgZGl2aXNvciBpcyBzZXQgdG8gMQorCQkJZGl2aXNvcjEgPSAyOworCQkJZGl2aXNvcjIgLz0gMjsKKwkJfQorCQlpZiAoZGl2aXNvcjIgPT0gMSkgeworCQkJZGl2aXNvcjIgPSAyOworCQkJZGl2aXNvcjEgLz0gMjsKKwkJfQorCX0KKworCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIHBhY2VyCisKKwlpZiAoIWNoZWNrX2FuZF9zZXR1cF9jaGFubmVsX2xpc3QoZGV2LCBzLCBjbWQtPmNoYW5saXN0LAorCQkJY21kLT5jaGFubGlzdF9sZW4pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljb21lZGlfdWRlbGF5KDEpOworCisJZGV2cHJpdi0+YWlfYWN0X3NjYW4gPSAwOworCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CisJZGV2cHJpdi0+aXJxX2Jsb2NrZWQgPSAxOworCWRldnByaXYtPmFpX3BvbGxfcHRyID0gMDsKKwlkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQgPSAwOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5haV9zY2FucyA9IGNtZC0+c3RvcF9hcmc7CisJCWRldnByaXYtPmFpX25ldmVyZW5kaW5nID0gMDsKKwl9IGVsc2UgeworCQlkZXZwcml2LT5haV9zY2FucyA9IDA7CisJCWRldnByaXYtPmFpX25ldmVyZW5kaW5nID0gMTsKKwl9CisKKwlpZiAoKGNtZC0+ZmxhZ3MgJiBUUklHX1dBS0VfRU9TKSkgewkvLyBkb24ndCB3ZSB3YW50IHdha2UgdXAgZXZlcnkgc2Nhbj8KKwkJcHJpbnRrKCJwbDgxNjogWW91IHdhbmt0IFdBS0VfRU9TIGJ1dCBJIGRvbnQgd2FudCBoYW5kbGUgaXQiKTsKKwkJLy8gICAgICAgICAgICAgIGRldnByaXYtPmFpX2Vvcz0xOworCQkvL2lmIChkZXZwcml2LT5haV9uX2NoYW49PTEpCisJCS8vICAgICAgZGV2cHJpdi0+ZG1hPTA7IC8vIERNQSBpcyB1c2VsZXNzIGZvciB0aGlzIHNpdHVhdGlvbgorCX0KKworCWlmIChkZXZwcml2LT5kbWEpIHsKKwkJYnl0ZXMgPSBkZXZwcml2LT5od2RtYXNpemVbMF07CisJCWlmICghZGV2cHJpdi0+YWlfbmV2ZXJlbmRpbmcpIHsKKwkJCWJ5dGVzID0gcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW4gKiBzLT5hc3luYy0+Y21kLmNoYW5saXN0X2xlbiAqIHNpemVvZihzaG9ydCk7CS8vIGhvdyBtYW55CisJCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSBieXRlcyAvIGRldnByaXYtPmh3ZG1hc2l6ZVswXTsJLy8gaG93IG1hbnkgRE1BIHBhZ2VzIHdlIG11c3QgZmlsbAorCQkJZGV2cHJpdi0+bGFzdF9kbWFfcnVuID0gYnl0ZXMgJSBkZXZwcml2LT5od2RtYXNpemVbMF07CS8vb24gbGFzdCBkbWEgdHJhbnNmZXIgbXVzdCBiZSBtb3ZlZAorCQkJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kLS07CisJCQlpZiAoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID49IDApCisJCQkJYnl0ZXMgPSBkZXZwcml2LT5od2RtYXNpemVbMF07CisJCX0gZWxzZQorCQkJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID0gLTE7CisKKwkJZGV2cHJpdi0+bmV4dF9kbWFfYnVmID0gMDsKKwkJc2V0X2RtYV9tb2RlKGRldnByaXYtPmRtYSwgRE1BX01PREVfUkVBRCk7CisJCWRtYV9mbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJCWNsZWFyX2RtYV9mZihkZXZwcml2LT5kbWEpOworCQlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5od2RtYXB0clswXSk7CisJCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLCBieXRlcyk7CisJCXJlbGVhc2VfZG1hX2xvY2soZG1hX2ZsYWdzKTsKKwkJZW5hYmxlX2RtYShkZXZwcml2LT5kbWEpOworCX0KKworCXN0YXJ0X3BhY2VyKGRldiwgMSwgZGl2aXNvcjEsIGRpdmlzb3IyKTsKKwlkbWFpcnEgPSAoKGRldnByaXYtPmRtYSAmIDB4MykgPDwgNCkgfCAoZGV2LT5pcnEgJiAweDcpOworCisJc3dpdGNoIChjbWQtPmNvbnZlcnRfc3JjKSB7CisJY2FzZSBUUklHX1RJTUVSOgorCQlkZXZwcml2LT5pbnQ4MTZfbW9kZSA9IElOVF9UWVBFX0FJMV9ETUE7CisJCW91dGIoMHgzMiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CS8vIFBhY2VyK0lSUStETUEKKwkJb3V0YihkbWFpcnEsIGRldi0+aW9iYXNlICsgUENMODE2X1NUQVRVUyk7CS8vIHdyaXRlIGlycSBhbmQgRE1BIHRvIGNhcmQKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZwcml2LT5pbnQ4MTZfbW9kZSA9IElOVF9UWVBFX0FJM19ETUE7CisJCW91dGIoMHgzNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CS8vIEV4dCB0cmlnK0lSUStETUEKKwkJb3V0YihkbWFpcnEsIGRldi0+aW9iYXNlICsgUENMODE2X1NUQVRVUyk7CS8vIHdyaXRlIGlycSB0byBjYXJkCisJCWJyZWFrOworCX0KKworCURQUklOVEsoInBjbDgxNiBFTkQ6IHBjbDgxMl9haV9jbWQoKVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNsODE2X2FpX3BvbGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB0b3AxLCB0b3AyLCBpOworCisJaWYgKCFkZXZwcml2LT5kbWEpCisJCXJldHVybiAwOwkvLyBwb2xsIGlzIHZhbGlkIG9ubHkgZm9yIERNQSB0cmFuc2ZlcgorCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworCQl0b3AxID0gZ2V0X2RtYV9yZXNpZHVlKGRldnByaXYtPmRtYSk7CS8vIHdoZXJlIGlzIG5vdyBETUEKKwkJdG9wMiA9IGdldF9kbWFfcmVzaWR1ZShkZXZwcml2LT5kbWEpOworCQlpZiAodG9wMSA9PSB0b3AyKQorCQkJYnJlYWs7CisJfQorCWlmICh0b3AxICE9IHRvcDIpIHsKKwkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdG9wMSA9IGRldnByaXYtPmh3ZG1hc2l6ZVswXSAtIHRvcDE7CS8vIHdoZXJlIGlzIG5vdyBETUEgaW4gYnVmZmVyCisJdG9wMSA+Pj0gMTsJCS8vIHNhbXBsZSBwb3NpdGlvbgorCXRvcDIgPSB0b3AxIC0gZGV2cHJpdi0+YWlfcG9sbF9wdHI7CisJaWYgKHRvcDIgPCAxKSB7CQkvLyBubyBuZXcgc2FtcGxlcworCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0cmFuc2Zlcl9mcm9tX2RtYV9idWYoZGV2LCBzLAorCQkoc2hvcnQgKikgZGV2cHJpdi0+ZG1hYnVmW2RldnByaXYtPm5leHRfZG1hX2J1Zl0sCisJCWRldnByaXYtPmFpX3BvbGxfcHRyLCB0b3AyKTsKKworCWRldnByaXYtPmFpX3BvbGxfcHRyID0gdG9wMTsJLy8gbmV3IGJ1ZmZlciBwb3NpdGlvbgorCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcy0+YXN5bmMtPmJ1Zl93cml0ZV9jb3VudCAtIHMtPmFzeW5jLT5idWZfcmVhZF9jb3VudDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIGNhbmNlbCBhbnkgbW9kZSAxLTQgQUkKKyovCitzdGF0aWMgaW50IHBjbDgxNl9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKy8vICBERUJVRyhydF9wcmludGsoInBjbDgxNl9haV9jYW5jZWwoKVxuIik7KQorCisJaWYgKGRldnByaXYtPmlycV9ibG9ja2VkID4gMCkgeworCQlzd2l0Y2ggKGRldnByaXYtPmludDgxNl9tb2RlKSB7CisjaWZkZWYgdW51c2VkCisJCWNhc2UgSU5UX1RZUEVfQUkxX0RNQV9SVEM6CisJCWNhc2UgSU5UX1RZUEVfQUkzX0RNQV9SVEM6CisJCQlzZXRfcnRjX2lycV9iaXQoMCk7CS8vIHN0b3AgUlRDCisJCQlkZWxfdGltZXIoJmRldnByaXYtPnJ0Y19pcnFfdGltZXIpOworI2VuZGlmCisJCWNhc2UgSU5UX1RZUEVfQUkxX0RNQToKKwkJY2FzZSBJTlRfVFlQRV9BSTNfRE1BOgorCQkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkJY2FzZSBJTlRfVFlQRV9BSTFfSU5UOgorCQljYXNlIElOVF9UWVBFX0FJM19JTlQ6CisJCQlvdXRiKGluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9DT05UUk9MKSAmIDB4NzMsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOwkvKiBTdG9wIEEvRCAqLworCQkJY29tZWRpX3VkZWxheSgxKTsKKwkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCk7CS8qIFN0b3AgQS9EICovCisJCQlvdXRiKDB4YjAsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CS8qIFN0b3AgcGFjZXIgKi8KKwkJCW91dGIoMHg3MCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsKKwkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQURfTE8pOworCQkJaW5iKGRldi0+aW9iYXNlICsgUENMODE2X0FEX0xPKTsKKwkJCWluYihkZXYtPmlvYmFzZSArIFBDTDgxNl9BRF9ISSk7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOwkvKiBTdG9wIEEvRCAqLworCQkJZGV2cHJpdi0+aXJxX2Jsb2NrZWQgPSAwOworCQkJZGV2cHJpdi0+aXJxX3dhc19ub3dfY2xvc2VkID0gZGV2cHJpdi0+aW50ODE2X21vZGU7CisJCQlkZXZwcml2LT5pbnQ4MTZfbW9kZSA9IDA7CisJCQlkZXZwcml2LT5sYXN0X2ludF9zdWIgPSBzOworLy8gICAgICAgIHMtPmJ1c3kgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlERUJVRyhydF9wcmludGsoImNvbWVkaTogcGNsODE2X2FpX2NhbmNlbCgpIHN1Y2Nlc3NmdWxcbiIpOworCQkpCisJCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgY2hlY2ggZm9yIFBDTDgxNgorKi8KK3N0YXRpYyBpbnQgcGNsODE2X2NoZWNrKHVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCW91dGIoMHgwMCwgaW9iYXNlICsgUENMODE2X01VWCk7CisJY29tZWRpX3VkZWxheSgxKTsKKwlpZiAoaW5iKGlvYmFzZSArIFBDTDgxNl9NVVgpICE9IDB4MDApCisJCXJldHVybiAxOwkvL3RoZXJlIGlzbid0IGNhcmQKKwlvdXRiKDB4NTUsIGlvYmFzZSArIFBDTDgxNl9NVVgpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJaWYgKGluYihpb2Jhc2UgKyBQQ0w4MTZfTVVYKSAhPSAweDU1KQorCQlyZXR1cm4gMTsJLy90aGVyZSBpc24ndCBjYXJkCisJb3V0YigweDAwLCBpb2Jhc2UgKyBQQ0w4MTZfTVVYKTsKKwljb21lZGlfdWRlbGF5KDEpOworCW91dGIoMHgxOCwgaW9iYXNlICsgUENMODE2X0NPTlRST0wpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJaWYgKGluYihpb2Jhc2UgKyBQQ0w4MTZfQ09OVFJPTCkgIT0gMHgxOCkKKwkJcmV0dXJuIDE7CS8vdGhlcmUgaXNuJ3QgY2FyZAorCXJldHVybiAwOwkJLy8gb2ssIGNhcmQgZXhpc3QKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIHJlc2V0IHdob2xlIFBDTC04MTYgY2FyZHMKKyovCitzdGF0aWMgdm9pZCBwY2w4MTZfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisvLyAgb3V0YiAoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfREFfTE8pOyAgICAgICAvLyBEQUM9MFYKKy8vICBvdXRiICgwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9EQV9ISSk7CisvLyAgY29tZWRpX3VkZWxheSAoMSk7CisvLyAgb3V0YiAoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRE9fSEkpOyAgICAgICAvLyBETz0kMDAwMAorLy8gIG91dGIgKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0RPX0xPKTsKKy8vICBjb21lZGlfdWRlbGF5ICgxKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NPTlRST0wpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfTVVYKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X0NMUklOVCk7CisJb3V0YigweGIwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFJDVEwpOwkvKiBTdG9wIHBhY2VyICovCisJb3V0YigweDcwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFJDVEwpOworCW91dGIoMHgzMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE2X1JBTkdFKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIFN0YXJ0L3N0b3AgcGFjZXIgb25ib2FyZCBwYWNlcgorKi8KK3N0YXRpYyB2b2lkCitzdGFydF9wYWNlcihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IG1vZGUsIHVuc2lnbmVkIGludCBkaXZpc29yMSwKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjIpCit7CisJb3V0YigweDMyLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFJDVEwpOworCW91dGIoMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSMCk7CisJb3V0YigweDAwLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9DVFIwKTsKKwljb21lZGlfdWRlbGF5KDEpOworCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSQ1RMKTsJLy8gc2V0IGNvdW50ZXIgMiBhcyBtb2RlIDMKKwlvdXRiKDB4NzQsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUkNUTCk7CS8vIHNldCBjb3VudGVyIDEgYXMgbW9kZSAzCisJY29tZWRpX3VkZWxheSgxKTsKKworCWlmIChtb2RlID09IDEpIHsKKwkJRFBSSU5USygibW9kZSAlZCwgZGl2aXNvcjEgJWQsIGRpdmlzb3IyICVkXG4iLCBtb2RlLCBkaXZpc29yMSwKKwkJCWRpdmlzb3IyKTsKKwkJb3V0YihkaXZpc29yMiAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUjIpOworCQlvdXRiKChkaXZpc29yMiA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE2X0NUUjIpOworCQlvdXRiKGRpdmlzb3IxICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSMSk7CisJCW91dGIoKGRpdmlzb3IxID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ1RSMSk7CisJfQorCisJLyogY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzIChqdXN0IGluIGNhc2UpICovCisvLyAgICAgIG91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfQ0xSSU5UKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIENoZWNrIGlmIGNoYW5uZWwgbGlzdCBmcm9tIHVzZXIgaXMgYnVpbGRlZCBjb3JyZWN0bHkKKyBJZiBpdCdzIG9rLCB0aGVuIHByb2dyYW0gc2Nhbi9nYWluIGxvZ2ljCisqLworc3RhdGljIGludAorY2hlY2tfYW5kX3NldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIGludCBjaGFubGVuKQoreworCXVuc2lnbmVkIGludCBjaGFuc2VnbWVudFsxNl07CisJdW5zaWduZWQgaW50IGksIG5vd211c3RiZWNoYW4sIHNlZ2xlbiwgc2VncG9zOworCisJLy8gY29ycmVjdCBjaGFubmVsIGFuZCByYW5nZSBudW1iZXIgY2hlY2sgaXRzZWxmIGNvbWVkaS9yYW5nZS5jCisJaWYgKGNoYW5sZW4gPCAxKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJyYW5nZS9jaGFubmVsIGxpc3QgaXMgZW1wdHkhIik7CisJCXJldHVybiAwOworCX0KKworCWlmIChjaGFubGVuID4gMSkgeworCQljaGFuc2VnbWVudFswXSA9IGNoYW5saXN0WzBdOwkvLyBmaXJzdCBjaGFubmVsIGlzIGV2ZXJ5dGltZSBvaworCQlmb3IgKGkgPSAxLCBzZWdsZW4gPSAxOyBpIDwgY2hhbmxlbjsgaSsrLCBzZWdsZW4rKykgeworCQkJLy8gYnVpbGQgcGFydCBvZiBjaGFubGlzdAorCQkJREVCVUcocnRfcHJpbnRrKCIlZC4gJWQgJWRcbiIsIGksIENSX0NIQU4oY2hhbmxpc3RbaV0pLAorCQkJCQlDUl9SQU5HRShjaGFubGlzdFtpXSkpOworCQkJCSkKKwkJCQlpZiAoY2hhbmxpc3RbMF0gPT0gY2hhbmxpc3RbaV0pCisJCQkJYnJlYWs7CS8vIHdlIGRldGVjdCBsb29wLCB0aGlzIG11c3QgYnkgZmluaXNoCisJCQlub3dtdXN0YmVjaGFuID0KKwkJCQkoQ1JfQ0hBTihjaGFuc2VnbWVudFtpIC0gMV0pICsgMSkgJSBjaGFubGVuOworCQkJaWYgKG5vd211c3RiZWNoYW4gIT0gQ1JfQ0hBTihjaGFubGlzdFtpXSkpIHsKKwkJCQkvLyBjaGFubmVsIGxpc3QgaXNuJ3QgY29udGlub3VzIDotKAorCQkJCXJ0X3ByaW50aworCQkJCQkoImNvbWVkaSVkOiBwY2w4MTY6IGNoYW5uZWwgbGlzdCBtdXN0IGJlIGNvbnRpbm91cyEgY2hhbmxpc3RbJWldPSVkIGJ1dCBtdXN0IGJlICVkIG9yICVkIVxuIiwKKwkJCQkJZGV2LT5taW5vciwgaSwgQ1JfQ0hBTihjaGFubGlzdFtpXSksCisJCQkJCW5vd211c3RiZWNoYW4sIENSX0NIQU4oY2hhbmxpc3RbMF0pKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWNoYW5zZWdtZW50W2ldID0gY2hhbmxpc3RbaV07CS8vIHdlbGwsIHRoaXMgaXMgbmV4dCBjb3JyZWN0IGNoYW5uZWwgaW4gbGlzdAorCQl9CisKKwkJZm9yIChpID0gMCwgc2VncG9zID0gMDsgaSA8IGNoYW5sZW47IGkrKykgewkvLyBjaGVjayB3aG9sZSBjaGFubGlzdAorCQkJREVCVUcocnRfcHJpbnRrKCIlZCAlZD0lZCAlZFxuIiwKKwkJCQkJQ1JfQ0hBTihjaGFuc2VnbWVudFtpICUgc2VnbGVuXSksCisJCQkJCUNSX1JBTkdFKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSwKKwkJCQkJQ1JfQ0hBTihjaGFubGlzdFtpXSksCisJCQkJCUNSX1JBTkdFKGNoYW5saXN0W2ldKSk7CisJCQkJKQorCQkJCWlmIChjaGFubGlzdFtpXSAhPSBjaGFuc2VnbWVudFtpICUgc2VnbGVuXSkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoImNvbWVkaSVkOiBwY2w4MTY6IGJhZCBjaGFubmVsIG9yIHJhbmdlIG51bWJlciEgY2hhbmxpc3RbJWldPSVkLCVkLCVkIGFuZCBub3QgJWQsJWQsJWQhXG4iLAorCQkJCQlkZXYtPm1pbm9yLCBpLCBDUl9DSEFOKGNoYW5zZWdtZW50W2ldKSwKKwkJCQkJQ1JfUkFOR0UoY2hhbnNlZ21lbnRbaV0pLAorCQkJCQlDUl9BUkVGKGNoYW5zZWdtZW50W2ldKSwKKwkJCQkJQ1JfQ0hBTihjaGFubGlzdFtpICUgc2VnbGVuXSksCisJCQkJCUNSX1JBTkdFKGNoYW5saXN0W2kgJSBzZWdsZW5dKSwKKwkJCQkJQ1JfQVJFRihjaGFuc2VnbWVudFtpICUgc2VnbGVuXSkpOworCQkJCXJldHVybiAwOwkvLyBjaGFuL2dhaW4gbGlzdCBpcyBzdHJhbmdlCisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzZWdsZW4gPSAxOworCX0KKworCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9sZW4gPSBzZWdsZW47CisJZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0X3BvcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VnbGVuOyBpKyspIHsJLy8gc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkCisJCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdFtpXSA9IENSX0NIQU4oY2hhbmxpc3RbaV0pOworCQlvdXRiKENSX0NIQU4oY2hhbmxpc3RbMF0pICYgMHhmLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9NVVgpOworCQlvdXRiKENSX1JBTkdFKGNoYW5saXN0WzBdKSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTZfUkFOR0UpOwkvKiBzZWxlY3QgZ2FpbiAqLworCX0KKworCWNvbWVkaV91ZGVsYXkoMSk7CisKKwlvdXRiKGRldnByaXYtPmFpX2FjdF9jaGFubGlzdFswXSB8IChkZXZwcml2LT5haV9hY3RfY2hhbmxpc3Rbc2VnbGVuIC0gMV0gPDwgNCksIGRldi0+aW9iYXNlICsgUENMODE2X01VWCk7CS8qIHNlbGVjdCBjaGFubmVsIGludGVydmFsIHRvIHNjYW4gKi8KKworCXJldHVybiAxOwkJLy8gd2UgY2FuIHNlcnZlIHRoaXMgd2l0aCBNVVggbG9naWMKK30KKworI2lmZGVmIHVudXNlZAorLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBFbmFibGUoMSkvZGlzYWJsZSgwKSBwZXJpb2RpYyBpbnRlcnJ1cHRzIGZyb20gUlRDCisqLworc3RhdGljIGludCBzZXRfcnRjX2lycV9iaXQodW5zaWduZWQgY2hhciBiaXQpCit7CisJdW5zaWduZWQgY2hhciB2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChiaXQgPT0gMSkgeworCQlSVENfdGltZXJfbG9jaysrOworCQlpZiAoUlRDX3RpbWVyX2xvY2sgPiAxKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJUlRDX3RpbWVyX2xvY2stLTsKKwkJaWYgKFJUQ190aW1lcl9sb2NrIDwgMCkKKwkJCVJUQ190aW1lcl9sb2NrID0gMDsKKwkJaWYgKFJUQ190aW1lcl9sb2NrID4gMCkKKwkJCXJldHVybiAwOworCX0KKworCXNhdmVfZmxhZ3MoZmxhZ3MpOworCWNsaSgpOworCXZhbCA9IENNT1NfUkVBRChSVENfQ09OVFJPTCk7CisJaWYgKGJpdCkgeworCQl2YWwgfD0gUlRDX1BJRTsKKwl9IGVsc2UgeworCQl2YWwgJj0gflJUQ19QSUU7CisJfQorCUNNT1NfV1JJVEUodmFsLCBSVENfQ09OVFJPTCk7CisJQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKTsKKwlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEZyZWUgYW55IHJlc291cmNlcyB0aGF0IHdlIGhhdmUgY2xhaW1lZAorKi8KK3N0YXRpYyB2b2lkIGZyZWVfcmVzb3VyY2VzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8vcnRfcHJpbnRrKCJmcmVlX3Jlc291cmNlKClcbiIpOworCWlmIChkZXYtPnByaXZhdGUpIHsKKwkJcGNsODE2X2FpX2NhbmNlbChkZXYsIGRldnByaXYtPnN1Yl9haSk7CisJCXBjbDgxNl9yZXNldChkZXYpOworCQlpZiAoZGV2cHJpdi0+ZG1hKQorCQkJZnJlZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkJaWYgKGRldnByaXYtPmRtYWJ1ZlswXSkKKwkJCWZyZWVfcGFnZXMoZGV2cHJpdi0+ZG1hYnVmWzBdLCBkZXZwcml2LT5kbWFwYWdlc1swXSk7CisJCWlmIChkZXZwcml2LT5kbWFidWZbMV0pCisJCQlmcmVlX3BhZ2VzKGRldnByaXYtPmRtYWJ1ZlsxXSwgZGV2cHJpdi0+ZG1hcGFnZXNbMV0pOworI2lmZGVmIHVudXNlZAorCQlpZiAoZGV2cHJpdi0+cnRjX2lycSkKKwkJCWNvbWVkaV9mcmVlX2lycShkZXZwcml2LT5ydGNfaXJxLCBkZXYpOworCQlpZiAoKGRldnByaXYtPmRtYV9ydGMpICYmIChSVENfbG9jayA9PSAxKSkgeworCQkJaWYgKGRldnByaXYtPnJ0Y19pb2Jhc2UpCisJCQkJcmVsZWFzZV9yZWdpb24oZGV2cHJpdi0+cnRjX2lvYmFzZSwKKwkJCQkJZGV2cHJpdi0+cnRjX2lvc2l6ZSk7CisJCX0KKyNlbmRpZgorCX0KKworCWlmIChkZXYtPmlycSkKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UpOworCS8vcnRfcHJpbnRrKCJmcmVlX3Jlc291cmNlKCkgZW5kXG4iKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBJbml0aWFsaXphdGlvbgorCisqLworc3RhdGljIGludCBwY2w4MTZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJdW5zaWduZWQgaW50IGlycSwgZG1hOworCXVuc2lnbmVkIGxvbmcgcGFnZXM7CisJLy9pbnQgaTsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCS8qIGNsYWltIG91ciBJL08gc3BhY2UgKi8KKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlwcmludGsoImNvbWVkaSVkOiBwY2w4MTY6ICBib2FyZD0lcywgaW9wb3J0PTB4JTAzbHgiLCBkZXYtPm1pbm9yLAorCQl0aGlzX2JvYXJkLT5uYW1lLCBpb2Jhc2UpOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIHRoaXNfYm9hcmQtPmlvX3JhbmdlLCAicGNsODE2IikpIHsKKwkJcnRfcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJaWYgKHBjbDgxNl9jaGVjayhpb2Jhc2UpKSB7CisJCXJ0X3ByaW50aygiLCBJIGNhbm4ndCBkZXRlY3QgYm9hcmQuIEZBSUwhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2w4MTZfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CS8qIENhbid0IGFsbG9jIG1lbSAqLworCisJLyogc2V0IHVwIHNvbWUgbmFtZSBzdHVmZiAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisKKwkvKiBncmFiIG91ciBJUlEgKi8KKwlpcnEgPSAwOworCWlmICh0aGlzX2JvYXJkLT5JUlFiaXRzICE9IDApIHsJLyogYm9hcmQgc3VwcG9ydCBJUlEgKi8KKwkJaXJxID0gaXQtPm9wdGlvbnNbMV07CisJCWlmIChpcnEpIHsJLyogd2Ugd2FudCB0byB1c2UgSVJRICovCisJCQlpZiAoKCgxIDw8IGlycSkgJiB0aGlzX2JvYXJkLT5JUlFiaXRzKSA9PSAwKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiLCBJUlEgJXUgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsIERJU0FCTElORyBJVCIsCisJCQkJCWlycSk7CisJCQkJaXJxID0gMDsJLyogQmFkIElSUSAqLworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY29tZWRpX3JlcXVlc3RfaXJxKGlycSwgaW50ZXJydXB0X3BjbDgxNiwgMCwKKwkJCQkJCSJwY2w4MTYiLCBkZXYpKSB7CisJCQkJCXJ0X3ByaW50aworCQkJCQkJKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgJXUsIERJU0FCTElORyBJVCIsCisJCQkJCQlpcnEpOworCQkJCQlpcnEgPSAwOwkvKiBDYW4ndCB1c2UgSVJRICovCisJCQkJfSBlbHNlIHsKKwkJCQkJcnRfcHJpbnRrKCIsIGlycT0ldSIsIGlycSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJZGV2LT5pcnEgPSBpcnE7CisJaWYgKGlycSkgeworCQlkZXZwcml2LT5pcnFfZnJlZSA9IDE7CisJfSAvKiAxPXdlIGhhdmUgYWxsb2NhdGVkIGlycSAqLworCWVsc2UgeworCQlkZXZwcml2LT5pcnFfZnJlZSA9IDA7CisJfQorCWRldnByaXYtPmlycV9ibG9ja2VkID0gMDsJLyogbnVtYmVyIG9mIHN1YmRldmljZSB3aGljaCB1c2UgSVJRICovCisJZGV2cHJpdi0+aW50ODE2X21vZGUgPSAwOwkvKiBtb2RlIG9mIGlycSAqLworCisjaWZkZWYgdW51c2VkCisJLyogZ3JhYiBSVEMgZm9yIERNQSBvcGVyYXRpb25zICovCisJZGV2cHJpdi0+ZG1hX3J0YyA9IDA7CisJaWYgKGl0LT5vcHRpb25zWzJdID4gMCkgewkvLyB3ZSB3YW50IHRvIHVzZSBETUEKKwkJaWYgKFJUQ19sb2NrID09IDApIHsKKwkJCWlmICghcmVxdWVzdF9yZWdpb24oUlRDX1BPUlQoMCksIFJUQ19JT19FWFRFTlQsCisJCQkJCSJwY2w4MTYgKFJUQykiKSkKKwkJCQlnb3RvIG5vX3J0YzsKKwkJfQorCQlkZXZwcml2LT5ydGNfaW9iYXNlID0gUlRDX1BPUlQoMCk7CisJCWRldnByaXYtPnJ0Y19pb3NpemUgPSBSVENfSU9fRVhURU5UOworCQlSVENfbG9jaysrOworI2lmZGVmIFVOVEVTVEVEX0NPREUKKwkJaWYgKCFjb21lZGlfcmVxdWVzdF9pcnEoUlRDX0lSUSwKKwkJCQlpbnRlcnJ1cHRfcGNsODE2X2FpX21vZGUxM19kbWFfcnRjLCAwLAorCQkJCSJwY2w4MTYgRE1BIChSVEMpIiwgZGV2KSkgeworCQkJZGV2cHJpdi0+ZG1hX3J0YyA9IDE7CisJCQlkZXZwcml2LT5ydGNfaXJxID0gUlRDX0lSUTsKKwkJCXJ0X3ByaW50aygiLCBkbWFfaXJxPSV1IiwgZGV2cHJpdi0+cnRjX2lycSk7CisJCX0gZWxzZSB7CisJCQlSVENfbG9jay0tOworCQkJaWYgKFJUQ19sb2NrID09IDApIHsKKwkJCQlpZiAoZGV2cHJpdi0+cnRjX2lvYmFzZSkKKwkJCQkJcmVsZWFzZV9yZWdpb24oZGV2cHJpdi0+cnRjX2lvYmFzZSwKKwkJCQkJCWRldnByaXYtPnJ0Y19pb3NpemUpOworCQkJfQorCQkJZGV2cHJpdi0+cnRjX2lvYmFzZSA9IDA7CisJCQlkZXZwcml2LT5ydGNfaW9zaXplID0gMDsKKwkJfQorI2Vsc2UKKwkJcHJpbnRrKCJwY2w4MTY6IFJUQyBjb2RlIG1pc3NpbmciKTsKKyNlbmRpZgorCisJfQorCisgICAgICBub19ydGM6CisjZW5kaWYKKwkvKiBncmFiIG91ciBETUEgKi8KKwlkbWEgPSAwOworCWRldnByaXYtPmRtYSA9IGRtYTsKKwlpZiAoKGRldnByaXYtPmlycV9mcmVlID09IDApICYmIChkZXZwcml2LT5kbWFfcnRjID09IDApKQorCQlnb3RvIG5vX2RtYTsJLyogaWYgd2UgaGF2ZW4ndCBJUlEsIHdlIGNhbid0IHVzZSBETUEgKi8KKworCWlmICh0aGlzX2JvYXJkLT5ETUFiaXRzICE9IDApIHsJLyogYm9hcmQgc3VwcG9ydCBETUEgKi8KKwkJZG1hID0gaXQtPm9wdGlvbnNbMl07CisJCWlmIChkbWEgPCAxKQorCQkJZ290byBub19kbWE7CS8qIERNQSBkaXNhYmxlZCAqLworCisJCWlmICgoKDEgPDwgZG1hKSAmIHRoaXNfYm9hcmQtPkRNQWJpdHMpID09IDApIHsKKwkJCXJ0X3ByaW50aygiLCBETUEgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsIEZBSUwhXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwkvKiBCYWQgRE1BICovCisJCX0KKwkJcmV0ID0gcmVxdWVzdF9kbWEoZG1hLCAicGNsODE2Iik7CisJCWlmIChyZXQpIHsKKwkJCXJ0X3ByaW50aygiLCB1bmFibGUgdG8gYWxsb2NhdGUgRE1BICV1LCBGQUlMIVxuIiwgZG1hKTsKKwkJCXJldHVybiAtRUJVU1k7CS8qIERNQSBpc24ndCBmcmVlICovCisJCX0KKworCQlkZXZwcml2LT5kbWEgPSBkbWE7CisJCXJ0X3ByaW50aygiLCBkbWE9JXUiLCBkbWEpOworCQlwYWdlcyA9IDI7CS8qIHdlIG5lZWQgMTZLQiAqLworCQlkZXZwcml2LT5kbWFidWZbMF0gPSBfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCwgcGFnZXMpOworCisJCWlmICghZGV2cHJpdi0+ZG1hYnVmWzBdKSB7CisJCQlydF9wcmludGsoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKKwkJCS8qIG1heWJlIGV4cGVyaW1lbnQgd2l0aCB0cnlfdG9fZnJlZV9wYWdlcygpIHdpbGwgaGVscCAuLi4uICovCisJCQlyZXR1cm4gLUVCVVNZOwkvKiBubyBidWZmZXIgOi0oICovCisJCX0KKwkJZGV2cHJpdi0+ZG1hcGFnZXNbMF0gPSBwYWdlczsKKwkJZGV2cHJpdi0+aHdkbWFwdHJbMF0gPSB2aXJ0X3RvX2J1cygodm9pZCAqKWRldnByaXYtPmRtYWJ1ZlswXSk7CisJCWRldnByaXYtPmh3ZG1hc2l6ZVswXSA9ICgxIDw8IHBhZ2VzKSAqIFBBR0VfU0laRTsKKwkJLy9ydF9wcmludGsoIiVkICVkICVsZCwgIixkZXZwcml2LT5kbWFwYWdlc1swXSxkZXZwcml2LT5od2RtYXNpemVbMF0sUEFHRV9TSVpFKTsKKworCQlpZiAoZGV2cHJpdi0+ZG1hX3J0YyA9PSAwKSB7CS8vIHdlIG11c3QgZG8gZHVibGUgYnVmZiA6LSgKKwkJCWRldnByaXYtPmRtYWJ1ZlsxXSA9IF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLCBwYWdlcyk7CisJCQlpZiAoIWRldnByaXYtPmRtYWJ1ZlsxXSkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIERNQSBidWZmZXIsIEZBSUwhXG4iKTsKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJfQorCQkJZGV2cHJpdi0+ZG1hcGFnZXNbMV0gPSBwYWdlczsKKwkJCWRldnByaXYtPmh3ZG1hcHRyWzFdID0KKwkJCQl2aXJ0X3RvX2J1cygodm9pZCAqKWRldnByaXYtPmRtYWJ1ZlsxXSk7CisJCQlkZXZwcml2LT5od2RtYXNpemVbMV0gPSAoMSA8PCBwYWdlcykgKiBQQUdFX1NJWkU7CisJCX0KKwl9CisKKyAgICAgIG5vX2RtYToKKworLyogIGlmICh0aGlzX2JvYXJkLT5uX2FvY2hhbiA+IDApCisgICAgc3ViZGV2c1sxXSA9IENPTUVESV9TVUJEX0FPOworICBpZiAodGhpc19ib2FyZC0+bl9kaWNoYW4gPiAwKQorICAgIHN1YmRldnNbMl0gPSBDT01FRElfU1VCRF9ESTsKKyAgaWYgKHRoaXNfYm9hcmQtPm5fZG9jaGFuID4gMCkKKyAgICBzdWJkZXZzWzNdID0gQ09NRURJX1NVQkRfRE87CisqLworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlpZiAodGhpc19ib2FyZC0+bl9haWNoYW4gPiAwKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwkJZGV2cHJpdi0+c3ViX2FpID0gczsKKwkJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9DTURfUkVBRDsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9haWNoYW47CisJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfRElGRjsKKwkJLy9wcmludGsgKCIsICVkY2hhbnMgRElGRiBEQUMgLSAlZCIsIHMtPm5fY2hhbiwgaSk7CisJCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5haV9tYXhkYXRhOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5haV9jaGFubGlzdDsKKwkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5haV9yYW5nZV90eXBlOworCQlzLT5jYW5jZWwgPSBwY2w4MTZfYWlfY2FuY2VsOworCQlzLT5kb19jbWR0ZXN0ID0gcGNsODE2X2FpX2NtZHRlc3Q7CisJCXMtPmRvX2NtZCA9IHBjbDgxNl9haV9jbWQ7CisJCXMtPnBvbGwgPSBwY2w4MTZfYWlfcG9sbDsKKwkJcy0+aW5zbl9yZWFkID0gcGNsODE2X2FpX2luc25fcmVhZDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworI2lmIDAKK2Nhc2UgQ09NRURJX1NVQkRfQU86CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORDsKKwlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2FvY2hhbjsKKwlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YW9fbWF4ZGF0YTsKKwlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5hb19jaGFubGlzdDsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPmFvX3JhbmdlX3R5cGU7CisJYnJlYWs7CisKK2Nhc2UgQ09NRURJX1NVQkRfREk6CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fZGljaGFuOworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fZGljaGFuOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJYnJlYWs7CisKK2Nhc2UgQ09NRURJX1NVQkRfRE86CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fZG9jaGFuOworCXMtPm1heGRhdGEgPSAxOworCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fZG9jaGFuOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJYnJlYWs7CisjZW5kaWYKKworCXBjbDgxNl9yZXNldChkZXYpOworCisJcnRfcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgUmVtb3ZlcyBkZXZpY2UKKyAqLworc3RhdGljIGludCBwY2w4MTZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCURFQlVHKHJ0X3ByaW50aygiY29tZWRpJWQ6IHBjbDgxNjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwkJKQorCQlmcmVlX3Jlc291cmNlcyhkZXYpOworI2lmZGVmIHVudXNlZAorCWlmIChkZXZwcml2LT5kbWFfcnRjKQorCQlSVENfbG9jay0tOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhOWQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTguYwpAQCAtMCwwICsxLDE5ODggQEAKKy8qCisgICBjb21lZGkvZHJpdmVycy9wY2w4MTguYworCisgICBBdXRob3I6ICBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KKworICAgaGFyZHdhcmUgZHJpdmVyIGZvciBBZHZhbnRlY2ggY2FyZHM6CisgICAgY2FyZDogICBQQ0wtODE4TCwgUENMLTgxOEgsIFBDTC04MThIRCwgUENMLTgxOEhHLCBQQ0wtODE4LCBQQ0wtNzE4CisgICAgZHJpdmVyOiBwY2w4MThsLCAgcGNsODE4aCwgIHBjbDgxOGhkLCAgcGNsODE4aGcsICBwY2w4MTgsICBwY2w3MTgKKyovCisvKgorRHJpdmVyOiBwY2w4MTgKK0Rlc2NyaXB0aW9uOiBBZHZhbnRlY2ggUENMLTgxOCBjYXJkcywgUENMLTcxOAorQXV0aG9yOiBNaWNoYWwgRG9iZXMgPGRvYmVzQHRlc25ldC5jej4KK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDTC04MThMIChwY2w4MThsKSwgUENMLTgxOEggKHBjbDgxOGgpLAorICBQQ0wtODE4SEQgKHBjbDgxOGhkKSwgUENMLTgxOEhHIChwY2w4MThoZyksIFBDTC04MTggKHBjbDgxOCksCisgIFBDTC03MTggKHBjbDcxOCkKK1N0YXR1czogd29ya3MKKworQWxsIGNhcmRzIGhhdmUgMTYgU0UvOCBESUZGIEFEQ3MsIG9uZSBvciB0d28gREFDcywgMTYgREkgYW5kIDE2IERPLgorRGlmZmVyZW5jZXMgYXJlIG9ubHkgYXQgbWF4aW1hbCBzYW1wbGUgc3BlZWQsIHJhbmdlIGxpc3QgYW5kIEZJRk8KK3N1cHBvcnQuCitUaGUgZHJpdmVyIHN1cHBvcnQgQUkgbW9kZSAwLCAxLCAzIG90aGVyIHN1YmRldmljZXMgKEFPLCBESSwgRE8pIHN1cHBvcnQKK29ubHkgbW9kZSAwLiBJZiBETUEvRklGTy9JTlQgYXJlIGRpc2FibGVkIHRoZW4gQUkgc3VwcG9ydCBvbmx5IG1vZGUgMC4KK1BDTC04MThIRCBhbmQgUENMLTgxOEhHIHN1cHBvcnQgMWt3b3JkIEZJRk8uIERyaXZlciBzdXBwb3J0IHRoaXMgRklGTworYnV0IHRoaXMgY29kZSBpcyB1bnRlc3RlZC4KK0Egd29yZCBvciB0d28gYWJvdXQgRE1BLiBEcml2ZXIgc3VwcG9ydCBETUEgb3BlcmF0aW9ucyBhdCB0d28gd2F5czoKKzEpIERNQSB1c2VzIHR3byBidWZmZXJzIGFuZCBhZnRlciBvbmUgaXMgZmlsbGVkIHRoZW4gaXMgZ2VuZXJhdGVkCisgICBJTlQgYW5kIERNQSByZXN0YXJ0IHdpdGggc2Vjb25kIGJ1ZmZlci4gV2l0aCB0aGlzIG1vZGUgSSdtIHVuYWJsZSBydW4KKyAgIG1vcmUgdGhhdCA4MEtzYW1wbGVzL3NlY3Mgd2l0aG91dCBkYXRhIGRyb3BvdXRzIG9uIEs2LzIzMy4KKzIpIERNQSB1c2VzIG9uZSBidWZmZXIgYW5kIHJ1biBpbiBhdXRvaW5pdCBtb2RlIGFuZCB0aGUgZGF0YSBhcmUKKyAgIGZyb20gRE1BIGJ1ZmZlciBtb3ZlZCBvbiB0aGUgZmx5IHdpdGggMmtIeiBpbnRlcnJ1cHRzIGZyb20gUlRDLgorICAgVGhpcyBtb2RlIGlzIHVzZWQgaWYgdGhlIGludGVycnVwdCA4IGlzIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4KKyAgIElmIG5vdCwgdGhlbiBmaXJzdCBETUEgbW9kZSBpcyB1c2VkLiBXaXRoIHRoaXMgSSBjYW4gcnVuIGF0CisgICBmdWxsIHNwZWVkIG9uZSBjYXJkICgxMDBrc2FtcGxlcy9zZWNzKSBvciB0d28gY2FyZHMgd2l0aAorICAgNjBrc2FtcGxlcy9zZWNzIGVhY2ggKG1vcmUgaXMgcHJvYmxlbSBvbiBhY2NvdW50IG9mIElTQSBsaW1pdGF0aW9ucykuCisgICBUbyB1c2UgdGhpcyBtb2RlIHlvdSBtdXN0IGhhdmUgY29tcGlsZWQgIGtlcm5lbCB3aXRoIGRpc2FibGVkCisgICAiRW5oYW5jZWQgUmVhbCBUaW1lIENsb2NrIFN1cHBvcnQiLgorICAgTWF5YmUgeW91IGNhbiBoYXZlIHByb2JsZW1zIGlmIHlvdSB1c2UgeG50cGQgb3Igc2ltaWxhci4KKyAgIElmIHlvdSd2ZSBkYXRhIGRyb3BvdXRzIHdpdGggRE1BIG1vZGUgMiB0aGVuOgorICAgIGEpIGRpc2FibGUgSURFIERNQQorICAgIGIpIHN3aXRjaCB0ZXh0IG1vZGUgY29uc29sZSB0byBmYi4KKworICAgT3B0aW9ucyBmb3IgUENMLTgxOEw6CisgICAgWzBdIC0gSU8gQmFzZQorICAgIFsxXSAtIElSUQkoMD1kaXNhYmxlLCAyLCAzLCA0LCA1LCA2LCA3KQorICAgIFsyXSAtIERNQQkoMD1kaXNhYmxlLCAxLCAzKQorICAgIFszXSAtIDAsIDEwPTEwTUh6IGNsb2NrIGZvciA4MjU0CisgICAgICAgICAgICAgIDE9IDFNSHogY2xvY2sgZm9yIDgyNTQKKyAgICBbNF0gLSAwLCAgNT1BL0QgaW5wdXQgIC01Vi4uICs1VgorICAgICAgICAgIDEsIDEwPUEvRCBpbnB1dCAtMTBWLi4rMTBWCisgICAgWzVdIC0gMCwgIDU9RC9BIG91dHB1dCAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAgICAgICAgICAxLCAxMD1EL0Egb3V0cHV0IDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKwkgIDIgICAgPUQvQSBvdXRwdXQgdW5rbm93IChleHRlcm5hbCByZWZlcmVuY2UpCisKKyAgIE9wdGlvbnMgZm9yIFBDTC04MTgsIFBDTC04MThIOgorICAgIFswXSAtIElPIEJhc2UKKyAgICBbMV0gLSBJUlEJKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNykKKyAgICBbMl0gLSBETUEJKDA9ZGlzYWJsZSwgMSwgMykKKyAgICBbM10gLSAwLCAxMD0xME1IeiBjbG9jayBmb3IgODI1NAorICAgICAgICAgICAgICAxPSAxTUh6IGNsb2NrIGZvciA4MjU0CisgICAgWzRdIC0gMCwgIDU9RC9BIG91dHB1dCAwLTVWICAoaW50ZXJuYWwgcmVmZXJlbmNlIC01VikKKyAgICAgICAgICAxLCAxMD1EL0Egb3V0cHV0IDAtMTBWIChpbnRlcm5hbCByZWZlcmVuY2UgLTEwVikKKwkgIDIgICAgPUQvQSBvdXRwdXQgdW5rbm93IChleHRlcm5hbCByZWZlcmVuY2UpCisKKyAgIE9wdGlvbnMgZm9yIFBDTC04MThIRCwgUENMLTgxOEhHOgorICAgIFswXSAtIElPIEJhc2UKKyAgICBbMV0gLSBJUlEJKDA9ZGlzYWJsZSwgMiwgMywgNCwgNSwgNiwgNykKKyAgICBbMl0gLSBETUEvRklGTyAgKC0xPXVzZSBGSUZPLCAwPWRpc2FibGUgYm90aCBGSUZPIGFuZCBETUEsCisgICAgICAgICAgICAgICAgICAgICAgMT11c2UgRE1BIGNoIDEsIDM9dXNlIERNQSBjaCAzKQorICAgIFszXSAtIDAsIDEwPTEwTUh6IGNsb2NrIGZvciA4MjU0CisgICAgICAgICAgICAgIDE9IDFNSHogY2xvY2sgZm9yIDgyNTQKKyAgICBbNF0gLSAwLCAgNT1EL0Egb3V0cHV0IDAtNVYgIChpbnRlcm5hbCByZWZlcmVuY2UgLTVWKQorICAgICAgICAgIDEsIDEwPUQvQSBvdXRwdXQgMC0xMFYgKGludGVybmFsIHJlZmVyZW5jZSAtMTBWKQorICAgCSAgMiAgICA9RC9BIG91dHB1dCB1bmtub3cgKGV4dGVybmFsIHJlZmVyZW5jZSkKKworICAgT3B0aW9ucyBmb3IgUENMLTcxODoKKyAgICBbMF0gLSBJTyBCYXNlCisgICAgWzFdIC0gSVJRCSgwPWRpc2FibGUsIDIsIDMsIDQsIDUsIDYsIDcpCisgICAgWzJdIC0gRE1BCSgwPWRpc2FibGUsIDEsIDMpCisgICAgWzNdIC0gMCwgMTA9MTBNSHogY2xvY2sgZm9yIDgyNTQKKyAgICAgICAgICAgICAgMT0gMU1IeiBjbG9jayBmb3IgODI1NAorICAgIFs0XSAtICAgICAwPUEvRCBSYW5nZSBpcyArLy0xMFYKKwkgICAgICAxPSAgICAgICAgICAgICArLy01VgorCSAgICAgIDI9ICAgICAgICAgICAgICsvLTIuNVYKKwkgICAgICAzPSAgICAgICAgICAgICArLy0xVgorCSAgICAgIDQ9ICAgICAgICAgICAgICsvLTAuNVYKKwkgICAgICA1PSAgCSAgICAgdXNlciBkZWZpbmVkIGJpcG9sYXIKKwkgICAgICA2PQkgICAgIDAtMTBWCisJICAgICAgNz0JICAgICAwLTVWCisgCSAgICAgIDg9CSAgICAgMC0yVgorCSAgICAgIDk9CSAgICAgMC0xVgorCSAgICAgMTA9CSAgICAgdXNlciBkZWZpbmVkIHVuaXBvbGFyCisgICAgWzVdIC0gMCwgIDU9RC9BIG91dHB1dHMgMC01ViAgKGludGVybmFsIHJlZmVyZW5jZSAtNVYpCisgICAgICAgICAgMSwgMTA9RC9BIG91dHB1dHMgMC0xMFYgKGludGVybmFsIHJlZmVyZW5jZSAtMTBWKQorCSAgICAgIDI9RC9BIG91dHB1dHMgdW5rbm93IChleHRlcm5hbCByZWZlcmVuY2UpCisgICAgWzZdIC0gMCwgNjA9bWF4ICA2MGtIeiBBL0Qgc2FtcGxpbmcKKyAgICAgICAgICAxLDEwMD1tYXggMTAwa0h6IEEvRCBzYW1wbGluZyAoUENMLTcxOCB3aXRoIE9wdGlvbiAwMDEgaW5zdGFsbGVkKQorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2RtYS5oPgorCisjaW5jbHVkZSAiODI1My5oIgorCisvLyAjZGVmaW5lIFBDTDgxOF9NT0RFMTNfQU8gMQorCisvLyBib2FyZHMgY29uc3RhbnRzCisKKyNkZWZpbmUgYm9hcmRQQ0w4MThMIDAKKyNkZWZpbmUgYm9hcmRQQ0w4MThIIDEKKyNkZWZpbmUgYm9hcmRQQ0w4MThIRCAyCisjZGVmaW5lIGJvYXJkUENMODE4SEcgMworI2RlZmluZSBib2FyZFBDTDgxOCA0CisjZGVmaW5lIGJvYXJkUENMNzE4IDUKKworLy8gSU8gc3BhY2UgbGVuCisjZGVmaW5lIFBDTHgxeF9SQU5HRSAxNgorLy8gSU8gc3BhY2UgbGVuIGlmIHdlIHVzZSBGSUZPCisjZGVmaW5lIFBDTHgxeEZJRk9fUkFOR0UgMzIKKworLy8gVzogY2xlYXIgSU5UIHJlcXVlc3QKKyNkZWZpbmUgUENMODE4X0NMUklOVCA4CisvLyBSOiByZXR1cm4gc3RhdHVzIGJ5dGUKKyNkZWZpbmUgUENMODE4X1NUQVRVUyA4CisvLyBSOiBBL0QgaGlnaCBieXRlIFc6IEEvRCByYW5nZSBjb250cm9sCisjZGVmaW5lIFBDTDgxOF9SQU5HRSAxCisvLyBSOiBuZXh0IG11eCBzY2FuIGNoYW5uZWwgVzogbXV4IHNjYW4gY2hhbm5lbCAmIHJhbmdlIGNvbnRyb2wgcG9pbnRlcgorI2RlZmluZSBQQ0w4MThfTVVYIDIKKy8vIFIvVzogb3BlcmF0aW9uIGNvbnRyb2wgcmVnaXN0ZXIKKyNkZWZpbmUgUENMODE4X0NPTlRST0wgOQorLy8gVzogY291bnRlciBlbmFibGUKKyNkZWZpbmUgUENMODE4X0NOVEVOQUJMRSAxMAorCisvLyBSOiBsb3cgYnl0ZSBvZiBBL0QgVzogc29mdCBBL0QgdHJpZ2dlcgorI2RlZmluZSBQQ0w4MThfQURfTE8gMAorLy8gUjogaGlnaCBieXRlIG9mIEEvRCBXOiBBL0QgcmFuZ2UgY29udHJvbAorI2RlZmluZSBQQ0w4MThfQURfSEkgMQorLy8gVzogRC9BIGxvdyZoaWdoIGJ5dGUKKyNkZWZpbmUgUENMODE4X0RBX0xPIDQKKyNkZWZpbmUgUENMODE4X0RBX0hJIDUKKy8vIFI6IGxvdyZoaWdoIGJ5dGUgb2YgREkKKyNkZWZpbmUgUENMODE4X0RJX0xPIDMKKyNkZWZpbmUgUENMODE4X0RJX0hJIDExCisvLyBXOiBsb3cmaGlnaCBieXRlIG9mIERPCisjZGVmaW5lIFBDTDgxOF9ET19MTyAzCisjZGVmaW5lIFBDTDgxOF9ET19ISSAxMQorLy8gVzogUENMNzE4IHNlY29uZCBEL0EKKyNkZWZpbmUgUENMNzE4X0RBMl9MTyA2CisjZGVmaW5lIFBDTDcxOF9EQTJfSEkgNworLy8gY291bnRlcnMKKyNkZWZpbmUgUENMODE4X0NUUjAgMTIKKyNkZWZpbmUgUENMODE4X0NUUjEgMTMKKyNkZWZpbmUgUENMODE4X0NUUjIgMTQKKy8vIFc6IGNvdW50ZXIgY29udHJvbAorI2RlZmluZSBQQ0w4MThfQ1RSQ1RMIDE1CisKKy8vIFc6IGZpZm8gZW5hYmxlL2Rpc2FibGUKKyNkZWZpbmUgUENMODE4X0ZJX0VOQUJMRSA2CisvLyBXOiBmaWZvIGludGVycnVwdCBjbGVhcgorI2RlZmluZSBQQ0w4MThfRklfSU5UQ0xSIDIwCisvLyBXOiBmaWZvIGludGVycnVwdCBjbGVhcgorI2RlZmluZSBQQ0w4MThfRklfRkxVU0ggMjUKKy8vIFI6IGZpZm8gc3RhdHVzCisjZGVmaW5lIFBDTDgxOF9GSV9TVEFUVVMgMjUKKy8vIFI6IG9uZSByZWNvcmQgZnJvbSBGSUZPCisjZGVmaW5lIFBDTDgxOF9GSV9EQVRBTE8gMjMKKyNkZWZpbmUgUENMODE4X0ZJX0RBVEFISSAyMworCisvLyB0eXBlIG9mIGludGVycnVwdCBoYW5kbGVyCisjZGVmaW5lIElOVF9UWVBFX0FJMV9JTlQgMQorI2RlZmluZSBJTlRfVFlQRV9BSTFfRE1BIDIKKyNkZWZpbmUgSU5UX1RZUEVfQUkxX0ZJRk8gMworI2RlZmluZSBJTlRfVFlQRV9BSTNfSU5UIDQKKyNkZWZpbmUgSU5UX1RZUEVfQUkzX0RNQSA1CisjZGVmaW5lIElOVF9UWVBFX0FJM19GSUZPIDYKKyNpZmRlZiBQQ0w4MThfTU9ERTEzX0FPCisjZGVmaW5lIElOVF9UWVBFX0FPMV9JTlQgNworI2RlZmluZSBJTlRfVFlQRV9BTzNfSU5UIDgKKyNlbmRpZgorCisjaWZkZWYgdW51c2VkCisvLyBSVEMgc3R1ZmYuLi4KKyNkZWZpbmUgSU5UX1RZUEVfQUkxX0RNQV9SVEMgOQorI2RlZmluZSBJTlRfVFlQRV9BSTNfRE1BX1JUQyAxMAorCisjZGVmaW5lIFJUQ19JUlEgCTgKKyNkZWZpbmUgUlRDX0lPX0VYVEVOVAkweDEwCisjZW5kaWYKKworI2RlZmluZSBNQUdJQ19ETUFfV09SRCAweDVhNWEKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxOGhfYWkgPSB7IDksIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwkJCVVOSV9SQU5HRSgxMCksCisJCQlVTklfUkFOR0UoNSksCisJCQlVTklfUkFOR0UoMi41KSwKKwkJCVVOSV9SQU5HRSgxLjI1KSwKKwkJCUJJUF9SQU5HRSgxMCksCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3BjbDgxOGhnX2FpID0geyAxMCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMDUpLAorCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDEpLAorCQkJQklQX1JBTkdFKDEwKSwKKwkJCUJJUF9SQU5HRSgxKSwKKwkJCUJJUF9SQU5HRSgwLjEpLAorCQkJQklQX1JBTkdFKDAuMDEpLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9wY2w4MThsX2xfYWkgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSg1KSwKKwkJCUJJUF9SQU5HRSgyLjUpLAorCQkJQklQX1JBTkdFKDEuMjUpLAorCQkJQklQX1JBTkdFKDAuNjI1KSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcGNsODE4bF9oX2FpID0geyA0LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSksCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlNzE4X2JpcG9sYXIxID0geyAxLCB7QklQX1JBTkdFKDEpLH0gfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZTcxOF9iaXBvbGFyMF81ID0geyAxLCB7QklQX1JBTkdFKDAuNSksfSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlNzE4X3VuaXBvbGFyMiA9IHsgMSwge1VOSV9SQU5HRSgyKSx9IH07CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2U3MThfdW5pcG9sYXIxID0geyAxLCB7QklQX1JBTkdFKDEpLH0gfTsKKworc3RhdGljIGludCBwY2w4MThfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNsODE4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKKyNpZmRlZiB1bnVzZWQKK3N0YXRpYyBpbnQgUlRDX2xvY2sgPSAwOwkvKiBSVEMgbG9jayAqLworc3RhdGljIGludCBSVENfdGltZXJfbG9jayA9IDA7CS8qIFJUQyBpbnQgbG9jayAqLworI2VuZGlmCisKK3N0cnVjdCBwY2w4MThfYm9hcmQgeworCisJY29uc3QgY2hhciAqbmFtZTsJLy8gZHJpdmVyIG5hbWUKKwlpbnQgbl9yYW5nZXM7CQkvLyBsZW4gb2YgcmFuZ2UgbGlzdAorCWludCBuX2FpY2hhbl9zZTsJLy8gbnVtIG9mIEEvRCBjaGFucyBpbiBzaW5nbGUgZW5kZWQgIG1vZGUKKwlpbnQgbl9haWNoYW5fZGlmZjsJLy8gbnVtIG9mIEEvRCBjaGFucyBpbiBkaWZlcmVuY2lhbCBtb2RlCisJdW5zaWduZWQgaW50IG5zX21pbjsJLy8gbWluaW1hbCBhbGxsb3dlZCBkZWxheSBiZXR3ZWVuIHNhbXBsZXMgKGluIG5zKQorCWludCBuX2FvY2hhbjsJCS8vIG51bSBvZiBEL0EgY2hhbnMKKwlpbnQgbl9kaWNoYW47CQkvLyBudW0gb2YgREkgY2hhbnMKKwlpbnQgbl9kb2NoYW47CQkvLyBudW0gb2YgRE8gY2hhbnMKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYWlfcmFuZ2VfdHlwZTsJLy8gZGVmYXVsdCBBL0QgcmFuZ2VsaXN0CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFvX3JhbmdlX3R5cGU7CS8vIGRlZmF1bHQgRC9BIHJhbmdlbGlzdAorCXVuc2lnbmVkIGludCBpb19yYW5nZTsJLy8gbGVuIG9mIElPIHNwYWNlCisJdW5zaWduZWQgaW50IElSUWJpdHM7CS8vIGFsbG93ZWQgaW50ZXJydXB0cworCXVuc2lnbmVkIGludCBETUFiaXRzOwkvLyBhbGxvd2VkIERNQSBjaGFucworCWludCBhaV9tYXhkYXRhOwkJLy8gbWF4ZGF0YSBmb3IgQS9ECisJaW50IGFvX21heGRhdGE7CQkvLyBtYXhkYXRhIGZvciBEL0EKKwl1bnNpZ25lZCBjaGFyIGZpZm87CS8vIDE9Ym9hcmQgaGFzIEZJRk8KKwlpbnQgaXNfODE4OworfTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbDgxOF9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeyJwY2w4MThsIiwgNCwgMTYsIDgsIDI1MDAwLCAxLCAxNiwgMTYsICZyYW5nZV9wY2w4MThsX2xfYWksCisJCQkmcmFuZ2VfdW5pcG9sYXI1LCBQQ0x4MXhfUkFOR0UsIDB4MDBmYywKKwkJMHgwYSwgMHhmZmYsIDB4ZmZmLCAwLCAxfSwKKwl7InBjbDgxOGgiLCA5LCAxNiwgOCwgMTAwMDAsIDEsIDE2LCAxNiwgJnJhbmdlX3BjbDgxOGhfYWksCisJCQkmcmFuZ2VfdW5pcG9sYXI1LCBQQ0x4MXhfUkFOR0UsIDB4MDBmYywKKwkJMHgwYSwgMHhmZmYsIDB4ZmZmLCAwLCAxfSwKKwl7InBjbDgxOGhkIiwgOSwgMTYsIDgsIDEwMDAwLCAxLCAxNiwgMTYsICZyYW5nZV9wY2w4MThoX2FpLAorCQkJJnJhbmdlX3VuaXBvbGFyNSwgUENMeDF4X1JBTkdFLCAweDAwZmMsCisJCTB4MGEsIDB4ZmZmLCAweGZmZiwgMSwgMX0sCisJeyJwY2w4MThoZyIsIDEyLCAxNiwgOCwgMTAwMDAsIDEsIDE2LCAxNiwgJnJhbmdlX3BjbDgxOGhnX2FpLAorCQkJJnJhbmdlX3VuaXBvbGFyNSwgUENMeDF4X1JBTkdFLCAweDAwZmMsCisJCTB4MGEsIDB4ZmZmLCAweGZmZiwgMSwgMX0sCisJeyJwY2w4MTgiLCA5LCAxNiwgOCwgMTAwMDAsIDIsIDE2LCAxNiwgJnJhbmdlX3BjbDgxOGhfYWksCisJCQkmcmFuZ2VfdW5pcG9sYXI1LCBQQ0x4MXhfUkFOR0UsIDB4MDBmYywKKwkJMHgwYSwgMHhmZmYsIDB4ZmZmLCAwLCAxfSwKKwl7InBjbDcxOCIsIDEsIDE2LCA4LCAxNjAwMCwgMiwgMTYsIDE2LCAmcmFuZ2VfdW5pcG9sYXI1LAorCQkJJnJhbmdlX3VuaXBvbGFyNSwgUENMeDF4X1JBTkdFLCAweDAwZmMsCisJCTB4MGEsIDB4ZmZmLCAweGZmZiwgMCwgMH0sCisJLyogcGNtMzcxOCAqLworCXsicGNtMzcxOCIsIDksIDE2LCA4LCAxMDAwMCwgMCwgMTYsIDE2LCAmcmFuZ2VfcGNsODE4aF9haSwKKwkJCSZyYW5nZV91bmlwb2xhcjUsIFBDTHgxeF9SQU5HRSwgMHgwMGZjLAorCQkweDBhLCAweGZmZiwgMHhmZmYsIDAsIDEgLyogWFhYID8gKi8gfSwKK307CisKKyNkZWZpbmUgbl9ib2FyZHR5cGVzIChzaXplb2YoYm9hcmR0eXBlcykvc2l6ZW9mKHN0cnVjdCBwY2w4MThfYm9hcmQpKQorCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3BjbDgxOCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJwY2w4MTgiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbDgxOF9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNsODE4X2RldGFjaCwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkdHlwZXMsCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBwY2w4MThfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY2w4MTgpOworCitzdHJ1Y3QgcGNsODE4X3ByaXZhdGUgeworCisJdW5zaWduZWQgaW50IGRtYTsJLy8gdXNlZCBETUEsIDA9ZG9uJ3QgdXNlIERNQQorCWludCBkbWFfcnRjOwkJLy8gMT1SVEMgdXNlZCB3aXRoIERNQSwgMD1ubyBSVEMgYWxsb2MKKwl1bnNpZ25lZCBpbnQgaW9fcmFuZ2U7CisjaWZkZWYgdW51c2VkCisJdW5zaWduZWQgbG9uZyBydGNfaW9iYXNlOwkvLyBSVEMgcG9ydCByZWdpb24KKwl1bnNpZ25lZCBpbnQgcnRjX2lvc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnRjX2lycTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBydGNfaXJxX3RpbWVyOwkvLyB0aW1lciBmb3IgUlRDIHNhbml0eSBjaGVjaworCXVuc2lnbmVkIGxvbmcgcnRjX2ZyZXE7CS8vIFJUQyBpbnQgZnJlcQorCWludCBydGNfaXJxX2Jsb2NrZWQ7CS8vIDE9d2Ugbm93IGRvIEFJIHdpdGggRE1BJlJUQworI2VuZGlmCisJdW5zaWduZWQgbG9uZyBkbWFidWZbMl07CS8vIHBvaW50ZXJzIHRvIGJlZ2luIG9mIERNQSBidWZmZXJzCisJdW5zaWduZWQgaW50IGRtYXBhZ2VzWzJdOwkvLyBsZW4gb2YgRE1BIGJ1ZmZlcnMgaW4gUEFHRV9TSVpFcworCXVuc2lnbmVkIGludCBod2RtYXB0clsyXTsJLy8gaGFyZHdhcmUgYWRkcmVzcyBvZiBETUEgYnVmZmVycworCXVuc2lnbmVkIGludCBod2RtYXNpemVbMl07CS8vIGxlbiBvZiBETUEgYnVmZmVycyBpbiBCeXRlcworCXVuc2lnbmVkIGludCBkbWFzYW1wbHNpemU7CS8vIHNpemUgaW4gc2FtcGxlcyBod2RtYXNpemVbMF0vMgorCXVuc2lnbmVkIGludCBsYXN0X3RvcF9kbWE7CS8vIERNQSBwb2ludGVyIGluIGxhc3QgUlRDIGludAorCWludCBuZXh0X2RtYV9idWY7CS8vIHdoaWNoIERNQSBidWZmZXIgd2lsbCBiZSB1c2VkIG5leHQgcm91bmQKKwlsb25nIGRtYV9ydW5zX3RvX2VuZDsJLy8gaG93IG1hbnkgd2UgbXVzdCBwZXJtb3JtIERNQSB0cmFuc2ZlciB0byBlbmQgb2YgcmVjb3JkCisJdW5zaWduZWQgbG9uZyBsYXN0X2RtYV9ydW47CS8vIGhvdyBtYW55IGJ5dGVzIHdlIG11c3QgdHJhbnNmZXIgb24gbGFzdCBETUEgcGFnZQorCXVuc2lnbmVkIGNoYXIgbmV2ZXJlbmRpbmdfYWk7CS8vIGlmPTEsIHRoZW4gd2UgZG8gbmV2ZXJlbmRpbmcgcmVjb3JkICh5b3UgbXVzdCB1c2UgY2FuY2VsKCkpCisJdW5zaWduZWQgaW50IG5zX21pbjsJLy8gbWFuaW1hbCBhbGxsb3dlZCBkZWxheSBiZXR3ZWVuIHNhbXBsZXMgKGluIHVzKSBmb3IgYWN0dWFsIGNhcmQKKwlpbnQgaTgyNTNfb3NjX2Jhc2U7CS8vIDEvZnJlcXVlbmN5IG9mIG9uIGJvYXJkIG9zY2lsYXRvciBpbiBucworCWludCBpcnFfZnJlZTsJCS8vIDE9aGF2ZSBhbGxvY2F0ZWQgSVJRCisJaW50IGlycV9ibG9ja2VkOwkvLyAxPUlSUSBub3cgdXNlcyBhbnkgc3ViZGV2CisJaW50IGlycV93YXNfbm93X2Nsb3NlZDsJLy8gd2hlbiBJUlEgZmluaXNoLCB0aGVyZSdzIHN0b3JlZCBpbnQ4MThfbW9kZSBmb3IgbGFzdCBpbnRlcnJ1cHQKKwlpbnQgYWlfbW9kZTsJCS8vIHdobyBub3cgdXNlcyBJUlEgLSAxPUFJMSBpbnQsIDI9QUkxIGRtYSwgMz1BSTMgaW50LCA0QUkzIGRtYQorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpsYXN0X2ludF9zdWI7CS8vIHB0ciB0byBzdWJkZXZpY2Ugd2hpY2ggbm93IGZpbmlzaAorCWludCBhaV9hY3Rfc2NhbjsJLy8gaG93IG1hbnkgc2NhbnMgd2UgZmluaXNoZWQKKwlpbnQgYWlfYWN0X2NoYW47CS8vIGFjdHVhbCBwb3NpdGlvbiBpbiBhY3R1YWwgc2NhbgorCXVuc2lnbmVkIGludCBhY3RfY2hhbmxpc3RbMTZdOwkvLyBNVVggc2V0dGluZyBmb3IgYWN0dWFsIEFJIG9wZXJhdGlvbnMKKwl1bnNpZ25lZCBpbnQgYWN0X2NoYW5saXN0X2xlbjsJLy8gaG93IGxvbmcgaXMgYWN0dWFsIE1VWCBsaXN0CisJdW5zaWduZWQgaW50IGFjdF9jaGFubGlzdF9wb3M7CS8vIGFjdHVhbCBwb3NpdGlvbiBpbiBNVVggbGlzdAorCXVuc2lnbmVkIGludCBhaV9zY2FuczsJLy8gbGVuIG9mIHNjYW5saXN0CisJdW5zaWduZWQgaW50IGFpX25fY2hhbjsJLy8gaG93IG1hbnkgY2hhbm5lbHMgaXMgbWVhc3VyZWQKKwl1bnNpZ25lZCBpbnQgKmFpX2NoYW5saXN0OwkvLyBhY3RhdWwgY2hhbmxpc3QKKwl1bnNpZ25lZCBpbnQgYWlfZmxhZ3M7CS8vIGZsYWdsaXN0CisJdW5zaWduZWQgaW50IGFpX2RhdGFfbGVuOwkvLyBsZW4gb2YgZGF0YSBidWZmZXIKKwlzaG9ydCAqYWlfZGF0YTsJLy8gZGF0YSBidWZmZXIKKwl1bnNpZ25lZCBpbnQgYWlfdGltZXIxOwkvLyB0aW1lcnMKKwl1bnNpZ25lZCBpbnQgYWlfdGltZXIyOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJfYWk7CS8vIHB0ciB0byBBSSBzdWJkZXZpY2UKKwl1bnNpZ25lZCBjaGFyIHVzZWZpZm87CS8vIDE9dXNlIGZpZm8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMl07Cit9OworCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbXV4b25lY2hhbltdID0geyAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAkvLyB1c2VkIGZvciBnYWluIGxpc3QgcHJvZ3JhbW1pbmcKKwkweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmCit9OworCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNsODE4X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNsODE4X2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgdm9pZCBzZXR1cF9jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwl1bnNpZ25lZCBpbnQgKmNoYW5saXN0LCB1bnNpZ25lZCBpbnQgbl9jaGFuLCB1bnNpZ25lZCBpbnQgc2VnbGVuKTsKK3N0YXRpYyBpbnQgY2hlY2tfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50ICpjaGFubGlzdCwgdW5zaWduZWQgaW50IG5fY2hhbik7CisKK3N0YXRpYyBpbnQgcGNsODE4X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyB2b2lkIHN0YXJ0X3BhY2VyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRpdmlzb3IxLAorCXVuc2lnbmVkIGludCBkaXZpc29yMik7CisKKyNpZmRlZiB1bnVzZWQKK3N0YXRpYyBpbnQgc2V0X3J0Y19pcnFfYml0KHVuc2lnbmVkIGNoYXIgYml0KTsKK3N0YXRpYyB2b2lkIHJ0Y19kcm9wcGVkX2lycSh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIGludCBydGNfc2V0ZnJlcV9pcnEoaW50IGZyZXEpOworI2VuZGlmCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEFOQUxPRyBJTlBVVCBNT0RFMCwgODE4IGNhcmRzLCBzbG93IHZlcnNpb24KKyovCitzdGF0aWMgaW50IHBjbDgxOF9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCB0aW1lb3V0OworCisJLyogc29mdHdhcmUgdHJpZ2dlciwgRE1BIGFuZCBJTlQgb2ZmICovCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsKKworCS8qIHNlbGVjdCBjaGFubmVsICovCisJb3V0YihtdXhvbmVjaGFuW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfTVVYKTsKKworCS8qIHNlbGVjdCBnYWluICovCisJb3V0YihDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyksIGRldi0+aW9iYXNlICsgUENMODE4X1JBTkdFKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKworCQkvKiBjbGVhciBJTlQgKGNvbnZlcnNpb24gZW5kKSBmbGFnICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ0xSSU5UKTsKKworCQkvKiBzdGFydCBjb252ZXJzaW9uICovCisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQURfTE8pOworCisJCXRpbWVvdXQgPSAxMDA7CisJCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJCWlmIChpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfU1RBVFVTKSAmIDB4MTApCisJCQkJZ290byBjb252X2ZpbmlzaDsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJY29tZWRpX2Vycm9yKGRldiwgIkEvRCBpbnNuIHRpbWVvdXQiKTsKKwkJLyogY2xlYXIgSU5UIChjb252ZXJzaW9uIGVuZCkgZmxhZyAqLworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0NMUklOVCk7CisJCXJldHVybiAtRUlPOworCisJICAgICAgY29udl9maW5pc2g6CisJCWRhdGFbbl0gPSAoKGluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9BRF9ISSkgPDwgNCkgfAorCQkJKGluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9BRF9MTykgPj4gNCkpOworCX0KKworCXJldHVybiBuOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBTkFMT0cgT1VUUFVUIE1PREUwLCA4MTggY2FyZHMKKyAgIG9ubHkgb25lIHNhbXBsZSBwZXIgY2FsbCBpcyBzdXBwb3J0ZWQKKyovCitzdGF0aWMgaW50IHBjbDgxOF9hb19pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWRhdGFbbl0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBwY2w4MThfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW25dOworCQlvdXRiKChkYXRhW25dICYgMHgwMDBmKSA8PCA0LCBkZXYtPmlvYmFzZSArCisJCQkoY2hhbikgPyBQQ0w3MThfREEyX0xPIDogUENMODE4X0RBX0xPKTsKKwkJb3V0YigoZGF0YVtuXSAmIDB4MGZmMCkgPj4gNCwgZGV2LT5pb2Jhc2UgKworCQkJKGNoYW4pID8gUENMNzE4X0RBMl9ISSA6IFBDTDgxOF9EQV9ISSk7CisJfQorCisJcmV0dXJuIG47Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIERJR0lUQUwgSU5QVVQgTU9ERTAsIDgxOCBjYXJkcworCisgICBvbmx5IG9uZSBzYW1wbGUgcGVyIGNhbGwgaXMgc3VwcG9ydGVkCisqLworc3RhdGljIGludCBwY2w4MThfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGFbMV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRElfTE8pIHwKKwkJKGluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9ESV9ISSkgPDwgOCk7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRElHSVRBTCBPVVRQVVQgTU9ERTAsIDgxOCBjYXJkcworCisgICBvbmx5IG9uZSBzYW1wbGUgcGVyIGNhbGwgaXMgc3VwcG9ydGVkCisqLworc3RhdGljIGludCBwY2w4MThfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCXMtPnN0YXRlIHw9IChkYXRhWzBdICYgZGF0YVsxXSk7CisKKwlvdXRiKHMtPnN0YXRlICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRE9fTE8pOworCW91dGIoKHMtPnN0YXRlID4+IDgpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9ET19ISSk7CisKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgYW5hbG9nIGlucHV0IGludGVycnVwdCBtb2RlIDEgJiAzLCA4MTggY2FyZHMKKyAgIG9uZSBzYW1wbGUgcGVyIGludGVycnVwdCB2ZXJzaW9uCisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2ludChpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwlpbnQgbG93OworCWludCB0aW1lb3V0ID0gNTA7CS8qIHdhaXQgbWF4IDUwdXMgKi8KKworCXdoaWxlICh0aW1lb3V0LS0pIHsKKwkJaWYgKGluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9TVEFUVVMpICYgMHgxMCkKKwkJCWdvdG8gY29udl9maW5pc2g7CisJCWNvbWVkaV91ZGVsYXkoMSk7CisJfQorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfU1RBVFVTKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKwljb21lZGlfZXJyb3IoZGV2LCAiQS9EIG1vZGUxLzMgSVJRIHdpdGhvdXQgRFJEWSEiKTsKKwlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKKworICAgICAgY29udl9maW5pc2g6CisJbG93ID0gaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0FEX0xPKTsKKwljb21lZGlfYnVmX3B1dChzLT5hc3luYywgKChpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQURfSEkpIDw8IDQpIHwgKGxvdyA+PiA0KSkpOwkvLyBnZXQgb25lIHNhbXBsZQorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KKworCWlmICgobG93ICYgMHhmKSAhPSBkZXZwcml2LT5hY3RfY2hhbmxpc3RbZGV2cHJpdi0+YWN0X2NoYW5saXN0X3Bvc10pIHsJLy8gZHJvcG91dCEKKwkJcnRfcHJpbnRrCisJCQkoImNvbWVkaTogQS9EIG1vZGUxLzMgSVJRIC0gY2hhbm5lbCBkcm9wb3V0ICV4IT0leCAhXG4iLAorCQkJKGxvdyAmIDB4ZiksCisJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RbZGV2cHJpdi0+YWN0X2NoYW5saXN0X3Bvc10pOworCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CisJCS8vIHJ0X3ByaW50aygiRSIpOworCQlkZXZwcml2LT5haV9hY3Rfc2Nhbi0tOworCX0KKworCWlmICghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpIHsKKwkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID09IDApIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQl9CisJfQorCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgYW5hbG9nIGlucHV0IGRtYSBtb2RlIDEgJiAzLCA4MTggY2FyZHMKKyovCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbDgxOF9haV9tb2RlMTNfZG1hKGludCBpcnEsIHZvaWQgKmQpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWludCBpLCBsZW4sIGJ1ZnB0cjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXNob3J0ICpwdHI7CisKKwlkaXNhYmxlX2RtYShkZXZwcml2LT5kbWEpOworCWRldnByaXYtPm5leHRfZG1hX2J1ZiA9IDEgLSBkZXZwcml2LT5uZXh0X2RtYV9idWY7CisJaWYgKChkZXZwcml2LT5kbWFfcnVuc190b19lbmQpID4gLTEgfHwgZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpIHsJLy8gc3dpdGNoIGRtYSBidWZzCisJCXNldF9kbWFfbW9kZShkZXZwcml2LT5kbWEsIERNQV9NT0RFX1JFQUQpOworCQlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJCXNldF9kbWFfYWRkcihkZXZwcml2LT5kbWEsCisJCQlkZXZwcml2LT5od2RtYXB0cltkZXZwcml2LT5uZXh0X2RtYV9idWZdKTsKKwkJaWYgKGRldnByaXYtPmRtYV9ydW5zX3RvX2VuZCB8fCBkZXZwcml2LT5uZXZlcmVuZGluZ19haSkgeworCQkJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsCisJCQkJZGV2cHJpdi0+aHdkbWFzaXplW2RldnByaXYtPm5leHRfZG1hX2J1Zl0pOworCQl9IGVsc2UgeworCQkJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsIGRldnByaXYtPmxhc3RfZG1hX3J1bik7CisJCX0KKwkJcmVsZWFzZV9kbWFfbG9jayhmbGFncyk7CisJCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwl9CisJcnRfcHJpbnRrKCJjb21lZGk6IEEvRCBtb2RlMS8zIElSUSBcbiIpOworCisJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kLS07CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCXB0ciA9IChzaG9ydCAqKSBkZXZwcml2LT5kbWFidWZbMSAtIGRldnByaXYtPm5leHRfZG1hX2J1Zl07CisKKwlsZW4gPSBkZXZwcml2LT5od2RtYXNpemVbMF0gPj4gMTsKKwlidWZwdHIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmICgocHRyW2J1ZnB0cl0gJiAweGYpICE9IGRldnByaXYtPmFjdF9jaGFubGlzdFtkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zXSkgewkvLyBkcm9wb3V0IQorCQkJcnRfcHJpbnRrCisJCQkJKCJjb21lZGk6IEEvRCBtb2RlMS8zIERNQSAtIGNoYW5uZWwgZHJvcG91dCAlZChjYXJkKSE9JWQoY2hhbmxpc3QpIGF0ICVkICFcbiIsCisJCQkJKHB0cltidWZwdHJdICYgMHhmKSwKKwkJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RbZGV2cHJpdi0+CisJCQkJCWFjdF9jaGFubGlzdF9wb3NdLAorCQkJCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MpOworCQkJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCX0KKworCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgcHRyW2J1ZnB0cisrXSA+PiA0KTsJLy8gZ2V0IG9uZSBzYW1wbGUKKworCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zKys7CisJCWlmIChkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID49IGRldnByaXYtPmFjdF9jaGFubGlzdF9sZW4pIHsKKwkJCWRldnByaXYtPmFpX2FjdF9zY2FuLS07CisJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID0gMDsKKwkJfQorCisJCWlmICghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpCisJCQlpZiAoZGV2cHJpdi0+YWlfYWN0X3NjYW4gPT0gMCkgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCisJCQkJcGNsODE4X2FpX2NhbmNlbChkZXYsIHMpOworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCQkvLyBwcmludGsoImRvbmUgaW50IGFpMTMgZG1hXG4iKTsKKwkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJCQl9CisJfQorCisJaWYgKGxlbiA+IDApCisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworI2lmZGVmIHVudXNlZAorLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgYW5hbG9nIGlucHV0IGRtYSBtb2RlIDEgJiAzIG92ZXIgUlRDLCA4MTggY2FyZHMKKyovCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbDgxOF9haV9tb2RlMTNfZG1hX3J0YyhpbnQgaXJxLCB2b2lkICpkKQoreworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwl1bnNpZ25lZCBpbnQgdG9wMSwgdG9wMiwgaSwgYnVmcHRyOworCWxvbmcgb2ZzX2RhdHM7CisJc2hvcnQgKmRtYWJ1ZiA9IChzaG9ydCAqKSBkZXZwcml2LT5kbWFidWZbMF07CisKKwkvL291dGIoMiwweDM3OCk7CisJc3dpdGNoIChkZXZwcml2LT5haV9tb2RlKSB7CisJY2FzZSBJTlRfVFlQRV9BSTFfRE1BX1JUQzoKKwljYXNlIElOVF9UWVBFX0FJM19ETUFfUlRDOgorCQl0bXAgPSAoQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKSAmIDB4RjApOworCQltb2RfdGltZXIoJmRldnByaXYtPnJ0Y19pcnFfdGltZXIsCisJCQlqaWZmaWVzICsgSFogLyBkZXZwcml2LT5ydGNfZnJlcSArIDIgKiBIWiAvIDEwMCk7CisKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCXRvcDEgPSBnZXRfZG1hX3Jlc2lkdWUoZGV2cHJpdi0+ZG1hKTsKKwkJCXRvcDIgPSBnZXRfZG1hX3Jlc2lkdWUoZGV2cHJpdi0+ZG1hKTsKKwkJCWlmICh0b3AxID09IHRvcDIpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAodG9wMSAhPSB0b3AyKQorCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl0b3AxID0gZGV2cHJpdi0+aHdkbWFzaXplWzBdIC0gdG9wMTsJLy8gd2hlcmUgaXMgbm93IERNQSBpbiBidWZmZXIKKwkJdG9wMSA+Pj0gMTsKKwkJb2ZzX2RhdHMgPSB0b3AxIC0gZGV2cHJpdi0+bGFzdF90b3BfZG1hOwkvLyBuZXcgc2FtcGxlcyBmcm9tIGxhc3QgY2FsbAorCQlpZiAob2ZzX2RhdHMgPCAwKQorCQkJb2ZzX2RhdHMgPSAoZGV2cHJpdi0+ZG1hc2FtcGxzaXplKSArIG9mc19kYXRzOworCQlpZiAoIW9mc19kYXRzKQorCQkJcmV0dXJuIElSUV9IQU5ETEVEOwkvLyBleGl0PW5vIG5ldyBzYW1wbGVzIGZyb20gbGFzdCBjYWxsCisJCS8vIG9ic2x1eiBkYXRhCisJCWkgPSBkZXZwcml2LT5sYXN0X3RvcF9kbWEgLSAxOworCQlpICY9IChkZXZwcml2LT5kbWFzYW1wbHNpemUgLSAxKTsKKworCQlpZiAoZG1hYnVmW2ldICE9IE1BR0lDX0RNQV9XT1JEKSB7CS8vIERNQSBvdmVyZmxvdyEKKwkJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgbW9kZTEvMyBETUEgYnVmZmVyIG92ZXJmbG93ISIpOworCQkJLy9ydF9wcmludGsoIkkgJWQgZG1hYnVmW2ldICVkICVkXG4iLGksZG1hYnVmW2ldLGRldnByaXYtPmRtYXNhbXBsc2l6ZSk7CisJCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJfQorCQkvL3J0X3ByaW50aygiciAlbGQgIixvZnNfZGF0cyk7CisKKwkJYnVmcHRyID0gZGV2cHJpdi0+bGFzdF90b3BfZG1hOworCisJCWZvciAoaSA9IDA7IGkgPCBvZnNfZGF0czsgaSsrKSB7CisJCQlpZiAoKGRtYWJ1ZltidWZwdHJdICYgMHhmKSAhPSBkZXZwcml2LT5hY3RfY2hhbmxpc3RbZGV2cHJpdi0+YWN0X2NoYW5saXN0X3Bvc10pIHsJLy8gZHJvcG91dCEKKwkJCQlydF9wcmludGsKKwkJCQkJKCJjb21lZGk6IEEvRCBtb2RlMS8zIERNQSAtIGNoYW5uZWwgZHJvcG91dCAlZCE9JWQgIVxuIiwKKwkJCQkJKGRtYWJ1ZltidWZwdHJdICYgMHhmKSwKKwkJCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0W2RldnByaXYtPgorCQkJCQkJYWN0X2NoYW5saXN0X3Bvc10pOworCQkJCXBjbDgxOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9CisJCQkJCUNPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJfQorCisJCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgZG1hYnVmW2J1ZnB0cisrXSA+PiA0KTsJLy8gZ2V0IG9uZSBzYW1wbGUKKwkJCWJ1ZnB0ciAmPSAoZGV2cHJpdi0+ZG1hc2FtcGxzaXplIC0gMSk7CisKKwkJCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgeworCQkJCWRldnByaXYtPmFpX2FjdF9zY2FuLS07CisJCQl9CisKKwkJCWlmICghZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkpCisJCQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID09IDApIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLworCQkJCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQkJCS8vcHJpbnRrKCJkb25lIGludCBhaTEzIGRtYVxuIik7CisJCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCQl9CisJCX0KKworCQlkZXZwcml2LT5sYXN0X3RvcF9kbWEgPSBidWZwdHI7CisJCWJ1ZnB0ci0tOworCQlidWZwdHIgJj0gKGRldnByaXYtPmRtYXNhbXBsc2l6ZSAtIDEpOworCQlkbWFidWZbYnVmcHRyXSA9IE1BR0lDX0RNQV9XT1JEOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJLy9vdXRiKDAsMHgzNzgpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCisJLy9vdXRiKDAsMHgzNzgpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBhbmFsb2cgaW5wdXQgaW50ZXJydXB0IG1vZGUgMSAmIDMsIDgxOEhEL0hHIGNhcmRzCisqLworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2ZpZm8oaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJaW50IGksIGxlbiwgbG87CisKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0lOVENMUik7CS8vIGNsZWFyIGZpZm8gaW50IHJlcXVlc3QKKworCWxvID0gaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0ZJX1NUQVRVUyk7CisKKwlpZiAobG8gJiA0KSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgbW9kZTEvMyBGSUZPIG92ZXJmbG93ISIpOworCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwlpZiAobG8gJiAxKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJBL0QgbW9kZTEvMyBGSUZPIGludGVycnVwdCB3aXRob3V0IGRhdGEhIik7CisJCXBjbDgxOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BIHwgQ09NRURJX0NCX0VSUk9SOworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWlmIChsbyAmIDIpIHsKKwkJbGVuID0gNTEyOworCX0gZWxzZSB7CisJCWxlbiA9IDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWxvID0gaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0RBVEFMTyk7CisJCWlmICgobG8gJiAweGYpICE9IGRldnByaXYtPmFjdF9jaGFubGlzdFtkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zXSkgewkvLyBkcm9wb3V0IQorCQkJcnRfcHJpbnRrCisJCQkJKCJjb21lZGk6IEEvRCBtb2RlMS8zIEZJRk8gLSBjaGFubmVsIGRyb3BvdXQgJWQhPSVkICFcbiIsCisJCQkJKGxvICYgMHhmKSwKKwkJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RbZGV2cHJpdi0+CisJCQkJCWFjdF9jaGFubGlzdF9wb3NdKTsKKwkJCXBjbDgxOF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9FUlJPUjsKKwkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisKKwkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIChsbyA+PiA0KSB8IChpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRklfREFUQUhJKSA8PCA0KSk7CS8vIGdldCBvbmUgc2FtcGxlCisKKwkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CisJCQlkZXZwcml2LT5haV9hY3Rfc2Nhbi0tOworCQl9CisKKwkJaWYgKCFkZXZwcml2LT5uZXZlcmVuZGluZ19haSkKKwkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA9PSAwKSB7CS8qIGFsbCBkYXRhIHNhbXBsZWQgKi8KKwkJCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCX0KKwl9CisKKwlpZiAobGVuID4gMCkKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgSU5UIHByb2NlZHVyZQorKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNsODE4KGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IGQ7CisKKwlpZiAoIWRldi0+YXR0YWNoZWQpIHsKKwkJY29tZWRpX2Vycm9yKGRldiwgInByZW1hdHVyZSBpbnRlcnJ1cHQiKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwkvL3J0X3ByaW50aygiSVxuIik7CisKKwlzd2l0Y2ggKGRldnByaXYtPmFpX21vZGUpIHsKKwljYXNlIElOVF9UWVBFX0FJMV9ETUE6CisJY2FzZSBJTlRfVFlQRV9BSTNfRE1BOgorCQlyZXR1cm4gaW50ZXJydXB0X3BjbDgxOF9haV9tb2RlMTNfZG1hKGlycSwgZCk7CisJY2FzZSBJTlRfVFlQRV9BSTFfSU5UOgorCWNhc2UgSU5UX1RZUEVfQUkzX0lOVDoKKwkJcmV0dXJuIGludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2ludChpcnEsIGQpOworCWNhc2UgSU5UX1RZUEVfQUkxX0ZJRk86CisJY2FzZSBJTlRfVFlQRV9BSTNfRklGTzoKKwkJcmV0dXJuIGludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2ZpZm8oaXJxLCBkKTsKKyNpZmRlZiBQQ0w4MThfTU9ERTEzX0FPCisJY2FzZSBJTlRfVFlQRV9BTzFfSU5UOgorCWNhc2UgSU5UX1RZUEVfQU8zX0lOVDoKKwkJcmV0dXJuIGludGVycnVwdF9wY2w4MThfYW9fbW9kZTEzX2ludChpcnEsIGQpOworI2VuZGlmCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DTFJJTlQpOwkvKiBjbGVhciBJTlQgcmVxdWVzdCAqLworCisJaWYgKCghZGV2LT5pcnEpIHx8ICghZGV2cHJpdi0+aXJxX2ZyZWUpIHx8ICghZGV2cHJpdi0+aXJxX2Jsb2NrZWQpCisJCXx8ICghZGV2cHJpdi0+YWlfbW9kZSkpIHsKKwkJaWYgKGRldnByaXYtPmlycV93YXNfbm93X2Nsb3NlZCkgeworCQkJaWYgKGRldnByaXYtPm5ldmVyZW5kaW5nX2FpICYmCisJCQkJKGRldnByaXYtPmFpX21vZGUgPT0gSU5UX1RZUEVfQUkxX0RNQQorCQkJCQl8fCBkZXZwcml2LT5haV9tb2RlID09CisJCQkJCUlOVF9UWVBFX0FJM19ETUEpKSB7CisJCQkJLyogd2UgaGFkIG5ldmVyZW5kaW5nIGFpIGJ1dCBhaV9jYW5jZWwoKSBoYXMgYmVlbiBjYWxsZWQKKwkJCQkgICB0aGUgY2xlYW51cCBmcm9tIGFpX2NhbmNlbCgpIGhhcyBiZWVuIGRlbGF5ZWQgdW50aWwga25vdworCQkJCSAgIGJlY2F1c2UgdGhlIGNhcmQgZG9lc24ndCBzZWVtIHRvIGxpa2UgYmVpbmcgcmVwcm9ncmFtbWVkCisJCQkJICAgd2hpbGUgYSBETUEgdHJhbnNmZXIgaXMgaW4gcHJvZ3Jlc3MKKwkJCQkgKi8KKwkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJCQkJZGV2cHJpdi0+YWlfbW9kZSA9IGRldnByaXYtPmlycV93YXNfbm93X2Nsb3NlZDsKKwkJCQlkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQgPSAwOworCQkJCWRldnByaXYtPm5ldmVyZW5kaW5nX2FpID0gMDsKKwkJCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgcyk7CisJCQl9CisJCQlkZXZwcml2LT5pcnFfd2FzX25vd19jbG9zZWQgPSAwOworCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQl9CisJCWNvbWVkaV9lcnJvcihkZXYsICJiYWQgSVJRISIpOworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJY29tZWRpX2Vycm9yKGRldiwgIklSUSBmcm9tIHVua25vdyBzb3VyY2UhIik7CisJcmV0dXJuIElSUV9OT05FOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBTkFMT0cgSU5QVVQgTU9ERSAxIG9yIDMgRE1BICwgODE4IGNhcmRzCisqLworc3RhdGljIHZvaWQgcGNsODE4X2FpX21vZGUxM2RtYV9pbnQoaW50IG1vZGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJdW5zaWduZWQgaW50IGJ5dGVzOworCisJcnRfcHJpbnRrKCJtb2RlMTNkbWFfaW50LCBtb2RlOiAlZFxuIiwgbW9kZSk7CisJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsJLy8gZGlzYWJsZSBkbWEKKwlieXRlcyA9IGRldnByaXYtPmh3ZG1hc2l6ZVswXTsKKwlpZiAoIWRldnByaXYtPm5ldmVyZW5kaW5nX2FpKSB7CisJCWJ5dGVzID0gZGV2cHJpdi0+YWlfbl9jaGFuICogZGV2cHJpdi0+YWlfc2NhbnMgKiBzaXplb2Yoc2hvcnQpOwkvLyBob3cgbWFueQorCQlkZXZwcml2LT5kbWFfcnVuc190b19lbmQgPSBieXRlcyAvIGRldnByaXYtPmh3ZG1hc2l6ZVswXTsJLy8gaG93IG1hbnkgRE1BIHBhZ2VzIHdlIG11c3QgZmlpbAorCQlkZXZwcml2LT5sYXN0X2RtYV9ydW4gPSBieXRlcyAlIGRldnByaXYtPmh3ZG1hc2l6ZVswXTsJLy9vbiBsYXN0IGRtYSB0cmFuc2ZlciBtdXN0IGJlIG1vdmVkCisJCWRldnByaXYtPmRtYV9ydW5zX3RvX2VuZC0tOworCQlpZiAoZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID49IDApCisJCQlieXRlcyA9IGRldnByaXYtPmh3ZG1hc2l6ZVswXTsKKwl9CisKKwlkZXZwcml2LT5uZXh0X2RtYV9idWYgPSAwOworCXNldF9kbWFfbW9kZShkZXZwcml2LT5kbWEsIERNQV9NT0RFX1JFQUQpOworCWZsYWdzID0gY2xhaW1fZG1hX2xvY2soKTsKKwljbGVhcl9kbWFfZmYoZGV2cHJpdi0+ZG1hKTsKKwlzZXRfZG1hX2FkZHIoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5od2RtYXB0clswXSk7CisJc2V0X2RtYV9jb3VudChkZXZwcml2LT5kbWEsIGJ5dGVzKTsKKwlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKKwllbmFibGVfZG1hKGRldnByaXYtPmRtYSk7CisKKwlpZiAobW9kZSA9PSAxKSB7CisJCWRldnByaXYtPmFpX21vZGUgPSBJTlRfVFlQRV9BSTFfRE1BOworCQlvdXRiKDB4ODcgfCAoZGV2LT5pcnEgPDwgNCksIGRldi0+aW9iYXNlICsgUENMODE4X0NPTlRST0wpOwkvKiBQYWNlcitJUlErRE1BICovCisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+YWlfbW9kZSA9IElOVF9UWVBFX0FJM19ETUE7CisJCW91dGIoMHg4NiB8IChkZXYtPmlycSA8PCA0KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CS8qIEV4dCB0cmlnK0lSUStETUEgKi8KKwl9OworfQorCisjaWZkZWYgdW51c2VkCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBTkFMT0cgSU5QVVQgTU9ERSAxIG9yIDMgRE1BIHJ0YywgODE4IGNhcmRzCisqLworc3RhdGljIHZvaWQgcGNsODE4X2FpX21vZGUxM2RtYV9ydGMoaW50IG1vZGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJc2hvcnQgKnBvbGU7CisKKwlzZXRfZG1hX21vZGUoZGV2cHJpdi0+ZG1hLCBETUFfTU9ERV9SRUFEIHwgRE1BX0FVVE9JTklUKTsKKwlmbGFncyA9IGNsYWltX2RtYV9sb2NrKCk7CisJY2xlYXJfZG1hX2ZmKGRldnByaXYtPmRtYSk7CisJc2V0X2RtYV9hZGRyKGRldnByaXYtPmRtYSwgZGV2cHJpdi0+aHdkbWFwdHJbMF0pOworCXNldF9kbWFfY291bnQoZGV2cHJpdi0+ZG1hLCBkZXZwcml2LT5od2RtYXNpemVbMF0pOworCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOworCWVuYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwlkZXZwcml2LT5sYXN0X3RvcF9kbWEgPSAwOwkvL2RldnByaXYtPmh3ZG1hc2l6ZVswXTsKKwlwb2xlID0gKHNob3J0ICopIGRldnByaXYtPmRtYWJ1ZlswXTsKKwlkZXZwcml2LT5kbWFzYW1wbHNpemUgPSBkZXZwcml2LT5od2RtYXNpemVbMF0gLyAyOworCXBvbGVbZGV2cHJpdi0+ZG1hc2FtcGxzaXplIC0gMV0gPSBNQUdJQ19ETUFfV09SRDsKKyNpZmRlZiB1bnVzZWQKKwlkZXZwcml2LT5ydGNfZnJlcSA9IHJ0Y19zZXRmcmVxX2lycSgyMDQ4KTsKKwlkZXZwcml2LT5ydGNfaXJxX3RpbWVyLmV4cGlyZXMgPQorCQlqaWZmaWVzICsgSFogLyBkZXZwcml2LT5ydGNfZnJlcSArIDIgKiBIWiAvIDEwMDsKKwlkZXZwcml2LT5ydGNfaXJxX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJZGV2cHJpdi0+cnRjX2lycV90aW1lci5mdW5jdGlvbiA9IHJ0Y19kcm9wcGVkX2lycTsKKworCWFkZF90aW1lcigmZGV2cHJpdi0+cnRjX2lycV90aW1lcik7CisjZW5kaWYKKworCWlmIChtb2RlID09IDEpIHsKKwkJZGV2cHJpdi0+aW50ODE4X21vZGUgPSBJTlRfVFlQRV9BSTFfRE1BX1JUQzsKKwkJb3V0YigweDA3IHwgKGRldi0+aXJxIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogUGFjZXIrRE1BICovCisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+aW50ODE4X21vZGUgPSBJTlRfVFlQRV9BSTNfRE1BX1JUQzsKKwkJb3V0YigweDA2IHwgKGRldi0+aXJxIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogRXh0IHRyaWcrRE1BICovCisJfTsKK30KKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBBTkFMT0cgSU5QVVQgTU9ERSAxIG9yIDMsIDgxOCBjYXJkcworKi8KK3N0YXRpYyBpbnQgcGNsODE4X2FpX2NtZF9tb2RlKGludCBtb2RlLCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCBkaXZpc29yMSwgZGl2aXNvcjI7CisJdW5zaWduZWQgaW50IHNlZ2xlbjsKKworCXJ0X3ByaW50aygicGNsODE4X2FpX2NtZF9tb2RlKClcbiIpOworCWlmICgoIWRldi0+aXJxKSAmJiAoIWRldnByaXYtPmRtYV9ydGMpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJJUlEgbm90IGRlZmluZWQhIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChkZXZwcml2LT5pcnFfYmxvY2tlZCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvLyBzdG9wIHBhY2VyCisKKwlzZWdsZW4gPSBjaGVja19jaGFubmVsX2xpc3QoZGV2LCBzLCBkZXZwcml2LT5haV9jaGFubGlzdCwKKwkJZGV2cHJpdi0+YWlfbl9jaGFuKTsKKwlpZiAoc2VnbGVuIDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgZGV2cHJpdi0+YWlfY2hhbmxpc3QsCisJCWRldnByaXYtPmFpX25fY2hhbiwgc2VnbGVuKTsKKworCWNvbWVkaV91ZGVsYXkoMSk7CisKKwlkZXZwcml2LT5haV9hY3Rfc2NhbiA9IGRldnByaXYtPmFpX3NjYW5zOworCWRldnByaXYtPmFpX2FjdF9jaGFuID0gMDsKKwlkZXZwcml2LT5pcnFfYmxvY2tlZCA9IDE7CisJZGV2cHJpdi0+aXJxX3dhc19ub3dfY2xvc2VkID0gMDsKKwlkZXZwcml2LT5uZXZlcmVuZGluZ19haSA9IDA7CisJZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcyA9IDA7CisJZGV2cHJpdi0+ZG1hX3J1bnNfdG9fZW5kID0gMDsKKworCWlmICgoZGV2cHJpdi0+YWlfc2NhbnMgPT0gMCkgfHwgKGRldnByaXYtPmFpX3NjYW5zID09IC0xKSkKKwkJZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkgPSAxOwkvL3dlbGwsIHVzZXIgd2FudCBuZXZlcmVuZGluZworCisJaWYgKG1vZGUgPT0gMSkgeworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjUzX29zY19iYXNlLCAmZGl2aXNvcjEsCisJCQkmZGl2aXNvcjIsICZjbWQtPmNvbnZlcnRfYXJnLCBUUklHX1JPVU5EX05FQVJFU1QpOworCQlpZiAoZGl2aXNvcjEgPT0gMSkgewkvKiBQQ0w3MTgvODE4IGNyYXNoIGlmIGFueSBkaXZpc29yIGlzIHNldCB0byAxICovCisJCQlkaXZpc29yMSA9IDI7CisJCQlkaXZpc29yMiAvPSAyOworCQl9CisJCWlmIChkaXZpc29yMiA9PSAxKSB7CisJCQlkaXZpc29yMiA9IDI7CisJCQlkaXZpc29yMSAvPSAyOworCQl9CisJfQorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DTlRFTkFCTEUpOwkvKiBlbmFibGUgcGFjZXIgKi8KKworCXN3aXRjaCAoZGV2cHJpdi0+ZG1hKSB7CisJY2FzZSAxOgkJLy8gRE1BCisJY2FzZSAzOgorCQlpZiAoZGV2cHJpdi0+ZG1hX3J0YyA9PSAwKSB7CisJCQlwY2w4MThfYWlfbW9kZTEzZG1hX2ludChtb2RlLCBkZXYsIHMpOworCQl9CisjaWZkZWYgdW51c2VkCisJCWVsc2UgeworCQkJcGNsODE4X2FpX21vZGUxM2RtYV9ydGMobW9kZSwgZGV2LCBzKTsKKwkJfQorI2Vsc2UKKwkJZWxzZSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorI2VuZGlmCisJCWJyZWFrOworCWNhc2UgMDoJCS8vIElSUQorCQkvLyBydF9wcmludGsoIklSUVxuIik7CisJCWlmIChtb2RlID09IDEpIHsKKwkJCWRldnByaXYtPmFpX21vZGUgPSBJTlRfVFlQRV9BSTFfSU5UOworCQkJb3V0YigweDgzIHwgKGRldi0+aXJxIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogUGFjZXIrSVJRICovCisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5haV9tb2RlID0gSU5UX1RZUEVfQUkzX0lOVDsKKwkJCW91dGIoMHg4MiB8IChkZXYtPmlycSA8PCA0KSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CS8qIEV4dCB0cmlnK0lSUSAqLworCQl9OworCQlicmVhazsKKwljYXNlIC0xOgkJLy8gRklGTworCQlvdXRiKDEsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0VOQUJMRSk7CS8vIGVuYWJsZSBGSUZPCisJCWlmIChtb2RlID09IDEpIHsKKwkJCWRldnByaXYtPmFpX21vZGUgPSBJTlRfVFlQRV9BSTFfRklGTzsKKwkJCW91dGIoMHgwMywgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCk7CS8qIFBhY2VyICovCisJCX0gZWxzZSB7CisJCQlkZXZwcml2LT5haV9tb2RlID0gSU5UX1RZUEVfQUkzX0ZJRk87CisJCQlvdXRiKDB4MDIsIGRldi0+aW9iYXNlICsgUENMODE4X0NPTlRST0wpOworCQl9OwkJLyogRXh0IHRyaWcgKi8KKwkJYnJlYWs7CisJfQorCisJc3RhcnRfcGFjZXIoZGV2LCBtb2RlLCBkaXZpc29yMSwgZGl2aXNvcjIpOworCisjaWZkZWYgdW51c2VkCisJc3dpdGNoIChkZXZwcml2LT5haV9tb2RlKSB7CisJY2FzZSBJTlRfVFlQRV9BSTFfRE1BX1JUQzoKKwljYXNlIElOVF9UWVBFX0FJM19ETUFfUlRDOgorCQlzZXRfcnRjX2lycV9iaXQoMSk7CS8qIHN0YXJ0IFJUQyAqLworCQlicmVhazsKKwl9CisjZW5kaWYKKwlydF9wcmludGsoInBjbDgxOF9haV9jbWRfbW9kZSgpIGVuZFxuIik7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiB1bnVzZWQKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEFOQUxPRyBPVVRQVVQgTU9ERSAxIG9yIDMsIDgxOCBjYXJkcworKi8KKyNpZmRlZiBQQ0w4MThfTU9ERTEzX0FPCitzdGF0aWMgaW50IHBjbDgxOF9hb19tb2RlMTMoaW50IG1vZGUsIHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJY29tZWRpX3RyaWcgKiBpdCkKK3sKKwlpbnQgZGl2aXNvcjEsIGRpdmlzb3IyOworCisJaWYgKCFkZXYtPmlycSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAiSVJRIG5vdCBkZWZpbmVkISIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZGV2cHJpdi0+aXJxX2Jsb2NrZWQpCisJCXJldHVybiAtRUJVU1k7CisKKwlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsJLy8gc3RvcCBwYWNlcgorCisJZGV2cHJpdi0+aW50MTNfYWN0X3NjYW4gPSBpdC0+bjsKKwlkZXZwcml2LT5pbnQxM19hY3RfY2hhbiA9IDA7CisJZGV2cHJpdi0+aXJxX2Jsb2NrZWQgPSAxOworCWRldnByaXYtPmlycV93YXNfbm93X2Nsb3NlZCA9IDA7CisJZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkgPSAwOworCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPSAwOworCisJaWYgKG1vZGUgPT0gMSkgeworCQlpODI1M19jYXNjYWRlX25zX3RvX3RpbWVyKGRldnByaXYtPmk4MjUzX29zY19iYXNlLCAmZGl2aXNvcjEsCisJCQkmZGl2aXNvcjIsICZpdC0+dHJpZ3ZhciwgVFJJR19ST1VORF9ORUFSRVNUKTsKKwkJaWYgKGRpdmlzb3IxID09IDEpIHsJLyogUENMODE4IGNyYXNoIGlmIGFueSBkaXZpc29yIGlzIHNldCB0byAxICovCisJCQlkaXZpc29yMSA9IDI7CisJCQlkaXZpc29yMiAvPSAyOworCQl9CisJCWlmIChkaXZpc29yMiA9PSAxKSB7CisJCQlkaXZpc29yMiA9IDI7CisJCQlkaXZpc29yMSAvPSAyOworCQl9CisJfQorCisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DTlRFTkFCTEUpOwkvKiBlbmFibGUgcGFjZXIgKi8KKwlpZiAobW9kZSA9PSAxKSB7CisJCWRldnByaXYtPmludDgxOF9tb2RlID0gSU5UX1RZUEVfQU8xX0lOVDsKKwkJb3V0YigweDgzIHwgKGRldi0+aXJxIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogUGFjZXIrSVJRICovCisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+aW50ODE4X21vZGUgPSBJTlRfVFlQRV9BTzNfSU5UOworCQlvdXRiKDB4ODIgfCAoZGV2LT5pcnEgPDwgNCksIGRldi0+aW9iYXNlICsgUENMODE4X0NPTlRST0wpOwkvKiBFeHQgdHJpZytJUlEgKi8KKwl9OworCisJc3RhcnRfcGFjZXIoZGV2LCBtb2RlLCBkaXZpc29yMSwgZGl2aXNvcjIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEFOQUxPRyBPVVRQVVQgTU9ERSAxLCA4MTggY2FyZHMKKyovCitzdGF0aWMgaW50IHBjbDgxOF9hb19tb2RlMShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWNvbWVkaV90cmlnICogaXQpCit7CisJcmV0dXJuIHBjbDgxOF9hb19tb2RlMTMoMSwgZGV2LCBzLCBpdCk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEFOQUxPRyBPVVRQVVQgTU9ERSAzLCA4MTggY2FyZHMKKyovCitzdGF0aWMgaW50IHBjbDgxOF9hb19tb2RlMyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCWNvbWVkaV90cmlnICogaXQpCit7CisJcmV0dXJuIHBjbDgxOF9hb19tb2RlMTMoMywgZGV2LCBzLCBpdCk7Cit9CisjZW5kaWYKKyNlbmRpZgorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgU3RhcnQvc3RvcCBwYWNlciBvbmJvYXJkIHBhY2VyCisqLworc3RhdGljIHZvaWQgc3RhcnRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGl2aXNvcjEsCisJdW5zaWduZWQgaW50IGRpdmlzb3IyKQoreworCW91dGIoMHhiNCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ1RSQ1RMKTsKKwlvdXRiKDB4NzQsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUkNUTCk7CisJY29tZWRpX3VkZWxheSgxKTsKKworCWlmIChtb2RlID09IDEpIHsKKwkJb3V0YihkaXZpc29yMiAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUjIpOworCQlvdXRiKChkaXZpc29yMiA+PiA4KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUjIpOworCQlvdXRiKGRpdmlzb3IxICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ1RSMSk7CisJCW91dGIoKGRpdmlzb3IxID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ1RSMSk7CisJfQorfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgQ2hlY2sgaWYgY2hhbm5lbCBsaXN0IGZyb20gdXNlciBpcyBidWlsZGVkIGNvcnJlY3RseQorIElmIGl0J3Mgb2ssIHRoZW4gcHJvZ3JhbSBzY2FuL2dhaW4gbG9naWMKKyovCitzdGF0aWMgaW50IGNoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBuX2NoYW4pCit7CisJdW5zaWduZWQgaW50IGNoYW5zZWdtZW50WzE2XTsKKwl1bnNpZ25lZCBpbnQgaSwgbm93bXVzdGJlY2hhbiwgc2VnbGVuLCBzZWdwb3M7CisKKwkvKiBjb3JyZWN0IGNoYW5uZWwgYW5kIHJhbmdlIG51bWJlciBjaGVjayBpdHNlbGYgY29tZWRpL3JhbmdlLmMgKi8KKwlpZiAobl9jaGFuIDwgMSkgeworCQljb21lZGlfZXJyb3IoZGV2LCAicmFuZ2UvY2hhbm5lbCBsaXN0IGlzIGVtcHR5ISIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobl9jaGFuID4gMSkgeworCQkvLyBmaXJzdCBjaGFubmVsIGlzIGV2ZXJ5dGltZSBvaworCQljaGFuc2VnbWVudFswXSA9IGNoYW5saXN0WzBdOworCQkvLyBidWlsZCBwYXJ0IG9mIGNoYW5saXN0CisJCWZvciAoaSA9IDEsIHNlZ2xlbiA9IDE7IGkgPCBuX2NoYW47IGkrKywgc2VnbGVuKyspIHsKKwkJCS8vIHJ0X3ByaW50aygiJWQuICVkICVkXG4iLGksQ1JfQ0hBTihpdC0+Y2hhbmxpc3RbaV0pLENSX1JBTkdFKGl0LT5jaGFubGlzdFtpXSkpOworCQkJLy8gd2UgZGV0ZWN0IGxvb3AsIHRoaXMgbXVzdCBieSBmaW5pc2gKKwkJCWlmIChjaGFubGlzdFswXSA9PSBjaGFubGlzdFtpXSkKKwkJCQlicmVhazsKKwkJCW5vd211c3RiZWNoYW4gPQorCQkJCShDUl9DSEFOKGNoYW5zZWdtZW50W2kgLSAxXSkgKyAxKSAlIHMtPm5fY2hhbjsKKwkJCWlmIChub3dtdXN0YmVjaGFuICE9IENSX0NIQU4oY2hhbmxpc3RbaV0pKSB7CS8vIGNoYW5uZWwgbGlzdCBpc24ndCBjb250aW5vdXMgOi0oCisJCQkJcnRfcHJpbnRrCisJCQkJCSgiY29tZWRpJWQ6IHBjbDgxODogY2hhbm5lbCBsaXN0IG11c3QgYmUgY29udGlub3VzISBjaGFubGlzdFslaV09JWQgYnV0IG11c3QgYmUgJWQgb3IgJWQhXG4iLAorCQkJCQlkZXYtPm1pbm9yLCBpLCBDUl9DSEFOKGNoYW5saXN0W2ldKSwKKwkJCQkJbm93bXVzdGJlY2hhbiwgQ1JfQ0hBTihjaGFubGlzdFswXSkpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJLy8gd2VsbCwgdGhpcyBpcyBuZXh0IGNvcnJlY3QgY2hhbm5lbCBpbiBsaXN0CisJCQljaGFuc2VnbWVudFtpXSA9IGNoYW5saXN0W2ldOworCQl9CisKKwkJLy8gY2hlY2sgd2hvbGUgY2hhbmxpc3QKKwkJZm9yIChpID0gMCwgc2VncG9zID0gMDsgaSA8IG5fY2hhbjsgaSsrKSB7CisJCQkvL3J0X3ByaW50aygiJWQgJWQ9JWQgJWRcbiIsQ1JfQ0hBTihjaGFuc2VnbWVudFtpJXNlZ2xlbl0pLENSX1JBTkdFKGNoYW5zZWdtZW50W2klc2VnbGVuXSksQ1JfQ0hBTihpdC0+Y2hhbmxpc3RbaV0pLENSX1JBTkdFKGl0LT5jaGFubGlzdFtpXSkpOworCQkJaWYgKGNoYW5saXN0W2ldICE9IGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiY29tZWRpJWQ6IHBjbDgxODogYmFkIGNoYW5uZWwgb3IgcmFuZ2UgbnVtYmVyISBjaGFubGlzdFslaV09JWQsJWQsJWQgYW5kIG5vdCAlZCwlZCwlZCFcbiIsCisJCQkJCWRldi0+bWlub3IsIGksIENSX0NIQU4oY2hhbnNlZ21lbnRbaV0pLAorCQkJCQlDUl9SQU5HRShjaGFuc2VnbWVudFtpXSksCisJCQkJCUNSX0FSRUYoY2hhbnNlZ21lbnRbaV0pLAorCQkJCQlDUl9DSEFOKGNoYW5saXN0W2kgJSBzZWdsZW5dKSwKKwkJCQkJQ1JfUkFOR0UoY2hhbmxpc3RbaSAlIHNlZ2xlbl0pLAorCQkJCQlDUl9BUkVGKGNoYW5zZWdtZW50W2kgJSBzZWdsZW5dKSk7CisJCQkJcmV0dXJuIDA7CS8vIGNoYW4vZ2FpbiBsaXN0IGlzIHN0cmFuZ2UKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXNlZ2xlbiA9IDE7CisJfQorCXJ0X3ByaW50aygiY2hlY2tfY2hhbm5lbF9saXN0OiBzZWdsZW4gJWRcbiIsIHNlZ2xlbik7CisJcmV0dXJuIHNlZ2xlbjsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50ICpjaGFubGlzdCwgdW5zaWduZWQgaW50IG5fY2hhbiwgdW5zaWduZWQgaW50IHNlZ2xlbikKK3sKKwlpbnQgaTsKKworCWRldnByaXYtPmFjdF9jaGFubGlzdF9sZW4gPSBzZWdsZW47CisJZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VnbGVuOyBpKyspIHsJLy8gc3RvcmUgcmFuZ2UgbGlzdCB0byBjYXJkCisJCWRldnByaXYtPmFjdF9jaGFubGlzdFtpXSA9IENSX0NIQU4oY2hhbmxpc3RbaV0pOworCQlvdXRiKG11eG9uZWNoYW5bQ1JfQ0hBTihjaGFubGlzdFtpXSldLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9NVVgpOwkvKiBzZWxlY3QgY2hhbm5lbCAqLworCQlvdXRiKENSX1JBTkdFKGNoYW5saXN0W2ldKSwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfUkFOR0UpOwkvKiBzZWxlY3QgZ2FpbiAqLworCX0KKworCWNvbWVkaV91ZGVsYXkoMSk7CisKKwkvKiBzZWxlY3QgY2hhbm5lbCBpbnRlcnZhbCB0byBzY2FuICovCisJb3V0YihkZXZwcml2LT5hY3RfY2hhbmxpc3RbMF0gfCAoZGV2cHJpdi0+YWN0X2NoYW5saXN0W3NlZ2xlbiAtCisJCQkJMV0gPDwgNCksIGRldi0+aW9iYXNlICsgUENMODE4X01VWCk7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBDaGVjayBpZiBib2FyZCBpcyBzd2l0Y2hlZCB0byBTRSAoMSkgb3IgRElGRigwKSBtb2RlCisqLworc3RhdGljIGludCBjaGVja19zaW5nbGVfZW5kZWQodW5zaWduZWQgaW50IHBvcnQpCit7CisJaWYgKGluYihwb3J0ICsgUENMODE4X1NUQVRVUykgJiAweDIwKSB7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbnQgYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXAsIGRpdmlzb3IxLCBkaXZpc29yMjsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19GT0xMT1c7CisJaWYgKCFjbWQtPnNjYW5fYmVnaW5fc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+Y29udmVydF9zcmM7CisJY21kLT5jb252ZXJ0X3NyYyAmPSBUUklHX1RJTUVSIHwgVFJJR19FWFQ7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IFRSSUdfQ09VTlQgfCBUUklHX05PTkU7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVykgeworCQljbWQtPnN0YXJ0X3NyYyA9IFRSSUdfTk9XOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpIHsKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyA9IFRSSUdfRk9MTE9XOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKworCWlmIChjbWQtPnNjYW5fZW5kX3NyYyAhPSBUUklHX0NPVU5UKSB7CisJCWNtZC0+c2Nhbl9lbmRfc3JjID0gVFJJR19DT1VOVDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKSB7CisJCXJldHVybiAyOworCX0KKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPm5zX21pbikgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRoaXNfYm9hcmQtPm5zX21pbjsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsJCS8qIFRSSUdfRVhUICovCisJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IHMtPm5fY2hhbikgeworCQljbWQtPmNoYW5saXN0X2xlbiA9IHMtPm5fY2hhbjsKKwkJZXJyKys7CisJfQorCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgeworCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCQllcnIrKzsKKwl9CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoIWNtZC0+c3RvcF9hcmcpIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAxOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgewkJLyogVFJJR19OT05FICovCisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwl9CisKKwlpZiAoZXJyKSB7CisJCXJldHVybiAzOworCX0KKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJaTgyNTNfY2FzY2FkZV9uc190b190aW1lcihkZXZwcml2LT5pODI1M19vc2NfYmFzZSwgJmRpdmlzb3IxLAorCQkJJmRpdmlzb3IyLCAmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA8IHRoaXNfYm9hcmQtPm5zX21pbikKKwkJCWNtZC0+Y29udmVydF9hcmcgPSB0aGlzX2JvYXJkLT5uc19taW47CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpIHsKKwkJcmV0dXJuIDQ7CisJfQorCisJLyogc3RlcCA1OiBjb21wbGFpbiBhYm91dCBzcGVjaWFsIGNoYW5saXN0IGNvbnNpZGVyYXRpb25zICovCisKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQlpZiAoIWNoZWNrX2NoYW5uZWxfbGlzdChkZXYsIHMsIGNtZC0+Y2hhbmxpc3QsCisJCQkJY21kLT5jaGFubGlzdF9sZW4pKQorCQkJcmV0dXJuIDU7CS8vIGluY29ycmVjdCBjaGFubmVscyBsaXN0CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW50IGFpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlpbnQgcmV0dmFsOworCisJcnRfcHJpbnRrKCJwY2w4MThfYWlfY21kKClcbiIpOworCWRldnByaXYtPmFpX25fY2hhbiA9IGNtZC0+Y2hhbmxpc3RfbGVuOworCWRldnByaXYtPmFpX2NoYW5saXN0ID0gY21kLT5jaGFubGlzdDsKKwlkZXZwcml2LT5haV9mbGFncyA9IGNtZC0+ZmxhZ3M7CisJZGV2cHJpdi0+YWlfZGF0YV9sZW4gPSBzLT5hc3luYy0+cHJlYWxsb2NfYnVmc3o7CisJZGV2cHJpdi0+YWlfZGF0YSA9IHMtPmFzeW5jLT5wcmVhbGxvY19idWY7CisJZGV2cHJpdi0+YWlfdGltZXIxID0gMDsKKwlkZXZwcml2LT5haV90aW1lcjIgPSAwOworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlkZXZwcml2LT5haV9zY2FucyA9IGNtZC0+c3RvcF9hcmc7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+YWlfc2NhbnMgPSAwOworCX0KKworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRk9MTE9XKSB7CS8vIG1vZGUgMSwgMworCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CS8vIG1vZGUgMQorCQkJZGV2cHJpdi0+YWlfdGltZXIxID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJCXJldHZhbCA9IHBjbDgxOF9haV9jbWRfbW9kZSgxLCBkZXYsIHMpOworCQkJcnRfcHJpbnRrKCJwY2w4MThfYWlfY21kKCkgZW5kXG4iKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19FWFQpIHsJLy8gbW9kZSAzCisJCQlyZXR1cm4gcGNsODE4X2FpX2NtZF9tb2RlKDMsIGRldiwgcyk7CisJCX0KKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBjYW5jZWwgYW55IG1vZGUgMS00IEFJCisqLworc3RhdGljIGludCBwY2w4MThfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaWYgKGRldnByaXYtPmlycV9ibG9ja2VkID4gMCkgeworCQlydF9wcmludGsoInBjbDgxOF9haV9jYW5jZWwoKVxuIik7CisJCWRldnByaXYtPmlycV93YXNfbm93X2Nsb3NlZCA9IGRldnByaXYtPmFpX21vZGU7CisJCWRldnByaXYtPmFpX21vZGUgPSAwOworCisJCXN3aXRjaCAoZGV2cHJpdi0+aXJxX3dhc19ub3dfY2xvc2VkKSB7CisjaWZkZWYgdW51c2VkCisJCWNhc2UgSU5UX1RZUEVfQUkxX0RNQV9SVEM6CisJCWNhc2UgSU5UX1RZUEVfQUkzX0RNQV9SVEM6CisJCQlzZXRfcnRjX2lycV9iaXQoMCk7CS8vIHN0b3AgUlRDCisJCQlkZWxfdGltZXIoJmRldnByaXYtPnJ0Y19pcnFfdGltZXIpOworI2VuZGlmCisJCWNhc2UgSU5UX1RZUEVfQUkxX0RNQToKKwkJY2FzZSBJTlRfVFlQRV9BSTNfRE1BOgorCQkJaWYgKGRldnByaXYtPm5ldmVyZW5kaW5nX2FpKSB7CisJCQkJLyogd2FpdCBmb3IgcnVubmluZyBkbWEgdHJhbnNmZXIgdG8gZW5kLCBkbyBjbGVhbnVwIGluIGludGVycnVwdCAqLworCQkJCWdvdG8gZW5kOworCQkJfQorCQkJZGlzYWJsZV9kbWEoZGV2cHJpdi0+ZG1hKTsKKwkJY2FzZSBJTlRfVFlQRV9BSTFfSU5UOgorCQljYXNlIElOVF9UWVBFX0FJM19JTlQ6CisJCWNhc2UgSU5UX1RZUEVfQUkxX0ZJRk86CisJCWNhc2UgSU5UX1RZUEVfQUkzX0ZJRk86CisjaWZkZWYgUENMODE4X01PREUxM19BTworCQljYXNlIElOVF9UWVBFX0FPMV9JTlQ6CisJCWNhc2UgSU5UX1RZUEVfQU8zX0lOVDoKKyNlbmRpZgorCQkJb3V0YihpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCkgJiAweDczLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsJLyogU3RvcCBBL0QgKi8KKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCQlzdGFydF9wYWNlcihkZXYsIC0xLCAwLCAwKTsKKwkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQURfTE8pOworCQkJaW5iKGRldi0+aW9iYXNlICsgUENMODE4X0FEX0xPKTsKKwkJCWluYihkZXYtPmlvYmFzZSArIFBDTDgxOF9BRF9ISSk7CisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0NMUklOVCk7CS8qIGNsZWFyIElOVCByZXF1ZXN0ICovCisJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0NPTlRST0wpOwkvKiBTdG9wIEEvRCAqLworCQkJaWYgKGRldnByaXYtPnVzZWZpZm8pIHsJLy8gRklGTyBzaHV0ZG93bgorCQkJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRklfSU5UQ0xSKTsKKwkJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0ZMVVNIKTsKKwkJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0VOQUJMRSk7CisJCQl9CisJCQlkZXZwcml2LT5pcnFfYmxvY2tlZCA9IDA7CisJCQlkZXZwcml2LT5sYXN0X2ludF9zdWIgPSBzOworCQkJZGV2cHJpdi0+bmV2ZXJlbmRpbmdfYWkgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKyAgICAgIGVuZDoKKwlydF9wcmludGsoInBjbDgxOF9haV9jYW5jZWwoKSBlbmRcbiIpOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgY2hlY2ggZm9yIFBDTDgxOAorKi8KK3N0YXRpYyBpbnQgcGNsODE4X2NoZWNrKHVuc2lnbmVkIGxvbmcgaW9iYXNlKQoreworCW91dGIoMHgwMCwgaW9iYXNlICsgUENMODE4X01VWCk7CisJY29tZWRpX3VkZWxheSgxKTsKKwlpZiAoaW5iKGlvYmFzZSArIFBDTDgxOF9NVVgpICE9IDB4MDApCisJCXJldHVybiAxOwkvL3RoZXJlIGlzbid0IGNhcmQKKwlvdXRiKDB4NTUsIGlvYmFzZSArIFBDTDgxOF9NVVgpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJaWYgKGluYihpb2Jhc2UgKyBQQ0w4MThfTVVYKSAhPSAweDU1KQorCQlyZXR1cm4gMTsJLy90aGVyZSBpc24ndCBjYXJkCisJb3V0YigweDAwLCBpb2Jhc2UgKyBQQ0w4MThfTVVYKTsKKwljb21lZGlfdWRlbGF5KDEpOworCW91dGIoMHgxOCwgaW9iYXNlICsgUENMODE4X0NPTlRST0wpOworCWNvbWVkaV91ZGVsYXkoMSk7CisJaWYgKGluYihpb2Jhc2UgKyBQQ0w4MThfQ09OVFJPTCkgIT0gMHgxOCkKKwkJcmV0dXJuIDE7CS8vdGhlcmUgaXNuJ3QgY2FyZAorCXJldHVybiAwOwkJLy8gb2ssIGNhcmQgZXhpc3QKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIHJlc2V0IHdob2xlIFBDTC04MTggY2FyZHMKKyovCitzdGF0aWMgdm9pZCBwY2w4MThfcmVzZXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKGRldnByaXYtPnVzZWZpZm8pIHsJLy8gRklGTyBzaHV0ZG93bgorCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0lOVENMUik7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRklfRkxVU0gpOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0ZJX0VOQUJMRSk7CisJfQorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfREFfTE8pOwkvLyBEQUM9MFYKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0RBX0hJKTsKKwljb21lZGlfdWRlbGF5KDEpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRE9fSEkpOwkvLyBETz0kMDAwMAorCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRE9fTE8pOworCWNvbWVkaV91ZGVsYXkoMSk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DT05UUk9MKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMODE4X0NOVEVOQUJMRSk7CisJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9NVVgpOworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MThfQ0xSSU5UKTsKKwlvdXRiKDB4YjAsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUkNUTCk7CS8qIFN0b3AgcGFjZXIgKi8KKwlvdXRiKDB4NzAsIGRldi0+aW9iYXNlICsgUENMODE4X0NUUkNUTCk7CisJb3V0YigweDMwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9DVFJDVEwpOworCWlmICh0aGlzX2JvYXJkLT5pc184MTgpIHsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDgxOF9SQU5HRSk7CisJfSBlbHNlIHsKKwkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFBDTDcxOF9EQTJfTE8pOworCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzE4X0RBMl9ISSk7CisJfQorfQorCisjaWZkZWYgdW51c2VkCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIEVuYWJsZSgxKS9kaXNhYmxlKDApIHBlcmlvZGljIGludGVycnVwdHMgZnJvbSBSVEMKKyovCitzdGF0aWMgaW50IHNldF9ydGNfaXJxX2JpdCh1bnNpZ25lZCBjaGFyIGJpdCkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGJpdCA9PSAxKSB7CisJCVJUQ190aW1lcl9sb2NrKys7CisJCWlmIChSVENfdGltZXJfbG9jayA+IDEpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlSVENfdGltZXJfbG9jay0tOworCQlpZiAoUlRDX3RpbWVyX2xvY2sgPCAwKQorCQkJUlRDX3RpbWVyX2xvY2sgPSAwOworCQlpZiAoUlRDX3RpbWVyX2xvY2sgPiAwKQorCQkJcmV0dXJuIDA7CisJfQorCisJc2F2ZV9mbGFncyhmbGFncyk7CisJY2xpKCk7CisJdmFsID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsKKwlpZiAoYml0KSB7CisJCXZhbCB8PSBSVENfUElFOworCX0gZWxzZSB7CisJCXZhbCAmPSB+UlRDX1BJRTsKKwl9CisJQ01PU19XUklURSh2YWwsIFJUQ19DT05UUk9MKTsKKwlDTU9TX1JFQUQoUlRDX0lOVFJfRkxBR1MpOworCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFJlc3RhcnQgUlRDIGlmIHNvbWV0aGluZyBzdG9wIGl0ICh4bnRwZCBldmVyeSAxMSBtaW5zIG9yIGxhcmdlIElERSB0cmFuc2ZlcnMpCisqLworc3RhdGljIHZvaWQgcnRjX2Ryb3BwZWRfaXJxKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHZvaWQgKilkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRtcDsKKworCXN3aXRjaCAoZGV2cHJpdi0+aW50ODE4X21vZGUpIHsKKwljYXNlIElOVF9UWVBFX0FJMV9ETUFfUlRDOgorCWNhc2UgSU5UX1RZUEVfQUkzX0RNQV9SVEM6CisJCW1vZF90aW1lcigmZGV2cHJpdi0+cnRjX2lycV90aW1lciwKKwkJCWppZmZpZXMgKyBIWiAvIGRldnByaXYtPnJ0Y19mcmVxICsgMiAqIEhaIC8gMTAwKTsKKwkJc2F2ZV9mbGFncyhmbGFncyk7CisJCWNsaSgpOworCQl0bXAgPSAoQ01PU19SRUFEKFJUQ19JTlRSX0ZMQUdTKSAmIDB4RjApOwkvKiByZXN0YXJ0ICovCisJCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCQlicmVhazsKKwl9OworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFNldCBmcmVxdWVuY3kgb2YgaW50ZXJydXB0cyBmcm9tIFJUQworKi8KK3N0YXRpYyBpbnQgcnRjX3NldGZyZXFfaXJxKGludCBmcmVxKQoreworCWludCB0bXAgPSAwOworCWludCBydGNfZnJlcTsKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGZyZXEgPCAyKQorCQlmcmVxID0gMjsKKwlpZiAoZnJlcSA+IDgxOTIpCisJCWZyZXEgPSA4MTkyOworCisJd2hpbGUgKGZyZXEgPiAoMSA8PCB0bXApKQorCQl0bXArKzsKKworCXJ0Y19mcmVxID0gMSA8PCB0bXA7CisKKwlzYXZlX2ZsYWdzKGZsYWdzKTsKKwljbGkoKTsKKwl2YWwgPSBDTU9TX1JFQUQoUlRDX0ZSRVFfU0VMRUNUKSAmIDB4ZjA7CisJdmFsIHw9ICgxNiAtIHRtcCk7CisJQ01PU19XUklURSh2YWwsIFJUQ19GUkVRX1NFTEVDVCk7CisJcmVzdG9yZV9mbGFncyhmbGFncyk7CisJcmV0dXJuIHJ0Y19mcmVxOworfQorI2VuZGlmCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgRnJlZSBhbnkgcmVzb3VyY2VzIHRoYXQgd2UgaGF2ZSBjbGFpbWVkCisqLworc3RhdGljIHZvaWQgZnJlZV9yZXNvdXJjZXMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJLy9ydF9wcmludGsoImZyZWVfcmVzb3VyY2UoKVxuIik7CisJaWYgKGRldi0+cHJpdmF0ZSkgeworCQlwY2w4MThfYWlfY2FuY2VsKGRldiwgZGV2cHJpdi0+c3ViX2FpKTsKKwkJcGNsODE4X3Jlc2V0KGRldik7CisJCWlmIChkZXZwcml2LT5kbWEpCisJCQlmcmVlX2RtYShkZXZwcml2LT5kbWEpOworCQlpZiAoZGV2cHJpdi0+ZG1hYnVmWzBdKQorCQkJZnJlZV9wYWdlcyhkZXZwcml2LT5kbWFidWZbMF0sIGRldnByaXYtPmRtYXBhZ2VzWzBdKTsKKwkJaWYgKGRldnByaXYtPmRtYWJ1ZlsxXSkKKwkJCWZyZWVfcGFnZXMoZGV2cHJpdi0+ZG1hYnVmWzFdLCBkZXZwcml2LT5kbWFwYWdlc1sxXSk7CisjaWZkZWYgdW51c2VkCisJCWlmIChkZXZwcml2LT5ydGNfaXJxKQorCQkJY29tZWRpX2ZyZWVfaXJxKGRldnByaXYtPnJ0Y19pcnEsIGRldik7CisJCWlmICgoZGV2cHJpdi0+ZG1hX3J0YykgJiYgKFJUQ19sb2NrID09IDEpKSB7CisJCQlpZiAoZGV2cHJpdi0+cnRjX2lvYmFzZSkKKwkJCQlyZWxlYXNlX3JlZ2lvbihkZXZwcml2LT5ydGNfaW9iYXNlLAorCQkJCQlkZXZwcml2LT5ydGNfaW9zaXplKTsKKwkJfQorCQlpZiAoZGV2cHJpdi0+ZG1hX3J0YykKKwkJCVJUQ19sb2NrLS07CisjZW5kaWYKKwl9CisKKwlpZiAoZGV2LT5pcnEpCisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIGRldnByaXYtPmlvX3JhbmdlKTsKKwkvL3J0X3ByaW50aygiZnJlZV9yZXNvdXJjZSgpIGVuZFxuIik7Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgSW5pdGlhbGl6YXRpb24KKworKi8KK3N0YXRpYyBpbnQgcGNsODE4X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpcnEsIGRtYTsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY2w4MThfcHJpdmF0ZSkpKSA8IDApCisJCXJldHVybiByZXQ7CS8qIENhbid0IGFsbG9jIG1lbSAqLworCisJLyogY2xhaW0gb3VyIEkvTyBzcGFjZSAqLworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHBjbDgxODogIGJvYXJkPSVzLCBpb3BvcnQ9MHglMDNseCIsCisJCWRldi0+bWlub3IsIHRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisJZGV2cHJpdi0+aW9fcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKKwlpZiAoKHRoaXNfYm9hcmQtPmZpZm8pICYmIChpdC0+b3B0aW9uc1syXSA9PSAtMSkpIHsJLy8gd2UndmUgYm9hcmQgd2l0aCBGSUZPIGFuZCB3ZSB3YW50IHRvIHVzZSBGSUZPCisJCWRldnByaXYtPmlvX3JhbmdlID0gUENMeDF4RklGT19SQU5HRTsKKwkJZGV2cHJpdi0+dXNlZmlmbyA9IDE7CisJfQorCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBkZXZwcml2LT5pb19yYW5nZSwgInBjbDgxOCIpKSB7CisJCXJ0X3ByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmIChwY2w4MThfY2hlY2soaW9iYXNlKSkgeworCQlydF9wcmludGsoIiwgSSBjYW4ndCBkZXRlY3QgYm9hcmQuIEZBSUwhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogc2V0IHVwIHNvbWUgbmFtZSBzdHVmZiAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNfYm9hcmQtPm5hbWU7CisJLyogZ3JhYiBvdXIgSVJRICovCisJaXJxID0gMDsKKwlpZiAodGhpc19ib2FyZC0+SVJRYml0cyAhPSAwKSB7CS8qIGJvYXJkIHN1cHBvcnQgSVJRICovCisJCWlycSA9IGl0LT5vcHRpb25zWzFdOworCQlpZiAoaXJxKSB7CS8qIHdlIHdhbnQgdG8gdXNlIElSUSAqLworCQkJaWYgKCgoMSA8PCBpcnEpICYgdGhpc19ib2FyZC0+SVJRYml0cykgPT0gMCkgeworCQkJCXJ0X3ByaW50aworCQkJCQkoIiwgSVJRICV1IGlzIG91dCBvZiBhbGxvd2VkIHJhbmdlLCBESVNBQkxJTkcgSVQiLAorCQkJCQlpcnEpOworCQkJCWlycSA9IDA7CS8qIEJhZCBJUlEgKi8KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIGludGVycnVwdF9wY2w4MTgsIDAsCisJCQkJCQkicGNsODE4IiwgZGV2KSkgeworCQkJCQlydF9wcmludGsKKwkJCQkJCSgiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1LCBESVNBQkxJTkcgSVQiLAorCQkJCQkJaXJxKTsKKwkJCQkJaXJxID0gMDsJLyogQ2FuJ3QgdXNlIElSUSAqLworCQkJCX0gZWxzZSB7CisJCQkJCXJ0X3ByaW50aygiLCBpcnE9JXUiLCBpcnEpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWRldi0+aXJxID0gaXJxOworCWlmIChpcnEpIHsKKwkJZGV2cHJpdi0+aXJxX2ZyZWUgPSAxOworCX0gLyogMT13ZSBoYXZlIGFsbG9jYXRlZCBpcnEgKi8KKwllbHNlIHsKKwkJZGV2cHJpdi0+aXJxX2ZyZWUgPSAwOworCX0KKwlkZXZwcml2LT5pcnFfYmxvY2tlZCA9IDA7CS8qIG51bWJlciBvZiBzdWJkZXZpY2Ugd2hpY2ggdXNlIElSUSAqLworCWRldnByaXYtPmFpX21vZGUgPSAwOwkvKiBtb2RlIG9mIGlycSAqLworCisjaWZkZWYgdW51c2VkCisJLyogZ3JhYiBSVEMgZm9yIERNQSBvcGVyYXRpb25zICovCisJZGV2cHJpdi0+ZG1hX3J0YyA9IDA7CisJaWYgKGl0LT5vcHRpb25zWzJdID4gMCkgewkvLyB3ZSB3YW50IHRvIHVzZSBETUEKKwkJaWYgKFJUQ19sb2NrID09IDApIHsKKwkJCWlmICghcmVxdWVzdF9yZWdpb24oUlRDX1BPUlQoMCksIFJUQ19JT19FWFRFTlQsCisJCQkJCSJwY2w4MTggKFJUQykiKSkKKwkJCQlnb3RvIG5vX3J0YzsKKwkJfQorCQlkZXZwcml2LT5ydGNfaW9iYXNlID0gUlRDX1BPUlQoMCk7CisJCWRldnByaXYtPnJ0Y19pb3NpemUgPSBSVENfSU9fRVhURU5UOworCQlSVENfbG9jaysrOworCQlpZiAoIWNvbWVkaV9yZXF1ZXN0X2lycShSVENfSVJRLAorCQkJCWludGVycnVwdF9wY2w4MThfYWlfbW9kZTEzX2RtYV9ydGMsIDAsCisJCQkJInBjbDgxOCBETUEgKFJUQykiLCBkZXYpKSB7CisJCQlkZXZwcml2LT5kbWFfcnRjID0gMTsKKwkJCWRldnByaXYtPnJ0Y19pcnEgPSBSVENfSVJROworCQkJcnRfcHJpbnRrKCIsIGRtYV9pcnE9JXUiLCBkZXZwcml2LT5ydGNfaXJxKTsKKwkJfSBlbHNlIHsKKwkJCVJUQ19sb2NrLS07CisJCQlpZiAoUlRDX2xvY2sgPT0gMCkgeworCQkJCWlmIChkZXZwcml2LT5ydGNfaW9iYXNlKQorCQkJCQlyZWxlYXNlX3JlZ2lvbihkZXZwcml2LT5ydGNfaW9iYXNlLAorCQkJCQkJZGV2cHJpdi0+cnRjX2lvc2l6ZSk7CisJCQl9CisJCQlkZXZwcml2LT5ydGNfaW9iYXNlID0gMDsKKwkJCWRldnByaXYtPnJ0Y19pb3NpemUgPSAwOworCQl9CisJfQorCisgICAgICBub19ydGM6CisjZW5kaWYKKwkvKiBncmFiIG91ciBETUEgKi8KKwlkbWEgPSAwOworCWRldnByaXYtPmRtYSA9IGRtYTsKKwlpZiAoKGRldnByaXYtPmlycV9mcmVlID09IDApICYmIChkZXZwcml2LT5kbWFfcnRjID09IDApKQorCQlnb3RvIG5vX2RtYTsJLyogaWYgd2UgaGF2ZW4ndCBJUlEsIHdlIGNhbid0IHVzZSBETUEgKi8KKwlpZiAodGhpc19ib2FyZC0+RE1BYml0cyAhPSAwKSB7CS8qIGJvYXJkIHN1cHBvcnQgRE1BICovCisJCWRtYSA9IGl0LT5vcHRpb25zWzJdOworCQlpZiAoZG1hIDwgMSkKKwkJCWdvdG8gbm9fZG1hOwkvKiBETUEgZGlzYWJsZWQgKi8KKwkJaWYgKCgoMSA8PCBkbWEpICYgdGhpc19ib2FyZC0+RE1BYml0cykgPT0gMCkgeworCQkJcnRfcHJpbnRrKCIsIERNQSBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRkFJTCFcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CS8qIEJhZCBETUEgKi8KKwkJfQorCQlyZXQgPSByZXF1ZXN0X2RtYShkbWEsICJwY2w4MTgiKTsKKwkJaWYgKHJldCkgeworCQkJcnRfcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgJXUsIEZBSUwhXG4iLCBkbWEpOworCQkJcmV0dXJuIC1FQlVTWTsJLyogRE1BIGlzbid0IGZyZWUgKi8KKwkJfQorCQlkZXZwcml2LT5kbWEgPSBkbWE7CisJCXJ0X3ByaW50aygiLCBkbWE9JXUiLCBkbWEpOworCQlwYWdlcyA9IDI7CS8qIHdlIG5lZWQgMTZLQiAqLworCQlkZXZwcml2LT5kbWFidWZbMF0gPSBfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCwgcGFnZXMpOworCQlpZiAoIWRldnByaXYtPmRtYWJ1ZlswXSkgeworCQkJcnRfcHJpbnRrKCIsIHVuYWJsZSB0byBhbGxvY2F0ZSBETUEgYnVmZmVyLCBGQUlMIVxuIik7CisJCQkvKiBtYXliZSBleHBlcmltZW50IHdpdGggdHJ5X3RvX2ZyZWVfcGFnZXMoKSB3aWxsIGhlbHAgLi4uLiAqLworCQkJcmV0dXJuIC1FQlVTWTsJLyogbm8gYnVmZmVyIDotKCAqLworCQl9CisJCWRldnByaXYtPmRtYXBhZ2VzWzBdID0gcGFnZXM7CisJCWRldnByaXYtPmh3ZG1hcHRyWzBdID0gdmlydF90b19idXMoKHZvaWQgKilkZXZwcml2LT5kbWFidWZbMF0pOworCQlkZXZwcml2LT5od2RtYXNpemVbMF0gPSAoMSA8PCBwYWdlcykgKiBQQUdFX1NJWkU7CisJCS8vcnRfcHJpbnRrKCIlZCAlZCAlbGQsICIsZGV2cHJpdi0+ZG1hcGFnZXNbMF0sZGV2cHJpdi0+aHdkbWFzaXplWzBdLFBBR0VfU0laRSk7CisJCWlmIChkZXZwcml2LT5kbWFfcnRjID09IDApIHsJLy8gd2UgbXVzdCBkbyBkdWJsZSBidWZmIDotKAorCQkJZGV2cHJpdi0+ZG1hYnVmWzFdID0gX19nZXRfZG1hX3BhZ2VzKEdGUF9LRVJORUwsIHBhZ2VzKTsKKwkJCWlmICghZGV2cHJpdi0+ZG1hYnVmWzFdKSB7CisJCQkJcnRfcHJpbnRrCisJCQkJCSgiLCB1bmFibGUgdG8gYWxsb2NhdGUgRE1BIGJ1ZmZlciwgRkFJTCFcbiIpOworCQkJCXJldHVybiAtRUJVU1k7CisJCQl9CisJCQlkZXZwcml2LT5kbWFwYWdlc1sxXSA9IHBhZ2VzOworCQkJZGV2cHJpdi0+aHdkbWFwdHJbMV0gPQorCQkJCXZpcnRfdG9fYnVzKCh2b2lkICopZGV2cHJpdi0+ZG1hYnVmWzFdKTsKKwkJCWRldnByaXYtPmh3ZG1hc2l6ZVsxXSA9ICgxIDw8IHBhZ2VzKSAqIFBBR0VfU0laRTsKKwkJfQorCX0KKworICAgICAgbm9fZG1hOgorCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWlmICghdGhpc19ib2FyZC0+bl9haWNoYW5fc2UpIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJCWRldnByaXYtPnN1Yl9haSA9IHM7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwkJaWYgKGNoZWNrX3NpbmdsZV9lbmRlZChkZXYtPmlvYmFzZSkpIHsKKwkJCXMtPm5fY2hhbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuX3NlOworCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DT01NT04gfCBTREZfR1JPVU5EOworCQkJcHJpbnRrKCIsICVkY2hhbnMgUy5FLiBEQUMiLCBzLT5uX2NoYW4pOworCQl9IGVsc2UgeworCQkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9haWNoYW5fZGlmZjsKKwkJCXMtPnN1YmRldl9mbGFncyB8PSBTREZfRElGRjsKKwkJCXByaW50aygiLCAlZGNoYW5zIERJRkYgREFDIiwgcy0+bl9jaGFuKTsKKwkJfQorCQlzLT5tYXhkYXRhID0gdGhpc19ib2FyZC0+YWlfbWF4ZGF0YTsKKwkJcy0+bGVuX2NoYW5saXN0ID0gcy0+bl9jaGFuOworCQlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPmFpX3JhbmdlX3R5cGU7CisJCXMtPmNhbmNlbCA9IHBjbDgxOF9haV9jYW5jZWw7CisJCXMtPmluc25fcmVhZCA9IHBjbDgxOF9haV9pbnNuX3JlYWQ7CisJCWlmICgoaXJxKSB8fCAoZGV2cHJpdi0+ZG1hX3J0YykpIHsKKwkJCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfUkVBRDsKKwkJCXMtPmRvX2NtZHRlc3QgPSBhaV9jbWR0ZXN0OworCQkJcy0+ZG9fY21kID0gYWlfY21kOworCQl9CisJCWlmICh0aGlzX2JvYXJkLT5pc184MTgpIHsKKwkJCWlmICgoaXQtPm9wdGlvbnNbNF0gPT0gMSkgfHwgKGl0LT5vcHRpb25zWzRdID09IDEwKSkKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9wY2w4MThsX2hfYWk7CS8vIHNlY29uZGFyeSByYW5nZSBsaXN0IGp1bXBlciBzZWxlY3RhYmxlCisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKGl0LT5vcHRpb25zWzRdKSB7CisJCQljYXNlIDA6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXI1OworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2JpcG9sYXIyXzU7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2U3MThfYmlwb2xhcjE7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2U3MThfYmlwb2xhcjBfNTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNjoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmlwb2xhcjEwOworCQkJCWJyZWFrOworCQkJY2FzZSA3OgorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3VuaXBvbGFyNTsKKwkJCQlicmVhazsKKwkJCWNhc2UgODoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZTcxOF91bmlwb2xhcjI7CisJCQkJYnJlYWs7CisJCQljYXNlIDk6CisJCQkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2U3MThfdW5pcG9sYXIxOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJaWYgKCF0aGlzX2JvYXJkLT5uX2FvY2hhbikgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORDsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9hb2NoYW47CisJCXMtPm1heGRhdGEgPSB0aGlzX2JvYXJkLT5hb19tYXhkYXRhOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2FvY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSB0aGlzX2JvYXJkLT5hb19yYW5nZV90eXBlOworCQlzLT5pbnNuX3JlYWQgPSBwY2w4MThfYW9faW5zbl9yZWFkOworCQlzLT5pbnNuX3dyaXRlID0gcGNsODE4X2FvX2luc25fd3JpdGU7CisjaWZkZWYgdW51c2VkCisjaWZkZWYgUENMODE4X01PREUxM19BTworCQlpZiAoaXJxKSB7CisJCQlzLT50cmlnWzFdID0gcGNsODE4X2FvX21vZGUxOworCQkJcy0+dHJpZ1szXSA9IHBjbDgxOF9hb19tb2RlMzsKKwkJfQorI2VuZGlmCisjZW5kaWYKKwkJaWYgKHRoaXNfYm9hcmQtPmlzXzgxOCkgeworCQkJaWYgKChpdC0+b3B0aW9uc1s0XSA9PSAxKSB8fCAoaXQtPm9wdGlvbnNbNF0gPT0gMTApKQorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJCQlpZiAoaXQtPm9wdGlvbnNbNF0gPT0gMikKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCQl9IGVsc2UgeworCQkJaWYgKChpdC0+b3B0aW9uc1s1XSA9PSAxKSB8fCAoaXQtPm9wdGlvbnNbNV0gPT0gMTApKQorCQkJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3VuaXBvbGFyMTA7CisJCQlpZiAoaXQtPm9wdGlvbnNbNV0gPT0gMikKKwkJCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOworCQl9CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJaWYgKCF0aGlzX2JvYXJkLT5uX2RpY2hhbikgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0gZWxzZSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCQlzLT5uX2NoYW4gPSB0aGlzX2JvYXJkLT5uX2RpY2hhbjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPmxlbl9jaGFubGlzdCA9IHRoaXNfYm9hcmQtPm5fZGljaGFuOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2JpdHMgPSBwY2w4MThfZGlfaW5zbl9iaXRzOworCX0KKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCWlmICghdGhpc19ib2FyZC0+bl9kb2NoYW4pIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9kb2NoYW47CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5sZW5fY2hhbmxpc3QgPSB0aGlzX2JvYXJkLT5uX2RvY2hhbjsKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwkJcy0+aW5zbl9iaXRzID0gcGNsODE4X2RvX2luc25fYml0czsKKwl9CisKKwkvKiBzZWxlY3QgMS8xME1IeiBvc2NpbGF0b3IgKi8KKwlpZiAoKGl0LT5vcHRpb25zWzNdID09IDApIHx8IChpdC0+b3B0aW9uc1szXSA9PSAxMCkpIHsKKwkJZGV2cHJpdi0+aTgyNTNfb3NjX2Jhc2UgPSAxMDA7CisJfSBlbHNlIHsKKwkJZGV2cHJpdi0+aTgyNTNfb3NjX2Jhc2UgPSAxMDAwOworCX0KKworCS8qIG1heCBzYW1wbGluZyBzcGVlZCAqLworCWRldnByaXYtPm5zX21pbiA9IHRoaXNfYm9hcmQtPm5zX21pbjsKKworCWlmICghdGhpc19ib2FyZC0+aXNfODE4KSB7CisJCWlmICgoaXQtPm9wdGlvbnNbNl0gPT0gMSkgfHwgKGl0LT5vcHRpb25zWzZdID09IDEwMCkpCisJCQlkZXZwcml2LT5uc19taW4gPSAxMDAwMDsJLyogZXh0ZW5kZWQgUENMNzE4IHRvIDEwMGtIeiBEQUMgKi8KKwl9CisKKwlwY2w4MThfcmVzZXQoZGV2KTsKKworCXJ0X3ByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFJlbW92ZXMgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgcGNsODE4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwkvLyAgcnRfcHJpbnRrKCJjb21lZGklZDogcGNsODE4OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCWZyZWVfcmVzb3VyY2VzKGRldik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzcyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2VkM2EwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MjQuYwpAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9wY203MjQuYworCisgICAgRHJldyBDc2lsbGFnIDxkcmV3X2NzaWxsYWdAeWFob28uY29tPgorCisgICAgaGFyZHdhcmUgZHJpdmVyIGZvciBBZHZhbnRlY2ggY2FyZDoKKyAgICAgY2FyZDogICBQQ00tMzcyNAorICAgICBkcml2ZXI6IHBjbTM3MjQKKworICAgIE9wdGlvbnMgZm9yIFBDTS0zNzI0CisgICAgIFswXSAtIElPIEJhc2UKKyovCisvKgorRHJpdmVyOiBwY20zNzI0CitEZXNjcmlwdGlvbjogQWR2YW50ZWNoIFBDTS0zNzI0CitBdXRob3I6IERyZXcgQ3NpbGxhZyA8ZHJld19jc2lsbGFnQHlhaG9vLmNvbT4KK0RldmljZXM6IFtBZHZhbnRlY2hdIFBDTS0zNzI0IChwY203MjQpCitTdGF0dXM6IHRlc3RlZAorCitUaGlzIGlzIGRyaXZlciBmb3IgZGlnaXRhbCBJL08gYm9hcmRzIFBDTS0zNzI0IHdpdGggNDggRElPLgorSXQgbmVlZHMgODI1NS5vIGZvciBvcGVyYXRpb25zIGFuZCBvbmx5IGltbWVkaWF0ZSBtb2RlIGlzIHN1cHBvcnRlZC4KK1NlZSB0aGUgc291cmNlIGZvciBjb25maWd1cmF0aW9uIGRldGFpbHMuCisKK0NvcHkvcGFzdGVkL2hhY2tlZCBmcm9tIHBjbTcyNC5jCisqLworLyoKKyAqIGNoZWNrX2RyaXZlciBvdmVycmlkZXM6CisgKiAgIHN0cnVjdCBjb21lZGlfaW5zbgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICI4MjU1LmgiCisKKyNkZWZpbmUgUENNMzcyNF9TSVpFICAgMTYKKyNkZWZpbmUgU0laRV84MjU1CTQKKworI2RlZmluZSBCVUZfQzAgMHgxCisjZGVmaW5lIEJVRl9CMCAweDIKKyNkZWZpbmUgQlVGX0EwIDB4NAorI2RlZmluZSBCVUZfQzEgMHg4CisjZGVmaW5lIEJVRl9CMSAweDEwCisjZGVmaW5lIEJVRl9BMSAweDIwCisKKyNkZWZpbmUgR0FURV9BMCAweDQKKyNkZWZpbmUgR0FURV9CMAkweDIKKyNkZWZpbmUgR0FURV9DMAkweDEKKyNkZWZpbmUgR0FURV9BMQkweDIwCisjZGVmaW5lIEdBVEVfQjEJMHgxMAorI2RlZmluZSBHQVRFX0MxIDB4OAorCisvKiBmcm9tIDgyNTUuYyAqLworI2RlZmluZSBDUl9DVwkJMHg4MAorI2RlZmluZSBfODI1NV9DUiAzCisjZGVmaW5lIENSX0JfSU8JCTB4MDIKKyNkZWZpbmUgQ1JfQl9NT0RFCTB4MDQKKyNkZWZpbmUgQ1JfQ19JTwkgICAgICAgIDB4MDkKKyNkZWZpbmUgQ1JfQV9JTwkJMHgxMAorI2RlZmluZSBDUl9BX01PREUoYSkJKChhKTw8NSkKKyNkZWZpbmUgQ1JfQ1cJCTB4ODAKKworc3RhdGljIGludCBwY20zNzI0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbTM3MjRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RydWN0IHBjbTM3MjRfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CS8vIGRyaXZlciBuYW1lCisJaW50IGRpbzsJCS8vIG51bSBvZiBESU8KKwlpbnQgbnVtb2Zwb3J0czsJCS8vIG51bSBvZiA4MjU1IHN1YmRldmljZXMKKwl1bnNpZ25lZCBpbnQgSVJRYml0czsJLy8gYWxsb3dlZCBpbnRlcnJ1cHRzCisJdW5zaWduZWQgaW50IGlvX3JhbmdlOwkvLyBsZW4gb2YgSU8gc3BhY2UKK307CisKKy8vdXNlZCB0byB0cmFjayBjb25maWd1cmVkIGRpb3MKK3N0cnVjdCBwcml2X3BjbTM3MjQgeworCWludCBkaW9fMTsKKwlpbnQgZGlvXzI7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbTM3MjRfYm9hcmQgYm9hcmR0eXBlc1tdID0geworCXsicGNtMzcyNCIsIDQ4LCAyLCAweDAwZmMsIFBDTTM3MjRfU0laRSx9LAorfTsKKworI2RlZmluZSBuX2JvYXJkdHlwZXMgKHNpemVvZihib2FyZHR5cGVzKS9zaXplb2Yoc3RydWN0IHBjbTM3MjRfYm9hcmQpKQorI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbTM3MjRfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wY20zNzI0ID0geworICAgICAgZHJpdmVyX25hbWU6InBjbTM3MjQiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbTM3MjRfYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbTM3MjRfZGV0YWNoLAorICAgICAgYm9hcmRfbmFtZTomYm9hcmR0eXBlc1swXS5uYW1lLAorICAgICAgbnVtX25hbWVzOm5fYm9hcmR0eXBlcywKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbTM3MjRfYm9hcmQpLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9wY20zNzI0KTsKKworLy8gICAgICAgICAgKHNldHEgYy1iYXNpYy1vZmZzZXQgOCkKKworc3RhdGljIGludCBzdWJkZXZfODI1NV9jYihpbnQgZGlyLCBpbnQgcG9ydCwgaW50IGRhdGEsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gYXJnOworCXVuc2lnbmVkIGNoYXIgaW5icmVzOworCS8vcHJpbnRrKCI4MjU1Y2IgJWQgJWQgJWQgJWx4XG4iLCBkaXIscG9ydCxkYXRhLGFyZyk7CisJaWYgKGRpcikgeworCQkvL3ByaW50aygiODI1NSBjYiAgIG91dGIoJXgsICVseClcbiIsIGRhdGEsIGlvYmFzZStwb3J0KTsKKwkJb3V0YihkYXRhLCBpb2Jhc2UgKyBwb3J0KTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaW5icmVzID0gaW5iKGlvYmFzZSArIHBvcnQpOworCQkvL3ByaW50aygiODI1NSBjYiAgIGluYiglbHgpID0gJXhcbiIsIGlvYmFzZStwb3J0LCBpbmJyZXMpOworCQlyZXR1cm4gaW5icmVzOworCX0KK30KKworc3RhdGljIGludCBjb21wdXRlX2J1ZmZlcihpbnQgY29uZmlnLCBpbnQgZGV2bm8sIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwkvKiAxIGluIGlvX2JpdHMgaW5kaWNhdGVzIG91dHB1dCAqLworCWlmIChzLT5pb19iaXRzICYgMHgwMDAwZmYpIHsKKwkJaWYgKGRldm5vID09IDApIHsKKwkJCWNvbmZpZyB8PSBCVUZfQTA7CisJCX0gZWxzZSB7CisJCQljb25maWcgfD0gQlVGX0ExOworCQl9CisJfQorCWlmIChzLT5pb19iaXRzICYgMHgwMGZmMDApIHsKKwkJaWYgKGRldm5vID09IDApIHsKKwkJCWNvbmZpZyB8PSBCVUZfQjA7CisJCX0gZWxzZSB7CisJCQljb25maWcgfD0gQlVGX0IxOworCQl9CisJfQorCWlmIChzLT5pb19iaXRzICYgMHhmZjAwMDApIHsKKwkJaWYgKGRldm5vID09IDApIHsKKwkJCWNvbmZpZyB8PSBCVUZfQzA7CisJCX0gZWxzZSB7CisJCQljb25maWcgfD0gQlVGX0MxOworCQl9CisJfQorCXJldHVybiBjb25maWc7Cit9CisKK3N0YXRpYyB2b2lkIGRvXzM3MjRfY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJaW50IGNoYW5zcGVjKQoreworCWludCBjb25maWc7CisJaW50IGJ1ZmZlcl9jb25maWc7CisJdW5zaWduZWQgbG9uZyBwb3J0XzgyNTVfY2ZnOworCisJY29uZmlnID0gQ1JfQ1c7CisJYnVmZmVyX2NvbmZpZyA9IDA7CisKKwkvKiAxIGluIGlvX2JpdHMgaW5kaWNhdGVzIG91dHB1dCwgMSBpbiBjb25maWcgaW5kaWNhdGVzIGlucHV0ICovCisJaWYgKCEocy0+aW9fYml0cyAmIDB4MDAwMGZmKSkgeworCQljb25maWcgfD0gQ1JfQV9JTzsKKwl9CisJaWYgKCEocy0+aW9fYml0cyAmIDB4MDBmZjAwKSkgeworCQljb25maWcgfD0gQ1JfQl9JTzsKKwl9CisJaWYgKCEocy0+aW9fYml0cyAmIDB4ZmYwMDAwKSkgeworCQljb25maWcgfD0gQ1JfQ19JTzsKKwl9CisKKwlidWZmZXJfY29uZmlnID0gY29tcHV0ZV9idWZmZXIoMCwgMCwgZGV2LT5zdWJkZXZpY2VzKTsKKwlidWZmZXJfY29uZmlnID0gY29tcHV0ZV9idWZmZXIoYnVmZmVyX2NvbmZpZywgMSwgKGRldi0+c3ViZGV2aWNlcykgKyAxKTsKKworCWlmIChzID09IGRldi0+c3ViZGV2aWNlcykgeworCQlwb3J0XzgyNTVfY2ZnID0gZGV2LT5pb2Jhc2UgKyBfODI1NV9DUjsKKwl9IGVsc2UgeworCQlwb3J0XzgyNTVfY2ZnID0gZGV2LT5pb2Jhc2UgKyBTSVpFXzgyNTUgKyBfODI1NV9DUjsKKwl9CisJb3V0YihidWZmZXJfY29uZmlnLCBkZXYtPmlvYmFzZSArIDgpOwkvKiB1cGRhdGUgYnVmZmVyIHJlZ2lzdGVyICovCisJLy9wcmludGsoInBjbTM3MjQgYnVmZmVyX2NvbmZpZyAoJWx4KSAlZCwgJXhcbiIsIGRldi0+aW9iYXNlICsgXzgyNTVfQ1IsIGNoYW5zcGVjLCBidWZmZXJfY29uZmlnKTsKKwlvdXRiKGNvbmZpZywgcG9ydF84MjU1X2NmZyk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9jaGFuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIGludCBjaGFuc3BlYykKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwlpbnQgZ2F0ZWNmZzsKKwlzdHJ1Y3QgcHJpdl9wY20zNzI0ICpwcml2OworCisJZ2F0ZWNmZyA9IDA7CisJcHJpdiA9IChzdHJ1Y3QgcHJpdl9wY20zNzI0ICopIChkZXYtPnByaXZhdGUpOworCisJbWFzayA9IDEgPDwgQ1JfQ0hBTihjaGFuc3BlYyk7CisJaWYgKHMgPT0gZGV2LT5zdWJkZXZpY2VzKSB7CS8vIHN1YmRldiAwCisJCXByaXYtPmRpb18xIHw9IG1hc2s7CisJfSBlbHNlIHsJCS8vc3ViZGV2IDEKKwkJcHJpdi0+ZGlvXzIgfD0gbWFzazsKKwl9CisJaWYgKHByaXYtPmRpb18xICYgMHhmZjAwMDApIHsKKwkJZ2F0ZWNmZyB8PSBHQVRFX0MwOworCX0KKwlpZiAocHJpdi0+ZGlvXzEgJiAweGZmMDApIHsKKwkJZ2F0ZWNmZyB8PSBHQVRFX0IwOworCX0KKwlpZiAocHJpdi0+ZGlvXzEgJiAweGZmKSB7CisJCWdhdGVjZmcgfD0gR0FURV9BMDsKKwl9CisJaWYgKHByaXYtPmRpb18yICYgMHhmZjAwMDApIHsKKwkJZ2F0ZWNmZyB8PSBHQVRFX0MxOworCX0KKwlpZiAocHJpdi0+ZGlvXzIgJiAweGZmMDApIHsKKwkJZ2F0ZWNmZyB8PSBHQVRFX0IxOworCX0KKwlpZiAocHJpdi0+ZGlvXzIgJiAweGZmKSB7CisJCWdhdGVjZmcgfD0gR0FURV9BMTsKKwl9CisJLy8gICAgICBwcmludGsoImdhdGUgY29udHJvbCAleFxuIiwgZ2F0ZWNmZyk7CisJb3V0YihnYXRlY2ZnLCBkZXYtPmlvYmFzZSArIDkpOworfQorCisvKiBvdmVycmlkaW5nIHRoZSA4MjU1IGluc24gY29uZmlnICovCitzdGF0aWMgaW50IHN1YmRldl8zNzI0X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgbWFzazsKKwl1bnNpZ25lZCBpbnQgYml0czsKKworCW1hc2sgPSAxIDw8IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWlmIChtYXNrICYgMHgwMDAwZmYpIHsKKwkJYml0cyA9IDB4MDAwMGZmOworCX0gZWxzZSBpZiAobWFzayAmIDB4MDBmZjAwKSB7CisJCWJpdHMgPSAweDAwZmYwMDsKKwl9IGVsc2UgaWYgKG1hc2sgJiAweDBmMDAwMCkgeworCQliaXRzID0gMHgwZjAwMDA7CisJfSBlbHNlIHsKKwkJYml0cyA9IDB4ZjAwMDAwOworCX0KKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH5iaXRzOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCXMtPmlvX2JpdHMgfD0gYml0czsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPSAocy0+aW9fYml0cyAmIGJpdHMpID8gQ09NRURJX09VVFBVVCA6IENPTUVESV9JTlBVVDsKKwkJcmV0dXJuIGluc24tPm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRvXzM3MjRfY29uZmlnKGRldiwgcywgaW5zbi0+Y2hhbnNwZWMpOworCWVuYWJsZV9jaGFuKGRldiwgcywgaW5zbi0+Y2hhbnNwZWMpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBjbTM3MjRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCXVuc2lnbmVkIGludCBpb3JhbmdlOworCWludCByZXQsIGksIG5fc3ViZGV2aWNlczsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlvcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHByaXZfcGNtMzcyNCkpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJKChzdHJ1Y3QgcHJpdl9wY20zNzI0ICopIChkZXYtPnByaXZhdGUpKS0+ZGlvXzEgPSAwOworCSgoc3RydWN0IHByaXZfcGNtMzcyNCAqKSAoZGV2LT5wcml2YXRlKSktPmRpb18yID0gMDsKKworCXByaW50aygiY29tZWRpJWQ6IHBjbTM3MjQ6IGJvYXJkPSVzLCAweCUwM2x4ICIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisJaWYgKCFpb2Jhc2UgfHwgIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgaW9yYW5nZSwgInBjbTM3MjQiKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc19ib2FyZC0+bmFtZTsKKwlwcmludGsoIlxuIik7CisKKwluX3N1YmRldmljZXMgPSB0aGlzX2JvYXJkLT5udW1vZnBvcnRzOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZpY2VzKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bl9zdWJkZXZpY2VzOyBpKyspIHsKKwkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGksIHN1YmRldl84MjU1X2NiLAorCQkJKHVuc2lnbmVkIGxvbmcpKGRldi0+aW9iYXNlICsgU0laRV84MjU1ICogaSkpOworCQkoKGRldi0+c3ViZGV2aWNlcykgKyBpKS0+aW5zbl9jb25maWcgPSBzdWJkZXZfMzcyNF9pbnNuX2NvbmZpZzsKKwl9OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbTM3MjRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpOworCisJaWYgKGRldi0+c3ViZGV2aWNlcykgeworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgeworCQkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGkpOworCQl9CisJfQorCWlmIChkZXYtPmlvYmFzZSkgeworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MzAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlNTU1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzMwLmMKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBjb21lZGkvZHJpdmVycy9wY20zNzMwLmMKKyAqIERyaXZlciBmb3IgUENNMzczMCBhbmQgY2xvbmVzCisgKiBCbGFpbmUgTGVlCisgKiBmcm9tIHBjbDcyNSBieSBEYXZpZCBTLgorICovCisvKgorRHJpdmVyOiBwY20zNzMwCitEZXNjcmlwdGlvbjogUENNMzczMAorQXV0aG9yOiBCbGFpbmUgTGVlCitEZXZpY2VzOiBbQWR2YW50ZWNoXSBQQ00tMzczMCAocGNtMzczMCkKK1N0YXR1czogdW5rbm93bgorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIFBDTTM3MzBfU0laRSA0CQkvLyBjb25zZWN1dGl2ZSBpbyBwb3J0IGFkZHJlc3NlcworCisjZGVmaW5lIFBDTTM3MzBfRE9BIDAJCS8vIG9mZnNldHMgZm9yIGVhY2ggcG9ydAorI2RlZmluZSBQQ00zNzMwX0RPQiAyCisjZGVmaW5lIFBDTTM3MzBfRE9DIDMKKyNkZWZpbmUgUENNMzczMF9ESUEgMAorI2RlZmluZSBQQ00zNzMwX0RJQiAyCisjZGVmaW5lIFBDTTM3MzBfRElDIDMKKworc3RhdGljIGludCBwY20zNzMwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbTM3MzBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNtMzczMCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJwY20zNzMwIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY20zNzMwX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY20zNzMwX2RldGFjaCwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNtMzczMCk7CisKK3N0YXRpYyBpbnQgcGNtMzczMF9kb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSAoZGF0YVswXSAmIGRhdGFbMV0pOworCQlvdXRiKHMtPnN0YXRlLCBkZXYtPmlvYmFzZSArICh1bnNpZ25lZCBsb25nKShzLT5wcml2YXRlKSk7CisJfQorCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHBjbTM3MzBfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgKHVuc2lnbmVkIGxvbmcpKHMtPnByaXZhdGUpKTsKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBwY20zNzMwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHBjbTM3MzA6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgUENNMzczMF9TSVpFLCAicGNtMzczMCIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisJZGV2LT5ib2FyZF9uYW1lID0gInBjbTM3MzAiOworCWRldi0+aW9iYXNlID0gZGV2LT5pb2Jhc2U7CisJZGV2LT5pcnEgPSAwOworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCA2KSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IHBjbTM3MzBfZG9faW5zbl9iaXRzOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+cHJpdmF0ZSA9ICh2b2lkICopUENNMzczMF9ET0E7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRE87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gcGNtMzczMF9kb19pbnNuX2JpdHM7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilQQ00zNzMwX0RPQjsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX2JpdHMgPSBwY20zNzMwX2RvX2luc25fYml0czsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKVBDTTM3MzBfRE9DOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IHBjbTM3MzBfZGlfaW5zbl9iaXRzOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJcy0+cHJpdmF0ZSA9ICh2b2lkICopUENNMzczMF9ESUE7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm1heGRhdGEgPSAxOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gcGNtMzczMF9kaV9pbnNuX2JpdHM7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKwlzLT5wcml2YXRlID0gKHZvaWQgKilQQ00zNzMwX0RJQjsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyA1OworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+bl9jaGFuID0gODsKKwlzLT5pbnNuX2JpdHMgPSBwY20zNzMwX2RpX2luc25fYml0czsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPnByaXZhdGUgPSAodm9pZCAqKVBDTTM3MzBfRElDOworCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNtMzczMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNtMzczMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFBDTTM3MzBfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21hZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyYTczZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21hZC5jCkBAIC0wLDAgKzEsMTczIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL3BjbWFkLmMKKyAgICBIYXJkd2FyZSBkcml2ZXIgZm9yIFdpbnN5c3RlbXMgUENNLUEvRDEyIGFuZCBQQ00tQS9EMTYKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogcGNtYWQKK0Rlc2NyaXB0aW9uOiBXaW5zeXN0ZW1zIFBDTS1BL0QxMiwgUENNLUEvRDE2CitBdXRob3I6IGRzCitEZXZpY2VzOiBbV2luc3lzdGVtc10gUENNLUEvRDEyIChwY21hZDEyKSwgUENNLUEvRDE2IChwY21hZDE2KQorU3RhdHVzOiB1bnRlc3RlZAorCitUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiBvbiBhIGJldCB0aGF0IEkgY291bGRuJ3Qgd3JpdGUgYSBkcml2ZXIKK2luIGxlc3MgdGhhbiAyIGhvdXJzLiAgSSB3b24gdGhlIGJldCwgYnV0IG5ldmVyIGdvdCBwYWlkLiAgPSgKKworQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICBbMF0gLSBJL08gcG9ydCBiYXNlCisgIFsxXSAtIHVudXNlZAorICBbMl0gLSBBbmFsb2cgaW5wdXQgcmVmZXJlbmNlCisgICAgICAgICAgMCA9IHNpbmdsZSBlbmRlZAorICAgICAgICAgIDEgPSBkaWZmZXJlbnRpYWwKKyAgWzNdIC0gQW5hbG9nIGlucHV0IGVuY29kaW5nIChtdXN0IG1hdGNoIGp1bXBlcnMpCisgICAgICAgICAgMCA9IHN0cmFpZ2h0IGJpbmFyeQorICAgICAgICAgIDEgPSB0d28ncyBjb21wbGVtZW50CisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKworI2RlZmluZSBQQ01BRF9TSVpFCQk0CisKKyNkZWZpbmUgUENNQURfU1RBVFVTCQkwCisjZGVmaW5lIFBDTUFEX0xTQgkJMQorI2RlZmluZSBQQ01BRF9NU0IJCTIKKyNkZWZpbmUgUENNQURfQ09OVkVSVAkJMQorCitzdHJ1Y3QgcGNtYWRfYm9hcmRfc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBuX2FpX2JpdHM7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBwY21hZF9ib2FyZF9zdHJ1Y3QgcGNtYWRfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY21hZDEyIiwKKwkgICAgICBuX2FpX2JpdHM6MTIsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY21hZDE2IiwKKwkgICAgICBuX2FpX2JpdHM6MTYsCisJCX0sCit9OworCisjZGVmaW5lIHRoaXNfYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNtYWRfYm9hcmRfc3RydWN0ICopKGRldi0+Ym9hcmRfcHRyKSkKKyNkZWZpbmUgbl9wY21hZF9ib2FyZHMgKHNpemVvZihwY21hZF9ib2FyZHMpL3NpemVvZihwY21hZF9ib2FyZHNbMF0pKQorCitzdHJ1Y3QgcGNtYWRfcHJpdl9zdHJ1Y3QgeworCWludCBkaWZmZXJlbnRpYWw7CisJaW50IHR3b3NfY29tcDsKK307CisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgcGNtYWRfcHJpdl9zdHJ1Y3QgKilkZXYtPnByaXZhdGUpCisKK3N0YXRpYyBpbnQgcGNtYWRfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNtYWRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcGNtYWQgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNtYWQiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnBjbWFkX2F0dGFjaCwKKyAgICAgIGRldGFjaDpwY21hZF9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZwY21hZF9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX3BjbWFkX2JvYXJkcywKKyAgICAgIG9mZnNldDpzaXplb2YocGNtYWRfYm9hcmRzWzBdKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfcGNtYWQpOworCisjZGVmaW5lIFRJTUVPVVQJMTAwCisKK3N0YXRpYyBpbnQgcGNtYWRfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbjsKKwlpbnQgbjsKKworCWNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJb3V0YihjaGFuLCBkZXYtPmlvYmFzZSArIFBDTUFEX0NPTlZFUlQpOworCisJCWZvciAoaSA9IDA7IGkgPCBUSU1FT1VUOyBpKyspIHsKKwkJCWlmICgoaW5iKGRldi0+aW9iYXNlICsgUENNQURfU1RBVFVTKSAmIDB4MykgPT0gMHgzKQorCQkJCWJyZWFrOworCQl9CisJCWRhdGFbbl0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBQQ01BRF9MU0IpOworCQlkYXRhW25dIHw9IChpbmIoZGV2LT5pb2Jhc2UgKyBQQ01BRF9NU0IpIDw8IDgpOworCisJCWlmIChkZXZwcml2LT50d29zX2NvbXApIHsKKwkJCWRhdGFbbl0gXj0gKDEgPDwgKHRoaXNfYm9hcmQtPm5fYWlfYml0cyAtIDEpKTsKKwkJfQorCX0KKworCXJldHVybiBuOworfQorCisvKgorICogb3B0aW9uczoKKyAqIDAJaS9vIGJhc2UKKyAqIDEJdW51c2VkCisgKiAyCTA9c2luZ2xlIGVuZGVkIDE9ZGlmZmVyZW50aWFsCisgKiAzCTA9c3RyYWlnaHQgYmluYXJ5IDE9dHdvJ3MgY29tcAorICovCitzdGF0aWMgaW50IHBjbWFkX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogcGNtYWQ6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgUENNQURfU0laRSwgInBjbWFkIikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBwY21hZF9wcml2X3N0cnVjdCkpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IEFSRUZfR1JPVU5EOworCXMtPm5fY2hhbiA9IDE2OwkJLyogWFhYICovCisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5pbnNuX3JlYWQgPSBwY21hZF9haV9pbnNuX3JlYWQ7CisJcy0+bWF4ZGF0YSA9ICgxIDw8IHRoaXNfYm9hcmQtPm5fYWlfYml0cykgLSAxOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY21hZF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcGNtYWQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pcnEpIHsKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJfQorCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFBDTUFEX1NJWkUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtZGExMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWRhMTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTFmZjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWRhMTIuYwpAQCAtMCwwICsxLDMwNiBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9wY21kYTEyLmMKKyAgICBEcml2ZXIgZm9yIFdpbnN5c3RlbXMgUEMtMTA0IGJhc2VkIFBDTS1EL0EtMTIgOC1jaGFubmVsIEFPIGJvYXJkLgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwNiBDYWxpbiBBLiBDdWxpYW51IDxjYWxpbkBhanZhci5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisvKgorRHJpdmVyOiBwY21kYTEyCitEZXNjcmlwdGlvbjogQSBkcml2ZXIgZm9yIHRoZSBXaW5zeXN0ZW1zIFBDTS1EL0EtMTIKK0RldmljZXM6IFtXaW5zeXN0ZW1zXSBQQ00tRC9BLTEyIChwY21kYTEyKQorQXV0aG9yOiBDYWxpbiBDdWxpYW51IDxjYWxpbkBhanZhci5vcmc+CitVcGRhdGVkOiBGcmksIDEzIEphbiAyMDA2IDEyOjAxOjAxIC0wNTAwCitTdGF0dXM6IHdvcmtzCisKK0EgZHJpdmVyIGZvciB0aGUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQtdG8tcHJvZ3JhbSBQQ00tRC9BLTEyLgorVGhpcyBib2FyZCBkb2Vzbid0IHN1cHBvcnQgY29tbWFuZHMsIGFuZCB0aGUgb25seSB3YXkgdG8gc2V0IGl0cworYW5hbG9nIG91dHB1dCByYW5nZSBpcyB0byBqdW1wZXIgdGhlIGJvYXJkLiAgQXMgc3VjaCwKK2NvbWVkaV9kYXRhX3dyaXRlKCkgaWdub3JlcyB0aGUgcmFuZ2UgdmFsdWUgc3BlY2lmaWVkLgorCitUaGUgYm9hcmQgdXNlcyAxNiBjb25zZWN1dGl2ZSBJL08gYWRkcmVzc2VzIHN0YXJ0aW5nIGF0IHRoZSBJL08gcG9ydAorYmFzZSBhZGRyZXNzLiAgRWFjaCBhZGRyZXNzIGNvcnJlc3BvbmRzIHRvIHRoZSBMU0IgdGhlbiBNU0Igb2YgYQorcGFydGljdWxhciBjaGFubmVsIGZyb20gMC03LgorCitOb3RlIHRoYXQgdGhlIGJvYXJkIGlzIG5vdCBJU0EtUE5QIGNhcGFibGUgYW5kIHRodXMKK25lZWRzIHRoZSBJL08gcG9ydCBjb21lZGlfY29uZmlnIHBhcmFtZXRlci4KKworTm90ZSB0aGF0IHBhc3NpbmcgYSBub256ZXJvIHZhbHVlIGFzIHRoZSBzZWNvbmQgY29uZmlnIG9wdGlvbiB3aWxsCitlbmFibGUgInNpbXVsdGFuZW91cyB4ZmVyIiBtb2RlIGZvciB0aGlzIGJvYXJkLCBpbiB3aGljaCBBTyB3cml0ZXMKK3dpbGwgbm90IHRha2UgZWZmZWN0IHVudGlsIGEgc3Vic2VxdWVudCByZWFkIG9mIGFueSBBTyBjaGFubmVsLiAgVGhpcworaXMgc28gdGhhdCBvbmUgY2FuIHNwZWVkIHVwIHByb2dyYW1taW5nIGJ5IHByZWxvYWRpbmcgYWxsIEFPIHJlZ2lzdGVycword2l0aCB2YWx1ZXMgYmVmb3JlIHNpbXVsdGFuZW91c2x5IHNldHRpbmcgdGhlbSB0byB0YWtlIGVmZmVjdCB3aXRoIG9uZQorcmVhZCBjb21tYW5kLgorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBEbyBTaW11bHRhbmVvdXMgWGZlciAoc2VlIGRlc2NyaXB0aW9uKQorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CQkvKiBmb3IgUENJIGRldmljZXMgKi8KKworI2RlZmluZSBNSU4oYSxiKSAoICgoYSkgPCAoYikpID8gKGEpIDogKGIpICkKKyNkZWZpbmUgU0RFVl9OTyAoKGludCkocyAtIGRldi0+c3ViZGV2aWNlcykpCisjZGVmaW5lIENIQU5TIDgKKyNkZWZpbmUgSU9TSVpFIDE2CisjZGVmaW5lIExTQih4KSAoKHVuc2lnbmVkIGNoYXIpKCh4KSAmIDB4ZmYpKQorI2RlZmluZSBNU0IoeCkgKCh1bnNpZ25lZCBjaGFyKSgoKCh1bnNpZ25lZCBzaG9ydCkoeCkpPj44KSAmIDB4ZmYpKQorI2RlZmluZSBMU0JfUE9SVChjaGFuKSAoZGV2LT5pb2Jhc2UgKyAoY2hhbikqMikKKyNkZWZpbmUgTVNCX1BPUlQoY2hhbikgKExTQl9QT1JUKGNoYW4pKzEpCisjZGVmaW5lIEJJVFMgMTIKKworLyoKKyAqIEJvcmRzCisgKi8KK3N0cnVjdCBwY21kYTEyX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworfTsKKworLyogbm90ZSB0aGVzZSBoYXZlIG5vIGVmZmVjdCBhbmQgYXJlIG1lcmVseSBoZXJlIGZvciByZWZlcmVuY2UuLgorICAgdGhlc2UgYXJlIGNvbmZpZ3VyZWQgYnkganVtcGVyaW5nIHRoZSBib2FyZCEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSBwY21kYTEyX3JhbmdlcyA9IHsKKwkzLAorCXsKKwkJCVVOSV9SQU5HRSg1KSwgVU5JX1JBTkdFKDEwKSwgQklQX1JBTkdFKDUpCisJCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNtZGExMl9ib2FyZCBwY21kYTEyX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkicGNtZGExMiIsCisJCX0sCit9OworCisvKgorICogVXNlZnVsIGZvciBzaG9ydGhhbmQgYWNjZXNzIHRvIHRoZSBwYXJ0aWN1bGFyIGJvYXJkIHN0cnVjdHVyZQorICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBwY21kYTEyX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKK3N0cnVjdCBwY21kYTEyX3ByaXZhdGUgeworCisJdW5zaWduZWQgaW50IGFvX3JlYWRiYWNrW0NIQU5TXTsKKwlpbnQgc2ltdWx0YW5lb3VzX3hmZXJfbW9kZTsKK307CisKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbWRhMTJfcHJpdmF0ZSAqKShkZXYtPnByaXZhdGUpKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBwY21kYTEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBjbWRhMTJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKKworc3RhdGljIHZvaWQgemVyb19jaGFucyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXIgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNtZGExMiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cGNtZGExMl9hdHRhY2gsCisgICAgICBkZXRhY2g6cGNtZGExMl9kZXRhY2gsCisvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaWYgeW91IGFyZQorICogd3JpdGluZyBhIGRyaXZlciBmb3IgYSBJU0EgUG5QIG9yIFBDSSBjYXJkICovCisJLyogTW9zdCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSB0eXBlcyBvZiBib2FyZHMgYnkKKwkgKiBoYXZpbmcgYW4gYXJyYXkgb2YgYm9hcmQgc3RydWN0dXJlcy4gIFRoZXNlIHdlcmUgZGVmaW5lZAorCSAqIGluIHBjbWRhMTJfYm9hcmRzW10gYWJvdmUuICBOb3RlIHRoYXQgdGhlIGVsZW1lbnQgJ25hbWUnCisJICogd2FzIGZpcnN0IGluIHRoZSBzdHJ1Y3R1cmUgLS0gQ29tZWRpIHVzZXMgdGhpcyBmYWN0IHRvCisJICogZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUgYm9hcmQgd2l0aG91dCBrbm93aW5nIGFueSBkZXRhaWxzCisJICogYWJvdXQgdGhlIHN0cnVjdHVyZSBleGNlcHQgZm9yIGl0cyBsZW5ndGguCisJICogV2hlbiBhIGRldmljZSBpcyBhdHRhY2hlZCAoYnkgY29tZWRpX2NvbmZpZyksIHRoZSBuYW1lCisJICogb2YgdGhlIGRldmljZSBpcyBnaXZlbiB0byBDb21lZGksIGFuZCBDb21lZGkgdHJpZXMgdG8KKwkgKiBtYXRjaCBpdCBieSBnb2luZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJvYXJkIG5hbWVzLiAgSWYKKwkgKiB0aGVyZSBpcyBhIG1hdGNoLCB0aGUgYWRkcmVzcyBvZiB0aGUgcG9pbnRlciBpcyBwdXQKKwkgKiBpbnRvIGRldi0+Ym9hcmRfcHRyIGFuZCBkcml2ZXItPmF0dGFjaCgpIGlzIGNhbGxlZC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgbm90IG5lY2Vzc2FyeSBpZiB5b3UgY2FuIGRldGVybWluZQorCSAqIHRoZSB0eXBlIG9mIGJvYXJkIGluIHNvZnR3YXJlLiAgSVNBIFBuUCwgUENJLCBhbmQgUENNQ0lBCisJICogZGV2aWNlcyBhcmUgc3VjaCBib2FyZHMuCisJICovCisgICAgICBib2FyZF9uYW1lOiZwY21kYTEyX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3QgcGNtZGExMl9ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHBjbWRhMTJfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgcGNtZGExMl9ib2FyZCksCit9OworCitzdGF0aWMgaW50IGFvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IGFvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKKy8qCisgKiBBdHRhY2ggaXMgY2FsbGVkIGJ5IHRoZSBDb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlcgorICogZm9yIGEgcGFydGljdWxhciBib2FyZC4gIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5CisgKiBpbiB0aGUgZHJpdmVyIHN0cnVjdHVyZSwgZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdAorICogYWRkcmVzcy4KKyAqLworc3RhdGljIGludCBwY21kYTEyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6ICVzOiBpbzogJWx4ICVzICIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSwKKwkJaW9iYXNlLCBpdC0+b3B0aW9uc1sxXSA/ICJzaW11bHRhbmVvdXMgeGZlciBtb2RlIGVuYWJsZWQiIDogIiIpOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIElPU0laRSwgZHJpdmVyLmRyaXZlcl9uYW1lKSkgeworCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuICBOb3RlIHRoYXQgd2UgY2FuIHVzZSB0aGUgInRoaXNib2FyZCIKKyAqIG1hY3JvIG5vdywgc2luY2Ugd2UganVzdCBpbml0aWFsaXplZCBpdCBpbiB0aGUgbGFzdCBsaW5lLgorICovCisJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOworCisvKgorICogQWxsb2NhdGUgdGhlIHByaXZhdGUgc3RydWN0dXJlIGFyZWEuICBhbGxvY19wcml2YXRlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHBjbWRhMTJfcHJpdmF0ZSkpIDwgMCkgeworCQlwcmludGsoImNhbm5vdCBhbGxvY2F0ZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2cHJpdi0+c2ltdWx0YW5lb3VzX3hmZXJfbW9kZSA9IGl0LT5vcHRpb25zWzFdOworCisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisJICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorCSAqCisJICogQWxsb2NhdGUgMiBzdWJkZXZzICgzMiArIDE2IERJTyBsaW5lcykgb3IgMyAzMiBESU8gc3ViZGV2cyBmb3IgdGhlCisJICogOTYtY2hhbm5lbCB2ZXJzaW9uIG9mIHRoZSBib2FyZC4KKwkgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpIDwgMCkgeworCQlwcmludGsoImNhbm5vdCBhbGxvY2F0ZSBzdWJkZXZpY2UgZGF0YSBzdHJ1Y3R1cmVzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlczsKKwlzLT5wcml2YXRlID0gTlVMTDsKKwlzLT5tYXhkYXRhID0gKDB4MSA8PCBCSVRTKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcGNtZGExMl9yYW5nZXM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSBDSEFOUzsKKwlzLT5pbnNuX3dyaXRlID0gJmFvX3dpbnNuOworCXMtPmluc25fcmVhZCA9ICZhb19yaW5zbjsKKworCXplcm9fY2hhbnMoZGV2KTsJLyogY2xlYXIgb3V0IGFsbCB0aGUgcmVnaXN0ZXJzLCBiYXNpY2FsbHkgKi8KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGNtZGExMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogJXM6IHJlbW92ZVxuIiwgZGV2LT5taW5vciwgZHJpdmVyLmRyaXZlcl9uYW1lKTsKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBJT1NJWkUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB6ZXJvX2NoYW5zKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQorewkJCQkvKiBzZXRzIHVwIGFuCisJCQkJICAgQVNJQyBjaGlwIHRvIGRlZmF1bHRzICovCisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IENIQU5TOyArK2kpIHsKKy8qICAgICAgL1wqIGRvIHRoaXMgYXMgb25lIGluc3RydWN0aW9uPz8gKlwvICovCisvKiAgICAgIG91dHcoMCwgTFNCX1BPUlQoY2hhbikpOyAqLworCQlvdXRiKDAsIExTQl9QT1JUKGkpKTsKKwkJb3V0YigwLCBNU0JfUE9SVChpKSk7CisJfQorCWluYihMU0JfUE9SVCgwKSk7CS8qIHVwZGF0ZSBjaGFucy4gKi8KK30KKworc3RhdGljIGludCBhb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCS8qIFdyaXRpbmcgYSBsaXN0IG9mIHZhbHVlcyB0byBhbiBBTyBjaGFubmVsIGlzIHByb2JhYmx5IG5vdAorCSAqIHZlcnkgdXNlZnVsLCBidXQgdGhhdCdzIGhvdyB0aGUgaW50ZXJmYWNlIGlzIGRlZmluZWQuICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47ICsraSkgeworCisvKiAgICAgIC9cKiBkbyB0aGlzIGFzIG9uZSBpbnN0cnVjdGlvbj8/ICpcLyAqLworLyogICAgICBvdXR3KGRhdGFbaV0sIExTQl9QT1JUKGNoYW4pKTsgKi8KKworCQkvKiBOZWVkIHRvIGRvIHRoaXMgYXMgdHdvIGluc3RydWN0aW9ucyBkdWUgdG8gOC1iaXQgYnVzPz8gKi8KKwkJLyogIGZpcnN0LCBsb2FkIHRoZSBsb3cgYnl0ZSAqLworCQlvdXRiKExTQihkYXRhW2ldKSwgTFNCX1BPUlQoY2hhbikpOworCQkvKiAgbmV4dCwgd3JpdGUgdGhlIGhpZ2ggYnl0ZSAqLworCQlvdXRiKE1TQihkYXRhW2ldKSwgTVNCX1BPUlQoY2hhbikpOworCisJCS8qIHNhdmUgc2hhZG93IHJlZ2lzdGVyICovCisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKworCQlpZiAoIWRldnByaXYtPnNpbXVsdGFuZW91c194ZmVyX21vZGUpCisJCQlpbmIoTFNCX1BPUlQoY2hhbikpOworCX0KKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgd3JpdHRlbiAqLworCXJldHVybiBpOworfQorCisvKiBBTyBzdWJkZXZpY2VzIHNob3VsZCBoYXZlIGEgcmVhZCBpbnNuIGFzIHdlbGwgYXMgYSB3cml0ZSBpbnNuLgorCisgICBVc3VhbGx5IHRoaXMgbWVhbnMgY29weWluZyBhIHZhbHVlIHN0b3JlZCBpbiBkZXZwcml2LT5hb19yZWFkYmFjay4KKyAgIEhvd2V2ZXIsIHNpbmNlIHRoaXMgZHJpdmVyIHN1cHBvcnRzIHNpbXVsdGFuZW91cyB4ZmVyIHRoZW4gc29tZXRpbWVzCisgICB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5IGFjY29tcGxpc2hlcyB3b3JrLgorCisgICBTaW11bHRhbmVhb3VzIHhmZXIgbW9kZSBpcyBhY2NvbXBsaXNoZWQgYnkgbG9hZGluZyBBTEwgdGhlIHZhbHVlcworICAgeW91IHdhbnQgZm9yIEFPIGluIGFsbCB0aGUgY2hhbm5lbHMsIHRoZW4gUkVBRGluZyBvZmYgb25lIG9mIHRoZSBBTworICAgcmVnaXN0ZXJzIHRvIGluaXRpYXRlIHRoZSBpbnN0YW50YW5lb3VzIHNpbXVsdGFuZW91cyB1cGRhdGUgb2YgYWxsCisgICBEQUMgb3V0cHV0cywgd2hpY2ggbWFrZXMgYWxsIEFPIGNoYW5uZWxzIHVwZGF0ZSBzaW11bHRhbmVvdXNseS4KKyAgIFRoaXMgaXMgdXNlZnVsIGZvciBzb21lIGNvbnRyb2wgYXBwbGljYXRpb25zLCBJIHdvdWxkIGltYWdpbmUuCisqLworc3RhdGljIGludCBhb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJaWYgKGRldnByaXYtPnNpbXVsdGFuZW91c194ZmVyX21vZGUpCisJCQlpbmIoTFNCX1BPUlQoY2hhbikpOworCQkvKiByZWFkIGJhY2sgc2hhZG93IHJlZ2lzdGVyICovCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqLworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlNDBmMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYwpAQCAtMCwwICsxLDEzMzMgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMKKyAgICBEcml2ZXIgZm9yIFdpbnN5c3RlbXMgUEMtMTA0IGJhc2VkIG11bHRpZnVuY3Rpb24gSU8gYm9hcmQuCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDA3IENhbGluIEEuIEN1bGlhbnUgPGNhbGluQGFqdmFyLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKy8qCitEcml2ZXI6IHBjbW1pbworRGVzY3JpcHRpb246IEEgZHJpdmVyIGZvciB0aGUgUENNLU1JTyBtdWx0aWZ1bmN0aW9uIGJvYXJkCitEZXZpY2VzOiBbV2luc3lzdGVtc10gUENNLU1JTyAocGNtbWlvKQorQXV0aG9yOiBDYWxpbiBDdWxpYW51IDxjYWxpbkBhanZhci5vcmc+CitVcGRhdGVkOiBXZWQsIE1heSAxNiAyMDA3IDE2OjIxOjEwIC0wNTAwCitTdGF0dXM6IHdvcmtzCisKK0EgZHJpdmVyIGZvciB0aGUgcmVsYXRpdmVseSBuZXcgUENNLU1JTyBtdWx0aWZ1bmN0aW9uIGJvYXJkIGZyb20KK1dpbnN5c3RlbXMuICBUaGlzIGJvYXJkIGlzIGEgUEMtMTA0IGJhc2VkIEkvTyBib2FyZC4gIEl0IGNvbnRhaW5zCitmb3VyIHN1YmRldmljZXM6CisgIHN1YmRldmljZSAwIC0gMTYgY2hhbm5lbHMgb2YgMTYtYml0IEFJCisgIHN1YmRldmljZSAxIC0gOCBjaGFubmVscyBvZiAxNi1iaXQgQU8KKyAgc3ViZGV2aWNlIDIgLSBmaXJzdCAyNCBjaGFubmVscyBvZiB0aGUgNDggY2hhbm5lbCBvZiBESU8gKHdpdGggZWRnZS10cmlnZ2VyZWQgaW50ZXJydXB0IHN1cHBvcnQpCisgIHN1YmRldmljZSAzIC0gbGFzdCAyNCBjaGFubmVscyBvZiB0aGUgNDggY2hhbm5lbCBESU8gKG5vIGludGVycnVwdCBzdXBwb3J0IGZvciB0aGlzIGJhbmsgb2YgY2hhbm5lbHMpCisKKyAgU29tZSBub3RlczoKKworICBTeW5jaHJvbm91cyByZWFkcyBhbmQgd3JpdGVzIGFyZSB0aGUgb25seSB0aGluZ3MgaW1wbGVtZW50ZWQgZm9yIEFJIGFuZCBBTywKKyAgZXZlbiB0aG91Z2ggdGhlIGhhcmR3YXJlIGl0c2VsZiBjYW4gZG8gc3RyZWFtaW5nIGFjcXVpc2l0aW9uLCBldGMuICBBbnlvbmUKKyAgd2FudCB0byBhZGQgYXN5bmNocm9ub3VzIEkvTyBmb3IgQUkvQU8gYXMgYSBmZWF0dXJlPyAgQmUgbXkgZ3Vlc3QuLi4KKworICBBc3luY2hyb25vdXMgSS9PIGZvciB0aGUgRElPIHN1YmRldmljZXMgKmlzKiBpbXBsZW1lbnRlZCwgaG93ZXZlciEgIFRoZXkgYXJlCisgIGJhc2ljYWxseSBlZGdlLXRyaWdnZXJlZCBpbnRlcnJ1cHRzIGZvciBhbnkgY29uZmlndXJhdGlvbiBvZiB0aGUgZmlyc3QKKyAgMjQgRElPLWxpbmVzLgorCisgIEFsc28gbm90ZSB0aGF0IHRoaXMgaW50ZXJydXB0IHN1cHBvcnQgaXMgdW50ZXN0ZWQuCisKKyAgQSBmZXcgd29yZHMgYWJvdXQgZWRnZS1kZXRlY3Rpb24gSVJRIHN1cHBvcnQgKGNvbW1hbmRzIG9uIERJTyk6CisKKyAgKiBUbyB1c2UgZWRnZS1kZXRlY3Rpb24gSVJRIHN1cHBvcnQgZm9yIHRoZSBESU8gc3ViZGV2aWNlLCBwYXNzIHRoZSBJUlEKKyAgICBvZiB0aGUgYm9hcmQgdG8gdGhlIGNvbWVkaV9jb25maWcgY29tbWFuZC4gIFRoZSBib2FyZCBJUlEgaXMgbm90IGp1bXBlcmVkCisgICAgYnV0IHJhdGhlciBjb25maWd1cmVkIHRocm91Z2ggc29mdHdhcmUsIHNvIGFueSBJUlEgZnJvbSAxLTE1IGlzIE9LLgorCisgICogRHVlIHRvIHRoZSBnZW5lcmljaXR5IG9mIHRoZSBjb21lZGkgQVBJLCB5b3UgbmVlZCB0byBjcmVhdGUgYSBzcGVjaWFsCisgICAgY29tZWRpX2NvbW1hbmQgaW4gb3JkZXIgdG8gdXNlIGVkZ2UtdHJpZ2dlcmVkIGludGVycnVwdHMgZm9yIERJTy4KKworICAqIFVzZSBjb21lZGlfY29tbWFuZHMgd2l0aCBUUklHX05PVy4gIFlvdXIgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgZWFjaAorICAgIHRpbWUgYW4gZWRnZSBpcyBkZXRlY3RlZCBvbiB0aGUgc3BlY2lmaWVkIERJTyBsaW5lKHMpLCBhbmQgdGhlIGRhdGEKKyAgICB2YWx1ZXMgd2lsbCBiZSB0d28gc2FtcGxlX3Qncywgd2hpY2ggc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB0byBmb3JtCisgICAgb25lIDMyLWJpdCB1bnNpZ25lZCBpbnQuICBUaGlzIHZhbHVlIGlzIHRoZSBtYXNrIG9mIGNoYW5uZWxzIHRoYXQgaGFkCisgICAgZWRnZXMgZGV0ZWN0ZWQgZnJvbSB5b3VyIGNoYW5uZWwgbGlzdC4gIE5vdGUgdGhhdCB0aGUgYml0cyBwb3NpdGlvbnMKKyAgICBpbiB0aGUgbWFzayBjb3JyZXNwb25kIHRvIHBvc2l0aW9ucyBpbiB5b3VyIGNoYW5saXN0IHdoZW4geW91CisgICAgc3BlY2lmaWVkIHRoZSBjb21tYW5kIGFuZCAqbm90KiBjaGFubmVsIGlkJ3MhCisKKyAqICBUbyBzZXQgdGhlIHBvbGFyaXR5IG9mIHRoZSBlZGdlLWRldGVjdGlvbiBpbnRlcnJ1cHRzIHBhc3MgYSBub256ZXJvIHZhbHVlCisgICAgZm9yIGVpdGhlciBDUl9SQU5HRSBvciBDUl9BUkVGIGZvciBlZGdlLXVwIHBvbGFyaXR5LCBvciBhIHplcm8KKyAgICB2YWx1ZSBmb3IgYm90aCBDUl9SQU5HRSBhbmQgQ1JfQVJFRiBpZiB5b3Ugd2FudCBlZGdlLWRvd24gcG9sYXJpdHkuCisKK0NvbmZpZ3VyYXRpb24gT3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCisgIFsxXSAtIElSUSAob3B0aW9uYWwgLS0gZm9yIGVkZ2UtZGV0ZWN0IGludGVycnVwdCBzdXBwb3J0IG9ubHksIGxlYXZlIG91dCBpZiB5b3UgZG9uJ3QgbmVlZCB0aGlzIGZlYXR1cmUpCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CQkvKiBmb3IgUENJIGRldmljZXMgKi8KKworI2RlZmluZSBNSU4oYSxiKSAoICgoYSkgPCAoYikpID8gKGEpIDogKGIpICkKKworLyogVGhpcyBzdHVmZiBpcyBhbGwgZnJvbSBwY211aW8uYyAtLSBpdCByZWZlcnMgdG8gdGhlIERJTyBzdWJkZXZpY2VzIG9ubHkgKi8KKyNkZWZpbmUgQ0hBTlNfUEVSX1BPUlQgICA4CisjZGVmaW5lIFBPUlRTX1BFUl9BU0lDICAgNgorI2RlZmluZSBJTlRSX1BPUlRTX1BFUl9BU0lDICAgMworI2RlZmluZSBNQVhfQ0hBTlNfUEVSX1NVQkRFViAyNAkvKiBudW1iZXIgb2YgY2hhbm5lbHMgcGVyIGNvbWVkaSBzdWJkZXZpY2UgKi8KKyNkZWZpbmUgUE9SVFNfUEVSX1NVQkRFViAoTUFYX0NIQU5TX1BFUl9TVUJERVYvQ0hBTlNfUEVSX1BPUlQpCisjZGVmaW5lIENIQU5TX1BFUl9BU0lDIChDSEFOU19QRVJfUE9SVCpQT1JUU19QRVJfQVNJQykKKyNkZWZpbmUgSU5UUl9DSEFOU19QRVJfQVNJQyAyNAorI2RlZmluZSBJTlRSX1BPUlRTX1BFUl9TVUJERVYgKElOVFJfQ0hBTlNfUEVSX0FTSUMvQ0hBTlNfUEVSX1BPUlQpCisjZGVmaW5lIE1BWF9ESU9fQ0hBTlMgICAoUE9SVFNfUEVSX0FTSUMqMSpDSEFOU19QRVJfUE9SVCkKKyNkZWZpbmUgTUFYX0FTSUNTICAgICAgIChNQVhfRElPX0NIQU5TL0NIQU5TX1BFUl9BU0lDKQorI2RlZmluZSBTREVWX05PICgoaW50KShzIC0gZGV2LT5zdWJkZXZpY2VzKSkKKyNkZWZpbmUgQ0FMQ19OX0RJT19TVUJERVZTKG5jaGFucykgKChuY2hhbnMpL01BWF9DSEFOU19QRVJfU1VCREVWICsgKCEhKChuY2hhbnMpJU1BWF9DSEFOU19QRVJfU1VCREVWKSkgLyorIChuY2hhbnMgPiBJTlRSX0NIQU5TX1BFUl9BU0lDID8gMiA6IDEpKi8pCisvKiBJTyBNZW1vcnkgc2l6ZXMgKi8KKyNkZWZpbmUgQVNJQ19JT1NJWkUgKDB4MEIpCisjZGVmaW5lIFBDTU1JTzQ4X0lPU0laRSBBU0lDX0lPU0laRQorCisvKiBTb21lIG9mZnNldHMgLSB0aGVzZSBhcmUgYWxsIGluIHRoZSAxNmJ5dGUgSU8gbWVtb3J5IG9mZnNldCBmcm9tCisgICB0aGUgYmFzZSBhZGRyZXNzLiAgTm90ZSB0aGF0IHRoZXJlIGlzIGEgcGFnaW5nIHNjaGVtZSB0byBzd2FwIG91dAorICAgb2Zmc2V0cyAweDgtMHhBIHVzaW5nIHRoZSBQQUdFTE9DSyByZWdpc3Rlci4gIFNlZSB0aGUgdGFibGUgYmVsb3cuCisKKyAgUmVnaXN0ZXIocykgICAgICAgUGFnZXMgICAgICAgIFIvVz8gICAgICAgIERlc2NyaXB0aW9uCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJFR19QT1JUeCAgICAgICAgIEFsbCAgICAgICAgICBSL1cgICAgICAgICBSZWFkL1dyaXRlL0NvbmZpZ3VyZSBJTworICBSRUdfSU5UX1BFTkRJTkcgICBBbGwgICAgICAgICAgUmVhZE9ubHkgICAgUXVpY2tseSBzZWUgd2hpY2ggSU5UX0lEeCBoYXMgaW50LgorICBSRUdfUEFHRUxPQ0sgICAgICBBbGwgICAgICAgICAgV3JpdGVPbmx5ICAgU2VsZWN0IGEgcGFnZQorICBSRUdfUE9MeCAgICAgICAgICBQZy4gMSBvbmx5ICAgV3JpdGVPbmx5ICAgU2VsZWN0IGVkZ2UtZGV0ZWN0aW9uIHBvbGFyaXR5CisgIFJFR19FTkFCeCAgICAgICAgIFBnLiAyIG9ubHkgICBXcml0ZU9ubHkgICBFbmFibGUvRGlzYWJsZSBlZGdlLWRldGVjdC4gaW50LgorICBSRUdfSU5UX0lEeCAgICAgICBQZy4gMyBvbmx5ICAgUi9XICAgICAgICAgU2VlIHdoaWNoIHBvcnRzL2JpdHMgaGF2ZSBpbnRzLgorICovCisjZGVmaW5lIFJFR19QT1JUMCAweDAKKyNkZWZpbmUgUkVHX1BPUlQxIDB4MQorI2RlZmluZSBSRUdfUE9SVDIgMHgyCisjZGVmaW5lIFJFR19QT1JUMyAweDMKKyNkZWZpbmUgUkVHX1BPUlQ0IDB4NAorI2RlZmluZSBSRUdfUE9SVDUgMHg1CisjZGVmaW5lIFJFR19JTlRfUEVORElORyAweDYKKyNkZWZpbmUgUkVHX1BBR0VMT0NLIDB4NwkvKiBwYWdlIHNlbGVjdG9yIHJlZ2lzdGVyLCB1cHBlciAyIGJpdHMgc2VsZWN0IGEgcGFnZQorCQkJCSAgIGFuZCBiaXRzIDAtNSBhcmUgdXNlZCB0byAnbG9jayBkb3duJyBhIHBhcnRpY3VsYXIKKwkJCQkgICBwb3J0IGFib3ZlIHRvIG1ha2UgaXQgcmVhZG9ubHkuICAqLworI2RlZmluZSBSRUdfUE9MMCAweDgKKyNkZWZpbmUgUkVHX1BPTDEgMHg5CisjZGVmaW5lIFJFR19QT0wyIDB4QQorI2RlZmluZSBSRUdfRU5BQjAgMHg4CisjZGVmaW5lIFJFR19FTkFCMSAweDkKKyNkZWZpbmUgUkVHX0VOQUIyIDB4QQorI2RlZmluZSBSRUdfSU5UX0lEMCAweDgKKyNkZWZpbmUgUkVHX0lOVF9JRDEgMHg5CisjZGVmaW5lIFJFR19JTlRfSUQyIDB4QQorCisjZGVmaW5lIE5VTV9QQUdFRF9SRUdTIDMKKyNkZWZpbmUgTlVNX1BBR0VTIDQKKyNkZWZpbmUgRklSU1RfUEFHRURfUkVHIDB4OAorI2RlZmluZSBSRUdfUEFHRV9CSVRPRkZTRVQgNgorI2RlZmluZSBSRUdfTE9DS19CSVRPRkZTRVQgMAorI2RlZmluZSBSRUdfUEFHRV9NQVNLICh+KCgweDE8PFJFR19QQUdFX0JJVE9GRlNFVCktMSkpCisjZGVmaW5lIFJFR19MT0NLX01BU0sgfihSRUdfUEFHRV9NQVNLKQorI2RlZmluZSBQQUdFX1BPTCAxCisjZGVmaW5lIFBBR0VfRU5BQiAyCisjZGVmaW5lIFBBR0VfSU5UX0lEIDMKKwordHlwZWRlZiBpbnQgKCpjb21lZGlfaW5zbl9mbl90KSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiwgdW5zaWduZWQgaW50ICopOworCitzdGF0aWMgaW50IGFpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCXVuc2lnbmVkIGludCAqKTsKK3N0YXRpYyBpbnQgYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9pbnNuICosCisJdW5zaWduZWQgaW50ICopOworc3RhdGljIGludCBhb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqLCBzdHJ1Y3QgY29tZWRpX2luc24gKiwKKwl1bnNpZ25lZCBpbnQgKik7CisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHR3byBpbWFnaW5hcnkgYm9hcmRzLiAgRGVzY3JpYmluZyB0aGUKKyAqIGJvYXJkcyBpbiB0aGlzIHdheSBpcyBvcHRpb25hbCwgYW5kIGNvbXBsZXRlbHkgZHJpdmVyLWRlcGVuZGVudC4KKyAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgorICovCitzdHJ1Y3QgcGNtbWlvX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGludCBkaW9fbnVtX2FzaWNzOworCWNvbnN0IGludCBkaW9fbnVtX3BvcnRzOworCWNvbnN0IGludCB0b3RhbF9pb3NpemU7CisJY29uc3QgaW50IGFpX2JpdHM7CisJY29uc3QgaW50IGFvX2JpdHM7CisJY29uc3QgaW50IG5fYWlfY2hhbnM7CisJY29uc3QgaW50IG5fYW9fY2hhbnM7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmFpX3JhbmdlX3RhYmxlLCAqYW9fcmFuZ2VfdGFibGU7CisJY29tZWRpX2luc25fZm5fdCBhaV9yaW5zbiwgYW9fcmluc24sIGFvX3dpbnNuOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlc19haSA9CisJeyA0LCB7UkFOR0UoLTUuLCA1LiksIFJBTkdFKC0xMC4sIDEwLiksIFJBTkdFKDAuLCA1LiksIFJBTkdFKDAuLAorCQkxMC4pfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlc19hbyA9CisJeyA2LCB7UkFOR0UoMC4sIDUuKSwgUkFOR0UoMC4sIDEwLiksIFJBTkdFKC01LiwgNS4pLCBSQU5HRSgtMTAuLCAxMC4pLAorCVJBTkdFKC0yLjUsIDIuNSksIFJBTkdFKC0yLjUsIDcuNSl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbW1pb19ib2FyZCBwY21taW9fYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY21taW8iLAorCSAgICAgIGRpb19udW1fYXNpY3M6MSwKKwkgICAgICBkaW9fbnVtX3BvcnRzOjYsCisJICAgICAgdG90YWxfaW9zaXplOjMyLAorCSAgICAgIGFpX2JpdHM6CTE2LAorCSAgICAgIGFvX2JpdHM6CTE2LAorCSAgICAgIG5fYWlfY2hhbnM6MTYsCisJICAgICAgbl9hb19jaGFuczo4LAorCSAgICAgIGFpX3JhbmdlX3RhYmxlOiZyYW5nZXNfYWksCisJICAgICAgYW9fcmFuZ2VfdGFibGU6JnJhbmdlc19hbywKKwkgICAgICBhaV9yaW5zbjphaV9yaW5zbiwKKwkgICAgICBhb19yaW5zbjphb19yaW5zbiwKKyAgICAgIGFvX3dpbnNuOmFvX3dpbnNufSwKK307CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHBjbW1pb19ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBzdWJkZXZpY2UuICAqLworc3RydWN0IHBjbW1pb19zdWJkZXZfcHJpdmF0ZSB7CisKKwl1bmlvbiB7CisJCS8qIGZvciBESU86IG1hcHBpbmcgb2YgaGFsZndvcmRzIChieXRlcykgaW4gcG9ydC9jaGFuYXJyYXkgdG8gaW9iYXNlICovCisJCXVuc2lnbmVkIGxvbmcgaW9iYXNlc1tQT1JUU19QRVJfU1VCREVWXTsKKworCQkvKiBmb3IgQUkvQU8gKi8KKwkJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CisJfTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisKKwkJCS8qIFRoZSBiZWxvdyBpcyBvbmx5IHVzZWQgZm9yIGludHIgc3ViZGV2aWNlcyAqLworCQkJc3RydWN0IHsKKwkJCQlpbnQgYXNpYzsJLyogaWYgbm9uLW5lZ2F0aXZlLCB0aGlzIHN1YmRldiBoYXMgYW4gaW50ZXJydXB0IGFzaWMgKi8KKwkJCQlpbnQgZmlyc3RfY2hhbjsJLyogaWYgbm9ubmVnYXRpdmUsIHRoZSBmaXJzdCBjaGFubmVsIGlkIGZvcgorCQkJCQkJICAgaW50ZXJydXB0cy4gKi8KKwkJCQlpbnQgbnVtX2FzaWNfY2hhbnM7CS8qIHRoZSBudW1iZXIgb2YgYXNpYyBjaGFubmVscyBpbiB0aGlzIHN1YmRldgorCQkJCQkJCSAgIHRoYXQgaGF2ZSBpbnRlcnJ1dHBzICovCisJCQkJaW50IGFzaWNfY2hhbjsJLyogaWYgbm9ubmVnYXRpdmUsIHRoZSBmaXJzdCBjaGFubmVsIGlkIHdpdGgKKwkJCQkJCSAgIHJlc3BlY3QgdG8gdGhlIGFzaWMgdGhhdCBoYXMgaW50ZXJydXB0cyAqLworCQkJCWludCBlbmFibGVkX21hc2s7CS8qIHN1YmRldi1yZWxhdGl2ZSBjaGFubmVsIG1hc2sgZm9yIGNoYW5uZWxzCisJCQkJCQkJICAgd2UgYXJlIGludGVyZXN0ZWQgaW4gKi8KKwkJCQlpbnQgYWN0aXZlOworCQkJCWludCBzdG9wX2NvdW50OworCQkJCWludCBjb250aW51b3VzOworCQkJCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CisJCQl9IGludHI7CisJCX0gZGlvOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgaW50IHNoYWRvd19zYW1wbGVzWzhdOwkvKiB0aGUgbGFzdCB1bnNpZ25lZCBpbnQgZGF0YSB3cml0dGVuICovCisJCX0gYW87CisJfTsKK307CisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIGhhcmR3YXJlIGRyaXZlci4gIElmCisgICBzZXZlcmFsIGhhcmR3YXJlIGRyaXZlcnMga2VlcCBzaW1pbGFyIGluZm9ybWF0aW9uIGluIHRoaXMgc3RydWN0dXJlLAorICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LiAgKi8KK3N0cnVjdCBwY21taW9fcHJpdmF0ZSB7CisJLyogc3R1ZmYgZm9yIERJTyAqLworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgcGFnZWxvY2s7CS8qIGN1cnJlbnQgcGFnZSBhbmQgbG9jayAqLworCQl1bnNpZ25lZCBjaGFyIHBvbFtOVU1fUEFHRURfUkVHU107CS8qIHNoYWRvdyBvZiBQT0x4IHJlZ2lzdGVycyAqLworCQl1bnNpZ25lZCBjaGFyIGVuYWJbTlVNX1BBR0VEX1JFR1NdOwkvKiBzaGFkb3cgb2YgRU5BQnggcmVnaXN0ZXJzICovCisJCWludCBudW07CisJCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCQl1bnNpZ25lZCBpbnQgaXJxOworCQlzcGlubG9ja190IHNwaW5sb2NrOworCX0gYXNpY3NbTUFYX0FTSUNTXTsKKwlzdHJ1Y3QgcGNtbWlvX3N1YmRldl9wcml2YXRlICpzcHJpdnM7Cit9OworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbW1pb19wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSBzdWJwcml2ICgoc3RydWN0IHBjbW1pb19zdWJkZXZfcHJpdmF0ZSAqKXMtPnByaXZhdGUpCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBwY21taW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNtbWlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXIgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNtbWlvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY21taW9fYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbW1pb19kZXRhY2gsCisvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaWYgeW91IGFyZQorICogd3JpdGluZyBhIGRyaXZlciBmb3IgYSBJU0EgUG5QIG9yIFBDSSBjYXJkICovCisJLyogTW9zdCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSB0eXBlcyBvZiBib2FyZHMgYnkKKwkgKiBoYXZpbmcgYW4gYXJyYXkgb2YgYm9hcmQgc3RydWN0dXJlcy4gIFRoZXNlIHdlcmUgZGVmaW5lZAorCSAqIGluIHBjbW1pb19ib2FyZHNbXSBhYm92ZS4gIE5vdGUgdGhhdCB0aGUgZWxlbWVudCAnbmFtZScKKwkgKiB3YXMgZmlyc3QgaW4gdGhlIHN0cnVjdHVyZSAtLSBDb21lZGkgdXNlcyB0aGlzIGZhY3QgdG8KKwkgKiBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZSBib2FyZCB3aXRob3V0IGtub3dpbmcgYW55IGRldGFpbHMKKwkgKiBhYm91dCB0aGUgc3RydWN0dXJlIGV4Y2VwdCBmb3IgaXRzIGxlbmd0aC4KKwkgKiBXaGVuIGEgZGV2aWNlIGlzIGF0dGFjaGVkIChieSBjb21lZGlfY29uZmlnKSwgdGhlIG5hbWUKKwkgKiBvZiB0aGUgZGV2aWNlIGlzIGdpdmVuIHRvIENvbWVkaSwgYW5kIENvbWVkaSB0cmllcyB0bworCSAqIG1hdGNoIGl0IGJ5IGdvaW5nIHRocm91Z2ggdGhlIGxpc3Qgb2YgYm9hcmQgbmFtZXMuICBJZgorCSAqIHRoZXJlIGlzIGEgbWF0Y2gsIHRoZSBhZGRyZXNzIG9mIHRoZSBwb2ludGVyIGlzIHB1dAorCSAqIGludG8gZGV2LT5ib2FyZF9wdHIgYW5kIGRyaXZlci0+YXR0YWNoKCkgaXMgY2FsbGVkLgorCSAqCisJICogTm90ZSB0aGF0IHRoZXNlIGFyZSBub3QgbmVjZXNzYXJ5IGlmIHlvdSBjYW4gZGV0ZXJtaW5lCisJICogdGhlIHR5cGUgb2YgYm9hcmQgaW4gc29mdHdhcmUuICBJU0EgUG5QLCBQQ0ksIGFuZCBQQ01DSUEKKwkgKiBkZXZpY2VzIGFyZSBzdWNoIGJvYXJkcy4KKwkgKi8KKyAgICAgIGJvYXJkX25hbWU6JnBjbW1pb19ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbW1pb19ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHBjbW1pb19ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBwY21taW9fYm9hcmQpLAorfTsKKworc3RhdGljIGludCBwY21taW9fZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBwY21taW9fZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNtbWlvKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIHZvaWQgcGNtbWlvX3N0b3BfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqKTsKK3N0YXRpYyBpbnQgcGNtbWlvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgcGNtbWlvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgcGNtbWlvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CisKKy8qIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggc3BlY2lmaWNzIG9mIHRoaXMgZGV2aWNlJ3MgcmVnaXN0ZXJzICovCitzdGF0aWMgdm9pZCBpbml0X2FzaWNzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsJLyogc2V0cyB1cC9jbGVhcnMgQVNJQyBjaGlwcyB0byBkZWZhdWx0cyAqLworc3RhdGljIHZvaWQgc3dpdGNoX3BhZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhc2ljLCBpbnQgcGFnZSk7CisjaWZkZWYgbm90dXNlZAorc3RhdGljIHZvaWQgbG9ja19wb3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBvcnQpOworc3RhdGljIHZvaWQgdW5sb2NrX3BvcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhc2ljLCBpbnQgcG9ydCk7CisjZW5kaWYKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjbW1pb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHNkZXZfbm8sIGNoYW5zX2xlZnQsIG5fZGlvX3N1YmRldnMsIG5fc3ViZGV2cywgcG9ydCwgYXNpYywKKwkJdGhpc2FzaWNfY2hhbmN0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaXJxW01BWF9BU0lDU107CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpcnFbMF0gPSBpdC0+b3B0aW9uc1sxXTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzOiBpbzogJWx4ICIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSwKKwkJaW9iYXNlKTsKKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJaWYgKCFpb2Jhc2UgfHwgIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwKKwkJCXRoaXNib2FyZC0+dG90YWxfaW9zaXplLCBkcml2ZXIuZHJpdmVyX25hbWUpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4gIE5vdGUgdGhhdCB3ZSBjYW4gdXNlIHRoZSAidGhpc2JvYXJkIgorICogbWFjcm8gbm93LCBzaW5jZSB3ZSBqdXN0IGluaXRpYWxpemVkIGl0IGluIHRoZSBsYXN0IGxpbmUuCisgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNtbWlvX3ByaXZhdGUpKSA8IDApIHsKKwkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoYXNpYyA9IDA7IGFzaWMgPCBNQVhfQVNJQ1M7ICsrYXNpYykgeworCQlkZXZwcml2LT5hc2ljc1thc2ljXS5udW0gPSBhc2ljOworCQlkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2UgPQorCQkJZGV2LT5pb2Jhc2UgKyAxNiArIGFzaWMgKiBBU0lDX0lPU0laRTsKKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaXJxID0gMDsJLyogdGhpcyBnZXRzIGFjdHVhbGx5IHNldCBhdCB0aGUgZW5kIG9mCisJCQkJCQkgICB0aGlzIGZ1bmN0aW9uIHdoZW4gd2UKKwkJCQkJCSAgIGNvbWVkaV9yZXF1ZXN0X2lycXMgKi8KKwkJc3Bpbl9sb2NrX2luaXQoJmRldnByaXYtPmFzaWNzW2FzaWNdLnNwaW5sb2NrKTsKKwl9CisKKwljaGFuc19sZWZ0ID0gQ0hBTlNfUEVSX0FTSUMgKiB0aGlzYm9hcmQtPmRpb19udW1fYXNpY3M7CisJbl9kaW9fc3ViZGV2cyA9IENBTENfTl9ESU9fU1VCREVWUyhjaGFuc19sZWZ0KTsKKwluX3N1YmRldnMgPSBuX2Rpb19zdWJkZXZzICsgMjsKKwlkZXZwcml2LT5zcHJpdnMgPQorCQlrY2FsbG9jKG5fc3ViZGV2cywgc2l6ZW9mKHN0cnVjdCBwY21taW9fc3ViZGV2X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldnByaXYtPnNwcml2cykgeworCQlwcmludGsoImNhbm5vdCBhbGxvY2F0ZSBzdWJkZXZpY2UgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisJICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorCSAqCisJICogQWxsb2NhdGUgMSBBSSArIDEgQU8gKyAyIERJTyBzdWJkZXZzICgyNCBsaW5lcyBwZXIgRElPKQorCSAqLworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgbl9zdWJkZXZzKSA8IDApIHsKKwkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgc3ViZGV2aWNlIGRhdGEgc3RydWN0dXJlc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEZpcnN0LCBBSSAqLworCXNkZXZfbm8gPSAwOworCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzZGV2X25vOworCXMtPnByaXZhdGUgPSBkZXZwcml2LT5zcHJpdnMgKyBzZGV2X25vOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNib2FyZC0+YWlfcmFuZ2VfdGFibGU7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9ESUZGOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BSTsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPm5fYWlfY2hhbnM7CisJcy0+bGVuX2NoYW5saXN0ID0gcy0+bl9jaGFuOworCXMtPmluc25fcmVhZCA9IHRoaXNib2FyZC0+YWlfcmluc247CisJc3VicHJpdi0+aW9iYXNlID0gZGV2LT5pb2Jhc2UgKyAwOworCS8qIGluaXRpYWxpemUgdGhlIHJlc291cmNlIGVuYWJsZSByZWdpc3RlciBieSBjbGVhcmluZyBpdCAqLworCW91dGIoMCwgc3VicHJpdi0+aW9iYXNlICsgMyk7CisJb3V0YigwLCBzdWJwcml2LT5pb2Jhc2UgKyA0ICsgMyk7CisKKwkvKiBOZXh0LCBBTyAqLworCSsrc2Rldl9ubzsKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgc2Rldl9ubzsKKwlzLT5wcml2YXRlID0gZGV2cHJpdi0+c3ByaXZzICsgc2Rldl9ubzsKKwlzLT5tYXhkYXRhID0gKDEgPDwgdGhpc2JvYXJkLT5hb19iaXRzKSAtIDE7CisJcy0+cmFuZ2VfdGFibGUgPSB0aGlzYm9hcmQtPmFvX3JhbmdlX3RhYmxlOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRTsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+bl9jaGFuID0gdGhpc2JvYXJkLT5uX2FvX2NoYW5zOworCXMtPmxlbl9jaGFubGlzdCA9IHMtPm5fY2hhbjsKKwlzLT5pbnNuX3JlYWQgPSB0aGlzYm9hcmQtPmFvX3JpbnNuOworCXMtPmluc25fd3JpdGUgPSB0aGlzYm9hcmQtPmFvX3dpbnNuOworCXN1YnByaXYtPmlvYmFzZSA9IGRldi0+aW9iYXNlICsgODsKKwkvKiBpbml0aWFsaXplIHRoZSByZXNvdXJjZSBlbmFibGUgcmVnaXN0ZXIgYnkgY2xlYXJpbmcgaXQgKi8KKwlvdXRiKDAsIHN1YnByaXYtPmlvYmFzZSArIDMpOworCW91dGIoMCwgc3VicHJpdi0+aW9iYXNlICsgNCArIDMpOworCisJKytzZGV2X25vOworCXBvcnQgPSAwOworCWFzaWMgPSAwOworCWZvciAoOyBzZGV2X25vIDwgKGludClkZXYtPm5fc3ViZGV2aWNlczsgKytzZGV2X25vKSB7CisJCWludCBieXRlX25vOworCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzZGV2X25vOworCQlzLT5wcml2YXRlID0gZGV2cHJpdi0+c3ByaXZzICsgc2Rldl9ubzsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwkJcy0+aW5zbl9iaXRzID0gcGNtbWlvX2Rpb19pbnNuX2JpdHM7CisJCXMtPmluc25fY29uZmlnID0gcGNtbWlvX2Rpb19pbnNuX2NvbmZpZzsKKwkJcy0+bl9jaGFuID0gTUlOKGNoYW5zX2xlZnQsIE1BWF9DSEFOU19QRVJfU1VCREVWKTsKKwkJc3VicHJpdi0+ZGlvLmludHIuYXNpYyA9IC0xOworCQlzdWJwcml2LT5kaW8uaW50ci5maXJzdF9jaGFuID0gLTE7CisJCXN1YnByaXYtPmRpby5pbnRyLmFzaWNfY2hhbiA9IC0xOworCQlzdWJwcml2LT5kaW8uaW50ci5udW1fYXNpY19jaGFucyA9IC0xOworCQlzdWJwcml2LT5kaW8uaW50ci5hY3RpdmUgPSAwOworCQlzLT5sZW5fY2hhbmxpc3QgPSAxOworCisJCS8qIHNhdmUgdGhlIGlvcG9ydCBhZGRyZXNzIGZvciBlYWNoICdwb3J0JyBvZiA4IGNoYW5uZWxzIGluIHRoZQorCQkgICBzdWJkZXZpY2UgKi8KKwkJZm9yIChieXRlX25vID0gMDsgYnl0ZV9ubyA8IFBPUlRTX1BFUl9TVUJERVY7ICsrYnl0ZV9ubywgKytwb3J0KSB7CisJCQlpZiAocG9ydCA+PSBQT1JUU19QRVJfQVNJQykgeworCQkJCXBvcnQgPSAwOworCQkJCSsrYXNpYzsKKwkJCQl0aGlzYXNpY19jaGFuY3QgPSAwOworCQkJfQorCQkJc3VicHJpdi0+aW9iYXNlc1tieXRlX25vXSA9CisJCQkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlICsgcG9ydDsKKworCQkJaWYgKHRoaXNhc2ljX2NoYW5jdCA8CisJCQkJQ0hBTlNfUEVSX1BPUlQgKiBJTlRSX1BPUlRTX1BFUl9BU0lDCisJCQkJJiYgc3VicHJpdi0+ZGlvLmludHIuYXNpYyA8IDApIHsKKwkJCQkvKiB0aGlzIGlzIGFuIGludGVycnVwdCBzdWJkZXZpY2UsIHNvIHNldHVwIHRoZSBzdHJ1Y3QgKi8KKwkJCQlzdWJwcml2LT5kaW8uaW50ci5hc2ljID0gYXNpYzsKKwkJCQlzdWJwcml2LT5kaW8uaW50ci5hY3RpdmUgPSAwOworCQkJCXN1YnByaXYtPmRpby5pbnRyLnN0b3BfY291bnQgPSAwOworCQkJCXN1YnByaXYtPmRpby5pbnRyLmZpcnN0X2NoYW4gPSBieXRlX25vICogODsKKwkJCQlzdWJwcml2LT5kaW8uaW50ci5hc2ljX2NoYW4gPSB0aGlzYXNpY19jaGFuY3Q7CisJCQkJc3VicHJpdi0+ZGlvLmludHIubnVtX2FzaWNfY2hhbnMgPQorCQkJCQlzLT5uX2NoYW4gLQorCQkJCQlzdWJwcml2LT5kaW8uaW50ci5maXJzdF9jaGFuOworCQkJCXMtPmNhbmNlbCA9IHBjbW1pb19jYW5jZWw7CisJCQkJcy0+ZG9fY21kID0gcGNtbWlvX2NtZDsKKwkJCQlzLT5kb19jbWR0ZXN0ID0gcGNtbWlvX2NtZHRlc3Q7CisJCQkJcy0+bGVuX2NoYW5saXN0ID0KKwkJCQkJc3VicHJpdi0+ZGlvLmludHIubnVtX2FzaWNfY2hhbnM7CisJCQl9CisJCQl0aGlzYXNpY19jaGFuY3QgKz0gQ0hBTlNfUEVSX1BPUlQ7CisJCX0KKwkJc3Bpbl9sb2NrX2luaXQoJnN1YnByaXYtPmRpby5pbnRyLnNwaW5sb2NrKTsKKworCQljaGFuc19sZWZ0IC09IHMtPm5fY2hhbjsKKworCQlpZiAoIWNoYW5zX2xlZnQpIHsKKwkJCWFzaWMgPSAwOwkvKiByZXNldCB0aGUgYXNpYyB0byBvdXIgZmlyc3QgYXNpYywgdG8gZG8gaW50ciBzdWJkZXZzICovCisJCQlwb3J0ID0gMDsKKwkJfQorCisJfQorCisJaW5pdF9hc2ljcyhkZXYpOwkvKiBjbGVhciBvdXQgYWxsIHRoZSByZWdpc3RlcnMsIGJhc2ljYWxseSAqLworCisJZm9yIChhc2ljID0gMDsgaXJxWzBdICYmIGFzaWMgPCBNQVhfQVNJQ1M7ICsrYXNpYykgeworCQlpZiAoaXJxW2FzaWNdCisJCQkmJiBjb21lZGlfcmVxdWVzdF9pcnEoaXJxW2FzaWNdLCBpbnRlcnJ1cHRfcGNtbWlvLAorCQkJCUlSUUZfU0hBUkVELCB0aGlzYm9hcmQtPm5hbWUsIGRldikpIHsKKwkJCWludCBpOworCQkJLyogdW5yb2xsIHRoZSBhbGxvY2F0ZWQgaXJxcy4uICovCisJCQlmb3IgKGkgPSBhc2ljIC0gMTsgaSA+PSAwOyAtLWkpIHsKKwkJCQljb21lZGlfZnJlZV9pcnEoaXJxW2ldLCBkZXYpOworCQkJCWRldnByaXYtPmFzaWNzW2ldLmlycSA9IGlycVtpXSA9IDA7CisJCQl9CisJCQlpcnFbYXNpY10gPSAwOworCQl9CisJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlycSA9IGlycVthc2ljXTsKKwl9CisKKwlkZXYtPmlycSA9IGlycVswXTsJLyogZ3JyLi4gd2lzaCBjb21lZGkgZGV2IHN0cnVjdCBzdXBwb3J0ZWQgbXVsdGlwbGUKKwkJCQkgICBpcnFzLi4gKi8KKworCWlmIChpcnFbMF0pIHsKKwkJcHJpbnRrKCJpcnE6ICV1ICIsIGlycVswXSk7CisJCWlmIChpcnFbMV0gJiYgdGhpc2JvYXJkLT5kaW9fbnVtX2FzaWNzID09IDIpCisJCQlwcmludGsoInNlY29uZCBBU0lDIGlycTogJXUgIiwgaXJxWzFdKTsKKwl9IGVsc2UgeworCQlwcmludGsoIihJUlEgbW9kZSBkaXNhYmxlZCkgIik7CisJfQorCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBwY21taW9fZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpOworCisJcHJpbnRrKCJjb21lZGklZDogJXM6IHJlbW92ZVxuIiwgZGV2LT5taW5vciwgZHJpdmVyLmRyaXZlcl9uYW1lKTsKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCB0aGlzYm9hcmQtPnRvdGFsX2lvc2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0FTSUNTOyArK2kpIHsKKwkJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+YXNpY3NbaV0uaXJxKQorCQkJY29tZWRpX2ZyZWVfaXJxKGRldnByaXYtPmFzaWNzW2ldLmlycSwgZGV2KTsKKwl9CisKKwlpZiAoZGV2cHJpdiAmJiBkZXZwcml2LT5zcHJpdnMpCisJCWtmcmVlKGRldnByaXYtPnNwcml2cyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogRElPIGRldmljZXMgYXJlIHNsaWdodGx5IHNwZWNpYWwuICBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0bworICogaW1wbGVtZW50IHRoZSBpbnNuX3JlYWQvaW5zbl93cml0ZSBpbnRlcmZhY2UsIGl0IGlzIG11Y2ggbW9yZQorICogdXNlZnVsIHRvIGFwcGxpY2F0aW9ucyBpZiB5b3UgaW1wbGVtZW50IHRoZSBpbnNuX2JpdHMgaW50ZXJmYWNlLgorICogVGhpcyBhbGxvd3MgcGFja2VkIHJlYWRpbmcvd3JpdGluZyBvZiB0aGUgRElPIGNoYW5uZWxzLiAgVGhlCisgKiBjb21lZGkgY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlICovCitzdGF0aWMgaW50IHBjbW1pb19kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgYnl0ZV9ubzsKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIE5PVEU6CisJICAgcmVhZGluZyBhIDAgbWVhbnMgdGhpcyBjaGFubmVsIHdhcyBoaWdoCisJICAgd3JpdGluZSBhIDAgc2V0cyB0aGUgY2hhbm5lbCBoaWdoCisJICAgcmVhZGluZyBhIDEgbWVhbnMgdGhpcyBjaGFubmVsIHdhcyBsb3cKKwkgICB3cml0aW5nIGEgMSBtZWFucyBzZXQgdGhpcyBjaGFubmVsIGxvdworCisJICAgVGhlcmVmb3JlIGV2ZXJ5dGhpbmcgaXMgYWx3YXlzIGludmVydGVkLiAqLworCisJLyogVGhlIGluc24gZGF0YSBpcyBhIG1hc2sgaW4gZGF0YVswXSBhbmQgdGhlIG5ldyBkYXRhCisJICogaW4gZGF0YVsxXSwgZWFjaCBjaGFubmVsIGNvb3Jlc3BvbmRpbmcgdG8gYSBiaXQuICovCisKKyNpZmRlZiBEQU1NSVRfSVRTX0JST0tFTgorCS8qIERFQlVHICovCisJcHJpbnRrKCJ3cml0ZSBtYXNrOiAlMDh4ICBkYXRhOiAlMDh4XG4iLCBkYXRhWzBdLCBkYXRhWzFdKTsKKyNlbmRpZgorCisJcy0+c3RhdGUgPSAwOworCisJZm9yIChieXRlX25vID0gMDsgYnl0ZV9ubyA8IHMtPm5fY2hhbiAvIENIQU5TX1BFUl9QT1JUOyArK2J5dGVfbm8pIHsKKwkJLyogYWRkcmVzcyBvZiA4LWJpdCBwb3J0ICovCisJCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gc3VicHJpdi0+aW9iYXNlc1tieXRlX25vXSwKKwkJCS8qIGJpdCBvZmZzZXQgb2YgcG9ydCBpbiAzMi1iaXQgZG91Ymxld29yZCAqLworCQkJb2Zmc2V0ID0gYnl0ZV9ubyAqIDg7CisJCS8qIHRoaXMgOC1iaXQgcG9ydCdzIGRhdGEgKi8KKwkJdW5zaWduZWQgY2hhciBieXRlID0gMCwKKwkJCS8qIFRoZSB3cml0ZSBtYXNrIGZvciB0aGlzIHBvcnQgKGlmIGFueSkgKi8KKwkJCXdyaXRlX21hc2tfYnl0ZSA9IChkYXRhWzBdID4+IG9mZnNldCkgJiAweGZmLAorCQkJLyogVGhlIGRhdGEgYnl0ZSBmb3IgdGhpcyBwb3J0ICovCisJCQlkYXRhX2J5dGUgPSAoZGF0YVsxXSA+PiBvZmZzZXQpICYgMHhmZjsKKworCQlieXRlID0gaW5iKGlvYWRkcik7CS8qIHJlYWQgYWxsIDgtYml0cyBmb3IgdGhpcyBwb3J0ICovCisKKyNpZmRlZiBEQU1NSVRfSVRTX0JST0tFTgorCQkvKiBERUJVRyAqLworCQlwcmludGsoImJ5dGUgJWQgd21iICUwMnggZGIgJTAyeCBvZmZzZXQgJTAyZCBpbyAlMDR4LCBkYXRhX2luICUwMnggIiwgYnl0ZV9ubywgKHVuc2lnbmVkKXdyaXRlX21hc2tfYnl0ZSwgKHVuc2lnbmVkKWRhdGFfYnl0ZSwgb2Zmc2V0LCBpb2FkZHIsICh1bnNpZ25lZClieXRlKTsKKyNlbmRpZgorCisJCWlmICh3cml0ZV9tYXNrX2J5dGUpIHsKKwkJCS8qIHRoaXMgYnl0ZSBoYXMgc29tZSB3cml0ZV9iaXRzIC0tIHNvIHNldCB0aGUgb3V0cHV0IGxpbmVzICovCisJCQlieXRlICY9IH53cml0ZV9tYXNrX2J5dGU7CS8qIGNsZWFyIGJpdHMgZm9yIHdyaXRlIG1hc2sgKi8KKwkJCWJ5dGUgfD0gfmRhdGFfYnl0ZSAmIHdyaXRlX21hc2tfYnl0ZTsJLyogc2V0IHRvIGludmVydGVkIGRhdGFfYnl0ZSAqLworCQkJLyogV3JpdGUgb3V0IHRoZSBuZXcgZGlnaXRhbCBvdXRwdXQgc3RhdGUgKi8KKwkJCW91dGIoYnl0ZSwgaW9hZGRyKTsKKwkJfQorI2lmZGVmIERBTU1JVF9JVFNfQlJPS0VOCisJCS8qIERFQlVHICovCisJCXByaW50aygiZGF0YV9vdXRfYnl0ZSAlMDJ4XG4iLCAodW5zaWduZWQpYnl0ZSk7CisjZW5kaWYKKwkJLyogc2F2ZSB0aGUgZGlnaXRhbCBpbnB1dCBsaW5lcyBmb3IgdGhpcyBieXRlLi4gKi8KKwkJcy0+c3RhdGUgfD0gKCh1bnNpZ25lZCBpbnQpYnl0ZSkgPDwgb2Zmc2V0OworCX0KKworCS8qIG5vdyByZXR1cm4gdGhlIERJTyBsaW5lcyB0byBkYXRhWzFdIC0gbm90ZSB0aGV5IGNhbWUgaW52ZXJ0ZWQhICovCisJZGF0YVsxXSA9IH5zLT5zdGF0ZTsKKworI2lmZGVmIERBTU1JVF9JVFNfQlJPS0VOCisJLyogREVCVUcgKi8KKwlwcmludGsoInMtPnN0YXRlICUwOHggZGF0YV9vdXQgJTA4eFxuIiwgcy0+c3RhdGUsIGRhdGFbMV0pOworI2VuZGlmCisKKwlyZXR1cm4gMjsKK30KKworLyogVGhlIGlucHV0IG9yIG91dHB1dCBjb25maWd1cmF0aW9uIG9mIGVhY2ggZGlnaXRhbCBsaW5lIGlzCisgKiBjb25maWd1cmVkIGJ5IGEgc3BlY2lhbCBpbnNuX2NvbmZpZyBpbnN0cnVjdGlvbi4gIGNoYW5zcGVjCisgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKKyAqIHZhbHVlIENPTUVESV9JTlBVVCBvciBDT01FRElfT1VUUFVULiAqLworc3RhdGljIGludCBwY21taW9fZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpLCBieXRlX25vID0gY2hhbiAvIDgsIGJpdF9ubyA9CisJCWNoYW4gJSA4OworCXVuc2lnbmVkIGxvbmcgaW9hZGRyOworCXVuc2lnbmVkIGNoYXIgYnl0ZTsKKworCS8qIENvbXB1dGUgaW9hZGRyIGZvciB0aGlzIGNoYW5uZWwgKi8KKwlpb2FkZHIgPSBzdWJwcml2LT5pb2Jhc2VzW2J5dGVfbm9dOworCisJLyogTk9URToKKwkgICB3cml0aW5nIGEgMCBhbiBJTyBjaGFubmVsJ3MgYml0IHNldHMgdGhlIGNoYW5uZWwgdG8gSU5QVVQKKwkgICBhbmQgcHVsbHMgdGhlIGxpbmUgaGlnaCBhcyB3ZWxsCisKKwkgICB3cml0aW5nIGEgMSB0byBhbiBJTyBjaGFubmVsJ3MgIGJpdCBwdWxscyB0aGUgbGluZSBsb3cKKworCSAgIEFsbCBjaGFubmVscyBhcmUgaW1wbGljaXRseSBhbHdheXMgaW4gT1VUUFVUIG1vZGUgLS0gYnV0IHdoZW4KKwkgICB0aGV5IGFyZSBoaWdoIHRoZXkgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgaW4gSU5QVVQgbW9kZS4uCisKKwkgICBUaHVzLCB3ZSBvbmx5IGZvcmNlIGNoYW5uZWxzIGxvdyBpZiB0aGUgY29uZmlnIHJlcXVlc3Qgd2FzIElOUFVULAorCSAgIG90aGVyd2lzZSB3ZSBkbyBub3RoaW5nIHRvIHRoZSBoYXJkd2FyZS4gICAgKi8KKworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJLyogc2F2ZSB0byBpb19iaXRzIC0tIGRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIHNpbmNlCisJCSAgIGFsbCBpbnB1dCBjaGFubmVscyBhcmUgYWxzbyBvdXRwdXQgY2hhbm5lbHMuLi4gKi8KKwkJcy0+aW9fYml0cyB8PSAxIDw8IGNoYW47CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQkvKiB3cml0ZSBhIDAgdG8gdGhlIGFjdHVhbCByZWdpc3RlciByZXByZXNlbnRpbmcgdGhlIGNoYW5uZWwKKwkJICAgdG8gc2V0IGl0IHRvICdpbnB1dCcuICAwIG1lYW5zICJmbG9hdCBoaWdoIi4gKi8KKwkJYnl0ZSA9IGluYihpb2FkZHIpOworCQlieXRlICY9IH4oMSA8PCBiaXRfbm8pOworCQkJCS8qKjwgc2V0IGlucHV0IGNoYW5uZWwgdG8gJzAnICovCisKKwkJLyogd3JpdGUgb3V0IGJ5dGUgLS0gdGhpcyBpcyB0aGUgb25seSB0aW1lIHdlIGFjdHVhbGx5IGFmZmVjdCB0aGUKKwkJICAgaGFyZHdhcmUgYXMgYWxsIGNoYW5uZWxzIGFyZSBpbXBsaWNpdGx5IG91dHB1dCAtLSBidXQgaW5wdXQKKwkJICAgY2hhbm5lbHMgYXJlIHNldCB0byBmbG9hdC1oaWdoICovCisJCW91dGIoYnl0ZSwgaW9hZGRyKTsKKworCQkvKiBzYXZlIHRvIGlvX2JpdHMgKi8KKwkJcy0+aW9fYml0cyAmPSB+KDEgPDwgY2hhbik7CisJCWJyZWFrOworCisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCS8qIHJldHJlaXZlIGZyb20gc2hhZG93IHJlZ2lzdGVyICovCisJCWRhdGFbMV0gPQorCQkJKHMtPgorCQkJaW9fYml0cyAmICgxIDw8IGNoYW4pKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworc3RhdGljIHZvaWQgaW5pdF9hc2ljcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sJCQkJLyogc2V0cyB1cCBhbgorCQkJCSAgIEFTSUMgY2hpcCB0byBkZWZhdWx0cyAqLworCWludCBhc2ljOworCisJZm9yIChhc2ljID0gMDsgYXNpYyA8IHRoaXNib2FyZC0+ZGlvX251bV9hc2ljczsgKythc2ljKSB7CisJCWludCBwb3J0LCBwYWdlOworCQl1bnNpZ25lZCBsb25nIGJhc2VhZGRyID0gZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlOworCisJCXN3aXRjaF9wYWdlKGRldiwgYXNpYywgMCk7CS8qIHN3aXRjaCBiYWNrIHRvIHBhZ2UgMCAqLworCisJCS8qIGZpcnN0LCBjbGVhciBhbGwgdGhlIERJTyBwb3J0IGJpdHMgKi8KKwkJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFBPUlRTX1BFUl9BU0lDOyArK3BvcnQpCisJCQlvdXRiKDAsIGJhc2VhZGRyICsgUkVHX1BPUlQwICsgcG9ydCk7CisKKwkJLyogTmV4dCwgY2xlYXIgYWxsIHRoZSBwYWdlZCByZWdpc3RlcnMgZm9yIGVhY2ggcGFnZSAqLworCQlmb3IgKHBhZ2UgPSAxOyBwYWdlIDwgTlVNX1BBR0VTOyArK3BhZ2UpIHsKKwkJCWludCByZWc7CisJCQkvKiBub3cgY2xlYXIgYWxsIHRoZSBwYWdlZCByZWdpc3RlcnMgKi8KKwkJCXN3aXRjaF9wYWdlKGRldiwgYXNpYywgcGFnZSk7CisJCQlmb3IgKHJlZyA9IEZJUlNUX1BBR0VEX1JFRzsKKwkJCQlyZWcgPCBGSVJTVF9QQUdFRF9SRUcgKyBOVU1fUEFHRURfUkVHUzsgKytyZWcpCisJCQkJb3V0YigwLCBiYXNlYWRkciArIHJlZyk7CisJCX0KKworCQkvKiBERUJVRyAgc2V0IHJpc2luZyBlZGdlIGludGVycnVwdHMgb24gcG9ydDAgb2YgYm90aCBhc2ljcyAqLworCQkvKnN3aXRjaF9wYWdlKGRldiwgYXNpYywgUEFHRV9QT0wpOworCQkgICBvdXRiKDB4ZmYsIGJhc2VhZGRyICsgUkVHX1BPTDApOworCQkgICBzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIFBBR0VfRU5BQik7CisJCSAgIG91dGIoMHhmZiwgYmFzZWFkZHIgKyBSRUdfRU5BQjApOyAqLworCQkvKiBFTkQgREVCVUcgKi8KKworCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIDApOwkvKiBzd2l0Y2ggYmFjayB0byBkZWZhdWx0IHBhZ2UgMCAqLworCisJfQorfQorCitzdGF0aWMgdm9pZCBzd2l0Y2hfcGFnZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFzaWMsIGludCBwYWdlKQoreworCWlmIChhc2ljIDwgMCB8fCBhc2ljID49IHRoaXNib2FyZC0+ZGlvX251bV9hc2ljcykKKwkJcmV0dXJuOwkJLyogcGFyYW5vaWEgKi8KKwlpZiAocGFnZSA8IDAgfHwgcGFnZSA+PSBOVU1fUEFHRVMpCisJCXJldHVybjsJCS8qIG1vcmUgcGFyYW5vaWEgKi8KKworCWRldnByaXYtPmFzaWNzW2FzaWNdLnBhZ2Vsb2NrICY9IH5SRUdfUEFHRV9NQVNLOworCWRldnByaXYtPmFzaWNzW2FzaWNdLnBhZ2Vsb2NrIHw9IHBhZ2UgPDwgUkVHX1BBR0VfQklUT0ZGU0VUOworCisJLyogbm93IHdyaXRlIG91dCB0aGUgc2hhZG93IHJlZ2lzdGVyICovCisJb3V0YihkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jaywKKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlICsgUkVHX1BBR0VMT0NLKTsKK30KKworI2lmZGVmIG5vdHVzZWQKK3N0YXRpYyB2b2lkIGxvY2tfcG9ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFzaWMsIGludCBwb3J0KQoreworCWlmIChhc2ljIDwgMCB8fCBhc2ljID49IHRoaXNib2FyZC0+ZGlvX251bV9hc2ljcykKKwkJcmV0dXJuOwkJLyogcGFyYW5vaWEgKi8KKwlpZiAocG9ydCA8IDAgfHwgcG9ydCA+PSBQT1JUU19QRVJfQVNJQykKKwkJcmV0dXJuOwkJLyogbW9yZSBwYXJhbm9pYSAqLworCisJZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2sgfD0gMHgxIDw8IHBvcnQ7CisJLyogbm93IHdyaXRlIG91dCB0aGUgc2hhZG93IHJlZ2lzdGVyICovCisJb3V0YihkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jaywKKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlICsgUkVHX1BBR0VMT0NLKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHVubG9ja19wb3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBvcnQpCit7CisJaWYgKGFzaWMgPCAwIHx8IGFzaWMgPj0gdGhpc2JvYXJkLT5kaW9fbnVtX2FzaWNzKQorCQlyZXR1cm47CQkvKiBwYXJhbm9pYSAqLworCWlmIChwb3J0IDwgMCB8fCBwb3J0ID49IFBPUlRTX1BFUl9BU0lDKQorCQlyZXR1cm47CQkvKiBtb3JlIHBhcmFub2lhICovCisJZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2sgJj0gfigweDEgPDwgcG9ydCkgfCBSRUdfTE9DS19NQVNLOworCS8qIG5vdyB3cml0ZSBvdXQgdGhlIHNoYWRvdyByZWdpc3RlciAqLworCW91dGIoZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2ssCisJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIFJFR19QQUdFTE9DSyk7Cit9CisjZW5kaWYgLyogbm90dXNlZCAqLworCitzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3BjbW1pbyhpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKQoreworCWludCBhc2ljLCBnb3QxID0gMDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisKKwlmb3IgKGFzaWMgPSAwOyBhc2ljIDwgTUFYX0FTSUNTOyArK2FzaWMpIHsKKwkJaWYgKGlycSA9PSBkZXZwcml2LT5hc2ljc1thc2ljXS5pcnEpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCQl1bnNpZ25lZCB0cmlnZ2VyZWQgPSAwOworCQkJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2U7CisJCQkvKiBpdCBpcyBhbiBpbnRlcnJ1cHQgZm9yIEFTSUMgI2FzaWMgKi8KKwkJCXVuc2lnbmVkIGNoYXIgaW50X3BlbmQ7CisKKwkJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2cHJpdi0+YXNpY3NbYXNpY10uc3BpbmxvY2ssCisJCQkJZmxhZ3MpOworCisJCQlpbnRfcGVuZCA9IGluYihpb2Jhc2UgKyBSRUdfSU5UX1BFTkRJTkcpICYgMHgwNzsKKworCQkJaWYgKGludF9wZW5kKSB7CisJCQkJaW50IHBvcnQ7CisJCQkJZm9yIChwb3J0ID0gMDsgcG9ydCA8IElOVFJfUE9SVFNfUEVSX0FTSUM7CisJCQkJCSsrcG9ydCkgeworCQkJCQlpZiAoaW50X3BlbmQgJiAoMHgxIDw8IHBvcnQpKSB7CisJCQkJCQl1bnNpZ25lZCBjaGFyCisJCQkJCQkJaW9fbGluZXNfd2l0aF9lZGdlcyA9IDA7CisJCQkJCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsCisJCQkJCQkJUEFHRV9JTlRfSUQpOworCQkJCQkJaW9fbGluZXNfd2l0aF9lZGdlcyA9CisJCQkJCQkJaW5iKGlvYmFzZSArCisJCQkJCQkJUkVHX0lOVF9JRDAgKyBwb3J0KTsKKworCQkJCQkJaWYgKGlvX2xpbmVzX3dpdGhfZWRnZXMpCisJCQkJCQkJLyogY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHQgKi8KKwkJCQkJCQlvdXRiKDAsIGlvYmFzZSArCisJCQkJCQkJCVJFR19JTlRfSUQwICsKKwkJCQkJCQkJcG9ydCk7CisKKwkJCQkJCXRyaWdnZXJlZCB8PQorCQkJCQkJCWlvX2xpbmVzX3dpdGhfZWRnZXMgPDwKKwkJCQkJCQlwb3J0ICogODsKKwkJCQkJfQorCQkJCX0KKworCQkJCSsrZ290MTsKKwkJCX0KKworCQkJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldnByaXYtPmFzaWNzW2FzaWNdLgorCQkJCXNwaW5sb2NrLCBmbGFncyk7CisKKwkJCWlmICh0cmlnZ2VyZWQpIHsKKwkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwkJCQkvKiBUT0RPIGhlcmU6IGRpc3BhdGNoIGlvIGxpbmVzIHRvIHN1YmRldnMgd2l0aCBjb21tYW5kcy4uICovCisJCQkJcHJpbnRrKCJQQ01NSU8gREVCVUc6IGdvdCBlZGdlIGRldGVjdCBpbnRlcnJ1cHQgJWQgYXNpYyAlZCB3aGljaF9jaGFuczogJTA2eFxuIiwgaXJxLCBhc2ljLCB0cmlnZ2VyZWQpOworCQkJCWZvciAocyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJCQkJCXMgPCBkZXYtPnN1YmRldmljZXMgKyBkZXYtPm5fc3ViZGV2aWNlczsKKwkJCQkJKytzKSB7CisJCQkJCWlmIChzdWJwcml2LT5kaW8uaW50ci5hc2ljID09IGFzaWMpIHsJLyogdGhpcyBpcyBhbiBpbnRlcnJ1cHQgc3ViZGV2LCBhbmQgaXQgbWF0Y2hlcyB0aGlzIGFzaWMhICovCisJCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJCQkJdW5zaWduZWQgb2xkZXZlbnRzOworCisJCQkJCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUKKwkJCQkJCQkoJnN1YnByaXYtPmRpby5pbnRyLgorCQkJCQkJCXNwaW5sb2NrLCBmbGFncyk7CisKKwkJCQkJCW9sZGV2ZW50cyA9IHMtPmFzeW5jLT5ldmVudHM7CisKKwkJCQkJCWlmIChzdWJwcml2LT5kaW8uaW50ci5hY3RpdmUpIHsKKwkJCQkJCQl1bnNpZ25lZCBteXRyaWcgPQorCQkJCQkJCQkoKHRyaWdnZXJlZCA+PgorCQkJCQkJCQkJc3VicHJpdi0+CisJCQkJCQkJCQlkaW8uCisJCQkJCQkJCQlpbnRyLgorCQkJCQkJCQkJYXNpY19jaGFuKQorCQkJCQkJCQkmICgoMHgxIDw8IHN1YnByaXYtPmRpby5pbnRyLm51bV9hc2ljX2NoYW5zKSAtIDEpKSA8PCBzdWJwcml2LT5kaW8uaW50ci5maXJzdF9jaGFuOworCQkJCQkJCWlmIChteXRyaWcgJiBzdWJwcml2LT4KKwkJCQkJCQkJZGlvLmludHIuCisJCQkJCQkJCWVuYWJsZWRfbWFzaykgeworCQkJCQkJCQl1bnNpZ25lZCBpbnQgdmFsID0KKwkJCQkJCQkJCTA7CisJCQkJCQkJCXVuc2lnbmVkIGludCBuLAorCQkJCQkJCQkJY2gsIGxlbjsKKworCQkJCQkJCQlsZW4gPSBzLT5hc3luYy0+CisJCQkJCQkJCQljbWQuCisJCQkJCQkJCQljaGFubGlzdF9sZW47CisJCQkJCQkJCWZvciAobiA9IDA7CisJCQkJCQkJCQluIDwgbGVuOworCQkJCQkJCQkJbisrKSB7CisJCQkJCQkJCQljaCA9IENSX0NIQU4ocy0+YXN5bmMtPmNtZC5jaGFubGlzdFtuXSk7CisJCQkJCQkJCQlpZiAobXl0cmlnICYgKDFVIDw8IGNoKSkgeworCQkJCQkJCQkJCXZhbCB8PSAoMVUgPDwgbik7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQkJLyogV3JpdGUgdGhlIHNjYW4gdG8gdGhlIGJ1ZmZlci4gKi8KKwkJCQkJCQkJaWYgKGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAoKHNob3J0ICopICYgdmFsKVswXSkKKwkJCQkJCQkJCSYmCisJCQkJCQkJCQljb21lZGlfYnVmX3B1dAorCQkJCQkJCQkJKHMtPmFzeW5jLCAoKHNob3J0ICopICYgdmFsKVsxXSkpIHsKKwkJCQkJCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gKENPTUVESV9DQl9CTE9DSyB8IENPTUVESV9DQl9FT1MpOworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJLyogT3ZlcmZsb3chIFN0b3AgYWNxdWlzaXRpb24hISAqLworCQkJCQkJCQkJLyogVE9ETzogU1RPUF9BQ1FVSVNJVElPTl9DQUxMX0hFUkUhISAqLworCQkJCQkJCQkJcGNtbWlvX3N0b3BfaW50cgorCQkJCQkJCQkJCShkZXYsCisJCQkJCQkJCQkJcyk7CisJCQkJCQkJCX0KKworCQkJCQkJCQkvKiBDaGVjayBmb3IgZW5kIG9mIGFjcXVpc2l0aW9uLiAqLworCQkJCQkJCQlpZiAoIXN1YnByaXYtPgorCQkJCQkJCQkJZGlvLgorCQkJCQkJCQkJaW50ci4KKwkJCQkJCQkJCWNvbnRpbnVvdXMpCisJCQkJCQkJCXsKKwkJCQkJCQkJCS8qIHN0b3Bfc3JjID09IFRSSUdfQ09VTlQgKi8KKwkJCQkJCQkJCWlmIChzdWJwcml2LT5kaW8uaW50ci5zdG9wX2NvdW50ID4gMCkgeworCQkJCQkJCQkJCXN1YnByaXYtPgorCQkJCQkJCQkJCQlkaW8uCisJCQkJCQkJCQkJCWludHIuCisJCQkJCQkJCQkJCXN0b3BfY291bnQtLTsKKwkJCQkJCQkJCQlpZiAoc3VicHJpdi0+ZGlvLmludHIuc3RvcF9jb3VudCA9PSAwKSB7CisJCQkJCQkJCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJCQkJCQkJCQkJLyogVE9ETzogU1RPUF9BQ1FVSVNJVElPTl9DQUxMX0hFUkUhISAqLworCQkJCQkJCQkJCQlwY21taW9fc3RvcF9pbnRyCisJCQkJCQkJCQkJCQkoZGV2LAorCQkJCQkJCQkJCQkJcyk7CisJCQkJCQkJCQkJfQorCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZQorCQkJCQkJCSgmc3VicHJpdi0+ZGlvLmludHIuCisJCQkJCQkJc3BpbmxvY2ssIGZsYWdzKTsKKworCQkJCQkJaWYgKG9sZGV2ZW50cyAhPQorCQkJCQkJCXMtPmFzeW5jLT5ldmVudHMpIHsKKwkJCQkJCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwkJCQkJCX0KKworCQkJCQl9CisKKwkJCQl9CisJCQl9CisKKwkJfQorCX0KKwlpZiAoIWdvdDEpCisJCXJldHVybiBJUlFfTk9ORTsJLyogaW50ZXJydXB0IGZyb20gb3RoZXIgc291cmNlICovCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBwY21taW9fc3RvcF9pbnRyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaW50IG5wb3J0cywgZmlyc3Rwb3J0LCBhc2ljLCBwb3J0OworCisJaWYgKChhc2ljID0gc3VicHJpdi0+ZGlvLmludHIuYXNpYykgPCAwKQorCQlyZXR1cm47CQkvKiBub3QgYW4gaW50ZXJydXB0IHN1YmRldiAqLworCisJc3VicHJpdi0+ZGlvLmludHIuZW5hYmxlZF9tYXNrID0gMDsKKwlzdWJwcml2LT5kaW8uaW50ci5hY3RpdmUgPSAwOworCXMtPmFzeW5jLT5pbnR0cmlnID0gMDsKKwlucG9ydHMgPSBzdWJwcml2LT5kaW8uaW50ci5udW1fYXNpY19jaGFucyAvIENIQU5TX1BFUl9QT1JUOworCWZpcnN0cG9ydCA9IHN1YnByaXYtPmRpby5pbnRyLmFzaWNfY2hhbiAvIENIQU5TX1BFUl9QT1JUOworCXN3aXRjaF9wYWdlKGRldiwgYXNpYywgUEFHRV9FTkFCKTsKKwlmb3IgKHBvcnQgPSBmaXJzdHBvcnQ7IHBvcnQgPCBmaXJzdHBvcnQgKyBucG9ydHM7ICsrcG9ydCkgeworCQkvKiBkaXNhYmxlIGFsbCBpbnRycyBmb3IgdGhpcyBzdWJkZXYuLiAqLworCQlvdXRiKDAsIGRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIFJFR19FTkFCMCArIHBvcnQpOworCX0KK30KKworc3RhdGljIGludCBwY21taW9fc3RhcnRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWlmICghc3VicHJpdi0+ZGlvLmludHIuY29udGludW91cyAmJiBzdWJwcml2LT5kaW8uaW50ci5zdG9wX2NvdW50ID09IDApIHsKKwkJLyogQW4gZW1wdHkgYWNxdWlzaXRpb24hICovCisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJc3VicHJpdi0+ZGlvLmludHIuYWN0aXZlID0gMDsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgYml0cyA9IDAsIHBvbF9iaXRzID0gMCwgbjsKKwkJaW50IG5wb3J0cywgZmlyc3Rwb3J0LCBhc2ljLCBwb3J0OworCQlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisKKwkJaWYgKChhc2ljID0gc3VicHJpdi0+ZGlvLmludHIuYXNpYykgPCAwKQorCQkJcmV0dXJuIDE7CS8qIG5vdCBhbiBpbnRlcnJ1cHQKKwkJCQkJICAgc3ViZGV2ICovCisJCXN1YnByaXYtPmRpby5pbnRyLmVuYWJsZWRfbWFzayA9IDA7CisJCXN1YnByaXYtPmRpby5pbnRyLmFjdGl2ZSA9IDE7CisJCW5wb3J0cyA9IHN1YnByaXYtPmRpby5pbnRyLm51bV9hc2ljX2NoYW5zIC8gQ0hBTlNfUEVSX1BPUlQ7CisJCWZpcnN0cG9ydCA9IHN1YnByaXYtPmRpby5pbnRyLmFzaWNfY2hhbiAvIENIQU5TX1BFUl9QT1JUOworCQlpZiAoY21kLT5jaGFubGlzdCkgeworCQkJZm9yIChuID0gMDsgbiA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBuKyspIHsKKwkJCQliaXRzIHw9ICgxVSA8PCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pKTsKKwkJCQlwb2xfYml0cyB8PSAoQ1JfQVJFRihjbWQtPmNoYW5saXN0W25dKQorCQkJCQl8fCBDUl9SQU5HRShjbWQtPmNoYW5saXN0W25dKSA/IDFVIDogMFUpCisJCQkJCTw8IENSX0NIQU4oY21kLT5jaGFubGlzdFtuXSk7CisJCQl9CisJCX0KKwkJYml0cyAmPSAoKDB4MSA8PCBzdWJwcml2LT5kaW8uaW50ci5udW1fYXNpY19jaGFucykgLQorCQkJMSkgPDwgc3VicHJpdi0+ZGlvLmludHIuZmlyc3RfY2hhbjsKKwkJc3VicHJpdi0+ZGlvLmludHIuZW5hYmxlZF9tYXNrID0gYml0czsKKworCQl7CQkvKiB0aGUgYmVsb3cgY29kZSBjb25maWd1cmVzIHRoZSBib2FyZCB0byB1c2UgYSBzcGVjaWZpYyBJUlEgZnJvbSAwLTE1LiAqLworCQkJdW5zaWduZWQgY2hhciBiOworCQkJLyogc2V0IHJlc291cmNlIGVuYWJsZSByZWdpc3RlciB0byBlbmFibGUgSVJRIG9wZXJhdGlvbiAqLworCQkJb3V0YigxIDw8IDQsIGRldi0+aW9iYXNlICsgMyk7CisJCQkvKiBzZXQgYml0cyAwLTMgb2YgYiB0byB0aGUgaXJxIG51bWJlciBmcm9tIDAtMTUgKi8KKwkJCWIgPSBkZXYtPmlycSAmICgoMSA8PCA0KSAtIDEpOworCQkJb3V0YihiLCBkZXYtPmlvYmFzZSArIDIpOworCQkJLyogZG9uZSwgd2UgdG9sZCB0aGUgYm9hcmQgd2hhdCBpcnEgdG8gdXNlICovCisJCX0KKworCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIFBBR0VfRU5BQik7CisJCWZvciAocG9ydCA9IGZpcnN0cG9ydDsgcG9ydCA8IGZpcnN0cG9ydCArIG5wb3J0czsgKytwb3J0KSB7CisJCQl1bnNpZ25lZCBlbmFiID0KKwkJCQliaXRzID4+IChzdWJwcml2LT5kaW8uaW50ci5maXJzdF9jaGFuICsgKHBvcnQgLQorCQkJCQlmaXJzdHBvcnQpICogOCkgJiAweGZmLCBwb2wgPQorCQkJCXBvbF9iaXRzID4+IChzdWJwcml2LT5kaW8uaW50ci5maXJzdF9jaGFuICsKKwkJCQkocG9ydCAtIGZpcnN0cG9ydCkgKiA4KSAmIDB4ZmY7CisJCQkvKiBzZXQgZW5hYiBpbnRycyBmb3IgdGhpcyBzdWJkZXYuLiAqLworCQkJb3V0YihlbmFiLAorCQkJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIFJFR19FTkFCMCArIHBvcnQpOworCQkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCBQQUdFX1BPTCk7CisJCQlvdXRiKHBvbCwKKwkJCQlkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2UgKyBSRUdfRU5BQjAgKyBwb3J0KTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwY21taW9fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZSgmc3VicHJpdi0+ZGlvLmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKwlpZiAoc3VicHJpdi0+ZGlvLmludHIuYWN0aXZlKQorCQlwY21taW9fc3RvcF9pbnRyKGRldiwgcyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPmRpby5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVybmFsIHRyaWdnZXIgZnVuY3Rpb24gdG8gc3RhcnQgYWNxdWlzaXRpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorcGNtbWlvX2ludHRyaWdfc3RhcnRfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXVuc2lnbmVkIGludCB0cmlnbnVtKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGV2ZW50ID0gMDsKKworCWlmICh0cmlnbnVtICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZzdWJwcml2LT5kaW8uaW50ci5zcGlubG9jaywgZmxhZ3MpOworCXMtPmFzeW5jLT5pbnR0cmlnID0gMDsKKwlpZiAoc3VicHJpdi0+ZGlvLmludHIuYWN0aXZlKSB7CisJCWV2ZW50ID0gcGNtbWlvX3N0YXJ0X2ludHIoZGV2LCBzKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPmRpby5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoZXZlbnQpIHsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiAnZG9fY21kJyBmdW5jdGlvbiBmb3IgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50IHBjbW1pb19jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXZlbnQgPSAwOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZzdWJwcml2LT5kaW8uaW50ci5zcGlubG9jaywgZmxhZ3MpOworCXN1YnByaXYtPmRpby5pbnRyLmFjdGl2ZSA9IDE7CisKKwkvKiBTZXQgdXAgZW5kIG9mIGFjcXVpc2l0aW9uLiAqLworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJc3VicHJpdi0+ZGlvLmludHIuY29udGludW91cyA9IDA7CisJCXN1YnByaXYtPmRpby5pbnRyLnN0b3BfY291bnQgPSBjbWQtPnN0b3BfYXJnOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUUklHX05PTkUgKi8KKwkJc3VicHJpdi0+ZGlvLmludHIuY29udGludW91cyA9IDE7CisJCXN1YnByaXYtPmRpby5pbnRyLnN0b3BfY291bnQgPSAwOworCQlicmVhazsKKwl9CisKKwkvKiBTZXQgdXAgc3RhcnQgb2YgYWNxdWlzaXRpb24uICovCisJc3dpdGNoIChjbWQtPnN0YXJ0X3NyYykgeworCWNhc2UgVFJJR19JTlQ6CisJCXMtPmFzeW5jLT5pbnR0cmlnID0gcGNtbWlvX2ludHRyaWdfc3RhcnRfaW50cjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVFJJR19OT1cgKi8KKwkJZXZlbnQgPSBwY21taW9fc3RhcnRfaW50cihkZXYsIHMpOworCQlicmVhazsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPmRpby5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoZXZlbnQpIHsKKwkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAnZG9fY21kdGVzdCcgZnVuY3Rpb24gZm9yIGFuICdJTlRFUlJVUFQnIHN1YmRldmljZS4KKyAqLworc3RhdGljIGludAorcGNtbWlvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IHRtcDsKKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSAoVFJJR19OT1cgfCBUUklHX0lOVCk7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPmNvbnZlcnRfc3JjIHx8IHRtcCAhPSBjbWQtPmNvbnZlcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9lbmRfc3JjOworCWNtZC0+c2Nhbl9lbmRfc3JjICY9IFRSSUdfQ09VTlQ7CisJaWYgKCFjbWQtPnNjYW5fZW5kX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2VuZF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zdG9wX3NyYzsKKwljbWQtPnN0b3Bfc3JjICY9IChUUklHX0NPVU5UIHwgVFJJR19OT05FKTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogdGhlc2UgdGVzdHMgYXJlIHRydWUgaWYgbW9yZSB0aGFuIG9uZSBfc3JjIGJpdCBpcyBzZXQgKi8KKwlpZiAoKGNtZC0+c3RhcnRfc3JjICYgKGNtZC0+c3RhcnRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zY2FuX2JlZ2luX3NyYyAmIChjbWQtPnNjYW5fYmVnaW5fc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5jb252ZXJ0X3NyYyAmIChjbWQtPmNvbnZlcnRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zY2FuX2VuZF9zcmMgJiAoY21kLT5zY2FuX2VuZF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisJaWYgKChjbWQtPnN0b3Bfc3JjICYgKGNtZC0+c3RvcF9zcmMgLSAxKSkgIT0gMCkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIGNtZC0+c3RhcnRfc3JjID09IFRSSUdfTk9XIHx8IGNtZC0+c3RhcnRfc3JjID09IFRSSUdfSU5UICovCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwkvKiBjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfRVhUICovCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgIT0gMCkgeworCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJLyogY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVyAqLworCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IDApIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IDA7CisJCWVycisrOworCX0KKworCS8qIGNtZC0+c2Nhbl9lbmRfc3JjID09IFRSSUdfQ09VTlQgKi8KKwlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKKwkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKKwkJZXJyKys7CisJfQorCisJc3dpdGNoIChjbWQtPnN0b3Bfc3JjKSB7CisJY2FzZSBUUklHX0NPVU5UOgorCQkvKiBhbnkgY291bnQgYWxsb3dlZCAqLworCQlicmVhazsKKwljYXNlIFRSSUdfTk9ORToKKwkJaWYgKGNtZC0+c3RvcF9hcmcgIT0gMCkgeworCQkJY21kLT5zdG9wX2FyZyA9IDA7CisJCQllcnIrKzsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMzsKKworCS8qIHN0ZXAgNDogZml4IHVwIGFueSBhcmd1bWVudHMgKi8KKworCS8qIGlmIChlcnIpIHJldHVybiA0OyAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRjX3dhaXRfcmVhZHkodW5zaWduZWQgbG9uZyBpb2Jhc2UpCit7CisJdW5zaWduZWQgbG9uZyByZXRyeSA9IDEwMDAwMDsKKwl3aGlsZSAocmV0cnktLSkKKwkJaWYgKGluYihpb2Jhc2UgKyAzKSAmIDB4ODApCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyogQWxsIHRoaXMgaXMgZm9yIEFJIGFuZCBBTyAqLworc3RhdGljIGludCBhaV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBzdWJwcml2LT5pb2Jhc2U7CisKKwkvKgorCSAgIDEuIHdyaXRlIHRoZSBDTUQgYnl0ZSAodG8gQkFTRSsyKQorCSAgIDIuIHJlYWQganVuayBsbyBieXRlIChCQVNFKzApCisJICAgMy4gcmVhZCBqdW5rIGhpIGJ5dGUgKEJBU0UrMSkKKwkgICA0LiAobXV4IHNldHRsZWQgc28pIHdyaXRlIENNRCBieXRlIGFnYWluIChCQVNFKzIpCisJICAgNS4gcmVhZCB2YWxpZCBsbyBieXRlKEJBU0UrMCkKKwkgICA2LiByZWFkIHZhbGlkIGhpIGJ5dGUoQkFTRSsxKQorCisJICAgQWRkaXRpb25hbGx5IG5vdGUgdGhhdCB0aGUgQkFTRSArPSA0IGlmIHRoZSBjaGFubmVsID49IDgKKwkgKi8KKworCS8qIGNvbnZlcnQgbiBzYW1wbGVzICovCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQl1bnNpZ25lZCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksIHJhbmdlID0KKwkJCUNSX1JBTkdFKGluc24tPmNoYW5zcGVjKSwgYXJlZiA9CisJCQlDUl9BUkVGKGluc24tPmNoYW5zcGVjKTsKKwkJdW5zaWduZWQgY2hhciBjb21tYW5kX2J5dGUgPSAwOworCQl1bnNpZ25lZCBpb29mZnNldCA9IDA7CisJCXNob3J0IHNhbXBsZSwgYWRjX2FkanVzdCA9IDA7CisKKwkJaWYgKGNoYW4gPiA3KQorCQkJY2hhbiAtPSA4LCBpb29mZnNldCA9IDQ7CS8qIHVzZSB0aGUgc2Vjb25kIGR3b3JkIGZvciBjaGFubmVscyA+IDcgKi8KKworCQlpZiAoYXJlZiAhPSBBUkVGX0RJRkYpIHsKKwkJCWFyZWYgPSBBUkVGX0dST1VORDsKKwkJCWNvbW1hbmRfYnl0ZSB8PSAxIDw8IDc7CS8qIHNldCBiaXQgNyB0byBpbmRpY2F0ZSBzaW5nbGUtZW5kZWQgKi8KKwkJfQorCQlpZiAocmFuZ2UgPCAyKQorCQkJYWRjX2FkanVzdCA9IDB4ODAwMDsJLyogYmlwb2xhciByYW5nZXMgKC01LDUgLi4gLTEwLDEwIG5lZWQgdG8gYmUgYWRqdXN0ZWQgLS0gdGhhdCBpcy4uIHRoZXkgbmVlZCB0byB3cmFwIGFyb3VuZCBieSBhZGRpbmcgMHg4MDAwICovCisKKwkJaWYgKGNoYW4gJSAyKSB7CisJCQljb21tYW5kX2J5dGUgfD0gMSA8PCA2OwkvKiBvZGQtbnVtYmVyZWQgY2hhbm5lbHMgaGF2ZSBiaXQgNiBzZXQgKi8KKwkJfQorCisJCS8qIHNlbGVjdCB0aGUgY2hhbm5lbCwgYml0cyA0LTUgPT0gY2hhbi8yICovCisJCWNvbW1hbmRfYnl0ZSB8PSAoKGNoYW4gLyAyKSAmIDB4MykgPDwgNDsKKworCQkvKiBzZXQgdGhlIHJhbmdlLCBiaXRzIDItMyAqLworCQljb21tYW5kX2J5dGUgfD0gKHJhbmdlICYgMHgzKSA8PCAyOworCisJCS8qIG5lZWQgdG8gZG8gdGhpcyB0d2ljZSB0byBtYWtlIHN1cmUgbXV4IHNldHRsZWQgKi8KKwkJb3V0Yihjb21tYW5kX2J5dGUsIGlvYmFzZSArIGlvb2Zmc2V0ICsgMik7CS8qIGNoYW4vcmFuZ2UvYXJlZiBzZWxlY3QgKi8KKworCQlhZGNfd2FpdF9yZWFkeShpb2Jhc2UgKyBpb29mZnNldCk7CS8qIHdhaXQgZm9yIHRoZSBhZGMgdG8gc2F5IGl0IGZpbmlzZWQgdGhlIGNvbnZlcnNpb24gKi8KKworCQlvdXRiKGNvbW1hbmRfYnl0ZSwgaW9iYXNlICsgaW9vZmZzZXQgKyAyKTsJLyogc2VsZWN0IHRoZSBjaGFuL3JhbmdlL2FyZWYgQUdBSU4gKi8KKworCQlhZGNfd2FpdF9yZWFkeShpb2Jhc2UgKyBpb29mZnNldCk7CisKKwkJc2FtcGxlID0gaW5iKGlvYmFzZSArIGlvb2Zmc2V0ICsgMCk7CS8qIHJlYWQgZGF0YSBsbyBieXRlICovCisJCXNhbXBsZSB8PSBpbmIoaW9iYXNlICsgaW9vZmZzZXQgKyAxKSA8PCA4OwkvKiByZWFkIGRhdGEgaGkgYnl0ZSAqLworCQlzYW1wbGUgKz0gYWRjX2FkanVzdDsJLyogYWRqdXN0bWVudCAuLiBtdW5nZSBkYXRhICovCisJCWRhdGFbbl0gPSBzYW1wbGU7CisJfQorCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuICovCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJdW5zaWduZWQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCQlpZiAoY2hhbiA8IHMtPm5fY2hhbikKKwkJCWRhdGFbbl0gPSBzdWJwcml2LT5hby5zaGFkb3dfc2FtcGxlc1tjaGFuXTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgd2FpdF9kYWNfcmVhZHkodW5zaWduZWQgbG9uZyBpb2Jhc2UpCit7CisJdW5zaWduZWQgbG9uZyByZXRyeSA9IDEwMDAwMEw7CisKKwkvKiBUaGlzIG1heSBzZWVtIGxpa2UgYW4gYWJzdXJkIHdheSB0byBoYW5kbGUgd2FpdGluZyBhbmQgdmlvbGF0ZXMgdGhlCisJICAgIm5vIGJ1c3kgd2FpdGluZyIgcG9saWN5LiBUaGUgZmFjdCBpcyB0aGF0IHRoZSBoYXJkd2FyZSBpcworCSAgIG5vcm1hbGx5IHNvIGZhc3QgdGhhdCB3ZSB1c3VhbGx5IG9ubHkgbmVlZCBvbmUgdGltZSB0aHJvdWdoIHRoZSBsb29wCisJICAgYW55d2F5LiBUaGUgbG9uZ2VyIHRpbWVvdXQgaXMgZm9yIHJhcmUgb2NjYXNpb25zIGFuZCBmb3IgZGV0ZWN0aW5nCisJICAgbm9uLWV4aXN0YW50IGhhcmR3YXJlLiAgKi8KKworCXdoaWxlIChyZXRyeS0tKSB7CisJCWlmIChpbmIoaW9iYXNlICsgMykgJiAweDgwKQorCQkJcmV0dXJuIDA7CisKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCXVuc2lnbmVkIGlvYmFzZSA9IHN1YnByaXYtPmlvYmFzZSwgaW9vZmZzZXQgPSAwOworCisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQl1bnNpZ25lZCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyksIHJhbmdlID0KKwkJCUNSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKKwkJaWYgKGNoYW4gPCBzLT5uX2NoYW4pIHsKKwkJCXVuc2lnbmVkIGNoYXIgY29tbWFuZF9ieXRlID0gMCwgcmFuZ2VfYnl0ZSA9CisJCQkJcmFuZ2UgJiAoKDEgPDwgNCkgLSAxKTsKKwkJCWlmIChjaGFuID49IDQpCisJCQkJY2hhbiAtPSA0LCBpb29mZnNldCArPSA0OworCQkJLyogc2V0IHRoZSByYW5nZS4uICovCisJCQlvdXRiKHJhbmdlX2J5dGUsIGlvYmFzZSArIGlvb2Zmc2V0ICsgMCk7CisJCQlvdXRiKDAsIGlvYmFzZSArIGlvb2Zmc2V0ICsgMSk7CisKKwkJCS8qIHRlbGwgaXQgdG8gYmVnaW4gKi8KKwkJCWNvbW1hbmRfYnl0ZSA9IChjaGFuIDw8IDEpIHwgMHg2MDsKKwkJCW91dGIoY29tbWFuZF9ieXRlLCBpb2Jhc2UgKyBpb29mZnNldCArIDIpOworCisJCQl3YWl0X2RhY19yZWFkeShpb2Jhc2UgKyBpb29mZnNldCk7CisKKwkJCW91dGIoZGF0YVtuXSAmIDB4ZmYsIGlvYmFzZSArIGlvb2Zmc2V0ICsgMCk7CS8qIGxvdyBvcmRlciBieXRlICovCisJCQlvdXRiKChkYXRhW25dID4+IDgpICYgMHhmZiwgaW9iYXNlICsgaW9vZmZzZXQgKyAxKTsJLyogaGlnaCBvcmRlciBieXRlICovCisJCQljb21tYW5kX2J5dGUgPSAweDcwIHwgKGNoYW4gPDwgMSk7CS8qIHNldCBiaXQgNCBvZiBjb21tYW5kIGJ5dGUgdG8gaW5kaWNhdGUgZGF0YSBpcyBsb2FkZWQgYW5kIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQkJLyogdHJpZ2dlciBjb252ZXJpb24gKi8KKwkJCW91dGIoY29tbWFuZF9ieXRlLCBpb2Jhc2UgKyBpb29mZnNldCArIDIpOworCisJCQl3YWl0X2RhY19yZWFkeShpb2Jhc2UgKyBpb29mZnNldCk7CisKKwkJCXN1YnByaXYtPmFvLnNoYWRvd19zYW1wbGVzW2NoYW5dID0gZGF0YVtuXTsJLyogc2F2ZSB0byBzaGFkb3cgcmVnaXN0ZXIgZm9yIGFvX3JpbnNuICovCisJCX0KKwl9CisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBBIGNvbnZlbmllbnQgbWFjcm8gdGhhdCBkZWZpbmVzIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlKCksCisgKiBhcyBuZWNlc3NhcnkuCisgKi8KK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbXVpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbXVpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlN2Q4YjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtdWlvLmMKQEAgLTAsMCArMSwxMTAxIEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL3BjbXVpby5jCisgICAgRHJpdmVyIGZvciBXaW5zeXN0ZW1zIFBDLTEwNCBiYXNlZCA0OC1jaGFubmVsIGFuZCA5Ni1jaGFubmVsIERJTyBib2FyZHMuCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDA2IENhbGluIEEuIEN1bGlhbnUgPGNhbGluQGFqdmFyLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorKi8KKy8qCitEcml2ZXI6IHBjbXVpbworRGVzY3JpcHRpb246IEEgZHJpdmVyIGZvciB0aGUgUENNLVVJTzQ4QSBhbmQgUENNLVVJTzk2QSBib2FyZHMgZnJvbSBXaW5zeXN0ZW1zLgorRGV2aWNlczogW1dpbnN5c3RlbXNdIFBDTS1VSU80OEEgKHBjbXVpbzQ4KSwgUENNLVVJTzk2QSAocGNtdWlvOTYpCitBdXRob3I6IENhbGluIEN1bGlhbnUgPGNhbGluQGFqdmFyLm9yZz4KK1VwZGF0ZWQ6IEZyaSwgMTMgSmFuIDIwMDYgMTI6MDE6MDEgLTA1MDAKK1N0YXR1czogd29ya3MKKworQSBkcml2ZXIgZm9yIHRoZSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZC10by1wcm9ncmFtIFBDTS1VSU80OEEgYW5kCitQQ00tVUlPOTZBIGJvYXJkcyBmcm9tIFdpbnN5c3RlbXMuICBUaGVzZSBib2FyZHMgdXNlIGVpdGhlciBvbmUgb3IgdHdvCisoaW4gdGhlIDk2LURJTyB2ZXJzaW9uKSBXUzE2QzQ4IEFTSUMgSGlnaERlbnNpdHkgSS9PIENoaXBzIChIRElPKS4KK1RoaXMgY2hpcCBpcyBpbnRlcmVzdGluZyBpbiB0aGF0IGVhY2ggSS9PIGxpbmUgaXMgaW5kaXZpZHVhbGx5Citwcm9ncmFtbWFibGUgZm9yIElOUFVUIG9yIE9VVFBVVCAodGh1cyBjb21lZGlfZGlvX2NvbmZpZyBjYW4gYmUgZG9uZQorb24gYSBwZXItY2hhbm5lbCBiYXNpcykuICBBbHNvLCBlYWNoIGNoaXAgc3VwcG9ydHMgZWRnZS10cmlnZ2VyZWQKK2ludGVycnVwdHMgZm9yIHRoZSBmaXJzdCAyNCBJL08gbGluZXMuICBPZiBjb3Vyc2UsIHNpbmNlIHRoZQorOTYtY2hhbm5lbCB2ZXJzaW9uIG9mIHRoZSBib2FyZCBoYXMgdHdvIEFTSUNzLCBpdCBjYW4gZGV0ZWN0IHBvbGFyaXR5CitjaGFuZ2VzIG9uIHVwIHRvIDQ4IEkvTyBsaW5lcy4gIFNpbmNlIHRoaXMgaXMgZXNzZW50aWFsbHkgYW4gKG5vbi1QblApCitJU0EgYm9hcmQsIEkvTyBBZGRyZXNzIGFuZCBJUlEgc2VsZWN0aW9uIGFyZSBkb25lIHRocm91Z2gganVtcGVycyBvbgordGhlIGJvYXJkLiAgWW91IG5lZWQgdG8gcGFzcyB0aGF0IGluZm9ybWF0aW9uIHRvIHRoaXMgZHJpdmVyIGFzIHRoZQorZmlyc3QgYW5kIHNlY29uZCBjb21lZGlfY29uZmlnIG9wdGlvbiwgcmVzcGVjdGl2ZWx5LiAgTm90ZSB0aGF0IHRoZQorNDgtY2hhbm5lbCB2ZXJzaW9uIHVzZXMgMTYgYnl0ZXMgb2YgSU8gbWVtb3J5IGFuZCB0aGUgOTYtY2hhbm5lbAordmVyc2lvbiB1c2VzIDMyLWJ5dGVzIChpbiBjYXNlIHlvdSBhcmUgd29ycmllZCBhYm91dCBjb25mbGljdHMpLiAgVGhlCis0OC1jaGFubmVsIGJvYXJkIGlzIHNwbGl0IGludG8gdHdvIDI0LWNoYW5uZWwgY29tZWRpIHN1YmRldmljZXMuCitUaGUgOTYtY2hhbm5lbCBib2FyZCBpcyBzcGxpdCBpbnRvIDQgMjQtY2hhbm5lbCBESU8gc3ViZGV2aWNlcy4KKworTm90ZSB0aGF0IElSUSBzdXBwb3J0IGhhcyBiZWVuIGFkZGVkLCBidXQgaXQgaXMgdW50ZXN0ZWQuCisKK1RvIHVzZSBlZGdlLWRldGVjdGlvbiBJUlEgc3VwcG9ydCwgcGFzcyB0aGUgSVJRcyBvZiBib3RoIEFTSUNTCisoZm9yIHRoZSA5NiBjaGFubmVsIHZlcnNpb24pIG9yIGp1c3QgMSBBU0lDIChmb3IgNDgtY2hhbm5lbCB2ZXJzaW9uKS4KK1RoZW4sIHVzZSB1c2UgY29tZWRpX2NvbW1hbmRzIHdpdGggVFJJR19OT1cuCitZb3VyIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSBhbiBlZGdlIGlzIHRyaWdnZXJlZCwgYW5kIHRoZSBkYXRhCit2YWx1ZXMgd2lsbCBiZSB0d28gc2FtcGxlX3Qncywgd2hpY2ggc2hvdWxkIGJlIGNvbmNhdGVuYXRlZCB0byBmb3JtIG9uZQorMzItYml0IHVuc2lnbmVkIGludC4gIFRoaXMgdmFsdWUgaXMgdGhlIG1hc2sgb2YgY2hhbm5lbHMgdGhhdCBoYWQKK2VkZ2VzIGRldGVjdGVkIGZyb20geW91ciBjaGFubmVsIGxpc3QuICBOb3RlIHRoYXQgdGhlIGJpdHMgcG9zaXRpb25zCitpbiB0aGUgbWFzayBjb3JyZXNwb25kIHRvIHBvc2l0aW9ucyBpbiB5b3VyIGNoYW5saXN0IHdoZW4geW91IHNwZWNpZmllZAordGhlIGNvbW1hbmQgYW5kICpub3QqIGNoYW5uZWwgaWQncyEKKworVG8gc2V0IHRoZSBwb2xhcml0eSBvZiB0aGUgZWRnZS1kZXRlY3Rpb24gaW50ZXJydXB0cyBwYXNzIGEgbm9uemVybyB2YWx1ZSBmb3IKK2VpdGhlciBDUl9SQU5HRSBvciBDUl9BUkVGIGZvciBlZGdlLXVwIHBvbGFyaXR5LCBvciBhIHplcm8gdmFsdWUgZm9yIGJvdGgKK0NSX1JBTkdFIGFuZCBDUl9BUkVGIGlmIHlvdSB3YW50IGVkZ2UtZG93biBwb2xhcml0eS4KKworSW4gdGhlIDQ4LWNoYW5uZWwgdmVyc2lvbjoKKworT24gc3ViZGV2IDAsIHRoZSBmaXJzdCAyNCBjaGFubmVscyBjaGFubmVscyBhcmUgZWRnZS1kZXRlY3QgY2hhbm5lbHMuCisKK0luIHRoZSA5Ni1jaGFubmVsIGJvYXJkIHlvdSBoYXZlIHRoZSBjb2xsb3dpbmcgY2hhbm5lbHMgdGhhdCBjYW4gZG8gZWRnZSBkZXRlY3Rpb246CisKK3N1YmRldiAwLCBjaGFubmVscyAwLTI0ICAoZmlyc3QgMjQgY2hhbm5lbHMgb2YgMXN0IEFTSUMpCitzdWJkZXYgMiwgY2hhbm5lbHMgMC0yNCAgKGZpcnN0IDI0IGNoYW5uZWxzIG9mIDJuZCBBU0lDKQorCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEgKGZvciBmaXJzdCBBU0lDLCBvciBmaXJzdCAyNCBjaGFubmVscykKKyAgWzJdIC0gSVJRIGZvciBzZWNvbmQgQVNJQyAocGNtdWlvOTYgb25seSAtIElSUSBmb3IgY2hhbnMgNDgtNzIgLi4gY2FuIGJlIHRoZSBzYW1lIGFzIGZpcnN0IGlycSEpCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4JCS8qIGZvciBQQ0kgZGV2aWNlcyAqLworCisjZGVmaW5lIE1JTihhLGIpICggKChhKSA8IChiKSkgPyAoYSkgOiAoYikgKQorI2RlZmluZSBDSEFOU19QRVJfUE9SVCAgIDgKKyNkZWZpbmUgUE9SVFNfUEVSX0FTSUMgICA2CisjZGVmaW5lIElOVFJfUE9SVFNfUEVSX0FTSUMgICAzCisjZGVmaW5lIE1BWF9DSEFOU19QRVJfU1VCREVWIDI0CS8qIG51bWJlciBvZiBjaGFubmVscyBwZXIgY29tZWRpIHN1YmRldmljZSAqLworI2RlZmluZSBQT1JUU19QRVJfU1VCREVWIChNQVhfQ0hBTlNfUEVSX1NVQkRFVi9DSEFOU19QRVJfUE9SVCkKKyNkZWZpbmUgQ0hBTlNfUEVSX0FTSUMgKENIQU5TX1BFUl9QT1JUKlBPUlRTX1BFUl9BU0lDKQorI2RlZmluZSBJTlRSX0NIQU5TX1BFUl9BU0lDIDI0CisjZGVmaW5lIElOVFJfUE9SVFNfUEVSX1NVQkRFViAoSU5UUl9DSEFOU19QRVJfQVNJQy9DSEFOU19QRVJfUE9SVCkKKyNkZWZpbmUgTUFYX0RJT19DSEFOUyAgIChQT1JUU19QRVJfQVNJQyoyKkNIQU5TX1BFUl9QT1JUKQorI2RlZmluZSBNQVhfQVNJQ1MgICAgICAgKE1BWF9ESU9fQ0hBTlMvQ0hBTlNfUEVSX0FTSUMpCisjZGVmaW5lIFNERVZfTk8gKChpbnQpKHMgLSBkZXYtPnN1YmRldmljZXMpKQorI2RlZmluZSBDQUxDX05fU1VCREVWUyhuY2hhbnMpICgobmNoYW5zKS9NQVhfQ0hBTlNfUEVSX1NVQkRFViArICghISgobmNoYW5zKSVNQVhfQ0hBTlNfUEVSX1NVQkRFVikpIC8qKyAobmNoYW5zID4gSU5UUl9DSEFOU19QRVJfQVNJQyA/IDIgOiAxKSovKQorLyogSU8gTWVtb3J5IHNpemVzICovCisjZGVmaW5lIEFTSUNfSU9TSVpFICgweDEwKQorI2RlZmluZSBQQ01VSU80OF9JT1NJWkUgQVNJQ19JT1NJWkUKKyNkZWZpbmUgUENNVUlPOTZfSU9TSVpFIChBU0lDX0lPU0laRSoyKQorCisvKiBTb21lIG9mZnNldHMgLSB0aGVzZSBhcmUgYWxsIGluIHRoZSAxNmJ5dGUgSU8gbWVtb3J5IG9mZnNldCBmcm9tCisgICB0aGUgYmFzZSBhZGRyZXNzLiAgTm90ZSB0aGF0IHRoZXJlIGlzIGEgcGFnaW5nIHNjaGVtZSB0byBzd2FwIG91dAorICAgb2Zmc2V0cyAweDgtMHhBIHVzaW5nIHRoZSBQQUdFTE9DSyByZWdpc3Rlci4gIFNlZSB0aGUgdGFibGUgYmVsb3cuCisKKyAgUmVnaXN0ZXIocykgICAgICAgUGFnZXMgICAgICAgIFIvVz8gICAgICAgIERlc2NyaXB0aW9uCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFJFR19QT1JUeCAgICAgICAgIEFsbCAgICAgICAgICBSL1cgICAgICAgICBSZWFkL1dyaXRlL0NvbmZpZ3VyZSBJTworICBSRUdfSU5UX1BFTkRJTkcgICBBbGwgICAgICAgICAgUmVhZE9ubHkgICAgUXVpY2tseSBzZWUgd2hpY2ggSU5UX0lEeCBoYXMgaW50LgorICBSRUdfUEFHRUxPQ0sgICAgICBBbGwgICAgICAgICAgV3JpdGVPbmx5ICAgU2VsZWN0IGEgcGFnZQorICBSRUdfUE9MeCAgICAgICAgICBQZy4gMSBvbmx5ICAgV3JpdGVPbmx5ICAgU2VsZWN0IGVkZ2UtZGV0ZWN0aW9uIHBvbGFyaXR5CisgIFJFR19FTkFCeCAgICAgICAgIFBnLiAyIG9ubHkgICBXcml0ZU9ubHkgICBFbmFibGUvRGlzYWJsZSBlZGdlLWRldGVjdC4gaW50LgorICBSRUdfSU5UX0lEeCAgICAgICBQZy4gMyBvbmx5ICAgUi9XICAgICAgICAgU2VlIHdoaWNoIHBvcnRzL2JpdHMgaGF2ZSBpbnRzLgorICovCisjZGVmaW5lIFJFR19QT1JUMCAweDAKKyNkZWZpbmUgUkVHX1BPUlQxIDB4MQorI2RlZmluZSBSRUdfUE9SVDIgMHgyCisjZGVmaW5lIFJFR19QT1JUMyAweDMKKyNkZWZpbmUgUkVHX1BPUlQ0IDB4NAorI2RlZmluZSBSRUdfUE9SVDUgMHg1CisjZGVmaW5lIFJFR19JTlRfUEVORElORyAweDYKKyNkZWZpbmUgUkVHX1BBR0VMT0NLIDB4NwkvKiBwYWdlIHNlbGVjdG9yIHJlZ2lzdGVyLCB1cHBlciAyIGJpdHMgc2VsZWN0IGEgcGFnZQorCQkJCSAgIGFuZCBiaXRzIDAtNSBhcmUgdXNlZCB0byAnbG9jayBkb3duJyBhIHBhcnRpY3VsYXIKKwkJCQkgICBwb3J0IGFib3ZlIHRvIG1ha2UgaXQgcmVhZG9ubHkuICAqLworI2RlZmluZSBSRUdfUE9MMCAweDgKKyNkZWZpbmUgUkVHX1BPTDEgMHg5CisjZGVmaW5lIFJFR19QT0wyIDB4QQorI2RlZmluZSBSRUdfRU5BQjAgMHg4CisjZGVmaW5lIFJFR19FTkFCMSAweDkKKyNkZWZpbmUgUkVHX0VOQUIyIDB4QQorI2RlZmluZSBSRUdfSU5UX0lEMCAweDgKKyNkZWZpbmUgUkVHX0lOVF9JRDEgMHg5CisjZGVmaW5lIFJFR19JTlRfSUQyIDB4QQorCisjZGVmaW5lIE5VTV9QQUdFRF9SRUdTIDMKKyNkZWZpbmUgTlVNX1BBR0VTIDQKKyNkZWZpbmUgRklSU1RfUEFHRURfUkVHIDB4OAorI2RlZmluZSBSRUdfUEFHRV9CSVRPRkZTRVQgNgorI2RlZmluZSBSRUdfTE9DS19CSVRPRkZTRVQgMAorI2RlZmluZSBSRUdfUEFHRV9NQVNLICh+KCgweDE8PFJFR19QQUdFX0JJVE9GRlNFVCktMSkpCisjZGVmaW5lIFJFR19MT0NLX01BU0sgfihSRUdfUEFHRV9NQVNLKQorI2RlZmluZSBQQUdFX1BPTCAxCisjZGVmaW5lIFBBR0VfRU5BQiAyCisjZGVmaW5lIFBBR0VfSU5UX0lEIDMKKworLyoKKyAqIEJvYXJkIGRlc2NyaXB0aW9ucyBmb3IgdHdvIGltYWdpbmFyeSBib2FyZHMuICBEZXNjcmliaW5nIHRoZQorICogYm9hcmRzIGluIHRoaXMgd2F5IGlzIG9wdGlvbmFsLCBhbmQgY29tcGxldGVseSBkcml2ZXItZGVwZW5kZW50LgorICogU29tZSBkcml2ZXJzIHVzZSBhcnJheXMgc3VjaCBhcyB0aGlzLCBvdGhlciBkbyBub3QuCisgKi8KK3N0cnVjdCBwY211aW9fYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgaW50IG51bV9hc2ljczsKKwljb25zdCBpbnQgbnVtX2NoYW5uZWxzX3Blcl9wb3J0OworCWNvbnN0IGludCBudW1fcG9ydHM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjbXVpb19ib2FyZCBwY211aW9fYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJwY211aW80OCIsCisJICAgICAgbnVtX2FzaWNzOjEsCisJICAgICAgbnVtX3BvcnRzOjYsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJwY211aW85NiIsCisJICAgICAgbnVtX2FzaWNzOjIsCisJICAgICAgbnVtX3BvcnRzOjEyLAorCQl9LAorfTsKKworLyoKKyAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKKyAqLworI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgcGNtdWlvX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCisKKy8qIHRoaXMgc3RydWN0dXJlIGlzIGZvciBkYXRhIHVuaXF1ZSB0byB0aGlzIHN1YmRldmljZS4gICovCitzdHJ1Y3QgcGNtdWlvX3N1YmRldl9wcml2YXRlIHsKKwkvKiBtYXBwaW5nIG9mIGhhbGZ3b3JkcyAoYnl0ZXMpIGluIHBvcnQvY2hhbmFycmF5IHRvIGlvYmFzZSAqLworCXVuc2lnbmVkIGxvbmcgaW9iYXNlc1tQT1JUU19QRVJfU1VCREVWXTsKKworCS8qIFRoZSBiZWxvdyBpcyBvbmx5IHVzZWQgZm9yIGludHIgc3ViZGV2aWNlcyAqLworCXN0cnVjdCB7CisJCWludCBhc2ljOwkvKiBpZiBub24tbmVnYXRpdmUsIHRoaXMgc3ViZGV2IGhhcyBhbiBpbnRlcnJ1cHQgYXNpYyAqLworCQlpbnQgZmlyc3RfY2hhbjsJLyogaWYgbm9ubmVnYXRpdmUsIHRoZSBmaXJzdCBjaGFubmVsIGlkIGZvcgorCQkJCSAgIGludGVycnVwdHMuICovCisJCWludCBudW1fYXNpY19jaGFuczsJLyogdGhlIG51bWJlciBvZiBhc2ljIGNoYW5uZWxzIGluIHRoaXMgc3ViZGV2CisJCQkJCSAgIHRoYXQgaGF2ZSBpbnRlcnJ1dHBzICovCisJCWludCBhc2ljX2NoYW47CS8qIGlmIG5vbm5lZ2F0aXZlLCB0aGUgZmlyc3QgY2hhbm5lbCBpZCB3aXRoCisJCQkJICAgcmVzcGVjdCB0byB0aGUgYXNpYyB0aGF0IGhhcyBpbnRlcnJ1cHRzICovCisJCWludCBlbmFibGVkX21hc2s7CS8qIHN1YmRldi1yZWxhdGl2ZSBjaGFubmVsIG1hc2sgZm9yIGNoYW5uZWxzCisJCQkJCSAgIHdlIGFyZSBpbnRlcmVzdGVkIGluICovCisJCWludCBhY3RpdmU7CisJCWludCBzdG9wX2NvdW50OworCQlpbnQgY29udGludW91czsKKwkJc3BpbmxvY2tfdCBzcGlubG9jazsKKwl9IGludHI7Cit9OworCisvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgorICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKKyAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCitzdHJ1Y3QgcGNtdWlvX3ByaXZhdGUgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGNoYXIgcGFnZWxvY2s7CS8qIGN1cnJlbnQgcGFnZSBhbmQgbG9jayAqLworCQl1bnNpZ25lZCBjaGFyIHBvbFtOVU1fUEFHRURfUkVHU107CS8qIHNoYWRvdyBvZiBQT0x4IHJlZ2lzdGVycyAqLworCQl1bnNpZ25lZCBjaGFyIGVuYWJbTlVNX1BBR0VEX1JFR1NdOwkvKiBzaGFkb3cgb2YgRU5BQnggcmVnaXN0ZXJzICovCisJCWludCBudW07CisJCXVuc2lnbmVkIGxvbmcgaW9iYXNlOworCQl1bnNpZ25lZCBpbnQgaXJxOworCQlzcGlubG9ja190IHNwaW5sb2NrOworCX0gYXNpY3NbTUFYX0FTSUNTXTsKKwlzdHJ1Y3QgcGNtdWlvX3N1YmRldl9wcml2YXRlICpzcHJpdnM7Cit9OworCisvKgorICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bworICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHBjbXVpb19wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSBzdWJwcml2ICgoc3RydWN0IHBjbXVpb19zdWJkZXZfcHJpdmF0ZSAqKXMtPnByaXZhdGUpCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBwY211aW9fYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgcGNtdWlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXIgPSB7CisgICAgICBkcml2ZXJfbmFtZToicGNtdWlvIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwY211aW9fYXR0YWNoLAorICAgICAgZGV0YWNoOnBjbXVpb19kZXRhY2gsCisvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaWYgeW91IGFyZQorICogd3JpdGluZyBhIGRyaXZlciBmb3IgYSBJU0EgUG5QIG9yIFBDSSBjYXJkICovCisJLyogTW9zdCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSB0eXBlcyBvZiBib2FyZHMgYnkKKwkgKiBoYXZpbmcgYW4gYXJyYXkgb2YgYm9hcmQgc3RydWN0dXJlcy4gIFRoZXNlIHdlcmUgZGVmaW5lZAorCSAqIGluIHBjbXVpb19ib2FyZHNbXSBhYm92ZS4gIE5vdGUgdGhhdCB0aGUgZWxlbWVudCAnbmFtZScKKwkgKiB3YXMgZmlyc3QgaW4gdGhlIHN0cnVjdHVyZSAtLSBDb21lZGkgdXNlcyB0aGlzIGZhY3QgdG8KKwkgKiBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZSBib2FyZCB3aXRob3V0IGtub3dpbmcgYW55IGRldGFpbHMKKwkgKiBhYm91dCB0aGUgc3RydWN0dXJlIGV4Y2VwdCBmb3IgaXRzIGxlbmd0aC4KKwkgKiBXaGVuIGEgZGV2aWNlIGlzIGF0dGFjaGVkIChieSBjb21lZGlfY29uZmlnKSwgdGhlIG5hbWUKKwkgKiBvZiB0aGUgZGV2aWNlIGlzIGdpdmVuIHRvIENvbWVkaSwgYW5kIENvbWVkaSB0cmllcyB0bworCSAqIG1hdGNoIGl0IGJ5IGdvaW5nIHRocm91Z2ggdGhlIGxpc3Qgb2YgYm9hcmQgbmFtZXMuICBJZgorCSAqIHRoZXJlIGlzIGEgbWF0Y2gsIHRoZSBhZGRyZXNzIG9mIHRoZSBwb2ludGVyIGlzIHB1dAorCSAqIGludG8gZGV2LT5ib2FyZF9wdHIgYW5kIGRyaXZlci0+YXR0YWNoKCkgaXMgY2FsbGVkLgorCSAqCisJICogTm90ZSB0aGF0IHRoZXNlIGFyZSBub3QgbmVjZXNzYXJ5IGlmIHlvdSBjYW4gZGV0ZXJtaW5lCisJICogdGhlIHR5cGUgb2YgYm9hcmQgaW4gc29mdHdhcmUuICBJU0EgUG5QLCBQQ0ksIGFuZCBQQ01DSUEKKwkgKiBkZXZpY2VzIGFyZSBzdWNoIGJvYXJkcy4KKwkgKi8KKyAgICAgIGJvYXJkX25hbWU6JnBjbXVpb19ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHBjbXVpb19ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHBjbXVpb19ib2FyZHMpIC8gc2l6ZW9mKHN0cnVjdCBwY211aW9fYm9hcmQpLAorfTsKKworc3RhdGljIGludCBwY211aW9fZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBwY211aW9fZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbnRlcnJ1cHRfcGNtdWlvKGludCBpcnEsIHZvaWQgKmQgUFRfUkVHU19BUkcpOworc3RhdGljIHZvaWQgcGNtdWlvX3N0b3BfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqKTsKK3N0YXRpYyBpbnQgcGNtdWlvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgcGNtdWlvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKTsKK3N0YXRpYyBpbnQgcGNtdWlvX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CisKKy8qIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB0byBkZWFsIHdpdGggc3BlY2lmaWNzIG9mIHRoaXMgZGV2aWNlJ3MgcmVnaXN0ZXJzICovCitzdGF0aWMgdm9pZCBpbml0X2FzaWNzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsJLyogc2V0cyB1cC9jbGVhcnMgQVNJQyBjaGlwcyB0byBkZWZhdWx0cyAqLworc3RhdGljIHZvaWQgc3dpdGNoX3BhZ2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhc2ljLCBpbnQgcGFnZSk7CisjaWZkZWYgbm90dXNlZAorc3RhdGljIHZvaWQgbG9ja19wb3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBvcnQpOworc3RhdGljIHZvaWQgdW5sb2NrX3BvcnQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIGludCBhc2ljLCBpbnQgcG9ydCk7CisjZW5kaWYKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHBjbXVpb19hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IHNkZXZfbm8sIGNoYW5zX2xlZnQsIG5fc3ViZGV2cywgcG9ydCwgYXNpYywgdGhpc2FzaWNfY2hhbmN0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaXJxW01BWF9BU0lDU107CisKKwlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKKwlpcnFbMF0gPSBpdC0+b3B0aW9uc1sxXTsKKwlpcnFbMV0gPSBpdC0+b3B0aW9uc1syXTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzOiBpbzogJWx4ICIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSwKKwkJaW9iYXNlKTsKKworCWRldi0+aW9iYXNlID0gaW9iYXNlOworCisJaWYgKCFpb2Jhc2UgfHwgIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwKKwkJCXRoaXNib2FyZC0+bnVtX2FzaWNzICogQVNJQ19JT1NJWkUsCisJCQlkcml2ZXIuZHJpdmVyX25hbWUpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKy8qCisgKiBJbml0aWFsaXplIGRldi0+Ym9hcmRfbmFtZS4gIE5vdGUgdGhhdCB3ZSBjYW4gdXNlIHRoZSAidGhpc2JvYXJkIgorICogbWFjcm8gbm93LCBzaW5jZSB3ZSBqdXN0IGluaXRpYWxpemVkIGl0IGluIHRoZSBsYXN0IGxpbmUuCisgKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcGNtdWlvX3ByaXZhdGUpKSA8IDApIHsKKwkJcHJpbnRrKCJjYW5ub3QgYWxsb2NhdGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoYXNpYyA9IDA7IGFzaWMgPCBNQVhfQVNJQ1M7ICsrYXNpYykgeworCQlkZXZwcml2LT5hc2ljc1thc2ljXS5udW0gPSBhc2ljOworCQlkZXZwcml2LT5hc2ljc1thc2ljXS5pb2Jhc2UgPSBkZXYtPmlvYmFzZSArIGFzaWMgKiBBU0lDX0lPU0laRTsKKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaXJxID0gMDsJLyogdGhpcyBnZXRzIGFjdHVhbGx5IHNldCBhdCB0aGUgZW5kIG9mCisJCQkJCQkgICB0aGlzIGZ1bmN0aW9uIHdoZW4gd2UKKwkJCQkJCSAgIGNvbWVkaV9yZXF1ZXN0X2lycXMgKi8KKwkJc3Bpbl9sb2NrX2luaXQoJmRldnByaXYtPmFzaWNzW2FzaWNdLnNwaW5sb2NrKTsKKwl9CisKKwljaGFuc19sZWZ0ID0gQ0hBTlNfUEVSX0FTSUMgKiB0aGlzYm9hcmQtPm51bV9hc2ljczsKKwluX3N1YmRldnMgPSBDQUxDX05fU1VCREVWUyhjaGFuc19sZWZ0KTsKKwlkZXZwcml2LT5zcHJpdnMgPQorCQlrY2FsbG9jKG5fc3ViZGV2cywgc2l6ZW9mKHN0cnVjdCBwY211aW9fc3ViZGV2X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldnByaXYtPnNwcml2cykgeworCQlwcmludGsoImNhbm5vdCBhbGxvY2F0ZSBzdWJkZXZpY2UgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgc3ViZGV2aWNlIHN0cnVjdHVyZXMuICBhbGxvY19zdWJkZXZpY2UoKSBpcyBhCisJICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorCSAqCisJICogQWxsb2NhdGUgMiBzdWJkZXZzICgzMiArIDE2IERJTyBsaW5lcykgb3IgMyAzMiBESU8gc3ViZGV2cyBmb3IgdGhlCisJICogOTYtY2hhbm5lbCB2ZXJzaW9uIG9mIHRoZSBib2FyZC4KKwkgKi8KKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2cykgPCAwKSB7CisJCXByaW50aygiY2Fubm90IGFsbG9jYXRlIHN1YmRldmljZSBkYXRhIHN0cnVjdHVyZXNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwb3J0ID0gMDsKKwlhc2ljID0gMDsKKwlmb3IgKHNkZXZfbm8gPSAwOyBzZGV2X25vIDwgKGludClkZXYtPm5fc3ViZGV2aWNlczsgKytzZGV2X25vKSB7CisJCWludCBieXRlX25vOworCisJCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzZGV2X25vOworCQlzLT5wcml2YXRlID0gZGV2cHJpdi0+c3ByaXZzICsgc2Rldl9ubzsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RJTzsKKwkJcy0+aW5zbl9iaXRzID0gcGNtdWlvX2Rpb19pbnNuX2JpdHM7CisJCXMtPmluc25fY29uZmlnID0gcGNtdWlvX2Rpb19pbnNuX2NvbmZpZzsKKwkJcy0+bl9jaGFuID0gTUlOKGNoYW5zX2xlZnQsIE1BWF9DSEFOU19QRVJfU1VCREVWKTsKKwkJc3VicHJpdi0+aW50ci5hc2ljID0gLTE7CisJCXN1YnByaXYtPmludHIuZmlyc3RfY2hhbiA9IC0xOworCQlzdWJwcml2LT5pbnRyLmFzaWNfY2hhbiA9IC0xOworCQlzdWJwcml2LT5pbnRyLm51bV9hc2ljX2NoYW5zID0gLTE7CisJCXN1YnByaXYtPmludHIuYWN0aXZlID0gMDsKKwkJcy0+bGVuX2NoYW5saXN0ID0gMTsKKworCQkvKiBzYXZlIHRoZSBpb3BvcnQgYWRkcmVzcyBmb3IgZWFjaCAncG9ydCcgb2YgOCBjaGFubmVscyBpbiB0aGUKKwkJICAgc3ViZGV2aWNlICovCisJCWZvciAoYnl0ZV9ubyA9IDA7IGJ5dGVfbm8gPCBQT1JUU19QRVJfU1VCREVWOyArK2J5dGVfbm8sICsrcG9ydCkgeworCQkJaWYgKHBvcnQgPj0gUE9SVFNfUEVSX0FTSUMpIHsKKwkJCQlwb3J0ID0gMDsKKwkJCQkrK2FzaWM7CisJCQkJdGhpc2FzaWNfY2hhbmN0ID0gMDsKKwkJCX0KKwkJCXN1YnByaXYtPmlvYmFzZXNbYnl0ZV9ub10gPQorCQkJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIHBvcnQ7CisKKwkJCWlmICh0aGlzYXNpY19jaGFuY3QgPAorCQkJCUNIQU5TX1BFUl9QT1JUICogSU5UUl9QT1JUU19QRVJfQVNJQworCQkJCSYmIHN1YnByaXYtPmludHIuYXNpYyA8IDApIHsKKwkJCQkvKiB0aGlzIGlzIGFuIGludGVycnVwdCBzdWJkZXZpY2UsIHNvIHNldHVwIHRoZSBzdHJ1Y3QgKi8KKwkJCQlzdWJwcml2LT5pbnRyLmFzaWMgPSBhc2ljOworCQkJCXN1YnByaXYtPmludHIuYWN0aXZlID0gMDsKKwkJCQlzdWJwcml2LT5pbnRyLnN0b3BfY291bnQgPSAwOworCQkJCXN1YnByaXYtPmludHIuZmlyc3RfY2hhbiA9IGJ5dGVfbm8gKiA4OworCQkJCXN1YnByaXYtPmludHIuYXNpY19jaGFuID0gdGhpc2FzaWNfY2hhbmN0OworCQkJCXN1YnByaXYtPmludHIubnVtX2FzaWNfY2hhbnMgPQorCQkJCQlzLT5uX2NoYW4gLSBzdWJwcml2LT5pbnRyLmZpcnN0X2NoYW47CisJCQkJZGV2LT5yZWFkX3N1YmRldiA9IHM7CisJCQkJcy0+c3ViZGV2X2ZsYWdzIHw9IFNERl9DTURfUkVBRDsKKwkJCQlzLT5jYW5jZWwgPSBwY211aW9fY2FuY2VsOworCQkJCXMtPmRvX2NtZCA9IHBjbXVpb19jbWQ7CisJCQkJcy0+ZG9fY21kdGVzdCA9IHBjbXVpb19jbWR0ZXN0OworCQkJCXMtPmxlbl9jaGFubGlzdCA9IHN1YnByaXYtPmludHIubnVtX2FzaWNfY2hhbnM7CisJCQl9CisJCQl0aGlzYXNpY19jaGFuY3QgKz0gQ0hBTlNfUEVSX1BPUlQ7CisJCX0KKwkJc3Bpbl9sb2NrX2luaXQoJnN1YnByaXYtPmludHIuc3BpbmxvY2spOworCisJCWNoYW5zX2xlZnQgLT0gcy0+bl9jaGFuOworCisJCWlmICghY2hhbnNfbGVmdCkgeworCQkJYXNpYyA9IDA7CS8qIHJlc2V0IHRoZSBhc2ljIHRvIG91ciBmaXJzdCBhc2ljLCB0byBkbyBpbnRyIHN1YmRldnMgKi8KKwkJCXBvcnQgPSAwOworCQl9CisKKwl9CisKKwlpbml0X2FzaWNzKGRldik7CS8qIGNsZWFyIG91dCBhbGwgdGhlIHJlZ2lzdGVycywgYmFzaWNhbGx5ICovCisKKwlmb3IgKGFzaWMgPSAwOyBpcnFbMF0gJiYgYXNpYyA8IE1BWF9BU0lDUzsgKythc2ljKSB7CisJCWlmIChpcnFbYXNpY10KKwkJCSYmIGNvbWVkaV9yZXF1ZXN0X2lycShpcnFbYXNpY10sIGludGVycnVwdF9wY211aW8sCisJCQkJSVJRRl9TSEFSRUQsIHRoaXNib2FyZC0+bmFtZSwgZGV2KSkgeworCQkJaW50IGk7CisJCQkvKiB1bnJvbGwgdGhlIGFsbG9jYXRlZCBpcnFzLi4gKi8KKwkJCWZvciAoaSA9IGFzaWMgLSAxOyBpID49IDA7IC0taSkgeworCQkJCWNvbWVkaV9mcmVlX2lycShpcnFbaV0sIGRldik7CisJCQkJZGV2cHJpdi0+YXNpY3NbaV0uaXJxID0gaXJxW2ldID0gMDsKKwkJCX0KKwkJCWlycVthc2ljXSA9IDA7CisJCX0KKwkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaXJxID0gaXJxW2FzaWNdOworCX0KKworCWRldi0+aXJxID0gaXJxWzBdOwkvKiBncnIuLiB3aXNoIGNvbWVkaSBkZXYgc3RydWN0IHN1cHBvcnRlZCBtdWx0aXBsZQorCQkJCSAgIGlycXMuLiAqLworCisJaWYgKGlycVswXSkgeworCQlwcmludGsoImlycTogJXUgIiwgaXJxWzBdKTsKKwkJaWYgKGlycVsxXSAmJiB0aGlzYm9hcmQtPm51bV9hc2ljcyA9PSAyKQorCQkJcHJpbnRrKCJzZWNvbmQgQVNJQyBpcnE6ICV1ICIsIGlycVsxXSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCIoSVJRIG1vZGUgZGlzYWJsZWQpICIpOworCX0KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBfZGV0YWNoIGlzIGNhbGxlZCB0byBkZWNvbmZpZ3VyZSBhIGRldmljZS4gIEl0IHNob3VsZCBkZWFsbG9jYXRlCisgKiByZXNvdXJjZXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gX2F0dGFjaCgpIGZhaWxzLCBzbyBpdCBzaG91bGQgYmUKKyAqIGNhcmVmdWwgbm90IHRvIHJlbGVhc2UgcmVzb3VyY2VzIHRoYXQgd2VyZSBub3QgbmVjZXNzYXJpbHkKKyAqIGFsbG9jYXRlZCBieSBfYXR0YWNoKCkuICBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUKKyAqIGRlYWxsb2NhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvcmUuCisgKi8KK3N0YXRpYyBpbnQgcGNtdWlvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlpbnQgaTsKKworCXByaW50aygiY29tZWRpJWQ6ICVzOiByZW1vdmVcbiIsIGRldi0+bWlub3IsIGRyaXZlci5kcml2ZXJfbmFtZSk7CisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgQVNJQ19JT1NJWkUgKiB0aGlzYm9hcmQtPm51bV9hc2ljcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0FTSUNTOyArK2kpIHsKKwkJaWYgKGRldnByaXYtPmFzaWNzW2ldLmlycSkKKwkJCWNvbWVkaV9mcmVlX2lycShkZXZwcml2LT5hc2ljc1tpXS5pcnEsIGRldik7CisJfQorCisJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+c3ByaXZzKQorCQlrZnJlZShkZXZwcml2LT5zcHJpdnMpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIERJTyBkZXZpY2VzIGFyZSBzbGlnaHRseSBzcGVjaWFsLiAgQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8KKyAqIGltcGxlbWVudCB0aGUgaW5zbl9yZWFkL2luc25fd3JpdGUgaW50ZXJmYWNlLCBpdCBpcyBtdWNoIG1vcmUKKyAqIHVzZWZ1bCB0byBhcHBsaWNhdGlvbnMgaWYgeW91IGltcGxlbWVudCB0aGUgaW5zbl9iaXRzIGludGVyZmFjZS4KKyAqIFRoaXMgYWxsb3dzIHBhY2tlZCByZWFkaW5nL3dyaXRpbmcgb2YgdGhlIERJTyBjaGFubmVscy4gIFRoZQorICogY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZSAqLworc3RhdGljIGludCBwY211aW9fZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGJ5dGVfbm87CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBOT1RFOgorCSAgIHJlYWRpbmcgYSAwIG1lYW5zIHRoaXMgY2hhbm5lbCB3YXMgaGlnaAorCSAgIHdyaXRpbmUgYSAwIHNldHMgdGhlIGNoYW5uZWwgaGlnaAorCSAgIHJlYWRpbmcgYSAxIG1lYW5zIHRoaXMgY2hhbm5lbCB3YXMgbG93CisJICAgd3JpdGluZyBhIDEgbWVhbnMgc2V0IHRoaXMgY2hhbm5lbCBsb3cKKworCSAgIFRoZXJlZm9yZSBldmVyeXRoaW5nIGlzIGFsd2F5cyBpbnZlcnRlZC4gKi8KKworCS8qIFRoZSBpbnNuIGRhdGEgaXMgYSBtYXNrIGluIGRhdGFbMF0gYW5kIHRoZSBuZXcgZGF0YQorCSAqIGluIGRhdGFbMV0sIGVhY2ggY2hhbm5lbCBjb29yZXNwb25kaW5nIHRvIGEgYml0LiAqLworCisjaWZkZWYgREFNTUlUX0lUU19CUk9LRU4KKwkvKiBERUJVRyAqLworCXByaW50aygid3JpdGUgbWFzazogJTA4eCAgZGF0YTogJTA4eFxuIiwgZGF0YVswXSwgZGF0YVsxXSk7CisjZW5kaWYKKworCXMtPnN0YXRlID0gMDsKKworCWZvciAoYnl0ZV9ubyA9IDA7IGJ5dGVfbm8gPCBzLT5uX2NoYW4gLyBDSEFOU19QRVJfUE9SVDsgKytieXRlX25vKSB7CisJCS8qIGFkZHJlc3Mgb2YgOC1iaXQgcG9ydCAqLworCQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IHN1YnByaXYtPmlvYmFzZXNbYnl0ZV9ub10sCisJCQkvKiBiaXQgb2Zmc2V0IG9mIHBvcnQgaW4gMzItYml0IGRvdWJsZXdvcmQgKi8KKwkJCW9mZnNldCA9IGJ5dGVfbm8gKiA4OworCQkvKiB0aGlzIDgtYml0IHBvcnQncyBkYXRhICovCisJCXVuc2lnbmVkIGNoYXIgYnl0ZSA9IDAsCisJCQkvKiBUaGUgd3JpdGUgbWFzayBmb3IgdGhpcyBwb3J0IChpZiBhbnkpICovCisJCQl3cml0ZV9tYXNrX2J5dGUgPSAoZGF0YVswXSA+PiBvZmZzZXQpICYgMHhmZiwKKwkJCS8qIFRoZSBkYXRhIGJ5dGUgZm9yIHRoaXMgcG9ydCAqLworCQkJZGF0YV9ieXRlID0gKGRhdGFbMV0gPj4gb2Zmc2V0KSAmIDB4ZmY7CisKKwkJYnl0ZSA9IGluYihpb2FkZHIpOwkvKiByZWFkIGFsbCA4LWJpdHMgZm9yIHRoaXMgcG9ydCAqLworCisjaWZkZWYgREFNTUlUX0lUU19CUk9LRU4KKwkJLyogREVCVUcgKi8KKwkJcHJpbnRrKCJieXRlICVkIHdtYiAlMDJ4IGRiICUwMnggb2Zmc2V0ICUwMmQgaW8gJTA0eCwgZGF0YV9pbiAlMDJ4ICIsIGJ5dGVfbm8sICh1bnNpZ25lZCl3cml0ZV9tYXNrX2J5dGUsICh1bnNpZ25lZClkYXRhX2J5dGUsIG9mZnNldCwgaW9hZGRyLCAodW5zaWduZWQpYnl0ZSk7CisjZW5kaWYKKworCQlpZiAod3JpdGVfbWFza19ieXRlKSB7CisJCQkvKiB0aGlzIGJ5dGUgaGFzIHNvbWUgd3JpdGVfYml0cyAtLSBzbyBzZXQgdGhlIG91dHB1dCBsaW5lcyAqLworCQkJYnl0ZSAmPSB+d3JpdGVfbWFza19ieXRlOwkvKiBjbGVhciBiaXRzIGZvciB3cml0ZSBtYXNrICovCisJCQlieXRlIHw9IH5kYXRhX2J5dGUgJiB3cml0ZV9tYXNrX2J5dGU7CS8qIHNldCB0byBpbnZlcnRlZCBkYXRhX2J5dGUgKi8KKwkJCS8qIFdyaXRlIG91dCB0aGUgbmV3IGRpZ2l0YWwgb3V0cHV0IHN0YXRlICovCisJCQlvdXRiKGJ5dGUsIGlvYWRkcik7CisJCX0KKyNpZmRlZiBEQU1NSVRfSVRTX0JST0tFTgorCQkvKiBERUJVRyAqLworCQlwcmludGsoImRhdGFfb3V0X2J5dGUgJTAyeFxuIiwgKHVuc2lnbmVkKWJ5dGUpOworI2VuZGlmCisJCS8qIHNhdmUgdGhlIGRpZ2l0YWwgaW5wdXQgbGluZXMgZm9yIHRoaXMgYnl0ZS4uICovCisJCXMtPnN0YXRlIHw9ICgodW5zaWduZWQgaW50KWJ5dGUpIDw8IG9mZnNldDsKKwl9CisKKwkvKiBub3cgcmV0dXJuIHRoZSBESU8gbGluZXMgdG8gZGF0YVsxXSAtIG5vdGUgdGhleSBjYW1lIGludmVydGVkISAqLworCWRhdGFbMV0gPSB+cy0+c3RhdGU7CisKKyNpZmRlZiBEQU1NSVRfSVRTX0JST0tFTgorCS8qIERFQlVHICovCisJcHJpbnRrKCJzLT5zdGF0ZSAlMDh4IGRhdGFfb3V0ICUwOHhcbiIsIHMtPnN0YXRlLCBkYXRhWzFdKTsKKyNlbmRpZgorCisJcmV0dXJuIDI7Cit9CisKKy8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcworICogY29uZmlndXJlZCBieSBhIHNwZWNpYWwgaW5zbl9jb25maWcgaW5zdHJ1Y3Rpb24uICBjaGFuc3BlYworICogY29udGFpbnMgdGhlIGNoYW5uZWwgdG8gYmUgY2hhbmdlZCwgYW5kIGRhdGFbMF0gY29udGFpbnMgdGhlCisgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KK3N0YXRpYyBpbnQgcGNtdWlvX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwgYnl0ZV9ubyA9IGNoYW4gLyA4LCBiaXRfbm8gPQorCQljaGFuICUgODsKKwl1bnNpZ25lZCBsb25nIGlvYWRkcjsKKwl1bnNpZ25lZCBjaGFyIGJ5dGU7CisKKwkvKiBDb21wdXRlIGlvYWRkciBmb3IgdGhpcyBjaGFubmVsICovCisJaW9hZGRyID0gc3VicHJpdi0+aW9iYXNlc1tieXRlX25vXTsKKworCS8qIE5PVEU6CisJICAgd3JpdGluZyBhIDAgYW4gSU8gY2hhbm5lbCdzIGJpdCBzZXRzIHRoZSBjaGFubmVsIHRvIElOUFVUCisJICAgYW5kIHB1bGxzIHRoZSBsaW5lIGhpZ2ggYXMgd2VsbAorCisJICAgd3JpdGluZyBhIDEgdG8gYW4gSU8gY2hhbm5lbCdzICBiaXQgcHVsbHMgdGhlIGxpbmUgbG93CisKKwkgICBBbGwgY2hhbm5lbHMgYXJlIGltcGxpY2l0bHkgYWx3YXlzIGluIE9VVFBVVCBtb2RlIC0tIGJ1dCB3aGVuCisJICAgdGhleSBhcmUgaGlnaCB0aGV5IGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIGluIElOUFVUIG1vZGUuLgorCisJICAgVGh1cywgd2Ugb25seSBmb3JjZSBjaGFubmVscyBsb3cgaWYgdGhlIGNvbmZpZyByZXF1ZXN0IHdhcyBJTlBVVCwKKwkgICBvdGhlcndpc2Ugd2UgZG8gbm90aGluZyB0byB0aGUgaGFyZHdhcmUuICAgICovCisKKwlzd2l0Y2ggKGRhdGFbMF0pIHsKKwljYXNlIElOU05fQ09ORklHX0RJT19PVVRQVVQ6CisJCS8qIHNhdmUgdG8gaW9fYml0cyAtLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBzaW5jZQorCQkgICBhbGwgaW5wdXQgY2hhbm5lbHMgYXJlIGFsc28gb3V0cHV0IGNoYW5uZWxzLi4uICovCisJCXMtPmlvX2JpdHMgfD0gMSA8PCBjaGFuOworCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKKwkJLyogd3JpdGUgYSAwIHRvIHRoZSBhY3R1YWwgcmVnaXN0ZXIgcmVwcmVzZW50aW5nIHRoZSBjaGFubmVsCisJCSAgIHRvIHNldCBpdCB0byAnaW5wdXQnLiAgMCBtZWFucyAiZmxvYXQgaGlnaCIuICovCisJCWJ5dGUgPSBpbmIoaW9hZGRyKTsKKwkJYnl0ZSAmPSB+KDEgPDwgYml0X25vKTsKKwkJCQkvKio8IHNldCBpbnB1dCBjaGFubmVsIHRvICcwJyAqLworCisJCS8qIHdyaXRlIG91dCBieXRlIC0tIHRoaXMgaXMgdGhlIG9ubHkgdGltZSB3ZSBhY3R1YWxseSBhZmZlY3QgdGhlCisJCSAgIGhhcmR3YXJlIGFzIGFsbCBjaGFubmVscyBhcmUgaW1wbGljaXRseSBvdXRwdXQgLS0gYnV0IGlucHV0CisJCSAgIGNoYW5uZWxzIGFyZSBzZXQgdG8gZmxvYXQtaGlnaCAqLworCQlvdXRiKGJ5dGUsIGlvYWRkcik7CisKKwkJLyogc2F2ZSB0byBpb19iaXRzICovCisJCXMtPmlvX2JpdHMgJj0gfigxIDw8IGNoYW4pOworCQlicmVhazsKKworCWNhc2UgSU5TTl9DT05GSUdfRElPX1FVRVJZOgorCQkvKiByZXRyZWl2ZSBmcm9tIHNoYWRvdyByZWdpc3RlciAqLworCQlkYXRhWzFdID0KKwkJCShzLT4KKwkJCWlvX2JpdHMgJiAoMSA8PCBjaGFuKSkgPyBDT01FRElfT1VUUFVUIDogQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGluc24tPm47Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfYXNpY3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CQkJCS8qIHNldHMgdXAgYW4KKwkJCQkgICBBU0lDIGNoaXAgdG8gZGVmYXVsdHMgKi8KKwlpbnQgYXNpYzsKKworCWZvciAoYXNpYyA9IDA7IGFzaWMgPCB0aGlzYm9hcmQtPm51bV9hc2ljczsgKythc2ljKSB7CisJCWludCBwb3J0LCBwYWdlOworCQl1bnNpZ25lZCBsb25nIGJhc2VhZGRyID0gZGV2LT5pb2Jhc2UgKyBhc2ljICogQVNJQ19JT1NJWkU7CisKKwkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCAwKTsJLyogc3dpdGNoIGJhY2sgdG8gcGFnZSAwICovCisKKwkJLyogZmlyc3QsIGNsZWFyIGFsbCB0aGUgRElPIHBvcnQgYml0cyAqLworCQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUE9SVFNfUEVSX0FTSUM7ICsrcG9ydCkKKwkJCW91dGIoMCwgYmFzZWFkZHIgKyBSRUdfUE9SVDAgKyBwb3J0KTsKKworCQkvKiBOZXh0LCBjbGVhciBhbGwgdGhlIHBhZ2VkIHJlZ2lzdGVycyBmb3IgZWFjaCBwYWdlICovCisJCWZvciAocGFnZSA9IDE7IHBhZ2UgPCBOVU1fUEFHRVM7ICsrcGFnZSkgeworCQkJaW50IHJlZzsKKwkJCS8qIG5vdyBjbGVhciBhbGwgdGhlIHBhZ2VkIHJlZ2lzdGVycyAqLworCQkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCBwYWdlKTsKKwkJCWZvciAocmVnID0gRklSU1RfUEFHRURfUkVHOworCQkJCXJlZyA8IEZJUlNUX1BBR0VEX1JFRyArIE5VTV9QQUdFRF9SRUdTOyArK3JlZykKKwkJCQlvdXRiKDAsIGJhc2VhZGRyICsgcmVnKTsKKwkJfQorCisJCS8qIERFQlVHICBzZXQgcmlzaW5nIGVkZ2UgaW50ZXJydXB0cyBvbiBwb3J0MCBvZiBib3RoIGFzaWNzICovCisJCS8qc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCBQQUdFX1BPTCk7CisJCSAgIG91dGIoMHhmZiwgYmFzZWFkZHIgKyBSRUdfUE9MMCk7CisJCSAgIHN3aXRjaF9wYWdlKGRldiwgYXNpYywgUEFHRV9FTkFCKTsKKwkJICAgb3V0YigweGZmLCBiYXNlYWRkciArIFJFR19FTkFCMCk7ICovCisJCS8qIEVORCBERUJVRyAqLworCisJCXN3aXRjaF9wYWdlKGRldiwgYXNpYywgMCk7CS8qIHN3aXRjaCBiYWNrIHRvIGRlZmF1bHQgcGFnZSAwICovCisKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN3aXRjaF9wYWdlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBhZ2UpCit7CisJaWYgKGFzaWMgPCAwIHx8IGFzaWMgPj0gdGhpc2JvYXJkLT5udW1fYXNpY3MpCisJCXJldHVybjsJCS8qIHBhcmFub2lhICovCisJaWYgKHBhZ2UgPCAwIHx8IHBhZ2UgPj0gTlVNX1BBR0VTKQorCQlyZXR1cm47CQkvKiBtb3JlIHBhcmFub2lhICovCisKKwlkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jayAmPSB+UkVHX1BBR0VfTUFTSzsKKwlkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jayB8PSBwYWdlIDw8IFJFR19QQUdFX0JJVE9GRlNFVDsKKworCS8qIG5vdyB3cml0ZSBvdXQgdGhlIHNoYWRvdyByZWdpc3RlciAqLworCW91dGIoZGV2cHJpdi0+YXNpY3NbYXNpY10ucGFnZWxvY2ssCisJCWRldi0+aW9iYXNlICsgQVNJQ19JT1NJWkUgKiBhc2ljICsgUkVHX1BBR0VMT0NLKTsKK30KKworI2lmZGVmIG5vdHVzZWQKK3N0YXRpYyB2b2lkIGxvY2tfcG9ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgaW50IGFzaWMsIGludCBwb3J0KQoreworCWlmIChhc2ljIDwgMCB8fCBhc2ljID49IHRoaXNib2FyZC0+bnVtX2FzaWNzKQorCQlyZXR1cm47CQkvKiBwYXJhbm9pYSAqLworCWlmIChwb3J0IDwgMCB8fCBwb3J0ID49IFBPUlRTX1BFUl9BU0lDKQorCQlyZXR1cm47CQkvKiBtb3JlIHBhcmFub2lhICovCisKKwlkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jayB8PSAweDEgPDwgcG9ydDsKKwkvKiBub3cgd3JpdGUgb3V0IHRoZSBzaGFkb3cgcmVnaXN0ZXIgKi8KKwlvdXRiKGRldnByaXYtPmFzaWNzW2FzaWNdLnBhZ2Vsb2NrLAorCQlkZXYtPmlvYmFzZSArIEFTSUNfSU9TSVpFICogYXNpYyArIFJFR19QQUdFTE9DSyk7Cit9CisKK3N0YXRpYyB2b2lkIHVubG9ja19wb3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBpbnQgYXNpYywgaW50IHBvcnQpCit7CisJaWYgKGFzaWMgPCAwIHx8IGFzaWMgPj0gdGhpc2JvYXJkLT5udW1fYXNpY3MpCisJCXJldHVybjsJCS8qIHBhcmFub2lhICovCisJaWYgKHBvcnQgPCAwIHx8IHBvcnQgPj0gUE9SVFNfUEVSX0FTSUMpCisJCXJldHVybjsJCS8qIG1vcmUgcGFyYW5vaWEgKi8KKwlkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jayAmPSB+KDB4MSA8PCBwb3J0KSB8IFJFR19MT0NLX01BU0s7CisJLyogbm93IHdyaXRlIG91dCB0aGUgc2hhZG93IHJlZ2lzdGVyICovCisJb3V0YihkZXZwcml2LT5hc2ljc1thc2ljXS5wYWdlbG9jaywKKwkJZGV2LT5pb2Jhc2UgKyBBU0lDX0lPU0laRSAqIGFzaWMgKyBSRUdfUEFHRUxPQ0spOworfQorI2VuZGlmIC8qIG5vdHVzZWQgKi8KKworc3RhdGljIGlycXJldHVybl90IGludGVycnVwdF9wY211aW8oaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKK3sKKwlpbnQgYXNpYywgZ290MSA9IDA7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCisJZm9yIChhc2ljID0gMDsgYXNpYyA8IE1BWF9BU0lDUzsgKythc2ljKSB7CisJCWlmIChpcnEgPT0gZGV2cHJpdi0+YXNpY3NbYXNpY10uaXJxKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJdW5zaWduZWQgdHJpZ2dlcmVkID0gMDsKKwkJCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlOworCQkJLyogaXQgaXMgYW4gaW50ZXJydXB0IGZvciBBU0lDICNhc2ljICovCisJCQl1bnNpZ25lZCBjaGFyIGludF9wZW5kOworCisJCQljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPmFzaWNzW2FzaWNdLnNwaW5sb2NrLAorCQkJCWZsYWdzKTsKKworCQkJaW50X3BlbmQgPSBpbmIoaW9iYXNlICsgUkVHX0lOVF9QRU5ESU5HKSAmIDB4MDc7CisKKwkJCWlmIChpbnRfcGVuZCkgeworCQkJCWludCBwb3J0OworCQkJCWZvciAocG9ydCA9IDA7IHBvcnQgPCBJTlRSX1BPUlRTX1BFUl9BU0lDOworCQkJCQkrK3BvcnQpIHsKKwkJCQkJaWYgKGludF9wZW5kICYgKDB4MSA8PCBwb3J0KSkgeworCQkJCQkJdW5zaWduZWQgY2hhcgorCQkJCQkJCWlvX2xpbmVzX3dpdGhfZWRnZXMgPSAwOworCQkJCQkJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLAorCQkJCQkJCVBBR0VfSU5UX0lEKTsKKwkJCQkJCWlvX2xpbmVzX3dpdGhfZWRnZXMgPQorCQkJCQkJCWluYihpb2Jhc2UgKworCQkJCQkJCVJFR19JTlRfSUQwICsgcG9ydCk7CisKKwkJCQkJCWlmIChpb19saW5lc193aXRoX2VkZ2VzKQorCQkJCQkJCS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0ICovCisJCQkJCQkJb3V0YigwLCBpb2Jhc2UgKworCQkJCQkJCQlSRUdfSU5UX0lEMCArCisJCQkJCQkJCXBvcnQpOworCisJCQkJCQl0cmlnZ2VyZWQgfD0KKwkJCQkJCQlpb19saW5lc193aXRoX2VkZ2VzIDw8CisJCQkJCQkJcG9ydCAqIDg7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkrK2dvdDE7CisJCQl9CisKKwkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZwcml2LT5hc2ljc1thc2ljXS4KKwkJCQlzcGlubG9jaywgZmxhZ3MpOworCisJCQlpZiAodHJpZ2dlcmVkKSB7CisJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJCQkJLyogVE9ETyBoZXJlOiBkaXNwYXRjaCBpbyBsaW5lcyB0byBzdWJkZXZzIHdpdGggY29tbWFuZHMuLiAqLworCQkJCXByaW50aygiUENNVUlPIERFQlVHOiBnb3QgZWRnZSBkZXRlY3QgaW50ZXJydXB0ICVkIGFzaWMgJWQgd2hpY2hfY2hhbnM6ICUwNnhcbiIsIGlycSwgYXNpYywgdHJpZ2dlcmVkKTsKKwkJCQlmb3IgKHMgPSBkZXYtPnN1YmRldmljZXM7CisJCQkJCXMgPCBkZXYtPnN1YmRldmljZXMgKyBkZXYtPm5fc3ViZGV2aWNlczsKKwkJCQkJKytzKSB7CisJCQkJCWlmIChzdWJwcml2LT5pbnRyLmFzaWMgPT0gYXNpYykgewkvKiB0aGlzIGlzIGFuIGludGVycnVwdCBzdWJkZXYsIGFuZCBpdCBtYXRjaGVzIHRoaXMgYXNpYyEgKi8KKwkJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCQkJCQl1bnNpZ25lZCBvbGRldmVudHM7CisKKwkJCQkJCWNvbWVkaV9zcGluX2xvY2tfaXJxc2F2ZQorCQkJCQkJCSgmc3VicHJpdi0+aW50ci4KKwkJCQkJCQlzcGlubG9jaywgZmxhZ3MpOworCisJCQkJCQlvbGRldmVudHMgPSBzLT5hc3luYy0+ZXZlbnRzOworCisJCQkJCQlpZiAoc3VicHJpdi0+aW50ci5hY3RpdmUpIHsKKwkJCQkJCQl1bnNpZ25lZCBteXRyaWcgPQorCQkJCQkJCQkoKHRyaWdnZXJlZCA+PgorCQkJCQkJCQkJc3VicHJpdi0+CisJCQkJCQkJCQlpbnRyLgorCQkJCQkJCQkJYXNpY19jaGFuKQorCQkJCQkJCQkmICgoMHgxIDw8IHN1YnByaXYtPmludHIubnVtX2FzaWNfY2hhbnMpIC0gMSkpIDw8IHN1YnByaXYtPmludHIuZmlyc3RfY2hhbjsKKwkJCQkJCQlpZiAobXl0cmlnICYgc3VicHJpdi0+CisJCQkJCQkJCWludHIuCisJCQkJCQkJCWVuYWJsZWRfbWFzaykgeworCQkJCQkJCQl1bnNpZ25lZCBpbnQgdmFsID0KKwkJCQkJCQkJCTA7CisJCQkJCQkJCXVuc2lnbmVkIGludCBuLAorCQkJCQkJCQkJY2gsIGxlbjsKKworCQkJCQkJCQlsZW4gPSBzLT5hc3luYy0+CisJCQkJCQkJCQljbWQuCisJCQkJCQkJCQljaGFubGlzdF9sZW47CisJCQkJCQkJCWZvciAobiA9IDA7CisJCQkJCQkJCQluIDwgbGVuOworCQkJCQkJCQkJbisrKSB7CisJCQkJCQkJCQljaCA9IENSX0NIQU4ocy0+YXN5bmMtPmNtZC5jaGFubGlzdFtuXSk7CisJCQkJCQkJCQlpZiAobXl0cmlnICYgKDFVIDw8IGNoKSkgeworCQkJCQkJCQkJCXZhbCB8PSAoMVUgPDwgbik7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQkJLyogV3JpdGUgdGhlIHNjYW4gdG8gdGhlIGJ1ZmZlci4gKi8KKwkJCQkJCQkJaWYgKGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCAoKHNob3J0ICopICYgdmFsKVswXSkKKwkJCQkJCQkJCSYmCisJCQkJCQkJCQljb21lZGlfYnVmX3B1dAorCQkJCQkJCQkJKHMtPmFzeW5jLCAoKHNob3J0ICopICYgdmFsKVsxXSkpIHsKKwkJCQkJCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0gKENPTUVESV9DQl9CTE9DSyB8IENPTUVESV9DQl9FT1MpOworCQkJCQkJCQl9IGVsc2UgeworCQkJCQkJCQkJLyogT3ZlcmZsb3chIFN0b3AgYWNxdWlzaXRpb24hISAqLworCQkJCQkJCQkJLyogVE9ETzogU1RPUF9BQ1FVSVNJVElPTl9DQUxMX0hFUkUhISAqLworCQkJCQkJCQkJcGNtdWlvX3N0b3BfaW50cgorCQkJCQkJCQkJCShkZXYsCisJCQkJCQkJCQkJcyk7CisJCQkJCQkJCX0KKworCQkJCQkJCQkvKiBDaGVjayBmb3IgZW5kIG9mIGFjcXVpc2l0aW9uLiAqLworCQkJCQkJCQlpZiAoIXN1YnByaXYtPgorCQkJCQkJCQkJaW50ci4KKwkJCQkJCQkJCWNvbnRpbnVvdXMpCisJCQkJCQkJCXsKKwkJCQkJCQkJCS8qIHN0b3Bfc3JjID09IFRSSUdfQ09VTlQgKi8KKwkJCQkJCQkJCWlmIChzdWJwcml2LT5pbnRyLnN0b3BfY291bnQgPiAwKSB7CisJCQkJCQkJCQkJc3VicHJpdi0+CisJCQkJCQkJCQkJCWludHIuCisJCQkJCQkJCQkJCXN0b3BfY291bnQtLTsKKwkJCQkJCQkJCQlpZiAoc3VicHJpdi0+aW50ci5zdG9wX2NvdW50ID09IDApIHsKKwkJCQkJCQkJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOworCQkJCQkJCQkJCQkvKiBUT0RPOiBTVE9QX0FDUVVJU0lUSU9OX0NBTExfSEVSRSEhICovCisJCQkJCQkJCQkJCXBjbXVpb19zdG9wX2ludHIKKwkJCQkJCQkJCQkJCShkZXYsCisJCQkJCQkJCQkJCQlzKTsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlCisJCQkJCQkJKCZzdWJwcml2LT5pbnRyLgorCQkJCQkJCXNwaW5sb2NrLCBmbGFncyk7CisKKwkJCQkJCWlmIChvbGRldmVudHMgIT0KKwkJCQkJCQlzLT5hc3luYy0+ZXZlbnRzKSB7CisJCQkJCQkJY29tZWRpX2V2ZW50KGRldiwgcyk7CisJCQkJCQl9CisKKwkJCQkJfQorCisJCQkJfQorCQkJfQorCisJCX0KKwl9CisJaWYgKCFnb3QxKQorCQlyZXR1cm4gSVJRX05PTkU7CS8qIGludGVycnVwdCBmcm9tIG90aGVyIHNvdXJjZSAqLworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgcGNtdWlvX3N0b3BfaW50cihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCWludCBucG9ydHMsIGZpcnN0cG9ydCwgYXNpYywgcG9ydDsKKworCWlmICgoYXNpYyA9IHN1YnByaXYtPmludHIuYXNpYykgPCAwKQorCQlyZXR1cm47CQkvKiBub3QgYW4gaW50ZXJydXB0IHN1YmRldiAqLworCisJc3VicHJpdi0+aW50ci5lbmFibGVkX21hc2sgPSAwOworCXN1YnByaXYtPmludHIuYWN0aXZlID0gMDsKKwlzLT5hc3luYy0+aW50dHJpZyA9IDA7CisJbnBvcnRzID0gc3VicHJpdi0+aW50ci5udW1fYXNpY19jaGFucyAvIENIQU5TX1BFUl9QT1JUOworCWZpcnN0cG9ydCA9IHN1YnByaXYtPmludHIuYXNpY19jaGFuIC8gQ0hBTlNfUEVSX1BPUlQ7CisJc3dpdGNoX3BhZ2UoZGV2LCBhc2ljLCBQQUdFX0VOQUIpOworCWZvciAocG9ydCA9IGZpcnN0cG9ydDsgcG9ydCA8IGZpcnN0cG9ydCArIG5wb3J0czsgKytwb3J0KSB7CisJCS8qIGRpc2FibGUgYWxsIGludHJzIGZvciB0aGlzIHN1YmRldi4uICovCisJCW91dGIoMCwgZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlICsgUkVHX0VOQUIwICsgcG9ydCk7CisJfQorfQorCitzdGF0aWMgaW50IHBjbXVpb19zdGFydF9pbnRyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJaWYgKCFzdWJwcml2LT5pbnRyLmNvbnRpbnVvdXMgJiYgc3VicHJpdi0+aW50ci5zdG9wX2NvdW50ID09IDApIHsKKwkJLyogQW4gZW1wdHkgYWNxdWlzaXRpb24hICovCisJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKKwkJc3VicHJpdi0+aW50ci5hY3RpdmUgPSAwOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBiaXRzID0gMCwgcG9sX2JpdHMgPSAwLCBuOworCQlpbnQgbnBvcnRzLCBmaXJzdHBvcnQsIGFzaWMsIHBvcnQ7CisJCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKworCQlpZiAoKGFzaWMgPSBzdWJwcml2LT5pbnRyLmFzaWMpIDwgMCkKKwkJCXJldHVybiAxOwkvKiBub3QgYW4gaW50ZXJydXB0CisJCQkJCSAgIHN1YmRldiAqLworCQlzdWJwcml2LT5pbnRyLmVuYWJsZWRfbWFzayA9IDA7CisJCXN1YnByaXYtPmludHIuYWN0aXZlID0gMTsKKwkJbnBvcnRzID0gc3VicHJpdi0+aW50ci5udW1fYXNpY19jaGFucyAvIENIQU5TX1BFUl9QT1JUOworCQlmaXJzdHBvcnQgPSBzdWJwcml2LT5pbnRyLmFzaWNfY2hhbiAvIENIQU5TX1BFUl9QT1JUOworCQlpZiAoY21kLT5jaGFubGlzdCkgeworCQkJZm9yIChuID0gMDsgbiA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBuKyspIHsKKwkJCQliaXRzIHw9ICgxVSA8PCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pKTsKKwkJCQlwb2xfYml0cyB8PSAoQ1JfQVJFRihjbWQtPmNoYW5saXN0W25dKQorCQkJCQl8fCBDUl9SQU5HRShjbWQtPmNoYW5saXN0W25dKSA/IDFVIDogMFUpCisJCQkJCTw8IENSX0NIQU4oY21kLT5jaGFubGlzdFtuXSk7CisJCQl9CisJCX0KKwkJYml0cyAmPSAoKDB4MSA8PCBzdWJwcml2LT5pbnRyLm51bV9hc2ljX2NoYW5zKSAtCisJCQkxKSA8PCBzdWJwcml2LT5pbnRyLmZpcnN0X2NoYW47CisJCXN1YnByaXYtPmludHIuZW5hYmxlZF9tYXNrID0gYml0czsKKworCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIFBBR0VfRU5BQik7CisJCWZvciAocG9ydCA9IGZpcnN0cG9ydDsgcG9ydCA8IGZpcnN0cG9ydCArIG5wb3J0czsgKytwb3J0KSB7CisJCQl1bnNpZ25lZCBlbmFiID0KKwkJCQliaXRzID4+IChzdWJwcml2LT5pbnRyLmZpcnN0X2NoYW4gKyAocG9ydCAtCisJCQkJCWZpcnN0cG9ydCkgKiA4KSAmIDB4ZmYsIHBvbCA9CisJCQkJcG9sX2JpdHMgPj4gKHN1YnByaXYtPmludHIuZmlyc3RfY2hhbiArIChwb3J0IC0KKwkJCQkJZmlyc3Rwb3J0KSAqIDgpICYgMHhmZjsKKwkJCS8qIHNldCBlbmFiIGludHJzIGZvciB0aGlzIHN1YmRldi4uICovCisJCQlvdXRiKGVuYWIsCisJCQkJZGV2cHJpdi0+YXNpY3NbYXNpY10uaW9iYXNlICsgUkVHX0VOQUIwICsgcG9ydCk7CisJCQlzd2l0Y2hfcGFnZShkZXYsIGFzaWMsIFBBR0VfUE9MKTsKKwkJCW91dGIocG9sLAorCQkJCWRldnByaXYtPmFzaWNzW2FzaWNdLmlvYmFzZSArIFJFR19FTkFCMCArIHBvcnQpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbXVpb19jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZzdWJwcml2LT5pbnRyLnNwaW5sb2NrLCBmbGFncyk7CisJaWYgKHN1YnByaXYtPmludHIuYWN0aXZlKQorCQlwY211aW9fc3RvcF9pbnRyKGRldiwgcyk7CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwgdHJpZ2dlciBmdW5jdGlvbiB0byBzdGFydCBhY3F1aXNpdGlvbiBmb3IgYW4gJ0lOVEVSUlVQVCcgc3ViZGV2aWNlLgorICovCitzdGF0aWMgaW50CitwY211aW9faW50dHJpZ19zdGFydF9pbnRyKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJdW5zaWduZWQgaW50IHRyaWdudW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXZlbnQgPSAwOworCisJaWYgKHRyaWdudW0gIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKwlzLT5hc3luYy0+aW50dHJpZyA9IDA7CisJaWYgKHN1YnByaXYtPmludHIuYWN0aXZlKSB7CisJCWV2ZW50ID0gcGNtdWlvX3N0YXJ0X2ludHIoZGV2LCBzKTsKKwl9CisJY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKworCWlmIChldmVudCkgeworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqICdkb19jbWQnIGZ1bmN0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgcGNtdWlvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzKQoreworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBldmVudCA9IDA7CisKKwljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPmludHIuc3BpbmxvY2ssIGZsYWdzKTsKKwlzdWJwcml2LT5pbnRyLmFjdGl2ZSA9IDE7CisKKwkvKiBTZXQgdXAgZW5kIG9mIGFjcXVpc2l0aW9uLiAqLworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJc3VicHJpdi0+aW50ci5jb250aW51b3VzID0gMDsKKwkJc3VicHJpdi0+aW50ci5zdG9wX2NvdW50ID0gY21kLT5zdG9wX2FyZzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVFJJR19OT05FICovCisJCXN1YnByaXYtPmludHIuY29udGludW91cyA9IDE7CisJCXN1YnByaXYtPmludHIuc3RvcF9jb3VudCA9IDA7CisJCWJyZWFrOworCX0KKworCS8qIFNldCB1cCBzdGFydCBvZiBhY3F1aXNpdGlvbi4gKi8KKwlzd2l0Y2ggKGNtZC0+c3RhcnRfc3JjKSB7CisJY2FzZSBUUklHX0lOVDoKKwkJcy0+YXN5bmMtPmludHRyaWcgPSBwY211aW9faW50dHJpZ19zdGFydF9pbnRyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUUklHX05PVyAqLworCQlldmVudCA9IHBjbXVpb19zdGFydF9pbnRyKGRldiwgcyk7CisJCWJyZWFrOworCX0KKwljb21lZGlfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3VicHJpdi0+aW50ci5zcGlubG9jaywgZmxhZ3MpOworCisJaWYgKGV2ZW50KSB7CisJCWNvbWVkaV9ldmVudChkZXYsIHMpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogJ2RvX2NtZHRlc3QnIGZ1bmN0aW9uIGZvciBhbiAnSU5URVJSVVBUJyBzdWJkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQKK3BjbXVpb19jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gKFRSSUdfTk9XIHwgVFJJR19JTlQpOworCWlmICghY21kLT5zdGFydF9zcmMgfHwgdG1wICE9IGNtZC0+c3RhcnRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9zcmM7CisJY21kLT5zY2FuX2JlZ2luX3NyYyAmPSBUUklHX0VYVDsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfTk9XOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSAoVFJJR19DT1VOVCB8IFRSSUdfTk9ORSk7CisJaWYgKCFjbWQtPnN0b3Bfc3JjIHx8IHRtcCAhPSBjbWQtPnN0b3Bfc3JjKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAxOworCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KKworCS8qIHRoZXNlIHRlc3RzIGFyZSB0cnVlIGlmIG1vcmUgdGhhbiBvbmUgX3NyYyBiaXQgaXMgc2V0ICovCisJaWYgKChjbWQtPnN0YXJ0X3NyYyAmIChjbWQtPnN0YXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9iZWdpbl9zcmMgJiAoY21kLT5zY2FuX2JlZ2luX3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+Y29udmVydF9zcmMgJiAoY21kLT5jb252ZXJ0X3NyYyAtIDEpKSAhPSAwKQorCQllcnIrKzsKKwlpZiAoKGNtZC0+c2Nhbl9lbmRfc3JjICYgKGNtZC0+c2Nhbl9lbmRfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCWlmICgoY21kLT5zdG9wX3NyYyAmIChjbWQtPnN0b3Bfc3JjIC0gMSkpICE9IDApCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDI7CisKKwkvKiBzdGVwIDM6IG1ha2Ugc3VyZSBhcmd1bWVudHMgYXJlIHRyaXZpYWxseSBjb21wYXRpYmxlICovCisKKwkvKiBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVyB8fCBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0lOVCAqLworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorCisJLyogY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX0VYVCAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnICE9IDApIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IDA7CisJCWVycisrOworCX0KKworCS8qIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19OT1cgKi8KKwlpZiAoY21kLT5jb252ZXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+Y29udmVydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisKKwkvKiBjbWQtPnNjYW5fZW5kX3NyYyA9PSBUUklHX0NPVU5UICovCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKworCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgeworCWNhc2UgVFJJR19DT1VOVDoKKwkJLyogYW55IGNvdW50IGFsbG93ZWQgKi8KKwkJYnJlYWs7CisJY2FzZSBUUklHX05PTkU6CisJCWlmIChjbWQtPnN0b3BfYXJnICE9IDApIHsKKwkJCWNtZC0+c3RvcF9hcmcgPSAwOworCQkJZXJyKys7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwkvKiBpZiAoZXJyKSByZXR1cm4gNDsgKi8KKworCXJldHVybiAwOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wbHg5MDUyLmggYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGx4OTA1Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OTQ3MzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGx4OTA1Mi5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvcGx4OTA1Mi5oCisgICAgRGVmaW5pdGlvbnMgZm9yIHRoZSBQTFgtOTA1MiBQQ0kgaW50ZXJmYWNlIGNoaXAKKworICAgIENvcHlyaWdodCAoQykgMjAwMiBNRVYgTHRkLiA8aHR0cDovL3d3dy5tZXYuY28udWsvPgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaWZuZGVmIF9QTFg5MDUyX0hfCisjZGVmaW5lIF9QTFg5MDUyX0hfCisKKy8qCisgKiBQTFggUENJOTA1MiBJTlRDU1IgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1IJMHg0QwkvKiBPZmZzZXQgaW4gTG9jYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMgKi8KKy8qIExvY2FsIEludGVycnVwdCAxIEVuYWJsZSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFFTkFCX01BU0sJCTB4MDAwMQorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFFTkFCX0RJU0FCTEVECQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxRU5BQl9FTkFCTEVECQkweDAwMDEKKy8qIExvY2FsIEludGVycnVwdCAxIFBvbGFyaXR5ICovCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMVBPTF9NQVNLCQkweDAwMDIKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxUE9MX0xPVwkJMHgwMDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMVBPTF9ISUdICQkweDAwMDIKKy8qIExvY2FsIEludGVycnVwdCAxIFN0YXR1cyAocmVhZC1vbmx5KSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFTVEFUX01BU0sJCTB4MDAwNAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFTVEFUX0lOQUNUSVZFCQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkxU1RBVF9BQ1RJVkUJCTB4MDAwNAorLyogTG9jYWwgSW50ZXJydXB0IDIgRW5hYmxlICovCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMkVOQUJfTUFTSwkJMHgwMDA4CisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMkVOQUJfRElTQUJMRUQJCTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJFTkFCX0VOQUJMRUQJCTB4MDAwOAorLyogTG9jYWwgSW50ZXJydXB0IDIgUG9sYXJpdHkgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyUE9MX01BU0sJCTB4MDAxMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJQT0xfTE9XCQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyUE9MX0hJR0gJCTB4MDAxMAorLyogTG9jYWwgSW50ZXJydXB0IDIgU3RhdHVzIChyZWFkLW9ubHkpICovCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMlNUQVRfTUFTSwkJMHgwMDIwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMlNUQVRfSU5BQ1RJVkUJCTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJTVEFUX0FDVElWRQkJMHgwMDIwCisvKiBQQ0kgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9QQ0lFTkFCX01BU0sJCTB4MDA0MAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9QQ0lFTkFCX0RJU0FCTEVECQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfUENJRU5BQl9FTkFCTEVECQkweDAwNDAKKy8qIFNvZnR3YXJlIEludGVycnVwdCAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9TT0ZUSU5UX01BU0sJCTB4MDA4MAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9TT0ZUSU5UX1VOQVNTRVJURUQJMHgwMDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX1NPRlRJTlRfQVNTRVJURUQJCTB4MDA4MAorLyogTG9jYWwgSW50ZXJydXB0IDEgU2VsZWN0IEVuYWJsZSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFTRUxfTUFTSwkJMHgwMTAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMVNFTF9MRVZFTAkJMHgwMDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMVNFTF9FREdFCQkweDAxMDAKKy8qIExvY2FsIEludGVycnVwdCAyIFNlbGVjdCBFbmFibGUgKi8KKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfTEkyU0VMX01BU0sJCTB4MDIwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJTRUxfTEVWRUwJCTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJTRUxfRURHRQkJMHgwMjAwCisvKiBMb2NhbCBFZGdlIFRyaWdnZXJhYmxlIEludGVycnVwdCAxIENsZWFyIEJpdCAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFDTFJJTlRfTUFTSwkJMHgwNDAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMUNMUklOVF9VTkFTU0VSVEVECTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTFDTFJJTlRfQVNTRVJURUQJMHgwNDAwCisvKiBMb2NhbCBFZGdlIFRyaWdnZXJhYmxlIEludGVycnVwdCAyIENsZWFyIEJpdCAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJDTFJJTlRfTUFTSwkJMHgwODAwCisjZGVmaW5lIFBMWDkwNTJfSU5UQ1NSX0xJMkNMUklOVF9VTkFTU0VSVEVECTB4MDAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9MSTJDTFJJTlRfQVNTRVJURUQJMHgwODAwCisvKiBJU0EgSW50ZXJmYWNlIE1vZGUgRW5hYmxlIChyZWFkLW9ubHkgb3ZlciBQQ0kgYnVzKSAqLworI2RlZmluZSBQTFg5MDUyX0lOVENTUl9JU0FNT0RFX01BU0sJCTB4MTAwMAorI2RlZmluZSBQTFg5MDUyX0lOVENTUl9JU0FNT0RFX0RJU0FCTEVECQkweDAwMDAKKyNkZWZpbmUgUExYOTA1Ml9JTlRDU1JfSVNBTU9ERV9FTkFCTEVECQkweDEwMDAKKworI2VuZGlmIC8qIF9QTFg5MDUyX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGx4OTA4MC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BseDkwODAuaAppbmRleCBhNWExYTY4Li45MjMxYmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGx4OTA4MC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wbHg5MDgwLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgX19DT01FRElfUExYOTA4MF9ICiAjZGVmaW5lIF9fQ09NRURJX1BMWDkwODBfSAogCi0vLyBkZXNjcmlwdG9yIGJsb2NrIHVzZWQgZm9yIGNoYWluZWQgZG1hIHRyYW5zZmVycworLyogIGRlc2NyaXB0b3IgYmxvY2sgdXNlZCBmb3IgY2hhaW5lZCBkbWEgdHJhbnNmZXJzICovCiBzdHJ1Y3QgcGx4X2RtYV9kZXNjIHsKIAl2b2xhdGlsZSB1aW50MzJfdCBwY2lfc3RhcnRfYWRkcjsKIAl2b2xhdGlsZSB1aW50MzJfdCBsb2NhbF9zdGFydF9hZGRyOwpAQCAtNTIsMTQgKzUyLDE0IEBACiAjZGVmaW5lICBMUk5HX0FOWTMyICAgICAgICAweDAwMDAwMDAwCS8qIExvY2F0ZSBhbnl3aGVyZSBpbiAzMiBiaXQgKi8KICNkZWZpbmUgIExSTkdfTFQxTUIgICAgICAgIDB4MDAwMDAwMDIJLyogTG9jYXRlIGluIDFzdCBtZWcgKi8KICNkZWZpbmUgIExSTkdfQU5ZNjQgICAgICAgIDB4MDAwMDAwMDQJLyogTG9jYXRlIGFueXdoZXJlIGluIDY0IGJpdCAqLwotI2RlZmluZSAgTFJOR19NRU1fTUFTSyAgICAgMHhmZmZmZmZmMAkvLyBiaXRzIHRoYXQgc3BlY2lmeSByYW5nZSBmb3IgbWVtb3J5IGlvCi0jZGVmaW5lICBMUk5HX0lPX01BU0sgICAgIDB4ZmZmZmZmZmEJLy8gYml0cyB0aGF0IHNwZWNpZnkgcmFuZ2UgZm9yIG5vcm1hbCBpbworI2RlZmluZSAgTFJOR19NRU1fTUFTSyAgICAgMHhmZmZmZmZmMAkvKiAgYml0cyB0aGF0IHNwZWNpZnkgcmFuZ2UgZm9yIG1lbW9yeSBpbyAqLworI2RlZmluZSAgTFJOR19JT19NQVNLICAgICAweGZmZmZmZmZhCS8qICBiaXRzIHRoYXQgc3BlY2lmeSByYW5nZSBmb3Igbm9ybWFsIGlvICovCiAKICNkZWZpbmUgUExYX0xBUzBNQVBfUkVHICAgICAgICAgMHgwMDA0CS8qIEwsIExvY2FsIEFkZHIgU3BhY2UgMCBSZW1hcCBSZWdpc3RlciAqLwogI2RlZmluZSBQTFhfTEFTMU1BUF9SRUcgICAgICAgICAweDAwZjQJLyogTCwgTG9jYWwgQWRkciBTcGFjZSAxIFJlbWFwIFJlZ2lzdGVyICovCiAjZGVmaW5lICBMTUFQX0VOICAgICAgICAgICAweDAwMDAwMDAxCS8qIEVuYWJsZSBzbGF2ZSBkZWNvZGUgKi8KLSNkZWZpbmUgIExNQVBfTUVNX01BU0sgICAgIDB4ZmZmZmZmZjAJLy8gYml0cyB0aGF0IHNwZWNpZnkgZGVjb2RlIGZvciBtZW1vcnkgaW8KLSNkZWZpbmUgIExNQVBfSU9fTUFTSyAgICAgMHhmZmZmZmZmYQkvLyBiaXRzIHRoYXQgc3BlY2lmeSBkZWNvZGUgYml0cyBmb3Igbm9ybWFsIGlvCisjZGVmaW5lICBMTUFQX01FTV9NQVNLICAgICAweGZmZmZmZmYwCS8qICBiaXRzIHRoYXQgc3BlY2lmeSBkZWNvZGUgZm9yIG1lbW9yeSBpbyAqLworI2RlZmluZSAgTE1BUF9JT19NQVNLICAgICAweGZmZmZmZmZhCS8qICBiaXRzIHRoYXQgc3BlY2lmeSBkZWNvZGUgYml0cyBmb3Igbm9ybWFsIGlvICovCiAKIC8qIE1vZGUvQXJiaXRyYXRpb24gUmVnaXN0ZXIuCiAqLwpAQCAtMTY5LDcgKzE2OSw3IEBACiAjZGVmaW5lICBJQ1NfQUVSUiAgICAgICAgICAweDAwMDAwMDAxCS8qIEFzc2VydCBMU0VSUiBvbiBBQk9SVCAqLwogI2RlZmluZSAgSUNTX1BFUlIgICAgICAgICAgMHgwMDAwMDAwMgkvKiBBc3NlcnQgTFNFUlIgb24gUGFyaXR5IEVycm9yICovCiAjZGVmaW5lICBJQ1NfU0VSUiAgICAgICAgICAweDAwMDAwMDA0CS8qIEdlbmVyYXRlIFBDSSBTRVJSIyAqLwotI2RlZmluZSAgSUNTX01CSUUgICAgICAgICAgMHgwMDAwMDAwOAkvLyBtYWlsYm94IGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgIElDU19NQklFICAgICAgICAgIDB4MDAwMDAwMDgJLyogIG1haWxib3ggaW50ZXJydXB0IGVuYWJsZSAqLwogI2RlZmluZSAgSUNTX1BJRSAgICAgICAgICAgMHgwMDAwMDEwMAkvKiBQQ0kgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSAgSUNTX1BESUUgICAgICAgICAgMHgwMDAwMDIwMAkvKiBQQ0kgRG9vcmJlbGwgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSAgSUNTX1BBSUUgICAgICAgICAgMHgwMDAwMDQwMAkvKiBQQ0kgQWJvcnQgSW50ZXJydXB0IEVuYWJsZSAqLwpAQCAtMTkwLDcgKzE5MCw3IEBACiAjZGVmaW5lICBJQ1NfVEFfRE1BMCAgICAgICAweDAyMDAwMDAwCS8qIFRhcmdldCBBYm9ydCAtIERNQSAjMCAqLwogI2RlZmluZSAgSUNTX1RBX0RNQTEgICAgICAgMHgwNDAwMDAwMAkvKiBUYXJnZXQgQWJvcnQgLSBETUEgIzEgKi8KICNkZWZpbmUgIElDU19UQV9SQSAgICAgICAgIDB4MDgwMDAwMDAJLyogVGFyZ2V0IEFib3J0IC0gUmV0cnkgVGltZW91dCAqLwotI2RlZmluZSAgSUNTX01CSUEoeCkgICAgICAgKDB4MTAwMDAwMDAgPDwgKCh4KSAmIDB4MykpCS8vIG1haWxib3ggeCBpcyBhY3RpdmUKKyNkZWZpbmUgIElDU19NQklBKHgpICAgICAgICgweDEwMDAwMDAwIDw8ICgoeCkgJiAweDMpKQkvKiAgbWFpbGJveCB4IGlzIGFjdGl2ZSAqLwogCiAjZGVmaW5lIFBMWF9DT05UUk9MX1JFRyAgICAgICAgMHgwMDZDCS8qIEwsIEVFUFJPTSBDbnRsICYgUENJIENtZCBDb2RlcyAqLwogI2RlZmluZSAgQ1RMX1JETUEgICAgICAgICAgMHgwMDAwMDAwRQkvKiBETUEgUmVhZCBDb21tYW5kICovCkBAIC0yMDgsNTEgKzIwOCw1MSBAQAogI2RlZmluZSAgQ1RMX1JFU0VUICAgICAgICAgMHg0MDAwMDAwMAkvKiAhISBBZGFwdGVyIFJlc2V0ICEhICovCiAjZGVmaW5lICBDVExfUkVBRFkgICAgICAgICAweDgwMDAwMDAwCS8qIExvY2FsIEluaXQgRG9uZSAqLwogCi0jZGVmaW5lIFBMWF9JRF9SRUcJMHg3MAkvLyBoYXJkLWNvZGVkIHBseCB2ZW5kb3IgYW5kIGRldmljZSBpZHMKKyNkZWZpbmUgUExYX0lEX1JFRwkweDcwCS8qICBoYXJkLWNvZGVkIHBseCB2ZW5kb3IgYW5kIGRldmljZSBpZHMgKi8KIAotI2RlZmluZSBQTFhfUkVWSVNJT05fUkVHCTB4NzQJLy8gc2lsaWNvbiByZXZpc2lvbgorI2RlZmluZSBQTFhfUkVWSVNJT05fUkVHCTB4NzQJLyogIHNpbGljb24gcmV2aXNpb24gKi8KIAotI2RlZmluZSBQTFhfRE1BMF9NT0RFX1JFRwkweDgwCS8vIGRtYSBjaGFubmVsIDAgbW9kZSByZWdpc3RlcgotI2RlZmluZSBQTFhfRE1BMV9NT0RFX1JFRwkweDk0CS8vIGRtYSBjaGFubmVsIDAgbW9kZSByZWdpc3RlcgorI2RlZmluZSBQTFhfRE1BMF9NT0RFX1JFRwkweDgwCS8qICBkbWEgY2hhbm5lbCAwIG1vZGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUExYX0RNQTFfTU9ERV9SRUcJMHg5NAkvKiAgZG1hIGNoYW5uZWwgMCBtb2RlIHJlZ2lzdGVyICovCiAjZGVmaW5lICBQTFhfTE9DQUxfQlVTXzE2X1dJREVfQklUUwkweDEKICNkZWZpbmUgIFBMWF9MT0NBTF9CVVNfMzJfV0lERV9CSVRTCTB4MwogI2RlZmluZSAgUExYX0xPQ0FMX0JVU19XSURUSF9NQVNLCTB4MwotI2RlZmluZSAgUExYX0RNQV9FTl9SRUFEWUlOX0JJVAkweDQwCS8vIGVuYWJsZSByZWFkeSBpbiBpbnB1dAotI2RlZmluZSAgUExYX0VOX0JURVJNX0JJVAkweDgwCS8vIGVuYWJsZSBCVEVSTSMgaW5wdXQKLSNkZWZpbmUgIFBMWF9ETUFfTE9DQUxfQlVSU1RfRU5fQklUCTB4MTAwCS8vIGVuYWJsZSBsb2NhbCBidXJzdCBtb2RlCi0jZGVmaW5lICBQTFhfRU5fQ0hBSU5fQklUCTB4MjAwCS8vIGVuYWJsZXMgY2hhaW5pbmcKLSNkZWZpbmUgIFBMWF9FTl9ETUFfRE9ORV9JTlRSX0JJVAkweDQwMAkvLyBlbmFibGVzIGludGVycnVwdCBvbiBkbWEgZG9uZQotI2RlZmluZSAgUExYX0xPQ0FMX0FERFJfQ09OU1RfQklUCTB4ODAwCS8vIGhvbGQgbG9jYWwgYWRkcmVzcyBjb25zdGFudCAoZG9uJ3QgaW5jcmVtZW50KQotI2RlZmluZSAgUExYX0RFTUFORF9NT0RFX0JJVAkweDEwMDAJLy8gZW5hYmxlcyBkZW1hbmQtbW9kZSBmb3IgZG1hIHRyYW5zZmVyCisjZGVmaW5lICBQTFhfRE1BX0VOX1JFQURZSU5fQklUCTB4NDAJLyogIGVuYWJsZSByZWFkeSBpbiBpbnB1dCAqLworI2RlZmluZSAgUExYX0VOX0JURVJNX0JJVAkweDgwCS8qICBlbmFibGUgQlRFUk0jIGlucHV0ICovCisjZGVmaW5lICBQTFhfRE1BX0xPQ0FMX0JVUlNUX0VOX0JJVAkweDEwMAkvKiAgZW5hYmxlIGxvY2FsIGJ1cnN0IG1vZGUgKi8KKyNkZWZpbmUgIFBMWF9FTl9DSEFJTl9CSVQJMHgyMDAJLyogIGVuYWJsZXMgY2hhaW5pbmcgKi8KKyNkZWZpbmUgIFBMWF9FTl9ETUFfRE9ORV9JTlRSX0JJVAkweDQwMAkvKiAgZW5hYmxlcyBpbnRlcnJ1cHQgb24gZG1hIGRvbmUgKi8KKyNkZWZpbmUgIFBMWF9MT0NBTF9BRERSX0NPTlNUX0JJVAkweDgwMAkvKiAgaG9sZCBsb2NhbCBhZGRyZXNzIGNvbnN0YW50IChkb24ndCBpbmNyZW1lbnQpICovCisjZGVmaW5lICBQTFhfREVNQU5EX01PREVfQklUCTB4MTAwMAkvKiAgZW5hYmxlcyBkZW1hbmQtbW9kZSBmb3IgZG1hIHRyYW5zZmVyICovCiAjZGVmaW5lICBQTFhfRU9UX0VOQUJMRV9CSVQJMHg0MDAwCiAjZGVmaW5lICBQTFhfU1RPUF9NT0RFX0JJVCAweDgwMDAKLSNkZWZpbmUgIFBMWF9ETUFfSU5UUl9QQ0lfQklUCTB4MjAwMDAJLy8gcm91dGVzIGRtYSBpbnRlcnJ1cHQgdG8gcGNpIGJ1cyAoaW5zdGVhZCBvZiBsb2NhbCBidXMpCisjZGVmaW5lICBQTFhfRE1BX0lOVFJfUENJX0JJVAkweDIwMDAwCS8qICByb3V0ZXMgZG1hIGludGVycnVwdCB0byBwY2kgYnVzIChpbnN0ZWFkIG9mIGxvY2FsIGJ1cykgKi8KIAotI2RlZmluZSBQTFhfRE1BMF9QQ0lfQUREUkVTU19SRUcJMHg4NAkvLyBwY2kgYWRkcmVzcyB0aGF0IGRtYSB0cmFuc2ZlcnMgc3RhcnQgYXQKKyNkZWZpbmUgUExYX0RNQTBfUENJX0FERFJFU1NfUkVHCTB4ODQJLyogIHBjaSBhZGRyZXNzIHRoYXQgZG1hIHRyYW5zZmVycyBzdGFydCBhdCAqLwogI2RlZmluZSBQTFhfRE1BMV9QQ0lfQUREUkVTU19SRUcJMHg5OAogCi0jZGVmaW5lIFBMWF9ETUEwX0xPQ0FMX0FERFJFU1NfUkVHCTB4ODgJLy8gbG9jYWwgYWRkcmVzcyB0aGF0IGRtYSB0cmFuc2ZlcnMgc3RhcnQgYXQKKyNkZWZpbmUgUExYX0RNQTBfTE9DQUxfQUREUkVTU19SRUcJMHg4OAkvKiAgbG9jYWwgYWRkcmVzcyB0aGF0IGRtYSB0cmFuc2ZlcnMgc3RhcnQgYXQgKi8KICNkZWZpbmUgUExYX0RNQTFfTE9DQUxfQUREUkVTU19SRUcJMHg5YwogCi0jZGVmaW5lIFBMWF9ETUEwX1RSQU5TRkVSX1NJWkVfUkVHCTB4OGMJLy8gbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIChmaXJzdCAyMyBiaXRzKQorI2RlZmluZSBQTFhfRE1BMF9UUkFOU0ZFUl9TSVpFX1JFRwkweDhjCS8qICBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgKGZpcnN0IDIzIGJpdHMpICovCiAjZGVmaW5lIFBMWF9ETUExX1RSQU5TRkVSX1NJWkVfUkVHCTB4YTAKIAotI2RlZmluZSBQTFhfRE1BMF9ERVNDUklQVE9SX1JFRwkweDkwCS8vIGRlc2NyaXB0b3IgcG9pbnRlciByZWdpc3RlcgorI2RlZmluZSBQTFhfRE1BMF9ERVNDUklQVE9SX1JFRwkweDkwCS8qICBkZXNjcmlwdG9yIHBvaW50ZXIgcmVnaXN0ZXIgKi8KICNkZWZpbmUgUExYX0RNQTFfREVTQ1JJUFRPUl9SRUcJMHhhNAotI2RlZmluZSAgUExYX0RFU0NfSU5fUENJX0JJVAkweDEJLy8gZGVzY3JpcHRvciBpcyBsb2NhdGVkIGluIHBjaSBzcGFjZSAobm90IGxvY2FsIHNwYWNlKQotI2RlZmluZSAgUExYX0VORF9PRl9DSEFJTl9CSVQJMHgyCS8vIGVuZCBvZiBjaGFpbiBiaXQKLSNkZWZpbmUgIFBMWF9JTlRSX1RFUk1fQ09VTlQJMHg0CS8vIGludGVycnVwdCB3aGVuIHRoaXMgZGVzY3JpcHRvcidzIHRyYW5zZmVyIGlzIGZpbmlzaGVkCi0jZGVmaW5lICBQTFhfWEZFUl9MT0NBTF9UT19QQ0kgMHg4CS8vIHRyYW5zZmVyIGZyb20gbG9jYWwgdG8gcGNpIGJ1cyAobm90IHBjaSB0byBsb2NhbCkKKyNkZWZpbmUgIFBMWF9ERVNDX0lOX1BDSV9CSVQJMHgxCS8qICBkZXNjcmlwdG9yIGlzIGxvY2F0ZWQgaW4gcGNpIHNwYWNlIChub3QgbG9jYWwgc3BhY2UpICovCisjZGVmaW5lICBQTFhfRU5EX09GX0NIQUlOX0JJVAkweDIJLyogIGVuZCBvZiBjaGFpbiBiaXQgKi8KKyNkZWZpbmUgIFBMWF9JTlRSX1RFUk1fQ09VTlQJMHg0CS8qICBpbnRlcnJ1cHQgd2hlbiB0aGlzIGRlc2NyaXB0b3IncyB0cmFuc2ZlciBpcyBmaW5pc2hlZCAqLworI2RlZmluZSAgUExYX1hGRVJfTE9DQUxfVE9fUENJIDB4OAkvKiAgdHJhbnNmZXIgZnJvbSBsb2NhbCB0byBwY2kgYnVzIChub3QgcGNpIHRvIGxvY2FsKSAqLwogCi0jZGVmaW5lIFBMWF9ETUEwX0NTX1JFRwkweGE4CS8vIGNvbW1hbmQgc3RhdHVzIHJlZ2lzdGVyCisjZGVmaW5lIFBMWF9ETUEwX0NTX1JFRwkweGE4CS8qICBjb21tYW5kIHN0YXR1cyByZWdpc3RlciAqLwogI2RlZmluZSBQTFhfRE1BMV9DU19SRUcJMHhhOQotI2RlZmluZSAgUExYX0RNQV9FTl9CSVQJMHgxCS8vIGVuYWJsZSBkbWEgY2hhbm5lbAotI2RlZmluZSAgUExYX0RNQV9TVEFSVF9CSVQJMHgyCS8vIHN0YXJ0IGRtYSB0cmFuc2ZlcgotI2RlZmluZSAgUExYX0RNQV9BQk9SVF9CSVQJMHg0CS8vIGFib3J0IGRtYSB0cmFuc2ZlcgotI2RlZmluZSAgUExYX0NMRUFSX0RNQV9JTlRSX0JJVAkweDgJLy8gY2xlYXIgZG1hIGludGVycnVwdAotI2RlZmluZSAgUExYX0RNQV9ET05FX0JJVAkweDEwCS8vIHRyYW5zZmVyIGRvbmUgc3RhdHVzIGJpdAorI2RlZmluZSAgUExYX0RNQV9FTl9CSVQJMHgxCS8qICBlbmFibGUgZG1hIGNoYW5uZWwgKi8KKyNkZWZpbmUgIFBMWF9ETUFfU1RBUlRfQklUCTB4MgkvKiAgc3RhcnQgZG1hIHRyYW5zZmVyICovCisjZGVmaW5lICBQTFhfRE1BX0FCT1JUX0JJVAkweDQJLyogIGFib3J0IGRtYSB0cmFuc2ZlciAqLworI2RlZmluZSAgUExYX0NMRUFSX0RNQV9JTlRSX0JJVAkweDgJLyogIGNsZWFyIGRtYSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgIFBMWF9ETUFfRE9ORV9CSVQJMHgxMAkvKiAgdHJhbnNmZXIgZG9uZSBzdGF0dXMgYml0ICovCiAKLSNkZWZpbmUgUExYX0RNQTBfVEhSRVNIT0xEX1JFRwkweGIwCS8vIGNvbW1hbmQgc3RhdHVzIHJlZ2lzdGVyCisjZGVmaW5lIFBMWF9ETUEwX1RIUkVTSE9MRF9SRUcJMHhiMAkvKiAgY29tbWFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KIAogLyoKICAqIEFjY2Vzc2VzIG5lYXIgdGhlIGVuZCBvZiBtZW1vcnkgY2FuIGNhdXNlIHRoZSBQTFggY2hpcApAQCAtMzkyLDEyICszOTIsMTIgQEAKIAllbHNlCiAJCWRtYV9jc19hZGRyID0gaW9iYXNlICsgUExYX0RNQTBfQ1NfUkVHOwogCi0JLy8gYWJvcnQgZG1hIHRyYW5zZmVyIGlmIG5lY2Vzc2FyeQorCS8qICBhYm9ydCBkbWEgdHJhbnNmZXIgaWYgbmVjZXNzYXJ5ICovCiAJZG1hX3N0YXR1cyA9IHJlYWRiKGRtYV9jc19hZGRyKTsKLQlpZiAoKGRtYV9zdGF0dXMgJiBQTFhfRE1BX0VOX0JJVCkgPT0gMCkgeworCWlmICgoZG1hX3N0YXR1cyAmIFBMWF9ETUFfRU5fQklUKSA9PSAwKQogCQlyZXR1cm4gMDsKLQl9Ci0JLy8gd2FpdCB0byBtYWtlIHN1cmUgZG9uZSBiaXQgaXMgemVybworCisJLyogIHdhaXQgdG8gbWFrZSBzdXJlIGRvbmUgYml0IGlzIHplcm8gKi8KIAlmb3IgKGkgPSAwOyAoZG1hX3N0YXR1cyAmIFBMWF9ETUFfRE9ORV9CSVQpICYmIGkgPCB0aW1lb3V0OyBpKyspIHsKIAkJY29tZWRpX3VkZWxheSgxKTsKIAkJZG1hX3N0YXR1cyA9IHJlYWRiKGRtYV9jc19hZGRyKTsKQEAgLTQwOCw5ICs0MDgsOSBAQAogCQkJY2hhbm5lbCk7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KLQkvLyBkaXNhYmxlIGFuZCBhYm9ydCBjaGFubmVsCisJLyogIGRpc2FibGUgYW5kIGFib3J0IGNoYW5uZWwgKi8KIAl3cml0ZWIoUExYX0RNQV9BQk9SVF9CSVQsIGRtYV9jc19hZGRyKTsKLQkvLyB3YWl0IGZvciBkbWEgZG9uZSBiaXQKKwkvKiAgd2FpdCBmb3IgZG1hIGRvbmUgYml0ICovCiAJZG1hX3N0YXR1cyA9IHJlYWRiKGRtYV9jc19hZGRyKTsKIAlmb3IgKGkgPSAwOyAoZG1hX3N0YXR1cyAmIFBMWF9ETUFfRE9ORV9CSVQpID09IDAgJiYgaSA8IHRpbWVvdXQ7IGkrKykgewogCQljb21lZGlfdWRlbGF5KDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BvYy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMGJmNjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcG9jLmMKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvcG9jLmMKKyAgICBNaW5pLWRyaXZlcnMgZm9yIFBPQyAoUGllY2Ugb2YgQ3JhcCkgYm9hcmRzCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIEZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisvKgorRHJpdmVyOiBwb2MKK0Rlc2NyaXB0aW9uOiBHZW5lcmljIGRyaXZlciBmb3IgdmVyeSBzaW1wbGUgZGV2aWNlcworQXV0aG9yOiBkcworRGV2aWNlczogW0tlaXRobGV5IE1ldHJhYnl0ZV0gREFDLTAyIChkYWMwMiksIFtBZHZhbnRlY2hdIFBDTC03MzMgKHBjbDczMyksCisgIFBDTC03MzQgKHBjbDczNCkKK1VwZGF0ZWQ6IFNhdCwgMTYgTWFyIDIwMDIgMTc6MzQ6NDggLTA4MDAKK1N0YXR1czogdW5rbm93bgorCitUaGlzIGRyaXZlciBpcyBpbmRlbmRlZCB0byBzdXBwb3J0IHZlcnkgc2ltcGxlIElTQS1iYXNlZCBkZXZpY2VzLAoraW5jbHVkaW5nOgorICBkYWMwMiAtIEtlaXRobGV5IERBQy0wMiBhbmFsb2cgb3V0cHV0IGJvYXJkCisgIHBjbDczMyAtIEFkdmFudGVjaCBQQ0wtNzMzCisgIHBjbDczNCAtIEFkdmFudGVjaCBQQ0wtNzM0CisKK0NvbmZpZ3VyYXRpb24gb3B0aW9uczoKKyAgWzBdIC0gSS9PIHBvcnQgYmFzZQorKi8KKworI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgorCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKK3N0YXRpYyBpbnQgcG9jX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHBvY19kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIGludCByZWFkYmFja19pbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0YXRpYyBpbnQgZGFjMDJfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgcGNsNzMzX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBwY2w3MzRfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CisKK3N0cnVjdCBib2FyZGRlZl9zdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IGlvc2l6ZTsKKwlpbnQgKCpzZXR1cCkgKHN0cnVjdCBjb21lZGlfZGV2aWNlICopOworCWludCB0eXBlOworCWludCBuX2NoYW47CisJaW50IG5fYml0czsKKwlpbnQgKCp3aW5zbikgKHN0cnVjdCBjb21lZGlfZGV2aWNlICosIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICosIHN0cnVjdCBjb21lZGlfaW5zbiAqLAorCQl1bnNpZ25lZCBpbnQgKik7CisJaW50ICgqcmluc24pIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqLCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqLCBzdHJ1Y3QgY29tZWRpX2luc24gKiwKKwkJdW5zaWduZWQgaW50ICopOworCWludCAoKmluc25iaXRzKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiwgc3RydWN0IGNvbWVkaV9pbnNuICosCisJCXVuc2lnbmVkIGludCAqKTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2U7Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBib2FyZGRlZl9zdHJ1Y3QgYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJkYWMwMiIsCisJICAgICAgaW9zaXplOgk4LAorCQkJLy9zZXR1cDogICAgICAgICAgICAgICAgZGFjMDJfc2V0dXAsCisJICAgICAgdHlwZToJQ09NRURJX1NVQkRfQU8sCisJICAgICAgbl9jaGFuOgkyLAorCSAgICAgIG5fYml0czoJMTIsCisJICAgICAgd2luc246CWRhYzAyX2FvX3dpbnNuLAorCSAgICAgIHJpbnNuOglyZWFkYmFja19pbnNuLAorCSAgICAgIHJhbmdlOgkmcmFuZ2VfdW5rbm93biwKKwkJfSwKKwl7CisJICAgICAgbmFtZToJInBjbDczMyIsCisJICAgICAgaW9zaXplOgk0LAorCSAgICAgIHR5cGU6CUNPTUVESV9TVUJEX0RJLAorCSAgICAgIG5fY2hhbjoJMzIsCisJICAgICAgbl9iaXRzOgkxLAorCSAgICAgIGluc25iaXRzOnBjbDczM19pbnNuX2JpdHMsCisJICAgICAgcmFuZ2U6CSZyYW5nZV9kaWdpdGFsLAorCQl9LAorCXsKKwkgICAgICBuYW1lOgkicGNsNzM0IiwKKwkgICAgICBpb3NpemU6CTQsCisJICAgICAgdHlwZToJQ09NRURJX1NVQkRfRE8sCisJICAgICAgbl9jaGFuOgkzMiwKKwkgICAgICBuX2JpdHM6CTEsCisJICAgICAgaW5zbmJpdHM6cGNsNzM0X2luc25fYml0cywKKwkgICAgICByYW5nZToJJnJhbmdlX2RpZ2l0YWwsCisJCX0sCit9OworCisjZGVmaW5lIG5fYm9hcmRzIChzaXplb2YoYm9hcmRzKS9zaXplb2YoYm9hcmRzWzBdKSkKKyNkZWZpbmUgdGhpc19ib2FyZCAoKGNvbnN0IHN0cnVjdCBib2FyZGRlZl9zdHJ1Y3QgKilkZXYtPmJvYXJkX3B0cikKKworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9wb2MgPSB7CisgICAgICBkcml2ZXJfbmFtZToicG9jIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpwb2NfYXR0YWNoLAorICAgICAgZGV0YWNoOnBvY19kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZib2FyZHNbMF0ubmFtZSwKKyAgICAgIG51bV9uYW1lczpuX2JvYXJkcywKKyAgICAgIG9mZnNldDpzaXplb2YoYm9hcmRzWzBdKSwKK307CisKK3N0YXRpYyBpbnQgcG9jX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgaW9zaXplOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogcG9jOiB1c2luZyAlcyBpb2Jhc2UgMHglbHhcbiIsIGRldi0+bWlub3IsCisJCXRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJaWYgKGlvYmFzZSA9PSAwKSB7CisJCXByaW50aygiaW8gYmFzZSBhZGRyZXNzIHJlcXVpcmVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaW9zaXplID0gdGhpc19ib2FyZC0+aW9zaXplOworCS8qIGNoZWNrIGlmIGlvIGFkZHJlc3NlcyBhcmUgYXZhaWxhYmxlICovCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIGlvc2l6ZSwgImRhYzAyIikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdDogZmFpbGVkIHRvIGFsbG9jYXRlIHBvcnRzIDB4JWx4IHRvIDB4JWx4XG4iLCBpb2Jhc2UsIGlvYmFzZSArIGlvc2l6ZSAtIDEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDEpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YodW5zaWduZWQgaW50KSAqIHRoaXNfYm9hcmQtPm5fY2hhbikgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJcy0+dHlwZSA9IHRoaXNfYm9hcmQtPnR5cGU7CisJcy0+bl9jaGFuID0gdGhpc19ib2FyZC0+bl9jaGFuOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzX2JvYXJkLT5uX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IHRoaXNfYm9hcmQtPnJhbmdlOworCXMtPmluc25fd3JpdGUgPSB0aGlzX2JvYXJkLT53aW5zbjsKKwlzLT5pbnNuX3JlYWQgPSB0aGlzX2JvYXJkLT5yaW5zbjsKKwlzLT5pbnNuX2JpdHMgPSB0aGlzX2JvYXJkLT5pbnNuYml0czsKKwlpZiAocy0+dHlwZSA9PSBDT01FRElfU1VCRF9BTyB8fCBzLT50eXBlID09IENPTUVESV9TVUJEX0RPKSB7CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwb2NfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCS8qIG9ubHkgZnJlZSBzdHVmZiBpZiBpdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCAqLworCWlmIChkZXYtPmlvYmFzZSkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNfYm9hcmQtPmlvc2l6ZSk7CisKKwlwcmludGsoImNvbWVkaSVkOiBkYWMwMjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRiYWNrX2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuOworCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWRhdGFbMF0gPSAoKHVuc2lnbmVkIGludCAqKSBkZXYtPnByaXZhdGUpW2NoYW5dOworCisJcmV0dXJuIDE7Cit9CisKKy8qIERBQy0wMiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgREFDMDJfTFNCKGEpCSgyICogYSkKKyNkZWZpbmUgREFDMDJfTVNCKGEpCSgyICogYSArIDEpCisKK3N0YXRpYyBpbnQgZGFjMDJfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCB0ZW1wOworCWludCBjaGFuOworCWludCBvdXRwdXQ7CisKKwljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJKCh1bnNpZ25lZCBpbnQgKikgZGV2LT5wcml2YXRlKVtjaGFuXSA9IGRhdGFbMF07CisJb3V0cHV0ID0gZGF0YVswXTsKKyNpZmRlZiB3cm9uZworCS8vIGNvbnZlcnQgdG8gY29tcGxlbWVudGFyeSBiaW5hcnkgaWYgcmFuZ2UgaXMgYmlwb2xhcgorCWlmICgoQ1JfUkFOR0UoaW5zbi0+Y2hhbnNwZWMpICYgMHgyKSA9PSAwKQorCQlvdXRwdXQgPSB+b3V0cHV0OworI2VuZGlmCisJdGVtcCA9IChvdXRwdXQgPDwgNCkgJiAweGYwOworCW91dGIodGVtcCwgZGV2LT5pb2Jhc2UgKyBEQUMwMl9MU0IoY2hhbikpOworCXRlbXAgPSAob3V0cHV0ID4+IDQpICYgMHhmZjsKKwlvdXRiKHRlbXAsIGRldi0+aW9iYXNlICsgREFDMDJfTVNCKGNoYW4pKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHBjbDczM19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YVsxXSA9IGluYihkZXYtPmlvYmFzZSArIDApOworCWRhdGFbMV0gfD0gKGluYihkZXYtPmlvYmFzZSArIDEpIDw8IDgpOworCWRhdGFbMV0gfD0gKGluYihkZXYtPmlvYmFzZSArIDIpIDw8IDE2KTsKKwlkYXRhWzFdIHw9IChpbmIoZGV2LT5pb2Jhc2UgKyAzKSA8PCAyNCk7CisKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBwY2w3MzRfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gKGRhdGFbMF0gJiBkYXRhWzFdKTsKKwkJaWYgKChkYXRhWzBdID4+IDApICYgMHhmZikKKwkJCW91dGIoKHMtPnN0YXRlID4+IDApICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyAwKTsKKwkJaWYgKChkYXRhWzBdID4+IDgpICYgMHhmZikKKwkJCW91dGIoKHMtPnN0YXRlID4+IDgpICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyAxKTsKKwkJaWYgKChkYXRhWzBdID4+IDE2KSAmIDB4ZmYpCisJCQlvdXRiKChzLT5zdGF0ZSA+PiAxNikgJiAweGZmLCBkZXYtPmlvYmFzZSArIDIpOworCQlpZiAoKGRhdGFbMF0gPj4gMjQpICYgMHhmZikKKwkJCW91dGIoKHMtPnN0YXRlID4+IDI0KSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgMyk7CisJfQorCWRhdGFbMV0gPSBzLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3BvYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1YzQ1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9xdWF0ZWNoX2RhcXBfY3MuYwpAQCAtMCwwICsxLDEzNjMgQEAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgY29tZWRpL2RyaXZlcnMvcXVhdGVjaF9kYXFwX2NzLmMKKworICAgIFF1YXRlY2ggREFRUCBQQ01DSUEgZGF0YSBjYXB0dXJlIGNhcmRzIENPTUVESSBjbGllbnQgZHJpdmVyCisgICAgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAzIEJyZW50IEJhY2NhbGEgPGJhY2NhbGFAZnJlZXNvZnQub3JnPgorICAgIFRoZSBEQVFQIGludGVyZmFjZSBjb2RlIGluIHRoaXMgZmlsZSBpcyByZWxlYXNlZCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluLgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMTk5OCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKyAgICBodHRwOi8vd3d3LmNvbWVkaS5vcmcvCisKKyAgICBxdWF0ZWNoX2RhcXBfY3MuYyAxLjEwCisKKyAgICBEb2N1bWVudGF0aW9uIGZvciB0aGUgREFRUCBQQ01DSUEgY2FyZHMgY2FuIGJlIGZvdW5kIG9uIFF1YXRlY2gncyBzaXRlOgorCisgICAgICAgICAgICAgICAgZnRwOi8vZnRwLnF1YXRlY2guY29tL01hbnVhbHMvZGFxcC0yMDgucGRmCisKKyAgICBUaGlzIG1hbnVhbCBpcyBmb3IgYm90aCB0aGUgREFRUC0yMDggYW5kIHRoZSBEQVFQLTMwOC4KKworICAgIFdoYXQgd29ya3M6CisKKwktIEEvRCBjb252ZXJzaW9uCisJICAgIC0gOCBjaGFubmVscworCSAgICAtIDQgZ2FpbiByYW5nZXMKKwkgICAgLSBncm91bmQgcmVmIG9yIGRpZmZlcmVudGlhbAorCSAgICAtIHNpbmdsZS1zaG90IGFuZCB0aW1lZCBib3RoIHN1cHBvcnRlZAorCS0gRC9BIGNvbnZlcnNpb24sIHNpbmdsZS1zaG90CisJLSBkaWdpdGFsIEkvTworCisgICAgV2hhdCBkb2Vzbid0OgorCisJLSBhbnkga2luZCBvZiB0cmlnZ2VyaW5nIC0gZXh0ZXJuYWwgb3IgRC9BIGNoYW5uZWwgMQorCS0gdGhlIGNhcmQncyBvcHRpb25hbCBleHBhbnNpb24gYm9hcmQKKwktIHRoZSBjYXJkJ3MgdGltZXIgKGZvciBhbnl0aGluZyBvdGhlciB0aGFuIEEvRCBjb252ZXJzaW9uKQorCS0gRC9BIHVwZGF0ZSBtb2RlcyBvdGhlciB0aGFuIGltbWVkaWF0ZSAoaS5lLCB0aW1lZCkKKwktIGZhbmNpZXIgdGltaW5nIG1vZGVzCisJLSBzZXR0aW5nIGNhcmQncyBGSUZPIGJ1ZmZlciB0aHJlc2hvbGRzIHRvIGFueXRoaW5nIGJ1dCBkZWZhdWx0CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKgorRHJpdmVyOiBxdWF0ZWNoX2RhcXBfY3MKK0Rlc2NyaXB0aW9uOiBRdWF0ZWNoIERBUVAgUENNQ0lBIGRhdGEgY2FwdHVyZSBjYXJkcworQXV0aG9yOiBCcmVudCBCYWNjYWxhIDxiYWNjYWxhQGZyZWVzb2Z0Lm9yZz4KK1N0YXR1czogd29ya3MKK0RldmljZXM6IFtRdWF0ZWNoXSBEQVFQLTIwOCAoZGFxcCksIERBUVAtMzA4CisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKyNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KKyNpbmNsdWRlIDxwY21jaWEvY3MuaD4KKyNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CisjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgorI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgorCisvKgorICAgQWxsIHRoZSBQQ01DSUEgbW9kdWxlcyB1c2UgUENNQ0lBX0RFQlVHIHRvIGNvbnRyb2wgZGVidWdnaW5nLiAgSWYKKyAgIHlvdSBkbyBub3QgZGVmaW5lIFBDTUNJQV9ERUJVRyBhdCBhbGwsIGFsbCB0aGUgZGVidWcgY29kZSB3aWxsIGJlCisgICBsZWZ0IG91dC4gIElmIHlvdSBjb21waWxlIHdpdGggUENNQ0lBX0RFQlVHPTAsIHRoZSBkZWJ1ZyBjb2RlIHdpbGwKKyAgIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIC0tIGJ1dCBpdCBjYW4gdGhlbiBiZSBlbmFibGVkIGZvciBzcGVjaWZpYworICAgbW9kdWxlcyBhdCBsb2FkIHRpbWUgd2l0aCBhICdwY19kZWJ1Zz0jJyBvcHRpb24gdG8gaW5zbW9kLgorKi8KKworI2lmZGVmIFBDTUNJQV9ERUJVRworc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKK21vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwNjQ0KTsKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKK3N0YXRpYyBjaGFyICp2ZXJzaW9uID0gInF1YXRlY2hfZGFxcF9jcy5jIDEuMTAgMjAwMy8wNC8yMSAoQnJlbnQgQmFjY2FsYSkiOworI2Vsc2UKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKKyNlbmRpZgorCisvKiBNYXhpbXVtIG51bWJlciBvZiBzZXBhcmF0ZSBEQVFQIGRldmljZXMgd2UnbGwgYWxsb3cgKi8KKyNkZWZpbmUgTUFYX0RFViAgICAgICAgIDQKKworc3RydWN0IGxvY2FsX2luZm9fdCB7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbms7CisJZGV2X25vZGVfdCBub2RlOworCWludCBzdG9wOworCWludCB0YWJsZV9pbmRleDsKKwljaGFyIGJvYXJkX25hbWVbMzJdOworCisJZW51bSB7IHNlbWFwaG9yZSwgYnVmZmVyIH0gaW50ZXJydXB0X21vZGU7CisKKwlzdHJ1Y3Qgc2VtYXBob3JlIGVvczsKKworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGNvdW50OworfTsKKworLyogQSBsaXN0IG9mICJpbnN0YW5jZXMiIG9mIHRoZSBkZXZpY2UuICovCisKK3N0YXRpYyBzdHJ1Y3QgbG9jYWxfaW5mb190ICpkZXZfdGFibGVbTUFYX0RFVl0gPSB7IE5VTEwsIC8qIC4uLiAqLyAgfTsKKworLyogVGhlIERBUVAgY29tbXVuaWNhdGVzIHdpdGggdGhlIHN5c3RlbSB0aHJvdWdoIGEgMTYgYnl0ZSBJL08gd2luZG93LiAqLworCisjZGVmaW5lIERBUVBfRklGT19TSVpFCQk0MDk2CisKKyNkZWZpbmUgREFRUF9GSUZPCQkwCisjZGVmaW5lIERBUVBfU0NBTkxJU1QJCTEKKyNkZWZpbmUgREFRUF9DT05UUk9MCQkyCisjZGVmaW5lIERBUVBfU1RBVFVTCQkyCisjZGVmaW5lIERBUVBfRElHSVRBTF9JTwkJMworI2RlZmluZSBEQVFQX1BBQ0VSX0xPVwkJNAorI2RlZmluZSBEQVFQX1BBQ0VSX01JRAkJNQorI2RlZmluZSBEQVFQX1BBQ0VSX0hJR0gJCTYKKyNkZWZpbmUgREFRUF9DT01NQU5ECQk3CisjZGVmaW5lIERBUVBfREEJCQk4CisjZGVmaW5lIERBUVBfVElNRVIJCTEwCisjZGVmaW5lIERBUVBfQVVYCQkxNQorCisjZGVmaW5lIERBUVBfU0NBTkxJU1RfRElGRkVSRU5USUFMCTB4NDAwMAorI2RlZmluZSBEQVFQX1NDQU5MSVNUX0dBSU4oeCkJCSgoeCk8PDEyKQorI2RlZmluZSBEQVFQX1NDQU5MSVNUX0NIQU5ORUwoeCkJKCh4KTw8OCkKKyNkZWZpbmUgREFRUF9TQ0FOTElTVF9TVEFSVAkJMHgwMDgwCisjZGVmaW5lIERBUVBfU0NBTkxJU1RfRVhUX0dBSU4oeCkJKCh4KTw8NCkKKyNkZWZpbmUgREFRUF9TQ0FOTElTVF9FWFRfQ0hBTk5FTCh4KQkoeCkKKworI2RlZmluZSBEQVFQX0NPTlRST0xfUEFDRVJfMTAwa0h6CTB4YzAKKyNkZWZpbmUgREFRUF9DT05UUk9MX1BBQ0VSXzFNSHoJCTB4ODAKKyNkZWZpbmUgREFRUF9DT05UUk9MX1BBQ0VSXzVNSHoJCTB4NDAKKyNkZWZpbmUgREFRUF9DT05UUk9MX1BBQ0VSX0VYVEVSTkFMCTB4MDAKKyNkZWZpbmUgREFRUF9DT05UT1JMX0VYUEFOU0lPTgkJMHgyMAorI2RlZmluZSBEQVFQX0NPTlRST0xfRU9TX0lOVF9FTkFCTEUJMHgxMAorI2RlZmluZSBEQVFQX0NPTlRST0xfRklGT19JTlRfRU5BQkxFCTB4MDgKKyNkZWZpbmUgREFRUF9DT05UUk9MX1RSSUdHRVJfT05FU0hPVAkweDAwCisjZGVmaW5lIERBUVBfQ09OVFJPTF9UUklHR0VSX0NPTlRJTlVPVVMJMHgwNAorI2RlZmluZSBEQVFQX0NPTlRST0xfVFJJR0dFUl9JTlRFUk5BTAkweDAwCisjZGVmaW5lIERBUVBfQ09OVFJPTF9UUklHR0VSX0VYVEVSTkFMCTB4MDIKKyNkZWZpbmUgREFRUF9DT05UUk9MX1RSSUdHRVJfUklTSU5HCTB4MDAKKyNkZWZpbmUgREFRUF9DT05UUk9MX1RSSUdHRVJfRkFMTElORwkweDAxCisKKyNkZWZpbmUgREFRUF9TVEFUVVNfSURMRQkJMHg4MAorI2RlZmluZSBEQVFQX1NUQVRVU19SVU5OSU5HCQkweDQwCisjZGVmaW5lIERBUVBfU1RBVFVTX0VWRU5UUwkJMHgzOAorI2RlZmluZSBEQVFQX1NUQVRVU19EQVRBX0xPU1QJCTB4MjAKKyNkZWZpbmUgREFRUF9TVEFUVVNfRU5EX09GX1NDQU4JCTB4MTAKKyNkZWZpbmUgREFRUF9TVEFUVVNfRklGT19USFJFU0hPTEQJMHgwOAorI2RlZmluZSBEQVFQX1NUQVRVU19GSUZPX0ZVTEwJCTB4MDQKKyNkZWZpbmUgREFRUF9TVEFUVVNfRklGT19ORUFSRlVMTAkweDAyCisjZGVmaW5lIERBUVBfU1RBVFVTX0ZJRk9fRU1QVFkJCTB4MDEKKworI2RlZmluZSBEQVFQX0NPTU1BTkRfQVJNCQkweDgwCisjZGVmaW5lIERBUVBfQ09NTUFORF9SU1RGCQkweDQwCisjZGVmaW5lIERBUVBfQ09NTUFORF9SU1RRCQkweDIwCisjZGVmaW5lIERBUVBfQ09NTUFORF9TVE9QCQkweDEwCisjZGVmaW5lIERBUVBfQ09NTUFORF9MQVRDSAkJMHgwOAorI2RlZmluZSBEQVFQX0NPTU1BTkRfMTAwa0h6CQkweDAwCisjZGVmaW5lIERBUVBfQ09NTUFORF81MGtIegkJMHgwMgorI2RlZmluZSBEQVFQX0NPTU1BTkRfMjVrSHoJCTB4MDQKKyNkZWZpbmUgREFRUF9DT01NQU5EX0ZJRk9fREFUQQkJMHgwMQorI2RlZmluZSBEQVFQX0NPTU1BTkRfRklGT19QUk9HUkFNCTB4MDAKKworI2RlZmluZSBEQVFQX0FVWF9UUklHR0VSX1RUTAkJMHgwMAorI2RlZmluZSBEQVFQX0FVWF9UUklHR0VSX0FOQUxPRwkJMHg4MAorI2RlZmluZSBEQVFQX0FVWF9UUklHR0VSX1BSRVRSSUdHRVIJMHg0MAorI2RlZmluZSBEQVFQX0FVWF9USU1FUl9JTlRfRU5BQkxFCTB4MjAKKyNkZWZpbmUgREFRUF9BVVhfVElNRVJfUkVMT0FECQkweDAwCisjZGVmaW5lIERBUVBfQVVYX1RJTUVSX1BBVVNFCQkweDA4CisjZGVmaW5lIERBUVBfQVVYX1RJTUVSX0dPCQkweDEwCisjZGVmaW5lIERBUVBfQVVYX1RJTUVSX0dPX0VYVEVSTkFMCTB4MTgKKyNkZWZpbmUgREFRUF9BVVhfVElNRVJfRVhURVJOQUxfU1JDCTB4MDQKKyNkZWZpbmUgREFRUF9BVVhfVElNRVJfSU5URVJOQUxfU1JDCTB4MDAKKyNkZWZpbmUgREFRUF9BVVhfREFfRElSRUNUCQkweDAwCisjZGVmaW5lIERBUVBfQVVYX0RBX09WRVJGTE9XCQkweDAxCisjZGVmaW5lIERBUVBfQVVYX0RBX0VYVEVSTkFMCQkweDAyCisjZGVmaW5lIERBUVBfQVVYX0RBX1BBQ0VSCQkweDAzCisKKyNkZWZpbmUgREFRUF9BVVhfUlVOTklORwkJMHg4MAorI2RlZmluZSBEQVFQX0FVWF9UUklHR0VSRUQJCTB4NDAKKyNkZWZpbmUgREFRUF9BVVhfREFfQlVGRkVSCQkweDIwCisjZGVmaW5lIERBUVBfQVVYX1RJTUVSX09WRVJGTE9XCQkweDEwCisjZGVmaW5lIERBUVBfQVVYX0NPTlZFUlNJT04JCTB4MDgKKyNkZWZpbmUgREFRUF9BVVhfREFUQV9MT1NUCQkweDA0CisjZGVmaW5lIERBUVBfQVVYX0ZJRk9fTkVBUkZVTEwJCTB4MDIKKyNkZWZpbmUgREFRUF9BVVhfRklGT19FTVBUWQkJMHgwMQorCisvKiBUaGVzZSByYW5nZSBzdHJ1Y3R1cmVzIHRlbGwgQ09NRURJIGhvdyB0aGUgc2FtcGxlIHZhbHVlcyBtYXAgdG8KKyAqIHZvbHRhZ2VzLiAgVGhlIEEvRCBjb252ZXJ0ZXIgaGFzIGZvdXIgcmFuZ2VzOiArLy0gMTBWIHRocm91Z2gKKyAqICsvLSAxLjI1ViwgYW5kIHRoZSBEL0EgY29udmVydGVyIGhhcyBvbmx5IG9uZTogKy8tIDVWLgorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kYXFwX2FpID0geyA0LCB7CisJCQlCSVBfUkFOR0UoMTApLAorCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDIuNSksCisJCQlCSVBfUkFOR0UoMS4yNSkKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZGFxcF9hbyA9IHsgMSwge0JJUF9SQU5HRSg1KX0gfTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qIGNvbWVkaSBpbnRlcmZhY2UgY29kZSAqLworCitzdGF0aWMgaW50IGRhcXBfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgZGFxcF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9kYXFwID0geworICAgICAgZHJpdmVyX25hbWU6InF1YXRlY2hfZGFxcF9jcyIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6ZGFxcF9hdHRhY2gsCisgICAgICBkZXRhY2g6ZGFxcF9kZXRhY2gsCit9OworCisjaWZkZWYgREFRUF9ERUJVRworCitzdGF0aWMgdm9pZCBkYXFwX2R1bXAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJEQVFQOiBzdGF0dXMgJTAyeDsgYXV4IHN0YXR1cyAlMDJ4XG4iLAorCQlpbmIoZGV2LT5pb2Jhc2UgKyBEQVFQX1NUQVRVUyksIGluYihkZXYtPmlvYmFzZSArIERBUVBfQVVYKSk7Cit9CisKK3N0YXRpYyB2b2lkIGhleF9kdW1wKGNoYXIgKnN0ciwgdm9pZCAqcHRyLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgKmNwdHIgPSBwdHI7CisJaW50IGk7CisKKwlwcmludGsoc3RyKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoaSAlIDE2ID09IDApIHsKKwkJCXByaW50aygiXG4weCUwOHg6IiwgKHVuc2lnbmVkIGludCljcHRyKTsKKwkJfQorCQlwcmludGsoIiAlMDJ4IiwgKihjcHRyKyspKTsKKwl9CisJcHJpbnRrKCJcbiIpOworfQorCisjZW5kaWYKKworLyogQ2FuY2VsIGEgcnVubmluZyBhY3F1aXNpdGlvbiAqLworCitzdGF0aWMgaW50IGRhcXBfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMpCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSAoc3RydWN0IGxvY2FsX2luZm9fdCAqKSBzLT5wcml2YXRlOworCisJaWYgKGxvY2FsLT5zdG9wKSB7CisJCXJldHVybiAtRUlPOworCX0KKworCW91dGIoREFRUF9DT01NQU5EX1NUT1AsIGRldi0+aW9iYXNlICsgREFRUF9DT01NQU5EKTsKKworCS8qIGZsdXNoIGFueSBsaW5ndXJpbmcgZGF0YSBpbiBGSUZPIC0gc3VwZXJmbHVvdXMgaGVyZSAqLworCS8qIG91dGIoREFRUF9DT01NQU5EX1JTVEYsIGRldi0+aW9iYXNlK0RBUVBfQ09NTUFORCk7ICovCisKKwlsb2NhbC0+aW50ZXJydXB0X21vZGUgPSBzZW1hcGhvcmU7CisKKwlyZXR1cm4gMDsKK30KKworLyogSW50ZXJydXB0IGhhbmRsZXIKKyAqCisgKiBPcGVyYXRlcyBpbiBvbmUgb2YgdHdvIG1vZGVzLiAgSWYgbG9jYWwtPmludGVycnVwdF9tb2RlIGlzCisgKiAnc2VtYXBob3JlJywganVzdCBzaWduYWwgdGhlIGxvY2FsLT5lb3Mgc2VtYXBob3JlIGFuZCByZXR1cm4KKyAqIChvbmUtc2hvdCBtb2RlKS4gIE90aGVyd2lzZSAoY29udGludW91cyBtb2RlKSwgcmVhZCBkYXRhIGluIGZyb20KKyAqIHRoZSBjYXJkLCB0cmFuc2ZlciBpdCB0byB0aGUgYnVmZmVyIHByb3ZpZGVkIGJ5IHRoZSBoaWdoZXItbGV2ZWwKKyAqIGNvbWVkaSBrZXJuZWwgbW9kdWxlLCBhbmQgc2lnbmFsIHZhcmlvdXMgY29tZWRpIGNhbGxiYWNrIHJvdXRpbmVzLAorICogd2hpY2ggcnVuIHByZXR0eSBxdWljay4KKyAqLworCitzdGF0aWMgdm9pZCBkYXFwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQgUFRfUkVHU19BUkcpCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSAoc3RydWN0IGxvY2FsX2luZm9fdCAqKSBkZXZfaWQ7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgbG9vcF9saW1pdCA9IDEwMDAwOworCWludCBzdGF0dXM7CisKKwlpZiAobG9jYWwgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiZGFxcF9pbnRlcnJ1cHQoKTogaXJxICVkIGZvciB1bmtub3duIGRldmljZS5cbiIsIGlycSk7CisJCXJldHVybjsKKwl9CisKKwlkZXYgPSBsb2NhbC0+ZGV2OworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJkYXFwX2ludGVycnVwdCgpOiBOVUxMIGNvbWVkaV9kZXZpY2UuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghZGV2LT5hdHRhY2hlZCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiZGFxcF9pbnRlcnJ1cHQoKTogc3RydWN0IGNvbWVkaV9kZXZpY2Ugbm90IHlldCBhdHRhY2hlZC5cbiIpOworCQlyZXR1cm47CisJfQorCisJcyA9IGxvY2FsLT5zOworCWlmIChzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImRhcXBfaW50ZXJydXB0KCk6IE5VTEwgY29tZWRpX3N1YmRldmljZS5cbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIHMtPnByaXZhdGUgIT0gbG9jYWwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImRhcXBfaW50ZXJydXB0KCk6IGludmFsaWQgY29tZWRpX3N1YmRldmljZS5cbiIpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChsb2NhbC0+aW50ZXJydXB0X21vZGUpIHsKKworCWNhc2Ugc2VtYXBob3JlOgorCisJCXVwKCZsb2NhbC0+ZW9zKTsKKwkJYnJlYWs7CisKKwljYXNlIGJ1ZmZlcjoKKworCQl3aGlsZSAoISgoc3RhdHVzID0gaW5iKGRldi0+aW9iYXNlICsgREFRUF9TVEFUVVMpKQorCQkJCSYgREFRUF9TVEFUVVNfRklGT19FTVBUWSkpIHsKKworCQkJc2hvcnQgZGF0YTsKKworCQkJaWYgKHN0YXR1cyAmIERBUVBfU1RBVFVTX0RBVEFfTE9TVCkgeworCQkJCXMtPmFzeW5jLT5ldmVudHMgfD0KKwkJCQkJQ09NRURJX0NCX0VPQSB8IENPTUVESV9DQl9PVkVSRkxPVzsKKwkJCQlwcmludGsoImRhcXA6IGRhdGEgbG9zdFxuIik7CisJCQkJZGFxcF9haV9jYW5jZWwoZGV2LCBzKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJZGF0YSA9IGluYihkZXYtPmlvYmFzZSArIERBUVBfRklGTyk7CisJCQlkYXRhIHw9IGluYihkZXYtPmlvYmFzZSArIERBUVBfRklGTykgPDwgODsKKwkJCWRhdGEgXj0gMHg4MDAwOworCisJCQljb21lZGlfYnVmX3B1dChzLT5hc3luYywgZGF0YSk7CisKKwkJCS8qIElmIHRoZXJlJ3MgYSBsaW1pdCwgZGVjcmVtZW50IGl0CisJCQkgKiBhbmQgc3RvcCBjb252ZXJzaW9uIGlmIHplcm8KKwkJCSAqLworCisJCQlpZiAobG9jYWwtPmNvdW50ID4gMCkgeworCQkJCWxvY2FsLT5jb3VudC0tOworCQkJCWlmIChsb2NhbC0+Y291bnQgPT0gMCkgeworCQkJCQlkYXFwX2FpX2NhbmNlbChkZXYsIHMpOworCQkJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0E7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKChsb29wX2xpbWl0LS0pIDw9IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAobG9vcF9saW1pdCA8PSAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJImxvb3BfbGltaXQgcmVhY2hlZCBpbiBkYXFwX2ludGVycnVwdCgpXG4iKTsKKwkJCWRhcXBfYWlfY2FuY2VsKGRldiwgcyk7CisJCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FT0EgfCBDT01FRElfQ0JfRVJST1I7CisJCX0KKworCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9CTE9DSzsKKworCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKKwl9Cit9CisKKy8qIE9uZS1zaG90IGFuYWxvZyBkYXRhIGFjcXVpc2l0aW9uIHJvdXRpbmUgKi8KKworc3RhdGljIGludCBkYXFwX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSAoc3RydWN0IGxvY2FsX2luZm9fdCAqKSBzLT5wcml2YXRlOworCWludCBpOworCWludCB2OworCWludCBjb3VudGVyID0gMTAwMDA7CisKKwlpZiAobG9jYWwtPnN0b3ApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogU3RvcCBhbnkgcnVubmluZyBjb252ZXJzaW9uICovCisJZGFxcF9haV9jYW5jZWwoZGV2LCBzKTsKKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVFQX0FVWCk7CisKKwkvKiBSZXNldCBzY2FuIGxpc3QgcXVldWUgKi8KKwlvdXRiKERBUVBfQ09NTUFORF9SU1RRLCBkZXYtPmlvYmFzZSArIERBUVBfQ09NTUFORCk7CisKKwkvKiBQcm9ncmFtIG9uZSBzY2FuIGxpc3QgZW50cnkgKi8KKworCXYgPSBEQVFQX1NDQU5MSVNUX0NIQU5ORUwoQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpCisJCXwgREFRUF9TQ0FOTElTVF9HQUlOKENSX1JBTkdFKGluc24tPmNoYW5zcGVjKSk7CisKKwlpZiAoQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgPT0gQVJFRl9ESUZGKSB7CisJCXYgfD0gREFRUF9TQ0FOTElTVF9ESUZGRVJFTlRJQUw7CisJfQorCisJdiB8PSBEQVFQX1NDQU5MSVNUX1NUQVJUOworCisJb3V0Yih2ICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX1NDQU5MSVNUKTsKKwlvdXRiKHYgPj4gOCwgZGV2LT5pb2Jhc2UgKyBEQVFQX1NDQU5MSVNUKTsKKworCS8qIFJlc2V0IGRhdGEgRklGTyAoc2VlIHBhZ2UgMjggb2YgREFRUCBVc2VyJ3MgTWFudWFsKSAqLworCisJb3V0YihEQVFQX0NPTU1BTkRfUlNURiwgZGV2LT5pb2Jhc2UgKyBEQVFQX0NPTU1BTkQpOworCisJLyogU2V0IHRyaWdnZXIgKi8KKworCXYgPSBEQVFQX0NPTlRST0xfVFJJR0dFUl9PTkVTSE9UIHwgREFRUF9DT05UUk9MX1RSSUdHRVJfSU5URVJOQUwKKwkJfCBEQVFQX0NPTlRST0xfUEFDRVJfMTAwa0h6IHwgREFRUF9DT05UUk9MX0VPU19JTlRfRU5BQkxFOworCisJb3V0Yih2LCBkZXYtPmlvYmFzZSArIERBUVBfQ09OVFJPTCk7CisKKwkvKiBSZXNldCBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIChteSBjYXJkIGhhcyBhIHRlbmRhbmN5IHRvIHJlcXVpcmUKKwkgKiByZXF1aXJlIG11bHRpcGxlIHJlYWRzIG9uIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdG8gYWNoaWV2ZSB0aGlzKQorCSAqLworCisJd2hpbGUgKC0tY291bnRlcgorCQkmJiAoaW5iKGRldi0+aW9iYXNlICsgREFRUF9TVEFUVVMpICYgREFRUF9TVEFUVVNfRVZFTlRTKSkgOworCWlmICghY291bnRlcikgeworCQlwcmludGsoImRhcXA6IGNvdWxkbid0IGNsZWFyIGludGVycnVwdHMgaW4gc3RhdHVzIHJlZ2lzdGVyXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIE1ha2Ugc3VyZSBzZW1hcGhvcmUgaXMgYmxvY2tlZCAqLworCXNlbWFfaW5pdCgmbG9jYWwtPmVvcywgMCk7CisJbG9jYWwtPmludGVycnVwdF9tb2RlID0gc2VtYXBob3JlOworCWxvY2FsLT5kZXYgPSBkZXY7CisJbG9jYWwtPnMgPSBzOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCisJCS8qIFN0YXJ0IGNvbnZlcnNpb24gKi8KKwkJb3V0YihEQVFQX0NPTU1BTkRfQVJNIHwgREFRUF9DT01NQU5EX0ZJRk9fREFUQSwKKwkJCWRldi0+aW9iYXNlICsgREFRUF9DT01NQU5EKTsKKworCQkvKiBXYWl0IGZvciBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIHRvIHVuYmxvY2sgc2VtYXBob3JlICovCisJCS8qIE1heWJlIGNvdWxkIHVzZSBhIHRpbWVvdXQgaGVyZSwgYnV0IGl0J3MgaW50ZXJydXB0aWJsZSAqLworCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZsb2NhbC0+ZW9zKSkKKwkJCXJldHVybiAtRUlOVFI7CisKKwkJZGF0YVtpXSA9IGluYihkZXYtPmlvYmFzZSArIERBUVBfRklGTyk7CisJCWRhdGFbaV0gfD0gaW5iKGRldi0+aW9iYXNlICsgREFRUF9GSUZPKSA8PCA4OworCQlkYXRhW2ldIF49IDB4ODAwMDsKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyogVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyBucyBuYW5vc2Vjb25kcyB0byBhIGNvdW50ZXIgdmFsdWUgc3VpdGFibGUKKyAqIGZvciBwcm9ncmFtbWluZyB0aGUgZGV2aWNlLiAgV2UgYWx3YXlzIHVzZSB0aGUgREFRUCdzIDUgTUh6IGNsb2NrLAorICogd2hpY2ggd2l0aCBpdHMgMjQtYml0IGNvdW50ZXIsIGFsbG93cyB2YWx1ZXMgdXAgdG8gODQgc2Vjb25kcy4KKyAqIEFsc28sIHRoZSBmdW5jdGlvbiBhZGp1c3RzIG5zIHNvIHRoYXQgaXQgY29vcmVzcG9uZHMgdG8gdGhlIGFjdHVhbAorICogdGltZSB0aGF0IHRoZSBkZXZpY2Ugd2lsbCB1c2UuCisgKi8KKworc3RhdGljIGludCBkYXFwX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCkKK3sKKwlpbnQgdGltZXI7CisKKwl0aW1lciA9ICpucyAvIDIwMDsKKwkqbnMgPSB0aW1lciAqIDIwMDsKKworCXJldHVybiB0aW1lcjsKK30KKworLyogY21kdGVzdCB0ZXN0cyBhIHBhcnRpY3VsYXIgY29tbWFuZCB0byBzZWUgaWYgaXQgaXMgdmFsaWQuCisgKiBVc2luZyB0aGUgY21kdGVzdCBpb2N0bCwgYSB1c2VyIGNhbiBjcmVhdGUgYSB2YWxpZCBjbWQKKyAqIGFuZCB0aGVuIGhhdmUgaXQgZXhlY3V0ZWQgYnkgdGhlIGNtZCBpb2N0bC4KKyAqCisgKiBjbWR0ZXN0IHJldHVybnMgMSwyLDMsNCBvciAwLCBkZXBlbmRpbmcgb24gd2hpY2ggdGVzdHMKKyAqIHRoZSBjb21tYW5kIHBhc3Nlcy4KKyAqLworCitzdGF0aWMgaW50IGRhcXBfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfY21kICogY21kKQoreworCWludCBlcnIgPSAwOworCWludCB0bXA7CisKKwkvKiBzdGVwIDE6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHRyaXZpYWxseSB2YWxpZCAqLworCisJdG1wID0gY21kLT5zdGFydF9zcmM7CisJY21kLT5zdGFydF9zcmMgJj0gVFJJR19OT1c7CisJaWYgKCFjbWQtPnN0YXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5zdGFydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2JlZ2luX3NyYzsKKwljbWQtPnNjYW5fYmVnaW5fc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX0ZPTExPVzsKKwlpZiAoIWNtZC0+c2Nhbl9iZWdpbl9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9iZWdpbl9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5jb252ZXJ0X3NyYzsKKwljbWQtPmNvbnZlcnRfc3JjICY9IFRSSUdfVElNRVIgfCBUUklHX05PVzsKKwlpZiAoIWNtZC0+Y29udmVydF9zcmMgfHwgdG1wICE9IGNtZC0+Y29udmVydF9zcmMpCisJCWVycisrOworCisJdG1wID0gY21kLT5zY2FuX2VuZF9zcmM7CisJY21kLT5zY2FuX2VuZF9zcmMgJj0gVFJJR19DT1VOVDsKKwlpZiAoIWNtZC0+c2Nhbl9lbmRfc3JjIHx8IHRtcCAhPSBjbWQtPnNjYW5fZW5kX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnN0b3Bfc3JjOworCWNtZC0+c3RvcF9zcmMgJj0gVFJJR19DT1VOVCB8IFRSSUdfTk9ORTsKKwlpZiAoIWNtZC0+c3RvcF9zcmMgfHwgdG1wICE9IGNtZC0+c3RvcF9zcmMpCisJCWVycisrOworCisJaWYgKGVycikKKwkJcmV0dXJuIDE7CisKKwkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCisJLyogbm90ZSB0aGF0IG11dHVhbCBjb21wYXRpYmxpdHkgaXMgbm90IGFuIGlzc3VlIGhlcmUgKi8KKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX1RJTUVSICYmCisJCWNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19GT0xMT1cpCisJCWVycisrOworCWlmIChjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUikKKwkJZXJyKys7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19GT0xMT1cgJiYgY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX05PVykKKwkJZXJyKys7CisJaWYgKGNtZC0+c3RvcF9zcmMgIT0gVFJJR19DT1VOVCAmJiBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfTk9ORSkKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMjsKKworCS8qIHN0ZXAgMzogbWFrZSBzdXJlIGFyZ3VtZW50cyBhcmUgdHJpdmlhbGx5IGNvbXBhdGlibGUgKi8KKworCWlmIChjbWQtPnN0YXJ0X2FyZyAhPSAwKSB7CisJCWNtZC0+c3RhcnRfYXJnID0gMDsKKwkJZXJyKys7CisJfQorI2RlZmluZSBNQVhfU1BFRUQJMTAwMDAJLyogMTAwIGtIeiAtIGluIG5hbm9zZWNvbmRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSCisJCSYmIGNtZC0+c2Nhbl9iZWdpbl9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TUEVFRDsKKwkJZXJyKys7CisJfQorCisJLyogSWYgYm90aCBzY2FuX2JlZ2luIGFuZCBjb252ZXJ0IGFyZSBib3RoIHRpbWVyIHZhbHVlcywgdGhlIG9ubHkKKwkgKiB3YXkgdGhhdCBjYW4gbWFrZSBzZW5zZSBpcyBpZiB0aGUgc2NhbiB0aW1lIGlzIHRoZSBudW1iZXIgb2YKKwkgKiBjb252ZXJzaW9ucyB0aW1lcyB0aGUgY29udmVydCB0aW1lCisJICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSICYmIGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUgorCQkmJiBjbWQtPnNjYW5fYmVnaW5fYXJnICE9CisJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZykgeworCQllcnIrKzsKKwl9CisKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSICYmIGNtZC0+Y29udmVydF9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJY21kLT5jb252ZXJ0X2FyZyA9IE1BWF9TUEVFRDsKKwkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnID4gMHgwMGZmZmZmZikgeworCQkJY21kLT5zdG9wX2FyZyA9IDB4MDBmZmZmZmY7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCWRhcXBfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQl0bXAgPSBjbWQtPmNvbnZlcnRfYXJnOworCQlkYXFwX25zX3RvX3RpbWVyKCZjbWQtPmNvbnZlcnRfYXJnLAorCQkJY21kLT5mbGFncyAmIFRSSUdfUk9VTkRfTUFTSyk7CisJCWlmICh0bXAgIT0gY21kLT5jb252ZXJ0X2FyZykKKwkJCWVycisrOworCX0KKworCWlmIChlcnIpCisJCXJldHVybiA0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGFxcF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcykKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIHMtPnByaXZhdGU7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCWludCBjb3VudGVyID0gMTAwOworCWludCBzY2FubGlzdF9zdGFydF9vbl9ldmVyeV9lbnRyeTsKKwlpbnQgdGhyZXNob2xkOworCisJaW50IGk7CisJaW50IHY7CisKKwlpZiAobG9jYWwtPnN0b3ApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogU3RvcCBhbnkgcnVubmluZyBjb252ZXJzaW9uICovCisJZGFxcF9haV9jYW5jZWwoZGV2LCBzKTsKKworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVFQX0FVWCk7CisKKwkvKiBSZXNldCBzY2FuIGxpc3QgcXVldWUgKi8KKwlvdXRiKERBUVBfQ09NTUFORF9SU1RRLCBkZXYtPmlvYmFzZSArIERBUVBfQ09NTUFORCk7CisKKwkvKiBQcm9ncmFtIHBhY2VyIGNsb2NrCisJICoKKwkgKiBUaGVyZSdzIHR3byBtb2RlcyB3ZSBjYW4gb3BlcmF0ZSBpbi4gIElmIGNvbnZlcnRfc3JjIGlzCisJICogVFJJR19USU1FUiwgdGhlbiBjb252ZXJ0X2FyZyBzcGVjaWZpZXMgdGhlIHRpbWUgYmV0d2VlbgorCSAqIGVhY2ggY29udmVyc2lvbiwgc28gd2UgcHJvZ3JhbSB0aGUgcGFjZXIgY2xvY2sgdG8gdGhhdAorCSAqIGZyZXF1ZW5jeSBhbmQgc2V0IHRoZSBTQ0FOTElTVF9TVEFSVCBiaXQgb24gZXZlcnkgc2Nhbmxpc3QKKwkgKiBlbnRyeS4gIE90aGVyd2lzZSwgY29udmVydF9zcmMgaXMgVFJJR19OT1csIHdoaWNoIG1lYW5zCisJICogd2Ugd2FudCB0aGUgZmFzdGVzdCBwb3NzaWJsZSBjb252ZXJzaW9ucywgc2Nhbl9iZWdpbl9zcmMKKwkgKiBpcyBUUklHX1RJTUVSLCBhbmQgc2Nhbl9iZWdpbl9hcmcgc3BlY2lmaWVzIHRoZSB0aW1lIGJldHdlZW4KKwkgKiBlYWNoIHNjYW4sIHNvIHdlIHByb2dyYW0gdGhlIHBhY2VyIGNsb2NrIHRvIHRoaXMgZnJlcXVlbmN5CisJICogYW5kIG9ubHkgc2V0IHRoZSBTQ0FOTElTVF9TVEFSVCBiaXQgb24gdGhlIGZpcnN0IGVudHJ5LgorCSAqLworCisJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgeworCQlpbnQgY291bnRlciA9IGRhcXBfbnNfdG9fdGltZXIoJmNtZC0+Y29udmVydF9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJb3V0Yihjb3VudGVyICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX1BBQ0VSX0xPVyk7CisJCW91dGIoKGNvdW50ZXIgPj4gOCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIERBUVBfUEFDRVJfTUlEKTsKKwkJb3V0YigoY291bnRlciA+PiAxNikgJiAweGZmLCBkZXYtPmlvYmFzZSArIERBUVBfUEFDRVJfSElHSCk7CisJCXNjYW5saXN0X3N0YXJ0X29uX2V2ZXJ5X2VudHJ5ID0gMTsKKwl9IGVsc2UgeworCQlpbnQgY291bnRlciA9IGRhcXBfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJb3V0Yihjb3VudGVyICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyBEQVFQX1BBQ0VSX0xPVyk7CisJCW91dGIoKGNvdW50ZXIgPj4gOCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIERBUVBfUEFDRVJfTUlEKTsKKwkJb3V0YigoY291bnRlciA+PiAxNikgJiAweGZmLCBkZXYtPmlvYmFzZSArIERBUVBfUEFDRVJfSElHSCk7CisJCXNjYW5saXN0X3N0YXJ0X29uX2V2ZXJ5X2VudHJ5ID0gMDsKKwl9CisKKwkvKiBQcm9ncmFtIHNjYW4gbGlzdCAqLworCisJZm9yIChpID0gMDsgaSA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBpKyspIHsKKworCQlpbnQgY2hhbnNwZWMgPSBjbWQtPmNoYW5saXN0W2ldOworCisJCS8qIFByb2dyYW0gb25lIHNjYW4gbGlzdCBlbnRyeSAqLworCisJCXYgPSBEQVFQX1NDQU5MSVNUX0NIQU5ORUwoQ1JfQ0hBTihjaGFuc3BlYykpCisJCQl8IERBUVBfU0NBTkxJU1RfR0FJTihDUl9SQU5HRShjaGFuc3BlYykpOworCisJCWlmIChDUl9BUkVGKGNoYW5zcGVjKSA9PSBBUkVGX0RJRkYpIHsKKwkJCXYgfD0gREFRUF9TQ0FOTElTVF9ESUZGRVJFTlRJQUw7CisJCX0KKworCQlpZiAoaSA9PSAwIHx8IHNjYW5saXN0X3N0YXJ0X29uX2V2ZXJ5X2VudHJ5KSB7CisJCQl2IHw9IERBUVBfU0NBTkxJU1RfU1RBUlQ7CisJCX0KKworCQlvdXRiKHYgJiAweGZmLCBkZXYtPmlvYmFzZSArIERBUVBfU0NBTkxJU1QpOworCQlvdXRiKHYgPj4gOCwgZGV2LT5pb2Jhc2UgKyBEQVFQX1NDQU5MSVNUKTsKKwl9CisKKwkvKiBOb3cgaXQncyB0aW1lIHRvIHByb2dyYW0gdGhlIEZJRk8gdGhyZXNob2xkLCBiYXNpY2FsbHkgdGhlCisJICogbnVtYmVyIG9mIHNhbXBsZXMgdGhlIGNhcmQgd2lsbCBidWZmZXIgYmVmb3JlIGl0IGludGVycnVwdHMKKwkgKiB0aGUgQ1BVLgorCSAqCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBhIHN0b3AgY291bnQsIHRoZW4gdXNlIGhhbGYgdGhlIHNpemUgb2YKKwkgKiB0aGUgRklGTyAodGhlIG1hbnVmYWN0dXJlcidzIHJlY29tbWVuZGF0aW9uKS4gIENvbnNpZGVyCisJICogdGhhdCB0aGUgRklGTyBjYW4gaG9sZCAySyBzYW1wbGVzICg0SyBieXRlcykuICBXaXRoIHRoZQorCSAqIHRocmVzaG9sZCBzZXQgYXQgaGFsZiB0aGUgRklGTyBzaXplLCB3ZSBoYXZlIGEgbWFyZ2luIG9mCisJICogZXJyb3Igb2YgMTAyNCBzYW1wbGVzLiAgQXQgdGhlIGNoaXAncyBtYXhpbXVtIHNhbXBsZSByYXRlCisJICogb2YgMTAwLDAwMCBIeiwgdGhlIENQVSB3b3VsZCBoYXZlIHRvIGRlbGF5IGludGVycnVwdAorCSAqIHNlcnZpY2UgZm9yIGEgZnVsbCAxMCBtaWxsaXNlY29uZHMgaW4gb3JkZXIgdG8gbG9zZSBkYXRhCisJICogaGVyZSAoYXMgb3Bwb3NlZCB0byBoaWdoZXIgdXAgaW4gdGhlIGtlcm5lbCkuICBJJ3ZlIG5ldmVyCisJICogc2VlbiBpdCBoYXBwZW4uICBIb3dldmVyLCBmb3Igc2xvdyBzYW1wbGUgcmF0ZXMgaXQgbWF5CisJICogYnVmZmVyIHRvbyBtdWNoIGRhdGEgYW5kIGludHJvZHVjZSB0b28gbXVjaCBkZWxheSBmb3IgdGhlCisJICogdXNlciBhcHBsaWNhdGlvbi4KKwkgKgorCSAqIElmIHdlIGhhdmUgYSBzdG9wIGNvdW50LCB0aGVuIHRoaW5ncyBnZXQgbW9yZSBpbnRlcmVzdGluZy4KKwkgKiBJZiB0aGUgc3RvcCBjb3VudCBpcyBsZXNzIHRoYW4gdGhlIEZJRk8gc2l6ZSAoYWN0dWFsbHkKKwkgKiB0aHJlZS1xdWFydGVycyBvZiB0aGUgRklGTyBzaXplIC0gc2VlIGJlbG93KSwgd2UganVzdCB1c2UKKwkgKiB0aGUgc3RvcCBjb3VudCBpdHNlbGYgYXMgdGhlIHRocmVzaG9sZCwgdGhlIGNhcmQgaW50ZXJydXB0cworCSAqIHVzIHdoZW4gdGhhdCBtYW55IHNhbXBsZXMgaGF2ZSBiZWVuIHRha2VuLCBhbmQgd2Uga2lsbCB0aGUKKwkgKiBhY3F1aXNpdGlvbiBhdCB0aGF0IHBvaW50IGFuZCBhcmUgZG9uZS4gIElmIHRoZSBzdG9wIGNvdW50CisJICogaXMgbGFyZ2VyIHRoYW4gdGhhdCwgdGhlbiB3ZSBkaXZpZGUgaXQgYnkgMiB1bnRpbCBpdCdzIGxlc3MKKwkgKiB0aGFuIHRocmVlIHF1YXJ0ZXJzIG9mIHRoZSBGSUZPIHNpemUgKHdlIGFsd2F5cyBsZWF2ZSB0aGUKKwkgKiB0b3AgcXVhcnRlciBvZiB0aGUgRklGTyBhcyBwcm90ZWN0aW9uIGFnYWluc3Qgc2x1Z2dpc2ggQ1BVCisJICogaW50ZXJydXB0IHJlc3BvbnNlKSBhbmQgdXNlIHRoYXQgYXMgdGhlIHRocmVzaG9sZC4gIFNvLCBpZgorCSAqIHRoZSBzdG9wIGNvdW50IGlzIDQwMDAgc2FtcGxlcywgd2UgZGl2aWRlIGJ5IHR3byB0d2ljZSB0bworCSAqIGdldCAxMDAwIHNhbXBsZXMsIHVzZSB0aGF0IGFzIHRoZSB0aHJlc2hvbGQsIHRha2UgZm91cgorCSAqIGludGVycnVwdHMgdG8gZ2V0IG91ciA0MDAwIHNhbXBsZXMgYW5kIGFyZSBkb25lLgorCSAqCisJICogVGhlIGFsZ29yaXRobSBjb3VsZCBiZSBtb3JlIGNsZXZlci4gIEZvciBleGFtcGxlLCBpZiA4MTAwMAorCSAqIHNhbXBsZXMgYXJlIHJlcXVlc3RlZCwgd2UgY291bGQgc2V0IHRoZSB0aHJlc2hvbGQgdG8gMTUwMAorCSAqIHNhbXBsZXMgYW5kIHRha2UgNTQgaW50ZXJydXB0cyB0byBnZXQgODEwMDAuICBCdXQgNTQgaXNuJ3QKKwkgKiBhIHBvd2VyIG9mIHR3bywgc28gdGhpcyBhbGdvcml0aG0gd29uJ3QgZmluZCB0aGF0IG9wdGlvbi4KKwkgKiBJbnN0ZWFkLCBpdCdsbCBzZXQgdGhlIHRocmVzaG9sZCBhdCAxMjY2IGFuZCB0YWtlIDY0CisJICogaW50ZXJydXB0cyB0byBnZXQgODEwMjQgc2FtcGxlcywgb2Ygd2hpY2ggdGhlIGxhc3QgMjQgd2lsbAorCSAqIGJlIGRpc2NhcmRlZC4uLiBidXQgd2Ugd29uJ3QgZ2V0IHRoZSBsYXN0IGludGVycnVwdCB1bnRpbAorCSAqIHRoZXkndmUgYmVlbiBjb2xsZWN0ZWQuICBUbyBmaW5kIHRoZSBmaXJzdCBvcHRpb24sIHRoZQorCSAqIGNvbXB1dGVyIGNvdWxkIGxvb2sgYXQgdGhlIHByaW1lIGRlY29tcG9zaXRpb24gb2YgdGhlCisJICogc2FtcGxlIGNvdW50ICg4MTAwMCA9IDNeNCAqIDVeMyAqIDJeMykgYW5kIGZhY3RvciBpdCBpbnRvIGEKKwkgKiB0aHJlc2hvbGQgKDE1MDAgPSAzICogNV4zICogMl4yKSBhbmQgYW4gaW50ZXJydXB0IGNvdW50ICg1NAorCSAqID0gM14zICogMikuICBIbW1tLi4uIGEgb25lLWxpbmUgd2hpbGUgbG9vcCBvciBwcmltZQorCSAqIGRlY29tcG9zaXRpb24gb2YgaW50ZWdlcnMuLi4gSSdsbCBsZWF2ZSBpdCB0aGUgd2F5IGl0IGlzLgorCSAqCisJICogSSdsbCBhbHNvIG5vdGUgYSBtaW5pLXJhY2UgY29uZGl0aW9uIGJlZm9yZSBpZ25vcmluZyBpdCBpbgorCSAqIHRoZSBjb2RlLiAgTGV0J3Mgc2F5IHdlJ3JlIHRha2luZyA0MDAwIHNhbXBsZXMsIGFzIGJlZm9yZS4KKwkgKiBBZnRlciAxMDAwIHNhbXBsZXMsIHdlIGdldCBhbiBpbnRlcnJ1cHQuICBCdXQgYmVmb3JlIHRoYXQKKwkgKiBpbnRlcnJ1cHQgaXMgY29tcGxldGVseSBzZXJ2aWNlZCwgYW5vdGhlciBzYW1wbGUgaXMgdGFrZW4KKwkgKiBhbmQgbG9hZGVkIGludG8gdGhlIEZJRk8uICBTaW5jZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIKKwkgKiBlbXB0aWVzIHRoZSBGSUZPIGJlZm9yZSByZXR1cm5pbmcsIGl0IHdpbGwgcmVhZCAxMDAxIHNhbXBsZXMuCisJICogSWYgdGhhdCBoYXBwZW5zIGZvdXIgdGltZXMsIHdlJ2xsIGVuZCB1cCB0YWtpbmcgNDAwNCBzYW1wbGVzLAorCSAqIG5vdCA0MDAwLiAgVGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwgZGlzY2FyZCB0aGUgZXh0cmEgZm91cgorCSAqIHNhbXBsZXMgKGJ5IGhhbHRpbmcgdGhlIGFjcXVpc2l0aW9uIHdpdGggZm91ciBzYW1wbGVzIHN0aWxsCisJICogaW4gdGhlIEZJRk8pLCBidXQgd2Ugd2lsbCBoYXZlIHRvIHdhaXQgZm9yIHRoZW0uCisJICoKKwkgKiBJbiBzaG9ydCwgdGhpcyBjb2RlIHdvcmtzIHByZXR0eSB3ZWxsLCBidXQgZm9yIGVpdGhlciBvZgorCSAqIHRoZSB0d28gcmVhc29ucyBub3RlZCwgbWlnaHQgZW5kIHVwIHdhaXRpbmcgZm9yIGEgZmV3IG1vcmUKKwkgKiBzYW1wbGVzIHRoYW4gYWN0dWFsbHkgcmVxdWVzdGVkLiAgU2hvdWxkbid0IG1ha2UgdG9vIG11Y2gKKwkgKiBvZiBhIGRpZmZlcmVuY2UuCisJICovCisKKwkvKiBTYXZlIGF3YXkgdGhlIG51bWJlciBvZiBjb252ZXJzaW9ucyB3ZSBzaG91bGQgcGVyZm9ybSwgYW5kCisJICogY29tcHV0ZSB0aGUgRklGTyB0aHJlc2hvbGQgKGluIGJ5dGVzLCBub3Qgc2FtcGxlcyAtIHRoYXQncworCSAqIHdoeSB3ZSBtdWx0aXBsZSBsb2NhbC0+Y291bnQgYnkgMiA9IHNpemVvZihzYW1wbGUpKQorCSAqLworCisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlsb2NhbC0+Y291bnQgPSBjbWQtPnN0b3BfYXJnICogY21kLT5zY2FuX2VuZF9hcmc7CisJCXRocmVzaG9sZCA9IDIgKiBsb2NhbC0+Y291bnQ7CisJCXdoaWxlICh0aHJlc2hvbGQgPiBEQVFQX0ZJRk9fU0laRSAqIDMgLyA0KQorCQkJdGhyZXNob2xkIC89IDI7CisJfSBlbHNlIHsKKwkJbG9jYWwtPmNvdW50ID0gLTE7CisJCXRocmVzaG9sZCA9IERBUVBfRklGT19TSVpFIC8gMjsKKwl9CisKKwkvKiBSZXNldCBkYXRhIEZJRk8gKHNlZSBwYWdlIDI4IG9mIERBUVAgVXNlcidzIE1hbnVhbCkgKi8KKworCW91dGIoREFRUF9DT01NQU5EX1JTVEYsIGRldi0+aW9iYXNlICsgREFRUF9DT01NQU5EKTsKKworCS8qIFNldCBGSUZPIHRocmVzaG9sZC4gIEZpcnN0IHR3byBieXRlcyBhcmUgbmVhci1lbXB0eQorCSAqIHRocmVzaG9sZCwgd2hpY2ggaXMgdW51c2VkOyBuZXh0IHR3byBieXRlcyBhcmUgbmVhci1mdWxsCisJICogdGhyZXNob2xkLiAgV2UgY29tcHV0ZWQgdGhlIG51bWJlciBvZiBieXRlcyB3ZSB3YW50IGluIHRoZQorCSAqIEZJRk8gd2hlbiB0aGUgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCwgd2hhdCB0aGUgY2FyZCB3YW50cworCSAqIGlzIGFjdHVhbGx5IHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGJ5dGVzIGxlZnQgaW4gdGhlIEZJRk8KKwkgKiB3aGVuIHRoZSBpbnRlcnJ1cHQgaXMgdG8gaGFwcGVuLgorCSAqLworCisJb3V0YigweDAwLCBkZXYtPmlvYmFzZSArIERBUVBfRklGTyk7CisJb3V0YigweDAwLCBkZXYtPmlvYmFzZSArIERBUVBfRklGTyk7CisKKwlvdXRiKChEQVFQX0ZJRk9fU0laRSAtIHRocmVzaG9sZCkgJiAweGZmLCBkZXYtPmlvYmFzZSArIERBUVBfRklGTyk7CisJb3V0YigoREFRUF9GSUZPX1NJWkUgLSB0aHJlc2hvbGQpID4+IDgsIGRldi0+aW9iYXNlICsgREFRUF9GSUZPKTsKKworCS8qIFNldCB0cmlnZ2VyICovCisKKwl2ID0gREFRUF9DT05UUk9MX1RSSUdHRVJfQ09OVElOVU9VUyB8IERBUVBfQ09OVFJPTF9UUklHR0VSX0lOVEVSTkFMCisJCXwgREFRUF9DT05UUk9MX1BBQ0VSXzVNSHogfCBEQVFQX0NPTlRST0xfRklGT19JTlRfRU5BQkxFOworCisJb3V0Yih2LCBkZXYtPmlvYmFzZSArIERBUVBfQ09OVFJPTCk7CisKKwkvKiBSZXNldCBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzIChteSBjYXJkIGhhcyBhIHRlbmRhbmN5IHRvIHJlcXVpcmUKKwkgKiByZXF1aXJlIG11bHRpcGxlIHJlYWRzIG9uIHRoZSBzdGF0dXMgcmVnaXN0ZXIgdG8gYWNoaWV2ZSB0aGlzKQorCSAqLworCisJd2hpbGUgKC0tY291bnRlcgorCQkmJiAoaW5iKGRldi0+aW9iYXNlICsgREFRUF9TVEFUVVMpICYgREFRUF9TVEFUVVNfRVZFTlRTKSkgOworCWlmICghY291bnRlcikgeworCQlwcmludGsoImRhcXA6IGNvdWxkbid0IGNsZWFyIGludGVycnVwdHMgaW4gc3RhdHVzIHJlZ2lzdGVyXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWxvY2FsLT5pbnRlcnJ1cHRfbW9kZSA9IGJ1ZmZlcjsKKwlsb2NhbC0+ZGV2ID0gZGV2OworCWxvY2FsLT5zID0gczsKKworCS8qIFN0YXJ0IGNvbnZlcnNpb24gKi8KKwlvdXRiKERBUVBfQ09NTUFORF9BUk0gfCBEQVFQX0NPTU1BTkRfRklGT19EQVRBLAorCQlkZXYtPmlvYmFzZSArIERBUVBfQ09NTUFORCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogU2luZ2xlLXNob3QgYW5hbG9nIG91dHB1dCByb3V0aW5lICovCisKK3N0YXRpYyBpbnQgZGFxcF9hb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIHMtPnByaXZhdGU7CisJaW50IGQ7CisJdW5zaWduZWQgaW50IGNoYW47CisKKwlpZiAobG9jYWwtPnN0b3ApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCWQgPSBkYXRhWzBdOworCWQgJj0gMHgwZmZmOworCWQgXj0gMHgwODAwOwkJLyogRmxpcCB0aGUgc2lnbiAqLworCWQgfD0gY2hhbiA8PCAxMjsKKworCS8qIE1ha2Ugc3VyZSBEL0EgdXBkYXRlIG1vZGUgaXMgZGlyZWN0IHVwZGF0ZSAqLworCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBEQVFQX0FVWCk7CisKKwlvdXR3KGQsIGRldi0+aW9iYXNlICsgREFRUF9EQSk7CisKKwlyZXR1cm4gMTsKK30KKworLyogRGlnaXRhbCBpbnB1dCByb3V0aW5lICovCisKK3N0YXRpYyBpbnQgZGFxcF9kaV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gKHN0cnVjdCBsb2NhbF9pbmZvX3QgKikgcy0+cHJpdmF0ZTsKKworCWlmIChsb2NhbC0+c3RvcCkgeworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkYXRhWzBdID0gaW5iKGRldi0+aW9iYXNlICsgREFRUF9ESUdJVEFMX0lPKTsKKworCXJldHVybiAxOworfQorCisvKiBEaWdpdGFsIG91dHB1dCByb3V0aW5lICovCisKK3N0YXRpYyBpbnQgZGFxcF9kb19pbnNuX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgbG9jYWxfaW5mb190ICpsb2NhbCA9IChzdHJ1Y3QgbG9jYWxfaW5mb190ICopIHMtPnByaXZhdGU7CisKKwlpZiAobG9jYWwtPnN0b3ApIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJb3V0dyhkYXRhWzBdICYgMHhmLCBkZXYtPmlvYmFzZSArIERBUVBfRElHSVRBTF9JTyk7CisKKwlyZXR1cm4gMTsKK30KKworLyogZGFxcF9hdHRhY2ggaXMgY2FsbGVkIHZpYSBjb21lZGlfY29uZmlnIHRvIGF0dGFjaCBhIGNvbWVkaSBkZXZpY2UKKyAqIHRvIGEgL2Rldi9jb21lZGkqLiAgTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gZGFxcF9jc19hdHRhY2goKQorICogd2hpY2ggaXMgY2FsbGVkIGJ5IHRoZSBwY21jaWEgc3Vic3lzdGVtIHRvIGF0dGFjaCB0aGUgUENNQ0lBIGNhcmQKKyAqIHdoZW4gaXQgaXMgaW5zZXJ0ZWQuCisgKi8KKworc3RhdGljIGludCBkYXFwX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gZGV2X3RhYmxlW2l0LT5vcHRpb25zWzBdXTsKKwl0dXBsZV90IHR1cGxlOworCWludCBpOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJaWYgKGl0LT5vcHRpb25zWzBdIDwgMCB8fCBpdC0+b3B0aW9uc1swXSA+PSBNQVhfREVWIHx8ICFsb2NhbCkgeworCQlwcmludGsoImNvbWVkaSVkOiBObyBzdWNoIGRhcXAgZGV2aWNlICVkXG4iLAorCQkJZGV2LT5taW5vciwgaXQtPm9wdGlvbnNbMF0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBUeXBpY2FsbHkgYnJpdHRsZSBjb2RlIHRoYXQgSSBkb24ndCBjb21wbGV0ZWx5IHVuZGVyc3RhbmQsCisJICogYnV0ICJpdCB3b3JrcyBvbiBteSBjYXJkIi4gIFRoZSBpbnRlbnQgaXMgdG8gcHVsbCB0aGUgbW9kZWwKKwkgKiBudW1iZXIgb2YgdGhlIGNhcmQgb3V0IHRoZSBQQ01DSUEgQ0lTIGFuZCBzdGFzaCBpdCBhd2F5IGFzCisJICogdGhlIENPTUVESSBib2FyZF9uYW1lLiAgTG9va3MgbGlrZSB0aGUgdGhpcmQgZmllbGQgaW4KKwkgKiBDSVNUUExfVkVSU18xIChvZmZzZXQgMikgaG9sZHMgd2hhdCB3ZSdyZSBsb29raW5nIGZvci4gIElmCisJICogaXQgZG9lc24ndCB3b3JrLCB3aG8gY2FyZXMsIGp1c3QgbGVhdmUgaXQgYXMgIkRBUVAiLgorCSAqLworCisJc3RyY3B5KGxvY2FsLT5ib2FyZF9uYW1lLCAiREFRUCIpOworCWRldi0+Ym9hcmRfbmFtZSA9IGxvY2FsLT5ib2FyZF9uYW1lOworCisJdHVwbGUuRGVzaXJlZFR1cGxlID0gQ0lTVFBMX1ZFUlNfMTsKKwlpZiAocGNtY2lhX2dldF9maXJzdF90dXBsZShsb2NhbC0+bGluaywgJnR1cGxlKSA9PSAwKSB7CisJCXVfY2hhciBidWZbMTI4XTsKKworCQlidWZbMF0gPSBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7CisJCXR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKKwkJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CisJCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMjsKKwkJaWYgKHBjbWNpYV9nZXRfdHVwbGVfZGF0YShsb2NhbC0+bGluaywgJnR1cGxlKSA9PSAwKSB7CisKKwkJCWZvciAoaSA9IDA7IGkgPCB0dXBsZS5UdXBsZURhdGFMZW4gLSA0OyBpKyspCisJCQkJaWYgKGJ1ZltpXSA9PSAwKQorCQkJCQlicmVhazsKKwkJCWZvciAoaSsrOyBpIDwgdHVwbGUuVHVwbGVEYXRhTGVuIC0gNDsgaSsrKQorCQkJCWlmIChidWZbaV0gPT0gMCkKKwkJCQkJYnJlYWs7CisJCQlpKys7CisJCQlpZiAoKGkgPCB0dXBsZS5UdXBsZURhdGFMZW4gLSA0KQorCQkJCSYmIChzdHJuY21wKGJ1ZiArIGksICJEQVFQIiwgNCkgPT0gMCkpIHsKKwkJCQlzdHJuY3B5KGxvY2FsLT5ib2FyZF9uYW1lLCBidWYgKyBpLAorCQkJCQlzaXplb2YobG9jYWwtPmJvYXJkX25hbWUpKTsKKwkJCX0KKwkJfQorCX0KKworCWRldi0+aW9iYXNlID0gbG9jYWwtPmxpbmstPmlvLkJhc2VQb3J0MTsKKworCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDQpKSA8IDApCisJCXJldHVybiByZXQ7CisKKwlwcmludGsoImNvbWVkaSVkOiBhdHRhY2hpbmcgZGFxcCVkIChpbyAweCUwNGx4KVxuIiwKKwkJZGV2LT5taW5vciwgaXQtPm9wdGlvbnNbMF0sIGRldi0+aW9iYXNlKTsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCWRldi0+cmVhZF9zdWJkZXYgPSBzOworCXMtPnByaXZhdGUgPSBsb2NhbDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORCB8IFNERl9ESUZGIHwgU0RGX0NNRF9SRUFEOworCXMtPm5fY2hhbiA9IDg7CisJcy0+bGVuX2NoYW5saXN0ID0gMjA0ODsKKwlzLT5tYXhkYXRhID0gMHhmZmZmOworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RhcXBfYWk7CisJcy0+aW5zbl9yZWFkID0gZGFxcF9haV9pbnNuX3JlYWQ7CisJcy0+ZG9fY21kdGVzdCA9IGRhcXBfYWlfY21kdGVzdDsKKwlzLT5kb19jbWQgPSBkYXFwX2FpX2NtZDsKKwlzLT5jYW5jZWwgPSBkYXFwX2FpX2NhbmNlbDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCWRldi0+d3JpdGVfc3ViZGV2ID0gczsKKwlzLT5wcml2YXRlID0gbG9jYWw7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEU7CisJcy0+bl9jaGFuID0gMjsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxOworCXMtPm1heGRhdGEgPSAweDBmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGFxcF9hbzsKKwlzLT5pbnNuX3dyaXRlID0gZGFxcF9hb19pbnNuX3dyaXRlOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJcy0+cHJpdmF0ZSA9IGxvY2FsOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMTsKKwlzLT5sZW5fY2hhbmxpc3QgPSAxOworCXMtPmluc25fcmVhZCA9IGRhcXBfZGlfaW5zbl9yZWFkOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJcy0+cHJpdmF0ZSA9IGxvY2FsOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ETzsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfV1JJVEVBQkxFOworCXMtPm5fY2hhbiA9IDE7CisJcy0+bGVuX2NoYW5saXN0ID0gMTsKKwlzLT5pbnNuX3dyaXRlID0gZGFxcF9kb19pbnNuX3dyaXRlOworCisJcmV0dXJuIDE7Cit9CisKKy8qIGRhcXBfZGV0YWNoIChjYWxsZWQgZnJvbSBjb21lZGlfY29tZGlnKSBkb2VzIG5vdGhpbmcuIElmIHRoZSBQQ01DSUEKKyAqIGNhcmQgaXMgcmVtb3ZlZCwgZGFxcF9jc19kZXRhY2goKSBpcyBjYWxsZWQgYnkgdGhlIHBjbWNpYSBzdWJzeXN0ZW0uCisgKi8KKworc3RhdGljIGludCBkYXFwX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBkZXRhY2hpbmcgZGFxcFxuIiwgZGV2LT5taW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUENNQ0lBIGludGVyZmFjZSBjb2RlCisKKyAgICBUaGUgcmVzdCBvZiB0aGUgY29kZSBpbiB0aGlzIGZpbGUgaXMgYmFzZWQgb24gZHVtbXlfY3MuYyB2MS4yNAorICAgIGZyb20gdGhlIExpbnV4IHBjbWNpYV9jcyBkaXN0cmlidXRpb24gdjMuMS44IGFuZCBpcyBzdWJqZWN0CisgICAgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlIGFncmVlbWVudC4KKworICAgIFRoZSByZW1haW5pbmcgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYworICAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisgICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisKKyAgICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyAgICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisgICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICAgIFRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgb3JpZ2luYWwgY29kZSBpcyBEYXZpZCBBLiBIaW5kcworICAgIDxkaGluZHNAcGNtY2lhLnNvdXJjZWZvcmdlLm9yZz4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkIEEuIEhpbmRzCisgICAgYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQorICAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAorICAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQorICAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCisgICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKKyAgICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KKyAgICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQorICAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisgICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAgIFRoZSBldmVudCgpIGZ1bmN0aW9uIGlzIHRoaXMgZHJpdmVyJ3MgQ2FyZCBTZXJ2aWNlcyBldmVudCBoYW5kbGVyLgorICAgSXQgd2lsbCBiZSBjYWxsZWQgYnkgQ2FyZCBTZXJ2aWNlcyB3aGVuIGFuIGFwcHJvcHJpYXRlIGNhcmQgc3RhdHVzCisgICBldmVudCBpcyByZWNlaXZlZC4gIFRoZSBjb25maWcoKSBhbmQgcmVsZWFzZSgpIGVudHJ5IHBvaW50cyBhcmUKKyAgIHVzZWQgdG8gY29uZmlndXJlIG9yIHJlbGVhc2UgYSBzb2NrZXQsIGluIHJlc3BvbnNlIHRvIGNhcmQKKyAgIGluc2VydGlvbiBhbmQgZWplY3Rpb24gZXZlbnRzLgorCisgICBLZXJuZWwgdmVyc2lvbiAyLjYuMTYgdXB3YXJkcyB1c2VzIHN1c3BlbmQoKSBhbmQgcmVzdW1lKCkgZnVuY3Rpb25zCisgICBpbnN0ZWFkIG9mIGFuIGV2ZW50KCkgZnVuY3Rpb24uCisqLworCitzdGF0aWMgdm9pZCBkYXFwX2NzX2NvbmZpZyhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayk7CitzdGF0aWMgdm9pZCBkYXFwX2NzX3JlbGVhc2Uoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspOworc3RhdGljIGludCBkYXFwX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKK3N0YXRpYyBpbnQgZGFxcF9jc19yZXN1bWUoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKKworLyoKKyAgIFRoZSBhdHRhY2goKSBhbmQgZGV0YWNoKCkgZW50cnkgcG9pbnRzIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgZGVzdHJveQorICAgImluc3RhbmNlcyIgb2YgdGhlIGRyaXZlciwgd2hlcmUgZWFjaCBpbnN0YW5jZSByZXByZXNlbnRzIGV2ZXJ5dGhpbmcKKyAgIG5lZWRlZCB0byBtYW5hZ2Ugb25lIGFjdHVhbCBQQ01DSUEgY2FyZC4KKyovCisKK3N0YXRpYyBpbnQgZGFxcF9jc19hdHRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKik7CitzdGF0aWMgdm9pZCBkYXFwX2NzX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKTsKKworLyoKKyAgIFRoZSBkZXZfaW5mbyB2YXJpYWJsZSBpcyB0aGUgImtleSIgdGhhdCBpcyB1c2VkIHRvIG1hdGNoIHVwIHRoaXMKKyAgIGRldmljZSBkcml2ZXIgd2l0aCBhcHByb3ByaWF0ZSBjYXJkcywgdGhyb3VnaCB0aGUgY2FyZCBjb25maWd1cmF0aW9uCisgICBkYXRhYmFzZS4KKyovCisKK3N0YXRpYyBjb25zdCBkZXZfaW5mb190IGRldl9pbmZvID0gInF1YXRlY2hfZGFxcF9jcyI7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgZGFxcF9jc19hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZworICAgIGxvY2FsIGRhdGEgc3RydWN0dXJlcyBmb3Igb25lIGRldmljZS4gIFRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZAorICAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4KKworICAgIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQorICAgIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhCisgICAgY2FyZCBpbnNlcnRpb24gZXZlbnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCitzdGF0aWMgaW50IGRhcXBfY3NfYXR0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsOworCWludCBpOworCisJREVCVUcoMCwgImRhcXBfY3NfYXR0YWNoKClcbiIpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9ERVY7IGkrKykKKwkJaWYgKGRldl90YWJsZVtpXSA9PSBOVUxMKQorCQkJYnJlYWs7CisJaWYgKGkgPT0gTUFYX0RFVikgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgImRhcXBfY3M6IG5vIGRldmljZXMgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KKwlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsb2NhbF9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvY2FsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxvY2FsLT50YWJsZV9pbmRleCA9IGk7CisJZGV2X3RhYmxlW2ldID0gbG9jYWw7CisJbG9jYWwtPmxpbmsgPSBsaW5rOworCWxpbmstPnByaXYgPSBsb2NhbDsKKworCS8qIEludGVycnVwdCBzZXR1cCAqLworCWxpbmstPmlycS5BdHRyaWJ1dGVzID0gSVJRX1RZUEVfRVhDTFVTSVZFIHwgSVJRX0hBTkRMRV9QUkVTRU5UOworCWxpbmstPmlycS5JUlFJbmZvMSA9IElSUV9MRVZFTF9JRDsKKwlsaW5rLT5pcnEuSGFuZGxlciA9IGRhcXBfaW50ZXJydXB0OworCWxpbmstPmlycS5JbnN0YW5jZSA9IGxvY2FsOworCisJLyoKKwkgICBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcworCSAgIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvciBhbG1vc3QKKwkgICBldmVyeXRoaW5nLiAgSW4gbW9zdCBjbGllbnRzLCBtYW55IGRldGFpbHMgKGkuZS4sIG51bWJlciwgc2l6ZXMsCisJICAgYW5kIGF0dHJpYnV0ZXMgb2YgSU8gd2luZG93cykgYXJlIGZpeGVkIGJ5IHRoZSBuYXR1cmUgb2YgdGhlCisJICAgZGV2aWNlLCBhbmQgY2FuIGJlIGhhcmQtd2lyZWQgaGVyZS4KKwkgKi8KKwlsaW5rLT5jb25mLkF0dHJpYnV0ZXMgPSAwOworCWxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOworCisJZGFxcF9jc19jb25maWcobGluayk7CisKKwlyZXR1cm4gMDsKK30JCQkJLyogZGFxcF9jc19hdHRhY2ggKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBUaGlzIGRlbGV0ZXMgYSBkcml2ZXIgImluc3RhbmNlIi4gIFRoZSBkZXZpY2UgaXMgZGUtcmVnaXN0ZXJlZAorICAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4gIElmIGl0IGhhcyBiZWVuIHJlbGVhc2VkLCBhbGwgbG9jYWwgZGF0YQorICAgIHN0cnVjdHVyZXMgYXJlIGZyZWVkLiAgT3RoZXJ3aXNlLCB0aGUgc3RydWN0dXJlcyB3aWxsIGJlIGZyZWVkCisgICAgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVhc2VkLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgZGFxcF9jc19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKKworCURFQlVHKDAsICJkYXFwX2NzX2RldGFjaCgweCVwKVxuIiwgbGluayk7CisKKwlpZiAobGluay0+ZGV2X25vZGUpIHsKKwkJZGV2LT5zdG9wID0gMTsKKwkJZGFxcF9jc19yZWxlYXNlKGxpbmspOworCX0KKworCS8qIFVubGluayBkZXZpY2Ugc3RydWN0dXJlLCBhbmQgZnJlZSBpdCAqLworCWRldl90YWJsZVtkZXYtPnRhYmxlX2luZGV4XSA9IE5VTEw7CisJaWYgKGRldikKKwkJa2ZyZWUoZGV2KTsKKworfQkJCQkvKiBkYXFwX2NzX2RldGFjaCAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIGRhcXBfY3NfY29uZmlnKCkgaXMgc2NoZWR1bGVkIHRvIHJ1biBhZnRlciBhIENBUkRfSU5TRVJUSU9OIGV2ZW50CisgICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCisgICAgZGV2aWNlIGF2YWlsYWJsZSB0byB0aGUgc3lzdGVtLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIHZvaWQgZGFxcF9jc19jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqZGV2ID0gbGluay0+cHJpdjsKKwl0dXBsZV90IHR1cGxlOworCWNpc3BhcnNlX3QgcGFyc2U7CisJaW50IGxhc3RfcmV0OworCXVfY2hhciBidWZbNjRdOworCisJREVCVUcoMCwgImRhcXBfY3NfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKKworCS8qCisJICAgVGhpcyByZWFkcyB0aGUgY2FyZCdzIENPTkZJRyB0dXBsZSB0byBmaW5kIGl0cyBjb25maWd1cmF0aW9uCisJICAgcmVnaXN0ZXJzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DT05GSUc7CisJdHVwbGUuQXR0cmlidXRlcyA9IDA7CisJdHVwbGUuVHVwbGVEYXRhID0gYnVmOworCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF9maXJzdF90dXBsZShsaW5rLCAmdHVwbGUpKSkgeworCQljc19lcnJvcihsaW5rLCBHZXRGaXJzdFR1cGxlLCBsYXN0X3JldCk7CisJCWdvdG8gY3NfZmFpbGVkOworCX0KKwlpZiAoKGxhc3RfcmV0ID0gcGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldFR1cGxlRGF0YSwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsICZwYXJzZSkpKSB7CisJCWNzX2Vycm9yKGxpbmssIFBhcnNlVHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCWxpbmstPmNvbmYuQ29uZmlnQmFzZSA9IHBhcnNlLmNvbmZpZy5iYXNlOworCWxpbmstPmNvbmYuUHJlc2VudCA9IHBhcnNlLmNvbmZpZy5ybWFza1swXTsKKworCS8qCisJICAgSW4gdGhpcyBsb29wLCB3ZSBzY2FuIHRoZSBDSVMgZm9yIGNvbmZpZ3VyYXRpb24gdGFibGUgZW50cmllcywKKwkgICBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhIHZhbGlkIGNhcmQgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nCisJICAgdm9sdGFnZSwgSU8gd2luZG93LCBtZW1vcnkgd2luZG93LCBhbmQgaW50ZXJydXB0IHNldHRpbmdzLgorCisJICAgV2UgbWFrZSBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgY2FyZCB0byBiZSBjb25maWd1cmVkOiB3ZSB1c2UKKwkgICBqdXN0IHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gdGhlIENJUy4gIEluIGFuIGlkZWFsIHdvcmxkLAorCSAgIHRoaXMgd291bGQgd29yayBmb3IgYW55IFBDTUNJQSBjYXJkLCBidXQgaXQgcmVxdWlyZXMgYSBjb21wbGV0ZQorCSAgIGFuZCBhY2N1cmF0ZSBDSVMuICBJbiBwcmFjdGljZSwgYSBkcml2ZXIgdXN1YWxseSAia25vd3MiIG1vc3Qgb2YKKwkgICB0aGVzZSB0aGluZ3Mgd2l0aG91dCBjb25zdWx0aW5nIHRoZSBDSVMsIGFuZCBtb3N0IGNsaWVudCBkcml2ZXJzCisJICAgd2lsbCBvbmx5IHVzZSB0aGUgQ0lTIHRvIGZpbGwgaW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBkZXRhaWxzLgorCSAqLworCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9DRlRBQkxFX0VOVFJZOworCWlmICgobGFzdF9yZXQgPSBwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGxpbmssICZ0dXBsZSkpKSB7CisJCWNzX2Vycm9yKGxpbmssIEdldEZpcnN0VHVwbGUsIGxhc3RfcmV0KTsKKwkJZ290byBjc19mYWlsZWQ7CisJfQorCXdoaWxlICgxKSB7CisJCWNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgZGZsdCA9IHsgMCB9OworCQljaXN0cGxfY2Z0YWJsZV9lbnRyeV90ICpjZmcgPSAmKHBhcnNlLmNmdGFibGVfZW50cnkpOworCQlpZiAocGNtY2lhX2dldF90dXBsZV9kYXRhKGxpbmssICZ0dXBsZSkpCisJCQlnb3RvIG5leHRfZW50cnk7CisJCWlmIChwY21jaWFfcGFyc2VfdHVwbGUoJnR1cGxlLCAmcGFyc2UpKQorCQkJZ290byBuZXh0X2VudHJ5OworCisJCWlmIChjZmctPmZsYWdzICYgQ0lTVFBMX0NGVEFCTEVfREVGQVVMVCkKKwkJCWRmbHQgPSAqY2ZnOworCQlpZiAoY2ZnLT5pbmRleCA9PSAwKQorCQkJZ290byBuZXh0X2VudHJ5OworCQlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gY2ZnLT5pbmRleDsKKworCQkvKiBEbyB3ZSBuZWVkIHRvIGFsbG9jYXRlIGFuIGludGVycnVwdD8gKi8KKwkJaWYgKGNmZy0+aXJxLklSUUluZm8xIHx8IGRmbHQuaXJxLklSUUluZm8xKQorCQkJbGluay0+Y29uZi5BdHRyaWJ1dGVzIHw9IENPTkZfRU5BQkxFX0lSUTsKKworCQkvKiBJTyB3aW5kb3cgc2V0dGluZ3MgKi8KKwkJbGluay0+aW8uTnVtUG9ydHMxID0gbGluay0+aW8uTnVtUG9ydHMyID0gMDsKKwkJaWYgKChjZmctPmlvLm53aW4gPiAwKSB8fCAoZGZsdC5pby5ud2luID4gMCkpIHsKKwkJCWNpc3RwbF9pb190ICppbyA9IChjZmctPmlvLm53aW4pID8gJmNmZy0+aW8gOiAmZGZsdC5pbzsKKwkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIX0FVVE87CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fOEJJVCkpCisJCQkJbGluay0+aW8uQXR0cmlidXRlczEgPSBJT19EQVRBX1BBVEhfV0lEVEhfMTY7CisJCQlpZiAoIShpby0+ZmxhZ3MgJiBDSVNUUExfSU9fMTZCSVQpKQorCQkJCWxpbmstPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJCQlsaW5rLT5pby5JT0FkZHJMaW5lcyA9IGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLOworCQkJbGluay0+aW8uQmFzZVBvcnQxID0gaW8tPndpblswXS5iYXNlOworCQkJbGluay0+aW8uTnVtUG9ydHMxID0gaW8tPndpblswXS5sZW47CisJCQlpZiAoaW8tPm53aW4gPiAxKSB7CisJCQkJbGluay0+aW8uQXR0cmlidXRlczIgPSBsaW5rLT5pby5BdHRyaWJ1dGVzMTsKKwkJCQlsaW5rLT5pby5CYXNlUG9ydDIgPSBpby0+d2luWzFdLmJhc2U7CisJCQkJbGluay0+aW8uTnVtUG9ydHMyID0gaW8tPndpblsxXS5sZW47CisJCQl9CisJCX0KKworCQkvKiBUaGlzIHJlc2VydmVzIElPIHNwYWNlIGJ1dCBkb2Vzbid0IGFjdHVhbGx5IGVuYWJsZSBpdCAqLworCQlpZiAocGNtY2lhX3JlcXVlc3RfaW8obGluaywgJmxpbmstPmlvKSkKKwkJCWdvdG8gbmV4dF9lbnRyeTsKKworCQkvKiBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlJ3JlIGNvb2whICovCisJCWJyZWFrOworCisJICAgICAgbmV4dF9lbnRyeToKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9nZXRfbmV4dF90dXBsZShsaW5rLCAmdHVwbGUpKSkgeworCQkJY3NfZXJyb3IobGluaywgR2V0TmV4dFR1cGxlLCBsYXN0X3JldCk7CisJCQlnb3RvIGNzX2ZhaWxlZDsKKwkJfQorCX0KKworCS8qCisJICAgQWxsb2NhdGUgYW4gaW50ZXJydXB0IGxpbmUuICBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhc3NpZ24gYQorCSAgIGhhbmRsZXIgdG8gdGhlIGludGVycnVwdCwgdW5sZXNzIHRoZSAnSGFuZGxlcicgbWVtYmVyIG9mIHRoZQorCSAgIGlycSBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQuCisJICovCisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKKwkJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSkpIHsKKwkJCWNzX2Vycm9yKGxpbmssIFJlcXVlc3RJUlEsIGxhc3RfcmV0KTsKKwkJCWdvdG8gY3NfZmFpbGVkOworCQl9CisKKwkvKgorCSAgIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCisJICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcsIGFuZCBwdXR0aW5nIHRoZQorCSAgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCisJICovCisJaWYgKChsYXN0X3JldCA9IHBjbWNpYV9yZXF1ZXN0X2NvbmZpZ3VyYXRpb24obGluaywgJmxpbmstPmNvbmYpKSkgeworCQljc19lcnJvcihsaW5rLCBSZXF1ZXN0Q29uZmlndXJhdGlvbiwgbGFzdF9yZXQpOworCQlnb3RvIGNzX2ZhaWxlZDsKKwl9CisKKwkvKgorCSAgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCisJICAgaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2LgorCSAqLworCS8qIENvbWVkaSdzIFBDTUNJQSBzY3JpcHQgdXNlcyB0aGlzIGRldmljZSBuYW1lIChleHRyYWN0ZWQKKwkgKiBmcm9tIC92YXIvbGliL3BjbWNpYS9zdGFiKSB0byBwYXNzIHRvIGNvbWVkaV9jb25maWcKKwkgKi8KKwkvKiBzcHJpbnRmKGRldi0+bm9kZS5kZXZfbmFtZSwgImRhcXAlZCIsIGRldi0+dGFibGVfaW5kZXgpOyAqLworCXNwcmludGYoZGV2LT5ub2RlLmRldl9uYW1lLCAicXVhdGVjaF9kYXFwX2NzIik7CisJZGV2LT5ub2RlLm1ham9yID0gZGV2LT5ub2RlLm1pbm9yID0gMDsKKwlsaW5rLT5kZXZfbm9kZSA9ICZkZXYtPm5vZGU7CisKKwkvKiBGaW5hbGx5LCByZXBvcnQgd2hhdCB3ZSd2ZSBkb25lICovCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGluZGV4IDB4JTAyeCIsCisJCWRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CisJaWYgKGxpbmstPmNvbmYuQXR0cmlidXRlcyAmIENPTkZfRU5BQkxFX0lSUSkKKwkJcHJpbnRrKCIsIGlycSAldSIsIGxpbmstPmlycS5Bc3NpZ25lZElSUSk7CisJaWYgKGxpbmstPmlvLk51bVBvcnRzMSkKKwkJcHJpbnRrKCIsIGlvIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDEsCisJCQlsaW5rLT5pby5CYXNlUG9ydDEgKyBsaW5rLT5pby5OdW1Qb3J0czEgLSAxKTsKKwlpZiAobGluay0+aW8uTnVtUG9ydHMyKQorCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCisJCQlsaW5rLT5pby5CYXNlUG9ydDIgKyBsaW5rLT5pby5OdW1Qb3J0czIgLSAxKTsKKwlwcmludGsoIlxuIik7CisKKwlyZXR1cm47CisKKyAgICAgIGNzX2ZhaWxlZDoKKwlkYXFwX2NzX3JlbGVhc2UobGluayk7CisKK30JCQkJLyogZGFxcF9jc19jb25maWcgKi8KKworc3RhdGljIHZvaWQgZGFxcF9jc19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCURFQlVHKDAsICJkYXFwX2NzX3JlbGVhc2UoMHglcClcbiIsIGxpbmspOworCisJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKGxpbmspOworfQkJCQkvKiBkYXFwX2NzX3JlbGVhc2UgKi8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBUaGUgY2FyZCBzdGF0dXMgZXZlbnQgaGFuZGxlci4gIE1vc3RseSwgdGhpcyBzY2hlZHVsZXMgb3RoZXIKKyAgICBzdHVmZiB0byBydW4gYWZ0ZXIgYW4gZXZlbnQgaXMgcmVjZWl2ZWQuCisKKyAgICBXaGVuIGEgQ0FSRF9SRU1PVkFMIGV2ZW50IGlzIHJlY2VpdmVkLCB3ZSBpbW1lZGlhdGVseSBzZXQgYQorICAgIHByaXZhdGUgZmxhZyB0byBibG9jayBmdXR1cmUgYWNjZXNzZXMgdG8gdGhpcyBkZXZpY2UuICBBbGwgdGhlCisgICAgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgYWNjZXNzIHRoZSBkZXZpY2Ugc2hvdWxkIGNoZWNrIHRoaXMgZmxhZworICAgIHRvIG1ha2Ugc3VyZSB0aGUgY2FyZCBpcyBzdGlsbCBwcmVzZW50LgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworc3RhdGljIGludCBkYXFwX2NzX3N1c3BlbmQoc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCit7CisJc3RydWN0IGxvY2FsX2luZm9fdCAqbG9jYWwgPSBsaW5rLT5wcml2OworCisJLyogTWFyayB0aGUgZGV2aWNlIGFzIHN0b3BwZWQsIHRvIGJsb2NrIElPIHVudGlsIGxhdGVyICovCisJbG9jYWwtPnN0b3AgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhcXBfY3NfcmVzdW1lKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQoreworCXN0cnVjdCBsb2NhbF9pbmZvX3QgKmxvY2FsID0gbGluay0+cHJpdjsKKworCWxvY2FsLT5zdG9wID0gMDsKKworCXJldHVybiAwOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworI2lmZGVmIE1PRFVMRQorCitzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgZGFxcF9jc19pZF90YWJsZVtdID0geworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEzNywgMHgwMDI3KSwKKwlQQ01DSUFfREVWSUNFX05VTEwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBkYXFwX2NzX2lkX3RhYmxlKTsKKworc3RydWN0IHBjbWNpYV9kcml2ZXIgZGFxcF9jc19kcml2ZXIgPSB7CisJLnByb2JlID0gZGFxcF9jc19hdHRhY2gsCisJLnJlbW92ZSA9IGRhcXBfY3NfZGV0YWNoLAorCS5zdXNwZW5kID0gZGFxcF9jc19zdXNwZW5kLAorCS5yZXN1bWUgPSBkYXFwX2NzX3Jlc3VtZSwKKwkuaWRfdGFibGUgPSBkYXFwX2NzX2lkX3RhYmxlLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kcnYgPSB7CisJCQkubmFtZSA9IGRldl9pbmZvLAorCQl9LAorfTsKKworaW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQoreworCURFQlVHKDAsICIlc1xuIiwgdmVyc2lvbik7CisJcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmZGFxcF9jc19kcml2ZXIpOworCWNvbWVkaV9kcml2ZXJfcmVnaXN0ZXIoJmRyaXZlcl9kYXFwKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2V4aXQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlERUJVRygwLCAiZGFxcF9jczogdW5sb2FkaW5nXG4iKTsKKwljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl9kYXFwKTsKKwlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJmRhcXBfY3NfZHJpdmVyKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmMKaW5kZXggNjVkNTI0Mi4uY2EzNDdmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAvKgogICBUaGUgYm9hcmQgaGFzIDMgaW5wdXQgbW9kZXMgYW5kIHRoZSBnYWlucyBvZiAxLDIsNCwuLi4zMiAoLCA2NCwgMTI4KQogKi8KLXN0YXRpYyBjb25zdCBjb21lZGlfbHJhbmdlIHJ0ZF9haV83NTIwX3JhbmdlID0geyAxOCwgeworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJ0ZF9haV83NTIwX3JhbmdlID0geyAxOCwgewogCQkJLyogKy01ViBpbnB1dCByYW5nZSBnYWluIHN0ZXBzICovCiAJCQlCSVBfUkFOR0UoNS4wKSwKIAkJCUJJUF9SQU5HRSg1LjAgLyAyKSwKQEAgLTIyMyw3ICsyMjMsNyBAQAogfTsKIAogLyogUENJNDUyMCBoYXMgdHdvIG1vcmUgZ2FpbnMgKDYgbW9yZSBlbnRyaWVzKSAqLwotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgcnRkX2FpXzQ1MjBfcmFuZ2UgPSB7IDI0LCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcnRkX2FpXzQ1MjBfcmFuZ2UgPSB7IDI0LCB7CiAJCQkvKiArLTVWIGlucHV0IHJhbmdlIGdhaW4gc3RlcHMgKi8KIAkJCUJJUF9SQU5HRSg1LjApLAogCQkJQklQX1JBTkdFKDUuMCAvIDIpLApAQCAtMjU1LDcgKzI1NSw3IEBACiB9OwogCiAvKiBUYWJsZSBvcmRlciBtYXRjaGVzIHJhbmdlIHZhbHVlcyAqLwotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgcnRkX2FvX3JhbmdlID0geyA0LCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcnRkX2FvX3JhbmdlID0geyA0LCB7CiAJCQlSQU5HRSgwLCA1KSwKIAkJCVJBTkdFKDAsIDEwKSwKIAkJCVJBTkdFKC01LCA1KSwKQEAgLTI2Niw3ICsyNjYsNyBAQAogLyoKICAgQm9hcmQgZGVzY3JpcHRpb25zCiAgKi8KLXR5cGVkZWYgc3RydWN0IHJ0ZEJvYXJkX3N0cnVjdCB7CitzdHJ1Y3QgcnRkQm9hcmQgewogCWNvbnN0IGNoYXIgKm5hbWU7CS8qIG11c3QgYmUgZmlyc3QgKi8KIAlpbnQgZGV2aWNlX2lkOwogCWludCBhaUNoYW5zOwpAQCAtMjc0LDEyICsyNzQsMTIgQEAKIAlpbnQgYWlNYXhHYWluOwogCWludCByYW5nZTEwU3RhcnQ7CS8qIHN0YXJ0IG9mICstMTBWIHJhbmdlICovCiAJaW50IHJhbmdlVW5pU3RhcnQ7CS8qIHN0YXJ0IG9mICsxMFYgcmFuZ2UgKi8KLX0gcnRkQm9hcmQ7Cit9OwogCi1zdGF0aWMgY29uc3QgcnRkQm9hcmQgcnRkNTIwQm9hcmRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0ZEJvYXJkIHJ0ZDUyMEJvYXJkc1tdID0gewogCXsKIAkgICAgICBuYW1lOgkiRE03NTIwIiwKLQkgICAgICBkZXZpY2VfaWQ6MHg3NTIwLAorCSAgICAgIGRldmljZV9pZCA6IDB4NzUyMCwKIAkgICAgICBhaUNoYW5zOgkxNiwKIAkgICAgICBhaUJpdHM6CTEyLAogCSAgICAgIGFpTWF4R2FpbjozMiwKQEAgLTI4OCw3ICsyODgsNyBAQAogCQl9LAogCXsKIAkgICAgICBuYW1lOgkiUENJNDUyMCIsCi0JICAgICAgZGV2aWNlX2lkOjB4NDUyMCwKKwkgICAgICBkZXZpY2VfaWQgOiAweDQ1MjAsCiAJICAgICAgYWlDaGFuczoJMTYsCiAJICAgICAgYWlCaXRzOgkxMiwKIAkgICAgICBhaU1heEdhaW46MTI4LApAQCAtMzA4LDEzICszMDgsMTMgQEAKIC8qCiAgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCiAgKi8KLSNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3QgcnRkQm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHJ0ZEJvYXJkICopZGV2LT5ib2FyZF9wdHIpCiAKIC8qCiAgICBUaGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuCiAgICBUaGlzIGlzIGFsc28gdW5pcXVlIGZvciBlYWNoIGJvYXJkIGluIHRoZSBzeXN0ZW0uCiAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IHJ0ZFByaXZhdGUgewogCS8qIG1lbW9yeSBtYXBwZWQgYm9hcmQgc3RydWN0dXJlcyAqLwogCXZvaWQgKmxhczA7CiAJdm9pZCAqbGFzMTsKQEAgLTMzNCw3ICszMzQsNyBAQAogCXVuc2lnbmVkIGNoYXIgY2hhbkJpcG9sYXJbUlREX01BWF9DSEFOTElTVCAvIDhdOwkvKiBiaXQgYXJyYXkgKi8KIAogCS8qIHJlYWQgYmFjayBkYXRhICovCi0JbHNhbXBsX3QgYW9WYWx1ZVsyXTsJLyogVXNlZCBmb3IgQU8gcmVhZCBiYWNrICovCisJdW5zaWduZWQgaW50IGFvVmFsdWVbMl07CS8qIFVzZWQgZm9yIEFPIHJlYWQgYmFjayAqLwogCiAJLyogdGltZXIgZ2F0ZSAod2hlbiBlbmFibGVkKSAqLwogCXU4IHV0Y0dhdGVbNF07CQkvKiAxIGV4dHJhIGFsbG93cyBzaW1wbGUgcmFuZ2UgY2hlY2sgKi8KQEAgLTM1OCw3ICszNTgsNyBAQAogCXU4IGRtYTFDb250cm9sOwogI2VuZGlmCQkJCS8qIFVTRV9ETUEgKi8KIAl1bnNpZ25lZCBmaWZvTGVuOwotfSBydGRQcml2YXRlOworfTsKIAogLyogYml0IGRlZmluZXMgZm9yICJmbGFncyIgKi8KICNkZWZpbmUgU0VORF9FT1MJMHgwMQkvKiBzZW5kIEVuZCBPZiBTY2FuIGV2ZW50cyAqLwpAQCAtMzY2LDE4ICszNjYsMTggQEAKICNkZWZpbmUgRE1BMV9BQ1RJVkUJMHgwNAkvKiBETUExIGlzIGFjdGl2ZSAqLwogCiAvKiBNYWNyb3MgZm9yIGFjY2Vzc2luZyBjaGFubmVsIGxpc3QgYml0IGFycmF5ICovCi0jZGVmaW5lIENIQU5fQVJSQVlfVEVTVChhcnJheSxpbmRleCkgXAorI2RlZmluZSBDSEFOX0FSUkFZX1RFU1QoYXJyYXksIGluZGV4KSBcCiAJKCgoYXJyYXkpWyhpbmRleCkvOF0gPj4gKChpbmRleCkgJiAweDcpKSAmIDB4MSkKLSNkZWZpbmUgQ0hBTl9BUlJBWV9TRVQoYXJyYXksaW5kZXgpIFwKKyNkZWZpbmUgQ0hBTl9BUlJBWV9TRVQoYXJyYXksIGluZGV4KSBcCiAJKCgoYXJyYXkpWyhpbmRleCkvOF0gfD0gMSA8PCAoKGluZGV4KSAmIDB4NykpKQotI2RlZmluZSBDSEFOX0FSUkFZX0NMRUFSKGFycmF5LGluZGV4KSBcCisjZGVmaW5lIENIQU5fQVJSQVlfQ0xFQVIoYXJyYXksIGluZGV4KSBcCiAJKCgoYXJyYXkpWyhpbmRleCkvOF0gJj0gfigxIDw8ICgoaW5kZXgpICYgMHg3KSkpKQogCiAvKgogICogbW9zdCBkcml2ZXJzIGRlZmluZSB0aGUgZm9sbG93aW5nIG1hY3JvIHRvIG1ha2UgaXQgZWFzeSB0bwogICogYWNjZXNzIHRoZSBwcml2YXRlIHN0cnVjdHVyZS4KICAqLwotI2RlZmluZSBkZXZwcml2ICgocnRkUHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBydGRQcml2YXRlICopZGV2LT5wcml2YXRlKQogCiAvKiBNYWNyb3MgdG8gYWNjZXNzIHJlZ2lzdGVycyAqLwogCkBAIC0zOTQsMTUgKzM5NCwxNSBAQAogICAgIHdyaXRlbCAoMCwgZGV2cHJpdi0+bGFzMCtMQVMwX0NHVF9DTEVBUikKIAogLyogUmVzZXQgY2hhbm5lbCBnYWluIHRhYmxlIHJlYWQgYW5kIHdyaXRlIHBvaW50ZXJzICovCi0jZGVmaW5lIFJ0ZEVuYWJsZUNHVChkZXYsdikgXAorI2RlZmluZSBSdGRFbmFibGVDR1QoZGV2LCB2KSBcCiAgICAgd3JpdGVsICgodiA+IDApID8gMSA6IDAsIGRldnByaXYtPmxhczArTEFTMF9DR1RfRU5BQkxFKQogCiAvKiBXcml0ZSBjaGFubmVsIGdhaW4gdGFibGUgZW50cnkgKi8KLSNkZWZpbmUgUnRkV3JpdGVDR1RhYmxlKGRldix2KSBcCisjZGVmaW5lIFJ0ZFdyaXRlQ0dUYWJsZShkZXYsIHYpIFwKICAgICB3cml0ZWwgKHYsIGRldnByaXYtPmxhczArTEFTMF9DR1RfV1JJVEUpCiAKIC8qIFdyaXRlIENoYW5uZWwgR2FpbiBMYXRjaCAqLwotI2RlZmluZSBSdGRXcml0ZUNHTGF0Y2goZGV2LHYpIFwKKyNkZWZpbmUgUnRkV3JpdGVDR0xhdGNoKGRldiwgdikgXAogICAgIHdyaXRlbCAodiwgZGV2cHJpdi0+bGFzMCtMQVMwX0NHTF9XUklURSkKIAogLyogUmVzZXQgQURDIEZJRk8gKi8KQEAgLTQxMCwzOSArNDEwLDM5IEBACiAgICAgd3JpdGVsICgwLCBkZXZwcml2LT5sYXMwK0xBUzBfQURDX0ZJRk9fQ0xFQVIpCiAKIC8qIFNldCBBREMgc3RhcnQgY29udmVyc2lvbiBzb3VyY2Ugc2VsZWN0ICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRBZGNDb252ZXJzaW9uU291cmNlKGRldix2KSBcCisjZGVmaW5lIFJ0ZEFkY0NvbnZlcnNpb25Tb3VyY2UoZGV2LCB2KSBcCiAgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwK0xBUzBfQURDX0NPTlZFUlNJT04pCiAKIC8qIFNldCBidXJzdCBzdGFydCBzb3VyY2Ugc2VsZWN0ICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRCdXJzdFN0YXJ0U291cmNlKGRldix2KSBcCisjZGVmaW5lIFJ0ZEJ1cnN0U3RhcnRTb3VyY2UoZGV2LCB2KSBcCiAgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwK0xBUzBfQlVSU1RfU1RBUlQpCiAKIC8qIFNldCBQYWNlciBzdGFydCBzb3VyY2Ugc2VsZWN0ICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRQYWNlclN0YXJ0U291cmNlKGRldix2KSBcCisjZGVmaW5lIFJ0ZFBhY2VyU3RhcnRTb3VyY2UoZGV2LCB2KSBcCiAgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwK0xBUzBfUEFDRVJfU1RBUlQpCiAKIC8qIFNldCBQYWNlciBzdG9wIHNvdXJjZSBzZWxlY3QgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIFJ0ZFBhY2VyU3RvcFNvdXJjZShkZXYsdikgXAorI2RlZmluZSBSdGRQYWNlclN0b3BTb3VyY2UoZGV2LCB2KSBcCiAgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwK0xBUzBfUEFDRVJfU1RPUCkKIAogLyogU2V0IFBhY2VyIGNsb2NrIHNvdXJjZSBzZWxlY3QgKHdyaXRlIG9ubHkpIDA9ZXh0ZXJuYWwgMT1pbnRlcm5hbCAqLwotI2RlZmluZSBSdGRQYWNlckNsb2NrU291cmNlKGRldix2KSBcCisjZGVmaW5lIFJ0ZFBhY2VyQ2xvY2tTb3VyY2UoZGV2LCB2KSBcCiAgICAgd3JpdGVsICgodiA+IDApID8gMSA6IDAsIGRldnByaXYtPmxhczArTEFTMF9QQUNFUl9TRUxFQ1QpCiAKIC8qIFNldCBzYW1wbGUgY291bnRlciBzb3VyY2Ugc2VsZWN0ICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRBZGNTYW1wbGVDb3VudGVyU291cmNlKGRldix2KSBcCisjZGVmaW5lIFJ0ZEFkY1NhbXBsZUNvdW50ZXJTb3VyY2UoZGV2LCB2KSBcCiAgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwK0xBUzBfQURDX1NDTlRfU1JDKQogCiAvKiBTZXQgUGFjZXIgdHJpZ2dlciBtb2RlIHNlbGVjdCAod3JpdGUgb25seSkgMD1zaW5nbGUgY3ljbGUsIDE9cmVwZWF0ICovCi0jZGVmaW5lIFJ0ZFBhY2VyVHJpZ2dlck1vZGUoZGV2LHYpIFwKKyNkZWZpbmUgUnRkUGFjZXJUcmlnZ2VyTW9kZShkZXYsIHYpIFwKICAgICB3cml0ZWwgKCh2ID4gMCkgPyAxIDogMCwgZGV2cHJpdi0+bGFzMCtMQVMwX1BBQ0VSX1JFUEVBVCkKIAogLyogU2V0IEFib3V0IGNvdW50ZXIgc3RvcCBlbmFibGUgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIFJ0ZEFib3V0U3RvcEVuYWJsZShkZXYsdikgXAorI2RlZmluZSBSdGRBYm91dFN0b3BFbmFibGUoZGV2LCB2KSBcCiAgICAgd3JpdGVsICgodiA+IDApID8gMSA6IDAsIGRldnByaXYtPmxhczArTEFTMF9BQ05UX1NUT1BfRU5BQkxFKQogCiAvKiBTZXQgZXh0ZXJuYWwgdHJpZ2dlciBwb2xhcml0eSAod3JpdGUgb25seSkgMD1wb3NpdGl2ZSBlZGdlLCAxPW5lZ2F0aXZlICovCi0jZGVmaW5lIFJ0ZFRyaWdnZXJQb2xhcml0eShkZXYsdikgXAorI2RlZmluZSBSdGRUcmlnZ2VyUG9sYXJpdHkoZGV2LCB2KSBcCiAgICAgd3JpdGVsICgodiA+IDApID8gMSA6IDAsIGRldnByaXYtPmxhczArTEFTMF9FVFJHX1BPTEFSSVRZKQogCiAvKiBTdGFydCBzaW5nbGUgQURDIGNvbnZlcnNpb24gKi8KQEAgLTQ3MywxNSArNDczLDE1IEBACiAgICAgcmVhZHcgKGRldnByaXYtPmxhczArTEFTMF9JVCkKIAogLyogSW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgUnRkSW50ZXJydXB0TWFzayhkZXYsdikgXAotICAgIHdyaXRldyAoKGRldnByaXYtPmludE1hc2sgPSAodikpLGRldnByaXYtPmxhczArTEFTMF9JVCkKKyNkZWZpbmUgUnRkSW50ZXJydXB0TWFzayhkZXYsIHYpIFwKKyAgICB3cml0ZXcgKChkZXZwcml2LT5pbnRNYXNrID0gKHYpKSwgZGV2cHJpdi0+bGFzMCtMQVMwX0lUKQogCiAvKiBJbnRlcnJ1cHQgc3RhdHVzIGNsZWFyIChvbmx5IGJpdHMgc2V0IGluIG1hc2spICovCiAjZGVmaW5lIFJ0ZEludGVycnVwdENsZWFyKGRldikgXAogICAgIHJlYWR3IChkZXZwcml2LT5sYXMwK0xBUzBfQ0xFQVIpCiAKIC8qIEludGVycnVwdCBjbGVhciBtYXNrICovCi0jZGVmaW5lIFJ0ZEludGVycnVwdENsZWFyTWFzayhkZXYsdikgXAorI2RlZmluZSBSdGRJbnRlcnJ1cHRDbGVhck1hc2soZGV2LCB2KSBcCiAgICAgd3JpdGV3ICgoZGV2cHJpdi0+aW50Q2xlYXJNYXNrID0gKHYpKSwgZGV2cHJpdi0+bGFzMCtMQVMwX0NMRUFSKQogCiAvKiBJbnRlcnJ1cHQgb3ZlcnJ1biBzdGF0dXMgKi8KQEAgLTQ5NSw5MiArNDk1LDkyIEBACiAvKiBQYWNlciBjb3VudGVyLCAyNGJpdCAqLwogI2RlZmluZSBSdGRQYWNlckNvdW50KGRldikgXAogICAgIHJlYWRsIChkZXZwcml2LT5sYXMwK0xBUzBfUENMSykKLSNkZWZpbmUgUnRkUGFjZXJDb3VudGVyKGRldix2KSBcCi0gICAgd3JpdGVsICgodikgJiAweGZmZmZmZixkZXZwcml2LT5sYXMwK0xBUzBfUENMSykKKyNkZWZpbmUgUnRkUGFjZXJDb3VudGVyKGRldiwgdikgXAorICAgIHdyaXRlbCAoKHYpICYgMHhmZmZmZmYsIGRldnByaXYtPmxhczArTEFTMF9QQ0xLKQogCiAvKiBCdXJzdCBjb3VudGVyLCAxMGJpdCAqLwogI2RlZmluZSBSdGRCdXJzdENvdW50KGRldikgXAogICAgIHJlYWRsIChkZXZwcml2LT5sYXMwK0xBUzBfQkNMSykKLSNkZWZpbmUgUnRkQnVyc3RDb3VudGVyKGRldix2KSBcCi0gICAgd3JpdGVsICgodikgJiAweDNmZixkZXZwcml2LT5sYXMwK0xBUzBfQkNMSykKKyNkZWZpbmUgUnRkQnVyc3RDb3VudGVyKGRldiwgdikgXAorICAgIHdyaXRlbCAoKHYpICYgMHgzZmYsIGRldnByaXYtPmxhczArTEFTMF9CQ0xLKQogCiAvKiBEZWxheSBjb3VudGVyLCAxNmJpdCAqLwogI2RlZmluZSBSdGREZWxheUNvdW50KGRldikgXAogICAgIHJlYWRsIChkZXZwcml2LT5sYXMwK0xBUzBfRENMSykKLSNkZWZpbmUgUnRkRGVsYXlDb3VudGVyKGRldix2KSBcCisjZGVmaW5lIFJ0ZERlbGF5Q291bnRlcihkZXYsIHYpIFwKICAgICB3cml0ZWwgKCh2KSAmIDB4ZmZmZiwgZGV2cHJpdi0+bGFzMCtMQVMwX0RDTEspCiAKIC8qIEFib3V0IGNvdW50ZXIsIDE2Yml0ICovCiAjZGVmaW5lIFJ0ZEFib3V0Q291bnQoZGV2KSBcCiAgICAgcmVhZGwgKGRldnByaXYtPmxhczArTEFTMF9BQ05UKQotI2RlZmluZSBSdGRBYm91dENvdW50ZXIoZGV2LHYpIFwKKyNkZWZpbmUgUnRkQWJvdXRDb3VudGVyKGRldiwgdikgXAogICAgIHdyaXRlbCAoKHYpICYgMHhmZmZmLCBkZXZwcml2LT5sYXMwK0xBUzBfQUNOVCkKIAogLyogQURDIHNhbXBsZSBjb3VudGVyLCAxMGJpdCAqLwogI2RlZmluZSBSdGRBZGNTYW1wbGVDb3VudChkZXYpIFwKICAgICByZWFkbCAoZGV2cHJpdi0+bGFzMCtMQVMwX0FEQ19TQ05UKQotI2RlZmluZSBSdGRBZGNTYW1wbGVDb3VudGVyKGRldix2KSBcCisjZGVmaW5lIFJ0ZEFkY1NhbXBsZUNvdW50ZXIoZGV2LCB2KSBcCiAgICAgd3JpdGVsICgodikgJiAweDNmZiwgZGV2cHJpdi0+bGFzMCtMQVMwX0FEQ19TQ05UKQogCiAvKiBVc2VyIFRpbWVyL0NvdW50ZXIgKDgyNTQpICovCi0jZGVmaW5lIFJ0ZFV0Y0NvdW50ZXJHZXQoZGV2LG4pIFwKKyNkZWZpbmUgUnRkVXRjQ291bnRlckdldChkZXYsIG4pIFwKICAgICByZWFkYiAoZGV2cHJpdi0+bGFzMCBcCiAgICAgICAgICsgKChuIDw9IDApID8gTEFTMF9VVEMwIDogKCgxID09IG4pID8gTEFTMF9VVEMxIDogTEFTMF9VVEMyKSkpCiAKLSNkZWZpbmUgUnRkVXRjQ291bnRlclB1dChkZXYsbix2KSBcCisjZGVmaW5lIFJ0ZFV0Y0NvdW50ZXJQdXQoZGV2LCBuLCB2KSBcCiAgICAgd3JpdGViICgodikgJiAweGZmLCBkZXZwcml2LT5sYXMwIFwKICAgICAgICAgKyAoKG4gPD0gMCkgPyBMQVMwX1VUQzAgOiAoKDEgPT0gbikgPyBMQVMwX1VUQzEgOiBMQVMwX1VUQzIpKSkKIAogLyogU2V0IFVUQyAoODI1NCkgY29udHJvbCBieXRlICAqLwotI2RlZmluZSBSdGRVdGNDdHJsUHV0KGRldixuLHYpIFwKKyNkZWZpbmUgUnRkVXRjQ3RybFB1dChkZXYsIG4sIHYpIFwKICAgICB3cml0ZWIgKGRldnByaXYtPnV0Y0N0cmxbKG4pICYgM10gPSAoKChuKSAmIDMpIDw8IDYpIHwgKCh2KSAmIDB4M2YpLCBcCiAgICAgICBkZXZwcml2LT5sYXMwICsgTEFTMF9VVENfQ1RSTCkKIAogLyogU2V0IFVUQ24gY2xvY2sgc291cmNlICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRVdGNDbG9ja1NvdXJjZShkZXYsbix2KSBcCisjZGVmaW5lIFJ0ZFV0Y0Nsb2NrU291cmNlKGRldiwgbiwgdikgXAogICAgIHdyaXRldyAodiwgZGV2cHJpdi0+bGFzMCBcCiAgICAgICAgICsgKChuIDw9IDApID8gTEFTMF9VVEMwX0NMT0NLIDogXAogICAgICAgICAgICAoKDEgPT0gbikgPyBMQVMwX1VUQzFfQ0xPQ0sgOiBMQVMwX1VUQzJfQ0xPQ0spKSkKIAogLyogU2V0IFVUQ24gZ2F0ZSBzb3VyY2UgKHdyaXRlIG9ubHkpICovCi0jZGVmaW5lIFJ0ZFV0Y0dhdGVTb3VyY2UoZGV2LG4sdikgXAorI2RlZmluZSBSdGRVdGNHYXRlU291cmNlKGRldiwgbiwgdikgXAogICAgIHdyaXRldyAodiwgZGV2cHJpdi0+bGFzMCBcCiAgICAgICAgICsgKChuIDw9IDApID8gTEFTMF9VVEMwX0dBVEUgOiBcCiAgICAgICAgICAgICgoMSA9PSBuKSA/IExBUzBfVVRDMV9HQVRFIDogTEFTMF9VVEMyX0dBVEUpKSkKIAogLyogVXNlciBvdXRwdXQgTiBzb3VyY2Ugc2VsZWN0ICh3cml0ZSBvbmx5KSAqLwotI2RlZmluZSBSdGRVc3JPdXRTb3VyY2UoZGV2LG4sdikgXAotICAgIHdyaXRlbCAodixkZXZwcml2LT5sYXMwKygobiA8PSAwKSA/IExBUzBfVU9VVDBfU0VMRUNUIDogTEFTMF9VT1VUMV9TRUxFQ1QpKQorI2RlZmluZSBSdGRVc3JPdXRTb3VyY2UoZGV2LCBuLCB2KSBcCisgICAgd3JpdGVsICh2LCBkZXZwcml2LT5sYXMwKygobiA8PSAwKSA/IExBUzBfVU9VVDBfU0VMRUNUIDogTEFTMF9VT1VUMV9TRUxFQ1QpKQogCiAvKiBEaWdpdGFsIElPICovCiAjZGVmaW5lIFJ0ZERpbzBSZWFkKGRldikgXAogICAgIChyZWFkdyAoZGV2cHJpdi0+bGFzMCtMQVMwX0RJTzApICYgMHhmZikKLSNkZWZpbmUgUnRkRGlvMFdyaXRlKGRldix2KSBcCisjZGVmaW5lIFJ0ZERpbzBXcml0ZShkZXYsIHYpIFwKICAgICB3cml0ZXcgKCh2KSAmIDB4ZmYsIGRldnByaXYtPmxhczArTEFTMF9ESU8wKQogCiAjZGVmaW5lIFJ0ZERpbzFSZWFkKGRldikgXAogICAgIChyZWFkdyAoZGV2cHJpdi0+bGFzMCtMQVMwX0RJTzEpICYgMHhmZikKLSNkZWZpbmUgUnRkRGlvMVdyaXRlKGRldix2KSBcCisjZGVmaW5lIFJ0ZERpbzFXcml0ZShkZXYsIHYpIFwKICAgICB3cml0ZXcgKCh2KSAmIDB4ZmYsIGRldnByaXYtPmxhczArTEFTMF9ESU8xKQogCiAjZGVmaW5lIFJ0ZERpb1N0YXR1c1JlYWQoZGV2KSBcCiAgICAgKHJlYWR3IChkZXZwcml2LT5sYXMwK0xBUzBfRElPX1NUQVRVUykgJiAweGZmKQotI2RlZmluZSBSdGREaW9TdGF0dXNXcml0ZShkZXYsdikgXAorI2RlZmluZSBSdGREaW9TdGF0dXNXcml0ZShkZXYsIHYpIFwKICAgICB3cml0ZXcgKChkZXZwcml2LT5kaW9TdGF0dXMgPSAodikpLCBkZXZwcml2LT5sYXMwK0xBUzBfRElPX1NUQVRVUykKIAogI2RlZmluZSBSdGREaW8wQ3RybFJlYWQoZGV2KSBcCiAgICAgKHJlYWR3IChkZXZwcml2LT5sYXMwK0xBUzBfRElPMF9DVFJMKSAmIDB4ZmYpCi0jZGVmaW5lIFJ0ZERpbzBDdHJsV3JpdGUoZGV2LHYpIFwKKyNkZWZpbmUgUnRkRGlvMEN0cmxXcml0ZShkZXYsIHYpIFwKICAgICB3cml0ZXcgKCh2KSAmIDB4ZmYsIGRldnByaXYtPmxhczArTEFTMF9ESU8wX0NUUkwpCiAKIC8qIERpZ2l0YWwgdG8gQW5hbG9nIGNvbnZlcnRlciAqLwogLyogV3JpdGUgb25lIGRhdGEgdmFsdWUgKHNpZ24gKyAxMmJpdCArIG1hcmtlciBiaXRzKSAqLwogLyogTm90ZTogbWF0Y2hlcyB3aGF0IERNQSB3b3VsZCBwdXQuICBBY3R1YWwgdmFsdWUgPDwgMyAqLwotI2RlZmluZSBSdGREYWNGaWZvUHV0KGRldixuLHYpIFwKKyNkZWZpbmUgUnRkRGFjRmlmb1B1dChkZXYsIG4sIHYpIFwKICAgICB3cml0ZXcgKCh2KSwgZGV2cHJpdi0+bGFzMSArKCgobikgPT0gMCkgPyBMQVMxX0RBQzFfRklGTyA6IExBUzFfREFDMl9GSUZPKSkKIAogLyogU3RhcnQgc2luZ2xlIERBQyBjb252ZXJzaW9uICovCi0jZGVmaW5lIFJ0ZERhY1VwZGF0ZShkZXYsbikgXAorI2RlZmluZSBSdGREYWNVcGRhdGUoZGV2LCBuKSBcCiAgICAgd3JpdGV3ICgwLCBkZXZwcml2LT5sYXMwICsoKChuKSA9PSAwKSA/IExBUzBfREFDMSA6IExBUzBfREFDMikpCiAKIC8qIFN0YXJ0IHNpbmdsZSBEQUMgY29udmVyc2lvbiBvbiBib3RoIERBQ3MgKi8KQEAgLTU4OCwyMCArNTg4LDIwIEBACiAgICAgd3JpdGV3ICgwLCBkZXZwcml2LT5sYXMwK0xBUzBfREFDKQogCiAvKiBTZXQgREFDIG91dHB1dCB0eXBlIGFuZCByYW5nZSAqLwotI2RlZmluZSBSdGREYWNSYW5nZShkZXYsbix2KSBcCisjZGVmaW5lIFJ0ZERhY1JhbmdlKGRldiwgbiwgdikgXAogICAgIHdyaXRldyAoKHYpICYgNywgZGV2cHJpdi0+bGFzMCBcCiAJKygoKG4pID09IDApID8gTEFTMF9EQUMxX0NUUkwgOiBMQVMwX0RBQzJfQ1RSTCkpCiAKIC8qIFJlc2V0IERBQyBGSUZPICovCi0jZGVmaW5lIFJ0ZERhY0NsZWFyRmlmbyhkZXYsbikgXAorI2RlZmluZSBSdGREYWNDbGVhckZpZm8oZGV2LCBuKSBcCiAgICAgd3JpdGVsICgwLCBkZXZwcml2LT5sYXMwKygoKG4pID09IDApID8gTEFTMF9EQUMxX1JFU0VUIDogTEFTMF9EQUMyX1JFU0VUKSkKIAogLyogU2V0IHNvdXJjZSBmb3IgRE1BIDAgKHdyaXRlIG9ubHksIHNoYWRvdz8pICovCi0jZGVmaW5lIFJ0ZERtYTBTb3VyY2UoZGV2LG4pIFwKKyNkZWZpbmUgUnRkRG1hMFNvdXJjZShkZXYsIG4pIFwKICAgICB3cml0ZWwgKChuKSAmIDB4ZiwgZGV2cHJpdi0+bGFzMCtMQVMwX0RNQTBfU1JDKQogCiAvKiBTZXQgc291cmNlIGZvciBETUEgMSAod3JpdGUgb25seSwgc2hhZG93PykgKi8KLSNkZWZpbmUgUnRkRG1hMVNvdXJjZShkZXYsbikgXAorI2RlZmluZSBSdGREbWExU291cmNlKGRldiwgbikgXAogICAgIHdyaXRlbCAoKG4pICYgMHhmLCBkZXZwcml2LT5sYXMwK0xBUzBfRE1BMV9TUkMpCiAKIC8qIFJlc2V0IGJvYXJkIHN0YXRlIGZvciBETUEgMCAqLwpAQCAtNjE1LDUxICs2MTUsNTEgQEAKIC8qIFBMWDkwODAgaW50ZXJydXB0IG1hc2sgYW5kIHN0YXR1cyAqLwogI2RlZmluZSBSdGRQbHhJbnRlcnJ1cHRSZWFkKGRldikgXAogICAgIHJlYWRsIChkZXZwcml2LT5sY2ZnK0xDRkdfSVRDU1IpCi0jZGVmaW5lIFJ0ZFBseEludGVycnVwdFdyaXRlKGRldix2KSBcCisjZGVmaW5lIFJ0ZFBseEludGVycnVwdFdyaXRlKGRldiwgdikgXAogICAgIHdyaXRlbCAodiwgZGV2cHJpdi0+bGNmZytMQ0ZHX0lUQ1NSKQogCiAvKiBTZXQgIG1vZGUgZm9yIERNQSAwICovCi0jZGVmaW5lIFJ0ZERtYTBNb2RlKGRldixtKSBcCisjZGVmaW5lIFJ0ZERtYTBNb2RlKGRldiwgbSkgXAogICAgIHdyaXRlbCAoKG0pLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BTU9ERTApCiAKIC8qIFNldCBQQ0kgYWRkcmVzcyBmb3IgRE1BIDAgKi8KLSNkZWZpbmUgUnRkRG1hMFBjaUFkZHIoZGV2LGEpIFwKKyNkZWZpbmUgUnRkRG1hMFBjaUFkZHIoZGV2LCBhKSBcCiAgICAgd3JpdGVsICgoYSksIGRldnByaXYtPmxjZmcrTENGR19ETUFQQURSMCkKIAogLyogU2V0IGxvY2FsIGFkZHJlc3MgZm9yIERNQSAwICovCi0jZGVmaW5lIFJ0ZERtYTBMb2NhbEFkZHIoZGV2LGEpIFwKKyNkZWZpbmUgUnRkRG1hMExvY2FsQWRkcihkZXYsIGEpIFwKICAgICB3cml0ZWwgKChhKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQUxBRFIwKQogCiAvKiBTZXQgYnl0ZSBjb3VudCBmb3IgRE1BIDAgKi8KLSNkZWZpbmUgUnRkRG1hMENvdW50KGRldixjKSBcCisjZGVmaW5lIFJ0ZERtYTBDb3VudChkZXYsIGMpIFwKICAgICB3cml0ZWwgKChjKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQVNJWjApCiAKIC8qIFNldCBuZXh0IGRlc2NyaXB0b3IgZm9yIERNQSAwICovCi0jZGVmaW5lIFJ0ZERtYTBOZXh0KGRldixhKSBcCisjZGVmaW5lIFJ0ZERtYTBOZXh0KGRldiwgYSkgXAogICAgIHdyaXRlbCAoKGEpLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BRFBSMCkKIAogLyogU2V0ICBtb2RlIGZvciBETUEgMSAqLwotI2RlZmluZSBSdGREbWExTW9kZShkZXYsbSkgXAorI2RlZmluZSBSdGREbWExTW9kZShkZXYsIG0pIFwKICAgICB3cml0ZWwgKChtKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQU1PREUxKQogCiAvKiBTZXQgUENJIGFkZHJlc3MgZm9yIERNQSAxICovCi0jZGVmaW5lIFJ0ZERtYTFQY2lBZGRyKGRldixhKSBcCisjZGVmaW5lIFJ0ZERtYTFQY2lBZGRyKGRldiwgYSkgXAogICAgIHdyaXRlbCAoKGEpLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BQURSMSkKIAogLyogU2V0IGxvY2FsIGFkZHJlc3MgZm9yIERNQSAxICovCi0jZGVmaW5lIFJ0ZERtYTFMb2NhbEFkZHIoZGV2LGEpIFwKKyNkZWZpbmUgUnRkRG1hMUxvY2FsQWRkcihkZXYsIGEpIFwKICAgICB3cml0ZWwgKChhKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQUxBRFIxKQogCiAvKiBTZXQgYnl0ZSBjb3VudCBmb3IgRE1BIDEgKi8KLSNkZWZpbmUgUnRkRG1hMUNvdW50KGRldixjKSBcCisjZGVmaW5lIFJ0ZERtYTFDb3VudChkZXYsIGMpIFwKICAgICB3cml0ZWwgKChjKSwgZGV2cHJpdi0+bGNmZytMQ0ZHX0RNQVNJWjEpCiAKIC8qIFNldCBuZXh0IGRlc2NyaXB0b3IgZm9yIERNQSAxICovCi0jZGVmaW5lIFJ0ZERtYTFOZXh0KGRldixhKSBcCisjZGVmaW5lIFJ0ZERtYTFOZXh0KGRldiwgYSkgXAogICAgIHdyaXRlbCAoKGEpLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BRFBSMSkKIAogLyogU2V0IGNvbnRyb2wgZm9yIERNQSAwICh3cml0ZSBvbmx5LCBzaGFkb3c/KSAqLwotI2RlZmluZSBSdGREbWEwQ29udHJvbChkZXYsbikgXAorI2RlZmluZSBSdGREbWEwQ29udHJvbChkZXYsIG4pIFwKICAgICB3cml0ZWIgKGRldnByaXYtPmRtYTBDb250cm9sID0gKG4pLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BQ1NSMCkKIAogLyogR2V0IHN0YXR1cyBmb3IgRE1BIDAgKi8KQEAgLTY2Nyw3ICs2NjcsNyBAQAogICAgIHJlYWRiIChkZXZwcml2LT5sY2ZnK0xDRkdfRE1BQ1NSMCkKIAogLyogU2V0IGNvbnRyb2wgZm9yIERNQSAxICh3cml0ZSBvbmx5LCBzaGFkb3c/KSAqLwotI2RlZmluZSBSdGREbWExQ29udHJvbChkZXYsbikgXAorI2RlZmluZSBSdGREbWExQ29udHJvbChkZXYsIG4pIFwKICAgICB3cml0ZWIgKGRldnByaXYtPmRtYTFDb250cm9sID0gKG4pLCBkZXZwcml2LT5sY2ZnK0xDRkdfRE1BQ1NSMSkKIAogLyogR2V0IHN0YXR1cyBmb3IgRE1BIDEgKi8KQEAgLTY3NSwzOSArNjc1LDM5IEBACiAgICAgcmVhZGIgKGRldnByaXYtPmxjZmcrTENGR19ETUFDU1IxKQogCiAvKgotICogVGhlIGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZQogICogd2hpY2ggZnVuY3Rpb25zIHRvIGNhbGwgdG8gY29uZmlndXJlL2RlY29uZmlndXJlIChhdHRhYy9kZXRhY2gpCiAgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKICAqIHRoZSBkZXZpY2UgY29kZS4KICAqLwotc3RhdGljIGludCBydGRfYXR0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9kZXZjb25maWcgKiBpdCk7Ci1zdGF0aWMgaW50IHJ0ZF9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHJ0ZF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KTsKK3N0YXRpYyBpbnQgcnRkX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKIAotc3RhdGljIGNvbWVkaV9kcml2ZXIgcnRkNTIwRHJpdmVyID0geworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIHJ0ZDUyMERyaXZlciA9IHsKICAgICAgIGRyaXZlcl9uYW1lOiBEUlZfTkFNRSwKLSAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKLSAgICAgIGF0dGFjaDpydGRfYXR0YWNoLAotICAgICAgZGV0YWNoOnJ0ZF9kZXRhY2gsCisgICAgICBtb2R1bGUgOiBUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaCA6IHJ0ZF9hdHRhY2gsCisgICAgICBkZXRhY2ggOiBydGRfZGV0YWNoLAogfTsKIAotc3RhdGljIGludCBydGRfYWlfcmluc24oY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBydGRfYW9fd2luc24oY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBydGRfYW9fcmluc24oY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBydGRfZGlvX2luc25fYml0cyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7Ci1zdGF0aWMgaW50IHJ0ZF9kaW9faW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBydGRfYWlfY21kdGVzdChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfY21kICogY21kKTsKLXN0YXRpYyBpbnQgcnRkX2FpX2NtZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcyk7Ci1zdGF0aWMgaW50IHJ0ZF9haV9jYW5jZWwoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpOwotLy9zdGF0aWMgaW50IHJ0ZF9haV9wb2xsIChjb21lZGlfZGV2aWNlICpkZXYsY29tZWRpX3N1YmRldmljZSAqcyk7CitzdGF0aWMgaW50IHJ0ZF9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHJ0ZF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHJ0ZF9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHJ0ZF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgcnRkX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHJ0ZF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfY21kICpjbWQpOworc3RhdGljIGludCBydGRfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK3N0YXRpYyBpbnQgcnRkX2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CisvKiBzdGF0aWMgaW50IHJ0ZF9haV9wb2xsIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsgKi8KIHN0YXRpYyBpbnQgcnRkX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZE1vZGUpOwogc3RhdGljIGlycXJldHVybl90IHJ0ZF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRyk7Ci1zdGF0aWMgaW50IHJ0ZDUyMF9wcm9iZV9maWZvX2RlcHRoKGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IHJ0ZDUyMF9wcm9iZV9maWZvX2RlcHRoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogCiAvKgogICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKQEAgLTcxNSw5ICs3MTUsOSBAQAogICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKICAqIGFkZHJlc3MuCiAgKi8KLXN0YXRpYyBpbnQgcnRkX2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpCitzdGF0aWMgaW50IHJ0ZF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewkJCQkvKiBib2FyZCBuYW1lIGFuZCBvcHRpb25zIGZsYWdzICovCi0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OwogCWludCByZXQ7CiAJcmVzb3VyY2Vfc2l6ZV90IHBoeXNMYXMwOwkvKiBjb25maWd1YXRpb24gKi8KQEAgLTczOSw3ICs3MzksNyBAQAogCSAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKIAkgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCiAJICovCi0JaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YocnRkUHJpdmF0ZSkpIDwgMCkKKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgcnRkUHJpdmF0ZSkpIDwgMCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKgpAQCAtNzc5LDcgKzc3OSw4IEBACiAJZGV2cHJpdi0+cGNpX2RldiA9IHBjaWRldjsKIAlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CiAKLQlpZiAoKHJldCA9IGNvbWVkaV9wY2lfZW5hYmxlKHBjaWRldiwgRFJWX05BTUUpKSA8IDApIHsKKwlyZXQgPSBjb21lZGlfcGNpX2VuYWJsZShwY2lkZXYsIERSVl9OQU1FKTsKKwlpZiAocmV0IDwgMCkgewogCQlwcmludGsoIkZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZSBhbmQgcmVxdWVzdCByZWdpb25zLlxuIik7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtODY2LDcgKzg2Nyw3IEBACiAJcy0+ZG9fY21kID0gcnRkX2FpX2NtZDsKIAlzLT5kb19jbWR0ZXN0ID0gcnRkX2FpX2NtZHRlc3Q7CiAJcy0+Y2FuY2VsID0gcnRkX2FpX2NhbmNlbDsKLQkvKnMtPnBvbGwgPSBydGRfYWlfcG9sbDsgKi8vKiBub3QgcmVhZHkgeWV0ICovCisJLyogcy0+cG9sbCA9IHJ0ZF9haV9wb2xsOyAqLyAvKiBub3QgcmVhZHkgeWV0ICovCiAKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKIAkvKiBhbmFsb2cgb3V0cHV0IHN1YmRldmljZSAqLwpAQCAtOTE4LDggKzkxOSwxMCBAQAogCS8qIFRPRE86IHNldCB1c2VyIG91dCBzb3VyY2UgPz8/ICovCiAKIAkvKiBjaGVjayBpZiBvdXIgaW50ZXJydXB0IGlzIGF2YWlsYWJsZSBhbmQgZ2V0IGl0ICovCi0JaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoZGV2cHJpdi0+cGNpX2Rldi0+aXJxLCBydGRfaW50ZXJydXB0LAotCQkJCUlSUUZfU0hBUkVELCBEUlZfTkFNRSwgZGV2KSkgPCAwKSB7CisJcmV0ID0gY29tZWRpX3JlcXVlc3RfaXJxKGRldnByaXYtPnBjaV9kZXYtPmlycSwgcnRkX2ludGVycnVwdCwKKwkJCQkgSVJRRl9TSEFSRUQsIERSVl9OQU1FLCBkZXYpOworCisJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IGludGVycnVwdCEgKCV1KVxuIiwKIAkJCWRldnByaXYtPnBjaV9kZXYtPmlycSk7CiAJCXJldHVybiByZXQ7CkBAIC0xMDA1LDcgKzEwMDgsNyBAQAogCiAjaWYgMAogCS8qIGhpdCBhbiBlcnJvciwgY2xlYW4gdXAgbWVtb3J5IGFuZCByZXR1cm4gcmV0ICovCi0vL3J0ZF9hdHRhY2hfZGllX2Vycm9yOgorLyogcnRkX2F0dGFjaF9kaWVfZXJyb3I6ICovCiAjaWZkZWYgVVNFX0RNQQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IERNQV9DSEFJTl9DT1VOVDsgaW5kZXgrKykgewogCQlpZiAoTlVMTCAhPSBkZXZwcml2LT5kbWEwQnVmZltpbmRleF0pIHsJLyogZnJlZSBidWZmZXIgbWVtb3J5ICovCkBAIC0xMDU3LDcgKzEwNjAsNyBAQAogICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQogICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KICAqLwotc3RhdGljIGludCBydGRfZGV0YWNoKGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgaW50IHJ0ZF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBVU0VfRE1BCiAJaW50IGluZGV4OwpAQCAtMTEzNyw3ICsxMTQwLDcgQEAKIC8qCiAgIENvbnZlcnQgYSBzaW5nbGUgY29tZWRpIGNoYW5uZWwtZ2FpbiBlbnRyeSB0byBhIFJURDUyMCB0YWJsZSBlbnRyeQogKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBydGRDb252ZXJ0Q2hhbkdhaW4oY29tZWRpX2RldmljZSAqIGRldiwKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBydGRDb252ZXJ0Q2hhbkdhaW4oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKIAl1bnNpZ25lZCBpbnQgY29tZWRpQ2hhbiwgaW50IGNoYW5JbmRleCkKIHsJCQkJLyogaW5kZXggaW4gY2hhbm5lbCBsaXN0ICovCiAJdW5zaWduZWQgaW50IGNoYW4sIHJhbmdlLCBhcmVmOwpAQCAtMTE4Nyw3ICsxMTkwLDcgQEAKIC8qCiAgIFNldHVwIHRoZSBjaGFubmVsLWdhaW4gdGFibGUgZnJvbSBhIGNvbWVkaSBsaXN0CiAqLwotc3RhdGljIHZvaWQgcnRkX2xvYWRfY2hhbm5lbGdhaW5fbGlzdChjb21lZGlfZGV2aWNlICogZGV2LAorc3RhdGljIHZvaWQgcnRkX2xvYWRfY2hhbm5lbGdhaW5fbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCXVuc2lnbmVkIGludCBuX2NoYW4sIHVuc2lnbmVkIGludCAqbGlzdCkKIHsKIAlpZiAobl9jaGFuID4gMSkgewkvKiBzZXR1cCBjaGFubmVsIGdhaW4gdGFibGUgKi8KQEAgLTEyMDYsOSArMTIwOSw5IEBACiAKIC8qIGRldGVybWluZSBmaWZvIHNpemUgYnkgZG9pbmcgYWRjIGNvbnZlcnNpb25zIHVudGlsIHRoZSBmaWZvIGhhbGYKIGVtcHR5IHN0YXR1cyBmbGFnIGNsZWFycyAqLwotc3RhdGljIGludCBydGQ1MjBfcHJvYmVfZmlmb19kZXB0aChjb21lZGlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHJ0ZDUyMF9wcm9iZV9maWZvX2RlcHRoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JbHNhbXBsX3QgY2hhbnNwZWMgPSBDUl9QQUNLKDAsIDAsIEFSRUZfR1JPVU5EKTsKKwl1bnNpZ25lZCBpbnQgY2hhbnNwZWMgPSBDUl9QQUNLKDAsIDAsIEFSRUZfR1JPVU5EKTsKIAl1bnNpZ25lZCBpOwogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBsaW1pdCA9IDB4MjAwMDsKIAl1bnNpZ25lZCBmaWZvX3NpemUgPSAwOwpAQCAtMTIzNCw3ICsxMjM3LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCVJ0ZEFkY0NsZWFyRmlmbyhkZXYpOwotCWlmKGZpZm9fc2l6ZSAhPSAweDQwMCB8fCBmaWZvX3NpemUgIT0gMHgyMDAwKQorCWlmKGZpZm9fc2l6ZSAhPSAweDQwMCAmJiBmaWZvX3NpemUgIT0gMHgyMDAwKQogCXsKIAkJcnRfcHJpbnRrKCJcbmNvbWVkaTogJXM6IHVuZXhwZWN0ZWQgZmlmbyBzaXplIG9mICVpLCBleHBlY3RlZCAxMDI0IG9yIDgxOTIuXG4iLAogCQkJRFJWX05BTUUsIGZpZm9fc2l6ZSk7CkBAIC0xMjUxLDggKzEyNTQsOCBAQAogICBOb3RlLCB3ZSBkb24ndCBkbyBhbnkgc2V0dGxpbmcgZGVsYXlzLiAgVXNlIGEgaW5zdHJ1Y3Rpb24gbGlzdCB0bwogICBzZWxlY3QsIGRlbGF5LCB0aGVuIHJlYWQuCiAgKi8KLXN0YXRpYyBpbnQgcnRkX2FpX3JpbnNuKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBydGRfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IG4sIGlpOwogCWludCBzdGF0OwpAQCAtMTMwNCwxMiArMTMwNywxMiBAQAogCiAgIFRoZSBtYW51YWwgY2xhaW1zIHRoYXQgd2UgY2FuIGRvIGEgbHdvcmQgcmVhZCwgYnV0IGl0IGRvZXNuJ3Qgd29yayBoZXJlLgogKi8KLXN0YXRpYyBpbnQgYWlfcmVhZF9uKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGFpX3JlYWRfbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgaW50IGNvdW50KQogewogCWludCBpaTsKIAogCWZvciAoaWkgPSAwOyBpaSA8IGNvdW50OyBpaSsrKSB7Ci0JCXNhbXBsX3Qgc2FtcGxlOworCQlzaG9ydCBzYW1wbGU7CiAJCXMxNiBkOwogCiAJCWlmICgwID09IGRldnByaXYtPmFpQ291bnQpIHsJLyogZG9uZSAqLwpAQCAtMTM0MywxMCArMTM0NiwxMCBAQAogLyoKICAgdW5rbm93biBhbW91dCBvZiBkYXRhIGlzIHdhaXRpbmcgaW4gZmlmby4KICovCi1zdGF0aWMgaW50IGFpX3JlYWRfZHJlZ3MoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCitzdGF0aWMgaW50IGFpX3JlYWRfZHJlZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJd2hpbGUgKFJ0ZEZpZm9TdGF0dXMoZGV2KSAmIEZTX0FEQ19OT1RfRU1QVFkpIHsJLyogMSAtPiBub3QgZW1wdHkgKi8KLQkJc2FtcGxfdCBzYW1wbGU7CisJCXNob3J0IHNhbXBsZTsKIAkJczE2IGQgPSBSdGRBZGNGaWZvR2V0KGRldik7CS8qIGdldCAycyBjb21wIHZhbHVlICovCiAKIAkJaWYgKDAgPT0gZGV2cHJpdi0+YWlDb3VudCkgewkvKiBkb25lICovCkBAIC0xMzcyLDIwICsxMzc1LDIwIEBACiAvKgogICBUZXJtaW5hdGUgYSBETUEgdHJhbnNmZXIgYW5kIHdhaXQgZm9yIGV2ZXJ5dGhpbmcgdG8gcXVpZXQgZG93bgogKi8KLXZvaWQgYWJvcnRfZG1hKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVuc2lnbmVkIGludCBjaGFubmVsKQordm9pZCBhYm9ydF9kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwpCiB7CQkJCS8qIERNQSBjaGFubmVsIDAsIDEgKi8KIAl1bnNpZ25lZCBsb25nIGRtYV9jc19hZGRyOwkvKiB0aGUgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXIgKi8KIAl1aW50OF90IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgaWk7Ci0JLy91bnNpZ25lZCBsb25nIGZsYWdzOworCS8qIHVuc2lnbmVkIGxvbmcgZmxhZ3M7ICovCiAKIAlkbWFfY3NfYWRkciA9ICh1bnNpZ25lZCBsb25nKWRldnByaXYtPmxjZmcKIAkJKyAoKGNoYW5uZWwgPT0gMCkgPyBMQ0ZHX0RNQUNTUjAgOiBMQ0ZHX0RNQUNTUjEpOwogCi0JLy8gc3BpbmxvY2sgZm9yIHBseCBkbWEgY29udHJvbC9zdGF0dXMgcmVnCi0JLy9jb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoICZkZXYtPnNwaW5sb2NrLCBmbGFncyApOworCS8qICBzcGlubG9jayBmb3IgcGx4IGRtYSBjb250cm9sL3N0YXR1cyByZWcgKi8KKwkvKiBjb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoICZkZXYtPnNwaW5sb2NrLCBmbGFncyApOyAqLwogCi0JLy8gYWJvcnQgZG1hIHRyYW5zZmVyIGlmIG5lY2Vzc2FyeQorCS8qICBhYm9ydCBkbWEgdHJhbnNmZXIgaWYgbmVjZXNzYXJ5ICovCiAJc3RhdHVzID0gcmVhZGIoZG1hX2NzX2FkZHIpOwogCWlmICgoc3RhdHVzICYgUExYX0RNQV9FTl9CSVQpID09IDApIHsJLyogbm90IGVuYWJsZWQgKEVycm9yPykgKi8KIAkJRFBSSU5USygicnRkNTIwOiBBYm9ydERtYSBvbiBub24tYWN0aXZlIGNoYW5uZWwgJWQgKDB4JXgpXG4iLApAQCAtMTQxMCw3ICsxNDEzLDcgQEAKIAkvKiBzZXQgYWJvcnQgYml0IGZvciBjaGFubmVsICovCiAJd3JpdGViKFBMWF9ETUFfQUJPUlRfQklULCBkbWFfY3NfYWRkcik7CiAKLQkvLyB3YWl0IGZvciBkbWEgZG9uZSBiaXQgdG8gYmUgc2V0CisJLyogIHdhaXQgZm9yIGRtYSBkb25lIGJpdCB0byBiZSBzZXQgKi8KIAlzdGF0dXMgPSByZWFkYihkbWFfY3NfYWRkcik7CiAJZm9yIChpaSA9IDA7CiAJCShzdGF0dXMgJiBQTFhfRE1BX0RPTkVfQklUKSA9PSAwICYmIGlpIDwgUlREX0RNQV9USU1FT1VUOwpAQCAtMTQyNCwxNCArMTQyNywxNCBAQAogCX0KIAogICAgICAgYWJvcnREbWFFeGl0OgotCS8vY29tZWRpX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoICZkZXYtPnNwaW5sb2NrLCBmbGFncyApOworCS8qIGNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCAmZGV2LT5zcGlubG9jaywgZmxhZ3MgKTsgKi8KIH0KIAogLyoKICAgUHJvY2VzcyB3aGF0IGlzIGluIHRoZSBETUEgdHJhbnNmZXIgYnVmZmVyIGFuZCBwYXNzIHRvIGNvbWVkaQogICBOb3RlOiB0aGlzIGlzIG5vdCByZS1lbnRyYW50CiAqLwotc3RhdGljIGludCBhaV9wcm9jZXNzX2RtYShjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgYWlfcHJvY2Vzc19kbWEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJaW50IGlpLCBuOwogCXMxNiAqZHA7CkBAIC0xNDQxLDcgKzE0NDQsNyBAQAogCiAJZHAgPSBkZXZwcml2LT5kbWEwQnVmZltkZXZwcml2LT5kbWEwT2Zmc2V0XTsKIAlmb3IgKGlpID0gMDsgaWkgPCBkZXZwcml2LT5maWZvTGVuIC8gMjspIHsJLyogY29udmVydCBzYW1wbGVzICovCi0JCXNhbXBsX3Qgc2FtcGxlOworCQlzaG9ydCBzYW1wbGU7CiAKIAkJaWYgKENIQU5fQVJSQVlfVEVTVChkZXZwcml2LT5jaGFuQmlwb2xhciwgcy0+YXN5bmMtPmN1cl9jaGFuKSkgewogCQkJc2FtcGxlID0gKCpkcCA+PiAzKSArIDIwNDg7CS8qIGNvbnZlcnQgdG8gY29tZWRpIHVuc2lnbmVkIGRhdGEgKi8KQEAgLTE0OTQsMTAgKzE0OTcsMTAgQEAKIAl2b2lkICpkCQkJLyogb3VyIGRhdGEgKi8KIAlQVF9SRUdTX0FSRykKIHsJCQkJLyogY3B1IGNvbnRleHQgKGlnbm9yZWQpICovCi0JY29tZWRpX2RldmljZSAqZGV2ID0gZDsJLyogbXVzdCBiZSBjYWxsZWQgImRldiIgZm9yIGRldnByaXYgKi8KKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsJLyogbXVzdCBiZSBjYWxsZWQgImRldiIgZm9yIGRldnByaXYgKi8KIAl1MTYgc3RhdHVzOwogCXUxNiBmaWZvU3RhdHVzOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOwkvKiBhbmFsb2cgaW4gc3ViZGV2aWNlICovCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyAwOwkvKiBhbmFsb2cgaW4gc3ViZGV2aWNlICovCiAKIAlpZiAoIWRldi0+YXR0YWNoZWQpIHsKIAkJcmV0dXJuIElSUV9OT05FOwpAQCAtMTY0NSw3ICsxNjQ4LDcgQEAKIC8qCiAgIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgYXZhaWxhYmxlCiAqLwotc3RhdGljIGludCBydGRfYWlfcG9sbChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgcnRkX2FpX3BvbGwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJLyogVE9ETzogVGhpcyBuZWVkcyB0byBtYXNrIGludGVycnVwdHMsIHJlYWRfZHJlZ3MsIGFuZCB0aGVuIHJlLWVuYWJsZSAqLwogCS8qIE5vdCBzdXJlIHdoYXQgdG8gZG8gaWYgRE1BIGlzIGFjdGl2ZSAqLwpAQCAtMTY2Miw4ICsxNjY1LDggQEAKICAgdGhlIGNvbW1hbmQgcGFzc2VzLgogKi8KIAotc3RhdGljIGludCBydGRfYWlfY21kdGVzdChjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfY21kICogY21kKQorc3RhdGljIGludCBydGRfYWlfY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCWludCBlcnIgPSAwOwogCWludCB0bXA7CkBAIC0xODY3LDkgKzE4NzAsOSBAQAogICBUaGlzIGlzIHVzdWFsbHkgZG9uZSBieSBhbiBpbnRlcnJ1cHQgaGFuZGxlci4KICAgVXNlcmxhbmQgZ2V0cyB0byB0aGUgZGF0YSB1c2luZyByZWFkIGNhbGxzLgogKi8KLXN0YXRpYyBpbnQgcnRkX2FpX2NtZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgcnRkX2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQljb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJaW50IHRpbWVyOwogCiAJLyogc3RvcCBhbnl0aGluZyBjdXJyZW50bHkgcnVubmluZyAqLwpAQCAtMjA2NCw3ICsyMDY3LDcgQEAKIC8qCiAgIFN0b3AgYSBydW5uaW5nIGRhdGEgYXF1aXNpdGlvbi4KICovCi1zdGF0aWMgaW50IHJ0ZF9haV9jYW5jZWwoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpCitzdGF0aWMgaW50IHJ0ZF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJdTE2IHN0YXR1czsKIApAQCAtMjEzMiw4ICsyMTM1LDggQEAKIC8qCiAgIE91dHB1dCBvbmUgKG9yIG1vcmUpIGFuYWxvZyB2YWx1ZXMgdG8gYSBzaW5nbGUgcG9ydCBhcyBmYXN0IGFzIHBvc3NpYmxlLgogKi8KLXN0YXRpYyBpbnQgcnRkX2FvX3dpbnNuKGNvbWVkaV9kZXZpY2UgKiBkZXYsCi0JY29tZWRpX3N1YmRldmljZSAqIHMsIGNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBydGRfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGk7CiAJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKQEAgLTIxNTIsNyArMjE1NSw3IEBACiAJCS8qIFZFUklGWTogY29tZWRpIHJhbmdlIGFuZCBvZmZzZXQgY29udmVyc2lvbnMgKi8KIAogCQlpZiAoKHJhbmdlID4gMSkJLyogYmlwb2xhciAqLwotCQkJJiYoZGF0YVtpXSA8IDIwNDgpKSB7CisJCQkmJiAoZGF0YVtpXSA8IDIwNDgpKSB7CiAJCQkvKiBvZmZzZXQgYW5kIHNpZ24gZXh0ZW5kICovCiAJCQl2YWwgPSAoKChpbnQpZGF0YVtpXSkgLSAyMDQ4KSA8PCAzOwogCQl9IGVsc2UgewkvKiB1bmlwb2xvciAqLwpAQCAtMjE4Nyw4ICsyMTkwLDggQEAKIAogLyogQU8gc3ViZGV2aWNlcyBzaG91bGQgaGF2ZSBhIHJlYWQgaW5zbiBhcyB3ZWxsIGFzIGEgd3JpdGUgaW5zbi4KICAqIFVzdWFsbHkgdGhpcyBtZWFucyBjb3B5aW5nIGEgdmFsdWUgc3RvcmVkIGluIGRldnByaXYuICovCi1zdGF0aWMgaW50IHJ0ZF9hb19yaW5zbihjb21lZGlfZGV2aWNlICogZGV2LAotCWNvbWVkaV9zdWJkZXZpY2UgKiBzLCBjb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgcnRkX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBpOwogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC0yMjEwLDggKzIyMTMsOCBAQAogICogVGhpcyBhbGxvd3MgcGFja2VkIHJlYWRpbmcvd3JpdGluZyBvZiB0aGUgRElPIGNoYW5uZWxzLiAgVGhlCiAgKiBjb21lZGkgY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlCiAgKi8KLXN0YXRpYyBpbnQgcnRkX2Rpb19pbnNuX2JpdHMoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHJ0ZF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWlmIChpbnNuLT5uICE9IDIpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjIzNyw4ICsyMjQwLDggQEAKIC8qCiAgIENvbmZpZ3VyZSBvbmUgYml0IG9uIGEgSU8gcG9ydCBhcyBJbnB1dCBvciBPdXRwdXQgKGhlbmNlIHRoZSBuYW1lIDotKS4KICovCi1zdGF0aWMgaW50IHJ0ZF9kaW9faW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHJ0ZF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0ZDUyMC5oCmluZGV4IDBlYjUwYjguLmEzZWMyNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGQ1MjAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRkNTIwLmgKQEAgLTI5LDM2NiArMjksMzY2IEBACiAgIExBUzAgUnVudGltZSBBcmVhCiAgIExvY2FsIEFkZHJlc3MgU3BhY2UgMCBPZmZzZXQJCVJlYWQgRnVuY3Rpb24JV3JpdGUgRnVuY3Rpb24KICovCi0jZGVmaW5lIExBUzBfU1BBUkVfMDAgICAgMHgwMDAwCS8vIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLQotI2RlZmluZSBMQVMwX1NQQVJFXzA0ICAgIDB4MDAwNAkvLyAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLSNkZWZpbmUgTEFTMF9VU0VSX0lPICAgICAweDAwMDgJLy8gUmVhZCBVc2VyIElucHV0cyAgICAgICAgICAgICAgICBXcml0ZSBVc2VyIE91dHB1dHMKLSNkZWZpbmUgTEFTMF9TUEFSRV8wQyAgICAweDAwMEMJLy8gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi0jZGVmaW5lIExBUzBfQURDICAgICAgICAgMHgwMDEwCS8vIFJlYWQgRklGTyBTdGF0dXMgICAgICAgICAgICAgICAgU29mdHdhcmUgQS9EIFN0YXJ0Ci0jZGVmaW5lIExBUzBfREFDMSAgICAgICAgMHgwMDE0CS8vIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgRC9BMSBVcGRhdGUKLSNkZWZpbmUgTEFTMF9EQUMyICAgICAgICAweDAwMTgJLy8gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBEL0EyIFVwZGF0ZQotI2RlZmluZSBMQVMwX1NQQVJFXzFDICAgIDB4MDAxQwkvLyAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KLSNkZWZpbmUgTEFTMF9TUEFSRV8yMCAgICAweDAwMjAJLy8gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCi0jZGVmaW5lIExBUzBfREFDICAgICAgICAgMHgwMDI0CS8vIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgU2ltdWx0YW5lb3VzIEQvQTEgYW5kIEQvQTIgVXBkYXRlCi0jZGVmaW5lIExBUzBfUEFDRVIgICAgICAgMHgwMDI4CS8vIFNvZnR3YXJlIFBhY2VyIFN0YXJ0ICAgICAgICAgICAgU29mdHdhcmUgUGFjZXIgU3RvcAotI2RlZmluZSBMQVMwX1RJTUVSICAgICAgIDB4MDAyQwkvLyBSZWFkIFRpbWVyIENvdW50ZXJzIFN0YXR1cyAgICAgIEhESU4gU29mdHdhcmUgVHJpZ2dlcgotI2RlZmluZSBMQVMwX0lUICAgICAgICAgIDB4MDAzMAkvLyBSZWFkIEludGVycnVwdCBTdGF0dXMgICAgICAgICAgIFdyaXRlIEludGVycnVwdCBFbmFibGUgTWFzayBSZWdpc3RlcgotI2RlZmluZSBMQVMwX0NMRUFSICAgICAgIDB4MDAzNAkvLyBDbGVhciBJVHMgc2V0IGJ5IENsZWFyIE1hc2sgICAgIFNldCBJbnRlcnJ1cHQgQ2xlYXIgTWFzawotI2RlZmluZSBMQVMwX09WRVJSVU4gICAgIDB4MDAzOAkvLyBSZWFkIHBlbmRpbmcgaW50ZXJydXB0cyAgICAgICAgIENsZWFyIE92ZXJydW4gUmVnaXN0ZXIKLSNkZWZpbmUgTEFTMF9TUEFSRV8zQyAgICAweDAwM0MJLy8gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtCisjZGVmaW5lIExBUzBfU1BBUkVfMDAgICAgMHgwMDAwCS8qICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gKi8KKyNkZWZpbmUgTEFTMF9TUEFSRV8wNCAgICAweDAwMDQJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAqLworI2RlZmluZSBMQVMwX1VTRVJfSU8gICAgIDB4MDAwOAkvKiAgUmVhZCBVc2VyIElucHV0cyAgICAgICAgICAgICAgICBXcml0ZSBVc2VyIE91dHB1dHMgKi8KKyNkZWZpbmUgTEFTMF9TUEFSRV8wQyAgICAweDAwMEMJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAqLworI2RlZmluZSBMQVMwX0FEQyAgICAgICAgIDB4MDAxMAkvKiAgUmVhZCBGSUZPIFN0YXR1cyAgICAgICAgICAgICAgICBTb2Z0d2FyZSBBL0QgU3RhcnQgKi8KKyNkZWZpbmUgTEFTMF9EQUMxICAgICAgICAweDAwMTQJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgRC9BMSBVcGRhdGUgKi8KKyNkZWZpbmUgTEFTMF9EQUMyICAgICAgICAweDAwMTgJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgRC9BMiBVcGRhdGUgKi8KKyNkZWZpbmUgTEFTMF9TUEFSRV8xQyAgICAweDAwMUMJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAqLworI2RlZmluZSBMQVMwX1NQQVJFXzIwICAgIDB4MDAyMAkvKiAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICovCisjZGVmaW5lIExBUzBfREFDICAgICAgICAgMHgwMDI0CS8qICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIFNpbXVsdGFuZW91cyBEL0ExIGFuZCBEL0EyIFVwZGF0ZSAqLworI2RlZmluZSBMQVMwX1BBQ0VSICAgICAgIDB4MDAyOAkvKiAgU29mdHdhcmUgUGFjZXIgU3RhcnQgICAgICAgICAgICBTb2Z0d2FyZSBQYWNlciBTdG9wICovCisjZGVmaW5lIExBUzBfVElNRVIgICAgICAgMHgwMDJDCS8qICBSZWFkIFRpbWVyIENvdW50ZXJzIFN0YXR1cyAgICAgIEhESU4gU29mdHdhcmUgVHJpZ2dlciAqLworI2RlZmluZSBMQVMwX0lUICAgICAgICAgIDB4MDAzMAkvKiAgUmVhZCBJbnRlcnJ1cHQgU3RhdHVzICAgICAgICAgICBXcml0ZSBJbnRlcnJ1cHQgRW5hYmxlIE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFTMF9DTEVBUiAgICAgICAweDAwMzQJLyogIENsZWFyIElUcyBzZXQgYnkgQ2xlYXIgTWFzayAgICAgU2V0IEludGVycnVwdCBDbGVhciBNYXNrICovCisjZGVmaW5lIExBUzBfT1ZFUlJVTiAgICAgMHgwMDM4CS8qICBSZWFkIHBlbmRpbmcgaW50ZXJydXB0cyAgICAgICAgIENsZWFyIE92ZXJydW4gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTEFTMF9TUEFSRV8zQyAgICAweDAwM0MJLyogIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAqLwogCiAvKgogICBMQVMwIFJ1bnRpbWUgQXJlYSBUaW1lci9Db3VudGVyLERpZy5JTwogICBOYW1lCQkJTG9jYWwgQWRkcmVzcwkJCUZ1bmN0aW9uCiAqLwotI2RlZmluZSBMQVMwX1BDTEsgICAgICAgIDB4MDA0MAkvLyBQYWNlciBDbG9jayB2YWx1ZSAoMjRiaXQpICAgICAgICAgICAgIFBhY2VyIENsb2NrIGxvYWQgKDI0Yml0KQotI2RlZmluZSBMQVMwX0JDTEsgICAgICAgIDB4MDA0NAkvLyBCdXJzdCBDbG9jayB2YWx1ZSAoMTBiaXQpICAgICAgICAgICAgIEJ1cnN0IENsb2NrIGxvYWQgKDEwYml0KQotI2RlZmluZSBMQVMwX0FEQ19TQ05UICAgIDB4MDA0OAkvLyBBL0QgU2FtcGxlIGNvdW50ZXIgdmFsdWUgKDEwYml0KSAgICAgIEEvRCBTYW1wbGUgY291bnRlciBsb2FkICgxMGJpdCkKLSNkZWZpbmUgTEFTMF9EQUMxX1VDTlQgICAweDAwNEMJLy8gRC9BMSBVcGRhdGUgY291bnRlciB2YWx1ZSAoMTAgYml0KSAgICBEL0ExIFVwZGF0ZSBjb3VudGVyIGxvYWQgKDEwYml0KQotI2RlZmluZSBMQVMwX0RBQzJfVUNOVCAgIDB4MDA1MAkvLyBEL0EyIFVwZGF0ZSBjb3VudGVyIHZhbHVlICgxMCBiaXQpICAgIEQvQTIgVXBkYXRlIGNvdW50ZXIgbG9hZCAoMTBiaXQpCi0jZGVmaW5lIExBUzBfRENOVCAgICAgICAgMHgwMDU0CS8vIERlbGF5IGNvdW50ZXIgdmFsdWUgKDE2IGJpdCkgICAgICAgICAgRGVsYXkgY291bnRlciBsb2FkICgxNmJpdCkKLSNkZWZpbmUgTEFTMF9BQ05UICAgICAgICAweDAwNTgJLy8gQWJvdXQgY291bnRlciB2YWx1ZSAoMTYgYml0KSAgICAgICAgICBBYm91dCBjb3VudGVyIGxvYWQgKDE2Yml0KQotI2RlZmluZSBMQVMwX0RBQ19DTEsgICAgIDB4MDA1QwkvLyBEQUMgY2xvY2sgdmFsdWUgKDE2Yml0KSAgICAgICAgICAgICAgIERBQyBjbG9jayBsb2FkICgxNmJpdCkKLSNkZWZpbmUgTEFTMF9VVEMwICAgICAgICAweDAwNjAJLy8gODI1NCBUQyBDb3VudGVyIDAgVXNlciBUQyAwIHZhbHVlICAgICBMb2FkIGNvdW50IGluIFRDIENvdW50ZXIgMAotI2RlZmluZSBMQVMwX1VUQzEgICAgICAgIDB4MDA2NAkvLyA4MjU0IFRDIENvdW50ZXIgMSBVc2VyIFRDIDEgdmFsdWUgICAgIExvYWQgY291bnQgaW4gVEMgQ291bnRlciAxCi0jZGVmaW5lIExBUzBfVVRDMiAgICAgICAgMHgwMDY4CS8vIDgyNTQgVEMgQ291bnRlciAyIFVzZXIgVEMgMiB2YWx1ZSAgICAgTG9hZCBjb3VudCBpbiBUQyBDb3VudGVyIDIKLSNkZWZpbmUgTEFTMF9VVENfQ1RSTCAgICAweDAwNkMJLy8gODI1NCBUQyBDb250cm9sIFdvcmQgICAgICAgICAgICAgICAgICBQcm9ncmFtIGNvdW50ZXIgbW9kZSBmb3IgVEMKLSNkZWZpbmUgTEFTMF9ESU8wICAgICAgICAweDAwNzAJLy8gRGlnaXRhbCBJL08gUG9ydCAwIFJlYWQgUG9ydCAgICAgICAgICBEaWdpdGFsIEkvTyBQb3J0IDAgV3JpdGUgUG9ydAotI2RlZmluZSBMQVMwX0RJTzEgICAgICAgIDB4MDA3NAkvLyBEaWdpdGFsIEkvTyBQb3J0IDEgUmVhZCBQb3J0ICAgICAgICAgIERpZ2l0YWwgSS9PIFBvcnQgMSBXcml0ZSBQb3J0Ci0jZGVmaW5lIExBUzBfRElPMF9DVFJMICAgMHgwMDc4CS8vIENsZWFyIGRpZ2l0YWwgSVJRIHN0YXR1cyBmbGFnL3JlYWQgICAgQ2xlYXIgZGlnaXRhbCBjaGlwL3Byb2dyYW0gUG9ydCAwCi0jZGVmaW5lIExBUzBfRElPX1NUQVRVUyAgMHgwMDdDCS8vIFJlYWQgRGlnaXRhbCBJL08gU3RhdHVzIHdvcmQgICAgICAgICAgUHJvZ3JhbSBkaWdpdGFsIGNvbnRyb2wgcmVnaXN0ZXIgJgorI2RlZmluZSBMQVMwX1BDTEsgICAgICAgIDB4MDA0MAkvKiAgUGFjZXIgQ2xvY2sgdmFsdWUgKDI0Yml0KSAgICAgICAgICAgICBQYWNlciBDbG9jayBsb2FkICgyNGJpdCkgKi8KKyNkZWZpbmUgTEFTMF9CQ0xLICAgICAgICAweDAwNDQJLyogIEJ1cnN0IENsb2NrIHZhbHVlICgxMGJpdCkgICAgICAgICAgICAgQnVyc3QgQ2xvY2sgbG9hZCAoMTBiaXQpICovCisjZGVmaW5lIExBUzBfQURDX1NDTlQgICAgMHgwMDQ4CS8qICBBL0QgU2FtcGxlIGNvdW50ZXIgdmFsdWUgKDEwYml0KSAgICAgIEEvRCBTYW1wbGUgY291bnRlciBsb2FkICgxMGJpdCkgKi8KKyNkZWZpbmUgTEFTMF9EQUMxX1VDTlQgICAweDAwNEMJLyogIEQvQTEgVXBkYXRlIGNvdW50ZXIgdmFsdWUgKDEwIGJpdCkgICAgRC9BMSBVcGRhdGUgY291bnRlciBsb2FkICgxMGJpdCkgKi8KKyNkZWZpbmUgTEFTMF9EQUMyX1VDTlQgICAweDAwNTAJLyogIEQvQTIgVXBkYXRlIGNvdW50ZXIgdmFsdWUgKDEwIGJpdCkgICAgRC9BMiBVcGRhdGUgY291bnRlciBsb2FkICgxMGJpdCkgKi8KKyNkZWZpbmUgTEFTMF9EQ05UICAgICAgICAweDAwNTQJLyogIERlbGF5IGNvdW50ZXIgdmFsdWUgKDE2IGJpdCkgICAgICAgICAgRGVsYXkgY291bnRlciBsb2FkICgxNmJpdCkgKi8KKyNkZWZpbmUgTEFTMF9BQ05UICAgICAgICAweDAwNTgJLyogIEFib3V0IGNvdW50ZXIgdmFsdWUgKDE2IGJpdCkgICAgICAgICAgQWJvdXQgY291bnRlciBsb2FkICgxNmJpdCkgKi8KKyNkZWZpbmUgTEFTMF9EQUNfQ0xLICAgICAweDAwNUMJLyogIERBQyBjbG9jayB2YWx1ZSAoMTZiaXQpICAgICAgICAgICAgICAgREFDIGNsb2NrIGxvYWQgKDE2Yml0KSAqLworI2RlZmluZSBMQVMwX1VUQzAgICAgICAgIDB4MDA2MAkvKiAgODI1NCBUQyBDb3VudGVyIDAgVXNlciBUQyAwIHZhbHVlICAgICBMb2FkIGNvdW50IGluIFRDIENvdW50ZXIgMCAqLworI2RlZmluZSBMQVMwX1VUQzEgICAgICAgIDB4MDA2NAkvKiAgODI1NCBUQyBDb3VudGVyIDEgVXNlciBUQyAxIHZhbHVlICAgICBMb2FkIGNvdW50IGluIFRDIENvdW50ZXIgMSAqLworI2RlZmluZSBMQVMwX1VUQzIgICAgICAgIDB4MDA2OAkvKiAgODI1NCBUQyBDb3VudGVyIDIgVXNlciBUQyAyIHZhbHVlICAgICBMb2FkIGNvdW50IGluIFRDIENvdW50ZXIgMiAqLworI2RlZmluZSBMQVMwX1VUQ19DVFJMICAgIDB4MDA2QwkvKiAgODI1NCBUQyBDb250cm9sIFdvcmQgICAgICAgICAgICAgICAgICBQcm9ncmFtIGNvdW50ZXIgbW9kZSBmb3IgVEMgKi8KKyNkZWZpbmUgTEFTMF9ESU8wICAgICAgICAweDAwNzAJLyogIERpZ2l0YWwgSS9PIFBvcnQgMCBSZWFkIFBvcnQgICAgICAgICAgRGlnaXRhbCBJL08gUG9ydCAwIFdyaXRlIFBvcnQgKi8KKyNkZWZpbmUgTEFTMF9ESU8xICAgICAgICAweDAwNzQJLyogIERpZ2l0YWwgSS9PIFBvcnQgMSBSZWFkIFBvcnQgICAgICAgICAgRGlnaXRhbCBJL08gUG9ydCAxIFdyaXRlIFBvcnQgKi8KKyNkZWZpbmUgTEFTMF9ESU8wX0NUUkwgICAweDAwNzgJLyogIENsZWFyIGRpZ2l0YWwgSVJRIHN0YXR1cyBmbGFnL3JlYWQgICAgQ2xlYXIgZGlnaXRhbCBjaGlwL3Byb2dyYW0gUG9ydCAwICovCisjZGVmaW5lIExBUzBfRElPX1NUQVRVUyAgMHgwMDdDCS8qICBSZWFkIERpZ2l0YWwgSS9PIFN0YXR1cyB3b3JkICAgICAgICAgIFByb2dyYW0gZGlnaXRhbCBjb250cm9sIHJlZ2lzdGVyICYgKi8KIAogLyoKICAgTEFTMCBTZXR1cCBBcmVhCiAgIE5hbWUJCQlMb2NhbCBBZGRyZXNzCQkJRnVuY3Rpb24KICovCi0jZGVmaW5lIExBUzBfQk9BUkRfUkVTRVQgICAgICAgIDB4MDEwMAkvLyBCb2FyZCByZXNldAotI2RlZmluZSBMQVMwX0RNQTBfU1JDICAgICAgICAgICAweDAxMDQJLy8gRE1BIDAgU291cmNlcyBzZWxlY3QKLSNkZWZpbmUgTEFTMF9ETUExX1NSQyAgICAgICAgICAgMHgwMTA4CS8vIERNQSAxIFNvdXJjZXMgc2VsZWN0Ci0jZGVmaW5lIExBUzBfQURDX0NPTlZFUlNJT04gICAgIDB4MDEwQwkvLyBBL0QgQ29udmVyc2lvbiBTaWduYWwgc2VsZWN0Ci0jZGVmaW5lIExBUzBfQlVSU1RfU1RBUlQgICAgICAgIDB4MDExMAkvLyBCdXJzdCBDbG9jayBTdGFydCBUcmlnZ2VyIHNlbGVjdAotI2RlZmluZSBMQVMwX1BBQ0VSX1NUQVJUICAgICAgICAweDAxMTQJLy8gUGFjZXIgQ2xvY2sgU3RhcnQgVHJpZ2dlciBzZWxlY3QKLSNkZWZpbmUgTEFTMF9QQUNFUl9TVE9QICAgICAgICAgMHgwMTE4CS8vIFBhY2VyIENsb2NrIFN0b3AgVHJpZ2dlciBzZWxlY3QKLSNkZWZpbmUgTEFTMF9BQ05UX1NUT1BfRU5BQkxFICAgMHgwMTFDCS8vIEFib3V0IENvdW50ZXIgU3RvcCBFbmFibGUKLSNkZWZpbmUgTEFTMF9QQUNFUl9SRVBFQVQgICAgICAgMHgwMTIwCS8vIFBhY2VyIFN0YXJ0IFRyaWdnZXIgTW9kZSBzZWxlY3QKLSNkZWZpbmUgTEFTMF9ESU5fU1RBUlQgICAgICAgICAgMHgwMTI0CS8vIEhpZ2ggU3BlZWQgRGlnaXRhbCBJbnB1dCBTYW1wbGluZyBTaWduYWwgc2VsZWN0Ci0jZGVmaW5lIExBUzBfRElOX0ZJRk9fQ0xFQVIgICAgIDB4MDEyOAkvLyBEaWdpdGFsIElucHV0IEZJRk8gQ2xlYXIKLSNkZWZpbmUgTEFTMF9BRENfRklGT19DTEVBUiAgICAgMHgwMTJDCS8vIEEvRCBGSUZPIENsZWFyCi0jZGVmaW5lIExBUzBfQ0dUX1dSSVRFICAgICAgICAgIDB4MDEzMAkvLyBDaGFubmVsIEdhaW4gVGFibGUgV3JpdGUKLSNkZWZpbmUgTEFTMF9DR0xfV1JJVEUgICAgICAgICAgMHgwMTM0CS8vIENoYW5uZWwgR2FpbiBMYXRjaCBXcml0ZQotI2RlZmluZSBMQVMwX0NHX0RBVEEgICAgICAgICAgICAweDAxMzgJLy8gRGlnaXRhbCBUYWJsZSBXcml0ZQotI2RlZmluZSBMQVMwX0NHVF9FTkFCTEUJCTB4MDEzQwkvLyBDaGFubmVsIEdhaW4gVGFibGUgRW5hYmxlCi0jZGVmaW5lIExBUzBfQ0dfRU5BQkxFICAgICAgICAgIDB4MDE0MAkvLyBEaWdpdGFsIFRhYmxlIEVuYWJsZQotI2RlZmluZSBMQVMwX0NHVF9QQVVTRSAgICAgICAgICAweDAxNDQJLy8gVGFibGUgUGF1c2UgRW5hYmxlCi0jZGVmaW5lIExBUzBfQ0dUX1JFU0VUICAgICAgICAgIDB4MDE0OAkvLyBSZXNldCBDaGFubmVsIEdhaW4gVGFibGUKLSNkZWZpbmUgTEFTMF9DR1RfQ0xFQVIgICAgICAgICAgMHgwMTRDCS8vIENsZWFyIENoYW5uZWwgR2FpbiBUYWJsZQotI2RlZmluZSBMQVMwX0RBQzFfQ1RSTCAgICAgICAgICAweDAxNTAJLy8gRC9BMSBvdXRwdXQgdHlwZS9yYW5nZQotI2RlZmluZSBMQVMwX0RBQzFfU1JDICAgICAgICAgICAweDAxNTQJLy8gRC9BMSB1cGRhdGUgc291cmNlCi0jZGVmaW5lIExBUzBfREFDMV9DWUNMRSAgICAgICAgIDB4MDE1OAkvLyBEL0ExIGN5Y2xlIG1vZGUKLSNkZWZpbmUgTEFTMF9EQUMxX1JFU0VUICAgICAgICAgMHgwMTVDCS8vIEQvQTEgRklGTyByZXNldAotI2RlZmluZSBMQVMwX0RBQzFfRklGT19DTEVBUiAgICAweDAxNjAJLy8gRC9BMSBGSUZPIGNsZWFyCi0jZGVmaW5lIExBUzBfREFDMl9DVFJMICAgICAgICAgIDB4MDE2NAkvLyBEL0EyIG91dHB1dCB0eXBlL3JhbmdlCi0jZGVmaW5lIExBUzBfREFDMl9TUkMgICAgICAgICAgIDB4MDE2OAkvLyBEL0EyIHVwZGF0ZSBzb3VyY2UKLSNkZWZpbmUgTEFTMF9EQUMyX0NZQ0xFICAgICAgICAgMHgwMTZDCS8vIEQvQTIgY3ljbGUgbW9kZQotI2RlZmluZSBMQVMwX0RBQzJfUkVTRVQgICAgICAgICAweDAxNzAJLy8gRC9BMiBGSUZPIHJlc2V0Ci0jZGVmaW5lIExBUzBfREFDMl9GSUZPX0NMRUFSICAgIDB4MDE3NAkvLyBEL0EyIEZJRk8gY2xlYXIKLSNkZWZpbmUgTEFTMF9BRENfU0NOVF9TUkMgICAgICAgMHgwMTc4CS8vIEEvRCBTYW1wbGUgQ291bnRlciBTb3VyY2Ugc2VsZWN0Ci0jZGVmaW5lIExBUzBfUEFDRVJfU0VMRUNUICAgICAgIDB4MDE4MAkvLyBQYWNlciBDbG9jayBzZWxlY3QKLSNkZWZpbmUgTEFTMF9TQlVTMF9TUkMgICAgICAgICAgMHgwMTg0CS8vIFN5bmNCdXMgMCBTb3VyY2Ugc2VsZWN0Ci0jZGVmaW5lIExBUzBfU0JVUzBfRU5BQkxFICAgICAgIDB4MDE4OAkvLyBTeW5jQnVzIDAgZW5hYmxlCi0jZGVmaW5lIExBUzBfU0JVUzFfU1JDICAgICAgICAgIDB4MDE4QwkvLyBTeW5jQnVzIDEgU291cmNlIHNlbGVjdAotI2RlZmluZSBMQVMwX1NCVVMxX0VOQUJMRSAgICAgICAweDAxOTAJLy8gU3luY0J1cyAxIGVuYWJsZQotI2RlZmluZSBMQVMwX1NCVVMyX1NSQyAgICAgICAgICAweDAxOTgJLy8gU3luY0J1cyAyIFNvdXJjZSBzZWxlY3QKLSNkZWZpbmUgTEFTMF9TQlVTMl9FTkFCTEUgICAgICAgMHgwMTlDCS8vIFN5bmNCdXMgMiBlbmFibGUKLSNkZWZpbmUgTEFTMF9FVFJHX1BPTEFSSVRZICAgICAgMHgwMUE0CS8vIEV4dGVybmFsIFRyaWdnZXIgcG9sYXJpdHkgc2VsZWN0Ci0jZGVmaW5lIExBUzBfRUlOVF9QT0xBUklUWSAgICAgIDB4MDFBOAkvLyBFeHRlcm5hbCBJbnRlcnJ1cHQgcG9sYXJpdHkgc2VsZWN0Ci0jZGVmaW5lIExBUzBfVVRDMF9DTE9DSyAgICAgICAgIDB4MDFBQwkvLyBVVEMwIENsb2NrIHNlbGVjdAotI2RlZmluZSBMQVMwX1VUQzBfR0FURSAgICAgICAgICAweDAxQjAJLy8gVVRDMCBHYXRlIHNlbGVjdAotI2RlZmluZSBMQVMwX1VUQzFfQ0xPQ0sgICAgICAgICAweDAxQjQJLy8gVVRDMSBDbG9jayBzZWxlY3QKLSNkZWZpbmUgTEFTMF9VVEMxX0dBVEUgICAgICAgICAgMHgwMUI4CS8vIFVUQzEgR2F0ZSBzZWxlY3QKLSNkZWZpbmUgTEFTMF9VVEMyX0NMT0NLICAgICAgICAgMHgwMUJDCS8vIFVUQzIgQ2xvY2sgc2VsZWN0Ci0jZGVmaW5lIExBUzBfVVRDMl9HQVRFICAgICAgICAgIDB4MDFDMAkvLyBVVEMyIEdhdGUgc2VsZWN0Ci0jZGVmaW5lIExBUzBfVU9VVDBfU0VMRUNUICAgICAgIDB4MDFDNAkvLyBVc2VyIE91dHB1dCAwIHNvdXJjZSBzZWxlY3QKLSNkZWZpbmUgTEFTMF9VT1VUMV9TRUxFQ1QgICAgICAgMHgwMUM4CS8vIFVzZXIgT3V0cHV0IDEgc291cmNlIHNlbGVjdAotI2RlZmluZSBMQVMwX0RNQTBfUkVTRVQgICAgICAgICAweDAxQ0MJLy8gRE1BMCBSZXF1ZXN0IHN0YXRlIG1hY2hpbmUgcmVzZXQKLSNkZWZpbmUgTEFTMF9ETUExX1JFU0VUICAgICAgICAgMHgwMUQwCS8vIERNQTEgUmVxdWVzdCBzdGF0ZSBtYWNoaW5lIHJlc2V0CisjZGVmaW5lIExBUzBfQk9BUkRfUkVTRVQgICAgICAgIDB4MDEwMAkvKiAgQm9hcmQgcmVzZXQgKi8KKyNkZWZpbmUgTEFTMF9ETUEwX1NSQyAgICAgICAgICAgMHgwMTA0CS8qICBETUEgMCBTb3VyY2VzIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX0RNQTFfU1JDICAgICAgICAgICAweDAxMDgJLyogIERNQSAxIFNvdXJjZXMgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfQURDX0NPTlZFUlNJT04gICAgIDB4MDEwQwkvKiAgQS9EIENvbnZlcnNpb24gU2lnbmFsIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX0JVUlNUX1NUQVJUICAgICAgICAweDAxMTAJLyogIEJ1cnN0IENsb2NrIFN0YXJ0IFRyaWdnZXIgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfUEFDRVJfU1RBUlQgICAgICAgIDB4MDExNAkvKiAgUGFjZXIgQ2xvY2sgU3RhcnQgVHJpZ2dlciBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9QQUNFUl9TVE9QICAgICAgICAgMHgwMTE4CS8qICBQYWNlciBDbG9jayBTdG9wIFRyaWdnZXIgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfQUNOVF9TVE9QX0VOQUJMRSAgIDB4MDExQwkvKiAgQWJvdXQgQ291bnRlciBTdG9wIEVuYWJsZSAqLworI2RlZmluZSBMQVMwX1BBQ0VSX1JFUEVBVCAgICAgICAweDAxMjAJLyogIFBhY2VyIFN0YXJ0IFRyaWdnZXIgTW9kZSBzZWxlY3QgKi8KKyNkZWZpbmUgTEFTMF9ESU5fU1RBUlQgICAgICAgICAgMHgwMTI0CS8qICBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgU2FtcGxpbmcgU2lnbmFsIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX0RJTl9GSUZPX0NMRUFSICAgICAweDAxMjgJLyogIERpZ2l0YWwgSW5wdXQgRklGTyBDbGVhciAqLworI2RlZmluZSBMQVMwX0FEQ19GSUZPX0NMRUFSICAgICAweDAxMkMJLyogIEEvRCBGSUZPIENsZWFyICovCisjZGVmaW5lIExBUzBfQ0dUX1dSSVRFICAgICAgICAgIDB4MDEzMAkvKiAgQ2hhbm5lbCBHYWluIFRhYmxlIFdyaXRlICovCisjZGVmaW5lIExBUzBfQ0dMX1dSSVRFICAgICAgICAgIDB4MDEzNAkvKiAgQ2hhbm5lbCBHYWluIExhdGNoIFdyaXRlICovCisjZGVmaW5lIExBUzBfQ0dfREFUQSAgICAgICAgICAgIDB4MDEzOAkvKiAgRGlnaXRhbCBUYWJsZSBXcml0ZSAqLworI2RlZmluZSBMQVMwX0NHVF9FTkFCTEUJCTB4MDEzQwkvKiAgQ2hhbm5lbCBHYWluIFRhYmxlIEVuYWJsZSAqLworI2RlZmluZSBMQVMwX0NHX0VOQUJMRSAgICAgICAgICAweDAxNDAJLyogIERpZ2l0YWwgVGFibGUgRW5hYmxlICovCisjZGVmaW5lIExBUzBfQ0dUX1BBVVNFICAgICAgICAgIDB4MDE0NAkvKiAgVGFibGUgUGF1c2UgRW5hYmxlICovCisjZGVmaW5lIExBUzBfQ0dUX1JFU0VUICAgICAgICAgIDB4MDE0OAkvKiAgUmVzZXQgQ2hhbm5lbCBHYWluIFRhYmxlICovCisjZGVmaW5lIExBUzBfQ0dUX0NMRUFSICAgICAgICAgIDB4MDE0QwkvKiAgQ2xlYXIgQ2hhbm5lbCBHYWluIFRhYmxlICovCisjZGVmaW5lIExBUzBfREFDMV9DVFJMICAgICAgICAgIDB4MDE1MAkvKiAgRC9BMSBvdXRwdXQgdHlwZS9yYW5nZSAqLworI2RlZmluZSBMQVMwX0RBQzFfU1JDICAgICAgICAgICAweDAxNTQJLyogIEQvQTEgdXBkYXRlIHNvdXJjZSAqLworI2RlZmluZSBMQVMwX0RBQzFfQ1lDTEUgICAgICAgICAweDAxNTgJLyogIEQvQTEgY3ljbGUgbW9kZSAqLworI2RlZmluZSBMQVMwX0RBQzFfUkVTRVQgICAgICAgICAweDAxNUMJLyogIEQvQTEgRklGTyByZXNldCAqLworI2RlZmluZSBMQVMwX0RBQzFfRklGT19DTEVBUiAgICAweDAxNjAJLyogIEQvQTEgRklGTyBjbGVhciAqLworI2RlZmluZSBMQVMwX0RBQzJfQ1RSTCAgICAgICAgICAweDAxNjQJLyogIEQvQTIgb3V0cHV0IHR5cGUvcmFuZ2UgKi8KKyNkZWZpbmUgTEFTMF9EQUMyX1NSQyAgICAgICAgICAgMHgwMTY4CS8qICBEL0EyIHVwZGF0ZSBzb3VyY2UgKi8KKyNkZWZpbmUgTEFTMF9EQUMyX0NZQ0xFICAgICAgICAgMHgwMTZDCS8qICBEL0EyIGN5Y2xlIG1vZGUgKi8KKyNkZWZpbmUgTEFTMF9EQUMyX1JFU0VUICAgICAgICAgMHgwMTcwCS8qICBEL0EyIEZJRk8gcmVzZXQgKi8KKyNkZWZpbmUgTEFTMF9EQUMyX0ZJRk9fQ0xFQVIgICAgMHgwMTc0CS8qICBEL0EyIEZJRk8gY2xlYXIgKi8KKyNkZWZpbmUgTEFTMF9BRENfU0NOVF9TUkMgICAgICAgMHgwMTc4CS8qICBBL0QgU2FtcGxlIENvdW50ZXIgU291cmNlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1BBQ0VSX1NFTEVDVCAgICAgICAweDAxODAJLyogIFBhY2VyIENsb2NrIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1NCVVMwX1NSQyAgICAgICAgICAweDAxODQJLyogIFN5bmNCdXMgMCBTb3VyY2Ugc2VsZWN0ICovCisjZGVmaW5lIExBUzBfU0JVUzBfRU5BQkxFICAgICAgIDB4MDE4OAkvKiAgU3luY0J1cyAwIGVuYWJsZSAqLworI2RlZmluZSBMQVMwX1NCVVMxX1NSQyAgICAgICAgICAweDAxOEMJLyogIFN5bmNCdXMgMSBTb3VyY2Ugc2VsZWN0ICovCisjZGVmaW5lIExBUzBfU0JVUzFfRU5BQkxFICAgICAgIDB4MDE5MAkvKiAgU3luY0J1cyAxIGVuYWJsZSAqLworI2RlZmluZSBMQVMwX1NCVVMyX1NSQyAgICAgICAgICAweDAxOTgJLyogIFN5bmNCdXMgMiBTb3VyY2Ugc2VsZWN0ICovCisjZGVmaW5lIExBUzBfU0JVUzJfRU5BQkxFICAgICAgIDB4MDE5QwkvKiAgU3luY0J1cyAyIGVuYWJsZSAqLworI2RlZmluZSBMQVMwX0VUUkdfUE9MQVJJVFkgICAgICAweDAxQTQJLyogIEV4dGVybmFsIFRyaWdnZXIgcG9sYXJpdHkgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfRUlOVF9QT0xBUklUWSAgICAgIDB4MDFBOAkvKiAgRXh0ZXJuYWwgSW50ZXJydXB0IHBvbGFyaXR5IHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VUQzBfQ0xPQ0sgICAgICAgICAweDAxQUMJLyogIFVUQzAgQ2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfVVRDMF9HQVRFICAgICAgICAgIDB4MDFCMAkvKiAgVVRDMCBHYXRlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VUQzFfQ0xPQ0sgICAgICAgICAweDAxQjQJLyogIFVUQzEgQ2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfVVRDMV9HQVRFICAgICAgICAgIDB4MDFCOAkvKiAgVVRDMSBHYXRlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VUQzJfQ0xPQ0sgICAgICAgICAweDAxQkMJLyogIFVUQzIgQ2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIExBUzBfVVRDMl9HQVRFICAgICAgICAgIDB4MDFDMAkvKiAgVVRDMiBHYXRlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VPVVQwX1NFTEVDVCAgICAgICAweDAxQzQJLyogIFVzZXIgT3V0cHV0IDAgc291cmNlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX1VPVVQxX1NFTEVDVCAgICAgICAweDAxQzgJLyogIFVzZXIgT3V0cHV0IDEgc291cmNlIHNlbGVjdCAqLworI2RlZmluZSBMQVMwX0RNQTBfUkVTRVQgICAgICAgICAweDAxQ0MJLyogIERNQTAgUmVxdWVzdCBzdGF0ZSBtYWNoaW5lIHJlc2V0ICovCisjZGVmaW5lIExBUzBfRE1BMV9SRVNFVCAgICAgICAgIDB4MDFEMAkvKiAgRE1BMSBSZXF1ZXN0IHN0YXRlIG1hY2hpbmUgcmVzZXQgKi8KIAogLyoKICAgTEFTMQogICBOYW1lCQkJTG9jYWwgQWRkcmVzcwkJCUZ1bmN0aW9uCiAqLwotI2RlZmluZSBMQVMxX0FEQ19GSUZPICAgICAgICAgICAgMHgwMDAwCS8vIFJlYWQgQS9EIEZJRk8gKDE2Yml0KSAtCi0jZGVmaW5lIExBUzFfSERJT19GSUZPICAgICAgICAgICAweDAwMDQJLy8gUmVhZCBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgRklGTyAoMTZiaXQpIC0KLSNkZWZpbmUgTEFTMV9EQUMxX0ZJRk8gICAgICAgICAgIDB4MDAwOAkvLyAtIFdyaXRlIEQvQTEgRklGTyAoMTZiaXQpCi0jZGVmaW5lIExBUzFfREFDMl9GSUZPICAgICAgICAgICAweDAwMEMJLy8gLSBXcml0ZSBEL0EyIEZJRk8gKDE2Yml0KQorI2RlZmluZSBMQVMxX0FEQ19GSUZPICAgICAgICAgICAgMHgwMDAwCS8qICBSZWFkIEEvRCBGSUZPICgxNmJpdCkgLSAqLworI2RlZmluZSBMQVMxX0hESU9fRklGTyAgICAgICAgICAgMHgwMDA0CS8qICBSZWFkIEhpZ2ggU3BlZWQgRGlnaXRhbCBJbnB1dCBGSUZPICgxNmJpdCkgLSAqLworI2RlZmluZSBMQVMxX0RBQzFfRklGTyAgICAgICAgICAgMHgwMDA4CS8qICAtIFdyaXRlIEQvQTEgRklGTyAoMTZiaXQpICovCisjZGVmaW5lIExBUzFfREFDMl9GSUZPICAgICAgICAgICAweDAwMEMJLyogIC0gV3JpdGUgRC9BMiBGSUZPICgxNmJpdCkgKi8KIAogLyoKICAgTENGRzogUExYIDkwODAgbG9jYWwgY29uZmlnICYgcnVudGltZSByZWdpc3RlcnMKICAgTmFtZQkJCUxvY2FsIEFkZHJlc3MJCQlGdW5jdGlvbgogKi8KLSNkZWZpbmUgTENGR19JVENTUiAgICAgICAgICAgICAgMHgwMDY4CS8vIElOVENTUiwgSW50ZXJydXB0IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BTU9ERTAgICAgICAgICAgIDB4MDA4MAkvLyBETUEgQ2hhbm5lbCAwIE1vZGUgUmVnaXN0ZXIKLSNkZWZpbmUgTENGR19ETUFQQURSMCAgICAgICAgICAgMHgwMDg0CS8vIERNQSBDaGFubmVsIDAgUENJIEFkZHJlc3MgUmVnaXN0ZXIKLSNkZWZpbmUgTENGR19ETUFMQURSMCAgICAgICAgICAgMHgwMDg4CS8vIERNQSBDaGFubmVsIDAgTG9jYWwgQWRkcmVzcyBSZWcKLSNkZWZpbmUgTENGR19ETUFTSVowICAgICAgICAgICAgMHgwMDhDCS8vIERNQSBDaGFubmVsIDAgVHJhbnNmZXIgU2l6ZSAoQnl0ZXMpIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BRFBSMCAgICAgICAgICAgIDB4MDA5MAkvLyBETUEgQ2hhbm5lbCAwIERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQU1PREUxICAgICAgICAgICAweDAwOTQJLy8gRE1BIENoYW5uZWwgMSBNb2RlIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BUEFEUjEgICAgICAgICAgIDB4MDA5OAkvLyBETUEgQ2hhbm5lbCAxIFBDSSBBZGRyZXNzIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BTEFEUjEgICAgICAgICAgIDB4MDA5QwkvLyBETUEgQ2hhbm5lbCAxIExvY2FsIEFkZHJlc3MgUmVnaXN0ZXIKLSNkZWZpbmUgTENGR19ETUFTSVoxICAgICAgICAgICAgMHgwMEEwCS8vIERNQSBDaGFubmVsIDEgVHJhbnNmZXIgU2l6ZSAoQnl0ZXMpIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BRFBSMSAgICAgICAgICAgIDB4MDBBNAkvLyBETUEgQ2hhbm5lbCAxIERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQUNTUjAgICAgICAgICAgICAweDAwQTgJLy8gRE1BIENoYW5uZWwgMCBDb21tYW5kL1N0YXR1cyBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQUNTUjEgICAgICAgICAgICAweDAwQTkJLy8gRE1BIENoYW5uZWwgMCBDb21tYW5kL1N0YXR1cyBSZWdpc3RlcgotI2RlZmluZSBMQ0ZHX0RNQUFSQiAgICAgICAgICAgICAweDAwQUMJLy8gRE1BIEFyYml0cmF0aW9uIFJlZ2lzdGVyCi0jZGVmaW5lIExDRkdfRE1BVEhSICAgICAgICAgICAgIDB4MDBCMAkvLyBETUEgVGhyZXNob2xkIFJlZ2lzdGVyCisjZGVmaW5lIExDRkdfSVRDU1IgICAgICAgICAgICAgIDB4MDA2OAkvKiAgSU5UQ1NSLCBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFNT0RFMCAgICAgICAgICAgMHgwMDgwCS8qICBETUEgQ2hhbm5lbCAwIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFQQURSMCAgICAgICAgICAgMHgwMDg0CS8qICBETUEgQ2hhbm5lbCAwIFBDSSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BTEFEUjAgICAgICAgICAgIDB4MDA4OAkvKiAgRE1BIENoYW5uZWwgMCBMb2NhbCBBZGRyZXNzIFJlZyAqLworI2RlZmluZSBMQ0ZHX0RNQVNJWjAgICAgICAgICAgICAweDAwOEMJLyogIERNQSBDaGFubmVsIDAgVHJhbnNmZXIgU2l6ZSAoQnl0ZXMpIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BRFBSMCAgICAgICAgICAgIDB4MDA5MAkvKiAgRE1BIENoYW5uZWwgMCBEZXNjcmlwdG9yIFBvaW50ZXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFNT0RFMSAgICAgICAgICAgMHgwMDk0CS8qICBETUEgQ2hhbm5lbCAxIE1vZGUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFQQURSMSAgICAgICAgICAgMHgwMDk4CS8qICBETUEgQ2hhbm5lbCAxIFBDSSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BTEFEUjEgICAgICAgICAgIDB4MDA5QwkvKiAgRE1BIENoYW5uZWwgMSBMb2NhbCBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BU0laMSAgICAgICAgICAgIDB4MDBBMAkvKiAgRE1BIENoYW5uZWwgMSBUcmFuc2ZlciBTaXplIChCeXRlcykgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFEUFIxICAgICAgICAgICAgMHgwMEE0CS8qICBETUEgQ2hhbm5lbCAxIERlc2NyaXB0b3IgUG9pbnRlciBSZWdpc3RlciAqLworI2RlZmluZSBMQ0ZHX0RNQUNTUjAgICAgICAgICAgICAweDAwQTgJLyogIERNQSBDaGFubmVsIDAgQ29tbWFuZC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTENGR19ETUFDU1IxICAgICAgICAgICAgMHgwMEE5CS8qICBETUEgQ2hhbm5lbCAwIENvbW1hbmQvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BQVJCICAgICAgICAgICAgIDB4MDBBQwkvKiAgRE1BIEFyYml0cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIExDRkdfRE1BVEhSICAgICAgICAgICAgIDB4MDBCMAkvKiAgRE1BIFRocmVzaG9sZCBSZWdpc3RlciAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgUmVzaXN0ZXIgYml0IGRlZmluaXRpb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotLy8gRklGTyBTdGF0dXMgV29yZCBCaXRzIChSdGRGaWZvU3RhdHVzKQotI2RlZmluZSBGU19EQUMxX05PVF9FTVBUWSAgICAweDAwMDEJLy8gRDAgIC0gREFDMSBGSUZPIG5vdCBlbXB0eQotI2RlZmluZSBGU19EQUMxX0hFTVBUWSAgIDB4MDAwMgkvLyBEMSAgLSBEQUMxIEZJRk8gaGFsZiBlbXB0eQotI2RlZmluZSBGU19EQUMxX05PVF9GVUxMICAgICAweDAwMDQJLy8gRDIgIC0gREFDMSBGSUZPIG5vdCBmdWxsCi0jZGVmaW5lIEZTX0RBQzJfTk9UX0VNUFRZICAgIDB4MDAxMAkvLyBENCAgLSBEQUMyIEZJRk8gbm90IGVtcHR5Ci0jZGVmaW5lIEZTX0RBQzJfSEVNUFRZICAgMHgwMDIwCS8vIEQ1ICAtIERBQzIgRklGTyBoYWxmIGVtcHR5Ci0jZGVmaW5lIEZTX0RBQzJfTk9UX0ZVTEwgICAgIDB4MDA0MAkvLyBENiAgLSBEQUMyIEZJRk8gbm90IGZ1bGwKLSNkZWZpbmUgRlNfQURDX05PVF9FTVBUWSAgICAgMHgwMTAwCS8vIEQ4ICAtIEFEQyBGSUZPIG5vdCBlbXB0eQotI2RlZmluZSBGU19BRENfSEVNUFRZICAgIDB4MDIwMAkvLyBEOSAgLSBBREMgRklGTyBoYWxmIGVtcHR5Ci0jZGVmaW5lIEZTX0FEQ19OT1RfRlVMTCAgICAgIDB4MDQwMAkvLyBEMTAgLSBBREMgRklGTyBub3QgZnVsbAotI2RlZmluZSBGU19ESU5fTk9UX0VNUFRZICAgICAweDEwMDAJLy8gRDEyIC0gRElOIEZJRk8gbm90IGVtcHR5Ci0jZGVmaW5lIEZTX0RJTl9IRU1QVFkgICAgMHgyMDAwCS8vIEQxMyAtIERJTiBGSUZPIGhhbGYgZW1wdHkKLSNkZWZpbmUgRlNfRElOX05PVF9GVUxMICAgICAgMHg0MDAwCS8vIEQxNCAtIERJTiBGSUZPIG5vdCBmdWxsCisvKiAgRklGTyBTdGF0dXMgV29yZCBCaXRzIChSdGRGaWZvU3RhdHVzKSAqLworI2RlZmluZSBGU19EQUMxX05PVF9FTVBUWSAgICAweDAwMDEJLyogIEQwICAtIERBQzEgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgRlNfREFDMV9IRU1QVFkgICAweDAwMDIJLyogIEQxICAtIERBQzEgRklGTyBoYWxmIGVtcHR5ICovCisjZGVmaW5lIEZTX0RBQzFfTk9UX0ZVTEwgICAgIDB4MDAwNAkvKiAgRDIgIC0gREFDMSBGSUZPIG5vdCBmdWxsICovCisjZGVmaW5lIEZTX0RBQzJfTk9UX0VNUFRZICAgIDB4MDAxMAkvKiAgRDQgIC0gREFDMiBGSUZPIG5vdCBlbXB0eSAqLworI2RlZmluZSBGU19EQUMyX0hFTVBUWSAgIDB4MDAyMAkvKiAgRDUgIC0gREFDMiBGSUZPIGhhbGYgZW1wdHkgKi8KKyNkZWZpbmUgRlNfREFDMl9OT1RfRlVMTCAgICAgMHgwMDQwCS8qICBENiAgLSBEQUMyIEZJRk8gbm90IGZ1bGwgKi8KKyNkZWZpbmUgRlNfQURDX05PVF9FTVBUWSAgICAgMHgwMTAwCS8qICBEOCAgLSBBREMgRklGTyBub3QgZW1wdHkgKi8KKyNkZWZpbmUgRlNfQURDX0hFTVBUWSAgICAweDAyMDAJLyogIEQ5ICAtIEFEQyBGSUZPIGhhbGYgZW1wdHkgKi8KKyNkZWZpbmUgRlNfQURDX05PVF9GVUxMICAgICAgMHgwNDAwCS8qICBEMTAgLSBBREMgRklGTyBub3QgZnVsbCAqLworI2RlZmluZSBGU19ESU5fTk9UX0VNUFRZICAgICAweDEwMDAJLyogIEQxMiAtIERJTiBGSUZPIG5vdCBlbXB0eSAqLworI2RlZmluZSBGU19ESU5fSEVNUFRZICAgIDB4MjAwMAkvKiAgRDEzIC0gRElOIEZJRk8gaGFsZiBlbXB0eSAqLworI2RlZmluZSBGU19ESU5fTk9UX0ZVTEwgICAgICAweDQwMDAJLyogIEQxNCAtIERJTiBGSUZPIG5vdCBmdWxsICovCiAKLS8vIFRpbWVyIFN0YXR1cyBXb3JkIEJpdHMgKEdldFRpbWVyU3RhdHVzKQorLyogIFRpbWVyIFN0YXR1cyBXb3JkIEJpdHMgKEdldFRpbWVyU3RhdHVzKSAqLwogI2RlZmluZSBUU19QQ0xLX0dBVEUgICAweDAwMDEKLS8vIEQwIC0gUGFjZXIgQ2xvY2sgR2F0ZSBbMCAtIGdhdGVkLCAxIC0gZW5hYmxlZF0KKy8qICBEMCAtIFBhY2VyIENsb2NrIEdhdGUgWzAgLSBnYXRlZCwgMSAtIGVuYWJsZWRdICovCiAjZGVmaW5lIFRTX0JDTEtfR0FURSAgIDB4MDAwMgotLy8gRDEgLSBCdXJzdCBDbG9jayBHYXRlIFswIC0gZGlzYWJsZWQsIDEgLSBydW5uaW5nXQorLyogIEQxIC0gQnVyc3QgQ2xvY2sgR2F0ZSBbMCAtIGRpc2FibGVkLCAxIC0gcnVubmluZ10gKi8KICNkZWZpbmUgVFNfRENOVF9HQVRFICAgMHgwMDA0Ci0vLyBEMiAtIFBhY2VyIENsb2NrIERlbGF5ZWQgU3RhcnQgVHJpZ2dlciBbMCAtIGRlbGF5IG92ZXIsIDEgLSBkZWxheSBpbgotLy8gcHJvZ3Jlc3NdCisvKiAgRDIgLSBQYWNlciBDbG9jayBEZWxheWVkIFN0YXJ0IFRyaWdnZXIgWzAgLSBkZWxheSBvdmVyLCAxIC0gZGVsYXkgaW4gKi8KKy8qICBwcm9ncmVzc10gKi8KICNkZWZpbmUgVFNfQUNOVF9HQVRFICAgMHgwMDA4Ci0vLyBEMyAtIFBhY2VyIENsb2NrIEFib3V0IFRyaWdnZXIgWzAgLSBjb21wbGV0ZWQsIDEgLSBpbiBwcm9ncmVzc10KKy8qICBEMyAtIFBhY2VyIENsb2NrIEFib3V0IFRyaWdnZXIgWzAgLSBjb21wbGV0ZWQsIDEgLSBpbiBwcm9ncmVzc10gKi8KICNkZWZpbmUgVFNfUENMS19SVU4gICAgMHgwMDEwCi0vLyBENCAtIFBhY2VyIENsb2NrIFNodXRkb3duIEZsYWcgWzAgLSBQYWNlciBDbG9jayBjYW5ub3QgYmUgc3RhcnQKLS8vIHRyaWdnZXJlZCBvbmx5IGJ5IFNvZnR3YXJlIFBhY2VyIFN0YXJ0IENvbW1hbmQsIDEgLSBQYWNlciBDbG9jayBjYW4KLS8vIGJlIHN0YXJ0IHRyaWdnZXJlZF0KKy8qICBENCAtIFBhY2VyIENsb2NrIFNodXRkb3duIEZsYWcgWzAgLSBQYWNlciBDbG9jayBjYW5ub3QgYmUgc3RhcnQgKi8KKy8qICB0cmlnZ2VyZWQgb25seSBieSBTb2Z0d2FyZSBQYWNlciBTdGFydCBDb21tYW5kLCAxIC0gUGFjZXIgQ2xvY2sgY2FuICovCisvKiAgYmUgc3RhcnQgdHJpZ2dlcmVkXSAqLwogCi0vLyBFeHRlcm5hbCBUcmlnZ2VyIHBvbGFyaXR5IHNlbGVjdAotLy8gRXh0ZXJuYWwgSW50ZXJydXB0IHBvbGFyaXR5IHNlbGVjdAotI2RlZmluZSBQT0xfUE9TSVRJVkUgICAgICAgICAweDAJLy8gcG9zaXRpdmUgZWRnZQotI2RlZmluZSBQT0xfTkVHQVRJVkUgICAgICAgICAweDEJLy8gbmVnYXRpdmUgZWRnZQorLyogIEV4dGVybmFsIFRyaWdnZXIgcG9sYXJpdHkgc2VsZWN0ICovCisvKiAgRXh0ZXJuYWwgSW50ZXJydXB0IHBvbGFyaXR5IHNlbGVjdCAqLworI2RlZmluZSBQT0xfUE9TSVRJVkUgICAgICAgICAweDAJLyogIHBvc2l0aXZlIGVkZ2UgKi8KKyNkZWZpbmUgUE9MX05FR0FUSVZFICAgICAgICAgMHgxCS8qICBuZWdhdGl2ZSBlZGdlICovCiAKLS8vIFVzZXIgT3V0cHV0IFNpZ25hbCBzZWxlY3QgKFNldFVvdXQwU291cmNlLCBTZXRVb3V0MVNvdXJjZSkKLSNkZWZpbmUgVU9VVF9BREMgICAgICAgICAgICAgICAgMHgwCS8vIEEvRCBDb252ZXJzaW9uIFNpZ25hbAotI2RlZmluZSBVT1VUX0RBQzEgICAgICAgICAgICAgICAweDEJLy8gRC9BMSBVcGRhdGUKLSNkZWZpbmUgVU9VVF9EQUMyICAgICAgICAgICAgICAgMHgyCS8vIEQvQTIgVXBkYXRlCi0jZGVmaW5lIFVPVVRfU09GVFdBUkUgICAgICAgICAgIDB4MwkvLyBTb2Z0d2FyZSBQcm9ncmFtbWFibGUKKy8qICBVc2VyIE91dHB1dCBTaWduYWwgc2VsZWN0IChTZXRVb3V0MFNvdXJjZSwgU2V0VW91dDFTb3VyY2UpICovCisjZGVmaW5lIFVPVVRfQURDICAgICAgICAgICAgICAgIDB4MAkvKiAgQS9EIENvbnZlcnNpb24gU2lnbmFsICovCisjZGVmaW5lIFVPVVRfREFDMSAgICAgICAgICAgICAgIDB4MQkvKiAgRC9BMSBVcGRhdGUgKi8KKyNkZWZpbmUgVU9VVF9EQUMyICAgICAgICAgICAgICAgMHgyCS8qICBEL0EyIFVwZGF0ZSAqLworI2RlZmluZSBVT1VUX1NPRlRXQVJFICAgICAgICAgICAweDMJLyogIFNvZnR3YXJlIFByb2dyYW1tYWJsZSAqLwogCi0vLyBQYWNlciBjbG9jayBzZWxlY3QgKFNldFBhY2VyU291cmNlKQotI2RlZmluZSBQQ0xLX0lOVEVSTkFMICAgICAgICAgICAxCS8vIEludGVybmFsIFBhY2VyIENsb2NrCi0jZGVmaW5lIFBDTEtfRVhURVJOQUwgICAgICAgICAgIDAJLy8gRXh0ZXJuYWwgUGFjZXIgQ2xvY2sKKy8qICBQYWNlciBjbG9jayBzZWxlY3QgKFNldFBhY2VyU291cmNlKSAqLworI2RlZmluZSBQQ0xLX0lOVEVSTkFMICAgICAgICAgICAxCS8qICBJbnRlcm5hbCBQYWNlciBDbG9jayAqLworI2RlZmluZSBQQ0xLX0VYVEVSTkFMICAgICAgICAgICAwCS8qICBFeHRlcm5hbCBQYWNlciBDbG9jayAqLwogCi0vLyBBL0QgU2FtcGxlIENvdW50ZXIgU291cmNlcyAoU2V0QWRjbnRTb3VyY2UsIFNldHVwU2FtcGxlQ291bnRlcikKLSNkZWZpbmUgQURDX1NDTlRfQ0dUX1JFU0VUICAgICAgICAgMHgwCS8vIG5lZWRzIHJlc3RhcnQgd2l0aCBTdGFydFBhY2VyCisvKiAgQS9EIFNhbXBsZSBDb3VudGVyIFNvdXJjZXMgKFNldEFkY250U291cmNlLCBTZXR1cFNhbXBsZUNvdW50ZXIpICovCisjZGVmaW5lIEFEQ19TQ05UX0NHVF9SRVNFVCAgICAgICAgIDB4MAkvKiAgbmVlZHMgcmVzdGFydCB3aXRoIFN0YXJ0UGFjZXIgKi8KICNkZWZpbmUgQURDX1NDTlRfRklGT19XUklURSAgICAgICAgMHgxCiAKLS8vIEEvRCBDb252ZXJzaW9uIFNpZ25hbCBTZWxlY3QgKGZvciBTZXRDb252ZXJzaW9uU2VsZWN0KQotI2RlZmluZSBBRENfU1RBUlRfU09GVFdBUkUgICAgICAgICAweDAJLy8gU29mdHdhcmUgQS9EIFN0YXJ0Ci0jZGVmaW5lIEFEQ19TVEFSVF9QQ0xLICAgICAgICAgICAgIDB4MQkvLyBQYWNlciBDbG9jayAoRXh0LiBJbnQuIHNlZSBGdW5jLjUwOSkKLSNkZWZpbmUgQURDX1NUQVJUX0JDTEsgICAgICAgICAgICAgMHgyCS8vIEJ1cnN0IENsb2NrCi0jZGVmaW5lIEFEQ19TVEFSVF9ESUdJVEFMX0lUICAgICAgIDB4MwkvLyBEaWdpdGFsIEludGVycnVwdAotI2RlZmluZSBBRENfU1RBUlRfREFDMV9NQVJLRVIxICAgICAweDQJLy8gRC9BIDEgRGF0YSBNYXJrZXIgMQotI2RlZmluZSBBRENfU1RBUlRfREFDMl9NQVJLRVIxICAgICAweDUJLy8gRC9BIDIgRGF0YSBNYXJrZXIgMQotI2RlZmluZSBBRENfU1RBUlRfU0JVUzAgICAgICAgICAgICAweDYJLy8gU3luY0J1cyAwCi0jZGVmaW5lIEFEQ19TVEFSVF9TQlVTMSAgICAgICAgICAgIDB4NwkvLyBTeW5jQnVzIDEKLSNkZWZpbmUgQURDX1NUQVJUX1NCVVMyICAgICAgICAgICAgMHg4CS8vIFN5bmNCdXMgMgorLyogIEEvRCBDb252ZXJzaW9uIFNpZ25hbCBTZWxlY3QgKGZvciBTZXRDb252ZXJzaW9uU2VsZWN0KSAqLworI2RlZmluZSBBRENfU1RBUlRfU09GVFdBUkUgICAgICAgICAweDAJLyogIFNvZnR3YXJlIEEvRCBTdGFydCAqLworI2RlZmluZSBBRENfU1RBUlRfUENMSyAgICAgICAgICAgICAweDEJLyogIFBhY2VyIENsb2NrIChFeHQuIEludC4gc2VlIEZ1bmMuNTA5KSAqLworI2RlZmluZSBBRENfU1RBUlRfQkNMSyAgICAgICAgICAgICAweDIJLyogIEJ1cnN0IENsb2NrICovCisjZGVmaW5lIEFEQ19TVEFSVF9ESUdJVEFMX0lUICAgICAgIDB4MwkvKiAgRGlnaXRhbCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgQURDX1NUQVJUX0RBQzFfTUFSS0VSMSAgICAgMHg0CS8qICBEL0EgMSBEYXRhIE1hcmtlciAxICovCisjZGVmaW5lIEFEQ19TVEFSVF9EQUMyX01BUktFUjEgICAgIDB4NQkvKiAgRC9BIDIgRGF0YSBNYXJrZXIgMSAqLworI2RlZmluZSBBRENfU1RBUlRfU0JVUzAgICAgICAgICAgICAweDYJLyogIFN5bmNCdXMgMCAqLworI2RlZmluZSBBRENfU1RBUlRfU0JVUzEgICAgICAgICAgICAweDcJLyogIFN5bmNCdXMgMSAqLworI2RlZmluZSBBRENfU1RBUlRfU0JVUzIgICAgICAgICAgICAweDgJLyogIFN5bmNCdXMgMiAqLwogCi0vLyBCdXJzdCBDbG9jayBzdGFydCB0cmlnZ2VyIHNlbGVjdCAoU2V0QnVyc3RTdGFydCkKLSNkZWZpbmUgQkNMS19TVEFSVF9TT0ZUV0FSRSAgICAgICAgMHgwCS8vIFNvZnR3YXJlIEEvRCBTdGFydCAoU3RhcnRCdXJzdCkKLSNkZWZpbmUgQkNMS19TVEFSVF9QQ0xLICAgICAgICAgICAgMHgxCS8vIFBhY2VyIENsb2NrCi0jZGVmaW5lIEJDTEtfU1RBUlRfRVRSSUcgICAgICAgICAgIDB4MgkvLyBFeHRlcm5hbCBUcmlnZ2VyCi0jZGVmaW5lIEJDTEtfU1RBUlRfRElHSVRBTF9JVCAgICAgIDB4MwkvLyBEaWdpdGFsIEludGVycnVwdAotI2RlZmluZSBCQ0xLX1NUQVJUX1NCVVMwICAgICAgICAgICAweDQJLy8gU3luY0J1cyAwCi0jZGVmaW5lIEJDTEtfU1RBUlRfU0JVUzEgICAgICAgICAgIDB4NQkvLyBTeW5jQnVzIDEKLSNkZWZpbmUgQkNMS19TVEFSVF9TQlVTMiAgICAgICAgICAgMHg2CS8vIFN5bmNCdXMgMgorLyogIEJ1cnN0IENsb2NrIHN0YXJ0IHRyaWdnZXIgc2VsZWN0IChTZXRCdXJzdFN0YXJ0KSAqLworI2RlZmluZSBCQ0xLX1NUQVJUX1NPRlRXQVJFICAgICAgICAweDAJLyogIFNvZnR3YXJlIEEvRCBTdGFydCAoU3RhcnRCdXJzdCkgKi8KKyNkZWZpbmUgQkNMS19TVEFSVF9QQ0xLICAgICAgICAgICAgMHgxCS8qICBQYWNlciBDbG9jayAqLworI2RlZmluZSBCQ0xLX1NUQVJUX0VUUklHICAgICAgICAgICAweDIJLyogIEV4dGVybmFsIFRyaWdnZXIgKi8KKyNkZWZpbmUgQkNMS19TVEFSVF9ESUdJVEFMX0lUICAgICAgMHgzCS8qICBEaWdpdGFsIEludGVycnVwdCAqLworI2RlZmluZSBCQ0xLX1NUQVJUX1NCVVMwICAgICAgICAgICAweDQJLyogIFN5bmNCdXMgMCAqLworI2RlZmluZSBCQ0xLX1NUQVJUX1NCVVMxICAgICAgICAgICAweDUJLyogIFN5bmNCdXMgMSAqLworI2RlZmluZSBCQ0xLX1NUQVJUX1NCVVMyICAgICAgICAgICAweDYJLyogIFN5bmNCdXMgMiAqLwogCi0vLyBQYWNlciBDbG9jayBzdGFydCB0cmlnZ2VyIHNlbGVjdCAoU2V0UGFjZXJTdGFydCkKLSNkZWZpbmUgUENMS19TVEFSVF9TT0ZUV0FSRSAgICAgICAgMHgwCS8vIFNvZnR3YXJlIFBhY2VyIFN0YXJ0IChTdGFydFBhY2VyKQotI2RlZmluZSBQQ0xLX1NUQVJUX0VUUklHICAgICAgICAgICAweDEJLy8gRXh0ZXJuYWwgdHJpZ2dlcgotI2RlZmluZSBQQ0xLX1NUQVJUX0RJR0lUQUxfSVQgICAgICAweDIJLy8gRGlnaXRhbCBpbnRlcnJ1cHQKLSNkZWZpbmUgUENMS19TVEFSVF9VVEMyICAgICAgICAgICAgMHgzCS8vIFVzZXIgVEMgMiBvdXQKLSNkZWZpbmUgUENMS19TVEFSVF9TQlVTMCAgICAgICAgICAgMHg0CS8vIFN5bmNCdXMgMAotI2RlZmluZSBQQ0xLX1NUQVJUX1NCVVMxICAgICAgICAgICAweDUJLy8gU3luY0J1cyAxCi0jZGVmaW5lIFBDTEtfU1RBUlRfU0JVUzIgICAgICAgICAgIDB4NgkvLyBTeW5jQnVzIDIKLSNkZWZpbmUgUENMS19TVEFSVF9EX1NPRlRXQVJFICAgICAgMHg4CS8vIERlbGF5ZWQgU29mdHdhcmUgUGFjZXIgU3RhcnQKLSNkZWZpbmUgUENMS19TVEFSVF9EX0VUUklHICAgICAgICAgMHg5CS8vIERlbGF5ZWQgZXh0ZXJuYWwgdHJpZ2dlcgotI2RlZmluZSBQQ0xLX1NUQVJUX0RfRElHSVRBTF9JVCAgICAweEEJLy8gRGVsYXllZCBkaWdpdGFsIGludGVycnVwdAotI2RlZmluZSBQQ0xLX1NUQVJUX0RfVVRDMiAgICAgICAgICAweEIJLy8gRGVsYXllZCBVc2VyIFRDIDIgb3V0Ci0jZGVmaW5lIFBDTEtfU1RBUlRfRF9TQlVTMCAgICAgICAgIDB4QwkvLyBEZWxheWVkIFN5bmNCdXMgMAotI2RlZmluZSBQQ0xLX1NUQVJUX0RfU0JVUzEgICAgICAgICAweEQJLy8gRGVsYXllZCBTeW5jQnVzIDEKLSNkZWZpbmUgUENMS19TVEFSVF9EX1NCVVMyICAgICAgICAgMHhFCS8vIERlbGF5ZWQgU3luY0J1cyAyCi0jZGVmaW5lIFBDTEtfU1RBUlRfRVRSSUdfR0FURUQgICAgIDB4RgkvLyBFeHRlcm5hbCBUcmlnZ2VyIEdhdGVkIGNvbnRyb2xsZWQgbW9kZQorLyogIFBhY2VyIENsb2NrIHN0YXJ0IHRyaWdnZXIgc2VsZWN0IChTZXRQYWNlclN0YXJ0KSAqLworI2RlZmluZSBQQ0xLX1NUQVJUX1NPRlRXQVJFICAgICAgICAweDAJLyogIFNvZnR3YXJlIFBhY2VyIFN0YXJ0IChTdGFydFBhY2VyKSAqLworI2RlZmluZSBQQ0xLX1NUQVJUX0VUUklHICAgICAgICAgICAweDEJLyogIEV4dGVybmFsIHRyaWdnZXIgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9ESUdJVEFMX0lUICAgICAgMHgyCS8qICBEaWdpdGFsIGludGVycnVwdCAqLworI2RlZmluZSBQQ0xLX1NUQVJUX1VUQzIgICAgICAgICAgICAweDMJLyogIFVzZXIgVEMgMiBvdXQgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9TQlVTMCAgICAgICAgICAgMHg0CS8qICBTeW5jQnVzIDAgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9TQlVTMSAgICAgICAgICAgMHg1CS8qICBTeW5jQnVzIDEgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9TQlVTMiAgICAgICAgICAgMHg2CS8qICBTeW5jQnVzIDIgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9EX1NPRlRXQVJFICAgICAgMHg4CS8qICBEZWxheWVkIFNvZnR3YXJlIFBhY2VyIFN0YXJ0ICovCisjZGVmaW5lIFBDTEtfU1RBUlRfRF9FVFJJRyAgICAgICAgIDB4OQkvKiAgRGVsYXllZCBleHRlcm5hbCB0cmlnZ2VyICovCisjZGVmaW5lIFBDTEtfU1RBUlRfRF9ESUdJVEFMX0lUICAgIDB4QQkvKiAgRGVsYXllZCBkaWdpdGFsIGludGVycnVwdCAqLworI2RlZmluZSBQQ0xLX1NUQVJUX0RfVVRDMiAgICAgICAgICAweEIJLyogIERlbGF5ZWQgVXNlciBUQyAyIG91dCAqLworI2RlZmluZSBQQ0xLX1NUQVJUX0RfU0JVUzAgICAgICAgICAweEMJLyogIERlbGF5ZWQgU3luY0J1cyAwICovCisjZGVmaW5lIFBDTEtfU1RBUlRfRF9TQlVTMSAgICAgICAgIDB4RAkvKiAgRGVsYXllZCBTeW5jQnVzIDEgKi8KKyNkZWZpbmUgUENMS19TVEFSVF9EX1NCVVMyICAgICAgICAgMHhFCS8qICBEZWxheWVkIFN5bmNCdXMgMiAqLworI2RlZmluZSBQQ0xLX1NUQVJUX0VUUklHX0dBVEVEICAgICAweEYJLyogIEV4dGVybmFsIFRyaWdnZXIgR2F0ZWQgY29udHJvbGxlZCBtb2RlICovCiAKLS8vIFBhY2VyIENsb2NrIFN0b3AgVHJpZ2dlciBzZWxlY3QgKFNldFBhY2VyU3RvcCkKLSNkZWZpbmUgUENMS19TVE9QX1NPRlRXQVJFICAgICAgICAgMHgwCS8vIFNvZnR3YXJlIFBhY2VyIFN0b3AgKFN0b3BQYWNlcikKLSNkZWZpbmUgUENMS19TVE9QX0VUUklHICAgICAgICAgICAgMHgxCS8vIEV4dGVybmFsIFRyaWdnZXIKLSNkZWZpbmUgUENMS19TVE9QX0RJR0lUQUxfSVQgICAgICAgMHgyCS8vIERpZ2l0YWwgSW50ZXJydXB0Ci0jZGVmaW5lIFBDTEtfU1RPUF9BQ05UICAgICAgICAgICAgIDB4MwkvLyBBYm91dCBDb3VudGVyCi0jZGVmaW5lIFBDTEtfU1RPUF9VVEMyICAgICAgICAgICAgIDB4NAkvLyBVc2VyIFRDMiBvdXQKLSNkZWZpbmUgUENMS19TVE9QX1NCVVMwICAgICAgICAgICAgMHg1CS8vIFN5bmNCdXMgMAotI2RlZmluZSBQQ0xLX1NUT1BfU0JVUzEgICAgICAgICAgICAweDYJLy8gU3luY0J1cyAxCi0jZGVmaW5lIFBDTEtfU1RPUF9TQlVTMiAgICAgICAgICAgIDB4NwkvLyBTeW5jQnVzIDIKLSNkZWZpbmUgUENMS19TVE9QX0FfU09GVFdBUkUgICAgICAgMHg4CS8vIEFib3V0IFNvZnR3YXJlIFBhY2VyIFN0b3AKLSNkZWZpbmUgUENMS19TVE9QX0FfRVRSSUcgICAgICAgICAgMHg5CS8vIEFib3V0IEV4dGVybmFsIFRyaWdnZXIKLSNkZWZpbmUgUENMS19TVE9QX0FfRElHSVRBTF9JVCAgICAgMHhBCS8vIEFib3V0IERpZ2l0YWwgSW50ZXJydXB0Ci0jZGVmaW5lIFBDTEtfU1RPUF9BX1VUQzIgICAgICAgICAgIDB4QwkvLyBBYm91dCBVc2VyIFRDMiBvdXQKLSNkZWZpbmUgUENMS19TVE9QX0FfU0JVUzAgICAgICAgICAgMHhECS8vIEFib3V0IFN5bmNCdXMgMAotI2RlZmluZSBQQ0xLX1NUT1BfQV9TQlVTMSAgICAgICAgICAweEUJLy8gQWJvdXQgU3luY0J1cyAxCi0jZGVmaW5lIFBDTEtfU1RPUF9BX1NCVVMyICAgICAgICAgIDB4RgkvLyBBYm91dCBTeW5jQnVzIDIKKy8qICBQYWNlciBDbG9jayBTdG9wIFRyaWdnZXIgc2VsZWN0IChTZXRQYWNlclN0b3ApICovCisjZGVmaW5lIFBDTEtfU1RPUF9TT0ZUV0FSRSAgICAgICAgIDB4MAkvKiAgU29mdHdhcmUgUGFjZXIgU3RvcCAoU3RvcFBhY2VyKSAqLworI2RlZmluZSBQQ0xLX1NUT1BfRVRSSUcgICAgICAgICAgICAweDEJLyogIEV4dGVybmFsIFRyaWdnZXIgKi8KKyNkZWZpbmUgUENMS19TVE9QX0RJR0lUQUxfSVQgICAgICAgMHgyCS8qICBEaWdpdGFsIEludGVycnVwdCAqLworI2RlZmluZSBQQ0xLX1NUT1BfQUNOVCAgICAgICAgICAgICAweDMJLyogIEFib3V0IENvdW50ZXIgKi8KKyNkZWZpbmUgUENMS19TVE9QX1VUQzIgICAgICAgICAgICAgMHg0CS8qICBVc2VyIFRDMiBvdXQgKi8KKyNkZWZpbmUgUENMS19TVE9QX1NCVVMwICAgICAgICAgICAgMHg1CS8qICBTeW5jQnVzIDAgKi8KKyNkZWZpbmUgUENMS19TVE9QX1NCVVMxICAgICAgICAgICAgMHg2CS8qICBTeW5jQnVzIDEgKi8KKyNkZWZpbmUgUENMS19TVE9QX1NCVVMyICAgICAgICAgICAgMHg3CS8qICBTeW5jQnVzIDIgKi8KKyNkZWZpbmUgUENMS19TVE9QX0FfU09GVFdBUkUgICAgICAgMHg4CS8qICBBYm91dCBTb2Z0d2FyZSBQYWNlciBTdG9wICovCisjZGVmaW5lIFBDTEtfU1RPUF9BX0VUUklHICAgICAgICAgIDB4OQkvKiAgQWJvdXQgRXh0ZXJuYWwgVHJpZ2dlciAqLworI2RlZmluZSBQQ0xLX1NUT1BfQV9ESUdJVEFMX0lUICAgICAweEEJLyogIEFib3V0IERpZ2l0YWwgSW50ZXJydXB0ICovCisjZGVmaW5lIFBDTEtfU1RPUF9BX1VUQzIgICAgICAgICAgIDB4QwkvKiAgQWJvdXQgVXNlciBUQzIgb3V0ICovCisjZGVmaW5lIFBDTEtfU1RPUF9BX1NCVVMwICAgICAgICAgIDB4RAkvKiAgQWJvdXQgU3luY0J1cyAwICovCisjZGVmaW5lIFBDTEtfU1RPUF9BX1NCVVMxICAgICAgICAgIDB4RQkvKiAgQWJvdXQgU3luY0J1cyAxICovCisjZGVmaW5lIFBDTEtfU1RPUF9BX1NCVVMyICAgICAgICAgIDB4RgkvKiAgQWJvdXQgU3luY0J1cyAyICovCiAKLS8vIEFib3V0IENvdW50ZXIgU3RvcCBFbmFibGUKLSNkZWZpbmUgQUNOVF9TVE9QICAgICAgICAgICAgICAgICAgMHgwCS8vIHN0b3AgZW5hYmxlCi0jZGVmaW5lIEFDTlRfTk9fU1RPUCAgICAgICAgICAgICAgIDB4MQkvLyBzdG9wIGRpc2FibGVkCisvKiAgQWJvdXQgQ291bnRlciBTdG9wIEVuYWJsZSAqLworI2RlZmluZSBBQ05UX1NUT1AgICAgICAgICAgICAgICAgICAweDAJLyogIHN0b3AgZW5hYmxlICovCisjZGVmaW5lIEFDTlRfTk9fU1RPUCAgICAgICAgICAgICAgIDB4MQkvKiAgc3RvcCBkaXNhYmxlZCAqLwogCi0vLyBEQUMgdXBkYXRlIHNvdXJjZSAoU2V0REFDMVN0YXJ0ICYgU2V0REFDMlN0YXJ0KQotI2RlZmluZSBEQUNfU1RBUlRfU09GVFdBUkUgICAgICAgICAweDAJLy8gU29mdHdhcmUgVXBkYXRlCi0jZGVmaW5lIERBQ19TVEFSVF9DR1QgICAgICAgICAgICAgIDB4MQkvLyBDR1QgY29udHJvbGxlZCBVcGRhdGUKLSNkZWZpbmUgREFDX1NUQVJUX0RBQ19DTEsgICAgICAgICAgMHgyCS8vIEQvQSBDbG9jawotI2RlZmluZSBEQUNfU1RBUlRfRVBDTEsgICAgICAgICAgICAweDMJLy8gRXh0ZXJuYWwgUGFjZXIgQ2xvY2sKLSNkZWZpbmUgREFDX1NUQVJUX1NCVVMwICAgICAgICAgICAgMHg0CS8vIFN5bmNCdXMgMAotI2RlZmluZSBEQUNfU1RBUlRfU0JVUzEgICAgICAgICAgICAweDUJLy8gU3luY0J1cyAxCi0jZGVmaW5lIERBQ19TVEFSVF9TQlVTMiAgICAgICAgICAgIDB4NgkvLyBTeW5jQnVzIDIKKy8qICBEQUMgdXBkYXRlIHNvdXJjZSAoU2V0REFDMVN0YXJ0ICYgU2V0REFDMlN0YXJ0KSAqLworI2RlZmluZSBEQUNfU1RBUlRfU09GVFdBUkUgICAgICAgICAweDAJLyogIFNvZnR3YXJlIFVwZGF0ZSAqLworI2RlZmluZSBEQUNfU1RBUlRfQ0dUICAgICAgICAgICAgICAweDEJLyogIENHVCBjb250cm9sbGVkIFVwZGF0ZSAqLworI2RlZmluZSBEQUNfU1RBUlRfREFDX0NMSyAgICAgICAgICAweDIJLyogIEQvQSBDbG9jayAqLworI2RlZmluZSBEQUNfU1RBUlRfRVBDTEsgICAgICAgICAgICAweDMJLyogIEV4dGVybmFsIFBhY2VyIENsb2NrICovCisjZGVmaW5lIERBQ19TVEFSVF9TQlVTMCAgICAgICAgICAgIDB4NAkvKiAgU3luY0J1cyAwICovCisjZGVmaW5lIERBQ19TVEFSVF9TQlVTMSAgICAgICAgICAgIDB4NQkvKiAgU3luY0J1cyAxICovCisjZGVmaW5lIERBQ19TVEFSVF9TQlVTMiAgICAgICAgICAgIDB4NgkvKiAgU3luY0J1cyAyICovCiAKLS8vIERBQyBDeWNsZSBNb2RlIChTZXREQUMxQ3ljbGUsIFNldERBQzJDeWNsZSwgU2V0dXBEQUMpCi0jZGVmaW5lIERBQ19DWUNMRV9TSU5HTEUgICAgICAgICAgIDB4MAkvLyBub3QgY3ljbGUKLSNkZWZpbmUgREFDX0NZQ0xFX01VTFRJICAgICAgICAgICAgMHgxCS8vIGN5Y2xlCisvKiAgREFDIEN5Y2xlIE1vZGUgKFNldERBQzFDeWNsZSwgU2V0REFDMkN5Y2xlLCBTZXR1cERBQykgKi8KKyNkZWZpbmUgREFDX0NZQ0xFX1NJTkdMRSAgICAgICAgICAgMHgwCS8qICBub3QgY3ljbGUgKi8KKyNkZWZpbmUgREFDX0NZQ0xFX01VTFRJICAgICAgICAgICAgMHgxCS8qICBjeWNsZSAqLwogCi0vLyA4MjU0IE9wZXJhdGlvbiBNb2RlcyAoU2V0ODI1NE1vZGUsIFNldHVwVGltZXJDb3VudGVyKQotI2RlZmluZSBNODI1NF9FVkVOVF9DT1VOVEVSICAgICAgICAwCS8vIEV2ZW50IENvdW50ZXIKLSNkZWZpbmUgTTgyNTRfSFdfT05FX1NIT1QgICAgICAgICAgMQkvLyBIYXJkd2FyZS1SZXRyaWdnZXJhYmxlIE9uZS1TaG90Ci0jZGVmaW5lIE04MjU0X1JBVEVfR0VORVJBVE9SICAgICAgIDIJLy8gUmF0ZSBHZW5lcmF0b3IKLSNkZWZpbmUgTTgyNTRfU1FVQVJFX1dBVkUgICAgICAgICAgMwkvLyBTcXVhcmUgV2F2ZSBNb2RlCi0jZGVmaW5lIE04MjU0X1NXX1NUUk9CRSAgICAgICAgICAgIDQJLy8gU29mdHdhcmUgVHJpZ2dlcmVkIFN0cm9iZQotI2RlZmluZSBNODI1NF9IV19TVFJPQkUgICAgICAgICAgICA1CS8vIEhhcmR3YXJlIFRyaWdnZXJlZCBTdHJvYmUgKFJldHJpZ2dlcmFibGUpCisvKiAgODI1NCBPcGVyYXRpb24gTW9kZXMgKFNldDgyNTRNb2RlLCBTZXR1cFRpbWVyQ291bnRlcikgKi8KKyNkZWZpbmUgTTgyNTRfRVZFTlRfQ09VTlRFUiAgICAgICAgMAkvKiAgRXZlbnQgQ291bnRlciAqLworI2RlZmluZSBNODI1NF9IV19PTkVfU0hPVCAgICAgICAgICAxCS8qICBIYXJkd2FyZS1SZXRyaWdnZXJhYmxlIE9uZS1TaG90ICovCisjZGVmaW5lIE04MjU0X1JBVEVfR0VORVJBVE9SICAgICAgIDIJLyogIFJhdGUgR2VuZXJhdG9yICovCisjZGVmaW5lIE04MjU0X1NRVUFSRV9XQVZFICAgICAgICAgIDMJLyogIFNxdWFyZSBXYXZlIE1vZGUgKi8KKyNkZWZpbmUgTTgyNTRfU1dfU1RST0JFICAgICAgICAgICAgNAkvKiAgU29mdHdhcmUgVHJpZ2dlcmVkIFN0cm9iZSAqLworI2RlZmluZSBNODI1NF9IV19TVFJPQkUgICAgICAgICAgICA1CS8qICBIYXJkd2FyZSBUcmlnZ2VyZWQgU3Ryb2JlIChSZXRyaWdnZXJhYmxlKSAqLwogCi0vLyBVc2VyIFRpbWVyL0NvdW50ZXIgMCBDbG9jayBTZWxlY3QgKFNldFV0YzBDbG9jaykKLSNkZWZpbmUgQ1VUQzBfOE1IWiAgICAgICAgICAgICAgICAgMHgwCS8vIDhNSHoKLSNkZWZpbmUgQ1VUQzBfRVhUX1RDX0NMT0NLMSAgICAgICAgMHgxCS8vIEV4dC4gVEMgQ2xvY2sgMQotI2RlZmluZSBDVVRDMF9FWFRfVENfQ0xPQ0syICAgICAgICAweDIJLy8gRXh0LiBUQyBDbG9jayAyCi0jZGVmaW5lIENVVEMwX0VYVF9QQ0xLICAgICAgICAgICAgIDB4MwkvLyBFeHQuIFBhY2VyIENsb2NrCisvKiAgVXNlciBUaW1lci9Db3VudGVyIDAgQ2xvY2sgU2VsZWN0IChTZXRVdGMwQ2xvY2spICovCisjZGVmaW5lIENVVEMwXzhNSFogICAgICAgICAgICAgICAgIDB4MAkvKiAgOE1IeiAqLworI2RlZmluZSBDVVRDMF9FWFRfVENfQ0xPQ0sxICAgICAgICAweDEJLyogIEV4dC4gVEMgQ2xvY2sgMSAqLworI2RlZmluZSBDVVRDMF9FWFRfVENfQ0xPQ0syICAgICAgICAweDIJLyogIEV4dC4gVEMgQ2xvY2sgMiAqLworI2RlZmluZSBDVVRDMF9FWFRfUENMSyAgICAgICAgICAgICAweDMJLyogIEV4dC4gUGFjZXIgQ2xvY2sgKi8KIAotLy8gVXNlciBUaW1lci9Db3VudGVyIDEgQ2xvY2sgU2VsZWN0IChTZXRVdGMxQ2xvY2spCi0jZGVmaW5lIENVVEMxXzhNSFogICAgICAgICAgICAgICAgIDB4MAkvLyA4TUh6Ci0jZGVmaW5lIENVVEMxX0VYVF9UQ19DTE9DSzEgICAgICAgIDB4MQkvLyBFeHQuIFRDIENsb2NrIDEKLSNkZWZpbmUgQ1VUQzFfRVhUX1RDX0NMT0NLMiAgICAgICAgMHgyCS8vIEV4dC4gVEMgQ2xvY2sgMgotI2RlZmluZSBDVVRDMV9FWFRfUENMSyAgICAgICAgICAgICAweDMJLy8gRXh0LiBQYWNlciBDbG9jawotI2RlZmluZSBDVVRDMV9VVEMwX09VVCAgICAgICAgICAgICAweDQJLy8gVXNlciBUaW1lci9Db3VudGVyIDAgb3V0Ci0jZGVmaW5lIENVVEMxX0RJTl9TSUdOQUwgICAgICAgICAgIDB4NQkvLyBIaWdoLVNwZWVkIERpZ2l0YWwgSW5wdXQgICBTYW1wbGluZyBzaWduYWwKKy8qICBVc2VyIFRpbWVyL0NvdW50ZXIgMSBDbG9jayBTZWxlY3QgKFNldFV0YzFDbG9jaykgKi8KKyNkZWZpbmUgQ1VUQzFfOE1IWiAgICAgICAgICAgICAgICAgMHgwCS8qICA4TUh6ICovCisjZGVmaW5lIENVVEMxX0VYVF9UQ19DTE9DSzEgICAgICAgIDB4MQkvKiAgRXh0LiBUQyBDbG9jayAxICovCisjZGVmaW5lIENVVEMxX0VYVF9UQ19DTE9DSzIgICAgICAgIDB4MgkvKiAgRXh0LiBUQyBDbG9jayAyICovCisjZGVmaW5lIENVVEMxX0VYVF9QQ0xLICAgICAgICAgICAgIDB4MwkvKiAgRXh0LiBQYWNlciBDbG9jayAqLworI2RlZmluZSBDVVRDMV9VVEMwX09VVCAgICAgICAgICAgICAweDQJLyogIFVzZXIgVGltZXIvQ291bnRlciAwIG91dCAqLworI2RlZmluZSBDVVRDMV9ESU5fU0lHTkFMICAgICAgICAgICAweDUJLyogIEhpZ2gtU3BlZWQgRGlnaXRhbCBJbnB1dCAgIFNhbXBsaW5nIHNpZ25hbCAqLwogCi0vLyBVc2VyIFRpbWVyL0NvdW50ZXIgMiBDbG9jayBTZWxlY3QgKFNldFV0YzJDbG9jaykKLSNkZWZpbmUgQ1VUQzJfOE1IWiAgICAgICAgICAgICAgICAgMHgwCS8vIDhNSHoKLSNkZWZpbmUgQ1VUQzJfRVhUX1RDX0NMT0NLMSAgICAgICAgMHgxCS8vIEV4dC4gVEMgQ2xvY2sgMQotI2RlZmluZSBDVVRDMl9FWFRfVENfQ0xPQ0syICAgICAgICAweDIJLy8gRXh0LiBUQyBDbG9jayAyCi0jZGVmaW5lIENVVEMyX0VYVF9QQ0xLICAgICAgICAgICAgIDB4MwkvLyBFeHQuIFBhY2VyIENsb2NrCi0jZGVmaW5lIENVVEMyX1VUQzFfT1VUICAgICAgICAgICAgIDB4NAkvLyBVc2VyIFRpbWVyL0NvdW50ZXIgMSBvdXQKKy8qICBVc2VyIFRpbWVyL0NvdW50ZXIgMiBDbG9jayBTZWxlY3QgKFNldFV0YzJDbG9jaykgKi8KKyNkZWZpbmUgQ1VUQzJfOE1IWiAgICAgICAgICAgICAgICAgMHgwCS8qICA4TUh6ICovCisjZGVmaW5lIENVVEMyX0VYVF9UQ19DTE9DSzEgICAgICAgIDB4MQkvKiAgRXh0LiBUQyBDbG9jayAxICovCisjZGVmaW5lIENVVEMyX0VYVF9UQ19DTE9DSzIgICAgICAgIDB4MgkvKiAgRXh0LiBUQyBDbG9jayAyICovCisjZGVmaW5lIENVVEMyX0VYVF9QQ0xLICAgICAgICAgICAgIDB4MwkvKiAgRXh0LiBQYWNlciBDbG9jayAqLworI2RlZmluZSBDVVRDMl9VVEMxX09VVCAgICAgICAgICAgICAweDQJLyogIFVzZXIgVGltZXIvQ291bnRlciAxIG91dCAqLwogCi0vLyBVc2VyIFRpbWVyL0NvdW50ZXIgMCBHYXRlIFNlbGVjdCAoU2V0VXRjMEdhdGUpCi0jZGVmaW5lIEdVVEMwX05PVF9HQVRFRCAgICAgICAgICAgIDB4MAkvLyBOb3QgZ2F0ZWQKLSNkZWZpbmUgR1VUQzBfR0FURUQgICAgICAgICAgICAgICAgMHgxCS8vIEdhdGVkCi0jZGVmaW5lIEdVVEMwX0VYVF9UQ19HQVRFMSAgICAgICAgIDB4MgkvLyBFeHQuIFRDIEdhdGUgMQotI2RlZmluZSBHVVRDMF9FWFRfVENfR0FURTIgICAgICAgICAweDMJLy8gRXh0LiBUQyBHYXRlIDIKKy8qICBVc2VyIFRpbWVyL0NvdW50ZXIgMCBHYXRlIFNlbGVjdCAoU2V0VXRjMEdhdGUpICovCisjZGVmaW5lIEdVVEMwX05PVF9HQVRFRCAgICAgICAgICAgIDB4MAkvKiAgTm90IGdhdGVkICovCisjZGVmaW5lIEdVVEMwX0dBVEVEICAgICAgICAgICAgICAgIDB4MQkvKiAgR2F0ZWQgKi8KKyNkZWZpbmUgR1VUQzBfRVhUX1RDX0dBVEUxICAgICAgICAgMHgyCS8qICBFeHQuIFRDIEdhdGUgMSAqLworI2RlZmluZSBHVVRDMF9FWFRfVENfR0FURTIgICAgICAgICAweDMJLyogIEV4dC4gVEMgR2F0ZSAyICovCiAKLS8vIFVzZXIgVGltZXIvQ291bnRlciAxIEdhdGUgU2VsZWN0IChTZXRVdGMxR2F0ZSkKLSNkZWZpbmUgR1VUQzFfTk9UX0dBVEVEICAgICAgICAgICAgMHgwCS8vIE5vdCBnYXRlZAotI2RlZmluZSBHVVRDMV9HQVRFRCAgICAgICAgICAgICAgICAweDEJLy8gR2F0ZWQKLSNkZWZpbmUgR1VUQzFfRVhUX1RDX0dBVEUxICAgICAgICAgMHgyCS8vIEV4dC4gVEMgR2F0ZSAxCi0jZGVmaW5lIEdVVEMxX0VYVF9UQ19HQVRFMiAgICAgICAgIDB4MwkvLyBFeHQuIFRDIEdhdGUgMgotI2RlZmluZSBHVVRDMV9VVEMwX09VVCAgICAgICAgICAgICAweDQJLy8gVXNlciBUaW1lci9Db3VudGVyIDAgb3V0CisvKiAgVXNlciBUaW1lci9Db3VudGVyIDEgR2F0ZSBTZWxlY3QgKFNldFV0YzFHYXRlKSAqLworI2RlZmluZSBHVVRDMV9OT1RfR0FURUQgICAgICAgICAgICAweDAJLyogIE5vdCBnYXRlZCAqLworI2RlZmluZSBHVVRDMV9HQVRFRCAgICAgICAgICAgICAgICAweDEJLyogIEdhdGVkICovCisjZGVmaW5lIEdVVEMxX0VYVF9UQ19HQVRFMSAgICAgICAgIDB4MgkvKiAgRXh0LiBUQyBHYXRlIDEgKi8KKyNkZWZpbmUgR1VUQzFfRVhUX1RDX0dBVEUyICAgICAgICAgMHgzCS8qICBFeHQuIFRDIEdhdGUgMiAqLworI2RlZmluZSBHVVRDMV9VVEMwX09VVCAgICAgICAgICAgICAweDQJLyogIFVzZXIgVGltZXIvQ291bnRlciAwIG91dCAqLwogCi0vLyBVc2VyIFRpbWVyL0NvdW50ZXIgMiBHYXRlIFNlbGVjdCAoU2V0VXRjMkdhdGUpCi0jZGVmaW5lIEdVVEMyX05PVF9HQVRFRCAgICAgICAgICAgIDB4MAkvLyBOb3QgZ2F0ZWQKLSNkZWZpbmUgR1VUQzJfR0FURUQgICAgICAgICAgICAgICAgMHgxCS8vIEdhdGVkCi0jZGVmaW5lIEdVVEMyX0VYVF9UQ19HQVRFMSAgICAgICAgIDB4MgkvLyBFeHQuIFRDIEdhdGUgMQotI2RlZmluZSBHVVRDMl9FWFRfVENfR0FURTIgICAgICAgICAweDMJLy8gRXh0LiBUQyBHYXRlIDIKLSNkZWZpbmUgR1VUQzJfVVRDMV9PVVQgICAgICAgICAgICAgMHg0CS8vIFVzZXIgVGltZXIvQ291bnRlciAxIG91dAorLyogIFVzZXIgVGltZXIvQ291bnRlciAyIEdhdGUgU2VsZWN0IChTZXRVdGMyR2F0ZSkgKi8KKyNkZWZpbmUgR1VUQzJfTk9UX0dBVEVEICAgICAgICAgICAgMHgwCS8qICBOb3QgZ2F0ZWQgKi8KKyNkZWZpbmUgR1VUQzJfR0FURUQgICAgICAgICAgICAgICAgMHgxCS8qICBHYXRlZCAqLworI2RlZmluZSBHVVRDMl9FWFRfVENfR0FURTEgICAgICAgICAweDIJLyogIEV4dC4gVEMgR2F0ZSAxICovCisjZGVmaW5lIEdVVEMyX0VYVF9UQ19HQVRFMiAgICAgICAgIDB4MwkvKiAgRXh0LiBUQyBHYXRlIDIgKi8KKyNkZWZpbmUgR1VUQzJfVVRDMV9PVVQgICAgICAgICAgICAgMHg0CS8qICBVc2VyIFRpbWVyL0NvdW50ZXIgMSBvdXQgKi8KIAotLy8gSW50ZXJydXB0IFNvdXJjZSBNYXNrcyAoU2V0SVRNYXNrLCBDbGVhcklUTWFzaywgR2V0SVRTdGF0dXMpCi0jZGVmaW5lIElSUU1fQURDX0ZJRk9fV1JJVEUgICAgICAgIDB4MDAwMQkvLyBBREMgRklGTyBXcml0ZQotI2RlZmluZSBJUlFNX0NHVF9SRVNFVCAgICAgICAgICAgICAweDAwMDIJLy8gUmVzZXQgQ0dUCi0jZGVmaW5lIElSUU1fQ0dUX1BBVVNFICAgICAgICAgICAgIDB4MDAwOAkvLyBQYXVzZSBDR1QKLSNkZWZpbmUgSVJRTV9BRENfQUJPVVRfQ05UICAgICAgICAgMHgwMDEwCS8vIEFib3V0IENvdW50ZXIgb3V0Ci0jZGVmaW5lIElSUU1fQURDX0RFTEFZX0NOVCAgICAgICAgIDB4MDAyMAkvLyBEZWxheSBDb3VudGVyIG91dAotI2RlZmluZSBJUlFNX0FEQ19TQU1QTEVfQ05UCSAgIDB4MDA0MAkvLyBBREMgU2FtcGxlIENvdW50ZXIKLSNkZWZpbmUgSVJRTV9EQUMxX1VDTlQgICAgICAgICAgICAgMHgwMDgwCS8vIERBQzEgVXBkYXRlIENvdW50ZXIKLSNkZWZpbmUgSVJRTV9EQUMyX1VDTlQgICAgICAgICAgICAgMHgwMTAwCS8vIERBQzIgVXBkYXRlIENvdW50ZXIKLSNkZWZpbmUgSVJRTV9VVEMxICAgICAgICAgICAgICAgICAgMHgwMjAwCS8vIFVzZXIgVEMxIG91dAotI2RlZmluZSBJUlFNX1VUQzFfSU5WICAgICAgICAgICAgICAweDA0MDAJLy8gVXNlciBUQzEgb3V0LCBpbnZlcnRlZAotI2RlZmluZSBJUlFNX1VUQzIgICAgICAgICAgICAgICAgICAweDA4MDAJLy8gVXNlciBUQzIgb3V0Ci0jZGVmaW5lIElSUU1fRElHSVRBTF9JVCAgICAgICAgICAgIDB4MTAwMAkvLyBEaWdpdGFsIEludGVycnVwdAotI2RlZmluZSBJUlFNX0VYVEVSTkFMX0lUICAgICAgICAgICAweDIwMDAJLy8gRXh0ZXJuYWwgSW50ZXJydXB0Ci0jZGVmaW5lIElSUU1fRVRSSUdfUklTSU5HICAgICAgICAgIDB4NDAwMAkvLyBFeHRlcm5hbCBUcmlnZ2VyIHJpc2luZy1lZGdlCi0jZGVmaW5lIElSUU1fRVRSSUdfRkFMTElORyAgICAgICAgIDB4ODAwMAkvLyBFeHRlcm5hbCBUcmlnZ2VyIGZhbGxpbmctZWRnZQorLyogIEludGVycnVwdCBTb3VyY2UgTWFza3MgKFNldElUTWFzaywgQ2xlYXJJVE1hc2ssIEdldElUU3RhdHVzKSAqLworI2RlZmluZSBJUlFNX0FEQ19GSUZPX1dSSVRFICAgICAgICAweDAwMDEJLyogIEFEQyBGSUZPIFdyaXRlICovCisjZGVmaW5lIElSUU1fQ0dUX1JFU0VUICAgICAgICAgICAgIDB4MDAwMgkvKiAgUmVzZXQgQ0dUICovCisjZGVmaW5lIElSUU1fQ0dUX1BBVVNFICAgICAgICAgICAgIDB4MDAwOAkvKiAgUGF1c2UgQ0dUICovCisjZGVmaW5lIElSUU1fQURDX0FCT1VUX0NOVCAgICAgICAgIDB4MDAxMAkvKiAgQWJvdXQgQ291bnRlciBvdXQgKi8KKyNkZWZpbmUgSVJRTV9BRENfREVMQVlfQ05UICAgICAgICAgMHgwMDIwCS8qICBEZWxheSBDb3VudGVyIG91dCAqLworI2RlZmluZSBJUlFNX0FEQ19TQU1QTEVfQ05UCSAgIDB4MDA0MAkvKiAgQURDIFNhbXBsZSBDb3VudGVyICovCisjZGVmaW5lIElSUU1fREFDMV9VQ05UICAgICAgICAgICAgIDB4MDA4MAkvKiAgREFDMSBVcGRhdGUgQ291bnRlciAqLworI2RlZmluZSBJUlFNX0RBQzJfVUNOVCAgICAgICAgICAgICAweDAxMDAJLyogIERBQzIgVXBkYXRlIENvdW50ZXIgKi8KKyNkZWZpbmUgSVJRTV9VVEMxICAgICAgICAgICAgICAgICAgMHgwMjAwCS8qICBVc2VyIFRDMSBvdXQgKi8KKyNkZWZpbmUgSVJRTV9VVEMxX0lOViAgICAgICAgICAgICAgMHgwNDAwCS8qICBVc2VyIFRDMSBvdXQsIGludmVydGVkICovCisjZGVmaW5lIElSUU1fVVRDMiAgICAgICAgICAgICAgICAgIDB4MDgwMAkvKiAgVXNlciBUQzIgb3V0ICovCisjZGVmaW5lIElSUU1fRElHSVRBTF9JVCAgICAgICAgICAgIDB4MTAwMAkvKiAgRGlnaXRhbCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRTV9FWFRFUk5BTF9JVCAgICAgICAgICAgMHgyMDAwCS8qICBFeHRlcm5hbCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVJRTV9FVFJJR19SSVNJTkcgICAgICAgICAgMHg0MDAwCS8qICBFeHRlcm5hbCBUcmlnZ2VyIHJpc2luZy1lZGdlICovCisjZGVmaW5lIElSUU1fRVRSSUdfRkFMTElORyAgICAgICAgIDB4ODAwMAkvKiAgRXh0ZXJuYWwgVHJpZ2dlciBmYWxsaW5nLWVkZ2UgKi8KIAotLy8gRE1BIFJlcXVlc3QgU291cmNlcyAoTEFTMCkKLSNkZWZpbmUgRE1BU19ESVNBQkxFRCAgICAgICAgICAgICAgMHgwCS8vIERNQSBEaXNhYmxlZAotI2RlZmluZSBETUFTX0FEQ19TQ05UICAgICAgICAgICAgICAweDEJLy8gQURDIFNhbXBsZSBDb3VudGVyCi0jZGVmaW5lIERNQVNfREFDMV9VQ05UICAgICAgICAgICAgIDB4MgkvLyBEL0ExIFVwZGF0ZSBDb3VudGVyCi0jZGVmaW5lIERNQVNfREFDMl9VQ05UICAgICAgICAgICAgIDB4MwkvLyBEL0EyIFVwZGF0ZSBDb3VudGVyCi0jZGVmaW5lIERNQVNfVVRDMSAgICAgICAgICAgICAgICAgIDB4NAkvLyBVc2VyIFRDMSBvdXQKLSNkZWZpbmUgRE1BU19BREZJRk9fSEFMRl9GVUxMICAgICAgMHg4CS8vIEEvRCBGSUZPIGhhbGYgZnVsbAotI2RlZmluZSBETUFTX0RBQzFfRklGT19IQUxGX0VNUFRZICAweDkJLy8gRC9BMSBGSUZPIGhhbGYgZW1wdHkKLSNkZWZpbmUgRE1BU19EQUMyX0ZJRk9fSEFMRl9FTVBUWSAgMHhBCS8vIEQvQTIgRklGTyBoYWxmIGVtcHR5CisvKiAgRE1BIFJlcXVlc3QgU291cmNlcyAoTEFTMCkgKi8KKyNkZWZpbmUgRE1BU19ESVNBQkxFRCAgICAgICAgICAgICAgMHgwCS8qICBETUEgRGlzYWJsZWQgKi8KKyNkZWZpbmUgRE1BU19BRENfU0NOVCAgICAgICAgICAgICAgMHgxCS8qICBBREMgU2FtcGxlIENvdW50ZXIgKi8KKyNkZWZpbmUgRE1BU19EQUMxX1VDTlQgICAgICAgICAgICAgMHgyCS8qICBEL0ExIFVwZGF0ZSBDb3VudGVyICovCisjZGVmaW5lIERNQVNfREFDMl9VQ05UICAgICAgICAgICAgIDB4MwkvKiAgRC9BMiBVcGRhdGUgQ291bnRlciAqLworI2RlZmluZSBETUFTX1VUQzEgICAgICAgICAgICAgICAgICAweDQJLyogIFVzZXIgVEMxIG91dCAqLworI2RlZmluZSBETUFTX0FERklGT19IQUxGX0ZVTEwgICAgICAweDgJLyogIEEvRCBGSUZPIGhhbGYgZnVsbCAqLworI2RlZmluZSBETUFTX0RBQzFfRklGT19IQUxGX0VNUFRZICAweDkJLyogIEQvQTEgRklGTyBoYWxmIGVtcHR5ICovCisjZGVmaW5lIERNQVNfREFDMl9GSUZPX0hBTEZfRU1QVFkgIDB4QQkvKiAgRC9BMiBGSUZPIGhhbGYgZW1wdHkgKi8KIAotLy8gRE1BIExvY2FsIEFkZHJlc3NlcyAgICgweDQwMDAwMDAwK0xBUzEgb2Zmc2V0KQotI2RlZmluZSBETUFMQUREUl9BREMgICAgICAgMHg0MDAwMDAwMAkvLyBBL0QgRklGTwotI2RlZmluZSBETUFMQUREUl9IRElOICAgICAgMHg0MDAwMDAwNAkvLyBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgRklGTwotI2RlZmluZSBETUFMQUREUl9EQUMxICAgICAgMHg0MDAwMDAwOAkvLyBEL0ExIEZJRk8KLSNkZWZpbmUgRE1BTEFERFJfREFDMiAgICAgIDB4NDAwMDAwMEMJLy8gRC9BMiBGSUZPCisvKiAgRE1BIExvY2FsIEFkZHJlc3NlcyAgICgweDQwMDAwMDAwK0xBUzEgb2Zmc2V0KSAqLworI2RlZmluZSBETUFMQUREUl9BREMgICAgICAgMHg0MDAwMDAwMAkvKiAgQS9EIEZJRk8gKi8KKyNkZWZpbmUgRE1BTEFERFJfSERJTiAgICAgIDB4NDAwMDAwMDQJLyogIEhpZ2ggU3BlZWQgRGlnaXRhbCBJbnB1dCBGSUZPICovCisjZGVmaW5lIERNQUxBRERSX0RBQzEgICAgICAweDQwMDAwMDA4CS8qICBEL0ExIEZJRk8gKi8KKyNkZWZpbmUgRE1BTEFERFJfREFDMiAgICAgIDB4NDAwMDAwMEMJLyogIEQvQTIgRklGTyAqLwogCi0vLyBQb3J0IDAgY29tcGFyZSBtb2RlcyAoU2V0RElPMENvbXBhcmVNb2RlKQotI2RlZmluZSBESU9fTU9ERV9FVkVOVCAgICAgMAkvLyBFdmVudCBNb2RlCi0jZGVmaW5lIERJT19NT0RFX01BVENIICAgICAxCS8vIE1hdGNoIE1vZGUKKy8qICBQb3J0IDAgY29tcGFyZSBtb2RlcyAoU2V0RElPMENvbXBhcmVNb2RlKSAqLworI2RlZmluZSBESU9fTU9ERV9FVkVOVCAgICAgMAkvKiAgRXZlbnQgTW9kZSAqLworI2RlZmluZSBESU9fTU9ERV9NQVRDSCAgICAgMQkvKiAgTWF0Y2ggTW9kZSAqLwogCi0vLyBEaWdpdGFsIFRhYmxlIEVuYWJsZSAoUG9ydCAxIGRpc2FibGUpCi0jZGVmaW5lIERUQkxfRElTQUJMRSAgICAgICAwCS8vIEVuYWJsZSBEaWdpdGFsIFRhYmxlCi0jZGVmaW5lIERUQkxfRU5BQkxFICAgICAgICAxCS8vIERpc2FibGUgRGlnaXRhbCBUYWJsZQorLyogIERpZ2l0YWwgVGFibGUgRW5hYmxlIChQb3J0IDEgZGlzYWJsZSkgKi8KKyNkZWZpbmUgRFRCTF9ESVNBQkxFICAgICAgIDAJLyogIEVuYWJsZSBEaWdpdGFsIFRhYmxlICovCisjZGVmaW5lIERUQkxfRU5BQkxFICAgICAgICAxCS8qICBEaXNhYmxlIERpZ2l0YWwgVGFibGUgKi8KIAotLy8gU2FtcGxpbmcgU2lnbmFsIGZvciBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgKFNldEhkaW5TdGFydCkKLSNkZWZpbmUgSERJTl9TT0ZUV0FSRSAgICAgIDB4MAkvLyBTb2Z0d2FyZSBUcmlnZ2VyCi0jZGVmaW5lIEhESU5fQURDICAgICAgICAgICAweDEJLy8gQS9EIENvbnZlcnNpb24gU2lnbmFsCi0jZGVmaW5lIEhESU5fVVRDMCAgICAgICAgICAweDIJLy8gVXNlciBUQyBvdXQgMAotI2RlZmluZSBIRElOX1VUQzEgICAgICAgICAgMHgzCS8vIFVzZXIgVEMgb3V0IDEKLSNkZWZpbmUgSERJTl9VVEMyICAgICAgICAgIDB4NAkvLyBVc2VyIFRDIG91dCAyCi0jZGVmaW5lIEhESU5fRVBDTEsgICAgICAgICAweDUJLy8gRXh0ZXJuYWwgUGFjZXIgQ2xvY2sKLSNkZWZpbmUgSERJTl9FVFJHICAgICAgICAgIDB4NgkvLyBFeHRlcm5hbCBUcmlnZ2VyCisvKiAgU2FtcGxpbmcgU2lnbmFsIGZvciBIaWdoIFNwZWVkIERpZ2l0YWwgSW5wdXQgKFNldEhkaW5TdGFydCkgKi8KKyNkZWZpbmUgSERJTl9TT0ZUV0FSRSAgICAgIDB4MAkvKiAgU29mdHdhcmUgVHJpZ2dlciAqLworI2RlZmluZSBIRElOX0FEQyAgICAgICAgICAgMHgxCS8qICBBL0QgQ29udmVyc2lvbiBTaWduYWwgKi8KKyNkZWZpbmUgSERJTl9VVEMwICAgICAgICAgIDB4MgkvKiAgVXNlciBUQyBvdXQgMCAqLworI2RlZmluZSBIRElOX1VUQzEgICAgICAgICAgMHgzCS8qICBVc2VyIFRDIG91dCAxICovCisjZGVmaW5lIEhESU5fVVRDMiAgICAgICAgICAweDQJLyogIFVzZXIgVEMgb3V0IDIgKi8KKyNkZWZpbmUgSERJTl9FUENMSyAgICAgICAgIDB4NQkvKiAgRXh0ZXJuYWwgUGFjZXIgQ2xvY2sgKi8KKyNkZWZpbmUgSERJTl9FVFJHICAgICAgICAgIDB4NgkvKiAgRXh0ZXJuYWwgVHJpZ2dlciAqLwogCi0vLyBDaGFubmVsIEdhaW4gVGFibGUgLyBDaGFubmVsIEdhaW4gTGF0Y2gKLSNkZWZpbmUgQ1NDX0xBVENIICAgICAgICAgIDAJLy8gQ2hhbm5lbCBHYWluIExhdGNoIG1vZGUKLSNkZWZpbmUgQ1NDX0NHVCAgICAgICAgICAgIDEJLy8gQ2hhbm5lbCBHYWluIFRhYmxlIG1vZGUKKy8qICBDaGFubmVsIEdhaW4gVGFibGUgLyBDaGFubmVsIEdhaW4gTGF0Y2ggKi8KKyNkZWZpbmUgQ1NDX0xBVENIICAgICAgICAgIDAJLyogIENoYW5uZWwgR2FpbiBMYXRjaCBtb2RlICovCisjZGVmaW5lIENTQ19DR1QgICAgICAgICAgICAxCS8qICBDaGFubmVsIEdhaW4gVGFibGUgbW9kZSAqLwogCi0vLyBDaGFubmVsIEdhaW4gVGFibGUgUGF1c2UgRW5hYmxlCi0jZGVmaW5lIENHVF9QQVVTRV9ESVNBQkxFICAwCS8vIENoYW5uZWwgR2FpbiBUYWJsZSBQYXVzZSBEaXNhYmxlCi0jZGVmaW5lIENHVF9QQVVTRV9FTkFCTEUgICAxCS8vIENoYW5uZWwgR2FpbiBUYWJsZSBQYXVzZSBFbmFibGUKKy8qICBDaGFubmVsIEdhaW4gVGFibGUgUGF1c2UgRW5hYmxlICovCisjZGVmaW5lIENHVF9QQVVTRV9ESVNBQkxFICAwCS8qICBDaGFubmVsIEdhaW4gVGFibGUgUGF1c2UgRGlzYWJsZSAqLworI2RlZmluZSBDR1RfUEFVU0VfRU5BQkxFICAgMQkvKiAgQ2hhbm5lbCBHYWluIFRhYmxlIFBhdXNlIEVuYWJsZSAqLwogCi0vLyBEQUMgb3V0cHV0IHR5cGUvcmFuZ2UgKHA2MykKLSNkZWZpbmUgQU9VVF9VTklQNSAgICAgICAgIDAJLy8gMC4uKzUgVm9sdAotI2RlZmluZSBBT1VUX1VOSVAxMCAgICAgICAgMQkvLyAwLi4rMTAgVm9sdAotI2RlZmluZSBBT1VUX0JJUDUgICAgICAgICAgMgkvLyAtNS4uKzUgVm9sdAotI2RlZmluZSBBT1VUX0JJUDEwICAgICAgICAgMwkvLyAtMTAuLisxMCBWb2x0CisvKiAgREFDIG91dHB1dCB0eXBlL3JhbmdlIChwNjMpICovCisjZGVmaW5lIEFPVVRfVU5JUDUgICAgICAgICAwCS8qICAwLi4rNSBWb2x0ICovCisjZGVmaW5lIEFPVVRfVU5JUDEwICAgICAgICAxCS8qICAwLi4rMTAgVm9sdCAqLworI2RlZmluZSBBT1VUX0JJUDUgICAgICAgICAgMgkvKiAgLTUuLis1IFZvbHQgKi8KKyNkZWZpbmUgQU9VVF9CSVAxMCAgICAgICAgIDMJLyogIC0xMC4uKzEwIFZvbHQgKi8KIAotLy8gR2hhbm5lbCBHYWluIFRhYmxlIGZpZWxkIGRlZmluaXRpb25zIChwNjEpCi0vLyBHYWluCisvKiAgR2hhbm5lbCBHYWluIFRhYmxlIGZpZWxkIGRlZmluaXRpb25zIChwNjEpICovCisvKiAgR2FpbiAqLwogI2RlZmluZSBHQUlOMSAgICAgICAgICAgICAgMAogI2RlZmluZSBHQUlOMiAgICAgICAgICAgICAgMQogI2RlZmluZSBHQUlONCAgICAgICAgICAgICAgMgpAQCAtMzk4LDE1ICszOTgsMTUgQEAKICNkZWZpbmUgR0FJTjY0ICAgICAgICAgICAgIDYKICNkZWZpbmUgR0FJTjEyOCAgICAgICAgICAgIDcKIAotLy8gSW5wdXQgcmFuZ2UvcG9sYXJpdHkKLSNkZWZpbmUgQUlOX0JJUDUgICAgICAgICAgIDAJLy8gLTUuLis1IFZvbHQKLSNkZWZpbmUgQUlOX0JJUDEwICAgICAgICAgIDEJLy8gLTEwLi4rMTAgVm9sdAotI2RlZmluZSBBSU5fVU5JUDEwICAgICAgICAgMgkvLyAwLi4rMTAgVm9sdAorLyogIElucHV0IHJhbmdlL3BvbGFyaXR5ICovCisjZGVmaW5lIEFJTl9CSVA1ICAgICAgICAgICAwCS8qICAtNS4uKzUgVm9sdCAqLworI2RlZmluZSBBSU5fQklQMTAgICAgICAgICAgMQkvKiAgLTEwLi4rMTAgVm9sdCAqLworI2RlZmluZSBBSU5fVU5JUDEwICAgICAgICAgMgkvKiAgMC4uKzEwIFZvbHQgKi8KIAotLy8gbm9uIHJlZmVyZW5jZWQgc2luZ2xlIGVuZGVkIHNlbGVjdCBiaXQKLSNkZWZpbmUgTlJTRV9BR05EICAgICAgICAgIDAJLy8gQUdORCByZWZlcmVuY2VkIFNFIGlucHV0Ci0jZGVmaW5lIE5SU0VfQUlOUyAgICAgICAgICAxCS8vIEFJTiBTRU5TRSByZWZlcmVuY2VkIFNFIGlucHV0CisvKiAgbm9uIHJlZmVyZW5jZWQgc2luZ2xlIGVuZGVkIHNlbGVjdCBiaXQgKi8KKyNkZWZpbmUgTlJTRV9BR05EICAgICAgICAgIDAJLyogIEFHTkQgcmVmZXJlbmNlZCBTRSBpbnB1dCAqLworI2RlZmluZSBOUlNFX0FJTlMgICAgICAgICAgMQkvKiAgQUlOIFNFTlNFIHJlZmVyZW5jZWQgU0UgaW5wdXQgKi8KIAotLy8gc2luZ2xlIGVuZGVkIHZzIGRpZmZlcmVudGlhbAotI2RlZmluZSBHTkRfU0UJCTAJLy8gU2luZ2xlLUVuZGVkCi0jZGVmaW5lIEdORF9ESUZGCTEJLy8gRGlmZmVyZW50aWFsCisvKiAgc2luZ2xlIGVuZGVkIHZzIGRpZmZlcmVudGlhbCAqLworI2RlZmluZSBHTkRfU0UJCTAJLyogIFNpbmdsZS1FbmRlZCAqLworI2RlZmluZSBHTkRfRElGRgkxCS8qICBEaWZmZXJlbnRpYWwgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzRhYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMC5jCkBAIC0wLDAgKzEsNDU4IEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvcnRpODAwLmMKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgQW5hbG9nIERldmljZXMgUlRJLTgwMC84MTUgYm9hcmQKKworICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgQ29weXJpZ2h0IChDKSAxOTk4IERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisgKi8KKy8qCitEcml2ZXI6IHJ0aTgwMAorRGVzY3JpcHRpb246IEFuYWxvZyBEZXZpY2VzIFJUSS04MDAvODE1CitBdXRob3I6IGRzCitTdGF0dXM6IHVua25vd24KK1VwZGF0ZWQ6IEZyaSwgMDUgU2VwIDIwMDggMTQ6NTA6NDQgKzAxMDAKK0RldmljZXM6IFtBbmFsb2cgRGV2aWNlc10gUlRJLTgwMCAocnRpODAwKSwgUlRJLTgxNSAocnRpODE1KQorCitDb25maWd1cmF0aW9uIG9wdGlvbnM6CisgIFswXSAtIEkvTyBwb3J0IGJhc2UgYWRkcmVzcworICBbMV0gLSBJUlEKKyAgWzJdIC0gQS9EIHJlZmVyZW5jZQorICAgICAgICAgIDAgPSBkaWZmZXJlbnRpYWwKKyAgICAgICAgICAxID0gcHNldWRvZGlmZmVyZW50aWFsIChjb21tb24pCisgICAgICAgICAgMiA9IHNpbmdsZS1lbmRlZAorICBbM10gLSBBL0QgcmFuZ2UKKyAgICAgICAgICAwID0gWy0xMCwxMF0KKyAgICAgICAgICAxID0gWy01LDVdCisgICAgICAgICAgMiA9IFswLDEwXQorICBbNF0gLSBBL0QgZW5jb2RpbmcKKyAgICAgICAgICAwID0gdHdvJ3MgY29tcGxlbWVudAorICAgICAgICAgIDEgPSBzdHJhaWdodCBiaW5hcnkKKyAgWzVdIC0gREFDIDAgcmFuZ2UKKyAgICAgICAgICAwID0gWy0xMCwxMF0KKyAgICAgICAgICAxID0gWzAsMTBdCisgIFs2XSAtIERBQyAwIGVuY29kaW5nCisgICAgICAgICAgMCA9IHR3bydzIGNvbXBsZW1lbnQKKyAgICAgICAgICAxID0gc3RyYWlnaHQgYmluYXJ5CisgIFs3XSAtIERBQyAxIHJhbmdlIChzYW1lIGFzIERBQyAwKQorICBbOF0gLSBEQUMgMSBlbmNvZGluZyAoc2FtZSBhcyBEQUMgMCkKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIFJUSTgwMF9TSVpFIDE2CisKKyNkZWZpbmUgUlRJODAwX0NTUiAwCisjZGVmaW5lIFJUSTgwMF9NVVhHQUlOIDEKKyNkZWZpbmUgUlRJODAwX0NPTlZFUlQgMgorI2RlZmluZSBSVEk4MDBfQURDTE8gMworI2RlZmluZSBSVEk4MDBfQURDSEkgNAorI2RlZmluZSBSVEk4MDBfREFDMExPIDUKKyNkZWZpbmUgUlRJODAwX0RBQzBISSA2CisjZGVmaW5lIFJUSTgwMF9EQUMxTE8gNworI2RlZmluZSBSVEk4MDBfREFDMUhJIDgKKyNkZWZpbmUgUlRJODAwX0NMUkZMQUdTIDkKKyNkZWZpbmUgUlRJODAwX0RJIDEwCisjZGVmaW5lIFJUSTgwMF9ETyAxMQorI2RlZmluZSBSVEk4MDBfOTUxM0FfREFUQSAxMgorI2RlZmluZSBSVEk4MDBfOTUxM0FfQ05UUkwgMTMKKyNkZWZpbmUgUlRJODAwXzk1MTNBX1NUQVRVUyAxMworCisvKgorICogZmxhZ3MgZm9yIENTUiByZWdpc3RlcgorICovCisKKyNkZWZpbmUgUlRJODAwX0JVU1kJCTB4ODAKKyNkZWZpbmUgUlRJODAwX0RPTkUJCTB4NDAKKyNkZWZpbmUgUlRJODAwX09WRVJSVU4JCTB4MjAKKyNkZWZpbmUgUlRJODAwX1RDUgkJMHgxMAorI2RlZmluZSBSVEk4MDBfRE1BX0VOQUIJCTB4MDgKKyNkZWZpbmUgUlRJODAwX0lOVFJfVEMJCTB4MDQKKyNkZWZpbmUgUlRJODAwX0lOVFJfRUMJCTB4MDIKKyNkZWZpbmUgUlRJODAwX0lOVFJfT1ZSTgkweDAxCisKKyNkZWZpbmUgQW05NTEzXzhCSVRCVVMKKworI2RlZmluZSBBbTk1MTNfb3V0cHV0X2NvbnRyb2woYSkJb3V0YihhLGRldi0+aW9iYXNlK1JUSTgwMF85NTEzQV9DTlRSTCkKKyNkZWZpbmUgQW05NTEzX291dHB1dF9kYXRhKGEpCQlvdXRiKGEsZGV2LT5pb2Jhc2UrUlRJODAwXzk1MTNBX0RBVEEpCisjZGVmaW5lIEFtOTUxM19pbnB1dF9kYXRhKCkJCWluYihkZXYtPmlvYmFzZStSVEk4MDBfOTUxM0FfREFUQSkKKyNkZWZpbmUgQW05NTEzX2lucHV0X3N0YXR1cygpCQlpbmIoZGV2LT5pb2Jhc2UrUlRJODAwXzk1MTNBX1NUQVRVUykKKworI2luY2x1ZGUgImFtOTUxMy5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcnRpODAwX2FpXzEwX2JpcG9sYXIgPSB7IDQsIHsKKwkJCUJJUF9SQU5HRSgxMCksCisJCQlCSVBfUkFOR0UoMSksCisJCQlCSVBfUkFOR0UoMC4xKSwKKwkJCUJJUF9SQU5HRSgwLjAyKQorCX0KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfcnRpODAwX2FpXzVfYmlwb2xhciA9IHsgNCwgeworCQkJQklQX1JBTkdFKDUpLAorCQkJQklQX1JBTkdFKDAuNSksCisJCQlCSVBfUkFOR0UoMC4wNSksCisJCQlCSVBfUkFOR0UoMC4wMSkKKwl9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3J0aTgwMF9haV91bmlwb2xhciA9IHsgNCwgeworCQkJVU5JX1JBTkdFKDEwKSwKKwkJCVVOSV9SQU5HRSgxKSwKKwkJCVVOSV9SQU5HRSgwLjEpLAorCQkJVU5JX1JBTkdFKDAuMDIpCisJfQorfTsKKworc3RydWN0IHJ0aTgwMF9ib2FyZCB7CisKKwljb25zdCBjaGFyICpuYW1lOworCWludCBoYXNfYW87Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0aTgwMF9ib2FyZCBib2FyZHR5cGVzW10gPSB7CisJeyJydGk4MDAiLCAwfSwKKwl7InJ0aTgxNSIsIDF9LAorfTsKKworI2RlZmluZSB0aGlzX2JvYXJkICgoY29uc3Qgc3RydWN0IHJ0aTgwMF9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQorCitzdGF0aWMgaW50IHJ0aTgwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBydGk4MDBfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcnRpODAwID0geworICAgICAgZHJpdmVyX25hbWU6InJ0aTgwMCIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cnRpODAwX2F0dGFjaCwKKyAgICAgIGRldGFjaDpydGk4MDBfZGV0YWNoLAorICAgICAgbnVtX25hbWVzOnNpemVvZihib2FyZHR5cGVzKSAvIHNpemVvZihzdHJ1Y3QgcnRpODAwX2JvYXJkKSwKKyAgICAgIGJvYXJkX25hbWU6JmJvYXJkdHlwZXNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHJ0aTgwMF9ib2FyZCksCit9OworCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3J0aTgwMCk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBydGk4MDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldiBQVF9SRUdTX0FSRyk7CisKK3N0cnVjdCBydGk4MDBfcHJpdmF0ZSB7CisJZW51bSB7CisJCWFkY19kaWZmLCBhZGNfcHNldWRvZGlmZiwgYWRjX3NpbmdsZWVuZGVkCisJfSBhZGNfbXV4OworCWVudW0geworCQlhZGNfYmlwb2xhcjEwLCBhZGNfYmlwb2xhcjUsIGFkY191bmlwb2xhcjEwCisJfSBhZGNfcmFuZ2U7CisJZW51bSB7CisJCWFkY18yY29tcCwgYWRjX3N0cmFpZ2h0CisJfSBhZGNfY29kaW5nOworCWVudW0geworCQlkYWNfYmlwb2xhcjEwLCBkYWNfdW5pcG9sYXIxMAorCX0gZGFjMF9yYW5nZSwgZGFjMV9yYW5nZTsKKwllbnVtIHsKKwkJZGFjXzJjb21wLCBkYWNfc3RyYWlnaHQKKwl9IGRhYzBfY29kaW5nLCBkYWMxX2NvZGluZzsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqYW9fcmFuZ2VfdHlwZV9saXN0WzJdOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKKwlpbnQgbXV4Z2Fpbl9iaXRzOworfTsKKworI2RlZmluZSBkZXZwcml2ICgoc3RydWN0IHJ0aTgwMF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisjZGVmaW5lIFJUSTgwMF9USU1FT1VUIDEwMAorCitzdGF0aWMgaXJxcmV0dXJuX3QgcnRpODAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXYgUFRfUkVHU19BUkcpCit7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvLyBzZXR0bGluZyBkZWxheSB0aW1lcyBpbiB1c2VjIGZvciBkaWZmZXJlbnQgZ2FpbnMKK3N0YXRpYyBjb25zdCBpbnQgZ2FpbmRlbGF5W10gPSB7IDEwLCAyMCwgNDAsIDgwIH07CisKK3N0YXRpYyBpbnQgcnRpODAwX2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIHQ7CisJaW50IHN0YXR1czsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIGdhaW4gPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CisJdW5zaWduZWQgbXV4Z2Fpbl9iaXRzOworCisJaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0FEQ0hJKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUlRJODAwX0NMUkZMQUdTKTsKKworCW11eGdhaW5fYml0cyA9IGNoYW4gfCAoZ2FpbiA8PCA1KTsKKwlpZiAobXV4Z2Fpbl9iaXRzICE9IGRldnByaXYtPm11eGdhaW5fYml0cykgeworCQlkZXZwcml2LT5tdXhnYWluX2JpdHMgPSBtdXhnYWluX2JpdHM7CisJCW91dGIoZGV2cHJpdi0+bXV4Z2Fpbl9iaXRzLCBkZXYtPmlvYmFzZSArIFJUSTgwMF9NVVhHQUlOKTsKKwkJLyogd2l0aG91dCBhIGRlbGF5IGhlcmUsIHRoZSBSVElfT1ZFUlJVTiBiaXQKKwkJICogZ2V0cyBzZXQsIGFuZCB5b3Ugd2lsbCBoYXZlIGFuIGVycm9yLiAqLworCQlpZiAoaW5zbi0+biA+IDApIHsKKwkJCUJVR19PTihnYWluID49CisJCQkJc2l6ZW9mKGdhaW5kZWxheSkgLyBzaXplb2YoZ2FpbmRlbGF5WzBdKSk7CisJCQljb21lZGlfdWRlbGF5KGdhaW5kZWxheVtnYWluXSk7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBSVEk4MDBfQ09OVkVSVCk7CisJCWZvciAodCA9IFJUSTgwMF9USU1FT1VUOyB0OyB0LS0pIHsKKwkJCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIFJUSTgwMF9DU1IpOworCQkJaWYgKHN0YXR1cyAmIFJUSTgwMF9PVkVSUlVOKSB7CisJCQkJcnRfcHJpbnRrKCJydGk4MDA6IGEvZCBvdmVycnVuXG4iKTsKKwkJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUlRJODAwX0NMUkZMQUdTKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWlmIChzdGF0dXMgJiBSVEk4MDBfRE9ORSkKKwkJCQlicmVhazsKKwkJCWNvbWVkaV91ZGVsYXkoMSk7CisJCX0KKwkJaWYgKHQgPT0gMCkgeworCQkJcnRfcHJpbnRrKCJydGk4MDA6IHRpbWVvdXRcbiIpOworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCQlkYXRhW2ldID0gaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0FEQ0xPKTsKKwkJZGF0YVtpXSB8PSAoMHhmICYgaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0FEQ0hJKSkgPDwgODsKKworCQlpZiAoZGV2cHJpdi0+YWRjX2NvZGluZyA9PSBhZGNfMmNvbXApIHsKKwkJCWRhdGFbaV0gXj0gMHg4MDA7CisJCX0KKwl9CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBydGk4MDBfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgcnRpODAwX2FvX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJaW50IGQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZCA9IGRhdGFbaV07CisJCWlmIChkZXZwcml2LT5kYWMwX2NvZGluZyA9PSBkYWNfMmNvbXApIHsKKwkJCWQgXj0gMHg4MDA7CisJCX0KKwkJb3V0YihkICYgMHhmZiwKKwkJCWRldi0+aW9iYXNlICsgKGNoYW4gPyBSVEk4MDBfREFDMUxPIDogUlRJODAwX0RBQzBMTykpOworCQlvdXRiKGQgPj4gOCwKKwkJCWRldi0+aW9iYXNlICsgKGNoYW4gPyBSVEk4MDBfREFDMUhJIDogUlRJODAwX0RBQzBISSkpOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBydGk4MDBfZGlfaW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlkYXRhWzFdID0gaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0RJKTsKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBydGk4MDBfZG9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkYXRhWzBdKSB7CisJCXMtPnN0YXRlICY9IH5kYXRhWzBdOworCQlzLT5zdGF0ZSB8PSBkYXRhWzBdICYgZGF0YVsxXTsKKwkJLyogT3V0cHV0cyBhcmUgaW52ZXJ0ZWQuLi4gKi8KKwkJb3V0YihzLT5zdGF0ZSBeIDB4ZmYsIGRldi0+aW9iYXNlICsgUlRJODAwX0RPKTsKKwl9CisKKwlkYXRhWzFdID0gcy0+c3RhdGU7CisKKwlyZXR1cm4gMjsKK30KKworLyoKKyAgIG9wdGlvbnNbMF0gLSBJL08gcG9ydAorICAgb3B0aW9uc1sxXSAtIGlycQorICAgb3B0aW9uc1syXSAtIGEvZCBtdXgKKyAgIAkwPWRpZmZlcmVudGlhbCwgMT1wc2V1ZG9kaWZmLCAyPXNpbmdsZQorICAgb3B0aW9uc1szXSAtIGEvZCByYW5nZQorICAgCTA9Ymlwb2xhcjEwLCAxPWJpcG9sYXI1LCAyPXVuaXBvbGFyMTAKKyAgIG9wdGlvbnNbNF0gLSBhL2QgY29kaW5nCisgICAJMD0yJ3MgY29tcCwgMT1zdHJhaWdodCBiaW5hcnkKKyAgIG9wdGlvbnNbNV0gLSBkYWMwIHJhbmdlCisgICAJMD1iaXBvbGFyMTAsIDE9dW5pcG9sYXIxMAorICAgb3B0aW9uc1s2XSAtIGRhYzAgY29kaW5nCisgICAJMD0yJ3MgY29tcCwgMT1zdHJhaWdodCBiaW5hcnkKKyAgIG9wdGlvbnNbN10gLSBkYWMxIHJhbmdlCisgICBvcHRpb25zWzhdIC0gZGFjMSBjb2RpbmcKKyAqLworCitzdGF0aWMgaW50IHJ0aTgwMF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKwlpbnQgcmV0OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisJcHJpbnRrKCJjb21lZGklZDogcnRpODAwOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFJUSTgwMF9TSVpFLCAicnRpODAwIikpIHsKKwkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRrKCJmaW5nZXJwcmludD0leCwleCwleCwleCwleCAiLAorCQlpbmIoZGV2LT5pb2Jhc2UgKyAwKSwKKwkJaW5iKGRldi0+aW9iYXNlICsgMSksCisJCWluYihkZXYtPmlvYmFzZSArIDIpLAorCQlpbmIoZGV2LT5pb2Jhc2UgKyAzKSwgaW5iKGRldi0+aW9iYXNlICsgNCkpOworI2VuZGlmCisKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUlRJODAwX0NTUik7CisJaW5iKGRldi0+aW9iYXNlICsgUlRJODAwX0FEQ0hJKTsKKwlvdXRiKDAsIGRldi0+aW9iYXNlICsgUlRJODAwX0NMUkZMQUdTKTsKKworCWlycSA9IGl0LT5vcHRpb25zWzFdOworCWlmIChpcnEpIHsKKwkJcHJpbnRrKCIoIGlycSA9ICV1ICkiLCBpcnEpOworCQlpZiAoKHJldCA9IGNvbWVkaV9yZXF1ZXN0X2lycShpcnEsIHJ0aTgwMF9pbnRlcnJ1cHQsIDAsCisJCQkJCSJydGk4MDAiLCBkZXYpKSA8IDApIHsKKwkJCXByaW50aygiIEZhaWxlZCB0byBhbGxvY2F0ZSBJUlFcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlkZXYtPmlycSA9IGlycTsKKwl9IGVsc2UgeworCQlwcmludGsoIiggbm8gaXJxICkiKTsKKwl9CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOworCisJaWYgKChyZXQgPSBhbGxvY19zdWJkZXZpY2VzKGRldiwgNCkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHJ0aTgwMF9wcml2YXRlKSkpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRldnByaXYtPmFkY19tdXggPSBpdC0+b3B0aW9uc1syXTsKKwlkZXZwcml2LT5hZGNfcmFuZ2UgPSBpdC0+b3B0aW9uc1szXTsKKwlkZXZwcml2LT5hZGNfY29kaW5nID0gaXQtPm9wdGlvbnNbNF07CisJZGV2cHJpdi0+ZGFjMF9yYW5nZSA9IGl0LT5vcHRpb25zWzVdOworCWRldnByaXYtPmRhYzBfY29kaW5nID0gaXQtPm9wdGlvbnNbNl07CisJZGV2cHJpdi0+ZGFjMV9yYW5nZSA9IGl0LT5vcHRpb25zWzddOworCWRldnByaXYtPmRhYzFfY29kaW5nID0gaXQtPm9wdGlvbnNbOF07CisJZGV2cHJpdi0+bXV4Z2Fpbl9iaXRzID0gLTE7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKKwkvKiBhaSBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsKKwlzLT5uX2NoYW4gPSAoZGV2cHJpdi0+YWRjX211eCA/IDE2IDogOCk7CisJcy0+aW5zbl9yZWFkID0gcnRpODAwX2FpX2luc25fcmVhZDsKKwlzLT5tYXhkYXRhID0gMHhmZmY7CisJc3dpdGNoIChkZXZwcml2LT5hZGNfcmFuZ2UpIHsKKwljYXNlIGFkY19iaXBvbGFyMTA6CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3J0aTgwMF9haV8xMF9iaXBvbGFyOworCQlicmVhazsKKwljYXNlIGFkY19iaXBvbGFyNToKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfcnRpODAwX2FpXzVfYmlwb2xhcjsKKwkJYnJlYWs7CisJY2FzZSBhZGNfdW5pcG9sYXIxMDoKKwkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfcnRpODAwX2FpX3VuaXBvbGFyOworCQlicmVhazsKKwl9CisKKwlzKys7CisJaWYgKHRoaXNfYm9hcmQtPmhhc19hbykgeworCQkvKiBhbyBzdWJkZXZpY2UgKG9ubHkgb24gcnRpODE1KSAqLworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gMjsKKwkJcy0+aW5zbl9yZWFkID0gcnRpODAwX2FvX2luc25fcmVhZDsKKwkJcy0+aW5zbl93cml0ZSA9IHJ0aTgwMF9hb19pbnNuX3dyaXRlOworCQlzLT5tYXhkYXRhID0gMHhmZmY7CisJCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3Q7CisJCXN3aXRjaCAoZGV2cHJpdi0+ZGFjMF9yYW5nZSkgeworCQljYXNlIGRhY19iaXBvbGFyMTA6CisJCQlkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3RbMF0gPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJYnJlYWs7CisJCWNhc2UgZGFjX3VuaXBvbGFyMTA6CisJCQlkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3RbMF0gPSAmcmFuZ2VfdW5pcG9sYXIxMDsKKwkJCWJyZWFrOworCQl9CisJCXN3aXRjaCAoZGV2cHJpdi0+ZGFjMV9yYW5nZSkgeworCQljYXNlIGRhY19iaXBvbGFyMTA6CisJCQlkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3RbMV0gPSAmcmFuZ2VfYmlwb2xhcjEwOworCQkJYnJlYWs7CisJCWNhc2UgZGFjX3VuaXBvbGFyMTA6CisJCQlkZXZwcml2LT5hb19yYW5nZV90eXBlX2xpc3RbMV0gPSAmcmFuZ2VfdW5pcG9sYXIxMDsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlzKys7CisJLyogZGkgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfREk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFOworCXMtPm5fY2hhbiA9IDg7CisJcy0+aW5zbl9iaXRzID0gcnRpODAwX2RpX2luc25fYml0czsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCisJcysrOworCS8qIGRvICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fYml0cyA9IHJ0aTgwMF9kb19pbnNuX2JpdHM7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKKworLyogZG9uJ3QgeWV0IGtub3cgaG93IHRvIGRlYWwgd2l0aCBjb3VudGVyL3RpbWVycyAqLworI2lmIDAKKwlzKys7CisJLyogZG8gKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfVElNRVI7CisjZW5kaWYKKworCXByaW50aygiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0aTgwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJcHJpbnRrKCJjb21lZGklZDogcnRpODAwOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlKQorCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUlRJODAwX1NJWkUpOworCisJaWYgKGRldi0+aXJxKQorCQljb21lZGlfZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzJjMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMi5jCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICAgY29tZWRpL2RyaXZlcnMvcnRpODAyLmMKKyAgIEhhcmR3YXJlIGRyaXZlciBmb3IgQW5hbG9nIERldmljZXMgUlRJLTgwMiBib2FyZAorCisgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgQW5kZXJzIEJsb21kZWxsIDxhbmRlcnMuYmxvbWRlbGxAY29udHJvbC5sdGguc2U+CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAqLworLyoKK0RyaXZlcjogcnRpODAyCitEZXNjcmlwdGlvbjogQW5hbG9nIERldmljZXMgUlRJLTgwMgorQXV0aG9yOiBBbmRlcnMgQmxvbWRlbGwgPGFuZGVycy5ibG9tZGVsbEBjb250cm9sLmx0aC5zZT4KK0RldmljZXM6IFtBbmFsb2cgRGV2aWNlc10gUlRJLTgwMiAocnRpODAyKQorU3RhdHVzOiB3b3JrcworCitDb25maWd1cmF0aW9uIE9wdGlvbnM6CisgICAgWzBdIC0gaS9vIGJhc2UKKyAgICBbMV0gLSB1bnVzZWQKKyAgICBbMl0gLSBkYWMjMCAgMD10d28ncyBjb21wLCAxPXN0cmFpZ2h0CisgICAgWzNdIC0gZGFjIzAgIDA9Ymlwb2xhciwgMT11bmlwb2xhcgorICAgIFs0XSAtIGRhYyMxIC4uLgorICAgIC4uLgorICAgIFsxN10gLSBkYWMjNyAuLi4KKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjZGVmaW5lIFJUSTgwMl9TSVpFIDQKKworI2RlZmluZSBSVEk4MDJfU0VMRUNUIDAKKyNkZWZpbmUgUlRJODAyX0RBVEFMT1cgMQorI2RlZmluZSBSVEk4MDJfREFUQUhJR0ggMgorCitzdGF0aWMgaW50IHJ0aTgwMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpOworc3RhdGljIGludCBydGk4MDJfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfcnRpODAyID0geworICAgICAgZHJpdmVyX25hbWU6InJ0aTgwMiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6cnRpODAyX2F0dGFjaCwKKyAgICAgIGRldGFjaDpydGk4MDJfZGV0YWNoLAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9ydGk4MDIpOworCitzdHJ1Y3QgcnRpODAyX3ByaXZhdGUgeworCWVudW0geworCQlkYWNfMmNvbXAsIGRhY19zdHJhaWdodAorCX0gZGFjX2NvZGluZ1s4XTsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcmFuZ2VfdHlwZV9saXN0WzhdOworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1s4XTsKK307CisKKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBydGk4MDJfcHJpdmF0ZSAqKWRldi0+cHJpdmF0ZSkKKworc3RhdGljIGludCBydGk4MDJfYW9faW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspCisJCWRhdGFbaV0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBydGk4MDJfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGksIGQ7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwkJZCA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKwkJaWYgKGRldnByaXYtPmRhY19jb2RpbmdbY2hhbl0gPT0gZGFjXzJjb21wKQorCQkJZCBePSAweDgwMDsKKwkJb3V0YihjaGFuLCBkZXYtPmlvYmFzZSArIFJUSTgwMl9TRUxFQ1QpOworCQlvdXRiKGQgJiAweGZmLCBkZXYtPmlvYmFzZSArIFJUSTgwMl9EQVRBTE9XKTsKKwkJb3V0YihkID4+IDgsIGRldi0+aW9iYXNlICsgUlRJODAyX0RBVEFISUdIKTsKKwl9CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgcnRpODAyX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGlvYmFzZTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCXByaW50aygiY29tZWRpJWQ6IHJ0aTgwMjogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBSVEk4MDJfU0laRSwgInJ0aTgwMiIpKSB7CisJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlkZXYtPmJvYXJkX25hbWUgPSAicnRpODAyIjsKKworCWlmIChhbGxvY19zdWJkZXZpY2VzKGRldiwgMSkgPCAwCisJCXx8IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHJ0aTgwMl9wcml2YXRlKSkpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcyA9IGRldi0+c3ViZGV2aWNlczsKKwkvKiBhbyBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm1heGRhdGEgPSAweGZmZjsKKwlzLT5uX2NoYW4gPSA4OworCXMtPmluc25fcmVhZCA9IHJ0aTgwMl9hb19pbnNuX3JlYWQ7CisJcy0+aW5zbl93cml0ZSA9IHJ0aTgwMl9hb19pbnNuX3dyaXRlOworCXMtPnJhbmdlX3RhYmxlX2xpc3QgPSBkZXZwcml2LT5yYW5nZV90eXBlX2xpc3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWRldnByaXYtPmRhY19jb2RpbmdbaV0gPSAoaXQtPm9wdGlvbnNbMyArIDIgKiBpXSkKKwkJCT8gKGRhY19zdHJhaWdodCkKKwkJCTogKGRhY18yY29tcCk7CisJCWRldnByaXYtPnJhbmdlX3R5cGVfbGlzdFtpXSA9IChpdC0+b3B0aW9uc1syICsgMiAqIGldKQorCQkJPyAmcmFuZ2VfdW5pcG9sYXIxMCA6ICZyYW5nZV9iaXBvbGFyMTA7CisJfQorCisJcHJpbnRrKCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRpODAyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBydGk4MDI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlpZiAoZGV2LT5pb2Jhc2UpCisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBSVEk4MDJfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNTI2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YjZmNzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczUyNi5jCkBAIC0wLDAgKzEsOTc3IEBACisvKgorICAgIGNvbWVkaS9kcml2ZXJzL3M1MjYuYworICAgIFNlbnNvcmF5IHM1MjYgQ29tZWRpIGRyaXZlcgorCisgICAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZQorICAgIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworLyoKK0RyaXZlcjogczUyNgorRGVzY3JpcHRpb246IFNlbnNvcmF5IDUyNiBkcml2ZXIKK0RldmljZXM6IFtTZW5zb3JheV0gNTI2IChzNTI2KQorQXV0aG9yOiBSaWNoaWUKKwlFdmVyZXR0IFdhbmcgPGV2ZXJldHQud2FuZ0BldmVydGVxLmNvbT4KK1VwZGF0ZWQ6IFRodSwgMTQgU2VwLiAyMDA2CitTdGF0dXM6IGV4cGVyaW1lbnRhbAorCitFbmNvZGVyIHdvcmtzCitBbmFsb2cgaW5wdXQgd29ya3MKK0FuYWxvZyBvdXRwdXQgd29ya3MKK1BXTSBvdXRwdXQgd29ya3MKK0NvbW1hbmRzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4KKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorCitjb21lZGlfY29uZmlnIC9kZXYvY29tZWRpMCBzNTI2IDB4MkMwLDB4MworCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNkZWZpbmUgUzUyNl9TSVpFIDY0CisKKyNkZWZpbmUgUzUyNl9TVEFSVF9BSV9DT05WCTAKKyNkZWZpbmUgUzUyNl9BSV9SRUFECQkwCisKKy8qIFBvcnRzICovCisjZGVmaW5lIFM1MjZfSU9TSVpFIDB4NDAKKyNkZWZpbmUgUzUyNl9OVU1fUE9SVFMgMjcKKworLyogcmVnaXN0ZXJzICovCisjZGVmaW5lIFJFR19UQ1IgMHgwMAorI2RlZmluZSBSRUdfV0RDIDB4MDIKKyNkZWZpbmUgUkVHX0RBQyAweDA0CisjZGVmaW5lIFJFR19BREMgMHgwNgorI2RlZmluZSBSRUdfQUREIDB4MDgKKyNkZWZpbmUgUkVHX0RJTyAweDBBCisjZGVmaW5lIFJFR19JRVIgMHgwQworI2RlZmluZSBSRUdfSVNSIDB4MEUKKyNkZWZpbmUgUkVHX01TQyAweDEwCisjZGVmaW5lIFJFR19DMEwgMHgxMgorI2RlZmluZSBSRUdfQzBIIDB4MTQKKyNkZWZpbmUgUkVHX0MwTSAweDE2CisjZGVmaW5lIFJFR19DMEMgMHgxOAorI2RlZmluZSBSRUdfQzFMIDB4MUEKKyNkZWZpbmUgUkVHX0MxSCAweDFDCisjZGVmaW5lIFJFR19DMU0gMHgxRQorI2RlZmluZSBSRUdfQzFDIDB4MjAKKyNkZWZpbmUgUkVHX0MyTCAweDIyCisjZGVmaW5lIFJFR19DMkggMHgyNAorI2RlZmluZSBSRUdfQzJNIDB4MjYKKyNkZWZpbmUgUkVHX0MyQyAweDI4CisjZGVmaW5lIFJFR19DM0wgMHgyQQorI2RlZmluZSBSRUdfQzNIIDB4MkMKKyNkZWZpbmUgUkVHX0MzTSAweDJFCisjZGVmaW5lIFJFR19DM0MgMHgzMAorI2RlZmluZSBSRUdfRUVEIDB4MzIKKyNkZWZpbmUgUkVHX0VFQyAweDM0CisKK3N0YXRpYyBjb25zdCBpbnQgczUyNl9wb3J0c1tdID0geworCVJFR19UQ1IsCisJUkVHX1dEQywKKwlSRUdfREFDLAorCVJFR19BREMsCisJUkVHX0FERCwKKwlSRUdfRElPLAorCVJFR19JRVIsCisJUkVHX0lTUiwKKwlSRUdfTVNDLAorCVJFR19DMEwsCisJUkVHX0MwSCwKKwlSRUdfQzBNLAorCVJFR19DMEMsCisJUkVHX0MxTCwKKwlSRUdfQzFILAorCVJFR19DMU0sCisJUkVHX0MxQywKKwlSRUdfQzJMLAorCVJFR19DMkgsCisJUkVHX0MyTSwKKwlSRUdfQzJDLAorCVJFR19DM0wsCisJUkVHX0MzSCwKKwlSRUdfQzNNLAorCVJFR19DM0MsCisJUkVHX0VFRCwKKwlSRUdfRUVDCit9OworCitzdHJ1Y3QgY291bnRlcl9tb2RlX3JlZ2lzdGVyX3QgeworCXVuc2lnbmVkIHNob3J0IGNvdXRTb3VyY2U6MTsKKwl1bnNpZ25lZCBzaG9ydCBjb3V0UG9sYXJpdHk6MTsKKwl1bnNpZ25lZCBzaG9ydCBhdXRvTG9hZFJlc2V0UmNhcDozOworCXVuc2lnbmVkIHNob3J0IGh3Q3RFbmFibGVTb3VyY2U6MjsKKwl1bnNpZ25lZCBzaG9ydCBjdEVuYWJsZUN0cmw6MjsKKwl1bnNpZ25lZCBzaG9ydCBjbG9ja1NvdXJjZToyOworCXVuc2lnbmVkIHNob3J0IGNvdW50RGlyOjE7CisJdW5zaWduZWQgc2hvcnQgY291bnREaXJDdHJsOjE7CisJdW5zaWduZWQgc2hvcnQgb3V0cHV0UmVnTGF0Y2hDdHJsOjE7CisJdW5zaWduZWQgc2hvcnQgcHJlbG9hZFJlZ1NlbDoxOworCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkOjE7Cit9OworCit1bmlvbiB7CisJc3RydWN0IGNvdW50ZXJfbW9kZV9yZWdpc3Rlcl90IHJlZzsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKK30gY21SZWc7CisKKyNkZWZpbmUgTUFYX0dQQ1RfQ09ORklHX0RBVEEgNgorCisvKiBEaWZmZXJlbnQgQXBwbGljYXRpb24gQ2xhc3NlcyBmb3IgR1BDVCBTdWJkZXZpY2VzICovCisvKiBUaGUgbGlzdCBpcyBub3QgZXhoYXVzdGl2ZSBhbmQgbmVlZHMgZGlzY3Vzc2lvbiEgKi8KK2VudW0gUzUyNl9HUENUX0FQUF9DTEFTUyB7CisJQ291bnRpbmdBbmRUaW1lTWVhc3VyZW1lbnQsCisJU2luZ2xlUHVsc2VHZW5lcmF0aW9uLAorCVB1bHNlVHJhaW5HZW5lcmF0aW9uLAorCVBvc2l0aW9uTWVhc3VyZW1lbnQsCisJTWlzY2VsbGFuZW91cworfTsKKworLyogQ29uZmlnIHN0cnVjdCBmb3IgZGlmZmVyZW50IEdQQ1Qgc3ViZGV2aWNlIEFwcGxpY2F0aW9uIENsYXNzZXMgYW5kCisgICB0aGVpciBvcHRpb25zCisqLworc3RydWN0IHM1MjZHUENUQ29uZmlnIHsKKwllbnVtIFM1MjZfR1BDVF9BUFBfQ0xBU1MgYXBwOworCWludCBkYXRhW01BWF9HUENUX0NPTkZJR19EQVRBXTsKK307CisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHR3byBpbWFnaW5hcnkgYm9hcmRzLiAgRGVzY3JpYmluZyB0aGUKKyAqIGJvYXJkcyBpbiB0aGlzIHdheSBpcyBvcHRpb25hbCwgYW5kIGNvbXBsZXRlbHkgZHJpdmVyLWRlcGVuZGVudC4KKyAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgorICovCitzdHJ1Y3QgczUyNl9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZ3BjdF9jaGFuczsKKwlpbnQgZ3BjdF9iaXRzOworCWludCBhZF9jaGFuczsKKwlpbnQgYWRfYml0czsKKwlpbnQgZGFfY2hhbnM7CisJaW50IGRhX2JpdHM7CisJaW50IGhhdmVfZGlvOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzNTI2X2JvYXJkIHM1MjZfYm9hcmRzW10gPSB7CisJeworCSAgICAgIG5hbWU6CSJzNTI2IiwKKwkgICAgICBncGN0X2NoYW5zOjQsCisJICAgICAgZ3BjdF9iaXRzOjI0LAorCSAgICAgIGFkX2NoYW5zOjgsCisJICAgICAgYWRfYml0czoJMTYsCisJICAgICAgZGFfY2hhbnM6NCwKKwkgICAgICBkYV9iaXRzOgkxNiwKKwkgICAgICBoYXZlX2RpbzoxLAorCQl9Cit9OworCisjZGVmaW5lIEFERFJfUkVHKHJlZykgKGRldi0+aW9iYXNlICsgKHJlZykpCisjZGVmaW5lIEFERFJfQ0hBTl9SRUcocmVnLCBjaGFuKSAoZGV2LT5pb2Jhc2UgKyAocmVnKSArIChjaGFuKSAqIDgpCisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHM1MjZfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IHM1MjZfcHJpdmF0ZSB7CisKKwlpbnQgZGF0YTsKKworCS8qIHdvdWxkIGJlIHVzZWZ1bCBmb3IgYSBQQ0kgZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisKKwkvKiBVc2VkIGZvciBBTyByZWFkYmFjayAqLworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKKworCXN0cnVjdCBzNTI2R1BDVENvbmZpZyBzNTI2X2dwY3RfY29uZmlnWzRdOworCXVuc2lnbmVkIHNob3J0IHM1MjZfYWlfY29uZmlnOworfTsKKworLyoKKyAqIG1vc3QgZHJpdmVycyBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNybyB0byBtYWtlIGl0IGVhc3kgdG8KKyAqIGFjY2VzcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKi8KKyNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBzNTI2X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qCisgKiBUaGUgc3RydWN0IGNvbWVkaV9kcml2ZXIgc3RydWN0dXJlIHRlbGxzIHRoZSBDb21lZGkgY29yZSBtb2R1bGUKKyAqIHdoaWNoIGZ1bmN0aW9ucyB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkKKyAqIHRoZSBib2FyZCwgYW5kIGFsc28gYWJvdXQgdGhlIGtlcm5lbCBtb2R1bGUgdGhhdCBjb250YWlucworICogdGhlIGRldmljZSBjb2RlLgorICovCitzdGF0aWMgaW50IHM1MjZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgczUyNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl9zNTI2ID0geworICAgICAgZHJpdmVyX25hbWU6InM1MjYiLAorICAgICAgbW9kdWxlOlRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoOnM1MjZfYXR0YWNoLAorICAgICAgZGV0YWNoOnM1MjZfZGV0YWNoLAorLyogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGlmIHlvdSBhcmUKKyAqIHdyaXRpbmcgYSBkcml2ZXIgZm9yIGEgSVNBIFBuUCBvciBQQ0kgY2FyZCAqLworCS8qIE1vc3QgZHJpdmVycyB3aWxsIHN1cHBvcnQgbXVsdGlwbGUgdHlwZXMgb2YgYm9hcmRzIGJ5CisJICogaGF2aW5nIGFuIGFycmF5IG9mIGJvYXJkIHN0cnVjdHVyZXMuICBUaGVzZSB3ZXJlIGRlZmluZWQKKwkgKiBpbiBzNTI2X2JvYXJkc1tdIGFib3ZlLiAgTm90ZSB0aGF0IHRoZSBlbGVtZW50ICduYW1lJworCSAqIHdhcyBmaXJzdCBpbiB0aGUgc3RydWN0dXJlIC0tIENvbWVkaSB1c2VzIHRoaXMgZmFjdCB0bworCSAqIGV4dHJhY3QgdGhlIG5hbWUgb2YgdGhlIGJvYXJkIHdpdGhvdXQga25vd2luZyBhbnkgZGV0YWlscworCSAqIGFib3V0IHRoZSBzdHJ1Y3R1cmUgZXhjZXB0IGZvciBpdHMgbGVuZ3RoLgorCSAqIFdoZW4gYSBkZXZpY2UgaXMgYXR0YWNoZWQgKGJ5IGNvbWVkaV9jb25maWcpLCB0aGUgbmFtZQorCSAqIG9mIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdG8gQ29tZWRpLCBhbmQgQ29tZWRpIHRyaWVzIHRvCisJICogbWF0Y2ggaXQgYnkgZ29pbmcgdGhyb3VnaCB0aGUgbGlzdCBvZiBib2FyZCBuYW1lcy4gIElmCisJICogdGhlcmUgaXMgYSBtYXRjaCwgdGhlIGFkZHJlc3Mgb2YgdGhlIHBvaW50ZXIgaXMgcHV0CisJICogaW50byBkZXYtPmJvYXJkX3B0ciBhbmQgZHJpdmVyLT5hdHRhY2goKSBpcyBjYWxsZWQuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlc2UgYXJlIG5vdCBuZWNlc3NhcnkgaWYgeW91IGNhbiBkZXRlcm1pbmUKKwkgKiB0aGUgdHlwZSBvZiBib2FyZCBpbiBzb2Z0d2FyZS4gIElTQSBQblAsIFBDSSwgYW5kIFBDTUNJQQorCSAqIGRldmljZXMgYXJlIHN1Y2ggYm9hcmRzLgorCSAqLworICAgICAgYm9hcmRfbmFtZTomczUyNl9ib2FyZHNbMF0ubmFtZSwKKyAgICAgIG9mZnNldDpzaXplb2Yoc3RydWN0IHM1MjZfYm9hcmQpLAorICAgICAgbnVtX25hbWVzOnNpemVvZihzNTI2X2JvYXJkcykgLyBzaXplb2Yoc3RydWN0IHM1MjZfYm9hcmQpLAorfTsKKworc3RhdGljIGludCBzNTI2X2dwY3Rfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgczUyNl9ncGN0X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHM1MjZfZ3BjdF93aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBzNTI2X2FpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHM1MjZfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgczUyNl9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBzNTI2X2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHM1MjZfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBzNTI2X2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCisvKgorICogQXR0YWNoIGlzIGNhbGxlZCBieSB0aGUgQ29tZWRpIGNvcmUgdG8gY29uZmlndXJlIHRoZSBkcml2ZXIKKyAqIGZvciBhIHBhcnRpY3VsYXIgYm9hcmQuICBJZiB5b3Ugc3BlY2lmaWVkIGEgYm9hcmRfbmFtZSBhcnJheQorICogaW4gdGhlIGRyaXZlciBzdHJ1Y3R1cmUsIGRldi0+Ym9hcmRfcHRyIGNvbnRhaW5zIHRoYXQKKyAqIGFkZHJlc3MuCisgKi8KK3N0YXRpYyBpbnQgczUyNl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGlvYmFzZTsKKwlpbnQgaSwgbjsKKy8vICAgICAgc2hvcnQgdmFsdWU7CisvLyAgICAgIGludCBzdWJkZXZfY2hhbm5lbCA9IDA7CisKKwlwcmludGsoImNvbWVkaSVkOiBzNTI2OiAiLCBkZXYtPm1pbm9yKTsKKworCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOworCWlmICghaW9iYXNlIHx8ICFyZXF1ZXN0X3JlZ2lvbihpb2Jhc2UsIFM1MjZfSU9TSVpFLCB0aGlzYm9hcmQtPm5hbWUpKSB7CisJCWNvbWVkaV9lcnJvcihkZXYsICJJL08gcG9ydCBjb25mbGljdCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CisKKwlwcmludGsoImlvYmFzZT0weCVseFxuIiwgZGV2LT5pb2Jhc2UpOworCisJLyoqKiBtYWtlIGl0IGEgbGl0dGxlIHF1aWV0ZXIsIGV4dywgOC8yOS8wNgorCWZvciAoaSA9IDA7IGkgPCBTNTI2X05VTV9QT1JUUzsgaSsrKSB7CisJCXByaW50aygiMHglMDJ4OiAweCUwNHhcbiIsIEFERFJfUkVHKHM1MjZfcG9ydHNbaV0pLCBpbncoQUREUl9SRUcoczUyNl9wb3J0c1tpXSkpKTsKKwl9CisJKioqLworCisvKgorICogSW5pdGlhbGl6ZSBkZXYtPmJvYXJkX25hbWUuICBOb3RlIHRoYXQgd2UgY2FuIHVzZSB0aGUgInRoaXNib2FyZCIKKyAqIG1hY3JvIG5vdywgc2luY2Ugd2UganVzdCBpbml0aWFsaXplZCBpdCBpbiB0aGUgbGFzdCBsaW5lLgorICovCisJZGV2LT5ib2FyZF9wdHIgPSAmczUyNl9ib2FyZHNbMF07CisKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKy8qCisgKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gIGFsbG9jX3ByaXZhdGUoKSBpcyBhCisgKiBjb252ZW5pZW50IG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguCisgKi8KKwlpZiAoYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgczUyNl9wcml2YXRlKSkgPCAwKQorCQlyZXR1cm4gLUVOT01FTTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBzdWJkZXZpY2Ugc3RydWN0dXJlcy4gIGFsbG9jX3N1YmRldmljZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWRldi0+bl9zdWJkZXZpY2VzID0gNDsKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIGRldi0+bl9zdWJkZXZpY2VzKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogR0VORVJBTC1QVVJQT1NFIENPVU5URVIvVElNRSAoR1BDVCkgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfV1JJVEFCTEUgfCBTREZfTFNBTVBMOworCS8qIEtHOiBXaGF0IGRvZXMgU0RGX0xTQU1QTCAoc2VlIG11bHRpcTMuYykgbWVhbj8gKi8KKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmdwY3RfY2hhbnM7CisJcy0+bWF4ZGF0YSA9IDB4MDBmZmZmZmY7CS8qIDI0IGJpdCBjb3VudGVyICovCisJcy0+aW5zbl9yZWFkID0gczUyNl9ncGN0X3JpbnNuOworCXMtPmluc25fY29uZmlnID0gczUyNl9ncGN0X2luc25fY29uZmlnOworCXMtPmluc25fd3JpdGUgPSBzNTI2X2dwY3Rfd2luc247CisKKwkvKiBDb21tYW5kIGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0LCBob3dldmVyIHRoZXkgYXJlIG5lY2Vzc2FyeSB0bworCSAgIGFsbG9jYXRlIHRoZSBuZWNlc3NhcnkgbWVtb3J5IGZvciB0aGUgY29tZWRpX2FzeW5jIHN0cnVjdCAodXNlZAorCSAgIHRvIHRyaWdnZXIgdGhlIEdQQ1QgaW4gY2FzZSBvZiBwdWxzZWdlbmVyYXRvciBmdW5jdGlvbiAqLworCS8vcy0+ZG9fY21kID0gczUyNl9ncGN0X2NtZDsKKwkvL3MtPmRvX2NtZHRlc3QgPSBzNTI2X2dwY3RfY21kdGVzdDsKKwkvL3MtPmNhbmNlbCA9IHM1MjZfZ3BjdF9jYW5jZWw7CisKKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKKwkvL2Rldi0+cmVhZF9zdWJkZXY9czsKKwkvKiBhbmFsb2cgaW5wdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCS8qIHdlIHN1cHBvcnQgZGlmZmVyZW50aWFsICovCisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0RJRkY7CisJLyogY2hhbm5lbHMgMCB0byA3IGFyZSB0aGUgcmVndWxhciBkaWZmZXJlbnRpYWwgaW5wdXRzICovCisJLyogY2hhbm5lbCA4IGlzICJyZWZlcmVuY2UgMCIgKCsxMFYpLCBjaGFubmVsIDkgaXMgInJlZmVyZW5jZSAxIiAoMFYpICovCisJcy0+bl9jaGFuID0gMTA7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisJcy0+bGVuX2NoYW5saXN0ID0gMTY7CS8qIFRoaXMgaXMgdGhlIG1heGltdW0gY2hhbmxpc3QgbGVuZ3RoIHRoYXQKKwkJCQkgICB0aGUgYm9hcmQgY2FuIGhhbmRsZSAqLworCXMtPmluc25fcmVhZCA9IHM1MjZfYWlfcmluc247CisJcy0+aW5zbl9jb25maWcgPSBzNTI2X2FpX2luc25fY29uZmlnOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7CisJLyogYW5hbG9nIG91dHB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRBQkxFOworCXMtPm5fY2hhbiA9IDQ7CisJcy0+bWF4ZGF0YSA9IDB4ZmZmZjsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisJcy0+aW5zbl93cml0ZSA9IHM1MjZfYW9fd2luc247CisJcy0+aW5zbl9yZWFkID0gczUyNl9hb19yaW5zbjsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAzOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCWlmICh0aGlzYm9hcmQtPmhhdmVfZGlvKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gMjsKKwkJcy0+bWF4ZGF0YSA9IDE7CisJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2RpZ2l0YWw7CisJCXMtPmluc25fYml0cyA9IHM1MjZfZGlvX2luc25fYml0czsKKwkJcy0+aW5zbl9jb25maWcgPSBzNTI2X2Rpb19pbnNuX2NvbmZpZzsKKwl9IGVsc2UgeworCQlzLT50eXBlID0gQ09NRURJX1NVQkRfVU5VU0VEOworCX0KKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJcmV0dXJuIDE7CisKKyNpZiAwCisJLy8gRXhhbXBsZSBvZiBDb3VudGVyIEFwcGxpY2F0aW9uCisJLy9PbmUtc2hvdCAoc29mdHdhcmUgdHJpZ2dlcikKKwljbVJlZy5yZWcuY291dFNvdXJjZSA9IDA7CS8vIG91dCBSQ0FQCisJY21SZWcucmVnLmNvdXRQb2xhcml0eSA9IDE7CS8vIFBvbGFyaXR5IGludmVydGVkCisJY21SZWcucmVnLmF1dG9Mb2FkUmVzZXRSY2FwID0gMTsJLy8gQXV0byBsb2FkIDA6ZGlzYWJsZWQsIDE6ZW5hYmxlZAorCWNtUmVnLnJlZy5od0N0RW5hYmxlU291cmNlID0gMzsJLy8gTk9UIFJDQVAKKwljbVJlZy5yZWcuY3RFbmFibGVDdHJsID0gMjsJLy8gSGFyZHdhcmUKKwljbVJlZy5yZWcuY2xvY2tTb3VyY2UgPSAyOwkvLyBJbnRlcm5hbAorCWNtUmVnLnJlZy5jb3VudERpciA9IDE7CS8vIERvd24KKwljbVJlZy5yZWcuY291bnREaXJDdHJsID0gMTsJLy8gU29mdHdhcmUKKwljbVJlZy5yZWcub3V0cHV0UmVnTGF0Y2hDdHJsID0gMDsJLy8gbGF0Y2ggb24gcmVhZAorCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLy8gUFIwCisJY21SZWcucmVnLnJlc2VydmVkID0gMDsKKworCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKKworCW91dHcoMHgwMDAxLCBBRERSX0NIQU5fUkVHKFJFR19DMEgsIHN1YmRldl9jaGFubmVsKSk7CisJb3V0dygweDNDNjgsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCW91dHcoMHg4MDAwLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CS8vIFJlc2V0IHRoZSBjb3VudGVyCisJb3V0dygweDQwMDAsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsJLy8gTG9hZCB0aGUgY291bnRlciBmcm9tIFBSMAorCisJb3V0dygweDAwMDgsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsJLy8gUmVzZXQgUkNBUCAoZmlyZXMgb25lLXNob3QpCisKKyNlbHNlCisKKwkvLyBTZXQgQ291bnRlciBNb2RlIFJlZ2lzdGVyCisJY21SZWcucmVnLmNvdXRTb3VyY2UgPSAwOwkvLyBvdXQgUkNBUAorCWNtUmVnLnJlZy5jb3V0UG9sYXJpdHkgPSAwOwkvLyBQb2xhcml0eSBpbnZlcnRlZAorCWNtUmVnLnJlZy5hdXRvTG9hZFJlc2V0UmNhcCA9IDA7CS8vIEF1dG8gbG9hZCBkaXNhYmxlZAorCWNtUmVnLnJlZy5od0N0RW5hYmxlU291cmNlID0gMjsJLy8gTk9UIFJDQVAKKwljbVJlZy5yZWcuY3RFbmFibGVDdHJsID0gMTsJLy8gMTogU29mdHdhcmUsICA+MSA6IEhhcmR3YXJlCisJY21SZWcucmVnLmNsb2NrU291cmNlID0gMzsJLy8geDQKKwljbVJlZy5yZWcuY291bnREaXIgPSAwOwkvLyB1cAorCWNtUmVnLnJlZy5jb3VudERpckN0cmwgPSAwOwkvLyBxdWFkcmF0dXJlCisJY21SZWcucmVnLm91dHB1dFJlZ0xhdGNoQ3RybCA9IDA7CS8vIGxhdGNoIG9uIHJlYWQKKwljbVJlZy5yZWcucHJlbG9hZFJlZ1NlbCA9IDA7CS8vIFBSMAorCWNtUmVnLnJlZy5yZXNlcnZlZCA9IDA7CisKKwluID0gMDsKKwlwcmludGsoIk1vZGUgcmVnPTB4JTA0eCwgMHglMDRseFxuIiwgY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwKKwkJCW4pKTsKKwlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIG4pKTsKKwl1ZGVsYXkoMTAwMCk7CisJcHJpbnRrKCJSZWFkIGJhY2sgbW9kZSByZWc9MHglMDR4XG4iLCBpbncoQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBuKSkpOworCisJLy8gTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgaGlnaCB3b3JkCisvLyAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChzaG9ydCkgKDB4NTUpOworLy8gICAgICAgICAgICAgICAgICAgICAgb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBuKSk7CisKKwkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciBsb3cgd29yZAorLy8gICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoc2hvcnQpKDB4YWE1NSk7CisvLyAgICAgICAgICAgICAgICAgICAgICBvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIG4pKTsKKworCS8vIFdyaXRlIHRoZSBDb3VudGVyIENvbnRyb2wgUmVnaXN0ZXIKKy8vICAgICAgICAgICAgICAgICAgICAgIG91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgMCkpOworCisJLy8gUmVzZXQgdGhlIGNvdW50ZXIgaWYgaXQgaXMgc29mdHdhcmUgcHJlbG9hZAorCWlmIChjbVJlZy5yZWcuYXV0b0xvYWRSZXNldFJjYXAgPT0gMCkgeworCQlvdXR3KDB4ODAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBuKSk7CS8vIFJlc2V0IHRoZSBjb3VudGVyCisJCW91dHcoMHg0MDAwLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIG4pKTsJLy8gTG9hZCB0aGUgY291bnRlciBmcm9tIFBSMAorCX0KKworCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgbikpOworCXVkZWxheSgxMDAwKTsKKwlwcmludGsoIlJlYWQgYmFjayBtb2RlIHJlZz0weCUwNHhcbiIsIGludyhBRERSX0NIQU5fUkVHKFJFR19DME0sIG4pKSk7CisKKyNlbmRpZgorCXByaW50aygiQ3VycmVudCByZWdpc3RyZXM6XG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBTNTI2X05VTV9QT1JUUzsgaSsrKSB7CisJCXByaW50aygiMHglMDJseDogMHglMDR4XG4iLCBBRERSX1JFRyhzNTI2X3BvcnRzW2ldKSwKKwkJCWludyhBRERSX1JFRyhzNTI2X3BvcnRzW2ldKSkpOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIF9kZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiAgSXQgc2hvdWxkIGRlYWxsb2NhdGUKKyAqIHJlc291cmNlcy4KKyAqIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0IHNob3VsZCBiZQorICogY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseQorICogYWxsb2NhdGVkIGJ5IF9hdHRhY2goKS4gIGRldi0+cHJpdmF0ZSBhbmQgZGV2LT5zdWJkZXZpY2VzIGFyZQorICogZGVhbGxvY2F0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29yZS4KKyAqLworc3RhdGljIGludCBzNTI2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKwlwcmludGsoImNvbWVkaSVkOiBzNTI2OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCisJaWYgKGRldi0+aW9iYXNlID4gMCkKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFM1MjZfSU9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1MjZfZ3BjdF9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CQkJLy8gY291bnRzIHRoZSBEYXRhCisJaW50IGNvdW50ZXJfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIHNob3J0IGRhdGFsb3c7CisJdW5zaWduZWQgc2hvcnQgZGF0YWhpZ2g7CisKKwkvLyBDaGVjayBpZiAobiA+IDApCisJaWYgKGluc24tPm4gPD0gMCkgeworCQlwcmludGsoInM1MjY6IElOU05fUkVBRDogbiBzaG91bGQgYmUgPiAwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8vIFJlYWQgdGhlIGxvdyB3b3JkIGZpcnN0CisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQlkYXRhbG93ID0gaW53KEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgY291bnRlcl9jaGFubmVsKSk7CisJCWRhdGFoaWdoID0gaW53KEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgY291bnRlcl9jaGFubmVsKSk7CisJCWRhdGFbaV0gPSAoaW50KShkYXRhaGlnaCAmIDB4MDBGRik7CisJCWRhdGFbaV0gPSAoZGF0YVtpXSA8PCAxNikgfCAoZGF0YWxvdyAmIDB4RkZGRik7CisvLyAgICAgICAgICAgICAgcHJpbnRrKCJzNTI2IEdQQ1RbJWRdOiAleCgweCUwNHgsIDB4JTA0eClcbiIsIGNvdW50ZXJfY2hhbm5lbCwgZGF0YVtpXSwgZGF0YWhpZ2gsIGRhdGFsb3cpOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBzNTI2X2dwY3RfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBzdWJkZXZfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBVbnBhY2sgY2hhbnNwZWMKKwlpbnQgaTsKKwlzaG9ydCB2YWx1ZTsKKworLy8gICAgICAgIHByaW50aygiczUyNjogR1BDVF9JTlNOX0NPTkZJRzogQ29uZmlndXJpbmcgQ2hhbm5lbCAlZFxuIiwgc3ViZGV2X2NoYW5uZWwpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9HUENUX0NPTkZJR19EQVRBOyBpKyspIHsKKwkJZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0uZGF0YVtpXSA9CisJCQlpbnNuLT5kYXRhW2ldOworLy8gICAgICAgICAgICAgIHByaW50aygiZGF0YVslZF09JXhcbiIsIGksIGluc24tPmRhdGFbaV0pOworCX0KKworCS8vIENoZWNrIHdoYXQgdHlwZSBvZiBDb3VudGVyIHRoZSB1c2VyIHJlcXVlc3RlZCwgZGF0YVswXSBjb250YWlucworCS8vIHRoZSBBcHBsaWNhdGlvbiB0eXBlCisJc3dpdGNoIChpbnNuLT5kYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19HUENUX1FVQURSQVRVUkVfRU5DT0RFUjoKKwkJLyoKKwkJICAgZGF0YVswXTogQXBwbGljYXRpb24gVHlwZQorCQkgICBkYXRhWzFdOiBDb3VudGVyIE1vZGUgUmVnaXN0ZXIgVmFsdWUKKwkJICAgZGF0YVsyXTogUHJlLWxvYWQgUmVnaXN0ZXIgVmFsdWUKKwkJICAgZGF0YVszXTogQ29udGVyIENvbnRyb2wgUmVnaXN0ZXIKKwkJICovCisJCXByaW50aygiczUyNjogR1BDVF9JTlNOX0NPTkZJRzogQ29uZmlndXJpbmcgRW5jb2RlclxuIik7CisJCWRldnByaXYtPnM1MjZfZ3BjdF9jb25maWdbc3ViZGV2X2NoYW5uZWxdLmFwcCA9CisJCQlQb3NpdGlvbk1lYXN1cmVtZW50OworCisvKgorCQkJLy8gRXhhbXBsZSBvZiBDb3VudGVyIEFwcGxpY2F0aW9uCisJCQkvL09uZS1zaG90IChzb2Z0d2FyZSB0cmlnZ2VyKQorCQkJY21SZWcucmVnLmNvdXRTb3VyY2UJCT0gMDsgLy8gb3V0IFJDQVAKKwkJCWNtUmVnLnJlZy5jb3V0UG9sYXJpdHkJCT0gMTsgLy8gUG9sYXJpdHkgaW52ZXJ0ZWQKKwkJCWNtUmVnLnJlZy5hdXRvTG9hZFJlc2V0UmNhcAk9IDA7IC8vIEF1dG8gbG9hZCBkaXNhYmxlZAorCQkJY21SZWcucmVnLmh3Q3RFbmFibGVTb3VyY2UJPSAzOyAvLyBOT1QgUkNBUAorCQkJY21SZWcucmVnLmN0RW5hYmxlQ3RybAkJPSAyOyAvLyBIYXJkd2FyZQorCQkJY21SZWcucmVnLmNsb2NrU291cmNlCQk9IDI7IC8vIEludGVybmFsCisJCQljbVJlZy5yZWcuY291bnREaXIJCT0gMTsgLy8gRG93bgorCQkJY21SZWcucmVnLmNvdW50RGlyQ3RybAkJPSAxOyAvLyBTb2Z0d2FyZQorCQkJY21SZWcucmVnLm91dHB1dFJlZ0xhdGNoQ3RybAk9IDA7IC8vIGxhdGNoIG9uIHJlYWQKKwkJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsCQk9IDA7IC8vIFBSMAorCQkJY21SZWcucmVnLnJlc2VydmVkCQk9IDA7CisKKwkJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkJb3V0dygweDAwMDEsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKKwkJCW91dHcoMHgzQzY4LCBBRERSX0NIQU5fUkVHKFJFR19DMEwsIHN1YmRldl9jaGFubmVsKSk7CisKKwkJCW91dHcoMHg4MDAwLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CS8vIFJlc2V0IHRoZSBjb3VudGVyCisJCQlvdXR3KDB4NDAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOwkvLyBMb2FkIHRoZSBjb3VudGVyIGZyb20gUFIwCisKKwkJCW91dHcoMHgwMDA4LCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7ICAvLyBSZXNldCBSQ0FQIChmaXJlcyBvbmUtc2hvdCkKKworKi8KKworI2lmIDEKKwkJLy8gU2V0IENvdW50ZXIgTW9kZSBSZWdpc3RlcgorCQljbVJlZy5yZWcuY291dFNvdXJjZSA9IDA7CS8vIG91dCBSQ0FQCisJCWNtUmVnLnJlZy5jb3V0UG9sYXJpdHkgPSAwOwkvLyBQb2xhcml0eSBpbnZlcnRlZAorCQljbVJlZy5yZWcuYXV0b0xvYWRSZXNldFJjYXAgPSAwOwkvLyBBdXRvIGxvYWQgZGlzYWJsZWQKKwkJY21SZWcucmVnLmh3Q3RFbmFibGVTb3VyY2UgPSAyOwkvLyBOT1QgUkNBUAorCQljbVJlZy5yZWcuY3RFbmFibGVDdHJsID0gMTsJLy8gMTogU29mdHdhcmUsICA+MSA6IEhhcmR3YXJlCisJCWNtUmVnLnJlZy5jbG9ja1NvdXJjZSA9IDM7CS8vIHg0CisJCWNtUmVnLnJlZy5jb3VudERpciA9IDA7CS8vIHVwCisJCWNtUmVnLnJlZy5jb3VudERpckN0cmwgPSAwOwkvLyBxdWFkcmF0dXJlCisJCWNtUmVnLnJlZy5vdXRwdXRSZWdMYXRjaEN0cmwgPSAwOwkvLyBsYXRjaCBvbiByZWFkCisJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLy8gUFIwCisJCWNtUmVnLnJlZy5yZXNlcnZlZCA9IDA7CisKKwkJLy8gU2V0IENvdW50ZXIgTW9kZSBSZWdpc3RlcgorLy8gICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJzNTI2OiBDb3VudGVyIE1vZGUgcmVnaXN0ZXI9JXhcbiIsIGNtUmVnLnZhbHVlKTsKKwkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIFJlc2V0IHRoZSBjb3VudGVyIGlmIGl0IGlzIHNvZnR3YXJlIHByZWxvYWQKKwkJaWYgKGNtUmVnLnJlZy5hdXRvTG9hZFJlc2V0UmNhcCA9PSAwKSB7CisJCQlvdXR3KDB4ODAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOwkvLyBSZXNldCB0aGUgY291bnRlcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXR3KDB4NDAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOyAgIC8vIExvYWQgdGhlIGNvdW50ZXIgZnJvbSBQUjAKKwkJfQorI2Vsc2UKKwkJY21SZWcucmVnLmNvdW50RGlyQ3RybCA9IDA7CS8vIDAgcXVhZHJhdHVyZSwgMSBzb2Z0d2FyZSBjb250cm9sCisKKwkJLy8gZGF0YVsxXSBjb250YWlucyBHUENUX1gxLCBHUENUX1gyIG9yIEdQQ1RfWDQKKwkJaWYgKGluc24tPmRhdGFbMV0gPT0gR1BDVF9YMikgeworCQkJY21SZWcucmVnLmNsb2NrU291cmNlID0gMTsKKwkJfSBlbHNlIGlmIChpbnNuLT5kYXRhWzFdID09IEdQQ1RfWDQpIHsKKwkJCWNtUmVnLnJlZy5jbG9ja1NvdXJjZSA9IDI7CisJCX0gZWxzZSB7CisJCQljbVJlZy5yZWcuY2xvY2tTb3VyY2UgPSAwOworCQl9CisKKwkJLy8gV2hlbiB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgaW5kZXhwdWxzZToKKwkJaWYgKGluc24tPmRhdGFbMl0gPT0gR1BDVF9JbmRleFBoYXNlTG93TG93KSB7CisJCX0gZWxzZSBpZiAoaW5zbi0+ZGF0YVsyXSA9PSBHUENUX0luZGV4UGhhc2VMb3dIaWdoKSB7CisJCX0gZWxzZSBpZiAoaW5zbi0+ZGF0YVsyXSA9PSBHUENUX0luZGV4UGhhc2VIaWdoTG93KSB7CisJCX0gZWxzZSBpZiAoaW5zbi0+ZGF0YVsyXSA9PSBHUENUX0luZGV4UGhhc2VIaWdoSGlnaCkgeworCQl9CisJCS8vIFRha2UgaW50byBhY2NvdW50IHRoZSBpbmRleCBwdWxzZT8KKwkJaWYgKGluc24tPmRhdGFbM10gPT0gR1BDVF9SRVNFVF9DT1VOVEVSX09OX0lOREVYKQorCQkJY21SZWcucmVnLmF1dG9Mb2FkUmVzZXRSY2FwID0gNDsJLy8gQXV0byBsb2FkIHdpdGggSU5ERVheCisKKwkJLy8gU2V0IENvdW50ZXIgTW9kZSBSZWdpc3RlcgorCQljbVJlZy52YWx1ZSA9IChzaG9ydCkgKGluc24tPmRhdGFbMV0gJiAweEZGRkYpOworCQlvdXR3KGNtUmVnLnZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CisKKwkJLy8gTG9hZCB0aGUgcHJlLWxhb2QgcmVnaXN0ZXIgaGlnaCB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIGxvdyB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVsyXSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBXcml0ZSB0aGUgQ291bnRlciBDb250cm9sIFJlZ2lzdGVyCisJCWlmIChpbnNuLT5kYXRhWzNdICE9IDApIHsKKwkJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CisJCX0KKwkJLy8gUmVzZXQgdGhlIGNvdW50ZXIgaWYgaXQgaXMgc29mdHdhcmUgcHJlbG9hZAorCQlpZiAoY21SZWcucmVnLmF1dG9Mb2FkUmVzZXRSY2FwID09IDApIHsKKwkJCW91dHcoMHg4MDAwLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CS8vIFJlc2V0IHRoZSBjb3VudGVyCisJCQlvdXR3KDB4NDAwMCwgQUREUl9DSEFOX1JFRyhSRUdfQzBDLCBzdWJkZXZfY2hhbm5lbCkpOwkvLyBMb2FkIHRoZSBjb3VudGVyIGZyb20gUFIwCisJCX0KKyNlbmRpZgorCQlicmVhazsKKworCWNhc2UgSU5TTl9DT05GSUdfR1BDVF9TSU5HTEVfUFVMU0VfR0VORVJBVE9SOgorCQkvKgorCQkgICBkYXRhWzBdOiBBcHBsaWNhdGlvbiBUeXBlCisJCSAgIGRhdGFbMV06IENvdW50ZXIgTW9kZSBSZWdpc3RlciBWYWx1ZQorCQkgICBkYXRhWzJdOiBQcmUtbG9hZCBSZWdpc3RlciAwIFZhbHVlCisJCSAgIGRhdGFbM106IFByZS1sb2FkIFJlZ2lzdGVyIDEgVmFsdWUKKwkJICAgZGF0YVs0XTogQ29udGVyIENvbnRyb2wgUmVnaXN0ZXIKKwkJICovCisJCXByaW50aygiczUyNjogR1BDVF9JTlNOX0NPTkZJRzogQ29uZmlndXJpbmcgU1BHXG4iKTsKKwkJZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0uYXBwID0KKwkJCVNpbmdsZVB1bHNlR2VuZXJhdGlvbjsKKworCQkvLyBTZXQgQ291bnRlciBNb2RlIFJlZ2lzdGVyCisJCWNtUmVnLnZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVsxXSAmIDB4RkZGRik7CisJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMDsJLy8gUFIwCisJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGhpZ2ggd29yZAorCQl2YWx1ZSA9IChzaG9ydCkgKChpbnNuLT5kYXRhWzJdID4+IDE2KSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAwIGxvdyB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVsyXSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBTZXQgQ291bnRlciBNb2RlIFJlZ2lzdGVyCisJCWNtUmVnLnZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVsxXSAmIDB4RkZGRik7CisJCWNtUmVnLnJlZy5wcmVsb2FkUmVnU2VsID0gMTsJLy8gUFIxCisJCW91dHcoY21SZWcudmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTSwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGhpZ2ggd29yZAorCQl2YWx1ZSA9IChzaG9ydCkgKChpbnNuLT5kYXRhWzNdID4+IDE2KSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBMb2FkIHRoZSBwcmUtbGFvZCByZWdpc3RlciAxIGxvdyB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKworCQkvLyBXcml0ZSB0aGUgQ291bnRlciBDb250cm9sIFJlZ2lzdGVyCisJCWlmIChpbnNuLT5kYXRhWzNdICE9IDApIHsKKwkJCXZhbHVlID0gKHNob3J0KSAoaW5zbi0+ZGF0YVszXSAmIDB4RkZGRik7CisJCQlvdXR3KHZhbHVlLCBBRERSX0NIQU5fUkVHKFJFR19DMEMsIHN1YmRldl9jaGFubmVsKSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElOU05fQ09ORklHX0dQQ1RfUFVMU0VfVFJBSU5fR0VORVJBVE9SOgorCQkvKgorCQkgICBkYXRhWzBdOiBBcHBsaWNhdGlvbiBUeXBlCisJCSAgIGRhdGFbMV06IENvdW50ZXIgTW9kZSBSZWdpc3RlciBWYWx1ZQorCQkgICBkYXRhWzJdOiBQcmUtbG9hZCBSZWdpc3RlciAwIFZhbHVlCisJCSAgIGRhdGFbM106IFByZS1sb2FkIFJlZ2lzdGVyIDEgVmFsdWUKKwkJICAgZGF0YVs0XTogQ29udGVyIENvbnRyb2wgUmVnaXN0ZXIKKwkJICovCisJCXByaW50aygiczUyNjogR1BDVF9JTlNOX0NPTkZJRzogQ29uZmlndXJpbmcgUFRHXG4iKTsKKwkJZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0uYXBwID0KKwkJCVB1bHNlVHJhaW5HZW5lcmF0aW9uOworCisJCS8vIFNldCBDb3VudGVyIE1vZGUgUmVnaXN0ZXIKKwkJY21SZWcudmFsdWUgPSAoc2hvcnQpIChpbnNuLT5kYXRhWzFdICYgMHhGRkZGKTsKKwkJY21SZWcucmVnLnByZWxvYWRSZWdTZWwgPSAwOwkvLyBQUjAKKwkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDAgaGlnaCB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoKGluc24tPmRhdGFbMl0gPj4gMTYpICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDAgbG93IHdvcmQKKwkJdmFsdWUgPSAoc2hvcnQpIChpbnNuLT5kYXRhWzJdICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIFNldCBDb3VudGVyIE1vZGUgUmVnaXN0ZXIKKwkJY21SZWcudmFsdWUgPSAoc2hvcnQpIChpbnNuLT5kYXRhWzFdICYgMHhGRkZGKTsKKwkJY21SZWcucmVnLnByZWxvYWRSZWdTZWwgPSAxOwkvLyBQUjEKKwkJb3V0dyhjbVJlZy52YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBNLCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDEgaGlnaCB3b3JkCisJCXZhbHVlID0gKHNob3J0KSAoKGluc24tPmRhdGFbM10gPj4gMTYpICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIExvYWQgdGhlIHByZS1sYW9kIHJlZ2lzdGVyIDEgbG93IHdvcmQKKwkJdmFsdWUgPSAoc2hvcnQpIChpbnNuLT5kYXRhWzNdICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOworCisJCS8vIFdyaXRlIHRoZSBDb3VudGVyIENvbnRyb2wgUmVnaXN0ZXIKKwkJaWYgKGluc24tPmRhdGFbM10gIT0gMCkgeworCQkJdmFsdWUgPSAoc2hvcnQpIChpbnNuLT5kYXRhWzNdICYgMHhGRkZGKTsKKwkJCW91dHcodmFsdWUsIEFERFJfQ0hBTl9SRUcoUkVHX0MwQywgc3ViZGV2X2NoYW5uZWwpKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50aygiczUyNjogdW5zdXBwb3J0ZWQgR1BDVF9pbnNuX2NvbmZpZ1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworc3RhdGljIGludCBzNTI2X2dwY3Rfd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBzdWJkZXZfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwkvLyBVbnBhY2sgY2hhbnNwZWMKKwlzaG9ydCB2YWx1ZTsKKworCXByaW50aygiczUyNjogR1BDVF9JTlNOX1dSSVRFIG9uIGNoYW5uZWwgJWRcbiIsIHN1YmRldl9jaGFubmVsKTsKKwljbVJlZy52YWx1ZSA9IGludyhBRERSX0NIQU5fUkVHKFJFR19DME0sIHN1YmRldl9jaGFubmVsKSk7CisJcHJpbnRrKCJzNTI2OiBDb3VudGVyIE1vZGUgUmVnaXN0ZXI6ICV4XG4iLCBjbVJlZy52YWx1ZSk7CisJLy8gQ2hlY2sgd2hhdCBBcHBsaWNhdGlvbiBvZiBDb3VudGVyIHRoaXMgY2hhbm5lbCBpcyBjb25maWd1cmVkIGZvcgorCXN3aXRjaCAoZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0uYXBwKSB7CisJY2FzZSBQb3NpdGlvbk1lYXN1cmVtZW50OgorCQlwcmludGsoIlM1MjY6IElOU05fV1JJVEU6IFBNXG4iKTsKKwkJb3V0dygweEZGRkYgJiAoKCpkYXRhKSA+PiAxNiksIEFERFJfQ0hBTl9SRUcoUkVHX0MwSCwKKwkJCQlzdWJkZXZfY2hhbm5lbCkpOworCQlvdXR3KDB4RkZGRiAmICgqZGF0YSksIEFERFJfQ0hBTl9SRUcoUkVHX0MwTCwgc3ViZGV2X2NoYW5uZWwpKTsKKwkJYnJlYWs7CisKKwljYXNlIFNpbmdsZVB1bHNlR2VuZXJhdGlvbjoKKwkJcHJpbnRrKCJTNTI2OiBJTlNOX1dSSVRFOiBTUEdcbiIpOworCQlvdXR3KDB4RkZGRiAmICgoKmRhdGEpID4+IDE2KSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILAorCQkJCXN1YmRldl9jaGFubmVsKSk7CisJCW91dHcoMHhGRkZGICYgKCpkYXRhKSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOworCQlicmVhazsKKworCWNhc2UgUHVsc2VUcmFpbkdlbmVyYXRpb246CisJCS8qIGRhdGFbMF0gY29udGFpbnMgdGhlIFBVTFNFX1dJRFRICisJCSAgIGRhdGFbMV0gY29udGFpbnMgdGhlIFBVTFNFX1BFUklPRAorCQkgICBAcHJlIFBVTFNFX1BFUklPRCA+IFBVTFNFX1dJRFRIID4gMAorCQkgICBUaGUgYWJvdmUgcGVyaW9kcyBtdXN0IGJlIGV4cHJlc3NlZCBhcyBhIG11bHRpcGxlIG9mIHRoZQorCQkgICBwdWxzZSBmcmVxdWVuY3kgb24gdGhlIHNlbGVjdGVkIHNvdXJjZQorCQkgKi8KKwkJcHJpbnRrKCJTNTI2OiBJTlNOX1dSSVRFOiBQVEdcbiIpOworCQlpZiAoKGluc24tPmRhdGFbMV0gPiBpbnNuLT5kYXRhWzBdKSAmJiAoaW5zbi0+ZGF0YVswXSA+IDApKSB7CisJCQkoZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0pLmRhdGFbMF0gPQorCQkJCWluc24tPmRhdGFbMF07CisJCQkoZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0pLmRhdGFbMV0gPQorCQkJCWluc24tPmRhdGFbMV07CisJCX0gZWxzZSB7CisJCQlwcmludGsoIiVkIFx0ICVkXG4iLCBpbnNuLT5kYXRhWzFdLCBpbnNuLT5kYXRhWzJdKTsKKwkJCXByaW50aygiczUyNjogSU5TTl9XUklURTogUFRHOiBQcm9ibGVtIHdpdGggUHVsc2UgcGFyYW1zXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJdmFsdWUgPSAoc2hvcnQpICgoKmRhdGEgPj4gMTYpICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBILCBzdWJkZXZfY2hhbm5lbCkpOworCQl2YWx1ZSA9IChzaG9ydCkgKCpkYXRhICYgMHhGRkZGKTsKKwkJb3V0dyh2YWx1ZSwgQUREUl9DSEFOX1JFRyhSRUdfQzBMLCBzdWJkZXZfY2hhbm5lbCkpOworCQlicmVhazsKKwlkZWZhdWx0OgkJLy8gSW1wb3NzaWJsZQorCQlwcmludGsoInM1MjY6IElOU05fV1JJVEU6IEZ1bmN0aW9uYWxpdHkgJWQgbm90IGltcGxlbWVudGVkIHlldFxuIiwgZGV2cHJpdi0+czUyNl9ncGN0X2NvbmZpZ1tzdWJkZXZfY2hhbm5lbF0uYXBwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwkvLyByZXR1cm4gdGhlIG51bWJlciBvZiBzYW1wbGVzIHdyaXR0ZW4KKwlyZXR1cm4gaW5zbi0+bjsKK30KKworI2RlZmluZSBJU1JfQURDX0RPTkUgMHg0CitzdGF0aWMgaW50IHM1MjZfYWlfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCByZXN1bHQgPSAtRUlOVkFMOworCisJaWYgKGluc24tPm4gPCAxKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmVzdWx0ID0gaW5zbi0+bjsKKworCS8qIGRhdGFbMF0gOiBjaGFubmVscyB3YXMgc2V0IGluIHJlbGV2YW50IGJpdHMuCisJICAgZGF0YVsxXSA6IGRlbGF5CisJICovCisJLyogQ09NTUVOVDogYWJib3R0aSAyMDA4LTA3LTI0OiBJIGRvbid0IGtub3cgd2h5IHlvdSdkIHdhbnQgdG8KKwkgKiBlbmFibGUgY2hhbm5lbHMgaGVyZS4gIFRoZSBjaGFubmVsIHNob3VsZCBiZSBlbmFibGVkIGluIHRoZQorCSAqIElOU05fUkVBRCBoYW5kbGVyLiAqLworCisJLy8gRW5hYmxlIEFEQyBpbnRlcnJ1cHQKKwlvdXR3KElTUl9BRENfRE9ORSwgQUREUl9SRUcoUkVHX0lFUikpOworLy8gICAgICBwcmludGsoInM1MjY6IEFEQyBjdXJyZW50IHZhbHVlOiAweCUwNHhcbiIsIGludyhBRERSX1JFRyhSRUdfQURDKSkpOworCWRldnByaXYtPnM1MjZfYWlfY29uZmlnID0gKGRhdGFbMF0gJiAweDNGRikgPDwgNTsKKwlpZiAoZGF0YVsxXSA+IDApCisJCWRldnByaXYtPnM1MjZfYWlfY29uZmlnIHw9IDB4ODAwMDsJLy9zZXQgdGhlIGRlbGF5CisKKwlkZXZwcml2LT5zNTI2X2FpX2NvbmZpZyB8PSAweDAwMDE7CS8vIEFEQyBzdGFydCBiaXQuCisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogImluc3RydWN0aW9ucyIgcmVhZC93cml0ZSBkYXRhIGluICJvbmUtc2hvdCIgb3IgInNvZnR3YXJlLXRyaWdnZXJlZCIKKyAqIG1vZGUuCisgKi8KK3N0YXRpYyBpbnQgczUyNl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG4sIGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKwl1bnNpZ25lZCBpbnQgZDsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJLyogU2V0IGNvbmZpZ3VyZWQgZGVsYXksIGVuYWJsZSBjaGFubmVsIGZvciB0aGlzIGNoYW5uZWwgb25seSwKKwkgKiBzZWxlY3QgIkFEQyByZWFkIiBjaGFubmVsLCBzZXQgIkFEQyBzdGFydCIgYml0LiAqLworCXZhbHVlID0gKGRldnByaXYtPnM1MjZfYWlfY29uZmlnICYgMHg4MDAwKSB8CisJCSgoMSA8PCA1KSA8PCBjaGFuKSB8IChjaGFuIDw8IDEpIHwgMHgwMDAxOworCisJLyogY29udmVydCBuIHNhbXBsZXMgKi8KKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCS8qIHRyaWdnZXIgY29udmVyc2lvbiAqLworCQlvdXR3KHZhbHVlLCBBRERSX1JFRyhSRUdfQURDKSk7CisvLyAgICAgICAgICAgICAgcHJpbnRrKCJzNTI2OiBXcm90ZSAweCUwNHggdG8gQURDXG4iLCB2YWx1ZSk7CisvLyAgICAgICAgICAgICAgcHJpbnRrKCJzNTI2OiBBREMgcmVnPTB4JTA0eFxuIiwgaW53KEFERFJfUkVHKFJFR19BREMpKSk7CisKKyNkZWZpbmUgVElNRU9VVCAxMDAKKwkJLyogd2FpdCBmb3IgY29udmVyc2lvbiB0byBlbmQgKi8KKwkJZm9yIChpID0gMDsgaSA8IFRJTUVPVVQ7IGkrKykgeworCQkJc3RhdHVzID0gaW53KEFERFJfUkVHKFJFR19JU1IpKTsKKwkJCWlmIChzdGF0dXMgJiBJU1JfQURDX0RPTkUpIHsKKwkJCQlvdXR3KElTUl9BRENfRE9ORSwgQUREUl9SRUcoUkVHX0lTUikpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpID09IFRJTUVPVVQpIHsKKwkJCS8qIHJ0X3ByaW50aygpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgcHJpbnRrKCkKKwkJCSAqIHdoZW5ldmVyIHRoZSBjb2RlIGNhbiBiZSBjYWxsZWQgZnJvbSByZWFsLXRpbWUuICovCisJCQlydF9wcmludGsoInM1MjY6IEFEQygweCUwNHgpIHRpbWVvdXRcbiIsCisJCQkJaW53KEFERFJfUkVHKFJFR19JU1IpKSk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCisJCS8qIHJlYWQgZGF0YSAqLworCQlkID0gaW53KEFERFJfUkVHKFJFR19BREQpKTsKKy8vICAgICAgICAgICAgICBwcmludGsoIkFJWyVkXT0weCUwNHhcbiIsIG4sICh1bnNpZ25lZCBzaG9ydCkoZCAmIDB4RkZGRikpOworCisJCS8qIG11bmdlIGRhdGEgKi8KKwkJZGF0YVtuXSA9IGQgXiAweDgwMDA7CisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzNTI2X2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXVuc2lnbmVkIHNob3J0IHZhbDsKKworLy8gICAgICBwcmludGsoInM1MjZfYW9fd2luc25cbiIpOworCXZhbCA9IGNoYW4gPDwgMTsKKy8vICAgICAgb3V0dyh2YWwsIGRldi0+aW9iYXNlICsgUkVHX0RBQyk7CisJb3V0dyh2YWwsIEFERFJfUkVHKFJFR19EQUMpKTsKKworCS8qIFdyaXRpbmcgYSBsaXN0IG9mIHZhbHVlcyB0byBhbiBBTyBjaGFubmVsIGlzIHByb2JhYmx5IG5vdAorCSAqIHZlcnkgdXNlZnVsLCBidXQgdGhhdCdzIGhvdyB0aGUgaW50ZXJmYWNlIGlzIGRlZmluZWQuICovCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgeworCQkvKiBhIHR5cGljYWwgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgKi8KKy8vICAgICAgICAgICAgICBvdXR3KGRhdGFbaV0sIGRldi0+aW9iYXNlICsgUkVHX0FERCk7ICAvLyB3cml0ZSB0aGUgZGF0YSB0byBwcmVsb2FkIHJlZ2lzdGVyCisJCW91dHcoZGF0YVtpXSwgQUREUl9SRUcoUkVHX0FERCkpOwkvLyB3cml0ZSB0aGUgZGF0YSB0byBwcmVsb2FkIHJlZ2lzdGVyCisJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKKy8vICAgICAgICAgICAgICBvdXR3KHZhbCArIDEsIGRldi0+aW9iYXNlICsgUkVHX0RBQyk7IC8vIHN0YXJ0cyB0aGUgRC9BIGNvbnZlcnNpb24uCisJCW91dHcodmFsICsgMSwgQUREUl9SRUcoUkVHX0RBQykpOwkvLyBzdGFydHMgdGhlIEQvQSBjb252ZXJzaW9uLgorCX0KKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuICovCisJcmV0dXJuIGk7Cit9CisKKy8qIEFPIHN1YmRldmljZXMgc2hvdWxkIGhhdmUgYSByZWFkIGluc24gYXMgd2VsbCBhcyBhIHdyaXRlIGluc24uCisgKiBVc3VhbGx5IHRoaXMgbWVhbnMgY29weWluZyBhIHZhbHVlIHN0b3JlZCBpbiBkZXZwcml2LiAqLworc3RhdGljIGludCBzNTI2X2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKKwkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOworCisJcmV0dXJuIGk7Cit9CisKKy8qIERJTyBkZXZpY2VzIGFyZSBzbGlnaHRseSBzcGVjaWFsLiAgQWx0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8KKyAqIGltcGxlbWVudCB0aGUgaW5zbl9yZWFkL2luc25fd3JpdGUgaW50ZXJmYWNlLCBpdCBpcyBtdWNoIG1vcmUKKyAqIHVzZWZ1bCB0byBhcHBsaWNhdGlvbnMgaWYgeW91IGltcGxlbWVudCB0aGUgaW5zbl9iaXRzIGludGVyZmFjZS4KKyAqIFRoaXMgYWxsb3dzIHBhY2tlZCByZWFkaW5nL3dyaXRpbmcgb2YgdGhlIERJTyBjaGFubmVscy4gIFRoZQorICogY29tZWRpIGNvcmUgY2FuIGNvbnZlcnQgYmV0d2VlbiBpbnNuX2JpdHMgYW5kIGluc25fcmVhZC93cml0ZSAqLworc3RhdGljIGludCBzNTI2X2Rpb19pbnNuX2JpdHMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWlmIChpbnNuLT5uICE9IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVGhlIGluc24gZGF0YSBpcyBhIG1hc2sgaW4gZGF0YVswXSBhbmQgdGhlIG5ldyBkYXRhCisJICogaW4gZGF0YVsxXSwgZWFjaCBjaGFubmVsIGNvb3Jlc3BvbmRpbmcgdG8gYSBiaXQuICovCisJaWYgKGRhdGFbMF0pIHsKKwkJcy0+c3RhdGUgJj0gfmRhdGFbMF07CisJCXMtPnN0YXRlIHw9IGRhdGFbMF0gJiBkYXRhWzFdOworCQkvKiBXcml0ZSBvdXQgdGhlIG5ldyBkaWdpdGFsIG91dHB1dCBsaW5lcyAqLworCQlvdXR3KHMtPnN0YXRlLCBBRERSX1JFRyhSRUdfRElPKSk7CisJfQorCisJLyogb24gcmV0dXJuLCBkYXRhWzFdIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXRhbAorCSAqIGlucHV0IGFuZCBvdXRwdXQgbGluZXMuICovCisJZGF0YVsxXSA9IGludyhBRERSX1JFRyhSRUdfRElPKSkgJiAweEZGOwkvLyBsb3cgOCBiaXRzIGFyZSB0aGUgZGF0YQorCS8qIG9yIHdlIGNvdWxkIGp1c3QgcmV0dXJuIHRoZSBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBvdXRwdXQgdmFsdWVzIGlmCisJICogaXQgd2FzIGEgcHVyZWx5IGRpZ2l0YWwgb3V0cHV0IHN1YmRldmljZSAqLworCS8vZGF0YVsxXT1zLT5zdGF0ZTsKKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHM1MjZfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCXNob3J0IHZhbHVlOworCisJcHJpbnRrKCJTNTI2IERJTyBpbnNuX2NvbmZpZ1xuIik7CisKKwlpZiAoaW5zbi0+biAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbHVlID0gaW53KEFERFJfUkVHKFJFR19ESU8pKTsKKworCS8qIFRoZSBpbnB1dCBvciBvdXRwdXQgY29uZmlndXJhdGlvbiBvZiBlYWNoIGRpZ2l0YWwgbGluZSBpcworCSAqIGNvbmZpZ3VyZWQgYnkgYSBzcGVjaWFsIGluc25fY29uZmlnIGluc3RydWN0aW9uLiAgY2hhbnNwZWMKKwkgKiBjb250YWlucyB0aGUgY2hhbm5lbCB0byBiZSBjaGFuZ2VkLCBhbmQgZGF0YVswXSBjb250YWlucyB0aGUKKwkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KKworCWlmIChkYXRhWzBdID09IENPTUVESV9PVVRQVVQpIHsKKwkJdmFsdWUgfD0gMSA8PCAoY2hhbiArIDEwKTsJLy8gYml0IDEwLzExIHNldCB0aGUgZ3JvdXAgMS8yJ3MgbW9kZQorCQlzLT5pb19iaXRzIHw9ICgweEYgPDwgY2hhbik7CisJfSBlbHNlIHsKKwkJdmFsdWUgJj0gfigxIDw8IChjaGFuICsgMTApKTsJLy8gMSBpcyBvdXRwdXQsIDAgaXMgaW5wdXQuCisJCXMtPmlvX2JpdHMgJj0gfigweEYgPDwgY2hhbik7CisJfQorCW91dHcodmFsdWUsIEFERFJfUkVHKFJFR19ESU8pKTsKKworCXJldHVybiAxOworfQorCisvKgorICogQSBjb252ZW5pZW50IG1hY3JvIHRoYXQgZGVmaW5lcyBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSgpLAorICogYXMgbmVjZXNzYXJ5LgorICovCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3M1MjYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMKaW5kZXggNDY5ZWU4Yy4uMzBkZWM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jCkBAIC04Miw3ICs4Miw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlNlbnNvcmF5IDYyNiBDb21lZGkgZHJpdmVyIG1vZHVsZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi10eXBlZGVmIHN0cnVjdCBzNjI2X2JvYXJkX3N0cnVjdCB7CitzdHJ1Y3QgczYyNl9ib2FyZCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgYWlfY2hhbnM7CiAJaW50IGFpX2JpdHM7CkBAIC05MSwyMiArOTEsMjIgQEAKIAlpbnQgZGlvX2NoYW5zOwogCWludCBkaW9fYmFua3M7CiAJaW50IGVuY19jaGFuczsKLX0gczYyNl9ib2FyZDsKK307CiAKLXN0YXRpYyBjb25zdCBzNjI2X2JvYXJkIHM2MjZfYm9hcmRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHM2MjZfYm9hcmQgczYyNl9ib2FyZHNbXSA9IHsKIAl7CiAJICAgICAgbmFtZToJInM2MjYiLAotCSAgICAgIGFpX2NoYW5zOlM2MjZfQURDX0NIQU5ORUxTLAorCSAgICAgIGFpX2NoYW5zIDogUzYyNl9BRENfQ0hBTk5FTFMsCiAJICAgICAgYWlfYml0czoJMTQsCi0JICAgICAgYW9fY2hhbnM6UzYyNl9EQUNfQ0hBTk5FTFMsCisJICAgICAgYW9fY2hhbnMgOiBTNjI2X0RBQ19DSEFOTkVMUywKIAkgICAgICBhb19iaXRzOgkxMywKLQkgICAgICBkaW9fY2hhbnM6UzYyNl9ESU9fQ0hBTk5FTFMsCi0JICAgICAgZGlvX2JhbmtzOlM2MjZfRElPX0JBTktTLAotCSAgICAgIGVuY19jaGFuczpTNjI2X0VOQ09ERVJfQ0hBTk5FTFMsCisJICAgICAgZGlvX2NoYW5zIDogUzYyNl9ESU9fQ0hBTk5FTFMsCisJICAgICAgZGlvX2JhbmtzIDogUzYyNl9ESU9fQkFOS1MsCisJICAgICAgZW5jX2NoYW5zIDogUzYyNl9FTkNPREVSX0NIQU5ORUxTLAogCQl9CiB9OwogCi0jZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHM2MjZfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHM2MjZfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TNjI2IDB4MTEzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1M2MjYgMHg3MTQ2CiAKQEAgLTExOCw1NyArMTE4LDQ5IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzNjI2X3BjaV90YWJsZSk7CiAKLXN0YXRpYyBpbnQgczYyNl9hdHRhY2goY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKLXN0YXRpYyBpbnQgczYyNl9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHM2MjZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CitzdGF0aWMgaW50IHM2MjZfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgY29tZWRpX2RyaXZlciBkcml2ZXJfczYyNiA9IHsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfczYyNiA9IHsKICAgICAgIGRyaXZlcl9uYW1lOiJzNjI2IiwKLSAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKLSAgICAgIGF0dGFjaDpzNjI2X2F0dGFjaCwKLSAgICAgIGRldGFjaDpzNjI2X2RldGFjaCwKKyAgICAgIG1vZHVsZSA6IFRISVNfTU9EVUxFLAorICAgICAgYXR0YWNoIDogczYyNl9hdHRhY2gsCisgICAgICBkZXRhY2ggOiBzNjI2X2RldGFjaCwKIH07CiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBzNjI2X3ByaXZhdGUgewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXZvaWQgKmJhc2VfYWRkcjsKIAlpbnQgZ290X3JlZ2lvbnM7CiAJc2hvcnQgYWxsb2NhdGVkQnVmOwotCXVpbnQ4X3QgYWlfY21kX3J1bm5pbmc7CS8vIGFpX2NtZCBpcyBydW5uaW5nCi0JdWludDhfdCBhaV9jb250aW5vdXM7CS8vIGNvbnRpbm91cyBhcXVpc2l0aW9uCi0JaW50IGFpX3NhbXBsZV9jb3VudDsJLy8gbnVtYmVyIG9mIHNhbXBsZXMgdG8gYXF1aXJlCi0JdW5zaWduZWQgaW50IGFpX3NhbXBsZV90aW1lcjsJLy8gdGltZSBiZXR3ZWVuIHNhbXBsZXMgaW4KLQkvLyB1bml0cyBvZiB0aGUgdGltZXIKLQlpbnQgYWlfY29udmVydF9jb3VudDsJLy8gY29udmVyc2lvbiBjb3VudGVyCi0JdW5zaWduZWQgaW50IGFpX2NvbnZlcnRfdGltZXI7CS8vIHRpbWUgYmV0d2VlbiBjb252ZXJzaW9uIGluCi0JLy8gdW5pdHMgb2YgdGhlIHRpbWVyCi0JdWludDE2X3QgQ291bnRlckludEVuYWJzOwkvL0NvdW50ZXIgaW50ZXJydXB0IGVuYWJsZQotCS8vbWFzayBmb3IgTUlTQzIgcmVnaXN0ZXIuCi0JdWludDhfdCBBZGNJdGVtczsJLy9OdW1iZXIgb2YgaXRlbXMgaW4gQURDIHBvbGwKLQkvL2xpc3QuCi0JRE1BQlVGIFJQU0J1ZjsJCS8vRE1BIGJ1ZmZlciB1c2VkIHRvIGhvbGQgQURDCi0JLy8oUlBTMSkgcHJvZ3JhbS4KLQlETUFCVUYgQU5BQnVmOwkJLy9ETUEgYnVmZmVyIHVzZWQgdG8gcmVjZWl2ZQotCS8vQURDIGRhdGEgYW5kIGhvbGQgREFDIGRhdGEuCi0JdWludDMyX3QgKnBEYWNXQnVmOwkvL1BvaW50ZXIgdG8gbG9naWNhbCBhZHJzIG9mCi0JLy9ETUEgYnVmZmVyIHVzZWQgdG8gaG9sZCBEQUMKLQkvL2RhdGEuCi0JdWludDE2X3QgRGFjcG9sOwkvL0ltYWdlIG9mIERBQyBwb2xhcml0eQotCS8vcmVnaXN0ZXIuCi0JdWludDhfdCBUcmltU2V0cG9pbnRbMTJdOwkvL0ltYWdlcyBvZiBUcmltREFDIHNldHBvaW50cy4KLQkvL3JlZ2lzdGVycy4KLQl1aW50MTZfdCBDaGFyZ2VFbmFibGVkOwkvL0ltYWdlIG9mIE1JU0MyIEJhdHRlcnkKLQkvL0NoYXJnZSBFbmFibGVkICgwIG9yCi0JLy9XUk1JU0MyX0NIQVJHRV9FTkFCTEUpLgotCXVpbnQxNl90IFdESW50ZXJ2YWw7CS8vSW1hZ2Ugb2YgTUlTQzIgd2F0Y2hkb2cKLQkvL2ludGVydmFsIGNvbnRyb2wgYml0cy4KLQl1aW50MzJfdCBJMkNBZHJzOwkvL0kyQyBkZXZpY2UgYWRkcmVzcyBmb3IKLQkvL29uYm9hcmQgRUVQUk9NIChib2FyZCByZXYKLQkvL2RlcGVuZGVudCkuCi0JLy8gIHNob3J0ICAgICAgICAgSTJDYXJkczsKLQlsc2FtcGxfdCBhb19yZWFkYmFja1tTNjI2X0RBQ19DSEFOTkVMU107Ci19IHM2MjZfcHJpdmF0ZTsKKwl1aW50OF90IGFpX2NtZF9ydW5uaW5nOwkvKiAgYWlfY21kIGlzIHJ1bm5pbmcgKi8KKwl1aW50OF90IGFpX2NvbnRpbm91czsJLyogIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJaW50IGFpX3NhbXBsZV9jb3VudDsJLyogIG51bWJlciBvZiBzYW1wbGVzIHRvIGFxdWlyZSAqLworCXVuc2lnbmVkIGludCBhaV9zYW1wbGVfdGltZXI7CisJLyogIHRpbWUgYmV0d2VlbiBzYW1wbGVzIGluICB1bml0cyBvZiB0aGUgdGltZXIgKi8KKwlpbnQgYWlfY29udmVydF9jb3VudDsJLyogIGNvbnZlcnNpb24gY291bnRlciAqLworCXVuc2lnbmVkIGludCBhaV9jb252ZXJ0X3RpbWVyOworCS8qICB0aW1lIGJldHdlZW4gY29udmVyc2lvbiBpbiAgdW5pdHMgb2YgdGhlIHRpbWVyICovCisJdWludDE2X3QgQ291bnRlckludEVuYWJzOworCS8qIENvdW50ZXIgaW50ZXJydXB0IGVuYWJsZSAgbWFzayBmb3IgTUlTQzIgcmVnaXN0ZXIuICovCisJdWludDhfdCBBZGNJdGVtczsJLyogTnVtYmVyIG9mIGl0ZW1zIGluIEFEQyBwb2xsICBsaXN0LiAqLworCXN0cnVjdCBidWZmZXJETUEgUlBTQnVmOwkJLyogRE1BIGJ1ZmZlciB1c2VkIHRvIGhvbGQgQURDIChSUFMxKSBwcm9ncmFtLiAqLworCXN0cnVjdCBidWZmZXJETUEgQU5BQnVmOworCS8qIERNQSBidWZmZXIgdXNlZCB0byByZWNlaXZlIEFEQyBkYXRhIGFuZCBob2xkIERBQyBkYXRhLiAqLworCXVpbnQzMl90ICpwRGFjV0J1ZjsKKwkvKiBQb2ludGVyIHRvIGxvZ2ljYWwgYWRycyBvZiBETUEgYnVmZmVyIHVzZWQgdG8gaG9sZCBEQUMgIGRhdGEuICovCisJdWludDE2X3QgRGFjcG9sOwkvKiBJbWFnZSBvZiBEQUMgcG9sYXJpdHkgcmVnaXN0ZXIuICovCisJdWludDhfdCBUcmltU2V0cG9pbnRbMTJdOwkvKiBJbWFnZXMgb2YgVHJpbURBQyBzZXRwb2ludHMgKi8KKwl1aW50MTZfdCBDaGFyZ2VFbmFibGVkOwkvKiBJbWFnZSBvZiBNSVNDMiBCYXR0ZXJ5ICovCisJLyogQ2hhcmdlIEVuYWJsZWQgKDAgb3IgV1JNSVNDMl9DSEFSR0VfRU5BQkxFKS4gKi8KKwl1aW50MTZfdCBXREludGVydmFsOwkvKiBJbWFnZSBvZiBNSVNDMiB3YXRjaGRvZyBpbnRlcnZhbCBjb250cm9sIGJpdHMuICovCisJdWludDMyX3QgSTJDQWRyczsKKwkvKiBJMkMgZGV2aWNlIGFkZHJlc3MgZm9yIG9uYm9hcmQgRUVQUk9NIChib2FyZCByZXYgZGVwZW5kZW50KS4gKi8KKwkvKiAgIHNob3J0ICAgICAgICAgSTJDYXJkczsgKi8KKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbUzYyNl9EQUNfQ0hBTk5FTFNdOworfTsKIAotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IGRpb19wcml2YXRlIHsKIAl1aW50MTZfdCBSRERJbjsKIAl1aW50MTZfdCBXUkRPdXQ7CiAJdWludDE2X3QgUkRFZGdTZWw7CkBAIC0xNzgsMzI0ICsxNzAsMzIyIEBACiAJdWludDE2X3QgUkRDYXBGbGc7CiAJdWludDE2X3QgUkRJbnRTZWw7CiAJdWludDE2X3QgV1JJbnRTZWw7Ci19IGRpb19wcml2YXRlOworfTsKIAotc3RhdGljIGRpb19wcml2YXRlIGRpb19wcml2YXRlX0EgPSB7CitzdGF0aWMgc3RydWN0IGRpb19wcml2YXRlIGRpb19wcml2YXRlX0EgPSB7CiAgICAgICBSRERJbjpMUF9SRERJTkEsCi0gICAgICBXUkRPdXQ6TFBfV1JET1VUQSwKLSAgICAgIFJERWRnU2VsOkxQX1JERURHU0VMQSwKLSAgICAgIFdSRWRnU2VsOkxQX1dSRURHU0VMQSwKLSAgICAgIFJEQ2FwU2VsOkxQX1JEQ0FQU0VMQSwKLSAgICAgIFdSQ2FwU2VsOkxQX1dSQ0FQU0VMQSwKLSAgICAgIFJEQ2FwRmxnOkxQX1JEQ0FQRkxHQSwKLSAgICAgIFJESW50U2VsOkxQX1JESU5UU0VMQSwKLSAgICAgIFdSSW50U2VsOkxQX1dSSU5UU0VMQSwKKyAgICAgIFdSRE91dCA6IExQX1dSRE9VVEEsCisgICAgICBSREVkZ1NlbCA6IExQX1JERURHU0VMQSwKKyAgICAgIFdSRWRnU2VsIDogTFBfV1JFREdTRUxBLAorICAgICAgUkRDYXBTZWwgOiBMUF9SRENBUFNFTEEsCisgICAgICBXUkNhcFNlbCA6IExQX1dSQ0FQU0VMQSwKKyAgICAgIFJEQ2FwRmxnIDogTFBfUkRDQVBGTEdBLAorICAgICAgUkRJbnRTZWwgOiBMUF9SRElOVFNFTEEsCisgICAgICBXUkludFNlbCA6IExQX1dSSU5UU0VMQSwKIH07CiAKLXN0YXRpYyBkaW9fcHJpdmF0ZSBkaW9fcHJpdmF0ZV9CID0geworc3RhdGljIHN0cnVjdCBkaW9fcHJpdmF0ZSBkaW9fcHJpdmF0ZV9CID0gewogICAgICAgUkRESW46TFBfUkRESU5CLAotICAgICAgV1JET3V0OkxQX1dSRE9VVEIsCi0gICAgICBSREVkZ1NlbDpMUF9SREVER1NFTEIsCi0gICAgICBXUkVkZ1NlbDpMUF9XUkVER1NFTEIsCi0gICAgICBSRENhcFNlbDpMUF9SRENBUFNFTEIsCi0gICAgICBXUkNhcFNlbDpMUF9XUkNBUFNFTEIsCi0gICAgICBSRENhcEZsZzpMUF9SRENBUEZMR0IsCi0gICAgICBSREludFNlbDpMUF9SRElOVFNFTEIsCi0gICAgICBXUkludFNlbDpMUF9XUklOVFNFTEIsCisgICAgICBXUkRPdXQgOiBMUF9XUkRPVVRCLAorICAgICAgUkRFZGdTZWwgOiBMUF9SREVER1NFTEIsCisgICAgICBXUkVkZ1NlbCA6IExQX1dSRURHU0VMQiwKKyAgICAgIFJEQ2FwU2VsIDogTFBfUkRDQVBTRUxCLAorICAgICAgV1JDYXBTZWwgOiBMUF9XUkNBUFNFTEIsCisgICAgICBSRENhcEZsZyA6IExQX1JEQ0FQRkxHQiwKKyAgICAgIFJESW50U2VsIDogTFBfUkRJTlRTRUxCLAorICAgICAgV1JJbnRTZWwgOiBMUF9XUklOVFNFTEIsCiB9OwogCi1zdGF0aWMgZGlvX3ByaXZhdGUgZGlvX3ByaXZhdGVfQyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZGlvX3ByaXZhdGUgZGlvX3ByaXZhdGVfQyA9IHsKICAgICAgIFJEREluOkxQX1JERElOQywKLSAgICAgIFdSRE91dDpMUF9XUkRPVVRDLAotICAgICAgUkRFZGdTZWw6TFBfUkRFREdTRUxDLAotICAgICAgV1JFZGdTZWw6TFBfV1JFREdTRUxDLAotICAgICAgUkRDYXBTZWw6TFBfUkRDQVBTRUxDLAotICAgICAgV1JDYXBTZWw6TFBfV1JDQVBTRUxDLAotICAgICAgUkRDYXBGbGc6TFBfUkRDQVBGTEdDLAotICAgICAgUkRJbnRTZWw6TFBfUkRJTlRTRUxDLAotICAgICAgV1JJbnRTZWw6TFBfV1JJTlRTRUxDLAorICAgICAgV1JET3V0IDogTFBfV1JET1VUQywKKyAgICAgIFJERWRnU2VsIDogTFBfUkRFREdTRUxDLAorICAgICAgV1JFZGdTZWwgOiBMUF9XUkVER1NFTEMsCisgICAgICBSRENhcFNlbCA6IExQX1JEQ0FQU0VMQywKKyAgICAgIFdSQ2FwU2VsIDogTFBfV1JDQVBTRUxDLAorICAgICAgUkRDYXBGbGcgOiBMUF9SRENBUEZMR0MsCisgICAgICBSREludFNlbCA6IExQX1JESU5UU0VMQywKKyAgICAgIFdSSW50U2VsIDogTFBfV1JJTlRTRUxDLAogfTsKIAogLyogdG8gZ3JvdXAgZGlvIGRldmljZXMgKDQ4IGJpdHMgbWFzayBhbmQgZGF0YSBhcmUgbm90IGFsbG93ZWQgPz8/KQotc3RhdGljIGRpb19wcml2YXRlICpkaW9fcHJpdmF0ZV93b3JkW109eworc3RhdGljIHN0cnVjdCBkaW9fcHJpdmF0ZSAqZGlvX3ByaXZhdGVfd29yZFtdPXsKICAgJmRpb19wcml2YXRlX0EsCiAgICZkaW9fcHJpdmF0ZV9CLAogICAmZGlvX3ByaXZhdGVfQywKIH07CiAqLwogCi0jZGVmaW5lIGRldnByaXYgKChzNjI2X3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCi0jZGVmaW5lIGRpb3ByaXYgKChkaW9fcHJpdmF0ZSAqKXMtPnByaXZhdGUpCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3QgczYyNl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorI2RlZmluZSBkaW9wcml2ICgoc3RydWN0IGRpb19wcml2YXRlICopcy0+cHJpdmF0ZSkKIAogQ09NRURJX1BDSV9JTklUQ0xFQU5VUF9OT01PRFVMRShkcml2ZXJfczYyNiwgczYyNl9wY2lfdGFibGUpOwogCi0vL2lvY3RsIHJvdXRpbmVzCi1zdGF0aWMgaW50IHM2MjZfYWlfaW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotLyogc3RhdGljIGludCBzNjI2X2FpX3JpbnNuKGNvbWVkaV9kZXZpY2UgKmRldixjb21lZGlfc3ViZGV2aWNlICpzLGNvbWVkaV9pbnNuICppbnNuLGxzYW1wbF90ICpkYXRhKTsgKi8KLXN0YXRpYyBpbnQgczYyNl9haV9pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBzNjI2X2FpX2NtZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcyk7Ci1zdGF0aWMgaW50IHM2MjZfYWlfY21kdGVzdChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfY21kICogY21kKTsKLXN0YXRpYyBpbnQgczYyNl9haV9jYW5jZWwoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMpOwotc3RhdGljIGludCBzNjI2X2FvX3dpbnNuKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKLXN0YXRpYyBpbnQgczYyNl9hb19yaW5zbihjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7Ci1zdGF0aWMgaW50IHM2MjZfZGlvX2luc25fYml0cyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSk7Ci1zdGF0aWMgaW50IHM2MjZfZGlvX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKLXN0YXRpYyBpbnQgczYyNl9kaW9fc2V0X2lycShjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbik7Ci1zdGF0aWMgaW50IHM2MjZfZGlvX3Jlc2V0X2lycShjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgZ3J1b3AsCisvKiBpb2N0bCByb3V0aW5lcyAqLworc3RhdGljIGludCBzNjI2X2FpX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKKy8qIHN0YXRpYyBpbnQgczYyNl9haV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpOyAqLworc3RhdGljIGludCBzNjI2X2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHM2MjZfYWlfY21kKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKTsKK3N0YXRpYyBpbnQgczYyNl9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfY21kICpjbWQpOworc3RhdGljIGludCBzNjI2X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyk7CitzdGF0aWMgaW50IHM2MjZfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBzNjI2X2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgczYyNl9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKTsKK3N0YXRpYyBpbnQgczYyNl9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOworc3RhdGljIGludCBzNjI2X2Rpb19zZXRfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjaGFuKTsKK3N0YXRpYyBpbnQgczYyNl9kaW9fcmVzZXRfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBncnVvcCwKIAl1bnNpZ25lZCBpbnQgbWFzayk7Ci1zdGF0aWMgaW50IHM2MjZfZGlvX2NsZWFyX2lycShjb21lZGlfZGV2aWNlICogZGV2KTsKLXN0YXRpYyBpbnQgczYyNl9lbmNfaW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBzNjI2X2VuY19pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpOwotc3RhdGljIGludCBzNjI2X2VuY19pbnNuX3dyaXRlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKTsKK3N0YXRpYyBpbnQgczYyNl9kaW9fY2xlYXJfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzNjI2X2VuY19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHM2MjZfZW5jX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSk7CitzdGF0aWMgaW50IHM2MjZfZW5jX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpOwogc3RhdGljIGludCBzNjI2X25zX3RvX3RpbWVyKGludCAqbmFub3NlYywgaW50IHJvdW5kX21vZGUpOwotc3RhdGljIGludCBzNjI2X2FpX2xvYWRfcG9sbGxpc3QodWludDhfdCAqIHBwbCwgY29tZWRpX2NtZCAqIGNtZCk7Ci1zdGF0aWMgaW50IHM2MjZfYWlfaW50dHJpZyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKK3N0YXRpYyBpbnQgczYyNl9haV9sb2FkX3BvbGxsaXN0KHVpbnQ4X3QgKnBwbCwgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCk7CitzdGF0aWMgaW50IHM2MjZfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKIAl1bnNpZ25lZCBpbnQgdHJpZ251bSk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgczYyNl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkIFBUX1JFR1NfQVJHKTsKLXN0YXRpYyBsc2FtcGxfdCBzNjI2X2FpX3JlZ190b191aW50KGludCBkYXRhKTsKLS8qIHN0YXRpYyBsc2FtcGxfdCBzNjI2X3VpbnRfdG9fcmVnKGNvbWVkaV9zdWJkZXZpY2UgKnMsIGludCBkYXRhKTsgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgczYyNl9haV9yZWdfdG9fdWludChpbnQgZGF0YSk7CisvKiBzdGF0aWMgdW5zaWduZWQgaW50IHM2MjZfdWludF90b19yZWcoc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIGludCBkYXRhKTsgKi8KIAotLy9lbmQgaW9jdGwgcm91dGluZXMKKy8qIGVuZCBpb2N0bCByb3V0aW5lcyAqLwogCi0vL2ludGVybmFsIHJvdXRpbmVzCi1zdGF0aWMgdm9pZCBzNjI2X2Rpb19pbml0KGNvbWVkaV9kZXZpY2UgKiBkZXYpOwotc3RhdGljIHZvaWQgUmVzZXRBREMoY29tZWRpX2RldmljZSAqIGRldiwgdWludDhfdCAqIHBwbCk7Ci1zdGF0aWMgdm9pZCBMb2FkVHJpbURBQ3MoY29tZWRpX2RldmljZSAqIGRldik7Ci1zdGF0aWMgdm9pZCBXcml0ZVRyaW1EQUMoY29tZWRpX2RldmljZSAqIGRldiwgdWludDhfdCBMb2dpY2FsQ2hhbiwKKy8qIGludGVybmFsIHJvdXRpbmVzICovCitzdGF0aWMgdm9pZCBzNjI2X2Rpb19pbml0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgUmVzZXRBREMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDhfdCAqcHBsKTsKK3N0YXRpYyB2b2lkIExvYWRUcmltREFDcyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIFdyaXRlVHJpbURBQyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50OF90IExvZ2ljYWxDaGFuLAogCXVpbnQ4X3QgRGFjRGF0YSk7Ci1zdGF0aWMgdWludDhfdCBJMkNyZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQ4X3QgYWRkcik7Ci1zdGF0aWMgdWludDMyX3QgSTJDaGFuZHNoYWtlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQzMl90IHZhbCk7Ci1zdGF0aWMgdm9pZCBTZXREQUMoY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgY2hhbiwgc2hvcnQgZGFjZGF0YSk7Ci1zdGF0aWMgdm9pZCBTZW5kREFDKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQzMl90IHZhbCk7Ci1zdGF0aWMgdm9pZCBXcml0ZU1JU0MyKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90IE5ld0ltYWdlKTsKLXN0YXRpYyB2b2lkIERFQkl0cmFuc2Zlcihjb21lZGlfZGV2aWNlICogZGV2KTsKLXN0YXRpYyB1aW50MTZfdCBERUJJcmVhZChjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBhZGRyKTsKLXN0YXRpYyB2b2lkIERFQkl3cml0ZShjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBhZGRyLCB1aW50MTZfdCB3ZGF0YSk7Ci1zdGF0aWMgdm9pZCBERUJJcmVwbGFjZShjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBhZGRyLCB1aW50MTZfdCBtYXNrLAorc3RhdGljIHVpbnQ4X3QgSTJDcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50OF90IGFkZHIpOworc3RhdGljIHVpbnQzMl90IEkyQ2hhbmRzaGFrZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50MzJfdCB2YWwpOworc3RhdGljIHZvaWQgU2V0REFDKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IGNoYW4sIHNob3J0IGRhY2RhdGEpOworc3RhdGljIHZvaWQgU2VuZERBQyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50MzJfdCB2YWwpOworc3RhdGljIHZvaWQgV3JpdGVNSVNDMihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50MTZfdCBOZXdJbWFnZSk7CitzdGF0aWMgdm9pZCBERUJJdHJhbnNmZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CitzdGF0aWMgdWludDE2X3QgREVCSXJlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgYWRkcik7CitzdGF0aWMgdm9pZCBERUJJd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgYWRkciwgdWludDE2X3Qgd2RhdGEpOworc3RhdGljIHZvaWQgREVCSXJlcGxhY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgYWRkciwgdWludDE2X3QgbWFzaywKIAl1aW50MTZfdCB3ZGF0YSk7Ci1zdGF0aWMgdm9pZCBDbG9zZURNQUIoY29tZWRpX2RldmljZSAqIGRldiwgRE1BQlVGICogcGRtYSwgc2l6ZV90IGJzaXplKTsKK3N0YXRpYyB2b2lkIENsb3NlRE1BQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgYnVmZmVyRE1BICpwZG1hLCBzaXplX3QgYnNpemUpOwogCi0vLyBDT1VOVEVSIE9CSkVDVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgc3RydWN0IGVuY19wcml2YXRlX3N0cnVjdCB7Ci0JLy8gUG9pbnRlcnMgdG8gZnVuY3Rpb25zIHRoYXQgZGlmZmVyIGZvciBBIGFuZCBCIGNvdW50ZXJzOgotCXVpbnQxNl90KCpHZXRFbmFibGUpIChjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGVfc3RydWN0ICopOwkvL1JldHVybiBjbG9jayBlbmFibGUuCi0JdWludDE2X3QoKkdldEludFNyYykgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKik7CS8vUmV0dXJuIGludGVycnVwdCBzb3VyY2UuCi0JdWludDE2X3QoKkdldExvYWRUcmlnKSAoY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlX3N0cnVjdCAqKTsJLy9SZXR1cm4gcHJlbG9hZCB0cmlnZ2VyIHNvdXJjZS4KLQl1aW50MTZfdCgqR2V0TW9kZSkgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKik7CS8vUmV0dXJuIHN0YW5kYXJkaXplZCBvcGVyYXRpbmcgbW9kZS4KLQl2b2lkICgqUHVsc2VJbmRleCkgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKik7CS8vR2VuZXJhdGUgc29mdCBpbmRleCBzdHJvYmUuCi0Jdm9pZCAoKlNldEVuYWJsZSkgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKiwgdWludDE2X3QgZW5hYik7CS8vUHJvZ3JhbSBjbG9jayBlbmFibGUuCi0Jdm9pZCAoKlNldEludFNyYykgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKiwgdWludDE2X3QgSW50U291cmNlKTsJLy9Qcm9ncmFtIGludGVycnVwdCBzb3VyY2UuCi0Jdm9pZCAoKlNldExvYWRUcmlnKSAoY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGVuY19wcml2YXRlX3N0cnVjdCAqLCB1aW50MTZfdCBUcmlnKTsJLy9Qcm9ncmFtIHByZWxvYWQgdHJpZ2dlciBzb3VyY2UuCi0Jdm9pZCAoKlNldE1vZGUpIChjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGVfc3RydWN0ICosIHVpbnQxNl90IFNldHVwLCB1aW50MTZfdCBEaXNhYmxlSW50U3JjKTsJLy9Qcm9ncmFtIHN0YW5kYXJkaXplZCBvcGVyYXRpbmcgbW9kZS4KLQl2b2lkICgqUmVzZXRDYXBGbGFncykgKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZV9zdHJ1Y3QgKik7CS8vUmVzZXQgZXZlbnQgY2FwdHVyZSBmbGFncy4KKy8qICBDT1VOVEVSIE9CSkVDVCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0cnVjdCBlbmNfcHJpdmF0ZSB7CisJLyogIFBvaW50ZXJzIHRvIGZ1bmN0aW9ucyB0aGF0IGRpZmZlciBmb3IgQSBhbmQgQiBjb3VudGVyczogKi8KKwl1aW50MTZfdCgqR2V0RW5hYmxlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICopOwkvKiBSZXR1cm4gY2xvY2sgZW5hYmxlLiAqLworCXVpbnQxNl90KCpHZXRJbnRTcmMpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJldHVybiBpbnRlcnJ1cHQgc291cmNlLiAqLworCXVpbnQxNl90KCpHZXRMb2FkVHJpZykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqKTsJLyogUmV0dXJuIHByZWxvYWQgdHJpZ2dlciBzb3VyY2UuICovCisJdWludDE2X3QoKkdldE1vZGUpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJldHVybiBzdGFuZGFyZGl6ZWQgb3BlcmF0aW5nIG1vZGUuICovCisJdm9pZCAoKlB1bHNlSW5kZXgpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIEdlbmVyYXRlIHNvZnQgaW5kZXggc3Ryb2JlLiAqLworCXZvaWQgKCpTZXRFbmFibGUpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgZW5hYik7CS8qIFByb2dyYW0gY2xvY2sgZW5hYmxlLiAqLworCXZvaWQgKCpTZXRJbnRTcmMpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKiwgdWludDE2X3QgSW50U291cmNlKTsJLyogUHJvZ3JhbSBpbnRlcnJ1cHQgc291cmNlLiAqLworCXZvaWQgKCpTZXRMb2FkVHJpZykgKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqLCB1aW50MTZfdCBUcmlnKTsJLyogUHJvZ3JhbSBwcmVsb2FkIHRyaWdnZXIgc291cmNlLiAqLworCXZvaWQgKCpTZXRNb2RlKSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICosIHVpbnQxNl90IFNldHVwLCB1aW50MTZfdCBEaXNhYmxlSW50U3JjKTsJLyogUHJvZ3JhbSBzdGFuZGFyZGl6ZWQgb3BlcmF0aW5nIG1vZGUuICovCisJdm9pZCAoKlJlc2V0Q2FwRmxhZ3MpIChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKik7CS8qIFJlc2V0IGV2ZW50IGNhcHR1cmUgZmxhZ3MuICovCiAKLQl1aW50MTZfdCBNeUNSQTsJCS8vICAgQWRkcmVzcyBvZiBDUkEgcmVnaXN0ZXIuCi0JdWludDE2X3QgTXlDUkI7CQkvLyAgIEFkZHJlc3Mgb2YgQ1JCIHJlZ2lzdGVyLgotCXVpbnQxNl90IE15TGF0Y2hMc3c7CS8vICAgQWRkcmVzcyBvZiBMYXRjaCBsZWFzdC1zaWduaWZpY2FudC13b3JkCi0JLy8gICByZWdpc3Rlci4KLQl1aW50MTZfdCBNeUV2ZW50Qml0c1s0XTsJLy8gICBCaXQgdHJhbnNsYXRpb25zIGZvciBJbnRTcmMgLS0+UkRNSVNDMi4KLX0gZW5jX3ByaXZhdGU7CQkJLy9jb3VudGVyIG9iamVjdAorCXVpbnQxNl90IE15Q1JBOwkJLyogICAgQWRkcmVzcyBvZiBDUkEgcmVnaXN0ZXIuICovCisJdWludDE2X3QgTXlDUkI7CQkvKiAgICBBZGRyZXNzIG9mIENSQiByZWdpc3Rlci4gKi8KKwl1aW50MTZfdCBNeUxhdGNoTHN3OwkvKiAgICBBZGRyZXNzIG9mIExhdGNoIGxlYXN0LXNpZ25pZmljYW50LXdvcmQgKi8KKwkvKiAgICByZWdpc3Rlci4gKi8KKwl1aW50MTZfdCBNeUV2ZW50Qml0c1s0XTsJLyogICAgQml0IHRyYW5zbGF0aW9ucyBmb3IgSW50U3JjIC0tPlJETUlTQzIuICovCit9OwogCi0jZGVmaW5lIGVuY3ByaXYgKChlbmNfcHJpdmF0ZSAqKShkZXYtPnN1YmRldmljZXMrNSktPnByaXZhdGUpCisjZGVmaW5lIGVuY3ByaXYgKChzdHJ1Y3QgZW5jX3ByaXZhdGUgKikoZGV2LT5zdWJkZXZpY2VzKzUpLT5wcml2YXRlKQogCi0vL2NvdW50ZXJzIHJvdXRpbmVzCi1zdGF0aWMgdm9pZCBzNjI2X3RpbWVyX2xvYWQoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCBpbnQgdGljayk7Ci1zdGF0aWMgdWludDMyX3QgUmVhZExhdGNoKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdm9pZCBSZXNldENhcEZsYWdzX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB2b2lkIFJlc2V0Q2FwRmxhZ3NfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspOwotc3RhdGljIHVpbnQxNl90IEdldE1vZGVfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspOwotc3RhdGljIHVpbnQxNl90IEdldE1vZGVfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspOwotc3RhdGljIHZvaWQgU2V0TW9kZV9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgU2V0dXAsCisvKiBjb3VudGVycyByb3V0aW5lcyAqLworc3RhdGljIHZvaWQgczYyNl90aW1lcl9sb2FkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgaW50IHRpY2spOworc3RhdGljIHVpbnQzMl90IFJlYWRMYXRjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspOworc3RhdGljIHZvaWQgUmVzZXRDYXBGbGFnc19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CitzdGF0aWMgdm9pZCBSZXNldENhcEZsYWdzX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB1aW50MTZfdCBHZXRNb2RlX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB1aW50MTZfdCBHZXRNb2RlX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB2b2lkIFNldE1vZGVfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IFNldHVwLAogCXVpbnQxNl90IERpc2FibGVJbnRTcmMpOwotc3RhdGljIHZvaWQgU2V0TW9kZV9CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgU2V0dXAsCitzdGF0aWMgdm9pZCBTZXRNb2RlX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCBTZXR1cCwKIAl1aW50MTZfdCBEaXNhYmxlSW50U3JjKTsKLXN0YXRpYyB2b2lkIFNldEVuYWJsZV9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgZW5hYik7Ci1zdGF0aWMgdm9pZCBTZXRFbmFibGVfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IGVuYWIpOwotc3RhdGljIHVpbnQxNl90IEdldEVuYWJsZV9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdWludDE2X3QgR2V0RW5hYmxlX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB2b2lkIFNldExhdGNoU291cmNlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywKK3N0YXRpYyB2b2lkIFNldEVuYWJsZV9BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgZW5hYik7CitzdGF0aWMgdm9pZCBTZXRFbmFibGVfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IGVuYWIpOworc3RhdGljIHVpbnQxNl90IEdldEVuYWJsZV9BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CitzdGF0aWMgdWludDE2X3QgR2V0RW5hYmxlX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB2b2lkIFNldExhdGNoU291cmNlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywKIAl1aW50MTZfdCB2YWx1ZSk7Ci0vKiBzdGF0aWMgdWludDE2X3QgR2V0TGF0Y2hTb3VyY2UoY29tZWRpX2RldmljZSAqZGV2LCBlbmNfcHJpdmF0ZSAqayApOyAqLwotc3RhdGljIHZvaWQgU2V0TG9hZFRyaWdfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IFRyaWcpOwotc3RhdGljIHZvaWQgU2V0TG9hZFRyaWdfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IFRyaWcpOwotc3RhdGljIHVpbnQxNl90IEdldExvYWRUcmlnX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB1aW50MTZfdCBHZXRMb2FkVHJpZ19CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdm9pZCBTZXRJbnRTcmNfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssCisvKiBzdGF0aWMgdWludDE2X3QgR2V0TGF0Y2hTb3VyY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprICk7ICovCitzdGF0aWMgdm9pZCBTZXRMb2FkVHJpZ19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgVHJpZyk7CitzdGF0aWMgdm9pZCBTZXRMb2FkVHJpZ19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgVHJpZyk7CitzdGF0aWMgdWludDE2X3QgR2V0TG9hZFRyaWdfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspOworc3RhdGljIHVpbnQxNl90IEdldExvYWRUcmlnX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB2b2lkIFNldEludFNyY19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywKIAl1aW50MTZfdCBJbnRTb3VyY2UpOwotc3RhdGljIHZvaWQgU2V0SW50U3JjX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLAorc3RhdGljIHZvaWQgU2V0SW50U3JjX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLAogCXVpbnQxNl90IEludFNvdXJjZSk7Ci1zdGF0aWMgdWludDE2X3QgR2V0SW50U3JjX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB1aW50MTZfdCBHZXRJbnRTcmNfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspOwotLyogc3RhdGljIHZvaWQgU2V0Q2xrTXVsdChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApIDsgKi8KLS8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtNdWx0KGNvbWVkaV9kZXZpY2UgKmRldiwgZW5jX3ByaXZhdGUgKmsgKSA7ICovCi0vKiBzdGF0aWMgdm9pZCBTZXRJbmRleFBvbChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApOyAqLwotLyogc3RhdGljIHVpbnQxNl90IEdldENsa1BvbChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprICkgOyAqLwotLyogc3RhdGljIHZvaWQgU2V0SW5kZXhTcmMoIGNvbWVkaV9kZXZpY2UgKmRldixlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKTsgICovCi0vKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrU3JjKCBjb21lZGlfZGV2aWNlICpkZXYsZW5jX3ByaXZhdGUgKmsgKTsgICovCi0vKiBzdGF0aWMgdm9pZCBTZXRJbmRleFNyYyggY29tZWRpX2RldmljZSAqZGV2LGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApOyAgKi8KLS8qIHN0YXRpYyB1aW50MTZfdCBHZXRJbmRleFNyYyggY29tZWRpX2RldmljZSAqZGV2LGVuY19wcml2YXRlICprICk7ICAqLwotc3RhdGljIHZvaWQgUHVsc2VJbmRleF9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogayk7Ci1zdGF0aWMgdm9pZCBQdWxzZUluZGV4X0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKTsKLXN0YXRpYyB2b2lkIFByZWxvYWQoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCB1aW50MzJfdCB2YWx1ZSk7Ci1zdGF0aWMgdm9pZCBDb3VudGVyc0luaXQoY29tZWRpX2RldmljZSAqIGRldik7Ci0vL2VuZCBpbnRlcm5hbCByb3V0aW5lcworc3RhdGljIHVpbnQxNl90IEdldEludFNyY19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayk7CitzdGF0aWMgdWludDE2X3QgR2V0SW50U3JjX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKKy8qIHN0YXRpYyB2b2lkIFNldENsa011bHQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApIDsgKi8KKy8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtNdWx0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqayApIDsgKi8KKy8qIHN0YXRpYyB2b2lkIFNldEluZGV4UG9sKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKTsgKi8KKy8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtQb2woc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprICkgOyAqLworLyogc3RhdGljIHZvaWQgU2V0SW5kZXhTcmMoIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApOyAgKi8KKy8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtTcmMoIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGVuY19wcml2YXRlICprICk7ICAqLworLyogc3RhdGljIHZvaWQgU2V0SW5kZXhTcmMoIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApOyAgKi8KKy8qIHN0YXRpYyB1aW50MTZfdCBHZXRJbmRleFNyYyggc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldixzdHJ1Y3QgZW5jX3ByaXZhdGUgKmsgKTsgICovCitzdGF0aWMgdm9pZCBQdWxzZUluZGV4X0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKTsKK3N0YXRpYyB2b2lkIFB1bHNlSW5kZXhfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspOworc3RhdGljIHZvaWQgUHJlbG9hZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQzMl90IHZhbHVlKTsKK3N0YXRpYyB2b2lkIENvdW50ZXJzSW5pdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KTsKKy8qIGVuZCBpbnRlcm5hbCByb3V0aW5lcyAqLwogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBDb3VudGVyIG9iamVjdHMgY29uc3RydWN0b3IuCisvKiAgQ291bnRlciBvYmplY3RzIGNvbnN0cnVjdG9yLiAqLwogCi0vLyBDb3VudGVyIG92ZXJmbG93L2luZGV4IGV2ZW50IGZsYWcgbWFza3MgZm9yIFJETUlTQzIuCi0jZGVmaW5lIElORFhNQVNLKEMpCQkoIDEgPDwgKCAoIChDKSA+IDIgKSA/ICggKEMpICogMiAtIDEgKSA6ICggKEMpICogMiArICA0ICkgKSApCi0jZGVmaW5lIE9WRVJNQVNLKEMpCQkoIDEgPDwgKCAoIChDKSA+IDIgKSA/ICggKEMpICogMiArIDUgKSA6ICggKEMpICogMiArIDEwICkgKSApCisvKiAgQ291bnRlciBvdmVyZmxvdy9pbmRleCBldmVudCBmbGFnIG1hc2tzIGZvciBSRE1JU0MyLiAqLworI2RlZmluZSBJTkRYTUFTSyhDKQkJKDEgPDwgKCgoQykgPiAyKSA/ICgoQykgKiAyIC0gMSkgOiAoKEMpICogMiArICA0KSkpCisjZGVmaW5lIE9WRVJNQVNLKEMpCQkoMSA8PCAoKChDKSA+IDIpID8gKChDKSAqIDIgKyA1KSA6ICgoQykgKiAyICsgMTApKSkKICNkZWZpbmUgRVZCSVRTKEMpCQl7IDAsIE9WRVJNQVNLKEMpLCBJTkRYTUFTSyhDKSwgT1ZFUk1BU0soQykgfCBJTkRYTUFTSyhDKSB9CiAKLS8vIFRyYW5zbGF0aW9uIHRhYmxlIHRvIG1hcCBJbnRTcmMgaW50byBlcXVpdmFsZW50IFJETUlTQzIgZXZlbnQgZmxhZwotLy8gYml0cy4KLS8vc3RhdGljIGNvbnN0IHVpbnQxNl90IEV2ZW50Qml0c1tdWzRdID0geyBFVkJJVFMoMCksIEVWQklUUygxKSwgRVZCSVRTKDIpLCBFVkJJVFMoMyksIEVWQklUUyg0KSwgRVZCSVRTKDUpIH07CisvKiAgVHJhbnNsYXRpb24gdGFibGUgdG8gbWFwIEludFNyYyBpbnRvIGVxdWl2YWxlbnQgUkRNSVNDMiBldmVudCBmbGFnICBiaXRzLiAqLworLyogc3RhdGljIGNvbnN0IHVpbnQxNl90IEV2ZW50Qml0c1tdWzRdID0geyBFVkJJVFMoMCksIEVWQklUUygxKSwgRVZCSVRTKDIpLCBFVkJJVFMoMyksIEVWQklUUyg0KSwgRVZCSVRTKDUpIH07ICovCiAKLS8qIGVuY19wcml2YXRlOyAqLwotc3RhdGljIGVuY19wcml2YXRlIGVuY19wcml2YXRlX2RhdGFbXSA9IHsKKy8qIHN0cnVjdCBlbmNfcHJpdmF0ZTsgKi8KK3N0YXRpYyBzdHJ1Y3QgZW5jX3ByaXZhdGUgZW5jX3ByaXZhdGVfZGF0YVtdID0gewogCXsKIAkgICAgICBHZXRFbmFibGU6R2V0RW5hYmxlX0EsCi0JICAgICAgR2V0SW50U3JjOkdldEludFNyY19BLAotCSAgICAgIEdldExvYWRUcmlnOkdldExvYWRUcmlnX0EsCi0JICAgICAgR2V0TW9kZToJR2V0TW9kZV9BLAotCSAgICAgIFB1bHNlSW5kZXg6UHVsc2VJbmRleF9BLAotCSAgICAgIFNldEVuYWJsZTpTZXRFbmFibGVfQSwKLQkgICAgICBTZXRJbnRTcmM6U2V0SW50U3JjX0EsCi0JICAgICAgU2V0TG9hZFRyaWc6U2V0TG9hZFRyaWdfQSwKLQkgICAgICBTZXRNb2RlOglTZXRNb2RlX0EsCi0JICAgICAgUmVzZXRDYXBGbGFnczpSZXNldENhcEZsYWdzX0EsCi0JICAgICAgTXlDUkE6CUxQX0NSMEEsCi0JICAgICAgTXlDUkI6CUxQX0NSMEIsCi0JICAgICAgTXlMYXRjaExzdzpMUF9DTlRSMEFMU1csCi0JICAgICAgTXlFdmVudEJpdHM6RVZCSVRTKDApLAorCSAgICAgIEdldEludFNyYyA6IEdldEludFNyY19BLAorCSAgICAgIEdldExvYWRUcmlnIDogR2V0TG9hZFRyaWdfQSwKKwkgICAgICBHZXRNb2RlIDoJR2V0TW9kZV9BLAorCSAgICAgIFB1bHNlSW5kZXggOiBQdWxzZUluZGV4X0EsCisJICAgICAgU2V0RW5hYmxlIDogU2V0RW5hYmxlX0EsCisJICAgICAgU2V0SW50U3JjIDogU2V0SW50U3JjX0EsCisJICAgICAgU2V0TG9hZFRyaWcgOiBTZXRMb2FkVHJpZ19BLAorCSAgICAgIFNldE1vZGUgOglTZXRNb2RlX0EsCisJICAgICAgUmVzZXRDYXBGbGFncyA6IFJlc2V0Q2FwRmxhZ3NfQSwKKwkgICAgICBNeUNSQSA6CUxQX0NSMEEsCisJICAgICAgTXlDUkIgOglMUF9DUjBCLAorCSAgICAgIE15TGF0Y2hMc3cgOiBMUF9DTlRSMEFMU1csCisJICAgICAgTXlFdmVudEJpdHMgOiBFVkJJVFMoMCksCiAJCX0sCiAJewogCSAgICAgIEdldEVuYWJsZTpHZXRFbmFibGVfQSwKLQkgICAgICBHZXRJbnRTcmM6R2V0SW50U3JjX0EsCi0JICAgICAgR2V0TG9hZFRyaWc6R2V0TG9hZFRyaWdfQSwKLQkgICAgICBHZXRNb2RlOglHZXRNb2RlX0EsCi0JICAgICAgUHVsc2VJbmRleDpQdWxzZUluZGV4X0EsCi0JICAgICAgU2V0RW5hYmxlOlNldEVuYWJsZV9BLAotCSAgICAgIFNldEludFNyYzpTZXRJbnRTcmNfQSwKLQkgICAgICBTZXRMb2FkVHJpZzpTZXRMb2FkVHJpZ19BLAotCSAgICAgIFNldE1vZGU6CVNldE1vZGVfQSwKLQkgICAgICBSZXNldENhcEZsYWdzOlJlc2V0Q2FwRmxhZ3NfQSwKLQkgICAgICBNeUNSQToJTFBfQ1IxQSwKLQkgICAgICBNeUNSQjoJTFBfQ1IxQiwKLQkgICAgICBNeUxhdGNoTHN3OkxQX0NOVFIxQUxTVywKLQkgICAgICBNeUV2ZW50Qml0czpFVkJJVFMoMSksCisJICAgICAgR2V0SW50U3JjIDogR2V0SW50U3JjX0EsCisJICAgICAgR2V0TG9hZFRyaWcgOiBHZXRMb2FkVHJpZ19BLAorCSAgICAgIEdldE1vZGUgOglHZXRNb2RlX0EsCisJICAgICAgUHVsc2VJbmRleCA6IFB1bHNlSW5kZXhfQSwKKwkgICAgICBTZXRFbmFibGUgOiBTZXRFbmFibGVfQSwKKwkgICAgICBTZXRJbnRTcmMgOiBTZXRJbnRTcmNfQSwKKwkgICAgICBTZXRMb2FkVHJpZyA6IFNldExvYWRUcmlnX0EsCisJICAgICAgU2V0TW9kZSA6CVNldE1vZGVfQSwKKwkgICAgICBSZXNldENhcEZsYWdzIDogUmVzZXRDYXBGbGFnc19BLAorCSAgICAgIE15Q1JBIDoJTFBfQ1IxQSwKKwkgICAgICBNeUNSQiA6CUxQX0NSMUIsCisJICAgICAgTXlMYXRjaExzdyA6IExQX0NOVFIxQUxTVywKKwkgICAgICBNeUV2ZW50Qml0cyA6IEVWQklUUygxKSwKIAkJfSwKIAl7CiAJICAgICAgR2V0RW5hYmxlOkdldEVuYWJsZV9BLAotCSAgICAgIEdldEludFNyYzpHZXRJbnRTcmNfQSwKLQkgICAgICBHZXRMb2FkVHJpZzpHZXRMb2FkVHJpZ19BLAotCSAgICAgIEdldE1vZGU6CUdldE1vZGVfQSwKLQkgICAgICBQdWxzZUluZGV4OlB1bHNlSW5kZXhfQSwKLQkgICAgICBTZXRFbmFibGU6U2V0RW5hYmxlX0EsCi0JICAgICAgU2V0SW50U3JjOlNldEludFNyY19BLAotCSAgICAgIFNldExvYWRUcmlnOlNldExvYWRUcmlnX0EsCi0JICAgICAgU2V0TW9kZToJU2V0TW9kZV9BLAotCSAgICAgIFJlc2V0Q2FwRmxhZ3M6UmVzZXRDYXBGbGFnc19BLAotCSAgICAgIE15Q1JBOglMUF9DUjJBLAotCSAgICAgIE15Q1JCOglMUF9DUjJCLAotCSAgICAgIE15TGF0Y2hMc3c6TFBfQ05UUjJBTFNXLAotCSAgICAgIE15RXZlbnRCaXRzOkVWQklUUygyKSwKKwkgICAgICBHZXRJbnRTcmMgOiBHZXRJbnRTcmNfQSwKKwkgICAgICBHZXRMb2FkVHJpZyA6IEdldExvYWRUcmlnX0EsCisJICAgICAgR2V0TW9kZSA6CUdldE1vZGVfQSwKKwkgICAgICBQdWxzZUluZGV4IDogUHVsc2VJbmRleF9BLAorCSAgICAgIFNldEVuYWJsZSA6IFNldEVuYWJsZV9BLAorCSAgICAgIFNldEludFNyYyA6IFNldEludFNyY19BLAorCSAgICAgIFNldExvYWRUcmlnIDogU2V0TG9hZFRyaWdfQSwKKwkgICAgICBTZXRNb2RlIDoJU2V0TW9kZV9BLAorCSAgICAgIFJlc2V0Q2FwRmxhZ3MgOiBSZXNldENhcEZsYWdzX0EsCisJICAgICAgTXlDUkEgOglMUF9DUjJBLAorCSAgICAgIE15Q1JCIDoJTFBfQ1IyQiwKKwkgICAgICBNeUxhdGNoTHN3IDogTFBfQ05UUjJBTFNXLAorCSAgICAgIE15RXZlbnRCaXRzIDogRVZCSVRTKDIpLAogCQl9LAogCXsKIAkgICAgICBHZXRFbmFibGU6R2V0RW5hYmxlX0IsCi0JICAgICAgR2V0SW50U3JjOkdldEludFNyY19CLAotCSAgICAgIEdldExvYWRUcmlnOkdldExvYWRUcmlnX0IsCi0JICAgICAgR2V0TW9kZToJR2V0TW9kZV9CLAotCSAgICAgIFB1bHNlSW5kZXg6UHVsc2VJbmRleF9CLAotCSAgICAgIFNldEVuYWJsZTpTZXRFbmFibGVfQiwKLQkgICAgICBTZXRJbnRTcmM6U2V0SW50U3JjX0IsCi0JICAgICAgU2V0TG9hZFRyaWc6U2V0TG9hZFRyaWdfQiwKLQkgICAgICBTZXRNb2RlOglTZXRNb2RlX0IsCi0JICAgICAgUmVzZXRDYXBGbGFnczpSZXNldENhcEZsYWdzX0IsCi0JICAgICAgTXlDUkE6CUxQX0NSMEEsCi0JICAgICAgTXlDUkI6CUxQX0NSMEIsCi0JICAgICAgTXlMYXRjaExzdzpMUF9DTlRSMEJMU1csCi0JICAgICAgTXlFdmVudEJpdHM6RVZCSVRTKDMpLAorCSAgICAgIEdldEludFNyYyA6IEdldEludFNyY19CLAorCSAgICAgIEdldExvYWRUcmlnIDogR2V0TG9hZFRyaWdfQiwKKwkgICAgICBHZXRNb2RlIDoJR2V0TW9kZV9CLAorCSAgICAgIFB1bHNlSW5kZXggOiBQdWxzZUluZGV4X0IsCisJICAgICAgU2V0RW5hYmxlIDogU2V0RW5hYmxlX0IsCisJICAgICAgU2V0SW50U3JjIDogU2V0SW50U3JjX0IsCisJICAgICAgU2V0TG9hZFRyaWcgOiBTZXRMb2FkVHJpZ19CLAorCSAgICAgIFNldE1vZGUgOglTZXRNb2RlX0IsCisJICAgICAgUmVzZXRDYXBGbGFncyA6IFJlc2V0Q2FwRmxhZ3NfQiwKKwkgICAgICBNeUNSQSA6CUxQX0NSMEEsCisJICAgICAgTXlDUkIgOglMUF9DUjBCLAorCSAgICAgIE15TGF0Y2hMc3cgOiBMUF9DTlRSMEJMU1csCisJICAgICAgTXlFdmVudEJpdHMgOiBFVkJJVFMoMyksCiAJCX0sCiAJewogCSAgICAgIEdldEVuYWJsZTpHZXRFbmFibGVfQiwKLQkgICAgICBHZXRJbnRTcmM6R2V0SW50U3JjX0IsCi0JICAgICAgR2V0TG9hZFRyaWc6R2V0TG9hZFRyaWdfQiwKLQkgICAgICBHZXRNb2RlOglHZXRNb2RlX0IsCi0JICAgICAgUHVsc2VJbmRleDpQdWxzZUluZGV4X0IsCi0JICAgICAgU2V0RW5hYmxlOlNldEVuYWJsZV9CLAotCSAgICAgIFNldEludFNyYzpTZXRJbnRTcmNfQiwKLQkgICAgICBTZXRMb2FkVHJpZzpTZXRMb2FkVHJpZ19CLAotCSAgICAgIFNldE1vZGU6CVNldE1vZGVfQiwKLQkgICAgICBSZXNldENhcEZsYWdzOlJlc2V0Q2FwRmxhZ3NfQiwKLQkgICAgICBNeUNSQToJTFBfQ1IxQSwKLQkgICAgICBNeUNSQjoJTFBfQ1IxQiwKLQkgICAgICBNeUxhdGNoTHN3OkxQX0NOVFIxQkxTVywKLQkgICAgICBNeUV2ZW50Qml0czpFVkJJVFMoNCksCisJICAgICAgR2V0SW50U3JjIDogR2V0SW50U3JjX0IsCisJICAgICAgR2V0TG9hZFRyaWcgOiBHZXRMb2FkVHJpZ19CLAorCSAgICAgIEdldE1vZGUgOglHZXRNb2RlX0IsCisJICAgICAgUHVsc2VJbmRleCA6IFB1bHNlSW5kZXhfQiwKKwkgICAgICBTZXRFbmFibGUgOiBTZXRFbmFibGVfQiwKKwkgICAgICBTZXRJbnRTcmMgOiBTZXRJbnRTcmNfQiwKKwkgICAgICBTZXRMb2FkVHJpZyA6IFNldExvYWRUcmlnX0IsCisJICAgICAgU2V0TW9kZSA6CVNldE1vZGVfQiwKKwkgICAgICBSZXNldENhcEZsYWdzIDogUmVzZXRDYXBGbGFnc19CLAorCSAgICAgIE15Q1JBIDoJTFBfQ1IxQSwKKwkgICAgICBNeUNSQiA6CUxQX0NSMUIsCisJICAgICAgTXlMYXRjaExzdyA6IExQX0NOVFIxQkxTVywKKwkgICAgICBNeUV2ZW50Qml0cyA6IEVWQklUUyg0KSwKIAkJfSwKIAl7CiAJICAgICAgR2V0RW5hYmxlOkdldEVuYWJsZV9CLAotCSAgICAgIEdldEludFNyYzpHZXRJbnRTcmNfQiwKLQkgICAgICBHZXRMb2FkVHJpZzpHZXRMb2FkVHJpZ19CLAotCSAgICAgIEdldE1vZGU6CUdldE1vZGVfQiwKLQkgICAgICBQdWxzZUluZGV4OlB1bHNlSW5kZXhfQiwKLQkgICAgICBTZXRFbmFibGU6U2V0RW5hYmxlX0IsCi0JICAgICAgU2V0SW50U3JjOlNldEludFNyY19CLAotCSAgICAgIFNldExvYWRUcmlnOlNldExvYWRUcmlnX0IsCi0JICAgICAgU2V0TW9kZToJU2V0TW9kZV9CLAotCSAgICAgIFJlc2V0Q2FwRmxhZ3M6UmVzZXRDYXBGbGFnc19CLAotCSAgICAgIE15Q1JBOglMUF9DUjJBLAotCSAgICAgIE15Q1JCOglMUF9DUjJCLAotCSAgICAgIE15TGF0Y2hMc3c6TFBfQ05UUjJCTFNXLAotCSAgICAgIE15RXZlbnRCaXRzOkVWQklUUyg1KSwKKwkgICAgICBHZXRJbnRTcmMgOiBHZXRJbnRTcmNfQiwKKwkgICAgICBHZXRMb2FkVHJpZyA6IEdldExvYWRUcmlnX0IsCisJICAgICAgR2V0TW9kZSA6CUdldE1vZGVfQiwKKwkgICAgICBQdWxzZUluZGV4IDogUHVsc2VJbmRleF9CLAorCSAgICAgIFNldEVuYWJsZSA6IFNldEVuYWJsZV9CLAorCSAgICAgIFNldEludFNyYyA6IFNldEludFNyY19CLAorCSAgICAgIFNldExvYWRUcmlnIDogU2V0TG9hZFRyaWdfQiwKKwkgICAgICBTZXRNb2RlIDoJU2V0TW9kZV9CLAorCSAgICAgIFJlc2V0Q2FwRmxhZ3MgOiBSZXNldENhcEZsYWdzX0IsCisJICAgICAgTXlDUkEgOglMUF9DUjJBLAorCSAgICAgIE15Q1JCIDoJTFBfQ1IyQiwKKwkgICAgICBNeUxhdGNoTHN3IDogTFBfQ05UUjJCTFNXLAorCSAgICAgIE15RXZlbnRCaXRzIDogRVZCSVRTKDUpLAogCQl9LAogfTsKIAotLy8gZW5hYi9kaXNhYmxlIGEgZnVuY3Rpb24gb3IgdGVzdCBzdGF0dXMgYml0KHMpIHRoYXQgYXJlIGFjY2Vzc2VkCi0vLyB0aHJvdWdoIE1haW4gQ29udHJvbCBSZWdpc3RlcnMgMSBvciAyLgotI2RlZmluZSBNQ19FTkFCTEUoIFJFR0FEUlMsIENUUkxXT1JEICkJd3JpdGVsKCAgKCAodWludDMyX3QpKCBDVFJMV09SRCApIDw8IDE2ICkgfCAodWludDMyX3QpKCBDVFJMV09SRCApLGRldnByaXYtPmJhc2VfYWRkcisoIFJFR0FEUlMgKSApCisvKiAgZW5hYi9kaXNhYmxlIGEgZnVuY3Rpb24gb3IgdGVzdCBzdGF0dXMgYml0KHMpIHRoYXQgYXJlIGFjY2Vzc2VkICovCisvKiAgdGhyb3VnaCBNYWluIENvbnRyb2wgUmVnaXN0ZXJzIDEgb3IgMi4gKi8KKyNkZWZpbmUgTUNfRU5BQkxFKFJFR0FEUlMsIENUUkxXT1JEKQl3cml0ZWwoKCh1aW50MzJfdCkoQ1RSTFdPUkQpIDw8IDE2KSB8ICh1aW50MzJfdCkoQ1RSTFdPUkQpLCBkZXZwcml2LT5iYXNlX2FkZHIrKFJFR0FEUlMpKQogCi0jZGVmaW5lIE1DX0RJU0FCTEUoIFJFR0FEUlMsIENUUkxXT1JEICkJd3JpdGVsKCAgKHVpbnQzMl90KSggQ1RSTFdPUkQgKSA8PCAxNiAsIGRldnByaXYtPmJhc2VfYWRkcisoIFJFR0FEUlMgKSApCisjZGVmaW5lIE1DX0RJU0FCTEUoUkVHQURSUywgQ1RSTFdPUkQpCXdyaXRlbCgodWludDMyX3QpKENUUkxXT1JEKSA8PCAxNiAsIGRldnByaXYtPmJhc2VfYWRkcisoUkVHQURSUykpCiAKLSNkZWZpbmUgTUNfVEVTVCggUkVHQURSUywgQ1RSTFdPUkQgKQkoICggcmVhZGwoZGV2cHJpdi0+YmFzZV9hZGRyKyggUkVHQURSUyApKSAmIENUUkxXT1JEICkgIT0gMCApCisjZGVmaW5lIE1DX1RFU1QoUkVHQURSUywgQ1RSTFdPUkQpCSgocmVhZGwoZGV2cHJpdi0+YmFzZV9hZGRyKyhSRUdBRFJTKSkgJiBDVFJMV09SRCkgIT0gMCkKIAogLyogI2RlZmluZSBXUjcxNDYoUkVHQVJEUyxDVFJMV09SRCkKICAgICB3cml0ZWwoQ1RSTFdPUkQsKHVpbnQzMl90KShkZXZwcml2LT5iYXNlX2FkZHIrKFJFR0FSRFMpKSkgKi8KLSNkZWZpbmUgV1I3MTQ2KFJFR0FSRFMsQ1RSTFdPUkQpIHdyaXRlbChDVFJMV09SRCxkZXZwcml2LT5iYXNlX2FkZHIrKFJFR0FSRFMpKQorI2RlZmluZSBXUjcxNDYoUkVHQVJEUywgQ1RSTFdPUkQpIHdyaXRlbChDVFJMV09SRCwgZGV2cHJpdi0+YmFzZV9hZGRyKyhSRUdBUkRTKSkKIAogLyogI2RlZmluZSBSUjcxNDYoUkVHQVJEUykKICAgICByZWFkbCgodWludDMyX3QpKGRldnByaXYtPmJhc2VfYWRkcisoUkVHQVJEUykpKSAqLwogI2RlZmluZSBSUjcxNDYoUkVHQVJEUykJCXJlYWRsKGRldnByaXYtPmJhc2VfYWRkcisoUkVHQVJEUykpCiAKLSNkZWZpbmUgQlVHRklYX1NUUkVHKFJFR0FEUlMpICAgKCBSRUdBRFJTIC0gNCApCisjZGVmaW5lIEJVR0ZJWF9TVFJFRyhSRUdBRFJTKSAgIChSRUdBRFJTIC0gNCkKIAotLy8gV3JpdGUgYSB0aW1lIHNsb3QgY29udHJvbCByZWNvcmQgdG8gVFNMMi4KLSNkZWZpbmUgVkVDVFBPUlQoIFZFQ1ROVU0gKQkJKFBfVFNMMiArICggKFZFQ1ROVU0pIDw8IDIgKSkKLSNkZWZpbmUgU0VUVkVDVCggVkVDVE5VTSwgVkVDVFZBTCApCVdSNzE0NihWRUNUUE9SVCggVkVDVE5VTSApLCAoVkVDVFZBTCkpCisvKiAgV3JpdGUgYSB0aW1lIHNsb3QgY29udHJvbCByZWNvcmQgdG8gVFNMMi4gKi8KKyNkZWZpbmUgVkVDVFBPUlQoVkVDVE5VTSkJCShQX1RTTDIgKyAoKFZFQ1ROVU0pIDw8IDIpKQorI2RlZmluZSBTRVRWRUNUKFZFQ1ROVU0sIFZFQ1RWQUwpCVdSNzE0NihWRUNUUE9SVChWRUNUTlVNKSwgKFZFQ1RWQUwpKQogCi0vLyBDb2RlIG1hY3JvcyB1c2VkIGZvciBjb25zdHJ1Y3RpbmcgSTJDIGNvbW1hbmQgYnl0ZXMuCi0jZGVmaW5lIEkyQ19CMihBVFRSLFZBTCkJKCAoIChBVFRSKSA8PCA2ICkgfCAoIChWQUwpIDw8IDI0ICkgKQotI2RlZmluZSBJMkNfQjEoQVRUUixWQUwpCSggKCAoQVRUUikgPDwgNCApIHwgKCAoVkFMKSA8PCAxNiApICkKLSNkZWZpbmUgSTJDX0IwKEFUVFIsVkFMKQkoICggKEFUVFIpIDw8IDIgKSB8ICggKFZBTCkgPDwgIDggKSApCisvKiAgQ29kZSBtYWNyb3MgdXNlZCBmb3IgY29uc3RydWN0aW5nIEkyQyBjb21tYW5kIGJ5dGVzLiAqLworI2RlZmluZSBJMkNfQjIoQVRUUiwgVkFMKQkoKChBVFRSKSA8PCA2KSB8ICgoVkFMKSA8PCAyNCkpCisjZGVmaW5lIEkyQ19CMShBVFRSLCBWQUwpCSgoKEFUVFIpIDw8IDQpIHwgKChWQUwpIDw8IDE2KSkKKyNkZWZpbmUgSTJDX0IwKEFUVFIsIFZBTCkJKCgoQVRUUikgPDwgMikgfCAoKFZBTCkgPDwgIDgpKQogCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSBzNjI2X3JhbmdlX3RhYmxlID0geyAyLCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgczYyNl9yYW5nZV90YWJsZSA9IHsgMiwgewogCQkJUkFOR0UoLTUsIDUpLAogCQkJUkFOR0UoLTEwLCAxMCksCiAJfQogfTsKIAotc3RhdGljIGludCBzNjI2X2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpCitzdGF0aWMgaW50IHM2MjZfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKIC8qICAgdWludDhfdAlQb2xsTGlzdDsgKi8KIC8qICAgdWludDE2X3QJQWRjRGF0YTsgKi8KQEAgLTUwNywxMCArNDk3LDEwIEBACiAJaW50IHJldDsKIAlyZXNvdXJjZV9zaXplX3QgcmVzb3VyY2VTdGFydDsKIAlkbWFfYWRkcl90IGFwcGRtYTsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCi0JaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2YoczYyNl9wcml2YXRlKSkgPCAwKQorCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBzNjI2X3ByaXZhdGUpKSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yIChwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TNjI2LCBQQ0lfREVWSUNFX0lEX1M2MjYsCkBAIC01MzUsNyArNTI1LDggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKChyZXN1bHQgPSBjb21lZGlfcGNpX2VuYWJsZShwZGV2LCAiczYyNiIpKSA8IDApIHsKKwlyZXN1bHQgPSBjb21lZGlfcGNpX2VuYWJsZShwZGV2LCAiczYyNiIpOworCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByaW50aygiczYyNl9hdHRhY2g6IGNvbWVkaV9wY2lfZW5hYmxlIGZhaWxzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNTUwLDIxICs1NDEsMjIgQEAKIAl9CiAKIAlpZiAoZGV2cHJpdi0+YmFzZV9hZGRyKSB7Ci0JCS8vZGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0CisJCS8qIGRpc2FibGUgbWFzdGVyIGludGVycnVwdCAqLwogCQl3cml0ZWwoMCwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JRVIpOwogCi0JCS8vc29mdCByZXNldAorCQkvKiBzb2Z0IHJlc2V0ICovCiAJCXdyaXRlbChNQzFfU09GVF9SRVNFVCwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9NQzEpOwogCi0JCS8vRE1BIEZJWE1FIERNQS8vCisJCS8qIERNQSBGSVhNRSBETUEvLyAqLwogCQlERUJVRygiczYyNl9hdHRhY2g6IERNQSBBTExPQ0FUSU9OXG4iKTsKIAotCQkvL2FkYyBidWZmZXIgYWxsb2NhdGlvbgorCQkvKiBhZGMgYnVmZmVyIGFsbG9jYXRpb24gKi8KIAkJZGV2cHJpdi0+YWxsb2NhdGVkQnVmID0gMDsKIAotCQlpZiAoKGRldnByaXYtPkFOQUJ1Zi5Mb2dpY2FsQmFzZSA9Ci0JCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2cHJpdi0+cGRldiwgRE1BQlVGX1NJWkUsCi0JCQkJCSZhcHBkbWEpKSA9PSBOVUxMKSB7CisJCWRldnByaXYtPkFOQUJ1Zi5Mb2dpY2FsQmFzZSA9CisJCQlwY2lfYWxsb2NfY29uc2lzdGVudChkZXZwcml2LT5wZGV2LCBETUFCVUZfU0laRSwgJmFwcGRtYSk7CisKKwkJaWYgKGRldnByaXYtPkFOQUJ1Zi5Mb2dpY2FsQmFzZSA9PSBOVUxMKSB7CiAJCQlwcmludGsoInM2MjZfYXR0YWNoOiBETUEgTWVtb3J5IG1hcHBpbmcgZXJyb3JcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KQEAgLTU3NSw5ICs1NjcsMTAgQEAKIAogCQlkZXZwcml2LT5hbGxvY2F0ZWRCdWYrKzsKIAotCQlpZiAoKGRldnByaXYtPlJQU0J1Zi5Mb2dpY2FsQmFzZSA9Ci0JCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2cHJpdi0+cGRldiwgRE1BQlVGX1NJWkUsCi0JCQkJCSZhcHBkbWEpKSA9PSBOVUxMKSB7CisJCWRldnByaXYtPlJQU0J1Zi5Mb2dpY2FsQmFzZSA9CisJCQlwY2lfYWxsb2NfY29uc2lzdGVudChkZXZwcml2LT5wZGV2LCBETUFCVUZfU0laRSwgICZhcHBkbWEpOworCisJCWlmIChkZXZwcml2LT5SUFNCdWYuTG9naWNhbEJhc2UgPT0gTlVMTCkgewogCQkJcHJpbnRrKCJzNjI2X2F0dGFjaDogRE1BIE1lbW9yeSBtYXBwaW5nIGVycm9yXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CkBAIC01OTksMTIgKzU5MiwxNCBAQAogCWRldi0+aW9iYXNlID0gKHVuc2lnbmVkIGxvbmcpZGV2cHJpdi0+YmFzZV9hZGRyOwogCWRldi0+aXJxID0gZGV2cHJpdi0+cGRldi0+aXJxOwogCi0JLy9zZXQgdXAgaW50ZXJydXB0IGhhbmRsZXIKKwkvKiBzZXQgdXAgaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlpZiAoZGV2LT5pcnEgPT0gMCkgewogCQlwcmludGsoIiB1bmtub3duIGlycSAoYmFkKVxuIik7CiAJfSBlbHNlIHsKLQkJaWYgKChyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHM2MjZfaXJxX2hhbmRsZXIsCi0JCQkJCUlSUUZfU0hBUkVELCAiczYyNiIsIGRldikpIDwgMCkgeworCQlyZXQgPSBjb21lZGlfcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHM2MjZfaXJxX2hhbmRsZXIsCisJCQkJCSBJUlFGX1NIQVJFRCwgInM2MjYiLCBkZXYpOworCisJCWlmIChyZXQgPCAwKSB7CiAJCQlwcmludGsoIiBpcnEgbm90IGF2YWlsYWJsZVxuIik7CiAJCQlkZXYtPmlycSA9IDA7CiAJCX0KQEAgLTY4OSwxMTkgKzY4NCwxMjEgQEAKIAlzLT5tYXhkYXRhID0gMHhmZmZmZmY7CiAJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKIAotCS8vc3RvcCBhaV9jb21tYW5kCisJLyogc3RvcCBhaV9jb21tYW5kICovCiAJZGV2cHJpdi0+YWlfY21kX3J1bm5pbmcgPSAwOwogCiAJaWYgKGRldnByaXYtPmJhc2VfYWRkciAmJiAoZGV2cHJpdi0+YWxsb2NhdGVkQnVmID09IDIpKSB7CiAJCWRtYV9hZGRyX3QgcFBoeXNCdWY7CiAJCXVpbnQxNl90IGNoYW47CiAKLQkJLy8gZW5hYiBERUJJIGFuZCBhdWRpbyBwaW5zLCBlbmFibGUgSTJDIGludGVyZmFjZS4KKwkJLyogIGVuYWIgREVCSSBhbmQgYXVkaW8gcGlucywgZW5hYmxlIEkyQyBpbnRlcmZhY2UuICovCiAJCU1DX0VOQUJMRShQX01DMSwgTUMxX0RFQkkgfCBNQzFfQVVESU8gfCBNQzFfSTJDKTsKLQkJLy8gQ29uZmlndXJlIERFQkkgb3BlcmF0aW5nIG1vZGUuCi0JCVdSNzE0NihQX0RFQklDRkcsIERFQklfQ0ZHX1NMQVZFMTYJLy8gTG9jYWwgYnVzIGlzIDE2Ci0JCQkvLyBiaXRzIHdpZGUuCi0JCQl8IChERUJJX1RPVVQgPDwgREVCSV9DRkdfVE9VVF9CSVQpCS8vIERlY2xhcmUgREVCSQotCQkJLy8gdHJhbnNmZXIgdGltZW91dAotCQkJLy8gaW50ZXJ2YWwuCi0JCQl8IERFQklfU1dBUAkvLyBTZXQgdXAgYnl0ZSBsYW5lCi0JCQkvLyBzdGVlcmluZy4KLQkJCXwgREVCSV9DRkdfSU5URUwpOwkvLyBJbnRlbC1jb21wYXRpYmxlCi0JCS8vIGxvY2FsIGJ1cyAoREVCSQotCQkvLyBuZXZlciB0aW1lcyBvdXQpLgorCQkvKiAgQ29uZmlndXJlIERFQkkgb3BlcmF0aW5nIG1vZGUuICovCisJCVdSNzE0NihQX0RFQklDRkcsIERFQklfQ0ZHX1NMQVZFMTYJLyogIExvY2FsIGJ1cyBpcyAxNiAqLworCQkJLyogIGJpdHMgd2lkZS4gKi8KKwkJCXwgKERFQklfVE9VVCA8PCBERUJJX0NGR19UT1VUX0JJVCkJLyogIERlY2xhcmUgREVCSSAqLworCQkJLyogIHRyYW5zZmVyIHRpbWVvdXQgKi8KKwkJCS8qICBpbnRlcnZhbC4gKi8KKwkJCXwgREVCSV9TV0FQCS8qICBTZXQgdXAgYnl0ZSBsYW5lICovCisJCQkvKiAgc3RlZXJpbmcuICovCisJCQl8IERFQklfQ0ZHX0lOVEVMKTsJLyogIEludGVsLWNvbXBhdGlibGUgKi8KKwkJLyogIGxvY2FsIGJ1cyAoREVCSSAqLworCQkvKiAgbmV2ZXIgdGltZXMgb3V0KS4gKi8KIAkJREVCVUcoInM2MjZfYXR0YWNoOiAlZCBkZWJpIGluaXQgLS0gJWRcbiIsCiAJCQlERUJJX0NGR19TTEFWRTE2IHwgKERFQklfVE9VVCA8PCBERUJJX0NGR19UT1VUX0JJVCkgfAogCQkJREVCSV9TV0FQIHwgREVCSV9DRkdfSU5URUwsCiAJCQlERUJJX0NGR19JTlRFTCB8IERFQklfQ0ZHX1RPUSB8IERFQklfQ0ZHX0lOQ1EgfAogCQkJREVCSV9DRkdfMTZRKTsKIAotCQkvL0RFQkkgSU5JVCBTNjI2IFdSNzE0NiggUF9ERUJJQ0ZHLCBERUJJX0NGR19JTlRFTCB8IERFQklfQ0ZHX1RPUQotCQkvL3wgREVCSV9DRkdfSU5DUXwgREVCSV9DRkdfMTZRKTsgLy9lbmQKKwkJLyogREVCSSBJTklUIFM2MjYgV1I3MTQ2KCBQX0RFQklDRkcsIERFQklfQ0ZHX0lOVEVMIHwgREVCSV9DRkdfVE9RICovCisJCS8qIHwgREVCSV9DRkdfSU5DUXwgREVCSV9DRkdfMTZRKTsgLy9lbmQgKi8KIAotCQkvLyBQYWdpbmcgaXMgZGlzYWJsZWQuCi0JCVdSNzE0NihQX0RFQklQQUdFLCBERUJJX1BBR0VfRElTQUJMRSk7CS8vIERpc2FibGUgTU1VIHBhZ2luZy4KKwkJLyogIFBhZ2luZyBpcyBkaXNhYmxlZC4gKi8KKwkJV1I3MTQ2KFBfREVCSVBBR0UsIERFQklfUEFHRV9ESVNBQkxFKTsJLyogIERpc2FibGUgTU1VIHBhZ2luZy4gKi8KIAotCQkvLyBJbml0IEdQSU8gc28gdGhhdCBBREMgU3RhcnQqIGlzIG5lZ2F0ZWQuCisJCS8qICBJbml0IEdQSU8gc28gdGhhdCBBREMgU3RhcnQqIGlzIG5lZ2F0ZWQuICovCiAJCVdSNzE0NihQX0dQSU8sIEdQSU9fQkFTRSB8IEdQSU8xX0hJKTsKIAotCQkvL0lzQm9hcmRSZXZBIGlzIGEgYm9vbGVhbiB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBib2FyZCBpcwotCQkvL1JldkEuCisgICAgLyogSXNCb2FyZFJldkEgaXMgYSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGJvYXJkIGlzIFJldkEuCisgICAgICoKKyAgICAgKiBWRVJTSU9OIDIuMDEgQ0hBTkdFOiBSRVYgQSAmIEIgQk9BUkRTIE5PVyBTVVBQT1JURUQgQlkgRFlOQU1JQworICAgICAqIEVFUFJPTSBBRERSRVNTIFNFTEVDVElPTi4gIEluaXRpYWxpemUgdGhlIEkyQyBpbnRlcmZhY2UsIHdoaWNoCisgICAgICogaXMgdXNlZCB0byBhY2Nlc3MgdGhlIG9uYm9hcmQgc2VyaWFsIEVFUFJPTS4gIFRoZSBFRVBST00ncyBJMkMKKyAgICAgKiBEZXZpY2VBZGRyZXNzIGlzIGhhcmR3aXJlZCB0byBhIHZhbHVlIHRoYXQgaXMgZGVwZW5kZW50IG9uIHRoZQorICAgICAqIDYyNiBib2FyZCByZXZpc2lvbi4gIE9uIGFsbCBib2FyZCByZXZpc2lvbnMsIHRoZSBFRVBST00gc3RvcmVzCisgICAgICogVHJpbURBQyBjYWxpYnJhdGlvbiBjb25zdGFudHMgZm9yIGFuYWxvZyBJL08uICBPbiBSZXZCIGFuZAorICAgICAqIGhpZ2hlciBib2FyZHMsIHRoZSBEZXZpY2VBZGRyZXNzIGlzIGhhcmR3aXJlZCB0byAwIHRvIGVuYWJsZQorICAgICAqIHRoZSBFRVBST00gdG8gYWxzbyBzdG9yZSB0aGUgUENJIFN1YlZlbmRvcklEIGFuZCBTdWJEZXZpY2VJRDsKKyAgICAgKiB0aGlzIGlzIHRoZSBhZGRyZXNzIGF0IHdoaWNoIHRoZSBTQUE3MTQ2IGV4cGVjdHMgYQorICAgICAqIGNvbmZpZ3VyYXRpb24gRUVQUk9NIHRvIHJlc2lkZS4gIE9uIFJldkEgYm9hcmRzLCB0aGUgRUVQUk9NCisgICAgICogZGV2aWNlIGFkZHJlc3MsIHdoaWNoIGlzIGhhcmR3aXJlZCB0byA0LCBwcmV2ZW50cyB0aGUgU0FBNzE0NgorICAgICAqIGZyb20gcmV0cmlldmluZyBQQ0kgc3ViLUlEcywgc28gdGhlIFNBQTcxNDYgdXNlcyBpdHMgYnVpbHQtaW4KKyAgICAgKiBkZWZhdWx0IHZhbHVlcywgaW5zdGVhZC4KKyAgICAgKi8KIAotCQkvLyBWRVJTSU9OIDIuMDEgQ0hBTkdFOiBSRVYgQSAmIEIgQk9BUkRTIE5PVyBTVVBQT1JURUQgQlkgRFlOQU1JQwotCQkvLyBFRVBST00gQUREUkVTUyBTRUxFQ1RJT04uICBJbml0aWFsaXplIHRoZSBJMkMgaW50ZXJmYWNlLCB3aGljaAotCQkvLyBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgb25ib2FyZCBzZXJpYWwgRUVQUk9NLiAgVGhlIEVFUFJPTSdzIEkyQwotCQkvLyBEZXZpY2VBZGRyZXNzIGlzIGhhcmR3aXJlZCB0byBhIHZhbHVlIHRoYXQgaXMgZGVwZW5kZW50IG9uIHRoZQotCQkvLyA2MjYgYm9hcmQgcmV2aXNpb24uICBPbiBhbGwgYm9hcmQgcmV2aXNpb25zLCB0aGUgRUVQUk9NIHN0b3JlcwotCQkvLyBUcmltREFDIGNhbGlicmF0aW9uIGNvbnN0YW50cyBmb3IgYW5hbG9nIEkvTy4gIE9uIFJldkIgYW5kCi0JCS8vIGhpZ2hlciBib2FyZHMsIHRoZSBEZXZpY2VBZGRyZXNzIGlzIGhhcmR3aXJlZCB0byAwIHRvIGVuYWJsZQotCQkvLyB0aGUgRUVQUk9NIHRvIGFsc28gc3RvcmUgdGhlIFBDSSBTdWJWZW5kb3JJRCBhbmQgU3ViRGV2aWNlSUQ7Ci0JCS8vIHRoaXMgaXMgdGhlIGFkZHJlc3MgYXQgd2hpY2ggdGhlIFNBQTcxNDYgZXhwZWN0cyBhCi0JCS8vIGNvbmZpZ3VyYXRpb24gRUVQUk9NIHRvIHJlc2lkZS4gIE9uIFJldkEgYm9hcmRzLCB0aGUgRUVQUk9NCi0JCS8vIGRldmljZSBhZGRyZXNzLCB3aGljaCBpcyBoYXJkd2lyZWQgdG8gNCwgcHJldmVudHMgdGhlIFNBQTcxNDYKLQkJLy8gZnJvbSByZXRyaWV2aW5nIFBDSSBzdWItSURzLCBzbyB0aGUgU0FBNzE0NiB1c2VzIGl0cyBidWlsdC1pbgotCQkvLyBkZWZhdWx0IHZhbHVlcywgaW5zdGVhZC4KKwkJLyogICAgIGRldnByaXYtPkkyQ2FyZHM9IElzQm9hcmRSZXZBID8gMHhBOCA6IDB4QTA7IC8vIFNldCBJMkMgRUVQUk9NICovCisJCS8qICBEZXZpY2VUeXBlICgweEEwKSAqLworCQkvKiAgYW5kIERldmljZUFkZHJlc3M8PDEuICovCiAKLQkJLy8gICAgZGV2cHJpdi0+STJDYXJkcz0gSXNCb2FyZFJldkEgPyAweEE4IDogMHhBMDsgLy8gU2V0IEkyQyBFRVBST00KLQkJLy8gRGV2aWNlVHlwZSAoMHhBMCkKLQkJLy8gYW5kIERldmljZUFkZHJlc3M8PDEuCisJCWRldnByaXYtPkkyQ0FkcnMgPSAweEEwOwkvKiAgSTJDIGRldmljZSBhZGRyZXNzIGZvciBvbmJvYXJkICovCisJCS8qICBlZXByb20ocmV2YikgKi8KIAotCQlkZXZwcml2LT5JMkNBZHJzID0gMHhBMDsJLy8gSTJDIGRldmljZSBhZGRyZXNzIGZvciBvbmJvYXJkCi0JCS8vIGVlcHJvbShyZXZiKQorCQkvKiAgSXNzdWUgYW4gSTJDIEFCT1JUIGNvbW1hbmQgdG8gaGFsdCBhbnkgSTJDIG9wZXJhdGlvbiBpbiAqLworCQkvKiBwcm9ncmVzcyBhbmQgcmVzZXQgQlVTWSBmbGFnLiAqLworCQlXUjcxNDYoUF9JMkNTVEFULCBJMkNfQ0xLU0VMIHwgSTJDX0FCT1JUKTsKKwkJLyogIFdyaXRlIEkyQyBjb250cm9sOiBhYm9ydCBhbnkgSTJDIGFjdGl2aXR5LiAqLworCQlNQ19FTkFCTEUoUF9NQzIsIE1DMl9VUExEX0lJQyk7CisJCS8qICBJbnZva2UgY29tbWFuZCAgdXBsb2FkICovCisJCXdoaWxlICgoUlI3MTQ2KFBfTUMyKSAmIE1DMl9VUExEX0lJQykgPT0gMCkKKwkJCTsKKwkJLyogIGFuZCB3YWl0IGZvciB1cGxvYWQgdG8gY29tcGxldGUuICovCiAKLQkJLy8gSXNzdWUgYW4gSTJDIEFCT1JUIGNvbW1hbmQgdG8gaGFsdCBhbnkgSTJDIG9wZXJhdGlvbiBpbgotCQkvL3Byb2dyZXNzIGFuZCByZXNldCBCVVNZIGZsYWcuCi0JCVdSNzE0NihQX0kyQ1NUQVQsIEkyQ19DTEtTRUwgfCBJMkNfQUJPUlQpOwkvLyBXcml0ZSBJMkMgY29udHJvbDoKLQkJLy8gYWJvcnQgYW55IEkyQwotCQkvLyBhY3Rpdml0eS4KLQkJTUNfRU5BQkxFKFBfTUMyLCBNQzJfVVBMRF9JSUMpOwkvLyBJbnZva2UgY29tbWFuZAotCQkvLyB1cGxvYWQKLQkJd2hpbGUgKChSUjcxNDYoUF9NQzIpICYgTUMyX1VQTERfSUlDKSA9PSAwKSA7CS8vIGFuZCB3YWl0IGZvcgotCQkvLyB1cGxvYWQgdG8KLQkJLy8gY29tcGxldGUuCi0KLQkJLy8gUGVyIFNBQTcxNDYgZGF0YSBzaGVldCwgd3JpdGUgdG8gU1RBVFVTIHJlZyB0d2ljZSB0byByZXNldCBhbGwKLQkJLy8gSTJDIGVycm9yIGZsYWdzLgorCQkvKiBQZXIgU0FBNzE0NiBkYXRhIHNoZWV0LCB3cml0ZSB0byBTVEFUVVMgcmVnIHR3aWNlIHRvCisJCSAqIHJlc2V0IGFsbCAgSTJDIGVycm9yIGZsYWdzLiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCQlXUjcxNDYoUF9JMkNTVEFULCBJMkNfQ0xLU0VMKTsJLy8gV3JpdGUgSTJDIGNvbnRyb2w6IHJlc2V0Ci0JCQkvLyBlcnJvciBmbGFncy4KLQkJCU1DX0VOQUJMRShQX01DMiwgTUMyX1VQTERfSUlDKTsJLy8gSW52b2tlIGNvbW1hbmQgdXBsb2FkCi0JCQl3aGlsZSAoIU1DX1RFU1QoUF9NQzIsIE1DMl9VUExEX0lJQykpIDsJLy8gICBhbmQgd2FpdCBmb3IKLQkJCS8vICAgdXBsb2FkIHRvCi0JCQkvLyAgIGNvbXBsZXRlLgorCQkJV1I3MTQ2KFBfSTJDU1RBVCwgSTJDX0NMS1NFTCk7CisJCQkvKiAgV3JpdGUgSTJDIGNvbnRyb2w6IHJlc2V0ICBlcnJvciBmbGFncy4gKi8KKwkJCU1DX0VOQUJMRShQX01DMiwgTUMyX1VQTERfSUlDKTsJLyogIEludm9rZSBjb21tYW5kIHVwbG9hZCAqLworCQkJd2hpbGUgKCFNQ19URVNUKFBfTUMyLCBNQzJfVVBMRF9JSUMpKQorCQkJCTsKKwkJCS8qIGFuZCB3YWl0IGZvciB1cGxvYWQgdG8gY29tcGxldGUuICovCiAJCX0KIAotCQkvLyBJbml0IGF1ZGlvIGludGVyZmFjZSBmdW5jdGlvbmFsIGF0dHJpYnV0ZXM6IHNldCBEQUMvQURDIHNlcmlhbAotCQkvLyBjbG9jayByYXRlcywgaW52ZXJ0IERBQyBzZXJpYWwgY2xvY2sgc28gdGhhdCBEQUMgZGF0YSBzZXR1cAotCQkvLyB0aW1lcyBhcmUgc2F0aXNmaWVkLCBlbmFibGUgREFDIHNlcmlhbCBjbG9jayBvdXQuCisJCS8qIEluaXQgYXVkaW8gaW50ZXJmYWNlIGZ1bmN0aW9uYWwgYXR0cmlidXRlczogc2V0IERBQy9BREMKKwkJICogc2VyaWFsIGNsb2NrIHJhdGVzLCBpbnZlcnQgREFDIHNlcmlhbCBjbG9jayBzbyB0aGF0CisJCSAqIERBQyBkYXRhIHNldHVwIHRpbWVzIGFyZSBzYXRpc2ZpZWQsIGVuYWJsZSBEQUMgc2VyaWFsCisJCSAqIGNsb2NrIG91dC4KKwkJICovCisKIAkJV1I3MTQ2KFBfQUNPTjIsIEFDT04yX0lOSVQpOwogCi0JCS8vIFNldCB1cCBUU0wxIHNsb3QgbGlzdCwgd2hpY2ggaXMgdXNlZCB0byBjb250cm9sIHRoZQotCQkvLyBhY2N1bXVsYXRpb24gb2YgQURDIGRhdGE6IFJTRDEgPSBzaGlmdCBkYXRhIGluIG9uIFNEMS4gIFNJQl9BMQotCQkvLyA9IHN0b3JlIGRhdGEgdWludDhfdCBhdCBuZXh0IGF2YWlsYWJsZSBsb2NhdGlvbiBpbiBGQiBCVUZGRVIxCi0JCS8vIHJlZ2lzdGVyLgotCQlXUjcxNDYoUF9UU0wxLCBSU0QxIHwgU0lCX0ExKTsJLy8gRmV0Y2ggQURDIGhpZ2ggZGF0YQotCQkvLyB1aW50OF90LgotCQlXUjcxNDYoUF9UU0wxICsgNCwgUlNEMSB8IFNJQl9BMSB8IEVPUyk7CS8vIEZldGNoIEFEQyBsb3cgZGF0YQotCQkvLyB1aW50OF90OyBlbmQgb2YKLQkJLy8gVFNMMS4KKwkJLyogU2V0IHVwIFRTTDEgc2xvdCBsaXN0LCB3aGljaCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlCisJCSAqIGFjY3VtdWxhdGlvbiBvZiBBREMgZGF0YTogUlNEMSA9IHNoaWZ0IGRhdGEgaW4gb24gU0QxLgorCQkgKiBTSUJfQTEgID0gc3RvcmUgZGF0YSB1aW50OF90IGF0IG5leHQgYXZhaWxhYmxlIGxvY2F0aW9uIGluCisJCSAqIEZCIEJVRkZFUjEgIHJlZ2lzdGVyLiAqLworCQlXUjcxNDYoUF9UU0wxLCBSU0QxIHwgU0lCX0ExKTsKKwkJLyogIEZldGNoIEFEQyBoaWdoIGRhdGEgdWludDhfdC4gKi8KKwkJV1I3MTQ2KFBfVFNMMSArIDQsIFJTRDEgfCBTSUJfQTEgfCBFT1MpOworCQkvKiAgRmV0Y2ggQURDIGxvdyBkYXRhIHVpbnQ4X3Q7IGVuZCBvZiBUU0wxLiAqLwogCi0JCS8vIGVuYWIgVFNMMSBzbG90IGxpc3Qgc28gdGhhdCBpdCBleGVjdXRlcyBhbGwgdGhlIHRpbWUuCisJCS8qICBlbmFiIFRTTDEgc2xvdCBsaXN0IHNvIHRoYXQgaXQgZXhlY3V0ZXMgYWxsIHRoZSB0aW1lLiAqLwogCQlXUjcxNDYoUF9BQ09OMSwgQUNPTjFfQURDU1RBUlQpOwogCi0JCS8vIEluaXRpYWxpemUgUlBTIHJlZ2lzdGVycyB1c2VkIGZvciBBREMuCisJCS8qICBJbml0aWFsaXplIFJQUyByZWdpc3RlcnMgdXNlZCBmb3IgQURDLiAqLwogCi0JCS8vUGh5c2ljYWwgc3RhcnQgb2YgUlBTIHByb2dyYW0uCisJCS8qIFBoeXNpY2FsIHN0YXJ0IG9mIFJQUyBwcm9ncmFtLiAqLwogCQlXUjcxNDYoUF9SUFNBRERSMSwgKHVpbnQzMl90KSBkZXZwcml2LT5SUFNCdWYuUGh5c2ljYWxCYXNlKTsKIAotCQlXUjcxNDYoUF9SUFNQQUdFMSwgMCk7CS8vIFJQUyBwcm9ncmFtIHBlcmZvcm1zIG5vCi0JCS8vIGV4cGxpY2l0IG1lbSB3cml0ZXMuCi0JCVdSNzE0NihQX1JQUzFfVE9VVCwgMCk7CS8vIERpc2FibGUgUlBTIHRpbWVvdXRzLgorCQlXUjcxNDYoUF9SUFNQQUdFMSwgMCk7CisJCS8qICBSUFMgcHJvZ3JhbSBwZXJmb3JtcyBubyBleHBsaWNpdCBtZW0gd3JpdGVzLiAqLworCQlXUjcxNDYoUF9SUFMxX1RPVVQsIDApOwkvKiAgRGlzYWJsZSBSUFMgdGltZW91dHMuICovCiAKLQkJLy8gU0FBNzE0NiBCVUcgV09SS0FST1VORC4gIEluaXRpYWxpemUgU0FBNzE0NiBBREMgaW50ZXJmYWNlIHRvIGEKLQkJLy8ga25vd24gc3RhdGUgYnkgaW52b2tpbmcgQURDcyB1bnRpbCBGQiBCVUZGRVIgMSByZWdpc3RlciBzaG93cwotCQkvLyB0aGF0IGl0IGlzIGNvcnJlY3RseSByZWNlaXZpbmcgQURDIGRhdGEuICBUaGlzIGlzIG5lY2Vzc2FyeQotCQkvLyBiZWNhdXNlIHRoZSBTQUE3MTQ2IEFEQyBpbnRlcmZhY2UgZG9lcyBub3Qgc3RhcnQgdXAgaW4gYQotCQkvLyBkZWZpbmVkIHN0YXRlIGFmdGVyIGEgUENJIHJlc2V0LgorCQkvKiBTQUE3MTQ2IEJVRyBXT1JLQVJPVU5ELiAgSW5pdGlhbGl6ZSBTQUE3MTQ2IEFEQyBpbnRlcmZhY2UKKwkJICogdG8gYSBrbm93biBzdGF0ZSBieSBpbnZva2luZyBBRENzIHVudGlsIEZCIEJVRkZFUiAxCisJCSAqIHJlZ2lzdGVyIHNob3dzIHRoYXQgaXQgaXMgY29ycmVjdGx5IHJlY2VpdmluZyBBREMgZGF0YS4KKwkJICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgU0FBNzE0NiBBREMgaW50ZXJmYWNlIGRvZXMKKwkJICogbm90IHN0YXJ0IHVwIGluIGEgZGVmaW5lZCBzdGF0ZSBhZnRlciBhIFBDSSByZXNldC4KKwkJICovCiAKIC8qICAgICBQb2xsTGlzdCA9IEVPUEw7CQkJLy8gQ3JlYXRlIGEgc2ltcGxlIHBvbGxpbmcgKi8KIC8qIAkJCQkJLy8gbGlzdCBmb3IgYW5hbG9nIGlucHV0ICovCkBAIC04MjksMTE1ICs4MjYsMTIzIEBACiAvKiAJICBicmVhazsgKi8KIC8qICAgICAgIH0gKi8KIAotCQkvLyBlbmQgaW5pdEFEQworCQkvKiAgZW5kIGluaXRBREMgKi8KIAotCQkvLyBpbml0IHRoZSBEQUMgaW50ZXJmYWNlCisJCS8qICBpbml0IHRoZSBEQUMgaW50ZXJmYWNlICovCiAKLQkJLy8gSW5pdCBBdWRpbzIncyBvdXRwdXQgRE1BQyBhdHRyaWJ1dGVzOiBidXJzdCBsZW5ndGggPSAxIERXT1JELAotCQkvLyB0aHJlc2hvbGQgPSAxIERXT1JELgorCQkvKiBJbml0IEF1ZGlvMidzIG91dHB1dCBETUFDIGF0dHJpYnV0ZXM6IGJ1cnN0IGxlbmd0aCA9IDEKKwkJICogRFdPUkQsICB0aHJlc2hvbGQgPSAxIERXT1JELgorCQkgKi8KIAkJV1I3MTQ2KFBfUENJX0JUX0EsIDApOwogCi0JCS8vIEluaXQgQXVkaW8yJ3Mgb3V0cHV0IERNQSBwaHlzaWNhbCBhZGRyZXNzZXMuICBUaGUgcHJvdGVjdGlvbgotCQkvLyBhZGRyZXNzIGlzIHNldCB0byAxIERXT1JEIHBhc3QgdGhlIGJhc2UgYWRkcmVzcyBzbyB0aGF0IGEKLQkJLy8gc2luZ2xlIERXT1JEIHdpbGwgYmUgdHJhbnNmZXJyZWQgZWFjaCB0aW1lIGEgRE1BIHRyYW5zZmVyIGlzCi0JCS8vIGVuYWJsZWQuCisJCS8qIEluaXQgQXVkaW8yJ3Mgb3V0cHV0IERNQSBwaHlzaWNhbCBhZGRyZXNzZXMuICBUaGUgcHJvdGVjdGlvbgorCQkgKiBhZGRyZXNzIGlzIHNldCB0byAxIERXT1JEIHBhc3QgdGhlIGJhc2UgYWRkcmVzcyBzbyB0aGF0IGEKKwkJICogc2luZ2xlIERXT1JEIHdpbGwgYmUgdHJhbnNmZXJyZWQgZWFjaCB0aW1lIGEgRE1BIHRyYW5zZmVyIGlzCisJCSAqIGVuYWJsZWQuICovCiAKIAkJcFBoeXNCdWYgPQogCQkJZGV2cHJpdi0+QU5BQnVmLlBoeXNpY2FsQmFzZSArCiAJCQkoREFDX1dETUFCVUZfT1MgKiBzaXplb2YodWludDMyX3QpKTsKIAotCQlXUjcxNDYoUF9CQVNFQTJfT1VULCAodWludDMyX3QpIHBQaHlzQnVmKTsJLy8gQnVmZmVyIGJhc2UgYWRycy4KLQkJV1I3MTQ2KFBfUFJPVEEyX09VVCwgKHVpbnQzMl90KSAocFBoeXNCdWYgKyBzaXplb2YodWludDMyX3QpKSk7CS8vIFByb3RlY3Rpb24gYWRkcmVzcy4KKwkJV1I3MTQ2KFBfQkFTRUEyX09VVCwgKHVpbnQzMl90KSBwUGh5c0J1Zik7CS8qICBCdWZmZXIgYmFzZSBhZHJzLiAqLworCQlXUjcxNDYoUF9QUk9UQTJfT1VULCAodWludDMyX3QpIChwUGh5c0J1ZiArIHNpemVvZih1aW50MzJfdCkpKTsJLyogIFByb3RlY3Rpb24gYWRkcmVzcy4gKi8KIAotCQkvLyBDYWNoZSBBdWRpbzIncyBvdXRwdXQgRE1BIGJ1ZmZlciBsb2dpY2FsIGFkZHJlc3MuICBUaGlzIGlzCi0JCS8vIHdoZXJlIERBQyBkYXRhIGlzIGJ1ZmZlcmVkIGZvciBBMiBvdXRwdXQgRE1BIHRyYW5zZmVycy4KKwkJLyogQ2FjaGUgQXVkaW8yJ3Mgb3V0cHV0IERNQSBidWZmZXIgbG9naWNhbCBhZGRyZXNzLiAgVGhpcyBpcworCQkgKiB3aGVyZSBEQUMgZGF0YSBpcyBidWZmZXJlZCBmb3IgQTIgb3V0cHV0IERNQSB0cmFuc2ZlcnMuICovCiAJCWRldnByaXYtPnBEYWNXQnVmID0KIAkJCSh1aW50MzJfdCAqKSBkZXZwcml2LT5BTkFCdWYuTG9naWNhbEJhc2UgKwogCQkJREFDX1dETUFCVUZfT1M7CiAKLQkJLy8gQXVkaW8yJ3Mgb3V0cHV0IGNoYW5uZWxzIGRvZXMgbm90IHVzZSBwYWdpbmcuICBUaGUgcHJvdGVjdGlvbgotCQkvLyB2aW9sYXRpb24gaGFuZGxpbmcgYml0IGlzIHNldCBzbyB0aGF0IHRoZSBETUFDIHdpbGwKLQkJLy8gYXV0b21hdGljYWxseSBoYWx0IGFuZCBpdHMgUENJIGFkZHJlc3MgcG9pbnRlciB3aWxsIGJlIHJlc2V0Ci0JCS8vIHdoZW4gdGhlIHByb3RlY3Rpb24gYWRkcmVzcyBpcyByZWFjaGVkLgorCQkvKiBBdWRpbzIncyBvdXRwdXQgY2hhbm5lbHMgZG9lcyBub3QgdXNlIHBhZ2luZy4gIFRoZSBwcm90ZWN0aW9uCisJCSAqIHZpb2xhdGlvbiBoYW5kbGluZyBiaXQgaXMgc2V0IHNvIHRoYXQgdGhlIERNQUMgd2lsbAorCQkgKiBhdXRvbWF0aWNhbGx5IGhhbHQgYW5kIGl0cyBQQ0kgYWRkcmVzcyBwb2ludGVyIHdpbGwgYmUgcmVzZXQKKwkJICogd2hlbiB0aGUgcHJvdGVjdGlvbiBhZGRyZXNzIGlzIHJlYWNoZWQuICovCisKIAkJV1I3MTQ2KFBfUEFHRUEyX09VVCwgOCk7CiAKLQkJLy8gSW5pdGlhbGl6ZSB0aW1lIHNsb3QgbGlzdCAyIChUU0wyKSwgd2hpY2ggaXMgdXNlZCB0byBjb250cm9sCi0JCS8vIHRoZSBjbG9jayBnZW5lcmF0aW9uIGZvciBhbmQgc2VyaWFsaXphdGlvbiBvZiBkYXRhIHRvIGJlIHNlbnQKLQkJLy8gdG8gdGhlIERBQyBkZXZpY2VzLiAgU2xvdCAwIGlzIGEgTk9QIHRoYXQgaXMgdXNlZCB0byB0cmFwIFRTTAotCQkvLyBleGVjdXRpb247IHRoaXMgcGVybWl0cyBvdGhlciBzbG90cyB0byBiZSBzYWZlbHkgbW9kaWZpZWQKLQkJLy8gd2l0aG91dCBmaXJzdCB0dXJuaW5nIG9mZiB0aGUgVFNMIHNlcXVlbmNlciAod2hpY2ggaXMKLQkJLy8gYXBwYXJlbnRseSBpbXBvc3NpYmxlIHRvIGRvKS4gIEFsc28sIFNEMyAod2hpY2ggaXMgZHJpdmVuIGJ5IGEKLQkJLy8gcHVsbC11cCByZXNpc3RvcikgaXMgc2hpZnRlZCBpbiBhbmQgc3RvcmVkIHRvIHRoZSBNU0Igb2YKLQkJLy8gRkJfQlVGRkVSMiB0byBiZSB1c2VkIGFzIGV2aWRlbmNlIHRoYXQgdGhlIHNsb3Qgc2VxdWVuY2UgaGFzCi0JCS8vIG5vdCB5ZXQgZmluaXNoZWQgZXhlY3V0aW5nLgotCQlTRVRWRUNUKDAsIFhTRDIgfCBSU0QzIHwgU0lCX0EyIHwgRU9TKTsJLy8gU2xvdCAwOiBUcmFwIFRTTAotCQkvLyBleGVjdXRpb24sIHNoaWZ0IDB4RkYKLQkJLy8gaW50byBGQl9CVUZGRVIyLgorCQkvKiBJbml0aWFsaXplIHRpbWUgc2xvdCBsaXN0IDIgKFRTTDIpLCB3aGljaCBpcyB1c2VkIHRvIGNvbnRyb2wKKwkJICogdGhlIGNsb2NrIGdlbmVyYXRpb24gZm9yIGFuZCBzZXJpYWxpemF0aW9uIG9mIGRhdGEgdG8gYmUgc2VudAorCQkgKiB0byB0aGUgREFDIGRldmljZXMuICBTbG90IDAgaXMgYSBOT1AgdGhhdCBpcyB1c2VkIHRvIHRyYXAgVFNMCisJCSAqIGV4ZWN1dGlvbjsgdGhpcyBwZXJtaXRzIG90aGVyIHNsb3RzIHRvIGJlIHNhZmVseSBtb2RpZmllZAorCQkgKiB3aXRob3V0IGZpcnN0IHR1cm5pbmcgb2ZmIHRoZSBUU0wgc2VxdWVuY2VyICh3aGljaCBpcworCQkgKiBhcHBhcmVudGx5IGltcG9zc2libGUgdG8gZG8pLiAgQWxzbywgU0QzICh3aGljaCBpcyBkcml2ZW4gYnkgYQorCQkgKiBwdWxsLXVwIHJlc2lzdG9yKSBpcyBzaGlmdGVkIGluIGFuZCBzdG9yZWQgdG8gdGhlIE1TQiBvZgorCQkgKiBGQl9CVUZGRVIyIHRvIGJlIHVzZWQgYXMgZXZpZGVuY2UgdGhhdCB0aGUgc2xvdCBzZXF1ZW5jZSBoYXMKKwkJICogbm90IHlldCBmaW5pc2hlZCBleGVjdXRpbmcuCisJCSAqLwogCi0JCS8vIEluaXRpYWxpemUgc2xvdCAxLCB3aGljaCBpcyBjb25zdGFudC4gIFNsb3QgMSBjYXVzZXMgYSBEV09SRCB0bwotCQkvLyBiZSB0cmFuc2ZlcnJlZCBmcm9tIGF1ZGlvIGNoYW5uZWwgMidzIG91dHB1dCBGSUZPIHRvIHRoZSBGSUZPJ3MKLQkJLy8gb3V0cHV0IGJ1ZmZlciBzbyB0aGF0IGl0IGNhbiBiZSBzZXJpYWxpemVkIGFuZCBzZW50IHRvIHRoZSBEQUMKLQkJLy8gZHVyaW5nIHN1YnNlcXVlbnQgc2xvdHMuICBBbGwgcmVtYWluaW5nIHNsb3RzIGFyZSBkeW5hbWljYWxseQotCQkvLyBwb3B1bGF0ZWQgYXMgcmVxdWlyZWQgYnkgdGhlIHRhcmdldCBEQUMgZGV2aWNlLgotCQlTRVRWRUNUKDEsIExGX0EyKTsJLy8gU2xvdCAxOiBGZXRjaCBEV09SRCBmcm9tIEF1ZGlvMidzCi0JCS8vIG91dHB1dCBGSUZPLgorCQlTRVRWRUNUKDAsIFhTRDIgfCBSU0QzIHwgU0lCX0EyIHwgRU9TKTsKKwkJLyogIFNsb3QgMDogVHJhcCBUU0wgZXhlY3V0aW9uLCBzaGlmdCAweEZGIGludG8gRkJfQlVGRkVSMi4gKi8KIAotCQkvLyBTdGFydCBEQUMncyBhdWRpbyBpbnRlcmZhY2UgKFRTTDIpIHJ1bm5pbmcuCisJCS8qIEluaXRpYWxpemUgc2xvdCAxLCB3aGljaCBpcyBjb25zdGFudC4gIFNsb3QgMSBjYXVzZXMgYQorCQkgKiBEV09SRCB0byBiZSB0cmFuc2ZlcnJlZCBmcm9tIGF1ZGlvIGNoYW5uZWwgMidzIG91dHB1dCBGSUZPCisJCSAqIHRvIHRoZSBGSUZPJ3Mgb3V0cHV0IGJ1ZmZlciBzbyB0aGF0IGl0IGNhbiBiZSBzZXJpYWxpemVkCisJCSAqIGFuZCBzZW50IHRvIHRoZSBEQUMgZHVyaW5nIHN1YnNlcXVlbnQgc2xvdHMuICBBbGwgcmVtYWluaW5nCisJCSAqIHNsb3RzIGFyZSBkeW5hbWljYWxseSBwb3B1bGF0ZWQgYXMgcmVxdWlyZWQgYnkgdGhlIHRhcmdldAorCQkgKiBEQUMgZGV2aWNlLgorCQkgKi8KKwkJU0VUVkVDVCgxLCBMRl9BMik7CisJCS8qICBTbG90IDE6IEZldGNoIERXT1JEIGZyb20gQXVkaW8yJ3Mgb3V0cHV0IEZJRk8uICovCisKKwkJLyogIFN0YXJ0IERBQydzIGF1ZGlvIGludGVyZmFjZSAoVFNMMikgcnVubmluZy4gKi8KIAkJV1I3MTQ2KFBfQUNPTjEsIEFDT04xX0RBQ1NUQVJUKTsKIAotCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQkvKiBlbmQgaW5pdCBEQUMgaW50ZXJmYWNlICovCiAKLQkJLy8gZW5kIGluaXQgREFDIGludGVyZmFjZQotCi0JCS8vIEluaXQgVHJpbSBEQUNzIHRvIGNhbGlicmF0ZWQgdmFsdWVzLiAgRG8gaXQgdHdpY2UgYmVjYXVzZSB0aGUKLQkJLy8gU0FBNzE0NiBhdWRpbyBjaGFubmVsIGRvZXMgbm90IGFsd2F5cyByZXNldCBwcm9wZXJseSBhbmQKLQkJLy8gc29tZXRpbWVzIGNhdXNlcyB0aGUgZmlyc3QgZmV3IFRyaW1EQUMgd3JpdGVzIHRvIG1hbGZ1bmN0aW9uLgorCQkvKiBJbml0IFRyaW0gREFDcyB0byBjYWxpYnJhdGVkIHZhbHVlcy4gIERvIGl0IHR3aWNlIGJlY2F1c2UgdGhlCisJCSAqIFNBQTcxNDYgYXVkaW8gY2hhbm5lbCBkb2VzIG5vdCBhbHdheXMgcmVzZXQgcHJvcGVybHkgYW5kCisJCSAqIHNvbWV0aW1lcyBjYXVzZXMgdGhlIGZpcnN0IGZldyBUcmltREFDIHdyaXRlcyB0byBtYWxmdW5jdGlvbi4KKwkJICovCiAKIAkJTG9hZFRyaW1EQUNzKGRldik7Ci0JCUxvYWRUcmltREFDcyhkZXYpOwkvLyBJbnN1cmFuY2UuCisJCUxvYWRUcmltREFDcyhkZXYpOwkvKiAgSW5zdXJhbmNlLiAqLwogCi0JCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCQkvLyBNYW51YWxseSBpbml0IGFsbCBnYXRlIGFycmF5IGhhcmR3YXJlIGluIGNhc2UgdGhpcyBpcyBhIHNvZnQKLQkJLy8gcmVzZXQgKHdlIGhhdmUgbm8gd2F5IG9mIGRldGVybWluaW5nIHdoZXRoZXIgdGhpcyBpcyBhIHdhcm0gb3IKLQkJLy8gY29sZCBzdGFydCkuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBnYXRlIGFycmF5IHdpbGwKLQkJLy8gcmVzZXQgb25seSBpbiByZXNwb25zZSB0byBhIFBDSSBoYXJkIHJlc2V0OyB0aGVyZSBpcyBubyBzb2Z0Ci0JCS8vIHJlc2V0IGZ1bmN0aW9uLgorCQkvKiBNYW51YWxseSBpbml0IGFsbCBnYXRlIGFycmF5IGhhcmR3YXJlIGluIGNhc2UgdGhpcyBpcyBhIHNvZnQKKwkJICogcmVzZXQgKHdlIGhhdmUgbm8gd2F5IG9mIGRldGVybWluaW5nIHdoZXRoZXIgdGhpcyBpcyBhIHdhcm0KKwkJICogb3IgY29sZCBzdGFydCkuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBnYXRlIGFycmF5IHdpbGwKKwkJICogcmVzZXQgb25seSBpbiByZXNwb25zZSB0byBhIFBDSSBoYXJkIHJlc2V0OyB0aGVyZSBpcyBubyBzb2Z0CisJCSAqIHJlc2V0IGZ1bmN0aW9uLiAqLwogCi0JCS8vIEluaXQgYWxsIERBQyBvdXRwdXRzIHRvIDBWIGFuZCBpbml0IGFsbCBEQUMgc2V0cG9pbnQgYW5kCi0JCS8vIHBvbGFyaXR5IGltYWdlcy4KKwkJLyogSW5pdCBhbGwgREFDIG91dHB1dHMgdG8gMFYgYW5kIGluaXQgYWxsIERBQyBzZXRwb2ludCBhbmQKKwkJICogcG9sYXJpdHkgaW1hZ2VzLgorCQkgKi8KIAkJZm9yIChjaGFuID0gMDsgY2hhbiA8IFM2MjZfREFDX0NIQU5ORUxTOyBjaGFuKyspCiAJCQlTZXREQUMoZGV2LCBjaGFuLCAwKTsKIAotCQkvLyBJbml0IGltYWdlIG9mIFdSTUlTQzIgQmF0dGVyeSBDaGFyZ2VyIEVuYWJsZWQgY29udHJvbCBiaXQuCi0JCS8vIFRoaXMgaW1hZ2UgaXMgdXNlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgY2hhcmdlciBjb250cm9sIGJpdCwKLQkJLy8gd2hpY2ggaGFzIG5vIGRpcmVjdCBoYXJkd2FyZSByZWFkYmFjayBtZWNoYW5pc20sIGlzIHF1ZXJpZWQuCisJCS8qIEluaXQgaW1hZ2Ugb2YgV1JNSVNDMiBCYXR0ZXJ5IENoYXJnZXIgRW5hYmxlZCBjb250cm9sIGJpdC4KKwkJICogVGhpcyBpbWFnZSBpcyB1c2VkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBjaGFyZ2VyIGNvbnRyb2wgYml0LAorCQkgKiB3aGljaCBoYXMgbm8gZGlyZWN0IGhhcmR3YXJlIHJlYWRiYWNrIG1lY2hhbmlzbSwgaXMgcXVlcmllZC4KKwkJICovCiAJCWRldnByaXYtPkNoYXJnZUVuYWJsZWQgPSAwOwogCi0JCS8vIEluaXQgaW1hZ2Ugb2Ygd2F0Y2hkb2cgdGltZXIgaW50ZXJ2YWwgaW4gV1JNSVNDMi4gIFRoaXMgaW1hZ2UKLQkJLy8gbWFpbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbCBiaXRzIG9mIE1JU0MyIGFyZQotCQkvLyBjb250aW51b3VzbHkgcmVzZXQgdG8gemVybyBhcyBsb25nIGFzIHRoZSBXRCB0aW1lciBpcyBkaXNhYmxlZC4KKwkJLyogSW5pdCBpbWFnZSBvZiB3YXRjaGRvZyB0aW1lciBpbnRlcnZhbCBpbiBXUk1JU0MyLiAgVGhpcyBpbWFnZQorCQkgKiBtYWludGFpbnMgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGJpdHMgb2YgTUlTQzIgYXJlCisJCSAqIGNvbnRpbnVvdXNseSByZXNldCB0byB6ZXJvIGFzIGxvbmcgYXMgdGhlIFdEIHRpbWVyIGlzIGRpc2FibGVkLgorCQkgKi8KIAkJZGV2cHJpdi0+V0RJbnRlcnZhbCA9IDA7CiAKLQkJLy8gSW5pdCBDb3VudGVyIEludGVycnVwdCBlbmFiIG1hc2sgZm9yIFJETUlTQzIuICBUaGlzIG1hc2sgaXMKLQkJLy8gYXBwbGllZCBhZ2FpbnN0IE1JU0MyIHdoZW4gdGVzdGluZyB0byBkZXRlcm1pbmUgd2hpY2ggdGltZXIKLQkJLy8gZXZlbnRzIGFyZSByZXF1ZXN0aW5nIGludGVycnVwdCBzZXJ2aWNlLgorCQkvKiBJbml0IENvdW50ZXIgSW50ZXJydXB0IGVuYWIgbWFzayBmb3IgUkRNSVNDMi4gIFRoaXMgbWFzayBpcworCQkgKiBhcHBsaWVkIGFnYWluc3QgTUlTQzIgd2hlbiB0ZXN0aW5nIHRvIGRldGVybWluZSB3aGljaCB0aW1lcgorCQkgKiBldmVudHMgYXJlIHJlcXVlc3RpbmcgaW50ZXJydXB0IHNlcnZpY2UuCisJCSAqLwogCQlkZXZwcml2LT5Db3VudGVySW50RW5hYnMgPSAwOwogCi0JCS8vIEluaXQgY291bnRlcnMuCisJCS8qICBJbml0IGNvdW50ZXJzLiAqLwogCQlDb3VudGVyc0luaXQoZGV2KTsKIAotCQkvLyBXaXRob3V0IG1vZGlmeWluZyB0aGUgc3RhdGUgb2YgdGhlIEJhdHRlcnkgQmFja3VwIGVuYWIsIGRpc2FibGUKLQkJLy8gdGhlIHdhdGNoZG9nIHRpbWVyLCBzZXQgRElPIGNoYW5uZWxzIDAtNSB0byBvcGVyYXRlIGluIHRoZQotCQkvLyBzdGFuZGFyZCBESU8gKHZzLiBjb3VudGVyIG92ZXJmbG93KSBtb2RlLCBkaXNhYmxlIHRoZSBiYXR0ZXJ5Ci0JCS8vIGNoYXJnZXIsIGFuZCByZXNldCB0aGUgd2F0Y2hkb2cgaW50ZXJ2YWwgc2VsZWN0b3IgdG8gemVyby4KKwkJLyogV2l0aG91dCBtb2RpZnlpbmcgdGhlIHN0YXRlIG9mIHRoZSBCYXR0ZXJ5IEJhY2t1cCBlbmFiLCBkaXNhYmxlCisJCSAqIHRoZSB3YXRjaGRvZyB0aW1lciwgc2V0IERJTyBjaGFubmVscyAwLTUgdG8gb3BlcmF0ZSBpbiB0aGUKKwkJICogc3RhbmRhcmQgRElPICh2cy4gY291bnRlciBvdmVyZmxvdykgbW9kZSwgZGlzYWJsZSB0aGUgYmF0dGVyeQorCQkgKiBjaGFyZ2VyLCBhbmQgcmVzZXQgdGhlIHdhdGNoZG9nIGludGVydmFsIHNlbGVjdG9yIHRvIHplcm8uCisJCSAqLwogCQlXcml0ZU1JU0MyKGRldiwgKHVpbnQxNl90KSAoREVCSXJlYWQoZGV2LAogCQkJCQlMUF9SRE1JU0MyKSAmIE1JU0MyX0JBVFRfRU5BQkxFKSk7CiAKLQkJLy8gSW5pdGlhbGl6ZSB0aGUgZGlnaXRhbCBJL08gc3Vic3lzdGVtLgorCQkvKiAgSW5pdGlhbGl6ZSB0aGUgZGlnaXRhbCBJL08gc3Vic3lzdGVtLiAqLwogCQlzNjI2X2Rpb19pbml0KGRldik7CiAKLQkJLy9lbmFibGUgaW50ZXJydXB0IHRlc3QKLQkJLy8gd3JpdGVsKElSUV9HUElPMyB8IElSUV9SUFMxLGRldnByaXYtPmJhc2VfYWRkcitQX0lFUik7CisJCS8qIGVuYWJsZSBpbnRlcnJ1cHQgdGVzdCAqLworCQkvKiAgd3JpdGVsKElSUV9HUElPMyB8IElSUV9SUFMxLGRldnByaXYtPmJhc2VfYWRkcitQX0lFUik7ICovCiAJfQogCiAJREVCVUcoInM2MjZfYXR0YWNoOiBjb21lZGklZCBzNjI2IGF0dGFjaGVkICUwNHhcbiIsIGRldi0+bWlub3IsCkBAIC05NDYsOSArOTUxLDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGxzYW1wbF90IHM2MjZfYWlfcmVnX3RvX3VpbnQoaW50IGRhdGEpCitzdGF0aWMgdW5zaWduZWQgaW50IHM2MjZfYWlfcmVnX3RvX3VpbnQoaW50IGRhdGEpCiB7Ci0JbHNhbXBsX3QgdGVtcGRhdGE7CisJdW5zaWduZWQgaW50IHRlbXBkYXRhOwogCiAJdGVtcGRhdGEgPSAoZGF0YSA+PiAxOCk7CiAJaWYgKHRlbXBkYXRhICYgMHgyMDAwKQpAQCAtOTU5LDIxICs5NjQsMjEgQEAKIAlyZXR1cm4gdGVtcGRhdGE7CiB9CiAKLS8qIHN0YXRpYyBsc2FtcGxfdCBzNjI2X3VpbnRfdG9fcmVnKGNvbWVkaV9zdWJkZXZpY2UgKnMsIGludCBkYXRhKXsgKi8KKy8qIHN0YXRpYyB1bnNpZ25lZCBpbnQgczYyNl91aW50X3RvX3JlZyhzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgaW50IGRhdGEpeyAqLwogLyogICByZXR1cm4gMDsgKi8KIC8qIH0gKi8KIAogc3RhdGljIGlycXJldHVybl90IHM2MjZfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZCBQVF9SRUdTX0FSRykKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7Ci0JY29tZWRpX2NtZCAqY21kOwotCWVuY19wcml2YXRlICprOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQ7CisJc3RydWN0IGVuY19wcml2YXRlICprOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50MzJfdCAqcmVhZGFkZHI7CiAJdWludDMyX3QgaXJxdHlwZSwgaXJxc3RhdHVzOwogCWludCBpID0gMDsKLQlzYW1wbF90IHRlbXBkYXRhOworCXNob3J0IHRlbXBkYXRhOwogCXVpbnQ4X3QgZ3JvdXA7CiAJdWludDE2X3QgaXJxYml0OwogCkBAIC05ODEsNDcgKzk4Niw0OCBAQAogCiAJaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkKIAkJcmV0dXJuIElSUV9OT05FOwotCS8vIGxvY2sgdG8gYXZvaWQgcmFjZSB3aXRoIGNvbWVkaV9wb2xsCisJLyogIGxvY2sgdG8gYXZvaWQgcmFjZSB3aXRoIGNvbWVkaV9wb2xsICovCiAJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAKLQkvL3NhdmUgaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBzdGF0ZQorCS8qIHNhdmUgaW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciBzdGF0ZSAqLwogCWlycXN0YXR1cyA9IHJlYWRsKGRldnByaXYtPmJhc2VfYWRkciArIFBfSUVSKTsKIAotCS8vcmVhZCBpbnRlcnJ1cHQgdHlwZQorCS8qIHJlYWQgaW50ZXJydXB0IHR5cGUgKi8KIAlpcnF0eXBlID0gcmVhZGwoZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JU1IpOwogCi0JLy9kaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHQKKwkvKiBkaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHQgKi8KIAl3cml0ZWwoMCwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JRVIpOwogCi0JLy9jbGVhciBpbnRlcnJ1cHQKKwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KIAl3cml0ZWwoaXJxdHlwZSwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JU1IpOwogCi0JLy9kbyBzb21ldGhpbmdzCisJLyogZG8gc29tZXRoaW5ncyAqLwogCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBpbnRlcnJ1cHQgdHlwZSAlZFxuIiwgaXJxdHlwZSk7CiAKIAlzd2l0Y2ggKGlycXR5cGUpIHsKLQljYXNlIElSUV9SUFMxOgkJLy8gZW5kX29mX3NjYW4gb2NjdXJzCisJY2FzZSBJUlFfUlBTMToJCS8qICBlbmRfb2Zfc2NhbiBvY2N1cnMgKi8KIAogCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogUlBTMSBpcnEgZGV0ZWN0ZWRcbiIpOwogCi0JCS8vIG1hbmFnZSBhaSBzdWJkZXZpY2UKKwkJLyogIG1hbmFnZSBhaSBzdWJkZXZpY2UgKi8KIAkJcyA9IGRldi0+c3ViZGV2aWNlczsKIAkJY21kID0gJihzLT5hc3luYy0+Y21kKTsKIAotCQkvLyBJbml0IHB0ciB0byBETUEgYnVmZmVyIHRoYXQgaG9sZHMgbmV3IEFEQyBkYXRhLiAgV2Ugc2tpcCB0aGUKLQkJLy8gZmlyc3QgdWludDE2X3QgaW4gdGhlIGJ1ZmZlciBiZWNhdXNlIGl0IGNvbnRhaW5zIGp1bmsgZGF0YSBmcm9tCi0JCS8vIHRoZSBmaW5hbCBBREMgb2YgdGhlIHByZXZpb3VzIHBvbGwgbGlzdCBzY2FuLgorCQkvKiBJbml0IHB0ciB0byBETUEgYnVmZmVyIHRoYXQgaG9sZHMgbmV3IEFEQyBkYXRhLiAgV2Ugc2tpcCB0aGUKKwkJICogZmlyc3QgdWludDE2X3QgaW4gdGhlIGJ1ZmZlciBiZWNhdXNlIGl0IGNvbnRhaW5zIGp1bmsgZGF0YSBmcm9tCisJCSAqIHRoZSBmaW5hbCBBREMgb2YgdGhlIHByZXZpb3VzIHBvbGwgbGlzdCBzY2FuLgorCQkgKi8KIAkJcmVhZGFkZHIgPSAoaW50MzJfdCAqKSBkZXZwcml2LT5BTkFCdWYuTG9naWNhbEJhc2UgKyAxOwogCi0JCS8vIGdldCB0aGUgZGF0YSBhbmQgaGFuZCBpdCBvdmVyIHRvIGNvbWVkaQorCQkvKiAgZ2V0IHRoZSBkYXRhIGFuZCBoYW5kIGl0IG92ZXIgdG8gY29tZWRpICovCiAJCWZvciAoaSA9IDA7IGkgPCAocy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW4pOyBpKyspIHsKLQkJCS8vIENvbnZlcnQgQURDIGRhdGEgdG8gMTYtYml0IGludGVnZXIgdmFsdWVzIGFuZCBjb3B5IHRvIGFwcGxpY2F0aW9uCi0JCQkvLyBidWZmZXIuCisJCQkvKiAgQ29udmVydCBBREMgZGF0YSB0byAxNi1iaXQgaW50ZWdlciB2YWx1ZXMgYW5kIGNvcHkgdG8gYXBwbGljYXRpb24gKi8KKwkJCS8qICBidWZmZXIuICovCiAJCQl0ZW1wZGF0YSA9IHM2MjZfYWlfcmVnX3RvX3VpbnQoKGludCkqcmVhZGFkZHIpOwogCQkJcmVhZGFkZHIrKzsKIAotCQkJLy9wdXQgZGF0YSBpbnRvIHJlYWQgYnVmZmVyCi0JCQkvLyBjb21lZGlfYnVmX3B1dChzLT5hc3luYywgdGVtcGRhdGEpOworCQkJLyogcHV0IGRhdGEgaW50byByZWFkIGJ1ZmZlciAqLworCQkJLyogIGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCB0ZW1wZGF0YSk7ICovCiAJCQlpZiAoY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCB0ZW1wZGF0YSkgPT0gMCkKIAkJCQlwcmludGsoInM2MjZfaXJxX2hhbmRsZXI6IGNmY193cml0ZV90b19idWZmZXIgZXJyb3IhXG4iKTsKIApAQCAtMTAyOSw3ICsxMDM1LDcgQEAKIAkJCQlpLCB0ZW1wZGF0YSk7CiAJCX0KIAotCQkvL2VuZCBvZiBzY2FuIG9jY3VycworCQkvKiBlbmQgb2Ygc2NhbiBvY2N1cnMgKi8KIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9TOwogCiAJCWlmICghKGRldnByaXYtPmFpX2NvbnRpbm91cykpCkBAIC0xMDM3LDEzICsxMDQzLDEzIEBACiAJCWlmIChkZXZwcml2LT5haV9zYW1wbGVfY291bnQgPD0gMCkgewogCQkJZGV2cHJpdi0+YWlfY21kX3J1bm5pbmcgPSAwOwogCi0JCQkvLyBTdG9wIFJQUyBwcm9ncmFtLgorCQkJLyogIFN0b3AgUlBTIHByb2dyYW0uICovCiAJCQlNQ19ESVNBQkxFKFBfTUMxLCBNQzFfRVJQUzEpOwogCi0JCQkvL3NlbmQgZW5kIG9mIGFjcXVpc2l0aW9uCisJCQkvKiBzZW5kIGVuZCBvZiBhY3F1aXNpdGlvbiAqLwogCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCi0JCQkvL2Rpc2FibGUgbWFzdGVyIGludGVycnVwdAorCQkJLyogZGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0ICovCiAJCQlpcnFzdGF0dXMgPSAwOwogCQl9CiAKQEAgLTEwNTQsNDAgKzEwNjAsNDAgQEAKIAogCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IEV4dGVybmFsIHRyaWdnZXIgaXMgc2V0ISEhXG4iKTsKIAkJfQotCQkvLyB0ZWxsIGNvbWVkaSB0aGF0IGRhdGEgaXMgdGhlcmUKKwkJLyogIHRlbGwgY29tZWRpIHRoYXQgZGF0YSBpcyB0aGVyZSAqLwogCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogZXZlbnRzICVkXG4iLCBzLT5hc3luYy0+ZXZlbnRzKTsKIAkJY29tZWRpX2V2ZW50KGRldiwgcyk7CiAJCWJyZWFrOwotCWNhc2UgSVJRX0dQSU8zOgkvL2NoZWNrIGRpbyBhbmQgY29udGVyIGludGVycnVwdAorCWNhc2UgSVJRX0dQSU8zOgkvKiBjaGVjayBkaW8gYW5kIGNvbnRlciBpbnRlcnJ1cHQgKi8KIAogCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogR1BJTzMgaXJxIGRldGVjdGVkXG4iKTsKIAotCQkvLyBtYW5hZ2UgYWkgc3ViZGV2aWNlCisJCS8qICBtYW5hZ2UgYWkgc3ViZGV2aWNlICovCiAJCXMgPSBkZXYtPnN1YmRldmljZXM7CiAJCWNtZCA9ICYocy0+YXN5bmMtPmNtZCk7CiAKLQkJLy9zNjI2X2Rpb19jbGVhcl9pcnEoZGV2KTsKKwkJLyogczYyNl9kaW9fY2xlYXJfaXJxKGRldik7ICovCiAKIAkJZm9yIChncm91cCA9IDA7IGdyb3VwIDwgUzYyNl9ESU9fQkFOS1M7IGdyb3VwKyspIHsKIAkJCWlycWJpdCA9IDA7Ci0JCQkvL3JlYWQgaW50ZXJydXB0IHR5cGUKKwkJCS8qIHJlYWQgaW50ZXJydXB0IHR5cGUgKi8KIAkJCWlycWJpdCA9IERFQklyZWFkKGRldiwKLQkJCQkoKGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKKwkJCQkoKHN0cnVjdCBkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCiAJCQkJCQlncm91cCktPnByaXZhdGUpLT5SRENhcEZsZyk7CiAKLQkJCS8vY2hlY2sgaWYgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBmcm9tIGRpbyBjaGFubmVscworCQkJLyogY2hlY2sgaWYgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBmcm9tIGRpbyBjaGFubmVscyAqLwogCQkJaWYgKGlycWJpdCkgewogCQkJCXM2MjZfZGlvX3Jlc2V0X2lycShkZXYsIGdyb3VwLCBpcnFiaXQpOwogCQkJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBjaGVjayBpbnRlcnJ1cHQgb24gZGlvIGdyb3VwICVkICVkXG4iLCBncm91cCwgaSk7CiAJCQkJaWYgKGRldnByaXYtPmFpX2NtZF9ydW5uaW5nKSB7Ci0JCQkJCS8vY2hlY2sgaWYgaW50ZXJydXB0IGlzIGFuIGFpIGFjcXVpc2l0aW9uIHN0YXJ0IHRyaWdnZXIKKwkJCQkJLyogY2hlY2sgaWYgaW50ZXJydXB0IGlzIGFuIGFpIGFjcXVpc2l0aW9uIHN0YXJ0IHRyaWdnZXIgKi8KIAkJCQkJaWYgKChpcnFiaXQgPj4gKGNtZC0+c3RhcnRfYXJnIC0KIAkJCQkJCQkJKDE2ICogZ3JvdXApKSkKIAkJCQkJCT09IDEKIAkJCQkJCSYmIGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CiAJCQkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogRWRnZSBjYXB0dXJlIGludGVycnVwdCByZWNpZXZlZCBmcm9tIGNoYW5uZWwgJWRcbiIsIGNtZC0+c3RhcnRfYXJnKTsKIAotCQkJCQkJLy8gU3RhcnQgZXhlY3V0aW5nIHRoZSBSUFMgcHJvZ3JhbS4KKwkJCQkJCS8qICBTdGFydCBleGVjdXRpbmcgdGhlIFJQUyBwcm9ncmFtLiAqLwogCQkJCQkJTUNfRU5BQkxFKFBfTUMxLCBNQzFfRVJQUzEpOwogCiAJCQkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogYXF1aXNpdGlvbiBzdGFydCB0cmlnZ2VyZWQhISFcbiIpOwpAQCAtMTExMCw3ICsxMTE2LDcgQEAKIAkJCQkJCVRSSUdfRVhUKSB7CiAJCQkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogRWRnZSBjYXB0dXJlIGludGVycnVwdCByZWNpZXZlZCBmcm9tIGNoYW5uZWwgJWRcbiIsIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOwogCi0JCQkJCQkvLyBUcmlnZ2VyIEFEQyBzY2FuIGxvb3Agc3RhcnQgYnkgc2V0dGluZyBSUFMgU2lnbmFsIDAuCisJCQkJCQkvKiAgVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLiAqLwogCQkJCQkJTUNfRU5BQkxFKFBfTUMyLCBNQzJfQURDX1JQUyk7CiAKIAkJCQkJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBzY2FuIHRyaWdnZXJlZCEhISAlZFxuIiwgZGV2cHJpdi0+YWlfc2FtcGxlX2NvdW50KTsKQEAgLTExNTEsNyArMTE1Nyw3IEBACiAJCQkJCQlUUklHX0VYVCkgewogCQkJCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IEVkZ2UgY2FwdHVyZSBpbnRlcnJ1cHQgcmVjaWV2ZWQgZnJvbSBjaGFubmVsICVkXG4iLCBjbWQtPmNvbnZlcnRfYXJnKTsKIAotCQkJCQkJLy8gVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLgorCQkJCQkJLyogIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4gKi8KIAkJCQkJCU1DX0VOQUJMRShQX01DMiwgTUMyX0FEQ19SUFMpOwogCiAJCQkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogYWRjIGNvbnZlcnQgdHJpZ2dlcmVkISEhXG4iKTsKQEAgLTExNzUsMTAgKzExODEsMTAgQEAKIAkJCX0KIAkJfQogCi0JCS8vcmVhZCBpbnRlcnJ1cHQgdHlwZQorCQkvKiByZWFkIGludGVycnVwdCB0eXBlICovCiAJCWlycWJpdCA9IERFQklyZWFkKGRldiwgTFBfUkRNSVNDMik7CiAKLQkJLy9jaGVjayBpbnRlcnJ1cHQgb24gY291bnRlcnMKKwkJLyogY2hlY2sgaW50ZXJydXB0IG9uIGNvdW50ZXJzICovCiAJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBjaGVjayBjb3VudGVycyBpbnRlcnJ1cHQgJWRcbiIsCiAJCQlpcnFiaXQpOwogCkBAIC0xMTg2LDM1ICsxMTkyLDM1IEBACiAJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogaW50ZXJydXB0IG9uIGNvdW50ZXIgMUEgb3ZlcmZsb3dcbiIpOwogCQkJayA9ICZlbmNwcml2WzBdOwogCi0JCQkvL2NsZWFyIGludGVycnVwdCBjYXB0dXJlIGZsYWcKKwkJCS8qIGNsZWFyIGludGVycnVwdCBjYXB0dXJlIGZsYWcgKi8KIAkJCWstPlJlc2V0Q2FwRmxhZ3MoZGV2LCBrKTsKIAkJfQogCQlpZiAoaXJxYml0ICYgSVJRX0NPSU5UMkEpIHsKIAkJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBpbnRlcnJ1cHQgb24gY291bnRlciAyQSBvdmVyZmxvd1xuIik7CiAJCQlrID0gJmVuY3ByaXZbMV07CiAKLQkJCS8vY2xlYXIgaW50ZXJydXB0IGNhcHR1cmUgZmxhZworCQkJLyogY2xlYXIgaW50ZXJydXB0IGNhcHR1cmUgZmxhZyAqLwogCQkJay0+UmVzZXRDYXBGbGFncyhkZXYsIGspOwogCQl9CiAJCWlmIChpcnFiaXQgJiBJUlFfQ09JTlQzQSkgewogCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IGludGVycnVwdCBvbiBjb3VudGVyIDNBIG92ZXJmbG93XG4iKTsKIAkJCWsgPSAmZW5jcHJpdlsyXTsKIAotCQkJLy9jbGVhciBpbnRlcnJ1cHQgY2FwdHVyZSBmbGFnCisJCQkvKiBjbGVhciBpbnRlcnJ1cHQgY2FwdHVyZSBmbGFnICovCiAJCQlrLT5SZXNldENhcEZsYWdzKGRldiwgayk7CiAJCX0KIAkJaWYgKGlycWJpdCAmIElSUV9DT0lOVDFCKSB7CiAJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogaW50ZXJydXB0IG9uIGNvdW50ZXIgMUIgb3ZlcmZsb3dcbiIpOwogCQkJayA9ICZlbmNwcml2WzNdOwogCi0JCQkvL2NsZWFyIGludGVycnVwdCBjYXB0dXJlIGZsYWcKKwkJCS8qIGNsZWFyIGludGVycnVwdCBjYXB0dXJlIGZsYWcgKi8KIAkJCWstPlJlc2V0Q2FwRmxhZ3MoZGV2LCBrKTsKIAkJfQogCQlpZiAoaXJxYml0ICYgSVJRX0NPSU5UMkIpIHsKIAkJCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBpbnRlcnJ1cHQgb24gY291bnRlciAyQiBvdmVyZmxvd1xuIik7CiAJCQlrID0gJmVuY3ByaXZbNF07CiAKLQkJCS8vY2xlYXIgaW50ZXJydXB0IGNhcHR1cmUgZmxhZworCQkJLyogY2xlYXIgaW50ZXJydXB0IGNhcHR1cmUgZmxhZyAqLwogCQkJay0+UmVzZXRDYXBGbGFncyhkZXYsIGspOwogCiAJCQlpZiAoZGV2cHJpdi0+YWlfY29udmVydF9jb3VudCA+IDApIHsKQEAgLTEyMjUsNyArMTIzMSw3IEBACiAJCQkJaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikgewogCQkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogY29udmVyIHRpbWVyIHRyaWdnZXIhISEgJWRcbiIsIGRldnByaXYtPmFpX2NvbnZlcnRfY291bnQpOwogCi0JCQkJCS8vIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4KKwkJCQkJLyogIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4gKi8KIAkJCQkJTUNfRU5BQkxFKFBfTUMyLCBNQzJfQURDX1JQUyk7CiAJCQkJfQogCQkJfQpAQCAtMTIzNCwxMyArMTI0MCwxMyBAQAogCQkJREVCVUcoInM2MjZfaXJxX2hhbmRsZXI6IGludGVycnVwdCBvbiBjb3VudGVyIDNCIG92ZXJmbG93XG4iKTsKIAkJCWsgPSAmZW5jcHJpdls1XTsKIAotCQkJLy9jbGVhciBpbnRlcnJ1cHQgY2FwdHVyZSBmbGFnCisJCQkvKiBjbGVhciBpbnRlcnJ1cHQgY2FwdHVyZSBmbGFnICovCiAJCQlrLT5SZXNldENhcEZsYWdzKGRldiwgayk7CiAKIAkJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKIAkJCQlERUJVRygiczYyNl9pcnFfaGFuZGxlcjogc2NhbiB0aW1lciB0cmlnZ2VyISEhXG4iKTsKIAotCQkJCS8vIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4KKwkJCQkvKiAgVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLiAqLwogCQkJCU1DX0VOQUJMRShQX01DMiwgTUMyX0FEQ19SUFMpOwogCQkJfQogCkBAIC0xMjUzLDcgKzEyNTksNyBAQAogCQl9CiAJfQogCi0JLy9lbmFibGUgaW50ZXJydXB0CisJLyogZW5hYmxlIGludGVycnVwdCAqLwogCXdyaXRlbChpcnFzdGF0dXMsIGRldnByaXYtPmJhc2VfYWRkciArIFBfSUVSKTsKIAogCURFQlVHKCJzNjI2X2lycV9oYW5kbGVyOiBleGl0IGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUuXG4iKTsKQEAgLTEyNjIsMjEgKzEyNjgsMjEgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgczYyNl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlpZiAoZGV2cHJpdikgewotCQkvL3N0b3AgYWlfY29tbWFuZAorCQkvKiBzdG9wIGFpX2NvbW1hbmQgKi8KIAkJZGV2cHJpdi0+YWlfY21kX3J1bm5pbmcgPSAwOwogCiAJCWlmIChkZXZwcml2LT5iYXNlX2FkZHIpIHsKLQkJCS8vaW50ZXJydXB0IG1hc2sKLQkJCVdSNzE0NihQX0lFUiwgMCk7CS8vIERpc2FibGUgbWFzdGVyIGludGVycnVwdC4KLQkJCVdSNzE0NihQX0lTUiwgSVJRX0dQSU8zIHwgSVJRX1JQUzEpOwkvLyBDbGVhciBib2FyZCdzIElSUSBzdGF0dXMgZmxhZy4KKwkJCS8qIGludGVycnVwdCBtYXNrICovCisJCQlXUjcxNDYoUF9JRVIsIDApOwkvKiAgRGlzYWJsZSBtYXN0ZXIgaW50ZXJydXB0LiAqLworCQkJV1I3MTQ2KFBfSVNSLCBJUlFfR1BJTzMgfCBJUlFfUlBTMSk7CS8qICBDbGVhciBib2FyZCdzIElSUSBzdGF0dXMgZmxhZy4gKi8KIAotCQkJLy8gRGlzYWJsZSB0aGUgd2F0Y2hkb2cgdGltZXIgYW5kIGJhdHRlcnkgY2hhcmdlci4KKwkJCS8qICBEaXNhYmxlIHRoZSB3YXRjaGRvZyB0aW1lciBhbmQgYmF0dGVyeSBjaGFyZ2VyLiAqLwogCQkJV3JpdGVNSVNDMihkZXYsIDApOwogCi0JCQkvLyBDbG9zZSBhbGwgaW50ZXJmYWNlcyBvbiA3MTQ2IGRldmljZS4KKwkJCS8qICBDbG9zZSBhbGwgaW50ZXJmYWNlcyBvbiA3MTQ2IGRldmljZS4gKi8KIAkJCVdSNzE0NihQX01DMSwgTUMxX1NIVVRET1dOKTsKIAkJCVdSNzE0NihQX0FDT04xLCBBQ09OMV9CQVNFKTsKIApAQCAtMTI4NCwxOCArMTI5MCwxNSBAQAogCQkJQ2xvc2VETUFCKGRldiwgJmRldnByaXYtPkFOQUJ1ZiwgRE1BQlVGX1NJWkUpOwogCQl9CiAKLQkJaWYgKGRldi0+aXJxKSB7CisJCWlmIChkZXYtPmlycSkKIAkJCWNvbWVkaV9mcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQkJfQogCi0JCWlmIChkZXZwcml2LT5iYXNlX2FkZHIpIHsKKwkJaWYgKGRldnByaXYtPmJhc2VfYWRkcikKIAkJCWlvdW5tYXAoZGV2cHJpdi0+YmFzZV9hZGRyKTsKLQkJfQogCiAJCWlmIChkZXZwcml2LT5wZGV2KSB7Ci0JCQlpZiAoZGV2cHJpdi0+Z290X3JlZ2lvbnMpIHsKKwkJCWlmIChkZXZwcml2LT5nb3RfcmVnaW9ucykKIAkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGRldik7Ci0JCQl9CiAJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wZGV2KTsKIAkJfQogCX0KQEAgLTEzMDgsMjEzICsxMzExLDIyNSBAQAogLyoKICAqIHRoaXMgZnVuY3Rpb25zIGJ1aWxkIHRoZSBSUFMgcHJvZ3JhbSBmb3IgaGFyZHdhcmUgZHJpdmVuIGFjcXVpc3Rpb24KICAqLwotdm9pZCBSZXNldEFEQyhjb21lZGlfZGV2aWNlICogZGV2LCB1aW50OF90ICogcHBsKQordm9pZCBSZXNldEFEQyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50OF90ICpwcGwpCiB7CiAJcmVnaXN0ZXIgdWludDMyX3QgKnBSUFM7CiAJdWludDMyX3QgSm1wQWRyczsKIAl1aW50MTZfdCBpOwogCXVpbnQxNl90IG47CiAJdWludDMyX3QgTG9jYWxQUEw7Ci0JY29tZWRpX2NtZCAqY21kID0gJihkZXYtPnN1YmRldmljZXMtPmFzeW5jLT5jbWQpOworCXN0cnVjdCBjb21lZGlfY21kICpjbWQgPSAmKGRldi0+c3ViZGV2aWNlcy0+YXN5bmMtPmNtZCk7CiAKLQkvLyBTdG9wIFJQUyBwcm9ncmFtIGluIGNhc2UgaXQgaXMgY3VycmVudGx5IHJ1bm5pbmcuCisJLyogIFN0b3AgUlBTIHByb2dyYW0gaW4gY2FzZSBpdCBpcyBjdXJyZW50bHkgcnVubmluZy4gKi8KIAlNQ19ESVNBQkxFKFBfTUMxLCBNQzFfRVJQUzEpOwogCi0JLy8gU2V0IHN0YXJ0aW5nIGxvZ2ljYWwgYWRkcmVzcyB0byB3cml0ZSBSUFMgY29tbWFuZHMuCisJLyogIFNldCBzdGFydGluZyBsb2dpY2FsIGFkZHJlc3MgdG8gd3JpdGUgUlBTIGNvbW1hbmRzLiAqLwogCXBSUFMgPSAodWludDMyX3QgKikgZGV2cHJpdi0+UlBTQnVmLkxvZ2ljYWxCYXNlOwogCi0JLy8gSW5pdGlhbGl6ZSBSUFMgaW5zdHJ1Y3Rpb24gcG9pbnRlci4KKwkvKiAgSW5pdGlhbGl6ZSBSUFMgaW5zdHJ1Y3Rpb24gcG9pbnRlci4gKi8KIAlXUjcxNDYoUF9SUFNBRERSMSwgKHVpbnQzMl90KSBkZXZwcml2LT5SUFNCdWYuUGh5c2ljYWxCYXNlKTsKIAotCS8vIENvbnN0cnVjdCBSUFMgcHJvZ3JhbSBpbiBSUFNCdWYgRE1BIGJ1ZmZlcgorCS8qICBDb25zdHJ1Y3QgUlBTIHByb2dyYW0gaW4gUlBTQnVmIERNQSBidWZmZXIgKi8KIAogCWlmIChjbWQgIT0gTlVMTCAmJiBjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKSB7CiAJCURFQlVHKCJSZXNldEFEQzogc2Nhbl9iZWdpbiBwYXVzZSBpbnNlcnRlZFxuIik7Ci0JCS8vIFdhaXQgZm9yIFN0YXJ0IHRyaWdnZXIuCisJCS8qICBXYWl0IGZvciBTdGFydCB0cmlnZ2VyLiAqLwogCQkqcFJQUysrID0gUlBTX1BBVVNFIHwgUlBTX1NJR0FEQzsKIAkJKnBSUFMrKyA9IFJQU19DTFJTSUdOQUwgfCBSUFNfU0lHQURDOwogCX0KLQkvLyBTQUE3MTQ2IEJVRyBXT1JLQVJPVU5EIERvIGEgZHVtbXkgREVCSSBXcml0ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5Ci0JLy8gYmVjYXVzZSB0aGUgZmlyc3QgUlBTIERFQkkgV3JpdGUgZm9sbG93aW5nIGEgbm9uLVJQUyBERUJJIHdyaXRlCi0JLy8gc2VlbXMgdG8gYWx3YXlzIGZhaWwuICBJZiB3ZSBkb24ndCBkbyB0aGlzIGR1bW15IHdyaXRlLCB0aGUgQURDCi0JLy8gZ2FpbiBtaWdodCBub3QgYmUgc2V0IHRvIHRoZSB2YWx1ZSByZXF1aXJlZCBmb3IgdGhlIGZpcnN0IHNsb3QgaW4KLQkvLyB0aGUgcG9sbCBsaXN0OyB0aGUgQURDIGdhaW4gd291bGQgaW5zdGVhZCByZW1haW4gdW5jaGFuZ2VkIGZyb20KLQkvLyB0aGUgcHJldmlvdXNseSBwcm9ncmFtbWVkIHZhbHVlLgotCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQ01EID4+IDIpOwkvLyBXcml0ZSBERUJJIFdyaXRlIGNvbW1hbmQKLQkvLyBhbmQgYWRkcmVzcyB0byBzaGFkb3cgUkFNLgotCSpwUlBTKysgPSBERUJJX0NNRF9XUldPUkQgfCBMUF9HU0VMOwotCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQUQgPj4gMik7CS8vIFdyaXRlIERFQkkgaW1tZWRpYXRlIGRhdGEKLQkvLyB0byBzaGFkb3cgUkFNOgotCSpwUlBTKysgPSBHU0VMX0JJUE9MQVI1VjsJLy8gYXJiaXRyYXJ5IGltbWVkaWF0ZSBkYXRhCi0JLy8gdmFsdWUuCi0JKnBSUFMrKyA9IFJQU19DTFJTSUdOQUwgfCBSUFNfREVCSTsJLy8gUmVzZXQgInNoYWRvdyBSQU0KLQkvLyB1cGxvYWRlZCIgZmxhZy4KLQkqcFJQUysrID0gUlBTX1VQTE9BRCB8IFJQU19ERUJJOwkvLyBJbnZva2Ugc2hhZG93IFJBTSB1cGxvYWQuCi0JKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19ERUJJOwkvLyBXYWl0IGZvciBzaGFkb3cgdXBsb2FkIHRvIGZpbmlzaC4KIAotCS8vIERpZ2l0aXplIGFsbCBzbG90cyBpbiB0aGUgcG9sbCBsaXN0LiBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEKLQkvLyBmb3IgbG9vcCB0byBsaW1pdCB0aGUgc2xvdCBjb3VudCB0byAxNiBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbgotCS8vIGZvcmdvdCB0byBzZXQgdGhlIEVPUEwgZmxhZyBpbiB0aGUgZmluYWwgc2xvdC4KKwkvKiBTQUE3MTQ2IEJVRyBXT1JLQVJPVU5EIERvIGEgZHVtbXkgREVCSSBXcml0ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5CisJICogYmVjYXVzZSB0aGUgZmlyc3QgUlBTIERFQkkgV3JpdGUgZm9sbG93aW5nIGEgbm9uLVJQUyBERUJJIHdyaXRlCisJICogc2VlbXMgdG8gYWx3YXlzIGZhaWwuICBJZiB3ZSBkb24ndCBkbyB0aGlzIGR1bW15IHdyaXRlLCB0aGUgQURDCisJICogZ2FpbiBtaWdodCBub3QgYmUgc2V0IHRvIHRoZSB2YWx1ZSByZXF1aXJlZCBmb3IgdGhlIGZpcnN0IHNsb3QgaW4KKwkgKiB0aGUgcG9sbCBsaXN0OyB0aGUgQURDIGdhaW4gd291bGQgaW5zdGVhZCByZW1haW4gdW5jaGFuZ2VkIGZyb20KKwkgKiB0aGUgcHJldmlvdXNseSBwcm9ncmFtbWVkIHZhbHVlLgorCSAqLworCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQ01EID4+IDIpOworCS8qIFdyaXRlIERFQkkgV3JpdGUgY29tbWFuZCBhbmQgYWRkcmVzcyB0byBzaGFkb3cgUkFNLiAqLworCisJKnBSUFMrKyA9IERFQklfQ01EX1dSV09SRCB8IExQX0dTRUw7CisJKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0RFQklBRCA+PiAyKTsKKwkvKiAgV3JpdGUgREVCSSBpbW1lZGlhdGUgZGF0YSAgdG8gc2hhZG93IFJBTTogKi8KKworCSpwUlBTKysgPSBHU0VMX0JJUE9MQVI1VjsKKwkvKiAgYXJiaXRyYXJ5IGltbWVkaWF0ZSBkYXRhICB2YWx1ZS4gKi8KKworCSpwUlBTKysgPSBSUFNfQ0xSU0lHTkFMIHwgUlBTX0RFQkk7CisJLyogIFJlc2V0ICJzaGFkb3cgUkFNICB1cGxvYWRlZCIgZmxhZy4gKi8KKwkqcFJQUysrID0gUlBTX1VQTE9BRCB8IFJQU19ERUJJOwkvKiAgSW52b2tlIHNoYWRvdyBSQU0gdXBsb2FkLiAqLworCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfREVCSTsJLyogIFdhaXQgZm9yIHNoYWRvdyB1cGxvYWQgdG8gZmluaXNoLiAqLworCisJLyogRGlnaXRpemUgYWxsIHNsb3RzIGluIHRoZSBwb2xsIGxpc3QuIFRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYQorCSAqIGZvciBsb29wIHRvIGxpbWl0IHRoZSBzbG90IGNvdW50IHRvIDE2IGluIGNhc2UgdGhlIGFwcGxpY2F0aW9uCisJICogZm9yZ290IHRvIHNldCB0aGUgRU9QTCBmbGFnIGluIHRoZSBmaW5hbCBzbG90LgorCSAqLwogCWZvciAoZGV2cHJpdi0+QWRjSXRlbXMgPSAwOyBkZXZwcml2LT5BZGNJdGVtcyA8IDE2OyBkZXZwcml2LT5BZGNJdGVtcysrKSB7Ci0JCS8vIENvbnZlcnQgYXBwbGljYXRpb24ncyBwb2xsIGxpc3QgaXRlbSB0byBwcml2YXRlIGJvYXJkIGNsYXNzCi0JCS8vIGZvcm1hdC4gIEVhY2ggYXBwIHBvbGwgbGlzdCBpdGVtIGlzIGFuIHVpbnQ4X3Qgd2l0aCBmb3JtCi0JCS8vIChFT1BMLHgseCxSQU5HRSxDSEFOPDM6MD4pLCB3aGVyZSBSQU5HRSBjb2RlIGluZGljYXRlcyAwID0KLQkJLy8gKy0xMFYsIDEgPSArLTVWLCBhbmQgRU9QTCA9IEVuZCBvZiBQb2xsIExpc3QgbWFya2VyLgorCSAvKiBDb252ZXJ0IGFwcGxpY2F0aW9uJ3MgcG9sbCBsaXN0IGl0ZW0gdG8gcHJpdmF0ZSBib2FyZCBjbGFzcworCSAgKiBmb3JtYXQuICBFYWNoIGFwcCBwb2xsIGxpc3QgaXRlbSBpcyBhbiB1aW50OF90IHdpdGggZm9ybQorCSAgKiAoRU9QTCx4LHgsUkFOR0UsQ0hBTjwzOjA+KSwgd2hlcmUgUkFOR0UgY29kZSBpbmRpY2F0ZXMgMCA9CisJICAqICstMTBWLCAxID0gKy01ViwgYW5kIEVPUEwgPSBFbmQgb2YgUG9sbCBMaXN0IG1hcmtlci4KKwkgICovCiAJCUxvY2FsUFBMID0KIAkJCSgqcHBsIDw8IDgpIHwgKCpwcGwgJiAweDEwID8gR1NFTF9CSVBPTEFSNVYgOgogCQkJR1NFTF9CSVBPTEFSMTBWKTsKIAotCQkvLyBTd2l0Y2ggQURDIGFuYWxvZyBnYWluLgotCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUNNRCA+PiAyKTsJLy8gV3JpdGUgREVCSSBjb21tYW5kCi0JCS8vIGFuZCBhZGRyZXNzIHRvCi0JCS8vIHNoYWRvdyBSQU0uCisJCS8qICBTd2l0Y2ggQURDIGFuYWxvZyBnYWluLiAqLworCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUNNRCA+PiAyKTsJLyogIFdyaXRlIERFQkkgY29tbWFuZCAqLworCQkvKiAgYW5kIGFkZHJlc3MgdG8gKi8KKwkJLyogIHNoYWRvdyBSQU0uICovCiAJCSpwUlBTKysgPSBERUJJX0NNRF9XUldPUkQgfCBMUF9HU0VMOwotCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUFEID4+IDIpOwkvLyBXcml0ZSBERUJJCi0JCS8vIGltbWVkaWF0ZSBkYXRhIHRvCi0JCS8vIHNoYWRvdyBSQU0uCisJCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQUQgPj4gMik7CS8qICBXcml0ZSBERUJJICovCisJCS8qICBpbW1lZGlhdGUgZGF0YSB0byAqLworCQkvKiAgc2hhZG93IFJBTS4gKi8KIAkJKnBSUFMrKyA9IExvY2FsUFBMOwotCQkqcFJQUysrID0gUlBTX0NMUlNJR05BTCB8IFJQU19ERUJJOwkvLyBSZXNldCAic2hhZG93IFJBTSB1cGxvYWRlZCIKLQkJLy8gZmxhZy4KLQkJKnBSUFMrKyA9IFJQU19VUExPQUQgfCBSUFNfREVCSTsJLy8gSW52b2tlIHNoYWRvdyBSQU0gdXBsb2FkLgotCQkqcFJQUysrID0gUlBTX1BBVVNFIHwgUlBTX0RFQkk7CS8vIFdhaXQgZm9yIHNoYWRvdyB1cGxvYWQgdG8KLQkJLy8gZmluaXNoLgorCQkqcFJQUysrID0gUlBTX0NMUlNJR05BTCB8IFJQU19ERUJJOwkvKiAgUmVzZXQgInNoYWRvdyBSQU0gdXBsb2FkZWQiICovCisJCS8qICBmbGFnLiAqLworCQkqcFJQUysrID0gUlBTX1VQTE9BRCB8IFJQU19ERUJJOwkvKiAgSW52b2tlIHNoYWRvdyBSQU0gdXBsb2FkLiAqLworCQkqcFJQUysrID0gUlBTX1BBVVNFIHwgUlBTX0RFQkk7CS8qICBXYWl0IGZvciBzaGFkb3cgdXBsb2FkIHRvICovCisJCS8qICBmaW5pc2guICovCiAKLQkJLy8gU2VsZWN0IEFEQyBhbmFsb2cgaW5wdXQgY2hhbm5lbC4KLQkJKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0RFQklDTUQgPj4gMik7CS8vIFdyaXRlIERFQkkgY29tbWFuZAotCQkvLyBhbmQgYWRkcmVzcyB0bwotCQkvLyBzaGFkb3cgUkFNLgorCQkvKiAgU2VsZWN0IEFEQyBhbmFsb2cgaW5wdXQgY2hhbm5lbC4gKi8KKwkJKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0RFQklDTUQgPj4gMik7CisJCS8qICBXcml0ZSBERUJJIGNvbW1hbmQgYW5kIGFkZHJlc3MgdG8gIHNoYWRvdyBSQU0uICovCiAJCSpwUlBTKysgPSBERUJJX0NNRF9XUldPUkQgfCBMUF9JU0VMOwotCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfREVCSUFEID4+IDIpOwkvLyBXcml0ZSBERUJJCi0JCS8vIGltbWVkaWF0ZSBkYXRhIHRvCi0JCS8vIHNoYWRvdyBSQU0uCisJCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9ERUJJQUQgPj4gMik7CisJCS8qICBXcml0ZSBERUJJIGltbWVkaWF0ZSBkYXRhIHRvIHNoYWRvdyBSQU0uICovCiAJCSpwUlBTKysgPSBMb2NhbFBQTDsKLQkJKnBSUFMrKyA9IFJQU19DTFJTSUdOQUwgfCBSUFNfREVCSTsJLy8gUmVzZXQgInNoYWRvdyBSQU0gdXBsb2FkZWQiCi0JCS8vIGZsYWcuCi0JCSpwUlBTKysgPSBSUFNfVVBMT0FEIHwgUlBTX0RFQkk7CS8vIEludm9rZSBzaGFkb3cgUkFNIHVwbG9hZC4KLQkJKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19ERUJJOwkvLyBXYWl0IGZvciBzaGFkb3cgdXBsb2FkIHRvCi0JCS8vIGZpbmlzaC4KKwkJKnBSUFMrKyA9IFJQU19DTFJTSUdOQUwgfCBSUFNfREVCSTsKKwkJLyogIFJlc2V0ICJzaGFkb3cgUkFNIHVwbG9hZGVkIiAgZmxhZy4gKi8KIAotCQkvLyBEZWxheSBhdCBsZWFzdCAxMCBtaWNyb3NlY29uZHMgZm9yIGFuYWxvZyBpbnB1dCBzZXR0bGluZy4KLQkJLy8gSW5zdGVhZCBvZiBwYWRkaW5nIHdpdGggTk9Qcywgd2UgdXNlIFJQU19KVU1QIGluc3RydWN0aW9ucwotCQkvLyBoZXJlOyB0aGlzIGFsbG93cyB1cyB0byBwcm9kdWNlIGEgbG9uZ2VyIGRlbGF5IHRoYW4gaXMKLQkJLy8gcG9zc2libGUgd2l0aCBOT1BzIGJlY2F1c2UgZWFjaCBSUFNfSlVNUCBmbHVzaGVzIHRoZSBSUFMnCi0JCS8vIGluc3RydWN0aW9uIHByZWZldGNoIHBpcGVsaW5lLgorCQkqcFJQUysrID0gUlBTX1VQTE9BRCB8IFJQU19ERUJJOworCQkvKiAgSW52b2tlIHNoYWRvdyBSQU0gdXBsb2FkLiAqLworCisJCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfREVCSTsKKwkJLyogIFdhaXQgZm9yIHNoYWRvdyB1cGxvYWQgdG8gZmluaXNoLiAqLworCisJCS8qIERlbGF5IGF0IGxlYXN0IDEwIG1pY3Jvc2Vjb25kcyBmb3IgYW5hbG9nIGlucHV0IHNldHRsaW5nLgorCQkgKiBJbnN0ZWFkIG9mIHBhZGRpbmcgd2l0aCBOT1BzLCB3ZSB1c2UgUlBTX0pVTVAgaW5zdHJ1Y3Rpb25zCisJCSAqIGhlcmU7IHRoaXMgYWxsb3dzIHVzIHRvIHByb2R1Y2UgYSBsb25nZXIgZGVsYXkgdGhhbiBpcworCQkgKiBwb3NzaWJsZSB3aXRoIE5PUHMgYmVjYXVzZSBlYWNoIFJQU19KVU1QIGZsdXNoZXMgdGhlIFJQUycKKwkJICogaW5zdHJ1Y3Rpb24gcHJlZmV0Y2ggcGlwZWxpbmUuCisJCSAqLwogCQlKbXBBZHJzID0KIAkJCSh1aW50MzJfdCkgZGV2cHJpdi0+UlBTQnVmLlBoeXNpY2FsQmFzZSArCiAJCQkodWludDMyX3QpICgodW5zaWduZWQgbG9uZylwUlBTIC0KIAkJCSh1bnNpZ25lZCBsb25nKWRldnByaXYtPlJQU0J1Zi5Mb2dpY2FsQmFzZSk7CiAJCWZvciAoaSA9IDA7IGkgPCAoMTAgKiBSUFNDTEtfUEVSX1VTIC8gMik7IGkrKykgewotCQkJSm1wQWRycyArPSA4OwkvLyBSZXBlYXQgdG8gaW1wbGVtZW50IHRpbWUgZGVsYXk6Ci0JCQkqcFJQUysrID0gUlBTX0pVTVA7CS8vIEp1bXAgdG8gbmV4dCBSUFMgaW5zdHJ1Y3Rpb24uCisJCQlKbXBBZHJzICs9IDg7CS8qICBSZXBlYXQgdG8gaW1wbGVtZW50IHRpbWUgZGVsYXk6ICovCisJCQkqcFJQUysrID0gUlBTX0pVTVA7CS8qICBKdW1wIHRvIG5leHQgUlBTIGluc3RydWN0aW9uLiAqLwogCQkJKnBSUFMrKyA9IEptcEFkcnM7CiAJCX0KIAogCQlpZiAoY21kICE9IE5VTEwgJiYgY21kLT5jb252ZXJ0X3NyYyAhPSBUUklHX05PVykgewogCQkJREVCVUcoIlJlc2V0QURDOiBjb252ZXJ0IHBhdXNlIGluc2VydGVkXG4iKTsKLQkJCS8vIFdhaXQgZm9yIFN0YXJ0IHRyaWdnZXIuCisJCQkvKiAgV2FpdCBmb3IgU3RhcnQgdHJpZ2dlci4gKi8KIAkJCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfU0lHQURDOwogCQkJKnBSUFMrKyA9IFJQU19DTFJTSUdOQUwgfCBSUFNfU0lHQURDOwogCQl9Ci0JCS8vIFN0YXJ0IEFEQyBieSBwdWxzaW5nIEdQSU8xLgotCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfR1BJTyA+PiAyKTsJLy8gQmVnaW4gQURDIFN0YXJ0IHB1bHNlLgorCQkvKiAgU3RhcnQgQURDIGJ5IHB1bHNpbmcgR1BJTzEuICovCisJCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9HUElPID4+IDIpOwkvKiAgQmVnaW4gQURDIFN0YXJ0IHB1bHNlLiAqLwogCQkqcFJQUysrID0gR1BJT19CQVNFIHwgR1BJTzFfTE87CiAJCSpwUlBTKysgPSBSUFNfTk9QOwotCQkvLyBWRVJTSU9OIDIuMDMgQ0hBTkdFOiBTVFJFVENIIE9VVCBBREMgU1RBUlQgUFVMU0UuCi0JCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9HUElPID4+IDIpOwkvLyBFbmQgQURDIFN0YXJ0IHB1bHNlLgorCQkvKiAgVkVSU0lPTiAyLjAzIENIQU5HRTogU1RSRVRDSCBPVVQgQURDIFNUQVJUIFBVTFNFLiAqLworCQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfR1BJTyA+PiAyKTsJLyogIEVuZCBBREMgU3RhcnQgcHVsc2UuICovCiAJCSpwUlBTKysgPSBHUElPX0JBU0UgfCBHUElPMV9ISTsKIAotCQkvLyBXYWl0IGZvciBBREMgdG8gY29tcGxldGUgKEdQSU8yIGlzIGFzc2VydGVkIGhpZ2ggd2hlbiBBREMgbm90Ci0JCS8vIGJ1c3kpIGFuZCBmb3IgZGF0YSBmcm9tIHByZXZpb3VzIGNvbnZlcnNpb24gdG8gc2hpZnQgaW50byBGQgotCQkvLyBCVUZGRVIgMSByZWdpc3Rlci4KLQkJKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19HUElPMjsJLy8gV2FpdCBmb3IgQURDIGRvbmUuCisJCS8qIFdhaXQgZm9yIEFEQyB0byBjb21wbGV0ZSAoR1BJTzIgaXMgYXNzZXJ0ZWQgaGlnaCB3aGVuIEFEQyBub3QKKwkJICogYnVzeSkgYW5kIGZvciBkYXRhIGZyb20gcHJldmlvdXMgY29udmVyc2lvbiB0byBzaGlmdCBpbnRvIEZCCisJCSAqIEJVRkZFUiAxIHJlZ2lzdGVyLgorCQkgKi8KKwkJKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19HUElPMjsJLyogIFdhaXQgZm9yIEFEQyBkb25lLiAqLwogCi0JCS8vIFRyYW5zZmVyIEFEQyBkYXRhIGZyb20gRkIgQlVGRkVSIDEgcmVnaXN0ZXIgdG8gRE1BIGJ1ZmZlci4KKwkJLyogIFRyYW5zZmVyIEFEQyBkYXRhIGZyb20gRkIgQlVGRkVSIDEgcmVnaXN0ZXIgdG8gRE1BIGJ1ZmZlci4gKi8KIAkJKnBSUFMrKyA9IFJQU19TVFJFRyB8IChCVUdGSVhfU1RSRUcoUF9GQl9CVUZGRVIxKSA+PiAyKTsKIAkJKnBSUFMrKyA9CiAJCQkodWludDMyX3QpIGRldnByaXYtPkFOQUJ1Zi5QaHlzaWNhbEJhc2UgKwogCQkJKGRldnByaXYtPkFkY0l0ZW1zIDw8IDIpOwogCi0JCS8vIElmIHRoaXMgc2xvdCdzIEVuZE9mUG9sbExpc3QgZmxhZyBpcyBzZXQsIGFsbCBjaGFubmVscyBoYXZlCi0JCS8vIG5vdyBiZWVuIHByb2Nlc3NlZC4KKwkJLyogIElmIHRoaXMgc2xvdCdzIEVuZE9mUG9sbExpc3QgZmxhZyBpcyBzZXQsIGFsbCBjaGFubmVscyBoYXZlICovCisJCS8qICBub3cgYmVlbiBwcm9jZXNzZWQuICovCiAJCWlmICgqcHBsKysgJiBFT1BMKSB7Ci0JCQlkZXZwcml2LT5BZGNJdGVtcysrOwkvLyBBZGp1c3QgcG9sbCBsaXN0IGl0ZW0gY291bnQuCi0JCQlicmVhazsJLy8gRXhpdCBwb2xsIGxpc3QgcHJvY2Vzc2luZyBsb29wLgorCQkJZGV2cHJpdi0+QWRjSXRlbXMrKzsJLyogIEFkanVzdCBwb2xsIGxpc3QgaXRlbSBjb3VudC4gKi8KKwkJCWJyZWFrOwkvKiAgRXhpdCBwb2xsIGxpc3QgcHJvY2Vzc2luZyBsb29wLiAqLwogCQl9CiAJfQogCURFQlVHKCJSZXNldEFEQzogQURDIGl0ZW1zICVkIFxuIiwgZGV2cHJpdi0+QWRjSXRlbXMpOwogCi0JLy8gVkVSU0lPTiAyLjAxIENIQU5HRTogREVMQVkgQ0hBTkdFRCBGUk9NIDI1ME5TIHRvIDJVUy4gIEFsbG93IHRoZQotCS8vIEFEQyB0byBzdGFiaWxpemUgZm9yIDIgbWljcm9zZWNvbmRzIGJlZm9yZSBzdGFydGluZyB0aGUgZmluYWwKLQkvLyAoZHVtbXkpIGNvbnZlcnNpb24uICBUaGlzIGRlbGF5IGlzIG5lY2Vzc2FyeSB0byBhbGxvdyBzdWZmaWNpZW50Ci0JLy8gdGltZSBiZXR3ZWVuIGxhc3QgY29udmVyc2lvbiBmaW5pc2hlZCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBkdW1teQotCS8vIGNvbnZlcnNpb24uICBXaXRob3V0IHRoaXMgZGVsYXksIHRoZSBsYXN0IGNvbnZlcnNpb24ncyBkYXRhIHZhbHVlCi0JLy8gaXMgc29tZXRpbWVzIHNldCB0byB0aGUgcHJldmlvdXMgY29udmVyc2lvbidzIGRhdGEgdmFsdWUuCisJLyogVkVSU0lPTiAyLjAxIENIQU5HRTogREVMQVkgQ0hBTkdFRCBGUk9NIDI1ME5TIHRvIDJVUy4gIEFsbG93IHRoZQorCSAqIEFEQyB0byBzdGFiaWxpemUgZm9yIDIgbWljcm9zZWNvbmRzIGJlZm9yZSBzdGFydGluZyB0aGUgZmluYWwKKwkgKiAoZHVtbXkpIGNvbnZlcnNpb24uICBUaGlzIGRlbGF5IGlzIG5lY2Vzc2FyeSB0byBhbGxvdyBzdWZmaWNpZW50CisJICogdGltZSBiZXR3ZWVuIGxhc3QgY29udmVyc2lvbiBmaW5pc2hlZCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBkdW1teQorCSAqIGNvbnZlcnNpb24uICBXaXRob3V0IHRoaXMgZGVsYXksIHRoZSBsYXN0IGNvbnZlcnNpb24ncyBkYXRhIHZhbHVlCisJICogaXMgc29tZXRpbWVzIHNldCB0byB0aGUgcHJldmlvdXMgY29udmVyc2lvbidzIGRhdGEgdmFsdWUuCisJICovCiAJZm9yIChuID0gMDsgbiA8ICgyICogUlBTQ0xLX1BFUl9VUyk7IG4rKykKIAkJKnBSUFMrKyA9IFJQU19OT1A7CiAKLQkvLyBTdGFydCBhIGR1bW15IGNvbnZlcnNpb24gdG8gY2F1c2UgdGhlIGRhdGEgZnJvbSB0aGUgbGFzdAotCS8vIGNvbnZlcnNpb24gb2YgaW50ZXJlc3QgdG8gYmUgc2hpZnRlZCBpbi4KLQkqcFJQUysrID0gUlBTX0xEUkVHIHwgKFBfR1BJTyA+PiAyKTsJLy8gQmVnaW4gQURDIFN0YXJ0IHB1bHNlLgorCS8qIFN0YXJ0IGEgZHVtbXkgY29udmVyc2lvbiB0byBjYXVzZSB0aGUgZGF0YSBmcm9tIHRoZSBsYXN0CisJICogY29udmVyc2lvbiBvZiBpbnRlcmVzdCB0byBiZSBzaGlmdGVkIGluLgorCSAqLworCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9HUElPID4+IDIpOwkvKiAgQmVnaW4gQURDIFN0YXJ0IHB1bHNlLiAqLwogCSpwUlBTKysgPSBHUElPX0JBU0UgfCBHUElPMV9MTzsKIAkqcFJQUysrID0gUlBTX05PUDsKLQkvLyBWRVJTSU9OIDIuMDMgQ0hBTkdFOiBTVFJFVENIIE9VVCBBREMgU1RBUlQgUFVMU0UuCi0JKnBSUFMrKyA9IFJQU19MRFJFRyB8IChQX0dQSU8gPj4gMik7CS8vIEVuZCBBREMgU3RhcnQgcHVsc2UuCisJLyogVkVSU0lPTiAyLjAzIENIQU5HRTogU1RSRVRDSCBPVVQgQURDIFNUQVJUIFBVTFNFLiAqLworCSpwUlBTKysgPSBSUFNfTERSRUcgfCAoUF9HUElPID4+IDIpOwkvKiAgRW5kIEFEQyBTdGFydCBwdWxzZS4gKi8KIAkqcFJQUysrID0gR1BJT19CQVNFIHwgR1BJTzFfSEk7CiAKLQkvLyBXYWl0IGZvciB0aGUgZGF0YSBmcm9tIHRoZSBsYXN0IGNvbnZlcnNpb24gb2YgaW50ZXJlc3QgdG8gYXJyaXZlCi0JLy8gaW4gRkIgQlVGRkVSIDEgcmVnaXN0ZXIuCi0JKnBSUFMrKyA9IFJQU19QQVVTRSB8IFJQU19HUElPMjsJLy8gV2FpdCBmb3IgQURDIGRvbmUuCisJLyogV2FpdCBmb3IgdGhlIGRhdGEgZnJvbSB0aGUgbGFzdCBjb252ZXJzaW9uIG9mIGludGVyZXN0IHRvIGFycml2ZQorCSAqIGluIEZCIEJVRkZFUiAxIHJlZ2lzdGVyLgorCSAqLworCSpwUlBTKysgPSBSUFNfUEFVU0UgfCBSUFNfR1BJTzI7CS8qICBXYWl0IGZvciBBREMgZG9uZS4gKi8KIAotCS8vIFRyYW5zZmVyIGZpbmFsIEFEQyBkYXRhIGZyb20gRkIgQlVGRkVSIDEgcmVnaXN0ZXIgdG8gRE1BIGJ1ZmZlci4KLQkqcFJQUysrID0gUlBTX1NUUkVHIHwgKEJVR0ZJWF9TVFJFRyhQX0ZCX0JVRkZFUjEpID4+IDIpOwkvLworCS8qICBUcmFuc2ZlciBmaW5hbCBBREMgZGF0YSBmcm9tIEZCIEJVRkZFUiAxIHJlZ2lzdGVyIHRvIERNQSBidWZmZXIuICovCisJKnBSUFMrKyA9IFJQU19TVFJFRyB8IChCVUdGSVhfU1RSRUcoUF9GQl9CVUZGRVIxKSA+PiAyKTsJLyogICovCiAJKnBSUFMrKyA9CiAJCSh1aW50MzJfdCkgZGV2cHJpdi0+QU5BQnVmLlBoeXNpY2FsQmFzZSArCiAJCShkZXZwcml2LT5BZGNJdGVtcyA8PCAyKTsKIAotCS8vIEluZGljYXRlIEFEQyBzY2FuIGxvb3AgaXMgZmluaXNoZWQuCi0JLy8gKnBSUFMrKz0gUlBTX0NMUlNJR05BTCB8IFJQU19TSUdBREMgOyAgLy8gU2lnbmFsIFJlYWRBREMoKSB0aGF0IHNjYW4gaXMgZG9uZS4KKwkvKiAgSW5kaWNhdGUgQURDIHNjYW4gbG9vcCBpcyBmaW5pc2hlZC4gKi8KKwkvKiAgKnBSUFMrKz0gUlBTX0NMUlNJR05BTCB8IFJQU19TSUdBREMgOyAgLy8gU2lnbmFsIFJlYWRBREMoKSB0aGF0IHNjYW4gaXMgZG9uZS4gKi8KIAotCS8vaW52b2tlIGludGVycnVwdAorCS8qIGludm9rZSBpbnRlcnJ1cHQgKi8KIAlpZiAoZGV2cHJpdi0+YWlfY21kX3J1bm5pbmcgPT0gMSkgewogCQlERUJVRygiUmVzZXRBREM6IGluc2VydCBpcnEgaW4gQURDIFJQUyB0YXNrXG4iKTsKIAkJKnBSUFMrKyA9IFJQU19JUlE7CiAJfQotCS8vIFJlc3RhcnQgUlBTIHByb2dyYW0gYXQgaXRzIGJlZ2lubmluZy4KLQkqcFJQUysrID0gUlBTX0pVTVA7CS8vIEJyYW5jaCB0byBzdGFydCBvZiBSUFMgcHJvZ3JhbS4KKwkvKiAgUmVzdGFydCBSUFMgcHJvZ3JhbSBhdCBpdHMgYmVnaW5uaW5nLiAqLworCSpwUlBTKysgPSBSUFNfSlVNUDsJLyogIEJyYW5jaCB0byBzdGFydCBvZiBSUFMgcHJvZ3JhbS4gKi8KIAkqcFJQUysrID0gKHVpbnQzMl90KSBkZXZwcml2LT5SUFNCdWYuUGh5c2ljYWxCYXNlOwogCi0JLy8gRW5kIG9mIFJQUyBwcm9ncmFtIGJ1aWxkCi0JLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLyogIEVuZCBvZiBSUFMgcHJvZ3JhbSBidWlsZCAqLwogfQogCiAvKiBUTyBDT01QTEVURSwgSUYgTkVDRVNTQVJZICovCi1zdGF0aWMgaW50IHM2MjZfYWlfaW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHM2MjZfYWlfaW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotLyogc3RhdGljIGludCBzNjI2X2FpX3JpbnNuKGNvbWVkaV9kZXZpY2UgKmRldixjb21lZGlfc3ViZGV2aWNlICpzLGNvbWVkaV9pbnNuICppbnNuLGxzYW1wbF90ICpkYXRhKSAqLworLyogc3RhdGljIGludCBzNjI2X2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLHVuc2lnbmVkIGludCAqZGF0YSkgKi8KIC8qIHsgKi8KIC8qICAgcmVnaXN0ZXIgdWludDhfdAlpOyAqLwogLyogICByZWdpc3RlciBpbnQzMl90CSpyZWFkYWRkcjsgKi8KIAogLyogICBERUJVRygiYXM2MjZfYWlfcmluc246IGFpX3JpbnNuIGVudGVyIFxuIik7ICAqLwogCi0vKiAgIC8vIFRyaWdnZXIgQURDIHNjYW4gbG9vcCBzdGFydCBieSBzZXR0aW5nIFJQUyBTaWduYWwgMC4gKi8KKy8qICAgVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLiAqLwogLyogICBNQ19FTkFCTEUoIFBfTUMyLCBNQzJfQURDX1JQUyApOyAqLwogCi0vKiAgIC8vIFdhaXQgdW50aWwgQURDIHNjYW4gbG9vcCBpcyBmaW5pc2hlZCAoUlBTIFNpZ25hbCAwIHJlc2V0KS4gKi8KKy8qICAgV2FpdCB1bnRpbCBBREMgc2NhbiBsb29wIGlzIGZpbmlzaGVkIChSUFMgU2lnbmFsIDAgcmVzZXQpLiAqLwogLyogICB3aGlsZSAoIE1DX1RFU1QoIFBfTUMyLCBNQzJfQURDX1JQUyApICk7ICovCiAKLS8qICAgLy8gSW5pdCBwdHIgdG8gRE1BIGJ1ZmZlciB0aGF0IGhvbGRzIG5ldyBBREMgZGF0YS4gIFdlIHNraXAgdGhlICovCi0vKiAgIC8vIGZpcnN0IHVpbnQxNl90IGluIHRoZSBidWZmZXIgYmVjYXVzZSBpdCBjb250YWlucyBqdW5rIGRhdGEgZnJvbSAqLwotLyogICAvLyB0aGUgZmluYWwgQURDIG9mIHRoZSBwcmV2aW91cyBwb2xsIGxpc3Qgc2Nhbi4gKi8KKy8qIEluaXQgcHRyIHRvIERNQSBidWZmZXIgdGhhdCBob2xkcyBuZXcgQURDIGRhdGEuICBXZSBza2lwIHRoZQorICogZmlyc3QgdWludDE2X3QgaW4gdGhlIGJ1ZmZlciBiZWNhdXNlIGl0IGNvbnRhaW5zIGp1bmsgZGF0YSBmcm9tCisgKiB0aGUgZmluYWwgQURDIG9mIHRoZSBwcmV2aW91cyBwb2xsIGxpc3Qgc2Nhbi4KKyAqLwogLyogICByZWFkYWRkciA9ICh1aW50MzJfdCAqKWRldnByaXYtPkFOQUJ1Zi5Mb2dpY2FsQmFzZSArIDE7ICovCiAKLS8qICAgLy8gQ29udmVydCBBREMgZGF0YSB0byAxNi1iaXQgaW50ZWdlciB2YWx1ZXMgYW5kIGNvcHkgdG8gYXBwbGljYXRpb24gKi8KLS8qICAgLy8gYnVmZmVyLgkgKi8KKy8qICBDb252ZXJ0IEFEQyBkYXRhIHRvIDE2LWJpdCBpbnRlZ2VyIHZhbHVlcyBhbmQgY29weSB0byBhcHBsaWNhdGlvbiBidWZmZXIuICovCiAvKiAgIGZvciAoIGkgPSAwOyBpIDwgZGV2cHJpdi0+QWRjSXRlbXM7IGkrKyApIHsgKi8KIC8qICAgICAqZGF0YSA9IHM2MjZfYWlfcmVnX3RvX3VpbnQoICpyZWFkYWRkcisrICk7ICovCiAvKiAgICAgREVCVUcoInM2MjZfYWlfcmluc246IGRhdGEgJWQgXG4iLCpkYXRhKTsgKi8KQEAgLTE1MjUsOCArMTU0MCw4IEBACiAvKiAgIHJldHVybiBpOyAqLwogLyogfSAqLwogCi1zdGF0aWMgaW50IHM2MjZfYWlfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBzNjI2X2FpX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAl1aW50MTZfdCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJdWludDE2X3QgcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CkBAIC0xNTM0LDg2ICsxNTQ5LDg3IEBACiAJdWludDMyX3QgR3Bpb0ltYWdlOwogCWludCBuOwogCi0vKiAgIC8vaW50ZXJydXB0IGNhbGwgdGVzdCAgKi8KLS8qICAgd3JpdGVsKElSUV9HUElPMyxkZXZwcml2LT5iYXNlX2FkZHIrUF9QU1IpOyAvL1dyaXRpbmcgYSBsb2dpY2FsIDEgKi8KLS8qIAkJCQkJICAgICAvL2ludG8gYW55IG9mIHRoZSBSUFNfUFNSICovCi0vKiAJCQkJCSAgICAgLy9iaXRzIGNhdXNlcyB0aGUgKi8KLS8qIAkJCQkJICAgICAvL2NvcnJlc3BvbmRpbmcgaW50ZXJydXB0ICovCi0vKiAJCQkJCSAgICAgLy90byBiZSBnZW5lcmF0ZWQgaWYgKi8KLS8qIAkJCQkJICAgICAvL2VuYWJsZWQgKi8KKyAvKiBpbnRlcnJ1cHQgY2FsbCB0ZXN0ICAqLworLyogICB3cml0ZWwoSVJRX0dQSU8zLGRldnByaXYtPmJhc2VfYWRkcitQX1BTUik7ICovCisJLyogV3JpdGluZyBhIGxvZ2ljYWwgMSBpbnRvIGFueSBvZiB0aGUgUlBTX1BTUiBiaXRzIGNhdXNlcyB0aGUKKwkgKiBjb3JyZXNwb25kaW5nIGludGVycnVwdCB0byBiZSBnZW5lcmF0ZWQgaWYgZW5hYmxlZAorCSAqLwogCiAJREVCVUcoInM2MjZfYWlfaW5zbl9yZWFkOiBlbnRlcmluZ1xuIik7CiAKLQkvLyBDb252ZXJ0IGFwcGxpY2F0aW9uJ3MgQURDIHNwZWNpZmljYXRpb24gaW50byBmb3JtCi0JLy8gYXBwcm9wcmlhdGUgZm9yIHJlZ2lzdGVyIHByb2dyYW1taW5nLgorCS8qIENvbnZlcnQgYXBwbGljYXRpb24ncyBBREMgc3BlY2lmaWNhdGlvbiBpbnRvIGZvcm0KKwkgKiAgYXBwcm9wcmlhdGUgZm9yIHJlZ2lzdGVyIHByb2dyYW1taW5nLgorCSAqLwogCWlmIChyYW5nZSA9PSAwKQogCQlBZGNTcGVjID0gKGNoYW4gPDwgOCkgfCAoR1NFTF9CSVBPTEFSNVYpOwogCWVsc2UKIAkJQWRjU3BlYyA9IChjaGFuIDw8IDgpIHwgKEdTRUxfQklQT0xBUjEwVik7CiAKLQkvLyBTd2l0Y2ggQURDIGFuYWxvZyBnYWluLgotCURFQkl3cml0ZShkZXYsIExQX0dTRUwsIEFkY1NwZWMpOwkvLyBTZXQgZ2Fpbi4KKwkvKiAgU3dpdGNoIEFEQyBhbmFsb2cgZ2Fpbi4gKi8KKwlERUJJd3JpdGUoZGV2LCBMUF9HU0VMLCBBZGNTcGVjKTsJLyogIFNldCBnYWluLiAqLwogCi0JLy8gU2VsZWN0IEFEQyBhbmFsb2cgaW5wdXQgY2hhbm5lbC4KLQlERUJJd3JpdGUoZGV2LCBMUF9JU0VMLCBBZGNTcGVjKTsJLy8gU2VsZWN0IGNoYW5uZWwuCisJLyogIFNlbGVjdCBBREMgYW5hbG9nIGlucHV0IGNoYW5uZWwuICovCisJREVCSXdyaXRlKGRldiwgTFBfSVNFTCwgQWRjU3BlYyk7CS8qICBTZWxlY3QgY2hhbm5lbC4gKi8KIAogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKIAotCQkvLyBEZWxheSAxMCBtaWNyb3NlY29uZHMgZm9yIGFuYWxvZyBpbnB1dCBzZXR0bGluZy4KKwkJLyogIERlbGF5IDEwIG1pY3Jvc2Vjb25kcyBmb3IgYW5hbG9nIGlucHV0IHNldHRsaW5nLiAqLwogCQljb21lZGlfdWRlbGF5KDEwKTsKIAotCQkvLyBTdGFydCBBREMgYnkgcHVsc2luZyBHUElPMSBsb3cuCisJCS8qICBTdGFydCBBREMgYnkgcHVsc2luZyBHUElPMSBsb3cuICovCiAJCUdwaW9JbWFnZSA9IFJSNzE0NihQX0dQSU8pOwotCQkvLyBBc3NlcnQgQURDIFN0YXJ0IGNvbW1hbmQKKwkJLyogIEFzc2VydCBBREMgU3RhcnQgY29tbWFuZCAqLwogCQlXUjcxNDYoUF9HUElPLCBHcGlvSW1hZ2UgJiB+R1BJTzFfSEkpOwotCQkvLyAgIGFuZCBzdHJldGNoIGl0IG91dC4KKwkJLyogICAgYW5kIHN0cmV0Y2ggaXQgb3V0LiAqLwogCQlXUjcxNDYoUF9HUElPLCBHcGlvSW1hZ2UgJiB+R1BJTzFfSEkpOwogCQlXUjcxNDYoUF9HUElPLCBHcGlvSW1hZ2UgJiB+R1BJTzFfSEkpOwotCQkvLyBOZWdhdGUgQURDIFN0YXJ0IGNvbW1hbmQuCisJCS8qICBOZWdhdGUgQURDIFN0YXJ0IGNvbW1hbmQuICovCiAJCVdSNzE0NihQX0dQSU8sIEdwaW9JbWFnZSB8IEdQSU8xX0hJKTsKIAotCQkvLyBXYWl0IGZvciBBREMgdG8gY29tcGxldGUgKEdQSU8yIGlzIGFzc2VydGVkIGhpZ2ggd2hlbgotCQkvLyBBREMgbm90IGJ1c3kpIGFuZCBmb3IgZGF0YSBmcm9tIHByZXZpb3VzIGNvbnZlcnNpb24gdG8KLQkJLy8gc2hpZnQgaW50byBGQiBCVUZGRVIgMSByZWdpc3Rlci4KKwkJLyogIFdhaXQgZm9yIEFEQyB0byBjb21wbGV0ZSAoR1BJTzIgaXMgYXNzZXJ0ZWQgaGlnaCB3aGVuICovCisJCS8qICBBREMgbm90IGJ1c3kpIGFuZCBmb3IgZGF0YSBmcm9tIHByZXZpb3VzIGNvbnZlcnNpb24gdG8gKi8KKwkJLyogIHNoaWZ0IGludG8gRkIgQlVGRkVSIDEgcmVnaXN0ZXIuICovCiAKLQkJLy8gV2FpdCBmb3IgQURDIGRvbmUuCi0JCXdoaWxlICghKFJSNzE0NihQX1BTUikgJiBQU1JfR1BJTzIpKSA7CisJCS8qICBXYWl0IGZvciBBREMgZG9uZS4gKi8KKwkJd2hpbGUgKCEoUlI3MTQ2KFBfUFNSKSAmIFBTUl9HUElPMikpCisJCQk7CiAKLQkJLy8gRmV0Y2ggQURDIGRhdGEuCisJCS8qICBGZXRjaCBBREMgZGF0YS4gKi8KIAkJaWYgKG4gIT0gMCkKIAkJCWRhdGFbbiAtIDFdID0gczYyNl9haV9yZWdfdG9fdWludChSUjcxNDYoUF9GQl9CVUZGRVIxKSk7CiAKLQkJLy8gQWxsb3cgdGhlIEFEQyB0byBzdGFiaWxpemUgZm9yIDQgbWljcm9zZWNvbmRzIGJlZm9yZQotCQkvLyBzdGFydGluZyB0aGUgbmV4dCAoZmluYWwpIGNvbnZlcnNpb24uICBUaGlzIGRlbGF5IGlzCi0JCS8vIG5lY2Vzc2FyeSB0byBhbGxvdyBzdWZmaWNpZW50IHRpbWUgYmV0d2VlbiBsYXN0Ci0JCS8vIGNvbnZlcnNpb24gZmluaXNoZWQgYW5kIHRoZSBzdGFydCBvZiB0aGUgbmV4dAotCQkvLyBjb252ZXJzaW9uLiAgV2l0aG91dCB0aGlzIGRlbGF5LCB0aGUgbGFzdCBjb252ZXJzaW9uJ3MKLQkJLy8gZGF0YSB2YWx1ZSBpcyBzb21ldGltZXMgc2V0IHRvIHRoZSBwcmV2aW91cwotCQkvLyBjb252ZXJzaW9uJ3MgZGF0YSB2YWx1ZS4KKwkJLyogQWxsb3cgdGhlIEFEQyB0byBzdGFiaWxpemUgZm9yIDQgbWljcm9zZWNvbmRzIGJlZm9yZQorCQkgKiBzdGFydGluZyB0aGUgbmV4dCAoZmluYWwpIGNvbnZlcnNpb24uICBUaGlzIGRlbGF5IGlzCisJCSAqIG5lY2Vzc2FyeSB0byBhbGxvdyBzdWZmaWNpZW50IHRpbWUgYmV0d2VlbiBsYXN0CisJCSAqIGNvbnZlcnNpb24gZmluaXNoZWQgYW5kIHRoZSBzdGFydCBvZiB0aGUgbmV4dAorCQkgKiBjb252ZXJzaW9uLiAgV2l0aG91dCB0aGlzIGRlbGF5LCB0aGUgbGFzdCBjb252ZXJzaW9uJ3MKKwkJICogZGF0YSB2YWx1ZSBpcyBzb21ldGltZXMgc2V0IHRvIHRoZSBwcmV2aW91cworCQkgKiBjb252ZXJzaW9uJ3MgZGF0YSB2YWx1ZS4KKwkJICovCiAJCWNvbWVkaV91ZGVsYXkoNCk7CiAJfQogCi0JLy8gU3RhcnQgYSBkdW1teSBjb252ZXJzaW9uIHRvIGNhdXNlIHRoZSBkYXRhIGZyb20gdGhlCi0JLy8gcHJldmlvdXMgY29udmVyc2lvbiB0byBiZSBzaGlmdGVkIGluLgorCS8qIFN0YXJ0IGEgZHVtbXkgY29udmVyc2lvbiB0byBjYXVzZSB0aGUgZGF0YSBmcm9tIHRoZQorCSAqIHByZXZpb3VzIGNvbnZlcnNpb24gdG8gYmUgc2hpZnRlZCBpbi4gKi8KIAlHcGlvSW1hZ2UgPSBSUjcxNDYoUF9HUElPKTsKIAotCS8vQXNzZXJ0IEFEQyBTdGFydCBjb21tYW5kCisJLyogQXNzZXJ0IEFEQyBTdGFydCBjb21tYW5kICovCiAJV1I3MTQ2KFBfR1BJTywgR3Bpb0ltYWdlICYgfkdQSU8xX0hJKTsKLQkvLyAgIGFuZCBzdHJldGNoIGl0IG91dC4KKwkvKiAgICBhbmQgc3RyZXRjaCBpdCBvdXQuICovCiAJV1I3MTQ2KFBfR1BJTywgR3Bpb0ltYWdlICYgfkdQSU8xX0hJKTsKIAlXUjcxNDYoUF9HUElPLCBHcGlvSW1hZ2UgJiB+R1BJTzFfSEkpOwotCS8vIE5lZ2F0ZSBBREMgU3RhcnQgY29tbWFuZC4KKwkvKiAgTmVnYXRlIEFEQyBTdGFydCBjb21tYW5kLiAqLwogCVdSNzE0NihQX0dQSU8sIEdwaW9JbWFnZSB8IEdQSU8xX0hJKTsKIAotCS8vIFdhaXQgZm9yIHRoZSBkYXRhIHRvIGFycml2ZSBpbiBGQiBCVUZGRVIgMSByZWdpc3Rlci4KKwkvKiAgV2FpdCBmb3IgdGhlIGRhdGEgdG8gYXJyaXZlIGluIEZCIEJVRkZFUiAxIHJlZ2lzdGVyLiAqLwogCi0JLy8gV2FpdCBmb3IgQURDIGRvbmUuCi0Jd2hpbGUgKCEoUlI3MTQ2KFBfUFNSKSAmIFBTUl9HUElPMikpIDsKKwkvKiAgV2FpdCBmb3IgQURDIGRvbmUuICovCisJd2hpbGUgKCEoUlI3MTQ2KFBfUFNSKSAmIFBTUl9HUElPMikpCisJCTsKIAotCS8vIEZldGNoIEFEQyBkYXRhIGZyb20gYXVkaW8gaW50ZXJmYWNlJ3MgaW5wdXQgc2hpZnQKLQkvLyByZWdpc3Rlci4KKwkvKiAgRmV0Y2ggQURDIGRhdGEgZnJvbSBhdWRpbyBpbnRlcmZhY2UncyBpbnB1dCBzaGlmdCByZWdpc3Rlci4gKi8KIAotCS8vIEZldGNoIEFEQyBkYXRhLgorCS8qICBGZXRjaCBBREMgZGF0YS4gKi8KIAlpZiAobiAhPSAwKQogCQlkYXRhW24gLSAxXSA9IHM2MjZfYWlfcmVnX3RvX3VpbnQoUlI3MTQ2KFBfRkJfQlVGRkVSMSkpOwogCkBAIC0xNjIyLDcgKzE2MzgsNyBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IHM2MjZfYWlfbG9hZF9wb2xsbGlzdCh1aW50OF90ICogcHBsLCBjb21lZGlfY21kICogY21kKQorc3RhdGljIGludCBzNjI2X2FpX2xvYWRfcG9sbGxpc3QodWludDhfdCAqcHBsLCBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCiAJaW50IG47CkBAIC0xNjM4LDcgKzE2NTQsNyBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IHM2MjZfYWlfaW50dHJpZyhjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKK3N0YXRpYyBpbnQgczYyNl9haV9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCXVuc2lnbmVkIGludCB0cmlnbnVtKQogewogCWlmICh0cmlnbnVtICE9IDApCkBAIC0xNjQ2LDcgKzE2NjIsNyBAQAogCiAJREVCVUcoInM2MjZfYWlfaW50dHJpZzogdHJpZ2dlciBhZGMgc3RhcnQuLi4iKTsKIAotCS8vIFN0YXJ0IGV4ZWN1dGluZyB0aGUgUlBTIHByb2dyYW0uCisJLyogIFN0YXJ0IGV4ZWN1dGluZyB0aGUgUlBTIHByb2dyYW0uICovCiAJTUNfRU5BQkxFKFBfTUMxLCBNQzFfRVJQUzEpOwogCiAJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwpAQCAtMTY1NywxMiArMTY3MywxMiBAQAogfQogCiAvKiAgVE8gQ09NUExFVEUgICovCi1zdGF0aWMgaW50IHM2MjZfYWlfY21kKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzKQorc3RhdGljIGludCBzNjI2X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAogCXVpbnQ4X3QgcHBsWzE2XTsKLQljb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKLQllbmNfcHJpdmF0ZSAqazsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJc3RydWN0IGVuY19wcml2YXRlICprOwogCWludCB0aWNrOwogCiAJREVCVUcoInM2MjZfYWlfY21kOiBlbnRlcmluZyBjb21tYW5kIGZ1bmN0aW9uXG4iKTsKQEAgLTE2NzIsMjAgKzE2ODgsMjAgQEAKIAkJCWRldi0+bWlub3IpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQkvL2Rpc2FibGUgaW50ZXJydXB0CisJLyogZGlzYWJsZSBpbnRlcnJ1cHQgKi8KIAl3cml0ZWwoMCwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JRVIpOwogCi0JLy9jbGVhciBpbnRlcnJ1cHQgcmVxdWVzdAorCS8qIGNsZWFyIGludGVycnVwdCByZXF1ZXN0ICovCiAJd3JpdGVsKElSUV9SUFMxIHwgSVJRX0dQSU8zLCBkZXZwcml2LT5iYXNlX2FkZHIgKyBQX0lTUik7CiAKLQkvL2NsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdAorCS8qIGNsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdCAqLwogCXM2MjZfZGlvX2NsZWFyX2lycShkZXYpOwotCS8vICBzNjI2X2VuY19jbGVhcl9pcnEoZGV2KTsKKwkvKiAgIHM2MjZfZW5jX2NsZWFyX2lycShkZXYpOyAqLwogCi0JLy9yZXNldCBhaV9jbWRfcnVubmluZyBmbGFnCisJLyogcmVzZXQgYWlfY21kX3J1bm5pbmcgZmxhZyAqLwogCWRldnByaXYtPmFpX2NtZF9ydW5uaW5nID0gMDsKIAotCS8vIHRlc3QgaWYgY21kIGlzIHZhbGlkCisJLyogIHRlc3QgaWYgY21kIGlzIHZhbGlkICovCiAJaWYgKGNtZCA9PSBOVUxMKSB7CiAJCURFQlVHKCJzNjI2X2FpX2NtZDogTlVMTCBjb21tYW5kXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNzA3LDEyICsxNzIzLDEyIEBACiAJY2FzZSBUUklHX0ZPTExPVzoKIAkJYnJlYWs7CiAJY2FzZSBUUklHX1RJTUVSOgotCQkvLyBzZXQgYSBjb250ZXIgdG8gZ2VuZXJhdGUgYWRjIHRyaWdnZXIgYXQgc2Nhbl9iZWdpbl9hcmcgaW50ZXJ2YWwKKwkJLyogIHNldCBhIGNvbnRlciB0byBnZW5lcmF0ZSBhZGMgdHJpZ2dlciBhdCBzY2FuX2JlZ2luX2FyZyBpbnRlcnZhbCAqLwogCQlrID0gJmVuY3ByaXZbNV07CiAJCXRpY2sgPSBzNjI2X25zX3RvX3RpbWVyKChpbnQgKikmY21kLT5zY2FuX2JlZ2luX2FyZywKIAkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOwogCi0JCS8vbG9hZCB0aW1lciB2YWx1ZSBhbmQgZW5hYmxlIGludGVycnVwdAorCQkvKiBsb2FkIHRpbWVyIHZhbHVlIGFuZCBlbmFibGUgaW50ZXJydXB0ICovCiAJCXM2MjZfdGltZXJfbG9hZChkZXYsIGssIHRpY2spOwogCQlrLT5TZXRFbmFibGUoZGV2LCBrLCBDTEtFTkFCX0FMV0FZUyk7CiAKQEAgLTE3MjEsNyArMTczNyw3IEBACiAKIAkJYnJlYWs7CiAJY2FzZSBUUklHX0VYVDoKLQkJLy8gc2V0IHRoZSBkaWdpdGFsIGxpbmUgYW5kIGludGVycnVwdCBmb3Igc2NhbiB0cmlnZ2VyCisJCS8qICBzZXQgdGhlIGRpZ2l0YWwgbGluZSBhbmQgaW50ZXJydXB0IGZvciBzY2FuIHRyaWdnZXIgKi8KIAkJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfRVhUKQogCQkJczYyNl9kaW9fc2V0X2lycShkZXYsIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOwogCkBAIC0xNzM0LDE5ICsxNzUwLDE5IEBACiAJY2FzZSBUUklHX05PVzoKIAkJYnJlYWs7CiAJY2FzZSBUUklHX1RJTUVSOgotCQkvLyBzZXQgYSBjb250ZXIgdG8gZ2VuZXJhdGUgYWRjIHRyaWdnZXIgYXQgY29udmVydF9hcmcgaW50ZXJ2YWwKKwkJLyogIHNldCBhIGNvbnRlciB0byBnZW5lcmF0ZSBhZGMgdHJpZ2dlciBhdCBjb252ZXJ0X2FyZyBpbnRlcnZhbCAqLwogCQlrID0gJmVuY3ByaXZbNF07CiAJCXRpY2sgPSBzNjI2X25zX3RvX3RpbWVyKChpbnQgKikmY21kLT5jb252ZXJ0X2FyZywKIAkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOwogCi0JCS8vbG9hZCB0aW1lciB2YWx1ZSBhbmQgZW5hYmxlIGludGVycnVwdAorCQkvKiBsb2FkIHRpbWVyIHZhbHVlIGFuZCBlbmFibGUgaW50ZXJydXB0ICovCiAJCXM2MjZfdGltZXJfbG9hZChkZXYsIGssIHRpY2spOwogCQlrLT5TZXRFbmFibGUoZGV2LCBrLCBDTEtFTkFCX0lOREVYKTsKIAogCQlERUJVRygiczYyNl9haV9jbWQ6IGNvbnZlcnQgdHJpZ2dlciB0aW1lciBpcyBzZXQgd2l0aCB2YWx1ZSAlZFxuIiwgdGljayk7CiAJCWJyZWFrOwogCWNhc2UgVFJJR19FWFQ6Ci0JCS8vIHNldCB0aGUgZGlnaXRhbCBsaW5lIGFuZCBpbnRlcnJ1cHQgZm9yIGNvbnZlcnQgdHJpZ2dlcgorCQkvKiAgc2V0IHRoZSBkaWdpdGFsIGxpbmUgYW5kIGludGVycnVwdCBmb3IgY29udmVydCB0cmlnZ2VyICovCiAJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRVhUCiAJCQkmJiBjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkKIAkJCXM2MjZfZGlvX3NldF9pcnEoZGV2LCBjbWQtPmNvbnZlcnRfYXJnKTsKQEAgLTE3NTgsMTIgKzE3NzQsMTIgQEAKIAogCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgewogCWNhc2UgVFJJR19DT1VOVDoKLQkJLy8gZGF0YSBhcnJpdmVzIGFzIG9uZSBwYWNrZXQKKwkJLyogIGRhdGEgYXJyaXZlcyBhcyBvbmUgcGFja2V0ICovCiAJCWRldnByaXYtPmFpX3NhbXBsZV9jb3VudCA9IGNtZC0+c3RvcF9hcmc7CiAJCWRldnByaXYtPmFpX2NvbnRpbm91cyA9IDA7CiAJCWJyZWFrOwogCWNhc2UgVFJJR19OT05FOgotCQkvLyBjb250aW5vdXMgYXF1aXNpdGlvbgorCQkvKiAgY29udGlub3VzIGFxdWlzaXRpb24gKi8KIAkJZGV2cHJpdi0+YWlfY29udGlub3VzID0gMTsKIAkJZGV2cHJpdi0+YWlfc2FtcGxlX2NvdW50ID0gMDsKIAkJYnJlYWs7CkBAIC0xNzczLDE3ICsxNzg5LDE3IEBACiAKIAlzd2l0Y2ggKGNtZC0+c3RhcnRfc3JjKSB7CiAJY2FzZSBUUklHX05PVzoKLQkJLy8gVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLgotCQkvLyBNQ19FTkFCTEUoIFBfTUMyLCBNQzJfQURDX1JQUyApOworCQkvKiAgVHJpZ2dlciBBREMgc2NhbiBsb29wIHN0YXJ0IGJ5IHNldHRpbmcgUlBTIFNpZ25hbCAwLiAqLworCQkvKiAgTUNfRU5BQkxFKCBQX01DMiwgTUMyX0FEQ19SUFMgKTsgKi8KIAotCQkvLyBTdGFydCBleGVjdXRpbmcgdGhlIFJQUyBwcm9ncmFtLgorCQkvKiAgU3RhcnQgZXhlY3V0aW5nIHRoZSBSUFMgcHJvZ3JhbS4gKi8KIAkJTUNfRU5BQkxFKFBfTUMxLCBNQzFfRVJQUzEpOwogCiAJCURFQlVHKCJzNjI2X2FpX2NtZDogQURDIHRyaWdnZXJlZFxuIik7CiAJCXMtPmFzeW5jLT5pbnR0cmlnID0gTlVMTDsKIAkJYnJlYWs7CiAJY2FzZSBUUklHX0VYVDoKLQkJLy9jb25maWd1cmUgRElPIGNoYW5uZWwgZm9yIGFjcXVpc2l0aW9uIHRyaWdnZXIKKwkJLyogY29uZmlndXJlIERJTyBjaGFubmVsIGZvciBhY3F1aXNpdGlvbiB0cmlnZ2VyICovCiAJCXM2MjZfZGlvX3NldF9pcnEoZGV2LCBjbWQtPnN0YXJ0X2FyZyk7CiAKIAkJREVCVUcoInM2MjZfYWlfY21kOiBFeHRlcm5hbCBzdGFydCB0cmlnZ2VyIGlzIHNldCEhIVxuIik7CkBAIC0xNzk1LDcgKzE4MTEsNyBAQAogCQlicmVhazsKIAl9CiAKLQkvL2VuYWJsZSBpbnRlcnJ1cHQKKwkvKiBlbmFibGUgaW50ZXJydXB0ICovCiAJd3JpdGVsKElSUV9HUElPMyB8IElSUV9SUFMxLCBkZXZwcml2LT5iYXNlX2FkZHIgKyBQX0lFUik7CiAKIAlERUJVRygiczYyNl9haV9jbWQ6IGNvbW1hbmQgZnVuY3Rpb24gdGVybWluYXRlZFxuIik7CkBAIC0xODAzLDggKzE4MTksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM2MjZfYWlfY21kdGVzdChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfY21kICogY21kKQorc3RhdGljIGludCBzNjI2X2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlpbnQgZXJyID0gMDsKIAlpbnQgdG1wOwpAQCAtMTk4OCwxMiArMjAwNCwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHM2MjZfYWlfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzKQorc3RhdGljIGludCBzNjI2X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQkvLyBTdG9wIFJQUyBwcm9ncmFtIGluIGNhc2UgaXQgaXMgY3VycmVudGx5IHJ1bm5pbmcuCisJLyogIFN0b3AgUlBTIHByb2dyYW0gaW4gY2FzZSBpdCBpcyBjdXJyZW50bHkgcnVubmluZy4gKi8KIAlNQ19ESVNBQkxFKFBfTUMxLCBNQzFfRVJQUzEpOwogCi0JLy9kaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHQKKwkvKiBkaXNhYmxlIG1hc3RlciBpbnRlcnJ1cHQgKi8KIAl3cml0ZWwoMCwgZGV2cHJpdi0+YmFzZV9hZGRyICsgUF9JRVIpOwogCiAJZGV2cHJpdi0+YWlfY21kX3J1bm5pbmcgPSAwOwpAQCAtMjAxMCw3ICsyMDI2LDcgQEAKIHsKIAlpbnQgZGl2aWRlciwgYmFzZTsKIAotCWJhc2UgPSA1MDA7CQkvLzJNSHogaW50ZXJuYWwgY2xvY2sKKwliYXNlID0gNTAwOwkJLyogMk1IeiBpbnRlcm5hbCBjbG9jayAqLwogCiAJc3dpdGNoIChyb3VuZF9tb2RlKSB7CiAJY2FzZSBUUklHX1JPVU5EX05FQVJFU1Q6CkBAIC0yMDI5LDggKzIwNDUsOCBAQAogCXJldHVybiBkaXZpZGVyIC0gMTsKIH0KIAotc3RhdGljIGludCBzNjI2X2FvX3dpbnNuKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBzNjI2X2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCiAJaW50IGk7CkBAIC0yMDQ4LDQ1ICsyMDY0LDQyIEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9hb19yaW5zbihjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcywKLQljb21lZGlfaW5zbiAqIGluc24sIGxzYW1wbF90ICogZGF0YSkKK3N0YXRpYyBpbnQgczYyNl9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQogCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOwotCX0KIAogCXJldHVybiBpOwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLyAgRElHSVRBTCBJL08gRlVOQ1RJT05TICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBBbGwgRElPIGZ1bmN0aW9ucyBhZGRyZXNzIGEgZ3JvdXAgb2YgRElPIGNoYW5uZWxzIGJ5IG1lYW5zIG9mCi0vLyAiZ3JvdXAiIGFyZ3VtZW50LiAgZ3JvdXAgbWF5IGJlIDAsIDEgb3IgMiwgd2hpY2ggY29ycmVzcG9uZCB0byBESU8KLS8vIHBvcnRzIEEsIEIgYW5kIEMsIHJlc3BlY3RpdmVseS4KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyogKioqKioqKioqKioqKioqIERJR0lUQUwgSS9PIEZVTkNUSU9OUyAqKioqKioqKioqKioqKioKKyAqIEFsbCBESU8gZnVuY3Rpb25zIGFkZHJlc3MgYSBncm91cCBvZiBESU8gY2hhbm5lbHMgYnkgbWVhbnMgb2YKKyAqICJncm91cCIgYXJndW1lbnQuICBncm91cCBtYXkgYmUgMCwgMSBvciAyLCB3aGljaCBjb3JyZXNwb25kIHRvIERJTworICogcG9ydHMgQSwgQiBhbmQgQywgcmVzcGVjdGl2ZWx5LgorICovCiAKLXN0YXRpYyB2b2lkIHM2MjZfZGlvX2luaXQoY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyB2b2lkIHM2MjZfZGlvX2luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAl1aW50MTZfdCBncm91cDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCi0JLy8gUHJlcGFyZSB0byB0cmVhdCB3cml0ZXMgdG8gV1JDYXBTZWwgYXMgY2FwdHVyZSBkaXNhYmxlcy4KKwkvKiAgUHJlcGFyZSB0byB0cmVhdCB3cml0ZXMgdG8gV1JDYXBTZWwgYXMgY2FwdHVyZSBkaXNhYmxlcy4gKi8KIAlERUJJd3JpdGUoZGV2LCBMUF9NSVNDMSwgTUlTQzFfTk9FRENBUCk7CiAKLQkvLyBGb3IgZWFjaCBncm91cCBvZiBzaXh0ZWVuIGNoYW5uZWxzIC4uLgorCS8qICBGb3IgZWFjaCBncm91cCBvZiBzaXh0ZWVuIGNoYW5uZWxzIC4uLiAqLwogCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IFM2MjZfRElPX0JBTktTOyBncm91cCsrKSB7CiAJCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyICsgZ3JvdXA7Ci0JCURFQkl3cml0ZShkZXYsIGRpb3ByaXYtPldSSW50U2VsLCAwKTsJLy8gRGlzYWJsZSBhbGwgaW50ZXJydXB0cy4KLQkJREVCSXdyaXRlKGRldiwgZGlvcHJpdi0+V1JDYXBTZWwsIDB4RkZGRik7CS8vIERpc2FibGUgYWxsIGV2ZW50Ci0JCS8vIGNhcHR1cmVzLgotCQlERUJJd3JpdGUoZGV2LCBkaW9wcml2LT5XUkVkZ1NlbCwgMCk7CS8vIEluaXQgYWxsIERJT3MgdG8KLQkJLy8gZGVmYXVsdCBlZGdlCi0JCS8vIHBvbGFyaXR5LgotCQlERUJJd3JpdGUoZGV2LCBkaW9wcml2LT5XUkRPdXQsIDApOwkvLyBQcm9ncmFtIGFsbCBvdXRwdXRzCi0JCS8vIHRvIGluYWN0aXZlIHN0YXRlLgorCQlERUJJd3JpdGUoZGV2LCBkaW9wcml2LT5XUkludFNlbCwgMCk7CS8qICBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLiAqLworCQlERUJJd3JpdGUoZGV2LCBkaW9wcml2LT5XUkNhcFNlbCwgMHhGRkZGKTsJLyogIERpc2FibGUgYWxsIGV2ZW50ICovCisJCS8qICBjYXB0dXJlcy4gKi8KKwkJREVCSXdyaXRlKGRldiwgZGlvcHJpdi0+V1JFZGdTZWwsIDApOwkvKiAgSW5pdCBhbGwgRElPcyB0byAqLworCQkvKiAgZGVmYXVsdCBlZGdlICovCisJCS8qICBwb2xhcml0eS4gKi8KKwkJREVCSXdyaXRlKGRldiwgZGlvcHJpdi0+V1JET3V0LCAwKTsJLyogIFByb2dyYW0gYWxsIG91dHB1dHMgKi8KKwkJLyogIHRvIGluYWN0aXZlIHN0YXRlLiAqLwogCX0KIAlERUJVRygiczYyNl9kaW9faW5pdDogRElPIGluaXRpYWxpemVkIFxuIik7CiB9CkBAIC0yMDk3LDE0ICsyMTEwLDE0IEBACiAgKiBUaGlzIGFsbG93cyBwYWNrZWQgcmVhZGluZy93cml0aW5nIG9mIHRoZSBESU8gY2hhbm5lbHMuICBUaGUgY29tZWRpCiAgKiBjb3JlIGNhbiBjb252ZXJ0IGJldHdlZW4gaW5zbl9iaXRzIGFuZCBpbnNuX3JlYWQvd3JpdGUgKi8KIAotc3RhdGljIGludCBzNjI2X2Rpb19pbnNuX2JpdHMoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHM2MjZfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCS8qIExlbmd0aCBvZiBkYXRhIG11c3QgYmUgMiAobWFzayBhbmQgbmV3IGRhdGEsIHNlZSBiZWxvdykgKi8KLQlpZiAoaW5zbi0+biA9PSAwKSB7CisJaWYgKGluc24tPm4gPT0gMCkKIAkJcmV0dXJuIDA7Ci0JfQorCiAJaWYgKGluc24tPm4gIT0gMikgewogCQlwcmludGsoImNvbWVkaSVkOiBzNjI2OiBzNjI2X2Rpb19pbnNuX2JpdHMoKTogSW52YWxpZCBpbnN0cnVjdGlvbiBsZW5ndGhcbiIsIGRldi0+bWlub3IpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIxMzMsOCArMjE0Niw4IEBACiAJcmV0dXJuIDI7CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9kaW9faW5zbl9jb25maWcoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHM2MjZfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCiAJc3dpdGNoIChkYXRhWzBdKSB7CkBAIC0yMTYwLDc1ICsyMTczLDc1IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgczYyNl9kaW9fc2V0X2lycShjb21lZGlfZGV2aWNlICogZGV2LCB1bnNpZ25lZCBpbnQgY2hhbikKK3N0YXRpYyBpbnQgczYyNl9kaW9fc2V0X2lycShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY2hhbikKIHsKIAl1bnNpZ25lZCBpbnQgZ3JvdXA7CiAJdW5zaWduZWQgaW50IGJpdG1hc2s7CiAJdW5zaWduZWQgaW50IHN0YXR1czsKIAotCS8vc2VsZWN0IGRpbyBiYW5rCisJLyogc2VsZWN0IGRpbyBiYW5rICovCiAJZ3JvdXAgPSBjaGFuIC8gMTY7CiAJYml0bWFzayA9IDEgPDwgKGNoYW4gLSAoMTYgKiBncm91cCkpOwogCURFQlVHKCJzNjI2X2Rpb19zZXRfaXJxOiBlbmFibGUgaW50ZXJydXB0IG9uIGRpbyBjaGFubmVsICVkIGdyb3VwICVkXG4iLAogCQljaGFuIC0gKDE2ICogZ3JvdXApLCBncm91cCk7CiAKLQkvL3NldCBjaGFubmVsIHRvIGNhcHR1cmUgcG9zaXRpdmUgZWRnZQorCS8qIHNldCBjaGFubmVsIHRvIGNhcHR1cmUgcG9zaXRpdmUgZWRnZSAqLwogCXN0YXR1cyA9IERFQklyZWFkKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5SREVkZ1NlbCk7CiAJREVCSXdyaXRlKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5XUkVkZ1NlbCwgYml0bWFzayB8IHN0YXR1cyk7CiAKLQkvL2VuYWJsZSBpbnRlcnJ1cHQgb24gc2VsZWN0ZWQgY2hhbm5lbAorCS8qIGVuYWJsZSBpbnRlcnJ1cHQgb24gc2VsZWN0ZWQgY2hhbm5lbCAqLwogCXN0YXR1cyA9IERFQklyZWFkKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5SREludFNlbCk7CiAJREVCSXdyaXRlKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5XUkludFNlbCwgYml0bWFzayB8IHN0YXR1cyk7CiAKLQkvL2VuYWJsZSBlZGdlIGNhcHR1cmUgd3JpdGUgY29tbWFuZAorCS8qIGVuYWJsZSBlZGdlIGNhcHR1cmUgd3JpdGUgY29tbWFuZCAqLwogCURFQkl3cml0ZShkZXYsIExQX01JU0MxLCBNSVNDMV9FRENBUCk7CiAKLQkvL2VuYWJsZSBlZGdlIGNhcHR1cmUgb24gc2VsZWN0ZWQgY2hhbm5lbAorCS8qIGVuYWJsZSBlZGdlIGNhcHR1cmUgb24gc2VsZWN0ZWQgY2hhbm5lbCAqLwogCXN0YXR1cyA9IERFQklyZWFkKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5SRENhcFNlbCk7CiAJREVCSXdyaXRlKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5XUkNhcFNlbCwgYml0bWFzayB8IHN0YXR1cyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNjI2X2Rpb19yZXNldF9pcnEoY29tZWRpX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IGdyb3VwLAorc3RhdGljIGludCBzNjI2X2Rpb19yZXNldF9pcnEoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGdyb3VwLAogCXVuc2lnbmVkIGludCBtYXNrKQogewogCURFQlVHKCJzNjI2X2Rpb19yZXNldF9pcnE6IGRpc2FibGUgIGludGVycnVwdCBvbiBkaW8gY2hhbm5lbCAlZCBncm91cCAlZFxuIiwgbWFzaywgZ3JvdXApOwogCi0JLy9kaXNhYmxlIGVkZ2UgY2FwdHVyZSB3cml0ZSBjb21tYW5kCisJLyogZGlzYWJsZSBlZGdlIGNhcHR1cmUgd3JpdGUgY29tbWFuZCAqLwogCURFQkl3cml0ZShkZXYsIExQX01JU0MxLCBNSVNDMV9OT0VEQ0FQKTsKIAotCS8vZW5hYmxlIGVkZ2UgY2FwdHVyZSBvbiBzZWxlY3RlZCBjaGFubmVsCisJLyogZW5hYmxlIGVkZ2UgY2FwdHVyZSBvbiBzZWxlY3RlZCBjaGFubmVsICovCiAJREVCSXdyaXRlKGRldiwKLQkJKChkaW9fcHJpdmF0ZSAqKSAoZGV2LT5zdWJkZXZpY2VzICsgMiArCisJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQlncm91cCktPnByaXZhdGUpLT5XUkNhcFNlbCwgbWFzayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNjI2X2Rpb19jbGVhcl9pcnEoY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgczYyNl9kaW9fY2xlYXJfaXJxKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IGdyb3VwOwogCi0JLy9kaXNhYmxlIGVkZ2UgY2FwdHVyZSB3cml0ZSBjb21tYW5kCisJLyogZGlzYWJsZSBlZGdlIGNhcHR1cmUgd3JpdGUgY29tbWFuZCAqLwogCURFQkl3cml0ZShkZXYsIExQX01JU0MxLCBNSVNDMV9OT0VEQ0FQKTsKIAogCWZvciAoZ3JvdXAgPSAwOyBncm91cCA8IFM2MjZfRElPX0JBTktTOyBncm91cCsrKSB7Ci0JCS8vY2xlYXIgcGVuZGluZyBldmVudHMgYW5kIGludGVycnVwdAorCQkvKiBjbGVhciBwZW5kaW5nIGV2ZW50cyBhbmQgaW50ZXJydXB0ICovCiAJCURFQkl3cml0ZShkZXYsCi0JCQkoKGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKKwkJCSgoc3RydWN0IGRpb19wcml2YXRlICopIChkZXYtPnN1YmRldmljZXMgKyAyICsKIAkJCQkJZ3JvdXApLT5wcml2YXRlKS0+V1JDYXBTZWwsIDB4ZmZmZik7CiAJfQogCkBAIC0yMjM4LDI2ICsyMjUxLDI2IEBACiAvKiBOb3cgdGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIgKGRhdGFbMF0pCiAgICBhbmQgc2V0IHRoZSBzdWJkZXZpY2UuIFRvIGNvbXBsZXRlIHdpdGggdHJpZ2dlciBhbmQgaW50ZXJydXB0CiAgICBjb25maWd1cmF0aW9uICovCi1zdGF0aWMgaW50IHM2MjZfZW5jX2luc25fY29uZmlnKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKiBzLAotCWNvbWVkaV9pbnNuICogaW5zbiwgbHNhbXBsX3QgKiBkYXRhKQorc3RhdGljIGludCBzNjI2X2VuY19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKLQl1aW50MTZfdCBTZXR1cCA9IChMT0FEU1JDX0lORFggPDwgQkZfTE9BRFNSQykgfAkvLyBQcmVsb2FkIHVwb24KLQkJLy8gaW5kZXguCi0JCShJTkRYU1JDX1NPRlQgPDwgQkZfSU5EWFNSQykgfAkvLyBEaXNhYmxlIGhhcmR3YXJlIGluZGV4LgotCQkoQ0xLU1JDX0NPVU5URVIgPDwgQkZfQ0xLU1JDKSB8CS8vIE9wZXJhdGluZyBtb2RlIGlzIENvdW50ZXIuCi0JCShDTEtQT0xfUE9TIDw8IEJGX0NMS1BPTCkgfAkvLyBBY3RpdmUgaGlnaCBjbG9jay4KLQkJLy8oIENOVERJUl9VUCA8PCBCRl9DTEtQT0wgKSB8ICAgICAgLy8gQ291bnQgZGlyZWN0aW9uIGlzIERvd24uCi0JCShDTEtNVUxUXzFYIDw8IEJGX0NMS01VTFQpIHwJLy8gQ2xvY2sgbXVsdGlwbGllciBpcyAxeC4KKwl1aW50MTZfdCBTZXR1cCA9IChMT0FEU1JDX0lORFggPDwgQkZfTE9BRFNSQykgfAkvKiAgUHJlbG9hZCB1cG9uICovCisJCS8qICBpbmRleC4gKi8KKwkJKElORFhTUkNfU09GVCA8PCBCRl9JTkRYU1JDKSB8CS8qICBEaXNhYmxlIGhhcmR3YXJlIGluZGV4LiAqLworCQkoQ0xLU1JDX0NPVU5URVIgPDwgQkZfQ0xLU1JDKSB8CS8qICBPcGVyYXRpbmcgbW9kZSBpcyBDb3VudGVyLiAqLworCQkoQ0xLUE9MX1BPUyA8PCBCRl9DTEtQT0wpIHwJLyogIEFjdGl2ZSBoaWdoIGNsb2NrLiAqLworCQkvKiAoIENOVERJUl9VUCA8PCBCRl9DTEtQT0wgKSB8ICAgICAgLy8gQ291bnQgZGlyZWN0aW9uIGlzIERvd24uICovCisJCShDTEtNVUxUXzFYIDw8IEJGX0NMS01VTFQpIHwJLyogIENsb2NrIG11bHRpcGxpZXIgaXMgMXguICovCiAJCShDTEtFTkFCX0lOREVYIDw8IEJGX0NMS0VOQUIpOwogCS8qICAgdWludDE2X3QgRGlzYWJsZUludFNyYz1UUlVFOyAqLwotCS8vIHVpbnQzMl90IFByZWxvYWR2YWx1ZTsgICAgICAgICAgICAgIC8vQ291bnRlciBpbml0aWFsIHZhbHVlCisJLyogIHVpbnQzMl90IFByZWxvYWR2YWx1ZTsgICAgICAgICAgICAgIC8vQ291bnRlciBpbml0aWFsIHZhbHVlICovCiAJdWludDE2X3QgdmFsdWVTcmNsYXRjaCA9IExBVENIU1JDX0FCX1JFQUQ7CiAJdWludDE2X3QgZW5hYiA9IENMS0VOQUJfQUxXQVlTOwotCWVuY19wcml2YXRlICprID0gJmVuY3ByaXZbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCXN0cnVjdCBlbmNfcHJpdmF0ZSAqayA9ICZlbmNwcml2W0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKIAogCURFQlVHKCJzNjI2X2VuY19pbnNuX2NvbmZpZzogZW5jb2RlciBjb25maWdcbiIpOwogCi0JLy8gIChkYXRhPT1OVUxMKSA/IChQcmVsb2FkdmFsdWU9MCkgOiAoUHJlbG9hZHZhbHVlPWRhdGFbMF0pOworCS8qICAgKGRhdGE9PU5VTEwpID8gKFByZWxvYWR2YWx1ZT0wKSA6IChQcmVsb2FkdmFsdWU9ZGF0YVswXSk7ICovCiAKIAlrLT5TZXRNb2RlKGRldiwgaywgU2V0dXAsIFRSVUUpOwogCVByZWxvYWQoZGV2LCBrLCAqKGluc24tPmRhdGEpKTsKQEAgLTIyNjgsMTIgKzIyODEsMTIgQEAKIAlyZXR1cm4gaW5zbi0+bjsKIH0KIAotc3RhdGljIGludCBzNjI2X2VuY19pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHM2MjZfZW5jX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAogCWludCBuOwotCWVuY19wcml2YXRlICprID0gJmVuY3ByaXZbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCXN0cnVjdCBlbmNfcHJpdmF0ZSAqayA9ICZlbmNwcml2W0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKIAogCURFQlVHKCJzNjI2X2VuY19pbnNuX3JlYWQ6IGVuY29kZXIgcmVhZCBjaGFubmVsICVkIFxuIiwKIAkJQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpOwpAQCAtMjI4NiwyMCArMjI5OSwyMCBAQAogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IHM2MjZfZW5jX2luc25fd3JpdGUoY29tZWRpX2RldmljZSAqIGRldiwgY29tZWRpX3N1YmRldmljZSAqIHMsCi0JY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCitzdGF0aWMgaW50IHM2MjZfZW5jX2luc25fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAKLQllbmNfcHJpdmF0ZSAqayA9ICZlbmNwcml2W0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKwlzdHJ1Y3QgZW5jX3ByaXZhdGUgKmsgPSAmZW5jcHJpdltDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CiAKIAlERUJVRygiczYyNl9lbmNfaW5zbl93cml0ZTogZW5jb2RlciB3cml0ZSBjaGFubmVsICVkIFxuIiwKIAkJQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYykpOwogCi0JLy8gU2V0IHRoZSBwcmVsb2FkIHJlZ2lzdGVyCisJLyogIFNldCB0aGUgcHJlbG9hZCByZWdpc3RlciAqLwogCVByZWxvYWQoZGV2LCBrLCBkYXRhWzBdKTsKIAotCS8vIFNvZnR3YXJlIGluZGV4IHB1bHNlIGZvcmNlcyB0aGUgcHJlbG9hZCByZWdpc3RlciB0byBsb2FkCi0JLy8gaW50byB0aGUgY291bnRlcgorCS8qICBTb2Z0d2FyZSBpbmRleCBwdWxzZSBmb3JjZXMgdGhlIHByZWxvYWQgcmVnaXN0ZXIgdG8gbG9hZCAqLworCS8qICBpbnRvIHRoZSBjb3VudGVyICovCiAJay0+U2V0TG9hZFRyaWcoZGV2LCBrLCAwKTsKIAlrLT5QdWxzZUluZGV4KGRldiwgayk7CiAJay0+U2V0TG9hZFRyaWcoZGV2LCBrLCAyKTsKQEAgLTIzMDksMTc1ICsyMzIyLDE2NSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBzNjI2X3RpbWVyX2xvYWQoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCBpbnQgdGljaykKK3N0YXRpYyB2b2lkIHM2MjZfdGltZXJfbG9hZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIGludCB0aWNrKQogewotCXVpbnQxNl90IFNldHVwID0gKExPQURTUkNfSU5EWCA8PCBCRl9MT0FEU1JDKSB8CS8vIFByZWxvYWQgdXBvbgotCQkvLyBpbmRleC4KLQkJKElORFhTUkNfU09GVCA8PCBCRl9JTkRYU1JDKSB8CS8vIERpc2FibGUgaGFyZHdhcmUgaW5kZXguCi0JCShDTEtTUkNfVElNRVIgPDwgQkZfQ0xLU1JDKSB8CS8vIE9wZXJhdGluZyBtb2RlIGlzIFRpbWVyLgotCQkoQ0xLUE9MX1BPUyA8PCBCRl9DTEtQT0wpIHwJLy8gQWN0aXZlIGhpZ2ggY2xvY2suCi0JCShDTlRESVJfRE9XTiA8PCBCRl9DTEtQT0wpIHwJLy8gQ291bnQgZGlyZWN0aW9uIGlzIERvd24uCi0JCShDTEtNVUxUXzFYIDw8IEJGX0NMS01VTFQpIHwJLy8gQ2xvY2sgbXVsdGlwbGllciBpcyAxeC4KKwl1aW50MTZfdCBTZXR1cCA9IChMT0FEU1JDX0lORFggPDwgQkZfTE9BRFNSQykgfAkvKiAgUHJlbG9hZCB1cG9uICovCisJCS8qICBpbmRleC4gKi8KKwkJKElORFhTUkNfU09GVCA8PCBCRl9JTkRYU1JDKSB8CS8qICBEaXNhYmxlIGhhcmR3YXJlIGluZGV4LiAqLworCQkoQ0xLU1JDX1RJTUVSIDw8IEJGX0NMS1NSQykgfAkvKiAgT3BlcmF0aW5nIG1vZGUgaXMgVGltZXIuICovCisJCShDTEtQT0xfUE9TIDw8IEJGX0NMS1BPTCkgfAkvKiAgQWN0aXZlIGhpZ2ggY2xvY2suICovCisJCShDTlRESVJfRE9XTiA8PCBCRl9DTEtQT0wpIHwJLyogIENvdW50IGRpcmVjdGlvbiBpcyBEb3duLiAqLworCQkoQ0xLTVVMVF8xWCA8PCBCRl9DTEtNVUxUKSB8CS8qICBDbG9jayBtdWx0aXBsaWVyIGlzIDF4LiAqLwogCQkoQ0xLRU5BQl9JTkRFWCA8PCBCRl9DTEtFTkFCKTsKIAl1aW50MTZfdCB2YWx1ZVNyY2xhdGNoID0gTEFUQ0hTUkNfQV9JTkRYQTsKLQkvLyAgdWludDE2X3QgZW5hYj1DTEtFTkFCX0FMV0FZUzsKKwkvKiAgIHVpbnQxNl90IGVuYWI9Q0xLRU5BQl9BTFdBWVM7ICovCiAKIAlrLT5TZXRNb2RlKGRldiwgaywgU2V0dXAsIEZBTFNFKTsKIAotCS8vIFNldCB0aGUgcHJlbG9hZCByZWdpc3RlcgorCS8qICBTZXQgdGhlIHByZWxvYWQgcmVnaXN0ZXIgKi8KIAlQcmVsb2FkKGRldiwgaywgdGljayk7CiAKLQkvLyBTb2Z0d2FyZSBpbmRleCBwdWxzZSBmb3JjZXMgdGhlIHByZWxvYWQgcmVnaXN0ZXIgdG8gbG9hZAotCS8vIGludG8gdGhlIGNvdW50ZXIKKwkvKiAgU29mdHdhcmUgaW5kZXggcHVsc2UgZm9yY2VzIHRoZSBwcmVsb2FkIHJlZ2lzdGVyIHRvIGxvYWQgKi8KKwkvKiAgaW50byB0aGUgY291bnRlciAqLwogCWstPlNldExvYWRUcmlnKGRldiwgaywgMCk7CiAJay0+UHVsc2VJbmRleChkZXYsIGspOwogCi0JLy9zZXQgcmVsb2FkIG9uIGNvdW50ZXIgb3ZlcmZsb3cKKwkvKiBzZXQgcmVsb2FkIG9uIGNvdW50ZXIgb3ZlcmZsb3cgKi8KIAlrLT5TZXRMb2FkVHJpZyhkZXYsIGssIDEpOwogCi0JLy9zZXQgaW50ZXJydXB0IG9uIG92ZXJmbG93CisJLyogc2V0IGludGVycnVwdCBvbiBvdmVyZmxvdyAqLwogCWstPlNldEludFNyYyhkZXYsIGssIElOVFNSQ19PVkVSKTsKIAogCVNldExhdGNoU291cmNlKGRldiwgaywgdmFsdWVTcmNsYXRjaCk7Ci0JLy8gIGstPlNldEVuYWJsZShkZXYsaywodWludDE2X3QpKGVuYWIgIT0gMCkpOworCS8qICAgay0+U2V0RW5hYmxlKGRldixrLCh1aW50MTZfdCkoZW5hYiAhPSAwKSk7ICovCiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8gIERBQyBGVU5DVElPTlMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyogKioqKioqKioqKiogIERBQyBGVU5DVElPTlMgKioqKioqKioqKiogKi8KIAotLy8gU2xvdCAwIGJhc2Ugc2V0dGluZ3MuCi0jZGVmaW5lIFZFQ1QwCSggWFNEMiB8IFJTRDMgfCBTSUJfQTIgKQkvLyBTbG90IDAgYWx3YXlzIHNoaWZ0cyBpbgotCQkJCQkgLy8gMHhGRiBhbmQgc3RvcmUgaXQgdG8KLQkJCQkJIC8vIEZCX0JVRkZFUjIuCisvKiAgU2xvdCAwIGJhc2Ugc2V0dGluZ3MuICovCisjZGVmaW5lIFZFQ1QwCShYU0QyIHwgUlNEMyB8IFNJQl9BMikKKy8qICBTbG90IDAgYWx3YXlzIHNoaWZ0cyBpbiAgMHhGRiBhbmQgc3RvcmUgaXQgdG8gIEZCX0JVRkZFUjIuICovCiAKLS8vIFRyaW1EYWMgTG9naWNhbENoYW4tdG8tUGh5c2ljYWxDaGFuIG1hcHBpbmcgdGFibGUuCisvKiAgVHJpbURhYyBMb2dpY2FsQ2hhbi10by1QaHlzaWNhbENoYW4gbWFwcGluZyB0YWJsZS4gKi8KIHN0YXRpYyB1aW50OF90IHRyaW1jaGFuW10gPSB7IDEwLCA5LCA4LCAzLCAyLCA3LCA2LCAxLCAwLCA1LCA0IH07CiAKLS8vIFRyaW1EYWMgTG9naWNhbENoYW4tdG8tRWVwcm9tQWRycyBtYXBwaW5nIHRhYmxlLgorLyogIFRyaW1EYWMgTG9naWNhbENoYW4tdG8tRWVwcm9tQWRycyBtYXBwaW5nIHRhYmxlLiAqLwogc3RhdGljIHVpbnQ4X3QgdHJpbWFkcnNbXSA9CiAJeyAweDQwLCAweDQxLCAweDQyLCAweDUwLCAweDUxLCAweDUyLCAweDUzLCAweDYwLCAweDYxLCAweDYyLCAweDYzIH07CiAKLXN0YXRpYyB2b2lkIExvYWRUcmltREFDcyhjb21lZGlfZGV2aWNlICogZGV2KQorc3RhdGljIHZvaWQgTG9hZFRyaW1EQUNzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJcmVnaXN0ZXIgdWludDhfdCBpOwogCi0JLy8gQ29weSBUcmltRGFjIHNldHBvaW50IHZhbHVlcyBmcm9tIEVFUFJPTSB0byBUcmltRGFjcy4KKwkvKiAgQ29weSBUcmltRGFjIHNldHBvaW50IHZhbHVlcyBmcm9tIEVFUFJPTSB0byBUcmltRGFjcy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgKHNpemVvZih0cmltY2hhbikgLyBzaXplb2YodHJpbWNoYW5bMF0pKTsgaSsrKQogCQlXcml0ZVRyaW1EQUMoZGV2LCBpLCBJMkNyZWFkKGRldiwgdHJpbWFkcnNbaV0pKTsKIH0KIAotc3RhdGljIHZvaWQgV3JpdGVUcmltREFDKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQ4X3QgTG9naWNhbENoYW4sCitzdGF0aWMgdm9pZCBXcml0ZVRyaW1EQUMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDhfdCBMb2dpY2FsQ2hhbiwKIAl1aW50OF90IERhY0RhdGEpCiB7CiAJdWludDMyX3QgY2hhbjsKIAotCS8vIFNhdmUgdGhlIG5ldyBzZXRwb2ludCBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byByZWFkIGl0IGJhY2sgbGF0ZXIuCisJLyogIFNhdmUgdGhlIG5ldyBzZXRwb2ludCBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byByZWFkIGl0IGJhY2sgbGF0ZXIuICovCiAJZGV2cHJpdi0+VHJpbVNldHBvaW50W0xvZ2ljYWxDaGFuXSA9ICh1aW50OF90KSBEYWNEYXRhOwogCi0JLy8gTWFwIGxvZ2ljYWwgY2hhbm5lbCBudW1iZXIgdG8gcGh5c2ljYWwgY2hhbm5lbCBudW1iZXIuCisJLyogIE1hcCBsb2dpY2FsIGNoYW5uZWwgbnVtYmVyIHRvIHBoeXNpY2FsIGNoYW5uZWwgbnVtYmVyLiAqLwogCWNoYW4gPSAodWludDMyX3QpIHRyaW1jaGFuW0xvZ2ljYWxDaGFuXTsKIAotCS8vIFNldCB1cCBUU0wyIHJlY29yZHMgZm9yIFRyaW1EYWMgd3JpdGUgb3BlcmF0aW9uLiAgQWxsIHNsb3RzIHNoaWZ0Ci0JLy8gMHhGRiBpbiBmcm9tIHB1bGxlZC11cCBTRDMgc28gdGhhdCB0aGUgZW5kIG9mIHRoZSBzbG90IHNlcXVlbmNlCi0JLy8gY2FuIGJlIGRldGVjdGVkLgotCVNFVFZFQ1QoMiwgWFNEMiB8IFhGSUZPXzEgfCBXUzMpOwkvLyBTbG90IDI6IFNlbmQgaGlnaCB1aW50OF90Ci0JLy8gdG8gdGFyZ2V0IFRyaW1EYWMuCi0JU0VUVkVDVCgzLCBYU0QyIHwgWEZJRk9fMCB8IFdTMyk7CS8vIFNsb3QgMzogU2VuZCBsb3cgdWludDhfdCB0bwotCS8vIHRhcmdldCBUcmltRGFjLgotCVNFVFZFQ1QoNCwgWFNEMiB8IFhGSUZPXzMgfCBXUzEpOwkvLyBTbG90IDQ6IFNlbmQgTk9QIGhpZ2gKLQkvLyB1aW50OF90IHRvIERBQzAgdG8ga2VlcAotCS8vIGNsb2NrIHJ1bm5pbmcuCi0JU0VUVkVDVCg1LCBYU0QyIHwgWEZJRk9fMiB8IFdTMSB8IEVPUyk7CS8vIFNsb3QgNTogU2VuZCBOT1AgbG93Ci0JLy8gdWludDhfdCB0byBEQUMwLgorCS8qIFNldCB1cCBUU0wyIHJlY29yZHMgZm9yIFRyaW1EYWMgd3JpdGUgb3BlcmF0aW9uLiAgQWxsIHNsb3RzIHNoaWZ0CisJICogMHhGRiBpbiBmcm9tIHB1bGxlZC11cCBTRDMgc28gdGhhdCB0aGUgZW5kIG9mIHRoZSBzbG90IHNlcXVlbmNlCisJICogY2FuIGJlIGRldGVjdGVkLgorCSAqLwogCi0JLy8gQ29uc3RydWN0IGFuZCB0cmFuc21pdCB0YXJnZXQgREFDJ3Mgc2VyaWFsIHBhY2tldDogKCAwMDAwIEFBQUEKLQkvLyApLCggRERERCBEREREICksKCAweDAwICksKCAweDAwICkgd2hlcmUgQTwzOjA+IGlzIHRoZSBEQUMKLQkvLyBjaGFubmVsJ3MgYWRkcmVzcywgYW5kIEQ8NzowPiBpcyB0aGUgREFDIHNldHBvaW50LiAgQXBwZW5kIGEgV09SRAotCS8vIHZhbHVlICh0aGF0IHdyaXRlcyBhIGNoYW5uZWwgMCBOT1AgY29tbWFuZCB0byBhIG5vbi1leGlzdGVudCBtYWluCi0JLy8gREFDIGNoYW5uZWwpIHRoYXQgc2VydmVzIHRvIGtlZXAgdGhlIGNsb2NrIHJ1bm5pbmcgYWZ0ZXIgdGhlCi0JLy8gcGFja2V0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIHRhcmdldCBEQUMuCisJU0VUVkVDVCgyLCBYU0QyIHwgWEZJRk9fMSB8IFdTMyk7CisJLyogU2xvdCAyOiBTZW5kIGhpZ2ggdWludDhfdCB0byB0YXJnZXQgVHJpbURhYy4gKi8KKwlTRVRWRUNUKDMsIFhTRDIgfCBYRklGT18wIHwgV1MzKTsKKwkvKiBTbG90IDM6IFNlbmQgbG93IHVpbnQ4X3QgdG8gdGFyZ2V0IFRyaW1EYWMuICovCisJU0VUVkVDVCg0LCBYU0QyIHwgWEZJRk9fMyB8IFdTMSk7CisJLyogU2xvdCA0OiBTZW5kIE5PUCBoaWdoIHVpbnQ4X3QgdG8gREFDMCB0byBrZWVwIGNsb2NrIHJ1bm5pbmcuICovCisJU0VUVkVDVCg1LCBYU0QyIHwgWEZJRk9fMiB8IFdTMSB8IEVPUyk7CisJLyogU2xvdCA1OiBTZW5kIE5PUCBsb3cgIHVpbnQ4X3QgdG8gREFDMC4gKi8KIAotCVNlbmREQUMoZGV2LCAoKHVpbnQzMl90KSBjaGFuIDw8IDgpCS8vIEFkZHJlc3MgdGhlIERBQyBjaGFubmVsCi0JCS8vIHdpdGhpbiB0aGUgdHJpbWRhYyBkZXZpY2UuCi0JCXwgKHVpbnQzMl90KSBEYWNEYXRhKTsJLy8gSW5jbHVkZSBEQUMgc2V0cG9pbnQgZGF0YS4KKwkvKiBDb25zdHJ1Y3QgYW5kIHRyYW5zbWl0IHRhcmdldCBEQUMncyBzZXJpYWwgcGFja2V0OgorCSAqICggMDAwMCBBQUFBICksICggRERERCBEREREICksKCAweDAwICksKCAweDAwICkgd2hlcmUgQTwzOjA+IGlzIHRoZQorCSAqIERBQyBjaGFubmVsJ3MgYWRkcmVzcywgYW5kIEQ8NzowPiBpcyB0aGUgREFDIHNldHBvaW50LiAgQXBwZW5kIGEKKwkgKiBXT1JEIHZhbHVlICh0aGF0IHdyaXRlcyBhIGNoYW5uZWwgMCBOT1AgY29tbWFuZCB0byBhIG5vbi1leGlzdGVudAorCSAqIG1haW4gREFDIGNoYW5uZWwpIHRoYXQgc2VydmVzIHRvIGtlZXAgdGhlIGNsb2NrIHJ1bm5pbmcgYWZ0ZXIgdGhlCisJICogcGFja2V0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIHRhcmdldCBEQUMuCisJICovCisKKwkvKiAgQWRkcmVzcyB0aGUgREFDIGNoYW5uZWwgd2l0aGluIHRoZSB0cmltZGFjIGRldmljZS4gKi8KKwlTZW5kREFDKGRldiwgKCh1aW50MzJfdCkgY2hhbiA8PCA4KQorCQl8ICh1aW50MzJfdCkgRGFjRGF0YSk7CS8qICBJbmNsdWRlIERBQyBzZXRwb2ludCBkYXRhLiAqLwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vICBFRVBST00gQUNDRVNTIEZVTkNUSU9OUyAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKiAqKioqKioqKioqKioqKiAgRUVQUk9NIEFDQ0VTUyBGVU5DVElPTlMgICoqKioqKioqKioqKioqICovCisvKiAgUmVhZCB1aW50OF90IGZyb20gRUVQUk9NLiAqLwogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBSZWFkIHVpbnQ4X3QgZnJvbSBFRVBST00uCi0KLXN0YXRpYyB1aW50OF90IEkyQ3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwgdWludDhfdCBhZGRyKQorc3RhdGljIHVpbnQ4X3QgSTJDcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1aW50OF90IGFkZHIpCiB7CiAJdWludDhfdCBydG52YWw7CiAKLQkvLyBTZW5kIEVFUFJPTSB0YXJnZXQgYWRkcmVzcy4KLQlpZiAoSTJDaGFuZHNoYWtlKGRldiwgSTJDX0IyKEkyQ19BVFRSU1RBUlQsIEkyQ1cpCS8vIEJ5dGUyID0gSTJDCi0JCQkvLyBjb21tYW5kOgotCQkJLy8gd3JpdGUgdG8KLQkJCS8vIEkyQyBFRVBST00KLQkJCS8vIGRldmljZS4KLQkJCXwgSTJDX0IxKEkyQ19BVFRSU1RPUCwgYWRkcikJLy8gQnl0ZTEgPSBFRVBST00KLQkJCS8vIGludGVybmFsIHRhcmdldAotCQkJLy8gYWRkcmVzcy4KLQkJCXwgSTJDX0IwKEkyQ19BVFRSTk9QLCAwKSkpCS8vIEJ5dGUwID0gTm90Ci0JCS8vIHNlbnQuCi0JewotCQkvLyBBYm9ydCBmdW5jdGlvbiBhbmQgZGVjbGFyZSBlcnJvciBpZiBoYW5kc2hha2UgZmFpbGVkLgorCS8qICBTZW5kIEVFUFJPTSB0YXJnZXQgYWRkcmVzcy4gKi8KKwlpZiAoSTJDaGFuZHNoYWtlKGRldiwgSTJDX0IyKEkyQ19BVFRSU1RBUlQsIEkyQ1cpCisJCQkgLyogQnl0ZTIgPSBJMkMgY29tbWFuZDogd3JpdGUgdG8gSTJDIEVFUFJPTSAgZGV2aWNlLiAqLworCQkJfCBJMkNfQjEoSTJDX0FUVFJTVE9QLCBhZGRyKQorCQkJIC8qIEJ5dGUxID0gRUVQUk9NIGludGVybmFsIHRhcmdldCBhZGRyZXNzLiAqLworCQkJfCBJMkNfQjAoSTJDX0FUVFJOT1AsIDApKSkgewkvKiAgQnl0ZTAgPSBOb3Qgc2VudC4gKi8KKwkJLyogIEFib3J0IGZ1bmN0aW9uIGFuZCBkZWNsYXJlIGVycm9yIGlmIGhhbmRzaGFrZSBmYWlsZWQuICovCiAJCURFQlVHKCJJMkNyZWFkOiBlcnJvciBoYW5kc2hha2UgSTJDcmVhZCAgYVxuIik7CiAJCXJldHVybiAwOwogCX0KLQkvLyBFeGVjdXRlIEVFUFJPTSByZWFkLgotCWlmIChJMkNoYW5kc2hha2UoZGV2LCBJMkNfQjIoSTJDX0FUVFJTVEFSVCwgSTJDUikJLy8gQnl0ZTIgPSBJMkMKLQkJCS8vIGNvbW1hbmQ6IHJlYWQKLQkJCS8vIGZyb20gSTJDIEVFUFJPTQotCQkJLy8gZGV2aWNlLgotCQkJfCBJMkNfQjEoSTJDX0FUVFJTVE9QLCAwKQkvLyBCeXRlMSByZWNlaXZlcwotCQkJLy8gdWludDhfdCBmcm9tCi0JCQkvLyBFRVBST00uCi0JCQl8IEkyQ19CMChJMkNfQVRUUk5PUCwgMCkpKQkvLyBCeXRlMCA9IE5vdAotCQkvLyBzZW50LgotCXsKLQkJLy8gQWJvcnQgZnVuY3Rpb24gYW5kIGRlY2xhcmUgZXJyb3IgaWYgaGFuZHNoYWtlIGZhaWxlZC4KKwkvKiAgRXhlY3V0ZSBFRVBST00gcmVhZC4gKi8KKwlpZiAoSTJDaGFuZHNoYWtlKGRldiwgSTJDX0IyKEkyQ19BVFRSU1RBUlQsIEkyQ1IpCS8qICBCeXRlMiA9IEkyQyAqLworCQkJLyogIGNvbW1hbmQ6IHJlYWQgKi8KKwkJCS8qICBmcm9tIEkyQyBFRVBST00gKi8KKwkJCS8qICBkZXZpY2UuICovCisJCQl8IEkyQ19CMShJMkNfQVRUUlNUT1AsIDApCS8qICBCeXRlMSByZWNlaXZlcyAqLworCQkJLyogIHVpbnQ4X3QgZnJvbSAqLworCQkJLyogIEVFUFJPTS4gKi8KKwkJCXwgSTJDX0IwKEkyQ19BVFRSTk9QLCAwKSkpIHsJLyogIEJ5dGUwID0gTm90ICBzZW50LiAqLworCisJCS8qICBBYm9ydCBmdW5jdGlvbiBhbmQgZGVjbGFyZSBlcnJvciBpZiBoYW5kc2hha2UgZmFpbGVkLiAqLwogCQlERUJVRygiSTJDcmVhZDogZXJyb3IgaGFuZHNoYWtlIEkyQ3JlYWQgYlxuIik7CiAJCXJldHVybiAwOwogCX0KLQkvLyBSZXR1cm4gY29weSBvZiBFRVBST00gdmFsdWUuCisJLyogIFJldHVybiBjb3B5IG9mIEVFUFJPTSB2YWx1ZS4gKi8KIAlydG52YWwgPSAodWludDhfdCkgKFJSNzE0NihQX0kyQ0NUUkwpID4+IDE2KTsKIAlyZXR1cm4gcnRudmFsOwogfQogCi1zdGF0aWMgdWludDMyX3QgSTJDaGFuZHNoYWtlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQzMl90IHZhbCkKK3N0YXRpYyB1aW50MzJfdCBJMkNoYW5kc2hha2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDMyX3QgdmFsKQogewotCS8vIFdyaXRlIEkyQyBjb21tYW5kIHRvIEkyQyBUcmFuc2ZlciBDb250cm9sIHNoYWRvdyByZWdpc3Rlci4KKwkvKiAgV3JpdGUgSTJDIGNvbW1hbmQgdG8gSTJDIFRyYW5zZmVyIENvbnRyb2wgc2hhZG93IHJlZ2lzdGVyLiAqLwogCVdSNzE0NihQX0kyQ0NUUkwsIHZhbCk7CiAKLQkvLyBVcGxvYWQgSTJDIHNoYWRvdyByZWdpc3RlcnMgaW50byB3b3JraW5nIHJlZ2lzdGVycyBhbmQgd2FpdCBmb3IKLQkvLyB1cGxvYWQgY29uZmlybWF0aW9uLgorCS8qICBVcGxvYWQgSTJDIHNoYWRvdyByZWdpc3RlcnMgaW50byB3b3JraW5nIHJlZ2lzdGVycyBhbmQgd2FpdCBmb3IgKi8KKwkvKiAgdXBsb2FkIGNvbmZpcm1hdGlvbi4gKi8KIAogCU1DX0VOQUJMRShQX01DMiwgTUMyX1VQTERfSUlDKTsKLQl3aGlsZSAoIU1DX1RFU1QoUF9NQzIsIE1DMl9VUExEX0lJQykpIDsKKwl3aGlsZSAoIU1DX1RFU1QoUF9NQzIsIE1DMl9VUExEX0lJQykpCisJCTsKIAotCS8vIFdhaXQgdW50aWwgSTJDIGJ1cyB0cmFuc2ZlciBpcyBmaW5pc2hlZCBvciBhbiBlcnJvciBvY2N1cnMuCi0Jd2hpbGUgKChSUjcxNDYoUF9JMkNDVFJMKSAmIChJMkNfQlVTWSB8IEkyQ19FUlIpKSA9PSBJMkNfQlVTWSkgOworCS8qICBXYWl0IHVudGlsIEkyQyBidXMgdHJhbnNmZXIgaXMgZmluaXNoZWQgb3IgYW4gZXJyb3Igb2NjdXJzLiAqLworCXdoaWxlICgoUlI3MTQ2KFBfSTJDQ1RSTCkgJiAoSTJDX0JVU1kgfCBJMkNfRVJSKSkgPT0gSTJDX0JVU1kpCisJCTsKIAotCS8vIFJldHVybiBub24temVybyBpZiBJMkMgZXJyb3Igb2NjdXJlZC4KKwkvKiAgUmV0dXJuIG5vbi16ZXJvIGlmIEkyQyBlcnJvciBvY2N1cmVkLiAqLwogCXJldHVybiBSUjcxNDYoUF9JMkNDVFJMKSAmIEkyQ19FUlI7CiAKIH0KIAotLy8gUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb246IFdyaXRlIHNldHBvaW50IHRvIGFuIGFwcGxpY2F0aW9uIERBQyBjaGFubmVsLgorLyogIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9uOiBXcml0ZSBzZXRwb2ludCB0byBhbiBhcHBsaWNhdGlvbiBEQUMgY2hhbm5lbC4gKi8KIAotc3RhdGljIHZvaWQgU2V0REFDKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90IGNoYW4sIHNob3J0IGRhY2RhdGEpCitzdGF0aWMgdm9pZCBTZXREQUMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgY2hhbiwgc2hvcnQgZGFjZGF0YSkKIHsKIAlyZWdpc3RlciB1aW50MTZfdCBzaWdubWFzazsKIAlyZWdpc3RlciB1aW50MzJfdCBXU0ltYWdlOwogCi0JLy8gQWRqdXN0IERBQyBkYXRhIHBvbGFyaXR5IGFuZCBzZXQgdXAgUG9sYXJpdHkgQ29udHJvbCBSZWdpc3RlcgotCS8vIGltYWdlLgorCS8qICBBZGp1c3QgREFDIGRhdGEgcG9sYXJpdHkgYW5kIHNldCB1cCBQb2xhcml0eSBDb250cm9sIFJlZ2lzdGVyICovCisJLyogIGltYWdlLiAqLwogCXNpZ25tYXNrID0gMSA8PCBjaGFuOwogCWlmIChkYWNkYXRhIDwgMCkgewogCQlkYWNkYXRhID0gLWRhY2RhdGE7CkBAIC0yNDg1LDIzNyArMjQ4OCwyNTIgQEAKIAl9IGVsc2UKIAkJZGV2cHJpdi0+RGFjcG9sICY9IH5zaWdubWFzazsKIAotCS8vIExpbWl0IERBQyBzZXRwb2ludCB2YWx1ZSB0byB2YWxpZCByYW5nZS4KKwkvKiAgTGltaXQgREFDIHNldHBvaW50IHZhbHVlIHRvIHZhbGlkIHJhbmdlLiAqLwogCWlmICgodWludDE2X3QpIGRhY2RhdGEgPiAweDFGRkYpCiAJCWRhY2RhdGEgPSAweDFGRkY7CiAKLQkvLyBTZXQgdXAgVFNMMiByZWNvcmRzIChha2EgInZlY3RvcnMiKSBmb3IgREFDIHVwZGF0ZS4gIFZlY3RvcnMgVjIKLQkvLyBhbmQgVjMgdHJhbnNtaXQgdGhlIHNldHBvaW50IHRvIHRoZSB0YXJnZXQgREFDLiAgVjQgYW5kIFY1IHNlbmQKLQkvLyBkYXRhIHRvIGEgbm9uLWV4aXN0ZW50IFRyaW1EYWMgY2hhbm5lbCBqdXN0IHRvIGtlZXAgdGhlIGNsb2NrCi0JLy8gcnVubmluZyBhZnRlciBzZW5kaW5nIGRhdGEgdG8gdGhlIHRhcmdldCBEQUMuICBUaGlzIGlzIG5lY2Vzc2FyeQotCS8vIHRvIGVsaW1pbmF0ZSB0aGUgY2xvY2sgZ2xpdGNoIHRoYXQgd291bGQgb3RoZXJ3aXNlIG9jY3VyIGF0IHRoZQotCS8vIGVuZCBvZiB0aGUgdGFyZ2V0IERBQydzIHNlcmlhbCBkYXRhIHN0cmVhbS4gIFdoZW4gdGhlIHNlcXVlbmNlCi0JLy8gcmVzdGFydHMgYXQgVjAgKGFmdGVyIGV4ZWN1dGluZyBWNSksIHRoZSBnYXRlIGFycmF5IGF1dG9tYXRpY2FsbHkKLQkvLyBkaXNhYmxlcyBnYXRpbmcgZm9yIHRoZSBEQUMgY2xvY2sgYW5kIGFsbCBEQUMgY2hpcCBzZWxlY3RzLgotCVdTSW1hZ2UgPSAoY2hhbiAmIDIpID8gV1MxIDogV1MyOwkvLyBDaG9vc2UgREFDIGNoaXAgc2VsZWN0IHRvCi0JLy8gYmUgYXNzZXJ0ZWQuCi0JU0VUVkVDVCgyLCBYU0QyIHwgWEZJRk9fMSB8IFdTSW1hZ2UpOwkvLyBTbG90IDI6IFRyYW5zbWl0IGhpZ2gKLQkvLyBkYXRhIGJ5dGUgdG8gdGFyZ2V0IERBQy4KLQlTRVRWRUNUKDMsIFhTRDIgfCBYRklGT18wIHwgV1NJbWFnZSk7CS8vIFNsb3QgMzogVHJhbnNtaXQgbG93IGRhdGEKLQkvLyBieXRlIHRvIHRhcmdldCBEQUMuCi0JU0VUVkVDVCg0LCBYU0QyIHwgWEZJRk9fMyB8IFdTMyk7CS8vIFNsb3QgNDogVHJhbnNtaXQgdG8KLQkvLyBub24tZXhpc3RlbnQgVHJpbURhYwotCS8vIGNoYW5uZWwgdG8ga2VlcCBjbG9jawotCVNFVFZFQ1QoNSwgWFNEMiB8IFhGSUZPXzIgfCBXUzMgfCBFT1MpOwkvLyBTbG90IDU6IHJ1bm5pbmcgYWZ0ZXIKLQkvLyB3cml0aW5nIHRhcmdldCBEQUMncwotCS8vIGxvdyBkYXRhIGJ5dGUuCisJLyogU2V0IHVwIFRTTDIgcmVjb3JkcyAoYWthICJ2ZWN0b3JzIikgZm9yIERBQyB1cGRhdGUuICBWZWN0b3JzIFYyCisJICogYW5kIFYzIHRyYW5zbWl0IHRoZSBzZXRwb2ludCB0byB0aGUgdGFyZ2V0IERBQy4gIFY0IGFuZCBWNSBzZW5kCisJICogZGF0YSB0byBhIG5vbi1leGlzdGVudCBUcmltRGFjIGNoYW5uZWwganVzdCB0byBrZWVwIHRoZSBjbG9jaworCSAqIHJ1bm5pbmcgYWZ0ZXIgc2VuZGluZyBkYXRhIHRvIHRoZSB0YXJnZXQgREFDLiAgVGhpcyBpcyBuZWNlc3NhcnkKKwkgKiB0byBlbGltaW5hdGUgdGhlIGNsb2NrIGdsaXRjaCB0aGF0IHdvdWxkIG90aGVyd2lzZSBvY2N1ciBhdCB0aGUKKwkgKiBlbmQgb2YgdGhlIHRhcmdldCBEQUMncyBzZXJpYWwgZGF0YSBzdHJlYW0uICBXaGVuIHRoZSBzZXF1ZW5jZQorCSAqIHJlc3RhcnRzIGF0IFYwIChhZnRlciBleGVjdXRpbmcgVjUpLCB0aGUgZ2F0ZSBhcnJheSBhdXRvbWF0aWNhbGx5CisJICogZGlzYWJsZXMgZ2F0aW5nIGZvciB0aGUgREFDIGNsb2NrIGFuZCBhbGwgREFDIGNoaXAgc2VsZWN0cy4KKwkgKi8KIAotCS8vIENvbnN0cnVjdCBhbmQgdHJhbnNtaXQgdGFyZ2V0IERBQydzIHNlcmlhbCBwYWNrZXQ6ICggQTEwRCBERERECi0JLy8gKSwoIEREREQgRERERCApLCggMHgwRiApLCggMHgwMCApIHdoZXJlIEEgaXMgY2hhbjwwPiwgYW5kIEQ8MTI6MD4KLQkvLyBpcyB0aGUgREFDIHNldHBvaW50LiAgQXBwZW5kIGEgV09SRCB2YWx1ZSAodGhhdCB3cml0ZXMgdG8gYQotCS8vIG5vbi1leGlzdGVudCBUcmltRGFjIGNoYW5uZWwpIHRoYXQgc2VydmVzIHRvIGtlZXAgdGhlIGNsb2NrCi0JLy8gcnVubmluZyBhZnRlciB0aGUgcGFja2V0IGhhcyBiZWVuIHNlbnQgdG8gdGhlIHRhcmdldCBEQUMuCi0JU2VuZERBQyhkZXYsIDB4MEYwMDAwMDAJLy9Db250aW51ZSBjbG9jayBhZnRlciB0YXJnZXQgREFDCi0JCS8vZGF0YSAod3JpdGUgdG8gbm9uLWV4aXN0ZW50Ci0JCS8vdHJpbWRhYykuCi0JCXwgMHgwMDAwNDAwMAkvLyBBZGRyZXNzIHRoZSB0d28gbWFpbiBkdWFsLURBQwotCQkvLyBkZXZpY2VzIChUU0wncyBjaGlwIHNlbGVjdCBlbmFibGVzCi0JCS8vIHRhcmdldCBkZXZpY2UpLgotCQl8ICgodWludDMyX3QpIChjaGFuICYgMSkgPDwgMTUpCS8vIEFkZHJlc3MgdGhlIERBQwotCQkvLyBjaGFubmVsIHdpdGhpbiB0aGUKLQkJLy8gZGV2aWNlLgotCQl8ICh1aW50MzJfdCkgZGFjZGF0YSk7CS8vIEluY2x1ZGUgREFDIHNldHBvaW50IGRhdGEuCisJV1NJbWFnZSA9IChjaGFuICYgMikgPyBXUzEgOiBXUzI7CisJLyogQ2hvb3NlIERBQyBjaGlwIHNlbGVjdCB0byBiZSBhc3NlcnRlZC4gKi8KKwlTRVRWRUNUKDIsIFhTRDIgfCBYRklGT18xIHwgV1NJbWFnZSk7CisJLyogU2xvdCAyOiBUcmFuc21pdCBoaWdoIGRhdGEgYnl0ZSB0byB0YXJnZXQgREFDLiAqLworCVNFVFZFQ1QoMywgWFNEMiB8IFhGSUZPXzAgfCBXU0ltYWdlKTsKKwkvKiBTbG90IDM6IFRyYW5zbWl0IGxvdyBkYXRhIGJ5dGUgdG8gdGFyZ2V0IERBQy4gKi8KKwlTRVRWRUNUKDQsIFhTRDIgfCBYRklGT18zIHwgV1MzKTsKKwkvKiBTbG90IDQ6IFRyYW5zbWl0IHRvIG5vbi1leGlzdGVudCBUcmltRGFjIGNoYW5uZWwgdG8ga2VlcCBjbG9jayAqLworCVNFVFZFQ1QoNSwgWFNEMiB8IFhGSUZPXzIgfCBXUzMgfCBFT1MpOworCS8qIFNsb3QgNTogcnVubmluZyBhZnRlciB3cml0aW5nIHRhcmdldCBEQUMncyBsb3cgZGF0YSBieXRlLiAqLworCisJLyogIENvbnN0cnVjdCBhbmQgdHJhbnNtaXQgdGFyZ2V0IERBQydzIHNlcmlhbCBwYWNrZXQ6CisJICogKCBBMTBEIEREREQgKSwoIEREREQgRERERCApLCggMHgwRiApLCggMHgwMCApIHdoZXJlIEEgaXMgY2hhbjwwPiwKKwkgKiBhbmQgRDwxMjowPiBpcyB0aGUgREFDIHNldHBvaW50LiAgQXBwZW5kIGEgV09SRCB2YWx1ZSAodGhhdCB3cml0ZXMKKwkgKiB0byBhICBub24tZXhpc3RlbnQgVHJpbURhYyBjaGFubmVsKSB0aGF0IHNlcnZlcyB0byBrZWVwIHRoZSBjbG9jaworCSAqIHJ1bm5pbmcgYWZ0ZXIgdGhlIHBhY2tldCBoYXMgYmVlbiBzZW50IHRvIHRoZSB0YXJnZXQgREFDLgorCSAqLworCVNlbmREQUMoZGV2LCAweDBGMDAwMDAwCisJCS8qIENvbnRpbnVlIGNsb2NrIGFmdGVyIHRhcmdldCBEQUMgZGF0YSAod3JpdGUgdG8gbm9uLWV4aXN0ZW50IHRyaW1kYWMpLiAqLworCQl8IDB4MDAwMDQwMDAKKwkJLyogQWRkcmVzcyB0aGUgdHdvIG1haW4gZHVhbC1EQUMgZGV2aWNlcyAoVFNMJ3MgY2hpcCBzZWxlY3QgZW5hYmxlcworCQkgKiB0YXJnZXQgZGV2aWNlKS4gKi8KKwkJfCAoKHVpbnQzMl90KSAoY2hhbiAmIDEpIDw8IDE1KQorCQkvKiAgQWRkcmVzcyB0aGUgREFDIGNoYW5uZWwgd2l0aGluIHRoZSAgZGV2aWNlLiAqLworCQl8ICh1aW50MzJfdCkgZGFjZGF0YSk7CS8qICBJbmNsdWRlIERBQyBzZXRwb2ludCBkYXRhLiAqLwogCiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBQcml2YXRlIGhlbHBlciBmdW5jdGlvbjogVHJhbnNtaXQgc2VyaWFsIGRhdGEgdG8gREFDIHZpYSBBdWRpbwotLy8gY2hhbm5lbCAyLiAgQXNzdW1lczogKDEpIFRTTDIgc2xvdCByZWNvcmRzIGluaXRpYWxpemVkLCBhbmQgKDIpCi0vLyBEYWNwb2wgY29udGFpbnMgdmFsaWQgdGFyZ2V0IGltYWdlLgorLyogUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb246IFRyYW5zbWl0IHNlcmlhbCBkYXRhIHRvIERBQyB2aWEgQXVkaW8KKyAqIGNoYW5uZWwgMi4gIEFzc3VtZXM6ICgxKSBUU0wyIHNsb3QgcmVjb3JkcyBpbml0aWFsaXplZCwgYW5kICgyKQorICogRGFjcG9sIGNvbnRhaW5zIHZhbGlkIHRhcmdldCBpbWFnZS4KKyAqLwogCi1zdGF0aWMgdm9pZCBTZW5kREFDKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQzMl90IHZhbCkKK3N0YXRpYyB2b2lkIFNlbmREQUMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDMyX3QgdmFsKQogewogCi0JLy8gU1RBUlQgVEhFIFNFUklBTCBDTE9DSyBSVU5OSU5HIC0tLS0tLS0tLS0tLS0KKwkvKiBTVEFSVCBUSEUgU0VSSUFMIENMT0NLIFJVTk5JTkcgLS0tLS0tLS0tLS0tLSAqLwogCi0JLy8gQXNzZXJ0IERBQyBwb2xhcml0eSBjb250cm9sIGFuZCBlbmFibGUgZ2F0aW5nIG9mIERBQyBzZXJpYWwgY2xvY2sKLQkvLyBhbmQgYXVkaW8gYml0IHN0cmVhbSBzaWduYWxzLiAgQXQgdGhpcyBwb2ludCBpbiB0aW1lIHdlIG11c3QgYmUKLQkvLyBhc3N1cmVkIG9mIGJlaW5nIGluIHRpbWUgc2xvdCAwLiAgSWYgd2UgYXJlIG5vdCBpbiBzbG90IDAsIHRoZQotCS8vIHNlcmlhbCBjbG9jayBhbmQgYXVkaW8gc3RyZWFtIHNpZ25hbHMgd2lsbCBiZSBkaXNhYmxlZDsgdGhpcyBpcwotCS8vIGJlY2F1c2UgdGhlIGZvbGxvd2luZyBERUJJd3JpdGUgc3RhdGVtZW50ICh3aGljaCBlbmFibGVzIHNpZ25hbHMKLQkvLyB0byBiZSBwYXNzZWQgdGhyb3VnaCB0aGUgZ2F0ZSBhcnJheSkgd291bGQgZXhlY3V0ZSBiZWZvcmUgdGhlCi0JLy8gdHJhaWxpbmcgZWRnZSBvZiBXUzEvV1MzICh3aGljaCB0dXJucyBvZmYgdGhlIHNpZ25hbHMpLCB0aHVzCi0JLy8gY2F1c2luZyB0aGUgc2lnbmFscyB0byBiZSBpbmFjdGl2ZSBkdXJpbmcgdGhlIERBQyB3cml0ZS4KKwkvKiBBc3NlcnQgREFDIHBvbGFyaXR5IGNvbnRyb2wgYW5kIGVuYWJsZSBnYXRpbmcgb2YgREFDIHNlcmlhbCBjbG9jaworCSAqIGFuZCBhdWRpbyBiaXQgc3RyZWFtIHNpZ25hbHMuICBBdCB0aGlzIHBvaW50IGluIHRpbWUgd2UgbXVzdCBiZQorCSAqIGFzc3VyZWQgb2YgYmVpbmcgaW4gdGltZSBzbG90IDAuICBJZiB3ZSBhcmUgbm90IGluIHNsb3QgMCwgdGhlCisJICogc2VyaWFsIGNsb2NrIGFuZCBhdWRpbyBzdHJlYW0gc2lnbmFscyB3aWxsIGJlIGRpc2FibGVkOyB0aGlzIGlzCisJICogYmVjYXVzZSB0aGUgZm9sbG93aW5nIERFQkl3cml0ZSBzdGF0ZW1lbnQgKHdoaWNoIGVuYWJsZXMgc2lnbmFscworCSAqIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRoZSBnYXRlIGFycmF5KSB3b3VsZCBleGVjdXRlIGJlZm9yZSB0aGUKKwkgKiB0cmFpbGluZyBlZGdlIG9mIFdTMS9XUzMgKHdoaWNoIHR1cm5zIG9mZiB0aGUgc2lnbmFscyksIHRodXMKKwkgKiBjYXVzaW5nIHRoZSBzaWduYWxzIHRvIGJlIGluYWN0aXZlIGR1cmluZyB0aGUgREFDIHdyaXRlLgorCSAqLwogCURFQkl3cml0ZShkZXYsIExQX0RBQ1BPTCwgZGV2cHJpdi0+RGFjcG9sKTsKIAotCS8vIFRSQU5TRkVSIE9VVFBVVCBEV09SRCBWQUxVRSBJTlRPIEEyJ1MgT1VUUFVUIEZJRk8gLS0tLS0tLS0tLS0tLS0tLQorCS8qIFRSQU5TRkVSIE9VVFBVVCBEV09SRCBWQUxVRSBJTlRPIEEyJ1MgT1VUUFVUIEZJRk8gLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0JLy8gQ29weSBEQUMgc2V0cG9pbnQgdmFsdWUgdG8gREFDJ3Mgb3V0cHV0IERNQSBidWZmZXIuCisJLyogQ29weSBEQUMgc2V0cG9pbnQgdmFsdWUgdG8gREFDJ3Mgb3V0cHV0IERNQSBidWZmZXIuICovCiAKLQkvL1dSNzE0NiggKHVpbnQzMl90KWRldnByaXYtPnBEYWNXQnVmLCB2YWwgKTsKKwkvKiBXUjcxNDYoICh1aW50MzJfdClkZXZwcml2LT5wRGFjV0J1ZiwgdmFsICk7ICovCiAJKmRldnByaXYtPnBEYWNXQnVmID0gdmFsOwogCi0JLy8gZW5hYiB0aGUgb3V0cHV0IERNQSB0cmFuc2Zlci4gIFRoaXMgd2lsbCBjYXVzZSB0aGUgRE1BQyB0byBjb3B5Ci0JLy8gdGhlIERBQydzIGRhdGEgdmFsdWUgdG8gQTIncyBvdXRwdXQgRklGTy4gIFRoZSBETUEgdHJhbnNmZXIgd2lsbAotCS8vIHRoZW4gaW1tZWRpYXRlbHkgdGVybWluYXRlIGJlY2F1c2UgdGhlIHByb3RlY3Rpb24gYWRkcmVzcyBpcwotCS8vIHJlYWNoZWQgdXBvbiB0cmFuc2ZlciBvZiB0aGUgZmlyc3QgRFdPUkQgdmFsdWUuCisJLyogZW5hYiB0aGUgb3V0cHV0IERNQSB0cmFuc2Zlci4gIFRoaXMgd2lsbCBjYXVzZSB0aGUgRE1BQyB0byBjb3B5CisJICogdGhlIERBQydzIGRhdGEgdmFsdWUgdG8gQTIncyBvdXRwdXQgRklGTy4gIFRoZSBETUEgdHJhbnNmZXIgd2lsbAorCSAqIHRoZW4gaW1tZWRpYXRlbHkgdGVybWluYXRlIGJlY2F1c2UgdGhlIHByb3RlY3Rpb24gYWRkcmVzcyBpcworCSAqIHJlYWNoZWQgdXBvbiB0cmFuc2ZlciBvZiB0aGUgZmlyc3QgRFdPUkQgdmFsdWUuCisJICovCiAJTUNfRU5BQkxFKFBfTUMxLCBNQzFfQTJPVVQpOwogCi0JLy8gV2hpbGUgdGhlIERNQSB0cmFuc2ZlciBpcyBleGVjdXRpbmcgLi4uCisJLyogIFdoaWxlIHRoZSBETUEgdHJhbnNmZXIgaXMgZXhlY3V0aW5nIC4uLiAqLwogCi0JLy8gUmVzZXQgQXVkaW8yIG91dHB1dCBGSUZPJ3MgdW5kZXJmbG93IGZsYWcgKGFsb25nIHdpdGggYW55IG90aGVyCi0JLy8gRklGTyB1bmRlcmZsb3cvb3ZlcmZsb3cgZmxhZ3MpLiAgV2hlbiBzZXQsIHRoaXMgZmxhZyB3aWxsCi0JLy8gaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIGVtZXJnZWQgZnJvbSBzbG90IDAuCisJLyogUmVzZXQgQXVkaW8yIG91dHB1dCBGSUZPJ3MgdW5kZXJmbG93IGZsYWcgKGFsb25nIHdpdGggYW55IG90aGVyCisJICogRklGTyB1bmRlcmZsb3cvb3ZlcmZsb3cgZmxhZ3MpLiAgV2hlbiBzZXQsIHRoaXMgZmxhZyB3aWxsCisJICogaW5kaWNhdGUgdGhhdCB3ZSBoYXZlIGVtZXJnZWQgZnJvbSBzbG90IDAuCisJICovCiAJV1I3MTQ2KFBfSVNSLCBJU1JfQUZPVSk7CiAKLQkvLyBXYWl0IGZvciB0aGUgRE1BIHRyYW5zZmVyIHRvIGZpbmlzaCBzbyB0aGF0IHRoZXJlIHdpbGwgYmUgZGF0YQotCS8vIGF2YWlsYWJsZSBpbiB0aGUgRklGTyB3aGVuIHRpbWUgc2xvdCAxIHRyaWVzIHRvIHRyYW5zZmVyIGEgRFdPUkQKLQkvLyBmcm9tIHRoZSBGSUZPIHRvIHRoZSBvdXRwdXQgYnVmZmVyIHJlZ2lzdGVyLiAgV2UgdGVzdCBmb3IgRE1BCi0JLy8gRG9uZSBieSBwb2xsaW5nIHRoZSBETUFDIGVuYWJsZSBmbGFnOyB0aGlzIGZsYWcgaXMgYXV0b21hdGljYWxseQotCS8vIGNsZWFyZWQgd2hlbiB0aGUgdHJhbnNmZXIgaGFzIGZpbmlzaGVkLgotCXdoaWxlICgoUlI3MTQ2KFBfTUMxKSAmIE1DMV9BMk9VVCkgIT0gMCkgOworCS8qIFdhaXQgZm9yIHRoZSBETUEgdHJhbnNmZXIgdG8gZmluaXNoIHNvIHRoYXQgdGhlcmUgd2lsbCBiZSBkYXRhCisJICogYXZhaWxhYmxlIGluIHRoZSBGSUZPIHdoZW4gdGltZSBzbG90IDEgdHJpZXMgdG8gdHJhbnNmZXIgYSBEV09SRAorCSAqIGZyb20gdGhlIEZJRk8gdG8gdGhlIG91dHB1dCBidWZmZXIgcmVnaXN0ZXIuICBXZSB0ZXN0IGZvciBETUEKKwkgKiBEb25lIGJ5IHBvbGxpbmcgdGhlIERNQUMgZW5hYmxlIGZsYWc7IHRoaXMgZmxhZyBpcyBhdXRvbWF0aWNhbGx5CisJICogY2xlYXJlZCB3aGVuIHRoZSB0cmFuc2ZlciBoYXMgZmluaXNoZWQuCisJICovCisJd2hpbGUgKChSUjcxNDYoUF9NQzEpICYgTUMxX0EyT1VUKSAhPSAwKQorCQk7CiAKLQkvLyBTVEFSVCBUSEUgT1VUUFVUIFNUUkVBTSBUTyBUSEUgVEFSR0VUIERBQyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8qIFNUQVJUIFRIRSBPVVRQVVQgU1RSRUFNIFRPIFRIRSBUQVJHRVQgREFDIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLQkvLyBGSUZPIGRhdGEgaXMgbm93IGF2YWlsYWJsZSwgc28gd2UgZW5hYmxlIGV4ZWN1dGlvbiBvZiB0aW1lIHNsb3RzCi0JLy8gMSBhbmQgaGlnaGVyIGJ5IGNsZWFyaW5nIHRoZSBFT1MgZmxhZyBpbiBzbG90IDAuICBOb3RlIHRoYXQgU0QzCi0JLy8gd2lsbCBiZSBzaGlmdGVkIGluIGFuZCBzdG9yZWQgaW4gRkJfQlVGRkVSMiBmb3IgZW5kLW9mLXNsb3QtbGlzdAotCS8vIGRldGVjdGlvbi4KKwkvKiBGSUZPIGRhdGEgaXMgbm93IGF2YWlsYWJsZSwgc28gd2UgZW5hYmxlIGV4ZWN1dGlvbiBvZiB0aW1lIHNsb3RzCisJICogMSBhbmQgaGlnaGVyIGJ5IGNsZWFyaW5nIHRoZSBFT1MgZmxhZyBpbiBzbG90IDAuICBOb3RlIHRoYXQgU0QzCisJICogd2lsbCBiZSBzaGlmdGVkIGluIGFuZCBzdG9yZWQgaW4gRkJfQlVGRkVSMiBmb3IgZW5kLW9mLXNsb3QtbGlzdAorCSAqIGRldGVjdGlvbi4KKwkgKi8KIAlTRVRWRUNUKDAsIFhTRDIgfCBSU0QzIHwgU0lCX0EyKTsKIAotCS8vIFdhaXQgZm9yIHNsb3QgMSB0byBleGVjdXRlIHRvIGVuc3VyZSB0aGF0IHRoZSBQYWNrZXQgd2lsbCBiZQotCS8vIHRyYW5zbWl0dGVkLiAgVGhpcyBpcyBkZXRlY3RlZCBieSBwb2xsaW5nIHRoZSBBdWRpbzIgb3V0cHV0IEZJRk8KLQkvLyB1bmRlcmZsb3cgZmxhZywgd2hpY2ggd2lsbCBiZSBzZXQgd2hlbiBzbG90IDEgZXhlY3V0aW9uIGhhcwotCS8vIGZpbmlzaGVkIHRyYW5zZmVycmluZyB0aGUgREFDJ3MgZGF0YSBEV09SRCBmcm9tIHRoZSBvdXRwdXQgRklGTwotCS8vIHRvIHRoZSBvdXRwdXQgYnVmZmVyIHJlZ2lzdGVyLgotCXdoaWxlICgoUlI3MTQ2KFBfU1NSKSAmIFNTUl9BRjJfT1VUKSA9PSAwKSA7CisJLyogV2FpdCBmb3Igc2xvdCAxIHRvIGV4ZWN1dGUgdG8gZW5zdXJlIHRoYXQgdGhlIFBhY2tldCB3aWxsIGJlCisJICogdHJhbnNtaXR0ZWQuICBUaGlzIGlzIGRldGVjdGVkIGJ5IHBvbGxpbmcgdGhlIEF1ZGlvMiBvdXRwdXQgRklGTworCSAqIHVuZGVyZmxvdyBmbGFnLCB3aGljaCB3aWxsIGJlIHNldCB3aGVuIHNsb3QgMSBleGVjdXRpb24gaGFzCisJICogZmluaXNoZWQgdHJhbnNmZXJyaW5nIHRoZSBEQUMncyBkYXRhIERXT1JEIGZyb20gdGhlIG91dHB1dCBGSUZPCisJICogdG8gdGhlIG91dHB1dCBidWZmZXIgcmVnaXN0ZXIuCisJICovCisJd2hpbGUgKChSUjcxNDYoUF9TU1IpICYgU1NSX0FGMl9PVVQpID09IDApCisJCTsKIAotCS8vIFNldCB1cCB0byB0cmFwIGV4ZWN1dGlvbiBhdCBzbG90IDAgd2hlbiB0aGUgVFNMIHNlcXVlbmNlciBjeWNsZXMKLQkvLyBiYWNrIHRvIHNsb3QgMCBhZnRlciBleGVjdXRpbmcgdGhlIEVPUyBpbiBzbG90IDUuICBBbHNvLAotCS8vIHNpbXVsdGFuZW91c2x5IHNoaWZ0IG91dCBhbmQgaW4gdGhlIDB4MDAgdGhhdCBpcyBBTFdBWVMgdGhlIHZhbHVlCi0JLy8gc3RvcmVkIGluIHRoZSBsYXN0IGJ5dGUgdG8gYmUgc2hpZnRlZCBvdXQgb2YgdGhlIEZJRk8ncyBEV09SRAotCS8vIGJ1ZmZlciByZWdpc3Rlci4KKwkvKiBTZXQgdXAgdG8gdHJhcCBleGVjdXRpb24gYXQgc2xvdCAwIHdoZW4gdGhlIFRTTCBzZXF1ZW5jZXIgY3ljbGVzCisJICogYmFjayB0byBzbG90IDAgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBFT1MgaW4gc2xvdCA1LiAgQWxzbywKKwkgKiBzaW11bHRhbmVvdXNseSBzaGlmdCBvdXQgYW5kIGluIHRoZSAweDAwIHRoYXQgaXMgQUxXQVlTIHRoZSB2YWx1ZQorCSAqIHN0b3JlZCBpbiB0aGUgbGFzdCBieXRlIHRvIGJlIHNoaWZ0ZWQgb3V0IG9mIHRoZSBGSUZPJ3MgRFdPUkQKKwkgKiBidWZmZXIgcmVnaXN0ZXIuCisJICovCiAJU0VUVkVDVCgwLCBYU0QyIHwgWEZJRk9fMiB8IFJTRDIgfCBTSUJfQTIgfCBFT1MpOwogCi0JLy8gV0FJVCBGT1IgVEhFIFRSQU5TQUNUSU9OIFRPIEZJTklTSCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8qIFdBSVQgRk9SIFRIRSBUUkFOU0FDVElPTiBUTyBGSU5JU0ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotCS8vIFdhaXQgZm9yIHRoZSBUU0wgdG8gZmluaXNoIGV4ZWN1dGluZyBhbGwgdGltZSBzbG90cyBiZWZvcmUKLQkvLyBleGl0aW5nIHRoaXMgZnVuY3Rpb24uICBXZSBtdXN0IGRvIHRoaXMgc28gdGhhdCB0aGUgbmV4dCBEQUMKLQkvLyB3cml0ZSBkb2Vzbid0IHN0YXJ0LCB0aGVyZWJ5IGVuYWJsaW5nIGNsb2NrL2NoaXAgc2VsZWN0IHNpZ25hbHM6Ci0JLy8gMS4gQmVmb3JlIHRoZSBUU0wgc2VxdWVuY2UgY3ljbGVzIGJhY2sgdG8gc2xvdCAwLCB3aGljaCBkaXNhYmxlcwotCS8vIHRoZSBjbG9jay9jcyBzaWduYWwgZ2F0aW5nIGFuZCB0cmFwcyBzbG90IC8vIGxpc3QgZXhlY3V0aW9uLiAgSWYKLQkvLyB3ZSBoYXZlIG5vdCB5ZXQgZmluaXNoZWQgc2xvdCA1IHRoZW4gdGhlIGNsb2NrL2NzIHNpZ25hbHMgYXJlCi0JLy8gc3RpbGwgZ2F0ZWQgYW5kIHdlIGhhdmUgLy8gbm90IGZpbmlzaGVkIHRyYW5zbWl0dGluZyB0aGUgc3RyZWFtLgotCS8vIDIuIFdoaWxlIHNsb3RzIDItNSBhcmUgZXhlY3V0aW5nIGR1ZSB0byBhIGxhdGUgc2xvdCAwIHRyYXAuICBJbgotCS8vIHRoaXMgY2FzZSwgdGhlIHNsb3Qgc2VxdWVuY2UgaXMgY3VycmVudGx5IC8vIHJlcGVhdGluZywgYnV0IHdpdGgKLQkvLyBjbG9jay9jcyBzaWduYWxzIGRpc2FibGVkLiAgV2UgbXVzdCB3YWl0IGZvciBzbG90IDAgdG8gdHJhcAotCS8vIGV4ZWN1dGlvbiBiZWZvcmUgc2V0dGluZyAvLyB1cCB0aGUgbmV4dCBEQUMgc2V0cG9pbnQgRE1BIHRyYW5zZmVyCi0JLy8gYW5kIGVuYWJsaW5nIHRoZSBjbG9jay9jcyBzaWduYWxzLiAgVG8gZGV0ZWN0IHRoZSBlbmQgb2Ygc2xvdCA1LAotCS8vIHdlIHRlc3QgZm9yIHRoZSBGQl9CVUZGRVIyIE1TQiBjb250ZW50cyB0byBiZSBlcXVhbCB0byAweEZGLiAgSWYKLQkvLyB0aGUgVFNMIGhhcyBub3QgeWV0IGZpbmlzaGVkIGV4ZWN1dGluZyBzbG90IDUgLi4uCisJLyogV2FpdCBmb3IgdGhlIFRTTCB0byBmaW5pc2ggZXhlY3V0aW5nIGFsbCB0aW1lIHNsb3RzIGJlZm9yZQorCSAqIGV4aXRpbmcgdGhpcyBmdW5jdGlvbi4gIFdlIG11c3QgZG8gdGhpcyBzbyB0aGF0IHRoZSBuZXh0IERBQworCSAqIHdyaXRlIGRvZXNuJ3Qgc3RhcnQsIHRoZXJlYnkgZW5hYmxpbmcgY2xvY2svY2hpcCBzZWxlY3Qgc2lnbmFsczoKKwkgKgorCSAqIDEuIEJlZm9yZSB0aGUgVFNMIHNlcXVlbmNlIGN5Y2xlcyBiYWNrIHRvIHNsb3QgMCwgd2hpY2ggZGlzYWJsZXMKKwkgKiAgICB0aGUgY2xvY2svY3Mgc2lnbmFsIGdhdGluZyBhbmQgdHJhcHMgc2xvdCAvLyBsaXN0IGV4ZWN1dGlvbi4KKwkgKiAgICB3ZSBoYXZlIG5vdCB5ZXQgZmluaXNoZWQgc2xvdCA1IHRoZW4gdGhlIGNsb2NrL2NzIHNpZ25hbHMgYXJlCisJICogICAgc3RpbGwgZ2F0ZWQgYW5kIHdlIGhhdmUgbm90IGZpbmlzaGVkIHRyYW5zbWl0dGluZyB0aGUgc3RyZWFtLgorCSAqCisJICogMi4gV2hpbGUgc2xvdHMgMi01IGFyZSBleGVjdXRpbmcgZHVlIHRvIGEgbGF0ZSBzbG90IDAgdHJhcC4gIEluCisJICogICAgdGhpcyBjYXNlLCB0aGUgc2xvdCBzZXF1ZW5jZSBpcyBjdXJyZW50bHkgcmVwZWF0aW5nLCBidXQgd2l0aAorCSAqICAgIGNsb2NrL2NzIHNpZ25hbHMgZGlzYWJsZWQuICBXZSBtdXN0IHdhaXQgZm9yIHNsb3QgMCB0byB0cmFwCisJICogICAgZXhlY3V0aW9uIGJlZm9yZSBzZXR0aW5nIHVwIHRoZSBuZXh0IERBQyBzZXRwb2ludCBETUEgdHJhbnNmZXIKKwkgKiAgICBhbmQgZW5hYmxpbmcgdGhlIGNsb2NrL2NzIHNpZ25hbHMuICBUbyBkZXRlY3QgdGhlIGVuZCBvZiBzbG90IDUsCisJICogICAgd2UgdGVzdCBmb3IgdGhlIEZCX0JVRkZFUjIgTVNCIGNvbnRlbnRzIHRvIGJlIGVxdWFsIHRvIDB4RkYuICBJZgorCSAqICAgIHRoZSBUU0wgaGFzIG5vdCB5ZXQgZmluaXNoZWQgZXhlY3V0aW5nIHNsb3QgNSAuLi4KKwkgKi8KIAlpZiAoKFJSNzE0NihQX0ZCX0JVRkZFUjIpICYgMHhGRjAwMDAwMCkgIT0gMCkgewotCQkvLyBUaGUgdHJhcCB3YXMgc2V0IG9uIHRpbWUgYW5kIHdlIGFyZSBzdGlsbCBleGVjdXRpbmcgc29tZXdoZXJlCi0JCS8vIGluIHNsb3RzIDItNSwgc28gd2Ugbm93IHdhaXQgZm9yIHNsb3QgMCB0byBleGVjdXRlIGFuZCB0cmFwCi0JCS8vIFRTTCBleGVjdXRpb24uICBUaGlzIGlzIGRldGVjdGVkIHdoZW4gRkJfQlVGRkVSMiBNU0IgY2hhbmdlcwotCQkvLyBmcm9tIDB4RkYgdG8gMHgwMCwgd2hpY2ggc2xvdCAwIGNhdXNlcyB0byBoYXBwZW4gYnkgc2hpZnRpbmcKLQkJLy8gb3V0L2luIG9uIFNEMiB0aGUgMHgwMCB0aGF0IGlzIGFsd2F5cyByZWZlcmVuY2VkIGJ5IHNsb3QgNS4KLQkJd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApICE9IDApIDsKKwkJLyogVGhlIHRyYXAgd2FzIHNldCBvbiB0aW1lIGFuZCB3ZSBhcmUgc3RpbGwgZXhlY3V0aW5nIHNvbWV3aGVyZQorCQkgKiBpbiBzbG90cyAyLTUsIHNvIHdlIG5vdyB3YWl0IGZvciBzbG90IDAgdG8gZXhlY3V0ZSBhbmQgdHJhcAorCQkgKiBUU0wgZXhlY3V0aW9uLiAgVGhpcyBpcyBkZXRlY3RlZCB3aGVuIEZCX0JVRkZFUjIgTVNCIGNoYW5nZXMKKwkJICogZnJvbSAweEZGIHRvIDB4MDAsIHdoaWNoIHNsb3QgMCBjYXVzZXMgdG8gaGFwcGVuIGJ5IHNoaWZ0aW5nCisJCSAqIG91dC9pbiBvbiBTRDIgdGhlIDB4MDAgdGhhdCBpcyBhbHdheXMgcmVmZXJlbmNlZCBieSBzbG90IDUuCisJCSAqLworCQkgd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApICE9IDApCisJCQk7CiAJfQotCS8vIEVpdGhlciAoMSkgd2Ugd2VyZSB0b28gbGF0ZSBzZXR0aW5nIHRoZSBzbG90IDAgdHJhcDsgdGhlIFRTTAotCS8vIHNlcXVlbmNlciByZXN0YXJ0ZWQgc2xvdCAwIGJlZm9yZSB3ZSBjb3VsZCBzZXQgdGhlIEVPUyB0cmFwIGZsYWcsCi0JLy8gb3IgKDIpIHdlIHdlcmUgbm90IGxhdGUgYW5kIGV4ZWN1dGlvbiBpcyBub3cgdHJhcHBlZCBhdCBzbG90IDAuCi0JLy8gSW4gZWl0aGVyIGNhc2UsIHdlIG11c3Qgbm93IGNoYW5nZSBzbG90IDAgc28gdGhhdCBpdCB3aWxsIHN0b3JlCi0JLy8gdmFsdWUgMHhGRiAoaW5zdGVhZCBvZiAweDAwKSB0byBGQl9CVUZGRVIyIG5leHQgdGltZSBpdCBleGVjdXRlcy4KLQkvLyBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSByZXByb2dyYW0gc2xvdCAwIHNvIHRoYXQgaXQgd2lsbCBzaGlmdCBpbgotCS8vIFNEMywgd2hpY2ggaXMgZHJpdmVuIG9ubHkgYnkgYSBwdWxsLXVwIHJlc2lzdG9yLgorCS8qIEVpdGhlciAoMSkgd2Ugd2VyZSB0b28gbGF0ZSBzZXR0aW5nIHRoZSBzbG90IDAgdHJhcDsgdGhlIFRTTAorCSAqIHNlcXVlbmNlciByZXN0YXJ0ZWQgc2xvdCAwIGJlZm9yZSB3ZSBjb3VsZCBzZXQgdGhlIEVPUyB0cmFwIGZsYWcsCisJICogb3IgKDIpIHdlIHdlcmUgbm90IGxhdGUgYW5kIGV4ZWN1dGlvbiBpcyBub3cgdHJhcHBlZCBhdCBzbG90IDAuCisJICogSW4gZWl0aGVyIGNhc2UsIHdlIG11c3Qgbm93IGNoYW5nZSBzbG90IDAgc28gdGhhdCBpdCB3aWxsIHN0b3JlCisJICogdmFsdWUgMHhGRiAoaW5zdGVhZCBvZiAweDAwKSB0byBGQl9CVUZGRVIyIG5leHQgdGltZSBpdCBleGVjdXRlcy4KKwkgKiBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSByZXByb2dyYW0gc2xvdCAwIHNvIHRoYXQgaXQgd2lsbCBzaGlmdCBpbgorCSAqIFNEMywgd2hpY2ggaXMgZHJpdmVuIG9ubHkgYnkgYSBwdWxsLXVwIHJlc2lzdG9yLgorCSAqLwogCVNFVFZFQ1QoMCwgUlNEMyB8IFNJQl9BMiB8IEVPUyk7CiAKLQkvLyBXYWl0IGZvciBzbG90IDAgdG8gZXhlY3V0ZSwgYXQgd2hpY2ggdGltZSB0aGUgVFNMIGlzIHNldHVwIGZvcgotCS8vIHRoZSBuZXh0IERBQyB3cml0ZS4gIFRoaXMgaXMgZGV0ZWN0ZWQgd2hlbiBGQl9CVUZGRVIyIE1TQiBjaGFuZ2VzCi0JLy8gZnJvbSAweDAwIHRvIDB4RkYuCi0Jd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApID09IDApIDsKKwkvKiBXYWl0IGZvciBzbG90IDAgdG8gZXhlY3V0ZSwgYXQgd2hpY2ggdGltZSB0aGUgVFNMIGlzIHNldHVwIGZvcgorCSAqIHRoZSBuZXh0IERBQyB3cml0ZS4gIFRoaXMgaXMgZGV0ZWN0ZWQgd2hlbiBGQl9CVUZGRVIyIE1TQiBjaGFuZ2VzCisJICogZnJvbSAweDAwIHRvIDB4RkYuCisJICovCisJd2hpbGUgKChSUjcxNDYoUF9GQl9CVUZGRVIyKSAmIDB4RkYwMDAwMDApID09IDApCisJCTsKIH0KIAotc3RhdGljIHZvaWQgV3JpdGVNSVNDMihjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBOZXdJbWFnZSkKK3N0YXRpYyB2b2lkIFdyaXRlTUlTQzIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgTmV3SW1hZ2UpCiB7Ci0JREVCSXdyaXRlKGRldiwgTFBfTUlTQzEsIE1JU0MxX1dFTkFCTEUpOwkvLyBlbmFiIHdyaXRlcyB0bwotCS8vIE1JU0MyIHJlZ2lzdGVyLgotCURFQkl3cml0ZShkZXYsIExQX1dSTUlTQzIsIE5ld0ltYWdlKTsJLy8gV3JpdGUgbmV3IGltYWdlIHRvIE1JU0MyLgotCURFQkl3cml0ZShkZXYsIExQX01JU0MxLCBNSVNDMV9XRElTQUJMRSk7CS8vIERpc2FibGUgd3JpdGVzIHRvIE1JU0MyLgorCURFQkl3cml0ZShkZXYsIExQX01JU0MxLCBNSVNDMV9XRU5BQkxFKTsJLyogIGVuYWIgd3JpdGVzIHRvICovCisJLyogIE1JU0MyIHJlZ2lzdGVyLiAqLworCURFQkl3cml0ZShkZXYsIExQX1dSTUlTQzIsIE5ld0ltYWdlKTsJLyogIFdyaXRlIG5ldyBpbWFnZSB0byBNSVNDMi4gKi8KKwlERUJJd3JpdGUoZGV2LCBMUF9NSVNDMSwgTUlTQzFfV0RJU0FCTEUpOwkvKiAgRGlzYWJsZSB3cml0ZXMgdG8gTUlTQzIuICovCiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gSW5pdGlhbGl6ZSB0aGUgREVCSSBpbnRlcmZhY2UgZm9yIGFsbCB0cmFuc2ZlcnMuCisvKiAgSW5pdGlhbGl6ZSB0aGUgREVCSSBpbnRlcmZhY2UgZm9yIGFsbCB0cmFuc2ZlcnMuICovCiAKLXN0YXRpYyB1aW50MTZfdCBERUJJcmVhZChjb21lZGlfZGV2aWNlICogZGV2LCB1aW50MTZfdCBhZGRyKQorc3RhdGljIHVpbnQxNl90IERFQklyZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IGFkZHIpCiB7CiAJdWludDE2X3QgcmV0dmFsOwogCi0JLy8gU2V0IHVwIERFQkkgY29udHJvbCByZWdpc3RlciB2YWx1ZSBpbiBzaGFkb3cgUkFNLgorCS8qICBTZXQgdXAgREVCSSBjb250cm9sIHJlZ2lzdGVyIHZhbHVlIGluIHNoYWRvdyBSQU0uICovCiAJV1I3MTQ2KFBfREVCSUNNRCwgREVCSV9DTURfUkRXT1JEIHwgYWRkcik7CiAKLQkvLyBFeGVjdXRlIHRoZSBERUJJIHRyYW5zZmVyLgorCS8qICBFeGVjdXRlIHRoZSBERUJJIHRyYW5zZmVyLiAqLwogCURFQkl0cmFuc2ZlcihkZXYpOwogCi0JLy8gRmV0Y2ggdGFyZ2V0IHJlZ2lzdGVyIHZhbHVlLgorCS8qICBGZXRjaCB0YXJnZXQgcmVnaXN0ZXIgdmFsdWUuICovCiAJcmV0dmFsID0gKHVpbnQxNl90KSBSUjcxNDYoUF9ERUJJQUQpOwogCi0JLy8gUmV0dXJuIHJlZ2lzdGVyIHZhbHVlLgorCS8qICBSZXR1cm4gcmVnaXN0ZXIgdmFsdWUuICovCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLy8gRXhlY3V0ZSBhIERFQkkgdHJhbnNmZXIuICBUaGlzIG11c3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGEKLS8vIGNyaXRpY2FsIHNlY3Rpb24uCi1zdGF0aWMgdm9pZCBERUJJdHJhbnNmZXIoY29tZWRpX2RldmljZSAqIGRldikKKy8qICBFeGVjdXRlIGEgREVCSSB0cmFuc2Zlci4gIFRoaXMgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSAqLworLyogIGNyaXRpY2FsIHNlY3Rpb24uICovCitzdGF0aWMgdm9pZCBERUJJdHJhbnNmZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQkvLyBJbml0aWF0ZSB1cGxvYWQgb2Ygc2hhZG93IFJBTSB0byBERUJJIGNvbnRyb2wgcmVnaXN0ZXIuCisJLyogIEluaXRpYXRlIHVwbG9hZCBvZiBzaGFkb3cgUkFNIHRvIERFQkkgY29udHJvbCByZWdpc3Rlci4gKi8KIAlNQ19FTkFCTEUoUF9NQzIsIE1DMl9VUExEX0RFQkkpOwogCi0JLy8gV2FpdCBmb3IgY29tcGxldGlvbiBvZiB1cGxvYWQgZnJvbSBzaGFkb3cgUkFNIHRvIERFQkkgY29udHJvbAotCS8vIHJlZ2lzdGVyLgotCXdoaWxlICghTUNfVEVTVChQX01DMiwgTUMyX1VQTERfREVCSSkpIDsKKwkvKiAgV2FpdCBmb3IgY29tcGxldGlvbiBvZiB1cGxvYWQgZnJvbSBzaGFkb3cgUkFNIHRvIERFQkkgY29udHJvbCAqLworCS8qICByZWdpc3Rlci4gKi8KKwl3aGlsZSAoIU1DX1RFU1QoUF9NQzIsIE1DMl9VUExEX0RFQkkpKQorCQk7CiAKLQkvLyBXYWl0IHVudGlsIERFQkkgdHJhbnNmZXIgaXMgZG9uZS4KLQl3aGlsZSAoUlI3MTQ2KFBfUFNSKSAmIFBTUl9ERUJJX1MpIDsKKwkvKiAgV2FpdCB1bnRpbCBERUJJIHRyYW5zZmVyIGlzIGRvbmUuICovCisJd2hpbGUgKFJSNzE0NihQX1BTUikgJiBQU1JfREVCSV9TKQorCQk7CiB9CiAKLS8vIFdyaXRlIGEgdmFsdWUgdG8gYSBnYXRlIGFycmF5IHJlZ2lzdGVyLgotc3RhdGljIHZvaWQgREVCSXdyaXRlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIHVpbnQxNl90IGFkZHIsIHVpbnQxNl90IHdkYXRhKQorLyogIFdyaXRlIGEgdmFsdWUgdG8gYSBnYXRlIGFycmF5IHJlZ2lzdGVyLiAqLworc3RhdGljIHZvaWQgREVCSXdyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHVpbnQxNl90IGFkZHIsIHVpbnQxNl90IHdkYXRhKQogewogCi0JLy8gU2V0IHVwIERFQkkgY29udHJvbCByZWdpc3RlciB2YWx1ZSBpbiBzaGFkb3cgUkFNLgorCS8qICBTZXQgdXAgREVCSSBjb250cm9sIHJlZ2lzdGVyIHZhbHVlIGluIHNoYWRvdyBSQU0uICovCiAJV1I3MTQ2KFBfREVCSUNNRCwgREVCSV9DTURfV1JXT1JEIHwgYWRkcik7CiAJV1I3MTQ2KFBfREVCSUFELCB3ZGF0YSk7CiAKLQkvLyBFeGVjdXRlIHRoZSBERUJJIHRyYW5zZmVyLgorCS8qICBFeGVjdXRlIHRoZSBERUJJIHRyYW5zZmVyLiAqLwogCURFQkl0cmFuc2ZlcihkZXYpOwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gUmVwbGFjZSB0aGUgc3BlY2lmaWVkIGJpdHMgaW4gYSBnYXRlIGFycmF5IHJlZ2lzdGVyLiAgSW1wb3J0czogbWFzawotLy8gc3BlY2lmaWVzIGJpdHMgdGhhdCBhcmUgdG8gYmUgcHJlc2VydmVkLCB3ZGF0YSBpcyBuZXcgdmFsdWUgdG8gYmUKLS8vIG9yJ2Qgd2l0aCB0aGUgbWFza2VkIG9yaWdpbmFsLgotc3RhdGljIHZvaWQgREVCSXJlcGxhY2UoY29tZWRpX2RldmljZSAqIGRldiwgdWludDE2X3QgYWRkciwgdWludDE2X3QgbWFzaywKKy8qIFJlcGxhY2UgdGhlIHNwZWNpZmllZCBiaXRzIGluIGEgZ2F0ZSBhcnJheSByZWdpc3Rlci4gIEltcG9ydHM6IG1hc2sKKyAqIHNwZWNpZmllcyBiaXRzIHRoYXQgYXJlIHRvIGJlIHByZXNlcnZlZCwgd2RhdGEgaXMgbmV3IHZhbHVlIHRvIGJlCisgKiBvcidkIHdpdGggdGhlIG1hc2tlZCBvcmlnaW5hbC4KKyAqLworc3RhdGljIHZvaWQgREVCSXJlcGxhY2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdWludDE2X3QgYWRkciwgdWludDE2X3QgbWFzaywKIAl1aW50MTZfdCB3ZGF0YSkKIHsKIAotCS8vIENvcHkgdGFyZ2V0IGdhdGUgYXJyYXkgcmVnaXN0ZXIgaW50byBQX0RFQklBRCByZWdpc3Rlci4KLQlXUjcxNDYoUF9ERUJJQ01ELCBERUJJX0NNRF9SRFdPUkQgfCBhZGRyKTsJLy8gU2V0IHVwIERFQkkgY29udHJvbAotCS8vIHJlZyB2YWx1ZSBpbiBzaGFkb3cKLQkvLyBSQU0uCi0JREVCSXRyYW5zZmVyKGRldik7CS8vIEV4ZWN1dGUgdGhlIERFQkkKLQkvLyBSZWFkIHRyYW5zZmVyLgorCS8qICBDb3B5IHRhcmdldCBnYXRlIGFycmF5IHJlZ2lzdGVyIGludG8gUF9ERUJJQUQgcmVnaXN0ZXIuICovCisJV1I3MTQ2KFBfREVCSUNNRCwgREVCSV9DTURfUkRXT1JEIHwgYWRkcik7CisJLyogU2V0IHVwIERFQkkgY29udHJvbCByZWcgdmFsdWUgaW4gc2hhZG93IFJBTS4gKi8KKwlERUJJdHJhbnNmZXIoZGV2KTsJLyogIEV4ZWN1dGUgdGhlIERFQkkgUmVhZCB0cmFuc2Zlci4gKi8KIAotCS8vIFdyaXRlIGJhY2sgdGhlIG1vZGlmaWVkIGltYWdlLgotCVdSNzE0NihQX0RFQklDTUQsIERFQklfQ01EX1dSV09SRCB8IGFkZHIpOwkvLyBTZXQgdXAgREVCSSBjb250cm9sCi0JLy8gcmVnIHZhbHVlIGluIHNoYWRvdwotCS8vIFJBTS4KKwkvKiAgV3JpdGUgYmFjayB0aGUgbW9kaWZpZWQgaW1hZ2UuICovCisJV1I3MTQ2KFBfREVCSUNNRCwgREVCSV9DTURfV1JXT1JEIHwgYWRkcik7CisJLyogU2V0IHVwIERFQkkgY29udHJvbCByZWcgdmFsdWUgaW4gc2hhZG93ICBSQU0uICovCiAKLQlXUjcxNDYoUF9ERUJJQUQsIHdkYXRhIHwgKCh1aW50MTZfdCkgUlI3MTQ2KFBfREVCSUFEKSAmIG1hc2spKTsJLy8gTW9kaWZ5IHRoZSByZWdpc3RlciBpbWFnZS4KLQlERUJJdHJhbnNmZXIoZGV2KTsJLy8gRXhlY3V0ZSB0aGUgREVCSSBXcml0ZSB0cmFuc2Zlci4KKwlXUjcxNDYoUF9ERUJJQUQsIHdkYXRhIHwgKCh1aW50MTZfdCkgUlI3MTQ2KFBfREVCSUFEKSAmIG1hc2spKTsKKwkvKiBNb2RpZnkgdGhlIHJlZ2lzdGVyIGltYWdlLiAqLworCURFQkl0cmFuc2ZlcihkZXYpOwkvKiAgRXhlY3V0ZSB0aGUgREVCSSBXcml0ZSB0cmFuc2Zlci4gKi8KIH0KIAotc3RhdGljIHZvaWQgQ2xvc2VETUFCKGNvbWVkaV9kZXZpY2UgKiBkZXYsIERNQUJVRiAqIHBkbWEsIHNpemVfdCBic2l6ZSkKK3N0YXRpYyB2b2lkIENsb3NlRE1BQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgYnVmZmVyRE1BICpwZG1hLCBzaXplX3QgYnNpemUpCiB7CiAJdm9pZCAqdmJwdHI7CiAJZG1hX2FkZHJfdCB2cHB0cjsKQEAgLTI3MjMsNyArMjc0MSw3IEBACiAJREVCVUcoIkNsb3NlRE1BQjogRW50ZXJpbmcgUzYyNkRSVl9DbG9zZURNQUIoKTpcbiIpOwogCWlmIChwZG1hID09IE5VTEwpCiAJCXJldHVybjsKLQkvL2ZpbmQgdGhlIG1hdGNoaW5nIGFsbG9jYXRpb24gZnJvbSB0aGUgYm9hcmQgc3RydWN0CisJLyogZmluZCB0aGUgbWF0Y2hpbmcgYWxsb2NhdGlvbiBmcm9tIHRoZSBib2FyZCBzdHJ1Y3QgKi8KIAogCXZicHRyID0gcGRtYS0+TG9naWNhbEJhc2U7CiAJdnBwdHIgPSBwZG1hLT5QaHlzaWNhbEJhc2U7CkBAIC0yNzM3LDI2OCArMjc1NSwyNjAgQEAKIAl9CiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8gIENPVU5URVIgRlVOQ1RJT05TICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEFsbCBjb3VudGVyIGZ1bmN0aW9ucyBhZGRyZXNzIGEgc3BlY2lmaWMgY291bnRlciBieSBtZWFucyBvZiB0aGUKLS8vICJDb3VudGVyIiBhcmd1bWVudCwgd2hpY2ggaXMgYSBsb2dpY2FsIGNvdW50ZXIgbnVtYmVyLiAgVGhlIENvdW50ZXIKLS8vIGFyZ3VtZW50IG1heSBoYXZlIGFueSBvZiB0aGUgZm9sbG93aW5nIGxlZ2FsIHZhbHVlczogMD0wQSwgMT0xQSwKLS8vIDI9MkEsIDM9MEIsIDQ9MUIsIDU9MkIuCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8qICoqKioqKiAgQ09VTlRFUiBGVU5DVElPTlMgICoqKioqKiogKi8KKy8qIEFsbCBjb3VudGVyIGZ1bmN0aW9ucyBhZGRyZXNzIGEgc3BlY2lmaWMgY291bnRlciBieSBtZWFucyBvZiB0aGUKKyAqICJDb3VudGVyIiBhcmd1bWVudCwgd2hpY2ggaXMgYSBsb2dpY2FsIGNvdW50ZXIgbnVtYmVyLiAgVGhlIENvdW50ZXIKKyAqIGFyZ3VtZW50IG1heSBoYXZlIGFueSBvZiB0aGUgZm9sbG93aW5nIGxlZ2FsIHZhbHVlczogMD0wQSwgMT0xQSwKKyAqIDI9MkEsIDM9MEIsIDQ9MUIsIDU9MkIuCisgKi8KIAotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBjb21tb24gdG8gYm90aCBBIGFuZCBCCi0vLyBjb3VudGVyczoKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgY29tbW9uIHRvIGJvdGggQSBhbmQgQiBjb3VudGVyczogKi8KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLy8vLy8vLy8vLy8vLy8vLy8vLyBQUklWQVRFIENPVU5URVIgRlVOQ1RJT05TICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyogKioqKioqICBQUklWQVRFIENPVU5URVIgRlVOQ1RJT05TICoqKioqKiAqLwogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gUmVhZCBhIGNvdW50ZXIncyBvdXRwdXQgbGF0Y2guCisvKiAgUmVhZCBhIGNvdW50ZXIncyBvdXRwdXQgbGF0Y2guICovCiAKLXN0YXRpYyB1aW50MzJfdCBSZWFkTGF0Y2goY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHVpbnQzMl90IFJlYWRMYXRjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmVnaXN0ZXIgdWludDMyX3QgdmFsdWU7Ci0JLy9ERUJVRyBGSVhNRSBERUJVRygiUmVhZExhdGNoOiBSZWFkIExhdGNoIGVudGVyXG4iKTsKKwkvKiBERUJVRyBGSVhNRSBERUJVRygiUmVhZExhdGNoOiBSZWFkIExhdGNoIGVudGVyXG4iKTsgKi8KIAotCS8vIExhdGNoIGNvdW50cyBhbmQgZmV0Y2ggTFNXIG9mIGxhdGNoZWQgY291bnRzIHZhbHVlLgorCS8qICBMYXRjaCBjb3VudHMgYW5kIGZldGNoIExTVyBvZiBsYXRjaGVkIGNvdW50cyB2YWx1ZS4gKi8KIAl2YWx1ZSA9ICh1aW50MzJfdCkgREVCSXJlYWQoZGV2LCBrLT5NeUxhdGNoTHN3KTsKIAotCS8vIEZldGNoIE1TVyBvZiBsYXRjaGVkIGNvdW50cyBhbmQgY29tYmluZSB3aXRoIExTVy4KKwkvKiAgRmV0Y2ggTVNXIG9mIGxhdGNoZWQgY291bnRzIGFuZCBjb21iaW5lIHdpdGggTFNXLiAqLwogCXZhbHVlIHw9ICgodWludDMyX3QpIERFQklyZWFkKGRldiwgay0+TXlMYXRjaExzdyArIDIpIDw8IDE2KTsKIAotCS8vIERFQlVHIEZJWE1FIERFQlVHKCJSZWFkTGF0Y2g6IFJlYWQgTGF0Y2ggZXhpdFxuIik7CisJLyogIERFQlVHIEZJWE1FIERFQlVHKCJSZWFkTGF0Y2g6IFJlYWQgTGF0Y2ggZXhpdFxuIik7ICovCiAKLQkvLyBSZXR1cm4gbGF0Y2hlZCBjb3VudHMuCisJLyogIFJldHVybiBsYXRjaGVkIGNvdW50cy4gKi8KIAlyZXR1cm4gdmFsdWU7CiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFJlc2V0IGEgY291bnRlcidzIGluZGV4IGFuZCBvdmVyZmxvdyBldmVudCBjYXB0dXJlIGZsYWdzLgorLyogIFJlc2V0IGEgY291bnRlcidzIGluZGV4IGFuZCBvdmVyZmxvdyBldmVudCBjYXB0dXJlIGZsYWdzLiAqLwogCi1zdGF0aWMgdm9pZCBSZXNldENhcEZsYWdzX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHZvaWQgUmVzZXRDYXBGbGFnc19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaykKIHsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JCLCAodWludDE2X3QpICh+Q1JCTVNLX0lOVENUUkwpLAogCQlDUkJNU0tfSU5UUkVTRVRDTUQgfCBDUkJNU0tfSU5UUkVTRVRfQSk7CiB9CiAKLXN0YXRpYyB2b2lkIFJlc2V0Q2FwRmxhZ3NfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdm9pZCBSZXNldENhcEZsYWdzX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCURFQklyZXBsYWNlKGRldiwgay0+TXlDUkIsICh1aW50MTZfdCkgKH5DUkJNU0tfSU5UQ1RSTCksCiAJCUNSQk1TS19JTlRSRVNFVENNRCB8IENSQk1TS19JTlRSRVNFVF9CKTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gUmV0dXJuIGNvdW50ZXIgc2V0dXAgaW4gYSBmb3JtYXQgKENPVU5URVJfU0VUVVApIHRoYXQgaXMgY29uc2lzdGVudAotLy8gZm9yIGJvdGggQSBhbmQgQiBjb3VudGVycy4KKy8qICBSZXR1cm4gY291bnRlciBzZXR1cCBpbiBhIGZvcm1hdCAoQ09VTlRFUl9TRVRVUCkgdGhhdCBpcyBjb25zaXN0ZW50ICovCisvKiAgZm9yIGJvdGggQSBhbmQgQiBjb3VudGVycy4gKi8KIAotc3RhdGljIHVpbnQxNl90IEdldE1vZGVfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdWludDE2X3QgR2V0TW9kZV9BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaykKIHsKIAlyZWdpc3RlciB1aW50MTZfdCBjcmE7CiAJcmVnaXN0ZXIgdWludDE2X3QgY3JiOwogCXJlZ2lzdGVyIHVpbnQxNl90IHNldHVwOwogCi0JLy8gRmV0Y2ggQ1JBIGFuZCBDUkIgcmVnaXN0ZXIgaW1hZ2VzLgorCS8qICBGZXRjaCBDUkEgYW5kIENSQiByZWdpc3RlciBpbWFnZXMuICovCiAJY3JhID0gREVCSXJlYWQoZGV2LCBrLT5NeUNSQSk7CiAJY3JiID0gREVCSXJlYWQoZGV2LCBrLT5NeUNSQik7CiAKLQkvLyBQb3B1bGF0ZSB0aGUgc3RhbmRhcmRpemVkIGNvdW50ZXIgc2V0dXAgYml0IGZpZWxkcy4gIE5vdGU6Ci0JLy8gSW5kZXhTcmMgaXMgcmVzdHJpY3RlZCB0byBFTkNfWCBvciBJbmR4UG9sLgotCXNldHVwID0gKChjcmEgJiBTVERNU0tfTE9BRFNSQykJLy8gTG9hZFNyYyAgPSBMb2FkU3JjQS4KLQkJfCAoKGNyYiA8PCAoU1REQklUX0xBVENIU1JDIC0gQ1JCQklUX0xBVENIU1JDKSkgJiBTVERNU0tfTEFUQ0hTUkMpCS8vIExhdGNoU3JjID0gTGF0Y2hTcmNBLgotCQl8ICgoY3JhIDw8IChTVERCSVRfSU5UU1JDIC0gQ1JBQklUX0lOVFNSQ19BKSkgJiBTVERNU0tfSU5UU1JDKQkvLyBJbnRTcmMgICA9IEludFNyY0EuCi0JCXwgKChjcmEgPDwgKFNUREJJVF9JTkRYU1JDIC0gKENSQUJJVF9JTkRYU1JDX0EgKyAxKSkpICYgU1RETVNLX0lORFhTUkMpCS8vIEluZHhTcmMgID0gSW5keFNyY0E8MT4uCi0JCXwgKChjcmEgPj4gKENSQUJJVF9JTkRYUE9MX0EgLSBTVERCSVRfSU5EWFBPTCkpICYgU1RETVNLX0lORFhQT0wpCS8vIEluZHhQb2wgID0gSW5keFBvbEEuCi0JCXwgKChjcmIgPj4gKENSQkJJVF9DTEtFTkFCX0EgLSBTVERCSVRfQ0xLRU5BQikpICYgU1RETVNLX0NMS0VOQUIpKTsJLy8gQ2xrRW5hYiAgPSBDbGtFbmFiQS4KKwkvKiAgUG9wdWxhdGUgdGhlIHN0YW5kYXJkaXplZCBjb3VudGVyIHNldHVwIGJpdCBmaWVsZHMuICBOb3RlOiAqLworCS8qICBJbmRleFNyYyBpcyByZXN0cmljdGVkIHRvIEVOQ19YIG9yIEluZHhQb2wuICovCisJc2V0dXAgPSAoKGNyYSAmIFNURE1TS19MT0FEU1JDKQkvKiAgTG9hZFNyYyAgPSBMb2FkU3JjQS4gKi8KKwkJfCAoKGNyYiA8PCAoU1REQklUX0xBVENIU1JDIC0gQ1JCQklUX0xBVENIU1JDKSkgJiBTVERNU0tfTEFUQ0hTUkMpCS8qICBMYXRjaFNyYyA9IExhdGNoU3JjQS4gKi8KKwkJfCAoKGNyYSA8PCAoU1REQklUX0lOVFNSQyAtIENSQUJJVF9JTlRTUkNfQSkpICYgU1RETVNLX0lOVFNSQykJLyogIEludFNyYyAgID0gSW50U3JjQS4gKi8KKwkJfCAoKGNyYSA8PCAoU1REQklUX0lORFhTUkMgLSAoQ1JBQklUX0lORFhTUkNfQSArIDEpKSkgJiBTVERNU0tfSU5EWFNSQykJLyogIEluZHhTcmMgID0gSW5keFNyY0E8MT4uICovCisJCXwgKChjcmEgPj4gKENSQUJJVF9JTkRYUE9MX0EgLSBTVERCSVRfSU5EWFBPTCkpICYgU1RETVNLX0lORFhQT0wpCS8qICBJbmR4UG9sICA9IEluZHhQb2xBLiAqLworCQl8ICgoY3JiID4+IChDUkJCSVRfQ0xLRU5BQl9BIC0gU1REQklUX0NMS0VOQUIpKSAmIFNURE1TS19DTEtFTkFCKSk7CS8qICBDbGtFbmFiICA9IENsa0VuYWJBLiAqLwogCi0JLy8gQWRqdXN0IG1vZGUtZGVwZW5kZW50IHBhcmFtZXRlcnMuCi0JaWYgKGNyYSAmICgyIDw8IENSQUJJVF9DTEtTUkNfQSkpCS8vIElmIFRpbWVyIG1vZGUgKENsa1NyY0E8MT4gPT0gMSk6Ci0JCXNldHVwIHw9ICgoQ0xLU1JDX1RJTUVSIDw8IFNUREJJVF9DTEtTUkMpCS8vICAgSW5kaWNhdGUgVGltZXIgbW9kZS4KLQkJCXwgKChjcmEgPDwgKFNUREJJVF9DTEtQT0wgLSBDUkFCSVRfQ0xLU1JDX0EpKSAmIFNURE1TS19DTEtQT0wpCS8vICAgU2V0IENsa1BvbCB0byBpbmRpY2F0ZSBjb3VudCBkaXJlY3Rpb24gKENsa1NyY0E8MD4pLgotCQkJfCAoTVVMVF9YMSA8PCBTVERCSVRfQ0xLTVVMVCkpOwkvLyAgIENsa011bHQgbXVzdCBiZSAxeCBpbiBUaW1lciBtb2RlLgorCS8qICBBZGp1c3QgbW9kZS1kZXBlbmRlbnQgcGFyYW1ldGVycy4gKi8KKwlpZiAoY3JhICYgKDIgPDwgQ1JBQklUX0NMS1NSQ19BKSkJLyogIElmIFRpbWVyIG1vZGUgKENsa1NyY0E8MT4gPT0gMSk6ICovCisJCXNldHVwIHw9ICgoQ0xLU1JDX1RJTUVSIDw8IFNUREJJVF9DTEtTUkMpCS8qICAgIEluZGljYXRlIFRpbWVyIG1vZGUuICovCisJCQl8ICgoY3JhIDw8IChTVERCSVRfQ0xLUE9MIC0gQ1JBQklUX0NMS1NSQ19BKSkgJiBTVERNU0tfQ0xLUE9MKQkvKiAgICBTZXQgQ2xrUG9sIHRvIGluZGljYXRlIGNvdW50IGRpcmVjdGlvbiAoQ2xrU3JjQTwwPikuICovCisJCQl8IChNVUxUX1gxIDw8IFNUREJJVF9DTEtNVUxUKSk7CS8qICAgIENsa011bHQgbXVzdCBiZSAxeCBpbiBUaW1lciBtb2RlLiAqLwogCi0JZWxzZQkJCS8vIElmIENvdW50ZXIgbW9kZSAoQ2xrU3JjQTwxPiA9PSAwKToKLQkJc2V0dXAgfD0gKChDTEtTUkNfQ09VTlRFUiA8PCBTVERCSVRfQ0xLU1JDKQkvLyAgIEluZGljYXRlIENvdW50ZXIgbW9kZS4KLQkJCXwgKChjcmEgPj4gKENSQUJJVF9DTEtQT0xfQSAtIFNUREJJVF9DTEtQT0wpKSAmIFNURE1TS19DTEtQT0wpCS8vICAgUGFzcyB0aHJvdWdoIENsa1BvbC4KLQkJCXwgKCgoY3JhICYgQ1JBTVNLX0NMS01VTFRfQSkgPT0gKE1VTFRfWDAgPDwgQ1JBQklUX0NMS01VTFRfQSkpID8JLy8gICBGb3JjZSBDbGtNdWx0IHRvIDF4IGlmIG5vdCBsZWdhbCwgZWxzZSBwYXNzIHRocm91Z2guCisJZWxzZQkJCS8qICBJZiBDb3VudGVyIG1vZGUgKENsa1NyY0E8MT4gPT0gMCk6ICovCisJCXNldHVwIHw9ICgoQ0xLU1JDX0NPVU5URVIgPDwgU1REQklUX0NMS1NSQykJLyogICAgSW5kaWNhdGUgQ291bnRlciBtb2RlLiAqLworCQkJfCAoKGNyYSA+PiAoQ1JBQklUX0NMS1BPTF9BIC0gU1REQklUX0NMS1BPTCkpICYgU1RETVNLX0NMS1BPTCkJLyogICAgUGFzcyB0aHJvdWdoIENsa1BvbC4gKi8KKwkJCXwgKCgoY3JhICYgQ1JBTVNLX0NMS01VTFRfQSkgPT0gKE1VTFRfWDAgPDwgQ1JBQklUX0NMS01VTFRfQSkpID8JLyogICAgRm9yY2UgQ2xrTXVsdCB0byAxeCBpZiBub3QgbGVnYWwsIGVsc2UgcGFzcyB0aHJvdWdoLiAqLwogCQkJCShNVUxUX1gxIDw8IFNUREJJVF9DTEtNVUxUKSA6CiAJCQkJKChjcmEgPj4gKENSQUJJVF9DTEtNVUxUX0EgLQogCQkJCQkJCVNUREJJVF9DTEtNVUxUKSkgJgogCQkJCQlTVERNU0tfQ0xLTVVMVCkpKTsKIAotCS8vIFJldHVybiBhZGp1c3RlZCBjb3VudGVyIHNldHVwLgorCS8qICBSZXR1cm4gYWRqdXN0ZWQgY291bnRlciBzZXR1cC4gKi8KIAlyZXR1cm4gc2V0dXA7CiB9CiAKLXN0YXRpYyB1aW50MTZfdCBHZXRNb2RlX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHVpbnQxNl90IEdldE1vZGVfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmVnaXN0ZXIgdWludDE2X3QgY3JhOwogCXJlZ2lzdGVyIHVpbnQxNl90IGNyYjsKIAlyZWdpc3RlciB1aW50MTZfdCBzZXR1cDsKIAotCS8vIEZldGNoIENSQSBhbmQgQ1JCIHJlZ2lzdGVyIGltYWdlcy4KKwkvKiAgRmV0Y2ggQ1JBIGFuZCBDUkIgcmVnaXN0ZXIgaW1hZ2VzLiAqLwogCWNyYSA9IERFQklyZWFkKGRldiwgay0+TXlDUkEpOwogCWNyYiA9IERFQklyZWFkKGRldiwgay0+TXlDUkIpOwogCi0JLy8gUG9wdWxhdGUgdGhlIHN0YW5kYXJkaXplZCBjb3VudGVyIHNldHVwIGJpdCBmaWVsZHMuICBOb3RlOgotCS8vIEluZGV4U3JjIGlzIHJlc3RyaWN0ZWQgdG8gRU5DX1ggb3IgSW5keFBvbC4KLQlzZXR1cCA9ICgoKGNyYiA8PCAoU1REQklUX0lOVFNSQyAtIENSQkJJVF9JTlRTUkNfQikpICYgU1RETVNLX0lOVFNSQykJLy8gSW50U3JjICAgPSBJbnRTcmNCLgotCQl8ICgoY3JiIDw8IChTVERCSVRfTEFUQ0hTUkMgLSBDUkJCSVRfTEFUQ0hTUkMpKSAmIFNURE1TS19MQVRDSFNSQykJLy8gTGF0Y2hTcmMgPSBMYXRjaFNyY0IuCi0JCXwgKChjcmIgPDwgKFNUREJJVF9MT0FEU1JDIC0gQ1JCQklUX0xPQURTUkNfQikpICYgU1RETVNLX0xPQURTUkMpCS8vIExvYWRTcmMgID0gTG9hZFNyY0IuCi0JCXwgKChjcmIgPDwgKFNUREJJVF9JTkRYUE9MIC0gQ1JCQklUX0lORFhQT0xfQikpICYgU1RETVNLX0lORFhQT0wpCS8vIEluZHhQb2wgID0gSW5keFBvbEIuCi0JCXwgKChjcmIgPj4gKENSQkJJVF9DTEtFTkFCX0IgLSBTVERCSVRfQ0xLRU5BQikpICYgU1RETVNLX0NMS0VOQUIpCS8vIENsa0VuYWIgID0gQ2xrRW5hYkIuCi0JCXwgKChjcmEgPj4gKChDUkFCSVRfSU5EWFNSQ19CICsgMSkgLSBTVERCSVRfSU5EWFNSQykpICYgU1RETVNLX0lORFhTUkMpKTsJLy8gSW5keFNyYyAgPSBJbmR4U3JjQjwxPi4KKwkvKiAgUG9wdWxhdGUgdGhlIHN0YW5kYXJkaXplZCBjb3VudGVyIHNldHVwIGJpdCBmaWVsZHMuICBOb3RlOiAqLworCS8qICBJbmRleFNyYyBpcyByZXN0cmljdGVkIHRvIEVOQ19YIG9yIEluZHhQb2wuICovCisJc2V0dXAgPSAoKChjcmIgPDwgKFNUREJJVF9JTlRTUkMgLSBDUkJCSVRfSU5UU1JDX0IpKSAmIFNURE1TS19JTlRTUkMpCS8qICBJbnRTcmMgICA9IEludFNyY0IuICovCisJCXwgKChjcmIgPDwgKFNUREJJVF9MQVRDSFNSQyAtIENSQkJJVF9MQVRDSFNSQykpICYgU1RETVNLX0xBVENIU1JDKQkvKiAgTGF0Y2hTcmMgPSBMYXRjaFNyY0IuICovCisJCXwgKChjcmIgPDwgKFNUREJJVF9MT0FEU1JDIC0gQ1JCQklUX0xPQURTUkNfQikpICYgU1RETVNLX0xPQURTUkMpCS8qICBMb2FkU3JjICA9IExvYWRTcmNCLiAqLworCQl8ICgoY3JiIDw8IChTVERCSVRfSU5EWFBPTCAtIENSQkJJVF9JTkRYUE9MX0IpKSAmIFNURE1TS19JTkRYUE9MKQkvKiAgSW5keFBvbCAgPSBJbmR4UG9sQi4gKi8KKwkJfCAoKGNyYiA+PiAoQ1JCQklUX0NMS0VOQUJfQiAtIFNUREJJVF9DTEtFTkFCKSkgJiBTVERNU0tfQ0xLRU5BQikJLyogIENsa0VuYWIgID0gQ2xrRW5hYkIuICovCisJCXwgKChjcmEgPj4gKChDUkFCSVRfSU5EWFNSQ19CICsgMSkgLSBTVERCSVRfSU5EWFNSQykpICYgU1RETVNLX0lORFhTUkMpKTsJLyogIEluZHhTcmMgID0gSW5keFNyY0I8MT4uICovCiAKLQkvLyBBZGp1c3QgbW9kZS1kZXBlbmRlbnQgcGFyYW1ldGVycy4KLQlpZiAoKGNyYiAmIENSQk1TS19DTEtNVUxUX0IpID09IChNVUxUX1gwIDw8IENSQkJJVF9DTEtNVUxUX0IpKQkvLyBJZiBFeHRlbmRlciBtb2RlIChDbGtNdWx0QiA9PSBNVUxUX1gwKToKLQkJc2V0dXAgfD0gKChDTEtTUkNfRVhURU5ERVIgPDwgU1REQklUX0NMS1NSQykJLy8gICBJbmRpY2F0ZSBFeHRlbmRlciBtb2RlLgotCQkJfCAoTVVMVF9YMSA8PCBTVERCSVRfQ0xLTVVMVCkJLy8gICBJbmRpY2F0ZSBtdWx0aXBsaWVyIGlzIDF4LgotCQkJfCAoKGNyYSA+PiAoQ1JBQklUX0NMS1NSQ19CIC0gU1REQklUX0NMS1BPTCkpICYgU1RETVNLX0NMS1BPTCkpOwkvLyAgIFNldCBDbGtQb2wgZXF1YWwgdG8gVGltZXIgY291bnQgZGlyZWN0aW9uIChDbGtTcmNCPDA+KS4KKwkvKiAgQWRqdXN0IG1vZGUtZGVwZW5kZW50IHBhcmFtZXRlcnMuICovCisJaWYgKChjcmIgJiBDUkJNU0tfQ0xLTVVMVF9CKSA9PSAoTVVMVF9YMCA8PCBDUkJCSVRfQ0xLTVVMVF9CKSkJLyogIElmIEV4dGVuZGVyIG1vZGUgKENsa011bHRCID09IE1VTFRfWDApOiAqLworCQlzZXR1cCB8PSAoKENMS1NSQ19FWFRFTkRFUiA8PCBTVERCSVRfQ0xLU1JDKQkvKiAgICBJbmRpY2F0ZSBFeHRlbmRlciBtb2RlLiAqLworCQkJfCAoTVVMVF9YMSA8PCBTVERCSVRfQ0xLTVVMVCkJLyogICAgSW5kaWNhdGUgbXVsdGlwbGllciBpcyAxeC4gKi8KKwkJCXwgKChjcmEgPj4gKENSQUJJVF9DTEtTUkNfQiAtIFNUREJJVF9DTEtQT0wpKSAmIFNURE1TS19DTEtQT0wpKTsJLyogICAgU2V0IENsa1BvbCBlcXVhbCB0byBUaW1lciBjb3VudCBkaXJlY3Rpb24gKENsa1NyY0I8MD4pLiAqLwogCi0JZWxzZSBpZiAoY3JhICYgKDIgPDwgQ1JBQklUX0NMS1NSQ19CKSkJLy8gSWYgVGltZXIgbW9kZSAoQ2xrU3JjQjwxPiA9PSAxKToKLQkJc2V0dXAgfD0gKChDTEtTUkNfVElNRVIgPDwgU1REQklUX0NMS1NSQykJLy8gICBJbmRpY2F0ZSBUaW1lciBtb2RlLgotCQkJfCAoTVVMVF9YMSA8PCBTVERCSVRfQ0xLTVVMVCkJLy8gICBJbmRpY2F0ZSBtdWx0aXBsaWVyIGlzIDF4LgotCQkJfCAoKGNyYSA+PiAoQ1JBQklUX0NMS1NSQ19CIC0gU1REQklUX0NMS1BPTCkpICYgU1RETVNLX0NMS1BPTCkpOwkvLyAgIFNldCBDbGtQb2wgZXF1YWwgdG8gVGltZXIgY291bnQgZGlyZWN0aW9uIChDbGtTcmNCPDA+KS4KKwllbHNlIGlmIChjcmEgJiAoMiA8PCBDUkFCSVRfQ0xLU1JDX0IpKQkvKiAgSWYgVGltZXIgbW9kZSAoQ2xrU3JjQjwxPiA9PSAxKTogKi8KKwkJc2V0dXAgfD0gKChDTEtTUkNfVElNRVIgPDwgU1REQklUX0NMS1NSQykJLyogICAgSW5kaWNhdGUgVGltZXIgbW9kZS4gKi8KKwkJCXwgKE1VTFRfWDEgPDwgU1REQklUX0NMS01VTFQpCS8qICAgIEluZGljYXRlIG11bHRpcGxpZXIgaXMgMXguICovCisJCQl8ICgoY3JhID4+IChDUkFCSVRfQ0xLU1JDX0IgLSBTVERCSVRfQ0xLUE9MKSkgJiBTVERNU0tfQ0xLUE9MKSk7CS8qICAgIFNldCBDbGtQb2wgZXF1YWwgdG8gVGltZXIgY291bnQgZGlyZWN0aW9uIChDbGtTcmNCPDA+KS4gKi8KIAotCWVsc2UJCQkvLyBJZiBDb3VudGVyIG1vZGUgKENsa1NyY0I8MT4gPT0gMCk6Ci0JCXNldHVwIHw9ICgoQ0xLU1JDX0NPVU5URVIgPDwgU1REQklUX0NMS1NSQykJLy8gICBJbmRpY2F0ZSBUaW1lciBtb2RlLgotCQkJfCAoKGNyYiA+PiAoQ1JCQklUX0NMS01VTFRfQiAtIFNUREJJVF9DTEtNVUxUKSkgJiBTVERNU0tfQ0xLTVVMVCkJLy8gICBDbG9jayBtdWx0aXBsaWVyIGlzIHBhc3NlZCB0aHJvdWdoLgotCQkJfCAoKGNyYiA8PCAoU1REQklUX0NMS1BPTCAtIENSQkJJVF9DTEtQT0xfQikpICYgU1RETVNLX0NMS1BPTCkpOwkvLyAgIENsb2NrIHBvbGFyaXR5IGlzIHBhc3NlZCB0aHJvdWdoLgorCWVsc2UJCQkvKiAgSWYgQ291bnRlciBtb2RlIChDbGtTcmNCPDE+ID09IDApOiAqLworCQlzZXR1cCB8PSAoKENMS1NSQ19DT1VOVEVSIDw8IFNUREJJVF9DTEtTUkMpCS8qICAgIEluZGljYXRlIFRpbWVyIG1vZGUuICovCisJCQl8ICgoY3JiID4+IChDUkJCSVRfQ0xLTVVMVF9CIC0gU1REQklUX0NMS01VTFQpKSAmIFNURE1TS19DTEtNVUxUKQkvKiAgICBDbG9jayBtdWx0aXBsaWVyIGlzIHBhc3NlZCB0aHJvdWdoLiAqLworCQkJfCAoKGNyYiA8PCAoU1REQklUX0NMS1BPTCAtIENSQkJJVF9DTEtQT0xfQikpICYgU1RETVNLX0NMS1BPTCkpOwkvKiAgICBDbG9jayBwb2xhcml0eSBpcyBwYXNzZWQgdGhyb3VnaC4gKi8KIAotCS8vIFJldHVybiBhZGp1c3RlZCBjb3VudGVyIHNldHVwLgorCS8qICBSZXR1cm4gYWRqdXN0ZWQgY291bnRlciBzZXR1cC4gKi8KIAlyZXR1cm4gc2V0dXA7CiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gU2V0IHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHNwZWNpZmllZCBjb3VudGVyLiAgVGhlIHNldHVwCi0vLyBwYXJhbWV0ZXIgaXMgdHJlYXRlZCBhcyBhIENPVU5URVJfU0VUVVAgZGF0YSB0eXBlLiAgVGhlIGZvbGxvd2luZwotLy8gcGFyYW1ldGVycyBhcmUgcHJvZ3JhbW1hYmxlIChhbGwgb3RoZXIgcGFybXMgYXJlIGlnbm9yZWQpOiBDbGtNdWx0LAotLy8gQ2xrUG9sLCBDbGtFbmFiLCBJbmRleFNyYywgSW5kZXhQb2wsIExvYWRTcmMuCisvKgorICogU2V0IHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHNwZWNpZmllZCBjb3VudGVyLiAgVGhlIHNldHVwCisgKiBwYXJhbWV0ZXIgaXMgdHJlYXRlZCBhcyBhIENPVU5URVJfU0VUVVAgZGF0YSB0eXBlLiAgVGhlIGZvbGxvd2luZworICogcGFyYW1ldGVycyBhcmUgcHJvZ3JhbW1hYmxlIChhbGwgb3RoZXIgcGFybXMgYXJlIGlnbm9yZWQpOiBDbGtNdWx0LAorICogQ2xrUG9sLCBDbGtFbmFiLCBJbmRleFNyYywgSW5kZXhQb2wsIExvYWRTcmMuCisgKi8KIAotc3RhdGljIHZvaWQgU2V0TW9kZV9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgU2V0dXAsCitzdGF0aWMgdm9pZCBTZXRNb2RlX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCBTZXR1cCwKIAl1aW50MTZfdCBEaXNhYmxlSW50U3JjKQogewogCXJlZ2lzdGVyIHVpbnQxNl90IGNyYTsKIAlyZWdpc3RlciB1aW50MTZfdCBjcmI7Ci0JcmVnaXN0ZXIgdWludDE2X3Qgc2V0dXAgPSBTZXR1cDsJLy8gQ2FjaGUgdGhlIFN0YW5kYXJkIFNldHVwLgorCXJlZ2lzdGVyIHVpbnQxNl90IHNldHVwID0gU2V0dXA7CS8qICBDYWNoZSB0aGUgU3RhbmRhcmQgU2V0dXAuICovCiAKLQkvLyBJbml0aWFsaXplIENSQSBhbmQgQ1JCIGltYWdlcy4KLQljcmEgPSAoKHNldHVwICYgQ1JBTVNLX0xPQURTUkNfQSkJLy8gUHJlbG9hZCB0cmlnZ2VyIGlzIHBhc3NlZCB0aHJvdWdoLgotCQl8ICgoc2V0dXAgJiBTVERNU0tfSU5EWFNSQykgPj4gKFNUREJJVF9JTkRYU1JDIC0gKENSQUJJVF9JTkRYU1JDX0EgKyAxKSkpKTsJLy8gSW5kZXhTcmMgaXMgcmVzdHJpY3RlZCB0byBFTkNfWCBvciBJbmR4UG9sLgorCS8qICBJbml0aWFsaXplIENSQSBhbmQgQ1JCIGltYWdlcy4gKi8KKwljcmEgPSAoKHNldHVwICYgQ1JBTVNLX0xPQURTUkNfQSkJLyogIFByZWxvYWQgdHJpZ2dlciBpcyBwYXNzZWQgdGhyb3VnaC4gKi8KKwkJfCAoKHNldHVwICYgU1RETVNLX0lORFhTUkMpID4+IChTVERCSVRfSU5EWFNSQyAtIChDUkFCSVRfSU5EWFNSQ19BICsgMSkpKSk7CS8qICBJbmRleFNyYyBpcyByZXN0cmljdGVkIHRvIEVOQ19YIG9yIEluZHhQb2wuICovCiAKLQljcmIgPSAoQ1JCTVNLX0lOVFJFU0VUQ01EIHwgQ1JCTVNLX0lOVFJFU0VUX0EJLy8gUmVzZXQgYW55IHBlbmRpbmcgQ291bnRlckEgZXZlbnQgY2FwdHVyZXMuCi0JCXwgKChzZXR1cCAmIFNURE1TS19DTEtFTkFCKSA8PCAoQ1JCQklUX0NMS0VOQUJfQSAtIFNUREJJVF9DTEtFTkFCKSkpOwkvLyBDbG9jayBlbmFibGUgaXMgcGFzc2VkIHRocm91Z2guCisJY3JiID0gKENSQk1TS19JTlRSRVNFVENNRCB8IENSQk1TS19JTlRSRVNFVF9BCS8qICBSZXNldCBhbnkgcGVuZGluZyBDb3VudGVyQSBldmVudCBjYXB0dXJlcy4gKi8KKwkJfCAoKHNldHVwICYgU1RETVNLX0NMS0VOQUIpIDw8IChDUkJCSVRfQ0xLRU5BQl9BIC0gU1REQklUX0NMS0VOQUIpKSk7CS8qICBDbG9jayBlbmFibGUgaXMgcGFzc2VkIHRocm91Z2guICovCiAKLQkvLyBGb3JjZSBJbnRTcmMgdG8gRGlzYWJsZWQgaWYgRGlzYWJsZUludFNyYyBpcyBhc3NlcnRlZC4KKwkvKiAgRm9yY2UgSW50U3JjIHRvIERpc2FibGVkIGlmIERpc2FibGVJbnRTcmMgaXMgYXNzZXJ0ZWQuICovCiAJaWYgKCFEaXNhYmxlSW50U3JjKQogCQljcmEgfD0gKChzZXR1cCAmIFNURE1TS19JTlRTUkMpID4+IChTVERCSVRfSU5UU1JDIC0KIAkJCQlDUkFCSVRfSU5UU1JDX0EpKTsKIAotCS8vIFBvcHVsYXRlIGFsbCBtb2RlLWRlcGVuZGVudCBhdHRyaWJ1dGVzIG9mIENSQSAmIENSQiBpbWFnZXMuCisJLyogIFBvcHVsYXRlIGFsbCBtb2RlLWRlcGVuZGVudCBhdHRyaWJ1dGVzIG9mIENSQSAmIENSQiBpbWFnZXMuICovCiAJc3dpdGNoICgoc2V0dXAgJiBTVERNU0tfQ0xLU1JDKSA+PiBTVERCSVRfQ0xLU1JDKSB7Ci0JY2FzZSBDTEtTUkNfRVhURU5ERVI6CS8vIEV4dGVuZGVyIE1vZGU6IEZvcmNlIHRvIFRpbWVyIG1vZGUKLQkJLy8gKEV4dGVuZGVyIHZhbGlkIG9ubHkgZm9yIEIgY291bnRlcnMpLgorCWNhc2UgQ0xLU1JDX0VYVEVOREVSOgkvKiAgRXh0ZW5kZXIgTW9kZTogRm9yY2UgdG8gVGltZXIgbW9kZSAqLworCQkvKiAgKEV4dGVuZGVyIHZhbGlkIG9ubHkgZm9yIEIgY291bnRlcnMpLiAqLwogCi0JY2FzZSBDTEtTUkNfVElNRVI6CS8vIFRpbWVyIE1vZGU6Ci0JCWNyYSB8PSAoKDIgPDwgQ1JBQklUX0NMS1NSQ19BKQkvLyAgIENsa1NyY0E8MT4gc2VsZWN0cyBzeXN0ZW0gY2xvY2sKLQkJCXwgKChzZXR1cCAmIFNURE1TS19DTEtQT0wpID4+IChTVERCSVRfQ0xLUE9MIC0gQ1JBQklUX0NMS1NSQ19BKSkJLy8gICAgIHdpdGggY291bnQgZGlyZWN0aW9uIChDbGtTcmNBPDA+KSBvYnRhaW5lZCBmcm9tIENsa1BvbC4KLQkJCXwgKDEgPDwgQ1JBQklUX0NMS1BPTF9BKQkvLyAgIENsa1BvbEEgYmVoYXZlcyBhcyBhbHdheXMtb24gY2xvY2sgZW5hYmxlLgotCQkJfCAoTVVMVF9YMSA8PCBDUkFCSVRfQ0xLTVVMVF9BKSk7CS8vICAgQ2xrTXVsdCBtdXN0IGJlIDF4LgorCWNhc2UgQ0xLU1JDX1RJTUVSOgkvKiAgVGltZXIgTW9kZTogKi8KKwkJY3JhIHw9ICgoMiA8PCBDUkFCSVRfQ0xLU1JDX0EpCS8qICAgIENsa1NyY0E8MT4gc2VsZWN0cyBzeXN0ZW0gY2xvY2sgKi8KKwkJCXwgKChzZXR1cCAmIFNURE1TS19DTEtQT0wpID4+IChTVERCSVRfQ0xLUE9MIC0gQ1JBQklUX0NMS1NSQ19BKSkJLyogICAgICB3aXRoIGNvdW50IGRpcmVjdGlvbiAoQ2xrU3JjQTwwPikgb2J0YWluZWQgZnJvbSBDbGtQb2wuICovCisJCQl8ICgxIDw8IENSQUJJVF9DTEtQT0xfQSkJLyogICAgQ2xrUG9sQSBiZWhhdmVzIGFzIGFsd2F5cy1vbiBjbG9jayBlbmFibGUuICovCisJCQl8IChNVUxUX1gxIDw8IENSQUJJVF9DTEtNVUxUX0EpKTsJLyogICAgQ2xrTXVsdCBtdXN0IGJlIDF4LiAqLwogCQlicmVhazsKIAotCWRlZmF1bHQ6CQkvLyBDb3VudGVyIE1vZGU6Ci0JCWNyYSB8PSAoQ0xLU1JDX0NPVU5URVIJLy8gICBTZWxlY3QgRU5DX0MgYW5kIEVOQ19EIGFzIGNsb2NrL2RpcmVjdGlvbiBpbnB1dHMuCi0JCQl8ICgoc2V0dXAgJiBTVERNU0tfQ0xLUE9MKSA8PCAoQ1JBQklUX0NMS1BPTF9BIC0gU1REQklUX0NMS1BPTCkpCS8vICAgQ2xvY2sgcG9sYXJpdHkgaXMgcGFzc2VkIHRocm91Z2guCi0JCQl8ICgoKHNldHVwICYgU1RETVNLX0NMS01VTFQpID09IChNVUxUX1gwIDw8IFNUREJJVF9DTEtNVUxUKSkgPwkvLyAgIEZvcmNlIG11bHRpcGxpZXIgdG8geDEgaWYgbm90IGxlZ2FsLCBvdGhlcndpc2UgcGFzcyB0aHJvdWdoLgorCWRlZmF1bHQ6CQkvKiAgQ291bnRlciBNb2RlOiAqLworCQljcmEgfD0gKENMS1NSQ19DT1VOVEVSCS8qICAgIFNlbGVjdCBFTkNfQyBhbmQgRU5DX0QgYXMgY2xvY2svZGlyZWN0aW9uIGlucHV0cy4gKi8KKwkJCXwgKChzZXR1cCAmIFNURE1TS19DTEtQT0wpIDw8IChDUkFCSVRfQ0xLUE9MX0EgLSBTVERCSVRfQ0xLUE9MKSkJLyogICAgQ2xvY2sgcG9sYXJpdHkgaXMgcGFzc2VkIHRocm91Z2guICovCisJCQl8ICgoKHNldHVwICYgU1RETVNLX0NMS01VTFQpID09IChNVUxUX1gwIDw8IFNUREJJVF9DTEtNVUxUKSkgPwkvKiAgICBGb3JjZSBtdWx0aXBsaWVyIHRvIHgxIGlmIG5vdCBsZWdhbCwgb3RoZXJ3aXNlIHBhc3MgdGhyb3VnaC4gKi8KIAkJCQkoTVVMVF9YMSA8PCBDUkFCSVRfQ0xLTVVMVF9BKSA6CiAJCQkJKChzZXR1cCAmIFNURE1TS19DTEtNVUxUKSA8PCAoQ1JBQklUX0NMS01VTFRfQSAtCiAJCQkJCQlTVERCSVRfQ0xLTVVMVCkpKSk7CiAJfQogCi0JLy8gRm9yY2UgcG9zaXRpdmUgaW5kZXggcG9sYXJpdHkgaWYgSW5keFNyYyBpcyBzb2Z0d2FyZS1kcml2ZW4gb25seSwKLQkvLyBvdGhlcndpc2UgcGFzcyBpdCB0aHJvdWdoLgorCS8qICBGb3JjZSBwb3NpdGl2ZSBpbmRleCBwb2xhcml0eSBpZiBJbmR4U3JjIGlzIHNvZnR3YXJlLWRyaXZlbiBvbmx5LCAqLworCS8qICBvdGhlcndpc2UgcGFzcyBpdCB0aHJvdWdoLiAqLwogCWlmICh+c2V0dXAgJiBTVERNU0tfSU5EWFNSQykKIAkJY3JhIHw9ICgoc2V0dXAgJiBTVERNU0tfSU5EWFBPTCkgPDwgKENSQUJJVF9JTkRYUE9MX0EgLQogCQkJCVNUREJJVF9JTkRYUE9MKSk7CiAKLQkvLyBJZiBJbnRTcmMgaGFzIGJlZW4gZm9yY2VkIHRvIERpc2FibGVkLCB1cGRhdGUgdGhlIE1JU0MyIGludGVycnVwdAotCS8vIGVuYWJsZSBtYXNrIHRvIGluZGljYXRlIHRoZSBjb3VudGVyIGludGVycnVwdCBpcyBkaXNhYmxlZC4KKwkvKiAgSWYgSW50U3JjIGhhcyBiZWVuIGZvcmNlZCB0byBEaXNhYmxlZCwgdXBkYXRlIHRoZSBNSVNDMiBpbnRlcnJ1cHQgKi8KKwkvKiAgZW5hYmxlIG1hc2sgdG8gaW5kaWNhdGUgdGhlIGNvdW50ZXIgaW50ZXJydXB0IGlzIGRpc2FibGVkLiAqLwogCWlmIChEaXNhYmxlSW50U3JjKQogCQlkZXZwcml2LT5Db3VudGVySW50RW5hYnMgJj0gfmstPk15RXZlbnRCaXRzWzNdOwogCi0JLy8gV2hpbGUgcmV0YWluaW5nIENvdW50ZXJCIGFuZCBMYXRjaFNyYyBjb25maWd1cmF0aW9ucywgcHJvZ3JhbSB0aGUKLQkvLyBuZXcgY291bnRlciBvcGVyYXRpbmcgbW9kZS4KKwkvKiAgV2hpbGUgcmV0YWluaW5nIENvdW50ZXJCIGFuZCBMYXRjaFNyYyBjb25maWd1cmF0aW9ucywgcHJvZ3JhbSB0aGUgKi8KKwkvKiAgbmV3IGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUuICovCiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQSwgQ1JBTVNLX0lORFhTUkNfQiB8IENSQU1TS19DTEtTUkNfQiwgY3JhKTsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JCLAogCQkodWludDE2X3QpICh+KENSQk1TS19JTlRDVFJMIHwgQ1JCTVNLX0NMS0VOQUJfQSkpLCBjcmIpOwogfQogCi1zdGF0aWMgdm9pZCBTZXRNb2RlX0IoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCB1aW50MTZfdCBTZXR1cCwKK3N0YXRpYyB2b2lkIFNldE1vZGVfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IFNldHVwLAogCXVpbnQxNl90IERpc2FibGVJbnRTcmMpCiB7CiAJcmVnaXN0ZXIgdWludDE2X3QgY3JhOwogCXJlZ2lzdGVyIHVpbnQxNl90IGNyYjsKLQlyZWdpc3RlciB1aW50MTZfdCBzZXR1cCA9IFNldHVwOwkvLyBDYWNoZSB0aGUgU3RhbmRhcmQgU2V0dXAuCisJcmVnaXN0ZXIgdWludDE2X3Qgc2V0dXAgPSBTZXR1cDsJLyogIENhY2hlIHRoZSBTdGFuZGFyZCBTZXR1cC4gKi8KIAotCS8vIEluaXRpYWxpemUgQ1JBIGFuZCBDUkIgaW1hZ2VzLgotCWNyYSA9ICgoc2V0dXAgJiBTVERNU0tfSU5EWFNSQykgPDwgKChDUkFCSVRfSU5EWFNSQ19CICsgMSkgLSBTVERCSVRfSU5EWFNSQykpOwkvLyBJbmRleFNyYyBmaWVsZCBpcyByZXN0cmljdGVkIHRvIEVOQ19YIG9yIEluZHhQb2wuCisJLyogIEluaXRpYWxpemUgQ1JBIGFuZCBDUkIgaW1hZ2VzLiAqLworCWNyYSA9ICgoc2V0dXAgJiBTVERNU0tfSU5EWFNSQykgPDwgKChDUkFCSVRfSU5EWFNSQ19CICsgMSkgLSBTVERCSVRfSU5EWFNSQykpOwkvKiAgSW5kZXhTcmMgZmllbGQgaXMgcmVzdHJpY3RlZCB0byBFTkNfWCBvciBJbmR4UG9sLiAqLwogCi0JY3JiID0gKENSQk1TS19JTlRSRVNFVENNRCB8IENSQk1TS19JTlRSRVNFVF9CCS8vIFJlc2V0IGV2ZW50IGNhcHR1cmVzIGFuZCBkaXNhYmxlIGludGVycnVwdHMuCi0JCXwgKChzZXR1cCAmIFNURE1TS19DTEtFTkFCKSA8PCAoQ1JCQklUX0NMS0VOQUJfQiAtIFNUREJJVF9DTEtFTkFCKSkJLy8gQ2xvY2sgZW5hYmxlIGlzIHBhc3NlZCB0aHJvdWdoLgotCQl8ICgoc2V0dXAgJiBTVERNU0tfTE9BRFNSQykgPj4gKFNUREJJVF9MT0FEU1JDIC0gQ1JCQklUX0xPQURTUkNfQikpKTsJLy8gUHJlbG9hZCB0cmlnZ2VyIHNvdXJjZSBpcyBwYXNzZWQgdGhyb3VnaC4KKwljcmIgPSAoQ1JCTVNLX0lOVFJFU0VUQ01EIHwgQ1JCTVNLX0lOVFJFU0VUX0IJLyogIFJlc2V0IGV2ZW50IGNhcHR1cmVzIGFuZCBkaXNhYmxlIGludGVycnVwdHMuICovCisJCXwgKChzZXR1cCAmIFNURE1TS19DTEtFTkFCKSA8PCAoQ1JCQklUX0NMS0VOQUJfQiAtIFNUREJJVF9DTEtFTkFCKSkJLyogIENsb2NrIGVuYWJsZSBpcyBwYXNzZWQgdGhyb3VnaC4gKi8KKwkJfCAoKHNldHVwICYgU1RETVNLX0xPQURTUkMpID4+IChTVERCSVRfTE9BRFNSQyAtIENSQkJJVF9MT0FEU1JDX0IpKSk7CS8qICBQcmVsb2FkIHRyaWdnZXIgc291cmNlIGlzIHBhc3NlZCB0aHJvdWdoLiAqLwogCi0JLy8gRm9yY2UgSW50U3JjIHRvIERpc2FibGVkIGlmIERpc2FibGVJbnRTcmMgaXMgYXNzZXJ0ZWQuCisJLyogIEZvcmNlIEludFNyYyB0byBEaXNhYmxlZCBpZiBEaXNhYmxlSW50U3JjIGlzIGFzc2VydGVkLiAqLwogCWlmICghRGlzYWJsZUludFNyYykKIAkJY3JiIHw9ICgoc2V0dXAgJiBTVERNU0tfSU5UU1JDKSA+PiAoU1REQklUX0lOVFNSQyAtCiAJCQkJQ1JCQklUX0lOVFNSQ19CKSk7CiAKLQkvLyBQb3B1bGF0ZSBhbGwgbW9kZS1kZXBlbmRlbnQgYXR0cmlidXRlcyBvZiBDUkEgJiBDUkIgaW1hZ2VzLgorCS8qICBQb3B1bGF0ZSBhbGwgbW9kZS1kZXBlbmRlbnQgYXR0cmlidXRlcyBvZiBDUkEgJiBDUkIgaW1hZ2VzLiAqLwogCXN3aXRjaCAoKHNldHVwICYgU1RETVNLX0NMS1NSQykgPj4gU1REQklUX0NMS1NSQykgewotCWNhc2UgQ0xLU1JDX1RJTUVSOgkvLyBUaW1lciBNb2RlOgotCQljcmEgfD0gKCgyIDw8IENSQUJJVF9DTEtTUkNfQikJLy8gICBDbGtTcmNCPDE+IHNlbGVjdHMgc3lzdGVtIGNsb2NrCi0JCQl8ICgoc2V0dXAgJiBTVERNU0tfQ0xLUE9MKSA8PCAoQ1JBQklUX0NMS1NSQ19CIC0gU1REQklUX0NMS1BPTCkpKTsJLy8gICAgIHdpdGggZGlyZWN0aW9uIChDbGtTcmNCPDA+KSBvYnRhaW5lZCBmcm9tIENsa1BvbC4KLQkJY3JiIHw9ICgoMSA8PCBDUkJCSVRfQ0xLUE9MX0IpCS8vICAgQ2xrUG9sQiBiZWhhdmVzIGFzIGFsd2F5cy1vbiBjbG9jayBlbmFibGUuCi0JCQl8IChNVUxUX1gxIDw8IENSQkJJVF9DTEtNVUxUX0IpKTsJLy8gICBDbGtNdWx0QiBtdXN0IGJlIDF4LgorCWNhc2UgQ0xLU1JDX1RJTUVSOgkvKiAgVGltZXIgTW9kZTogKi8KKwkJY3JhIHw9ICgoMiA8PCBDUkFCSVRfQ0xLU1JDX0IpCS8qICAgIENsa1NyY0I8MT4gc2VsZWN0cyBzeXN0ZW0gY2xvY2sgKi8KKwkJCXwgKChzZXR1cCAmIFNURE1TS19DTEtQT0wpIDw8IChDUkFCSVRfQ0xLU1JDX0IgLSBTVERCSVRfQ0xLUE9MKSkpOwkvKiAgICAgIHdpdGggZGlyZWN0aW9uIChDbGtTcmNCPDA+KSBvYnRhaW5lZCBmcm9tIENsa1BvbC4gKi8KKwkJY3JiIHw9ICgoMSA8PCBDUkJCSVRfQ0xLUE9MX0IpCS8qICAgIENsa1BvbEIgYmVoYXZlcyBhcyBhbHdheXMtb24gY2xvY2sgZW5hYmxlLiAqLworCQkJfCAoTVVMVF9YMSA8PCBDUkJCSVRfQ0xLTVVMVF9CKSk7CS8qICAgIENsa011bHRCIG11c3QgYmUgMXguICovCiAJCWJyZWFrOwogCi0JY2FzZSBDTEtTUkNfRVhURU5ERVI6CS8vIEV4dGVuZGVyIE1vZGU6Ci0JCWNyYSB8PSAoKDIgPDwgQ1JBQklUX0NMS1NSQ19CKQkvLyAgIENsa1NyY0Igc291cmNlIGlzIE92ZXJmbG93QSAoc2FtZSBhcyAidGltZXIiKQotCQkJfCAoKHNldHVwICYgU1RETVNLX0NMS1BPTCkgPDwgKENSQUJJVF9DTEtTUkNfQiAtIFNUREJJVF9DTEtQT0wpKSk7CS8vICAgICB3aXRoIGRpcmVjdGlvbiBvYnRhaW5lZCBmcm9tIENsa1BvbC4KLQkJY3JiIHw9ICgoMSA8PCBDUkJCSVRfQ0xLUE9MX0IpCS8vICAgQ2xrUG9sQiBjb250cm9scyBJbmRleEIgLS0gYWx3YXlzIHNldCB0byBhY3RpdmUuCi0JCQl8IChNVUxUX1gwIDw8IENSQkJJVF9DTEtNVUxUX0IpKTsJLy8gICBDbGtNdWx0QiBzZWxlY3RzIE92ZXJmbG93QSBhcyB0aGUgY2xvY2sgc291cmNlLgorCWNhc2UgQ0xLU1JDX0VYVEVOREVSOgkvKiAgRXh0ZW5kZXIgTW9kZTogKi8KKwkJY3JhIHw9ICgoMiA8PCBDUkFCSVRfQ0xLU1JDX0IpCS8qICAgIENsa1NyY0Igc291cmNlIGlzIE92ZXJmbG93QSAoc2FtZSBhcyAidGltZXIiKSAqLworCQkJfCAoKHNldHVwICYgU1RETVNLX0NMS1BPTCkgPDwgKENSQUJJVF9DTEtTUkNfQiAtIFNUREJJVF9DTEtQT0wpKSk7CS8qICAgICAgd2l0aCBkaXJlY3Rpb24gb2J0YWluZWQgZnJvbSBDbGtQb2wuICovCisJCWNyYiB8PSAoKDEgPDwgQ1JCQklUX0NMS1BPTF9CKQkvKiAgICBDbGtQb2xCIGNvbnRyb2xzIEluZGV4QiAtLSBhbHdheXMgc2V0IHRvIGFjdGl2ZS4gKi8KKwkJCXwgKE1VTFRfWDAgPDwgQ1JCQklUX0NMS01VTFRfQikpOwkvKiAgICBDbGtNdWx0QiBzZWxlY3RzIE92ZXJmbG93QSBhcyB0aGUgY2xvY2sgc291cmNlLiAqLwogCQlicmVhazsKIAotCWRlZmF1bHQ6CQkvLyBDb3VudGVyIE1vZGU6Ci0JCWNyYSB8PSAoQ0xLU1JDX0NPVU5URVIgPDwgQ1JBQklUX0NMS1NSQ19CKTsJLy8gICBTZWxlY3QgRU5DX0MgYW5kIEVOQ19EIGFzIGNsb2NrL2RpcmVjdGlvbiBpbnB1dHMuCi0JCWNyYiB8PSAoKChzZXR1cCAmIFNURE1TS19DTEtQT0wpID4+IChTVERCSVRfQ0xLUE9MIC0gQ1JCQklUX0NMS1BPTF9CKSkJLy8gICBDbGtQb2wgaXMgcGFzc2VkIHRocm91Z2guCi0JCQl8ICgoKHNldHVwICYgU1RETVNLX0NMS01VTFQpID09IChNVUxUX1gwIDw8IFNUREJJVF9DTEtNVUxUKSkgPwkvLyAgIEZvcmNlIENsa011bHQgdG8geDEgaWYgbm90IGxlZ2FsLCBvdGhlcndpc2UgcGFzcyB0aHJvdWdoLgorCWRlZmF1bHQ6CQkvKiAgQ291bnRlciBNb2RlOiAqLworCQljcmEgfD0gKENMS1NSQ19DT1VOVEVSIDw8IENSQUJJVF9DTEtTUkNfQik7CS8qICAgIFNlbGVjdCBFTkNfQyBhbmQgRU5DX0QgYXMgY2xvY2svZGlyZWN0aW9uIGlucHV0cy4gKi8KKwkJY3JiIHw9ICgoKHNldHVwICYgU1RETVNLX0NMS1BPTCkgPj4gKFNUREJJVF9DTEtQT0wgLSBDUkJCSVRfQ0xLUE9MX0IpKQkvKiAgICBDbGtQb2wgaXMgcGFzc2VkIHRocm91Z2guICovCisJCQl8ICgoKHNldHVwICYgU1RETVNLX0NMS01VTFQpID09IChNVUxUX1gwIDw8IFNUREJJVF9DTEtNVUxUKSkgPwkvKiAgICBGb3JjZSBDbGtNdWx0IHRvIHgxIGlmIG5vdCBsZWdhbCwgb3RoZXJ3aXNlIHBhc3MgdGhyb3VnaC4gKi8KIAkJCQkoTVVMVF9YMSA8PCBDUkJCSVRfQ0xLTVVMVF9CKSA6CiAJCQkJKChzZXR1cCAmIFNURE1TS19DTEtNVUxUKSA8PCAoQ1JCQklUX0NMS01VTFRfQiAtCiAJCQkJCQlTVERCSVRfQ0xLTVVMVCkpKSk7CiAJfQogCi0JLy8gRm9yY2UgcG9zaXRpdmUgaW5kZXggcG9sYXJpdHkgaWYgSW5keFNyYyBpcyBzb2Z0d2FyZS1kcml2ZW4gb25seSwKLQkvLyBvdGhlcndpc2UgcGFzcyBpdCB0aHJvdWdoLgorCS8qICBGb3JjZSBwb3NpdGl2ZSBpbmRleCBwb2xhcml0eSBpZiBJbmR4U3JjIGlzIHNvZnR3YXJlLWRyaXZlbiBvbmx5LCAqLworCS8qICBvdGhlcndpc2UgcGFzcyBpdCB0aHJvdWdoLiAqLwogCWlmICh+c2V0dXAgJiBTVERNU0tfSU5EWFNSQykKIAkJY3JiIHw9ICgoc2V0dXAgJiBTVERNU0tfSU5EWFBPTCkgPj4gKFNUREJJVF9JTkRYUE9MIC0KIAkJCQlDUkJCSVRfSU5EWFBPTF9CKSk7CiAKLQkvLyBJZiBJbnRTcmMgaGFzIGJlZW4gZm9yY2VkIHRvIERpc2FibGVkLCB1cGRhdGUgdGhlIE1JU0MyIGludGVycnVwdAotCS8vIGVuYWJsZSBtYXNrIHRvIGluZGljYXRlIHRoZSBjb3VudGVyIGludGVycnVwdCBpcyBkaXNhYmxlZC4KKwkvKiAgSWYgSW50U3JjIGhhcyBiZWVuIGZvcmNlZCB0byBEaXNhYmxlZCwgdXBkYXRlIHRoZSBNSVNDMiBpbnRlcnJ1cHQgKi8KKwkvKiAgZW5hYmxlIG1hc2sgdG8gaW5kaWNhdGUgdGhlIGNvdW50ZXIgaW50ZXJydXB0IGlzIGRpc2FibGVkLiAqLwogCWlmIChEaXNhYmxlSW50U3JjKQogCQlkZXZwcml2LT5Db3VudGVySW50RW5hYnMgJj0gfmstPk15RXZlbnRCaXRzWzNdOwogCi0JLy8gV2hpbGUgcmV0YWluaW5nIENvdW50ZXJBIGFuZCBMYXRjaFNyYyBjb25maWd1cmF0aW9ucywgcHJvZ3JhbSB0aGUKLQkvLyBuZXcgY291bnRlciBvcGVyYXRpbmcgbW9kZS4KKwkvKiAgV2hpbGUgcmV0YWluaW5nIENvdW50ZXJBIGFuZCBMYXRjaFNyYyBjb25maWd1cmF0aW9ucywgcHJvZ3JhbSB0aGUgKi8KKwkvKiAgbmV3IGNvdW50ZXIgb3BlcmF0aW5nIG1vZGUuICovCiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQSwKIAkJKHVpbnQxNl90KSAofihDUkFNU0tfSU5EWFNSQ19CIHwgQ1JBTVNLX0NMS1NSQ19CKSksIGNyYSk7CiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQiwgQ1JCTVNLX0NMS0VOQUJfQSB8IENSQk1TS19MQVRDSFNSQywgY3JiKTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBSZXR1cm4vc2V0IGEgY291bnRlcidzIGVuYWJsZS4gIGVuYWI6IDA9YWx3YXlzIGVuYWJsZWQsIDE9ZW5hYmxlZCBieSBpbmRleC4KKy8qICBSZXR1cm4vc2V0IGEgY291bnRlcidzIGVuYWJsZS4gIGVuYWI6IDA9YWx3YXlzIGVuYWJsZWQsIDE9ZW5hYmxlZCBieSBpbmRleC4gKi8KIAotc3RhdGljIHZvaWQgU2V0RW5hYmxlX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLCB1aW50MTZfdCBlbmFiKQorc3RhdGljIHZvaWQgU2V0RW5hYmxlX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCBlbmFiKQogewogCURFQlVHKCJTZXRFbmFibGVfQTogU2V0RW5hYmxlX0EgZW50ZXIgMzU0MVxuIik7CiAJREVCSXJlcGxhY2UoZGV2LCBrLT5NeUNSQiwKQEAgLTMwMDYsMjkgKzMwMTYsMjkgQEAKIAkJKHVpbnQxNl90KSAoZW5hYiA8PCBDUkJCSVRfQ0xLRU5BQl9BKSk7CiB9CiAKLXN0YXRpYyB2b2lkIFNldEVuYWJsZV9CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgZW5hYikKK3N0YXRpYyB2b2lkIFNldEVuYWJsZV9CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgZW5hYikKIHsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JCLAogCQkodWludDE2X3QpICh+KENSQk1TS19JTlRDVFJMIHwgQ1JCTVNLX0NMS0VOQUJfQikpLAogCQkodWludDE2X3QpIChlbmFiIDw8IENSQkJJVF9DTEtFTkFCX0IpKTsKIH0KIAotc3RhdGljIHVpbnQxNl90IEdldEVuYWJsZV9BKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaykKK3N0YXRpYyB1aW50MTZfdCBHZXRFbmFibGVfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmV0dXJuIChERUJJcmVhZChkZXYsIGstPk15Q1JCKSA+PiBDUkJCSVRfQ0xLRU5BQl9BKSAmIDE7CiB9CiAKLXN0YXRpYyB1aW50MTZfdCBHZXRFbmFibGVfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdWludDE2X3QgR2V0RW5hYmxlX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCXJldHVybiAoREVCSXJlYWQoZGV2LCBrLT5NeUNSQikgPj4gQ1JCQklUX0NMS0VOQUJfQikgJiAxOwogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFJldHVybi9zZXQgYSBjb3VudGVyIHBhaXIncyBsYXRjaCB0cmlnZ2VyIHNvdXJjZS4gIDA6IE9uIHJlYWQKLS8vIGFjY2VzcywgMTogQSBpbmRleCBsYXRjaGVzIEEsIDI6IEIgaW5kZXggbGF0Y2hlcyBCLCAzOiBBIG92ZXJmbG93Ci0vLyBsYXRjaGVzIEIuCisvKiBSZXR1cm4vc2V0IGEgY291bnRlciBwYWlyJ3MgbGF0Y2ggdHJpZ2dlciBzb3VyY2UuICAwOiBPbiByZWFkCisgKiBhY2Nlc3MsIDE6IEEgaW5kZXggbGF0Y2hlcyBBLCAyOiBCIGluZGV4IGxhdGNoZXMgQiwgMzogQSBvdmVyZmxvdworICogbGF0Y2hlcyBCLgorICovCiAKLXN0YXRpYyB2b2lkIFNldExhdGNoU291cmNlKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgdmFsdWUpCitzdGF0aWMgdm9pZCBTZXRMYXRjaFNvdXJjZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IHZhbHVlKQogewogCURFQlVHKCJTZXRMYXRjaFNvdXJjZTogU2V0TGF0Y2hTb3VyY2UgZW50ZXIgMzU1MCBcbiIpOwogCURFQklyZXBsYWNlKGRldiwgay0+TXlDUkIsCkBAIC0zMDM4LDIxMCArMzA0OCwyMDYgQEAKIAlERUJVRygiU2V0TGF0Y2hTb3VyY2U6IFNldExhdGNoU291cmNlIGV4aXQgXG4iKTsKIH0KIAotLyogc3RhdGljIHVpbnQxNl90IEdldExhdGNoU291cmNlKGNvbWVkaV9kZXZpY2UgKmRldiwgZW5jX3ByaXZhdGUgKmsgKSAqLwotLyogeyAqLwotLyogICByZXR1cm4gKCBERUJJcmVhZCggZGV2LCBrLT5NeUNSQikgPj4gQ1JCQklUX0xBVENIU1JDICkgJiAzOyAqLwotLyogfSAqLworLyoKKyAqIHN0YXRpYyB1aW50MTZfdCBHZXRMYXRjaFNvdXJjZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmsgKQorICogeworICogCXJldHVybiAoIERFQklyZWFkKCBkZXYsIGstPk15Q1JCKSA+PiBDUkJCSVRfTEFUQ0hTUkMgKSAmIDM7CisgKiB9CisgKi8KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gUmV0dXJuL3NldCB0aGUgZXZlbnQgdGhhdCB3aWxsIHRyaWdnZXIgdHJhbnNmZXIgb2YgdGhlIHByZWxvYWQKLS8vIHJlZ2lzdGVyIGludG8gdGhlIGNvdW50ZXIuICAwPVRoaXNDbnRyX0luZGV4LCAxPVRoaXNDbnRyX092ZXJmbG93LAotLy8gMj1PdmVyZmxvd0EgKEIgY291bnRlcnMgb25seSksIDM9ZGlzYWJsZWQuCisvKgorICogUmV0dXJuL3NldCB0aGUgZXZlbnQgdGhhdCB3aWxsIHRyaWdnZXIgdHJhbnNmZXIgb2YgdGhlIHByZWxvYWQKKyAqIHJlZ2lzdGVyIGludG8gdGhlIGNvdW50ZXIuICAwPVRoaXNDbnRyX0luZGV4LCAxPVRoaXNDbnRyX092ZXJmbG93LAorICogMj1PdmVyZmxvd0EgKEIgY291bnRlcnMgb25seSksIDM9ZGlzYWJsZWQuCisgKi8KIAotc3RhdGljIHZvaWQgU2V0TG9hZFRyaWdfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQxNl90IFRyaWcpCitzdGF0aWMgdm9pZCBTZXRMb2FkVHJpZ19BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgVHJpZykKIHsKIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JBLCAodWludDE2X3QpICh+Q1JBTVNLX0xPQURTUkNfQSksCiAJCSh1aW50MTZfdCkgKFRyaWcgPDwgQ1JBQklUX0xPQURTUkNfQSkpOwogfQogCi1zdGF0aWMgdm9pZCBTZXRMb2FkVHJpZ19CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywgdWludDE2X3QgVHJpZykKK3N0YXRpYyB2b2lkIFNldExvYWRUcmlnX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCBUcmlnKQogewogCURFQklyZXBsYWNlKGRldiwgay0+TXlDUkIsCiAJCSh1aW50MTZfdCkgKH4oQ1JCTVNLX0xPQURTUkNfQiB8IENSQk1TS19JTlRDVFJMKSksCiAJCSh1aW50MTZfdCkgKFRyaWcgPDwgQ1JCQklUX0xPQURTUkNfQikpOwogfQogCi1zdGF0aWMgdWludDE2X3QgR2V0TG9hZFRyaWdfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdWludDE2X3QgR2V0TG9hZFRyaWdfQShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmV0dXJuIChERUJJcmVhZChkZXYsIGstPk15Q1JBKSA+PiBDUkFCSVRfTE9BRFNSQ19BKSAmIDM7CiB9CiAKLXN0YXRpYyB1aW50MTZfdCBHZXRMb2FkVHJpZ19CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaykKK3N0YXRpYyB1aW50MTZfdCBHZXRMb2FkVHJpZ19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaykKIHsKIAlyZXR1cm4gKERFQklyZWFkKGRldiwgay0+TXlDUkIpID4+IENSQkJJVF9MT0FEU1JDX0IpICYgMzsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFJldHVybi9zZXQgY291bnRlciBpbnRlcnJ1cHQgc291cmNlIGFuZCBjbGVhciBhbnkgY2FwdHVyZWQKLS8vIGluZGV4L292ZXJmbG93IGV2ZW50cy4gIEludFNvdXJjZTogMD1EaXNhYmxlZCwgMT1PdmVyZmxvd09ubHksCi0vLyAyPUluZGV4T25seSwgMz1JbmRleEFuZE92ZXJmbG93LgorLyogUmV0dXJuL3NldCBjb3VudGVyIGludGVycnVwdCBzb3VyY2UgYW5kIGNsZWFyIGFueSBjYXB0dXJlZAorICogaW5kZXgvb3ZlcmZsb3cgZXZlbnRzLiAgSW50U291cmNlOiAwPURpc2FibGVkLCAxPU92ZXJmbG93T25seSwKKyAqIDI9SW5kZXhPbmx5LCAzPUluZGV4QW5kT3ZlcmZsb3cuCisgKi8KIAotc3RhdGljIHZvaWQgU2V0SW50U3JjX0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrLAorc3RhdGljIHZvaWQgU2V0SW50U3JjX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLAogCXVpbnQxNl90IEludFNvdXJjZSkKIHsKLQkvLyBSZXNldCBhbnkgcGVuZGluZyBjb3VudGVyIG92ZXJmbG93IG9yIGluZGV4IGNhcHR1cmVzLgorCS8qICBSZXNldCBhbnkgcGVuZGluZyBjb3VudGVyIG92ZXJmbG93IG9yIGluZGV4IGNhcHR1cmVzLiAqLwogCURFQklyZXBsYWNlKGRldiwgay0+TXlDUkIsICh1aW50MTZfdCkgKH5DUkJNU0tfSU5UQ1RSTCksCiAJCUNSQk1TS19JTlRSRVNFVENNRCB8IENSQk1TS19JTlRSRVNFVF9BKTsKIAotCS8vIFByb2dyYW0gY291bnRlciBpbnRlcnJ1cHQgc291cmNlLgorCS8qICBQcm9ncmFtIGNvdW50ZXIgaW50ZXJydXB0IHNvdXJjZS4gKi8KIAlERUJJcmVwbGFjZShkZXYsIGstPk15Q1JBLCB+Q1JBTVNLX0lOVFNSQ19BLAogCQkodWludDE2X3QpIChJbnRTb3VyY2UgPDwgQ1JBQklUX0lOVFNSQ19BKSk7CiAKLQkvLyBVcGRhdGUgTUlTQzIgaW50ZXJydXB0IGVuYWJsZSBtYXNrLgorCS8qICBVcGRhdGUgTUlTQzIgaW50ZXJydXB0IGVuYWJsZSBtYXNrLiAqLwogCWRldnByaXYtPkNvdW50ZXJJbnRFbmFicyA9CiAJCShkZXZwcml2LT5Db3VudGVySW50RW5hYnMgJiB+ay0+TXlFdmVudEJpdHNbM10pIHwgay0+CiAJCU15RXZlbnRCaXRzW0ludFNvdXJjZV07CiB9CiAKLXN0YXRpYyB2b2lkIFNldEludFNyY19CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaywKK3N0YXRpYyB2b2lkIFNldEludFNyY19CKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywKIAl1aW50MTZfdCBJbnRTb3VyY2UpCiB7CiAJdWludDE2X3QgY3JiOwogCi0JLy8gQ2FjaGUgd3JpdGVhYmxlIENSQiByZWdpc3RlciBpbWFnZS4KKwkvKiAgQ2FjaGUgd3JpdGVhYmxlIENSQiByZWdpc3RlciBpbWFnZS4gKi8KIAljcmIgPSBERUJJcmVhZChkZXYsIGstPk15Q1JCKSAmIH5DUkJNU0tfSU5UQ1RSTDsKIAotCS8vIFJlc2V0IGFueSBwZW5kaW5nIGNvdW50ZXIgb3ZlcmZsb3cgb3IgaW5kZXggY2FwdHVyZXMuCisJLyogIFJlc2V0IGFueSBwZW5kaW5nIGNvdW50ZXIgb3ZlcmZsb3cgb3IgaW5kZXggY2FwdHVyZXMuICovCiAJREVCSXdyaXRlKGRldiwgay0+TXlDUkIsCiAJCSh1aW50MTZfdCkgKGNyYiB8IENSQk1TS19JTlRSRVNFVENNRCB8IENSQk1TS19JTlRSRVNFVF9CKSk7CiAKLQkvLyBQcm9ncmFtIGNvdW50ZXIgaW50ZXJydXB0IHNvdXJjZS4KKwkvKiAgUHJvZ3JhbSBjb3VudGVyIGludGVycnVwdCBzb3VyY2UuICovCiAJREVCSXdyaXRlKGRldiwgay0+TXlDUkIsCiAJCSh1aW50MTZfdCkgKChjcmIgJiB+Q1JCTVNLX0lOVFNSQ19CKSB8IChJbnRTb3VyY2UgPDwKIAkJCQlDUkJCSVRfSU5UU1JDX0IpKSk7CiAKLQkvLyBVcGRhdGUgTUlTQzIgaW50ZXJydXB0IGVuYWJsZSBtYXNrLgorCS8qICBVcGRhdGUgTUlTQzIgaW50ZXJydXB0IGVuYWJsZSBtYXNrLiAqLwogCWRldnByaXYtPkNvdW50ZXJJbnRFbmFicyA9CiAJCShkZXZwcml2LT5Db3VudGVySW50RW5hYnMgJiB+ay0+TXlFdmVudEJpdHNbM10pIHwgay0+CiAJCU15RXZlbnRCaXRzW0ludFNvdXJjZV07CiB9CiAKLXN0YXRpYyB1aW50MTZfdCBHZXRJbnRTcmNfQShjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdWludDE2X3QgR2V0SW50U3JjX0Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCXJldHVybiAoREVCSXJlYWQoZGV2LCBrLT5NeUNSQSkgPj4gQ1JBQklUX0lOVFNSQ19BKSAmIDM7CiB9CiAKLXN0YXRpYyB1aW50MTZfdCBHZXRJbnRTcmNfQihjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGspCitzdGF0aWMgdWludDE2X3QgR2V0SW50U3JjX0Ioc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprKQogewogCXJldHVybiAoREVCSXJlYWQoZGV2LCBrLT5NeUNSQikgPj4gQ1JCQklUX0lOVFNSQ19CKSAmIDM7CiB9CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIFJldHVybi9zZXQgdGhlIGNsb2NrIG11bHRpcGxpZXIuCisvKiAgUmV0dXJuL3NldCB0aGUgY2xvY2sgbXVsdGlwbGllci4gKi8KIAotLyogc3RhdGljIHZvaWQgU2V0Q2xrTXVsdChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApICAqLworLyogc3RhdGljIHZvaWQgU2V0Q2xrTXVsdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQxNl90IHZhbHVlICkgICovCiAvKiB7ICovCiAvKiAgIGstPlNldE1vZGUoZGV2LCBrLCAodWludDE2X3QpKCAoIGstPkdldE1vZGUoZGV2LCBrICkgJiB+U1RETVNLX0NMS01VTFQgKSB8ICggdmFsdWUgPDwgU1REQklUX0NMS01VTFQgKSApLCBGQUxTRSApOyAqLwogLyogfSAqLwogCi0vKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrTXVsdChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprICkgICovCisvKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrTXVsdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmsgKSAgKi8KIC8qIHsgKi8KIC8qICAgcmV0dXJuICggay0+R2V0TW9kZShkZXYsIGsgKSA+PiBTVERCSVRfQ0xLTVVMVCApICYgMzsgKi8KIC8qIH0gKi8KIAotLyogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KLS8qIC8vIFJldHVybi9zZXQgdGhlIGNsb2NrIHBvbGFyaXR5LiAqLworLyogUmV0dXJuL3NldCB0aGUgY2xvY2sgcG9sYXJpdHkuICovCiAKLS8qIHN0YXRpYyB2b2lkIFNldENsa1BvbCggY29tZWRpX2RldmljZSAqZGV2LGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApICAqLworLyogc3RhdGljIHZvaWQgU2V0Q2xrUG9sKCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KIC8qIHsgKi8KIC8qICAgay0+U2V0TW9kZShkZXYsIGssICh1aW50MTZfdCkoICggay0+R2V0TW9kZShkZXYsIGsgKSAmIH5TVERNU0tfQ0xLUE9MICkgfCAoIHZhbHVlIDw8IFNUREJJVF9DTEtQT0wgKSApLCBGQUxTRSApOyAqLwogLyogfSAqLwogCi0vKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrUG9sKGNvbWVkaV9kZXZpY2UgKmRldiwgZW5jX3ByaXZhdGUgKmsgKSAgKi8KKy8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtQb2woc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprICkgICovCiAvKiB7ICovCiAvKiAgIHJldHVybiAoIGstPkdldE1vZGUoZGV2LCBrICkgPj4gU1REQklUX0NMS1BPTCApICYgMTsgKi8KIC8qIH0gKi8KIAotLyogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KLS8qIC8vIFJldHVybi9zZXQgdGhlIGNsb2NrIHNvdXJjZS4gKi8KKy8qIFJldHVybi9zZXQgdGhlIGNsb2NrIHNvdXJjZS4gICovCiAKLS8qIHN0YXRpYyB2b2lkIFNldENsa1NyYyggY29tZWRpX2RldmljZSAqZGV2LGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApICAqLworLyogc3RhdGljIHZvaWQgU2V0Q2xrU3JjKCBzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KIC8qIHsgKi8KIC8qICAgay0+U2V0TW9kZShkZXYsIGssICh1aW50MTZfdCkoICggay0+R2V0TW9kZShkZXYsIGsgKSAmIH5TVERNU0tfQ0xLU1JDICkgfCAoIHZhbHVlIDw8IFNUREJJVF9DTEtTUkMgKSApLCBGQUxTRSApOyAqLwogLyogfSAqLwogCi0vKiBzdGF0aWMgdWludDE2X3QgR2V0Q2xrU3JjKCBjb21lZGlfZGV2aWNlICpkZXYsZW5jX3ByaXZhdGUgKmsgKSAgKi8KKy8qIHN0YXRpYyB1aW50MTZfdCBHZXRDbGtTcmMoIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsc3RydWN0IGVuY19wcml2YXRlICprICkgICovCiAvKiB7ICovCiAvKiAgIHJldHVybiAoIGstPkdldE1vZGUoZGV2LCBrICkgPj4gU1REQklUX0NMS1NSQyApICYgMzsgKi8KIC8qIH0gKi8KIAotLyogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICovCi0vKiAvLyBSZXR1cm4vc2V0IHRoZSBpbmRleCBwb2xhcml0eS4gKi8KKy8qIFJldHVybi9zZXQgdGhlIGluZGV4IHBvbGFyaXR5LiAqLwogCi0vKiBzdGF0aWMgdm9pZCBTZXRJbmRleFBvbChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApICAqLworLyogc3RhdGljIHZvaWQgU2V0SW5kZXhQb2woc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprLCB1aW50MTZfdCB2YWx1ZSApICAqLwogLyogeyAqLwogLyogICBrLT5TZXRNb2RlKGRldiwgaywgKHVpbnQxNl90KSggKCBrLT5HZXRNb2RlKGRldiwgayApICYgflNURE1TS19JTkRYUE9MICkgfCAoICh2YWx1ZSAhPSAwKSA8PCBTVERCSVRfSU5EWFBPTCApICksIEZBTFNFICk7ICovCiAvKiB9ICovCiAKLS8qIHN0YXRpYyB1aW50MTZfdCBHZXRJbmRleFBvbChjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprICkgICovCisvKiBzdGF0aWMgdWludDE2X3QgR2V0SW5kZXhQb2woc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprICkgICovCiAvKiB7ICovCiAvKiAgIHJldHVybiAoIGstPkdldE1vZGUoZGV2LCBrICkgPj4gU1REQklUX0lORFhQT0wgKSAmIDE7ICovCiAvKiB9ICovCiAKLS8qIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAqLwotLyogLy8gUmV0dXJuL3NldCB0aGUgaW5kZXggc291cmNlLiAqLworLyogIFJldHVybi9zZXQgdGhlIGluZGV4IHNvdXJjZS4gKi8KIAotLyogc3RhdGljIHZvaWQgU2V0SW5kZXhTcmMoY29tZWRpX2RldmljZSAqZGV2LCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KKy8qIHN0YXRpYyB2b2lkIFNldEluZGV4U3JjKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaywgdWludDE2X3QgdmFsdWUgKSAgKi8KIC8qIHsgKi8KIC8qICAgREVCVUcoIlNldEluZGV4U3JjOiBzZXQgaW5kZXggc3JjIGVudGVyIDM3MDBcbiIpOyAqLwogLyogICBrLT5TZXRNb2RlKGRldiwgaywgKHVpbnQxNl90KSggKCBrLT5HZXRNb2RlKGRldiwgayApICYgflNURE1TS19JTkRYU1JDICkgfCAoICh2YWx1ZSAhPSAwKSA8PCBTVERCSVRfSU5EWFNSQyApICksIEZBTFNFICk7ICovCiAvKiB9ICovCiAKLS8qIHN0YXRpYyB1aW50MTZfdCBHZXRJbmRleFNyYyhjb21lZGlfZGV2aWNlICpkZXYsIGVuY19wcml2YXRlICprICkgICovCisvKiBzdGF0aWMgdWludDE2X3QgR2V0SW5kZXhTcmMoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGVuY19wcml2YXRlICprICkgICovCiAvKiB7ICovCiAvKiAgIHJldHVybiAoIGstPkdldE1vZGUoZGV2LCBrICkgPj4gU1REQklUX0lORFhTUkMgKSAmIDE7ICovCiAvKiB9ICovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEdlbmVyYXRlIGFuIGluZGV4IHB1bHNlLgorLyogIEdlbmVyYXRlIGFuIGluZGV4IHB1bHNlLiAqLwogCi1zdGF0aWMgdm9pZCBQdWxzZUluZGV4X0EoY29tZWRpX2RldmljZSAqIGRldiwgZW5jX3ByaXZhdGUgKiBrKQorc3RhdGljIHZvaWQgUHVsc2VJbmRleF9BKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBlbmNfcHJpdmF0ZSAqaykKIHsKIAlyZWdpc3RlciB1aW50MTZfdCBjcmE7CiAKIAlERUJVRygiUHVsc2VJbmRleF9BOiBwdWxzZSBpbmRleCBlbnRlclxuIik7CiAKLQljcmEgPSBERUJJcmVhZChkZXYsIGstPk15Q1JBKTsJLy8gUHVsc2UgaW5kZXguCisJY3JhID0gREVCSXJlYWQoZGV2LCBrLT5NeUNSQSk7CS8qICBQdWxzZSBpbmRleC4gKi8KIAlERUJJd3JpdGUoZGV2LCBrLT5NeUNSQSwgKHVpbnQxNl90KSAoY3JhIF4gQ1JBTVNLX0lORFhQT0xfQSkpOwogCURFQlVHKCJQdWxzZUluZGV4X0E6IHB1bHNlIGluZGV4IHN0ZXAxXG4iKTsKIAlERUJJd3JpdGUoZGV2LCBrLT5NeUNSQSwgY3JhKTsKIH0KIAotc3RhdGljIHZvaWQgUHVsc2VJbmRleF9CKGNvbWVkaV9kZXZpY2UgKiBkZXYsIGVuY19wcml2YXRlICogaykKK3N0YXRpYyB2b2lkIFB1bHNlSW5kZXhfQihzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmspCiB7CiAJcmVnaXN0ZXIgdWludDE2X3QgY3JiOwogCi0JY3JiID0gREVCSXJlYWQoZGV2LCBrLT5NeUNSQikgJiB+Q1JCTVNLX0lOVENUUkw7CS8vIFB1bHNlIGluZGV4LgorCWNyYiA9IERFQklyZWFkKGRldiwgay0+TXlDUkIpICYgfkNSQk1TS19JTlRDVFJMOwkvKiAgUHVsc2UgaW5kZXguICovCiAJREVCSXdyaXRlKGRldiwgay0+TXlDUkIsICh1aW50MTZfdCkgKGNyYiBeIENSQk1TS19JTkRYUE9MX0IpKTsKIAlERUJJd3JpdGUoZGV2LCBrLT5NeUNSQiwgY3JiKTsKIH0KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBXcml0ZSB2YWx1ZSBpbnRvIGNvdW50ZXIgcHJlbG9hZCByZWdpc3Rlci4KKy8qICBXcml0ZSB2YWx1ZSBpbnRvIGNvdW50ZXIgcHJlbG9hZCByZWdpc3Rlci4gKi8KIAotc3RhdGljIHZvaWQgUHJlbG9hZChjb21lZGlfZGV2aWNlICogZGV2LCBlbmNfcHJpdmF0ZSAqIGssIHVpbnQzMl90IHZhbHVlKQorc3RhdGljIHZvaWQgUHJlbG9hZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZW5jX3ByaXZhdGUgKmssIHVpbnQzMl90IHZhbHVlKQogewogCURFQlVHKCJQcmVsb2FkOiBwcmVsb2FkIGVudGVyXG4iKTsKLQlERUJJd3JpdGUoZGV2LCAodWludDE2X3QpIChrLT5NeUxhdGNoTHN3KSwgKHVpbnQxNl90KSB2YWx1ZSk7CS8vIFdyaXRlIHZhbHVlIHRvIHByZWxvYWQgcmVnaXN0ZXIuCisJREVCSXdyaXRlKGRldiwgKHVpbnQxNl90KSAoay0+TXlMYXRjaExzdyksICh1aW50MTZfdCkgdmFsdWUpOwkvKiAgV3JpdGUgdmFsdWUgdG8gcHJlbG9hZCByZWdpc3Rlci4gKi8KIAlERUJVRygiUHJlbG9hZDogcHJlbG9hZCBzdGVwIDFcbiIpOwogCURFQkl3cml0ZShkZXYsICh1aW50MTZfdCkgKGstPk15TGF0Y2hMc3cgKyAyKSwKIAkJKHVpbnQxNl90KSAodmFsdWUgPj4gMTYpKTsKIH0KIAotc3RhdGljIHZvaWQgQ291bnRlcnNJbml0KGNvbWVkaV9kZXZpY2UgKiBkZXYpCitzdGF0aWMgdm9pZCBDb3VudGVyc0luaXQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKIAlpbnQgY2hhbjsKLQllbmNfcHJpdmF0ZSAqazsKLQl1aW50MTZfdCBTZXR1cCA9IChMT0FEU1JDX0lORFggPDwgQkZfTE9BRFNSQykgfAkvLyBQcmVsb2FkIHVwb24KLQkJLy8gaW5kZXguCi0JCShJTkRYU1JDX1NPRlQgPDwgQkZfSU5EWFNSQykgfAkvLyBEaXNhYmxlIGhhcmR3YXJlIGluZGV4LgotCQkoQ0xLU1JDX0NPVU5URVIgPDwgQkZfQ0xLU1JDKSB8CS8vIE9wZXJhdGluZyBtb2RlIGlzIGNvdW50ZXIuCi0JCShDTEtQT0xfUE9TIDw8IEJGX0NMS1BPTCkgfAkvLyBBY3RpdmUgaGlnaCBjbG9jay4KLQkJKENOVERJUl9VUCA8PCBCRl9DTEtQT0wpIHwJLy8gQ291bnQgZGlyZWN0aW9uIGlzIHVwLgotCQkoQ0xLTVVMVF8xWCA8PCBCRl9DTEtNVUxUKSB8CS8vIENsb2NrIG11bHRpcGxpZXIgaXMgMXguCi0JCShDTEtFTkFCX0lOREVYIDw8IEJGX0NMS0VOQUIpOwkvLyBFbmFibGVkIGJ5IGluZGV4CisJc3RydWN0IGVuY19wcml2YXRlICprOworCXVpbnQxNl90IFNldHVwID0gKExPQURTUkNfSU5EWCA8PCBCRl9MT0FEU1JDKSB8CS8qICBQcmVsb2FkIHVwb24gKi8KKwkJLyogIGluZGV4LiAqLworCQkoSU5EWFNSQ19TT0ZUIDw8IEJGX0lORFhTUkMpIHwJLyogIERpc2FibGUgaGFyZHdhcmUgaW5kZXguICovCisJCShDTEtTUkNfQ09VTlRFUiA8PCBCRl9DTEtTUkMpIHwJLyogIE9wZXJhdGluZyBtb2RlIGlzIGNvdW50ZXIuICovCisJCShDTEtQT0xfUE9TIDw8IEJGX0NMS1BPTCkgfAkvKiAgQWN0aXZlIGhpZ2ggY2xvY2suICovCisJCShDTlRESVJfVVAgPDwgQkZfQ0xLUE9MKSB8CS8qICBDb3VudCBkaXJlY3Rpb24gaXMgdXAuICovCisJCShDTEtNVUxUXzFYIDw8IEJGX0NMS01VTFQpIHwJLyogIENsb2NrIG11bHRpcGxpZXIgaXMgMXguICovCisJCShDTEtFTkFCX0lOREVYIDw8IEJGX0NMS0VOQUIpOwkvKiAgRW5hYmxlZCBieSBpbmRleCAqLwogCi0JLy8gRGlzYWJsZSBhbGwgY291bnRlciBpbnRlcnJ1cHRzIGFuZCBjbGVhciBhbnkgY2FwdHVyZWQgY291bnRlciBldmVudHMuCisJLyogIERpc2FibGUgYWxsIGNvdW50ZXIgaW50ZXJydXB0cyBhbmQgY2xlYXIgYW55IGNhcHR1cmVkIGNvdW50ZXIgZXZlbnRzLiAqLwogCWZvciAoY2hhbiA9IDA7IGNoYW4gPCBTNjI2X0VOQ09ERVJfQ0hBTk5FTFM7IGNoYW4rKykgewogCQlrID0gJmVuY3ByaXZbY2hhbl07CiAJCWstPlNldE1vZGUoZGV2LCBrLCBTZXR1cCwgVFJVRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuaAppbmRleCAxMWQ4YjFjLi44OTExMjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmgKQEAgLTUxLDE1ICs1MSwxNSBAQAogCiAgICBFeGFtcGxlIGNvZGUKIAotICAgaW5zbi5pbnNuPUlOU05fQ09ORklHOyAgIC8vY29uZmlndXJhdGlvbiBpbnN0cnVjdGlvbgotICAgaW5zbi5uPTE7ICAgICAgICAgICAgICAgIC8vbnVtYmVyIG9mIG9wZXJhdGlvbiAobXVzdCBiZSAxKQotICAgaW5zbi5kYXRhPSZpbml0aWFsdmFsdWU7IC8vaW5pdGlhbCB2YWx1ZSBsb2FkZWQgaW50byBlbmNvZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9kdXJpbmcgY29uZmlndXJhdGlvbgotICAgaW5zbi5zdWJkZXY9NTsgICAgICAgICAgIC8vZW5jb2RlciBzdWJkZXZpY2UKLSAgIGluc24uY2hhbnNwZWM9Q1JfUEFDSyhlbmNvZGVyX2NoYW5uZWwsMCxBUkVGX09USEVSKTsgLy9lbmNvZGVyX2NoYW5uZWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90byBjb25maWd1cmUKKyAgIGluc24uaW5zbj1JTlNOX0NPTkZJRzsgICAvLyBjb25maWd1cmF0aW9uIGluc3RydWN0aW9uCisgICBpbnNuLm49MTsgICAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIG9wZXJhdGlvbiAobXVzdCBiZSAxKQorICAgaW5zbi5kYXRhPSZpbml0aWFsdmFsdWU7IC8vIGluaXRpYWwgdmFsdWUgbG9hZGVkIGludG8gZW5jb2RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGR1cmluZyBjb25maWd1cmF0aW9uCisgICBpbnNuLnN1YmRldj01OyAgICAgICAgICAgLy8gZW5jb2RlciBzdWJkZXZpY2UKKyAgIGluc24uY2hhbnNwZWM9Q1JfUEFDSyhlbmNvZGVyX2NoYW5uZWwsMCxBUkVGX09USEVSKTsgLy8gZW5jb2Rlcl9jaGFubmVsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIGNvbmZpZ3VyZQogCi0gICBjb21lZGlfZG9faW5zbihjZiwmaW5zbik7IC8vZXhlY3V0aW5nIGNvbmZpZ3VyYXRpb24KKyAgIGNvbWVkaV9kb19pbnNuKGNmLCZpbnNuKTsgLy8gZXhlY3V0aW5nIGNvbmZpZ3VyYXRpb24KICovCiAKICNpZmRlZiBfREVCVUdfCkBAIC04OCwxNDcgKzg4LDEzNiBAQAogI2RlZmluZSBJTkxJTkUgc3RhdGljIF9faW5saW5lCiAjZW5kaWYKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICNpbmNsdWRlPGxpbnV4L3NsYWIuaD4KIAogI2RlZmluZSBTNjI2X1NJWkUgMHgwMjAwCiAjZGVmaW5lIFNJWkVPRl9BRERSRVNTX1NQQUNFCQkweDAyMDAKLSNkZWZpbmUgRE1BQlVGX1NJWkUJCQk0MDk2CS8vIDRrIHBhZ2VzCisjZGVmaW5lIERNQUJVRl9TSVpFCQkJNDA5NgkvKiAgNGsgcGFnZXMgKi8KIAogI2RlZmluZSBTNjI2X0FEQ19DSEFOTkVMUyAgICAgICAxNgogI2RlZmluZSBTNjI2X0RBQ19DSEFOTkVMUyAgICAgICA0CiAjZGVmaW5lIFM2MjZfRU5DT0RFUl9DSEFOTkVMUyAgIDYKICNkZWZpbmUgUzYyNl9ESU9fQ0hBTk5FTFMgICAgICAgNDgKLSNkZWZpbmUgUzYyNl9ESU9fQkFOS1MJCTMJLy8gTnVtYmVyIG9mIERJTyBncm91cHMuCi0jZGVmaW5lIFM2MjZfRElPX0VYVENIQU5TCTQwCS8vIE51bWJlciBvZgotCQkJCQkvLyBleHRlbmRlZC1jYXBhYmlsaXR5Ci0JCQkJCS8vIERJTyBjaGFubmVscy4KKyNkZWZpbmUgUzYyNl9ESU9fQkFOS1MJCTMJLyogIE51bWJlciBvZiBESU8gZ3JvdXBzLiAqLworI2RlZmluZSBTNjI2X0RJT19FWFRDSEFOUwk0MAkvKiAgTnVtYmVyIG9mICovCisJCQkJCS8qICBleHRlbmRlZC1jYXBhYmlsaXR5ICovCisJCQkJCS8qICBESU8gY2hhbm5lbHMuICovCiAKLSNkZWZpbmUgTlVNX1RSSU1EQUNTCTEyCS8vIE51bWJlciBvZiB2YWxpZCBUcmltREFDIGNoYW5uZWxzLgorI2RlZmluZSBOVU1fVFJJTURBQ1MJMTIJLyogIE51bWJlciBvZiB2YWxpZCBUcmltREFDIGNoYW5uZWxzLiAqLwogCi0vLyBQQ0kgYnVzIGludGVyZmFjZSB0eXBlcy4KLSNkZWZpbmUgSU5URUwJCQkJMQkvLyBJbnRlbCBidXMgdHlwZS4KLSNkZWZpbmUgTU9UT1JPTEEJCQkyCS8vIE1vdG9yb2xhIGJ1cyB0eXBlLgorLyogIFBDSSBidXMgaW50ZXJmYWNlIHR5cGVzLiAqLworI2RlZmluZSBJTlRFTAkJCQkxCS8qICBJbnRlbCBidXMgdHlwZS4gKi8KKyNkZWZpbmUgTU9UT1JPTEEJCQkyCS8qICBNb3Rvcm9sYSBidXMgdHlwZS4gKi8KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBQTEFURk9STQkJSU5URUwJLyogICoqKiBTRUxFQ1QgUExBVEZPUk0gVFlQRSAqKiogKi8KIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotI2RlZmluZSBQTEFURk9STQkJSU5URUwJLy8gKioqIFNFTEVDVCBQTEFURk9STSBUWVBFICoqKgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBSQU5HRV81ViAgICAgICAgICAgICAgICAweDEwCS8qICArLy01ViByYW5nZSAqLworI2RlZmluZSBSQU5HRV8xMFYgICAgICAgICAgICAgICAweDAwCS8qICArLy0xMFYgcmFuZ2UgKi8KIAotI2RlZmluZSBSQU5HRV81ViAgICAgICAgICAgICAgICAweDEwCS8vICsvLTVWIHJhbmdlCi0jZGVmaW5lIFJBTkdFXzEwViAgICAgICAgICAgICAgIDB4MDAJLy8gKy8tMTBWIHJhbmdlCisjZGVmaW5lIEVPUEwJCQkweDgwCS8qICBFbmQgb2YgQURDIHBvbGwgbGlzdCBtYXJrZXIuICovCisjZGVmaW5lIEdTRUxfQklQT0xBUjVWCQkweDAwRjAJLyogIExQX0dTRUwgc2V0dGluZyBmb3IgNVYgYmlwb2xhciByYW5nZS4gKi8KKyNkZWZpbmUgR1NFTF9CSVBPTEFSMTBWCQkweDAwQTAJLyogIExQX0dTRUwgc2V0dGluZyBmb3IgMTBWIGJpcG9sYXIgcmFuZ2UuICovCiAKLSNkZWZpbmUgRU9QTAkJCTB4ODAJLy8gRW5kIG9mIEFEQyBwb2xsIGxpc3QgbWFya2VyLgotI2RlZmluZSBHU0VMX0JJUE9MQVI1VgkJMHgwMEYwCS8vIExQX0dTRUwgc2V0dGluZyBmb3IgNVYgYmlwb2xhciByYW5nZS4KLSNkZWZpbmUgR1NFTF9CSVBPTEFSMTBWCQkweDAwQTAJLy8gTFBfR1NFTCBzZXR0aW5nIGZvciAxMFYgYmlwb2xhciByYW5nZS4KKy8qICBFcnJvciBjb2RlcyB0aGF0IG11c3QgYmUgdmlzaWJsZSB0byB0aGlzIGJhc2UgY2xhc3MuICovCisjZGVmaW5lIEVSUl9JTExFR0FMX1BBUk0JMHgwMDAxMDAwMAkvKiAgSWxsZWdhbCBmdW5jdGlvbiBwYXJhbWV0ZXIgdmFsdWUgd2FzIHNwZWNpZmllZC4gKi8KKyNkZWZpbmUgRVJSX0kyQwkJCTB4MDAwMjAwMDAJLyogIEkyQyBlcnJvci4gKi8KKyNkZWZpbmUgRVJSX0NPVU5URVJTRVRVUAkweDAwMjAwMDAwCS8qICBJbGxlZ2FsIHNldHVwIHNwZWNpZmllZCBmb3IgY291bnRlciBjaGFubmVsLiAqLworI2RlZmluZSBFUlJfREVCSV9USU1FT1VUCTB4MDA0MDAwMDAJLyogIERFQkkgdHJhbnNmZXIgdGltZWQgb3V0LiAqLwogCi0vLyBFcnJvciBjb2RlcyB0aGF0IG11c3QgYmUgdmlzaWJsZSB0byB0aGlzIGJhc2UgY2xhc3MuCi0jZGVmaW5lIEVSUl9JTExFR0FMX1BBUk0JMHgwMDAxMDAwMAkvLyBJbGxlZ2FsIGZ1bmN0aW9uIHBhcmFtZXRlciB2YWx1ZSB3YXMgc3BlY2lmaWVkLgotI2RlZmluZSBFUlJfSTJDCQkJMHgwMDAyMDAwMAkvLyBJMkMgZXJyb3IuCi0jZGVmaW5lIEVSUl9DT1VOVEVSU0VUVVAJMHgwMDIwMDAwMAkvLyBJbGxlZ2FsIHNldHVwIHNwZWNpZmllZCBmb3IgY291bnRlciBjaGFubmVsLgotI2RlZmluZSBFUlJfREVCSV9USU1FT1VUCTB4MDA0MDAwMDAJLy8gREVCSSB0cmFuc2ZlciB0aW1lZCBvdXQuCisvKiAgT3JnYW5pemF0aW9uIChwaHlzaWNhbCBvcmRlcikgYW5kIHNpemUgKGluIERXT1JEcykgb2YgbG9naWNhbCBETUEgYnVmZmVycyBjb250YWluZWQgYnkgQU5BX0RNQUJVRi4gKi8KKyNkZWZpbmUgQURDX0RNQUJVRl9EV09SRFMJNDAJLyogIEFEQyBETUEgYnVmZmVyIG11c3QgaG9sZCAxNiBzYW1wbGVzLCBwbHVzIHByZS9wb3N0IGdhcmJhZ2Ugc2FtcGxlcy4gKi8KKyNkZWZpbmUgREFDX1dETUFCVUZfRFdPUkRTCTEJLyogIERBQyBvdXRwdXQgRE1BIGJ1ZmZlciBob2xkcyBhIHNpbmdsZSBzYW1wbGUuICovCiAKLS8vIE9yZ2FuaXphdGlvbiAocGh5c2ljYWwgb3JkZXIpIGFuZCBzaXplIChpbiBEV09SRHMpIG9mIGxvZ2ljYWwgRE1BIGJ1ZmZlcnMgY29udGFpbmVkIGJ5IEFOQV9ETUFCVUYuCi0jZGVmaW5lIEFEQ19ETUFCVUZfRFdPUkRTCTQwCS8vIEFEQyBETUEgYnVmZmVyIG11c3QgaG9sZCAxNiBzYW1wbGVzLCBwbHVzIHByZS9wb3N0IGdhcmJhZ2Ugc2FtcGxlcy4KLSNkZWZpbmUgREFDX1dETUFCVUZfRFdPUkRTCTEJLy8gREFDIG91dHB1dCBETUEgYnVmZmVyIGhvbGRzIGEgc2luZ2xlIHNhbXBsZS4KKy8qICBBbGwgcmVtYWluaW5nIHNwYWNlIGluIDRLQiBETUEgYnVmZmVyIGlzIGF2YWlsYWJsZSBmb3IgdGhlIFJQUzEgcHJvZ3JhbS4gKi8KIAotLy8gQWxsIHJlbWFpbmluZyBzcGFjZSBpbiA0S0IgRE1BIGJ1ZmZlciBpcyBhdmFpbGFibGUgZm9yIHRoZSBSUFMxIHByb2dyYW0uCi0KLS8vIEFkZHJlc3Mgb2Zmc2V0cywgaW4gRFdPUkRTLCBmcm9tIGJhc2Ugb2YgRE1BIGJ1ZmZlci4KKy8qICBBZGRyZXNzIG9mZnNldHMsIGluIERXT1JEUywgZnJvbSBiYXNlIG9mIERNQSBidWZmZXIuICovCiAjZGVmaW5lIERBQ19XRE1BQlVGX09TCQlBRENfRE1BQlVGX0RXT1JEUwogCi0vLyBJbnRlcnJ1cHQgZW5hYiBiaXQgaW4gSVNSIGFuZCBJRVIuCi0jZGVmaW5lIElSUV9HUElPMwkJMHgwMDAwMDA0MAkvLyBJUlEgZW5hYmxlIGZvciBHUElPMy4KKy8qICBJbnRlcnJ1cHQgZW5hYiBiaXQgaW4gSVNSIGFuZCBJRVIuICovCisjZGVmaW5lIElSUV9HUElPMwkJMHgwMDAwMDA0MCAgLyogIElSUSBlbmFibGUgZm9yIEdQSU8zLiAqLwogI2RlZmluZSBJUlFfUlBTMSAgICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIElTUl9BRk9VCQkweDAwMDAwODAwCS8vIEF1ZGlvIGZpZm8KLQkJCQkJCS8vIHVuZGVyL292ZXJmbG93Ci0JCQkJCQkvLyBkZXRlY3RlZC4KLSNkZWZpbmUgSVJRX0NPSU5UMUEgICAgICAgICAgICAgMHgwNDAwCS8vIGNvbnRlciAxQSBvdmVyZmxvdwotCQkJCQkJLy8gaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgSVJRX0NPSU5UMUIgICAgICAgICAgICAgMHgwODAwCS8vIGNvbnRlciAxQiBvdmVyZmxvdwotCQkJCQkJLy8gaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgSVJRX0NPSU5UMkEgICAgICAgICAgICAgMHgxMDAwCS8vIGNvbnRlciAyQSBvdmVyZmxvdwotCQkJCQkJLy8gaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgSVJRX0NPSU5UMkIgICAgICAgICAgICAgMHgyMDAwCS8vIGNvbnRlciAyQiBvdmVyZmxvdwotCQkJCQkJLy8gaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgSVJRX0NPSU5UM0EgICAgICAgICAgICAgMHg0MDAwCS8vIGNvbnRlciAzQSBvdmVyZmxvdwotCQkJCQkJLy8gaW50ZXJydXB0IG1hc2sKLSNkZWZpbmUgSVJRX0NPSU5UM0IgICAgICAgICAgICAgMHg4MDAwCS8vIGNvbnRlciAzQiBvdmVyZmxvdwotCQkJCQkJLy8gaW50ZXJydXB0IG1hc2sKKyNkZWZpbmUgSVNSX0FGT1UJCTB4MDAwMDA4MDAKKy8qIEF1ZGlvIGZpZm8gdW5kZXIvb3ZlcmZsb3cgIGRldGVjdGVkLiAqLwogCi0vLyBSUFMgY29tbWFuZCBjb2Rlcy4KLSNkZWZpbmUgUlBTX0NMUlNJR05BTAkJMHgwMDAwMDAwMAkvLyBDTEVBUiBTSUdOQUwKLSNkZWZpbmUgUlBTX1NFVFNJR05BTAkJMHgxMDAwMDAwMAkvLyBTRVQgU0lHTkFMCi0jZGVmaW5lIFJQU19OT1AJCQkweDAwMDAwMDAwCS8vIE5PUAotI2RlZmluZSBSUFNfUEFVU0UJCTB4MjAwMDAwMDAJLy8gUEFVU0UKLSNkZWZpbmUgUlBTX1VQTE9BRAkJMHg0MDAwMDAwMAkvLyBVUExPQUQKLSNkZWZpbmUgUlBTX0pVTVAJCTB4ODAwMDAwMDAJLy8gSlVNUAotI2RlZmluZSBSUFNfTERSRUcJCTB4OTAwMDAxMDAJLy8gTERSRUcgKDEgdWludDMyX3Qgb25seSkKLSNkZWZpbmUgUlBTX1NUUkVHCQkweEEwMDAwMTAwCS8vIFNUUkVHICgxIHVpbnQzMl90IG9ubHkpCi0jZGVmaW5lIFJQU19TVE9QCQkweDUwMDAwMDAwCS8vIFNUT1AKLSNkZWZpbmUgUlBTX0lSUSAgICAgICAgICAgICAgICAgMHg2MDAwMDAwMAkvLyBJUlEKKyNkZWZpbmUgSVJRX0NPSU5UMUEgICAgICAgICAgICAgMHgwNDAwIC8qIGNvbnRlciAxQSBvdmVyZmxvdyBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBJUlFfQ09JTlQxQiAgICAgICAgICAgICAweDA4MDAgLyogY29udGVyIDFCIG92ZXJmbG93IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIElSUV9DT0lOVDJBICAgICAgICAgICAgIDB4MTAwMCAvKiBjb250ZXIgMkEgb3ZlcmZsb3cgaW50ZXJydXB0IG1hc2sgKi8KKyNkZWZpbmUgSVJRX0NPSU5UMkIgICAgICAgICAgICAgMHgyMDAwIC8qIGNvbnRlciAyQiBvdmVyZmxvdyBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBJUlFfQ09JTlQzQSAgICAgICAgICAgICAweDQwMDAgLyogY29udGVyIDNBIG92ZXJmbG93IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIElSUV9DT0lOVDNCICAgICAgICAgICAgIDB4ODAwMCAvKiBjb250ZXIgM0Igb3ZlcmZsb3cgaW50ZXJydXB0IG1hc2sgKi8KIAotI2RlZmluZSBSUFNfTE9HSUNBTF9PUgkJMHgwODAwMDAwMAkvLyBMb2dpY2FsIE9SIGNvbmRpdGlvbmFscy4KLSNkZWZpbmUgUlBTX0lOVkVSVAkJMHgwNDAwMDAwMAkvLyBUZXN0IGZvciBuZWdhdGVkIHNlbWFwaG9yZXMuCi0jZGVmaW5lIFJQU19ERUJJCQkweDAwMDAwMDAyCS8vIERFQkkgZG9uZQorLyogIFJQUyBjb21tYW5kIGNvZGVzLiAqLworI2RlZmluZSBSUFNfQ0xSU0lHTkFMCQkweDAwMDAwMDAwCS8qICBDTEVBUiBTSUdOQUwgKi8KKyNkZWZpbmUgUlBTX1NFVFNJR05BTAkJMHgxMDAwMDAwMAkvKiAgU0VUIFNJR05BTCAqLworI2RlZmluZSBSUFNfTk9QCQkJMHgwMDAwMDAwMAkvKiAgTk9QICovCisjZGVmaW5lIFJQU19QQVVTRQkJMHgyMDAwMDAwMAkvKiAgUEFVU0UgKi8KKyNkZWZpbmUgUlBTX1VQTE9BRAkJMHg0MDAwMDAwMAkvKiAgVVBMT0FEICovCisjZGVmaW5lIFJQU19KVU1QCQkweDgwMDAwMDAwCS8qICBKVU1QICovCisjZGVmaW5lIFJQU19MRFJFRwkJMHg5MDAwMDEwMAkvKiAgTERSRUcgKDEgdWludDMyX3Qgb25seSkgKi8KKyNkZWZpbmUgUlBTX1NUUkVHCQkweEEwMDAwMTAwCS8qICBTVFJFRyAoMSB1aW50MzJfdCBvbmx5KSAqLworI2RlZmluZSBSUFNfU1RPUAkJMHg1MDAwMDAwMAkvKiAgU1RPUCAqLworI2RlZmluZSBSUFNfSVJRICAgICAgICAgICAgICAgICAweDYwMDAwMDAwCS8qICBJUlEgKi8KIAotI2RlZmluZSBSUFNfU0lHMAkJMHgwMDIwMDAwMAkvLyBSUFMgc2VtYXBob3JlIDAgKHVzZWQgYnkgQURDKS4KLSNkZWZpbmUgUlBTX1NJRzEJCTB4MDA0MDAwMDAJLy8gUlBTIHNlbWFwaG9yZSAxICh1c2VkIGJ5IERBQykuCi0jZGVmaW5lIFJQU19TSUcyCQkweDAwODAwMDAwCS8vIFJQUyBzZW1hcGhvcmUgMiAobm90IHVzZWQpLgotI2RlZmluZSBSUFNfR1BJTzIJCTB4MDAwODAwMDAJLy8gUlBTIEdQSU8yCi0jZGVmaW5lIFJQU19HUElPMwkJMHgwMDEwMDAwMAkvLyBSUFMgR1BJTzMKKyNkZWZpbmUgUlBTX0xPR0lDQUxfT1IJCTB4MDgwMDAwMDAJLyogIExvZ2ljYWwgT1IgY29uZGl0aW9uYWxzLiAqLworI2RlZmluZSBSUFNfSU5WRVJUCQkweDA0MDAwMDAwCS8qICBUZXN0IGZvciBuZWdhdGVkIHNlbWFwaG9yZXMuICovCisjZGVmaW5lIFJQU19ERUJJCQkweDAwMDAwMDAyCS8qICBERUJJIGRvbmUgKi8KIAotI2RlZmluZSBSUFNfU0lHQURDCQlSUFNfU0lHMAkvLyBUcmlnZ2VyL3N0YXR1cyBmb3IgQURDJ3MgUlBTIHByb2dyYW0uCi0jZGVmaW5lIFJQU19TSUdEQUMJCVJQU19TSUcxCS8vIFRyaWdnZXIvc3RhdHVzIGZvciBEQUMncyBSUFMgcHJvZ3JhbS4KKyNkZWZpbmUgUlBTX1NJRzAJCTB4MDAyMDAwMDAJLyogIFJQUyBzZW1hcGhvcmUgMCAodXNlZCBieSBBREMpLiAqLworI2RlZmluZSBSUFNfU0lHMQkJMHgwMDQwMDAwMAkvKiAgUlBTIHNlbWFwaG9yZSAxICh1c2VkIGJ5IERBQykuICovCisjZGVmaW5lIFJQU19TSUcyCQkweDAwODAwMDAwCS8qICBSUFMgc2VtYXBob3JlIDIgKG5vdCB1c2VkKS4gKi8KKyNkZWZpbmUgUlBTX0dQSU8yCQkweDAwMDgwMDAwCS8qICBSUFMgR1BJTzIgKi8KKyNkZWZpbmUgUlBTX0dQSU8zCQkweDAwMTAwMDAwCS8qICBSUFMgR1BJTzMgKi8KIAotLy8gUlBTIGNsb2NrIHBhcmFtZXRlcnMuCi0jZGVmaW5lIFJQU0NMS19TQ0FMQVIJCTgJLy8gVGhpcyBpcyBhcHBhcmVudCByYXRpbyBvZiBQQ0kvUlBTIGNsa3MgKHVuZG9jdW1lbnRlZCEhKS4KLSNkZWZpbmUgUlBTQ0xLX1BFUl9VUwkJKCAzMyAvIFJQU0NMS19TQ0FMQVIgKQkvLyBOdW1iZXIgb2YgUlBTIGNsb2NrcyBpbiBvbmUgbWljcm9zZWNvbmQuCisjZGVmaW5lIFJQU19TSUdBREMJCVJQU19TSUcwCS8qICBUcmlnZ2VyL3N0YXR1cyBmb3IgQURDJ3MgUlBTIHByb2dyYW0uICovCisjZGVmaW5lIFJQU19TSUdEQUMJCVJQU19TSUcxCS8qICBUcmlnZ2VyL3N0YXR1cyBmb3IgREFDJ3MgUlBTIHByb2dyYW0uICovCiAKLS8vIEV2ZW50IGNvdW50ZXIgc291cmNlIGFkZHJlc3Nlcy4KLSNkZWZpbmUgU0JBX1JQU19BMAkJMHgyNwkvLyBUaW1lIG9mIFJQUzAgYnVzeSwgaW4gUENJIGNsb2Nrcy4KKy8qICBSUFMgY2xvY2sgcGFyYW1ldGVycy4gKi8KKyNkZWZpbmUgUlBTQ0xLX1NDQUxBUgkJOAkvKiAgVGhpcyBpcyBhcHBhcmVudCByYXRpbyBvZiBQQ0kvUlBTIGNsa3MgKHVuZG9jdW1lbnRlZCEhKS4gKi8KKyNkZWZpbmUgUlBTQ0xLX1BFUl9VUwkJKDMzIC8gUlBTQ0xLX1NDQUxBUikJLyogIE51bWJlciBvZiBSUFMgY2xvY2tzIGluIG9uZSBtaWNyb3NlY29uZC4gKi8KIAotLy8gR1BJTyBjb25zdGFudHMuCi0jZGVmaW5lIEdQSU9fQkFTRQkJMHgxMDAwNDAwMAkvLyBHUElPIDAsMiwzID0gaW5wdXRzLCBHUElPMyA9IElSUTsgR1BJTzEgPSBvdXQuCi0jZGVmaW5lIEdQSU8xX0xPCQkweDAwMDAwMDAwCS8vIEdQSU8xIHNldCB0byBMT1cuCi0jZGVmaW5lIEdQSU8xX0hJCQkweDAwMDAxMDAwCS8vIEdQSU8xIHNldCB0byBISUdILgorLyogIEV2ZW50IGNvdW50ZXIgc291cmNlIGFkZHJlc3Nlcy4gKi8KKyNkZWZpbmUgU0JBX1JQU19BMAkJMHgyNwkvKiAgVGltZSBvZiBSUFMwIGJ1c3ksIGluIFBDSSBjbG9ja3MuICovCiAKLS8vIFByaW1hcnkgU3RhdHVzIFJlZ2lzdGVyIChQU1IpIGNvbnN0YW50cy4KLSNkZWZpbmUgUFNSX0RFQklfRQkJMHgwMDA0MDAwMAkvLyBERUJJIGV2ZW50IGZsYWcuCi0jZGVmaW5lIFBTUl9ERUJJX1MJCTB4MDAwODAwMDAJLy8gREVCSSBzdGF0dXMgZmxhZy4KLSNkZWZpbmUgUFNSX0EyX0lOCQkweDAwMDA4MDAwCS8vIEF1ZGlvIG91dHB1dCBETUEyIHByb3RlY3Rpb24gYWRkcmVzcyByZWFjaGVkLgotI2RlZmluZSBQU1JfQUZPVQkJMHgwMDAwMDgwMAkvLyBBdWRpbyBGSUZPIHVuZGVyL292ZXJmbG93IGRldGVjdGVkLgotI2RlZmluZSBQU1JfR1BJTzIJCTB4MDAwMDAwMjAJLy8gR1BJTzIgaW5wdXQgcGluOiAwPUFkY0J1c3ksIDE9QWRjSWRsZS4KLSNkZWZpbmUgUFNSX0VDMFMJCTB4MDAwMDAwMDEJLy8gRXZlbnQgY291bnRlciAwIHRocmVzaG9sZCByZWFjaGVkLgorLyogIEdQSU8gY29uc3RhbnRzLiAqLworI2RlZmluZSBHUElPX0JBU0UJCTB4MTAwMDQwMDAJLyogIEdQSU8gMCwyLDMgPSBpbnB1dHMsIEdQSU8zID0gSVJROyBHUElPMSA9IG91dC4gKi8KKyNkZWZpbmUgR1BJTzFfTE8JCTB4MDAwMDAwMDAJLyogIEdQSU8xIHNldCB0byBMT1cuICovCisjZGVmaW5lIEdQSU8xX0hJCQkweDAwMDAxMDAwCS8qICBHUElPMSBzZXQgdG8gSElHSC4gKi8KIAotLy8gU2Vjb25kYXJ5IFN0YXR1cyBSZWdpc3RlciAoU1NSKSBjb25zdGFudHMuCi0jZGVmaW5lIFNTUl9BRjJfT1VUCQkweDAwMDAwMjAwCS8vIEF1ZGlvIDIgb3V0cHV0IEZJRk8gdW5kZXIvb3ZlcmZsb3cgZGV0ZWN0ZWQuCisvKiAgUHJpbWFyeSBTdGF0dXMgUmVnaXN0ZXIgKFBTUikgY29uc3RhbnRzLiAqLworI2RlZmluZSBQU1JfREVCSV9FCQkweDAwMDQwMDAwCS8qICBERUJJIGV2ZW50IGZsYWcuICovCisjZGVmaW5lIFBTUl9ERUJJX1MJCTB4MDAwODAwMDAJLyogIERFQkkgc3RhdHVzIGZsYWcuICovCisjZGVmaW5lIFBTUl9BMl9JTgkJMHgwMDAwODAwMAkvKiAgQXVkaW8gb3V0cHV0IERNQTIgcHJvdGVjdGlvbiBhZGRyZXNzIHJlYWNoZWQuICovCisjZGVmaW5lIFBTUl9BRk9VCQkweDAwMDAwODAwCS8qICBBdWRpbyBGSUZPIHVuZGVyL292ZXJmbG93IGRldGVjdGVkLiAqLworI2RlZmluZSBQU1JfR1BJTzIJCTB4MDAwMDAwMjAJLyogIEdQSU8yIGlucHV0IHBpbjogMD1BZGNCdXN5LCAxPUFkY0lkbGUuICovCisjZGVmaW5lIFBTUl9FQzBTCQkweDAwMDAwMDAxCS8qICBFdmVudCBjb3VudGVyIDAgdGhyZXNob2xkIHJlYWNoZWQuICovCiAKLS8vIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyIDEgKE1DMSkgY29uc3RhbnRzLgotI2RlZmluZSBNQzFfU09GVF9SRVNFVAkJMHg4MDAwMDAwMAkvLyBJbnZva2UgNzE0NiBzb2Z0IHJlc2V0LgotI2RlZmluZSBNQzFfU0hVVERPV04JCTB4M0ZGRjAwMDAJLy8gU2h1dCBkb3duIGFsbCBNQzEtY29udHJvbGxlZCBlbmFibGVzLgorLyogIFNlY29uZGFyeSBTdGF0dXMgUmVnaXN0ZXIgKFNTUikgY29uc3RhbnRzLiAqLworI2RlZmluZSBTU1JfQUYyX09VVAkJMHgwMDAwMDIwMAkvKiAgQXVkaW8gMiBvdXRwdXQgRklGTyB1bmRlci9vdmVyZmxvdyBkZXRlY3RlZC4gKi8KIAotI2RlZmluZSBNQzFfRVJQUzEJCTB4MjAwMAkvLyBlbmFiL2Rpc2FibGUgUlBTIHRhc2sgMS4KLSNkZWZpbmUgTUMxX0VSUFMwCQkweDEwMDAJLy8gZW5hYi9kaXNhYmxlIFJQUyB0YXNrIDAuCi0jZGVmaW5lIE1DMV9ERUJJCQkweDA4MDAJLy8gZW5hYi9kaXNhYmxlIERFQkkgcGlucy4KLSNkZWZpbmUgTUMxX0FVRElPCQkweDAyMDAJLy8gZW5hYi9kaXNhYmxlIGF1ZGlvIHBvcnQgcGlucy4KLSNkZWZpbmUgTUMxX0kyQwkJCTB4MDEwMAkvLyBlbmFiL2Rpc2FibGUgSTJDIGludGVyZmFjZS4KLSNkZWZpbmUgTUMxX0EyT1VUCQkweDAwMDgJLy8gZW5hYi9kaXNhYmxlIHRyYW5zZmVyIG9uIEEyIG91dC4KLSNkZWZpbmUgTUMxX0EySU4JCTB4MDAwNAkvLyBlbmFiL2Rpc2FibGUgdHJhbnNmZXIgb24gQTIgaW4uCi0jZGVmaW5lIE1DMV9BMUlOCQkweDAwMDEJLy8gZW5hYi9kaXNhYmxlIHRyYW5zZmVyIG9uIEExIGluLgorLyogIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyIDEgKE1DMSkgY29uc3RhbnRzLiAqLworI2RlZmluZSBNQzFfU09GVF9SRVNFVAkJMHg4MDAwMDAwMAkvKiAgSW52b2tlIDcxNDYgc29mdCByZXNldC4gKi8KKyNkZWZpbmUgTUMxX1NIVVRET1dOCQkweDNGRkYwMDAwCS8qICBTaHV0IGRvd24gYWxsIE1DMS1jb250cm9sbGVkIGVuYWJsZXMuICovCiAKLS8vIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyIDIgKE1DMikgY29uc3RhbnRzLgotI2RlZmluZSBNQzJfVVBMRF9ERUJJcQkJMHgwMDAyMDAwMgkvLyBVcGxvYWQgREVCSSByZWdpc3RlcnMuCi0jZGVmaW5lIE1DMl9VUExEX0lJQ3EJCTB4MDAwMTAwMDEJLy8gVXBsb2FkIEkyQyByZWdpc3RlcnMuCi0jZGVmaW5lIE1DMl9SUFNTSUcyX09OcQkJMHgyMDAwMjAwMAkvLyBBc3NlcnQgUlBTX1NJRzIuCi0jZGVmaW5lIE1DMl9SUFNTSUcxX09OcQkJMHgxMDAwMTAwMAkvLyBBc3NlcnQgUlBTX1NJRzEuCi0jZGVmaW5lIE1DMl9SUFNTSUcwX09OcQkJMHgwODAwMDgwMAkvLyBBc3NlcnQgUlBTX1NJRzAuCi0jZGVmaW5lIE1DMl9VUExEX0RFQklfTUFTS3EJMHgwMDAwMDAwMgkvLyBVcGxvYWQgREVCSSBtYXNrLgotI2RlZmluZSBNQzJfVVBMRF9JSUNfTUFTS3EJMHgwMDAwMDAwMQkvLyBVcGxvYWQgSTJDIG1hc2suCi0jZGVmaW5lIE1DMl9SUFNTSUcyX01BU0txCTB4MDAwMDIwMDAJLy8gUlBTX1NJRzIgYml0IG1hc2suCi0jZGVmaW5lIE1DMl9SUFNTSUcxX01BU0txCTB4MDAwMDEwMDAJLy8gUlBTX1NJRzEgYml0IG1hc2suCi0jZGVmaW5lIE1DMl9SUFNTSUcwX01BU0txCTB4MDAwMDA4MDAJLy8gUlBTX1NJRzAgYml0IG1hc2suCisjZGVmaW5lIE1DMV9FUlBTMQkJMHgyMDAwCS8qICBlbmFiL2Rpc2FibGUgUlBTIHRhc2sgMS4gKi8KKyNkZWZpbmUgTUMxX0VSUFMwCQkweDEwMDAJLyogIGVuYWIvZGlzYWJsZSBSUFMgdGFzayAwLiAqLworI2RlZmluZSBNQzFfREVCSQkJMHgwODAwCS8qICBlbmFiL2Rpc2FibGUgREVCSSBwaW5zLiAqLworI2RlZmluZSBNQzFfQVVESU8JCTB4MDIwMAkvKiAgZW5hYi9kaXNhYmxlIGF1ZGlvIHBvcnQgcGlucy4gKi8KKyNkZWZpbmUgTUMxX0kyQwkJCTB4MDEwMAkvKiAgZW5hYi9kaXNhYmxlIEkyQyBpbnRlcmZhY2UuICovCisjZGVmaW5lIE1DMV9BMk9VVAkJMHgwMDA4CS8qICBlbmFiL2Rpc2FibGUgdHJhbnNmZXIgb24gQTIgb3V0LiAqLworI2RlZmluZSBNQzFfQTJJTgkJMHgwMDA0CS8qICBlbmFiL2Rpc2FibGUgdHJhbnNmZXIgb24gQTIgaW4uICovCisjZGVmaW5lIE1DMV9BMUlOCQkweDAwMDEJLyogIGVuYWIvZGlzYWJsZSB0cmFuc2ZlciBvbiBBMSBpbi4gKi8KKworLyogIE1hc3RlciBDb250cm9sIFJlZ2lzdGVyIDIgKE1DMikgY29uc3RhbnRzLiAqLworI2RlZmluZSBNQzJfVVBMRF9ERUJJcQkJMHgwMDAyMDAwMgkvKiAgVXBsb2FkIERFQkkgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBNQzJfVVBMRF9JSUNxCQkweDAwMDEwMDAxCS8qICBVcGxvYWQgSTJDIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgTUMyX1JQU1NJRzJfT05xCQkweDIwMDAyMDAwCS8qICBBc3NlcnQgUlBTX1NJRzIuICovCisjZGVmaW5lIE1DMl9SUFNTSUcxX09OcQkJMHgxMDAwMTAwMAkvKiAgQXNzZXJ0IFJQU19TSUcxLiAqLworI2RlZmluZSBNQzJfUlBTU0lHMF9PTnEJCTB4MDgwMDA4MDAJLyogIEFzc2VydCBSUFNfU0lHMC4gKi8KKyNkZWZpbmUgTUMyX1VQTERfREVCSV9NQVNLcQkweDAwMDAwMDAyCS8qICBVcGxvYWQgREVCSSBtYXNrLiAqLworI2RlZmluZSBNQzJfVVBMRF9JSUNfTUFTS3EJMHgwMDAwMDAwMQkvKiAgVXBsb2FkIEkyQyBtYXNrLiAqLworI2RlZmluZSBNQzJfUlBTU0lHMl9NQVNLcQkweDAwMDAyMDAwCS8qICBSUFNfU0lHMiBiaXQgbWFzay4gKi8KKyNkZWZpbmUgTUMyX1JQU1NJRzFfTUFTS3EJMHgwMDAwMTAwMAkvKiAgUlBTX1NJRzEgYml0IG1hc2suICovCisjZGVmaW5lIE1DMl9SUFNTSUcwX01BU0txCTB4MDAwMDA4MDAJLyogIFJQU19TSUcwIGJpdCBtYXNrLiAqLwogCiAjZGVmaW5lIE1DMl9ERUxBWVRSSUdfNFVTcQlNQzJfUlBTU0lHMV9PTgogI2RlZmluZSBNQzJfREVMQVlCVVNZXzRVU3EJTUMyX1JQU1NJRzFfTUFTSwpAQCAtMjM2LDQ2OSArMjI1LDQyNSBAQAogI2RlZmluZQlNQzJfREVMQVlUUklHXzZVU3EJTUMyX1JQU1NJRzJfT04KICNkZWZpbmUgTUMyX0RFTEFZQlVTWV82VVNxCU1DMl9SUFNTSUcyX01BU0sKIAotI2RlZmluZSBNQzJfVVBMRF9ERUJJCQkweDAwMDIJLy8gVXBsb2FkIERFQkkuCi0jZGVmaW5lIE1DMl9VUExEX0lJQwkJMHgwMDAxCS8vIFVwbG9hZCBJMkMuCi0jZGVmaW5lIE1DMl9SUFNTSUcyCQkweDIwMDAJLy8gUlBTIHNpZ25hbCAyIChub3QgdXNlZCkuCi0jZGVmaW5lIE1DMl9SUFNTSUcxCQkweDEwMDAJLy8gUlBTIHNpZ25hbCAxIChEQUMgUlBTIGJ1c3kpLgotI2RlZmluZSBNQzJfUlBTU0lHMAkJMHgwODAwCS8vIFJQUyBzaWduYWwgMCAoQURDIFJQUyBidXN5KS4KKyNkZWZpbmUgTUMyX1VQTERfREVCSQkJMHgwMDAyCS8qICBVcGxvYWQgREVCSS4gKi8KKyNkZWZpbmUgTUMyX1VQTERfSUlDCQkweDAwMDEJLyogIFVwbG9hZCBJMkMuICovCisjZGVmaW5lIE1DMl9SUFNTSUcyCQkweDIwMDAJLyogIFJQUyBzaWduYWwgMiAobm90IHVzZWQpLiAqLworI2RlZmluZSBNQzJfUlBTU0lHMQkJMHgxMDAwCS8qICBSUFMgc2lnbmFsIDEgKERBQyBSUFMgYnVzeSkuICovCisjZGVmaW5lIE1DMl9SUFNTSUcwCQkweDA4MDAJLyogIFJQUyBzaWduYWwgMCAoQURDIFJQUyBidXN5KS4gKi8KIAotI2RlZmluZSBNQzJfQURDX1JQUwkJTUMyX1JQU1NJRzAJLy8gQURDIFJQUyBidXN5LgotI2RlZmluZSBNQzJfREFDX1JQUwkJTUMyX1JQU1NJRzEJLy8gREFDIFJQUyBidXN5LgorI2RlZmluZSBNQzJfQURDX1JQUwkJTUMyX1JQU1NJRzAJLyogIEFEQyBSUFMgYnVzeS4gKi8KKyNkZWZpbmUgTUMyX0RBQ19SUFMJCU1DMl9SUFNTSUcxCS8qICBEQUMgUlBTIGJ1c3kuICovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy9vbGRpZXMvLy8vLy8vLy8vLwotI2RlZmluZSBNQzJfVVBMRF9ERUJJUQkJMHgwMDAyMDAwMgkvLyBVcGxvYWQgREVCSSByZWdpc3RlcnMuCi0jZGVmaW5lIE1DMl9VUExEX0lJQ1EJCTB4MDAwMTAwMDEJLy8gVXBsb2FkIEkyQyByZWdpc3RlcnMuCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKiAqKioqKiBvbGRpZXMgKioqKiogKi8KKyNkZWZpbmUgTUMyX1VQTERfREVCSVEJCTB4MDAwMjAwMDIJLyogIFVwbG9hZCBERUJJIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgTUMyX1VQTERfSUlDUQkJMHgwMDAxMDAwMQkvKiAgVXBsb2FkIEkyQyByZWdpc3RlcnMuICovCiAKLS8vIFBDSSBCVVMgKFNBQTcxNDYpIFJFR0lTVEVSIEFERFJFU1MgT0ZGU0VUUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSNkZWZpbmUgUF9QQ0lfQlRfQQkJMHgwMDRDCS8vIEF1ZGlvIERNQQotCQkJCQkJLy8gYnVyc3QvdGhyZXNob2xkCi0JCQkJCQkvLyBjb250cm9sLgotI2RlZmluZSBQX0RFQklDRkcgICAgICAgICAgICAgICAweDAwN0MJLy8gREVCSSBjb25maWd1cmF0aW9uLgotI2RlZmluZSBQX0RFQklDTUQgICAgICAgICAgICAgICAweDAwODAJLy8gREVCSSBjb21tYW5kLgotI2RlZmluZSBQX0RFQklQQUdFICAgICAgICAgICAgICAweDAwODQJLy8gREVCSSBwYWdlLgotI2RlZmluZSBQX0RFQklBRCAgICAgICAgICAgICAgICAweDAwODgJLy8gREVCSSB0YXJnZXQgYWRkcmVzcy4KLSNkZWZpbmUgUF9JMkNDVFJMICAgICAgICAgICAgICAgMHgwMDhDCS8vIEkyQyBjb250cm9sLgotI2RlZmluZSBQX0kyQ1NUQVQgICAgICAgICAgICAgICAweDAwOTAJLy8gSTJDIHN0YXR1cy4KLSNkZWZpbmUgUF9CQVNFQTJfSU4JCTB4MDBBQwkvLyBBdWRpbyBpbnB1dCAyIGJhc2UKLQkJCQkJCS8vIHBoeXNpY2FsIERNQWJ1ZgotCQkJCQkJLy8gYWRkcmVzcy4KLSNkZWZpbmUgUF9QUk9UQTJfSU4JCTB4MDBCMAkvLyBBdWRpbyBpbnB1dCAyCi0JCQkJCQkvLyBwaHlzaWNhbCBETUFidWYKLQkJCQkJCS8vIHByb3RlY3Rpb24gYWRkcmVzcy4KLSNkZWZpbmUgUF9QQUdFQTJfSU4JCTB4MDBCNAkvLyBBdWRpbyBpbnB1dCAyCi0JCQkJCQkvLyBwYWdpbmcgYXR0cmlidXRlcy4KLSNkZWZpbmUgUF9CQVNFQTJfT1VUCQkweDAwQjgJLy8gQXVkaW8gb3V0cHV0IDIgYmFzZQotCQkJCQkJLy8gcGh5c2ljYWwgRE1BYnVmCi0JCQkJCQkvLyBhZGRyZXNzLgotI2RlZmluZSBQX1BST1RBMl9PVVQJCTB4MDBCQwkvLyBBdWRpbyBvdXRwdXQgMgotCQkJCQkJLy8gcGh5c2ljYWwgRE1BYnVmCi0JCQkJCQkvLyBwcm90ZWN0aW9uIGFkZHJlc3MuCi0jZGVmaW5lIFBfUEFHRUEyX09VVAkJMHgwMEMwCS8vIEF1ZGlvIG91dHB1dCAyCi0JCQkJCQkvLyBwYWdpbmcgYXR0cmlidXRlcy4KLSNkZWZpbmUgUF9SUFNQQUdFMCAgICAgICAgICAgICAgMHgwMEM0CS8vIFJQUzAgcGFnZS4KLSNkZWZpbmUgUF9SUFNQQUdFMSAgICAgICAgICAgICAgMHgwMEM4CS8vIFJQUzEgcGFnZS4KLSNkZWZpbmUgUF9SUFMwX1RPVVQJCTB4MDBENAkvLyBSUFMwIHRpbWUtb3V0LgotI2RlZmluZSBQX1JQUzFfVE9VVAkJMHgwMEQ4CS8vIFJQUzEgdGltZS1vdXQuCi0jZGVmaW5lIFBfSUVSICAgICAgICAgICAgICAgICAgIDB4MDBEQwkvLyBJbnRlcnJ1cHQgZW5hYmxlLgotI2RlZmluZSBQX0dQSU8gICAgICAgICAgICAgICAgICAweDAwRTAJLy8gR2VuZXJhbC1wdXJwb3NlIEkvTy4KLSNkZWZpbmUgUF9FQzFTU1IJCTB4MDBFNAkvLyBFdmVudCBjb3VudGVyIHNldCAxCi0JCQkJCQkvLyBzb3VyY2Ugc2VsZWN0LgotI2RlZmluZSBQX0VDVDFSCQkJMHgwMEVDCS8vIEV2ZW50IGNvdW50ZXIKLQkJCQkJCS8vIHRocmVzaG9sZCBzZXQgMS4KLSNkZWZpbmUgUF9BQ09OMSAgICAgICAgICAgICAgICAgMHgwMEY0CS8vIEF1ZGlvIGNvbnRyb2wgMS4KLSNkZWZpbmUgUF9BQ09OMiAgICAgICAgICAgICAgICAgMHgwMEY4CS8vIEF1ZGlvIGNvbnRyb2wgMi4KLSNkZWZpbmUgUF9NQzEgICAgICAgICAgICAgICAgICAgMHgwMEZDCS8vIE1hc3RlciBjb250cm9sIDEuCi0jZGVmaW5lIFBfTUMyICAgICAgICAgICAgICAgICAgIDB4MDEwMAkvLyBNYXN0ZXIgY29udHJvbCAyLgotI2RlZmluZSBQX1JQU0FERFIwICAgICAgICAgICAgICAweDAxMDQJLy8gUlBTMCBpbnN0cnVjdGlvbiBwb2ludGVyLgotI2RlZmluZSBQX1JQU0FERFIxICAgICAgICAgICAgICAweDAxMDgJLy8gUlBTMSBpbnN0cnVjdGlvbiBwb2ludGVyLgotI2RlZmluZSBQX0lTUiAgICAgICAgICAgICAgICAgICAweDAxMEMJLy8gSW50ZXJydXB0IHN0YXR1cy4KLSNkZWZpbmUgUF9QU1IgICAgICAgICAgICAgICAgICAgMHgwMTEwCS8vIFByaW1hcnkgc3RhdHVzLgotI2RlZmluZSBQX1NTUiAgICAgICAgICAgICAgICAgICAweDAxMTQJLy8gU2Vjb25kYXJ5IHN0YXR1cy4KLSNkZWZpbmUgUF9FQzFSCQkJMHgwMTE4CS8vIEV2ZW50IGNvdW50ZXIgc2V0IDEuCi0jZGVmaW5lIFBfQURQNAkJCTB4MDEzOAkvLyBMb2dpY2FsIGF1ZGlvIERNQQotCQkJCQkJLy8gcG9pbnRlciBvZiBhdWRpbwotCQkJCQkJLy8gaW5wdXQgRklGTyBBMl9JTi4KLSNkZWZpbmUgUF9GQl9CVUZGRVIxICAgICAgICAgICAgMHgwMTQ0CS8vIEF1ZGlvIGZlZWRiYWNrIGJ1ZmZlciAxLgotI2RlZmluZSBQX0ZCX0JVRkZFUjIgICAgICAgICAgICAweDAxNDgJLy8gQXVkaW8gZmVlZGJhY2sgYnVmZmVyIDIuCi0jZGVmaW5lIFBfVFNMMSAgICAgICAgICAgICAgICAgIDB4MDE4MAkvLyBBdWRpbyB0aW1lIHNsb3QgbGlzdCAxLgotI2RlZmluZSBQX1RTTDIgICAgICAgICAgICAgICAgICAweDAxQzAJLy8gQXVkaW8gdGltZSBzbG90IGxpc3QgMi4KKy8qICBQQ0kgQlVTIChTQUE3MTQ2KSBSRUdJU1RFUiBBRERSRVNTIE9GRlNFVFMgKi8KKyNkZWZpbmUgUF9QQ0lfQlRfQQkJMHgwMDRDCS8qIEF1ZGlvIERNQSBidXJzdC90aHJlc2hvbGQgY29udHJvbC4gKi8KKyNkZWZpbmUgUF9ERUJJQ0ZHICAgICAgICAgICAgICAgMHgwMDdDCS8qIERFQkkgY29uZmlndXJhdGlvbi4gKi8KKyNkZWZpbmUgUF9ERUJJQ01EICAgICAgICAgICAgICAgMHgwMDgwCS8qIERFQkkgY29tbWFuZC4gKi8KKyNkZWZpbmUgUF9ERUJJUEFHRSAgICAgICAgICAgICAgMHgwMDg0CS8qIERFQkkgcGFnZS4gKi8KKyNkZWZpbmUgUF9ERUJJQUQgICAgICAgICAgICAgICAgMHgwMDg4CS8qIERFQkkgdGFyZ2V0IGFkZHJlc3MuICovCisjZGVmaW5lIFBfSTJDQ1RSTCAgICAgICAgICAgICAgIDB4MDA4QwkvKiBJMkMgY29udHJvbC4gKi8KKyNkZWZpbmUgUF9JMkNTVEFUICAgICAgICAgICAgICAgMHgwMDkwCS8qIEkyQyBzdGF0dXMuICovCisjZGVmaW5lIFBfQkFTRUEyX0lOCQkweDAwQUMJLyogQXVkaW8gaW5wdXQgMiBiYXNlIHBoeXNpY2FsIERNQWJ1ZgorCQkJCQkgKiBhZGRyZXNzLiAqLworI2RlZmluZSBQX1BST1RBMl9JTgkJMHgwMEIwCS8qIEF1ZGlvIGlucHV0IDIgcGh5c2ljYWwgRE1BYnVmCisJCQkJCSAqIHByb3RlY3Rpb24gYWRkcmVzcy4gKi8KKyNkZWZpbmUgUF9QQUdFQTJfSU4JCTB4MDBCNAkvKiBBdWRpbyBpbnB1dCAyIHBhZ2luZyBhdHRyaWJ1dGVzLiAqLworI2RlZmluZSBQX0JBU0VBMl9PVVQJCTB4MDBCOAkvKiBBdWRpbyBvdXRwdXQgMiBiYXNlIHBoeXNpY2FsIERNQWJ1ZgorCQkJCQkgKiBhZGRyZXNzLiAqLworI2RlZmluZSBQX1BST1RBMl9PVVQJCTB4MDBCQwkvKiBBdWRpbyBvdXRwdXQgMiBwaHlzaWNhbCBETUFidWYKKwkJCQkJICogcHJvdGVjdGlvbiBhZGRyZXNzLiAqLworI2RlZmluZSBQX1BBR0VBMl9PVVQJCTB4MDBDMAkvKiBBdWRpbyBvdXRwdXQgMiBwYWdpbmcgYXR0cmlidXRlcy4gKi8KKyNkZWZpbmUgUF9SUFNQQUdFMCAgICAgICAgICAgICAgMHgwMEM0CS8qIFJQUzAgcGFnZS4gKi8KKyNkZWZpbmUgUF9SUFNQQUdFMSAgICAgICAgICAgICAgMHgwMEM4CS8qIFJQUzEgcGFnZS4gKi8KKyNkZWZpbmUgUF9SUFMwX1RPVVQJCTB4MDBENAkvKiBSUFMwIHRpbWUtb3V0LiAqLworI2RlZmluZSBQX1JQUzFfVE9VVAkJMHgwMEQ4CS8qIFJQUzEgdGltZS1vdXQuICovCisjZGVmaW5lIFBfSUVSICAgICAgICAgICAgICAgICAgIDB4MDBEQwkvKiBJbnRlcnJ1cHQgZW5hYmxlLiAqLworI2RlZmluZSBQX0dQSU8gICAgICAgICAgICAgICAgICAweDAwRTAJLyogR2VuZXJhbC1wdXJwb3NlIEkvTy4gKi8KKyNkZWZpbmUgUF9FQzFTU1IJCTB4MDBFNAkvKiBFdmVudCBjb3VudGVyIHNldCAxIHNvdXJjZSBzZWxlY3QuICovCisjZGVmaW5lIFBfRUNUMVIJCQkweDAwRUMJLyogRXZlbnQgY291bnRlciB0aHJlc2hvbGQgc2V0IDEuICovCisjZGVmaW5lIFBfQUNPTjEgICAgICAgICAgICAgICAgIDB4MDBGNAkvKiBBdWRpbyBjb250cm9sIDEuICovCisjZGVmaW5lIFBfQUNPTjIgICAgICAgICAgICAgICAgIDB4MDBGOAkvKiBBdWRpbyBjb250cm9sIDIuICovCisjZGVmaW5lIFBfTUMxICAgICAgICAgICAgICAgICAgIDB4MDBGQwkvKiBNYXN0ZXIgY29udHJvbCAxLiAqLworI2RlZmluZSBQX01DMiAgICAgICAgICAgICAgICAgICAweDAxMDAJLyogTWFzdGVyIGNvbnRyb2wgMi4gKi8KKyNkZWZpbmUgUF9SUFNBRERSMCAgICAgICAgICAgICAgMHgwMTA0CS8qIFJQUzAgaW5zdHJ1Y3Rpb24gcG9pbnRlci4gKi8KKyNkZWZpbmUgUF9SUFNBRERSMSAgICAgICAgICAgICAgMHgwMTA4CS8qIFJQUzEgaW5zdHJ1Y3Rpb24gcG9pbnRlci4gKi8KKyNkZWZpbmUgUF9JU1IgICAgICAgICAgICAgICAgICAgMHgwMTBDCS8qIEludGVycnVwdCBzdGF0dXMuICovCisjZGVmaW5lIFBfUFNSICAgICAgICAgICAgICAgICAgIDB4MDExMAkvKiBQcmltYXJ5IHN0YXR1cy4gKi8KKyNkZWZpbmUgUF9TU1IgICAgICAgICAgICAgICAgICAgMHgwMTE0CS8qIFNlY29uZGFyeSBzdGF0dXMuICovCisjZGVmaW5lIFBfRUMxUgkJCTB4MDExOAkvKiBFdmVudCBjb3VudGVyIHNldCAxLiAqLworI2RlZmluZSBQX0FEUDQJCQkweDAxMzgJLyogTG9naWNhbCBhdWRpbyBETUEgcG9pbnRlciBvZiBhdWRpbworCQkJCQkgKiBpbnB1dCBGSUZPIEEyX0lOLiAqLworI2RlZmluZSBQX0ZCX0JVRkZFUjEgICAgICAgICAgICAweDAxNDQJLyogQXVkaW8gZmVlZGJhY2sgYnVmZmVyIDEuICovCisjZGVmaW5lIFBfRkJfQlVGRkVSMiAgICAgICAgICAgIDB4MDE0OAkvKiBBdWRpbyBmZWVkYmFjayBidWZmZXIgMi4gKi8KKyNkZWZpbmUgUF9UU0wxICAgICAgICAgICAgICAgICAgMHgwMTgwCS8qIEF1ZGlvIHRpbWUgc2xvdCBsaXN0IDEuICovCisjZGVmaW5lIFBfVFNMMiAgICAgICAgICAgICAgICAgIDB4MDFDMAkvKiBBdWRpbyB0aW1lIHNsb3QgbGlzdCAyLiAqLwogCi0vLyBMT0NBTCBCVVMgKEdBVEUgQVJSQVkpIFJFR0lTVEVSIEFERFJFU1MgT0ZGU0VUUyAvLy8vLy8vLy8vLy8vLy8vLwotLy8gQW5hbG9nIEkvTyByZWdpc3RlcnM6Ci0jZGVmaW5lIExQX0RBQ1BPTAkJMHgwMDgyCS8vICBXcml0ZSBEQUMgcG9sYXJpdHkuCi0jZGVmaW5lIExQX0dTRUwJCQkweDAwODQJLy8gIFdyaXRlIEFEQyBnYWluLgotI2RlZmluZSBMUF9JU0VMCQkJMHgwMDg2CS8vICBXcml0ZSBBREMgY2hhbm5lbCBzZWxlY3QuCi0vLyBEaWdpdGFsIEkvTyAod3JpdGUgb25seSk6Ci0jZGVmaW5lIExQX1dSSU5UU0VMQQkJMHgwMDQyCS8vICBXcml0ZSBBIGludGVycnVwdCBlbmFibGUuCi0jZGVmaW5lIExQX1dSRURHU0VMQQkJMHgwMDQ0CS8vICBXcml0ZSBBIGVkZ2Ugc2VsZWN0aW9uLgotI2RlZmluZSBMUF9XUkNBUFNFTEEJCTB4MDA0NgkvLyAgV3JpdGUgQSBjYXB0dXJlIGVuYWJsZS4KLSNkZWZpbmUgTFBfV1JET1VUQQkJMHgwMDQ4CS8vICBXcml0ZSBBIGRpZ2l0YWwgb3V0cHV0LgotI2RlZmluZSBMUF9XUklOVFNFTEIJCTB4MDA1MgkvLyAgV3JpdGUgQiBpbnRlcnJ1cHQgZW5hYmxlLgotI2RlZmluZSBMUF9XUkVER1NFTEIJCTB4MDA1NAkvLyAgV3JpdGUgQiBlZGdlIHNlbGVjdGlvbi4KLSNkZWZpbmUgTFBfV1JDQVBTRUxCCQkweDAwNTYJLy8gIFdyaXRlIEIgY2FwdHVyZSBlbmFibGUuCi0jZGVmaW5lIExQX1dSRE9VVEIJCTB4MDA1OAkvLyAgV3JpdGUgQiBkaWdpdGFsIG91dHB1dC4KLSNkZWZpbmUgTFBfV1JJTlRTRUxDCQkweDAwNjIJLy8gIFdyaXRlIEMgaW50ZXJydXB0IGVuYWJsZS4KLSNkZWZpbmUgTFBfV1JFREdTRUxDCQkweDAwNjQJLy8gIFdyaXRlIEMgZWRnZSBzZWxlY3Rpb24uCi0jZGVmaW5lIExQX1dSQ0FQU0VMQwkJMHgwMDY2CS8vICBXcml0ZSBDIGNhcHR1cmUgZW5hYmxlLgotI2RlZmluZSBMUF9XUkRPVVRDCQkweDAwNjgJLy8gIFdyaXRlIEMgZGlnaXRhbCBvdXRwdXQuCisvKiAgTE9DQUwgQlVTIChHQVRFIEFSUkFZKSBSRUdJU1RFUiBBRERSRVNTIE9GRlNFVFMgKi8KKy8qICBBbmFsb2cgSS9PIHJlZ2lzdGVyczogKi8KKyNkZWZpbmUgTFBfREFDUE9MCQkweDAwODIJLyogICBXcml0ZSBEQUMgcG9sYXJpdHkuICovCisjZGVmaW5lIExQX0dTRUwJCQkweDAwODQJLyogICBXcml0ZSBBREMgZ2Fpbi4gKi8KKyNkZWZpbmUgTFBfSVNFTAkJCTB4MDA4NgkvKiAgIFdyaXRlIEFEQyBjaGFubmVsIHNlbGVjdC4gKi8KKy8qICBEaWdpdGFsIEkvTyAod3JpdGUgb25seSk6ICovCisjZGVmaW5lIExQX1dSSU5UU0VMQQkJMHgwMDQyCS8qICAgV3JpdGUgQSBpbnRlcnJ1cHQgZW5hYmxlLiAqLworI2RlZmluZSBMUF9XUkVER1NFTEEJCTB4MDA0NAkvKiAgIFdyaXRlIEEgZWRnZSBzZWxlY3Rpb24uICovCisjZGVmaW5lIExQX1dSQ0FQU0VMQQkJMHgwMDQ2CS8qICAgV3JpdGUgQSBjYXB0dXJlIGVuYWJsZS4gKi8KKyNkZWZpbmUgTFBfV1JET1VUQQkJMHgwMDQ4CS8qICAgV3JpdGUgQSBkaWdpdGFsIG91dHB1dC4gKi8KKyNkZWZpbmUgTFBfV1JJTlRTRUxCCQkweDAwNTIJLyogICBXcml0ZSBCIGludGVycnVwdCBlbmFibGUuICovCisjZGVmaW5lIExQX1dSRURHU0VMQgkJMHgwMDU0CS8qICAgV3JpdGUgQiBlZGdlIHNlbGVjdGlvbi4gKi8KKyNkZWZpbmUgTFBfV1JDQVBTRUxCCQkweDAwNTYJLyogICBXcml0ZSBCIGNhcHR1cmUgZW5hYmxlLiAqLworI2RlZmluZSBMUF9XUkRPVVRCCQkweDAwNTgJLyogICBXcml0ZSBCIGRpZ2l0YWwgb3V0cHV0LiAqLworI2RlZmluZSBMUF9XUklOVFNFTEMJCTB4MDA2MgkvKiAgIFdyaXRlIEMgaW50ZXJydXB0IGVuYWJsZS4gKi8KKyNkZWZpbmUgTFBfV1JFREdTRUxDCQkweDAwNjQJLyogICBXcml0ZSBDIGVkZ2Ugc2VsZWN0aW9uLiAqLworI2RlZmluZSBMUF9XUkNBUFNFTEMJCTB4MDA2NgkvKiAgIFdyaXRlIEMgY2FwdHVyZSBlbmFibGUuICovCisjZGVmaW5lIExQX1dSRE9VVEMJCTB4MDA2OAkvKiAgIFdyaXRlIEMgZGlnaXRhbCBvdXRwdXQuICovCiAKLS8vIERpZ2l0YWwgSS9PIChyZWFkIG9ubHkpOgotI2RlZmluZSBMUF9SRERJTkEJCTB4MDA0MAkvLyAgUmVhZCBkaWdpdGFsIGlucHV0LgotI2RlZmluZSBMUF9SRENBUEZMR0EJCTB4MDA0OAkvLyAgUmVhZCBlZGdlcyBjYXB0dXJlZC4KLSNkZWZpbmUgTFBfUkRJTlRTRUxBCQkweDAwNEEJLy8gIFJlYWQgaW50ZXJydXB0Ci0JCQkJCQkvLyAgZW5hYmxlIHJlZ2lzdGVyLgotI2RlZmluZSBMUF9SREVER1NFTEEJCTB4MDA0QwkvLyAgUmVhZCBlZGdlCi0JCQkJCQkvLyAgc2VsZWN0aW9uCi0JCQkJCQkvLyAgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX1JEQ0FQU0VMQQkJMHgwMDRFCS8vICBSZWFkIGNhcHR1cmUKLQkJCQkJCS8vICBlbmFibGUgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX1JERElOQgkJMHgwMDUwCS8vICBSZWFkIGRpZ2l0YWwgaW5wdXQuCi0jZGVmaW5lIExQX1JEQ0FQRkxHQgkJMHgwMDU4CS8vICBSZWFkIGVkZ2VzIGNhcHR1cmVkLgotI2RlZmluZSBMUF9SRElOVFNFTEIJCTB4MDA1QQkvLyAgUmVhZCBpbnRlcnJ1cHQKLQkJCQkJCS8vICBlbmFibGUgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX1JERURHU0VMQgkJMHgwMDVDCS8vICBSZWFkIGVkZ2UKLQkJCQkJCS8vICBzZWxlY3Rpb24KLQkJCQkJCS8vICByZWdpc3Rlci4KLSNkZWZpbmUgTFBfUkRDQVBTRUxCCQkweDAwNUUJLy8gIFJlYWQgY2FwdHVyZQotCQkJCQkJLy8gIGVuYWJsZSByZWdpc3Rlci4KLSNkZWZpbmUgTFBfUkRESU5DCQkweDAwNjAJLy8gIFJlYWQgZGlnaXRhbCBpbnB1dC4KLSNkZWZpbmUgTFBfUkRDQVBGTEdDCQkweDAwNjgJLy8gIFJlYWQgZWRnZXMgY2FwdHVyZWQuCi0jZGVmaW5lIExQX1JESU5UU0VMQwkJMHgwMDZBCS8vICBSZWFkIGludGVycnVwdAotCQkJCQkJLy8gIGVuYWJsZSByZWdpc3Rlci4KLSNkZWZpbmUgTFBfUkRFREdTRUxDCQkweDAwNkMJLy8gIFJlYWQgZWRnZQotCQkJCQkJLy8gIHNlbGVjdGlvbgotCQkJCQkJLy8gIHJlZ2lzdGVyLgotI2RlZmluZSBMUF9SRENBUFNFTEMJCTB4MDA2RQkvLyAgUmVhZCBjYXB0dXJlCi0JCQkJCQkvLyAgZW5hYmxlIHJlZ2lzdGVyLgotLy8gQ291bnRlciBSZWdpc3RlcnMgKHJlYWQvd3JpdGUpOgotI2RlZmluZSBMUF9DUjBBCQkJMHgwMDAwCS8vICAwQSBzZXR1cCByZWdpc3Rlci4KLSNkZWZpbmUgTFBfQ1IwQgkJCTB4MDAwMgkvLyAgMEIgc2V0dXAgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX0NSMUEJCQkweDAwMDQJLy8gIDFBIHNldHVwIHJlZ2lzdGVyLgotI2RlZmluZSBMUF9DUjFCCQkJMHgwMDA2CS8vICAxQiBzZXR1cCByZWdpc3Rlci4KLSNkZWZpbmUgTFBfQ1IyQQkJCTB4MDAwOAkvLyAgMkEgc2V0dXAgcmVnaXN0ZXIuCi0jZGVmaW5lIExQX0NSMkIJCQkweDAwMEEJLy8gIDJCIHNldHVwIHJlZ2lzdGVyLgotLy8gQ291bnRlciBQcmVMb2FkICh3cml0ZSkgYW5kIExhdGNoIChyZWFkKSBSZWdpc3RlcnM6Ci0jZGVmaW5lCUxQX0NOVFIwQUxTVwkJMHgwMDBDCS8vICAwQSBsc3cuCi0jZGVmaW5lCUxQX0NOVFIwQU1TVwkJMHgwMDBFCS8vICAwQSBtc3cuCi0jZGVmaW5lCUxQX0NOVFIwQkxTVwkJMHgwMDEwCS8vICAwQiBsc3cuCi0jZGVmaW5lCUxQX0NOVFIwQk1TVwkJMHgwMDEyCS8vICAwQiBtc3cuCi0jZGVmaW5lCUxQX0NOVFIxQUxTVwkJMHgwMDE0CS8vICAxQSBsc3cuCi0jZGVmaW5lCUxQX0NOVFIxQU1TVwkJMHgwMDE2CS8vICAxQSBtc3cuCi0jZGVmaW5lCUxQX0NOVFIxQkxTVwkJMHgwMDE4CS8vICAxQiBsc3cuCi0jZGVmaW5lCUxQX0NOVFIxQk1TVwkJMHgwMDFBCS8vICAxQiBtc3cuCi0jZGVmaW5lCUxQX0NOVFIyQUxTVwkJMHgwMDFDCS8vICAyQSBsc3cuCi0jZGVmaW5lCUxQX0NOVFIyQU1TVwkJMHgwMDFFCS8vICAyQSBtc3cuCi0jZGVmaW5lCUxQX0NOVFIyQkxTVwkJMHgwMDIwCS8vICAyQiBsc3cuCi0jZGVmaW5lCUxQX0NOVFIyQk1TVwkJMHgwMDIyCS8vICAyQiBtc3cuCi0vLyBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVycyAocmVhZC93cml0ZSk6Ci0jZGVmaW5lIExQX01JU0MxCQkweDAwODgJLy8gIFJlYWQvd3JpdGUgTWlzYzEuCi0jZGVmaW5lIExQX1dSTUlTQzIJCTB4MDA5MAkvLyAgV3JpdGUgTWlzYzIuCi0jZGVmaW5lIExQX1JETUlTQzIJCTB4MDA4MgkvLyAgUmVhZCBNaXNjMi4KKy8qICBEaWdpdGFsIEkvTyAocmVhZCBvbmx5KTogKi8KKyNkZWZpbmUgTFBfUkRESU5BCQkweDAwNDAJLyogICBSZWFkIGRpZ2l0YWwgaW5wdXQuICovCisjZGVmaW5lIExQX1JEQ0FQRkxHQQkJMHgwMDQ4CS8qICAgUmVhZCBlZGdlcyBjYXB0dXJlZC4gKi8KKyNkZWZpbmUgTFBfUkRJTlRTRUxBCQkweDAwNEEJLyogICBSZWFkIGludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIuICovCisjZGVmaW5lIExQX1JERURHU0VMQQkJMHgwMDRDCS8qICAgUmVhZCBlZGdlIHNlbGVjdGlvbiByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfUkRDQVBTRUxBCQkweDAwNEUJLyogICBSZWFkIGNhcHR1cmUgZW5hYmxlIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9SRERJTkIJCTB4MDA1MAkvKiAgIFJlYWQgZGlnaXRhbCBpbnB1dC4gKi8KKyNkZWZpbmUgTFBfUkRDQVBGTEdCCQkweDAwNTgJLyogICBSZWFkIGVkZ2VzIGNhcHR1cmVkLiAqLworI2RlZmluZSBMUF9SRElOVFNFTEIJCTB4MDA1QQkvKiAgIFJlYWQgaW50ZXJydXB0IGVuYWJsZSByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfUkRFREdTRUxCCQkweDAwNUMJLyogICBSZWFkIGVkZ2Ugc2VsZWN0aW9uIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9SRENBUFNFTEIJCTB4MDA1RQkvKiAgIFJlYWQgY2FwdHVyZSBlbmFibGUgcmVnaXN0ZXIuICovCisjZGVmaW5lIExQX1JERElOQwkJMHgwMDYwCS8qICAgUmVhZCBkaWdpdGFsIGlucHV0LiAqLworI2RlZmluZSBMUF9SRENBUEZMR0MJCTB4MDA2OAkvKiAgIFJlYWQgZWRnZXMgY2FwdHVyZWQuICovCisjZGVmaW5lIExQX1JESU5UU0VMQwkJMHgwMDZBCS8qICAgUmVhZCBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9SREVER1NFTEMJCTB4MDA2QwkvKiAgIFJlYWQgZWRnZSBzZWxlY3Rpb24gcmVnaXN0ZXIuICovCisjZGVmaW5lIExQX1JEQ0FQU0VMQwkJMHgwMDZFCS8qICAgUmVhZCBjYXB0dXJlIGVuYWJsZSByZWdpc3Rlci4gKi8KIAotLy8gQml0IG1hc2tzIGZvciBNSVNDMSByZWdpc3RlciB0aGF0IGFyZSB0aGUgc2FtZSBmb3IgcmVhZHMgYW5kIHdyaXRlcy4KLSNkZWZpbmUgTUlTQzFfV0VOQUJMRQkJMHg4MDAwCS8vIGVuYWIgd3JpdGVzIHRvCi0JCQkJCQkvLyBNSVNDMiAoZXhjZXB0IENsZWFyCi0JCQkJCQkvLyBXYXRjaGRvZyBiaXQpLgotI2RlZmluZSBNSVNDMV9XRElTQUJMRQkJMHgwMDAwCS8vIERpc2FibGUgd3JpdGVzIHRvIE1JU0MyLgotI2RlZmluZSBNSVNDMV9FRENBUAkJMHgxMDAwCS8vIGVuYWIgZWRnZSBjYXB0dXJlCi0JCQkJCQkvLyBvbiBESU8gY2hhbnMKLQkJCQkJCS8vIHNwZWNpZmllZCBieQotCQkJCQkJLy8gTFBfV1JDQVBTRUx4LgotI2RlZmluZSBNSVNDMV9OT0VEQ0FQCQkweDAwMDAJLy8gRGlzYWJsZSBlZGdlCi0JCQkJCQkvLyBjYXB0dXJlIG9uCi0JCQkJCQkvLyBzcGVjaWZpZWQgRElPCi0JCQkJCQkvLyBjaGFucy4KKy8qICBDb3VudGVyIFJlZ2lzdGVycyAocmVhZC93cml0ZSk6ICovCisjZGVmaW5lIExQX0NSMEEJCQkweDAwMDAJLyogICAwQSBzZXR1cCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfQ1IwQgkJCTB4MDAwMgkvKiAgIDBCIHNldHVwIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9DUjFBCQkJMHgwMDA0CS8qICAgMUEgc2V0dXAgcmVnaXN0ZXIuICovCisjZGVmaW5lIExQX0NSMUIJCQkweDAwMDYJLyogICAxQiBzZXR1cCByZWdpc3Rlci4gKi8KKyNkZWZpbmUgTFBfQ1IyQQkJCTB4MDAwOAkvKiAgIDJBIHNldHVwIHJlZ2lzdGVyLiAqLworI2RlZmluZSBMUF9DUjJCCQkJMHgwMDBBCS8qICAgMkIgc2V0dXAgcmVnaXN0ZXIuICovCiAKLS8vIEJpdCBtYXNrcyBmb3IgTUlTQzEgcmVnaXN0ZXIgcmVhZHMuCi0jZGVmaW5lIFJETUlTQzFfV0RUSU1FT1VUCTB4NDAwMAkvLyBXYXRjaGRvZyB0aW1lciB0aW1lZCBvdXQuCisvKiAgQ291bnRlciBQcmVMb2FkICh3cml0ZSkgYW5kIExhdGNoIChyZWFkKSBSZWdpc3RlcnM6ICovCisjZGVmaW5lCUxQX0NOVFIwQUxTVwkJMHgwMDBDCS8qICAgMEEgbHN3LiAqLworI2RlZmluZQlMUF9DTlRSMEFNU1cJCTB4MDAwRQkvKiAgIDBBIG1zdy4gKi8KKyNkZWZpbmUJTFBfQ05UUjBCTFNXCQkweDAwMTAJLyogICAwQiBsc3cuICovCisjZGVmaW5lCUxQX0NOVFIwQk1TVwkJMHgwMDEyCS8qICAgMEIgbXN3LiAqLworI2RlZmluZQlMUF9DTlRSMUFMU1cJCTB4MDAxNAkvKiAgIDFBIGxzdy4gKi8KKyNkZWZpbmUJTFBfQ05UUjFBTVNXCQkweDAwMTYJLyogICAxQSBtc3cuICovCisjZGVmaW5lCUxQX0NOVFIxQkxTVwkJMHgwMDE4CS8qICAgMUIgbHN3LiAqLworI2RlZmluZQlMUF9DTlRSMUJNU1cJCTB4MDAxQQkvKiAgIDFCIG1zdy4gKi8KKyNkZWZpbmUJTFBfQ05UUjJBTFNXCQkweDAwMUMJLyogICAyQSBsc3cuICovCisjZGVmaW5lCUxQX0NOVFIyQU1TVwkJMHgwMDFFCS8qICAgMkEgbXN3LiAqLworI2RlZmluZQlMUF9DTlRSMkJMU1cJCTB4MDAyMAkvKiAgIDJCIGxzdy4gKi8KKyNkZWZpbmUJTFBfQ05UUjJCTVNXCQkweDAwMjIJLyogICAyQiBtc3cuICovCiAKLS8vIEJpdCBtYXNrcyBmb3IgTUlTQzIgcmVnaXN0ZXIgd3JpdGVzLgotI2RlZmluZSBXUk1JU0MyX1dEQ0xFQVIJCTB4ODAwMAkvLyBSZXNldCB3YXRjaGRvZwotCQkJCQkJLy8gdGltZXIgdG8gemVyby4KLSNkZWZpbmUgV1JNSVNDMl9DSEFSR0VfRU5BQkxFCTB4NDAwMAkvLyBlbmFiIGJhdHRlcnkKLQkJCQkJCS8vIHRyaWNrbGUgY2hhcmdpbmcuCisvKiAgTWlzY2VsbGFuZW91cyBSZWdpc3RlcnMgKHJlYWQvd3JpdGUpOiAqLworI2RlZmluZSBMUF9NSVNDMQkJMHgwMDg4CS8qICAgUmVhZC93cml0ZSBNaXNjMS4gKi8KKyNkZWZpbmUgTFBfV1JNSVNDMgkJMHgwMDkwCS8qICAgV3JpdGUgTWlzYzIuICovCisjZGVmaW5lIExQX1JETUlTQzIJCTB4MDA4MgkvKiAgIFJlYWQgTWlzYzIuICovCiAKLS8vIEJpdCBtYXNrcyBmb3IgTUlTQzIgcmVnaXN0ZXIgdGhhdCBhcmUgdGhlIHNhbWUgZm9yIHJlYWRzIGFuZCB3cml0ZXMuCi0jZGVmaW5lIE1JU0MyX0JBVFRfRU5BQkxFCTB4MDAwOAkvLyBCYWNrdXAgYmF0dGVyeSBlbmFibGUuCi0jZGVmaW5lIE1JU0MyX1dERU5BQkxFCQkweDAwMDQJLy8gV2F0Y2hkb2cgdGltZXIgZW5hYmxlLgotI2RlZmluZSBNSVNDMl9XRFBFUklPRF9NQVNLCTB4MDAwMwkvLyBXYXRjaGRvZyBpbnRlcnZhbAotCQkJCQkJLy8gc2VsZWN0IG1hc2suCisvKiAgQml0IG1hc2tzIGZvciBNSVNDMSByZWdpc3RlciB0aGF0IGFyZSB0aGUgc2FtZSBmb3IgcmVhZHMgYW5kIHdyaXRlcy4gKi8KKyNkZWZpbmUgTUlTQzFfV0VOQUJMRQkJMHg4MDAwCS8qIGVuYWIgd3JpdGVzIHRvIE1JU0MyIChleGNlcHQgQ2xlYXIKKwkJCQkJICogV2F0Y2hkb2cgYml0KS4gKi8KKyNkZWZpbmUgTUlTQzFfV0RJU0FCTEUJCTB4MDAwMAkvKiBEaXNhYmxlIHdyaXRlcyB0byBNSVNDMi4gKi8KKyNkZWZpbmUgTUlTQzFfRURDQVAJCTB4MTAwMAkvKiBlbmFiIGVkZ2UgY2FwdHVyZSBvbiBESU8gY2hhbnMKKwkJCQkJICogc3BlY2lmaWVkIGJ5ICBMUF9XUkNBUFNFTHguICovCisjZGVmaW5lIE1JU0MxX05PRURDQVAJCTB4MDAwMAkvKiBEaXNhYmxlIGVkZ2UgY2FwdHVyZSBvbiBzcGVjaWZpZWQKKwkJCQkJICogRElPIGNoYW5zLiAqLwogCi0vLyBCaXQgbWFza3MgZm9yIEFDT04xIHJlZ2lzdGVyLgotI2RlZmluZSBBMl9SVU4JCQkweDQwMDAwMDAwCS8vIFJ1biBBMiBiYXNlZCBvbiBUU0wyLgotI2RlZmluZSBBMV9SVU4JCQkweDIwMDAwMDAwCS8vIFJ1biBBMSBiYXNlZCBvbiBUU0wxLgotI2RlZmluZSBBMV9TV0FQCQkJMHgwMDIwMDAwMAkvLyBVc2UgYmlnLWVuZGlhbiBmb3IgQTEuCi0jZGVmaW5lIEEyX1NXQVAJCQkweDAwMTAwMDAwCS8vIFVzZSBiaWctZW5kaWFuIGZvciBBMi4KLSNkZWZpbmUgV1NfTU9ERVMJCTB4MDAwMTk5OTkJLy8gV1MwID0gVFNMMSB0cmlnZ2VyCi0JCQkJCQkvLyBpbnB1dCwgV1MxLVdTNCA9Ci0JCQkJCQkvLyBDUyogb3V0cHV0cy4KKy8qICBCaXQgbWFza3MgZm9yIE1JU0MxIHJlZ2lzdGVyIHJlYWRzLiAqLworI2RlZmluZSBSRE1JU0MxX1dEVElNRU9VVAkweDQwMDAJLyogIFdhdGNoZG9nIHRpbWVyIHRpbWVkIG91dC4gKi8KIAotI2lmIFBMQVRGT1JNID09IElOVEVMCQkvLyBCYXNlIEFDT04xIGNvbmZpZzoKLQkJCQkJCS8vIGFsd2F5cyBydW4gQTEgYmFzZWQKLQkJCQkJCS8vIG9uIFRTTDEuCi0jZGVmaW5lIEFDT04xX0JBU0UJCSggV1NfTU9ERVMgfCBBMV9SVU4gKQorLyogIEJpdCBtYXNrcyBmb3IgTUlTQzIgcmVnaXN0ZXIgd3JpdGVzLiAqLworI2RlZmluZSBXUk1JU0MyX1dEQ0xFQVIJCTB4ODAwMAkvKiAgUmVzZXQgd2F0Y2hkb2cgdGltZXIgdG8gemVyby4gKi8KKyNkZWZpbmUgV1JNSVNDMl9DSEFSR0VfRU5BQkxFCTB4NDAwMAkvKiAgZW5hYiBiYXR0ZXJ5IHRyaWNrbGUgY2hhcmdpbmcuICovCisKKy8qICBCaXQgbWFza3MgZm9yIE1JU0MyIHJlZ2lzdGVyIHRoYXQgYXJlIHRoZSBzYW1lIGZvciByZWFkcyBhbmQgd3JpdGVzLiAqLworI2RlZmluZSBNSVNDMl9CQVRUX0VOQUJMRQkweDAwMDgJLyogIEJhY2t1cCBiYXR0ZXJ5IGVuYWJsZS4gKi8KKyNkZWZpbmUgTUlTQzJfV0RFTkFCTEUJCTB4MDAwNAkvKiAgV2F0Y2hkb2cgdGltZXIgZW5hYmxlLiAqLworI2RlZmluZSBNSVNDMl9XRFBFUklPRF9NQVNLCTB4MDAwMwkvKiAgV2F0Y2hkb2cgaW50ZXJ2YWwgKi8KKwkJCQkJCS8qICBzZWxlY3QgbWFzay4gKi8KKworLyogIEJpdCBtYXNrcyBmb3IgQUNPTjEgcmVnaXN0ZXIuICovCisjZGVmaW5lIEEyX1JVTgkJCTB4NDAwMDAwMDAJLyogIFJ1biBBMiBiYXNlZCBvbiBUU0wyLiAqLworI2RlZmluZSBBMV9SVU4JCQkweDIwMDAwMDAwCS8qICBSdW4gQTEgYmFzZWQgb24gVFNMMS4gKi8KKyNkZWZpbmUgQTFfU1dBUAkJCTB4MDAyMDAwMDAJLyogIFVzZSBiaWctZW5kaWFuIGZvciBBMS4gKi8KKyNkZWZpbmUgQTJfU1dBUAkJCTB4MDAxMDAwMDAJLyogIFVzZSBiaWctZW5kaWFuIGZvciBBMi4gKi8KKyNkZWZpbmUgV1NfTU9ERVMJCTB4MDAwMTk5OTkJLyogIFdTMCA9IFRTTDEgdHJpZ2dlciAqLworCQkJCQkJLyogIGlucHV0LCBXUzEtV1M0ID0gKi8KKwkJCQkJCS8qICBDUyogb3V0cHV0cy4gKi8KKworI2lmIFBMQVRGT1JNID09IElOVEVMCQkvKiBCYXNlIEFDT04xIGNvbmZpZzogYWx3YXlzIHJ1biBBMSBiYXNlZAorCQkJCSAqIG9uIFRTTDEuICovCisjZGVmaW5lIEFDT04xX0JBU0UJCShXU19NT0RFUyB8IEExX1JVTikKICNlbGlmIFBMQVRGT1JNID09IE1PVE9ST0xBCi0jZGVmaW5lIEFDT04xX0JBU0UJCSggV1NfTU9ERVMgfCBBMV9SVU4gfCBBMV9TV0FQIHwgQTJfU1dBUCApCisjZGVmaW5lIEFDT04xX0JBU0UJCShXU19NT0RFUyB8IEExX1JVTiB8IEExX1NXQVAgfCBBMl9TV0FQKQogI2VuZGlmCiAKLSNkZWZpbmUgQUNPTjFfQURDU1RBUlQJCUFDT04xX0JBU0UJLy8gU3RhcnQgQURDOiBydW4gQTEKLQkJCQkJCS8vIGJhc2VkIG9uIFRTTDEuCi0jZGVmaW5lIEFDT04xX0RBQ1NUQVJUCQkoIEFDT04xX0JBU0UgfCBBMl9SVU4gKQkvLyBTdGFydAotCQkJCQkJCS8vIHRyYW5zbWl0IHRvCi0JCQkJCQkJLy8gREFDOiBydW4gQTIKLQkJCQkJCQkvLyBiYXNlZCBvbgotCQkJCQkJCS8vIFRTTDIuCi0jZGVmaW5lIEFDT04xX0RBQ1NUT1AJCUFDT04xX0JBU0UJLy8gSGFsdCBBMi4KKyNkZWZpbmUgQUNPTjFfQURDU1RBUlQJCUFDT04xX0JBU0UJLyogU3RhcnQgQURDOiBydW4gQTEKKwkJCQkJCSAqICBiYXNlZCBvbiBUU0wxLiAqLworI2RlZmluZSBBQ09OMV9EQUNTVEFSVAkJKEFDT04xX0JBU0UgfCBBMl9SVU4pCisvKiBTdGFydCB0cmFuc21pdCB0byBEQUM6IHJ1biBBMiBiYXNlZCBvbiBUU0wyLiAqLworI2RlZmluZSBBQ09OMV9EQUNTVE9QCQlBQ09OMV9CQVNFCS8qICBIYWx0IEEyLiAqLwogCi0vLyBCaXQgbWFza3MgZm9yIEFDT04yIHJlZ2lzdGVyLgotI2RlZmluZSBBMV9DTEtTUkNfQkNMSzEJCTB4MDAwMDAwMDAJLy8gQTEgYml0IHJhdGUgPSBCQ0xLMSAoQURDKS4KLSNkZWZpbmUgQTJfQ0xLU1JDX1gxCQkweDAwODAwMDAwCS8vIEEyIGJpdCByYXRlID0gQUNMSy8xIChEQUNzKS4KLSNkZWZpbmUgQTJfQ0xLU1JDX1gyCQkweDAwQzAwMDAwCS8vIEEyIGJpdCByYXRlID0gQUNMSy8yIChEQUNzKS4KLSNkZWZpbmUgQTJfQ0xLU1JDX1g0CQkweDAxNDAwMDAwCS8vIEEyIGJpdCByYXRlID0gQUNMSy80IChEQUNzKS4KLSNkZWZpbmUgSU5WRVJUX0JDTEsyCQkweDAwMTAwMDAwCS8vIEludmVydCBCQ0xLMiAoREFDcykuCi0jZGVmaW5lIEJDTEsyX09FCQkweDAwMDQwMDAwCS8vIGVuYWIgQkNMSzIgKERBQ3MpLgotI2RlZmluZSBBQ09OMl9YT1JNQVNLCQkweDAwMEMwMDAwCS8vIFhPUiBtYXNrIGZvciBBQ09OMgotCQkJCQkJLy8gYWN0aXZlLWxvdyBiaXRzLgorLyogIEJpdCBtYXNrcyBmb3IgQUNPTjIgcmVnaXN0ZXIuICovCisjZGVmaW5lIEExX0NMS1NSQ19CQ0xLMQkJMHgwMDAwMDAwMAkvKiAgQTEgYml0IHJhdGUgPSBCQ0xLMSAoQURDKS4gKi8KKyNkZWZpbmUgQTJfQ0xLU1JDX1gxCQkweDAwODAwMDAwCS8qICBBMiBiaXQgcmF0ZSA9IEFDTEsvMSAoREFDcykuICovCisjZGVmaW5lIEEyX0NMS1NSQ19YMgkJMHgwMEMwMDAwMAkvKiAgQTIgYml0IHJhdGUgPSBBQ0xLLzIgKERBQ3MpLiAqLworI2RlZmluZSBBMl9DTEtTUkNfWDQJCTB4MDE0MDAwMDAJLyogIEEyIGJpdCByYXRlID0gQUNMSy80IChEQUNzKS4gKi8KKyNkZWZpbmUgSU5WRVJUX0JDTEsyCQkweDAwMTAwMDAwCS8qICBJbnZlcnQgQkNMSzIgKERBQ3MpLiAqLworI2RlZmluZSBCQ0xLMl9PRQkJMHgwMDA0MDAwMAkvKiAgZW5hYiBCQ0xLMiAoREFDcykuICovCisjZGVmaW5lIEFDT04yX1hPUk1BU0sJCTB4MDAwQzAwMDAJLyogIFhPUiBtYXNrIGZvciBBQ09OMiAqLworCQkJCQkJLyogIGFjdGl2ZS1sb3cgYml0cy4gKi8KIAotI2RlZmluZSBBQ09OMl9JTklUCQkoIEFDT04yX1hPUk1BU0sgXiAoIEExX0NMS1NSQ19CQ0xLMSB8IEEyX0NMS1NSQ19YMiB8IElOVkVSVF9CQ0xLMiB8IEJDTEsyX09FICkgKQorI2RlZmluZSBBQ09OMl9JTklUCQkoQUNPTjJfWE9STUFTSyBeIChBMV9DTEtTUkNfQkNMSzEgfCBBMl9DTEtTUkNfWDIgfCBJTlZFUlRfQkNMSzIgfCBCQ0xLMl9PRSkpCiAKLS8vIEJpdCBtYXNrcyBmb3IgdGltZXNsb3QgcmVjb3Jkcy4KLSNkZWZpbmUgV1MxCQkgICAgIAkweDQwMDAwMDAwCS8vIFdTIG91dHB1dCB0byBhc3NlcnQuCisvKiAgQml0IG1hc2tzIGZvciB0aW1lc2xvdCByZWNvcmRzLiAqLworI2RlZmluZSBXUzEJCSAgICAgCTB4NDAwMDAwMDAJLyogIFdTIG91dHB1dCB0byBhc3NlcnQuICovCiAjZGVmaW5lIFdTMgkJICAgICAJMHgyMDAwMDAwMAogI2RlZmluZSBXUzMJCSAgICAgCTB4MTAwMDAwMDAKICNkZWZpbmUgV1M0CQkgICAgIAkweDA4MDAwMDAwCi0jZGVmaW5lIFJTRDEJCQkweDAxMDAwMDAwCS8vIFNoaWZ0IEExIGRhdGEgaW4gb24gU0QxLgotI2RlZmluZSBTRFdfQTEJCQkweDAwODAwMDAwCS8vIFN0b3JlIHJjdidkIGNoYXIgYXQKLQkJCQkJCS8vIG5leHQgY2hhciBzbG90IG9mCi0JCQkJCQkvLyBEV09SRDEgYnVmZmVyLgotI2RlZmluZSBTSUJfQTEJCQkweDAwNDAwMDAwCS8vIFN0b3JlIHJjdidkIGNoYXIgYXQKLQkJCQkJCS8vIG5leHQgY2hhciBzbG90IG9mCi0JCQkJCQkvLyBGQjEgYnVmZmVyLgotI2RlZmluZSBTRl9BMQkJCTB4MDAyMDAwMDAJLy8gV3JpdGUgdW5zaWduZWQgbG9uZwotCQkJCQkJLy8gYnVmZmVyIHRvIGlucHV0Ci0JCQkJCQkvLyBGSUZPLgorI2RlZmluZSBSU0QxCQkJMHgwMTAwMDAwMAkvKiBTaGlmdCBBMSBkYXRhIGluIG9uIFNEMS4gKi8KKyNkZWZpbmUgU0RXX0ExCQkJMHgwMDgwMDAwMAkvKiBTdG9yZSByY3YnZCBjaGFyIGF0IG5leHQKKwkJCQkJCSAqIGNoYXIgc2xvdCBvZiBEV09SRDEgYnVmZmVyLiAqLworI2RlZmluZSBTSUJfQTEJCQkweDAwNDAwMDAwCS8qIFN0b3JlIHJjdidkIGNoYXIgYXQgbmV4dAorCQkJCQkJICogY2hhciBzbG90IG9mIEZCMSBidWZmZXIuICovCisjZGVmaW5lIFNGX0ExCQkJMHgwMDIwMDAwMAkvKiBXcml0ZSB1bnNpZ25lZCBsb25nCisJCQkJCQkgKiBidWZmZXIgdG8gaW5wdXQgRklGTy4gKi8KIAotLy9TZWxlY3QgcGFyYWxsZWwtdG8tc2VyaWFsIGNvbnZlcnRlcidzIGRhdGEgc291cmNlOgotI2RlZmluZSBYRklGT18wCQkJMHgwMDAwMDAwMAkvLyAgIERhdGEgZmlmbyBieXRlIDAuCi0jZGVmaW5lIFhGSUZPXzEJCQkweDAwMDAwMDEwCS8vICAgRGF0YSBmaWZvIGJ5dGUgMS4KLSNkZWZpbmUgWEZJRk9fMgkJCTB4MDAwMDAwMjAJLy8gICBEYXRhIGZpZm8gYnl0ZSAyLgotI2RlZmluZSBYRklGT18zCQkJMHgwMDAwMDAzMAkvLyAgIERhdGEgZmlmbyBieXRlIDMuCi0jZGVmaW5lIFhGQjAJCQkweDAwMDAwMDQwCS8vICAgRkJfQlVGRkVSIGJ5dGUgMC4KLSNkZWZpbmUgWEZCMQkJCTB4MDAwMDAwNTAJLy8gICBGQl9CVUZGRVIgYnl0ZSAxLgotI2RlZmluZSBYRkIyCQkJMHgwMDAwMDA2MAkvLyAgIEZCX0JVRkZFUiBieXRlIDIuCi0jZGVmaW5lIFhGQjMJCQkweDAwMDAwMDcwCS8vICAgRkJfQlVGRkVSIGJ5dGUgMy4KLSNkZWZpbmUgU0lCX0EyCQkJMHgwMDAwMDIwMAkvLyBTdG9yZSBuZXh0IGR3b3JkCi0JCQkJCQkvLyBmcm9tIEEyJ3MgaW5wdXQKLQkJCQkJCS8vIHNoaWZ0ZXIgdG8gRkIyCi0JCQkJCQkvLyBidWZmZXIuCi0jZGVmaW5lIFNGX0EyCQkJMHgwMDAwMDEwMAkvLyBTdG9yZSBuZXh0IGR3b3JkCi0JCQkJCQkvLyBmcm9tIEEyJ3MgaW5wdXQKLQkJCQkJCS8vIHNoaWZ0ZXIgdG8gaXRzCi0JCQkJCQkvLyBpbnB1dCBmaWZvLgotI2RlZmluZSBMRl9BMgkJCTB4MDAwMDAwODAJLy8gTG9hZCBuZXh0IGR3b3JkCi0JCQkJCQkvLyBmcm9tIEEyJ3Mgb3V0cHV0Ci0JCQkJCQkvLyBmaWZvIGludG8gaXRzCi0JCQkJCQkvLyBvdXRwdXQgZHdvcmQKLQkJCQkJCS8vIGJ1ZmZlci4KLSNkZWZpbmUgWFNEMgkJCTB4MDAwMDAwMDgJLy8gU2hpZnQgZGF0YSBvdXQgb24gU0QyLgotI2RlZmluZSBSU0QzCQkJMHgwMDAwMTgwMAkvLyBTaGlmdCBkYXRhIGluIG9uIFNEMy4KLSNkZWZpbmUgUlNEMgkJCTB4MDAwMDEwMDAJLy8gU2hpZnQgZGF0YSBpbiBvbiBTRDIuCi0jZGVmaW5lIExPV19BMgkJCTB4MDAwMDAwMDIJLy8gRHJpdmUgbGFzdCBTRCBsb3cKLQkJCQkJCS8vIGZvciA3IGNsa3MsIHRoZW4KLQkJCQkJCS8vIHRyaS1zdGF0ZS4KLSNkZWZpbmUgRU9TCQkgICAgIAkweDAwMDAwMDAxCS8vIEVuZCBvZiBzdXBlcmZyYW1lLgorLyogU2VsZWN0IHBhcmFsbGVsLXRvLXNlcmlhbCBjb252ZXJ0ZXIncyBkYXRhIHNvdXJjZTogKi8KKyNkZWZpbmUgWEZJRk9fMAkJCTB4MDAwMDAwMDAJLyogICAgRGF0YSBmaWZvIGJ5dGUgMC4gKi8KKyNkZWZpbmUgWEZJRk9fMQkJCTB4MDAwMDAwMTAJLyogICAgRGF0YSBmaWZvIGJ5dGUgMS4gKi8KKyNkZWZpbmUgWEZJRk9fMgkJCTB4MDAwMDAwMjAJLyogICAgRGF0YSBmaWZvIGJ5dGUgMi4gKi8KKyNkZWZpbmUgWEZJRk9fMwkJCTB4MDAwMDAwMzAJLyogICAgRGF0YSBmaWZvIGJ5dGUgMy4gKi8KKyNkZWZpbmUgWEZCMAkJCTB4MDAwMDAwNDAJLyogICAgRkJfQlVGRkVSIGJ5dGUgMC4gKi8KKyNkZWZpbmUgWEZCMQkJCTB4MDAwMDAwNTAJLyogICAgRkJfQlVGRkVSIGJ5dGUgMS4gKi8KKyNkZWZpbmUgWEZCMgkJCTB4MDAwMDAwNjAJLyogICAgRkJfQlVGRkVSIGJ5dGUgMi4gKi8KKyNkZWZpbmUgWEZCMwkJCTB4MDAwMDAwNzAJLyogICAgRkJfQlVGRkVSIGJ5dGUgMy4gKi8KKyNkZWZpbmUgU0lCX0EyCQkJMHgwMDAwMDIwMAkvKiBTdG9yZSBuZXh0IGR3b3JkIGZyb20gQTIncworCQkJCQkJICogaW5wdXQgc2hpZnRlciB0byBGQjIgYnVmZmVyLiAqLworI2RlZmluZSBTRl9BMgkJCTB4MDAwMDAxMDAJLyogU3RvcmUgbmV4dCBkd29yZCBmcm9tIEEyJ3MKKwkJCQkJCSAqIGlucHV0IHNoaWZ0ZXIgdG8gaXRzIGlucHV0CisJCQkJCQkgKiBmaWZvLiAqLworI2RlZmluZSBMRl9BMgkJCTB4MDAwMDAwODAJLyogTG9hZCBuZXh0IGR3b3JkIGZyb20gQTIncworCQkJCQkJICogb3V0cHV0IGZpZm8gaW50byBpdHMKKwkJCQkJCSAqIG91dHB1dCBkd29yZCBidWZmZXIuICovCisjZGVmaW5lIFhTRDIJCQkweDAwMDAwMDA4CS8qICBTaGlmdCBkYXRhIG91dCBvbiBTRDIuICovCisjZGVmaW5lIFJTRDMJCQkweDAwMDAxODAwCS8qICBTaGlmdCBkYXRhIGluIG9uIFNEMy4gKi8KKyNkZWZpbmUgUlNEMgkJCTB4MDAwMDEwMDAJLyogIFNoaWZ0IGRhdGEgaW4gb24gU0QyLiAqLworI2RlZmluZSBMT1dfQTIJCQkweDAwMDAwMDAyCS8qICBEcml2ZSBsYXN0IFNEIGxvdyAqLworCQkJCQkJLyogIGZvciA3IGNsa3MsIHRoZW4gKi8KKwkJCQkJCS8qICB0cmktc3RhdGUuICovCisjZGVmaW5lIEVPUwkJICAgICAJMHgwMDAwMDAwMQkvKiAgRW5kIG9mIHN1cGVyZnJhbWUuICovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotLy8gSTJDIGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzLgotI2RlZmluZSBJMkNfQ0xLU0VMCQkweDA0MDAJLy8gSTJDIGJpdCByYXRlID0KLQkJCQkJCS8vIFBDSWNsay80ODAgPSA2OC43NQotCQkJCQkJLy8gS0h6LgotI2RlZmluZSBJMkNfQklUUkFURQkJNjguNzUJLy8gSTJDIGJ1cyBkYXRhIGJpdAotCQkJCQkJLy8gcmF0ZSAoZGV0ZXJtaW5lZCBieQotCQkJCQkJLy8gSTJDX0NMS1NFTCkgaW4gS0h6LgotI2RlZmluZSBJMkNfV1JUSU1FCQkxNS4wCS8vIFdvcnN0IGNhc2UgdGltZSxpbgotCQkJCQkJLy8gbXNlYywgZm9yIEVFUFJPTQotCQkJCQkJLy8gaW50ZXJuYWwgd3JpdGUgb3AuCisvKiAgSTJDIGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzLiAqLworI2RlZmluZSBJMkNfQ0xLU0VMCQkweDA0MDAKKy8qIEkyQyBiaXQgcmF0ZSA9IFBDSWNsay80ODAgPSA2OC43NSBLSHouICovCiAKLS8vIEkyQyBtYW5pZmVzdCBjb25zdGFudHMuCisjZGVmaW5lIEkyQ19CSVRSQVRFCQk2OC43NQorLyogSTJDIGJ1cyBkYXRhIGJpdCByYXRlIChkZXRlcm1pbmVkIGJ5IEkyQ19DTEtTRUwpIGluIEtIei4gKi8KIAotLy8gTWF4IHJldHJpZXMgdG8gd2FpdCBmb3IgRUVQUk9NIHdyaXRlLgotI2RlZmluZSBJMkNfUkVUUklFUwkJKCBJMkNfV1JUSU1FICogSTJDX0JJVFJBVEUgLyA5LjAgKQotI2RlZmluZSBJMkNfRVJSCQkJMHgwMDAyCS8vIEkyQyBjb250cm9sL3N0YXR1cwotCQkJCQkJLy8gZmxhZyBFUlJPUi4KLSNkZWZpbmUgSTJDX0JVU1kJCTB4MDAwMQkvLyBJMkMgY29udHJvbC9zdGF0dXMKLQkJCQkJCS8vIGZsYWcgQlVTWS4KLSNkZWZpbmUgSTJDX0FCT1JUCQkweDAwODAJLy8gSTJDIHN0YXR1cyBmbGFnIEFCT1JULgotI2RlZmluZSBJMkNfQVRUUlNUQVJUCQkweDMJLy8gSTJDIGF0dHJpYnV0ZSBTVEFSVC4KLSNkZWZpbmUgSTJDX0FUVFJDT05UCQkweDIJLy8gSTJDIGF0dHJpYnV0ZSBDT05ULgotI2RlZmluZSBJMkNfQVRUUlNUT1AJCTB4MQkvLyBJMkMgYXR0cmlidXRlIFNUT1AuCi0jZGVmaW5lIEkyQ19BVFRSTk9QCQkweDAJLy8gSTJDIGF0dHJpYnV0ZSBOT1AuCisjZGVmaW5lIEkyQ19XUlRJTUUJCTE1LjAKKy8qIFdvcnN0IGNhc2UgdGltZSwgaW4gbXNlYywgZm9yIEVFUFJPTSBpbnRlcm5hbCB3cml0ZSBvcC4gKi8KIAotLy8gSTJDIHJlYWQgY29tbWFuZCAgfCBFRVBST00gYWRkcmVzcy4KLSNkZWZpbmUgSTJDUgkJCSggZGV2cHJpdi0+STJDQWRycyB8IDEgKQorLyogIEkyQyBtYW5pZmVzdCBjb25zdGFudHMuICovCiAKLS8vIEkyQyB3cml0ZSBjb21tYW5kIHwgRUVQUk9NIGFkZHJlc3MuCi0jZGVmaW5lIEkyQ1cJCQkoIGRldnByaXYtPkkyQ0FkcnMgKQorLyogIE1heCByZXRyaWVzIHRvIHdhaXQgZm9yIEVFUFJPTSB3cml0ZS4gKi8KKyNkZWZpbmUgSTJDX1JFVFJJRVMJCShJMkNfV1JUSU1FICogSTJDX0JJVFJBVEUgLyA5LjApCisjZGVmaW5lIEkyQ19FUlIJCQkweDAwMDIJLyogIEkyQyBjb250cm9sL3N0YXR1cyAqLworCQkJCQkJLyogIGZsYWcgRVJST1IuICovCisjZGVmaW5lIEkyQ19CVVNZCQkweDAwMDEJLyogIEkyQyBjb250cm9sL3N0YXR1cyAqLworCQkJCQkJLyogIGZsYWcgQlVTWS4gKi8KKyNkZWZpbmUgSTJDX0FCT1JUCQkweDAwODAJLyogIEkyQyBzdGF0dXMgZmxhZyBBQk9SVC4gKi8KKyNkZWZpbmUgSTJDX0FUVFJTVEFSVAkJMHgzCS8qICBJMkMgYXR0cmlidXRlIFNUQVJULiAqLworI2RlZmluZSBJMkNfQVRUUkNPTlQJCTB4MgkvKiAgSTJDIGF0dHJpYnV0ZSBDT05ULiAqLworI2RlZmluZSBJMkNfQVRUUlNUT1AJCTB4MQkvKiAgSTJDIGF0dHJpYnV0ZSBTVE9QLiAqLworI2RlZmluZSBJMkNfQVRUUk5PUAkJMHgwCS8qICBJMkMgYXR0cmlidXRlIE5PUC4gKi8KIAotLy8gQ29kZSBtYWNyb3MgdXNlZCBmb3IgY29uc3RydWN0aW5nIEkyQyBjb21tYW5kIGJ5dGVzLgotI2RlZmluZSBJMkNfQjIoQVRUUixWQUwpCSggKCAoQVRUUikgPDwgNiApIHwgKCAoVkFMKSA8PCAyNCApICkKLSNkZWZpbmUgSTJDX0IxKEFUVFIsVkFMKQkoICggKEFUVFIpIDw8IDQgKSB8ICggKFZBTCkgPDwgMTYgKSApCi0jZGVmaW5lIEkyQ19CMChBVFRSLFZBTCkJKCAoIChBVFRSKSA8PCAyICkgfCAoIChWQUwpIDw8ICA4ICkgKQorLyogIEkyQyByZWFkIGNvbW1hbmQgIHwgRUVQUk9NIGFkZHJlc3MuICovCisjZGVmaW5lIEkyQ1IJCQkoZGV2cHJpdi0+STJDQWRycyB8IDEpCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vL29sZGVzdAotI2RlZmluZSBQX0RFQklDRkdxICAgICAgICAgICAgICAweDAwN0MJLy8gREVCSSBjb25maWd1cmF0aW9uLgotI2RlZmluZSBQX0RFQklDTURxICAgICAgICAgICAgICAweDAwODAJLy8gREVCSSBjb21tYW5kLgotI2RlZmluZSBQX0RFQklQQUdFcSAgICAgICAgICAgICAweDAwODQJLy8gREVCSSBwYWdlLgotI2RlZmluZSBQX0RFQklBRHEgICAgICAgICAgICAgICAweDAwODgJLy8gREVCSSB0YXJnZXQgYWRkcmVzcy4KKy8qICBJMkMgd3JpdGUgY29tbWFuZCB8IEVFUFJPTSBhZGRyZXNzLiAqLworI2RlZmluZSBJMkNXCQkJKGRldnByaXYtPkkyQ0FkcnMpCiAKLSNkZWZpbmUgREVCSV9DRkdfVE9RCQkweDAzQzAwMDAwCS8vIHRpbWVvdXQgKDE1IFBDSSBjeWNsZXMpCi0jZGVmaW5lIERFQklfQ0ZHX0ZBU1RRCQkweDEwMDAwMDAwCS8vIGZhc3QgbW9kZSBlbmFibGUKLSNkZWZpbmUgREVCSV9DRkdfMTZRCQkweDAwMDgwMDAwCS8vIDE2LWJpdCBhY2Nlc3MgZW5hYmxlCi0jZGVmaW5lIERFQklfQ0ZHX0lOQ1EJCTB4MDAwNDAwMDAJLy8gZW5hYmxlIGFkZHJlc3MgaW5jcmVtZW50Ci0jZGVmaW5lIERFQklfQ0ZHX1RJTUVST0ZGUQkweDAwMDEwMDAwCS8vIGRpc2FibGUgdGltZXIKLSNkZWZpbmUgREVCSV9DTURfUkRRCQkweDAwMDUwMDAwCS8vIHJlYWQgaW1tZWRpYXRlIDIgYnl0ZXMKLSNkZWZpbmUgREVCSV9DTURfV1JRCQkweDAwMDQwMDAwCS8vIHdyaXRlIGltbWVkaWF0ZSAyIGJ5dGVzCi0jZGVmaW5lIERFQklfUEFHRV9ESVNBQkxFUQkweDAwMDAwMDAwCS8vIHBhZ2luZyBkaXNhYmxlCisvKiAgQ29kZSBtYWNyb3MgdXNlZCBmb3IgY29uc3RydWN0aW5nIEkyQyBjb21tYW5kIGJ5dGVzLiAqLworI2RlZmluZSBJMkNfQjIoQVRUUiwgVkFMKQkoKChBVFRSKSA8PCA2KSB8ICgoVkFMKSA8PCAyNCkpCisjZGVmaW5lIEkyQ19CMShBVFRSLCBWQUwpCSgoKEFUVFIpIDw8IDQpIHwgKChWQUwpIDw8IDE2KSkKKyNkZWZpbmUgSTJDX0IwKEFUVFIsIFZBTCkJKCgoQVRUUikgPDwgMikgfCAoKFZBTCkgPDwgIDgpKQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBERUJJIGNvbW1hbmQgY29uc3RhbnRzLgotI2RlZmluZSBERUJJX0NNRF9TSVpFMTYJCSggMiA8PCAxNyApCS8vIFRyYW5zZmVyIHNpemUgaXMKLQkJCQkJCS8vIGFsd2F5cyAyIGJ5dGVzLgotI2RlZmluZSBERUJJX0NNRF9SRUFECQkweDAwMDEwMDAwCS8vIFJlYWQgb3BlcmF0aW9uLgotI2RlZmluZSBERUJJX0NNRF9XUklURQkJMHgwMDAwMDAwMAkvLyBXcml0ZSBvcGVyYXRpb24uCisvKiBvbGRlc3QgKi8KKyNkZWZpbmUgUF9ERUJJQ0ZHcSAgICAgICAgICAgICAgMHgwMDdDCS8qICBERUJJIGNvbmZpZ3VyYXRpb24uICovCisjZGVmaW5lIFBfREVCSUNNRHEgICAgICAgICAgICAgIDB4MDA4MAkvKiAgREVCSSBjb21tYW5kLiAqLworI2RlZmluZSBQX0RFQklQQUdFcSAgICAgICAgICAgICAweDAwODQJLyogIERFQkkgcGFnZS4gKi8KKyNkZWZpbmUgUF9ERUJJQURxICAgICAgICAgICAgICAgMHgwMDg4CS8qICBERUJJIHRhcmdldCBhZGRyZXNzLiAqLwogCi0vLyBSZWFkIGltbWVkaWF0ZSAyIGJ5dGVzLgotI2RlZmluZSBERUJJX0NNRF9SRFdPUkQJCSggREVCSV9DTURfUkVBRCAgfCBERUJJX0NNRF9TSVpFMTYgKQorI2RlZmluZSBERUJJX0NGR19UT1EJCTB4MDNDMDAwMDAJLyogIHRpbWVvdXQgKDE1IFBDSSBjeWNsZXMpICovCisjZGVmaW5lIERFQklfQ0ZHX0ZBU1RRCQkweDEwMDAwMDAwCS8qICBmYXN0IG1vZGUgZW5hYmxlICovCisjZGVmaW5lIERFQklfQ0ZHXzE2UQkJMHgwMDA4MDAwMAkvKiAgMTYtYml0IGFjY2VzcyBlbmFibGUgKi8KKyNkZWZpbmUgREVCSV9DRkdfSU5DUQkJMHgwMDA0MDAwMAkvKiAgZW5hYmxlIGFkZHJlc3MgaW5jcmVtZW50ICovCisjZGVmaW5lIERFQklfQ0ZHX1RJTUVST0ZGUQkweDAwMDEwMDAwCS8qICBkaXNhYmxlIHRpbWVyICovCisjZGVmaW5lIERFQklfQ01EX1JEUQkJMHgwMDA1MDAwMAkvKiAgcmVhZCBpbW1lZGlhdGUgMiBieXRlcyAqLworI2RlZmluZSBERUJJX0NNRF9XUlEJCTB4MDAwNDAwMDAJLyogIHdyaXRlIGltbWVkaWF0ZSAyIGJ5dGVzICovCisjZGVmaW5lIERFQklfUEFHRV9ESVNBQkxFUQkweDAwMDAwMDAwCS8qICBwYWdpbmcgZGlzYWJsZSAqLwogCi0vLyBXcml0ZSBpbW1lZGlhdGUgMiBieXRlcy4KLSNkZWZpbmUgREVCSV9DTURfV1JXT1JECQkoIERFQklfQ01EX1dSSVRFIHwgREVCSV9DTURfU0laRTE2ICkKKy8qICBERUJJIGNvbW1hbmQgY29uc3RhbnRzLiAqLworI2RlZmluZSBERUJJX0NNRF9TSVpFMTYJCSgyIDw8IDE3KQkvKiAgVHJhbnNmZXIgc2l6ZSBpcyAqLworCQkJCQkJLyogIGFsd2F5cyAyIGJ5dGVzLiAqLworI2RlZmluZSBERUJJX0NNRF9SRUFECQkweDAwMDEwMDAwCS8qICBSZWFkIG9wZXJhdGlvbi4gKi8KKyNkZWZpbmUgREVCSV9DTURfV1JJVEUJCTB4MDAwMDAwMDAJLyogIFdyaXRlIG9wZXJhdGlvbi4gKi8KIAotLy8gREVCSSBjb25maWd1cmF0aW9uIGNvbnN0YW50cy4KLSNkZWZpbmUgREVCSV9DRkdfWElSUV9FTgkweDgwMDAwMDAwCS8vIGVuYWIgZXh0ZXJuYWwKLQkJCQkJCS8vIGludGVycnVwdCBvbiBHUElPMy4KLSNkZWZpbmUgREVCSV9DRkdfWFJFU1VNRQkweDQwMDAwMDAwCS8vIFJlc3VtZSBibG9jawotCQkJCQkJLy8gdHJhbnNmZXIgd2hlbiBYSVJRCi0JCQkJCQkvLyBkZWFzc2VydGVkLgotI2RlZmluZSBERUJJX0NGR19GQVNUCQkweDEwMDAwMDAwCS8vIEZhc3QgbW9kZSBlbmFibGUuCisvKiAgUmVhZCBpbW1lZGlhdGUgMiBieXRlcy4gKi8KKyNkZWZpbmUgREVCSV9DTURfUkRXT1JECQkoREVCSV9DTURfUkVBRCAgfCBERUJJX0NNRF9TSVpFMTYpCiAKLS8vIDQtYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIERFQkkgdGltZW91dCB2YWx1ZSBpbiBQQ0kgY2xvY2sgY3ljbGVzOgotI2RlZmluZSBERUJJX0NGR19UT1VUX0JJVAkyMgkvLyAgIEZpbmlzaCBERUJJIGN5Y2xlIGFmdGVyCi0JCQkJCS8vICAgdGhpcyBtYW55IGNsb2Nrcy4KKy8qICBXcml0ZSBpbW1lZGlhdGUgMiBieXRlcy4gKi8KKyNkZWZpbmUgREVCSV9DTURfV1JXT1JECQkoREVCSV9DTURfV1JJVEUgfCBERUJJX0NNRF9TSVpFMTYpCiAKLS8vIDItYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIEVuZGlhbiBieXRlIGxhbmUgc3RlZXJpbmc6Ci0jZGVmaW5lIERFQklfQ0ZHX1NXQVBfTk9ORQkweDAwMDAwMDAwCS8vICAgU3RyYWlnaHQgLSBkb24ndAotCQkJCQkJLy8gICBzd2FwIGFueSBieXRlcwotCQkJCQkJLy8gICAoSW50ZWwpLgotI2RlZmluZSBERUJJX0NGR19TV0FQXzIJCTB4MDAxMDAwMDAJLy8gICAyLWJ5dGUgc3dhcCAoTW90b3JvbGEpLgotI2RlZmluZSBERUJJX0NGR19TV0FQXzQJCTB4MDAyMDAwMDAJLy8gICA0LWJ5dGUgc3dhcC4KLSNkZWZpbmUgREVCSV9DRkdfMTYJCTB4MDAwODAwMDAJLy8gU2xhdmUgaXMgYWJsZSB0bwotCQkJCQkJLy8gc2VydmUgMTYtYml0Ci0JCQkJCQkvLyBjeWNsZXMuCisvKiAgREVCSSBjb25maWd1cmF0aW9uIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgREVCSV9DRkdfWElSUV9FTgkweDgwMDAwMDAwCS8qICBlbmFiIGV4dGVybmFsICovCisJCQkJCQkvKiAgaW50ZXJydXB0IG9uIEdQSU8zLiAqLworI2RlZmluZSBERUJJX0NGR19YUkVTVU1FCTB4NDAwMDAwMDAJLyogIFJlc3VtZSBibG9jayAqLworCQkJCQkJLyogIHRyYW5zZmVyIHdoZW4gWElSUSAqLworCQkJCQkJLyogIGRlYXNzZXJ0ZWQuICovCisjZGVmaW5lIERFQklfQ0ZHX0ZBU1QJCTB4MTAwMDAwMDAJLyogIEZhc3QgbW9kZSBlbmFibGUuICovCiAKLSNkZWZpbmUgREVCSV9DRkdfU0xBVkUxNgkweDAwMDgwMDAwCS8vIFNsYXZlIGlzIGFibGUgdG8KLQkJCQkJCS8vIHNlcnZlIDE2LWJpdAotCQkJCQkJLy8gY3ljbGVzLgotI2RlZmluZSBERUJJX0NGR19JTkMJCTB4MDAwNDAwMDAJLy8gZW5hYiBhZGRyZXNzCi0JCQkJCQkvLyBpbmNyZW1lbnQgZm9yIGJsb2NrCi0JCQkJCQkvLyB0cmFuc2ZlcnMuCi0jZGVmaW5lIERFQklfQ0ZHX0lOVEVMCQkweDAwMDIwMDAwCS8vIEludGVsIHN0eWxlIGxvY2FsIGJ1cy4KLSNkZWZpbmUgREVCSV9DRkdfVElNRVJPRkYJMHgwMDAxMDAwMAkvLyBEaXNhYmxlIHRpbWVyLgorLyogIDQtYml0IGZpZWxkIHRoYXQgc3BlY2lmaWVzIERFQkkgdGltZW91dCB2YWx1ZSBpbiBQQ0kgY2xvY2sgY3ljbGVzOiAqLworI2RlZmluZSBERUJJX0NGR19UT1VUX0JJVAkyMgkvKiAgICBGaW5pc2ggREVCSSBjeWNsZSBhZnRlciAqLworCQkJCQkvKiAgICB0aGlzIG1hbnkgY2xvY2tzLiAqLworCisvKiAgMi1iaXQgZmllbGQgdGhhdCBzcGVjaWZpZXMgRW5kaWFuIGJ5dGUgbGFuZSBzdGVlcmluZzogKi8KKyNkZWZpbmUgREVCSV9DRkdfU1dBUF9OT05FCTB4MDAwMDAwMDAJLyogICAgU3RyYWlnaHQgLSBkb24ndCAqLworCQkJCQkJLyogICAgc3dhcCBhbnkgYnl0ZXMgKi8KKwkJCQkJCS8qICAgIChJbnRlbCkuICovCisjZGVmaW5lIERFQklfQ0ZHX1NXQVBfMgkJMHgwMDEwMDAwMAkvKiAgICAyLWJ5dGUgc3dhcCAoTW90b3JvbGEpLiAqLworI2RlZmluZSBERUJJX0NGR19TV0FQXzQJCTB4MDAyMDAwMDAJLyogICAgNC1ieXRlIHN3YXAuICovCisjZGVmaW5lIERFQklfQ0ZHXzE2CQkweDAwMDgwMDAwCS8qICBTbGF2ZSBpcyBhYmxlIHRvICovCisJCQkJCQkvKiAgc2VydmUgMTYtYml0ICovCisJCQkJCQkvKiAgY3ljbGVzLiAqLworCisjZGVmaW5lIERFQklfQ0ZHX1NMQVZFMTYJMHgwMDA4MDAwMAkvKiAgU2xhdmUgaXMgYWJsZSB0byAqLworCQkJCQkJLyogIHNlcnZlIDE2LWJpdCAqLworCQkJCQkJLyogIGN5Y2xlcy4gKi8KKyNkZWZpbmUgREVCSV9DRkdfSU5DCQkweDAwMDQwMDAwCS8qICBlbmFiIGFkZHJlc3MgKi8KKwkJCQkJCS8qICBpbmNyZW1lbnQgZm9yIGJsb2NrICovCisJCQkJCQkvKiAgdHJhbnNmZXJzLiAqLworI2RlZmluZSBERUJJX0NGR19JTlRFTAkJMHgwMDAyMDAwMAkvKiAgSW50ZWwgc3R5bGUgbG9jYWwgYnVzLiAqLworI2RlZmluZSBERUJJX0NGR19USU1FUk9GRgkweDAwMDEwMDAwCS8qICBEaXNhYmxlIHRpbWVyLiAqLwogCiAjaWYgUExBVEZPUk0gPT0gSU5URUwKIAotI2RlZmluZSBERUJJX1RPVVQJCTcJLy8gV2FpdCA3IFBDSSBjbG9ja3MKLQkJCQkJCS8vICgyMTIgbnMpIGJlZm9yZQotCQkJCQkJLy8gcG9sbGluZyBSRFkuCisjZGVmaW5lIERFQklfVE9VVAkJNwkvKiAgV2FpdCA3IFBDSSBjbG9ja3MgKi8KKwkJCQkJCS8qICAoMjEyIG5zKSBiZWZvcmUgKi8KKwkJCQkJCS8qICBwb2xsaW5nIFJEWS4gKi8KIAotLy8gSW50ZWwgYnl0ZSBsYW5lIHN0ZWVyaW5nIChwYXNzIHRocm91Z2ggYWxsIGJ5dGUgbGFuZXMpLgorLyogIEludGVsIGJ5dGUgbGFuZSBzdGVlcmluZyAocGFzcyB0aHJvdWdoIGFsbCBieXRlIGxhbmVzKS4gKi8KICNkZWZpbmUgREVCSV9TV0FQCQlERUJJX0NGR19TV0FQX05PTkUKIAogI2VsaWYgUExBVEZPUk0gPT0gTU9UT1JPTEEKIAotI2RlZmluZSBERUJJX1RPVVQJCTE1CS8vIFdhaXQgMTUgUENJIGNsb2NrcyAoNDU0IG5zKQotCQkJCQkvLyBtYXhpbXVtIGJlZm9yZSB0aW1pbmcgb3V0LgotI2RlZmluZSBERUJJX1NXQVAJCURFQklfQ0ZHX1NXQVBfMgkvLyBNb3Rvcm9sYSBieXRlIGxhbmUgc3RlZXJpbmcuCisjZGVmaW5lIERFQklfVE9VVAkJMTUJLyogIFdhaXQgMTUgUENJIGNsb2NrcyAoNDU0IG5zKSAqLworCQkJCQkvKiAgbWF4aW11bSBiZWZvcmUgdGltaW5nIG91dC4gKi8KKyNkZWZpbmUgREVCSV9TV0FQCQlERUJJX0NGR19TV0FQXzIJLyogIE1vdG9yb2xhIGJ5dGUgbGFuZSBzdGVlcmluZy4gKi8KIAogI2VuZGlmCiAKLS8vIERFQkkgcGFnZSB0YWJsZSBjb25zdGFudHMuCi0jZGVmaW5lIERFQklfUEFHRV9ESVNBQkxFCTB4MDAwMDAwMDAJLy8gUGFnaW5nIGRpc2FibGUuCisvKiAgREVCSSBwYWdlIHRhYmxlIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgREVCSV9QQUdFX0RJU0FCTEUJMHgwMDAwMDAwMAkvKiAgUGFnaW5nIGRpc2FibGUuICovCiAKLS8vLy8vLy8vLy8vLy8vLy8vLy9FWFRSQSBGUk9NIE9USEVSIFNBTlNPUkFZICAqIC5oLy8vLy8vLy8KKy8qICoqKioqKiogRVhUUkEgRlJPTSBPVEhFUiBTQU5TT1JBWSAgKiAuaCAgKioqKioqKiAqLwogCi0vLyBMb2FkU3JjIHZhbHVlczoKLSNkZWZpbmUgTE9BRFNSQ19JTkRYCQkwCS8vIFByZWxvYWQgY29yZSBpbiByZXNwb25zZSB0bwotCQkJCQkvLyBJbmRleC4KLSNkZWZpbmUgTE9BRFNSQ19PVkVSCQkxCS8vIFByZWxvYWQgY29yZSBpbiByZXNwb25zZSB0bwotCQkJCQkvLyBPdmVyZmxvdy4KLSNkZWZpbmUgTE9BRFNSQ0JfT1ZFUkEJCTIJLy8gUHJlbG9hZCBCIGNvcmUgaW4gcmVzcG9uc2UKLQkJCQkJLy8gdG8gQSBPdmVyZmxvdy4KLSNkZWZpbmUgTE9BRFNSQ19OT05FCQkzCS8vIE5ldmVyIHByZWxvYWQgY29yZS4KKy8qICBMb2FkU3JjIHZhbHVlczogKi8KKyNkZWZpbmUgTE9BRFNSQ19JTkRYCQkwCS8qICBQcmVsb2FkIGNvcmUgaW4gcmVzcG9uc2UgdG8gKi8KKwkJCQkJLyogIEluZGV4LiAqLworI2RlZmluZSBMT0FEU1JDX09WRVIJCTEJLyogIFByZWxvYWQgY29yZSBpbiByZXNwb25zZSB0byAqLworCQkJCQkvKiAgT3ZlcmZsb3cuICovCisjZGVmaW5lIExPQURTUkNCX09WRVJBCQkyCS8qICBQcmVsb2FkIEIgY29yZSBpbiByZXNwb25zZSAqLworCQkJCQkvKiAgdG8gQSBPdmVyZmxvdy4gKi8KKyNkZWZpbmUgTE9BRFNSQ19OT05FCQkzCS8qICBOZXZlciBwcmVsb2FkIGNvcmUuICovCiAKLS8vIEludFNyYyB2YWx1ZXM6Ci0jZGVmaW5lIElOVFNSQ19OT05FIAkJMAkvLyBJbnRlcnJ1cHRzIGRpc2FibGVkLgotI2RlZmluZSBJTlRTUkNfT1ZFUiAJCTEJLy8gSW50ZXJydXB0IG9uIE92ZXJmbG93LgotI2RlZmluZSBJTlRTUkNfSU5EWCAJCTIJLy8gSW50ZXJydXB0IG9uIEluZGV4LgotI2RlZmluZSBJTlRTUkNfQk9USCAJCTMJLy8gSW50ZXJydXB0IG9uIEluZGV4IG9yIE92ZXJmbG93LgorLyogIEludFNyYyB2YWx1ZXM6ICovCisjZGVmaW5lIElOVFNSQ19OT05FIAkJMAkvKiAgSW50ZXJydXB0cyBkaXNhYmxlZC4gKi8KKyNkZWZpbmUgSU5UU1JDX09WRVIgCQkxCS8qICBJbnRlcnJ1cHQgb24gT3ZlcmZsb3cuICovCisjZGVmaW5lIElOVFNSQ19JTkRYIAkJMgkvKiAgSW50ZXJydXB0IG9uIEluZGV4LiAqLworI2RlZmluZSBJTlRTUkNfQk9USCAJCTMJLyogIEludGVycnVwdCBvbiBJbmRleCBvciBPdmVyZmxvdy4gKi8KIAotLy8gTGF0Y2hTcmMgdmFsdWVzOgotI2RlZmluZSBMQVRDSFNSQ19BQl9SRUFECTAJLy8gTGF0Y2ggb24gcmVhZC4KLSNkZWZpbmUgTEFUQ0hTUkNfQV9JTkRYQQkxCS8vIExhdGNoIEEgb24gQSBJbmRleC4KLSNkZWZpbmUgTEFUQ0hTUkNfQl9JTkRYQgkyCS8vIExhdGNoIEIgb24gQiBJbmRleC4KLSNkZWZpbmUgTEFUQ0hTUkNfQl9PVkVSQQkzCS8vIExhdGNoIEIgb24gQSBPdmVyZmxvdy4KKy8qICBMYXRjaFNyYyB2YWx1ZXM6ICovCisjZGVmaW5lIExBVENIU1JDX0FCX1JFQUQJMAkvKiAgTGF0Y2ggb24gcmVhZC4gKi8KKyNkZWZpbmUgTEFUQ0hTUkNfQV9JTkRYQQkxCS8qICBMYXRjaCBBIG9uIEEgSW5kZXguICovCisjZGVmaW5lIExBVENIU1JDX0JfSU5EWEIJMgkvKiAgTGF0Y2ggQiBvbiBCIEluZGV4LiAqLworI2RlZmluZSBMQVRDSFNSQ19CX09WRVJBCTMJLyogIExhdGNoIEIgb24gQSBPdmVyZmxvdy4gKi8KIAotLy8gSW5keFNyYyB2YWx1ZXM6Ci0jZGVmaW5lIElORFhTUkNfSEFSRAkJMAkvLyBIYXJkd2FyZSBvciBzb2Z0d2FyZSBpbmRleC4KLSNkZWZpbmUgSU5EWFNSQ19TT0ZUCQkxCS8vIFNvZnR3YXJlIGluZGV4IG9ubHkuCisvKiAgSW5keFNyYyB2YWx1ZXM6ICovCisjZGVmaW5lIElORFhTUkNfSEFSRAkJMAkvKiAgSGFyZHdhcmUgb3Igc29mdHdhcmUgaW5kZXguICovCisjZGVmaW5lIElORFhTUkNfU09GVAkJMQkvKiAgU29mdHdhcmUgaW5kZXggb25seS4gKi8KIAotLy8gSW5keFBvbCB2YWx1ZXM6Ci0jZGVmaW5lIElORFhQT0xfUE9TIAkJMAkvLyBJbmRleCBpbnB1dCBpcyBhY3RpdmUgaGlnaC4KLSNkZWZpbmUgSU5EWFBPTF9ORUcgCQkxCS8vIEluZGV4IGlucHV0IGlzIGFjdGl2ZSBsb3cuCisvKiAgSW5keFBvbCB2YWx1ZXM6ICovCisjZGVmaW5lIElORFhQT0xfUE9TIAkJMAkvKiAgSW5kZXggaW5wdXQgaXMgYWN0aXZlIGhpZ2guICovCisjZGVmaW5lIElORFhQT0xfTkVHIAkJMQkvKiAgSW5kZXggaW5wdXQgaXMgYWN0aXZlIGxvdy4gKi8KIAotLy8gQ2xrU3JjIHZhbHVlczoKLSNkZWZpbmUgQ0xLU1JDX0NPVU5URVIJCTAJLy8gQ291bnRlciBtb2RlLgotI2RlZmluZSBDTEtTUkNfVElNRVIJCTIJLy8gVGltZXIgbW9kZS4KLSNkZWZpbmUgQ0xLU1JDX0VYVEVOREVSCQkzCS8vIEV4dGVuZGVyIG1vZGUuCisvKiAgQ2xrU3JjIHZhbHVlczogKi8KKyNkZWZpbmUgQ0xLU1JDX0NPVU5URVIJCTAJLyogIENvdW50ZXIgbW9kZS4gKi8KKyNkZWZpbmUgQ0xLU1JDX1RJTUVSCQkyCS8qICBUaW1lciBtb2RlLiAqLworI2RlZmluZSBDTEtTUkNfRVhURU5ERVIJCTMJLyogIEV4dGVuZGVyIG1vZGUuICovCiAKLS8vIENsa1BvbCB2YWx1ZXM6Ci0jZGVmaW5lIENMS1BPTF9QT1MJCTAJLy8gQ291bnRlci9FeHRlbmRlciBjbG9jayBpcwotCQkJCQkvLyBhY3RpdmUgaGlnaC4KLSNkZWZpbmUgQ0xLUE9MX05FRwkJMQkvLyBDb3VudGVyL0V4dGVuZGVyIGNsb2NrIGlzCi0JCQkJCS8vIGFjdGl2ZSBsb3cuCi0jZGVmaW5lIENOVERJUl9VUAkJMAkvLyBUaW1lciBjb3VudHMgdXAuCi0jZGVmaW5lIENOVERJUl9ET1dOIAkJMQkvLyBUaW1lciBjb3VudHMgZG93bi4KKy8qICBDbGtQb2wgdmFsdWVzOiAqLworI2RlZmluZSBDTEtQT0xfUE9TCQkwCS8qICBDb3VudGVyL0V4dGVuZGVyIGNsb2NrIGlzICovCisJCQkJCS8qICBhY3RpdmUgaGlnaC4gKi8KKyNkZWZpbmUgQ0xLUE9MX05FRwkJMQkvKiAgQ291bnRlci9FeHRlbmRlciBjbG9jayBpcyAqLworCQkJCQkvKiAgYWN0aXZlIGxvdy4gKi8KKyNkZWZpbmUgQ05URElSX1VQCQkwCS8qICBUaW1lciBjb3VudHMgdXAuICovCisjZGVmaW5lIENOVERJUl9ET1dOIAkJMQkvKiAgVGltZXIgY291bnRzIGRvd24uICovCiAKLS8vIENsa0VuYWIgdmFsdWVzOgotI2RlZmluZSBDTEtFTkFCX0FMV0FZUwkJMAkvLyBDbG9jayBhbHdheXMgZW5hYmxlZC4KLSNkZWZpbmUgQ0xLRU5BQl9JTkRFWAkJMQkvLyBDbG9jayBpcyBlbmFibGVkIGJ5IGluZGV4LgorLyogIENsa0VuYWIgdmFsdWVzOiAqLworI2RlZmluZSBDTEtFTkFCX0FMV0FZUwkJMAkvKiAgQ2xvY2sgYWx3YXlzIGVuYWJsZWQuICovCisjZGVmaW5lIENMS0VOQUJfSU5ERVgJCTEJLyogIENsb2NrIGlzIGVuYWJsZWQgYnkgaW5kZXguICovCiAKLS8vIENsa011bHQgdmFsdWVzOgotI2RlZmluZSBDTEtNVUxUXzRYIAkJMAkvLyA0eCBjbG9jayBtdWx0aXBsaWVyLgotI2RlZmluZSBDTEtNVUxUXzJYIAkJMQkvLyAyeCBjbG9jayBtdWx0aXBsaWVyLgotI2RlZmluZSBDTEtNVUxUXzFYIAkJMgkvLyAxeCBjbG9jayBtdWx0aXBsaWVyLgorLyogIENsa011bHQgdmFsdWVzOiAqLworI2RlZmluZSBDTEtNVUxUXzRYIAkJMAkvKiAgNHggY2xvY2sgbXVsdGlwbGllci4gKi8KKyNkZWZpbmUgQ0xLTVVMVF8yWCAJCTEJLyogIDJ4IGNsb2NrIG11bHRpcGxpZXIuICovCisjZGVmaW5lIENMS01VTFRfMVggCQkyCS8qICAxeCBjbG9jayBtdWx0aXBsaWVyLiAqLwogCi0vLyBCaXQgRmllbGQgcG9zaXRpb25zIGluIENPVU5URVJfU0VUVVAgc3RydWN0dXJlOgotI2RlZmluZSBCRl9MT0FEU1JDCQk5CS8vIFByZWxvYWQgdHJpZ2dlci4KLSNkZWZpbmUgQkZfSU5EWFNSQwkJNwkvLyBJbmRleCBzb3VyY2UuCi0jZGVmaW5lIEJGX0lORFhQT0wJCTYJLy8gSW5kZXggcG9sYXJpdHkuCi0jZGVmaW5lIEJGX0NMS1NSQwkJNAkvLyBDbG9jayBzb3VyY2UuCi0jZGVmaW5lIEJGX0NMS1BPTAkJMwkvLyBDbG9jayBwb2xhcml0eS9jb3VudCBkaXJlY3Rpb24uCi0jZGVmaW5lIEJGX0NMS01VTFQJCTEJLy8gQ2xvY2sgbXVsdGlwbGllci4KLSNkZWZpbmUgQkZfQ0xLRU5BQgkJMAkvLyBDbG9jayBlbmFibGUuCisvKiAgQml0IEZpZWxkIHBvc2l0aW9ucyBpbiBDT1VOVEVSX1NFVFVQIHN0cnVjdHVyZTogKi8KKyNkZWZpbmUgQkZfTE9BRFNSQwkJOQkvKiAgUHJlbG9hZCB0cmlnZ2VyLiAqLworI2RlZmluZSBCRl9JTkRYU1JDCQk3CS8qICBJbmRleCBzb3VyY2UuICovCisjZGVmaW5lIEJGX0lORFhQT0wJCTYJLyogIEluZGV4IHBvbGFyaXR5LiAqLworI2RlZmluZSBCRl9DTEtTUkMJCTQJLyogIENsb2NrIHNvdXJjZS4gKi8KKyNkZWZpbmUgQkZfQ0xLUE9MCQkzCS8qICBDbG9jayBwb2xhcml0eS9jb3VudCBkaXJlY3Rpb24uICovCisjZGVmaW5lIEJGX0NMS01VTFQJCTEJLyogIENsb2NrIG11bHRpcGxpZXIuICovCisjZGVmaW5lIEJGX0NMS0VOQUIJCTAJLyogIENsb2NrIGVuYWJsZS4gKi8KIAotLy8gRW51bWVyYXRlZCBjb3VudGVyIG9wZXJhdGluZyBtb2RlcyBzcGVjaWZpZWQgYnkgQ2xrU3JjIGJpdCBmaWVsZCBpbgotLy8gYSBDT1VOVEVSX1NFVFVQLgorLyogIEVudW1lcmF0ZWQgY291bnRlciBvcGVyYXRpbmcgbW9kZXMgc3BlY2lmaWVkIGJ5IENsa1NyYyBiaXQgZmllbGQgaW4gKi8KKy8qICBhIENPVU5URVJfU0VUVVAuICovCiAKLSNkZWZpbmUgQ0xLU1JDX0NPVU5URVIJCTAJLy8gQ291bnRlcjogRU5DX0MgY2xvY2ssIEVOQ19ECi0JCQkJCS8vIGRpcmVjdGlvbi4KLSNkZWZpbmUgQ0xLU1JDX1RJTUVSCQkyCS8vIFRpbWVyOiBTWVNfQyBjbG9jaywKLQkJCQkJLy8gZGlyZWN0aW9uIHNwZWNpZmllZCBieQotCQkJCQkvLyBDbGtQb2wuCi0jZGVmaW5lIENMS1NSQ19FWFRFTkRFUgkJMwkvLyBFeHRlbmRlcjogT1ZSX0EgY2xvY2ssCi0JCQkJCS8vIEVOQ19EIGRpcmVjdGlvbi4KKyNkZWZpbmUgQ0xLU1JDX0NPVU5URVIJCTAJLyogIENvdW50ZXI6IEVOQ19DIGNsb2NrLCBFTkNfRCAqLworCQkJCQkvKiAgZGlyZWN0aW9uLiAqLworI2RlZmluZSBDTEtTUkNfVElNRVIJCTIJLyogIFRpbWVyOiBTWVNfQyBjbG9jaywgKi8KKwkJCQkJLyogIGRpcmVjdGlvbiBzcGVjaWZpZWQgYnkgKi8KKwkJCQkJLyogIENsa1BvbC4gKi8KKyNkZWZpbmUgQ0xLU1JDX0VYVEVOREVSCQkzCS8qICBFeHRlbmRlcjogT1ZSX0EgY2xvY2ssICovCisJCQkJCS8qICBFTkNfRCBkaXJlY3Rpb24uICovCiAKLS8vIEVudW1lcmF0ZWQgY291bnRlciBjbG9jayBtdWx0aXBsaWVycy4KKy8qICBFbnVtZXJhdGVkIGNvdW50ZXIgY2xvY2sgbXVsdGlwbGllcnMuICovCiAKLSNkZWZpbmUgTVVMVF9YMAkJCTB4MDAwMwkvLyBTdXBwb3J0cyBubyBtdWx0aXBsaWVyczsKLQkJCQkJLy8gZml4ZWQgcGh5c2ljYWwgbXVsdGlwbGllciA9Ci0JCQkJCS8vIDMuCi0jZGVmaW5lIE1VTFRfWDEJCQkweDAwMDIJLy8gU3VwcG9ydHMgbXVsdGlwbGllciB4MTsKLQkJCQkJLy8gZml4ZWQgcGh5c2ljYWwgbXVsdGlwbGllciA9Ci0JCQkJCS8vIDIuCi0jZGVmaW5lIE1VTFRfWDIJCQkweDAwMDEJLy8gU3VwcG9ydHMgbXVsdGlwbGllcnMgeDEsCi0JCQkJCS8vIHgyOyBwaHlzaWNhbCBtdWx0aXBsaWVycyA9Ci0JCQkJCS8vIDEgb3IgMi4KLSNkZWZpbmUgTVVMVF9YNAkJCTB4MDAwMAkvLyBTdXBwb3J0cyBtdWx0aXBsaWVycyB4MSwKLQkJCQkJLy8geDIsIHg0OyBwaHlzaWNhbAotCQkJCQkvLyBtdWx0aXBsaWVycyA9IDAsIDEgb3IgMi4KKyNkZWZpbmUgTVVMVF9YMAkJCTB4MDAwMwkvKiAgU3VwcG9ydHMgbm8gbXVsdGlwbGllcnM7ICovCisJCQkJCS8qICBmaXhlZCBwaHlzaWNhbCBtdWx0aXBsaWVyID0gKi8KKwkJCQkJLyogIDMuICovCisjZGVmaW5lIE1VTFRfWDEJCQkweDAwMDIJLyogIFN1cHBvcnRzIG11bHRpcGxpZXIgeDE7ICovCisJCQkJCS8qICBmaXhlZCBwaHlzaWNhbCBtdWx0aXBsaWVyID0gKi8KKwkJCQkJLyogIDIuICovCisjZGVmaW5lIE1VTFRfWDIJCQkweDAwMDEJLyogIFN1cHBvcnRzIG11bHRpcGxpZXJzIHgxLCAqLworCQkJCQkvKiAgeDI7IHBoeXNpY2FsIG11bHRpcGxpZXJzID0gKi8KKwkJCQkJLyogIDEgb3IgMi4gKi8KKyNkZWZpbmUgTVVMVF9YNAkJCTB4MDAwMAkvKiAgU3VwcG9ydHMgbXVsdGlwbGllcnMgeDEsICovCisJCQkJCS8qICB4MiwgeDQ7IHBoeXNpY2FsICovCisJCQkJCS8qICBtdWx0aXBsaWVycyA9IDAsIDEgb3IgMi4gKi8KIAotLy8gU2FuaXR5LWNoZWNrIGxpbWl0cyBmb3IgcGFyYW1ldGVycy4KKy8qICBTYW5pdHktY2hlY2sgbGltaXRzIGZvciBwYXJhbWV0ZXJzLiAqLwogCi0jZGVmaW5lIE5VTV9DT1VOVEVSUwkJNgkvLyBNYXhpbXVtIHZhbGlkIGNvdW50ZXIKLQkJCQkJLy8gbG9naWNhbCBjaGFubmVsIG51bWJlci4KKyNkZWZpbmUgTlVNX0NPVU5URVJTCQk2CS8qICBNYXhpbXVtIHZhbGlkIGNvdW50ZXIgKi8KKwkJCQkJLyogIGxvZ2ljYWwgY2hhbm5lbCBudW1iZXIuICovCiAjZGVmaW5lIE5VTV9JTlRTT1VSQ0VTCQk0CiAjZGVmaW5lIE5VTV9MQVRDSFNPVVJDRVMJNAogI2RlZmluZSBOVU1fQ0xLTVVMVFMJCTQKQEAgLTcwOCw1OSArNjUzLDU5IEBACiAjZGVmaW5lIE5VTV9JTkRFWFNPVVJDRVMJMgogI2RlZmluZSBOVU1fTE9BRFRSSUdTCQk0CiAKLS8vIEJpdCBmaWVsZCBwb3NpdGlvbnMgaW4gQ1JBIGFuZCBDUkIgY291bnRlciBjb250cm9sIHJlZ2lzdGVycy4KKy8qICBCaXQgZmllbGQgcG9zaXRpb25zIGluIENSQSBhbmQgQ1JCIGNvdW50ZXIgY29udHJvbCByZWdpc3RlcnMuICovCiAKLS8vIEJpdCBmaWVsZCBwb3NpdGlvbnMgaW4gQ1JBOgotI2RlZmluZSBDUkFCSVRfSU5EWFNSQ19CCTE0CS8vICAgQiBpbmRleCBzb3VyY2UuCi0jZGVmaW5lIENSQUJJVF9DTEtTUkNfQgkJMTIJLy8gICBCIGNsb2NrIHNvdXJjZS4KLSNkZWZpbmUgQ1JBQklUX0lORFhQT0xfQQkxMQkvLyAgIEEgaW5kZXggcG9sYXJpdHkuCi0jZGVmaW5lIENSQUJJVF9MT0FEU1JDX0EJIDkJLy8gICBBIHByZWxvYWQgdHJpZ2dlci4KLSNkZWZpbmUgQ1JBQklUX0NMS01VTFRfQQkgNwkvLyAgIEEgY2xvY2sgbXVsdGlwbGllci4KLSNkZWZpbmUgQ1JBQklUX0lOVFNSQ19BCQkgNQkvLyAgIEEgaW50ZXJydXB0IHNvdXJjZS4KLSNkZWZpbmUgQ1JBQklUX0NMS1BPTF9BCQkgNAkvLyAgIEEgY2xvY2sgcG9sYXJpdHkuCi0jZGVmaW5lIENSQUJJVF9JTkRYU1JDX0EJIDIJLy8gICBBIGluZGV4IHNvdXJjZS4KLSNkZWZpbmUgQ1JBQklUX0NMS1NSQ19BCQkgMAkvLyAgIEEgY2xvY2sgc291cmNlLgorLyogIEJpdCBmaWVsZCBwb3NpdGlvbnMgaW4gQ1JBOiAqLworI2RlZmluZSBDUkFCSVRfSU5EWFNSQ19CCTE0CS8qICAgIEIgaW5kZXggc291cmNlLiAqLworI2RlZmluZSBDUkFCSVRfQ0xLU1JDX0IJCTEyCS8qICAgIEIgY2xvY2sgc291cmNlLiAqLworI2RlZmluZSBDUkFCSVRfSU5EWFBPTF9BCTExCS8qICAgIEEgaW5kZXggcG9sYXJpdHkuICovCisjZGVmaW5lIENSQUJJVF9MT0FEU1JDX0EJIDkJLyogICAgQSBwcmVsb2FkIHRyaWdnZXIuICovCisjZGVmaW5lIENSQUJJVF9DTEtNVUxUX0EJIDcJLyogICAgQSBjbG9jayBtdWx0aXBsaWVyLiAqLworI2RlZmluZSBDUkFCSVRfSU5UU1JDX0EJCSA1CS8qICAgIEEgaW50ZXJydXB0IHNvdXJjZS4gKi8KKyNkZWZpbmUgQ1JBQklUX0NMS1BPTF9BCQkgNAkvKiAgICBBIGNsb2NrIHBvbGFyaXR5LiAqLworI2RlZmluZSBDUkFCSVRfSU5EWFNSQ19BCSAyCS8qICAgIEEgaW5kZXggc291cmNlLiAqLworI2RlZmluZSBDUkFCSVRfQ0xLU1JDX0EJCSAwCS8qICAgIEEgY2xvY2sgc291cmNlLiAqLwogCi0vLyBCaXQgZmllbGQgcG9zaXRpb25zIGluIENSQjoKLSNkZWZpbmUgQ1JCQklUX0lOVFJFU0VUQ01ECTE1CS8vICAgSW50ZXJydXB0IHJlc2V0IGNvbW1hbmQuCi0jZGVmaW5lIENSQkJJVF9JTlRSRVNFVF9CCTE0CS8vICAgQiBpbnRlcnJ1cHQgcmVzZXQgZW5hYmxlLgotI2RlZmluZSBDUkJCSVRfSU5UUkVTRVRfQQkxMwkvLyAgIEEgaW50ZXJydXB0IHJlc2V0IGVuYWJsZS4KLSNkZWZpbmUgQ1JCQklUX0NMS0VOQUJfQQkxMgkvLyAgIEEgY2xvY2sgZW5hYmxlLgotI2RlZmluZSBDUkJCSVRfSU5UU1JDX0IJCTEwCS8vICAgQiBpbnRlcnJ1cHQgc291cmNlLgotI2RlZmluZSBDUkJCSVRfTEFUQ0hTUkMJCSA4CS8vICAgQS9CIGxhdGNoIHNvdXJjZS4KLSNkZWZpbmUgQ1JCQklUX0xPQURTUkNfQgkgNgkvLyAgIEIgcHJlbG9hZCB0cmlnZ2VyLgotI2RlZmluZSBDUkJCSVRfQ0xLTVVMVF9CCSAzCS8vICAgQiBjbG9jayBtdWx0aXBsaWVyLgotI2RlZmluZSBDUkJCSVRfQ0xLRU5BQl9CCSAyCS8vICAgQiBjbG9jayBlbmFibGUuCi0jZGVmaW5lIENSQkJJVF9JTkRYUE9MX0IJIDEJLy8gICBCIGluZGV4IHBvbGFyaXR5LgotI2RlZmluZSBDUkJCSVRfQ0xLUE9MX0IJCSAwCS8vICAgQiBjbG9jayBwb2xhcml0eS4KKy8qICBCaXQgZmllbGQgcG9zaXRpb25zIGluIENSQjogKi8KKyNkZWZpbmUgQ1JCQklUX0lOVFJFU0VUQ01ECTE1CS8qICAgIEludGVycnVwdCByZXNldCBjb21tYW5kLiAqLworI2RlZmluZSBDUkJCSVRfSU5UUkVTRVRfQgkxNAkvKiAgICBCIGludGVycnVwdCByZXNldCBlbmFibGUuICovCisjZGVmaW5lIENSQkJJVF9JTlRSRVNFVF9BCTEzCS8qICAgIEEgaW50ZXJydXB0IHJlc2V0IGVuYWJsZS4gKi8KKyNkZWZpbmUgQ1JCQklUX0NMS0VOQUJfQQkxMgkvKiAgICBBIGNsb2NrIGVuYWJsZS4gKi8KKyNkZWZpbmUgQ1JCQklUX0lOVFNSQ19CCQkxMAkvKiAgICBCIGludGVycnVwdCBzb3VyY2UuICovCisjZGVmaW5lIENSQkJJVF9MQVRDSFNSQwkJIDgJLyogICAgQS9CIGxhdGNoIHNvdXJjZS4gKi8KKyNkZWZpbmUgQ1JCQklUX0xPQURTUkNfQgkgNgkvKiAgICBCIHByZWxvYWQgdHJpZ2dlci4gKi8KKyNkZWZpbmUgQ1JCQklUX0NMS01VTFRfQgkgMwkvKiAgICBCIGNsb2NrIG11bHRpcGxpZXIuICovCisjZGVmaW5lIENSQkJJVF9DTEtFTkFCX0IJIDIJLyogICAgQiBjbG9jayBlbmFibGUuICovCisjZGVmaW5lIENSQkJJVF9JTkRYUE9MX0IJIDEJLyogICAgQiBpbmRleCBwb2xhcml0eS4gKi8KKyNkZWZpbmUgQ1JCQklUX0NMS1BPTF9CCQkgMAkvKiAgICBCIGNsb2NrIHBvbGFyaXR5LiAqLwogCi0vLyBCaXQgZmllbGQgbWFza3MgZm9yIENSQSBhbmQgQ1JCLgorLyogIEJpdCBmaWVsZCBtYXNrcyBmb3IgQ1JBIGFuZCBDUkIuICovCiAKLSNkZWZpbmUgQ1JBTVNLX0lORFhTUkNfQgkoICh1aW50MTZfdCkoIDMgPDwgQ1JBQklUX0lORFhTUkNfQikgKQotI2RlZmluZSBDUkFNU0tfQ0xLU1JDX0IJCSggKHVpbnQxNl90KSggMyA8PCBDUkFCSVRfQ0xLU1JDX0IpICkKLSNkZWZpbmUgQ1JBTVNLX0lORFhQT0xfQQkoICh1aW50MTZfdCkoIDEgPDwgQ1JBQklUX0lORFhQT0xfQSkgKQotI2RlZmluZSBDUkFNU0tfTE9BRFNSQ19BCSggKHVpbnQxNl90KSggMyA8PCBDUkFCSVRfTE9BRFNSQ19BKSApCi0jZGVmaW5lIENSQU1TS19DTEtNVUxUX0EJKCAodWludDE2X3QpKCAzIDw8IENSQUJJVF9DTEtNVUxUX0EpICkKLSNkZWZpbmUgQ1JBTVNLX0lOVFNSQ19BCQkoICh1aW50MTZfdCkoIDMgPDwgQ1JBQklUX0lOVFNSQ19BKSApCi0jZGVmaW5lIENSQU1TS19DTEtQT0xfQQkJKCAodWludDE2X3QpKCAzIDw8IENSQUJJVF9DTEtQT0xfQSkgKQotI2RlZmluZSBDUkFNU0tfSU5EWFNSQ19BCSggKHVpbnQxNl90KSggMyA8PCBDUkFCSVRfSU5EWFNSQ19BKSApCi0jZGVmaW5lIENSQU1TS19DTEtTUkNfQQkJKCAodWludDE2X3QpKCAzIDw8IENSQUJJVF9DTEtTUkNfQSkgKQorI2RlZmluZSBDUkFNU0tfSU5EWFNSQ19CCSgodWludDE2X3QpKDMgPDwgQ1JBQklUX0lORFhTUkNfQikpCisjZGVmaW5lIENSQU1TS19DTEtTUkNfQgkJKCh1aW50MTZfdCkoMyA8PCBDUkFCSVRfQ0xLU1JDX0IpKQorI2RlZmluZSBDUkFNU0tfSU5EWFBPTF9BCSgodWludDE2X3QpKDEgPDwgQ1JBQklUX0lORFhQT0xfQSkpCisjZGVmaW5lIENSQU1TS19MT0FEU1JDX0EJKCh1aW50MTZfdCkoMyA8PCBDUkFCSVRfTE9BRFNSQ19BKSkKKyNkZWZpbmUgQ1JBTVNLX0NMS01VTFRfQQkoKHVpbnQxNl90KSgzIDw8IENSQUJJVF9DTEtNVUxUX0EpKQorI2RlZmluZSBDUkFNU0tfSU5UU1JDX0EJCSgodWludDE2X3QpKDMgPDwgQ1JBQklUX0lOVFNSQ19BKSkKKyNkZWZpbmUgQ1JBTVNLX0NMS1BPTF9BCQkoKHVpbnQxNl90KSgzIDw8IENSQUJJVF9DTEtQT0xfQSkpCisjZGVmaW5lIENSQU1TS19JTkRYU1JDX0EJKCh1aW50MTZfdCkoMyA8PCBDUkFCSVRfSU5EWFNSQ19BKSkKKyNkZWZpbmUgQ1JBTVNLX0NMS1NSQ19BCQkoKHVpbnQxNl90KSgzIDw8IENSQUJJVF9DTEtTUkNfQSkpCiAKLSNkZWZpbmUgQ1JCTVNLX0lOVFJFU0VUQ01ECSggKHVpbnQxNl90KSggMSA8PCBDUkJCSVRfSU5UUkVTRVRDTUQpICkKLSNkZWZpbmUgQ1JCTVNLX0lOVFJFU0VUX0IJKCAodWludDE2X3QpKCAxIDw8IENSQkJJVF9JTlRSRVNFVF9CKSApCi0jZGVmaW5lIENSQk1TS19JTlRSRVNFVF9BCSggKHVpbnQxNl90KSggMSA8PCBDUkJCSVRfSU5UUkVTRVRfQSkgKQotI2RlZmluZSBDUkJNU0tfQ0xLRU5BQl9BCSggKHVpbnQxNl90KSggMSA8PCBDUkJCSVRfQ0xLRU5BQl9BKSApCi0jZGVmaW5lIENSQk1TS19JTlRTUkNfQgkJKCAodWludDE2X3QpKCAzIDw8IENSQkJJVF9JTlRTUkNfQikgKQotI2RlZmluZSBDUkJNU0tfTEFUQ0hTUkMJCSggKHVpbnQxNl90KSggMyA8PCBDUkJCSVRfTEFUQ0hTUkMpICkKLSNkZWZpbmUgQ1JCTVNLX0xPQURTUkNfQgkoICh1aW50MTZfdCkoIDMgPDwgQ1JCQklUX0xPQURTUkNfQikgKQotI2RlZmluZSBDUkJNU0tfQ0xLTVVMVF9CCSggKHVpbnQxNl90KSggMyA8PCBDUkJCSVRfQ0xLTVVMVF9CKSApCi0jZGVmaW5lIENSQk1TS19DTEtFTkFCX0IJKCAodWludDE2X3QpKCAxIDw8IENSQkJJVF9DTEtFTkFCX0IpICkKLSNkZWZpbmUgQ1JCTVNLX0lORFhQT0xfQgkoICh1aW50MTZfdCkoIDEgPDwgQ1JCQklUX0lORFhQT0xfQikgKQotI2RlZmluZSBDUkJNU0tfQ0xLUE9MX0IJCSggKHVpbnQxNl90KSggMSA8PCBDUkJCSVRfQ0xLUE9MX0IpICkKKyNkZWZpbmUgQ1JCTVNLX0lOVFJFU0VUQ01ECSgodWludDE2X3QpKDEgPDwgQ1JCQklUX0lOVFJFU0VUQ01EKSkKKyNkZWZpbmUgQ1JCTVNLX0lOVFJFU0VUX0IJKCh1aW50MTZfdCkoMSA8PCBDUkJCSVRfSU5UUkVTRVRfQikpCisjZGVmaW5lIENSQk1TS19JTlRSRVNFVF9BCSgodWludDE2X3QpKDEgPDwgQ1JCQklUX0lOVFJFU0VUX0EpKQorI2RlZmluZSBDUkJNU0tfQ0xLRU5BQl9BCSgodWludDE2X3QpKDEgPDwgQ1JCQklUX0NMS0VOQUJfQSkpCisjZGVmaW5lIENSQk1TS19JTlRTUkNfQgkJKCh1aW50MTZfdCkoMyA8PCBDUkJCSVRfSU5UU1JDX0IpKQorI2RlZmluZSBDUkJNU0tfTEFUQ0hTUkMJCSgodWludDE2X3QpKDMgPDwgQ1JCQklUX0xBVENIU1JDKSkKKyNkZWZpbmUgQ1JCTVNLX0xPQURTUkNfQgkoKHVpbnQxNl90KSgzIDw8IENSQkJJVF9MT0FEU1JDX0IpKQorI2RlZmluZSBDUkJNU0tfQ0xLTVVMVF9CCSgodWludDE2X3QpKDMgPDwgQ1JCQklUX0NMS01VTFRfQikpCisjZGVmaW5lIENSQk1TS19DTEtFTkFCX0IJKCh1aW50MTZfdCkoMSA8PCBDUkJCSVRfQ0xLRU5BQl9CKSkKKyNkZWZpbmUgQ1JCTVNLX0lORFhQT0xfQgkoKHVpbnQxNl90KSgxIDw8IENSQkJJVF9JTkRYUE9MX0IpKQorI2RlZmluZSBDUkJNU0tfQ0xLUE9MX0IJCSgodWludDE2X3QpKDEgPDwgQ1JCQklUX0NMS1BPTF9CKSkKIAotI2RlZmluZSBDUkJNU0tfSU5UQ1RSTAkJKCBDUkJNU0tfSU5UUkVTRVRDTUQgfCBDUkJNU0tfSU5UUkVTRVRfQSB8IENSQk1TS19JTlRSRVNFVF9CICkJLy8gSW50ZXJydXB0IHJlc2V0IGNvbnRyb2wgYml0cy4KKyNkZWZpbmUgQ1JCTVNLX0lOVENUUkwJCShDUkJNU0tfSU5UUkVTRVRDTUQgfCBDUkJNU0tfSU5UUkVTRVRfQSB8IENSQk1TS19JTlRSRVNFVF9CKQkvKiAgSW50ZXJydXB0IHJlc2V0IGNvbnRyb2wgYml0cy4gKi8KIAotLy8gQml0IGZpZWxkIHBvc2l0aW9ucyBmb3Igc3RhbmRhcmRpemVkIFNFVFVQIHN0cnVjdHVyZS4KKy8qICBCaXQgZmllbGQgcG9zaXRpb25zIGZvciBzdGFuZGFyZGl6ZWQgU0VUVVAgc3RydWN0dXJlLiAqLwogCiAjZGVmaW5lIFNUREJJVF9JTlRTUkMJCTEzCiAjZGVmaW5lIFNUREJJVF9MQVRDSFNSQwkJMTEKQEAgLTc3MiwxOSArNzE3LDE4IEBACiAjZGVmaW5lIFNUREJJVF9DTEtNVUxUCQkgMQogI2RlZmluZSBTVERCSVRfQ0xLRU5BQgkJIDAKIAotLy8gQml0IGZpZWxkIG1hc2tzIGZvciBzdGFuZGFyZGl6ZWQgU0VUVVAgc3RydWN0dXJlLgorLyogIEJpdCBmaWVsZCBtYXNrcyBmb3Igc3RhbmRhcmRpemVkIFNFVFVQIHN0cnVjdHVyZS4gKi8KIAotI2RlZmluZSBTVERNU0tfSU5UU1JDCQkoICh1aW50MTZfdCkoIDMgPDwgU1REQklUX0lOVFNSQyAgICkgKQotI2RlZmluZSBTVERNU0tfTEFUQ0hTUkMJCSggKHVpbnQxNl90KSggMyA8PCBTVERCSVRfTEFUQ0hTUkMgKSApCi0jZGVmaW5lIFNURE1TS19MT0FEU1JDCQkoICh1aW50MTZfdCkoIDMgPDwgU1REQklUX0xPQURTUkMgICkgKQotI2RlZmluZSBTVERNU0tfSU5EWFNSQwkJKCAodWludDE2X3QpKCAxIDw8IFNUREJJVF9JTkRYU1JDICApICkKLSNkZWZpbmUgU1RETVNLX0lORFhQT0wJCSggKHVpbnQxNl90KSggMSA8PCBTVERCSVRfSU5EWFBPTCAgKSApCi0jZGVmaW5lIFNURE1TS19DTEtTUkMJCSggKHVpbnQxNl90KSggMyA8PCBTVERCSVRfQ0xLU1JDICAgKSApCi0jZGVmaW5lIFNURE1TS19DTEtQT0wJCSggKHVpbnQxNl90KSggMSA8PCBTVERCSVRfQ0xLUE9MICAgKSApCi0jZGVmaW5lIFNURE1TS19DTEtNVUxUCQkoICh1aW50MTZfdCkoIDMgPDwgU1REQklUX0NMS01VTFQgICkgKQotI2RlZmluZSBTVERNU0tfQ0xLRU5BQgkJKCAodWludDE2X3QpKCAxIDw8IFNUREJJVF9DTEtFTkFCICApICkKKyNkZWZpbmUgU1RETVNLX0lOVFNSQwkJKCh1aW50MTZfdCkoMyA8PCBTVERCSVRfSU5UU1JDKSkKKyNkZWZpbmUgU1RETVNLX0xBVENIU1JDCQkoKHVpbnQxNl90KSgzIDw8IFNUREJJVF9MQVRDSFNSQykpCisjZGVmaW5lIFNURE1TS19MT0FEU1JDCQkoKHVpbnQxNl90KSgzIDw8IFNUREJJVF9MT0FEU1JDKSkKKyNkZWZpbmUgU1RETVNLX0lORFhTUkMJCSgodWludDE2X3QpKDEgPDwgU1REQklUX0lORFhTUkMpKQorI2RlZmluZSBTVERNU0tfSU5EWFBPTAkJKCh1aW50MTZfdCkoMSA8PCBTVERCSVRfSU5EWFBPTCkpCisjZGVmaW5lIFNURE1TS19DTEtTUkMJCSgodWludDE2X3QpKDMgPDwgU1REQklUX0NMS1NSQykpCisjZGVmaW5lIFNURE1TS19DTEtQT0wJCSgodWludDE2X3QpKDEgPDwgU1REQklUX0NMS1BPTCkpCisjZGVmaW5lIFNURE1TS19DTEtNVUxUCQkoKHVpbnQxNl90KSgzIDw8IFNUREJJVF9DTEtNVUxUKSkKKyNkZWZpbmUgU1RETVNLX0NMS0VOQUIJCSgodWludDE2X3QpKDEgPDwgU1REQklUX0NMS0VOQUIpKQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIC8qIHR5cGVkZWYgc3RydWN0IGluZGV4Q291bnRlciAqLwogLyogeyAqLwpAQCAtNzk1LDggKzczOSw4IEBACiAvKiAgIHVuc2lnbmVkIGludCBlbmM7ICovCiAvKiB9Q2FsbENvdW50ZXI7ICovCiAKLXR5cGVkZWYgc3RydWN0IGJ1ZmZlckRNQSB7CitzdHJ1Y3QgYnVmZmVyRE1BIHsKIAlkbWFfYWRkcl90IFBoeXNpY2FsQmFzZTsKIAl2b2lkICpMb2dpY2FsQmFzZTsKIAl1aW50MzJfdCBETUFIYW5kbGU7Ci19IERNQUJVRjsKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDRmZDVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYwpAQCAtMCwwICsxLDg3MCBAQAorLyoKKyAgICBjb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKKyAgICBTa2VsZXRvbiBjb2RlIGZvciBhIENvbWVkaSBkcml2ZXIKKworICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDIgQW5kZXJzIEJsb21kZWxsIDxhbmRlcnMuYmxvbWRlbGxAY29udHJvbC5sdGguc2U+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworKi8KKworLyoKK0RyaXZlcjogc2VyaWFsMjAwMgorRGVzY3JpcHRpb246IERyaXZlciBmb3Igc2VyaWFsIGNvbm5lY3RlZCBoYXJkd2FyZQorRGV2aWNlczoKK0F1dGhvcjogQW5kZXJzIEJsb21kZWxsCitVcGRhdGVkOiBGcmksICA3IEp1biAyMDAyIDEyOjU2OjQ1IC0wNzAwCitTdGF0dXM6IGluIGRldmVsb3BtZW50CisKKyovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxhc20vdGVybWlvcy5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisKKy8qCisgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIHR3byBpbWFnaW5hcnkgYm9hcmRzLiAgRGVzY3JpYmluZyB0aGUKKyAqIGJvYXJkcyBpbiB0aGlzIHdheSBpcyBvcHRpb25hbCwgYW5kIGNvbXBsZXRlbHkgZHJpdmVyLWRlcGVuZGVudC4KKyAqIFNvbWUgZHJpdmVycyB1c2UgYXJyYXlzIHN1Y2ggYXMgdGhpcywgb3RoZXIgZG8gbm90LgorICovCitzdHJ1Y3Qgc2VyaWFsMjAwMl9ib2FyZCB7CisJY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VyaWFsMjAwMl9ib2FyZCBzZXJpYWwyMDAyX2JvYXJkc1tdID0geworCXsKKyAgICAgIG5hbWU6CSJzZXJpYWwyMDAyIn0KK307CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHNlcmlhbDIwMDJfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworc3RydWN0IHNlcmlhbDIwMDJfcmFuZ2VfdGFibGVfdCB7CisKKwkvLyBIQUNLLi4uCisJaW50IGxlbmd0aDsKKwlzdHJ1Y3QgY29tZWRpX2tyYW5nZSByYW5nZTsKK307CisKKworc3RydWN0IHNlcmlhbDIwMDJfcHJpdmF0ZSB7CisKKwlpbnQgcG9ydDsJCS8vIC9kZXYvdHR5Uzxwb3J0PgorCWludCBzcGVlZDsJCS8vIGJhdWRyYXRlCisJc3RydWN0IGZpbGUgKnR0eTsKKwl1bnNpZ25lZCBpbnQgYW9fcmVhZGJhY2tbMzJdOworCXVuc2lnbmVkIGNoYXIgZGlnaXRhbF9pbl9tYXBwaW5nWzMyXTsKKwl1bnNpZ25lZCBjaGFyIGRpZ2l0YWxfb3V0X21hcHBpbmdbMzJdOworCXVuc2lnbmVkIGNoYXIgYW5hbG9nX2luX21hcHBpbmdbMzJdOworCXVuc2lnbmVkIGNoYXIgYW5hbG9nX291dF9tYXBwaW5nWzMyXTsKKwl1bnNpZ25lZCBjaGFyIGVuY29kZXJfaW5fbWFwcGluZ1szMl07CisJc3RydWN0IHNlcmlhbDIwMDJfcmFuZ2VfdGFibGVfdCBpbl9yYW5nZVszMl0sIG91dF9yYW5nZVszMl07Cit9OworCisKKy8qCisgKiBtb3N0IGRyaXZlcnMgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisgKiBhY2Nlc3MgdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3Qgc2VyaWFsMjAwMl9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCitzdGF0aWMgaW50IHNlcmlhbDIwMDJfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3NlcmlhbDIwMDIgPSB7CisgICAgICBkcml2ZXJfbmFtZToic2VyaWFsMjAwMiIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6c2VyaWFsMjAwMl9hdHRhY2gsCisgICAgICBkZXRhY2g6c2VyaWFsMjAwMl9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZzZXJpYWwyMDAyX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3Qgc2VyaWFsMjAwMl9ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHNlcmlhbDIwMDJfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3Qgc2VyaWFsMjAwMl9ib2FyZCksCit9OworCitzdGF0aWMgaW50IHNlcmlhbDIwMDJfZGlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9kb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBzZXJpYWwyMDAyX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHNlcmlhbDIwMDJfYW9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9hb19yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdHJ1Y3Qgc2VyaWFsX2RhdGEgeworCWVudW0geyBpc19pbnZhbGlkLCBpc19kaWdpdGFsLCBpc19jaGFubmVsIH0ga2luZDsKKwlpbnQgaW5kZXg7CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKK307CisKK3N0YXRpYyBsb25nIHR0eV9pb2N0bChzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgb3AsIHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisjaWZkZWYgSEFWRV9VTkxPQ0tFRF9JT0NUTAorICAJaWYgKGYtPmZfb3AtPnVubG9ja2VkX2lvY3RsKSB7CisJCXJldHVybiBmLT5mX29wLT51bmxvY2tlZF9pb2N0bChmLCBvcCwgcGFyYW0pOworCX0KKyNlbmRpZgorCWlmIChmLT5mX29wLT5pb2N0bCkgeworCSAgCXJldHVybiBmLT5mX29wLT5pb2N0bChmLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZiwgb3AsIHBhcmFtKTsKKwl9CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbnQgdHR5X3dyaXRlKHN0cnVjdCBmaWxlICpmLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlpbnQgcmVzdWx0OworCW1tX3NlZ21lbnRfdCBvbGRmczsKKworCW9sZGZzID0gZ2V0X2ZzKCk7CisJc2V0X2ZzKEtFUk5FTF9EUyk7CisJZi0+Zl9wb3MgPSAwOworCXJlc3VsdCA9IGYtPmZfb3AtPndyaXRlKGYsIGJ1ZiwgY291bnQsICZmLT5mX3Bvcyk7CisJc2V0X2ZzKG9sZGZzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisjaWYgMAorLyoKKyAqIE9uIDIuNi4yNi4zIHRoaXMgb2NjYWlzb25hbGx5IGdhdmUgbWUgcGFnZSBmYXVsdHMsIHdvcmtlZCBhcm91bmQgYnkKKyAqIHNldHRpbmdzLmNfY2NbVk1JTl0gPSAwOyBzZXR0aW5ncy5jX2NjW1ZUSU1FXSA9IDAKKyAqLworc3RhdGljIGludCB0dHlfYXZhaWxhYmxlKHN0cnVjdCBmaWxlICpmKQoreworCWxvbmcgcmVzdWx0ID0gMDsKKwltbV9zZWdtZW50X3Qgb2xkZnM7CisKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhLRVJORUxfRFMpOworCXR0eV9pb2N0bChmLCBGSU9OUkVBRCwgKHVuc2lnbmVkIGxvbmcpJnJlc3VsdCk7CisJc2V0X2ZzKG9sZGZzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgdHR5X3JlYWQoc3RydWN0IGZpbGUgKmYsIGludCB0aW1lb3V0KQoreworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSAtMTsKKwlpZiAoIUlTX0VSUihmKSkgeworCQltbV9zZWdtZW50X3Qgb2xkZnM7CisKKwkJb2xkZnMgPSBnZXRfZnMoKTsKKwkJc2V0X2ZzKEtFUk5FTF9EUyk7CisJCWlmIChmLT5mX29wLT5wb2xsKSB7CisJCQlzdHJ1Y3QgcG9sbF93cXVldWVzIHRhYmxlOworCQkJc3RydWN0IHRpbWV2YWwgc3RhcnQsIG5vdzsKKworCQkJZG9fZ2V0dGltZW9mZGF5KCZzdGFydCk7CisJCQlwb2xsX2luaXR3YWl0KCZ0YWJsZSk7CisJCQl3aGlsZSAoMSkgeworCQkJCWxvbmcgZWxhcHNlZDsKKwkJCQlpbnQgbWFzazsKKworCQkJCW1hc2sgPSBmLT5mX29wLT5wb2xsKGYsICZ0YWJsZS5wdCk7CisJCQkJaWYgKG1hc2sgJiAoUE9MTFJETk9STSB8IFBPTExSREJBTkQgfCBQT0xMSU4gfAorCQkJCQkJUE9MTEhVUCB8IFBPTExFUlIpKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7CisJCQkJZWxhcHNlZCA9CisJCQkJCSgxMDAwMDAwICogKG5vdy50dl9zZWMgLSBzdGFydC50dl9zZWMpICsKKwkJCQkJbm93LnR2X3VzZWMgLSBzdGFydC50dl91c2VjKTsKKwkJCQlpZiAoZWxhcHNlZCA+IHRpbWVvdXQpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJc2NoZWR1bGVfdGltZW91dCgoKHRpbWVvdXQgLQorCQkJCQkJCWVsYXBzZWQpICogSFopIC8gMTAwMDApOworCQkJfQorCQkJcG9sbF9mcmVld2FpdCgmdGFibGUpOworCQkJeworCQkJICB1bnNpZ25lZCBjaGFyIGNoOworCisJCQkgIGYtPmZfcG9zID0gMDsKKwkJCSAgaWYgKGYtPmZfb3AtPnJlYWQoZiwgJmNoLCAxLCAmZi0+Zl9wb3MpID09IDEpIHsKKwkJCSAgICByZXN1bHQgPSBjaDsKKwkJCSAgfQorCQkJfQorCQl9IGVsc2UgeworCQkJLyogRGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgcG9sbCwgYnVzeSB3YWl0ICovCisJCQlpbnQgcmV0cmllcyA9IDA7CisJCQl3aGlsZSAoMSkgeworCQkJICAJdW5zaWduZWQgY2hhciBjaDsKKworCQkJCXJldHJpZXMrKzsKKwkJCQlpZiAocmV0cmllcyA+PSB0aW1lb3V0KSB7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWYtPmZfcG9zID0gMDsKKwkJCQlpZiAoZi0+Zl9vcC0+cmVhZChmLCAmY2gsIDEsICZmLT5mX3BvcykgPT0gMSkgeworCQkJCSAgCXJlc3VsdCA9IGNoOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY29tZWRpX3VkZWxheSgxMDApOworCQkJfQorCQl9CisJCXNldF9mcyhvbGRmcyk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHR0eV9zZXRzcGVlZChzdHJ1Y3QgZmlsZSAqZiwgaW50IHNwZWVkKQoreworCW1tX3NlZ21lbnRfdCBvbGRmczsKKworCW9sZGZzID0gZ2V0X2ZzKCk7CisJc2V0X2ZzKEtFUk5FTF9EUyk7CisJeworCQkvLyBTZXQgc3BlZWQKKwkJc3RydWN0IHRlcm1pb3Mgc2V0dGluZ3M7CisKKwkJdHR5X2lvY3RsKGYsIFRDR0VUUywgKHVuc2lnbmVkIGxvbmcpJnNldHRpbmdzKTsKKy8vICAgIHByaW50aygiU3BlZWQ6ICVkXG4iLCBzZXR0aW5ncy5jX2NmbGFnICYgKENCQVVEIHwgQ0JBVURFWCkpOworCQlzZXR0aW5ncy5jX2lmbGFnID0gMDsKKwkJc2V0dGluZ3MuY19vZmxhZyA9IDA7CisJCXNldHRpbmdzLmNfbGZsYWcgPSAwOworCQlzZXR0aW5ncy5jX2NmbGFnID0gQ0xPQ0FMIHwgQ1M4IHwgQ1JFQUQ7CisJCXNldHRpbmdzLmNfY2NbVk1JTl0gPSAwOworCQlzZXR0aW5ncy5jX2NjW1ZUSU1FXSA9IDA7CisJCXN3aXRjaCAoc3BlZWQpIHsKKwkJY2FzZSAyNDAwOnsKKwkJCQlzZXR0aW5ncy5jX2NmbGFnIHw9IEIyNDAwOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgNDgwMDp7CisJCQkJc2V0dGluZ3MuY19jZmxhZyB8PSBCNDgwMDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDk2MDA6eworCQkJCXNldHRpbmdzLmNfY2ZsYWcgfD0gQjk2MDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAxOTIwMDp7CisJCQkJc2V0dGluZ3MuY19jZmxhZyB8PSBCMTkyMDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAzODQwMDp7CisJCQkJc2V0dGluZ3MuY19jZmxhZyB8PSBCMzg0MDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSA1NzYwMDp7CisJCQkJc2V0dGluZ3MuY19jZmxhZyB8PSBCNTc2MDA7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAxMTUyMDA6eworCQkJCXNldHRpbmdzLmNfY2ZsYWcgfD0gQjExNTIwMDsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OnsKKwkJCQlzZXR0aW5ncy5jX2NmbGFnIHw9IEI5NjAwOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJdHR5X2lvY3RsKGYsIFRDU0VUUywgKHVuc2lnbmVkIGxvbmcpJnNldHRpbmdzKTsKKy8vICAgIHByaW50aygiU3BlZWQ6ICVkXG4iLCBzZXR0aW5ncy5jX2NmbGFnICYgKENCQVVEIHwgQ0JBVURFWCkpOworCX0KKwl7CisJCS8vIFNldCBsb3cgbGF0ZW5jeQorCQlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzZXR0aW5nczsKKworCQl0dHlfaW9jdGwoZiwgVElPQ0dTRVJJQUwsICh1bnNpZ25lZCBsb25nKSZzZXR0aW5ncyk7CisJCXNldHRpbmdzLmZsYWdzIHw9IEFTWU5DX0xPV19MQVRFTkNZOworCQl0dHlfaW9jdGwoZiwgVElPQ1NTRVJJQUwsICh1bnNpZ25lZCBsb25nKSZzZXR0aW5ncyk7CisJfQorCisJc2V0X2ZzKG9sZGZzKTsKK30KKworc3RhdGljIHZvaWQgcG9sbF9kaWdpdGFsKHN0cnVjdCBmaWxlICpmLCBpbnQgY2hhbm5lbCkKK3sKKwljaGFyIGNtZDsKKworCWNtZCA9IDB4NDAgfCAoY2hhbm5lbCAmIDB4MWYpOworCXR0eV93cml0ZShmLCAmY21kLCAxKTsKK30KKworc3RhdGljIHZvaWQgcG9sbF9jaGFubmVsKHN0cnVjdCBmaWxlICpmLCBpbnQgY2hhbm5lbCkKK3sKKwljaGFyIGNtZDsKKworCWNtZCA9IDB4NjAgfCAoY2hhbm5lbCAmIDB4MWYpOworCXR0eV93cml0ZShmLCAmY21kLCAxKTsKK30KKworc3RhdGljIHN0cnVjdCBzZXJpYWxfZGF0YSBzZXJpYWxfcmVhZChzdHJ1Y3QgZmlsZSAqZiwgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IHNlcmlhbF9kYXRhIHJlc3VsdDsKKwlpbnQgbGVuZ3RoOworCisJcmVzdWx0LmtpbmQgPSBpc19pbnZhbGlkOworCXJlc3VsdC5pbmRleCA9IDA7CisJcmVzdWx0LnZhbHVlID0gMDsKKwlsZW5ndGggPSAwOworCXdoaWxlICgxKSB7CisJCWludCBkYXRhID0gdHR5X3JlYWQoZiwgdGltZW91dCk7CisKKwkJbGVuZ3RoKys7CisJCWlmIChkYXRhIDwgMCkgeworCQkJcHJpbnRrKCJzZXJpYWwyMDAyIGVycm9yXG4iKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGRhdGEgJiAweDgwKSB7CisJCQlyZXN1bHQudmFsdWUgPSAocmVzdWx0LnZhbHVlIDw8IDcpIHwgKGRhdGEgJiAweDdmKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsZW5ndGggPT0gMSkgeworCQkJCXN3aXRjaCAoKGRhdGEgPj4gNSkgJiAweDAzKSB7CisJCQkJY2FzZSAwOnsKKwkJCQkJCXJlc3VsdC52YWx1ZSA9IDA7CisJCQkJCQlyZXN1bHQua2luZCA9IGlzX2RpZ2l0YWw7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxOnsKKwkJCQkJCXJlc3VsdC52YWx1ZSA9IDE7CisJCQkJCQlyZXN1bHQua2luZCA9IGlzX2RpZ2l0YWw7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlyZXN1bHQudmFsdWUgPQorCQkJCQkocmVzdWx0LgorCQkJCQl2YWx1ZSA8PCAyKSB8ICgoZGF0YSAmIDB4NjApID4+IDUpOworCQkJCXJlc3VsdC5raW5kID0gaXNfY2hhbm5lbDsKKwkJCX0KKwkJCXJlc3VsdC5pbmRleCA9IGRhdGEgJiAweDFmOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfd3JpdGUoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBzZXJpYWxfZGF0YSBkYXRhKQoreworCWlmIChkYXRhLmtpbmQgPT0gaXNfZGlnaXRhbCkgeworCQl1bnNpZ25lZCBjaGFyIGNoID0KKwkJCSgoZGF0YS52YWx1ZSA8PCA1KSAmIDB4MjApIHwgKGRhdGEuaW5kZXggJiAweDFmKTsKKwkJdHR5X3dyaXRlKGYsICZjaCwgMSk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgY2hhciBjaFs2XTsKKwkJaW50IGkgPSAwOworCQlpZiAoZGF0YS52YWx1ZSA+PSAoMUwgPDwgMzApKSB7CisJCQljaFtpXSA9IDB4ODAgfCAoKGRhdGEudmFsdWUgPj4gMzApICYgMHgwMyk7CisJCQlpKys7CisJCX0KKwkJaWYgKGRhdGEudmFsdWUgPj0gKDFMIDw8IDIzKSkgeworCQkJY2hbaV0gPSAweDgwIHwgKChkYXRhLnZhbHVlID4+IDIzKSAmIDB4N2YpOworCQkJaSsrOworCQl9CisJCWlmIChkYXRhLnZhbHVlID49ICgxTCA8PCAxNikpIHsKKwkJCWNoW2ldID0gMHg4MCB8ICgoZGF0YS52YWx1ZSA+PiAxNikgJiAweDdmKTsKKwkJCWkrKzsKKwkJfQorCQlpZiAoZGF0YS52YWx1ZSA+PSAoMUwgPDwgOSkpIHsKKwkJCWNoW2ldID0gMHg4MCB8ICgoZGF0YS52YWx1ZSA+PiA5KSAmIDB4N2YpOworCQkJaSsrOworCQl9CisJCWNoW2ldID0gMHg4MCB8ICgoZGF0YS52YWx1ZSA+PiAyKSAmIDB4N2YpOworCQlpKys7CisJCWNoW2ldID0gKChkYXRhLnZhbHVlIDw8IDUpICYgMHg2MCkgfCAoZGF0YS5pbmRleCAmIDB4MWYpOworCQlpKys7CisJCXR0eV93cml0ZShmLCBjaCwgaSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfMjAwMl9vcGVuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWNoYXIgcG9ydFsyMF07CisKKwlzcHJpbnRmKHBvcnQsICIvZGV2L3R0eVMlZCIsIGRldnByaXYtPnBvcnQpOworCWRldnByaXYtPnR0eSA9IGZpbHBfb3Blbihwb3J0LCAwLCBPX1JEV1IpOworCWlmIChJU19FUlIoZGV2cHJpdi0+dHR5KSkgeworCQlwcmludGsoInNlcmlhbF8yMDAyOiBmaWxlIG9wZW4gZXJyb3IgPSAlbGRcbiIsCisJCQlQVFJfRVJSKGRldnByaXYtPnR0eSkpOworCX0gZWxzZSB7CisJCXN0cnVjdCBjb25maWdfdCB7CisKKwkJCWludCBraW5kOworCQkJaW50IGJpdHM7CisJCQlpbnQgbWluOworCQkJaW50IG1heDsKKwkJfTsKKworCQlzdHJ1Y3QgY29uZmlnX3QgZGlnX2luX2NvbmZpZ1szMl07CisJCXN0cnVjdCBjb25maWdfdCBkaWdfb3V0X2NvbmZpZ1szMl07CisJCXN0cnVjdCBjb25maWdfdCBjaGFuX2luX2NvbmZpZ1szMl07CisJCXN0cnVjdCBjb25maWdfdCBjaGFuX291dF9jb25maWdbMzJdOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkJZGlnX2luX2NvbmZpZ1tpXS5raW5kID0gMDsKKwkJCWRpZ19pbl9jb25maWdbaV0uYml0cyA9IDA7CisJCQlkaWdfaW5fY29uZmlnW2ldLm1pbiA9IDA7CisJCQlkaWdfaW5fY29uZmlnW2ldLm1heCA9IDA7CisJCQlkaWdfb3V0X2NvbmZpZ1tpXS5raW5kID0gMDsKKwkJCWRpZ19vdXRfY29uZmlnW2ldLmJpdHMgPSAwOworCQkJZGlnX291dF9jb25maWdbaV0ubWluID0gMDsKKwkJCWRpZ19vdXRfY29uZmlnW2ldLm1heCA9IDA7CisJCQljaGFuX2luX2NvbmZpZ1tpXS5raW5kID0gMDsKKwkJCWNoYW5faW5fY29uZmlnW2ldLmJpdHMgPSAwOworCQkJY2hhbl9pbl9jb25maWdbaV0ubWluID0gMDsKKwkJCWNoYW5faW5fY29uZmlnW2ldLm1heCA9IDA7CisJCQljaGFuX291dF9jb25maWdbaV0ua2luZCA9IDA7CisJCQljaGFuX291dF9jb25maWdbaV0uYml0cyA9IDA7CisJCQljaGFuX291dF9jb25maWdbaV0ubWluID0gMDsKKwkJCWNoYW5fb3V0X2NvbmZpZ1tpXS5tYXggPSAwOworCQl9CisKKwkJdHR5X3NldHNwZWVkKGRldnByaXYtPnR0eSwgZGV2cHJpdi0+c3BlZWQpOworCQlwb2xsX2NoYW5uZWwoZGV2cHJpdi0+dHR5LCAzMSk7CS8vIFN0YXJ0IHJlYWRpbmcgY29uZmlndXJhdGlvbgorCQl3aGlsZSAoMSkgeworCQkJc3RydWN0IHNlcmlhbF9kYXRhIGRhdGE7CisKKwkJCWRhdGEgPSBzZXJpYWxfcmVhZChkZXZwcml2LT50dHksIDEwMDApOworCQkJaWYgKGRhdGEua2luZCAhPSBpc19jaGFubmVsIHx8IGRhdGEuaW5kZXggIT0gMzEKKwkJCQl8fCAhKGRhdGEudmFsdWUgJiAweGUwKSkgeworCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgY29tbWFuZCwgY2hhbm5lbCwga2luZDsKKwkJCQlzdHJ1Y3QgY29uZmlnX3QgKmN1cl9jb25maWcgPSAwOworCisJCQkJY2hhbm5lbCA9IGRhdGEudmFsdWUgJiAweDFmOworCQkJCWtpbmQgPSAoZGF0YS52YWx1ZSA+PiA1KSAmIDB4NzsKKwkJCQljb21tYW5kID0gKGRhdGEudmFsdWUgPj4gOCkgJiAweDM7CisJCQkJc3dpdGNoIChraW5kKSB7CisJCQkJY2FzZSAxOnsKKwkJCQkJCWN1cl9jb25maWcgPSBkaWdfaW5fY29uZmlnOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMjp7CisJCQkJCQljdXJfY29uZmlnID0gZGlnX291dF9jb25maWc7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOnsKKwkJCQkJCWN1cl9jb25maWcgPSBjaGFuX2luX2NvbmZpZzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlIDQ6eworCQkJCQkJY3VyX2NvbmZpZyA9IGNoYW5fb3V0X2NvbmZpZzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlIDU6eworCQkJCQkJY3VyX2NvbmZpZyA9IGNoYW5faW5fY29uZmlnOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWlmIChjdXJfY29uZmlnKSB7CisJCQkJCWN1cl9jb25maWdbY2hhbm5lbF0ua2luZCA9IGtpbmQ7CisJCQkJCXN3aXRjaCAoY29tbWFuZCkgeworCQkJCQljYXNlIDA6eworCQkJCQkJCWN1cl9jb25maWdbY2hhbm5lbF0uCisJCQkJCQkJCWJpdHMgPQorCQkJCQkJCQkoZGF0YS4KKwkJCQkJCQkJdmFsdWUgPj4gMTApICYKKwkJCQkJCQkJMHgzZjsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDE6eworCQkJCQkJCWludCB1bml0LCBzaWduLCBtaW47CisJCQkJCQkJdW5pdCA9IChkYXRhLgorCQkJCQkJCQl2YWx1ZSA+PiAxMCkgJgorCQkJCQkJCQkweDc7CisJCQkJCQkJc2lnbiA9IChkYXRhLgorCQkJCQkJCQl2YWx1ZSA+PiAxMykgJgorCQkJCQkJCQkweDE7CisJCQkJCQkJbWluID0gKGRhdGEuCisJCQkJCQkJCXZhbHVlID4+IDE0KSAmCisJCQkJCQkJCTB4ZmZmZmY7CisKKwkJCQkJCQlzd2l0Y2ggKHVuaXQpIHsKKwkJCQkJCQljYXNlIDA6eworCQkJCQkJCQkJbWluID0gbWluICogMTAwMDAwMDsKKwkJCQkJCQkJfQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDE6eworCQkJCQkJCQkJbWluID0gbWluICogMTAwMDsKKwkJCQkJCQkJfQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDI6eworCQkJCQkJCQkJbWluID0gbWluICogMTsKKwkJCQkJCQkJfQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQkJaWYgKHNpZ24pIHsKKwkJCQkJCQkJbWluID0gLW1pbjsKKwkJCQkJCQl9CisJCQkJCQkJY3VyX2NvbmZpZ1tjaGFubmVsXS4KKwkJCQkJCQkJbWluID0gbWluOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMjp7CisJCQkJCQkJaW50IHVuaXQsIHNpZ24sIG1heDsKKwkJCQkJCQl1bml0ID0gKGRhdGEuCisJCQkJCQkJCXZhbHVlID4+IDEwKSAmCisJCQkJCQkJCTB4NzsKKwkJCQkJCQlzaWduID0gKGRhdGEuCisJCQkJCQkJCXZhbHVlID4+IDEzKSAmCisJCQkJCQkJCTB4MTsKKwkJCQkJCQltYXggPSAoZGF0YS4KKwkJCQkJCQkJdmFsdWUgPj4gMTQpICYKKwkJCQkJCQkJMHhmZmZmZjsKKworCQkJCQkJCXN3aXRjaCAodW5pdCkgeworCQkJCQkJCWNhc2UgMDp7CisJCQkJCQkJCQltYXggPSBtYXggKiAxMDAwMDAwOworCQkJCQkJCQl9CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMTp7CisJCQkJCQkJCQltYXggPSBtYXggKiAxMDAwOworCQkJCQkJCQl9CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMjp7CisJCQkJCQkJCQltYXggPSBtYXggKiAxOworCQkJCQkJCQl9CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJCQlpZiAoc2lnbikgeworCQkJCQkJCQltYXggPSAtbWF4OworCQkJCQkJCX0KKwkJCQkJCQljdXJfY29uZmlnW2NoYW5uZWxdLgorCQkJCQkJCQltYXggPSBtYXg7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQlmb3IgKGkgPSAwOyBpIDw9IDQ7IGkrKykgeworCQkJLy8gRmlsbCBpbiBzdWJkZXYgZGF0YQorCQkJc3RydWN0IGNvbmZpZ190ICpjOworCQkJdW5zaWduZWQgY2hhciAqbWFwcGluZyA9IDA7CisJCQlzdHJ1Y3Qgc2VyaWFsMjAwMl9yYW5nZV90YWJsZV90ICpyYW5nZSA9IDA7CisJCQlpbnQga2luZCA9IDA7CisKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSAwOnsKKwkJCQkJYyA9IGRpZ19pbl9jb25maWc7CisJCQkJCW1hcHBpbmcgPSBkZXZwcml2LT5kaWdpdGFsX2luX21hcHBpbmc7CisJCQkJCWtpbmQgPSAxOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgMTp7CisJCQkJCWMgPSBkaWdfb3V0X2NvbmZpZzsKKwkJCQkJbWFwcGluZyA9IGRldnByaXYtPmRpZ2l0YWxfb3V0X21hcHBpbmc7CisJCQkJCWtpbmQgPSAyOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgMjp7CisJCQkJCWMgPSBjaGFuX2luX2NvbmZpZzsKKwkJCQkJbWFwcGluZyA9IGRldnByaXYtPmFuYWxvZ19pbl9tYXBwaW5nOworCQkJCQlyYW5nZSA9IGRldnByaXYtPmluX3JhbmdlOworCQkJCQlraW5kID0gMzsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDM6eworCQkJCQljID0gY2hhbl9vdXRfY29uZmlnOworCQkJCQltYXBwaW5nID0gZGV2cHJpdi0+YW5hbG9nX291dF9tYXBwaW5nOworCQkJCQlyYW5nZSA9IGRldnByaXYtPm91dF9yYW5nZTsKKwkJCQkJa2luZCA9IDQ7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSA0OnsKKwkJCQkJYyA9IGNoYW5faW5fY29uZmlnOworCQkJCQltYXBwaW5nID0gZGV2cHJpdi0+ZW5jb2Rlcl9pbl9tYXBwaW5nOworCQkJCQlyYW5nZSA9IGRldnByaXYtPmluX3JhbmdlOworCQkJCQlraW5kID0gNTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OnsKKwkJCQkJYyA9IDA7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGMpIHsKKwkJCQlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKwkJCQljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqKnJhbmdlX3RhYmxlX2xpc3QgPSBOVUxMOworCQkJCXVuc2lnbmVkIGludCAqbWF4ZGF0YV9saXN0OworCQkJCWludCBqLCBjaGFuOworCisJCQkJZm9yIChjaGFuID0gMCwgaiA9IDA7IGogPCAzMjsgaisrKSB7CisJCQkJCWlmIChjW2pdLmtpbmQgPT0ga2luZCkgeworCQkJCQkJY2hhbisrOworCQkJCQl9CisJCQkJfQorCQkJCXMgPSAmZGV2LT5zdWJkZXZpY2VzW2ldOworCQkJCXMtPm5fY2hhbiA9IGNoYW47CisJCQkJcy0+bWF4ZGF0YSA9IDA7CisJCQkJaWYgKHMtPm1heGRhdGFfbGlzdCkgeworCQkJCQlrZnJlZShzLT5tYXhkYXRhX2xpc3QpOworCQkJCX0KKwkJCQlzLT5tYXhkYXRhX2xpc3QgPSBtYXhkYXRhX2xpc3QgPQorCQkJCQlrbWFsbG9jKHNpemVvZih1bnNpZ25lZCBpbnQpICogcy0+bl9jaGFuLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJCQlpZiAocy0+cmFuZ2VfdGFibGVfbGlzdCkgeworCQkJCQlrZnJlZShzLT5yYW5nZV90YWJsZV9saXN0KTsKKwkJCQl9CisJCQkJaWYgKHJhbmdlKSB7CisJCQkJCXMtPnJhbmdlX3RhYmxlID0gMDsKKwkJCQkJcy0+cmFuZ2VfdGFibGVfbGlzdCA9IHJhbmdlX3RhYmxlX2xpc3QgPQorCQkJCQkJa21hbGxvYyhzaXplb2YKKwkJCQkJCShzdHJ1Y3Qgc2VyaWFsMjAwMl9yYW5nZV90YWJsZV90KSAqCisJCQkJCQlzLT5uX2NoYW4sIEdGUF9LRVJORUwpOworCQkJCX0KKwkJCQlmb3IgKGNoYW4gPSAwLCBqID0gMDsgaiA8IDMyOyBqKyspIHsKKwkJCQkJaWYgKGNbal0ua2luZCA9PSBraW5kKSB7CisJCQkJCQlpZiAobWFwcGluZykgeworCQkJCQkJCW1hcHBpbmdbY2hhbl0gPSBqOworCQkJCQkJfQorCQkJCQkJaWYgKHJhbmdlKSB7CisJCQkJCQkJcmFuZ2Vbal0ubGVuZ3RoID0gMTsKKwkJCQkJCQlyYW5nZVtqXS5yYW5nZS5taW4gPQorCQkJCQkJCQljW2pdLm1pbjsKKwkJCQkJCQlyYW5nZVtqXS5yYW5nZS5tYXggPQorCQkJCQkJCQljW2pdLm1heDsKKwkJCQkJCQlyYW5nZV90YWJsZV9saXN0W2NoYW5dID0KKwkJCQkJCQkJKGNvbnN0IHN0cnVjdAorCQkJCQkJCQljb21lZGlfbHJhbmdlICopCisJCQkJCQkJCSZyYW5nZVtqXTsKKwkJCQkJCX0KKwkJCQkJCW1heGRhdGFfbGlzdFtjaGFuXSA9CisJCQkJCQkJKChsb25nIGxvbmcpMSA8PCBjW2pdLgorCQkJCQkJCWJpdHMpIC0gMTsKKwkJCQkJCWNoYW4rKzsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc2VyaWFsXzIwMDJfY2xvc2Uoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJaWYgKCFJU19FUlIoZGV2cHJpdi0+dHR5KSAmJiAoZGV2cHJpdi0+dHR5ICE9IDApKSB7CisJCWZpbHBfY2xvc2UoZGV2cHJpdi0+dHR5LCAwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9kaV9yaW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IG47CisJaW50IGNoYW47CisKKwljaGFuID0gZGV2cHJpdi0+ZGlnaXRhbF9pbl9tYXBwaW5nW0NSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpXTsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCXN0cnVjdCBzZXJpYWxfZGF0YSByZWFkOworCisJCXBvbGxfZGlnaXRhbChkZXZwcml2LT50dHksIGNoYW4pOworCQl3aGlsZSAoMSkgeworCQkJcmVhZCA9IHNlcmlhbF9yZWFkKGRldnByaXYtPnR0eSwgMTAwMCk7CisJCQlpZiAocmVhZC5raW5kICE9IGlzX2RpZ2l0YWwgfHwgcmVhZC5pbmRleCA9PSBjaGFuKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZGF0YVtuXSA9IHJlYWQudmFsdWU7CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHNlcmlhbDIwMDJfZG9fd2luc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuOworCisJY2hhbiA9IGRldnByaXYtPmRpZ2l0YWxfb3V0X21hcHBpbmdbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJc3RydWN0IHNlcmlhbF9kYXRhIHdyaXRlOworCisJCXdyaXRlLmtpbmQgPSBpc19kaWdpdGFsOworCQl3cml0ZS5pbmRleCA9IGNoYW47CisJCXdyaXRlLnZhbHVlID0gZGF0YVtuXTsKKwkJc2VyaWFsX3dyaXRlKGRldnByaXYtPnR0eSwgd3JpdGUpOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzZXJpYWwyMDAyX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBkZXZwcml2LT5hbmFsb2dfaW5fbWFwcGluZ1tDUl9DSEFOKGluc24tPmNoYW5zcGVjKV07CisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykgeworCQlzdHJ1Y3Qgc2VyaWFsX2RhdGEgcmVhZDsKKworCQlwb2xsX2NoYW5uZWwoZGV2cHJpdi0+dHR5LCBjaGFuKTsKKwkJd2hpbGUgKDEpIHsKKwkJCXJlYWQgPSBzZXJpYWxfcmVhZChkZXZwcml2LT50dHksIDEwMDApOworCQkJaWYgKHJlYWQua2luZCAhPSBpc19jaGFubmVsIHx8IHJlYWQuaW5kZXggPT0gY2hhbikgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWRhdGFbbl0gPSByZWFkLnZhbHVlOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzZXJpYWwyMDAyX2FvX3dpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBkZXZwcml2LT5hbmFsb2dfb3V0X21hcHBpbmdbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJc3RydWN0IHNlcmlhbF9kYXRhIHdyaXRlOworCisJCXdyaXRlLmtpbmQgPSBpc19jaGFubmVsOworCQl3cml0ZS5pbmRleCA9IGNoYW47CisJCXdyaXRlLnZhbHVlID0gZGF0YVtuXTsKKwkJc2VyaWFsX3dyaXRlKGRldnByaXYtPnR0eSwgd3JpdGUpOworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbbl07CisJfQorCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHNlcmlhbDIwMDJfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJCWRhdGFbbl0gPSBkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXTsKKwl9CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzZXJpYWwyMDAyX2VpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgbjsKKwlpbnQgY2hhbjsKKworCWNoYW4gPSBkZXZwcml2LT5lbmNvZGVyX2luX21hcHBpbmdbQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyldOworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJc3RydWN0IHNlcmlhbF9kYXRhIHJlYWQ7CisKKwkJcG9sbF9jaGFubmVsKGRldnByaXYtPnR0eSwgY2hhbik7CisJCXdoaWxlICgxKSB7CisJCQlyZWFkID0gc2VyaWFsX3JlYWQoZGV2cHJpdi0+dHR5LCAxMDAwKTsKKwkJCWlmIChyZWFkLmtpbmQgIT0gaXNfY2hhbm5lbCB8fCByZWFkLmluZGV4ID09IGNoYW4pIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlkYXRhW25dID0gcmVhZC52YWx1ZTsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisKKwlwcmludGsoImNvbWVkaSVkOiBzZXJpYWwyMDAyOiAiLCBkZXYtPm1pbm9yKTsKKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IHNlcmlhbDIwMDJfcHJpdmF0ZSkpIDwgMCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZGV2LT5vcGVuID0gc2VyaWFsXzIwMDJfb3BlbjsKKwlkZXYtPmNsb3NlID0gc2VyaWFsXzIwMDJfY2xvc2U7CisJZGV2cHJpdi0+cG9ydCA9IGl0LT5vcHRpb25zWzBdOworCWRldnByaXYtPnNwZWVkID0gaXQtPm9wdGlvbnNbMV07CisJcHJpbnRrKCIvZGV2L3R0eVMlZCBAICVkXG4iLCBkZXZwcml2LT5wb3J0LCBkZXZwcml2LT5zcGVlZCk7CisKKwlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDUpIDwgMCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBkaWdpdGFsIGlucHV0IHN1YmRldmljZSAqLworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAwOworCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEU7CisJcy0+bl9jaGFuID0gMDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fcmVhZCA9ICZzZXJpYWwyMDAyX2RpX3JpbnNuOworCisJLyogZGlnaXRhbCBvdXRwdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0RPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEU7CisJcy0+bl9jaGFuID0gMDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fd3JpdGUgPSAmc2VyaWFsMjAwMl9kb193aW5zbjsKKworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX0dST1VORDsKKwlzLT5uX2NoYW4gPSAwOworCXMtPm1heGRhdGEgPSAxOworCXMtPnJhbmdlX3RhYmxlID0gMDsKKwlzLT5pbnNuX3JlYWQgPSAmc2VyaWFsMjAwMl9haV9yaW5zbjsKKworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDM7CisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEU7CisJcy0+bl9jaGFuID0gMDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9IDA7CisJcy0+aW5zbl93cml0ZSA9ICZzZXJpYWwyMDAyX2FvX3dpbnNuOworCXMtPmluc25fcmVhZCA9ICZzZXJpYWwyMDAyX2FvX3JpbnNuOworCisJLyogZW5jb2RlciBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzID0gZGV2LT5zdWJkZXZpY2VzICsgNDsKKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQ09VTlRFUjsKKwlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfTFNBTVBMOworCXMtPm5fY2hhbiA9IDA7CisJcy0+bWF4ZGF0YSA9IDE7CisJcy0+cmFuZ2VfdGFibGUgPSAwOworCXMtPmluc25fcmVhZCA9ICZzZXJpYWwyMDAyX2VpX3JpbnNuOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsMjAwMl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CisJaW50IGk7CisKKwlwcmludGsoImNvbWVkaSVkOiBzZXJpYWwyMDAyOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJcyA9ICZkZXYtPnN1YmRldmljZXNbaV07CisJCWlmIChzLT5tYXhkYXRhX2xpc3QpIHsKKwkJCWtmcmVlKHMtPm1heGRhdGFfbGlzdCk7CisJCX0KKwkJaWYgKHMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKKwkJCWtmcmVlKHMtPnJhbmdlX3RhYmxlX2xpc3QpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitDT01FRElfSU5JVENMRUFOVVAoZHJpdmVyX3NlcmlhbDIwMDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NrZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9za2VsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc3MDBkMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9za2VsLmMKQEAgLTAsMCArMSw2MjQgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvc2tlbC5jCisgICAgU2tlbGV0b24gY29kZSBmb3IgYSBDb21lZGkgZHJpdmVyCisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBza2VsCitEZXNjcmlwdGlvbjogU2tlbGV0b24gZHJpdmVyLCBhbiBleGFtcGxlIGZvciBkcml2ZXIgd3JpdGVycworRGV2aWNlczoKK0F1dGhvcjogZHMKK1VwZGF0ZWQ6IE1vbiwgMTggTWFyIDIwMDIgMTU6MzQ6MDEgLTA4MDAKK1N0YXR1czogd29ya3MKKworVGhpcyBkcml2ZXIgaXMgYSBkb2N1bWVudGVkIGV4YW1wbGUgb24gaG93IENvbWVkaSBkcml2ZXJzIGFyZQord3JpdHRlbi4KKworQ29uZmlndXJhdGlvbiBPcHRpb25zOgorICBub25lCisqLworCisvKgorICogVGhlIHByZXZpb3VzIGJsb2NrIGNvbW1lbnQgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlCisgKiBkb2N1bWVudGF0aW9uIGluIENvbWVkaSBhbmQgQ29tZWRpbGliLiAgVGhlIGZpZWxkczoKKyAqCisgKiBEcml2ZXI6IHRoZSBuYW1lIG9mIHRoZSBkcml2ZXIKKyAqIERlc2NyaXB0aW9uOiBhIHNob3J0IHBocmFzZSBkZXNjcmliaW5nIHRoZSBkcml2ZXIuICBEb24ndCBsaXN0IGJvYXJkcy4KKyAqIERldmljZXM6IGEgZnVsbCBsaXN0IG9mIHRoZSBib2FyZHMgdGhhdCBhdHRlbXB0IHRvIGJlIHN1cHBvcnRlZCBieQorICogICB0aGUgZHJpdmVyLiAgRm9ybWF0IGlzICIobWFudWZhY3R1cmVyKSBib2FyZCBuYW1lIFtjb21lZGkgbmFtZV0iLAorICogICB3aGVyZSBjb21lZGlfbmFtZSBpcyB0aGUgbmFtZSB0aGF0IGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBib2FyZC4KKyAqICAgU2VlIHRoZSBjb21tZW50IG5lYXIgYm9hcmRfbmFtZTogaW4gdGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZQorICogICBiZWxvdy4gIElmIChtYW51ZmFjdHVyZXIpIG9yIFtjb21lZGkgbmFtZV0gaXMgbWlzc2luZywgdGhlIHByZXZpb3VzCisgKiAgIHZhbHVlIGlzIHVzZWQuCisgKiBBdXRob3I6IHlvdQorICogVXBkYXRlZDogZGF0ZSB3aGVuIHRoZSBfZG9jdW1lbnRhdGlvbl8gd2FzIGxhc3QgdXBkYXRlZC4gIFVzZSAnZGF0ZSAtUicKKyAqICAgdG8gZ2V0IGEgdmFsdWUgZm9yIHRoaXMuCisgKiBTdGF0dXM6IGEgb25lLXdvcmQgZGVzY3JpcHRpb24gb2YgdGhlIHN0YXR1cy4gIFZhbGlkIHZhbHVlcyBhcmU6CisgKiAgIHdvcmtzIC0gZHJpdmVyIHdvcmtzIGNvcnJlY3RseSBvbiBtb3N0IGJvYXJkcyBzdXBwb3J0ZWQsIGFuZAorICogICAgIHBhc3NlcyBjb21lZGlfdGVzdC4KKyAqICAgdW5rbm93biAtIHVua25vd24uICBVc3VhbGx5IHB1dCB0aGVyZSBieSBkcy4KKyAqICAgZXhwZXJpbWVudGFsIC0gbWF5IG5vdCB3b3JrIGluIGFueSBwYXJ0aWN1bGFyIHJlbGVhc2UuICBBdXRob3IKKyAqICAgICBwcm9iYWJseSB3YW50cyBhc3Npc3RhbmNlIHRlc3RpbmcgaXQuCisgKiAgIGJpdHJvdHRlbiAtIGRyaXZlciBoYXMgbm90IGJlZW4gdXBkYXRlIGluIGEgbG9uZyB0aW1lLCBwcm9iYWJseQorICogICAgIGRvZXNuJ3Qgd29yaywgYW5kIHByb2JhYmx5IGlzIG1pc3Npbmcgc3VwcG9ydCBmb3Igc2lnbmlmaWNhbnQKKyAqICAgICBDb21lZGkgaW50ZXJmYWNlIGZlYXR1cmVzLgorICogICB1bnRlc3RlZCAtIGF1dGhvciBwcm9iYWJseSB3cm90ZSBpdCAiYmxpbmQiLCBhbmQgaXMgYmVsaWV2ZWQgdG8KKyAqICAgICB3b3JrLCBidXQgbm8gY29uZmlybWF0aW9uLgorICoKKyAqIFRoZXNlIGhlYWRlcnMgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSwgYW5kIGFueSBjb21tZW50cworICogeW91IHdpc2ggdG8gc2F5IGFib3V0IHRoZSBkcml2ZXIuICBUaGUgY29tbWVudCBhcmVhIGlzIHRoZSBwbGFjZQorICogdG8gcHV0IGFueSBrbm93biBidWdzLCBsaW1pdGF0aW9ucywgdW5zdXBwb3J0ZWQgZmVhdHVyZXMsIHN1cHBvcnRlZAorICogY29tbWFuZCB0cmlnZ2Vycywgd2hldGhlciBvciBub3QgY29tbWFuZHMgYXJlIHN1cHBvcnRlZCBvbiBwYXJ0aWN1bGFyCisgKiBzdWJkZXZpY2VzLCBldGMuCisgKgorICogU29tZXdoZXJlIGluIHRoZSBjb21tZW50IHNob3VsZCBiZSBpbmZvcm1hdGlvbiBhYm91dCBjb25maWd1cmF0aW9uCisgKiBvcHRpb25zIHRoYXQgYXJlIHVzZWQgd2l0aCBjb21lZGlfY29uZmlnLgorICovCisKKyNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgkJLyogZm9yIFBDSSBkZXZpY2VzICovCisKKy8qIEltYWdpbmFyeSByZWdpc3RlcnMgZm9yIHRoZSBpbWFnaW5hcnkgYm9hcmQgKi8KKworI2RlZmluZSBTS0VMX1NJWkUgMAorCisjZGVmaW5lIFNLRUxfU1RBUlRfQUlfQ09OVgkwCisjZGVmaW5lIFNLRUxfQUlfUkVBRAkJMAorCisvKgorICogQm9hcmQgZGVzY3JpcHRpb25zIGZvciB0d28gaW1hZ2luYXJ5IGJvYXJkcy4gIERlc2NyaWJpbmcgdGhlCisgKiBib2FyZHMgaW4gdGhpcyB3YXkgaXMgb3B0aW9uYWwsIGFuZCBjb21wbGV0ZWx5IGRyaXZlci1kZXBlbmRlbnQuCisgKiBTb21lIGRyaXZlcnMgdXNlIGFycmF5cyBzdWNoIGFzIHRoaXMsIG90aGVyIGRvIG5vdC4KKyAqLworc3RydWN0IHNrZWxfYm9hcmQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGFpX2NoYW5zOworCWludCBhaV9iaXRzOworCWludCBoYXZlX2RpbzsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2tlbF9ib2FyZCBza2VsX2JvYXJkc1tdID0geworCXsKKwkgICAgICBuYW1lOgkic2tlbC0xMDAiLAorCSAgICAgIGFpX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGhhdmVfZGlvOjEsCisJCX0sCisJeworCSAgICAgIG5hbWU6CSJza2VsLTIwMCIsCisJICAgICAgYWlfY2hhbnM6OCwKKwkgICAgICBhaV9iaXRzOgkxNiwKKwkgICAgICBoYXZlX2RpbzowLAorCQl9LAorfTsKKworLyogVGhpcyBpcyB1c2VkIGJ5IG1vZHByb2JlIHRvIHRyYW5zbGF0ZSBQQ0kgSURzIHRvIGRyaXZlcnMuICBTaG91bGQKKyAqIG9ubHkgYmUgdXNlZCBmb3IgUENJIGFuZCBJU0EtUG5QIGRldmljZXMgKi8KKy8qIFBsZWFzZSBhZGQgeW91ciBQQ0kgdmVuZG9yIElEIHRvIGNvbWVkaWRldi5oLCBhbmQgaXQgd2lsbCBiZSBmb3J3YXJkZWQKKyAqIHVwc3RyZWFtLiAqLworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NLRUwgMHhkYWZlCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc2tlbF9wY2lfdGFibGUpID0geworCXtQQ0lfVkVORE9SX0lEX1NLRUwsIDB4MDEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCisJe1BDSV9WRU5ET1JfSURfU0tFTCwgMHgwMjAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7MH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBza2VsX3BjaV90YWJsZSk7CisKKy8qCisgKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlCisgKi8KKyNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IHNrZWxfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKKyAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworc3RydWN0IHNrZWxfcHJpdmF0ZSB7CisKKwlpbnQgZGF0YTsKKworCS8qIHdvdWxkIGJlIHVzZWZ1bCBmb3IgYSBQQ0kgZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisKKwkvKiBVc2VkIGZvciBBTyByZWFkYmFjayAqLworCXVuc2lnbmVkIGludCBhb19yZWFkYmFja1syXTsKK307CisKKy8qCisgKiBtb3N0IGRyaXZlcnMgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWFjcm8gdG8gbWFrZSBpdCBlYXN5IHRvCisgKiBhY2Nlc3MgdGhlIHByaXZhdGUgc3RydWN0dXJlLgorICovCisjZGVmaW5lIGRldnByaXYgKChzdHJ1Y3Qgc2tlbF9wcml2YXRlICopZGV2LT5wcml2YXRlKQorCisvKgorICogVGhlIHN0cnVjdCBjb21lZGlfZHJpdmVyIHN0cnVjdHVyZSB0ZWxscyB0aGUgQ29tZWRpIGNvcmUgbW9kdWxlCisgKiB3aGljaCBmdW5jdGlvbnMgdG8gY2FsbCB0byBjb25maWd1cmUvZGVjb25maWd1cmUgKGF0dGFjaC9kZXRhY2gpCisgKiB0aGUgYm9hcmQsIGFuZCBhbHNvIGFib3V0IHRoZSBrZXJuZWwgbW9kdWxlIHRoYXQgY29udGFpbnMKKyAqIHRoZSBkZXZpY2UgY29kZS4KKyAqLworc3RhdGljIGludCBza2VsX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IHNrZWxfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfc2tlbCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJkdW1teSIsCisgICAgICBtb2R1bGU6VEhJU19NT0RVTEUsCisgICAgICBhdHRhY2g6c2tlbF9hdHRhY2gsCisgICAgICBkZXRhY2g6c2tlbF9kZXRhY2gsCisvKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1lbWJlcnMgaWYgeW91IGFyZQorICogd3JpdGluZyBhIGRyaXZlciBmb3IgYSBJU0EgUG5QIG9yIFBDSSBjYXJkICovCisJLyogTW9zdCBkcml2ZXJzIHdpbGwgc3VwcG9ydCBtdWx0aXBsZSB0eXBlcyBvZiBib2FyZHMgYnkKKwkgKiBoYXZpbmcgYW4gYXJyYXkgb2YgYm9hcmQgc3RydWN0dXJlcy4gIFRoZXNlIHdlcmUgZGVmaW5lZAorCSAqIGluIHNrZWxfYm9hcmRzW10gYWJvdmUuICBOb3RlIHRoYXQgdGhlIGVsZW1lbnQgJ25hbWUnCisJICogd2FzIGZpcnN0IGluIHRoZSBzdHJ1Y3R1cmUgLS0gQ29tZWRpIHVzZXMgdGhpcyBmYWN0IHRvCisJICogZXh0cmFjdCB0aGUgbmFtZSBvZiB0aGUgYm9hcmQgd2l0aG91dCBrbm93aW5nIGFueSBkZXRhaWxzCisJICogYWJvdXQgdGhlIHN0cnVjdHVyZSBleGNlcHQgZm9yIGl0cyBsZW5ndGguCisJICogV2hlbiBhIGRldmljZSBpcyBhdHRhY2hlZCAoYnkgY29tZWRpX2NvbmZpZyksIHRoZSBuYW1lCisJICogb2YgdGhlIGRldmljZSBpcyBnaXZlbiB0byBDb21lZGksIGFuZCBDb21lZGkgdHJpZXMgdG8KKwkgKiBtYXRjaCBpdCBieSBnb2luZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJvYXJkIG5hbWVzLiAgSWYKKwkgKiB0aGVyZSBpcyBhIG1hdGNoLCB0aGUgYWRkcmVzcyBvZiB0aGUgcG9pbnRlciBpcyBwdXQKKwkgKiBpbnRvIGRldi0+Ym9hcmRfcHRyIGFuZCBkcml2ZXItPmF0dGFjaCgpIGlzIGNhbGxlZC4KKwkgKgorCSAqIE5vdGUgdGhhdCB0aGVzZSBhcmUgbm90IG5lY2Vzc2FyeSBpZiB5b3UgY2FuIGRldGVybWluZQorCSAqIHRoZSB0eXBlIG9mIGJvYXJkIGluIHNvZnR3YXJlLiAgSVNBIFBuUCwgUENJLCBhbmQgUENNQ0lBCisJICogZGV2aWNlcyBhcmUgc3VjaCBib2FyZHMuCisJICovCisgICAgICBib2FyZF9uYW1lOiZza2VsX2JvYXJkc1swXS5uYW1lLAorICAgICAgb2Zmc2V0OnNpemVvZihzdHJ1Y3Qgc2tlbF9ib2FyZCksCisgICAgICBudW1fbmFtZXM6c2l6ZW9mKHNrZWxfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3Qgc2tlbF9ib2FyZCksCit9OworCitzdGF0aWMgaW50IHNrZWxfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgc2tlbF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBza2VsX2FvX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHNrZWxfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBza2VsX2Rpb19pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCBza2VsX2FpX2NtZHRlc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqIGNtZCk7CitzdGF0aWMgaW50IHNrZWxfbnNfdG9fdGltZXIodW5zaWduZWQgaW50ICpucywgaW50IHJvdW5kKTsKKworLyoKKyAqIEF0dGFjaCBpcyBjYWxsZWQgYnkgdGhlIENvbWVkaSBjb3JlIHRvIGNvbmZpZ3VyZSB0aGUgZHJpdmVyCisgKiBmb3IgYSBwYXJ0aWN1bGFyIGJvYXJkLiAgSWYgeW91IHNwZWNpZmllZCBhIGJvYXJkX25hbWUgYXJyYXkKKyAqIGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCBkZXYtPmJvYXJkX3B0ciBjb250YWlucyB0aGF0CisgKiBhZGRyZXNzLgorICovCitzdGF0aWMgaW50IHNrZWxfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KQoreworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCisJcHJpbnRrKCJjb21lZGklZDogc2tlbDogIiwgZGV2LT5taW5vcik7CisKKy8qCisgKiBJZiB5b3UgY2FuIHByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGV2aWNlIGluIGEgc2VyaWVzCisgKiBpdCBpcywgdGhpcyBpcyB0aGUgcGxhY2UgdG8gZG8gaXQuICBPdGhlcndpc2UsIGRldi0+Ym9hcmRfcHRyCisgKiBzaG91bGQgYWxyZWFkeSBiZSBpbml0aWFsaXplZC4KKyAqLworCS8qIGRldi0+Ym9hcmRfcHRyID0gc2tlbF9wcm9iZShkZXYsIGl0KTsgKi8KKworLyoKKyAqIEluaXRpYWxpemUgZGV2LT5ib2FyZF9uYW1lLiAgTm90ZSB0aGF0IHdlIGNhbiB1c2UgdGhlICJ0aGlzYm9hcmQiCisgKiBtYWNybyBub3csIHNpbmNlIHdlIGp1c3QgaW5pdGlhbGl6ZWQgaXQgaW4gdGhlIGxhc3QgbGluZS4KKyAqLworCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKKworLyoKKyAqIEFsbG9jYXRlIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBhcmVhLiAgYWxsb2NfcHJpdmF0ZSgpIGlzIGEKKyAqIGNvbnZlbmllbnQgbWFjcm8gZGVmaW5lZCBpbiBjb21lZGlkZXYuaC4KKyAqLworCWlmIChhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBza2VsX3ByaXZhdGUpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisvKgorICogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiAgYWxsb2Nfc3ViZGV2aWNlKCkgaXMgYQorICogY29udmVuaWVudCBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLgorICovCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAzKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogZGV2LT5yZWFkX3N1YmRldj1zOyAqLworCS8qIGFuYWxvZyBpbnB1dCBzdWJkZXZpY2UgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CisJLyogd2Ugc3VwcG9ydCBzaW5nbGUtZW5kZWQgKGdyb3VuZCkgYW5kIGRpZmZlcmVudGlhbCAqLworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfRElGRjsKKwlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFpX2NoYW5zOworCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpIC0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyMTA7CisJcy0+bGVuX2NoYW5saXN0ID0gMTY7CS8qIFRoaXMgaXMgdGhlIG1heGltdW0gY2hhbmxpc3QgbGVuZ3RoIHRoYXQKKwkJCQkgICB0aGUgYm9hcmQgY2FuIGhhbmRsZSAqLworCXMtPmluc25fcmVhZCA9IHNrZWxfYWlfcmluc247CisvKgorKiAgICAgICBzLT5zdWJkZXZfZmxhZ3MgfD0gU0RGX0NNRF9SRUFEOworKiAgICAgICBzLT5kb19jbWQgPSBza2VsX2FpX2NtZDsKKyovCisJcy0+ZG9fY21kdGVzdCA9IHNrZWxfYWlfY21kdGVzdDsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAxOworCS8qIGFuYWxvZyBvdXRwdXQgc3ViZGV2aWNlICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAxOworCXMtPm1heGRhdGEgPSAweGZmZmY7CisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjU7CisJcy0+aW5zbl93cml0ZSA9IHNrZWxfYW9fd2luc247CisJcy0+aW5zbl9yZWFkID0gc2tlbF9hb19yaW5zbjsKKworCXMgPSBkZXYtPnN1YmRldmljZXMgKyAyOworCS8qIGRpZ2l0YWwgaS9vIHN1YmRldmljZSAqLworCWlmICh0aGlzYm9hcmQtPmhhdmVfZGlvKSB7CisJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwkJcy0+bl9jaGFuID0gMTY7CisJCXMtPm1heGRhdGEgPSAxOworCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCQlzLT5pbnNuX2JpdHMgPSBza2VsX2Rpb19pbnNuX2JpdHM7CisJCXMtPmluc25fY29uZmlnID0gc2tlbF9kaW9faW5zbl9jb25maWc7CisJfSBlbHNlIHsKKwkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKKwl9CisKKwlwcmludGsoImF0dGFjaGVkXG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorICogX2RldGFjaCBpcyBjYWxsZWQgdG8gZGVjb25maWd1cmUgYSBkZXZpY2UuICBJdCBzaG91bGQgZGVhbGxvY2F0ZQorICogcmVzb3VyY2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCB3aGVuIF9hdHRhY2goKSBmYWlscywgc28gaXQgc2hvdWxkIGJlCisgKiBjYXJlZnVsIG5vdCB0byByZWxlYXNlIHJlc291cmNlcyB0aGF0IHdlcmUgbm90IG5lY2Vzc2FyaWx5CisgKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiAgZGV2LT5wcml2YXRlIGFuZCBkZXYtPnN1YmRldmljZXMgYXJlCisgKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLgorICovCitzdGF0aWMgaW50IHNrZWxfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCXByaW50aygiY29tZWRpJWQ6IHNrZWw6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICJpbnN0cnVjdGlvbnMiIHJlYWQvd3JpdGUgZGF0YSBpbiAib25lLXNob3QiIG9yICJzb2Z0d2FyZS10cmlnZ2VyZWQiCisgKiBtb2RlLgorICovCitzdGF0aWMgaW50IHNrZWxfYWlfcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBuLCBpOworCXVuc2lnbmVkIGludCBkOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwkvKiBhIHR5cGljYWwgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgKi8KKworCS8qIHdyaXRlIGNoYW5uZWwgdG8gbXVsdGlwbGV4ZXIgKi8KKwkvKiBvdXR3KGNoYW4sZGV2LT5pb2Jhc2UgKyBTS0VMX01VWCk7ICovCisKKwkvKiBkb24ndCB3YWl0IGZvciBtdXggdG8gc2V0dGxlICovCisKKwkvKiBjb252ZXJ0IG4gc2FtcGxlcyAqLworCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwkJLyogdHJpZ2dlciBjb252ZXJzaW9uICovCisJCS8qIG91dHcoMCxkZXYtPmlvYmFzZSArIFNLRUxfQ09OVkVSVCk7ICovCisKKyNkZWZpbmUgVElNRU9VVCAxMDAKKwkJLyogd2FpdCBmb3IgY29udmVyc2lvbiB0byBlbmQgKi8KKwkJZm9yIChpID0gMDsgaSA8IFRJTUVPVVQ7IGkrKykgeworCQkJc3RhdHVzID0gMTsKKwkJCS8qIHN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIFNLRUxfU1RBVFVTKTsgKi8KKwkJCWlmIChzdGF0dXMpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gVElNRU9VVCkgeworCQkJLyogcnRfcHJpbnRrKCkgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBwcmludGsoKQorCQkJICogd2hlbmV2ZXIgdGhlIGNvZGUgY2FuIGJlIGNhbGxlZCBmcm9tIHJlYWwtdGltZS4gKi8KKwkJCXJ0X3ByaW50aygidGltZW91dFxuIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCisJCS8qIHJlYWQgZGF0YSAqLworCQkvKiBkID0gaW53KGRldi0+aW9iYXNlICsgU0tFTF9BSV9EQVRBKTsgKi8KKwkJZCA9IDA7CisKKwkJLyogbWFuZ2xlIHRoZSBkYXRhIGFzIG5lY2Vzc2FyeSAqLworCQlkIF49IDEgPDwgKHRoaXNib2FyZC0+YWlfYml0cyAtIDEpOworCisJCWRhdGFbbl0gPSBkOworCX0KKworCS8qIHJldHVybiB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcmVhZC93cml0dGVuICovCisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgc2tlbF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9jbWQgKiBjbWQpCit7CisJaW50IGVyciA9IDA7CisJaW50IHRtcDsKKworCS8qIGNtZHRlc3QgdGVzdHMgYSBwYXJ0aWN1bGFyIGNvbW1hbmQgdG8gc2VlIGlmIGl0IGlzIHZhbGlkLgorCSAqIFVzaW5nIHRoZSBjbWR0ZXN0IGlvY3RsLCBhIHVzZXIgY2FuIGNyZWF0ZSBhIHZhbGlkIGNtZAorCSAqIGFuZCB0aGVuIGhhdmUgaXQgZXhlY3V0ZXMgYnkgdGhlIGNtZCBpb2N0bC4KKwkgKgorCSAqIGNtZHRlc3QgcmV0dXJucyAxLDIsMyw0IG9yIDAsIGRlcGVuZGluZyBvbiB3aGljaCB0ZXN0cworCSAqIHRoZSBjb21tYW5kIHBhc3Nlcy4gKi8KKworCS8qIHN0ZXAgMTogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdHJpdmlhbGx5IHZhbGlkICovCisKKwl0bXAgPSBjbWQtPnN0YXJ0X3NyYzsKKwljbWQtPnN0YXJ0X3NyYyAmPSBUUklHX05PVzsKKwlpZiAoIWNtZC0+c3RhcnRfc3JjIHx8IHRtcCAhPSBjbWQtPnN0YXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fYmVnaW5fc3JjOworCWNtZC0+c2Nhbl9iZWdpbl9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5zY2FuX2JlZ2luX3NyYyB8fCB0bXAgIT0gY21kLT5zY2FuX2JlZ2luX3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPmNvbnZlcnRfc3JjOworCWNtZC0+Y29udmVydF9zcmMgJj0gVFJJR19USU1FUiB8IFRSSUdfRVhUOworCWlmICghY21kLT5jb252ZXJ0X3NyYyB8fCB0bXAgIT0gY21kLT5jb252ZXJ0X3NyYykKKwkJZXJyKys7CisKKwl0bXAgPSBjbWQtPnNjYW5fZW5kX3NyYzsKKwljbWQtPnNjYW5fZW5kX3NyYyAmPSBUUklHX0NPVU5UOworCWlmICghY21kLT5zY2FuX2VuZF9zcmMgfHwgdG1wICE9IGNtZC0+c2Nhbl9lbmRfc3JjKQorCQllcnIrKzsKKworCXRtcCA9IGNtZC0+c3RvcF9zcmM7CisJY21kLT5zdG9wX3NyYyAmPSBUUklHX0NPVU5UIHwgVFJJR19OT05FOworCWlmICghY21kLT5zdG9wX3NyYyB8fCB0bXAgIT0gY21kLT5zdG9wX3NyYykKKwkJZXJyKys7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gMTsKKworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisKKwkvKiBub3RlIHRoYXQgbXV0dWFsIGNvbXBhdGlibGl0eSBpcyBub3QgYW4gaXNzdWUgaGVyZSAqLworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfVElNRVIgJiYKKwkJY21kLT5zY2FuX2JlZ2luX3NyYyAhPSBUUklHX0VYVCkKKwkJZXJyKys7CisJaWYgKGNtZC0+Y29udmVydF9zcmMgIT0gVFJJR19USU1FUiAmJiBjbWQtPmNvbnZlcnRfc3JjICE9IFRSSUdfRVhUKQorCQllcnIrKzsKKwlpZiAoY21kLT5zdG9wX3NyYyAhPSBUUklHX0NPVU5UICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQorCQllcnIrKzsKKworCWlmIChlcnIpCisJCXJldHVybiAyOworCisJLyogc3RlcCAzOiBtYWtlIHN1cmUgYXJndW1lbnRzIGFyZSB0cml2aWFsbHkgY29tcGF0aWJsZSAqLworCisJaWYgKGNtZC0+c3RhcnRfYXJnICE9IDApIHsKKwkJY21kLT5zdGFydF9hcmcgPSAwOworCQllcnIrKzsKKwl9CisjZGVmaW5lIE1BWF9TUEVFRAkxMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworI2RlZmluZSBNSU5fU1BFRUQJMTAwMDAwMDAwMAkvKiBpbiBuYW5vc2Vjb25kcyAqLworCisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgeworCQlpZiAoY21kLT5zY2FuX2JlZ2luX2FyZyA8IE1BWF9TUEVFRCkgeworCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA9IE1BWF9TUEVFRDsKKwkJCWVycisrOworCQl9CisJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnID4gTUlOX1NQRUVEKSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gTUlOX1NQRUVEOworCQkJZXJyKys7CisJCX0KKwl9IGVsc2UgeworCQkvKiBleHRlcm5hbCB0cmlnZ2VyICovCisJCS8qIHNob3VsZCBiZSBsZXZlbC9lZGdlLCBoaS9sbyBzcGVjaWZpY2F0aW9uIGhlcmUgKi8KKwkJLyogc2hvdWxkIHNwZWNpZnkgbXVsdGlwbGUgZXh0ZXJuYWwgdHJpZ2dlcnMgKi8KKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9hcmcgPiA5KSB7CisJCQljbWQtPnNjYW5fYmVnaW5fYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPCBNQVhfU1BFRUQpIHsKKwkJCWNtZC0+Y29udmVydF9hcmcgPSBNQVhfU1BFRUQ7CisJCQllcnIrKzsKKwkJfQorCQlpZiAoY21kLT5jb252ZXJ0X2FyZyA+IE1JTl9TUEVFRCkgeworCQkJY21kLT5jb252ZXJ0X2FyZyA9IE1JTl9TUEVFRDsKKwkJCWVycisrOworCQl9CisJfSBlbHNlIHsKKwkJLyogZXh0ZXJuYWwgdHJpZ2dlciAqLworCQkvKiBzZWUgYWJvdmUgKi8KKwkJaWYgKGNtZC0+Y29udmVydF9hcmcgPiA5KSB7CisJCQljbWQtPmNvbnZlcnRfYXJnID0gOTsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CisJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CisJCWVycisrOworCX0KKwlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJCWlmIChjbWQtPnN0b3BfYXJnID4gMHgwMGZmZmZmZikgeworCQkJY21kLT5zdG9wX2FyZyA9IDB4MDBmZmZmZmY7CisJCQllcnIrKzsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFRSSUdfTk9ORSAqLworCQlpZiAoY21kLT5zdG9wX2FyZyAhPSAwKSB7CisJCQljbWQtPnN0b3BfYXJnID0gMDsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDM7CisKKwkvKiBzdGVwIDQ6IGZpeCB1cCBhbnkgYXJndW1lbnRzICovCisKKwlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJCXRtcCA9IGNtZC0+c2Nhbl9iZWdpbl9hcmc7CisJCXNrZWxfbnNfdG9fdGltZXIoJmNtZC0+c2Nhbl9iZWdpbl9hcmcsCisJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKKwkJaWYgKHRtcCAhPSBjbWQtPnNjYW5fYmVnaW5fYXJnKQorCQkJZXJyKys7CisJfQorCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwkJdG1wID0gY21kLT5jb252ZXJ0X2FyZzsKKwkJc2tlbF9uc190b190aW1lcigmY21kLT5jb252ZXJ0X2FyZywKKwkJCWNtZC0+ZmxhZ3MgJiBUUklHX1JPVU5EX01BU0spOworCQlpZiAodG1wICE9IGNtZC0+Y29udmVydF9hcmcpCisJCQllcnIrKzsKKwkJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUiAmJgorCQkJY21kLT5zY2FuX2JlZ2luX2FyZyA8CisJCQljbWQtPmNvbnZlcnRfYXJnICogY21kLT5zY2FuX2VuZF9hcmcpIHsKKwkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPQorCQkJCWNtZC0+Y29udmVydF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKKwkJCWVycisrOworCQl9CisJfQorCisJaWYgKGVycikKKwkJcmV0dXJuIDQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHJlcXVpcmUgYSBwYXJ0aWN1bGFyIGZvcm0sIHRoaXMgaXMganVzdAorICogd2hhdCBoYXBwZW5zIHRvIGJlIHVzZWQgaW4gc29tZSBvZiB0aGUgZHJpdmVycy4gIEl0IHNob3VsZAorICogY29udmVydCBucyBuYW5vc2Vjb25kcyB0byBhIGNvdW50ZXIgdmFsdWUgc3VpdGFibGUgZm9yIHByb2dyYW1taW5nCisgKiB0aGUgZGV2aWNlLiAgQWxzbywgaXQgc2hvdWxkIGFkanVzdCBucyBzbyB0aGF0IGl0IGNvb3Jlc3BvbmRzIHRvCisgKiB0aGUgYWN0dWFsIHRpbWUgdGhhdCB0aGUgZGV2aWNlIHdpbGwgdXNlLiAqLworc3RhdGljIGludCBza2VsX25zX3RvX3RpbWVyKHVuc2lnbmVkIGludCAqbnMsIGludCByb3VuZCkKK3sKKwkvKiB0cml2aWFsIHRpbWVyICovCisJLyogaWYgeW91ciB0aW1pbmcgaXMgZG9uZSB0aHJvdWdoIHR3byBjYXNjYWRlZCB0aW1lcnMsIHRoZQorCSAqIGk4MjUzX2Nhc2NhZGVfbnNfdG9fdGltZXIoKSBmdW5jdGlvbiBpbiA4MjUzLmggY2FuIGJlCisJICogdmVyeSBoZWxwZnVsLiAgVGhlcmUgYXJlIGFsc28gaTgyNTRfbG9hZCgpIGFuZCBpODI1NF9tbV9sb2FkKCkKKwkgKiB3aGljaCBjYW4gYmUgdXNlZCB0byBsb2FkIHZhbHVlcyBpbnRvIHRoZSB1YmlxdWl0b3VzIDgyNTQgY291bnRlcnMKKwkgKi8KKworCXJldHVybiAqbnM7Cit9CisKK3N0YXRpYyBpbnQgc2tlbF9hb193aW5zbihzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaW50IGk7CisJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKworCXByaW50aygic2tlbF9hb193aW5zblxuIik7CisJLyogV3JpdGluZyBhIGxpc3Qgb2YgdmFsdWVzIHRvIGFuIEFPIGNoYW5uZWwgaXMgcHJvYmFibHkgbm90CisJICogdmVyeSB1c2VmdWwsIGJ1dCB0aGF0J3MgaG93IHRoZSBpbnRlcmZhY2UgaXMgZGVmaW5lZC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJCS8qIGEgdHlwaWNhbCBwcm9ncmFtbWluZyBzZXF1ZW5jZSAqLworCQkvKiBvdXR3KGRhdGFbaV0sZGV2LT5pb2Jhc2UgKyBTS0VMX0RBMCArIGNoYW4pOyAqLworCQlkZXZwcml2LT5hb19yZWFkYmFja1tjaGFuXSA9IGRhdGFbaV07CisJfQorCisJLyogcmV0dXJuIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyByZWFkL3dyaXR0ZW4gKi8KKwlyZXR1cm4gaTsKK30KKworLyogQU8gc3ViZGV2aWNlcyBzaG91bGQgaGF2ZSBhIHJlYWQgaW5zbiBhcyB3ZWxsIGFzIGEgd3JpdGUgaW5zbi4KKyAqIFVzdWFsbHkgdGhpcyBtZWFucyBjb3B5aW5nIGEgdmFsdWUgc3RvcmVkIGluIGRldnByaXYuICovCitzdGF0aWMgaW50IHNrZWxfYW9fcmluc24oc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBpOworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQorCQlkYXRhW2ldID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07CisKKwlyZXR1cm4gaTsKK30KKworLyogRElPIGRldmljZXMgYXJlIHNsaWdodGx5IHNwZWNpYWwuICBBbHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0bworICogaW1wbGVtZW50IHRoZSBpbnNuX3JlYWQvaW5zbl93cml0ZSBpbnRlcmZhY2UsIGl0IGlzIG11Y2ggbW9yZQorICogdXNlZnVsIHRvIGFwcGxpY2F0aW9ucyBpZiB5b3UgaW1wbGVtZW50IHRoZSBpbnNuX2JpdHMgaW50ZXJmYWNlLgorICogVGhpcyBhbGxvd3MgcGFja2VkIHJlYWRpbmcvd3JpdGluZyBvZiB0aGUgRElPIGNoYW5uZWxzLiAgVGhlCisgKiBjb21lZGkgY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlICovCitzdGF0aWMgaW50IHNrZWxfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJaWYgKGluc24tPm4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUaGUgaW5zbiBkYXRhIGlzIGEgbWFzayBpbiBkYXRhWzBdIGFuZCB0aGUgbmV3IGRhdGEKKwkgKiBpbiBkYXRhWzFdLCBlYWNoIGNoYW5uZWwgY29vcmVzcG9uZGluZyB0byBhIGJpdC4gKi8KKwlpZiAoZGF0YVswXSkgeworCQlzLT5zdGF0ZSAmPSB+ZGF0YVswXTsKKwkJcy0+c3RhdGUgfD0gZGF0YVswXSAmIGRhdGFbMV07CisJCS8qIFdyaXRlIG91dCB0aGUgbmV3IGRpZ2l0YWwgb3V0cHV0IGxpbmVzICovCisJCS8qIG91dHcocy0+c3RhdGUsZGV2LT5pb2Jhc2UgKyBTS0VMX0RJTyk7ICovCisJfQorCisJLyogb24gcmV0dXJuLCBkYXRhWzFdIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXRhbAorCSAqIGlucHV0IGFuZCBvdXRwdXQgbGluZXMuICovCisJLyogZGF0YVsxXT1pbncoZGV2LT5pb2Jhc2UgKyBTS0VMX0RJTyk7ICovCisJLyogb3Igd2UgY291bGQganVzdCByZXR1cm4gdGhlIHNvZnR3YXJlIGNvcHkgb2YgdGhlIG91dHB1dCB2YWx1ZXMgaWYKKwkgKiBpdCB3YXMgYSBwdXJlbHkgZGlnaXRhbCBvdXRwdXQgc3ViZGV2aWNlICovCisJLyogZGF0YVsxXT1zLT5zdGF0ZTsgKi8KKworCXJldHVybiAyOworfQorCitzdGF0aWMgaW50IHNrZWxfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOworCisJLyogVGhlIGlucHV0IG9yIG91dHB1dCBjb25maWd1cmF0aW9uIG9mIGVhY2ggZGlnaXRhbCBsaW5lIGlzCisJICogY29uZmlndXJlZCBieSBhIHNwZWNpYWwgaW5zbl9jb25maWcgaW5zdHJ1Y3Rpb24uICBjaGFuc3BlYworCSAqIGNvbnRhaW5zIHRoZSBjaGFubmVsIHRvIGJlIGNoYW5nZWQsIGFuZCBkYXRhWzBdIGNvbnRhaW5zIHRoZQorCSAqIHZhbHVlIENPTUVESV9JTlBVVCBvciBDT01FRElfT1VUUFVULiAqLworCXN3aXRjaCAoZGF0YVswXSkgeworCWNhc2UgSU5TTl9DT05GSUdfRElPX09VVFBVVDoKKwkJcy0+aW9fYml0cyB8PSAxIDw8IGNoYW47CisJCWJyZWFrOworCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlzLT5pb19iaXRzICY9IH4oMSA8PCBjaGFuKTsKKwkJYnJlYWs7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fUVVFUlk6CisJCWRhdGFbMV0gPQorCQkJKHMtPgorCQkJaW9fYml0cyAmICgxIDw8IGNoYW4pKSA/IENPTUVESV9PVVRQVVQgOiBDT01FRElfSU5QVVQ7CisJCXJldHVybiBpbnNuLT5uOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCS8qIG91dHcocy0+aW9fYml0cyxkZXYtPmlvYmFzZSArIFNLRUxfRElPX0NPTkZJRyk7ICovCisKKwlyZXR1cm4gaW5zbi0+bjsKK30KKworLyoKKyAqIEEgY29udmVuaWVudCBtYWNybyB0aGF0IGRlZmluZXMgaW5pdF9tb2R1bGUoKSBhbmQgY2xlYW51cF9tb2R1bGUoKSwKKyAqIGFzIG5lY2Vzc2FyeS4KKyAqLworQ09NRURJX0lOSVRDTEVBTlVQKGRyaXZlcl9za2VsKTsKKy8qIElmIHlvdSBhcmUgd3JpdGluZyBhIFBDSSBkcml2ZXIgeW91IHNob3VsZCB1c2UgQ09NRURJX1BDSV9JTklUQ0xFQU5VUCBpbnN0ZWFkLgorKi8KKy8qIENPTUVESV9QQ0lfSU5JVENMRUFOVVAoZHJpdmVyX3NrZWwsIHNrZWxfcGNpX3RhYmxlKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3Nzdl9kbnAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zc3ZfZG5wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYyOGQyMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zc3ZfZG5wLmMKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgICAgY29tZWRpL2RyaXZlcnMvc3N2X2RucC5jCisgICAgZ2VuZXJpYyBjb21lZGkgZHJpdmVyIGZvciBTU1YgRW1iZWRkZWQgU3lzdGVtcycgRElML05ldC1QQ3MKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDEgUm9iZXJ0IFNjaHdlYmVsIDxyb2JlcnRAc2Nod2ViZWwuZGU+CisKKyAgICBDT01FREkgLSBMaW51eCBDb250cm9sIGFuZCBNZWFzdXJlbWVudCBEZXZpY2UgSW50ZXJmYWNlCisgICAgQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEEuIFNjaGxlZWYgPGRzQHNjaGxlZWYub3JnPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyovCisvKgorRHJpdmVyOiBzc3ZfZG5wCitEZXNjcmlwdGlvbjogU1NWIEVtYmVkZGVkIFN5c3RlbXMgRElML05ldC1QQworQXV0aG9yOiBSb2JlcnQgU2Nod2ViZWwgPHJvYmVydEBzY2h3ZWJlbC5kZT4KK0RldmljZXM6IFtTU1YgRW1iZWRkZWQgU3lzdGVtc10gRElML05ldC1QQyAxNDg2IChkbnAtMTQ4NikKK1N0YXR1czogdW5rbm93bgorKi8KKworLyogaW5jbHVkZSBmaWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisKKy8qIFNvbWUgZ2xvYmFsIGRlZmluaXRpb25zOiB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBETlAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEZvciBwb3J0IEEgYW5kIEIgdGhlIG1vZGUgcmVnaXN0ZXIgaGFzIGJpdHMgY29ycmVzcG9uZGluZyB0byB0aGUgb3V0cHV0ICAgKi8KKy8qIHBpbnMsIHdoZXJlIEJpdC1OID0gMCAtPiBpbnB1dCwgQml0LU4gPSAxIC0+IG91dHB1dC4gTm90ZSB0aGF0IGJpdHMgICAgICAgKi8KKy8qIDQgdG8gNyBjb3JyZXNwb25kIHRvIHBpbiAwLi4zIGZvciBwb3J0IEMgZGF0YSByZWdpc3Rlci4gRW5zdXJlIHRoYXQgYml0cyAgKi8KKy8qIDAuLjMgcmVtYWluIHVuY2hhbmdlZCEgRm9yIGRldGFpbHMgYWJvdXQgUG9ydCBDIE1vZGUgUmVnaXN0ZXIgc2VlICAgICAgICAgKi8KKy8qIHRoZSByZW1hcmtzIGluIGRucF9pbnNuX2NvbmZpZygpIGJlbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBDU0NJUiAweDIyCQkvKiBDaGlwIFNldHVwIGFuZCBDb250cm9sIEluZGV4IFJlZ2lzdGVyICAgICAgICovCisjZGVmaW5lIENTQ0RSIDB4MjMJCS8qIENoaXAgU2V0dXAgYW5kIENvbnRyb2wgRGF0YSBSZWdpc3RlciAgICAgICAgKi8KKyNkZWZpbmUgUEFNUiAgMHhhNQkJLyogUG9ydCBBIE1vZGUgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQURSICAweGE5CQkvKiBQb3J0IEEgRGF0YSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBCTVIgIDB4YTQJCS8qIFBvcnQgQiBNb2RlIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUEJEUiAgMHhhOAkJLyogUG9ydCBCIERhdGEgUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBQQ01SICAweGEzCQkvKiBQb3J0IEMgTW9kZSBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFBDRFIgIDB4YTcJCS8qIFBvcnQgQyBEYXRhIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworLyogVGhpcyBkYXRhIHN0cnVjdHVyZSBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3VwcG9ydGVkIGJvYXJkcyAtLS0tLS0tLSAqLworCitzdHJ1Y3QgZG5wX2JvYXJkIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBhaV9jaGFuczsKKwlpbnQgYWlfYml0czsKKwlpbnQgaGF2ZV9kaW87Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRucF9ib2FyZCBkbnBfYm9hcmRzW10gPSB7CS8qIHdlIG9ubHkgc3VwcG9ydCBvbmUgRE5QICdib2FyZCcgICAqLworCXsJCQkvKiB2YXJpYW50IGF0IHRoZSBtb21lbnQgICAgICAgICAgICAgKi8KKwkgICAgICBuYW1lOgkiZG5wLTE0ODYiLAorCSAgICAgIGFpX2NoYW5zOjE2LAorCSAgICAgIGFpX2JpdHM6CTEyLAorCSAgICAgIGhhdmVfZGlvOjEsCisJCX0sCit9OworCisvKiBVc2VmdWwgZm9yIHNob3J0aGFuZCBhY2Nlc3MgdG8gdGhlIHBhcnRpY3VsYXIgYm9hcmQgc3RydWN0dXJlIC0tLS0tLS0tLS0tICovCisjZGVmaW5lIHRoaXNib2FyZCAoKGNvbnN0IHN0cnVjdCBkbnBfYm9hcmQgKilkZXYtPmJvYXJkX3B0cikKKworLyogVGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoZSBETlAgZHJpdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RydWN0IGRucF9wcml2YXRlX2RhdGEgeworCisJLy8KK307CisKKworLyogU2hvcnRoYW5kIG1hY3JvIGZvciBmYXN0ZXIgYWNjZXNzIHRvIHRoZSBwcml2YXRlIGRhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBkZXZwcml2ICgoZG5wX3ByaXZhdGUgKilkZXYtPnByaXZhdGUpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRoZSBzdHJ1Y3QgY29tZWRpX2RyaXZlciBzdHJ1Y3R1cmUgdGVsbHMgdGhlIENvbWVkaSBjb3JlIG1vZHVsZSB3aGljaCBmdW5jdGlvbnMgICovCisvKiB0byBjYWxsIHRvIGNvbmZpZ3VyZS9kZWNvbmZpZ3VyZSAoYXR0YWNoL2RldGFjaCkgdGhlIGJvYXJkLCBhbmQgYWxzbyAgICAgICovCisvKiBhYm91dCB0aGUga2VybmVsIG1vZHVsZSB0aGF0IGNvbnRhaW5zIHRoZSBkZXZpY2UgY29kZS4gICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24gd2UgZGVmaW5lIHRoZSBBUEkgb2YgdGhpcyBkcml2ZXIuICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgZG5wX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCk7CitzdGF0aWMgaW50IGRucF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX2RucCA9IHsKKyAgICAgIGRyaXZlcl9uYW1lOiJzc3ZfZG5wIiwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDpkbnBfYXR0YWNoLAorICAgICAgZGV0YWNoOmRucF9kZXRhY2gsCisgICAgICBib2FyZF9uYW1lOiZkbnBfYm9hcmRzWzBdLm5hbWUsCisJLyogb25seSBuZWNlc3NhcnkgZm9yIG5vbi1QblAgZGV2cyAgICovCisgICAgICBvZmZzZXQ6c2l6ZW9mKHN0cnVjdCBkbnBfYm9hcmQpLC8qIGxpa2UgSVNBLVBuUCwgUENJIG9yIFBDTUNJQS4gICAgICAqLworICAgICAgbnVtX25hbWVzOnNpemVvZihkbnBfYm9hcmRzKSAvIHNpemVvZihzdHJ1Y3QgZG5wX2JvYXJkKSwKK307CisKK0NPTUVESV9JTklUQ0xFQU5VUChkcml2ZXJfZG5wKTsKKworc3RhdGljIGludCBkbnBfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworCitzdGF0aWMgaW50IGRucF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzLCBzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogQXR0YWNoIGlzIGNhbGxlZCBieSBjb21lZGkgY29yZSB0byBjb25maWd1cmUgdGhlIGRyaXZlciBmb3IgYSBwYXJ0aWN1bGFyICAqLworLyogYm9hcmQuIElmIHlvdSBzcGVjaWZpZWQgYSBib2FyZF9uYW1lIGFycmF5IGluIHRoZSBkcml2ZXIgc3RydWN0dXJlLCAgICAgICAqLworLyogZGV2LT5ib2FyZF9wdHIgY29udGFpbnMgdGhhdCBhZGRyZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGRucF9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICogaXQpCit7CisKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKKworCXByaW50aygiY29tZWRpJWQ6IGRucDogIiwgZGV2LT5taW5vcik7CisKKwkvKiBBdXRvcHJvYmluZzogdGhpcyBzaG91bGQgZmluZCBvdXQgd2hpY2ggYm9hcmQgd2UgaGF2ZS4gQ3VycmVudGx5IG9ubHkgICAqLworCS8qIHRoZSAxNDg2IGJvYXJkIGlzIHN1cHBvcnRlZCBhbmQgYXV0b3Byb2JpbmcgaXMgbm90IGltcGxlbWVudGVkIDotKSAgICAgICovCisJLy9kZXYtPmJvYXJkX3B0ciA9IGRucF9wcm9iZShkZXYpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgbmFtZSBvZiB0aGUgYm9hcmQuIFdlIGNhbiB1c2UgdGhlICJ0aGlzYm9hcmQiIG1hY3JvIG5vdy4gKi8KKwlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CisKKwkvKiBBbGxvY2F0ZSB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYXJlYS4gYWxsb2NfcHJpdmF0ZSgpIGlzIGEgY29udmVuaWVudCAgICAqLworCS8qIG1hY3JvIGRlZmluZWQgaW4gY29tZWRpZGV2LmguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGRucF9wcml2YXRlX2RhdGEpKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJLyogQWxsb2NhdGUgdGhlIHN1YmRldmljZSBzdHJ1Y3R1cmVzLiBhbGxvY19zdWJkZXZpY2UoKSBpcyBhIGNvbnZlbmllbnQgICAgKi8KKwkvKiBtYWNybyBkZWZpbmVkIGluIGNvbWVkaWRldi5oLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKSA8IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJLyogZGlnaXRhbCBpL28gc3ViZGV2aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfRElPOworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9XUklUQUJMRTsKKwlzLT5uX2NoYW4gPSAyMDsKKwlzLT5tYXhkYXRhID0gMTsKKwlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXMtPmluc25fYml0cyA9IGRucF9kaW9faW5zbl9iaXRzOworCXMtPmluc25fY29uZmlnID0gZG5wX2Rpb19pbnNuX2NvbmZpZzsKKworCXByaW50aygiYXR0YWNoZWRcbiIpOworCisJLyogV2UgdXNlIHRoZSBJL08gcG9ydHMgMHgyMiwweDIzIGFuZCAweGEzLTB4YTksIHdoaWNoIGFyZSBhbHdheXMKKwkgKiBhbGxvY2F0ZWQgZm9yIHRoZSBwcmltYXJ5IDgyNTksIHNvIHdlIGRvbid0IG5lZWQgdG8gYWxsb2NhdGUgdGhlbQorCSAqIG91cnNlbHZlcy4gKi8KKworCS8qIGNvbmZpZ3VyZSBhbGwgcG9ydHMgYXMgaW5wdXQgKGRlZmF1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJb3V0YihQQU1SLCBDU0NJUik7CisJb3V0YigweDAwLCBDU0NEUik7CisJb3V0YihQQk1SLCBDU0NJUik7CisJb3V0YigweDAwLCBDU0NEUik7CisJb3V0YihQQ01SLCBDU0NJUik7CisJb3V0YigoaW5iKENTQ0RSKSAmIDB4QUEpLCBDU0NEUik7CisKKwlyZXR1cm4gMTsKKworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBkZXRhY2ggaXMgY2FsbGVkIHRvIGRlY29uZmlndXJlIGEgZGV2aWNlLiBJdCBzaG91bGQgZGVhbGxvY2F0ZSB0aGUgICAgICAgICovCisvKiByZXNvdXJjZXMuIFRoaXMgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgd2hlbiBfYXR0YWNoKCkgZmFpbHMsIHNvIGl0ICAgICAgICovCisvKiBzaG91bGQgYmUgY2FyZWZ1bCBub3QgdG8gcmVsZWFzZSByZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBuZWNlc3NhcmlseSAgICAgICovCisvKiBhbGxvY2F0ZWQgYnkgX2F0dGFjaCgpLiBkZXYtPnByaXZhdGUgYW5kIGRldi0+c3ViZGV2aWNlcyBhcmUgICAgICAgICAgICAgICovCisvKiBkZWFsbG9jYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb3JlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgZG5wX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldikKK3sKKworCS8qIGNvbmZpZ3VyZSBhbGwgcG9ydHMgYXMgaW5wdXQgKGRlZmF1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJb3V0YihQQU1SLCBDU0NJUik7CisJb3V0YigweDAwLCBDU0NEUik7CisJb3V0YihQQk1SLCBDU0NJUik7CisJb3V0YigweDAwLCBDU0NEUik7CisJb3V0YihQQ01SLCBDU0NJUik7CisJb3V0YigoaW5iKENTQ0RSKSAmIDB4QUEpLCBDU0NEUik7CisKKwkvKiBhbm5vdW5jZSB0aGF0IHdlIGFyZSBmaW5pc2hlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXByaW50aygiY29tZWRpJWQ6IGRucDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKworCXJldHVybiAwOworCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRoZSBpbnNuX2JpdHMgaW50ZXJmYWNlIGFsbG93cyBwYWNrZWQgcmVhZGluZy93cml0aW5nIG9mIERJTyBjaGFubmVscy4gICAgKi8KKy8qIFRoZSBjb21lZGkgY29yZSBjYW4gY29udmVydCBiZXR3ZWVuIGluc25fYml0cyBhbmQgaW5zbl9yZWFkL3dyaXRlLCBzbyB5b3UgKi8KKy8qIGFyZSBhYmxlIHRvIHVzZSB0aGVzZSBpbnN0cnVjdGlvbnMgYXMgd2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBkbnBfZGlvX2luc25fYml0cyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHMsIHN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisKKwlpZiAoaW5zbi0+biAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsJLyogaW5zbiB1c2VzIGRhdGFbMF0gYW5kIGRhdGFbMV0gICAgICovCisKKwkvKiBUaGUgaW5zbiBkYXRhIGlzIGEgbWFzayBpbiBkYXRhWzBdIGFuZCB0aGUgbmV3IGRhdGEgaW4gZGF0YVsxXSwgZWFjaCAgICAqLworCS8qIGNoYW5uZWwgY29vcmVzcG9uZGluZyB0byBhIGJpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwkvKiBQb3J0cyBBIGFuZCBCIGFyZSBzdHJhaWdodCBmb3J3YXJkOiBlYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhbiBvdXRwdXQgICAqLworCS8qIHBpbiB3aXRoIHRoZSBzYW1lIG9yZGVyLiBQb3J0IEMgaXMgZGlmZmVyZW50OiBiaXRzIDAuLi4zIGNvcnJlc3BvbmQgdG8gICovCisJLyogYml0cyA0Li4uNyBvZiB0aGUgb3V0cHV0IHJlZ2lzdGVyIChQQ0RSKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworCWlmIChkYXRhWzBdKSB7CisKKwkJb3V0YihQQURSLCBDU0NJUik7CisJCW91dGIoKGluYihDU0NEUikKKwkJCQkmIH4odTgpIChkYXRhWzBdICYgMHgwMDAwRkYpKQorCQkJfCAodTgpIChkYXRhWzFdICYgMHgwMDAwRkYpLCBDU0NEUik7CisKKwkJb3V0YihQQkRSLCBDU0NJUik7CisJCW91dGIoKGluYihDU0NEUikKKwkJCQkmIH4odTgpICgoZGF0YVswXSAmIDB4MDBGRjAwKSA+PiA4KSkKKwkJCXwgKHU4KSAoKGRhdGFbMV0gJiAweDAwRkYwMCkgPj4gOCksIENTQ0RSKTsKKworCQlvdXRiKFBDRFIsIENTQ0lSKTsKKwkJb3V0YigoaW5iKENTQ0RSKQorCQkJCSYgfih1OCkgKChkYXRhWzBdICYgMHgwRjAwMDApID4+IDEyKSkKKwkJCXwgKHU4KSAoKGRhdGFbMV0gJiAweDBGMDAwMCkgPj4gMTIpLCBDU0NEUik7CisJfQorCisJLyogb24gcmV0dXJuLCBkYXRhWzFdIGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiB0aGUgZGlnaXRhbCBpbnB1dCBsaW5lcy4gICAgICAgKi8KKwlvdXRiKFBBRFIsIENTQ0lSKTsKKwlkYXRhWzBdID0gaW5iKENTQ0RSKTsKKwlvdXRiKFBCRFIsIENTQ0lSKTsKKwlkYXRhWzBdICs9IGluYihDU0NEUikgPDwgODsKKwlvdXRiKFBDRFIsIENTQ0lSKTsKKwlkYXRhWzBdICs9ICgoaW5iKENTQ0RSKSAmIDB4RjApIDw8IDEyKTsKKworCXJldHVybiAyOworCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIENvbmZpZ3VyZSB0aGUgZGlyZWN0aW9uIG9mIHRoZSBiaWRpcmVjdGlvbmFsIGRpZ2l0YWwgaS9vIHBpbnMuIGNoYW5zcGVjICAgKi8KKy8qIGNvbnRhaW5zIHRoZSBjaGFubmVsIHRvIGJlIGNoYW5nZWQgYW5kIGRhdGFbMF0gY29udGFpbnMgZWl0aGVyICAgICAgICAgICAgKi8KKy8qIENPTUVESV9JTlBVVCBvciBDT01FRElfT1VUUFVULiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBkbnBfZGlvX2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogcywgc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKworCXU4IHJlZ2lzdGVyX2J1ZmZlcjsKKworCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CS8qIHJlZHVjZXMgY2hhbnNwZWMgdG8gbG93ZXIgMTYgYml0cyAqLworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJY2FzZSBJTlNOX0NPTkZJR19ESU9fT1VUUFVUOgorCWNhc2UgSU5TTl9DT05GSUdfRElPX0lOUFVUOgorCQlicmVhazsKKwljYXNlIElOU05fQ09ORklHX0RJT19RVUVSWToKKwkJZGF0YVsxXSA9CisJCQkoaW5iKENTQ0RSKSAmICgxIDw8IGNoYW4pKSA/IENPTUVESV9PVVRQVVQgOgorCQkJQ09NRURJX0lOUFVUOworCQlyZXR1cm4gaW5zbi0+bjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwkvKiBUZXN0OiB3aGljaCBwb3J0IGRvZXMgdGhlIGNoYW5uZWwgYmVsb25nIHRvPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisJLyogV2UgaGF2ZSB0byBwYXkgYXR0ZW50aW9uIHdpdGggcG9ydCBDOiB0aGlzIGlzIHRoZSBtZWFuaW5nIG9mIFBDTVI6ICAgICAgKi8KKwkvKiBCaXQgaW4gUENNUjogICAgICAgICAgICAgIDcgNiA1IDQgMyAyIDEgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qIENvcnJlc3BvbmRpbmcgcG9ydCBDIHBpbjogZCAzIGQgMiBkIDEgZCAwICAgZD0gZG9uJ3QgdG91Y2ggICAgICAgICAgICAgICovCisKKwlpZiAoKGNoYW4gPj0gMCkgJiYgKGNoYW4gPD0gNykpIHsKKwkJLyogdGhpcyBpcyBwb3J0IEEgKi8KKwkJb3V0YihQQU1SLCBDU0NJUik7CisJfSBlbHNlIGlmICgoY2hhbiA+PSA4KSAmJiAoY2hhbiA8PSAxNSkpIHsKKwkJLyogdGhpcyBpcyBwb3J0IEIgKi8KKwkJY2hhbiAtPSA4OworCQlvdXRiKFBCTVIsIENTQ0lSKTsKKwl9IGVsc2UgaWYgKChjaGFuID49IDE2KSAmJiAoY2hhbiA8PSAxOSkpIHsKKwkJLyogdGhpcyBpcyBwb3J0IEM7IG11bHRpcGxpY2F0aW9uIHdpdGggMiBicmluZ3MgYml0cyBpbnRvIGNvcnJlY3QgICAgICAgICovCisJCS8qIHBvc2l0aW9uIGZvciBQQ01SISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQljaGFuIC09IDE2OworCQljaGFuICo9IDI7CisJCW91dGIoUENNUiwgQ1NDSVIpOworCX0gZWxzZSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHJlYWQgJ29sZCcgZGlyZWN0aW9uIG9mIHRoZSBwb3J0IGFuZCBzZXQgYml0cyAob3V0PTEsIGluPTApICAgICAgICAgICAgICovCisJcmVnaXN0ZXJfYnVmZmVyID0gaW5iKENTQ0RSKTsKKwlpZiAoZGF0YVswXSA9PSBDT01FRElfT1VUUFVUKSB7CisJCXJlZ2lzdGVyX2J1ZmZlciB8PSAoMSA8PCBjaGFuKTsKKwl9IGVsc2UgeworCQlyZWdpc3Rlcl9idWZmZXIgJj0gfigxIDw8IGNoYW4pOworCX0KKwlvdXRiKHJlZ2lzdGVyX2J1ZmZlciwgQ1NDRFIpOworCisJcmV0dXJuIDE7CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91bmlveHg1LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdW5pb3h4NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkM2IxMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdW5pb3h4NS5jCkBAIC0wLDAgKzEsNTE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgY29tZWRpL2RyaXZlcnMvdW5pb3h4NS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgRHJpdmVyIGZvciBGYXN0d2VsIFVOSU94eC01IChhbmFsb2cgYW5kIGRpZ2l0YWwgaS9vKSBib2FyZHMuICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEtydWNoaW5pbiBEYW5paWwgKGFzZ2FyZCkgW2FzZ2FyZEBldGVyc29mdC5ydV0gICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgQ09NRURJIC0gTGludXggQ29udHJvbCBhbmQgTWVhc3VyZW1lbnQgRGV2aWNlIEludGVyZmFjZSAgICAgICAgICAgICAgICAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4LDIwMDAgRGF2aWQgQS4gU2NobGVlZiA8ZHNAc2NobGVlZi5vcmc+ICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICAqCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICAqCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICAqCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICAqCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICAqCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICAqCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgICAgICAgICAgICAqCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKworRHJpdmVyOiB1bmlveHg1CitEZXNjcmlwdGlvbjogRHJpdmVyIGZvciBGYXN0d2VsIFVOSU94eC01IChhbmFsb2cgYW5kIGRpZ2l0YWwgaS9vKSBib2FyZHMuCitBdXRob3I6IEtydWNoaW5pbiBEYW5paWwgKGFzZ2FyZCkgPGFzZ2FyZEBldGVyc29mdC5ydT4KK1N0YXR1czogdW5rbm93bgorVXBkYXRlZDogMjAwNi0xMC0wOQorRGV2aWNlczogW0Zhc3R3ZWxdIFVOSU94eC01ICh1bmlveHg1KSwKKworIFRoaXMgY2FyZCBzdXBwb3J0cyBkaWdpdGFsIGFuZCBhbmFsb2cgSS9PLiBJdCB3cml0dGVuIGZvciBnMDEKKyBzdWJkZXZpY2VzIG9ubHkuCisgY2hhbm5lbHMgcmFuZ2U6IDAgLi4gMjMgZGlvIGNoYW5uZWxzCisgYW5kIDAgLi4gMTEgYW5hbG9nIG1vZHVsZXMgcmFuZ2UKKyBEdXJpbmcgYXR0YWNoaW5nIHVuaW94eDUgbW9kdWxlIGRpc3BsYXlzIG1vZHVsZXMgaWRlbnRpZmllcnMKKyAoc2VlIGRtZXNnIGFmdGVyIGNvbWVkaV9jb25maWcpIGluIGZvcm1hdDoKKyB8IFttb2R1bGVfbnVtYmVyXSBtb2R1bGVfaWQgfAorCisqLworCisjaW5jbHVkZSAiLi4vY29tZWRpZGV2LmgiCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgInVuaW94eDUiCisjZGVmaW5lIFVOSU9YWDVfU0laRSAweDEwCisjZGVmaW5lIFVOSU9YWDVfU1VCREVWX0JBU0UgMHhBMDAwCS8qIGJhc2UgYWRkciBvZiBmaXJzdCBzdWJkZXYgKi8KKyNkZWZpbmUgVU5JT1hYNV9TVUJERVZfT0REUyAweDQwMAorCisvKiBtb2R1bGVzIHR5cGVzICovCisjZGVmaW5lIE1PRFVMRV9ESUdJVEFMIDAKKyNkZWZpbmUgTU9EVUxFX09VVFBVVF9NQVNLIDB4ODAJLyogYW5hbG9nIGlucHV0L291dHB1dCAqLworCisvKiBjb25zdGFudHMgZm9yIGRpZ2l0YWwgaS9vICovCisjZGVmaW5lIFVOSU9YWDVfTlVNX09GX0NIQU5TIDI0CisKKy8qIGNvbnN0YW50cyBmb3IgYW5hbG9nIGkvbyAqLworI2RlZmluZSBUeEJFICAweDEwCQkvKiB0cmFuc21pdCBidWZmZXIgZW5hYmxlICovCisjZGVmaW5lIFJ4Q0EgIDB4MjAJCS8qIDEgcmVjZWl2ZSBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisjZGVmaW5lIFJ4MkNBIDB4NDAJCS8qIDIgcmVjZWl2ZSBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisjZGVmaW5lIFJ4NENBIDB4ODAJCS8qIDQgcmVjZWl2ZSBjaGFyYWN0ZXIgYXZhaWxhYmxlICovCisKKy8qIGJ5dGVzIG1hc2sgZXJyb3JzICovCisjZGVmaW5lIFJ4MkNBX0VSUl9NQVNLIDB4MDQJLyogMiBieXRlcyByZWNlaXZpbmcgZXJyb3IgKi8KKyNkZWZpbmUgUng0Q0FfRVJSX01BU0sgMHgwOAkvKiA0IGJ5dGVzIHJlY2VpdmluZyBlcnJvciAqLworCisvKiBjaGFubmVsIG1vZGVzICovCisjZGVmaW5lIEFMTF8yX0lOUFVUICAwCQkvKiBjb25maWcgYWxsIGRpZ2l0YWwgY2hhbm5lbHMgdG8gaW5wdXQgKi8KKyNkZWZpbmUgQUxMXzJfT1VUUFVUIDEJCS8qIGNvbmZpZyBhbGwgZGlnaXRhbCBjaGFubmVscyB0byBvdXRwdXQgKi8KKworLyogJ3ByaXZhdGUnIHN0cnVjdHVyZSBmb3IgZWFjaCBzdWJkZXZpY2UgKi8KK3N0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiB7CisJaW50IHVzcF9pb2Jhc2U7CisJdW5zaWduZWQgY2hhciB1c3BfbW9kdWxlX3R5cGVbMTJdOwkvKiAxMiBtb2R1bGVzLiBlYWNoIGNhbiBiZSA3MEwgb3IgNzNMICovCisJdW5zaWduZWQgY2hhciB1c3BfZXh0cmFfZGF0YVsxMl1bNF07CS8qIGZvciBzYXZpbmcgcHJldmlvdXMgd3JpdHRlbiB2YWx1ZSBmb3IgYW5hbG9nIG1vZHVsZXMgKi8KKwl1bnNpZ25lZCBjaGFyIHVzcF9wcmV2X3dyX3ZhbFszXTsJLyogcHJldmlvdXMgd3JpdHRlbiB2YWx1ZSAqLworCXVuc2lnbmVkIGNoYXIgdXNwX3ByZXZfY25fdmFsWzNdOwkvKiBwcmV2aW91cyBjaGFubmVsIHZhbHVlICovCit9OworCitzdGF0aWMgaW50IHVuaW94eDVfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqIGl0KTsKK3N0YXRpYyBpbnQgdW5pb3h4NV9zdWJkZXZfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2LAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpOworc3RhdGljIGludCB1bmlveHg1X3N1YmRldl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldiwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKTsKK3N0YXRpYyBpbnQgdW5pb3h4NV9pbnNuX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXYsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSk7CitzdGF0aWMgaW50IHVuaW94eDVfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgX191bmlveHg1X3N1YmRldl9pbml0KHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2LCBpbnQgc3ViZGV2X2lvYmFzZSwKKwlpbnQgbWlub3IpOworc3RhdGljIGludCBfX3VuaW94eDVfZGlnaXRhbF93cml0ZShzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIHVuc2lnbmVkIGludCAqIGRhdGEsCisJaW50IGNoYW5uZWwsIGludCBtaW5vcik7CitzdGF0aWMgaW50IF9fdW5pb3h4NV9kaWdpdGFsX3JlYWQoc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICogdXNwLCB1bnNpZ25lZCBpbnQgKiBkYXRhLAorCWludCBjaGFubmVsLCBpbnQgbWlub3IpOworLy9zdGF0aWMgdm9pZCBfX3VuaW94eDVfZGlnaXRhbF9jb25maWcoc3RydWN0IHVuaW94eDVfc3ViZF9wcml2KiB1c3AsIGludCBtb2RlKTsKK3N0YXRpYyBpbnQgX191bmlveHg1X2FuYWxvZ193cml0ZShzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIHVuc2lnbmVkIGludCAqIGRhdGEsCisJaW50IGNoYW5uZWwsIGludCBtaW5vcik7CitzdGF0aWMgaW50IF9fdW5pb3h4NV9hbmFsb2dfcmVhZChzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIHVuc2lnbmVkIGludCAqIGRhdGEsCisJaW50IGNoYW5uZWwsIGludCBtaW5vcik7CitzdGF0aWMgaW50IF9fdW5pb3h4NV9kZWZpbmVfY2hhbl9vZmZzZXQoaW50IGNoYW5fbnVtKTsKK3N0YXRpYyB2b2lkIF9fdW5pb3h4NV9hbmFsb2dfY29uZmlnKHN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqIHVzcCwgaW50IGNoYW5uZWwpOworCitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgdW5pb3h4NV9kcml2ZXIgPSB7CisgICAgICBkcml2ZXJfbmFtZTpEUklWRVJfTkFNRSwKKyAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKKyAgICAgIGF0dGFjaDp1bmlveHg1X2F0dGFjaCwKKyAgICAgIGRldGFjaDp1bmlveHg1X2RldGFjaAorfTsKKworQ09NRURJX0lOSVRDTEVBTlVQKHVuaW94eDVfZHJpdmVyKTsKKworc3RhdGljIGludCB1bmlveHg1X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKiBpdCkKK3sKKwlpbnQgaW9iYXNlLCBpLCBuX3N1YmQ7CisJaW50IGlkLCBudW0sIGJhOworCisJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CisKKwlkZXYtPmJvYXJkX25hbWUgPSBEUklWRVJfTkFNRTsKKwlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKKwlpb2Jhc2UgKz0gVU5JT1hYNV9TVUJERVZfQkFTRTsKKworCS8qIGRlZmluaW5nIG51bWJlciBvZiBzdWJkZXZpY2VzIGFuZCBnZXR0aW5nIHRoZXkgdHlwZXMgKGl0IG11c3QgYmUgJ2cwMScpICAqLworCWZvciAoaSA9IG5fc3ViZCA9IDAsIGJhID0gaW9iYXNlOyBpIDwgNDsgaSsrLCBiYSArPSBVTklPWFg1X1NVQkRFVl9PRERTKSB7CisJCWlkID0gaW5iKGJhICsgMHhFKTsKKwkJbnVtID0gaW5iKGJhICsgMHhGKTsKKworCQlpZiAoaWQgIT0gJ2cnIHx8IG51bSAhPSAxKQorCQkJY29udGludWU7CisKKwkJbl9zdWJkKys7CisJfQorCisJLyogdW5pb3h4NSBjYW4gaGFzIGZyb20gdHdvIHRvIGZvdXIgc3ViZGV2aWNlcyAqLworCWlmIChuX3N1YmQgPCAyKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJInlvdXIgY2FyZCBtdXN0IGhhcyBhdCBsZWFzdCAyICdnMDEnIHN1YmRldmljZXNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmQpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBpbml0aWFsaXppbmcgZWFjaCBvZiBmb3Igc2FtZSBzdWJkZXZpY2VzICovCisJZm9yIChpID0gMDsgaSA8IG5fc3ViZDsgaSsrLCBpb2Jhc2UgKz0gVU5JT1hYNV9TVUJERVZfT0REUykgeworCQlpZiAoX191bmlveHg1X3N1YmRldl9pbml0KCZkZXYtPnN1YmRldmljZXNbaV0sIGlvYmFzZSwKKwkJCQlkZXYtPm1pbm9yKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJcHJpbnRrKCJhdHRhY2hlZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdW5pb3h4NV9zdWJkZXZfcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqIGRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKiBzdWJkZXYsCisJc3RydWN0IGNvbWVkaV9pbnNuICogaW5zbiwgdW5zaWduZWQgaW50ICogZGF0YSkKK3sKKwlzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKnVzcCA9IHN1YmRldi0+cHJpdmF0ZTsKKwlpbnQgY2hhbm5lbCwgdHlwZTsKKworCWNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKKwl0eXBlID0gdXNwLT51c3BfbW9kdWxlX3R5cGVbY2hhbm5lbCAvIDJdOwkvKiBkZWZpbmluZyBtb2R1bGUgdHlwZShhbmFsb2cgb3IgZGlnaXRhbCkgKi8KKworCWlmICh0eXBlID09IE1PRFVMRV9ESUdJVEFMKSB7CisJCWlmICghX191bmlveHg1X2RpZ2l0YWxfcmVhZCh1c3AsIGRhdGEsIGNoYW5uZWwsIGRldi0+bWlub3IpKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZSB7CisJCWlmICghX191bmlveHg1X2FuYWxvZ19yZWFkKHVzcCwgZGF0YSwgY2hhbm5lbCwgZGV2LT5taW5vcikpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdW5pb3h4NV9zdWJkZXZfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKiBkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2LAorCXN0cnVjdCBjb21lZGlfaW5zbiAqIGluc24sIHVuc2lnbmVkIGludCAqIGRhdGEpCit7CisJc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICp1c3AgPSBzdWJkZXYtPnByaXZhdGU7CisJaW50IGNoYW5uZWwsIHR5cGU7CisKKwljaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CisJdHlwZSA9IHVzcC0+dXNwX21vZHVsZV90eXBlW2NoYW5uZWwgLyAyXTsJLyogZGVmaW5pbmcgbW9kdWxlIHR5cGUoYW5hbG9nIG9yIGRpZ2l0YWwpICovCisKKwlpZiAodHlwZSA9PSBNT0RVTEVfRElHSVRBTCkgeworCQlpZiAoIV9fdW5pb3h4NV9kaWdpdGFsX3dyaXRlKHVzcCwgZGF0YSwgY2hhbm5lbCwgZGV2LT5taW5vcikpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJaWYgKCFfX3VuaW94eDVfYW5hbG9nX3dyaXRlKHVzcCwgZGF0YSwgY2hhbm5lbCwgZGV2LT5taW5vcikpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qIGZvciBkaWdpdGFsIG1vZHVsZXMgb25seSAqLworc3RhdGljIGludCB1bmlveHg1X2luc25fY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqIHN1YmRldiwKKwlzdHJ1Y3QgY29tZWRpX2luc24gKiBpbnNuLCB1bnNpZ25lZCBpbnQgKiBkYXRhKQoreworCWludCBjaGFubmVsX29mZnNldCwgZmxhZ3MsIGNoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKSwgdHlwZTsKKwlzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKnVzcCA9IHN1YmRldi0+cHJpdmF0ZTsKKwlpbnQgbWFzayA9IDEgPDwgKGNoYW5uZWwgJiAweDA3KTsKKworCXR5cGUgPSB1c3AtPnVzcF9tb2R1bGVfdHlwZVtjaGFubmVsIC8gMl07CisKKwlpZiAodHlwZSAhPSBNT0RVTEVfRElHSVRBTCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJjb21lZGklZDogY2hhbm5lbCBjb25maWd1cmF0aW9uIGFjY2Vzc2libGUgb25seSBmb3IgZGlnaXRhbCBtb2R1bGVzXG4iLAorCQkJZGV2LT5taW5vcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoKGNoYW5uZWxfb2Zmc2V0ID0gX191bmlveHg1X2RlZmluZV9jaGFuX29mZnNldChjaGFubmVsKSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImNvbWVkaSVkOiB1bmRlZmluZWQgY2hhbm5lbCAlZC4gY2hhbm5lbCByYW5nZSBpcyAwIC4uIDIzXG4iLAorCQkJZGV2LT5taW5vciwgY2hhbm5lbCk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBnZXRzIHByZXZpb3VzbHkgd3JpdHRlbiB2YWx1ZSAqLworCWZsYWdzID0gdXNwLT51c3BfcHJldl9jbl92YWxbY2hhbm5lbF9vZmZzZXQgLSAxXTsKKworCXN3aXRjaCAoKmRhdGEpIHsKKwljYXNlIENPTUVESV9JTlBVVDoKKwkJZmxhZ3MgJj0gfm1hc2s7CisJCWJyZWFrOworCWNhc2UgQ09NRURJX09VVFBVVDoKKwkJZmxhZ3MgfD0gbWFzazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdW5rbm93biBmbGFnXG4iLCBkZXYtPm1pbm9yKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXAorCSAqIHNldHMgY2hhbm5lbHMgYnVmZmVyIHRvIDEoYWZ0ZXIgdGhpcyB3ZSBhcmUgYWxsb3dlZCB0byAqCisJICogY2hhbmdlIGNoYW5uZWwgdHlwZSBvbiBpbnB1dCBvciBvdXRwdXQpICAgICAgICAgICAgICAgICoKKwkgXCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJb3V0YigxLCB1c3AtPnVzcF9pb2Jhc2UgKyAwKTsKKwlvdXRiKGZsYWdzLCB1c3AtPnVzcF9pb2Jhc2UgKyBjaGFubmVsX29mZnNldCk7CS8qIGNoYW5nZXMgdHlwZSBvZiBfb25lXyBjaGFubmVsICovCisJb3V0YigwLCB1c3AtPnVzcF9pb2Jhc2UgKyAwKTsJLyogc2V0cyBjaGFubmVscyBiYW5rIHRvIDAoYWxsb3dzIGRpcmVjdGx5IGlucHV0L291dHB1dCkgKi8KKwl1c3AtPnVzcF9wcmV2X2NuX3ZhbFtjaGFubmVsX29mZnNldCAtIDFdID0gZmxhZ3M7CS8qIHNhdmVzIHdyaXR0ZW4gdmFsdWUgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVuaW94eDVfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICogZGV2KQoreworCWludCBpOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzdWJkZXY7CisJc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICp1c3A7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgeworCQlzdWJkZXYgPSAmZGV2LT5zdWJkZXZpY2VzW2ldOworCQl1c3AgPSBzdWJkZXYtPnByaXZhdGU7CisJCXJlbGVhc2VfcmVnaW9uKHVzcC0+dXNwX2lvYmFzZSwgVU5JT1hYNV9TSVpFKTsKKwkJa2ZyZWUoc3ViZGV2LT5wcml2YXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogaW5pdGlhbGl6aW5nIHN1YmRldmljZSB3aXRoIGdpdmVuIGFkZHJlc3MgKi8KK3N0YXRpYyBpbnQgX191bmlveHg1X3N1YmRldl9pbml0KHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICogc3ViZGV2LCBpbnQgc3ViZGV2X2lvYmFzZSwKKwlpbnQgbWlub3IpCit7CisJc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICp1c3A7CisJaW50IGksIHRvLCBuZGVmX2ZsYWcgPSAwOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihzdWJkZXZfaW9iYXNlLCBVTklPWFg1X1NJWkUsIERSSVZFUl9OQU1FKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBJL08gcG9ydCBjb25mbGljdFxuIiwgbWlub3IpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoKHVzcCA9IChzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKikga3phbGxvYyhzaXplb2YoKnVzcCksCisJCQkJR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogZXJvcnIhIC0tPiBvdXQgb2YgbWVtb3J5IVxuIiwgbWlub3IpOworCQlyZXR1cm4gLTE7CisJfQorCisJdXNwLT51c3BfaW9iYXNlID0gc3ViZGV2X2lvYmFzZTsKKwlwcmludGsoImNvbWVkaSVkOiB8IiwgbWlub3IpOworCisJLyogZGVmaW5pbmcgbW9kdWxlcyB0eXBlcyAqLworCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7CisJCXRvID0gMTAwMDA7CisKKwkJX191bmlveHg1X2FuYWxvZ19jb25maWcodXNwLCBpICogMik7CisJCW91dGIoaSArIDEsIHN1YmRldl9pb2Jhc2UgKyA1KTsJLyogc2VuZHMgY2hhbm5lbCBudW1iZXIgdG8gY2FyZCAqLworCQlvdXRiKCdIJywgc3ViZGV2X2lvYmFzZSArIDYpOwkvKiByZXF1ZXN0cyBFRVBST00gd29ybGQgKi8KKwkJd2hpbGUgKCEoaW5iKHN1YmRldl9pb2Jhc2UgKyAwKSAmIFR4QkUpKSA7CS8qIHdhaXRzIHdoaWxlIHdyaXR0aW5nIHdpbGwgYmUgYWxsb3dlZCAqLworCQlvdXRiKDAsIHN1YmRldl9pb2Jhc2UgKyA2KTsKKworCQkvKiB3YWl0cyB3aGlsZSByZWFkaW5nIG9mIHR3byBieXRlcyB3aWxsIGJlIGFsbG93ZWQgKi8KKwkJd2hpbGUgKCEoaW5iKHN1YmRldl9pb2Jhc2UgKyAwKSAmIFJ4MkNBKSkgeworCQkJaWYgKC0tdG8gPD0gMCkgeworCQkJCW5kZWZfZmxhZyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAobmRlZl9mbGFnKSB7CisJCQl1c3AtPnVzcF9tb2R1bGVfdHlwZVtpXSA9IDA7CisJCQluZGVmX2ZsYWcgPSAwOworCQl9IGVsc2UKKwkJCXVzcC0+dXNwX21vZHVsZV90eXBlW2ldID0gaW5iKHN1YmRldl9pb2Jhc2UgKyA2KTsKKworCQlwcmludGsoIiBbJWRdIDB4JTAyeCB8IiwgaSwgdXNwLT51c3BfbW9kdWxlX3R5cGVbaV0pOworCQljb21lZGlfdWRlbGF5KDEpOworCX0KKworCXByaW50aygiXG4iKTsKKworCS8qIGluaXRpYWwgc3ViZGV2aWNlIGZvciBkaWdpdGFsIG9yIGFuYWxvZyBpL28gKi8KKwlzdWJkZXYtPnR5cGUgPSBDT01FRElfU1VCRF9ESU87CisJc3ViZGV2LT5wcml2YXRlID0gdXNwOworCXN1YmRldi0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFOworCXN1YmRldi0+bl9jaGFuID0gVU5JT1hYNV9OVU1fT0ZfQ0hBTlM7CisJc3ViZGV2LT5tYXhkYXRhID0gMHhGRkY7CisJc3ViZGV2LT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOworCXN1YmRldi0+aW5zbl9yZWFkID0gdW5pb3h4NV9zdWJkZXZfcmVhZDsKKwlzdWJkZXYtPmluc25fd3JpdGUgPSB1bmlveHg1X3N1YmRldl93cml0ZTsKKwlzdWJkZXYtPmluc25fY29uZmlnID0gdW5pb3h4NV9pbnNuX2NvbmZpZzsJLyogZm9yIGRpZ2l0YWwgbW9kdWxlcyBvbmx5ISEhICovCisKKwlwcmludGsoInN1YmRldmljZSBjb25maWd1cmVkXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fdW5pb3h4NV9kaWdpdGFsX3dyaXRlKHN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqIHVzcCwgdW5zaWduZWQgaW50ICogZGF0YSwKKwlpbnQgY2hhbm5lbCwgaW50IG1pbm9yKQoreworCWludCBjaGFubmVsX29mZnNldCwgdmFsOworCWludCBtYXNrID0gMSA8PCAoY2hhbm5lbCAmIDB4MDcpOworCisJaWYgKChjaGFubmVsX29mZnNldCA9IF9fdW5pb3h4NV9kZWZpbmVfY2hhbl9vZmZzZXQoY2hhbm5lbCkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJjb21lZGklZDogdW5kZWZpbmVkIGNoYW5uZWwgJWQuIGNoYW5uZWwgcmFuZ2UgaXMgMCAuLiAyM1xuIiwKKwkJCW1pbm9yLCBjaGFubmVsKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdmFsID0gdXNwLT51c3BfcHJldl93cl92YWxbY2hhbm5lbF9vZmZzZXQgLSAxXTsJLyogZ2V0dGluZyBwcmV2aW91cyB3cml0dGVuIHZhbHVlICovCisKKwlpZiAoKmRhdGEpCisJCXZhbCB8PSBtYXNrOworCWVsc2UKKwkJdmFsICY9IH5tYXNrOworCisJb3V0Yih2YWwsIHVzcC0+dXNwX2lvYmFzZSArIGNoYW5uZWxfb2Zmc2V0KTsKKwl1c3AtPnVzcF9wcmV2X3dyX3ZhbFtjaGFubmVsX29mZnNldCAtIDFdID0gdmFsOwkvKiBzYXZpbmcgbmV3IHdyaXR0ZW4gdmFsdWUgKi8KKworCXJldHVybiAxOworfQorCisvKiBmdW5jdGlvbiBmb3IgZGlnaXRhbCByZWFkaW5nICovCitzdGF0aWMgaW50IF9fdW5pb3h4NV9kaWdpdGFsX3JlYWQoc3RydWN0IHVuaW94eDVfc3ViZF9wcml2ICogdXNwLCB1bnNpZ25lZCBpbnQgKiBkYXRhLAorCWludCBjaGFubmVsLCBpbnQgbWlub3IpCit7CisJaW50IGNoYW5uZWxfb2Zmc2V0LCBtYXNrID0gMSA8PCAoY2hhbm5lbCAmIDB4MDcpOworCisJaWYgKChjaGFubmVsX29mZnNldCA9IF9fdW5pb3h4NV9kZWZpbmVfY2hhbl9vZmZzZXQoY2hhbm5lbCkpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJjb21lZGklZDogdW5kZWZpbmVkIGNoYW5uZWwgJWQuIGNoYW5uZWwgcmFuZ2UgaXMgMCAuLiAyM1xuIiwKKwkJCW1pbm9yLCBjaGFubmVsKTsKKwkJcmV0dXJuIDA7CisJfQorCisJKmRhdGEgPSBpbmIodXNwLT51c3BfaW9iYXNlICsgY2hhbm5lbF9vZmZzZXQpOworCSpkYXRhICY9IG1hc2s7CisKKwlpZiAoY2hhbm5lbF9vZmZzZXQgPiAxKQorCQljaGFubmVsIC09IDIgPDwgY2hhbm5lbF9vZmZzZXQ7CS8qIHRoaXMgb3BlcmF0aW9uIGlzIGNyZWF0ZWQgZm9yIGNvcnJlY3QgcmVhZGVkIHZhbHVlIHRvIDAgb3IgMSAqLworCisJKmRhdGEgPj49IGNoYW5uZWw7CisJcmV0dXJuIDE7Cit9CisKKyNpZiAwCQkJCS8qIG5vdCB1c2VkPyAqLworc3RhdGljIHZvaWQgX191bmlveHg1X2RpZ2l0YWxfY29uZmlnKHN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqIHVzcCwgaW50IG1vZGUpCit7CisJaW50IGksIG1hc2s7CisKKwltYXNrID0gKG1vZGUgPT0gQUxMXzJfT1VUUFVUKSA/IDB4RkYgOiAweDAwOworCXByaW50aygiQ09NRURJOiBtb2RlID0gJWRcbiIsIG1hc2spOworCisJb3V0YigxLCB1c3AtPnVzcF9pb2Jhc2UgKyAwKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCW91dGIobWFzaywgdXNwLT51c3BfaW9iYXNlICsgaSk7CisKKwlvdXRiKDAsIHVzcC0+dXNwX2lvYmFzZSArIDApOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX191bmlveHg1X2FuYWxvZ193cml0ZShzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIHVuc2lnbmVkIGludCAqIGRhdGEsCisJaW50IGNoYW5uZWwsIGludCBtaW5vcikKK3sKKwlpbnQgbW9kdWxlLCBpOworCisJbW9kdWxlID0gY2hhbm5lbCAvIDI7CS8qIGRlZmluaWcgbW9kdWxlIG51bWJlcigwIC4uIDExKSAqLworCWkgPSAoY2hhbm5lbCAlIDIpIDw8IDE7CS8qIGRlcGVuZHMgb24gdHlwZSBvZiBjaGFubmVsIChBIG9yIEIpICovCisKKwkvKiBkZWZpbmluZyBpZiBnaXZlbiBtb2R1bGUgY2FuIHdvcmsgb24gb3V0cHV0ICovCisJaWYgKCEodXNwLT51c3BfbW9kdWxlX3R5cGVbbW9kdWxlXSAmIE1PRFVMRV9PVVRQVVRfTUFTSykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6IG1vZHVsZSBpbiBwb3NpdGlvbiAlZCB3aXRoIGlkIDB4JTB4IGlzIGZvciBpbnB1dCBvbmx5IVxuIiwKKwkJCW1pbm9yLCBtb2R1bGUsIHVzcC0+dXNwX21vZHVsZV90eXBlW21vZHVsZV0pOworCQlyZXR1cm4gMDsKKwl9CisKKwlfX3VuaW94eDVfYW5hbG9nX2NvbmZpZyh1c3AsIGNoYW5uZWwpOworCS8qIHNhdmluZyBtaW5vciBieXRlICovCisJdXNwLT51c3BfZXh0cmFfZGF0YVttb2R1bGVdW2krK10gPSAodW5zaWduZWQgY2hhcikoKmRhdGEgJiAweDAwRkYpOworCS8qIHNhdmluZyBtYWpvciBieXRlICovCisJdXNwLT51c3BfZXh0cmFfZGF0YVttb2R1bGVdW2ldID0gKHVuc2lnbmVkIGNoYXIpKCgqZGF0YSAmIDB4RkYwMCkgPj4gOCk7CisKKwkvL3doaWxlKCEoKGluYih1c3AtPnVzcF9pb2Jhc2UgKyAwKSkgJiBUeEJFKSk7CisJb3V0Yihtb2R1bGUgKyAxLCB1c3AtPnVzcF9pb2Jhc2UgKyA1KTsJLyogc2VuZGluZyBtb2R1bGUgbnVtYmVyIHRvIGNhcmQoMSAuLiAxMikgKi8KKwlvdXRiKCdXJywgdXNwLT51c3BfaW9iYXNlICsgNik7CS8qIHNlbmRzIChXKXJpdGUgY29tbWFuZCB0byBtb2R1bGUgKi8KKworCS8qIHNlbmRpbmcgZm9yIGJ5dGVzIHRvIG1vZHVsZShvbmUgYnl0ZSBwZXIgY3ljbGUgaXRlcmF0aW9uKSAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJd2hpbGUgKCEoKGluYih1c3AtPnVzcF9pb2Jhc2UgKyAwKSkgJiBUeEJFKSkgOwkvKiB3YWl0cyB3aGlsZSB3cml0dGluZyB3aWxsIGJlIGFsbG93ZWQgKi8KKwkJb3V0Yih1c3AtPnVzcF9leHRyYV9kYXRhW21vZHVsZV1baV0sIHVzcC0+dXNwX2lvYmFzZSArIDYpOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fdW5pb3h4NV9hbmFsb2dfcmVhZChzdHJ1Y3QgdW5pb3h4NV9zdWJkX3ByaXYgKiB1c3AsIHVuc2lnbmVkIGludCAqIGRhdGEsCisJaW50IGNoYW5uZWwsIGludCBtaW5vcikKK3sKKwlpbnQgbW9kdWxlX25vLCByZWFkX2NoOworCWNoYXIgY29udHJvbDsKKworCW1vZHVsZV9ubyA9IGNoYW5uZWwgLyAyOworCXJlYWRfY2ggPSBjaGFubmVsICUgMjsJLyogZGVwZW5kIG9uIHR5cGUgb2YgY2hhbm5lbCAoQSBvciBCKSAqLworCisJLyogZGVmaW5pbmcgaWYgZ2l2ZW4gbW9kdWxlIGNhbiB3b3JrIG9uIGlucHV0ICovCisJaWYgKHVzcC0+dXNwX21vZHVsZV90eXBlW21vZHVsZV9ub10gJiBNT0RVTEVfT1VUUFVUX01BU0spIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiY29tZWRpJWQ6IG1vZHVsZSBpbiBwb3NpdGlvbiAlZCB3aXRoIGlkIDB4JTAyeCBpcyBmb3Igb3V0cHV0IG9ubHkiLAorCQkJbWlub3IsIG1vZHVsZV9ubywgdXNwLT51c3BfbW9kdWxlX3R5cGVbbW9kdWxlX25vXSk7CisJCXJldHVybiAwOworCX0KKworCV9fdW5pb3h4NV9hbmFsb2dfY29uZmlnKHVzcCwgY2hhbm5lbCk7CisJb3V0Yihtb2R1bGVfbm8gKyAxLCB1c3AtPnVzcF9pb2Jhc2UgKyA1KTsJLyogc2VuZHMgbW9kdWxlIG51bWJlciB0byBjYXJkKDEgLi4gMTIpICovCisJb3V0YignVicsIHVzcC0+dXNwX2lvYmFzZSArIDYpOwkvKiBzZW5kcyB0byBtb2R1bGUgKFYpZXJpZnkgY29tbWFuZCAqLworCWNvbnRyb2wgPSBpbmIodXNwLT51c3BfaW9iYXNlKTsJLyogZ2V0IGNvbnRyb2wgcmVnaXN0ZXIgYnl0ZSAqLworCisJLyogd2FpdHMgd2hpbGUgcmVhZGluZyBmb3VyIGJ5dGVzIHdpbGwgYmUgYWxsb3dlZCAqLworCXdoaWxlICghKChjb250cm9sID0gaW5iKHVzcC0+dXNwX2lvYmFzZSArIDApKSAmIFJ4NENBKSkgOworCisJLyogaWYgZm91ciBieXRlcyByZWFkZGluZyBlcnJvciBvY2N1cnMgLSByZXR1cm4gMChmYWxzZSkgKi8KKwlpZiAoKGNvbnRyb2wgJiBSeDRDQV9FUlJfTUFTSykpIHsKKwkJcHJpbnRrKCJDT01FREk6IDQgYnl0ZXMgZXJyb3JcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocmVhZF9jaCkKKwkJKmRhdGEgPSBpbncodXNwLT51c3BfaW9iYXNlICsgNik7CS8qIGNoYW5uZWwgQiAqLworCWVsc2UKKwkJKmRhdGEgPSBpbncodXNwLT51c3BfaW9iYXNlICsgNCk7CS8qIGNoYW5uZWwgQSAqLworCisJcmV0dXJuIDE7Cit9CisKKy8qIGNvbmZpZ3VyZSBjaGFubmVscyBmb3IgYW5hbG9nIGkvbyAoZXZlbiB0byBvdXRwdXQsIG9kZCB0byBpbnB1dCkgKi8KK3N0YXRpYyB2b2lkIF9fdW5pb3h4NV9hbmFsb2dfY29uZmlnKHN0cnVjdCB1bmlveHg1X3N1YmRfcHJpdiAqIHVzcCwgaW50IGNoYW5uZWwpCit7CisJaW50IGNoYW5fYSwgY2hhbl9iLCBjb25mLCBjaGFubmVsX29mZnNldDsKKworCWNoYW5uZWxfb2Zmc2V0ID0gX191bmlveHg1X2RlZmluZV9jaGFuX29mZnNldChjaGFubmVsKTsKKwljb25mID0gdXNwLT51c3BfcHJldl9jbl92YWxbY2hhbm5lbF9vZmZzZXQgLSAxXTsKKwljaGFuX2EgPSBjaGFuX2IgPSAxOworCisJLyogc2V0dGluZyBjaGFubmVsIEEgYW5kIGNoYW5uZWwgQiBtYXNrICovCisJaWYgKGNoYW5uZWwgJSAyID09IDApIHsKKwkJY2hhbl9hIDw8PSBjaGFubmVsICYgMHgwNzsKKwkJY2hhbl9iIDw8PSAoY2hhbm5lbCArIDEpICYgMHgwNzsKKwl9IGVsc2UgeworCQljaGFuX2EgPDw9IChjaGFubmVsIC0gMSkgJiAweDA3OworCQljaGFuX2IgPDw9IGNoYW5uZWwgJiAweDA3OworCX0KKworCWNvbmYgfD0gY2hhbl9hOwkJLyogZXZlbiBjaGFubmVsIG90IG91dHB1dCAqLworCWNvbmYgJj0gfmNoYW5fYjsJLyogb2RkIGNoYW5uZWwgdG8gaW5wdXQgKi8KKworCW91dGIoMSwgdXNwLT51c3BfaW9iYXNlICsgMCk7CisJb3V0Yihjb25mLCB1c3AtPnVzcF9pb2Jhc2UgKyBjaGFubmVsX29mZnNldCk7CisJb3V0YigwLCB1c3AtPnVzcF9pb2Jhc2UgKyAwKTsKKworCXVzcC0+dXNwX3ByZXZfY25fdmFsW2NoYW5uZWxfb2Zmc2V0IC0gMV0gPSBjb25mOworfQorCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXAorICogdGhpcyBmdW5jdGlvbiBkZWZpbmVzIGlmIHRoZSBnaXZlbiBjaGFubmVsIG51bWJlciAgKgorICogZW50ZXJzIGluIGRlZmF1bHQgbnVtZXJpYyBpbnRlcnNwYWNlKGZyb20gMCB0byAyMykgKgorICogYW5kIGl0IHJldHVybnMgYWRkcmVzcyBvZmZzZXQgZm9yIHVzYWdlIG5lZWRlZCAgICAgKgorICogY2hhbm5lbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorXCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworc3RhdGljIGludCBfX3VuaW94eDVfZGVmaW5lX2NoYW5fb2Zmc2V0KGludCBjaGFuX251bSkKK3sKKworCWlmIChjaGFuX251bSA8IDAgfHwgY2hhbl9udW0gPiAyMykKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIChjaGFuX251bSA+PiAzKSArIDE7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKaW5kZXggMzUxMzgyNS4uZDBiNTllOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwpAQCAtMSw0ICsxLDQgQEAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjEiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4yIgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJCZXJuZCBQb3JyLCBCZXJuZFBvcnJAZjJzLmNvbSIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlN0aXJsaW5nL0lUTCBVU0ItRFVYIC0tIEJlcm5kLlBvcnJAZjJzLmNvbSIKIC8qCkBAIC0yNSw4ICsyNSw4IEBACiBEZXNjcmlwdGlvbjogVW5pdmVyc2l0eSBvZiBTdGlybGluZyBVU0IgREFRICYgSU5DSVRFIFRlY2hub2xvZ3kgTGltaXRlZAogRGV2aWNlczogW0lUTF0gVVNCLURVWCAodXNiZHV4Lm8pCiBBdXRob3I6IEJlcm5kIFBvcnIgPEJlcm5kUG9yckBmMnMuY29tPgotVXBkYXRlZDogMjUgTm92IDIwMDcKLVN0YXR1czogVGVzdGluZworVXBkYXRlZDogOCBEZWMgMjAwOAorU3RhdHVzOiBTdGFibGUKIENvbmZpZ3VyYXRpb24gb3B0aW9uczoKICAgWW91IGhhdmUgdG8gdXBsb2FkIGZpcm13YXJlIHdpdGggdGhlIC1pIG9wdGlvbi4gVGhlCiAgIGZpcm13YXJlIGlzIHVzdWFsbHkgaW5zdGFsbGVkIHVuZGVyIC91c3Ivc2hhcmUvdXNiIG9yCkBAIC03OSw2ICs3OSw3IEBACiAgKiAxLjI6ICBhZGRlZCBQV00gc3Vwb3J0IHZpYSBFUDQKICAqIDIuMDogIFBXTSBzZWVtcyB0byBiZSBzdGFibGUgYW5kIGlzIG5vdCBpbnRlcmZlcmluZyB3aXRoIHRoZSBvdGhlciBmdW5jdGlvbnMKICAqIDIuMTogIGNoYW5nZWQgUFdNIEFQSQorICogMi4yOiAgYWRkZWQgZmlybXdhcmUga2VybmVsIHJlcXVlc3QgdG8gZml4IGFuIHVkZXYgcHJvYmxlbQogICoKICAqLwogCkBAIC05NCw2ICs5NSw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgogCkBAIC0yMTIsNyArMjE0LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogY29tZWRpIGNvbnN0YW50cyAqLwotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdXNiZHV4X2FpX3JhbmdlID0geyA0LCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdXNiZHV4X2FpX3JhbmdlID0geyA0LCB7CiAJCQlCSVBfUkFOR0UoNC4wOTYpLAogCQkJQklQX1JBTkdFKDQuMDk2IC8gMiksCiAJCQlVTklfUkFOR0UoNC4wOTYpLApAQCAtMjIwLDcgKzIyMiw3IEBACiAJfQogfTsKIAotc3RhdGljIGNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdXNiZHV4X2FvX3JhbmdlID0geyAyLCB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdXNiZHV4X2FvX3JhbmdlID0geyAyLCB7CiAJCQlCSVBfUkFOR0UoNC4wOTYpLAogCQkJVU5JX1JBTkdFKDQuMDk2KSwKIAl9CkBAIC0yNTEsNyArMjUzLDcgQEAKIAkvKiBwd20tdHJhbnNmZXIgaGFuZGxpbmcgKi8KIAlzdHJ1Y3QgdXJiICp1cmJQd207CiAJLyogUFdNIHBlcmlvZCAqLwotCWxzYW1wbF90IHB3bVBlcmlvZDsKKwl1bnNpZ25lZCBpbnQgcHdtUGVyaW9kOwogCS8qIFBXTSBpbnRlcm5hbCBkZWxheSBmb3IgdGhlIEdQSUYgaW4gdGhlIEZYMiAqLwogCWludDhfdCBwd21EZWxheTsKIAkvKiBzaXplIG9mIHRoZSBQV00gYnVmZmVyIHdoaWNoIGhvbGRzIHRoZSBiaXQgcGF0dGVybiAqLwpAQCAtMjY3LDcgKzI2OSw3IEBACiAJLyogaW50ZXJmYWNlIHN0cnVjdHVyZSBpbiAyLjYgKi8KIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOwogCS8qIGNvbWVkaSBkZXZpY2UgZm9yIHRoZSBpbnRlcnJ1cHQgY29udGV4dCAqLwotCWNvbWVkaV9kZXZpY2UgKmNvbWVkaWRldjsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqY29tZWRpZGV2OwogCS8qIGlzIGl0IFVTQl9TUEVFRF9ISUdIIG9yIG5vdD8gKi8KIAlzaG9ydCBpbnQgaGlnaF9zcGVlZDsKIAkvKiBhc3luY2hyb25vdXMgY29tbWFuZCBpcyBydW5uaW5nICovCkBAIC0zNjEsNyArMzYzLDcgQEAKICAqIFRoaXMgd2lsbCBjYW5jZWwgYSBydW5uaW5nIGFjcXVpc2l0aW9uIG9wZXJhdGlvbi4KICAqIFRoaXMgaXMgY2FsbGVkIGJ5IGNvbWVkaSBidXQgbmV2ZXIgZnJvbSBpbnNpZGUgdGhlIGRyaXZlci4KICAqLwotc3RhdGljIGludCB1c2JkdXhfYWlfY2FuY2VsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgdXNiZHV4X2FpX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YjsKIAlpbnQgcmVzID0gMDsKQEAgLTM5MCw4ICszOTIsOCBAQAogewogCWludCBpLCBlcnIsIG47CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWI7Ci0JY29tZWRpX2RldmljZSAqdGhpc19jb21lZGlkZXY7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqdGhpc19jb21lZGlkZXY7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAkvKiB0aGUgY29udGV4dCB2YXJpYWJsZSBwb2ludHMgdG8gdGhlIHN1YmRldmljZSAqLwogCXRoaXNfY29tZWRpZGV2ID0gdXJiLT5jb250ZXh0OwpAQCAtNTU5LDcgKzU2MSw3IEBACiB9CiAKIC8qIGZvcmNlIHVubGluaywgaXMgY2FsbGVkIGJ5IGNvbWVkaSAqLwotc3RhdGljIGludCB1c2JkdXhfYW9fY2FuY2VsKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgdXNiZHV4X2FvX2NhbmNlbChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YiA9IGRldi0+cHJpdmF0ZTsKIAlpbnQgcmVzID0gMDsKQEAgLTU4NCw4ICs1ODYsOCBAQAogCWludCBpLCByZXQ7CiAJaW50OF90ICpkYXRhcDsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YjsKLQljb21lZGlfZGV2aWNlICp0aGlzX2NvbWVkaWRldjsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICp0aGlzX2NvbWVkaWRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCS8qIHRoZSBjb250ZXh0IHZhcmlhYmxlIHBvaW50cyB0byB0aGUgc3ViZGV2aWNlICovCiAJdGhpc19jb21lZGlkZXYgPSB1cmItPmNvbnRleHQ7CkBAIC02NTQsNyArNjU2LDcgQEAKIAkJKCh1aW50OF90ICopICh1cmItPnRyYW5zZmVyX2J1ZmZlcikpWzBdID0KIAkJCXMtPmFzeW5jLT5jbWQuY2hhbmxpc3RfbGVuOwogCQlmb3IgKGkgPSAwOyBpIDwgcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW47IGkrKykgewotCQkJc2FtcGxfdCB0ZW1wOworCQkJc2hvcnQgdGVtcDsKIAkJCWlmIChpID49IE5VTU9VVENIQU5ORUxTKQogCQkJCWJyZWFrOwogCkBAIC03MTgsMzEgKzcyMCwyOSBAQAogCWludCBlcnJjb2RlID0gMDsKIAl1aW50OF90IGxvY2FsX3RyYW5zZmVyX2J1ZmZlclsxNl07CiAKLQlpZiAodXNiZHV4c3ViLT5wcm9iZWQpIHsKLQkJLyogN2Y5MiB0byB6ZXJvICovCi0JCWxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSA9IDA7Ci0JCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4c3ViLT51c2JkZXYsCi0JCQkvKiBjcmVhdGUgYSBwaXBlIGZvciBhIGNvbnRyb2wgdHJhbnNmZXIgKi8KLQkJCXVzYl9zbmRjdHJscGlwZSh1c2JkdXhzdWItPnVzYmRldiwgMCksCi0JCQkvKiBiUmVxdWVzdCwgIkZpcm13YXJlIiAqLwotCQkJVVNCRFVYU1VCX0ZJUk1XQVJFLAotCQkJLyogYm1SZXF1ZXN0VHlwZSAqLwotCQkJVkVORE9SX0RJUl9PVVQsCi0JCQkvKiBWYWx1ZSAqLwotCQkJVVNCRFVYU1VCX0NQVUNTLAotCQkJLyogSW5kZXggKi8KLQkJCTB4MDAwMCwKLQkJCS8qIGFkZHJlc3Mgb2YgdGhlIHRyYW5zZmVyIGJ1ZmZlciAqLwotCQkJbG9jYWxfdHJhbnNmZXJfYnVmZmVyLAotCQkJLyogTGVuZ3RoICovCi0JCQkxLAotCQkJLyogVGltZW91dCAqLwotCQkJRVpUSU1FT1VUKTsKLQkJaWYgKGVycmNvZGUgPCAwKSB7Ci0JCQlkZXZfZXJyKCZ1c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAotCQkJCSJjb21lZGlfOiBjb250cm9sIG1zZyBmYWlsZWQgKHN0YXJ0KVxuIik7Ci0JCQlyZXR1cm4gZXJyY29kZTsKLQkJfQorCS8qIDdmOTIgdG8gemVybyAqLworCWxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSA9IDA7CisJZXJyY29kZSA9IHVzYl9jb250cm9sX21zZyh1c2JkdXhzdWItPnVzYmRldiwKKwkJCQkgIC8qIGNyZWF0ZSBhIHBpcGUgZm9yIGEgY29udHJvbCB0cmFuc2ZlciAqLworCQkJCSAgdXNiX3NuZGN0cmxwaXBlKHVzYmR1eHN1Yi0+dXNiZGV2LCAwKSwKKwkJCQkgIC8qIGJSZXF1ZXN0LCAiRmlybXdhcmUiICovCisJCQkJICBVU0JEVVhTVUJfRklSTVdBUkUsCisJCQkJICAvKiBibVJlcXVlc3RUeXBlICovCisJCQkJICBWRU5ET1JfRElSX09VVCwKKwkJCQkgIC8qIFZhbHVlICovCisJCQkJICBVU0JEVVhTVUJfQ1BVQ1MsCisJCQkJICAvKiBJbmRleCAqLworCQkJCSAgMHgwMDAwLAorCQkJCSAgLyogYWRkcmVzcyBvZiB0aGUgdHJhbnNmZXIgYnVmZmVyICovCisJCQkJICBsb2NhbF90cmFuc2Zlcl9idWZmZXIsCisJCQkJICAvKiBMZW5ndGggKi8KKwkJCQkgIDEsCisJCQkJICAvKiBUaW1lb3V0ICovCisJCQkJICBFWlRJTUVPVVQpOworCWlmIChlcnJjb2RlIDwgMCkgeworCQlkZXZfZXJyKCZ1c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAorCQkJImNvbWVkaV86IGNvbnRyb2wgbXNnIGZhaWxlZCAoc3RhcnQpXG4iKTsKKwkJcmV0dXJuIGVycmNvZGU7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzUyLDI4ICs3NTIsMjcgQEAKIAlpbnQgZXJyY29kZSA9IDA7CiAKIAl1aW50OF90IGxvY2FsX3RyYW5zZmVyX2J1ZmZlclsxNl07Ci0JaWYgKHVzYmR1eHN1Yi0+cHJvYmVkKSB7Ci0JCS8qIDdmOTIgdG8gb25lICovCi0JCWxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSA9IDE7Ci0JCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4c3ViLT51c2JkZXYsCi0JCQl1c2Jfc25kY3RybHBpcGUodXNiZHV4c3ViLT51c2JkZXYsIDApLAotCQkJLyogYlJlcXVlc3QsICJGaXJtd2FyZSIgKi8KLQkJCVVTQkRVWFNVQl9GSVJNV0FSRSwKLQkJCS8qIGJtUmVxdWVzdFR5cGUgKi8KLQkJCVZFTkRPUl9ESVJfT1VULAotCQkJLyogVmFsdWUgKi8KLQkJCVVTQkRVWFNVQl9DUFVDUywKLQkJCS8qIEluZGV4ICovCi0JCQkweDAwMDAsIGxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKLQkJCS8qIExlbmd0aCAqLwotCQkJMSwKLQkJCS8qIFRpbWVvdXQgKi8KLQkJCUVaVElNRU9VVCk7Ci0JCWlmIChlcnJjb2RlIDwgMCkgewotCQkJZGV2X2VycigmdXNiZHV4c3ViLT5pbnRlcmZhY2UtPmRldiwKLQkJCQkiY29tZWRpXzogY29udHJvbCBtc2cgZmFpbGVkIChzdG9wKVxuIik7Ci0JCQlyZXR1cm4gZXJyY29kZTsKLQkJfQorCisJLyogN2Y5MiB0byBvbmUgKi8KKwlsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0gPSAxOworCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4c3ViLT51c2JkZXYsCisJCQkJICB1c2Jfc25kY3RybHBpcGUodXNiZHV4c3ViLT51c2JkZXYsIDApLAorCQkJCSAgLyogYlJlcXVlc3QsICJGaXJtd2FyZSIgKi8KKwkJCQkgIFVTQkRVWFNVQl9GSVJNV0FSRSwKKwkJCQkgIC8qIGJtUmVxdWVzdFR5cGUgKi8KKwkJCQkgIFZFTkRPUl9ESVJfT1VULAorCQkJCSAgLyogVmFsdWUgKi8KKwkJCQkgIFVTQkRVWFNVQl9DUFVDUywKKwkJCQkgIC8qIEluZGV4ICovCisJCQkJICAweDAwMDAsIGxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIC8qIExlbmd0aCAqLworCQkJCSAgMSwKKwkJCQkgIC8qIFRpbWVvdXQgKi8KKwkJCQkgIEVaVElNRU9VVCk7CisJaWYgKGVycmNvZGUgPCAwKSB7CisJCWRldl9lcnIoJnVzYmR1eHN1Yi0+aW50ZXJmYWNlLT5kZXYsCisJCQkiY29tZWRpXzogY29udHJvbCBtc2cgZmFpbGVkIChzdG9wKVxuIik7CisJCXJldHVybiBlcnJjb2RlOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTc4NCwxMyArNzgzLDcgQEAKIHsKIAlpbnQgZXJyY29kZTsKIAotCWlmICh1c2JkdXhzdWItPnByb2JlZCkgewotCQlkZXZfZGJnKCZ1c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAotCQkJImNvbWVkaSVkOiB1c2JkdXg6IHVwbG9hZGluZyAlZCBieXRlcyIKLQkJCSIgdG8gYWRkciAlZCwgZmlyc3QgYnl0ZT0lZC5cbiIsCi0JCQl1c2JkdXhzdWItPmNvbWVkaWRldi0+bWlub3IsIGxlbiwKLQkJCXN0YXJ0QWRkciwgbG9jYWxfdHJhbnNmZXJfYnVmZmVyWzBdKTsKLQkJZXJyY29kZSA9IHVzYl9jb250cm9sX21zZyh1c2JkdXhzdWItPnVzYmRldiwKKwllcnJjb2RlID0gdXNiX2NvbnRyb2xfbXNnKHVzYmR1eHN1Yi0+dXNiZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKHVzYmR1eHN1Yi0+dXNiZGV2LCAwKSwKIAkJCS8qIGJyZXF1ZXN0LCBmaXJtd2FyZSAqLwogCQkJVVNCRFVYU1VCX0ZJUk1XQVJFLApAQCAtODA2LDE2ICs3OTksMTIgQEAKIAkJCWxlbiwKIAkJCS8qIHRpbWVvdXQgKi8KIAkJCUVaVElNRU9VVCk7Ci0JCWRldl9kYmcoJnVzYmR1eHN1Yi0+aW50ZXJmYWNlLT5kZXYsCi0JCQkiY29tZWRpXzogcmVzdWx0PSVkXG4iLCBlcnJjb2RlKTsKLQkJaWYgKGVycmNvZGUgPCAwKSB7Ci0JCQlkZXZfZXJyKCZ1c2JkdXhzdWItPmludGVyZmFjZS0+ZGV2LAotCQkJCSJjb21lZGlfOiB1cGxvYWQgZmFpbGVkXG4iKTsKLQkJCXJldHVybiBlcnJjb2RlOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogbm8gZGV2aWNlIG9uIHRoZSBidXMgZm9yIHRoaXMgaW5kZXggKi8KLQkJcmV0dXJuIC1FRkFVTFQ7CisJZGV2X2RiZygmdXNiZHV4c3ViLT5pbnRlcmZhY2UtPmRldiwKKwkJImNvbWVkaV86IHJlc3VsdD0lZFxuIiwgZXJyY29kZSk7CisJaWYgKGVycmNvZGUgPCAwKSB7CisJCWRldl9lcnIoJnVzYmR1eHN1Yi0+aW50ZXJmYWNlLT5kZXYsCisJCSJjb21lZGlfOiB1cGxvYWQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGVycmNvZGU7CiAJfQogCXJldHVybiAwOwogfQpAQCAtOTA3LDggKzg5Niw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4X2FpX2NtZHRlc3QoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgICBjb21lZGlfY21kICpjbWQpCitzdGF0aWMgaW50IHVzYmR1eF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICBzdHJ1Y3QgY29tZWRpX2NtZCAqY21kKQogewogCWludCBlcnIgPSAwLCB0bXAsIGk7CiAJdW5zaWduZWQgaW50IHRtcFRpbWVyOwpAQCAtMTEyNyw3ICsxMTE2LDcgQEAKIAlyZXR1cm4gLUVGQVVMVDsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfYWlfaW50dHJpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCitzdGF0aWMgaW50IHVzYmR1eF9haV9pbnR0cmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAogCQkJICAgICB1bnNpZ25lZCBpbnQgdHJpZ251bSkKIHsKIAlpbnQgcmV0OwpAQCAtMTE3MSw5ICsxMTYwLDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfYWlfY21kKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgdXNiZHV4X2FpX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQljb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJdW5zaWduZWQgaW50IGNoYW4sIHJhbmdlOwogCWludCBpLCByZXQ7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CkBAIC0xMjg3LDExICsxMjc2LDExIEBACiB9CiAKIC8qIE1vZGUgMCBpcyB1c2VkIHRvIGdldCBhIHNpbmdsZSBjb252ZXJzaW9uIG9uIGRlbWFuZCAqLwotc3RhdGljIGludCB1c2JkdXhfYWlfaW5zbl9yZWFkKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHVzYmR1eF9haV9pbnNuX3JlYWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJaW50IGk7Ci0JbHNhbXBsX3Qgb25lID0gMDsKKwl1bnNpZ25lZCBpbnQgb25lID0gMDsKIAlpbnQgY2hhbiwgcmFuZ2U7CiAJaW50IGVycjsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YiA9IGRldi0+cHJpdmF0ZTsKQEAgLTEzNDgsOCArMTMzNyw4IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogYW5hbG9nIG91dCAqLwogCi1zdGF0aWMgaW50IHVzYmR1eF9hb19pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzLAotCQkJICAgICAgIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgdXNiZHV4X2FvX2luc25fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgaTsKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwpAQCAtMTM3MCw4ICsxMzU5LDggQEAKIAlyZXR1cm4gaTsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfYW9faW5zbl93cml0ZShjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB1c2JkdXhfYW9faW5zbl93cml0ZShzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgaSwgZXJyOwogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CkBAIC0xNDIwLDcgKzE0MDksNyBAQAogCXJldHVybiBpOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9hb19pbnR0cmlnKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKK3N0YXRpYyBpbnQgdXNiZHV4X2FvX2ludHRyaWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCiAJCQkgICAgIHVuc2lnbmVkIGludCB0cmlnbnVtKQogewogCWludCByZXQ7CkBAIC0xNDYxLDggKzE0NTAsOCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9hb19jbWR0ZXN0KGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgY29tZWRpX2NtZCAqY21kKQorc3RhdGljIGludCB1c2JkdXhfYW9fY21kdGVzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKIAlpbnQgZXJyID0gMCwgdG1wOwogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwpAQCAtMTYwMCw5ICsxNTg5LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfYW9fY21kKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcykKK3N0YXRpYyBpbnQgdXNiZHV4X2FvX2NtZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQljb21lZGlfY21kICpjbWQgPSAmcy0+YXN5bmMtPmNtZDsKKwlzdHJ1Y3QgY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CiAJdW5zaWduZWQgaW50IGNoYW4sIGdhaW47CiAJaW50IGksIHJldDsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp0aGlzX3VzYmR1eHN1YiA9IGRldi0+cHJpdmF0ZTsKQEAgLTE3MDgsOCArMTY5Nyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4X2Rpb19pbnNuX2NvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHVzYmR1eF9kaW9faW5zbl9jb25maWcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkJICBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAlpbnQgY2hhbiA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCkBAIC0xNzM5LDggKzE3MjgsOCBAQAogCXJldHVybiBpbnNuLT5uOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9kaW9faW5zbl9iaXRzKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQljb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHVzYmR1eF9kaW9faW5zbl9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CkBAIC0xNzg2LDggKzE3NzUsOCBAQAogfQogCiAvKiByZWFkcyB0aGUgNCBjb3VudGVycywgb25seSB0d28gYXJlIHVzZWQganVzdCBub3cgKi8KLXN0YXRpYyBpbnQgdXNiZHV4X2NvdW50ZXJfcmVhZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB1c2JkdXhfY291bnRlcl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwogCWludCBjaGFuID0gaW5zbi0+Y2hhbnNwZWM7CkBAIC0xODIwLDggKzE4MDksOCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9jb3VudGVyX3dyaXRlKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCQljb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHVzYmR1eF9jb3VudGVyX3dyaXRlKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCXN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwogCWludCBlcnI7CkBAIC0xODUwLDggKzE4MzksOCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9jb3VudGVyX2NvbmZpZyhjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJIGNvbWVkaV9pbnNuICppbnNuLCBsc2FtcGxfdCAqZGF0YSkKK3N0YXRpYyBpbnQgdXNiZHV4X2NvdW50ZXJfY29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJCSBzdHJ1Y3QgY29tZWRpX2luc24gKmluc24sIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKIAkvKiBub3RoaW5nIHRvIGRvIHNvIGZhciAqLwogCXJldHVybiAyOwpAQCAtMTg5NCw3ICsxODgzLDcgQEAKIH0KIAogLyogZm9yY2UgdW5saW5rIC0gaXMgY2FsbGVkIGJ5IGNvbWVkaSAqLwotc3RhdGljIGludCB1c2JkdXhfcHdtX2NhbmNlbChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMpCitzdGF0aWMgaW50IHVzYmR1eF9wd21fY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViID0gZGV2LT5wcml2YXRlOwogCWludCByZXMgPSAwOwpAQCAtMTkxNiw4ICsxOTA1LDggQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCB1c2JkdXhzdWIgKnRoaXNfdXNiZHV4c3ViOwotCWNvbWVkaV9kZXZpY2UgKnRoaXNfY29tZWRpZGV2OwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKnRoaXNfY29tZWRpZGV2OworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJLyogcHJpbnRrKEtFUk5fREVCVUcgIlBXTTogSVJRXG4iKTsgKi8KIApAQCAtMjAwNyw4ICsxOTk2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfcHdtX3BlcmlvZChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkgICAgIGxzYW1wbF90IHBlcmlvZCkKK3N0YXRpYyBpbnQgdXNiZHV4X3B3bV9wZXJpb2Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgIHVuc2lnbmVkIGludCBwZXJpb2QpCiB7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CiAJaW50IGZ4MmRlbGF5ID0gMjU1OwpAQCAtMjAzNSw3ICsyMDI0LDcgQEAKIH0KIAogLyogaXMgY2FsbGVkIGZyb20gaW5zbiBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gZG8gYWxsIHRoZSBzYW5pdHkgY2hlY2tzICovCi1zdGF0aWMgaW50IHVzYmR1eF9wd21fc3RhcnQoY29tZWRpX2RldmljZSAqZGV2LCBjb21lZGlfc3ViZGV2aWNlICpzKQorc3RhdGljIGludCB1c2JkdXhfcHdtX3N0YXJ0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzKQogewogCWludCByZXQsIGk7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CkBAIC0yMDY3LDggKzIwNTYsOCBAQAogfQogCiAvKiBnZW5lcmF0ZXMgdGhlIGJpdCBwYXR0ZXJuIGZvciBQV00gd2l0aCB0aGUgb3B0aW9uYWwgc2lnbiBiaXQgKi8KLXN0YXRpYyBpbnQgdXNiZHV4X3B3bV9wYXR0ZXJuKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgIGludCBjaGFubmVsLCBsc2FtcGxfdCB2YWx1ZSwgbHNhbXBsX3Qgc2lnbikKK3N0YXRpYyBpbnQgdXNiZHV4X3B3bV9wYXR0ZXJuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgaW50IHNpZ24pCiB7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CiAJaW50IGksIHN6YnVmOwpAQCAtMjEwOCw4ICsyMDk3LDggQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCB1c2JkdXhfcHdtX3dyaXRlKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICBjb21lZGlfaW5zbiAqaW5zbiwgbHNhbXBsX3QgKmRhdGEpCitzdGF0aWMgaW50IHVzYmR1eF9wd21fd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCisJCQkgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CiAKQEAgLTIxMzMsMTYgKzIxMjIsMTYgQEAKIAkJCQkgIGRhdGFbMF0sIDApOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9wd21fcmVhZChjb21lZGlfZGV2aWNlICp4MSwgY29tZWRpX3N1YmRldmljZSAqeDIsCi0JCQkgICBjb21lZGlfaW5zbiAqeDMsIGxzYW1wbF90ICp4NCkKK3N0YXRpYyBpbnQgdXNiZHV4X3B3bV9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICp4MSwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKngyLAorCQkJICAgc3RydWN0IGNvbWVkaV9pbnNuICp4MywgdW5zaWduZWQgaW50ICp4NCkKIHsKIAkvKiBub3QgbmVlZGVkICovCiAJcmV0dXJuIC1FSU5WQUw7CiB9OwogCiAvKiBzd2l0Y2hlcyBvbi9vZmYgUFdNICovCi1zdGF0aWMgaW50IHVzYmR1eF9wd21fY29uZmlnKGNvbWVkaV9kZXZpY2UgKmRldiwgY29tZWRpX3N1YmRldmljZSAqcywKLQkJCSAgICAgY29tZWRpX2luc24gKmluc24sIGxzYW1wbF90ICpkYXRhKQorc3RhdGljIGludCB1c2JkdXhfcHdtX2NvbmZpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuLCB1bnNpZ25lZCBpbnQgKmRhdGEpCiB7CiAJc3RydWN0IHVzYmR1eHN1YiAqdGhpc191c2JkdXhzdWIgPSBkZXYtPnByaXZhdGU7CiAJc3dpdGNoIChkYXRhWzBdKSB7CkBAIC0yMjkyLDEzICsyMjgxLDEzIEBACiAjZGVmaW5lIEZJUk1XQVJFX01BWF9MRU4gMHgyMDAwCiAKIC8qIHRha2VuIGZyb20gRGF2aWQgQnJvd25lbGwncyBmeGxvYWQgYW5kIGFkanVzdGVkIGZvciB0aGlzIGRyaXZlciAqLwotc3RhdGljIGludCByZWFkX2Zpcm13YXJlKHN0cnVjdCB1c2JkdXhzdWIgKnVzYmR1eHN1Yiwgdm9pZCAqZmlybXdhcmVQdHIsCitzdGF0aWMgaW50IHJlYWRfZmlybXdhcmUoc3RydWN0IHVzYmR1eHN1YiAqdXNiZHV4c3ViLCBjb25zdCB2b2lkICpmaXJtd2FyZVB0ciwKIAkJCSBsb25nIHNpemUpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnVzYmR1eHN1Yi0+aW50ZXJmYWNlLT5kZXY7CiAJaW50IGkgPSAwOwogCXVuc2lnbmVkIGNoYXIgKmZwID0gKGNoYXIgKilmaXJtd2FyZVB0cjsKLQl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZUJpbmFyeSA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqZmlybXdhcmVCaW5hcnk7CiAJaW50IHJlcyA9IDA7CiAJaW50IG1heEFkZHIgPSAwOwogCkBAIC0yMzIyLDYgKzIzMTEsNyBAQAogCQkJaisrOwogCQkJaWYgKGogPj0gc2l6ZW9mKGJ1ZikpIHsKIAkJCQlkZXZfZXJyKGRldiwgImNvbWVkaV86IGJvZ3VzIGZpcm13YXJlIGZpbGUhXG4iKTsKKwkJCQlrZnJlZShmaXJtd2FyZUJpbmFyeSk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCQl9CkBAIC0yMzQ0LDYgKzIzMzQsNyBAQAogCQlpZiAoYnVmWzBdICE9ICc6JykgewogCQkJZGV2X2VycihkZXYsICJjb21lZGlfOiB1cGxvYWQ6IG5vdCBhbiBpaGV4IHJlY29yZDogJXMiLAogCQkJCWJ1Zik7CisJCQlrZnJlZShmaXJtd2FyZUJpbmFyeSk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCkBAIC0yMzYwLDYgKzIzNTEsNyBAQAogCQlpZiAobWF4QWRkciA+PSBGSVJNV0FSRV9NQVhfTEVOKSB7CiAJCQlkZXZfZXJyKGRldiwgImNvbWVkaV86IGZpcm13YXJlIHVwbG9hZCBnb2VzICIKIAkJCQkiYmV5b25kIEZYMiBSQU0gYm91bmRhcmllcy5cbiIpOworCQkJa2ZyZWUoZmlybXdhcmVCaW5hcnkpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAkJLyogZGV2X2RiZyhkZXYsICJjb21lZGlfOiBvZmY9JXgsIGxlbj0leDpcbiIsIG9mZiwgbGVuKTsgKi8KQEAgLTIzNzUsNiArMjM2Nyw3IEBACiAJCWlmICh0eXBlICE9IDApIHsKIAkJCWRldl9lcnIoZGV2LCAiY29tZWRpXzogdW5zdXBwb3J0ZWQgcmVjb3JkIHR5cGU6ICV1XG4iLAogCQkJCXR5cGUpOworCQkJa2ZyZWUoZmlybXdhcmVCaW5hcnkpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIApAQCAtMjM5NSw2ICsyMzg4LDM0IEBACiAJcmV0dXJuIHJlczsKIH0KIAorc3RhdGljIHZvaWQgdXNiZHV4X2Zpcm13YXJlX3JlcXVlc3RfY29tcGxldGVfaGFuZGxlcihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LAorCQkJCQkJICAgICB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCB1c2JkdXhzdWIgKnVzYmR1eHN1Yl90bXAgPSBjb250ZXh0OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSB1c2JkdXhzdWJfdG1wLT51c2JkZXY7CisJaW50IHJldDsKKworCWlmIChmdyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnVzYmRldi0+ZGV2LAorCQkJIkZpcm13YXJlIGNvbXBsZXRlIGhhbmRsZXIgd2l0aG91dCBmaXJtd2FyZSFcbiIpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiB3ZSBuZWVkIHRvIHVwbG9hZCB0aGUgZmlybXdhcmUgaGVyZSBiZWNhdXNlIGZ3IHdpbGwgYmUKKwkgKiBmcmVlZCBvbmNlIHdlJ3ZlIGxlZnQgdGhpcyBmdW5jdGlvbgorCSAqLworCXJldCA9IHJlYWRfZmlybXdhcmUodXNiZHV4c3ViX3RtcCwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmdXNiZGV2LT5kZXYsCisJCQkiQ291bGQgbm90IHVwbG9hZCBmaXJtd2FyZSAoZXJyPSVkKVxuIiwKKwkJCXJldCk7CisJCXJldHVybjsKKwl9CisJY29tZWRpX3VzYl9hdXRvX2NvbmZpZyh1c2JkZXYsIEJPQVJETkFNRSk7Cit9CisKIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHVyYnMgYW5kIGluaXRpYWxpc2UgdGhlbSAqLwogc3RhdGljIGludCB1c2JkdXhzdWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVpbnRlcmYsCiAJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC0yNDAzLDYgKzI0MjQsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1aW50ZXJmLT5kZXY7CiAJaW50IGk7CiAJaW50IGluZGV4OworCWludCByZXQ7CiAKIAlkZXZfZGJnKGRldiwgImNvbWVkaV86IHVzYmR1eF86ICIKIAkJImZpbmRpbmcgYSBmcmVlIHN0cnVjdHVyZSBmb3IgdGhlIHVzYi1kZXZpY2VcbiIpOwpAQCAtMjYzNyw2ICsyNjU5LDE5IEBACiAJLyogd2UndmUgcmVhY2hlZCB0aGUgYm90dG9tIG9mIHRoZSBmdW5jdGlvbiAqLwogCXVzYmR1eHN1YltpbmRleF0ucHJvYmVkID0gMTsKIAl1cCgmc3RhcnRfc3RvcF9zZW0pOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsCisJCQkJICAgICAgRldfQUNUSU9OX0hPVFBMVUcsCisJCQkJICAgICAgInVzYmR1eF9maXJtd2FyZS5oZXgiLAorCQkJCSAgICAgICZ1ZGV2LT5kZXYsCisJCQkJICAgICAgdXNiZHV4c3ViICsgaW5kZXgsCisJCQkJICAgICAgdXNiZHV4X2Zpcm13YXJlX3JlcXVlc3RfY29tcGxldGVfaGFuZGxlcik7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGxvYWQgZmlybXdhcmUgKGVycj0lZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCiAJZGV2X2luZm8oZGV2LCAiY29tZWRpXzogdXNiZHV4JWQgIgogCQkgImhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXNlZC5cbiIsIGluZGV4KTsKIAkvKiBzdWNjZXNzICovCkBAIC0yNjU4LDYgKzI2OTMsNyBAQAogCQkJImNvbWVkaV86IEJVRyEgY2FsbGVkIHdpdGggd3JvbmcgcHRyISEhXG4iKTsKIAkJcmV0dXJuOwogCX0KKwljb21lZGlfdXNiX2F1dG9fdW5jb25maWcodWRldik7CiAJZG93bigmc3RhcnRfc3RvcF9zZW0pOwogCWRvd24oJnVzYmR1eHN1Yl90bXAtPnNlbSk7CiAJdGlkeV91cCh1c2JkdXhzdWJfdG1wKTsKQEAgLTI2NjcsMTQgKzI3MDMsMTQgQEAKIH0KIAogLyogaXMgY2FsbGVkIHdoZW4gY29tZWRpLWNvbmZpZyBpcyBjYWxsZWQgKi8KLXN0YXRpYyBpbnQgdXNiZHV4X2F0dGFjaChjb21lZGlfZGV2aWNlICpkZXYsIGNvbWVkaV9kZXZjb25maWcgKml0KQorc3RhdGljIGludCB1c2JkdXhfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCkKIHsKIAlpbnQgcmV0OwogCWludCBpbmRleDsKIAlpbnQgaTsKIAlzdHJ1Y3QgdXNiZHV4c3ViICp1ZGV2OwogCi0JY29tZWRpX3N1YmRldmljZSAqcyA9IE5VTEw7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBOVUxMOwogCWRldi0+cHJpdmF0ZSA9IE5VTEw7CiAKIAlkb3duKCZzdGFydF9zdG9wX3NlbSk7CkBAIC0yODM0LDcgKzI4NzAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eF9kZXRhY2goY29tZWRpX2RldmljZSAqZGV2KQorc3RhdGljIGludCB1c2JkdXhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYmR1eHN1YiAqdXNiZHV4c3ViX3RtcDsKIApAQCAtMjg2NywyNiArMjkwMywxMyBAQAogfQogCiAvKiBtYWluIGRyaXZlciBzdHJ1Y3QgKi8KLXN0YXRpYyBjb21lZGlfZHJpdmVyIGRyaXZlcl91c2JkdXggPSB7CitzdGF0aWMgc3RydWN0IGNvbWVkaV9kcml2ZXIgZHJpdmVyX3VzYmR1eCA9IHsKICAgICAgIC5kcml2ZXJfbmFtZSA9CSJ1c2JkdXgiLAogICAgICAgLm1vZHVsZSA9CQlUSElTX01PRFVMRSwKICAgICAgIC5hdHRhY2ggPQkJdXNiZHV4X2F0dGFjaCwKICAgICAgIC5kZXRhY2ggPQkJdXNiZHV4X2RldGFjaCwKIH07CiAKLXN0YXRpYyB2b2lkIGluaXRfdXNiX2RldmljZXModm9pZCkKLXsKLQlpbnQgaW5kZXg7Ci0KLQkvKiBhbGwgZGV2aWNlcyBlbnRyaWVzIGFyZSBpbnZhbGlkIHRvIGJlZ2luIHdpdGggKi8KLQkvKiB0aGV5IHdpbGwgYmVjb21lIHZhbGlkIGJ5IHRoZSBwcm9iZSBmdW5jdGlvbiAqLwotCS8qIGFuZCB0aGVuIGZpbmFsbHkgYnkgdGhlIGF0dGFjaC1mdW5jdGlvbiAqLwotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTVVTQkRVWDsgaW5kZXgrKykgewotCQltZW1zZXQoJih1c2JkdXhzdWJbaW5kZXhdKSwgMHgwMCwgc2l6ZW9mKHVzYmR1eHN1YltpbmRleF0pKTsKLQkJaW5pdF9NVVRFWCgmKHVzYmR1eHN1YltpbmRleF0uc2VtKSk7Ci0JfQotfQotCiAvKiBUYWJsZSB3aXRoIHRoZSBVU0ItZGV2aWNlczoganVzdCBub3cgb25seSB0ZXN0aW5nIElEcyAqLwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYmR1eHN1Yl90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKDB4MTNkOCwgMHgwMDAxKSB9LApAQCAtMjkwNywxOCArMjkzMCwxNyBAQAogLyogQ2FuJ3QgdXNlIHRoZSBuaWNlIG1hY3JvIGFzIEkgaGF2ZSBhbHNvIHRvIGluaXRpYWxpc2UgdGhlIFVTQiAqLwogLyogc3Vic3lzdGVtOiAqLwogLyogcmVnaXN0ZXJpbmcgdGhlIHVzYi1zeXN0ZW0gX2FuZF8gdGhlIGNvbWVkaS1kcml2ZXIgKi8KLXN0YXRpYyBpbnQgaW5pdF91c2JkdXgodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfdXNiZHV4KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiCiAJICAgICAgIERSSVZFUl9WRVJTSU9OICI6IiBEUklWRVJfREVTQyAiXG4iKTsKLQlpbml0X3VzYl9kZXZpY2VzKCk7CiAJdXNiX3JlZ2lzdGVyKCZ1c2JkdXhzdWJfZHJpdmVyKTsKIAljb21lZGlfZHJpdmVyX3JlZ2lzdGVyKCZkcml2ZXJfdXNiZHV4KTsKIAlyZXR1cm4gMDsKIH0KIAogLyogZGVyZWdpc3RlcmluZyB0aGUgY29tZWRpIGRyaXZlciBhbmQgdGhlIHVzYi1zdWJzeXN0ZW0gKi8KLXN0YXRpYyB2b2lkIGV4aXRfdXNiZHV4KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF91c2JkdXgodm9pZCkKIHsKIAljb21lZGlfZHJpdmVyX3VucmVnaXN0ZXIoJmRyaXZlcl91c2JkdXgpOwogCXVzYl9kZXJlZ2lzdGVyKCZ1c2JkdXhzdWJfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4ZmFzdC5jCmluZGV4IDNhMDBmZjAuLjJmYjY0ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYwpAQCAtMSwzMyArMSwyMCBAQAotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuOTlhIgotI2RlZmluZSBEUklWRVJfQVVUSE9SICJCZXJuZCBQb3JyLCBCZXJuZFBvcnJAZjJzLmNvbSIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQi1EVVhmYXN0LCBCZXJuZFBvcnJAZjJzLmNvbSIKIC8qCi0gICBjb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMKLSAgIENvcHlyaWdodCAoQykgMjAwNCBCZXJuZCBQb3JyLCBCZXJuZC5Qb3JyQGYycy5jb20KLQotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSovCi0KLS8qCi1Ecml2ZXI6IHVzYmR1eGZhc3QKLURlc2NyaXB0aW9uOiBJVEwgVVNCLURVWGZhc3QKLURldmljZXM6IFtJVExdIFVTQi1EVVggKHVzYmR1eGZhc3QubykKLUF1dGhvcjogQmVybmQgUG9yciA8QmVybmRQb3JyQGYycy5jb20+Ci1VcGRhdGVkOiAwNCBEZWMgMjAwNgotU3RhdHVzOiB0ZXN0aW5nCi0qLworICogIENvcHlyaWdodCAoQykgMjAwNCBCZXJuZCBQb3JyLCBCZXJuZC5Qb3JyQGYycy5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLwogCiAvKgogICogSSBtdXN0IGdpdmUgY3JlZGl0IGhlcmUgdG8gQ2hyaXMgQmF1Z2hlciB3aG8KQEAgLTQyLDEyICsyOSwxNiBAQAogICogMC45OiBEcm9wcGluZyB0aGUgZmlyc3QgZGF0YSBwYWNrZXQgd2hpY2ggc2VlbXMgdG8gYmUgZnJvbSB0aGUgbGFzdCB0cmFuc2Zlci4KICAqICAgICAgQnVmZmVyIG92ZXJmbG93cyBpbiB0aGUgRlgyIGFyZSBoYW5kZWQgb3ZlciB0byBjb21lZGkuCiAgKiAwLjkyOiBEcm9wcGluZyBub3cgNCBwYWNrZXRzLiBUaGUgcXVhZCBidWZmZXIgaGFzIHRvIGJlIGVtcHRpZWQuCi0gKiAgICAgICBBZGRlZCBpbnNuIGNvbW1hbmQgYmFzaWNhbGx5IGZvciB0ZXN0aW5nLiBTYW1wbGUgcmF0ZSBpcyAxTUh6LzE2Y2g9NjIuNWtIegorICogICAgICAgQWRkZWQgaW5zbiBjb21tYW5kIGJhc2ljYWxseSBmb3IgdGVzdGluZy4gU2FtcGxlIHJhdGUgaXMKKyAqICAgICAgIDFNSHovMTZjaD02Mi41a0h6CiAgKiAwLjk5OiBJYW4gQWJib3R0IHBvaW50ZWQgb3V0IGEgYnVnIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4gVGhhbmtzIQogICogMC45OWE6IGFkZGVkIGV4dGVybmFsIHRyaWdnZXIuCisgKiAxLjAwOiBhZGRlZCBmaXJtd2FyZSBrZXJuZWwgcmVxdWVzdCB0byB0aGUgZHJpdmVyIHdoaWNoIGZpeGVkCisgKiAgICAgICB1ZGV2IGNvbGRwbHVnIHByb2JsZW0KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNTksNTM2ICs1MCw1NDkgQEAKICNpbmNsdWRlICJjb21lZGlfZmMuaCIKICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKIAotLy8gKHVuKWNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCB0byBoYXZlIGRlYnVnIGluZm8uCi0vLyNkZWZpbmUgQ09ORklHX0NPTUVESV9ERUJVRwotI3VuZGVmICBDT05GSUdfQ09NRURJX0RFQlVHCiAKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgIkJlcm5kIFBvcnIsIEJlcm5kUG9yckBmMnMuY29tIgorI2RlZmluZSBEUklWRVJfREVTQyAiVVNCLURVWGZhc3QsIEJlcm5kUG9yckBmMnMuY29tIgogI2RlZmluZSBCT0FSRE5BTUUgInVzYmR1eGZhc3QiCiAKLS8vIHRpbWVvdXQgZm9yIHRoZSBVU0ItdHJhbnNmZXIKLSNkZWZpbmUgRVpUSU1FT1VUIDMwCisvKgorICogdGltZW91dCBmb3IgdGhlIFVTQi10cmFuc2ZlcgorICovCisjZGVmaW5lIEVaVElNRU9VVAkzMAogCi0vLyBjb25zdGFudHMgZm9yICJmaXJtd2FyZSIgdXBsb2FkIGFuZCBkb3dubG9hZAotI2RlZmluZSBVU0JEVVhGQVNUU1VCX0ZJUk1XQVJFIDB4QTAKLSNkZWZpbmUgVkVORE9SX0RJUl9JTiAgMHhDMAotI2RlZmluZSBWRU5ET1JfRElSX09VVCAweDQwCisvKgorICogY29uc3RhbnRzIGZvciAiZmlybXdhcmUiIHVwbG9hZCBhbmQgZG93bmxvYWQKKyAqLworI2RlZmluZSBVU0JEVVhGQVNUU1VCX0ZJUk1XQVJFCTB4QTAKKyNkZWZpbmUgVkVORE9SX0RJUl9JTgkJMHhDMAorI2RlZmluZSBWRU5ET1JfRElSX09VVAkJMHg0MAogCi0vLyBpbnRlcm5hbCBhZHJlc3NlcyBvZiB0aGUgODA1MSBwcm9jZXNzb3IKLSNkZWZpbmUgVVNCRFVYRkFTVFNVQl9DUFVDUyAweEU2MDAKKy8qCisgKiBpbnRlcm5hbCBhZHJlc3NlcyBvZiB0aGUgODA1MSBwcm9jZXNzb3IKKyAqLworI2RlZmluZSBVU0JEVVhGQVNUU1VCX0NQVUNTCTB4RTYwMAogCi0vLyBtYXggbGVuZ2h0aCBvZiB0aGUgdHJhbnNmZXItYnVmZmVyIGZvciBzb2Z0d2FyZSB1cGxvYWQKLSNkZWZpbmUgVEJfTEVOIDB4MjAwMAorLyoKKyAqIG1heCBsZW5naHRoIG9mIHRoZSB0cmFuc2Zlci1idWZmZXIgZm9yIHNvZnR3YXJlIHVwbG9hZAorICovCisjZGVmaW5lIFRCX0xFTgkweDIwMDAKIAotLy8gSW5wdXQgZW5kcG9pbnQgbnVtYmVyCi0jZGVmaW5lIEJVTEtJTkVQICAgICAgICAgICA2CisvKgorICogaW5wdXQgZW5kcG9pbnQgbnVtYmVyCisgKi8KKyNkZWZpbmUgQlVMS0lORVAJNgogCi0vLyBFbmRwb2ludCBmb3IgdGhlIEEvRCBjaGFubmVsbGlzdDogYnVsayBPVVQKLSNkZWZpbmUgQ0hBTk5FTExJU1RFUCAgICAgNAorLyoKKyAqIGVuZHBvaW50IGZvciB0aGUgQS9EIGNoYW5uZWxsaXN0OiBidWxrIE9VVAorICovCisjZGVmaW5lIENIQU5ORUxMSVNURVAJNAogCi0vLyBOdW1iZXIgb2YgY2hhbm5lbHMKLSNkZWZpbmUgTlVNQ0hBTk5FTFMgICAgICAgMzIKKy8qCisgKiBudW1iZXIgb2YgY2hhbm5lbHMKKyAqLworI2RlZmluZSBOVU1DSEFOTkVMUwkzMgogCi0vLyBzaXplIG9mIHRoZSB3YXZlZm9ybSBkZXNjcmlwdG9yCi0jZGVmaW5lIFdBVkVTSVpFICAgICAgICAgIDB4MjAKKy8qCisgKiBzaXplIG9mIHRoZSB3YXZlZm9ybSBkZXNjcmlwdG9yCisgKi8KKyNkZWZpbmUgV0FWRVNJWkUJMHgyMAogCi0vLyBTaXplIG9mIG9uZSBBL0QgdmFsdWUKLSNkZWZpbmUgU0laRUFESU4gICAgICAgICAgKChzaXplb2YoaW50MTZfdCkpKQorLyoKKyAqIHNpemUgb2Ygb25lIEEvRCB2YWx1ZQorICovCisjZGVmaW5lIFNJWkVBRElOCShzaXplb2YoaW50MTZfdCkpCiAKLS8vIFNpemUgb2YgdGhlIGlucHV0LWJ1ZmZlciBJTiBCWVRFUwotI2RlZmluZSBTSVpFSU5CVUYgICAgICAgICA1MTIKKy8qCisgKiBzaXplIG9mIHRoZSBpbnB1dC1idWZmZXIgSU4gQllURVMKKyAqLworI2RlZmluZSBTSVpFSU5CVUYJNTEyCiAKLS8vIDE2IGJ5dGVzLgotI2RlZmluZSBTSVpFSU5TTkJVRiAgICAgICA1MTIKKy8qCisgKiAxNiBieXRlcworICovCisjZGVmaW5lIFNJWkVJTlNOQlVGCTUxMgogCi0vLyBTaXplIG9mIHRoZSBidWZmZXIgZm9yIHRoZSBkdXggY29tbWFuZHMKLSNkZWZpbmUgU0laRU9GRFVYQlVGRkVSICAgIDI1NgkvLyBieXRlcworLyoKKyAqIHNpemUgb2YgdGhlIGJ1ZmZlciBmb3IgdGhlIGR1eCBjb21tYW5kcyBpbiBieXRlcworICovCisjZGVmaW5lIFNJWkVPRkRVWEJVRkZFUgkyNTYKIAotLy8gTnVtYmVyIG9mIGluLVVSQnMgd2hpY2ggcmVjZWl2ZSB0aGUgZGF0YTogbWluPTUKLSNkZWZpbmUgTlVNT0ZJTkJVRkZFUlNISUdIICAgICAxMAorLyoKKyAqIG51bWJlciBvZiBpbi1VUkJzIHdoaWNoIHJlY2VpdmUgdGhlIGRhdGE6IG1pbj01CisgKi8KKyNkZWZpbmUgTlVNT0ZJTkJVRkZFUlNISUdICTEwCiAKLS8vIFRvdGFsIG51bWJlciBvZiB1c2JkdXhmYXN0IGRldmljZXMKLSNkZWZpbmUgTlVNVVNCRFVYRkFTVCAgICAgICAgICAgICAxNgorLyoKKyAqIHRvdGFsIG51bWJlciBvZiB1c2JkdXhmYXN0IGRldmljZXMKKyAqLworI2RlZmluZSBOVU1VU0JEVVhGQVNUCTE2CiAKLS8vIE51bWJlciBvZiBzdWJkZXZpY2VzCi0jZGVmaW5lIE5fU1VCREVWSUNFUyAgICAgICAgICAxCisvKgorICogbnVtYmVyIG9mIHN1YmRldmljZXMKKyAqLworI2RlZmluZSBOX1NVQkRFVklDRVMJMQogCi0vLyBBbmFsb2d1ZSBpbiBzdWJkZXZpY2UKLSNkZWZpbmUgU1VCREVWX0FEICAgICAgICAgICAgIDAKKy8qCisgKiBhbmFsb2d1ZSBpbiBzdWJkZXZpY2UKKyAqLworI2RlZmluZSBTVUJERVZfQUQJMAogCi0vLyBtaW4gZGVsYXkgc3RlcHMgZm9yIG1vcmUgdGhhbiBvbmUgY2hhbm5lbAotLy8gYmFzaWNhbGx5IHdoZW4gdGhlIG11eCBnaXZlcyB1cC4gOy0pCi0jZGVmaW5lIE1JTl9TQU1QTElOR19QRVJJT0QgOQkvLyBzdGVwcyBhdCAzME1IeiBpbiB0aGUgRlgyCisvKgorICogbWluIGRlbGF5IHN0ZXBzIGZvciBtb3JlIHRoYW4gb25lIGNoYW5uZWwKKyAqIGJhc2ljYWxseSB3aGVuIHRoZSBtdXggZ2l2ZXMgdXAgOy0pCisgKgorICogc3RlcHMgYXQgMzBNSHogaW4gdGhlIEZYMgorICovCisjZGVmaW5lIE1JTl9TQU1QTElOR19QRVJJT0QJOQogCi0vLyBNYXggbnVtYmVyIG9mIDEvMzBNSHogZGVsYXkgc3RlcHM6Ci0jZGVmaW5lIE1BWF9TQU1QTElOR19QRVJJT0QgNTAwCisvKgorICogbWF4IG51bWJlciBvZiAxLzMwTUh6IGRlbGF5IHN0ZXBzCisgKi8KKyNkZWZpbmUgTUFYX1NBTVBMSU5HX1BFUklPRAk1MDAKIAotLy8gTnVtYmVyIG9mIHJlY2VpdmVkIHBhY2tldHMgdG8gaWdub3JlIGJlZm9yZSB3ZSBzdGFydCBoYW5kaW5nIGRhdGEgb3ZlciB0byBjb21lZGkuCi0vLyBJdCdzIHF1YWQgYnVmZmVyaW5nIGFuZCB3ZSBoYXZlIHRvIGlnbm9yZSA0IHBhY2tldHMuCi0jZGVmaW5lIFBBQ0tFVFNfVE9fSUdOT1JFIDQKKy8qCisgKiBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyB0byBpZ25vcmUgYmVmb3JlIHdlIHN0YXJ0IGhhbmRpbmcgZGF0YQorICogb3ZlciB0byBjb21lZGksIGl0J3MgcXVhZCBidWZmZXJpbmcgYW5kIHdlIGhhdmUgdG8gaWdub3JlIDQgcGFja2V0cworICovCisjZGVmaW5lIFBBQ0tFVFNfVE9fSUdOT1JFCTQKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBjb21lZGkgY29uc3RhbnRzCi1zdGF0aWMgY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV91c2JkdXhmYXN0X2FpX3JhbmdlID0geyAyLCB7Ci0JCQlCSVBfUkFOR0UoMC43NSksCi0JCQlCSVBfUkFOR0UoMC41KSwKLQl9CisvKgorICogY29tZWRpIGNvbnN0YW50cworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdXNiZHV4ZmFzdF9haV9yYW5nZSA9IHsKKwkyLCB7IEJJUF9SQU5HRSgwLjc1KSwgQklQX1JBTkdFKDAuNSkgfQogfTsKIAogLyoKICAqIHByaXZhdGUgc3RydWN0dXJlIG9mIG9uZSBzdWJkZXZpY2UKKyAqCisgKiB0aGlzIGlzIHRoZSBzdHJ1Y3R1cmUgd2hpY2ggaG9sZHMgYWxsIHRoZSBkYXRhIG9mIHRoaXMgZHJpdmVyCisgKiBvbmUgc3ViIGRldmljZSBqdXN0IG5vdzogQS9ECiAgKi8KLQotLy8gVGhpcyBpcyB0aGUgc3RydWN0dXJlIHdoaWNoIGhvbGRzIGFsbCB0aGUgZGF0YSBvZiB0aGlzIGRyaXZlcgotLy8gb25lIHN1YiBkZXZpY2UganVzdCBub3c6IEEvRAotdHlwZWRlZiBzdHJ1Y3QgewotCS8vIGF0dGFjaGVkPwotCWludCBhdHRhY2hlZDsKLQkvLyBpcyBpdCBhc3NvY2lhdGVkIHdpdGggYSBzdWJkZXZpY2U/Ci0JaW50IHByb2JlZDsKLQkvLyBwb2ludGVyIHRvIHRoZSB1c2ItZGV2aWNlCi0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKLQkvLyBCVUxLLXRyYW5zZmVyIGhhbmRsaW5nOiB1cmIKLQlzdHJ1Y3QgdXJiICp1cmJJbjsKK3N0cnVjdCB1c2JkdXhmYXN0c3ViX3MgeworCWludCBhdHRhY2hlZDsJCQkvKiBpcyBhdHRhY2hlZD8gKi8KKwlpbnQgcHJvYmVkOwkJCS8qIGlzIGl0IGFzc29jaWF0ZWQgd2l0aCBhIHN1YmRldmljZT8gKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OwkvKiBwb2ludGVyIHRvIHRoZSB1c2ItZGV2aWNlICovCisJc3RydWN0IHVyYiAqdXJiSW47CQkvKiBCVUxLLXRyYW5zZmVyIGhhbmRsaW5nOiB1cmIgKi8KIAlpbnQ4X3QgKnRyYW5zZmVyX2J1ZmZlcjsKLQkvLyBpbnB1dCBidWZmZXIgZm9yIHNpbmdsZSBpbnNuCi0JaW50MTZfdCAqaW5zbkJ1ZmZlcjsKLQkvLyBpbnRlcmZhY2UgbnVtYmVyCi0JaW50IGlmbnVtOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkKLQkvLyBpbnRlcmZhY2Ugc3RydWN0dXJlIGluIDIuNgotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0jZW5kaWYKLQkvLyBjb21lZGkgZGV2aWNlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRleHQKLQljb21lZGlfZGV2aWNlICpjb21lZGlkZXY7Ci0JLy8gYXN5bmNocm9ub3VzIGNvbW1hbmQgaXMgcnVubmluZwotCXNob3J0IGludCBhaV9jbWRfcnVubmluZzsKLQkvLyBjb250aW5vdXMgYXF1aXNpdGlvbgotCXNob3J0IGludCBhaV9jb250aW5vdXM7Ci0JLy8gbnVtYmVyIG9mIHNhbXBsZXMgdG8gYXF1aXJlCi0JbG9uZyBpbnQgYWlfc2FtcGxlX2NvdW50OwotCS8vIGNvbW1hbmRzCi0JdWludDhfdCAqZHV4X2NvbW1hbmRzOwotCS8vIGNvdW50ZXIgd2hpY2ggaWdub3JlcyB0aGUgZmlyc3QgYnVmZmVycwotCWludCBpZ25vcmU7CisJaW50MTZfdCAqaW5zbkJ1ZmZlcjsJCS8qIGlucHV0IGJ1ZmZlciBmb3Igc2luZ2xlIGluc24gKi8KKwlpbnQgaWZudW07CQkJLyogaW50ZXJmYWNlIG51bWJlciAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CS8qIGludGVyZmFjZSBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqY29tZWRpZGV2OwkvKiBjb21lZGkgZGV2aWNlIGZvciB0aGUgaW50ZXJydXB0CisJCQkJCSAgIGNvbnRleHQgKi8KKwlzaG9ydCBpbnQgYWlfY21kX3J1bm5pbmc7CS8qIGFzeW5jaHJvbm91cyBjb21tYW5kIGlzIHJ1bm5pbmcgKi8KKwlzaG9ydCBpbnQgYWlfY29udGlub3VzOwkJLyogY29udGlub3VzIGFxdWlzaXRpb24gKi8KKwlsb25nIGludCBhaV9zYW1wbGVfY291bnQ7CS8qIG51bWJlciBvZiBzYW1wbGVzIHRvIGFxdWlyZSAqLworCXVpbnQ4X3QgKmR1eF9jb21tYW5kczsJCS8qIGNvbW1hbmRzICovCisJaW50IGlnbm9yZTsJCQkvKiBjb3VudGVyIHdoaWNoIGlnbm9yZXMgdGhlIGZpcnN0CisJCQkJCSAgIGJ1ZmZlcnMgKi8KIAlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKLX0gdXNiZHV4ZmFzdHN1Yl90OworfTsKIAotLy8gVGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgdXNiLWRhdGEgb2YgdGhlIGRyaXZlcgotLy8gaXMgYWxzbyB0aGUgcHJpdmF0ZSBkYXRhIGZvciB0aGUgY29tZWRpLWRldmljZS4KLS8vIFRoaXMgaGFzIHRvIGJlIGdsb2JhbCBhcyB0aGUgdXNiIHN1YnN5c3RlbSBuZWVkcwotLy8gZ2xvYmFsIHZhcmlhYmxlcy4gVGhlIG90aGVyIHJlYXNvbiBpcyB0aGF0IHRoaXMKLS8vIHN0cnVjdHVyZSBtdXN0IGJlIHRoZXJlIF9iZWZvcmVfIGFueSBjb21lZGkKLS8vIGNvbW1hbmQgaXMgaXNzdWVkLiBUaGUgdXNiIHN1YnN5c3RlbSBtdXN0IGJlCi0vLyBpbml0aWFsaXNlZCBiZWZvcmUgY29tZWRpIGNhbiBhY2Nlc3MgaXQuCi1zdGF0aWMgdXNiZHV4ZmFzdHN1Yl90IHVzYmR1eGZhc3RzdWJbTlVNVVNCRFVYRkFTVF07CisvKgorICogVGhlIHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgdXNiLWRhdGEgb2YgdGhlIGRyaXZlcgorICogaXMgYWxzbyB0aGUgcHJpdmF0ZSBkYXRhIGZvciB0aGUgY29tZWRpLWRldmljZS4KKyAqIFRoaXMgaGFzIHRvIGJlIGdsb2JhbCBhcyB0aGUgdXNiIHN1YnN5c3RlbSBuZWVkcworICogZ2xvYmFsIHZhcmlhYmxlcy4gVGhlIG90aGVyIHJlYXNvbiBpcyB0aGF0IHRoaXMKKyAqIHN0cnVjdHVyZSBtdXN0IGJlIHRoZXJlIF9iZWZvcmVfIGFueSBjb21lZGkKKyAqIGNvbW1hbmQgaXMgaXNzdWVkLiBUaGUgdXNiIHN1YnN5c3RlbSBtdXN0IGJlCisgKiBpbml0aWFsaXNlZCBiZWZvcmUgY29tZWRpIGNhbiBhY2Nlc3MgaXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zIHVzYmR1eGZhc3RzdWJbTlVNVVNCRFVYRkFTVF07CiAKIHN0YXRpYyBERUNMQVJFX01VVEVYKHN0YXJ0X3N0b3Bfc2VtKTsKIAotLy8gYnVsayB0cmFuc2ZlcnMgdG8gdXNiZHV4ZmFzdAotCisvKgorICogYnVsayB0cmFuc2ZlcnMgdG8gdXNiZHV4ZmFzdAorICovCiAjZGVmaW5lIFNFTkRBRENPTU1BTkRTICAgICAgICAgICAgMAogI2RlZmluZSBTRU5ESU5JVEVQNiAgICAgICAgICAgICAgIDEKIAotc3RhdGljIGludCBzZW5kX2R1eF9jb21tYW5kcyh1c2JkdXhmYXN0c3ViX3QgKiB0aGlzX3VzYmR1eGZhc3RzdWIsIGludCBjbWRfdHlwZSkKK3N0YXRpYyBpbnQgc2VuZF9kdXhfY29tbWFuZHMoc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmcywgaW50IGNtZF90eXBlKQogewotCWludCByZXN1bHQsIG5zZW50OwotCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzWzBdID0gY21kX3R5cGU7CisJaW50IHRtcCwgbnNlbnQ7CisKKwl1ZGZzLT5kdXhfY29tbWFuZHNbMF0gPSBjbWRfdHlwZTsKKwogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlpbnQgaTsKLQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBkdXhfY29tbWFuZHM6ICIsCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LT5taW5vcik7Ci0JZm9yIChpID0gMDsgaSA8IFNJWkVPRkRVWEJVRkZFUjsgaSsrKSB7Ci0JCXByaW50aygiICUwMngiLCB0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tpXSk7Ci0JfQorCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogdXNiZHV4ZmFzdDogZHV4X2NvbW1hbmRzOiAiLAorCQl1ZGZzLT5jb21lZGlkZXYtPm1pbm9yKTsKKwlmb3IgKHRtcCA9IDA7IHRtcCA8IFNJWkVPRkRVWEJVRkZFUjsgdG1wKyspCisJCXByaW50aygiICUwMngiLCB1ZGZzLT5kdXhfY29tbWFuZHNbdG1wXSk7CiAJcHJpbnRrKCJcbiIpOwogI2VuZGlmCi0JcmVzdWx0ID0gdXNiX2J1bGtfbXNnKHRoaXNfdXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKHRoaXNfdXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJCQkgICAgICBDSEFOTkVMTElTVEVQKSwKLQkJCSAgICAgIHRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzLCBTSVpFT0ZEVVhCVUZGRVIsCi0JCQkgICAgICAmbnNlbnQsIDEwMDAwKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQlwcmludGsoImNvbWVkaSVkOiBjb3VsZCBub3QgdHJhbnNtaXQgZHV4X2NvbW1hbmRzIHRvIHRoZSB1c2ItZGV2aWNlLCBlcnI9JWRcbiIsIHRoaXNfdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LT5taW5vciwgcmVzdWx0KTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKKworCXRtcCA9IHVzYl9idWxrX21zZyh1ZGZzLT51c2JkZXYsCisJCQkgICB1c2Jfc25kYnVsa3BpcGUodWRmcy0+dXNiZGV2LCBDSEFOTkVMTElTVEVQKSwKKwkJCSAgIHVkZnMtPmR1eF9jb21tYW5kcywgU0laRU9GRFVYQlVGRkVSLCAmbnNlbnQsIDEwMDAwKTsKKwlpZiAodG1wIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogY291bGQgbm90IHRyYW5zbWl0IGR1eF9jb21tYW5kcyB0byIKKwkJICAgICAgInRoZSB1c2ItZGV2aWNlLCBlcnI9JWRcbiIsIHVkZnMtPmNvbWVkaWRldi0+bWlub3IsIHRtcCk7CisJcmV0dXJuIHRtcDsKIH0KIAotLy8gU3RvcHMgdGhlIGRhdGEgYWNxdWlzaW9uCi0vLyBJdCBzaG91bGQgYmUgc2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSBhbnkgY29udGV4dAotc3RhdGljIGludCB1c2JkdXhmYXN0c3ViX3VubGlua19JblVSQnModXNiZHV4ZmFzdHN1Yl90ICogdXNiZHV4ZmFzdHN1Yl90bXApCisvKgorICogU3RvcHMgdGhlIGRhdGEgYWNxdWlzaW9uLgorICogSXQgc2hvdWxkIGJlIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gYW55IGNvbnRleHQuCisgKi8KK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdHN1Yl91bmxpbmtfSW5VUkJzKHN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMpCiB7CiAJaW50IGogPSAwOwogCWludCBlcnIgPSAwOwogCi0JaWYgKHVzYmR1eGZhc3RzdWJfdG1wICYmIHVzYmR1eGZhc3RzdWJfdG1wLT51cmJJbikgewotCQl1c2JkdXhmYXN0c3ViX3RtcC0+YWlfY21kX3J1bm5pbmcgPSAwOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiw4KQotCQlqID0gdXNiX3VubGlua191cmIodXNiZHV4ZmFzdHN1Yl90bXAtPnVyYkluKTsKLQkJaWYgKGogPCAwKSB7Ci0JCQllcnIgPSBqOwotCQl9Ci0jZWxzZQotCQkvLyB3YWl0cyB1bnRpbCBhIHJ1bm5pbmcgdHJhbnNmZXIgaXMgb3ZlcgotCQl1c2Jfa2lsbF91cmIodXNiZHV4ZmFzdHN1Yl90bXAtPnVyYkluKTsKKwlpZiAodWRmcyAmJiB1ZGZzLT51cmJJbikgeworCQl1ZGZzLT5haV9jbWRfcnVubmluZyA9IDA7CisJCS8qIHdhaXRzIHVudGlsIGEgcnVubmluZyB0cmFuc2ZlciBpcyBvdmVyICovCisJCXVzYl9raWxsX3VyYih1ZGZzLT51cmJJbik7CiAJCWogPSAwOwotI2VuZGlmCiAJfQogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaTogdXNiZHV4ZmFzdDogdW5saW5rZWQgSW5VUkI6IHJlcz0lZFxuIiwgaik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaTogdXNiZHV4ZmFzdDogdW5saW5rZWQgSW5VUkI6IHJlcz0lZFxuIiwgaik7CiAjZW5kaWYKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBUaGlzIHdpbGwgc3RvcCBhIHJ1bm5pbmcgYWNxdWlzaXRpb24gb3BlcmF0aW9uICovCi0vLyBJcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhpcyBkcml2ZXIgZnJvbSBib3RoIHRoZQotLy8gaW50ZXJydXB0IGNvbnRleHQgYW5kIGZyb20gY29tZWRpCi1zdGF0aWMgaW50IHVzYmR1eGZhc3RfYWlfc3RvcCh1c2JkdXhmYXN0c3ViX3QgKiB0aGlzX3VzYmR1eGZhc3RzdWIsCisvKgorICogVGhpcyB3aWxsIHN0b3AgYSBydW5uaW5nIGFjcXVpc2l0aW9uIG9wZXJhdGlvbi4KKyAqIElzIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGlzIGRyaXZlciBmcm9tIGJvdGggdGhlCisgKiBpbnRlcnJ1cHQgY29udGV4dCBhbmQgZnJvbSBjb21lZGkuCisgKi8KK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9zdG9wKHN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMsCiAJaW50IGRvX3VubGluaykKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghdGhpc191c2JkdXhmYXN0c3ViKSB7Ci0JCXByaW50aygiY29tZWRpPzogdXNiZHV4ZmFzdF9haV9zdG9wOiB0aGlzX3VzYmR1eGZhc3RzdWI9TlVMTCFcbiIpOworCWlmICghdWRmcykgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaT86IHVzYmR1eGZhc3RfYWlfc3RvcDogdWRmcz1OVUxMIVxuIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KKwogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaTogdXNiZHV4ZmFzdF9haV9zdG9wXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpOiB1c2JkdXhmYXN0X2FpX3N0b3BcbiIpOwogI2VuZGlmCiAKLQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nID0gMDsKKwl1ZGZzLT5haV9jbWRfcnVubmluZyA9IDA7CiAKLQlpZiAoZG9fdW5saW5rKSB7Ci0JCS8vIHN0b3AgYXF1aXN0aW9uCi0JCXJldCA9IHVzYmR1eGZhc3RzdWJfdW5saW5rX0luVVJCcyh0aGlzX3VzYmR1eGZhc3RzdWIpOwotCX0KKwlpZiAoZG9fdW5saW5rKQorCQlyZXQgPSB1c2JkdXhmYXN0c3ViX3VubGlua19JblVSQnModWRmcyk7IC8qIHN0b3AgYXF1aXN0aW9uICovCiAKIAlyZXR1cm4gcmV0OwogfQogCi0vLyBUaGlzIHdpbGwgY2FuY2VsIGEgcnVubmluZyBhY3F1aXNpdGlvbiBvcGVyYXRpb24uCi0vLyBUaGlzIGlzIGNhbGxlZCBieSBjb21lZGkgYnV0IG5ldmVyIGZyb20gaW5zaWRlIHRoZQotLy8gZHJpdmVyLgotc3RhdGljIGludCB1c2JkdXhmYXN0X2FpX2NhbmNlbChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKKy8qCisgKiBUaGlzIHdpbGwgY2FuY2VsIGEgcnVubmluZyBhY3F1aXNpdGlvbiBvcGVyYXRpb24uCisgKiBUaGlzIGlzIGNhbGxlZCBieSBjb21lZGkgYnV0IG5ldmVyIGZyb20gaW5zaWRlIHRoZSBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9jYW5jZWwoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JdXNiZHV4ZmFzdHN1Yl90ICp0aGlzX3VzYmR1eGZhc3RzdWI7Ci0JaW50IHJlcyA9IDA7CisJc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmczsKKwlpbnQgcmV0OwogCi0JLy8gZm9yY2UgdW5saW5rIG9mIGFsbCB1cmJzCisJLyogZm9yY2UgdW5saW5rIG9mIGFsbCB1cmJzICovCiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpOiB1c2JkdXhmYXN0X2FpX2NhbmNlbFxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaTogdXNiZHV4ZmFzdF9haV9jYW5jZWxcbiIpOwogI2VuZGlmCi0JdGhpc191c2JkdXhmYXN0c3ViID0gZGV2LT5wcml2YXRlOwotCWlmICghdGhpc191c2JkdXhmYXN0c3ViKSB7Ci0JCXByaW50aygiY29tZWRpOiB1c2JkdXhmYXN0X2FpX2NhbmNlbDogdGhpc191c2JkdXhmYXN0c3ViPU5VTExcbiIpOworCXVkZnMgPSBkZXYtPnByaXZhdGU7CisJaWYgKCF1ZGZzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpOiB1c2JkdXhmYXN0X2FpX2NhbmNlbDogdWRmcz1OVUxMXG4iKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQotCWRvd24oJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKLQlpZiAoISh0aGlzX3VzYmR1eGZhc3RzdWItPnByb2JlZCkpIHsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwlkb3duKCZ1ZGZzLT5zZW0pOworCWlmICghdWRmcy0+cHJvYmVkKSB7CisJCXVwKCZ1ZGZzLT5zZW0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JLy8gdW5saW5rCi0JcmVzID0gdXNiZHV4ZmFzdF9haV9zdG9wKHRoaXNfdXNiZHV4ZmFzdHN1YiwgMSk7Ci0JdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkvKiB1bmxpbmsgKi8KKwlyZXQgPSB1c2JkdXhmYXN0X2FpX3N0b3AodWRmcywgMSk7CisJdXAoJnVkZnMtPnNlbSk7CiAKLQlyZXR1cm4gcmVzOworCXJldHVybiByZXQ7CiB9CiAKLS8vIGFuYWxvZ3VlIElOCi0vLyBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApCi1zdGF0aWMgdm9pZCB1c2JkdXhmYXN0c3ViX2FpX0lycShzdHJ1Y3QgdXJiICp1cmIpCi0jZWxzZQorLyoKKyAqIGFuYWxvZ3VlIElOCisgKiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lCisgKi8KIHN0YXRpYyB2b2lkIHVzYmR1eGZhc3RzdWJfYWlfSXJxKHN0cnVjdCB1cmIgKnVyYiBQVF9SRUdTX0FSRykKLSNlbmRpZgogewogCWludCBuLCBlcnI7Ci0JdXNiZHV4ZmFzdHN1Yl90ICp0aGlzX3VzYmR1eGZhc3RzdWI7Ci0JY29tZWRpX2RldmljZSAqdGhpc19jb21lZGlkZXY7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICp0aGlzX2NvbWVkaWRldjsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAl1aW50MTZfdCAqcDsKIAotCS8vIHNhbml0eSBjaGVja3MKLQkvLyBpcyB0aGUgdXJiIHRoZXJlPworCS8qIHNhbml0eSBjaGVja3MgLSBpcyB0aGUgdXJiIHRoZXJlPyAqLwogCWlmICghdXJiKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdF86IGFvIGludC1oYW5kbGVyIGNhbGxlZCB3aXRoIHVyYj1OVUxMIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdF86IGFvIGludC1oYW5kbGVyIGNhbGxlZCAiCisJCSAgICAgICAid2l0aCB1cmI9TlVMTCFcbiIpOwogCQlyZXR1cm47CiAJfQotCS8vIHRoZSBjb250ZXh0IHZhcmlhYmxlIHBvaW50cyB0byB0aGUgc3ViZGV2aWNlCisJLyogdGhlIGNvbnRleHQgdmFyaWFibGUgcG9pbnRzIHRvIHRoZSBzdWJkZXZpY2UgKi8KIAl0aGlzX2NvbWVkaWRldiA9IHVyYi0+Y29udGV4dDsKIAlpZiAoIXRoaXNfY29tZWRpZGV2KSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdF86IHVyYiBjb250ZXh0IGlzIGEgTlVMTCBwb2ludGVyIVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdF86IHVyYiBjb250ZXh0IGlzIGEgTlVMTCAiCisJCSAgICAgICAicG9pbnRlciFcbiIpOwogCQlyZXR1cm47CiAJfQotCS8vIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBvZiB0aGUgc3ViZGV2aWNlIGlzIHVzYmR1eGZhc3RzdWJfdAotCXRoaXNfdXNiZHV4ZmFzdHN1YiA9IHRoaXNfY29tZWRpZGV2LT5wcml2YXRlOwotCWlmICghdGhpc191c2JkdXhmYXN0c3ViKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdF86IHByaXZhdGUgb2YgY29tZWRpIHN1YmRldiBpcyBhIE5VTEwgcG9pbnRlciFcbiIpOworCS8qIHRoZSBwcml2YXRlIHN0cnVjdHVyZSBvZiB0aGUgc3ViZGV2aWNlIGlzIHVzYmR1eGZhc3RzdWJfcyAqLworCXVkZnMgPSB0aGlzX2NvbWVkaWRldi0+cHJpdmF0ZTsKKwlpZiAoIXVkZnMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0XzogcHJpdmF0ZSBvZiBjb21lZGkgIgorCQkgICAgICAgInN1YmRldiBpcyBhIE5VTEwgcG9pbnRlciFcbiIpOwogCQlyZXR1cm47CiAJfQotCS8vIGFyZSB3ZSBydW5uaW5nIGEgY29tbWFuZD8KLQlpZiAodW5saWtlbHkoISh0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nKSkpIHsKLQkJLy8gbm90IHJ1bm5pbmcgYSBjb21tYW5kCi0JCS8vIGRvIG5vdCBjb250aW51ZSBleGVjdXRpb24gaWYgbm8gYXN5bmNocm9ub3VzIGNvbW1hbmQgaXMgcnVubmluZwotCQkvLyBpbiBwYXJ0aWN1bGFyIG5vdCByZXN1Ym1pdAorCS8qIGFyZSB3ZSBydW5uaW5nIGEgY29tbWFuZD8gKi8KKwlpZiAodW5saWtlbHkoIXVkZnMtPmFpX2NtZF9ydW5uaW5nKSkgeworCQkvKgorCQkgKiBub3QgcnVubmluZyBhIGNvbW1hbmQKKwkJICogZG8gbm90IGNvbnRpbnVlIGV4ZWN1dGlvbiBpZiBubyBhc3luY2hyb25vdXMgY29tbWFuZAorCQkgKiBpcyBydW5uaW5nIGluIHBhcnRpY3VsYXIgbm90IHJlc3VibWl0CisJCSAqLwogCQlyZXR1cm47CiAJfQogCi0JaWYgKHVubGlrZWx5KCEodGhpc191c2JkdXhmYXN0c3ViLT5hdHRhY2hlZCkpKSB7Ci0JCS8vIG5vIGNvbWVkaSBkZXZpY2UgdGhlcmUKKwlpZiAodW5saWtlbHkoIXVkZnMtPmF0dGFjaGVkKSkgeworCQkvKiBubyBjb21lZGkgZGV2aWNlIHRoZXJlICovCiAJCXJldHVybjsKIAl9Ci0JLy8gc3ViZGV2aWNlIHdoaWNoIGlzIHRoZSBBRCBjb252ZXJ0ZXIKKwkvKiBzdWJkZXZpY2Ugd2hpY2ggaXMgdGhlIEFEIGNvbnZlcnRlciAqLwogCXMgPSB0aGlzX2NvbWVkaWRldi0+c3ViZGV2aWNlcyArIFNVQkRFVl9BRDsKIAotCS8vIGZpcnN0IHdlIHRlc3QgaWYgc29tZXRoaW5nIHVudXN1YWwgaGFzIGp1c3QgaGFwcGVuZWQKKwkvKiBmaXJzdCB3ZSB0ZXN0IGlmIHNvbWV0aGluZyB1bnVzdWFsIGhhcyBqdXN0IGhhcHBlbmVkICovCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewogCWNhc2UgMDoKIAkJYnJlYWs7CiAKLQkJLy8gaGFwcGVucyBhZnRlciBhbiB1bmxpbmsgY29tbWFuZCBvciB3aGVuIHRoZSBkZXZpY2UgaXMgcGx1Z2dlZCBvdXQKKwkJLyoKKwkJICogaGFwcGVucyBhZnRlciBhbiB1bmxpbmsgY29tbWFuZCBvciB3aGVuIHRoZSBkZXZpY2UKKwkJICogaXMgcGx1Z2dlZCBvdXQKKwkJICovCiAJY2FzZSAtRUNPTk5SRVNFVDoKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRVNIVVRET1dOOgogCWNhc2UgLUVDT05OQUJPUlRFRDoKLQkJLy8gdGVsbCB0aGlzIGNvbWVkaQorCQkvKiB0ZWxsIHRoaXMgY29tZWRpICovCiAJCXMtPmFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0VPQTsKIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1I7Ci0JCWNvbWVkaV9ldmVudCh0aGlzX3VzYmR1eGZhc3RzdWItPmNvbWVkaWRldiwgcyk7Ci0JCS8vIHN0b3AgdGhlIHRyYW5zZmVyIHcvbyB1bmxpbmsKLQkJdXNiZHV4ZmFzdF9haV9zdG9wKHRoaXNfdXNiZHV4ZmFzdHN1YiwgMCk7CisJCWNvbWVkaV9ldmVudCh1ZGZzLT5jb21lZGlkZXYsIHMpOworCQkvKiBzdG9wIHRoZSB0cmFuc2ZlciB3L28gdW5saW5rICovCisJCXVzYmR1eGZhc3RfYWlfc3RvcCh1ZGZzLCAwKTsKIAkJcmV0dXJuOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogbm9uLXplcm8gdXJiIHN0YXR1cyByZWNlaXZlZCBpbiBhaSBpbnRyIGNvbnRleHQ6ICVkXG4iLCB0aGlzX3VzYmR1eGZhc3RzdWItPmNvbWVkaWRldi0+bWlub3IsIHVyYi0+c3RhdHVzKTsKKwkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogbm9uLXplcm8gdXJiIHN0YXR1cyByZWNlaXZlZCBpbiAiCisJCSAgICAgICAiYWkgaW50ciBjb250ZXh0OiAlZFxuIiwKKwkJICAgICAgIHVkZnMtPmNvbWVkaWRldi0+bWlub3IsIHVyYi0+c3RhdHVzKTsKIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKLQkJY29tZWRpX2V2ZW50KHRoaXNfdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LCBzKTsKLQkJdXNiZHV4ZmFzdF9haV9zdG9wKHRoaXNfdXNiZHV4ZmFzdHN1YiwgMCk7CisJCWNvbWVkaV9ldmVudCh1ZGZzLT5jb21lZGlkZXYsIHMpOworCQl1c2JkdXhmYXN0X2FpX3N0b3AodWRmcywgMCk7CiAJCXJldHVybjsKIAl9CiAKIAlwID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JaWYgKCF0aGlzX3VzYmR1eGZhc3RzdWItPmlnbm9yZSkgewotCQlpZiAoISh0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NvbnRpbm91cykpIHsKLQkJCS8vIG5vdCBjb250aW5vdXMsIGZpeGVkIG51bWJlciBvZiBzYW1wbGVzCisJaWYgKCF1ZGZzLT5pZ25vcmUpIHsKKwkJaWYgKCF1ZGZzLT5haV9jb250aW5vdXMpIHsKKwkJCS8qIG5vdCBjb250aW5vdXMsIGZpeGVkIG51bWJlciBvZiBzYW1wbGVzICovCiAJCQluID0gdXJiLT5hY3R1YWxfbGVuZ3RoIC8gc2l6ZW9mKHVpbnQxNl90KTsKLQkJCWlmICh1bmxpa2VseSh0aGlzX3VzYmR1eGZhc3RzdWItPmFpX3NhbXBsZV9jb3VudCA8IG4pKSB7Ci0JCQkJLy8gd2UgaGF2ZSBzZW5kIG9ubHkgYSBmcmFjdGlvbiBvZiB0aGUgYnl0ZXMgcmVjZWl2ZWQKKwkJCWlmICh1bmxpa2VseSh1ZGZzLT5haV9zYW1wbGVfY291bnQgPCBuKSkgeworCQkJCS8qCisJCQkJICogd2UgaGF2ZSBzZW5kIG9ubHkgYSBmcmFjdGlvbiBvZiB0aGUgYnl0ZXMKKwkJCQkgKiByZWNlaXZlZAorCQkJCSAqLwogCQkJCWNmY193cml0ZV9hcnJheV90b19idWZmZXIocywKIAkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+YWlfc2FtcGxlX2NvdW50ICoKLQkJCQkJc2l6ZW9mKHVpbnQxNl90KSk7Ci0JCQkJdXNiZHV4ZmFzdF9haV9zdG9wKHRoaXNfdXNiZHV4ZmFzdHN1YiwgMCk7Ci0JCQkJLy8gc2F5IGNvbWVkaSB0aGF0IHRoZSBhY3F1aXN0aW9uIGlzIG92ZXIKKwkJCQkJdWRmcy0+YWlfc2FtcGxlX2NvdW50CisJCQkJCSogc2l6ZW9mKHVpbnQxNl90KSk7CisJCQkJdXNiZHV4ZmFzdF9haV9zdG9wKHVkZnMsIDApOworCQkJCS8qIHNheSBjb21lZGkgdGhhdCB0aGUgYWNxdWlzdGlvbiBpcyBvdmVyICovCiAJCQkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwotCQkJCWNvbWVkaV9ldmVudCh0aGlzX3VzYmR1eGZhc3RzdWItPmNvbWVkaWRldiwgcyk7CisJCQkJY29tZWRpX2V2ZW50KHVkZnMtPmNvbWVkaWRldiwgcyk7CiAJCQkJcmV0dXJuOwogCQkJfQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5haV9zYW1wbGVfY291bnQgLT0gbjsKKwkJCXVkZnMtPmFpX3NhbXBsZV9jb3VudCAtPSBuOwogCQl9Ci0JCS8vIHdyaXRlIHRoZSBmdWxsIGJ1ZmZlciB0byBjb21lZGkKLQkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLAotCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCS8qIHdyaXRlIHRoZSBmdWxsIGJ1ZmZlciB0byBjb21lZGkgKi8KKwkJY2ZjX3dyaXRlX2FycmF5X3RvX2J1ZmZlcihzLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkJICB1cmItPmFjdHVhbF9sZW5ndGgpOwogCi0JCS8vIHRlbGwgY29tZWRpIHRoYXQgZGF0YSBpcyB0aGVyZQotCQljb21lZGlfZXZlbnQodGhpc191c2JkdXhmYXN0c3ViLT5jb21lZGlkZXYsIHMpOworCQkvKiB0ZWxsIGNvbWVkaSB0aGF0IGRhdGEgaXMgdGhlcmUgKi8KKwkJY29tZWRpX2V2ZW50KHVkZnMtPmNvbWVkaWRldiwgcyk7CiAKIAl9IGVsc2UgewotCQkvLyBpZ25vcmUgdGhpcyBwYWNrZXQKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5pZ25vcmUtLTsKKwkJLyogaWdub3JlIHRoaXMgcGFja2V0ICovCisJCXVkZnMtPmlnbm9yZS0tOwogCX0KIAotCS8vIGNvbW1hbmQgaXMgc3RpbGwgcnVubmluZwotCS8vIHJlc3VibWl0IHVyYiBmb3IgQlVMSyB0cmFuc2ZlcgotCXVyYi0+ZGV2ID0gdGhpc191c2JkdXhmYXN0c3ViLT51c2JkZXY7CisJLyoKKwkgKiBjb21tYW5kIGlzIHN0aWxsIHJ1bm5pbmcKKwkgKiByZXN1Ym1pdCB1cmIgZm9yIEJVTEsgdHJhbnNmZXIKKwkgKi8KKwl1cmItPmRldiA9IHVkZnMtPnVzYmRldjsKIAl1cmItPnN0YXR1cyA9IDA7CiAJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoZXJyIDwgMCkgewotCQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiB1cmIgcmVzdWJtIGZhaWxlZDogJWQiLAotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5jb21lZGlkZXYtPm1pbm9yLCBlcnIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiB1c2JkdXhmYXN0OiB1cmIgcmVzdWJtIGZhaWxlZDogJWQiLAorCQkJdWRmcy0+Y29tZWRpZGV2LT5taW5vciwgZXJyKTsKIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCQlzLT5hc3luYy0+ZXZlbnRzIHw9IENPTUVESV9DQl9FUlJPUjsKLQkJY29tZWRpX2V2ZW50KHRoaXNfdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LCBzKTsKLQkJdXNiZHV4ZmFzdF9haV9zdG9wKHRoaXNfdXNiZHV4ZmFzdHN1YiwgMCk7CisJCWNvbWVkaV9ldmVudCh1ZGZzLT5jb21lZGlkZXYsIHMpOworCQl1c2JkdXhmYXN0X2FpX3N0b3AodWRmcywgMCk7CiAJfQogfQogCi1zdGF0aWMgaW50IHVzYmR1eGZhc3RzdWJfc3RhcnQodXNiZHV4ZmFzdHN1Yl90ICogdXNiZHV4ZmFzdHN1YikKK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdHN1Yl9zdGFydChzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzKQogewotCWludCBlcnJjb2RlID0gMDsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgbG9jYWxfdHJhbnNmZXJfYnVmZmVyWzE2XTsKIAotCWlmICh1c2JkdXhmYXN0c3ViLT5wcm9iZWQpIHsKLQkJLy8gN2Y5MiB0byB6ZXJvCi0JCWxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSA9IDA7Ci0JCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJLy8gY3JlYXRlIGEgcGlwZSBmb3IgYSBjb250cm9sIHRyYW5zZmVyCi0JCQl1c2Jfc25kY3RybHBpcGUodXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LCAwKSwKLQkJCS8vIGJSZXF1ZXN0LCAiRmlybXdhcmUiCi0JCQlVU0JEVVhGQVNUU1VCX0ZJUk1XQVJFLAotCQkJLy8gYm1SZXF1ZXN0VHlwZQotCQkJVkVORE9SX0RJUl9PVVQsCi0JCQkvLyBWYWx1ZQotCQkJVVNCRFVYRkFTVFNVQl9DUFVDUywKLQkJCS8vIEluZGV4Ci0JCQkweDAwMDAsCi0JCQkvLyBhZGRyZXNzIG9mIHRoZSB0cmFuc2ZlciBidWZmZXIKLQkJCWxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKLQkJCS8vIExlbmd0aAotCQkJMSwKLQkJCS8vIFRpbWVvdXQKLQkJCUVaVElNRU9VVCk7Ci0JCWlmIChlcnJjb2RlIDwgMCkgewotCQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0XzogY29udHJvbCBtc2cgZmFpbGVkIChzdGFydClcbiIpOwotCQkJcmV0dXJuIGVycmNvZGU7Ci0JCX0KKwkvKiA3ZjkyIHRvIHplcm8gKi8KKwlsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0gPSAwOworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGZzLT51c2JkZXYsCisJCXVzYl9zbmRjdHJscGlwZSh1ZGZzLT51c2JkZXYsIDApLAorCQlVU0JEVVhGQVNUU1VCX0ZJUk1XQVJFLAkvKiBiUmVxdWVzdCwgIkZpcm13YXJlIiAqLworCQlWRU5ET1JfRElSX09VVCwJCS8qIGJtUmVxdWVzdFR5cGUgKi8KKwkJVVNCRFVYRkFTVFNVQl9DUFVDUywJLyogVmFsdWUgKi8KKwkJMHgwMDAwLAkJCS8qIEluZGV4ICovCisJCWxvY2FsX3RyYW5zZmVyX2J1ZmZlciwJLyogYWRkcmVzcyBvZiB0aGUgdHJhbnNmZXIgYnVmZmVyICovCisJCTEsCQkJLyogTGVuZ3RoICovCisJCUVaVElNRU9VVCk7CQkvKiBUaW1lb3V0ICovCisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0XzogY29udHJvbCBtc2cgZmFpbGVkIChzdGFydClcbiIpOworCQlyZXR1cm4gcmV0OwogCX0KKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHVzYmR1eGZhc3RzdWJfc3RvcCh1c2JkdXhmYXN0c3ViX3QgKiB1c2JkdXhmYXN0c3ViKQorc3RhdGljIGludCB1c2JkdXhmYXN0c3ViX3N0b3Aoc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmcykKIHsKLQlpbnQgZXJyY29kZSA9IDA7Ci0KKwlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgbG9jYWxfdHJhbnNmZXJfYnVmZmVyWzE2XTsKLQlpZiAodXNiZHV4ZmFzdHN1Yi0+cHJvYmVkKSB7Ci0JCS8vIDdmOTIgdG8gb25lCi0JCWxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSA9IDE7Ci0JCWVycmNvZGUgPSB1c2JfY29udHJvbF9tc2codXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJdXNiX3NuZGN0cmxwaXBlKHVzYmR1eGZhc3RzdWItPnVzYmRldiwgMCksCi0JCQkvLyBiUmVxdWVzdCwgIkZpcm13YXJlIgotCQkJVVNCRFVYRkFTVFNVQl9GSVJNV0FSRSwKLQkJCS8vIGJtUmVxdWVzdFR5cGUKLQkJCVZFTkRPUl9ESVJfT1VULAotCQkJLy8gVmFsdWUKLQkJCVVTQkRVWEZBU1RTVUJfQ1BVQ1MsCi0JCQkvLyBJbmRleAotCQkJMHgwMDAwLCBsb2NhbF90cmFuc2Zlcl9idWZmZXIsCi0JCQkvLyBMZW5ndGgKLQkJCTEsCi0JCQkvLyBUaW1lb3V0Ci0JCQlFWlRJTUVPVVQpOwotCQlpZiAoZXJyY29kZSA8IDApIHsKLQkJCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogY29udHJvbCBtc2cgZmFpbGVkIChzdG9wKVxuIik7Ci0JCQlyZXR1cm4gZXJyY29kZTsKLQkJfQorCisJLyogN2Y5MiB0byBvbmUgKi8KKwlsb2NhbF90cmFuc2Zlcl9idWZmZXJbMF0gPSAxOworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGZzLT51c2JkZXYsCisJCXVzYl9zbmRjdHJscGlwZSh1ZGZzLT51c2JkZXYsIDApLAorCQlVU0JEVVhGQVNUU1VCX0ZJUk1XQVJFLAkvKiBiUmVxdWVzdCwgIkZpcm13YXJlIiAqLworCQlWRU5ET1JfRElSX09VVCwJCS8qIGJtUmVxdWVzdFR5cGUgKi8KKwkJVVNCRFVYRkFTVFNVQl9DUFVDUywJLyogVmFsdWUgKi8KKwkJMHgwMDAwLAkJCS8qIEluZGV4ICovCisJCWxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKKwkJMSwJCQkvKiBMZW5ndGggKi8KKwkJRVpUSU1FT1VUKTsJCS8qIFRpbWVvdXQgKi8KKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGNvbnRyb2wgbXNnIGZhaWxlZCAiCisJCSAgICAgICAiKHN0b3ApXG4iKTsKKwkJcmV0dXJuIHJldDsKIAl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JkdXhmYXN0c3ViX3VwbG9hZCh1c2JkdXhmYXN0c3ViX3QgKiB1c2JkdXhmYXN0c3ViLAorc3RhdGljIGludCB1c2JkdXhmYXN0c3ViX3VwbG9hZChzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzLAogCXVuc2lnbmVkIGNoYXIgKmxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKIAl1bnNpZ25lZCBpbnQgc3RhcnRBZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWludCBlcnJjb2RlOworCWludCByZXQ7CiAKLQlpZiAodXNiZHV4ZmFzdHN1Yi0+cHJvYmVkKSB7CiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiB1cGxvYWRpbmcgJWQgYnl0ZXMiLAotCQkJdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LT5taW5vciwgbGVuKTsKLQkJcHJpbnRrKCIgdG8gYWRkciAlZCwgZmlyc3QgYnl0ZT0lZC5cbiIsCi0JCQlzdGFydEFkZHIsIGxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaTogdXNiZHV4ZmFzdDogdXBsb2FkaW5nICVkIGJ5dGVzIiwgbGVuKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiIHRvIGFkZHIgJWQsIGZpcnN0IGJ5dGU9JWQuXG4iLAorCQlzdGFydEFkZHIsIGxvY2FsX3RyYW5zZmVyX2J1ZmZlclswXSk7CiAjZW5kaWYKLQkJZXJyY29kZSA9IHVzYl9jb250cm9sX21zZyh1c2JkdXhmYXN0c3ViLT51c2JkZXYsCi0JCQl1c2Jfc25kY3RybHBpcGUodXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LCAwKSwKLQkJCS8vIGJyZXF1ZXN0LCBmaXJtd2FyZQotCQkJVVNCRFVYRkFTVFNVQl9GSVJNV0FSRSwKLQkJCS8vIGJtUmVxdWVzdFR5cGUKLQkJCVZFTkRPUl9ESVJfT1VULAotCQkJLy8gdmFsdWUKLQkJCXN0YXJ0QWRkciwKLQkJCS8vIGluZGV4Ci0JCQkweDAwMDAsCi0JCQkvLyBvdXIgbG9jYWwgc2FmZSBidWZmZXIKLQkJCWxvY2FsX3RyYW5zZmVyX2J1ZmZlciwKLQkJCS8vIGxlbmd0aAotCQkJbGVuLAotCQkJLy8gdGltZW91dAotCQkJRVpUSU1FT1VUKTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRmcy0+dXNiZGV2LAorCQl1c2Jfc25kY3RybHBpcGUodWRmcy0+dXNiZGV2LCAwKSwKKwkJVVNCRFVYRkFTVFNVQl9GSVJNV0FSRSwgLyogYnJlcXVlc3QsIGZpcm13YXJlICovCisJCVZFTkRPUl9ESVJfT1VULAkJLyogYm1SZXF1ZXN0VHlwZSAqLworCQlzdGFydEFkZHIsCQkvKiB2YWx1ZSAqLworCQkweDAwMDAsCQkJLyogaW5kZXggKi8KKwkJbG9jYWxfdHJhbnNmZXJfYnVmZmVyLAkvKiBvdXIgbG9jYWwgc2FmZSBidWZmZXIgKi8KKwkJbGVuLAkJCS8qIGxlbmd0aCAqLworCQlFWlRJTUVPVVQpOwkJLyogdGltZW91dCAqLworCiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IHJlc3VsdD0lZFxuIiwgZXJyY29kZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaV86IHVzYmR1eGZhc3Q6IHJlc3VsdD0lZFxuIiwgcmV0KTsKICNlbmRpZgotCQlpZiAoZXJyY29kZSA8IDApIHsKLQkJCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogdXBwbG9hZCBmYWlsZWRcbiIpOwotCQkJcmV0dXJuIGVycmNvZGU7Ci0JCX0KLQl9IGVsc2UgewotCQkvLyBubyBkZXZpY2Ugb24gdGhlIGJ1cyBmb3IgdGhpcyBpbmRleAotCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogdXBwbG9hZCBmYWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OwogCX0KKwogCXJldHVybiAwOwogfQogCi1pbnQgZmlybXdhcmVVcGxvYWQodXNiZHV4ZmFzdHN1Yl90ICogdXNiZHV4ZmFzdHN1YiwKLQl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZUJpbmFyeSwgaW50IHNpemVGaXJtd2FyZSkKK2ludCBmaXJtd2FyZVVwbG9hZChzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzLCB1bnNpZ25lZCBjaGFyICpmaXJtd2FyZUJpbmFyeSwKKwkJICAgaW50IHNpemVGaXJtd2FyZSkKIHsKIAlpbnQgcmV0OwogCi0JaWYgKCFmaXJtd2FyZUJpbmFyeSkgeworCWlmICghZmlybXdhcmVCaW5hcnkpCiAJCXJldHVybiAwOwotCX0KLQlyZXQgPSB1c2JkdXhmYXN0c3ViX3N0b3AodXNiZHV4ZmFzdHN1Yik7CisKKwlyZXQgPSB1c2JkdXhmYXN0c3ViX3N0b3AodWRmcyk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBjYW4gbm90IHN0b3AgZmlybXdhcmVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGNhbiBub3Qgc3RvcCBmaXJtd2FyZVxuIik7CiAJCXJldHVybiByZXQ7CiAJfQotCXJldCA9IHVzYmR1eGZhc3RzdWJfdXBsb2FkKHVzYmR1eGZhc3RzdWIsCi0JCWZpcm13YXJlQmluYXJ5LCAwLCBzaXplRmlybXdhcmUpOworCXJldCA9IHVzYmR1eGZhc3RzdWJfdXBsb2FkKHVkZnMsIGZpcm13YXJlQmluYXJ5LCAwLCBzaXplRmlybXdhcmUpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogZmlybXdhcmUgdXBsb2FkIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogZmlybXdhcmUgdXBsb2FkIGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQotCXJldCA9IHVzYmR1eGZhc3RzdWJfc3RhcnQodXNiZHV4ZmFzdHN1Yik7CisJcmV0ID0gdXNiZHV4ZmFzdHN1Yl9zdGFydCh1ZGZzKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IGNhbiBub3Qgc3RhcnQgZmlybXdhcmVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGNhbiBub3Qgc3RhcnQgZmlybXdhcmVcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KKwogCXJldHVybiAwOwogfQogCi1pbnQgdXNiZHV4ZmFzdHN1Yl9zdWJtaXRfSW5VUkJzKHVzYmR1eGZhc3RzdWJfdCAqIHVzYmR1eGZhc3RzdWIpCitpbnQgdXNiZHV4ZmFzdHN1Yl9zdWJtaXRfSW5VUkJzKHN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMpCiB7Ci0JaW50IGVyckZsYWc7CisJaW50IHJldDsKIAotCWlmICghdXNiZHV4ZmFzdHN1YikgeworCWlmICghdWRmcykKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCXVzYl9maWxsX2J1bGtfdXJiKHVzYmR1eGZhc3RzdWItPnVyYkluLAotCQl1c2JkdXhmYXN0c3ViLT51c2JkZXYsCi0JCXVzYl9yY3ZidWxrcGlwZSh1c2JkdXhmYXN0c3ViLT51c2JkZXYsIEJVTEtJTkVQKSwKLQkJdXNiZHV4ZmFzdHN1Yi0+dHJhbnNmZXJfYnVmZmVyLAotCQlTSVpFSU5CVUYsIHVzYmR1eGZhc3RzdWJfYWlfSXJxLCB1c2JkdXhmYXN0c3ViLT5jb21lZGlkZXYpOworCisJdXNiX2ZpbGxfYnVsa191cmIodWRmcy0+dXJiSW4sIHVkZnMtPnVzYmRldiwKKwkJCSAgdXNiX3JjdmJ1bGtwaXBlKHVkZnMtPnVzYmRldiwgQlVMS0lORVApLAorCQkJICB1ZGZzLT50cmFuc2Zlcl9idWZmZXIsCisJCQkgIFNJWkVJTkJVRiwgdXNiZHV4ZmFzdHN1Yl9haV9JcnEsIHVkZnMtPmNvbWVkaWRldik7CiAKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogc3VibWl0dGluZyBpbi11cmI6ICV4LCV4XG4iLAotCQl1c2JkdXhmYXN0c3ViLT5jb21lZGlkZXYtPm1pbm9yLAotCQkoaW50KSh1c2JkdXhmYXN0c3ViLT51cmJJbi0+Y29udGV4dCksCi0JCShpbnQpKHVzYmR1eGZhc3RzdWItPnVyYkluLT5kZXYpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IHN1Ym1pdHRpbmcgaW4tdXJiOiAiCisJICAgICAgICIweCVwLDB4JXBcbiIsIHVkZnMtPmNvbWVkaWRldi0+bWlub3IsIHVkZnMtPnVyYkluLT5jb250ZXh0LAorCQl1ZGZzLT51cmJJbi0+ZGV2KTsKICNlbmRpZgotCWVyckZsYWcgPSB1c2Jfc3VibWl0X3VyYih1c2JkdXhmYXN0c3ViLT51cmJJbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKGVyckZsYWcpIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBhaTogdXNiX3N1Ym1pdF91cmIgZXJyb3IgJWRcbiIsCi0JCQllcnJGbGFnKTsKLQkJcmV0dXJuIGVyckZsYWc7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodWRmcy0+dXJiSW4sIEdGUF9BVE9NSUMpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBhaTogdXNiX3N1Ym1pdF91cmIgZXJyb3IiCisJCSAgICAgICAiICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JkdXhmYXN0X2FpX2NtZHRlc3QoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2NtZCAqIGNtZCkKK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9jbWR0ZXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7CiAJaW50IGVyciA9IDAsIHN0b3BfbWFzayA9IDA7Ci0JbG9uZyBpbnQgc3RlcHMsIHRtcCA9IDA7CisJbG9uZyBpbnQgc3RlcHMsIHRtcDsKIAlpbnQgbWluU2FtcGxQZXI7Ci0JdXNiZHV4ZmFzdHN1Yl90ICp0aGlzX3VzYmR1eGZhc3RzdWIgPSBkZXYtPnByaXZhdGU7Ci0JaWYgKCEodGhpc191c2JkdXhmYXN0c3ViLT5wcm9iZWQpKSB7CisJc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmcyA9IGRldi0+cHJpdmF0ZTsKKworCWlmICghdWRmcy0+cHJvYmVkKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9jbWR0ZXN0XG4iLCBkZXYtPm1pbm9yKTsKLQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBjb252ZXJ0X2FyZz0ldSBzY2FuX2JlZ2luX2FyZz0ldVxuIiwKLQkJZGV2LT5taW5vciwgY21kLT5jb252ZXJ0X2FyZywgY21kLT5zY2FuX2JlZ2luX2FyZyk7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiB1c2JkdXhmYXN0X2FpX2NtZHRlc3RcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogdXNiZHV4ZmFzdDogY29udmVydF9hcmc9JXUgIgorCSAgICAgICAic2Nhbl9iZWdpbl9hcmc9JXVcbiIsCisJICAgICAgIGRldi0+bWlub3IsIGNtZC0+Y29udmVydF9hcmcsIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOwogI2VuZGlmCiAJLyogc3RlcCAxOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB0cml2aWFsbHkgdmFsaWQgKi8KIApAQCAtNjIxLDcgKzYyNSw5IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIDE7CiAKLQkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCS8qCisJICogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUKKwkgKi8KIAogCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJgogCQljbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0lOVCkKQEAgLTYzNiw3ICs2NDIsNyBAQAogCQljbWQtPnN0b3Bfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQogCQllcnIrKzsKIAotCS8vIGNhbid0IGhhdmUgZXh0ZXJuYWwgc3RvcCBhbmQgc3RhcnQgdHJpZ2dlcnMgYXQgb25jZQorCS8qIGNhbid0IGhhdmUgZXh0ZXJuYWwgc3RvcCBhbmQgc3RhcnQgdHJpZ2dlcnMgYXQgb25jZSAqLwogCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCAmJiBjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKQogCQllcnIrKzsKIApAQCAtNjUwLDI5ICs2NTYsMjggQEAKIAkJZXJyKys7CiAJfQogCi0JaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgeworCWlmICghY21kLT5jaGFubGlzdF9sZW4pCiAJCWVycisrOwotCX0KKwogCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgewogCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOwogCQllcnIrKzsKIAl9CiAKLQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPT0gMSkgeworCWlmIChjbWQtPmNoYW5saXN0X2xlbiA9PSAxKQogCQltaW5TYW1wbFBlciA9IDE7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCW1pblNhbXBsUGVyID0gTUlOX1NBTVBMSU5HX1BFUklPRDsKLQl9CiAKIAlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKSB7CiAJCXN0ZXBzID0gY21kLT5jb252ZXJ0X2FyZyAqIDMwOwotCQlpZiAoc3RlcHMgPCAobWluU2FtcGxQZXIgKiAxMDAwKSkgeworCQlpZiAoc3RlcHMgPCAobWluU2FtcGxQZXIgKiAxMDAwKSkKIAkJCXN0ZXBzID0gbWluU2FtcGxQZXIgKiAxMDAwOwotCQl9Ci0JCWlmIChzdGVwcyA+IChNQVhfU0FNUExJTkdfUEVSSU9EICogMTAwMCkpIHsKKworCQlpZiAoc3RlcHMgPiAoTUFYX1NBTVBMSU5HX1BFUklPRCAqIDEwMDApKQogCQkJc3RlcHMgPSBNQVhfU0FNUExJTkdfUEVSSU9EICogMTAwMDsKLQkJfQotCQkvLyBjYWxjIGFyZyBhZ2FpbgorCisJCS8qIGNhbGMgYXJnIGFnYWluICovCiAJCXRtcCA9IHN0ZXBzIC8gMzA7CiAJCWlmIChjbWQtPmNvbnZlcnRfYXJnICE9IHRtcCkgewogCQkJY21kLT5jb252ZXJ0X2FyZyA9IHRtcDsKQEAgLTY4MCwxMCArNjg1LDEwIEBACiAJCX0KIAl9CiAKLQlpZiAoY21kLT5zY2FuX2JlZ2luX3NyYyA9PSBUUklHX1RJTUVSKSB7CisJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikKIAkJZXJyKys7Ci0JfQotCS8vIHN0b3Agc291cmNlCisKKwkvKiBzdG9wIHNvdXJjZSAqLwogCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgewogCWNhc2UgVFJJR19DT1VOVDoKIAkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CkBAIC02OTcsNyArNzAyLDEwIEBACiAJCQllcnIrKzsKIAkJfQogCQlicmVhazsKLQkJLy8gVFJJR19FWFQgZG9lc24ndCBjYXJlIHNpbmNlIGl0IGRvZXNuJ3QgdHJpZ2dlciBvZmYgYSBudW1iZXJlZCBjaGFubmVsCisJCS8qCisJCSAqIFRSSUdfRVhUIGRvZXNuJ3QgY2FyZSBzaW5jZSBpdCBkb2Vzbid0IHRyaWdnZXIKKwkJICogb2ZmIGEgbnVtYmVyZWQgY2hhbm5lbAorCQkgKi8KIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC03MTEsNjAwICs3MTksNjg4IEBACiAKIH0KIAotc3RhdGljIGludCB1c2JkdXhmYXN0X2FpX2ludHRyaWcoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgdW5zaWduZWQgaW50IHRyaWdudW0pCitzdGF0aWMgaW50IHVzYmR1eGZhc3RfYWlfaW50dHJpZyhzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBpbnQgdHJpZ251bSkKIHsKIAlpbnQgcmV0OwotCXVzYmR1eGZhc3RzdWJfdCAqdGhpc191c2JkdXhmYXN0c3ViID0gZGV2LT5wcml2YXRlOwotCWlmICghdGhpc191c2JkdXhmYXN0c3ViKSB7CisJc3RydWN0IHVzYmR1eGZhc3RzdWJfcyAqdWRmcyA9IGRldi0+cHJpdmF0ZTsKKworCWlmICghdWRmcykKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWRvd24oJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKLQlpZiAoISh0aGlzX3VzYmR1eGZhc3RzdWItPnByb2JlZCkpIHsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKworCWRvd24oJnVkZnMtPnNlbSk7CisJaWYgKCF1ZGZzLT5wcm9iZWQpIHsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9pbnR0cmlnXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6IHVzYmR1eGZhc3RfYWlfaW50dHJpZ1xuIiwgZGV2LT5taW5vcik7CiAjZW5kaWYKIAogCWlmICh0cmlnbnVtICE9IDApIHsKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9pbnR0cmlnOiBpbnZhbGlkIHRyaWdudW1cbiIsCi0JCQlkZXYtPm1pbm9yKTsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9pbnR0cmlnOiBpbnZhbGlkIgorCQkgICAgICAgIiB0cmlnbnVtXG4iLCBkZXYtPm1pbm9yKTsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoISh0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nKSkgewotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nID0gMTsKLQkJcmV0ID0gdXNiZHV4ZmFzdHN1Yl9zdWJtaXRfSW5VUkJzKHRoaXNfdXNiZHV4ZmFzdHN1Yik7CisJaWYgKCF1ZGZzLT5haV9jbWRfcnVubmluZykgeworCQl1ZGZzLT5haV9jbWRfcnVubmluZyA9IDE7CisJCXJldCA9IHVzYmR1eGZhc3RzdWJfc3VibWl0X0luVVJCcyh1ZGZzKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3RfYWlfaW50dHJpZzogdXJiU3VibWl0OiBlcnI9JWRcbiIsIGRldi0+bWlub3IsIHJldCk7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nID0gMDsKLQkJCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiB1c2JkdXhmYXN0X2FpX2ludHRyaWc6ICIKKwkJCSAgICAgICAidXJiU3VibWl0OiBlcnI9JWRcbiIsIGRldi0+bWlub3IsIHJldCk7CisJCQl1ZGZzLT5haV9jbWRfcnVubmluZyA9IDA7CisJCQl1cCgmdWRmcy0+c2VtKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJcy0+YXN5bmMtPmludHRyaWcgPSBOVUxMOwogCX0gZWxzZSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IGFpX2ludHRyaWcgYnV0IGFjcXUgaXMgYWxyZWFkeSBydW5uaW5nXG4iLAotCQkJZGV2LT5taW5vcik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGFpX2ludHRyaWcgYnV0IGFjcXUgaXMgYWxyZWFkeSIKKwkJICAgICAgICIgcnVubmluZ1xuIiwgZGV2LT5taW5vcik7CiAJfQotCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJdXAoJnVkZnMtPnNlbSk7CiAJcmV0dXJuIDE7CiB9CiAKLS8vIG9mZnNldHMgZm9yIHRoZSBHUElGIGJ5dGVzCi0vLyB0aGUgZmlyc3QgYnl0ZSBpcyB0aGUgY29tbWFuZCBieXRlCi0jZGVmaW5lIExFTkJBU0UgMSsweDAwCi0jZGVmaW5lIE9QQkFTRSAgMSsweDA4Ci0jZGVmaW5lIE9VVEJBU0UgMSsweDEwCi0jZGVmaW5lIExPR0JBU0UgMSsweDE4CisvKgorICogb2Zmc2V0cyBmb3IgdGhlIEdQSUYgYnl0ZXMKKyAqIHRoZSBmaXJzdCBieXRlIGlzIHRoZSBjb21tYW5kIGJ5dGUKKyAqLworI2RlZmluZSBMRU5CQVNFCSgxKzB4MDApCisjZGVmaW5lIE9QQkFTRQkoMSsweDA4KQorI2RlZmluZSBPVVRCQVNFCSgxKzB4MTApCisjZGVmaW5lIExPR0JBU0UJKDErMHgxOCkKIAotc3RhdGljIGludCB1c2JkdXhmYXN0X2FpX2NtZChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfc3ViZGV2aWNlICogcykKK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9jbWQoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7Ci0JY29tZWRpX2NtZCAqY21kID0gJnMtPmFzeW5jLT5jbWQ7CisJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOwogCXVuc2lnbmVkIGludCBjaGFuLCBnYWluLCBybmdtYXNrID0gMHhmZjsKIAlpbnQgaSwgaiwgcmV0OwotCXVzYmR1eGZhc3RzdWJfdCAqdGhpc191c2JkdXhmYXN0c3ViID0gZGV2LT5wcml2YXRlOworCXN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnM7CiAJaW50IHJlc3VsdDsKIAlsb25nIHN0ZXBzLCBzdGVwc190bXA7CiAKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9jbWRcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogdXNiZHV4ZmFzdF9haV9jbWRcbiIsIGRldi0+bWlub3IpOwogI2VuZGlmCi0JaWYgKCF0aGlzX3VzYmR1eGZhc3RzdWIpIHsKKwl1ZGZzID0gZGV2LT5wcml2YXRlOworCWlmICghdWRmcykKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWRvd24oJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKLQlpZiAoISh0aGlzX3VzYmR1eGZhc3RzdWItPnByb2JlZCkpIHsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKworCWRvd24oJnVkZnMtPnNlbSk7CisJaWYgKCF1ZGZzLT5wcm9iZWQpIHsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpZiAodGhpc191c2JkdXhmYXN0c3ViLT5haV9jbWRfcnVubmluZykgewotCQlwcmludGsoImNvbWVkaSVkOiBhaV9jbWQgbm90IHBvc3NpYmxlLiBBbm90aGVyIGFpX2NtZCBpcyBydW5uaW5nLlxuIiwgZGV2LT5taW5vcik7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJaWYgKHVkZnMtPmFpX2NtZF9ydW5uaW5nKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGFpX2NtZCBub3QgcG9zc2libGUuIEFub3RoZXIgYWlfY21kIgorCQkgICAgICAgIiBpcyBydW5uaW5nLlxuIiwgZGV2LT5taW5vcik7CisJCXVwKCZ1ZGZzLT5zZW0pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQkvLyBzZXQgY3VycmVudCBjaGFubmVsIG9mIHRoZSBydW5uaW5nIGFxdWlzaXRpb24gdG8gemVybworCS8qIHNldCBjdXJyZW50IGNoYW5uZWwgb2YgdGhlIHJ1bm5pbmcgYXF1aXNpdGlvbiB0byB6ZXJvICovCiAJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKIAotCS8vIGlnbm9yZSB0aGUgZmlyc3QgYnVmZmVycyBmcm9tIHRoZSBkZXZpY2UgaWYgdGhlcmUgaXMgYW4gZXJyb3IgY29uZGl0aW9uCi0JdGhpc191c2JkdXhmYXN0c3ViLT5pZ25vcmUgPSBQQUNLRVRTX1RPX0lHTk9SRTsKKwkvKgorCSAqIGlnbm9yZSB0aGUgZmlyc3QgYnVmZmVycyBmcm9tIHRoZSBkZXZpY2UgaWYgdGhlcmUKKwkgKiBpcyBhbiBlcnJvciBjb25kaXRpb24KKwkgKi8KKwl1ZGZzLT5pZ25vcmUgPSBQQUNLRVRTX1RPX0lHTk9SRTsKIAogCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IDApIHsKIAkJZ2FpbiA9IENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pOwogCQlmb3IgKGkgPSAwOyBpIDwgY21kLT5jaGFubGlzdF9sZW47ICsraSkgewogCQkJY2hhbiA9IENSX0NIQU4oY21kLT5jaGFubGlzdFtpXSk7CiAJCQlpZiAoY2hhbiAhPSBpKSB7Ci0JCQkJcHJpbnRrKCJjb21lZGklZDogY21kIGlzIGFjY2VwdGluZyBvbmx5IGNvbnNlY3V0aXZlIGNoYW5uZWxzLlxuIiwgZGV2LT5taW5vcik7Ci0JCQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBjbWQgaXMgYWNjZXB0aW5nICIKKwkJCQkgICAgICAgIm9ubHkgY29uc2VjdXRpdmUgY2hhbm5lbHMuXG4iLAorCQkJCSAgICAgICBkZXYtPm1pbm9yKTsKKwkJCQl1cCgmdWRmcy0+c2VtKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWlmICgoZ2FpbiAhPSBDUl9SQU5HRShjbWQtPmNoYW5saXN0W2ldKSkKIAkJCQkmJiAoY21kLT5jaGFubGlzdF9sZW4gPiAzKSkgewotCQkJCXByaW50aygiY29tZWRpJWQ6IHRoZSBnYWluIG11c3QgYmUgdGhlIHNhbWUgZm9yIGFsbCBjaGFubmVscy5cbiIsIGRldi0+bWlub3IpOwotCQkJCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdGhlIGdhaW4gbXVzdCBiZSIKKwkJCQkgICAgICAgIiB0aGUgc2FtZSBmb3IgYWxsIGNoYW5uZWxzLlxuIiwKKwkJCQkgICAgICAgZGV2LT5taW5vcik7CisJCQkJdXAoJnVkZnMtPnNlbSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlpZiAoaSA+PSBOVU1DSEFOTkVMUykgewotCQkJCXByaW50aygiY29tZWRpJWQ6IGNoYW5uZWwgbGlzdCB0b28gbG9uZ1xuIiwKLQkJCQkJZGV2LT5taW5vcik7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogY2hhbm5lbCBsaXN0IHRvbyIKKwkJCQkgICAgICAgIiBsb25nXG4iLCBkZXYtPm1pbm9yKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KIAlzdGVwcyA9IDA7CiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewotCQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBzY2FuX2JlZ2luX3NyYz09VFJJR19USU1FUiBub3QgdmFsaWQuXG4iLCBkZXYtPm1pbm9yKTsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdXNiZHV4ZmFzdDogIgorCQkgICAgICAgInNjYW5fYmVnaW5fc3JjPT1UUklHX1RJTUVSIG5vdCB2YWxpZC5cbiIsIGRldi0+bWlub3IpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsKKwlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSKQogCQlzdGVwcyA9IChjbWQtPmNvbnZlcnRfYXJnICogMzApIC8gMTAwMDsKLQl9CisKIAlpZiAoKHN0ZXBzIDwgTUlOX1NBTVBMSU5HX1BFUklPRCkgJiYgKGNtZC0+Y2hhbmxpc3RfbGVuICE9IDEpKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGFpX2NtZDogc3RlcHM9JWxkLCBzY2FuX2JlZ2luX2FyZz0lZC4gTm90IHByb3Blcmx5IHRlc3RlZCBieSBjbWR0ZXN0P1xuIiwgZGV2LT5taW5vciwgc3RlcHMsIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOwotCQl1cCgmdGhpc191c2JkdXhmYXN0c3ViLT5zZW0pOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBhaV9jbWQ6IHN0ZXBzPSVsZCwgIgorCQkgICAgICAgInNjYW5fYmVnaW5fYXJnPSVkLiBOb3QgcHJvcGVybHkgdGVzdGVkIGJ5IGNtZHRlc3Q/XG4iLAorCQkgICAgICAgZGV2LT5taW5vciwgc3RlcHMsIGNtZC0+c2Nhbl9iZWdpbl9hcmcpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChzdGVwcyA+IE1BWF9TQU1QTElOR19QRVJJT0QpIHsKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogYWlfY21kOiBzYW1wbGluZyByYXRlIHRvbyBsb3cuXG4iLAotCQkJZGV2LT5taW5vcik7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGFpX2NtZDogc2FtcGxpbmcgcmF0ZSAiCisJCSAgICAgICAidG9vIGxvdy5cbiIsIGRldi0+bWlub3IpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICgoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQpICYmIChjbWQtPmNoYW5saXN0X2xlbiAhPSAxKQogCQkmJiAoY21kLT5jaGFubGlzdF9sZW4gIT0gMTYpKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGFpX2NtZDogVFJJR19FWFQgb25seSB3aXRoIDEgb3IgMTYgY2hhbm5lbHMgcG9zc2libGUuXG4iLCBkZXYtPm1pbm9yKTsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdXNiZHV4ZmFzdDogYWlfY21kOiBUUklHX0VYVCBvbmx5IgorCQkgICAgICAgIiB3aXRoIDEgb3IgMTYgY2hhbm5lbHMgcG9zc2libGUuXG4iLCBkZXYtPm1pbm9yKTsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogc3RlcHM9JWxkLCBjb252ZXJ0X2FyZz0ldSwgYWlfdGltZXI9JXVcbiIsCi0JCWRldi0+bWlub3IsCi0JCXN0ZXBzLCBjbWQtPmNvbnZlcnRfYXJnLCB0aGlzX3VzYmR1eGZhc3RzdWItPmFpX3RpbWVyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IHN0ZXBzPSVsZCwgY29udmVydF9hcmc9JXVcbiIsCisJICAgICAgIGRldi0+bWlub3IsIHN0ZXBzLCBjbWQtPmNvbnZlcnRfYXJnKTsKICNlbmRpZgogCiAJc3dpdGNoIChjbWQtPmNoYW5saXN0X2xlbikgewotCQkvLyBvbmUgY2hhbm5lbAogCWNhc2UgMToKKwkJLyoKKwkJICogb25lIGNoYW5uZWwKKwkJICovCisKIAkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pID4gMCkKIAkJCXJuZ21hc2sgPSAweGZmIC0gMHgwNDsKIAkJZWxzZQogCQkJcm5nbWFzayA9IDB4ZmY7CiAKLQkJLy8gZm9yIGV4dGVybmFsIHRyaWdnZXI6IGxvb3BpbmcgaW4gdGhpcyBzdGF0ZSB1bnRpbCB0aGUgUkRZMCBwaW4KLQkJLy8gYmVjb21lcyB6ZXJvCi0JCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgewkvLyB3ZSBsb29wIGhlcmUgdW50aWwgcmVhZHkgaGFzIGJlZW4gc2V0Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMF0gPSAweDAxOwkvLyBicmFuY2ggYmFjayB0byBzdGF0ZSAwCi0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAwXSA9IDB4MDE7CS8vIGRlY2Vpc2lvbiBzdGF0ZSB3L28gZGF0YQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDBdID0KLQkJCQkweEZGICYgcm5nbWFzazsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAwXSA9IDB4MDA7CS8vIFJEWTAgPSAwCi0JCX0gZWxzZSB7CS8vIHdlIGp1c3QgcHJvY2VlZCB0byBzdGF0ZSAxCi0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMF0gPSAxOwotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMF0gPSAwOwotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDBdID0KLQkJCQkweEZGICYgcm5nbWFzazsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAwXSA9IDA7CisJCS8qCisJCSAqIGZvciBleHRlcm5hbCB0cmlnZ2VyOiBsb29waW5nIGluIHRoaXMgc3RhdGUgdW50aWwKKwkJICogdGhlIFJEWTAgcGluIGJlY29tZXMgemVybworCQkgKi8KKworCQkvKiB3ZSBsb29wIGhlcmUgdW50aWwgcmVhZHkgaGFzIGJlZW4gc2V0ICovCisJCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgeworCQkJLyogYnJhbmNoIGJhY2sgdG8gc3RhdGUgMCAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMF0gPSAweDAxOworCQkJLyogZGVjZWlzaW9uIHN0YXRlIHcvbyBkYXRhICovCisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzBdID0gMHgwMTsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzBdID0gMHhGRiAmIHJuZ21hc2s7CisJCQkvKiBSRFkwID0gMCAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMF0gPSAweDAwOworCQl9IGVsc2UgewkvKiB3ZSBqdXN0IHByb2NlZWQgdG8gc3RhdGUgMSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMF0gPSAxOworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSswXSA9IDA7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSswXSA9IDB4RkYgJiBybmdtYXNrOworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMF0gPSAwOwogCQl9CiAKIAkJaWYgKHN0ZXBzIDwgTUlOX1NBTVBMSU5HX1BFUklPRCkgewotCQkJLy8gZm9yIGZhc3Qgc2luZ2xlIGNoYW5uZWwgYXF1IHdpdGhvdXQgbXV4CisJCQkvKiBmb3IgZmFzdCBzaW5nbGUgY2hhbm5lbCBhcXUgd2l0aG91dCBtdXggKi8KIAkJCWlmIChzdGVwcyA8PSAxKSB7Ci0JCQkJLy8gd2UganVzdCBzdGF5IGhlcmUgYXQgc3RhdGUgMSBhbmQgcmV4ZWN1dGUgdGhlIHNhbWUgc3RhdGUKLQkJCQkvLyB0aGlzIGdpdmVzIHVzIDMwTUh6IHNhbXBsaW5nIHJhdGUKLQkJCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMV0gPSAweDg5OwkvLyBicmFuY2ggYmFjayB0byBzdGF0ZSAxCi0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMV0gPSAweDAzOwkvLyBkZWNlaXNpb24gc3RhdGUgd2l0aCBkYXRhCi0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDFdID0KLQkJCQkJMHhGRiAmIHJuZ21hc2s7Ci0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDFdID0gMHhGRjsJLy8gZG9lc24ndCBtYXR0ZXIKLQkJCX0gZWxzZSB7Ci0JCQkJLy8gd2UgbG9vcCB0aHJvdWdoIHR3byBzdGF0ZXM6IGRhdGEgYW5kIGRlbGF5OiBtYXggcmF0ZSBpcyAxNU1oegotCQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAxXSA9Ci0JCQkJCXN0ZXBzIC0gMTsKLQkJCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAxXSA9IDB4MDI7CS8vIGRhdGEKLQkJCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMV0gPQotCQkJCQkweEZGICYgcm5nbWFzazsKLQkJCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMV0gPSAwOwkvLyBkb2Vzbid0IG1hdHRlcgorCQkJCS8qCisJCQkJICogd2UganVzdCBzdGF5IGhlcmUgYXQgc3RhdGUgMSBhbmQgcmV4ZWN1dGUKKwkJCQkgKiB0aGUgc2FtZSBzdGF0ZSB0aGlzIGdpdmVzIHVzIDMwTUh6IHNhbXBsaW5nCisJCQkJICogcmF0ZQorCQkJCSAqLwogCi0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDJdID0gMHgwOTsJLy8gYnJhbmNoIGJhY2sgdG8gc3RhdGUgMQotCQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDJdID0gMHgwMTsJLy8gZGVjZWlzaW9uIHN0YXRlIHcvbyBkYXRhCi0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDJdID0KLQkJCQkJMHhGRiAmIHJuZ21hc2s7Ci0JCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDJdID0gMHhGRjsJLy8gZG9lc24ndCBtYXR0ZXIKKwkJCQkvKiBicmFuY2ggYmFjayB0byBzdGF0ZSAxICovCisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMV0gPSAweDg5OworCQkJCS8qIGRlY2Vpc2lvbiBzdGF0ZSB3aXRoIGRhdGEgKi8KKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzFdID0gMHgwMzsKKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSsxXSA9IDB4RkYgJiBybmdtYXNrOworCQkJCS8qIGRvZXNuJ3QgbWF0dGVyICovCisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMV0gPSAweEZGOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIHdlIGxvb3AgdGhyb3VnaCB0d28gc3RhdGVzOiBkYXRhIGFuZCBkZWxheQorCQkJCSAqIG1heCByYXRlIGlzIDE1TUh6CisJCQkJICovCisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMV0gPSBzdGVwcyAtIDE7CisJCQkJLyogZGF0YSAqLworCQkJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMV0gPSAweDAyOworCQkJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzFdID0gMHhGRiAmIHJuZ21hc2s7CisJCQkJLyogZG9lc24ndCBtYXR0ZXIgKi8KKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSsxXSA9IDA7CisJCQkJLyogYnJhbmNoIGJhY2sgdG8gc3RhdGUgMSAqLworCQkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzJdID0gMHgwOTsKKwkJCQkvKiBkZWNlaXNpb24gc3RhdGUgdy9vIGRhdGEgKi8KKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzJdID0gMHgwMTsKKwkJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSsyXSA9IDB4RkYgJiBybmdtYXNrOworCQkJCS8qIGRvZXNuJ3QgbWF0dGVyICovCisJCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMl0gPSAweEZGOwogCQkJfQogCQl9IGVsc2UgewotCQkJLy8gd2UgbG9vcCB0aHJvdWdoIDMgc3RhdGVzOiAyeCBkZWxheSBhbmQgMXggZGF0YS4gVGhpcyBnaXZlcyBhIG1pbgotCQkJLy8gc2FtcGxpbmcgcmF0ZSBvZiA2MGtIei4KKwkJCS8qCisJCQkgKiB3ZSBsb29wIHRocm91Z2ggMyBzdGF0ZXM6IDJ4IGRlbGF5IGFuZCAxeCBkYXRhCisJCQkgKiB0aGlzIGdpdmVzIGEgbWluIHNhbXBsaW5nIHJhdGUgb2YgNjBrSHoKKwkJCSAqLwogCi0JCQkvLyB3ZSBoYXZlIDEgc3RhdGUgd2l0aCBkdXJhdGlvbiAxCisJCQkvKiB3ZSBoYXZlIDEgc3RhdGUgd2l0aCBkdXJhdGlvbiAxICovCiAJCQlzdGVwcyA9IHN0ZXBzIC0gMTsKIAotCQkJLy8gZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMV0gPQotCQkJCXN0ZXBzIC8gMjsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDFdID0gMDsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAxXSA9Ci0JCQkJMHhGRiAmIHJuZ21hc2s7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMV0gPSAwOworCQkJLyogZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5ICovCisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSsxXSA9IHN0ZXBzIC8gMjsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMV0gPSAwOworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMV0gPSAweEZGICYgcm5nbWFzazsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzFdID0gMDsKIAotCQkJLy8gYW5kIHRoZSBzZWNvbmQgcGFydAotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDJdID0KLQkJCQlzdGVwcyAtIHN0ZXBzIC8gMjsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDJdID0gMDsKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAyXSA9Ci0JCQkJMHhGRiAmIHJuZ21hc2s7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMl0gPSAwOworCQkJLyogYW5kIHRoZSBzZWNvbmQgcGFydCAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMl0gPSBzdGVwcyAtIHN0ZXBzIC8gMjsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMl0gPSAwOworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMl0gPSAweEZGICYgcm5nbWFzazsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzJdID0gMDsKIAotCQkJLy8gZ2V0IHRoZSBkYXRhIGFuZCBicmFuY2ggYmFjawotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDNdID0gMHgwOTsJLy8gYnJhbmNoIGJhY2sgdG8gc3RhdGUgMQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgM10gPSAweDAzOwkvLyBkZWNlaXNpb24gc3RhdGUgdyBkYXRhCi0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgM10gPQotCQkJCTB4RkYgJiBybmdtYXNrOwotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDNdID0gMHhGRjsJLy8gZG9lc24ndCBtYXR0ZXIKKwkJCS8qIGdldCB0aGUgZGF0YSBhbmQgYnJhbmNoIGJhY2sgKi8KKworCQkJLyogYnJhbmNoIGJhY2sgdG8gc3RhdGUgMSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrM10gPSAweDA5OworCQkJLyogZGVjZWlzaW9uIHN0YXRlIHcgZGF0YSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSszXSA9IDB4MDM7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSszXSA9IDB4RkYgJiBybmdtYXNrOworCQkJLyogZG9lc24ndCBtYXR0ZXIgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzNdID0gMHhGRjsKIAkJfQogCQlicmVhazsKIAogCWNhc2UgMjoKLQkJLy8gdHdvIGNoYW5uZWxzCi0JCS8vIGNvbW1pdCBkYXRhIHRvIHRoZSBGSUZPCisJCS8qCisJCSAqIHR3byBjaGFubmVscworCQkgKiBjb21taXQgZGF0YSB0byB0aGUgRklGTworCQkgKi8KKwogCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSkgPiAwKQogCQkJcm5nbWFzayA9IDB4ZmYgLSAweDA0OwogCQllbHNlCiAJCQlybmdtYXNrID0gMHhmZjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDBdID0gMTsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMF0gPSAweDAyOwkvLyBkYXRhCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAwXSA9IDB4RkYgJiBybmdtYXNrOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMF0gPSAwOwogCi0JCS8vIHdlIGhhdmUgMSBzdGF0ZSB3aXRoIGR1cmF0aW9uIDE6IHN0YXRlIDAKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMF0gPSAxOworCQkvKiBkYXRhICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMF0gPSAweDAyOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSswXSA9IDB4RkYgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSswXSA9IDA7CisKKwkJLyogd2UgaGF2ZSAxIHN0YXRlIHdpdGggZHVyYXRpb24gMTogc3RhdGUgMCAqLwogCQlzdGVwc190bXAgPSBzdGVwcyAtIDE7CiAKIAkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMV0pID4gMCkKIAkJCXJuZ21hc2sgPSAweGZmIC0gMHgwNDsKIAkJZWxzZQogCQkJcm5nbWFzayA9IDB4ZmY7Ci0JCS8vIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMV0gPSBzdGVwc190bXAgLyAyOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAxXSA9IDA7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAxXSA9IDB4RkUgJiBybmdtYXNrOwkvL2NvdW50Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAxXSA9IDA7CiAKLQkJLy8gYW5kIHRoZSBzZWNvbmQgcGFydAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMl0gPQotCQkJc3RlcHNfdG1wIC0gc3RlcHNfdG1wIC8gMjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMl0gPSAwOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMl0gPSAweEZGICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDJdID0gMDsKKwkJLyogZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzFdID0gc3RlcHNfdG1wIC8gMjsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSsxXSA9IDA7CisJCS8qIGNvdW50ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzFdID0gMHhGRSAmIHJuZ21hc2s7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzFdID0gMDsKIAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgM10gPSAxOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAzXSA9IDB4MDI7CS8vIGRhdGEKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDNdID0gMHhGRiAmIHJuZ21hc2s7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAzXSA9IDA7CisJCS8qIGFuZCB0aGUgc2Vjb25kIHBhcnQgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMl0gPSBzdGVwc190bXAgLSBzdGVwc190bXAgLyAyOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzJdID0gMDsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMl0gPSAweEZGICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMl0gPSAwOwogCi0JCS8vIHdlIGhhdmUgMiBzdGF0ZXMgd2l0aCBkdXJhdGlvbiAxOiBzdGVwIDYgYW5kIHRoZSBJRExFIHN0YXRlCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzNdID0gMTsKKwkJLyogZGF0YSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzNdID0gMHgwMjsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrM10gPSAweEZGICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrM10gPSAwOworCisJCS8qCisJCSAqIHdlIGhhdmUgMiBzdGF0ZXMgd2l0aCBkdXJhdGlvbiAxOiBzdGVwIDYgYW5kCisJCSAqIHRoZSBJRExFIHN0YXRlCisJCSAqLwogCQlzdGVwc190bXAgPSBzdGVwcyAtIDI7CiAKIAkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pID4gMCkKIAkJCXJuZ21hc2sgPSAweGZmIC0gMHgwNDsKIAkJZWxzZQogCQkJcm5nbWFzayA9IDB4ZmY7Ci0JCS8vIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNF0gPSBzdGVwc190bXAgLyAyOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA0XSA9IDA7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA0XSA9ICgweEZGIC0gMHgwMikgJiBybmdtYXNrOwkvL3Jlc2V0Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyA0XSA9IDA7CiAKLQkJLy8gYW5kIHRoZSBzZWNvbmQgcGFydAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNV0gPQotCQkJc3RlcHNfdG1wIC0gc3RlcHNfdG1wIC8gMjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgNV0gPSAwOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgNV0gPSAweEZGICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDVdID0gMDsKKwkJLyogZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzRdID0gc3RlcHNfdG1wIC8gMjsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSs0XSA9IDA7CisJCS8qIHJlc2V0ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzRdID0gKDB4RkYgLSAweDAyKSAmIHJuZ21hc2s7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzRdID0gMDsKIAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNl0gPSAxOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA2XSA9IDA7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA2XSA9IDB4RkYgJiBybmdtYXNrOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgNl0gPSAwOworCQkvKiBhbmQgdGhlIHNlY29uZCBwYXJ0ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzVdID0gc3RlcHNfdG1wIC0gc3RlcHNfdG1wIC8gMjsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSs1XSA9IDA7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzVdID0gMHhGRiAmIHJuZ21hc2s7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzVdID0gMDsKKworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSs2XSA9IDE7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrNl0gPSAwOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs2XSA9IDB4RkYgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSs2XSA9IDA7CiAJCWJyZWFrOwogCiAJY2FzZSAzOgotCQkvLyB0aHJlZSBjaGFubmVscworCQkvKgorCQkgKiB0aHJlZSBjaGFubmVscworCQkgKi8KIAkJZm9yIChqID0gMDsgaiA8IDE7IGorKykgewogCQkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3Rbal0pID4gMCkKIAkJCQlybmdtYXNrID0gMHhmZiAtIDB4MDQ7CiAJCQllbHNlCiAJCQkJcm5nbWFzayA9IDB4ZmY7Ci0JCQkvLyBjb21taXQgZGF0YSB0byB0aGUgRklGTyBhbmQgZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgaiAqIDJdID0KLQkJCQlzdGVwcyAvIDI7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyBqICogMl0gPSAweDAyOwkvLyBkYXRhCi0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgaiAqIDJdID0gMHhGRiAmIHJuZ21hc2s7CS8vIG5vIGNoYW5nZQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIGogKiAyXSA9IDA7CisJCQkvKgorCQkJICogY29tbWl0IGRhdGEgdG8gdGhlIEZJRk8gYW5kIGRvIHRoZSBmaXJzdCBwYXJ0CisJCQkgKiBvZiB0aGUgZGVsYXkKKwkJCSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UraioyXSA9IHN0ZXBzIC8gMjsKKwkJCS8qIGRhdGEgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UraioyXSA9IDB4MDI7CisJCQkvKiBubyBjaGFuZ2UgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFK2oqMl0gPSAweEZGICYgcm5nbWFzazsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFK2oqMl0gPSAwOwogCiAJCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFtqICsgMV0pID4gMCkKIAkJCQlybmdtYXNrID0gMHhmZiAtIDB4MDQ7CiAJCQllbHNlCiAJCQkJcm5nbWFzayA9IDB4ZmY7Ci0JCQkvLyBkbyB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIGRlbGF5Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgaiAqIDIgKyAxXSA9Ci0JCQkJc3RlcHMgLSBzdGVwcyAvIDI7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyBqICogMiArIDFdID0gMDsJLy8gbm8gZGF0YQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIGogKiAyICsgMV0gPSAweEZFICYgcm5nbWFzazsJLy9jb3VudAotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIGogKiAyICsgMV0gPQotCQkJCTA7CisKKwkJCS8qIGRvIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgZGVsYXkgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFK2oqMisxXSA9IHN0ZXBzIC0gc3RlcHMgLyAyOworCQkJLyogbm8gZGF0YSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRStqKjIrMV0gPSAwOworCQkJLyogY291bnQgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFK2oqMisxXSA9IDB4RkUgJiBybmdtYXNrOworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UraioyKzFdID0gMDsKIAkJfQogCi0JCS8vIDIgc3RlcHMgd2l0aCBkdXJhdGlvbiAxOiB0aGUgaWRlbGUgc3RlcCBhbmQgc3RlcCA2OgorCQkvKiAyIHN0ZXBzIHdpdGggZHVyYXRpb24gMTogdGhlIGlkZWxlIHN0ZXAgYW5kIHN0ZXAgNjogKi8KIAkJc3RlcHNfdG1wID0gc3RlcHMgLSAyOwotCQkvLyBjb21taXQgZGF0YSB0byB0aGUgRklGTyBhbmQgZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyA0XSA9IHN0ZXBzX3RtcCAvIDI7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDRdID0gMHgwMjsJLy8gZGF0YQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgNF0gPSAweEZGICYgcm5nbWFzazsJLy8gbm8gY2hhbmdlCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyA0XSA9IDA7CisKKwkJLyogY29tbWl0IGRhdGEgdG8gdGhlIEZJRk8gYW5kIGRvIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBkZWxheSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSs0XSA9IHN0ZXBzX3RtcCAvIDI7CisJCS8qIGRhdGEgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSs0XSA9IDB4MDI7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzRdID0gMHhGRiAmIHJuZ21hc2s7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzRdID0gMDsKIAogCQlpZiAoQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSkgPiAwKQogCQkJcm5nbWFzayA9IDB4ZmYgLSAweDA0OwogCQllbHNlCiAJCQlybmdtYXNrID0gMHhmZjsKLQkJLy8gZG8gdGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBkZWxheQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNV0gPQotCQkJc3RlcHNfdG1wIC0gc3RlcHNfdG1wIC8gMjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgNV0gPSAwOwkvLyBubyBkYXRhCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA1XSA9ICgweEZGIC0gMHgwMikgJiBybmdtYXNrOwkvLyByZXNldAotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgNV0gPSAwOwogCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyA2XSA9IDE7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDZdID0gMDsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDZdID0gMHhGRiAmIHJuZ21hc2s7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyA2XSA9IDA7CisJCS8qIGRvIHRoZSBzZWNvbmQgcGFydCBvZiB0aGUgZGVsYXkgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrNV0gPSBzdGVwc190bXAgLSBzdGVwc190bXAgLyAyOworCQkvKiBubyBkYXRhICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrNV0gPSAwOworCQkvKiByZXNldCAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs1XSA9ICgweEZGIC0gMHgwMikgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSs1XSA9IDA7CisKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrNl0gPSAxOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzZdID0gMDsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrNl0gPSAweEZGICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrNl0gPSAwOwogCiAJY2FzZSAxNjoKIAkJaWYgKENSX1JBTkdFKGNtZC0+Y2hhbmxpc3RbMF0pID4gMCkKIAkJCXJuZ21hc2sgPSAweGZmIC0gMHgwNDsKIAkJZWxzZQogCQkJcm5nbWFzayA9IDB4ZmY7Ci0JCWlmIChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX0VYVCkgewkvLyB3ZSBsb29wIGhlcmUgdW50aWwgcmVhZHkgaGFzIGJlZW4gc2V0Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMF0gPSAweDAxOwkvLyBicmFuY2ggYmFjayB0byBzdGF0ZSAwCi0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAwXSA9IDB4MDE7CS8vIGRlY2Vpc2lvbiBzdGF0ZSB3L28gZGF0YQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDBdID0gKDB4RkYgLSAweDAyKSAmIHJuZ21hc2s7CS8vIHJlc2V0Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMF0gPSAweDAwOwkvLyBSRFkwID0gMAotCQl9IGVsc2UgewkvLyB3ZSBqdXN0IHByb2NlZWQgdG8gc3RhdGUgMQotCQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDBdID0gMjU1OwkvLyAzMHVzIHJlc2V0IHB1bHNlCi0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAwXSA9IDA7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMF0gPSAoMHhGRiAtIDB4MDIpICYgcm5nbWFzazsJLy8gcmVzZXQKLQkJCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAwXSA9IDA7CisKKwkJaWYgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSB7CisJCQkvKgorCQkJICogd2UgbG9vcCBoZXJlIHVudGlsIHJlYWR5IGhhcyBiZWVuIHNldAorCQkJICovCisKKwkJCS8qIGJyYW5jaCBiYWNrIHRvIHN0YXRlIDAgKi8KKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzBdID0gMHgwMTsKKwkJCS8qIGRlY2Vpc2lvbiBzdGF0ZSB3L28gZGF0YSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09QQkFTRSswXSA9IDB4MDE7CisJCQkvKiByZXNldCAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMF0gPSAoMHhGRi0weDAyKSAmIHJuZ21hc2s7CisJCQkvKiBSRFkwID0gMCAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMF0gPSAweDAwOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIHdlIGp1c3QgcHJvY2VlZCB0byBzdGF0ZSAxCisJCQkgKi8KKworCQkJLyogMzB1cyByZXNldCBwdWxzZSAqLworCQkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMF0gPSAyNTU7CisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzBdID0gMDsKKwkJCS8qIHJlc2V0ICovCisJCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSswXSA9ICgweEZGLTB4MDIpICYgcm5nbWFzazsKKwkJCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzBdID0gMDsKIAkJfQogCi0JCS8vIGNvbW1pdCBkYXRhIHRvIHRoZSBGSUZPCi0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAxXSA9IDE7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDFdID0gMHgwMjsJLy8gZGF0YQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMV0gPSAweEZGICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDFdID0gMDsKKwkJLyogY29tbWl0IGRhdGEgdG8gdGhlIEZJRk8gKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMV0gPSAxOworCQkvKiBkYXRhICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMV0gPSAweDAyOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSsxXSA9IDB4RkYgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSsxXSA9IDA7CiAKLQkJLy8gd2UgaGF2ZSAyIHN0YXRlcyB3aXRoIGR1cmF0aW9uIDEKKwkJLyogd2UgaGF2ZSAyIHN0YXRlcyB3aXRoIGR1cmF0aW9uIDEgKi8KIAkJc3RlcHMgPSBzdGVwcyAtIDI7CiAKLQkJLy8gZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAyXSA9IHN0ZXBzIC8gMjsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1BCQVNFICsgMl0gPSAwOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgMl0gPSAweEZFICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDJdID0gMDsKKwkJLyogZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzJdID0gc3RlcHMgLyAyOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzJdID0gMDsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrMl0gPSAweEZFICYgcm5nbWFzazsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMl0gPSAwOwogCi0JCS8vIGFuZCB0aGUgc2Vjb25kIHBhcnQKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDNdID0KLQkJCXN0ZXBzIC0gc3RlcHMgLyAyOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAzXSA9IDA7Ci0JCXRoaXNfdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAzXSA9IDB4RkYgJiBybmdtYXNrOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgM10gPSAwOworCQkvKiBhbmQgdGhlIHNlY29uZCBwYXJ0ICovCisJCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzNdID0gc3RlcHMgLSBzdGVwcyAvIDI7CisJCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrM10gPSAwOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSszXSA9IDB4RkYgJiBybmdtYXNrOworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTE9HQkFTRSszXSA9IDA7CiAKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDRdID0gMHgwOTsJLy8gYnJhbmNoIGJhY2sgdG8gc3RhdGUgMQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA0XSA9IDB4MDE7CS8vIGRlY2Vpc2lvbiBzdGF0ZSB3L28gZGF0YQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPVVRCQVNFICsgNF0gPSAweEZGICYgcm5nbWFzazsKLQkJdGhpc191c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTE9HQkFTRSArIDRdID0gMHhGRjsJLy8gZG9lc24ndCBtYXR0ZXIKKwkJLyogYnJhbmNoIGJhY2sgdG8gc3RhdGUgMSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSs0XSA9IDB4MDk7CisJCS8qIGRlY2Vpc2lvbiBzdGF0ZSB3L28gZGF0YSAqLworCQl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzRdID0gMHgwMTsKKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW09VVEJBU0UrNF0gPSAweEZGICYgcm5nbWFzazsKKwkJLyogZG9lc24ndCBtYXR0ZXIgKi8KKwkJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrNF0gPSAweEZGOwogCiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKCJjb21lZGkgJWQ6IHVuc3VwcG9ydGVkIGNvbWJpbmF0aW9uIG9mIGNoYW5uZWxzXG4iLAotCQkJZGV2LT5taW5vcik7Ci0JCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpICVkOiB1bnN1cHBvcnRlZCBjb21iaW5hdGlvbiBvZiAiCisJCSAgICAgICAiY2hhbm5lbHNcbiIsIGRldi0+bWlub3IpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpICVkOiBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSB1c2IgZGV2aWNlXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpICVkOiBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSB1c2IgZGV2aWNlXG4iLAorCSAgICAgICBkZXYtPm1pbm9yKTsKICNlbmRpZgotCS8vIDAgbWVhbnMgdGhhdCB0aGUgQUQgY29tbWFuZHMgYXJlIHNlbnQKLQlyZXN1bHQgPSBzZW5kX2R1eF9jb21tYW5kcyh0aGlzX3VzYmR1eGZhc3RzdWIsIFNFTkRBRENPTU1BTkRTKTsKKwkvKiAwIG1lYW5zIHRoYXQgdGhlIEFEIGNvbW1hbmRzIGFyZSBzZW50ICovCisJcmVzdWx0ID0gc2VuZF9kdXhfY29tbWFuZHModWRmcywgU0VOREFEQ09NTUFORFMpOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IGFkYyBjb21tYW5kIGNvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuIEFib3J0aW5nLi4uXG4iLCBkZXYtPm1pbm9yKTsKLQkJdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogYWRjIGNvbW1hbmQgY291bGQgbm90IGJlIHN1Ym1pdHRlZC4iCisJCSAgICAgICAiQWJvcnRpbmcuLi5cbiIsIGRldi0+bWlub3IpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CiAJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgewotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX3NhbXBsZV9jb3VudCA9Ci0JCQkoY21kLT5zdG9wX2FyZykgKiAoY21kLT5zY2FuX2VuZF9hcmcpOwotCQlpZiAodXNiZHV4ZmFzdHN1Yi0+YWlfc2FtcGxlX2NvdW50IDwgMSkgewotCQkJcHJpbnRrKCJjb21lZGklZDogKGNtZC0+c3RvcF9hcmcpKihjbWQtPnNjYW5fZW5kX2FyZyk8MSwgYWJvcnRpbmcuXG4iLCBkZXYtPm1pbm9yKTsKLQkJCXVwKCZ0aGlzX3VzYmR1eGZhc3RzdWItPnNlbSk7CisJCXVkZnMtPmFpX3NhbXBsZV9jb3VudCA9CWNtZC0+c3RvcF9hcmcgKiBjbWQtPnNjYW5fZW5kX2FyZzsKKwkJaWYgKHVkZnMtPmFpX3NhbXBsZV9jb3VudCA8IDEpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6ICIKKwkJCSAgICAgICAiKGNtZC0+c3RvcF9hcmcpKihjbWQtPnNjYW5fZW5kX2FyZyk8MSwgIgorCQkJICAgICAgICJhYm9ydGluZy5cbiIsIGRldi0+bWlub3IpOworCQkJdXAoJnVkZnMtPnNlbSk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NvbnRpbm91cyA9IDA7CisJCXVkZnMtPmFpX2NvbnRpbm91cyA9IDA7CiAJfSBlbHNlIHsKLQkJLy8gY29udGlub3VzIGFxdWlzaXRpb24KLQkJdGhpc191c2JkdXhmYXN0c3ViLT5haV9jb250aW5vdXMgPSAxOwotCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX3NhbXBsZV9jb3VudCA9IDA7CisJCS8qIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCisJCXVkZnMtPmFpX2NvbnRpbm91cyA9IDE7CisJCXVkZnMtPmFpX3NhbXBsZV9jb3VudCA9IDA7CiAJfQogCiAJaWYgKChjbWQtPnN0YXJ0X3NyYyA9PSBUUklHX05PVykgfHwgKGNtZC0+c3RhcnRfc3JjID09IFRSSUdfRVhUKSkgewotCQkvLyBlbmFibGUgdGhpcyBhY3F1aXNpdGlvbiBvcGVyYXRpb24KLQkJdGhpc191c2JkdXhmYXN0c3ViLT5haV9jbWRfcnVubmluZyA9IDE7Ci0JCXJldCA9IHVzYmR1eGZhc3RzdWJfc3VibWl0X0luVVJCcyh0aGlzX3VzYmR1eGZhc3RzdWIpOworCQkvKiBlbmFibGUgdGhpcyBhY3F1aXNpdGlvbiBvcGVyYXRpb24gKi8KKwkJdWRmcy0+YWlfY21kX3J1bm5pbmcgPSAxOworCQlyZXQgPSB1c2JkdXhmYXN0c3ViX3N1Ym1pdF9JblVSQnModWRmcyk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQl0aGlzX3VzYmR1eGZhc3RzdWItPmFpX2NtZF9ydW5uaW5nID0gMDsKLQkJCS8vIGZpeG1lOiB1bmxpbmsgaGVyZT8/Ci0JCQl1cCgmdGhpc191c2JkdXhmYXN0c3ViLT5zZW0pOworCQkJdWRmcy0+YWlfY21kX3J1bm5pbmcgPSAwOworCQkJLyogZml4bWU6IHVubGluayBoZXJlPz8gKi8KKwkJCXVwKCZ1ZGZzLT5zZW0pOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCQlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CiAJfSBlbHNlIHsKLQkJLyogVFJJR19JTlQgKi8KLQkJLy8gZG9uJ3QgZW5hYmxlIHRoZSBhY3F1aXNpb24gb3BlcmF0aW9uCi0JCS8vIHdhaXQgZm9yIGFuIGludGVybmFsIHNpZ25hbAorCQkvKgorCQkgKiBUUklHX0lOVAorCQkgKiBkb24ndCBlbmFibGUgdGhlIGFjcXVpc2lvbiBvcGVyYXRpb24KKwkJICogd2FpdCBmb3IgYW4gaW50ZXJuYWwgc2lnbmFsCisJCSAqLwogCQlzLT5hc3luYy0+aW50dHJpZyA9IHVzYmR1eGZhc3RfYWlfaW50dHJpZzsKIAl9Ci0JdXAoJnRoaXNfdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwl1cCgmdWRmcy0+c2VtKTsKIAogCXJldHVybiAwOwogfQogCi0vKiBNb2RlIDAgaXMgdXNlZCB0byBnZXQgYSBzaW5nbGUgY29udmVyc2lvbiBvbiBkZW1hbmQgKi8KLXN0YXRpYyBpbnQgdXNiZHV4ZmFzdF9haV9pbnNuX3JlYWQoY29tZWRpX2RldmljZSAqIGRldiwKLQljb21lZGlfc3ViZGV2aWNlICogcywgY29tZWRpX2luc24gKiBpbnNuLCBsc2FtcGxfdCAqIGRhdGEpCisvKgorICogTW9kZSAwIGlzIHVzZWQgdG8gZ2V0IGEgc2luZ2xlIGNvbnZlcnNpb24gb24gZGVtYW5kLgorICovCitzdGF0aWMgaW50IHVzYmR1eGZhc3RfYWlfaW5zbl9yZWFkKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbiwgdW5zaWduZWQgaW50ICpkYXRhKQogewogCWludCBpLCBqLCBuLCBhY3R1YWxfbGVuZ3RoOwogCWludCBjaGFuLCByYW5nZSwgcm5nbWFzazsKIAlpbnQgZXJyOwotCXVzYmR1eGZhc3RzdWJfdCAqdXNiZHV4ZmFzdHN1YiA9IGRldi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzOwogCi0JaWYgKCF1c2JkdXhmYXN0c3ViKSB7Ci0JCXByaW50aygiY29tZWRpJWQ6IGFpX2luc25fcmVhZDogbm8gdXNiIGRldi5cbiIsIGRldi0+bWlub3IpOworCXVkZnMgPSBkZXYtPnByaXZhdGU7CisJaWYgKCF1ZGZzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGFpX2luc25fcmVhZDogbm8gdXNiIGRldi5cbiIsCisJCSAgICAgICBkZXYtPm1pbm9yKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaSVkOiBhaV9pbnNuX3JlYWQsIGluc24tPm49JWQsIGluc24tPnN1YmRldj0lZFxuIiwKLQkJZGV2LT5taW5vciwgaW5zbi0+biwgaW5zbi0+c3ViZGV2KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6IGFpX2luc25fcmVhZCwgaW5zbi0+bj0lZCwgIgorCSAgICAgICAiaW5zbi0+c3ViZGV2PSVkXG4iLCBkZXYtPm1pbm9yLCBpbnNuLT5uLCBpbnNuLT5zdWJkZXYpOwogI2VuZGlmCi0JZG93bigmdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKLQlpZiAoISh1c2JkdXhmYXN0c3ViLT5wcm9iZWQpKSB7Ci0JCXVwKCZ1c2JkdXhmYXN0c3ViLT5zZW0pOworCWRvd24oJnVkZnMtPnNlbSk7CisJaWYgKCF1ZGZzLT5wcm9iZWQpIHsKKwkJdXAoJnVkZnMtPnNlbSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQlpZiAodXNiZHV4ZmFzdHN1Yi0+YWlfY21kX3J1bm5pbmcpIHsKLQkJcHJpbnRrKCJjb21lZGklZDogYWlfaW5zbl9yZWFkIG5vdCBwb3NzaWJsZS4gQXN5bmMgQ29tbWFuZCBpcyBydW5uaW5nLlxuIiwgZGV2LT5taW5vcik7Ci0JCXVwKCZ1c2JkdXhmYXN0c3ViLT5zZW0pOworCWlmICh1ZGZzLT5haV9jbWRfcnVubmluZykgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaSVkOiBhaV9pbnNuX3JlYWQgbm90IHBvc3NpYmxlLiBBc3luYyAiCisJCSAgICAgICAiQ29tbWFuZCBpcyBydW5uaW5nLlxuIiwgZGV2LT5taW5vcik7CisJCXVwKCZ1ZGZzLT5zZW0pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQkvLyBzYW1wbGUgb25lIGNoYW5uZWwKKwkvKiBzYW1wbGUgb25lIGNoYW5uZWwgKi8KIAljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7Ci0JLy8gc2V0IGNvbW1hbmQgZm9yIHRoZSBmaXJzdCBjaGFubmVsCisJLyogc2V0IGNvbW1hbmQgZm9yIHRoZSBmaXJzdCBjaGFubmVsICovCiAKIAlpZiAocmFuZ2UgPiAwKQogCQlybmdtYXNrID0gMHhmZiAtIDB4MDQ7CiAJZWxzZQogCQlybmdtYXNrID0gMHhmZjsKLQkvLyBjb21taXQgZGF0YSB0byB0aGUgRklGTwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgMF0gPSAxOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAwXSA9IDB4MDI7CS8vIGRhdGEKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDBdID0gMHhGRiAmIHJuZ21hc2s7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAwXSA9IDA7CiAKLQkvLyBkbyB0aGUgZmlyc3QgcGFydCBvZiB0aGUgZGVsYXkKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbTEVOQkFTRSArIDFdID0gMTI7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDFdID0gMDsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDFdID0gMHhGRSAmIHJuZ21hc2s7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAxXSA9IDA7CisJLyogY29tbWl0IGRhdGEgdG8gdGhlIEZJRk8gKi8KKwl1ZGZzLT5kdXhfY29tbWFuZHNbTEVOQkFTRSswXSA9IDE7CisJLyogZGF0YSAqLworCXVkZnMtPmR1eF9jb21tYW5kc1tPUEJBU0UrMF0gPSAweDAyOworCXVkZnMtPmR1eF9jb21tYW5kc1tPVVRCQVNFKzBdID0gMHhGRiAmIHJuZ21hc2s7CisJdWRmcy0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UrMF0gPSAwOwogCi0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyAyXSA9IDE7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09QQkFTRSArIDJdID0gMDsKLQl1c2JkdXhmYXN0c3ViLT5kdXhfY29tbWFuZHNbT1VUQkFTRSArIDJdID0gMHhGRSAmIHJuZ21hc2s7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xPR0JBU0UgKyAyXSA9IDA7CisJLyogZG8gdGhlIGZpcnN0IHBhcnQgb2YgdGhlIGRlbGF5ICovCisJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrMV0gPSAxMjsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzFdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSsxXSA9IDB4RkUgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzFdID0gMDsKIAotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgM10gPSAxOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyAzXSA9IDA7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyAzXSA9IDB4RkUgJiBybmdtYXNrOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgM10gPSAwOworCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzJdID0gMTsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzJdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSsyXSA9IDB4RkUgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzJdID0gMDsKIAotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNF0gPSAxOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA0XSA9IDA7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA0XSA9IDB4RkUgJiBybmdtYXNrOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgNF0gPSAwOworCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzNdID0gMTsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzNdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSszXSA9IDB4RkUgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzNdID0gMDsKIAotCS8vIHNlY29uZCBwYXJ0Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UgKyA1XSA9IDEyOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA1XSA9IDA7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA1XSA9IDB4RkYgJiBybmdtYXNrOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgNV0gPSAwOworCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzRdID0gMTsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzRdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs0XSA9IDB4RkUgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzRdID0gMDsKIAotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMRU5CQVNFICsgNl0gPSAxOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tPUEJBU0UgKyA2XSA9IDA7Ci0JdXNiZHV4ZmFzdHN1Yi0+ZHV4X2NvbW1hbmRzW09VVEJBU0UgKyA2XSA9IDB4RkYgJiBybmdtYXNrOwotCXVzYmR1eGZhc3RzdWItPmR1eF9jb21tYW5kc1tMT0dCQVNFICsgMF0gPSAwOworCS8qIHNlY29uZCBwYXJ0ICovCisJdWRmcy0+ZHV4X2NvbW1hbmRzW0xFTkJBU0UrNV0gPSAxMjsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzVdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs1XSA9IDB4RkYgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzVdID0gMDsKKworCXVkZnMtPmR1eF9jb21tYW5kc1tMRU5CQVNFKzZdID0gMTsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1BCQVNFKzZdID0gMDsKKwl1ZGZzLT5kdXhfY29tbWFuZHNbT1VUQkFTRSs2XSA9IDB4RkYgJiBybmdtYXNrOworCXVkZnMtPmR1eF9jb21tYW5kc1tMT0dCQVNFKzBdID0gMDsKIAogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaSAlZDogc2VuZGluZyBjb21tYW5kcyB0byB0aGUgdXNiIGRldmljZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSAlZDogc2VuZGluZyBjb21tYW5kcyB0byB0aGUgdXNiIGRldmljZVxuIiwKKwkgICAgICAgZGV2LT5taW5vcik7CiAjZW5kaWYKLQkvLyAwIG1lYW5zIHRoYXQgdGhlIEFEIGNvbW1hbmRzIGFyZSBzZW50Ci0JZXJyID0gc2VuZF9kdXhfY29tbWFuZHModXNiZHV4ZmFzdHN1YiwgU0VOREFEQ09NTUFORFMpOworCS8qIDAgbWVhbnMgdGhhdCB0aGUgQUQgY29tbWFuZHMgYXJlIHNlbnQgKi8KKwllcnIgPSBzZW5kX2R1eF9jb21tYW5kcyh1ZGZzLCBTRU5EQURDT01NQU5EUyk7CiAJaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGklZDogYWRjIGNvbW1hbmQgY291bGQgbm90IGJlIHN1Ym1pdHRlZC4gQWJvcnRpbmcuLi5cbiIsIGRldi0+bWlub3IpOwotCQl1cCgmdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogYWRjIGNvbW1hbmQgY291bGQgbm90IGJlIHN1Ym1pdHRlZC4iCisJCSAgICAgICAiQWJvcnRpbmcuLi5cbiIsIGRldi0+bWlub3IpOworCQl1cCgmdWRmcy0+c2VtKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IHN1Ym1pdHRpbmcgaW4tdXJiOiAleCwleFxuIiwKLQkJdXNiZHV4ZmFzdHN1Yi0+Y29tZWRpZGV2LT5taW5vciwKLQkJKGludCkodXNiZHV4ZmFzdHN1Yi0+dXJiSW4tPmNvbnRleHQpLAotCQkoaW50KSh1c2JkdXhmYXN0c3ViLT51cmJJbi0+ZGV2KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBzdWJtaXR0aW5nIGluLXVyYjogIgorCSAgICAgICAiMHglcCwweCVwXG4iLCB1ZGZzLT5jb21lZGlkZXYtPm1pbm9yLCB1ZGZzLT51cmJJbi0+Y29udGV4dCwKKwkgICAgICAgdWRmcy0+dXJiSW4tPmRldik7CiAjZW5kaWYKIAlmb3IgKGkgPSAwOyBpIDwgUEFDS0VUU19UT19JR05PUkU7IGkrKykgewotCQllcnIgPSB1c2JfYnVsa19tc2codXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJCSAgIHVzYl9yY3ZidWxrcGlwZSh1c2JkdXhmYXN0c3ViLT51c2JkZXYsCi0JCQkJCQkgICBCVUxLSU5FUCksCi0JCQkJICAgdXNiZHV4ZmFzdHN1Yi0+dHJhbnNmZXJfYnVmZmVyLCBTSVpFSU5CVUYsCisJCWVyciA9IHVzYl9idWxrX21zZyh1ZGZzLT51c2JkZXYsCisJCQkJICAgdXNiX3JjdmJ1bGtwaXBlKHVkZnMtPnVzYmRldiwgQlVMS0lORVApLAorCQkJCSAgIHVkZnMtPnRyYW5zZmVyX2J1ZmZlciwgU0laRUlOQlVGLAogCQkJCSAgICZhY3R1YWxfbGVuZ3RoLCAxMDAwMCk7CiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlwcmludGsoImNvbWVkaSVkOiBpbnNuIHRpbWVvdXQuIE5vIGRhdGEuXG4iLAorCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogaW5zbiB0aW1lb3V0LiBObyBkYXRhLlxuIiwKIAkJCQlkZXYtPm1pbm9yKTsKLQkJCXVwKCZ1c2JkdXhmYXN0c3ViLT5zZW0pOworCQkJdXAoJnVkZnMtPnNlbSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQotCS8vIGRhdGEgcG9pbnRzCisJLyogZGF0YSBwb2ludHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjspIHsKLQkJZXJyID0gdXNiX2J1bGtfbXNnKHVzYmR1eGZhc3RzdWItPnVzYmRldiwKLQkJCQkgICB1c2JfcmN2YnVsa3BpcGUodXNiZHV4ZmFzdHN1Yi0+dXNiZGV2LAotCQkJCQkJICAgQlVMS0lORVApLAotCQkJCSAgIHVzYmR1eGZhc3RzdWItPnRyYW5zZmVyX2J1ZmZlciwgU0laRUlOQlVGLAorCQllcnIgPSB1c2JfYnVsa19tc2codWRmcy0+dXNiZGV2LAorCQkJCSAgIHVzYl9yY3ZidWxrcGlwZSh1ZGZzLT51c2JkZXYsIEJVTEtJTkVQKSwKKwkJCQkgICB1ZGZzLT50cmFuc2Zlcl9idWZmZXIsIFNJWkVJTkJVRiwKIAkJCQkgICAmYWN0dWFsX2xlbmd0aCwgMTAwMDApOwogCQlpZiAoZXJyIDwgMCkgewotCQkJcHJpbnRrKCJjb21lZGklZDogaW5zbiBkYXRhIGVycm9yOiAlZFxuIiwKKwkJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IGluc24gZGF0YSBlcnJvcjogJWRcbiIsCiAJCQkJZGV2LT5taW5vciwgZXJyKTsKLQkJCXVwKCZ1c2JkdXhmYXN0c3ViLT5zZW0pOworCQkJdXAoJnVkZnMtPnNlbSk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCW4gPSBhY3R1YWxfbGVuZ3RoIC8gc2l6ZW9mKHVpbnQxNl90KTsKIAkJaWYgKChuICUgMTYpICE9IDApIHsKLQkJCXByaW50aygiY29tZWRpJWQ6IGluc24gZGF0YSBwYWNrZXQgY29ycnVwdGVkLlxuIiwKLQkJCQlkZXYtPm1pbm9yKTsKLQkJCXVwKCZ1c2JkdXhmYXN0c3ViLT5zZW0pOworCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogaW5zbiBkYXRhIHBhY2tldCAiCisJCQkgICAgICAgImNvcnJ1cHRlZC5cbiIsIGRldi0+bWlub3IpOworCQkJdXAoJnVkZnMtPnNlbSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlmb3IgKGogPSBjaGFuOyAoaiA8IG4pICYmIChpIDwgaW5zbi0+bik7IGogPSBqICsgMTYpIHsKLQkJCWRhdGFbaV0gPQotCQkJCSgodWludDE2X3QgKikgKHVzYmR1eGZhc3RzdWItPgotCQkJCQl0cmFuc2Zlcl9idWZmZXIpKVtqXTsKKwkJCWRhdGFbaV0gPSAoKHVpbnQxNl90ICopICh1ZGZzLT50cmFuc2Zlcl9idWZmZXIpKVtqXTsKIAkJCWkrKzsKIAkJfQogCX0KLQl1cCgmdXNiZHV4ZmFzdHN1Yi0+c2VtKTsKKwl1cCgmdWRmcy0+c2VtKTsKIAlyZXR1cm4gaTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGhleDJ1bnNpZ25lZChjaGFyICpoKQogewogCXVuc2lnbmVkIGhpLCBsbzsKLQlpZiAoaFswXSA+ICc5JykgeworCisJaWYgKGhbMF0gPiAnOScpCiAJCWhpID0gaFswXSAtICdBJyArIDB4MGE7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWhpID0gaFswXSAtICcwJzsKLQl9Ci0JaWYgKGhbMV0gPiAnOScpIHsKKworCWlmIChoWzFdID4gJzknKQogCQlsbyA9IGhbMV0gLSAnQScgKyAweDBhOwotCX0gZWxzZSB7CisJZWxzZQogCQlsbyA9IGhbMV0gLSAnMCc7Ci0JfQorCiAJcmV0dXJuIGhpICogMHgxMCArIGxvOwogfQogCi0vLyBmb3IgRlgyCisvKiBmb3IgRlgyICovCiAjZGVmaW5lIEZJUk1XQVJFX01BWF9MRU4gMHgyMDAwCiAKLS8vIHRha2VuIGZyb20gRGF2aWQgQnJvd25lbGwncyBmeGxvYWQgYW5kIGFkanVzdGVkIGZvciB0aGlzIGRyaXZlcgotc3RhdGljIGludCByZWFkX2Zpcm13YXJlKHVzYmR1eGZhc3RzdWJfdCAqIHVzYmR1eGZhc3RzdWIsIHZvaWQgKmZpcm13YXJlUHRyLAotCWxvbmcgc2l6ZSkKKy8qCisgKiB0YWtlbiBmcm9tIERhdmlkIEJyb3duZWxsJ3MgZnhsb2FkIGFuZCBhZGp1c3RlZCBmb3IgdGhpcyBkcml2ZXIKKyAqLworc3RhdGljIGludCByZWFkX2Zpcm13YXJlKHN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMsIGNvbnN0IHZvaWQgKmZpcm13YXJlUHRyLAorCQkJIGxvbmcgc2l6ZSkKIHsKIAlpbnQgaSA9IDA7CiAJdW5zaWduZWQgY2hhciAqZnAgPSAoY2hhciAqKWZpcm13YXJlUHRyOwotCXVuc2lnbmVkIGNoYXIgKmZpcm13YXJlQmluYXJ5ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICpmaXJtd2FyZUJpbmFyeTsKIAlpbnQgcmVzID0gMDsKIAlpbnQgbWF4QWRkciA9IDA7CiAKIAlmaXJtd2FyZUJpbmFyeSA9IGttYWxsb2MoRklSTVdBUkVfTUFYX0xFTiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaXJtd2FyZUJpbmFyeSkgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IG1lbSBhbGxvYyBmb3IgZmlybXdhcmUgZmFpbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBtZW0gYWxsb2MgZm9yIGZpcm13YXJlICIKKwkJICAgICAgICIgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xMzE1LDMxICsxNDExLDM3IEBACiAJCWludCBpZHgsIG9mZjsKIAkJaW50IGogPSAwOwogCi0JCS8vIGdldCBvbmUgbGluZQorCQkvKiBnZXQgb25lIGxpbmUgKi8KIAkJd2hpbGUgKChpIDwgc2l6ZSkgJiYgKGZwW2ldICE9IDEzKSAmJiAoZnBbaV0gIT0gMTApKSB7CiAJCQlidWZbal0gPSBmcFtpXTsKIAkJCWkrKzsKIAkJCWorKzsKIAkJCWlmIChqID49IHNpemVvZihidWYpKSB7Ci0JCQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBib2d1cyBmaXJtd2FyZSBmaWxlIVxuIik7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBib2d1cyAiCisJCQkJICAgICAgICJmaXJtd2FyZSBmaWxlIVxuIik7CisJCQkJa2ZyZWUoZmlybXdhcmVCaW5hcnkpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJfQotCQkvLyBnZXQgcmlkIG9mIExGL0NSLy4uLgorCQkvKiBnZXQgcmlkIG9mIExGL0NSLy4uLiAqLwogCQl3aGlsZSAoKGkgPCBzaXplKSAmJiAoKGZwW2ldID09IDEzKSB8fCAoZnBbaV0gPT0gMTApCi0JCQkJfHwgKGZwW2ldID09IDApKSkgeworCQkJCQl8fCAoZnBbaV0gPT0gMCkpKQogCQkJaSsrOwotCQl9CiAKIAkJYnVmW2pdID0gMDsKLQkJLy9wcmludGsoImNvbWVkaV86IGJ1Zj0lc1xuIixidWYpOworCQkvKiBwcmludGsoImNvbWVkaV86IGJ1Zj0lc1xuIixidWYpOyAqLwogCi0JCS8qIEVYVEVOU0lPTjogIiMgY29tbWVudC10aWxsLWVuZC1vZi1saW5lIiwgZm9yIGNvcHlyaWdodHMgZXRjICovCisJCS8qCisJCSAqIEVYVEVOU0lPTjogIiMgY29tbWVudC10aWxsLWVuZC1vZi1saW5lIiwKKwkJICogZm9yIGNvcHlyaWdodHMgZXRjCisJCSAqLwogCQlpZiAoYnVmWzBdID09ICcjJykKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChidWZbMF0gIT0gJzonKSB7Ci0JCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IHVwbG9hZDogbm90IGFuIGloZXggcmVjb3JkOiAlcyIsIGJ1Zik7CisJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IHVwbG9hZDogbm90IGFuICIKKwkJCSAgICAgICAiaWhleCByZWNvcmQ6ICVzIiwgYnVmKTsKKwkJCWtmcmVlKGZpcm13YXJlQmluYXJ5KTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAKQEAgLTEzNDksMjY2ICsxNDUxLDMwOSBAQAogCQkvKiBSZWFkIHRoZSB0YXJnZXQgb2Zmc2V0ICovCiAJCW9mZiA9IChoZXgydW5zaWduZWQoYnVmICsgMykgKiAweDAxMDApICsgaGV4MnVuc2lnbmVkKGJ1ZiArIDUpOwogCi0JCWlmICgob2ZmICsgbGVuKSA+IG1heEFkZHIpIHsKKwkJaWYgKChvZmYgKyBsZW4pID4gbWF4QWRkcikKIAkJCW1heEFkZHIgPSBvZmYgKyBsZW47Ci0JCX0KIAogCQlpZiAobWF4QWRkciA+PSBGSVJNV0FSRV9NQVhfTEVOKSB7Ci0JCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IGZpcm13YXJlIHVwbG9hZCBnb2VzIGJleW9uZCBGWDIgUkFNIGJvdW5kYXJpZXMuIik7CisJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGZpcm13YXJlIHVwbG9hZCAiCisJCQkgICAgICAgImdvZXMgYmV5b25kIEZYMiBSQU0gYm91bmRhcmllcy4iKTsKKwkJCWtmcmVlKGZpcm13YXJlQmluYXJ5KTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCS8vcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBvZmY9JXgsIGxlbj0leDoiLG9mZixsZW4pOworCQkvKiBwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IG9mZj0leCwgbGVuPSV4OiIsb2ZmLGxlbik7ICovCiAKIAkJLyogUmVhZCB0aGUgcmVjb3JkIHR5cGUgKi8KIAkJdHlwZSA9IGhleDJ1bnNpZ25lZChidWYgKyA3KTsKIAogCQkvKiBJZiB0aGlzIGlzIGFuIEVPRiByZWNvcmQsIHRoZW4gbWFrZSBpdCBzby4gKi8KLQkJaWYgKHR5cGUgPT0gMSkgeworCQlpZiAodHlwZSA9PSAxKQogCQkJYnJlYWs7Ci0JCX0KIAogCQlpZiAodHlwZSAhPSAwKSB7Ci0JCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IHVuc3VwcG9ydGVkIHJlY29yZCB0eXBlOiAldVxuIiwgdHlwZSk7CisJCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IHVuc3VwcG9ydGVkICIKKwkJCSAgICAgICAicmVjb3JkIHR5cGU6ICV1XG4iLCB0eXBlKTsKKwkJCWtmcmVlKGZpcm13YXJlQmluYXJ5KTsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAKIAkJZm9yIChpZHggPSAwLCBjcCA9IGJ1ZiArIDk7IGlkeCA8IGxlbjsgaWR4ICs9IDEsIGNwICs9IDIpIHsKIAkJCWZpcm13YXJlQmluYXJ5W2lkeCArIG9mZl0gPSBoZXgydW5zaWduZWQoY3ApOwotCQkJLy9wcmludGsoIiUwMnggIixmaXJtd2FyZUJpbmFyeVtpZHgrb2ZmXSk7CisJCQkvKiBwcmludGsoIiUwMnggIixmaXJtd2FyZUJpbmFyeVtpZHgrb2ZmXSk7ICovCiAJCX0KLQkJLy9wcmludGsoIlxuIik7CisKKwkJLyogcHJpbnRrKCJcbiIpOyAqLwogCiAJCWlmIChpID49IHNpemUpIHsKLQkJCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogdW5leHBlY3RlZCBlbmQgb2YgaGV4IGZpbGVcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiB1bmV4cGVjdGVkIGVuZCAiCisJCQkgICAgICAgIm9mIGhleCBmaWxlXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKIAl9Ci0JcmVzID0gZmlybXdhcmVVcGxvYWQodXNiZHV4ZmFzdHN1YiwgZmlybXdhcmVCaW5hcnksIG1heEFkZHIgKyAxKTsKKwlyZXMgPSBmaXJtd2FyZVVwbG9hZCh1ZGZzLCBmaXJtd2FyZUJpbmFyeSwgbWF4QWRkciArIDEpOwogCWtmcmVlKGZpcm13YXJlQmluYXJ5KTsKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgdm9pZCB0aWR5X3VwKHVzYmR1eGZhc3RzdWJfdCAqIHVzYmR1eGZhc3RzdWJfdG1wKQorc3RhdGljIHZvaWQgdGlkeV91cChzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1ZGZzKQogewogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IHRpZGluZyB1cFxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaV86IHVzYmR1eGZhc3Q6IHRpZGluZyB1cFxuIik7CiAjZW5kaWYKLQlpZiAoIXVzYmR1eGZhc3RzdWJfdG1wKSB7CisKKwlpZiAoIXVkZnMpCiAJCXJldHVybjsKLQl9Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQotCS8vIHNob3dzIHRoZSB1c2Igc3Vic3lzdGVtIHRoYXQgdGhlIGRyaXZlciBpcyBkb3duCi0JaWYgKHVzYmR1eGZhc3RzdWJfdG1wLT5pbnRlcmZhY2UpIHsKLQkJdXNiX3NldF9pbnRmZGF0YSh1c2JkdXhmYXN0c3ViX3RtcC0+aW50ZXJmYWNlLCBOVUxMKTsKLQl9Ci0jZW5kaWYKIAotCXVzYmR1eGZhc3RzdWJfdG1wLT5wcm9iZWQgPSAwOworCS8qIHNob3dzIHRoZSB1c2Igc3Vic3lzdGVtIHRoYXQgdGhlIGRyaXZlciBpcyBkb3duICovCisJaWYgKHVkZnMtPmludGVyZmFjZSkKKwkJdXNiX3NldF9pbnRmZGF0YSh1ZGZzLT5pbnRlcmZhY2UsIE5VTEwpOwogCi0JaWYgKHVzYmR1eGZhc3RzdWJfdG1wLT51cmJJbikgewotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsOCkKLQkJLy8gd2FpdHMgdW50aWwgYSBydW5uaW5nIHRyYW5zZmVyIGlzIG92ZXIKLQkJLy8gdGh1cywgdW5kZXIgMi40IGhvdHBsdWdnaW5nIHdoaWxlIGEgY29tbWFuZAotCQkvLyBpcyBydW5uaW5nIGlzIG5vdCBzYWZlCi0JCXVzYl9raWxsX3VyYih1c2JkdXhmYXN0c3ViX3RtcC0+dXJiSW4pOwotI2VuZGlmCi0JCWlmICh1c2JkdXhmYXN0c3ViX3RtcC0+dHJhbnNmZXJfYnVmZmVyKSB7Ci0JCQlrZnJlZSh1c2JkdXhmYXN0c3ViX3RtcC0+dHJhbnNmZXJfYnVmZmVyKTsKLQkJCXVzYmR1eGZhc3RzdWJfdG1wLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOwotCQl9Ci0JCXVzYl9mcmVlX3VyYih1c2JkdXhmYXN0c3ViX3RtcC0+dXJiSW4pOwotCQl1c2JkdXhmYXN0c3ViX3RtcC0+dXJiSW4gPSBOVUxMOworCXVkZnMtPnByb2JlZCA9IDA7CisKKwlpZiAodWRmcy0+dXJiSW4pIHsKKwkJLyogd2FpdHMgdW50aWwgYSBydW5uaW5nIHRyYW5zZmVyIGlzIG92ZXIgKi8KKwkJdXNiX2tpbGxfdXJiKHVkZnMtPnVyYkluKTsKKworCQlrZnJlZSh1ZGZzLT50cmFuc2Zlcl9idWZmZXIpOworCQl1ZGZzLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworCisJCXVzYl9mcmVlX3VyYih1ZGZzLT51cmJJbik7CisJCXVkZnMtPnVyYkluID0gTlVMTDsKIAl9Ci0JaWYgKHVzYmR1eGZhc3RzdWJfdG1wLT5pbnNuQnVmZmVyKSB7Ci0JCWtmcmVlKHVzYmR1eGZhc3RzdWJfdG1wLT5pbnNuQnVmZmVyKTsKLQkJdXNiZHV4ZmFzdHN1Yl90bXAtPmluc25CdWZmZXIgPSBOVUxMOwotCX0KLQlpZiAodXNiZHV4ZmFzdHN1Yl90bXAtPmR1eF9jb21tYW5kcykgewotCQlrZnJlZSh1c2JkdXhmYXN0c3ViX3RtcC0+ZHV4X2NvbW1hbmRzKTsKLQkJdXNiZHV4ZmFzdHN1Yl90bXAtPmR1eF9jb21tYW5kcyA9IE5VTEw7Ci0JfQotCXVzYmR1eGZhc3RzdWJfdG1wLT5haV9jbWRfcnVubmluZyA9IDA7CisKKwlrZnJlZSh1ZGZzLT5pbnNuQnVmZmVyKTsKKwl1ZGZzLT5pbnNuQnVmZmVyID0gTlVMTDsKKworCWtmcmVlKHVkZnMtPmR1eF9jb21tYW5kcyk7CisJdWRmcy0+ZHV4X2NvbW1hbmRzID0gTlVMTDsKKworCXVkZnMtPmFpX2NtZF9ydW5uaW5nID0gMDsKIH0KIAotLy8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdXJicyBhbmQgaW5pdGlhbGlzZSB0aGVtCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApCi1zdGF0aWMgdm9pZCAqdXNiZHV4ZmFzdHN1Yl9wcm9iZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKLQl1bnNpZ25lZCBpbnQgaW50ZXJmbnVtLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgdm9pZCB1c2JkdXhmYXN0X2Zpcm13YXJlX3JlcXVlc3RfY29tcGxldGVfaGFuZGxlcihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LAorCQkJCQkJCSB2b2lkICpjb250ZXh0KQogewotI2Vsc2UKKwlzdHJ1Y3QgdXNiZHV4ZmFzdHN1Yl9zICp1c2JkdXhmYXN0c3ViX3RtcCA9IGNvbnRleHQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IHVzYmR1eGZhc3RzdWJfdG1wLT51c2JkZXY7CisJaW50IHJldDsKKworCWlmIChmdyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIHdlIG5lZWQgdG8gdXBsb2FkIHRoZSBmaXJtd2FyZSBoZXJlIGJlY2F1c2UgZncgd2lsbCBiZQorCSAqIGZyZWVkIG9uY2Ugd2UndmUgbGVmdCB0aGlzIGZ1bmN0aW9uCisJICovCisJcmV0ID0gcmVhZF9maXJtd2FyZSh1c2JkdXhmYXN0c3ViX3RtcCwgZnctPmRhdGEsIGZ3LT5zaXplKTsKKworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmdXNiZGV2LT5kZXYsCisJCQkiQ291bGQgbm90IHVwbG9hZCBmaXJtd2FyZSAoZXJyPSVkKVxuIiwKKwkJCXJldCk7CisJCXJldHVybjsKKwl9CisKKwljb21lZGlfdXNiX2F1dG9fY29uZmlnKHVzYmRldiwgQk9BUkROQU1FKTsKK30KKworLyoKKyAqIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHVyYnMgYW5kIGluaXRpYWxpc2UgdGhlbQorICovCiBzdGF0aWMgaW50IHVzYmR1eGZhc3RzdWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVpbnRlcmYsCiAJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldih1aW50ZXJmKTsKLSNlbmRpZgogCWludCBpOwogCWludCBpbmRleDsKKwlpbnQgcmV0OwogCiAJaWYgKHVkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdF86IFRoaXMgZHJpdmVyIG5lZWRzIFVTQiAyLjAgdG8gb3BlcmF0ZS4gQWJvcnRpbmcuLi5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3RfOiBUaGlzIGRyaXZlciBuZWVkcyIKKwkJICAgICAgICJVU0IgMi4wIHRvIG9wZXJhdGUuIEFib3J0aW5nLi4uXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3RfOiBmaW5kaW5nIGEgZnJlZSBzdHJ1Y3R1cmUgZm9yIHRoZSB1c2ItZGV2aWNlXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpXzogdXNiZHV4ZmFzdF86IGZpbmRpbmcgYSBmcmVlIHN0cnVjdHVyZSBmb3IgIgorCSAgICAgICAidGhlIHVzYi1kZXZpY2VcbiIpOwogI2VuZGlmCiAJZG93bigmc3RhcnRfc3RvcF9zZW0pOwotCS8vIGxvb2sgZm9yIGEgZnJlZSBwbGFjZSBpbiB0aGUgdXNiZHV4ZmFzdCBhcnJheQorCS8qIGxvb2sgZm9yIGEgZnJlZSBwbGFjZSBpbiB0aGUgdXNiZHV4ZmFzdCBhcnJheSAqLwogCWluZGV4ID0gLTE7CiAJZm9yIChpID0gMDsgaSA8IE5VTVVTQkRVWEZBU1Q7IGkrKykgewotCQlpZiAoISh1c2JkdXhmYXN0c3ViW2ldLnByb2JlZCkpIHsKKwkJaWYgKCF1c2JkdXhmYXN0c3ViW2ldLnByb2JlZCkgewogCQkJaW5kZXggPSBpOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQkvLyBubyBtb3JlIHNwYWNlCisJLyogbm8gbW9yZSBzcGFjZSAqLwogCWlmIChpbmRleCA9PSAtMSkgewotCQlwcmludGsoIlRvbyBtYW55IHVzYmR1eGZhc3QtZGV2aWNlcyBjb25uZWN0ZWQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJUb28gbWFueSB1c2JkdXhmYXN0LWRldmljZXMgY29ubmVjdGVkLlxuIik7CiAJCXVwKCZzdGFydF9zdG9wX3NlbSk7CiAJCXJldHVybiAtRU1GSUxFOwogCX0KICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiB1c2JkdXhmYXN0c3ViWyVkXSBpcyByZWFkeSB0byBjb25uZWN0IHRvIGNvbWVkaS5cbiIsIGluZGV4KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpXzogdXNiZHV4ZmFzdDogdXNiZHV4ZmFzdHN1YlslZF0gaXMgcmVhZHkgdG8gIgorCSAgICAgICAiY29ubmVjdCB0byBjb21lZGkuXG4iLCBpbmRleCk7CiAjZW5kaWYKIAogCWluaXRfTVVURVgoJih1c2JkdXhmYXN0c3ViW2luZGV4XS5zZW0pKTsKLQkvLyBzYXZlIGEgcG9pbnRlciB0byB0aGUgdXNiIGRldmljZQorCS8qIHNhdmUgYSBwb2ludGVyIHRvIHRoZSB1c2IgZGV2aWNlICovCiAJdXNiZHV4ZmFzdHN1YltpbmRleF0udXNiZGV2ID0gdWRldjsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQotCS8vIHNhdmUgdGhlIGludGVyZmFjZSBudW1iZXIKLQl1c2JkdXhmYXN0c3ViW2luZGV4XS5pZm51bSA9IGludGVyZm51bTsKLSNlbHNlCi0JLy8gMi42OiBzYXZlIHRoZSBpbnRlcmZhY2UgaXRzZWxmCisJLyogc2F2ZSB0aGUgaW50ZXJmYWNlIGl0c2VsZiAqLwogCXVzYmR1eGZhc3RzdWJbaW5kZXhdLmludGVyZmFjZSA9IHVpbnRlcmY7Ci0JLy8gZ2V0IHRoZSBpbnRlcmZhY2UgbnVtYmVyIGZyb20gdGhlIGludGVyZmFjZQorCS8qIGdldCB0aGUgaW50ZXJmYWNlIG51bWJlciBmcm9tIHRoZSBpbnRlcmZhY2UgKi8KIAl1c2JkdXhmYXN0c3ViW2luZGV4XS5pZm51bSA9IHVpbnRlcmYtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQkvLyBoYW5kIHRoZSBwcml2YXRlIGRhdGEgb3ZlciB0byB0aGUgdXNiIHN1YnN5c3RlbQotCS8vIHdpbGwgYmUgbmVlZGVkIGZvciBkaXNjb25uZWN0CisJLyoKKwkgKiBoYW5kIHRoZSBwcml2YXRlIGRhdGEgb3ZlciB0byB0aGUgdXNiIHN1YnN5c3RlbQorCSAqIHdpbGwgYmUgbmVlZGVkIGZvciBkaXNjb25uZWN0CisJICovCiAJdXNiX3NldF9pbnRmZGF0YSh1aW50ZXJmLCAmKHVzYmR1eGZhc3RzdWJbaW5kZXhdKSk7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IGlmbnVtPSVkXG4iLCB1c2JkdXhmYXN0c3ViW2luZGV4XS5pZm51bSk7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGlmbnVtPSVkXG4iLAorCSAgICAgICB1c2JkdXhmYXN0c3ViW2luZGV4XS5pZm51bSk7CiAjZW5kaWYKLQkvLyBjcmVhdGUgc3BhY2UgZm9yIHRoZSBjb21tYW5kcyBnb2luZyB0byB0aGUgdXNiIGRldmljZQorCS8qIGNyZWF0ZSBzcGFjZSBmb3IgdGhlIGNvbW1hbmRzIGdvaW5nIHRvIHRoZSB1c2IgZGV2aWNlICovCiAJdXNiZHV4ZmFzdHN1YltpbmRleF0uZHV4X2NvbW1hbmRzID0ga21hbGxvYyhTSVpFT0ZEVVhCVUZGRVIsCi0JCUdGUF9LRVJORUwpOworCQkJCQkJICAgIEdGUF9LRVJORUwpOwogCWlmICghdXNiZHV4ZmFzdHN1YltpbmRleF0uZHV4X2NvbW1hbmRzKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdDogZXJyb3IgYWxsb2Mgc3BhY2UgZm9yIGRhYyBjb21tYW5kc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogZXJyb3IgYWxsb2Mgc3BhY2UgZm9yICIKKwkJICAgICAgICJkYWMgY29tbWFuZHNcbiIpOwogCQl0aWR5X3VwKCYodXNiZHV4ZmFzdHN1YltpbmRleF0pKTsKIAkJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCS8vIGNyZWF0ZSBzcGFjZSBvZiB0aGUgaW5zdHJ1Y3Rpb24gYnVmZmVyCisJLyogY3JlYXRlIHNwYWNlIG9mIHRoZSBpbnN0cnVjdGlvbiBidWZmZXIgKi8KIAl1c2JkdXhmYXN0c3ViW2luZGV4XS5pbnNuQnVmZmVyID0ga21hbGxvYyhTSVpFSU5TTkJVRiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEodXNiZHV4ZmFzdHN1YltpbmRleF0uaW5zbkJ1ZmZlcikpIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBjb3VsZCBub3QgYWxsb2Mgc3BhY2UgZm9yIGluc25CdWZmZXJcbiIpOworCWlmICghdXNiZHV4ZmFzdHN1YltpbmRleF0uaW5zbkJ1ZmZlcikgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3Q6IGNvdWxkIG5vdCBhbGxvYyBzcGFjZSAiCisJCSAgICAgICAiZm9yIGluc25CdWZmZXJcbiIpOwogCQl0aWR5X3VwKCYodXNiZHV4ZmFzdHN1YltpbmRleF0pKTsKIAkJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCS8vIHNldHRpbmcgdG8gYWx0ZXJuYXRlIHNldHRpbmcgMTogZW5hYmxpbmcgYnVsayBlcAorCS8qIHNldHRpbmcgdG8gYWx0ZXJuYXRlIHNldHRpbmcgMTogZW5hYmxpbmcgYnVsayBlcCAqLwogCWkgPSB1c2Jfc2V0X2ludGVyZmFjZSh1c2JkdXhmYXN0c3ViW2luZGV4XS51c2JkZXYsCiAJCXVzYmR1eGZhc3RzdWJbaW5kZXhdLmlmbnVtLCAxKTsKIAlpZiAoaSA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0JWQ6IGNvdWxkIG5vdCBzd2l0Y2ggdG8gYWx0ZXJuYXRlIHNldHRpbmcgMS5cbiIsIGluZGV4KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0JWQ6IGNvdWxkIG5vdCBzd2l0Y2ggdG8gIgorCQkgICAgICAgImFsdGVybmF0ZSBzZXR0aW5nIDEuXG4iLCBpbmRleCk7CiAJCXRpZHlfdXAoJih1c2JkdXhmYXN0c3ViW2luZGV4XSkpOwogCQl1cCgmc3RhcnRfc3RvcF9zZW0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJdXNiZHV4ZmFzdHN1YltpbmRleF0udXJiSW4gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICh1c2JkdXhmYXN0c3ViW2luZGV4XS51cmJJbiA9PSBOVUxMKSB7Ci0JCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdCVkOiBDb3VsZCBub3QgYWxsb2MuIHVyYlxuIiwgaW5kZXgpOworCWlmICghdXNiZHV4ZmFzdHN1YltpbmRleF0udXJiSW4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0JWQ6IENvdWxkIG5vdCBhbGxvYy4iCisJCSAgICAgICAidXJiXG4iLCBpbmRleCk7CiAJCXRpZHlfdXAoJih1c2JkdXhmYXN0c3ViW2luZGV4XSkpOwogCQl1cCgmc3RhcnRfc3RvcF9zZW0pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJdXNiZHV4ZmFzdHN1YltpbmRleF0udHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhTSVpFSU5CVUYsIEdGUF9LRVJORUwpOwotCWlmICghKHVzYmR1eGZhc3RzdWJbaW5kZXhdLnRyYW5zZmVyX2J1ZmZlcikpIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0JWQ6IGNvdWxkIG5vdCBhbGxvYy4gdHJhbnNiLlxuIiwKLQkJCWluZGV4KTsKKwlpZiAoIXVzYmR1eGZhc3RzdWJbaW5kZXhdLnRyYW5zZmVyX2J1ZmZlcikgeworCQlwcmludGsoS0VSTl9FUlIgImNvbWVkaV86IHVzYmR1eGZhc3QlZDogY291bGQgbm90IGFsbG9jLiAiCisJCSAgICAgICAidHJhbnNiLlxuIiwgaW5kZXgpOwogCQl0aWR5X3VwKCYodXNiZHV4ZmFzdHN1YltpbmRleF0pKTsKIAkJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCS8vIHdlJ3ZlIHJlYWNoZWQgdGhlIGJvdHRvbSBvZiB0aGUgZnVuY3Rpb24KKwkvKiB3ZSd2ZSByZWFjaGVkIHRoZSBib3R0b20gb2YgdGhlIGZ1bmN0aW9uICovCiAJdXNiZHV4ZmFzdHN1YltpbmRleF0ucHJvYmVkID0gMTsKIAl1cCgmc3RhcnRfc3RvcF9zZW0pOwotCXByaW50aygiY29tZWRpXzogdXNiZHV4ZmFzdCVkIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC5cbiIsCi0JCWluZGV4KTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMCkKLQlyZXR1cm4gKHZvaWQgKikoJnVzYmR1eGZhc3RzdWJbaW5kZXhdKTsKLSNlbHNlCi0JLy8gc3VjY2VzcworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsCisJCQkJICAgICAgRldfQUNUSU9OX0hPVFBMVUcsCisJCQkJICAgICAgInVzYmR1eGZhc3RfZmlybXdhcmUuaGV4IiwKKwkJCQkgICAgICAmdWRldi0+ZGV2LAorCQkJCSAgICAgIHVzYmR1eGZhc3RzdWIgKyBpbmRleCwKKwkJCQkgICAgICB1c2JkdXhmYXN0X2Zpcm13YXJlX3JlcXVlc3RfY29tcGxldGVfaGFuZGxlcik7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnVkZXYtPmRldiwgImNvdWxkIG5vdCBsb2FkIGZpcm13YXJlIChlcnI9JWQpXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGlfOiB1c2JkdXhmYXN0JWQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5ICIKKwkgICAgICAgImluaXRpYWxpemVkLlxuIiwgaW5kZXgpOworCS8qIHN1Y2Nlc3MgKi8KIAlyZXR1cm4gMDsKLSNlbmRpZgogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDApCi1zdGF0aWMgdm9pZCB1c2JkdXhmYXN0c3ViX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHZvaWQgKnB0cikKLXsKLQl1c2JkdXhmYXN0c3ViX3QgKnVzYmR1eGZhc3RzdWJfdG1wID0gKHVzYmR1eGZhc3RzdWJfdCAqKSBwdHI7Ci0jZWxzZQogc3RhdGljIHZvaWQgdXNiZHV4ZmFzdHN1Yl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCXVzYmR1eGZhc3RzdWJfdCAqdXNiZHV4ZmFzdHN1Yl90bXAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLSNlbmRpZgotCWlmICghdXNiZHV4ZmFzdHN1Yl90bXApIHsKLQkJcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBkaXNjb25uZWN0IGNhbGxlZCB3aXRoIG51bGwgcG9pbnRlci5cbiIpOworCisJaWYgKCF1ZGZzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpXzogdXNiZHV4ZmFzdDogZGlzY29ubmVjdCBjYWxsZWQgd2l0aCAiCisJCSAgICAgICAibnVsbCBwb2ludGVyLlxuIik7CiAJCXJldHVybjsKIAl9Ci0JaWYgKHVzYmR1eGZhc3RzdWJfdG1wLT51c2JkZXYgIT0gdWRldikgewotCQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IEJVRyEgY2FsbGVkIHdpdGggd3JvbmcgcHRyISEhXG4iKTsKKwlpZiAodWRmcy0+dXNiZGV2ICE9IHVkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGlfOiB1c2JkdXhmYXN0OiBCVUchIGNhbGxlZCB3aXRoIHdyb25nICIKKwkJICAgICAgICJwdHIhISFcbiIpOwogCQlyZXR1cm47CiAJfQorCisJY29tZWRpX3VzYl9hdXRvX3VuY29uZmlnKHVkZXYpOworCiAJZG93bigmc3RhcnRfc3RvcF9zZW0pOwotCWRvd24oJnVzYmR1eGZhc3RzdWJfdG1wLT5zZW0pOwotCXRpZHlfdXAodXNiZHV4ZmFzdHN1Yl90bXApOwotCXVwKCZ1c2JkdXhmYXN0c3ViX3RtcC0+c2VtKTsKKwlkb3duKCZ1ZGZzLT5zZW0pOworCXRpZHlfdXAodWRmcyk7CisJdXAoJnVkZnMtPnNlbSk7CiAJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKKwogI2lmZGVmIENPTkZJR19DT01FRElfREVCVUcKLQlwcmludGsoImNvbWVkaV86IHVzYmR1eGZhc3Q6IGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSB1c2JcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGlfOiB1c2JkdXhmYXN0OiBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgdXNiXG4iKTsKICNlbmRpZgogfQogCi0vLyBpcyBjYWxsZWQgd2hlbiBjb21lZGktY29uZmlnIGlzIGNhbGxlZAotc3RhdGljIGludCB1c2JkdXhmYXN0X2F0dGFjaChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfZGV2Y29uZmlnICogaXQpCisvKgorICogaXMgY2FsbGVkIHdoZW4gY29tZWRpLWNvbmZpZyBpcyBjYWxsZWQKKyAqLworc3RhdGljIGludCB1c2JkdXhmYXN0X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCiB7CiAJaW50IHJldDsKIAlpbnQgaW5kZXg7CiAJaW50IGk7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IE5VTEw7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBOVUxMOwogCWRldi0+cHJpdmF0ZSA9IE5VTEw7CiAKIAlkb3duKCZzdGFydF9zdG9wX3NlbSk7Ci0JLy8gZmluZCBhIHZhbGlkIGRldmljZSB3aGljaCBoYXMgYmVlbiBkZXRlY3RlZCBieSB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhlIHVzYgorCS8qCisJICogZmluZCBhIHZhbGlkIGRldmljZSB3aGljaCBoYXMgYmVlbiBkZXRlY3RlZCBieSB0aGUKKwkgKiBwcm9iZSBmdW5jdGlvbiBvZiB0aGUgdXNiCisJICovCiAJaW5kZXggPSAtMTsKIAlmb3IgKGkgPSAwOyBpIDwgTlVNVVNCRFVYRkFTVDsgaSsrKSB7Ci0JCWlmICgodXNiZHV4ZmFzdHN1YltpXS5wcm9iZWQpICYmICghdXNiZHV4ZmFzdHN1YltpXS5hdHRhY2hlZCkpIHsKKwkJaWYgKHVzYmR1eGZhc3RzdWJbaV0ucHJvYmVkICYmICF1c2JkdXhmYXN0c3ViW2ldLmF0dGFjaGVkKSB7CiAJCQlpbmRleCA9IGk7CiAJCQlicmVhazsKIAkJfQogCX0KIAogCWlmIChpbmRleCA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogZXJyb3I6IGF0dGFjaCBmYWlsZWQsIG5vIHVzYmR1eGZhc3QgZGV2cyBjb25uZWN0ZWQgdG8gdGhlIHVzYiBidXMuXG4iLCBkZXYtPm1pbm9yKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJjb21lZGklZDogdXNiZHV4ZmFzdDogZXJyb3I6IGF0dGFjaCBmYWlsZWQsICIKKwkJICAgICAgICJubyB1c2JkdXhmYXN0IGRldnMgY29ubmVjdGVkIHRvIHRoZSB1c2IgYnVzLlxuIiwKKwkJICAgICAgIGRldi0+bWlub3IpOwogCQl1cCgmc3RhcnRfc3RvcF9zZW0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlkb3duKCYodXNiZHV4ZmFzdHN1YltpbmRleF0uc2VtKSk7Ci0JLy8gcG9pbnRlciBiYWNrIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbWVkaSBkZXZpY2UKKwkvKiBwb2ludGVyIGJhY2sgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29tZWRpIGRldmljZSAqLwogCXVzYmR1eGZhc3RzdWJbaW5kZXhdLmNvbWVkaWRldiA9IGRldjsKIAotCS8vIHRyeWluZyB0byB1cGxvYWQgdGhlIGZpcm13YXJlIGludG8gdGhlIGNoaXAKKwkvKiB0cnlpbmcgdG8gdXBsb2FkIHRoZSBmaXJtd2FyZSBpbnRvIHRoZSBjaGlwICovCiAJaWYgKGNvbWVkaV9hdXhfZGF0YShpdC0+b3B0aW9ucywgMCkgJiYKLQkJaXQtPm9wdGlvbnNbQ09NRURJX0RFVkNPTkZfQVVYX0RBVEFfTEVOR1RIXSkgewotCQlyZWFkX2Zpcm13YXJlKHVzYmR1eGZhc3RzdWIsCi0JCQljb21lZGlfYXV4X2RhdGEoaXQtPm9wdGlvbnMsIDApLAotCQkJaXQtPm9wdGlvbnNbQ09NRURJX0RFVkNPTkZfQVVYX0RBVEFfTEVOR1RIXSk7CisJICAgIGl0LT5vcHRpb25zW0NPTUVESV9ERVZDT05GX0FVWF9EQVRBX0xFTkdUSF0pIHsKKwkJcmVhZF9maXJtd2FyZSgmdXNiZHV4ZmFzdHN1YltpbmRleF0sCisJCQkgICAgICBjb21lZGlfYXV4X2RhdGEoaXQtPm9wdGlvbnMsIDApLAorCQkJICAgICAgaXQtPm9wdGlvbnNbQ09NRURJX0RFVkNPTkZfQVVYX0RBVEFfTEVOR1RIXSk7CiAJfQogCiAJZGV2LT5ib2FyZF9uYW1lID0gQk9BUkROQU1FOwpAQCAtMTYxNiwxNTUgKzE3NjEsMTUwIEBACiAJLyogc2V0IG51bWJlciBvZiBzdWJkZXZpY2VzICovCiAJZGV2LT5uX3N1YmRldmljZXMgPSBOX1NVQkRFVklDRVM7CiAKLQkvLyBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHN1YmRldmljZXMKLQlpZiAoKHJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBOX1NVQkRFVklDRVMpKSA8IDApIHsKLQkJcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogZXJyb3IgYWxsb2Mgc3BhY2UgZm9yIHN1YmRldlxuIiwKLQkJCWRldi0+bWlub3IpOworCS8qIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgc3ViZGV2aWNlcyAqLworCXJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBOX1NVQkRFVklDRVMpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGVycm9yIGFsbG9jIHNwYWNlIGZvciAiCisJCSAgICAgICAic3ViZGV2XG4iLCBkZXYtPm1pbm9yKTsKKwkJdXAoJih1c2JkdXhmYXN0c3ViW2luZGV4XS5zZW0pKTsKIAkJdXAoJnN0YXJ0X3N0b3Bfc2VtKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlwcmludGsoImNvbWVkaSVkOiB1c2JkdXhmYXN0OiB1c2ItZGV2aWNlICVkIGlzIGF0dGFjaGVkIHRvIGNvbWVkaS5cbiIsCi0JCWRldi0+bWlub3IsIGluZGV4KTsKLQkvLyBwcml2YXRlIHN0cnVjdHVyZSBpcyBhbHNvIHNpbXBseSB0aGUgdXNiLXN0cnVjdHVyZQorCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiB1c2JkdXhmYXN0OiB1c2ItZGV2aWNlICVkIGlzIGF0dGFjaGVkIHRvICIKKwkgICAgICAgImNvbWVkaS5cbiIsIGRldi0+bWlub3IsIGluZGV4KTsKKwkvKiBwcml2YXRlIHN0cnVjdHVyZSBpcyBhbHNvIHNpbXBseSB0aGUgdXNiLXN0cnVjdHVyZSAqLwogCWRldi0+cHJpdmF0ZSA9IHVzYmR1eGZhc3RzdWIgKyBpbmRleDsKLQkvLyB0aGUgZmlyc3Qgc3ViZGV2aWNlIGlzIHRoZSBBL0QgY29udmVydGVyCisJLyogdGhlIGZpcnN0IHN1YmRldmljZSBpcyB0aGUgQS9EIGNvbnZlcnRlciAqLwogCXMgPSBkZXYtPnN1YmRldmljZXMgKyBTVUJERVZfQUQ7Ci0JLy8gdGhlIFVSQnMgZ2V0IHRoZSBjb21lZGkgc3ViZGV2aWNlCi0JLy8gd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHJlYWRpbmcKLQkvLyB0aGlzIGlzIHRoZSBzdWJkZXZpY2Ugd2hpY2ggcmVhZHMgZGF0YQorCS8qCisJICogdGhlIFVSQnMgZ2V0IHRoZSBjb21lZGkgc3ViZGV2aWNlIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciByZWFkaW5nCisJICogdGhpcyBpcyB0aGUgc3ViZGV2aWNlIHdoaWNoIHJlYWRzIGRhdGEKKwkgKi8KIAlkZXYtPnJlYWRfc3ViZGV2ID0gczsKLQkvLyB0aGUgc3ViZGV2aWNlIHJlY2VpdmVzIGFzIHByaXZhdGUgc3RydWN0dXJlIHRoZQotCS8vIHVzYi1zdHJ1Y3R1cmUKKwkvKiB0aGUgc3ViZGV2aWNlIHJlY2VpdmVzIGFzIHByaXZhdGUgc3RydWN0dXJlIHRoZSB1c2Itc3RydWN0dXJlICovCiAJcy0+cHJpdmF0ZSA9IE5VTEw7Ci0JLy8gYW5hbG9nIGlucHV0CisJLyogYW5hbG9nIGlucHV0ICovCiAJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOwotCS8vIHJlYWRhYmxlIGFuZCByZWYgaXMgdG8gZ3JvdW5kCisJLyogcmVhZGFibGUgYW5kIHJlZiBpcyB0byBncm91bmQgKi8KIAlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EIHwgU0RGX0NNRF9SRUFEOwotCS8vIDE2IGNoYW5uZWxzCisJLyogMTYgY2hhbm5lbHMgKi8KIAlzLT5uX2NoYW4gPSAxNjsKLQkvLyBsZW5ndGggb2YgdGhlIGNoYW5uZWxsaXN0CisJLyogbGVuZ3RoIG9mIHRoZSBjaGFubmVsbGlzdCAqLwogCXMtPmxlbl9jaGFubGlzdCA9IDE2OwotCS8vIGNhbGxiYWNrIGZ1bmN0aW9ucworCS8qIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwogCXMtPmluc25fcmVhZCA9IHVzYmR1eGZhc3RfYWlfaW5zbl9yZWFkOwogCXMtPmRvX2NtZHRlc3QgPSB1c2JkdXhmYXN0X2FpX2NtZHRlc3Q7CiAJcy0+ZG9fY21kID0gdXNiZHV4ZmFzdF9haV9jbWQ7CiAJcy0+Y2FuY2VsID0gdXNiZHV4ZmFzdF9haV9jYW5jZWw7Ci0JLy8gbWF4IHZhbHVlIGZyb20gdGhlIEEvRCBjb252ZXJ0ZXIgKDEyYml0KzEgYml0IGZvciBvdmVyZmxvdykKKwkvKiBtYXggdmFsdWUgZnJvbSB0aGUgQS9EIGNvbnZlcnRlciAoMTJiaXQrMSBiaXQgZm9yIG92ZXJmbG93KSAqLwogCXMtPm1heGRhdGEgPSAweDEwMDA7Ci0JLy8gcmFuZ2UgdGFibGUgdG8gY29udmVydCB0byBwaHlzaWNhbCB1bml0cworCS8qIHJhbmdlIHRhYmxlIHRvIGNvbnZlcnQgdG8gcGh5c2ljYWwgdW5pdHMgKi8KIAlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91c2JkdXhmYXN0X2FpX3JhbmdlOwogCi0JLy8gZmluYWxseSBkZWNpZGUgdGhhdCBpdCdzIGF0dGFjaGVkCisJLyogZmluYWxseSBkZWNpZGUgdGhhdCBpdCdzIGF0dGFjaGVkICovCiAJdXNiZHV4ZmFzdHN1YltpbmRleF0uYXR0YWNoZWQgPSAxOwogCiAJdXAoJih1c2JkdXhmYXN0c3ViW2luZGV4XS5zZW0pKTsKLQogCXVwKCZzdGFydF9zdG9wX3NlbSk7Ci0KLQlwcmludGsoImNvbWVkaSVkOiBzdWNjZXNzZnVsbHkgYXR0YWNoZWQgdG8gdXNiZHV4ZmFzdC5cbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBzdWNjZXNzZnVsbHkgYXR0YWNoZWQgdG8gdXNiZHV4ZmFzdC5cbiIsCisJICAgICAgIGRldi0+bWlub3IpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiZHV4ZmFzdF9kZXRhY2goY29tZWRpX2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgdXNiZHV4ZmFzdF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQl1c2JkdXhmYXN0c3ViX3QgKnVzYmR1eGZhc3RzdWJfdG1wOwotCi0jaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRwotCXByaW50aygiY29tZWRpJWQ6IHVzYmR1eGZhc3Q6IGRldGFjaCB1c2IgZGV2aWNlXG4iLCBkZXYtPm1pbm9yKTsKLSNlbmRpZgorCXN0cnVjdCB1c2JkdXhmYXN0c3ViX3MgKnVkZnM7CiAKIAlpZiAoIWRldikgewotCQlwcmludGsoImNvbWVkaT86IHVzYmR1eGZhc3Q6IGRldGFjaCB3aXRob3V0IGRldiB2YXJpYWJsZS4uLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpPzogdXNiZHV4ZmFzdDogZGV0YWNoIHdpdGhvdXQgZGV2ICIKKwkJICAgICAgICJ2YXJpYWJsZS4uLlxuIik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXVzYmR1eGZhc3RzdWJfdG1wID0gZGV2LT5wcml2YXRlOwotCWlmICghdXNiZHV4ZmFzdHN1Yl90bXApIHsKLQkJcHJpbnRrKCJjb21lZGk/OiB1c2JkdXhmYXN0OiBkZXRhY2ggd2l0aG91dCBwdHIgdG8gdXNiZHV4ZmFzdHN1YltdXG4iKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCi0JZG93bigmdXNiZHV4ZmFzdHN1Yl90bXAtPnNlbSk7Ci0JZG93bigmc3RhcnRfc3RvcF9zZW0pOwotCS8vIERvbid0IGFsbG93IGRldGFjaCB0byBmcmVlIHRoZSBwcml2YXRlIHN0cnVjdHVyZQotCS8vIEl0J3Mgb25lIGVudHJ5IG9mIG9mIHVzYmR1eGZhc3RzdWJbXQotCWRldi0+cHJpdmF0ZSA9IE5VTEw7Ci0JdXNiZHV4ZmFzdHN1Yl90bXAtPmF0dGFjaGVkID0gMDsKLQl1c2JkdXhmYXN0c3ViX3RtcC0+Y29tZWRpZGV2ID0gTlVMTDsKICNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGklZDogdXNiZHV4ZmFzdDogZGV0YWNoOiBzdWNjZXNzZnVsbHkgcmVtb3ZlZFxuIiwKLQkJZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fREVCVUcgImNvbWVkaSVkOiB1c2JkdXhmYXN0OiBkZXRhY2ggdXNiIGRldmljZVxuIiwKKwkgICAgICAgZGV2LT5taW5vcik7CisjZW5kaWYKKworCXVkZnMgPSBkZXYtPnByaXZhdGU7CisJaWYgKCF1ZGZzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY29tZWRpPzogdXNiZHV4ZmFzdDogZGV0YWNoIHdpdGhvdXQgcHRyIHRvICIKKwkJICAgICAgICJ1c2JkdXhmYXN0c3ViW11cbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlkb3duKCZ1ZGZzLT5zZW0pOworCWRvd24oJnN0YXJ0X3N0b3Bfc2VtKTsKKwkvKgorCSAqIERvbid0IGFsbG93IGRldGFjaCB0byBmcmVlIHRoZSBwcml2YXRlIHN0cnVjdHVyZQorCSAqIEl0J3Mgb25lIGVudHJ5IG9mIG9mIHVzYmR1eGZhc3RzdWJbXQorCSAqLworCWRldi0+cHJpdmF0ZSA9IE5VTEw7CisJdWRmcy0+YXR0YWNoZWQgPSAwOworCXVkZnMtPmNvbWVkaWRldiA9IE5VTEw7CisjaWZkZWYgQ09ORklHX0NPTUVESV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogdXNiZHV4ZmFzdDogZGV0YWNoOiBzdWNjZXNzZnVsbHkgIgorCSAgICAgICAicmVtb3ZlZFxuIiwgZGV2LT5taW5vcik7CiAjZW5kaWYKIAl1cCgmc3RhcnRfc3RvcF9zZW0pOwotCXVwKCZ1c2JkdXhmYXN0c3ViX3RtcC0+c2VtKTsKKwl1cCgmdWRmcy0+c2VtKTsKIAlyZXR1cm4gMDsKIH0KIAotLyogbWFpbiBkcml2ZXIgc3RydWN0ICovCi1zdGF0aWMgY29tZWRpX2RyaXZlciBkcml2ZXJfdXNiZHV4ZmFzdCA9IHsKLSAgICAgIGRyaXZlcl9uYW1lOiJ1c2JkdXhmYXN0IiwKLSAgICAgIG1vZHVsZTpUSElTX01PRFVMRSwKLSAgICAgIGF0dGFjaDp1c2JkdXhmYXN0X2F0dGFjaCwKLSAgICAgIGRldGFjaDp1c2JkdXhmYXN0X2RldGFjaCwKKy8qCisgKiBtYWluIGRyaXZlciBzdHJ1Y3QKKyAqLworc3RhdGljIHN0cnVjdCBjb21lZGlfZHJpdmVyIGRyaXZlcl91c2JkdXhmYXN0ID0geworCS5kcml2ZXJfbmFtZQk9ICJ1c2JkdXhmYXN0IiwKKwkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5hdHRhY2gJCT0gdXNiZHV4ZmFzdF9hdHRhY2gsCisJLmRldGFjaAkJPSB1c2JkdXhmYXN0X2RldGFjaAogfTsKIAotc3RhdGljIHZvaWQgaW5pdF91c2JfZGV2aWNlcyh2b2lkKQotewotCWludCBpbmRleDsKLSNpZmRlZiBDT05GSUdfQ09NRURJX0RFQlVHCi0JcHJpbnRrKCJjb21lZGlfOiB1c2JkdXhmYXN0OiBzZXR0aW5nIGFsbCBwb3NzaWJsZSBkZXZzIHRvIGludmFsaWRcbiIpOwotI2VuZGlmCi0JLy8gYWxsIGRldmljZXMgZW50cmllcyBhcmUgaW52YWxpZCB0byBiZWdpbiB3aXRoCi0JLy8gdGhleSB3aWxsIGJlY29tZSB2YWxpZCBieSB0aGUgcHJvYmUgZnVuY3Rpb24KLQkvLyBhbmQgdGhlbiBmaW5hbGx5IGJ5IHRoZSBhdHRhY2gtZnVuY3Rpb24KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1VU0JEVVhGQVNUOyBpbmRleCsrKSB7Ci0JCW1lbXNldCgmKHVzYmR1eGZhc3RzdWJbaW5kZXhdKSwgMHgwMCwKLQkJCXNpemVvZih1c2JkdXhmYXN0c3ViW2luZGV4XSkpOwotCQlpbml0X01VVEVYKCYodXNiZHV4ZmFzdHN1YltpbmRleF0uc2VtKSk7Ci0JfQotfQotCi0vLyBUYWJsZSB3aXRoIHRoZSBVU0ItZGV2aWNlczoganVzdCBub3cgb25seSB0ZXN0aW5nIElEcworLyoKKyAqIFRhYmxlIHdpdGggdGhlIFVTQi1kZXZpY2VzOiBqdXN0IG5vdyBvbmx5IHRlc3RpbmcgSURzCisgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JkdXhmYXN0c3ViX3RhYmxlW10gPSB7Ci0JLy8gICAgICAgIHsgVVNCX0RFVklDRSgweDRiNCwgMHg4NjEzKSwgLy90ZXN0aW5nCi0JLy8gICAgICAgIH0sCi0Je1VTQl9ERVZJQ0UoMHgxM2Q4LCAweDAwMTApCS8vcmVhbCBJRAotCQl9LAotCXtVU0JfREVWSUNFKDB4MTNkOCwgMHgwMDExKQkvL3JlYWwgSUQKLQkJfSwKLQl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCisJLyogeyBVU0JfREVWSUNFKDB4NGI0LCAweDg2MTMpIH0sIHRlc3RpbmcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxM2Q4LCAweDAwMTApIH0sCS8qIHJlYWwgSUQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxM2Q4LCAweDAwMTEpIH0sCS8qIHJlYWwgSUQgKi8KKwl7IH0JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYmR1eGZhc3RzdWJfdGFibGUpOwogCi0vLyBUaGUgdXNiZHV4ZmFzdHN1Yi1kcml2ZXIKKy8qCisgKiBUaGUgdXNiZHV4ZmFzdHN1Yi1kcml2ZXIKKyAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYmR1eGZhc3RzdWJfZHJpdmVyID0gewogI2lmZGVmIENPTUVESV9IQVZFX1VTQl9EUklWRVJfT1dORVIKLSAgICAgIG93bmVyOlRISVNfTU9EVUxFLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKICNlbmRpZgotICAgICAgbmFtZTpCT0FSRE5BTUUsCi0gICAgICBwcm9iZTp1c2JkdXhmYXN0c3ViX3Byb2JlLAotICAgICAgZGlzY29ubmVjdDp1c2JkdXhmYXN0c3ViX2Rpc2Nvbm5lY3QsCi0gICAgICBpZF90YWJsZTp1c2JkdXhmYXN0c3ViX3RhYmxlLAorCS5uYW1lCQk9IEJPQVJETkFNRSwKKwkucHJvYmUJCT0gdXNiZHV4ZmFzdHN1Yl9wcm9iZSwKKwkuZGlzY29ubmVjdAk9IHVzYmR1eGZhc3RzdWJfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUJPSB1c2JkdXhmYXN0c3ViX3RhYmxlCiB9OwogCi0vLyBDYW4ndCB1c2UgdGhlIG5pY2UgbWFjcm8gYXMgSSBoYXZlIGFsc28gdG8gaW5pdGlhbGlzZSB0aGUgVVNCCi0vLyBzdWJzeXN0ZW06Ci0vLyByZWdpc3RlcmluZyB0aGUgdXNiLXN5c3RlbSBfYW5kXyB0aGUgY29tZWRpLWRyaXZlcgotc3RhdGljIGludCBpbml0X3VzYmR1eGZhc3Qodm9pZCkKKy8qCisgKiBDYW4ndCB1c2UgdGhlIG5pY2UgbWFjcm8gYXMgSSBoYXZlIGFsc28gdG8gaW5pdGlhbGlzZSB0aGUgVVNCIHN1YnN5c3RlbToKKyAqIHJlZ2lzdGVyaW5nIHRoZSB1c2Itc3lzdGVtIF9hbmRfIHRoZSBjb21lZGktZHJpdmVyCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGluaXRfdXNiZHV4ZmFzdCh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIgotCSAgICAgICBEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MgIlxuIik7Ci0JaW5pdF91c2JfZGV2aWNlcygpOworCXByaW50ayhLRVJOX0lORk8KKwkgICAgICAgS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIgRFJJVkVSX0RFU0MgIlxuIik7CiAJdXNiX3JlZ2lzdGVyKCZ1c2JkdXhmYXN0c3ViX2RyaXZlcik7CiAJY29tZWRpX2RyaXZlcl9yZWdpc3RlcigmZHJpdmVyX3VzYmR1eGZhc3QpOwogCXJldHVybiAwOwogfQogCi0vLyBkZXJlZ2lzdGVyaW5nIHRoZSBjb21lZGkgZHJpdmVyIGFuZCB0aGUgdXNiLXN1YnN5c3RlbQotc3RhdGljIHZvaWQgZXhpdF91c2JkdXhmYXN0KHZvaWQpCisvKgorICogZGVyZWdpc3RlcmluZyB0aGUgY29tZWRpIGRyaXZlciBhbmQgdGhlIHVzYi1zdWJzeXN0ZW0KKyAqLworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfdXNiZHV4ZmFzdCh2b2lkKQogewogCWNvbWVkaV9kcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyX3VzYmR1eGZhc3QpOwogCXVzYl9kZXJlZ2lzdGVyKCZ1c2JkdXhmYXN0c3ViX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2ludGVycnVwdC5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9pbnRlcnJ1cHQuaAppbmRleCAzMDM4ZTQ2Li5kMWYwOTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2ludGVycnVwdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvaW50ZXJydXB0LmgKQEAgLTIxLDE1ICsyMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQotI2lmbmRlZiBJUlFfTk9ORQotdHlwZWRlZiB2b2lkIGlycXJldHVybl90OwotI2RlZmluZSBJUlFfTk9ORQotI2RlZmluZSBJUlFfSEFORExFRAotI2RlZmluZSBJUlFfUkVUVkFMKHgpICh2b2lkKSh4KQotI2VuZGlmCi0KICNpZm5kZWYgSVJRRl9ESVNBQkxFRAogI2RlZmluZSBJUlFGX0RJU0FCTEVEICAgICAgICAgICBTQV9JTlRFUlJVUFQKICNkZWZpbmUgSVJRRl9TQU1QTEVfUkFORE9NICAgICAgU0FfU0FNUExFX1JBTkRPTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9kYXRhLmMKaW5kZXggNzlhZWMyMC4uOTc5N2UxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2RhdGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIvZGF0YS5jCkBAIC0yNywxMCArMjcsMTAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCi1pbnQgY29tZWRpX2RhdGFfd3JpdGUoY29tZWRpX3QgKiBkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAotCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIGxzYW1wbF90IGRhdGEpCitpbnQgY29tZWRpX2RhdGFfd3JpdGUodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKKwl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCB1bnNpZ25lZCBpbnQgZGF0YSkKIHsKLQljb21lZGlfaW5zbiBpbnNuOworCXN0cnVjdCBjb21lZGlfaW5zbiBpbnNuOwogCiAJbWVtc2V0KCZpbnNuLCAwLCBzaXplb2YoaW5zbikpOwogCWluc24uaW5zbiA9IElOU05fV1JJVEU7CkBAIC00MiwxMCArNDIsMTAgQEAKIAlyZXR1cm4gY29tZWRpX2RvX2luc24oZGV2LCAmaW5zbik7CiB9CiAKLWludCBjb21lZGlfZGF0YV9yZWFkKGNvbWVkaV90ICogZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKLQl1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmLCBsc2FtcGxfdCAqIGRhdGEpCitpbnQgY29tZWRpX2RhdGFfcmVhZCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsIHVuc2lnbmVkIGludCBjaGFuLAorCXVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsIHVuc2lnbmVkIGludCAqZGF0YSkKIHsKLQljb21lZGlfaW5zbiBpbnNuOworCXN0cnVjdCBjb21lZGlfaW5zbiBpbnNuOwogCiAJbWVtc2V0KCZpbnNuLCAwLCBzaXplb2YoaW5zbikpOwogCWluc24uaW5zbiA9IElOU05fUkVBRDsKQEAgLTU3LDExICs1NywxMSBAQAogCXJldHVybiBjb21lZGlfZG9faW5zbihkZXYsICZpbnNuKTsKIH0KIAotaW50IGNvbWVkaV9kYXRhX3JlYWRfaGludChjb21lZGlfdCAqIGRldiwgdW5zaWduZWQgaW50IHN1YmRldiwKK2ludCBjb21lZGlfZGF0YV9yZWFkX2hpbnQodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LAogCXVuc2lnbmVkIGludCBjaGFuLCB1bnNpZ25lZCBpbnQgcmFuZ2UsIHVuc2lnbmVkIGludCBhcmVmKQogewotCWNvbWVkaV9pbnNuIGluc247Ci0JbHNhbXBsX3QgZHVtbXlfZGF0YTsKKwlzdHJ1Y3QgY29tZWRpX2luc24gaW5zbjsKKwl1bnNpZ25lZCBpbnQgZHVtbXlfZGF0YTsKIAogCW1lbXNldCgmaW5zbiwgMCwgc2l6ZW9mKGluc24pKTsKIAlpbnNuLmluc24gPSBJTlNOX1JFQUQ7CkBAIC03Myw5ICs3Myw5IEBACiAJcmV0dXJuIGNvbWVkaV9kb19pbnNuKGRldiwgJmluc24pOwogfQogCi1pbnQgY29tZWRpX2RhdGFfcmVhZF9kZWxheWVkKGNvbWVkaV90ICogZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LAoraW50IGNvbWVkaV9kYXRhX3JlYWRfZGVsYXllZCh2b2lkICpkZXYsIHVuc2lnbmVkIGludCBzdWJkZXYsCiAJdW5zaWduZWQgaW50IGNoYW4sIHVuc2lnbmVkIGludCByYW5nZSwgdW5zaWduZWQgaW50IGFyZWYsCi0JbHNhbXBsX3QgKiBkYXRhLCB1bnNpZ25lZCBpbnQgbmFub19zZWMpCisJdW5zaWduZWQgaW50ICpkYXRhLCB1bnNpZ25lZCBpbnQgbmFub19zZWMpCiB7CiAJaW50IHJldHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2Rpby5jCmluZGV4IGE5ZjQ4OGEuLjg1OTU1NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIvZGlvLmMKQEAgLTI2LDEwICsyNiwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKLWludCBjb21lZGlfZGlvX2NvbmZpZyhjb21lZGlfdCAqIGRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCitpbnQgY29tZWRpX2Rpb19jb25maWcodm9pZCAqZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKIAl1bnNpZ25lZCBpbnQgaW8pCiB7Ci0JY29tZWRpX2luc24gaW5zbjsKKwlzdHJ1Y3QgY29tZWRpX2luc24gaW5zbjsKIAogCW1lbXNldCgmaW5zbiwgMCwgc2l6ZW9mKGluc24pKTsKIAlpbnNuLmluc24gPSBJTlNOX0NPTkZJRzsKQEAgLTQxLDEwICs0MSwxMCBAQAogCXJldHVybiBjb21lZGlfZG9faW5zbihkZXYsICZpbnNuKTsKIH0KIAotaW50IGNvbWVkaV9kaW9fcmVhZChjb21lZGlfdCAqIGRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCitpbnQgY29tZWRpX2Rpb19yZWFkKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCiAJdW5zaWduZWQgaW50ICp2YWwpCiB7Ci0JY29tZWRpX2luc24gaW5zbjsKKwlzdHJ1Y3QgY29tZWRpX2luc24gaW5zbjsKIAogCW1lbXNldCgmaW5zbiwgMCwgc2l6ZW9mKGluc24pKTsKIAlpbnNuLmluc24gPSBJTlNOX1JFQUQ7CkBAIC01NiwxMCArNTYsMTAgQEAKIAlyZXR1cm4gY29tZWRpX2RvX2luc24oZGV2LCAmaW5zbik7CiB9CiAKLWludCBjb21lZGlfZGlvX3dyaXRlKGNvbWVkaV90ICogZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgY2hhbiwKK2ludCBjb21lZGlfZGlvX3dyaXRlKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IGNoYW4sCiAJdW5zaWduZWQgaW50IHZhbCkKIHsKLQljb21lZGlfaW5zbiBpbnNuOworCXN0cnVjdCBjb21lZGlfaW5zbiBpbnNuOwogCiAJbWVtc2V0KCZpbnNuLCAwLCBzaXplb2YoaW5zbikpOwogCWluc24uaW5zbiA9IElOU05fV1JJVEU7CkBAIC03MSwxMSArNzEsMTEgQEAKIAlyZXR1cm4gY29tZWRpX2RvX2luc24oZGV2LCAmaW5zbik7CiB9CiAKLWludCBjb21lZGlfZGlvX2JpdGZpZWxkKGNvbWVkaV90ICogZGV2LCB1bnNpZ25lZCBpbnQgc3ViZGV2LCB1bnNpZ25lZCBpbnQgbWFzaywKK2ludCBjb21lZGlfZGlvX2JpdGZpZWxkKHZvaWQgKmRldiwgdW5zaWduZWQgaW50IHN1YmRldiwgdW5zaWduZWQgaW50IG1hc2ssCiAJdW5zaWduZWQgaW50ICpiaXRzKQogewotCWNvbWVkaV9pbnNuIGluc247Ci0JbHNhbXBsX3QgZGF0YVsyXTsKKwlzdHJ1Y3QgY29tZWRpX2luc24gaW5zbjsKKwl1bnNpZ25lZCBpbnQgZGF0YVsyXTsKIAlpbnQgcmV0OwogCiAJbWVtc2V0KCZpbnNuLCAwLCBzaXplb2YoaW5zbikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2dldC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2dldC5jCmluZGV4IDIwMDRhZDQuLmI2YjcyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9nZXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIvZ2V0LmMKQEAgLTI2LDUxICsyNiw1MSBAQAogI2luY2x1ZGUgIi4uL2NvbWVkaWxpYi5oIgogI2luY2x1ZGUgIi4uL2NvbWVkaWRldi5oIgogCi1pbnQgY29tZWRpX2dldF9uX3N1YmRldmljZXMoY29tZWRpX3QgKiBkKQoraW50IGNvbWVkaV9nZXRfbl9zdWJkZXZpY2VzKHZvaWQgKmQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CiAKIAlyZXR1cm4gZGV2LT5uX3N1YmRldmljZXM7CiB9CiAKLWludCBjb21lZGlfZ2V0X3ZlcnNpb25fY29kZShjb21lZGlfdCAqIGQpCitpbnQgY29tZWRpX2dldF92ZXJzaW9uX2NvZGUodm9pZCAqZCkKIHsKIAlyZXR1cm4gQ09NRURJX1ZFUlNJT05fQ09ERTsKIH0KIAotY29uc3QgY2hhciAqY29tZWRpX2dldF9kcml2ZXJfbmFtZShjb21lZGlfdCAqIGQpCitjb25zdCBjaGFyICpjb21lZGlfZ2V0X2RyaXZlcl9uYW1lKHZvaWQgKiBkKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOwogCiAJcmV0dXJuIGRldi0+ZHJpdmVyLT5kcml2ZXJfbmFtZTsKIH0KIAotY29uc3QgY2hhciAqY29tZWRpX2dldF9ib2FyZF9uYW1lKGNvbWVkaV90ICogZCkKK2NvbnN0IGNoYXIgKmNvbWVkaV9nZXRfYm9hcmRfbmFtZSh2b2lkICogZCkKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKIAogCXJldHVybiBkZXYtPmJvYXJkX25hbWU7CiB9CiAKLWludCBjb21lZGlfZ2V0X3N1YmRldmljZV90eXBlKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK2ludCBjb21lZGlfZ2V0X3N1YmRldmljZV90eXBlKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCXJldHVybiBzLT50eXBlOwogfQogCi11bnNpZ25lZCBpbnQgY29tZWRpX2dldF9zdWJkZXZpY2VfZmxhZ3MoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQordW5zaWduZWQgaW50IGNvbWVkaV9nZXRfc3ViZGV2aWNlX2ZsYWdzKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCXJldHVybiBzLT5zdWJkZXZfZmxhZ3M7CiB9CiAKLWludCBjb21lZGlfZmluZF9zdWJkZXZpY2VfYnlfdHlwZShjb21lZGlfdCAqIGQsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgc3ViZCkKK2ludCBjb21lZGlfZmluZF9zdWJkZXZpY2VfYnlfdHlwZSh2b2lkICpkLCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHN1YmQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CiAKIAlpZiAoc3ViZCA+IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTgyLDI3ICs4MiwyNyBAQAogCXJldHVybiAtMTsKIH0KIAotaW50IGNvbWVkaV9nZXRfbl9jaGFubmVscyhjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX2dldF9uX2NoYW5uZWxzKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAogCXJldHVybiBzLT5uX2NoYW47CiB9CiAKLWludCBjb21lZGlfZ2V0X2xlbl9jaGFubGlzdChjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX2dldF9sZW5fY2hhbmxpc3Qodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJcmV0dXJuIHMtPmxlbl9jaGFubGlzdDsKIH0KIAotbHNhbXBsX3QgY29tZWRpX2dldF9tYXhkYXRhKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKK3Vuc2lnbmVkIGludCBjb21lZGlfZ2V0X21heGRhdGEodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKIAl1bnNpZ25lZCBpbnQgY2hhbikKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJaWYgKHMtPm1heGRhdGFfbGlzdCkKIAkJcmV0dXJuIHMtPm1heGRhdGFfbGlzdFtjaGFuXTsKQEAgLTExMSwxMSArMTExLDExIEBACiB9CiAKICNpZmRlZiBLQ09NRURJTElCX0RFUFJFQ0FURUQKLWludCBjb21lZGlfZ2V0X3JhbmdldHlwZShjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCitpbnQgY29tZWRpX2dldF9yYW5nZXR5cGUodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKIAl1bnNpZ25lZCBpbnQgY2hhbikKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCWludCByZXQ7CiAKIAlpZiAocy0+cmFuZ2VfdGFibGVfbGlzdCkgewpAQCAtMTMwLDEwICsxMzAsMTAgQEAKIH0KICNlbmRpZgogCi1pbnQgY29tZWRpX2dldF9uX3Jhbmdlcyhjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsIHVuc2lnbmVkIGludCBjaGFuKQoraW50IGNvbWVkaV9nZXRfbl9yYW5nZXModm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKIAlpbnQgcmV0OwogCiAJaWYgKHMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKQEAgLTE0OCwyMiArMTQ4LDIyIEBACiAvKgogICogQUxQSEEgKG5vbi1wb3J0YWJsZSkKICovCi1pbnQgY29tZWRpX2dldF9rcmFuZ2UoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB1bnNpZ25lZCBpbnQgY2hhbiwKLQl1bnNpZ25lZCBpbnQgcmFuZ2UsIGNvbWVkaV9rcmFuZ2UgKiBrcmFuZ2UpCitpbnQgY29tZWRpX2dldF9rcmFuZ2Uodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwgdW5zaWduZWQgaW50IGNoYW4sCisJdW5zaWduZWQgaW50IHJhbmdlLCBzdHJ1Y3QgY29tZWRpX2tyYW5nZSAqa3JhbmdlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKLQljb25zdCBjb21lZGlfbHJhbmdlICpscjsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKmxyOwogCiAJaWYgKHMtPnJhbmdlX3RhYmxlX2xpc3QpIHsKIAkJbHIgPSBzLT5yYW5nZV90YWJsZV9saXN0W2NoYW5dOwogCX0gZWxzZSB7CiAJCWxyID0gcy0+cmFuZ2VfdGFibGU7CiAJfQotCWlmIChyYW5nZSA+PSBsci0+bGVuZ3RoKSB7CisJaWYgKHJhbmdlID49IGxyLT5sZW5ndGgpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KLQltZW1jcHkoa3JhbmdlLCBsci0+cmFuZ2UgKyByYW5nZSwgc2l6ZW9mKGNvbWVkaV9rcmFuZ2UpKTsKKworCW1lbWNweShrcmFuZ2UsIGxyLT5yYW5nZSArIHJhbmdlLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9rcmFuZ2UpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTcxLDExICsxNzEsMTEgQEAKIC8qCiAgKiBBTFBIQSAobWF5IGJlIHJlbmFtZWQpCiAqLwotdW5zaWduZWQgaW50IGNvbWVkaV9nZXRfYnVmX2hlYWRfcG9zKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK3Vuc2lnbmVkIGludCBjb21lZGlfZ2V0X2J1Zl9oZWFkX3Bvcyh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAogCWFzeW5jID0gcy0+YXN5bmM7CiAJaWYgKGFzeW5jID09IE5VTEwpCkBAIC0xODQsMTEgKzE4NCwxMSBAQAogCXJldHVybiBhc3luYy0+YnVmX3dyaXRlX2NvdW50OwogfQogCi1pbnQgY29tZWRpX2dldF9idWZmZXJfY29udGVudHMoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQoraW50IGNvbWVkaV9nZXRfYnVmZmVyX2NvbnRlbnRzKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCXVuc2lnbmVkIGludCBudW1fYnl0ZXM7CiAKIAlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQpAQCAtMjAzLDEyICsyMDMsMTIgQEAKIC8qCiAgKiBBTFBIQQogKi8KLWludCBjb21lZGlfc2V0X3VzZXJfaW50X2NvdW50KGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKK2ludCBjb21lZGlfc2V0X3VzZXJfaW50X2NvdW50KHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCiAJdW5zaWduZWQgaW50IGJ1Zl91c2VyX2NvdW50KQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAlpbnQgbnVtX2J5dGVzOwogCiAJYXN5bmMgPSBzLT5hc3luYzsKQEAgLTIyNCwxMiArMjI0LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjb21lZGlfbWFya19idWZmZXJfcmVhZChjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCitpbnQgY29tZWRpX21hcmtfYnVmZmVyX3JlYWQodm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKIAl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAogCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpCiAJCXJldHVybiAtMTsKQEAgLTI0MywxMiArMjQzLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjb21lZGlfbWFya19idWZmZXJfd3JpdHRlbihjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCitpbnQgY29tZWRpX21hcmtfYnVmZmVyX3dyaXR0ZW4odm9pZCAqZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSwKIAl1bnNpZ25lZCBpbnQgbnVtX2J5dGVzKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldmljZTsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAlpbnQgYnl0ZXNfd3JpdHRlbjsKIAogCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpCkBAIC0yNjMsMTEgKzI2MywxMSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgY29tZWRpX2dldF9idWZmZXJfc2l6ZShjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXYpCitpbnQgY29tZWRpX2dldF9idWZmZXJfc2l6ZSh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2KQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIHN1YmRldjsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAogCWlmIChzdWJkZXYgPj0gZGV2LT5uX3N1YmRldmljZXMpCiAJCXJldHVybiAtMTsKQEAgLTI3OCwxMSArMjc4LDExIEBACiAJcmV0dXJuIGFzeW5jLT5wcmVhbGxvY19idWZzejsKIH0KIAotaW50IGNvbWVkaV9nZXRfYnVmZmVyX29mZnNldChjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX2dldF9idWZmZXJfb2Zmc2V0KHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCiAJaWYgKHN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tjb21lZGlsaWJfbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tjb21lZGlsaWJfbWFpbi5jCmluZGV4IDUxMGZiZGMuLmE0ZmE5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9rY29tZWRpbGliX21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2tjb21lZGlsaWIva2NvbWVkaWxpYl9tYWluLmMKQEAgLTQyLDEwICs0MiwxMCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkga2VybmVsIGxpYnJhcnkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotY29tZWRpX3QgKmNvbWVkaV9vcGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQordm9pZCAqY29tZWRpX29wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvOwotCWNvbWVkaV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2OwogCXVuc2lnbmVkIGludCBtaW5vcjsKIAogCWlmIChzdHJuY21wKGZpbGVuYW1lLCAiL2Rldi9jb21lZGkiLCAxMSkgIT0gMCkKQEAgLTU3LDQxICs1Nyw0MSBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWRldl9maWxlX2luZm8gPSBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwotCWlmKGRldl9maWxlX2luZm8gPT0gTlVMTCkKKwlpZiAoZGV2X2ZpbGVfaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAlkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CiAKLQlpZihkZXYgPT0gTlVMTCB8fCAhZGV2LT5hdHRhY2hlZCkKKwlpZiAoZGV2ID09IE5VTEwgfHwgIWRldi0+YXR0YWNoZWQpCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKCF0cnlfbW9kdWxlX2dldChkZXYtPmRyaXZlci0+bW9kdWxlKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZXR1cm4gKGNvbWVkaV90ICopIGRldjsKKwlyZXR1cm4gKHZvaWQgKikgZGV2OwogfQogCi1jb21lZGlfdCAqY29tZWRpX29wZW5fb2xkKHVuc2lnbmVkIGludCBtaW5vcikKK3ZvaWQgKmNvbWVkaV9vcGVuX29sZCh1bnNpZ25lZCBpbnQgbWlub3IpCiB7CiAJc3RydWN0IGNvbWVkaV9kZXZpY2VfZmlsZV9pbmZvICpkZXZfZmlsZV9pbmZvOwotCWNvbWVkaV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2OwogCiAJaWYgKG1pbm9yID49IENPTUVESV9OVU1fTUlOT1JTKQogCQlyZXR1cm4gTlVMTDsKIAogCWRldl9maWxlX2luZm8gPSBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8obWlub3IpOwotCWlmKGRldl9maWxlX2luZm8gPT0gTlVMTCkKKwlpZiAoZGV2X2ZpbGVfaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAlkZXYgPSBkZXZfZmlsZV9pbmZvLT5kZXZpY2U7CiAKLQlpZihkZXYgPT0gTlVMTCB8fCAhZGV2LT5hdHRhY2hlZCkKKwlpZiAoZGV2ID09IE5VTEwgfHwgIWRldi0+YXR0YWNoZWQpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIChjb21lZGlfdCAqKSBkZXY7CisJcmV0dXJuICh2b2lkICopIGRldjsKIH0KIAotaW50IGNvbWVkaV9jbG9zZShjb21lZGlfdCAqIGQpCitpbnQgY29tZWRpX2Nsb3NlKHZvaWQgKmQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CiAKIAltb2R1bGVfcHV0KGRldi0+ZHJpdmVyLT5tb2R1bGUpOwogCkBAIC0xMTMsMTkgKzExMywxOSBAQAogCXJldHVybiAidW5rbm93biBlcnJvciI7CiB9CiAKLWludCBjb21lZGlfZmlsZW5vKGNvbWVkaV90ICogZCkKK2ludCBjb21lZGlfZmlsZW5vKHZvaWQgKmQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CiAKIAkvKiByZXR1cm4gc29tZXRoaW5nIHJhbmRvbSAqLwogCXJldHVybiBkZXYtPm1pbm9yOwogfQogCi1pbnQgY29tZWRpX2NvbW1hbmQoY29tZWRpX3QgKiBkLCBjb21lZGlfY21kICogY21kKQoraW50IGNvbWVkaV9jb21tYW5kKHZvaWQgKmQsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCXVuc2lnbmVkIHJ1bmZsYWdzOwogCiAJaWYgKGNtZC0+c3ViZGV2ID49IGRldi0+bl9zdWJkZXZpY2VzKQpAQCAtMTYxLDEwICsxNjEsMTAgQEAKIAlyZXR1cm4gcy0+ZG9fY21kKGRldiwgcyk7CiB9CiAKLWludCBjb21lZGlfY29tbWFuZF90ZXN0KGNvbWVkaV90ICogZCwgY29tZWRpX2NtZCAqIGNtZCkKK2ludCBjb21lZGlfY29tbWFuZF90ZXN0KHZvaWQgKmQsIHN0cnVjdCBjb21lZGlfY21kICpjbWQpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAogCWlmIChjbWQtPnN1YmRldiA+PSBkZXYtPm5fc3ViZGV2aWNlcykKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xODMsMTAgKzE4MywxMCBAQAogICoJQ09NRURJX0lOU04KICAqCXBlcmZvcm0gYW4gaW5zdHJ1Y3Rpb24KICAqLwotaW50IGNvbWVkaV9kb19pbnNuKGNvbWVkaV90ICogZCwgY29tZWRpX2luc24gKiBpbnNuKQoraW50IGNvbWVkaV9kb19pbnNuKHZvaWQgKmQsIHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbikKIHsKLQljb21lZGlfZGV2aWNlICpkZXYgPSAoY29tZWRpX2RldmljZSAqKSBkOwotCWNvbWVkaV9zdWJkZXZpY2UgKnM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCWludCByZXQgPSAwOwogCiAJaWYgKGluc24tPmluc24gJiBJTlNOX01BU0tfU1BFQ0lBTCkgewpAQCAtMjU2LDcgKzI1Niw4IEBACiAKIAkJLyogWFhYIGNoZWNrIGxvY2sgKi8KIAotCQlpZiAoKHJldCA9IGNoZWNrX2NoYW5saXN0KHMsIDEsICZpbnNuLT5jaGFuc3BlYykpIDwgMCkgeworCQlyZXQgPSBjaGVja19jaGFubGlzdChzLCAxLCAmaW5zbi0+Y2hhbnNwZWMpOworCQlpZiAocmV0IDwgMCkgewogCQkJcnRfcHJpbnRrKCJiYWQgY2hhbnNwZWNcbiIpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gZXJyb3I7CkBAIC0zMjMsMTYgKzMyNCwxNiBAQAogCS0gbG9jayB3aGlsZSBzdWJkZXZpY2UgYmVpbmcgcHJvZ3JhbW1lZAogCiAqLwotaW50IGNvbWVkaV9sb2NrKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK2ludCBjb21lZGlfbG9jayh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBjb21lZGlfZGV2aWNlICopIGQ7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJY29tZWRpX3NwaW5fbG9ja19pcnFzYXZlKCZzLT5zcGluX2xvY2ssIGZsYWdzKTsKQEAgLTM2NiwxNyArMzY3LDE3IEBACiAJCW5vbmUKIAogKi8KLWludCBjb21lZGlfdW5sb2NrKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK2ludCBjb21lZGlfdW5sb2NrKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CiAJaW50IHJldDsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJYXN5bmMgPSBzLT5hc3luYzsKQEAgLTQxOCwxNSArNDE5LDE1IEBACiAJCW5vdGhpbmcKIAogKi8KLWludCBjb21lZGlfY2FuY2VsKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK2ludCBjb21lZGlfY2FuY2VsKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJaWYgKHMtPmxvY2sgJiYgcy0+bG9jayAhPSBkKQpAQCAtNDQzLDEzICs0NDQsMTUgQEAKIAlpZiAoIXMtPmNhbmNlbCB8fCAhcy0+YXN5bmMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKChyZXQgPSBzLT5jYW5jZWwoZGV2LCBzKSkpCisJcmV0ID0gcy0+Y2FuY2VsKGRldiwgcyk7CisKKwlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAjaWZkZWYgQ09ORklHX0NPTUVESV9SVAotCWlmIChjb21lZGlfZ2V0X3N1YmRldmljZV9ydW5mbGFncyhzKSAmIFNSRl9SVCkgeworCWlmIChjb21lZGlfZ2V0X3N1YmRldmljZV9ydW5mbGFncyhzKSAmIFNSRl9SVCkKIAkJY29tZWRpX3N3aXRjaF90b19ub25fcnQoZGV2KTsKLQl9CisKICNlbmRpZgogCWNvbWVkaV9zZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHMsIFNSRl9SVU5OSU5HIHwgU1JGX1JULCAwKTsKIAlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CkBAIC00NjEsMTYgKzQ2NCwxNiBAQAogLyoKICAgIHJlZ2lzdHJhdGlvbiBvZiBjYWxsYmFjayBmdW5jdGlvbnMKICAqLwotaW50IGNvbWVkaV9yZWdpc3Rlcl9jYWxsYmFjayhjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCitpbnQgY29tZWRpX3JlZ2lzdGVyX2NhbGxiYWNrKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UsCiAJdW5zaWduZWQgaW50IG1hc2ssIGludCAoKmNiKSAodW5zaWduZWQgaW50LCB2b2lkICopLCB2b2lkICphcmcpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOwotCWNvbWVkaV9hc3luYyAqYXN5bmM7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgY29tZWRpX2RldmljZSAqKSBkOworCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwogCi0JaWYgKHN1YmRldmljZSA+PSBkZXYtPm5fc3ViZGV2aWNlcykgeworCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwogCXMgPSBkZXYtPnN1YmRldmljZXMgKyBzdWJkZXZpY2U7CiAKIAlhc3luYyA9IHMtPmFzeW5jOwpAQCAtNDk4LDE1ICs1MDEsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGNvbWVkaV9wb2xsKGNvbWVkaV90ICogZCwgdW5zaWduZWQgaW50IHN1YmRldmljZSkKK2ludCBjb21lZGlfcG9sbCh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlKQogewotCWNvbWVkaV9kZXZpY2UgKmRldiA9IChjb21lZGlfZGV2aWNlICopIGQ7Ci0JY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlczsKLQljb21lZGlfYXN5bmMgKmFzeW5jOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlczsKKwlzdHJ1Y3QgY29tZWRpX2FzeW5jICphc3luYzsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJYXN5bmMgPSBzLT5hc3luYzsKQEAgLTUyNSwyMiArNTI4LDIxIEBACiB9CiAKIC8qIFdBUk5JTkc6IG5vdCBwb3J0YWJsZSAqLwotaW50IGNvbWVkaV9tYXAoY29tZWRpX3QgKiBkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB2b2lkICpwdHIpCitpbnQgY29tZWRpX21hcCh2b2lkICpkLCB1bnNpZ25lZCBpbnQgc3ViZGV2aWNlLCB2b2lkICpwdHIpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJaWYgKCFzLT5hc3luYykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAocHRyKSB7CisJaWYgKHB0cikKIAkJKigodm9pZCAqKilwdHIpID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZjsKLQl9CiAKIAkvKiBYWFggbm8gcmVmZXJlbmNlIGNvdW50aW5nICovCiAKQEAgLTU0OCwxNCArNTUwLDE0IEBACiB9CiAKIC8qIFdBUk5JTkc6IG5vdCBwb3J0YWJsZSAqLwotaW50IGNvbWVkaV91bm1hcChjb21lZGlfdCAqIGQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCitpbnQgY29tZWRpX3VubWFwKHZvaWQgKmQsIHVuc2lnbmVkIGludCBzdWJkZXZpY2UpCiB7Ci0JY29tZWRpX2RldmljZSAqZGV2ID0gKGNvbWVkaV9kZXZpY2UgKikgZDsKLQljb21lZGlfc3ViZGV2aWNlICpzOworCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSAoc3RydWN0IGNvbWVkaV9kZXZpY2UgKikgZDsKKwlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqczsKIAotCWlmIChzdWJkZXZpY2UgPj0gZGV2LT5uX3N1YmRldmljZXMpIHsKKwlpZiAoc3ViZGV2aWNlID49IGRldi0+bl9zdWJkZXZpY2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgc3ViZGV2aWNlOwogCiAJaWYgKCFzLT5hc3luYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkva2NvbWVkaWxpYi9rc3ltcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tzeW1zLmMKaW5kZXggNzZiNDUwNi4uM2RiODZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tzeW1zLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9rY29tZWRpbGliL2tzeW1zLmMKQEAgLTQwLDggKzQwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSAweDAyMDIwMAotCiAvKiBmdW5jdGlvbnMgc3BlY2lmaWMgdG8ga2NvbWVkaWxpYiAqLwogCiBFWFBPUlRfU1lNQk9MKGNvbWVkaV9yZWdpc3Rlcl9jYWxsYmFjayk7CkBAIC0xNDAsNSArMTM4LDMgQEAKIAogLyogYWxwaGEgKi8KIC8vRVhQT1JUX1NZTUJPTChjb21lZGlfc2V0X2dsb2JhbF9vb3JfYmVoYXZpb3IpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcGNpX2lkcy5oIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9wY2lfaWRzLmgKaW5kZXggYzYxYmE5MC4uZDk3OWFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9wY2lfaWRzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9wY2lfaWRzLmgKQEAgLTI4LDQgKzI4LDQgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUFOQ09NX0dQSUIJMHgzMzAyCiAjZW5kaWYKIAotI2VuZGlmIC8vIF9fQ09NUEFUX0xJTlVYX1BDSV9JRFNfSAorI2VuZGlmIC8qIF9fQ09NUEFUX0xJTlVYX1BDSV9JRFNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9wcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3Byb2MuYwppbmRleCA1YTJiNzJkLi4zNmFlMmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3Byb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3Byb2MuYwpAQCAtMzEsMTIgKzMxLDEyIEBACiAjZGVmaW5lIF9fTk9fVkVSU0lPTl9fCiAjaW5jbHVkZSAiY29tZWRpZGV2LmgiCiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotLy8jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisvKiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+ICovCiAKIGludCBjb21lZGlfcmVhZF9wcm9jbWVtKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW4sCiAJaW50ICplb2YsIHZvaWQgKmRhdGEpOwogCi1leHRlcm4gY29tZWRpX2RyaXZlciAqY29tZWRpX2RyaXZlcnM7CitleHRlcm4gc3RydWN0IGNvbWVkaV9kcml2ZXIgKmNvbWVkaV9kcml2ZXJzOwogCiBpbnQgY29tZWRpX3JlYWRfcHJvY21lbShjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuLAogCWludCAqZW9mLCB2b2lkICpkYXRhKQpAQCAtNDQsNyArNDQsNyBAQAogCWludCBpOwogCWludCBkZXZpY2VzX3EgPSAwOwogCWludCBsID0gMDsKLQljb21lZGlfZHJpdmVyICpkcml2OworCXN0cnVjdCBjb21lZGlfZHJpdmVyICpkcml2OwogCiAJbCArPSBzcHJpbnRmKGJ1ZiArIGwsCiAJCSJjb21lZGkgdmVyc2lvbiAiIENPTUVESV9SRUxFQVNFICJcbiIKQEAgLTUzLDkgKzUzLDEwIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQ09NRURJX05VTV9CT0FSRF9NSU5PUlM7IGkrKykgewogCQlzdHJ1Y3QgY29tZWRpX2RldmljZV9maWxlX2luZm8gKmRldl9maWxlX2luZm8gPSBjb21lZGlfZ2V0X2RldmljZV9maWxlX2luZm8oaSk7Ci0JCWNvbWVkaV9kZXZpY2UgKmRldjsKKwkJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldjsKIAotCQlpZihkZXZfZmlsZV9pbmZvID09IE5VTEwpIGNvbnRpbnVlOworCQlpZiAoZGV2X2ZpbGVfaW5mbyA9PSBOVUxMKQorCQkJY29udGludWU7CiAJCWRldiA9IGRldl9maWxlX2luZm8tPmRldmljZTsKIAogCQlpZiAoZGV2LT5hdHRhY2hlZCkgewpAQCAtNjYsOSArNjcsOCBAQAogCQkJCWRldi0+Ym9hcmRfbmFtZSwgZGV2LT5uX3N1YmRldmljZXMpOwogCQl9CiAJfQotCWlmICghZGV2aWNlc19xKSB7CisJaWYgKCFkZXZpY2VzX3EpCiAJCWwgKz0gc3ByaW50ZihidWYgKyBsLCAibm8gZGV2aWNlc1xuIik7Ci0JfQogCiAJZm9yIChkcml2ID0gY29tZWRpX2RyaXZlcnM7IGRyaXY7IGRyaXYgPSBkcml2LT5uZXh0KSB7CiAJCWwgKz0gc3ByaW50ZihidWYgKyBsLCAiJXM6XG4iLCBkcml2LT5kcml2ZXJfbmFtZSk7CkBAIC03Nyw5ICs3Nyw4IEBACiAJCQkJKihjaGFyICoqKSgoY2hhciAqKWRyaXYtPmJvYXJkX25hbWUgKwogCQkJCQlpICogZHJpdi0+b2Zmc2V0KSk7CiAJCX0KLQkJaWYgKCFkcml2LT5udW1fbmFtZXMpIHsKKwkJaWYgKCFkcml2LT5udW1fbmFtZXMpCiAJCQlsICs9IHNwcmludGYoYnVmICsgbCwgIiAlc1xuIiwgZHJpdi0+ZHJpdmVyX25hbWUpOwotCQl9CiAJfQogCiAJcmV0dXJuIGw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3JhbmdlLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3JhbmdlLmMKaW5kZXggNjFkYzNjZC4uYWMyMDBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9yYW5nZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcmFuZ2UuYwpAQCAtMjQsMTIgKzI0LDEyIEBACiAjaW5jbHVkZSAiY29tZWRpZGV2LmgiCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyMTAgPSB7IDEsIHtCSVBfUkFOR0UoMTApfSB9OwotY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyNSA9IHsgMSwge0JJUF9SQU5HRSg1KX0gfTsKLWNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjJfNSA9IHsgMSwge0JJUF9SQU5HRSgyLjUpfSB9OwotY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmlwb2xhcjEwID0geyAxLCB7VU5JX1JBTkdFKDEwKX0gfTsKLWNvbnN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfdW5pcG9sYXI1ID0geyAxLCB7VU5JX1JBTkdFKDUpfSB9OwotY29uc3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmtub3duID0geyAxLCB7ezAsIDEwMDAwMDAsIFVOSVRfbm9uZX19IH07Citjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyMTAgPSB7IDEsIHtCSVBfUkFOR0UoMTApfSB9OworY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfYmlwb2xhcjUgPSB7IDEsIHtCSVBfUkFOR0UoNSl9IH07Citjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9iaXBvbGFyMl81ID0geyAxLCB7QklQX1JBTkdFKDIuNSl9IH07Citjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV91bmlwb2xhcjEwID0geyAxLCB7VU5JX1JBTkdFKDEwKX0gfTsKK2NvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3VuaXBvbGFyNSA9IHsgMSwge1VOSV9SQU5HRSg1KX0gfTsKK2NvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlIHJhbmdlX3Vua25vd24gPSB7IDEsIHt7MCwgMTAwMDAwMCwgVU5JVF9ub25lfX0gfTsKIAogLyoKICAgIAlDT01FRElfUkFOR0VJTkZPCkBAIC00MiwxNiArNDIsMTYgQEAKIAkJcmFuZ2UgaW5mbyBzdHJ1Y3R1cmUKIAogCXdyaXRlczoKLQkJbiBjb21lZGlfa3JhbmdlIHN0cnVjdHVyZXMgdG8gcmFuZ2VpbmZvLT5yYW5nZV9wdHIKKwkJbiBzdHJ1Y3QgY29tZWRpX2tyYW5nZSBzdHJ1Y3R1cmVzIHRvIHJhbmdlaW5mby0+cmFuZ2VfcHRyCiAqLwotaW50IGRvX3JhbmdlaW5mb19pb2N0bChjb21lZGlfZGV2aWNlICogZGV2LCBjb21lZGlfcmFuZ2VpbmZvICogYXJnKQoraW50IGRvX3JhbmdlaW5mb19pb2N0bChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3JhbmdlaW5mbyAqYXJnKQogewotCWNvbWVkaV9yYW5nZWluZm8gaXQ7CisJc3RydWN0IGNvbWVkaV9yYW5nZWluZm8gaXQ7CiAJaW50IHN1YmQsIGNoYW47Ci0JY29uc3QgY29tZWRpX2xyYW5nZSAqbHI7Ci0JY29tZWRpX3N1YmRldmljZSAqczsKKwljb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqbHI7CisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoJml0LCBhcmcsIHNpemVvZihjb21lZGlfcmFuZ2VpbmZvKSkpCisJaWYgKGNvcHlfZnJvbV91c2VyKCZpdCwgYXJnLCBzaXplb2Yoc3RydWN0IGNvbWVkaV9yYW5nZWluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJc3ViZCA9IChpdC5yYW5nZV90eXBlID4+IDI0KSAmIDB4ZjsKIAljaGFuID0gKGl0LnJhbmdlX3R5cGUgPj4gMTYpICYgMHhmZjsKQEAgLTc4LDE3ICs3OCwxNyBAQAogCX0KIAogCWlmIChjb3B5X3RvX3VzZXIoaXQucmFuZ2VfcHRyLCBsci0+cmFuZ2UsCi0JCQlzaXplb2YoY29tZWRpX2tyYW5nZSkgKiBsci0+bGVuZ3RoKSkKKwkJCXNpemVvZihzdHJ1Y3QgY29tZWRpX2tyYW5nZSkgKiBsci0+bGVuZ3RoKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhcmVmX2ludmFsaWQoY29tZWRpX3N1YmRldmljZSAqIHMsIHVuc2lnbmVkIGludCBjaGFuc3BlYykKK3N0YXRpYyBpbnQgYXJlZl9pbnZhbGlkKHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBpbnQgY2hhbnNwZWMpCiB7CiAJdW5zaWduZWQgaW50IGFyZWY7CiAKLQkvLyBkaXNhYmxlIHJlcG9ydGluZyBpbnZhbGlkIGFyZWZzLi4uIG1heWJlIHNvbWVkYXkKKwkvKiAgZGlzYWJsZSByZXBvcnRpbmcgaW52YWxpZCBhcmVmcy4uLiBtYXliZSBzb21lZGF5ICovCiAJcmV0dXJuIDA7CiAKIAlhcmVmID0gQ1JfQVJFRihjaGFuc3BlYyk7CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGVhY2ggZWxlbWVudCBpbiBhIGNoYW5uZWwvZ2FpbiBsaXN0IHRvIG1ha2UKICAgIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KICovCi1pbnQgY2hlY2tfY2hhbmxpc3QoY29tZWRpX3N1YmRldmljZSAqIHMsIGludCBuLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0KQoraW50IGNoZWNrX2NoYW5saXN0KHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCBpbnQgbiwgdW5zaWduZWQgaW50ICpjaGFubGlzdCkKIHsKIAlpbnQgaTsKIAlpbnQgY2hhbjsKQEAgLTEzNSw5ICsxMzUsOCBAQAogCQkJCQlpLCBjaGFubGlzdFtpXSwgcy0+bl9jaGFuLAogCQkJCQlzLT5yYW5nZV90YWJsZS0+bGVuZ3RoKTsKICNpZiAwCi0JCQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCiAJCQkJCXByaW50aygiWyVkXT0weCUwOHhcbiIsIGksIGNoYW5saXN0W2ldKTsKLQkJCQl9CiAjZW5kaWYKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcnQuYwppbmRleCAzODViODFiLi5lOWY1Nzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3J0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9ydC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJIGlycXJldHVybl90KCpoYW5kbGVyKSAoaW50IGlycSwgdm9pZCAqZGV2X2lkIFBUX1JFR1NfQVJHKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWNvbnN0IGNoYXIgKmRldmljZTsKLQljb21lZGlfZGV2aWNlICpkZXZfaWQ7CisJc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldl9pZDsKIH07CiAKIHN0YXRpYyBpbnQgY29tZWRpX3J0X2dldF9pcnEoc3RydWN0IGNvbWVkaV9pcnFfc3RydWN0ICppdCk7CkBAIC02Nyw3ICs2Nyw3IEBACiAKIGludCBjb21lZGlfcmVxdWVzdF9pcnEodW5zaWduZWQgaXJxLCBpcnFyZXR1cm5fdCgqaGFuZGxlcikgKGludCwKIAkJdm9pZCAqUFRfUkVHU19BUkcpLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpkZXZpY2UsCi0JY29tZWRpX2RldmljZSAqIGRldl9pZCkKKwlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2X2lkKQogewogCXN0cnVjdCBjb21lZGlfaXJxX3N0cnVjdCAqaXQ7CiAJaW50IHJldDsKQEAgLTc4LDE1ICs3OCwxNSBAQAogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBoYW5kbGVyLCB1bnNoYXJlZF9mbGFncywgZGV2aWNlLCBkZXZfaWQpOwogCWlmIChyZXQgPCAwKSB7Ci0JCS8vIHdlIGZhaWxlZCwgc28gZmFsbCBiYWNrIG9uIGFsbG93aW5nIHNoYXJlZCBpbnRlcnJ1cHQgKHdoaWNoIHdlIHdvbid0IGV2ZXIgbWFrZSBSVCkKKwkJLyogIHdlIGZhaWxlZCwgc28gZmFsbCBiYWNrIG9uIGFsbG93aW5nIHNoYXJlZCBpbnRlcnJ1cHQgKHdoaWNoIHdlIHdvbid0IGV2ZXIgbWFrZSBSVCkgKi8KIAkJaWYgKGZsYWdzICYgSVJRRl9TSEFSRUQpIHsKIAkJCXJ0X3ByaW50awogCQkJCSgiY29tZWRpOiBjYW5ub3QgZ2V0IHVuc2hhcmVkIGludGVycnVwdCwgd2lsbCBub3QgdXNlIFJUIGludGVycnVwdHMuXG4iKTsKIAkJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgaGFuZGxlciwgZmxhZ3MsIGRldmljZSwgZGV2X2lkKTsKIAkJfQotCQlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7Ci0JCX0KKwogCX0gZWxzZSB7CiAJCWl0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNvbWVkaV9pcnFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghaXQpCkBAIC0xMDIsNyArMTAyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBjb21lZGlfZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgY29tZWRpX2RldmljZSAqIGRldl9pZCkKK3ZvaWQgY29tZWRpX2ZyZWVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXZfaWQpCiB7CiAJc3RydWN0IGNvbWVkaV9pcnFfc3RydWN0ICppdDsKIApAQCAtMTIxLDcgKzEyMSw3IEBACiAJY29tZWRpX2lycXNbaXJxXSA9IE5VTEw7CiB9CiAKLWludCBjb21lZGlfc3dpdGNoX3RvX3J0KGNvbWVkaV9kZXZpY2UgKiBkZXYpCitpbnQgY29tZWRpX3N3aXRjaF90b19ydChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBjb21lZGlfaXJxX3N0cnVjdCAqaXQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGNvbWVkaV9zd2l0Y2hfdG9fbm9uX3J0KGNvbWVkaV9kZXZpY2UgKiBkZXYpCit2b2lkIGNvbWVkaV9zd2l0Y2hfdG9fbm9uX3J0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGNvbWVkaV9pcnFfc3RydWN0ICppdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCh3YWl0X3F1ZXVlX2hlYWRfdCAqKSBhcmcyKTsKIH0KIAotdm9pZCBjb21lZGlfcnRfcGVuZF93YWtldXAod2FpdF9xdWV1ZV9oZWFkX3QgKiBxKQordm9pZCBjb21lZGlfcnRfcGVuZF93YWtldXAod2FpdF9xdWV1ZV9oZWFkX3QgKnEpCiB7CiAJcnRfcGVuZF9jYWxsKHdha2VfdXBfaW50X2hhbmRsZXIsIDAsIHEpOwogfQpAQCAtMTgwLDcgKzE4MCw3IEBACiAKICNpZm5kZWYgSEFWRV9SVF9SRVFVRVNUX0lSUV9XSVRIX0FSRwogI2RlZmluZSBERUNMQVJFX1ZPSURfSVJRKGlycSkgXAotc3RhdGljIHZvaWQgaGFuZGxlX3ZvaWRfaXJxXyAjIyBpcnEgKHZvaWQpeyBoYW5kbGVfdm9pZF9pcnEoaXJxKTt9CitzdGF0aWMgdm9pZCBoYW5kbGVfdm9pZF9pcnFfICMjIGlycSAodm9pZCl7IGhhbmRsZV92b2lkX2lycShpcnEpOyB9CiAKIHN0YXRpYyB2b2lkIGhhbmRsZV92b2lkX2lycShpbnQgaXJxKQogewpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCXJldHVybjsKIAl9CiAJaXQtPmhhbmRsZXIoaXJxLCBpdC0+ZGV2X2lkIFBUX1JFR1NfTlVMTCk7Ci0JcnRfZW5hYmxlX2lycShpcnEpOwkvL25lZWRlZCBieSBydGFpLWFkZW9zLCBzZWVtcyBsaWtlIGl0IHNob3VsZG4ndCBodXJ0IGVhcmxpZXIgdmVyc2lvbnMKKwlydF9lbmFibGVfaXJxKGlycSk7CS8qIG5lZWRlZCBieSBydGFpLWFkZW9zLCBzZWVtcyBsaWtlIGl0IHNob3VsZG4ndCBodXJ0IGVhcmxpZXIgdmVyc2lvbnMgKi8KIH0KIAogREVDTEFSRV9WT0lEX0lSUSgwKTsKQEAgLTIyMCw4ICsyMjAsNyBAQAogREVDTEFSRV9WT0lEX0lSUSgyMik7CiBERUNMQVJFX1ZPSURfSVJRKDIzKTsKIAotdHlwZWRlZiB2b2lkICgqVl9GUF9WKSAodm9pZCk7Ci1zdGF0aWMgVl9GUF9WIGhhbmRsZV92b2lkX2lycV9wdHJzW10gPSB7CitzdGF0aWMgdm9pZCBoYW5kbGVfdm9pZF9pcnFfcHRyc1tdID0gewogCWhhbmRsZV92b2lkX2lycV8wLAogCWhhbmRsZV92b2lkX2lycV8xLAogCWhhbmRsZV92b2lkX2lycV8yLApAQCAtNDAyLDExICs0MDEsMTEgQEAKIAogdm9pZCBjb21lZGlfcnRfaW5pdCh2b2lkKQogewotCS8vcnRfcGVuZF90cV9pbml0KCk7CisJLyogcnRfcGVuZF90cV9pbml0KCk7ICovCiB9CiAKIHZvaWQgY29tZWRpX3J0X2NsZWFudXAodm9pZCkKIHsKLQkvL3J0X3BlbmRfdHFfY2xlYW51cCgpOworCS8qIHJ0X3BlbmRfdHFfY2xlYW51cCgpOyAqLwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL3J0X3BlbmRfdHEuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcnRfcGVuZF90cS5jCmluZGV4IDk5NWYwNzYuLmY5ZGZkOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcnRfcGVuZF90cS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvcnRfcGVuZF90cS5jCkBAIC0zLDcgKzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlICJjb21lZGlkZXYuaCIJLy8gZm9yIHJ0IHNwaW5sb2NrcworI2luY2x1ZGUgImNvbWVkaWRldi5oIgkvKiBmb3IgcnQgc3BpbmxvY2tzICovCiAjaW5jbHVkZSAicnRfcGVuZF90cS5oIgogI2lmZGVmIENPTkZJR19DT01FRElfUlRBSQogI2luY2x1ZGUgPHJ0YWkuaD4KQEAgLTI1LDkgKzI1LDkgQEAKIHZvbGF0aWxlIHN0YXRpYyBzdHJ1Y3QgcnRfcGVuZF90cSAqdm9sYXRpbGUgcnRfcGVuZF9oZWFkID0gcnRfcGVuZF90cSwKIAkqdm9sYXRpbGUgcnRfcGVuZF90YWlsID0gcnRfcGVuZF90cTsKIGludCBydF9wZW5kX3RxX2lycSA9IDA7Ci1zcGlubG9ja190IHJ0X3BlbmRfdHFfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKK0RFRklORV9TUElOTE9DSyhydF9wZW5kX3RxX2xvY2spOwogCi0vLyBXQVJOSU5HOiBmb2xsb3dpbmcgY29kZSBub3QgY2hlY2tlZCBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucyB5ZXQuCisvKiBXQVJOSU5HOiBmb2xsb3dpbmcgY29kZSBub3QgY2hlY2tlZCBhZ2FpbnN0IHJhY2UgY29uZGl0aW9ucyB5ZXQuICovCiAjZGVmaW5lIElOQ19DSVJDVUxBUl9QVFIocHRyLGJlZ2luLHNpemUpIGRvIHtpZigrKyhwdHIpPj0oYmVnaW4pKyhzaXplKSkgKHB0cik9KGJlZ2luKTsgfSB3aGlsZSgwKQogI2RlZmluZSBERUNfQ0lSQ1VMQVJfUFRSKHB0cixiZWdpbixzaXplKSBkbyB7aWYoLS0ocHRyKTwoYmVnaW4pKSAocHRyKT0oYmVnaW4pKyhzaXplKS0xOyB9IHdoaWxlKDApCiAKQEAgLTQyLDcgKzQyLDcgQEAKIAljb21lZGlfc3Bpbl9sb2NrX2lycXNhdmUoJnJ0X3BlbmRfdHFfbG9jaywgZmxhZ3MpOwogCUlOQ19DSVJDVUxBUl9QVFIocnRfcGVuZF9oZWFkLCBydF9wZW5kX3RxLCBSVF9QRU5EX1RRX1NJWkUpOwogCWlmIChydF9wZW5kX2hlYWQgPT0gcnRfcGVuZF90YWlsKSB7Ci0JCS8vIG92ZXJmbG93LCB3ZSBqdXN0IHJlZnVzZSB0byB0YWtlIHRoaXMgcmVxdWVzdAorCQkvKiBvdmVyZmxvdywgd2UganVzdCByZWZ1c2UgdG8gdGFrZSB0aGlzIHJlcXVlc3QgKi8KIAkJREVDX0NJUkNVTEFSX1BUUihydF9wZW5kX2hlYWQsIHJ0X3BlbmRfdHEsIFJUX1BFTkRfVFFfU0laRSk7CiAJCWNvbWVkaV9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZydF9wZW5kX3RxX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FQUdBSU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ4ZDM0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvS2NvbmZpZwpAQCAtMCwwICsxLDY3IEBACitjb25maWcgRFNUCisJdHJpc3RhdGUgIkRpc3RyaWJ1dGVkIHN0b3JhZ2UiCisJZGVwZW5kcyBvbiBORVQgJiYgQ1JZUFRPICYmIFNZU0ZTICYmIEJMS19ERVYKKwlzZWxlY3QgQ09OTkVDVE9SCisJLS0taGVscC0tLQorCURTVCBpcyBhIG5ldHdvcmsgYmxvY2sgZGV2aWNlIHN0b3JhZ2UsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG9yZ2FuaXplCisJZXhwb3J0ZWQgc3RvcmFnZSBvbiB0aGUgcmVtb3RlIG5vZGVzIGludG8gdGhlIGxvY2FsIGJsb2NrIGRldmljZS4KKworCURTVCB3b3JrcyBvbiB0b3Agb2YgYW55IG5ldHdvcmsgbWVkaWEgYW5kIHByb3RvY29sOyBpdCBpcyBqdXN0IGEgbWF0dGVyCisJb2YgY29uZmlndXJhdGlvbiB1dGlsaXR5IHRvIHVuZGVyc3RhbmQgdGhlIGNvcnJlY3QgYWRkcmVzc2VzLiBUaGUgbW9zdAorCWNvbW1vbiBleGFtcGxlIGlzIFRDUCBvdmVyIElQLCB3aGljaCBhbGxvd3MgdG8gcGFzcyB0aHJvdWdoIGZpcmV3YWxscyBhbmQKKwljcmVhdGUgcmVtb3RlIGJhY2t1cCBzdG9yYWdlIGluIGEgZGlmZmVyZW50IGRhdGFjZW50ZXIuIERTVCByZXF1aXJlcworCXNpbmdsZSBwb3J0IHRvIGJlIGVuYWJsZWQgb24gdGhlIGV4cG9ydGluZyBub2RlIGFuZCBvdXRnb2luZyBjb25uZWN0aW9ucworCW9uIHRoZSBsb2NhbCBub2RlLgorCisJRFNUIHdvcmtzIHdpdGggaW4ta2VybmVsIGNsaWVudCBhbmQgc2VydmVyLCB3aGljaCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBieQorCWVsaW1pbmF0aW5nIHVubmVkZWQgZGF0YSBjb3BpZXMgYW5kIGJ5IG5vdCBkZXBlbmRpbmcgb24gdGhlIHZlcnNpb24KKwlvZiB0aGUgZXh0ZXJuYWwgSU8gY29tcG9uZW50cy4gSXQgcmVxdWlyZXMgdXNlcnNwYWNlIGNvbmZpZ3VyYXRpb24gdXRpbGl0eQorCXRob3VnaC4KKworCURTVCB1c2VzIHRyYW5zYWN0aW9uIG1vZGVsLCB3aGVuIGVhY2ggc3RvcmUgaGFzIHRvIGJlIGV4cGxpY2l0bHkgYWNrZWQKKwlmcm9tIHRoZSByZW1vdGUgbm9kZSB0byBiZSBjb25zaWRlcmVkIGFzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLiBUaGVyZQorCW1heSBiZSBsb3RzIG9mIGluLWZsaWdodCB0cmFuc2FjdGlvbnMuIFdoZW4gcmVtb3RlIGhvc3QgZG9lcyBub3QgYWNrCisJdGhlIHRyYW5zYWN0aW9uIGl0IHdpbGwgYmUgcmVzZW50IHByZWRlZmluZWQgbnVtYmVyIG9mIHRpbWVzIHdpdGggc3BlY2lmaWVkCisJdGltZW91dHMgYmV0d2VlbiB0aGVtLiBBbGwgdGhvc2UgcGFyYW1ldGVycyBhcmUgY29uZmlndXJhYmxlLiBUcmFuc2FjdGlvbnMKKwlhcmUgbWFya2VkIGFzIGZhaWxlZCBhZnRlciBhbGwgcmVzZW5kcyBjb21wbGV0ZSB1bnN1Y2Nlc3NmdWxseTsgaGF2aW5nCisJbG9uZyBlbm91Z2ggcmVzZW5kIHRpbWVvdXQgYW5kL29yIGxhcmdlIG51bWJlciBvZiByZXNlbmRzIGFsbG93cyBub3QgdG8KKwlyZXR1cm4gZXJyb3IgdG8gdGhlIGhpZ2hlciAoRlMgdXN1YWxseSkgbGF5ZXIgaW4gY2FzZSBvZiBzaG9ydCBuZXR3b3JrCisJcHJvYmxlbXMgb3IgcmVtb3RlIG5vZGUgb3V0YWdlcy4gSW4gY2FzZSBvZiBuZXR3b3JrIFJBSUQgc2V0dXAgdGhpcyBtZWFucworCXRoYXQgc3RvcmFnZSB3aWxsIG5vdCBkZWdyYWRlIHVudGlsIHRyYW5zYWN0aW9ucyBhcmUgbWFya2VkIGFzIGZhaWxlZCwgYW5kCisJdGh1cyB3aWxsIG5vdCBmb3JjZSBjaGVja3N1bSByZWNhbGN1bGF0aW9uIGFuZCBkYXRhIHJlYnVpbGQuIEluIGNhc2Ugb2YKKwljb25uZWN0aW9uIGZhaWx1cmUgRFNUIHdpbGwgdHJ5IHRvIHJlY29ubmVjdCB0byB0aGUgcmVtb3RlIG5vZGUgYXV0b21hdGljYWxseS4KKwlEU1Qgc2VuZHMgcGluZyBjb21tYW5kcyBhdCBpZGxlIHRpbWUgdG8gZGV0ZWN0IGlmIHJlbW90ZSBub2RlIGlzIGFsaXZlLgorCisJQmVjYXVzZSBvZiB0cmFuc2FjdGlvbmFsIG1vZGVsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB6ZXJvLWNvcHkgc2VuZGluZworCXdpdGhvdXQgd29ycnkgb2YgZGF0YSBjb3JydXB0aW9uICh3aGljaCBpbiB0dXJuIGNvdWxkIGJlIGRldGVjdGVkIGJ5IHRoZQorCXN0cm9uZyBjaGVja3N1bXMgdGhvdWdoKS4KKworCURTVCBtYXkgZnVsbHkgZW5jcnlwdCB0aGUgZGF0YSBjaGFubmVsIGluIGNhc2Ugb2YgdW50cnVzdGVkIGNoYW5uZWwgYW5kIGltcGxlbWVudAorCXN0cm9uZyBjaGVja3N1bSBvZiB0aGUgdHJhbnNmZXJyZWQgZGF0YS4gSXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlIGFsZ29yaXRobXMKKwlhbmQgY3J5cHRvIGtleXM7IHRoZXkgc2hvdWxkIG1hdGNoIG9uIGJvdGggc2lkZXMgb2YgdGhlIG5ldHdvcmsgY2hhbm5lbC4KKwlDcnlwdG8gcHJvY2Vzc2luZyBkb2VzIG5vdCBpbnRyb2R1Y2Ugbm90aWNlYmxlIHBlcmZvcm1hbmNlIG92ZXJoZWFkLCBzaW5jZSBEU1QKKwl1c2VzIGNvbmZpZ3VyYWJsZSBwb29sIG9mIHRocmVhZHMgdG8gcGVyZm9ybSBjcnlwdG8gcHJvY2Vzc2luZy4KKworCURTVCB1dGlsaXplcyBtZW1vcnkgcG9vbCBtb2RlbCBvZiBhbGwgaXRzIHRyYW5zYWN0aW9uIGFsbG9jYXRpb25zIChpdCBpcyB0aGUKKwlvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiBvbiB0aGUgY2xpZW50KSBhbmQgc2VydmVyIGFsbG9jYXRpb25zIChiaW8gcG9vbHMsCisJd2hpbGUgcGFnZXMgYXJlIGFsbG9jYXRlZCBmcm9tIHRoZSBzbGFiKS4KKworCUF0IHN0YXJ0dXAgRFNUIHBlcmZvcm1zIGEgc2ltcGxlIG5lZ290aWF0aW9uIHdpdGggdGhlIGV4cG9ydCBub2RlIHRvIGRldGVybWluZQorCWFjY2VzcyBwZXJtaXNzaW9ucyBhbmQgc2l6ZSBvZiB0aGUgZXhwb3J0ZWQgc3RvcmFnZS4gSXQgY2FuIGJlIGV4dGVuZGVkIGlmCisJbmV3IHBhcmFtZXRlcnMgc2hvdWxkIGJlIGF1dG9uZWdvdGlhdGVkLgorCisJRFNUIGNhcnJpZXMgYmxvY2sgSU8gZmxhZ3MgaW4gdGhlIHByb3RvY29sLCB3aGljaCBhbGxvd3MgdG8gdHJhbnNwYXJlbnRseSBpbXBsZW1lbnQKKwliYXJyaWVycyBhbmQgc3luYy9mbHVzaCBvcGVyYXRpb25zLiBUaG9zZSBmbGFncyBhcmUgdXNlZCBpbiB0aGUgZXhwb3J0IG5vZGUgd2hlcmUKKwlJTyBhZ2FpbnN0IHRoZSBsb2NhbCBzdG9yYWdlIGlzIHBlcmZvcm1lZCwgd2hpY2ggbWVhbnMgdGhhdCBzeW5jIHdyaXRlIHdpbGwgYmUgc3luYworCW9uIHRoZSByZW1vdGUgbm9kZSB0b28sIHdoaWNoIGluIHR1cm4gaW1wcm92ZXMgZGF0YSBpbnRlZ3JpdHkgYW5kIGltcHJvdmVkIHJlc2lzdGFuY2UKKwl0byBlcnJvcnMgYW5kIGRhdGEgY29ycnVwdGlvbiBkdXJpbmcgcG93ZXIgb3V0YWdlcyBvciBzdG9yYWdlIGRhbWFnZXMuCisKKwlIb21lcGFnZTogaHR0cDovL3d3dy5pb3JlbWFwLm5ldC9wcm9qZWN0cy9kc3QKKwlVc2Vyc3BhY2UgY29uZmlndXJhdGlvbiB1dGlsaXR5IGFuZCB0aGUgbGF0ZXN0IHJlbGVhc2VzOiBodHRwOi8vd3d3LmlvcmVtYXAubmV0L2FyY2hpdmUvZHN0LworCitjb25maWcgRFNUX0RFQlVHCisJYm9vbCAiRFNUIGRlYnVnIgorCWRlcGVuZHMgb24gRFNUCisJLS0taGVscC0tLQorCVRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIEhFQVZZIGRlYnVnZ2luZyBvZiB0aGUgRFNULgorCVR1cm4gaXQgb24gT05MWSBpZiB5b3UgaGF2ZSB0byBkZWJ1ZyBzb21lIHJlYWxseSBvYnNjdXJlIHByb2JsZW0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYThiMGNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK29iai0kKENPTkZJR19EU1QpICs9IG5zdC5vCisKK25zdC15IDo9IGRjb3JlLm8gc3RhdGUubyBleHBvcnQubyB0aHJlYWRfcG9vbC5vIGNyeXB0by5vIHRyYW5zLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvY3J5cHRvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2NyeXB0by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNTBmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L2NyeXB0by5jCkBAIC0wLDAgKzEsNzMxIEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZHN0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKy8qCisgKiBUcmlja3kgYmFzdGFyZCwgYnV0IElWIGNhbiBiZSBtb3JlIGNvbXBsZXggd2l0aCB0aW1lLi4uCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGRzdF9nZW5faXYoc3RydWN0IGRzdF90cmFucyAqdCkKK3sKKwlyZXR1cm4gdC0+Z2VuOworfQorCisvKgorICogQ3J5cHRvIG1hY2hpbmVyeTogaGFzaC9jaXBoZXIgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGNyeXB0byBjb250cm9scy4KKyAqLworc3RhdGljIHN0cnVjdCBjcnlwdG9faGFzaCAqZHN0X2luaXRfaGFzaChzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCwgdTggKmtleSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBjcnlwdG9faGFzaCAqaGFzaDsKKworCWhhc2ggPSBjcnlwdG9fYWxsb2NfaGFzaChjdGwtPmhhc2hfYWxnbywgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUihoYXNoKSkgeworCQllcnIgPSBQVFJfRVJSKGhhc2gpOworCQlkcHJpbnRrKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGhhc2ggJyVzJywgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIGN0bC0+aGFzaF9hbGdvLCBlcnIpOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwljdGwtPmNyeXB0b19hdHRhY2hlZF9zaXplID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShoYXNoKTsKKworCWlmICghY3RsLT5oYXNoX2tleXNpemUpCisJCXJldHVybiBoYXNoOworCisJZXJyID0gY3J5cHRvX2hhc2hfc2V0a2V5KGhhc2gsIGtleSwgY3RsLT5oYXNoX2tleXNpemUpOworCWlmIChlcnIpIHsKKwkJZHByaW50aygiJXM6IGZhaWxlZCB0byBzZXQga2V5IGZvciBoYXNoICclcycsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBjdGwtPmhhc2hfYWxnbywgZXJyKTsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJfQorCisJcmV0dXJuIGhhc2g7CisKK2Vycl9vdXRfZnJlZToKKwljcnlwdG9fZnJlZV9oYXNoKGhhc2gpOworZXJyX291dF9leGl0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmRzdF9pbml0X2NpcGhlcihzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCwgdTggKmtleSkKK3sKKwlpbnQgZXJyID0gLUVJTlZBTDsKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmNpcGhlcjsKKworCWlmICghY3RsLT5jaXBoZXJfa2V5c2l6ZSkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwljaXBoZXIgPSBjcnlwdG9fYWxsb2NfYWJsa2NpcGhlcihjdGwtPmNpcGhlcl9hbGdvLCAwLCAwKTsKKwlpZiAoSVNfRVJSKGNpcGhlcikpIHsKKwkJZXJyID0gUFRSX0VSUihjaXBoZXIpOworCQlkcHJpbnRrKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGNpcGhlciAnJXMnLCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgY3RsLT5jaXBoZXJfYWxnbywgZXJyKTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJY3J5cHRvX2FibGtjaXBoZXJfY2xlYXJfZmxhZ3MoY2lwaGVyLCB+MCk7CisKKwllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9zZXRrZXkoY2lwaGVyLCBrZXksIGN0bC0+Y2lwaGVyX2tleXNpemUpOworCWlmIChlcnIpIHsKKwkJZHByaW50aygiJXM6IGZhaWxlZCB0byBzZXQga2V5IGZvciBjaXBoZXIgJyVzJywgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIGN0bC0+Y2lwaGVyX2FsZ28sIGVycik7CisJCWdvdG8gZXJyX291dF9mcmVlOworCX0KKworCXJldHVybiBjaXBoZXI7CisKK2Vycl9vdXRfZnJlZToKKwljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGNpcGhlcik7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworLyoKKyAqIENyeXB0byBlbmdpbmUgaGFzIGEgcG9vbCBvZiBwYWdlcyB0byBlbmNyeXB0IGRhdGEgaW50byBiZWZvcmUgc2VuZGluZworICogaXQgb3ZlciB0aGUgbmV0d29yay4gVGhpcyBwb29sIGlzIGZyZWVkL2FsbG9jYXRlZCBoZXJlLgorICovCitzdGF0aWMgdm9pZCBkc3RfY3J5cHRvX3BhZ2VzX2ZyZWUoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpPTA7IGk8ZS0+cGFnZV9udW07ICsraSkKKwkJX19mcmVlX3BhZ2UoZS0+cGFnZXNbaV0pOworCWtmcmVlKGUtPnBhZ2VzKTsKK30KKworc3RhdGljIGludCBkc3RfY3J5cHRvX3BhZ2VzX2FsbG9jKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwgaW50IG51bSkKK3sKKwlpbnQgaTsKKworCWUtPnBhZ2VzID0ga21hbGxvYyhudW0gKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWUtPnBhZ2VzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaT0wOyBpPG51bTsgKytpKSB7CisJCWUtPnBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCFlLT5wYWdlc1tpXSkKKwkJCWdvdG8gZXJyX291dF9mcmVlX3BhZ2VzOworCX0KKworCWUtPnBhZ2VfbnVtID0gbnVtOworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfcGFnZXM6CisJd2hpbGUgKC0taSA+PSAwKQorCQlfX2ZyZWVfcGFnZShlLT5wYWdlc1tpXSk7CisKKwlrZnJlZShlLT5wYWdlcyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGNyeXB0byBlbmdpbmUgZm9yIGdpdmVuIG5vZGUuCisgKiBTZXR1cCBjaXBoZXIvaGFzaCwga2V5cywgcG9vbCBvZiB0aHJlYWRzIGFuZCBwcml2YXRlIGRhdGEuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2NyeXB0b19lbmdpbmVfaW5pdChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsIHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3RsID0gJm4tPmNyeXB0bzsKKworCWVyciA9IGRzdF9jcnlwdG9fcGFnZXNfYWxsb2MoZSwgbi0+bWF4X3BhZ2VzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWUtPnNpemUgPSBQQUdFX1NJWkU7CisJZS0+ZGF0YSA9IGttYWxsb2MoZS0+c2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlLT5kYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dF9mcmVlX3BhZ2VzOworCX0KKworCWlmIChjdGwtPmhhc2hfYWxnb1swXSkgeworCQllLT5oYXNoID0gZHN0X2luaXRfaGFzaChjdGwsIG4tPmhhc2hfa2V5KTsKKwkJaWYgKElTX0VSUihlLT5oYXNoKSkgeworCQkJZXJyID0gUFRSX0VSUihlLT5oYXNoKTsKKwkJCWUtPmhhc2ggPSBOVUxMOworCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCX0KKwl9CisKKwlpZiAoY3RsLT5jaXBoZXJfYWxnb1swXSkgeworCQllLT5jaXBoZXIgPSBkc3RfaW5pdF9jaXBoZXIoY3RsLCBuLT5jaXBoZXJfa2V5KTsKKwkJaWYgKElTX0VSUihlLT5jaXBoZXIpKSB7CisJCQllcnIgPSBQVFJfRVJSKGUtPmNpcGhlcik7CisJCQllLT5jaXBoZXIgPSBOVUxMOworCQkJZ290byBlcnJfb3V0X2ZyZWVfaGFzaDsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfaGFzaDoKKwljcnlwdG9fZnJlZV9oYXNoKGUtPmhhc2gpOworZXJyX291dF9mcmVlOgorCWtmcmVlKGUtPmRhdGEpOworZXJyX291dF9mcmVlX3BhZ2VzOgorCWRzdF9jcnlwdG9fcGFnZXNfZnJlZShlKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBkc3RfY3J5cHRvX2VuZ2luZV9leGl0KHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSkKK3sKKwlpZiAoZS0+aGFzaCkKKwkJY3J5cHRvX2ZyZWVfaGFzaChlLT5oYXNoKTsKKwlpZiAoZS0+Y2lwaGVyKQorCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKGUtPmNpcGhlcik7CisJZHN0X2NyeXB0b19wYWdlc19mcmVlKGUpOworCWtmcmVlKGUtPmRhdGEpOworfQorCisvKgorICogV2FpdGluZyBmb3IgY2lwaGVyIHByb2Nlc3NpbmcgdG8gYmUgY29tcGxldGVkLgorICovCitzdHJ1Y3QgZHN0X2NyeXB0b19jb21wbGV0aW9uCit7CisJc3RydWN0IGNvbXBsZXRpb24JCWNvbXBsZXRlOworCWludAkJCQllcnJvcjsKK307CisKK3N0YXRpYyB2b2lkIGRzdF9jcnlwdG9fY29tcGxldGUoc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsIGludCBlcnIpCit7CisJc3RydWN0IGRzdF9jcnlwdG9fY29tcGxldGlvbiAqYyA9IHJlcS0+ZGF0YTsKKworCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm47CisKKwlkcHJpbnRrKCIlczogcmVxOiAlcCwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCByZXEsIGVycik7CisJYy0+ZXJyb3IgPSBlcnI7CisJY29tcGxldGUoJmMtPmNvbXBsZXRlKTsKK30KKworc3RhdGljIGludCBkc3RfY3J5cHRvX3Byb2Nlc3Moc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMsCisJCXZvaWQgKml2LCBpbnQgZW5jLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJc3RydWN0IGRzdF9jcnlwdG9fY29tcGxldGlvbiBjOworCWludCBlcnI7CisKKwlpbml0X2NvbXBsZXRpb24oJmMuY29tcGxldGUpOworCWMuZXJyb3IgPSAtRUlOUFJPR1JFU1M7CisKKwlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NhbGxiYWNrKHJlcSwgQ1JZUFRPX1RGTV9SRVFfTUFZX0JBQ0tMT0csCisJCQkJCWRzdF9jcnlwdG9fY29tcGxldGUsICZjKTsKKworCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQocmVxLCBzZ19zcmMsIHNnX2RzdCwgc2dfc3JjLT5sZW5ndGgsIGl2KTsKKworCWlmIChlbmMpCisJCWVyciA9IGNyeXB0b19hYmxrY2lwaGVyX2VuY3J5cHQocmVxKTsKKwllbHNlCisJCWVyciA9IGNyeXB0b19hYmxrY2lwaGVyX2RlY3J5cHQocmVxKTsKKworCXN3aXRjaCAoZXJyKSB7CisJCWNhc2UgLUVJTlBST0dSRVNTOgorCQljYXNlIC1FQlVTWToKKwkJCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZjLmNvbXBsZXRlLAorCQkJCQl0aW1lb3V0KTsKKwkJCWlmICghZXJyKQorCQkJCWVyciA9IC1FVElNRURPVVQ7CisJCQllbHNlCisJCQkJZXJyID0gYy5lcnJvcjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIERTVCB1c2VzIGdlbmVyaWMgaXRlcmF0aW9uIGFwcHJvYWNoIGZvciBkYXRhIGNyeXB0byBwcm9jZXNzaW5nLgorICogU2luZ2xlIGJsb2NrIElPIHJlcXVlc3QgaXMgc3dpdGNoZWQgaW50byBhcnJheSBvZiBzY2F0dGVybGlzdHMsCisgKiB3aGljaCBhcmUgc3VibWl0dGVkIHRvIHRoZSBjcnlwdG8gcHJvY2Vzc2luZyBpdGVyYXRvci4KKyAqCisgKiBJbnB1dCBhbmQgb3V0cHV0IGl0ZXJhdG9yIGluaXRpYWxpemF0aW9uIGFyZSBkaWZmZXJlbnQsIHNpbmNlCisgKiBpbiBvdXRwdXQgY2FzZSB3ZSBjYW4gbm90IGVuY3J5cHQgZGF0YSBpbi1wbGFjZSBhbmQgbmVlZCBhCisgKiB0ZW1wb3Jhcnkgc3RvcmFnZSwgd2hpY2ggaXMgdGhlbiBiZWluZyBzZW50IHRvIHRoZSByZW1vdGUgcGVlci4KKyAqLworc3RhdGljIGludCBkc3RfdHJhbnNfaXRlcl9vdXQoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCisJCWludCAoKiBpdGVyYXRvcikgKHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKKwkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMpKQoreworCXN0cnVjdCBiaW9fdmVjICpidjsKKwlpbnQgZXJyLCBpOworCisJc2dfaW5pdF90YWJsZShlLT5zcmMsIGJpby0+YmlfdmNudCk7CisJc2dfaW5pdF90YWJsZShlLT5kc3QsIGJpby0+YmlfdmNudCk7CisKKwliaW9fZm9yX2VhY2hfc2VnbWVudChidiwgYmlvLCBpKSB7CisJCXNnX3NldF9wYWdlKCZlLT5zcmNbaV0sIGJ2LT5idl9wYWdlLCBidi0+YnZfbGVuLCBidi0+YnZfb2Zmc2V0KTsKKwkJc2dfc2V0X3BhZ2UoJmUtPmRzdFtpXSwgZS0+cGFnZXNbaV0sIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOworCisJCWVyciA9IGl0ZXJhdG9yKGUsICZlLT5kc3RbaV0sICZlLT5zcmNbaV0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkc3RfdHJhbnNfaXRlcl9pbihzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSwKKwkJaW50ICgqIGl0ZXJhdG9yKSAoc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAorCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYykpCit7CisJc3RydWN0IGJpb192ZWMgKmJ2OworCWludCBlcnIsIGk7CisKKwlzZ19pbml0X3RhYmxlKGUtPnNyYywgYmlvLT5iaV92Y250KTsKKwlzZ19pbml0X3RhYmxlKGUtPmRzdCwgYmlvLT5iaV92Y250KTsKKworCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKKwkJc2dfc2V0X3BhZ2UoJmUtPnNyY1tpXSwgYnYtPmJ2X3BhZ2UsIGJ2LT5idl9sZW4sIGJ2LT5idl9vZmZzZXQpOworCQlzZ19zZXRfcGFnZSgmZS0+ZHN0W2ldLCBidi0+YnZfcGFnZSwgYnYtPmJ2X2xlbiwgYnYtPmJ2X29mZnNldCk7CisKKwkJZXJyID0gaXRlcmF0b3IoZSwgJmUtPmRzdFtpXSwgJmUtPnNyY1tpXSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzdF9jcnlwdF9pdGVyYXRvcihzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3NyYykKK3sKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEgPSBlLT5kYXRhOworCXU4IGl2WzMyXTsKKworCW1lbXNldChpdiwgMCwgc2l6ZW9mKGl2KSk7CisKKwltZW1jcHkoaXYsICZlLT5pdiwgc2l6ZW9mKGUtPml2KSk7CisKKwlyZXR1cm4gZHN0X2NyeXB0b19wcm9jZXNzKHJlcSwgc2dfZHN0LCBzZ19zcmMsIGl2LCBlLT5lbmMsIGUtPnRpbWVvdXQpOworfQorCitzdGF0aWMgaW50IGRzdF9jcnlwdChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEgPSBlLT5kYXRhOworCisJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QpKTsKKwlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X3RmbShyZXEsIGUtPmNpcGhlcik7CisKKwlpZiAoZS0+ZW5jKQorCQlyZXR1cm4gZHN0X3RyYW5zX2l0ZXJfb3V0KGJpbywgZSwgZHN0X2NyeXB0X2l0ZXJhdG9yKTsKKwllbHNlCisJCXJldHVybiBkc3RfdHJhbnNfaXRlcl9pbihiaW8sIGUsIGRzdF9jcnlwdF9pdGVyYXRvcik7Cit9CisKK3N0YXRpYyBpbnQgZHN0X2hhc2hfaXRlcmF0b3Ioc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX2RzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19zcmMpCit7CisJcmV0dXJuIGNyeXB0b19oYXNoX3VwZGF0ZShlLT5kYXRhLCBzZ19zcmMsIHNnX3NyYy0+bGVuZ3RoKTsKK30KKworc3RhdGljIGludCBkc3RfaGFzaChzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsIHN0cnVjdCBiaW8gKmJpbywgdm9pZCAqZHN0KQoreworCXN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MgPSBlLT5kYXRhOworCWludCBlcnI7CisKKwlkZXNjLT50Zm0gPSBlLT5oYXNoOworCWRlc2MtPmZsYWdzID0gMDsKKworCWVyciA9IGNyeXB0b19oYXNoX2luaXQoZGVzYyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGRzdF90cmFuc19pdGVyX2luKGJpbywgZSwgZHN0X2hhc2hfaXRlcmF0b3IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBjcnlwdG9faGFzaF9maW5hbChkZXNjLCBkc3QpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEluaXRpYWxpemUvY2xlYW51cCBhIGNyeXB0byB0aHJlYWQuIFRoZSBvbmx5IHRoaW5nIGl0IHNob3VsZAorICogZG8gaXMgdG8gYWxsb2NhdGUgYSBwb29sIG9mIHBhZ2VzIGFzIHRlbXBvcmFyeSBzdG9yYWdlLgorICogQW5kIHRvIHNldHVwIGNpcGhlciBhbmQvb3IgaGFzaC4KKyAqLworc3RhdGljIHZvaWQgKmRzdF9jcnlwdG9fdGhyZWFkX2luaXQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBkYXRhOworCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCWUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWUpCisJCWdvdG8gZXJyX291dF9leGl0OworCWUtPnNyYyA9IGtjYWxsb2MoMiAqIG4tPm1heF9wYWdlcywgc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCksCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWUtPnNyYykKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwllLT5kc3QgPSBlLT5zcmMgKyBuLT5tYXhfcGFnZXM7CisKKwllcnIgPSBkc3RfY3J5cHRvX2VuZ2luZV9pbml0KGUsIG4pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX2FsbDsKKworCXJldHVybiBlOworCitlcnJfb3V0X2ZyZWVfYWxsOgorCWtmcmVlKGUtPnNyYyk7CitlcnJfb3V0X2ZyZWU6CisJa2ZyZWUoZSk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKworc3RhdGljIHZvaWQgZHN0X2NyeXB0b190aHJlYWRfY2xlYW51cCh2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IHByaXZhdGU7CisKKwlkc3RfY3J5cHRvX2VuZ2luZV9leGl0KGUpOworCWtmcmVlKGUtPnNyYyk7CisJa2ZyZWUoZSk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIGNyeXB0byBlbmdpbmUgZm9yIGdpdmVuIG5vZGU6IHN0b3JlIGtleXMsIGNyZWF0ZSBwb29sCisgKiBvZiB0aHJlYWRzLCBpbml0aWFsaXplIGVhY2ggb25lLgorICoKKyAqIEVhY2ggdGhyZWFkIGhhcyB1bmlxdWUgSUQsIGJ1dCAwIGFuZCAxIGFyZSByZXNlcnZlZCBmb3IgcmVjZWl2aW5nIGFuZCBhY2NlcHRpbmcKKyAqIHRocmVhZHMgKGlmIGV4cG9ydCBub2RlKSwgc28gSURzIGNvdWxkIHN0YXJ0IGZyb20gMiwgYnV0IHN0YXJ0aW5nIHRoZW0KKyAqIGZyb20gMTAgYWxsb3dzIGVhc2lseSB1bmRlcnN0YW5kIHdoYXQgdGhpcyB0aHJlYWQgaXMgZm9yLgorICovCitpbnQgZHN0X25vZGVfY3J5cHRvX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCkKK3sKKwl2b2lkICprZXkgPSAoY3RsICsgMSk7CisJaW50IGVyciA9IC1FTk9NRU0sIGk7CisJY2hhciBuYW1lWzMyXTsKKworCWlmIChjdGwtPmhhc2hfa2V5c2l6ZSkgeworCQluLT5oYXNoX2tleSA9IGttYWxsb2MoY3RsLT5oYXNoX2tleXNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIW4tPmhhc2hfa2V5KQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJCW1lbWNweShuLT5oYXNoX2tleSwga2V5LCBjdGwtPmhhc2hfa2V5c2l6ZSk7CisJfQorCisJaWYgKGN0bC0+Y2lwaGVyX2tleXNpemUpIHsKKwkJbi0+Y2lwaGVyX2tleSA9IGttYWxsb2MoY3RsLT5jaXBoZXJfa2V5c2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbi0+Y2lwaGVyX2tleSkKKwkJCWdvdG8gZXJyX291dF9mcmVlX2hhc2g7CisJCW1lbWNweShuLT5jaXBoZXJfa2V5LCBrZXksIGN0bC0+Y2lwaGVyX2tleXNpemUpOworCX0KKwltZW1jcHkoJm4tPmNyeXB0bywgY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9jcnlwdG9fY3RsKSk7CisKKwlmb3IgKGk9MDsgaTxjdGwtPnRocmVhZF9udW07ICsraSkgeworCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy1jcnlwdG8tJWQiLCBuLT5uYW1lLCBpKTsKKwkJLyogVW5pcXVlIGlkcy4uLiAqLworCQllcnIgPSB0aHJlYWRfcG9vbF9hZGRfd29ya2VyKG4tPnBvb2wsIG5hbWUsIGkrMTAsCisJCQlkc3RfY3J5cHRvX3RocmVhZF9pbml0LCBkc3RfY3J5cHRvX3RocmVhZF9jbGVhbnVwLCBuKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9mcmVlX3RocmVhZHM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZV90aHJlYWRzOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcl9pZChuLT5wb29sLCBpKzEwKTsKKworCWlmIChjdGwtPmNpcGhlcl9rZXlzaXplKQorCQlrZnJlZShuLT5jaXBoZXJfa2V5KTsKKwljdGwtPmNpcGhlcl9rZXlzaXplID0gMDsKK2Vycl9vdXRfZnJlZV9oYXNoOgorCWlmIChjdGwtPmhhc2hfa2V5c2l6ZSkKKwkJa2ZyZWUobi0+aGFzaF9rZXkpOworCWN0bC0+aGFzaF9rZXlzaXplID0gMDsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGRzdF9ub2RlX2NyeXB0b19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmN0bCA9ICZuLT5jcnlwdG87CisKKwlpZiAoY3RsLT5jaXBoZXJfYWxnb1swXSB8fCBjdGwtPmhhc2hfYWxnb1swXSkgeworCQlrZnJlZShuLT5oYXNoX2tleSk7CisJCWtmcmVlKG4tPmNpcGhlcl9rZXkpOworCX0KK30KKworLyoKKyAqIFRocmFkIHBvb2wgc2V0dXAgY2FsbGJhY2suIEp1c3Qgc3RvcmVzIGEgdHJhbnNhY3Rpb24gaW4gcHJpdmF0ZSBkYXRhLgorICovCitzdGF0aWMgaW50IGRzdF90cmFuc19jcnlwdG9fc2V0dXAodm9pZCAqY3J5cHRvX2VuZ2luZSwgdm9pZCAqdHJhbnMpCit7CisJc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplID0gY3J5cHRvX2VuZ2luZTsKKworCWUtPnByaXZhdGUgPSB0cmFuczsKKwlyZXR1cm4gMDsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkIGRzdF9kdW1wX2JpbyhzdHJ1Y3QgYmlvICpiaW8pCit7CisJdTggKnA7CisJc3RydWN0IGJpb192ZWMgKmJ2OworCWludCBpOworCisJYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnYsIGJpbywgaSkgeworCQlkcHJpbnRrKCIlczogJWxsdS8ldTogc2l6ZTogJXUsIG9mZnNldDogJXUsIGRhdGE6ICIsCisJCQkJX19mdW5jX18sIGJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsCisJCQkJYnYtPmJ2X2xlbiwgYnYtPmJ2X29mZnNldCk7CisKKwkJcCA9IGttYXAoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKKwkJZm9yIChpPTA7IGk8YnYtPmJ2X2xlbjsgKytpKQorCQkJcHJpbnRrKCIlMDJ4ICIsIHBbaV0pOworCQlrdW5tYXAoYnYtPmJ2X3BhZ2UpOworCQlwcmludGsoIlxuIik7CisJfQorfQorI2VuZGlmCisKKy8qCisgKiBFbmNyeXB0L2hhc2ggZGF0YSBhbmQgc2VuZCBpdCB0byB0aGUgbmV0d29yay4KKyAqLworc3RhdGljIGludCBkc3RfY3J5cHRvX3Byb2Nlc3Nfc2VuZGluZyhzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCisJCXN0cnVjdCBiaW8gKmJpbywgdTggKmhhc2gpCit7CisJaW50IGVycjsKKworCWlmIChlLT5jaXBoZXIpIHsKKwkJZXJyID0gZHN0X2NyeXB0KGUsIGJpbyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlpZiAoZS0+aGFzaCkgeworCQllcnIgPSBkc3RfaGFzaChlLCBiaW8sIGhhc2gpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKyNpZmRlZiBDT05GSUdfRFNUX0RFQlVHCisJCXsKKwkJCXVuc2lnbmVkIGludCBpOworCisJCQkvKiBkc3RfZHVtcF9iaW8oYmlvKTsgKi8KKworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiaW86ICVsbHUvJXUsIHJ3OiAlbHUsIGhhc2g6ICIsCisJCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsCisJCQkJYmlvLT5iaV9zaXplLCBiaW9fZGF0YV9kaXIoYmlvKSk7CisJCQlmb3IgKGk9MDsgaTxjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOyArK2kpCisJCQkJCXByaW50aygiJTAyeCAiLCBoYXNoW2ldKTsKKwkJCXByaW50aygiXG4iKTsKKwkJfQorI2VuZGlmCisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ2hlY2sgaWYgcmVjZWl2ZWQgZGF0YSBpcyB2YWxpZC4gRGVjaXBoZXIgaWYgaXQgaXMuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2NyeXB0b19wcm9jZXNzX3JlY2VpdmluZyhzdHJ1Y3QgZHN0X2NyeXB0b19lbmdpbmUgKmUsCisJCXN0cnVjdCBiaW8gKmJpbywgdTggKmhhc2gsIHU4ICpyZWN2X2hhc2gpCit7CisJaW50IGVycjsKKworCWlmIChlLT5oYXNoKSB7CisJCWludCBtaXNtYXRjaDsKKworCQllcnIgPSBkc3RfaGFzaChlLCBiaW8sIGhhc2gpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJbWlzbWF0Y2ggPSAhIW1lbWNtcChyZWN2X2hhc2gsIGhhc2gsCisJCQkJY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKSk7CisjaWZkZWYgQ09ORklHX0RTVF9ERUJVRworCQkvKiBkc3RfZHVtcF9iaW8oYmlvKTsgKi8KKworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJpbzogJWxsdS8ldSwgcnc6ICVsdSwgaGFzaCBtaXNtYXRjaDogJWQiLAorCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKKwkJCWJpb19kYXRhX2RpcihiaW8pLCBtaXNtYXRjaCk7CisJCWlmIChtaXNtYXRjaCkgeworCQkJdW5zaWduZWQgaW50IGk7CisKKwkJCXByaW50aygiLCByZWN2L2NhbGM6ICIpOworCQkJZm9yIChpPTA7IGk8Y3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShlLT5oYXNoKTsgKytpKSB7CisJCQkJcHJpbnRrKCIlMDJ4LyUwMnggIiwgcmVjdl9oYXNoW2ldLCBoYXNoW2ldKTsKKwkJCX0KKwkJfQorCQlwcmludGsoIlxuIik7CisjZW5kaWYKKwkJZXJyID0gLTE7CisJCWlmIChtaXNtYXRjaCkKKwkJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWlmIChlLT5jaXBoZXIpIHsKKwkJZXJyID0gZHN0X2NyeXB0KGUsIGJpbyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBUaHJlYWQgcG9vbCBjYWxsYmFjayB0byBlbmNyeXB0IGRhdGEgYW5kIHNlbmQgaXQgdG8gdGhlIG5ldG93b3JrLgorICovCitzdGF0aWMgaW50IGRzdF90cmFuc19jcnlwdG9fYWN0aW9uKHZvaWQgKmNyeXB0b19lbmdpbmUsIHZvaWQgKnNjaGVkdWxlX2RhdGEpCit7CisJc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lICplID0gY3J5cHRvX2VuZ2luZTsKKwlzdHJ1Y3QgZHN0X3RyYW5zICp0ID0gc2NoZWR1bGVfZGF0YTsKKwlzdHJ1Y3QgYmlvICpiaW8gPSB0LT5iaW87CisJaW50IGVycjsKKworCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBjaXBoZXI6ICVwLCBoYXNoOiAlcC5cbiIsCisJCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBlLT5jaXBoZXIsIGUtPmhhc2gpOworCisJZS0+ZW5jID0gdC0+ZW5jOworCWUtPml2ID0gZHN0X2dlbl9pdih0KTsKKworCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgeworCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3Nfc2VuZGluZyhlLCBiaW8sIHQtPmNtZC5oYXNoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWlmIChlLT5oYXNoKSB7CisJCQl0LT5jbWQuY3NpemUgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOworCQkJdC0+Y21kLnNpemUgKz0gdC0+Y21kLmNzaXplOworCQl9CisKKwkJcmV0dXJuIGRzdF90cmFuc19zZW5kKHQpOworCX0gZWxzZSB7CisJCXU4ICpoYXNoID0gZS0+ZGF0YSArIGUtPnNpemUvMjsKKworCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3NfcmVjZWl2aW5nKGUsIGJpbywgaGFzaCwgdC0+Y21kLmhhc2gpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJZHN0X3RyYW5zX3JlbW92ZSh0KTsKKwkJZHN0X3RyYW5zX3B1dCh0KTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXQtPmVycm9yID0gZXJyOworCWRzdF90cmFuc19wdXQodCk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFNjaGVkdWxlIGNyeXB0byBwcm9jZXNzaW5nIGZvciBnaXZlbiB0cmFuc2FjdGlvbi4KKyAqLworaW50IGRzdF90cmFuc19jcnlwdG8oc3RydWN0IGRzdF90cmFucyAqdCkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSB0LT5uOworCWludCBlcnI7CisKKwllcnIgPSB0aHJlYWRfcG9vbF9zY2hlZHVsZShuLT5wb29sLAorCQlkc3RfdHJhbnNfY3J5cHRvX3NldHVwLCBkc3RfdHJhbnNfY3J5cHRvX2FjdGlvbiwKKwkJdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlkc3RfdHJhbnNfcHV0KHQpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBDcnlwdG8gbWFjaGluZXJ5IGZvciB0aGUgZXhwb3J0IG5vZGUuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2V4cG9ydF9jcnlwdG9fc2V0dXAodm9pZCAqY3J5cHRvX2VuZ2luZSwgdm9pZCAqYmlvKQoreworCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7CisKKwllLT5wcml2YXRlID0gYmlvOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzdF9leHBvcnRfY3J5cHRvX2FjdGlvbih2b2lkICpjcnlwdG9fZW5naW5lLCB2b2lkICpzY2hlZHVsZV9kYXRhKQoreworCXN0cnVjdCBkc3RfY3J5cHRvX2VuZ2luZSAqZSA9IGNyeXB0b19lbmdpbmU7CisJc3RydWN0IGJpbyAqYmlvID0gc2NoZWR1bGVfZGF0YTsKKwlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gYmlvLT5iaV9wcml2YXRlOworCWludCBlcnI7CisKKwlkcHJpbnRrKCIlczogZTogJXAsIGRhdGE6ICVwLCBiaW86ICVsbHUvJXUsIGRpcjogJWx1LlxuIiwgX19mdW5jX18sCisJCWUsIGUtPmRhdGEsICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwgYmlvX2RhdGFfZGlyKGJpbykpOworCisJZS0+ZW5jID0gKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpOworCWUtPml2ID0gcC0+Y21kLmlkOworCisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFdSSVRFKSB7CisJCXU4ICpoYXNoID0gZS0+ZGF0YSArIGUtPnNpemUvMjsKKworCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3NfcmVjZWl2aW5nKGUsIGJpbywgaGFzaCwgcC0+Y21kLmhhc2gpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKKwl9IGVsc2UgeworCQllcnIgPSBkc3RfY3J5cHRvX3Byb2Nlc3Nfc2VuZGluZyhlLCBiaW8sIHAtPmNtZC5oYXNoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWlmIChlLT5oYXNoKSB7CisJCQlwLT5jbWQuY3NpemUgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOworCQkJcC0+Y21kLnNpemUgKz0gcC0+Y21kLmNzaXplOworCQl9CisKKwkJZXJyID0gZHN0X2V4cG9ydF9zZW5kX2JpbyhiaW8pOworCX0KKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCWJpb19wdXQoYmlvKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZHN0X2V4cG9ydF9jcnlwdG8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJaW50IGVycjsKKworCWVyciA9IHRocmVhZF9wb29sX3NjaGVkdWxlKG4tPnBvb2wsCisJCWRzdF9leHBvcnRfY3J5cHRvX3NldHVwLCBkc3RfZXhwb3J0X2NyeXB0b19hY3Rpb24sCisJCWJpbywgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwliaW9fcHV0KGJpbyk7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvZGNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWQyNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9kY29yZS5jCkBAIC0wLDAgKzEsOTk1IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9kc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisKKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCitzdGF0aWMgaW50IGRzdF9tYWpvcjsKKworc3RhdGljIERFRklORV9NVVRFWChkc3RfaGFzaF9sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpkc3RfaGFzaHRhYmxlOworc3RhdGljIHVuc2lnbmVkIGludCBkc3RfaGFzaHRhYmxlX3NpemUgPSAxMjg7Cittb2R1bGVfcGFyYW0oZHN0X2hhc2h0YWJsZV9zaXplLCB1aW50LCAwNjQ0KTsKKworc3RhdGljIGNoYXIgZHN0X25hbWVbXSA9ICJEZW1lbnRpYW50aW5nIGdvbGRmaXNoIjsKKworc3RhdGljIERFRklORV9JRFIoZHN0X2luZGV4X2lkcik7CitzdGF0aWMgc3RydWN0IGNiX2lkIGNuX2RzdF9pZCA9IHsgQ05fRFNUX0lEWCwgQ05fRFNUX1ZBTCB9OworCisvKgorICogRFNUIHN5c2ZzIHRyZWUgZm9yIGRldmljZSBjYWxsZWQgJ3N0b3JhZ2UnOgorICoKKyAqIC9zeXMvYnVzL2RzdC9kZXZpY2VzL3N0b3JhZ2UvCisgKiAvc3lzL2J1cy9kc3QvZGV2aWNlcy9zdG9yYWdlL3R5cGUgOiAxOTIuMTY4LjQuODA6MTAyNQorICogL3N5cy9idXMvZHN0L2RldmljZXMvc3RvcmFnZS9zaXplIDogODAwCisgKiAvc3lzL2J1cy9kc3QvZGV2aWNlcy9zdG9yYWdlL25hbWUgOiBzdG9yYWdlCisgKi8KKworc3RhdGljIGludCBkc3RfZGV2X21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBidXNfdHlwZSBkc3RfZGV2X2J1c190eXBlID0geworCS5uYW1lIAkJPSAiZHN0IiwKKwkubWF0Y2ggCQk9ICZkc3RfZGV2X21hdGNoLAorfTsKKworc3RhdGljIHZvaWQgZHN0X25vZGVfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRzdF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGRzdF9pbmZvLCBkZXZpY2UpOworCisJa2ZyZWUoaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlIGRzdF9ub2RlX2RldiA9IHsKKwkuYnVzIAkJPSAmZHN0X2Rldl9idXNfdHlwZSwKKwkucmVsZWFzZSAJPSAmZHN0X25vZGVfcmVsZWFzZQorfTsKKworLyoKKyAqIFNldHRpbmcgc2l6ZSBvZiB0aGUgbm9kZSBhZnRlciBpdCB3YXMgY2hhbmdlZC4KKyAqLworc3RhdGljIHZvaWQgZHN0X25vZGVfc2V0X3NpemUoc3RydWN0IGRzdF9ub2RlICpuKQoreworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CisKKwlzZXRfY2FwYWNpdHkobi0+ZGlzaywgbi0+c2l6ZSA+PiA5KTsKKworCWJkZXYgPSBiZGdldF9kaXNrKG4tPmRpc2ssIDApOworCWlmIChiZGV2KSB7CisJCW11dGV4X2xvY2soJmJkZXYtPmJkX2lub2RlLT5pX211dGV4KTsKKwkJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLCBuLT5zaXplKTsKKwkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9pbm9kZS0+aV9tdXRleCk7CisJCWJkcHV0KGJkZXYpOworCX0KK30KKworLyoKKyAqIERpc3RyaWJ1dGVkIHN0b3JhZ2UgcmVxdWVzdCBwcm9jZXNzaW5nIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IGRzdF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gcS0+cXVldWVkYXRhOworCWludCBlcnIgPSAtRUlPOworCisJaWYgKGJpb19lbXB0eV9iYXJyaWVyKGJpbykgJiYgIXEtPnByZXBhcmVfZGlzY2FyZF9mbikgeworCQkvKgorCQkgKiBUaGlzIGlzIGEgZGlydHleV25pY2UgaGFjaywgYnV0IGlmIHdlIGNvbXBsZXRlIHRoaXMKKwkJICogb3BlcmF0aW9uIHdpdGggLUVPUE5PVFNVUFAgbGlrZSBpbnRlbmRlZCwgWEZTCisJCSAqIHdpbGwgc3R1Y2sgYW5kIGZyZWV6ZSB0aGUgbWFjaGluZS4gVGhpcyBtYXkgYmUKKwkJICogbm90IHBhcnRpY3VsYXJ5IFhGUyBwcm9ibGVtIHRob3VnaCwgYnV0IGl0IGlzIHRoZQorCQkgKiBvbmx5IEZTIHdoaWNoIHNlbmRzIGVtcHR5IGJhcnJpZXIgYXQgdW1vdW50IHRpbWUKKwkJICogSSB3b3JrZWQgd2l0aC4KKwkJICoKKwkJICogRW1wdHkgYmFycmllcnMgYXJlIG5vdCBhbGxvd2VkIGFueXdheSwgc2VlIDUxZmQ3N2JkOWY1MTIKKwkJICogZm9yIGV4YW1wbGUsIGFsdGhvdWdoIGxhdGVyIGl0IHdhcyBjaGFuZ2VkIHRvIGJpb19kaXNjYXJkKCkKKwkJICogb25seSwgd2hpY2ggZG9lcyBub3Qgd29yayBpbiB0aGlzIGNhc2UuCisJCSAqLworCQkvL2VyciA9IC1FT1BOT1RTVVBQOworCQllcnIgPSAwOworCQlnb3RvIGVuZF9pbzsKKwl9CisKKwliaW9fZ2V0KGJpbyk7CisKKwlyZXR1cm4gZHN0X3Byb2Nlc3NfYmlvKG4sIGJpbyk7CisKK2VuZF9pbzoKKwliaW9fZW5kaW8oYmlvLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBPcGVuL2Nsb3NlIGNhbGxiYWNrcyBmb3IgYXBwcm9wcmlhdGUgYmxvY2sgZGV2aWNlLgorICovCitzdGF0aWMgaW50IGRzdF9iZGV2X29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQoreworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKworCWRzdF9ub2RlX2dldChuKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkc3RfYmRldl9yZWxlYXNlKHN0cnVjdCBnZW5kaXNrICpkaXNrLCBmbW9kZV90IG1vZGUpCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCisJZHN0X25vZGVfcHV0KG4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRzdF9ibGtfb3BzID0geworCS5vcGVuCQk9IGRzdF9iZGV2X29wZW4sCisJLnJlbGVhc2UJPSBkc3RfYmRldl9yZWxlYXNlLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKKy8qCisgKiBCbG9jayBsYXllciBiaW5kaW5nIC0gZGlzayBpcyBjcmVhdGVkIHdoZW4gYXJyYXkgaXMgZnVsbHkgY29uZmlndXJlZAorICogYnkgdXNlcnNwYWNlIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQgZHN0X25vZGVfY3JlYXRlX2Rpc2soc3RydWN0IGRzdF9ub2RlICpuKQoreworCWludCBlcnIgPSAtRU5PTUVNOworCXUzMiBpbmRleCA9IDA7CisKKwluLT5xdWV1ZSA9IGJsa19pbml0X3F1ZXVlKE5VTEwsIE5VTEwpOworCWlmICghbi0+cXVldWUpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJbi0+cXVldWUtPnF1ZXVlZGF0YSA9IG47CisJYmxrX3F1ZXVlX21ha2VfcmVxdWVzdChuLT5xdWV1ZSwgZHN0X3JlcXVlc3QpOworCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhuLT5xdWV1ZSwgbi0+bWF4X3BhZ2VzKTsKKwlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKG4tPnF1ZXVlLCBuLT5tYXhfcGFnZXMpOworCisJZXJyID0gLUVOT01FTTsKKwluLT5kaXNrID0gYWxsb2NfZGlzaygxKTsKKwlpZiAoIW4tPmRpc2spCisJCWdvdG8gZXJyX291dF9mcmVlX3F1ZXVlOworCisJaWYgKCEobi0+c3RhdGUtPnBlcm1pc3Npb25zICYgRFNUX1BFUk1fV1JJVEUpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkRTVCBub2RlICVzIGF0dGFjaGVkIHJlYWQtb25seS5cbiIsIG4tPm5hbWUpOworCQlzZXRfZGlza19ybyhuLT5kaXNrLCAxKTsKKwl9CisKKwlpZiAoIWlkcl9wcmVfZ2V0KCZkc3RfaW5kZXhfaWRyLCBHRlBfS0VSTkVMKSkKKwkJZ290byBlcnJfb3V0X3B1dDsKKworCW11dGV4X2xvY2soJmRzdF9oYXNoX2xvY2spOworCWVyciA9IGlkcl9nZXRfbmV3KCZkc3RfaW5kZXhfaWRyLCBOVUxMLCAmaW5kZXgpOworCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3B1dDsKKworCW4tPmRpc2stPm1ham9yID0gZHN0X21ham9yOworCW4tPmRpc2stPmZpcnN0X21pbm9yID0gaW5kZXg7CisJbi0+ZGlzay0+Zm9wcyA9ICZkc3RfYmxrX29wczsKKwluLT5kaXNrLT5xdWV1ZSA9IG4tPnF1ZXVlOworCW4tPmRpc2stPnByaXZhdGVfZGF0YSA9IG47CisJc25wcmludGYobi0+ZGlzay0+ZGlza19uYW1lLCBzaXplb2Yobi0+ZGlzay0+ZGlza19uYW1lKSwgImRzdC0lcyIsIG4tPm5hbWUpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcHV0OgorCXB1dF9kaXNrKG4tPmRpc2spOworZXJyX291dF9mcmVlX3F1ZXVlOgorCWJsa19jbGVhbnVwX3F1ZXVlKG4tPnF1ZXVlKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU3lzZnMgbWFjaGluZXJ5OiBzaG93IGRldmljZSdzIHNpemUuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGRzdF9zaG93X3NpemUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHVcbiIsIGluZm8tPnNpemUpOworfQorCisvKgorICogU2hvdyBsb2NhbCBleHBvcnRlZCBkZXZpY2UuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGRzdF9zaG93X2xvY2FsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZHN0X2luZm8gKmluZm8gPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgZHN0X2luZm8sIGRldmljZSk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaW5mby0+bG9jYWwpOworfQorCisvKgorICogU2hvd3MgdHlwZSBvZiB0aGUgcmVtb3RlIG5vZGUgLSBkZXZpY2UgbWFqb3IvbWlub3IgbnVtYmVyCisgKiBmb3IgbG9jYWwgbm9kZXMgYW5kIGFkZHJlc3MgKGFmX2luZXQgaXB2NC9pcHY2IG9ubHkpIGZvciByZW1vdGUgbm9kZXMuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGRzdF9zaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkc3RfaW5mbyAqaW5mbyA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBkc3RfaW5mbywgZGV2aWNlKTsKKwlpbnQgZmFtaWx5ID0gaW5mby0+bmV0LmFkZHIuc2FfZmFtaWx5OworCisJaWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZpbmZvLT5uZXQuYWRkcjsKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiJXUuJXUuJXUuJXU6JWRcbiIsCisJCQlOSVBRVUFEKHNpbi0+c2luX2FkZHIuc19hZGRyKSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOworCX0gZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmluZm8tPm5ldC5hZGRyOworCQlyZXR1cm4gc3ByaW50ZihidWYsCisJCQkiJXBpNjolZFxuIiwKKwkJCSZzaW4tPnNpbjZfYWRkciwgbnRvaHMoc2luLT5zaW42X3BvcnQpKTsKKwl9IGVsc2UgeworCQlpbnQgaSwgc3ogPSBQQUdFX1NJWkUgLSAyOyAvKiAwIHN5bWJvbCBhbmQgJ1xuJyBiZWxvdyAqLworCQlpbnQgc2l6ZSwgYWRkcmxlbiA9IGluZm8tPm5ldC5hZGRyLnNhX2RhdGFfbGVuOworCQl1bnNpZ25lZCBjaGFyICphID0gKHVuc2lnbmVkIGNoYXIgKikmaW5mby0+bmV0LmFkZHIuc2FfZGF0YTsKKwkJY2hhciAqYnVmX29yaWcgPSBidWY7CisKKwkJc2l6ZSA9IHNucHJpbnRmKGJ1Ziwgc3osICJmYW1pbHk6ICVkLCBhZGRybGVuOiAldSwgYWRkcjogIiwKKwkJCQlmYW1pbHksIGFkZHJsZW4pOworCQlzeiAtPSBzaXplOworCQlidWYgKz0gc2l6ZTsKKworCQlmb3IgKGk9MDsgaTxhZGRybGVuOyArK2kpIHsKKwkJCWlmIChzeiA8IDMpCisJCQkJYnJlYWs7CisKKwkJCXNpemUgPSBzbnByaW50ZihidWYsIHN6LCAiJTAyeCAiLCBhW2ldKTsKKwkJCXN6IC09IHNpemU7CisJCQlidWYgKz0gc2l6ZTsKKwkJfQorCQlidWYgKz0gc3ByaW50ZihidWYsICJcbiIpOworCisJCXJldHVybiBidWYgLSBidWZfb3JpZzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkc3Rfbm9kZV9hdHRyc1tdID0geworCV9fQVRUUihzaXplLCAwNDQ0LCBkc3Rfc2hvd19zaXplLCBOVUxMKSwKKwlfX0FUVFIodHlwZSwgMDQ0NCwgZHN0X3Nob3dfdHlwZSwgTlVMTCksCisJX19BVFRSKGxvY2FsLCAwNDQ0LCBkc3Rfc2hvd19sb2NhbCwgTlVMTCksCit9OworCitzdGF0aWMgaW50IGRzdF9jcmVhdGVfbm9kZV9hdHRyaWJ1dGVzKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpbnQgZXJyLCBpOworCisJZm9yIChpPTA7IGk8QVJSQVlfU0laRShkc3Rfbm9kZV9hdHRycyk7ICsraSkgeworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm4tPmluZm8tPmRldmljZSwKKwkJCQkmZHN0X25vZGVfYXR0cnNbaV0pOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X3JlbW92ZV9hbGw7CisJfQorCXJldHVybiAwOworCitlcnJfb3V0X3JlbW92ZV9hbGw6CisJd2hpbGUgKC0taSA+PSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm4tPmluZm8tPmRldmljZSwKKwkJCQkmZHN0X25vZGVfYXR0cnNbaV0pOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZHN0X3JlbW92ZV9ub2RlX2F0dHJpYnV0ZXMoc3RydWN0IGRzdF9ub2RlICpuKQoreworCWludCBpOworCisJZm9yIChpPTA7IGk8QVJSQVlfU0laRShkc3Rfbm9kZV9hdHRycyk7ICsraSkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZuLT5pbmZvLT5kZXZpY2UsCisJCQkJJmRzdF9ub2RlX2F0dHJzW2ldKTsKK30KKworLyoKKyAqIFN5c2ZzIGNsZWFudXAgYW5kIGluaXRpYWxpemF0aW9uLgorICogU2hvd3MgbnVtYmVyIG9mIHVzZWZ1bCBwYXJhbWV0ZXJzLgorICovCitzdGF0aWMgdm9pZCBkc3Rfbm9kZV9zeXNmc19leGl0KHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpZiAobi0+aW5mbykgeworCQlkc3RfcmVtb3ZlX25vZGVfYXR0cmlidXRlcyhuKTsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJm4tPmluZm8tPmRldmljZSk7CisJCW4tPmluZm8gPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBkc3Rfbm9kZV9zeXNmc19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpbnQgZXJyOworCisJbi0+aW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3RfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghbi0+aW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoJm4tPmluZm8tPmRldmljZSwgJmRzdF9ub2RlX2Rldiwgc2l6ZW9mKHN0cnVjdCBkZXZpY2UpKTsKKwluLT5pbmZvLT5zaXplID0gbi0+c2l6ZTsKKworCWRldl9zZXRfbmFtZSgmbi0+aW5mby0+ZGV2aWNlLCAiZHN0LSVzIiwgbi0+bmFtZSk7CisJZXJyID0gZGV2aWNlX3JlZ2lzdGVyKCZuLT5pbmZvLT5kZXZpY2UpOworCWlmIChlcnIpIHsKKwkJZHByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIG5vZGUgJyVzJywgZXJyOiAlZC5cbiIsCisJCQkJbi0+bmFtZSwgZXJyKTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJZHN0X2NyZWF0ZV9ub2RlX2F0dHJpYnV0ZXMobik7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCWtmcmVlKG4tPmluZm8pOworCW4tPmluZm8gPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBEU1Qgbm9kZSBoYXNoIHRhYmxlcyBtYWNoaW5lcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRzdF9oYXNoKGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IHNpemUpCit7CisJcmV0dXJuIChqaGFzaChzdHIsIHNpemUsIDApICUgZHN0X2hhc2h0YWJsZV9zaXplKTsKK30KKworc3RhdGljIHZvaWQgZHN0X25vZGVfcmVtb3ZlKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZuLT5ub2RlX2VudHJ5KTsKKwltdXRleF91bmxvY2soJmRzdF9oYXNoX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBkc3Rfbm9kZV9hZGQoc3RydWN0IGRzdF9ub2RlICpuKQoreworCXVuc2lnbmVkIGhhc2ggPSBkc3RfaGFzaChuLT5uYW1lLCBzaXplb2Yobi0+bmFtZSkpOworCisJbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmbi0+bm9kZV9lbnRyeSwgJmRzdF9oYXNodGFibGVbaGFzaF0pOworCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7Cit9CisKKy8qCisgKiBDbGVhbmluZyBub2RlIHdoZW4gaXQgaXMgYWJvdXQgdG8gYmUgZnJlZWQuCisgKiBUaGVyZSBhcmUgc3RpbGwgdXNlcnMgb2YgdGhlIHNvY2tldCB0aG91Z2gsCisgKiBzbyBjb25uZWN0aW9uIGNsZWFudXAgc2hvdWxkIGJlIHByb3RlY3RlZC4KKyAqLworc3RhdGljIHZvaWQgZHN0X25vZGVfY2xlYW51cChzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBuLT5zdGF0ZTsKKworCWlmICghc3QpCisJCXJldHVybjsKKworCWlmIChuLT5xdWV1ZSkgeworCQlibGtfY2xlYW51cF9xdWV1ZShuLT5xdWV1ZSk7CisKKwkJbXV0ZXhfbG9jaygmZHN0X2hhc2hfbG9jayk7CisJCWlkcl9yZW1vdmUoJmRzdF9pbmRleF9pZHIsIG4tPmRpc2stPmZpcnN0X21pbm9yKTsKKwkJbXV0ZXhfdW5sb2NrKCZkc3RfaGFzaF9sb2NrKTsKKworCQlwdXRfZGlzayhuLT5kaXNrKTsKKwl9CisKKwlpZiAobi0+YmRldikgeworCQlzeW5jX2Jsb2NrZGV2KG4tPmJkZXYpOworCQlibGtkZXZfcHV0KG4tPmJkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOworCX0KKworCWRzdF9zdGF0ZV9sb2NrKHN0KTsKKwlzdC0+bmVlZF9leGl0ID0gMTsKKwlkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3QpOworCWRzdF9zdGF0ZV91bmxvY2soc3QpOworCisJd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKKworCWRzdF9zdGF0ZV9wdXQoc3QpOworCW4tPnN0YXRlID0gTlVMTDsKK30KKworLyoKKyAqIEZyZWUgc2VjdXJpdHkgYXR0cmlidXRlcyBhdHRhY2hlZCB0byBnaXZlbiBub2RlLgorICovCitzdGF0aWMgdm9pZCBkc3Rfc2VjdXJpdHlfZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJc3RydWN0IGRzdF9zZWN1cmUgKnMsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocywgdG1wLCAmbi0+c2VjdXJpdHlfbGlzdCwgc2VjX2VudHJ5KSB7CisJCWxpc3RfZGVsKCZzLT5zZWNfZW50cnkpOworCQlrZnJlZShzKTsKKwl9Cit9CisKKy8qCisgKiBGcmVlIG5vZGUgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSB1c2Vycy4KKyAqIEFjdHVhbGx5IG5vZGUgaGFzIHRvIGJlIGZyZWVkIG9uIGJlaGFsZiBvZCB1c2Vyc3BhY2UgcHJvY2VzcywKKyAqIHNpbmNlIHRoZXJlIGFyZSBudW1iZXIgb2YgdGhyZWFkcywgd2hpY2ggYXJlIGVtYmVkZGVkIGluIHRoZQorICogbm9kZSwgc28gdGhleSBjYW4gbm90IGV4aXQgYW5kIGZyZWUgbm9kZSBmcm9tIHRoZXJlLCB0aGF0IGlzCisgKiB3aHkgdGhlcmUgaXMgYSB3YWtldXAgaWYgcmVmZXJlbmNlIGNvdW50ZXIgaXMgbm90IGVxdWFsIHRvIHplcm8uCisgKi8KK3ZvaWQgZHN0X25vZGVfcHV0KHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpZiAodW5saWtlbHkoIW4pKQorCQlyZXR1cm47CisKKwlkcHJpbnRrKCIlczogbjogJXAsIHJlZmNudDogJWQuXG4iLAorCQkJX19mdW5jX18sIG4sIGF0b21pY19yZWFkKCZuLT5yZWZjbnQpKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZuLT5yZWZjbnQpKSB7CisJCWRzdF9ub2RlX3JlbW92ZShuKTsKKwkJbi0+dHJhbnNfc2Nhbl90aW1lb3V0ID0gMDsKKwkJZHN0X25vZGVfY2xlYW51cChuKTsKKwkJdGhyZWFkX3Bvb2xfZGVzdHJveShuLT5wb29sKTsKKwkJZHN0X25vZGVfc3lzZnNfZXhpdChuKTsKKwkJZHN0X25vZGVfY3J5cHRvX2V4aXQobik7CisJCWRzdF9zZWN1cml0eV9leGl0KG4pOworCQlkc3Rfbm9kZV90cmFuc19leGl0KG4pOworCisJCWtmcmVlKG4pOworCisJCWRwcmludGsoIiVzOiBmcmVlZCBuOiAlcC5cbiIsIF9fZnVuY19fLCBuKTsKKwl9IGVsc2UgeworCQl3YWtlX3VwKCZuLT53YWl0KTsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGZpbmRzIGRldmljZXMgbWFqb3IvbWlub3IgbnVtYmVycyBmb3IgZ2l2ZW4gcGF0aG5hbWUuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2xvb2t1cF9kZXZpY2UoY29uc3QgY2hhciAqcGF0aCwgZGV2X3QgKmRldikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWVyciA9IHBhdGhfbG9va3VwKHBhdGgsIExPT0tVUF9GT0xMT1csICZuZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlub2RlID0gbmQucGF0aC5kZW50cnktPmRfaW5vZGU7CisJaWYgKCFpbm9kZSkgeworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIVNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpIHsKKwkJZXJyID0gLUVOT1RCTEs7CisJCWdvdG8gb3V0OworCX0KKworCSpkZXYgPSBpbm9kZS0+aV9yZGV2OworCitvdXQ6CisJcGF0aF9wdXQoJm5kLnBhdGgpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTZXR0aW5nIHVwIGV4cG9ydCBkZXZpY2U6IGxvb2t1cCBieSB0aGUgbmFtZSwgZ2V0IGl0cyBzaXplCisgKiBhbmQgc2V0dXAgbGlzdGVuaW5nIHNvY2tldCwgd2hpY2ggd2lsbCBhY2NlcHQgY2xpZW50cywgd2hpY2gKKyAqIHdpbGwgc3VibWl0IElPIGZvciBnaXZlbiBzdG9yYWdlLgorICovCitzdGF0aWMgaW50IGRzdF9zZXR1cF9leHBvcnQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAorCQlzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwgKmxlKQoreworCWludCBlcnI7CisJZGV2X3QgZGV2ID0gMDsgLyogZ2NjIGxpa2VzIHRvIHNjcmVhbSBoZXJlICovCisKKwlzbnByaW50ZihuLT5pbmZvLT5sb2NhbCwgc2l6ZW9mKG4tPmluZm8tPmxvY2FsKSwgIiVzIiwgbGUtPmRldmljZSk7CisKKwllcnIgPSBkc3RfbG9va3VwX2RldmljZShsZS0+ZGV2aWNlLCAmZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbi0+YmRldiA9IG9wZW5fYnlfZGV2bnVtKGRldiwgRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CisJaWYgKCFuLT5iZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChuLT5zaXplICE9IDApCisJCW4tPnNpemUgPSBtaW5fdChsb2ZmX3QsIG4tPmJkZXYtPmJkX2lub2RlLT5pX3NpemUsIG4tPnNpemUpOworCWVsc2UKKwkJbi0+c2l6ZSA9IG4tPmJkZXYtPmJkX2lub2RlLT5pX3NpemU7CisKKwluLT5pbmZvLT5zaXplID0gbi0+c2l6ZTsKKwllcnIgPSBkc3Rfbm9kZV9pbml0X2xpc3RlbmVkKG4sIGxlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfY2xlYW51cDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2NsZWFudXA6CisJYmxrZGV2X3B1dChuLT5iZGV2LCBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKTsKKwluLT5iZGV2ID0gTlVMTDsKKworCXJldHVybiBlcnI7Cit9CisKKy8qIEVtcHR5IHRocmVhZCBwb29sIGNhbGxiYWNrcyBmb3IgdGhlIG5ldHdvcmsgcHJvY2Vzc2luZyB0aHJlYWRzLiAqLworc3RhdGljIGlubGluZSB2b2lkICpkc3RfdGhyZWFkX25ldHdvcmtfaW5pdCh2b2lkICpkYXRhKQoreworCWRwcmludGsoIiVzOiBkYXRhOiAlcC5cbiIsIF9fZnVuY19fLCBkYXRhKTsKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRzdF90aHJlYWRfbmV0d29ya19jbGVhbnVwKHZvaWQgKmRhdGEpCit7CisJZHByaW50aygiJXM6IGRhdGE6ICVwLlxuIiwgX19mdW5jX18sIGRhdGEpOworfQorCisvKgorICogQWxsb2NhdGUgRFNUIG5vZGUgYW5kIGluaXRpYWxpemUgc29tZSBvZiBpdHMgcGFyYW1ldGVycy4KKyAqLworc3RhdGljIHN0cnVjdCBkc3Rfbm9kZSAqZHN0X2FsbG9jX25vZGUoc3RydWN0IGRzdF9jdGwgKmN0bCwKKwkJaW50ICgqc3RhcnQpKHN0cnVjdCBkc3Rfbm9kZSAqKSwKKwkJaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm47CisJaW50IGVycjsKKworCW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHN0X25vZGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW4pCisJCXJldHVybiBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJm4tPm5vZGVfZW50cnkpOworCisJSU5JVF9MSVNUX0hFQUQoJm4tPnNlY3VyaXR5X2xpc3QpOworCW11dGV4X2luaXQoJm4tPnNlY3VyaXR5X2xvY2spOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmbi0+d2FpdCk7CisKKwluLT50cmFuc19zY2FuX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKGN0bC0+dHJhbnNfc2Nhbl90aW1lb3V0KTsKKwlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCkKKwkJbi0+dHJhbnNfc2Nhbl90aW1lb3V0ID0gSFo7CisKKwluLT50cmFuc19tYXhfcmV0cmllcyA9IGN0bC0+dHJhbnNfbWF4X3JldHJpZXM7CisJaWYgKCFuLT50cmFuc19tYXhfcmV0cmllcykKKwkJbi0+dHJhbnNfbWF4X3JldHJpZXMgPSAxMDsKKworCS8qCisJICogUHJldHR5IG11Y2ggYXJiaXRyYXJ5IGRlZmF1bHQgbnVtYmVycy4KKwkgKiAzMiBtYXRjaGVzIG1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIGluIGJpbyBvcmlnaW5hdGVkIGZyb20gZXh0MyAoMzEpLgorCSAqLworCW4tPm1heF9wYWdlcyA9IGN0bC0+bWF4X3BhZ2VzOworCWlmICghbi0+bWF4X3BhZ2VzKQorCQluLT5tYXhfcGFnZXMgPSAzMjsKKworCWlmIChuLT5tYXhfcGFnZXMgPiAxMDI0KQorCQluLT5tYXhfcGFnZXMgPSAxMDI0OworCisJbi0+c3RhcnQgPSBzdGFydDsKKwluLT5zaXplID0gY3RsLT5zaXplOworCisJYXRvbWljX3NldCgmbi0+cmVmY250LCAxKTsKKwlhdG9taWNfbG9uZ19zZXQoJm4tPmdlbiwgMCk7CisJc25wcmludGYobi0+bmFtZSwgc2l6ZW9mKG4tPm5hbWUpLCAiJXMiLCBjdGwtPm5hbWUpOworCisJZXJyID0gZHN0X25vZGVfc3lzZnNfaW5pdChuKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCW4tPnBvb2wgPSB0aHJlYWRfcG9vbF9jcmVhdGUobnVtLCBuLT5uYW1lLCBkc3RfdGhyZWFkX25ldHdvcmtfaW5pdCwKKwkJCWRzdF90aHJlYWRfbmV0d29ya19jbGVhbnVwLCBuKTsKKwlpZiAoSVNfRVJSKG4tPnBvb2wpKSB7CisJCWVyciA9IFBUUl9FUlIobi0+cG9vbCk7CisJCWdvdG8gZXJyX291dF9zeXNmc19leGl0OworCX0KKworCWRwcmludGsoIiVzOiBuOiAlcCwgbmFtZTogJXMuXG4iLCBfX2Z1bmNfXywgbiwgbi0+bmFtZSk7CisKKwlyZXR1cm4gbjsKKworZXJyX291dF9zeXNmc19leGl0OgorCWRzdF9ub2RlX3N5c2ZzX2V4aXQobik7CitlcnJfb3V0X2ZyZWU6CisJa2ZyZWUobik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBTdGFydGluZyBhIG5vZGUsIGNvbm5lY3RlZCB0byB0aGUgcmVtb3RlIHNlcnZlcjoKKyAqIHJlZ2lzdGVyIGJsb2NrIGRldmljZSBhbmQgaW5pdGlhbGl6ZSB0cmFuc2FjdGlvbiBtZWNoYW5pc20uCisgKiBJbiByZXZlcnMgb3JkZXIgdGhvdWdoLgorICoKKyAqIEl0IHdpbGwgYXV0b25lZ290aWF0ZSBzb21lIHBhcmFtZXRlcnMgd2l0aCB0aGUgcmVtb3RlIG5vZGUKKyAqIGFuZCB1cGRhdGUgbG9jYWwgaWYgbmVlZGVkLgorICoKKyAqIFRyYW5zYWN0aW9uIGluaXRpYWxpemF0aW9uIHNob3VsZCBiZSB0aGUgbGFzdCB0aGluZyBiZWZvcmUKKyAqIHN0YXJ0aW5nIHRoZSBub2RlLCBzaW5jZSB0cmFuc2FjdGlvbiBzaG91bGQgaW5jbHVkZSBub3Qgb25seQorICogYmxvY2sgSU8sIGJ1dCBhbHNvIGNyeXB0byByZWxhdGVkIGRhdGEgKGlmIGFueSksIHdoaWNoIGFyZQorICogaW5pdGlhbGl6ZWQgc2VwYXJhdGVseS4KKyAqLworc3RhdGljIGludCBkc3Rfc3RhcnRfcmVtb3RlKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gZHN0X25vZGVfdHJhbnNfaW5pdChuLCBzaXplb2Yoc3RydWN0IGRzdF90cmFucykpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBkc3Rfbm9kZV9jcmVhdGVfZGlzayhuKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZHN0X25vZGVfc2V0X3NpemUobik7CisJYWRkX2Rpc2sobi0+ZGlzayk7CisKKwlkcHJpbnRrKCJEU1Q6IHN0YXJ0ZWQgcmVtb3RlIG5vZGUgJyVzJywgbWlub3I6ICVkLlxuIiwgbi0+bmFtZSwgbi0+ZGlzay0+Zmlyc3RfbWlub3IpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBZGRpbmcgcmVtb3RlIG5vZGUgYW5kIGluaXRpYWxpemUgY29ubmVjdGlvbi4KKyAqLworc3RhdGljIGludCBkc3RfYWRkX3JlbW90ZShzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCisJCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQoreworCWludCBlcnI7CisJc3RydWN0IGRzdF9uZXR3b3JrX2N0bCAqcmN0bCA9IGRhdGE7CisKKwlpZiAobikKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbiA9IGRzdF9hbGxvY19ub2RlKGN0bCwgZHN0X3N0YXJ0X3JlbW90ZSwgMSk7CisJaWYgKCFuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweSgmbi0+aW5mby0+bmV0LCByY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOworCWVyciA9IGRzdF9ub2RlX2luaXRfY29ubmVjdGVkKG4sIHJjdGwpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJZHN0X25vZGVfYWRkKG4pOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwlkc3Rfbm9kZV9wdXQobik7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEFkZGluZyBleHBvcnQgbm9kZTogaW5pdGlhbGl6aW5nIGJsb2NrIGRldmljZSBhbmQgbGlzdGVuaW5nIHNvY2tldC4KKyAqLworc3RhdGljIGludCBkc3RfYWRkX2V4cG9ydChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3RsICpjdGwsCisJCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQoreworCWludCBlcnI7CisJc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSA9IGRhdGE7CisKKwlpZiAobikKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9leHBvcnRfY3RsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluID0gZHN0X2FsbG9jX25vZGUoY3RsLCBkc3Rfc3RhcnRfZXhwb3J0LCAyKTsKKwlpZiAoIW4pCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gZHN0X3NldHVwX2V4cG9ydChuLCBjdGwsIGxlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCWRzdF9ub2RlX2FkZChuKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJZHN0X25vZGVfcHV0KG4pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZHN0X25vZGVfcmVtb3ZlX3VubG9hZChzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiU1RPUFBFRCBuYW1lOiAnJXMnLCBzaXplOiAlbGx1LlxuIiwKKwkJCW4tPm5hbWUsIG4tPnNpemUpOworCisJaWYgKG4tPmRpc2spCisJCWRlbF9nZW5kaXNrKG4tPmRpc2spOworCisJZHN0X25vZGVfcmVtb3ZlKG4pOworCWRzdF9ub2RlX3N5c2ZzX2V4aXQobik7CisKKwkvKgorCSAqIFRoaXMgaXMgbm90IGEgaGFjay4gUmVhbGx5LgorCSAqIE5vZGUncyByZWZlcmVuY2UgY291bnRlciBhbGxvd3MgdG8gaW1wbGVtZW50IGZpbmUgZ3JhaW5lZAorCSAqIG5vZGUgZnJlZWluZywgYnV0IHNpbmNlIGFsbCB0cmFuc2FjdGlvbnMgKHdoaWNoIGhvbGQgbm9kZSdzCisJICogcmVmZXJlbmNlIGNvdW50ZXIpIGFyZSBwcm9jZXNzZWQgaW4gdGhlIGRlZGljYXRlZCB0aHJlYWQsCisJICogaXQgaXMgcG9zc2libGUgdGhhdCByZWZlcmVuY2Ugd2lsbCBoaXQgemVybyBpbiB0aGF0IHRocmVhZCwKKwkgKiBzbyB3ZSB3aWxsIG5vdCBiZSBhYmxlIHRvIGV4aXQgdGhyZWFkIGFuZCBjbGVhbnVwIHRoZSBub2RlLgorCSAqCisJICogU28sIHdlIHJlbW92ZSBkaXNrLCBzbyBubyBuZXcgYWN0aXZpdHkgaXMgcG9zc2libGUsIGFuZAorCSAqIHdhaXQgdW50aWwgYWxsIHBlbmRpbmcgdHJhbnNhY3Rpb24gYXJlIGNvbXBsZXRlZCAoZWl0aGVyCisJICogaW4gcmVjZWl2aW5nIHRocmVhZCBvciBieSB0aW1lb3V0IGluIHdvcmtxdWV1ZSksIGluIHRoaXMKKwkgKiBjYXNlIHJlZmVyZW5jZSBjb3VudGVyIHdpbGwgYmUgbGVzcyBvciBlcXVhbCB0byAyIChvbmNlIHNldCBpbgorCSAqIGRzdF9hbGxvY19ub2RlKCkgYW5kIHRoZW4gaW4gY29ubmVjdG9yIG1lc3NhZ2UgcGFyc2VyOworCSAqIG9yIHdoZW4gd2UgZm9yY2UgbW9kdWxlIHVubG9hZGluZywgYW5kIGNvbm5lY3RvciBtZXNzYWdlCisJICogcGFyc2VyIGRvZXMgbm90IGhvbGQgYSByZWZlcmVuY2UsIGluIHRoaXMgY2FzZSByZWZlcmVuY2UKKwkgKiBjb3VudGVyIHdpbGwgYmUgZXF1YWwgdG8gMSksCisJICogYW5kIHN1YnNlcXVlbnQgZHN0X25vZGVfcHV0KCkgY2FsbHMgd2lsbCBmcmVlIHRoZSBub2RlLgorCSAqLworCWRwcmludGsoIiVzOiBnb2luZyB0byBzbGVlcCB3aXRoICVkIHJlZmNudC5cbiIsIF9fZnVuY19fLCBhdG9taWNfcmVhZCgmbi0+cmVmY250KSk7CisJd2FpdF9ldmVudChuLT53YWl0LCBhdG9taWNfcmVhZCgmbi0+cmVmY250KSA8PSAyKTsKKworCWRzdF9ub2RlX3B1dChuKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZSBub2RlIGZyb20gdGhlIGhhc2ggdGFibGUuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2RlbF9ub2RlKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKKwkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJaWYgKCFuKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBkc3Rfbm9kZV9yZW1vdmVfdW5sb2FkKG4pOworfQorCisvKgorICogSW5pdGlhbGl6ZSBjcnlwdG8gcHJvY2Vzc2luZyBmb3IgZ2l2ZW4gbm9kZS4KKyAqLworc3RhdGljIGludCBkc3RfY3J5cHRvX2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAorCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmNyeXB0byA9IGRhdGE7CisKKwlpZiAoIW4pCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBkc3RfY3J5cHRvX2N0bCkgKyBjcnlwdG8tPmhhc2hfa2V5c2l6ZSArCisJCQljcnlwdG8tPmNpcGhlcl9rZXlzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChuLT50cmFuc19jYWNoZSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlyZXR1cm4gZHN0X25vZGVfY3J5cHRvX2luaXQobiwgY3J5cHRvKTsKK30KKworLyoKKyAqIFNlY3VyaXR5IGF0dHJpYnV0ZXMgZm9yIGdpdmVuIG5vZGUuCisgKi8KK3N0YXRpYyBpbnQgZHN0X3NlY3VyaXR5X2luaXQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X2N0bCAqY3RsLAorCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHN0X3NlY3VyZSAqczsKKworCWlmICghbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGRzdF9zZWN1cmVfdXNlcikpCisJCXJldHVybiAtRUlOVkFMOworCisJcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkc3Rfc2VjdXJlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweSgmcy0+c2VjLCBkYXRhLCBzaXplKTsKKworCW11dGV4X2xvY2soJm4tPnNlY3VyaXR5X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnMtPnNlY19lbnRyeSwgJm4tPnNlY3VyaXR5X2xpc3QpOworCW11dGV4X3VubG9jaygmbi0+c2VjdXJpdHlfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEtpbGwnZW0gYWxsIQorICovCitzdGF0aWMgaW50IGRzdF9zdGFydF9ub2RlKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKKwkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJaW50IGVycjsKKworCWlmICghbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAobi0+dHJhbnNfY2FjaGUpCisJCXJldHVybiAwOworCisJZXJyID0gbi0+c3RhcnQobik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXByaW50ayhLRVJOX0lORk8gIlNUQVJURUQgbmFtZTogJyVzJywgc2l6ZTogJWxsdS5cbiIsIG4tPm5hbWUsIG4tPnNpemUpOworCXJldHVybiAwOworfQorCit0eXBlZGVmIGludCAoKmRzdF9jb21tYW5kX2Z1bmMpKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9jdGwgKmN0bCwKKwkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpOworCisvKgorICogTGlzdCBvZiB1c2Vyc3BhY2UgY29tbWFuZHMuCisgKi8KK3N0YXRpYyBkc3RfY29tbWFuZF9mdW5jIGRzdF9jb21tYW5kc1tdID0geworCVtEU1RfQUREX1JFTU9URV0gPSAmZHN0X2FkZF9yZW1vdGUsCisJW0RTVF9BRERfRVhQT1JUXSA9ICZkc3RfYWRkX2V4cG9ydCwKKwlbRFNUX0RFTF9OT0RFXSA9ICZkc3RfZGVsX25vZGUsCisJW0RTVF9DUllQVE9dID0gJmRzdF9jcnlwdG9faW5pdCwKKwlbRFNUX1NFQ1VSSVRZXSA9ICZkc3Rfc2VjdXJpdHlfaW5pdCwKKwlbRFNUX1NUQVJUXSA9ICZkc3Rfc3RhcnRfbm9kZSwKK307CisKKy8qCisgKiBDb25maWd1cmF0aW9uIHBhcnNlci4KKyAqLworc3RhdGljIHZvaWQgY25fZHN0X2NhbGxiYWNrKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRzdF9jdGwgKmN0bDsKKwlzdHJ1Y3QgY25fbXNnICptc2cgPSBkYXRhOworCWludCBlcnI7CisJc3RydWN0IGRzdF9jdGxfYWNrIGFjazsKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBOVUxMLCAqdG1wOworCXVuc2lnbmVkIGludCBoYXNoOworCisJaWYgKG1zZy0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBkc3RfY3RsKSkgeworCQllcnIgPSAtRUJBRE1TRzsKKwkJZ290byBvdXQ7CisJfQorCisJY3RsID0gKHN0cnVjdCBkc3RfY3RsICopbXNnLT5kYXRhOworCisJaWYgKGN0bC0+Y21kID49IERTVF9DTURfTUFYKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwloYXNoID0gZHN0X2hhc2goY3RsLT5uYW1lLCBzaXplb2YoY3RsLT5uYW1lKSk7CisKKwltdXRleF9sb2NrKCZkc3RfaGFzaF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJmRzdF9oYXNodGFibGVbaGFzaF0sIG5vZGVfZW50cnkpIHsKKwkJaWYgKCFtZW1jbXAodG1wLT5uYW1lLCBjdGwtPm5hbWUsIHNpemVvZih0bXAtPm5hbWUpKSkgeworCQkJbiA9IHRtcDsKKwkJCWRzdF9ub2RlX2dldChuKTsKKwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZHN0X2hhc2hfbG9jayk7CisKKwllcnIgPSBkc3RfY29tbWFuZHNbY3RsLT5jbWRdKG4sIGN0bCwgbXNnLT5kYXRhICsgc2l6ZW9mKHN0cnVjdCBkc3RfY3RsKSwKKwkJCW1zZy0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBkc3RfY3RsKSk7CisKKwlkc3Rfbm9kZV9wdXQobik7CitvdXQ6CisJbWVtY3B5KCZhY2subXNnLCBtc2csIHNpemVvZihzdHJ1Y3QgY25fbXNnKSk7CisKKwlhY2subXNnLmFjayA9IG1zZy0+YWNrICsgMTsKKwlhY2subXNnLmxlbiA9IHNpemVvZihzdHJ1Y3QgZHN0X2N0bF9hY2spIC0gc2l6ZW9mKHN0cnVjdCBjbl9tc2cpOworCisJYWNrLmVycm9yID0gZXJyOworCisJY25fbmV0bGlua19zZW5kKCZhY2subXNnLCAwLCBHRlBfS0VSTkVMKTsKK30KKworLyoKKyAqIEdsb2JhbCBpbml0aWFsaXphdGlvbjogc3lzZnMsIGhhc2ggdGFibGUsIGJsb2NrIGRldmljZSByZWdpc3RyYXRpb24sCisgKiBjb25uZWN0b3IgYW5kIHZhcmlvdXMgY2FjaGVzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBkc3Rfc3lzZnNfaW5pdCh2b2lkKQoreworCXJldHVybiBidXNfcmVnaXN0ZXIoJmRzdF9kZXZfYnVzX3R5cGUpOworfQorCitzdGF0aWMgdm9pZCBkc3Rfc3lzZnNfZXhpdCh2b2lkKQoreworCWJ1c191bnJlZ2lzdGVyKCZkc3RfZGV2X2J1c190eXBlKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZHN0X2hhc2h0YWJsZV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlkc3RfaGFzaHRhYmxlID0ga2NhbGxvYyhkc3RfaGFzaHRhYmxlX3NpemUsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwKKwkJCUdGUF9LRVJORUwpOworCWlmICghZHN0X2hhc2h0YWJsZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGk9MDsgaTxkc3RfaGFzaHRhYmxlX3NpemU7ICsraSkKKwkJSU5JVF9MSVNUX0hFQUQoJmRzdF9oYXNodGFibGVbaV0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRzdF9oYXNodGFibGVfZXhpdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBkc3Rfbm9kZSAqbiwgKnRtcDsKKworCWZvciAoaT0wOyBpPGRzdF9oYXNodGFibGVfc2l6ZTsgKytpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuLCB0bXAsICZkc3RfaGFzaHRhYmxlW2ldLCBub2RlX2VudHJ5KSB7CisJCQlkc3Rfbm9kZV9yZW1vdmVfdW5sb2FkKG4pOworCQl9CisJfQorCisJa2ZyZWUoZHN0X2hhc2h0YWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGRzdF9zeXNfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSAtRU5PTUVNOworCisJZXJyID0gZHN0X2hhc2h0YWJsZV9pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwllcnIgPSBkc3RfZXhwb3J0X2luaXQoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfaGFzaHRhYmxlX2V4aXQ7CisKKwllcnIgPSByZWdpc3Rlcl9ibGtkZXYoZHN0X21ham9yLCBEU1RfTkFNRSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dF9leHBvcnRfZXhpdDsKKwlpZiAoZXJyKQorCQlkc3RfbWFqb3IgPSBlcnI7CisKKwllcnIgPSBkc3Rfc3lzZnNfaW5pdCgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyOworCisJZXJyID0gY25fYWRkX2NhbGxiYWNrKCZjbl9kc3RfaWQsICJEU1QiLCBjbl9kc3RfY2FsbGJhY2spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9zeXNmc19leGl0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiRGlzdHJpYnV0ZWQgc3RvcmFnZSwgJyVzJyByZWxlYXNlLlxuIiwgZHN0X25hbWUpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfc3lzZnNfZXhpdDoKKwlkc3Rfc3lzZnNfZXhpdCgpOworZXJyX291dF91bnJlZ2lzdGVyOgorCXVucmVnaXN0ZXJfYmxrZGV2KGRzdF9tYWpvciwgRFNUX05BTUUpOworZXJyX291dF9leHBvcnRfZXhpdDoKKwlkc3RfZXhwb3J0X2V4aXQoKTsKK2Vycl9vdXRfaGFzaHRhYmxlX2V4aXQ6CisJZHN0X2hhc2h0YWJsZV9leGl0KCk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRzdF9zeXNfZXhpdCh2b2lkKQoreworCWNuX2RlbF9jYWxsYmFjaygmY25fZHN0X2lkKTsKKwl1bnJlZ2lzdGVyX2Jsa2Rldihkc3RfbWFqb3IsIERTVF9OQU1FKTsKKwlkc3RfaGFzaHRhYmxlX2V4aXQoKTsKKwlkc3Rfc3lzZnNfZXhpdCgpOworCWRzdF9leHBvcnRfZXhpdCgpOworfQorCittb2R1bGVfaW5pdChkc3Rfc3lzX2luaXQpOworbW9kdWxlX2V4aXQoZHN0X3N5c19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEaXN0cmlidXRlZCBzdG9yYWdlIik7CitNT0RVTEVfQVVUSE9SKCJFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L2V4cG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9leHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGFlNGViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9leHBvcnQuYwpAQCAtMCwwICsxLDY1NyBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKy8qCisgKiBFeHBvcnQgYmlvc2V0IGlzIHVzZWQgZm9yIHNlcnZlciBibG9jayBJTyByZXF1ZXN0cy4KKyAqLworc3RhdGljIHN0cnVjdCBiaW9fc2V0ICpkc3RfYmlvX3NldDsKKworaW50IF9faW5pdCBkc3RfZXhwb3J0X2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCWRzdF9iaW9fc2V0ID0gYmlvc2V0X2NyZWF0ZSgzMiwgc2l6ZW9mKHN0cnVjdCBkc3RfZXhwb3J0X3ByaXYpKTsKKwlpZiAoIWRzdF9iaW9fc2V0KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBkc3RfZXhwb3J0X2V4aXQodm9pZCkKK3sKKwliaW9zZXRfZnJlZShkc3RfYmlvX3NldCk7Cit9CisKKy8qCisgKiBXaGVuIGNsaWVudCBjb25uZWN0cyBhbmQgYXV0b25lZ290aWF0ZXMgd2l0aCB0aGUgc2VydmVyIG5vZGUsCisgKiBpdHMgcGVybWlzc2lvbnMgYXJlIGNoZWNrZWQgaW4gYSBzZWN1cml0eSBhdHRyaWJ1dGVzIGFuZCBzZW50CisgKiBiYWNrLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGRzdF9jaGVja19wZXJtaXNzaW9ucyhzdHJ1Y3QgZHN0X3N0YXRlICptYWluLCBzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBtYWluLT5ub2RlOworCXN0cnVjdCBkc3Rfc2VjdXJlICpzZW50cnk7CisJc3RydWN0IGRzdF9zZWN1cmVfdXNlciAqczsKKwlzdHJ1Y3Qgc2FkZHIgKnNhID0gJnN0LT5jdGwuYWRkcjsKKwl1bnNpZ25lZCBpbnQgcGVybSA9IDA7CisKKwltdXRleF9sb2NrKCZuLT5zZWN1cml0eV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlbnRyeSwgJm4tPnNlY3VyaXR5X2xpc3QsIHNlY19lbnRyeSkgeworCQlzID0gJnNlbnRyeS0+c2VjOworCisJCWlmIChzLT5hZGRyLnNhX2ZhbWlseSAhPSBzYS0+c2FfZmFtaWx5KQorCQkJY29udGludWU7CisKKwkJaWYgKHMtPmFkZHIuc2FfZGF0YV9sZW4gIT0gc2EtPnNhX2RhdGFfbGVuKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogVGhpcyAnMicgYmVsb3cgaXMgYSBwb3J0IGZpZWxkLiBUaGlzIG1heSBiZSB2ZXJ5IHdyb25nIHRvIGRvCisJCSAqIGluIGF0YWxrIGZvciBleGFtcGxlIHRob3VnaC4gSWYgdGhlcmUgd2lsbCBiZSBhbnkgbmVlZCB0byBleHRlbnQKKwkJICogcHJvdG9jb2wgdG8gc29tZXRoaW5nIGVsc2UsIEkgY2FuIGNyZWF0ZSBwZXItZmFtaWx5IGhlbHBlcnMgYW5kCisJCSAqIHVzZSB0aGVtIGluc3RlYWQgb2YgdGhpcyBtZW1jbXAuCisJCSAqLworCQlpZiAobWVtY21wKHMtPmFkZHIuc2FfZGF0YSArIDIsIHNhLT5zYV9kYXRhICsgMiwKKwkJCQkJc2EtPnNhX2RhdGFfbGVuIC0gMikpCisJCQljb250aW51ZTsKKworCQlwZXJtID0gcy0+cGVybWlzc2lvbnM7CisJfQorCW11dGV4X3VubG9jaygmbi0+c2VjdXJpdHlfbG9jayk7CisKKwlyZXR1cm4gcGVybTsKK30KKworLyoKKyAqIEFjY2VwdCBuZXcgY2xpZW50OiBhbGxvY2F0ZSBhcHByb3ByaWF0ZSBuZXR3b3JrIHN0YXRlIGFuZCBjaGVjayBwZXJtaXNzaW9ucy4KKyAqLworc3RhdGljIHN0cnVjdCBkc3Rfc3RhdGUgKmRzdF9hY2NlcHRfY2xpZW50KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCXVuc2lnbmVkIGludCByZXZlbnRzID0gMDsKKwl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IGVycl9tYXNrIHwgUE9MTElOOworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOworCWludCBlcnIgPSAwOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBOVUxMOworCXN0cnVjdCBkc3Rfc3RhdGUgKm5ldzsKKworCXdoaWxlICghZXJyICYmICFzb2NrKSB7CisJCXJldmVudHMgPSBkc3Rfc3RhdGVfcG9sbChzdCk7CisKKwkJaWYgKCEocmV2ZW50cyAmIG1hc2spKSB7CisJCQlERUZJTkVfV0FJVCh3YWl0KTsKKworCQkJZm9yICg7OykgeworCQkJCXByZXBhcmVfdG9fd2FpdCgmc3QtPnRocmVhZF93YWl0LAorCQkJCQkJJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJaWYgKCFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwgc3QtPm5lZWRfZXhpdCkKKwkJCQkJYnJlYWs7CisKKwkJCQlyZXZlbnRzID0gZHN0X3N0YXRlX3BvbGwoc3QpOworCisJCQkJaWYgKHJldmVudHMgJiBtYXNrKQorCQkJCQlicmVhazsKKworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQkJYnJlYWs7CisKKwkJCQkvKgorCQkJCSAqIE1hZ2ljIEhaPyBQb2xsaW5nIGNoZWNrIGFib3ZlIGlzIG5vdCBzYWZlIGluCisJCQkJICogYWxsIGNhc2VzIChsaWtlIHNvY2tldCByZXNldCBpbiBCSCBjb250ZXh0KSwKKwkJCQkgKiBzbyBpdCBpcyBzaW1wbGVyIGp1c3QgdG8gcG9zdHBvbmUgaXQgdG8gdGhlCisJCQkJICogcHJvY2VzcyBjb250ZXh0IGluc3RlYWQgb2YgaW1wbGVtZW50aW5nIHNwZWNpYWwKKwkJCQkgKiBsb2NraW5nIHRoZXJlLgorCQkJCSAqLworCQkJCXNjaGVkdWxlX3RpbWVvdXQoSFopOworCQkJfQorCQkJZmluaXNoX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQpOworCQl9CisKKwkJZXJyID0gLUVDT05OUkVTRVQ7CisJCWRzdF9zdGF0ZV9sb2NrKHN0KTsKKworCQlkcHJpbnRrKCIlczogc3Q6ICVwLCByZXZlbnRzOiAleCBbZXJyOiAlZCwgaW46ICVkXS5cbiIsCisJCQlfX2Z1bmNfXywgc3QsIHJldmVudHMsIHJldmVudHMgJiBlcnJfbWFzaywKKwkJCXJldmVudHMgJiBQT0xMSU4pOworCisJCWlmIChyZXZlbnRzICYgZXJyX21hc2spIHsKKwkJCWRwcmludGsoIiVzOiByZXZlbnRzOiAleCwgc29ja2V0OiAlcCwgZXJyOiAlZC5cbiIsCisJCQkJCV9fZnVuY19fLCByZXZlbnRzLCBzdC0+c29ja2V0LCBlcnIpOworCQkJZXJyID0gLUVDT05OUkVTRVQ7CisJCX0KKworCQlpZiAoIW4tPnRyYW5zX3NjYW5fdGltZW91dCB8fCBzdC0+bmVlZF9leGl0KQorCQkJZXJyID0gLUVOT0RFVjsKKworCQlpZiAoc3QtPnNvY2tldCAmJiAocmV2ZW50cyAmIFBPTExJTikpCisJCQllcnIgPSBrZXJuZWxfYWNjZXB0KHN0LT5zb2NrZXQsICZzb2NrLCAwKTsKKworCQlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKKwl9CisKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCW5ldyA9IGRzdF9zdGF0ZV9hbGxvYyhzdC0+bm9kZSk7CisJaWYgKCFuZXcpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X3JlbGVhc2U7CisJfQorCW5ldy0+c29ja2V0ID0gc29jazsKKworCW5ldy0+Y3RsLmFkZHIuc2FfZGF0YV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKTsKKwllcnIgPSBrZXJuZWxfZ2V0cGVlcm5hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXctPmN0bC5hZGRyLAorCQkJKGludCAqKSZuZXctPmN0bC5hZGRyLnNhX2RhdGFfbGVuKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcHV0OworCisJbmV3LT5wZXJtaXNzaW9ucyA9IGRzdF9jaGVja19wZXJtaXNzaW9ucyhzdCwgbmV3KTsKKwlpZiAobmV3LT5wZXJtaXNzaW9ucyA9PSAwKSB7CisJCWVyciA9IC1FUEVSTTsKKwkJZHN0X2R1bXBfYWRkcihzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJm5ldy0+Y3RsLmFkZHIsCisJCQkJIkNsaWVudCBpcyBub3QgYWxsb3dlZCB0byBjb25uZWN0Iik7CisJCWdvdG8gZXJyX291dF9wdXQ7CisJfQorCisJZXJyID0gZHN0X3BvbGxfaW5pdChuZXcpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwlkc3RfZHVtcF9hZGRyKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV3LT5jdGwuYWRkciwKKwkJCSJDb25uZWN0ZWQgY2xpZW50Iik7CisKKwlyZXR1cm4gbmV3OworCitlcnJfb3V0X3B1dDoKKwlkc3Rfc3RhdGVfcHV0KG5ldyk7CitlcnJfb3V0X3JlbGVhc2U6CisJc29ja19yZWxlYXNlKHNvY2spOworZXJyX291dF9leGl0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKKy8qCisgKiBFYWNoIHNlcnZlcidzIGJsb2NrIHJlcXVlc3Qgc29tZXRpbWUgZmluaXNoZXMuCisgKiBVc3VhbGx5IGl0IGhhcHBlbnMgaW4gaGFyZCBpcnEgY29udGV4dCBvZiB0aGUgYXBwcm9wcmlhdGUgY29udHJvbGxlciwKKyAqIHNvIHRvIHBsYXkgZ29vZCB3aXRoIGFsbCBjYXNlcyB3ZSBqdXN0IHF1ZXVlIEJJTyBpbnRvIHRoZSBxdWV1ZQorICogYW5kIHdha2UgdXAgcHJvY2Vzc2luZyB0aHJlYWQsIHdoaWNoIGdldHMgY29tcGxldGVkIHJlcXVlc3QgYW5kCisgKiBzZW5kIChlbmNyeXB0aW5nIGlmIG5lZWRlZCkgaXQgYmFjayB0byB0aGUgY2xpZW50IChpZiBpdCB3YXMgYSByZWFkCisgKiByZXF1ZXN0KSwgb3Igc2VuZHMgYmFjayByZXBseSB0aGF0IHdyaXRpbmcgc3VjY2VzZnVsbHkgY29tcGxldGVkLgorICovCitzdGF0aWMgaW50IGRzdF9leHBvcnRfcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcCA9IE5VTEw7CisJc3RydWN0IGJpbyAqYmlvOworCWludCBlcnIgPSAwOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOworCQlpZiAoIWxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKSB7CisJCQlwID0gbGlzdF9maXJzdF9lbnRyeSgmc3QtPnJlcXVlc3RfbGlzdCwKKwkJCQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2LCByZXF1ZXN0X2VudHJ5KTsKKwkJCWxpc3RfZGVsKCZwLT5yZXF1ZXN0X2VudHJ5KTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7CisKKwkJaWYgKCFwKQorCQkJYnJlYWs7CisKKwkJYmlvID0gcC0+YmlvOworCisJCWlmIChkc3RfbmVlZF9jcnlwdG8oc3QtPm5vZGUpICYmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBSRUFEKSkKKwkJCWVyciA9IGRzdF9leHBvcnRfY3J5cHRvKHN0LT5ub2RlLCBiaW8pOworCQllbHNlCisJCQllcnIgPSBkc3RfZXhwb3J0X3NlbmRfYmlvKGJpbyk7CisKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBDbGVhbnVwIGV4cG9ydCBzdGF0ZS4KKyAqIEl0IGhhcyB0byB3YWl0IHVudGlsIGFsbCByZXF1ZXN0cyBhcmUgZmluaXNoZWQsCisgKiBhbmQgdGhlbiBmcmVlIHRoZW0gYWxsLgorICovCitzdGF0aWMgdm9pZCBkc3Rfc3RhdGVfY2xlYW51cF9leHBvcnQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBUaGlzIGxvb3Agd2FpdHMgZm9yIGFsbCBwZW5kaW5nIGJpb3MgdG8gYmUgY29tcGxldGVkIGFuZCBmcmVlZC4KKwkgKi8KKwl3aGlsZSAoYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpID4gMSkgeworCQlkcHJpbnRrKCIlczogc3Q6ICVwLCByZWZjbnQ6ICVkLCBsaXN0X2VtcHR5OiAlZC5cbiIsCisJCQkJX19mdW5jX18sIHN0LCBhdG9taWNfcmVhZCgmc3QtPnJlZmNudCksCisJCQkJbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkpOworCQl3YWl0X2V2ZW50X3RpbWVvdXQoc3QtPnRocmVhZF93YWl0LAorCQkJCShhdG9taWNfcmVhZCgmc3QtPnJlZmNudCkgPT0gMSkgfHwKKwkJCQkhbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCksCisJCQkJSFovMik7CisKKwkJd2hpbGUgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgeworCQkJcCA9IE5VTEw7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOworCQkJaWYgKCFsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSkgeworCQkJCXAgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdC0+cmVxdWVzdF9saXN0LAorCQkJCQlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2LCByZXF1ZXN0X2VudHJ5KTsKKwkJCQlsaXN0X2RlbCgmcC0+cmVxdWVzdF9lbnRyeSk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7CisKKwkJCWlmIChwKQorCQkJCWJpb19wdXQocC0+YmlvKTsKKworCQkJZHByaW50aygiJXM6IHN0OiAlcCwgcmVmY250OiAlZCwgbGlzdF9lbXB0eTogJWQsIHA6ICVwLlxuIiwKKwkJCQlfX2Z1bmNfXywgc3QsIGF0b21pY19yZWFkKCZzdC0+cmVmY250KSwKKwkJCQlsaXN0X2VtcHR5KCZzdC0+cmVxdWVzdF9saXN0KSwgcCk7CisJCX0KKwl9CisKKwlkc3Rfc3RhdGVfcHV0KHN0KTsKK30KKworLyoKKyAqIENsaWVudCBhY2NlcHRpbmcgdGhyZWFkLgorICogTm90IG9ubHkgYWNjZXB0cyBuZXcgY29ubmVjdGlvbiwgYnV0IGFsc28gc2NoZWR1bGVzIHJlY2VpdmluZyB0aHJlYWQKKyAqIGFuZCBwZXJmb3JtcyByZXF1ZXN0IGNvbXBsZXRpb24gZGVzY3JpYmVkIGFib3ZlLgorICovCitzdGF0aWMgaW50IGRzdF9hY2NlcHQodm9pZCAqaW5pdF9kYXRhLCB2b2lkICpzY2hlZHVsZV9kYXRhKQoreworCXN0cnVjdCBkc3Rfc3RhdGUgKm1haW5fc3QgPSBzY2hlZHVsZV9kYXRhOworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IGluaXRfZGF0YTsKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKKwlpbnQgZXJyOworCisJd2hpbGUgKG4tPnRyYW5zX3NjYW5fdGltZW91dCAmJiAhbWFpbl9zdC0+bmVlZF9leGl0KSB7CisJCWRwcmludGsoIiVzOiBtYWluX3N0OiAlcCwgbjogJXAuXG4iLCBfX2Z1bmNfXywgbWFpbl9zdCwgbik7CisJCXN0ID0gZHN0X2FjY2VwdF9jbGllbnQobWFpbl9zdCk7CisJCWlmIChJU19FUlIoc3QpKQorCQkJY29udGludWU7CisKKwkJZXJyID0gZHN0X3N0YXRlX3NjaGVkdWxlX3JlY2VpdmVyKHN0KTsKKwkJaWYgKCFlcnIpIHsKKwkJCXdoaWxlIChuLT50cmFuc19zY2FuX3RpbWVvdXQpIHsKKwkJCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChzdC0+dGhyZWFkX3dhaXQsCisJCQkJCQkhbGlzdF9lbXB0eSgmc3QtPnJlcXVlc3RfbGlzdCkgfHwKKwkJCQkJCSFuLT50cmFuc19zY2FuX3RpbWVvdXQgfHwKKwkJCQkJCXN0LT5uZWVkX2V4aXQsCisJCQkJCUhaKTsKKworCQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCisJCQkJCWJyZWFrOworCisJCQkJaWYgKGxpc3RfZW1wdHkoJnN0LT5yZXF1ZXN0X2xpc3QpKQorCQkJCQljb250aW51ZTsKKworCQkJCWVyciA9IGRzdF9leHBvcnRfcHJvY2Vzc19yZXF1ZXN0X3F1ZXVlKHN0KTsKKwkJCQlpZiAoZXJyKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJc3QtPm5lZWRfZXhpdCA9IDE7CisJCQl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOworCQl9CisKKwkJZHN0X3N0YXRlX2NsZWFudXBfZXhwb3J0KHN0KTsKKwl9CisKKwlkcHJpbnRrKCIlczogZnJlZWluZyBsaXN0ZW5pbmcgc29ja2V0IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBtYWluX3N0KTsKKworCWRzdF9zdGF0ZV9sb2NrKG1haW5fc3QpOworCWRzdF9wb2xsX2V4aXQobWFpbl9zdCk7CisJZHN0X3N0YXRlX3NvY2tldF9yZWxlYXNlKG1haW5fc3QpOworCWRzdF9zdGF0ZV91bmxvY2sobWFpbl9zdCk7CisJZHN0X3N0YXRlX3B1dChtYWluX3N0KTsKKwlkcHJpbnRrKCIlczogZnJlZWQgbGlzdGVuaW5nIHNvY2tldCBzdDogJXAuXG4iLCBfX2Z1bmNfXywgbWFpbl9zdCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRzdF9zdGFydF9leHBvcnQoc3RydWN0IGRzdF9ub2RlICpuKQoreworCWlmIChsaXN0X2VtcHR5KCZuLT5zZWN1cml0eV9saXN0KSkgeworCQlwcmludGsoS0VSTl9FUlIgIllvdSBhcmUgdHJ5aW5nIHRvIGV4cG9ydCBub2RlICclcycgd2l0aG91dCBzZWN1cml0eSBhdHRyaWJ1dGVzLlxuIgorCQkJCSJObyBjbGllbnRzIHdpbGwgYmUgYWxsb3dlZCB0byBjb25uZWN0LiBFeGl0aW5nLlxuIiwgbi0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gZHN0X25vZGVfdHJhbnNfaW5pdChuLCBzaXplb2Yoc3RydWN0IGRzdF9leHBvcnRfcHJpdikpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBsaXN0ZW5pbmcgc3RhdGUgYW5kIHNjaGVkdWxlIGFjY2VwdGluZyB0aHJlYWQuCisgKi8KK2ludCBkc3Rfbm9kZV9pbml0X2xpc3RlbmVkKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSkKK3sKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpjdGwgPSAmbGUtPmN0bDsKKworCW1lbWNweSgmbi0+aW5mby0+bmV0LCBjdGwsIHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSk7CisKKwlzdCA9IGRzdF9zdGF0ZV9hbGxvYyhuKTsKKwlpZiAoSVNfRVJSKHN0KSkgeworCQllcnIgPSBQVFJfRVJSKHN0KTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCW1lbWNweSgmc3QtPmN0bCwgY3RsLCBzaXplb2Yoc3RydWN0IGRzdF9uZXR3b3JrX2N0bCkpOworCisJZXJyID0gZHN0X3N0YXRlX3NvY2tldF9jcmVhdGUoc3QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwlzdC0+c29ja2V0LT5zay0+c2tfcmV1c2UgPSAxOworCisJZXJyID0ga2VybmVsX2JpbmQoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZjdGwtPmFkZHIsCisJCQljdGwtPmFkZHIuc2FfZGF0YV9sZW4pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9zb2NrZXRfcmVsZWFzZTsKKworCWVyciA9IGtlcm5lbF9saXN0ZW4oc3QtPnNvY2tldCwgMTAyNCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3NvY2tldF9yZWxlYXNlOworCW4tPnN0YXRlID0gc3Q7CisKKwllcnIgPSBkc3RfcG9sbF9pbml0KHN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfc29ja2V0X3JlbGVhc2U7CisKKwlkc3Rfc3RhdGVfZ2V0KHN0KTsKKworCWVyciA9IHRocmVhZF9wb29sX3NjaGVkdWxlKG4tPnBvb2wsIGRzdF90aHJlYWRfc2V0dXAsCisJCQlkc3RfYWNjZXB0LCBzdCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9wb2xsX2V4aXQ7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9wb2xsX2V4aXQ6CisJZHN0X3BvbGxfZXhpdChzdCk7CitlcnJfb3V0X3NvY2tldF9yZWxlYXNlOgorCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdCk7CitlcnJfb3V0X3B1dDoKKwlkc3Rfc3RhdGVfcHV0KHN0KTsKK2Vycl9vdXRfZXhpdDoKKwluLT5zdGF0ZSA9IE5VTEw7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEZyZWUgYmlvIGFuZCByZWxhdGVkIHByaXZhdGUgZGF0YS4KKyAqIEFsc28gZHJvcCBhIHJlZmVyZW5jZSBjb3VudGVyIGZvciBhcHByb3ByaWF0ZSBzdGF0ZSwKKyAqIHdoaWNoIHdhaXRzIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgYmxvY2sgSU9zIGluLWZsaWdodC4KKyAqLworc3RhdGljIHZvaWQgZHN0X2Jpb19kZXN0cnVjdG9yKHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcHJpdiA9IGJpby0+YmlfcHJpdmF0ZTsKKwlpbnQgaTsKKworCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKKwkJaWYgKCFidi0+YnZfcGFnZSkKKwkJCWJyZWFrOworCisJCV9fZnJlZV9wYWdlKGJ2LT5idl9wYWdlKTsKKwl9CisKKwlpZiAocHJpdikKKwkJZHN0X3N0YXRlX3B1dChwcml2LT5zdGF0ZSk7CisJYmlvX2ZyZWUoYmlvLCBkc3RfYmlvX3NldCk7Cit9CisKKy8qCisgKiBCbG9jayBJTyBjb21wbGV0aW9uLiBRdWV1ZSByZXF1ZXN0IHRvIGJlIHNlbnQgYmFjayB0bworICogdGhlIGNsaWVudCAob3IganVzdCBjb25maXJtYXRpb24pLgorICovCitzdGF0aWMgdm9pZCBkc3RfYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8sIGludCBlcnIpCit7CisJc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqcCA9IGJpby0+YmlfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IHAtPnN0YXRlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3QtPnJlcXVlc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnAtPnJlcXVlc3RfZW50cnksICZzdC0+cmVxdWVzdF9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdC0+cmVxdWVzdF9sb2NrLCBmbGFncyk7CisKKwl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOworfQorCisvKgorICogQWxsb2NhdGUgcmVhZCByZXF1ZXN0IGZvciB0aGUgc2VydmVyLgorICovCitzdGF0aWMgaW50IGRzdF9leHBvcnRfcmVhZF9yZXF1ZXN0KHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHRvdGFsX3NpemUpCit7CisJdW5zaWduZWQgaW50IHNpemU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IGVycjsKKworCXdoaWxlICh0b3RhbF9zaXplKSB7CisJCWVyciA9IC1FTk9NRU07CisJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIXBhZ2UpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCQlzaXplID0gbWluX3QodW5zaWduZWQgaW50LCBQQUdFX1NJWkUsIHRvdGFsX3NpemUpOworCisJCWVyciA9IGJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIHNpemUsIDApOworCQlkcHJpbnRrKCIlczogYmlvOiAlbGx1LyV1LCBzaXplOiAldSwgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKKwkJCQlzaXplLCBlcnIpOworCQlpZiAoZXJyIDw9IDApCisJCQlnb3RvIGVycl9vdXRfZnJlZV9wYWdlOworCisJCXRvdGFsX3NpemUgLT0gc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlX3BhZ2U6CisJX19mcmVlX3BhZ2UocGFnZSk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEFsbG9jYXRlIHdyaXRlIHJlcXVlc3QgZm9yIHRoZSBzZXJ2ZXIuCisgKiBTaG91bGQgbm90IG9ubHkgZ2V0IHBhZ2VzLCBidXQgYWxzbyByZWFkIGRhdGEgZnJvbSB0aGUgbmV0d29yay4KKyAqLworc3RhdGljIGludCBkc3RfZXhwb3J0X3dyaXRlX3JlcXVlc3Qoc3RydWN0IGRzdF9zdGF0ZSAqc3QsCisJCXN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHRvdGFsX3NpemUpCit7CisJdW5zaWduZWQgaW50IHNpemU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdm9pZCAqZGF0YTsKKwlpbnQgZXJyOworCisJd2hpbGUgKHRvdGFsX3NpemUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghcGFnZSkKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWRhdGEgPSBrbWFwKHBhZ2UpOworCQlpZiAoIWRhdGEpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9wYWdlOworCisJCXNpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFBBR0VfU0laRSwgdG90YWxfc2l6ZSk7CisKKwkJZXJyID0gZHN0X2RhdGFfcmVjdihzdCwgZGF0YSwgc2l6ZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfdW5tYXBfcGFnZTsKKworCQllcnIgPSBiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBzaXplLCAwKTsKKwkJaWYgKGVyciA8PSAwKQorCQkJZ290byBlcnJfb3V0X3VubWFwX3BhZ2U7CisKKwkJa3VubWFwKHBhZ2UpOworCisJCXRvdGFsX3NpemUgLT0gc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX291dF91bm1hcF9wYWdlOgorCWt1bm1hcChwYWdlKTsKK2Vycl9vdXRfZnJlZV9wYWdlOgorCV9fZnJlZV9wYWdlKHBhZ2UpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBHcm9vdnksIHdlJ3ZlIGdvdHRlbiBhbiBJTyByZXF1ZXN0IGZyb20gdGhlIGNsaWVudC4KKyAqIEFsbG9jYXRlIEJJTyBmcm9tIHRoZSBiaW9zZXQsIHByaXZhdGUgZGF0YSBmcm9tIHRoZSBtZW1wb29sCisgKiBhbmQgbG90cyBvZiBwYWdlcyBmb3IgSU8uCisgKi8KK2ludCBkc3RfcHJvY2Vzc19pbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKKwlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7CisJc3RydWN0IGJpbyAqYmlvOworCXN0cnVjdCBkc3RfZXhwb3J0X3ByaXYgKnByaXY7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwlpZiAodW5saWtlbHkoIW4tPmJkZXYpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWJpbyA9IGJpb19hbGxvY19iaW9zZXQoR0ZQX0tFUk5FTCwKKwkJCVBBR0VfQUxJR04oY21kLT5zaXplKSA+PiBQQUdFX1NISUZULAorCQkJZHN0X2Jpb19zZXQpOworCWlmICghYmlvKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXByaXYgPSAoc3RydWN0IGRzdF9leHBvcnRfcHJpdiAqKSgoKHZvaWQgKiliaW8pIC0gc2l6ZW9mIChzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2KSk7CisKKwlwcml2LT5zdGF0ZSA9IGRzdF9zdGF0ZV9nZXQoc3QpOworCXByaXYtPmJpbyA9IGJpbzsKKworCWJpby0+YmlfcHJpdmF0ZSA9IHByaXY7CisJYmlvLT5iaV9lbmRfaW8gPSBkc3RfYmlvX2VuZF9pbzsKKwliaW8tPmJpX2Rlc3RydWN0b3IgPSBkc3RfYmlvX2Rlc3RydWN0b3I7CisJYmlvLT5iaV9iZGV2ID0gbi0+YmRldjsKKworCS8qCisJICogU2VydmVyIHNpZGUgaXMgb25seSBpbnRlcmVzdGVkIGluIHR3byBsb3cgYml0czoKKwkgKiB1cHRvZGF0ZSAoc2V0IGJ5IGl0c2VsZiBhY3R1YWxseSkgYW5kIHJ3IGJsb2NrCisJICovCisJYmlvLT5iaV9mbGFncyB8PSBjbWQtPmZsYWdzICYgMzsKKworCWJpby0+YmlfcncgPSBjbWQtPnJ3OworCWJpby0+Ymlfc2l6ZSA9IDA7CisJYmlvLT5iaV9zZWN0b3IgPSBjbWQtPnNlY3RvcjsKKworCWRzdF9iaW9fdG9fY21kKGJpbywgJnByaXYtPmNtZCwgRFNUX0lPX1JFU1BPTlNFLCBjbWQtPmlkKTsKKworCXByaXYtPmNtZC5mbGFncyA9IDA7CisJcHJpdi0+Y21kLnNpemUgPSBjbWQtPnNpemU7CisKKwlpZiAoYmlvX2RhdGFfZGlyKGJpbykgPT0gV1JJVEUpIHsKKwkJZXJyID0gZHN0X3JlY3ZfY2RhdGEoc3QsIHByaXYtPmNtZC5oYXNoKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCisJCWVyciA9IGRzdF9leHBvcnRfd3JpdGVfcmVxdWVzdChzdCwgYmlvLCBjbWQtPnNpemUpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwkJaWYgKGRzdF9uZWVkX2NyeXB0byhuKSkKKwkJCXJldHVybiBkc3RfZXhwb3J0X2NyeXB0byhuLCBiaW8pOworCX0gZWxzZSB7CisJCWVyciA9IGRzdF9leHBvcnRfcmVhZF9yZXF1ZXN0KGJpbywgY21kLT5zaXplKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCX0KKworCWRwcmludGsoIiVzOiBiaW86ICVsbHUvJXUsIHJ3OiAlbHUsIGRpcjogJWx1LCBmbGFnczogJWx4LCBwaHlzOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgKHU2NCliaW8tPmJpX3NlY3RvciwgYmlvLT5iaV9zaXplLAorCQkJYmlvLT5iaV9ydywgYmlvX2RhdGFfZGlyKGJpbyksCisJCQliaW8tPmJpX2ZsYWdzLCBiaW8tPmJpX3BoeXNfc2VnbWVudHMpOworCisJZ2VuZXJpY19tYWtlX3JlcXVlc3QoYmlvKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJYmlvX3B1dChiaW8pOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBPaywgYmxvY2sgSU8gaXMgcmVhZHksIGxldCdzIHNlbmQgaXQgYmFjayB0byB0aGUgY2xpZW50Li4uCisgKi8KK2ludCBkc3RfZXhwb3J0X3NlbmRfYmlvKHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgZHN0X2V4cG9ydF9wcml2ICpwID0gYmlvLT5iaV9wcml2YXRlOworCXN0cnVjdCBkc3Rfc3RhdGUgKnN0ID0gcC0+c3RhdGU7CisJc3RydWN0IGRzdF9jbWQgKmNtZCA9ICZwLT5jbWQ7CisJaW50IGVycjsKKworCWRwcmludGsoIiVzOiBpZDogJWxsdSwgYmlvOiAlbGx1LyV1LCBjc2l6ZTogJXUsIGZsYWdzOiAlbHUsIHJ3OiAlbHUuXG4iLAorCQkJX19mdW5jX18sIGNtZC0+aWQsICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwKKwkJCWNtZC0+Y3NpemUsIGJpby0+YmlfZmxhZ3MsIGJpby0+YmlfcncpOworCisJZHN0X2NvbnZlcnRfY21kKGNtZCk7CisKKwlkc3Rfc3RhdGVfbG9jayhzdCk7CisJaWYgKCFzdC0+c29ja2V0KSB7CisJCWVyciA9IC1FQ09OTlJFU0VUOworCQlnb3RvIGVycl9vdXRfdW5sb2NrOworCX0KKworCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgeworCQkvKiAuLi4gb3IganVzdCBjb25maXJtYXRpb24gdGhhdCB3cml0aW5nIGhhcyBjb21wbGV0ZWQuICovCisJCWNtZC0+c2l6ZSA9IGNtZC0+Y3NpemUgPSAwOworCQllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsCisJCQkJc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfdW5sb2NrOworCX0gZWxzZSB7CisJCWVyciA9IGRzdF9zZW5kX2JpbyhzdCwgY21kLCBiaW8pOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X3VubG9jazsKKwl9CisKKwlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKKworCWJpb19wdXQoYmlvKTsKKwlyZXR1cm4gMDsKKworZXJyX291dF91bmxvY2s6CisJZHN0X3N0YXRlX3VubG9jayhzdCk7CisKKwliaW9fcHV0KGJpbyk7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3Qvc3RhdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3Qvc3RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDU3ZTUyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC9zdGF0ZS5jCkBAIC0wLDAgKzEsODM5IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9kc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKy8qCisgKiBQb2xsaW5nIG1hY2hpbmVyeS4KKyAqLworCitzdHJ1Y3QgZHN0X3BvbGxfaGVscGVyCit7CisJcG9sbF90YWJsZSAJCXB0OworCXN0cnVjdCBkc3Rfc3RhdGUJKnN0OworfTsKKworc3RhdGljIGludCBkc3RfcXVldWVfd2FrZSh3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpCit7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSBjb250YWluZXJfb2Yod2FpdCwgc3RydWN0IGRzdF9zdGF0ZSwgd2FpdCk7CisKKwl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBkc3RfcXVldWVfZnVuYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgd2FpdF9xdWV1ZV9oZWFkX3QgKndoZWFkLAorCQkJCSBwb2xsX3RhYmxlICpwdCkKK3sKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZihwdCwgc3RydWN0IGRzdF9wb2xsX2hlbHBlciwgcHQpLT5zdDsKKworCXN0LT53aGVhZCA9IHdoZWFkOworCWluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoJnN0LT53YWl0LCBkc3RfcXVldWVfd2FrZSk7CisJYWRkX3dhaXRfcXVldWUod2hlYWQsICZzdC0+d2FpdCk7Cit9CisKK3ZvaWQgZHN0X3BvbGxfZXhpdChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlpZiAoc3QtPndoZWFkKSB7CisJCXJlbW92ZV93YWl0X3F1ZXVlKHN0LT53aGVhZCwgJnN0LT53YWl0KTsKKwkJc3QtPndoZWFkID0gTlVMTDsKKwl9Cit9CisKK2ludCBkc3RfcG9sbF9pbml0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCXN0cnVjdCBkc3RfcG9sbF9oZWxwZXIgcGg7CisKKwlwaC5zdCA9IHN0OworCWluaXRfcG9sbF9mdW5jcHRyKCZwaC5wdCwgJmRzdF9xdWV1ZV9mdW5jKTsKKworCXN0LT5zb2NrZXQtPm9wcy0+cG9sbChOVUxMLCBzdC0+c29ja2V0LCAmcGgucHQpOworCXJldHVybiAwOworfQorCisvKgorICogSGVhZGVyIHJlY2VpdmluZyBmdW5jdGlvbiAtIG1heSBibG9jay4KKyAqLworc3RhdGljIGludCBkc3RfZGF0YV9yZWN2X2hlYWRlcihzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQl2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IGJsb2NrKQoreworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdjsKKwlpbnQgZXJyOworCisJaW92Lmlvdl9iYXNlID0gZGF0YTsKKwlpb3YuaW92X2xlbiA9IHNpemU7CisKKwltc2cubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikmaW92OworCW1zZy5tc2dfaW92bGVuID0gMTsKKwltc2cubXNnX25hbWUgPSBOVUxMOworCW1zZy5tc2dfbmFtZWxlbiA9IDA7CisJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwltc2cubXNnX2NvbnRyb2xsZW4gPSAwOworCW1zZy5tc2dfZmxhZ3MgPSAoYmxvY2spP01TR19XQUlUQUxMOk1TR19ET05UV0FJVDsKKworCWVyciA9IGtlcm5lbF9yZWN2bXNnKHNvY2ssICZtc2csICZpb3YsIDEsIGlvdi5pb3ZfbGVuLAorCQkJbXNnLm1zZ19mbGFncyk7CisJaWYgKGVyciAhPSBzaXplKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhlYWRlciBzZW5kaW5nIGZ1bmN0aW9uIC0gbWF5IGJsb2NrLgorICovCitpbnQgZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3RydWN0IHNvY2tldCAqc29jaywKKwkJdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIGludCBtb3JlKQoreworCXN0cnVjdCBtc2doZHIgbXNnOworCXN0cnVjdCBrdmVjIGlvdjsKKwlpbnQgZXJyOworCisJaW92Lmlvdl9iYXNlID0gZGF0YTsKKwlpb3YuaW92X2xlbiA9IHNpemU7CisKKwltc2cubXNnX2lvdiA9IChzdHJ1Y3QgaW92ZWMgKikmaW92OworCW1zZy5tc2dfaW92bGVuID0gMTsKKwltc2cubXNnX25hbWUgPSBOVUxMOworCW1zZy5tc2dfbmFtZWxlbiA9IDA7CisJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwltc2cubXNnX2NvbnRyb2xsZW4gPSAwOworCW1zZy5tc2dfZmxhZ3MgPSBNU0dfV0FJVEFMTCB8IChtb3JlKT9NU0dfTU9SRTowOworCisJZXJyID0ga2VybmVsX3NlbmRtc2coc29jaywgJm1zZywgJmlvdiwgMSwgaW92Lmlvdl9sZW4pOworCWlmIChlcnIgIT0gc2l6ZSkgeworCQlkcHJpbnRrKCIlczogc2l6ZTogJXUsIG1vcmU6ICVkLCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgc2l6ZSwgbW9yZSwgZXJyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQmxvY2sgYXV0b2NvbmZpZ3VyYXRpb246IHJlcXVlc3Qgc2l6ZSBvZiB0aGUgc3RvcmFnZSBhbmQgcGVybWlzc2lvbnMuCisgKi8KK3N0YXRpYyBpbnQgZHN0X3JlcXVlc3RfcmVtb3RlX2NvbmZpZyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKwlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7CisKKwltZW1zZXQoY21kLCAwLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpKTsKKwljbWQtPmNtZCA9IERTVF9DRkc7CisKKwlkc3RfY29udmVydF9jbWQoY21kKTsKKworCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBkc3RfZGF0YV9yZWN2X2hlYWRlcihzdC0+c29ja2V0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCksIDEpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZHN0X2NvbnZlcnRfY21kKGNtZCk7CisKKwlpZiAoY21kLT5jbWQgIT0gRFNUX0NGRykgeworCQllcnIgPSAtRUlOVkFMOworCQlkcHJpbnRrKCIlczogY2hlY2tpbmcgcmVzdWx0OiBjbWQ6ICVkLCBzaXplIHJlcG9ydGVkOiAlbGx1LlxuIiwKKwkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5zZWN0b3IpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobi0+c2l6ZSAhPSAwKQorCQluLT5zaXplID0gbWluX3QobG9mZl90LCBuLT5zaXplLCBjbWQtPnNlY3Rvcik7CisJZWxzZQorCQluLT5zaXplID0gY21kLT5zZWN0b3I7CisKKwluLT5pbmZvLT5zaXplID0gbi0+c2l6ZTsKKwlzdC0+cGVybWlzc2lvbnMgPSBjbWQtPnJ3OworCitvdXQ6CisJZHByaW50aygiJXM6IG46ICVwLCBlcnI6ICVkLCBzaXplOiAlbGx1LCBwZXJtaXNzaW9uOiAleC5cbiIsCisJCQlfX2Z1bmNfXywgbiwgZXJyLCBuLT5zaXplLCBzdC0+cGVybWlzc2lvbnMpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTb2NrZXQgbWFjaGluZXJ5LgorICovCisKKyNkZWZpbmUgRFNUX0RFRkFVTFRfVElNRU8JMjAwMDAKKworaW50IGRzdF9zdGF0ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCWludCBlcnI7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpjdGwgPSAmc3QtPmN0bDsKKworCWVyciA9IHNvY2tfY3JlYXRlKGN0bC0+YWRkci5zYV9mYW1pbHksIGN0bC0+dHlwZSwgY3RsLT5wcm90bywgJnNvY2spOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc29jay0+c2stPnNrX3NuZHRpbWVvID0gc29jay0+c2stPnNrX3JjdnRpbWVvID0KKwkJbXNlY3NfdG9famlmZmllcyhEU1RfREVGQVVMVF9USU1FTyk7CisJc29jay0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfTk9JTzsKKworCXN0LT5zb2NrZXQgPSBzdC0+cmVhZF9zb2NrZXQgPSBzb2NrOworCXJldHVybiAwOworfQorCit2b2lkIGRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlkcHJpbnRrKCIlczogc3Q6ICVwLCBzb2NrZXQ6ICVwLCBuOiAlcC5cbiIsCisJCQlfX2Z1bmNfXywgc3QsIHN0LT5zb2NrZXQsIHN0LT5ub2RlKTsKKwlpZiAoc3QtPnNvY2tldCkgeworCQlzb2NrX3JlbGVhc2Uoc3QtPnNvY2tldCk7CisJCXN0LT5zb2NrZXQgPSBOVUxMOworCQlzdC0+cmVhZF9zb2NrZXQgPSBOVUxMOworCX0KK30KKwordm9pZCBkc3RfZHVtcF9hZGRyKHN0cnVjdCBzb2NrZXQgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBjaGFyICpzdHIpCit7CisJaWYgKHNrLT5vcHMtPmZhbWlseSA9PSBBRl9JTkVUKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOworCQlwcmludGsoS0VSTl9JTkZPICIlcyAldS4ldS4ldS4ldTolZC5cbiIsCisJCQlzdHIsIE5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7CisJfSBlbHNlIGlmIChzay0+b3BzLT5mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXBpNjolZCIsCisJCQlzdHIsICZzaW4tPnNpbjZfYWRkciwgbnRvaHMoc2luLT5zaW42X3BvcnQpKTsKKwl9Cit9CisKK3ZvaWQgZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCWlmIChzdC0+c29ja2V0KSB7CisJCWRzdF9wb2xsX2V4aXQoc3QpOworCQlzdC0+c29ja2V0LT5vcHMtPnNodXRkb3duKHN0LT5zb2NrZXQsIDIpOworCisJCWRzdF9kdW1wX2FkZHIoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzdC0+Y3RsLmFkZHIsCisJCQkJIkRpc2Nvbm5lY3RlZCBwZWVyIik7CisJCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdCk7CisJfQorfQorCitzdGF0aWMgaW50IGRzdF9zdGF0ZV9pbml0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBkc3RfbmV0d29ya19jdGwgKmN0bCA9ICZzdC0+Y3RsOworCisJZXJyID0gZHN0X3N0YXRlX3NvY2tldF9jcmVhdGUoc3QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJZXJyID0ga2VybmVsX2Nvbm5lY3Qoc3QtPnNvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzdC0+Y3RsLmFkZHIsCisJCQlzdC0+Y3RsLmFkZHIuc2FfZGF0YV9sZW4sIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9yZWxlYXNlOworCisJZXJyID0gZHN0X3BvbGxfaW5pdChzdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3JlbGVhc2U7CisKKwlkc3RfZHVtcF9hZGRyKHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmY3RsLT5hZGRyLAorCQkJIkNvbm5lY3RlZCB0byBwZWVyIik7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9yZWxlYXNlOgorCWRzdF9zdGF0ZV9zb2NrZXRfcmVsZWFzZShzdCk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFN0YXRlIHJlc2V0IGlzIHVzZWQgdG8gcmVjb25uZWN0IHRvIHRoZSByZW1vdGUgcGVlci4KKyAqIE1heSBmYWlsLCBidXQgd2hvIGNhcmVzLCB3ZSB3aWxsIHRyeSBhZ2FpbiBsYXRlci4KKyAqLworc3RhdGljIHZvaWQgaW5saW5lIGRzdF9zdGF0ZV9yZXNldF9ub2xvY2soc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKKwlkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3QpOworfQorCitzdGF0aWMgdm9pZCBpbmxpbmUgZHN0X3N0YXRlX3Jlc2V0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCWRzdF9zdGF0ZV9sb2NrKHN0KTsKKwlkc3Rfc3RhdGVfcmVzZXRfbm9sb2NrKHN0KTsKKwlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKK30KKworLyoKKyAqIEJhc2ljIG5ldHdvcmsgc2VuZGluZy9yZWNlaXZpbmcgZnVuY3Rpb25zLgorICogQmxvY2tlZCBtb2RlIGlzIHVzZWQuCisgKi8KK3N0YXRpYyBpbnQgZHN0X2RhdGFfcmVjdl9yYXcoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmJ1ZiwgdTY0IHNpemUpCit7CisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGt2ZWMgaW92OworCWludCBlcnI7CisKKwlCVUdfT04oIXNpemUpOworCisJaW92Lmlvdl9iYXNlID0gYnVmOworCWlvdi5pb3ZfbGVuID0gc2l6ZTsKKworCW1zZy5tc2dfaW92ID0gKHN0cnVjdCBpb3ZlYyAqKSZpb3Y7CisJbXNnLm1zZ19pb3ZsZW4gPSAxOworCW1zZy5tc2dfbmFtZSA9IE5VTEw7CisJbXNnLm1zZ19uYW1lbGVuID0gMDsKKwltc2cubXNnX2NvbnRyb2wgPSBOVUxMOworCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisJbXNnLm1zZ19mbGFncyA9IE1TR19ET05UV0FJVDsKKworCWVyciA9IGtlcm5lbF9yZWN2bXNnKHN0LT5zb2NrZXQsICZtc2csICZpb3YsIDEsIGlvdi5pb3ZfbGVuLAorCQkJbXNnLm1zZ19mbGFncyk7CisJaWYgKGVyciA8PSAwKSB7CisJCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gcmVjdiBkYXRhOiBzaXplOiAlbGx1LCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgc2l6ZSwgZXJyKTsKKwkJaWYgKGVyciA9PSAwKQorCQkJZXJyID0gLUVDT05OUkVTRVQ7CisKKwkJZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUGluZyBjb21tYW5kIHRvIGVhcmx5IGRldGVjdCBmYWlsZWQgbm9kZXMuCisgKi8KK3N0YXRpYyBpbnQgZHN0X3NlbmRfcGluZyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7CisJaW50IGVyciA9IC1FQ09OTlJFU0VUOworCisJZHN0X3N0YXRlX2xvY2soc3QpOworCWlmIChzdC0+c29ja2V0KSB7CisJCW1lbXNldChjbWQsIDAsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpOworCisJCWNtZC0+Y21kID0gX19jcHVfdG9fYmUzMihEU1RfUElORyk7CisKKwkJZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgY21kLCBzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKKwl9CisJZHByaW50aygiJXM6IHN0OiAlcCwgc29ja2V0OiAlcCwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBzdCwgc3QtPnNvY2tldCwgZXJyKTsKKwlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSZWNlaXZpbmcgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBlaXRoZXIgcmV0dXJuIGVycm9yIG9yIHJlYWQKKyAqIHdob2xlIGJsb2NrIHJlcXVlc3QuIElmIHRoZXJlIHdhcyBubyB0cmFmZmljIGZvciBhIG9uZSBzZWNvbmQsCisgKiBzZW5kIGEgcGluZywgc2luY2UgcmVtb3RlIG5vZGUgbWF5IGRpZS4KKyAqLworaW50IGRzdF9kYXRhX3JlY3Yoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQoreworCXVuc2lnbmVkIGludCByZXZlbnRzID0gMDsKKwl1bnNpZ25lZCBpbnQgZXJyX21hc2sgPSBQT0xMRVJSIHwgUE9MTEhVUCB8IFBPTExSREhVUDsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IGVycl9tYXNrIHwgUE9MTElOOworCXN0cnVjdCBkc3Rfbm9kZSAqbiA9IHN0LT5ub2RlOworCWludCBlcnIgPSAwOworCisJd2hpbGUgKHNpemUgJiYgIWVycikgeworCQlyZXZlbnRzID0gZHN0X3N0YXRlX3BvbGwoc3QpOworCisJCWlmICghKHJldmVudHMgJiBtYXNrKSkgeworCQkJREVGSU5FX1dBSVQod2FpdCk7CisKKwkJCWZvciAoOzspIHsKKwkJCQlwcmVwYXJlX3RvX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQsCisJCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCisJCQkJCWJyZWFrOworCisJCQkJcmV2ZW50cyA9IGRzdF9zdGF0ZV9wb2xsKHN0KTsKKworCQkJCWlmIChyZXZlbnRzICYgbWFzaykKKwkJCQkJYnJlYWs7CisKKwkJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJCWJyZWFrOworCisJCQkJaWYgKCFzY2hlZHVsZV90aW1lb3V0KEhaKSkgeworCQkJCQllcnIgPSBkc3Rfc2VuZF9waW5nKHN0KTsKKwkJCQkJaWYgKGVycikKKwkJCQkJCXJldHVybiBlcnI7CisJCQkJfQorCisJCQkJY29udGludWU7CisJCQl9CisJCQlmaW5pc2hfd2FpdCgmc3QtPnRocmVhZF93YWl0LCAmd2FpdCk7CisJCX0KKworCQllcnIgPSAtRUNPTk5SRVNFVDsKKwkJZHN0X3N0YXRlX2xvY2soc3QpOworCisJCWlmICgJCXN0LT5zb2NrZXQgJiYKKwkJCQkoc3QtPnJlYWRfc29ja2V0ID09IHN0LT5zb2NrZXQpICYmCisJCQkJKHJldmVudHMgJiBQT0xMSU4pKSB7CisJCQllcnIgPSBkc3RfZGF0YV9yZWN2X3JhdyhzdCwgZGF0YSwgc2l6ZSk7CisJCQlpZiAoZXJyID4gMCkgeworCQkJCWRhdGEgKz0gZXJyOworCQkJCXNpemUgLT0gZXJyOworCQkJCWVyciA9IDA7CisJCQl9CisJCX0KKworCQlpZiAocmV2ZW50cyAmIGVycl9tYXNrIHx8ICFzdC0+c29ja2V0KSB7CisJCQlkcHJpbnRrKCIlczogcmV2ZW50czogJXgsIHNvY2tldDogJXAsIHNpemU6ICV1LCBlcnI6ICVkLlxuIiwKKwkJCQkJX19mdW5jX18sIHJldmVudHMsIHN0LT5zb2NrZXQsIHNpemUsIGVycik7CisJCQllcnIgPSAtRUNPTk5SRVNFVDsKKwkJfQorCisJCWRzdF9zdGF0ZV91bmxvY2soc3QpOworCisJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0KQorCQkJZXJyID0gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU2VuZCBibG9jayBhdXRvY29uZiByZXBseS4KKyAqLworc3RhdGljIGludCBkc3RfcHJvY2Vzc19jZmcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7CisJc3RydWN0IGRzdF9jbWQgKmNtZCA9IHN0LT5kYXRhOworCWludCBlcnI7CisKKwljbWQtPnNlY3RvciA9IG4tPnNpemU7CisJY21kLT5ydyA9IHN0LT5wZXJtaXNzaW9uczsKKworCWRzdF9jb252ZXJ0X2NtZChjbWQpOworCisJZHN0X3N0YXRlX2xvY2soc3QpOworCWVyciA9IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0LT5zb2NrZXQsIGNtZCwgc2l6ZW9mKHN0cnVjdCBkc3RfY21kKSwgMCk7CisJZHN0X3N0YXRlX3VubG9jayhzdCk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUmVjZWl2ZSBibG9jayBJTyBmcm9tIHRoZSBuZXR3b3JrLgorICovCitzdGF0aWMgaW50IGRzdF9yZWN2X2JpbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSkKK3sKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJaW50IGksIGVycjsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGludCBzejsKKworCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKKwkJc3ogPSBtaW4odG90YWxfc2l6ZSwgYnYtPmJ2X2xlbik7CisKKwkJZHByaW50aygiJXM6IGJpbzogJWxsdS8ldSwgdG90YWw6ICV1LCBsZW46ICV1LCBzejogJXUsIG9mZjogJXUuXG4iLAorCQkJX19mdW5jX18sICh1NjQpYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwgdG90YWxfc2l6ZSwKKwkJCWJ2LT5idl9sZW4sIHN6LCBidi0+YnZfb2Zmc2V0KTsKKworCQlkYXRhID0ga21hcChidi0+YnZfcGFnZSkgKyBidi0+YnZfb2Zmc2V0OworCQllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBkYXRhLCBzeik7CisJCWt1bm1hcChidi0+YnZfcGFnZSk7CisKKwkJYnYtPmJ2X2xlbiA9IHN6OworCisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCXRvdGFsX3NpemUgLT0gc3o7CisJCWlmICh0b3RhbF9zaXplID09IDApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE91ciBibG9jayBJTyBoYXMganVzdCBjb21wbGV0ZWQgYW5kIGFycml2ZWQ6IGdldCBpdC4KKyAqLworc3RhdGljIGludCBkc3RfcHJvY2Vzc19pb19yZXNwb25zZShzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBzdC0+bm9kZTsKKwlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7CisJc3RydWN0IGRzdF90cmFucyAqdDsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgYmlvICpiaW87CisKKwltdXRleF9sb2NrKCZuLT50cmFuc19sb2NrKTsKKwl0ID0gZHN0X3RyYW5zX3NlYXJjaChuLCBjbWQtPmlkKTsKKwltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOworCisJaWYgKCF0KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWJpbyA9IHQtPmJpbzsKKworCWRwcmludGsoIiVzOiBiaW86ICVsbHUvJXUsIGNtZF9zaXplOiAldSwgY3NpemU6ICV1LCBkaXI6ICVsdS5cbiIsCisJCV9fZnVuY19fLCAodTY0KWJpby0+Ymlfc2VjdG9yLCBiaW8tPmJpX3NpemUsIGNtZC0+c2l6ZSwKKwkJY21kLT5jc2l6ZSwgYmlvX2RhdGFfZGlyKGJpbykpOworCisJaWYgKGJpb19kYXRhX2RpcihiaW8pID09IFJFQUQpIHsKKwkJaWYgKGJpby0+Ymlfc2l6ZSAhPSBjbWQtPnNpemUgLSBjbWQtPmNzaXplKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJaWYgKGRzdF9uZWVkX2NyeXB0byhuKSkgeworCQkJZXJyID0gZHN0X3JlY3ZfY2RhdGEoc3QsIHQtPmNtZC5oYXNoKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJCX0KKworCQllcnIgPSBkc3RfcmVjdl9iaW8oc3QsIHQtPmJpbywgYmlvLT5iaV9zaXplKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWlmIChkc3RfbmVlZF9jcnlwdG8obikpCisJCQlyZXR1cm4gZHN0X3RyYW5zX2NyeXB0byh0KTsKKwl9IGVsc2UgeworCQllcnIgPSAtRUJBRE1TRzsKKwkJaWYgKGNtZC0+c2l6ZSB8fCBjbWQtPmNzaXplKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJZHN0X3RyYW5zX3JlbW92ZSh0KTsKKwlkc3RfdHJhbnNfcHV0KHQpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUmVjZWl2ZSBjcnlwdG8gZGF0YS4KKyAqLworaW50IGRzdF9yZWN2X2NkYXRhKHN0cnVjdCBkc3Rfc3RhdGUgKnN0LCB2b2lkICpjZGF0YSkKK3sKKwlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7CisJc3RydWN0IGRzdF9ub2RlICpuID0gc3QtPm5vZGU7CisJc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjID0gJm4tPmNyeXB0bzsKKwlpbnQgZXJyOworCisJaWYgKGNtZC0+Y3NpemUgIT0gYy0+Y3J5cHRvX2F0dGFjaGVkX3NpemUpIHsKKwkJZHByaW50aygiJXM6IGNtZDogY21kOiAldSwgc2VjdG9yOiAlbGx1LCBzaXplOiAldSwgIgorCQkJCSJjc2l6ZTogJXUgIT0gZGlnZXN0IHNpemUgJXUuXG4iLAorCQkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5zZWN0b3IsIGNtZC0+c2l6ZSwKKwkJCQljbWQtPmNzaXplLCBjLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWVyciA9IGRzdF9kYXRhX3JlY3Yoc3QsIGNkYXRhLCBjbWQtPmNzaXplKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWNtZC0+c2l6ZSAtPSBjbWQtPmNzaXplOworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJlY2VpdmUgdGhlIGNvbW1hbmQgYW5kIHN0YXJ0IGl0cyBwcm9jZXNzaW5nLgorICovCitzdGF0aWMgaW50IGRzdF9yZWN2X3Byb2Nlc3Npbmcoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJaW50IGVyciA9IC1FSU5UUjsKKwlzdHJ1Y3QgZHN0X2NtZCAqY21kID0gc3QtPmRhdGE7CisKKwkvKgorCSAqIElmIHNvY2tldCB3aWxsIGJlIHJlc2V0IGFmdGVyIHRoaXMgc3RhdGVtZW50LCB0aGVuCisJICogZHN0X2RhdGFfcmVjdigpIHdpbGwganVzdCBmYWlsIGFuZCBsb29wIHdpbGwKKwkgKiBzdGFydCBhZ2Fpbiwgc28gaXQgY2FuIGJlIGRvbmUgd2l0aG91dCBhbnkgbG9ja3MuCisJICoKKwkgKiBzdC0+cmVhZF9zb2NrZXQgaXMgbmVlZGVkIHRvIHByZXZlbnRzIHN0YXRlIG1hY2hpbmUKKwkgKiBicmVha2luZyBiZXR3ZWVuIHRoaXMgZGF0YSByZWFkaW5nIGFuZCBzdWJzZXF1ZW50IG9uZQorCSAqIGluIHByb3RvY29sIHNwZWNpZmljIGZ1bmN0aW9ucyBkdXJpbmcgY29ubmVjdGlvbiByZXNldC4KKwkgKiBJbiBjYXNlIG9mIHJlc2V0IHdlIGhhdmUgdG8gcmVhZCBuZXh0IGNvbW1hbmQgYW5kIGRvCisJICogbm90IGV4cGVjdCBkYXRhIGZvciBvbGQgY29tbWFuZCB0byBtYWdpY2FsbHkgYXBwZWFyIGluCisJICogbmV3IGNvbm5lY3Rpb24uCisJICovCisJc3QtPnJlYWRfc29ja2V0ID0gc3QtPnNvY2tldDsKKwllcnIgPSBkc3RfZGF0YV9yZWN2KHN0LCBjbWQsIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2V4aXQ7CisKKwlkc3RfY29udmVydF9jbWQoY21kKTsKKworCWRwcmludGsoIiVzOiBjbWQ6ICV1LCBzaXplOiAldSwgY3NpemU6ICV1LCBpZDogJWxsdSwgIgorCQkJInNlY3RvcjogJWxsdSwgZmxhZ3M6ICVsbHgsIHJ3OiAlbGx4LlxuIiwKKwkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5zaXplLAorCQkJY21kLT5jc2l6ZSwgY21kLT5pZCwgY21kLT5zZWN0b3IsCisJCQljbWQtPmZsYWdzLCBjbWQtPnJ3KTsKKworCS8qCisJICogVGhpcyBzaG91bGQgY2F0Y2ggcHJvdG9jb2wgYnJlYWthZ2UgYW5kIHJhbmRvbSBnYXJiYWdlIGluc3RlYWQgb2YgY29tbWFuZHMuCisJICovCisJaWYgKHVubGlrZWx5KGNtZC0+Y3NpemUgPiBzdC0+c2l6ZSAtIHNpemVvZihzdHJ1Y3QgZHN0X2NtZCkpKSB7CisJCWVyciA9IC1FQkFETVNHOworCQlnb3RvIG91dF9leGl0OworCX0KKworCWVyciA9IC1FUFJPVE87CisJc3dpdGNoIChjbWQtPmNtZCkgeworCQljYXNlIERTVF9JT19SRVNQT05TRToKKwkJCWVyciA9IGRzdF9wcm9jZXNzX2lvX3Jlc3BvbnNlKHN0KTsKKwkJCWJyZWFrOworCQljYXNlIERTVF9JTzoKKwkJCWVyciA9IGRzdF9wcm9jZXNzX2lvKHN0KTsKKwkJCWJyZWFrOworCQljYXNlIERTVF9DRkc6CisJCQllcnIgPSBkc3RfcHJvY2Vzc19jZmcoc3QpOworCQkJYnJlYWs7CisJCWNhc2UgRFNUX1BJTkc6CisJCQllcnIgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKK291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSZWNlaXZpbmcgdGhyZWFkLiBGb3IgdGhlIGNsaWVudCBub2RlIHdlIHNob3VsZCB0cnkgdG8gcmVjb25uZWN0LAorICogZm9yIGFjY2VwdGVkIGNsaWVudCB3ZSBqdXN0IGRyb3AgdGhlIHN0YXRlIGFuZCBleHBlY3QgaXQgdG8gcmVjb25uZWN0LgorICovCitzdGF0aWMgaW50IGRzdF9yZWN2KHZvaWQgKmluaXRfZGF0YSwgdm9pZCAqc2NoZWR1bGVfZGF0YSkKK3sKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdCA9IHNjaGVkdWxlX2RhdGE7CisJc3RydWN0IGRzdF9ub2RlICpuID0gaW5pdF9kYXRhOworCWludCBlcnIgPSAwOworCisJZHByaW50aygiJXM6IHN0YXJ0IHN0OiAlcCwgbjogJXAsIHNjYW46ICVsdSwgbmVlZF9leGl0OiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgc3QsIG4sIG4tPnRyYW5zX3NjYW5fdGltZW91dCwgc3QtPm5lZWRfZXhpdCk7CisKKwl3aGlsZSAobi0+dHJhbnNfc2Nhbl90aW1lb3V0ICYmICFzdC0+bmVlZF9leGl0KSB7CisJCWVyciA9IGRzdF9yZWN2X3Byb2Nlc3Npbmcoc3QpOworCQlpZiAoZXJyIDwgMCkgeworCQkJaWYgKCFzdC0+Y3RsLnR5cGUpCisJCQkJYnJlYWs7CisKKwkJCWlmICghbi0+dHJhbnNfc2Nhbl90aW1lb3V0IHx8IHN0LT5uZWVkX2V4aXQpCisJCQkJYnJlYWs7CisKKwkJCWRzdF9zdGF0ZV9yZXNldChzdCk7CisJCQltc2xlZXAoMTAwMCk7CisJCX0KKwl9CisKKwlzdC0+bmVlZF9leGl0ID0gMTsKKwl3YWtlX3VwKCZzdC0+dGhyZWFkX3dhaXQpOworCisJZHByaW50aygiJXM6IGZyZWVpbmcgcmVjZWl2aW5nIHNvY2tldCBzdDogJXAuXG4iLCBfX2Z1bmNfXywgc3QpOworCWRzdF9zdGF0ZV9sb2NrKHN0KTsKKwlkc3Rfc3RhdGVfZXhpdF9jb25uZWN0ZWQoc3QpOworCWRzdF9zdGF0ZV91bmxvY2soc3QpOworCWRzdF9zdGF0ZV9wdXQoc3QpOworCisJZHByaW50aygiJXM6IGZyZWVkIHJlY2VpdmluZyBzb2NrZXQgc3Q6ICVwLlxuIiwgX19mdW5jX18sIHN0KTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBOZXR3b3JrIHN0YXRlIGRpZXMgaGVyZSBhbmQgYm9ybnMgY291cGxlIG9mIGxpbmVzIGJlbG93LgorICogVGhpcyBvYmplY3QgaXMgdGhlIG1haW4gbmV0d29yayBzdGF0ZSBwcm9jZXNzaW5nIGVuZ2luZToKKyAqIHNlbmRpbmcsIHJlY2VpdmluZywgcmVjb25uZWN0aW9ucywgYWxsIG5ldHdvcmsgcmVsYXRlZAorICogdGFza3MgYXJlIGhhbmRsZWQgb24gYmVoYWxmIG9mIHRoZSBzdGF0ZS4KKyAqLworc3RhdGljIHZvaWQgZHN0X3N0YXRlX2ZyZWUoc3RydWN0IGRzdF9zdGF0ZSAqc3QpCit7CisJZHByaW50aygiJXM6IHN0OiAlcC5cbiIsIF9fZnVuY19fLCBzdCk7CisJaWYgKHN0LT5jbGVhbnVwKQorCQlzdC0+Y2xlYW51cChzdCk7CisJa2ZyZWUoc3QtPmRhdGEpOworCWtmcmVlKHN0KTsKK30KKworc3RydWN0IGRzdF9zdGF0ZSAqZHN0X3N0YXRlX2FsbG9jKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlzdHJ1Y3QgZHN0X3N0YXRlICpzdDsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRzdF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3QpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJc3QtPm5vZGUgPSBuOworCXN0LT5uZWVkX2V4aXQgPSAwOworCisJc3QtPnNpemUgPSBQQUdFX1NJWkU7CisJc3QtPmRhdGEgPSBrbWFsbG9jKHN0LT5zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0LT5kYXRhKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCXNwaW5fbG9ja19pbml0KCZzdC0+cmVxdWVzdF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmc3QtPnJlcXVlc3RfbGlzdCk7CisKKwltdXRleF9pbml0KCZzdC0+c3RhdGVfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc3QtPnRocmVhZF93YWl0KTsKKworCS8qCisJICogT25lIGZvciBwcm9jZXNzaW5nIHRocmVhZCwgYW5vdGhlciBvbmUgZm9yIG5vZGUgaXRzZWxmLgorCSAqLworCWF0b21pY19zZXQoJnN0LT5yZWZjbnQsIDIpOworCisJZHByaW50aygiJXM6IHN0OiAlcCwgbjogJXAuXG4iLCBfX2Z1bmNfXywgc3QsIHN0LT5ub2RlKTsKKworCXJldHVybiBzdDsKKworZXJyX291dF9mcmVlOgorCWtmcmVlKHN0KTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitpbnQgZHN0X3N0YXRlX3NjaGVkdWxlX3JlY2VpdmVyKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCXJldHVybiB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHN0LT5ub2RlLT5wb29sLCBkc3RfdGhyZWFkX3NldHVwLAorCQkJZHN0X3JlY3YsIHN0LCBNQVhfU0NIRURVTEVfVElNRU9VVCwgc3QtPm5vZGUpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBjbGllbnQncyBjb25uZWN0aW9uIHRvIHRoZSByZW1vdGUgcGVlcjogYWxsb2NhdGUgc3RhdGUsCisgKiBjb25uZWN0IGFuZCBwZXJmb3JtIGJsb2NrIElPIGF1dG9jb25maWd1cmF0aW9uLgorICovCitpbnQgZHN0X25vZGVfaW5pdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpyKQoreworCXN0cnVjdCBkc3Rfc3RhdGUgKnN0OworCWludCBlcnIgPSAtRU5PTUVNOworCisJc3QgPSBkc3Rfc3RhdGVfYWxsb2Mobik7CisJaWYgKElTX0VSUihzdCkpIHsKKwkJZXJyID0gUFRSX0VSUihzdCk7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKwltZW1jcHkoJnN0LT5jdGwsIHIsIHNpemVvZihzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsKSk7CisKKwllcnIgPSBkc3Rfc3RhdGVfaW5pdF9jb25uZWN0ZWQoc3QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX2RhdGE7CisKKwllcnIgPSBkc3RfcmVxdWVzdF9yZW1vdGVfY29uZmlnKHN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdF9jb25uZWN0ZWQ7CisJbi0+c3RhdGUgPSBzdDsKKworCWVyciA9IGRzdF9zdGF0ZV9zY2hlZHVsZV9yZWNlaXZlcihzdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXRfY29ubmVjdGVkOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdF9jb25uZWN0ZWQ6CisJZHN0X3N0YXRlX2V4aXRfY29ubmVjdGVkKHN0KTsKK2Vycl9vdXRfZnJlZV9kYXRhOgorCWRzdF9zdGF0ZV9mcmVlKHN0KTsKK2Vycl9vdXRfZXhpdDoKKwluLT5zdGF0ZSA9IE5VTEw7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBkc3Rfc3RhdGVfcHV0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCWRwcmludGsoIiVzOiBzdDogJXAsIHJlZmNudDogJWQuXG4iLAorCQkJX19mdW5jX18sIHN0LCBhdG9taWNfcmVhZCgmc3QtPnJlZmNudCkpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzdC0+cmVmY250KSkKKwkJZHN0X3N0YXRlX2ZyZWUoc3QpOworfQorCisvKgorICogU2VuZCBibG9jayBJTyB0byB0aGUgbmV0d29yayBvbmUgYnkgb25lIHVzaW5nIHplcm8tY29weSAtPnNlbmRwYWdlKCkuCisgKi8KK2ludCBkc3Rfc2VuZF9iaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHN0cnVjdCBkc3RfY21kICpjbWQsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnY7CisJc3RydWN0IGRzdF9jcnlwdG9fY3RsICpjID0gJnN0LT5ub2RlLT5jcnlwdG87CisJaW50IGVyciwgaSA9IDA7CisJaW50IGZsYWdzID0gTVNHX1dBSVRBTEw7CisKKwllcnIgPSBkc3RfZGF0YV9zZW5kX2hlYWRlcihzdC0+c29ja2V0LCBjbWQsCisJCXNpemVvZihzdHJ1Y3QgZHN0X2NtZCkgKyBjLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSwgYmlvLT5iaV92Y250KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWJpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGkpIHsKKwkJaWYgKGkgPCBiaW8tPmJpX3ZjbnQgLSAxKQorCQkJZmxhZ3MgfD0gTVNHX01PUkU7CisKKwkJZXJyID0ga2VybmVsX3NlbmRwYWdlKHN0LT5zb2NrZXQsIGJ2LT5idl9wYWdlLCBidi0+YnZfb2Zmc2V0LAorCQkJCWJ2LT5idl9sZW4sIGZsYWdzKTsKKwkJaWYgKGVyciA8PSAwKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlkcHJpbnRrKCIlczogJWQvJWQsIGZsYWdzOiAleCwgZXJyOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgaSwgYmlvLT5iaV92Y250LCBmbGFncywgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU2VuZCB0cmFuc2FjdGlvbiB0byB0aGUgcmVtb3RlIHBlZXIuCisgKi8KK2ludCBkc3RfdHJhbnNfc2VuZChzdHJ1Y3QgZHN0X3RyYW5zICp0KQoreworCWludCBlcnI7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3QgPSB0LT5uLT5zdGF0ZTsKKwlzdHJ1Y3QgYmlvICpiaW8gPSB0LT5iaW87CisKKwlkc3RfY29udmVydF9jbWQoJnQtPmNtZCk7CisKKwlkc3Rfc3RhdGVfbG9jayhzdCk7CisJaWYgKCFzdC0+c29ja2V0KSB7CisJCWVyciA9IGRzdF9zdGF0ZV9pbml0X2Nvbm5lY3RlZChzdCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfdW5sb2NrOworCX0KKworCWlmIChiaW9fZGF0YV9kaXIoYmlvKSA9PSBXUklURSkgeworCQllcnIgPSBkc3Rfc2VuZF9iaW8oc3QsICZ0LT5jbWQsIHQtPmJpbyk7CisJfSBlbHNlIHsKKwkJZXJyID0gZHN0X2RhdGFfc2VuZF9oZWFkZXIoc3QtPnNvY2tldCwgJnQtPmNtZCwKKwkJCQlzaXplb2Yoc3RydWN0IGRzdF9jbWQpLCAwKTsKKwl9CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3Jlc2V0OworCisJZHN0X3N0YXRlX3VubG9jayhzdCk7CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcmVzZXQ6CisJZHN0X3N0YXRlX3Jlc2V0X25vbG9jayhzdCk7CitlcnJfb3V0X3VubG9jazoKKwlkc3Rfc3RhdGVfdW5sb2NrKHN0KTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHN0L3RocmVhZF9wb29sLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHN0L3RocmVhZF9wb29sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JlZDRlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvdGhyZWFkX3Bvb2wuYwpAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKy8qCisgKiBUaHJlYWQgcG9vbCBhYnN0cmFjdGlvbiBhbGxvd3MgdG8gc2NoZWR1bGUgYSB3b3JrIHRvIGJlIHBlcmZvcm1lZAorICogb24gYmVoYWxmIG9mIGtlcm5lbCB0aHJlYWQuIE9uZSBkb2VzIG5vdCBvcGVyYXRlIHdpdGggdGhyZWFkcyBpdHNlbGYsCisgKiBpbnN0ZWFkIHVzZXIgcHJvdmlkZXMgc2V0dXAgYW5kIGNsZWFudXAgY2FsbGJhY2tzIGZvciB0aHJlYWQgcG9vbCBpdHNlbGYsCisgKiBhbmQgYWN0aW9uIGFuZCBjbGVhbnVwIGNhbGxiYWNrcyBmb3IgZWFjaCBzdWJtaXR0ZWQgd29yay4KKyAqCisgKiBFYWNoIHdvcmtlciBoYXMgcHJpdmF0ZSBkYXRhIGluaXRpYWxpemVkIGF0IGNyZWF0aW9uIHRpbWUgYW5kIGRhdGEsCisgKiBwcm92aWRlZCBieSB1c2VyIGF0IHNjaGVkdWxpbmcgdGltZS4KKyAqCisgKiBXaGVuIGFjdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQsIHRocmVhZCBjYW4gbm90IGJlIHVzZWQgYnkgb3RoZXIgdXNlcnMsCisgKiBpbnN0ZWFkIHRoZXkgd2lsbCBzbGVlcCB1bnRpbCB0aGVyZSBpcyBmcmVlIHRocmVhZCB0byBwaWNrIHRoZWlyIHdvcmsuCisgKi8KK3N0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCXdvcmtlcl9lbnRyeTsKKworCXN0cnVjdCB0YXNrX3N0cnVjdAkqdGhyZWFkOworCisJc3RydWN0IHRocmVhZF9wb29sCSpwb29sOworCisJaW50CQkJZXJyb3I7CisJaW50CQkJaGFzX2RhdGE7CisJaW50CQkJbmVlZF9leGl0OworCXVuc2lnbmVkIGludAkJaWQ7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OworCisJdm9pZAkJCSpwcml2YXRlOworCXZvaWQJCQkqc2NoZWR1bGVfZGF0YTsKKworCWludAkJCSgqIGFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqc2NoZWR1bGVfZGF0YSk7CisJdm9pZAkJCSgqIGNsZWFudXApKHZvaWQgKnByaXZhdGUpOworfTsKKworc3RhdGljIHZvaWQgdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdykKK3sKKwlrdGhyZWFkX3N0b3Aody0+dGhyZWFkKTsKKworCXctPmNsZWFudXAody0+cHJpdmF0ZSk7CisJa2ZyZWUodyk7Cit9CisKKy8qCisgKiBDYWxsZWQgdG8gbWFyayB0aHJlYWQgYXMgcmVhZHkgYW5kIGFsbG93IHVzZXJzIHRvIHNjaGVkdWxlIG5ldyB3b3JrLgorICovCitzdGF0aWMgdm9pZCB0aHJlYWRfcG9vbF93b3JrZXJfbWFrZV9yZWFkeShzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyICp3KQoreworCXN0cnVjdCB0aHJlYWRfcG9vbCAqcCA9IHctPnBvb2w7CisKKwltdXRleF9sb2NrKCZwLT50aHJlYWRfbG9jayk7CisKKwlpZiAoIXctPm5lZWRfZXhpdCkgeworCQlsaXN0X21vdmVfdGFpbCgmdy0+d29ya2VyX2VudHJ5LCAmcC0+cmVhZHlfbGlzdCk7CisJCXctPmhhc19kYXRhID0gMDsKKwkJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7CisKKwkJd2FrZV91cCgmcC0+d2FpdCk7CisJfSBlbHNlIHsKKwkJcC0+dGhyZWFkX251bS0tOworCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKKwkJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7CisKKwkJdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIodyk7CisJfQorfQorCisvKgorICogVGhyZWFkIGFjdGlvbiBsb29wOiB3YWl0cyB1bnRpbCB0aGVyZSBpcyBuZXcgd29yay4KKyAqLworc3RhdGljIGludCB0aHJlYWRfcG9vbF93b3JrZXJfZnVuYyh2b2lkICpkYXRhKQoreworCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncgPSBkYXRhOworCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHctPndhaXQsCisJCQlrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgdy0+aGFzX2RhdGEpOworCisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQlicmVhazsKKworCQlpZiAoIXctPmhhc19kYXRhKQorCQkJY29udGludWU7CisKKwkJdy0+YWN0aW9uKHctPnByaXZhdGUsIHctPnNjaGVkdWxlX2RhdGEpOworCQl0aHJlYWRfcG9vbF93b3JrZXJfbWFrZV9yZWFkeSh3KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZSBzaW5nbGUgd29ya2VyIHdpdGhvdXQgc3BlY2lmeWluZyB3aGljaCBvbmUuCisgKi8KK3ZvaWQgdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnApCit7CisJc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdyA9IE5VTEw7CisKKwl3aGlsZSAoIXcgJiYgcC0+dGhyZWFkX251bSkgeworCQl3YWl0X2V2ZW50KHAtPndhaXQsICFsaXN0X2VtcHR5KCZwLT5yZWFkeV9saXN0KSB8fCAhcC0+dGhyZWFkX251bSk7CisKKwkJZHByaW50aygiJXM6IGxvY2tpbmcgbGlzdF9lbXB0eTogJWQsIHRocmVhZF9udW06ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgbGlzdF9lbXB0eSgmcC0+cmVhZHlfbGlzdCksIHAtPnRocmVhZF9udW0pOworCisJCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZwLT5yZWFkeV9saXN0KSkgeworCQkJdyA9IGxpc3RfZmlyc3RfZW50cnkoJnAtPnJlYWR5X2xpc3QsCisJCQkJCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIsCisJCQkJCXdvcmtlcl9lbnRyeSk7CisKKwkJCWRwcmludGsoIiVzOiBkZWxldGluZyB3OiAlcCwgdGhyZWFkX251bTogJWQsIGxpc3Q6ICVwIFslcC4lcF0uXG4iLAorCQkJCQlfX2Z1bmNfXywgdywgcC0+dGhyZWFkX251bSwgJnAtPnJlYWR5X2xpc3QsCisJCQkJCXAtPnJlYWR5X2xpc3QucHJldiwgcC0+cmVhZHlfbGlzdC5uZXh0KTsKKworCQkJcC0+dGhyZWFkX251bS0tOworCQkJbGlzdF9kZWwoJnctPndvcmtlcl9lbnRyeSk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwLT50aHJlYWRfbG9jayk7CisJfQorCisJaWYgKHcpCisJCXRocmVhZF9wb29sX2V4aXRfd29ya2VyKHcpOworCWRwcmludGsoIiVzOiBkZWxldGVkIHc6ICVwLCB0aHJlYWRfbnVtOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgdywgcC0+dGhyZWFkX251bSk7Cit9CisKKy8qCisgKiBSZW1vdmUgYSB3b3JrZXIgd2l0aCBnaXZlbiBJRC4KKyAqLwordm9pZCB0aHJlYWRfcG9vbF9kZWxfd29ya2VyX2lkKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwgdW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKnc7CisJaW50IGZvdW5kID0gMDsKKworCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZwLT5yZWFkeV9saXN0LCB3b3JrZXJfZW50cnkpIHsKKwkJaWYgKHctPmlkID09IGlkKSB7CisJCQlmb3VuZCA9IDE7CisJCQlwLT50aHJlYWRfbnVtLS07CisJCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3VuZCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZwLT5hY3RpdmVfbGlzdCwgd29ya2VyX2VudHJ5KSB7CisJCQlpZiAody0+aWQgPT0gaWQpIHsKKwkJCQl3LT5uZWVkX2V4aXQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOworCisJaWYgKGZvdW5kKQorCQl0aHJlYWRfcG9vbF9leGl0X3dvcmtlcih3KTsKK30KKworLyoKKyAqIEFkZCBuZXcgd29ya2VyIHRocmVhZCB3aXRoIGdpdmVuIHBhcmFtZXRlcnMuCisgKiBJZiBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBmYWlscywgcmV0dXJuIGVycm9yLgorICovCitpbnQgdGhyZWFkX3Bvb2xfYWRkX3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCisJCWNoYXIgKm5hbWUsCisJCXVuc2lnbmVkIGludCBpZCwKKwkJdm9pZCAqKCogaW5pdCkodm9pZCAqcHJpdmF0ZSksCisJCXZvaWQgKCogY2xlYW51cCkodm9pZCAqcHJpdmF0ZSksCisJCXZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdzsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGhyZWFkX3Bvb2xfd29ya2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXctPnBvb2wgPSBwOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnctPndhaXQpOworCXctPmNsZWFudXAgPSBjbGVhbnVwOworCXctPmlkID0gaWQ7CisKKwl3LT50aHJlYWQgPSBrdGhyZWFkX3J1bih0aHJlYWRfcG9vbF93b3JrZXJfZnVuYywgdywgIiVzIiwgbmFtZSk7CisJaWYgKElTX0VSUih3LT50aHJlYWQpKSB7CisJCWVyciA9IFBUUl9FUlIody0+dGhyZWFkKTsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJfQorCisJdy0+cHJpdmF0ZSA9IGluaXQocHJpdmF0ZSk7CisJaWYgKElTX0VSUih3LT5wcml2YXRlKSkgeworCQllcnIgPSBQVFJfRVJSKHctPnByaXZhdGUpOworCQlnb3RvIGVycl9vdXRfc3RvcF90aHJlYWQ7CisJfQorCisJbXV0ZXhfbG9jaygmcC0+dGhyZWFkX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnctPndvcmtlcl9lbnRyeSwgJnAtPnJlYWR5X2xpc3QpOworCXAtPnRocmVhZF9udW0rKzsKKwltdXRleF91bmxvY2soJnAtPnRocmVhZF9sb2NrKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X3N0b3BfdGhyZWFkOgorCWt0aHJlYWRfc3RvcCh3LT50aHJlYWQpOworZXJyX291dF9mcmVlOgorCWtmcmVlKHcpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBEZXN0cm95IHRoZSB3aG9sZSBwb29sLgorICovCit2b2lkIHRocmVhZF9wb29sX2Rlc3Ryb3koc3RydWN0IHRocmVhZF9wb29sICpwKQoreworCXdoaWxlIChwLT50aHJlYWRfbnVtKSB7CisJCWRwcmludGsoIiVzOiBudW06ICVkLlxuIiwgX19mdW5jX18sIHAtPnRocmVhZF9udW0pOworCQl0aHJlYWRfcG9vbF9kZWxfd29ya2VyKHApOworCX0KKworCWtmcmVlKHApOworfQorCisvKgorICogQ3JlYXRlIGEgcG9vbCB3aXRoIGdpdmVuIG51bWJlciBvZiB0aHJlYWRzLgorICogVGhleSB3aWxsIGhhdmUgc2VxdWVudGlhbCBJRHMgc3RhcnRlZCBmcm9tIHplcm8uCisgKi8KK3N0cnVjdCB0aHJlYWRfcG9vbCAqdGhyZWFkX3Bvb2xfY3JlYXRlKGludCBudW0sIGNoYXIgKm5hbWUsCisJCXZvaWQgKigqIGluaXQpKHZvaWQgKnByaXZhdGUpLAorCQl2b2lkICgqIGNsZWFudXApKHZvaWQgKnByaXZhdGUpLAorCQl2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCB0aHJlYWRfcG9vbF93b3JrZXIgKncsICp0bXA7CisJc3RydWN0IHRocmVhZF9wb29sICpwOworCWludCBlcnIgPSAtRU5PTUVNOworCWludCBpOworCisJcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aHJlYWRfcG9vbCksIEdGUF9LRVJORUwpOworCWlmICghcCkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwLT53YWl0KTsKKwltdXRleF9pbml0KCZwLT50aHJlYWRfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnAtPnJlYWR5X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwLT5hY3RpdmVfbGlzdCk7CisJcC0+dGhyZWFkX251bSA9IDA7CisKKwlmb3IgKGk9MDsgaTxudW07ICsraSkgeworCQllcnIgPSB0aHJlYWRfcG9vbF9hZGRfd29ya2VyKHAsIG5hbWUsIGksIGluaXQsCisJCQkJY2xlYW51cCwgcHJpdmF0ZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9hbGw7CisJfQorCisJcmV0dXJuIHA7CisKK2Vycl9vdXRfZnJlZV9hbGw6CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHcsIHRtcCwgJnAtPnJlYWR5X2xpc3QsIHdvcmtlcl9lbnRyeSkgeworCQlsaXN0X2RlbCgmdy0+d29ya2VyX2VudHJ5KTsKKwkJdGhyZWFkX3Bvb2xfZXhpdF93b3JrZXIodyk7CisJfQorCWtmcmVlKHApOworZXJyX291dF9leGl0OgorCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKKy8qCisgKiBTY2hlZHVsZSBleGVjdXRpb24gb2YgdGhlIGFjdGlvbiBvbiBhIGdpdmVuIHRocmVhZCwKKyAqIHByb3ZpZGVkIElEIHBvaW50ZXIgaGFzIHRvIG1hdGNoIHByZXZpb3VzbHkgc3RvcmVkCisgKiBwcml2YXRlIGRhdGEuCisgKi8KK2ludCB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKKwkJaW50ICgqIHNldHVwKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKKwkJaW50ICgqIGFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCisJCXZvaWQgKmRhdGEsIGxvbmcgdGltZW91dCwgdm9pZCAqaWQpCit7CisJc3RydWN0IHRocmVhZF9wb29sX3dvcmtlciAqdywgKnRtcCwgKndvcmtlciA9IE5VTEw7CisJaW50IGVyciA9IDA7CisKKwl3aGlsZSAoIXdvcmtlciAmJiAhZXJyKSB7CisJCXRpbWVvdXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwLT53YWl0LAorCQkJCSFsaXN0X2VtcHR5KCZwLT5yZWFkeV9saXN0KSwKKwkJCQl0aW1lb3V0KTsKKworCQlpZiAoIXRpbWVvdXQpIHsKKwkJCWVyciA9IC1FVElNRURPVVQ7CisJCQlicmVhazsKKwkJfQorCisJCXdvcmtlciA9IE5VTEw7CisJCW11dGV4X2xvY2soJnAtPnRocmVhZF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHcsIHRtcCwgJnAtPnJlYWR5X2xpc3QsIHdvcmtlcl9lbnRyeSkgeworCQkJaWYgKGlkICYmIGlkICE9IHctPnByaXZhdGUpCisJCQkJY29udGludWU7CisKKwkJCXdvcmtlciA9IHc7CisKKwkJCWxpc3RfbW92ZV90YWlsKCZ3LT53b3JrZXJfZW50cnksICZwLT5hY3RpdmVfbGlzdCk7CisKKwkJCWVyciA9IHNldHVwKHctPnByaXZhdGUsIGRhdGEpOworCQkJaWYgKCFlcnIpIHsKKwkJCQl3LT5zY2hlZHVsZV9kYXRhID0gZGF0YTsKKwkJCQl3LT5hY3Rpb24gPSBhY3Rpb247CisJCQkJdy0+aGFzX2RhdGEgPSAxOworCQkJCXdha2VfdXAoJnctPndhaXQpOworCQkJfSBlbHNlIHsKKwkJCQlsaXN0X21vdmVfdGFpbCgmdy0+d29ya2VyX2VudHJ5LCAmcC0+cmVhZHlfbGlzdCk7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisJCW11dGV4X3VubG9jaygmcC0+dGhyZWFkX2xvY2spOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBTY2hlZHVsZSBleGVjdXRpb24gb24gYXJiaXRyYXJ5IHRocmVhZCBmcm9tIHRoZSBwb29sLgorICovCitpbnQgdGhyZWFkX3Bvb2xfc2NoZWR1bGUoc3RydWN0IHRocmVhZF9wb29sICpwLAorCQlpbnQgKCogc2V0dXApKHZvaWQgKnByaXZhdGUsIHZvaWQgKmRhdGEpLAorCQlpbnQgKCogYWN0aW9uKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKKwkJdm9pZCAqZGF0YSwgbG9uZyB0aW1lb3V0KQoreworCXJldHVybiB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHAsIHNldHVwLAorCQkJYWN0aW9uLCBkYXRhLCB0aW1lb3V0LCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kc3QvdHJhbnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9kc3QvdHJhbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTdkMzcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RzdC90cmFucy5jCkBAIC0wLDAgKzEsMzM1IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYmlvLmg+CisjaW5jbHVkZSA8bGludXgvZHN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKworLyoKKyAqIFRyYW5zYWN0aW9uIG1lbW9yeSBwb29sIHNpemUuCisgKi8KK3N0YXRpYyBpbnQgZHN0X21lbXBvb2xfbnVtID0gMzI7Cittb2R1bGVfcGFyYW0oZHN0X21lbXBvb2xfbnVtLCBpbnQsIDA2NDQpOworCisvKgorICogVHJhbnNhY3Rpb24gdHJlZSBtYW5hZ2VtZW50LgorICovCitzdGF0aWMgaW5saW5lIGludCBkc3RfdHJhbnNfY21wKGRzdF9nZW5fdCBnZW4sIGRzdF9nZW5fdCBuZXcpCit7CisJaWYgKGdlbiA8IG5ldykKKwkJcmV0dXJuIDE7CisJaWYgKGdlbiA+IG5ldykKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZHN0X3RyYW5zICpkc3RfdHJhbnNfc2VhcmNoKHN0cnVjdCBkc3Rfbm9kZSAqbm9kZSwgZHN0X2dlbl90IGdlbikKK3sKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZub2RlLT50cmFuc19yb290OworCXN0cnVjdCByYl9ub2RlICpuID0gcm9vdC0+cmJfbm9kZTsKKwlzdHJ1Y3QgZHN0X3RyYW5zICp0LCAqcmV0ID0gTlVMTDsKKwlpbnQgY21wOworCisJd2hpbGUgKG4pIHsKKwkJdCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBkc3RfdHJhbnMsIHRyYW5zX2VudHJ5KTsKKworCQljbXAgPSBkc3RfdHJhbnNfY21wKHQtPmdlbiwgZ2VuKTsKKwkJaWYgKGNtcCA8IDApCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQlyZXQgPSB0OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlkcHJpbnRrKCIlczogJXMgdHJhbnNhY3Rpb246IGlkOiAlbGx1LlxuIiwgX19mdW5jX18sCisJCQkocmV0KT8iZm91bmQiOiJub3QgZm91bmQiLCBnZW4pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkc3RfdHJhbnNfaW5zZXJ0KHN0cnVjdCBkc3RfdHJhbnMgKm5ldykKK3sKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZuZXctPm4tPnRyYW5zX3Jvb3Q7CisJc3RydWN0IHJiX25vZGUgKipuID0gJnJvb3QtPnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBkc3RfdHJhbnMgKnJldCA9IE5VTEwsICp0OworCWludCBjbXA7CisKKwl3aGlsZSAoKm4pIHsKKwkJcGFyZW50ID0gKm47CisKKwkJdCA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGRzdF90cmFucywgdHJhbnNfZW50cnkpOworCisJCWNtcCA9IGRzdF90cmFuc19jbXAodC0+Z2VuLCBuZXctPmdlbik7CisJCWlmIChjbXAgPCAwKQorCQkJbiA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQluID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UgeworCQkJcmV0ID0gdDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbmV3LT5zZW5kX3RpbWUgPSBqaWZmaWVzOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKCIlczogZXhpc3Q6IG9sZDogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsIHNlbmRfdGltZTogJWx1LCAiCisJCQkJIm5ldzogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsIHNlbmRfdGltZTogJWx1LlxuIiwKKwkJCV9fZnVuY19fLAorCQkJcmV0LT5nZW4sICh1NjQpcmV0LT5iaW8tPmJpX3NlY3RvciwKKwkJCXJldC0+YmlvLT5iaV9zaXplLCByZXQtPnNlbmRfdGltZSwKKwkJCW5ldy0+Z2VuLCAodTY0KW5ldy0+YmlvLT5iaV9zZWN0b3IsCisJCQluZXctPmJpby0+Ymlfc2l6ZSwgbmV3LT5zZW5kX3RpbWUpOworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisKKwlyYl9saW5rX25vZGUoJm5ldy0+dHJhbnNfZW50cnksIHBhcmVudCwgbik7CisJcmJfaW5zZXJ0X2NvbG9yKCZuZXctPnRyYW5zX2VudHJ5LCByb290KTsKKworCWRwcmludGsoIiVzOiBpbnNlcnRlZDogZ2VuOiAlbGx1LCBiaW86ICVsbHUvJXUsIHNlbmRfdGltZTogJWx1LlxuIiwKKwkJX19mdW5jX18sIG5ldy0+Z2VuLCAodTY0KW5ldy0+YmlvLT5iaV9zZWN0b3IsCisJCW5ldy0+YmlvLT5iaV9zaXplLCBuZXctPnNlbmRfdGltZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHN0cnVjdCBkc3RfdHJhbnMgKnQpCit7CisJc3RydWN0IGRzdF9ub2RlICpuID0gdC0+bjsKKworCWlmICh0LT50cmFuc19lbnRyeS5yYl9wYXJlbnRfY29sb3IpIHsKKwkJcmJfZXJhc2UoJnQtPnRyYW5zX2VudHJ5LCAmbi0+dHJhbnNfcm9vdCk7CisJCXQtPnRyYW5zX2VudHJ5LnJiX3BhcmVudF9jb2xvciA9IDA7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZHN0X3RyYW5zX3JlbW92ZShzdHJ1Y3QgZHN0X3RyYW5zICp0KQoreworCWludCByZXQ7CisJc3RydWN0IGRzdF9ub2RlICpuID0gdC0+bjsKKworCW11dGV4X2xvY2soJm4tPnRyYW5zX2xvY2spOworCXJldCA9IGRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHQpOworCW11dGV4X3VubG9jaygmbi0+dHJhbnNfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogV2hlbiB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQgYW5kIHRoZXJlIGFyZSBubyBtb3JlIHVzZXJzLAorICogd2UgY29tcGxldGUgYXBwcmlhdGUgYmxvY2sgSU8gcmVxdWVzdCB3aXRoIGdpdmVuIGVycm9yIHN0YXR1cy4KKyAqLwordm9pZCBkc3RfdHJhbnNfcHV0KHN0cnVjdCBkc3RfdHJhbnMgKnQpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnQtPnJlZmNudCkpIHsKKwkJc3RydWN0IGJpbyAqYmlvID0gdC0+YmlvOworCisJCWRwcmludGsoIiVzOiBjb21wbGV0ZWQgdDogJXAsIGdlbjogJWxsdSwgYmlvOiAlcC5cbiIsCisJCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgYmlvKTsKKworCQliaW9fZW5kaW8oYmlvLCB0LT5lcnJvcik7CisJCWJpb19wdXQoYmlvKTsKKworCQlkc3Rfbm9kZV9wdXQodC0+bik7CisJCW1lbXBvb2xfZnJlZSh0LCB0LT5uLT50cmFuc19wb29sKTsKKwl9Cit9CisKKy8qCisgKiBQcm9jZXNzIGdpdmVuIGJsb2NrIElPIHJlcXVlc3Q6IGFsbG9jYXRlIHRyYW5zYWN0aW9uLCBpbnNlcnQgaXQgaW50byB0aGUgdHJlZQorICogYW5kIHNlbmQvc2NoZWR1bGUgY3J5cHRvIHByb2Nlc3NpbmcuCisgKi8KK2ludCBkc3RfcHJvY2Vzc19iaW8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGRzdF90cmFucyAqdDsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXQgPSBtZW1wb29sX2FsbG9jKG4tPnRyYW5zX3Bvb2wsIEdGUF9OT0ZTKTsKKwlpZiAoIXQpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJdC0+biA9IGRzdF9ub2RlX2dldChuKTsKKwl0LT5iaW8gPSBiaW87CisJdC0+ZXJyb3IgPSAwOworCXQtPnJldHJpZXMgPSAwOworCWF0b21pY19zZXQoJnQtPnJlZmNudCwgMSk7CisJdC0+Z2VuID0gYXRvbWljX2xvbmdfaW5jX3JldHVybigmbi0+Z2VuKTsKKworCXQtPmVuYyA9IGJpb19kYXRhX2RpcihiaW8pOworCWRzdF9iaW9fdG9fY21kKGJpbywgJnQtPmNtZCwgRFNUX0lPLCB0LT5nZW4pOworCisJbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7CisJZXJyID0gZHN0X3RyYW5zX2luc2VydCh0KTsKKwltdXRleF91bmxvY2soJm4tPnRyYW5zX2xvY2spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJZHByaW50aygiJXM6IGdlbjogJWxsdSwgYmlvOiAlbGx1LyV1LCBkaXIvZW5jOiAlZCwgbmVlZF9jcnlwdG86ICVkLlxuIiwKKwkJCV9fZnVuY19fLCB0LT5nZW4sICh1NjQpYmlvLT5iaV9zZWN0b3IsCisJCQliaW8tPmJpX3NpemUsIHQtPmVuYywgZHN0X25lZWRfY3J5cHRvKG4pKTsKKworCWlmIChkc3RfbmVlZF9jcnlwdG8obikgJiYgdC0+ZW5jKQorCQlkc3RfdHJhbnNfY3J5cHRvKHQpOworCWVsc2UKKwkJZHN0X3RyYW5zX3NlbmQodCk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlOgorCWRzdF9ub2RlX3B1dChuKTsKKwltZW1wb29sX2ZyZWUodCwgbi0+dHJhbnNfcG9vbCk7CitlcnJfb3V0X2V4aXQ6CisJYmlvX2VuZGlvKGJpbywgZXJyKTsKKwliaW9fcHV0KGJpbyk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFNjYW4gZm9yIHRpbWVvdXQvc3RhbGUgdHJhbnNhY3Rpb25zLgorICogRWFjaCB0cmFuc2FjdGlvbiBpcyBiZWluZyByZXNlbnQgbXVsdGlwbGUgdGltZXMgYmVmb3JlIGVycm9yIGNvbXBsZXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGRzdF90cmFuc19zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZHN0X25vZGUgKm4gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRzdF9ub2RlLCB0cmFuc193b3JrLndvcmspOworCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOworCXN0cnVjdCBkc3RfdHJhbnMgKnQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbi0+dHJhbnNfc2Nhbl90aW1lb3V0OworCWludCBudW0gPSAxMCAqIG4tPnRyYW5zX21heF9yZXRyaWVzOworCisJbXV0ZXhfbG9jaygmbi0+dHJhbnNfbG9jayk7CisKKwlmb3IgKHJiX25vZGUgPSByYl9maXJzdCgmbi0+dHJhbnNfcm9vdCk7IHJiX25vZGU7ICkgeworCQl0ID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IGRzdF90cmFucywgdHJhbnNfZW50cnkpOworCisJCWlmICh0aW1lb3V0ICYmIHRpbWVfYWZ0ZXIodC0+c2VuZF90aW1lICsgdGltZW91dCwgamlmZmllcykKKwkJCQkmJiB0LT5yZXRyaWVzID09IDApCisJCQlicmVhazsKKyNpZiAwCisJCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBuOiAlcywgcmV0cmllczogJXUsIG1heDogJXUuXG4iLAorCQkJX19mdW5jX18sIHQsIHQtPmdlbiwgbi0+bmFtZSwKKwkJCXQtPnJldHJpZXMsIG4tPnRyYW5zX21heF9yZXRyaWVzKTsKKyNlbmRpZgorCQlpZiAoLS1udW0gPT0gMCkKKwkJCWJyZWFrOworCisJCWRzdF90cmFuc19nZXQodCk7CisKKwkJcmJfbm9kZSA9IHJiX25leHQocmJfbm9kZSk7CisKKwkJaWYgKHRpbWVvdXQgJiYgKCsrdC0+cmV0cmllcyA8IG4tPnRyYW5zX21heF9yZXRyaWVzKSkgeworCQkJZHN0X3RyYW5zX3NlbmQodCk7CisJCX0gZWxzZSB7CisJCQl0LT5lcnJvciA9IC1FVElNRURPVVQ7CisJCQlkc3RfdHJhbnNfcmVtb3ZlX25vbG9jayh0KTsKKwkJCWRzdF90cmFuc19wdXQodCk7CisJCX0KKworCQlkc3RfdHJhbnNfcHV0KHQpOworCX0KKworCW11dGV4X3VubG9jaygmbi0+dHJhbnNfbG9jayk7CisKKwkvKgorCSAqIElmIG5vIHRpbWVvdXQgc3BlY2lmaWVkIHRoZW4gc3lzdGVtIGlzIGluIHRoZSBtaWRkbGUgb2YgZXhpdGluZyBwcm9jZXNzLAorCSAqIHNvIG5vIG5lZWQgdG8gcmVzY2hlZHVsZSBzY2FubmluZyBwcm9jZXNzIGFnYWluLgorCSAqLworCWlmICh0aW1lb3V0KSB7CisJCWlmICghbnVtKQorCQkJdGltZW91dCA9IEhaOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm4tPnRyYW5zX3dvcmssIHRpbWVvdXQpOworCX0KK30KKworLyoKKyAqIEZsdXNoIGFsbCB0cmFuc2FjdGlvbnMgYW5kIG1hcmsgdGhlbSBhcyB0aW1lZCBvdXQuCisgKiBEZXN0cm95IHRyYW5zYWN0aW9uIHBvb2xzLgorICovCit2b2lkIGRzdF9ub2RlX3RyYW5zX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKQoreworCXN0cnVjdCBkc3RfdHJhbnMgKnQ7CisJc3RydWN0IHJiX25vZGUgKnJiX25vZGU7CisKKwlpZiAoIW4tPnRyYW5zX2NhY2hlKQorCQlyZXR1cm47CisKKwlkcHJpbnRrKCIlczogbjogJXAsIGNhbmNlbGxpbmcgdGhlIHdvcmsuXG4iLCBfX2Z1bmNfXywgbik7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZuLT50cmFuc193b3JrKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWRwcmludGsoIiVzOiBuOiAlcCwgd29yayBoYXMgYmVlbiBjYW5jZWxsZWQuXG4iLCBfX2Z1bmNfXywgbik7CisKKwlmb3IgKHJiX25vZGUgPSByYl9maXJzdCgmbi0+dHJhbnNfcm9vdCk7IHJiX25vZGU7ICkgeworCQl0ID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IGRzdF90cmFucywgdHJhbnNfZW50cnkpOworCisJCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAlbGx1LCBuOiAlcy5cbiIsCisJCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBuLT5uYW1lKTsKKworCQlyYl9ub2RlID0gcmJfbmV4dChyYl9ub2RlKTsKKworCQl0LT5lcnJvciA9IC1FVElNRURPVVQ7CisJCWRzdF90cmFuc19yZW1vdmVfbm9sb2NrKHQpOworCQlkc3RfdHJhbnNfcHV0KHQpOworCX0KKworCW1lbXBvb2xfZGVzdHJveShuLT50cmFuc19wb29sKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobi0+dHJhbnNfY2FjaGUpOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0cmFuc2FjdGlvbiBzdG9yYWdlIGZvciBnaXZlbiBub2RlLgorICogVHJhbnNhY3Rpb24gc3RvcmVzIG5vdCBvbmx5IGNvbnRyb2wgaW5mb3JtYXRpb24sCisgKiBidXQgYWxzbyBuZXR3b3JrIGNvbW1hbmQgYW5kIGNyeXB0byBkYXRhIChpZiBuZWVkZWQpCisgKiB0byByZWR1Y2UgbnVtYmVyIG9mIGFsbG9jYXRpb25zLiBUaHVzIHRyYW5zYWN0aW9uIHNpemUKKyAqIGRpZmZlcnMgZnJvbSBub2RlIHRvIG5vZGUuCisgKi8KK2ludCBkc3Rfbm9kZV90cmFuc19pbml0KHN0cnVjdCBkc3Rfbm9kZSAqbiwgdW5zaWduZWQgaW50IHNpemUpCit7CisJLyoKKwkgKiBXZSBuZWVkIHRoaXMsIHNpbmNlIG5vZGUgd2l0aCBnaXZlbiBuYW1lIGNhbiBiZSBkcm9wcGVkIGZyb20gdGhlCisJICogaGFzaCB0YWJsZSwgYnV0IGJlIHN0aWxsIGFsaXZlLCBzbyBzdWJzZXF1ZW50IGNyZWF0aW9uIG9mIHRoZSBub2RlCisJICogd2l0aCB0aGUgc2FtZSBuYW1lIG1heSBjb2xsaWRlIHdpdGggZXhpc3RpbmcgY2FjaGUgbmFtZS4KKwkgKi8KKworCXNucHJpbnRmKG4tPmNhY2hlX25hbWUsIHNpemVvZihuLT5jYWNoZV9uYW1lKSwgIiVzLSVwIiwgbi0+bmFtZSwgbik7CisKKwluLT50cmFuc19jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKG4tPmNhY2hlX25hbWUsCisJCQlzaXplICsgbi0+Y3J5cHRvLmNyeXB0b19hdHRhY2hlZF9zaXplLAorCQkJMCwgMCwgTlVMTCk7CisJaWYgKCFuLT50cmFuc19jYWNoZSkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwluLT50cmFuc19wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKGRzdF9tZW1wb29sX251bSwgbi0+dHJhbnNfY2FjaGUpOworCWlmICghbi0+dHJhbnNfcG9vbCkKKwkJZ290byBlcnJfb3V0X2NhY2hlX2Rlc3Ryb3k7CisKKwltdXRleF9pbml0KCZuLT50cmFuc19sb2NrKTsKKwluLT50cmFuc19yb290ID0gUkJfUk9PVDsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZuLT50cmFuc193b3JrLCBkc3RfdHJhbnNfc2Nhbik7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZuLT50cmFuc193b3JrLCBuLT50cmFuc19zY2FuX3RpbWVvdXQpOworCisJZHByaW50aygiJXM6IG46ICVwLCBzaXplOiAldSwgY3J5cHRvOiAldS5cbiIsCisJCV9fZnVuY19fLCBuLCBzaXplLCBuLT5jcnlwdG8uY3J5cHRvX2F0dGFjaGVkX3NpemUpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfY2FjaGVfZGVzdHJveToKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobi0+dHJhbnNfY2FjaGUpOworZXJyX291dF9leGl0OgorCXJldHVybiAtRU5PTUVNOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vYml0X29wZXJhdGlvbnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2JpdF9vcGVyYXRpb25zLmgKaW5kZXggY2VjZGNmMy4uNGM0Y2NiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vYml0X29wZXJhdGlvbnMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9iaXRfb3BlcmF0aW9ucy5oCkBAIC0yMSw4ICsyMSw2IEBACiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqICRJZDogYml0X29wZXJhdGlvbnMuaCx2IDEuMTEgMjAwNi8xMS8yOCAxNTozNzowMyBzdGV2ZXUgRXhwICQKICAqLwogCiAvKiEgXGZpbGUgKi8KQEAgLTM0LDcgKzMyLDcgQEAKIC8qISBcYnJpZWYgRmluZCB0aGUgYml0IHBvc2l0aW9uIG9mIHRoZSBoaWdoZXN0IHNldCBiaXQgaW4gYSB3b3JkCiAgICAgXHBhcmFtIGJpdHMgVGhlIHdvcmQgdG8gYmUgc2VhcmNoZWQKICAgICBccmV0dXJuIFRoZSBiaXQgbnVtYmVyIG9mIHRoZSBoaWdoZXN0IHNldCBiaXQsIG9yIC0xIGlmIHRoZSB3b3JkIGlzIHplcm8uICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdG9wX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKK3N0YXRpYyBpbmxpbmUgaW50IHRvcF9iaXQodW5zaWduZWQgaW50IGJpdHMpCiB7CiAJaW50IHJlczsKIApAQCAtNTAsNyArNDgsNyBAQAogLyohIFxicmllZiBGaW5kIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGxvd2VzdCBzZXQgYml0IGluIGEgd29yZAogICAgIFxwYXJhbSBiaXRzIFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkCiAgICAgXHJldHVybiBUaGUgYml0IG51bWJlciBvZiB0aGUgbG93ZXN0IHNldCBiaXQsIG9yIC0xIGlmIHRoZSB3b3JkIGlzIHplcm8uICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgYm90dG9tX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKK3N0YXRpYyBpbmxpbmUgaW50IGJvdHRvbV9iaXQodW5zaWduZWQgaW50IGJpdHMpCiB7CiAJaW50IHJlczsKIApAQCAtNjMsNyArNjEsNyBAQAogCXJldHVybiByZXM7CiB9CiAjZWxzZQotc3RhdGljIF9faW5saW5lX18gaW50IHRvcF9iaXQodW5zaWduZWQgaW50IGJpdHMpCitzdGF0aWMgaW5saW5lIGludCB0b3BfYml0KHVuc2lnbmVkIGludCBiaXRzKQogewogCWludCBpOwogCkBAIC05Myw3ICs5MSw3IEBACiAJcmV0dXJuIGk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBib3R0b21fYml0KHVuc2lnbmVkIGludCBiaXRzKQorc3RhdGljIGlubGluZSBpbnQgYm90dG9tX2JpdCh1bnNpZ25lZCBpbnQgYml0cykKIHsKIAlpbnQgaTsKIApAQCAtMTI3LDcgKzEyNSw3IEBACiAvKiEgXGJyaWVmIEJpdCByZXZlcnNlIGEgYnl0ZS4KICAgICBccGFyYW0gZGF0YSBUaGUgYnl0ZSB0byBiZSByZXZlcnNlZC4KICAgICBccmV0dXJuIFRoZSBiaXQgcmV2ZXJzZWQgdmVyc2lvbiBvZiBkYXRhLiAqLwotc3RhdGljIF9faW5saW5lX18gdWludDhfdCBiaXRfcmV2ZXJzZTgodWludDhfdCB4KQorc3RhdGljIGlubGluZSB1aW50OF90IGJpdF9yZXZlcnNlOCh1aW50OF90IHgpCiB7CiAjaWYgZGVmaW5lZChfX2kzODZfXykgIHx8ICBkZWZpbmVkKF9feDg2XzY0X18pCiAJLyogSWYgbXVsdGlwbHkgaXMgZmFzdCAqLwpAQCAtMTcyLDMyICsxNzAsMzIgQEAKIHVpbnQxNl90IG1ha2VfbWFzazE2KHVpbnQxNl90IHgpOwogCiAvKiEgXGJyaWVmIEZpbmQgdGhlIGxlYXN0IHNpZ25pZmljYW50IG9uZSBpbiBhIHdvcmQsIGFuZCByZXR1cm4gYSB3b3JkCi0gICAgICAgICAgIHdpdGgganVzdCB0aGF0IGJpdCBzZXQuCisJICAgIHdpdGgganVzdCB0aGF0IGJpdCBzZXQuCiAgICAgXHBhcmFtIHggVGhlIHdvcmQgdG8gYmUgc2VhcmNoZWQuCiAgICAgXHJldHVybiBUaGUgd29yZCB3aXRoIHRoZSBzaW5nbGUgc2V0IGJpdC4gKi8KLXN0YXRpYyBfX2lubGluZV9fIHVpbnQzMl90IGxlYXN0X3NpZ25pZmljYW50X29uZTMyKHVpbnQzMl90IHgpCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGxlYXN0X3NpZ25pZmljYW50X29uZTMyKHVpbnQzMl90IHgpCiB7Ci0JcmV0dXJuICh4ICYgKC0oaW50MzJfdCkgeCkpOworCXJldHVybiB4ICYgKC0oaW50MzJfdCkgeCk7CiB9CiAKIC8qISBcYnJpZWYgRmluZCB0aGUgbW9zdCBzaWduaWZpY2FudCBvbmUgaW4gYSB3b3JkLCBhbmQgcmV0dXJuIGEgd29yZAotICAgICAgICAgICB3aXRoIGp1c3QgdGhhdCBiaXQgc2V0LgorCSAgICB3aXRoIGp1c3QgdGhhdCBiaXQgc2V0LgogICAgIFxwYXJhbSB4IFRoZSB3b3JkIHRvIGJlIHNlYXJjaGVkLgogICAgIFxyZXR1cm4gVGhlIHdvcmQgd2l0aCB0aGUgc2luZ2xlIHNldCBiaXQuICovCi1zdGF0aWMgX19pbmxpbmVfXyB1aW50MzJfdCBtb3N0X3NpZ25pZmljYW50X29uZTMyKHVpbnQzMl90IHgpCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IG1vc3Rfc2lnbmlmaWNhbnRfb25lMzIodWludDMyX3QgeCkKIHsKICNpZiBkZWZpbmVkKF9faTM4Nl9fKSAgfHwgIGRlZmluZWQoX194ODZfNjRfXykKIAlyZXR1cm4gMSA8PCB0b3BfYml0KHgpOwogI2Vsc2UKIAl4ID0gbWFrZV9tYXNrMzIoeCk7Ci0JcmV0dXJuICh4IF4gKHggPj4gMSkpOworCXJldHVybiB4IF4gKHggPj4gMSk7CiAjZW5kaWYKIH0KIAogLyohIFxicmllZiBGaW5kIHRoZSBwYXJpdHkgb2YgYSBieXRlLgogICAgIFxwYXJhbSB4IFRoZSBieXRlIHRvIGJlIGNoZWNrZWQuCiAgICAgXHJldHVybiAxIGZvciBvZGQsIG9yIDAgZm9yIGV2ZW4uICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgcGFyaXR5OCh1aW50OF90IHgpCitzdGF0aWMgaW5saW5lIGludCBwYXJpdHk4KHVpbnQ4X3QgeCkKIHsKIAl4ID0gKHggXiAoeCA+PiA0KSkgJiAweDBGOwogCXJldHVybiAoMHg2OTk2ID4+IHgpICYgMTsKQEAgLTIwNiw3ICsyMDQsNyBAQAogLyohIFxicmllZiBGaW5kIHRoZSBwYXJpdHkgb2YgYSAxNiBiaXQgd29yZC4KICAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBjaGVja2VkLgogICAgIFxyZXR1cm4gMSBmb3Igb2RkLCBvciAwIGZvciBldmVuLiAqLwotc3RhdGljIF9faW5saW5lX18gaW50IHBhcml0eTE2KHVpbnQxNl90IHgpCitzdGF0aWMgaW5saW5lIGludCBwYXJpdHkxNih1aW50MTZfdCB4KQogewogCXggXj0gKHggPj4gOCk7CiAJeCA9ICh4IF4gKHggPj4gNCkpICYgMHgwRjsKQEAgLTIxNiw3ICsyMTQsNyBAQAogLyohIFxicmllZiBGaW5kIHRoZSBwYXJpdHkgb2YgYSAzMiBiaXQgd29yZC4KICAgICBccGFyYW0geCBUaGUgd29yZCB0byBiZSBjaGVja2VkLgogICAgIFxyZXR1cm4gMSBmb3Igb2RkLCBvciAwIGZvciBldmVuLiAqLwotc3RhdGljIF9faW5saW5lX18gaW50IHBhcml0eTMyKHVpbnQzMl90IHgpCitzdGF0aWMgaW5saW5lIGludCBwYXJpdHkzMih1aW50MzJfdCB4KQogewogCXggXj0gKHggPj4gMTYpOwogCXggXj0gKHggPj4gOCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmMKaW5kZXggZmQ0MDA3ZS4uNmQ3MjE3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uYwpAQCAtMjcsOCArMjcsNiBAQAogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiAkSWQ6IGVjaG8uYyx2IDEuMjAgMjAwNi8xMi8wMSAxODowMDo0OCBzdGV2ZXUgRXhwICQKICAqLwogCiAvKiEgXGZpbGUgKi8KQEAgLTExMywxNyArMTExLDE3IEBACiAKICNkZWZpbmUgTUlOX1RYX1BPV0VSX0ZPUl9BREFQVElPTiAgIDY0CiAjZGVmaW5lIE1JTl9SWF9QT1dFUl9GT1JfQURBUFRJT04gICA2NAotI2RlZmluZSBEVERfSEFOR09WRVIgICAgICAgICAgICAgICA2MDAJLyogNjAwIHNhbXBsZXMsIG9yIDc1bXMgICAgICovCi0jZGVmaW5lIERDX0xPRzJCRVRBICAgICAgICAgICAgICAgICAgMwkvKiBsb2cyKCkgb2YgREMgZmlsdGVyIEJldGEgKi8KKyNkZWZpbmUgRFREX0hBTkdPVkVSCQkgNjAwCS8qIDYwMCBzYW1wbGVzLCBvciA3NW1zICAgICAqLworI2RlZmluZSBEQ19MT0cyQkVUQQkJICAgIDMJLyogbG9nMigpIG9mIERDIGZpbHRlciBCZXRhICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OUworCQkJCSAgIEZVTkNUSU9OUwogXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIGFkYXB0aW5nIGNvZWZmcyB1c2luZyB0aGUgdHJhZGl0aW9uYWwgc3RvY2hhc3RpYyBkZXNjZW50IChOKUxNUyBhbGdvcml0aG0gKi8KIAogI2lmZGVmIF9fYmZpbl9fCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGxtc19hZGFwdF9iZyhzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjLCBpbnQgY2xlYW4sCitzdGF0aWMgaW5saW5lIHZvaWQgbG1zX2FkYXB0X2JnKHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludCBjbGVhbiwKIAkJCQkgICAgaW50IHNoaWZ0KQogewogCWludCBpLCBqOwpAQCAtMTQ3LDEzICsxNDUsMTMgQEAKIAogCS8qIHN0OiBhbmQgZW46IGhlbHAgdXMgbG9jYXRlIHRoZSBhc3NlbWJsZXIgaW4gZWNoby5zICovCiAKLQkvL2FzbSgic3Q6Iik7CisJLyogYXNtKCJzdDoiKTsgKi8KIAluID0gZWMtPnRhcHM7CiAJZm9yIChpID0gMCwgaiA9IG9mZnNldDI7IGkgPCBuOyBpKyssIGorKykgewogCQlleHAgPSAqcGhpc3QrKyAqIGZhY3RvcjsKIAkJZWMtPmZpcl90YXBzMTZbMV1baV0gKz0gKGludDE2X3QpICgoZXhwICsgKDEgPDwgMTQpKSA+PiAxNSk7CiAJfQotCS8vYXNtKCJlbjoiKTsKKwkvKiBhc20oImVuOiIpOyAqLwogCiAJLyogTm90ZSB0aGUgYXNtIGZvciB0aGUgaW5uZXIgbG9vcCBhYm92ZSBnZW5lcmF0ZWQgYnkgQmxhY2tmaW4gZ2NjCiAJICAgNC4xLjEgaXMgcHJldHR5IGdvb2QgKG5vdGUgZXZlbiBwYXJhbGxlbCBpbnN0cnVjdGlvbnMgdXNlZCk6CkBAIC0xOTUsNyArMTkzLDcgQEAKICovCiAKICNlbHNlCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxtc19hZGFwdF9iZyhzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjLCBpbnQgY2xlYW4sCitzdGF0aWMgaW5saW5lIHZvaWQgbG1zX2FkYXB0X2JnKHN0cnVjdCBvc2xlY19zdGF0ZSAqZWMsIGludCBjbGVhbiwKIAkJCQkgICAgaW50IHNoaWZ0KQogewogCWludCBpOwpAQCAtMjQ5LDkgKzI0Nyw4IEBACiAJZmlyMTZfY3JlYXRlKCZlYy0+ZmlyX3N0YXRlLCBlYy0+ZmlyX3RhcHMxNlswXSwgZWMtPnRhcHMpOwogCWZpcjE2X2NyZWF0ZSgmZWMtPmZpcl9zdGF0ZV9iZywgZWMtPmZpcl90YXBzMTZbMV0sIGVjLT50YXBzKTsKIAotCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQogCQllYy0+eHZ0eFtpXSA9IGVjLT55dnR4W2ldID0gZWMtPnh2cnhbaV0gPSBlYy0+eXZyeFtpXSA9IDA7Ci0JfQogCiAJZWMtPmNuZ19sZXZlbCA9IDEwMDA7CiAJb3NsZWNfYWRhcHRpb25fbW9kZShlYywgYWRhcHRpb25fbW9kZSk7CkBAIC0yNzEsMTQgKzI2OCwxMyBAQAogCiAJcmV0dXJuIGVjOwogCi0gICAgICBlcnJvcl9vb206CitlcnJvcl9vb206CiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKIAkJa2ZyZWUoZWMtPmZpcl90YXBzMTZbaV0pOwogCiAJa2ZyZWUoZWMpOwogCXJldHVybiBOVUxMOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19jcmVhdGUpOwogCiB2b2lkIG9zbGVjX2ZyZWUoc3RydWN0IG9zbGVjX3N0YXRlICplYykKQEAgLTI5MiwxNCArMjg4LDEyIEBACiAJa2ZyZWUoZWMtPnNuYXBzaG90KTsKIAlrZnJlZShlYyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKG9zbGVjX2ZyZWUpOwogCiB2b2lkIG9zbGVjX2FkYXB0aW9uX21vZGUoc3RydWN0IG9zbGVjX3N0YXRlICplYywgaW50IGFkYXB0aW9uX21vZGUpCiB7CiAJZWMtPmFkYXB0aW9uX21vZGUgPSBhZGFwdGlvbl9tb2RlOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19hZGFwdGlvbl9tb2RlKTsKIAogdm9pZCBvc2xlY19mbHVzaChzdHJ1Y3Qgb3NsZWNfc3RhdGUgKmVjKQpAQCAtMzI2LDE0ICszMjAsMTIgQEAKIAllYy0+Y3Vycl9wb3MgPSBlYy0+dGFwcyAtIDE7CiAJZWMtPlBzdGF0ZXMgPSAwOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19mbHVzaCk7CiAKIHZvaWQgb3NsZWNfc25hcHNob3Qoc3RydWN0IG9zbGVjX3N0YXRlICplYykKIHsKIAltZW1jcHkoZWMtPnNuYXBzaG90LCBlYy0+ZmlyX3RhcHMxNlswXSwgZWMtPnRhcHMgKiBzaXplb2YoaW50MTZfdCkpOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChvc2xlY19zbmFwc2hvdCk7CiAKIC8qIER1YWwgUGF0aCBFY2hvIENhbmNlbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzk5LDcgKzM5MSw3IEBACiAJCS8qIGVmZmljaWVudCAib3V0IHdpdGggdGhlIG9sZCBhbmQgaW4gd2l0aCB0aGUgbmV3IiBhbGdvcml0aG0gc28KIAkJICAgd2UgZG9uJ3QgaGF2ZSB0byByZWNhbGN1bGF0ZSBvdmVyIHRoZSB3aG9sZSBibG9jayBvZgogCQkgICBzYW1wbGVzLiAqLwotCQluZXcgPSAoaW50KXR4ICooaW50KXR4OworCQluZXcgPSAoaW50KXR4ICogKGludCl0eDsKIAkJb2xkID0gKGludCllYy0+ZmlyX3N0YXRlLmhpc3RvcnlbZWMtPmZpcl9zdGF0ZS5jdXJyX3Bvc10gKgogCQkgICAgKGludCllYy0+ZmlyX3N0YXRlLmhpc3RvcnlbZWMtPmZpcl9zdGF0ZS5jdXJyX3Bvc107CiAJCWVjLT5Qc3RhdGVzICs9CkBAIC00OTgsMTUgKzQ5MCwxNSBAQAogCiAJaWYgKChlYy0+YWRhcHRpb25fbW9kZSAmIEVDSE9fQ0FOX1VTRV9BREFQVElPTikgJiYKIAkgICAgKGVjLT5ub251cGRhdGVfZHdlbGwgPT0gMCkgJiYKLQkgICAgKDggKiBlYy0+TGNsZWFuX2JnIDwKLQkgICAgIDcgKiBlYy0+TGNsZWFuKSAvKiAoZWMtPkxjbGVhbl9iZyA8IDAuODc1KmVjLT5MY2xlYW4pICovICYmCi0JICAgICg4ICogZWMtPkxjbGVhbl9iZyA8Ci0JICAgICBlYy0+THR4KSAvKiAoZWMtPkxjbGVhbl9iZyA8IDAuMTI1KmVjLT5MdHgpICAgICovICkgeworCSAgICAvKiAoZWMtPkxjbGVhbl9iZyA8IDAuODc1KmVjLT5MY2xlYW4pICovCisJICAgICg4ICogZWMtPkxjbGVhbl9iZyA8IDcgKiBlYy0+TGNsZWFuKSAmJgorCSAgICAvKiAoZWMtPkxjbGVhbl9iZyA8IDAuMTI1KmVjLT5MdHgpICovCisJICAgICg4ICogZWMtPkxjbGVhbl9iZyA8IGVjLT5MdHgpKSB7CiAJCWlmIChlYy0+Y29uZF9tZXQgPT0gNikgewogCQkJLyogQkcgZmlsdGVyIGhhcyBoYWQgYmV0dGVyIHJlc3VsdHMgZm9yIDYgY29uc2VjdXRpdmUgc2FtcGxlcyAqLwogCQkJZWMtPmFkYXB0ID0gMTsKIAkJCW1lbWNweShlYy0+ZmlyX3RhcHMxNlswXSwgZWMtPmZpcl90YXBzMTZbMV0sCi0JCQkgICAgICAgZWMtPnRhcHMgKiBzaXplb2YoaW50MTZfdCkpOworCQkJCWVjLT50YXBzICogc2l6ZW9mKGludDE2X3QpKTsKIAkJfSBlbHNlCiAJCQllYy0+Y29uZF9tZXQrKzsKIAl9IGVsc2UKQEAgLTU4MCw3ICs1NzIsNiBAQAogCiAJcmV0dXJuIChpbnQxNl90KSBlYy0+Y2xlYW5fbmxwIDw8IDE7CiB9Ci0KIEVYUE9SVF9TWU1CT0xfR1BMKG9zbGVjX3VwZGF0ZSk7CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgc2VwZXJhdGVkIGZyb20gdGhlIGVjaG8gY2FuY2VsbGVyIGlzIGl0IGlzIHVzdWFsbHkgY2FsbGVkCkBAIC02MDQsNyArNTk1LDcgQEAKICAgIHByZWNpc2lvbiwgd2hpY2ggbm9pc2Ugc2hhcGVzIHRoaW5ncywgZ2l2aW5nIHZlcnkgY2xlYW4gREMgcmVtb3ZhbC4KICovCiAKLWludDE2X3Qgb3NsZWNfaHBmX3R4KHN0cnVjdCBvc2xlY19zdGF0ZSAqIGVjLCBpbnQxNl90IHR4KQoraW50MTZfdCBvc2xlY19ocGZfdHgoc3RydWN0IG9zbGVjX3N0YXRlICplYywgaW50MTZfdCB0eCkKIHsKIAlpbnQgdG1wLCB0bXAxOwogCkBAIC02MjksNyArNjIwLDYgQEAKIAogCXJldHVybiB0eDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwob3NsZWNfaHBmX3R4KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5oIGIvZHJpdmVycy9zdGFnaW5nL2VjaG8vZWNoby5oCmluZGV4IDM0ZmI4MTYuLmM4MzVlNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2VjaG8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9lY2hvLmgKQEAgLTIzLDggKzIzLDYgQEAKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICogJElkOiBlY2hvLmgsdiAxLjkgMjAwNi8xMC8yNCAxMzo0NToyOCBzdGV2ZXUgRXhwICQKICAqLwogCiAjaWZuZGVmIF9fRUNIT19ICmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9maXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2Zpci5oCmluZGV4IGQzNWYxNjguLmFjNmM1NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2Zpci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lY2hvL2Zpci5oCkBAIC0yMSw4ICsyMSw2IEBACiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqICRJZDogZmlyLmgsdiAxLjggMjAwNi8xMC8yNCAxMzo0NToyOCBzdGV2ZXUgRXhwICQKICAqLwogCiAvKiEgXHBhZ2UgZmlyX3BhZ2UgRklSIGZpbHRlcmluZwpAQCAtMTAyLDggKzEwMCw4IEBACiAJZmxvYXQgKmhpc3Rvcnk7CiB9OwogCi1zdGF0aWMgX19pbmxpbmVfXyBjb25zdCBpbnQxNl90ICpmaXIxNl9jcmVhdGUoc3RydWN0IGZpcjE2X3N0YXRlX3QgKmZpciwKLQkJCQkJICAgICAgY29uc3QgaW50MTZfdCAqIGNvZWZmcywgaW50IHRhcHMpCitzdGF0aWMgaW5saW5lIGNvbnN0IGludDE2X3QgKmZpcjE2X2NyZWF0ZShzdHJ1Y3QgZmlyMTZfc3RhdGVfdCAqZmlyLAorCQkJCQkgICAgICBjb25zdCBpbnQxNl90ICpjb2VmZnMsIGludCB0YXBzKQogewogCWZpci0+dGFwcyA9IHRhcHM7CiAJZmlyLT5jdXJyX3BvcyA9IHRhcHMgLSAxOwpAQCAtMTE2LDcgKzExNCw3IEBACiAJcmV0dXJuIGZpci0+aGlzdG9yeTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIxNl9mbHVzaChzdHJ1Y3QgZmlyMTZfc3RhdGVfdCAqZmlyKQorc3RhdGljIGlubGluZSB2b2lkIGZpcjE2X2ZsdXNoKHN0cnVjdCBmaXIxNl9zdGF0ZV90ICpmaXIpCiB7CiAjaWYgZGVmaW5lZChVU0VfTU1YKSAgfHwgIGRlZmluZWQoVVNFX1NTRTIpIHx8IGRlZmluZWQoX19iZmluX18pCiAJbWVtc2V0KGZpci0+aGlzdG9yeSwgMCwgMiAqIGZpci0+dGFwcyAqIHNpemVvZihpbnQxNl90KSk7CkBAIC0xMjUsNyArMTIzLDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZpcjE2X2ZyZWUoc3RydWN0IGZpcjE2X3N0YXRlX3QgKmZpcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaXIxNl9mcmVlKHN0cnVjdCBmaXIxNl9zdGF0ZV90ICpmaXIpCiB7CiAJa2ZyZWUoZmlyLT5oaXN0b3J5KTsKIH0KQEAgLTE0OCwxNiArMTQ2LDE2IEBACiAJCSJBMCArPSBSMC5MKlIxLkwgKElTKTtcblx0IgogCQkiUjAgPSBBMDtcblx0IgogCQkiJTAgPSBSMDtcblx0IgotCQk6Ij0mZCIoZG90KQotCQk6ImEiKHgpLCAiYSIoeSksICJhIihsZW4pCi0JCToiSTAiLCAiSTEiLCAiQTEiLCAiQTAiLCAiUjAiLCAiUjEiCisJCTogIj0mZCIoZG90KQorCQk6ICJhIih4KSwgImEiKHkpLCAiYSIobGVuKQorCQk6ICJJMCIsICJJMSIsICJBMSIsICJBMCIsICJSMCIsICJSMSIKIAkpOwogCiAJcmV0dXJuIGRvdDsKIH0KICNlbmRpZgogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQxNl90IGZpcjE2KHN0cnVjdCBmaXIxNl9zdGF0ZV90ICpmaXIsIGludDE2X3Qgc2FtcGxlKQorc3RhdGljIGlubGluZSBpbnQxNl90IGZpcjE2KHN0cnVjdCBmaXIxNl9zdGF0ZV90ICpmaXIsIGludDE2X3Qgc2FtcGxlKQogewogCWludDMyX3QgeTsKICNpZiBkZWZpbmVkKFVTRV9NTVgpCkBAIC0yNTAsOCArMjQ4LDggQEAKIAlyZXR1cm4gKGludDE2X3QpICh5ID4+IDE1KTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gY29uc3QgaW50MTZfdCAqZmlyMzJfY3JlYXRlKHN0cnVjdCBmaXIzMl9zdGF0ZV90ICpmaXIsCi0JCQkJCSAgICAgIGNvbnN0IGludDMyX3QgKiBjb2VmZnMsIGludCB0YXBzKQorc3RhdGljIGlubGluZSBjb25zdCBpbnQxNl90ICpmaXIzMl9jcmVhdGUoc3RydWN0IGZpcjMyX3N0YXRlX3QgKmZpciwKKwkJCQkJICAgICAgY29uc3QgaW50MzJfdCAqY29lZmZzLCBpbnQgdGFwcykKIHsKIAlmaXItPnRhcHMgPSB0YXBzOwogCWZpci0+Y3Vycl9wb3MgPSB0YXBzIC0gMTsKQEAgLTI2MCwxNyArMjU4LDE3IEBACiAJcmV0dXJuIGZpci0+aGlzdG9yeTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIzMl9mbHVzaChzdHJ1Y3QgZmlyMzJfc3RhdGVfdCAqZmlyKQorc3RhdGljIGlubGluZSB2b2lkIGZpcjMyX2ZsdXNoKHN0cnVjdCBmaXIzMl9zdGF0ZV90ICpmaXIpCiB7CiAJbWVtc2V0KGZpci0+aGlzdG9yeSwgMCwgZmlyLT50YXBzICogc2l6ZW9mKGludDE2X3QpKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBmaXIzMl9mcmVlKHN0cnVjdCBmaXIzMl9zdGF0ZV90ICpmaXIpCitzdGF0aWMgaW5saW5lIHZvaWQgZmlyMzJfZnJlZShzdHJ1Y3QgZmlyMzJfc3RhdGVfdCAqZmlyKQogewogCWtmcmVlKGZpci0+aGlzdG9yeSk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludDE2X3QgZmlyMzIoc3RydWN0IGZpcjMyX3N0YXRlX3QgKmZpciwgaW50MTZfdCBzYW1wbGUpCitzdGF0aWMgaW5saW5lIGludDE2X3QgZmlyMzIoc3RydWN0IGZpcjMyX3N0YXRlX3QgKmZpciwgaW50MTZfdCBzYW1wbGUpCiB7CiAJaW50IGk7CiAJaW50MzJfdCB5OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VjaG8vbW14LmggYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9tbXguaAppbmRleCA0NGU1Y2ZlLi5jMWRjZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZWNoby9tbXguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZWNoby9tbXguaApAQCAtNDQsMjM4ICs0NCwyMzggQEAKIAljaGFyIGJbMTZdOwogfTsKIAotI2RlZmluZSAgICAgICAgIG1teF9pMnIob3AsaW1tLHJlZykgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJpIiAoaW1tKSApCisjZGVmaW5lCW1teF9pMnIob3AsIGltbSwgcmVnKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUwLCAlJSIgI3JlZyBcCisJCQkJOiAvKiBub3RoaW5nICovIFwKKwkJCQk6ICJpIiAoaW1tKSkKIAotI2RlZmluZSAgICAgICAgIG1teF9tMnIob3AsbWVtLHJlZykgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtIiAobWVtKSkKKyNkZWZpbmUJbW14X20ycihvcCwgbWVtLCByZWcpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVnIFwKKwkJCQk6IC8qIG5vdGhpbmcgKi8gXAorCQkJCTogIm0iIChtZW0pKQogCi0jZGVmaW5lICAgICAgICAgbW14X3IybShvcCxyZWcsbWVtKSBcCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlJSIgI3JlZyAiLCAlMCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPW0iIChtZW0pIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm90aGluZyAqLyApCisjZGVmaW5lCW1teF9yMm0ob3AsIHJlZywgbWVtKSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCNvcCAiICUlIiAjcmVnICIsICUwIiBcCisJCQkJOiAiPW0iIChtZW0pIFwKKwkJCQk6IC8qIG5vdGhpbmcgKi8pCiAKLSNkZWZpbmUgICAgICAgICBtbXhfcjJyKG9wLHJlZ3MscmVnZCkgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJSIgI3JlZ3MgIiwgJSIgI3JlZ2QpCisjZGVmaW5lCW1teF9yMnIob3AsIHJlZ3MsIHJlZ2QpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJSIgI3JlZ3MgIiwgJSIgI3JlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBlbW1zKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJlbW1zIikKKyNkZWZpbmUJZW1tcygpIF9fYXNtX18gX192b2xhdGlsZV9fICgiZW1tcyIpCiAKLSNkZWZpbmUgICAgICAgICBtb3ZkX20ycih2YXIscmVnKSAgICAgICAgICAgbW14X20yciAobW92ZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgbW92ZF9yMm0ocmVnLHZhcikgICAgICAgICAgIG1teF9yMm0gKG1vdmQsIHJlZywgdmFyKQotI2RlZmluZSAgICAgICAgIG1vdmRfcjJyKHJlZ3MscmVnZCkgICAgICAgICBtbXhfcjJyIChtb3ZkLCByZWdzLCByZWdkKQorI2RlZmluZQltb3ZkX20ycih2YXIsIHJlZykJbW14X20ycihtb3ZkLCB2YXIsIHJlZykKKyNkZWZpbmUJbW92ZF9yMm0ocmVnLCB2YXIpCW1teF9yMm0obW92ZCwgcmVnLCB2YXIpCisjZGVmaW5lCW1vdmRfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIobW92ZCwgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIG1vdnFfbTJyKHZhcixyZWcpICAgICAgICAgICBtbXhfbTJyIChtb3ZxLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBtb3ZxX3IybShyZWcsdmFyKSAgICAgICAgICAgbW14X3IybSAobW92cSwgcmVnLCB2YXIpCi0jZGVmaW5lICAgICAgICAgbW92cV9yMnIocmVncyxyZWdkKSAgICAgICAgIG1teF9yMnIgKG1vdnEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCW1vdnFfbTJyKHZhciwgcmVnKQltbXhfbTJyKG1vdnEsIHZhciwgcmVnKQorI2RlZmluZQltb3ZxX3IybShyZWcsIHZhcikJbW14X3IybShtb3ZxLCByZWcsIHZhcikKKyNkZWZpbmUJbW92cV9yMnIocmVncywgcmVnZCkJbW14X3Iycihtb3ZxLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcGFja3NzZHdfbTJyKHZhcixyZWcpICAgICAgIG1teF9tMnIgKHBhY2tzc2R3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYWNrc3Nkd19yMnIocmVncyxyZWdkKSAgICAgbW14X3IyciAocGFja3NzZHcsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcGFja3Nzd2JfbTJyKHZhcixyZWcpICAgICAgIG1teF9tMnIgKHBhY2tzc3diLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYWNrc3N3Yl9yMnIocmVncyxyZWdkKSAgICAgbW14X3IyciAocGFja3Nzd2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhY2tzc2R3X20ycih2YXIsIHJlZykJCW1teF9tMnIocGFja3NzZHcsIHZhciwgcmVnKQorI2RlZmluZQlwYWNrc3Nkd19yMnIocmVncywgcmVnZCkJbW14X3IycihwYWNrc3NkdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcGFja3Nzd2JfbTJyKHZhciwgcmVnKQkJbW14X20ycihwYWNrc3N3YiwgdmFyLCByZWcpCisjZGVmaW5lCXBhY2tzc3diX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhY2tzc3diLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcGFja3Vzd2JfbTJyKHZhcixyZWcpICAgICAgIG1teF9tMnIgKHBhY2t1c3diLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYWNrdXN3Yl9yMnIocmVncyxyZWdkKSAgICAgbW14X3IyciAocGFja3Vzd2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhY2t1c3diX20ycih2YXIsIHJlZykJCW1teF9tMnIocGFja3Vzd2IsIHZhciwgcmVnKQorI2RlZmluZQlwYWNrdXN3Yl9yMnIocmVncywgcmVnZCkJbW14X3IycihwYWNrdXN3YiwgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBhZGRiX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwYWRkYiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFkZGJfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBhZGRiLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBhZGRkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwYWRkZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFkZGRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBhZGRkLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBhZGR3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwYWRkdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFkZHdfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBhZGR3LCByZWdzLCByZWdkKQorI2RlZmluZQlwYWRkYl9tMnIodmFyLCByZWcpCW1teF9tMnIocGFkZGIsIHZhciwgcmVnKQorI2RlZmluZQlwYWRkYl9yMnIocmVncywgcmVnZCkJbW14X3IycihwYWRkYiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcGFkZGRfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhZGRkLCB2YXIsIHJlZykKKyNkZWZpbmUJcGFkZGRfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGFkZGQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhZGR3X20ycih2YXIsIHJlZykJbW14X20ycihwYWRkdywgdmFyLCByZWcpCisjZGVmaW5lCXBhZGR3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGR3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcGFkZHNiX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBhZGRzYiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFkZHNiX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBhZGRzYiwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwYWRkc3dfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocGFkZHN3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYWRkc3dfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocGFkZHN3LCByZWdzLCByZWdkKQorI2RlZmluZQlwYWRkc2JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhZGRzYiwgdmFyLCByZWcpCisjZGVmaW5lCXBhZGRzYl9yMnIocmVncywgcmVnZCkJbW14X3IycihwYWRkc2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhZGRzd19tMnIodmFyLCByZWcpCW1teF9tMnIocGFkZHN3LCB2YXIsIHJlZykKKyNkZWZpbmUJcGFkZHN3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGRzdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBhZGR1c2JfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwYWRkdXNiLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYWRkdXNiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGFkZHVzYiwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwYWRkdXN3X20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGFkZHVzdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFkZHVzd19yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBhZGR1c3csIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhZGR1c2JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhZGR1c2IsIHZhciwgcmVnKQorI2RlZmluZQlwYWRkdXNiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGR1c2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhZGR1c3dfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhZGR1c3csIHZhciwgcmVnKQorI2RlZmluZQlwYWRkdXN3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhZGR1c3csIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwYW5kX20ycih2YXIscmVnKSAgICAgICAgICAgbW14X20yciAocGFuZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGFuZF9yMnIocmVncyxyZWdkKSAgICAgICAgIG1teF9yMnIgKHBhbmQsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhbmRfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhbmQsIHZhciwgcmVnKQorI2RlZmluZQlwYW5kX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhbmQsIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwYW5kbl9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGFuZG4sIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBhbmRuX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYW5kbiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcGFuZG5fbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhbmRuLCB2YXIsIHJlZykKKyNkZWZpbmUJcGFuZG5fcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGFuZG4sIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwY21wZXFiX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGVxYiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGNtcGVxYl9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBlcWIsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcGNtcGVxZF9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBlcWQsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBjbXBlcWRfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZXFkLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBjbXBlcXdfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZXF3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwY21wZXF3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGVxdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcGNtcGVxYl9tMnIodmFyLCByZWcpCW1teF9tMnIocGNtcGVxYiwgdmFyLCByZWcpCisjZGVmaW5lCXBjbXBlcWJfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGNtcGVxYiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcGNtcGVxZF9tMnIodmFyLCByZWcpCW1teF9tMnIocGNtcGVxZCwgdmFyLCByZWcpCisjZGVmaW5lCXBjbXBlcWRfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGNtcGVxZCwgcmVncywgcmVnZCkKKyNkZWZpbmUJcGNtcGVxd19tMnIodmFyLCByZWcpCW1teF9tMnIocGNtcGVxdywgdmFyLCByZWcpCisjZGVmaW5lCXBjbXBlcXdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGNtcGVxdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBjbXBndGJfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwY21wZ3RiLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwY21wZ3RiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGNtcGd0YiwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwY21wZ3RkX20ycih2YXIscmVnKSAgICAgICAgbW14X20yciAocGNtcGd0ZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcGNtcGd0ZF9yMnIocmVncyxyZWdkKSAgICAgIG1teF9yMnIgKHBjbXBndGQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcGNtcGd0d19tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBjbXBndHcsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBjbXBndHdfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwY21wZ3R3LCByZWdzLCByZWdkKQorI2RlZmluZQlwY21wZ3RiX20ycih2YXIsIHJlZykJbW14X20ycihwY21wZ3RiLCB2YXIsIHJlZykKKyNkZWZpbmUJcGNtcGd0Yl9yMnIocmVncywgcmVnZCkJbW14X3IycihwY21wZ3RiLCByZWdzLCByZWdkKQorI2RlZmluZQlwY21wZ3RkX20ycih2YXIsIHJlZykJbW14X20ycihwY21wZ3RkLCB2YXIsIHJlZykKKyNkZWZpbmUJcGNtcGd0ZF9yMnIocmVncywgcmVnZCkJbW14X3IycihwY21wZ3RkLCByZWdzLCByZWdkKQorI2RlZmluZQlwY21wZ3R3X20ycih2YXIsIHJlZykJbW14X20ycihwY21wZ3R3LCB2YXIsIHJlZykKKyNkZWZpbmUJcGNtcGd0d19yMnIocmVncywgcmVnZCkJbW14X3IycihwY21wZ3R3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG1hZGR3ZF9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBtYWRkd2QsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBtYWRkd2RfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwbWFkZHdkLCByZWdzLCByZWdkKQorI2RlZmluZQlwbWFkZHdkX20ycih2YXIsIHJlZykJbW14X20ycihwbWFkZHdkLCB2YXIsIHJlZykKKyNkZWZpbmUJcG1hZGR3ZF9yMnIocmVncywgcmVnZCkJbW14X3IycihwbWFkZHdkLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG11bGh3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtdWxodywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG11bGh3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtdWxodywgcmVncywgcmVnZCkKKyNkZWZpbmUJcG11bGh3X20ycih2YXIsIHJlZykJbW14X20ycihwbXVsaHcsIHZhciwgcmVnKQorI2RlZmluZQlwbXVsaHdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG11bGh3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG11bGx3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtdWxsdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG11bGx3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtdWxsdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcG11bGx3X20ycih2YXIsIHJlZykJbW14X20ycihwbXVsbHcsIHZhciwgcmVnKQorI2RlZmluZQlwbXVsbHdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG11bGx3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG9yX20ycih2YXIscmVnKSAgICAgICAgICAgIG1teF9tMnIgKHBvciwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG9yX3IycihyZWdzLHJlZ2QpICAgICAgICAgIG1teF9yMnIgKHBvciwgcmVncywgcmVnZCkKKyNkZWZpbmUJcG9yX20ycih2YXIsIHJlZykJbW14X20ycihwb3IsIHZhciwgcmVnKQorI2RlZmluZQlwb3JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG9yLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHNsbGRfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzbGxkLCBpbW0sIHJlZykKLSNkZWZpbmUgICAgICAgICBwc2xsZF9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNsbGQsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzbGxkX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc2xsZCwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwc2xscV9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNsbHEsIGltbSwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzbGxxX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc2xscSwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNsbHFfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzbGxxLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBzbGx3X2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc2xsdywgaW1tLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNsbHdfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzbGx3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc2xsd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNsbHcsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzbGxkX2kycihpbW0sIHJlZykJbW14X2kycihwc2xsZCwgaW1tLCByZWcpCisjZGVmaW5lCXBzbGxkX20ycih2YXIsIHJlZykJbW14X20ycihwc2xsZCwgdmFyLCByZWcpCisjZGVmaW5lCXBzbGxkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzbGxkLCByZWdzLCByZWdkKQorI2RlZmluZQlwc2xscV9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNsbHEsIGltbSwgcmVnKQorI2RlZmluZQlwc2xscV9tMnIodmFyLCByZWcpCW1teF9tMnIocHNsbHEsIHZhciwgcmVnKQorI2RlZmluZQlwc2xscV9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc2xscSwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHNsbHdfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzbGx3LCBpbW0sIHJlZykKKyNkZWZpbmUJcHNsbHdfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzbGx3LCB2YXIsIHJlZykKKyNkZWZpbmUJcHNsbHdfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNsbHcsIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwc3JhZF9pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNyYWQsIGltbSwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzcmFkX20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JhZCwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNyYWRfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmFkLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBzcmF3X2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc3JhdywgaW1tLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNyYXdfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzcmF3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3Jhd19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNyYXcsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzcmFkX2kycihpbW0sIHJlZykJbW14X2kycihwc3JhZCwgaW1tLCByZWcpCisjZGVmaW5lCXBzcmFkX20ycih2YXIsIHJlZykJbW14X20ycihwc3JhZCwgdmFyLCByZWcpCisjZGVmaW5lCXBzcmFkX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzcmFkLCByZWdzLCByZWdkKQorI2RlZmluZQlwc3Jhd19pMnIoaW1tLCByZWcpCW1teF9pMnIocHNyYXcsIGltbSwgcmVnKQorI2RlZmluZQlwc3Jhd19tMnIodmFyLCByZWcpCW1teF9tMnIocHNyYXcsIHZhciwgcmVnKQorI2RlZmluZQlwc3Jhd19yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3JhdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHBzcmxkX2kycihpbW0scmVnKSAgICAgICAgICBtbXhfaTJyIChwc3JsZCwgaW1tLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNybGRfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzcmxkLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3JsZF9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHNybGQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcHNybHFfaTJyKGltbSxyZWcpICAgICAgICAgIG1teF9pMnIgKHBzcmxxLCBpbW0sIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3JscV9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocHNybHEsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzcmxxX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwc3JscSwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwc3Jsd19pMnIoaW1tLHJlZykgICAgICAgICAgbW14X2kyciAocHNybHcsIGltbSwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzcmx3X20ycih2YXIscmVnKSAgICAgICAgICBtbXhfbTJyIChwc3JsdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNybHdfcjJyKHJlZ3MscmVnZCkgICAgICAgIG1teF9yMnIgKHBzcmx3LCByZWdzLCByZWdkKQorI2RlZmluZQlwc3JsZF9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNybGQsIGltbSwgcmVnKQorI2RlZmluZQlwc3JsZF9tMnIodmFyLCByZWcpCW1teF9tMnIocHNybGQsIHZhciwgcmVnKQorI2RlZmluZQlwc3JsZF9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3JsZCwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHNybHFfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzcmxxLCBpbW0sIHJlZykKKyNkZWZpbmUJcHNybHFfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzcmxxLCB2YXIsIHJlZykKKyNkZWZpbmUJcHNybHFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNybHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzcmx3X2kycihpbW0sIHJlZykJbW14X2kycihwc3JsdywgaW1tLCByZWcpCisjZGVmaW5lCXBzcmx3X20ycih2YXIsIHJlZykJbW14X20ycihwc3JsdywgdmFyLCByZWcpCisjZGVmaW5lCXBzcmx3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzcmx3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHN1YmJfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzdWJiLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3ViYl9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHN1YmIsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcHN1YmRfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzdWJkLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3ViZF9yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHN1YmQsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcHN1YndfbTJyKHZhcixyZWcpICAgICAgICAgIG1teF9tMnIgKHBzdWJ3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3Vid19yMnIocmVncyxyZWdkKSAgICAgICAgbW14X3IyciAocHN1YncsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzdWJiX20ycih2YXIsIHJlZykJbW14X20ycihwc3ViYiwgdmFyLCByZWcpCisjZGVmaW5lCXBzdWJiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJiLCByZWdzLCByZWdkKQorI2RlZmluZQlwc3ViZF9tMnIodmFyLCByZWcpCW1teF9tMnIocHN1YmQsIHZhciwgcmVnKQorI2RlZmluZQlwc3ViZF9yMnIocmVncywgcmVnZCkJbW14X3Iycihwc3ViZCwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHN1YndfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBzdWJ3LCB2YXIsIHJlZykKKyNkZWZpbmUJcHN1YndfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YncsIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBwc3Vic2JfbTJyKHZhcixyZWcpICAgICAgICAgbW14X20yciAocHN1YnNiLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3Vic2JfcjJyKHJlZ3MscmVnZCkgICAgICAgbW14X3IyciAocHN1YnNiLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBzdWJzd19tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChwc3Vic3csIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzdWJzd19yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChwc3Vic3csIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBzdWJzYl9tMnIodmFyLCByZWcpCW1teF9tMnIocHN1YnNiLCB2YXIsIHJlZykKKyNkZWZpbmUJcHN1YnNiX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBzdWJzYiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHN1YnN3X20ycih2YXIsIHJlZykJbW14X20ycihwc3Vic3csIHZhciwgcmVnKQorI2RlZmluZQlwc3Vic3dfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YnN3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHN1YnVzYl9tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBzdWJ1c2IsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzdWJ1c2JfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwc3VidXNiLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHBzdWJ1c3dfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwc3VidXN3LCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwc3VidXN3X3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocHN1YnVzdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcHN1YnVzYl9tMnIodmFyLCByZWcpCW1teF9tMnIocHN1YnVzYiwgdmFyLCByZWcpCisjZGVmaW5lCXBzdWJ1c2JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YnVzYiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcHN1YnVzd19tMnIodmFyLCByZWcpCW1teF9tMnIocHN1YnVzdywgdmFyLCByZWcpCisjZGVmaW5lCXBzdWJ1c3dfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHN1YnVzdywgcmVncywgcmVnZCkKIAotI2RlZmluZSAgICAgICAgIHB1bnBja2hid19tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2toYncsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHB1bnBja2hid19yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2toYncsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgcHVucGNraGRxX20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2hkcSwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHVucGNraGRxX3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2hkcSwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwdW5wY2tod2RfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNraHdkLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwdW5wY2tod2RfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNraHdkLCByZWdzLCByZWdkKQorI2RlZmluZQlwdW5wY2toYndfbTJyKHZhciwgcmVnKQkJbW14X20ycihwdW5wY2toYncsIHZhciwgcmVnKQorI2RlZmluZQlwdW5wY2toYndfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHVucGNraGJ3LCByZWdzLCByZWdkKQorI2RlZmluZQlwdW5wY2toZHFfbTJyKHZhciwgcmVnKQkJbW14X20ycihwdW5wY2toZHEsIHZhciwgcmVnKQorI2RlZmluZQlwdW5wY2toZHFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHVucGNraGRxLCByZWdzLCByZWdkKQorI2RlZmluZQlwdW5wY2tod2RfbTJyKHZhciwgcmVnKQkJbW14X20ycihwdW5wY2tod2QsIHZhciwgcmVnKQorI2RlZmluZQlwdW5wY2tod2RfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHVucGNraHdkLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHVucGNrbGJ3X20ycih2YXIscmVnKSAgICAgIG1teF9tMnIgKHB1bnBja2xidywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHVucGNrbGJ3X3IycihyZWdzLHJlZ2QpICAgIG1teF9yMnIgKHB1bnBja2xidywgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwdW5wY2tsZHFfbTJyKHZhcixyZWcpICAgICAgbW14X20yciAocHVucGNrbGRxLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwdW5wY2tsZHFfcjJyKHJlZ3MscmVnZCkgICAgbW14X3IyciAocHVucGNrbGRxLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHB1bnBja2x3ZF9tMnIodmFyLHJlZykgICAgICBtbXhfbTJyIChwdW5wY2tsd2QsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHB1bnBja2x3ZF9yMnIocmVncyxyZWdkKSAgICBtbXhfcjJyIChwdW5wY2tsd2QsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXB1bnBja2xid19tMnIodmFyLCByZWcpCQltbXhfbTJyKHB1bnBja2xidywgdmFyLCByZWcpCisjZGVmaW5lCXB1bnBja2xid19yMnIocmVncywgcmVnZCkJbW14X3IycihwdW5wY2tsYncsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXB1bnBja2xkcV9tMnIodmFyLCByZWcpCQltbXhfbTJyKHB1bnBja2xkcSwgdmFyLCByZWcpCisjZGVmaW5lCXB1bnBja2xkcV9yMnIocmVncywgcmVnZCkJbW14X3IycihwdW5wY2tsZHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXB1bnBja2x3ZF9tMnIodmFyLCByZWcpCQltbXhfbTJyKHB1bnBja2x3ZCwgdmFyLCByZWcpCisjZGVmaW5lCXB1bnBja2x3ZF9yMnIocmVncywgcmVnZCkJbW14X3IycihwdW5wY2tsd2QsIHJlZ3MsIHJlZ2QpCiAKLSNkZWZpbmUgICAgICAgICBweG9yX20ycih2YXIscmVnKSAgICAgICAgICAgbW14X20yciAocHhvciwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHhvcl9yMnIocmVncyxyZWdkKSAgICAgICAgIG1teF9yMnIgKHB4b3IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXB4b3JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHB4b3IsIHZhciwgcmVnKQorI2RlZmluZQlweG9yX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHB4b3IsIHJlZ3MsIHJlZ2QpCiAKIC8qIDNETk9XIGV4dGVuc2lvbnMgKi8KIAotI2RlZmluZSAgICAgICAgIHBhdmd1c2JfbTJyKHZhcixyZWcpICAgICAgICBtbXhfbTJyIChwYXZndXNiLCB2YXIsIHJlZykKLSNkZWZpbmUgICAgICAgICBwYXZndXNiX3IycihyZWdzLHJlZ2QpICAgICAgbW14X3IyciAocGF2Z3VzYiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcGF2Z3VzYl9tMnIodmFyLCByZWcpCW1teF9tMnIocGF2Z3VzYiwgdmFyLCByZWcpCisjZGVmaW5lCXBhdmd1c2JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGF2Z3VzYiwgcmVncywgcmVnZCkKIAogLyogQU1EIE1NWCBleHRlbnNpb25zIC0gYWxzbyBhdmFpbGFibGUgaW4gaW50ZWwgU1NFICovCiAKLSNkZWZpbmUgICAgICAgICBtbXhfbTJyaShvcCxtZW0scmVnLGltbSkgXAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTEsICUwLCAlJSIgI3JlZyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibSIgKG1lbSksICJpIiAoaW1tKSkKLSNkZWZpbmUgICAgICAgICBtbXhfcjJyaShvcCxyZWdzLHJlZ2QsaW1tKSBcCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMCwgJSUiICNyZWdzICIsICUlIiAjcmVnZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vdGhpbmcgKi8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiaSIgKGltbSkgKQorI2RlZmluZQltbXhfbTJyaShvcCwgbWVtLCByZWcsIGltbSkgXAorCV9fYXNtX18gX192b2xhdGlsZV9fICgjb3AgIiAlMSwgJTAsICUlIiAjcmVnIFwKKwkJCQk6IC8qIG5vdGhpbmcgKi8gXAorCQkJCTogIm0iIChtZW0pLCAiaSIgKGltbSkpCisjZGVmaW5lCW1teF9yMnJpKG9wLCByZWdzLCByZWdkLCBpbW0pIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoI29wICIgJTAsICUlIiAjcmVncyAiLCAlJSIgI3JlZ2QgXAorCQkJCTogLyogbm90aGluZyAqLyBcCisJCQkJOiAiaSIgKGltbSkpCiAKLSNkZWZpbmUgICAgICAgICBtbXhfZmV0Y2gobWVtLGhpbnQpIFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJwcmVmZXRjaCIgI2hpbnQgIiAlMCIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAvKiBub3RoaW5nICovIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm0iIChtZW0pKQorI2RlZmluZQltbXhfZmV0Y2gobWVtLCBoaW50KSBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJwcmVmZXRjaCIgI2hpbnQgIiAlMCIgXAorCQkJCTogLyogbm90aGluZyAqLyBcCisJCQkJOiAibSIgKG1lbSkpCiAKLSNkZWZpbmUgICAgICAgICBtYXNrbW92cShyZWdzLG1hc2tyZWcpICAgICAgbW14X3IycmkgKG1hc2ttb3ZxLCByZWdzLCBtYXNrcmVnKQorI2RlZmluZQltYXNrbW92cShyZWdzLCBtYXNrcmVnKQltbXhfcjJyaShtYXNrbW92cSwgcmVncywgbWFza3JlZykKIAotI2RlZmluZSAgICAgICAgIG1vdm50cV9yMm0obW1yZWcsdmFyKSAgICAgICBtbXhfcjJtIChtb3ZudHEsIG1tcmVnLCB2YXIpCisjZGVmaW5lCW1vdm50cV9yMm0obW1yZWcsIHZhcikJbW14X3IybShtb3ZudHEsIG1tcmVnLCB2YXIpCiAKLSNkZWZpbmUgICAgICAgICBwYXZnYl9tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGF2Z2IsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBhdmdiX3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYXZnYiwgcmVncywgcmVnZCkKLSNkZWZpbmUgICAgICAgICBwYXZnd19tMnIodmFyLHJlZykgICAgICAgICAgbW14X20yciAocGF2Z3csIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBhdmd3X3IycihyZWdzLHJlZ2QpICAgICAgICBtbXhfcjJyIChwYXZndywgcmVncywgcmVnZCkKKyNkZWZpbmUJcGF2Z2JfbTJyKHZhciwgcmVnKQltbXhfbTJyKHBhdmdiLCB2YXIsIHJlZykKKyNkZWZpbmUJcGF2Z2JfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocGF2Z2IsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXBhdmd3X20ycih2YXIsIHJlZykJbW14X20ycihwYXZndywgdmFyLCByZWcpCisjZGVmaW5lCXBhdmd3X3IycihyZWdzLCByZWdkKQltbXhfcjJyKHBhdmd3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcGV4dHJ3X3IycihtbXJlZyxyZWcsaW1tKSAgIG1teF9yMnJpIChwZXh0cncsIG1tcmVnLCByZWcsIGltbSkKKyNkZWZpbmUJcGV4dHJ3X3IycihtbXJlZywgcmVnLCBpbW0pCW1teF9yMnJpKHBleHRydywgbW1yZWcsIHJlZywgaW1tKQogCi0jZGVmaW5lICAgICAgICAgcGluc3J3X3IycihyZWcsbW1yZWcsaW1tKSAgIG1teF9yMnJpIChwaW5zcncsIHJlZywgbW1yZWcsIGltbSkKKyNkZWZpbmUJcGluc3J3X3IycihyZWcsIG1tcmVnLCBpbW0pCW1teF9yMnJpKHBpbnNydywgcmVnLCBtbXJlZywgaW1tKQogCi0jZGVmaW5lICAgICAgICAgcG1heHN3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtYXhzdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG1heHN3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtYXhzdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcG1heHN3X20ycih2YXIsIHJlZykJbW14X20ycihwbWF4c3csIHZhciwgcmVnKQorI2RlZmluZQlwbWF4c3dfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG1heHN3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG1heHViX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtYXh1YiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG1heHViX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtYXh1YiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcG1heHViX20ycih2YXIsIHJlZykJbW14X20ycihwbWF4dWIsIHZhciwgcmVnKQorI2RlZmluZQlwbWF4dWJfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG1heHViLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG1pbnN3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtaW5zdywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG1pbnN3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtaW5zdywgcmVncywgcmVnZCkKKyNkZWZpbmUJcG1pbnN3X20ycih2YXIsIHJlZykJbW14X20ycihwbWluc3csIHZhciwgcmVnKQorI2RlZmluZQlwbWluc3dfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG1pbnN3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG1pbnViX20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBtaW51YiwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcG1pbnViX3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBtaW51YiwgcmVncywgcmVnZCkKKyNkZWZpbmUJcG1pbnViX20ycih2YXIsIHJlZykJbW14X20ycihwbWludWIsIHZhciwgcmVnKQorI2RlZmluZQlwbWludWJfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocG1pbnViLCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG1vdm1za2IobW1yZWcscmVnKSBcCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibW92bXNrcHMgJSIgI21tcmVnICIsICUiICNyZWcpCisjZGVmaW5lCXBtb3Ztc2tiKG1tcmVnLCByZWcpIFwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1vdm1za3BzICUiICNtbXJlZyAiLCAlIiAjcmVnKQogCi0jZGVmaW5lICAgICAgICAgcG11bGh1d19tMnIodmFyLHJlZykgICAgICAgIG1teF9tMnIgKHBtdWxodXcsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIHBtdWxodXdfcjJyKHJlZ3MscmVnZCkgICAgICBtbXhfcjJyIChwbXVsaHV3LCByZWdzLCByZWdkKQorI2RlZmluZQlwbXVsaHV3X20ycih2YXIsIHJlZykJbW14X20ycihwbXVsaHV3LCB2YXIsIHJlZykKKyNkZWZpbmUJcG11bGh1d19yMnIocmVncywgcmVnZCkJbW14X3IycihwbXVsaHV3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHJlZmV0Y2h0MChtZW0pICAgICAgICAgICAgIG1teF9mZXRjaCAobWVtLCB0MCkKLSNkZWZpbmUgICAgICAgICBwcmVmZXRjaHQxKG1lbSkgICAgICAgICAgICAgbW14X2ZldGNoIChtZW0sIHQxKQotI2RlZmluZSAgICAgICAgIHByZWZldGNodDIobWVtKSAgICAgICAgICAgICBtbXhfZmV0Y2ggKG1lbSwgdDIpCi0jZGVmaW5lICAgICAgICAgcHJlZmV0Y2hudGEobWVtKSAgICAgICAgICAgIG1teF9mZXRjaCAobWVtLCBudGEpCisjZGVmaW5lCXByZWZldGNodDAobWVtKQkJbW14X2ZldGNoKG1lbSwgdDApCisjZGVmaW5lCXByZWZldGNodDEobWVtKQkJbW14X2ZldGNoKG1lbSwgdDEpCisjZGVmaW5lCXByZWZldGNodDIobWVtKQkJbW14X2ZldGNoKG1lbSwgdDIpCisjZGVmaW5lCXByZWZldGNobnRhKG1lbSkJbW14X2ZldGNoKG1lbSwgbnRhKQogCi0jZGVmaW5lICAgICAgICAgcHNhZGJ3X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKHBzYWRidywgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgcHNhZGJ3X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKHBzYWRidywgcmVncywgcmVnZCkKKyNkZWZpbmUJcHNhZGJ3X20ycih2YXIsIHJlZykJbW14X20ycihwc2FkYncsIHZhciwgcmVnKQorI2RlZmluZQlwc2FkYndfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHNhZGJ3LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcHNodWZ3X20ycih2YXIscmVnLGltbSkgICAgIG1teF9tMnJpKHBzaHVmdywgdmFyLCByZWcsIGltbSkKLSNkZWZpbmUgICAgICAgICBwc2h1ZndfcjJyKHJlZ3MscmVnZCxpbW0pICAgbW14X3IycmkocHNodWZ3LCByZWdzLCByZWdkLCBpbW0pCisjZGVmaW5lCXBzaHVmd19tMnIodmFyLCByZWcsIGltbSkJbW14X20ycmkocHNodWZ3LCB2YXIsIHJlZywgaW1tKQorI2RlZmluZQlwc2h1ZndfcjJyKHJlZ3MsIHJlZ2QsIGltbSkJbW14X3IycmkocHNodWZ3LCByZWdzLCByZWdkLCBpbW0pCiAKLSNkZWZpbmUgICAgICAgICBzZmVuY2UoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInNmZW5jZVxuXHQiKQorI2RlZmluZQlzZmVuY2UoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInNmZW5jZVxuXHQiKQogCiAvKiBTU0UyICovCi0jZGVmaW5lICAgICAgICAgcHNodWZod19tMnIodmFyLHJlZyxpbW0pICAgIG1teF9tMnJpKHBzaHVmaHcsIHZhciwgcmVnLCBpbW0pCi0jZGVmaW5lICAgICAgICAgcHNodWZod19yMnIocmVncyxyZWdkLGltbSkgIG1teF9yMnJpKHBzaHVmaHcsIHJlZ3MsIHJlZ2QsIGltbSkKLSNkZWZpbmUgICAgICAgICBwc2h1Zmx3X20ycih2YXIscmVnLGltbSkgICAgbW14X20ycmkocHNodWZsdywgdmFyLCByZWcsIGltbSkKLSNkZWZpbmUgICAgICAgICBwc2h1Zmx3X3IycihyZWdzLHJlZ2QsaW1tKSAgbW14X3IycmkocHNodWZsdywgcmVncywgcmVnZCwgaW1tKQorI2RlZmluZQlwc2h1Zmh3X20ycih2YXIsIHJlZywgaW1tKQltbXhfbTJyaShwc2h1Zmh3LCB2YXIsIHJlZywgaW1tKQorI2RlZmluZQlwc2h1Zmh3X3IycihyZWdzLCByZWdkLCBpbW0pCW1teF9yMnJpKHBzaHVmaHcsIHJlZ3MsIHJlZ2QsIGltbSkKKyNkZWZpbmUJcHNodWZsd19tMnIodmFyLCByZWcsIGltbSkJbW14X20ycmkocHNodWZsdywgdmFyLCByZWcsIGltbSkKKyNkZWZpbmUJcHNodWZsd19yMnIocmVncywgcmVnZCwgaW1tKQltbXhfcjJyaShwc2h1Zmx3LCByZWdzLCByZWdkLCBpbW0pCiAKLSNkZWZpbmUgICAgICAgICBwc2h1ZmRfcjJyKHJlZ3MscmVnZCxpbW0pICAgbW14X3IycmkocHNodWZkLCByZWdzLCByZWdkLCBpbW0pCisjZGVmaW5lCXBzaHVmZF9yMnIocmVncywgcmVnZCwgaW1tKQltbXhfcjJyaShwc2h1ZmQsIHJlZ3MsIHJlZ2QsIGltbSkKIAotI2RlZmluZSAgICAgICAgIG1vdmRxYV9tMnIodmFyLHJlZykgICAgICAgICBtbXhfbTJyIChtb3ZkcWEsIHZhciwgcmVnKQotI2RlZmluZSAgICAgICAgIG1vdmRxYV9yMm0ocmVnLHZhcikgICAgICAgICBtbXhfcjJtIChtb3ZkcWEsIHJlZywgdmFyKQotI2RlZmluZSAgICAgICAgIG1vdmRxYV9yMnIocmVncyxyZWdkKSAgICAgICBtbXhfcjJyIChtb3ZkcWEsIHJlZ3MsIHJlZ2QpCi0jZGVmaW5lICAgICAgICAgbW92ZHF1X20ycih2YXIscmVnKSAgICAgICAgIG1teF9tMnIgKG1vdmRxdSwgdmFyLCByZWcpCi0jZGVmaW5lICAgICAgICAgbW92ZHF1X3IybShyZWcsdmFyKSAgICAgICAgIG1teF9yMm0gKG1vdmRxdSwgcmVnLCB2YXIpCi0jZGVmaW5lICAgICAgICAgbW92ZHF1X3IycihyZWdzLHJlZ2QpICAgICAgIG1teF9yMnIgKG1vdmRxdSwgcmVncywgcmVnZCkKKyNkZWZpbmUJbW92ZHFhX20ycih2YXIsIHJlZykJbW14X20ycihtb3ZkcWEsIHZhciwgcmVnKQorI2RlZmluZQltb3ZkcWFfcjJtKHJlZywgdmFyKQltbXhfcjJtKG1vdmRxYSwgcmVnLCB2YXIpCisjZGVmaW5lCW1vdmRxYV9yMnIocmVncywgcmVnZCkJbW14X3Iycihtb3ZkcWEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCW1vdmRxdV9tMnIodmFyLCByZWcpCW1teF9tMnIobW92ZHF1LCB2YXIsIHJlZykKKyNkZWZpbmUJbW92ZHF1X3IybShyZWcsIHZhcikJbW14X3IybShtb3ZkcXUsIHJlZywgdmFyKQorI2RlZmluZQltb3ZkcXVfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIobW92ZHF1LCByZWdzLCByZWdkKQogCi0jZGVmaW5lICAgICAgICAgcG11bGx3X3IybShyZWcsdmFyKSAgICAgICAgIG1teF9yMm0gKHBtdWxsdywgcmVnLCB2YXIpCisjZGVmaW5lCXBtdWxsd19yMm0ocmVnLCB2YXIpCW1teF9yMm0ocG11bGx3LCByZWcsIHZhcikKIAotI2RlZmluZSAgICAgICAgIHBzbGxkcV9pMnIoaW1tLHJlZykgICAgICAgICBtbXhfaTJyIChwc2xsZHEsIGltbSwgcmVnKQotI2RlZmluZSAgICAgICAgIHBzcmxkcV9pMnIoaW1tLHJlZykgICAgICAgICBtbXhfaTJyIChwc3JsZHEsIGltbSwgcmVnKQorI2RlZmluZQlwc2xsZHFfaTJyKGltbSwgcmVnKQltbXhfaTJyKHBzbGxkcSwgaW1tLCByZWcpCisjZGVmaW5lCXBzcmxkcV9pMnIoaW1tLCByZWcpCW1teF9pMnIocHNybGRxLCBpbW0sIHJlZykKIAotI2RlZmluZSAgICAgICAgIHB1bnBja2xxZHFfcjJyKHJlZ3MscmVnZCkgICBtbXhfcjJyIChwdW5wY2tscWRxLCByZWdzLCByZWdkKQotI2RlZmluZSAgICAgICAgIHB1bnBja2hxZHFfcjJyKHJlZ3MscmVnZCkgICBtbXhfcjJyIChwdW5wY2tocWRxLCByZWdzLCByZWdkKQorI2RlZmluZQlwdW5wY2tscWRxX3IycihyZWdzLCByZWdkKQltbXhfcjJyKHB1bnBja2xxZHEsIHJlZ3MsIHJlZ2QpCisjZGVmaW5lCXB1bnBja2hxZHFfcjJyKHJlZ3MsIHJlZ2QpCW1teF9yMnIocHVucGNraHFkcSwgcmVncywgcmVnZCkKIAogI2VuZGlmIC8qIEFWQ09ERUNfSTM4Nk1NWF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0JlbmNobWFyay5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9CZW5jaG1hcmsuaAppbmRleCA2MmRlZTNiLi40Y2MwMWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0JlbmNobWFyay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvQmVuY2htYXJrLmgKQEAgLTczLDEyICs3Myw2IEBACiAKICNpbmNsdWRlICJnbG9iYWwuaCIKIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9OT19PU18pICYmIChERVZfU1lTVEVNID09IF9ERVZfR05VX0NGNTQ4WF8pCi0jaW5jbHVkZSAiY29tbW9uLmgiCi0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKLQotLy8gICAgI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaWZkZWYgQ09ORklHX0NPTERGSVJFCkBAIC05MywxMiArODcsNiBAQAogI2RlZmluZSBCRU5DSE1BUktfTU9EVUxFUyAgICAgICAgICAgMHgwMDAwMDAwMAogI2VuZGlmCiAKLSNlbHNlCi0gICAgLy8gZGlzYWJsZSBCZW5jaG1hcmtpbmcKLSN1bmRlZiBCRU5DSE1BUktfTU9EVUxFUwotI2RlZmluZSBCRU5DSE1BUktfTU9EVUxFUyAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKLSNlbmRpZgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0RlYnVnLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0RlYnVnLmgKaW5kZXggMDVkZTlkNS4uODUxYTIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9EZWJ1Zy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRGVidWcuaApAQCAtMTYzLDI1ICsxNjMsNiBAQAogI2VuZGlmCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWYgKERFVl9TWVNURU0gPT0gX0RFVl9XSU4zMl8pICYmIGRlZmluZWQgKFRSQUNFX01TRykKLQotICAgIC8vIEZvciBXSU4zMiB0aGUgbWFjcm8gREVCVUdfVFJBQ0UwIGNhbiBiZSBkZWZpbmVkIGFzIGZ1bmN0aW9uIGNhbGwgVHJhY2VMdmwoKQotICAgIC8vIG9yIGFzIG1hY3JvIFRSQUNFKCkuCi0gICAgLy8KLSAgICAvLyBIZXJlIHRoZSBwYXJhbWV0ZXIgJ2x2bCcgY2FuIGJlIHVzZWQgd2l0aCBtb3JlIHRoYW4gb25lCi0gICAgLy8gZGVidWctbGV2ZWwgKHVzaW5nIE9SKS4KLSAgICAvLwotICAgIC8vIEV4YW1wbGU6IERFQlVHX1RSQUNFMShERUJVR19MVkxfMzAgfCBERUJVR19MVkxfMDIsICJIZWxsbyAlZCIsIGJDb3VudCk7Ci0KLSNkZWZpbmUgREVCVUdfVFJBQ0UwKGx2bCxzdHIpICAgICAgICAgICAgICAgVHJhY2VMdmwoKGx2bCksc3RyKQotI2RlZmluZSBERUJVR19UUkFDRTEobHZsLHN0cixwMSkgICAgICAgICAgICBUcmFjZUx2bCgobHZsKSxzdHIscDEpCi0jZGVmaW5lIERFQlVHX1RSQUNFMihsdmwsc3RyLHAxLHAyKSAgICAgICAgIFRyYWNlTHZsKChsdmwpLHN0cixwMSxwMikKLSNkZWZpbmUgREVCVUdfVFJBQ0UzKGx2bCxzdHIscDEscDIscDMpICAgICAgVHJhY2VMdmwoKGx2bCksc3RyLHAxLHAyLHAzKQotI2RlZmluZSBERUJVR19UUkFDRTQobHZsLHN0cixwMSxwMixwMyxwNCkgICBUcmFjZUx2bCgobHZsKSxzdHIscDEscDIscDMscDQpCi0jZGVmaW5lIERFQlVHX0dMQl9MVkwoKSAgICAgICAgICAgICAgICAgICAgIGR3RGVidWdMZXZlbF9nCi0KLSNlbHNlCi0KICAgICAvLyBBdCBtaWNyb2NvbnRyb2xsZXJzIHdlIGRvIHJlZHVjZSB0aGUgbWVtb3J5IHVzYWdlIGJ5IGRlbGV0aW5nIERFQlVHX1RSQUNFLWxpbmVzCiAgICAgLy8gKGNvbXBpbGVyIGRvZXMgZGVsZXRlIHRoZSBsaW5lcykuCiAgICAgLy8KQEAgLTY0MywyNSArNjI0LDIzIEBACiAjZGVmaW5lIERFQlVHX1RSQUNFMyhsdmwsc3RyLHAxLHAyLHAzKSAgICAgICAgICAgICAgICAgIGx2bCMjX1RSQUNFMyhzdHIscDEscDIscDMpCiAjZGVmaW5lIERFQlVHX1RSQUNFNChsdmwsc3RyLHAxLHAyLHAzLHA0KSAgICAgICAgICAgICAgIGx2bCMjX1RSQUNFNChzdHIscDEscDIscDMscDQpCiAKLSNlbmRpZgotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gVGhlIG1hY3JvIERFQlVHX0RVTVBfREFUQSgpIGNhbiBiZSB1c2VkIHdpdGggdGhlIHNhbWUgZGVidWctbGV2ZWxzIHRvIGR1bXAKIC8vIG91dCBkYXRhIGJ5dGVzLiBGdW5jdGlvbiBEdW1wRGF0YSgpIGhhcyB0byBiZSBpbmNsdWRlZC4KIC8vIE5PVEU6IERVTVBfREFUQSBoYXMgdG8gYmUgZGVmaW5lZCBpbiBwcm9qZWN0IHNldHRpbmdzLgotI2lmICghZGVmaW5lZCAoTkRFQlVHKSAmJiBkZWZpbmVkIChEVU1QX0RBVEEpKSB8fCAoREVWX1NZU1RFTSA9PSBfREVWX1dJTjMyXykKKyNpZiAoIWRlZmluZWQgKE5ERUJVRykgJiYgZGVmaW5lZCAoRFVNUF9EQVRBKSkKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0Jdm9pZCBEdW1wRGF0YShjaGFyICpzelN0cl9wLCBCWVRFIE1FTSAqIHBiRGF0YV9wLCBXT1JEIHdTaXplX3ApOworCXZvaWQgRHVtcERhdGEoY2hhciAqc3pTdHJfcCwgdTggKnBiRGF0YV9wLCB1MTYgd1NpemVfcCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQkJCQkvLyB2b24gZXh0ZXJuICJDIgogI2VuZGlmCiAjZGVmaW5lIERFQlVHX0RVTVBfREFUQShsdmwsc3RyLHB0cixzaXopICAgIGlmICgoREVCVUdfR0xCX0xWTCgpICYgKGx2bCkpPT0obHZsKSkgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1bXBEYXRhIChzdHIsIChCWVRFIE1FTSopIChwdHIpLCAoV09SRCkgKHNpeikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1bXBEYXRhIChzdHIsICh1OCAqKShwdHIpLCAodTE2KShzaXopKTsKICNlbHNlCiAKICNkZWZpbmUgREVCVUdfRFVNUF9EQVRBKGx2bCxzdHIscHRyLHNpeikKQEAgLTY3NSwyNCArNjU0LDYgQEAKIC8vICAgICAgIGRlbGV0ZWQgZnJvbSBjb21waWxlciAoaW4gcmVsZWFzZSB2ZXJzaW9uIHRvbykuCiAjaWYgIWRlZmluZWQgKE5ERUJVRykgfHwgZGVmaW5lZCAoREVCVUdfS0VFUF9BU1NFUlQpCiAKLSNpZiAoREVWX1NZU1RFTSA9PSBfREVWX1dJTjMyXykKLQotCS8vIEZvciBXSU4zMiBwcm9jZXNzIHdpbGwgYmUga2lsbGVkIGFmdGVyIGNsb3NpbmcgbWVzc2FnZSBib3guCi0KLSNkZWZpbmUgREVCVUdfQVNTRVJUMChleHByLHN0cikgICAgICAgICBpZiAoIShleHByICkgJiYgKChERUJVR19HTEJfTFZMKCkgJiBERUJVR19MVkxfQVNTRVJUKSE9MCkpIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VCb3ggKE5VTEwsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgIiBfX0xJTkVfXyAiIGZpbGUgIiBfX0ZJTEVfXyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiAgICAtPiAiIHN0ciAiXG4iKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4aXRQcm9jZXNzICgtMSk7IH0KLQotI2RlZmluZSBERUJVR19BU1NFUlQxKGV4cHIsc3RyLHAxKSAgICAgIGlmICghKGV4cHIgKSAmJiAoKERFQlVHX0dMQl9MVkwoKSAmIERFQlVHX0xWTF9BU1NFUlQpIT0wKSkgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUJveCAoTlVMTCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXNzZXJ0aW9uIGZhaWxlZDogbGluZSAiIF9fTElORV9fICIgZmlsZSAiIF9fRklMRV9fIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuICAgIC0+ICIgc3RyICJcbiIpOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhpdFByb2Nlc3MgKC0xKTsgfQotCi0jZWxzZQotCiAJLy8gRm9yIG1pY3JvY29udHJvbGxlcnMgcHJvY2VzcyB3aWxsIGJlIHN0b3BwZWQgdXNpbmcgZW5kbGVzcyBsb29wLgogCiAjZGVmaW5lIERFQlVHX0FTU0VSVDAoZXhwcixzdHIpICAgICAgICAgaWYgKCEoZXhwciApKSB7IFwKQEAgLTcwNSwxMCArNjY2LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR19MVkxfQVNTRVJUX1RSQUNFNCAoIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFzc2VydGlvbiBmYWlsZWQ6IGxpbmUgJWQgZmlsZSAnJXMnXG4iIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAtPiAnJXMnXG4iIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAtPiAweCUwOGxYXG4iLCBfX0xJTkVfXywgX19GSUxFX18sIHN0ciwgKERXT1JEKSBwMSk7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAtPiAweCUwOGxYXG4iLCBfX0xJTkVfXywgX19GSUxFX18sIHN0ciwgKHUzMikgcDEpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpOyB9CiAKLSNlbmRpZgogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VkcnY4MTM5LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VkcnY4MTM5LmMKaW5kZXggMjk2MzU0YS4uNDRlM2Y3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2ODEzOS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRWRydjgxMzkuYwpAQCAtODEsNyArODEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtMjM0LDggKzIzMyw4IEBACiAKIC8vIFRyYWNlUG9pbnQgc3VwcG9ydCBmb3IgcmVhbHRpbWUtZGVidWdnaW5nCiAjaWZkZWYgX0RCR19UUkFDRV9QT0lOVFNfCi12b2lkIFBVQkxJQyBUZ3REYmdTaWduYWxUcmFjZVBvaW50KEJZVEUgYlRyYWNlUG9pbnROdW1iZXJfcCk7Ci12b2lkIFBVQkxJQyBUZ3REYmdQb3N0VHJhY2VWYWx1ZShEV09SRCBkd1RyYWNlVmFsdWVfcCk7Cit2b2lkIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQodTggYlRyYWNlUG9pbnROdW1iZXJfcCk7Cit2b2lkIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHUzMiBkd1RyYWNlVmFsdWVfcCk7CiAjZGVmaW5lIFRHVF9EQkdfU0lHTkFMX1RSQUNFX1BPSU5UKHApICAgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChwKQogI2RlZmluZSBUR1RfREJHX1BPU1RfVFJBQ0VfVkFMVUUodikgICAgIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHYpCiAjZWxzZQpAQCAtMjgyLDkgKzI4MSw5IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJc3RydWN0IHBjaV9kZXYgKm1fcFBjaURldjsJLy8gcG9pbnRlciB0byBQQ0kgZGV2aWNlIHN0cnVjdHVyZQogCXZvaWQgKm1fcElvQWRkcjsJLy8gcG9pbnRlciB0byByZWdpc3RlciBzcGFjZSBvZiBFdGhlcm5ldCBjb250cm9sbGVyCi0JQllURSAqbV9wYlJ4QnVmOwkvLyBwb2ludGVyIHRvIFJ4IGJ1ZmZlcgorCXU4ICptX3BiUnhCdWY7CS8vIHBvaW50ZXIgdG8gUnggYnVmZmVyCiAJZG1hX2FkZHJfdCBtX3BSeEJ1ZkRtYTsKLQlCWVRFICptX3BiVHhCdWY7CS8vIHBvaW50ZXIgdG8gVHggYnVmZmVyCisJdTggKm1fcGJUeEJ1ZjsJLy8gcG9pbnRlciB0byBUeCBidWZmZXIKIAlkbWFfYWRkcl90IG1fcFR4QnVmRG1hOwogCUJPT0wgbV9hZlR4QnVmVXNlZFtFRFJWX01BWF9UWF9CVUZGRVJTXTsKIAl1bnNpZ25lZCBpbnQgbV91aUN1clR4RGVzYzsKQEAgLTM1OSw3ICszNTgsNyBAQAogLy8gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIEJZVEUgRWRydkNhbGNIYXNoKEJZVEUgKiBwYk1BQ19wKTsKK3N0YXRpYyB1OCBFZHJ2Q2FsY0hhc2godTggKiBwYk1BQ19wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC00NTMsMjAgKzQ1MiwyMCBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgRWRydkRlZmluZVJ4TWFjQWRkckVudHJ5KEJZVEUgKiBwYk1hY0FkZHJfcCkKK3RFcGxLZXJuZWwgRWRydkRlZmluZVJ4TWFjQWRkckVudHJ5KHU4ICogcGJNYWNBZGRyX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQlEV09SRCBkd0RhdGE7Ci0JQllURSBiSGFzaDsKKwl1MzIgZHdEYXRhOworCXU4IGJIYXNoOwogCiAJYkhhc2ggPSBFZHJ2Q2FsY0hhc2gocGJNYWNBZGRyX3ApOwogLyoKICAgICBkd0RhdGEgPSBldGhlcl9jcmMoNiwgcGJNYWNBZGRyX3ApOwogCiAgICAgcHJpbnRrKCJFZHJ2RGVmaW5lUnhNYWNBZGRyRW50cnkoJyUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYJykgaGFzaCA9ICV1IC8gJXUgIGV0aGVyX2NyYyA9IDB4JTA4bFhcbiIsCi0gICAgICAgIChXT1JEKSBwYk1hY0FkZHJfcFswXSwgKFdPUkQpIHBiTWFjQWRkcl9wWzFdLCAoV09SRCkgcGJNYWNBZGRyX3BbMl0sCi0gICAgICAgIChXT1JEKSBwYk1hY0FkZHJfcFszXSwgKFdPUkQpIHBiTWFjQWRkcl9wWzRdLCAoV09SRCkgcGJNYWNBZGRyX3BbNV0sCi0gICAgICAgIChXT1JEKSBiSGFzaCwgKFdPUkQpIChkd0RhdGEgPj4gMjYpLCBkd0RhdGEpOworICAgICAgICAodTE2KSBwYk1hY0FkZHJfcFswXSwgKHUxNikgcGJNYWNBZGRyX3BbMV0sICh1MTYpIHBiTWFjQWRkcl9wWzJdLAorICAgICAgICAodTE2KSBwYk1hY0FkZHJfcFszXSwgKHUxNikgcGJNYWNBZGRyX3BbNF0sICh1MTYpIHBiTWFjQWRkcl9wWzVdLAorICAgICAgICAodTE2KSBiSGFzaCwgKHUxNikgKGR3RGF0YSA+PiAyNiksIGR3RGF0YSk7CiAqLwogCWlmIChiSGFzaCA+IDMxKSB7CiAJCWR3RGF0YSA9IEVEUlZfUkVHRFdfUkVBRChFRFJWX1JFR0RXX01BUjQpOwpAQCAtNDk0LDExICs0OTMsMTEgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIEVkcnZVbmRlZmluZVJ4TWFjQWRkckVudHJ5KEJZVEUgKiBwYk1hY0FkZHJfcCkKK3RFcGxLZXJuZWwgRWRydlVuZGVmaW5lUnhNYWNBZGRyRW50cnkodTggKiBwYk1hY0FkZHJfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwotCURXT1JEIGR3RGF0YTsKLQlCWVRFIGJIYXNoOworCXUzMiBkd0RhdGE7CisJdTggYkhhc2g7CiAKIAliSGFzaCA9IEVkcnZDYWxjSGFzaChwYk1hY0FkZHJfcCk7CiAKQEAgLTUzMiw3ICs1MzEsNyBAQAogdEVwbEtlcm5lbCBFZHJ2QWxsb2NUeE1zZ0J1ZmZlcih0RWRydlR4QnVmZmVyICogcEJ1ZmZlcl9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JRFdPUkQgaTsKKwl1MzIgaTsKIAogCWlmIChwQnVmZmVyX3AtPm1fdWlNYXhCdWZmZXJMZW4gPiBFRFJWX01BWF9GUkFNRV9TSVpFKSB7CiAJCVJldCA9IGtFcGxFZHJ2Tm9GcmVlQnVmRW50cnk7CkBAIC02MDUsNyArNjA0LDcgQEAKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXVuc2lnbmVkIGludCB1aUJ1ZmZlck51bWJlcjsKLQlEV09SRCBkd1RlbXA7CisJdTMyIGR3VGVtcDsKIAogCXVpQnVmZmVyTnVtYmVyID0gcEJ1ZmZlcl9wLT5tX3VpQnVmZmVyTnVtYmVyOwogCkBAIC02MjAsMTEgKzYxOSwxMSBAQAogCQlkd1RlbXAgPQogCQkgICAgRURSVl9SRUdEV19SRUFEKChFRFJWX1JFR0RXX1RTRDAgKwogCQkJCSAgICAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKgotCQkJCSAgICAgIHNpemVvZihEV09SRCkpKSk7Ci0JCXByaW50aygiJXMgSW52T3AgVFNEJXUgPSAweCUwOGxYIiwgX19mdW5jX18sCisJCQkJICAgICAgc2l6ZW9mKHUzMikpKSk7CisJCXByaW50aygiJXMgSW52T3AgVFNEJXUgPSAweCUwOFgiLCBfX2Z1bmNfXywKIAkJICAgICAgIEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MsIGR3VGVtcCk7CiAJCXByaW50aygiICBDbWQgPSAweCUwMlhcbiIsCi0JCSAgICAgICAoV09SRCkgRURSVl9SRUdCX1JFQUQoRURSVl9SRUdCX0NPTU1BTkQpKTsKKwkJICAgICAgICh1MTYpIEVEUlZfUkVHQl9SRUFEKEVEUlZfUkVHQl9DT01NQU5EKSk7CiAJCWdvdG8gRXhpdDsKIAl9CiAJLy8gc2F2ZSBwb2ludGVyIHRvIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIFR4SGFuZGxlcgpAQCAtNjQwLDIyICs2MzksMjIgQEAKIAl9CiAJLy8gc2V0IERNQSBhZGRyZXNzIG9mIGJ1ZmZlcgogCUVEUlZfUkVHRFdfV1JJVEUoKEVEUlZfUkVHRFdfVFNBRDAgKwotCQkJICAoRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYyAqIHNpemVvZihEV09SRCkpKSwKKwkJCSAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKiBzaXplb2YodTMyKSkpLAogCQkJIChFZHJ2SW5zdGFuY2VfbC5tX3BUeEJ1ZkRtYSArCiAJCQkgICh1aUJ1ZmZlck51bWJlciAqIEVEUlZfTUFYX0ZSQU1FX1NJWkUpKSk7CiAJZHdUZW1wID0KIAkgICAgRURSVl9SRUdEV19SRUFEKChFRFJWX1JFR0RXX1RTQUQwICsKLQkJCSAgICAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKiBzaXplb2YoRFdPUkQpKSkpOworCQkJICAgICAoRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYyAqIHNpemVvZih1MzIpKSkpOwogLy8gICAgcHJpbnRrKCIlcyBUU0FEJXUgPSAweCUwOGxYIiwgX19mdW5jX18sIEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MsIGR3VGVtcCk7CiAKIAkvLyBzdGFydCB0cmFuc21pc3Npb24KIAlFRFJWX1JFR0RXX1dSSVRFKChFRFJWX1JFR0RXX1RTRDAgKwotCQkJICAoRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYyAqIHNpemVvZihEV09SRCkpKSwKKwkJCSAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKiBzaXplb2YodTMyKSkpLAogCQkJIChFRFJWX1JFR0RXX1RTRF9UWFRIX0RFRiB8IHBCdWZmZXJfcC0+bV91aVR4TXNnTGVuKSk7CiAJZHdUZW1wID0KIAkgICAgRURSVl9SRUdEV19SRUFEKChFRFJWX1JFR0RXX1RTRDAgKwotCQkJICAgICAoRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYyAqIHNpemVvZihEV09SRCkpKSk7Ci0vLyAgICBwcmludGsoIiBUU0QldSA9IDB4JTA4bFggLyAweCUwOGxYXG4iLCBFZHJ2SW5zdGFuY2VfbC5tX3VpQ3VyVHhEZXNjLCBkd1RlbXAsIChEV09SRCkoRURSVl9SRUdEV19UU0RfVFhUSF9ERUYgfCBwQnVmZmVyX3AtPm1fdWlUeE1zZ0xlbikpOworCQkJICAgICAoRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYyAqIHNpemVvZih1MzIpKSkpOworLy8gICAgcHJpbnRrKCIgVFNEJXUgPSAweCUwOGxYIC8gMHglMDhsWFxuIiwgRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYywgZHdUZW1wLCAodTMyKShFRFJWX1JFR0RXX1RTRF9UWFRIX0RFRiB8IHBCdWZmZXJfcC0+bV91aVR4TXNnTGVuKSk7CiAKICAgICAgIEV4aXQ6CiAJcmV0dXJuIFJldDsKQEAgLTcyMCw3ICs3MTksNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHN0YXRpYyB2b2lkIEVkcnZSZWluaXRSeCh2b2lkKQogewotCUJZVEUgYkNtZDsKKwl1OCBiQ21kOwogCiAJLy8gc2ltcGx5IHN3aXRjaCBvZmYgYW5kIG9uIHRoZSByZWNlaXZlcgogCS8vIHRoaXMgd2lsbCByZXNldCB0aGUgQ0FQUiByZWdpc3RlcgpAQCAtNzUxLDIxICs3NTAsMTYgQEAKIH0KICNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwxOSkKIHN0YXRpYyBpbnQgVGd0RXRoSXNyKGludCBuSXJxTnVtX3AsIHZvaWQgKnBwRGV2SW5zdERhdGFfcCkKLSNlbHNlCi1zdGF0aWMgaW50IFRndEV0aElzcihpbnQgbklycU51bV9wLCB2b2lkICpwcERldkluc3REYXRhX3AsCi0JCSAgICAgc3RydWN0IHB0X3JlZ3MgKnB0UmVnc19wKQotI2VuZGlmCiB7CiAvLyAgICBFZHJ2SW50ZXJydXB0SGFuZGxlcigpOwogCXRFZHJ2UnhCdWZmZXIgUnhCdWZmZXI7CiAJdEVkcnZUeEJ1ZmZlciAqcFR4QnVmZmVyOwotCVdPUkQgd1N0YXR1czsKLQlEV09SRCBkd1R4U3RhdHVzOwotCURXT1JEIGR3UnhTdGF0dXM7Ci0JV09SRCB3Q3VyUng7Ci0JQllURSAqcGJSeEJ1ZjsKKwl1MTYgd1N0YXR1czsKKwl1MzIgZHdUeFN0YXR1czsKKwl1MzIgZHdSeFN0YXR1czsKKwl1MTYgd0N1clJ4OworCXU4ICpwYlJ4QnVmOwogCXVuc2lnbmVkIGludCB1aUxlbmd0aDsKIAlpbnQgaUhhbmRsZWQgPSBJUlFfSEFORExFRDsKIApAQCAtNzkzLDcgKzc4Nyw3IEBACiAJCWR3VHhTdGF0dXMgPQogCQkgICAgRURSVl9SRUdEV19SRUFEKChFRFJWX1JFR0RXX1RTRDAgKwogCQkJCSAgICAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKgotCQkJCSAgICAgIHNpemVvZihEV09SRCkpKSk7CisJCQkJICAgICAgc2l6ZW9mKHUzMikpKSk7CiAJCWlmICgoZHdUeFN0YXR1cyAmIChFRFJWX1JFR0RXX1RTRF9UT0sgfCBFRFJWX1JFR0RXX1RTRF9UQUJUIHwgRURSVl9SRUdEV19UU0RfVFVOKSkgIT0gMCkgewkvLyB0cmFuc21pdCBmaW5pc2hlZAogCQkJRWRydkluc3RhbmNlX2wubV91aUN1clR4RGVzYyA9CiAJCQkgICAgKEVkcnZJbnN0YW5jZV9sLm1fdWlDdXJUeERlc2MgKyAxKSAmIDB4MDM7CkBAIC04NTUsOCArODQ5LDggQEAKIAkJCS8vIGNhbGN1bGF0ZSBwb2ludGVyIHRvIGN1cnJlbnQgZnJhbWUgaW4gcmVjZWl2ZSBidWZmZXIKIAkJCXBiUnhCdWYgPSBFZHJ2SW5zdGFuY2VfbC5tX3BiUnhCdWYgKyB3Q3VyUng7CiAKLQkJCS8vIHJlYWQgcmVjZWl2ZSBzdGF0dXMgRFdPUkQKLQkJCWR3UnhTdGF0dXMgPSBsZTMyX3RvX2NwdSgqKChEV09SRCAqKSBwYlJ4QnVmKSk7CisJCQkvLyByZWFkIHJlY2VpdmUgc3RhdHVzIHUzMgorCQkJZHdSeFN0YXR1cyA9IGxlMzJfdG9fY3B1KCooKHUzMiAqKSBwYlJ4QnVmKSk7CiAKIAkJCS8vIGNhbGN1bGF0ZSBsZW5ndGggb2YgcmVjZWl2ZWQgZnJhbWUKIAkJCXVpTGVuZ3RoID0gZHdSeFN0YXR1cyA+PiAxNjsKQEAgLTg5Niw5ICs4OTAsOSBAQAogCQkJCSAgICBtX3BmblJ4SGFuZGxlcigmUnhCdWZmZXIpOwogCQkJfQogCi0JCQkvLyBjYWx1bGF0ZSBuZXcgb2Zmc2V0IChEV09SRCBhbGlnbmVkKQorCQkJLy8gY2FsdWxhdGUgbmV3IG9mZnNldCAodTMyIGFsaWduZWQpCiAJCQl3Q3VyUnggPQotCQkJICAgIChXT1JEKSAoKHdDdXJSeCArIHVpTGVuZ3RoICsgc2l6ZW9mKGR3UnhTdGF0dXMpICsKKwkJCSAgICAodTE2KSAoKHdDdXJSeCArIHVpTGVuZ3RoICsgc2l6ZW9mKGR3UnhTdGF0dXMpICsKIAkJCQkgICAgIDMpICYgfjB4Myk7CiAJCQlFRFJWX1RSQUNFX0NBUFIod0N1clJ4IC0gMHgxMCk7CiAJCQlFRFJWX1JFR1dfV1JJVEUoRURSVl9SRUdXX0NBUFIsIHdDdXJSeCAtIDB4MTApOwpAQCAtOTQxLDcgKzkzNSw3IEBACiBzdGF0aWMgaW50IEVkcnZJbml0T25lKHN0cnVjdCBwY2lfZGV2ICpwUGNpRGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcElkKQogewogCWludCBpUmVzdWx0ID0gMDsKLQlEV09SRCBkd1RlbXA7CisJdTMyIGR3VGVtcDsKIAogCWlmIChFZHJ2SW5zdGFuY2VfbC5tX3BQY2lEZXYgIT0gTlVMTCkgewkvLyBFZHJ2IGlzIGFscmVhZHkgY29ubmVjdGVkIHRvIGEgUENJIGRldmljZQogCQlwcmludGsoIiVzIGRldmljZSAlcyBkaXNjYXJkZWRcbiIsIF9fZnVuY19fLApAQCAtMTAwOCw3ICsxMDAyLDcgQEAKIAlkd1RlbXAgPSBFRFJWX1JFR0RXX1JFQUQoRURSVl9SRUdEV19UQ1IpOwogCWlmICgoKGR3VGVtcCAmIEVEUlZfUkVHRFdfVENSX1ZFUl9NQVNLKSAhPSBFRFJWX1JFR0RXX1RDUl9WRVJfQykKIAkgICAgJiYgKChkd1RlbXAgJiBFRFJWX1JFR0RXX1RDUl9WRVJfTUFTSykgIT0gRURSVl9SRUdEV19UQ1JfVkVSX0QpKSB7CS8vIHVuc3VwcG9ydGVkIGNoaXAKLQkJcHJpbnRrKCIlcyBVbnN1cHBvcnRlZCBjaGlwISBUQ1IgPSAweCUwOGxYXG4iLCBfX2Z1bmNfXywKKwkJcHJpbnRrKCIlcyBVbnN1cHBvcnRlZCBjaGlwISBUQ1IgPSAweCUwOFhcbiIsIF9fZnVuY19fLAogCQkgICAgICAgZHdUZW1wKTsKIAkJaVJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gRXhpdDsKQEAgLTEwNDMsMTEgKzEwMzcsMTEgQEAKICAgICAgICAgICAgIHByaW50aygiJXMgc2V0IGxvY2FsIE1BQyBhZGRyZXNzXG4iLCBfX2Z1bmNfXyk7CiAgICAgICAgICAgICAvLyB3cml0ZSB0aGlzIE1BQyBhZGRyZXNzIHRvIGNvbnRyb2xsZXIKICAgICAgICAgICAgIEVEUlZfUkVHRFdfV1JJVEUoRURSVl9SRUdEV19JRFIwLAotICAgICAgICAgICAgICAgIGxlMzJfdG9fY3B1KCooKERXT1JEKikmRWRydkluc3RhbmNlX2wubV9Jbml0UGFyYW0ubV9hYk15TWFjQWRkclswXSkpKTsKKyAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdSgqKCh1MzIqKSZFZHJ2SW5zdGFuY2VfbC5tX0luaXRQYXJhbS5tX2FiTXlNYWNBZGRyWzBdKSkpOwogICAgICAgICAgICAgZHdUZW1wID0gRURSVl9SRUdEV19SRUFEKEVEUlZfUkVHRFdfSURSMCk7CiAKICAgICAgICAgICAgIEVEUlZfUkVHRFdfV1JJVEUoRURSVl9SRUdEV19JRFI0LAotICAgICAgICAgICAgICAgIGxlMzJfdG9fY3B1KCooKERXT1JEKikmRWRydkluc3RhbmNlX2wubV9Jbml0UGFyYW0ubV9hYk15TWFjQWRkcls0XSkpKTsKKyAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdSgqKCh1MzIqKSZFZHJ2SW5zdGFuY2VfbC5tX0luaXRQYXJhbS5tX2FiTXlNYWNBZGRyWzRdKSkpOwogICAgICAgICAgICAgZHdUZW1wID0gRURSVl9SRUdEV19SRUFEKEVEUlZfUkVHRFdfSURSNCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTA4Nyw3ICsxMDgxLDcgQEAKIAlkd1RlbXAgPSBFRFJWX1JFR0RXX1JFQUQoRURSVl9SRUdEV19UU0FEMyk7CiAKIAlwcmludGsoIiAgICBDb21tYW5kID0gMHglMDJYXG4iLAotCSAgICAgICAoV09SRCkgRURSVl9SRUdCX1JFQUQoRURSVl9SRUdCX0NPTU1BTkQpKTsKKwkgICAgICAgKHUxNikgRURSVl9SRUdCX1JFQUQoRURSVl9SRUdCX0NPTU1BTkQpKTsKIAogCS8vIHNldCBwb2ludGVyIGZvciByZWNlaXZlIGJ1ZmZlciBpbiBjb250cm9sbGVyCiAJcHJpbnRrKCIlcyBzZXQgcG9pbnRlciB0byBSeCBidWZmZXJcbiIsIF9fZnVuY19fKTsKQEAgLTEwOTgsNyArMTA5Miw3IEBACiAJRURSVl9SRUdCX1dSSVRFKEVEUlZfUkVHQl9DT01NQU5ELAogCQkJKEVEUlZfUkVHQl9DT01NQU5EX1JFIHwgRURSVl9SRUdCX0NPTU1BTkRfVEUpKTsKIAlwcmludGsoIiAgQ29tbWFuZCA9IDB4JTAyWFxuIiwKLQkgICAgICAgKFdPUkQpIEVEUlZfUkVHQl9SRUFEKEVEUlZfUkVHQl9DT01NQU5EKSk7CisJICAgICAgICh1MTYpIEVEUlZfUkVHQl9SRUFEKEVEUlZfUkVHQl9DT01NQU5EKSk7CiAKIAkvLyBjbGVhciBtaXNzZWQgcGFja2V0IGNvdW50ZXIgdG8gZW5hYmxlIFJ4L1R4IHByb2Nlc3MKIAlFRFJWX1JFR0RXX1dSSVRFKEVEUlZfUkVHRFdfTVBDLCAwKTsKQEAgLTExMjMsNyArMTExNyw3IEBACiAgICAgLy8gZW5hYmxlIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlcgogICAgIHByaW50aygiJXMgZW5hYmxlIFR4IGFuZCBSeCIsIF9fZnVuY19fKTsKICAgICBFRFJWX1JFR0JfV1JJVEUoRURSVl9SRUdCX0NPTU1BTkQsIChFRFJWX1JFR0JfQ09NTUFORF9SRSB8IEVEUlZfUkVHQl9DT01NQU5EX1RFKSk7Ci0gICAgcHJpbnRrKCIgIENvbW1hbmQgPSAweCUwMlhcbiIsIChXT1JEKSBFRFJWX1JFR0JfUkVBRChFRFJWX1JFR0JfQ09NTUFORCkpOworICAgIHByaW50aygiICBDb21tYW5kID0gMHglMDJYXG4iLCAodTE2KSBFRFJWX1JFR0JfUkVBRChFRFJWX1JFR0JfQ09NTUFORCkpOwogKi8KIAkvLyBkaXNhYmxlIGVhcmx5IGludGVycnVwdHMKIAlFRFJWX1JFR1dfV1JJVEUoRURSVl9SRUdXX01VTElOVCwgMCk7CkBAIC0xMjE1LDE1ICsxMjA5LDE1IEBACiAvLyNkZWZpbmUgQ1JDMzJfUE9MWSAgICAweEVEQjg4MzIwICAvLwogLy8gRyh4KSA9IHgzMiArIHgyNiArIHgyMyArIHgyMiArIHgxNiArIHgxMiArIHgxMSArIHgxMCArIHg4ICsgeDcgKyB4NSArIHg0ICsgeDIgKyB4ICsgMQogCi1zdGF0aWMgQllURSBFZHJ2Q2FsY0hhc2goQllURSAqIHBiTUFDX3ApCitzdGF0aWMgdTggRWRydkNhbGNIYXNoKHU4ICogcGJNQUNfcCkKIHsKLQlEV09SRCBkd0J5dGVDb3VudGVyOwotCURXT1JEIGR3Qml0Q291bnRlcjsKLQlEV09SRCBkd0RhdGE7Ci0JRFdPUkQgZHdDcmM7Ci0JRFdPUkQgZHdDYXJyeTsKLQlCWVRFICpwYkRhdGE7Ci0JQllURSBiSGFzaDsKKwl1MzIgZHdCeXRlQ291bnRlcjsKKwl1MzIgZHdCaXRDb3VudGVyOworCXUzMiBkd0RhdGE7CisJdTMyIGR3Q3JjOworCXUzMiBkd0NhcnJ5OworCXU4ICpwYkRhdGE7CisJdTggYkhhc2g7CiAKIAlwYkRhdGEgPSBwYk1BQ19wOwogCkBAIC0xMjQ2LDcgKzEyNDAsNyBAQAogLy8gICAgcHJpbnRrKCJNeUNSQyA9IDB4JTA4bFhcbiIsIGR3Q3JjKTsKIAkvLyBvbmx5IHVwcGVyIDYgYml0cyAoSEFTSF9CSVRTKSBhcmUgdXNlZAogCS8vIHdoaWNoIHBvaW50IHRvIHNwZWNpZmljIGJpdCBpbiB0aGUgaGFzaCByZWdpc3RlcnMKLQliSGFzaCA9IChCWVRFKSAoKGR3Q3JjID4+ICgzMiAtIEhBU0hfQklUUykpICYgMHgzZik7CisJYkhhc2ggPSAodTgpICgoZHdDcmMgPj4gKDMyIC0gSEFTSF9CSVRTKSkgJiAweDNmKTsKIAogCXJldHVybiBiSGFzaDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRWRydkZlYy5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2RmVjLmgKaW5kZXggNWYyNTJmYi4uNTY3MjhkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2RmVjLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2RmVjLmgKQEAgLTk2LDkgKzk2LDkgQEAKIAogLy8gUnggYW5kIFR4IGJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdAogdHlwZWRlZiBzdHJ1Y3QgewotCVdPUkQgbV93U3RhdHVzOwkJLy8gY29udHJvbCAvIHN0YXR1cyAgLS0tICB1c2VkIGJ5IGVkcnYsIGRvIG5vdCBjaGFuZ2UgaW4gYXBwbGljYXRpb24KLQlXT1JEIG1fd0xlbmd0aDsJCS8vIHRyYW5zZmVyIGxlbmd0aAotCUJZVEUgKm1fcGJEYXRhOwkJLy8gYnVmZmVyIGFkZHJlc3MKKwl1MTYgbV93U3RhdHVzOwkJLy8gY29udHJvbCAvIHN0YXR1cyAgLS0tICB1c2VkIGJ5IGVkcnYsIGRvIG5vdCBjaGFuZ2UgaW4gYXBwbGljYXRpb24KKwl1MTYgbV93TGVuZ3RoOwkJLy8gdHJhbnNmZXIgbGVuZ3RoCisJdTggKm1fcGJEYXRhOwkJLy8gYnVmZmVyIGFkZHJlc3MKIH0gdEJ1ZmZlckRlc2NyOwogCiAjaWYgKChUQVJHRVRfSEFSRFdBUkUgJiBUR1RfQ1BVX01BU0tfKSA9PSBUR1RfQ1BVXzUyODIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VkcnZGZWM1MjgyLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VkcnZGZWM1MjgyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExNmJiMWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2RmVjNTI4Mi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgKGMpIFNZU1RFQyBlbGVjdHJvbmljIEdtYkgsIEQtMDc5NzMgR3JlaXosIEF1Z3VzdC1CZWJlbC1TdHIuIDI5Ci0gICAgICB3d3cuc3lzdGVjLWVsZWN0cm9uaWMuY29tCi0KLSAgUHJvamVjdDogICAgICBvcGVuUE9XRVJMSU5LCi0KLSAgRGVzY3JpcHRpb246ICBpbnRlcmZhY2UgZm9yIGV0aGVybmV0ZHJpdmVyCi0gICAgICAgICAgICAgICAgImZhc3QgZXRoZXJuZXQgY29udHJvbGxlciIgKEZFQykKLSAgICAgICAgICAgICAgICBmcmVlc2NhbGUgY29sZGZpcmUgTUNGNTI4eCBhbmQgY29tcGF0aWJsZSBGRUMKLQotICBMaWNlbnNlOgotCi0gICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gICAgYXJlIG1ldDoKLQotICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0gICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgU1lTVEVDIGVsZWN0cm9uaWMgR21iSCBub3IgdGhlIG5hbWVzIG9mIGl0cwotICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSAgICAgICBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBpbmZvQHN5c3RlYy1lbGVjdHJvbmljLmNvbS4KLQotICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAgICBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAgICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICAgIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gICAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gICAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KLSAgICBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotICAgIFNldmVyYWJpbGl0eSBDbGF1c2U6Ci0KLSAgICAgICAgSWYgYSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIG9yIGJlY29tZXMgaWxsZWdhbCwgaW52YWxpZCBvcgotICAgICAgICB1bmVuZm9yY2VhYmxlIGluIGFueSBqdXJpc2RpY3Rpb24sIHRoYXQgc2hhbGwgbm90IGFmZmVjdDoKLSAgICAgICAgMS4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIHRoYXQganVyaXNkaWN0aW9uIG9mIGFueSBvdGhlcgotICAgICAgICAgICBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlOyBvcgotICAgICAgICAyLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gb3RoZXIganVyaXNkaWN0aW9ucyBvZiB0aGF0IG9yCi0gICAgICAgICAgIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLgotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgICAgICAgICAgICAgICRSQ1NmaWxlOiBFZHJ2RmVjNTI4Mi5oLHYgJAotCi0gICAgICAgICAgICAgICAgJEF1dGhvcjogRC5LcnVlZ2VyICQKLQotICAgICAgICAgICAgICAgICRSZXZpc2lvbjogMS4zICQgICREYXRlOiAyMDA4LzA0LzE3IDIxOjM2OjMyICQKLQotICAgICAgICAgICAgICAgICRTdGF0ZTogRXhwICQKLQotICAgICAgICAgICAgICAgIEJ1aWxkIEVudmlyb25tZW50OgotICAgICAgICAgICAgICAgIERldiBDKysgYW5kIEdOVS1Db21waWxlciBmb3IgbTY4awotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBSZXZpc2lvbiBIaXN0b3J5OgotCi0gIDIwMDUvMDgvMDEgbS5iLjogICBzdGFydCBvZiBpbXBsZW1lbnRhdGlvbgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9FRFJWRkVDX0hfCi0jZGVmaW5lIF9FRFJWRkVDX0hfCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gYmFzZSBhZGRyZXNzZXMKLSNkZWZpbmUgRkVDMF9BRERSIDB4MDAwMAotI2RlZmluZSBGRUMxX0FERFIgMHgwMDAwCS8vdGJkCi0KLS8vIGNvbnRyb2wgLyBzdGF0dXMgcmVnaXN0ZXJzCi0jZGVmaW5lIEZFQ19FSVIgICAgICAgICAgICAgICAgIDB4MTAwNAkvLyBpbnRlcnJ1cHQgZXZlbnQgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX0VJTVIgICAgICAgICAgICAgICAgMHgxMDA4CS8vIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19SREFSICAgICAgICAgICAgICAgIDB4MTAxMAkvLyByZWNlaXZlIGRlc2NyaXB0b3IgYWN0aXZlIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19UREFSICAgICAgICAgICAgICAgIDB4MTAxNAkvLyB0cmFuc21pdCBkZXNjcmlwdG9yIGFjdGl2ZSByZWdpc3RlcgotI2RlZmluZSBGRUNfRUNSICAgICAgICAgICAgICAgICAweDEwMjQJLy8gZXRoZXJuZXQgY29udHJvbCByZWdpc3RlcgotI2RlZmluZSBGRUNfTU1GUiAgICAgICAgICAgICAgICAweDEwNDAJLy8gTUlJIGRhdGEgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX01TQ1IgICAgICAgICAgICAgICAgMHgxMDQ0CS8vIE1JSSBzcGVlZCByZWdpc3RlcgotI2RlZmluZSBGRUNfTUlCQyAgICAgICAgICAgICAgICAweDEwNjQJLy8gTUlCIGNvbnRyb2wvc3RhdHVzIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19SQ1IgICAgICAgICAgICAgICAgIDB4MTA4NAkvLyByZWNlaXZlIGNvbnRyb2wgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX1RDUiAgICAgICAgICAgICAgICAgMHgxMEM0CS8vIHRyYW5zbWl0IGNvbnRyb2wgcmVnaXN0ZXIKLSNkZWZpbmUgRkVDX1BBTFIgICAgICAgICAgICAgICAgMHgxMEU0CS8vIHBoeXNpY2FsIGFkZHJlc3MgbG93IHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19QQVVSICAgICAgICAgICAgICAgIDB4MTBFOAkvLyBwaHlzaWNhbCBhZGRyZXNzIGhpZ2ggKyB0eXBlIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19PUEQgICAgICAgICAgICAgICAgIDB4MTBFQwkvLyBvcGNvZGUgKyBwYXVzZSByZWdpc3RlcgotI2RlZmluZSBGRUNfSUFVUiAgICAgICAgICAgICAgICAweDExMTgJLy8gdXBwZXIgMzIgYml0IG9mIGluZGl2aWR1YWwgaGFzaCB0YWJsZQotI2RlZmluZSBGRUNfSUFMUiAgICAgICAgICAgICAgICAweDExMUMJLy8gbG93ZXIgMzIgYml0IG9mIGluZGl2aWR1YWwgaGFzaCB0YWJsZQotI2RlZmluZSBGRUNfR0FVUiAgICAgICAgICAgICAgICAweDExMjAJLy8gdXBwZXIgMzIgYml0IG9mIGdyb3VwIGhhc2ggdGFibGUKLSNkZWZpbmUgRkVDX0dBTFIgICAgICAgICAgICAgICAgMHgxMTI0CS8vIGxvd2VyIDMyIGJpdCBvZiBncm91cCBoYXNoIHRhYmxlCi0jZGVmaW5lIEZFQ19URldSICAgICAgICAgICAgICAgIDB4MTE0NAkvLyB0cmFuc21pdCBGSUZPIHdhdGVybWFyawotI2RlZmluZSBGRUNfRlJCUiAgICAgICAgICAgICAgICAweDExNEMJLy8gRklGTyByZWNlaXZlIGJvdW5kIHJlZ2lzdGVyCi0jZGVmaW5lIEZFQ19GUlNSICAgICAgICAgICAgICAgIDB4MTE1MAkvLyBGSUZPIHJlY2VpdmUgRklGTyBzdGFydCByZWdpc3RlcgotI2RlZmluZSBGRUNfRVJEU1IgICAgICAgICAgICAgICAweDExODAJLy8gcG9pbnRlciB0byByZWNlaXZlIGRlc2NyaXB0b3IgcmluZwotI2RlZmluZSBGRUNfRVREU1IgICAgICAgICAgICAgICAweDExODQJLy8gcG9pbnRlciB0byB0cmFuc21pdCBkZXNjcmlwdG9yIHJpbmcKLSNkZWZpbmUgRkVDX0VNUkJSICAgICAgICAgICAgICAgMHgxMTg4CS8vIG1heGltdW0gcmVjZWl2ZSBidWZmZXIgc2l6ZQotCi0vLyBtaWIgYmxvY2sgY291bnRlcnMgbWVtb3J5IG1hcAotI2RlZmluZSBGRUNfUk1PTl9UX0RST1AgICAgICAgICAweDEyMDAJLy8gY291bnQgb2YgZnJhbWVzIG5vdCBjb3VudGVkIGNvcnJlY3RseQotI2RlZmluZSBGRUNfUk1PTl9UX1BBQ0tFVFMgICAgICAweDEyMDQJLy8gUk1PTiB0eCBwYWNrZXQgY291bnQKLSNkZWZpbmUgRkVDX1JNT05fVF9CQ19QS1QgICAgICAgMHgxMjA4CS8vIFJNT04gdHggYnJvYWRjYXN0IHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fVF9NQ19QS1QgICAgICAgMHgxMjBDCS8vIFJNT04gdHggbXVsdGljYXN0IHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fVF9DUkNfQUxJR04gICAgMHgxMjEwCS8vIFJNT04gdHggcGFja2V0cyB3IENSQy9hbGlnbiBlcnJvcgotI2RlZmluZSBGRUNfUk1PTl9UX1VOREVSU0laRSAgICAweDEyMTQJLy8gUk1PTiB0eCBwYWNrZXRzIDwgNjQgYnl0ZXMsIGdvb2QgQ1JDCi0jZGVmaW5lIEZFQ19STU9OX1RfT1ZFUlNJWkUgICAgIDB4MTIxOAkvLyBSTU9OIHR4IHBhY2tldHMgPiBNQVhfRkwgYnl0ZXMsIGdvb2QgQ1JDCi0jZGVmaW5lIEZFQ19STU9OX1RfRlJBRyAgICAgICAgIDB4MTIxQwkvLyBSTU9OIHR4IHBhY2tldHMgPCA2NCBieXRlcywgYmFkIENSQwotI2RlZmluZSBGRUNfUk1PTl9UX0pBQiAgICAgICAgICAweDEyMjAJLy8gUk1PTiB0eCBwYWNrZXRzID4gTUFYX0ZMIGJ5dGVzLCBiYWQgQ1JDCi0jZGVmaW5lIEZFQ19STU9OX1RfQ09MICAgICAgICAgIDB4MTIyNAkvLyBSTU9OIHR4IGNvbGxpc2lvbiBjb3VudAotI2RlZmluZSBGRUNfUk1PTl9UX1A2NCAgICAgICAgICAweDEyMjgJLy8gUk1PTiB0eCAgICAgICAgICAgNjQgYnl0ZSBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1RfUDY1VE8xMjcgICAgIDB4MTIyQwkvLyBSTU9OIHR4ICAgNjUgdG8gIDEyNyBieXRlIHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fVF9QMTI4VE8yNTUgICAgMHgxMjMwCS8vIFJNT04gdHggIDEyOCB0byAgMjU1IGJ5dGUgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9UX1AyNTZUTzUxMSAgICAweDEyMzQJLy8gUk1PTiB0eCAgMjU2IHRvICA1MTEgYnl0ZSBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1RfUDUxMlRPMTAyMyAgIDB4MTIzOAkvLyBSTU9OIHR4ICA1MTIgdG8gMTAyMyBieXRlIHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fVF9QMTAyNFRPMjA0NyAgMHgxMjNDCS8vIFJNT04gdHggMTAyNCB0byAyMDQ3IGJ5dGUgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9UX1BfR1RFMjA0OCAgICAweDEyNDAJLy8gUk1PTiB0eCB3ID4gMjA0OCBieXRlcwotI2RlZmluZSBGRUNfUk1PTl9UX09DVEVUUyAgICAgICAweDEyNDQJLy8gUk1PTiB0eCBvY3RldHMKLSNkZWZpbmUgRkVDX0lFRUVfVF9EUk9QICAgICAgICAgMHgxMjQ4CS8vIGNvdW50IG9mIGZyYW1lcyBub3QgY291bnRlZCBjb3JyZWN0bHkKLSNkZWZpbmUgRkVDX0lFRUVfVF9GUkFNRV9PSyAgICAgMHgxMjRDCS8vIGZyYW1lcyB0cmFuc21pdHRlZCBPSwotI2RlZmluZSBGRUNfSUVFRV9UXzFDT0wgICAgICAgICAweDEyNTAJLy8gZnJhbWVzIHRyYW5zbWl0dGVkIHdpdGggc2luZ2xlIGNvbGxpc2lvbgotI2RlZmluZSBGRUNfSUVFRV9UX01DT0wgICAgICAgICAweDEyNTQJLy8gZnJhbWVzIHRyYW5zbWl0dGVkIHdpdGggbXVsdGlwbGUgY29sbGlzaW9ucwotI2RlZmluZSBGRUNfSUVFRV9UX0RFRiAgICAgICAgICAweDEyNTgJLy8gZnJhbWVzIHRyYW5zbWl0dGVkIGFmdGVyIGRlZmVycmFsIGRlbGF5Ci0jZGVmaW5lIEZFQ19JRUVFX1RfTENPTCAgICAgICAgIDB4MTI1QwkvLyBmcmFtZXMgdHJhbnNtaXR0ZWQgd2l0aCBsYXRlIGNvbGxpc2lvbnMKLSNkZWZpbmUgRkVDX0lFRUVfVF9FWENPTCAgICAgICAgMHgxMjYwCS8vIGZyYW1lcyB0cmFuc21pdHRlZCB3aXRoIGV4Y2Vzc2l2ZSBjb2xsaXNpb25zCi0jZGVmaW5lIEZFQ19JRUVFX1RfTUFDRVJSICAgICAgIDB4MTI2NAkvLyBmcmFtZXMgdHJhbnNtaXR0ZWQgd2l0aCB0eC1GSUZPIHVuZGVycnVuCi0jZGVmaW5lIEZFQ19JRUVFX1RfQ1NFUlIgICAgICAgIDB4MTI2OAkvLyBmcmFtZXMgdHJhbnNtaXR0ZWQgd2l0aCBjYXJyaWVyIHNlbnNlIGVycm9yCi0jZGVmaW5lIEZFQ19JRUVFX1RfU1FFICAgICAgICAgIDB4MTI2QwkvLyBmcmFtZXMgdHJhbnNtaXR0ZWQgd2l0aCBTUUUgZXJyb3IKLSNkZWZpbmUgRkVDX0lFRUVfVF9GRFhGQyAgICAgICAgMHgxMjcwCS8vIGZsb3cgY29udHJvbCBwYXVzZSBmcmFtZXMgdHJhbnNtaXR0ZWQKLSNkZWZpbmUgRkVDX0lFRUVfVF9PQ1RFVFNfT0sgICAgMHgxMjc0CS8vIG9jdGV0IGNvdW50IGZvciBmcmFtZXMgdHJhbnNtaXR0ZWQgdy9vIGVycm9yCi0jZGVmaW5lIEZFQ19STU9OX1JfUEFDS0VUUyAgICAgIDB4MTI4NAkvLyBSTU9OIHJ4IHBhY2tldCBjb3VudAotI2RlZmluZSBGRUNfUk1PTl9SX0JDX1BLVCAgICAgICAweDEyODgJLy8gUk1PTiByeCBicm9hZGNhc3QgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9SX01DX1BLVCAgICAgICAweDEyOEMJLy8gUk1PTiByeCBtdWx0aWNhc3QgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9SX0NSQ19BTElHTiAgICAweDEyOTAJLy8gUk1PTiByeCBwYWNrZXRzIHcgQ1JDL2FsaWduIGVycm9yCi0jZGVmaW5lIEZFQ19STU9OX1JfVU5ERVJTSVpFICAgIDB4MTI5NAkvLyBSTU9OIHJ4IHBhY2tldHMgPCA2NCBieXRlcywgZ29vZCBDUkMKLSNkZWZpbmUgRkVDX1JNT05fUl9PVkVSU0laRSAgICAgMHgxMjk4CS8vIFJNT04gcnggcGFja2V0cyA+IE1BWF9GTCBieXRlcywgZ29vZCBDUkMKLSNkZWZpbmUgRkVDX1JNT05fUl9GUkFHICAgICAgICAgMHgxMjlDCS8vIFJNT04gcnggcGFja2V0cyA8IDY0IGJ5dGVzLCBiYWQgQ1JDCi0jZGVmaW5lIEZFQ19STU9OX1JfSkFCICAgICAgICAgIDB4MTJBMAkvLyBSTU9OIHJ4IHBhY2tldHMgPiBNQVhfRkwgYnl0ZXMsIGJhZCBDUkMKLSNkZWZpbmUgRkVDX1JNT05fUl9SRVNWRF8wICAgICAgMHgxMkE0CS8vCi0jZGVmaW5lIEZFQ19STU9OX1JfUDY0ICAgICAgICAgIDB4MTJBOAkvLyBSTU9OIHJ4ICAgICAgICAgICA2NCBieXRlIHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fUl9QNjVUMDEyNyAgICAgMHgxMkFDCS8vIFJNT04gcnggICA2NSB0byAgMTI3IGJ5dGUgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9SX1AxMjhUTzI1NSAgICAweDEyQjAJLy8gUk1PTiByeCAgMTI4IHRvICAyNTUgYnl0ZSBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1JfUDI1NlRPNTExICAgIDB4MTJCNAkvLyBSTU9OIHJ4ICAyNTYgdG8gIDUxMSBieXRlIHBhY2tldHMKLSNkZWZpbmUgRkVDX1JNT05fUl9QNTEyVE8xMDIzICAgMHgxMkI4CS8vIFJNT04gcnggIDUxMiB0byAxMDIzIGJ5dGUgcGFja2V0cwotI2RlZmluZSBGRUNfUk1PTl9SX1AxMDI0VE8yMDQ3ICAweDEyQkMJLy8gUk1PTiByeCAxMDI0IHRvIDIwNDcgYnl0ZSBwYWNrZXRzCi0jZGVmaW5lIEZFQ19STU9OX1JfR1RFMjA0OCAgICAgIDB4MTJDMAkvLyBSTU9OIHJ4IHcgPiAyMDQ4IGJ5dGVzCi0jZGVmaW5lIEZFQ19STU9OX1JfT0NURVRTICAgICAgIDB4MTJDNAkvLyBSTU9OIHJ4IG9jdGV0cwotI2RlZmluZSBGRUNfSUVFRV9SX0RST1AgICAgICAgICAweDEyQzgJLy8gY291bnQgb2YgZnJhbWVzIG5vdCBjb3VudGVkIGNvcnJlY3RseQotI2RlZmluZSBGRUNfSUVFRV9SX0ZSQU1FX09LICAgICAweDEyQ0MJLy8gZnJhbWVzIHJlY2VpdmVkIE9LCi0jZGVmaW5lIEZFQ19JRUVFX1JfQ1JDICAgICAgICAgIDB4MTJEMAkvLyBmcmFtZXMgcmVjZWl2ZWQgd2l0aCBDUkMgZXJyb3IKLSNkZWZpbmUgRkVDX0lFRUVfUl9BTElHTiAgICAgICAgMHgxMkQ0CS8vIGZyYW1lcyByZWNlaXZlZCB3aXRoIGFsaWdubWVudCBlcnJvcgotI2RlZmluZSBGRUNfSUVFRV9SX01BQ0VSUiAgICAgICAweDEyRDgJLy8gcmVjZWl2ZSBGSUZPIG92ZXJmbG93IGNvdW50Ci0jZGVmaW5lIEZFQ19JRUVFX1JfRkRYRkMgICAgICAgIDB4MTJEQwkvLyBmbG93IGNvbnRyb2wgcGF1c2UgZnJhbWVzIHJlY2VpdmVkCi0jZGVmaW5lIEZFQ19JRUVFX1JfT0NURVRTX09LICAgIDB4MTJFMAkvLyBvY3RldCBjb3VudCBmb3IgZnJhbWVzIHJjdmQgdy9vIGVycm9yCi0KLS8vIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyBhbmQgbWFjcm9zCi0jZGVmaW5lIEZFQ19FSVJfVU4gICAgICAgICAgICAgICgweDAwMDgwMDAwKQotI2RlZmluZSBGRUNfRUlSX1JMICAgICAgICAgICAgICAoMHgwMDEwMDAwMCkKLSNkZWZpbmUgRkVDX0VJUl9MQyAgICAgICAgICAgICAgKDB4MDAyMDAwMDApCi0jZGVmaW5lIEZFQ19FSVJfRUJFUlIgICAgICAgICAgICgweDAwNDAwMDAwKQotI2RlZmluZSBGRUNfRUlSX01JSSAgICAgICAgICAgICAoMHgwMDgwMDAwMCkKLSNkZWZpbmUgRkVDX0VJUl9SWEIgICAgICAgICAgICAgKDB4MDEwMDAwMDApCi0jZGVmaW5lIEZFQ19FSVJfUlhGICAgICAgICAgICAgICgweDAyMDAwMDAwKQotI2RlZmluZSBGRUNfRUlSX1RYQiAgICAgICAgICAgICAoMHgwNDAwMDAwMCkKLSNkZWZpbmUgRkVDX0VJUl9UWEYgICAgICAgICAgICAgKDB4MDgwMDAwMDApCi0jZGVmaW5lIEZFQ19FSVJfR1JBICAgICAgICAgICAgICgweDEwMDAwMDAwKQotI2RlZmluZSBGRUNfRUlSX0JBQlQgICAgICAgICAgICAoMHgyMDAwMDAwMCkKLSNkZWZpbmUgRkVDX0VJUl9CQUJSICAgICAgICAgICAgKDB4NDAwMDAwMDApCi0jZGVmaW5lIEZFQ19FSVJfSEJFUlIgICAgICAgICAgICgweDgwMDAwMDAwKQotCi0jZGVmaW5lIEZFQ19FSU1SX1VOICAgICAgICAgICAgICgweDAwMDgwMDAwKQotI2RlZmluZSBGRUNfRUlNUl9STCAgICAgICAgICAgICAoMHgwMDEwMDAwMCkKLSNkZWZpbmUgRkVDX0VJTVJfTEMgICAgICAgICAgICAgKDB4MDAyMDAwMDApCi0jZGVmaW5lIEZFQ19FSU1SX0VCRVJSICAgICAgICAgICgweDAwNDAwMDAwKQotI2RlZmluZSBGRUNfRUlNUl9NSUkgICAgICAgICAgICAoMHgwMDgwMDAwMCkKLSNkZWZpbmUgRkVDX0VJTVJfUlhCICAgICAgICAgICAgKDB4MDEwMDAwMDApCi0jZGVmaW5lIEZFQ19FSU1SX1JYRiAgICAgICAgICAgICgweDAyMDAwMDAwKQotI2RlZmluZSBGRUNfRUlNUl9UWEIgICAgICAgICAgICAoMHgwNDAwMDAwMCkKLSNkZWZpbmUgRkVDX0VJTVJfVFhGICAgICAgICAgICAgKDB4MDgwMDAwMDApCi0jZGVmaW5lIEZFQ19FSU1SX0dSQSAgICAgICAgICAgICgweDEwMDAwMDAwKQotI2RlZmluZSBGRUNfRUlNUl9CQUJUICAgICAgICAgICAoMHgyMDAwMDAwMCkKLSNkZWZpbmUgRkVDX0VJTVJfQkFCUiAgICAgICAgICAgKDB4NDAwMDAwMDApCi0jZGVmaW5lIEZFQ19FSU1SX0hCRVJSICAgICAgICAgICgweDgwMDAwMDAwKQotCi0jZGVmaW5lIEZFQ19SREFSX1JfREVTX0FDVElWRSAgICgweDAxMDAwMDAwKQotCi0jZGVmaW5lIEZFQ19UREFSX1hfREVTX0FDVElWRSAgICgweDAxMDAwMDAwKQotCi0jZGVmaW5lIEZFQ19FQ1JfUkVTRVQgICAgICAgICAgICgweDAwMDAwMDAxKQotI2RlZmluZSBGRUNfRUNSX0VUSEVSX0VOICAgICAgICAoMHgwMDAwMDAwMikKLQotI2RlZmluZSBGRUNfTU1GUl9EQVRBKHgpICAgICAgICAoKCh4KSAmIDB4RkZGRikpCi0jZGVmaW5lIEZFQ19NTUZSX1RBICAgICAgICAgICAgICgweDAwMDIwMDAwKQotI2RlZmluZSBGRUNfTU1GUl9SQSh4KSAgICAgICAgICAoKCh4KSAmIDB4MUYpIDw8IDE4KQotI2RlZmluZSBGRUNfTU1GUl9QQSh4KSAgICAgICAgICAoKCh4KSAmIDB4MUYpIDw8IDIzKQotI2RlZmluZSBGRUNfTU1GUl9PUF9XUiAgICAgICAgICAoMHgxMDAwMDAwMCkKLSNkZWZpbmUgRkVDX01NRlJfT1BfUkQgICAgICAgICAgKDB4MjAwMDAwMDApCi0jZGVmaW5lIEZFQ19NTUZSX1NUICAgICAgICAgICAgICgweDQwMDAwMDAwKQotCi0jZGVmaW5lIEZFQ19NU0NSX01JSV9TUEVFRCh4KSAgICgoKHgpICYgMHgxRikgPDwgMSkKLSNkZWZpbmUgRkVDX01TQ1JfRElTX1BSRUFNQkxFICAgKDB4MDAwMDAwMDgpCi0KLSNkZWZpbmUgRkVDX01JQkNfTUlCX0lETEUgICAgICAgKDB4NDAwMDAwMDApCi0jZGVmaW5lIEZFQ19NSUJDX01JQl9ESVNBQkxFICAgICgweDgwMDAwMDAwKQotCi0jZGVmaW5lIEZFQ19SQ1JfTE9PUCAgICAgICAgICAgICgweDAwMDAwMDAxKQotI2RlZmluZSBGRUNfUkNSX0RSVCAgICAgICAgICAgICAoMHgwMDAwMDAwMikKLSNkZWZpbmUgRkVDX1JDUl9NSUlfTU9ERSAgICAgICAgKDB4MDAwMDAwMDQpCi0jZGVmaW5lIEZFQ19SQ1JfUFJPTSAgICAgICAgICAgICgweDAwMDAwMDA4KQotI2RlZmluZSBGRUNfUkNSX0JDX1JFSiAgICAgICAgICAoMHgwMDAwMDAxMCkKLSNkZWZpbmUgRkVDX1JDUl9GQ0UgICAgICAgICAgICAgKDB4MDAwMDAwMjApCi0jZGVmaW5lIEZFQ19SQ1JfTUFYX0ZMKHgpICAgICAgICgoKHgpICYgMHgwN0ZGKSA8PCAxNikKLQotI2RlZmluZSBGRUNfVENSX0dUUyAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKLSNkZWZpbmUgRkVDX1RDUl9IQkMgICAgICAgICAgICAgKDB4MDAwMDAwMDIpCi0jZGVmaW5lIEZFQ19UQ1JfRkRFTiAgICAgICAgICAgICgweDAwMDAwMDA0KQotI2RlZmluZSBGRUNfVENSX1RGQ19QQVVTRSAgICAgICAoMHgwMDAwMDAwOCkKLSNkZWZpbmUgRkVDX1RDUl9SRkNfUEFVU0UgICAgICAgKDB4MDAwMDAwMTApCi0KLSNkZWZpbmUgRkVDX1BBTFJfQllURTMoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAgMCkKLSNkZWZpbmUgRkVDX1BBTFJfQllURTIoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAgOCkKLSNkZWZpbmUgRkVDX1BBTFJfQllURTEoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAxNikKLSNkZWZpbmUgRkVDX1BBTFJfQllURTAoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAyNCkKLQotLy8jZGVmaW5lIEZFQ19QQVVSX1RZUEUoeCkgICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAgMCkKLSNkZWZpbmUgRkVDX1BBVVJfQllURTUoeCkgICAgICAgKCgoeCkgJiAgIDB4RkYpIDw8IDE2KQotI2RlZmluZSBGRUNfUEFVUl9CWVRFNCh4KSAgICAgICAoKCh4KSAmICAgMHhGRikgPDwgMjQpCi0KLSNkZWZpbmUgRkVDX09QRF9QQVVTRV9EVVIoeCkgICAgKCgoeCkgJiAweEZGRkYpKQotLy8jZGVmaW5lIEZFQ19PUERfT1BDT0RFKHgpICAgICAgICgoKHgpICYgMHhGRkZGKSA8PCAxNikKLQotLy9tLmIuCi0jZGVmaW5lIEZFQ19JQVVSX0JZVEU3KHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgIDApCi0jZGVmaW5lIEZFQ19JQVVSX0JZVEU2KHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgIDgpCi0jZGVmaW5lIEZFQ19JQVVSX0JZVEU1KHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgMTYpCi0jZGVmaW5lIEZFQ19JQVVSX0JZVEU0KHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgMjQpCi0KLSNkZWZpbmUgRkVDX0lBTFJfQllURTMoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAgMCkKLSNkZWZpbmUgRkVDX0lBTFJfQllURTIoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAgOCkKLSNkZWZpbmUgRkVDX0lBTFJfQllURTEoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAxNikKLSNkZWZpbmUgRkVDX0lBTFJfQllURTAoeCkgICAgICAgKCgoeCkgJiAweEZGKSA8PCAyNCkKLQotI2RlZmluZSBGRUNfR0FVUl9CWVRFNyh4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8ICAwKQotI2RlZmluZSBGRUNfR0FVUl9CWVRFNih4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8ICA4KQotI2RlZmluZSBGRUNfR0FVUl9CWVRFNSh4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDE2KQotI2RlZmluZSBGRUNfR0FVUl9CWVRFNCh4KSAgICAgICAoKCh4KSAmIDB4RkYpIDw8IDI0KQotCi0jZGVmaW5lIEZFQ19HQUxSX0JZVEUzKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgIDApCi0jZGVmaW5lIEZFQ19HQUxSX0JZVEUyKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgIDgpCi0jZGVmaW5lIEZFQ19HQUxSX0JZVEUxKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgMTYpCi0jZGVmaW5lIEZFQ19HQUxSX0JZVEUwKHgpICAgICAgICgoKHgpICYgMHhGRikgPDwgMjQpCi0vLyBeXl5eCi0KLSNkZWZpbmUgRkVDX1RGV1JfWF9XTVJLXzY0ICAgICAgKDB4MDAwMDAwMDEpCi0jZGVmaW5lIEZFQ19URldSX1hfV01SS18xMjggICAgICgweDAwMDAwMDAyKQotI2RlZmluZSBGRUNfVEZXUl9YX1dNUktfMTkyICAgICAoMHgwMDAwMDAwMykKLQotLy9tLmIuCi0jZGVmaW5lIEZFQ19GUkJSX1JfQk9VTkQoeCkgICAgICgoKHgpICYgMHhGRikgPDwgMikKLQotLy9tLmIuCi0jZGVmaW5lIEZFQ19GUlNSX1JfRlNUQVJUKHgpICAgICgoKHgpICYgMHhGRikgPDwgMikKLQotLy9tLmIuCi0jZGVmaW5lIEZFQ19FUkRTUl9SX0RFU19TVEFSVCh4KSAgKCgoeCkgJiAweDNGRkZGRkZGKSA8PCAyKQotCi0vL20uYi4KLSNkZWZpbmUgRkVDX0VUU0RSX1hfREVTX1NUQVJUKHgpICAoKCh4KSAmIDB4M0ZGRkZGRkYpIDw8IDIpCi0KLSNkZWZpbmUgRkVDX0VNUkJSX1JfQlVGX1NJWkUoeCkgKCgoeCkgJiAweDdGKSA8PCAgNCkKLQotI2RlZmluZSBGRUNfUnhCRF9UUiAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgRkVDX1J4QkRfT1YgICAgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIEZFQ19SeEJEX0NSICAgICAgICAgICAgIDB4MDAwNAotI2RlZmluZSBGRUNfUnhCRF9OTyAgICAgICAgICAgICAweDAwMTAKLSNkZWZpbmUgRkVDX1J4QkRfTEcgICAgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lIEZFQ19SeEJEX01DICAgICAgICAgICAgIDB4MDA0MAotI2RlZmluZSBGRUNfUnhCRF9CQyAgICAgICAgICAgICAweDAwODAKLSNkZWZpbmUgRkVDX1J4QkRfTSAgICAgICAgICAgICAgMHgwMTAwCi0jZGVmaW5lIEZFQ19SeEJEX0wgICAgICAgICAgICAgIDB4MDgwMAotI2RlZmluZSBGRUNfUnhCRF9SMDIgICAgICAgICAgICAweDEwMDAKLSNkZWZpbmUgRkVDX1J4QkRfVyAgICAgICAgICAgICAgMHgyMDAwCi0jZGVmaW5lIEZFQ19SeEJEX1IwMSAgICAgICAgICAgIDB4NDAwMAotI2RlZmluZSBGRUNfUnhCRF9JTlVTRSAgICAgICAgICAweDQwMDAKLSNkZWZpbmUgRkVDX1J4QkRfRSAgICAgICAgICAgICAgMHg4MDAwCi0KLS8vbS5iLgotLy8jZGVmaW5lIEZFQ19UeEJEX0NTTCAgICAgICAgICAgIDB4MDAwMQotLy8jZGVmaW5lIEZFQ19UeEJEX1VOICAgICAgICAgICAgIDB4MDAwMgotLy8jZGVmaW5lIEZFQ19UeEJEX1JMICAgICAgICAgICAgIDB4MDA0MAotLy8jZGVmaW5lIEZFQ19UeEJEX0xDICAgICAgICAgICAgIDB4MDA4MAotLy8jZGVmaW5lIEZFQ19UeEJEX0hCICAgICAgICAgICAgIDB4MDEwMAotLy8jZGVmaW5lIEZFQ19UeEJEX0RFRiAgICAgICAgICAgIDB4MDIwMAotI2RlZmluZSBGRUNfVHhCRF9BQkMgICAgICAgICAgICAweDAyMDAKLS8vIF5eXl4KLSNkZWZpbmUgRkVDX1R4QkRfVEMgICAgICAgICAgICAgMHgwNDAwCi0jZGVmaW5lIEZFQ19UeEJEX0wgICAgICAgICAgICAgIDB4MDgwMAotI2RlZmluZSBGRUNfVHhCRF9UTzIgICAgICAgICAgICAweDEwMDAKLSNkZWZpbmUgRkVDX1R4QkRfVyAgICAgICAgICAgICAgMHgyMDAwCi0jZGVmaW5lIEZFQ19UeEJEX1RPMSAgICAgICAgICAgIDB4NDAwMAotI2RlZmluZSBGRUNfVHhCRF9JTlVTRSAgICAgICAgICAweDQwMDAKLSNkZWZpbmUgRkVDX1R4QkRfUiAgICAgICAgICAgICAgMHg4MDAwCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gUnggYW5kIFR4IGJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdAotdHlwZWRlZiBzdHJ1Y3QgewotCVdPUkQgbV93U3RhdHVzOwkJLy8gY29udHJvbCAvIHN0YXR1cyAgLS0tICB1c2VkIGJ5IGVkcnYsIGRvIG5vdCBjaGFuZ2UgaW4gYXBwbGljYXRpb24KLQlXT1JEIG1fd0xlbmd0aDsJCS8vIHRyYW5zZmVyIGxlbmd0aAotCUJZVEUgKm1fcGJEYXRhOwkJLy8gYnVmZmVyIGFkZHJlc3MKLX0gdEJ1ZmZlckRlc2NyOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIChOT19PRl9JTlNUQU5DRVMgPiAxKQotI2RlZmluZSBFQ0lfV1JJVEVfRFdfUkVHKG9mZix2YWwpICAgICAgICgqKERXT1JEICopKHZvaWQgKikoJl9fSVBTQkFSW29mZl0pID0gdmFsKQotI2RlZmluZSBFQ0lfUkVBRF9EV19SRUcob2ZmKSAgICAgICAgICAgICgqKERXT1JEICopKHZvaWQgKikoJl9fSVBTQkFSW29mZl0pKQotI2Vsc2UKLSNpZiAoRURSVl9VU0VEX0VUSF9DVFJMID09IDApCi0jZGVmaW5lIEVDSV9XUklURV9EV19SRUcob2ZmLHZhbCkgICAgICAgKCooRFdPUkQgKikodm9pZCAqKSgmX19JUFNCQVJbRkVDMF9BRERSK29mZl0pID0gdmFsKQotI2RlZmluZSBFQ0lfUkVBRF9EV19SRUcob2ZmKSAgICAgICAgICAgICgqKERXT1JEICopKHZvaWQgKikoJl9fSVBTQkFSW0ZFQzBfQUREUitvZmZdKSkKLSNlbHNlCi0jZGVmaW5lIEVDSV9XUklURV9EV19SRUcob2ZmLHZhbCkgICAgICAgKCooRFdPUkQgKikodm9pZCAqKSgmX19JUFNCQVJbRkVDMV9BRERSK29mZl0pID0gdmFsKQotI2RlZmluZSBFQ0lfUkVBRF9EV19SRUcob2ZmKSAgICAgICAgICAgICgqKERXT1JEICopKHZvaWQgKikoJl9fSVBTQkFSW0ZFQzFfQUREUitvZmZdKSkKLSNlbmRpZgotI2VuZGlmCi0KLSNlbmRpZiAvLyAjaWZuZGVmIF9FRFJWX0ZFQ19IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2U2ltLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VkcnZTaW0uaAppbmRleCAzOTMwMGUzMi4uMTkxZWMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2U2ltLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FZHJ2U2ltLmgKQEAgLTgzLDcgKzgzLDcgQEAKIC8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgRWRydlJ4SW50ZXJydXB0SGFuZGxlcihCWVRFIGJCdWZmZXJJbkZyYW1lX3AsIEJZVEUgKiBwYkV0aGVybmV0RGF0YV9wLAotCQkJICAgIFdPUkQgd0RhdGFMZW5fcCk7Cit2b2lkIEVkcnZSeEludGVycnVwdEhhbmRsZXIodTggYkJ1ZmZlckluRnJhbWVfcCwgdTggKiBwYkV0aGVybmV0RGF0YV9wLAorCQkJICAgIHUxNiB3RGF0YUxlbl9wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VEUlZTSU1fSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbC5oCmluZGV4IGJlNjBmNzcuLjdmMjJiMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGwuaApAQCAtODksNyArODksNyBAQAogCXVuc2lnbmVkIGludCBtX3VpTm9kZUlkOwogCXRFcGxObXRTdGF0ZSBtX05tdFN0YXRlOwogCXRFcGxObXROb2RlRXZlbnQgbV9Ob2RlRXZlbnQ7Ci0JV09SRCBtX3dFcnJvckNvZGU7CS8vIEVQTCBlcnJvciBjb2RlIGlmIG1fTm9kZUV2ZW50ID09IGtFcGxObXROb2RlRXZlbnRFcnJvcgorCXUxNiBtX3dFcnJvckNvZGU7CS8vIEVQTCBlcnJvciBjb2RlIGlmIG1fTm9kZUV2ZW50ID09IGtFcGxObXROb2RlRXZlbnRFcnJvcgogCUJPT0wgbV9mTWFuZGF0b3J5OwogCiB9IHRFcGxBcGlFdmVudE5vZGU7CkBAIC05Nyw3ICs5Nyw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbE5tdFN0YXRlIG1fTm10U3RhdGU7CS8vIGxvY2FsIE5NVCBzdGF0ZQogCXRFcGxObXRCb290RXZlbnQgbV9Cb290RXZlbnQ7Ci0JV09SRCBtX3dFcnJvckNvZGU7CS8vIEVQTCBlcnJvciBjb2RlIGlmIG1fQm9vdEV2ZW50ID09IGtFcGxObXRCb290RXZlbnRFcnJvcgorCXUxNiBtX3dFcnJvckNvZGU7CS8vIEVQTCBlcnJvciBjb2RlIGlmIG1fQm9vdEV2ZW50ID09IGtFcGxObXRCb290RXZlbnRFcnJvcgogCiB9IHRFcGxBcGlFdmVudEJvb3Q7CiAKQEAgLTEzMSwzMyArMTMxLDMzIEBACiAKIH0gdEVwbEFwaUV2ZW50QXJnOwogCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDIFJPTSAqIHRFcGxBcGlDYkV2ZW50KSAodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCi0JCQkJCQkgdEVwbEFwaUV2ZW50QXJnICogcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCi0JCQkJCQkgdm9pZCBHRU5FUklDICogcFVzZXJBcmdfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKnRFcGxBcGlDYkV2ZW50KSAodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCisJCQkJICAgICB0RXBsQXBpRXZlbnRBcmcgKnBFdmVudEFyZ19wLAkvLyBJTjogZXZlbnQgYXJndW1lbnQgKHVuaW9uKQorCQkJCSAgICAgIHZvaWQgKnBVc2VyQXJnX3ApOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgaW50IG1fdWlTaXplT2ZTdHJ1Y3Q7CiAJQk9PTCBtX2ZBc3luY09ubHk7CS8vIGRvIG5vdCBuZWVkIHRvIHJlZ2lzdGVyIFBSZXMKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gbG9jYWwgbm9kZSBJRAotCUJZVEUgbV9hYk1hY0FkZHJlc3NbNl07CS8vIGxvY2FsIE1BQyBhZGRyZXNzCisJdTggbV9hYk1hY0FkZHJlc3NbNl07CS8vIGxvY2FsIE1BQyBhZGRyZXNzCiAKIAkvLyAweDFGODI6IE5NVF9GZWF0dXJlRmxhZ3NfVTMyCi0JRFdPUkQgbV9kd0ZlYXR1cmVGbGFnczsKKwl1MzIgbV9kd0ZlYXR1cmVGbGFnczsKIAkvLyBDeWNsZSBMZW5ndGggKDB4MTAwNjogTk1UX0N5Y2xlTGVuX1UzMikgaW4gW3VzXQotCURXT1JEIG1fZHdDeWNsZUxlbjsJLy8gcmVxdWlyZWQgZm9yIGVycm9yIGRldGVjdGlvbgorCXUzMiBtX2R3Q3ljbGVMZW47CS8vIHJlcXVpcmVkIGZvciBlcnJvciBkZXRlY3Rpb24KIAkvLyAweDFGOTg6IE5NVF9DeWNsZVRpbWluZ19SRUMKIAkvLyAweDFGOTguMTogSXNvY2hyVHhNYXhQYXlsb2FkX1UxNgogCXVuc2lnbmVkIGludCBtX3VpSXNvY2hyVHhNYXhQYXlsb2FkOwkvLyBjb25zdAogCS8vIDB4MUY5OC4yOiBJc29jaHJSeE1heFBheWxvYWRfVTE2CiAJdW5zaWduZWQgaW50IG1fdWlJc29jaHJSeE1heFBheWxvYWQ7CS8vIGNvbnN0CiAJLy8gMHgxRjk4LjM6IFBSZXNNYXhMYXRlbmN5X1UzMgotCURXT1JEIG1fZHdQcmVzTWF4TGF0ZW5jeTsJLy8gY29uc3QgaW4gW25zXSwgb25seSByZXF1aXJlZCBmb3IgSWRlbnRSZXMKKwl1MzIgbV9kd1ByZXNNYXhMYXRlbmN5OwkvLyBjb25zdCBpbiBbbnNdLCBvbmx5IHJlcXVpcmVkIGZvciBJZGVudFJlcwogCS8vIDB4MUY5OC40OiBQUmVxQWN0UGF5bG9hZExpbWl0X1UxNgogCXVuc2lnbmVkIGludCBtX3VpUHJlcUFjdFBheWxvYWRMaW1pdDsJLy8gcmVxdWlyZWQgZm9yIGluaXRpYWxpc2F0aW9uICgrMjggYnl0ZXMpCiAJLy8gMHgxRjk4LjU6IFBSZXNBY3RQYXlsb2FkTGltaXRfVTE2CiAJdW5zaWduZWQgaW50IG1fdWlQcmVzQWN0UGF5bG9hZExpbWl0OwkvLyByZXF1aXJlZCBmb3IgaW5pdGlhbGlzYXRpb24gb2YgUHJlcyBmcmFtZSAoKzI4IGJ5dGVzKQogCS8vIDB4MUY5OC42OiBBU25kTWF4TGF0ZW5jeV9VMzIKLQlEV09SRCBtX2R3QXNuZE1heExhdGVuY3k7CS8vIGNvbnN0IGluIFtuc10sIG9ubHkgcmVxdWlyZWQgZm9yIElkZW50UmVzCisJdTMyIG1fZHdBc25kTWF4TGF0ZW5jeTsJLy8gY29uc3QgaW4gW25zXSwgb25seSByZXF1aXJlZCBmb3IgSWRlbnRSZXMKIAkvLyAweDFGOTguNzogTXVsdGlwbEN5Y2xlQ250X1U4CiAJdW5zaWduZWQgaW50IG1fdWlNdWx0aXBsQ3ljbGVDbnQ7CS8vIHJlcXVpcmVkIGZvciBlcnJvciBkZXRlY3Rpb24KIAkvLyAweDFGOTguODogQXN5bmNNVFVfVTE2CkBAIC0xNjcsMzAgKzE2NywzMCBAQAogCS8vICQkJCBNdWx0aXBsZXhlZCBTbG90CiAKIAkvLyAweDFDMTQ6IERMTF9Mb3NzT2ZGcmFtZVRvbGVyYW5jZV9VMzIgaW4gW25zXQotCURXT1JEIG1fZHdMb3NzT2ZGcmFtZVRvbGVyYW5jZTsKKwl1MzIgbV9kd0xvc3NPZkZyYW1lVG9sZXJhbmNlOwogCiAJLy8gMHgxRjhBOiBOTVRfTU5DeWNsZVRpbWluZ19SRUMKIAkvLyAweDFGOEEuMTogV2FpdFNvQ1BSZXFfVTMyIGluIFtuc10KLQlEV09SRCBtX2R3V2FpdFNvY1ByZXE7CisJdTMyIG1fZHdXYWl0U29jUHJlcTsKIAogCS8vIDB4MUY4QS4yOiBBc3luY1Nsb3RUaW1lb3V0X1UzMiBpbiBbbnNdCi0JRFdPUkQgbV9kd0FzeW5jU2xvdFRpbWVvdXQ7CisJdTMyIG1fZHdBc3luY1Nsb3RUaW1lb3V0OwogCi0JRFdPUkQgbV9kd0RldmljZVR5cGU7CS8vIE5NVF9EZXZpY2VUeXBlX1UzMgotCURXT1JEIG1fZHdWZW5kb3JJZDsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5WZW5kb3JJZF9VMzIKLQlEV09SRCBtX2R3UHJvZHVjdENvZGU7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUHJvZHVjdENvZGVfVTMyCi0JRFdPUkQgbV9kd1JldmlzaW9uTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlJldmlzaW9uTm9fVTMyCi0JRFdPUkQgbV9kd1NlcmlhbE51bWJlcjsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5TZXJpYWxOb19VMzIKLQlRV09SRCBtX3F3VmVuZG9yU3BlY2lmaWNFeHQxOwotCURXT1JEIG1fZHdWZXJpZnlDb25maWd1cmF0aW9uRGF0ZTsJLy8gQ0ZNX1ZlcmlmeUNvbmZpZ3VyYXRpb25fUkVDLkNvbmZEYXRlX1UzMgotCURXT1JEIG1fZHdWZXJpZnlDb25maWd1cmF0aW9uVGltZTsJLy8gQ0ZNX1ZlcmlmeUNvbmZpZ3VyYXRpb25fUkVDLkNvbmZUaW1lX1UzMgotCURXT1JEIG1fZHdBcHBsaWNhdGlvblN3RGF0ZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3RGF0ZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciBkYXRlIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCi0JRFdPUkQgbV9kd0FwcGxpY2F0aW9uU3dUaW1lOwkvLyBQRExfTG9jVmVyQXBwbFN3X1JFQy5BcHBsU3dUaW1lX1UzMiBvbiBwcm9ncmFtbWFibGUgZGV2aWNlIG9yIHRpbWUgcG9ydGlvbiBvZiBOTVRfTWFudWZhY3RTd1ZlcnNfVlMgb24gbm9uLXByb2dyYW1tYWJsZSBkZXZpY2UKLQlEV09SRCBtX2R3SXBBZGRyZXNzOwotCURXT1JEIG1fZHdTdWJuZXRNYXNrOwotCURXT1JEIG1fZHdEZWZhdWx0R2F0ZXdheTsKLQlCWVRFIG1fc0hvc3RuYW1lWzMyXTsKLQlCWVRFIG1fYWJWZW5kb3JTcGVjaWZpY0V4dDJbNDhdOworCXUzMiBtX2R3RGV2aWNlVHlwZTsJLy8gTk1UX0RldmljZVR5cGVfVTMyCisJdTMyIG1fZHdWZW5kb3JJZDsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5WZW5kb3JJZF9VMzIKKwl1MzIgbV9kd1Byb2R1Y3RDb2RlOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlByb2R1Y3RDb2RlX1UzMgorCXUzMiBtX2R3UmV2aXNpb25OdW1iZXI7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUmV2aXNpb25Ob19VMzIKKwl1MzIgbV9kd1NlcmlhbE51bWJlcjsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5TZXJpYWxOb19VMzIKKwl1NjQgbV9xd1ZlbmRvclNwZWNpZmljRXh0MTsKKwl1MzIgbV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25EYXRlOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZkRhdGVfVTMyCisJdTMyIG1fZHdWZXJpZnlDb25maWd1cmF0aW9uVGltZTsJLy8gQ0ZNX1ZlcmlmeUNvbmZpZ3VyYXRpb25fUkVDLkNvbmZUaW1lX1UzMgorCXUzMiBtX2R3QXBwbGljYXRpb25Td0RhdGU7CS8vIFBETF9Mb2NWZXJBcHBsU3dfUkVDLkFwcGxTd0RhdGVfVTMyIG9uIHByb2dyYW1tYWJsZSBkZXZpY2Ugb3IgZGF0ZSBwb3J0aW9uIG9mIE5NVF9NYW51ZmFjdFN3VmVyc19WUyBvbiBub24tcHJvZ3JhbW1hYmxlIGRldmljZQorCXUzMiBtX2R3QXBwbGljYXRpb25Td1RpbWU7CS8vIFBETF9Mb2NWZXJBcHBsU3dfUkVDLkFwcGxTd1RpbWVfVTMyIG9uIHByb2dyYW1tYWJsZSBkZXZpY2Ugb3IgdGltZSBwb3J0aW9uIG9mIE5NVF9NYW51ZmFjdFN3VmVyc19WUyBvbiBub24tcHJvZ3JhbW1hYmxlIGRldmljZQorCXUzMiBtX2R3SXBBZGRyZXNzOworCXUzMiBtX2R3U3VibmV0TWFzazsKKwl1MzIgbV9kd0RlZmF1bHRHYXRld2F5OworCXU4IG1fc0hvc3RuYW1lWzMyXTsKKwl1OCBtX2FiVmVuZG9yU3BlY2lmaWNFeHQyWzQ4XTsKIAogCWNoYXIgKm1fcHN6RGV2TmFtZTsJLy8gTk1UX01hbnVmYWN0RGV2TmFtZV9WUyAoMHgxMDA4LzAgbG9jYWwgT0QpCiAJY2hhciAqbV9wc3pId1ZlcnNpb247CS8vIE5NVF9NYW51ZmFjdEh3VmVyc19WUyAgKDB4MTAwOS8wIGxvY2FsIE9EKQpAQCAtMjEyLDYyICsyMTIsNjEgQEAKIC8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUluaXRpYWxpemUodEVwbEFwaUluaXRQYXJhbSAqIHBJbml0UGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbEFwaUluaXRpYWxpemUodEVwbEFwaUluaXRQYXJhbSAqcEluaXRQYXJhbV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpU2h1dGRvd24odm9pZCk7Cit0RXBsS2VybmVsIEVwbEFwaVNodXRkb3duKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlSZWFkT2JqZWN0KHRFcGxTZG9Db21Db25IZGwgKiBwU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCSAgIHZvaWQgKnBEc3REYXRhX2xlX3AsCi0JCQkJICAgdW5zaWduZWQgaW50ICpwdWlTaXplX3AsCi0JCQkJICAgdEVwbFNkb1R5cGUgU2RvVHlwZV9wLCB2b2lkICpwVXNlckFyZ19wKTsKK3RFcGxLZXJuZWwgRXBsQXBpUmVhZE9iamVjdCh0RXBsU2RvQ29tQ29uSGRsICpwU2RvQ29tQ29uSGRsX3AsCisJCQkgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAorCQkJICAgIHZvaWQgKnBEc3REYXRhX2xlX3AsCisJCQkgICAgdW5zaWduZWQgaW50ICpwdWlTaXplX3AsCisJCQkgICAgdEVwbFNkb1R5cGUgU2RvVHlwZV9wLCB2b2lkICpwVXNlckFyZ19wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpV3JpdGVPYmplY3QodEVwbFNkb0NvbUNvbkhkbCAqIHBTZG9Db21Db25IZGxfcCwKLQkJCQkgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCi0JCQkJICAgIHZvaWQgKnBTcmNEYXRhX2xlX3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aVNpemVfcCwKLQkJCQkgICAgdEVwbFNkb1R5cGUgU2RvVHlwZV9wLCB2b2lkICpwVXNlckFyZ19wKTsKK3RFcGxLZXJuZWwgRXBsQXBpV3JpdGVPYmplY3QodEVwbFNkb0NvbUNvbkhkbCAqcFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCSAgICAgdm9pZCAqcFNyY0RhdGFfbGVfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU2l6ZV9wLAorCQkJICAgICB0RXBsU2RvVHlwZSBTZG9UeXBlX3AsIHZvaWQgKnBVc2VyQXJnX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlGcmVlU2RvQ2hhbm5lbCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wKTsKK3RFcGxLZXJuZWwgRXBsQXBpRnJlZVNkb0NoYW5uZWwodEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVJlYWRMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCQl2b2lkICpwRHN0RGF0YV9wLAotCQkJCQl1bnNpZ25lZCBpbnQgKnB1aVNpemVfcCk7Cit0RXBsS2VybmVsIEVwbEFwaVJlYWRMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAorCQkJCSB2b2lkICpwRHN0RGF0YV9wLAorCQkJCSB1bnNpZ25lZCBpbnQgKnB1aVNpemVfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVdyaXRlTG9jYWxPYmplY3QodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCi0JCQkJCSB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkgdW5zaWduZWQgaW50IHVpU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsQXBpV3JpdGVMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCQkgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICB1bnNpZ25lZCBpbnQgdWlTaXplX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk9iZEFjY2Vzcyh0RXBsT2JkQ2JQYXJhbSBNRU0gKiBwUGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbEFwaUNiT2JkQWNjZXNzKHRFcGxPYmRDYlBhcmFtICpwUGFyYW1fcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUxpbmtPYmplY3QodW5zaWduZWQgaW50IHVpT2JqSW5kZXhfcCwKLQkJCQkgICB2b2lkICpwVmFyX3AsCi0JCQkJICAgdW5zaWduZWQgaW50ICpwdWlWYXJFbnRyaWVzX3AsCi0JCQkJICAgdEVwbE9iZFNpemUgKiBwRW50cnlTaXplX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpRmlyc3RTdWJpbmRleF9wKTsKK3RFcGxLZXJuZWwgRXBsQXBpTGlua09iamVjdCh1bnNpZ25lZCBpbnQgdWlPYmpJbmRleF9wLAorCQkJICAgIHZvaWQgKnBWYXJfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgKnB1aVZhckVudHJpZXNfcCwKKwkJCSAgICB0RXBsT2JkU2l6ZSAqcEVudHJ5U2l6ZV9wLAorCQkJICAgIHVuc2lnbmVkIGludCB1aUZpcnN0U3ViaW5kZXhfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUV4ZWNObXRDb21tYW5kKHRFcGxObXRFdmVudCBObXRFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsQXBpRXhlY05tdENvbW1hbmQodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzKHZvaWQpOwordEVwbEtlcm5lbCBFcGxBcGlQcm9jZXNzKHZvaWQpOwogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpTW5UcmlnZ2VyU3RhdGVDaGFuZ2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgICAgdEVwbE5tdE5vZGVDb21tYW5kIE5vZGVDb21tYW5kX3ApOwordEVwbEtlcm5lbCBFcGxBcGlNblRyaWdnZXJTdGF0ZUNoYW5nZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkgICAgICB0RXBsTm10Tm9kZUNvbW1hbmQgTm9kZUNvbW1hbmRfcCk7CiAjZW5kaWYKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpR2V0SWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJIHRFcGxJZGVudFJlc3BvbnNlICoqCi0JCQkJCSBwcElkZW50UmVzcG9uc2VfcCk7Cit0RXBsS2VybmVsIEVwbEFwaUdldElkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJICB0RXBsSWRlbnRSZXNwb25zZSAqKnBwSWRlbnRSZXNwb25zZV9wKTsKIAogLy8gZnVuY3Rpb25zIGZvciBwcm9jZXNzIGltYWdlIHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gc2VwYXJhdGUgZmlsZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpUHJvY2Vzc0ltYWdlU2V0dXAodm9pZCk7Ci10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzSW1hZ2VFeGNoYW5nZUluKHRFcGxBcGlQcm9jZXNzSW1hZ2UgKiBwUElfcCk7Ci10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzSW1hZ2VFeGNoYW5nZU91dCh0RXBsQXBpUHJvY2Vzc0ltYWdlICogcFBJX3ApOwordEVwbEtlcm5lbCBFcGxBcGlQcm9jZXNzSW1hZ2VTZXR1cCh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsQXBpUHJvY2Vzc0ltYWdlRXhjaGFuZ2VJbih0RXBsQXBpUHJvY2Vzc0ltYWdlICpwUElfcCk7Cit0RXBsS2VybmVsIEVwbEFwaVByb2Nlc3NJbWFnZUV4Y2hhbmdlT3V0KHRFcGxBcGlQcm9jZXNzSW1hZ2UgKnBQSV9wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTF9BUElfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsQW1pLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFtaS5oCmluZGV4IDZmYTA0YTQuLjNiNDZlYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsQW1pLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBbWkuaApAQCAtNjksNyArNjksNyBAQAogCiAgICAxNi4wOS4yMDAyICAtYXMKICAgICAgICAgICAgICAgIFRvIHNhdmUgY29kZSBzcGFjZSB0aGUgZnVuY3Rpb25zIEFtaVNldEJ5dGUgYW5kIEFtaUdldEJ5dGUKLSAgICAgICAgICAgICAgIGFyZSByZXBsYWNlZCBieSBtYWNyb3MuIEZvciB0YXJnZXRzIHdoaWNoIGFzc2lnbiBCWVRFIGJ5CisgICAgICAgICAgICAgICBhcmUgcmVwbGFjZWQgYnkgbWFjcm9zLiBGb3IgdGFyZ2V0cyB3aGljaCBhc3NpZ24gdTggYnkKICAgICAgICAgICAgICAgIGFuIDE2Qml0IHR5cGUsIHRoZSBkZWZpbml0aW9uIG9mIG1hY3JvcyBtdXN0IGNoYW5nZWQgdG8KICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy4KIApAQCAtODYsMTEgKzg2LDYgQEAKICNpZm5kZWYgX0VQTEFNSV9IXwogI2RlZmluZSBfRVBMQU1JX0hfCiAKLSNpZiAoKERFVl9TWVNURU0gJiBfREVWXzY0QklUX1NVUFBPUlRfKSA9PSAwKQotLy8gICAgI2lmZGVmIFVTRV9WQVI2NAotI2Vycm9yICdFUlJPUjogZGV2ZWxvcG1lbnQgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgNjQgYml0IG9wZXJhdGlvbnMhJwotLy8gICAgI2VuZGlmCi0jZW5kaWYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICB0eXBlcwpAQCAtMTA0LDQ0ICs5OSwyMSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0jaWYgZGVmaW5lZChJTkxJTkVfRlVOQ1RJT05fREVGKQotI3VuZGVmICBJTkxJTkVfRlVOQ1RJT04KLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OICAgICBJTkxJTkVfRlVOQ1RJT05fREVGCi0jZGVmaW5lIElOTElORV9FTkFCTEVEICAgICAgVFJVRQotI2RlZmluZSBFUExfQU1JX0lOTElORUQKLSNpbmNsdWRlICIuLi9FcGxTdGFjay9hbWl4ODYuYyIKLSNlbmRpZgotCi0jZWxpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKQotI2lmIGRlZmluZWQoX19tNjhrX18pCQkvLyBpdCBpcyBhbiBiaWcgZW5kaWFuIG1hY2hpbmUKLSNpZiBkZWZpbmVkKElOTElORV9GVU5DVElPTl9ERUYpCi0jdW5kZWYgIElOTElORV9GVU5DVElPTgotI2RlZmluZSBJTkxJTkVfRlVOQ1RJT04gICAgIElOTElORV9GVU5DVElPTl9ERUYKLSNkZWZpbmUgSU5MSU5FX0VOQUJMRUQgICAgICBUUlVFCi0jZGVmaW5lIEVQTF9BTUlfSU5MSU5FRAotI2luY2x1ZGUgIi4uL0VwbFN0YWNrL2FtaWJlLmMiCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwogLy8gd3JpdGUgZnVuY3Rpb25zCiAvLwogLy8gVG8gc2F2ZSBjb2RlIHNwYWNlIHRoZSBmdW5jdGlvbiBBbWlTZXRCeXRlIGlzIHJlcGxhY2VkIGJ5CiAvLyBhbiBtYWNyby4KLS8vIHZvaWQgICBQVUJMSUMgIEFtaVNldEJ5dGUgICh2b2lkIEZBUiogcEFkZHJfcCwgQllURSBiQnl0ZVZhbF9wKTsKKy8vIHZvaWQgIEFtaVNldEJ5dGUgICh2b2lkICogcEFkZHJfcCwgdTggYkJ5dGVWYWxfcCk7CiAKLSNkZWZpbmUgQW1pU2V0Qnl0ZVRvQmUocEFkZHJfcCwgYkJ5dGVWYWxfcCkgIHsqKEJZVEUgRkFSKikocEFkZHJfcCkgPSAoYkJ5dGVWYWxfcCk7fQotI2RlZmluZSBBbWlTZXRCeXRlVG9MZShwQWRkcl9wLCBiQnl0ZVZhbF9wKSAgeyooQllURSBGQVIqKShwQWRkcl9wKSA9IChiQnl0ZVZhbF9wKTt9CisjZGVmaW5lIEFtaVNldEJ5dGVUb0JlKHBBZGRyX3AsIGJCeXRlVmFsX3ApICB7Kih1OCAqKShwQWRkcl9wKSA9IChiQnl0ZVZhbF9wKTt9CisjZGVmaW5lIEFtaVNldEJ5dGVUb0xlKHBBZGRyX3AsIGJCeXRlVmFsX3ApICB7Kih1OCAqKShwQWRkcl9wKSA9IChiQnl0ZVZhbF9wKTt9CiAKLSNpZiAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQl2b2lkIFBVQkxJQyBBbWlTZXRXb3JkVG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFdPUkQgd1dvcmRWYWxfcCk7Ci0Jdm9pZCBQVUJMSUMgQW1pU2V0RHdvcmRUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwgRFdPUkQgZHdEd29yZFZhbF9wKTsKLQl2b2lkIFBVQkxJQyBBbWlTZXRXb3JkVG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFdPUkQgd1dvcmRWYWxfcCk7Ci0Jdm9pZCBQVUJMSUMgQW1pU2V0RHdvcmRUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwgRFdPUkQgZHdEd29yZFZhbF9wKTsKLSNlbmRpZgordm9pZCBBbWlTZXRXb3JkVG9CZSh2b2lkICpwQWRkcl9wLCB1MTYgd1dvcmRWYWxfcCk7Cit2b2lkIEFtaVNldER3b3JkVG9CZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKTsKK3ZvaWQgQW1pU2V0V29yZFRvTGUodm9pZCAqcEFkZHJfcCwgdTE2IHdXb3JkVmFsX3ApOwordm9pZCBBbWlTZXREd29yZFRvTGUodm9pZCAqcEFkZHJfcCwgdTMyIGR3RHdvcmRWYWxfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMTQ5LDE3ICsxMjEsMTUgQEAKIC8vCiAvLyBUbyBzYXZlIGNvZGUgc3BhY2UgdGhlIGZ1bmN0aW9uIEFtaUdldEJ5dGUgaXMgcmVwbGFjZWQgYnkKIC8vIGFuIG1hY3JvLgotLy8gQllURSAgIFBVQkxJQyAgQW1pR2V0Qnl0ZSAgKHZvaWQgRkFSKiBwQWRkcl9wKTsKKy8vIHU4ICAgQW1pR2V0Qnl0ZSAgKHZvaWQgKiBwQWRkcl9wKTsKIAotI2RlZmluZSBBbWlHZXRCeXRlRnJvbUJlKHBBZGRyX3ApICAoKihCWVRFIEZBUiopKHBBZGRyX3ApKQotI2RlZmluZSBBbWlHZXRCeXRlRnJvbUxlKHBBZGRyX3ApICAoKihCWVRFIEZBUiopKHBBZGRyX3ApKQorI2RlZmluZSBBbWlHZXRCeXRlRnJvbUJlKHBBZGRyX3ApICAoKih1OCAqKShwQWRkcl9wKSkKKyNkZWZpbmUgQW1pR2V0Qnl0ZUZyb21MZShwQWRkcl9wKSAgKCoodTggKikocEFkZHJfcCkpCiAKLSNpZiAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQotCVdPUkQgUFVCTElDIEFtaUdldFdvcmRGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKTsKLQlEV09SRCBQVUJMSUMgQW1pR2V0RHdvcmRGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKTsKLQlXT1JEIFBVQkxJQyBBbWlHZXRXb3JkRnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCk7Ci0JRFdPUkQgUFVCTElDIEFtaUdldER3b3JkRnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCk7Cit1MTYgQW1pR2V0V29yZEZyb21CZSh2b2lkICpwQWRkcl9wKTsKK3UzMiBBbWlHZXREd29yZEZyb21CZSh2b2lkICpwQWRkcl9wKTsKK3UxNiBBbWlHZXRXb3JkRnJvbUxlKHZvaWQgKnBBZGRyX3ApOwordTMyIEFtaUdldER3b3JkRnJvbUxlKHZvaWQgKnBBZGRyX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KQEAgLTE3NCw4ICsxNDQsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQl2b2lkIFBVQkxJQyBBbWlTZXREd29yZDI0VG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsIERXT1JEIGR3RHdvcmRWYWxfcCk7Ci0Jdm9pZCBQVUJMSUMgQW1pU2V0RHdvcmQyNFRvTGUodm9pZCBGQVIgKiBwQWRkcl9wLCBEV09SRCBkd0R3b3JkVmFsX3ApOwordm9pZCBBbWlTZXREd29yZDI0VG9CZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKTsKK3ZvaWQgQW1pU2V0RHdvcmQyNFRvTGUodm9pZCAqcEFkZHJfcCwgdTMyIGR3RHdvcmRWYWxfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMTg1LDEyICsxNTUsMTIgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIERXT1JEICAgICAgICAgICA9IHJlYWQgdmFsdWUKKy8vIFJldHVybjogICAgICB1MzIgICAgICAgICAgID0gcmVhZCB2YWx1ZQogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQlEV09SRCBQVUJMSUMgQW1pR2V0RHdvcmQyNEZyb21CZSh2b2lkIEZBUiAqIHBBZGRyX3ApOwotCURXT1JEIFBVQkxJQyBBbWlHZXREd29yZDI0RnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCk7Cit1MzIgQW1pR2V0RHdvcmQyNEZyb21CZSh2b2lkICpwQWRkcl9wKTsKK3UzMiBBbWlHZXREd29yZDI0RnJvbUxlKHZvaWQgKnBBZGRyX3ApOwogCiAvLyNpZmRlZiBVU0VfVkFSNjQKIApAQCAtMjA3LDggKzE3Nyw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotCXZvaWQgUFVCTElDIEFtaVNldFF3b3JkNDBUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwgUVdPUkQgcXdRd29yZFZhbF9wKTsKLQl2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDQwVG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFFXT1JEIHF3UXdvcmRWYWxfcCk7Cit2b2lkIEFtaVNldFF3b3JkNDBUb0JlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwordm9pZCBBbWlTZXRRd29yZDQwVG9MZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC0yMTgsMTIgKzE4OCwxMiBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICBwQWRkcl9wICAgICAgICAgPSBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIKIC8vCi0vLyBSZXR1cm46ICAgICAgUVdPUkQKKy8vIFJldHVybjogICAgICB1NjQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0JUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNDBGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKTsKLQlRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ0MEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApOwordTY0IEFtaUdldFF3b3JkNDBGcm9tQmUodm9pZCAqcEFkZHJfcCk7Cit1NjQgQW1pR2V0UXdvcmQ0MEZyb21MZSh2b2lkICpwQWRkcl9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC0yMzgsOCArMjA4LDggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0Jdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ0OFRvQmUodm9pZCBGQVIgKiBwQWRkcl9wLCBRV09SRCBxd1F3b3JkVmFsX3ApOwotCXZvaWQgUFVCTElDIEFtaVNldFF3b3JkNDhUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwgUVdPUkQgcXdRd29yZFZhbF9wKTsKK3ZvaWQgQW1pU2V0UXdvcmQ0OFRvQmUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCk7Cit2b2lkIEFtaVNldFF3b3JkNDhUb0xlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KQEAgLTI0OSwxMiArMjE5LDEyIEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBRV09SRAorLy8gUmV0dXJuOiAgICAgIHU2NAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQlRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ0OEZyb21CZSh2b2lkIEZBUiAqIHBBZGRyX3ApOwotCVFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDQ4RnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCk7Cit1NjQgQW1pR2V0UXdvcmQ0OEZyb21CZSh2b2lkICpwQWRkcl9wKTsKK3U2NCBBbWlHZXRRd29yZDQ4RnJvbUxlKHZvaWQgKnBBZGRyX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8KQEAgLTI2OSw4ICsyMzksOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLQl2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDU2VG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFFXT1JEIHF3UXdvcmRWYWxfcCk7Ci0Jdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ1NlRvTGUodm9pZCBGQVIgKiBwQWRkcl9wLCBRV09SRCBxd1F3b3JkVmFsX3ApOwordm9pZCBBbWlTZXRRd29yZDU2VG9CZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKTsKK3ZvaWQgQW1pU2V0UXdvcmQ1NlRvTGUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMjgwLDEyICsyNTAsMTIgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIFFXT1JECisvLyBSZXR1cm46ICAgICAgdTY0CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotCVFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDU2RnJvbUJlKHZvaWQgRkFSICogcEFkZHJfcCk7Ci0JUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNTZGcm9tTGUodm9pZCBGQVIgKiBwQWRkcl9wKTsKK3U2NCBBbWlHZXRRd29yZDU2RnJvbUJlKHZvaWQgKnBBZGRyX3ApOwordTY0IEFtaUdldFF3b3JkNTZGcm9tTGUodm9pZCAqcEFkZHJfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMzAwLDggKzI3MCw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotCXZvaWQgUFVCTElDIEFtaVNldFF3b3JkNjRUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwgUVdPUkQgcXdRd29yZFZhbF9wKTsKLQl2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDY0VG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsIFFXT1JEIHF3UXdvcmRWYWxfcCk7Cit2b2lkIEFtaVNldFF3b3JkNjRUb0JlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApOwordm9pZCBBbWlTZXRRd29yZDY0VG9MZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC0zMTUsOCArMjg1LDggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0JUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNjRGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKTsKLQlRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ2NEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApOwordTY0IEFtaUdldFF3b3JkNjRGcm9tQmUodm9pZCAqcEFkZHJfcCk7Cit1NjQgQW1pR2V0UXdvcmQ2NEZyb21MZSh2b2lkICpwQWRkcl9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vCkBAIC0zMzAsOSArMzAwLDcgQEAKIC8vIFJldHVybjogICAgICB2b2lkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotCXZvaWQgUFVCTElDIEFtaVNldFRpbWVPZkRheSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJICAgIHRUaW1lT2ZEYXkgRkFSICogcFRpbWVPZkRheV9wKTsKK3ZvaWQgQW1pU2V0VGltZU9mRGF5KHZvaWQgKnBBZGRyX3AsIHRUaW1lT2ZEYXkgKnBUaW1lT2ZEYXlfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLwpAQCAtMzQ2LDE0ICszMTQsNyBAQAogLy8gUmV0dXJuOiAgICAgIHZvaWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0Jdm9pZCBQVUJMSUMgQW1pR2V0VGltZU9mRGF5KHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkgICAgdFRpbWVPZkRheSBGQVIgKiBwVGltZU9mRGF5X3ApOwotCi0jZW5kaWYKLQotI3VuZGVmICBJTkxJTkVfRU5BQkxFRAkJLy8gZGlzYWJsZSBhY3R1YWwgaW5saW5pbmcgb2YgZnVuY3Rpb25zCi0jZGVmaW5lIEVQTF9BTUlfSU5DTFVERUQKK3ZvaWQgQW1pR2V0VGltZU9mRGF5KHZvaWQgKnBBZGRyX3AsIHRUaW1lT2ZEYXkgKnBUaW1lT2ZEYXlfcCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBcGlHZW5lcmljLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaUdlbmVyaWMuYwppbmRleCBhZTE5ZTM0Li5jNDQxOTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaUdlbmVyaWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaUdlbmVyaWMuYwpAQCAtMTYyLDQ0ICsxNjIsNDEgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIE5NVCBzdGF0ZSBjaGFuZ2UgZXZlbnQgY2FsbGJhY2sgZnVuY3Rpb24KLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk5tdFN0YXRlQ2hhbmdlKHRFcGxFdmVudE5tdFN0YXRlQ2hhbmdlCi0JCQkJCQlObXRTdGF0ZUNoYW5nZV9wKTsKK3N0YXRpYyB0RXBsS2VybmVsIEVwbEFwaUNiTm10U3RhdGVDaGFuZ2UodEVwbEV2ZW50Tm10U3RhdGVDaGFuZ2UgTm10U3RhdGVDaGFuZ2VfcCk7CiAKIC8vIHVwZGF0ZSBETEwgY29uZmlndXJhdGlvbiBmcm9tIE9ECi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpVXBkYXRlRGxsQ29uZmlnKEJPT0wgZlVwZGF0ZUlkZW50aXR5X3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpVXBkYXRlRGxsQ29uZmlnKEJPT0wgZlVwZGF0ZUlkZW50aXR5X3ApOwogCiAvLyB1cGRhdGUgT0QgZnJvbSBpbml0IHBhcmFtCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpVXBkYXRlT2JkKHZvaWQpOworc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpVXBkYXRlT2JkKHZvaWQpOwogCiAvLyBwcm9jZXNzIGV2ZW50cyBmcm9tIHVzZXIgZXZlbnQgcXVldWUKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICogcEVwbEV2ZW50X3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEVwbEV2ZW50X3ApOwogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9DKSkgIT0gMCkKIC8vIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIFNETyBtb2R1bGUKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYlNkb0Nvbih0RXBsU2RvQ29tRmluaXNoZWQgKiBwU2RvQ29tRmluaXNoZWRfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlDYlNkb0Nvbih0RXBsU2RvQ29tRmluaXNoZWQgKnBTZG9Db21GaW5pc2hlZF9wKTsKICNlbmRpZgogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQogLy8gY2FsbGJhY2sgZnVuY3Rpb25zIG9mIE5tdE1udSBtb2R1bGUKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk5vZGVFdmVudCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgdEVwbE5tdE5vZGVFdmVudCBOb2RlRXZlbnRfcCwKLQkJCQkJICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCi0JCQkJCSAgIFdPUkQgd0Vycm9yQ29kZV9wLAotCQkJCQkgICBCT09MIGZNYW5kYXRvcnlfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlDYk5vZGVFdmVudCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkgICAgdEVwbE5tdE5vZGVFdmVudCBOb2RlRXZlbnRfcCwKKwkJCQkgICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCisJCQkJICAgIHUxNiB3RXJyb3JDb2RlX3AsIEJPT0wgZk1hbmRhdG9yeV9wKTsKIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUNiQm9vdEV2ZW50KHRFcGxObXRCb290RXZlbnQgQm9vdEV2ZW50X3AsCi0JCQkJCSAgIHRFcGxObXRTdGF0ZSBObXRTdGF0ZV9wLAotCQkJCQkgICBXT1JEIHdFcnJvckNvZGVfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlDYkJvb3RFdmVudCh0RXBsTm10Qm9vdEV2ZW50IEJvb3RFdmVudF9wLAorCQkJCSAgICB0RXBsTm10U3RhdGUgTm10U3RhdGVfcCwKKwkJCQkgICAgdTE2IHdFcnJvckNvZGVfcCk7CiAjZW5kaWYKIAogI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTEVEVSkpICE9IDApCiAvLyBjYWxsYmFjayBmdW5jdGlvbiBvZiBMZWR1IG1vZHVsZQotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUNiTGVkU3RhdGVDaGFuZ2UodEVwbExlZFR5cGUgTGVkVHlwZV9wLAotCQkJCQkJQk9PTCBmT25fcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlDYkxlZFN0YXRlQ2hhbmdlKHRFcGxMZWRUeXBlIExlZFR5cGVfcCwgQk9PTCBmT25fcCk7CiAjZW5kaWYKIAogLy8gT0QgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKGltcGxlbWVudGVkIGluIE9iamRpY3QuYykKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEluaXRSYW0odEVwbE9iZEluaXRQYXJhbSBNRU0gKiBwSW5pdFBhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxPYmRJbml0UmFtKHRFcGxPYmRJbml0UGFyYW0gKnBJbml0UGFyYW1fcCk7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMjI2LDcgKzIyMyw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpSW5pdGlhbGl6ZSh0RXBsQXBpSW5pdFBhcmFtICogcEluaXRQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxBcGlJbml0aWFsaXplKHRFcGxBcGlJbml0UGFyYW0gKnBJbml0UGFyYW1fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxPYmRJbml0UGFyYW0gT2JkSW5pdFBhcmFtOwpAQCAtNDE1LDcgKzQxMiw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpU2h1dGRvd24odm9pZCkKK3RFcGxLZXJuZWwgRXBsQXBpU2h1dGRvd24odm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC01MjMsNyArNTIwLDcgQEAKIC8vIFN0YXRlOgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaUV4ZWNObXRDb21tYW5kKHRFcGxObXRFdmVudCBObXRFdmVudF9wKQordEVwbEtlcm5lbCBFcGxBcGlFeGVjTm10Q29tbWFuZCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC01NTMsMTUgKzU1MCwxNSBAQAogLy8gU3RhdGU6CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpTGlua09iamVjdCh1bnNpZ25lZCBpbnQgdWlPYmpJbmRleF9wLAotCQkJCSAgIHZvaWQgKnBWYXJfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgKnB1aVZhckVudHJpZXNfcCwKLQkJCQkgICB0RXBsT2JkU2l6ZSAqIHBFbnRyeVNpemVfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdWlGaXJzdFN1YmluZGV4X3ApCit0RXBsS2VybmVsIEVwbEFwaUxpbmtPYmplY3QodW5zaWduZWQgaW50IHVpT2JqSW5kZXhfcCwKKwkJCSAgICB2b2lkICpwVmFyX3AsCisJCQkgICAgdW5zaWduZWQgaW50ICpwdWlWYXJFbnRyaWVzX3AsCisJCQkgICAgdEVwbE9iZFNpemUgKnBFbnRyeVNpemVfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlGaXJzdFN1YmluZGV4X3ApCiB7Ci0JQllURSBiVmFyRW50cmllczsKLQlCWVRFIGJJbmRleEVudHJpZXM7Ci0JQllURSBNRU0gKnBiRGF0YTsKKwl1OCBiVmFyRW50cmllczsKKwl1OCBiSW5kZXhFbnRyaWVzOworCXU4ICpwYkRhdGE7CiAJdW5zaWduZWQgaW50IHVpU3ViaW5kZXg7CiAJdEVwbFZhclBhcmFtIFZhclBhcmFtOwogCXRFcGxPYmRTaXplIEVudHJ5U2l6ZTsKQEAgLTU3Nyw4ICs1NzQsOCBAQAogCQlnb3RvIEV4aXQ7CiAJfQogCi0JcGJEYXRhID0gKEJZVEUgTUVNICopIHBWYXJfcDsKLQliVmFyRW50cmllcyA9IChCWVRFKSAqIHB1aVZhckVudHJpZXNfcDsKKwlwYkRhdGEgPSAodTggKilwVmFyX3A7CisJYlZhckVudHJpZXMgPSAodTgpICogcHVpVmFyRW50cmllc19wOwogCVVzZWRTaXplID0gMDsKIAogCS8vIGluaXQgVmFyUGFyYW0gc3RydWN0dXJlIHdpdGggZGVmYXVsdCB2YWx1ZXMKQEAgLTU5MSw3ICs1ODgsNyBAQAogCQlFbnRyeVNpemUgPSAodEVwbE9iZFNpemUpIHNpemVvZihiSW5kZXhFbnRyaWVzKTsKIAkJUmV0Q29kZSA9IEVwbE9iZFJlYWRFbnRyeSh1aU9iakluZGV4X3AsCiAJCQkJCSAgMHgwMCwKLQkJCQkJICAodm9pZCBHRU5FUklDICopJmJJbmRleEVudHJpZXMsCisJCQkJCSAgKHZvaWQgKikmYkluZGV4RW50cmllcywKIAkJCQkJICAmRW50cnlTaXplKTsKIAogCQlpZiAoKFJldENvZGUgIT0ga0VwbFN1Y2Nlc3NmdWwpIHx8IChiSW5kZXhFbnRyaWVzID09IDB4MDApKSB7CkBAIC02MTAsNyArNjA3LDcgQEAKIAkvLyBvYmplY3QgYWN0dWFsbHkgaGFzLgogCWlmICgoYkluZGV4RW50cmllcyA+IChiVmFyRW50cmllcyArIHVpRmlyc3RTdWJpbmRleF9wIC0gMSkpICYmCiAJICAgIChiVmFyRW50cmllcyAhPSAweDAwKSkgewotCQliSW5kZXhFbnRyaWVzID0gKEJZVEUpIChiVmFyRW50cmllcyArIHVpRmlyc3RTdWJpbmRleF9wIC0gMSk7CisJCWJJbmRleEVudHJpZXMgPSAodTgpIChiVmFyRW50cmllcyArIHVpRmlyc3RTdWJpbmRleF9wIC0gMSk7CiAJfQogCS8vIG1hcCBlbnRyaWVzCiAJZm9yICh1aVN1YmluZGV4ID0gdWlGaXJzdFN1YmluZGV4X3A7IHVpU3ViaW5kZXggPD0gYkluZGV4RW50cmllczsKQEAgLTY3NywxMyArNjc0LDEzIEBACiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlSZWFkT2JqZWN0KHRFcGxTZG9Db21Db25IZGwgKiBwU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCSAgIHZvaWQgKnBEc3REYXRhX2xlX3AsCi0JCQkJICAgdW5zaWduZWQgaW50ICpwdWlTaXplX3AsCi0JCQkJICAgdEVwbFNkb1R5cGUgU2RvVHlwZV9wLCB2b2lkICpwVXNlckFyZ19wKQordEVwbEtlcm5lbCBFcGxBcGlSZWFkT2JqZWN0KHRFcGxTZG9Db21Db25IZGwgKnBTZG9Db21Db25IZGxfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkgICAgdm9pZCAqcERzdERhdGFfbGVfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgKnB1aVNpemVfcCwKKwkJCSAgICB0RXBsU2RvVHlwZSBTZG9UeXBlX3AsIHZvaWQgKnBVc2VyQXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtNzY1LDEzICs3NjIsMTMgQEAKIC8vCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVdyaXRlT2JqZWN0KHRFcGxTZG9Db21Db25IZGwgKiBwU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCSAgICB2b2lkICpwU3JjRGF0YV9sZV9wLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTaXplX3AsCi0JCQkJICAgIHRFcGxTZG9UeXBlIFNkb1R5cGVfcCwgdm9pZCAqcFVzZXJBcmdfcCkKK3RFcGxLZXJuZWwgRXBsQXBpV3JpdGVPYmplY3QodEVwbFNkb0NvbUNvbkhkbCAqcFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCSAgICAgdm9pZCAqcFNyY0RhdGFfbGVfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU2l6ZV9wLAorCQkJICAgICB0RXBsU2RvVHlwZSBTZG9UeXBlX3AsIHZvaWQgKnBVc2VyQXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtODUwLDcgKzg0Nyw3IEBACiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlGcmVlU2RvQ2hhbm5lbCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wKQordEVwbEtlcm5lbCBFcGxBcGlGcmVlU2RvQ2hhbm5lbCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTg4MSwxMCArODc4LDkgQEAKIC8vCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVJlYWRMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCQl2b2lkICpwRHN0RGF0YV9wLAotCQkJCQl1bnNpZ25lZCBpbnQgKnB1aVNpemVfcCkKK3RFcGxLZXJuZWwgRXBsQXBpUmVhZExvY2FsT2JqZWN0KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkJIHZvaWQgKnBEc3REYXRhX3AsIHVuc2lnbmVkIGludCAqcHVpU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKQEAgLTkxMSwxMCArOTA3LDEwIEBACiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlXcml0ZUxvY2FsT2JqZWN0KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCQkgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJIHVuc2lnbmVkIGludCB1aVNpemVfcCkKK3RFcGxLZXJuZWwgRXBsQXBpV3JpdGVMb2NhbE9iamVjdCh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCQkgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICB1bnNpZ25lZCBpbnQgdWlTaXplX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtOTM5LDggKzkzNSw4IEBACiAvLwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlNblRyaWdnZXJTdGF0ZUNoYW5nZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgICB0RXBsTm10Tm9kZUNvbW1hbmQgTm9kZUNvbW1hbmRfcCkKK3RFcGxLZXJuZWwgRXBsQXBpTW5UcmlnZ2VyU3RhdGVDaGFuZ2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJICAgICAgdEVwbE5tdE5vZGVDb21tYW5kIE5vZGVDb21tYW5kX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtOTY2LDcgKzk2Miw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpQ2JPYmRBY2Nlc3ModEVwbE9iZENiUGFyYW0gTUVNICogcFBhcmFtX3ApCit0RXBsS2VybmVsIEVwbEFwaUNiT2JkQWNjZXNzKHRFcGxPYmRDYlBhcmFtICpwUGFyYW1fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0xMDAxLDggKzk5Nyw4IEBACiAJCXsKIAkJCWlmICgocFBhcmFtX3AtPm1fT2JkRXZlbnQgPT0ga0VwbE9iZEV2UG9zdFdyaXRlKQogCQkJICAgICYmIChwUGFyYW1fcC0+bV91aVN1YkluZGV4ID09IDMpCi0JCQkgICAgJiYgKCooKERXT1JEICopIHBQYXJhbV9wLT5tX3BBcmcpICE9IDApKSB7Ci0JCQkJRFdPUkQgZHdWZXJpZnlDb25mSW52YWxpZCA9IDA7CisJCQkgICAgJiYgKCooKHUzMiAqKSBwUGFyYW1fcC0+bV9wQXJnKSAhPSAwKSkgeworCQkJCXUzMiBkd1ZlcmlmeUNvbmZJbnZhbGlkID0gMDsKIAkJCQkvLyBzZXQgQ0ZNX1ZlcmlmeUNvbmZpZ3VyYXRpb25fUkVDLlZlcmlmeUNvbmZJbnZhbGlkX1UzMiB0byAwCiAJCQkJUmV0ID0KIAkJCQkgICAgRXBsT2JkV3JpdGVFbnRyeSgweDEwMjAsIDQsCkBAIC0xMDE2LDkgKzEwMTIsOSBAQAogCWNhc2UgMHgxRjlFOgkJLy8gTk1UX1Jlc2V0Q21kX1U4CiAJCXsKIAkJCWlmIChwUGFyYW1fcC0+bV9PYmRFdmVudCA9PSBrRXBsT2JkRXZQcmVXcml0ZSkgewotCQkJCUJZVEUgYk5tdENvbW1hbmQ7CisJCQkJdTggYk5tdENvbW1hbmQ7CiAKLQkJCQliTm10Q29tbWFuZCA9ICooKEJZVEUgKikgcFBhcmFtX3AtPm1fcEFyZyk7CisJCQkJYk5tdENvbW1hbmQgPSAqKCh1OCAqKSBwUGFyYW1fcC0+bV9wQXJnKTsKIAkJCQkvLyBjaGVjayB2YWx1ZSByYW5nZQogCQkJCXN3aXRjaCAoKHRFcGxObXRDb21tYW5kKSBiTm10Q29tbWFuZCkgewogCQkJCWNhc2Uga0VwbE5tdENtZFJlc2V0Tm9kZToKQEAgLTEwMzYsOSArMTAzMiw5IEBACiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAocFBhcmFtX3AtPm1fT2JkRXZlbnQgPT0ga0VwbE9iZEV2UG9zdFdyaXRlKSB7Ci0JCQkJQllURSBiTm10Q29tbWFuZDsKKwkJCQl1OCBiTm10Q29tbWFuZDsKIAotCQkJCWJObXRDb21tYW5kID0gKigoQllURSAqKSBwUGFyYW1fcC0+bV9wQXJnKTsKKwkJCQliTm10Q29tbWFuZCA9ICooKHU4ICopIHBQYXJhbV9wLT5tX3BBcmcpOwogCQkJCS8vIGNoZWNrIHZhbHVlIHJhbmdlCiAJCQkJc3dpdGNoICgodEVwbE5tdENvbW1hbmQpIGJObXRDb21tYW5kKSB7CiAJCQkJY2FzZSBrRXBsTm10Q21kUmVzZXROb2RlOgpAQCAtMTExNSw3ICsxMTExLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqIHBFcGxFdmVudF9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEVwbEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEV2ZW50RXJyb3IgKnBFdmVudEVycm9yOwpAQCAtMTE4OCwxNSArMTE4NCwxNCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk5tdFN0YXRlQ2hhbmdlKHRFcGxFdmVudE5tdFN0YXRlQ2hhbmdlCi0JCQkJCQlObXRTdGF0ZUNoYW5nZV9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpQ2JObXRTdGF0ZUNoYW5nZSh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZSBObXRTdGF0ZUNoYW5nZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JQllURSBiTm10U3RhdGU7CisJdTggYk5tdFN0YXRlOwogCXRFcGxBcGlFdmVudEFyZyBFdmVudEFyZzsKIAogCS8vIHNhdmUgTk1UIHN0YXRlIGluIE9ECi0JYk5tdFN0YXRlID0gKEJZVEUpIE5tdFN0YXRlQ2hhbmdlX3AubV9OZXdObXRTdGF0ZTsKKwliTm10U3RhdGUgPSAodTgpIE5tdFN0YXRlQ2hhbmdlX3AubV9OZXdObXRTdGF0ZTsKIAlSZXQgPSBFcGxPYmRXcml0ZUVudHJ5KDB4MUY4QywgMCwgJmJObXRTdGF0ZSwgMSk7CiAJaWYgKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgewogCQlnb3RvIEV4aXQ7CkBAIC0xMjc1LDcgKzEyNzAsNyBAQAogCWNhc2Uga0VwbE5tdENzTm90QWN0aXZlOgogCQl7CiAJCQkvLyBpbmRpY2F0ZSBjb21wbGV0aW9uIG9mIHJlc2V0IGluIE5NVF9SZXNldENtZF9VOAotCQkJYk5tdFN0YXRlID0gKEJZVEUpIGtFcGxObXRDbWRJbnZhbGlkU2VydmljZTsKKwkJCWJObXRTdGF0ZSA9ICh1OCkga0VwbE5tdENtZEludmFsaWRTZXJ2aWNlOwogCQkJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOUUsIDAsICZiTm10U3RhdGUsIDEpOwogCQkJaWYgKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgewogCQkJCWdvdG8gRXhpdDsKQEAgLTE0MTEsMTQgKzE0MDYsMTQgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpVXBkYXRlRGxsQ29uZmlnKEJPT0wgZlVwZGF0ZUlkZW50aXR5X3ApCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxBcGlVcGRhdGVEbGxDb25maWcoQk9PTCBmVXBkYXRlSWRlbnRpdHlfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxEbGxDb25maWdQYXJhbSBEbGxDb25maWdQYXJhbTsKIAl0RXBsRGxsSWRlbnRQYXJhbSBEbGxJZGVudFBhcmFtOwogCXRFcGxPYmRTaXplIE9iZFNpemU7Ci0JV09SRCB3VGVtcDsKLQlCWVRFIGJUZW1wOworCXUxNiB3VGVtcDsKKwl1OCBiVGVtcDsKIAogCS8vIGNvbmZpZ3VyZSBEbGwKIAlFUExfTUVNU0VUKCZEbGxDb25maWdQYXJhbSwgMCwgc2l6ZW9mKERsbENvbmZpZ1BhcmFtKSk7CkBAIC0xNjM0LDExICsxNjI5LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVVwZGF0ZU9iZCh2b2lkKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpVXBkYXRlT2JkKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQlXT1JEIHdUZW1wOwotCUJZVEUgYlRlbXA7CisJdTE2IHdUZW1wOworCXU4IGJUZW1wOwogCiAJLy8gc2V0IG5vZGUgaWQgaW4gT0QKIAlSZXQgPSBFcGxPYmRTZXROb2RlSWQoRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpTm9kZUlkLAkvLyBub2RlIGlkCkBAIC0xNjgwLDE0ICsxNjc1LDE0IEBACiAJCSAgIH0gKi8KIAl9CiAKLQl3VGVtcCA9IChXT1JEKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlJc29jaHJUeE1heFBheWxvYWQ7CisJd1RlbXAgPSAodTE2KSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlJc29jaHJUeE1heFBheWxvYWQ7CiAJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOTgsIDEsICZ3VGVtcCwgMik7CiAvKiAgICBpZihSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpCiAgICAgewogICAgICAgICBnb3RvIEV4aXQ7CiAgICAgfSovCiAKLQl3VGVtcCA9IChXT1JEKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlJc29jaHJSeE1heFBheWxvYWQ7CisJd1RlbXAgPSAodTE2KSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlJc29jaHJSeE1heFBheWxvYWQ7CiAJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOTgsIDIsICZ3VGVtcCwgMik7CiAvKiAgICBpZihSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpCiAgICAgewpAQCAtMTcwNiw3ICsxNzAxLDcgQEAKIAlpZiAoRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpUHJlcUFjdFBheWxvYWRMaW1pdCA8PQogCSAgICBFUExfQ19ETExfSVNPQ0hSX01BWF9QQVlMKSB7CiAJCXdUZW1wID0KLQkJICAgIChXT1JEKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlQcmVxQWN0UGF5bG9hZExpbWl0OworCQkgICAgKHUxNikgRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpUHJlcUFjdFBheWxvYWRMaW1pdDsKIAkJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOTgsIDQsICZ3VGVtcCwgMik7CiAvKiAgICBpZihSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpCiAgICAgewpAQCAtMTcxNyw3ICsxNzEyLDcgQEAKIAlpZiAoRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpUHJlc0FjdFBheWxvYWRMaW1pdCA8PQogCSAgICBFUExfQ19ETExfSVNPQ0hSX01BWF9QQVlMKSB7CiAJCXdUZW1wID0KLQkJICAgIChXT1JEKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlQcmVzQWN0UGF5bG9hZExpbWl0OworCQkgICAgKHUxNikgRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpUHJlc0FjdFBheWxvYWRMaW1pdDsKIAkJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeSgweDFGOTgsIDUsICZ3VGVtcCwgMik7CiAvKiAgICBpZihSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpCiAgICAgewpAQCAtMTczNSw3ICsxNzMwLDcgQEAKICAgICB9Ki8KIAogCWlmIChFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlNdWx0aXBsQ3ljbGVDbnQgPD0gMHhGRikgewotCQliVGVtcCA9IChCWVRFKSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlNdWx0aXBsQ3ljbGVDbnQ7CisJCWJUZW1wID0gKHU4KSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlNdWx0aXBsQ3ljbGVDbnQ7CiAJCVJldCA9IEVwbE9iZFdyaXRlRW50cnkoMHgxRjk4LCA3LCAmYlRlbXAsIDEpOwogLyogICAgaWYoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKQogICAgIHsKQEAgLTE3NDUsNyArMTc0MCw3IEBACiAKIAlpZiAoRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpQXN5bmNNdHUgPD0KIAkgICAgRVBMX0NfRExMX01BWF9BU1lOQ19NVFUpIHsKLQkJd1RlbXAgPSAoV09SRCkgRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpQXN5bmNNdHU7CisJCXdUZW1wID0gKHUxNikgRXBsQXBpSW5zdGFuY2VfZy5tX0luaXRQYXJhbS5tX3VpQXN5bmNNdHU7CiAJCVJldCA9IEVwbE9iZFdyaXRlRW50cnkoMHgxRjk4LCA4LCAmd1RlbXAsIDIpOwogLyogICAgaWYoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKQogICAgIHsKQEAgLTE3NTQsNyArMTc0OSw3IEBACiAJfQogCiAJaWYgKEVwbEFwaUluc3RhbmNlX2cubV9Jbml0UGFyYW0ubV91aVByZXNjYWxlciA8PSAxMDAwKSB7Ci0JCXdUZW1wID0gKFdPUkQpIEVwbEFwaUluc3RhbmNlX2cubV9Jbml0UGFyYW0ubV91aVByZXNjYWxlcjsKKwkJd1RlbXAgPSAodTE2KSBFcGxBcGlJbnN0YW5jZV9nLm1fSW5pdFBhcmFtLm1fdWlQcmVzY2FsZXI7CiAJCVJldCA9IEVwbE9iZFdyaXRlRW50cnkoMHgxRjk4LCA5LCAmd1RlbXAsIDIpOwogCQkvLyBpZ25vcmUgcmV0dXJuIGNvZGUKIAkJUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CkBAIC0xODQ0LDcgKzE4MzksNyBAQAogCQkvLyB3cml0ZSBEZXZpY2UgTmFtZSAoMHgxMDA4KQogCQlSZXQgPQogCQkgICAgRXBsT2JkV3JpdGVFbnRyeSgweDEwMDgsIDAsCi0JCQkJICAgICAodm9pZCBHRU5FUklDICopRXBsQXBpSW5zdGFuY2VfZy4KKwkJCQkgICAgICh2b2lkICopRXBsQXBpSW5zdGFuY2VfZy4KIAkJCQkgICAgIG1fSW5pdFBhcmFtLm1fcHN6RGV2TmFtZSwKIAkJCQkgICAgICh0RXBsT2JkU2l6ZSkgc3RybGVuKEVwbEFwaUluc3RhbmNlX2cuCiAJCQkJCQkJICBtX0luaXRQYXJhbS4KQEAgLTE4NTksNyArMTg1NCw3IEBACiAJCS8vIHdyaXRlIEhhcmR3YXJlIHZlcnNpb24gKDB4MTAwOSkKIAkJUmV0ID0KIAkJICAgIEVwbE9iZFdyaXRlRW50cnkoMHgxMDA5LCAwLAotCQkJCSAgICAgKHZvaWQgR0VORVJJQyAqKUVwbEFwaUluc3RhbmNlX2cuCisJCQkJICAgICAodm9pZCAqKUVwbEFwaUluc3RhbmNlX2cuCiAJCQkJICAgICBtX0luaXRQYXJhbS5tX3Bzekh3VmVyc2lvbiwKIAkJCQkgICAgICh0RXBsT2JkU2l6ZSkgc3RybGVuKEVwbEFwaUluc3RhbmNlX2cuCiAJCQkJCQkJICBtX0luaXRQYXJhbS4KQEAgLTE4NzQsNyArMTg2OSw3IEBACiAJCS8vIHdyaXRlIFNvZnR3YXJlIHZlcnNpb24gKDB4MTAwQSkKIAkJUmV0ID0KIAkJICAgIEVwbE9iZFdyaXRlRW50cnkoMHgxMDBBLCAwLAotCQkJCSAgICAgKHZvaWQgR0VORVJJQyAqKUVwbEFwaUluc3RhbmNlX2cuCisJCQkJICAgICAodm9pZCAqKUVwbEFwaUluc3RhbmNlX2cuCiAJCQkJICAgICBtX0luaXRQYXJhbS5tX3BzelN3VmVyc2lvbiwKIAkJCQkgICAgICh0RXBsT2JkU2l6ZSkgc3RybGVuKEVwbEFwaUluc3RhbmNlX2cuCiAJCQkJCQkJICBtX0luaXRQYXJhbS4KQEAgLTE5MDUsNyArMTkwMCw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9DKSkgIT0gMCkKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYlNkb0Nvbih0RXBsU2RvQ29tRmluaXNoZWQgKiBwU2RvQ29tRmluaXNoZWRfcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbEFwaUNiU2RvQ29uKHRFcGxTZG9Db21GaW5pc2hlZCAqcFNkb0NvbUZpbmlzaGVkX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFwaUV2ZW50QXJnIEV2ZW50QXJnOwpAQCAtMTk0NiwxMCArMTk0MSwxMCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlDYk5vZGVFdmVudCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgdEVwbE5tdE5vZGVFdmVudCBOb2RlRXZlbnRfcCwKLQkJCQkJICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCi0JCQkJCSAgIFdPUkQgd0Vycm9yQ29kZV9wLCBCT09MIGZNYW5kYXRvcnlfcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbEFwaUNiTm9kZUV2ZW50KHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJCSAgICB0RXBsTm10Tm9kZUV2ZW50IE5vZGVFdmVudF9wLAorCQkJCSAgICB0RXBsTm10U3RhdGUgTm10U3RhdGVfcCwKKwkJCQkgICAgdTE2IHdFcnJvckNvZGVfcCwgQk9PTCBmTWFuZGF0b3J5X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFwaUV2ZW50QXJnIEV2ZW50QXJnOwpAQCAtMTk5MCw5ICsxOTg1LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpQ2JCb290RXZlbnQodEVwbE5tdEJvb3RFdmVudCBCb290RXZlbnRfcCwKLQkJCQkJICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCi0JCQkJCSAgIFdPUkQgd0Vycm9yQ29kZV9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpQ2JCb290RXZlbnQodEVwbE5tdEJvb3RFdmVudCBCb290RXZlbnRfcCwKKwkJCQkgICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCisJCQkJICAgIHUxNiB3RXJyb3JDb2RlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFwaUV2ZW50QXJnIEV2ZW50QXJnOwpAQCAtMjAzMyw4ICsyMDI4LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsQXBpQ2JMZWRTdGF0ZUNoYW5nZSh0RXBsTGVkVHlwZSBMZWRUeXBlX3AsCi0JCQkJCQlCT09MIGZPbl9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsQXBpQ2JMZWRTdGF0ZUNoYW5nZSh0RXBsTGVkVHlwZSBMZWRUeXBlX3AsIEJPT0wgZk9uX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFwaUV2ZW50QXJnIEV2ZW50QXJnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBcGlMaW51eEtlcm5lbC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBcGlMaW51eEtlcm5lbC5jCmluZGV4IDA1Y2EwNjIuLmNiM2UyNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsQXBpTGludXhLZXJuZWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaUxpbnV4S2VybmVsLmMKQEAgLTcyLDkgKzcyLDYgQEAKIAogLy8ga2VybmVsIG1vZHVsIGFuZCBkcml2ZXIKIAotLy8jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotLy8jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KQEAgLTkyLDI1ICs4OSwxMSBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCi0jaWZkZWYgQ09ORklHX0RFVkZTX0ZTCi0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZmc19mc19rZXJuZWwuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAiRXBsLmgiCiAjaW5jbHVkZSAiRXBsQXBpTGludXguaCIKIC8vI2luY2x1ZGUgImtlcm5lbC9FcGxQZG9rQ2FsLmgiCiAjaW5jbHVkZSAicHJvY19mcy5oIgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwwKQotICAgIC8vIHJlbW92ZSAoIm1ha2UgaW52aXNpYmxlIikgb2Jzb2xldGUgc3ltYm9scyBmb3Iga2VybmVsIHZlcnNpb25zIDIuNgotICAgIC8vIGFuZCBoaWdoZXIKLSNkZWZpbmUgTU9EX0lOQ19VU0VfQ09VTlQKLSNkZWZpbmUgTU9EX0RFQ19VU0VfQ09VTlQKLSNkZWZpbmUgRVhQT1JUX05PX1NZTUJPTFMKLSNlbHNlCi0jZXJyb3IgIlRoaXMgZHJpdmVyIG5lZWRzIGEgMi42Lngga2VybmVsIG9yIGhpZ2hlciIKLSNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEzOSw3ICsxMjIsNyBAQAogCiAvLyBUcmFjZVBvaW50IHN1cHBvcnQgZm9yIHJlYWx0aW1lLWRlYnVnZ2luZwogI2lmZGVmIF9EQkdfVFJBQ0VfUE9JTlRTXwotdm9pZCBQVUJMSUMgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChCWVRFIGJUcmFjZVBvaW50TnVtYmVyX3ApOwordm9pZCBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHU4IGJUcmFjZVBvaW50TnVtYmVyX3ApOwogI2RlZmluZSBUR1RfREJHX1NJR05BTF9UUkFDRV9QT0lOVChwKSAgIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQocCkKICNlbHNlCiAjZGVmaW5lIFRHVF9EQkdfU0lHTkFMX1RSQUNFX1BPSU5UKHApCkBAIC0xNTksMTkgKzE0MiwxMCBAQAogLy8gIEdsb2JhbCB2YXJpYWJsZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZmRlZiBDT05GSUdfREVWRlNfRlMKLQotICAgIC8vIGRyaXZlciBtYWpvciBudW1iZXIKLXN0YXRpYyBpbnQgbkRydk1ham9yTnVtYmVyX2c7Ci0KLSNlbHNlCi0KICAgICAvLyBkZXZpY2UgbnVtYmVyIChtYWpvciBhbmQgbWlub3IpCiBzdGF0aWMgZGV2X3QgbkRldk51bV9nOwogc3RhdGljIHN0cnVjdCBjZGV2ICpwRXBsX2NkZXZfZzsKIAotI2VuZGlmCi0KIHN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgdWlFcGxTdGF0ZV9nID0gRVBMX1NUQVRFX05PVE9QRU47CiAKIHN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIFNlbWFwaG9yZUNiRXZlbnRfZzsJLy8gc2VtYXBob3JlIGZvciBFcGxMaW5DYkV2ZW50CkBAIC0yMDQsMTEgKzE3OCwxMSBAQAogLy8gIFByb3RvdHlwZXMgb2YgaW50ZXJuYWwgZnVuY3Rpb25zCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxMaW5DYkV2ZW50KHRFcGxBcGlFdmVudFR5cGUgRXZlbnRUeXBlX3AsCS8vIElOOiBldmVudCB0eXBlIChlbnVtKQotCQkJCXRFcGxBcGlFdmVudEFyZyAqIHBFdmVudEFyZ19wLAkvLyBJTjogZXZlbnQgYXJndW1lbnQgKHVuaW9uKQotCQkJCXZvaWQgR0VORVJJQyAqIHBVc2VyQXJnX3ApOwordEVwbEtlcm5lbCBFcGxMaW5DYkV2ZW50KHRFcGxBcGlFdmVudFR5cGUgRXZlbnRUeXBlX3AsCS8vIElOOiBldmVudCB0eXBlIChlbnVtKQorCQkJIHRFcGxBcGlFdmVudEFyZyAqcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCisJCQkgdm9pZCAqcFVzZXJBcmdfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbExpbkNiU3luYyh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsTGluQ2JTeW5jKHZvaWQpOwogCiBzdGF0aWMgaW50IF9faW5pdCBFcGxMaW5Jbml0KHZvaWQpOwogc3RhdGljIHZvaWQgX19leGl0IEVwbExpbkV4aXQodm9pZCk7CkBAIC0yMjYsOCArMjAwLDYgQEAKIC8vICBLZXJuZWwgTW9kdWxlIHNwZWNpZmljIERhdGEgU3RydWN0dXJlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVhQT1JUX05PX1NZTUJPTFM7Ci0KIG1vZHVsZV9pbml0KEVwbExpbkluaXQpOwogbW9kdWxlX2V4aXQoRXBsTGluRXhpdCk7CiAKQEAgLTI1OSw5ICsyMzEsNiBAQAogCXRFcGxLZXJuZWwgRXBsUmV0OwogCWludCBpRXJyOwogCWludCBpUmV0OwotI2lmZGVmIENPTkZJR19ERVZGU19GUwotCWludCBuTWlub3JOdW1iZXI7Ci0jZW5kaWYKIAogCVRSQUNFMCgiRVBMOiArIEVwbExpbkluaXQuLi5cbiIpOwogCVRSQUNFMigiRVBMOiAgIERyaXZlciBidWlsZDogJXMgLyAlc1xuIiwgX19EQVRFX18sIF9fVElNRV9fKTsKQEAgLTI3NSw0NCArMjQ0LDYgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZXYWl0UXVldWVQcm9jZXNzX2cpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJldhaXRRdWV1ZVJlbGVhc2VfZyk7CiAKLSNpZmRlZiBDT05GSUdfREVWRlNfRlMKLQotCS8vIHJlZ2lzdGVyIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxlcgotCVRSQUNFMigiRVBMOiAgIEluc3RhbGxpbmcgRHJpdmVyICclcycsIFZlcnNpb24gJXMuLi5cbiIsCi0JICAgICAgIEVQTExJTl9EUlZfTkFNRSwgRVBMX1BST0RVQ1RfVkVSU0lPTik7Ci0JVFJBQ0UwKCJFUEw6ICAgKHVzaW5nIGR5bmFtaWMgbWFqb3IgbnVtYmVyIGFzc2lnbm1lbnQpXG4iKTsKLQluRHJ2TWFqb3JOdW1iZXJfZyA9Ci0JICAgIHJlZ2lzdGVyX2NocmRldigwLCBFUExMSU5fRFJWX05BTUUsICZFcGxMaW5GaWxlT3BzX2cpOwotCWlmIChuRHJ2TWFqb3JOdW1iZXJfZyAhPSAwKSB7Ci0JCVRSQUNFMgotCQkgICAgKCJFUEw6ICAgRHJpdmVyICclcycgaW5zdGFsbGVkIHN1Y2Nlc3NmdWwsIGFzc2lnbmVkIE1ham9yTnVtYmVyPSVkXG4iLAotCQkgICAgIEVQTExJTl9EUlZfTkFNRSwgbkRydk1ham9yTnVtYmVyX2cpOwotCX0gZWxzZSB7Ci0JCVRSQUNFMQotCQkgICAgKCJFUEw6ICAgRVJST1I6IERyaXZlciAnJXMnIGlzIHVuYWJsZSB0byBnZXQgYSBmcmVlIE1ham9yTnVtYmVyIVxuIiwKLQkJICAgICBFUExMSU5fRFJWX05BTUUpOwotCQlpUmV0ID0gLUVJTzsKLQkJZ290byBFeGl0OwotCX0KLQotCS8vIGNyZWF0ZSBkZXZpY2Ugbm9kZSBpbiBERVZGUwotCW5NaW5vck51bWJlciA9IDA7Ci0JVFJBQ0UxKCJFUEw6ICAgQ3JlYXRpbmcgZGV2aWNlIG5vZGUgJy9kZXYvJXMnLi4uXG4iLCBFUExMSU5fREVWX05BTUUpOwotCWlFcnIgPQotCSAgICBkZXZmc19ta19jZGV2KE1LREVWKG5EcnZNYWpvck51bWJlcl9nLCBuTWlub3JOdW1iZXIpLAotCQkJICBTX0lGQ0hSIHwgU19JUlVHTyB8IFNfSVdVR08sIEVQTExJTl9ERVZfTkFNRSk7Ci0JaWYgKGlFcnIgPT0gMCkgewotCQlUUkFDRTEoIkVQTDogICBEZXZpY2Ugbm9kZSAnL2Rldi8lcycgY3JlYXRlZCBzdWNjZXNzZnVsLlxuIiwKLQkJICAgICAgIEVQTExJTl9ERVZfTkFNRSk7Ci0JfSBlbHNlIHsKLQkJVFJBQ0UxKCJFUEw6ICAgRVJST1I6IHVuYWJsZSB0byBjcmVhdGUgZGV2aWNlIG5vZGUgJy9kZXYvJXMnXG4iLAotCQkgICAgICAgRVBMTElOX0RFVl9OQU1FKTsKLQkJaVJldCA9IC1FSU87Ci0JCWdvdG8gRXhpdDsKLQl9Ci0KLSNlbHNlCi0KIAkvLyByZWdpc3RlciBjaGFyYWN0ZXIgZGV2aWNlIGhhbmRsZXIKIAkvLyBvbmx5IG9uZSBNaW5vciByZXF1aXJlZAogCVRSQUNFMigiRVBMOiAgIEluc3RhbGxpbmcgRHJpdmVyICclcycsIFZlcnNpb24gJXMuLi5cbiIsCkBAIC0zNDEsNyArMjcyLDYgQEAKIAkJaVJldCA9IC1FSU87CiAJCWdvdG8gRXhpdDsKIAl9Ci0jZW5kaWYKIAogCS8vIGNyZWF0ZSBkZXZpY2Ugbm9kZSBpbiBQUk9DRlMKIAlFcGxSZXQgPSBFcGxMaW5Qcm9jSW5pdCgpOwpAQCAtMzc3LDI1ICszMDcsMTIgQEAKIAogCVRSQUNFMCgiRVBMOiArIEVwbExpbkV4aXQuLi5cbiIpOwogCi0jaWZkZWYgQ09ORklHX0RFVkZTX0ZTCi0KLQkvLyByZW1vdmUgZGV2aWNlIG5vZGUgZnJvbSBERVZGUwotCWRldmZzX3JlbW92ZShFUExMSU5fREVWX05BTUUpOwotCVRSQUNFMSgiRVBMOiAgIERldmljZSBub2RlICcvZGV2LyVzJyByZW1vdmVkLlxuIiwgRVBMTElOX0RFVl9OQU1FKTsKLQotCS8vIHVucmVnaXN0ZXIgY2hhcmFjdGVyIGRldmljZSBoYW5kbGVyCi0JdW5yZWdpc3Rlcl9jaHJkZXYobkRydk1ham9yTnVtYmVyX2csIEVQTExJTl9EUlZfTkFNRSk7Ci0KLSNlbHNlCi0KIAkvLyByZW1vdmUgY2RldiBzdHJ1Y3R1cmUKIAljZGV2X2RlbChwRXBsX2NkZXZfZyk7CiAKIAkvLyB1bnJlZ2lzdGVyIGNoYXJhY3RlciBkZXZpY2UgaGFuZGxlcgogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihuRGV2TnVtX2csIDEpOwogCi0jZW5kaWYKLQogCVRSQUNFMSgiRVBMOiAgIERyaXZlciAnJXMnIHJlbW92ZWQuXG4iLCBFUExMSU5fRFJWX05BTUUpOwogCiAJVFJBQ0UwKCJFUEw6IC0gRXBsTGluRXhpdFxuIik7CkBAIC00MTYsOCArMzMzLDYgQEAKIAogCVRSQUNFMCgiRVBMOiArIEVwbExpbk9wZW4uLi5cbiIpOwogCi0JTU9EX0lOQ19VU0VfQ09VTlQ7Ci0KIAlpZiAodWlFcGxTdGF0ZV9nICE9IEVQTF9TVEFURV9OT1RPUEVOKSB7CS8vIHN0YWNrIGFscmVhZHkgaW5pdGlhbGl6ZWQKIAkJaVJldCA9IC1FQUxSRUFEWTsKIAl9IGVsc2UgewpAQCAtNDkwLDggKzQwNSw2IEBACiAJdWlFcGxTdGF0ZV9nID0gRVBMX1NUQVRFX05PVE9QRU47CiAJaVJldCA9IDA7CiAKLQlNT0RfREVDX1VTRV9DT1VOVDsKLQogCVRSQUNFMSgiRVBMOiAtIEVwbExpblJlbGVhc2UgKGlSZXQ9JWQpXG4iLCBpUmV0KTsKIAlyZXR1cm4gKGlSZXQpOwogCkBAIC0xMTU4LDkgKzEwNzEsOSBAQAogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbExpbkNiRXZlbnQodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCi0JCQkJdEVwbEFwaUV2ZW50QXJnICogcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCi0JCQkJdm9pZCBHRU5FUklDICogcFVzZXJBcmdfcCkKK3RFcGxLZXJuZWwgRXBsTGluQ2JFdmVudCh0RXBsQXBpRXZlbnRUeXBlIEV2ZW50VHlwZV9wLAkvLyBJTjogZXZlbnQgdHlwZSAoZW51bSkKKwkJCSB0RXBsQXBpRXZlbnRBcmcgKnBFdmVudEFyZ19wLAkvLyBJTjogZXZlbnQgYXJndW1lbnQgKHVuaW9uKQorCQkJIHZvaWQgKnBVc2VyQXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBFcGxSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAlpbnQgaUVycjsKQEAgLTEyMjQsNyArMTEzNyw3IEBACiAJcmV0dXJuIEVwbFJldDsKIH0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsTGluQ2JTeW5jKHZvaWQpCit0RXBsS2VybmVsIEVwbExpbkNiU3luYyh2b2lkKQogewogCXRFcGxLZXJuZWwgRXBsUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJaW50IGlFcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaVByb2Nlc3NJbWFnZS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxBcGlQcm9jZXNzSW1hZ2UuYwppbmRleCAyYjJmZGYyLi43ZDU1MDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEFwaVByb2Nlc3NJbWFnZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsQXBpUHJvY2Vzc0ltYWdlLmMKQEAgLTY5LDExICs2OSw4IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiRXBsLmgiCi0vLyNpbmNsdWRlICJrZXJuZWwvRXBsUGRva0NhbC5oIgogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTI5LDEwICsxMjYsMTAgQEAKICNpZiAoKEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX0lOID4gMCkgfHwgKEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX09VVCA+IDApKQogdHlwZWRlZiBzdHJ1Y3QgewogI2lmIEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX0lOID4gMAotCUJZVEUgbV9hYlByb2Nlc3NJbWFnZUlucHV0W0VQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX0lOXTsKKwl1OCBtX2FiUHJvY2Vzc0ltYWdlSW5wdXRbRVBMX0FQSV9QUk9DRVNTX0lNQUdFX1NJWkVfSU5dOwogI2VuZGlmCiAjaWYgRVBMX0FQSV9QUk9DRVNTX0lNQUdFX1NJWkVfT1VUID4gMAotCUJZVEUgbV9hYlByb2Nlc3NJbWFnZU91dHB1dFtFUExfQVBJX1BST0NFU1NfSU1BR0VfU0laRV9PVVRdOworCXU4IG1fYWJQcm9jZXNzSW1hZ2VPdXRwdXRbRVBMX0FQSV9QUk9DRVNTX0lNQUdFX1NJWkVfT1VUXTsKICNlbmRpZgogCiB9IHRFcGxBcGlQcm9jZXNzSW1hZ2VJbnN0YW5jZTsKQEAgLTE2OSw3ICsxNjYsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVByb2Nlc3NJbWFnZVNldHVwKHZvaWQpCit0RXBsS2VybmVsIEVwbEFwaVByb2Nlc3NJbWFnZVNldHVwKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKICNpZiAoKEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX0lOID4gMCkgfHwgKEVQTF9BUElfUFJPQ0VTU19JTUFHRV9TSVpFX09VVCA+IDApKQpAQCAtMjgwLDI0ICsyNzcsMTYgQEAKIC8vIFN0YXRlOgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEFwaVByb2Nlc3NJbWFnZUV4Y2hhbmdlSW4odEVwbEFwaVByb2Nlc3NJbWFnZSAqIHBQSV9wKQordEVwbEtlcm5lbCBFcGxBcGlQcm9jZXNzSW1hZ2VFeGNoYW5nZUluKHRFcGxBcGlQcm9jZXNzSW1hZ2UgKnBQSV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKICNpZiBFUExfQVBJX1BST0NFU1NfSU1BR0VfU0laRV9JTiA+IDAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAJY29weV90b191c2VyKHBQSV9wLT5tX3BJbWFnZSwKIAkJICAgICBFcGxBcGlQcm9jZXNzSW1hZ2VJbnN0YW5jZV9nLm1fYWJQcm9jZXNzSW1hZ2VJbnB1dCwKIAkJICAgICBtaW4ocFBJX3AtPm1fdWlTaXplLAogCQkJIHNpemVvZihFcGxBcGlQcm9jZXNzSW1hZ2VJbnN0YW5jZV9nLgogCQkJCW1fYWJQcm9jZXNzSW1hZ2VJbnB1dCkpKTsKLSNlbHNlCi0JRVBMX01FTUNQWShwUElfcC0+bV9wSW1hZ2UsCi0JCSAgIEVwbEFwaVByb2Nlc3NJbWFnZUluc3RhbmNlX2cubV9hYlByb2Nlc3NJbWFnZUlucHV0LAotCQkgICBtaW4ocFBJX3AtPm1fdWlTaXplLAotCQkgICAgICAgc2l6ZW9mKEVwbEFwaVByb2Nlc3NJbWFnZUluc3RhbmNlX2cuCi0JCQkgICAgICBtX2FiUHJvY2Vzc0ltYWdlSW5wdXQpKSk7Ci0jZW5kaWYKICNlbmRpZgogCiAJcmV0dXJuIFJldDsKQEAgLTMxNSwyNCArMzA0LDE2IEBACiAvLyBTdGF0ZToKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxBcGlQcm9jZXNzSW1hZ2VFeGNoYW5nZU91dCh0RXBsQXBpUHJvY2Vzc0ltYWdlICogcFBJX3ApCit0RXBsS2VybmVsIEVwbEFwaVByb2Nlc3NJbWFnZUV4Y2hhbmdlT3V0KHRFcGxBcGlQcm9jZXNzSW1hZ2UgKnBQSV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKICNpZiBFUExfQVBJX1BST0NFU1NfSU1BR0VfU0laRV9PVVQgPiAwCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogCWNvcHlfZnJvbV91c2VyKEVwbEFwaVByb2Nlc3NJbWFnZUluc3RhbmNlX2cubV9hYlByb2Nlc3NJbWFnZU91dHB1dCwKIAkJICAgICAgIHBQSV9wLT5tX3BJbWFnZSwKIAkJICAgICAgIG1pbihwUElfcC0+bV91aVNpemUsCiAJCQkgICBzaXplb2YoRXBsQXBpUHJvY2Vzc0ltYWdlSW5zdGFuY2VfZy4KIAkJCQkgIG1fYWJQcm9jZXNzSW1hZ2VPdXRwdXQpKSk7Ci0jZWxzZQotCUVQTF9NRU1DUFkoRXBsQXBpUHJvY2Vzc0ltYWdlSW5zdGFuY2VfZy5tX2FiUHJvY2Vzc0ltYWdlT3V0cHV0LAotCQkgICBwUElfcC0+bV9wSW1hZ2UsCi0JCSAgIG1pbihwUElfcC0+bV91aVNpemUsCi0JCSAgICAgICBzaXplb2YoRXBsQXBpUHJvY2Vzc0ltYWdlSW5zdGFuY2VfZy4KLQkJCSAgICAgIG1fYWJQcm9jZXNzSW1hZ2VPdXRwdXQpKSk7Ci0jZW5kaWYKICNlbmRpZgogCiAJcmV0dXJuIFJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbERsbC5oCmluZGV4IDM2NjU3ZjIuLmI5NjAxOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGwuaApAQCAtMTM1LDIyICsxMzUsMjIgQEAKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gbG9jYWwgbm9kZSBJRAogCiAJLy8gMHgxRjgyOiBOTVRfRmVhdHVyZUZsYWdzX1UzMgotCURXT1JEIG1fZHdGZWF0dXJlRmxhZ3M7CisJdTMyIG1fZHdGZWF0dXJlRmxhZ3M7CiAJLy8gQ3ljbGUgTGVuZ3RoICgweDEwMDY6IE5NVF9DeWNsZUxlbl9VMzIpIGluIFt1c10KLQlEV09SRCBtX2R3Q3ljbGVMZW47CS8vIHJlcXVpcmVkIGZvciBlcnJvciBkZXRlY3Rpb24KKwl1MzIgbV9kd0N5Y2xlTGVuOwkvLyByZXF1aXJlZCBmb3IgZXJyb3IgZGV0ZWN0aW9uCiAJLy8gMHgxRjk4OiBOTVRfQ3ljbGVUaW1pbmdfUkVDCiAJLy8gMHgxRjk4LjE6IElzb2NoclR4TWF4UGF5bG9hZF9VMTYKIAl1bnNpZ25lZCBpbnQgbV91aUlzb2NoclR4TWF4UGF5bG9hZDsJLy8gY29uc3QKIAkvLyAweDFGOTguMjogSXNvY2hyUnhNYXhQYXlsb2FkX1UxNgogCXVuc2lnbmVkIGludCBtX3VpSXNvY2hyUnhNYXhQYXlsb2FkOwkvLyBjb25zdAogCS8vIDB4MUY5OC4zOiBQUmVzTWF4TGF0ZW5jeV9VMzIKLQlEV09SRCBtX2R3UHJlc01heExhdGVuY3k7CS8vIGNvbnN0IGluIFtuc10sIG9ubHkgcmVxdWlyZWQgZm9yIElkZW50UmVzCisJdTMyIG1fZHdQcmVzTWF4TGF0ZW5jeTsJLy8gY29uc3QgaW4gW25zXSwgb25seSByZXF1aXJlZCBmb3IgSWRlbnRSZXMKIAkvLyAweDFGOTguNDogUFJlcUFjdFBheWxvYWRMaW1pdF9VMTYKIAl1bnNpZ25lZCBpbnQgbV91aVByZXFBY3RQYXlsb2FkTGltaXQ7CS8vIHJlcXVpcmVkIGZvciBpbml0aWFsaXNhdGlvbiAoKzI0IGJ5dGVzKQogCS8vIDB4MUY5OC41OiBQUmVzQWN0UGF5bG9hZExpbWl0X1UxNgogCXVuc2lnbmVkIGludCBtX3VpUHJlc0FjdFBheWxvYWRMaW1pdDsJLy8gcmVxdWlyZWQgZm9yIGluaXRpYWxpc2F0aW9uIG9mIFByZXMgZnJhbWUgKCsyNCBieXRlcykKIAkvLyAweDFGOTguNjogQVNuZE1heExhdGVuY3lfVTMyCi0JRFdPUkQgbV9kd0FzbmRNYXhMYXRlbmN5OwkvLyBjb25zdCBpbiBbbnNdLCBvbmx5IHJlcXVpcmVkIGZvciBJZGVudFJlcworCXUzMiBtX2R3QXNuZE1heExhdGVuY3k7CS8vIGNvbnN0IGluIFtuc10sIG9ubHkgcmVxdWlyZWQgZm9yIElkZW50UmVzCiAJLy8gMHgxRjk4Ljc6IE11bHRpcGxDeWNsZUNudF9VOAogCXVuc2lnbmVkIGludCBtX3VpTXVsdGlwbEN5Y2xlQ250OwkvLyByZXF1aXJlZCBmb3IgZXJyb3IgZGV0ZWN0aW9uCiAJLy8gMHgxRjk4Ljg6IEFzeW5jTVRVX1UxNgpAQCAtMTU5LDQyICsxNTksNDIgQEAKIAkvLyAkJCQgTXVsdGlwbGV4ZWQgU2xvdAogCiAJLy8gMHgxQzE0OiBETExfTG9zc09mRnJhbWVUb2xlcmFuY2VfVTMyIGluIFtuc10KLQlEV09SRCBtX2R3TG9zc09mRnJhbWVUb2xlcmFuY2U7CisJdTMyIG1fZHdMb3NzT2ZGcmFtZVRvbGVyYW5jZTsKIAogCS8vIDB4MUY4QTogTk1UX01OQ3ljbGVUaW1pbmdfUkVDCiAJLy8gMHgxRjhBLjE6IFdhaXRTb0NQUmVxX1UzMiBpbiBbbnNdCi0JRFdPUkQgbV9kd1dhaXRTb2NQcmVxOworCXUzMiBtX2R3V2FpdFNvY1ByZXE7CiAKIAkvLyAweDFGOEEuMjogQXN5bmNTbG90VGltZW91dF9VMzIgaW4gW25zXQotCURXT1JEIG1fZHdBc3luY1Nsb3RUaW1lb3V0OworCXUzMiBtX2R3QXN5bmNTbG90VGltZW91dDsKIAogfSB0RXBsRGxsQ29uZmlnUGFyYW07CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgbV91aVNpemVPZlN0cnVjdDsKLQlEV09SRCBtX2R3RGV2aWNlVHlwZTsJLy8gTk1UX0RldmljZVR5cGVfVTMyCi0JRFdPUkQgbV9kd1ZlbmRvcklkOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlZlbmRvcklkX1UzMgotCURXT1JEIG1fZHdQcm9kdWN0Q29kZTsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5Qcm9kdWN0Q29kZV9VMzIKLQlEV09SRCBtX2R3UmV2aXNpb25OdW1iZXI7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUmV2aXNpb25Ob19VMzIKLQlEV09SRCBtX2R3U2VyaWFsTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlNlcmlhbE5vX1UzMgotCVFXT1JEIG1fcXdWZW5kb3JTcGVjaWZpY0V4dDE7Ci0JRFdPUkQgbV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25EYXRlOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZkRhdGVfVTMyCi0JRFdPUkQgbV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25UaW1lOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZlRpbWVfVTMyCi0JRFdPUkQgbV9kd0FwcGxpY2F0aW9uU3dEYXRlOwkvLyBQRExfTG9jVmVyQXBwbFN3X1JFQy5BcHBsU3dEYXRlX1UzMiBvbiBwcm9ncmFtbWFibGUgZGV2aWNlIG9yIGRhdGUgcG9ydGlvbiBvZiBOTVRfTWFudWZhY3RTd1ZlcnNfVlMgb24gbm9uLXByb2dyYW1tYWJsZSBkZXZpY2UKLQlEV09SRCBtX2R3QXBwbGljYXRpb25Td1RpbWU7CS8vIFBETF9Mb2NWZXJBcHBsU3dfUkVDLkFwcGxTd1RpbWVfVTMyIG9uIHByb2dyYW1tYWJsZSBkZXZpY2Ugb3IgdGltZSBwb3J0aW9uIG9mIE5NVF9NYW51ZmFjdFN3VmVyc19WUyBvbiBub24tcHJvZ3JhbW1hYmxlIGRldmljZQotCURXT1JEIG1fZHdJcEFkZHJlc3M7Ci0JRFdPUkQgbV9kd1N1Ym5ldE1hc2s7Ci0JRFdPUkQgbV9kd0RlZmF1bHRHYXRld2F5OwotCUJZVEUgbV9zSG9zdG5hbWVbMzJdOwotCUJZVEUgbV9hYlZlbmRvclNwZWNpZmljRXh0Mls0OF07CisJdTMyIG1fZHdEZXZpY2VUeXBlOwkvLyBOTVRfRGV2aWNlVHlwZV9VMzIKKwl1MzIgbV9kd1ZlbmRvcklkOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlZlbmRvcklkX1UzMgorCXUzMiBtX2R3UHJvZHVjdENvZGU7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUHJvZHVjdENvZGVfVTMyCisJdTMyIG1fZHdSZXZpc2lvbk51bWJlcjsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5SZXZpc2lvbk5vX1UzMgorCXUzMiBtX2R3U2VyaWFsTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlNlcmlhbE5vX1UzMgorCXU2NCBtX3F3VmVuZG9yU3BlY2lmaWNFeHQxOworCXUzMiBtX2R3VmVyaWZ5Q29uZmlndXJhdGlvbkRhdGU7CS8vIENGTV9WZXJpZnlDb25maWd1cmF0aW9uX1JFQy5Db25mRGF0ZV9VMzIKKwl1MzIgbV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25UaW1lOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZlRpbWVfVTMyCisJdTMyIG1fZHdBcHBsaWNhdGlvblN3RGF0ZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3RGF0ZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciBkYXRlIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCisJdTMyIG1fZHdBcHBsaWNhdGlvblN3VGltZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3VGltZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciB0aW1lIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCisJdTMyIG1fZHdJcEFkZHJlc3M7CisJdTMyIG1fZHdTdWJuZXRNYXNrOworCXUzMiBtX2R3RGVmYXVsdEdhdGV3YXk7CisJdTggbV9zSG9zdG5hbWVbMzJdOworCXU4IG1fYWJWZW5kb3JTcGVjaWZpY0V4dDJbNDhdOwogCiB9IHRFcGxEbGxJZGVudFBhcmFtOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgaW50IG1fdWlOb2RlSWQ7Ci0JV09SRCBtX3dQcmVxUGF5bG9hZExpbWl0OwkvLyBvYmplY3QgMHgxRjhCOiBOTVRfTU5QUmVxUGF5bG9hZExpbWl0TGlzdF9BVTE2Ci0JV09SRCBtX3dQcmVzUGF5bG9hZExpbWl0OwkvLyBvYmplY3QgMHgxRjhEOiBOTVRfUFJlc1BheWxvYWRMaW1pdExpc3RfQVUxNgotCURXT1JEIG1fZHdQcmVzVGltZW91dDsJLy8gb2JqZWN0IDB4MUY5MjogTk1UX01OQ05QUmVzVGltZW91dF9BVTMyCisJdTE2IG1fd1ByZXFQYXlsb2FkTGltaXQ7CS8vIG9iamVjdCAweDFGOEI6IE5NVF9NTlBSZXFQYXlsb2FkTGltaXRMaXN0X0FVMTYKKwl1MTYgbV93UHJlc1BheWxvYWRMaW1pdDsJLy8gb2JqZWN0IDB4MUY4RDogTk1UX1BSZXNQYXlsb2FkTGltaXRMaXN0X0FVMTYKKwl1MzIgbV9kd1ByZXNUaW1lb3V0OwkvLyBvYmplY3QgMHgxRjkyOiBOTVRfTU5DTlBSZXNUaW1lb3V0X0FVMzIKIAogfSB0RXBsRGxsTm9kZUluZm87CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsQ2FsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbERsbENhbC5oCmluZGV4IDI0NDYwMDguLjcwYjI3YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsQ2FsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGxDYWwuaApAQCAtMTEyLDcgKzExMiw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbERsbFJlcVNlcnZpY2VJZCBtX1NlcnZpY2U7CiAJdW5zaWduZWQgaW50IG1fdWlOb2RlSWQ7Ci0JQllURSBtX2JTb2FGbGFnMTsKKwl1OCBtX2JTb2FGbGFnMTsKIAogfSB0RXBsRGxsQ2FsSXNzdWVSZXF1ZXN0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbERsbGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsay5jCmluZGV4IDllMjI2NDEuLjI1ZDJjMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsay5jCkBAIC0xMjEsOCArMTIxLDggQEAKIAogLy8gVHJhY2VQb2ludCBzdXBwb3J0IGZvciByZWFsdGltZS1kZWJ1Z2dpbmcKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnUG9zdFRyYWNlVmFsdWUodTMyIGR3VHJhY2VWYWx1ZV9wKTsKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkgICBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHApCiAjZGVmaW5lIFRHVF9EQkdfUE9TVF9UUkFDRV9WQUxVRSh2KSAgICAgVGd0RGJnUG9zdFRyYWNlVmFsdWUodikKICNlbHNlCkBAIC0xOTUsMTIgKzE5NSwxMiBAQAogfSB0RXBsRGxsU3RhdGU7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQlCWVRFIG1fYmVfYWJTcmNNYWNbNl07CisJdTggbV9iZV9hYlNyY01hY1s2XTsKIAl0RWRydlR4QnVmZmVyICptX3BUeEJ1ZmZlcjsJLy8gQnVmZmVycyBmb3IgVHgtRnJhbWVzCiAJdW5zaWduZWQgaW50IG1fdWlNYXhUeEZyYW1lczsKLQlCWVRFIG1fYkZsYWcxOwkJLy8gRmxhZyAxIHdpdGggRU4sIEVDIGZvciBQUmVzLCBTdGF0dXNSZXMKLQlCWVRFIG1fYk1uRmxhZzE7CS8vIEZsYWcgMSB3aXRoIEVBLCBFUiBmcm9tIFBSZXEsIFNvQSBvZiBNTgotCUJZVEUgbV9iRmxhZzI7CQkvLyBGbGFnIDIgd2l0aCBQUiBhbmQgUlMgZm9yIFBSZXMsIFN0YXR1c1JlcywgSWRlbnRSZXMKKwl1OCBtX2JGbGFnMTsJCS8vIEZsYWcgMSB3aXRoIEVOLCBFQyBmb3IgUFJlcywgU3RhdHVzUmVzCisJdTggbV9iTW5GbGFnMTsJLy8gRmxhZyAxIHdpdGggRUEsIEVSIGZyb20gUFJlcSwgU29BIG9mIE1OCisJdTggbV9iRmxhZzI7CQkvLyBGbGFnIDIgd2l0aCBQUiBhbmQgUlMgZm9yIFBSZXMsIFN0YXR1c1JlcywgSWRlbnRSZXMKIAl0RXBsRGxsQ29uZmlnUGFyYW0gbV9EbGxDb25maWdQYXJhbTsKIAl0RXBsRGxsSWRlbnRQYXJhbSBtX0RsbElkZW50UGFyYW07CiAJdEVwbERsbFN0YXRlIG1fRGxsU3RhdGU7CkBAIC0yNTcsNyArMjU3LDcgQEAKIAogLy8gY2FsbGVkIGJ5IGhpZ2ggcmVzb2x1dGlvbiB0aW1lciBtb2R1bGUgdG8gbW9uaXRvciBFUEwgY3ljbGUgYXMgQ04KICNpZiBFUExfVElNRVJfVVNFX0hJR0hSRVMgIT0gRkFMU0UKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxEbGxrQ2JDblRpbWVyKHRFcGxUaW1lckV2ZW50QXJnICogcEV2ZW50QXJnX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsRGxsa0NiQ25UaW1lcih0RXBsVGltZXJFdmVudEFyZyAqcEV2ZW50QXJnX3ApOwogI2VuZGlmCiAKICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVF9NTikpICE9IDApCkBAIC0yNzgsMTAgKzI3OCw5IEBACiAJCQkJCSAgICAgICBSZXFTZXJ2aWNlSWRfcCwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKTsKIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbERsbGtDYk1uVGltZXJDeWNsZSh0RXBsVGltZXJFdmVudEFyZyAqIHBFdmVudEFyZ19wKTsKK3N0YXRpYyB0RXBsS2VybmVsIEVwbERsbGtDYk1uVGltZXJDeWNsZSh0RXBsVGltZXJFdmVudEFyZyAqcEV2ZW50QXJnX3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsRGxsa0NiTW5UaW1lclJlc3BvbnNlKHRFcGxUaW1lckV2ZW50QXJnICoKLQkJCQkJCSAgcEV2ZW50QXJnX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsRGxsa0NiTW5UaW1lclJlc3BvbnNlKHRFcGxUaW1lckV2ZW50QXJnICpwRXZlbnRBcmdfcCk7CiAKICNlbmRpZgogCkBAIC01MTQsNyArNTEzLDcgQEAKIAkJCSAgICAgICBFUExfQ19ETExfRVRIRVJUWVBFX0VQTCk7CiAJCS8vIHNvdXJjZSBub2RlIElECiAJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9sZV9iU3JjTm9kZUlkLAotCQkJICAgICAgIChCWVRFKSBFcGxEbGxrSW5zdGFuY2VfZy5tX0RsbENvbmZpZ1BhcmFtLgorCQkJICAgICAgICh1OCkgRXBsRGxsa0luc3RhbmNlX2cubV9EbGxDb25maWdQYXJhbS4KIAkJCSAgICAgICBtX3VpTm9kZUlkKTsKIAkJLy8gc291cmNlIE1BQyBhZGRyZXNzCiAJCUVQTF9NRU1DUFkoJnBUeEZyYW1lLT5tX2JlX2FiU3JjTWFjWzBdLApAQCAtNTMxLDcgKzUzMCw3IEBACiAJCQkJewkvLyBJZGVudFJlc3BvbnNlcyBhbmQgU3RhdHVzUmVzcG9uc2VzIGFyZSBCcm9hZGNhc3QKIAkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT4KIAkJCQkJCSAgICAgICBtX2xlX2JEc3ROb2RlSWQsCi0JCQkJCQkgICAgICAgKEJZVEUpCisJCQkJCQkgICAgICAgKHU4KQogCQkJCQkJICAgICAgIEVQTF9DX0FEUl9CUk9BRENBU1QpOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC01NTAsMTAgKzU0OSwxMCBAQAogCQkJCQkgIEVQTF9DX0RMTF9NVUxUSUNBU1RfU09DKTsKIAkJCS8vIGRlc3RpbmF0aW9uIG5vZGUgSUQKIAkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9sZV9iRHN0Tm9kZUlkLAotCQkJCSAgICAgICAoQllURSkgRVBMX0NfQURSX0JST0FEQ0FTVCk7CisJCQkJICAgICAgICh1OCkgRVBMX0NfQURSX0JST0FEQ0FTVCk7CiAJCQkvLyByZXNldCBGbGFncwotCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1NvYy5tX2xlX2JGbGFnMSwgKEJZVEUpIDApOwotCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1NvYy5tX2xlX2JGbGFnMiwgKEJZVEUpIDApOworCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1NvYy5tX2xlX2JGbGFnMSwgKHU4KSAwKTsKKwkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2MubV9sZV9iRmxhZzIsICh1OCkgMCk7CiAJCQlicmVhazsKIAogCQljYXNlIGtFcGxNc2dUeXBlU29hOgpAQCAtNTYyLDEzICs1NjEsMTMgQEAKIAkJCQkJICBFUExfQ19ETExfTVVMVElDQVNUX1NPQSk7CiAJCQkvLyBkZXN0aW5hdGlvbiBub2RlIElECiAJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fbGVfYkRzdE5vZGVJZCwKLQkJCQkgICAgICAgKEJZVEUpIEVQTF9DX0FEUl9CUk9BRENBU1QpOworCQkJCSAgICAgICAodTgpIEVQTF9DX0FEUl9CUk9BRENBU1QpOwogCQkJLy8gcmVzZXQgRmxhZ3MKLQkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EubV9sZV9iRmxhZzEsIChCWVRFKSAwKTsKLQkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EubV9sZV9iRmxhZzIsIChCWVRFKSAwKTsKKwkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EubV9sZV9iRmxhZzEsICh1OCkgMCk7CisJCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fU29hLm1fbGVfYkZsYWcyLCAodTgpIDApOwogCQkJLy8gRVBMIHByb2ZpbGUgdmVyc2lvbgogCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EubV9sZV9iRXBsVmVyc2lvbiwKLQkJCQkgICAgICAgKEJZVEUpIEVQTF9TUEVDX1ZFUlNJT04pOworCQkJCSAgICAgICAodTgpIEVQTF9TUEVDX1ZFUlNJT04pOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBrRXBsTXNnVHlwZVByZXM6CkBAIC01NzcsMTggKzU3NiwxOCBAQAogCQkJCQkgIEVQTF9DX0RMTF9NVUxUSUNBU1RfUFJFUyk7CiAJCQkvLyBkZXN0aW5hdGlvbiBub2RlIElECiAJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fbGVfYkRzdE5vZGVJZCwKLQkJCQkgICAgICAgKEJZVEUpIEVQTF9DX0FEUl9CUk9BRENBU1QpOworCQkJCSAgICAgICAodTgpIEVQTF9DX0FEUl9CUk9BRENBU1QpOwogCQkJLy8gcmVzZXQgRmxhZ3MKLQkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVzLm1fbGVfYkZsYWcxLCAoQllURSkgMCk7Ci0JCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy5tX2xlX2JGbGFnMiwgKEJZVEUpIDApOworCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMubV9sZV9iRmxhZzEsICh1OCkgMCk7CisJCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy5tX2xlX2JGbGFnMiwgKHU4KSAwKTsKIAkJCS8vIFBETyBzaXplCiAJCQkvL0FtaVNldFdvcmRUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy5tX2xlX3dTaXplLCAwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2Uga0VwbE1zZ1R5cGVQcmVxOgogCQkJLy8gcmVzZXQgRmxhZ3MKLQkJCS8vQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVxLm1fbGVfYkZsYWcxLCAoQllURSkgMCk7Ci0JCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcS5tX2xlX2JGbGFnMiwgKEJZVEUpIDApOworCQkJLy9BbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXEubV9sZV9iRmxhZzEsICh1OCkgMCk7CisJCQkvL0FtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcS5tX2xlX2JGbGFnMiwgKHU4KSAwKTsKIAkJCS8vIFBETyBzaXplCiAJCQkvL0FtaVNldFdvcmRUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcS5tX2xlX3dTaXplLCAwKTsKIAkJCWJyZWFrOwpAQCAtNTk3LDcgKzU5Niw3IEBACiAJCQlicmVhazsKIAkJfQogCQkvLyBFUEwgbWVzc2FnZSB0eXBlCi0JCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9sZV9iTWVzc2FnZVR5cGUsIChCWVRFKSBNc2dUeXBlX3ApOworCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fbGVfYk1lc3NhZ2VUeXBlLCAodTgpIE1zZ1R5cGVfcCk7CiAJfQogCiAJKnBwRnJhbWVfcCA9IHBUeEZyYW1lOwpAQCAtNjczLDcgKzY3Miw3IEBACiAJdEVkcnZUeEJ1ZmZlciAqcFR4QnVmZmVyOwogCXVuc2lnbmVkIGludCB1aUhhbmRsZTsKIAl1bnNpZ25lZCBpbnQgdWlGcmFtZVNpemU7Ci0JQllURSBhYk11bHRpY2FzdE1hY1s2XTsKKwl1OCBhYk11bHRpY2FzdE1hY1s2XTsKIAl0RXBsRGxsQXN5bmNSZXFQcmlvcml0eSBBc3luY1JlcVByaW9yaXR5OwogCXVuc2lnbmVkIGludCB1aUZyYW1lQ291bnQ7CiAJdEVwbE5tdFN0YXRlIE5tdFN0YXRlOwpAQCAtNzEyLDcgKzcxMSw3IEBACiAJCQkvLyBFUEwgcHJvZmlsZSB2ZXJzaW9uCiAJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX0FzbmQubV9QYXlsb2FkLgogCQkJCSAgICAgICBtX0lkZW50UmVzcG9uc2UubV9sZV9iRXBsUHJvZmlsZVZlcnNpb24sCi0JCQkJICAgICAgIChCWVRFKSBFUExfU1BFQ19WRVJTSU9OKTsKKwkJCQkgICAgICAgKHU4KSBFUExfU1BFQ19WRVJTSU9OKTsKIAkJCS8vIEZlYXR1cmVGbGFncwogCQkJQW1pU2V0RHdvcmRUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fQXNuZC5tX1BheWxvYWQuCiAJCQkJCW1fSWRlbnRSZXNwb25zZS5tX2xlX2R3RmVhdHVyZUZsYWdzLApAQCAtNzIxLDE4ICs3MjAsMTggQEAKIAkJCS8vIE1UVQogCQkJQW1pU2V0V29yZFRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Bc25kLm1fUGF5bG9hZC4KIAkJCQkgICAgICAgbV9JZGVudFJlc3BvbnNlLm1fbGVfd010dSwKLQkJCQkgICAgICAgKFdPUkQpIEVwbERsbGtJbnN0YW5jZV9nLgorCQkJCSAgICAgICAodTE2KSBFcGxEbGxrSW5zdGFuY2VfZy4KIAkJCQkgICAgICAgbV9EbGxDb25maWdQYXJhbS5tX3VpQXN5bmNNdHUpOwogCQkJLy8gUG9sbEluU2l6ZQogCQkJQW1pU2V0V29yZFRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Bc25kLm1fUGF5bG9hZC4KIAkJCQkgICAgICAgbV9JZGVudFJlc3BvbnNlLm1fbGVfd1BvbGxJblNpemUsCi0JCQkJICAgICAgIChXT1JEKSBFcGxEbGxrSW5zdGFuY2VfZy4KKwkJCQkgICAgICAgKHUxNikgRXBsRGxsa0luc3RhbmNlX2cuCiAJCQkJICAgICAgIG1fRGxsQ29uZmlnUGFyYW0uCiAJCQkJICAgICAgIG1fdWlQcmVxQWN0UGF5bG9hZExpbWl0KTsKIAkJCS8vIFBvbGxPdXRTaXplCiAJCQlBbWlTZXRXb3JkVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX0FzbmQubV9QYXlsb2FkLgogCQkJCSAgICAgICBtX0lkZW50UmVzcG9uc2UubV9sZV93UG9sbE91dFNpemUsCi0JCQkJICAgICAgIChXT1JEKSBFcGxEbGxrSW5zdGFuY2VfZy4KKwkJCQkgICAgICAgKHUxNikgRXBsRGxsa0luc3RhbmNlX2cuCiAJCQkJICAgICAgIG1fRGxsQ29uZmlnUGFyYW0uCiAJCQkJICAgICAgIG1fdWlQcmVzQWN0UGF5bG9hZExpbWl0KTsKIAkJCS8vIFJlc3BvbnNlVGltZSAvIFByZXNNYXhMYXRlbmN5CkBAIC05MzYsNyArOTM1LDcgQEAKIC8vICAgICAgICAgICAgICAgICAgICBFcGxEbGxrSW5zdGFuY2VfZy5tX2FOb2RlSW5mb1t1aUluZGV4XS5tX3VpTm9kZUlkID0gdWlJbmRleCArIDE7CiAJCQkJCUVwbERsbGtJbnN0YW5jZV9nLm1fYU5vZGVJbmZvW3VpSW5kZXhdLgogCQkJCQkgICAgbV93UHJlc1BheWxvYWRMaW1pdCA9Ci0JCQkJCSAgICAoV09SRCkgRXBsRGxsa0luc3RhbmNlX2cuCisJCQkJCSAgICAodTE2KSBFcGxEbGxrSW5zdGFuY2VfZy4KIAkJCQkJICAgIG1fRGxsQ29uZmlnUGFyYW0uCiAJCQkJCSAgICBtX3VpSXNvY2hyUnhNYXhQYXlsb2FkOwogCQkJCX0KQEAgLTEyMzMsNyArMTIzMiw3IEBACiAJCQkJfQogCQkJCWlmICh1aUZyYW1lQ291bnQgPiAwKSB7CiAJCQkJCUVwbERsbGtJbnN0YW5jZV9nLm1fYkZsYWcyID0KLQkJCQkJICAgIChCWVRFKSAoKChBc3luY1JlcVByaW9yaXR5IDw8CisJCQkJCSAgICAodTgpICgoKEFzeW5jUmVxUHJpb3JpdHkgPDwKIAkJCQkJCSAgICAgIEVQTF9GUkFNRV9GTEFHMl9QUl9TSElGVCkKIAkJCQkJCSAgICAgJiBFUExfRlJBTUVfRkxBRzJfUFIpCiAJCQkJCQkgICAgfCAodWlGcmFtZUNvdW50ICYKQEAgLTEzMDcsNyArMTMwNiw3IEBACiAJCQkJCX0KIAkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVzLgogCQkJCQkJICAgICAgIG1fbGVfYk5tdFN0YXR1cywKLQkJCQkJCSAgICAgICAoQllURSkgTm10U3RhdGUpOworCQkJCQkJICAgICAgICh1OCkgTm10U3RhdGUpOwogCQkJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMuCiAJCQkJCQkgICAgICAgbV9sZV9iRmxhZzIsCiAJCQkJCQkgICAgICAgRXBsRGxsa0luc3RhbmNlX2cuCkBAIC0xNTMzLDcgKzE1MzIsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgRXBsRGxsa1NldEZsYWcxT2ZOb2RlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCBCWVRFIGJTb2FGbGFnMV9wKQordEVwbEtlcm5lbCBFcGxEbGxrU2V0RmxhZzFPZk5vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbERsbGtOb2RlSW5mbyAqcE5vZGVJbmZvOwpAQCAtMTY2NCw3ICsxNjYzLDcgQEAKIAkJcEludE5vZGVJbmZvLT5tX3BQcmVxVHhCdWZmZXIgPQogCQkgICAgJkVwbERsbGtJbnN0YW5jZV9nLm1fcFR4QnVmZmVyW3VpSGFuZGxlXTsKIAkJQW1pU2V0Qnl0ZVRvTGUoJnBGcmFtZS0+bV9sZV9iRHN0Tm9kZUlkLAotCQkJICAgICAgIChCWVRFKSBwTm9kZUluZm9fcC0+bV91aU5vZGVJZCk7CisJCQkgICAgICAgKHU4KSBwTm9kZUluZm9fcC0+bV91aU5vZGVJZCk7CiAKIAkJLy8gc2V0IHVwIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzCiAJCUVQTF9NRU1DUFkocEZyYW1lLT5tX2JlX2FiRHN0TWFjLCBwSW50Tm9kZUluZm8tPm1fYmVfYWJNYWNBZGRyLApAQCAtMjQzMSw3ICsyNDMwLDcgQEAKIAl0RXBsRGxsUmVxU2VydmljZUlkIFJlcVNlcnZpY2VJZDsKIAl1bnNpZ25lZCBpbnQgdWlBc25kU2VydmljZUlkOwogCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKLQlCWVRFIGJGbGFnMTsKKwl1OCBiRmxhZzE7CiAKIAlCRU5DSE1BUktfTU9EXzAyX1NFVCgzKTsKIAlObXRTdGF0ZSA9IEVwbE5tdGtHZXRObXRTdGF0ZSgpOwpAQCAtMjQ2Niw3ICsyNDY1LDcgQEAKIAkJCQkJLy8gdXBkYXRlIGZyYW1lIChOTVQgc3RhdGUsIFJELCBSUywgUFIsIE1TLCBFTiBmbGFncykKIAkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVzLgogCQkJCQkJICAgICAgIG1fbGVfYk5tdFN0YXR1cywKLQkJCQkJCSAgICAgICAoQllURSkgTm10U3RhdGUpOworCQkJCQkJICAgICAgICh1OCkgTm10U3RhdGUpOwogCQkJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMuCiAJCQkJCQkgICAgICAgbV9sZV9iRmxhZzIsCiAJCQkJCQkgICAgICAgRXBsRGxsa0luc3RhbmNlX2cuCkBAIC0yNTQxLDcgKzI1NDAsNyBAQAogCQkJCQkvLyB1cGRhdGUgZnJhbWUgKE5NVCBzdGF0ZSwgUkQsIFJTLCBQUiwgTVMsIEVOIGZsYWdzKQogCQkJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMuCiAJCQkJCQkgICAgICAgbV9sZV9iTm10U3RhdHVzLAotCQkJCQkJICAgICAgIChCWVRFKSBObXRTdGF0ZSk7CisJCQkJCQkgICAgICAgKHU4KSBObXRTdGF0ZSk7CiAJCQkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy4KIAkJCQkJCSAgICAgICBtX2xlX2JGbGFnMiwKIAkJCQkJCSAgICAgICBFcGxEbGxrSW5zdGFuY2VfZy4KQEAgLTI4MDMsNyArMjgwMiw3IEBACiAJCQkJfQogCQkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fUHJlcy4KIAkJCQkJICAgICAgIG1fbGVfYk5tdFN0YXR1cywKLQkJCQkJICAgICAgIChCWVRFKSBObXRTdGF0ZSk7CisJCQkJCSAgICAgICAodTgpIE5tdFN0YXRlKTsKIAkJCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1ByZXMuCiAJCQkJCSAgICAgICBtX2xlX2JGbGFnMiwKIAkJCQkJICAgICAgIEVwbERsbGtJbnN0YW5jZV9nLm1fYkZsYWcyKTsKQEAgLTI4ODgsNyArMjg4Nyw3IEBACiAJCQkJCQkJICAgICAgIG1fUGF5bG9hZC4KIAkJCQkJCQkgICAgICAgbV9TdGF0dXNSZXNwb25zZS4KIAkJCQkJCQkgICAgICAgbV9sZV9iTm10U3RhdHVzLAotCQkJCQkJCSAgICAgICAoQllURSkgTm10U3RhdGUpOworCQkJCQkJCSAgICAgICAodTgpIE5tdFN0YXRlKTsKIAkJCQkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+CiAJCQkJCQkJICAgICAgIG1fRGF0YS5tX0FzbmQuCiAJCQkJCQkJICAgICAgIG1fUGF5bG9hZC4KQEAgLTI5NTQsNyArMjk1Myw3IEBACiAJCQkJCQkJICAgICAgIG1fUGF5bG9hZC4KIAkJCQkJCQkgICAgICAgbV9JZGVudFJlc3BvbnNlLgogCQkJCQkJCSAgICAgICBtX2xlX2JObXRTdGF0dXMsCi0JCQkJCQkJICAgICAgIChCWVRFKSBObXRTdGF0ZSk7CisJCQkJCQkJICAgICAgICh1OCkgTm10U3RhdGUpOwogCQkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT4KIAkJCQkJCQkgICAgICAgbV9EYXRhLm1fQXNuZC4KIAkJCQkJCQkgICAgICAgbV9QYXlsb2FkLgpAQCAtMzE1NSw3ICszMTU0LDcgQEAKIAogICAgICAgRXhpdDoKIAlpZiAoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKSB7Ci0JCURXT1JEIGR3QXJnOworCQl1MzIgZHdBcmc7CiAKIAkJQkVOQ0hNQVJLX01PRF8wMl9UT0dHTEUoOSk7CiAKQEAgLTMyODYsNyArMzI4NSw3IEBACiAJCQkJCQkgICAgICAgbV9QYXlsb2FkLgogCQkJCQkJICAgICAgIG1fU3RhdHVzUmVzcG9uc2UuCiAJCQkJCQkgICAgICAgbV9sZV9iTm10U3RhdHVzLAotCQkJCQkJICAgICAgIChCWVRFKSBObXRTdGF0ZSk7CisJCQkJCQkgICAgICAgKHU4KSBObXRTdGF0ZSk7CiAJCQkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fQXNuZC4KIAkJCQkJCSAgICAgICBtX1BheWxvYWQuCiAJCQkJCQkgICAgICAgbV9TdGF0dXNSZXNwb25zZS4KQEAgLTMzMjIsNyArMzMyMSw3IEBACiAJCQkJCQkgICAgICAgbV9QYXlsb2FkLgogCQkJCQkJICAgICAgIG1fSWRlbnRSZXNwb25zZS4KIAkJCQkJCSAgICAgICBtX2xlX2JObXRTdGF0dXMsCi0JCQkJCQkgICAgICAgKEJZVEUpIE5tdFN0YXRlKTsKKwkJCQkJCSAgICAgICAodTgpIE5tdFN0YXRlKTsKIAkJCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Bc25kLgogCQkJCQkJICAgICAgIG1fUGF5bG9hZC4KIAkJCQkJCSAgICAgICBtX0lkZW50UmVzcG9uc2UuCkBAIC0zMzYyLDEyICszMzYxLDEyIEBACiAJCQkJCQlpZiAoKEFtaUdldEJ5dGVGcm9tTGUKIAkJCQkJCSAgICAgKCZwVHhGcmFtZS0+CiAJCQkJCQkgICAgICBtX2xlX2JNZXNzYWdlVHlwZSkKLQkJCQkJCSAgICAgPT0gKEJZVEUpIGtFcGxNc2dUeXBlQXNuZCkKKwkJCQkJCSAgICAgPT0gKHU4KSBrRXBsTXNnVHlwZUFzbmQpCiAJCQkJCQkgICAgJiYKIAkJCQkJCSAgICAoQW1pR2V0Qnl0ZUZyb21MZQogCQkJCQkJICAgICAoJnBUeEZyYW1lLT5tX0RhdGEubV9Bc25kLgogCQkJCQkJICAgICAgbV9sZV9iU2VydmljZUlkKQotCQkJCQkJICAgICA9PSAoQllURSkga0VwbERsbEFzbmRObXRDb21tYW5kKSkgewkvLyBwb3N0IGV2ZW50IGRpcmVjdGx5IHRvIE5tdE1udSBtb2R1bGUKKwkJCQkJCSAgICAgPT0gKHU4KSBrRXBsRGxsQXNuZE5tdENvbW1hbmQpKSB7CS8vIHBvc3QgZXZlbnQgZGlyZWN0bHkgdG8gTm10TW51IG1vZHVsZQogCQkJCQkJCUV2ZW50Lm1fRXZlbnRTaW5rID0KIAkJCQkJCQkgICAga0VwbEV2ZW50U2lua05tdE1udTsKIAkJCQkJCQlFdmVudC5tX0V2ZW50VHlwZSA9CkBAIC0zNDQ5LDcgKzM0NDgsNyBAQAogCiAgICAgICBFeGl0OgogCWlmIChSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpIHsKLQkJRFdPUkQgZHdBcmc7CisJCXUzMiBkd0FyZzsKIAogCQlCRU5DSE1BUktfTU9EXzAyX1RPR0dMRSg5KTsKIApAQCAtMzQ4NSw3ICszNDg0LDcgQEAKIAkJCQkgICAgdW5zaWduZWQgaW50IHVpRnJhbWVTaXplX3ApCiB7CiAJdEVwbE1zZ1R5cGUgTXNnVHlwZTsKLQlXT1JEIHdFdGhlclR5cGU7CisJdTE2IHdFdGhlclR5cGU7CiAKIAkvLyBjaGVjayBmcmFtZQogCWlmIChwRnJhbWVfcCAhPSBOVUxMKSB7CkBAIC0zNTA2LDcgKzM1MDUsNyBAQAogCQlpZiAod0V0aGVyVHlwZSA9PSBFUExfQ19ETExfRVRIRVJUWVBFX0VQTCkgewogCQkJLy8gc291cmNlIG5vZGUgSUQKIAkJCUFtaVNldEJ5dGVUb0xlKCZwRnJhbWVfcC0+bV9sZV9iU3JjTm9kZUlkLAotCQkJCSAgICAgICAoQllURSkgRXBsRGxsa0luc3RhbmNlX2cuCisJCQkJICAgICAgICh1OCkgRXBsRGxsa0luc3RhbmNlX2cuCiAJCQkJICAgICAgIG1fRGxsQ29uZmlnUGFyYW0ubV91aU5vZGVJZCk7CiAKIAkJCS8vIGNoZWNrIG1lc3NhZ2UgdHlwZQpAQCAtMzUxNSw3ICszNTE0LDcgQEAKIAkJCWlmIChNc2dUeXBlID09IDApIHsKIAkJCQlNc2dUeXBlID0ga0VwbE1zZ1R5cGVBc25kOwogCQkJCUFtaVNldEJ5dGVUb0xlKCZwRnJhbWVfcC0+bV9sZV9iTWVzc2FnZVR5cGUsCi0JCQkJCSAgICAgICAoQllURSkgTXNnVHlwZSk7CisJCQkJCSAgICAgICAodTgpIE1zZ1R5cGUpOwogCQkJfQogCiAJCQlpZiAoTXNnVHlwZSA9PSBrRXBsTXNnVHlwZUFzbmQpIHsKQEAgLTM1NDYsNyArMzU0NSw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgRVBMX1RJTUVSX1VTRV9ISUdIUkVTICE9IEZBTFNFCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsRGxsa0NiQ25UaW1lcih0RXBsVGltZXJFdmVudEFyZyAqIHBFdmVudEFyZ19wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsRGxsa0NiQ25UaW1lcih0RXBsVGltZXJFdmVudEFyZyAqcEV2ZW50QXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsTm10U3RhdGUgTm10U3RhdGU7CkBAIC0zNTgzLDcgKzM1ODIsNyBAQAogCiAgICAgICBFeGl0OgogCWlmIChSZXQgIT0ga0VwbFN1Y2Nlc3NmdWwpIHsKLQkJRFdPUkQgZHdBcmc7CisJCXUzMiBkd0FyZzsKIAogCQlCRU5DSE1BUktfTU9EXzAyX1RPR0dMRSg5KTsKIApAQCAtMzYxNyw3ICszNjE2LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsRGxsa0NiTW5UaW1lckN5Y2xlKHRFcGxUaW1lckV2ZW50QXJnICogcEV2ZW50QXJnX3ApCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxEbGxrQ2JNblRpbWVyQ3ljbGUodEVwbFRpbWVyRXZlbnRBcmcgKnBFdmVudEFyZ19wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbE5tdFN0YXRlIE5tdFN0YXRlOwpAQCAtMzYzOSw3ICszNjM4LDcgQEAKIAogICAgICAgRXhpdDoKIAlpZiAoUmV0ICE9IGtFcGxTdWNjZXNzZnVsKSB7Ci0JCURXT1JEIGR3QXJnOworCQl1MzIgZHdBcmc7CiAKIAkJQkVOQ0hNQVJLX01PRF8wMl9UT0dHTEUoOSk7CiAKQEAgLTM2NzAsOCArMzY2OSw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbERsbGtDYk1uVGltZXJSZXNwb25zZSh0RXBsVGltZXJFdmVudEFyZyAqCi0JCQkJCQkgIHBFdmVudEFyZ19wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsRGxsa0NiTW5UaW1lclJlc3BvbnNlKHRFcGxUaW1lckV2ZW50QXJnICpwRXZlbnRBcmdfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxObXRTdGF0ZSBObXRTdGF0ZTsKQEAgLTM2OTMsNyArMzY5MSw3IEBACiAKICAgICAgIEV4aXQ6CiAJaWYgKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgewotCQlEV09SRCBkd0FyZzsKKwkJdTMyIGR3QXJnOwogCiAJCUJFTkNITUFSS19NT0RfMDJfVE9HR0xFKDkpOwogCkBAIC0zODI3LDI0ICszODI1LDI0IEBACiAJCQkvLyB1cGRhdGUgZnJhbWUgKHRhcmdldCkKIAkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fU29hLgogCQkJCSAgICAgICBtX2xlX2JSZXFTZXJ2aWNlSWQsCi0JCQkJICAgICAgIChCWVRFKSBFcGxEbGxrSW5zdGFuY2VfZy4KKwkJCQkgICAgICAgKHU4KSBFcGxEbGxrSW5zdGFuY2VfZy4KIAkJCQkgICAgICAgbV9MYXN0UmVxU2VydmljZUlkKTsKIAkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fU29hLgogCQkJCSAgICAgICBtX2xlX2JSZXFTZXJ2aWNlVGFyZ2V0LAotCQkJCSAgICAgICAoQllURSkgRXBsRGxsa0luc3RhbmNlX2cuCisJCQkJICAgICAgICh1OCkgRXBsRGxsa0luc3RhbmNlX2cuCiAJCQkJICAgICAgIG1fdWlMYXN0VGFyZ2V0Tm9kZUlkKTsKIAogCQl9IGVsc2UgewkvLyBpbnZpdGUgbm9ib2R5CiAJCQkvLyB1cGRhdGUgZnJhbWUgKHRhcmdldCkKIAkJCUFtaVNldEJ5dGVUb0xlKCZwVHhGcmFtZS0+bV9EYXRhLm1fU29hLgotCQkJCSAgICAgICBtX2xlX2JSZXFTZXJ2aWNlSWQsIChCWVRFKSAwKTsKKwkJCQkgICAgICAgbV9sZV9iUmVxU2VydmljZUlkLCAodTgpIDApOwogCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9Tb2EuCi0JCQkJICAgICAgIG1fbGVfYlJlcVNlcnZpY2VUYXJnZXQsIChCWVRFKSAwKTsKKwkJCQkgICAgICAgbV9sZV9iUmVxU2VydmljZVRhcmdldCwgKHU4KSAwKTsKIAkJfQogCiAJCS8vIHVwZGF0ZSBmcmFtZSAoTk1UIHN0YXRlKQogCQlBbWlTZXRCeXRlVG9MZSgmcFR4RnJhbWUtPm1fRGF0YS5tX1NvYS5tX2xlX2JObXRTdGF0dXMsCi0JCQkgICAgICAgKEJZVEUpIE5tdFN0YXRlX3ApOworCQkJICAgICAgICh1OCkgTm10U3RhdGVfcCk7CiAKIAkJLy8gc2VuZCBTb0EgZnJhbWUKIAkJUmV0ID0gRWRydlNlbmRUeE1zZyhwVHhCdWZmZXIpOwpAQCAtMzkyMSw3ICszOTE5LDcgQEAKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFZHJ2VHhCdWZmZXIgKnBUeEJ1ZmZlciA9IE5VTEw7CiAJdEVwbEZyYW1lICpwVHhGcmFtZTsKLQlCWVRFIGJGbGFnMSA9IDA7CisJdTggYkZsYWcxID0gMDsKIAogCWlmIChFcGxEbGxrSW5zdGFuY2VfZy5tX3BDdXJOb2RlSW5mbyA9PSBOVUxMKSB7CS8vIHN0YXJ0IHdpdGggZmlyc3QgaXNvY2hyb25vdXMgQ04KIAkJRXBsRGxsa0luc3RhbmNlX2cubV9wQ3VyTm9kZUluZm8gPQpAQCAtMzk3Miw3ICszOTcwLDcgQEAKIAkJaWYgKHBUeEJ1ZmZlciA9PSAmRXBsRGxsa0luc3RhbmNlX2cubV9wVHhCdWZmZXJbRVBMX0RMTEtfVFhGUkFNRV9QUkVTXSkgewkvLyBQUmVzIG9mIE1OIHdpbGwgYmUgc2VudAogCQkJLy8gdXBkYXRlIE5NVCBzdGF0ZQogCQkJQW1pU2V0Qnl0ZVRvTGUoJnBUeEZyYW1lLT5tX0RhdGEubV9QcmVzLm1fbGVfYk5tdFN0YXR1cywKLQkJCQkgICAgICAgKEJZVEUpIE5tdFN0YXRlX3ApOworCQkJCSAgICAgICAodTgpIE5tdFN0YXRlX3ApOwogCQkJKnBEbGxTdGF0ZVByb3Bvc2VkX3AgPSBrRXBsRGxsTXNXYWl0U29hVHJpZzsKIAkJfQogCQkvLyAkJCQgZC5rLiBzZXQgRVBMX0ZSQU1FX0ZMQUcxX01TIGlmIG5lY2Vzc2FyeQpAQCAtNDAxNSw3ICs0MDEzLDcgQEAKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JQllURSBhYkJ1ZmZlclsxOF07CisJdTggYWJCdWZmZXJbMThdOwogCXRFcGxGcmFtZSAqcEZyYW1lID0gKHRFcGxGcmFtZSAqKSBhYkJ1ZmZlcjsKIAl0RXBsRnJhbWVJbmZvIEZyYW1lSW5mbzsKIApAQCAtNDAyNiwxMyArNDAyNCwxMyBAQAogCQkvLyBBU25kIHNlcnZpY2UgcmVnaXN0ZXJlZD8KIAkJaWYgKEVwbERsbGtJbnN0YW5jZV9nLm1fYUFzbmRGaWx0ZXJbUmVxU2VydmljZUlkX3BdID09IGtFcGxEbGxBc25kRmlsdGVyQW55KSB7CS8vIEFTbmQgc2VydmljZSBJRCBpcyByZWdpc3RlcmVkCiAJCQlBbWlTZXRCeXRlVG9MZSgmcEZyYW1lLT5tX2xlX2JTcmNOb2RlSWQsCi0JCQkJICAgICAgIChCWVRFKSB1aU5vZGVJZF9wKTsKKwkJCQkgICAgICAgKHU4KSB1aU5vZGVJZF9wKTsKIAkJCS8vIEVQTCBNc2dUeXBlIEFTbmQKIAkJCUFtaVNldEJ5dGVUb0xlKCZwRnJhbWUtPm1fbGVfYk1lc3NhZ2VUeXBlLAotCQkJCSAgICAgICAoQllURSkga0VwbE1zZ1R5cGVBc25kKTsKKwkJCQkgICAgICAgKHU4KSBrRXBsTXNnVHlwZUFzbmQpOwogCQkJLy8gQVNuZCBTZXJ2aWNlIElECiAJCQlBbWlTZXRCeXRlVG9MZSgmcEZyYW1lLT5tX0RhdGEubV9Bc25kLm1fbGVfYlNlcnZpY2VJZCwKLQkJCQkgICAgICAgKEJZVEUpIFJlcVNlcnZpY2VJZF9wKTsKKwkJCQkgICAgICAgKHU4KSBSZXFTZXJ2aWNlSWRfcCk7CiAJCQkvLyBjcmVhdGUgZnJhbWUgaW5mbyBzdHJ1Y3R1cmUKIAkJCUZyYW1lSW5mby5tX3BGcmFtZSA9IHBGcmFtZTsKIAkJCUZyYW1lSW5mby5tX3VpRnJhbWVTaXplID0gMTg7CS8vIGVtcHR5IG5vbiBleGlzdGluZyBBU25kIGZyYW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbERsbGtDYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsa0NhbC5jCmluZGV4IDM1OTA4M2UuLjBlMjgzZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsa0NhbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsa0NhbC5jCkBAIC0xNDIsOSArMTQyLDkgQEAKIAl0U2hiSW5zdGFuY2UgbV9TaGJJbnN0YW5jZVR4R2VuOwkvLyBGSUZPIGZvciBUeCBmcmFtZXMgd2l0aCBnZW5lcmljIHByaW9yaXR5CiAjZWxzZQogCXVuc2lnbmVkIGludCBtX3VpRnJhbWVTaXplTm10OwotCUJZVEUgbV9hYkZyYW1lTm10WzE1MDBdOworCXU4IG1fYWJGcmFtZU5tdFsxNTAwXTsKIAl1bnNpZ25lZCBpbnQgbV91aUZyYW1lU2l6ZUdlbjsKLQlCWVRFIG1fYWJGcmFtZUdlblsxNTAwXTsKKwl1OCBtX2FiRnJhbWVHZW5bMTUwMF07CiAjZW5kaWYKIAogCXRFcGxEbGxrQ2FsU3RhdGlzdGljcyBtX1N0YXRpc3RpY3M7CkBAIC0yMDIsNyArMjAyLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIEVwbERsbGtDYWxBZGRJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbERsbGtDYWxBZGRJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAjaWZuZGVmIEVQTF9OT19GSUZPCkBAIC0yNzksNyArMjc5LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIEVwbERsbGtDYWxEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbERsbGtDYWxEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAjaWZuZGVmIEVQTF9OT19GSUZPCkBAIC01MzYsNyArNTM2LDcgQEAKIAljYXNlIGtFcGxEbGxBc3luY1JlcVByaW9ObXQ6CS8vIE5NVCByZXF1ZXN0IHByaW9yaXR5CiAJCVNoYkVycm9yID0KIAkJICAgIFNoYkNpclJlYWREYXRhQmxvY2soRXBsRGxsa0NhbEluc3RhbmNlX2cubV9TaGJJbnN0YW5jZVR4Tm10LAotCQkJCQkoQllURSAqKSBwRnJhbWVfcCwgKnB1aUZyYW1lU2l6ZV9wLAorCQkJCQkodTggKikgcEZyYW1lX3AsICpwdWlGcmFtZVNpemVfcCwKIAkJCQkJJnVsRnJhbWVTaXplKTsKIAkJLy8gcmV0dXJucyBrU2hiT2ssIGtTaGJEYXRhVHJ1bmNhdGVkLCBrU2hiSW52YWxpZEFyZywga1NoYk5vUmVhZGFibGVEYXRhCiAJCWJyZWFrOwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAJZGVmYXVsdDoJCS8vIGdlbmVyaWMgcHJpb3JpdHkKIAkJU2hiRXJyb3IgPQogCQkgICAgU2hiQ2lyUmVhZERhdGFCbG9jayhFcGxEbGxrQ2FsSW5zdGFuY2VfZy5tX1NoYkluc3RhbmNlVHhHZW4sCi0JCQkJCShCWVRFICopIHBGcmFtZV9wLCAqcHVpRnJhbWVTaXplX3AsCisJCQkJCSh1OCAqKSBwRnJhbWVfcCwgKnB1aUZyYW1lU2l6ZV9wLAogCQkJCQkmdWxGcmFtZVNpemUpOwogCQkvLyByZXR1cm5zIGtTaGJPaywga1NoYkRhdGFUcnVuY2F0ZWQsIGtTaGJJbnZhbGlkQXJnLCBrU2hiTm9SZWFkYWJsZURhdGEKIAkJYnJlYWs7CkBAIC04NzYsNyArODc2LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHRFcGxLZXJuZWwgRXBsRGxsa0NhbElzc3VlUmVxdWVzdCh0RXBsRGxsUmVxU2VydmljZUlkIFNlcnZpY2VfcCwKLQkJCQkgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCBCWVRFIGJTb2FGbGFnMV9wKQorCQkJCSAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRGxsdUNhbC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGx1Q2FsLmMKaW5kZXggN2Y0YTE3NC4uZjk2ZmU4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGx1Q2FsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxEbGx1Q2FsLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgRXBsRGxsdUNhbEFkZEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsRGxsdUNhbEFkZEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMTk4LDcgKzE5OCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBFcGxEbGx1Q2FsRGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxEbGx1Q2FsRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0zNTUsNyArMzU1LDcgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHRFcGxLZXJuZWwgRXBsRGxsdUNhbElzc3VlUmVxdWVzdCh0RXBsRGxsUmVxU2VydmljZUlkIFNlcnZpY2VfcCwKLQkJCQkgIHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCBCWVRFIGJTb2FGbGFnMV9wKQorCQkJCSAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXJyb3JIYW5kbGVyay5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFcnJvckhhbmRsZXJrLmMKaW5kZXggZDEyNTIxZi4uNmJhZWQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFcnJvckhhbmRsZXJrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFcnJvckhhbmRsZXJrLmMKQEAgLTk3LDkgKzk3LDkgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHR5cGVkZWYgc3RydWN0IHsKLQlEV09SRCBtX2R3Q3VtdWxhdGl2ZUNudDsJLy8gc3ViaW5kZXggMQotCURXT1JEIG1fZHdUaHJlc2hvbGRDbnQ7CS8vIHN1YmluZGV4IDIKLQlEV09SRCBtX2R3VGhyZXNob2xkOwkvLyBzdWJpbmRleCAzCisJdTMyIG1fZHdDdW11bGF0aXZlQ250OwkvLyBzdWJpbmRleCAxCisJdTMyIG1fZHdUaHJlc2hvbGRDbnQ7CS8vIHN1YmluZGV4IDIKKwl1MzIgbV9kd1RocmVzaG9sZDsJLy8gc3ViaW5kZXggMwogCiB9IHRFcGxFcnJvckhhbmRsZXJrRXJyb3JDb3VudGVyOwogCkBAIC0xMTIsOSArMTEyLDkgQEAKICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVF9NTikpICE9IDApCiAJdEVwbEVycm9ySGFuZGxlcmtFcnJvckNvdW50ZXIgbV9NbkNyY0VycjsJLy8gb2JqZWN0IDB4MUMwMAogCXRFcGxFcnJvckhhbmRsZXJrRXJyb3JDb3VudGVyIG1fTW5DeWNUaW1lRXhjZWVkOwkvLyBvYmplY3QgMHgxQzAyCi0JRFdPUkQgbV9hZHdNbkNuTG9zc1ByZXNDdW1DbnRbMjU0XTsJLy8gb2JqZWN0IDB4MUMwNwotCURXT1JEIG1fYWR3TW5Dbkxvc3NQcmVzVGhyQ250WzI1NF07CS8vIG9iamVjdCAweDFDMDgKLQlEV09SRCBtX2Fkd01uQ25Mb3NzUHJlc1RocmVzaG9sZFsyNTRdOwkvLyBvYmplY3QgMHgxQzA5CisJdTMyIG1fYWR3TW5Dbkxvc3NQcmVzQ3VtQ250WzI1NF07CS8vIG9iamVjdCAweDFDMDcKKwl1MzIgbV9hZHdNbkNuTG9zc1ByZXNUaHJDbnRbMjU0XTsJLy8gb2JqZWN0IDB4MUMwOAorCXUzMiBtX2Fkd01uQ25Mb3NzUHJlc1RocmVzaG9sZFsyNTRdOwkvLyBvYmplY3QgMHgxQzA5CiAJQk9PTCBtX2FmTW5Dbkxvc3NQcmVzRXZlbnRbMjU0XTsKICNlbmRpZgogCkBAIC0xMzUsNyArMTM1LDcgQEAKIAkJCQkJCSAgIHVuc2lnbmVkIGludCB1aUluZGV4X3ApOwogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQotc3RhdGljIHRFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya0xpbmtBcnJheShEV09SRCAqIHBkd1ZhbHVlX3AsCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrTGlua0FycmF5KHUzMiAqIHBkd1ZhbHVlX3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlWYWx1ZUNvdW50X3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wKTsKICNlbmRpZgpAQCAtMTc2LDcgKzE3Niw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya0luaXQodm9pZCkKK3RFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya0luaXQodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjAzLDcgKzIwMyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya0FkZEluc3RhbmNlKHZvaWQpCit0RXBsS2VybmVsIEVwbEVycm9ySGFuZGxlcmtBZGRJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zMDYsNyArMzA2LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFcnJvckhhbmRsZXJrRGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzMzLDcgKzMzMyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya1Byb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbEVycm9ySGFuZGxlcmtQcm9jZXNzKHRFcGxFdmVudCAqcEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgbG9uZyB1bERsbEVycm9yRXZlbnRzOwpAQCAtNzEzLDcgKzcxMyw3IEBACiAJdEVwbFZhclBhcmFtIFZhclBhcmFtOwogCiAJVmFyUGFyYW0ubV9wRGF0YSA9ICZwRXJyb3JDb3VudGVyX3AtPm1fZHdDdW11bGF0aXZlQ250OwotCVZhclBhcmFtLm1fU2l6ZSA9IHNpemVvZihEV09SRCk7CisJVmFyUGFyYW0ubV9TaXplID0gc2l6ZW9mKHUzMik7CiAJVmFyUGFyYW0ubV91aUluZGV4ID0gdWlJbmRleF9wOwogCVZhclBhcmFtLm1fdWlTdWJpbmRleCA9IDB4MDE7CiAJVmFyUGFyYW0ubV9WYWxpZEZsYWcgPSBrVmFyVmFsaWRBbGw7CkBAIC03MjMsNyArNzIzLDcgQEAKIAl9CiAKIAlWYXJQYXJhbS5tX3BEYXRhID0gJnBFcnJvckNvdW50ZXJfcC0+bV9kd1RocmVzaG9sZENudDsKLQlWYXJQYXJhbS5tX1NpemUgPSBzaXplb2YoRFdPUkQpOworCVZhclBhcmFtLm1fU2l6ZSA9IHNpemVvZih1MzIpOwogCVZhclBhcmFtLm1fdWlJbmRleCA9IHVpSW5kZXhfcDsKIAlWYXJQYXJhbS5tX3VpU3ViaW5kZXggPSAweDAyOwogCVZhclBhcmFtLm1fVmFsaWRGbGFnID0ga1ZhclZhbGlkQWxsOwpAQCAtNzMzLDcgKzczMyw3IEBACiAJfQogCiAJVmFyUGFyYW0ubV9wRGF0YSA9ICZwRXJyb3JDb3VudGVyX3AtPm1fZHdUaHJlc2hvbGQ7Ci0JVmFyUGFyYW0ubV9TaXplID0gc2l6ZW9mKERXT1JEKTsKKwlWYXJQYXJhbS5tX1NpemUgPSBzaXplb2YodTMyKTsKIAlWYXJQYXJhbS5tX3VpSW5kZXggPSB1aUluZGV4X3A7CiAJVmFyUGFyYW0ubV91aVN1YmluZGV4ID0gMHgwMzsKIAlWYXJQYXJhbS5tX1ZhbGlkRmxhZyA9IGtWYXJWYWxpZEFsbDsKQEAgLTc2MywxOCArNzYzLDE4IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQotc3RhdGljIHRFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya0xpbmtBcnJheShEV09SRCAqIHBkd1ZhbHVlX3AsCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrTGlua0FycmF5KHUzMiAqIHBkd1ZhbHVlX3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlWYWx1ZUNvdW50X3AsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbFZhclBhcmFtIFZhclBhcmFtOwogCXRFcGxPYmRTaXplIEVudHJ5U2l6ZTsKLQlCWVRFIGJJbmRleEVudHJpZXM7CisJdTggYkluZGV4RW50cmllczsKIAogCUVudHJ5U2l6ZSA9ICh0RXBsT2JkU2l6ZSkgc2l6ZW9mKGJJbmRleEVudHJpZXMpOwogCVJldCA9IEVwbE9iZFJlYWRFbnRyeSh1aUluZGV4X3AsCi0JCQkgICAgICAweDAwLCAodm9pZCBHRU5FUklDICopJmJJbmRleEVudHJpZXMsICZFbnRyeVNpemUpOworCQkJICAgICAgMHgwMCwgKHZvaWQgKikmYkluZGV4RW50cmllcywgJkVudHJ5U2l6ZSk7CiAKIAlpZiAoKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgfHwgKGJJbmRleEVudHJpZXMgPT0gMHgwMCkpIHsKIAkJLy8gT2JqZWN0IGRvZXNuJ3QgZXhpc3Qgb3IgaW52YWxpZCBlbnRyeSBudW1iZXIKQEAgLTc4Niw3ICs3ODYsNyBAQAogCQl1aVZhbHVlQ291bnRfcCA9IGJJbmRleEVudHJpZXM7CiAJfQogCi0JVmFyUGFyYW0ubV9TaXplID0gc2l6ZW9mKERXT1JEKTsKKwlWYXJQYXJhbS5tX1NpemUgPSBzaXplb2YodTMyKTsKIAlWYXJQYXJhbS5tX3VpSW5kZXggPSB1aUluZGV4X3A7CiAJVmFyUGFyYW0ubV9WYWxpZEZsYWcgPSBrVmFyVmFsaWRBbGw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnQuaAppbmRleCBiNmRjMWI5Li45MTBiZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEV2ZW50LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFdmVudC5oCkBAIC0yNDgsOCArMjQ4LDggQEAKIAl0RXBsRXZlbnRTb3VyY2UgbV9FdmVudFNvdXJjZTsJLy8gbW9kdWxlIHdoaWNoIHBvc3RlZCB0aGlzIGVycm9yIGV2ZW50CiAJdEVwbEtlcm5lbCBtX0VwbEVycm9yOwkvLyBFUEwgZXJyb3Igd2hpY2ggb2NjdXJlZAogCXVuaW9uIHsKLQkJQllURSBtX2JBcmc7Ci0JCURXT1JEIG1fZHdBcmc7CisJCXU4IG1fYkFyZzsKKwkJdTMyIG1fZHdBcmc7CiAJCXRFcGxFdmVudFNvdXJjZSBtX0V2ZW50U291cmNlOwkvLyBmcm9tIEV2ZW50ay91IG1vZHVsZSAob3JpZ2luYXRpbmcgZXJyb3Igc291cmNlKQogCQl0RXBsRXZlbnRPYmRFcnJvciBtX09iZEVycm9yOwkvLyBmcm9tIE9iZCBtb2R1bGUKIC8vICAgICAgICB0RXBsRXJySGlzdG9yeUVudHJ5ICAgICBtX0hpc3RvcnlFbnRyeTsgLy8gZnJvbSBObXRrL3UgbW9kdWxlCkBAIC0yNjcsMTAgKzI2NywxMCBAQAogfSB0RXBsRXJyb3JIYW5kbGVya0V2ZW50OwogCiAvLyBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgaW5mb3JtZWQgYWJvdXQgc3luYyBldmVudAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqIHRFcGxTeW5jQ2IpICh2b2lkKTsKK3R5cGVkZWYgdEVwbEtlcm5lbCgqdEVwbFN5bmNDYikgKHZvaWQpOwogCiAvLyBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZ2VuZXJpYyBldmVudHMKLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsUHJvY2Vzc0V2ZW50Q2IpICh0RXBsRXZlbnQgKiBwRXBsRXZlbnRfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKnRFcGxQcm9jZXNzRXZlbnRDYikgKHRFcGxFdmVudCAqcEVwbEV2ZW50X3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gZnVuY3Rpb24gcHJvdG90eXBlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFdmVudGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnRrLmMKaW5kZXggODA2OGE2Yy4uZWYzNjgxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFdmVudGsuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEV2ZW50ay5jCkBAIC0xMDAsOCArMTAwLDggQEAKIAogLy8gVHJhY2VQb2ludCBzdXBwb3J0IGZvciByZWFsdGltZS1kZWJ1Z2dpbmcKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnUG9zdFRyYWNlVmFsdWUodTMyIGR3VHJhY2VWYWx1ZV9wKTsKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkgICBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHApCiAjZGVmaW5lIFRHVF9EQkdfUE9TVF9UUkFDRV9WQUxVRSh2KSAgICAgVGd0RGJnUG9zdFRyYWNlVmFsdWUodikKICNlbHNlCkBAIC0xNzIsNyArMTcyLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtJbml0KHRFcGxTeW5jQ2IgcGZuQ2JTeW5jX3ApCit0RXBsS2VybmVsIEVwbEV2ZW50a0luaXQodEVwbFN5bmNDYiBwZm5DYlN5bmNfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTk2LDcgKzE5Niw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnRrQWRkSW5zdGFuY2UodEVwbFN5bmNDYiBwZm5DYlN5bmNfcCkKK3RFcGxLZXJuZWwgRXBsRXZlbnRrQWRkSW5zdGFuY2UodEVwbFN5bmNDYiBwZm5DYlN5bmNfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKICNpZm5kZWYgRVBMX05PX0ZJRk8KQEAgLTI3NSw3ICsyNzUsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a0RlbEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsRXZlbnRrRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKICNpZm5kZWYgRVBMX05PX0ZJRk8KQEAgLTMzOSw3ICszMzksNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a1Byb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbEV2ZW50a1Byb2Nlc3ModEVwbEV2ZW50ICpwRXZlbnRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2U7CkBAIC01NjIsNyArNTYyLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtQb3N0KHRFcGxFdmVudCAqIHBFdmVudF9wKQordEVwbEtlcm5lbCBFcGxFdmVudGtQb3N0KHRFcGxFdmVudCAqcEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAjaWZuZGVmIEVQTF9OT19GSUZPCkBAIC03NTUsMTIgKzc1NSwxMiBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a1Bvc3RFcnJvcih0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2VfcCwKLQkJCQkgICAgIHRFcGxLZXJuZWwgRXBsRXJyb3JfcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUFyZ1NpemVfcCwgdm9pZCAqcEFyZ19wKQordEVwbEtlcm5lbCBFcGxFdmVudGtQb3N0RXJyb3IodEVwbEV2ZW50U291cmNlIEV2ZW50U291cmNlX3AsCisJCQkgICAgICB0RXBsS2VybmVsIEVwbEVycm9yX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlBcmdTaXplX3AsIHZvaWQgKnBBcmdfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKLQlCWVRFIGFiQnVmZmVyW0VQTF9NQVhfRVZFTlRfQVJHX1NJWkVdOworCXU4IGFiQnVmZmVyW0VQTF9NQVhfRVZFTlRfQVJHX1NJWkVdOwogCXRFcGxFdmVudEVycm9yICpwRXZlbnRFcnJvciA9ICh0RXBsRXZlbnRFcnJvciAqKSBhYkJ1ZmZlcjsKIAl0RXBsRXZlbnQgRXBsRXZlbnQ7CiAKQEAgLTgxNCw3ICs4MTQsNyBAQAogCXRTaGJFcnJvciBTaGJFcnJvcjsKIC8vdW5zaWduZWQgbG9uZyAgIHVsQmxvY2tDb3VudDsKIC8vdW5zaWduZWQgbG9uZyAgIHVsRGF0YVNpemU7Ci0JQllURSBhYkRhdGFCdWZmZXJbc2l6ZW9mKHRFcGxFdmVudCkgKyBFUExfTUFYX0VWRU5UX0FSR19TSVpFXTsKKwl1OCBhYkRhdGFCdWZmZXJbc2l6ZW9mKHRFcGxFdmVudCkgKyBFUExfTUFYX0VWRU5UX0FSR19TSVpFXTsKIAkvLyBkLmsuOiBhYkRhdGFCdWZmZXIgY29udGFpbnMgdGhlIGNvbXBsZXRlIHRFcGxFdmVudCBzdHJ1Y3R1cmUKIAkvLyAgICAgICBhbmQgYmVoaW5kIHRoaXMgdGhlIGFyZ3VtZW50CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnR1LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEV2ZW50dS5jCmluZGV4IDgxNWY5YTguLjNhZTI4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRXZlbnR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxFdmVudHUuYwpAQCAtOTYsOCArOTYsOCBAQAogCiAvLyBUcmFjZVBvaW50IHN1cHBvcnQgZm9yIHJlYWx0aW1lLWRlYnVnZ2luZwogI2lmZGVmIF9EQkdfVFJBQ0VfUE9JTlRTXwotdm9pZCBQVUJMSUMgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChCWVRFIGJUcmFjZVBvaW50TnVtYmVyX3ApOwotdm9pZCBQVUJMSUMgVGd0RGJnUG9zdFRyYWNlVmFsdWUoRFdPUkQgZHdUcmFjZVZhbHVlX3ApOwordm9pZCBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHU4IGJUcmFjZVBvaW50TnVtYmVyX3ApOwordm9pZCBUZ3REYmdQb3N0VHJhY2VWYWx1ZSh1MzIgZHdUcmFjZVZhbHVlX3ApOwogI2RlZmluZSBUR1RfREJHX1NJR05BTF9UUkFDRV9QT0lOVChwKSAgIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQocCkKICNkZWZpbmUgVEdUX0RCR19QT1NUX1RSQUNFX1ZBTFVFKHYpICAgICBUZ3REYmdQb3N0VHJhY2VWYWx1ZSh2KQogI2Vsc2UKQEAgLTE3Miw3ICsxNzIsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dUluaXQodEVwbFByb2Nlc3NFdmVudENiIHBmbkFwaVByb2Nlc3NFdmVudENiX3ApCit0RXBsS2VybmVsIEVwbEV2ZW50dUluaXQodEVwbFByb2Nlc3NFdmVudENiIHBmbkFwaVByb2Nlc3NFdmVudENiX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE5OSw4ICsxOTksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dUFkZEluc3RhbmNlKHRFcGxQcm9jZXNzRXZlbnRDYgotCQkJCSAgICAgICBwZm5BcGlQcm9jZXNzRXZlbnRDYl9wKQordEVwbEtlcm5lbCBFcGxFdmVudHVBZGRJbnN0YW5jZSh0RXBsUHJvY2Vzc0V2ZW50Q2IgcGZuQXBpUHJvY2Vzc0V2ZW50Q2JfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKICNpZm5kZWYgRVBMX05PX0ZJRk8KQEAgLTI4MCw3ICsyNzksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dURlbEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsRXZlbnR1RGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKICNpZm5kZWYgRVBMX05PX0ZJRk8KQEAgLTM0OCw3ICszNDcsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dVByb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbEV2ZW50dVByb2Nlc3ModEVwbEV2ZW50ICpwRXZlbnRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2U7CkBAIC01MTUsNyArNTE0LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudHVQb3N0KHRFcGxFdmVudCAqIHBFdmVudF9wKQordEVwbEtlcm5lbCBFcGxFdmVudHVQb3N0KHRFcGxFdmVudCAqcEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAjaWZuZGVmIEVQTF9OT19GSUZPCkBAIC02ODksMTIgKzY4OCwxMiBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dVBvc3RFcnJvcih0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2VfcCwKLQkJCQkgICAgIHRFcGxLZXJuZWwgRXBsRXJyb3JfcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUFyZ1NpemVfcCwgdm9pZCAqcEFyZ19wKQordEVwbEtlcm5lbCBFcGxFdmVudHVQb3N0RXJyb3IodEVwbEV2ZW50U291cmNlIEV2ZW50U291cmNlX3AsCisJCQkgICAgICB0RXBsS2VybmVsIEVwbEVycm9yX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlBcmdTaXplX3AsIHZvaWQgKnBBcmdfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKLQlCWVRFIGFiQnVmZmVyW0VQTF9NQVhfRVZFTlRfQVJHX1NJWkVdOworCXU4IGFiQnVmZmVyW0VQTF9NQVhfRVZFTlRfQVJHX1NJWkVdOwogCXRFcGxFdmVudEVycm9yICpwRXZlbnRFcnJvciA9ICh0RXBsRXZlbnRFcnJvciAqKSBhYkJ1ZmZlcjsKIAl0RXBsRXZlbnQgRXBsRXZlbnQ7CiAKQEAgLTc1MSw3ICs3NTAsNyBAQAogCXRTaGJFcnJvciBTaGJFcnJvcjsKIC8vdW5zaWduZWQgbG9uZyAgIHVsQmxvY2tDb3VudDsKIC8vdW5zaWduZWQgbG9uZyAgIHVsRGF0YVNpemU7Ci0JQllURSBhYkRhdGFCdWZmZXJbc2l6ZW9mKHRFcGxFdmVudCkgKyBFUExfTUFYX0VWRU5UX0FSR19TSVpFXTsKKwl1OCBhYkRhdGFCdWZmZXJbc2l6ZW9mKHRFcGxFdmVudCkgKyBFUExfTUFYX0VWRU5UX0FSR19TSVpFXTsKIAkvLyBkLmsuOiBhYkRhdGFCdWZmZXIgY29udGFpbnMgdGhlIGNvbXBsZXRlIHRFcGxFdmVudCBzdHJ1Y3R1cmUKIAkvLyAgICAgICBhbmQgYmVoaW5kIHRoaXMgdGhlIGFyZ3VtZW50CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRnJhbWUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsRnJhbWUuaAppbmRleCA5YTdmOGI5Li5iYTFhZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEZyYW1lLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxGcmFtZS5oCkBAIC0xMjIsMTU1ICsxMjIsMTU1IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKIAkvLyBPZmZzZXQgMTcKLQlCWVRFIG1fbGVfYlJlczE7CS8vIHJlc2VydmVkCisJdTggbV9sZV9iUmVzMTsJLy8gcmVzZXJ2ZWQKIAkvLyBPZmZzZXQgMTgKLQlCWVRFIG1fbGVfYkZsYWcxOwkvLyBGbGFnczogTUMsIFBTCisJdTggbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBNQywgUFMKIAkvLyBPZmZzZXQgMTkKLQlCWVRFIG1fbGVfYkZsYWcyOwkvLyBGbGFnczogcmVzCisJdTggbV9sZV9iRmxhZzI7CS8vIEZsYWdzOiByZXMKIAkvLyBPZmZzZXQgMjAKIAl0RXBsTmV0VGltZSBtX2xlX05ldFRpbWU7CS8vIHN1cHBvcnRlZCBpZiBEX05NVF9OZXRUaW1lSXNSZWFsVGltZV9CT09MIGlzIHNldAogCS8vIE9mZnNldCAyOAotCVFXT1JEIG1fbGVfUmVsYXRpdmVUaW1lOwkvLyBpbiB1cyAoc3VwcG9ydGVkIGlmIERfTk1UX1JlbGF0aXZlVGltZV9CT09MIGlzIHNldCkKKwl1NjQgbV9sZV9SZWxhdGl2ZVRpbWU7CS8vIGluIHVzIChzdXBwb3J0ZWQgaWYgRF9OTVRfUmVsYXRpdmVUaW1lX0JPT0wgaXMgc2V0KQogCiB9IFBBQ0tfU1RSVUNUIHRFcGxTb2NGcmFtZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCS8vIE9mZnNldCAxNwotCUJZVEUgbV9sZV9iUmVzMTsJLy8gcmVzZXJ2ZWQKKwl1OCBtX2xlX2JSZXMxOwkvLyByZXNlcnZlZAogCS8vIE9mZnNldCAxOAotCUJZVEUgbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBNUywgRUEsIFJECisJdTggbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBNUywgRUEsIFJECiAJLy8gT2Zmc2V0IDE5Ci0JQllURSBtX2xlX2JGbGFnMjsJLy8gRmxhZ3M6IHJlcworCXU4IG1fbGVfYkZsYWcyOwkvLyBGbGFnczogcmVzCiAJLy8gT2Zmc2V0IDIwCi0JQllURSBtX2xlX2JQZG9WZXJzaW9uOworCXU4IG1fbGVfYlBkb1ZlcnNpb247CiAJLy8gT2Zmc2V0IDIxCi0JQllURSBtX2xlX2JSZXMyOwkvLyByZXNlcnZlZAorCXU4IG1fbGVfYlJlczI7CS8vIHJlc2VydmVkCiAJLy8gT2Zmc2V0IDIyCi0JV09SRCBtX2xlX3dTaXplOworCXUxNiBtX2xlX3dTaXplOwogCS8vIE9mZnNldCAyNAotCUJZVEUgbV9sZV9hYlBheWxvYWRbMjU2IC8qRF9OTVRfSXNvY2hyUnhNYXhQYXlsb2FkX1UxNiAqLyBdOworCXU4IG1fbGVfYWJQYXlsb2FkWzI1NiAvKkRfTk1UX0lzb2NoclJ4TWF4UGF5bG9hZF9VMTYgKi8gXTsKIAogfSBQQUNLX1NUUlVDVCB0RXBsUHJlcUZyYW1lOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDE3Ci0JQllURSBtX2xlX2JObXRTdGF0dXM7CS8vIE5NVCBzdGF0ZQorCXU4IG1fbGVfYk5tdFN0YXR1czsJLy8gTk1UIHN0YXRlCiAJLy8gT2Zmc2V0IDE4Ci0JQllURSBtX2xlX2JGbGFnMTsJLy8gRmxhZ3M6IE1TLCBFTiwgUkQKKwl1OCBtX2xlX2JGbGFnMTsJLy8gRmxhZ3M6IE1TLCBFTiwgUkQKIAkvLyBPZmZzZXQgMTkKLQlCWVRFIG1fbGVfYkZsYWcyOwkvLyBGbGFnczogUFIsIFJTCisJdTggbV9sZV9iRmxhZzI7CS8vIEZsYWdzOiBQUiwgUlMKIAkvLyBPZmZzZXQgMjAKLQlCWVRFIG1fbGVfYlBkb1ZlcnNpb247CisJdTggbV9sZV9iUGRvVmVyc2lvbjsKIAkvLyBPZmZzZXQgMjEKLQlCWVRFIG1fbGVfYlJlczI7CS8vIHJlc2VydmVkCisJdTggbV9sZV9iUmVzMjsJLy8gcmVzZXJ2ZWQKIAkvLyBPZmZzZXQgMjIKLQlXT1JEIG1fbGVfd1NpemU7CisJdTE2IG1fbGVfd1NpemU7CiAJLy8gT2Zmc2V0IDI0Ci0JQllURSBtX2xlX2FiUGF5bG9hZFsyNTYJLypEX05NVF9Jc29jaHJSeE1heFBheWxvYWRfVTE2CisJdTggbV9sZV9hYlBheWxvYWRbMjU2CS8qRF9OTVRfSXNvY2hyUnhNYXhQYXlsb2FkX1UxNgogCQkJCSAgIC8gRF9OTVRfSXNvY2hyVHhNYXhQYXlsb2FkX1UxNiAqLyBdOwogCiB9IFBBQ0tfU1RSVUNUIHRFcGxQcmVzRnJhbWU7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAkvLyBPZmZzZXQgMTcKLQlCWVRFIG1fbGVfYk5tdFN0YXR1czsJLy8gTk1UIHN0YXRlCisJdTggbV9sZV9iTm10U3RhdHVzOwkvLyBOTVQgc3RhdGUKIAkvLyBPZmZzZXQgMTgKLQlCWVRFIG1fbGVfYkZsYWcxOwkvLyBGbGFnczogRUEsIEVSCisJdTggbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBFQSwgRVIKIAkvLyBPZmZzZXQgMTkKLQlCWVRFIG1fbGVfYkZsYWcyOwkvLyBGbGFnczogcmVzCisJdTggbV9sZV9iRmxhZzI7CS8vIEZsYWdzOiByZXMKIAkvLyBPZmZzZXQgMjAKLQlCWVRFIG1fbGVfYlJlcVNlcnZpY2VJZDsKKwl1OCBtX2xlX2JSZXFTZXJ2aWNlSWQ7CiAJLy8gT2Zmc2V0IDIxCi0JQllURSBtX2xlX2JSZXFTZXJ2aWNlVGFyZ2V0OworCXU4IG1fbGVfYlJlcVNlcnZpY2VUYXJnZXQ7CiAJLy8gT2Zmc2V0IDIyCi0JQllURSBtX2xlX2JFcGxWZXJzaW9uOworCXU4IG1fbGVfYkVwbFZlcnNpb247CiAKIH0gUEFDS19TVFJVQ1QgdEVwbFNvYUZyYW1lOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JV09SRCBtX3dFbnRyeVR5cGU7Ci0JV09SRCBtX3dFcnJvckNvZGU7CisJdTE2IG1fd0VudHJ5VHlwZTsKKwl1MTYgbV93RXJyb3JDb2RlOwogCXRFcGxOZXRUaW1lIG1fVGltZVN0YW1wOwotCUJZVEUgbV9hYkFkZEluZm9bOF07CisJdTggbV9hYkFkZEluZm9bOF07CiAKIH0gUEFDS19TVFJVQ1QgdEVwbEVyckhpc3RvcnlFbnRyeTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCS8vIE9mZnNldCAxOAotCUJZVEUgbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiBFTiwgRUMKLQlCWVRFIG1fbGVfYkZsYWcyOwkvLyBGbGFnczogUFIsIFJTCi0JQllURSBtX2xlX2JObXRTdGF0dXM7CS8vIE5NVCBzdGF0ZQotCUJZVEUgbV9sZV9iUmVzMVszXTsKLQlRV09SRCBtX2xlX3F3U3RhdGljRXJyb3I7CS8vIHN0YXRpYyBlcnJvciBiaXQgZmllbGQKKwl1OCBtX2xlX2JGbGFnMTsJLy8gRmxhZ3M6IEVOLCBFQworCXU4IG1fbGVfYkZsYWcyOwkvLyBGbGFnczogUFIsIFJTCisJdTggbV9sZV9iTm10U3RhdHVzOwkvLyBOTVQgc3RhdGUKKwl1OCBtX2xlX2JSZXMxWzNdOworCXU2NCBtX2xlX3F3U3RhdGljRXJyb3I7CS8vIHN0YXRpYyBlcnJvciBiaXQgZmllbGQKIAl0RXBsRXJySGlzdG9yeUVudHJ5IG1fbGVfYUVyckhpc3RvcnlFbnRyeVsxNF07CiAKIH0gUEFDS19TVFJVQ1QgdEVwbFN0YXR1c1Jlc3BvbnNlOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDE4Ci0JQllURSBtX2xlX2JGbGFnMTsJLy8gRmxhZ3M6IHJlcwotCUJZVEUgbV9sZV9iRmxhZzI7CS8vIEZsYWdzOiBQUiwgUlMKLQlCWVRFIG1fbGVfYk5tdFN0YXR1czsJLy8gTk1UIHN0YXRlCi0JQllURSBtX2xlX2JJZGVudFJlc3BGbGFnczsJLy8gRmxhZ3M6IEZXCi0JQllURSBtX2xlX2JFcGxQcm9maWxlVmVyc2lvbjsKLQlCWVRFIG1fbGVfYlJlczE7Ci0JRFdPUkQgbV9sZV9kd0ZlYXR1cmVGbGFnczsJLy8gTk1UX0ZlYXR1cmVGbGFnc19VMzIKLQlXT1JEIG1fbGVfd010dTsJCS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuQXN5bmNNVFVfVTE2OiBDX0lQX01JTl9NVFUgLSBDX0lQX01BWF9NVFUKLQlXT1JEIG1fbGVfd1BvbGxJblNpemU7CS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuUFJlcUFjdFBheWxvYWRfVTE2Ci0JV09SRCBtX2xlX3dQb2xsT3V0U2l6ZTsJLy8gTk1UX0N5Y2xlVGltaW5nX1JFQy5QUmVzQWN0UGF5bG9hZF9VMTYKLQlEV09SRCBtX2xlX2R3UmVzcG9uc2VUaW1lOwkvLyBOTVRfQ3ljbGVUaW1pbmdfUkVDLlBSZXNNYXhMYXRlbmN5X1UzMgotCVdPUkQgbV9sZV93UmVzMjsKLQlEV09SRCBtX2xlX2R3RGV2aWNlVHlwZTsJLy8gTk1UX0RldmljZVR5cGVfVTMyCi0JRFdPUkQgbV9sZV9kd1ZlbmRvcklkOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlZlbmRvcklkX1UzMgotCURXT1JEIG1fbGVfZHdQcm9kdWN0Q29kZTsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5Qcm9kdWN0Q29kZV9VMzIKLQlEV09SRCBtX2xlX2R3UmV2aXNpb25OdW1iZXI7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUmV2aXNpb25Ob19VMzIKLQlEV09SRCBtX2xlX2R3U2VyaWFsTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlNlcmlhbE5vX1UzMgotCVFXT1JEIG1fbGVfcXdWZW5kb3JTcGVjaWZpY0V4dDE7Ci0JRFdPUkQgbV9sZV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25EYXRlOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZkRhdGVfVTMyCi0JRFdPUkQgbV9sZV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25UaW1lOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZlRpbWVfVTMyCi0JRFdPUkQgbV9sZV9kd0FwcGxpY2F0aW9uU3dEYXRlOwkvLyBQRExfTG9jVmVyQXBwbFN3X1JFQy5BcHBsU3dEYXRlX1UzMiBvbiBwcm9ncmFtbWFibGUgZGV2aWNlIG9yIGRhdGUgcG9ydGlvbiBvZiBOTVRfTWFudWZhY3RTd1ZlcnNfVlMgb24gbm9uLXByb2dyYW1tYWJsZSBkZXZpY2UKLQlEV09SRCBtX2xlX2R3QXBwbGljYXRpb25Td1RpbWU7CS8vIFBETF9Mb2NWZXJBcHBsU3dfUkVDLkFwcGxTd1RpbWVfVTMyIG9uIHByb2dyYW1tYWJsZSBkZXZpY2Ugb3IgdGltZSBwb3J0aW9uIG9mIE5NVF9NYW51ZmFjdFN3VmVyc19WUyBvbiBub24tcHJvZ3JhbW1hYmxlIGRldmljZQotCURXT1JEIG1fbGVfZHdJcEFkZHJlc3M7Ci0JRFdPUkQgbV9sZV9kd1N1Ym5ldE1hc2s7Ci0JRFdPUkQgbV9sZV9kd0RlZmF1bHRHYXRld2F5OwotCUJZVEUgbV9sZV9zSG9zdG5hbWVbMzJdOwotCUJZVEUgbV9sZV9hYlZlbmRvclNwZWNpZmljRXh0Mls0OF07CisJdTggbV9sZV9iRmxhZzE7CS8vIEZsYWdzOiByZXMKKwl1OCBtX2xlX2JGbGFnMjsJLy8gRmxhZ3M6IFBSLCBSUworCXU4IG1fbGVfYk5tdFN0YXR1czsJLy8gTk1UIHN0YXRlCisJdTggbV9sZV9iSWRlbnRSZXNwRmxhZ3M7CS8vIEZsYWdzOiBGVworCXU4IG1fbGVfYkVwbFByb2ZpbGVWZXJzaW9uOworCXU4IG1fbGVfYlJlczE7CisJdTMyIG1fbGVfZHdGZWF0dXJlRmxhZ3M7CS8vIE5NVF9GZWF0dXJlRmxhZ3NfVTMyCisJdTE2IG1fbGVfd010dTsJCS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuQXN5bmNNVFVfVTE2OiBDX0lQX01JTl9NVFUgLSBDX0lQX01BWF9NVFUKKwl1MTYgbV9sZV93UG9sbEluU2l6ZTsJLy8gTk1UX0N5Y2xlVGltaW5nX1JFQy5QUmVxQWN0UGF5bG9hZF9VMTYKKwl1MTYgbV9sZV93UG9sbE91dFNpemU7CS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuUFJlc0FjdFBheWxvYWRfVTE2CisJdTMyIG1fbGVfZHdSZXNwb25zZVRpbWU7CS8vIE5NVF9DeWNsZVRpbWluZ19SRUMuUFJlc01heExhdGVuY3lfVTMyCisJdTE2IG1fbGVfd1JlczI7CisJdTMyIG1fbGVfZHdEZXZpY2VUeXBlOwkvLyBOTVRfRGV2aWNlVHlwZV9VMzIKKwl1MzIgbV9sZV9kd1ZlbmRvcklkOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlZlbmRvcklkX1UzMgorCXUzMiBtX2xlX2R3UHJvZHVjdENvZGU7CS8vIE5NVF9JZGVudGl0eU9iamVjdF9SRUMuUHJvZHVjdENvZGVfVTMyCisJdTMyIG1fbGVfZHdSZXZpc2lvbk51bWJlcjsJLy8gTk1UX0lkZW50aXR5T2JqZWN0X1JFQy5SZXZpc2lvbk5vX1UzMgorCXUzMiBtX2xlX2R3U2VyaWFsTnVtYmVyOwkvLyBOTVRfSWRlbnRpdHlPYmplY3RfUkVDLlNlcmlhbE5vX1UzMgorCXU2NCBtX2xlX3F3VmVuZG9yU3BlY2lmaWNFeHQxOworCXUzMiBtX2xlX2R3VmVyaWZ5Q29uZmlndXJhdGlvbkRhdGU7CS8vIENGTV9WZXJpZnlDb25maWd1cmF0aW9uX1JFQy5Db25mRGF0ZV9VMzIKKwl1MzIgbV9sZV9kd1ZlcmlmeUNvbmZpZ3VyYXRpb25UaW1lOwkvLyBDRk1fVmVyaWZ5Q29uZmlndXJhdGlvbl9SRUMuQ29uZlRpbWVfVTMyCisJdTMyIG1fbGVfZHdBcHBsaWNhdGlvblN3RGF0ZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3RGF0ZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciBkYXRlIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCisJdTMyIG1fbGVfZHdBcHBsaWNhdGlvblN3VGltZTsJLy8gUERMX0xvY1ZlckFwcGxTd19SRUMuQXBwbFN3VGltZV9VMzIgb24gcHJvZ3JhbW1hYmxlIGRldmljZSBvciB0aW1lIHBvcnRpb24gb2YgTk1UX01hbnVmYWN0U3dWZXJzX1ZTIG9uIG5vbi1wcm9ncmFtbWFibGUgZGV2aWNlCisJdTMyIG1fbGVfZHdJcEFkZHJlc3M7CisJdTMyIG1fbGVfZHdTdWJuZXRNYXNrOworCXUzMiBtX2xlX2R3RGVmYXVsdEdhdGV3YXk7CisJdTggbV9sZV9zSG9zdG5hbWVbMzJdOworCXU4IG1fbGVfYWJWZW5kb3JTcGVjaWZpY0V4dDJbNDhdOwogCiB9IFBBQ0tfU1RSVUNUIHRFcGxJZGVudFJlc3BvbnNlOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDE4Ci0JQllURSBtX2xlX2JObXRDb21tYW5kSWQ7Ci0JQllURSBtX2xlX2JSZXMxOwotCUJZVEUgbV9sZV9hYk5tdENvbW1hbmREYXRhWzMyXTsKKwl1OCBtX2xlX2JObXRDb21tYW5kSWQ7CisJdTggbV9sZV9iUmVzMTsKKwl1OCBtX2xlX2FiTm10Q29tbWFuZERhdGFbMzJdOwogCiB9IFBBQ0tfU1RSVUNUIHRFcGxObXRDb21tYW5kU2VydmljZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCUJZVEUgbV9sZV9iUmVzZXJ2ZWQ7Ci0JQllURSBtX2xlX2JUcmFuc2FjdGlvbklkOwotCUJZVEUgbV9sZV9iRmxhZ3M7Ci0JQllURSBtX2xlX2JDb21tYW5kSWQ7Ci0JV09SRCBtX2xlX3dTZWdtZW50U2l6ZTsKLQlXT1JEIG1fbGVfd1Jlc2VydmVkOwotCUJZVEUgbV9sZV9hYkNvbW1hbmREYXRhWzhdOwkvLyBqdXN0IHJlc2VydmUgYSBtaW5pbXVtIG51bWJlciBvZiBieXRlcyBhcyBhIHBsYWNlaG9sZGVyCisJdTggbV9sZV9iUmVzZXJ2ZWQ7CisJdTggbV9sZV9iVHJhbnNhY3Rpb25JZDsKKwl1OCBtX2xlX2JGbGFnczsKKwl1OCBtX2xlX2JDb21tYW5kSWQ7CisJdTE2IG1fbGVfd1NlZ21lbnRTaXplOworCXUxNiBtX2xlX3dSZXNlcnZlZDsKKwl1OCBtX2xlX2FiQ29tbWFuZERhdGFbOF07CS8vIGp1c3QgcmVzZXJ2ZSBhIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIGFzIGEgcGxhY2Vob2xkZXIKIAogfSBQQUNLX1NUUlVDVCB0RXBsQXN5U2RvQ29tOwogCiAvLyBhc3luY2hyb25vdXMgU0RPIFNlcXVlbmNlIEhlYWRlcgogdHlwZWRlZiBzdHJ1Y3QgewotCUJZVEUgbV9sZV9iUmVjU2VxTnVtQ29uOwotCUJZVEUgbV9sZV9iU2VuZFNlcU51bUNvbjsKLQlCWVRFIG1fbGVfYWJSZXNlcnZlZFsyXTsKKwl1OCBtX2xlX2JSZWNTZXFOdW1Db247CisJdTggbV9sZV9iU2VuZFNlcU51bUNvbjsKKwl1OCBtX2xlX2FiUmVzZXJ2ZWRbMl07CiAJdEVwbEFzeVNkb0NvbSBtX2xlX2FiU2RvU2VxUGF5bG9hZDsKIAogfSBQQUNLX1NUUlVDVCB0RXBsQXN5U2RvU2VxOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDE4Ci0JQllURSBtX2xlX2JObXRDb21tYW5kSWQ7Ci0JQllURSBtX2xlX2JUYXJnZXROb2RlSWQ7Ci0JQllURSBtX2xlX2FiTm10Q29tbWFuZERhdGFbMzJdOworCXU4IG1fbGVfYk5tdENvbW1hbmRJZDsKKwl1OCBtX2xlX2JUYXJnZXROb2RlSWQ7CisJdTggbV9sZV9hYk5tdENvbW1hbmREYXRhWzMyXTsKIAogfSBQQUNLX1NUUlVDVCB0RXBsTm10UmVxdWVzdFNlcnZpY2U7CiAKQEAgLTI4MSwxNCArMjgxLDE0IEBACiAJdEVwbE5tdENvbW1hbmRTZXJ2aWNlIG1fTm10Q29tbWFuZFNlcnZpY2U7CiAJdEVwbE5tdFJlcXVlc3RTZXJ2aWNlIG1fTm10UmVxdWVzdFNlcnZpY2U7CiAJdEVwbEFzeVNkb1NlcSBtX1Nkb1NlcXVlbmNlRnJhbWU7Ci0JQllURSBtX2xlX2FiUGF5bG9hZFsyNTYJLypEX05NVF9BU25kVHhNYXhQYXlsb2FkX1UxNgorCXU4IG1fbGVfYWJQYXlsb2FkWzI1NgkvKkRfTk1UX0FTbmRUeE1heFBheWxvYWRfVTE2CiAJCQkJICAgLyBEX05NVF9BU25kUnhNYXhQYXlsb2FkX1UxNiAqLyBdOwogCiB9IHRFcGxBc25kUGF5bG9hZDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCS8vIE9mZnNldCAxNwotCUJZVEUgbV9sZV9iU2VydmljZUlkOworCXU4IG1fbGVfYlNlcnZpY2VJZDsKIAkvLyBPZmZzZXQgMTgKIAl0RXBsQXNuZFBheWxvYWQgbV9QYXlsb2FkOwogCkBAIC0zMDYsMTcgKzMwNiwxNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJLy8gT2Zmc2V0IDAKLQlCWVRFIG1fYmVfYWJEc3RNYWNbNl07CS8vIE1BQyBhZGRyZXNzIG9mIHRoZSBhZGRyZXNzZWQgbm9kZXMKKwl1OCBtX2JlX2FiRHN0TWFjWzZdOwkvLyBNQUMgYWRkcmVzcyBvZiB0aGUgYWRkcmVzc2VkIG5vZGVzCiAJLy8gT2Zmc2V0IDYKLQlCWVRFIG1fYmVfYWJTcmNNYWNbNl07CS8vIE1BQyBhZGRyZXNzIG9mIHRoZSB0cmFuc21pdHRpbmcgbm9kZQorCXU4IG1fYmVfYWJTcmNNYWNbNl07CS8vIE1BQyBhZGRyZXNzIG9mIHRoZSB0cmFuc21pdHRpbmcgbm9kZQogCS8vIE9mZnNldCAxMgotCVdPUkQgbV9iZV93RXRoZXJUeXBlOwkvLyBFdGhlcm5ldCBtZXNzYWdlIHR5cGUgKGJpZyBlbmRpYW4pCisJdTE2IG1fYmVfd0V0aGVyVHlwZTsJLy8gRXRoZXJuZXQgbWVzc2FnZSB0eXBlIChiaWcgZW5kaWFuKQogCS8vIE9mZnNldCAxNAotCUJZVEUgbV9sZV9iTWVzc2FnZVR5cGU7CS8vIEVQTCBtZXNzYWdlIHR5cGUKKwl1OCBtX2xlX2JNZXNzYWdlVHlwZTsJLy8gRVBMIG1lc3NhZ2UgdHlwZQogCS8vIE9mZnNldCAxNQotCUJZVEUgbV9sZV9iRHN0Tm9kZUlkOwkvLyBFUEwgbm9kZSBJRCBvZiB0aGUgYWRkcmVzc2VkIG5vZGVzCisJdTggbV9sZV9iRHN0Tm9kZUlkOwkvLyBFUEwgbm9kZSBJRCBvZiB0aGUgYWRkcmVzc2VkIG5vZGVzCiAJLy8gT2Zmc2V0IDE2Ci0JQllURSBtX2xlX2JTcmNOb2RlSWQ7CS8vIEVQTCBub2RlIElEIG9mIHRoZSB0cmFuc21pdHRpbmcgbm9kZQorCXU4IG1fbGVfYlNyY05vZGVJZDsJLy8gRVBMIG5vZGUgSUQgb2YgdGhlIHRyYW5zbWl0dGluZyBub2RlCiAJLy8gT2Zmc2V0IDE3CiAJdEVwbEZyYW1lRGF0YSBtX0RhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSWRlbnR1LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbElkZW50dS5jCmluZGV4IGNlNTllZjAuLjkzZDVhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSWRlbnR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJZGVudHUuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsSWRlbnR1Q2JJZGVudFJlc3BvbnNlKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsSWRlbnR1Q2JJZGVudFJlc3BvbnNlKHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCk7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMTY0LDcgKzE2NCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dUluaXQoKQordEVwbEtlcm5lbCBFcGxJZGVudHVJbml0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVBZGRJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbElkZW50dUFkZEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbElkZW50dURlbEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTI2Myw3ICsyNjMsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVSZXNldCgpCit0RXBsS2VybmVsIEVwbElkZW50dVJlc2V0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJaW50IGlJbmRleDsKQEAgLTMwMCw5ICszMDAsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dUdldElkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgICB0RXBsSWRlbnRSZXNwb25zZSAqKgotCQkJCQkgICAgcHBJZGVudFJlc3BvbnNlX3ApCit0RXBsS2VybmVsIEVwbElkZW50dUdldElkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJICAgICB0RXBsSWRlbnRSZXNwb25zZSAqKnBwSWRlbnRSZXNwb25zZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zMzgsOSArMzM3LDggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVSZXF1ZXN0SWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCXRFcGxJZGVudHVDYlJlc3BvbnNlCi0JCQkJCQlwZm5DYlJlc3BvbnNlX3ApCit0RXBsS2VybmVsIEVwbElkZW50dVJlcXVlc3RJZGVudFJlc3BvbnNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJCQkgdEVwbElkZW50dUNiUmVzcG9uc2UgcGZuQ2JSZXNwb25zZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zODgsOSArMzg2LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FUExETExFWFBPUlQgRFdPUkQgUFVCTElDIEVwbElkZW50dUdldFJ1bm5pbmdSZXF1ZXN0cyh2b2lkKQordTMyIEVwbElkZW50dUdldFJ1bm5pbmdSZXF1ZXN0cyh2b2lkKQogewotCURXT1JEIGR3UmVxcyA9IDA7CisJdTMyIGR3UmVxcyA9IDA7CiAJdW5zaWduZWQgaW50IHVpSW5kZXg7CiAKIAlmb3IgKHVpSW5kZXggPSAwOyB1aUluZGV4IDwgMzI7IHVpSW5kZXgrKykgewpAQCAtNDI2LDcgKzQyNCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dUNiSWRlbnRSZXNwb25zZSh0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsSWRlbnR1Q2JJZGVudFJlc3BvbnNlKHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSW5jLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbEluYy5oCmluZGV4IDc3ZjkzZDEuLmY5MTc5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSW5jLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJbmMuaApAQCAtMTQwLDggKzE0MCw4IEBACiAKIC8vIElFRUUgMTU4OCBjb25mb3JtYW50IG5ldCB0aW1lIHN0cnVjdHVyZQogdHlwZWRlZiBzdHJ1Y3QgewotCURXT1JEIG1fZHdTZWM7Ci0JRFdPUkQgbV9kd05hbm9TZWM7CisJdTMyIG1fZHdTZWM7CisJdTMyIG1fZHdOYW5vU2VjOwogCiB9IHRFcGxOZXRUaW1lOwogCkBAIC0xNTQsOCArMTU0LDggQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2RlZmluZSBFUExfU1BFQ19WRVJTSU9OICAgICAgICAgICAgICAgICAgICAweDIwCS8vIEVUSEVSTkVUIFBvd2VybGluayBWLiAyLjAKLSNkZWZpbmUgRVBMX1NUQUNLX1ZFUlNJT04odmVyLHJldixyZWwpICAgICAgKCgoKERXT1JEKSh2ZXIpKSAmIDB4RkYpfCgoKChEV09SRCkocmV2KSkmMHhGRik8PDgpfCgoKERXT1JEKShyZWwpKTw8MTYpKQotI2RlZmluZSBFUExfT0JKMTAxOF9WRVJTSU9OKHZlcixyZXYscmVsKSAgICAoKCgoRFdPUkQpKHZlcikpPDwxNikgfCgoKERXT1JEKShyZXYpKSYweEZGRkYpKQorI2RlZmluZSBFUExfU1RBQ0tfVkVSU0lPTih2ZXIscmV2LHJlbCkgICAgICAoKCgodTMyKSh2ZXIpKSAmIDB4RkYpfCgoKCh1MzIpKHJldikpJjB4RkYpPDw4KXwoKCh1MzIpKHJlbCkpPDwxNikpCisjZGVmaW5lIEVQTF9PQkoxMDE4X1ZFUlNJT04odmVyLHJldixyZWwpICAgICgoKCh1MzIpKHZlcikpPDwxNikgfCgoKHUzMikocmV2KSkmMHhGRkZGKSkKICNkZWZpbmUgRVBMX1NUUklOR19WRVJTSU9OKHZlcixyZXYscmVsKSAgICAgIlYiICN2ZXIgIi4iICNyZXYgIiByIiAjcmVsCiAKICNpbmNsdWRlICJFcGxWZXJzaW9uLmgiCkBAIC0yMzYsMjEgKzIzNiw2IEBACiAjZGVmaW5lIHRhYmVudHJpZXMoYSkgICAoc2l6ZW9mKGEpL3NpemVvZigqKGEpKSkKICNlbmRpZgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gZGVmaW5pdGlvbnMgZm9yIERMTCBleHBvcnQKLSNpZiAoKERFVl9TWVNURU0gPT0gX0RFVl9XSU4zMl8pIHx8IChERVZfU1lTVEVNID09IF9ERVZfV0lOX0NFXykpICYmIGRlZmluZWQgKENPUF9MSUIpCi0KLSNkZWZpbmUgRVBMRExMRVhQT1JUICAgIF9fZGVjbHNwZWMgKGRsbGV4cG9ydCkKLQotI2Vsc2UKLQotI2RlZmluZSBFUExETExFWFBPUlQKLQotI2VuZGlmCi0KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIGNvbW1vbiBkZWJ1ZyBtYWNyb3MKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsSW5zdERlZi5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJbnN0RGVmLmgKaW5kZXggODllZmJmMi4uMjlhYjdmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJbnN0RGVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxJbnN0RGVmLmgKQEAgLTcxLDYgKzcxLDggQEAKICNpZm5kZWYgX0VQTElOU1RERUZfSF8KICNkZWZpbmUgX0VQTElOU1RERUZfSF8KIAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyB0eXBlcyBhbmQgbWFjcm9zIGZvciBnZW5lcmF0aW5nIGluc3RhbmNlcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtODMsOCArODUsOCBAQAogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10eXBlZGVmIHZvaWQgTUVNICp0RXBsUHRySW5zdGFuY2U7Ci10eXBlZGVmIEJZVEUgdEVwbEluc3RhbmNlSGRsOwordHlwZWRlZiB2b2lkICp0RXBsUHRySW5zdGFuY2U7Cit0eXBlZGVmIHU4IHRFcGxJbnN0YW5jZUhkbDsKIAogLy8gZGVmaW5lIGNvbnN0IGZvciBpbGxlZ2FsZSB2YWx1ZXMKICNkZWZpbmUgQ0NNX0lMTElOU1RBTkNFICAgICAgTlVMTApAQCAtOTksOCArMTAxLDYgQEAKICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBtZW1vcnkgYXR0cmlidXRlcyBmb3IgaW5zdGFuY2UgdGFibGUKLSNkZWZpbmUgSU5TVF9ORUFSCQkvLyBmYXN0ZXIgYWNjZXNzIHRvIHZhcmlhYmxlcwotI2RlZmluZSBJTlNUX0ZBUgkJLy8gdmFyaWFibGVzIHdpY2ggaGF2ZSB0byBsb2NhdGVkIGluIHhkYXRhCiAjZGVmaW5lIFNUQVRJQwkJCS8vIHByZXZlbnQgd2FybmluZ3MgZm9yIHZhcmlhYmxlcyB3aXRoIHNhbWUgbmFtZQogCiAjZGVmaW5lIElOU1RBTkNFX1RZUEVfQkVHSU4gICAgIHR5cGVkZWYgc3RydWN0IHsKQEAgLTExNywxMiArMTE3LDEyIEBACiAjZGVmaW5lIENDTV9ERUNMX0lOU1RBTkNFX0hETF8gICAgICAgICAgICAgICAgICB0RXBsSW5zdGFuY2VIZGwgSW5zdGFuY2VIYW5kbGUsCiAKICAgICAvLyBtYWNyb3MgZm9yIGRlY2xhcmF0aW9uIG9mIHBvaW50ZXIgdG8gaW5zdGFuY2UgaGFuZGxlIHdpdGhpbiBmdW5jdGlvbiBoZWFkZXIgb3IgcHJvdG90eXBlIG9mIEFQSSBmdW5jdGlvbnMKLSNkZWZpbmUgQ0NNX0RFQ0xfUFRSX0lOU1RBTkNFX0hETCAgICAgICAgICAgICAgIHRFcGxJbnN0YW5jZUhkbCBNRU0qIHBJbnN0YW5jZUhhbmRsZQotI2RlZmluZSBDQ01fREVDTF9QVFJfSU5TVEFOQ0VfSERMXyAgICAgICAgICAgICAgdEVwbEluc3RhbmNlSGRsIE1FTSogcEluc3RhbmNlSGFuZGxlLAorI2RlZmluZSBDQ01fREVDTF9QVFJfSU5TVEFOQ0VfSERMICAgICAgICAgICAgICAgdEVwbEluc3RhbmNlSGRsICpwSW5zdGFuY2VIYW5kbGUKKyNkZWZpbmUgQ0NNX0RFQ0xfUFRSX0lOU1RBTkNFX0hETF8gICAgICAgICAgICAgIHRFcGxJbnN0YW5jZUhkbCAqcEluc3RhbmNlSGFuZGxlLAogCiAgICAgLy8gbWFjcm9zIGZvciBkZWNsYXJhdGlvbiBpbnN0YW5jZSBhcyBsb2thY2wgdmFyaWFibGUgd2l0aGluIGZ1bmN0aW9ucwotI2RlZmluZSBDQ01fREVDTF9JTlNUQU5DRV9QVFJfTE9DQUwgICAgICAgICAgICAgdENjbUluc3RhbmNlSW5mbyBNRU0qIHBJbnN0YW5jZTsKLSNkZWZpbmUgQ0NNX0RFQ0xfUFRSX0lOU1RBTkNFX0hETF9MT0NBTCAgICAgICAgIHRFcGxJbnN0YW5jZUhkbCAgTUVNKiBwSW5zdGFuY2VIYW5kbGU7CisjZGVmaW5lIENDTV9ERUNMX0lOU1RBTkNFX1BUUl9MT0NBTCAgICAgICAgICAgICB0Q2NtSW5zdGFuY2VJbmZvICpwSW5zdGFuY2U7CisjZGVmaW5lIENDTV9ERUNMX1BUUl9JTlNUQU5DRV9IRExfTE9DQUwgICAgICAgICB0RXBsSW5zdGFuY2VIZGwgICpwSW5zdGFuY2VIYW5kbGU7CiAKICAgICAvLyByZWZlcmVuY2U6CiAKQEAgLTE2MywxMCArMTYzLDEwIEBACiAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8gbWFjcm9zIGZvciBkZWNsYXJhdGlvbiB3aXRoaW4gdGhlIGZ1bmN0aW9uIGhlYWRlciwgcHJvdG90eXBlIG9yIGxvY2FsIHZhciBsaXN0Ci0gICAgLy8gRGVjbGFyYXRpb24gb2YgcG9pbnRlcnMgd2l0aGluIGZ1bmN0aW9uIHBhcmFtYXRlciBsaXN0IG11c3QgZGVmaW5lZCBhcyB2b2lkIE1FTSoKKyAgICAvLyBEZWNsYXJhdGlvbiBvZiBwb2ludGVycyB3aXRoaW4gZnVuY3Rpb24gcGFyYW1hdGVyIGxpc3QgbXVzdCBkZWZpbmVkIGFzIHZvaWQgKgogICAgIC8vIHBvaW50ZXIuCi0jZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIgICAgICAgICAgICAgICAgICAgdm9pZCBNRU0qIHBJbnN0YW5jZQotI2RlZmluZSBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyAgICAgICAgICAgICAgICAgIHZvaWQgTUVNKiBwSW5zdGFuY2UsCisjZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIgICAgICAgICAgICAgICAgICAgdm9pZCAqcEluc3RhbmNlCisjZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfICAgICAgICAgICAgICAgICAgdm9pZCAqcEluc3RhbmNlLAogI2RlZmluZSBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMICAgICAgICAgICAgIHRFcGxQdHJJbnN0YW5jZSAgcEluc3RhbmNlOwogCiAgICAgLy8gbWFjcm9zIGZvciByZWZlcmVuY2Ugb2YgcG9pbnRlciB0byBpbnN0YW5jZQpAQCAtMTkxLDggKzE5MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUICgoKHRFcGxQdHJJbnN0YW5jZSlwSW5zdGFuY2UpLT5tX0luc3RTdGF0ZSA9PSBrU3RhdGVVc2VkKTsKIAogICAgIC8vIG1hY3JvcyBmb3IgZGVjbGFyYXRpb24gb2YgcG9pbnRlciB0byBpbnN0YW5jZSBwb2ludGVyCi0jZGVmaW5lIEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSICAgICAgICAgICAgICAgdm9pZCBNRU0qICBNRU0qIHBJbnN0YW5jZVB0cgotI2RlZmluZSBFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8gICAgICAgICAgICAgIHZvaWQgTUVNKiAgTUVNKiBwSW5zdGFuY2VQdHIsCisjZGVmaW5lIEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSICAgICAgICAgICAgICAgdm9pZCAqKnBJbnN0YW5jZVB0cgorI2RlZmluZSBFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8gICAgICAgICAgICAgIHZvaWQgKipwSW5zdGFuY2VQdHIsCiAKICAgICAvLyBtYWNyb3MgZm9yIHJlZmVyZW5jZSBvZiBwb2ludGVyIHRvIGluc3RhbmNlIHBvaW50ZXIKICAgICAvLyBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgZm9yIHBhcmFtZXRlciBwYXNzaW5nIHRvIGNhbGxlZCBmdW5jdGlvbi4KQEAgLTIxMiwxMiArMjEyLDEyIEBACiAgICAgLy8gdGhpcyBtYWNybyBkZWxldGVzIGFsbCBpbnN0YW5jZSBlbnRyaWVzIGFzIHVudXNlZAogI2RlZmluZSBFUExfTUNPX0RFTEVURV9JTlNUQU5DRV9UQUJMRSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSogICBwSW5zdGFuY2UgICAgICAgPSAmYUVwbEluc3RhbmNlVGFibGVfZ1swXTsgXAotICAgICAgICB0RmFzdEJ5dGUgICAgICAgICAgICAgICBJbnN0TnVtYmVyICAgICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0RmFzdEJ5dGUgICAgICAgICAgICAgICBpICAgICAgICAgICAgICAgPSBFUExfTUFYX0lOU1RBTkNFUzsgICAgICAgXAorICAgICAgICB0RXBsSW5zdGFuY2VJbmZvICogICBwSW5zdGFuY2UgICAgICAgPSAmYUVwbEluc3RhbmNlVGFibGVfZ1swXTsgICAgXAorICAgICAgICB0RmFzdEJ5dGUgICAgICAgICAgICBJbnN0TnVtYmVyICAgICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0RmFzdEJ5dGUgICAgICAgICAgICBpICAgICAgICAgICAgICAgPSBFUExfTUFYX0lOU1RBTkNFUzsgICAgICAgICAgXAogICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcEluc3RhbmNlLT5tX0luc3RTdGF0ZSA9IChCWVRFKSBrU3RhdGVVbnVzZWQ7ICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcEluc3RhbmNlLT5tX2JJbnN0SW5kZXggPSAoQllURSkgSW5zdE51bWJlcjsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcEluc3RhbmNlLT5tX0luc3RTdGF0ZSA9ICh1OCkga1N0YXRlVW51c2VkOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHBJbnN0YW5jZS0+bV9iSW5zdEluZGV4ID0gKHU4KSBJbnN0TnVtYmVyOyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBwSW5zdGFuY2UrKzsgSW5zdE51bWJlcisrOyBpLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gd2hpbGUgKGkgIT0gMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQpAQCAtMjMwLDggKzIzMCw4IEBACiAgICAgICAgIHN0YXRpYyB0RXBsUHRySW5zdGFuY2UgR2V0SW5zdGFuY2VQdHIgKHRFcGxJbnN0YW5jZUhkbCBJbnN0SGFuZGxlX3ApIHsgXAogICAgICAgICAgICAgcmV0dXJuICZhRXBsSW5zdGFuY2VUYWJsZV9nW0luc3RIYW5kbGVfcF07IH0gICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgc3RhdGljIHRFcGxQdHJJbnN0YW5jZSBHZXRGcmVlSW5zdGFuY2UgKHZvaWQpIHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSogICBwSW5zdGFuY2UgICA9ICZhRXBsSW5zdGFuY2VUYWJsZV9nWzBdOyAgICAgXAotICAgICAgICAgICAgdEZhc3RCeXRlICAgICAgICAgICAgICAgaSAgICAgICAgICAgPSBFUExfTUFYX0lOU1RBTkNFUzsgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRFcGxJbnN0YW5jZUluZm8gKnBJbnN0YW5jZSAgID0gJmFFcGxJbnN0YW5jZVRhYmxlX2dbMF07ICAgICAgICAgICBcCisgICAgICAgICAgICB0RmFzdEJ5dGUgICAgICAgICBpICAgICAgICAgICA9IEVQTF9NQVhfSU5TVEFOQ0VTOyAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgZG8geyBpZiAocEluc3RhbmNlLT5tX0luc3RTdGF0ZSAhPSBrU3RhdGVVc2VkKSB7ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0RXBsUHRySW5zdGFuY2UpIHBJbnN0YW5jZTsgfSAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgcEluc3RhbmNlKys7IGktLTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjQwLDEzICsyNDAsMTMgQEAKIAogICAgIC8vIHRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgaW5zdGFuY2UgdGFibGUuIEVhY2ggZW50cnkgaXMgcmVzZXJ2ZWQgZm9yIGFuIGluc3RhbmNlIG9mIENBTm9wZW4uCiAjZGVmaW5lIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9WQVIoKSBcCi0gICAgICAgIHN0YXRpYyB0RXBsSW5zdGFuY2VJbmZvIE1FTSBhRXBsSW5zdGFuY2VUYWJsZV9nIFtFUExfTUFYX0lOU1RBTkNFU107CisgICAgICAgIHN0YXRpYyB0RXBsSW5zdGFuY2VJbmZvIGFFcGxJbnN0YW5jZVRhYmxlX2cgW0VQTF9NQVhfSU5TVEFOQ0VTXTsKIAogICAgIC8vIHRoaXMgbWFjcm8gZGVmaW5lcyBtZW1iZXIgdmFyaWFibGVzIGluIGluc3RhbmNlIHRhYmxlIHdoaWNoIGFyZSBuZWVkZWQgaW4KICAgICAvLyBhbGwgbW9kdWxlcyBvZiBFcGwgc3RhY2sKICNkZWZpbmUgRVBMX01DT19ERUNMX0lOU1RBTkNFX01FTUJFUigpIFwKLSAgICAgICAgU1RBVElDICBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5zdFN0YXRlOyBcCi0gICAgICAgIFNUQVRJQyAgQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2JJbnN0SW5kZXg7CisgICAgICAgIFNUQVRJQyAgdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbnN0U3RhdGU7IFwKKyAgICAgICAgU1RBVElDICB1OCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2JJbnN0SW5kZXg7CiAKICNkZWZpbmUgRVBMX01DT19JTlNUQU5DRV9QQVJBTV9JRFhfKCkgICAgICAgICAgIEVQTF9NQ09fSU5TVEFOQ0VfUEFSQU1fIChFUExfTUNPX0dMQl9WQVIgKG1fYkluc3RJbmRleCkpCiAjZGVmaW5lIEVQTF9NQ09fSU5TVEFOQ0VfUEFSQU1fSURYKCkgICAgICAgICAgICBFUExfTUNPX0lOU1RBTkNFX1BBUkFNIChFUExfTUNPX0dMQl9WQVIgKG1fYkluc3RJbmRleCkpCkBAIC0yNTQsOCArMjU0LDYgQEAKICNlbHNlIC8vIG9ubHkgb25lIGluc3RhbmNlIGlzIHVzZWQKIAogICAgIC8vIE1lbW9yeSBhdHRyaWJ1dGVzIGZvciBpbnN0YW5jZSB0YWJsZS4KLSNkZWZpbmUgSU5TVF9ORUFSICAgTkVBUgkvLyBmYXN0ZXIgYWNjZXNzIHRvIHZhcmlhYmxlcwotI2RlZmluZSBJTlNUX0ZBUiAgICBNRU0JCS8vIHZhcmlhYmxlcyB3aWNoIGhhdmUgdG8gbG9jYXRlZCBpbiB4ZGF0YQogI2RlZmluZSBTVEFUSUMgICAgICBzdGF0aWMJLy8gcHJldmVudCB3YXJuaW5ncyBmb3IgdmFyaWFibGVzIHdpdGggc2FtZSBuYW1lCiAKICNkZWZpbmUgSU5TVEFOQ0VfVFlQRV9CRUdJTgpAQCAtMzU5LDE4ICszNTcsNiBAQAogCiAjZW5kaWYKIAotLyoKLSNpZiAoQ0RSVl9NQVhfSU5TVEFOQ0VTID4gMSkKLQotICAgICNkZWZpbmUgQ0RSVl9SRUVOVFJBTlQgICAgICAgICAgICAgICAgICAgICAgICAgIFJFRU5UUkFOVAotCi0jZWxzZQotCi0gICAgI2RlZmluZSBDRFJWX1JFRU5UUkFOVAotCi0jZW5kaWYKLSovCi0KICNlbmRpZiAvLyBfRVBMSU5TVERFRl9IXwogCiAvLyBEaWUgbGV0enRlIFplaWxlIG113yB1bmJlZGluZ3QgZWluZSBsZWVyZSBaZWlsZSBzZWluLCB3ZWlsIG1hbmNoZSBDb21waWxlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10LmgKaW5kZXggNGMxMWU1Yi4uZTM1MWI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdC5oCkBAIC0xODUsNyArMTg1LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gTm9kZUlkCiAJdEVwbE5tdFN0YXRlIG1fTm10U3RhdGU7CS8vIE5NVCBzdGF0ZSAocmVtZW1iZXIgZGlzdGluZ3Vpc2ggYmV0d2VlbiBNTiAvIENOKQotCVdPUkQgbV93RXJyb3JDb2RlOwkvLyBFUEwgZXJyb3IgY29kZSBpbiBjYXNlIG9mIE5NVCBzdGF0ZSBOb3RBY3RpdmUKKwl1MTYgbV93RXJyb3JDb2RlOwkvLyBFUEwgZXJyb3IgY29kZSBpbiBjYXNlIG9mIE5NVCBzdGF0ZSBOb3RBY3RpdmUKIAogfSB0RXBsSGVhcnRiZWF0RXZlbnQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10Q251LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdENudS5jCmluZGV4IGYyZjQ2ZGEuLmMyN2NhOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10Q251LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXRDbnUuYwpAQCAtMTA4LDkgKzEwOCw5IEBACiAKIHN0YXRpYyB0RXBsTm10Q29tbWFuZCBFcGxObXRDbnVHZXRObXRDb21tYW5kKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOwogCi1zdGF0aWMgQk9PTCBFcGxObXRDbnVOb2RlSWRMaXN0KEJZVEUgKiBwYk5tdENvbW1hbmREYXRlX3ApOworc3RhdGljIEJPT0wgRXBsTm10Q251Tm9kZUlkTGlzdCh1OCAqIHBiTm10Q29tbWFuZERhdGVfcCk7CiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRDbnVDb21tYW5kQ2IodEVwbEZyYW1lSW5mbyAqIHBGcmFtZUluZm9fcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxObXRDbnVDb21tYW5kQ2IodEVwbEZyYW1lSW5mbyAqcEZyYW1lSW5mb19wKTsKIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCkBAIC0xMzUsNyArMTM1LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10Q251SW5pdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCkKK3RFcGxLZXJuZWwgRXBsTm10Q251SW5pdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTYxLDcgKzE2MSw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdENudUFkZEluc3RhbmNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKQordEVwbEtlcm5lbCBFcGxObXRDbnVBZGRJbnN0YW5jZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjAxLDcgKzIwMSw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdENudURlbEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsTm10Q251RGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjM0LDkgKzIzNCw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdENudVNlbmRObXRSZXF1ZXN0KHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICAgICAgIHRFcGxObXRDb21tYW5kCi0JCQkJCQkgICAgICAgTm10Q29tbWFuZF9wKQordEVwbEtlcm5lbCBFcGxObXRDbnVTZW5kTm10UmVxdWVzdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkgICB0RXBsTm10Q29tbWFuZCBObXRDb21tYW5kX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEZyYW1lSW5mbyBObXRSZXF1ZXN0RnJhbWVJbmZvOwpAQCAtMjQ5LDE1ICsyNDgsMTUgQEAKIAlFUExfTUVNU0VUKCZObXRSZXF1ZXN0RnJhbWUubV9iZV9hYlNyY01hY1swXSwgMHgwMCwgc2l6ZW9mKE5tdFJlcXVlc3RGcmFtZS5tX2JlX2FiU3JjTWFjKSk7CS8vIHNldCBieSBETEwKIAlBbWlTZXRXb3JkVG9CZSgmTm10UmVxdWVzdEZyYW1lLm1fYmVfd0V0aGVyVHlwZSwKIAkJICAgICAgIEVQTF9DX0RMTF9FVEhFUlRZUEVfRVBMKTsKLQlBbWlTZXRCeXRlVG9MZSgmTm10UmVxdWVzdEZyYW1lLm1fbGVfYkRzdE5vZGVJZCwgKEJZVEUpIEVQTF9DX0FEUl9NTl9ERUZfTk9ERV9JRCk7CS8vIG5vZGUgaWQgb2YgdGhlIE1OCisJQW1pU2V0Qnl0ZVRvTGUoJk5tdFJlcXVlc3RGcmFtZS5tX2xlX2JEc3ROb2RlSWQsICh1OCkgRVBMX0NfQURSX01OX0RFRl9OT0RFX0lEKTsJLy8gbm9kZSBpZCBvZiB0aGUgTU4KIAlBbWlTZXRCeXRlVG9MZSgmTm10UmVxdWVzdEZyYW1lLm1fbGVfYk1lc3NhZ2VUeXBlLAotCQkgICAgICAgKEJZVEUpIGtFcGxNc2dUeXBlQXNuZCk7CisJCSAgICAgICAodTgpIGtFcGxNc2dUeXBlQXNuZCk7CiAJQW1pU2V0Qnl0ZVRvTGUoJk5tdFJlcXVlc3RGcmFtZS5tX0RhdGEubV9Bc25kLm1fbGVfYlNlcnZpY2VJZCwKLQkJICAgICAgIChCWVRFKSBrRXBsRGxsQXNuZE5tdFJlcXVlc3QpOworCQkgICAgICAgKHU4KSBrRXBsRGxsQXNuZE5tdFJlcXVlc3QpOwogCUFtaVNldEJ5dGVUb0xlKCZObXRSZXF1ZXN0RnJhbWUubV9EYXRhLm1fQXNuZC5tX1BheWxvYWQuCiAJCSAgICAgICBtX05tdFJlcXVlc3RTZXJ2aWNlLm1fbGVfYk5tdENvbW1hbmRJZCwKLQkJICAgICAgIChCWVRFKSBObXRDb21tYW5kX3ApOwotCUFtaVNldEJ5dGVUb0xlKCZObXRSZXF1ZXN0RnJhbWUubV9EYXRhLm1fQXNuZC5tX1BheWxvYWQubV9ObXRSZXF1ZXN0U2VydmljZS5tX2xlX2JUYXJnZXROb2RlSWQsIChCWVRFKSB1aU5vZGVJZF9wKTsJLy8gdGFyZ2V0IGZvciB0aGUgbm10IGNvbW1hbmQKKwkJICAgICAgICh1OCkgTm10Q29tbWFuZF9wKTsKKwlBbWlTZXRCeXRlVG9MZSgmTm10UmVxdWVzdEZyYW1lLm1fRGF0YS5tX0FzbmQubV9QYXlsb2FkLm1fTm10UmVxdWVzdFNlcnZpY2UubV9sZV9iVGFyZ2V0Tm9kZUlkLCAodTgpIHVpTm9kZUlkX3ApOwkvLyB0YXJnZXQgZm9yIHRoZSBubXQgY29tbWFuZAogCUVQTF9NRU1TRVQoJk5tdFJlcXVlc3RGcmFtZS5tX0RhdGEubV9Bc25kLm1fUGF5bG9hZC5tX05tdFJlcXVlc3RTZXJ2aWNlLgogCQkgICBtX2xlX2FiTm10Q29tbWFuZERhdGFbMF0sIDB4MDAsCiAJCSAgIHNpemVvZihObXRSZXF1ZXN0RnJhbWUubV9EYXRhLm1fQXNuZC5tX1BheWxvYWQuCkBAIC0yOTcsOSArMjk2LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMKLUVwbE5tdENudVJlZ2lzdGVyQ2hlY2tFdmVudENiKHRFcGxObXR1Q2hlY2tFdmVudENhbGxiYWNrCi0JCQkgICAgICBwZm5FcGxObXRDaGVja0V2ZW50Q2JfcCkKK3RFcGxLZXJuZWwgRXBsTm10Q251UmVnaXN0ZXJDaGVja0V2ZW50Q2IodEVwbE5tdHVDaGVja0V2ZW50Q2FsbGJhY2sgcGZuRXBsTm10Q2hlY2tFdmVudENiX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTMzNSw3ICszMzIsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRDbnVDb21tYW5kQ2IodEVwbEZyYW1lSW5mbyAqIHBGcmFtZUluZm9fcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE5tdENudUNvbW1hbmRDYih0RXBsRnJhbWVJbmZvICpwRnJhbWVJbmZvX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsTm10Q29tbWFuZCBObXRDb21tYW5kOwpAQCAtNjc2LDE4ICs2NzMsMTggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zdGF0aWMgQk9PTCBFcGxObXRDbnVOb2RlSWRMaXN0KEJZVEUgKiBwYk5tdENvbW1hbmREYXRlX3ApCitzdGF0aWMgQk9PTCBFcGxObXRDbnVOb2RlSWRMaXN0KHU4ICogcGJObXRDb21tYW5kRGF0ZV9wKQogewogCUJPT0wgZk5vZGVJZEluTGlzdDsKIAl1bnNpZ25lZCBpbnQgdWlCeXRlT2Zmc2V0OwotCUJZVEUgYkJpdE9mZnNldDsKLQlCWVRFIGJOb2RlTGlzdEJ5dGU7CisJdTggYkJpdE9mZnNldDsKKwl1OCBiTm9kZUxpc3RCeXRlOwogCiAJLy8gZ2V0IGJ5dGUtb2Zmc2V0IG9mIHRoZSBvd24gbm9kZWlkIGluIE5vZGVJZExpc3QKIAkvLyBkZXZpZGUgdGhvdWdoIDgKIAl1aUJ5dGVPZmZzZXQgPSAodW5zaWduZWQgaW50KShFcGxObXRDbnVJbnN0YW5jZV9nLm1fdWlOb2RlSWQgPj4gMyk7CiAJLy8gZ2V0IGJpdG9mZnNldAotCWJCaXRPZmZzZXQgPSAoQllURSkgRXBsTm10Q251SW5zdGFuY2VfZy5tX3VpTm9kZUlkICUgODsKKwliQml0T2Zmc2V0ID0gKHU4KSBFcGxObXRDbnVJbnN0YW5jZV9nLm1fdWlOb2RlSWQgJSA4OwogCiAJYk5vZGVMaXN0Qnl0ZSA9IEFtaUdldEJ5dGVGcm9tTGUoJnBiTm10Q29tbWFuZERhdGVfcFt1aUJ5dGVPZmZzZXRdKTsKIAlpZiAoKGJOb2RlTGlzdEJ5dGUgJiBiQml0T2Zmc2V0KSA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdE1udS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXRNbnUuYwppbmRleCA0ZWQwYjZjLi5kMTk0MzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdE1udS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10TW51LmMKQEAgLTk0LDggKzk0LDggQEAKIAogLy8gVHJhY2VQb2ludCBzdXBwb3J0IGZvciByZWFsdGltZS1kZWJ1Z2dpbmcKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnUG9zdFRyYWNlVmFsdWUodTMyIGR3VHJhY2VWYWx1ZV9wKTsKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkgICBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHApCiAjZGVmaW5lIFRHVF9EQkdfUE9TVF9UUkFDRV9WQUxVRSh2KSAgICAgVGd0RGJnUG9zdFRyYWNlVmFsdWUodikKICNlbHNlCkBAIC0yMTEsOCArMjExLDggQEAKIAl0RXBsVGltZXJIZGwgbV9UaW1lckhkbFN0YXRSZXE7CS8vIHRpbWVyIHRvIGRlbGF5IFN0YXR1c1JlcXVlc3RzIGFuZCBJZGVudFJlcXVlc3RzCiAJdEVwbFRpbWVySGRsIG1fVGltZXJIZGxMb25nZXI7CS8vIDJuZCB0aW1lciBmb3IgTk1UIGNvbW1hbmQgRW5hYmxlUmVhZHlUb09wIGFuZCBDaGVja0NvbW11bmljYXRpb24KIAl0RXBsTm10TW51Tm9kZVN0YXRlIG1fTm9kZVN0YXRlOwkvLyBpbnRlcm5hbCBub2RlIHN0YXRlIChraW5kIG9mIHN1YiBzdGF0ZSBvZiBOTVQgc3RhdGUpCi0JRFdPUkQgbV9kd05vZGVDZmc7CS8vIHN1YmluZGV4IGZyb20gMHgxRjgxCi0JV09SRCBtX3dGbGFnczsJCS8vIGZsYWdzOiBDTiBpcyBiZWluZyBhY2Nlc3NlZCBpc29jaHJvbm91c2x5CisJdTMyIG1fZHdOb2RlQ2ZnOwkvLyBzdWJpbmRleCBmcm9tIDB4MUY4MQorCXUxNiBtX3dGbGFnczsJCS8vIGZsYWdzOiBDTiBpcyBiZWluZyBhY2Nlc3NlZCBpc29jaHJvbm91c2x5CiAKIH0gdEVwbE5tdE1udU5vZGVJbmZvOwogCkBAIC0yMjQsOCArMjI0LDggQEAKIAl1bnNpZ25lZCBsb25nIG1fdWxTdGF0dXNSZXF1ZXN0RGVsYXk7CS8vIGluIFttc10gKG9iamVjdCAweDEwMDYgKiBFUExfQ19OTVRfU1RBVFJFUV9DWUNMRSkKIAl1bnNpZ25lZCBsb25nIG1fdWxUaW1lb3V0UmVhZHlUb09wOwkvLyBpbiBbbXNdIChvYmplY3QgMHgxRjg5LzUpCiAJdW5zaWduZWQgbG9uZyBtX3VsVGltZW91dENoZWNrQ29tOwkvLyBpbiBbbXNdIChvYmplY3QgMHgxMDA2ICogTXVsdGlwbGV4ZWRDeWNsZUNvdW50KQotCVdPUkQgbV93RmxhZ3M7CQkvLyBnbG9iYWwgZmxhZ3MKLQlEV09SRCBtX2R3Tm10U3RhcnR1cDsJLy8gb2JqZWN0IDB4MUY4MCBOTVRfU3RhcnRVcF9VMzIKKwl1MTYgbV93RmxhZ3M7CQkvLyBnbG9iYWwgZmxhZ3MKKwl1MzIgbV9kd05tdFN0YXJ0dXA7CS8vIG9iamVjdCAweDFGODAgTk1UX1N0YXJ0VXBfVTMyCiAJdEVwbE5tdE1udUNiTm9kZUV2ZW50IG1fcGZuQ2JOb2RlRXZlbnQ7CiAJdEVwbE5tdE1udUNiQm9vdEV2ZW50IG1fcGZuQ2JCb290RXZlbnQ7CiAKQEAgLTI0MSwyMCArMjQxLDE4IEBACiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10TW51Q2JObXRSZXF1ZXN0KHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51Q2JObXRSZXF1ZXN0KHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCk7CiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVDYklkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgIHRFcGxJZGVudFJlc3BvbnNlICoKLQkJCQkJCSAgcElkZW50UmVzcG9uc2VfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxObXRNbnVDYklkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJCSAgIHRFcGxJZGVudFJlc3BvbnNlICpwSWRlbnRSZXNwb25zZV9wKTsKIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiU3RhdHVzUmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgICB0RXBsU3RhdHVzUmVzcG9uc2UgKgotCQkJCQkJICAgcFN0YXR1c1Jlc3BvbnNlX3ApOworc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51Q2JTdGF0dXNSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgIHRFcGxTdGF0dXNSZXNwb25zZSAqcFN0YXR1c1Jlc3BvbnNlX3ApOwogCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxObXRNbnVDaGVja05tdFN0YXRlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAogCQkJCQkgdEVwbE5tdE1udU5vZGVJbmZvICogcE5vZGVJbmZvX3AsCiAJCQkJCSB0RXBsTm10U3RhdGUgTm9kZU5tdFN0YXRlX3AsCi0JCQkJCSBXT1JEIHdFcnJvckNvZGVfcCwKKwkJCQkJIHUxNiB3RXJyb3JDb2RlX3AsCiAJCQkJCSB0RXBsTm10U3RhdGUgTG9jYWxObXRTdGF0ZV9wKTsKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51U3RhcnRCb290U3RlcDEodm9pZCk7CkBAIC0yNzMsNyArMjcxLDcgQEAKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51UHJvY2Vzc0ludGVybmFsRXZlbnQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCiAJCQkJCQl0RXBsTm10U3RhdGUgTm9kZU5tdFN0YXRlX3AsCi0JCQkJCQlXT1JEIHdFcnJvckNvZGVfcCwKKwkJCQkJCXUxNiB3RXJyb3JDb2RlX3AsCiAJCQkJCQl0RXBsTm10TW51SW50Tm9kZUV2ZW50CiAJCQkJCQlOb2RlRXZlbnRfcCk7CiAKQEAgLTM4MCw3ICszNzgsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgRXBsTm10TW51RGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxObXRNbnVEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC00MTksNyArNDE3LDcgQEAKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXRFcGxGcmFtZUluZm8gRnJhbWVJbmZvOwotCUJZVEUgYWJCdWZmZXJbRVBMX0NfRExMX01JTlNJWkVfTk1UQ01ERVhUXTsKKwl1OCBhYkJ1ZmZlcltFUExfQ19ETExfTUlOU0laRV9OTVRDTURFWFRdOwogCXRFcGxGcmFtZSAqcEZyYW1lID0gKHRFcGxGcmFtZSAqKSBhYkJ1ZmZlcjsKIAlCT09MIGZTb2Z0RGVsZXRlTm9kZSA9IEZBTFNFOwogCkBAIC00MzksMTEgKzQzNywxMSBAQAogCiAJLy8gYnVpbGQgZnJhbWUKIAlFUExfTUVNU0VUKHBGcmFtZSwgMHgwMCwgc2l6ZW9mKGFiQnVmZmVyKSk7Ci0JQW1pU2V0Qnl0ZVRvTGUoJnBGcmFtZS0+bV9sZV9iRHN0Tm9kZUlkLCAoQllURSkgdWlOb2RlSWRfcCk7CisJQW1pU2V0Qnl0ZVRvTGUoJnBGcmFtZS0+bV9sZV9iRHN0Tm9kZUlkLCAodTgpIHVpTm9kZUlkX3ApOwogCUFtaVNldEJ5dGVUb0xlKCZwRnJhbWUtPm1fRGF0YS5tX0FzbmQubV9sZV9iU2VydmljZUlkLAotCQkgICAgICAgKEJZVEUpIGtFcGxEbGxBc25kTm10Q29tbWFuZCk7CisJCSAgICAgICAodTgpIGtFcGxEbGxBc25kTm10Q29tbWFuZCk7CiAJQW1pU2V0Qnl0ZVRvTGUoJnBGcmFtZS0+bV9EYXRhLm1fQXNuZC5tX1BheWxvYWQubV9ObXRDb21tYW5kU2VydmljZS4KLQkJICAgICAgIG1fbGVfYk5tdENvbW1hbmRJZCwgKEJZVEUpIE5tdENvbW1hbmRfcCk7CisJCSAgICAgICBtX2xlX2JObXRDb21tYW5kSWQsICh1OCkgTm10Q29tbWFuZF9wKTsKIAlpZiAoKHBObXRDb21tYW5kRGF0YV9wICE9IE5VTEwpICYmICh1aURhdGFTaXplX3AgPiAwKSkgewkvLyBjb3B5IGNvbW1hbmQgZGF0YSB0byBmcmFtZQogCQlFUExfTUVNQ1BZKCZwRnJhbWUtPm1fRGF0YS5tX0FzbmQubV9QYXlsb2FkLm1fTm10Q29tbWFuZFNlcnZpY2UuCiAJCQkgICBtX2xlX2FiTm10Q29tbWFuZERhdGFbMF0sIHBObXRDb21tYW5kRGF0YV9wLApAQCAtNTc0LDggKzU3Miw4IEBACiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsTm10TW51SW50Tm9kZUV2ZW50IE5vZGVFdmVudDsKIAl0RXBsT2JkU2l6ZSBPYmRTaXplOwotCUJZVEUgYk5tdFN0YXRlOwotCVdPUkQgd0Vycm9yQ29kZSA9IEVQTF9FX05PX0VSUk9SOworCXU4IGJObXRTdGF0ZTsKKwl1MTYgd0Vycm9yQ29kZSA9IEVQTF9FX05PX0VSUk9SOwogCiAJaWYgKCh1aU5vZGVJZF9wID09IDApIHx8ICh1aU5vZGVJZF9wID49IEVQTF9DX0FEUl9CUk9BRENBU1QpKSB7CiAJCVJldCA9IGtFcGxJbnZhbGlkTm9kZUlkOwpAQCAtNjQ1LDggKzY0Myw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10TW51Q2JObXRTdGF0ZUNoYW5nZSh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZQotCQkJCQkgICAgTm10U3RhdGVDaGFuZ2VfcCkKK3RFcGxLZXJuZWwgRXBsTm10TW51Q2JObXRTdGF0ZUNoYW5nZSh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZSBObXRTdGF0ZUNoYW5nZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTY3Niw3ICs2NzMsNyBAQAogCQkvLyBidWlsZCB0aGUgY29uZmlndXJhdGlvbiB3aXRoIGluZm9zIGZyb20gT0QKIAljYXNlIGtFcGxObXRHc1Jlc2V0Q29uZmlndXJhdGlvbjoKIAkJewotCQkJRFdPUkQgZHdUaW1lb3V0OworCQkJdTMyIGR3VGltZW91dDsKIAkJCXRFcGxPYmRTaXplIE9iZFNpemU7CiAKIAkJCS8vIHJlYWQgb2JqZWN0IDB4MUY4MCBOTVRfU3RhcnRVcF9VMzIKQEAgLTc4OCw3ICs3ODUsNyBAQAogCQkvLyBub2RlIHByb2Nlc3NlcyBvbmx5IGFzeW5jIGZyYW1lcwogCWNhc2Uga0VwbE5tdE1zUHJlT3BlcmF0aW9uYWwxOgogCQl7Ci0JCQlEV09SRCBkd1RpbWVvdXQ7CisJCQl1MzIgZHdUaW1lb3V0OwogCQkJdEVwbFRpbWVyQXJnIFRpbWVyQXJnOwogCQkJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAkJCXRFcGxFdmVudCBFdmVudDsKQEAgLTkyOCw3ICs5MjUsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiQ2hlY2tFdmVudCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCkKK3RFcGxLZXJuZWwgRXBsTm10TW51Q2JDaGVja0V2ZW50KHRFcGxObXRFdmVudCBObXRFdmVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTk0OSw3ICs5NDYsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbE5tdE1udVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKnBFdmVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC05NzAsNyArOTY3LDcgQEAKIAkJCQkJICAgRVBMX05NVE1OVV9USU1FUkFSR19OT0RFX01BU0spOwogCQkJaWYgKHVpTm9kZUlkICE9IDApIHsKIAkJCQl0RXBsT2JkU2l6ZSBPYmRTaXplOwotCQkJCUJZVEUgYk5tdFN0YXRlOworCQkJCXU4IGJObXRTdGF0ZTsKIAkJCQl0RXBsTm10TW51Tm9kZUluZm8gKnBOb2RlSW5mbzsKIAogCQkJCXBOb2RlSW5mbyA9IEVQTF9OTVRNTlVfR0VUX05PREVJTkZPKHVpTm9kZUlkKTsKQEAgLTExNTAsNyArMTE0Nyw3IEBACiAJCQl0RXBsRnJhbWUgKnBGcmFtZSA9ICh0RXBsRnJhbWUgKikgcEV2ZW50X3AtPm1fcEFyZzsKIAkJCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKIAkJCXRFcGxObXRDb21tYW5kIE5tdENvbW1hbmQ7Ci0JCQlCWVRFIGJObXRTdGF0ZTsKKwkJCXU4IGJObXRTdGF0ZTsKIAogCQkJdWlOb2RlSWQgPSBBbWlHZXRCeXRlRnJvbUxlKCZwRnJhbWUtPm1fbGVfYkRzdE5vZGVJZCk7CiAJCQlObXRDb21tYW5kID0KQEAgLTExNjIsMzAgKzExNTksMzAgQEAKIAkJCXN3aXRjaCAoTm10Q29tbWFuZCkgewogCQkJY2FzZSBrRXBsTm10Q21kU3RhcnROb2RlOgogCQkJCWJObXRTdGF0ZSA9Ci0JCQkJICAgIChCWVRFKSAoa0VwbE5tdENzT3BlcmF0aW9uYWwgJiAweEZGKTsKKwkJCQkgICAgKHU4KSAoa0VwbE5tdENzT3BlcmF0aW9uYWwgJiAweEZGKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBrRXBsTm10Q21kU3RvcE5vZGU6Ci0JCQkJYk5tdFN0YXRlID0gKEJZVEUpIChrRXBsTm10Q3NTdG9wcGVkICYgMHhGRik7CisJCQkJYk5tdFN0YXRlID0gKHU4KSAoa0VwbE5tdENzU3RvcHBlZCAmIDB4RkYpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIGtFcGxObXRDbWRFbnRlclByZU9wZXJhdGlvbmFsMjoKIAkJCQliTm10U3RhdGUgPQotCQkJCSAgICAoQllURSkgKGtFcGxObXRDc1ByZU9wZXJhdGlvbmFsMiAmIDB4RkYpOworCQkJCSAgICAodTgpIChrRXBsTm10Q3NQcmVPcGVyYXRpb25hbDIgJiAweEZGKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBrRXBsTm10Q21kRW5hYmxlUmVhZHlUb09wZXJhdGU6CiAJCQkJLy8gZC5rLiBkbyBub3QgY2hhbmdlIGV4cGVjdGVkIG5vZGUgc3RhdGUsIGJlY2F1c2Ugb2YgRFMgMS4wLjAgNy4zLjEuMi4xIFBsYWluIE5NVCBTdGF0ZSBDb21tYW5kCiAJCQkJLy8gICAgICBhbmQgYmVjYXVzZSBub2RlIG1heSBub3QgY2hhbmdlIE5NVCBzdGF0ZSB3aXRoaW4gRVBMX0NfTk1UX1NUQVRFX1RPTEVSQU5DRQogCQkJCWJObXRTdGF0ZSA9Ci0JCQkJICAgIChCWVRFKSAoa0VwbE5tdENzUHJlT3BlcmF0aW9uYWwyICYgMHhGRik7CisJCQkJICAgICh1OCkgKGtFcGxObXRDc1ByZU9wZXJhdGlvbmFsMiAmIDB4RkYpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIGtFcGxObXRDbWRSZXNldE5vZGU6CiAJCQljYXNlIGtFcGxObXRDbWRSZXNldENvbW11bmljYXRpb246CiAJCQljYXNlIGtFcGxObXRDbWRSZXNldENvbmZpZ3VyYXRpb246CiAJCQljYXNlIGtFcGxObXRDbWRTd1Jlc2V0OgotCQkJCWJObXRTdGF0ZSA9IChCWVRFKSAoa0VwbE5tdENzTm90QWN0aXZlICYgMHhGRik7CisJCQkJYk5tdFN0YXRlID0gKHU4KSAoa0VwbE5tdENzTm90QWN0aXZlICYgMHhGRik7CiAJCQkJLy8gRXBsTm10TW51UHJvY2Vzc0ludGVybmFsRXZlbnQoKSBzZXRzIGludGVybmFsIG5vZGUgc3RhdGUgdG8ga0VwbE5tdE1udU5vZGVTdGF0ZVVua25vd24KIAkJCQkvLyBhZnRlciBuZXh0IHVucmVzcG9uZGVkIElkZW50UmVxdWVzdC9TdGF0dXNSZXF1ZXN0CiAJCQkJYnJlYWs7CkBAIC0xMjU4LDExICsxMjU1LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVHZXREaWFnbm9zdGljSW5mbyh1bnNpZ25lZCBpbnQKLQkJCQkJICAgICAqcHVpTWFuZGF0b3J5U2xhdmVDb3VudF9wLAotCQkJCQkgICAgIHVuc2lnbmVkIGludAotCQkJCQkgICAgICpwdWlTaWduYWxTbGF2ZUNvdW50X3AsCi0JCQkJCSAgICAgV09SRCAqIHB3RmxhZ3NfcCkKK3RFcGxLZXJuZWwgRXBsTm10TW51R2V0RGlhZ25vc3RpY0luZm8odW5zaWduZWQgaW50ICpwdWlNYW5kYXRvcnlTbGF2ZUNvdW50X3AsCisJCQkJICAgICAgdW5zaWduZWQgaW50ICpwdWlTaWduYWxTbGF2ZUNvdW50X3AsCisJCQkJICAgICAgdTE2ICpwd0ZsYWdzX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMTI5Niw3ICsxMjkxLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLyoKLURXT1JEIEVwbE5tdE1udUdldFJ1bm5pbmdUaW1lclN0YXRSZXEodm9pZCkKK3UzMiBFcGxObXRNbnVHZXRSdW5uaW5nVGltZXJTdGF0UmVxKHZvaWQpCiB7CiB0RXBsS2VybmVsICAgICAgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiB1bnNpZ25lZCBpbnQgICAgdWlJbmRleDsKQEAgLTEzNDcsNyArMTM0Miw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiTm10UmVxdWVzdCh0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51Q2JObXRSZXF1ZXN0KHRFcGxGcmFtZUluZm8gKnBGcmFtZUluZm9fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0xMzcxLDkgKzEzNjYsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVDYklkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgIHRFcGxJZGVudFJlc3BvbnNlICoKLQkJCQkJCSAgcElkZW50UmVzcG9uc2VfcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE5tdE1udUNiSWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgdEVwbElkZW50UmVzcG9uc2UgKnBJZGVudFJlc3BvbnNlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMTM4Miw4ICsxMzc2LDggQEAKIAkJCQkJCSAgICBrRXBsTm10TW51SW50Tm9kZUV2ZW50Tm9JZGVudFJlc3BvbnNlKTsKIAl9IGVsc2UgewkJLy8gbm9kZSBhbnN3ZXJlZCBJZGVudFJlcXVlc3QKIAkJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQkJRFdPUkQgZHdEZXZUeXBlOwotCQlXT1JEIHdFcnJvckNvZGUgPSBFUExfRV9OT19FUlJPUjsKKwkJdTMyIGR3RGV2VHlwZTsKKwkJdTE2IHdFcnJvckNvZGUgPSBFUExfRV9OT19FUlJPUjsKIAkJdEVwbE5tdFN0YXRlIE5tdFN0YXRlID0KIAkJICAgICh0RXBsTm10U3RhdGUpIChBbWlHZXRCeXRlRnJvbUxlCiAJCQkJICAgICgmcElkZW50UmVzcG9uc2VfcC0+CkBAIC0xNDMxLDkgKzE0MjUsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRNbnVDYlN0YXR1c1Jlc3BvbnNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICAgdEVwbFN0YXR1c1Jlc3BvbnNlICoKLQkJCQkJCSAgIHBTdGF0dXNSZXNwb25zZV9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51Q2JTdGF0dXNSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgIHRFcGxTdGF0dXNSZXNwb25zZSAqcFN0YXR1c1Jlc3BvbnNlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtMTQ3Myw3ICsxNDY2LDcgQEAKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXVuc2lnbmVkIGludCB1aVN1YkluZGV4OwogCXVuc2lnbmVkIGludCB1aUxvY2FsTm9kZUlkOwotCURXT1JEIGR3Tm9kZUNmZzsKKwl1MzIgZHdOb2RlQ2ZnOwogCXRFcGxPYmRTaXplIE9iZFNpemU7CiAKIAkvLyAkJCQgZC5rLjogc2F2ZSBjdXJyZW50IHRpbWUgZm9yIDB4MUY4OS8yIE1OVGltZW91dFByZU9wMV9VMzIKQEAgLTE2MzMsNyArMTYyNiw3IEBACiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsRGxsTm9kZUluZm8gRGxsTm9kZUluZm87Ci0JRFdPUkQgZHdOb2RlQ2ZnOworCXUzMiBkd05vZGVDZmc7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAl0RXBsVGltZXJBcmcgVGltZXJBcmc7CiAKQEAgLTE3ODIsNyArMTc3NSw3IEBACiAJCQkJCXRFcGxObXRNbnVOb2RlSW5mbyAqIHBOb2RlSW5mb19wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JRFdPUkQgZHdOb2RlQ2ZnOworCXUzMiBkd05vZGVDZmc7CiAJdEVwbFRpbWVyQXJnIFRpbWVyQXJnOwogCiAJZHdOb2RlQ2ZnID0gcE5vZGVJbmZvX3AtPm1fZHdOb2RlQ2ZnOwpAQCAtMTkxNiw3ICsxOTA5LDcgQEAKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsTm10TW51UHJvY2Vzc0ludGVybmFsRXZlbnQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCiAJCQkJCQl0RXBsTm10U3RhdGUgTm9kZU5tdFN0YXRlX3AsCi0JCQkJCQlXT1JEIHdFcnJvckNvZGVfcCwKKwkJCQkJCXUxNiB3RXJyb3JDb2RlX3AsCiAJCQkJCQl0RXBsTm10TW51SW50Tm9kZUV2ZW50CiAJCQkJCQlOb2RlRXZlbnRfcCkKIHsKQEAgLTE5MzQsNyArMTkyNyw3IEBACiAJc3dpdGNoIChOb2RlRXZlbnRfcCkgewogCWNhc2Uga0VwbE5tdE1udUludE5vZGVFdmVudElkZW50UmVzcG9uc2U6CiAJCXsKLQkJCUJZVEUgYk5tdFN0YXRlOworCQkJdTggYk5tdFN0YXRlOwogCiAJCQlFUExfTk1UTU5VX0RCR19QT1NUX1RSQUNFX1ZBTFVFKE5vZGVFdmVudF9wLAogCQkJCQkJCXVpTm9kZUlkX3AsCkBAIC0xOTYxLDcgKzE5NTQsNyBAQAogCQkJCSAgICB+RVBMX05NVE1OVV9OT0RFX0ZMQUdfTk9UX1NDQU5ORUQ7CiAJCQl9CiAJCQkvLyB1cGRhdGUgb2JqZWN0IDB4MUY4RiBOTVRfTU5Ob2RlRXhwU3RhdGVfQVU4IHRvIFByZU9wMSAoZXZlbiBpZiBsb2NhbCBzdGF0ZSA+PSBQcmVPcDIpCi0JCQliTm10U3RhdGUgPSAoQllURSkgKGtFcGxObXRDc1ByZU9wZXJhdGlvbmFsMSAmIDB4RkYpOworCQkJYk5tdFN0YXRlID0gKHU4KSAoa0VwbE5tdENzUHJlT3BlcmF0aW9uYWwxICYgMHhGRik7CiAJCQlSZXQgPQogCQkJICAgIEVwbE9iZHVXcml0ZUVudHJ5KDB4MUY4RiwgdWlOb2RlSWRfcCwgJmJObXRTdGF0ZSwKIAkJCQkJICAgICAgMSk7CkBAIC0yNDQxLDExICsyNDM0LDExIEBACiAKIAljYXNlIGtFcGxObXRNbnVJbnROb2RlRXZlbnRObXRDbWRTZW50OgogCQl7Ci0JCQlCWVRFIGJObXRTdGF0ZTsKKwkJCXU4IGJObXRTdGF0ZTsKIAogCQkJLy8gdXBkYXRlIGV4cGVjdGVkIE5NVCBzdGF0ZSB3aXRoIHRoZSBvbmUgdGhhdCByZXN1bHRzCiAJCQkvLyBmcm9tIHRoZSBzZW50IE5NVCBjb21tYW5kCi0JCQliTm10U3RhdGUgPSAoQllURSkgKE5vZGVObXRTdGF0ZV9wICYgMHhGRik7CisJCQliTm10U3RhdGUgPSAodTgpIChOb2RlTm10U3RhdGVfcCAmIDB4RkYpOwogCiAJCQkvLyB3cml0ZSBvYmplY3QgMHgxRjhGIE5NVF9NTk5vZGVFeHBTdGF0ZV9BVTgKIAkJCVJldCA9CkBAIC0yNjMwLDEzICsyNjIzLDEzIEBACiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxObXRNbnVDaGVja05tdFN0YXRlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAogCQkJCQkgdEVwbE5tdE1udU5vZGVJbmZvICogcE5vZGVJbmZvX3AsCiAJCQkJCSB0RXBsTm10U3RhdGUgTm9kZU5tdFN0YXRlX3AsCi0JCQkJCSBXT1JEIHdFcnJvckNvZGVfcCwKKwkJCQkJIHUxNiB3RXJyb3JDb2RlX3AsCiAJCQkJCSB0RXBsTm10U3RhdGUgTG9jYWxObXRTdGF0ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQlCWVRFIGJObXRTdGF0ZTsKLQlCWVRFIGJObXRTdGF0ZVByZXY7CisJdTggYk5tdFN0YXRlOworCXU4IGJObXRTdGF0ZVByZXY7CiAJdEVwbE5tdFN0YXRlIEV4cE5tdFN0YXRlOwogCiAJT2JkU2l6ZSA9IDE7CkBAIC0yNjQ3LDggKzI2NDAsOCBAQAogCX0KIAkvLyBjb21wdXRlIGV4cGVjdGVkIE5NVCBzdGF0ZQogCUV4cE5tdFN0YXRlID0gKHRFcGxObXRTdGF0ZSkgKGJObXRTdGF0ZSB8IEVQTF9OTVRfVFlQRV9DUyk7Ci0JLy8gY29tcHV0ZSBCWVRFIG9mIGN1cnJlbnQgTk1UIHN0YXRlCi0JYk5tdFN0YXRlID0gKChCWVRFKSBOb2RlTm10U3RhdGVfcCAmIDB4RkYpOworCS8vIGNvbXB1dGUgdTggb2YgY3VycmVudCBOTVQgc3RhdGUKKwliTm10U3RhdGUgPSAoKHU4KSBOb2RlTm10U3RhdGVfcCAmIDB4RkYpOwogCiAJaWYgKEV4cE5tdFN0YXRlID09IGtFcGxObXRDc05vdEFjdGl2ZSkgewkvLyBpZ25vcmUgdGhlIGN1cnJlbnQgc3RhdGUsIGJlY2F1c2UgdGhlIENOIHNoYWxsIGJlIG5vdCBhY3RpdmUKIAkJUmV0ID0ga0VwbFJlamVjdDsKQEAgLTI3MDYsNyArMjY5OSw3IEBACiAJfSBlbHNlIGlmICgoRXhwTm10U3RhdGUgIT0gTm9kZU5tdFN0YXRlX3ApCiAJCSAgICYmICEoKEV4cE5tdFN0YXRlID09IGtFcGxObXRDc1ByZU9wZXJhdGlvbmFsMSkKIAkJCSYmIChOb2RlTm10U3RhdGVfcCA9PSBrRXBsTm10Q3NQcmVPcGVyYXRpb25hbDIpKSkgewkvLyBDTiBpcyBub3QgaW4gZXhwZWN0ZWQgTk1UIHN0YXRlICh3aXRob3V0IHRoZSBleGNlcHRpb25zIGFib3ZlKQotCQlXT1JEIHdiZUVycm9yQ29kZTsKKwkJdTE2IHdiZUVycm9yQ29kZTsKIAogCQlpZiAoKHBOb2RlSW5mb19wLT4KIAkJICAgICBtX3dGbGFncyAmIEVQTF9OTVRNTlVfTk9ERV9GTEFHX05PVF9TQ0FOTkVEKSAhPSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdGsuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10ay5jCmluZGV4IDRlMmQwZTEuLjYwOWQ1YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10ay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10ay5jCkBAIC04OCw4ICs4OCw4IEBACiAKIC8vIFRyYWNlUG9pbnQgc3VwcG9ydCBmb3IgcmVhbHRpbWUtZGVidWdnaW5nCiAjaWZkZWYgX0RCR19UUkFDRV9QT0lOVFNfCi12b2lkIFBVQkxJQyBUZ3REYmdTaWduYWxUcmFjZVBvaW50KEJZVEUgYlRyYWNlUG9pbnROdW1iZXJfcCk7Ci12b2lkIFBVQkxJQyBUZ3REYmdQb3N0VHJhY2VWYWx1ZShEV09SRCBkd1RyYWNlVmFsdWVfcCk7Cit2b2lkIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQodTggYlRyYWNlUG9pbnROdW1iZXJfcCk7Cit2b2lkIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHUzMiBkd1RyYWNlVmFsdWVfcCk7CiAjZGVmaW5lIFRHVF9EQkdfU0lHTkFMX1RSQUNFX1BPSU5UKHApICAgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChwKQogI2RlZmluZSBUR1RfREJHX1BPU1RfVFJBQ0VfVkFMVUUodikgICAgIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHYpCiAjZWxzZQpAQCAtMTA3LDEyICsxMDcsMTIgQEAKIC8vIHN0cnVjdCBmb3IgaW5zdGFuY2UgdGFibGUKIElOU1RBTkNFX1RZUEVfQkVHSU4gRVBMX01DT19ERUNMX0lOU1RBTkNFX01FTUJFUigpCiAKLVNUQVRJQyB2b2xhdGlsZSB0RXBsTm10U3RhdGUgSU5TVF9GQVIgbV9ObXRTdGF0ZTsKLVNUQVRJQyB2b2xhdGlsZSBCT09MIElOU1RfRkFSIG1fZkVuYWJsZVJlYWR5VG9PcGVyYXRlOwotU1RBVElDIHZvbGF0aWxlIEJPT0wgSU5TVF9GQVIgbV9mQXBwUmVhZHlUb09wZXJhdGU7Ci1TVEFUSUMgdm9sYXRpbGUgQk9PTCBJTlNUX0ZBUiBtX2ZUaW1lck1zUHJlT3AyOwotU1RBVElDIHZvbGF0aWxlIEJPT0wgSU5TVF9GQVIgbV9mQWxsTWFuZGF0b3J5Q05JZGVudDsKLVNUQVRJQyB2b2xhdGlsZSBCT09MIElOU1RfRkFSIG1fZkZyb3plbjsKK1NUQVRJQyB2b2xhdGlsZSB0RXBsTm10U3RhdGUgbV9ObXRTdGF0ZTsKK1NUQVRJQyB2b2xhdGlsZSBCT09MIG1fZkVuYWJsZVJlYWR5VG9PcGVyYXRlOworU1RBVElDIHZvbGF0aWxlIEJPT0wgbV9mQXBwUmVhZHlUb09wZXJhdGU7CitTVEFUSUMgdm9sYXRpbGUgQk9PTCBtX2ZUaW1lck1zUHJlT3AyOworU1RBVElDIHZvbGF0aWxlIEJPT0wgbV9mQWxsTWFuZGF0b3J5Q05JZGVudDsKK1NUQVRJQyB2b2xhdGlsZSBCT09MIG1fZkZyb3plbjsKIAogSU5TVEFOQ0VfVFlQRV9FTkQKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjEsNyArMTIxLDcgQEAKIC8vIFRoaXMgbWFjcm8gcmVwbGFjZSB0aGUgdW5zcGVjaWZpYyBwb2ludGVyIHRvIGFuIGluc3RhbmNlIHRocm91Z2gKIC8vIHRoZSBtb2R1bCBzcGVjaWZpYyB0eXBlIGZvciB0aGUgbG9jYWwgaW5zdGFuY2UgdGFibGUuIFRoaXMgbWFjcm8KIC8vIG11c3QgZGVmaW5lZCBpbiBlYWNoIG1vZHVsLgotLy8jZGVmaW5lIHRFcGxQdHJJbnN0YW5jZSAgICAgICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSoKKy8vI2RlZmluZSB0RXBsUHRySW5zdGFuY2UgICAgICAgICAgICAgdEVwbEluc3RhbmNlSW5mbyoKIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9WQVIoKQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKQEAgLTE2Myw3ICsxNjMsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRrSW5pdChFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUikKK3RFcGxLZXJuZWwgRXBsTm10a0luaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE4OSw3ICsxODksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRrQWRkSW5zdGFuY2UoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpCit0RXBsS2VybmVsIEVwbE5tdGtBZGRJbnN0YW5jZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUikKIHsKIAlFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMIHRFcGxLZXJuZWwgUmV0OwogLy90RXBsRXZlbnQgICAgICAgICAgICAgICBFdmVudDsKQEAgLTI1OCw3ICsyNTgsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgKEVQTF9VU0VfREVMRVRFSU5TVF9GVU5DICE9IEZBTFNFKQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdGtEZWxJbnN0YW5jZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUikKK3RFcGxLZXJuZWwgRXBsTm10a0RlbEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJLy8gY2hlY2sgZm9yIGFsbCBBUEkgZnVuY3Rpb24gaWYgaW5zdGFuY2UgaXMgdmFsaWQKQEAgLTI5Niw4ICsyOTYsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRrUHJvY2VzcyhFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8KLQkJCQkJICAgICAgdEVwbEV2ZW50ICogcEV2ZW50X3ApCit0RXBsS2VybmVsIEVwbE5tdGtQcm9jZXNzKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB0RXBsRXZlbnQgKnBFdmVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxObXRTdGF0ZSBPbGRObXRTdGF0ZTsKQEAgLTE4MDQsOCArMTgwMyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxObXRTdGF0ZSBQVUJMSUMKLUVwbE5tdGtHZXRObXRTdGF0ZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUikKK3RFcGxObXRTdGF0ZSBFcGxObXRrR2V0Tm10U3RhdGUoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpCiB7CiAJdEVwbE5tdFN0YXRlIE5tdFN0YXRlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdGtDYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10a0NhbC5jCmluZGV4IDRhZDcxYTcuLjQ0NTNjMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10a0NhbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10a0NhbC5jCkBAIC02OSw4ICs2OSw2IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICJrZXJuZWwvRXBsTm10a0NhbC5oIgotCiAvLyBUT0RPOiBpbml0IGZ1bmN0aW9uIG5lZWRlZCB0byBwcmVwYXJlIEVwbE5tdGtHZXRObXRTdGF0ZSBmb3IKIC8vICAgICAgIGlvLWNvbnRyb2xsLWNhbGwgZnJvbSBFcGxObXR1Q2FsLU1vZHVsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10dS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXR1LmMKaW5kZXggM2RlMTZhMS4uOWFjMmU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxObXR1LmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1SW5pdCgpCit0RXBsS2VybmVsIEVwbE5tdHVJbml0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE1OCw3ICsxNTgsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1QWRkSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxObXR1QWRkSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTg3LDcgKzE4Nyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdHVEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbE5tdHVEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yMTksNyArMjE5LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10dU5tdEV2ZW50KHRFcGxObXRFdmVudCBObXRFdmVudF9wKQordEVwbEtlcm5lbCBFcGxObXR1Tm10RXZlbnQodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEV2ZW50IEV2ZW50OwpAQCAtMjUzLDcgKzI1Myw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxObXRTdGF0ZSBQVUJMSUMgRXBsTm10dUdldE5tdFN0YXRlKCkKK3RFcGxObXRTdGF0ZSBFcGxObXR1R2V0Tm10U3RhdGUodm9pZCkKIHsKIAl0RXBsTm10U3RhdGUgTm10U3RhdGU7CiAKQEAgLTI4NCw3ICsyODQsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1UHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqIHBFcGxFdmVudF9wKQordEVwbEtlcm5lbCBFcGxObXR1UHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEVwbEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTM4Miw3ICszODIsNyBAQAogCQkJCQkvLyBub2RlIGxpc3RlbnMgZm9yIEVQTC1GcmFtZXMgYW5kIGNoZWNrIHRpbWVvdXQKIAkJCQljYXNlIGtFcGxObXRDc05vdEFjdGl2ZToKIAkJCQkJewotCQkJCQkJRFdPUkQgZHdCdWZmZXI7CisJCQkJCQl1MzIgZHdCdWZmZXI7CiAJCQkJCQl0RXBsT2JkU2l6ZSBPYmRTaXplOwogCQkJCQkJdEVwbFRpbWVyQXJnIFRpbWVyQXJnOwogCkBAIC00NzUsNyArNDc1LDcgQEAKIAkJCQkJLy8gbm9kZSBsaXN0ZW5zIGZvciBFUEwtRnJhbWVzIGFuZCBjaGVjayB0aW1lb3V0CiAJCQkJY2FzZSBrRXBsTm10TXNOb3RBY3RpdmU6CiAJCQkJCXsKLQkJCQkJCURXT1JEIGR3QnVmZmVyOworCQkJCQkJdTMyIGR3QnVmZmVyOwogCQkJCQkJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAkJCQkJCXRFcGxUaW1lckFyZyBUaW1lckFyZzsKIApAQCAtNTQ0LDcgKzU0NCw3IEBACiAJCQkJCS8vIG5vZGUgcHJvY2Vzc2VzIG9ubHkgYXN5bmMgZnJhbWVzCiAJCQkJY2FzZSBrRXBsTm10TXNQcmVPcGVyYXRpb25hbDE6CiAJCQkJCXsKLQkJCQkJCURXT1JEIGR3QnVmZmVyID0gMDsKKwkJCQkJCXUzMiBkd0J1ZmZlciA9IDA7CiAJCQkJCQl0RXBsT2JkU2l6ZSBPYmRTaXplOwogCQkJCQkJdEVwbFRpbWVyQXJnIFRpbWVyQXJnOwogCkBAIC02NjQsOSArNjY0LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMKLUVwbE5tdHVSZWdpc3RlclN0YXRlQ2hhbmdlQ2IodEVwbE5tdHVTdGF0ZUNoYW5nZUNhbGxiYWNrCi0JCQkgICAgIHBmbkVwbE5tdFN0YXRlQ2hhbmdlQ2JfcCkKK3RFcGxLZXJuZWwgRXBsTm10dVJlZ2lzdGVyU3RhdGVDaGFuZ2VDYih0RXBsTm10dVN0YXRlQ2hhbmdlQ2FsbGJhY2sgcGZuRXBsTm10U3RhdGVDaGFuZ2VDYl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdHVDYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsTm10dUNhbC5jCmluZGV4IDRhMjllZjUuLjkyMTY0YzU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdHVDYWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE5tdHVDYWwuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxObXRTdGF0ZSBQVUJMSUMgRXBsTm10a0NhbEdldE5tdFN0YXRlKCkKK3RFcGxObXRTdGF0ZSBFcGxObXRrQ2FsR2V0Tm10U3RhdGUodm9pZCkKIHsKIAl0RXBsTm10U3RhdGUgTm10U3RhdGU7CiAJLy8gZm9yIHRlc3QgZGlyZWt0IGNhbGwgZm9yIEVwbE5tdGtHZXRObXRTdGF0ZSgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmQuYwppbmRleCBlZmJiMTk2Li4xZTQ2MzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkLmMKQEAgLTEwMSw4ICsxMDEsOCBAQAogLy8gc3RydWN0IGZvciBpbnN0YW5jZSB0YWJsZQogSU5TVEFOQ0VfVFlQRV9CRUdJTiBFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfTUVNQkVSKCkKIAotU1RBVElDIHRFcGxPYmRJbml0UGFyYW0gSU5TVF9GQVIgbV9PYmRJbml0UGFyYW07Ci1TVEFUSUMgdEVwbE9iZFN0b3JlTG9hZE9iakNhbGxiYWNrIElOU1RfTkVBUiBtX2ZwU3RvcmVMb2FkT2JqQ2FsbGJhY2s7CitTVEFUSUMgdEVwbE9iZEluaXRQYXJhbSBtX09iZEluaXRQYXJhbTsKK1NUQVRJQyB0RXBsT2JkU3RvcmVMb2FkT2JqQ2FsbGJhY2sgbV9mcFN0b3JlTG9hZE9iakNhbGxiYWNrOwogCiBJTlNUQU5DRV9UWVBFX0VORAogLy8gZGVjb21wb3NpdGlvbiBvZiBmbG9hdApAQCAtMTE5LDExICsxMTksMTEgQEAKIC8vIFRoaXMgbWFjcm8gcmVwbGFjZSB0aGUgdW5zcGVjaWZpYyBwb2ludGVyIHRvIGFuIGluc3RhbmNlIHRocm91Z2gKIC8vIHRoZSBtb2R1bCBzcGVjaWZpYyB0eXBlIGZvciB0aGUgbG9jYWwgaW5zdGFuY2UgdGFibGUuIFRoaXMgbWFjcm8KIC8vIG11c3QgZGVmaW5lZCBpbiBlYWNoIG1vZHVsLgotLy8jZGVmaW5lIHRFcGxQdHJJbnN0YW5jZSAgICAgICAgICAgICB0RXBsSW5zdGFuY2VJbmZvIE1FTSoKKy8vI2RlZmluZSB0RXBsUHRySW5zdGFuY2UgICAgICAgICAgICAgdEVwbEluc3RhbmNlSW5mbyAqCiAKIEVQTF9NQ09fREVDTF9JTlNUQU5DRV9WQVIoKQogCi1CWVRFIE1FTSBhYkVwbE9iZFRyYXNoT2JqZWN0X2dbOF07Cit1OCBhYkVwbE9iZFRyYXNoT2JqZWN0X2dbOF07CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkQ2FsbE9iamVjdENhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCiAJCQkJCSAgIHRFcGxPYmRDYWxsYmFjayBmcENhbGxiYWNrX3AsCi0JCQkJCSAgIHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBDYlBhcmFtX3ApOworCQkJCQkgICB0RXBsT2JkQ2JQYXJhbSAqcENiUGFyYW1fcCk7CiAKIHN0YXRpYyB0RXBsT2JkU2l6ZSBFcGxPYmRHZXREYXRhU2l6ZUludGVybih0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkluZGV4RW50cnlfcCk7CiAKQEAgLTE0Niw3ICsxNDYsNyBAQAogI2VuZGlmCiAKIHN0YXRpYyB0RXBsS2VybmVsIEVwbE9iZEdldFZhckVudHJ5KHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViaW5kZXhFbnRyeV9wLAotCQkJCSAgICB0RXBsT2JkVmFyRW50cnkgTUVNICoqIHBwVmFyRW50cnlfcCk7CisJCQkJICAgIHRFcGxPYmRWYXJFbnRyeSAqKnBwVmFyRW50cnlfcCk7CiAKIHN0YXRpYyB0RXBsS2VybmVsIEVwbE9iZEdldEVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCiAJCQkJIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCkBAIC0xNTYsNyArMTU2LDcgQEAKIAogc3RhdGljIHRFcGxPYmRTaXplIEVwbE9iZEdldE9iamVjdFNpemUodEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJJbmRleEVudHJ5X3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBFcGxPYmRHZXRJbmRleEludGVybih0RXBsT2JkSW5pdFBhcmFtIE1FTSAqIHBJbml0UGFyYW1fcCwKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE9iZEdldEluZGV4SW50ZXJuKHRFcGxPYmRJbml0UGFyYW0gKnBJbml0UGFyYW1fcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKIAkJCQkgICAgICAgdEVwbE9iZEVudHJ5UHRyICogcHBPYmRFbnRyeV9wKTsKIApAQCAtMTcwLDE3ICsxNzAsMTUgQEAKIAkJCQkJICAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCk7CiAKIHN0YXRpYyB2b2lkICpFcGxPYmRHZXRPYmplY3REZWZhdWx0UHRyKHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViSW5kZXhFbnRyeV9wKTsKLXN0YXRpYyB2b2lkIE1FTSAqRXBsT2JkR2V0T2JqZWN0Q3VycmVudFB0cih0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkluZGV4RW50cnlfcCk7CitzdGF0aWMgdm9pZCAqRXBsT2JkR2V0T2JqZWN0Q3VycmVudFB0cih0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkluZGV4RW50cnlfcCk7CiAKICNpZiAoRVBMX09CRF9VU0VfU1RPUkVfUkVTVE9SRSAhPSBGQUxTRSkKIAotc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkQ2FsbFN0b3JlQ2FsbGJhY2soRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJICB0RXBsT2JkQ2JTdG9yZVBhcmFtIE1FTSAqCi0JCQkJCSAgcENiU3RvcmVQYXJhbV9wKTsKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE9iZENhbGxTdG9yZUNhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHRFcGxPYmRDYlN0b3JlUGFyYW0gKnBDYlN0b3JlUGFyYW1fcCk7CiAKICNlbmRpZiAvLyAoRVBMX09CRF9VU0VfU1RPUkVfUkVTVE9SRSAhPSBGQUxTRSkKIAotc3RhdGljIHZvaWQgRXBsT2JkQ29weU9iamVjdERhdGEodm9pZCBNRU0gKiBwRHN0RGF0YV9wLAorc3RhdGljIHZvaWQgRXBsT2JkQ29weU9iamVjdERhdGEodm9pZCAqcERzdERhdGFfcCwKIAkJCQkgdm9pZCAqcFNyY0RhdGFfcCwKIAkJCQkgdEVwbE9iZFNpemUgT2JqU2l6ZV9wLCB0RXBsT2JkVHlwZSBPYmpUeXBlX3ApOwogCkBAIC0xODksMjQgKzE4NywyMiBAQAogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkSXNOdW1lcmljYWxJbnRlcm4odEVwbE9iZFN1YkVudHJ5UHRyIHBPYmRTdWJFbnRyeV9wLAogCQkJCQkgIEJPT0wgKiBwZkVudHJ5TnVtZXJpY2FsX3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkV3JpdGVFbnRyeVByZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJICAgICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkgICAgIHZvaWQgKipwcERzdERhdGFfcCwKLQkJCQkJICAgICB0RXBsT2JkU2l6ZSBTaXplX3AsCi0JCQkJCSAgICAgdEVwbE9iZEVudHJ5UHRyICogcHBPYmRFbnRyeV9wLAotCQkJCQkgICAgIHRFcGxPYmRTdWJFbnRyeVB0ciAqIHBwU3ViRW50cnlfcCwKLQkJCQkJICAgICB0RXBsT2JkQ2JQYXJhbSBNRU0gKiBwQ2JQYXJhbV9wLAotCQkJCQkgICAgIHRFcGxPYmRTaXplICogcE9iZFNpemVfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxPYmRXcml0ZUVudHJ5UHJlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICAgICB2b2lkICpwU3JjRGF0YV9wLAorCQkJCSAgICAgIHZvaWQgKipwcERzdERhdGFfcCwKKwkJCQkgICAgICB0RXBsT2JkU2l6ZSBTaXplX3AsCisJCQkJICAgICAgdEVwbE9iZEVudHJ5UHRyICpwcE9iZEVudHJ5X3AsCisJCQkJICAgICAgdEVwbE9iZFN1YkVudHJ5UHRyICpwcFN1YkVudHJ5X3AsCisJCQkJICAgICAgdEVwbE9iZENiUGFyYW0gKnBDYlBhcmFtX3AsCisJCQkJICAgICAgdEVwbE9iZFNpemUgKnBPYmRTaXplX3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkV3JpdGVFbnRyeVBvc3QoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJICAgICAgdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeV9wLAotCQkJCQkgICAgICB0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkVudHJ5X3AsCi0JCQkJCSAgICAgIHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBDYlBhcmFtX3AsCi0JCQkJCSAgICAgIHZvaWQgKnBTcmNEYXRhX3AsCi0JCQkJCSAgICAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCSAgICAgIHRFcGxPYmRTaXplIE9iZFNpemVfcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxPYmRXcml0ZUVudHJ5UG9zdChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkRW50cnlQdHIgcE9iZEVudHJ5X3AsCisJCQkJICAgICAgIHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViRW50cnlfcCwKKwkJCQkgICAgICAgdEVwbE9iZENiUGFyYW0gKnBDYlBhcmFtX3AsCisJCQkJICAgICAgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICAgICAgIHZvaWQgKnBEc3REYXRhX3AsCisJCQkJICAgICAgIHRFcGxPYmRTaXplIE9iZFNpemVfcCk7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMjI4LDggKzIyNCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEluaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgdEVwbE9iZEluaXRQYXJhbSBNRU0gKiBwSW5pdFBhcmFtX3ApCit0RXBsS2VybmVsIEVwbE9iZEluaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfIHRFcGxPYmRJbml0UGFyYW0gKnBJbml0UGFyYW1fcCkKIHsKIAogCXRFcGxLZXJuZWwgUmV0OwpAQCAtMjYxLDkgKzI1Niw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEFkZEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXwotCQkJCQkJIHRFcGxPYmRJbml0UGFyYW0gTUVNICoKLQkJCQkJCSBwSW5pdFBhcmFtX3ApCit0RXBsS2VybmVsIEVwbE9iZEFkZEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkSW5pdFBhcmFtICpwSW5pdFBhcmFtX3ApCiB7CiAKIAlFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSX0xPQ0FMIHRFcGxLZXJuZWwgUmV0OwpAQCAtMzA4LDcgKzMwMSw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiAoRVBMX1VTRV9ERUxFVEVJTlNUX0ZVTkMgIT0gRkFMU0UpCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkRGVsZXRlSW5zdGFuY2UoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUikKK3RFcGxLZXJuZWwgRXBsT2JkRGVsZXRlSW5zdGFuY2UoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUikKIHsKIAkvLyBjaGVjayBmb3IgYWxsIEFQSSBmdW5jdGlvbiBpZiBpbnN0YW5jZSBpcyB2YWxpZAogCUVQTF9NQ09fQ0hFQ0tfSU5TVEFOQ0VfU1RBVEUoKTsKQEAgLTM0MSwxOCArMzM0LDE2IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFdyaXRlRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCXVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCXRFcGxPYmRTaXplIFNpemVfcCkKK3RFcGxLZXJuZWwgRXBsT2JkV3JpdGVFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkgICAgdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeTsKIAl0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkVudHJ5OwotCXRFcGxPYmRDYlBhcmFtIE1FTSBDYlBhcmFtOwotCXZvaWQgTUVNICpwRHN0RGF0YTsKKwl0RXBsT2JkQ2JQYXJhbSBDYlBhcmFtOworCXZvaWQgKnBEc3REYXRhOwogCXRFcGxPYmRTaXplIE9iZFNpemU7CiAKIAlSZXQgPSBFcGxPYmRXcml0ZUVudHJ5UHJlKEVQTF9NQ09fSU5TVEFOQ0VfUFRSXwpAQCAtNDAyLDE3ICszOTMsMTUgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkUmVhZEVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJICAgICAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCSAgICAgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApCit0RXBsS2VybmVsIEVwbE9iZFJlYWRFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgIHZvaWQgKnBEc3REYXRhX3AsIHRFcGxPYmRTaXplICpwU2l6ZV9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeTsKIAl0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkVudHJ5OwotCXRFcGxPYmRDYlBhcmFtIE1FTSBDYlBhcmFtOworCXRFcGxPYmRDYlBhcmFtIENiUGFyYW07CiAJdm9pZCAqcFNyY0RhdGE7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIApAQCAtNDg3LDkgKzQ3Niw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEFjY2Vzc09kUGFydChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICB0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCi0JCQkJCQkgIHRFcGxPYmREaXIgRGlyZWN0aW9uX3ApCit0RXBsS2VybmVsIEVwbE9iZEFjY2Vzc09kUGFydChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCisJCQkgICAgICB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKQEAgLTU4NywxMiArNTc1LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZERlZmluZVZhcihFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgICAgdEVwbFZhclBhcmFtIE1FTSAqIHBWYXJQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxPYmREZWZpbmVWYXIoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbFZhclBhcmFtICpwVmFyUGFyYW1fcCkKIHsKIAogCXRFcGxLZXJuZWwgUmV0OwotCXRFcGxPYmRWYXJFbnRyeSBNRU0gKnBWYXJFbnRyeTsKKwl0RXBsT2JkVmFyRW50cnkgKnBWYXJFbnRyeTsKIAl0RXBsVmFyUGFyYW1WYWxpZCBWYXJWYWxpZDsKIAl0RXBsT2JkU3ViRW50cnlQdHIgcFN1YmluZGV4RW50cnk7CiAKQEAgLTY3NCw5ICs2NjEsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB2b2lkICpQVUJMSUMgRXBsT2JkR2V0T2JqZWN0RGF0YVB0cihFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKK3ZvaWQgKkVwbE9iZEdldE9iamVjdERhdGFQdHIoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl2b2lkICpwRGF0YTsKQEAgLTcxOSw4ICs3MDUsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRSZWdpc3RlclVzZXJPZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgIHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApCit0RXBsS2VybmVsIEVwbE9iZFJlZ2lzdGVyVXNlck9kKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApCiB7CiAKIAlFUExfTUNPX0NIRUNLX0lOU1RBTkNFX1NUQVRFKCk7CkBAIC03NDksMTAgKzczNCw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHZvaWQgUFVCTElDIEVwbE9iZEluaXRWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgdEVwbE9iZFZhckVudHJ5IE1FTSAqIHBWYXJFbnRyeV9wLAotCQkJCQkgICAgdEVwbE9iZFR5cGUgVHlwZV9wLAotCQkJCQkgICAgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQordm9pZCBFcGxPYmRJbml0VmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbE9iZFZhckVudHJ5ICpwVmFyRW50cnlfcCwKKwkJCXRFcGxPYmRUeXBlIFR5cGVfcCwgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQogewogLyoKICAgICAjaWYgKEVQTF9QRE9fVVNFX1NUQVRJQ19NQVBQSU5HID09IEZBTFNFKQpAQCAtODAzLDkgKzc4Niw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxPYmRTaXplIFBVQkxJQyBFcGxPYmRHZXREYXRhU2l6ZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKQordEVwbE9iZFNpemUgRXBsT2JkR2V0RGF0YVNpemUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKQEAgLTg0NSwxMSArODI3LDExIEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHVuc2lnbmVkIGludCBQVUJMSUMgRXBsT2JkR2V0Tm9kZUlkKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIpCit1bnNpZ25lZCBpbnQgRXBsT2JkR2V0Tm9kZUlkKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFIpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQlCWVRFIGJOb2RlSWQ7CisJdTggYk5vZGVJZDsKIAogCWJOb2RlSWQgPSAwOwogCU9iZFNpemUgPSBzaXplb2YoYk5vZGVJZCk7CkBAIC04ODIsMjIgKzg2NCwyMSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRTZXROb2RlSWQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJICAgICAgIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCkKK3RFcGxLZXJuZWwgRXBsT2JkU2V0Tm9kZUlkKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsT2JkU2l6ZSBPYmRTaXplOwotCUJZVEUgZkh3Qm9vbDsKLQlCWVRFIGJOb2RlSWQ7CisJdTggZkh3Qm9vbDsKKwl1OCBiTm9kZUlkOwogCiAJLy8gY2hlY2sgTm9kZSBJZAogCWlmICh1aU5vZGVJZF9wID09IEVQTF9DX0FEUl9JTlZBTElEKSB7CiAJCVJldCA9IGtFcGxJbnZhbGlkTm9kZUlkOwogCQlnb3RvIEV4aXQ7CiAJfQotCWJOb2RlSWQgPSAoQllURSkgdWlOb2RlSWRfcDsKLQlPYmRTaXplID0gc2l6ZW9mKEJZVEUpOworCWJOb2RlSWQgPSAodTgpIHVpTm9kZUlkX3A7CisJT2JkU2l6ZSA9IHNpemVvZih1OCk7CiAJLy8gd3JpdGUgTm9kZUlkIHRvIE9EIGVudHJ5CiAJUmV0ID0gRXBsT2JkV3JpdGVFbnRyeShFUExfTUNPX1BUUl9JTlNUQU5DRV9QVFJfCiAJCQkgICAgICAgRVBMX09CRF9OT0RFX0lEX0lOREVYLApAQCAtOTY2LDEwICs5NDcsOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRJc051bWVyaWNhbChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSBCT09MICogcGZFbnRyeU51bWVyaWNhbF9wKQordEVwbEtlcm5lbCBFcGxPYmRJc051bWVyaWNhbChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICBCT09MICpwZkVudHJ5TnVtZXJpY2FsX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeTsKQEAgLTEwMTgsMTYgKzk5OCwxNCBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRSZWFkRW50cnlUb0xlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCQkgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApCit0RXBsS2VybmVsIEVwbE9iZFJlYWRFbnRyeVRvTGUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICAgIHZvaWQgKnBEc3REYXRhX3AsIHRFcGxPYmRTaXplICpwU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxPYmRFbnRyeVB0ciBwT2JkRW50cnk7CiAJdEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJFbnRyeTsKLQl0RXBsT2JkQ2JQYXJhbSBNRU0gQ2JQYXJhbTsKKwl0RXBsT2JkQ2JQYXJhbSBDYlBhcmFtOwogCXZvaWQgKnBTcmNEYXRhOwogCXRFcGxPYmRTaXplIE9iZFNpemU7CiAKQEAgLTEwOTEsNyArMTA2OSw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50ODoKIAljYXNlIGtFcGxPYmRUeXBVSW50ODoKIAkJewotCQkJQW1pU2V0Qnl0ZVRvTGUocERzdERhdGFfcCwgKigoQllURSAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0Qnl0ZVRvTGUocERzdERhdGFfcCwgKigodTggKikgcFNyY0RhdGEpKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEwOTksNyArMTA3Nyw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50MTY6CiAJY2FzZSBrRXBsT2JkVHlwVUludDE2OgogCQl7Ci0JCQlBbWlTZXRXb3JkVG9MZShwRHN0RGF0YV9wLCAqKChXT1JEICopIHBTcmNEYXRhKSk7CisJCQlBbWlTZXRXb3JkVG9MZShwRHN0RGF0YV9wLCAqKCh1MTYgKikgcFNyY0RhdGEpKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTExMDcsNyArMTA4NSw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50MjQ6CiAJY2FzZSBrRXBsT2JkVHlwVUludDI0OgogCQl7Ci0JCQlBbWlTZXREd29yZDI0VG9MZShwRHN0RGF0YV9wLCAqKChEV09SRCAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0RHdvcmQyNFRvTGUocERzdERhdGFfcCwgKigodTMyICopIHBTcmNEYXRhKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTE2LDcgKzEwOTQsNyBAQAogCWNhc2Uga0VwbE9iZFR5cFVJbnQzMjoKIAljYXNlIGtFcGxPYmRUeXBSZWFsMzI6CiAJCXsKLQkJCUFtaVNldER3b3JkVG9MZShwRHN0RGF0YV9wLCAqKChEV09SRCAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0RHdvcmRUb0xlKHBEc3REYXRhX3AsICooKHUzMiAqKSBwU3JjRGF0YSkpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTEyNCw3ICsxMTAyLDcgQEAKIAljYXNlIGtFcGxPYmRUeXBJbnQ0MDoKIAljYXNlIGtFcGxPYmRUeXBVSW50NDA6CiAJCXsKLQkJCUFtaVNldFF3b3JkNDBUb0xlKHBEc3REYXRhX3AsICooKFFXT1JEICopIHBTcmNEYXRhKSk7CisJCQlBbWlTZXRRd29yZDQwVG9MZShwRHN0RGF0YV9wLCAqKCh1NjQgKikgcFNyY0RhdGEpKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTExMzIsNyArMTExMCw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50NDg6CiAJY2FzZSBrRXBsT2JkVHlwVUludDQ4OgogCQl7Ci0JCQlBbWlTZXRRd29yZDQ4VG9MZShwRHN0RGF0YV9wLCAqKChRV09SRCAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0UXdvcmQ0OFRvTGUocERzdERhdGFfcCwgKigodTY0ICopIHBTcmNEYXRhKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTQwLDcgKzExMTgsNyBAQAogCWNhc2Uga0VwbE9iZFR5cEludDU2OgogCWNhc2Uga0VwbE9iZFR5cFVJbnQ1NjoKIAkJewotCQkJQW1pU2V0UXdvcmQ1NlRvTGUocERzdERhdGFfcCwgKigoUVdPUkQgKikgcFNyY0RhdGEpKTsKKwkJCUFtaVNldFF3b3JkNTZUb0xlKHBEc3REYXRhX3AsICooKHU2NCAqKSBwU3JjRGF0YSkpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTE0OSw3ICsxMTI3LDcgQEAKIAljYXNlIGtFcGxPYmRUeXBVSW50NjQ6CiAJY2FzZSBrRXBsT2JkVHlwUmVhbDY0OgogCQl7Ci0JCQlBbWlTZXRRd29yZDY0VG9MZShwRHN0RGF0YV9wLCAqKChRV09SRCAqKSBwU3JjRGF0YSkpOworCQkJQW1pU2V0UXdvcmQ2NFRvTGUocERzdERhdGFfcCwgKigodTY0ICopIHBTcmNEYXRhKSk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMTk5LDE5ICsxMTc3LDE3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFdyaXRlRW50cnlGcm9tTGUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgICAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCSAgICAgIHRFcGxPYmRTaXplIFNpemVfcCkKK3RFcGxLZXJuZWwgRXBsT2JkV3JpdGVFbnRyeUZyb21MZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgIHZvaWQgKnBTcmNEYXRhX3AsIHRFcGxPYmRTaXplIFNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsT2JkRW50cnlQdHIgcE9iZEVudHJ5OwogCXRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViRW50cnk7Ci0JdEVwbE9iZENiUGFyYW0gTUVNIENiUGFyYW07Ci0Jdm9pZCBNRU0gKnBEc3REYXRhOworCXRFcGxPYmRDYlBhcmFtIENiUGFyYW07CisJdm9pZCAqcERzdERhdGE7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQlRV09SRCBxd0J1ZmZlcjsKKwl1NjQgcXdCdWZmZXI7CiAJdm9pZCAqcEJ1ZmZlciA9ICZxd0J1ZmZlcjsKIAogCVJldCA9IEVwbE9iZFdyaXRlRW50cnlQcmUoRVBMX01DT19JTlNUQU5DRV9QVFJfCkBAIC0xMjQyLDcgKzEyMTgsNyBAQAogCWNhc2Uga0VwbE9iZFR5cEludDg6CiAJY2FzZSBrRXBsT2JkVHlwVUludDg6CiAJCXsKLQkJCSooKEJZVEUgKikgcEJ1ZmZlcikgPSBBbWlHZXRCeXRlRnJvbUxlKHBTcmNEYXRhX3ApOworCQkJKigodTggKikgcEJ1ZmZlcikgPSBBbWlHZXRCeXRlRnJvbUxlKHBTcmNEYXRhX3ApOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTI1MCw3ICsxMjI2LDcgQEAKIAljYXNlIGtFcGxPYmRUeXBJbnQxNjoKIAljYXNlIGtFcGxPYmRUeXBVSW50MTY6CiAJCXsKLQkJCSooKFdPUkQgKikgcEJ1ZmZlcikgPSBBbWlHZXRXb3JkRnJvbUxlKHBTcmNEYXRhX3ApOworCQkJKigodTE2ICopIHBCdWZmZXIpID0gQW1pR2V0V29yZEZyb21MZShwU3JjRGF0YV9wKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEyNTgsNyArMTIzNCw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50MjQ6CiAJY2FzZSBrRXBsT2JkVHlwVUludDI0OgogCQl7Ci0JCQkqKChEV09SRCAqKSBwQnVmZmVyKSA9IEFtaUdldER3b3JkMjRGcm9tTGUocFNyY0RhdGFfcCk7CisJCQkqKCh1MzIgKikgcEJ1ZmZlcikgPSBBbWlHZXREd29yZDI0RnJvbUxlKHBTcmNEYXRhX3ApOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTI2Nyw3ICsxMjQzLDcgQEAKIAljYXNlIGtFcGxPYmRUeXBVSW50MzI6CiAJY2FzZSBrRXBsT2JkVHlwUmVhbDMyOgogCQl7Ci0JCQkqKChEV09SRCAqKSBwQnVmZmVyKSA9IEFtaUdldER3b3JkRnJvbUxlKHBTcmNEYXRhX3ApOworCQkJKigodTMyICopIHBCdWZmZXIpID0gQW1pR2V0RHdvcmRGcm9tTGUocFNyY0RhdGFfcCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMjc1LDcgKzEyNTEsNyBAQAogCWNhc2Uga0VwbE9iZFR5cEludDQwOgogCWNhc2Uga0VwbE9iZFR5cFVJbnQ0MDoKIAkJewotCQkJKigoUVdPUkQgKikgcEJ1ZmZlcikgPSBBbWlHZXRRd29yZDQwRnJvbUxlKHBTcmNEYXRhX3ApOworCQkJKigodTY0ICopIHBCdWZmZXIpID0gQW1pR2V0UXdvcmQ0MEZyb21MZShwU3JjRGF0YV9wKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTEyODMsNyArMTI1OSw3IEBACiAJY2FzZSBrRXBsT2JkVHlwSW50NDg6CiAJY2FzZSBrRXBsT2JkVHlwVUludDQ4OgogCQl7Ci0JCQkqKChRV09SRCAqKSBwQnVmZmVyKSA9IEFtaUdldFF3b3JkNDhGcm9tTGUocFNyY0RhdGFfcCk7CisJCQkqKCh1NjQgKikgcEJ1ZmZlcikgPSBBbWlHZXRRd29yZDQ4RnJvbUxlKHBTcmNEYXRhX3ApOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTI5MSw3ICsxMjY3LDcgQEAKIAljYXNlIGtFcGxPYmRUeXBJbnQ1NjoKIAljYXNlIGtFcGxPYmRUeXBVSW50NTY6CiAJCXsKLQkJCSooKFFXT1JEICopIHBCdWZmZXIpID0gQW1pR2V0UXdvcmQ1NkZyb21MZShwU3JjRGF0YV9wKTsKKwkJCSooKHU2NCAqKSBwQnVmZmVyKSA9IEFtaUdldFF3b3JkNTZGcm9tTGUocFNyY0RhdGFfcCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMzAwLDcgKzEyNzYsNyBAQAogCWNhc2Uga0VwbE9iZFR5cFVJbnQ2NDoKIAljYXNlIGtFcGxPYmRUeXBSZWFsNjQ6CiAJCXsKLQkJCSooKFFXT1JEICopIHBCdWZmZXIpID0gQW1pR2V0UXdvcmQ2NEZyb21MZShwU3JjRGF0YV9wKTsKKwkJCSooKHU2NCAqKSBwQnVmZmVyKSA9IEFtaUdldFF3b3JkNjRGcm9tTGUocFNyY0RhdGFfcCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMzQ1LDEwICsxMzIxLDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkR2V0QWNjZXNzVHlwZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICB0RXBsT2JkQWNjZXNzICogcEFjY2Vzc1R5cF9wKQordEVwbEtlcm5lbCBFcGxPYmRHZXRBY2Nlc3NUeXBlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICAgICB0RXBsT2JkQWNjZXNzICpwQWNjZXNzVHlwX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeTsKQEAgLTEzODgsMTAgKzEzNjMsOSBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFNlYXJjaFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCi0JCQkJICAgICAgIHRFcGxPYmRWYXJFbnRyeSBNRU0gKiogcHBWYXJFbnRyeV9wKQordEVwbEtlcm5lbCBFcGxPYmRTZWFyY2hWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkJdEVwbE9iZFZhckVudHJ5ICoqcHBWYXJFbnRyeV9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQ7CkBAIC0xNDM1LDExICsxNDA5LDExIEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkQ2FsbE9iamVjdENhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCiAJCQkJCSAgIHRFcGxPYmRDYWxsYmFjayBmcENhbGxiYWNrX3AsCi0JCQkJCSAgIHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBDYlBhcmFtX3ApCisJCQkJCSAgIHRFcGxPYmRDYlBhcmFtICpwQ2JQYXJhbV9wKQogewogCiAJdEVwbEtlcm5lbCBSZXQ7Ci0JdEVwbE9iZENhbGxiYWNrIE1FTSBmcENhbGxiYWNrOworCXRFcGxPYmRDYWxsYmFjayBmcENhbGxiYWNrOwogCiAJLy8gY2hlY2sgZm9yIGFsbCBBUEkgZnVuY3Rpb24gaWYgaW5zdGFuY2UgaXMgdmFsaWQKIAlFUExfTUNPX0NIRUNLX0lOU1RBTkNFX1NUQVRFKCk7CkBAIC0xNDgxLDcgKzE0NTUsNyBAQAogewogCiAJdEVwbE9iZFNpemUgRGF0YVNpemU7Ci0Jdm9pZCBNRU0gKnBEYXRhOworCXZvaWQgKnBEYXRhOwogCiAJLy8gSWYgT0QgZW50cnkgaXMgZGVmaW5lZCBieSBtYWNybyBFUExfT0JEX1NVQklOREVYX1JPTV9WU1RSSU5HCiAJLy8gdGhlbiB0aGUgY3VycmVudCBwb2ludGVyIGlzIGFsd2F5cyBOVUxMLiBUaGUgZnVuY3Rpb24KQEAgLTE0OTAsOCArMTQ2NCw3IEBACiAKIAlpZiAocFN1YkluZGV4RW50cnlfcC0+bV9UeXBlID09IGtFcGxPYmRUeXBWU3RyaW5nKSB7CiAJCS8vIFRoZSBwb2ludGVyIHRvIGN1cnJlbnQgdmFsdWUgY2FuIGJlIHJlY2VpdmVkIGZyb20gRXBsT2JkR2V0T2JqZWN0Q3VycmVudFB0cigpCi0JCXBEYXRhID0KLQkJICAgICgodm9pZCBNRU0gKilFcGxPYmRHZXRPYmplY3RDdXJyZW50UHRyKHBTdWJJbmRleEVudHJ5X3ApKTsKKwkJcERhdGEgPSAoKHZvaWQgKilFcGxPYmRHZXRPYmplY3RDdXJyZW50UHRyKHBTdWJJbmRleEVudHJ5X3ApKTsKIAkJaWYgKHBEYXRhICE9IE5VTEwpIHsKIAkJCURhdGFTaXplID0KIAkJCSAgICBFcGxPYmRHZXRTdHJMZW4oKHZvaWQgKilwRGF0YSwgRGF0YVNpemUsCkBAIC0xNTI2LDcgKzE0OTksNyBAQAogewogCiAJdEVwbE9iZFNpemUgU3RyTGVuID0gMDsKLQlCWVRFICpwYlN0cmluZzsKKwl1OCAqcGJTdHJpbmc7CiAKIAlpZiAocE9iakRhdGFfcCA9PSBOVUxMKSB7CiAJCWdvdG8gRXhpdDsKQEAgLTE3NjMsMTggKzE3MzYsMTggQEAKIAljYXNlIGtFcGxPYmRUeXBJbnQ2NDoKIAogCQkvLyBzd2l0Y2ggdG8gbG93ZXIgbGltaXQKLQkJcFJhbmdlRGF0YSA9ICgoc2lnbmVkIFFXT1JEICopcFJhbmdlRGF0YSkgKyAxOworCQlwUmFuZ2VEYXRhID0gKChzaWduZWQgdTY0ICopcFJhbmdlRGF0YSkgKyAxOwogCiAJCS8vIGNoZWNrIGlmIHZhbHVlIGlzIHRvIGxvdwotCQlpZiAoKigoc2lnbmVkIFFXT1JEICopcERhdGFfcCkgPCAqKChzaWduZWQgUVdPUkQgKilwUmFuZ2VEYXRhKSkgeworCQlpZiAoKigoc2lnbmVkIHU2NCAqKXBEYXRhX3ApIDwgKigoc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpKSB7CiAJCQlSZXQgPSBrRXBsT2JkVmFsdWVUb29Mb3c7CiAJCQlicmVhazsKIAkJfQogCQkvLyBzd2l0Y2ggdG8gaGlnaGVyIGxpbWl0Ci0JCXBSYW5nZURhdGEgPSAoKHNpZ25lZCBRV09SRCAqKXBSYW5nZURhdGEpICsgMTsKKwkJcFJhbmdlRGF0YSA9ICgoc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpICsgMTsKIAogCQkvLyBjaGVjayBpZiB2YWx1ZSBpcyB0byBoaWdoCi0JCWlmICgqKChzaWduZWQgUVdPUkQgKilwRGF0YV9wKSA+ICooKHNpZ25lZCBRV09SRCAqKXBSYW5nZURhdGEpKSB7CisJCWlmICgqKChzaWduZWQgdTY0ICopcERhdGFfcCkgPiAqKChzaWduZWQgdTY0ICopcFJhbmdlRGF0YSkpIHsKIAkJCVJldCA9IGtFcGxPYmRWYWx1ZVRvb0hpZ2g7CiAJCX0KIApAQCAtMTc4NywyMCArMTc2MCwyMCBAQAogCWNhc2Uga0VwbE9iZFR5cFVJbnQ2NDoKIAogCQkvLyBzd2l0Y2ggdG8gbG93ZXIgbGltaXQKLQkJcFJhbmdlRGF0YSA9ICgodW5zaWduZWQgUVdPUkQgKilwUmFuZ2VEYXRhKSArIDE7CisJCXBSYW5nZURhdGEgPSAoKHVuc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpICsgMTsKIAogCQkvLyBjaGVjayBpZiB2YWx1ZSBpcyB0byBsb3cKLQkJaWYgKCooKHVuc2lnbmVkIFFXT1JEICopcERhdGFfcCkgPAotCQkgICAgKigodW5zaWduZWQgUVdPUkQgKilwUmFuZ2VEYXRhKSkgeworCQlpZiAoKigodW5zaWduZWQgdTY0ICopcERhdGFfcCkgPAorCQkgICAgKigodW5zaWduZWQgdTY0ICopcFJhbmdlRGF0YSkpIHsKIAkJCVJldCA9IGtFcGxPYmRWYWx1ZVRvb0xvdzsKIAkJCWJyZWFrOwogCQl9CiAJCS8vIHN3aXRjaCB0byBoaWdoZXIgbGltaXQKLQkJcFJhbmdlRGF0YSA9ICgodW5zaWduZWQgUVdPUkQgKilwUmFuZ2VEYXRhKSArIDE7CisJCXBSYW5nZURhdGEgPSAoKHVuc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpICsgMTsKIAogCQkvLyBjaGVjayBpZiB2YWx1ZSBpcyB0byBoaWdoCi0JCWlmICgqKCh1bnNpZ25lZCBRV09SRCAqKXBEYXRhX3ApID4KLQkJICAgICooKHVuc2lnbmVkIFFXT1JEICopcFJhbmdlRGF0YSkpIHsKKwkJaWYgKCooKHVuc2lnbmVkIHU2NCAqKXBEYXRhX3ApID4KKwkJICAgICooKHVuc2lnbmVkIHU2NCAqKXBSYW5nZURhdGEpKSB7CiAJCQlSZXQgPSBrRXBsT2JkVmFsdWVUb29IaWdoOwogCQl9CiAKQEAgLTE4NzAsMjkgKzE4NDMsMjggQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkV3JpdGVFbnRyeVByZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJICAgICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkgICAgIHZvaWQgKipwcERzdERhdGFfcCwKLQkJCQkJICAgICB0RXBsT2JkU2l6ZSBTaXplX3AsCi0JCQkJCSAgICAgdEVwbE9iZEVudHJ5UHRyICogcHBPYmRFbnRyeV9wLAotCQkJCQkgICAgIHRFcGxPYmRTdWJFbnRyeVB0ciAqIHBwU3ViRW50cnlfcCwKLQkJCQkJICAgICB0RXBsT2JkQ2JQYXJhbSBNRU0gKiBwQ2JQYXJhbV9wLAotCQkJCQkgICAgIHRFcGxPYmRTaXplICogcE9iZFNpemVfcCkKK3N0YXRpYyB0RXBsS2VybmVsIEVwbE9iZFdyaXRlRW50cnlQcmUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCSAgICAgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICAgICAgdm9pZCAqKnBwRHN0RGF0YV9wLAorCQkJCSAgICAgIHRFcGxPYmRTaXplIFNpemVfcCwKKwkJCQkgICAgICB0RXBsT2JkRW50cnlQdHIgKnBwT2JkRW50cnlfcCwKKwkJCQkgICAgICB0RXBsT2JkU3ViRW50cnlQdHIgKnBwU3ViRW50cnlfcCwKKwkJCQkgICAgICB0RXBsT2JkQ2JQYXJhbSAqcENiUGFyYW1fcCwKKwkJCQkgICAgICB0RXBsT2JkU2l6ZSAqcE9iZFNpemVfcCkKIHsKIAogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxPYmRFbnRyeVB0ciBwT2JkRW50cnk7CiAJdEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJFbnRyeTsKIAl0RXBsT2JkQWNjZXNzIEFjY2VzczsKLQl2b2lkIE1FTSAqcERzdERhdGE7CisJdm9pZCAqcERzdERhdGE7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAlCT09MIGZFbnRyeU51bWVyaWNhbDsKIAogI2lmIChFUExfT0JEX1VTRV9TVFJJTkdfRE9NQUlOX0lOX1JBTSAhPSBGQUxTRSkKLQl0RXBsT2JkVlN0cmluZ0RvbWFpbiBNRU0gTWVtVlN0cmluZ0RvbWFpbjsKLQl2b2lkIE1FTSAqcEN1cnJEYXRhOworCXRFcGxPYmRWU3RyaW5nRG9tYWluIE1lbVZTdHJpbmdEb21haW47CisJdm9pZCAqcEN1cnJEYXRhOwogI2VuZGlmCiAKIAkvLyBjaGVjayBmb3IgYWxsIEFQSSBmdW5jdGlvbiBpZiBpbnN0YW5jZSBpcyB2YWxpZApAQCAtMTkwOCw3ICsxODgwLDcgQEAKIAkJZ290byBFeGl0OwogCX0KIAkvLyBnZXQgcG9pbnRlciB0byBvYmplY3QgZGF0YQotCXBEc3REYXRhID0gKHZvaWQgTUVNICopRXBsT2JkR2V0T2JqZWN0RGF0YVB0ckludGVybihwU3ViRW50cnkpOworCXBEc3REYXRhID0gKHZvaWQgKilFcGxPYmRHZXRPYmplY3REYXRhUHRySW50ZXJuKHBTdWJFbnRyeSk7CiAKIAlBY2Nlc3MgPSAodEVwbE9iZEFjY2VzcykgcFN1YkVudHJ5LT5tX0FjY2VzczsKIApAQCAtMTkzMyw3ICsxOTA1LDcgQEAKIAkvLyBhZGFwdGVkIGJ5IHVzZXIgY2FsbGJhY2sgZnVuY3Rpb24sIHJlLXJlYWQKIAkvLyB0aGlzIHZhbHVlcy4KIAlPYmRTaXplID0gRXBsT2JkR2V0T2JqZWN0U2l6ZShwU3ViRW50cnkpOwotCXBEc3REYXRhID0gKHZvaWQgTUVNICopRXBsT2JkR2V0T2JqZWN0RGF0YVB0ckludGVybihwU3ViRW50cnkpOworCXBEc3REYXRhID0gKHZvaWQgKilFcGxPYmRHZXRPYmplY3REYXRhUHRySW50ZXJuKHBTdWJFbnRyeSk7CiAKIAkvLyAwOS1kZWMtMjAwNCByLmQuOgogCS8vICAgICAgRnVuY3Rpb24gRXBsT2JkV3JpdGVFbnRyeSgpIGNhbGxzIG5ldyBldmVudCBrRXBsT2JkRXZXclN0cmluZ0RvbWFpbgpAQCAtMTk2NywyMyArMTkzOSwxOSBAQAogCQlwQ3VyckRhdGEgPSBwU3ViRW50cnktPm1fcEN1cnJlbnQ7CiAJCWlmICgocFN1YkVudHJ5LT5tX1R5cGUgPT0ga0VwbE9iZFR5cFZTdHJpbmcpCiAJCSAgICB8fCAocFN1YkVudHJ5LT5tX1R5cGUgPT0ga0VwbE9iZFR5cE9TdHJpbmcpKSB7Ci0JCQkoKHRFcGxPYmRWU3RyaW5nIE1FTSAqKSBwQ3VyckRhdGEpLT5tX1NpemUgPQotCQkJICAgIE1lbVZTdHJpbmdEb21haW4ubV9PYmpTaXplOwotCQkJKCh0RXBsT2JkVlN0cmluZyBNRU0gKikgcEN1cnJEYXRhKS0+bV9wU3RyaW5nID0KLQkJCSAgICBNZW1WU3RyaW5nRG9tYWluLm1fcERhdGE7CisJCQkoKHRFcGxPYmRWU3RyaW5nICopcEN1cnJEYXRhKS0+bV9TaXplID0gTWVtVlN0cmluZ0RvbWFpbi5tX09ialNpemU7CisJCQkoKHRFcGxPYmRWU3RyaW5nICopcEN1cnJEYXRhKS0+bV9wU3RyaW5nID0gTWVtVlN0cmluZ0RvbWFpbi5tX3BEYXRhOwogCQl9IGVsc2UJCS8vIGlmIChwU2Rvc1RhYmxlRW50cnlfcC0+bV9iT2JqVHlwZSA9PSBrRXBsT2JkVHlwRG9tYWluKQogCQl7Ci0JCQkoKHRFcGxPYmRWYXJFbnRyeSBNRU0gKikgcEN1cnJEYXRhKS0+bV9TaXplID0KLQkJCSAgICBNZW1WU3RyaW5nRG9tYWluLm1fT2JqU2l6ZTsKLQkJCSgodEVwbE9iZFZhckVudHJ5IE1FTSAqKSBwQ3VyckRhdGEpLT5tX3BEYXRhID0KLQkJCSAgICAodm9pZCBNRU0gKilNZW1WU3RyaW5nRG9tYWluLm1fcERhdGE7CisJCQkoKHRFcGxPYmRWYXJFbnRyeSAqKXBDdXJyRGF0YSktPm1fU2l6ZSA9IE1lbVZTdHJpbmdEb21haW4ubV9PYmpTaXplOworCQkJKCh0RXBsT2JkVmFyRW50cnkgKilwQ3VyckRhdGEpLT5tX3BEYXRhID0gKHZvaWQgKilNZW1WU3RyaW5nRG9tYWluLm1fcERhdGE7CiAJCX0KIAogCQkvLyBCZWNhdXNlIG9iamVjdCBzaXplIGFuZCBvYmplY3QgcG9pbnRlciBhcmUKIAkJLy8gYWRhcHRlZCBieSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uLCByZS1yZWFkCiAJCS8vIHRoaXMgdmFsdWVzLgogCQlPYmRTaXplID0gTWVtVlN0cmluZ0RvbWFpbi5tX09ialNpemU7Ci0JCXBEc3REYXRhID0gKHZvaWQgTUVNICopTWVtVlN0cmluZ0RvbWFpbi5tX3BEYXRhOworCQlwRHN0RGF0YSA9ICh2b2lkICopTWVtVlN0cmluZ0RvbWFpbi5tX3BEYXRhOwogCX0KICNlbmRpZiAvLyNpZiAoT0JEX1VTRV9TVFJJTkdfRE9NQUlOX0lOX1JBTSAhPSBGQUxTRSkKIApAQCAtMjAwNCw3ICsxOTcyLDcgQEAKIAl9CiAKIAlpZiAocFN1YkVudHJ5LT5tX1R5cGUgPT0ga0VwbE9iZFR5cFZTdHJpbmcpIHsKLQkJaWYgKCgoY2hhciBNRU0gKilwU3JjRGF0YV9wKVtTaXplX3AgLSAxXSA9PSAnXDAnKSB7CS8vIGxhc3QgYnl0ZSBvZiBzb3VyY2Ugc3RyaW5nIGNvbnRhaW5zIG51bGwgY2hhcmFjdGVyCisJCWlmICgoKGNoYXIgKilwU3JjRGF0YV9wKVtTaXplX3AgLSAxXSA9PSAnXDAnKSB7CS8vIGxhc3QgYnl0ZSBvZiBzb3VyY2Ugc3RyaW5nIGNvbnRhaW5zIG51bGwgY2hhcmFjdGVyCiAKIAkJCS8vIHJlc2VydmUgb25lIGJ5dGUgaW4gZGVzdGluYXRpb24gZm9yIDAtdGVybWluYXRpb24KIAkJCVNpemVfcCAtPSAxOwpAQCAtMjA2NCwxMyArMjAzMiwxMiBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRXcml0ZUVudHJ5UG9zdChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgICB0RXBsT2JkRW50cnlQdHIgcE9iZEVudHJ5X3AsCi0JCQkJCSAgICAgIHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViRW50cnlfcCwKLQkJCQkJICAgICAgdEVwbE9iZENiUGFyYW0gTUVNICogcENiUGFyYW1fcCwKLQkJCQkJICAgICAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJICAgICAgdm9pZCAqcERzdERhdGFfcCwKLQkJCQkJICAgICAgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQorc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkV3JpdGVFbnRyeVBvc3QoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbE9iZEVudHJ5UHRyIHBPYmRFbnRyeV9wLAorCQkJCSAgICAgICB0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkVudHJ5X3AsCisJCQkJICAgICAgIHRFcGxPYmRDYlBhcmFtICpwQ2JQYXJhbV9wLAorCQkJCSAgICAgICB2b2lkICpwU3JjRGF0YV9wLAorCQkJCSAgICAgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJCSAgICAgICB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApCiB7CiAKIAl0RXBsS2VybmVsIFJldDsKQEAgLTIxMDMsNyArMjA3MCw3IEBACiAKIAkvLyB0ZXJtaW5hdGUgc3RyaW5nIHdpdGggMAogCWlmIChwU3ViRW50cnlfcC0+bV9UeXBlID09IGtFcGxPYmRUeXBWU3RyaW5nKSB7Ci0JCSgoY2hhciBNRU0gKilwRHN0RGF0YV9wKVtPYmRTaXplX3BdID0gJ1wwJzsKKwkJKChjaGFyICopcERzdERhdGFfcClbT2JkU2l6ZV9wXSA9ICdcMCc7CiAJfQogCS8vIHdyaXRlIGFkZHJlc3Mgb2YgZGVzdGluYXRpb24gdG8gc3RydWN0dXJlIG9mIGNhbGxiYWNrIHBhcmFtZXRlcnMKIAkvLyBzbyBjYWxsYmFjayBmdW5jdGlvbiBjYW4gY2hhbmdlIGRhdGEgc3Vic2VxdWVudGx5CkBAIC0yMTIzLDcgKzIwOTAsNyBAQAogLy8gRnVuY3Rpb246ICAgIEVwbE9iZEdldE9iamVjdFNpemUoKQogLy8KIC8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiB0byBnZXQgc2l6ZSBvZiBvYmplY3QKLS8vICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhbiBvYmplY3QgdHlwZSBhbiBmaXhlZCBkYXRhIHR5cGUgKEJZVEUsIFdPUkQsIC4uLikKKy8vICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhbiBvYmplY3QgdHlwZSBhbiBmaXhlZCBkYXRhIHR5cGUgKHU4LCB1MTYsIC4uLikKIC8vICAgICAgICAgICAgICBvciBub24gZml4ZWQgb2JqZWN0IChzdHJpbmcsIGRvbWFpbikuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBkZWNpZGUKIC8vICAgICAgICAgICAgICBpZiBkb3dubG9hZCBkYXRhIGFyZSBzdG9yZWQgdGVtcG9yYXJ5IG9yIG5vdC4gRm9yIG9iamVjdHMgd2l0aCBmaXhlZCBkYXRhIGxlbmd0aAogLy8gICAgICAgICAgICAgIGFuZCB0eXBlcyBhIHZhbHVlIHJhbmdlIGNoZWNraW5nIGNhbiBwcm9jZXNzLgpAQCAtMjE5Miw4ICsyMTU5LDggQEAKIAljYXNlIGtFcGxPYmRUeXBEb21haW46CiAKIAkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcEN1cnJlbnQ7Ci0JCWlmICgodm9pZCBNRU0gKilwRGF0YSAhPSAodm9pZCBNRU0gKilOVUxMKSB7Ci0JCQlEYXRhU2l6ZSA9ICgodEVwbE9iZFZhckVudHJ5IE1FTSAqKSBwRGF0YSktPm1fU2l6ZTsKKwkJaWYgKCh2b2lkICopcERhdGEgIT0gKHZvaWQgKilOVUxMKSB7CisJCQlEYXRhU2l6ZSA9ICgodEVwbE9iZFZhckVudHJ5ICopIHBEYXRhKS0+bV9TaXplOwogCQl9CiAJCWJyZWFrOwogCkBAIC0yMjA1LDIxICsyMTcyLDE5IEBACiAJCS8vIHRoZW4gdGhlIGN1cnJlbnQgcG9pbnRlciBpcyBhbHdheXMgTlVMTC4gVGhlIGZ1bmN0aW9uCiAJCS8vIHJldHVybnMgdGhlIGxlbmd0aCBvZiBkZWZhdWx0IHN0cmluZy4KIAkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcEN1cnJlbnQ7Ci0JCWlmICgodm9pZCBNRU0gKilwRGF0YSAhPSAodm9pZCBNRU0gKilOVUxMKSB7CisJCWlmICgodm9pZCAqKXBEYXRhICE9ICh2b2lkICopTlVMTCkgewogCQkJLy8gVGhlIG1heC4gc2l6ZSBvZiBzdHJpbmdzIGRlZmluZWQgYnkgU1RSSU5HLU1hY3JvIGlzIHN0b3JlZCBpbgogCQkJLy8gdEVwbE9iZFZTdHJpbmcgb2YgY3VycmVudCB2YWx1ZS4KIAkJCS8vICh0eXBlcyB0RXBsT2JkVlN0cmluZywgdEVwbE9iZE9TdHJpbmcgYW5kIHRFcGxPYmRVU3RyaW5nIGhhcyB0aGUgc2FtZSBtZW1iZXJzKQotCQkJRGF0YVNpemUgPSAoKHRFcGxPYmRWU3RyaW5nIE1FTSAqKSBwRGF0YSktPm1fU2l6ZTsKKwkJCURhdGFTaXplID0gKCh0RXBsT2JkVlN0cmluZyAqKSBwRGF0YSktPm1fU2l6ZTsKIAkJfSBlbHNlIHsKIAkJCS8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIG5vdCBkZWNsZWFyZWQuIFRoZSBzdHJpbmcKIAkJCS8vIGlzIGxvY2F0ZWQgaW4gUk9NLCB0aGVyZWZvciB1c2UgZGVmYXVsdCBwb2ludGVyLgogCQkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcERlZmF1bHQ7Ci0JCQlpZiAoKENPTlNUIHZvaWQgUk9NICopcERhdGEgIT0gKENPTlNUIHZvaWQgUk9NICopTlVMTCkgeworCQkJaWYgKChjb25zdCB2b2lkICopcERhdGEgIT0gKGNvbnN0IHZvaWQgKilOVUxMKSB7CiAJCQkJLy8gVGhlIG1heC4gc2l6ZSBvZiBzdHJpbmdzIGRlZmluZWQgYnkgU1RSSU5HLU1hY3JvIGlzIHN0b3JlZCBpbgogCQkJCS8vIHRFcGxPYmRWU3RyaW5nIG9mIGRlZmF1bHQgdmFsdWUuCi0JCQkJRGF0YVNpemUgPQotCQkJCSAgICAoKENPTlNUIHRFcGxPYmRWU3RyaW5nIFJPTSAqKSBwRGF0YSktPgotCQkJCSAgICBtX1NpemU7CisJCQkJRGF0YVNpemUgPSAoKGNvbnN0IHRFcGxPYmRWU3RyaW5nICopcERhdGEpLT5tX1NpemU7CiAJCQl9CiAJCX0KIApAQCAtMjIyOSwyMSArMjE5NCwxOSBAQAogCWNhc2Uga0VwbE9iZFR5cE9TdHJpbmc6CiAKIAkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcEN1cnJlbnQ7Ci0JCWlmICgodm9pZCBNRU0gKilwRGF0YSAhPSAodm9pZCBNRU0gKilOVUxMKSB7CisJCWlmICgodm9pZCAqKXBEYXRhICE9ICh2b2lkICopTlVMTCkgewogCQkJLy8gVGhlIG1heC4gc2l6ZSBvZiBzdHJpbmdzIGRlZmluZWQgYnkgU1RSSU5HLU1hY3JvIGlzIHN0b3JlZCBpbgogCQkJLy8gdEVwbE9iZFZTdHJpbmcgb2YgY3VycmVudCB2YWx1ZS4KIAkJCS8vICh0eXBlcyB0RXBsT2JkVlN0cmluZywgdEVwbE9iZE9TdHJpbmcgYW5kIHRFcGxPYmRVU3RyaW5nIGhhcyB0aGUgc2FtZSBtZW1iZXJzKQotCQkJRGF0YVNpemUgPSAoKHRFcGxPYmRPU3RyaW5nIE1FTSAqKSBwRGF0YSktPm1fU2l6ZTsKKwkJCURhdGFTaXplID0gKCh0RXBsT2JkT1N0cmluZyAqKSBwRGF0YSktPm1fU2l6ZTsKIAkJfSBlbHNlIHsKIAkJCS8vIFRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIG5vdCBkZWNsZWFyZWQuIFRoZSBzdHJpbmcKIAkJCS8vIGlzIGxvY2F0ZWQgaW4gUk9NLCB0aGVyZWZvciB1c2UgZGVmYXVsdCBwb2ludGVyLgogCQkJcERhdGEgPSAodm9pZCAqKXBTdWJJbmRleEVudHJ5X3AtPm1fcERlZmF1bHQ7Ci0JCQlpZiAoKENPTlNUIHZvaWQgUk9NICopcERhdGEgIT0gKENPTlNUIHZvaWQgUk9NICopTlVMTCkgeworCQkJaWYgKChjb25zdCB2b2lkICopcERhdGEgIT0gKGNvbnN0IHZvaWQgKilOVUxMKSB7CiAJCQkJLy8gVGhlIG1heC4gc2l6ZSBvZiBzdHJpbmdzIGRlZmluZWQgYnkgU1RSSU5HLU1hY3JvIGlzIHN0b3JlZCBpbgogCQkJCS8vIHRFcGxPYmRWU3RyaW5nIG9mIGRlZmF1bHQgdmFsdWUuCi0JCQkJRGF0YVNpemUgPQotCQkJCSAgICAoKENPTlNUIHRFcGxPYmRPU3RyaW5nIFJPTSAqKSBwRGF0YSktPgotCQkJCSAgICBtX1NpemU7CisJCQkJRGF0YVNpemUgPSAoKGNvbnN0IHRFcGxPYmRPU3RyaW5nICopcERhdGEpLT5tX1NpemU7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC0yMzY2LDcgKzIzMjksNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkR2V0VmFyRW50cnkodEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJpbmRleEVudHJ5X3AsCi0JCQkJICAgIHRFcGxPYmRWYXJFbnRyeSBNRU0gKiogcHBWYXJFbnRyeV9wKQorCQkJCSAgICB0RXBsT2JkVmFyRW50cnkgKipwcFZhckVudHJ5X3ApCiB7CiAKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxPYmRWYXJFbnRyeU5vdEV4aXN0OwpAQCAtMjM3OCwxMyArMjM0MSw5IEBACiAJaWYgKChwU3ViaW5kZXhFbnRyeV9wLT5tX0FjY2VzcyAmIGtFcGxPYmRBY2NWYXIpICE9IDApIHsKIAkJLy8gY2hlY2sgaWYgb2JqZWN0IGlzIGFuIGFycmF5CiAJCWlmICgocFN1YmluZGV4RW50cnlfcC0+bV9BY2Nlc3MgJiBrRXBsT2JkQWNjQXJyYXkpICE9IDApIHsKLQkJCSpwcFZhckVudHJ5X3AgPQotCQkJICAgICYoKHRFcGxPYmRWYXJFbnRyeSBNRU0gKikgcFN1YmluZGV4RW50cnlfcC0+Ci0JCQkgICAgICBtX3BDdXJyZW50KVtwU3ViaW5kZXhFbnRyeV9wLT5tX3VpU3ViSW5kZXggLSAxXTsKKwkJCSpwcFZhckVudHJ5X3AgPSAmKCh0RXBsT2JkVmFyRW50cnkgKilwU3ViaW5kZXhFbnRyeV9wLT5tX3BDdXJyZW50KVtwU3ViaW5kZXhFbnRyeV9wLT5tX3VpU3ViSW5kZXggLSAxXTsKIAkJfSBlbHNlIHsKLQkJCSpwcFZhckVudHJ5X3AgPQotCQkJICAgICh0RXBsT2JkVmFyRW50cnkgTUVNICopIHBTdWJpbmRleEVudHJ5X3AtPgotCQkJICAgIG1fcEN1cnJlbnQ7CisJCQkqcHBWYXJFbnRyeV9wID0gKHRFcGxPYmRWYXJFbnRyeSAqKXBTdWJpbmRleEVudHJ5X3AtPm1fcEN1cnJlbnQ7CiAJCX0KIAogCQlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKQEAgLTI0MjAsNyArMjM3OSw3IEBACiB7CiAKIAl0RXBsT2JkRW50cnlQdHIgcE9iZEVudHJ5OwotCXRFcGxPYmRDYlBhcmFtIE1FTSBDYlBhcmFtOworCXRFcGxPYmRDYlBhcmFtIENiUGFyYW07CiAJdEVwbEtlcm5lbCBSZXQ7CiAKIAkvLyBjaGVjayBmb3IgYWxsIEFQSSBmdW5jdGlvbiBpZiBpbnN0YW5jZSBpcyB2YWxpZApAQCAtMjQ3NCwxNiArMjQzMywxNiBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICBwU3ViSW5kZXhFbnRyeV9wCiAvLwotLy8gUmV0dXJuOiAgICAgIHZvaWQgTUVNKgorLy8gUmV0dXJuOiAgICAgIHZvaWQgKgogLy8KIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyB2b2lkIE1FTSAqRXBsT2JkR2V0T2JqZWN0Q3VycmVudFB0cih0RXBsT2JkU3ViRW50cnlQdHIgcFN1YkluZGV4RW50cnlfcCkKK3N0YXRpYyB2b2lkICpFcGxPYmRHZXRPYmplY3RDdXJyZW50UHRyKHRFcGxPYmRTdWJFbnRyeVB0ciBwU3ViSW5kZXhFbnRyeV9wKQogewogCi0Jdm9pZCBNRU0gKnBEYXRhOworCXZvaWQgKnBEYXRhOwogCXVuc2lnbmVkIGludCB1aUFycmF5SW5kZXg7CiAJdEVwbE9iZFNpemUgU2l6ZTsKIApAQCAtMjUwMCwyNCArMjQ1OSwyMSBAQAogCQkJfSBlbHNlIHsKIAkJCQlTaXplID0gRXBsT2JkR2V0T2JqZWN0U2l6ZShwU3ViSW5kZXhFbnRyeV9wKTsKIAkJCX0KLQkJCXBEYXRhID0gKChCWVRFIE1FTSAqKSBwRGF0YSkgKyAoU2l6ZSAqIHVpQXJyYXlJbmRleCk7CisJCQlwRGF0YSA9ICgodTggKikgcERhdGEpICsgKFNpemUgKiB1aUFycmF5SW5kZXgpOwogCQl9CiAJCS8vIGNoZWNrIGlmIFZhckVudHJ5CiAJCWlmICgocFN1YkluZGV4RW50cnlfcC0+bV9BY2Nlc3MgJiBrRXBsT2JkQWNjVmFyKSAhPSAwKSB7CiAJCQkvLyBUaGUgZGF0YSBwb2ludGVyIGlzIHN0b3JlZCBpbiBWYXJFbnRyeS0+cERhdGEKLQkJCXBEYXRhID0gKCh0RXBsT2JkVmFyRW50cnkgTUVNICopIHBEYXRhKS0+bV9wRGF0YTsKKwkJCXBEYXRhID0gKCh0RXBsT2JkVmFyRW50cnkgKikgcERhdGEpLT5tX3BEYXRhOwogCQl9CiAJCS8vIHRoZSBkZWZhdWx0IHBvaW50ZXIgaXMgc3RvcmVkIGZvciBzdHJpbmdzIGluIHRFcGxPYmRWU3RyaW5nCiAJCWVsc2UgaWYgKChwU3ViSW5kZXhFbnRyeV9wLT5tX1R5cGUgPT0ga0VwbE9iZFR5cFZTdHJpbmcpCS8qIHx8CiAJCQkJCQkJCQkJICAgKHBTdWJJbmRleEVudHJ5X3AtPm1fVHlwZSA9PSBrRXBsT2JkVHlwVVN0cmluZykgICAgKi8KIAkJCSApIHsKLQkJCXBEYXRhID0KLQkJCSAgICAodm9pZCBNRU0gKikoKHRFcGxPYmRWU3RyaW5nIE1FTSAqKSBwRGF0YSktPgotCQkJICAgIG1fcFN0cmluZzsKKwkJCXBEYXRhID0gKHZvaWQgKikoKHRFcGxPYmRWU3RyaW5nICopcERhdGEpLT5tX3BTdHJpbmc7CiAJCX0gZWxzZSBpZiAocFN1YkluZGV4RW50cnlfcC0+bV9UeXBlID09IGtFcGxPYmRUeXBPU3RyaW5nKSB7CiAJCQlwRGF0YSA9Ci0JCQkgICAgKHZvaWQgTUVNICopKCh0RXBsT2JkT1N0cmluZyBNRU0gKikgcERhdGEpLT4KLQkJCSAgICBtX3BTdHJpbmc7CisJCQkgICAgKHZvaWQgKikoKHRFcGxPYmRPU3RyaW5nICopcERhdGEpLT5tX3BTdHJpbmc7CiAJCX0KIAl9CiAKQEAgLTI1NDEsNyArMjQ5Nyw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkR2V0SW5kZXhJbnRlcm4odEVwbE9iZEluaXRQYXJhbSBNRU0gKiBwSW5pdFBhcmFtX3AsCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxPYmRHZXRJbmRleEludGVybih0RXBsT2JkSW5pdFBhcmFtICpwSW5pdFBhcmFtX3AsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCiAJCQkJICAgICAgIHRFcGxPYmRFbnRyeVB0ciAqIHBwT2JkRW50cnlfcCkKIHsKQEAgLTI3NjIsOSArMjcxOCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiAoRVBMX09CRF9VU0VfU1RPUkVfUkVTVE9SRSAhPSBGQUxTRSkKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQwotRXBsT2JkU2V0U3RvcmVMb2FkT2JqQ2FsbGJhY2soRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCSAgICAgIHRFcGxPYmRTdG9yZUxvYWRPYmpDYWxsYmFjayBmcENhbGxiYWNrX3ApCit0RXBsS2VybmVsIEVwbE9iZFNldFN0b3JlTG9hZE9iakNhbGxiYWNrKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHRFcGxPYmRTdG9yZUxvYWRPYmpDYWxsYmFjayBmcENhbGxiYWNrX3ApCiB7CiAKIAlFUExfTUNPX0NIRUNLX0lOU1RBTkNFX1NUQVRFKCk7CkBAIC0yODAyLDI2ICsyNzU2LDI2IEBACiAJdEVwbE9iZFN1YkVudHJ5UHRyIHBTdWJJbmRleDsKIAl1bnNpZ25lZCBpbnQgblN1YkluZGV4Q291bnQ7CiAJdEVwbE9iZEFjY2VzcyBBY2Nlc3M7Ci0Jdm9pZCBNRU0gKnBEc3REYXRhOworCXZvaWQgKnBEc3REYXRhOwogCXZvaWQgKnBEZWZhdWx0OwogCXRFcGxPYmRTaXplIE9ialNpemU7CiAJdEVwbEtlcm5lbCBSZXQ7Ci0JdEVwbE9iZENiU3RvcmVQYXJhbSBNRU0gQ2JTdG9yZTsKLQl0RXBsT2JkVmFyRW50cnkgTUVNICpwVmFyRW50cnk7CisJdEVwbE9iZENiU3RvcmVQYXJhbSBDYlN0b3JlOworCXRFcGxPYmRWYXJFbnRyeSAqcFZhckVudHJ5OwogCiAJQVNTRVJUKHBPYmRFbnR5X3AgIT0gTlVMTCk7CiAKIAlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAogCS8vIHByZXBhcmUgc3RydWN0dXJlIGZvciBTVE9SRSBSRVNUT1JFIGNhbGxiYWNrIGZ1bmN0aW9uCi0JQ2JTdG9yZS5tX2JDdXJyZW50T2RQYXJ0ID0gKEJZVEUpIEN1cnJlbnRPZFBhcnRfcDsKKwlDYlN0b3JlLm1fYkN1cnJlbnRPZFBhcnQgPSAodTgpIEN1cnJlbnRPZFBhcnRfcDsKIAlDYlN0b3JlLm1fcERhdGEgPSBOVUxMOwogCUNiU3RvcmUubV9PYmpTaXplID0gMDsKIAogCS8vIGNvbW1hbmQgb2YgZmlyc3QgYWN0aW9uIGRlcGVuZHMgb24gZGlyZWN0aW9uIHRvIGFjY2VzcwogI2lmIChFUExfT0JEX1VTRV9TVE9SRV9SRVNUT1JFICE9IEZBTFNFKQogCWlmIChEaXJlY3Rpb25fcCA9PSBrRXBsT2JkRGlyTG9hZCkgewotCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1PcGVuUmVhZDsKKwkJQ2JTdG9yZS5tX2JDb21tYW5kID0gKHU4KSBrRXBsT2JkQ29tbU9wZW5SZWFkOwogCiAJCS8vIGNhbGwgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHByZXZpb3VzIGNvbW1hbmQKIAkJUmV0ID0gRXBsT2JkQ2FsbFN0b3JlQ2FsbGJhY2soRVBMX01DT19JTlNUQU5DRV9QVFJfICYgQ2JTdG9yZSk7CkBAIC0yODI5LDkgKzI3ODMsOSBAQAogCQkJZ290byBFeGl0OwogCQl9CiAJCS8vIHNldCBjb21tYW5kIGZvciBpbmRleCBhbmQgc3ViaW5kZXggbG9vcAotCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1SZWFkT2JqOworCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAodTgpIGtFcGxPYmRDb21tUmVhZE9iajsKIAl9IGVsc2UgaWYgKERpcmVjdGlvbl9wID09IGtFcGxPYmREaXJTdG9yZSkgewotCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1PcGVuV3JpdGU7CisJCUNiU3RvcmUubV9iQ29tbWFuZCA9ICh1OCkga0VwbE9iZENvbW1PcGVuV3JpdGU7CiAKIAkJLy8gY2FsbCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgcHJldmlvdXMgY29tbWFuZAogCQlSZXQgPSBFcGxPYmRDYWxsU3RvcmVDYWxsYmFjayhFUExfTUNPX0lOU1RBTkNFX1BUUl8gJiBDYlN0b3JlKTsKQEAgLTI4MzksNyArMjc5Myw3IEBACiAJCQlnb3RvIEV4aXQ7CiAJCX0KIAkJLy8gc2V0IGNvbW1hbmQgZm9yIGluZGV4IGFuZCBzdWJpbmRleCBsb29wCi0JCUNiU3RvcmUubV9iQ29tbWFuZCA9IChCWVRFKSBrRXBsT2JkQ29tbVdyaXRlT2JqOworCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAodTgpIGtFcGxPYmRDb21tV3JpdGVPYmo7CiAJfQogI2VuZGlmIC8vIChFUExfT0JEX1VTRV9TVE9SRV9SRVNUT1JFICE9IEZBTFNFKQogCkBAIC0yODkwLDcgKzI4NDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcGxPYmRJbml0VmFyRW50cnkgKCh0RXBsT2JkVmFyRW50cnkgTUVNKikgKCgoQllURSBNRU0qKSBwU3ViSW5kZXgtPm1fcEN1cnJlbnQpICsgKHNpemVvZiAodEVwbE9iZFZhckVudHJ5KSAqIHBTdWJJbmRleC0+bV91aVN1YkluZGV4KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVwbE9iZEluaXRWYXJFbnRyeSAoKHRFcGxPYmRWYXJFbnRyeSAqKSAoKCh1OCAqKSBwU3ViSW5kZXgtPm1fcEN1cnJlbnQpICsgKHNpemVvZiAodEVwbE9iZFZhckVudHJ5KSAqIHBTdWJJbmRleC0+bV91aVN1YkluZGV4KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3ViSW5kZXgtPm1fVHlwZSwgT2JqU2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogKi8KQEAgLTI5MTEsMjkgKzI4NjUsMTcgQEAKIAkJCQkJCSAgICBwU3ViSW5kZXgtPm1fcEN1cnJlbnQ7CiAJCQkJCQlpZiAocERzdERhdGEgIT0gTlVMTCkgewogCQkJCQkJCS8vIDA4LWRlYy0yMDA0OiBjb2RlIG9wdGltaXphdGlvbiAhISEKLQkJCQkJCQkvLyAgICAgICAgICAgICAgZW50cmllcyAoKHRFcGxPYmRWU3RyaW5nRGVmIFJPTSopIHBTdWJJbmRleC0+bV9wRGVmYXVsdCktPm1fcFN0cmluZwotCQkJCQkJCS8vICAgICAgICAgICAgICBhbmQgKCh0RXBsT2JkVlN0cmluZ0RlZiBST00qKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX1NpemUgd2VyZSByZWFkCisJCQkJCQkJLy8gICAgICAgICAgICAgIGVudHJpZXMgKCh0RXBsT2JkVlN0cmluZ0RlZiopIHBTdWJJbmRleC0+bV9wRGVmYXVsdCktPm1fcFN0cmluZworCQkJCQkJCS8vICAgICAgICAgICAgICBhbmQgKCh0RXBsT2JkVlN0cmluZ0RlZiopIHBTdWJJbmRleC0+bV9wRGVmYXVsdCktPm1fU2l6ZSB3ZXJlIHJlYWQKIAkJCQkJCQkvLyAgICAgICAgICAgICAgdHdpY2UuIHRoYXRzIG5vdCBuZWNlc3NhcnkhCiAKIAkJCQkJCQkvLyBGb3IgY29weWluZyBkYXRhIHdlIGhhdmUgdG8gc2V0IHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyIHRvIHRoZSByZWFsIFJBTSBzdHJpbmcuIFRoaXMKIAkJCQkJCQkvLyBwb2ludGVyIHRvIFJBTSBzdHJpbmcgaXMgbG9jYXRlZCBpbiBkZWZhdWx0IHN0cmluZyBpbmZvIHN0cnVjdHVyZS4gKHRyYW5zbGF0ZWQgci5kLikKLQkJCQkJCQlwRHN0RGF0YSA9Ci0JCQkJCQkJICAgICh2b2lkIE1FTQotCQkJCQkJCSAgICAgKikoKHRFcGxPYmRWU3RyaW5nRGVmIFJPTSAqKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX3BTdHJpbmc7Ci0JCQkJCQkJT2JqU2l6ZSA9Ci0JCQkJCQkJICAgICgodEVwbE9iZFZTdHJpbmdEZWYKLQkJCQkJCQkgICAgICBST00gKikgcFN1YkluZGV4LT4KLQkJCQkJCQkgICAgIG1fcERlZmF1bHQpLT4KLQkJCQkJCQkgICAgbV9TaXplOworCQkJCQkJCXBEc3REYXRhID0gKHZvaWQgKikoKHRFcGxPYmRWU3RyaW5nRGVmKikgcFN1YkluZGV4LT5tX3BEZWZhdWx0KS0+bV9wU3RyaW5nOworCQkJCQkJCU9ialNpemUgPSAoKHRFcGxPYmRWU3RyaW5nRGVmICopcFN1YkluZGV4LT5tX3BEZWZhdWx0KS0+bV9TaXplOwogCi0JCQkJCQkJKCh0RXBsT2JkVlN0cmluZyBNRU0gKikKLQkJCQkJCQkgcFN1YkluZGV4LT4KLQkJCQkJCQkgbV9wQ3VycmVudCktPgotCQkJCSAgICAgbV9wU3RyaW5nID0gcERzdERhdGE7Ci0JCQkJCQkJKCh0RXBsT2JkVlN0cmluZyBNRU0gKikKLQkJCQkJCQkgcFN1YkluZGV4LT4KLQkJCQkJCQkgbV9wQ3VycmVudCktPm1fU2l6ZSA9Ci0JCQkJICAgICBPYmpTaXplOworCQkJCQkJCSgodEVwbE9iZFZTdHJpbmcgKilwU3ViSW5kZXgtPm1fcEN1cnJlbnQpLT5tX3BTdHJpbmcgPSBwRHN0RGF0YTsKKwkJCQkJCQkoKHRFcGxPYmRWU3RyaW5nICopcFN1YkluZGV4LT5tX3BDdXJyZW50KS0+bV9TaXplID0gT2JqU2l6ZTsKIAkJCQkJCX0KIAogCQkJCQl9IGVsc2UgaWYgKHBTdWJJbmRleC0+bV9UeXBlID09CkBAIC0yOTQyLDI5ICsyODg0LDE3IEBACiAJCQkJCQkgICAgcFN1YkluZGV4LT5tX3BDdXJyZW50OwogCQkJCQkJaWYgKHBEc3REYXRhICE9IE5VTEwpIHsKIAkJCQkJCQkvLyAwOC1kZWMtMjAwNDogY29kZSBvcHRpbWl6YXRpb24gISEhCi0JCQkJCQkJLy8gICAgICAgICAgICAgIGVudHJpZXMgKCh0RXBsT2JkT1N0cmluZ0RlZiBST00qKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX3BTdHJpbmcKLQkJCQkJCQkvLyAgICAgICAgICAgICAgYW5kICgodEVwbE9iZE9TdHJpbmdEZWYgUk9NKikgcFN1YkluZGV4LT5tX3BEZWZhdWx0KS0+bV9TaXplIHdlcmUgcmVhZAorCQkJCQkJCS8vICAgICAgICAgICAgICBlbnRyaWVzICgodEVwbE9iZE9TdHJpbmdEZWYqKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX3BTdHJpbmcKKwkJCQkJCQkvLyAgICAgICAgICAgICAgYW5kICgodEVwbE9iZE9TdHJpbmdEZWYqKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX1NpemUgd2VyZSByZWFkCiAJCQkJCQkJLy8gICAgICAgICAgICAgIHR3aWNlLiB0aGF0cyBub3QgbmVjZXNzYXJ5IQogCiAJCQkJCQkJLy8gRm9yIGNvcHlpbmcgZGF0YSB3ZSBoYXZlIHRvIHNldCB0aGUgZGVzdGluYXRpb24gcG9pbnRlciB0byB0aGUgcmVhbCBSQU0gc3RyaW5nLiBUaGlzCiAJCQkJCQkJLy8gcG9pbnRlciB0byBSQU0gc3RyaW5nIGlzIGxvY2F0ZWQgaW4gZGVmYXVsdCBzdHJpbmcgaW5mbyBzdHJ1Y3R1cmUuICh0cmFuc2xhdGVkIHIuZC4pCi0JCQkJCQkJcERzdERhdGEgPQotCQkJCQkJCSAgICAodm9pZCBNRU0KLQkJCQkJCQkgICAgICopKCh0RXBsT2JkT1N0cmluZ0RlZiBST00gKikgcFN1YkluZGV4LT5tX3BEZWZhdWx0KS0+bV9wU3RyaW5nOwotCQkJCQkJCU9ialNpemUgPQotCQkJCQkJCSAgICAoKHRFcGxPYmRPU3RyaW5nRGVmCi0JCQkJCQkJICAgICAgUk9NICopIHBTdWJJbmRleC0+Ci0JCQkJCQkJICAgICBtX3BEZWZhdWx0KS0+Ci0JCQkJCQkJICAgIG1fU2l6ZTsKKwkJCQkJCQlwRHN0RGF0YSA9ICh2b2lkICopKCh0RXBsT2JkT1N0cmluZ0RlZiAqKSBwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX3BTdHJpbmc7CisJCQkJCQkJT2JqU2l6ZSA9ICgodEVwbE9iZE9TdHJpbmdEZWYgKilwU3ViSW5kZXgtPm1fcERlZmF1bHQpLT5tX1NpemU7CiAKLQkJCQkJCQkoKHRFcGxPYmRPU3RyaW5nIE1FTSAqKQotCQkJCQkJCSBwU3ViSW5kZXgtPgotCQkJCQkJCSBtX3BDdXJyZW50KS0+Ci0JCQkJICAgICBtX3BTdHJpbmcgPSBwRHN0RGF0YTsKLQkJCQkJCQkoKHRFcGxPYmRPU3RyaW5nIE1FTSAqKQotCQkJCQkJCSBwU3ViSW5kZXgtPgotCQkJCQkJCSBtX3BDdXJyZW50KS0+bV9TaXplID0KLQkJCQkgICAgIE9ialNpemU7CisJCQkJCQkJKCh0RXBsT2JkT1N0cmluZyAqKXBTdWJJbmRleC0+bV9wQ3VycmVudCktPm1fcFN0cmluZyA9IHBEc3REYXRhOworCQkJCQkJCSgodEVwbE9iZE9TdHJpbmcgKilwU3ViSW5kZXgtPm1fcEN1cnJlbnQpLT5tX1NpemUgPSBPYmpTaXplOwogCQkJCQkJfQogCiAJCQkJCX0KQEAgLTMwNjksMTEgKzI5OTksMTEgQEAKICNpZiAoRVBMX09CRF9VU0VfU1RPUkVfUkVTVE9SRSAhPSBGQUxTRSkKIAllbHNlIHsKIAkJaWYgKERpcmVjdGlvbl9wID09IGtFcGxPYmREaXJMb2FkKSB7Ci0JCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1DbG9zZVJlYWQ7CisJCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAodTgpIGtFcGxPYmRDb21tQ2xvc2VSZWFkOwogCQl9IGVsc2UgaWYgKERpcmVjdGlvbl9wID09IGtFcGxPYmREaXJTdG9yZSkgewotCQkJQ2JTdG9yZS5tX2JDb21tYW5kID0gKEJZVEUpIGtFcGxPYmRDb21tQ2xvc2VXcml0ZTsKKwkJCUNiU3RvcmUubV9iQ29tbWFuZCA9ICh1OCkga0VwbE9iZENvbW1DbG9zZVdyaXRlOwogCQl9IGVsc2UgaWYgKERpcmVjdGlvbl9wID09IGtFcGxPYmREaXJSZXN0b3JlKSB7Ci0JCQlDYlN0b3JlLm1fYkNvbW1hbmQgPSAoQllURSkga0VwbE9iZENvbW1DbGVhcjsKKwkJCUNiU3RvcmUubV9iQ29tbWFuZCA9ICh1OCkga0VwbE9iZENvbW1DbGVhcjsKIAkJfSBlbHNlIHsKIAkJCWdvdG8gRXhpdDsKIAkJfQpAQCAtMzEwNCw3ICszMDM0LDcgQEAKIC8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHZvaWQgRXBsT2JkQ29weU9iamVjdERhdGEodm9pZCBNRU0gKiBwRHN0RGF0YV9wLAorc3RhdGljIHZvaWQgRXBsT2JkQ29weU9iamVjdERhdGEodm9pZCAqcERzdERhdGFfcCwKIAkJCQkgdm9pZCAqcFNyY0RhdGFfcCwKIAkJCQkgdEVwbE9iZFNpemUgT2JqU2l6ZV9wLCB0RXBsT2JkVHlwZSBPYmpUeXBlX3ApCiB7CkBAIC0zMTM1LDcgKzMwNjUsNyBAQAogCQkJRVBMX01FTUNQWShwRHN0RGF0YV9wLCBwU3JjRGF0YV9wLCBPYmpTaXplX3ApOwogCiAJCQlpZiAoT2JqVHlwZV9wID09IGtFcGxPYmRUeXBWU3RyaW5nKSB7Ci0JCQkJKChjaGFyIE1FTSAqKXBEc3REYXRhX3ApW1N0clNpemVdID0gJ1wwJzsKKwkJCQkoKGNoYXIgKilwRHN0RGF0YV9wKVtTdHJTaXplXSA9ICdcMCc7CiAJCQl9CiAJCX0KIAl9CkBAIC0zMTk2LDcgKzMxMjYsNyBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmIChFUExfT0JEX1VTRV9TVE9SRV9SRVNUT1JFICE9IEZBTFNFKQogc3RhdGljIHRFcGxLZXJuZWwgRXBsT2JkQ2FsbFN0b3JlQ2FsbGJhY2soRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJICB0RXBsT2JkQ2JTdG9yZVBhcmFtIE1FTSAqCisJCQkJCSAgdEVwbE9iZENiU3RvcmVQYXJhbSAqCiAJCQkJCSAgcENiU3RvcmVQYXJhbV9wKQogewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZC5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmQuaAppbmRleCA4OGNjMTFlLi42YmI1YTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkLmgKQEAgLTY4LDExICs2OCwxMSBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiRXBsSW5jLmgiCi0KICNpZm5kZWYgX0VQTE9CRF9IXwogI2RlZmluZSBfRVBMT0JEX0hfCiAKKyNpbmNsdWRlICJFcGxJbmMuaCIKKwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gZGVmaW5lcwogLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjA2LDcgKzIwNiw3IEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC8vIHR5cGVzIG9mIG9iamVjdHMgaW4gb2JqZWN0IGRpY3Rpb25hcnkKLS8vIERTLTMwMSBkZWZpbmVzIHRoZXNlIHR5cGVzIGFzIFdPUkQKKy8vIERTLTMwMSBkZWZpbmVzIHRoZXNlIHR5cGVzIGFzIHUxNgogdHlwZWRlZiBlbnVtIHsKIC8vIHR5cGVzIHdoaWNoIGFyZSBhbHdheXMgc3VwcG9ydGVkCiAJa0VwbE9iZFR5cEJvb2wgPSAweDAwMDEsCkBAIC0yNTUsMTUgKzI1NSwxNSBAQAogdHlwZWRlZiBzaWduZWQgbG9uZyB0RXBsT2JkSW50ZWdlcjI0OwkvLyAwMDEwCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdEVwbE9iZFVuc2lnbmVkMjQ7CS8vIDAwMTYKIAotdHlwZWRlZiBzaWduZWQgUVdPUkQgdEVwbE9iZEludGVnZXI0MDsJLy8gMDAxMgotdHlwZWRlZiBzaWduZWQgUVdPUkQgdEVwbE9iZEludGVnZXI0ODsJLy8gMDAxMwotdHlwZWRlZiBzaWduZWQgUVdPUkQgdEVwbE9iZEludGVnZXI1NjsJLy8gMDAxNAotdHlwZWRlZiBzaWduZWQgUVdPUkQgdEVwbE9iZEludGVnZXI2NDsJLy8gMDAxNQordHlwZWRlZiBzNjQgdEVwbE9iZEludGVnZXI0MDsJLy8gMDAxMgordHlwZWRlZiBzNjQgdEVwbE9iZEludGVnZXI0ODsJLy8gMDAxMwordHlwZWRlZiBzNjQgdEVwbE9iZEludGVnZXI1NjsJLy8gMDAxNAordHlwZWRlZiBzNjQgdEVwbE9iZEludGVnZXI2NDsJLy8gMDAxNQogCi10eXBlZGVmIHVuc2lnbmVkIFFXT1JEIHRFcGxPYmRVbnNpZ25lZDQwOwkvLyAwMDE4Ci10eXBlZGVmIHVuc2lnbmVkIFFXT1JEIHRFcGxPYmRVbnNpZ25lZDQ4OwkvLyAwMDE5Ci10eXBlZGVmIHVuc2lnbmVkIFFXT1JEIHRFcGxPYmRVbnNpZ25lZDU2OwkvLyAwMDFBCi10eXBlZGVmIHVuc2lnbmVkIFFXT1JEIHRFcGxPYmRVbnNpZ25lZDY0OwkvLyAwMDFCCit0eXBlZGVmIHU2NCB0RXBsT2JkVW5zaWduZWQ0MDsJLy8gMDAxOAordHlwZWRlZiB1NjQgdEVwbE9iZFVuc2lnbmVkNDg7CS8vIDAwMTkKK3R5cGVkZWYgdTY0IHRFcGxPYmRVbnNpZ25lZDU2OwkvLyAwMDFBCit0eXBlZGVmIHU2NCB0RXBsT2JkVW5zaWduZWQ2NDsJLy8gMDAxQgogCiB0eXBlZGVmIGRvdWJsZSB0RXBsT2JkUmVhbDY0OwkvLyAwMDExCiAKQEAgLTI4MywyMiArMjgzLDIxIEBACiAJa1ZhclZhbGlkQWxsID0gMHgwMwkvLyBjdXJyZW50bHkgb25seSBzaXplIGFuZCBkYXRhIGFyZSBpbXBsZW1lbnRlZCBhbmQgdXNlZAogfSB0RXBsVmFyUGFyYW1WYWxpZDsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyBST00gKiB0RXBsVmFyQ2FsbGJhY2spIChDQ01fREVDTF9JTlNUQU5DRV9IRExfCi0JCQkJCQkgIHZvaWQgKnBQYXJhbV9wKTsKK3R5cGVkZWYgdEVwbEtlcm5lbCgqdEVwbFZhckNhbGxiYWNrKSAoQ0NNX0RFQ0xfSU5TVEFOQ0VfSERMXyB2b2lkICpwUGFyYW1fcCk7CiAKIHR5cGVkZWYgc3RydWN0IHsKIAl0RXBsVmFyUGFyYW1WYWxpZCBtX1ZhbGlkRmxhZzsKIAl1bnNpZ25lZCBpbnQgbV91aUluZGV4OwogCXVuc2lnbmVkIGludCBtX3VpU3ViaW5kZXg7CiAJdEVwbE9iZFNpemUgbV9TaXplOwotCXZvaWQgTUVNICptX3BEYXRhOworCXZvaWQgKm1fcERhdGE7CiAvLyAgICB0RXBsVmFyQ2FsbGJhY2sgICAgIG1fZnBDYWxsYmFjazsKIC8vICAgIHZvaWQgKiAgICAgICBtX3BBcmc7CiAKIH0gdEVwbFZhclBhcmFtOwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0Jdm9pZCBNRU0gKm1fcERhdGE7CisJdm9pZCAqbV9wRGF0YTsKIAl0RXBsT2JkU2l6ZSBtX1NpemU7CiAvKgogICAgICNpZiAoRVBMX1BET19VU0VfU1RBVElDX01BUFBJTkcgPT0gRkFMU0UpCkBAIC0zMTAsNyArMzA5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXRFcGxPYmRTaXplIG1fU2l6ZTsKLQlCWVRFICptX3BTdHJpbmc7CisJdTggKm1fcFN0cmluZzsKIAogfSB0RXBsT2JkT1N0cmluZzsJCS8vIDAwMEMKIApAQCAtMzI4LDggKzMyNyw4IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKIAl0RXBsT2JkU2l6ZSBtX1NpemU7Ci0JQllURSAqbV9wRGVmU3RyaW5nOwkvLyAkJCQgZC5rLiBpdCBpcyB1bnVzZWQsIHNvIHdlIGNvdWxkIGRlbGV0ZSBpdAotCUJZVEUgKm1fcFN0cmluZzsKKwl1OCAqbV9wRGVmU3RyaW5nOwkvLyAkJCQgZC5rLiBpdCBpcyB1bnVzZWQsIHNvIHdlIGNvdWxkIGRlbGV0ZSBpdAorCXU4ICptX3BTdHJpbmc7CiAKIH0gdEVwbE9iZE9TdHJpbmdEZWY7CiAKQEAgLTM1NCw3ICszNTMsNyBAQAogCXRFcGxPYmRUeXBlIG1fVHlwZTsKIAl0RXBsT2JkQWNjZXNzIG1fQWNjZXNzOwogCXZvaWQgKm1fcERlZmF1bHQ7Ci0Jdm9pZCBNRU0gKm1fcEN1cnJlbnQ7CS8vIHBvaW50cyBhbHdheXMgdG8gUkFNCisJdm9pZCAqbV9wQ3VycmVudDsJLy8gcG9pbnRzIGFsd2F5cyB0byBSQU0KIAogfSB0RXBsT2JkU3ViRW50cnk7CiAKQEAgLTM3MSwxNCArMzcwLDEyIEBACiAJdW5zaWduZWQgaW50IG1fdWlJbmRleDsKIAl1bnNpZ25lZCBpbnQgbV91aVN1YkluZGV4OwogCXZvaWQgKm1fcEFyZzsKLQlEV09SRCBtX2R3QWJvcnRDb2RlOworCXUzMiBtX2R3QWJvcnRDb2RlOwogCiB9IHRFcGxPYmRDYlBhcmFtOwogCiAvLyBkZWZpbmUgdHlwZSBmb3IgY2FsbGJhY2sgZnVuY3Rpb246IHBQYXJhbV9wIHBvaW50cyB0byB0RXBsT2JkQ2JQYXJhbQotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyBST00gKiB0RXBsT2JkQ2FsbGJhY2spIChDQ01fREVDTF9JTlNUQU5DRV9IRExfCi0JCQkJCQkgIHRFcGxPYmRDYlBhcmFtIE1FTSAqCi0JCQkJCQkgIHBQYXJhbV9wKTsKK3R5cGVkZWYgdEVwbEtlcm5lbCgqdEVwbE9iZENhbGxiYWNrKSAoQ0NNX0RFQ0xfSU5TVEFOQ0VfSERMXyB0RXBsT2JkQ2JQYXJhbSAqcFBhcmFtX3ApOwogCiAvLyBkbyBub3QgY2hhbmdlIHRoZSBvcmRlciBmb3IgdGhpcyBzdHJ1Y3QhISEKIApAQCAtNDE3LDE5ICs0MTQsMTQgQEAKIHR5cGVkZWYgc3RydWN0IHsKIAl0RXBsT2JkQ29tbWFuZCBtX2JDb21tYW5kOwogCXRFcGxPYmRQYXJ0IG1fYkN1cnJlbnRPZFBhcnQ7Ci0Jdm9pZCBNRU0gKm1fcERhdGE7CisJdm9pZCAqbV9wRGF0YTsKIAl0RXBsT2JkU2l6ZSBtX09ialNpemU7CiAKIH0gdEVwbE9iZENiU3RvcmVQYXJhbTsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyBST00gKiB0SW5pdFRhYkVudHJ5Q2FsbGJhY2spICh2b2lkIE1FTSAqIHBUYWJFbnRyeV9wLAotCQkJCQkJCXVuc2lnbmVkIGludAotCQkJCQkJCXVpT2JqSW5kZXhfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKnRJbml0VGFiRW50cnlDYWxsYmFjaykgKHZvaWQgKnBUYWJFbnRyeV9wLCB1bnNpZ25lZCBpbnQgdWlPYmpJbmRleF9wKTsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyBST00gKgotCQkgICB0RXBsT2JkU3RvcmVMb2FkT2JqQ2FsbGJhY2spIChDQ01fREVDTF9JTlNUQU5DRV9IRExfCi0JCQkJCQkgdEVwbE9iZENiU3RvcmVQYXJhbSBNRU0gKgotCQkJCQkJIHBDYlN0b3JlUGFyYW1fcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKnRFcGxPYmRTdG9yZUxvYWRPYmpDYWxsYmFjaykgKENDTV9ERUNMX0lOU1RBTkNFX0hETF8gdEVwbE9iZENiU3RvcmVQYXJhbSAqcENiU3RvcmVQYXJhbV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gdGhpcyBzdHVjdHVyZSBpcyB1c2VkIGZvciBwYXJhbWV0ZXJzIGZvciBmdW5jdGlvbiBPYmRJbml0TW9kdWxlVGFiKCkKQEAgLTQzOCw4ICs0MzAsOCBAQAogCXVuc2lnbmVkIGludCBtX3VpTG93ZXJPYmpJbmRleDsJLy8gbG93ZXIgbGltaXQgb2YgT2JqSW5kZXgKIAl1bnNpZ25lZCBpbnQgbV91aVVwcGVyT2JqSW5kZXg7CS8vIHVwcGVyIGxpbWl0IG9mIE9iakluZGV4CiAJdEluaXRUYWJFbnRyeUNhbGxiYWNrIG1fZnBJbml0VGFiRW50cnk7CS8vIHdpbGwgYmUgY2FsbGVkIGlmIE9iakluZGV4IHdhcyBmb3VuZAotCXZvaWQgTUVNICptX3BUYWJCYXNlOwkvLyBiYXNlIGFkZHJlc3Mgb2YgdGFibGUKLQl1bnNpZ25lZCBpbnQgbV91aUVudHJ5U2l6ZTsJLy8gc2l6ZSBvZiB0YWJsZSBlbnRyeSAgICAgIC8vIDI1LWZlYi0yMDA1IHIuZC46IGV4cGFuc2lvbiBmcm9tIEJZVEUgdG8gV09SRCBuZWNlc3NhcnkgZm9yIFBETyBiaXQgbWFwcGluZworCXZvaWQgKm1fcFRhYkJhc2U7CS8vIGJhc2UgYWRkcmVzcyBvZiB0YWJsZQorCXVuc2lnbmVkIGludCBtX3VpRW50cnlTaXplOwkvLyBzaXplIG9mIHRhYmxlIGVudHJ5ICAgICAgLy8gMjUtZmViLTIwMDUgci5kLjogZXhwYW5zaW9uIGZyb20gdTggdG8gdTE2IG5lY2Vzc2FyeSBmb3IgUERPIGJpdCBtYXBwaW5nCiAJdW5zaWduZWQgaW50IG1fdWlNYXhFbnRyaWVzOwkvLyBtYXguIHRhYmVsIGVudHJpZXMKIAogfSB0RXBsT2JkTW9kdWxUYWJQYXJhbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkTWFjcm8uaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkTWFjcm8uaAppbmRleCAyM2YyYWQ4Li5mYzMyNWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iZE1hY3JvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmRNYWNyby5oCkBAIC04MCw3ICs4MCw3IEBACiAKIC8vICAgICAgICAjcHJhZ21hIG1lc3NhZ2UgKCJFUExfT0JEX0NSRUFURV9ST01fREFUQSIpCiAKLSNkZWZpbmUgRVBMX09CRF9CRUdJTigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljICBEV09SRCAgZHdPYmRfT0JLX2cgPSAweDAwMDA7CisjZGVmaW5lIEVQTF9PQkRfQkVHSU4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyAgdTMyICBkd09iZF9PQktfZyA9IDB4MDAwMDsKICNkZWZpbmUgRVBMX09CRF9FTkQoKQogCiAJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwMiwxMSArMTAyLDExIEBACiAjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1ZBUihpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lLHZhbCkgICAgICAgICAgICAgICAgIHN0YXRpYyAgZHR5cCAgeERlZiMjaW5kIyNfIyNzdWIjI19nICAgICAgICA9IHZhbDsKICNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSAgICAgc3RhdGljICBkdHlwICB4RGVmIyNpbmQjI18jI3N1YiMjX2dbM10gICAgID0ge3ZhbCxsb3csaGlnaH07CiAjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1ZBUl9OT0lOSVQoaW5kLHN1Yix0eXAsYWNjLGR0eXAsbmFtZSkKLSNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVlNUUklORyhpbmQsc3ViLGFjYyxuYW1lLHNpemUsdmFsKSAgICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgIE1FTSBzekN1ciMjaW5kIyNfIyNzdWIjI19nW3NpemUrMV07IFwKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVlNUUklORyhpbmQsc3ViLGFjYyxuYW1lLHNpemUsdmFsKSAgICAgICAgICAgICAgICAgc3RhdGljIGNoYXIgIHN6Q3VyIyNpbmQjI18jI3N1YiMjX2dbc2l6ZSsxXTsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyAgdEVwbE9iZFZTdHJpbmdEZWYgIHhEZWYjI2luZCMjXyMjc3ViIyNfZyA9IHtzaXplLCB2YWwsIHN6Q3VyIyNpbmQjI18jI3N1YiMjX2d9OwogCi0jZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX09TVFJJTkcoaW5kLHN1YixhY2MsbmFtZSxzaXplKSAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyAgQllURSAgTUVNIGJDdXIjI2luZCMjXyMjc3ViIyNfZ1tzaXplXTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyAgdEVwbE9iZE9TdHJpbmdEZWYgIHhEZWYjI2luZCMjXyMjc3ViIyNfZyA9IHtzaXplLCAoKEJZVEUqKSIiKSwgYkN1ciMjaW5kIyNfIyNzdWIjI19nfTsKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fT1NUUklORyhpbmQsc3ViLGFjYyxuYW1lLHNpemUpICAgICAgICAgICAgICAgICAgICAgc3RhdGljICB1OCAgYkN1ciMjaW5kIyNfIyNzdWIjI19nW3NpemVdOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljICB0RXBsT2JkT1N0cmluZ0RlZiAgeERlZiMjaW5kIyNfIyNzdWIjI19nID0ge3NpemUsICgodTgqKSIiKSwgYkN1ciMjaW5kIyNfIyNzdWIjI19nfTsKICNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fRE9NQUlOKGluZCxzdWIsYWNjLG5hbWUpCiAjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1VTRVJERUYoaW5kLHN1Yix0eXAsYWNjLGR0eXAsbmFtZSx2YWwpICAgICAgICAgICAgIHN0YXRpYyAgZHR5cCAgeERlZiMjaW5kIyNfIyNzdWIjI19nICAgICAgICA9IHZhbDsKICNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVVNFUkRFRl9SRyhpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lLHZhbCxsb3csaGlnaCkgc3RhdGljICBkdHlwICB4RGVmIyNpbmQjI18jI3N1YiMjX2dbM10gICAgID0ge3ZhbCxsb3csaGlnaH07CkBAIC0xMjksMjAgKzEyOSwyMCBAQAogCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjZGVmaW5lIEVQTF9PQkRfQkVHSU5fSU5ERVhfUkFNKGluZCxjbnQsY2FsbCkKICNkZWZpbmUgRVBMX09CRF9FTkRfSU5ERVgoaW5kKQotI2RlZmluZSBFUExfT0JEX1JBTV9JTkRFWF9SQU1fQVJSQVkoaW5kLGNudCxjYWxsLHR5cCxhY2MsZHR5cCxuYW1lLGRlZikgICAgICAgICBzdGF0aWMgZHR5cCAgICAgICAgIE1FTSBheEN1ciMjaW5kIyNfZ1tjbnRdOwotI2RlZmluZSBFUExfT0JEX1JBTV9JTkRFWF9SQU1fVkFSQVJSQVkoaW5kLGNudCxjYWxsLHR5cCxhY2MsZHR5cCxuYW1lLGRlZikgICAgICBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBhVmFyRW50cnkjI2luZCMjX2dbY250XTsKLSNkZWZpbmUgRVBMX09CRF9SQU1fSU5ERVhfUkFNX1ZBUkFSUkFZX05PSU5JVChpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUpICAgc3RhdGljIHRFcGxPYmRWYXJFbnRyeSBNRU0gYVZhckVudHJ5IyNpbmQjI19nW2NudF07CisjZGVmaW5lIEVQTF9PQkRfUkFNX0lOREVYX1JBTV9BUlJBWShpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUsZGVmKSAgICAgICAgIHN0YXRpYyBkdHlwICAgICAgICAgYXhDdXIjI2luZCMjX2dbY250XTsKKyNkZWZpbmUgRVBMX09CRF9SQU1fSU5ERVhfUkFNX1ZBUkFSUkFZKGluZCxjbnQsY2FsbCx0eXAsYWNjLGR0eXAsbmFtZSxkZWYpICAgICAgc3RhdGljIHRFcGxPYmRWYXJFbnRyeSBhVmFyRW50cnkjI2luZCMjX2dbY250XTsKKyNkZWZpbmUgRVBMX09CRF9SQU1fSU5ERVhfUkFNX1ZBUkFSUkFZX05PSU5JVChpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUpICAgc3RhdGljIHRFcGxPYmRWYXJFbnRyeSBhVmFyRW50cnkjI2luZCMjX2dbY250XTsKIAogCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1ZBUihpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lLHZhbCkgICAgICAgICAgICAgICAgIHN0YXRpYyBkdHlwICAgICAgICAgTUVNIHhDdXIjI2luZCMjXyMjc3ViIyNfZzsKLSNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSAgICAgc3RhdGljIGR0eXAgICAgICAgICBNRU0geEN1ciMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9WU1RSSU5HKGluZCxzdWIsYWNjLG5hbWUsc2l6ZSx2YWwpICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFZTdHJpbmcgIE1FTSB4Q3VyIyNpbmQjI18jI3N1YiMjX2c7Ci0jZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX09TVFJJTkcoaW5kLHN1YixhY2MsbmFtZSxzaXplKSAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB0RXBsT2JkT1N0cmluZyAgTUVNIHhDdXIjI2luZCMjXyMjc3ViIyNfZzsKLSNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX05PSU5JVChpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lKSAgICAgICAgICAgICAgc3RhdGljIGR0eXAgICAgICAgICBNRU0geEN1ciMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9ET01BSU4oaW5kLHN1YixhY2MsbmFtZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9VU0VSREVGKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsKSAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9VU0VSREVGX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOwotI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9VU0VSREVGX05PSU5JVChpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lKSAgICAgICAgICBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IE1FTSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOworI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9WQVIoaW5kLHN1Yix0eXAsYWNjLGR0eXAsbmFtZSx2YWwpICAgICAgICAgICAgICAgICBzdGF0aWMgZHR5cCAgICAgICAgIHhDdXIjI2luZCMjXyMjc3ViIyNfZzsKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSAgICAgc3RhdGljIGR0eXAgICAgICAgICB4Q3VyIyNpbmQjI18jI3N1YiMjX2c7CisjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1ZTVFJJTkcoaW5kLHN1YixhY2MsbmFtZSxzaXplLHZhbCkgICAgICAgICAgICAgICAgIHN0YXRpYyB0RXBsT2JkVlN0cmluZyAgeEN1ciMjaW5kIyNfIyNzdWIjI19nOworI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9PU1RSSU5HKGluZCxzdWIsYWNjLG5hbWUsc2l6ZSkgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZE9TdHJpbmcgIHhDdXIjI2luZCMjXyMjc3ViIyNfZzsKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVkFSX05PSU5JVChpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lKSAgICAgICAgICAgICAgc3RhdGljIGR0eXAgICAgICAgICB4Q3VyIyNpbmQjI18jI3N1YiMjX2c7CisjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX0RPTUFJTihpbmQsc3ViLGFjYyxuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB0RXBsT2JkVmFyRW50cnkgVmFyRW50cnkjI2luZCMjXyMjc3ViIyNfZzsKKyNkZWZpbmUgRVBMX09CRF9TVUJJTkRFWF9SQU1fVVNFUkRFRihpbmQsc3ViLHR5cCxhY2MsZHR5cCxuYW1lLHZhbCkgICAgICAgICAgICAgc3RhdGljIHRFcGxPYmRWYXJFbnRyeSBWYXJFbnRyeSMjaW5kIyNfIyNzdWIjI19nOworI2RlZmluZSBFUExfT0JEX1NVQklOREVYX1JBTV9VU0VSREVGX1JHKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUsdmFsLGxvdyxoaWdoKSBzdGF0aWMgdEVwbE9iZFZhckVudHJ5IFZhckVudHJ5IyNpbmQjI18jI3N1YiMjX2c7CisjZGVmaW5lIEVQTF9PQkRfU1VCSU5ERVhfUkFNX1VTRVJERUZfTk9JTklUKGluZCxzdWIsdHlwLGFjYyxkdHlwLG5hbWUpICAgICAgICAgIHN0YXRpYyB0RXBsT2JkVmFyRW50cnkgVmFyRW50cnkjI2luZCMjXyMjc3ViIyNfZzsKIAogICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2VsaWYgZGVmaW5lZCAoRVBMX09CRF9DUkVBVEVfU1VCSU5ERVhfVEFCKQpAQCAtMTU5LDE3ICsxNTksMTcgQEAKICNkZWZpbmUgRVBMX09CRF9FTkRfUEFSVCgpCiAKIAkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2RlZmluZSBFUExfT0JEX0JFR0lOX0lOREVYX1JBTShpbmQsY250LGNhbGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFN1YkVudHJ5IE1FTSBhT2JkU3ViRW50cnkjI2luZCMjUmFtX2dbY250XT0geworI2RlZmluZSBFUExfT0JEX0JFR0lOX0lOREVYX1JBTShpbmQsY250LGNhbGwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgdEVwbE9iZFN1YkVudHJ5IGFPYmRTdWJFbnRyeSMjaW5kIyNSYW1fZ1tjbnRdPSB7CiAjZGVmaW5lIEVQTF9PQkRfRU5EX0lOREVYKGluZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVQTF9PQkRfRU5EX1NVQklOREVYKCl9OwotI2RlZmluZSBFUExfT0JEX1JBTV9JTkRFWF9SQU1fQVJSQVkoaW5kLGNudCxjYWxsLHR5cCxhY2MsZHR5cCxuYW1lLGRlZikgICAgICAgICBzdGF0aWMgdEVwbE9iZFN1YkVudHJ5IE1FTSBhT2JkU3ViRW50cnkjI2luZCMjUmFtX2dbXT0geyBcCisjZGVmaW5lIEVQTF9PQkRfUkFNX0lOREVYX1JBTV9BUlJBWShpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUsZGVmKSAgICAgICAgIHN0YXRpYyB0RXBsT2JkU3ViRW50cnkgYU9iZFN1YkVudHJ5IyNpbmQjI1JhbV9nW109IHsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswLCBrRXBsT2JkVHlwVUludDgsIGtFcGxPYmRBY2NDUiwgICAgICAgICAgJnhEZWYjI2luZCMjXzB4MDBfZywgICBOVUxMfSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsxLCB0eXAsICAgICAgICAgIChhY2MpfGtFcGxPYmRBY2NBcnJheSwgJnhEZWYjI2luZCMjXzB4MDFfZywgICAmYXhDdXIjI2luZCMjX2dbMF19LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVBMX09CRF9FTkRfU1VCSU5ERVgoKX07Ci0jZGVmaW5lIEVQTF9PQkRfUkFNX0lOREVYX1JBTV9WQVJBUlJBWShpbmQsY250LGNhbGwsdHlwLGFjYyxkdHlwLG5hbWUsZGVmKSAgICAgIHN0YXRpYyB0RXBsT2JkU3ViRW50cnkgTUVNIGFPYmRTdWJFbnRyeSMjaW5kIyNSYW1fZ1tdPSB7IFwKKyNkZWZpbmUgRVBMX09CRF9SQU1fSU5ERVhfUkFNX1ZBUkFSUkFZKGluZCxjbnQsY2FsbCx0eXAsYWNjLGR0eXAsbmFtZSxkZWYpICAgICAgc3RhdGljIHRFcGxPYmRTdWJFbnRyeSBhT2JkU3ViRW50cnkjI2luZCMjUmFtX2dbXT0geyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezAsIGtFcGxPYmRUeXBVSW50OCwga0VwbE9iZEFjY0NSLCAgICAgICAgICAgICAgICAgICAgICZ4RGVmIyNpbmQjI18weDAwX2csICAgTlVMTH0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7MSwgdHlwLCAgICAgICAgICAoYWNjKXxrRXBsT2JkQWNjQXJyYXl8a0VwbE9iZEFjY1ZhciwgJnhEZWYjI2luZCMjXzB4MDFfZywgICAmYVZhckVudHJ5IyNpbmQjI19nWzBdfSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVQTF9PQkRfRU5EX1NVQklOREVYKCl9OwotI2RlZmluZSBFUExfT0JEX1JBTV9JTkRFWF9SQU1fVkFSQVJSQVlfTk9JTklUKGluZCxjbnQsY2FsbCx0eXAsYWNjLGR0eXAsbmFtZSkgICBzdGF0aWMgdEVwbE9iZFN1YkVudHJ5IE1FTSBhT2JkU3ViRW50cnkjI2luZCMjUmFtX2dbXT0geyBcCisjZGVmaW5lIEVQTF9PQkRfUkFNX0lOREVYX1JBTV9WQVJBUlJBWV9OT0lOSVQoaW5kLGNudCxjYWxsLHR5cCxhY2MsZHR5cCxuYW1lKSAgIHN0YXRpYyB0RXBsT2JkU3ViRW50cnkgYU9iZFN1YkVudHJ5IyNpbmQjI1JhbV9nW109IHsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHswLCBrRXBsT2JkVHlwVUludDgsIGtFcGxPYmRBY2NDUiwgICAgICAgICAgICAgICAgICAgICAmeERlZiMjaW5kIyNfMHgwMF9nLCAgIE5VTEx9LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezEsIHR5cCwgICAgICAgICAgKGFjYyl8a0VwbE9iZEFjY0FycmF5fGtFcGxPYmRBY2NWYXIsIE5VTEwsICAgICAgICAgICAgICAgICAgJmFWYXJFbnRyeSMjaW5kIyNfZ1swXX0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUExfT0JEX0VORF9TVUJJTkRFWCgpfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2Jka0NhbC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmRrQ2FsLmMKaW5kZXggNGM5YWY4OS4uMDJiZDcyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmRrQ2FsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmRrQ2FsLmMKQEAgLTcwLDcgKzcwLDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlICJFcGxJbmMuaCIKLSNpbmNsdWRlICJrZXJuZWwvRXBsT2Jka0NhbC5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkdS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1LmMKaW5kZXggMjE4ZDE1Mi4uNWYxZDk5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1LmMKQEAgLTEyMSwxMCArMTIxLDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVdyaXRlRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJIHZvaWQgKnBTcmNEYXRhX3AsCi0JCQkJCQkgdEVwbE9iZFNpemUgU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1V3JpdGVFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICB2b2lkICpwU3JjRGF0YV9wLCB0RXBsT2JkU2l6ZSBTaXplX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE1MywxMCArMTUyLDEwIEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVSZWFkRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQl2b2lkICpwRHN0RGF0YV9wLAotCQkJCQkJdEVwbE9iZFNpemUgKiBwU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1UmVhZEVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJICAgIHRFcGxPYmRTaXplICpwU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0xNzksOCArMTc4LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUFjY2Vzc09kUGFydCh0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCi0JCQkJCQkgICB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKQordEVwbEtlcm5lbCBFcGxPYmR1QWNjZXNzT2RQYXJ0KHRFcGxPYmRQYXJ0IE9iZFBhcnRfcCwgdEVwbE9iZERpciBEaXJlY3Rpb25fcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjAyLDcgKzIwMCw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVEZWZpbmVWYXIodEVwbFZhclBhcmFtIE1FTSAqIHBWYXJQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxPYmR1RGVmaW5lVmFyKHRFcGxWYXJQYXJhbSAqcFZhclBhcmFtX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTIyNiw4ICsyMjQsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB2b2lkICpQVUJMSUMgRXBsT2JkdUdldE9iamVjdERhdGFQdHIodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKK3ZvaWQgKkVwbE9iZHVHZXRPYmplY3REYXRhUHRyKHVuc2lnbmVkIGludCB1aUluZGV4X3AsIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApCiB7CiAJdm9pZCAqcERhdGE7CiAKQEAgLTI1MCw3ICsyNDcsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYgKGRlZmluZWQgKEVQTF9PQkRfVVNFUl9PRCkgJiYgKEVQTF9PQkRfVVNFUl9PRCAhPSBGQUxTRSkpCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVJlZ2lzdGVyVXNlck9kKHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApCit0RXBsS2VybmVsIEVwbE9iZHVSZWdpc3RlclVzZXJPZCh0RXBsT2JkRW50cnlQdHIgcFVzZXJPZF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yNzUsOSArMjcyLDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdm9pZCBQVUJMSUMgRXBsT2JkdUluaXRWYXJFbnRyeSh0RXBsT2JkVmFyRW50cnkgTUVNICogcFZhckVudHJ5X3AsCi0JCQkJCSAgICAgQllURSBiVHlwZV9wLAotCQkJCQkgICAgIHRFcGxPYmRTaXplIE9iZFNpemVfcCkKK3ZvaWQgRXBsT2JkdUluaXRWYXJFbnRyeSh0RXBsT2JkVmFyRW50cnkgKnBWYXJFbnRyeV9wLCB1OCBiVHlwZV9wLCB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApCiB7CiAJRXBsT2JkdUNhbEluaXRWYXJFbnRyeShwVmFyRW50cnlfcCwgYlR5cGVfcCwgT2JkU2l6ZV9wKTsKIH0KQEAgLTI5OSw4ICsyOTQsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsT2JkU2l6ZSBQVUJMSUMgRXBsT2JkdUdldERhdGFTaXplKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKQordEVwbE9iZFNpemUgRXBsT2JkdUdldERhdGFTaXplKHVuc2lnbmVkIGludCB1aUluZGV4X3AsIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApCiB7CiAJdEVwbE9iZFNpemUgU2l6ZTsKIApAQCAtMzIzLDcgKzMxNyw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHVuc2lnbmVkIGludCBQVUJMSUMgRXBsT2JkdUdldE5vZGVJZCgpCit1bnNpZ25lZCBpbnQgRXBsT2JkdUdldE5vZGVJZCh2b2lkKQogewogCXVuc2lnbmVkIGludCB1aU5vZGVJZDsKIApAQCAtMzQ3LDggKzM0MSw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQl0RXBsT2JkTm9kZUlkVHlwZSBOb2RlSWRUeXBlX3ApCit0RXBsS2VybmVsIEVwbE9iZHVTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzczLDEwICszNjYsOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1R2V0QWNjZXNzVHlwZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgdEVwbE9iZEFjY2VzcyAqCi0JCQkJCQkgICAgcEFjY2Vzc1R5cF9wKQordEVwbEtlcm5lbCBFcGxPYmR1R2V0QWNjZXNzVHlwZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJdEVwbE9iZEFjY2VzcyAqcEFjY2Vzc1R5cF9wKQogewogCXRFcGxPYmRBY2Nlc3MgQWNjZXNzVHlwZTsKIApAQCAtNDEwLDEwICs0MDIsMTAgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVJlYWRFbnRyeVRvTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCQkgICAgdEVwbE9iZFNpemUgKiBwU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1UmVhZEVudHJ5VG9MZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJdm9pZCAqcERzdERhdGFfcCwKKwkJCQl0RXBsT2JkU2l6ZSAqcFNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtNDQ1LDExICs0MzcsMTAgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVdyaXRlRW50cnlGcm9tTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJCSAgICAgICB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCSAgICAgICB0RXBsT2JkU2l6ZSBTaXplX3ApCit0RXBsS2VybmVsIEVwbE9iZHVXcml0ZUVudHJ5RnJvbUxlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICB2b2lkICpwU3JjRGF0YV9wLAorCQkJCSAgIHRFcGxPYmRTaXplIFNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtNDc1LDExICs0NjYsOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1U2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCSAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKLQkJCQkJCSAgICAgdEVwbE9iZFZhckVudHJ5IE1FTSAqKgotCQkJCQkJICAgICBwcFZhckVudHJ5X3ApCit0RXBsS2VybmVsIEVwbE9iZHVTZWFyY2hWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAorCQkJCSB0RXBsT2JkVmFyRW50cnkgKipwcFZhckVudHJ5X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsT2JkdUNhbC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1Q2FsLmMKaW5kZXggODViM2RmMC4uNTU2MTJjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1Q2FsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmR1Q2FsLmMKQEAgLTEyMSwxMCArMTIxLDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFdyaXRlRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgIHZvaWQgKnBTcmNEYXRhX3AsCi0JCQkJCQkgICAgdEVwbE9iZFNpemUgU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsV3JpdGVFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0xNTUsMTAgKzE1NCw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxSZWFkRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICB2b2lkICpwRHN0RGF0YV9wLAotCQkJCQkJICAgdEVwbE9iZFNpemUgKiBwU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsUmVhZEVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICAgICB2b2lkICpwRHN0RGF0YV9wLCB0RXBsT2JkU2l6ZSAqcFNpemVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTg1LDggKzE4Myw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxBY2Nlc3NPZFBhcnQodEVwbE9iZFBhcnQgT2JkUGFydF9wLAotCQkJCQkJICAgICAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCkKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbEFjY2Vzc09kUGFydCh0RXBsT2JkUGFydCBPYmRQYXJ0X3AsIHRFcGxPYmREaXIgRGlyZWN0aW9uX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTIxMiw4ICsyMDksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsRGVmaW5lVmFyKHRFcGxWYXJQYXJhbSBNRU0gKgotCQkJCQkJICAgcFZhclBhcmFtX3ApCit0RXBsS2VybmVsIEVwbE9iZHVDYWxEZWZpbmVWYXIodEVwbFZhclBhcmFtICpwVmFyUGFyYW1fcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjQwLDggKzIzNiw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHZvaWQgKlBVQkxJQyBFcGxPYmR1Q2FsR2V0T2JqZWN0RGF0YVB0cih1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKQordm9pZCAqRXBsT2JkdUNhbEdldE9iamVjdERhdGFQdHIodW5zaWduZWQgaW50IHVpSW5kZXhfcCwgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKIHsKIAl2b2lkICpwRGF0YTsKIApAQCAtMjY4LDggKzI2Myw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZiAoZGVmaW5lZCAoRVBMX09CRF9VU0VSX09EKSAmJiAoRVBMX09CRF9VU0VSX09EICE9IEZBTFNFKSkKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsUmVnaXN0ZXJVc2VyT2QodEVwbE9iZEVudHJ5UHRyCi0JCQkJCQkJcFVzZXJPZF9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsUmVnaXN0ZXJVc2VyT2QodEVwbE9iZEVudHJ5UHRyIHBVc2VyT2RfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjk4LDkgKzI5Miw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHZvaWQgUFVCTElDIEVwbE9iZHVDYWxJbml0VmFyRW50cnkodEVwbE9iZFZhckVudHJ5IE1FTSAqCi0JCQkJCQlwVmFyRW50cnlfcCwgQllURSBiVHlwZV9wLAotCQkJCQkJdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQordm9pZCBFcGxPYmR1Q2FsSW5pdFZhckVudHJ5KHRFcGxPYmRWYXJFbnRyeSAqcFZhckVudHJ5X3AsIHU4IGJUeXBlX3AsCisJCQkgICAgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKQogewogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9PQkRLKSkgIT0gMCkKIAlFcGxPYmRJbml0VmFyRW50cnkocFZhckVudHJ5X3AsIGJUeXBlX3AsIE9iZFNpemVfcCk7CkBAIC0zMjQsOCArMzE3LDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbE9iZFNpemUgUFVCTElDIEVwbE9iZHVDYWxHZXREYXRhU2l6ZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKK3RFcGxPYmRTaXplIEVwbE9iZHVDYWxHZXREYXRhU2l6ZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCkKIHsKIAl0RXBsT2JkU2l6ZSBTaXplOwogCkBAIC0zNTIsNyArMzQ1LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdW5zaWduZWQgaW50IFBVQkxJQyBFcGxPYmR1Q2FsR2V0Tm9kZUlkKCkKK3Vuc2lnbmVkIGludCBFcGxPYmR1Q2FsR2V0Tm9kZUlkKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IHVpTm9kZUlkOwogCkBAIC0zODAsOSArMzczLDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFNldE5vZGVJZCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCSAgIHRFcGxPYmROb2RlSWRUeXBlCi0JCQkJCQkgICBOb2RlSWRUeXBlX3ApCit0RXBsS2VybmVsIEVwbE9iZHVDYWxTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgICAgdEVwbE9iZE5vZGVJZFR5cGUgTm9kZUlkVHlwZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC00MTEsMTEgKzQwMyw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxHZXRBY2Nlc3NUeXBlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgaW50Ci0JCQkJCQkgICAgICAgdWlTdWJJbmRleF9wLAotCQkJCQkJICAgICAgIHRFcGxPYmRBY2Nlc3MgKgotCQkJCQkJICAgICAgIHBBY2Nlc3NUeXBfcCkKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbEdldEFjY2Vzc1R5cGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCSAgIHRFcGxPYmRBY2Nlc3MgKnBBY2Nlc3NUeXBfcCkKIHsKIAl0RXBsT2JkQWNjZXNzIEFjY2VzVHlwZTsKIApAQCAtNDQ3LDExICs0MzcsMTAgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFJlYWRFbnRyeVRvTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJCSAgICAgICB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICAgdm9pZCAqcERzdERhdGFfcCwKLQkJCQkJCSAgICAgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApCit0RXBsS2VybmVsIEVwbE9iZHVDYWxSZWFkRW50cnlUb0xlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJCSAgIHRFcGxPYmRTaXplICpwU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC00ODEsMTIgKzQ3MCw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxXcml0ZUVudHJ5RnJvbUxlKHVuc2lnbmVkIGludAotCQkJCQkJCSAgdWlJbmRleF9wLAotCQkJCQkJCSAgdW5zaWduZWQgaW50Ci0JCQkJCQkJICB1aVN1YkluZGV4X3AsCi0JCQkJCQkJICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkJCSAgdEVwbE9iZFNpemUgU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsV3JpdGVFbnRyeUZyb21MZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJICAgICAgdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC01MTQsMTAgKzUwMCw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDCi1FcGxPYmR1Q2FsU2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJIHRFcGxPYmRWYXJFbnRyeSBNRU0gKiogcHBWYXJFbnRyeV9wKQordEVwbEtlcm5lbCBFcGxPYmR1Q2FsU2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICAgdW5zaWduZWQgaW50IHVpU3ViaW5kZXhfcCwKKwkJCQkgICAgdEVwbE9iZFZhckVudHJ5ICoqcHBWYXJFbnRyeV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iakRlZi5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxPYmpEZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcxMzEyNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbE9iakRlZi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLSAgKGMpIFNZU1RFQyBlbGVjdHJvbmljIEdtYkgsIEQtMDc5NzMgR3JlaXosIEF1Z3VzdC1CZWJlbC1TdHIuIDI5Ci0gICAgICB3d3cuc3lzdGVjLWVsZWN0cm9uaWMuY29tCi0KLSAgUHJvamVjdDogICAgICBvcGVuUE9XRVJMSU5LCi0KLSAgRGVzY3JpcHRpb246ICBkZWZpbmVzIG9iamRpY3QgZGljdGlvbmFyeQotCi0gIExpY2Vuc2U6Ci0KLSAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICBhcmUgbWV0OgotCi0gICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTWVNURUMgZWxlY3Ryb25pYyBHbWJIIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICAgICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGluZm9Ac3lzdGVjLWVsZWN0cm9uaWMuY29tLgotCi0gICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICAgIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgotICAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0gICAgU2V2ZXJhYmlsaXR5IENsYXVzZToKLQotICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCi0gICAgICAgIHVuZW5mb3JjZWFibGUgaW4gYW55IGp1cmlzZGljdGlvbiwgdGhhdCBzaGFsbCBub3QgYWZmZWN0OgotICAgICAgICAxLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gdGhhdCBqdXJpc2RpY3Rpb24gb2YgYW55IG90aGVyCi0gICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0gICAgICAgIDIuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiBvdGhlciBqdXJpc2RpY3Rpb25zIG9mIHRoYXQgb3IKLSAgICAgICAgICAgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICAgICAgJFJDU2ZpbGU6IEVwbE9iakRlZi5oLHYgJAotCi0gICAgICAgICAgICAgICAgJEF1dGhvcjogRC5LcnVlZ2VyICQKLQotICAgICAgICAgICAgICAgICRSZXZpc2lvbjogMS40ICQgICREYXRlOiAyMDA4LzA0LzE3IDIxOjM2OjMyICQKLQotICAgICAgICAgICAgICAgICRTdGF0ZTogRXhwICQKLQotICAgICAgICAgICAgICAgIEJ1aWxkIEVudmlyb25tZW50OgotICAgICAgICAgICAgICAgICAgICBHQ0MgVjMuNAotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBSZXZpc2lvbiBIaXN0b3J5OgotCi0gIDIwMDYvMDYvMDYgICAgay50LjogICB0YWtlIE9iakRlZi5oIGZyb20gQ0FOb3BlbiBhbmQgbW9kaWZ5IGZvciBFUEwKLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfRVBMT0JKREVGX0hfCi0jZGVmaW5lIF9FUExPQkpERUZfSF8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHNlY3VyaXR5IGNoZWNrcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIG1hY3JvcyB0byBoZWxwIGJ1aWxkaW5nIE9ECi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2lmIChkZWZpbmVkIChFUExfT0JEX1VTRV9WQVJJQUJMRV9TVUJJTkRFWF9UQUIpICYmIChFUExfT0JEX1VTRV9WQVJJQUJMRV9TVUJJTkRFWF9UQUIgIT0gRkFMU0UpKQotCi0jZGVmaW5lIENDTV9TVUJJTkRFWF9SQU1fT05MWShhKSAgICBhOwotI2RlZmluZSBDQ01fU1VCSU5ERVhfUkFNX09ORU9GKGEsYikgYQotCi0jZWxzZQotCi0jZGVmaW5lIENDTV9TVUJJTkRFWF9SQU1fT05MWShhKQotI2RlZmluZSBDQ01fU1VCSU5ERVhfUkFNX09ORU9GKGEsYikgYgotCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRvIHByZXZlbnQgdW51c2VkIG1lbW9yeSBpbiBzdWJpbmRleCB0YWJsZXMgd2UgbmVlZCB0aGlzIG1hY3JvLgotLy8gQnV0IG5vdCBhbGwgY29tcGlsZXJzIHN1cHBvcnQgdG8gcHJlc2V0IHRoZSBsYXN0IHN0cnVjdCB2YWx1ZSBmb2xsb3dlZCBieSBhIGNvbW1hLgotLy8gQ29tcGlsZXJzIHdoaWNoIGRvZXMgbm90IHN1cHBvcnQgYSBjb21tYSBhZnRlciBsYXN0IHN0cnVjdCB2YWx1ZSBoYXMgdG8gcGxhY2UgaW4gYSBkdW1teSBzdWJpbmRleC4KLSNpZiAoKERFVl9TWVNURU0gJiBfREVWX0NPTU1BX0VYVF8pICE9IDApCi0KLSNkZWZpbmUgRVBMX09CRF9FTkRfU1VCSU5ERVgoKQotI2RlZmluZSBFUExfT0JEX01BWF9BUlJBWV9TVUJFTlRSSUVTICAgIDIKLQotI2Vsc2UKLQotI2RlZmluZSBFUExfT0JEX0VORF9TVUJJTkRFWCgpICAgICAgICAgIHswLDAsMCxOVUxMLE5VTEx9Ci0jZGVmaW5lIEVQTF9PQkRfTUFYX0FSUkFZX1NVQkVOVFJJRVMgICAgMwotCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBnbG9iYWxlIHZhcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjcmVhdGlvbiBvZiBkYXRhIGluIFJPTSBtZW1vcnkKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNkZWZpbmUgRVBMX09CRF9DUkVBVEVfUk9NX0RBVEEKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0jdW5kZWYgRVBMX09CRF9DUkVBVEVfUk9NX0RBVEEKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY3JlYXRpb24gb2YgZGF0YSBpbiBSQU0gbWVtb3J5Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgRVBMX09CRF9DUkVBVEVfUkFNX0RBVEEKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0jdW5kZWYgRVBMX09CRF9DUkVBVEVfUkFNX0RBVEEKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY3JlYXRpb24gb2Ygc3ViaW5kZXggdGFibGVzIGluIFJPTSBhbmQgUkFNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgRVBMX09CRF9DUkVBVEVfU1VCSU5ERVhfVEFCCi0jaW5jbHVkZSAib2JqZGljdC5oIgotI3VuZGVmIEVQTF9PQkRfQ1JFQVRFX1NVQklOREVYX1RBQgotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjcmVhdGlvbiBvZiBpbmRleCB0YWJsZXMgZm9yIGdlbmVyaWMsIG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIHBhcnQKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBFUExfT0JEX0NSRUFURV9JTkRFWF9UQUIKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0jdW5kZWYgRVBMX09CRF9DUkVBVEVfSU5ERVhfVEFCCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgUCBVIEIgTCBJIEMgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVQTF9PQkRfSU5JVF9SQU1fTkFNRSgpCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgb2JqZWN0IGRpY3Rpb25hcnkKLS8vCi0vLyBQYXJhbWV0ZXJzOiAgcEluaXRQYXJhbV9wICAgID0gcG9pbnRlciB0byBpbml0IHBhcmFtIHN0cnVjdCBvZiBFcGwKLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgICAgID0gZXJyb3IgY29kZQotLy8KLS8vIFN0YXRlOgotLy8KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVQTF9PQkRfSU5JVF9SQU1fTkFNRSh0RXBsT2JkSW5pdFBhcmFtIE1FTSAqCi0JCQkJCQkgICAgIHBJbml0UGFyYW1fcCkKLXsKLQotCXRFcGxPYmRJbml0UGFyYW0gTUVNICpwSW5pdFBhcmFtID0gcEluaXRQYXJhbV9wOwotCi0JLy8gY2hlY2sgaWYgcG9pbnRlciB0byBwYXJhbWV0ZXIgc3RydWN0dXJlIGlzIHZhbGlkCi0JLy8gaWYgbm90IHRoZW4gb25seSBjb3B5IHN1YmluZGV4IHRhYmxlcyBiZWxvdwotCWlmIChwSW5pdFBhcmFtICE9IE5VTEwpIHsKLQkJLy8gYXQgZmlyc3QgZGVsZXRlIGFsbCBwYXJhbWV0ZXJzIChhbGwgcG9pbnRlcnMgd2lsbCBiZSBzZXQgenUgTlVMTCkKLQkJRVBMX01FTVNFVChwSW5pdFBhcmFtLCAwLCBzaXplb2YodEVwbE9iZEluaXRQYXJhbSkpOwotCi0jZGVmaW5lIEVQTF9PQkRfQ1JFQVRFX0lOSVRfRlVOQ1RJT04KLQkJewotCQkJLy8gaW5zZXJ0cyBjb2RlIHRvIGluaXQgcG9pbnRlciB0byBpbmRleCB0YWJsZXMKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0JCX0KLSN1bmRlZiBFUExfT0JEX0NSRUFURV9JTklUX0ZVTkNUSU9OCi0KLSNpZiAoZGVmaW5lZCAoRVBMX09CRF9VU0VSX09EKSAmJiAoRVBMX09CRF9VU0VSX09EICE9IEZBTFNFKSkKLQkJewotCQkJLy8gdG8gYmVnaW4gbm8gdXNlciBPRCBpcyBkZWZpbmVkCi0JCQlwSW5pdFBhcmFtX3AtPm1fcFVzZXJQYXJ0ID0gTlVMTDsKLQkJfQotI2VuZGlmCi0JfQotI2RlZmluZSBFUExfT0JEX0NSRUFURV9JTklUX1NVQklOREVYCi0JewotCQkvLyBpbnNlcnRzIGNvZGUgdG8gY29weSBzdWJpbmRleCB0YWJsZXMKLSNpbmNsdWRlICJvYmpkaWN0LmgiCi0JfQotI3VuZGVmIEVQTF9PQkRfQ1JFQVRFX0lOSVRfU1VCSU5ERVgKLQotCXJldHVybiBrRXBsU3VjY2Vzc2Z1bDsKLQotfQotCi0jZW5kaWYgLy8gX0VQTE9CSkRFRl9IXwotCi0vLyBEaWUgbGV0enRlIFplaWxlIG113yB1bmJlZGluZ3QgZWluZSBsZWVyZSBaZWlsZSBzZWluLCB3ZWlsIG1hbmNoZSBDb21waWxlcgotLy8gZGFtaXQgZWluIFByb2JsZW0gaGFiZW4sIHdlbm4gZGFzIG5pY2h0IHNvIGlzdCAoei5CLiBHTlUgb2RlciBCb3JsYW5kIEMrKyBCdWlsZGVyKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkby5oCmluZGV4IGQyMmFjODYuLjBiM2FkNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxQZG8uaApAQCAtOTAsOCArOTAsOCBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdm9pZCAqbV9wVmFyOwotCVdPUkQgbV93T2Zmc2V0OwkJLy8gaW4gQml0cwotCVdPUkQgbV93U2l6ZTsJCS8vIGluIEJpdHMKKwl1MTYgbV93T2Zmc2V0OwkJLy8gaW4gQml0cworCXUxNiBtX3dTaXplOwkJLy8gaW4gQml0cwogCUJPT0wgbV9mTnVtZXJpYzsJLy8gbnVtZXJpYyB2YWx1ZSAtPiB1c2UgQU1JIGZ1bmN0aW9ucwogCiB9IHRFcGxQZG9NYXBwaW5nOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJLy8gICAgICAgICAgICAgICBUUERPOiAweDAwPVBSZXMsIE1OOiBDbk5vZGVJZD1QUmVxCiAKIAlCT09MIG1fZlR4Ung7Ci0JQllURSBtX2JNYXBwaW5nVmVyc2lvbjsKKwl1OCBtX2JNYXBwaW5nVmVyc2lvbjsKIAl1bnNpZ25lZCBpbnQgbV91aU1heE1hcHBpbmdFbnRyaWVzOwkvLyBtYXhpbXVtIG51bWJlciBvZiBtYXBwaW5nIGVudHJpZXMsIGkuZS4gc2l6ZSBvZiBtX2FQZG9NYXBwaW5nCiAJdEVwbFBkb01hcHBpbmcgbV9hUGRvTWFwcGluZ1sxXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxQZG9rLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkb2suYwppbmRleCAxNTk5OWI0Li5kYjliM2YwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkb2suYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkb2suYwpAQCAtNzMsMTEgKzczLDYgQEAKICNpbmNsdWRlICJrZXJuZWwvRXBsRXZlbnRrLmgiCiAjaW5jbHVkZSAia2VybmVsL0VwbE9iZGsuaCIKIAotI2lmIChERVZfU1lTVEVNID09IF9ERVZfR05VX0NGNTQ4WF8pCi0jaW5jbHVkZSAicGxjY29yZS5oIgotI2RlZmluZSBQRE9fTEVEIDB4MDgKLSNlbmRpZgotCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9QRE9LKSkgIT0gMCkKIAogI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfRExMSykpID09IDApCkBAIC0yMjYsMTEgKzIyMSw2IEBACiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsRXZlbnQgRXZlbnQ7CiAKLSNpZiAoREVWX1NZU1RFTSA9PSBfREVWX0dOVV9DRjU0OFhfKQotCS8vIHJlc2V0IExFRAotLy8gICAgTUNGX0dQSU9fUE9EUl9QQ0lCRyAmPSB+UERPX0xFRDsgIC8vIExldmVsCi0jZW5kaWYKLQogCUV2ZW50Lm1fRXZlbnRTaW5rID0ga0VwbEV2ZW50U2lua1Bkb2s7CiAJRXZlbnQubV9FdmVudFR5cGUgPSBrRXBsRXZlbnRUeXBlUGRvUng7CiAJLy8gbGltaXQgY29waWVkIGRhdGEgdG8gc2l6ZSBvZiBQRE8gKGJlY2F1c2UgZnJvbSBzb21lIENOcyB0aGUgZnJhbWUgaXMgbGFyZ2VyIHRoYW4gbmVjZXNzYXJ5KQpAQCAtMjM4LDExICsyMjgsNiBAQAogCUV2ZW50Lm1fcEFyZyA9IHBGcmFtZUluZm9fcC0+bV9wRnJhbWU7CiAJUmV0ID0gRXBsRXZlbnRrUG9zdCgmRXZlbnQpOwogCi0jaWYgKERFVl9TWVNURU0gPT0gX0RFVl9HTlVfQ0Y1NDhYXykKLQkvLyBzZXQgTEVECi0vLyAgICBNQ0ZfR1BJT19QT0RSX1BDSUJHIHw9IFBET19MRUQ7ICAvLyBMZXZlbAotI2VuZGlmCi0KIAlyZXR1cm4gUmV0OwogfQogCkBAIC0yNjksMjIgKzI1NCwxMiBAQAogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbEV2ZW50IEV2ZW50OwogCi0jaWYgKERFVl9TWVNURU0gPT0gX0RFVl9HTlVfQ0Y1NDhYXykKLQkvLyByZXNldCBMRUQKLQlNQ0ZfR1BJT19QT0RSX1BDSUJHICY9IH5QRE9fTEVEOwkvLyBMZXZlbAotI2VuZGlmCi0KIAlFdmVudC5tX0V2ZW50U2luayA9IGtFcGxFdmVudFNpbmtQZG9rOwogCUV2ZW50Lm1fRXZlbnRUeXBlID0ga0VwbEV2ZW50VHlwZVBkb1R4OwogCUV2ZW50Lm1fdWlTaXplID0gc2l6ZW9mKHRFcGxGcmFtZUluZm8pOwogCUV2ZW50Lm1fcEFyZyA9IHBGcmFtZUluZm9fcDsKIAlSZXQgPSBFcGxFdmVudGtQb3N0KCZFdmVudCk7CiAKLSNpZiAoREVWX1NZU1RFTSA9PSBfREVWX0dOVV9DRjU0OFhfKQotCS8vIHNldCBMRUQKLQlNQ0ZfR1BJT19QT0RSX1BDSUJHIHw9IFBET19MRUQ7CS8vIExldmVsCi0jZW5kaWYKLQogCXJldHVybiBSZXQ7CiB9CiAKQEAgLTMzOSwxOSArMzE0LDE5IEBACiB0RXBsS2VybmVsIEVwbFBkb2tQcm9jZXNzKHRFcGxFdmVudCAqIHBFdmVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0JV09SRCB3UGRvU2l6ZTsKLQlXT1JEIHdCaXRPZmZzZXQ7Ci0JV09SRCB3Qml0U2l6ZTsKLQlXT1JEIHdWYXJTaXplOwotCVFXT1JEIHF3T2JqZWN0TWFwcGluZzsKLQlCWVRFIGJNYXBwU3ViaW5kZXg7Ci0JQllURSBiT2JkU3ViaW5kZXg7Ci0JV09SRCB3T2JkTWFwcEluZGV4OwotCVdPUkQgd09iZENvbW1JbmRleDsKLQlXT1JEIHdQZG9JZDsKLQlCWVRFIGJPYmREYXRhOwotCUJZVEUgYk9iamVjdENvdW50OwotCUJZVEUgYkZyYW1lRGF0YTsKKwl1MTYgd1Bkb1NpemU7CisJdTE2IHdCaXRPZmZzZXQ7CisJdTE2IHdCaXRTaXplOworCXUxNiB3VmFyU2l6ZTsKKwl1NjQgcXdPYmplY3RNYXBwaW5nOworCXU4IGJNYXBwU3ViaW5kZXg7CisJdTggYk9iZFN1YmluZGV4OworCXUxNiB3T2JkTWFwcEluZGV4OworCXUxNiB3T2JkQ29tbUluZGV4OworCXUxNiB3UGRvSWQ7CisJdTggYk9iZERhdGE7CisJdTggYk9iamVjdENvdW50OworCXU4IGJGcmFtZURhdGE7CiAJQk9PTCBmVmFsaWQ7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKIAl0RXBsRnJhbWUgKnBGcmFtZTsKQEAgLTQ0OCw3ICs0MjMsNyBAQAogCQkJLy8gcHJvY2VzcyBtYXBwaW5nCiAJCQlmb3IgKGJNYXBwU3ViaW5kZXggPSAxOyBiTWFwcFN1YmluZGV4IDw9IGJPYmplY3RDb3VudDsKIAkJCSAgICAgYk1hcHBTdWJpbmRleCsrKSB7Ci0JCQkJT2JkU2l6ZSA9IDg7CS8vIFFXT1JECisJCQkJT2JkU2l6ZSA9IDg7CS8vIHU2NAogCQkJCS8vIHJlYWQgb2JqZWN0IG1hcHBpbmcgZnJvbSBPRAogCQkJCVJldCA9CiAJCQkJICAgIEVwbE9iZFJlYWRFbnRyeSh3T2JkTWFwcEluZGV4LApAQCAtNDYzLDE2ICs0MzgsMTYgQEAKIAkJCQl9CiAJCQkJLy8gZGVjb2RlIG9iamVjdCBtYXBwaW5nCiAJCQkJd09iZENvbW1JbmRleCA9Ci0JCQkJICAgIChXT1JEKSAocXdPYmplY3RNYXBwaW5nICYKKwkJCQkgICAgKHUxNikgKHF3T2JqZWN0TWFwcGluZyAmCiAJCQkJCSAgICAweDAwMDAwMDAwMDAwMEZGRkZMTCk7CiAJCQkJYk9iZFN1YmluZGV4ID0KLQkJCQkgICAgKEJZVEUpICgocXdPYmplY3RNYXBwaW5nICYKKwkJCQkgICAgKHU4KSAoKHF3T2JqZWN0TWFwcGluZyAmCiAJCQkJCSAgICAgMHgwMDAwMDAwMDAwRkYwMDAwTEwpID4+IDE2KTsKIAkJCQl3Qml0T2Zmc2V0ID0KLQkJCQkgICAgKFdPUkQpICgocXdPYmplY3RNYXBwaW5nICYKKwkJCQkgICAgKHUxNikgKChxd09iamVjdE1hcHBpbmcgJgogCQkJCQkgICAgIDB4MDAwMEZGRkYwMDAwMDAwMExMKSA+PiAzMik7CiAJCQkJd0JpdFNpemUgPQotCQkJCSAgICAoV09SRCkgKChxd09iamVjdE1hcHBpbmcgJgorCQkJCSAgICAodTE2KSAoKHF3T2JqZWN0TWFwcGluZyAmCiAJCQkJCSAgICAgMHhGRkZGMDAwMDAwMDAwMDAwTEwpID4+IDQ4KTsKIAogCQkJCS8vIGNoZWNrIGlmIG9iamVjdCBleGNlZWRzIFBETyBzaXplCkBAIC01NzgsNyArNTUzLDcgQEAKIAkJCS8vIHByb2Nlc3MgbWFwcGluZwogCQkJZm9yIChiTWFwcFN1YmluZGV4ID0gMTsgYk1hcHBTdWJpbmRleCA8PSBiT2JqZWN0Q291bnQ7CiAJCQkgICAgIGJNYXBwU3ViaW5kZXgrKykgewotCQkJCU9iZFNpemUgPSA4OwkvLyBRV09SRAorCQkJCU9iZFNpemUgPSA4OwkvLyB1NjQKIAkJCQkvLyByZWFkIG9iamVjdCBtYXBwaW5nIGZyb20gT0QKIAkJCQlSZXQgPQogCQkJCSAgICBFcGxPYmRSZWFkRW50cnkod09iZE1hcHBJbmRleCwKQEAgLTU5MywyMSArNTY4LDIxIEBACiAJCQkJfQogCQkJCS8vIGRlY29kZSBvYmplY3QgbWFwcGluZwogCQkJCXdPYmRDb21tSW5kZXggPQotCQkJCSAgICAoV09SRCkgKHF3T2JqZWN0TWFwcGluZyAmCisJCQkJICAgICh1MTYpIChxd09iamVjdE1hcHBpbmcgJgogCQkJCQkgICAgMHgwMDAwMDAwMDAwMDBGRkZGTEwpOwogCQkJCWJPYmRTdWJpbmRleCA9Ci0JCQkJICAgIChCWVRFKSAoKHF3T2JqZWN0TWFwcGluZyAmCisJCQkJICAgICh1OCkgKChxd09iamVjdE1hcHBpbmcgJgogCQkJCQkgICAgIDB4MDAwMDAwMDAwMEZGMDAwMExMKSA+PiAxNik7CiAJCQkJd0JpdE9mZnNldCA9Ci0JCQkJICAgIChXT1JEKSAoKHF3T2JqZWN0TWFwcGluZyAmCisJCQkJICAgICh1MTYpICgocXdPYmplY3RNYXBwaW5nICYKIAkJCQkJICAgICAweDAwMDBGRkZGMDAwMDAwMDBMTCkgPj4gMzIpOwogCQkJCXdCaXRTaXplID0KLQkJCQkgICAgKFdPUkQpICgocXdPYmplY3RNYXBwaW5nICYKKwkJCQkgICAgKHUxNikgKChxd09iamVjdE1hcHBpbmcgJgogCQkJCQkgICAgIDB4RkZGRjAwMDAwMDAwMDAwMExMKSA+PiA0OCk7CiAKIAkJCQkvLyBjYWxjdWxhdGUgbWF4IFBETyBzaXplCiAJCQkJT2JkU2l6ZSA9IHdCaXRTaXplID4+IDM7Ci0JCQkJd1ZhclNpemUgPSAod0JpdE9mZnNldCA+PiAzKSArIChXT1JEKSBPYmRTaXplOworCQkJCXdWYXJTaXplID0gKHdCaXRPZmZzZXQgPj4gMykgKyAodTE2KSBPYmRTaXplOwogCQkJCWlmICgodW5zaWduZWQgaW50KSh3VmFyU2l6ZSArIDI0KSA+IHBGcmFtZUluZm8tPm1fdWlGcmFtZVNpemUpIHsJLy8gVFBETyBpcyB0b28gc2hvcnQKIAkJCQkJLy8gJCQkIHJhaXNlIFBETyBlcnJvciwgc2V0IFJldAogCQkJCQlnb3RvIEV4aXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFBkb3UuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvdS5jCmluZGV4IGU3YjEwNjUuLmQ2ZDA2MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvdS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsUGRvdS5jCkBAIC0xNDksMTggKzE0OSwxOCBAQAogLy8gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgRXBsUGRvdUNoZWNrUGRvVmFsaWRpdHkodEVwbE9iZENiUGFyYW0gTUVNICogcFBhcmFtX3AsCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxQZG91Q2hlY2tQZG9WYWxpZGl0eSh0RXBsT2JkQ2JQYXJhbSAqcFBhcmFtX3AsCiAJCQkJCSAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCk7CiAKLXN0YXRpYyB2b2lkIEVwbFBkb3VEZWNvZGVPYmplY3RNYXBwaW5nKFFXT1JEIHF3T2JqZWN0TWFwcGluZ19wLAorc3RhdGljIHZvaWQgRXBsUGRvdURlY29kZU9iamVjdE1hcHBpbmcodTY0IHF3T2JqZWN0TWFwcGluZ19wLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnB1aUluZGV4X3AsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCAqcHVpU3ViSW5kZXhfcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpwdWlCaXRPZmZzZXRfcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpwdWlCaXRTaXplX3ApOwogCi1zdGF0aWMgdEVwbEtlcm5lbCBFcGxQZG91Q2hlY2tPYmplY3RNYXBwaW5nKFFXT1JEIHF3T2JqZWN0TWFwcGluZ19wLAorc3RhdGljIHRFcGxLZXJuZWwgRXBsUGRvdUNoZWNrT2JqZWN0TWFwcGluZyh1NjQgcXdPYmplY3RNYXBwaW5nX3AsCiAJCQkJCSAgICB0RXBsT2JkQWNjZXNzIEFjY2Vzc1R5cGVfcCwKLQkJCQkJICAgIERXT1JEICogcGR3QWJvcnRDb2RlX3AsCisJCQkJCSAgICB1MzIgKiBwZHdBYm9ydENvZGVfcCwKIAkJCQkJICAgIHVuc2lnbmVkIGludCAqcHVpUGRvU2l6ZV9wKTsKIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KQEAgLTIyNiwxOCArMjI2LDE4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsUGRvdUNiT2JkQWNjZXNzKHRFcGxPYmRDYlBhcmFtIE1FTSAqIHBQYXJhbV9wKQordEVwbEtlcm5lbCBFcGxQZG91Q2JPYmRBY2Nlc3ModEVwbE9iZENiUGFyYW0gKnBQYXJhbV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdW5zaWduZWQgaW50IHVpUGRvSWQ7CiAJdW5zaWduZWQgaW50IHVpSW5kZXhUeXBlOwogCXRFcGxPYmRTaXplIE9iZFNpemU7Ci0JQllURSBiT2JqZWN0Q291bnQ7Ci0JUVdPUkQgcXdPYmplY3RNYXBwaW5nOworCXU4IGJPYmplY3RDb3VudDsKKwl1NjQgcXdPYmplY3RNYXBwaW5nOwogCXRFcGxPYmRBY2Nlc3MgQWNjZXNzVHlwZTsKLQlCWVRFIGJNYXBwU3ViaW5kZXg7CisJdTggYk1hcHBTdWJpbmRleDsKIAl1bnNpZ25lZCBpbnQgdWlDdXJQZG9TaXplOwotCVdPUkQgd01heFBkb1NpemU7CisJdTE2IHdNYXhQZG9TaXplOwogCXVuc2lnbmVkIGludCB1aVN1YkluZGV4OwogCiAJLy8gZmV0Y2ggUERPIElECkBAIC0yOTMsNyArMjkzLDcgQEAKIAlpZiAocFBhcmFtX3AtPm1fdWlTdWJJbmRleCA9PSAwKSB7CS8vIG9iamVjdCBtYXBwaW5nIGNvdW50IGFjY2Vzc2VkCiAKIAkJLy8gUERPIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQKLQkJYk9iamVjdENvdW50ID0gKigoQllURSAqKSBwUGFyYW1fcC0+bV9wQXJnKTsKKwkJYk9iamVjdENvdW50ID0gKigodTggKikgcFBhcmFtX3AtPm1fcEFyZyk7CiAKIAkJaWYgKGJPYmplY3RDb3VudCA9PSAwKSB7CS8vIFBETyBzaGFsbCBiZSBkaXNhYmxlZAogCkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJZm9yIChiTWFwcFN1YmluZGV4ID0gMTsgYk1hcHBTdWJpbmRleCA8PSBiT2JqZWN0Q291bnQ7CiAJCSAgICAgYk1hcHBTdWJpbmRleCsrKSB7CiAJCQkvLyByZWFkIG9iamVjdCBtYXBwaW5nIGZyb20gT0QKLQkJCU9iZFNpemUgPSBzaXplb2YocXdPYmplY3RNYXBwaW5nKTsJLy8gUVdPUkQKKwkJCU9iZFNpemUgPSBzaXplb2YocXdPYmplY3RNYXBwaW5nKTsJLy8gdTY0CiAJCQlSZXQgPSBFcGxPYmR1UmVhZEVudHJ5KHBQYXJhbV9wLT5tX3VpSW5kZXgsCiAJCQkJCSAgICAgICBiTWFwcFN1YmluZGV4LCAmcXdPYmplY3RNYXBwaW5nLAogCQkJCQkgICAgICAgJk9iZFNpemUpOwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJCX0KIAkJLy8gY2hlY2sgZXhpc3RlbmNlIG9mIG9iamVjdCBhbmQgdmFsaWRpdHkgb2Ygb2JqZWN0IGxlbmd0aAogCi0JCXF3T2JqZWN0TWFwcGluZyA9ICooKFFXT1JEICopIHBQYXJhbV9wLT5tX3BBcmcpOworCQlxd09iamVjdE1hcHBpbmcgPSAqKCh1NjQgKikgcFBhcmFtX3AtPm1fcEFyZyk7CiAKIAkJUmV0ID0gRXBsUGRvdUNoZWNrT2JqZWN0TWFwcGluZyhxd09iamVjdE1hcHBpbmcsCiAJCQkJCQlBY2Nlc3NUeXBlLApAQCAtMzk0LDEyICszOTQsMTIgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBFcGxQZG91Q2hlY2tQZG9WYWxpZGl0eSh0RXBsT2JkQ2JQYXJhbSBNRU0gKiBwUGFyYW1fcCwKK3N0YXRpYyB0RXBsS2VybmVsIEVwbFBkb3VDaGVja1Bkb1ZhbGlkaXR5KHRFcGxPYmRDYlBhcmFtICpwUGFyYW1fcCwKIAkJCQkJICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbE9iZFNpemUgT2JkU2l6ZTsKLQlCWVRFIGJPYmplY3RDb3VudDsKKwl1OCBiT2JqZWN0Q291bnQ7CiAKIAlPYmRTaXplID0gMTsKIAkvLyByZWFkIG51bWJlciBvZiBtYXBwZWQgb2JqZWN0cyBmcm9tIE9EOyB0aGlzIGluZGljYXRlcyBpZiB0aGUgUERPIGlzIHZhbGlkCkBAIC00MzksNyArNDM5LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdm9pZCBFcGxQZG91RGVjb2RlT2JqZWN0TWFwcGluZyhRV09SRCBxd09iamVjdE1hcHBpbmdfcCwKK3N0YXRpYyB2b2lkIEVwbFBkb3VEZWNvZGVPYmplY3RNYXBwaW5nKHU2NCBxd09iamVjdE1hcHBpbmdfcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50ICpwdWlJbmRleF9wLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnB1aVN1YkluZGV4X3AsCiAJCQkJICAgICAgIHVuc2lnbmVkIGludCAqcHVpQml0T2Zmc2V0X3AsCkBAIC00ODAsOSArNDgwLDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1zdGF0aWMgdEVwbEtlcm5lbCBFcGxQZG91Q2hlY2tPYmplY3RNYXBwaW5nKFFXT1JEIHF3T2JqZWN0TWFwcGluZ19wLAorc3RhdGljIHRFcGxLZXJuZWwgRXBsUGRvdUNoZWNrT2JqZWN0TWFwcGluZyh1NjQgcXdPYmplY3RNYXBwaW5nX3AsCiAJCQkJCSAgICB0RXBsT2JkQWNjZXNzIEFjY2Vzc1R5cGVfcCwKLQkJCQkJICAgIERXT1JEICogcGR3QWJvcnRDb2RlX3AsCisJCQkJCSAgICB1MzIgKiBwZHdBYm9ydENvZGVfcCwKIAkJCQkJICAgIHVuc2lnbmVkIGludCAqcHVpUGRvU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkby5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG8uaAppbmRleCAxY2IzZjJkLi44MDAyZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkby5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvLmgKQEAgLTExNiwyMCArMTE2LDE4IEBACiAKIC8vIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIFByb3RvY29sIEFic3RyYWN0aW9uIExheWVyIHRvIGNhbGwKIC8vIGFzeW5jaHJvbnV1cyBTRE8gU2VxdWVuY2UgTGF5ZXIKLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsU2VxdUxheWVyUmVjZWl2ZUNiKSAodEVwbFNkb0NvbkhkbCBDb25IZGxfcCwKLQkJCQkJCSAgICAgdEVwbEFzeVNkb1NlcSAqCi0JCQkJCQkgICAgIHBTZG9TZXFEYXRhX3AsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3ApOwordHlwZWRlZiB0RXBsS2VybmVsKCp0RXBsU2VxdUxheWVyUmVjZWl2ZUNiKSAodEVwbFNkb0NvbkhkbCBDb25IZGxfcCwKKwkJCQkJICAgICB0RXBsQXN5U2RvU2VxICpwU2RvU2VxRGF0YV9wLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3ApOwogCiAvLyBoYW5kbGUgYmV0d2VlbiBhc3luY2hyb251dXMgU0RPIFNlcXVlbmNlIExheWVyIGFuZCBTRE8gQ29tbWFuZCBsYXllcgogdHlwZWRlZiB1bnNpZ25lZCBpbnQgdEVwbFNkb1NlcUNvbkhkbDsKIAogLy8gY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciBmb3IgYXN5bmNocm9udXVzIFNETyBTZXF1ZW5jZSBMYXllciB0byBjYWxsCiAvLyBTRE8gQ29tbWFuZCBsYXllciBmb3IgcmVjZWl2ZWQgZGF0YQotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqCi0JCSAgIHRFcGxTZG9Db21SZWNlaXZlQ2IpICh0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wLAotCQkJCQkgdEVwbEFzeVNkb0NvbSAqIHBBc3lTZG9Db21fcCwKLQkJCQkJIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3ApOwordHlwZWRlZiB0RXBsS2VybmVsKCogdEVwbFNkb0NvbVJlY2VpdmVDYikgKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCisJCQkJCSAgIHRFcGxBc3lTZG9Db20gKnBBc3lTZG9Db21fcCwKKwkJCQkJICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCk7CiAKIC8vIHN0YXR1cyBvZiBjb25uZWN0aW9uCiB0eXBlZGVmIGVudW0gewpAQCAtMTQzLDkgKzE0MSw4IEBACiAKIC8vIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIGFzeW5jaHJvbnV1cyBTRE8gU2VxdWVuY2UgTGF5ZXIgdG8gY2FsbAogLy8gU0RPIENvbW1hbmQgbGF5ZXIgZm9yIGNvbm5lY3Rpb24gc3RhdHVzCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDICogdEVwbFNkb0NvbUNvbkNiKSAodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKLQkJCQkJICAgICAgdEVwbEFzeVNkb0NvblN0YXRlCi0JCQkJCSAgICAgIEFzeVNkb0NvblN0YXRlX3ApOwordHlwZWRlZiB0RXBsS2VybmVsKCogdEVwbFNkb0NvbUNvbkNiKSAodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKKwkJCQkgICAgICAgdEVwbEFzeVNkb0NvblN0YXRlIEFzeVNkb0NvblN0YXRlX3ApOwogCiAvLyBoYW5kbGUgYmV0d2VlbiAgU0RPIENvbW1hbmQgbGF5ZXIgYW5kIGFwcGxpY2F0aW9uCiB0eXBlZGVmIHVuc2lnbmVkIGludCB0RXBsU2RvQ29tQ29uSGRsOwpAQCAtMjEwLDcgKzIwNyw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbFNkb0NvbUNvbkhkbCBtX1Nkb0NvbUNvbkhkbDsKIAl0RXBsU2RvQ29tQ29uU3RhdGUgbV9TZG9Db21Db25TdGF0ZTsKLQlEV09SRCBtX2R3QWJvcnRDb2RlOworCXUzMiBtX2R3QWJvcnRDb2RlOwogCXRFcGxTZG9BY2Nlc3NUeXBlIG1fU2RvQWNjZXNzVHlwZTsKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsJLy8gTm9kZUlkIG9mIHRoZSB0YXJnZXQKIAl1bnNpZ25lZCBpbnQgbV91aVRhcmdldEluZGV4OwkvLyBpbmRleCB3aGljaCB3YXMgYWNjZXNzZWQKQEAgLTIyMSw4ICsyMTgsNyBAQAogfSB0RXBsU2RvQ29tRmluaXNoZWQ7CiAKIC8vIGNhbGxiYWNrIGZ1bmN0aW9uIHBvaW50ZXIgdG8gaW5mb3JtIGFwcGxpY2F0aW9uIGFib3V0IGNvbm5lY3Rpb24KLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKiB0RXBsU2RvRmluaXNoZWRDYikgKHRFcGxTZG9Db21GaW5pc2hlZCAqCi0JCQkJCQlwU2RvQ29tRmluaXNoZWRfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsU2RvRmluaXNoZWRDYikgKHRFcGxTZG9Db21GaW5pc2hlZCAqcFNkb0NvbUZpbmlzaGVkX3ApOwogCiAvLyBzdHJ1Y3R1cmUgdG8gaW5pdCBTRE8gdHJhbnNmZXIgdG8gUmVhZCBvciBXcml0ZSBieSBJbmRleAogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Bc25kdS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Bc25kdS5jCmluZGV4IDA1YTAwYzkuLmFhOGJkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvQXNuZHUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb0FzbmR1LmMKQEAgLTExMCw3ICsxMTAsNyBAQAogLy8gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVDYih0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVDYih0RXBsRnJhbWVJbmZvICpwRnJhbWVJbmZvX3ApOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE0OSw3ICsxNDksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1SW5pdCh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApCit0RXBsS2VybmVsIEVwbFNkb0FzbmR1SW5pdCh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE3Niw3ICsxNzYsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1QWRkSW5zdGFuY2UodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKQordEVwbEtlcm5lbCBFcGxTZG9Bc25kdUFkZEluc3RhbmNlKHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjE4LDcgKzIxOCw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbFNkb0FzbmR1RGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjUxLDggKzI1MSw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVJbml0Q29uKHRFcGxTZG9Db25IZGwgKiBwU2RvQ29uSGFuZGxlX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlUYXJnZXROb2RlSWRfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVJbml0Q29uKHRFcGxTZG9Db25IZGwgKnBTZG9Db25IYW5kbGVfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUNvdW50OwpAQCAtMzE5LDkgKzMxOSw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVTZW5kRGF0YSh0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wLAotCQkJCSAgICAgIHRFcGxGcmFtZSAqIHBTcmNEYXRhX3AsCi0JCQkJICAgICAgRFdPUkQgZHdEYXRhU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxTZG9Bc25kdVNlbmREYXRhKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3AsCisJCQkgICAgICAgdEVwbEZyYW1lICpwU3JjRGF0YV9wLAorCQkJICAgICAgIHUzMiBkd0RhdGFTaXplX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpQXJyYXk7CkBAIC0zMzksMTAgKzMzOSwxMCBAQAogCS8vIG93biBub2RlIGlkIG5vdCBuZWVkZWQgLT4gZmlsbGVkIGJ5IERMTAogCiAJLy8gc2V0IG1lc3NhZ2UgdHlwZQotCUFtaVNldEJ5dGVUb0xlKCZwU3JjRGF0YV9wLT5tX2xlX2JNZXNzYWdlVHlwZSwgKEJZVEUpIGtFcGxNc2dUeXBlQXNuZCk7CS8vIEFTbmQgPT0gMHgwNgorCUFtaVNldEJ5dGVUb0xlKCZwU3JjRGF0YV9wLT5tX2xlX2JNZXNzYWdlVHlwZSwgKHU4KSBrRXBsTXNnVHlwZUFzbmQpOwkvLyBBU25kID09IDB4MDYKIAkvLyB0YXJnZXQgbm9kZSBpZAogCUFtaVNldEJ5dGVUb0xlKCZwU3JjRGF0YV9wLT5tX2xlX2JEc3ROb2RlSWQsCi0JCSAgICAgICAoQllURSkgU2RvQXNuZEluc3RhbmNlX2cuCisJCSAgICAgICAodTgpIFNkb0FzbmRJbnN0YW5jZV9nLgogCQkgICAgICAgbV9hdWlTZG9Bc25kQ29ubmVjdGlvblt1aUFycmF5XSk7CiAJLy8gc2V0IHNvdXJjZS1ub2RlaWQgKGZpbGxlZCBieSBETEwgMCkKIAlBbWlTZXRCeXRlVG9MZSgmcFNyY0RhdGFfcC0+bV9sZV9iU3JjTm9kZUlkLCAweDAwKTsKQEAgLTM3OSw3ICszNzksNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApCit0RXBsS2VybmVsIEVwbFNkb0FzbmR1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpQXJyYXk7CkBAIC00MjIsNyArNDIyLDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc25kdUNiKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApCit0RXBsS2VybmVsIEVwbFNkb0FzbmR1Q2IodEVwbEZyYW1lSW5mbyAqcEZyYW1lSW5mb19wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdW5zaWduZWQgaW50IHVpQ291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb0FzeVNlcXUuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvQXN5U2VxdS5jCmluZGV4IDZiNmE5OTcuLjI1NmQ3MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvQXN5U2VxdS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU2RvQXN5U2VxdS5jCkBAIC0xMjgsMTEgKzEyOCwxMSBAQAogCiAvLyBzdHJ1Y3R1cmUgZm9yIEhpc3RvcnktQnVmZmVyCiB0eXBlZGVmIHN0cnVjdCB7Ci0JQllURSBtX2JGcmVlRW50cmllczsKLQlCWVRFIG1fYldyaXRlOwkJLy8gaW5kZXggb2YgdGhlIG5leHQgZnJlZSBidWZmZXIgZW50cnkKLQlCWVRFIG1fYkFjazsJCS8vIGluZGV4IG9mIHRoZSBuZXh0IG1lc3NhZ2Ugd2hpY2ggc2hvdWxkIGJlY29tZSBhY2tub3dsZWRnZWQKLQlCWVRFIG1fYlJlYWQ7CQkvLyBpbmRleCBiZXR3ZWVuIG1fYkFjayBhbmQgbV9iV3JpdGUgdG8gdGhlIG5leHQgbWVzc2FnZSBmb3IgcmV0cmFuc21pc3Npb24KLQlCWVRFIG1fYWFiSGlzdG9yeUZyYW1lW0VQTF9TRE9fSElTVE9SWV9TSVpFXQorCXU4IG1fYkZyZWVFbnRyaWVzOworCXU4IG1fYldyaXRlOwkJLy8gaW5kZXggb2YgdGhlIG5leHQgZnJlZSBidWZmZXIgZW50cnkKKwl1OCBtX2JBY2s7CQkvLyBpbmRleCBvZiB0aGUgbmV4dCBtZXNzYWdlIHdoaWNoIHNob3VsZCBiZWNvbWUgYWNrbm93bGVkZ2VkCisJdTggbV9iUmVhZDsJCS8vIGluZGV4IGJldHdlZW4gbV9iQWNrIGFuZCBtX2JXcml0ZSB0byB0aGUgbmV4dCBtZXNzYWdlIGZvciByZXRyYW5zbWlzc2lvbgorCXU4IG1fYWFiSGlzdG9yeUZyYW1lW0VQTF9TRE9fSElTVE9SWV9TSVpFXQogCSAgICBbRVBMX1NFUV9ISVNUUk9ZX0ZSQU1FX1NJWkVdOwogCXVuc2lnbmVkIGludCBtX2F1aUZyYW1lU2l6ZVtFUExfU0RPX0hJU1RPUllfU0laRV07CiAKQEAgLTE1Miw4ICsxNTIsOCBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCXRFcGxTZG9Db25IZGwgbV9Db25IYW5kbGU7CiAJdEVwbEFzeVNkb1N0YXRlIG1fU2RvU3RhdGU7Ci0JQllURSBtX2JSZWNTZXFOdW07CS8vIG5hbWUgZnJvbSB2aWV3IG9mIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIKLQlCWVRFIG1fYlNlbmRTZXFOdW07CS8vIG5hbWUgZnJvbSB2aWV3IG9mIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIKKwl1OCBtX2JSZWNTZXFOdW07CS8vIG5hbWUgZnJvbSB2aWV3IG9mIHRoZSBjb21tdW5pY2F0aW9uIHBhcnRuZXIKKwl1OCBtX2JTZW5kU2VxTnVtOwkvLyBuYW1lIGZyb20gdmlldyBvZiB0aGUgY29tbXVuaWNhdGlvbiBwYXJ0bmVyCiAJdEVwbEFzeVNkb0Nvbkhpc3RvcnkgbV9TZG9Db25IaXN0b3J5OwogCXRFcGxUaW1lckhkbCBtX0VwbFRpbWVySGRsOwogCXVuc2lnbmVkIGludCBtX3VpUmV0cnlDb3VudDsJLy8gcmV0cnkgY291bnRlcgpAQCAtMjAzLDkgKzIwMyw5IEBACiAJCQkJCSAgICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCwKIAkJCQkJICAgICB0RXBsRnJhbWUgKiBwRXBsRnJhbWVfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVJlY2VpdmVDYih0RXBsU2RvQ29uSGRsIENvbkhkbF9wLAotCQkJCSAgICAgdEVwbEFzeVNkb1NlcSAqIHBTZG9TZXFEYXRhX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXN5UmVjZWl2ZUNiKHRFcGxTZG9Db25IZGwgQ29uSGRsX3AsCisJCQkgICAgICB0RXBsQXN5U2RvU2VxICpwU2RvU2VxRGF0YV9wLAorCQkJICAgICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCk7CiAKIHN0YXRpYyB0RXBsS2VybmVsIEVwbFNkb0FzeUluaXRIaXN0b3J5KHZvaWQpOwogCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgdWlTaXplX3ApOwogCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxTZG9Bc3lBY2tGcmFtZVRvSGlzdG9yeSh0RXBsQXN5U2RvU2VxQ29uICogcEFzeVNkb1NlcUNvbl9wLAotCQkJCQkgICAgIEJZVEUgYlJlY1NlcU51bWJlcl9wKTsKKwkJCQkJICAgICB1OCBiUmVjU2VxTnVtYmVyX3ApOwogCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxTZG9Bc3lSZWFkRnJvbUhpc3RvcnkodEVwbEFzeVNkb1NlcUNvbiAqIHBBc3lTZG9TZXFDb25fcCwKIAkJCQkJICAgdEVwbEZyYW1lICoqIHBwRnJhbWVfcCwKQEAgLTI2Nyw4ICsyNjcsOCBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcUluaXQodEVwbFNkb0NvbVJlY2VpdmVDYiBmcFNkb0NvbUNiX3AsCi0JCQkJICAgdEVwbFNkb0NvbUNvbkNiIGZwU2RvQ29tQ29uQ2JfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxSW5pdCh0RXBsU2RvQ29tUmVjZWl2ZUNiIGZwU2RvQ29tQ2JfcCwKKwkJCSAgICB0RXBsU2RvQ29tQ29uQ2IgZnBTZG9Db21Db25DYl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yOTcsOCArMjk3LDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFBZGRJbnN0YW5jZSh0RXBsU2RvQ29tUmVjZWl2ZUNiIGZwU2RvQ29tQ2JfcCwKLQkJCQkJICB0RXBsU2RvQ29tQ29uQ2IgZnBTZG9Db21Db25DYl9wKQordEVwbEtlcm5lbCBFcGxTZG9Bc3lTZXFBZGRJbnN0YW5jZSh0RXBsU2RvQ29tUmVjZWl2ZUNiIGZwU2RvQ29tQ2JfcCwKKwkJCQkgICB0RXBsU2RvQ29tQ29uQ2IgZnBTZG9Db21Db25DYl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0zODAsNyArMzgwLDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcURlbEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpQ291bnQ7CkBAIC00MzksOSArNDM5LDkgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFJbml0Q29uKHRFcGxTZG9TZXFDb25IZGwgKiBwU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgICAgdEVwbFNkb1R5cGUgU2RvVHlwZSkKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxSW5pdENvbih0RXBsU2RvU2VxQ29uSGRsICpwU2RvU2VxQ29uSGRsX3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgICAgdEVwbFNkb1R5cGUgU2RvVHlwZSkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl1bnNpZ25lZCBpbnQgdWlDb3VudDsKQEAgLTU5NCw5ICs1OTQsOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcVNlbmREYXRhKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3AsCi0JCQkJICAgICAgIHRFcGxGcmFtZSAqIHBhYkRhdGFfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxU2VuZERhdGEodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKKwkJCQl1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wLAorCQkJCXRFcGxGcmFtZSAqcGFiRGF0YV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUhhbmRsZTsKQEAgLTY0MCw3ICs2NDAsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKiBwRXZlbnRfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxUHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqcEV2ZW50X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbFRpbWVyRXZlbnRBcmcgKnBUaW1lckV2ZW50QXJnOwpAQCAtNzE0LDcgKzcxNCw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXN5U2VxRGVsQ29uKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3ApCit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcURlbENvbih0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdW5zaWduZWQgaW50IHVpSGFuZGxlOwpAQCAtMTQ5OCw3ICsxNDk4LDcgQEAKIAkJCQkvLyBmcmFtZSByZWNlaXZlZAogCQkJY2FzZSBrQXN5U2RvU2VxRXZlbnRGcmFtZVJlYzoKIAkJCQl7Ci0JCQkJCUJZVEUgYlNlbmRTZXFOdW1Db24gPQorCQkJCQl1OCBiU2VuZFNlcU51bUNvbiA9CiAJCQkJCSAgICBBbWlHZXRCeXRlRnJvbUxlKCZwUmVjRnJhbWVfcC0+CiAJCQkJCQkJICAgICBtX2xlX2JTZW5kU2VxTnVtQ29uKTsKIApAQCAtMjAxNiw3ICsyMDE2LDcgQEAKIAkJCQkJIEJPT0wgZkZyYW1lSW5IaXN0b3J5X3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7Ci0JQllURSBhYkZyYW1lW0VQTF9TRVFfRlJBTUVfU0laRV07CisJdTggYWJGcmFtZVtFUExfU0VRX0ZSQU1FX1NJWkVdOwogCXRFcGxGcmFtZSAqcEVwbEZyYW1lOwogCXVuc2lnbmVkIGludCB1aUZyZWVFbnRyaWVzOwogCkBAIC0yMTM5LDkgKzIxMzksOSBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVJlY2VpdmVDYih0RXBsU2RvQ29uSGRsIENvbkhkbF9wLAotCQkJCSAgICAgdEVwbEFzeVNkb1NlcSAqIHBTZG9TZXFEYXRhX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKQordEVwbEtlcm5lbCBFcGxTZG9Bc3lSZWNlaXZlQ2IodEVwbFNkb0NvbkhkbCBDb25IZGxfcCwKKwkJCSAgICAgIHRFcGxBc3lTZG9TZXEgKnBTZG9TZXFEYXRhX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUNvdW50ID0gMDsKQEAgLTIxNTQsNyArMjE1NCw3IEBACiAjZW5kaWYKIAogCUVQTF9EQkdMVkxfU0RPX1RSQUNFMigiSGFuZGxlOiAweCV4ICwgRmlyc3QgRGF0YWJ5dGUgMHgleFxuIiwgQ29uSGRsX3AsCi0JCQkgICAgICAoKEJZVEUgKikgcFNkb1NlcURhdGFfcClbMF0pOworCQkJICAgICAgKCh1OCAqKSBwU2RvU2VxRGF0YV9wKVswXSk7CiAKIAkvLyBzZWFyY2ggY29udHJvbGwgc3RydWN0dXJlIGZvciB0aGlzIGNvbm5lY3Rpb24KIAlwQXN5U2RvU2VxQ29uID0gJkFzeVNkb1NlcXVJbnN0YW5jZV9nLm1fQXN5U2RvQ29ubmVjdGlvblt1aUNvdW50XTsKQEAgLTIzMjgsMTIgKzIzMjgsMTIgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RhdGljIHRFcGxLZXJuZWwgRXBsU2RvQXN5QWNrRnJhbWVUb0hpc3RvcnkodEVwbEFzeVNkb1NlcUNvbiAqIHBBc3lTZG9TZXFDb25fcCwKLQkJCQkJICAgICBCWVRFIGJSZWNTZXFOdW1iZXJfcCkKKwkJCQkJICAgICB1OCBiUmVjU2VxTnVtYmVyX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbEFzeVNkb0Nvbkhpc3RvcnkgKnBIaXN0b3J5OwotCUJZVEUgYkFja0luZGV4OwotCUJZVEUgYkN1cnJlbnRTZXFOdW07CisJdTggYkFja0luZGV4OworCXU4IGJDdXJyZW50U2VxTnVtOwogCiAJUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTI0MjIsOCArMjQyMiw4IEBACiAJLy8gY2hlY2sgaWYgZW50cmllcyBhcmUgYXZhaWxhYmxlIGZvciByZWFkaW5nCiAJaWYgKChwSGlzdG9yeS0+bV9iRnJlZUVudHJpZXMgPCBFUExfU0RPX0hJU1RPUllfU0laRSkKIAkgICAgJiYgKHBIaXN0b3J5LT5tX2JXcml0ZSAhPSBwSGlzdG9yeS0+bV9iUmVhZCkpIHsKLS8vICAgICAgICBQUklOVEY0KCJFcGxTZG9Bc3lSZWFkRnJvbUhpc3RvcnkoKTogaW5pdCA9ICVkLCByZWFkID0gJXUsIHdyaXRlID0gJXUsIGFjayA9ICV1IiwgKGludCkgZkluaXRSZWFkX3AsIChXT1JEKXBIaXN0b3J5LT5tX2JSZWFkLCAoV09SRClwSGlzdG9yeS0+bV9iV3JpdGUsIChXT1JEKXBIaXN0b3J5LT5tX2JBY2spOwotLy8gICAgICAgIFBSSU5URjIoIiwgZnJlZSBlbnRyaWVzID0gJXUsIG5leHQgZnJhbWUgc2l6ZSA9ICV1XG4iLCAoV09SRClwSGlzdG9yeS0+bV9iRnJlZUVudHJpZXMsIHBIaXN0b3J5LT5tX2F1aUZyYW1lU2l6ZVtwSGlzdG9yeS0+bV9iUmVhZF0pOworLy8gICAgICAgIFBSSU5URjQoIkVwbFNkb0FzeVJlYWRGcm9tSGlzdG9yeSgpOiBpbml0ID0gJWQsIHJlYWQgPSAldSwgd3JpdGUgPSAldSwgYWNrID0gJXUiLCAoaW50KSBmSW5pdFJlYWRfcCwgKHUxNilwSGlzdG9yeS0+bV9iUmVhZCwgKHUxNilwSGlzdG9yeS0+bV9iV3JpdGUsICh1MTYpcEhpc3RvcnktPm1fYkFjayk7CisvLyAgICAgICAgUFJJTlRGMigiLCBmcmVlIGVudHJpZXMgPSAldSwgbmV4dCBmcmFtZSBzaXplID0gJXVcbiIsICh1MTYpcEhpc3RvcnktPm1fYkZyZWVFbnRyaWVzLCBwSGlzdG9yeS0+bV9hdWlGcmFtZVNpemVbcEhpc3RvcnktPm1fYlJlYWRdKTsKIAogCQkvLyByZXR1cm4gcG9pbnRlciB0byBzdG9yZWQgZnJhbWUKIAkJKnBwRnJhbWVfcCA9CkBAIC0yNDM5LDcgKzI0MzksNyBAQAogCQl9CiAKIAl9IGVsc2UgewotLy8gICAgICAgIFBSSU5URjMoIkVwbFNkb0FzeVJlYWRGcm9tSGlzdG9yeSgpOiByZWFkID0gJXUsIGFjayA9ICV1LCBmcmVlIGVudHJpZXMgPSAldSwgbm8gZnJhbWVcbiIsIChXT1JEKXBIaXN0b3J5LT5tX2JSZWFkLCAoV09SRClwSGlzdG9yeS0+bV9iQWNrLCAoV09SRClwSGlzdG9yeS0+bV9iRnJlZUVudHJpZXMpOworLy8gICAgICAgIFBSSU5URjMoIkVwbFNkb0FzeVJlYWRGcm9tSGlzdG9yeSgpOiByZWFkID0gJXUsIGFjayA9ICV1LCBmcmVlIGVudHJpZXMgPSAldSwgbm8gZnJhbWVcbiIsICh1MTYpcEhpc3RvcnktPm1fYlJlYWQsICh1MTYpcEhpc3RvcnktPm1fYkFjaywgKHUxNilwSGlzdG9yeS0+bV9iRnJlZUVudHJpZXMpOwogCiAJCS8vIG5vIG1vcmUgZnJhbWVzIHRvIHNlbmQKIAkJLy8gcmV0dXJuIG51bGwgcG9pbnRlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Db211LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb0NvbXUuYwppbmRleCBjZTBlYjMzLi5iZjM1YWZhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Db211LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9Db211LmMKQEAgLTE1NiwxNCArMTU2LDE0IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbFNkb1NlcUNvbkhkbCBtX1Nkb1NlcUNvbkhkbDsJLy8gaWYgIT0gMCAtPiBlbnRyeSB1c2VkCiAJdEVwbFNkb0NvbVN0YXRlIG1fU2RvQ29tU3RhdGU7Ci0JQllURSBtX2JUcmFuc2FjdGlvbklkOworCXU4IG1fYlRyYW5zYWN0aW9uSWQ7CiAJdW5zaWduZWQgaW50IG1fdWlOb2RlSWQ7CS8vIE5vZGVJZCBvZiB0aGUgdGFyZ2V0CiAJLy8gLT4gbmVlZGVkIHRvIHJlaW5pdCBjb25uZWN0aW9uCiAJLy8gICAgYWZ0ZXIgdGltZW91dAogCXRFcGxTZG9UcmFuc1R5cGUgbV9TZG9UcmFuc1R5cGU7CS8vIEF1dG8sIEV4cGVkaXRlZCwgU2VnbWVudGVkCiAJdEVwbFNkb1NlcnZpY2VUeXBlIG1fU2RvU2VydmljZVR5cGU7CS8vIFdyaXRlQnlJbmRleCwgUmVhZEJ5SW5kZXgKIAl0RXBsU2RvVHlwZSBtX1Nkb1Byb3RUeXBlOwkvLyBwcm90b2NvbCBsYXllcjogQXV0bywgVWRwLCBBc25kLCBQZG8KLQlCWVRFICptX3BEYXRhOwkJLy8gcG9pbnRlciB0byBkYXRhCisJdTggKm1fcERhdGE7CQkvLyBwb2ludGVyIHRvIGRhdGEKIAl1bnNpZ25lZCBpbnQgbV91aVRyYW5zU2l6ZTsJLy8gbnVtYmVyIG9mIGJ5dGVzCiAJLy8gdG8gdHJhbnNmZXIKIAl1bnNpZ25lZCBpbnQgbV91aVRyYW5zZmVycmVkQnl0ZTsJLy8gbnVtYmVyIG9mIGJ5dGVzCkBAIC0xNzQsNyArMTc0LDcgQEAKIAkvLyAgICB0aGUgU0RPIHRyYW5zZmVyCiAJdm9pZCAqbV9wVXNlckFyZzsJLy8gdXNlciBkZWZpbmFibGUgYXJndW1lbnQgcG9pbnRlcgogCi0JRFdPUkQgbV9kd0xhc3RBYm9ydENvZGU7CS8vIHNhdmUgdGhlIGxhc3QgYWJvcnQgY29kZQorCXUzMiBtX2R3TGFzdEFib3J0Q29kZTsJLy8gc2F2ZSB0aGUgbGFzdCBhYm9ydCBjb2RlCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1NET0MpKSAhPSAwKQogCS8vIG9ubHkgZm9yIGNsaWVudAogCXVuc2lnbmVkIGludCBtX3VpVGFyZ2V0SW5kZXg7CS8vIGluZGV4IHRvIGFjY2VzcwpAQCAtMjA1LDEyICsyMDUsMTIgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tUmVjZWl2ZUNiKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICB0RXBsQXN5U2RvQ29tICogcEFzeVNkb0NvbV9wLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0NvbVJlY2VpdmVDYih0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wLAorCQkJICAgICAgdEVwbEFzeVNkb0NvbSAqcEFzeVNkb0NvbV9wLAorCQkJICAgICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbUNvbkNiKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCi0JCQkJIHRFcGxBc3lTZG9Db25TdGF0ZSBBc3lTZG9Db25TdGF0ZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQ29tQ29uQ2IodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKKwkJCSAgdEVwbEFzeVNkb0NvblN0YXRlIEFzeVNkb0NvblN0YXRlX3ApOwogCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxTZG9Db21TZWFyY2hDb25JbnRlcm4odEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKIAkJCQkJICAgdEVwbFNkb0NvbUNvbkV2ZW50IFNkb0NvbUNvbkV2ZW50X3AsCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAkJCQkJICAgICAgdEVwbEFzeVNkb0NvbSAqIHBBc3lTZG9Db21fcCk7CiAKIHN0YXRpYyB0RXBsS2VybmVsIEVwbFNkb0NvbUNsaWVudFNlbmRBYm9ydCh0RXBsU2RvQ29tQ29uICogcFNkb0NvbUNvbl9wLAotCQkJCQkgICBEV09SRCBkd0Fib3J0Q29kZV9wKTsKKwkJCQkJICAgdTMyIGR3QWJvcnRDb2RlX3ApOwogI2VuZGlmCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yODUsNyArMjg1LDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21Jbml0KHZvaWQpCit0RXBsS2VybmVsIEVwbFNkb0NvbUluaXQodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzEyLDcgKzMxMiw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tQWRkSW5zdGFuY2Uodm9pZCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tQWRkSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzU0LDcgKzM1NCw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tRGVsSW5zdGFuY2Uodm9pZCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMzk4LDkgKzM5OCw5IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPQykpICE9IDApCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21EZWZpbmVDb24odEVwbFNkb0NvbUNvbkhkbCAqIHBTZG9Db21Db25IZGxfcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wLAotCQkJCSAgICAgdEVwbFNkb1R5cGUgUHJvdFR5cGVfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tRGVmaW5lQ29uKHRFcGxTZG9Db21Db25IZGwgKnBTZG9Db21Db25IZGxfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wLAorCQkJICAgICAgdEVwbFNkb1R5cGUgUHJvdFR5cGVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl1bnNpZ25lZCBpbnQgdWlDb3VudDsKQEAgLTUxMSw4ICs1MTEsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1NET0MpKSAhPSAwKQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tSW5pdFRyYW5zZmVyQnlJbmRleCh0RXBsU2RvQ29tVHJhbnNQYXJhbUJ5SW5kZXggKgotCQkJCQkgICAgICAgcFNkb0NvbVRyYW5zUGFyYW1fcCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tSW5pdFRyYW5zZmVyQnlJbmRleCh0RXBsU2RvQ29tVHJhbnNQYXJhbUJ5SW5kZXggKnBTZG9Db21UcmFuc1BhcmFtX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbFNkb0NvbUNvbiAqcFNkb0NvbUNvbjsKQEAgLTYwMyw3ICs2MDIsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1NET0MpKSAhPSAwKQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tVW5kZWZpbmVDb24odEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tVW5kZWZpbmVDb24odEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsU2RvQ29tQ29uICpwU2RvQ29tQ29uOwpAQCAtNjY5LDggKzY2OCw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPQykpICE9IDApCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21HZXRTdGF0ZSh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wLAotCQkJCSAgICB0RXBsU2RvQ29tRmluaXNoZWQgKiBwU2RvQ29tRmluaXNoZWRfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tR2V0U3RhdGUodEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCwKKwkJCSAgICAgdEVwbFNkb0NvbUZpbmlzaGVkICpwU2RvQ29tRmluaXNoZWRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsU2RvQ29tQ29uICpwU2RvQ29tQ29uOwpAQCAtNzQ3LDggKzc0Niw4IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPQykpICE9IDApCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21TZG9BYm9ydCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wLAotCQkJCSAgICBEV09SRCBkd0Fib3J0Q29kZV9wKQordEVwbEtlcm5lbCBFcGxTZG9Db21TZG9BYm9ydCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICB1MzIgZHdBYm9ydENvZGVfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAl0RXBsU2RvQ29tQ29uICpwU2RvQ29tQ29uOwpAQCAtNzY2LDcgKzc2NSw3IEBACiAJCWdvdG8gRXhpdDsKIAl9CiAJLy8gc2F2ZSBwb2ludGVyIHRvIGFib3J0IGNvZGUKLQlwU2RvQ29tQ29uLT5tX3BEYXRhID0gKEJZVEUgKikgJiBkd0Fib3J0Q29kZV9wOworCXBTZG9Db21Db24tPm1fcERhdGEgPSAodTggKikgJiBkd0Fib3J0Q29kZV9wOwogCiAJUmV0ID0gRXBsU2RvQ29tUHJvY2Vzc0ludGVybihTZG9Db21Db25IZGxfcCwKIAkJCQkgICAgIGtFcGxTZG9Db21Db25FdmVudEFib3J0LApAQCAtODAzLDkgKzgwMiw5IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tUmVjZWl2ZUNiKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICB0RXBsQXN5U2RvQ29tICogcEFzeVNkb0NvbV9wLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHVpRGF0YVNpemVfcCkKK3RFcGxLZXJuZWwgRXBsU2RvQ29tUmVjZWl2ZUNiKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCisJCQkgICAgICB0RXBsQXN5U2RvQ29tICpwQXN5U2RvQ29tX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC04MTUsNyArODE0LDcgQEAKIAogCUVQTF9EQkdMVkxfU0RPX1RSQUNFMwogCSAgICAoIkVwbFNkb0NvbVJlY2VpdmVDYiBTZG9TZXFDb25IZGw6IDB4JVgsIEZpcnN0IEJ5dGUgb2YgcEFzeVNkb0NvbV9wOiAweCUwMlgsIHVpRGF0YVNpemVfcDogMHglMDRYXG4iLAotCSAgICAgU2RvU2VxQ29uSGRsX3AsIChXT1JEKSBwQXN5U2RvQ29tX3AtPm1fbGVfYWJDb21tYW5kRGF0YVswXSwKKwkgICAgIFNkb1NlcUNvbkhkbF9wLCAodTE2KSBwQXN5U2RvQ29tX3AtPm1fbGVfYWJDb21tYW5kRGF0YVswXSwKIAkgICAgIHVpRGF0YVNpemVfcCk7CiAKIAlyZXR1cm4gUmV0OwpAQCAtODQwLDggKzgzOSw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tQ29uQ2IodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKLQkJCQkgdEVwbEFzeVNkb0NvblN0YXRlIEFzeVNkb0NvblN0YXRlX3ApCit0RXBsS2VybmVsIEVwbFNkb0NvbUNvbkNiKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCisJCQkgIHRFcGxBc3lTZG9Db25TdGF0ZSBBc3lTZG9Db25TdGF0ZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXRFcGxTZG9Db21Db25FdmVudCBTZG9Db21Db25FdmVudCA9IGtFcGxTZG9Db21Db25FdmVudFNlbmRGaXJzdDsKQEAgLTk5OSwxMCArOTk4LDEwIEBACiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdEVwbFNkb0NvbUNvbiAqcFNkb0NvbUNvbjsKLQlCWVRFIGJGbGFnOworCXU4IGJGbGFnOwogCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1NET1MpKSAhPSAwKQotCURXT1JEIGR3QWJvcnRDb2RlOworCXUzMiBkd0Fib3J0Q29kZTsKIAl1bnNpZ25lZCBpbnQgdWlTaXplOwogI2VuZGlmCiAKQEAgLTExMzgsNyArMTEzNyw3IEBACiAJCQkJCQkJCQlwU2RvQ29tQ29uLT4KIAkJCQkJCQkJCSAgICBtX3BEYXRhCiAJCQkJCQkJCQkgICAgPQotCQkJCQkJCQkJICAgIChCWVRFCisJCQkJCQkJCQkgICAgKHU4CiAJCQkJCQkJCQkgICAgICopCiAJCQkJCQkJCQkgICAgJgogCQkJCQkJCQkJICAgIGR3QWJvcnRDb2RlOwpAQCAtMTI4Myw3ICsxMjgyLDcgQEAKIAkJCQkJCQlpZiAocFNkb0NvbUNvbi0+CiAJCQkJCQkJICAgIG1fZHdMYXN0QWJvcnRDb2RlID09CiAJCQkJCQkJICAgIDApIHsKLQkJCQkJCQkJKCAvKihCWVRFKikgKi8KKwkJCQkJCQkJKCAvKih1OCopICovCiAJCQkJCQkJCSBwU2RvQ29tQ29uLT4KIAkJCQkJCQkJIG1fcERhdGEpICs9CiAJCQkJCQkgICAgICB1aVNpemU7CkBAIC0xMzIxLDcgKzEzMjAsNyBAQAogCQkJCQkJCQkJcFNkb0NvbUNvbi0+CiAJCQkJCQkJCQkgICAgbV9wRGF0YQogCQkJCQkJCQkJICAgID0KLQkJCQkJCQkJCSAgICAoQllURQorCQkJCQkJCQkJICAgICh1OAogCQkJCQkJCQkJICAgICAqKQogCQkJCQkJCQkJICAgICYKIAkJCQkJCQkJCSAgICBwU2RvQ29tQ29uLT4KQEAgLTE2NjcsNyArMTY2Niw3IEBACiAJCQljYXNlIGtFcGxTZG9Db21Db25FdmVudEFib3J0OgogCQkJCXsKIAkJCQkJRXBsU2RvQ29tQ2xpZW50U2VuZEFib3J0KHBTZG9Db21Db24sCi0JCQkJCQkJCSAqKChEV09SRCAqKQorCQkJCQkJCQkgKigodTMyICopCiAJCQkJCQkJCSAgIHBTZG9Db21Db24tPgogCQkJCQkJCQkgICBtX3BEYXRhKSk7CiAKQEAgLTE2NzUsNyArMTY3NCw3IEBACiAJCQkJCXBTZG9Db21Db24tPm1fYlRyYW5zYWN0aW9uSWQrKzsKIAkJCQkJLy8gY2FsbCBjYWxsYmFjayBvZiBhcHBsaWNhdGlvbgogCQkJCQlwU2RvQ29tQ29uLT5tX2R3TGFzdEFib3J0Q29kZSA9Ci0JCQkJCSAgICAqKChEV09SRCAqKSBwU2RvQ29tQ29uLT5tX3BEYXRhKTsKKwkJCQkJICAgICooKHUzMiAqKSBwU2RvQ29tQ29uLT5tX3BEYXRhKTsKIAkJCQkJUmV0ID0KIAkJCQkJICAgIEVwbFNkb0NvbVRyYW5zZmVyRmluaXNoZWQKIAkJCQkJICAgIChTZG9Db21Db25fcCwgcFNkb0NvbUNvbiwKQEAgLTE4NjksNyArMTg2OCw3IEBACiAJCQljYXNlIGtFcGxTZG9Db21Db25FdmVudEFib3J0OgogCQkJCXsKIAkJCQkJRXBsU2RvQ29tQ2xpZW50U2VuZEFib3J0KHBTZG9Db21Db24sCi0JCQkJCQkJCSAqKChEV09SRCAqKQorCQkJCQkJCQkgKigodTMyICopCiAJCQkJCQkJCSAgIHBTZG9Db21Db24tPgogCQkJCQkJCQkgICBtX3BEYXRhKSk7CiAKQEAgLTE4ODAsNyArMTg3OSw3IEBACiAJCQkJCSAgICBrRXBsU2RvQ29tU3RhdGVDbGllbnRDb25uZWN0ZWQ7CiAJCQkJCS8vIGNhbGwgY2FsbGJhY2sgb2YgYXBwbGljYXRpb24KIAkJCQkJcFNkb0NvbUNvbi0+bV9kd0xhc3RBYm9ydENvZGUgPQotCQkJCQkgICAgKigoRFdPUkQgKikgcFNkb0NvbUNvbi0+bV9wRGF0YSk7CisJCQkJCSAgICAqKCh1MzIgKikgcFNkb0NvbUNvbi0+bV9wRGF0YSk7CiAJCQkJCVJldCA9CiAJCQkJCSAgICBFcGxTZG9Db21UcmFuc2ZlckZpbmlzaGVkCiAJCQkJCSAgICAoU2RvQ29tQ29uX3AsIHBTZG9Db21Db24sCkBAIC0xOTY1LDcgKzE5NjQsNyBAQAogCXVuc2lnbmVkIGludCB1aVN1YmluZGV4OwogCXRFcGxPYmRTaXplIEVudHJ5U2l6ZTsKIAl0RXBsT2JkQWNjZXNzIEFjY2Vzc1R5cGU7Ci0JRFdPUkQgZHdBYm9ydENvZGU7CisJdTMyIGR3QWJvcnRDb2RlOwogCiAJZHdBYm9ydENvZGUgPSAwOwogCkBAIC0xOTg3LDcgKzE5ODYsNyBAQAogCWlmIChSZXQgPT0ga0VwbE9iZFN1YmluZGV4Tm90RXhpc3QpIHsJLy8gc3ViZW50cnkgZG9lc24ndCBleGlzdAogCQlkd0Fib3J0Q29kZSA9IEVQTF9TRE9BQ19TVUJfSU5ERVhfTk9UX0VYSVNUOwogCQkvLyBzZW5kIGFib3J0Ci0JCXBTZG9Db21Db25fcC0+bV9wRGF0YSA9IChCWVRFICopICYgZHdBYm9ydENvZGU7CisJCXBTZG9Db21Db25fcC0+bV9wRGF0YSA9ICh1OCAqKSAmIGR3QWJvcnRDb2RlOwogCQlSZXQgPSBFcGxTZG9Db21TZXJ2ZXJTZW5kRnJhbWVJbnRlcm4ocFNkb0NvbUNvbl9wLAogCQkJCQkJICAgICB1aUluZGV4LAogCQkJCQkJICAgICB1aVN1YmluZGV4LApAQCAtMTk5Niw3ICsxOTk1LDcgQEAKIAl9IGVsc2UgaWYgKFJldCAhPSBrRXBsU3VjY2Vzc2Z1bCkgewkvLyBlbnRyeSBkb2Vzbid0IGV4aXN0CiAJCWR3QWJvcnRDb2RlID0gRVBMX1NET0FDX09CSkVDVF9OT1RfRVhJU1Q7CiAJCS8vIHNlbmQgYWJvcnQKLQkJcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUgKikgJiBkd0Fib3J0Q29kZTsKKwkJcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKHU4ICopICYgZHdBYm9ydENvZGU7CiAJCVJldCA9IEVwbFNkb0NvbVNlcnZlclNlbmRGcmFtZUludGVybihwU2RvQ29tQ29uX3AsCiAJCQkJCQkgICAgIHVpSW5kZXgsCiAJCQkJCQkgICAgIHVpU3ViaW5kZXgsCkBAIC0yMDE0LDcgKzIwMTMsNyBAQAogCQkJZHdBYm9ydENvZGUgPSBFUExfU0RPQUNfVU5TVVBQT1JURURfQUNDRVNTOwogCQl9CiAJCS8vIHNlbmQgYWJvcnQKLQkJcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUgKikgJiBkd0Fib3J0Q29kZTsKKwkJcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKHU4ICopICYgZHdBYm9ydENvZGU7CiAJCVJldCA9IEVwbFNkb0NvbVNlcnZlclNlbmRGcmFtZUludGVybihwU2RvQ29tQ29uX3AsCiAJCQkJCQkgICAgIHVpSW5kZXgsCiAJCQkJCQkgICAgIHVpU3ViaW5kZXgsCkBAIC0yMDUxLDcgKzIwNTAsNyBAQAogCQkvLyBlcnJvciAtPiBhYm9ydAogCQlkd0Fib3J0Q29kZSA9IEVQTF9TRE9BQ19HRU5FUkFMX0VSUk9SOwogCQkvLyBzZW5kIGFib3J0Ci0JCXBTZG9Db21Db25fcC0+bV9wRGF0YSA9IChCWVRFICopICYgZHdBYm9ydENvZGU7CisJCXBTZG9Db21Db25fcC0+bV9wRGF0YSA9ICh1OCAqKSAmIGR3QWJvcnRDb2RlOwogCQlSZXQgPSBFcGxTZG9Db21TZXJ2ZXJTZW5kRnJhbWVJbnRlcm4ocFNkb0NvbUNvbl9wLAogCQkJCQkJICAgICB1aUluZGV4LAogCQkJCQkJICAgICB1aVN1YmluZGV4LApAQCAtMjA5MCwxMSArMjA4OSwxMSBAQAogCQkJCQkJIHRFcGxTZG9Db21TZW5kVHlwZSBTZW5kVHlwZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwotCUJZVEUgYWJGcmFtZVtFUExfTUFYX1NET19GUkFNRV9TSVpFXTsKKwl1OCBhYkZyYW1lW0VQTF9NQVhfU0RPX0ZSQU1FX1NJWkVdOwogCXRFcGxGcmFtZSAqcEZyYW1lOwogCXRFcGxBc3lTZG9Db20gKnBDb21tYW5kRnJhbWU7CiAJdW5zaWduZWQgaW50IHVpU2l6ZU9mRnJhbWU7Ci0JQllURSBiRmxhZzsKKwl1OCBiRmxhZzsKIAogCVJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0yMTY3LDcgKzIxNjYsNyBAQAogCQkJCS8vIHNldCBzaXplIG9mIGZyYW1lCiAJCQkJQW1pU2V0V29yZFRvTGUoJnBDb21tYW5kRnJhbWUtPgogCQkJCQkgICAgICAgbV9sZV93U2VnbWVudFNpemUsCi0JCQkJCSAgICAgICAoV09SRCkgcFNkb0NvbUNvbl9wLT4KKwkJCQkJICAgICAgICh1MTYpIHBTZG9Db21Db25fcC0+CiAJCQkJCSAgICAgICBtX3VpVHJhbnNTaXplKTsKIAogCQkJCS8vIGNvcnJlY3QgYnl0ZS1jb3VudGVyCkBAIC0yMjk3LDcgKzIyOTYsNyBAQAogCQkJCQkvLyBzZXQgc2VnbWVudCBzaXplCiAJCQkJCUFtaVNldFdvcmRUb0xlKCZwQ29tbWFuZEZyYW1lLT4KIAkJCQkJCSAgICAgICBtX2xlX3dTZWdtZW50U2l6ZSwKLQkJCQkJCSAgICAgICAoV09SRCkgcFNkb0NvbUNvbl9wLT4KKwkJCQkJCSAgICAgICAodTE2KSBwU2RvQ29tQ29uX3AtPgogCQkJCQkJICAgICAgIG1fdWlUcmFuc1NpemUpOwogCiAJCQkJCS8vIHNlbmQgZnJhbWUKQEAgLTIzMjQsMTggKzIzMjMsMTggQEAKIAogCQkJLy8gY29weSBhYm9ydGNvZGUgdG8gZnJhbWUKIAkJCUFtaVNldER3b3JkVG9MZSgmcENvbW1hbmRGcmFtZS0+bV9sZV9hYkNvbW1hbmREYXRhWzBdLAotCQkJCQkqKChEV09SRCAqKSBwU2RvQ29tQ29uX3AtPm1fcERhdGEpKTsKKwkJCQkJKigodTMyICopIHBTZG9Db21Db25fcC0+bV9wRGF0YSkpOwogCiAJCQkvLyBzZXQgc2l6ZSBvZiBzZWdtZW50CiAJCQlBbWlTZXRXb3JkVG9MZSgmcENvbW1hbmRGcmFtZS0+bV9sZV93U2VnbWVudFNpemUsCi0JCQkJICAgICAgIHNpemVvZihEV09SRCkpOworCQkJCSAgICAgICBzaXplb2YodTMyKSk7CiAKIAkJCS8vIHVwZGF0ZSBjb3VudGVyCi0JCQlwU2RvQ29tQ29uX3AtPm1fdWlUcmFuc2ZlcnJlZEJ5dGUgPSBzaXplb2YoRFdPUkQpOworCQkJcFNkb0NvbUNvbl9wLT5tX3VpVHJhbnNmZXJyZWRCeXRlID0gc2l6ZW9mKHUzMik7CiAJCQlwU2RvQ29tQ29uX3AtPm1fdWlUcmFuc1NpemUgPSAwOwogCiAJCQkvLyBjYWxjIGZyYW1lc2l6ZQotCQkJdWlTaXplT2ZGcmFtZSArPSBzaXplb2YoRFdPUkQpOworCQkJdWlTaXplT2ZGcmFtZSArPSBzaXplb2YodTMyKTsKIAkJCVJldCA9IEVwbFNkb0FzeVNlcVNlbmREYXRhKHBTZG9Db21Db25fcC0+bV9TZG9TZXFDb25IZGwsCiAJCQkJCQkgICB1aVNpemVPZkZyYW1lLCBwRnJhbWUpOwogCQkJYnJlYWs7CkBAIC0yMzczLDggKzIzNzIsOCBAQAogCXVuc2lnbmVkIGludCB1aUJ5dGVzVG9UcmFuc2ZlcjsKIAl0RXBsT2JkU2l6ZSBFbnRyeVNpemU7CiAJdEVwbE9iZEFjY2VzcyBBY2Nlc3NUeXBlOwotCURXT1JEIGR3QWJvcnRDb2RlOwotCUJZVEUgKnBiU3JjRGF0YTsKKwl1MzIgZHdBYm9ydENvZGU7CisJdTggKnBiU3JjRGF0YTsKIAogCWR3QWJvcnRDb2RlID0gMDsKIApAQCAtMjQyNyw3ICsyNDI2LDcgQEAKIAkJcFNkb0NvbUNvbl9wLT5tX2R3TGFzdEFib3J0Q29kZSA9IEVQTF9TRE9BQ19TVUJfSU5ERVhfTk9UX0VYSVNUOwogCQkvLyBzZW5kIGFib3J0CiAJCS8vIGQuay4gVGhpcyBpcyB3cm9uZzogay50LiBub3QgbmVlZGVkIHNlbmQgYWJvcnQgb24gZW5kIG9mIHdyaXRlCi0JCS8qcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUqKXBTZG9Db21Db25fcC0+bV9kd0xhc3RBYm9ydENvZGU7CisJCS8qcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKHU4KilwU2RvQ29tQ29uX3AtPm1fZHdMYXN0QWJvcnRDb2RlOwogCQkgICBSZXQgPSBFcGxTZG9Db21TZXJ2ZXJTZW5kRnJhbWVJbnRlcm4ocFNkb0NvbUNvbl9wLAogCQkgICB1aUluZGV4LAogCQkgICB1aVN1YmluZGV4LApAQCAtMjQzOCw3ICsyNDM3LDcgQEAKIAkJLy8gc2VuZCBhYm9ydAogCQkvLyBkLmsuIFRoaXMgaXMgd3Jvbmc6IGsudC4gbm90IG5lZWRlZCBzZW5kIGFib3J0IG9uIGVuZCBvZiB3cml0ZQogCQkvKgotCQkgICBwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAoQllURSopJmR3QWJvcnRDb2RlOworCQkgICBwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAodTgqKSZkd0Fib3J0Q29kZTsKIAkJICAgUmV0ID0gRXBsU2RvQ29tU2VydmVyU2VuZEZyYW1lSW50ZXJuKHBTZG9Db21Db25fcCwKIAkJICAgdWlJbmRleCwKIAkJICAgdWlTdWJpbmRleCwKQEAgLTI0NTgsNyArMjQ1Nyw3IEBACiAJCX0KIAkJLy8gc2VuZCBhYm9ydAogCQkvLyBkLmsuIFRoaXMgaXMgd3Jvbmc6IGsudC4gbm90IG5lZWRlZCBzZW5kIGFib3J0IG9uIGVuZCBvZiB3cml0ZQotCQkvKnBTZG9Db21Db25fcC0+bV9wRGF0YSA9IChCWVRFKikmZHdBYm9ydENvZGU7CisJCS8qcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKHU4KikmZHdBYm9ydENvZGU7CiAJCSAgIFJldCA9IEVwbFNkb0NvbVNlcnZlclNlbmRGcmFtZUludGVybihwU2RvQ29tQ29uX3AsCiAJCSAgIHVpSW5kZXgsCiAJCSAgIHVpU3ViaW5kZXgsCkBAIC0yNTQ5LDcgKzI1NDgsNyBAQAogCQkJICAgIEVQTF9TRE9BQ19EQVRBX1RZUEVfTEVOR1RIX1RPT19ISUdIOwogCQkJLy8gc2VuZCBhYm9ydAogCQkJLy8gZC5rLiBUaGlzIGlzIHdyb25nOiBrLnQuIG5vdCBuZWVkZWQgc2VuZCBhYm9ydCBvbiBlbmQgb2Ygd3JpdGUKLQkJCS8qcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUqKSZkd0Fib3J0Q29kZTsKKwkJCS8qcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKHU4KikmZHdBYm9ydENvZGU7CiAJCQkgICBSZXQgPSBFcGxTZG9Db21TZXJ2ZXJTZW5kRnJhbWVJbnRlcm4ocFNkb0NvbUNvbl9wLAogCQkJICAgdWlJbmRleCwKIAkJCSAgIHVpU3ViaW5kZXgsCkBAIC0yNTcxLDcgKzI1NzAsNyBAQAogCQkJICAgIEVQTF9TRE9BQ19HRU5FUkFMX0VSUk9SOwogCQkJLy8gc2VuZCBhYm9ydAogCQkJLy8gZC5rLiBUaGlzIGlzIHdyb25nOiBrLnQuIG5vdCBuZWVkZWQgc2VuZCBhYm9ydCBvbiBlbmQgb2Ygd3JpdGUKLS8qICAgICAgICAgICAgcFNkb0NvbUNvbl9wLT5tX3BEYXRhID0gKEJZVEUqKSZwU2RvQ29tQ29uX3AtPm1fZHdMYXN0QWJvcnRDb2RlOworLyogICAgICAgICAgICBwU2RvQ29tQ29uX3AtPm1fcERhdGEgPSAodTgqKSZwU2RvQ29tQ29uX3AtPm1fZHdMYXN0QWJvcnRDb2RlOwogICAgICAgICAgICAgUmV0ID0gRXBsU2RvQ29tU2VydmVyU2VuZEZyYW1lSW50ZXJuKHBTZG9Db21Db25fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpU3ViaW5kZXgsCkBAIC0yNTg2LDcgKzI1ODUsNyBAQAogCQlwU2RvQ29tQ29uX3AtPm1fdWlUcmFuc1NpemUgLT0gdWlCeXRlc1RvVHJhbnNmZXI7CiAKIAkJLy8gdXBkYXRlIHRhcmdldCBwb2ludGVyCi0JCSggLyooQllURSopICovIHBTZG9Db21Db25fcC0+bV9wRGF0YSkgKz0gdWlCeXRlc1RvVHJhbnNmZXI7CisJCSggLyoodTgqKSAqLyBwU2RvQ29tQ29uX3AtPm1fcERhdGEpICs9IHVpQnl0ZXNUb1RyYW5zZmVyOwogCiAJCS8vIHNlbmQgYWNrbm93bGVkZ2Ugd2l0aG91dCBhbnkgQ29tbWFuZCBsYXllciBkYXRhCiAJCVJldCA9IEVwbFNkb0FzeVNlcVNlbmREYXRhKHBTZG9Db21Db25fcC0+bV9TZG9TZXFDb25IZGwsCkBAIC0yNTk4LDcgKzI1OTcsNyBAQAogCWlmIChwU2RvQ29tQ29uX3AtPm1fZHdMYXN0QWJvcnRDb2RlICE9IDApIHsKIAkJLy8gc2VuZCBhYm9ydAogCQlwU2RvQ29tQ29uX3AtPm1fcERhdGEgPQotCQkgICAgKEJZVEUgKikgJiBwU2RvQ29tQ29uX3AtPm1fZHdMYXN0QWJvcnRDb2RlOworCQkgICAgKHU4ICopICYgcFNkb0NvbUNvbl9wLT5tX2R3TGFzdEFib3J0Q29kZTsKIAkJUmV0ID0KIAkJICAgIEVwbFNkb0NvbVNlcnZlclNlbmRGcmFtZUludGVybihwU2RvQ29tQ29uX3AsIHVpSW5kZXgsCiAJCQkJCQkgICB1aVN1YmluZGV4LApAQCAtMjYzNSwxMiArMjYzNCwxMiBAQAogc3RhdGljIHRFcGxLZXJuZWwgRXBsU2RvQ29tQ2xpZW50U2VuZCh0RXBsU2RvQ29tQ29uICogcFNkb0NvbUNvbl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwotCUJZVEUgYWJGcmFtZVtFUExfTUFYX1NET19GUkFNRV9TSVpFXTsKKwl1OCBhYkZyYW1lW0VQTF9NQVhfU0RPX0ZSQU1FX1NJWkVdOwogCXRFcGxGcmFtZSAqcEZyYW1lOwogCXRFcGxBc3lTZG9Db20gKnBDb21tYW5kRnJhbWU7CiAJdW5zaWduZWQgaW50IHVpU2l6ZU9mRnJhbWU7Ci0JQllURSBiRmxhZ3M7Ci0JQllURSAqcGJQYXlsb2FkOworCXU4IGJGbGFnczsKKwl1OCAqcGJQYXlsb2FkOwogCiAJUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAKQEAgLTI2ODAsMTEgKzI2NzksMTEgQEAKIAogCQkJCQkvLyBjcmVhdGUgY29tbWFuZCBoZWFkZXIKIAkJCQkJQW1pU2V0V29yZFRvTGUocGJQYXlsb2FkLAotCQkJCQkJICAgICAgIChXT1JEKSBwU2RvQ29tQ29uX3AtPgorCQkJCQkJICAgICAgICh1MTYpIHBTZG9Db21Db25fcC0+CiAJCQkJCQkgICAgICAgbV91aVRhcmdldEluZGV4KTsKIAkJCQkJcGJQYXlsb2FkICs9IDI7CiAJCQkJCUFtaVNldEJ5dGVUb0xlKHBiUGF5bG9hZCwKLQkJCQkJCSAgICAgICAoQllURSkgcFNkb0NvbUNvbl9wLT4KKwkJCQkJCSAgICAgICAodTgpIHBTZG9Db21Db25fcC0+CiAJCQkJCQkgICAgICAgbV91aVRhcmdldFN1YkluZGV4KTsKIAkJCQkJLy8gY2FsYyBzaXplCiAJCQkJCXVpU2l6ZU9mRnJhbWUgKz0gNDsKQEAgLTI3MjEsMTIgKzI3MjAsMTIgQEAKIAkJCQkJCQkgICAgICAgYkZsYWdzKTsKIAkJCQkJCS8vIGNyZWF0ZSBjb21tYW5kIGhlYWRlcgogCQkJCQkJQW1pU2V0V29yZFRvTGUocGJQYXlsb2FkLAotCQkJCQkJCSAgICAgICAoV09SRCkKKwkJCQkJCQkgICAgICAgKHUxNikKIAkJCQkJCQkgICAgICAgcFNkb0NvbUNvbl9wLT4KIAkJCQkJCQkgICAgICAgbV91aVRhcmdldEluZGV4KTsKIAkJCQkJCXBiUGF5bG9hZCArPSAyOwogCQkJCQkJQW1pU2V0Qnl0ZVRvTGUocGJQYXlsb2FkLAotCQkJCQkJCSAgICAgICAoQllURSkKKwkJCQkJCQkgICAgICAgKHU4KQogCQkJCQkJCSAgICAgICBwU2RvQ29tQ29uX3AtPgogCQkJCQkJCSAgICAgICBtX3VpVGFyZ2V0U3ViSW5kZXgpOwogCQkJCQkJLy8gb24gYnl0ZSBmb3IgcmVzZXJ2ZWQKQEAgLTI3NjAsMTIgKzI3NTksMTIgQEAKIAogCQkJCQkJLy8gY3JlYXRlIGNvbW1hbmQgaGVhZGVyCiAJCQkJCQlBbWlTZXRXb3JkVG9MZShwYlBheWxvYWQsCi0JCQkJCQkJICAgICAgIChXT1JEKQorCQkJCQkJCSAgICAgICAodTE2KQogCQkJCQkJCSAgICAgICBwU2RvQ29tQ29uX3AtPgogCQkJCQkJCSAgICAgICBtX3VpVGFyZ2V0SW5kZXgpOwogCQkJCQkJcGJQYXlsb2FkICs9IDI7CiAJCQkJCQlBbWlTZXRCeXRlVG9MZShwYlBheWxvYWQsCi0JCQkJCQkJICAgICAgIChCWVRFKQorCQkJCQkJCSAgICAgICAodTgpCiAJCQkJCQkJICAgICAgIHBTZG9Db21Db25fcC0+CiAJCQkJCQkJICAgICAgIG1fdWlUYXJnZXRTdWJJbmRleCk7CiAJCQkJCQkvLyArIDIgLT4gb25lIGJ5dGUgZm9yIHN1YmluZGV4IGFuZCBvbmUgYnl0ZSByZXNlcnZlZApAQCAtMjc4NCw3ICsyNzgzLDcgQEAKIAkJCQkJCS8vIGZpbGwgcmVzdCBvZiBoZWFkZXIKIAkJCQkJCUFtaVNldFdvcmRUb0xlKCZwQ29tbWFuZEZyYW1lLT4KIAkJCQkJCQkgICAgICAgbV9sZV93U2VnbWVudFNpemUsCi0JCQkJCQkJICAgICAgIChXT1JEKSAoNCArCisJCQkJCQkJICAgICAgICh1MTYpICg0ICsKIAkJCQkJCQkJICAgICAgIHBTZG9Db21Db25fcC0+CiAJCQkJCQkJCSAgICAgICBtX3VpVHJhbnNTaXplKSk7CiAKQEAgLTI4NTUsNyArMjg1NCw3IEBACiAJCQkJCQkJQW1pU2V0V29yZFRvTGUKIAkJCQkJCQkgICAgKCZwQ29tbWFuZEZyYW1lLT4KIAkJCQkJCQkgICAgIG1fbGVfd1NlZ21lbnRTaXplLAotCQkJCQkJCSAgICAgKFdPUkQpCisJCQkJCQkJICAgICAodTE2KQogCQkJCQkJCSAgICAgcFNkb0NvbUNvbl9wLT4KIAkJCQkJCQkgICAgIG1fdWlUcmFuc1NpemUpOwogCQkJCQkJCWJGbGFncyA9IDB4MzA7CkBAIC0yOTQ0LDcgKzI5NDMsNyBAQAogCQkJCQkgICAgICB0RXBsQXN5U2RvQ29tICogcEFzeVNkb0NvbV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwotCUJZVEUgYkJ1ZmZlcjsKKwl1OCBiQnVmZmVyOwogCXVuc2lnbmVkIGludCB1aUJ1ZmZlcjsKIAl1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZTsKIAl1bnNpZ25lZCBsb25nIHVsQnVmZmVyOwpAQCAtMzIxNywxMCArMzIxNiwxMCBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPQykpICE9IDApCiBzdGF0aWMgdEVwbEtlcm5lbCBFcGxTZG9Db21DbGllbnRTZW5kQWJvcnQodEVwbFNkb0NvbUNvbiAqIHBTZG9Db21Db25fcCwKLQkJCQkJICAgRFdPUkQgZHdBYm9ydENvZGVfcCkKKwkJCQkJICAgdTMyIGR3QWJvcnRDb2RlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7Ci0JQllURSBhYkZyYW1lW0VQTF9NQVhfU0RPX0ZSQU1FX1NJWkVdOworCXU4IGFiRnJhbWVbRVBMX01BWF9TRE9fRlJBTUVfU0laRV07CiAJdEVwbEZyYW1lICpwRnJhbWU7CiAJdEVwbEFzeVNkb0NvbSAqcENvbW1hbmRGcmFtZTsKIAl1bnNpZ25lZCBpbnQgdWlTaXplT2ZGcmFtZTsKQEAgLTMyNTAsMTQgKzMyNDksMTQgQEAKIAlBbWlTZXREd29yZFRvTGUoJnBDb21tYW5kRnJhbWUtPm1fbGVfYWJDb21tYW5kRGF0YVswXSwgZHdBYm9ydENvZGVfcCk7CiAKIAkvLyBzZXQgc2l6ZSBvZiBzZWdtZW50Ci0JQW1pU2V0V29yZFRvTGUoJnBDb21tYW5kRnJhbWUtPm1fbGVfd1NlZ21lbnRTaXplLCBzaXplb2YoRFdPUkQpKTsKKwlBbWlTZXRXb3JkVG9MZSgmcENvbW1hbmRGcmFtZS0+bV9sZV93U2VnbWVudFNpemUsIHNpemVvZih1MzIpKTsKIAogCS8vIHVwZGF0ZSBjb3VudGVyCi0JcFNkb0NvbUNvbl9wLT5tX3VpVHJhbnNmZXJyZWRCeXRlID0gc2l6ZW9mKERXT1JEKTsKKwlwU2RvQ29tQ29uX3AtPm1fdWlUcmFuc2ZlcnJlZEJ5dGUgPSBzaXplb2YodTMyKTsKIAlwU2RvQ29tQ29uX3AtPm1fdWlUcmFuc1NpemUgPSAwOwogCiAJLy8gY2FsYyBmcmFtZXNpemUKLQl1aVNpemVPZkZyYW1lICs9IHNpemVvZihEV09SRCk7CisJdWlTaXplT2ZGcmFtZSArPSBzaXplb2YodTMyKTsKIAogCS8vIHNhdmUgYWJvcnQgY29kZQogCXBTZG9Db21Db25fcC0+bV9kd0xhc3RBYm9ydENvZGUgPSBkd0Fib3J0Q29kZV9wOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTZG9VZHB1LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb1VkcHUuYwppbmRleCBiZTUyMjMzLi5iNDA5YzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb1VkcHUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFNkb1VkcHUuYwpAQCAtNzIsMTEgKzcyLDkgQEAKIAogI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPX1VEUCkpICE9IDApCiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAjaW5jbHVkZSAiU29ja2V0TGludXhLZXJuZWwuaCIKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNlbmRpZgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTExMCwxNyArMTA4LDkgQEAKIAl0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIG1fZnBTZG9Bc3lTZXFDYjsKIAlTT0NLRVQgbV9VZHBTb2NrZXQ7CiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCUhBTkRMRSBtX1RocmVhZEhhbmRsZTsKLQlMUENSSVRJQ0FMX1NFQ1RJT04gbV9wQ3JpdGljYWxTZWN0aW9uOwotCUNSSVRJQ0FMX1NFQ1RJT04gbV9Dcml0aWNhbFNlY3Rpb247Ci0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKIAlzdHJ1Y3QgY29tcGxldGlvbiBtX0NvbXBsZXRpb25VZHBUaHJlYWQ7CiAJaW50IG1fVGhyZWFkSGFuZGxlOwogCWludCBtX2lUZXJtaW5hdGVUaHJlYWQ7Ci0jZW5kaWYKLQogfSB0RXBsU2RvVWRwSW5zdGFuY2U7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzMsMTIgKzEyMyw3IEBACiAvLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLXN0YXRpYyBEV09SRCBQVUJMSUMgRXBsU2RvVWRwVGhyZWFkKExQVk9JRCBscFBhcmFtZXRlcik7Ci0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKIHN0YXRpYyBpbnQgRXBsU2RvVWRwVGhyZWFkKHZvaWQgKnBBcmdfcCk7Ci0jZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNzcsNyArMTYyLDcgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1SW5pdCh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApCit0RXBsS2VybmVsIEVwbFNkb1VkcHVJbml0KHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjA1LDE2ICsxOTAsMTAgQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1QWRkSW5zdGFuY2UodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKQordEVwbEtlcm5lbCBFcGxTZG9VZHB1QWRkSW5zdGFuY2UodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQlpbnQgaUVycm9yOwotCVdTQURBVEEgV3NhOwotCi0jZW5kaWYKLQogCS8vIHNldCBpbnN0YW5jZSB2YXJpYWJsZXMgdG8gMAogCUVQTF9NRU1TRVQoJlNkb1VkcEluc3RhbmNlX2csIDB4MDAsIHNpemVvZihTZG9VZHBJbnN0YW5jZV9nKSk7CiAKQEAgLTIyOCwyNCArMjA3LDggQEAKIAkJZ290byBFeGl0OwogCX0KIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JLy8gc3RhcnQgd2luc29jazIgZm9yIHdpbjMyCi0JLy8gd2luZG93cyBzcGVjaWZpYyBzdGFydCBvZiBzb2NrZXQKLQlpRXJyb3IgPSBXU0FTdGFydHVwKE1BS0VXT1JEKDIsIDApLCAmV3NhKTsKLQlpZiAoaUVycm9yICE9IDApIHsKLQkJUmV0ID0ga0VwbFNkb1VkcE5vU29ja2V0OwotCQlnb3RvIEV4aXQ7Ci0JfQotCS8vIGNyZWF0ZSBjcml0aWNhbCBzZWN0aW9uIGZvciBhY2NjZXNzIG9mIGluc3RuYWNlIHZhcmlhYmxlcwotCVNkb1VkcEluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uID0KLQkgICAgJlNkb1VkcEluc3RhbmNlX2cubV9Dcml0aWNhbFNlY3Rpb247Ci0JSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbihTZG9VZHBJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbik7Ci0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKIAlpbml0X2NvbXBsZXRpb24oJlNkb1VkcEluc3RhbmNlX2cubV9Db21wbGV0aW9uVWRwVGhyZWFkKTsKIAlTZG9VZHBJbnN0YW5jZV9nLm1faVRlcm1pbmF0ZVRocmVhZCA9IDA7Ci0jZW5kaWYKLQogCVNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUgPSAwOwogCVNkb1VkcEluc3RhbmNlX2cubV9VZHBTb2NrZXQgPSBJTlZBTElEX1NPQ0tFVDsKIApAQCAtMjczLDMyICsyMzYsMTggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1RGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxTZG9VZHB1RGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JQk9PTCBmVGVybUVycm9yOwotI2VuZGlmCi0KIAlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAogCWlmIChTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlICE9IDApIHsJLy8gbGlzdGVuIHRocmVhZCB3YXMgc3RhcnRlZAogCQkvLyBjbG9zZSB0aHJlYWQKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCQlmVGVybUVycm9yID0KLQkJICAgIFRlcm1pbmF0ZVRocmVhZChTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlLCAwKTsKLQkJaWYgKGZUZXJtRXJyb3IgPT0gRkFMU0UpIHsKLQkJCVJldCA9IGtFcGxTZG9VZHBUaHJlYWRFcnJvcjsKLQkJCWdvdG8gRXhpdDsKLQkJfQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogCQlTZG9VZHBJbnN0YW5jZV9nLm1faVRlcm1pbmF0ZVRocmVhZCA9IDE7CiAJCS8qIGtpbGxfcHJvYyhTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlLCBTSUdURVJNLCAxICk7ICovCiAJCXNlbmRfc2lnKFNJR1RFUk0sIFNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUsIDEpOwogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZTZG9VZHBJbnN0YW5jZV9nLm1fQ29tcGxldGlvblVkcFRocmVhZCk7Ci0jZW5kaWYKLQogCQlTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlID0gMDsKIAl9CiAKQEAgLTMwNywxOSArMjU2LDYgQEAKIAkJY2xvc2Vzb2NrZXQoU2RvVWRwSW5zdGFuY2VfZy5tX1VkcFNvY2tldCk7CiAJCVNkb1VkcEluc3RhbmNlX2cubV9VZHBTb2NrZXQgPSBJTlZBTElEX1NPQ0tFVDsKIAl9Ci0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQkvLyBkZWxldGUgY3JpdGljYWwgc2VjdGlvbgotCURlbGV0ZUNyaXRpY2FsU2VjdGlvbihTZG9VZHBJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbik7Ci0jZW5kaWYKLQotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JLy8gZm9yIHdpbiAzMgotCVdTQUNsZWFudXAoKTsKLSNlbmRpZgotCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLSAgICAgIEV4aXQ6Ci0jZW5kaWYKIAlyZXR1cm4gUmV0OwogfQogCkBAIC0zNDAsMTggKzI3NiwxMiBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVDb25maWcodW5zaWduZWQgbG9uZyB1bElwQWRkcl9wLAotCQkJCSAgIHVuc2lnbmVkIGludCB1aVBvcnRfcCkKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdUNvbmZpZyh1bnNpZ25lZCBsb25nIHVsSXBBZGRyX3AsIHVuc2lnbmVkIGludCB1aVBvcnRfcCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gQWRkcjsKIAlpbnQgaUVycm9yOwogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQlCT09MIGZUZXJtRXJyb3I7Ci0JdW5zaWduZWQgbG9uZyB1bFRocmVhZElkOwotI2VuZGlmCi0KIAlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAogCWlmICh1aVBvcnRfcCA9PSAwKSB7CS8vIHNldCBVRFAgcG9ydCB0byBkZWZhdWx0IHBvcnQgbnVtYmVyCkBAIC0zNjQsMjEgKzI5NCwxMSBAQAogCWlmIChTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlICE9IDApIHsJLy8gbGlzdGVuIHRocmVhZCB3YXMgc3RhcnRlZAogCiAJCS8vIGNsb3NlIG9sZCB0aHJlYWQKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCQlmVGVybUVycm9yID0KLQkJICAgIFRlcm1pbmF0ZVRocmVhZChTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlLCAwKTsKLQkJaWYgKGZUZXJtRXJyb3IgPT0gRkFMU0UpIHsKLQkJCVJldCA9IGtFcGxTZG9VZHBUaHJlYWRFcnJvcjsKLQkJCWdvdG8gRXhpdDsKLQkJfQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogCQlTZG9VZHBJbnN0YW5jZV9nLm1faVRlcm1pbmF0ZVRocmVhZCA9IDE7CiAJCS8qIGtpbGxfcHJvYyhTZG9VZHBJbnN0YW5jZV9nLm1fVGhyZWFkSGFuZGxlLCBTSUdURVJNLCAxICk7ICovCiAJCXNlbmRfc2lnKFNJR1RFUk0sIFNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUsIDEpOwogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZTZG9VZHBJbnN0YW5jZV9nLm1fQ29tcGxldGlvblVkcFRocmVhZCk7CiAJCVNkb1VkcEluc3RhbmNlX2cubV9pVGVybWluYXRlVGhyZWFkID0gMDsKLSNlbmRpZgotCiAJCVNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUgPSAwOwogCX0KIApAQCAtNDEzLDI4ICszMzMsMTIgQEAKIAkJZ290byBFeGl0OwogCX0KIAkvLyBjcmVhdGUgTGlzdGVuLVRocmVhZAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JLy8gZm9yIHdpbjMyCi0KLQkvLyBjcmVhdGUgdGhyZWFkCi0JU2RvVWRwSW5zdGFuY2VfZy5tX1RocmVhZEhhbmRsZSA9IENyZWF0ZVRocmVhZChOVUxMLAotCQkJCQkJICAgICAgIDAsCi0JCQkJCQkgICAgICAgRXBsU2RvVWRwVGhyZWFkLAotCQkJCQkJICAgICAgICZTZG9VZHBJbnN0YW5jZV9nLAotCQkJCQkJICAgICAgIDAsICZ1bFRocmVhZElkKTsKLQlpZiAoU2RvVWRwSW5zdGFuY2VfZy5tX1RocmVhZEhhbmRsZSA9PSBOVUxMKSB7Ci0JCVJldCA9IGtFcGxTZG9VZHBUaHJlYWRFcnJvcjsKLQkJZ290byBFeGl0OwotCX0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKLQogCVNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUgPQogCSAgICBrZXJuZWxfdGhyZWFkKEVwbFNkb1VkcFRocmVhZCwgJlNkb1VkcEluc3RhbmNlX2csIENMT05FX0tFUk5FTCk7CiAJaWYgKFNkb1VkcEluc3RhbmNlX2cubV9UaHJlYWRIYW5kbGUgPT0gMCkgewogCQlSZXQgPSBrRXBsU2RvVWRwVGhyZWFkRXJyb3I7CiAJCWdvdG8gRXhpdDsKIAl9Ci0jZW5kaWYKIAogICAgICAgRXhpdDoKIAlyZXR1cm4gUmV0OwpAQCAtNDU5LDggKzM2Myw4IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdUluaXRDb24odEVwbFNkb0NvbkhkbCAqIHBTZG9Db25IYW5kbGVfcCwKLQkJCQkgICAgdW5zaWduZWQgaW50IHVpVGFyZ2V0Tm9kZUlkX3ApCit0RXBsS2VybmVsIEVwbFNkb1VkcHVJbml0Q29uKHRFcGxTZG9Db25IZGwgKnBTZG9Db25IYW5kbGVfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpVGFyZ2V0Tm9kZUlkX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpQ291bnQ7CkBAIC01MjYsOCArNDMwLDggQEAKIC8vIFN0YXRlOgogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1U2VuZERhdGEodEVwbFNkb0NvbkhkbCBTZG9Db25IYW5kbGVfcCwKLQkJCQkgICAgIHRFcGxGcmFtZSAqIHBTcmNEYXRhX3AsIERXT1JEIGR3RGF0YVNpemVfcCkKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdVNlbmREYXRhKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3AsCisJCQkgICAgICB0RXBsRnJhbWUgKnBTcmNEYXRhX3AsIHUzMiBkd0RhdGFTaXplX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJaW50IGlFcnJvcjsKQEAgLTU1MywyMiArNDU3LDEyIEBACiAKIAkvLyBjYWxsIHNlbmR0bwogCUFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQkvLyBlbnRlciAgY3JpdGljYWwgc2VjdGlvbiBmb3IgcHJvY2VzcyBmdW5jdGlvbgotCUVudGVyQ3JpdGljYWxTZWN0aW9uKFNkb1VkcEluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLSNlbmRpZgotCiAJQWRkci5zaW5fcG9ydCA9CiAJICAgICh1bnNpZ25lZCBzaG9ydClTZG9VZHBJbnN0YW5jZV9nLm1fYVNkb0Fic1VkcENvbm5lY3Rpb25bdWlBcnJheV0uCiAJICAgIG1fdWlQb3J0OwogCUFkZHIuc2luX2FkZHIuc19hZGRyID0KIAkgICAgU2RvVWRwSW5zdGFuY2VfZy5tX2FTZG9BYnNVZHBDb25uZWN0aW9uW3VpQXJyYXldLm1fdWxJcEFkZHI7CiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCS8vIGxlYXZlIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHByb2Nlc3MgZnVuY3Rpb24KLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbihTZG9VZHBJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbik7Ci0jZW5kaWYKLQogCWlFcnJvciA9IHNlbmR0byhTZG9VZHBJbnN0YW5jZV9nLm1fVWRwU29ja2V0LAkvLyBzb2NrZXRoYW5kbGUKIAkJCShjb25zdCBjaGFyICopJnBTcmNEYXRhX3AtPm1fbGVfYk1lc3NhZ2VUeXBlLAkvLyBkYXRhIHRvIHNlbmQKIAkJCWR3RGF0YVNpemVfcCwJLy8gbnVtYmVyIG9mIGJ5dGVzIHRvIHNlbmQKQEAgLTYwMyw3ICs0OTcsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb1VkcHVEZWxDb24odEVwbFNkb0NvbkhkbCBTZG9Db25IYW5kbGVfcCkKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdURlbENvbih0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUFycmF5OwpAQCAtNjQyLDE3ICs1MzYsMTMgQEAKIC8vIFBhcmFtZXRlcnM6ICAgICAgbHBQYXJhbWV0ZXIgPSBwb2ludGVyIHRvIHBhcmFtZXRlciB0eXBlIHRFcGxTZG9VZHBUaHJlYWRQYXJhCiAvLwogLy8KLS8vIFJldHVybnM6ICAgICAgICAgRFdPUkQgICA9ICAgZXJyb3Jjb2RlCisvLyBSZXR1cm5zOiAgICAgICAgIHUzMiAgID0gICBlcnJvcmNvZGUKIC8vCiAvLwogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotc3RhdGljIERXT1JEIFBVQkxJQyBFcGxTZG9VZHBUaHJlYWQoTFBWT0lEIGxwUGFyYW1ldGVyKQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQogc3RhdGljIGludCBFcGxTZG9VZHBUaHJlYWQodm9pZCAqcEFyZ19wKQotI2VuZGlmCiB7CiAKIAl0RXBsU2RvVWRwSW5zdGFuY2UgKnBJbnN0YW5jZTsKQEAgLTY2MCwyMSArNTUwLDE1IEBACiAJaW50IGlFcnJvcjsKIAlpbnQgaUNvdW50OwogCWludCBpRnJlZUVudHJ5OwotCUJZVEUgYWJCdWZmZXJbRVBMX01BWF9TRE9fUkVDX0ZSQU1FX1NJWkVdOworCXU4IGFiQnVmZmVyW0VQTF9NQVhfU0RPX1JFQ19GUkFNRV9TSVpFXTsKIAl1bnNpZ25lZCBpbnQgdWlTaXplOwogCXRFcGxTZG9Db25IZGwgU2RvQ29uSGRsOwogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQlwSW5zdGFuY2UgPSAodEVwbFNkb1VkcEluc3RhbmNlICopIGxwUGFyYW1ldGVyOwotCi0JZm9yICg7OykKLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pICYmIGRlZmluZWQoX19LRVJORUxfXykKIAlwSW5zdGFuY2UgPSAodEVwbFNkb1VkcEluc3RhbmNlICopIHBBcmdfcDsKIAlkYWVtb25pemUoIkVwbFNkb1VkcFRocmVhZCIpOwogCWFsbG93X3NpZ25hbChTSUdURVJNKTsKIAogCWZvciAoOyBwSW5zdGFuY2UtPm1faVRlcm1pbmF0ZVRocmVhZCA9PSAwOykKLSNlbmRpZgogCiAJewogCQkvLyB3YWl0IGZvciBkYXRhCkBAIC02ODUsMjAgKzU2OSwxMyBAQAogCQkJCSAgMCwJLy8gZmxhZ3MKIAkJCQkgIChzdHJ1Y3Qgc29ja2FkZHIgKikmUmVtb3RlQWRkciwKIAkJCQkgIChpbnQgKikmdWlTaXplKTsKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAJCWlmIChpRXJyb3IgPT0gLUVSRVNUQVJUU1lTKSB7CiAJCQlicmVhazsKIAkJfQotI2VuZGlmCiAJCWlmIChpRXJyb3IgPiAwKSB7CiAJCQkvLyBnZXQgaGFuZGxlIGZvciBoaWdoZXIgbGF5ZXIKIAkJCWlDb3VudCA9IDA7CiAJCQlpRnJlZUVudHJ5ID0gMHhGRkZGOwotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JCQkvLyBlbnRlciAgY3JpdGljYWwgc2VjdGlvbiBmb3IgcHJvY2VzcyBmdW5jdGlvbgotCQkJRW50ZXJDcml0aWNhbFNlY3Rpb24oU2RvVWRwSW5zdGFuY2VfZy4KLQkJCQkJICAgICBtX3BDcml0aWNhbFNlY3Rpb24pOwotI2VuZGlmCiAJCQl3aGlsZSAoaUNvdW50IDwgRVBMX1NET19NQVhfQ09OTkVDVElPTl9VRFApIHsKIAkJCQkvLyBjaGVjayBpZiB0aGlzIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBrbm93bgogCQkJCWlmICgocEluc3RhbmNlLT5tX2FTZG9BYnNVZHBDb25uZWN0aW9uW2lDb3VudF0uCkBAIC03MzQsMTEgKzYxMSw2IEBACiAJCQkJCXBJbnN0YW5jZS0+CiAJCQkJCSAgICBtX2FTZG9BYnNVZHBDb25uZWN0aW9uW2lGcmVlRW50cnldLgogCQkJCQkgICAgbV91aVBvcnQgPSBSZW1vdGVBZGRyLnNpbl9wb3J0OwotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0JCQkJCS8vIGxlYXZlIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHByb2Nlc3MgZnVuY3Rpb24KLQkJCQkJTGVhdmVDcml0aWNhbFNlY3Rpb24oU2RvVWRwSW5zdGFuY2VfZy4KLQkJCQkJCQkgICAgIG1fcENyaXRpY2FsU2VjdGlvbik7Ci0jZW5kaWYKIAkJCQkJLy8gY2FsbCBjYWxsYmFjawogCQkJCQlTZG9Db25IZGwgPSBpRnJlZUVudHJ5OwogCQkJCQlTZG9Db25IZGwgfD0gRVBMX1NET19VRFBfSEFORExFOwpAQCAtNzUyLDExICs2MjQsNiBAQAogCQkJCX0gZWxzZSB7CiAJCQkJCUVQTF9EQkdMVkxfU0RPX1RSQUNFMAogCQkJCQkgICAgKCJFcnJvciBpbiBFcGxTZG9VZHBUaHJlYWQoKSBubyBmcmVlIGhhbmRsZVxuIik7Ci0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLQkJCQkJLy8gbGVhdmUgY3JpdGljYWwgc2VjdGlvbiBmb3IgcHJvY2VzcyBmdW5jdGlvbgotCQkJCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbihTZG9VZHBJbnN0YW5jZV9nLgotCQkJCQkJCSAgICAgbV9wQ3JpdGljYWxTZWN0aW9uKTsKLSNlbmRpZgogCQkJCX0KIAogCQkJfSBlbHNlIHsKQEAgLTc2NCwxMSArNjMxLDYgQEAKIAkJCQkvLyBjYWxsIGNhbGxiYWNrIHdpdGggY29ycmVjdCBoYW5kbGUKIAkJCQlTZG9Db25IZGwgPSBpQ291bnQ7CiAJCQkJU2RvQ29uSGRsIHw9IEVQTF9TRE9fVURQX0hBTkRMRTsKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCQkJCS8vIGxlYXZlIGNyaXRpY2FsIHNlY3Rpb24gZm9yIHByb2Nlc3MgZnVuY3Rpb24KLQkJCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbihTZG9VZHBJbnN0YW5jZV9nLgotCQkJCQkJICAgICBtX3BDcml0aWNhbFNlY3Rpb24pOwotI2VuZGlmCiAJCQkJLy8gb2Zmc2V0IDQgLT4gc3RhcnQgb2YgU0RPIFNlcXVlbmNlIGhlYWRlcgogCQkJCXBJbnN0YW5jZS0+bV9mcFNkb0FzeVNlcUNiKFNkb0NvbkhkbCwKIAkJCQkJCQkgICAodEVwbEFzeVNkb1NlcSAqKSAmCkBAIC03NzgsMTAgKzY0MCw3IEBACiAJCX0JCS8vIGVuZCBvZiAgaWYoaUVycm9yIT1TT0NLRVRfRVJST1IpCiAJfQkJCS8vIGVuZCBvZiBmb3IoOzspCiAKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAJY29tcGxldGVfYW5kX2V4aXQoJlNkb1VkcEluc3RhbmNlX2cubV9Db21wbGV0aW9uVWRwVGhyZWFkLCAwKTsKLSNlbmRpZgotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsU3RhdHVzdS5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTdGF0dXN1LmMKaW5kZXggNjg5ZjkxMi4uYjI5MTM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTdGF0dXN1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxTdGF0dXN1LmMKQEAgLTEzNyw4ICsxMzcsNyBAQAogLy8gbG9jYWwgZnVuY3Rpb24gcHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VDYlN0YXR1c1Jlc3BvbnNlKHRFcGxGcmFtZUluZm8gKgotCQkJCQkJICAgIHBGcmFtZUluZm9fcCk7CitzdGF0aWMgdEVwbEtlcm5lbCBFcGxTdGF0dXN1Q2JTdGF0dXNSZXNwb25zZSh0RXBsRnJhbWVJbmZvICpwRnJhbWVJbmZvX3ApOwogCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KQEAgLTE2NCw3ICsxNjMsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxTdGF0dXN1SW5pdCgpCit0RXBsS2VybmVsIEVwbFN0YXR1c3VJbml0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE5MSw3ICsxOTAsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxTdGF0dXN1QWRkSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxTdGF0dXN1QWRkSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMjI4LDcgKzIyNyw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VEZWxJbnN0YW5jZSgpCit0RXBsS2VybmVsIEVwbFN0YXR1c3VEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yNTgsNyArMjU3LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsU3RhdHVzdVJlc2V0KCkKK3RFcGxLZXJuZWwgRXBsU3RhdHVzdVJlc2V0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTI4Nyw5ICsyODYsOCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VSZXF1ZXN0U3RhdHVzUmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgIHRFcGxTdGF0dXN1Q2JSZXNwb25zZQotCQkJCQkJICBwZm5DYlJlc3BvbnNlX3ApCit0RXBsS2VybmVsIEVwbFN0YXR1c3VSZXF1ZXN0U3RhdHVzUmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJCSAgIHRFcGxTdGF0dXN1Q2JSZXNwb25zZSBwZm5DYlJlc3BvbnNlX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTM0Miw4ICszNDAsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyB0RXBsS2VybmVsIFBVQkxJQyBFcGxTdGF0dXN1Q2JTdGF0dXNSZXNwb25zZSh0RXBsRnJhbWVJbmZvICoKLQkJCQkJCSAgICBwRnJhbWVJbmZvX3ApCitzdGF0aWMgdEVwbEtlcm5lbCBFcGxTdGF0dXN1Q2JTdGF0dXNSZXNwb25zZSh0RXBsRnJhbWVJbmZvICpwRnJhbWVJbmZvX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl1bnNpZ25lZCBpbnQgdWlOb2RlSWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRhcmdldC5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUYXJnZXQuaAppbmRleCBiMmI2NmY4Li5lNzZkMjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRhcmdldC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGFyZ2V0LmgKQEAgLTgzLDk1ICs4MywxMSBAQAogLy8gYXBwbGljYXRpb25zIG5lZWRzIHRvIHVzZSBvbmUgY29tbW9uIGxpYnJhcnkgZnVuY3Rpb24gKGUuZy4gbWVtY3B5KCkpLiBTbwogLy8geW91IGNhbiBzZXQgKG9yIGNoYW5nZSkgaXQgaGVyZS4KIAotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0KLSNkZWZpbmUgX1dJTjMyX1dJTkRPV1MgMHgwNDAxCi0jZGVmaW5lIF9XSU4zMl9XSU5OVCAgIDB4MDQwMAotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotICAgIC8vMjkuMTEuMjAwNCBmLmouIHNvbnN0IGlzdCBtZW1jcHkgdW5kIG1lbXNldCB1bmJla2FubnQKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2RlZmluZSBFUExfTUVNQ1BZKGRzdCxzcmMsc2l6KSAgICAgbWVtY3B5KCh2b2lkKikoZHN0KSwoY29uc3Qgdm9pZCopKHNyYyksKHNpemVfdCkoc2l6KSk7Ci0jZGVmaW5lIEVQTF9NRU1TRVQoZHN0LHZhbCxzaXopICAgICBtZW1zZXQoKHZvaWQqKShkc3QpLChpbnQpKHZhbCksKHNpemVfdCkoc2l6KSk7Ci0KLSAgICAvLyBmLmouOiBkaWUgRnVua3Rpb25lbiBm/HIgPE1lbUFsbG9jPiB1bmQgPE1lbUZyZWU+IHNpbmQgaW4gV2luTWVtLmMgZGVmaW5pZXJ0Ci0gICAgLy9kZWZpbml0aW9uIGRlciBQcm90b3R5cGVuCi12b2lkIEZBUiAqTWVtQWxsb2MoRFdPUkQgZHdNZW1TaXplX3ApOwotdm9pZCBNZW1GcmVlKHZvaWQgRkFSICogcE1lbV9wKTsKLQotI2RlZmluZSBFUExfTUFMTE9DKHNpeikgICAgICAgICAgICAgbWFsbG9jKChzaXplX3QpKHNpeikpCi0jZGVmaW5lIEVQTF9GUkVFKHB0cikgICAgICAgICAgICAgICBmcmVlKCh2b2lkICopcHRyKQotCi0jaWZuZGVmIFBSSU5URjAKLXZvaWQgdHJhY2UoY29uc3QgY2hhciAqZm10LCAuLi4pOwotI2RlZmluZSBQUklOVEYgICAgICAgICAgICAgICAgICAgICAgVFJBQ0UKLSNkZWZpbmUgUFJJTlRGMChhcmcpICAgICAgICAgICAgICAgIFRSQUNFMChhcmcpCi0jZGVmaW5lIFBSSU5URjEoYXJnLHAxKSAgICAgICAgICAgICBUUkFDRTEoYXJnLHAxKQotI2RlZmluZSBQUklOVEYyKGFyZyxwMSxwMikgICAgICAgICAgVFJBQ0UyKGFyZyxwMSxwMikKLSNkZWZpbmUgUFJJTlRGMyhhcmcscDEscDIscDMpICAgICAgIFRSQUNFMyhhcmcscDEscDIscDMpCi0jZGVmaW5lIFBSSU5URjQoYXJnLHAxLHAyLHAzLHA0KSAgICBUUkFDRTQoYXJnLHAxLHAyLHAzLHA0KQotCS8vI2RlZmluZSBQUklOVEYgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmCi0JLy8jZGVmaW5lIFBSSU5URjAoYXJnKSAgICAgICAgICAgICAgICBQUklOVEYoYXJnKQotCS8vI2RlZmluZSBQUklOVEYxKGFyZyxwMSkgICAgICAgICAgICAgUFJJTlRGKGFyZyxwMSkKLQkvLyNkZWZpbmUgUFJJTlRGMihhcmcscDEscDIpICAgICAgICAgIFBSSU5URihhcmcscDEscDIpCi0JLy8jZGVmaW5lIFBSSU5URjMoYXJnLHAxLHAyLHAzKSAgICAgICBQUklOVEYoYXJnLHAxLHAyLHAzKQotCS8vI2RlZmluZSBQUklOVEY0KGFyZyxwMSxwMixwMyxwNCkgICAgUFJJTlRGKGFyZyxwMSxwMixwMyxwNCkKLSNlbmRpZgotCi0jaWZkZWYgQVNTRVJUTVNHCi0jdW5kZWYgQVNTRVJUTVNHCi0jZW5kaWYKLQotI2RlZmluZSBBU1NFUlRNU0coZXhwcixzdHJpbmcpICBpZiAoIShleHByKSkgeyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUJveCAoTlVMTCwgc3RyaW5nLCAiQXNzZXJ0aW9uIGZhaWxlZCIsIE1CX09LIHwgTUJfSUNPTkVSUk9SKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgKC0xKTt9Ci0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9OT19PU18pCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0gICAgLy8yOS4xMS4yMDA0IGYuai4gc29uc3QgaXN0IG1lbWNweSB1bmQgbWVtc2V0IHVuYmVrYW5udAotLy8gICAgI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIEVQTF9NRU1DUFkoZHN0LHNyYyxzaXopICAgICBtZW1jcHkoKHZvaWQqKShkc3QpLChjb25zdCB2b2lkKikoc3JjKSwoc2l6ZV90KShzaXopKTsKLSNkZWZpbmUgRVBMX01FTVNFVChkc3QsdmFsLHNpeikgICAgIG1lbXNldCgodm9pZCopKGRzdCksKGludCkodmFsKSwoc2l6ZV90KShzaXopKTsKLQotI2RlZmluZSBFUExfTUFMTE9DKHNpeikgICAgICAgICAgICAgbWFsbG9jKChzaXplX3QpKHNpeikpCi0jZGVmaW5lIEVQTF9GUkVFKHB0cikgICAgICAgICAgICAgICBmcmVlKCh2b2lkICopcHRyKQotCi0jaWZuZGVmIFBSSU5URjAKLSNkZWZpbmUgUFJJTlRGICAgICAgICAgICAgICAgICAgICAgIFRSQUNFCi0jZGVmaW5lIFBSSU5URjAoYXJnKSAgICAgICAgICAgICAgICBUUkFDRTAoYXJnKQotI2RlZmluZSBQUklOVEYxKGFyZyxwMSkgICAgICAgICAgICAgVFJBQ0UxKGFyZyxwMSkKLSNkZWZpbmUgUFJJTlRGMihhcmcscDEscDIpICAgICAgICAgIFRSQUNFMihhcmcscDEscDIpCi0jZGVmaW5lIFBSSU5URjMoYXJnLHAxLHAyLHAzKSAgICAgICBUUkFDRTMoYXJnLHAxLHAyLHAzKQotI2RlZmluZSBQUklOVEY0KGFyZyxwMSxwMixwMyxwNCkgICAgVFJBQ0U0KGFyZyxwMSxwMixwMyxwNCkKLQkvLyNkZWZpbmUgUFJJTlRGICAgICAgICAgICAgICAgICAgICAgIHByaW50ZgotCS8vI2RlZmluZSBQUklOVEYwKGFyZykgICAgICAgICAgICAgICAgUFJJTlRGKGFyZykKLQkvLyNkZWZpbmUgUFJJTlRGMShhcmcscDEpICAgICAgICAgICAgIFBSSU5URihhcmcscDEpCi0JLy8jZGVmaW5lIFBSSU5URjIoYXJnLHAxLHAyKSAgICAgICAgICBQUklOVEYoYXJnLHAxLHAyKQotCS8vI2RlZmluZSBQUklOVEYzKGFyZyxwMSxwMixwMykgICAgICAgUFJJTlRGKGFyZyxwMSxwMixwMykKLQkvLyNkZWZpbmUgUFJJTlRGNChhcmcscDEscDIscDMscDQpICAgIFBSSU5URihhcmcscDEscDIscDMscDQpCi0jZW5kaWYKLQotI2VsaWYgKFRBUkdFVF9TWVNURU0gPT0gX0xJTlVYXykKLQotI2lmbmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNlbHNlCi0vLyAgICAgICAgI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotI2VuZGlmCiAKICAgICAvLzI5LjExLjIwMDQgZi5qLiBzb25zdCBpc3QgbWVtY3B5IHVuZCBtZW1zZXQgdW5iZWthbm50CiAvLyAgICAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xNzksMTMgKzk1LDggQEAKICNkZWZpbmUgRVBMX01FTUNQWShkc3Qsc3JjLHNpeikgICAgIG1lbWNweSgodm9pZCopKGRzdCksKGNvbnN0IHZvaWQqKShzcmMpLChzaXplX3QpKHNpeikpOwogI2RlZmluZSBFUExfTUVNU0VUKGRzdCx2YWwsc2l6KSAgICAgbWVtc2V0KCh2b2lkKikoZHN0KSwoaW50KSh2YWwpLChzaXplX3QpKHNpeikpOwogCi0jaWZuZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgRVBMX01BTExPQyhzaXopICAgICAgICAgICAgIG1hbGxvYygoc2l6ZV90KShzaXopKQotI2RlZmluZSBFUExfRlJFRShwdHIpICAgICAgICAgICAgICAgZnJlZSgodm9pZCAqKXB0cikKLSNlbHNlCiAjZGVmaW5lIEVQTF9NQUxMT0Moc2l6KSAgICAgICAgICAgICBrbWFsbG9jKChzaXplX3QpKHNpeiksIEdGUF9LRVJORUwpCiAjZGVmaW5lIEVQTF9GUkVFKHB0cikgICAgICAgICAgICAgICBrZnJlZSgodm9pZCAqKXB0cikKLSNlbmRpZgogCiAjaWZuZGVmIFBSSU5URjAKICNkZWZpbmUgUFJJTlRGICAgICAgICAgICAgICAgICAgICAgIFRSQUNFCkBAIC0yMDIsOCArMTEzLDYgQEAKIAkvLyNkZWZpbmUgUFJJTlRGNChhcmcscDEscDIscDMscDQpICAgIFBSSU5URihhcmcscDEscDIscDMscDQpCiAjZW5kaWYKIAotI2VuZGlmCi0KICNkZWZpbmUgRVBMX1RHVF9JTlRNQVNLX0VUSCAgICAgMHgwMDAxCS8vIGV0aGVybmV0IGludGVycnVwdAogI2RlZmluZSBFUExfVEdUX0lOVE1BU0tfRE1BICAgICAweDAwMDIJLy8gRE1BIGludGVycnVwdAogCkBAIC0yMTcsMTcgKzEyNiwxNSBAQAogCiAvLyBjdXJyZW50bHkgbm8gVGltZXIgZnVuY3Rpb25zIGFyZSBuZWVkZWQgYnkgRVBMIHN0YWNrCiAvLyBzbyB0aGV5IGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0Ci0vL3ZvaWQgIFBVQkxJQyBUZ3RUaW1lckluaXQodm9pZCk7Ci0vL0RXT1JEIFBVQkxJQyBUZ3RHZXRUaWNrQ291bnQodm9pZCk7Ci0vL3ZvaWQgUFVCTElDIFRndEdldE5ldFRpbWUodEVwbE5ldFRpbWUgKiBwTmV0VGltZV9wKTsKKy8vdm9pZCAgVGd0VGltZXJJbml0KHZvaWQpOworLy91MzIgVGd0R2V0VGlja0NvdW50KHZvaWQpOworLy92b2lkIFRndEdldE5ldFRpbWUodEVwbE5ldFRpbWUgKiBwTmV0VGltZV9wKTsKIAogLy8gZnVuY3Rpb25zIGZvciBldGhlcm5ldCBkcml2ZXIKLXRFcGxLZXJuZWwgUFVCTElDIFRndEluaXRFdGhJc3Iodm9pZCk7Ci12b2lkIFBVQkxJQyBUZ3RGcmVlRXRoSXNyKHZvaWQpOwotdm9pZCBQVUJMSUMgVGd0RW5hYmxlR2xvYmFsSW50ZXJydXB0KEJZVEUgZkVuYWJsZV9wKTsKLXZvaWQgUFVCTElDIFRndEVuYWJsZUV0aEludGVycnVwdDAoQllURSBmRW5hYmxlX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpSW50ZXJydXB0TWFza19wKTsKLXZvaWQgUFVCTElDIFRndEVuYWJsZUV0aEludGVycnVwdDEoQllURSBmRW5hYmxlX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpSW50ZXJydXB0TWFza19wKTsKK3RFcGxLZXJuZWwgVGd0SW5pdEV0aElzcih2b2lkKTsKK3ZvaWQgVGd0RnJlZUV0aElzcih2b2lkKTsKK3ZvaWQgVGd0RW5hYmxlR2xvYmFsSW50ZXJydXB0KHU4IGZFbmFibGVfcCk7Cit2b2lkIFRndEVuYWJsZUV0aEludGVycnVwdDAodTggZkVuYWJsZV9wLCB1bnNpZ25lZCBpbnQgdWlJbnRlcnJ1cHRNYXNrX3ApOwordm9pZCBUZ3RFbmFibGVFdGhJbnRlcnJ1cHQxKHU4IGZFbmFibGVfcCwgdW5zaWduZWQgaW50IHVpSW50ZXJydXB0TWFza19wKTsKIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTFRBUkdFVF9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUaW1lci5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUaW1lci5oCmluZGV4IGZhY2JmZDguLmQxYTczZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVyLmgKQEAgLTEwNyw4ICsxMDcsNyBAQAogCiB9IHRFcGxUaW1lckV2ZW50QXJnOwogCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDICogdEVwbFRpbWVya0NhbGxiYWNrKSAodEVwbFRpbWVyRXZlbnRBcmcgKgotCQkJCQkJIHBFdmVudEFyZ19wKTsKK3R5cGVkZWYgdEVwbEtlcm5lbCgqIHRFcGxUaW1lcmtDYWxsYmFjaykgKHRFcGxUaW1lckV2ZW50QXJnICpwRXZlbnRBcmdfcCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBmdW5jdGlvbiBwcm90b3R5cGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVydUxpbnV4S2VybmVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVydUxpbnV4S2VybmVsLmMKaW5kZXggMDg4MjBkMS4uZmY4MGZjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUaW1lcnVMaW51eEtlcm5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXJ1TGludXhLZXJuZWwuYwpAQCAtOTksNyArOTksNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIGxvY2FsIGZ1bmN0aW9uIHByb3RvdHlwZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zdGF0aWMgdm9pZCBQVUJMSUMgRXBsVGltZXJ1Q2JNcyh1bnNpZ25lZCBsb25nIHVsUGFyYW1ldGVyX3ApOworc3RhdGljIHZvaWQgRXBsVGltZXJ1Q2JNcyh1bnNpZ25lZCBsb25nIHVsUGFyYW1ldGVyX3ApOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEzNCw3ICsxMzQsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydUluaXQoKQordEVwbEtlcm5lbCBFcGxUaW1lcnVJbml0KHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAKQEAgLTE1Nyw3ICsxNTcsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydUFkZEluc3RhbmNlKCkKK3RFcGxLZXJuZWwgRXBsVGltZXJ1QWRkSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsS2VybmVsIFJldDsKIApAQCAtMTgyLDcgKzE4Miw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsSW5zdGFuY2UoKQordEVwbEtlcm5lbCBFcGxUaW1lcnVEZWxJbnN0YW5jZSh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0yMDcsOSArMjA3LDkgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVTZXRUaW1lck1zKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCi0JCQkJICAgICAgdEVwbFRpbWVyQXJnIEFyZ3VtZW50X3ApCit0RXBsS2VybmVsIEVwbFRpbWVydVNldFRpbWVyTXModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAorCQkJICAgICAgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbFRpbWVydURhdGEgKnBEYXRhOwpAQCAtMjU3LDkgKzI1Nyw5IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1TW9kaWZ5VGltZXJNcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCi0JCQkJCSB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCkKK3RFcGxLZXJuZWwgRXBsVGltZXJ1TW9kaWZ5VGltZXJNcyh0RXBsVGltZXJIZGwgKnBUaW1lckhkbF9wLAorCQkJCSAgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKKwkJCQkgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbFRpbWVydURhdGEgKnBEYXRhOwpAQCAtMzE1LDcgKzMxNSw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsZXRlVGltZXIodEVwbFRpbWVySGRsICogcFRpbWVySGRsX3ApCit0RXBsS2VybmVsIEVwbFRpbWVydURlbGV0ZVRpbWVyKHRFcGxUaW1lckhkbCAqcFRpbWVySGRsX3ApCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIAl0RXBsVGltZXJ1RGF0YSAqcERhdGE7CkBAIC0zNzAsNyArMzcwLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1CT09MIFBVQkxJQyBFcGxUaW1lcnVJc1RpbWVyQWN0aXZlKHRFcGxUaW1lckhkbCBUaW1lckhkbF9wKQorQk9PTCBFcGxUaW1lcnVJc1RpbWVyQWN0aXZlKHRFcGxUaW1lckhkbCBUaW1lckhkbF9wKQogewogCUJPT0wgZkFjdGl2ZSA9IEZBTFNFOwogCXRFcGxUaW1lcnVEYXRhICpwRGF0YTsKQEAgLTQxNyw3ICs0MTcsNyBAQAogLy8gU3RhdGU6CiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyB2b2lkIFBVQkxJQyBFcGxUaW1lcnVDYk1zKHVuc2lnbmVkIGxvbmcgdWxQYXJhbWV0ZXJfcCkKK3N0YXRpYyB2b2lkIEVwbFRpbWVydUNiTXModW5zaWduZWQgbG9uZyB1bFBhcmFtZXRlcl9wKQogewogCXRFcGxLZXJuZWwgUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7CiAJdEVwbFRpbWVydURhdGEgKnBEYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9FcGxUaW1lcnVOdWxsLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVydU51bGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDBjZTQwMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVydU51bGwuYworKysgL2Rldi9udWxsCkBAIC0xLDMxMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gIChjKSBTWVNURUMgZWxlY3Ryb25pYyBHbWJILCBELTA3OTczIEdyZWl6LCBBdWd1c3QtQmViZWwtU3RyLiAyOQotICAgICAgd3d3LnN5c3RlYy1lbGVjdHJvbmljLmNvbQotCi0gIFByb2plY3Q6ICAgICAgb3BlblBPV0VSTElOSwotCi0gIERlc2NyaXB0aW9uOiAgc291cmNlIGZpbGUgZm9yIEVwbCBVc2Vyc3BhY2UtVGltZXJtb2R1bGUgTlVMTC1JbXBsZW1lbnRhdGlvbgotCi0gIExpY2Vuc2U6Ci0KLSAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICBhcmUgbWV0OgotCi0gICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTWVNURUMgZWxlY3Ryb25pYyBHbWJIIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICAgICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGluZm9Ac3lzdGVjLWVsZWN0cm9uaWMuY29tLgotCi0gICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICAgIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgotICAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0gICAgU2V2ZXJhYmlsaXR5IENsYXVzZToKLQotICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCi0gICAgICAgIHVuZW5mb3JjZWFibGUgaW4gYW55IGp1cmlzZGljdGlvbiwgdGhhdCBzaGFsbCBub3QgYWZmZWN0OgotICAgICAgICAxLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gdGhhdCBqdXJpc2RpY3Rpb24gb2YgYW55IG90aGVyCi0gICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0gICAgICAgIDIuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiBvdGhlciBqdXJpc2RpY3Rpb25zIG9mIHRoYXQgb3IKLSAgICAgICAgICAgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICAgICAgJFJDU2ZpbGU6IEVwbFRpbWVydU51bGwuYyx2ICQKLQotICAgICAgICAgICAgICAgICRBdXRob3I6IEQuS3J1ZWdlciAkCi0KLSAgICAgICAgICAgICAgICAkUmV2aXNpb246IDEuMyAkICAkRGF0ZTogMjAwOC8wNC8xNyAyMTozNjozMiAkCi0KLSAgICAgICAgICAgICAgICAkU3RhdGU6IEV4cCAkCi0KLSAgICAgICAgICAgICAgICBCdWlsZCBFbnZpcm9ubWVudDoKLSAgICAgICAgICAgICAgICBLRUlMIHVWaXNpb24gMgotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBSZXZpc2lvbiBIaXN0b3J5OgotCi0gIDIwMDYvMDcvMDYgay50LjogICBzdGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgInVzZXIvRXBsVGltZXJ1LmgiCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgIEcgTCBPIEIgQSBMICAgRCBFIEYgSSBOIEkgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gbG9jYWwgdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBtb2R1bCBnbG9iYWxlIHZhcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICBDIEwgQSBTIFMgIDxFcGwgVXNlcnNwYWNlLVRpbWVybW9kdWxlIE5VTEwtSW1wbGVtZW50YXRpb24+ICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8KLS8vIERlc2NyaXB0aW9uOiBFcGwgVXNlcnNwYWNlLVRpbWVybW9kdWxlIE5VTEwtSW1wbGVtZW50YXRpb24KLS8vCi0vLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICBQIFUgQiBMIEkgQyAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVwbFRpbWVydUluaXQKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gaW5pdCBmaXJzdCBpbnN0YW5jZQotLy8KLS8vCi0vLwotLy8gUGFyYW1ldGVyczoKLS8vCi0vLwotLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgID0gZXJyb3Jjb2RlCi0vLwotLy8KLS8vIFN0YXRlOgotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVJbml0KCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQotCVJldCA9IEVwbFRpbWVydUFkZEluc3RhbmNlKCk7Ci0KLQlyZXR1cm4gUmV0OwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVBZGRJbnN0YW5jZQotLy8KLS8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiBpbml0IGFkZGl0aW9uYWwgaW5zdGFuY2UKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1QWRkSW5zdGFuY2UoKQotewotCXRFcGxLZXJuZWwgUmV0OwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQlyZXR1cm4gUmV0OwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVEZWxJbnN0YW5jZQotLy8KLS8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiBkZWx0ZSBpbnN0YW5jZQotLy8gICAgICAgICAgICAgIC0+IHVuZGVyIFdpbjMyIG5vdGhpbmcgdG8gZG8KLS8vICAgICAgICAgICAgICAtPiBubyBpbnN0bmFjZSB0YWJsZSBuZWVkZWQKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsSW5zdGFuY2UoKQotewotCXRFcGxLZXJuZWwgUmV0OwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQlyZXR1cm4gUmV0OwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVTZXRUaW1lck1zCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIGNyZWF0ZSBhIHRpbWVyIGFuZCByZXR1cm4gYSBoYW5kbGUgdG8gdGhlIHBvaW50ZXIKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6ICBwVGltZXJIZGxfcCA9IHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gZmlsbCBpbiB0aGUgaGFuZGxlCi0vLyAgICAgICAgICAgICAgdWxUaW1lX3AgICAgPSB0aW1lIGZvciB0aW1lciBpbiBtcwotLy8gICAgICAgICAgICAgIEFyZ3VtZW50X3AgID0gYXJndW1lbnQgZm9yIHRpbWVyCi0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1U2V0VGltZXJNcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAotCQkJCSAgICAgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKQotewotCXRFcGxLZXJuZWwgUmV0OwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQkvLyBjaGVjayBoYW5kbGUKLQlpZiAocFRpbWVySGRsX3AgPT0gTlVMTCkgewotCQlSZXQgPSBrRXBsVGltZXJJbnZhbGlkSGFuZGxlOwotCQlnb3RvIEV4aXQ7Ci0JfQotCi0gICAgICBFeGl0OgotCXJldHVybiBSZXQ7Ci19Ci0KLSAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVNb2RpZnlUaW1lck1zCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIGNoYW5nZSBhIHRpbWVyIGFuZCByZXR1cm4gYSBoYW5kbGUgdG8gdGhlIHBvaW50ZXIKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6ICBwVGltZXJIZGxfcCA9IHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gZmlsbCBpbiB0aGUgaGFuZGxlCi0vLyAgICAgICAgICAgICAgdWxUaW1lX3AgICAgPSB0aW1lIGZvciB0aW1lciBpbiBtcwotLy8gICAgICAgICAgICAgIEFyZ3VtZW50X3AgID0gYXJndW1lbnQgZm9yIHRpbWVyCi0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1TW9kaWZ5VGltZXJNcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCi0JCQkJCSB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQotCVJldCA9IGtFcGxTdWNjZXNzZnVsOwotCi0JLy8gY2hlY2sgcGFyYW1ldGVyCi0JaWYgKHBUaW1lckhkbF9wID09IE5VTEwpIHsKLQkJUmV0ID0ga0VwbFRpbWVySW52YWxpZEhhbmRsZTsKLQkJZ290byBFeGl0OwotCX0KLQotICAgICAgRXhpdDoKLQlyZXR1cm4gUmV0OwotfQotCi0gLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsVGltZXJ1RGVsZXRlVGltZXIKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gZGVsdGUgYSB0aW1lcgotLy8KLS8vCi0vLwotLy8gUGFyYW1ldGVyczogIHBUaW1lckhkbF9wID0gcG9pbnRlciB0byBhIGJ1ZmZlciB0byBmaWxsIGluIHRoZSBoYW5kbGUKLS8vCi0vLwotLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgID0gZXJyb3Jjb2RlCi0vLwotLy8KLS8vIFN0YXRlOgotLy8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVEZWxldGVUaW1lcih0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQotCVJldCA9IGtFcGxTdWNjZXNzZnVsOwotCi0JLy8gY2hlY2sgcGFyYW1ldGVyCi0JaWYgKHBUaW1lckhkbF9wID09IE5VTEwpIHsKLQkJUmV0ID0ga0VwbFRpbWVySW52YWxpZEhhbmRsZTsKLQkJZ290byBFeGl0OwotCX0KLQkvLyBzZXQgaGFuZGxlIGludmFsaWRlCi0JKnBUaW1lckhkbF9wID0gMDsKLQotICAgICAgRXhpdDoKLQlyZXR1cm4gUmV0OwotCi19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgUCBSIEkgViBBIFQgRSAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotCi0vLyBFT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXJ1V2luMzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvRXBsVGltZXJ1V2luMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk2N2I0ZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL0VwbFRpbWVydVdpbjMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAoYykgU1lTVEVDIGVsZWN0cm9uaWMgR21iSCwgRC0wNzk3MyBHcmVpeiwgQXVndXN0LUJlYmVsLVN0ci4gMjkKLSAgICAgIHd3dy5zeXN0ZWMtZWxlY3Ryb25pYy5jb20KLQotICBQcm9qZWN0OiAgICAgIG9wZW5QT1dFUkxJTksKLQotICBEZXNjcmlwdGlvbjogIHNvdXJjZSBmaWxlIGZvciBFcGwgVXNlcnNwYWNlLVRpbWVybW9kdWxlIGZvciBXaW4zMgotCi0gIExpY2Vuc2U6Ci0KLSAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICBhcmUgbWV0OgotCi0gICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTWVNURUMgZWxlY3Ryb25pYyBHbWJIIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICAgICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGluZm9Ac3lzdGVjLWVsZWN0cm9uaWMuY29tLgotCi0gICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICAgIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgotICAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0gICAgU2V2ZXJhYmlsaXR5IENsYXVzZToKLQotICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCi0gICAgICAgIHVuZW5mb3JjZWFibGUgaW4gYW55IGp1cmlzZGljdGlvbiwgdGhhdCBzaGFsbCBub3QgYWZmZWN0OgotICAgICAgICAxLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gdGhhdCBqdXJpc2RpY3Rpb24gb2YgYW55IG90aGVyCi0gICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0gICAgICAgIDIuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiBvdGhlciBqdXJpc2RpY3Rpb25zIG9mIHRoYXQgb3IKLSAgICAgICAgICAgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICAgICAgJFJDU2ZpbGU6IEVwbFRpbWVydVdpbjMyLmMsdiAkCi0KLSAgICAgICAgICAgICAgICAkQXV0aG9yOiBELktydWVnZXIgJAotCi0gICAgICAgICAgICAgICAgJFJldmlzaW9uOiAxLjQgJCAgJERhdGU6IDIwMDgvMDQvMTcgMjE6MzY6MzIgJAotCi0gICAgICAgICAgICAgICAgJFN0YXRlOiBFeHAgJAotCi0gICAgICAgICAgICAgICAgQnVpbGQgRW52aXJvbm1lbnQ6Ci0gICAgICAgICAgICAgICAgICAgIEdDQyBWMy40Ci0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIFJldmlzaW9uIEhpc3Rvcnk6Ci0KLSAgMjAwNi8wNy8wNiBrLnQuOiAgIHN0YXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSAidXNlci9FcGxUaW1lcnUuaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgRyBMIE8gQiBBIEwgICBEIEUgRiBJIE4gSSBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBsb2NhbCB0eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgc3RydWN0IHsKLQl0RXBsVGltZXJBcmcgVGltZXJBcmd1bWVudDsKLQlIQU5ETEUgRGVsdGVIYW5kbGU7Ci0JdW5zaWduZWQgbG9uZyB1bFRpbWVvdXQ7Ci0KLX0gdEVwbFRpbWVydVRocmVhZDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUxQQ1JJVElDQUxfU0VDVElPTiBtX3BDcml0aWNhbFNlY3Rpb247Ci0JQ1JJVElDQUxfU0VDVElPTiBtX0NyaXRpY2FsU2VjdGlvbjsKLX0gdEVwbFRpbWVydUluc3RhbmNlOwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIG1vZHVsIGdsb2JhbGUgdmFycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXN0YXRpYyB0RXBsVGltZXJ1SW5zdGFuY2UgRXBsVGltZXJ1SW5zdGFuY2VfZzsKLXN0YXRpYyB0RXBsVGltZXJ1VGhyZWFkIFRocmVhZERhdGFfbDsKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRFdPUkQgUFVCTElDIEVwbFNkb1RpbWVydVRocmVhZG1zKExQVk9JRCBscFBhcmFtZXRlcik7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgIEMgTCBBIFMgUyAgPEVwbCBVc2Vyc3BhY2UtVGltZXJtb2R1bGUgZm9yIFdpbjMyPiAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLwotLy8gRGVzY3JpcHRpb246IEVwbCBVc2Vyc3BhY2UtVGltZXJtb2R1bGUgZm9yIFdpbjMyCi0vLwotLy8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgUCBVIEIgTCBJIEMgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEZ1bmN0aW9uOiAgICBFcGxUaW1lcnVJbml0Ci0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIGluaXQgZmlyc3QgaW5zdGFuY2UKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1SW5pdCgpCi17Ci0JdEVwbEtlcm5lbCBSZXQ7Ci0KLQlSZXQgPSBFcGxUaW1lcnVBZGRJbnN0YW5jZSgpOwotCi0JcmV0dXJuIFJldDsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsVGltZXJ1QWRkSW5zdGFuY2UKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gaW5pdCBhZGRpdGlvbmFsIGluc3RhbmNlCi0vLwotLy8KLS8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgPSBlcnJvcmNvZGUKLS8vCi0vLwotLy8gU3RhdGU6Ci0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydUFkZEluc3RhbmNlKCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQotCVJldCA9IGtFcGxTdWNjZXNzZnVsOwotCi0JLy8gY3JlYXRlIGNyaXRpY2FsIHNlY3Rpb24KLQlFcGxUaW1lcnVJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbiA9Ci0JICAgICZFcGxUaW1lcnVJbnN0YW5jZV9nLm1fQ3JpdGljYWxTZWN0aW9uOwotCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oRXBsVGltZXJ1SW5zdGFuY2VfZy5tX3BDcml0aWNhbFNlY3Rpb24pOwotCi0JcmV0dXJuIFJldDsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsVGltZXJ1RGVsSW5zdGFuY2UKLS8vCi0vLyBEZXNjcmlwdGlvbjogZnVuY3Rpb24gZGVsdGUgaW5zdGFuY2UKLS8vICAgICAgICAgICAgICAtPiB1bmRlciBXaW4zMiBub3RoaW5nIHRvIGRvCi0vLyAgICAgICAgICAgICAgLT4gbm8gaW5zdG5hY2UgdGFibGUgbmVlZGVkCi0vLwotLy8KLS8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgPSBlcnJvcmNvZGUKLS8vCi0vLwotLy8gU3RhdGU6Ci0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydURlbEluc3RhbmNlKCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQotCVJldCA9IGtFcGxTdWNjZXNzZnVsOwotCi0JcmV0dXJuIFJldDsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsVGltZXJ1U2V0VGltZXJNcwotLy8KLS8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiBjcmVhdGUgYSB0aW1lciBhbmQgcmV0dXJuIGEgaGFuZGxlIHRvIHRoZSBwb2ludGVyCi0vLwotLy8KLS8vCi0vLyBQYXJhbWV0ZXJzOiAgcFRpbWVySGRsX3AgPSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIGZpbGwgaW4gdGhlIGhhbmRsZQotLy8gICAgICAgICAgICAgIHVsVGltZV9wICAgID0gdGltZSBmb3IgdGltZXIgaW4gbXMKLS8vICAgICAgICAgICAgICBBcmd1bWVudF9wICA9IGFyZ3VtZW50IGZvciB0aW1lcgotLy8KLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgPSBlcnJvcmNvZGUKLS8vCi0vLwotLy8gU3RhdGU6Ci0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydVNldFRpbWVyTXModEVwbFRpbWVySGRsICogcFRpbWVySGRsX3AsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKLQkJCQkgICAgICB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCkKLXsKLQl0RXBsS2VybmVsIFJldDsKLQlIQU5ETEUgRGVsZXRlSGFuZGxlOwotCUhBTkRMRSBUaHJlYWRIYW5kbGU7Ci0JRFdPUkQgVGhyZWFkSWQ7Ci0KLQlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQotCS8vIGNoZWNrIGhhbmRsZQotCWlmIChwVGltZXJIZGxfcCA9PSBOVUxMKSB7Ci0JCVJldCA9IGtFcGxUaW1lckludmFsaWRIYW5kbGU7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0JLy8gZW50ZXIgIGNyaXRpY2FsIHNlY3Rpb24KLQlFbnRlckNyaXRpY2FsU2VjdGlvbihFcGxUaW1lcnVJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbik7Ci0KLQkvLyBmaXJzdCBjcmVhdGUgZXZlbnQgdG8gZGVsZXRlIHRpbWVyCi0JRGVsZXRlSGFuZGxlID0gQ3JlYXRlRXZlbnQoTlVMTCwgRkFMU0UsIEZBTFNFLCBOVUxMKTsKLQlpZiAoRGVsZXRlSGFuZGxlID09IE5VTEwpIHsKLQkJUmV0ID0ga0VwbFRpbWVyTm9UaW1lckNyZWF0ZWQ7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0JLy8gc2V0IGhhbmRsZSBmb3IgY2FsbGVyCi0JKnBUaW1lckhkbF9wID0gKHRFcGxUaW1lckhkbCkgRGVsZXRlSGFuZGxlOwotCi0JLy8gZmlsbCBkYXRhIGZvciB0aHJlYWQKLQlUaHJlYWREYXRhX2wuRGVsdGVIYW5kbGUgPSBEZWxldGVIYW5kbGU7Ci0JRVBMX01FTUNQWSgmVGhyZWFkRGF0YV9sLlRpbWVyQXJndW1lbnQsICZBcmd1bWVudF9wLAotCQkgICBzaXplb2YodEVwbFRpbWVyQXJnKSk7Ci0JVGhyZWFkRGF0YV9sLnVsVGltZW91dCA9IHVsVGltZV9wOwotCi0JLy8gY3JlYXRlIHRocmVhZCB0byBjcmVhdGUgd2FpdGFibGUgdGltZXIgYW5kIHdhaXQgZm9yIHRpbWVyCi0JVGhyZWFkSGFuZGxlID0gQ3JlYXRlVGhyZWFkKE5VTEwsCi0JCQkJICAgIDAsCi0JCQkJICAgIEVwbFNkb1RpbWVydVRocmVhZG1zLAotCQkJCSAgICAmVGhyZWFkRGF0YV9sLCAwLCAmVGhyZWFkSWQpOwotCWlmIChUaHJlYWRIYW5kbGUgPT0gTlVMTCkgewotCQkvLyBsZWF2ZSBjcml0aWNhbCBzZWN0aW9uCi0JCUxlYXZlQ3JpdGljYWxTZWN0aW9uKEVwbFRpbWVydUluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLQotCQkvLyBkZWx0ZSBoYW5kbGUKLQkJQ2xvc2VIYW5kbGUoRGVsZXRlSGFuZGxlKTsKLQotCQlSZXQgPSBrRXBsVGltZXJOb1RpbWVyQ3JlYXRlZDsKLQkJZ290byBFeGl0OwotCX0KLQotICAgICAgRXhpdDoKLQlyZXR1cm4gUmV0OwotfQotCi0gLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGdW5jdGlvbjogICAgRXBsVGltZXJ1TW9kaWZ5VGltZXJNcwotLy8KLS8vIERlc2NyaXB0aW9uOiBmdW5jdGlvbiBjaGFuZ2UgYSB0aW1lciBhbmQgcmV0dXJuIGEgaGFuZGxlIHRvIHRoZSBwb2ludGVyCi0vLwotLy8KLS8vCi0vLyBQYXJhbWV0ZXJzOiAgcFRpbWVySGRsX3AgPSBwb2ludGVyIHRvIGEgYnVmZmVyIHRvIGZpbGwgaW4gdGhlIGhhbmRsZQotLy8gICAgICAgICAgICAgIHVsVGltZV9wICAgID0gdGltZSBmb3IgdGltZXIgaW4gbXMKLS8vICAgICAgICAgICAgICBBcmd1bWVudF9wICA9IGFyZ3VtZW50IGZvciB0aW1lcgotLy8KLS8vCi0vLyBSZXR1cm5zOiAgICAgdEVwbEtlcm5lbCAgPSBlcnJvcmNvZGUKLS8vCi0vLwotLy8gU3RhdGU6Ci0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydU1vZGlmeVRpbWVyTXModEVwbFRpbWVySGRsICogcFRpbWVySGRsX3AsCi0JCQkJCSB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAotCQkJCQkgdEVwbFRpbWVyQXJnIEFyZ3VtZW50X3ApCi17Ci0JdEVwbEtlcm5lbCBSZXQ7Ci0JSEFORExFIERlbGV0ZUhhbmRsZTsKLQlIQU5ETEUgVGhyZWFkSGFuZGxlOwotCURXT1JEIFRocmVhZElkOwotCi0JUmV0ID0ga0VwbFN1Y2Nlc3NmdWw7Ci0KLQkvLyBjaGVjayBwYXJhbWV0ZXIKLQlpZiAocFRpbWVySGRsX3AgPT0gTlVMTCkgewotCQlSZXQgPSBrRXBsVGltZXJJbnZhbGlkSGFuZGxlOwotCQlnb3RvIEV4aXQ7Ci0JfQotCi0JRGVsZXRlSGFuZGxlID0gKEhBTkRMRSkgKCpwVGltZXJIZGxfcCk7Ci0KLQkvLyBzZXQgZXZlbnQgdG8gZW5kIHRpbWVyIHRhc2sgZm9yIHRoaXMgdGltZXIKLQlTZXRFdmVudChEZWxldGVIYW5kbGUpOwotCi0JLy8gY3JlYXRlIG5ldyB0aW1lcgotCS8vIGZpcnN0IGNyZWF0ZSBldmVudCB0byBkZWxldGUgdGltZXIKLQlEZWxldGVIYW5kbGUgPSBDcmVhdGVFdmVudChOVUxMLCBGQUxTRSwgRkFMU0UsIE5VTEwpOwotCWlmIChEZWxldGVIYW5kbGUgPT0gTlVMTCkgewotCQlSZXQgPSBrRXBsVGltZXJOb1RpbWVyQ3JlYXRlZDsKLQkJZ290byBFeGl0OwotCX0KLQkvLyBzZXQgaGFuZGxlIGZvciBjYWxsZXIKLQkqcFRpbWVySGRsX3AgPSAodEVwbFRpbWVySGRsKSBEZWxldGVIYW5kbGU7Ci0KLQkvLyBlbnRlciAgY3JpdGljYWwgc2VjdGlvbgotCUVudGVyQ3JpdGljYWxTZWN0aW9uKEVwbFRpbWVydUluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLQotCS8vIGZpbGwgZGF0YSBmb3IgdGhyZWFkCi0JVGhyZWFkRGF0YV9sLkRlbHRlSGFuZGxlID0gRGVsZXRlSGFuZGxlOwotCUVQTF9NRU1DUFkoJlRocmVhZERhdGFfbC5UaW1lckFyZ3VtZW50LCAmQXJndW1lbnRfcCwKLQkJICAgc2l6ZW9mKHRFcGxUaW1lckFyZykpOwotCVRocmVhZERhdGFfbC51bFRpbWVvdXQgPSB1bFRpbWVfcDsKLQotCS8vIGNyZWF0ZSB0aHJlYWQgdG8gY3JlYXRlIHdhaXRhYmxlIHRpbWVyIGFuZCB3YWl0IGZvciB0aW1lcgotCVRocmVhZEhhbmRsZSA9IENyZWF0ZVRocmVhZChOVUxMLAotCQkJCSAgICAwLAotCQkJCSAgICBFcGxTZG9UaW1lcnVUaHJlYWRtcywKLQkJCQkgICAgJlRocmVhZERhdGFfbCwgMCwgJlRocmVhZElkKTsKLQlpZiAoVGhyZWFkSGFuZGxlID09IE5VTEwpIHsKLQkJLy8gbGVhdmUgY3JpdGljYWwgc2VjdGlvbgotCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbihFcGxUaW1lcnVJbnN0YW5jZV9nLm1fcENyaXRpY2FsU2VjdGlvbik7Ci0KLQkJLy8gZGVsdGUgaGFuZGxlCi0KLQkJUmV0ID0ga0VwbFRpbWVyTm9UaW1lckNyZWF0ZWQ7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0KLSAgICAgIEV4aXQ6Ci0JcmV0dXJuIFJldDsKLX0KLQotIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVwbFRpbWVydURlbGV0ZVRpbWVyCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIGRlbHRlIGEgdGltZXIKLS8vCi0vLwotLy8KLS8vIFBhcmFtZXRlcnM6ICBwVGltZXJIZGxfcCA9IHBvaW50ZXIgdG8gYSBidWZmZXIgdG8gZmlsbCBpbiB0aGUgaGFuZGxlCi0vLwotLy8KLS8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICA9IGVycm9yY29kZQotLy8KLS8vCi0vLyBTdGF0ZToKLS8vCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsZXRlVGltZXIodEVwbFRpbWVySGRsICogcFRpbWVySGRsX3ApCi17Ci0JdEVwbEtlcm5lbCBSZXQ7Ci0JSEFORExFIERlbGV0ZUhhbmRsZTsKLQotCVJldCA9IGtFcGxTdWNjZXNzZnVsOwotCi0JLy8gY2hlY2sgcGFyYW1ldGVyCi0JaWYgKHBUaW1lckhkbF9wID09IE5VTEwpIHsKLQkJUmV0ID0ga0VwbFRpbWVySW52YWxpZEhhbmRsZTsKLQkJZ290byBFeGl0OwotCX0KLQotCURlbGV0ZUhhbmRsZSA9IChIQU5ETEUpICgqcFRpbWVySGRsX3ApOwotCi0JLy8gc2V0IGV2ZW50IHRvIGVuZCB0aW1lciB0YXNrIGZvciB0aGlzIHRpbWVyCi0JU2V0RXZlbnQoRGVsZXRlSGFuZGxlKTsKLQotCS8vIHNldCBoYW5kbGUgaW52YWxpZGUKLQkqcFRpbWVySGRsX3AgPSAwOwotCi0gICAgICBFeGl0OgotCXJldHVybiBSZXQ7Ci0KLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICBQIFIgSSBWIEEgVCBFICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gRnVuY3Rpb246ICAgIEVwbFNkb1RpbWVydVRocmVhZG1zCi0vLwotLy8gRGVzY3JpcHRpb246IGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGltZXIgYXMgdGhyZWFkCi0vLwotLy8KLS8vCi0vLyBQYXJhbWV0ZXJzOiAgbHBQYXJhbWV0ZXIgPSBwb2ludGVyIHRvIHN0cnVjdHVyIG9mIHR5cGUgdEVwbFRpbWVydVRocmVhZAotLy8KLS8vCi0vLyBSZXR1cm5zOiAgICAgRFdPUkQgPSBFcnJvcmNvZGUKLS8vCi0vLwotLy8gU3RhdGU6Ci0vLwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLURXT1JEIFBVQkxJQyBFcGxTZG9UaW1lcnVUaHJlYWRtcyhMUFZPSUQgbHBQYXJhbWV0ZXIpCi17Ci0JdEVwbEtlcm5lbCBSZXQ7Ci0JdEVwbFRpbWVydVRocmVhZCAqcFRocmVhZERhdGE7Ci0JSEFORExFIGFIYW5kbGVzWzJdOwotCUJPT0wgZlJldHVybjsKLQlMQVJHRV9JTlRFR0VSIFRpbWVvdXRUaW1lOwotCXVuc2lnbmVkIGxvbmcgdWxFdmVudDsKLQl0RXBsRXZlbnQgRXBsRXZlbnQ7Ci0JdEVwbFRpbWVydVRocmVhZCBUaHJlYWREYXRhOwotCXRFcGxUaW1lckV2ZW50QXJnIFRpbWVyRXZlbnRBcmc7Ci0KLQlSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKLQotCS8vIGdldCBwb2ludGVyIHRvIGRhdGEKLQlwVGhyZWFkRGF0YSA9ICh0RXBsVGltZXJ1VGhyZWFkICopIGxwUGFyYW1ldGVyOwotCS8vIGNvcHkgdGhyZWFkIGRhdGEKLQlFUExfTUVNQ1BZKCZUaHJlYWREYXRhLCBwVGhyZWFkRGF0YSwgc2l6ZW9mKFRocmVhZERhdGEpKTsKLQlwVGhyZWFkRGF0YSA9ICZUaHJlYWREYXRhOwotCi0JLy8gbGVhdmUgY3JpdGljYWwgc2VjdGlvbgotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKEVwbFRpbWVydUluc3RhbmNlX2cubV9wQ3JpdGljYWxTZWN0aW9uKTsKLQotCS8vIGNyZWF0ZSB3YWl0YWJsZSB0aW1lcgotCWFIYW5kbGVzWzFdID0gQ3JlYXRlV2FpdGFibGVUaW1lcihOVUxMLCBGQUxTRSwgTlVMTCk7Ci0JaWYgKGFIYW5kbGVzWzFdID09IE5VTEwpIHsKLQkJUmV0ID0ga0VwbFRpbWVyTm9UaW1lckNyZWF0ZWQ7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0JLy8gc2V0IHRpbWVyCi0JLy8gc2V0IHRpbWVvdXQgaW50ZXJ2YWwgLT4gbmVlZGVkIHRvIGJlIG5lZ2F0aXYKLQkvLyAtPiBiZWNhdXNlIHJlbGF0aXZlIHRpbWVvdXQKLQkvLyAtPiBtdWx0aXBseSBieSAxMDAwMCBmb3IgMTAwIG5zIHRpbWViYXNlIG9mIGZ1bmN0aW9uCi0JVGltZW91dFRpbWUuUXVhZFBhcnQgPSAoKChsb25nIGxvbmcpcFRocmVhZERhdGEtPnVsVGltZW91dCkgKiAtMTAwMDApOwotCWZSZXR1cm4gPSBTZXRXYWl0YWJsZVRpbWVyKGFIYW5kbGVzWzFdLAotCQkJCSAgICZUaW1lb3V0VGltZSwgMCwgTlVMTCwgTlVMTCwgRkFMU0UpOwotCWlmIChmUmV0dXJuID09IDApIHsKLQkJUmV0ID0ga0VwbFRpbWVyTm9UaW1lckNyZWF0ZWQ7Ci0JCWdvdG8gRXhpdDsKLQl9Ci0JLy8gc2F2ZSBkZWx0ZSBldmVudCBoYW5kbGUgaW4gaGFuZGxlIGFycmF5Ci0JYUhhbmRsZXNbMF0gPSBwVGhyZWFkRGF0YS0+RGVsdGVIYW5kbGU7Ci0KLQkvLyB3YWl0IGZvciBvbmUgb2YgdGhlIGV2ZW50cwotCXVsRXZlbnQgPSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKDIsICZhSGFuZGxlc1swXSwgRkFMU0UsIElORklOSVRFKTsKLQlpZiAodWxFdmVudCA9PSBXQUlUX09CSkVDVF8wKSB7CS8vIGRlbHRlIGV2ZW50Ci0KLQkJLy8gY2xvc2UgaGFuZGVscwotCQlDbG9zZUhhbmRsZShhSGFuZGxlc1sxXSk7Ci0JCS8vIHRlcm1pbmF0ZSB0aHJlYWQKLQkJZ290byBFeGl0OwotCX0gZWxzZSBpZiAodWxFdmVudCA9PSAoV0FJVF9PQkpFQ1RfMCArIDEpKSB7CS8vIHRpbWVyIGV2ZW50Ci0JCS8vIGNhbGwgZXZlbnQgZnVuY3Rpb24KLQkJVGltZXJFdmVudEFyZy5tX1RpbWVySGRsID0KLQkJICAgICh0RXBsVGltZXJIZGwpIHBUaHJlYWREYXRhLT5EZWx0ZUhhbmRsZTsKLQkJVGltZXJFdmVudEFyZy5tX3VsQXJnID0gcFRocmVhZERhdGEtPlRpbWVyQXJndW1lbnQubV91bEFyZzsKLQotCQlFcGxFdmVudC5tX0V2ZW50U2luayA9IHBUaHJlYWREYXRhLT5UaW1lckFyZ3VtZW50Lm1fRXZlbnRTaW5rOwotCQlFcGxFdmVudC5tX0V2ZW50VHlwZSA9IGtFcGxFdmVudFR5cGVUaW1lcjsKLQkJRVBMX01FTVNFVCgmRXBsRXZlbnQubV9OZXRUaW1lLCAweDAwLCBzaXplb2YodEVwbE5ldFRpbWUpKTsKLQkJRXBsRXZlbnQubV9wQXJnID0gJlRpbWVyRXZlbnRBcmc7Ci0JCUVwbEV2ZW50Lm1fdWlTaXplID0gc2l6ZW9mKFRpbWVyRXZlbnRBcmcpOwotCi0JCVJldCA9IEVwbEV2ZW50dVBvc3QoJkVwbEV2ZW50KTsKLQotCQkvLyBjbG9zZSBoYW5kZWxzCi0JCUNsb3NlSGFuZGxlKGFIYW5kbGVzWzFdKTsKLQkJLy8gdGVybWluYXRlIHRocmVhZAotCQlnb3RvIEV4aXQ7Ci0KLQl9IGVsc2UgewkJLy8gZXJyb3IKLQkJdWxFdmVudCA9IEdldExhc3RFcnJvcigpOwotCQlUUkFDRTEoIkVycm9yIGluIFdhaXRGb3JNdWx0aXBsZU9iamVjdHMgRXJyb3Jjb2RlOiAweCV4XG4iLAotCQkgICAgICAgdWxFdmVudCk7Ci0JCS8vIHRlcm1pbmF0ZSB0aHJlYWQKLQkJZ290byBFeGl0OwotCX0KLQotICAgICAgRXhpdDoKLQlyZXR1cm4gUmV0OwotfQotCi0vLyBFT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hhcmVkQnVmZi5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmMKaW5kZXggOWZiMDlkNi4uMmIxMGMzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmMKQEAgLTg1LDE0ICs4NSw4IEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZi5oIgogI2luY2x1ZGUgIlNoYklwYy5oIgogCi0vLyBkLmsuIExpbnV4IGtlcm5lbCBtb2R1bGVzIG5lZWRzIG90aGVyIGhlYWRlciBmaWxlcyBmb3IgbWVtY3B5KCkKLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfTElOVVhfKSAmJiBkZWZpbmVkKF9fS0VSTkVMX18pCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMDIsOCArOTYsNiBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZiAoIWRlZmluZWQoU0hBUkVEQlVGRl9JTkxJTkVEKSkgfHwgZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBDb25maWd1cmF0aW9uCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTc3LDcgKzE2OSw3IEBACiAvLyAgR2V0IHBvaW50ZXIgdG8gQ2lyY3VsYXIgU2hhcmVkIEJ1ZmZlcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJDaXJCdWZmICpTaGJDaXJHZXRCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQordFNoYkNpckJ1ZmYgKlNoYkNpckdldEJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAKIAl0U2hiQ2lyQnVmZiAqcFNoYkNpckJ1ZmY7CkBAIC0xOTMsNyArMTg1LDcgQEAKIC8vICBHZXQgcG9pbnRlciB0byBMaW5lYXIgU2hhcmVkIEJ1ZmZlcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJMaW5CdWZmICpTaGJMaW5HZXRCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQordFNoYkxpbkJ1ZmYgKlNoYkxpbkdldEJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAKIAl0U2hiTGluQnVmZiAqcFNoYkxpbkJ1ZmY7CkBAIC0yMTAsNyArMjAyLDYgQEAKIHZvaWQgU2hiQ2lyU2lnbmFsSGFuZGxlclJlc2V0KHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBmVGltZU91dF9wKTsKIAotI2VuZGlmCiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMjE4LDcgKzIwOSw2IEBACiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIAotI2lmICFkZWZpbmVkKElOTElORV9FTkFCTEVEKQogLy8gbm90IGlubGluZWQgZXh0ZXJuYWwgZnVuY3Rpb25zCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNjMsMTggKzM1MywxMyBAQAogCiB9CiAKLSNlbmRpZiAvLyAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQotI2lmICghZGVmaW5lZChTSEFSRURCVUZGX0lOTElORUQpKSB8fCBkZWZpbmVkKElOTElORV9FTkFCTEVEKQotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFJlc2V0IENpcmN1bGFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiQ2lyUmVzZXRCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVPdXRfcCwKLQkJCQkJICAgIHRTaGJDaXJTaWdIbmRsclJlc2V0Ci0JCQkJCSAgICBwZm5TaWduYWxIYW5kbGVyUmVzZXRfcCkKK3RTaGJFcnJvciBTaGJDaXJSZXNldEJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVPdXRfcCwKKwkJCSAgICB0U2hiQ2lyU2lnSG5kbHJSZXNldCBwZm5TaWduYWxIYW5kbGVyUmVzZXRfcCkKIHsKIAogCXRTaGJDaXJCdWZmICpwU2hiQ2lyQnVmZjsKQEAgLTQ0MCw5ICs0MjUsOSBAQAogLy8gIFdyaXRlIGRhdGEgYmxvY2sgdG8gQ2lyY3VsYXIgU2hhcmVkIEJ1ZmZlcgogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJDaXJXcml0ZURhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCSAgICAgICBjb25zdCB2b2lkICpwU3JjRGF0YUJsb2NrX3AsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsRGF0YUJsb2NrU2l6ZV9wKQordFNoYkVycm9yIFNoYkNpcldyaXRlRGF0YUJsb2NrKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKKwkJCSAgICAgICBjb25zdCB2b2lkICpwU3JjRGF0YUJsb2NrX3AsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bERhdGFCbG9ja1NpemVfcCkKIHsKIAogCXRTaGJDaXJCdWZmICpwU2hiQ2lyQnVmZjsKQEAgLTYwOCw5ICs1OTMsOSBAQAogLy8gIEFsbG9jYXRlIGJsb2NrIHdpdGhpbiB0aGUgQ2lyY3VsYXIgU2hhcmVkIEJ1ZmZlciBmb3IgY2h1bmsgd3JpdGluZwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJDaXJBbGxvY0RhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCSAgICAgICB0U2hiQ2lyQ2h1bmsgKiBwU2hiQ2lyQ2h1bmtfcCwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQnVmZmVyU2l6ZV9wKQordFNoYkVycm9yIFNoYkNpckFsbG9jRGF0YUJsb2NrKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKKwkJCSAgICAgICB0U2hiQ2lyQ2h1bmsgKiBwU2hiQ2lyQ2h1bmtfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsRGF0YUJ1ZmZlclNpemVfcCkKIHsKIAogCXRTaGJDaXJCdWZmICpwU2hiQ2lyQnVmZjsKQEAgLTcxNywxMiArNzAyLDExIEBACiAvLyAgV3JpdGUgZGF0YSBjaHVuayBpbnRvIGFuIGFsbG9jYXRlZCBidWZmZXIgb2YgdGhlIENpcmN1bGFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiQ2lyV3JpdGVEYXRhQ2h1bmsodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkgICAgICAgdFNoYkNpckNodW5rICogcFNoYkNpckNodW5rX3AsCi0JCQkJCSAgICAgICBjb25zdCB2b2lkICpwU3JjRGF0YUNodW5rX3AsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsRGF0YUNodW5rU2l6ZV9wLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50Ci0JCQkJCSAgICAgICAqcGZCdWZmZXJDb21wbGV0ZWRfcCkKK3RTaGJFcnJvciBTaGJDaXJXcml0ZURhdGFDaHVuayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkgICAgICAgdFNoYkNpckNodW5rICpwU2hiQ2lyQ2h1bmtfcCwKKwkJCSAgICAgICBjb25zdCB2b2lkICpwU3JjRGF0YUNodW5rX3AsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bERhdGFDaHVua1NpemVfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKnBmQnVmZmVyQ29tcGxldGVkX3ApCiB7CiAKIAl0U2hiQ2lyQnVmZiAqcFNoYkNpckJ1ZmY7CkBAIC04NTcsMTAgKzg0MSwxMCBAQAogLy8gIFJlYWQgZGF0YSBibG9jayBmcm9tIENpcmN1bGFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiQ2lyUmVhZERhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCSAgICAgIHZvaWQgKnBEc3REYXRhQmxvY2tfcCwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bFJkQnVmZlNpemVfcCwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqcHVsRGF0YUJsb2NrU2l6ZV9wKQordFNoYkVycm9yIFNoYkNpclJlYWREYXRhQmxvY2sodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAorCQkJICAgICAgdm9pZCAqcERzdERhdGFCbG9ja19wLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bFJkQnVmZlNpemVfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnB1bERhdGFCbG9ja1NpemVfcCkKIHsKIAogCXRTaGJDaXJCdWZmICpwU2hiQ2lyQnVmZjsKQEAgLTEwMDksOSArOTkzLDggQEAKIC8vICBHZXQgZGF0YSBzaXplIG9mIG5leHQgcmVhZGFibGUgYmxvY2sgZnJvbSBDaXJjdWxhciBTaGFyZWQgQnVmZmVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYkNpckdldFJlYWREYXRhU2l6ZSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCi0JCQkJCQl1bnNpZ25lZCBsb25nCi0JCQkJCQkqcHVsRGF0YUJsb2NrU2l6ZV9wKQordFNoYkVycm9yIFNoYkNpckdldFJlYWREYXRhU2l6ZSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkJdW5zaWduZWQgbG9uZyAqcHVsRGF0YUJsb2NrU2l6ZV9wKQogewogCiAJdFNoYkNpckJ1ZmYgKnBTaGJDaXJCdWZmOwpAQCAtMTA3MCw5ICsxMDUzLDggQEAKIC8vICBHZXQgbnVtYmVyIG9mIHJlYWRhYmxlIGJsb2NrcyBmcm9tIENpcmN1bGFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiQ2lyR2V0UmVhZEJsb2NrQ291bnQodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkJICB1bnNpZ25lZCBsb25nCi0JCQkJCQkgICpwdWxEYXRhQmxvY2tDb3VudF9wKQordFNoYkVycm9yIFNoYkNpckdldFJlYWRCbG9ja0NvdW50KHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKnB1bERhdGFCbG9ja0NvdW50X3ApCiB7CiAKIAl0U2hiQ2lyQnVmZiAqcFNoYkNpckJ1ZmY7CkBAIC0xMTEzLDEyICsxMDk1LDkgQEAKIC8vICBkLmsuOiBuZXcgcGFyYW1ldGVyIHByaW9yaXR5IGFzIGVudW0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiQ2lyU2V0U2lnbmFsSGFuZGxlck5ld0RhdGEodFNoYkluc3RhbmNlCi0JCQkJCQkJcFNoYkluc3RhbmNlX3AsCi0JCQkJCQkJdFNoYkNpclNpZ0huZGxyTmV3RGF0YQotCQkJCQkJCXBmblNpZ25hbEhhbmRsZXJOZXdEYXRhX3AsCi0JCQkJCQkJdFNoYlByaW9yaXR5Ci0JCQkJCQkJU2hiUHJpb3JpdHlfcCkKK3RTaGJFcnJvciBTaGJDaXJTZXRTaWduYWxIYW5kbGVyTmV3RGF0YSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkJCXRTaGJDaXJTaWdIbmRsck5ld0RhdGEgcGZuU2lnbmFsSGFuZGxlck5ld0RhdGFfcCwKKwkJCQkJdFNoYlByaW9yaXR5IFNoYlByaW9yaXR5X3ApCiB7CiAKIAl0U2hiQ2lyQnVmZiAqcFNoYkNpckJ1ZmY7CkBAIC0xMTY1LDEwICsxMTQ0LDYgQEAKIAogfQogCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKElOTElORV9FTkFCTEVEKQotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIERFQlVHOiBUcmFjZSBDaXJjdWxhciBTaGFyZWQgQnVmZmVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQxMywxOCArMTM4OCwxMyBAQAogCiB9CiAKLSNlbmRpZiAvLyAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKLQotI2lmICghZGVmaW5lZChTSEFSRURCVUZGX0lOTElORUQpKSB8fCBkZWZpbmVkKElOTElORV9FTkFCTEVEKQotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFdyaXRlIGRhdGEgYmxvY2sgdG8gTGluZWFyIFNoYXJlZCBCdWZmZXIKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiTGluV3JpdGVEYXRhQmxvY2sodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB1bERzdEJ1ZmZlck9mZnNfcCwKLQkJCQkJICAgICAgIGNvbnN0IHZvaWQgKnBTcmNEYXRhQmxvY2tfcCwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQmxvY2tTaXplX3ApCit0U2hiRXJyb3IgU2hiTGluV3JpdGVEYXRhQmxvY2sodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEc3RCdWZmZXJPZmZzX3AsCisJCQkgICAgICAgY29uc3Qgdm9pZCAqcFNyY0RhdGFCbG9ja19wLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQmxvY2tTaXplX3ApCiB7CiAKIAl0U2hiTGluQnVmZiAqcFNoYkxpbkJ1ZmY7CkBAIC0xNDg5LDExICsxNDU5LDEwIEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFJlYWQgZGF0YSBibG9jayBmcm9tIExpbmVhciBTaGFyZWQgQnVmZmVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYkxpblJlYWREYXRhQmxvY2sodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkgICAgICB2b2lkICpwRHN0RGF0YUJsb2NrX3AsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdWxTcmNCdWZmZXJPZmZzX3AsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQmxvY2tTaXplX3ApCit0U2hiRXJyb3IgU2hiTGluUmVhZERhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkgICAgICB2b2lkICpwRHN0RGF0YUJsb2NrX3AsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIHVsU3JjQnVmZmVyT2Zmc19wLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bERhdGFCbG9ja1NpemVfcCkKIHsKIAogCXRTaGJMaW5CdWZmICpwU2hiTGluQnVmZjsKQEAgLTE1NTUsMTAgKzE1MjQsNiBAQAogCiB9CiAKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSU5MSU5FX0VOQUJMRUQpCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgREVCVUc6IFRyYWNlIExpbmVhciBTaGFyZWQgQnVmZmVyCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTYzOSw3ICsxNjA0LDcgQEAKIAl1bEJ1ZmZTaXplID0gdWxEYXRhU2l6ZV9wOwogCiAJaWYgKHBzekluZm9UZXh0X3AgIT0gTlVMTCkgewotCQlUUkFDRTAocHN6SW5mb1RleHRfcCk7CisJCVRSQUNFMSgiJXMiLCBwc3pJbmZvVGV4dF9wKTsKIAl9CiAJLy8gZHVtcCBidWZmZXIgY29udGVudHMKIAlmb3IgKG5Sb3cgPSAwOzsgblJvdysrKSB7CkBAIC0xNzk0LDYgKzE3NTksNCBAQAogCiB9CiAKLSNlbmRpZgotCiAvLyBFT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hhcmVkQnVmZi5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmgKaW5kZXggMGVjMWI0Yi4uNGVkYmQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGFyZWRCdWZmLmgKQEAgLTExMCwxNSArMTEwLDYgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLS8qI2lmIGRlZmluZWQoSU5MSU5FX0ZVTkNUSU9OX0RFRikKLSAgICAjdW5kZWYgIElOTElORV9GVU5DVElPTgotICAgICNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OICAgICBJTkxJTkVfRlVOQ1RJT05fREVGCi0gICAgI2RlZmluZSBJTkxJTkVfRU5BQkxFRCAgICAgIFRSVUUKLSAgICAjZGVmaW5lIFNIQVJFREJVRkZfSU5MSU5FRAotICAgICNpbmNsdWRlICJTaGFyZWRCdWZmLmMiCi0jZW5kaWYKLSovCi0KIAl0U2hiRXJyb3IgU2hiSW5pdCh2b2lkKTsKIAl0U2hiRXJyb3IgU2hiRXhpdCh2b2lkKTsKIApAQCAtMTI5LDcgKzEyMCw2IEBACiAJCQkJICAgIHVuc2lnbmVkIGludCAqcGZTaGJOZXdDcmVhdGVkX3ApOwogCXRTaGJFcnJvciBTaGJDaXJSZWxlYXNlQnVmZmVyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCk7CiAKLSNpZiAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKIAogCXRTaGJFcnJvciBTaGJDaXJSZXNldEJ1ZmZlcih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgdWxUaW1lT3V0X3AsCkBAIC0xNTksNyArMTQ5LDYgQEAKIAkJCQkJCXBmblNoYlNpZ25hbEhhbmRsZXJOZXdEYXRhX3AsCiAJCQkJCQl0U2hiUHJpb3JpdHkgU2hiUHJpb3JpdHlfcCk7CiAKLSNlbmRpZgogCiAvLyBMaW5lYXIgU2hhcmVkIEJ1ZmZlcgogCXRTaGJFcnJvciBTaGJMaW5BbGxvY0J1ZmZlcih1bnNpZ25lZCBsb25nIHVsQnVmZmVyU2l6ZV9wLApAQCAtMTY4LDcgKzE1Nyw2IEBACiAJCQkJICAgIHVuc2lnbmVkIGludCAqcGZTaGJOZXdDcmVhdGVkX3ApOwogCXRTaGJFcnJvciBTaGJMaW5SZWxlYXNlQnVmZmVyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCk7CiAKLSNpZiAhZGVmaW5lZChJTkxJTkVfRU5BQkxFRCkKIAogCXRTaGJFcnJvciBTaGJMaW5Xcml0ZURhdGFCbG9jayh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxEc3RCdWZmZXJPZmZzX3AsCkBAIC0xNzksNyArMTY3LDYgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIHVsU3JjQnVmZmVyT2Zmc19wLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdWxEYXRhQmxvY2tTaXplX3ApOwogCi0jZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKIAl0U2hiRXJyb3IgU2hiQ2lyVHJhY2VCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKQEAgLTE5NCwxMCArMTgxLDYgQEAKICNkZWZpbmUgU2hiVHJhY2VEdW1wKHAwLCBwMSwgcDIsIHAzKQogI2VuZGlmCiAKLSN1bmRlZiAgSU5MSU5FX0VOQUJMRUQJCS8vIGRpc2FibGUgYWN0dWFsIGlubGluaW5nIG9mIGZ1bmN0aW9ucwotI3VuZGVmICBJTkxJTkVfRlVOQ1RJT04KLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OCQkvLyBkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OIHRvIG5vdGhpbmcKLQogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hiSXBjLUxpbnV4S2VybmVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYklwYy1MaW51eEtlcm5lbC5jCmluZGV4IDFkM2NiM2YuLjQ5NzkzOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hiSXBjLUxpbnV4S2VybmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGJJcGMtTGludXhLZXJuZWwuYwpAQCAtNzksOCArNzksNiBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZiAoIWRlZmluZWQoU0hCSVBDX0lOTElORUQpKSB8fCBkZWZpbmVkKFNIQklQQ19JTkxJTkVfRU5BQkxFRCkKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vICBDb25maWd1cmF0aW9uCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjExLDEzICsyMDksMTEgQEAKIC8vIG5vdCBpbmxpbmVkIGludGVybmFsIGZ1bmN0aW9ucwogaW50IFNoYklwY1RocmVhZFNpZ25hbE5ld0RhdGEodm9pZCAqcHZUaHJlYWRQYXJhbV9wKTsKIGludCBTaGJJcGNUaHJlYWRTaWduYWxKb2JSZWFkeSh2b2lkICpwdlRocmVhZFBhcmFtX3ApOwotI2VuZGlmCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBtb2R1bCBnbG9iYWxlIHZhcnMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSNpZiAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCiBzdHJ1Y3Qgc1NoYk1lbVRhYmxlICpwc01lbVRhYmxlRWxlbWVudEZpcnN0X2c7CiAKIHN0YXRpYyB2b2lkICpTaGJJcGNBbGxvY1ByaXZhdGVNZW0odW5zaWduZWQgbG9uZyB1bE1lbVNpemVfcCk7CkBAIC0yMzAsNyArMjI2LDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIFNoYklwY0NyYzMyR2V0Q3JjKGNvbnN0IGNoYXIgKnBjU3RyaW5nLAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGF1bENyY1RhYmxlWzI1Nl0pOwogCi0jZW5kaWYKIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCkBAIC0yMzgsNyArMjMzLDYgQEAKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwogCi0jaWYgIWRlZmluZWQoU0hCSVBDX0lOTElORV9FTkFCTEVEKQogLy8gbm90IGlubGluZWQgZXh0ZXJuYWwgZnVuY3Rpb25zCiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MzMsMTUgKzQyNywxMSBAQAogCXJldHVybiAoU2hiRXJyb3IpOwogfQogCi0jZW5kaWYgLy8gIWRlZmluZWQoU0hCSVBDX0lOTElORV9FTkFCTEVEKQotCi0jaWYgKCFkZWZpbmVkKFNIQklQQ19JTkxJTkVEKSkgfHwgZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgRW50ZXIgYXRvbWljIHNlY3Rpb24gZm9yIFNoYXJlZCBCdWZmZXIgYWNjZXNzCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY0VudGVyQXRvbWljU2VjdGlvbih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCit0U2hiRXJyb3IgU2hiSXBjRW50ZXJBdG9taWNTZWN0aW9uKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKIHsKIAogCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKQEAgLTQ2OSw3ICs0NTksNyBAQAogLy8gIExlYXZlIGF0b21pYyBzZWN0aW9uIGZvciBTaGFyZWQgQnVmZmVyIGFjY2VzcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJJcGNMZWF2ZUF0b21pY1NlY3Rpb24odFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQordFNoYkVycm9yIFNoYklwY0xlYXZlQXRvbWljU2VjdGlvbih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAKIAl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7CkBAIC00OTYsMTIgKzQ4Niw5IEBACiAvLyAgU3RhcnQgc2lnbmFsaW5nIG9mIG5ldyBkYXRhIChjYWxsZWQgZnJvbSByZWFkaW5nIHByb2Nlc3MpCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY1N0YXJ0U2lnbmFsaW5nTmV3RGF0YSh0U2hiSW5zdGFuY2UKLQkJCQkJCSAgICAgIHBTaGJJbnN0YW5jZV9wLAotCQkJCQkJICAgICAgdFNpZ0huZGxyTmV3RGF0YQotCQkJCQkJICAgICAgcGZuU2lnbmFsSGFuZGxlck5ld0RhdGFfcCwKLQkJCQkJCSAgICAgIHRTaGJQcmlvcml0eQotCQkJCQkJICAgICAgU2hiUHJpb3JpdHlfcCkKK3RTaGJFcnJvciBTaGJJcGNTdGFydFNpZ25hbGluZ05ld0RhdGEodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wLAorCQkJCSAgICAgIHRTaWdIbmRsck5ld0RhdGEgcGZuU2lnbmFsSGFuZGxlck5ld0RhdGFfcCwKKwkJCQkgICAgICB0U2hiUHJpb3JpdHkgU2hiUHJpb3JpdHlfcCkKIHsKIAl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7CiAJdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKQEAgLTU1Nyw4ICs1NDQsNyBAQAogLy8gIFN0b3Agc2lnbmFsaW5nIG9mIG5ldyBkYXRhIChjYWxsZWQgZnJvbSByZWFkaW5nIHByb2Nlc3MpCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY1N0b3BTaWduYWxpbmdOZXdEYXRhKHRTaGJJbnN0YW5jZQotCQkJCQkJICAgICBwU2hiSW5zdGFuY2VfcCkKK3RTaGJFcnJvciBTaGJJcGNTdG9wU2lnbmFsaW5nTmV3RGF0YSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAJdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwogCXRTaGJNZW1IZWFkZXIgKnBTaGJNZW1IZWFkZXI7CkBAIC02MDQsNyArNTkwLDcgQEAKIC8vICBTaWduYWwgbmV3IGRhdGEgKGNhbGxlZCBmcm9tIHdyaXRpbmcgcHJvY2VzcykKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjU2lnbmFsTmV3RGF0YSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCit0U2hiRXJyb3IgU2hiSXBjU2lnbmFsTmV3RGF0YSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAJdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKIApAQCAtNjI1LDEyICs2MTEsOSBAQAogLy8gIFN0YXJ0IHNpZ25hbGluZyBmb3Igam9iIHJlYWR5IChjYWxsZWQgZnJvbSB3YWl0aW5nIHByb2Nlc3MpCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY1N0YXJ0U2lnbmFsaW5nSm9iUmVhZHkodFNoYkluc3RhbmNlCi0JCQkJCQkgICAgICAgcFNoYkluc3RhbmNlX3AsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZwotCQkJCQkJICAgICAgIHVsVGltZU91dF9wLAotCQkJCQkJICAgICAgIHRTaWdIbmRsckpvYlJlYWR5Ci0JCQkJCQkgICAgICAgcGZuU2lnbmFsSGFuZGxlckpvYlJlYWR5X3ApCit0U2hiRXJyb3IgU2hiSXBjU3RhcnRTaWduYWxpbmdKb2JSZWFkeSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdWxUaW1lT3V0X3AsCisJCQkJICAgICAgIHRTaWdIbmRsckpvYlJlYWR5IHBmblNpZ25hbEhhbmRsZXJKb2JSZWFkeV9wKQogewogCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKIAl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwpAQCAtNjYzLDcgKzY0Niw3IEBACiAvLyAgU2lnbmFsIGpvYiByZWFkeSAoY2FsbGVkIGZyb20gZXhlY3V0aW5nIHByb2Nlc3MpCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY1NpZ25hbEpvYlJlYWR5KHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKK3RTaGJFcnJvciBTaGJJcGNTaWduYWxKb2JSZWFkeSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAJdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKIApAQCAtNjg1LDcgKzY2OCw3IEBACiAvLyAgR2V0IHBvaW50ZXIgdG8gY29tbW9uIHVzZWQgc2hhcmUgbWVtb3J5IGFyZWEKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkICpTaGJJcGNHZXRTaE1lbVB0cih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCit2b2lkICpTaGJJcGNHZXRTaE1lbVB0cih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCiB7CiAKIAl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwpAQCAtNjk0LDcgKzY3Nyw3IEBACiAJcFNoYk1lbUhlYWRlciA9CiAJICAgIFNoYklwY0dldFNoYk1lbUhlYWRlcihTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKSk7CiAJaWYgKHBTaGJNZW1IZWFkZXIgIT0gTlVMTCkgewotCQlwU2hiU2hNZW1QdHIgPSAoQllURSAqKSBwU2hiTWVtSGVhZGVyICsgc2l6ZW9mKHRTaGJNZW1IZWFkZXIpOworCQlwU2hiU2hNZW1QdHIgPSAodTggKikgcFNoYk1lbUhlYWRlciArIHNpemVvZih0U2hiTWVtSGVhZGVyKTsKIAl9IGVsc2UgewogCQlwU2hiU2hNZW1QdHIgPSBOVUxMOwogCX0KQEAgLTcwMywxNiArNjg2LDEyIEBACiAKIH0KIAotI2VuZGlmCi0KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwogLy8gICAgICAgICAgUCBSIEkgViBBIFQgRSAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vLwogCi0jaWYgIWRlZmluZWQoU0hCSVBDX0lOTElORV9FTkFCTEVEKQotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIEdldCBwb2ludGVyIHRvIHByb2Nlc3MgbG9jYWwgaW5mb3JtYXRpb24gc3RydWN0dXJlCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTYzLDQgKzk0MiwzIEBACiAKIH0KIAotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYklwYy1XaW4zMi5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGJJcGMtV2luMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkxODE0Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYklwYy1XaW4zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gIChjKSBTWVNURUMgZWxlY3Ryb25pYyBHbWJILCBELTA3OTczIEdyZWl6LCBBdWd1c3QtQmViZWwtU3RyLiAyOQotICAgICAgd3d3LnN5c3RlYy1lbGVjdHJvbmljLmNvbQotCi0gIFByb2plY3Q6ICAgICAgUHJvamVjdCBpbmRlcGVuZGVuZCBzaGFyZWQgYnVmZmVyIChsaW5lYXIgKyBjaXJjdWxhcikKLQotICBEZXNjcmlwdGlvbjogIEltcGxlbWVudGF0aW9uIG9mIHBsYXRmb3JtIHNwZWNpZmljIHBhcnQgZm9yIHRoZQotICAgICAgICAgICAgICAgIHNoYXJlZCBidWZmZXIKLSAgICAgICAgICAgICAgICAoSW1wbGVtZW50YXRpb24gZm9yIFdpbjMyKQotCi0gIExpY2Vuc2U6Ci0KLSAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICBhcmUgbWV0OgotCi0gICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTWVNURUMgZWxlY3Ryb25pYyBHbWJIIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICAgICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGluZm9Ac3lzdGVjLWVsZWN0cm9uaWMuY29tLgotCi0gICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICAgIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgotICAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0gICAgU2V2ZXJhYmlsaXR5IENsYXVzZToKLQotICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCi0gICAgICAgIHVuZW5mb3JjZWFibGUgaW4gYW55IGp1cmlzZGljdGlvbiwgdGhhdCBzaGFsbCBub3QgYWZmZWN0OgotICAgICAgICAxLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gdGhhdCBqdXJpc2RpY3Rpb24gb2YgYW55IG90aGVyCi0gICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0gICAgICAgIDIuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiBvdGhlciBqdXJpc2RpY3Rpb25zIG9mIHRoYXQgb3IKLSAgICAgICAgICAgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIDIwMDYvMDYvMjcgLXJzOiAgIFYgMS4wMCAoaW5pdGlhbCB2ZXJzaW9uKQotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFdJTlZFUiAgICAgICAweDA0MDAJLy8gI2RlZmluZXMgbmVjZXNzYXJ5IGZvciB1c2FnZSBvZgotI2RlZmluZSBfV0lOMzJfV0lOTlQgMHgwNDAwCS8vIGZ1bmN0aW9uIDxTaWduYWxPYmplY3RBbmRXYWl0PgotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAiZ2xvYmFsLmgiCi0jaW5jbHVkZSAic2hhcmVkYnVmZi5oIgotI2luY2x1ZGUgInNoYmlwYy5oIgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAgICAgICAgICBHIEwgTyBCIEEgTCAgIEQgRSBGIEkgTiBJIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWYgKCFkZWZpbmVkKFNIQklQQ19JTkxJTkVEKSkgfHwgZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgQ29uZmlndXJhdGlvbgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBDb25zdGFudCBkZWZpbml0aW9ucwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBNQVhfTEVOX0JVRkZFUl9JRCAgICAgICBNQVhfUEFUSAotCi0jZGVmaW5lIElEWF9FVkVOVF9ORVdfREFUQSAgICAgIDAKLSNkZWZpbmUgSURYX0VWRU5UX1RFUk1fUkVRVSAgICAgMQotI2RlZmluZSBJRFhfRVZFTlRfVEVSTV9SRVNQICAgICAyCi0KLSNkZWZpbmUgTkFNRV9NVVRFWF9CVUZGX0FDQ0VTUyAgIkJ1ZmZBY2Nlc3MiCi0jZGVmaW5lIE5BTUVfRVZFTlRfTkVXX0RBVEEgICAgICJOZXdEYXRhIgotI2RlZmluZSBOQU1FX0VWRU5UX1RFUk1fUkVRVSAgICAiVGVybVJlcXUiCi0jZGVmaW5lIE5BTUVfRVZFTlRfVEVSTV9SRVNQICAgICJUZXJtUmVzcCIKLSNkZWZpbmUgTkFNRV9FVkVOVF9KT0JfUkVBRFkgICAgIkpvYlJlYWR5IgotCi0jZGVmaW5lIFRJTUVPVVRfRU5URVJfQVRPTUlDICAgIDEwMDAJLy8gZm9yIGRlYmdnaW5nOiBJTkZJTklURQotI2RlZmluZSBUSU1FT1VUX1RFUk1fVEhSRUFEICAgICAyMDAwCi0KLSNkZWZpbmUgU0JJX01BR0lDX0lEICAgICAgICAgICAgMHg1MzQyNDkyQgkvLyBtYWdpYyBJRCAoIlNCSSsiKQotI2RlZmluZSBTQkhfTUFHSUNfSUQgICAgICAgICAgICAweDUzNDI0ODJBCS8vIG1hZ2ljIElEICgiU0JIKiIpCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgTG9jYWwgdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRoaXMgc3RydWN0dXJlIGlzIHRoZSBjb21tb24gaGVhZGVyIGZvciB0aGUgc2hhcmVkIG1lbW9yeSByZWdpb24gdXNlZAotLy8gYnkgYWxsIHByb2Nlc3NlcyBhdHRhY2hlZCB0aGlzIHNoYXJlZCBtZW1vcnkuIEl0IGluY2x1ZGVzIGNvbW1vbgotLy8gaW5mb3JtYXRpb24gdG8gYWRtaW5pc3RyYXRlL21hbmFnZSB0aGUgc2hhcmVkIGJ1ZmZlciBmcm9tIGEgY291cGxlIG9mCi0vLyBzZXBhcmF0ZWQgcHJvY2Vzc2VzIChlLmcuIHRoZSByZWZlcm5jZSBjb3VudGVyKS4gVGhpcyBzdHJ1Y3R1cmUgaXMKLS8vIGxvY2F0ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiBpdHNlbGYgYW5kIGV4aXN0cwotLy8gY29uc2VxdWVudGx5IG9ubHkgb25lIHRpbWVzIHBlciBzaGFyZWQgbWVtb3J5IGluc3RhbmNlLgotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgbV9TYmhNYWdpY0lEOwkvLyBtYWdpYyBJRCAoIlNCSCoiKQotCXVuc2lnbmVkIGxvbmcgbV91bFNoTWVtU2l6ZTsKLQl1bnNpZ25lZCBsb25nIG1fdWxSZWZDb3VudDsKLQljaGFyIG1fc3pCdWZmZXJJRFtNQVhfTEVOX0JVRkZFUl9JRF07Ci0KLSNpZm5kZWYgTkRFQlVHCi0JdW5zaWduZWQgbG9uZyBtX3VsT3duZXJQcm9jSUQ7Ci0jZW5kaWYKLQotfSB0U2hiTWVtSGVhZGVyOwotCi0vLyBUaGlzIHN0cnVjdHVyZSBpcyB0aGUgImV4dGVybmFsIGVudHJ5IHBvaW50IiBmcm9tIGEgc2VwYXJhdGUgcHJvY2VzcwotLy8gdG8gZ2V0IGFjY2VzcyB0byBhIHNoYXJlZCBidWZmZXIuIFRoaXMgc3RydWN0dXJlIGluY2x1ZGVzIGFsbCBwbGF0Zm9ybQotLy8gcmVzcC4gdGFyZ2V0IHNwZWNpZmljIGluZm9ybWF0aW9uIHRvIGFkbWluaXN0cmF0ZS9tYW5hZ2UgdGhlIHNoYXJlZAotLy8gYnVmZmVyIGZyb20gYSBzZXBhcmF0ZSBwcm9jZXNzLiBFdmVyeSBwcm9jZXNzIGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQKLS8vIGJ1ZmZlciBoYXMgaXRzIG93biBydW50aW1lIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0dXJlIHdpdGggaXRzIGluZGl2aWR1YWwKLS8vIHJ1bnRpbWUgZGF0YSAoZS5nLiB0aGUgc2NvcGUgb2YgYW4gZXZlbnQgaGFuZGxlIGlzIGxpbWl0dGVkIHRvIHRoZQotLy8gb3duZXIgcHJvY2VzcyBvbmx5KS4gVGhlIHN0cnVjdHVyZSBtZW1iZXIgPG1fcFNoYk1lbUhlYWRlcj4gcG9pbnRzCi0vLyB0byB0aGUgKHByb2Nlc3Mgc3BlY2lmaWMpIHN0YXJ0IGFkZHJlc3Mgb2YgdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9uCi0vLyBpdHNlbGYuCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBtX1NiaU1hZ2ljSUQ7CS8vIG1hZ2ljIElEICgiU0JJKyIpCi0JSEFORExFIG1faFNoYXJlZE1lbTsKLQlIQU5ETEUgbV9oTXV0ZXhCdWZmQWNjZXNzOwotCUhBTkRMRSBtX2hUaHJlYWROZXdEYXRhOwkvLyB0aHJhZWQgdG8gc2lnbmFsIHRoYXQgbmV3IGRhdGEgYXJlIGF2YWlsYWJsZQotCUhBTkRMRSBtX2FoRXZlbnROZXdEYXRhWzNdOwkvLyBJRFhfRVZFTlRfTkVXX0RBVEEgKyBJRFhfRVZFTlRfVEVSTV9SRVFVICsgSURfRVZFTlRfVEVSTV9SRVNQCi0JdFNpZ0huZGxyTmV3RGF0YSBtX3BmblNpZ0huZGxyTmV3RGF0YTsKLQlIQU5ETEUgbV9oVGhyZWFkSm9iUmVhZHk7CS8vIHRocmVhZCB0byBzaWduYWwgdGhhdCBhIGpvYi9vcGVyYXRpb24gaXMgcmVhZHkgbm93IChlLmcuIHJlc2V0IGJ1ZmZlcikKLQlIQU5ETEUgbV9oRXZlbnRKb2JSZWFkeTsKLQl1bnNpZ25lZCBsb25nIG1fdWxUaW1lT3V0Sm9iUmVhZHk7Ci0JdFNpZ0huZGxySm9iUmVhZHkgbV9wZm5TaWdIbmRsckpvYlJlYWR5OwotCXRTaGJNZW1IZWFkZXIgKm1fcFNoYk1lbUhlYWRlcjsKLQotI2lmbmRlZiBOREVCVUcKLQl1bnNpZ25lZCBsb25nIG1fdWxUaHJlYWRJRE5ld0RhdGE7Ci0JdW5zaWduZWQgbG9uZyBtX3VsVGhyZWFkSURKb2JSZWFkeTsKLSNlbmRpZgotCi19IHRTaGJNZW1JbnN0OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIEdsb2JhbCB2YXJpYWJsZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgTG9jYWwgdmFyaWFibGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFByb3RvdHlwZXMgb2YgaW50ZXJuYWwgZnVuY3Rpb25zCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIEdldCBwb2ludGVyIHRvIHByb2Nlc3MgbG9jYWwgaW5mb3JtYXRpb24gc3RydWN0dXJlCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdFNoYk1lbUluc3QgKlNoYklwY0dldFNoYk1lbUluc3QodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQotewotCi0JdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwotCi0JcFNoYk1lbUluc3QgPSAodFNoYk1lbUluc3QgKikgcFNoYkluc3RhbmNlX3A7Ci0JQVNTRVJUKHBTaGJNZW1JbnN0LT5tX1NiaU1hZ2ljSUQgPT0gU0JJX01BR0lDX0lEKTsKLQotCXJldHVybiAocFNoYk1lbUluc3QpOwotCi19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgR2V0IHBvaW50ZXIgdG8gc2hhcmVkIG1lbW9yeSBoZWFkZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiTWVtSGVhZGVyICpTaGJJcGNHZXRTaGJNZW1IZWFkZXIodFNoYkluc3RhbmNlCi0JCQkJCQkgICAgIHBTaGJJbnN0YW5jZV9wKQotewotCi0JdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwotCXRTaGJNZW1IZWFkZXIgKnBTaGJNZW1IZWFkZXI7Ci0KLQlwU2hiTWVtSW5zdCA9IFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlX3ApOwotCXBTaGJNZW1IZWFkZXIgPSBwU2hiTWVtSW5zdC0+bV9wU2hiTWVtSGVhZGVyOwotCUFTU0VSVChwU2hiTWVtSGVhZGVyLT5tX1NiaE1hZ2ljSUQgPT0gU0JIX01BR0lDX0lEKTsKLQotCXJldHVybiAocFNoYk1lbUhlYWRlcik7Ci0KLX0KLQotLy8gbm90IGlubGluZWQgaW50ZXJuYWwgZnVuY3Rpb25zCi1EV09SRCBXSU5BUEkgU2hiSXBjVGhyZWFkU2lnbmFsTmV3RGF0YShMUFZPSUQgcHZUaHJlYWRQYXJhbV9wKTsKLURXT1JEIFdJTkFQSSBTaGJJcGNUaHJlYWRTaWduYWxKb2JSZWFkeShMUFZPSUQgcHZUaHJlYWRQYXJhbV9wKTsKLWNvbnN0IGNoYXIgKlNoYklwY0dldFVuaWZvcm1PYmplY3ROYW1lKGNvbnN0IGNoYXIgKnBzekV2ZW50Sm9iTmFtZV9wLAotCQkJCSAgICAgICBjb25zdCBjaGFyICpwc3pCdWZmZXJJRF9wLAotCQkJCSAgICAgICBCT09MIGZHbG9iYWxPYmplY3RfcCk7Ci0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoU0hCSVBDX0lOTElORV9FTkFCTEVEKQotLy8gdHJ1ZSBpbnRlcm5hbCBmdW5jdGlvbnMgKG5vdCBpbmxpbmVkKQotc3RhdGljIHZvaWQgKlNoYklwY0FsbG9jUHJpdmF0ZU1lbSh1bnNpZ25lZCBsb25nIHVsTWVtU2l6ZV9wKTsKLXN0YXRpYyB2b2lkIFNoYklwY1JlbGVhc2VQcml2YXRlTWVtKHZvaWQgKnBNZW1fcCk7Ci0jZW5kaWYKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICBQIFUgQiBMIEkgQyAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0KLSNpZiAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0vLyBub3QgaW5saW5lZCBleHRlcm5hbCBmdW5jdGlvbnMKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBJbml0aWFsaXplIElQQyBmb3IgU2hhcmVkIEJ1ZmZlciBNb2R1bGUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXRTaGJFcnJvciBTaGJJcGNJbml0KHZvaWQpCi17Ci0KLQlyZXR1cm4gKGtTaGJPayk7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBEZWluaXRpYWxpemUgSVBDIGZvciBTaGFyZWQgQnVmZmVyIE1vZHVsZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdFNoYkVycm9yIFNoYklwY0V4aXQodm9pZCkKLXsKLQotCXJldHVybiAoa1NoYk9rKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIEFsbG9jYXRlIFNoYXJlZCBCdWZmZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXRTaGJFcnJvciBTaGJJcGNBbGxvY0J1ZmZlcih1bnNpZ25lZCBsb25nIHVsQnVmZmVyU2l6ZV9wLAotCQkJICAgIGNvbnN0IGNoYXIgKnBzekJ1ZmZlcklEX3AsCi0JCQkgICAgdFNoYkluc3RhbmNlICogcHBTaGJJbnN0YW5jZV9wLAotCQkJICAgIHVuc2lnbmVkIGludCAqcGZTaGJOZXdDcmVhdGVkX3ApCi17Ci0KLQlIQU5ETEUgaFNoYXJlZE1lbTsKLQlMUFZPSUQgcFNoYXJlZE1lbTsKLQl1bnNpZ25lZCBsb25nIHVsU2hNZW1TaXplOwotCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKLQl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwotCXRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2U7Ci0JdW5zaWduZWQgaW50IGZTaE1lbU5ld0NyZWF0ZWQ7Ci0JY29uc3QgY2hhciAqcHN6T2JqZWN0TmFtZTsKLQlIQU5ETEUgaE11dGV4QnVmZkFjY2VzczsKLQlIQU5ETEUgaEV2ZW50TmV3RGF0YTsKLQlIQU5ETEUgaEV2ZW50Sm9iUmVhZHk7Ci0JdFNoYkVycm9yIFNoYkVycm9yOwotCi0JdWxTaE1lbVNpemUgPSB1bEJ1ZmZlclNpemVfcCArIHNpemVvZih0U2hiTWVtSGVhZGVyKTsKLQlwU2hhcmVkTWVtID0gTlVMTDsKLQlwU2hiSW5zdGFuY2UgPSBOVUxMOwotCWZTaE1lbU5ld0NyZWF0ZWQgPSBGQUxTRTsKLQlTaGJFcnJvciA9IGtTaGJPazsKLQotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JLy8gKDEpIG9wZW4gYW4gZXhpc3Rpbmcgb3IgY3JlYXRlIGEgbmV3IHNoYXJlZCBtZW1vcnkKLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS8vIHRyeSB0byBvcGVuIGFuIGFscmVhZHkgZXhpc3Rpbmcgc2hhcmVkIG1lbW9yeQotCS8vIChjcmVhdGVkIGJ5IGFuIGFub3RoZXIgcHJvY2VzcykKLQloU2hhcmVkTWVtID0gT3BlbkZpbGVNYXBwaW5nKEZJTEVfTUFQX0FMTF9BQ0NFU1MsCS8vIERXT1JEIGR3RGVzaXJlZEFjY2VzcwotCQkJCSAgICAgRkFMU0UsCS8vIEJPT0wgYkluaGVyaXRIYW5kbGUKLQkJCQkgICAgIHBzekJ1ZmZlcklEX3ApOwkvLyBMUENUU1RSIGxwTmFtZQotCWlmIChoU2hhcmVkTWVtICE9IE5VTEwpIHsKLQkJLy8gYSBzaGFyZWQgbWVtb3J5IGFscmVhZHkgZXhpc3RzCi0JCWZTaE1lbU5ld0NyZWF0ZWQgPSBGQUxTRTsKLQl9IGVsc2UgewotCQkvLyBpdCBzZWFtcyB0aGF0IHRoaXMgcHJvY2VzcyBpcyB0aGUgZmlyc3Qgd2hvIHdhbnRzIHRvIHVzZSB0aGUKLQkJLy8gc2hhcmVkIG1lbW9yeSwgc28gaXQgaGFzIHRvIGNyZWF0ZSBhIG5ldyBzaGFyZWQgbWVtb3J5Ci0JCWhTaGFyZWRNZW0gPSBDcmVhdGVGaWxlTWFwcGluZyhJTlZBTElEX0hBTkRMRV9WQUxVRSwJLy8gSEFORExFIGhGaWxlCi0JCQkJCSAgICAgICBOVUxMLAkvLyBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgbHBBdHRyaWJ1dGVzCi0JCQkJCSAgICAgICBQQUdFX1JFQURXUklURSwJLy8gRFdPUkQgZmxQcm90ZWN0Ci0JCQkJCSAgICAgICAwLAkvLyBEV09SRCBkd01heGltdW1TaXplSGlnaAotCQkJCQkgICAgICAgdWxTaE1lbVNpemUsCS8vIERXT1JEIGR3TWF4aW11bVNpemVMb3cKLQkJCQkJICAgICAgIHBzekJ1ZmZlcklEX3ApOwkvLyBMUENUU1RSIGxwTmFtZQotCi0JCWZTaE1lbU5ld0NyZWF0ZWQgPSBUUlVFOwotCX0KLQotCWlmIChoU2hhcmVkTWVtID09IE5VTEwpIHsKLQkJU2hiRXJyb3IgPSBrU2hiT3V0T2ZNZW07Ci0JCWdvdG8gRXhpdDsKLQl9Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS8vICgyKSBnZXQgdGhlIHBvaW50ZXIgdG8gdGhlIHNoYXJlZCBtZW1vcnkKLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCXBTaGFyZWRNZW0gPSBNYXBWaWV3T2ZGaWxlKGhTaGFyZWRNZW0sCS8vIEhBTkRMRSBoRmlsZU1hcHBpbmdPYmplY3QKLQkJCQkgICBGSUxFX01BUF9BTExfQUNDRVNTLAkvLyBEV09SRCBkd0Rlc2lyZWRBY2Nlc3MsCi0JCQkJICAgMCwJLy8gRFdPUkQgZHdGaWxlT2Zmc2V0SGlnaCwKLQkJCQkgICAwLAkvLyBEV09SRCBkd0ZpbGVPZmZzZXRMb3csCi0JCQkJICAgdWxTaE1lbVNpemUpOwkvLyBTSVpFX1QgZHdOdW1iZXJPZkJ5dGVzVG9NYXAKLQotCWlmIChwU2hhcmVkTWVtID09IE5VTEwpIHsKLQkJU2hiRXJyb3IgPSBrU2hiT3V0T2ZNZW07Ci0JCWdvdG8gRXhpdDsKLQl9Ci0KLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS8vICgzKSBzZXR1cCBvciB1cGRhdGUgaGVhZGVyIGFuZCBtYW5hZ2VtZW50IGluZm9ybWF0aW9uCi0JLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQlwU2hiTWVtSGVhZGVyID0gKHRTaGJNZW1IZWFkZXIgKikgcFNoYXJlZE1lbTsKLQotCS8vIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIGZyb20gcHJvY2VzcyBzcGVjaWZpYyBtZW1wb29sIHRvIHNhdmUKLQkvLyBwcm9jZXNzIGxvY2FsIGluZm9ybWF0aW9uIHRvIGFkbWluaXN0cmF0ZS9tYW5hZ2UgdGhlIHNoYXJlZCBidWZmZXIKLQlwU2hiTWVtSW5zdCA9Ci0JICAgICh0U2hiTWVtSW5zdCAqKSBTaGJJcGNBbGxvY1ByaXZhdGVNZW0oc2l6ZW9mKHRTaGJNZW1JbnN0KSk7Ci0JaWYgKHBTaGJNZW1JbnN0ID09IE5VTEwpIHsKLQkJU2hiRXJyb3IgPSBrU2hiT3V0T2ZNZW07Ci0JCWdvdG8gRXhpdDsKLQl9Ci0JLy8gcmVzZXQgY29tcGxldGUgaGVhZGVyIHRvIGRlZmF1bHQgdmFsdWVzCi0JcFNoYk1lbUluc3QtPm1fU2JpTWFnaWNJRCA9IFNCSV9NQUdJQ19JRDsKLQlwU2hiTWVtSW5zdC0+bV9oU2hhcmVkTWVtID0gaFNoYXJlZE1lbTsKLQlwU2hiTWVtSW5zdC0+bV9oTXV0ZXhCdWZmQWNjZXNzID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JcFNoYk1lbUluc3QtPm1faFRocmVhZE5ld0RhdGEgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQlwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfTkVXX0RBVEFdID0KLQkgICAgSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVRVV0gPQotCSAgICBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQlwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVNQXSA9Ci0JICAgIElOVkFMSURfSEFORExFX1ZBTFVFOwotCXBTaGJNZW1JbnN0LT5tX3BmblNpZ0huZGxyTmV3RGF0YSA9IE5VTEw7Ci0JcFNoYk1lbUluc3QtPm1faFRocmVhZEpvYlJlYWR5ID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JcFNoYk1lbUluc3QtPm1faEV2ZW50Sm9iUmVhZHkgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQlwU2hiTWVtSW5zdC0+bV91bFRpbWVPdXRKb2JSZWFkeSA9IDA7Ci0JcFNoYk1lbUluc3QtPm1fcGZuU2lnSG5kbHJKb2JSZWFkeSA9IE5VTEw7Ci0JcFNoYk1lbUluc3QtPm1fcFNoYk1lbUhlYWRlciA9IHBTaGJNZW1IZWFkZXI7Ci0KLSNpZm5kZWYgTkRFQlVHCi0JewotCQlwU2hiTWVtSW5zdC0+bV91bFRocmVhZElETmV3RGF0YSA9IDA7Ci0JCXBTaGJNZW1JbnN0LT5tX3VsVGhyZWFkSURKb2JSZWFkeSA9IDA7Ci0JfQotI2VuZGlmCi0KLQkvLyBjcmVhdGUgbXV0ZXggZm9yIGJ1ZmZlciBhY2Nlc3MKLQlwc3pPYmplY3ROYW1lID0KLQkgICAgU2hiSXBjR2V0VW5pZm9ybU9iamVjdE5hbWUoTkFNRV9NVVRFWF9CVUZGX0FDQ0VTUywgcHN6QnVmZmVySURfcCwKLQkJCQkgICAgICAgVFJVRSk7Ci0JaE11dGV4QnVmZkFjY2VzcyA9IENyZWF0ZU11dGV4KE5VTEwsCS8vIExQU0VDVVJJVFlfQVRUUklCVVRFUyBscE11dGV4QXR0cmlidXRlcwotCQkJCSAgICAgICBGQUxTRSwJLy8gQk9PTCBiSW5pdGlhbE93bmVyCi0JCQkJICAgICAgIHBzek9iamVjdE5hbWUpOwkvLyBMUENUU1RSIGxwTmFtZQotCXBTaGJNZW1JbnN0LT5tX2hNdXRleEJ1ZmZBY2Nlc3MgPSBoTXV0ZXhCdWZmQWNjZXNzOwotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9oTXV0ZXhCdWZmQWNjZXNzICE9IE5VTEwpOwotCi0JLy8gVGhlIEV2ZW50TmV3RGF0YSBpcyB1c2VkIGZvciBzaWduYWxpbmcgb2YgbmV3IGRhdGEgYWZ0ZXIgYSB3cml0ZQotCS8vIG9wZXJhdGlvbiAoU2V0RXZlbnQpIGFzIHdlbGwgYXMgZm9yIHdhaXRpbmcgZm9yIG5ldyBkYXRhIG9uIHRoZQotCS8vIHJlYWRlciBzaWRlIChXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKS4gQmVjYXVzZSBpdCdzIG5vdCBrbm93biBpZgotCS8vIHRoaXMgcHJvY2VzcyB3aWxsIGJlIHJlYWQgb3Igd3JpdGUgZGF0YSwgdGhlIGV2ZW50IHdpbGwgYmUKLQkvLyBhbHdheXMgY3JlYXRlZCBoZXJlLgotCXBzek9iamVjdE5hbWUgPQotCSAgICBTaGJJcGNHZXRVbmlmb3JtT2JqZWN0TmFtZShOQU1FX0VWRU5UX05FV19EQVRBLCBwc3pCdWZmZXJJRF9wLAotCQkJCSAgICAgICBUUlVFKTsKLQloRXZlbnROZXdEYXRhID0gQ3JlYXRlRXZlbnQoTlVMTCwJLy8gTFBTRUNVUklUWV9BVFRSSUJVVEVTIGxwRXZlbnRBdHRyaWJ1dGVzCi0JCQkJICAgIEZBTFNFLAkvLyBCT09MIGJNYW51YWxSZXNldAotCQkJCSAgICBGQUxTRSwJLy8gQk9PTCBiSW5pdGlhbFN0YXRlCi0JCQkJICAgIHBzek9iamVjdE5hbWUpOwkvLyBMUENUU1RSIGxwTmFtZQotCXBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9ORVdfREFUQV0gPSBoRXZlbnROZXdEYXRhOwotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfTkVXX0RBVEFdICE9IE5VTEwpOwotCi0JLy8gVGhlIEV2ZW50Sm9iUmVhZHkgaXMgdXNlZCBmb3Igc2lnbmFsaW5nIHRoYXQgYSBqb2IgaXMgZG9uZSAoU2V0RXZlbnQpCi0JLy8gYXMgd2VsbCBhcyBmb3Igd2FpdGluZyBmb3IgZmluaXNoaW5nIG9mIGEgam9iIChXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKS4KLQkvLyBCZWNhdXNlIGl0J3Mgbm90IGtub3duIGlmIHRoaXMgcHJvY2VzcyB3aWxsIHNpZ25hbCBvciB3YWl0LCB0aGUgZXZlbnQKLQkvLyB3aWxsIGJlIGFsd2F5cyBjcmVhdGVkIGhlcmUuCi0JcHN6T2JqZWN0TmFtZSA9Ci0JICAgIFNoYklwY0dldFVuaWZvcm1PYmplY3ROYW1lKE5BTUVfRVZFTlRfSk9CX1JFQURZLCBwc3pCdWZmZXJJRF9wLAotCQkJCSAgICAgICBUUlVFKTsKLQloRXZlbnRKb2JSZWFkeSA9IENyZWF0ZUV2ZW50KE5VTEwsCS8vIExQU0VDVVJJVFlfQVRUUklCVVRFUyBscEV2ZW50QXR0cmlidXRlcwotCQkJCSAgICAgRkFMU0UsCS8vIEJPT0wgYk1hbnVhbFJlc2V0Ci0JCQkJICAgICBGQUxTRSwJLy8gQk9PTCBiSW5pdGlhbFN0YXRlCi0JCQkJICAgICBwc3pPYmplY3ROYW1lKTsJLy8gTFBDVFNUUiBscE5hbWUKLQlwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeSA9IGhFdmVudEpvYlJlYWR5OwotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeSAhPSBOVUxMKTsKLQotCWlmIChmU2hNZW1OZXdDcmVhdGVkKSB7Ci0JCS8vIHRoaXMgcHJvY2VzcyB3YXMgdGhlIGZpcnN0IHdobyB3YW50ZWQgdG8gdXNlIHRoZSBzaGFyZWQgbWVtb3J5LAotCQkvLyBzbyBhIG5ldyBzaGFyZWQgbWVtb3J5IHdhcyBjcmVhdGVkCi0JCS8vIC0+IHNldHVwIG5ldyBoZWFkZXIgaW5mb3JtYXRpb24gaW5zaWRlIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbgotCQkvLyAgICBpdHNlbGYKLQkJcFNoYk1lbUhlYWRlci0+bV9TYmhNYWdpY0lEID0gU0JIX01BR0lDX0lEOwotCQlwU2hiTWVtSGVhZGVyLT5tX3VsU2hNZW1TaXplID0gdWxTaE1lbVNpemU7Ci0JCXBTaGJNZW1IZWFkZXItPm1fdWxSZWZDb3VudCA9IDE7Ci0JCXN0cm5jcHkocFNoYk1lbUhlYWRlci0+bV9zekJ1ZmZlcklELCBwc3pCdWZmZXJJRF9wLAotCQkJc2l6ZW9mKHBTaGJNZW1IZWFkZXItPm1fc3pCdWZmZXJJRCkgLSAxKTsKLQotI2lmbmRlZiBOREVCVUcKLQkJewotCQkJcFNoYk1lbUhlYWRlci0+bV91bE93bmVyUHJvY0lEID0gR2V0Q3VycmVudFByb2Nlc3NJZCgpOwotCQl9Ci0jZW5kaWYKLQl9IGVsc2UgewotCQkvLyBhbnkgb3RoZXIgcHJvY2VzcyBoYXMgY3JlYXRlZCB0aGUgc2hhcmVkIG1lbW9yeSBhbmQgdGhpcwotCQkvLyBwcm9jZXNzIGhhcyBvbmx5IGF0dGFjaGVkIHRvIGl0Ci0JCS8vIC0+IGNoZWNrIGFuZCB1cGRhdGUgZXhpc3RpbmcgaGVhZGVyIGluZm9ybWF0aW9uIGluc2lkZSB0aGUKLQkJLy8gICAgc2hhcmVkIG1lbW9yeSByZWdpb24gaXRzZWxmCi0JCWlmIChwU2hiTWVtSGVhZGVyLT5tX3VsU2hNZW1TaXplICE9IHVsU2hNZW1TaXplKSB7Ci0JCQlTaGJFcnJvciA9IGtTaGJPcGVuTWlzbWF0Y2g7Ci0JCQlnb3RvIEV4aXQ7Ci0JCX0KLSNpZm5kZWYgTkRFQlVHCi0JCXsKLQkJCWlmIChzdHJuY21wCi0JCQkgICAgKHBTaGJNZW1IZWFkZXItPm1fc3pCdWZmZXJJRCwgcHN6QnVmZmVySURfcCwKLQkJCSAgICAgc2l6ZW9mKHBTaGJNZW1IZWFkZXItPm1fc3pCdWZmZXJJRCkgLSAxKSkgewotCQkJCVNoYkVycm9yID0ga1NoYk9wZW5NaXNtYXRjaDsKLQkJCQlnb3RvIEV4aXQ7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCi0JCXBTaGJNZW1IZWFkZXItPm1fdWxSZWZDb3VudCsrOwotCX0KLQotCS8vIHNldCBhYnN0YXJjdCAiaGFuZGxlIiBmb3IgcmV0dXJuaW5nIHRvIGFwcGxpY2F0aW9uCi0JcFNoYkluc3RhbmNlID0gKHRTaGJJbnN0YW5jZSAqKSBwU2hiTWVtSW5zdDsKLQotICAgICAgRXhpdDoKLQotCWlmIChTaGJFcnJvciAhPSBrU2hiT2spIHsKLQkJaWYgKHBTaGJNZW1JbnN0ICE9IE5VTEwpIHsKLQkJCVNoYklwY1JlbGVhc2VQcml2YXRlTWVtKHBTaGJNZW1JbnN0KTsKLQkJfQotCQlpZiAocFNoYXJlZE1lbSAhPSBOVUxMKSB7Ci0JCQlVbm1hcFZpZXdPZkZpbGUocFNoYXJlZE1lbSk7Ci0JCX0KLQkJaWYgKGhTaGFyZWRNZW0gIT0gTlVMTCkgewotCQkJQ2xvc2VIYW5kbGUoaFNoYXJlZE1lbSk7Ci0JCX0KLQl9Ci0KLQkqcGZTaGJOZXdDcmVhdGVkX3AgPSBmU2hNZW1OZXdDcmVhdGVkOwotCSpwcFNoYkluc3RhbmNlX3AgPSBwU2hiSW5zdGFuY2U7Ci0KLQlyZXR1cm4gKFNoYkVycm9yKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFJlbGVhc2UgU2hhcmVkIEJ1ZmZlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdFNoYkVycm9yIFNoYklwY1JlbGVhc2VCdWZmZXIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQotewotCi0JdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwotCXRTaGJNZW1IZWFkZXIgKnBTaGJNZW1IZWFkZXI7Ci0JSEFORExFIGhFdmVudE5ld0RhdGE7Ci0JSEFORExFIGhNdXRleEJ1ZmZBY2Nlc3M7Ci0JdFNoYkVycm9yIFNoYkVycm9yOwotCXRTaGJFcnJvciBTaGJFcnJvcjI7Ci0KLQlpZiAocFNoYkluc3RhbmNlX3AgPT0gTlVMTCkgewotCQlyZXR1cm4gKGtTaGJPayk7Ci0JfQotCi0JcFNoYk1lbUluc3QgPSBTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKTsKLQlwU2hiTWVtSGVhZGVyID0gU2hiSXBjR2V0U2hiTWVtSGVhZGVyKHBTaGJJbnN0YW5jZV9wKTsKLQotCWlmICghLS1wU2hiTWVtSGVhZGVyLT5tX3VsUmVmQ291bnQpIHsKLQkJU2hiRXJyb3IgPSBrU2hiT2s7Ci0JfSBlbHNlIHsKLQkJU2hiRXJyb3IgPSBrU2hiTWVtVXNlZEJ5T3RoZXJQcm9jczsKLQl9Ci0KLQlTaGJFcnJvcjIgPSBTaGJJcGNTdG9wU2lnbmFsaW5nTmV3RGF0YShwU2hiSW5zdGFuY2VfcCk7Ci0JaEV2ZW50TmV3RGF0YSA9IHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9ORVdfREFUQV07Ci0JaWYgKGhFdmVudE5ld0RhdGEgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLQkJQ2xvc2VIYW5kbGUoaEV2ZW50TmV3RGF0YSk7Ci0JCXBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9ORVdfREFUQV0gPQotCQkgICAgSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0JfQotCi0JaE11dGV4QnVmZkFjY2VzcyA9IHBTaGJNZW1JbnN0LT5tX2hNdXRleEJ1ZmZBY2Nlc3M7Ci0JaWYgKGhNdXRleEJ1ZmZBY2Nlc3MgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLQkJQ2xvc2VIYW5kbGUoaE11dGV4QnVmZkFjY2Vzcyk7Ci0JCXBTaGJNZW1JbnN0LT5tX2hNdXRleEJ1ZmZBY2Nlc3MgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQl9Ci0KLQlVbm1hcFZpZXdPZkZpbGUocFNoYk1lbUhlYWRlcik7Ci0JaWYgKHBTaGJNZW1JbnN0LT5tX2hTaGFyZWRNZW0gIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLQkJQ2xvc2VIYW5kbGUocFNoYk1lbUluc3QtPm1faFNoYXJlZE1lbSk7Ci0JCXBTaGJNZW1JbnN0LT5tX2hTaGFyZWRNZW0gPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQl9Ci0KLQlTaGJJcGNSZWxlYXNlUHJpdmF0ZU1lbShwU2hiTWVtSW5zdCk7Ci0KLQlpZiAoU2hiRXJyb3IgPT0ga1NoYk9rKSB7Ci0JCVNoYkVycm9yID0gU2hiRXJyb3IyOwotCX0KLQotCXJldHVybiAoU2hiRXJyb3IpOwotCi19Ci0KLSNlbmRpZiAvLyAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0KLSNpZiAoIWRlZmluZWQoU0hCSVBDX0lOTElORUQpKSB8fCBkZWZpbmVkKFNIQklQQ19JTkxJTkVfRU5BQkxFRCkKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBFbnRlciBhdG9taWMgc2VjdGlvbiBmb3IgU2hhcmVkIEJ1ZmZlciBhY2Nlc3MKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjRW50ZXJBdG9taWNTZWN0aW9uKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCkKLXsKLQotCXRTaGJNZW1JbnN0ICpwU2hiTWVtSW5zdDsKLQlIQU5ETEUgaE11dGV4QnVmZkFjY2VzczsKLQlEV09SRCBkd1dhaXRSZXN1bHQ7Ci0JdFNoYkVycm9yIFNoYkVycm9yOwotCi0JaWYgKHBTaGJJbnN0YW5jZV9wID09IE5VTEwpIHsKLQkJcmV0dXJuIChrU2hiSW52YWxpZEFyZyk7Ci0JfQotCi0JcFNoYk1lbUluc3QgPSBTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKTsKLQlTaGJFcnJvciA9IGtTaGJPazsKLQotCWhNdXRleEJ1ZmZBY2Nlc3MgPSBwU2hiTWVtSW5zdC0+bV9oTXV0ZXhCdWZmQWNjZXNzOwotCWlmIChoTXV0ZXhCdWZmQWNjZXNzICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0JCWR3V2FpdFJlc3VsdCA9Ci0JCSAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KGhNdXRleEJ1ZmZBY2Nlc3MsIFRJTUVPVVRfRU5URVJfQVRPTUlDKTsKLQkJc3dpdGNoIChkd1dhaXRSZXN1bHQpIHsKLQkJY2FzZSBXQUlUX09CSkVDVF8wICsgMDoKLQkJCXsKLQkJCQlicmVhazsKLQkJCX0KLQotCQljYXNlIFdBSVRfVElNRU9VVDoKLQkJCXsKLQkJCQlUUkFDRTAKLQkJCQkgICAgKCJcblNoYklwY0VudGVyQXRvbWljU2VjdGlvbigpOiBXQUlUX1RJTUVPVVQiKTsKLQkJCQlBU1NFUlQoMCk7Ci0JCQkJU2hiRXJyb3IgPSBrU2hiQnVmZmVySW52YWxpZDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQljYXNlIFdBSVRfQUJBTkRPTkVEOgotCQkJewotCQkJCVRSQUNFMAotCQkJCSAgICAoIlxuU2hiSXBjRW50ZXJBdG9taWNTZWN0aW9uKCk6IFdBSVRfQUJBTkRPTkVEIik7Ci0JCQkJQVNTRVJUKDApOwotCQkJCVNoYkVycm9yID0ga1NoYkJ1ZmZlckludmFsaWQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJY2FzZSBXQUlUX0ZBSUxFRDoKLQkJCXsKLQkJCQlUUkFDRTEKLQkJCQkgICAgKCJcblNoYklwY0VudGVyQXRvbWljU2VjdGlvbigpOiBXQUlUX0ZBSUxFRCAtPiBMYXN0RXJyb3I9JWxkIiwKLQkJCQkgICAgIEdldExhc3RFcnJvcigpKTsKLQkJCQlBU1NFUlQoMCk7Ci0JCQkJU2hiRXJyb3IgPSBrU2hiQnVmZmVySW52YWxpZDsKLQkJCQlicmVhazsKLQkJCX0KLQotCQlkZWZhdWx0OgotCQkJewotCQkJCVRSQUNFMQotCQkJCSAgICAoIlxuU2hiSXBjRW50ZXJBdG9taWNTZWN0aW9uKCk6IHVua25vd24gZXJyb3IgLT4gTGFzdEVycm9yPSVsZCIsCi0JCQkJICAgICBHZXRMYXN0RXJyb3IoKSk7Ci0JCQkJQVNTRVJUKDApOwotCQkJCVNoYkVycm9yID0ga1NoYkJ1ZmZlckludmFsaWQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlTaGJFcnJvciA9IGtTaGJCdWZmZXJJbnZhbGlkOwotCX0KLQotCXJldHVybiAoU2hiRXJyb3IpOwotCi19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgTGVhdmUgYXRvbWljIHNlY3Rpb24gZm9yIFNoYXJlZCBCdWZmZXIgYWNjZXNzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY0xlYXZlQXRvbWljU2VjdGlvbih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JSEFORExFIGhNdXRleEJ1ZmZBY2Nlc3M7Ci0JQk9PTCBmUmVzOwotCXRTaGJFcnJvciBTaGJFcnJvcjsKLQotCWlmIChwU2hiSW5zdGFuY2VfcCA9PSBOVUxMKSB7Ci0JCXJldHVybiAoa1NoYkludmFsaWRBcmcpOwotCX0KLQotCXBTaGJNZW1JbnN0ID0gU2hiSXBjR2V0U2hiTWVtSW5zdChwU2hiSW5zdGFuY2VfcCk7Ci0JU2hiRXJyb3IgPSBrU2hiT2s7Ci0KLQloTXV0ZXhCdWZmQWNjZXNzID0gcFNoYk1lbUluc3QtPm1faE11dGV4QnVmZkFjY2VzczsKLQlpZiAoaE11dGV4QnVmZkFjY2VzcyAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlmUmVzID0gUmVsZWFzZU11dGV4KGhNdXRleEJ1ZmZBY2Nlc3MpOwotCQlBU1NFUlQoZlJlcyk7Ci0JfSBlbHNlIHsKLQkJU2hiRXJyb3IgPSBrU2hiQnVmZmVySW52YWxpZDsKLQl9Ci0KLQlyZXR1cm4gKFNoYkVycm9yKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFN0YXJ0IHNpZ25hbGluZyBvZiBuZXcgZGF0YSAoY2FsbGVkIGZyb20gcmVhZGluZyBwcm9jZXNzKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJJcGNTdGFydFNpZ25hbGluZ05ld0RhdGEodFNoYkluc3RhbmNlCi0JCQkJCQkgICAgICBwU2hiSW5zdGFuY2VfcCwKLQkJCQkJCSAgICAgIHRTaWdIbmRsck5ld0RhdGEKLQkJCQkJCSAgICAgIHBmblNpZ25hbEhhbmRsZXJOZXdEYXRhX3AsCi0JCQkJCQkgICAgICB0U2hiUHJpb3JpdHkKLQkJCQkJCSAgICAgIFNoYlByaW9yaXR5X3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKLQljb25zdCBjaGFyICpwc3pPYmplY3ROYW1lOwotCUhBTkRMRSBoRXZlbnRUZXJtUmVxdTsKLQlIQU5ETEUgaEV2ZW50VGVybVJlc3A7Ci0JSEFORExFIGhUaHJlYWROZXdEYXRhOwotCXVuc2lnbmVkIGxvbmcgdWxUaHJlYWRJRE5ld0RhdGE7Ci0JdFNoYkVycm9yIFNoYkVycm9yOwotCWludCBpUHJpb3JpdHk7Ci0KLQlpZiAoKHBTaGJJbnN0YW5jZV9wID09IE5VTEwpIHx8IChwZm5TaWduYWxIYW5kbGVyTmV3RGF0YV9wID09IE5VTEwpKSB7Ci0JCXJldHVybiAoa1NoYkludmFsaWRBcmcpOwotCX0KLQotCXBTaGJNZW1JbnN0ID0gU2hiSXBjR2V0U2hiTWVtSW5zdChwU2hiSW5zdGFuY2VfcCk7Ci0JcFNoYk1lbUhlYWRlciA9IFNoYklwY0dldFNoYk1lbUhlYWRlcihwU2hiSW5zdGFuY2VfcCk7Ci0JU2hiRXJyb3IgPSBrU2hiT2s7Ci0KLQlpZiAoKHBTaGJNZW1JbnN0LT5tX2hUaHJlYWROZXdEYXRhICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSB8fAotCSAgICAocFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVRVV0gIT0KLQkgICAgIElOVkFMSURfSEFORExFX1ZBTFVFKQotCSAgICB8fCAocFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVTUF0gIT0KLQkJSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0JICAgIHx8IChwU2hiTWVtSW5zdC0+bV9wZm5TaWdIbmRsck5ld0RhdGEgIT0gTlVMTCkpIHsKLQkJU2hiRXJyb3IgPSBrU2hiQWxyZWFkeVNpZ25hbGluZzsKLQkJZ290byBFeGl0OwotCX0KLQotCXBTaGJNZW1JbnN0LT5tX3BmblNpZ0huZGxyTmV3RGF0YSA9IHBmblNpZ25hbEhhbmRsZXJOZXdEYXRhX3A7Ci0KLQkvLyBCZWNhdXNlIHRoZSBldmVudCA8cFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX05FV19EQVRBXT4KLQkvLyBpcyB1c2VkIGZvciBzaWduYWxpbmcgb2YgbmV3IGRhdGEgYWZ0ZXIgYSB3cml0ZSBvcGVyYXRpb24gdG9vICh1c2luZwotCS8vIFNldEV2ZW50KSwgaXQgaXMgYWx3YXlzIGNyZWF0ZWQgaGVyZSAoc2VlIDxTaGJJcGNBbGxvY0J1ZmZlcj4pLgotCi0JcHN6T2JqZWN0TmFtZSA9Ci0JICAgIFNoYklwY0dldFVuaWZvcm1PYmplY3ROYW1lKE5BTUVfRVZFTlRfVEVSTV9SRVFVLAotCQkJCSAgICAgICBwU2hiTWVtSGVhZGVyLT5tX3N6QnVmZmVySUQsIEZBTFNFKTsKLQloRXZlbnRUZXJtUmVxdSA9IENyZWF0ZUV2ZW50KE5VTEwsCS8vIExQU0VDVVJJVFlfQVRUUklCVVRFUyBscEV2ZW50QXR0cmlidXRlcwotCQkJCSAgICAgRkFMU0UsCS8vIEJPT0wgYk1hbnVhbFJlc2V0Ci0JCQkJICAgICBGQUxTRSwJLy8gQk9PTCBiSW5pdGlhbFN0YXRlCi0JCQkJICAgICBwc3pPYmplY3ROYW1lKTsJLy8gTFBDVFNUUiBscE5hbWUKLQlwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVFVXSA9IGhFdmVudFRlcm1SZXF1OwotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVFVXSAhPSBOVUxMKTsKLQotCXBzek9iamVjdE5hbWUgPQotCSAgICBTaGJJcGNHZXRVbmlmb3JtT2JqZWN0TmFtZShOQU1FX0VWRU5UX1RFUk1fUkVTUCwKLQkJCQkgICAgICAgcFNoYk1lbUhlYWRlci0+bV9zekJ1ZmZlcklELCBGQUxTRSk7Ci0JaEV2ZW50VGVybVJlc3AgPSBDcmVhdGVFdmVudChOVUxMLAkvLyBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgbHBFdmVudEF0dHJpYnV0ZXMKLQkJCQkgICAgIEZBTFNFLAkvLyBCT09MIGJNYW51YWxSZXNldAotCQkJCSAgICAgRkFMU0UsCS8vIEJPT0wgYkluaXRpYWxTdGF0ZQotCQkJCSAgICAgcHN6T2JqZWN0TmFtZSk7CS8vIExQQ1RTVFIgbHBOYW1lCi0JcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVTUF0gPSBoRXZlbnRUZXJtUmVzcDsKLQlBU1NFUlQocFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVTUF0gIT0gTlVMTCk7Ci0KLQloVGhyZWFkTmV3RGF0YSA9IENyZWF0ZVRocmVhZChOVUxMLAkvLyBMUFNFQ1VSSVRZX0FUVFJJQlVURVMgbHBUaHJlYWRBdHRyaWJ1dGVzCi0JCQkJICAgICAgMCwJLy8gU0laRV9UIGR3U3RhY2tTaXplCi0JCQkJICAgICAgU2hiSXBjVGhyZWFkU2lnbmFsTmV3RGF0YSwJLy8gTFBUSFJFQURfU1RBUlRfUk9VVElORSBscFN0YXJ0QWRkcmVzcwotCQkJCSAgICAgIHBTaGJJbnN0YW5jZV9wLAkvLyBMUFZPSUQgbHBQYXJhbWV0ZXIKLQkJCQkgICAgICAwLAkvLyBEV09SRCBkd0NyZWF0aW9uRmxhZ3MKLQkJCQkgICAgICAmdWxUaHJlYWRJRE5ld0RhdGEpOwkvLyBMUERXT1JEIGxwVGhyZWFkSWQKLQotCXN3aXRjaCAoU2hiUHJpb3JpdHlfcCkgewotCWNhc2Uga1NoYlByaW9yaXR5TG93OgotCQlpUHJpb3JpdHkgPSBUSFJFQURfUFJJT1JJVFlfQkVMT1dfTk9STUFMOwotCQlicmVhazsKLQotCWNhc2Uga1NoYlByaW9yaXR5Tm9ybWFsOgotCQlpUHJpb3JpdHkgPSBUSFJFQURfUFJJT1JJVFlfTk9STUFMOwotCQlicmVhazsKLQotCWNhc2Uga3NoYlByaW9yaXR5SGlnaDoKLQkJaVByaW9yaXR5ID0gVEhSRUFEX1BSSU9SSVRZX0FCT1ZFX05PUk1BTDsKLQkJYnJlYWs7Ci0KLQl9Ci0KLQlBU1NFUlQocFNoYk1lbUluc3QtPm1faFRocmVhZE5ld0RhdGEgIT0gTlVMTCk7Ci0KLQlTZXRUaHJlYWRQcmlvcml0eShoVGhyZWFkTmV3RGF0YSwgaVByaW9yaXR5KTsKLQotCXBTaGJNZW1JbnN0LT5tX2hUaHJlYWROZXdEYXRhID0gaFRocmVhZE5ld0RhdGE7Ci0KLSNpZm5kZWYgTkRFQlVHCi0JewotCQlwU2hiTWVtSW5zdC0+bV91bFRocmVhZElETmV3RGF0YSA9IHVsVGhyZWFkSUROZXdEYXRhOwotCX0KLSNlbmRpZgotCi0gICAgICBFeGl0OgotCi0JcmV0dXJuIChTaGJFcnJvcik7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBTdG9wIHNpZ25hbGluZyBvZiBuZXcgZGF0YSAoY2FsbGVkIGZyb20gcmVhZGluZyBwcm9jZXNzKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIHRTaGJFcnJvciBTaGJJcGNTdG9wU2lnbmFsaW5nTmV3RGF0YSh0U2hiSW5zdGFuY2UKLQkJCQkJCSAgICAgcFNoYkluc3RhbmNlX3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JSEFORExFIGhFdmVudFRlcm1SZXF1OwotCUhBTkRMRSBoRXZlbnRUZXJtUmVzcDsKLQlEV09SRCBkd1dhaXRSZXN1bHQ7Ci0KLQlpZiAocFNoYkluc3RhbmNlX3AgPT0gTlVMTCkgewotCQlyZXR1cm4gKGtTaGJJbnZhbGlkQXJnKTsKLQl9Ci0KLQlwU2hiTWVtSW5zdCA9IFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlX3ApOwotCi0JLy8gdGVybWluYXRlIG5ldyBkYXRhIHNpZ25hbGluZyB0aHJlYWQKLQkvLyAoc2V0IGV2ZW50IDxoRXZlbnRUZXJtUmVxdT4gdG8gd2FrZXVwIHRoZSB0aHJlYWQgYW5kIGRpc3Bvc2UgaXQKLQkvLyB0byBleGl0LCB0aGVuIHdhaXQgZm9yIGNvbmZpcm1hdGlvbiB1c2luZyBldmVudCA8aEV2ZW50VGVybVJlc3A+KQotCWhFdmVudFRlcm1SZXF1ID0gcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX1RFUk1fUkVRVV07Ci0JaEV2ZW50VGVybVJlc3AgPSBwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVNQXTsKLQlpZiAoKGhFdmVudFRlcm1SZXF1ICE9IElOVkFMSURfSEFORExFX1ZBTFVFKSAmJgotCSAgICAoaEV2ZW50VGVybVJlc3AgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpKSB7Ci0JCVRSQUNFMCgiXG5TaGJJcGNTdG9wU2lnbmFsaW5nTmV3RGF0YSgpOiBlbnRlciB3YWl0IHN0YXRlIik7Ci0JCWR3V2FpdFJlc3VsdCA9IFNpZ25hbE9iamVjdEFuZFdhaXQoaEV2ZW50VGVybVJlcXUsCS8vIEhBTkRMRSBoT2JqZWN0VG9TaWduYWwKLQkJCQkJCSAgIGhFdmVudFRlcm1SZXNwLAkvLyBIQU5ETEUgaE9iamVjdFRvV2FpdE9uCi0JCQkJCQkgICBUSU1FT1VUX1RFUk1fVEhSRUFELAkvLyBEV09SRCBkd01pbGxpc2Vjb25kcwotCQkJCQkJICAgRkFMU0UpOwkvLyBCT09MIGJBbGVydGFibGUKLQkJVFJBQ0UwCi0JCSAgICAoIlxuU2hiSXBjU3RvcFNpZ25hbGluZ05ld0RhdGEoKTogd2FpdCBzdGF0ZSBsZWF2ZWQ6IC0tLT4gIik7Ci0JCXN3aXRjaCAoZHdXYWl0UmVzdWx0KSB7Ci0JCWNhc2UgV0FJVF9PQkpFQ1RfMCArIDA6CS8vIGV2ZW50ICJuZXcgZGF0YSBzaWduYWxpbmcgdGhyZWFkIHRlcm1pbmF0ZWQiCi0JCQl7Ci0JCQkJVFJBQ0UwKCJFdmVudCA9IFdBSVRfT0JKRUNUXzArMCIpOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCWRlZmF1bHQ6Ci0JCQl7Ci0JCQkJVFJBQ0UwKCJVbmhhbmRsZWQgRXZlbnQiKTsKLQkJCQlBU1NFUlQoMCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAocFNoYk1lbUluc3QtPm1faFRocmVhZE5ld0RhdGEgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLQkJQ2xvc2VIYW5kbGUocFNoYk1lbUluc3QtPm1faFRocmVhZE5ld0RhdGEpOwotCQlwU2hiTWVtSW5zdC0+bV9oVGhyZWFkTmV3RGF0YSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotCX0KLQotCWlmIChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVFVXSAhPQotCSAgICBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlDbG9zZUhhbmRsZShwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVFVXSk7Ci0JCXBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFUVVdID0KLQkJICAgIElOVkFMSURfSEFORExFX1ZBTFVFOwotCX0KLQotCWlmIChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVNQXSAhPQotCSAgICBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlDbG9zZUhhbmRsZShwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfVEVSTV9SRVNQXSk7Ci0JCXBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFU1BdID0KLQkJICAgIElOVkFMSURfSEFORExFX1ZBTFVFOwotCX0KLQotCXBTaGJNZW1JbnN0LT5tX3BmblNpZ0huZGxyTmV3RGF0YSA9IE5VTEw7Ci0KLQlyZXR1cm4gKGtTaGJPayk7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBTaWduYWwgbmV3IGRhdGEgKGNhbGxlZCBmcm9tIHdyaXRpbmcgcHJvY2VzcykKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjU2lnbmFsTmV3RGF0YSh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JSEFORExFIGhFdmVudE5ld0RhdGE7Ci0JQk9PTCBmUmVzOwotCi0JLy8gVFJBQ0UwKCJcblNoYklwY1NpZ25hbE5ld0RhdGEoKTogZW50ZXJcbiIpOwotCi0JaWYgKHBTaGJJbnN0YW5jZV9wID09IE5VTEwpIHsKLQkJcmV0dXJuIChrU2hiSW52YWxpZEFyZyk7Ci0JfQotCi0JcFNoYk1lbUluc3QgPSBTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKTsKLQotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVtJRFhfRVZFTlRfTkVXX0RBVEFdICE9Ci0JICAgICAgIElOVkFMSURfSEFORExFX1ZBTFVFKTsKLQloRXZlbnROZXdEYXRhID0gcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbSURYX0VWRU5UX05FV19EQVRBXTsKLQlpZiAoaEV2ZW50TmV3RGF0YSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotCQlmUmVzID0gU2V0RXZlbnQoaEV2ZW50TmV3RGF0YSk7Ci0JCS8vIFRSQUNFMSgiXG5TaGJJcGNTaWduYWxOZXdEYXRhKCk6IEV2ZW50TmV3RGF0YSBzZXQgKFJlc3VsdD0lZClcbiIsIChpbnQpZlJlcyk7Ci0JCUFTU0VSVChmUmVzKTsKLQl9Ci0JLy8gVFJBQ0UwKCJcblNoYklwY1NpZ25hbE5ld0RhdGEoKTogbGVhdmVcbiIpOwotCXJldHVybiAoa1NoYk9rKTsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFN0YXJ0IHNpZ25hbGluZyBmb3Igam9iIHJlYWR5IChjYWxsZWQgZnJvbSB3YWl0aW5nIHByb2Nlc3MpCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdFNoYkVycm9yIFNoYklwY1N0YXJ0U2lnbmFsaW5nSm9iUmVhZHkodFNoYkluc3RhbmNlCi0JCQkJCQkgICAgICAgcFNoYkluc3RhbmNlX3AsCi0JCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZwotCQkJCQkJICAgICAgIHVsVGltZU91dF9wLAotCQkJCQkJICAgICAgIHRTaWdIbmRsckpvYlJlYWR5Ci0JCQkJCQkgICAgICAgcGZuU2lnbmFsSGFuZGxlckpvYlJlYWR5X3ApCi17Ci0KLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JdFNoYk1lbUhlYWRlciAqcFNoYk1lbUhlYWRlcjsKLQlIQU5ETEUgaFRocmVhZEpvYlJlYWR5OwotCXVuc2lnbmVkIGxvbmcgdWxUaHJlYWRJREpvYlJlYWR5OwotCXRTaGJFcnJvciBTaGJFcnJvcjsKLQotCWlmICgocFNoYkluc3RhbmNlX3AgPT0gTlVMTCkgfHwgKHBmblNpZ25hbEhhbmRsZXJKb2JSZWFkeV9wID09IE5VTEwpKSB7Ci0JCXJldHVybiAoa1NoYkludmFsaWRBcmcpOwotCX0KLQotCXBTaGJNZW1JbnN0ID0gU2hiSXBjR2V0U2hiTWVtSW5zdChwU2hiSW5zdGFuY2VfcCk7Ci0JcFNoYk1lbUhlYWRlciA9IFNoYklwY0dldFNoYk1lbUhlYWRlcihwU2hiSW5zdGFuY2VfcCk7Ci0JU2hiRXJyb3IgPSBrU2hiT2s7Ci0KLQlpZiAoKHBTaGJNZW1JbnN0LT5tX2hUaHJlYWRKb2JSZWFkeSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgfHwKLQkgICAgKHBTaGJNZW1JbnN0LT5tX3BmblNpZ0huZGxySm9iUmVhZHkgIT0gTlVMTCkpIHsKLQkJU2hiRXJyb3IgPSBrU2hiQWxyZWFkeVNpZ25hbGluZzsKLQkJZ290byBFeGl0OwotCX0KLQotCXBTaGJNZW1JbnN0LT5tX3VsVGltZU91dEpvYlJlYWR5ID0gdWxUaW1lT3V0X3A7Ci0JcFNoYk1lbUluc3QtPm1fcGZuU2lnSG5kbHJKb2JSZWFkeSA9IHBmblNpZ25hbEhhbmRsZXJKb2JSZWFkeV9wOwotCi0JLy8gQmVjYXVzZSB0aGUgZXZlbnQgPHBTaGJNZW1JbnN0LT5tX2FoRXZlbnRKb2JSZWFkeT4gaXMgdXNlZCBmb3IKLQkvLyBzaWduYWxpbmcgb2YgYSBmaW5pc2hlZCBqb2IgdG9vICh1c2luZyBTZXRFdmVudCksIGl0IGlzIGFsd2F5cwotCS8vIGNyZWF0ZWQgaGVyZSAoc2VlIDxTaGJJcGNBbGxvY0J1ZmZlcj4pLgotCi0JaFRocmVhZEpvYlJlYWR5ID0gQ3JlYXRlVGhyZWFkKE5VTEwsCS8vIExQU0VDVVJJVFlfQVRUUklCVVRFUyBscFRocmVhZEF0dHJpYnV0ZXMKLQkJCQkgICAgICAgMCwJLy8gU0laRV9UIGR3U3RhY2tTaXplCi0JCQkJICAgICAgIFNoYklwY1RocmVhZFNpZ25hbEpvYlJlYWR5LAkvLyBMUFRIUkVBRF9TVEFSVF9ST1VUSU5FIGxwU3RhcnRBZGRyZXNzCi0JCQkJICAgICAgIHBTaGJJbnN0YW5jZV9wLAkvLyBMUFZPSUQgbHBQYXJhbWV0ZXIKLQkJCQkgICAgICAgMCwJLy8gRFdPUkQgZHdDcmVhdGlvbkZsYWdzCi0JCQkJICAgICAgICZ1bFRocmVhZElESm9iUmVhZHkpOwkvLyBMUERXT1JEIGxwVGhyZWFkSWQKLQotCXBTaGJNZW1JbnN0LT5tX2hUaHJlYWRKb2JSZWFkeSA9IGhUaHJlYWRKb2JSZWFkeTsKLQlBU1NFUlQocFNoYk1lbUluc3QtPm1faFRocmVhZEpvYlJlYWR5ICE9IE5VTEwpOwotCi0jaWZuZGVmIE5ERUJVRwotCXsKLQkJcFNoYk1lbUluc3QtPm1fdWxUaHJlYWRJREpvYlJlYWR5ID0gdWxUaHJlYWRJREpvYlJlYWR5OwotCX0KLSNlbmRpZgotCi0gICAgICBFeGl0OgotCi0JcmV0dXJuIChTaGJFcnJvcik7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBTaWduYWwgam9iIHJlYWR5IChjYWxsZWQgZnJvbSBleGVjdXRpbmcgcHJvY2VzcykKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB0U2hiRXJyb3IgU2hiSXBjU2lnbmFsSm9iUmVhZHkodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKQotewotCi0JdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwotCUhBTkRMRSBoRXZlbnRKb2JSZWFkeTsKLQlCT09MIGZSZXM7Ci0KLQkvLyBUUkFDRTAoIlxuU2hiSXBjU2lnbmFsSm9iUmVhZHkoKTogZW50ZXJcbiIpOwotCi0JaWYgKHBTaGJJbnN0YW5jZV9wID09IE5VTEwpIHsKLQkJcmV0dXJuIChrU2hiSW52YWxpZEFyZyk7Ci0JfQotCi0JcFNoYk1lbUluc3QgPSBTaGJJcGNHZXRTaGJNZW1JbnN0KHBTaGJJbnN0YW5jZV9wKTsKLQotCUFTU0VSVChwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSk7Ci0JaEV2ZW50Sm9iUmVhZHkgPSBwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeTsKLQlpZiAoaEV2ZW50Sm9iUmVhZHkgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLQkJZlJlcyA9IFNldEV2ZW50KGhFdmVudEpvYlJlYWR5KTsKLQkJLy8gVFJBQ0UxKCJcblNoYklwY1NpZ25hbEpvYlJlYWR5KCk6IEV2ZW50Sm9iUmVhZHkgc2V0IChSZXN1bHQ9JWQpXG4iLCAoaW50KWZSZXMpOwotCQlBU1NFUlQoZlJlcyk7Ci0JfQotCS8vIFRSQUNFMCgiXG5TaGJJcGNTaWduYWxKb2JSZWFkeSgpOiBsZWF2ZVxuIik7Ci0JcmV0dXJuIChrU2hiT2spOwotCi19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgR2V0IHBvaW50ZXIgdG8gY29tbW9uIHVzZWQgc2hhcmUgbWVtb3J5IGFyZWEKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiB2b2lkICpTaGJJcGNHZXRTaE1lbVB0cih0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3ApCi17Ci0KLQl0U2hiTWVtSGVhZGVyICpwU2hiTWVtSGVhZGVyOwotCXZvaWQgKnBTaGJTaE1lbVB0cjsKLQotCXBTaGJNZW1IZWFkZXIgPSBTaGJJcGNHZXRTaGJNZW1IZWFkZXIocFNoYkluc3RhbmNlX3ApOwotCWlmIChwU2hiTWVtSGVhZGVyICE9IE5VTEwpIHsKLQkJcFNoYlNoTWVtUHRyID0gKEJZVEUgKikgcFNoYk1lbUhlYWRlciArIHNpemVvZih0U2hiTWVtSGVhZGVyKTsKLQl9IGVsc2UgewotCQlwU2hiU2hNZW1QdHIgPSBOVUxMOwotCX0KLQotCXJldHVybiAocFNoYlNoTWVtUHRyKTsKLQotfQotCi0jZW5kaWYKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0vLyAgICAgICAgICBQIFIgSSBWIEEgVCBFICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCi0KLSNpZiAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgZnJvbSBwcm9jZXNzIHNwZWNpZmljIG1lbXBvb2wKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXN0YXRpYyB2b2lkICpTaGJJcGNBbGxvY1ByaXZhdGVNZW0odW5zaWduZWQgbG9uZyB1bE1lbVNpemVfcCkKLXsKLQotCUhHTE9CQUwgaE1lbTsKLQl2b2lkICpwTWVtOwotCi0JaE1lbSA9IEdsb2JhbEFsbG9jKEdNRU1fRklYRUQsIHVsTWVtU2l6ZV9wICsgc2l6ZW9mKEhHTE9CQUwpKTsKLQlwTWVtID0gR2xvYmFsTG9jayhoTWVtKTsKLQlpZiAocE1lbSAhPSBOVUxMKSB7Ci0JCSooSEdMT0JBTCAqKSBwTWVtID0gaE1lbTsKLQkJKEJZVEUgKikgcE1lbSArPSBzaXplb2YoSEdMT0JBTCk7Ci0JfQotCi0jaWZuZGVmIE5ERUJVRwotCXsKLQkJbWVtc2V0KHBNZW0sIDB4YWEsIHVsTWVtU2l6ZV9wKTsKLQl9Ci0jZW5kaWYKLQotCXJldHVybiAocE1lbSk7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBSZWxlYXNlIGEgbWVtb3J5IGJsb2NrIGZyb20gcHJvY2VzcyBzcGVjaWZpYyBtZW1wb29sCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1zdGF0aWMgdm9pZCBTaGJJcGNSZWxlYXNlUHJpdmF0ZU1lbSh2b2lkICpwTWVtX3ApCi17Ci0KLQlIR0xPQkFMIGhNZW07Ci0KLQlpZiAocE1lbV9wID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQotCShCWVRFICopIHBNZW1fcCAtPSBzaXplb2YoSEdMT0JBTCk7Ci0JaE1lbSA9ICooSEdMT0JBTCAqKSBwTWVtX3A7Ci0KLQlHbG9iYWxVbmxvY2soaE1lbSk7Ci0JR2xvYmFsRnJlZShoTWVtKTsKLQotCXJldHVybjsKLQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIENyZWF0ZSB1bmlmb3JtIG9iamVjdCBuYW1lIChuZWVkZWQgZm9yIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbikKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNvbnN0IGNoYXIgKlNoYklwY0dldFVuaWZvcm1PYmplY3ROYW1lKGNvbnN0IGNoYXIgKnBzek9iamVjdEpvYk5hbWVfcCwKLQkJCQkgICAgICAgY29uc3QgY2hhciAqcHN6QnVmZmVySURfcCwKLQkJCQkgICAgICAgQk9PTCBmR2xvYmFsT2JqZWN0X3ApCi17Ci0KLQlzdGF0aWMgY2hhciBzek9iamVjdE5hbWVbTUFYX1BBVEhdOwotCWNoYXIgc3pPYmplY3RQcmVmaXhbTUFYX1BBVEhdOwotCi0JaWYgKGZHbG9iYWxPYmplY3RfcCkgewotCQlzdHJuY3B5KHN6T2JqZWN0UHJlZml4LCAiR2xvYmFsXFwiLCBzaXplb2Yoc3pPYmplY3RQcmVmaXgpKTsKLQl9IGVsc2UgewotCQlfc25wcmludGYoc3pPYmplY3RQcmVmaXgsIHNpemVvZihzek9iamVjdFByZWZpeCksICJQSUQlMDhsWF8iLAotCQkJICAodW5zaWduZWQgbG9uZylHZXRDdXJyZW50UHJvY2Vzc0lkKCkpOwotCX0KLQotCV9zbnByaW50Zihzek9iamVjdE5hbWUsIHNpemVvZihzek9iamVjdE5hbWUpLCAiJXMlcyMlcyIsCi0JCSAgc3pPYmplY3RQcmVmaXgsIHBzekJ1ZmZlcklEX3AsIHBzek9iamVjdEpvYk5hbWVfcCk7Ci0KLQlyZXR1cm4gKHN6T2JqZWN0TmFtZSk7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBUaHJlYWQgZm9yIG5ldyBkYXRhIHNpZ25hbGluZwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRFdPUkQgV0lOQVBJIFNoYklwY1RocmVhZFNpZ25hbE5ld0RhdGEoTFBWT0lEIHB2VGhyZWFkUGFyYW1fcCkKLXsKLQotCXRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2U7Ci0JdFNoYk1lbUluc3QgKnBTaGJNZW1JbnN0OwotCURXT1JEIGR3V2FpdFJlc3VsdDsKLQlCT09MIGZUZXJtUmVxdTsKLQlpbnQgZkNhbGxBZ2FpbjsKLQotCVRSQUNFMQotCSAgICAoIlxuU2hiSXBjVGhyZWFkU2lnbmFsTmV3RGF0YSgpOiBTaWduYWxUaHJlYWQgc3RhcnRlZCAocFNoYkluc3RhbmNlPTB4JTA4bFgpXG4iLAotCSAgICAgKERXT1JEKSBwdlRocmVhZFBhcmFtX3ApOwotCi0JcFNoYkluc3RhbmNlID0gKHRTaGJNZW1JbnN0ICopIHB2VGhyZWFkUGFyYW1fcDsKLQlwU2hiTWVtSW5zdCA9IFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlKTsKLQlmVGVybVJlcXUgPSBGQUxTRTsKLQotCWRvIHsKLQkJQVNTRVJUKChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVswXSAhPQotCQkJSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0JCSAgICAgICAmJiAocFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGFbMF0gIT0gTlVMTCkpOwotCQlBU1NFUlQoKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhWzFdICE9Ci0JCQlJTlZBTElEX0hBTkRMRV9WQUxVRSkKLQkJICAgICAgICYmIChwU2hiTWVtSW5zdC0+bV9haEV2ZW50TmV3RGF0YVsxXSAhPSBOVUxMKSk7Ci0KLQkJVFJBQ0UwKCJcblNoYklwY1RocmVhZFNpZ25hbE5ld0RhdGEoKTogZW50ZXIgd2FpdCBzdGF0ZSIpOwotCQlkd1dhaXRSZXN1bHQgPSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKDIsCS8vIERXT1JEIG5Db3VudAotCQkJCQkJICAgICAgcFNoYk1lbUluc3QtPm1fYWhFdmVudE5ld0RhdGEsCS8vIGNvbnN0IEhBTkRMRSogbHBIYW5kbGVzCi0JCQkJCQkgICAgICBGQUxTRSwJLy8gQk9PTCBiV2FpdEFsbAotCQkJCQkJICAgICAgSU5GSU5JVEUpOwkvLyBEV09SRCBkd01pbGxpc2Vjb25kcwotCQlUUkFDRTAKLQkJICAgICgiXG5TaGJJcGNUaHJlYWRTaWduYWxOZXdEYXRhKCk6IHdhaXQgc3RhdGUgbGVhdmVkOiAtLS0+ICIpOwotCQlzd2l0Y2ggKGR3V2FpdFJlc3VsdCkgewotCQljYXNlIFdBSVRfT0JKRUNUXzAgKyAwOgkvLyBldmVudCAibmV3IGRhdGEiCi0JCQl7Ci0JCQkJVFJBQ0UwKCJFdmVudCA9IFdBSVRfT0JKRUNUXzArMCIpOwotCQkJCWlmIChwU2hiTWVtSW5zdC0+bV9wZm5TaWdIbmRsck5ld0RhdGEgIT0gTlVMTCkgewotCQkJCQlUUkFDRTAKLQkJCQkJICAgICgiXG5TaGJJcGNUaHJlYWRTaWduYWxOZXdEYXRhKCk6IGNhbGxpbmcgU2lnbmFsSGFuZGxlck5ld0RhdGEiKTsKLQkJCQkJZG8gewotCQkJCQkJZkNhbGxBZ2FpbiA9Ci0JCQkJCQkgICAgcFNoYk1lbUluc3QtPgotCQkJCQkJICAgIG1fcGZuU2lnSG5kbHJOZXdEYXRhCi0JCQkJCQkgICAgKHBTaGJJbnN0YW5jZSk7Ci0JCQkJCQkvLyBkLmsuOiB0cnkgdG8gcnVuIGFueSBzaGFyZWQgYnVmZmVyIHdoaWNoIGhhcyBoaWdoZXIgcHJpb3JpdHkuCi0JCQkJCQkvLyAgICAgICAgICAgdW5kZXIgV2luZG93cyB0aGlzIGlzIG5vdCByZWFsbHkgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIFdpbmRvd3Mgc2NoZWR1bGVyCi0JCQkJCQkvLyAgICAgICAgICAgYWxyZWFkeSBwcmVlbXB0cyB0YXNrcyB3aXRoIGxvd2VyIHByaW9yaXR5LgotCQkJCQl9IHdoaWxlIChmQ2FsbEFnYWluICE9IEZBTFNFKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJY2FzZSBXQUlUX09CSkVDVF8wICsgMToJLy8gZXZlbnQgInRlcm1pbmF0ZSIKLQkJCXsKLQkJCQlUUkFDRTAoIkV2ZW50ID0gV0FJVF9PQkpFQ1RfMCsxIik7Ci0JCQkJZlRlcm1SZXF1ID0gVFJVRTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQlkZWZhdWx0OgotCQkJewotCQkJCVRSQUNFMCgiVW5oYW5kbGVkIEV2ZW50Iik7Ci0JCQkJQVNTRVJUKDApOwotCQkJCWZUZXJtUmVxdSA9IFRSVUU7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0Jd2hpbGUgKCFmVGVybVJlcXUpOwotCi0JaWYgKHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFU1BdICE9Ci0JICAgIElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0JCVNldEV2ZW50KHBTaGJNZW1JbnN0LT5tX2FoRXZlbnROZXdEYXRhW0lEWF9FVkVOVF9URVJNX1JFU1BdKTsKLQl9Ci0KLQlUUkFDRTEKLQkgICAgKCJcblNoYklwY1RocmVhZFNpZ25hbE5ld0RhdGEoKTogU2lnbmFsVGhyZWFkIHRlcm1pbmF0ZWQgKHBTaGJJbnN0YW5jZT0weCUwOGxYKVxuIiwKLQkgICAgIChEV09SRCkgcFNoYkluc3RhbmNlKTsKLQotCUV4aXRUaHJlYWQoMCk7Ci0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBUaHJlYWQgZm9yIG5ldyBkYXRhIHNpZ25hbGluZwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotRFdPUkQgV0lOQVBJIFNoYklwY1RocmVhZFNpZ25hbEpvYlJlYWR5KExQVk9JRCBwdlRocmVhZFBhcmFtX3ApCi17Ci0KLQl0U2hiSW5zdGFuY2UgKnBTaGJJbnN0YW5jZTsKLQl0U2hiTWVtSW5zdCAqcFNoYk1lbUluc3Q7Ci0JRFdPUkQgdWxUaW1lT3V0OwotCURXT1JEIGR3V2FpdFJlc3VsdDsKLQl1bnNpZ25lZCBpbnQgZlRpbWVPdXQ7Ci0KLQlUUkFDRTEKLQkgICAgKCJcblNoYklwY1RocmVhZFNpZ25hbEpvYlJlYWR5KCk6IFNpZ25hbFRocmVhZCBzdGFydGVkIChwU2hiSW5zdGFuY2U9MHglMDhsWClcbiIsCi0JICAgICAoRFdPUkQpIHB2VGhyZWFkUGFyYW1fcCk7Ci0KLQlwU2hiSW5zdGFuY2UgPSAodFNoYkluc3RhbmNlICopIHB2VGhyZWFkUGFyYW1fcDsKLQlwU2hiTWVtSW5zdCA9IFNoYklwY0dldFNoYk1lbUluc3QocFNoYkluc3RhbmNlKTsKLQlmVGltZU91dCA9IEZBTFNFOwotCi0JaWYgKHBTaGJNZW1JbnN0LT5tX3VsVGltZU91dEpvYlJlYWR5ICE9IDApIHsKLQkJdWxUaW1lT3V0ID0gcFNoYk1lbUluc3QtPm1fdWxUaW1lT3V0Sm9iUmVhZHk7Ci0JfSBlbHNlIHsKLQkJdWxUaW1lT3V0ID0gSU5GSU5JVEU7Ci0JfQotCi0JQVNTRVJUKChwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeSAhPSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLQkgICAgICAgJiYgKHBTaGJNZW1JbnN0LT5tX2hFdmVudEpvYlJlYWR5ICE9IE5VTEwpKTsKLQotCVRSQUNFMCgiXG5TaGJJcGNUaHJlYWRTaWduYWxKb2JSZWFkeSgpOiBlbnRlciB3YWl0IHN0YXRlIik7Ci0JZHdXYWl0UmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdChwU2hiTWVtSW5zdC0+bV9oRXZlbnRKb2JSZWFkeSwJLy8gSEFORExFIGhIYW5kbGUKLQkJCQkJICAgdWxUaW1lT3V0KTsJLy8gRFdPUkQgZHdNaWxsaXNlY29uZHMKLQlUUkFDRTAoIlxuU2hiSXBjVGhyZWFkU2lnbmFsSm9iUmVhZHkoKTogd2FpdCBzdGF0ZSBsZWF2ZWQ6IC0tLT4gIik7Ci0Jc3dpdGNoIChkd1dhaXRSZXN1bHQpIHsKLQljYXNlIFdBSVRfT0JKRUNUXzAgKyAwOgkvLyBldmVudCAibmV3IGRhdGEiCi0JCXsKLQkJCVRSQUNFMCgiRXZlbnQgPSBXQUlUX09CSkVDVF8wKzAiKTsKLQkJCWZUaW1lT3V0ID0gRkFMU0U7Ci0JCQlicmVhazsKLQkJfQotCi0JY2FzZSBXQUlUX1RJTUVPVVQ6Ci0JCXsKLQkJCVRSQUNFMCgiXG5FdmVudCA9IFdBSVRfVElNRU9VVCIpOwotCQkJZlRpbWVPdXQgPSBUUlVFOwotCQkJLy8gQVNTRVJUKDApOwotCQkJYnJlYWs7Ci0JCX0KLQotCWRlZmF1bHQ6Ci0JCXsKLQkJCVRSQUNFMCgiVW5oYW5kbGVkIEV2ZW50Iik7Ci0JCQlmVGltZU91dCA9IFRSVUU7Ci0JCQlBU1NFUlQoMCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChwU2hiTWVtSW5zdC0+bV9wZm5TaWdIbmRsckpvYlJlYWR5ICE9IE5VTEwpIHsKLQkJVFJBQ0UwCi0JCSAgICAoIlxuU2hiSXBjVGhyZWFkU2lnbmFsSm9iUmVhZHkoKTogY2FsbGluZyBTaWduYWxIYW5kbGVySm9iUmVhZHkiKTsKLQkJcFNoYk1lbUluc3QtPm1fcGZuU2lnSG5kbHJKb2JSZWFkeShwU2hiSW5zdGFuY2UsIGZUaW1lT3V0KTsKLQl9Ci0KLQlwU2hiTWVtSW5zdC0+bV9oVGhyZWFkSm9iUmVhZHkgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQlwU2hiTWVtSW5zdC0+bV9wZm5TaWdIbmRsckpvYlJlYWR5ID0gTlVMTDsKLQotCVRSQUNFMQotCSAgICAoIlxuU2hiSXBjVGhyZWFkU2lnbmFsSm9iUmVhZHkoKTogU2lnbmFsVGhyZWFkIHRlcm1pbmF0ZWQgKHBTaGJJbnN0YW5jZT0weCUwOGxYKVxuIiwKLQkgICAgIChEV09SRCkgcFNoYkluc3RhbmNlKTsKLQotCUV4aXRUaHJlYWQoMCk7Ci0KLX0KLQotI2VuZGlmCi0KLS8vIEVPRgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGJJcGMuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvU2hiSXBjLmgKaW5kZXggY2FkODg0Ni4uMjg1ZjA5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9TaGJJcGMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1NoYklwYy5oCkBAIC02NSwyNSArNjUsNiBAQAogdHlwZWRlZiB2b2lkICgqdFNpZ0huZGxySm9iUmVhZHkpICh0U2hiSW5zdGFuY2UgcFNoYkluc3RhbmNlX3AsCiAJCQkJICAgdW5zaWduZWQgaW50IGZUaW1lT3V0X3ApOwogCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX1dJTjMyXykKLSNpZiBkZWZpbmVkKElOTElORV9GVU5DVElPTl9ERUYpCi0jdW5kZWYgIElOTElORV9GVU5DVElPTgotI2RlZmluZSBJTkxJTkVfRlVOQ1RJT04gICAgIElOTElORV9GVU5DVElPTl9ERUYKLSNkZWZpbmUgU0hCSVBDX0lOTElORV9FTkFCTEVEICAgICAgVFJVRQotI2RlZmluZSBTSEJJUENfSU5MSU5FRAotI2luY2x1ZGUgIlNoYklwYy1XaW4zMi5jIgotI2VuZGlmCi0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pCi0jaWYgZGVmaW5lZChJTkxJTkVfRlVOQ1RJT05fREVGKQotI3VuZGVmICBJTkxJTkVfRlVOQ1RJT04KLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OICAgICBJTkxJTkVfRlVOQ1RJT05fREVGCi0jZGVmaW5lIFNIQklQQ19JTkxJTkVfRU5BQkxFRCAgICAgIFRSVUUKLSNkZWZpbmUgU0hCSVBDX0lOTElORUQKLSNpbmNsdWRlICJTaGJJcGMtTGludXhLZXJuZWwuYyIKLSNlbmRpZgotI2VuZGlmCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgUHJvdG90eXBlcwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk3LDggKzc4LDYgQEAKIAkJCSAgICB1bnNpZ25lZCBpbnQgKnBmU2hiTmV3Q3JlYXRlZF9wKTsKIHRTaGJFcnJvciBTaGJJcGNSZWxlYXNlQnVmZmVyKHRTaGJJbnN0YW5jZSBwU2hiSW5zdGFuY2VfcCk7CiAKLSNpZiAhZGVmaW5lZChTSEJJUENfSU5MSU5FX0VOQUJMRUQpCi0KIHRTaGJFcnJvciBTaGJJcGNFbnRlckF0b21pY1NlY3Rpb24odFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKIHRTaGJFcnJvciBTaGJJcGNMZWF2ZUF0b21pY1NlY3Rpb24odFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKIApAQCAtMTE2LDEwICs5NSw1IEBACiB0U2hiRXJyb3IgU2hiSXBjU2lnbmFsSm9iUmVhZHkodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKIAogdm9pZCAqU2hiSXBjR2V0U2hNZW1QdHIodFNoYkluc3RhbmNlIHBTaGJJbnN0YW5jZV9wKTsKLSNlbmRpZgotCi0jdW5kZWYgIFNIQklQQ19JTkxJTkVfRU5BQkxFRAkvLyBkaXNhYmxlIGFjdHVhbCBpbmxpbmluZyBvZiBmdW5jdGlvbnMKLSN1bmRlZiAgSU5MSU5FX0ZVTkNUSU9OCi0jZGVmaW5lIElOTElORV9GVU5DVElPTgkJLy8gZGVmaW5lIElOTElORV9GVU5DVElPTiB0byBub3RoaW5nCiAKICNlbmRpZiAvLyAjaWZuZGVmIF9TSEJJUENfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvVGltZXJIaWdoUmVza1g4Ni5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9UaW1lckhpZ2hSZXNrWDg2LmMKaW5kZXggODJlZWU0Ny4uZDY4OTdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9UaW1lckhpZ2hSZXNrWDg2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9UaW1lckhpZ2hSZXNrWDg2LmMKQEAgLTk3LDE0ICs5NywxMCBAQAogCiAjZGVmaW5lIFBST1ZFX09WRVJSVU4KIAotI2lmbmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCi0jZXJyb3IgIktlcm5lbCBzeW1ib2wgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyByZXF1aXJlZC4iCi0jZW5kaWYKLQogLy8gVHJhY2VQb2ludCBzdXBwb3J0IGZvciByZWFsdGltZS1kZWJ1Z2dpbmcKICNpZmRlZiBfREJHX1RSQUNFX1BPSU5UU18KLXZvaWQgUFVCTElDIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQoQllURSBiVHJhY2VQb2ludE51bWJlcl9wKTsKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKTsKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKTsKK3ZvaWQgVGd0RGJnUG9zdFRyYWNlVmFsdWUodTMyIGR3VHJhY2VWYWx1ZV9wKTsKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkgICBUZ3REYmdTaWduYWxUcmFjZVBvaW50KHApCiAjZGVmaW5lIFRHVF9EQkdfUE9TVF9UUkFDRV9WQUxVRSh2KSAgICAgVGd0RGJnUG9zdFRyYWNlVmFsdWUodikKICNlbHNlCkBAIC0xNzIsNyArMTY4LDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrSW5pdCh2b2lkKQordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrSW5pdCh2b2lkKQogewogCXRFcGxLZXJuZWwgUmV0OwogCkBAIC0xOTYsNyArMTkyLDcgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrQWRkSW5zdGFuY2Uodm9pZCkKK3RFcGxLZXJuZWwgRXBsVGltZXJIaWdoUmVza0FkZEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQ7CiAJdW5zaWduZWQgaW50IHVpSW5kZXg7CkBAIC0yMDYsMTMgKzIwMiw2IEBACiAJRVBMX01FTVNFVCgmRXBsVGltZXJIaWdoUmVza0luc3RhbmNlX2wsIDAsCiAJCSAgIHNpemVvZihFcGxUaW1lckhpZ2hSZXNrSW5zdGFuY2VfbCkpOwogCi0jaWZuZGVmIENPTkZJR19ISUdIX1JFU19USU1FUlMKLQlwcmludGsKLQkgICAgKCJFcGxUaW1lckhpZ2hSZXNrOiBLZXJuZWwgc3ltYm9sIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgcmVxdWlyZWQuXG4iKTsKLQlSZXQgPSBrRXBsTm9SZXNvdXJjZTsKLQlyZXR1cm4gUmV0OwotI2VuZGlmCi0KIAkvKgogCSAqIEluaXRpYWxpemUgaHJ0aW1lciBzdHJ1Y3R1cmVzIGZvciBhbGwgdXNhYmxlIHRpbWVycy4KIAkgKi8KQEAgLTI0NCw3ICsyMzMsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVySGlnaFJlc2tEZWxJbnN0YW5jZSh2b2lkKQordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrRGVsSW5zdGFuY2Uodm9pZCkKIHsKIAl0RXBsVGltZXJIaWdoUmVza1RpbWVySW5mbyAqcFRpbWVySW5mbzsKIAl0RXBsS2VybmVsIFJldDsKQEAgLTI5OCwxMiArMjg3LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJIaWdoUmVza01vZGlmeVRpbWVyTnModEVwbFRpbWVySGRsICogcFRpbWVySGRsX3AsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGxvbmcgdWxsVGltZU5zX3AsCi0JCQkJCQl0RXBsVGltZXJrQ2FsbGJhY2sKLQkJCQkJCXBmbkNhbGxiYWNrX3AsCi0JCQkJCQl1bnNpZ25lZCBsb25nIHVsQXJndW1lbnRfcCwKLQkJCQkJCUJPT0wgZkNvbnRpbnVvdXNseV9wKQordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrTW9kaWZ5VGltZXJOcyh0RXBsVGltZXJIZGwgKnBUaW1lckhkbF9wLAorCQkJCQkgdW5zaWduZWQgbG9uZyBsb25nIHVsbFRpbWVOc19wLAorCQkJCQkgdEVwbFRpbWVya0NhbGxiYWNrIHBmbkNhbGxiYWNrX3AsCisJCQkJCSB1bnNpZ25lZCBsb25nIHVsQXJndW1lbnRfcCwKKwkJCQkJIEJPT0wgZkNvbnRpbnVvdXNseV9wKQogewogCXRFcGxLZXJuZWwgUmV0OwogCXVuc2lnbmVkIGludCB1aUluZGV4OwpAQCAtMzk2LDcgKzM4NCw3IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJIaWdoUmVza0RlbGV0ZVRpbWVyKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wKQordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrRGVsZXRlVGltZXIodEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCXVuc2lnbmVkIGludCB1aUluZGV4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9WaXJ0dWFsRXRoZXJuZXRMaW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9WaXJ0dWFsRXRoZXJuZXRMaW51eC5jCmluZGV4IDVkODM4ZGIuLjIxMjA2YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvVmlydHVhbEV0aGVybmV0TGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL1ZpcnR1YWxFdGhlcm5ldExpbnV4LmMKQEAgLTc0LDcgKzc0LDYgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgpAQCAtMjg1LDcgKzI4NCw3IEBACiAJcmV0dXJuIFJldDsKIH0KIAotdEVwbEtlcm5lbCBQVUJMSUMgVkV0aEFkZEluc3RhbmNlKHRFcGxEbGxrSW5pdFBhcmFtICogcEluaXRQYXJhbV9wKQordEVwbEtlcm5lbCBWRXRoQWRkSW5zdGFuY2UodEVwbERsbGtJbml0UGFyYW0gKnBJbml0UGFyYW1fcCkKIHsKIAl0RXBsS2VybmVsIFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC0zMjQsNyArMzIzLDcgQEAKIAlyZXR1cm4gUmV0OwogfQogCi10RXBsS2VybmVsIFBVQkxJQyBWRXRoRGVsSW5zdGFuY2Uodm9pZCkKK3RFcGxLZXJuZWwgVkV0aERlbEluc3RhbmNlKHZvaWQpCiB7CiAJdEVwbEtlcm5lbCBSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9hbWl4ODYuYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvYW1peDg2LmMKaW5kZXggOWY3NDIzOC4uZDQwYWQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9hbWl4ODYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2FtaXg4Ni5jCkBAIC03NCwyNCArNzQsMjIgQEAKIC8vI2luY2x1ZGUgIkVwbEFtaS5oIgogI2luY2x1ZGUgIkVwbEluYy5oIgogCi0jaWYgKCFkZWZpbmVkKEVQTF9BTUlfSU5MSU5FRCkpIHx8IGRlZmluZWQoSU5MSU5FX0VOQUJMRUQpCi0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyB0eXBlZGVmCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JV09SRCBtX3dXb3JkOworCXUxNiBtX3dXb3JkOwogCiB9IHR3U3RydWN0OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JRFdPUkQgbV9kd0R3b3JkOworCXUzMiBtX2R3RHdvcmQ7CiAKIH0gdGR3U3RydWN0OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JUVdPUkQgbV9xd1F3b3JkOworCXU2NCBtX3F3UXdvcmQ7CiAKIH0gdHF3U3RydWN0OwogCkBAIC0xMTcsMzcgKzExNSwzNiBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vLS0tLS0tLS0tLS0tPCB3cml0ZSBCWVRFIGluIGJpZyBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgd3JpdGUgdTggaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8qCi12b2lkICBQVUJMSUMgIEFtaVNldEJ5dGVUb0JlICh2b2lkIEZBUiogcEFkZHJfcCwgQllURSBiQnl0ZVZhbF9wKQordm9pZCBBbWlTZXRCeXRlVG9CZSAodm9pZCAqcEFkZHJfcCwgdTggYkJ5dGVWYWxfcCkKIHsKIAotICAgKihCWVRFIEZBUiopcEFkZHJfcCA9IGJCeXRlVmFsX3A7CisJKih1OCAqKXBBZGRyX3AgPSBiQnl0ZVZhbF9wOwogCiB9CiAqLwogCi0vLy0tLS0tLS0tLS0tLTwgd3JpdGUgV09SRCBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHdyaXRlIHUxNiBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0V29yZFRvQmUodm9pZCBGQVIgKiBwQWRkcl9wLCBXT1JEIHdXb3JkVmFsX3ApCit2b2lkIEFtaVNldFdvcmRUb0JlKHZvaWQgKiBwQWRkcl9wLCB1MTYgd1dvcmRWYWxfcCkKIHsKLQl0d1N0cnVjdCBGQVIgKnB3U3RydWN0OworCXR3U3RydWN0ICpwd1N0cnVjdDsKIAl0d1N0cnVjdCB3VmFsdWU7CiAKLQl3VmFsdWUubV93V29yZCA9IChXT1JEKSAoKHdXb3JkVmFsX3AgJiAweDAwRkYpIDw8IDgpOwkvL0xTQiB0byBNU0IKLQl3VmFsdWUubV93V29yZCB8PSAoV09SRCkgKCh3V29yZFZhbF9wICYgMHhGRjAwKSA+PiA4KTsJLy9NU0IgdG8gTFNCCisJd1ZhbHVlLm1fd1dvcmQgPSAodTE2KSAoKHdXb3JkVmFsX3AgJiAweDAwRkYpIDw8IDgpOwkvL0xTQiB0byBNU0IKKwl3VmFsdWUubV93V29yZCB8PSAodTE2KSAoKHdXb3JkVmFsX3AgJiAweEZGMDApID4+IDgpOwkvL01TQiB0byBMU0IKIAotCXB3U3RydWN0ID0gKHR3U3RydWN0IEZBUiAqKSBwQWRkcl9wOworCXB3U3RydWN0ID0gKHR3U3RydWN0ICopIHBBZGRyX3A7CiAJcHdTdHJ1Y3QtPm1fd1dvcmQgPSB3VmFsdWUubV93V29yZDsKIAogfQogCi0vLy0tLS0tLS0tLS0tLTwgd3JpdGUgRFdPUkQgaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHdyaXRlIHUzMiBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXREd29yZFRvQmUodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgRFdPUkQgZHdEd29yZFZhbF9wKQordm9pZCBBbWlTZXREd29yZFRvQmUodm9pZCAqcEFkZHJfcCwgdTMyIGR3RHdvcmRWYWxfcCkKIHsKLQl0ZHdTdHJ1Y3QgRkFSICpwZHdTdHJ1Y3Q7CisJdGR3U3RydWN0ICpwZHdTdHJ1Y3Q7CiAJdGR3U3RydWN0IGR3VmFsdWU7CiAKIAlkd1ZhbHVlLm1fZHdEd29yZCA9ICgoZHdEd29yZFZhbF9wICYgMHgwMDAwMDBGRikgPDwgMjQpOwkvL0xTQiB0byBNU0IKQEAgLTE1NSw3ICsxNTIsNyBAQAogCWR3VmFsdWUubV9kd0R3b3JkIHw9ICgoZHdEd29yZFZhbF9wICYgMHgwMEZGMDAwMCkgPj4gOCk7CiAJZHdWYWx1ZS5tX2R3RHdvcmQgfD0gKChkd0R3b3JkVmFsX3AgJiAweEZGMDAwMDAwKSA+PiAyNCk7CS8vTVNCIHRvIExTQgogCi0JcGR3U3RydWN0ID0gKHRkd1N0cnVjdCBGQVIgKikgcEFkZHJfcDsKKwlwZHdTdHJ1Y3QgPSAodGR3U3RydWN0ICopIHBBZGRyX3A7CiAJcGR3U3RydWN0LT5tX2R3RHdvcmQgPSBkd1ZhbHVlLm1fZHdEd29yZDsKIAogfQpAQCAtMTc2LDM1ICsxNzMsMzQgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vLy0tLS0tLS0tLS0tLTwgd3JpdGUgQllURSBpbiBsaXR0bGUgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHdyaXRlIHU4IGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvKgotdm9pZCAgUFVCTElDICBBbWlTZXRCeXRlVG9MZSAodm9pZCBGQVIqIHBBZGRyX3AsIEJZVEUgYkJ5dGVWYWxfcCkKK3ZvaWQgQW1pU2V0Qnl0ZVRvTGUgKHZvaWQgKnBBZGRyX3AsIHU4IGJCeXRlVmFsX3ApCiB7CiAKLSAgICooQllURSBGQVIqKXBBZGRyX3AgPSBiQnl0ZVZhbF9wOworCSoodTggKilwQWRkcl9wID0gYkJ5dGVWYWxfcDsKIAogfQogKi8KIAotLy8tLS0tLS0tLS0tLS08IHdyaXRlIFdPUkQgaW4gbGl0dGxlIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vLS0tLS0tLS0tLS0tPCB3cml0ZSB1MTYgaW4gbGl0dGxlIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldFdvcmRUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwgV09SRCB3V29yZFZhbF9wKQordm9pZCBBbWlTZXRXb3JkVG9MZSh2b2lkICpwQWRkcl9wLCB1MTYgd1dvcmRWYWxfcCkKIHsKLQl0d1N0cnVjdCBGQVIgKnB3U3RydWN0OworCXR3U3RydWN0ICpwd1N0cnVjdDsKIAotCXB3U3RydWN0ID0gKHR3U3RydWN0IEZBUiAqKSBwQWRkcl9wOworCXB3U3RydWN0ID0gKHR3U3RydWN0ICopIHBBZGRyX3A7CiAJcHdTdHJ1Y3QtPm1fd1dvcmQgPSB3V29yZFZhbF9wOwogCiB9CiAKLS8vLS0tLS0tLS0tLS0tPCB3cml0ZSBEV09SRCBpbiBsaXR0bGUgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgd3JpdGUgdTMyIGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldER3b3JkVG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJCSAgICBEV09SRCBkd0R3b3JkVmFsX3ApCit2b2lkIEFtaVNldER3b3JkVG9MZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKQogewotCXRkd1N0cnVjdCBGQVIgKnBkd1N0cnVjdDsKKwl0ZHdTdHJ1Y3QgKnBkd1N0cnVjdDsKIAotCXBkd1N0cnVjdCA9ICh0ZHdTdHJ1Y3QgRkFSICopIHBBZGRyX3A7CisJcGR3U3RydWN0ID0gKHRkd1N0cnVjdCAqKSBwQWRkcl9wOwogCXBkd1N0cnVjdC0+bV9kd0R3b3JkID0gZHdEd29yZFZhbF9wOwogCiB9CkBAIC0yMjQsNDAgKzIyMCw0MCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vLS0tLS0tLS0tLS0tPCByZWFkIEJZVEUgaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgcmVhZCB1OCBpbiBiaWcgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8qCi1CWVRFICBQVUJMSUMgIEFtaUdldEJ5dGVGcm9tQmUgKHZvaWQgRkFSKiBwQWRkcl9wKQordTggQW1pR2V0Qnl0ZUZyb21CZSAodm9pZCAqcEFkZHJfcCkKIHsKIAotICAgcmV0dXJuICggKihCWVRFIEZBUiopcEFkZHJfcCApOworCXJldHVybiAoICoodTggKilwQWRkcl9wICk7CiAKIH0KICovCiAKLS8vLS0tLS0tLS0tLS0tPCByZWFkIFdPUkQgaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgcmVhZCB1MTYgaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiBXT1JEIFBVQkxJQyBBbWlHZXRXb3JkRnJvbUJlKHZvaWQgRkFSICogcEFkZHJfcCkKK3UxNiBBbWlHZXRXb3JkRnJvbUJlKHZvaWQgKnBBZGRyX3ApCiB7Ci0JdHdTdHJ1Y3QgRkFSICpwd1N0cnVjdDsKKwl0d1N0cnVjdCAqcHdTdHJ1Y3Q7CiAJdHdTdHJ1Y3Qgd1ZhbHVlOwogCi0JcHdTdHJ1Y3QgPSAodHdTdHJ1Y3QgRkFSICopIHBBZGRyX3A7CisJcHdTdHJ1Y3QgPSAodHdTdHJ1Y3QgKikgcEFkZHJfcDsKIAotCXdWYWx1ZS5tX3dXb3JkID0gKFdPUkQpICgocHdTdHJ1Y3QtPm1fd1dvcmQgJiAweDAwRkYpIDw8IDgpOwkvL0xTQiB0byBNU0IKLQl3VmFsdWUubV93V29yZCB8PSAoV09SRCkgKChwd1N0cnVjdC0+bV93V29yZCAmIDB4RkYwMCkgPj4gOCk7CS8vTVNCIHRvIExTQgorCXdWYWx1ZS5tX3dXb3JkID0gKHUxNikgKChwd1N0cnVjdC0+bV93V29yZCAmIDB4MDBGRikgPDwgOCk7CS8vTFNCIHRvIE1TQgorCXdWYWx1ZS5tX3dXb3JkIHw9ICh1MTYpICgocHdTdHJ1Y3QtPm1fd1dvcmQgJiAweEZGMDApID4+IDgpOwkvL01TQiB0byBMU0IKIAogCXJldHVybiAod1ZhbHVlLm1fd1dvcmQpOwogCiB9CiAKLS8vLS0tLS0tLS0tLS0tPCByZWFkIERXT1JEIGluIGJpZyBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLy0tLS0tLS0tLS0tLTwgcmVhZCB1MzIgaW4gYmlnIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIERXT1JEIFBVQkxJQyBBbWlHZXREd29yZEZyb21CZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1MzIgQW1pR2V0RHdvcmRGcm9tQmUodm9pZCAqcEFkZHJfcCkKIHsKLQl0ZHdTdHJ1Y3QgRkFSICpwZHdTdHJ1Y3Q7CisJdGR3U3RydWN0ICpwZHdTdHJ1Y3Q7CiAJdGR3U3RydWN0IGR3VmFsdWU7CiAKLQlwZHdTdHJ1Y3QgPSAodGR3U3RydWN0IEZBUiAqKSBwQWRkcl9wOworCXBkd1N0cnVjdCA9ICh0ZHdTdHJ1Y3QgKikgcEFkZHJfcDsKIAogCWR3VmFsdWUubV9kd0R3b3JkID0gKChwZHdTdHJ1Y3QtPm1fZHdEd29yZCAmIDB4MDAwMDAwRkYpIDw8IDI0KTsJLy9MU0IgdG8gTVNCCiAJZHdWYWx1ZS5tX2R3RHdvcmQgfD0gKChwZHdTdHJ1Y3QtPm1fZHdEd29yZCAmIDB4MDAwMEZGMDApIDw8IDgpOwpAQCAtMjgzLDM2ICsyNzksMzQgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vLy0tLS0tLS0tLS0tLTwgcmVhZCBCWVRFIGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHJlYWQgdTggaW4gbGl0dGxlIGVuZGlhbiA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvKgotQllURSAgUFVCTElDICBBbWlHZXRCeXRlRnJvbUxlICh2b2lkIEZBUiogcEFkZHJfcCkKK3U4IEFtaUdldEJ5dGVGcm9tTGUgKHZvaWQgKnBBZGRyX3ApCiB7CiAKLSAgIHJldHVybiAoICooQllURSBGQVIqKXBBZGRyX3AgKTsKKwlyZXR1cm4gKCAqKHU4ICopcEFkZHJfcCApOwogCiB9CiAqLwogCi0vLy0tLS0tLS0tLS0tLTwgcmVhZCBXT1JEIGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHJlYWQgdTE2IGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gV09SRCBQVUJMSUMgQW1pR2V0V29yZEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1MTYgQW1pR2V0V29yZEZyb21MZSh2b2lkICpwQWRkcl9wKQogewotCXR3U3RydWN0IEZBUiAqcHdTdHJ1Y3Q7CisJdHdTdHJ1Y3QgKnB3U3RydWN0OwogCi0JcHdTdHJ1Y3QgPSAodHdTdHJ1Y3QgRkFSICopIHBBZGRyX3A7CisJcHdTdHJ1Y3QgPSAodHdTdHJ1Y3QgKikgcEFkZHJfcDsKIAlyZXR1cm4gKHB3U3RydWN0LT5tX3dXb3JkKTsKLQogfQogCi0vLy0tLS0tLS0tLS0tLTwgcmVhZCBEV09SRCBpbiBsaXR0bGUgZW5kaWFuID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS08IHJlYWQgdTMyIGluIGxpdHRsZSBlbmRpYW4gPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiBEV09SRCBQVUJMSUMgQW1pR2V0RHdvcmRGcm9tTGUodm9pZCBGQVIgKiBwQWRkcl9wKQordTMyIEFtaUdldER3b3JkRnJvbUxlKHZvaWQgKnBBZGRyX3ApCiB7Ci0JdGR3U3RydWN0IEZBUiAqcGR3U3RydWN0OworCXRkd1N0cnVjdCAqcGR3U3RydWN0OwogCi0JcGR3U3RydWN0ID0gKHRkd1N0cnVjdCBGQVIgKikgcEFkZHJfcDsKKwlwZHdTdHJ1Y3QgPSAodGR3U3RydWN0ICopIHBBZGRyX3A7CiAJcmV0dXJuIChwZHdTdHJ1Y3QtPm1fZHdEd29yZCk7Ci0KIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMzMCwxNCArMzI0LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldER3b3JkMjRUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgRFdPUkQgZHdEd29yZFZhbF9wKQordm9pZCBBbWlTZXREd29yZDI0VG9CZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKQogewotCi0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVswXSA9ICgoQllURSBGQVIgKikgJiBkd0R3b3JkVmFsX3ApWzJdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMV0gPSAoKEJZVEUgRkFSICopICYgZHdEd29yZFZhbF9wKVsxXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzJdID0gKChCWVRFIEZBUiAqKSAmIGR3RHdvcmRWYWxfcClbMF07Ci0KKwkoKHU4ICopIHBBZGRyX3ApWzBdID0gKCh1OCAqKSAmIGR3RHdvcmRWYWxfcClbMl07CisJKCh1OCAqKSBwQWRkcl9wKVsxXSA9ICgodTggKikgJiBkd0R3b3JkVmFsX3ApWzFdOworCSgodTggKikgcEFkZHJfcClbMl0gPSAoKHU4ICopICYgZHdEd29yZFZhbF9wKVswXTsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM1NSwxNCArMzQ2LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldER3b3JkMjRUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgRFdPUkQgZHdEd29yZFZhbF9wKQordm9pZCBBbWlTZXREd29yZDI0VG9MZSh2b2lkICpwQWRkcl9wLCB1MzIgZHdEd29yZFZhbF9wKQogewotCi0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVswXSA9ICgoQllURSBGQVIgKikgJiBkd0R3b3JkVmFsX3ApWzBdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMV0gPSAoKEJZVEUgRkFSICopICYgZHdEd29yZFZhbF9wKVsxXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzJdID0gKChCWVRFIEZBUiAqKSAmIGR3RHdvcmRWYWxfcClbMl07Ci0KKwkoKHU4ICopIHBBZGRyX3ApWzBdID0gKCh1OCAqKSAmIGR3RHdvcmRWYWxfcClbMF07CisJKCh1OCAqKSBwQWRkcl9wKVsxXSA9ICgodTggKikgJiBkd0R3b3JkVmFsX3ApWzFdOworCSgodTggKikgcEFkZHJfcClbMl0gPSAoKHU4ICopICYgZHdEd29yZFZhbF9wKVsyXTsKIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM3MywyMiArMzYxLDE5IEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBEV09SRCAgICAgICAgICAgPSByZWFkIHZhbHVlCisvLyBSZXR1cm46ICAgICAgdTMyICAgICAgICAgICA9IHJlYWQgdmFsdWUKIC8vCiAvLyBTdGF0ZTogICAgICAgbm90IHRlc3RlZAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiBEV09SRCBQVUJMSUMgQW1pR2V0RHdvcmQyNEZyb21CZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1MzIgQW1pR2V0RHdvcmQyNEZyb21CZSh2b2lkICpwQWRkcl9wKQogewotCiAJdGR3U3RydWN0IGR3U3RydWN0OwogCiAJZHdTdHJ1Y3QubV9kd0R3b3JkID0gQW1pR2V0RHdvcmRGcm9tQmUocEFkZHJfcCk7CiAJZHdTdHJ1Y3QubV9kd0R3b3JkID4+PSA4OwogCiAJcmV0dXJuIChkd1N0cnVjdC5tX2R3RHdvcmQpOwotCiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zOTksMjIgKzM4NCwxOSBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICBwQWRkcl9wICAgICAgICAgPSBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIKIC8vCi0vLyBSZXR1cm46ICAgICAgRFdPUkQgICAgICAgICAgID0gcmVhZCB2YWx1ZQorLy8gUmV0dXJuOiAgICAgIHUzMiAgICAgICAgICAgPSByZWFkIHZhbHVlCiAvLwogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gRFdPUkQgUFVCTElDIEFtaUdldER3b3JkMjRGcm9tTGUodm9pZCBGQVIgKiBwQWRkcl9wKQordTMyIEFtaUdldER3b3JkMjRGcm9tTGUodm9pZCAqcEFkZHJfcCkKIHsKLQogCXRkd1N0cnVjdCBkd1N0cnVjdDsKIAogCWR3U3RydWN0Lm1fZHdEd29yZCA9IEFtaUdldER3b3JkRnJvbUxlKHBBZGRyX3ApOwogCWR3U3RydWN0Lm1fZHdEd29yZCAmPSAweDAwRkZGRkZGOwogCiAJcmV0dXJuIChkd1N0cnVjdC5tX2R3RHdvcmQpOwotCiB9CiAKIC8vI2lmZGVmIFVTRV9WQVI2NApAQCAtNDMzLDIwICs0MTUsMTYgQEAKIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldFF3b3JkNjRUb0JlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgUVdPUkQgcXdRd29yZFZhbF9wKQordm9pZCBBbWlTZXRRd29yZDY0VG9CZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKQogewotCi0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVswXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzddOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMV0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs2XTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzJdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbNV07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVszXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzRdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbNF0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVszXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzVdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMl07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs2XSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzFdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbN10gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVswXTsKLQorCSgodTggKikgcEFkZHJfcClbMF0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs3XTsKKwkoKHU4ICopIHBBZGRyX3ApWzFdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNl07CisJKCh1OCAqKSBwQWRkcl9wKVsyXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzVdOworCSgodTggKikgcEFkZHJfcClbM10gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs0XTsKKwkoKHU4ICopIHBBZGRyX3ApWzRdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbM107CisJKCh1OCAqKSBwQWRkcl9wKVs1XSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzJdOworCSgodTggKikgcEFkZHJfcClbNl0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVsxXTsKKwkoKHU4ICopIHBBZGRyX3ApWzddID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbMF07CiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NjMsMTYgKzQ0MSwxMiBAQAogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ2NFRvTGUodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgICBRV09SRCBxd1F3b3JkVmFsX3ApCit2b2lkIEFtaVNldFF3b3JkNjRUb0xlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApCiB7CisJdTY0ICpwcXdEc3Q7CiAKLQlRV09SRCBGQVIgKnBxd0RzdDsKLQotCXBxd0RzdCA9IChRV09SRCBGQVIgKikgcEFkZHJfcDsKKwlwcXdEc3QgPSAodTY0ICopIHBBZGRyX3A7CiAJKnBxd0RzdCA9IHF3UXdvcmRWYWxfcDsKLQogfQogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDg4LDIzICs0NjIsMjAgQEAKIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSU5MSU5FX0ZVTkNUSU9OIFFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDY0RnJvbUJlKHZvaWQgRkFSICogcEFkZHJfcCkKK3U2NCBBbWlHZXRRd29yZDY0RnJvbUJlKHZvaWQgKnBBZGRyX3ApCiB7Ci0KIAl0cXdTdHJ1Y3QgcXdTdHJ1Y3Q7CiAKLQkoKEJZVEUgRkFSICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVswXSA9ICgoQllURSBGQVIgKikgcEFkZHJfcClbN107Ci0JKChCWVRFIEZBUiAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbMV0gPSAoKEJZVEUgRkFSICopIHBBZGRyX3ApWzZdOwotCSgoQllURSBGQVIgKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzJdID0gKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs1XTsKLQkoKEJZVEUgRkFSICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVszXSA9ICgoQllURSBGQVIgKikgcEFkZHJfcClbNF07Ci0JKChCWVRFIEZBUiAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbNF0gPSAoKEJZVEUgRkFSICopIHBBZGRyX3ApWzNdOwotCSgoQllURSBGQVIgKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzVdID0gKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsyXTsKLQkoKEJZVEUgRkFSICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVs2XSA9ICgoQllURSBGQVIgKikgcEFkZHJfcClbMV07Ci0JKChCWVRFIEZBUiAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbN10gPSAoKEJZVEUgRkFSICopIHBBZGRyX3ApWzBdOworCSgodTggKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzBdID0gKCh1OCAqKSBwQWRkcl9wKVs3XTsKKwkoKHU4ICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVsxXSA9ICgodTggKikgcEFkZHJfcClbNl07CisJKCh1OCAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbMl0gPSAoKHU4ICopIHBBZGRyX3ApWzVdOworCSgodTggKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzNdID0gKCh1OCAqKSBwQWRkcl9wKVs0XTsKKwkoKHU4ICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVs0XSA9ICgodTggKikgcEFkZHJfcClbM107CisJKCh1OCAqKSAmIHF3U3RydWN0Lm1fcXdRd29yZClbNV0gPSAoKHU4ICopIHBBZGRyX3ApWzJdOworCSgodTggKikgJiBxd1N0cnVjdC5tX3F3UXdvcmQpWzZdID0gKCh1OCAqKSBwQWRkcl9wKVsxXTsKKwkoKHU4ICopICYgcXdTdHJ1Y3QubV9xd1F3b3JkKVs3XSA9ICgodTggKikgcEFkZHJfcClbMF07CiAKIAlyZXR1cm4gKHF3U3RydWN0Lm1fcXdRd29yZCk7Ci0KIH0KIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUyMCwxOCArNDkxLDE1IEBACiAvLyBTdGF0ZTogICAgICAgbm90IHRlc3RlZAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlOTElORV9GVU5DVElPTiBRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ2NEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1NjQgQW1pR2V0UXdvcmQ2NEZyb21MZSh2b2lkICpwQWRkcl9wKQogewotCi0JdHF3U3RydWN0IEZBUiAqcHF3U3RydWN0OworCXRxd1N0cnVjdCAqcHF3U3RydWN0OwogCXRxd1N0cnVjdCBxd1N0cnVjdDsKIAotCXBxd1N0cnVjdCA9ICh0cXdTdHJ1Y3QgRkFSICopIHBBZGRyX3A7CisJcHF3U3RydWN0ID0gKHRxd1N0cnVjdCAqKSBwQWRkcl9wOwogCXF3U3RydWN0Lm1fcXdRd29yZCA9IHBxd1N0cnVjdC0+bV9xd1F3b3JkOwogCiAJcmV0dXJuIChxd1N0cnVjdC5tX3F3UXdvcmQpOwotCiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NDksMTUgKzUxNywxNCBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDQwVG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJCSAgICAgIFFXT1JEIHF3UXdvcmRWYWxfcCkKK3ZvaWQgQW1pU2V0UXdvcmQ0MFRvQmUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCkKIHsKIAotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMF0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs0XTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzFdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbM107Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsyXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzJdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbM10gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVsxXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzRdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMF07CisJKCh1OCAqKSBwQWRkcl9wKVswXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzRdOworCSgodTggKikgcEFkZHJfcClbMV0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVszXTsKKwkoKHU4ICopIHBBZGRyX3ApWzJdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbMl07CisJKCh1OCAqKSBwQWRkcl9wKVszXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzFdOworCSgodTggKikgcEFkZHJfcClbNF0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVswXTsKIAogfQogCkBAIC01NzYsMTIgKzU0MywxMSBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDQwVG9MZSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJCSAgICAgIFFXT1JEIHF3UXdvcmRWYWxfcCkKK3ZvaWQgQW1pU2V0UXdvcmQ0MFRvTGUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCkKIHsKIAotCSgoRFdPUkQgRkFSICopIHBBZGRyX3ApWzBdID0gKChEV09SRCBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzBdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbNF0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs0XTsKKwkoKHUzMiAqKSBwQWRkcl9wKVswXSA9ICgodTMyICopICYgcXdRd29yZFZhbF9wKVswXTsKKwkoKHU4ICopIHBBZGRyX3ApWzRdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNF07CiAKIH0KIApAQCAtNTkzLDEzICs1NTksMTMgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIFFXT1JECisvLyBSZXR1cm46ICAgICAgdTY0CiAvLwogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNDBGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKQordTY0IEFtaUdldFF3b3JkNDBGcm9tQmUodm9pZCAqcEFkZHJfcCkKIHsKIAogCXRxd1N0cnVjdCBxd1N0cnVjdDsKQEAgLTYxOSwxMyArNTg1LDEzIEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBRV09SRAorLy8gUmV0dXJuOiAgICAgIHU2NAogLy8KIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIFFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDQwRnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCkKK3U2NCBBbWlHZXRRd29yZDQwRnJvbUxlKHZvaWQgKnBBZGRyX3ApCiB7CiAKIAl0cXdTdHJ1Y3QgcXdTdHJ1Y3Q7CkBAIC02NTIsMTYgKzYxOCwxNSBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXRRd29yZDQ4VG9CZSh2b2lkIEZBUiAqIHBBZGRyX3AsCi0JCQkJCSAgICAgIFFXT1JEIHF3UXdvcmRWYWxfcCkKK3ZvaWQgQW1pU2V0UXdvcmQ0OFRvQmUodm9pZCAqcEFkZHJfcCwgdTY0IHF3UXdvcmRWYWxfcCkKIHsKIAotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMF0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs1XTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzFdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbNF07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsyXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzNdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbM10gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVsyXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzRdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMV07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs1XSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzBdOworCSgodTggKikgcEFkZHJfcClbMF0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs1XTsKKwkoKHU4ICopIHBBZGRyX3ApWzFdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNF07CisJKCh1OCAqKSBwQWRkcl9wKVsyXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzNdOworCSgodTggKikgcEFkZHJfcClbM10gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVsyXTsKKwkoKHU4ICopIHBBZGRyX3ApWzRdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbMV07CisJKCh1OCAqKSBwQWRkcl9wKVs1XSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzBdOwogCiB9CiAKQEAgLTY4MCwxMiArNjQ1LDExIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldFF3b3JkNDhUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgUVdPUkQgcXdRd29yZFZhbF9wKQordm9pZCBBbWlTZXRRd29yZDQ4VG9MZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKQogewogCi0JKChEV09SRCBGQVIgKikgcEFkZHJfcClbMF0gPSAoKERXT1JEIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMF07Ci0JKChXT1JEIEZBUiAqKSBwQWRkcl9wKVsyXSA9ICgoV09SRCBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzJdOworCSgodTMyICopIHBBZGRyX3ApWzBdID0gKCh1MzIgKikgJiBxd1F3b3JkVmFsX3ApWzBdOworCSgodTE2ICopIHBBZGRyX3ApWzJdID0gKCh1MTYgKikgJiBxd1F3b3JkVmFsX3ApWzJdOwogCiB9CiAKQEAgLTY5NywxMyArNjYxLDEzIEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBRV09SRAorLy8gUmV0dXJuOiAgICAgIHU2NAogLy8KIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIFFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDQ4RnJvbUJlKHZvaWQgRkFSICogcEFkZHJfcCkKK3U2NCBBbWlHZXRRd29yZDQ4RnJvbUJlKHZvaWQgKnBBZGRyX3ApCiB7CiAKIAl0cXdTdHJ1Y3QgcXdTdHJ1Y3Q7CkBAIC03MjMsMTMgKzY4NywxMyBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICBwQWRkcl9wICAgICAgICAgPSBwb2ludGVyIHRvIHNvdXJjZSBidWZmZXIKIC8vCi0vLyBSZXR1cm46ICAgICAgUVdPUkQKKy8vIFJldHVybjogICAgICB1NjQKIC8vCiAvLyBTdGF0ZTogICAgICAgbm90IHRlc3RlZAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiBRV09SRCBQVUJMSUMgQW1pR2V0UXdvcmQ0OEZyb21MZSh2b2lkIEZBUiAqIHBBZGRyX3ApCit1NjQgQW1pR2V0UXdvcmQ0OEZyb21MZSh2b2lkICpwQWRkcl9wKQogewogCiAJdHF3U3RydWN0IHF3U3RydWN0OwpAQCAtNzU2LDE3ICs3MjAsMTYgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pU2V0UXdvcmQ1NlRvQmUodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgICBRV09SRCBxd1F3b3JkVmFsX3ApCit2b2lkIEFtaVNldFF3b3JkNTZUb0JlKHZvaWQgKnBBZGRyX3AsIHU2NCBxd1F3b3JkVmFsX3ApCiB7CiAKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzBdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbNl07Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVsxXSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzVdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbMl0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs0XTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzNdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbM107Ci0JKChCWVRFIEZBUiAqKSBwQWRkcl9wKVs0XSA9ICgoQllURSBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzJdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbNV0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVsxXTsKLQkoKEJZVEUgRkFSICopIHBBZGRyX3ApWzZdID0gKChCWVRFIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMF07CisJKCh1OCAqKSBwQWRkcl9wKVswXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzZdOworCSgodTggKikgcEFkZHJfcClbMV0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVs1XTsKKwkoKHU4ICopIHBBZGRyX3ApWzJdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNF07CisJKCh1OCAqKSBwQWRkcl9wKVszXSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzNdOworCSgodTggKikgcEFkZHJfcClbNF0gPSAoKHU4ICopICYgcXdRd29yZFZhbF9wKVsyXTsKKwkoKHU4ICopIHBBZGRyX3ApWzVdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbMV07CisJKCh1OCAqKSBwQWRkcl9wKVs2XSA9ICgodTggKikgJiBxd1F3b3JkVmFsX3ApWzBdOwogCiB9CiAKQEAgLTc4NSwxMyArNzQ4LDEyIEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIHZvaWQgUFVCTElDIEFtaVNldFF3b3JkNTZUb0xlKHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgICAgUVdPUkQgcXdRd29yZFZhbF9wKQordm9pZCBBbWlTZXRRd29yZDU2VG9MZSh2b2lkICpwQWRkcl9wLCB1NjQgcXdRd29yZFZhbF9wKQogewogCi0JKChEV09SRCBGQVIgKikgcEFkZHJfcClbMF0gPSAoKERXT1JEIEZBUiAqKSAmIHF3UXdvcmRWYWxfcClbMF07Ci0JKChXT1JEIEZBUiAqKSBwQWRkcl9wKVsyXSA9ICgoV09SRCBGQVIgKikgJiBxd1F3b3JkVmFsX3ApWzJdOwotCSgoQllURSBGQVIgKikgcEFkZHJfcClbNl0gPSAoKEJZVEUgRkFSICopICYgcXdRd29yZFZhbF9wKVs2XTsKKwkoKHUzMiAqKSBwQWRkcl9wKVswXSA9ICgodTMyICopICYgcXdRd29yZFZhbF9wKVswXTsKKwkoKHUxNiAqKSBwQWRkcl9wKVsyXSA9ICgodTE2ICopICYgcXdRd29yZFZhbF9wKVsyXTsKKwkoKHU4ICopIHBBZGRyX3ApWzZdID0gKCh1OCAqKSAmIHF3UXdvcmRWYWxfcClbNl07CiAKIH0KIApAQCAtODAzLDEzICs3NjUsMTMgQEAKIC8vCiAvLyBQYXJhbWV0ZXJzOiAgcEFkZHJfcCAgICAgICAgID0gcG9pbnRlciB0byBzb3VyY2UgYnVmZmVyCiAvLwotLy8gUmV0dXJuOiAgICAgIFFXT1JECisvLyBSZXR1cm46ICAgICAgdTY0CiAvLwogLy8gU3RhdGU6ICAgICAgIG5vdCB0ZXN0ZWQKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gUVdPUkQgUFVCTElDIEFtaUdldFF3b3JkNTZGcm9tQmUodm9pZCBGQVIgKiBwQWRkcl9wKQordTY0IEFtaUdldFF3b3JkNTZGcm9tQmUodm9pZCAqcEFkZHJfcCkKIHsKIAogCXRxd1N0cnVjdCBxd1N0cnVjdDsKQEAgLTgyOSwxMyArNzkxLDEzIEBACiAvLwogLy8gUGFyYW1ldGVyczogIHBBZGRyX3AgICAgICAgICA9IHBvaW50ZXIgdG8gc291cmNlIGJ1ZmZlcgogLy8KLS8vIFJldHVybjogICAgICBRV09SRAorLy8gUmV0dXJuOiAgICAgIHU2NAogLy8KIC8vIFN0YXRlOiAgICAgICBub3QgdGVzdGVkCiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSU5MSU5FX0ZVTkNUSU9OIFFXT1JEIFBVQkxJQyBBbWlHZXRRd29yZDU2RnJvbUxlKHZvaWQgRkFSICogcEFkZHJfcCkKK3U2NCBBbWlHZXRRd29yZDU2RnJvbUxlKHZvaWQgKnBBZGRyX3ApCiB7CiAKIAl0cXdTdHJ1Y3QgcXdTdHJ1Y3Q7CkBAIC04NjIsMTMgKzgyNCwxMSBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlOTElORV9GVU5DVElPTiB2b2lkIFBVQkxJQyBBbWlTZXRUaW1lT2ZEYXkodm9pZCBGQVIgKiBwQWRkcl9wLAotCQkJCQkgICAgdFRpbWVPZkRheSBGQVIgKiBwVGltZU9mRGF5X3ApCit2b2lkIEFtaVNldFRpbWVPZkRheSh2b2lkICpwQWRkcl9wLCB0VGltZU9mRGF5ICpwVGltZU9mRGF5X3ApCiB7CiAKLQlBbWlTZXREd29yZFRvTGUoKChCWVRFIEZBUiAqKSBwQWRkcl9wKSwKLQkJCXBUaW1lT2ZEYXlfcC0+bV9kd01zICYgMHgwRkZGRkZGRik7Ci0JQW1pU2V0V29yZFRvTGUoKChCWVRFIEZBUiAqKSBwQWRkcl9wKSArIDQsIHBUaW1lT2ZEYXlfcC0+bV93RGF5cyk7CisJQW1pU2V0RHdvcmRUb0xlKCgodTggKikgcEFkZHJfcCksIHBUaW1lT2ZEYXlfcC0+bV9kd01zICYgMHgwRkZGRkZGRik7CisJQW1pU2V0V29yZFRvTGUoKCh1OCAqKSBwQWRkcl9wKSArIDQsIHBUaW1lT2ZEYXlfcC0+bV93RGF5cyk7CiAKIH0KIApAQCAtODg3LDE4ICs4NDcsMTQgQEAKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JTkxJTkVfRlVOQ1RJT04gdm9pZCBQVUJMSUMgQW1pR2V0VGltZU9mRGF5KHZvaWQgRkFSICogcEFkZHJfcCwKLQkJCQkJICAgIHRUaW1lT2ZEYXkgRkFSICogcFRpbWVPZkRheV9wKQordm9pZCBBbWlHZXRUaW1lT2ZEYXkodm9pZCAqcEFkZHJfcCwgdFRpbWVPZkRheSAqcFRpbWVPZkRheV9wKQogewogCi0JcFRpbWVPZkRheV9wLT5tX2R3TXMgPQotCSAgICBBbWlHZXREd29yZEZyb21MZSgoKEJZVEUgRkFSICopIHBBZGRyX3ApKSAmIDB4MEZGRkZGRkY7Ci0JcFRpbWVPZkRheV9wLT5tX3dEYXlzID0gQW1pR2V0V29yZEZyb21MZSgoKEJZVEUgRkFSICopIHBBZGRyX3ApICsgNCk7CisJcFRpbWVPZkRheV9wLT5tX2R3TXMgPSBBbWlHZXREd29yZEZyb21MZSgoKHU4ICopIHBBZGRyX3ApKSAmIDB4MEZGRkZGRkY7CisJcFRpbWVPZkRheV9wLT5tX3dEYXlzID0gQW1pR2V0V29yZEZyb21MZSgoKHU4ICopIHBBZGRyX3ApICsgNCk7CiAKIH0KIAotI2VuZGlmCi0KIC8vIEVPRgogCiAvLyBEaWUgbGV0enRlIFplaWxlIG113yB1bmJlZGluZ3QgZWluZSBsZWVyZSBaZWlsZSBzZWluLCB3ZWlsIG1hbmNoZSBDb21waWxlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9kZW1vX21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvZGVtb19tYWluLmMKaW5kZXggMjYzZmEwNC4uN2FkMTBmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9kZW1vX21haW4uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2RlbW9fbWFpbi5jCkBAIC03NCw3ICs3NCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CkBAIC04NywxNiArODYsNiBAQAogI2luY2x1ZGUgIkVwbC5oIgogI2luY2x1ZGUgInByb2NfZnMuaCIKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkKLSAgICAvLyByZW1vdmUgKCJtYWtlIGludmlzaWJsZSIpIG9ic29sZXRlIHN5bWJvbHMgZm9yIGtlcm5lbCB2ZXJzaW9ucyAyLjYKLSAgICAvLyBhbmQgaGlnaGVyCi0jZGVmaW5lIE1PRF9JTkNfVVNFX0NPVU5UCi0jZGVmaW5lIE1PRF9ERUNfVVNFX0NPVU5UCi0jZGVmaW5lIEVYUE9SVF9OT19TWU1CT0xTCi0jZWxzZQotI2Vycm9yICJUaGlzIGRyaXZlciBuZWVkcyBhIDIuNi54IGtlcm5lbCBvciBoaWdoZXIiCi0jZW5kaWYKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMTE4LDcgKzEwNyw3IEBACiAKIC8vIFRyYWNlUG9pbnQgc3VwcG9ydCBmb3IgcmVhbHRpbWUtZGVidWdnaW5nCiAjaWZkZWYgX0RCR19UUkFDRV9QT0lOVFNfCi12b2lkIFBVQkxJQyBUZ3REYmdTaWduYWxUcmFjZVBvaW50KEJZVEUgYlRyYWNlUG9pbnROdW1iZXJfcCk7Cit2b2lkIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQodTggYlRyYWNlUG9pbnROdW1iZXJfcCk7CiAjZGVmaW5lIFRHVF9EQkdfU0lHTkFMX1RSQUNFX1BPSU5UKHApICAgVGd0RGJnU2lnbmFsVHJhY2VQb2ludChwKQogI2Vsc2UKICNkZWZpbmUgVEdUX0RCR19TSUdOQUxfVFJBQ0VfUE9JTlQocCkKQEAgLTE0OCwzMCArMTM3LDMwIEBACiAvLyBtb2R1bCBnbG9iYWxlIHZhcnMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUNPTlNUIEJZVEUgYWJNYWNBZGRyW10gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKK3N0YXRpYyBjb25zdCB1OCBhYk1hY0FkZHJbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OwogCi1CWVRFIGJWYXJJbjFfbDsKLUJZVEUgYlZhck91dDFfbDsKLUJZVEUgYlZhck91dDFPbGRfbDsKLUJZVEUgYk1vZGVTZWxlY3RfbDsJCS8vIHN0YXRlIG9mIHRoZSBwdXNoYnV0dG9ucyB0byBzZWxlY3QgdGhlIG1vZGUKLUJZVEUgYlNwZWVkU2VsZWN0X2w7CQkvLyBzdGF0ZSBvZiB0aGUgcHVzaGJ1dHRvbnMgdG8gaW5jcmVhc2UvZGVjcmVhc2UgdGhlIHNwZWVkCi1CWVRFIGJTcGVlZFNlbGVjdE9sZF9sOwkJLy8gb2xkIHN0YXRlIG9mIHRoZSBwdXNoYnV0dG9ucwotRFdPUkQgZHdMZWRzX2w7CQkJLy8gY3VycmVudCBzdGF0ZSBvZiBhbGwgTEVEcwotQllURSBiTGVkc1JvdzFfbDsJCS8vIGN1cnJlbnQgc3RhdGUgb2YgdGhlIExFRHMgaW4gcm93IDEKLUJZVEUgYkxlZHNSb3cyX2w7CQkvLyBjdXJyZW50IHN0YXRlIG9mIHRoZSBMRURzIGluIHJvdyAyCi1CWVRFIGFiU2VsZWN0X2xbM107CQkvLyBwdXNoYnV0dG9ucyBmcm9tIENOcworc3RhdGljIHU4IGJWYXJJbjFfbDsKK3N0YXRpYyB1OCBiVmFyT3V0MV9sOworc3RhdGljIHU4IGJWYXJPdXQxT2xkX2w7CitzdGF0aWMgdTggYk1vZGVTZWxlY3RfbDsJCS8vIHN0YXRlIG9mIHRoZSBwdXNoYnV0dG9ucyB0byBzZWxlY3QgdGhlIG1vZGUKK3N0YXRpYyB1OCBiU3BlZWRTZWxlY3RfbDsJCS8vIHN0YXRlIG9mIHRoZSBwdXNoYnV0dG9ucyB0byBpbmNyZWFzZS9kZWNyZWFzZSB0aGUgc3BlZWQKK3N0YXRpYyB1OCBiU3BlZWRTZWxlY3RPbGRfbDsJCS8vIG9sZCBzdGF0ZSBvZiB0aGUgcHVzaGJ1dHRvbnMKK3N0YXRpYyB1MzIgZHdMZWRzX2w7CQkJLy8gY3VycmVudCBzdGF0ZSBvZiBhbGwgTEVEcworc3RhdGljIHU4IGJMZWRzUm93MV9sOwkJLy8gY3VycmVudCBzdGF0ZSBvZiB0aGUgTEVEcyBpbiByb3cgMQorc3RhdGljIHU4IGJMZWRzUm93Ml9sOwkJLy8gY3VycmVudCBzdGF0ZSBvZiB0aGUgTEVEcyBpbiByb3cgMgorc3RhdGljIHU4IGFiU2VsZWN0X2xbM107CQkvLyBwdXNoYnV0dG9ucyBmcm9tIENOcwogCi1EV09SRCBkd01vZGVfbDsJCQkvLyBjdXJyZW50IG1vZGUKLWludCBpQ3VyQ3ljbGVDb3VudF9sOwkJLy8gY3VycmVudCBjeWNsZSBjb3VudAotaW50IGlNYXhDeWNsZUNvdW50X2w7CQkvLyBtYXhpbXVtIGN5Y2xlIGNvdW50IChpLmUuIG51bWJlciBvZiBjeWNsZXMgdW50aWwgbmV4dCBsaWdodCBtb3ZlbWVudCBzdGVwKQotaW50IGlUb2dnbGU7CQkJLy8gaW5kaWNhdGVzIHRoZSBsaWdodCBtb3ZlbWVudCBkaXJlY3Rpb24KK3N0YXRpYyB1MzIgZHdNb2RlX2w7CQkJLy8gY3VycmVudCBtb2RlCitzdGF0aWMgaW50IGlDdXJDeWNsZUNvdW50X2w7CQkvLyBjdXJyZW50IGN5Y2xlIGNvdW50CitzdGF0aWMgaW50IGlNYXhDeWNsZUNvdW50X2w7CQkvLyBtYXhpbXVtIGN5Y2xlIGNvdW50IChpLmUuIG51bWJlciBvZiBjeWNsZXMgdW50aWwgbmV4dCBsaWdodCBtb3ZlbWVudCBzdGVwKQorc3RhdGljIGludCBpVG9nZ2xlOwkJCS8vIGluZGljYXRlcyB0aGUgbGlnaHQgbW92ZW1lbnQgZGlyZWN0aW9uCiAKLUJZVEUgYWJEb21haW5fbFszMDAwXTsKKy8vc3RhdGljIHU4IGFiRG9tYWluX2xbMzAwMF07CiAKIHN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCBXYWl0UXVldWVTaHV0ZG93bl9nOwkvLyB3YWl0IHF1ZXVlIGZvciB0RXBsTm10RXZlbnRTd2l0Y2hPZmYKIHN0YXRpYyBhdG9taWNfdCBBdG9taWNTaHV0ZG93bl9nID0gQVRPTUlDX0lOSVQoRkFMU0UpOwogCi1zdGF0aWMgRFdPUkQgZHdfbGVfQ3ljbGVMZW5fZzsKK3N0YXRpYyB1MzIgZHdfbGVfQ3ljbGVMZW5fZzsKIAogc3RhdGljIHVpbnQgdWlOb2RlSWRfZyA9IEVQTF9DX0FEUl9JTlZBTElEOwogbW9kdWxlX3BhcmFtX25hbWVkKG5vZGVpZCwgdWlOb2RlSWRfZywgdWludCwgMCk7CkBAIC0xODgsMjMgKzE3NywxOSBAQAogLy8gdGhpcyBmdW5jdGlvbiBwcm90b3R5cGUgaGVyZS4gSWYgeW91IHdhbnQgdG8gdXNlIG1vcmUgdGhhbiBvbmUgRXBsCiAvLyBpbnN0YW5jZXMgdGhlbiB0aGUgZnVuY3Rpb24gbmFtZSBvZiBlYWNoIG9iamVjdCBkaWN0aW9uYXJ5IGhhcyB0byBkaWZmZXIuCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZEluaXRSYW0odEVwbE9iZEluaXRQYXJhbSBNRU0gKiBwSW5pdFBhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxPYmRJbml0UmFtKHRFcGxPYmRJbml0UGFyYW0gKnBJbml0UGFyYW1fcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEFwcENiRXZlbnQodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCi0JCQkgICAgIHRFcGxBcGlFdmVudEFyZyAqIHBFdmVudEFyZ19wLAkvLyBJTjogZXZlbnQgYXJndW1lbnQgKHVuaW9uKQotCQkJICAgICB2b2lkIEdFTkVSSUMgKiBwVXNlckFyZ19wKTsKK3RFcGxLZXJuZWwgQXBwQ2JFdmVudCh0RXBsQXBpRXZlbnRUeXBlIEV2ZW50VHlwZV9wLAkvLyBJTjogZXZlbnQgdHlwZSAoZW51bSkKKwkJICAgICAgdEVwbEFwaUV2ZW50QXJnICpwRXZlbnRBcmdfcCwJLy8gSU46IGV2ZW50IGFyZ3VtZW50ICh1bmlvbikKKwkJICAgICAgdm9pZCAqcFVzZXJBcmdfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEFwcENiU3luYyh2b2lkKTsKK3RFcGxLZXJuZWwgQXBwQ2JTeW5jKHZvaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdCBFcGxMaW5Jbml0KHZvaWQpOwotc3RhdGljIHZvaWQgX19leGl0IEVwbExpbkV4aXQodm9pZCk7CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyAgS2VybmVsIE1vZHVsZSBzcGVjaWZpYyBEYXRhIFN0cnVjdHVyZXMKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUVYUE9SVF9OT19TWU1CT0xTOwotCiAvL21vZHVsZV9pbml0KEVwbExpbkluaXQpOwogLy9tb2R1bGVfZXhpdChFcGxMaW5FeGl0KTsKIApAQCAtMjMxLDYgKzIxNiw3IEBACiAvLyBTdGF0ZToKIC8vCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2lmIDAKIHN0YXRpYyBpbnQgX19pbml0IEVwbExpbkluaXQodm9pZCkKIHsKIAl0RXBsS2VybmVsIEVwbFJldDsKQEAgLTI2Myw3ICsyNDksNyBAQAogCUVwbEFwaUluaXRQYXJhbS5tX3VpU2l6ZU9mU3RydWN0ID0gc2l6ZW9mKEVwbEFwaUluaXRQYXJhbSk7CiAJRVBMX01FTUNQWShFcGxBcGlJbml0UGFyYW0ubV9hYk1hY0FkZHJlc3MsIGFiTWFjQWRkciwKIAkJICAgc2l6ZW9mKEVwbEFwaUluaXRQYXJhbS5tX2FiTWFjQWRkcmVzcykpOwotLy8gICAgRXBsQXBpSW5pdFBhcmFtLm1fYWJNYWNBZGRyZXNzWzVdID0gKEJZVEUpIEVwbEFwaUluaXRQYXJhbS5tX3VpTm9kZUlkOworLy8JRXBsQXBpSW5pdFBhcmFtLm1fYWJNYWNBZGRyZXNzWzVdID0gKHU4KSBFcGxBcGlJbml0UGFyYW0ubV91aU5vZGVJZDsKIAlFcGxBcGlJbml0UGFyYW0ubV9kd0ZlYXR1cmVGbGFncyA9IC0xOwogCUVwbEFwaUluaXRQYXJhbS5tX2R3Q3ljbGVMZW4gPSB1aUN5Y2xlTGVuX2c7CS8vIHJlcXVpcmVkIGZvciBlcnJvciBkZXRlY3Rpb24KIAlFcGxBcGlJbml0UGFyYW0ubV91aUlzb2NoclR4TWF4UGF5bG9hZCA9IDEwMDsJLy8gY29uc3QKQEAgLTQwMSw3ICszODcsNyBAQAogCiAJLy8gY29uZmlndXJlIElQIGFkZHJlc3Mgb2YgdmlydHVhbCBuZXR3b3JrIGludGVyZmFjZQogCS8vIGZvciBUQ1AvSVAgY29tbXVuaWNhdGlvbiBvdmVyIHRoZSBQT1dFUkxJTksgbmV0d29yawotCXNwcmludGYoc0J1ZmZlciwgIiVsdS4lbHUuJWx1LiVsdSIsCisJc3ByaW50ZihzQnVmZmVyLCAiJXUuJXUuJXUuJXUiLAogCQkoRXBsQXBpSW5pdFBhcmFtLm1fZHdJcEFkZHJlc3MgPj4gMjQpLAogCQkoKEVwbEFwaUluaXRQYXJhbS5tX2R3SXBBZGRyZXNzID4+IDE2KSAmIDB4RkYpLAogCQkoKEVwbEFwaUluaXRQYXJhbS5tX2R3SXBBZGRyZXNzID4+IDgpICYgMHhGRiksCkBAIC00NTYsNyArNDQyLDcgQEAKIAlwcmludGsoIkVwbExpblByb2NGcmVlKCk6ICAgICAgICAweCVYXG4iLCBFcGxSZXQpOwogCiB9Ci0KKyNlbmRpZgogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAvLyAgICAgICAgICBQIFIgSSBWIEEgVCBFICAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtNDg0LDkgKzQ3MCw5IEBACiAvLwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdEVwbEtlcm5lbCBQVUJMSUMgQXBwQ2JFdmVudCh0RXBsQXBpRXZlbnRUeXBlIEV2ZW50VHlwZV9wLAkvLyBJTjogZXZlbnQgdHlwZSAoZW51bSkKLQkJCSAgICAgdEVwbEFwaUV2ZW50QXJnICogcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCi0JCQkgICAgIHZvaWQgR0VORVJJQyAqIHBVc2VyQXJnX3ApCit0RXBsS2VybmVsIEFwcENiRXZlbnQodEVwbEFwaUV2ZW50VHlwZSBFdmVudFR5cGVfcCwJLy8gSU46IGV2ZW50IHR5cGUgKGVudW0pCisJCSAgICAgIHRFcGxBcGlFdmVudEFyZyAqcEV2ZW50QXJnX3AsCS8vIElOOiBldmVudCBhcmd1bWVudCAodW5pb24pCisJCSAgICAgIHZvaWQgKnBVc2VyQXJnX3ApCiB7CiAJdEVwbEtlcm5lbCBFcGxSZXQgPSBrRXBsU3VjY2Vzc2Z1bDsKIApAQCAtNTE1LDcgKzUwMSw3IEBACiAKIAkJCWNhc2Uga0VwbE5tdEdzUmVzZXRDb21tdW5pY2F0aW9uOgogCQkJCXsKLQkJCQkJRFdPUkQgZHdCdWZmZXI7CisJCQkJCXUzMiBkd0J1ZmZlcjsKIAogCQkJCQkvLyBjb25maWd1cmUgT0QgZm9yIE1OIGluIHN0YXRlIFJlc2V0Q29tbSBhZnRlciByZXNldGluZyB0aGUgT0QKIAkJCQkJLy8gVE9ETzogc2V0dXAgeW91ciBvd24gbmV0d29yayBjb25maWd1cmF0aW9uIGhlcmUKQEAgLTY3Nyw4ICs2NjMsOCBAQAogCiAJCQljYXNlIGtFcGxFdmVudFNvdXJjZURsbGs6CiAJCQkJewkvLyBlcnJvciBvY2N1cmVkIHdpdGhpbiB0aGUgZGF0YSBsaW5rIGxheWVyIChlLmcuIGludGVycnVwdCBwcm9jZXNzaW5nKQotCQkJCQkvLyB0aGUgRFdPUkQgYXJndW1lbnQgY29udGFpbnMgdGhlIERMTCBzdGF0ZSBhbmQgdGhlIE5NVCBldmVudAotCQkJCQlwcmludGsoIiB2YWw9JWxYXG4iLAorCQkJCQkvLyB0aGUgdTMyIGFyZ3VtZW50IGNvbnRhaW5zIHRoZSBETEwgc3RhdGUgYW5kIHRoZSBOTVQgZXZlbnQKKwkJCQkJcHJpbnRrKCIgdmFsPSVYXG4iLAogCQkJCQkgICAgICAgcEV2ZW50QXJnX3AtPm1fSW50ZXJuYWxFcnJvci4KIAkJCQkJICAgICAgIG1fQXJnLm1fZHdBcmcpOwogCQkJCQlicmVhazsKQEAgLTgwMiw3ICs3ODgsNyBAQAogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXRFcGxLZXJuZWwgUFVCTElDIEFwcENiU3luYyh2b2lkKQordEVwbEtlcm5lbCBBcHBDYlN5bmModm9pZCkKIHsKIAl0RXBsS2VybmVsIEVwbFJldCA9IGtFcGxTdWNjZXNzZnVsOwogCkBAIC04MTAsNyArNzk2LDcgQEAKIAkJYlZhck91dDFPbGRfbCA9IGJWYXJPdXQxX2w7CiAJCS8vIHNldCBMRURzCiAKLS8vICAgICAgICBwcmludGsoImJWYXJJbiA9IDB4JTAyWCBiVmFyT3V0ID0gMHglMDJYXG4iLCAoV09SRCkgYlZhckluX2wsIChXT1JEKSBiVmFyT3V0X2wpOworLy8gICAgICAgIHByaW50aygiYlZhckluID0gMHglMDJYIGJWYXJPdXQgPSAweCUwMlhcbiIsICh1MTYpIGJWYXJJbl9sLCAodTE2KSBiVmFyT3V0X2wpOwogCX0KIAlpZiAodWlOb2RlSWRfZyAhPSBFUExfQ19BRFJfTU5fREVGX05PREVfSUQpIHsKIAkJYlZhckluMV9sKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2VkcnYuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvZWRydi5oCmluZGV4IGE0NTk4NGQuLjYyYjRlNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvZWRydi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvZWRydi5oCkBAIC0xMDQsNyArMTA0LDcgQEAKIAl1bnNpZ25lZCBpbnQgbV91aVR4TXNnTGVuOwkvLyBJTjogbGVuZ3RoIG9mIG1lc3NhZ2UgdG8gYmUgc2VuZCAoc2V0IGZvciBlYWNoIHRyYW5zbWl0IGNhbGwpCiAJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCXVuc2lnbmVkIGludCBtX3VpQnVmZmVyTnVtYmVyOwkvLyBPVVQ6IG51bWJlciBvZiB0aGUgYnVmZmVyLCBzZXQgYnkgZXRoZXJuZXRkcml2ZXIKLQlCWVRFICptX3BiQnVmZmVyOwkvLyBPVVQ6IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciwgc2V0IGJ5IGV0aGVybmV0ZHJpdmVyCisJdTggKm1fcGJCdWZmZXI7CS8vIE9VVDogcG9pbnRlciB0byB0aGUgYnVmZmVyLCBzZXQgYnkgZXRoZXJuZXRkcml2ZXIKIAl0RXBsTmV0VGltZSBtX05ldFRpbWU7CS8vIE9VVDogVGltZXN0YW1wIG9mIGVuZCBvZiB0cmFuc21pc3Npb24sIHNldCBieSBldGhlcm5ldGRyaXZlcgogCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAl1bnNpZ25lZCBpbnQgbV91aU1heEJ1ZmZlckxlbjsJLy8gSU4vT1VUOiBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgYnVmZmVyCkBAIC0xMTQsMjMgKzExNCwyMyBAQAogdHlwZWRlZiBzdHJ1Y3QgX3RFZHJ2UnhCdWZmZXIgewogCXRFZHJ2QnVmZmVySW5GcmFtZSBtX0J1ZmZlckluRnJhbWU7CS8vIE9VVCBwb3NpdGlvbiBvZiByZWNlaXZlZCBidWZmZXIgaW4gYW4gZXRoZXJuZXQtZnJhbWUKIAl1bnNpZ25lZCBpbnQgbV91aVJ4TXNnTGVuOwkvLyBPVVQ6IGxlbmd0aCBvZiByZWNlaXZlZCBidWZmZXIgKHdpdGhvdXQgQ1JDKQotCUJZVEUgKm1fcGJCdWZmZXI7CS8vIE9VVDogcG9pbnRlciB0byB0aGUgYnVmZmVyLCBzZXQgYnkgZXRoZXJuZXRkcml2ZXIKKwl1OCAqbV9wYkJ1ZmZlcjsJLy8gT1VUOiBwb2ludGVyIHRvIHRoZSBidWZmZXIsIHNldCBieSBldGhlcm5ldGRyaXZlcgogCXRFcGxOZXRUaW1lIG1fTmV0VGltZTsJLy8gT1VUOiBUaW1lc3RhbXAgb2YgZW5kIG9mIHJlY2VpcHRpb24KIAogfSB0RWRydlJ4QnVmZmVyOwogCi0vL3R5cGVkZWYgdm9pZCAoKnRFZHJ2UnhIYW5kbGVyKSAoQllURSBiQnVmZmVySW5GcmFtZV9wLCB0QnVmZmVyRGVzY3IgKiBwYkJ1ZmZlcl9wKTsKLS8vdHlwZWRlZiB2b2lkICgqdEVkcnZSeEhhbmRsZXIpIChCWVRFIGJCdWZmZXJJbkZyYW1lX3AsIEJZVEUgKiBwYkV0aGVybmV0RGF0YV9wLCBXT1JEIHdEYXRhTGVuX3ApOworLy90eXBlZGVmIHZvaWQgKCp0RWRydlJ4SGFuZGxlcikgKHU4IGJCdWZmZXJJbkZyYW1lX3AsIHRCdWZmZXJEZXNjciAqIHBiQnVmZmVyX3ApOworLy90eXBlZGVmIHZvaWQgKCp0RWRydlJ4SGFuZGxlcikgKHU4IGJCdWZmZXJJbkZyYW1lX3AsIHU4ICogcGJFdGhlcm5ldERhdGFfcCwgdTE2IHdEYXRhTGVuX3ApOwogdHlwZWRlZiB2b2lkICgqdEVkcnZSeEhhbmRsZXIpICh0RWRydlJ4QnVmZmVyICogcFJ4QnVmZmVyX3ApOwogdHlwZWRlZiB2b2lkICgqdEVkcnZUeEhhbmRsZXIpICh0RWRydlR4QnVmZmVyICogcFR4QnVmZmVyX3ApOwogCiAvLyBmb3JtYXQgb2YgaW5pdCBzdHJ1Y3R1cmUKIHR5cGVkZWYgc3RydWN0IHsKLQlCWVRFIG1fYWJNeU1hY0FkZHJbNl07CS8vIHRoZSBvd24gTUFDIGFkZHJlc3MKKwl1OCBtX2FiTXlNYWNBZGRyWzZdOwkvLyB0aGUgb3duIE1BQyBhZGRyZXNzCiAKLS8vICAgIEJZVEUgICAgICAgICAgICBtX2JOb09mUnhCdWZmRGVzY3I7ICAgICAvLyBudW1iZXIgb2YgZW50cmllcyBpbiByeCBidWZmZXJkZXNjcmlwdG9yIHRhYmxlCisvLyAgICB1OCAgICAgICAgICAgIG1fYk5vT2ZSeEJ1ZmZEZXNjcjsgICAgIC8vIG51bWJlciBvZiBlbnRyaWVzIGluIHJ4IGJ1ZmZlcmRlc2NyaXB0b3IgdGFibGUKIC8vICAgIHRCdWZmZXJEZXNjciAqICBtX3BSeEJ1ZmZEZXNjclRhYmxlOyAgICAvLyByeCBidWZmZXJkZXNjcmlwdG9yIHRhYmxlCi0vLyAgICBXT1JEICAgICAgICAgICAgbV93UnhCdWZmZXJTaXplOyAgICAgICAgLy8gc2l6ZSBvZiB0aGUgd2hvbGUgcnggYnVmZmVyCisvLyAgICB1MTYgICAgICAgICAgICBtX3dSeEJ1ZmZlclNpemU7ICAgICAgICAvLyBzaXplIG9mIHRoZSB3aG9sZSByeCBidWZmZXIKIAogCXRFZHJ2UnhIYW5kbGVyIG1fcGZuUnhIYW5kbGVyOwogCXRFZHJ2VHhIYW5kbGVyIG1fcGZuVHhIYW5kbGVyOwpAQCAtMTQ1LDExICsxNDUsMTEgQEAKIAogdEVwbEtlcm5lbCBFZHJ2U2h1dGRvd24odm9pZCk7CiAKLXRFcGxLZXJuZWwgRWRydkRlZmluZVJ4TWFjQWRkckVudHJ5KEJZVEUgKiBwYk1hY0FkZHJfcCk7Ci10RXBsS2VybmVsIEVkcnZVbmRlZmluZVJ4TWFjQWRkckVudHJ5KEJZVEUgKiBwYk1hY0FkZHJfcCk7Cit0RXBsS2VybmVsIEVkcnZEZWZpbmVSeE1hY0FkZHJFbnRyeSh1OCAqIHBiTWFjQWRkcl9wKTsKK3RFcGxLZXJuZWwgRWRydlVuZGVmaW5lUnhNYWNBZGRyRW50cnkodTggKiBwYk1hY0FkZHJfcCk7CiAKLS8vdEVwbEtlcm5lbCBFZHJ2RGVmaW5lVW5pY2FzdEVudHJ5ICAgICAoQllURSAqIHBiVUNFbnRyeV9wKTsKLS8vdEVwbEtlcm5lbCBFZHJ2VW5kZmluZVVuaWNhc3RFbnRyeSAgICAoQllURSAqIHBiVUNFbnRyeV9wKTsKKy8vdEVwbEtlcm5lbCBFZHJ2RGVmaW5lVW5pY2FzdEVudHJ5ICAgICAodTggKiBwYlVDRW50cnlfcCk7CisvL3RFcGxLZXJuZWwgRWRydlVuZGZpbmVVbmljYXN0RW50cnkgICAgKHU4ICogcGJVQ0VudHJ5X3ApOwogCiB0RXBsS2VybmVsIEVkcnZBbGxvY1R4TXNnQnVmZmVyKHRFZHJ2VHhCdWZmZXIgKiBwQnVmZmVyX3ApOwogdEVwbEtlcm5lbCBFZHJ2UmVsZWFzZVR4TXNnQnVmZmVyKHRFZHJ2VHhCdWZmZXIgKiBwQnVmZmVyX3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9nbG9iYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvZ2xvYmFsLmgKaW5kZXggZmUxNjcxNi4uOGM1MmQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9nbG9iYWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2dsb2JhbC5oCkBAIC0yMiwxMjYxICsyMiwyMSBAQAogI2lmbmRlZiBfR0xPQkFMX0hfCiAjZGVmaW5lIF9HTE9CQUxfSF8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBlbGVtZW50cyBvZiBkZWZpbmVzIGZvciBkZXZlbG9wbWVudCBzeXN0ZW0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIHRoZXNlIGRlZmluZXMgYXJlIG5lY2Vzc2FyeSB0byBjaGVjayBzb21lIG9mIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgZGV2ZWxvcG1lbnQgc3lzdGVtCi0jZGVmaW5lIF9ERVZfQklHRU5EXyAgICAgICAgICAgIDB4ODAwMDAwMDBMCS8vIGJpZyBlbmRpYW4gKG1vdG9yb2xsYSBmb3JtYXQpCi0jZGVmaW5lIF9ERVZfQUxJR05NRU5UXzRfICAgICAgIDB4MDA0MDAwMDBMCS8vICAgICAgICAgICAgICAgICAgdGhlIENQVSBuZWVkcyBhbGlnbm1lbnQgb2YgNCBieXRlcwotI2RlZmluZSBfREVWX09OTFlfSU5UX01BSU5fICAgICAweDAwMDA0MDAwTAkvLyAgICAgICAgICAgICAgICAgIHRoZSBjb21waWxlciBuZWVkcyAiaW50IG1haW4oaW50KSIgaW5zdGVhZCBvZiAidm9pZCBtYWluKHZvaWQpIgotI2RlZmluZSBfREVWX0NPTU1BX0VYVF8gICAgICAgICAweDAwMDAyMDAwTAkvLyAgICAgICAgICAgICAgICAgIHN1cHBvcnQgb2YgbGFzdCBjb21tYSBpbiBzdHJ1Y3QgcHJlZGVmaW5pdGlvbgotI2RlZmluZSBfREVWXzY0QklUX1NVUFBPUlRfICAgICAweDAwMDAxMDAwTAkvLyAgICAgICAgICAgICAgICAgIHN1cHBvcnQgb2YgNjQgYml0IG9wZXJhdGlvbnMKLSNkZWZpbmUgX0RFVl9CSVQ2NF8gICAgICAgICAgICAgMHgwMDAwMDQwMEwJLy8gY291bnQgb2YgYml0czogICA2NCBiaXQKLSNkZWZpbmUgX0RFVl9CSVQzMl8gICAgICAgICAgICAgMHgwMDAwMDMwMEwJLy8gICAgICAgICAgICAgICAgICAzMiBiaXQKLSNkZWZpbmUgX0RFVl9CSVQxNl8gICAgICAgICAgICAgMHgwMDAwMDIwMEwJLy8gICAgICAgICAgICAgICAgICAxNiBiaXQKLSNkZWZpbmUgX0RFVl9CSVQ4XyAgICAgICAgICAgICAgMHgwMDAwMDEwMEwJLy8gICAgICAgICAgICAgICAgICA4IGJpdAotI2RlZmluZSBfREVWX1JWQ1RfQVJNXyAgICAgICAgICAweDAwMDAwMDFDTAkvLyAgICAgICAgICAgICAgICAgIFJlYWxWaWV3IEFSTQotI2RlZmluZSBfREVWX1JFTkVTQVNNMzJDICAgICAgICAweDAwMDAwMDFCTAkvLyBjb21waWxlciBmcm9tOiAgIFJlbmVzYXMKLSNkZWZpbmUgX0RFVl9HTlVDX01JUFMyXyAgICAgICAgMHgwMDAwMDAxQUwJLy8gICAgICAgICAgICAgICAgICBHTlUgZm9yIE1JUFMyCi0jZGVmaW5lIF9ERVZfTVBMQUJfQzMwXyAgICAgICAgIDB4MDAwMDAwMTlMCS8vICAgICAgICAgICAgICAgICAgTVBMQUIgQzMwIGZvciBNaWNyb2NoaXAgZHNQSUMzM0Ygc2VyaWVzCi0jZGVmaW5lIF9ERVZfR05VQ19UQ18gICAgICAgICAgIDB4MDAwMDAwMThMCS8vICAgICAgICAgICAgICAgICAgR05VIGZvciBJbmZpbmVvbiBUcmlDb3JlCi0jZGVmaW5lIF9ERVZfR05VQ19YODZfICAgICAgICAgIDB4MDAwMDAwMTdMCS8vICAgICAgICAgICAgICAgICAgR05VIGZvciBJMzg2Ci0jZGVmaW5lIF9ERVZfSUFSX0FSTV8gICAgICAgICAgIDB4MDAwMDAwMTZMCS8vICAgICAgICAgICAgICAgICAgQVJNIElBUiBDL0MrKyBDb21waWxlcgotI2RlZmluZSBfREVWX1BBUkFER01fWDg2ICAgICAgICAweDAwMDAwMDE1TAkvLyAgICAgICAgICAgICAgICAgIFBhcmFkaWdtIEMvQysrIGZvciBCZWNrIDF4MwotI2RlZmluZSBfREVWX0dOVUNfQ0ZfICAgICAgICAgICAweDAwMDAwMDE0TAkvLyAgICAgICAgICAgICAgICAgIEdOVSBmb3IgQ29sZGZpcmUKLSNkZWZpbmUgX0RFVl9LRUlMX0FSTV8gICAgICAgICAgMHgwMDAwMDAxM0wJLy8gICAgICAgICAgICAgICAgICBLZWlsIEFSTQotI2RlZmluZSBfREVWX01TRVZDXyAgICAgICAgICAgICAweDAwMDAwMDEyTAkvLyAgICAgICAgICAgICAgICAgIE1pY3Jvc29mdCBlbWJlZGRlZCBWaXN1YWwgQy9DKysKLSNkZWZpbmUgX0RFVl9ISUdIVEVDX0dOVUNfWDg2XyAgMHgwMDAwMDAxMUwJLy8gICAgICAgICAgICAgICAgICBIaWdodGVjIGVsZjM4NiBnY2MKLSNkZWZpbmUgX0RFVl9NU1ZDX1JUWF8gICAgICAgICAgMHgwMDAwMDAxMEwJLy8gICAgICAgICAgICAgICAgICBWQzYwMCArIFJUWAotI2RlZmluZSBfREVWX01TVkNfVjFfNV8gICAgICAgICAweDAwMDAwMDBGTAkvLyAgICAgICAgICAgICAgICAgIE1pY3Jvc29mdCBWaXN1YWwgQy9DKysgVjEuNQotI2RlZmluZSBfREVWX0dOVUNfQVJNN18gICAgICAgICAweDAwMDAwMDBFTAkvLyAgICAgICAgICAgICAgICAgIEdOVSBDb21waWxlciBnY2MgZm9yIEFSTTcKLSNkZWZpbmUgX0RFVl9NRVRST1dFUktTX0NXXyAgICAgMHgwMDAwMDAwREwJLy8gICAgICAgICAgICAgICAgICBNZXRyb3dlcmtzIENvZGUgV2FycmlvcgotI2RlZmluZSBfREVWX01JVFNVQklTSElNMTZDXyAgICAweDAwMDAwMDBDTAkvL2NvbXBpbGVyIGZyb206ICAgIE1pdHN1YmlzaGkKLSNkZWZpbmUgX0RFVl9HTlVDX0MxNlhfICAgICAgICAgMHgwMDAwMDAwQkwJLy8gICAgICAgICAgICAgICAgICBHTlUgQ29tcGlsZXIgZ2NjMTY2IGZvciBJbmZpbmVvbiBDMTZ4Ci0jZGVmaW5lIF9ERVZfTElOVVhfR0NDXyAgICAgICAgIDB4MDAwMDAwMEFMCS8vICAgICAgICAgICAgICAgICAgTGludXggR05VIENvbXBpbGVyIGdjYwotI2RlZmluZSBfREVWX0dOVUNfTVBDNVg1ICAgICAgICAweDAwMDAwMDA5TAkvLyAgICAgICAgICAgICAgICAgIEdOVSBmb3IgTW90b3JvbGEgUFBDNXg1Ci0jZGVmaW5lIF9ERVZfVEFTS0lOR00xNkNfICAgICAgIDB4MDAwMDAwMDhMCS8vICAgICAgICAgICAgICAgICAgVGFza2luZyBmb3IgTWl0c3ViaXNoaSBNMTZDCi0jZGVmaW5lIF9ERVZfRlVKSVRTVV8gICAgICAgICAgIDB4MDAwMDAwMDdMCS8vICAgICAgICAgICAgICAgICAgRnVqaXRzdQotI2RlZmluZSBfREVWX1RBU0tJTkc4XyAgICAgICAgICAweDAwMDAwMDA2TAkvLyAgICAgICAgICAgICAgICAgIFRhc2tpbmcgODA1MQotI2RlZmluZSBfREVWX1RBU0tJTkcxNl8gICAgICAgICAweDAwMDAwMDA1TAkvLyAgICAgICAgICAgICAgICAgIFRhc2tpbmcgMTY2Ci0jZGVmaW5lIF9ERVZfS0VJTDhfICAgICAgICAgICAgIDB4MDAwMDAwMDRMCS8vICAgICAgICAgICAgICAgICAgS2VpbCBDNTEKLSNkZWZpbmUgX0RFVl9LRUlMMTZfICAgICAgICAgICAgMHgwMDAwMDAwM0wJLy8gICAgICAgICAgICAgICAgICBLZWlsIEMxNjYKLSNkZWZpbmUgX0RFVl9CT1JMQU5EQ18gICAgICAgICAgMHgwMDAwMDAwMkwJLy8gICAgICAgICAgICAgICAgICBCb3JsYW5kIEMvQysrCi0jZGVmaW5lIF9ERVZfTVNWQzE2XyAgICAgICAgICAgIDB4MDAwMDAwMDFMCS8vICAgICAgICAgICAgICAgICAgTWljcm9zb2Z0IFZpc3VhbCBDL0MrKwotI2RlZmluZSBfREVWX01TVkMzMl8gICAgICAgICAgICAweDAwMDAwMDAwTAkvLyAgICAgICAgICAgICAgICAgIE1pY3Jvc29mdCBWaXN1YWwgQy9DKysKLQotLy8gdGhlc2UgZGVmaW5lcyBjYW4gYmUgdXNlZCB0byBtYXNrIHByZXZpb3VzIGVsZW1lbnRzCi0jZGVmaW5lIF9ERVZfTUFTS19DT01QSUxFUiAgICAgIDB4MDAwMDAwRkZMCi0jZGVmaW5lIF9ERVZfTUFTS19CSVRDT1VOVCAgICAgIDB4MDAwMDBGMDBMCi0jZGVmaW5lIF9ERVZfTUFTS19BRERTVVBQT1JUICAgIDB4MDAwMEYwMDBMCi0jZGVmaW5lIF9ERVZfTUFTS19BTElHTk1FTlQgICAgIDB4MDBGMDAwMDBMCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5lcyBmb3IgZGV2ZWxvcG1lbnQgc3lzdGVtIChERVZfU1lTVEVNKSBpbmNsdWRpbmcgcHJldmlvdXMgZWxlbWVudHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgX0RFVl9XSU4xNl8gICAgICAgICAgICAgKF9ERVZfQklUMTZfIHwgX0RFVl9NU1ZDMTZfICAgICAgICAgICAgICAgICAgKQotI2RlZmluZSBfREVWX1dJTjMyXyAgICAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX01TVkMzMl8gICAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX01TVkNfRE9TXyAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX01TVkNfVjFfNV8gICAgICAgICAgICAgICApCi0jZGVmaW5lIF9ERVZfQk9STEFORF9ET1NfICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfQk9STEFORENfICAgICAgICAgICAgICAgICkJLy98IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfS0VJTF9DNTFYXyAgICAgICAgIChfREVWX0JJVDhfICB8IF9ERVZfS0VJTDhfICAgICB8IF9ERVZfQklHRU5EXyB8IF9ERVZfQ09NTUFfRVhUXykJLy8gYXQgbGVhc3QgQzUxIHZlcnNpb24gNy4wNSBzdXBwb3J0cyBjb21tYSBleHRlbnNpb24KLSNkZWZpbmUgX0RFVl9LRUlMX0MxNlhfICAgICAgICAgKF9ERVZfQklUMTZfIHwgX0RFVl9LRUlMMTZfICAgICAgICAgICAgICAgICAgIHwgX0RFVl9DT01NQV9FWFRfKQkvLyBhdCBsZWFzdCBDMTY2IHZlcnNpb24gNS4wMyBzdXBwb3J0cyBjb21tYSBleHRlbnNpb24KLSNkZWZpbmUgX0RFVl9UQVNLSU5HX0M1MVhfICAgICAgKF9ERVZfQklUOF8gIHwgX0RFVl9UQVNLSU5HOF8gIHwgX0RFVl9CSUdFTkRfKQotI2RlZmluZSBfREVWX1RBU0tJTkdfQzE2WF8gICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX1RBU0tJTkcxNl8gICAgICAgICAgICAgICApCi0jZGVmaW5lIF9ERVZfRlVKSVRTVV9GNTkwXyAgICAgIChfREVWX0JJVDhfICB8IF9ERVZfRlVKSVRTVV8gICAgICAgICAgICAgICAgICB8IF9ERVZfQ09NTUFfRVhUXykJLy8gc29mdHVuZSBpcyBub3QgYWJsZSB0byBzdXBwb3J0IDY0IGJpdCB2YXJpYWJsZXMgUVdPUkQgISEhCi0vL2Yuai4yOS4wNC4wMyBNMTZDIGthbm4gZWZmZWt0aXYgbWl0IEJ5dGVzIHVtZ2VoZW4KLS8vI2RlZmluZSBfREVWX1RBU0tJTkdfTTE2Q18gICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX1RBU0tJTkdNMTZDXyAgICAgICAgICAgICApCi0jZGVmaW5lIF9ERVZfVEFTS0lOR19NMTZDXyAgICAgIChfREVWX0JJVDhfICB8IF9ERVZfVEFTS0lOR00xNkNfICAgICAgICAgICAgICkKLSNkZWZpbmUgX0RFVl9NSVRTVUJJU0hJX00xNkNfICAgKF9ERVZfQklUOF8gIHwgX0RFVl9NSVRTVUJJU0hJTTE2Q18gICAgICAgICAgKQotI2RlZmluZSBfREVWX0dOVV9NUEM1WDVfICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfTVBDNVg1fCBfREVWX0JJR0VORF8gfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0xJTlVYXyAgICAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0xJTlVYX0dDQ18gICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0dOVV9DMTZYXyAgICAgICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX0dOVUNfQzE2WF8gICAgICAgICAgICAgICApCS8vfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfTUNXX01QQzVYNV8gICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfTUVUUk9XRVJLU19DV18gICAgICAgICAgICkJLy98IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8pCi0jZGVmaW5lIF9ERVZfR05VX0FSTTdfICAgICAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfR05VQ19BUk03XyAgICAgICAgICAgICAgICB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8gfCBfREVWX09OTFlfSU5UX01BSU5fKQotI2RlZmluZSBfREVWX1dJTjMyX1JUWF8gICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX01TVkNfUlRYXyAgICAgICAgICAgICAgICApCS8vfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0hJR0hURUNfWDg2XyAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0hJR0hURUNfR05VQ19YODZfICAgICAgICApCS8vfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX1dJTl9DRV8gICAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX01TRVZDXyAgICAgICAgICAgICAgICAgICApCS8vfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0tFSUxfQ0FSTV8gICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0tFSUxfQVJNXyAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0lBUl9DQVJNXyAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0lBUl9BUk1fICAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX1JWQ1RfQ0FSTV8gICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX1JWQ1RfQVJNXyAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfIHwgX0RFVl9PTkxZX0lOVF9NQUlOXykKLSNkZWZpbmUgX0RFVl9NQ1dfTUNGNVhYWF8gICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9NRVRST1dFUktTX0NXXyAgICAgICAgICAgKQkvL3wgX0RFVl82NEJJVF9TVVBQT1JUXyB8IF9ERVZfQ09NTUFfRVhUXykKLSNkZWZpbmUgX0RFVl9HTlVfQ0Y1MjgyXyAgICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9HTlVDX0NGXyAgIHwgX0RFVl9CSUdFTkRfKQotI2RlZmluZSBfREVWX1BBUl9CRUNLMVgzXyAgICAgICAoX0RFVl9CSVQxNl8gfCBfREVWX1BBUkFER01fWDg2KQotI2RlZmluZSBfREVWX0dOVV9DRjU0OFhfICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfQ0ZfICAgfCBfREVWX0JJR0VORF8gfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0dOVV9JMzg2XyAgICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfWDg2XyAgICAgICAgICAgICAgICAgfCBfREVWXzY0QklUX1NVUFBPUlRfIHwgX0RFVl9DT01NQV9FWFRfIHwgX0RFVl9PTkxZX0lOVF9NQUlOXykKLSNkZWZpbmUgX0RFVl9HTlVfVFJJQ09SRV8gICAgICAgKF9ERVZfQklUMzJfIHwgX0RFVl9HTlVDX1RDXyAgICAgICAgICAgICAgICAgIHwgX0RFVl82NEJJVF9TVVBQT1JUXyB8IF9ERVZfQ09NTUFfRVhUXyB8IF9ERVZfT05MWV9JTlRfTUFJTl8gfCBfREVWX0FMSUdOTUVOVF80XykKLSNkZWZpbmUgX0RFVl9NUExBQl9EU1BJQzMzRl8gICAgKF9ERVZfQklUMTZfIHwgX0RFVl9NUExBQl9DMzBfICAgICAgICAgICAgICAgKQkvL3wgX0RFVl9DT01NQV9FWFRfKQotI2RlZmluZSBfREVWX0dOVV9NSVBTRUxfICAgICAgICAoX0RFVl9CSVQzMl8gfCBfREVWX0dOVUNfTUlQUzJfICAgICB8IF9ERVZfQklHRU5EXyB8IF9ERVZfNjRCSVRfU1VQUE9SVF8gfCBfREVWX0NPTU1BX0VYVF8gfCBfREVWX09OTFlfSU5UX01BSU5fKQotCi0jZGVmaW5lIF9ERVZfUkVORVNBU19NMzJDXyAgICAgIChfREVWX0JJVDMyXyB8IF9ERVZfUkVORVNBU00zMkMpCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgdXNlZnVsbCBtYWNyb3MKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNkZWZpbmUgQ0hFQ0tfSUZfT05MWV9JTlRfTUFJTigpICAgIChERVZfU1lTVEVNICYgX0RFVl9PTkxZX0lOVF9NQUlOXykKLSNkZWZpbmUgQ0hFQ0tfTUVNT1JZX0FMSU5NRU5UKCkgICAgIChERVZfU1lTVEVNICYgX0RFVl9NQVNLX0FMSUdOTUVOVCkKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbmVzIGZvciB0YXJnZXQgc3lzdGVtIChUQVJHRVRfU1lTVEVNKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2RlZmluZSBfRE9TXyAgICAgICAgICAgICAgKDE2ICsgMHgxMDAwMCkKLSNkZWZpbmUgX1dJTjE2XyAgICAgICAgICAgICAxNgotI2RlZmluZSBfV0lOMzJfICAgICAgICAgICAgIDMyCi0jZGVmaW5lIF9XSU5DRV8gICAgICAgICAgICAoMzIgKyAweDIwMDAwKQotI2RlZmluZSBfTk9fT1NfICAgICAgICAgICAgICAwCi0jZGVmaW5lIF9MSU5VWF8gICAgICAgICAgICAgIDEKLSNkZWZpbmUgX1BYUk9TXyAgICAgICAgICAgICAgMgotI2RlZmluZSBfRUNPU1BST18gICAgICAgICAgICAzCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIGZ1bmN0aW9uIGlubGluaW5nCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZGVmaW5lIElOTElORV9GVU5DVElPTgkJLy8gZW1wdHkgZGVmaW5lCi0jdW5kZWYgIElOTElORV9FTkFCTEVECQkvLyBkaXNhYmxlIGFjdHVhbCBpbmxpbmluZyBvZiBmdW5jdGlvbnMKLSN1bmRlZiAgSU5MSU5FX0ZVTkNUSU9OX0RFRgkvLyBkaXNhYmxlIGlubGluaW5nIGZvciBhbGwgY29tcGlsZXJzIHBlciBkZWZhdWx0Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIEtlaWwgQzUxCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWZkZWYgIF9fQzUxX18KLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9LRUlMX0M1MVhfCi0KLSNwcmFnbWEgREVCVUcgT0JKRUNURVhURU5ECi0jcHJhZ21hIFdBUk5JTkdMRVZFTCgyKQkJLy8gbWF4aW11bSB3YXJuaW5nIGxldmVsCi0KLSNkZWZpbmUgTkVBUiAgICAgICAgICAgIGlkYXRhCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgICAgICAgICB4ZGF0YQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTSAgICAgICAgICAgICBjb2RlCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQyAgICAgICAgICAgeGRhdGEJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLSNkZWZpbmUgTEFSR0UgICAgICAgICAgIGxhcmdlCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTSAgICAgICAgICAgICB4ZGF0YQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jZGVmaW5lIFJFRU5UUkFOVCAgICAgICByZWVudHJhbnQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgR05VIENvbXBpbGVyIGZvciBJbmZpbmVvbiBDMTZ4Ci0vLyAgLSBpdCBoYXZlIHRvIGJlIGJlZm9yIEtlaWwgKGl0IGhhcyBfX0MxNjZfXyB0b28pCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2VsaWYgIGRlZmluZWQgKF9fR05VQ19fKSAmJiBkZWZpbmVkIChfX0MxNjZfXykKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9HTlVfQzE2WF8KLQotLy8gICAgI2RlZmluZSBORUFSICAgICAgICAgICAgaWRhdGEgICAgICAgLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgTkVBUiAgICAgICAgICAgIG5lYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLS8vICAgICNkZWZpbmUgRkFSICAgICAgICAgICAgIHhodWdlICAgICAgIC8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgICAgICAgICBodWdlCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0vLyAgICAjZGVmaW5lIEhXQUNDICAgICAgICAgICBzZGF0YSAgICAgICAvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBIV0FDQyAgICAgICAgICAgaHVnZQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotLy8gICAgI2RlZmluZSBHRU5FUklDICAgICAgICAgeGh1Z2UgICAgICAgLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLSNkZWZpbmUgR0VORVJJQyAgICAgICAgIGh1Z2UJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotCi0jZGVmaW5lIEFTU0VSVChwKSAgXAotICAgICAgICAgICAgaWYgKHApICAgICAgICAgXAotICAgICAgICAgICAgeyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIDsgICAgICAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZWxzZSAgICAgICAgICAgXAotICAgICAgICAgICAgeyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIFBSSU5URjAoIkFzc2VydCBmYWlsZWQ6ICIgI3AgIiAoZmlsZSAlcyBsaW5lICVkKVxuIiwgX19GSUxFX18sIChpbnQpIF9fTElORV9fICk7IFwKLSAgICAgICAgICAgICAgICB3aGlsZSAoMSk7IFwKLSAgICAgICAgICAgIH0KLSNlbHNlCi0jZGVmaW5lIEFTU0VSVChwKQotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIEtlaWwgQzE2NgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmICBkZWZpbmVkIChfX0MxNjZfXykJLy8gMjQuMDEuMjAwNSByLmQuOiBLZWlsIEFSTTcgbmVlZHMgZGlyZWN0aXZlICdkZWZpbmVkJwotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0tFSUxfQzE2WF8KLQotI3ByYWdtYSBDT0RFCi0jcHJhZ21hIE1PRDE2NwotI3ByYWdtYSBOT0lOSVQKLSNwcmFnbWEgREVCVUcKLSNwcmFnbWEgV0FSTklOR0xFVkVMKDMpCQkvLyBtYXhpbXVtIHdhcm5pbmcgbGV2ZWwKLSNwcmFnbWEgV0FSTklORyBESVNBQkxFID0gNDcJLy8gd2FybmluZyA8dW5yZWZlcmVuY2VkIHBhcmFtZXRlcj4gPSBPRkYKLSNwcmFnbWEgV0FSTklORyBESVNBQkxFID0gMzgJLy8gd2FybmluZyA8ZW1wdHkgdHJhbnNsYXRpb24gdW5pdD4gPSBPRkYKLS8vICAjcHJhZ21hIFdBUk5JTkcgRElTQUJMRSA9IDEwMiAgICAgICAvLyB3YXJuaW5nIDxkaWZmZXJlbnQgY29uc3Qvdm9sYXRpbGUgcXVhbGlmaWVycz4gPSBPRkYKLSNwcmFnbWEgV0FSTklORyBESVNBQkxFID0gMTc0CS8vIHdhcm5pbmcgPHVucmVmZXJlbmNlZCAnc3RhdGljJyBmdW5jdGlvbj4gPSBPRkYKLSNwcmFnbWEgV0FSTklORyBESVNBQkxFID0gMTgzCS8vIHdhcm5pbmcgPGRlYWQgYXNzaWduZW1lbnQgZWxpbWluYXRlZD4gPSBPRkYKLQotI2RlZmluZSBORUFSICAgICAgICAgICAgaWRhdGEJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSICAgICAgICAgICAgIHhodWdlCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0vLyAgICAjZGVmaW5lIEhXQUNDICAgICAgICAgICBzZGF0YSAgICAgICAvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBIV0FDQyAgICAgICAgICAgaHVnZQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDICAgICAgICAgeGh1Z2UJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIE1QTEFCIEMzMCBmb3IgZHNQSUMzM0Ygc2VyaWVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2VsaWYgIGRlZmluZWQgKF9fQzMwX18pCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfTVBMQUJfRFNQSUMzM0ZfCi0KLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkJLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLSNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotLy8gICAgI2lmbmRlZiBRV09SRAotLy8gICAgICAgICNkZWZpbmUgUVdPUkQgbG9uZyBsb25nCi0vLyAgICAjZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBLZWlsIEFSTQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmICBkZWZpbmVkIChfX0NBX18pCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfS0VJTF9DQVJNXwotCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgUVdPUkQKLSNkZWZpbmUgUVdPUkQgbG9uZyBsb25nCi0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBSZWFsVmlldyBBUk0gY29tcGlsYXRpb24gdG9vbHMgKHByb3ZpZGVkIGJ5IHJlY2VudCBLZWlsIE1pY3JvY29udHJvbGxlciBEZXZlbG9wbWVudCBLaXRzKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmICBkZWZpbmVkIChfX0FSTUNDX1ZFUlNJT04pCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfUlZDVF9DQVJNXwotCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgUVdPUkQKLSNkZWZpbmUgUVdPUkQgbG9uZyBsb25nCi0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgQVNTRVJUKGV4cHIpICAgIGlmICghKGV4cHIpKSB7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFDRTAgKCJBc3NlcnRpb24gZmFpbGVkOiAiICNleHByICk7XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSk7fQotI2Vsc2UKLSNkZWZpbmUgQVNTRVJUKGV4cHIpCi0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBBUk0gSUFSIEMgQ29tcGlsZXIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZWxpZiAgZGVmaW5lZCAoX19JQ0NBUk1fXykKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9JQVJfQ0FSTV8KLQotI2RlZmluZSBORUFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIFFXT1JECi0jZGVmaW5lIFFXT1JEIGxvbmcgbG9uZwotI2VuZGlmCi0KLSAgICAvLyBXb3JrYXJvdW5kOgotICAgIC8vIElmIHdlIHVzZSBJQVIgYW5kIHdhbnQgdG8gZGVidWcgYnV0IGRvbid0IHdhbnQgdG8gdXNlIEMtU3B5IERlYnVnZ2VyCi0gICAgLy8gYXNzZXJ0KCkgZG9lc24ndCB3b3JrIGluIGRlYnVnIG1vZGUgYmVjYXVzZSBpdCBuZWVkcyBzdXBwb3J0IGZvciBGSUxFIGRlc2NyaXB0b3JzCi0gICAgLy8gKF9ETElCX0ZJTEVfREVTQ1JJUFRPUiA9PSAxKS4KLSNpZm5kZWYgTkRFQlVHCi0jZGVmaW5lIEFTU0VSVChleHByKSAgICBpZiAoIShleHByKSkge1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJBQ0UwICgiQXNzZXJ0aW9uIGZhaWxlZDogIiAjZXhwciApO1wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpO30KLSNlbHNlCi0jZGVmaW5lIEFTU0VSVChleHByKQotI2VuZGlmCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0vLyAgICAgICAgI2RlZmluZSBUUkFDRSAgUFJJTlRGNAotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIFRhc2tpbmcgODA1MQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2VsaWYgZGVmaW5lZCAoX0NDNTEpCi0KLSNpbmNsdWRlIDxjYzUxLmg+Ci0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfVEFTS0lOR19DNTFYXwotCi0jZGVmaW5lIE5FQVIgICAgICAgICAgICBfZGF0YQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIgICAgICAgICAgICAgX3hkYXQJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MgICAgICAgICAgIF94ZGF0CS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNICAgICAgICAgICAgIF94ZGF0CS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UICAgICAgIF9yZWVudHJhbnQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgVGFza2luZyBDMTY3Q1IgYW5kIEMxNjRDSQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2VsaWYgZGVmaW5lZCAoX0MxNjYpCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfVEFTS0lOR19DMTZYXwotCi0jZGVmaW5lIE5FQVIgICAgICAgICAgICBuZWFyCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgICAgICAgICBmYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MgICAvKiB0byBiZSBkZWZpbmVkICovCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSAgICAvLyBTdGRpby5oIGhhcyB0byBiZSBhbHdheSBpbmNsdWRlZCBoZXJlLiBJZiBwcmludGYoKSBpcyB1c2VkIHN0ZGlvLmggZGVmaW5lcyBOVUxMCi0gICAgLy8gd2l0aG91dCBjaGVja2luZyBpZiBpdCBpcyBhbHJlYWR5IGluY2x1ZGVkLiBTbyBhbiBlcnJvciBvY2N1cnMgd2hpbGUgY29tcGlsaW5nLgotICAgIC8vIChyLmQuKQotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNpZm5kZWYgTkRFQlVHCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBGVUpJVFNVIEZGTUMtMTZMWCBNQjkwNTkwCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyNlbGlmIChkZWZpbmVkIChGNTkwKSB8fCBkZWZpbmVkIChGNTQzKSB8fCBkZWZpbmVkIChGNTk4KSB8fCBkZWZpbmVkIChGNDk1KSB8fCBkZWZpbmVkIChGMzUwKSkKLSNlbGlmIGRlZmluZWQoX19DT01QSUxFUl9GQ0M5MDdfXykKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9GVUpJVFNVX0Y1OTBfCi0KLSNkZWZpbmUgTkVBUiAgICAvKiB0byBiZSBkZWZpbmVkICovCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgLyogdG8gYmUgZGVmaW5lZCAqLwkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTSAgICAgLyogdG8gYmUgZGVmaW5lZCAqLwkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MgICAvKiB0byBiZSBkZWZpbmVkICovCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotICAgIC8vIHNvZnR1bmUgaXMgbm90IGFibGUgdG8gc3VwcG9ydCA2NCBiaXQgdmFyaWFibGVzIFFXT1JEICEhIQotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBNaXRzdWJpc2hpIE0xNkMgZmFtaWx5IGZvciBUQVNLSU5HIENvbXBpbGVyIENNMTYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNlbGlmIGRlZmluZWQgKF9DTTE2QykKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9UQVNLSU5HX00xNkNfCi0KLSNkZWZpbmUgTkVBUiAgICAgICAgICAgIF9uZWFyCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgICAgICAgICBfZmFyCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIENPTlNUICAgICAgICAgICBfZmFycm9tCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MgICAgICAgICAgIF9uZWFyCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0gICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLSAgICAvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMgICAgICAgICBfZmFyCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotCQkJCQkvLyBkbyB5b3UgdXNlIG1lbW9yeSBtb2RlbCBTTUFMTCwgdGhhbiB5b3UgaGF2ZSB0byBzZXQgX2ZhcgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotICAgIC8vIFN0ZGlvLmggaGFzIHRvIGJlIGFsd2F5IGluY2x1ZGVkIGhlcmUuIElmIHByaW50ZigpIGlzIHVzZWQgc3RkaW8uaCBkZWZpbmVzIE5VTEwKLSAgICAvLyB3aXRob3V0IGNoZWNraW5nIGlmIGl0IGlzIGFscmVhZHkgaW5jbHVkZWQuIFNvIGFuIGVycm9yIG9jY3VycyB3aGlsZSBjb21waWxpbmcuCi0gICAgLy8gKHIuZC4pCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIE1pdHN1YmlzaGkgTTE2QyBmYW1pbHkgZm9yIE1pdHN1YmlzaGkgQ29tcGlsZXIgTkMzMAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIG5hbWUgTkMzMCwgYW5kZXJlIEZvcm0gd2lsbCBkZXIgQ29tcGlsZXIgbmljaHQgISEKLSNlbGlmIGRlZmluZWQgKE5DMzApCi0KLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfTUlUU1VCSVNISV9NMTZDXwotCi0jZGVmaW5lIE5FQVIgICAgICAgICAgICBuZWFyCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgICAgICAgICAgICBmYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MgICAgICAgICAgIG5lYXIJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLSNkZWZpbmUgTEFSR0UJCQkvLyBmdW5jdGlvbnMgc2V0IHBhcmFtZXRlcnMgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQyAgICAgICAgIGZhcgkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgUmVuZXNhcyBNMzJDIGZhbWlseSBmb3IgUmVuZXNhcyBDb21waWxlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmIGRlZmluZWQgKE5DMzA4KQotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfTk9fT1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX1JFTkVTQVNfTTMyQ18KLQotI2RlZmluZSBORUFSICAgICAgICAgICAgIG5lYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSICAgICAgICAgICAgICBmYXIJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgICBjb25zdAkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTSAgICAgICAgICAgICAgZmFyCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2VuZGlmCi0KLS8vICAgICNlcnJvciAoIlJFTkVTQVMgby5rLiIpCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgZGVmaW5pdGlvbnMgZm9yIEFSTTcgZmFtaWx5IHdpdGggR05VIGNvbXBpbGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fTElOVVhfQVJNX0FSQ0hfXykKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX05PX09TXwotI2RlZmluZSBERVZfU1lTVEVNICAgICAgX0RFVl9HTlVfQVJNN18KLQotI2RlZmluZSBORUFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBpbnRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNkZWZpbmUgQ09OU1QgICAgICAgICAgIGNvbnN0CS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgUVdPUkQKLSNkZWZpbmUgUVdPUkQgbG9uZyBsb25nCQkvLyBpLkEuIGR1cmNoIEhlcnIgS3VzY2hlbAotI2VuZGlmCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgTW90b3JvbGEgUG93ZXJQQyBmYW1pbHkgNXg1ICg1NTUvNTY1KQotLy8gIGRlZmluaXRpb25zIExpbnV4LVBDCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZWxpZiBkZWZpbmVkIChfX0dOVUNfXykKLQotI2lmIGRlZmluZWQgKExJTlVYKSB8fCBkZWZpbmVkIChsaW51eCkgfHwgZGVmaW5lZCAoX19saW51eF9fKQotI2RlZmluZSBMSU5VWF9TWVNURU0JCS8vIGRlZmluZSAnTElOVVhfU1lTVEVNJyB1bmlmb3JtIGZvciBhbGwgTGludXggYmFzZWQgc3lzdGVtcwotCS8vIHIuZC46IFdlIHdpbGwgbmVlZCBhbiBvdGhlciBzb2x1dGlvbiBoZXJlISBUaGVyZSBhcmUgdHdvIHNlY3Rpb25zIGhlcmUgd2hpY2ggZG8gY2hlY2sgdGhlIHByZXByb2MtZGVmaW5pdGlvbnM6Ci0JLy8gICAgIExJTlVYIGFuZCBfX2xpbnV4X18gLiBUaGUgZmlyc3Qgb25lIHdhcyBMaW51eCBmb3IgUEMsIHRoZSBzZWNvbmQgb25lIGlzIHRoaXMgc2VjdGlvbiBmb3IgZW1iZWRkZWQgTGludXggKE1DRjV4eHgpLgotCS8vICAgICBCdXQgTGludXggZm9yIFBDIGRvZXMgbm90IG5lZWQgdGhlIGRlZmluaXRpb25zIGZvciBlbWJlZGRlZCBMaW51eC4KLSNlbmRpZgotCi0gICAgLy8gR05VIEMgY29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rpb24gaW5saW5pbmcKLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OX0RFRiBleHRlcm4gaW5saW5lCi0KLSAgICAvLyB0byBhY3R1YWxseSBlbmFibGUgaW5saW5pbmcganVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgdGhyZWUgbGluZXMKLSAgICAvLyAjdW5kZWYgSU5MSU5FX0ZVTkNUSU9OCi0gICAgLy8gI2RlZmluZSBJTkxJTkVfRlVOQ1RJT04gICAgIElOTElORV9GVU5DVElPTl9ERUYKLSAgICAvLyAjZGVmaW5lIElOTElORV9FTkFCTEVEICAgICAgVFJVRQotCi0jaWZkZWYgUFhST1MKLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgICAgICBfUFhST1NfCi0jaWZkZWYgX19pMzg2X18KLSN1bmRlZiBMSU5VWAkJCS8vIHRoaXMgZGVmaW5lIHNlZW1zIHRvIGJlIHNldCBmcm9tIGNvbXBpbGVyCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0hJR0hURUNfWDg2XwotI2VsaWYgZGVmaW5lZCAoX190cmljb3JlX18pCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0dOVV9UUklDT1JFXwotI2Vsc2UgLy8gTVBDNXg1Ci0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0dOVV9NUEM1WDVfCi0jZW5kaWYKLQotI2VsaWYgZGVmaW5lZCAoTElOVVgpIHx8IGRlZmluZWQgKF9fbGludXhfXykKLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgICAgICBfTElOVVhfCS8vIExpbnV4IGRlZmluaXRpb24KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgICAgICBfREVWX0xJTlVYXwotCi0jZWxpZiBkZWZpbmVkIChHTlVfQ0Y1MjgyKQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgICAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgICAgICBfREVWX0dOVV9DRjUyODJfCi0KLSNlbGlmIGRlZmluZWQgKEVDT1NQUk9fSTM4Nl9QRUFLX1BDSSkKLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgICAgICBfRUNPU1BST18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgICAgICBfREVWX0dOVV9JMzg2XwotCi0jZWxpZiBkZWZpbmVkIChHTlVfQ0Y1NDhYKQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgICAgIF9OT19PU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgICAgICBfREVWX0dOVV9DRjU0OFhfCi0jZWxzZQotI2Vycm9yICdFUlJPUjogREVWX1NZU1RFTSBub3QgZm91bmQhJwotI2VuZGlmCi0KLSNpZm5kZWYgUVdPUkQKLSNkZWZpbmUgUVdPUkQgbG9uZyBsb25nIGludAotI2VuZGlmCi0KLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfUFhST1NfKQotCi0jaWZuZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbmRpZgotCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTSAgICAgLyogdG8gYmUgZGVmaW5lZCAqLwkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkgICAgLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIExBUkdFCQkJLy8gZnVuY3Rpb25zIHNldCBwYXJhbWV0ZXJzIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotCi0JLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLQkvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkgICAgLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJICAgIC8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jZGVmaW5lIEhXQUNDCQkJLy8gaGFyZHdhcmUgYWNjZXNzIHRocm91Z2ggZXh0ZXJuYWwgbWVtb3J5IChpLmUuIENBTikKLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDCi0KLSNpZm5kZWYgUVdPUkQKLSNkZWZpbmUgUVdPUkQgbG9uZyBsb25nIGludAotI2VuZGlmCi0KLSNpZm5kZWYgTkRFQlVHCi0jaW5jbHVkZSA8c3RkaW8uaD4JCS8vIHByb3RvdHlwZSBwcmludGYoKSAoZm9yIFRSQUNFKQotI2RlZmluZSBUUkFDRSAgcHJpbnRmCi0jZW5kaWYKLQotI2VuZGlmCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gR05VQyBmb3IgSTM4NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIChUQVJHRVRfU1lTVEVNID09IF9MSU5VWF8pIHx8IChUQVJHRVRfU1lTVEVNID09IF9FQ09TUFJPXykKLQotI2lmbmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZW5kaWYKLQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotCi0JLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLQkvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2lmbmRlZiBORUFSCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2VuZGlmCi0KLSNpZm5kZWYgRkFSCi0jZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBDT05TVAotI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZW5kaWYKLQotI2RlZmluZSBMQVJHRQotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKIAotI2lmbmRlZiBOREVCVUcKLSNpZm5kZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvLyBwcm90b3R5cGUgcHJpbnRmKCkgKGZvciBUUkFDRSkKLSNkZWZpbmUgVFJBQ0UgIHByaW50ZgotI2Vsc2UKICNkZWZpbmUgVFJBQ0UgIHByaW50awotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgogCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIEdOVSB3aXRob3V0IE9TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWYgKFRBUkdFVF9TWVNURU0gPT0gX05PX09TXykKLQotI2RlZmluZSBST00JCQkvLyBjb2RlIG9yIHZhcmlhYmxlcyBtYXBwZWQgdG8gUk9NIChpLmUuIGZsYXNoKQotCQkJCQkvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotCi0JLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8KLQkvLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCQkvLyBvciBpbnRlcm5hbCBkYXRhIG1lbW9yeS4KLSNkZWZpbmUgTUVNCQkJLy8gTWVtb3J5IGF0dHJpYnV0ZSB0byBvcHRpbWl6ZSBzcGVlZCBhbmQgY29kZSBvZiBwb2ludGVyIGFjY2Vzcy4KLQotI2lmbmRlZiBORUFSCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2VuZGlmCi0KLSNpZm5kZWYgRkFSCi0jZGVmaW5lIEZBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBDT05TVAotI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZW5kaWYKLQotI2RlZmluZSBMQVJHRQotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBOREVCVUcKLS8vICAgICAgICAgICAgI2luY2x1ZGUgInh1YXJ0ZHJ2LmgiCi0vLyAgICAgICAgICAgICNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAgICAgICAgLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLS8vICAgICAgICAgICAgI2RlZmluZSBUUkFDRSAgbXByaW50ZgotLy8gICAgICAgICAgICAjaWZuZGVmIFRSQUNFCi0vLyAgICAgICAgICAgICAgICAjZGVmaW5lIFRSQUNFIHRyYWNlCi0vLyAgICAgICAgICAgICAgICB2b2lkIHRyYWNlIChjaGFyICpmbXQsIC4uLik7Ci0vLyAgICAgICAgICAgICNlbmRpZgotI2VuZGlmCi0KLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBNUEM1NjUKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZWxpZiBfX01XRVJLU19fCi0KLSNpZmRlZiBfX01DNjhLX18KLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNID0gX01DRjU0OFhfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX01DV19NQ0Y1WFhYXwotCi0jZWxzZQotI2RlZmluZSBUQVJHRVRfU1lTVEVNID0gX01QQzU2NV8KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfTUNXX01QQzVYNV8KLSNlbmRpZgotCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCAgICAgICAgICAgY29uc3QJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBMQVJHRQkJCS8vIGZ1bmN0aW9ucyBzZXQgcGFyYW1ldGVycyB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLQotICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgLy8gbWluaW1pemUgY29kZSBtZW1vcnkgYW5kIG1heGltaXplIHNwZWVkLgotI2RlZmluZSBHRU5FUklDCQkJLy8gZ2VuZXJpYyBwb2ludGVyIHRvIHBvaW50IHRvIGFwcGxpY2F0aW9uIGRhdGEKLQkJCQkJLy8gVmFyaWFibGVzIHdpdGggdGhpcyBhdHRyaWJ1dGUgY2FuIGJlIGxvY2F0ZWQgaW4gZXh0ZXJuYWwKLQkJCQkJLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0KLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDxzdGRpby5oPgkJLy8gcHJvdG90eXBlIHByaW50ZigpIChmb3IgVFJBQ0UpCi0jZGVmaW5lIFRSQUNFICBwcmludGYKLSNlbmRpZgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIGRlZmluaXRpb25zIGZvciBCRUNLIDF4MwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNlbGlmIGRlZmluZWQgKF9fQk9STEFORENfXykgJiYgZGVmaW5lZCAoX19QQVJBRElHTV9fKQotCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICAgICBfTk9fT1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICAgICBfREVWX1BBUl9CRUNLMVgzXwotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJICAgICAvLyB1c2FnZTogQ09OU1QgQllURSBST00gZm9vID0gMHgwMDsKLSNkZWZpbmUgSFdBQ0MJCQkvLyBoYXJkd2FyZSBhY2Nlc3MgdGhyb3VnaCBleHRlcm5hbCBtZW1vcnkgKGkuZS4gQ0FOKQotCi0gICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhZGp1c3RlZCBieSB1c2VycyB0byBtYXRjaCBhcHBsaWNhdGlvbiByZXF1aXJlbWVudHMuIFRoZSBnb2FsIGlzIHRvCi0gICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJICAgICAvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbAotCQkJCSAgICAgLy8gb3IgaW50ZXJuYWwgZGF0YSBtZW1vcnkuCi0jZGVmaW5lIE1FTQkJCS8vIE1lbW9yeSBhdHRyaWJ1dGUgdG8gb3B0aW1pemUgc3BlZWQgYW5kIGNvZGUgb2YgcG9pbnRlciBhY2Nlc3MuCi0jZGVmaW5lIE5FQVIgX19uZWFyCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBGQVIgIF9fZmFyCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2lmbmRlZiBUUkFDRQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZGVmaW5lIFRSQUNFIHByaW50ZgotI2VuZGlmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICBkZWZpbml0aW9ucyBmb3IgUEMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNlbGlmIGRlZmluZWQgKF9fQk9STEFORENfXykKLQotICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBkZWZpbml0aW9uIHRhcmdldCBzeXN0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmZGVmIF9XSU4zMgotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX1dJTjMyXwkvLyBXSU4zMiBkZWZpbml0aW9uCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX1dJTjMyXwotI2Vsc2UKLSNkZWZpbmUgVEFSR0VUX1NZU1RFTSAgIF9ET1NfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX0JPUkxBTkRfRE9TXwotI2VuZGlmCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gV0lOMzIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMzJfKQotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLQkvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotCS8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jaWZuZGVmIE5FQVIKLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIENPTlNUCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNlbmRpZgotCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQyBfX3N0ZGNhbGwKLQotI2lmbmRlZiBOREVCVUcKLSNpZm5kZWYgVFJBQ0UKLSNpbmNsdWRlIDxzdGRpby5oPgotI2RlZmluZSBUUkFDRSBwcmludGYKLSNlbmRpZgotI2VuZGlmCi0KLSNlbGlmIChUQVJHRVRfU1lTVEVNID09IF9ET1NfKQotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLQkvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotCS8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotI2RlZmluZSBORUFSIG5lYXIJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgZmFyCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2lmbmRlZiBUUkFDRQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZGVmaW5lIFRSQUNFIHByaW50ZgotI2VuZGlmCi0jZW5kaWYKLQotI2VuZGlmCi0KLSNlbGlmIChfTVNDX1ZFUiA9PSA4MDApCQkvLyBQQyBNUyBWaXN1YWwgQy9DKysgZm9yIERPUyBhcHBsaWNhdGlvbnMKLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX0RPU18KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfTVNWQ19ET1NfCi0KLSNkZWZpbmUgUk9NCQkJLy8gY29kZSBvciB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLQkJCQkgICAgLy8gdXNhZ2U6IENPTlNUIEJZVEUgUk9NIGZvbyA9IDB4MDA7Ci0jZGVmaW5lIEhXQUNDIG5lYXIJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJICAgIC8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJICAgIC8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotI2RlZmluZSBORUFSIG5lYXIJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZGVmaW5lIEZBUiAgZmFyCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQwotCi0jaWZuZGVmIE5ERUJVRwotI2lmbmRlZiBUUkFDRQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jZGVmaW5lIFRSQUNFIHByaW50ZgotI2VuZGlmCi0jZW5kaWYKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGRlZmluaXRpb25zIGZvciBSVFggdW5kZXIgV0lOMzIKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZWxpZiAoZGVmaW5lZCAoVU5ERVJfUlRTUykgJiYgZGVmaW5lZCAoV0lOMzIpKQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIGRlZmluaXRpb24gdGFyZ2V0IHN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX1dJTjMyX1JUWF8KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfV0lOMzJfUlRYXwotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJICAgIC8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJICAgIC8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJICAgIC8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jaWZuZGVmIE5FQVIKLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIENPTlNUCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNlbmRpZgotCi0jZGVmaW5lIExBUkdFCi0KLSNkZWZpbmUgUkVFTlRSQU5UCi0jZGVmaW5lIFBVQkxJQyBfX3N0ZGNhbGwKLQotI2lmbmRlZiBOREVCVUcKLSNpZm5kZWYgVFJBQ0UKLSNkZWZpbmUgVFJBQ0UgUnRQcmludGYKLSNlbmRpZgotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBkZWZpbml0aW9ucyBmb3IgV2luQ0UKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jZWxpZiBkZWZpbmVkIChfV0lOMzJfV0NFKQotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIGRlZmluaXRpb24gdGFyZ2V0IHN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgICAgICAgICBfV0lOQ0VfCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICAgICAgICAgIF9ERVZfV0lOX0NFXwotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJICAgIC8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLSAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotICAgIC8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJICAgIC8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJICAgIC8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jaWZuZGVmIE5FQVIKLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSNkZWZpbmUgRkFSCQkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBleHRlcm5hbCBkYXRhIHN0b3JhZ2UgbG9jYXRpb24KLSNlbmRpZgotCi0jaWZuZGVmIENPTlNUCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNlbmRpZgotCi0jZGVmaW5lIExBUkdFCi0KLSNpZm5kZWYgUVdPUkQKLSAgICAgIC8vI2RlZmluZSBRV09SRCBsb25nIGxvbmcgaW50IC8vIE1TVkMgLk5FVCBjYW4gdXNlICJsb25nIGxvbmcgaW50IiB0b28gKGxpa2UgR05VKQotI2RlZmluZSBRV09SRCBfX2ludDY0Ci0jZW5kaWYKLQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDIF9fY2RlY2wKLQotI2lmZGVmIEFTU0VSVE1TRwotI3VuZGVmIEFTU0VSVE1TRwotI2VuZGlmCi0KLSNpZm5kZWYgTkRFQlVHCi0jaWZuZGVmIFRSQUNFCi0jZGVmaW5lIFRSQUNFIHByaW50ZgotLy8gICAgICAgICAgICB2b2lkIHRyYWNlIChjaGFyICpmbXQsIC4uLik7Ci0jZW5kaWYKLSNlbmRpZgotCi0jZWxzZSAvLyA9PT0+IFBDIE1TIFZpc3VhbCBDL0MrKwotCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIGRlZmluaXRpb24gdGFyZ2V0IHN5c3RlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWZkZWYgX1dJTjMyCi0jZGVmaW5lIFRBUkdFVF9TWVNURU0gICBfV0lOMzJfCS8vIFdJTjMyIGRlZmluaXRpb24KLSNkZWZpbmUgREVWX1NZU1RFTSAgICAgIF9ERVZfV0lOMzJfCi0jZWxzZQotI2RlZmluZSBUQVJHRVRfU1lTVEVNICAgX1dJTjE2XwkvLyBXSU4xNiBkZWZpbml0aW9uCi0jZGVmaW5lIERFVl9TWVNURU0gICAgICBfREVWX1dJTjE2XwotI2VuZGlmCi0KLSAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gV0lOMTYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiAoVEFSR0VUX1NZU1RFTSA9PSBfV0lOMTZfKQotCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0KLQkvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYWRqdXN0ZWQgYnkgdXNlcnMgdG8gbWF0Y2ggYXBwbGljYXRpb24gcmVxdWlyZW1lbnRzLiBUaGUgZ29hbCBpcyB0bwotCS8vIG1pbmltaXplIGNvZGUgbWVtb3J5IGFuZCBtYXhpbWl6ZSBzcGVlZC4KLSNkZWZpbmUgR0VORVJJQwkJCS8vIGdlbmVyaWMgcG9pbnRlciB0byBwb2ludCB0byBhcHBsaWNhdGlvbiBkYXRhCi0JCQkJCS8vIFZhcmlhYmxlcyB3aXRoIHRoaXMgYXR0cmlidXRlIGNhbiBiZSBsb2NhdGVkIGluIGV4dGVybmFsCi0JCQkJCS8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotCi0jaWZuZGVmIE5FQVIKLSNkZWZpbmUgTkVBUgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gaW50ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBGQVIKLSNkZWZpbmUgRkFSIGZhcgkJCS8vIHZhcmlhYmxlcyBtYXBwZWQgdG8gZXh0ZXJuYWwgZGF0YSBzdG9yYWdlIGxvY2F0aW9uCi0jZW5kaWYKLQotI2lmbmRlZiBDT05TVAotI2RlZmluZSBDT05TVCBjb25zdAkJLy8gdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0jZW5kaWYKLQotI2RlZmluZSBMQVJHRQotCi0jZGVmaW5lIFJFRU5UUkFOVAotI2RlZmluZSBQVUJMSUMgX2ZhciBfcGFzY2FsIF9leHBvcnQKLQotI2lmbmRlZiBOREVCVUcKLSNpZm5kZWYgVFJBQ0UKLSNkZWZpbmUgVFJBQ0UgdHJhY2UKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQl2b2lkIHRyYWNlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIFdJTjMyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotI2lmIChUQVJHRVRfU1lTVEVNID09IF9XSU4zMl8pCi0jZGVmaW5lIFJPTQkJCS8vIGNvZGUgb3IgdmFyaWFibGVzIG1hcHBlZCB0byBST00gKGkuZS4gZmxhc2gpCi0JCQkJCS8vIHVzYWdlOiBDT05TVCBCWVRFIFJPTSBmb28gPSAweDAwOwotI2RlZmluZSBIV0FDQwkJCS8vIGhhcmR3YXJlIGFjY2VzcyB0aHJvdWdoIGV4dGVybmFsIG1lbW9yeSAoaS5lLiBDQU4pCi0JLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFkanVzdGVkIGJ5IHVzZXJzIHRvIG1hdGNoIGFwcGxpY2F0aW9uIHJlcXVpcmVtZW50cy4gVGhlIGdvYWwgaXMgdG8vLyBtaW5pbWl6ZSBjb2RlIG1lbW9yeSBhbmQgbWF4aW1pemUgc3BlZWQuCi0jZGVmaW5lIEdFTkVSSUMJCQkvLyBnZW5lcmljIHBvaW50ZXIgdG8gcG9pbnQgdG8gYXBwbGljYXRpb24gZGF0YQotCQkJCQkvLyBWYXJpYWJsZXMgd2l0aCB0aGlzIGF0dHJpYnV0ZSBjYW4gYmUgbG9jYXRlZCBpbiBleHRlcm5hbC8vIG9yIGludGVybmFsIGRhdGEgbWVtb3J5LgotI2RlZmluZSBNRU0JCQkvLyBNZW1vcnkgYXR0cmlidXRlIHRvIG9wdGltaXplIHNwZWVkIGFuZCBjb2RlIG9mIHBvaW50ZXIgYWNjZXNzLgotI2lmbmRlZiBORUFSCi0jZGVmaW5lIE5FQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGludGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2VuZGlmCi0jaWZuZGVmIEZBUgotI2RlZmluZSBGQVIJCQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIGV4dGVybmFsIGRhdGEgc3RvcmFnZSBsb2NhdGlvbgotI2VuZGlmCi0jaWZuZGVmIENPTlNUCi0jZGVmaW5lIENPTlNUIGNvbnN0CQkvLyB2YXJpYWJsZXMgbWFwcGVkIHRvIFJPTSAoaS5lLiBmbGFzaCkKLSNlbmRpZgotI2RlZmluZSBMQVJHRQotI2RlZmluZSBSRUVOVFJBTlQKLSNkZWZpbmUgUFVCTElDIF9fc3RkY2FsbAotI2lmbmRlZiBRV09SRAotCSAgLy8jZGVmaW5lIFFXT1JEIGxvbmcgbG9uZyBpbnQgLy8gTVNWQyAuTkVUIGNhbiB1c2UgImxvbmcgbG9uZyBpbnQiIHRvbyAobGlrZSBHTlUpCi0jZGVmaW5lIFFXT1JEIF9faW50NjQKLSNlbmRpZgotI2lmbmRlZiBOREVCVUcKLSNpZm5kZWYgVFJBQ0UKLSNkZWZpbmUgVFJBQ0UgdHJhY2UKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQl2b2lkIHRyYWNlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCS8vIE1TIFZpc3VhbCBDKysgY29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rpb24gaW5saW5pbmcKLSNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OX0RFRiBfX2ZvcmNlaW5saW5lCi0JLy8gdG8gYWN0dWFsbHkgZW5hYmxlIGlubGluaW5nIGp1c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIHR3byBsaW5lcy8vICNkZWZpbmUgSU5MSU5FX0ZVTkNUSU9OICAgICBJTkxJTkVfRlVOQ1RJT05fREVGLy8gI2RlZmluZSBJTkxJTkVfRU5BQkxFRCAgICAgIFRSVUUKLSNlbmRpZgotI2VuZGlmCQkJCS8vID09PT4gUEMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy8gIGRlZmluaXRpb25zIG9mIGJhc2ljIHR5cGVzLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNpZm5kZWYgX1dJTkRFRl8JCS8vIGRlZmluZWQgaW4gV0lOREVGLkgsIGluY2x1ZGVkIGJ5IDx3aW5kb3dzLmg+Ci0gICAgLy8gLS0tIGFyaXRobWV0aWMgdHlwZXMgLS0tCi0jaWZuZGVmIFNIT1JUCi0jZGVmaW5lIFNIT1JUIHNob3J0IGludAotI2VuZGlmCi0jaWZuZGVmIFVTSE9SVAotI2RlZmluZSBVU0hPUlQgdW5zaWduZWQgc2hvcnQgaW50Ci0jZW5kaWYKLSNpZm5kZWYgSU5UCi0jZGVmaW5lIElOVCBpbnQKLSNlbmRpZgotI2lmbmRlZiBVSU5UCi0jZGVmaW5lIFVJTlQgdW5zaWduZWQgaW50Ci0jZW5kaWYKLSNpZm5kZWYgTE9ORwotI2RlZmluZSBMT05HIGxvbmcgaW50Ci0jZW5kaWYKLSNpZm5kZWYgVUxPTkcKLSNkZWZpbmUgVUxPTkcgdW5zaWduZWQgbG9uZyBpbnQKLSNlbmRpZgotICAgIC8vIC0tLSBsb2dpYyB0eXBlcyAtLS0KLSNpZm5kZWYgQllURQotI2RlZmluZSBCWVRFIHVuc2lnbmVkIGNoYXIKLSNlbmRpZgotI2lmbmRlZiBXT1JECi0jZGVmaW5lIFdPUkQgdW5zaWduZWQgc2hvcnQgaW50Ci0jZW5kaWYKLSNpZm5kZWYgRFdPUkQKLSNkZWZpbmUgRFdPUkQgdW5zaWduZWQgbG9uZyBpbnQKLSNlbmRpZgorLy8gLS0tIGxvZ2ljIHR5cGVzIC0tLQogI2lmbmRlZiBCT09MCiAjZGVmaW5lIEJPT0wgdW5zaWduZWQgY2hhcgogI2VuZGlmCi0gICAgLy8gLS0tIGFsaWFzIHR5cGVzIC0tLQorCisvLyAtLS0gYWxpYXMgdHlwZXMgLS0tCiAjaWZuZGVmIFRSVUUKICNkZWZpbmUgVFJVRSAgMHhGRgogI2VuZGlmCiAjaWZuZGVmIEZBTFNFCiAjZGVmaW5lIEZBTFNFIDB4MDAKICNlbmRpZgotI2lmbmRlZiBOVUxMCi0jZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCi0jZW5kaWYKLSNlbmRpZgogI2lmbmRlZiBfVElNRV9PRl9EQVlfREVGSU5FRF8KIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIGludCBtX2R3TXM7CkBAIC0xMzU5LDE1ICsxMTksOCBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2lmbmRlZiBBU1NFUlQKLSNpZiAhZGVmaW5lZCAoX19saW51eF9fKSAmJiAhZGVmaW5lZCAoX19LRVJORUxfXykKLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpZm5kZWYgQVNTRVJUCi0jZGVmaW5lIEFTU0VSVChwKSAgICBhc3NlcnQocCkKLSNlbmRpZgotI2Vsc2UKICNkZWZpbmUgQVNTRVJUKHApCiAjZW5kaWYKLSNlbmRpZgogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gIFNZUyBURUMgZXh0ZW5zaW9ucwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRGxsay5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRGxsay5oCmluZGV4IDU4OGU4NzEuLmE5NzkyMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbERsbGsuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxEbGxrLmgKQEAgLTc0LDE4ICs3NCwxMCBAQAogI2luY2x1ZGUgIi4uL0VwbERsbC5oIgogI2luY2x1ZGUgIi4uL0VwbEV2ZW50LmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogdHlwZWRlZiB0RXBsS2VybmVsKCp0RXBsRGxsa0NiQXN5bmMpICh0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewotCUJZVEUgbV9iZV9hYlNyY01hY1s2XTsKKwl1OCBtX2JlX2FiU3JjTWFjWzZdOwogCiB9IHRFcGxEbGxrSW5pdFBhcmFtOwogCkBAIC05NiwyMiArODgsMTggQEAKIAlzdHJ1Y3QgX3RFcGxEbGxrTm9kZUluZm8gKm1fcE5leHROb2RlSW5mbzsKIAlzdHJ1Y3QgX3RFZHJ2VHhCdWZmZXIgKm1fcFByZXFUeEJ1ZmZlcjsKIAl1bnNpZ25lZCBpbnQgbV91aU5vZGVJZDsKLQlEV09SRCBtX2R3UHJlc1RpbWVvdXQ7CisJdTMyIG1fZHdQcmVzVGltZW91dDsKIAl1bnNpZ25lZCBsb25nIG1fdWxEbGxFcnJvckV2ZW50czsKIAl0RXBsTm10U3RhdGUgbV9ObXRTdGF0ZTsKLQlXT1JEIG1fd1ByZXNQYXlsb2FkTGltaXQ7Ci0JQllURSBtX2JlX2FiTWFjQWRkcls2XTsKLQlCWVRFIG1fYlNvYUZsYWcxOworCXUxNiBtX3dQcmVzUGF5bG9hZExpbWl0OworCXU4IG1fYmVfYWJNYWNBZGRyWzZdOworCXU4IG1fYlNvYUZsYWcxOwogCUJPT0wgbV9mU29mdERlbGV0ZTsJLy8gZGVsZXRlIG5vZGUgYWZ0ZXIgZXJyb3IgYW5kIGlnbm9yZSBlcnJvcgogCiB9OwogCiB0eXBlZGVmIHN0cnVjdCBfdEVwbERsbGtOb2RlSW5mbyB0RXBsRGxsa05vZGVJbmZvOwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9ETExLKSkgIT0gMCkKIAogdEVwbEtlcm5lbCBFcGxEbGxrQWRkSW5zdGFuY2UodEVwbERsbGtJbml0UGFyYW0gKiBwSW5pdFBhcmFtX3ApOwpAQCAtMTU0LDcgKzE0Miw3IEBACiAKIHRFcGxLZXJuZWwgRXBsRGxsa1NvZnREZWxldGVOb2RlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKTsKIAotdEVwbEtlcm5lbCBFcGxEbGxrU2V0RmxhZzFPZk5vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIEJZVEUgYlNvYUZsYWcxX3ApOwordEVwbEtlcm5lbCBFcGxEbGxrU2V0RmxhZzFPZk5vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKTsKIAogdEVwbEtlcm5lbCBFcGxEbGxrR2V0Rmlyc3ROb2RlSW5mbyh0RXBsRGxsa05vZGVJbmZvICoqIHBwTm9kZUluZm9fcCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbERsbGtDYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbERsbGtDYWwuaAppbmRleCA2YzRkYzdlLi5kZGVjMWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxEbGxrQ2FsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRGxsa0NhbC5oCkBAIC03NCwxNCArNzQsNiBAQAogI2luY2x1ZGUgIi4uL0VwbERsbC5oIgogI2luY2x1ZGUgIi4uL0VwbEV2ZW50LmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgbV91bEN1clR4RnJhbWVDb3VudEdlbjsKIAl1bnNpZ25lZCBsb25nIG1fdWxDdXJUeEZyYW1lQ291bnRObXQ7CkBAIC05MiwxMCArODQsNiBAQAogCiB9IHRFcGxEbGxrQ2FsU3RhdGlzdGljczsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfRExMSykpICE9IDApCiAKIHRFcGxLZXJuZWwgRXBsRGxsa0NhbEFkZEluc3RhbmNlKHZvaWQpOwpAQCAtMTI0LDcgKzExMiw3IEBACiB0RXBsS2VybmVsIEVwbERsbGtDYWxBc3luY0NsZWFyUXVldWVzKHZvaWQpOwogCiB0RXBsS2VybmVsIEVwbERsbGtDYWxJc3N1ZVJlcXVlc3QodEVwbERsbFJlcVNlcnZpY2VJZCBTZXJ2aWNlX3AsCi0JCQkJICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwgQllURSBiU29hRmxhZzFfcCk7CisJCQkJICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwgdTggYlNvYUZsYWcxX3ApOwogCiB0RXBsS2VybmVsIEVwbERsbGtDYWxBc3luY0dldFNvYVJlcXVlc3QodEVwbERsbFJlcVNlcnZpY2VJZCAqIHBSZXFTZXJ2aWNlSWRfcCwKIAkJCQkJdW5zaWduZWQgaW50ICpwdWlOb2RlSWRfcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxFcnJvckhhbmRsZXJrLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxFcnJvckhhbmRsZXJrLmgKaW5kZXggNGE2N2VmOC4uMTg1YjU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRXJyb3JIYW5kbGVyay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbEVycm9ySGFuZGxlcmsuaApAQCAtNzMsMjggKzczLDE2IEBACiAKICNpbmNsdWRlICIuLi9FcGxFdmVudC5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiAvLyBpbml0IGZ1bmN0aW9uCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFcnJvckhhbmRsZXJrSW5pdCh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya0luaXQodm9pZCk7CiAKIC8vIGFkZCBpbnN0YW5jZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya0FkZEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrQWRkSW5zdGFuY2Uodm9pZCk7CiAKIC8vIGRlbGV0ZSBpbnN0YW5jZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXJyb3JIYW5kbGVya0RlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxFcnJvckhhbmRsZXJrRGVsSW5zdGFuY2Uodm9pZCk7CiAKIC8vIHByb2Nlc3NlcyBlcnJvciBldmVudHMKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEVycm9ySGFuZGxlcmtQcm9jZXNzKHRFcGxFdmVudCAqIHBFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsRXJyb3JIYW5kbGVya1Byb2Nlc3ModEVwbEV2ZW50ICpwRXZlbnRfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExfRVJST1JIQU5ETEVSS19IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsRXZlbnRrLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxFdmVudGsuaAppbmRleCAxZDI1YWFhLi4wYzJhNjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxFdmVudGsuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxFdmVudGsuaApAQCAtNzMsMzYgKzczLDI0IEBACiAKICNpbmNsdWRlICIuLi9FcGxFdmVudC5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiAvLyBpbml0IGZ1bmN0aW9uCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtJbml0KHRFcGxTeW5jQ2IgZnBTeW5jQ2IpOwordEVwbEtlcm5lbCBFcGxFdmVudGtJbml0KHRFcGxTeW5jQ2IgZnBTeW5jQ2IpOwogCiAvLyBhZGQgaW5zdGFuY2UKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50a0FkZEluc3RhbmNlKHRFcGxTeW5jQ2IgZnBTeW5jQ2IpOwordEVwbEtlcm5lbCBFcGxFdmVudGtBZGRJbnN0YW5jZSh0RXBsU3luY0NiIGZwU3luY0NiKTsKIAogLy8gZGVsZXRlIGluc3RhbmNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnRrRGVsSW5zdGFuY2Uodm9pZCk7CiAKIC8vIEtlcm5lbHRocmVhZCB0aGF0IGRpc3BhdGNoZXMgZXZlbnRzIGluIGtlcm5lbHNwYWNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudGtQcm9jZXNzKHRFcGxFdmVudCAqIHBFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnRrUHJvY2Vzcyh0RXBsRXZlbnQgKnBFdmVudF9wKTsKIAogLy8gcG9zdCBldmVudHMgZnJvbSBrZXJuZWxzcGFjZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnRrUG9zdCh0RXBsRXZlbnQgKiBwRXZlbnRfcCk7Cit0RXBsS2VybmVsIEVwbEV2ZW50a1Bvc3QodEVwbEV2ZW50ICpwRXZlbnRfcCk7CiAKIC8vIHBvc3QgZXJyb3JldmVudHMgZnJvbSBrZXJuZWxzcGFjZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnRrUG9zdEVycm9yKHRFcGxFdmVudFNvdXJjZSBFdmVudFNvdXJjZV9wLAotCQkJCSAgICAgdEVwbEtlcm5lbCBFcGxFcnJvcl9wLAotCQkJCSAgICAgdW5zaWduZWQgaW50IHVpQXJnU2l6ZV9wLCB2b2lkICpwQXJnX3ApOwordEVwbEtlcm5lbCBFcGxFdmVudGtQb3N0RXJyb3IodEVwbEV2ZW50U291cmNlIEV2ZW50U291cmNlX3AsCisJCQkgICAgICB0RXBsS2VybmVsIEVwbEVycm9yX3AsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlBcmdTaXplX3AsIHZvaWQgKnBBcmdfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExfRVZFTlRLX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxObXRrLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxObXRrLmgKaW5kZXggNTM0MDljYy4uNWRjOGEzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsTm10ay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE5tdGsuaApAQCAtNzQsMzEgKzc0LDE2IEBACiAjaW5jbHVkZSAiLi4vRXBsTm10LmgiCiAjaW5jbHVkZSAiRXBsRXZlbnRrLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVEspKSAhPSAwKQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdGtJbml0KEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKTsKK3RFcGxLZXJuZWwgRXBsTm10a0luaXQoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFIpOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMKLUVwbE5tdGtBZGRJbnN0YW5jZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUik7Cit0RXBsS2VybmVsIEVwbE5tdGtBZGRJbnN0YW5jZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUik7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQwotRXBsTm10a0RlbEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKTsKK3RFcGxLZXJuZWwgRXBsTm10a0RlbEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKTsKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdGtQcm9jZXNzKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgICB0RXBsRXZlbnQgKiBwRXZlbnRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdGtQcm9jZXNzKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB0RXBsRXZlbnQgKnBFdmVudF9wKTsKIAotRVBMRExMRVhQT1JUIHRFcGxObXRTdGF0ZSBQVUJMSUMKLUVwbE5tdGtHZXRObXRTdGF0ZShFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUik7Cit0RXBsTm10U3RhdGUgRXBsTm10a0dldE5tdFN0YXRlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSKTsKIAogI2VuZGlmIC8vICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTk1USykpICE9IDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE5tdGtDYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE5tdGtDYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVkZWFmYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxObXRrQ2FsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCi0gIChjKSBTWVNURUMgZWxlY3Ryb25pYyBHbWJILCBELTA3OTczIEdyZWl6LCBBdWd1c3QtQmViZWwtU3RyLiAyOQotICAgICAgd3d3LnN5c3RlYy1lbGVjdHJvbmljLmNvbQotCi0gIFByb2plY3Q6ICAgICAgb3BlblBPV0VSTElOSwotCi0gIERlc2NyaXB0aW9uOiAgaW5jbHVkZSBmaWxlIGZvciBjb21tdW5pY2F0aW9uIGFic3RyYWN0aW9uIGxheWVyIG9mIHRoZQotICAgICAgICAgICAgICAgIE5NVC1LZXJuZWwtTW9kdWxlCi0KLSAgTGljZW5zZToKLQotICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICAgIGFyZSBtZXQ6Ci0KLSAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNZU1RFQyBlbGVjdHJvbmljIEdtYkggbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuCi0gICAgICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgaW5mb0BzeXN0ZWMtZWxlY3Ryb25pYy5jb20uCi0KLSAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gICAgQ09QWVJJR0hUIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gICAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAgICBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICAgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICAgIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCi0gICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSAgICBTZXZlcmFiaWxpdHkgQ2xhdXNlOgotCi0gICAgICAgIElmIGEgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBvciBiZWNvbWVzIGlsbGVnYWwsIGludmFsaWQgb3IKLSAgICAgICAgdW5lbmZvcmNlYWJsZSBpbiBhbnkganVyaXNkaWN0aW9uLCB0aGF0IHNoYWxsIG5vdCBhZmZlY3Q6Ci0gICAgICAgIDEuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiB0aGF0IGp1cmlzZGljdGlvbiBvZiBhbnkgb3RoZXIKLSAgICAgICAgICAgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZTsgb3IKLSAgICAgICAgMi4gdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IGluIG90aGVyIGp1cmlzZGljdGlvbnMgb2YgdGhhdCBvcgotICAgICAgICAgICBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZS4KLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgICAgICAgICAgICAgICAkUkNTZmlsZTogRXBsTm10a0NhbC5oLHYgJAotCi0gICAgICAgICAgICAgICAgJEF1dGhvcjogRC5LcnVlZ2VyICQKLQotICAgICAgICAgICAgICAgICRSZXZpc2lvbjogMS4zICQgICREYXRlOiAyMDA4LzA0LzE3IDIxOjM2OjMyICQKLQotICAgICAgICAgICAgICAgICRTdGF0ZTogRXhwICQKLQotICAgICAgICAgICAgICAgIEJ1aWxkIEVudmlyb25tZW50OgotICAgICAgICAgICAgICAgIEtFSUwgdVZpc2lvbiAyCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIFJldmlzaW9uIEhpc3Rvcnk6Ci0KLSAgMjAwNi8wNi8xNiAtay50LjogICBzdGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgIkVwbE5tdGsuaCIKLQotI2lmbmRlZiBfRVBMTk1US0NBTF9IXwotI2RlZmluZSBfRVBMTk1US0NBTF9IXwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZW5kaWYgLy8gI2lmbmRlZiBfRVBMTk1US0NBTF9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsT2Jkay5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsT2Jkay5oCmluZGV4IGNmOWY1ODMuLjc4YzRkOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbE9iZGsuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxPYmRrLmgKQEAgLTY4LDEyOCArNjgsODggQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgotCiAjaWZuZGVmIF9FUExPQkRLX0hfCiAjZGVmaW5lIF9FUExPQkRLX0hfCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2V4dGVybiB1OCBhYkVwbE9iZFRyYXNoT2JqZWN0X2dbOF07CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBnbG9iYWwgdmFyaWFibGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1leHRlcm4gQllURSBNRU0gYWJFcGxPYmRUcmFzaE9iamVjdF9nWzhdOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfT0JESykpICE9IDApCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRJbml0KEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXwotCQkJCQkgIHRFcGxPYmRJbml0UGFyYW0gTUVNICogcEluaXRQYXJhbV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkSW5pdChFUExfTUNPX0RFQ0xfUFRSX0lOU1RBTkNFX1BUUl8gdEVwbE9iZEluaXRQYXJhbSAqcEluaXRQYXJhbV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkQWRkSW5zdGFuY2UoRVBMX01DT19ERUNMX1BUUl9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgdEVwbE9iZEluaXRQYXJhbSBNRU0gKgotCQkJCQkJIHBJbml0UGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbE9iZEFkZEluc3RhbmNlKEVQTF9NQ09fREVDTF9QVFJfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkSW5pdFBhcmFtICpwSW5pdFBhcmFtX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmREZWxldGVJbnN0YW5jZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSKTsKK3RFcGxLZXJuZWwgRXBsT2JkRGVsZXRlSW5zdGFuY2UoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFdyaXRlRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCQkJCXVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCXRFcGxPYmRTaXplIFNpemVfcCk7Cit0RXBsS2VybmVsIEVwbE9iZFdyaXRlRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgIHZvaWQgKnBTcmNEYXRhX3AsIHRFcGxPYmRTaXplIFNpemVfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFJlYWRFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJICAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCSAgICAgICB2b2lkICpwRHN0RGF0YV9wLAotCQkJCQkgICAgICAgdEVwbE9iZFNpemUgKiBwU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkUmVhZEVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgdm9pZCAqcERzdERhdGFfcCwgdEVwbE9iZFNpemUgKnBTaXplX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQwotRXBsT2JkU2V0U3RvcmVMb2FkT2JqQ2FsbGJhY2soRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8KLQkJCSAgICAgIHRFcGxPYmRTdG9yZUxvYWRPYmpDYWxsYmFjayBmcENhbGxiYWNrX3ApOwordEVwbEtlcm5lbCBFcGxPYmRTZXRTdG9yZUxvYWRPYmpDYWxsYmFjayhFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkU3RvcmVMb2FkT2JqQ2FsbGJhY2sgZnBDYWxsYmFja19wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkQWNjZXNzT2RQYXJ0KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgIHRFcGxPYmRQYXJ0IE9iZFBhcnRfcCwKLQkJCQkJCSAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCk7Cit0RXBsS2VybmVsIEVwbE9iZEFjY2Vzc09kUGFydChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCisJCQkgICAgICB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkRGVmaW5lVmFyKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICAgICB0RXBsVmFyUGFyYW0gTUVNICogcFZhclBhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxPYmREZWZpbmVWYXIoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbFZhclBhcmFtICpwVmFyUGFyYW1fcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHZvaWQgKlBVQkxJQyBFcGxPYmRHZXRPYmplY3REYXRhUHRyKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKTsKK3ZvaWQgKkVwbE9iZEdldE9iamVjdERhdGFQdHIoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCk7CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRSZWdpc3RlclVzZXJPZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgIHRFcGxPYmRFbnRyeVB0ciBwVXNlck9kX3ApOwordEVwbEtlcm5lbCBFcGxPYmRSZWdpc3RlclVzZXJPZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB0RXBsT2JkRW50cnlQdHIgcFVzZXJPZF9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdm9pZCBQVUJMSUMgRXBsT2JkSW5pdFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCSAgICB0RXBsT2JkVmFyRW50cnkgTUVNICogcFZhckVudHJ5X3AsCi0JCQkJCSAgICB0RXBsT2JkVHlwZSBUeXBlX3AsCi0JCQkJCSAgICB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApOwordm9pZCBFcGxPYmRJbml0VmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdEVwbE9iZFZhckVudHJ5ICpwVmFyRW50cnlfcCwKKwkJCXRFcGxPYmRUeXBlIFR5cGVfcCwgdEVwbE9iZFNpemUgT2JkU2l6ZV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbE9iZFNpemUgUFVCTElDIEVwbE9iZEdldERhdGFTaXplKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApOwordEVwbE9iZFNpemUgRXBsT2JkR2V0RGF0YVNpemUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB1bnNpZ25lZCBpbnQgUFVCTElDIEVwbE9iZEdldE5vZGVJZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSKTsKK3Vuc2lnbmVkIGludCBFcGxPYmRHZXROb2RlSWQoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFNldE5vZGVJZChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgICAgICB0RXBsT2JkTm9kZUlkVHlwZSBOb2RlSWRUeXBlX3ApOwordEVwbEtlcm5lbCBFcGxPYmRTZXROb2RlSWQoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICB0RXBsT2JkTm9kZUlkVHlwZSBOb2RlSWRUeXBlX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRJc051bWVyaWNhbChFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSBCT09MICogcGZFbnRyeU51bWVyaWNhbCk7Cit0RXBsS2VybmVsIEVwbE9iZElzTnVtZXJpY2FsKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsIEJPT0wgKnBmRW50cnlOdW1lcmljYWwpOwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkV3JpdGVFbnRyeUZyb21MZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkJICAgICAgdEVwbE9iZFNpemUgU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkV3JpdGVFbnRyeUZyb21MZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgIHZvaWQgKnBTcmNEYXRhX3AsCisJCQkJICB0RXBsT2JkU2l6ZSBTaXplX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmRSZWFkRW50cnlUb0xlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCQkgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApOwordEVwbEtlcm5lbCBFcGxPYmRSZWFkRW50cnlUb0xlKEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICAgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJICAgICAgIHRFcGxPYmRTaXplICpwU2l6ZV9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkR2V0QWNjZXNzVHlwZShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXwotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICB0RXBsT2JkQWNjZXNzICoKLQkJCQkJCSAgIHBBY2Nlc3NUeXBfcCk7Cit0RXBsS2VybmVsIEVwbE9iZEdldEFjY2Vzc1R5cGUoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICAgIHRFcGxPYmRBY2Nlc3MgKnBBY2Nlc3NUeXBfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZFNlYXJjaFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgICAgdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJCQkJICAgIHRFcGxPYmRWYXJFbnRyeSBNRU0gKioKLQkJCQkJCSAgICBwcFZhckVudHJ5X3ApOwordEVwbEtlcm5lbCBFcGxPYmRTZWFyY2hWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCXVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkJdEVwbE9iZFZhckVudHJ5ICoqcHBWYXJFbnRyeV9wKTsKIAogI2VuZGlmIC8vIGVuZCBvZiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX09CREspKSAhPSAwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxPYmRrQ2FsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxPYmRrQ2FsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxNzNhOTUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsT2Jka0NhbC5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQotICAoYykgU1lTVEVDIGVsZWN0cm9uaWMgR21iSCwgRC0wNzk3MyBHcmVpeiwgQXVndXN0LUJlYmVsLVN0ci4gMjkKLSAgICAgIHd3dy5zeXN0ZWMtZWxlY3Ryb25pYy5jb20KLQotICBQcm9qZWN0OiAgICAgIG9wZW5QT1dFUkxJTksKLQotICBEZXNjcmlwdGlvbjogIGluY2x1ZGUgZmlsZSBmb3IgY29tbXVuaWNhdGlvbiBhYnN0cmFjdGlvbiBsYXllcgotICAgICAgICAgICAgICAgIGZvciB0aGUgRXBsLU9iZC1LZXJuZWxzcGFjZS1Nb2R1bAotCi0gIExpY2Vuc2U6Ci0KLSAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgICBhcmUgbWV0OgotCi0gICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTWVNURUMgZWxlY3Ryb25pYyBHbWJIIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICAgICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGluZm9Ac3lzdGVjLWVsZWN0cm9uaWMuY29tLgotCi0gICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICAgIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gICAgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgotICAgIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0gICAgU2V2ZXJhYmlsaXR5IENsYXVzZToKLQotICAgICAgICBJZiBhIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgb3IgYmVjb21lcyBpbGxlZ2FsLCBpbnZhbGlkIG9yCi0gICAgICAgIHVuZW5mb3JjZWFibGUgaW4gYW55IGp1cmlzZGljdGlvbiwgdGhhdCBzaGFsbCBub3QgYWZmZWN0OgotICAgICAgICAxLiB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgaW4gdGhhdCBqdXJpc2RpY3Rpb24gb2YgYW55IG90aGVyCi0gICAgICAgICAgIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2U7IG9yCi0gICAgICAgIDIuIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBpbiBvdGhlciBqdXJpc2RpY3Rpb25zIG9mIHRoYXQgb3IKLSAgICAgICAgICAgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgICAgICAgICAgICAgJFJDU2ZpbGU6IEVwbE9iZGtDYWwuaCx2ICQKLQotICAgICAgICAgICAgICAgICRBdXRob3I6IEQuS3J1ZWdlciAkCi0KLSAgICAgICAgICAgICAgICAkUmV2aXNpb246IDEuNCAkICAkRGF0ZTogMjAwOC8wNC8xNyAyMTozNjozMiAkCi0KLSAgICAgICAgICAgICAgICAkU3RhdGU6IEV4cCAkCi0KLSAgICAgICAgICAgICAgICBCdWlsZCBFbnZpcm9ubWVudDoKLSAgICAgICAgICAgICAgICAgICAgR0NDIFYzLjQKLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgUmV2aXNpb24gSGlzdG9yeToKLQotICAyMDA2LzA2LzE5IGsudC46ICAgc3RhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlICIuLi9FcGxPYmQuaCIKLQotI2lmbmRlZiBfRVBMT0JES0NBTF9IXwotI2RlZmluZSBfRVBMT0JES0NBTF9IXwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jZW5kaWYgLy8gI2lmbmRlZiBfRVBMT0JES0NBTF9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsUGRvay5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsUGRvay5oCmluZGV4IGI1YjE4ZjQuLjI0YmZjM2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxQZG9rLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsUGRvay5oCkBAIC03NSwxOCArNzUsNiBAQAogI2luY2x1ZGUgIi4uL0VwbEV2ZW50LmgiCiAjaW5jbHVkZSAiLi4vRXBsRGxsLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIC8vIHByb2Nlc3MgZXZlbnRzIGZyb20gcXVldWUgKFBET3MvZnJhbWVzIGFuZCBTb0EgZm9yIHN5bmNocm9uaXphdGlvbikKIHRFcGxLZXJuZWwgRXBsUGRva1Byb2Nlc3ModEVwbEV2ZW50ICogcEV2ZW50X3ApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxQZG9rQ2FsLmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxQZG9rQ2FsLmgKaW5kZXggNmExODNlYi4uOGEzMWVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsUGRva0NhbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFBkb2tDYWwuaApAQCAtNzIsMTkgKzcyLDYgQEAKICNkZWZpbmUgX0VQTF9QRE9LQ0FMX0hfCiAKICNpbmNsdWRlICIuLi9FcGxJbmMuaCIKLS8vI2luY2x1ZGUgIkVwbFBkby5oIgotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB0RXBsS2VybmVsIEVwbFBkb2tDYWxBZGRJbnN0YW5jZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsVGltZXJIaWdoUmVzay5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvRXBsVGltZXJIaWdoUmVzay5oCmluZGV4IGQ1ZDA0NmQuLmEyMTI0ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFRpbWVySGlnaFJlc2suaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxUaW1lckhpZ2hSZXNrLmgKQEAgLTY4LDQyICs2OCwyOSBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiLi4vRXBsVGltZXIuaCIKLQogI2lmbmRlZiBfRVBMVElNRVJISUdIUkVTS19IXwogI2RlZmluZSBfRVBMVElNRVJISUdIUkVTS19IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICIuLi9FcGxUaW1lci5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RFcGxLZXJuZWwgRXBsVGltZXJIaWdoUmVza0luaXQodm9pZCk7CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrQWRkSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVySGlnaFJlc2tJbml0KHZvaWQpOwordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrRGVsSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVySGlnaFJlc2tBZGRJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJIaWdoUmVza1NldFRpbWVyTnModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdWxsVGltZU5zX3AsCisJCQkJICAgICAgdEVwbFRpbWVya0NhbGxiYWNrIHBmbkNhbGxiYWNrX3AsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bEFyZ3VtZW50X3AsCisJCQkJICAgICAgQk9PTCBmQ29udGludW91c2x5X3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrRGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbFRpbWVySGlnaFJlc2tNb2RpZnlUaW1lck5zKHRFcGxUaW1lckhkbCAqcFRpbWVySGRsX3AsCisJCQkJCSB1bnNpZ25lZCBsb25nIGxvbmcgdWxsVGltZU5zX3AsCisJCQkJCSB0RXBsVGltZXJrQ2FsbGJhY2sgcGZuQ2FsbGJhY2tfcCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgdWxBcmd1bWVudF9wLAorCQkJCQkgQk9PTCBmQ29udGludW91c2x5X3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrU2V0VGltZXJOcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdWxsVGltZU5zX3AsCi0JCQkJCSAgICAgdEVwbFRpbWVya0NhbGxiYWNrIHBmbkNhbGxiYWNrX3AsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyB1bEFyZ3VtZW50X3AsCi0JCQkJCSAgICAgQk9PTCBmQ29udGludW91c2x5X3ApOwotCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrTW9kaWZ5VGltZXJOcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyB1bGxUaW1lTnNfcCwKLQkJCQkJCXRFcGxUaW1lcmtDYWxsYmFjawotCQkJCQkJcGZuQ2FsbGJhY2tfcCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgdWxBcmd1bWVudF9wLAotCQkJCQkJQk9PTCBmQ29udGludW91c2x5X3ApOwotCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lckhpZ2hSZXNrRGVsZXRlVGltZXIodEVwbFRpbWVySGRsICogcFRpbWVySGRsX3ApOwordEVwbEtlcm5lbCBFcGxUaW1lckhpZ2hSZXNrRGVsZXRlVGltZXIodEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExUSU1FUkhJR0hSRVNLX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL2tlcm5lbC9FcGxUaW1lcmsuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFRpbWVyay5oCmluZGV4IDkxNjBlNzIuLjQ3YzVmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFRpbWVyay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL0VwbFRpbWVyay5oCkBAIC02OCwxOSArNjgsMTYgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIi4uL0VwbFRpbWVyLmgiCi0jaW5jbHVkZSAiLi4vdXNlci9FcGxFdmVudHUuaCIKLQogI2lmbmRlZiBfRVBMVElNRVJLX0hfCiAjZGVmaW5lIF9FUExUSU1FUktfSF8KIAorI2luY2x1ZGUgIi4uL0VwbFRpbWVyLmgiCisjaW5jbHVkZSAiLi4vdXNlci9FcGxFdmVudHUuaCIKKwogI2lmIEVQTF9USU1FUl9VU0VfVVNFUiAhPSBGQUxTRQogI2luY2x1ZGUgIi4uL3VzZXIvRXBsVGltZXJ1LmgiCiAjZW5kaWYKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpZiBFUExfVElNRVJfVVNFX1VTRVIgIT0gRkFMU0UKICNkZWZpbmUgRXBsVGltZXJrSW5pdCAgICAgICAgICAgRXBsVGltZXJ1SW5pdApAQCAtOTEsMjggKzg4LDIxIEBACiAjZGVmaW5lIEVwbFRpbWVya0RlbGV0ZVRpbWVyICAgIEVwbFRpbWVydURlbGV0ZVRpbWVyCiAjZW5kaWYKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmIEVQTF9USU1FUl9VU0VfVVNFUiA9PSBGQUxTRQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJrSW5pdCh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJrSW5pdCh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJrQWRkSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbFRpbWVya0FkZEluc3RhbmNlKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcmtEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJrRGVsSW5zdGFuY2Uodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVya1NldFRpbWVyTXModEVwbFRpbWVySGRsICogcFRpbWVySGRsX3AsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKLQkJCQkgICAgICB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCk7Cit0RXBsS2VybmVsIEVwbFRpbWVya1NldFRpbWVyTXModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAorCQkJICAgICAgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJrTW9kaWZ5VGltZXJNcyh0RXBsVGltZXJIZGwgKiBwVGltZXJIZGxfcCwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCi0JCQkJCSB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCk7Cit0RXBsS2VybmVsIEVwbFRpbWVya01vZGlmeVRpbWVyTXModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCisJCQkJICB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVya0RlbGV0ZVRpbWVyKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wKTsKK3RFcGxLZXJuZWwgRXBsVGltZXJrRGVsZXRlVGltZXIodEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCk7CiAjZW5kaWYKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExUSU1FUktfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwva2VybmVsL1ZpcnR1YWxFdGhlcm5ldC5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvVmlydHVhbEV0aGVybmV0LmgKaW5kZXggZGVmZjg3Mi4uNGE0MmNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvVmlydHVhbEV0aGVybmV0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC9rZXJuZWwvVmlydHVhbEV0aGVybmV0LmgKQEAgLTczLDIzICs3MywxMSBAQAogCiAjaW5jbHVkZSAiRXBsRGxsay5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX1ZFVEgpKSAhPSAwKQogCi10RXBsS2VybmVsIFBVQkxJQyBWRXRoQWRkSW5zdGFuY2UodEVwbERsbGtJbml0UGFyYW0gKiBwSW5pdFBhcmFtX3ApOwordEVwbEtlcm5lbCBWRXRoQWRkSW5zdGFuY2UodEVwbERsbGtJbml0UGFyYW0gKnBJbml0UGFyYW1fcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIFZFdGhEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgVkV0aERlbEluc3RhbmNlKHZvaWQpOwogCiAjZW5kaWYgLy8gI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9WRVRIKSkgIT0gMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC9wcm9jX2ZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3Byb2NfZnMuYwppbmRleCBmNDkxMDMzLi45Y2NmMDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3Byb2NfZnMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3Byb2NfZnMuYwpAQCAtODMsNyArODMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtOTUsNiArOTQsOCBAQAogI2luY2x1ZGUgImZlYy5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJwcm9jX2ZzLmgiCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTEyOSw4ICsxMzAsOCBAQAogCiAjaWZkZWYgX0RCR19UUkFDRV9QT0lOVFNfCiBhdG9taWNfdCBhYXRtRGJnVHJhY2VQb2ludF9sW0RCR19UUkFDRV9QT0lOVFNdOwotRFdPUkQgYWR3RGJnVHJhY2VWYWx1ZV9sW0RCR19UUkFDRV9WQUxVRVNdOwotRFdPUkQgZHdEYmdUcmFjZVZhbHVlT2xkX2w7Cit1MzIgYWR3RGJnVHJhY2VWYWx1ZV9sW0RCR19UUkFDRV9WQUxVRVNdOwordTMyIGR3RGJnVHJhY2VWYWx1ZU9sZF9sOwogdW5zaWduZWQgaW50IHVpRGJnVHJhY2VWYWx1ZVBvc19sOwogc3BpbmxvY2tfdCBzcGlubG9ja0RiZ1RyYWNlVmFsdWVfbDsKIHVuc2lnbmVkIGxvbmcgdWxEYlRyYWNlVmFsdWVGbGFnc19sOwpAQCAtMTQ1LDEwICsxNDYsMTAgQEAKIHN0YXRpYyBpbnQgRXBsTGluUHJvY1dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpOwogCi12b2lkIFBVQkxJQyBUZ3REYmdTaWduYWxUcmFjZVBvaW50KEJZVEUgYlRyYWNlUG9pbnROdW1iZXJfcCk7Ci12b2lkIFBVQkxJQyBUZ3REYmdQb3N0VHJhY2VWYWx1ZShEV09SRCBkd1RyYWNlVmFsdWVfcCk7Cit2b2lkIFRndERiZ1NpZ25hbFRyYWNlUG9pbnQodTggYlRyYWNlUG9pbnROdW1iZXJfcCk7Cit2b2lkIFRndERiZ1Bvc3RUcmFjZVZhbHVlKHUzMiBkd1RyYWNlVmFsdWVfcCk7CiAKLUVQTERMTEVYUE9SVCBEV09SRCBQVUJMSUMgRXBsSWRlbnR1R2V0UnVubmluZ1JlcXVlc3RzKHZvaWQpOworZXh0ZXJuIHUzMiBFcGxJZGVudHVHZXRSdW5uaW5nUmVxdWVzdHModm9pZCk7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwpAQCAtMTkxLDcgKzE5Miw3IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWZkZWYgX0RCR19UUkFDRV9QT0lOVFNfCi12b2lkIFBVQkxJQyBUZ3REYmdTaWduYWxUcmFjZVBvaW50KEJZVEUgYlRyYWNlUG9pbnROdW1iZXJfcCkKK3ZvaWQgVGd0RGJnU2lnbmFsVHJhY2VQb2ludCh1OCBiVHJhY2VQb2ludE51bWJlcl9wKQogewogCiAJaWYgKGJUcmFjZVBvaW50TnVtYmVyX3AgPj0KQEAgLTIwNyw3ICsyMDgsNyBAQAogCiB9CiAKLXZvaWQgUFVCTElDIFRndERiZ1Bvc3RUcmFjZVZhbHVlKERXT1JEIGR3VHJhY2VWYWx1ZV9wKQordm9pZCBUZ3REYmdQb3N0VHJhY2VWYWx1ZSh1MzIgZHdUcmFjZVZhbHVlX3ApCiB7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3BpbmxvY2tEYmdUcmFjZVZhbHVlX2wsIHVsRGJUcmFjZVZhbHVlRmxhZ3NfbCk7CkBAIC0yNjMsNyArMjY0LDcgQEAKIAkvLyAtLS0tIEVQTCBzdGF0ZSAtLS0tCiAJblNpemUgKz0gc25wcmludGYocGNCdWZmZXJfcCArIG5TaXplLCBuQnVmZmVyU2l6ZV9wIC0gblNpemUsCiAJCQkgICJOTVQgc3RhdGU6ICAgICAgICAgICAgICAgICAgMHglMDRYXG4iLAotCQkJICAoV09SRCkgRXBsTm10a0dldE5tdFN0YXRlKCkpOworCQkJICAodTE2KSBFcGxObXRrR2V0Tm10U3RhdGUoKSk7CiAKIAlFcGxEbGxrQ2FsR2V0U3RhdGlzdGljcygmcERsbGtDYWxTdGF0cyk7CiAKQEAgLTI3OSwxNCArMjgwLDE0IEBACiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfTU4pKSAhPSAwKQogCS8vIGZldGNoIHJ1bm5pbmcgSWRlbnRSZXF1ZXN0cwogCW5TaXplICs9IHNucHJpbnRmKHBjQnVmZmVyX3AgKyBuU2l6ZSwgbkJ1ZmZlclNpemVfcCAtIG5TaXplLAotCQkJICAicnVubmluZyBJZGVudFJlcXVlc3RzOiAgICAgIDB4JTA4bFhcbiIsCisJCQkgICJydW5uaW5nIElkZW50UmVxdWVzdHM6ICAgICAgMHglMDhYXG4iLAogCQkJICBFcGxJZGVudHVHZXRSdW5uaW5nUmVxdWVzdHMoKSk7CiAKIAkvLyBmZXRjaCBzdGF0ZSBvZiBObXRNbnUgbW9kdWxlCiAJewogCQl1bnNpZ25lZCBpbnQgdWlNYW5kYXRvcnlTbGF2ZUNvdW50OwogCQl1bnNpZ25lZCBpbnQgdWlTaWduYWxTbGF2ZUNvdW50OwotCQlXT1JEIHdGbGFnczsKKwkJdTE2IHdGbGFnczsKIAogCQlFcGxObXRNbnVHZXREaWFnbm9zdGljSW5mbygmdWlNYW5kYXRvcnlTbGF2ZUNvdW50LAogCQkJCQkgICAmdWlTaWduYWxTbGF2ZUNvdW50LCAmd0ZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxDZmdNYXUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxDZmdNYXUuaAppbmRleCBkMjVhMWU5Li40YWM3NzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsQ2ZnTWF1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbENmZ01hdS5oCkBAIC02OSwyNSArNjksMjIgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIi4uL0VwbEluYy5oIgotCiAjaWZuZGVmIF9FUExDRkdNQV9IXwogI2RlZmluZSBfRVBMQ0ZHTUFfSF8KIAorI2luY2x1ZGUgIi4uL0VwbEluYy5oIgorCiAjaWYgKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9DRkdNQSkpICE9IDApCiAKICNpbmNsdWRlICJFcGxPYmR1LmgiCiAjaW5jbHVkZSAiRXBsU2RvQ29tdS5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vZGVmaW5lIG1heCBudW1iZXIgb2YgdGltZW91dHMgZm9yIGNvbmZpZ3VyYXRpb24gb2YgMSBkZXZpY2UKICNkZWZpbmUgRVBMX0NGR01BX01BWF9USU1FT1VUICAgMwogCiAvL2NhbGxiYWNrZnVuY3Rpb24sIGNhbGxlZCBpZiBjb25maWd1cmF0aW9uIGlzIGZpbmlzaGVkCi10eXBlZGVmIHZvaWQgKFBVQkxJQyAqIHRmcEVwbENmZ01hQ2IpICh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkgICAgICAgdEVwbEtlcm5lbCBFcnJvcnN0YXRlX3ApOwordHlwZWRlZiB2b2lkICgqIHRmcEVwbENmZ01hQ2IpKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJICAgICAgIHRFcGxLZXJuZWwgRXJyb3JzdGF0ZV9wKTsKIAogLy9TdGF0ZSBmb3IgY29uZmlndWFydGlvbiBtYW5hZ2VyIFN0YXRlbWFjaGluZQogdHlwZWRlZiBlbnVtIHsKQEAgLTEzMSwzMyArMTI4LDI5IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAJdEVwbENmZ1N0YXRlIG1fQ2ZnU3RhdGU7CS8vIHN0YXRlIG9mIHRoZSBjb25maWd1cmF0aW9uIHN0YXRlIG1hc2NoaW5lCiAJdEVwbFNkb0NvbUNvbkhkbCBtX1Nkb0NvbUNvbkhkbDsJLy8gaGFuZGxlIGZvciBzZG8gY29ubmVjdGlvbgotCURXT1JEIG1fZHdMYXN0QWJvcnRDb2RlOworCXUzMiBtX2R3TGFzdEFib3J0Q29kZTsKIAl1bnNpZ25lZCBpbnQgbV91aUxhc3RJbmRleDsJLy8gbGFzdCBpbmRleCBvZiBjb25maWd1cmF0aW9uLCB0byBjb21wYWlyIHdpdGggYWN0dWFsIGluZGV4Ci0JQllURSAqbV9wYkNvbmNpc2U7CS8vIFB0ciB0byBjb25jaXNlIERDRgotCUJZVEUgKm1fcGJBY3R1YWxJbmRleDsJLy8gUHRyIHRvIGFjdHVhbCBpbmRleCBpbiB0aGUgRENGIHNlZ21lbnQKKwl1OCAqbV9wYkNvbmNpc2U7CS8vIFB0ciB0byBjb25jaXNlIERDRgorCXU4ICptX3BiQWN0dWFsSW5kZXg7CS8vIFB0ciB0byBhY3R1YWwgaW5kZXggaW4gdGhlIERDRiBzZWdtZW50CiAJdGZwRXBsQ2ZnTWFDYiBtX3BmbkNmZ01hQ2I7CS8vIFB0ciB0byBDZmdNYSBDYWxsYmFjaywgaXMgY2FsbCBpZiBjb25maWd1cmF0aW9uIGZpbmlzaGVkCiAJdEVwbEtlcm5lbCBtX0VwbEtlcm5lbEVycm9yOwkvLyBlcnJvcmNvZGUKLQlEV09SRCBtX2R3TnVtVmFsdWVDb3B5OwkvLyBudW1lcmljIHZhbHVlcyBhcmUgY29waWVkIGluIHRoaXMgdmFyaWFibGUKKwl1MzIgbV9kd051bVZhbHVlQ29weTsJLy8gbnVtZXJpYyB2YWx1ZXMgYXJlIGNvcGllZCBpbiB0aGlzIHZhcmlhYmxlCiAJdW5zaWduZWQgaW50IG1fdWlQZG9Ob2RlSWQ7CS8vIGJ1ZmZlciBmb3IgUERPIG5vZGUgaWQKLQlCWVRFIG1fYk5yT2ZNYXBwZWRPYmplY3Q7CS8vIG51bWJlciBvZiBtYXBwZWQgb2JqZWN0cworCXU4IG1fYk5yT2ZNYXBwZWRPYmplY3Q7CS8vIG51bWJlciBvZiBtYXBwZWQgb2JqZWN0cwogCXVuc2lnbmVkIGludCBtX3VpTm9kZUlkOwkvLyBFcGwgbm9kZSBhZGRyZXNzZQogCXRFcGxTZG9jU3RhdGUgbV9TZG9jU3RhdGU7CS8vIGJpdGNvZGVkIHN0YXRlIG9mIHRoZSBTRE8gdHJhbnNmZXIKIAl1bnNpZ25lZCBpbnQgbV91aUxhc3RTdWJJbmRleDsJLy8gbGFzdCBzdWJpbmRleCBvZiBjb25maWd1cmF0aW9uCiAJQk9PTCBtX2ZPbmVUcmFuZmVyT2s7CS8vIGF0bGVhc2VkIG9uZSB0cmFuc2ZlciB3YXMgc3VjY2Vzc2Z1bAotCUJZVEUgbV9iRXZlbnRGbGFnOwkvLyBmb3IgRXZlbnRzaWduYWxpbmcgdG8gdGhlIFN0YXRlIE1hc2NoaW5lCi0JRFdPUkQgbV9kd0NudE9iamVjdEluRGNmOwkvLyBudW1iZXIgb2YgT2JqZWN0cyBpbiBEQ0YKKwl1OCBtX2JFdmVudEZsYWc7CS8vIGZvciBFdmVudHNpZ25hbGluZyB0byB0aGUgU3RhdGUgTWFzY2hpbmUKKwl1MzIgbV9kd0NudE9iamVjdEluRGNmOwkvLyBudW1iZXIgb2YgT2JqZWN0cyBpbiBEQ0YKIAl0RXBsQ2ZnTWFJbmRleFR5cGUgbV9Ta2lwQ2ZnOwkvLyBUUlVFIGlmIGEgYWRzaXRpb25hbCBDb25maWd1cmF0aW9ucHJvY2VzcwogCS8vIGhhdmUgdG8gaW5zZXJ0IGUuZy4gUERPLW1hcHBpbmcKLQlXT1JEIG1fd1RpbWVPdXRDbnQ7CS8vIFRpbWVvdXQgQ291bnRlciwgYnJlYWsgY29uZmlndXJhdGlvbiBpcworCXUxNiBtX3dUaW1lT3V0Q250OwkvLyBUaW1lb3V0IENvdW50ZXIsIGJyZWFrIGNvbmZpZ3VyYXRpb24gaXMKIAkvLyBtX3dUaW1lT3V0Q250ID09IENGR01BX01BWF9USU1FT1VUCiAKIH0gdEVwbENmZ01hTm9kZTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBGdW5jdGlvbjogICAgRXBsQ2ZnTWFJbml0KCkKIC8vCiAvLyBEZXNjcmlwdGlvbjogRnVuY3Rpb24gY3JlYXRlcyBmaXJzdCBpbnN0YW5jZSBvZiBDb25maWd1cmF0aW9uIE1hbmFnZXIKQEAgLTE2Niw3ICsxNTksNyBAQAogLy8KIC8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxDZmdNYUluaXQoKTsKK3RFcGxLZXJuZWwgRXBsQ2ZnTWFJbml0KHZvaWQpOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRnVuY3Rpb246ICAgIEVwbENmZ01hQWRkSW5zdGFuY2UoKQpAQCAtMTc3LDcgKzE3MCw3IEBACiAvLwogLy8gUmV0dXJuczogICAgIHRFcGxLZXJuZWwgICAgICAgICAgICAgID0gZXJyb3IgY29kZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbENmZ01hQWRkSW5zdGFuY2UoKTsKK3RFcGxLZXJuZWwgRXBsQ2ZnTWFBZGRJbnN0YW5jZSh2b2lkKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEZ1bmN0aW9uOiAgICBFcGxDZmdNYURlbEluc3RhbmNlKCkKQEAgLTE4OCw3ICsxODEsNyBAQAogLy8KIC8vIFJldHVybnM6ICAgICB0RXBsS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxDZmdNYURlbEluc3RhbmNlKCk7Cit0RXBsS2VybmVsIHBsQ2ZnTWFEZWxJbnN0YW5jZSh2b2lkKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEZ1bmN0aW9uOiAgICBFcGxDZmdNYVN0YXJ0Q29uZmlnKCkKQEAgLTE5OSwxNiArMTkyLDE2IEBACiAvLyBQYXJhbWV0ZXJzOiAgdWlOb2RlSWRfcCAgICAgICAgICAgICAgPSBOb2RlSWQgb2YgdGhlIG5vZGUgdG8gY29uZmlndXJlCiAvLyAgICAgICAgICAgICAgcGJDb25jaXNlX3AgICAgICAgICAgICAgPSBwb2ludGVyIHRvIERDRgogLy8gICAgICAgICAgICAgIGZwQ2ZnTWFDYl9wICAgICAgICAgICAgID0gcG9pbnRlciB0byBjYWxsYmFjayBmdW5jdGlvbiAoc2hvdWxkIG5vdCBiZSBOVUxMKQotLy8gICAgICAgICAgICAgIFNpemVPZkNvbmNpc2VfcCAgICAgICAgID0gc2l6ZSBvZiBEQ0YgaW4gQllURSAtPiBmb3IgZnV0dXJlIHVzZQorLy8gICAgICAgICAgICAgIFNpemVPZkNvbmNpc2VfcCAgICAgICAgID0gc2l6ZSBvZiBEQ0YgaW4gdTggLT4gZm9yIGZ1dHVyZSB1c2UKIC8vICAgICAgICAgICAgICBEY2ZUeXBlX3AgICAgICAgICAgICAgICA9IHR5cGUgb2YgdGhlIERDRgogLy8KIC8vIFJldHVybnM6ICAgICB0Q29wS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxDZmdNYVN0YXJ0Q29uZmlnKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCSAgICAgIEJZVEUgKiBwYkNvbmNpc2VfcCwKLQkJCQkgICAgICB0ZnBFcGxDZmdNYUNiIGZwQ2ZnTWFDYl9wLAotCQkJCSAgICAgIHRFcGxPYmRTaXplIFNpemVPZkNvbmNpc2VfcCwKLQkJCQkgICAgICB0RXBsQ2ZnTWFEY2ZUeXAgRGNmVHlwZV9wKTsKK3RFcGxLZXJuZWwgRXBsQ2ZnTWFTdGFydENvbmZpZyh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICAgICB1OCAqIHBiQ29uY2lzZV9wLAorCQkJICAgICAgIHRmcEVwbENmZ01hQ2IgZnBDZmdNYUNiX3AsCisJCQkgICAgICAgdEVwbE9iZFNpemUgU2l6ZU9mQ29uY2lzZV9wLAorCQkJICAgICAgIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRnVuY3Rpb246ICAgIENmZ01hU3RhcnRDb25maWd1cmF0aW9uTm9kZSgpCkBAIC0yMjIsOSArMjE1LDkgQEAKIC8vCiAvLyBSZXR1cm5zOiAgICAgdENvcEtlcm5lbCAgICAgICAgICAgICAgPSBlcnJvciBjb2RlCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQ2ZnTWFTdGFydENvbmZpZ05vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgdGZwRXBsQ2ZnTWFDYiBmcENmZ01hQ2JfcCwKLQkJCQkJICB0RXBsQ2ZnTWFEY2ZUeXAgRGNmVHlwZV9wKTsKK3RFcGxLZXJuZWwgRXBsQ2ZnTWFTdGFydENvbmZpZ05vZGUodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJICAgdGZwRXBsQ2ZnTWFDYiBmcENmZ01hQ2JfcCwKKwkJCQkgICB0RXBsQ2ZnTWFEY2ZUeXAgRGNmVHlwZV9wKTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIEZ1bmN0aW9uOiAgICBFcGxDZmdNYVN0YXJ0Q29uZmlnTm9kZURjZigpCkBAIC0yMzUsMTYgKzIyOCwxNiBAQAogLy8gUGFyYW1ldGVyczogIHVpTm9kZUlkX3AgICAgICAgICAgICAgID0gTm9kZUlkIG9mIHRoZSBub2RlIHRvIGNvbmZpZ3VyZQogLy8gICAgICAgICAgICAgIHBiQ29uY2lzZV9wICAgICAgICAgICAgID0gcG9pbnRlciB0byBEQ0YKIC8vICAgICAgICAgICAgICBmcENmZ01hQ2JfcCAgICAgICAgICAgICA9IHBvaW50ZXIgdG8gY2FsbGJhY2sgZnVuY3Rpb24gKHNob3VsZCBub3QgYmUgTlVMTCkKLS8vICAgICAgICAgICAgICBTaXplT2ZDb25jaXNlX3AgICAgICAgICA9IHNpemUgb2YgRENGIGluIEJZVEUgLT4gZm9yIGZ1dHVyZSB1c2UKKy8vICAgICAgICAgICAgICBTaXplT2ZDb25jaXNlX3AgICAgICAgICA9IHNpemUgb2YgRENGIGluIHU4IC0+IGZvciBmdXR1cmUgdXNlCiAvLyAgICAgICAgICAgICAgRGNmVHlwZV9wICAgICAgICAgICAgICAgPSB0eXBlIG9mIHRoZSBEQ0YKIC8vCiAvLyBSZXR1cm5zOiAgICAgdENvcEtlcm5lbCAgICAgICAgICAgICAgPSBlcnJvciBjb2RlCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsQ2ZnTWFTdGFydENvbmZpZ05vZGVEY2YodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgICAgQllURSAqIHBiQ29uY2lzZV9wLAotCQkJCQkgICAgIHRmcEVwbENmZ01hQ2IgZnBDZmdNYUNiX3AsCi0JCQkJCSAgICAgdEVwbE9iZFNpemUgU2l6ZU9mQ29uY2lzZV9wLAotCQkJCQkgICAgIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwordEVwbEtlcm5lbCBFcGxDZmdNYVN0YXJ0Q29uZmlnTm9kZURjZih1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkgICAgICB1OCAqIHBiQ29uY2lzZV9wLAorCQkJCSAgICAgIHRmcEVwbENmZ01hQ2IgZnBDZmdNYUNiX3AsCisJCQkJICAgICAgdEVwbE9iZFNpemUgU2l6ZU9mQ29uY2lzZV9wLAorCQkJCSAgICAgIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRnVuY3Rpb246ICAgIEVwbENmZ01hTGlua0RjZigpCkBAIC0yNTMsMTUgKzI0NiwxNSBAQAogLy8KIC8vIFBhcmFtZXRlcnM6ICB1aU5vZGVJZF9wICAgICAgICAgICAgICA9IE5vZGVJZCBvZiB0aGUgbm9kZSB0byBjb25maWd1cmUKIC8vICAgICAgICAgICAgICBwYkNvbmNpc2VfcCAgICAgICAgICAgICA9IHBvaW50ZXIgdG8gRENGCi0vLyAgICAgICAgICAgICAgU2l6ZU9mQ29uY2lzZV9wICAgICAgICA9IHNpemUgb2YgRENGIGluIEJZVEUgLT4gZm9yIGZ1dHVyZSB1c2UKKy8vICAgICAgICAgICAgICBTaXplT2ZDb25jaXNlX3AgICAgICAgID0gc2l6ZSBvZiBEQ0YgaW4gdTggLT4gZm9yIGZ1dHVyZSB1c2UKIC8vICAgICAgICAgICAgICBEY2ZUeXBlX3AgICAgICAgICAgICAgICA9IHR5cGUgb2YgdGhlIERDRgogLy8KIC8vIFJldHVybnM6ICAgICB0Q29wS2VybmVsICAgICAgICAgICAgICA9IGVycm9yIGNvZGUKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxDZmdNYUxpbmtEY2YodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICBCWVRFICogcGJDb25jaXNlX3AsCi0JCQkJICB0RXBsT2JkU2l6ZSBTaXplT2ZDb25jaXNlX3AsCi0JCQkJICB0RXBsQ2ZnTWFEY2ZUeXAgRGNmVHlwZV9wKTsKK3RFcGxLZXJuZWwgRXBsQ2ZnTWFMaW5rRGNmKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJICAgdTggKiBwYkNvbmNpc2VfcCwKKwkJCSAgIHRFcGxPYmRTaXplIFNpemVPZkNvbmNpc2VfcCwKKwkJCSAgIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRnVuY3Rpb246ICAgIEVwbENmZ01hQ2hlY2tEY2YoKQpAQCAtMjc0LDggKzI2Nyw3IEBACiAvLwogLy8gUmV0dXJuczogICAgIHRDb3BLZXJuZWwgICAgICAgICAgICAgID0gZXJyb3IgY29kZQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbENmZ01hQ2hlY2tEY2YodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJICAgdEVwbENmZ01hRGNmVHlwIERjZlR5cGVfcCk7Cit0RXBsS2VybmVsIEVwbENmZ01hQ2hlY2tEY2YodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHRFcGxDZmdNYURjZlR5cCBEY2ZUeXBlX3ApOwogCiAjZW5kaWYgLy8gI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfQ0ZHTUEpKSAhPSAwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRGxsdS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbERsbHUuaAppbmRleCAzNmY4YmI3Li44OTBmODM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRGxsdS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxEbGx1LmgKQEAgLTczLDE5ICs3Myw3IEBACiAKICNpbmNsdWRlICIuLi9FcGxEbGwuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDICogdEVwbERsbHVDYkFzbmQpICh0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsRGxsdUNiQXNuZCkgKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOwogCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX0RMTFUpKSAhPSAwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRGxsdUNhbC5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbERsbHVDYWwuaAppbmRleCBiMWRjZDA2Li5iYzkxMjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRGxsdUNhbC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxEbGx1Q2FsLmgKQEAgLTc0LDE5ICs3NCw4IEBACiAjaW5jbHVkZSAiLi4vRXBsRGxsLmgiCiAjaW5jbHVkZSAiLi4vRXBsRXZlbnQuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi10eXBlZGVmIHRFcGxLZXJuZWwoUFVCTElDICogdEVwbERsbHVDYkFzbmQpICh0RXBsRnJhbWVJbmZvICogcEZyYW1lSW5mb19wKTsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsRGxsdUNiQXNuZCkgKHRFcGxGcmFtZUluZm8gKiBwRnJhbWVJbmZvX3ApOwogCiB0RXBsS2VybmVsIEVwbERsbHVDYWxBZGRJbnN0YW5jZSh2b2lkKTsKIApAQCAtMTEwLDcgKzk5LDcgQEAKIHRFcGxLZXJuZWwgRXBsRGxsdUNhbFNvZnREZWxldGVOb2RlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wKTsKIAogdEVwbEtlcm5lbCBFcGxEbGx1Q2FsSXNzdWVSZXF1ZXN0KHRFcGxEbGxSZXFTZXJ2aWNlSWQgU2VydmljZV9wLAotCQkJCSAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIEJZVEUgYlNvYUZsYWcxX3ApOworCQkJCSAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsIHU4IGJTb2FGbGFnMV9wKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxFdmVudHUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxFdmVudHUuaAppbmRleCAzMjJjZmZkLi5hYjg1MjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsRXZlbnR1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbEV2ZW50dS5oCkBAIC03MywzNiArNzMsMjQgQEAKIAogI2luY2x1ZGUgIi4uL0VwbEV2ZW50LmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBpbml0IGZ1bmN0aW9uCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudHVJbml0KHRFcGxQcm9jZXNzRXZlbnRDYiBwZm5BcGlQcm9jZXNzRXZlbnRDYl9wKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnR1SW5pdCh0RXBsUHJvY2Vzc0V2ZW50Q2IgcGZuQXBpUHJvY2Vzc0V2ZW50Q2JfcCk7CiAKIC8vIGFkZCBpbnN0YW5jZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnR1QWRkSW5zdGFuY2UodEVwbFByb2Nlc3NFdmVudENiCi0JCQkJICAgICAgIHBmbkFwaVByb2Nlc3NFdmVudENiX3ApOwordEVwbEtlcm5lbCBFcGxFdmVudHVBZGRJbnN0YW5jZSh0RXBsUHJvY2Vzc0V2ZW50Q2IgcGZuQXBpUHJvY2Vzc0V2ZW50Q2JfcCk7CiAKIC8vIGRlbGV0ZSBpbnN0YW5jZQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsRXZlbnR1RGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbEV2ZW50dURlbEluc3RhbmNlKHZvaWQpOwogCiAvLyBUYXNrIHRoYXQgZGlzcGF0Y2hlcyBldmVudHMgaW4gdXNlcnNwYWNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudHVQcm9jZXNzKHRFcGxFdmVudCAqIHBFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnR1UHJvY2Vzcyh0RXBsRXZlbnQgKiBwRXZlbnRfcCk7CiAKIC8vIHBvc3QgZXZlbnRzIGZyb20gdXNlcnNwYWNlCi10RXBsS2VybmVsIFBVQkxJQyBFcGxFdmVudHVQb3N0KHRFcGxFdmVudCAqIHBFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnR1UG9zdCh0RXBsRXZlbnQgKiBwRXZlbnRfcCk7CiAKIC8vIHBvc3QgZXJyb3JldmVudHMgZnJvbSB1c2Vyc3BhY2UKLXRFcGxLZXJuZWwgUFVCTElDIEVwbEV2ZW50dVBvc3RFcnJvcih0RXBsRXZlbnRTb3VyY2UgRXZlbnRTb3VyY2VfcCwKLQkJCQkgICAgIHRFcGxLZXJuZWwgRXBsRXJyb3JfcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUFyZ1NpemVfcCwgdm9pZCAqcEFyZ19wKTsKK3RFcGxLZXJuZWwgRXBsRXZlbnR1UG9zdEVycm9yKHRFcGxFdmVudFNvdXJjZSBFdmVudFNvdXJjZV9wLAorCQkJICAgICAgdEVwbEtlcm5lbCBFcGxFcnJvcl9wLAorCQkJICAgICAgdW5zaWduZWQgaW50IHVpQXJnU2l6ZV9wLCB2b2lkICpwQXJnX3ApOwogCiAjZW5kaWYgLy8gI2lmbmRlZiBfRVBMX0VWRU5UVV9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbElkZW50dS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbElkZW50dS5oCmluZGV4IGU3MzAyMTAuLjA1N2M5MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxJZGVudHUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsSWRlbnR1LmgKQEAgLTY4LDQxICs2OCwyNyBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiLi4vRXBsRGxsLmgiCi0KICNpZm5kZWYgX0VQTElERU5UVV9IXwogI2RlZmluZSBfRVBMSURFTlRVX0hfCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIi4uL0VwbERsbC5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqIHRFcGxJZGVudHVDYlJlc3BvbnNlKSAodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsSWRlbnR1Q2JSZXNwb25zZSkgKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAogCQkJCQkJICAgdEVwbElkZW50UmVzcG9uc2UgKgogCQkJCQkJICAgcElkZW50UmVzcG9uc2VfcCk7CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordEVwbEtlcm5lbCBFcGxJZGVudHVJbml0KHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVJbml0KHZvaWQpOwordEVwbEtlcm5lbCBFcGxJZGVudHVBZGRJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsSWRlbnR1QWRkSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbElkZW50dURlbEluc3RhbmNlKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsSWRlbnR1UmVzZXQodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dVJlc2V0KHZvaWQpOwordEVwbEtlcm5lbCBFcGxJZGVudHVHZXRJZGVudFJlc3BvbnNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJCSAgICAgdEVwbElkZW50UmVzcG9uc2UgKipwcElkZW50UmVzcG9uc2VfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbElkZW50dUdldElkZW50UmVzcG9uc2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCSAgICB0RXBsSWRlbnRSZXNwb25zZSAqKgotCQkJCQkgICAgcHBJZGVudFJlc3BvbnNlX3ApOwotCi10RXBsS2VybmVsIFBVQkxJQyBFcGxJZGVudHVSZXF1ZXN0SWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCXRFcGxJZGVudHVDYlJlc3BvbnNlCi0JCQkJCQlwZm5DYlJlc3BvbnNlX3ApOwordEVwbEtlcm5lbCBFcGxJZGVudHVSZXF1ZXN0SWRlbnRSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJIHRFcGxJZGVudHVDYlJlc3BvbnNlIHBmbkNiUmVzcG9uc2VfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExJREVOVFVfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxMZWR1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTGVkdS5oCmluZGV4IDc4ZTcwZDAuLmNhOWViNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxMZWR1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbExlZHUuaApAQCAtNjgsNDEgKzY4LDI3IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZm5kZWYgX0VQTExFRFVfSF8KKyNkZWZpbmUgX0VQTExFRFVfSF8KKwogI2luY2x1ZGUgIi4uL0VwbExlZC5oIgogI2luY2x1ZGUgIi4uL0VwbE5tdC5oIgogI2luY2x1ZGUgIkVwbEV2ZW50dS5oIgogCi0jaWZuZGVmIF9FUExMRURVX0hfCi0jZGVmaW5lIF9FUExMRURVX0hfCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqIHRFcGxMZWR1U3RhdGVDaGFuZ2VDYWxsYmFjaykgKHRFcGxMZWRUeXBlIExlZFR5cGVfcCwKK3R5cGVkZWYgdEVwbEtlcm5lbCgqIHRFcGxMZWR1U3RhdGVDaGFuZ2VDYWxsYmFjaykgKHRFcGxMZWRUeXBlIExlZFR5cGVfcCwKIAkJCQkJCQkgIEJPT0wgZk9uX3ApOwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTEVEVSkpICE9IDApCiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbExlZHVJbml0KHRFcGxMZWR1U3RhdGVDaGFuZ2VDYWxsYmFjayBwZm5DYlN0YXRlQ2hhbmdlX3ApOwordEVwbEtlcm5lbCBFcGxMZWR1SW5pdCh0RXBsTGVkdVN0YXRlQ2hhbmdlQ2FsbGJhY2sgcGZuQ2JTdGF0ZUNoYW5nZV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsTGVkdUFkZEluc3RhbmNlKHRFcGxMZWR1U3RhdGVDaGFuZ2VDYWxsYmFjawotCQkJCSAgICAgcGZuQ2JTdGF0ZUNoYW5nZV9wKTsKK3RFcGxLZXJuZWwgRXBsTGVkdUFkZEluc3RhbmNlKHRFcGxMZWR1U3RhdGVDaGFuZ2VDYWxsYmFjayBwZm5DYlN0YXRlQ2hhbmdlX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxMZWR1RGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbExlZHVEZWxJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsTGVkdUNiTm10U3RhdGVDaGFuZ2UodEVwbEV2ZW50Tm10U3RhdGVDaGFuZ2UKLQkJCQkJICBObXRTdGF0ZUNoYW5nZV9wKTsKK3RFcGxLZXJuZWwgRXBsTGVkdUNiTm10U3RhdGVDaGFuZ2UodEVwbEV2ZW50Tm10U3RhdGVDaGFuZ2UgTm10U3RhdGVDaGFuZ2VfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbExlZHVQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICogcEVwbEV2ZW50X3ApOwordEVwbEtlcm5lbCBFcGxMZWR1UHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqIHBFcGxFdmVudF9wKTsKIAogI2VuZGlmIC8vICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX0xFRFUpKSAhPSAwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10Q251LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10Q251LmgKaW5kZXggZTUwODA1NS4uN2QyMzAyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdENudS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXRDbnUuaApAQCAtNjgsNDAgKzY4LDI0IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZm5kZWYgX0VQTE5NVENOVV9IXworI2RlZmluZSBfRVBMTk1UQ05VX0hfCisKICNpbmNsdWRlICJFcGxObXR1LmgiCiAjaW5jbHVkZSAiLi4vRXBsRGxsLmgiCiAjaW5jbHVkZSAiLi4vRXBsRnJhbWUuaCIKIAotI2lmbmRlZiBfRVBMTk1UQ05VX0hfCi0jZGVmaW5lIF9FUExOTVRDTlVfSF8KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRfQ04pKSAhPSAwKQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10Q251SW5pdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdENudUluaXQodW5zaWduZWQgaW50IHVpTm9kZUlkX3ApOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10Q251QWRkSW5zdGFuY2UodW5zaWduZWQgaW50IHVpTm9kZUlkX3ApOwordEVwbEtlcm5lbCBFcGxObXRDbnVBZGRJbnN0YW5jZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRDbnVEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsTm10Q251RGVsSW5zdGFuY2Uodm9pZCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXRDbnVTZW5kTm10UmVxdWVzdCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCSAgICAgICB0RXBsTm10Q29tbWFuZAotCQkJCQkJICAgICAgIE5tdENvbW1hbmRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdENudVNlbmRObXRSZXF1ZXN0KHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLCB0RXBsTm10Q29tbWFuZCBObXRDb21tYW5kX3ApOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMKLUVwbE5tdENudVJlZ2lzdGVyQ2hlY2tFdmVudENiKHRFcGxObXR1Q2hlY2tFdmVudENhbGxiYWNrCi0JCQkgICAgICBwZm5FcGxObXRDaGVja0V2ZW50Q2JfcCk7Cit0RXBsS2VybmVsIEVwbE5tdENudVJlZ2lzdGVyQ2hlY2tFdmVudENiKHRFcGxObXR1Q2hlY2tFdmVudENhbGxiYWNrIHBmbkVwbE5tdENoZWNrRXZlbnRDYl9wKTsKIAogI2VuZGlmIC8vICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTk1UX0NOKSkgIT0gMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdE1udS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdE1udS5oCmluZGV4IGM1NGVmZWIuLjVlNWUwY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXRNbnUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10TW51LmgKQEAgLTY4LDM0ICs2OCwyMCBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSAiRXBsTm10dS5oIgotCiAjaWZuZGVmIF9FUExOTVRNTlVfSF8KICNkZWZpbmUgX0VQTE5NVE1OVV9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICJFcGxObXR1LmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordHlwZWRlZiB0RXBsS2VybmVsKCogdEVwbE5tdE1udUNiTm9kZUV2ZW50KSAodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkJCSAgICAgdEVwbE5tdE5vZGVFdmVudCBOb2RlRXZlbnRfcCwKKwkJCQkJICAgICB0RXBsTm10U3RhdGUgTm10U3RhdGVfcCwKKwkJCQkJICAgICB1MTYgd0Vycm9yQ29kZV9wLAorCQkJCQkgICAgIEJPT0wgZk1hbmRhdG9yeV9wKTsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqIHRFcGxObXRNbnVDYk5vZGVFdmVudCkgKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICAgIHRFcGxObXROb2RlRXZlbnQKLQkJCQkJCSAgICBOb2RlRXZlbnRfcCwKLQkJCQkJCSAgICB0RXBsTm10U3RhdGUgTm10U3RhdGVfcCwKLQkJCQkJCSAgICBXT1JEIHdFcnJvckNvZGVfcCwKLQkJCQkJCSAgICBCT09MIGZNYW5kYXRvcnlfcCk7Ci0KLXR5cGVkZWYgdEVwbEtlcm5lbChQVUJMSUMgKgotCQkgICB0RXBsTm10TW51Q2JCb290RXZlbnQpICh0RXBsTm10Qm9vdEV2ZW50IEJvb3RFdmVudF9wLAotCQkJCQkgICB0RXBsTm10U3RhdGUgTm10U3RhdGVfcCwKLQkJCQkJICAgV09SRCB3RXJyb3JDb2RlX3ApOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgdEVwbEtlcm5lbCgqIHRFcGxObXRNbnVDYkJvb3RFdmVudCkgKHRFcGxObXRCb290RXZlbnQgQm9vdEV2ZW50X3AsCisJCQkJCSAgICAgdEVwbE5tdFN0YXRlIE5tdFN0YXRlX3AsCisJCQkJCSAgICAgdTE2IHdFcnJvckNvZGVfcCk7CiAKICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfTk1UX01OKSkgIT0gMCkKIApAQCAtMTA3LDcgKzkzLDcgQEAKIAogdEVwbEtlcm5lbCBFcGxObXRNbnVEZWxJbnN0YW5jZSh2b2lkKTsKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKiBwRXZlbnRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdE1udVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKnBFdmVudF9wKTsKIAogdEVwbEtlcm5lbCBFcGxObXRNbnVTZW5kTm10Q29tbWFuZCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKIAkJCQkgICB0RXBsTm10Q29tbWFuZCBObXRDb21tYW5kX3ApOwpAQCAtMTE1LDE2ICsxMDEsMTYgQEAKIHRFcGxLZXJuZWwgRXBsTm10TW51VHJpZ2dlclN0YXRlQ2hhbmdlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAogCQkJCSAgICAgICB0RXBsTm10Tm9kZUNvbW1hbmQgTm9kZUNvbW1hbmRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiTm10U3RhdGVDaGFuZ2UodEVwbEV2ZW50Tm10U3RhdGVDaGFuZ2UKK3RFcGxLZXJuZWwgRXBsTm10TW51Q2JObXRTdGF0ZUNoYW5nZSh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZQogCQkJCQkgICAgTm10U3RhdGVDaGFuZ2VfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUNiQ2hlY2tFdmVudCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdE1udUNiQ2hlY2tFdmVudCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdE1udUdldERpYWdub3N0aWNJbmZvKHVuc2lnbmVkIGludAordEVwbEtlcm5lbCBFcGxObXRNbnVHZXREaWFnbm9zdGljSW5mbyh1bnNpZ25lZCBpbnQKIAkJCQkJICAgICAqcHVpTWFuZGF0b3J5U2xhdmVDb3VudF9wLAogCQkJCQkgICAgIHVuc2lnbmVkIGludAogCQkJCQkgICAgICpwdWlTaWduYWxTbGF2ZUNvdW50X3AsCi0JCQkJCSAgICAgV09SRCAqIHB3RmxhZ3NfcCk7CisJCQkJCSAgICAgdTE2ICogcHdGbGFnc19wKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXR1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10dS5oCmluZGV4IDVhNTZjNTguLmMxZmNhODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXR1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdHUuaApAQCAtNjgsMTkgKzY4LDEyIEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxObXQuaCIKLSNpbmNsdWRlICJFcGxFdmVudHUuaCIKLQogI2lmbmRlZiBfRVBMTk1UVV9IXwogI2RlZmluZSBfRVBMTk1UVV9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICIuLi9FcGxObXQuaCIKKyNpbmNsdWRlICJFcGxFdmVudHUuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBubXQgY29tbWFuZHMKIHR5cGVkZWYgZW51bSB7CiAJLy8gcmVxdWVzdGFibGUgQVNuZCBTZXJ2aWNlSWRzICAgIDB4MDEuLjB4MUYKQEAgLTEyMSwzNCArMTE0LDI1IEBACiAJa0VwbE5tdENtZEludmFsaWRTZXJ2aWNlID0gMHhGRgogfSB0RXBsTm10Q29tbWFuZDsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqCi0JCSAgIHRFcGxObXR1U3RhdGVDaGFuZ2VDYWxsYmFjaykgKHRFcGxFdmVudE5tdFN0YXRlQ2hhbmdlCi0JCQkJCQkgTm10U3RhdGVDaGFuZ2VfcCk7Cit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsTm10dVN0YXRlQ2hhbmdlQ2FsbGJhY2spICh0RXBsRXZlbnRObXRTdGF0ZUNoYW5nZSBObXRTdGF0ZUNoYW5nZV9wKTsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqCi0JCSAgIHRFcGxObXR1Q2hlY2tFdmVudENhbGxiYWNrKSAodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3R5cGVkZWYgdEVwbEtlcm5lbCgqIHRFcGxObXR1Q2hlY2tFdmVudENhbGxiYWNrKSAodEVwbE5tdEV2ZW50IE5tdEV2ZW50X3ApOwogCiAjaWYoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX05NVFUpKSAhPSAwKQogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10dUluaXQodm9pZCk7Cit0RXBsS2VybmVsIEVwbE5tdHVJbml0KHZvaWQpOwogCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsTm10dUFkZEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxObXR1QWRkSW5zdGFuY2Uodm9pZCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1RGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbE5tdHVEZWxJbnN0YW5jZSh2b2lkKTsKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE5tdHVObXRFdmVudCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCk7Cit0RXBsS2VybmVsIEVwbE5tdHVObXRFdmVudCh0RXBsTm10RXZlbnQgTm10RXZlbnRfcCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsTm10U3RhdGUgUFVCTElDIEVwbE5tdHVHZXRObXRTdGF0ZSh2b2lkKTsKK3RFcGxObXRTdGF0ZSBFcGxObXR1R2V0Tm10U3RhdGUodm9pZCk7CiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxObXR1UHJvY2Vzc0V2ZW50KHRFcGxFdmVudCAqIHBFcGxFdmVudF9wKTsKK3RFcGxLZXJuZWwgRXBsTm10dVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKnBFcGxFdmVudF9wKTsKIAotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDCi1FcGxObXR1UmVnaXN0ZXJTdGF0ZUNoYW5nZUNiKHRFcGxObXR1U3RhdGVDaGFuZ2VDYWxsYmFjawotCQkJICAgICBwZm5FcGxObXRTdGF0ZUNoYW5nZUNiX3ApOwordEVwbEtlcm5lbCBFcGxObXR1UmVnaXN0ZXJTdGF0ZUNoYW5nZUNiKHRFcGxObXR1U3RhdGVDaGFuZ2VDYWxsYmFjayBwZm5FcGxObXRTdGF0ZUNoYW5nZUNiX3ApOwogCiAjZW5kaWYgLy8gI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9OTVRVKSkgIT0gMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdHVDYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxObXR1Q2FsLmgKaW5kZXggYzg4MTU4Mi4uYjk4NTAzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE5tdHVDYWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsTm10dUNhbC5oCkBAIC02OSwyMyArNjksMTIgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIkVwbE5tdHUuaCIKLSNpbmNsdWRlICIuLi9rZXJuZWwvRXBsTm10ay5oIgotCiAjaWZuZGVmIF9FUExOTVRVQ0FMX0hfCiAjZGVmaW5lIF9FUExOTVRVQ0FMX0hfCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIkVwbE5tdHUuaCIKKyNpbmNsdWRlICIuLi9rZXJuZWwvRXBsTm10ay5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbE5tdFN0YXRlIFBVQkxJQyBFcGxObXRrQ2FsR2V0Tm10U3RhdGUodm9pZCk7Cit0RXBsTm10U3RhdGUgRXBsTm10a0NhbEdldE5tdFN0YXRlKHZvaWQpOwogCiAjZW5kaWYgLy8gI2lmbmRlZiBfRVBMTk1UVUNBTF9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE9iZHUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxPYmR1LmgKaW5kZXggYmMxZTE3My4uMDg2MzcxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE9iZHUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsT2JkdS5oCkBAIC02OCwyMiArNjgsMTAgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgotCiAjaWZuZGVmIF9FUExPQkRVX0hfCiAjZGVmaW5lIF9FUExPQkRVX0hfCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAiLi4vRXBsT2JkLmgiCiAKICNpZiAoKChFUExfTU9EVUxFX0lOVEVHUkFUSU9OKSAmIChFUExfTU9EVUxFX09CRFUpKSAhPSAwKQogCkBAIC05MSw2OCArNzksNTcgQEAKICNlcnJvciAiRVBMIE9CRHUgbW9kdWxlIGVuYWJsZWQsIGJ1dCBPQkRfVVNFX0tFUk5FTCA9PSBUUlVFIgogI2VuZGlmCiAKLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1V3JpdGVFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCSB0RXBsT2JkU2l6ZSBTaXplX3ApOwordEVwbEtlcm5lbCBFcGxPYmR1V3JpdGVFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLCB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJICAgICB2b2lkICpwU3JjRGF0YV9wLCB0RXBsT2JkU2l6ZSBTaXplX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1UmVhZEVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQl1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAotCQkJCQkJdm9pZCAqcERzdERhdGFfcCwKLQkJCQkJCXRFcGxPYmRTaXplICogcFNpemVfcCk7Cit0RXBsS2VybmVsIEVwbE9iZHVSZWFkRW50cnkodW5zaWduZWQgaW50IHVpSW5kZXhfcCwgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICB2b2lkICpwRHN0RGF0YV9wLCB0RXBsT2JkU2l6ZSAqcFNpemVfcCk7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVBY2Nlc3NPZFBhcnQodEVwbE9iZFBhcnQgT2JkUGFydF9wLAotCQkJCQkJICAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCk7Cit0RXBsS2VybmVsIEVwbE9iZHVBY2Nlc3NPZFBhcnQodEVwbE9iZFBhcnQgT2JkUGFydF9wLCB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdURlZmluZVZhcih0RXBsVmFyUGFyYW0gTUVNICogcFZhclBhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxPYmR1RGVmaW5lVmFyKHRFcGxWYXJQYXJhbSAqcFZhclBhcmFtX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB2b2lkICpQVUJMSUMgRXBsT2JkdUdldE9iamVjdERhdGFQdHIodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCk7Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1UmVnaXN0ZXJVc2VyT2QodEVwbE9iZEVudHJ5UHRyIHBVc2VyT2RfcCk7Cit2b2lkICpFcGxPYmR1R2V0T2JqZWN0RGF0YVB0cih1bnNpZ25lZCBpbnQgdWlJbmRleF9wLCB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdm9pZCBQVUJMSUMgRXBsT2JkdUluaXRWYXJFbnRyeSh0RXBsT2JkVmFyRW50cnkgTUVNICogcFZhckVudHJ5X3AsCi0JCQkJCSAgICAgQllURSBiVHlwZV9wLAotCQkJCQkgICAgIHRFcGxPYmRTaXplIE9iZFNpemVfcCk7Cit0RXBsS2VybmVsIEVwbE9iZHVSZWdpc3RlclVzZXJPZCh0RXBsT2JkRW50cnlQdHIgcFVzZXJPZF9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbE9iZFNpemUgUFVCTElDIEVwbE9iZHVHZXREYXRhU2l6ZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCk7Cit2b2lkIEVwbE9iZHVJbml0VmFyRW50cnkodEVwbE9iZFZhckVudHJ5ICpwVmFyRW50cnlfcCwgdTggYlR5cGVfcCwKKwkJCSB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB1bnNpZ25lZCBpbnQgUFVCTElDIEVwbE9iZHVHZXROb2RlSWQodm9pZCk7Cit0RXBsT2JkU2l6ZSBFcGxPYmR1R2V0RGF0YVNpemUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVNldE5vZGVJZCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkJCXRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCk7Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1R2V0QWNjZXNzVHlwZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgdEVwbE9iZEFjY2VzcyAqCi0JCQkJCQkgICAgcEFjY2Vzc1R5cF9wKTsKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVSZWFkRW50cnlUb0xlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgICB2b2lkICpwRHN0RGF0YV9wLAotCQkJCQkJICAgIHRFcGxPYmRTaXplICogcFNpemVfcCk7Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1V3JpdGVFbnRyeUZyb21MZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgICAgIHVuc2lnbmVkIGludAotCQkJCQkJICAgICAgIHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgICAgICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkJICAgICAgIHRFcGxPYmRTaXplIFNpemVfcCk7Cit1bnNpZ25lZCBpbnQgRXBsT2JkdUdldE5vZGVJZCh2b2lkKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdVNlYXJjaFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfCi0JCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCi0JCQkJCQkgICAgIHRFcGxPYmRWYXJFbnRyeSBNRU0gKioKLQkJCQkJCSAgICAgcHBWYXJFbnRyeV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkdVNldE5vZGVJZCh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCSAgICB0RXBsT2JkTm9kZUlkVHlwZSBOb2RlSWRUeXBlX3ApOworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RFcGxLZXJuZWwgRXBsT2JkdUdldEFjY2Vzc1R5cGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQl1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCXRFcGxPYmRBY2Nlc3MgKnBBY2Nlc3NUeXBfcCk7CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RFcGxLZXJuZWwgRXBsT2JkdVJlYWRFbnRyeVRvTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQl1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCXZvaWQgKnBEc3REYXRhX3AsIHRFcGxPYmRTaXplICpwU2l6ZV9wKTsKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordEVwbEtlcm5lbCBFcGxPYmR1V3JpdGVFbnRyeUZyb21MZSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3AsCisJCQkJICAgdm9pZCAqcFNyY0RhdGFfcCwgdEVwbE9iZFNpemUgU2l6ZV9wKTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0RXBsS2VybmVsIEVwbE9iZHVTZWFyY2hWYXJFbnRyeShFUExfTUNPX0RFQ0xfSU5TVEFOQ0VfUFRSXyB1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAorCQkJCSB0RXBsT2JkVmFyRW50cnkgKipwcFZhckVudHJ5X3ApOwogCiAjZWxpZiBFUExfT0JEX1VTRV9LRVJORUwgIT0gRkFMU0UKICNpbmNsdWRlICIuLi9rZXJuZWwvRXBsT2Jkay5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE9iZHVDYWwuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxPYmR1Q2FsLmgKaW5kZXggNDk4ZTAxMS4uMDcyNzc3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbE9iZHVDYWwuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsT2JkdUNhbC5oCkBAIC02OSw4MCArNjksNTggQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgotCiAjaWZuZGVmIF9FUExPQkRVQ0FMX0hfCiAjZGVmaW5lIF9FUExPQkRVQ0FMX0hfCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgIi4uL0VwbE9iZC5oIgogCit0RXBsS2VybmVsIEVwbE9iZHVDYWxXcml0ZUVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQl2b2lkICpwU3JjRGF0YV9wLAorCQkJCXRFcGxPYmRTaXplIFNpemVfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgordEVwbEtlcm5lbCBFcGxPYmR1Q2FsUmVhZEVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCSAgICAgICB2b2lkICpwRHN0RGF0YV9wLAorCQkJICAgICAgIHRFcGxPYmRTaXplICpwU2l6ZV9wKTsKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KK3RFcGxLZXJuZWwgRXBsT2JkdUNhbEFjY2Vzc09kUGFydCh0RXBsT2JkUGFydCBPYmRQYXJ0X3AsCisJCQkJICB0RXBsT2JkRGlyIERpcmVjdGlvbl9wKTsKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCit0RXBsS2VybmVsIEVwbE9iZHVDYWxEZWZpbmVWYXIodEVwbFZhclBhcmFtICpwVmFyUGFyYW1fcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxXcml0ZUVudHJ5KHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgICB2b2lkICpwU3JjRGF0YV9wLAotCQkJCQkJICAgIHRFcGxPYmRTaXplIFNpemVfcCk7Cit2b2lkICpFcGxPYmR1Q2FsR2V0T2JqZWN0RGF0YVB0cih1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAorCQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKTsKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFJlYWRFbnRyeSh1bnNpZ25lZCBpbnQgdWlJbmRleF9wLAotCQkJCQkJICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKLQkJCQkJCSAgIHZvaWQgKnBEc3REYXRhX3AsCi0JCQkJCQkgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApOwordEVwbEtlcm5lbCBFcGxPYmR1Q2FsUmVnaXN0ZXJVc2VyT2QodEVwbE9iZEVudHJ5UHRyIHBVc2VyT2RfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxBY2Nlc3NPZFBhcnQodEVwbE9iZFBhcnQgT2JkUGFydF9wLAotCQkJCQkJICAgICAgdEVwbE9iZERpciBEaXJlY3Rpb25fcCk7Cit2b2lkIEVwbE9iZHVDYWxJbml0VmFyRW50cnkodEVwbE9iZFZhckVudHJ5ICpwVmFyRW50cnlfcCwKKwkJCSAgICB1OCBiVHlwZV9wLCB0RXBsT2JkU2l6ZSBPYmRTaXplX3ApOwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsRGVmaW5lVmFyKHRFcGxWYXJQYXJhbSBNRU0gKgotCQkJCQkJICAgcFZhclBhcmFtX3ApOwordEVwbE9iZFNpemUgRXBsT2JkdUNhbEdldERhdGFTaXplKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wKTsKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdm9pZCAqUFVCTElDIEVwbE9iZHVDYWxHZXRPYmplY3REYXRhUHRyKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCi0JCQkJCQkgICAgIHVuc2lnbmVkIGludCB1aVN1YkluZGV4X3ApOwordW5zaWduZWQgaW50IEVwbE9iZHVDYWxHZXROb2RlSWQodm9pZCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxSZWdpc3RlclVzZXJPZCh0RXBsT2JkRW50cnlQdHIKLQkJCQkJCQlwVXNlck9kX3ApOwordEVwbEtlcm5lbCBFcGxPYmR1Q2FsU2V0Tm9kZUlkKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAorCQkJICAgICAgIHRFcGxPYmROb2RlSWRUeXBlIE5vZGVJZFR5cGVfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHZvaWQgUFVCTElDIEVwbE9iZHVDYWxJbml0VmFyRW50cnkodEVwbE9iZFZhckVudHJ5IE1FTSAqCi0JCQkJCQlwVmFyRW50cnlfcCwgQllURSBiVHlwZV9wLAotCQkJCQkJdEVwbE9iZFNpemUgT2JkU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbEdldEFjY2Vzc1R5cGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCSAgIHRFcGxPYmRBY2Nlc3MgKnBBY2Nlc3NUeXBfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxPYmRTaXplIFBVQkxJQyBFcGxPYmR1Q2FsR2V0RGF0YVNpemUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludAotCQkJCQkJICAgICAgdWlTdWJJbmRleF9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbFJlYWRFbnRyeVRvTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdWlTdWJJbmRleF9wLAorCQkJCSAgIHZvaWQgKnBEc3REYXRhX3AsCisJCQkJICAgdEVwbE9iZFNpemUgKnBTaXplX3ApOwogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB1bnNpZ25lZCBpbnQgUFVCTElDIEVwbE9iZHVDYWxHZXROb2RlSWQodm9pZCk7Cit0RXBsS2VybmVsIEVwbE9iZHVDYWxXcml0ZUVudHJ5RnJvbUxlKHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHVpU3ViSW5kZXhfcCwKKwkJCQkgICAgICB2b2lkICpwU3JjRGF0YV9wLAorCQkJCSAgICAgIHRFcGxPYmRTaXplIFNpemVfcCk7CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDIEVwbE9iZHVDYWxTZXROb2RlSWQodW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCi0JCQkJCQkgICB0RXBsT2JkTm9kZUlkVHlwZQotCQkJCQkJICAgTm9kZUlkVHlwZV9wKTsKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbEdldEFjY2Vzc1R5cGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJCSAgICAgICB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICAgdEVwbE9iZEFjY2VzcyAqCi0JCQkJCQkgICAgICAgcEFjY2Vzc1R5cF9wKTsKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FUExETExFWFBPUlQgdEVwbEtlcm5lbCBQVUJMSUMgRXBsT2JkdUNhbFJlYWRFbnRyeVRvTGUodW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQKLQkJCQkJCSAgICAgICB1aVN1YkluZGV4X3AsCi0JCQkJCQkgICAgICAgdm9pZCAqcERzdERhdGFfcCwKLQkJCQkJCSAgICAgICB0RXBsT2JkU2l6ZSAqIHBTaXplX3ApOwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUVQTERMTEVYUE9SVCB0RXBsS2VybmVsIFBVQkxJQyBFcGxPYmR1Q2FsV3JpdGVFbnRyeUZyb21MZSh1bnNpZ25lZCBpbnQKLQkJCQkJCQkgIHVpSW5kZXhfcCwKLQkJCQkJCQkgIHVuc2lnbmVkIGludAotCQkJCQkJCSAgdWlTdWJJbmRleF9wLAotCQkJCQkJCSAgdm9pZCAqcFNyY0RhdGFfcCwKLQkJCQkJCQkgIHRFcGxPYmRTaXplIFNpemVfcCk7Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRVBMRExMRVhQT1JUIHRFcGxLZXJuZWwgUFVCTElDCi1FcGxPYmR1Q2FsU2VhcmNoVmFyRW50cnkoRVBMX01DT19ERUNMX0lOU1RBTkNFX1BUUl8gdW5zaWduZWQgaW50IHVpSW5kZXhfcCwKLQkJCSB1bnNpZ25lZCBpbnQgdWlTdWJpbmRleF9wLAotCQkJIHRFcGxPYmRWYXJFbnRyeSBNRU0gKiogcHBWYXJFbnRyeV9wKTsKK3RFcGxLZXJuZWwgRXBsT2JkdUNhbFNlYXJjaFZhckVudHJ5KEVQTF9NQ09fREVDTF9JTlNUQU5DRV9QVFJfIHVuc2lnbmVkIGludCB1aUluZGV4X3AsCisJCQkJICAgIHVuc2lnbmVkIGludCB1aVN1YmluZGV4X3AsCisJCQkJICAgIHRFcGxPYmRWYXJFbnRyeSAqKnBwVmFyRW50cnlfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExPQkRVQ0FMX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsUGRvdS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFBkb3UuaAppbmRleCAxMWRlNDg2Li5iOGM4MzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsUGRvdS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxQZG91LmgKQEAgLTcyLDI0ICs3MiwxMiBAQAogCiAjaW5jbHVkZSAiLi4vRXBsUGRvLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIHRFcGxLZXJuZWwgRXBsUGRvdUFkZEluc3RhbmNlKHZvaWQpOwogCiB0RXBsS2VybmVsIEVwbFBkb3VEZWxJbnN0YW5jZSh2b2lkKTsKIAogI2lmICgoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfUERPVSkpICE9IDApCi10RXBsS2VybmVsIFBVQkxJQyBFcGxQZG91Q2JPYmRBY2Nlc3ModEVwbE9iZENiUGFyYW0gTUVNICogcFBhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxQZG91Q2JPYmRBY2Nlc3ModEVwbE9iZENiUGFyYW0gKnBQYXJhbV9wKTsKICNlbHNlCiAjZGVmaW5lIEVwbFBkb3VDYk9iZEFjY2VzcwkJTlVMTAogI2VuZGlmCkBAIC05NywxMiArODUsMTIgQEAKIC8vIHJldHVybnMgZXJyb3IgaWYgYlBkb0lkX3AgaXMgYWxyZWFkeSB2YWxpZAogLyoKIHRFcGxLZXJuZWwgRXBsUGRvdVNldE1hcHBpbmcoCi0gICAgQllURSBiUGRvSWRfcCwgQk9PTCBmVHhSeF9wLCBCWVRFIGJOb2RlSWQsIEJZVEUgYk1hcHBpbmdWZXJzaW9uLAotICAgIHRFcGxQZG9NYXBwaW5nICogcE1hcHBpbmdfcCwgQllURSBiTWF4RW50cmllc19wKTsKKyAgICB1OCBiUGRvSWRfcCwgQk9PTCBmVHhSeF9wLCB1OCBiTm9kZUlkLCB1OCBiTWFwcGluZ1ZlcnNpb24sCisgICAgdEVwbFBkb01hcHBpbmcgKiBwTWFwcGluZ19wLCB1OCBiTWF4RW50cmllc19wKTsKIAogdEVwbEtlcm5lbCBFcGxQZG91R2V0TWFwcGluZygKLSAgICBCWVRFIGJQZG9JZF9wLCBCT09MIGZUeFJ4X3AsIEJZVEUgKiBwYk5vZGVJZCwgQllURSAqIHBiTWFwcGluZ1ZlcnNpb24sCi0gICAgdEVwbFBkb01hcHBpbmcgKiBwTWFwcGluZ19wLCBCWVRFICogcGJNYXhFbnRyaWVzX3ApOworICAgIHU4IGJQZG9JZF9wLCBCT09MIGZUeFJ4X3AsIHU4ICogcGJOb2RlSWQsIHU4ICogcGJNYXBwaW5nVmVyc2lvbiwKKyAgICB0RXBsUGRvTWFwcGluZyAqIHBNYXBwaW5nX3AsIHU4ICogcGJNYXhFbnRyaWVzX3ApOwogKi8KIAogI2VuZGlmIC8vICNpZm5kZWYgX0VQTF9QRE9VX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQXNuZHUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Bc25kdS5oCmluZGV4IGUzNDk1OWYuLmE2MmQ0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Bc25kdS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Bc25kdS5oCkBAIC02OCwzOSArNjgsMjggQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgIi4uL0VwbFNkby5oIgotI2luY2x1ZGUgIi4uL0VwbERsbC5oIgotCiAjaWZuZGVmIF9FUExTRE9BU05EVV9IXwogI2RlZmluZSBfRVBMU0RPQVNORFVfSF8KIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGNvbnN0IGRlZmluZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSAiLi4vRXBsU2RvLmgiCisjaW5jbHVkZSAiLi4vRXBsRGxsLmgiCiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyB0eXBlZGVmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gZnVuY3Rpb24gcHJvdG90eXBlcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPX0FTTkQpKSAhPSAwKQogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc25kdUluaXQodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVJbml0KHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzbmR1QWRkSW5zdGFuY2UodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVBZGRJbnN0YW5jZSh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc25kdURlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxTZG9Bc25kdURlbEluc3RhbmNlKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc25kdUluaXRDb24odEVwbFNkb0NvbkhkbCAqIHBTZG9Db25IYW5kbGVfcCwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVJbml0Q29uKHRFcGxTZG9Db25IZGwgKnBTZG9Db25IYW5kbGVfcCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVTZW5kRGF0YSh0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wLAotCQkJCSAgICAgIHRFcGxGcmFtZSAqIHBTcmNEYXRhX3AsCi0JCQkJICAgICAgRFdPUkQgZHdEYXRhU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXNuZHVTZW5kRGF0YSh0RXBsU2RvQ29uSGRsIFNkb0NvbkhhbmRsZV9wLAorCQkJICAgICAgIHRFcGxGcmFtZSAqcFNyY0RhdGFfcCwKKwkJCSAgICAgICB1MzIgZHdEYXRhU2l6ZV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXNuZHVEZWxDb24odEVwbFNkb0NvbkhkbCBTZG9Db25IYW5kbGVfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0FzbmR1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApOwogCiAjZW5kaWYgLy8gZW5kIG9mICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPX0FTTkQpKSAhPSAwKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQXN5U2VxdS5oIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb0FzeVNlcXUuaAppbmRleCA0NjU4YjVmLi5jYzg2MmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQXN5U2VxdS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Bc3lTZXF1LmgKQEAgLTY4LDQ0ICs2OCwzMyBAQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWZuZGVmIF9FUExTRE9BU1lTRVFVX0hfCisjZGVmaW5lIF9FUExTRE9BU1lTRVFVX0hfCisKICNpbmNsdWRlICIuLi9FcGxTZG8uaCIKICNpbmNsdWRlICJFcGxTZG9VZHB1LmgiCiAjaW5jbHVkZSAiRXBsU2RvQXNuZHUuaCIKICNpbmNsdWRlICIuLi9FcGxFdmVudC5oIgogI2luY2x1ZGUgIkVwbFRpbWVydS5oIgogCi0jaWZuZGVmIF9FUExTRE9BU1lTRVFVX0hfCi0jZGVmaW5lIF9FUExTRE9BU1lTRVFVX0hfCit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcUluaXQodEVwbFNkb0NvbVJlY2VpdmVDYiBmcFNkb0NvbUNiX3AsCisJCQkgICAgdEVwbFNkb0NvbUNvbkNiIGZwU2RvQ29tQ29uQ2JfcCk7CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFJbml0KHRFcGxTZG9Db21SZWNlaXZlQ2IgZnBTZG9Db21DYl9wLAordEVwbEtlcm5lbCBFcGxTZG9Bc3lTZXFBZGRJbnN0YW5jZSh0RXBsU2RvQ29tUmVjZWl2ZUNiIGZwU2RvQ29tQ2JfcCwKIAkJCQkgICB0RXBsU2RvQ29tQ29uQ2IgZnBTZG9Db21Db25DYl9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQXN5U2VxQWRkSW5zdGFuY2UodEVwbFNkb0NvbVJlY2VpdmVDYiBmcFNkb0NvbUNiX3AsCi0JCQkJCSAgdEVwbFNkb0NvbUNvbkNiIGZwU2RvQ29tQ29uQ2JfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0FzeVNlcURlbEluc3RhbmNlKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Bc3lTZXFEZWxJbnN0YW5jZSh2b2lkKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxSW5pdENvbih0RXBsU2RvU2VxQ29uSGRsICpwU2RvU2VxQ29uSGRsX3AsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHVpTm9kZUlkX3AsCisJCQkgICAgICAgdEVwbFNkb1R5cGUgU2RvVHlwZSk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcUluaXRDb24odEVwbFNkb1NlcUNvbkhkbCAqIHBTZG9TZXFDb25IZGxfcCwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKLQkJCQkgICAgICB0RXBsU2RvVHlwZSBTZG9UeXBlKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxU2VuZERhdGEodEVwbFNkb1NlcUNvbkhkbCBTZG9TZXFDb25IZGxfcCwKKwkJCQl1bnNpZ25lZCBpbnQgdWlEYXRhU2l6ZV9wLAorCQkJCXRFcGxGcmFtZSAqcERhdGFfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcVNlbmREYXRhKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3AsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCB1aURhdGFTaXplX3AsCi0JCQkJICAgICAgIHRFcGxGcmFtZSAqIHBEYXRhX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Bc3lTZXFQcm9jZXNzRXZlbnQodEVwbEV2ZW50ICpwRXZlbnRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcVByb2Nlc3NFdmVudCh0RXBsRXZlbnQgKiBwRXZlbnRfcCk7Ci0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0FzeVNlcURlbENvbih0RXBsU2RvU2VxQ29uSGRsIFNkb1NlcUNvbkhkbF9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQXN5U2VxRGVsQ29uKHRFcGxTZG9TZXFDb25IZGwgU2RvU2VxQ29uSGRsX3ApOwogCiAjZW5kaWYgLy8gI2lmbmRlZiBfRVBMU0RPQVNZU0VRVV9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb0NvbXUuaCBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9Db211LmgKaW5kZXggM2U0NTRjNy4uNGVlZTZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb0NvbXUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvQ29tdS5oCkBAIC02OCw1OCArNjgsNDYgQEAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmbmRlZiBfRVBMU0RPQ09NVV9IXworI2RlZmluZSBfRVBMU0RPQ09NVV9IXworCiAjaW5jbHVkZSAiLi4vRXBsU2RvLmgiCiAjaW5jbHVkZSAiLi4vRXBsT2JkLmgiCiAjaW5jbHVkZSAiLi4vRXBsU2RvQWMuaCIKICNpbmNsdWRlICJFcGxPYmR1LmgiCiAjaW5jbHVkZSAiRXBsU2RvQXN5U2VxdS5oIgogCi0jaWZuZGVmIF9FUExTRE9DT01VX0hfCi0jZGVmaW5lIF9FUExTRE9DT01VX0hfCit0RXBsS2VybmVsIEVwbFNkb0NvbUluaXQodm9pZCk7CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBjb25zdCBkZWZpbmVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordEVwbEtlcm5lbCBFcGxTZG9Db21BZGRJbnN0YW5jZSh2b2lkKTsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tSW5pdCh2b2lkKTsKLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tQWRkSW5zdGFuY2Uodm9pZCk7Ci0KLXRFcGxLZXJuZWwgUFVCTElDIEVwbFNkb0NvbURlbEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxTZG9Db21EZWxJbnN0YW5jZSh2b2lkKTsKIAogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9DKSkgIT0gMCkKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tRGVmaW5lQ29uKHRFcGxTZG9Db21Db25IZGwgKiBwU2RvQ29tQ29uSGRsX3AsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgdWlUYXJnZXROb2RlSWRfcCwKLQkJCQkgICAgIHRFcGxTZG9UeXBlIFByb3RUeXBlX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Db21EZWZpbmVDb24odEVwbFNkb0NvbUNvbkhkbCAqcFNkb0NvbUNvbkhkbF9wLAorCQkJICAgICAgdW5zaWduZWQgaW50IHVpVGFyZ2V0Tm9kZUlkX3AsCisJCQkgICAgICB0RXBsU2RvVHlwZSBQcm90VHlwZV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tSW5pdFRyYW5zZmVyQnlJbmRleCh0RXBsU2RvQ29tVHJhbnNQYXJhbUJ5SW5kZXggKgotCQkJCQkgICAgICAgcFNkb0NvbVRyYW5zUGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbFNkb0NvbUluaXRUcmFuc2ZlckJ5SW5kZXgodEVwbFNkb0NvbVRyYW5zUGFyYW1CeUluZGV4ICpwU2RvQ29tVHJhbnNQYXJhbV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tVW5kZWZpbmVDb24odEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0NvbVVuZGVmaW5lQ29uKHRFcGxTZG9Db21Db25IZGwgU2RvQ29tQ29uSGRsX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21HZXRTdGF0ZSh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wLAotCQkJCSAgICB0RXBsU2RvQ29tRmluaXNoZWQgKiBwU2RvQ29tRmluaXNoZWRfcCk7Cit0RXBsS2VybmVsIEVwbFNkb0NvbUdldFN0YXRlKHRFcGxTZG9Db21Db25IZGwgU2RvQ29tQ29uSGRsX3AsCisJCQkgICAgIHRFcGxTZG9Db21GaW5pc2hlZCAqcFNkb0NvbUZpbmlzaGVkX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21TZG9BYm9ydCh0RXBsU2RvQ29tQ29uSGRsIFNkb0NvbUNvbkhkbF9wLAotCQkJCSAgICBEV09SRCBkd0Fib3J0Q29kZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQ29tU2RvQWJvcnQodEVwbFNkb0NvbUNvbkhkbCBTZG9Db21Db25IZGxfcCwKKwkJCSAgICAgdTMyIGR3QWJvcnRDb2RlX3ApOwogCiAjZW5kaWYKIAogLy8gZm9yIGZ1dHVyZSBleHRlbnRpb24KIC8qCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9Db21Jbml0VHJhbnNmZXJBbGxCeUluZGV4KHRFcGxTZG9Db21UcmFuc1BhcmFtQWxsQnlJbmRleCogcFNkb0NvbVRyYW5zUGFyYW1fcCk7Cit0RXBsS2VybmVsIEVwbFNkb0NvbUluaXRUcmFuc2ZlckFsbEJ5SW5kZXgodEVwbFNkb0NvbVRyYW5zUGFyYW1BbGxCeUluZGV4KiBwU2RvQ29tVHJhbnNQYXJhbV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tSW5pdFRyYW5zZmVyQnlOYW1lKHRFcGxTZG9Db21UcmFuc1BhcmFtQnlOYW1lKiBwU2RvQ29tVHJhbnNQYXJhbV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvQ29tSW5pdFRyYW5zZmVyQnlOYW1lKHRFcGxTZG9Db21UcmFuc1BhcmFtQnlOYW1lKiBwU2RvQ29tVHJhbnNQYXJhbV9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvQ29tSW5pdFRyYW5zZmVyRmlsZSh0RXBsU2RvQ29tVHJhbnNQYXJhbUZpbGUqIHBTZG9Db21UcmFuc1BhcmFtX3ApOwordEVwbEtlcm5lbCBFcGxTZG9Db21Jbml0VHJhbnNmZXJGaWxlKHRFcGxTZG9Db21UcmFuc1BhcmFtRmlsZSogcFNkb0NvbVRyYW5zUGFyYW1fcCk7CiAKICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9VZHB1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU2RvVWRwdS5oCmluZGV4IDJkNzdiNmYuLjEzZTJhMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTZG9VZHB1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFNkb1VkcHUuaApAQCAtNjgsNDEgKzY4LDI5IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxTZG8uaCIKLQogI2lmbmRlZiBfRVBMU0RPVURQVV9IXwogI2RlZmluZSBfRVBMU0RPVURQVV9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICIuLi9FcGxTZG8uaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBmdW5jdGlvbiBwcm90b3R5cGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2lmKCgoRVBMX01PRFVMRV9JTlRFR1JBVElPTikgJiAoRVBMX01PRFVMRV9TRE9fVURQKSkgIT0gMCkKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdUluaXQodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdUluaXQodEVwbFNlcXVMYXllclJlY2VpdmVDYiBmcFJlY2VpdmVDYl9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdUFkZEluc3RhbmNlKHRFcGxTZXF1TGF5ZXJSZWNlaXZlQ2IgZnBSZWNlaXZlQ2JfcCk7Cit0RXBsS2VybmVsIEVwbFNkb1VkcHVBZGRJbnN0YW5jZSh0RXBsU2VxdUxheWVyUmVjZWl2ZUNiIGZwUmVjZWl2ZUNiX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1RGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbFNkb1VkcHVEZWxJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdUNvbmZpZyh1bnNpZ25lZCBsb25nIHVsSXBBZGRyX3AsCi0JCQkJICAgdW5zaWduZWQgaW50IHVpUG9ydF9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdUNvbmZpZyh1bnNpZ25lZCBsb25nIHVsSXBBZGRyX3AsCisJCQkgICAgdW5zaWduZWQgaW50IHVpUG9ydF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdUluaXRDb24odEVwbFNkb0NvbkhkbCAqIHBTZG9Db25IYW5kbGVfcCwKLQkJCQkgICAgdW5zaWduZWQgaW50IHVpVGFyZ2V0Tm9kZUlkX3ApOwordEVwbEtlcm5lbCBFcGxTZG9VZHB1SW5pdENvbih0RXBsU2RvQ29uSGRsICpwU2RvQ29uSGFuZGxlX3AsCisJCQkgICAgIHVuc2lnbmVkIGludCB1aVRhcmdldE5vZGVJZF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU2RvVWRwdVNlbmREYXRhKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3AsCi0JCQkJICAgICB0RXBsRnJhbWUgKiBwU3JjRGF0YV9wLAotCQkJCSAgICAgRFdPUkQgZHdEYXRhU2l6ZV9wKTsKK3RFcGxLZXJuZWwgRXBsU2RvVWRwdVNlbmREYXRhKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3AsCisJCQkgICAgICB0RXBsRnJhbWUgKnBTcmNEYXRhX3AsIHUzMiBkd0RhdGFTaXplX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTZG9VZHB1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApOwordEVwbEtlcm5lbCBFcGxTZG9VZHB1RGVsQ29uKHRFcGxTZG9Db25IZGwgU2RvQ29uSGFuZGxlX3ApOwogCiAjZW5kaWYgLy8gZW5kIG9mICNpZigoKEVQTF9NT0RVTEVfSU5URUdSQVRJT04pICYgKEVQTF9NT0RVTEVfU0RPX1VEUCkpICE9IDApCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTdGF0dXN1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsU3RhdHVzdS5oCmluZGV4IGQyMTE5MzUuLjBmZDNlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxTdGF0dXN1LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFN0YXR1c3UuaApAQCAtNjgsMzcgKzY4LDIzIEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxEbGwuaCIKLQogI2lmbmRlZiBfRVBMU1RBVFVTVV9IXwogI2RlZmluZSBfRVBMU1RBVFVTVV9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICIuLi9FcGxEbGwuaCIKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIHR5cGVkZWYKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0eXBlZGVmIHRFcGxLZXJuZWwoKiB0RXBsU3RhdHVzdUNiUmVzcG9uc2UpICh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgICB0RXBsU3RhdHVzUmVzcG9uc2UgKnBTdGF0dXNSZXNwb25zZV9wKTsKIAotdHlwZWRlZiB0RXBsS2VybmVsKFBVQkxJQyAqIHRFcGxTdGF0dXN1Q2JSZXNwb25zZSkgKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICAgIHRFcGxTdGF0dXNSZXNwb25zZSAqCi0JCQkJCQkgICAgcFN0YXR1c1Jlc3BvbnNlX3ApOwordEVwbEtlcm5lbCBFcGxTdGF0dXN1SW5pdCh2b2lkKTsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0RXBsS2VybmVsIEVwbFN0YXR1c3VBZGRJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU3RhdHVzdUluaXQodm9pZCk7Cit0RXBsS2VybmVsIEVwbFN0YXR1c3VEZWxJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU3RhdHVzdUFkZEluc3RhbmNlKHZvaWQpOwordEVwbEtlcm5lbCBFcGxTdGF0dXN1UmVzZXQodm9pZCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFN0YXR1c3VEZWxJbnN0YW5jZSh2b2lkKTsKLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsU3RhdHVzdVJlc2V0KHZvaWQpOwotCi10RXBsS2VybmVsIFBVQkxJQyBFcGxTdGF0dXN1UmVxdWVzdFN0YXR1c1Jlc3BvbnNlKHVuc2lnbmVkIGludCB1aU5vZGVJZF9wLAotCQkJCQkJICB0RXBsU3RhdHVzdUNiUmVzcG9uc2UKLQkJCQkJCSAgcGZuQ2JSZXNwb25zZV9wKTsKK3RFcGxLZXJuZWwgRXBsU3RhdHVzdVJlcXVlc3RTdGF0dXNSZXNwb25zZSh1bnNpZ25lZCBpbnQgdWlOb2RlSWRfcCwKKwkJCQkJICAgdEVwbFN0YXR1c3VDYlJlc3BvbnNlIHBmbkNiUmVzcG9uc2VfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExTVEFUVVNVX0hfCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsVGltZXJ1LmggYi9kcml2ZXJzL3N0YWdpbmcvZXBsL3VzZXIvRXBsVGltZXJ1LmgKaW5kZXggNDA0NDk1NS4uNWM0NDc0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2VwbC91c2VyL0VwbFRpbWVydS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9lcGwvdXNlci9FcGxUaW1lcnUuaApAQCAtNjgsNDAgKzY4LDI4IEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlICIuLi9FcGxUaW1lci5oIgotI2luY2x1ZGUgIkVwbEV2ZW50dS5oIgotCiAjaWZuZGVmIF9FUExUSU1FUlVfSF8KICNkZWZpbmUgX0VQTFRJTUVSVV9IXwogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gY29uc3QgZGVmaW5lcwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlICIuLi9FcGxUaW1lci5oIgorI2luY2x1ZGUgIkVwbEV2ZW50dS5oIgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gdHlwZWRlZgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RFcGxLZXJuZWwgRXBsVGltZXJ1SW5pdCh2b2lkKTsKIAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIGZ1bmN0aW9uIHByb3RvdHlwZXMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0RXBsS2VybmVsIEVwbFRpbWVydUFkZEluc3RhbmNlKHZvaWQpOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVJbml0KHZvaWQpOwordEVwbEtlcm5lbCBFcGxUaW1lcnVEZWxJbnN0YW5jZSh2b2lkKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1QWRkSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbFRpbWVydVNldFRpbWVyTXModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHVsVGltZV9wLAorCQkJICAgICAgIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKTsKIAotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsSW5zdGFuY2Uodm9pZCk7Cit0RXBsS2VybmVsIEVwbFRpbWVydU1vZGlmeVRpbWVyTXModEVwbFRpbWVySGRsICpwVGltZXJIZGxfcCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgdWxUaW1lX3AsCisJCQkJICB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCk7CiAKLXRFcGxLZXJuZWwgUFVCTElDIEVwbFRpbWVydVNldFRpbWVyTXModEVwbFRpbWVySGRsICogcFRpbWVySGRsX3AsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKLQkJCQkgICAgICB0RXBsVGltZXJBcmcgQXJndW1lbnRfcCk7Cit0RXBsS2VybmVsIEVwbFRpbWVydURlbGV0ZVRpbWVyKHRFcGxUaW1lckhkbCAqcFRpbWVySGRsX3ApOwogCi10RXBsS2VybmVsIFBVQkxJQyBFcGxUaW1lcnVNb2RpZnlUaW1lck1zKHRFcGxUaW1lckhkbCAqIHBUaW1lckhkbF9wLAotCQkJCQkgdW5zaWduZWQgbG9uZyB1bFRpbWVfcCwKLQkJCQkJIHRFcGxUaW1lckFyZyBBcmd1bWVudF9wKTsKLQotdEVwbEtlcm5lbCBQVUJMSUMgRXBsVGltZXJ1RGVsZXRlVGltZXIodEVwbFRpbWVySGRsICogcFRpbWVySGRsX3ApOwotCi1CT09MIFBVQkxJQyBFcGxUaW1lcnVJc1RpbWVyQWN0aXZlKHRFcGxUaW1lckhkbCBUaW1lckhkbF9wKTsKK0JPT0wgRXBsVGltZXJ1SXNUaW1lckFjdGl2ZSh0RXBsVGltZXJIZGwgVGltZXJIZGxfcCk7CiAKICNlbmRpZiAvLyAjaWZuZGVmIF9FUExUSU1FUlVfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCmluZGV4IGVjOThkYTUuLjhkYzU1OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwpAQCAtMTIwMyw4ICsxMjAzLDcgQEAKIAogCQlwTXBSZmQgPSAoUE1QX1JGRCkgbGlzdF9lbnRyeShlbGVtZW50LCBNUF9SRkQsIGxpc3Rfbm9kZSk7CiAKLQkJbGlzdF9kZWwoJnBNcFJmZC0+bGlzdF9ub2RlKTsKLQkJbGlzdF9hZGRfdGFpbCgmcE1wUmZkLT5saXN0X25vZGUsICZwQWRhcHRlci0+UnhSaW5nLlJlY3ZMaXN0KTsKKwkJbGlzdF9tb3ZlX3RhaWwoJnBNcFJmZC0+bGlzdF9ub2RlLCAmcEFkYXB0ZXItPlJ4UmluZy5SZWN2TGlzdCk7CiAJfQogCiAJREJHX0xFQVZFKGV0MTMxeF9kYmdpbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvUkVBRE1FCmluZGV4IDA3YzllZjkuLmNkMDdhZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9SRUFETUUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL1JFQURNRQpAQCAtMSwyOCArMSw0NyBAQAotVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIFVTQiBUcmFuenBvcnQgYW5kIEFscGhhdHJhY2sgS2VybmVsIGRyaXZlcnMgZm9yIExpbnV4LgorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIExpbnV4IFVTQiBUcmFuenBvcnQgYW5kIEFscGhhdHJhY2sgS2VybmVsIGRyaXZlcnMuCiAKLUF0IHByZXNlbnQgdGhlIHRyYW56cG9ydCBkb2VzIHJlYWRzL3dyaXRlcyBvZiA4IGJ5dGUgY21kcyB0byAvZGV2L3RyYW56cG9ydDAgdG8gY29udHJvbAotdGhlIGxpZ2h0cyBhbmQgc2NyZWVuIGFuZCB3aGVlbAorU2VlIGh0dHA6Ly93d3cuZnJvbnRpZXJkZXNpZ24uY29tIGZvciBkZXRhaWxzIG9uIHRoZXNlIGRldmljZXMuCiAKLUF0IHByZXNlbnQgdGhlIGFscGhhdHJhY2sgYWNjZXB0cyByZWFkcy93cml0ZXMgb2YgMTIgYnl0ZSBjbWRzIHRvIC9kZXYvdHJhbnpwb3J0MCB0byBjb250cm9sCi10aGUgbGlnaHRzIGFuZCBzY3JlZW4gYW5kIGZhZGVyLgorVXNlcnNwYWNlIHRlc3QgY29kZSBpcyBhdmFpbGFibGUgZnJvbQogCi1Cb3RoIGRyaXZlcnMgYWxzbyBoYXZlIHNvbWUgc3lzZnMgaG9va3MgdGhhdCBhcmUgbm9uLWZ1bmN0aW9uYWwgYXQgdGhlIG1vbWVudC4KK2dpdDovL3RvdXRhdGlzLmlzYy5vcmcvaG9tZS9kL3NyYy9naXQvZnJvbnRpZXIuZ2l0CiAKLVRoZSBBUEkgaXMgY3VycmVudGx5IGNsb3NlbHkgdGllZCB0byB0aGUgYXJkb3VyIHJldmlzaW9uIGFuZCBXSUxMIGNoYW5nZS4KK0F0IHByZXNlbnQgdGhlIHRyYW56cG9ydCBkb2VzIHJlYWRzL3dyaXRlcyBvZiA4IGJ5dGUgY21kcyB0bworL2Rldi90cmFuenBvcnQwIHRvIGNvbnRyb2wgdGhlIGxpZ2h0cywgc2NyZWVuLCBhbmQgd2hlZWwuCiAKLUEgc3lzZnMgaW50ZXJmYWNlIGlzIFBFUkZFQ1QgZm9yIHNpbXBsZSB1c2Vyc3BhY2UgYXBwcyB0byBkbyBmdW4gdGhpbmdzIHdpdGggdGhlCi1saWdodHMgYW5kIHNjcmVlbi4gSXQncyBmYWlybHkgbG91c3kgZm9yIGhhbmRsaW5nIGlucHV0IGV2ZW50cyBhbmQgdmVyeSBsb3VzeQotZm9yIHdhdGNoaW5nIHRoZSBzdGF0ZSBvZiB0aGUgc2h1dHRsZSB3aGVlbC4KK0F0IHByZXNlbnQgdGhlIGFscGhhdHJhY2sgYWNjZXB0cyByZWFkcy93cml0ZXMgb2YgMTIgYnl0ZSBjbWRzIHRvCisvZGV2L3RyYW56cG9ydDAgdG8gY29udHJvbCB0aGUgbGlnaHRzLCBzY3JlZW4sIGZhZGVyIGFuZCB0b3VjaHBhZC4KIAotQSBsaW51eCBpbnB1dCBldmVudHMgaW50ZXJmYWNlIGlzIGdyZWF0IGZvciB0aGUgaW5wdXQgZXZlbnRzIGFuZCBzaHV0dGxlIHdoZWVsLiBJdCdzCi10aGVvcmV0aWNhbGx5IE9LIG9uIExFRHMuIEEgRmFkZXIgY2FuIGJlIG1hcHBlZCB0byBhbiBhYnNvbHV0ZSBtb3VzZSBkZXZpY2UuCi1CdXQgdGhlcmUgaXMgbm8gTENEIHN1cHBvcnQgYXQgYWxsLgorVGhlIHRyYW56cG9ydCBkcml2ZXIgcHJvdmlkZXMgYSBydWRpbWVudGFyeSBzeXNmcyBpbnRlcmZhY2UgZm9yIHRoZSBzdGF0dXMgb2YKK3RoZSBkZXZpY2UgYW5kIGEgd3JpdGFibGUgcGFyYW1ldGVyIGZvciB0dXJuaW5nIHdoZWVsIGNvbXByZXNzaW9uIG9uIGFuZCBvZmYuCiAKLUluIHRoZSBlbmQgdGhpcyBpcyBnb2luZyB0byBiZSBkcml2ZW4gYnkgYSBtaWRpIGxheWVyLCB3aGljaCBoYW5kbGVzIGFsbCB0aG9zZQotY2FzZXMgdmlhIGEgZGVmaW5lZCBBUEksIGJ1dCAtIGFtb25nIG90aGVyIHRoaW5ncyAtIGlzIHNsb3csIGRvZXNuJ3QgZG8KLWZsb3cgY29udHJvbCwgYW5kIGlzIGEgTE9UIG9mIGV4dHJhIHdvcmsuIEZyYW5rbHksIEknZCBsaWtlIHRvIGtlZXAgdGhlCitUaGUgQVBJIGlzIG5vdGhpbmcgbW9yZSB0aGFuIHRoZSBVU0IgY29tbWFuZHMgaXNzdWVkIHRvIHRoZSBkZXZpY2UuIFdoeT8KKworVGhlIGNvbnRyb2wgd2hlZWwvZmFkZXIgY2FuIGdlbmVyYXRlIGV2ZW50cyBmYXIgdG9vIHF1aWNrbHkgZm9yCithIHR5cGljYWwgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIHRvIGtlZXAgdXAgd2l0aCB0aGVtIHZpYSBsaWJ1c2IuIElucHV0CituZWVkcyB0byBiZSAxMDAlIGFjY3VyYXRlIGFuZCBmYXN0IGluIG9yZGVyIGZvciB0aGUgYWxwaGF0cmFjayBvciB0cmFuenBvcnQKK3RvIGJlIHVzZWZ1bC4KKworVUlPIHdvdWxkIGJlIHVzZWZ1bCBleGNlcHQgdGhhdCB1c2IgZGlzY29ubmVjdCBldmVudHMgbmVlZAordG8gYmUgaGFuZGxlZCBjb3JyZWN0bHkuCisKK0Egc3lzZnMgaW50ZXJmYWNlIGlzIHBlcmZlY3QgZm9yIHNpbXBsZSB1c2Vyc3BhY2UgYXBwcyB0byBkbyBmdW4gdGhpbmdzIHdpdGgKK3RoZSBsaWdodHMgYW5kIHNjcmVlbi4gQnV0IGl0J3MgZmFpcmx5IGxvdXN5IGZvciBoYW5kbGluZyBpbnB1dCBldmVudHMgYW5kCit2ZXJ5IGxvdXN5IGZvciB3YXRjaGluZyB0aGUgc3RhdGUgb2YgdGhlIHNodXR0bGUgd2hlZWwuCisKK0EgbGludXggaW5wdXQgZXZlbnRzIGludGVyZmFjZSBpcyBncmVhdCBmb3IgdGhlIGlucHV0IGV2ZW50cyBhbmQgc2h1dHRsZSB3aGVlbC4KKyogSXQncyB0aGVvcmV0aWNhbGx5IE9LIG9uIExFRHMuCisqIEEgZmFkZXIgY2FuIGJlIG1hcHBlZCB0byBhbiBhYnNvbHV0ZSBtb3VzZSBkZXZpY2UuCisqIEJ1dCB0aGVyZSBpcyBubyBMQ0Qgc3VwcG9ydCBhdCBhbGwsIG9yIGZhZGVyIGZlZWRiYWNrIHN1cHBvcnQgaW4gdGhhdCBBUEkKKworU28sIHRodXMsIHRoZXNlIHN0dWJieSBkcml2ZXJzIGV4aXN0LgorCitJbiB0aGUgZW5kIHRoaXMgY291bGQgYmUgZHJpdmVuIGJ5IGEgbWlkaSBsYXllciwgd2hpY2ggaGFuZGxlcyBhbGwgdGhvc2UKK2Nhc2VzIHZpYSBhIHdlbGwgZGVmaW5lZCBBUEksIGJ1dCAtIGFtb25nIG90aGVyIHRoaW5ncyAtIGlzIHNsb3csIGRvZXNuJ3QgZG8KK2Zsb3cgY29udHJvbCwgYW5kIGlzIGEgTE9UIG9mIGV4dHJhIHdvcmssIG5vbmUgb2Ygd2hpY2ggaXMgcmVxdWlyZWQgYXQKK3RoZSBrZXJuZWwgbGV2ZWwgKHByb2JhYmx5KS4gRnJhbmtseSwgSSdkIGxpa2UgdG8ga2VlcCB0aGUKIGNvcmUgZHJpdmVyIHNpbXBsZSBiZWNhdXNlIHRoZSBvbmx5IHJlYWx0aW1lIHdvcmsgcmVhbGx5IHJlcXVpcmVkIGlzCiB0aGUgYm90dG9tIGhhbGYgaW50ZXJydXB0IGhhbmRsZXIgYW5kIHRoZSBvdXRwdXQgb3ZlcmxhcHBpbmcuCiAKLUV4cG9zaW5nIHNvbWUgc29ydCBvZiBjbGVhbiBhaW8gYXBpIHRvIHVzZXJzcGFjZSB3b3VsZCBiZSBwZXJmZWN0LiBXaGF0IHRoYXQKK0V4cG9zaW5nIHNvbWUgc29ydCBvZiBjbGVhbiBhcGkgdG8gdXNlcnNwYWNlIHdvdWxkIGJlIHBlcmZlY3QuIFdoYXQgdGhhdAogQVBJIGxvb2tzIGxpa2U/IEdhaC4gYmVhdHMgbWUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvYWxwaGF0cmFjay5jIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2FscGhhdHJhY2suYwppbmRleCA2MTM2ZTNmLi5iY2JhMTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvYWxwaGF0cmFjay5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9hbHBoYXRyYWNrLmMKQEAgLTQxLDE5ICs0MSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAKLSNpbmNsdWRlICJzdXJmYWNlX3N5c2ZzLmgiCi0KLS8qIG1ha2UgdGhpcyB3b3JrIG9uIG9sZGVyIGtlcm5lbCB2ZXJzaW9ucyAqLwotCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCi0jaW5jbHVkZSAiZnJvbnRpZXJfY29tcGF0LmgiCi0jZW5kaWYgLyogb2xkZXIga2VybmVsIHZlcnNpb25zICovCi0KICNpbmNsdWRlICJhbHBoYXRyYWNrLmgiCiAKICNkZWZpbmUgVkVORE9SX0lECTB4MTY1YgpAQCAtNjIsMTkgKzU0LDE4IEBACiAjaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUwogI2RlZmluZSBVU0JfQUxQSEFUUkFDS19NSU5PUl9CQVNFCTAKICNlbHNlCi0vLyBGSVhNRSAxNzYgLSBpcyBhbm90aGVyIGRyaXZlcidzIG1pbm9yIC0gYXBwbHkgZm9yIHRoYXQKLS8vICNkZWZpbmUgVVNCX0FMUEhBVFJBQ0tfTUlOT1JfQkFTRQkxNzcKKy8qIEZJWE1FIDE3NiAtIGlzIGFub3RoZXIgZHJpdmVyJ3MgbWlub3IgLSBhcHBseSBmb3IgdGhhdCAqLwogI2RlZmluZSBVU0JfQUxQSEFUUkFDS19NSU5PUl9CQVNFCTE3NgogI2VuZGlmCiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfYWxwaGF0cmFja190YWJsZSBbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoVkVORE9SX0lELCBQUk9EVUNUX0lEKSB9LAotCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfYWxwaGF0cmFja190YWJsZVtdID0geworCXtVU0JfREVWSUNFKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCl9LAorCXt9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JfYWxwaGF0cmFja190YWJsZSk7Ci1NT0RVTEVfVkVSU0lPTigiMC40MCIpOworTU9EVUxFX1ZFUlNJT04oIjAuNDEiKTsKIE1PRFVMRV9BVVRIT1IoIk1pa2UgVGFodCA8bUB0YWh0Lm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQWxwaGF0cmFjayBVU0IgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC05MywxOCArODQsMTggQEAKICNkZWZpbmUgQUxQSEFUUkFDS19VU0JfVElNRU9VVCAxMAogI2RlZmluZSBPVVRQVVRfQ01EX1NJWkUgOAogI2RlZmluZSBJTlBVVF9DTURfU0laRSAxMgorI2RlZmluZSBBTFBIQVRSQUNLX0RFQlVHIDAKIAotCi1zdGF0aWMgaW50IGRlYnVnID0gMDsKK3N0YXRpYyBpbnQgZGVidWcgPSBBTFBIQVRSQUNLX0RFQlVHOwogCiAvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KLSNkZWZpbmUgZGJnX2luZm8oZGV2LCBmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAoZGVidWcpIGRldl9pbmZvKGRldiAsIGZvcm1hdCAsICMjIGFyZyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGRiZ19pbmZvKGRldiwgZm9ybWF0LCBhcmcuLi4pIGRvIFwKKyAgICB7IGlmIChkZWJ1ZykgZGV2X2luZm8oZGV2ICwgZm9ybWF0ICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBhbHBoYXRyYWNrX29jbWRfaW5mbyhkZXYsIGNtZCwgZm9ybWF0LCBhcmcuLi4pCiAKICNkZWZpbmUgYWxwaGF0cmFja19pY21kX2luZm8oZGV2LCBjbWQsIGZvcm1hdCwgYXJnLi4uKQogCi0KIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCiAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CkBAIC0xMTYsMTQgKzEwNywxNCBAQAogCiBzdGF0aWMgaW50IHJpbmdfYnVmZmVyX3NpemUgPSBSSU5HX0JVRkZFUl9TSVpFOwogCi1tb2R1bGVfcGFyYW0ocmluZ19idWZmZXJfc2l6ZSwgaW50LCAgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0ocmluZ19idWZmZXJfc2l6ZSwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MocmluZ19idWZmZXJfc2l6ZSwgIlJlYWQgcmluZyBidWZmZXIgc2l6ZSIpOwogCiAvKiBUaGUgd3JpdGVfYnVmZmVyIGNhbiBvbmUgZGF5IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBpbnRlcnJ1cHQgb3V0IHRyYW5zZmVyLgogICovCiAKIHN0YXRpYyBpbnQgd3JpdGVfYnVmZmVyX3NpemUgPSBXUklURV9CVUZGRVJfU0laRTsKLW1vZHVsZV9wYXJhbSh3cml0ZV9idWZmZXJfc2l6ZSwgaW50LCAgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0od3JpdGVfYnVmZmVyX3NpemUsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHdyaXRlX2J1ZmZlcl9zaXplLCAiV3JpdGUgYnVmZmVyIHNpemUiKTsKIAogLyoKQEAgLTEzMyw1NSArMTI0LDU2IEBACiAKIHN0YXRpYyBpbnQgbWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCA9IEFMUEhBVFJBQ0tfVVNCX1RJTUVPVVQ7CiBtb2R1bGVfcGFyYW0obWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MobWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCwgIk1pbmltdW0gaW50ZXJydXB0IGluIGludGVydmFsIGluIG1zIik7CitNT0RVTEVfUEFSTV9ERVNDKG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwsCisJCSAiTWluaW11bSBpbnRlcnJ1cHQgaW4gaW50ZXJ2YWwgaW4gbXMiKTsKIAogc3RhdGljIGludCBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA9IEFMUEhBVFJBQ0tfVVNCX1RJTUVPVVQ7CiBtb2R1bGVfcGFyYW0obWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsLCAiTWluaW11bSBpbnRlcnJ1cHQgb3V0IGludGVydmFsIGluIG1zIik7Ci0KLQorTU9EVUxFX1BBUk1fREVTQyhtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCwKKwkJICJNaW5pbXVtIGludGVycnVwdCBvdXQgaW50ZXJ2YWwgaW4gbXMiKTsKIAogLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KIAogc3RydWN0IHVzYl9hbHBoYXRyYWNrIHsKLQlzdHJ1Y3Qgc2VtYXBob3JlCXNlbTsJCS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UqCWludGY7CQkvKiBzYXZlIG9mZiB0aGUgdXNiIGludGVyZmFjZSBwb2ludGVyICovCi0JaW50CQkJb3Blbl9jb3VudDsJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMgcG9ydCBoYXMgYmVlbiBvcGVuZWQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsJLyogc2F2ZSBvZmYgdGhlIHVzYiBpbnRlcmZhY2UgcG9pbnRlciAqLworCWludCBvcGVuX2NvdW50OwkJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMgcG9ydCBoYXMgYmVlbiBvcGVuZWQgKi8KIAotCXN0cnVjdCBhbHBoYXRyYWNrX2ljbWQJKCpyaW5nX2J1ZmZlcilbUklOR19CVUZGRVJfU0laRV07IC8qIGp1c3QgbWFrZSBjIGhhcHB5ICovCi0Jc3RydWN0IGFscGhhdHJhY2tfb2NtZAkoKndyaXRlX2J1ZmZlcilbV1JJVEVfQlVGRkVSX1NJWkVdOyAvKiBqdXN0IG1ha2UgYyBoYXBweSAqLwotCXVuc2lnbmVkIGludAkJcmluZ19oZWFkOwotCXVuc2lnbmVkIGludAkJcmluZ190YWlsOworCS8qIG1ha2UgZ2NjIGhhcHB5ICovCisJc3RydWN0IGFscGhhdHJhY2tfaWNtZCAoKnJpbmdfYnVmZmVyKVtSSU5HX0JVRkZFUl9TSVpFXTsKKwlzdHJ1Y3QgYWxwaGF0cmFja19vY21kICgqd3JpdGVfYnVmZmVyKVtXUklURV9CVUZGRVJfU0laRV07CisJdW5zaWduZWQgaW50IHJpbmdfaGVhZDsKKwl1bnNpZ25lZCBpbnQgcmluZ190YWlsOwogCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJcmVhZF93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90CXdyaXRlX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IHdyaXRlX3dhaXQ7CiAKLQl1bnNpZ25lZCBjaGFyKgkJaW50ZXJydXB0X2luX2J1ZmZlcjsKLQl1bnNpZ25lZCBjaGFyKgkJb2xkaV9idWZmZXI7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yKiBpbnRlcnJ1cHRfaW5fZW5kcG9pbnQ7Ci0Jc3RydWN0IHVyYioJCWludGVycnVwdF9pbl91cmI7Ci0JaW50CQkJaW50ZXJydXB0X2luX2ludGVydmFsOwotCXNpemVfdAkJCWludGVycnVwdF9pbl9lbmRwb2ludF9zaXplOwotCWludAkJCWludGVycnVwdF9pbl9ydW5uaW5nOwotCWludAkJCWludGVycnVwdF9pbl9kb25lOworCXVuc2lnbmVkIGNoYXIgKmludGVycnVwdF9pbl9idWZmZXI7CisJdW5zaWduZWQgY2hhciAqb2xkaV9idWZmZXI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbnRlcnJ1cHRfaW5fZW5kcG9pbnQ7CisJc3RydWN0IHVyYiAqaW50ZXJydXB0X2luX3VyYjsKKwlpbnQgaW50ZXJydXB0X2luX2ludGVydmFsOworCXNpemVfdCBpbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZTsKKwlpbnQgaW50ZXJydXB0X2luX3J1bm5pbmc7CisJaW50IGludGVycnVwdF9pbl9kb25lOwogCi0JY2hhcioJCQlpbnRlcnJ1cHRfb3V0X2J1ZmZlcjsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IqIGludGVycnVwdF9vdXRfZW5kcG9pbnQ7Ci0Jc3RydWN0IHVyYioJCWludGVycnVwdF9vdXRfdXJiOwotCWludAkJCWludGVycnVwdF9vdXRfaW50ZXJ2YWw7Ci0Jc2l6ZV90CQkJaW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplOwotCWludAkJCWludGVycnVwdF9vdXRfYnVzeTsKKwljaGFyICppbnRlcnJ1cHRfb3V0X2J1ZmZlcjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9vdXRfZW5kcG9pbnQ7CisJc3RydWN0IHVyYiAqaW50ZXJydXB0X291dF91cmI7CisJaW50IGludGVycnVwdF9vdXRfaW50ZXJ2YWw7CisJc2l6ZV90IGludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZTsKKwlpbnQgaW50ZXJydXB0X291dF9idXN5OwogCiAJYXRvbWljX3Qgd3JpdGVzX3BlbmRpbmc7Ci0JaW50IGV2ZW50OyAvKiBhbHRlcm5hdGUgaW50ZXJmYWNlIHRvIGV2ZW50cyAqLwotCWludCBmYWRlcjsgLyogMTAgYml0cyAqLwotCWludCBsaWdodHM7IC8qIDIzIGJpdHMgKi8KLQl1bnNpZ25lZCBjaGFyIGR1bXBfc3RhdGU7IC8qIDAgaWYgZGlzYWJsZWQgMSBpZiBlbmFibGVkICovCi0JdW5zaWduZWQgY2hhciBlbmFibGU7IC8qIDAgaWYgZGlzYWJsZWQgMSBpZiBlbmFibGVkICovCi0JdW5zaWduZWQgY2hhciBvZmZsaW5lOyAvKiBpZiB0aGUgZGV2aWNlIGlzIG91dCBvZiByYW5nZSBvciBhc2xlZXAgKi8KLQl1bnNpZ25lZCBjaGFyIHZlcmJvc2U7IC8qIGJlIHZlcmJvc2UgaW4gZXJyb3IgcmVwb3J0aW5nICovCi0JdW5zaWduZWQgY2hhciAgbGFzdF9jbWRbT1VUUFVUX0NNRF9TSVpFXTsKLQl1bnNpZ25lZCBjaGFyICBzY3JlZW5bMzJdOworCWludCBldmVudDsJCS8qIGFsdGVybmF0ZSBpbnRlcmZhY2UgdG8gZXZlbnRzICovCisJaW50IGZhZGVyOwkJLyogMTAgYml0cyAqLworCWludCBsaWdodHM7CQkvKiAyMyBiaXRzICovCisJdW5zaWduZWQgY2hhciBkdW1wX3N0YXRlOwkvKiAwIGlmIGRpc2FibGVkIDEgaWYgZW5hYmxlZCAqLworCXVuc2lnbmVkIGNoYXIgZW5hYmxlOwkvKiAwIGlmIGRpc2FibGVkIDEgaWYgZW5hYmxlZCAqLworCXVuc2lnbmVkIGNoYXIgb2ZmbGluZTsJLyogaWYgdGhlIGRldmljZSBpcyBvdXQgb2YgcmFuZ2Ugb3IgYXNsZWVwICovCisJdW5zaWduZWQgY2hhciB2ZXJib3NlOwkvKiBiZSB2ZXJib3NlIGluIGVycm9yIHJlcG9ydGluZyAqLworCXVuc2lnbmVkIGNoYXIgbGFzdF9jbWRbT1VUUFVUX0NNRF9TSVpFXTsKKwl1bnNpZ25lZCBjaGFyIHNjcmVlblszMl07CiB9OwogCiAvKiBwcmV2ZW50IHJhY2VzIGJldHdlZW4gb3BlbigpIGFuZCBkaXNjb25uZWN0KCkgKi8KQEAgLTIxOSw3ICsyMTEsNyBAQAogCWtmcmVlKGRldi0+cmluZ19idWZmZXIpOwogCWtmcmVlKGRldi0+aW50ZXJydXB0X2luX2J1ZmZlcik7CiAJa2ZyZWUoZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcik7Ci0Ja2ZyZWUoZGV2KTsgLy8gZml4bWUgb2xkaV9idWZmZXIKKwlrZnJlZShkZXYpOwkJLyogZml4bWUgb2xkaV9idWZmZXIgKi8KIH0KIAogLyoqCkBAIC0yMzQsMzkgKzIyNiw1MiBAQAogCiAJaWYgKHVyYi0+c3RhdHVzKSB7CiAJCWlmICh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8Ci0JCSAgICB1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCB8fAotCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikgeworCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikgewogCQkJZ290byBleGl0OwogCQl9IGVsc2UgewotCQkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IG5vbnplcm8gc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKLQkJCQkgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKLQkJCWdvdG8gcmVzdWJtaXQ7IC8qIG1heWJlIHdlIGNhbiByZWNvdmVyICovCisJCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsCisJCQkJICIlczogbm9uemVybyBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLCBfX2Z1bmNfXywKKwkJCQkgdXJiLT5zdGF0dXMpOworCQkJZ290byByZXN1Ym1pdDsJLyogbWF5YmUgd2UgY2FuIHJlY292ZXIgKi8KIAkJfQogCX0KIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gSU5QVVRfQ01EX1NJWkUpIHsKIAkJZGV2X3dhcm4oJmRldi0+aW50Zi0+ZGV2LAotCQkJICJVcmIgbGVuZ3RoIHdhcyAlZCBieXRlcyEhIERvIHNvbWV0aGluZyBpbnRlbGxpZ2VudCBcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQkgIlVyYiBsZW5ndGggd2FzICVkIGJ5dGVzISEiCisJCQkgIkRvIHNvbWV0aGluZyBpbnRlbGxpZ2VudCBcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfSBlbHNlIHsKLQkJIGFscGhhdHJhY2tfb2NtZF9pbmZvKCZkZXYtPmludGYtPmRldiwmKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kLCIlcyIsICJibGEiKTsKLQkJIGlmKG1lbWNtcChkZXYtPmludGVycnVwdF9pbl9idWZmZXIsZGV2LT5vbGRpX2J1ZmZlcixJTlBVVF9DTURfU0laRSk9PTApIHsKLQkJCQkJCWdvdG8gcmVzdWJtaXQ7CisJCWFscGhhdHJhY2tfb2NtZF9pbmZvKCZkZXYtPmludGYtPmRldiwKKwkJCQkgICAgICYoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWQsCisJCQkJICAgICAiJXMiLCAiYmxhIik7CisJCWlmIChtZW1jbXAKKwkJICAgIChkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIGRldi0+b2xkaV9idWZmZXIsCisJCSAgICAgSU5QVVRfQ01EX1NJWkUpID09IDApIHsKKwkJCWdvdG8gcmVzdWJtaXQ7CiAJCX0KLQkJbWVtY3B5KGRldi0+b2xkaV9idWZmZXIsZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLElOUFVUX0NNRF9TSVpFKTsKKwkJbWVtY3B5KGRldi0+b2xkaV9idWZmZXIsIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlciwKKwkJICAgICAgIElOUFVUX0NNRF9TSVpFKTsKIAogI2lmIFNVUFBSRVNTX0VYVFJBX09GRkxJTkVfRVZFTlRTCi0JaWYoZGV2LT5vZmZsaW5lID09IDIgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdID09IDB4ZmYpIHsgZ290byByZXN1Ym1pdDsgfQotCQlpZihkZXYtPm9mZmxpbmUgPT0gMSAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikgeyBkZXYtPm9mZmxpbmUgPSAyOyBnb3RvIHJlc3VibWl0OyB9CisJCWlmIChkZXYtPm9mZmxpbmUgPT0gMiAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikKKwkJCWdvdG8gcmVzdWJtaXQ7CisJCWlmIChkZXYtPm9mZmxpbmUgPT0gMSAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikgeworCQkJZGV2LT5vZmZsaW5lID0gMjsKKwkJCWdvdG8gcmVzdWJtaXQ7CisJCX0KIC8qIEFsd2F5cyBwYXNzIG9uZSBvZmZsaW5lIGV2ZW50IHVwIHRoZSBzdGFjayAqLwotCQlpZihkZXYtPm9mZmxpbmUgPiAwICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSAhPSAweGZmKSB7IGRldi0+b2ZmbGluZSA9IDA7IH0KLQkJaWYoZGV2LT5vZmZsaW5lID09IDAgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdID09IDB4ZmYpIHsgZGV2LT5vZmZsaW5lID0gMTsgfQorCQlpZiAoZGV2LT5vZmZsaW5lID4gMCAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gIT0gMHhmZikKKwkJCWRldi0+b2ZmbGluZSA9IDA7CisJCWlmIChkZXYtPm9mZmxpbmUgPT0gMCAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikKKwkJCWRldi0+b2ZmbGluZSA9IDE7CiAjZW5kaWYKLQkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGhlYWQsIHRhaWwgYXJlICV4LCAleFxuIiwgX19mdW5jX18sZGV2LT5yaW5nX2hlYWQsZGV2LT5yaW5nX3RhaWwpOwotCQluZXh0X3JpbmdfaGVhZCA9IChkZXYtPnJpbmdfaGVhZCsxKSAlIHJpbmdfYnVmZmVyX3NpemU7CisJCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsCisJCQkgX19mdW5jX18sIGRldi0+cmluZ19oZWFkLCBkZXYtPnJpbmdfdGFpbCk7CisJCW5leHRfcmluZ19oZWFkID0gKGRldi0+cmluZ19oZWFkICsgMSkgJSByaW5nX2J1ZmZlcl9zaXplOwogCiAJCWlmIChuZXh0X3JpbmdfaGVhZCAhPSBkZXYtPnJpbmdfdGFpbCkgewogCQkJbWVtY3B5KCYoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfaGVhZF0pLAotCQkJCQkJIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlciwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCSAgICAgICBkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQlkZXYtPnJpbmdfaGVhZCA9IG5leHRfcmluZ19oZWFkOwogCQkJcmV0dmFsID0gMDsKIAkJCW1lbXNldChkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIDAsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CkBAIC0zMzAsNyArMzM1LDcgQEAKIAogCWlmICghaW50ZXJmYWNlKSB7CiAJCWVycigiJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkXG4iLAotCQkgICAgIF9fZnVuY19fLCBzdWJtaW5vcik7CisJCSAgICBfX2Z1bmNfXywgc3VibWlub3IpOwogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIHVubG9ja19kaXNjb25uZWN0X2V4aXQ7CiAJfQpAQCAtMzYxLDExICszNjYsMTEgQEAKIAl1c2JfZmlsbF9pbnRfdXJiKGRldi0+aW50ZXJydXB0X2luX3VyYiwKIAkJCSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSksCiAJCQkgdXNiX3JjdmludHBpcGUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpLAotCQkJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJCWRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT4KKwkJCQkJYkVuZHBvaW50QWRkcmVzcyksCiAJCQkgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAogCQkJIGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUsCi0JCQkgdXNiX2FscGhhdHJhY2tfaW50ZXJydXB0X2luX2NhbGxiYWNrLAotCQkJIGRldiwKKwkJCSB1c2JfYWxwaGF0cmFja19pbnRlcnJ1cHRfaW5fY2FsbGJhY2ssIGRldiwKIAkJCSBkZXYtPmludGVycnVwdF9pbl9pbnRlcnZhbCk7CiAKIAlkZXYtPmludGVycnVwdF9pbl9ydW5uaW5nID0gMTsKQEAgLTM3NSw3ICszODAsOCBAQAogCiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGRuJ3Qgc3VibWl0IGludGVycnVwdF9pbl91cmIgJWRcbiIsIHJldHZhbCk7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LAorCQkJIkNvdWxkbid0IHN1Ym1pdCBpbnRlcnJ1cHRfaW5fdXJiICVkXG4iLCByZXR2YWwpOwogCQlkZXYtPmludGVycnVwdF9pbl9ydW5uaW5nID0gMDsKIAkJZGV2LT5vcGVuX2NvdW50ID0gMDsKIAkJZ290byB1bmxvY2tfZXhpdDsKQEAgLTM4NCw3ICszOTAsNiBAQAogCS8qIHNhdmUgZGV2aWNlIGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CiAKLQogdW5sb2NrX2V4aXQ6CiAJdXAoJmRldi0+c2VtKTsKIApAQCAtNDMwLDcgKzQzNSw5IEBACiAKIAkvKiB3YWl0IHVudGlsIHdyaXRlIHRyYW5zZmVyIGlzIGZpbmlzaGVkICovCiAJaWYgKGRldi0+aW50ZXJydXB0X291dF9idXN5KQotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChkZXYtPndyaXRlX3dhaXQsICFkZXYtPmludGVycnVwdF9vdXRfYnVzeSwgMiAqIEhaKTsKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZGV2LT53cml0ZV93YWl0LAorCQkJCQkJICFkZXYtPmludGVycnVwdF9vdXRfYnVzeSwKKwkJCQkJCSAyICogSFopOwogCXVzYl9hbHBoYXRyYWNrX2Fib3J0X3RyYW5zZmVycyhkZXYpOwogCWRldi0+b3Blbl9jb3VudCA9IDA7CiAKQEAgLTQ0NCw3ICs0NTEsNyBAQAogLyoqCiAgKgl1c2JfYWxwaGF0cmFja19wb2xsCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX2FscGhhdHJhY2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX2FscGhhdHJhY2tfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCiB7CiAJc3RydWN0IHVzYl9hbHBoYXRyYWNrICpkZXY7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwpAQCAtNDY1LDggKzQ3Miw4IEBACiAvKioKICAqCXVzYl9hbHBoYXRyYWNrX3JlYWQKICAqLwotc3RhdGljIHNzaXplX3QgdXNiX2FscGhhdHJhY2tfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LAotCQkJICAgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3QgdXNiX2FscGhhdHJhY2tfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdXNiX2FscGhhdHJhY2sgKmRldjsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTQ5MywzMCArNTAwLDM2IEBACiAJfQogCiAJd2hpbGUgKGRldi0+cmluZ19oZWFkID09IGRldi0+cmluZ190YWlsKSB7Ci0JCQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJCQkJCQkJcmV0dmFsID0gLUVBR0FJTjsKLQkJCQkJCQkJCWdvdG8gdW5sb2NrX2V4aXQ7Ci0JCQkJCX0KLQkJCQkJZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSA9IDAgOwotCQkJCQlyZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2LT5yZWFkX3dhaXQsIGRldi0+aW50ZXJydXB0X2luX2RvbmUpOwotCQkJCQlpZiAocmV0dmFsIDwgMCkgewotCQkJCQkJCQkJZ290byB1bmxvY2tfZXhpdDsKLQkJCQkJfQorCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXJldHZhbCA9IC1FQUdBSU47CisJCQlnb3RvIHVubG9ja19leGl0OworCQl9CisJCWRldi0+aW50ZXJydXB0X2luX2RvbmUgPSAwOworCQlyZXR2YWwgPQorCQkgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+cmVhZF93YWl0LAorCQkJCQkgICAgIGRldi0+aW50ZXJydXB0X2luX2RvbmUpOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWdvdG8gdW5sb2NrX2V4aXQ7CiAJfQogCi0JYWxwaGF0cmFja19vY21kX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAmKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kLCAiJXMiLCAiOiBjb3B5aW5nIHRvIHVzZXJzcGFjZSIpOworCWFscGhhdHJhY2tfb2NtZF9pbmZvKCZkZXYtPmludGYtPmRldiwKKwkJCSAgICAgJigqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZCwgIiVzIiwKKwkJCSAgICAgIjogY29weWluZyB0byB1c2Vyc3BhY2UiKTsKIAotCSAgIGMgPSAwOwotCSAgIHdoaWxlKChjIDwgY291bnQpICYmIChkZXYtPnJpbmdfdGFpbCAhPSBkZXYtPnJpbmdfaGVhZCkpIHsKLQkJCQkJCSBpZiAoY29weV90b191c2VyKCZidWZmZXJbY10sICYoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXSwgSU5QVVRfQ01EX1NJWkUpKSB7Ci0JCQkJCQkJCQkJIHJldHZhbCA9IC1FRkFVTFQ7Ci0JCQkJCQkJCQkJIGdvdG8gdW5sb2NrX2V4aXQ7Ci0JCQkJCQkgfQotCQkJCQkJIGRldi0+cmluZ190YWlsID0gKGRldi0+cmluZ190YWlsKzEpICUgcmluZ19idWZmZXJfc2l6ZTsKLQkJCQkJCSBjKz1JTlBVVF9DTURfU0laRTsKLQkJCQkJCSBkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogaGVhZCwgdGFpbCBhcmUgJXgsICV4XG4iLCBfX2Z1bmNfXyxkZXYtPnJpbmdfaGVhZCxkZXYtPnJpbmdfdGFpbCk7Ci0JICAgfQotCSAgIHJldHZhbCA9IGM7CisJYyA9IDA7CisJd2hpbGUgKChjIDwgY291bnQpICYmIChkZXYtPnJpbmdfdGFpbCAhPSBkZXYtPnJpbmdfaGVhZCkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcgorCQkgICAgKCZidWZmZXJbY10sICYoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXSwKKwkJICAgICBJTlBVVF9DTURfU0laRSkpIHsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIHVubG9ja19leGl0OworCQl9CisJCWRldi0+cmluZ190YWlsID0gKGRldi0+cmluZ190YWlsICsgMSkgJSByaW5nX2J1ZmZlcl9zaXplOworCQljICs9IElOUFVUX0NNRF9TSVpFOworCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogaGVhZCwgdGFpbCBhcmUgJXgsICV4XG4iLAorCQkJIF9fZnVuY19fLCBkZXYtPnJpbmdfaGVhZCwgZGV2LT5yaW5nX3RhaWwpOworCX0KKwlyZXR2YWwgPSBjOwogCiB1bmxvY2tfZXhpdDoKIAkvKiB1bmxvY2sgdGhlIGRldmljZSAqLwpAQCAtNTI5LDggKzU0Miw5IEBACiAvKioKICAqCXVzYl9hbHBoYXRyYWNrX3dyaXRlCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHVzYl9hbHBoYXRyYWNrX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3QgdXNiX2FscGhhdHJhY2tfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwKKwkJCQkgICAgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB1c2JfYWxwaGF0cmFjayAqZGV2OwogCXNpemVfdCBieXRlc190b193cml0ZTsKQEAgLTU2MSwxOSArNTc1LDI0IEBACiAJCQlyZXR2YWwgPSAtRUFHQUlOOwogCQkJZ290byB1bmxvY2tfZXhpdDsKIAkJfQotCQlyZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2LT53cml0ZV93YWl0LCAhZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpOwotCQlpZiAocmV0dmFsIDwgMCkgeworCQlyZXR2YWwgPQorCQkgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+d3JpdGVfd2FpdCwKKwkJCQkJICAgICAhZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpOworCQlpZiAocmV0dmFsIDwgMCkKIAkJCWdvdG8gdW5sb2NrX2V4aXQ7Ci0JCX0KIAl9CiAKIAkvKiB3cml0ZSB0aGUgZGF0YSBpbnRvIGludGVycnVwdF9vdXRfYnVmZmVyIGZyb20gdXNlcnNwYWNlICovCi0gIC8qIEZJWE1FIC0gaWYgeW91IHdyaXRlIG1vcmUgdGhhbiAxMiBieXRlcyB0aGlzIGJyZWFrcyAqLwotCWJ5dGVzX3RvX3dyaXRlID0gbWluKGNvdW50LCB3cml0ZV9idWZmZXJfc2l6ZSpkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZSk7CisJLyogRklYTUUgLSBpZiB5b3Ugd3JpdGUgbW9yZSB0aGFuIDEyIGJ5dGVzIHRoaXMgYnJlYWtzICovCisJYnl0ZXNfdG9fd3JpdGUgPQorCSAgICBtaW4oY291bnQsIHdyaXRlX2J1ZmZlcl9zaXplICogZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUpOwogCWlmIChieXRlc190b193cml0ZSA8IGNvdW50KQotCQlkZXZfd2FybigmZGV2LT5pbnRmLT5kZXYsICJXcml0ZSBidWZmZXIgb3ZlcmZsb3csICV6ZCBieXRlcyBkcm9wcGVkXG4iLGNvdW50LWJ5dGVzX3RvX3dyaXRlKTsKKwkJZGV2X3dhcm4oJmRldi0+aW50Zi0+ZGV2LAorCQkJICJXcml0ZSBidWZmZXIgb3ZlcmZsb3csICV6ZCBieXRlcyBkcm9wcGVkXG4iLAorCQkJIGNvdW50IC0gYnl0ZXNfdG9fd3JpdGUpOwogCi0JZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGNvdW50ID0gJXpkLCBieXRlc190b193cml0ZSA9ICV6ZFxuIiwgX19mdW5jX18sIGNvdW50LCBieXRlc190b193cml0ZSk7CisJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGNvdW50ID0gJXpkLCBieXRlc190b193cml0ZSA9ICV6ZFxuIiwKKwkJIF9fZnVuY19fLCBjb3VudCwgYnl0ZXNfdG9fd3JpdGUpOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGRldi0+aW50ZXJydXB0X291dF9idWZmZXIsIGJ1ZmZlciwgYnl0ZXNfdG9fd3JpdGUpKSB7CiAJCXJldHZhbCA9IC1FRkFVTFQ7CkBAIC01ODksMTEgKzYwOCwxMCBAQAogCXVzYl9maWxsX2ludF91cmIoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiwKIAkJCSBpbnRlcmZhY2VfdG9fdXNiZGV2KGRldi0+aW50ZiksCiAJCQkgdXNiX3NuZGludHBpcGUoaW50ZXJmYWNlX3RvX3VzYmRldihkZXYtPmludGYpLAotCQkJCQlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAotCQkJIGRldi0+aW50ZXJydXB0X291dF9idWZmZXIsCi0JCQkgYnl0ZXNfdG9fd3JpdGUsCi0JCQkgdXNiX2FscGhhdHJhY2tfaW50ZXJydXB0X291dF9jYWxsYmFjaywKLQkJCSBkZXYsCisJCQkJCWRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+CisJCQkJCWJFbmRwb2ludEFkZHJlc3MpLAorCQkJIGRldi0+aW50ZXJydXB0X291dF9idWZmZXIsIGJ5dGVzX3RvX3dyaXRlLAorCQkJIHVzYl9hbHBoYXRyYWNrX2ludGVycnVwdF9vdXRfY2FsbGJhY2ssIGRldiwKIAkJCSBkZXYtPmludGVycnVwdF9vdXRfaW50ZXJ2YWwpOwogCWRldi0+aW50ZXJydXB0X291dF9idXN5ID0gMTsKIAlhdG9taWNfaW5jKCZkZXYtPndyaXRlc19wZW5kaW5nKTsKQEAgLTYxOCwxMiArNjM2LDEyIEBACiAKIC8qIGZpbGUgb3BlcmF0aW9ucyBuZWVkZWQgd2hlbiB3ZSByZWdpc3RlciB0aGlzIGRyaXZlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX2FscGhhdHJhY2tfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkucmVhZCAgPQl1c2JfYWxwaGF0cmFja19yZWFkLAotCS53cml0ZSA9CXVzYl9hbHBoYXRyYWNrX3dyaXRlLAotCS5vcGVuID0JCXVzYl9hbHBoYXRyYWNrX29wZW4sCi0JLnJlbGVhc2UgPQl1c2JfYWxwaGF0cmFja19yZWxlYXNlLAotCS5wb2xsID0JCXVzYl9hbHBoYXRyYWNrX3BvbGwsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgPSB1c2JfYWxwaGF0cmFja19yZWFkLAorCS53cml0ZSA9IHVzYl9hbHBoYXRyYWNrX3dyaXRlLAorCS5vcGVuID0gdXNiX2FscGhhdHJhY2tfb3BlbiwKKwkucmVsZWFzZSA9IHVzYl9hbHBoYXRyYWNrX3JlbGVhc2UsCisJLnBvbGwgPSB1c2JfYWxwaGF0cmFja19wb2xsLAogfTsKIAogLyoKQEAgLTYzMiwxOSArNjUwLDE5IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIHVzYl9hbHBoYXRyYWNrX2NsYXNzID0gewotCS5uYW1lID0JCSJhbHBoYXRyYWNrJWQiLAotCS5mb3BzID0JCSZ1c2JfYWxwaGF0cmFja19mb3BzLAotCS5taW5vcl9iYXNlID0JVVNCX0FMUEhBVFJBQ0tfTUlOT1JfQkFTRSwKKwkubmFtZSA9ICJhbHBoYXRyYWNrJWQiLAorCS5mb3BzID0gJnVzYl9hbHBoYXRyYWNrX2ZvcHMsCisJLm1pbm9yX2Jhc2UgPSBVU0JfQUxQSEFUUkFDS19NSU5PUl9CQVNFLAogfTsKIAotCiAvKioKICAqCXVzYl9hbHBoYXRyYWNrX3Byb2JlCiAgKgogICoJQ2FsbGVkIGJ5IHRoZSB1c2IgY29yZSB3aGVuIGEgbmV3IGRldmljZSBpcyBjb25uZWN0ZWQgdGhhdCBpdCB0aGlua3MKICAqCXRoaXMgZHJpdmVyIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4uCiAgKi8KLXN0YXRpYyBpbnQgdXNiX2FscGhhdHJhY2tfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgdXNiX2FscGhhdHJhY2tfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKIAlzdHJ1Y3QgdXNiX2FscGhhdHJhY2sgKmRldiA9IE5VTEw7CkBAIC02ODMsMjggKzcwMSwzNSBAQAogCQlnb3RvIGVycm9yOwogCX0KIAlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50ID09IE5VTEwpCi0JCWRldl93YXJuKCZpbnRmLT5kZXYsICJJbnRlcnJ1cHQgb3V0IGVuZHBvaW50IG5vdCBmb3VuZCAodXNpbmcgY29udHJvbCBlbmRwb2ludCBpbnN0ZWFkKVxuIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkgIkludGVycnVwdCBvdXQgZW5kcG9pbnQgbm90IGZvdW5kIgorCQkJICIodXNpbmcgY29udHJvbCBlbmRwb2ludCBpbnN0ZWFkKVxuIik7CiAKLQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplID0gbGUxNl90b19jcHUoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplID0KKwkgICAgbGUxNl90b19jcHUoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKIAogCWlmIChkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplICE9IDY0KQotCSAgICBkZXZfd2FybigmaW50Zi0+ZGV2LCAiSW50ZXJydXB0IGluIGVuZHBvaW50IHNpemUgaXMgbm90IDY0IVxuIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJJbnRlcnJ1cHQgaW4gZW5kcG9pbnQgc2l6ZSBpcyBub3QgNjQhXG4iKTsKIAotCWlmKHJpbmdfYnVmZmVyX3NpemUgPT0gMCkgeyByaW5nX2J1ZmZlcl9zaXplID0gUklOR19CVUZGRVJfU0laRTsgfQorCWlmIChyaW5nX2J1ZmZlcl9zaXplID09IDApCisJCXJpbmdfYnVmZmVyX3NpemUgPSBSSU5HX0JVRkZFUl9TSVpFOwogCi0JdHJ1ZV9zaXplID0gbWluKHJpbmdfYnVmZmVyX3NpemUsUklOR19CVUZGRVJfU0laRSk7CisJdHJ1ZV9zaXplID0gbWluKHJpbmdfYnVmZmVyX3NpemUsIFJJTkdfQlVGRkVSX1NJWkUpOwogCi0JLyogRklYTUUgLSB0aGVyZSBhcmUgbW9yZSB1c2JfYWxsb2Mgcm91dGluZXMgZm9yIGRtYSBjb3JyZWN0bmVzcy4gTmVlZGVkPyAqLwotCi0vLwlkZXYtPnJpbmdfYnVmZmVyID0ga21hbGxvYygodHJ1ZV9zaXplKnNpemVvZihzdHJ1Y3QgYWxwaGF0cmFja19pY21kKSkrMTIsIEdGUF9LRVJORUwpOwotCWRldi0+cmluZ19idWZmZXIgPSBrbWFsbG9jKCh0cnVlX3NpemUqc2l6ZW9mKHN0cnVjdCBhbHBoYXRyYWNrX2ljbWQpKSwgR0ZQX0tFUk5FTCk7CisJLyogRklYTUUgLSB0aGVyZSBhcmUgbW9yZSB1c2JfYWxsb2Mgcm91dGluZXMgZm9yIGRtYSBjb3JyZWN0bmVzcy4KKwkgICBOZWVkZWQ/ICovCisJZGV2LT5yaW5nX2J1ZmZlciA9CisJICAgIGttYWxsb2MoKHRydWVfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgYWxwaGF0cmFja19pY21kKSksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFkZXYtPnJpbmdfYnVmZmVyKSB7Ci0JCWRldl9lcnIoJmludGYtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGlucHV0IHJpbmdfYnVmZmVyIG9mIHNpemUgJWRcbiIsdHJ1ZV9zaXplKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LAorCQkJIkNvdWxkbid0IGFsbG9jYXRlIGlucHV0IHJpbmdfYnVmZmVyIG9mIHNpemUgJWRcbiIsCisJCQl0cnVlX3NpemUpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWRldi0+aW50ZXJydXB0X2luX2J1ZmZlciA9IGttYWxsb2MoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyID0KKwkgICAga21hbGxvYyhkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmICghZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9pbl9idWZmZXJcbiIpOwpAQCAtNzIxLDIzICs3NDYsMzAgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZSA9IGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCA/IGxlMTZfdG9fY3B1KGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+d01heFBhY2tldFNpemUpIDoKLQkJCQkJCQkJCSB1ZGV2LT5kZXNjcmlwdG9yLmJNYXhQYWNrZXRTaXplMDsKKwlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZSA9CisJICAgIGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCA/IGxlMTZfdG9fY3B1KGRldi0+CisJCQkJCQkgICAgICBpbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT4KKwkJCQkJCSAgICAgIHdNYXhQYWNrZXRTaXplKSA6IHVkZXYtPgorCSAgICBkZXNjcmlwdG9yLmJNYXhQYWNrZXRTaXplMDsKIAotCWlmIChkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZSAhPTY0KQotCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiSW50ZXJydXB0IG91dCBlbmRwb2ludCBzaXplIGlzIG5vdCA2NCEpXG4iKTsKKwlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUgIT0gNjQpCisJCWRldl93YXJuKCZpbnRmLT5kZXYsCisJCQkgIkludGVycnVwdCBvdXQgZW5kcG9pbnQgc2l6ZSBpcyBub3QgNjQhKVxuIik7CiAKLQlpZih3cml0ZV9idWZmZXJfc2l6ZSA9PSAwKSB7IHdyaXRlX2J1ZmZlcl9zaXplID0gV1JJVEVfQlVGRkVSX1NJWkU7IH0KLQl0cnVlX3NpemUgPSBtaW4od3JpdGVfYnVmZmVyX3NpemUsV1JJVEVfQlVGRkVSX1NJWkUpOworCWlmICh3cml0ZV9idWZmZXJfc2l6ZSA9PSAwKQorCQl3cml0ZV9idWZmZXJfc2l6ZSA9IFdSSVRFX0JVRkZFUl9TSVpFOworCXRydWVfc2l6ZSA9IG1pbih3cml0ZV9idWZmZXJfc2l6ZSwgV1JJVEVfQlVGRkVSX1NJWkUpOwogCi0JZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciA9IGttYWxsb2ModHJ1ZV9zaXplKmRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplLCBHRlBfS0VSTkVMKTsKKwlkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyID0KKwkgICAga21hbGxvYyh0cnVlX3NpemUgKiBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWRldi0+aW50ZXJydXB0X291dF9idWZmZXIpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X291dF9idWZmZXJcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWRldi0+d3JpdGVfYnVmZmVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFscGhhdHJhY2tfb2NtZCkqdHJ1ZV9zaXplLCBHRlBfS0VSTkVMKTsKKwlkZXYtPndyaXRlX2J1ZmZlciA9CisJICAgIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbHBoYXRyYWNrX29jbWQpICogdHJ1ZV9zaXplLCBHRlBfS0VSTkVMKTsKIAogCWlmICghZGV2LT53cml0ZV9idWZmZXIpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgd3JpdGVfYnVmZmVyIFxuIik7CkBAIC03NDksMjUgKzc4MSwzNiBAQAogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfb3V0X3VyYlxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWRldi0+aW50ZXJydXB0X2luX2ludGVydmFsID0gbWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCA+IGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT5iSW50ZXJ2YWwgPyBtaW5faW50ZXJydXB0X2luX2ludGVydmFsIDogZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPmJJbnRlcnZhbDsKKwlkZXYtPmludGVycnVwdF9pbl9pbnRlcnZhbCA9CisJICAgIG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPgorCSAgICBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+CisJICAgIGJJbnRlcnZhbCA/IG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgOiBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+CisJICAgIGJJbnRlcnZhbDsKIAlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50KQotCQlkZXYtPmludGVycnVwdF9vdXRfaW50ZXJ2YWwgPSBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA+IGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+YkludGVydmFsID8gbWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwgOiBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJJbnRlcnZhbDsKKwkJZGV2LT5pbnRlcnJ1cHRfb3V0X2ludGVydmFsID0KKwkJICAgIG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsID4KKwkJICAgIGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+CisJCSAgICBiSW50ZXJ2YWwgPyBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA6IGRldi0+CisJCSAgICBpbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT5iSW50ZXJ2YWw7CiAKIAkvKiB3ZSBjYW4gcmVnaXN0ZXIgdGhlIGRldmljZSBub3csIGFzIGl0IGlzIHJlYWR5ICovCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOwogCi0JYXRvbWljX3NldCgmZGV2LT53cml0ZXNfcGVuZGluZywwKTsKKwlhdG9taWNfc2V0KCZkZXYtPndyaXRlc19wZW5kaW5nLCAwKTsKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfYWxwaGF0cmFja19jbGFzcyk7CiAJaWYgKHJldHZhbCkgewogCQkvKiBzb21ldGhpbmcgcHJldmVudGVkIHVzIGZyb20gcmVnaXN0ZXJpbmcgdGhpcyBkcml2ZXIgKi8KLQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yIHRoaXMgZGV2aWNlLlxuIik7CisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXG4iKTsKIAkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCi0JZGV2X2luZm8oJmludGYtPmRldiwgIkFscGhhdHJhY2sgRGV2aWNlICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgJWQgbWlub3IgJWRcbiIsCi0JCShpbnRmLT5taW5vciAtIFVTQl9BTFBIQVRSQUNLX01JTk9SX0JBU0UpLCBVU0JfTUFKT1IsIGludGYtPm1pbm9yKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LAorCQkgIkFscGhhdHJhY2sgRGV2aWNlICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgJWQgbWlub3IgJWRcbiIsCisJCSAoaW50Zi0+bWlub3IgLSBVU0JfQUxQSEFUUkFDS19NSU5PUl9CQVNFKSwgVVNCX01BSk9SLAorCQkgaW50Zi0+bWlub3IpOwogCiBleGl0OgogCXJldHVybiByZXR2YWw7CkBAIC04MDksNyArODUyLDcgQEAKIAkJdXAoJmRldi0+c2VtKTsKIAl9CiAKLQlhdG9taWNfc2V0KCZkZXYtPndyaXRlc19wZW5kaW5nLDApOworCWF0b21pY19zZXQoJmRldi0+d3JpdGVzX3BlbmRpbmcsIDApOwogCW11dGV4X3VubG9jaygmZGlzY29ubmVjdF9tdXRleCk7CiAKIAlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiQWxwaGF0cmFjayBTdXJmYWNlICMlZCBub3cgZGlzY29ubmVjdGVkXG4iLApAQCAtODE4LDEwICs4NjEsMTAgQEAKIAogLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVzYl9hbHBoYXRyYWNrX2RyaXZlciA9IHsKLQkubmFtZSA9CQkiYWxwaGF0cmFjayIsCi0JLnByb2JlID0JdXNiX2FscGhhdHJhY2tfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPQl1c2JfYWxwaGF0cmFja19kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9CXVzYl9hbHBoYXRyYWNrX3RhYmxlLAorCS5uYW1lID0gImFscGhhdHJhY2siLAorCS5wcm9iZSA9IHVzYl9hbHBoYXRyYWNrX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gdXNiX2FscGhhdHJhY2tfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSB1c2JfYWxwaGF0cmFja190YWJsZSwKIH07CiAKIC8qKgpAQCAtODM0LDcgKzg3Nyw4IEBACiAJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmdXNiX2FscGhhdHJhY2tfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiX19GSUxFX18iIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkXG4iLCByZXR2YWwpOworCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiIF9fRklMRV9fCisJCSAgICAiIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkXG4iLCByZXR2YWwpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTg1MCw0ICs4OTQsMyBAQAogCiBtb2R1bGVfaW5pdCh1c2JfYWxwaGF0cmFja19pbml0KTsKIG1vZHVsZV9leGl0KHVzYl9hbHBoYXRyYWNrX2V4aXQpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvYWxwaGF0cmFjay5oIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2FscGhhdHJhY2suaAppbmRleCAzNWM5MGE5Li4xMGE3OTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvYWxwaGF0cmFjay5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9hbHBoYXRyYWNrLmgKQEAgLTEsNDIgKzEsMzggQEAKLSNkZWZpbmUgc2hvd19zZXRfYml0KGEpIHNob3dfc2V0X21iaXQoYWxwaGF0cmFjayxhKQotI2RlZmluZSBzaG93X3NldF9jbWQoYSkgc2hvd19zZXRfbWNtZChhbHBoYXRyYWNrLGEpCi0jZGVmaW5lIHNob3dfc2V0X2ludChhKSBzaG93X3NldF9taW50KGFscGhhdHJhY2ssYSkKLSNkZWZpbmUgc2hvd19zZXRfY2hhcihhKSBzaG93X3NldF9tY2hhcihhbHBoYXRyYWNrLGEpCi0jZGVmaW5lIHNob3dfc2V0X2xpZ2h0KGEpIHNob3dfc2V0X2ViaXQoYWxwaGF0cmFjayxMaWdodElELGxpZ2h0cyxhKQotI2RlZmluZSBzaG93X3NldF9idXR0b24oYSkgc2hvd19zZXRfZWJpdChhbHBoYXRyYWNrLEJ1dHRvbklELGJ1dHRvbixhKQotCiBzdHJ1Y3QgYWxwaGF0cmFja19pY21kIHsKLSAgICB1bnNpZ25lZCBjaGFyIGNtZFsxMl07CisJdW5zaWduZWQgY2hhciBjbWRbMTJdOwogfTsKIAogc3RydWN0IGFscGhhdHJhY2tfb2NtZCB7Ci0gICAgdW5zaWduZWQgY2hhciBjbWRbOF07CisJdW5zaWduZWQgY2hhciBjbWRbOF07CiB9OwogCisvKiBUaGVzZSBhcmUgdW51c2VkIGJ5IHRoZSBwcmVzZW50IGRyaXZlciBidXQgcHJvdmlkZSBkb2N1bWVudGF0aW9uIGZvciB0aGUKKyAqIHVzZXJzcGFjZSBBUEkuCisgKi8KIGVudW0gTGlnaHRJRCB7Ci0gICAgICAgIExJR0hUX0VRID0gMCwKLSAgICAgICAgTElHSFRfT1VULAotICAgICAgICBMSUdIVF9GMiwKLSAgICAgICAgTElHSFRfU0VORCwKLSAgICAgICAgTElHSFRfSU4sCi0gICAgICAgIExJR0hUX0YxLAotICAgICAgICBMSUdIVF9QQU4sCi0gICAgICAgIExJR0hUX1VOREVGMSwKLSAgICAgICAgTElHSFRfVU5ERUYyLAotICAgICAgICBMSUdIVF9TSElGVCwKLSAgICAgICAgTElHSFRfVFJBQ0tNVVRFLAotICAgICAgICBMSUdIVF9UUkFDS1NPTE8sCi0gICAgICAgIExJR0hUX1RSQUNLUkVDLAotICAgICAgICBMSUdIVF9SRUFELAotICAgICAgICBMSUdIVF9XUklURSwKLSAgICAgICAgTElHSFRfQU5ZU09MTywKLSAgICAgICAgTElHSFRfQVVUTywKLSAgICAgICAgTElHSFRfRjQsCi0gICAgICAgIExJR0hUX1JFQ09SRCwKLSAgICAgICAgTElHSFRfV0lORE9XLAotICAgICAgICBMSUdIVF9QTFVHSU4sCi0gICAgICAgIExJR0hUX0YzLAotICAgICAgICBMSUdIVF9MT09QCisJTElHSFRfRVEgPSAwLAorCUxJR0hUX09VVCwKKwlMSUdIVF9GMiwKKwlMSUdIVF9TRU5ELAorCUxJR0hUX0lOLAorCUxJR0hUX0YxLAorCUxJR0hUX1BBTiwKKwlMSUdIVF9VTkRFRjEsCisJTElHSFRfVU5ERUYyLAorCUxJR0hUX1NISUZULAorCUxJR0hUX1RSQUNLTVVURSwKKwlMSUdIVF9UUkFDS1NPTE8sCisJTElHSFRfVFJBQ0tSRUMsCisJTElHSFRfUkVBRCwKKwlMSUdIVF9XUklURSwKKwlMSUdIVF9BTllTT0xPLAorCUxJR0hUX0FVVE8sCisJTElHSFRfRjQsCisJTElHSFRfUkVDT1JELAorCUxJR0hUX1dJTkRPVywKKwlMSUdIVF9QTFVHSU4sCisJTElHSFRfRjMsCisJTElHSFRfTE9PUAogfTsKIAogI2RlZmluZSBCVVRUT05NQVNLX0JBVFRFUlkgICAgIDB4MDAwMDQwMDAKQEAgLTYyLDggKzU4LDkgQEAKICNkZWZpbmUgQlVUVE9OTUFTS19QUkVTUzIgICAgICAweDAwMDA4MDEwCiAjZGVmaW5lIEJVVFRPTk1BU0tfUFJFU1MzICAgICAgMHgwMDAwMjAyMAogCi0vLyBsYXN0IDMgYnl0ZXMgYXJlIHRoZSBzbGlkZXIgcG9zaXRpb24KLS8vIDQwIGlzIHRoZSBhY3R1YWwgc2xpZGVyIG1vdmluZywgdGhlIG1vc3Qgc2lnIGJpdHMsIGFuZCAzIGxzYgorLyogbGFzdCAzIGJ5dGVzIGFyZSB0aGUgc2xpZGVyIHBvc2l0aW9uCisgKiA0MCBpcyB0aGUgYWN0dWFsIHNsaWRlciBtb3ZpbmcsIHRoZSBtb3N0IHNpZyBiaXRzLCBhbmQgMyBsc2IKKyAqLwogCiAjZGVmaW5lIEJVVFRPTk1BU0tfRkxJUCAgICAgICAgIDB4NDAwMDAwMDAKICNkZWZpbmUgQlVUVE9OTUFTS19GMSAgICAgICAgICAgMHgwMDEwMDAwMApAQCAtNzYsMTcgKzczLDQgQEAKICNkZWZpbmUgQlVUVE9OTUFTS19QTFVHSU4gICAgICAgMHgwMDAwMDQwMAogI2RlZmluZSBCVVRUT05NQVNLX0FVVE8gICAgICAgICAweDAwMDAwMTAwCiAKLQotLy8gI2RlZmluZSBCVVRUT05NQVNLX0ZPT1RTV0lUQ0ggRklYTUUKLQotLy8gTG9va3VwLiBuYW1lLiBtaWRpIG91dC4gbWlkaSBpbi4KLQotc3RydWN0IGJ1dHRvbm1hcF90IHsKLQl1MzIgbWFzazsKLQlzaG9ydCBtaWRpX2luOwotCXNob3J0IG1pZGlfb3V0OwotCWNoYXIgKm5hbWU7Ci0vLyAgCXZvaWQgKCpmdW5jdGlvbikgKGJ1dHRvbm1hcF90ICopOwotICAJdm9pZCAoKmZ1bmN0aW9uKSAodm9pZCk7Ci19OwotCisvKiAjZGVmaW5lIEJVVFRPTk1BU0tfRk9PVFNXSVRDSCBGSVhNRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2Zyb250aWVyX2NvbXBhdC5oIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2Zyb250aWVyX2NvbXBhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDQ1MGU2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9mcm9udGllcl9jb21wYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qIFVTQiBkZWZpbmVzIGZvciBvbGRlciBrZXJuZWxzICovCi0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfZGlyX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgT1VUIGRpcmVjdGlvbgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBPVVQsIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9kaXJfb3V0KGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotICAgICAgIHJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfZGlyX2luKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotICAgICAgIHJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9JTik7Ci19Ci0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfeGZlcl9pbnQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGludGVycnVwdCwgb3RoZXJ3aXNlIGl0IHJldHVybnMKLSAqIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9pbnQoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0gICAgICAgcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLSAgICAgICAgICAgICAgIFVTQl9FTkRQT0lOVF9YRkVSX0lOVCk7Ci19Ci0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfaXNfaW50X2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBJTgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X2luKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotICAgICAgIHJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfaXNfaW50X291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgT1VUCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X291dChjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLSAgICAgICByZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOwotfQotCi0jZW5kaWYgLyogb2xkZXIga2VybmVsIHZlcnNpb25zICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvc3VyZmFjZV9zeXNmcy5oIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3N1cmZhY2Vfc3lzZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUwYTU2MmQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3N1cmZhY2Vfc3lzZnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKiBJZiB5b3UgYXJlIGdvaW5nIHRvIGFidXNlIHRoZSBwcmVwcm9jZXNzb3IsIHdoeSBub3QgQUJVU0UgdGhlIHByZXByb2Nlc3Nvcj8KLSAgIEkgc3R1Y2sgdGhpcyBoZWFkZXIgaW4gYSBzZXBhcmF0ZSBmaWxlIHNvIEkgZG9uJ3QgaGF2ZSB0byBsb29rIGF0IGl0ICovCi0KLS8vIEZJWE1FIE5lZWQgbG9ja2luZyBvciBhdG9taWMgb3BzCi0KLSNkZWZpbmUgc2hvd19zZXRfbWJpdChkbmFtZSx2YWx1ZSxiaXQpCQkJCQkJCQkJCQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfIyNkbmFtZSAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAotCWludCB0ZW1wID0gKDEgJiYgKHQtPnZhbHVlICYgKDEgPDwgYml0KSkpOwkJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wKTsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl8jI2RuYW1lICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JaW50IHRlbXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCQlcCi0JaWYodGVtcCA+IDApIHsgbG9uZyBiID0gMSA8PCBiaXQ7IHQtPnZhbHVlIHw9IGI7IH0gXAotCWVsc2UgeyBsb25nIGIgPSB+KDEgPDwgYml0KTsgdC0+dmFsdWUgJj0gYiA7CQkJCSBcCi0JcmV0dXJuIGNvdW50OwkJCQkJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywgc2hvd18jI3ZhbHVlLCBzZXRfIyN2YWx1ZSk7Ci0KLSNkZWZpbmUgc2hvd19zZXRfZWJpdChkbmFtZSxlbnVtbmFtZSx2YWx1ZSxiaXQpCQkJCQkJCQkJCQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyNiaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiXyMjZG5hbWUgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLSAgZW51bSBlbnVtbmFtZSBsID0gYml0OyBcCi0gIGludCB0ZW1wID0gdC0+dmFsdWUgJiAoMSA8PCBsKTsJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXApOwkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfIyNiaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl8jI2RuYW1lICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JaW50IHRlbXAgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsJCQlcCi0gIGVudW0gZW51bW5hbWUgbCA9IGJpdDtcCi0JbG9uZyBiICA9IDEgPDwgbDsgXAotCWlmKHRlbXAgPiAwKSB7IHQtPnZhbHVlIHw9IGI7IH0JXAotCWVsc2UgeyB0LT52YWx1ZSAmPSB+YiA7CQkJCVwKLQlyZXR1cm4gY291bnQ7CQkJCQkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIodmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCBzaG93XyMjdmFsdWUsIHNldF8jI3ZhbHVlKTsKLQotLy8gRklYTUUgRk9SIENPUlJFQ1RMWSBTRVRUSU5HIEhFWCBmcm9tIGEgc3RyaW5nCi0jZGVmaW5lIHNob3dfc2V0X21jbWQoZG5hbWUsdmFsdWUpCQkJCQkJCQkJCQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfIyNkbmFtZSAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAotICBpbnQgY291bnQgPSAwO1wKLQlpbnQgaTsgXAotCWZvciAoaSA9IDAsaTxzaXplb2YoZG5hbWUpOyBpKyspIGNvdW50ICs9IHNucHJpbnRmKGJ1ZiwgIiUwMngiLHQtPmRuYW1lW2ldKTsgXAotICByZXR1cm4oY291bnQpO1wKLX0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiXyMjZG5hbWUgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKLQl0LT52YWx1ZSA9IHRlbXA7CQkJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOwotCi0jZGVmaW5lIHNob3dfc2V0X21pbnQoZG5hbWUsdmFsdWUpCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfIyNkbmFtZSAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0LT52YWx1ZSk7CQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfIyNkbmFtZSAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAotCWludCB0ZW1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQkJXAotCXQtPnZhbHVlID0gdGVtcDsJCQkJCQlcCi0JcmV0dXJuIGNvdW50OwkJCQkJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywgc2hvd18jI3ZhbHVlLCBzZXRfIyN2YWx1ZSk7Ci0KLSNkZWZpbmUgc2hvd19zZXRfbWNoYXIoZG5hbWUsdmFsdWUpCQkJCQkJCQkJCQkJCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiXyMjZG5hbWUgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlY1xuIiwgdC0+dmFsdWUpOwkJCVwKLX0JCQkJCQkJCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAotewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgdXNiXyMjZG5hbWUgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKLQl0LT52YWx1ZSA9IHRlbXA7CQkJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3RyYW56cG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3RyYW56cG9ydC5jCmluZGV4IDc5YWJiNmIuLjI3NGI4MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci90cmFuenBvcnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvdHJhbnpwb3J0LmMKQEAgLTE4LDcgKzE4LDcgQEAKICAqCiAgKi8KIAotLyoqCisvKgogICogVGhpcyBkcml2ZXIgdXNlcyBhIHJpbmcgYnVmZmVyIGZvciB0aW1lIGNyaXRpY2FsIHJlYWRpbmcgb2YKICAqIGludGVycnVwdCBpbiByZXBvcnRzIGFuZCBwcm92aWRlcyByZWFkIGFuZCB3cml0ZSBtZXRob2RzIGZvcgogICogcmF3IGludGVycnVwdCByZXBvcnRzLgpAQCAtMzAsNyArMzAsNyBAQAogICogYXMgd2Ugb25seSBoYXZlIDE3IGNvbW1hbmRzIGZvciB0aGUgdHJhbnpwb3J0LiBJbiBwYXJ0aWN1bGFyIHRoaXMgaXMKICAqIGtleSBmb3IgZ2V0dGluZyBsaWdodHMgdG8gZmxhc2ggaW4gdGltZSBhcyBvdGhlcndpc2UgbWFueSBjb21tYW5kcwogICogY2FuIGJlIGJ1ZmZlcmVkIHVwIGJlZm9yZSB0aGUgbGlnaHQgY2hhbmdlIG1ha2VzIGl0IHRvIHRoZSBpbnRlcmZhY2UuCi0qLworICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNDAsNTYgKzQwLDQ3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQotI2luY2x1ZGUgZnJvbnRpZXJfY29tcGF0LmgKLSNlbmRpZgotCiAvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlcyAqLwogI2RlZmluZSBWRU5ET1JfSUQgICAweDE2NWIKLSNkZWZpbmUgUFJPRFVDVF9JRAkweDgxMDEKKyNkZWZpbmUgUFJPRFVDVF9JRCAgMHg4MTAxCiAKICNpZmRlZiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTCiAjZGVmaW5lIFVTQl9UUkFOWlBPUlRfTUlOT1JfQkFTRQkwCi0jZWxzZQotLy8gRklYTUUgMTc2IC0gaXMgdGhlIGxkdXNiIGRyaXZlcidzIG1pbm9yIC0gYXBwbHkgZm9yIGEgbWlub3Igc29vbgorI2Vsc2UgIC8qIEZJWE1FIDE3Ny0gaXMgdGhlIGFub3RoZXIgZHJpdmVyJ3MgbWlub3IgLSBhcHBseSBmb3IgYSBtaW5vciBzb29uICovCiAjZGVmaW5lIFVTQl9UUkFOWlBPUlRfTUlOT1JfQkFTRQkxNzcKICNlbmRpZgogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX3RyYW56cG9ydF90YWJsZSBbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoVkVORE9SX0lELCBQUk9EVUNUX0lEKSB9LAotCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfdHJhbnpwb3J0X3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoVkVORE9SX0lELCBQUk9EVUNUX0lEKX0sCisJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHVzYl90cmFuenBvcnRfdGFibGUpOwotTU9EVUxFX1ZFUlNJT04oIjAuMzMiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjM1Iik7CiBNT0RVTEVfQVVUSE9SKCJNaWtlIFRhaHQgPG1AdGFodC5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlRyYW56cG9ydCBVU0IgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiRnJvbnRpZXIgRGVzaWducyBUcmFuenBvcnQgQ29udHJvbCBTdXJmYWNlIik7CiAKLS8qIFRoZXNlIHR3byBhcmVuJ3QgZG9uZSB5ZXQgKi8KLQotI2RlZmluZSBTVVBQUkVTU19FWFRSQV9PTkxJTkVfRVZFTlRTIDAKLSNkZWZpbmUgQlVGRkVSRURfV1JJVEVTIDAKLQogI2RlZmluZSBTVVBQUkVTU19FWFRSQV9PRkZMSU5FX0VWRU5UUyAxCiAjZGVmaW5lIENPTVBSRVNTX1dIRUVMX0VWRU5UUyAxCiAjZGVmaW5lIEJVRkZFUkVEX1JFQURTIDEKICNkZWZpbmUgUklOR19CVUZGRVJfU0laRSAxMDAwCiAjZGVmaW5lIFdSSVRFX0JVRkZFUl9TSVpFIDM0CiAjZGVmaW5lIFRSQU5aUE9SVF9VU0JfVElNRU9VVCAxMAorI2RlZmluZSBUUkFOWlBPUlRfREVCVUcgMAogCi0KLXN0YXRpYyBpbnQgZGVidWcgPSAwOworc3RhdGljIGludCBkZWJ1ZyA9IFRSQU5aUE9SVF9ERUJVRzsKIAogLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCi0jZGVmaW5lIGRiZ19pbmZvKGRldiwgZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKGRlYnVnKSBkZXZfaW5mbyhkZXYgLCBmb3JtYXQgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQorI2RlZmluZSBkYmdfaW5mbyhkZXYsIGZvcm1hdCwgYXJnLi4uKSBkbwkJCVwKKwl7IGlmIChkZWJ1ZykgZGV2X2luZm8oZGV2ICwgZm9ybWF0ICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KIApAQCAtMTAyLDEzICs5MywxMyBAQAogCiBzdGF0aWMgaW50IHJpbmdfYnVmZmVyX3NpemUgPSBSSU5HX0JVRkZFUl9TSVpFOwogCi1tb2R1bGVfcGFyYW0ocmluZ19idWZmZXJfc2l6ZSwgaW50LCAgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0ocmluZ19idWZmZXJfc2l6ZSwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MocmluZ19idWZmZXJfc2l6ZSwgIlJlYWQgcmluZyBidWZmZXIgc2l6ZSBpbiByZXBvcnRzIik7CiAKIC8qIFRoZSB3cml0ZV9idWZmZXIgY2FuIG9uZSBkYXkgY29udGFpbiBtb3JlIHRoYW4gb25lIGludGVycnVwdCBvdXQgdHJhbnNmZXIuCiAgKi8KIHN0YXRpYyBpbnQgd3JpdGVfYnVmZmVyX3NpemUgPSBXUklURV9CVUZGRVJfU0laRTsKLW1vZHVsZV9wYXJhbSh3cml0ZV9idWZmZXJfc2l6ZSwgaW50LCAgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0od3JpdGVfYnVmZmVyX3NpemUsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHdyaXRlX2J1ZmZlcl9zaXplLCAiV3JpdGUgYnVmZmVyIHNpemUiKTsKIAogLyoKQEAgLTExOCw2OSArMTA5LDQ4IEBACiAKIHN0YXRpYyBpbnQgbWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCA9IFRSQU5aUE9SVF9VU0JfVElNRU9VVDsKIG1vZHVsZV9wYXJhbShtaW5faW50ZXJydXB0X2luX2ludGVydmFsLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtaW5faW50ZXJydXB0X2luX2ludGVydmFsLCAiTWluaW11bSBpbnRlcnJ1cHQgaW4gaW50ZXJ2YWwgaW4gbXMiKTsKK01PRFVMRV9QQVJNX0RFU0MobWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCwKKwkJIk1pbmltdW0gaW50ZXJydXB0IGluIGludGVydmFsIGluIG1zIik7CiAKIHN0YXRpYyBpbnQgbWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwgPSBUUkFOWlBPUlRfVVNCX1RJTUVPVVQ7CiBtb2R1bGVfcGFyYW0obWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsLCAiTWluaW11bSBpbnRlcnJ1cHQgb3V0IGludGVydmFsIGluIG1zIik7CitNT0RVTEVfUEFSTV9ERVNDKG1pbl9pbnRlcnJ1cHRfb3V0X2ludGVydmFsLAorCQkiTWluaW11bSBpbnRlcnJ1cHQgb3V0IGludGVydmFsIGluIG1zIik7CiAKIHN0cnVjdCB0cmFuenBvcnRfY21kIHsKLSAgICB1bnNpZ25lZCBjaGFyIGNtZFs4XTsKKwl1bnNpZ25lZCBjaGFyIGNtZFs4XTsKIH07CiAKLWVudW0gTGlnaHRJRCB7Ci0JTGlnaHRSZWNvcmQgPSAwLAotCUxpZ2h0VHJhY2tyZWMsCi0JTGlnaHRUcmFja211dGUsCi0JTGlnaHRUcmFja3NvbG8sCi0JTGlnaHRBbnlzb2xvLAotCUxpZ2h0TG9vcCwKLQlMaWdodFB1bmNoCi0JfTsKLQogLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KIAogc3RydWN0IHVzYl90cmFuenBvcnQgewotCXN0cnVjdCBzZW1hcGhvcmUJc2VtOwkJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSoJaW50ZjsJCS8qIHNhdmUgb2ZmIHRoZSB1c2IgaW50ZXJmYWNlIHBvaW50ZXIgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsJLyogc2F2ZSBvZmYgdGhlIHVzYiBpbnRlcmZhY2UgcG9pbnRlciAqLworCWludCBvcGVuX2NvdW50OwkJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMgcG9ydCBvcGVuZWQgKi8KKwlzdHJ1Y3QgdHJhbnpwb3J0X2NtZCAoKnJpbmdfYnVmZmVyKVtSSU5HX0JVRkZFUl9TSVpFXTsKKwl1bnNpZ25lZCBpbnQgcmluZ19oZWFkOworCXVuc2lnbmVkIGludCByaW5nX3RhaWw7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IHdyaXRlX3dhaXQ7CisJdW5zaWduZWQgY2hhciAqaW50ZXJydXB0X2luX2J1ZmZlcjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmludGVycnVwdF9pbl9lbmRwb2ludDsKKwlzdHJ1Y3QgdXJiICppbnRlcnJ1cHRfaW5fdXJiOworCWludCBpbnRlcnJ1cHRfaW5faW50ZXJ2YWw7CisJc2l6ZV90IGludGVycnVwdF9pbl9lbmRwb2ludF9zaXplOworCWludCBpbnRlcnJ1cHRfaW5fcnVubmluZzsKKwlpbnQgaW50ZXJydXB0X2luX2RvbmU7CisJY2hhciAqaW50ZXJydXB0X291dF9idWZmZXI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbnRlcnJ1cHRfb3V0X2VuZHBvaW50OworCXN0cnVjdCB1cmIgKmludGVycnVwdF9vdXRfdXJiOworCWludCBpbnRlcnJ1cHRfb3V0X2ludGVydmFsOworCXNpemVfdCBpbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemU7CisJaW50IGludGVycnVwdF9vdXRfYnVzeTsKIAotCWludAkJCW9wZW5fY291bnQ7CS8qIG51bWJlciBvZiB0aW1lcyB0aGlzIHBvcnQgaGFzIGJlZW4gb3BlbmVkICovCisJLyogU3lzZnMgc3VwcG9ydCAqLwogCi0Jc3RydWN0IHRyYW56cG9ydF9jbWQJKCpyaW5nX2J1ZmZlcilbUklOR19CVUZGRVJfU0laRV07IC8qIGp1c3QgbWFrZSBjIGhhcHB5ICovCi0JdW5zaWduZWQgaW50CQlyaW5nX2hlYWQ7Ci0JdW5zaWduZWQgaW50CQlyaW5nX3RhaWw7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdAlyZWFkX3dhaXQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJd3JpdGVfd2FpdDsKLQotCXVuc2lnbmVkIGNoYXIqCQlpbnRlcnJ1cHRfaW5fYnVmZmVyOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciogaW50ZXJydXB0X2luX2VuZHBvaW50OwotCXN0cnVjdCB1cmIqCQlpbnRlcnJ1cHRfaW5fdXJiOwotCWludAkJCWludGVycnVwdF9pbl9pbnRlcnZhbDsKLQlzaXplX3QJaW50ZXJydXB0X2luX2VuZHBvaW50X3NpemU7Ci0JaW50CQkJaW50ZXJydXB0X2luX3J1bm5pbmc7Ci0JaW50CQkJaW50ZXJydXB0X2luX2RvbmU7Ci0KLQljaGFyKgkJCWludGVycnVwdF9vdXRfYnVmZmVyOwotCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciogaW50ZXJydXB0X291dF9lbmRwb2ludDsKLQlzdHJ1Y3QgdXJiKgkJaW50ZXJydXB0X291dF91cmI7Ci0JaW50CQkJaW50ZXJydXB0X291dF9pbnRlcnZhbDsKLQlzaXplX3QJaW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplOwotCWludAkJCWludGVycnVwdF9vdXRfYnVzeTsKLQotCS8qIFN5c2ZzIGFuZCB0cmFuc2xhdGlvbiBzdXBwb3J0ICovCi0KLQlpbnQgZXZlbnQ7IC8qIGFsdGVybmF0ZSBpbnRlcmZhY2UgdG8gZXZlbnRzICovCi0JaW50IHdoZWVsOyAvKiAtIGZvciBuZWdhdGl2ZSwgMCBmb3Igbm9uZSwgKyBmb3IgcG9zaXRpdmUgKi8KLQl1bnNpZ25lZCBjaGFyIGR1bXBfc3RhdGU7IC8qIDAgaWYgZGlzYWJsZWQgMSBpZiBlbmFibGVkICovCi0JdW5zaWduZWQgY2hhciBlbmFibGU7IC8qIDAgaWYgZGlzYWJsZWQgMSBpZiBlbmFibGVkICovCi0JdW5zaWduZWQgY2hhciBvZmZsaW5lOyAvKiBpZiB0aGUgZGV2aWNlIGlzIG91dCBvZiByYW5nZSBvciBhc2xlZXAgKi8KLQl1bnNpZ25lZCBjaGFyIGNvbXByZXNzX3doZWVsOyAvKiBmbGFnIHRvIGNvbXByZXNzIHdoZWVsIGV2ZW50cyAqLwotCXVuc2lnbmVkIGNoYXIgbGlnaHQ7IC8qIDcgYml0cyB1c2VkICovCi0JdW5zaWduZWQgY2hhciBsYXN0X2NtZFs4XTsKLQl1bnNpZ25lZCBjaGFyIGxhc3RfaW5wdXRbOF07Ci0JdW5zaWduZWQgY2hhciBzY3JlZW5bNDBdOyAvLyBXZSdsbCBhbHNvIGhhdmUgY2VsbHMKLQorCXVuc2lnbmVkIGNoYXIgZW5hYmxlOwkvKiAwIGlmIGRpc2FibGVkIDEgaWYgZW5hYmxlZCAqLworCXVuc2lnbmVkIGNoYXIgb2ZmbGluZTsJLyogaWYgdGhlIGRldmljZSBpcyBvdXQgb2YgcmFuZ2Ugb3IgYXNsZWVwICovCisJdW5zaWduZWQgY2hhciBjb21wcmVzc193aGVlbDsJLyogZmxhZyB0byBjb21wcmVzcyB3aGVlbCBldmVudHMgKi8KIH07CiAKIC8qIHByZXZlbnQgcmFjZXMgYmV0d2VlbiBvcGVuKCkgYW5kIGRpc2Nvbm5lY3QoKSAqLwpAQCAtMjA1LDg0ICsxNzUsMzkgQEAKIAkJCXVzYl9raWxsX3VyYihkZXYtPmludGVycnVwdF9vdXRfdXJiKTsKIH0KIAotLy8gRklYTUUgfmxpZ2h0IG5vdCBnb29kIGVub3VnaCBvciBjb3JyZWN0IC0gbmVlZCBhdG9taWMgc2V0X2JpdAorI2RlZmluZSBzaG93X2ludCh2YWx1ZSkJCQkJCQkJXAorICBzdGF0aWMgc3NpemVfdCBzaG93XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKKyAgewkJCQkJCQkJCVwKKyAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCQlcCisgICAgc3RydWN0IHVzYl90cmFuenBvcnQgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKKyAgICByZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdC0+dmFsdWUpOwkJCSAgICAgICAgXAorICB9CQkJCQkJCQkJXAorICBzdGF0aWMgREVWSUNFX0FUVFIodmFsdWUsIFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgTlVMTCk7CiAKLSNkZWZpbmUgc2hvd19zZXRfbGlnaHQodmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCVwKLQllbnVtIExpZ2h0SUQgbGlnaHQgPSB2YWx1ZTsJCQkJCVwKLQlpbnQgdGVtcCA9ICgxICYmICh0LT5saWdodCAmICgxIDw8IGxpZ2h0KSkpOwkJCVwKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdGVtcCApOwkJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl90cmFuenBvcnQgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJXAotCWludCB0ZW1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQkJXAotCWVudW0gTGlnaHRJRCBsaWdodCA9ICh0ZW1wIDw8IHZhbHVlKSAmICh0LT5saWdodCA8PCB2YWx1ZSk7CVwKLQl0LT5saWdodCA9ICh0LT5saWdodCAmIH5saWdodCkgOwkJCQlcCi0JcmV0dXJuIGNvdW50OwkJCQkJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywgc2hvd18jI3ZhbHVlLCBzZXRfIyN2YWx1ZSk7CisjZGVmaW5lIHNob3dfc2V0X2ludCh2YWx1ZSkJCQkJCQlcCisgIHN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAorICB7CQkJCQkJCQkJXAorICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJCVwKKyAgICBzdHJ1Y3QgdXNiX3RyYW56cG9ydCAqdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQkJXAorICAgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0LT52YWx1ZSk7CQkJICAgICAgICBcCisgIH0JCQkJCQkJCQlcCisgIHN0YXRpYyBzc2l6ZV90IHNldF8jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAkJXAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJCVwKKyAgewkJCQkJCQkJCVwKKyAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCQlcCisgICAgc3RydWN0IHVzYl90cmFuenBvcnQgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKKyAgICBpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCQlcCisgICAgdC0+dmFsdWUgPSB0ZW1wOwkJCQkJCQlcCisgICAgcmV0dXJuIGNvdW50OwkJCQkJCQlcCisgIH0JCQkJCQkJCQlcCisgIHN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOwogCi1zaG93X3NldF9saWdodChMaWdodFJlY29yZCk7Ci1zaG93X3NldF9saWdodChMaWdodFRyYWNrcmVjKTsKLXNob3dfc2V0X2xpZ2h0KExpZ2h0VHJhY2ttdXRlKTsKLXNob3dfc2V0X2xpZ2h0KExpZ2h0VHJhY2tzb2xvKTsKLXNob3dfc2V0X2xpZ2h0KExpZ2h0QW55c29sbyk7Ci1zaG93X3NldF9saWdodChMaWdodExvb3ApOwotc2hvd19zZXRfbGlnaHQoTGlnaHRQdW5jaCk7Ci0KLQotI2RlZmluZSBzaG93X3NldF9pbnQodmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHQtPnZhbHVlKTsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl90cmFuenBvcnQgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKLQkJCQkJCQkJCVwKLQl0LT52YWx1ZSA9IHRlbXA7CQkJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOwotCi1zaG93X3NldF9pbnQoZW5hYmxlKTsKLXNob3dfc2V0X2ludChvZmZsaW5lKTsKK3Nob3dfaW50KGVuYWJsZSk7CitzaG93X2ludChvZmZsaW5lKTsKIHNob3dfc2V0X2ludChjb21wcmVzc193aGVlbCk7Ci1zaG93X3NldF9pbnQoZHVtcF9zdGF0ZSk7Ci1zaG93X3NldF9pbnQod2hlZWwpOwotc2hvd19zZXRfaW50KGV2ZW50KTsKLQotI2RlZmluZSBzaG93X3NldF9jbWQodmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCQlcCi17CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICp0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsJCQlcCi0JCQkJCQkJCQlcCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHQtPnZhbHVlKTsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2V0XyMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQlcCi0Jc3RydWN0IHVzYl90cmFuenBvcnQgKnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCVwKLQlpbnQgdGVtcCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwkJCVwKLQkJCQkJCQkJCVwKLQl0LT52YWx1ZSA9IHRlbXA7CQkJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHNob3dfIyN2YWx1ZSwgc2V0XyMjdmFsdWUpOwotCi0KLQogCiAvKioKICAqCXVzYl90cmFuenBvcnRfZGVsZXRlCkBAIC0yOTAsMjMgKzIxNSwxMCBAQAogc3RhdGljIHZvaWQgdXNiX3RyYW56cG9ydF9kZWxldGUoc3RydWN0IHVzYl90cmFuenBvcnQgKmRldikKIHsKIAl1c2JfdHJhbnpwb3J0X2Fib3J0X3RyYW5zZmVycyhkZXYpOwotCS8qICBUaGlzIGlzIGp1c3QgdG9vIHR3aXN0ZWQgdG8gYmUgY29ycmVjdCAqLwotCWlmKGRldi0+aW50ZiAhPSBOVUxMKSB7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0UmVjb3JkKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfTGlnaHRUcmFja3JlYyk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0VHJhY2ttdXRlKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfTGlnaHRUcmFja3NvbG8pOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodFRyYWNrbXV0ZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0QW55c29sbyk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0TG9vcCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0UHVuY2gpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl93aGVlbCk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX2VuYWJsZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX2V2ZW50KTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldi0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfb2ZmbGluZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX2NvbXByZXNzX3doZWVsKTsKLQotCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9kdW1wX3N0YXRlKTsKKwlpZiAoZGV2LT5pbnRmICE9IE5VTEwpIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX2VuYWJsZSk7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9vZmZsaW5lKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmludGYtPmRldiwgJmRldl9hdHRyX2NvbXByZXNzX3doZWVsKTsKIAl9CiAKIAkvKiBmcmVlIGRhdGEgc3RydWN0dXJlcyAqLwpAQCAtMzMwLDM3ICsyNDIsNTYgQEAKIAogCWlmICh1cmItPnN0YXR1cykgewogCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAotCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKLQkJICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pIHsKKwkJCXVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CisJCQl1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSB7CiAJCQlnb3RvIGV4aXQ7CiAJCX0gZWxzZSB7Ci0JCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsICIlczogbm9uemVybyBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAorCQkJCSAiJXM6IG5vbnplcm8gc3RhdHVzIHJlY2VpdmVkOiAlZFxuIiwKIAkJCQkgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKLQkJCWdvdG8gcmVzdWJtaXQ7IC8qIG1heWJlIHdlIGNhbiByZWNvdmVyICovCisJCQlnb3RvIHJlc3VibWl0OwkvKiBtYXliZSB3ZSBjYW4gcmVjb3ZlciAqLwogCQl9CiAJfQogCiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCAhPSA4KSB7CiAJCWRldl93YXJuKCZkZXYtPmludGYtPmRldiwKLQkJCSAiVXJiIGxlbmd0aCB3YXMgJWQgYnl0ZXMhISBEbyBzb21ldGhpbmcgaW50ZWxsaWdlbnQgXG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJIlVyYiBsZW5ndGggd2FzICVkIGJ5dGVzISEiCisJCQkiRG8gc29tZXRoaW5nIGludGVsbGlnZW50IFxuIiwKKwkJCSB1cmItPmFjdHVhbF9sZW5ndGgpOwogCX0gZWxzZSB7Ci0JCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiByZWNlaXZlZDogJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCQkgX19mdW5jX18sIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclswXSxkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0sZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzJdLGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclszXSxkZXYtPmludGVycnVwdF9pbl9idWZmZXJbNF0sZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzVdLGRldi0+aW50ZXJydXB0X2luX2J1ZmZlcls2XSxkZXYtPmludGVycnVwdF9pbl9idWZmZXJbN10pOworCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsCisJCQkgIiVzOiByZWNlaXZlZDogJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkgX19mdW5jX18sIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclswXSwKKwkJCSBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0sCisJCQkgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzJdLAorCQkJIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclszXSwKKwkJCSBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbNF0sCisJCQkgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzVdLAorCQkJIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlcls2XSwKKwkJCSBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbN10pOwogI2lmIFNVUFBSRVNTX0VYVFJBX09GRkxJTkVfRVZFTlRTCi0JCWlmKGRldi0+b2ZmbGluZSA9PSAyICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKSB7IGdvdG8gcmVzdWJtaXQ7IH0KLQkJaWYoZGV2LT5vZmZsaW5lID09IDEgJiYgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyWzFdID09IDB4ZmYpIHsgZGV2LT5vZmZsaW5lID0gMjsgZ290byByZXN1Ym1pdDsgfQorCWlmIChkZXYtPm9mZmxpbmUgPT0gMiAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gPT0gMHhmZikKKwkJZ290byByZXN1Ym1pdDsKKwkJaWYgKGRldi0+b2ZmbGluZSA9PSAxICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKSB7CisJCQlkZXYtPm9mZmxpbmUgPSAyOworCQkJZ290byByZXN1Ym1pdDsKKwkJfQogCi0vKiBBbHdheXMgcGFzcyBvbmUgb2ZmbGluZSBldmVudCB1cCB0aGUgc3RhY2sgKi8KLQkJaWYoZGV2LT5vZmZsaW5lID4gMCAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMV0gIT0gMHhmZikgeyBkZXYtPm9mZmxpbmUgPSAwOyB9Ci0JCWlmKGRldi0+b2ZmbGluZSA9PSAwICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKSB7IGRldi0+b2ZmbGluZSA9IDE7IH0KKwkJLyogQWx3YXlzIHBhc3Mgb25lIG9mZmxpbmUgZXZlbnQgdXAgdGhlIHN0YWNrICovCisJCWlmIChkZXYtPm9mZmxpbmUgPiAwICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSAhPSAweGZmKQorCQkJZGV2LT5vZmZsaW5lID0gMDsKKwkJaWYgKGRldi0+b2ZmbGluZSA9PSAwICYmIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlclsxXSA9PSAweGZmKQorCQkJZGV2LT5vZmZsaW5lID0gMTsKIAotI2VuZGlmCi0JCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsIF9fZnVuY19fLGRldi0+cmluZ19oZWFkLGRldi0+cmluZ190YWlsKTsKKyNlbmRpZgkvKiBTVVBQUkVTU19FWFRSQV9PRkZMSU5FX0VWRU5UUyAqLworCSAgIGRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsCisJCV9fZnVuY19fLCBkZXYtPnJpbmdfaGVhZCwgZGV2LT5yaW5nX3RhaWwpOwogCi0JCW5leHRfcmluZ19oZWFkID0gKGRldi0+cmluZ19oZWFkKzEpICUgcmluZ19idWZmZXJfc2l6ZTsKKwkJbmV4dF9yaW5nX2hlYWQgPSAoZGV2LT5yaW5nX2hlYWQgKyAxKSAlIHJpbmdfYnVmZmVyX3NpemU7CiAKIAkJaWYgKG5leHRfcmluZ19oZWFkICE9IGRldi0+cmluZ190YWlsKSB7Ci0JCQltZW1jcHkoJigoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ19oZWFkXSksIGRldi0+aW50ZXJydXB0X2luX2J1ZmZlciwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCW1lbWNweSgmKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX2hlYWRdKSwKKwkJCSAgICAgICBkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQlkZXYtPnJpbmdfaGVhZCA9IG5leHRfcmluZ19oZWFkOwogCQkJcmV0dmFsID0gMDsKIAkJCW1lbXNldChkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIDAsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CkBAIC0zNzMsNyArMzA0LDcgQEAKIAl9CiAKIHJlc3VibWl0OgotCS8qIHJlc3VibWl0IGlmIHdlJ3JlIHN0aWxsIHJ1bm5pbmcgKi8KKy8qIHJlc3VibWl0IGlmIHdlJ3JlIHN0aWxsIHJ1bm5pbmcgKi8KIAlpZiAoZGV2LT5pbnRlcnJ1cHRfaW5fcnVubmluZyAmJiBkZXYtPmludGYpIHsKIAkJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJldHZhbCkKQEAgLTM5MiwxOSArMzIzLDE3IEBACiBzdGF0aWMgdm9pZCB1c2JfdHJhbnpwb3J0X2ludGVycnVwdF9vdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICpkZXYgPSB1cmItPmNvbnRleHQ7Ci0KIAkvKiBzeW5jL2FzeW5jIHVubGluayBmYXVsdHMgYXJlbid0IGVycm9ycyAqLwogCWlmICh1cmItPnN0YXR1cyAmJiAhKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwKLQkJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKLQkJCSAgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpCisJCQkJdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKKwkJCQl1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSkKIAkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAotCQkJICIlcyAtIG5vbnplcm8gd3JpdGUgaW50ZXJydXB0IHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCi0JCQkgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJCSIlcyAtIG5vbnplcm8gd3JpdGUgaW50ZXJydXB0IHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCisJCQlfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOwogCiAJZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kgPSAwOwogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53cml0ZV93YWl0KTsKIH0KLQogLyoqCiAgKgl1c2JfdHJhbnpwb3J0X29wZW4KICAqLwpAQCAtNDI0LDcgKzM1Myw3IEBACiAKIAlpZiAoIWludGVyZmFjZSkgewogCQllcnIoIiVzIC0gZXJyb3IsIGNhbid0IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZFxuIiwKLQkJICAgICBfX2Z1bmNfXywgc3VibWlub3IpOworCQkJX19mdW5jX18sIHN1Ym1pbm9yKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byB1bmxvY2tfZGlzY29ubmVjdF9leGl0OwogCX0KQEAgLTQ1MywxNCArMzgyLDE0IEBACiAJZGV2LT5yaW5nX2hlYWQgPSAwOwogCWRldi0+cmluZ190YWlsID0gMDsKIAl1c2JfZmlsbF9pbnRfdXJiKGRldi0+aW50ZXJydXB0X2luX3VyYiwKLQkJCSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSksCi0JCQkgdXNiX3JjdmludHBpcGUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpLAotCQkJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCi0JCQkgZGV2LT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAotCQkJIGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUsCi0JCQkgdXNiX3RyYW56cG9ydF9pbnRlcnJ1cHRfaW5fY2FsbGJhY2ssCi0JCQkgZGV2LAotCQkJIGRldi0+aW50ZXJydXB0X2luX2ludGVydmFsKTsKKwkJCWludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSwKKwkJCXVzYl9yY3ZpbnRwaXBlKGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSwKKwkJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+CisJCQkJYkVuZHBvaW50QWRkcmVzcyksCisJCQlkZXYtPmludGVycnVwdF9pbl9idWZmZXIsCisJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludF9zaXplLAorCQkJdXNiX3RyYW56cG9ydF9pbnRlcnJ1cHRfaW5fY2FsbGJhY2ssIGRldiwKKwkJCWRldi0+aW50ZXJydXB0X2luX2ludGVydmFsKTsKIAogCWRldi0+aW50ZXJydXB0X2luX3J1bm5pbmcgPSAxOwogCWRldi0+aW50ZXJydXB0X2luX2RvbmUgPSAwOwpAQCAtNDcwLDcgKzM5OSw4IEBACiAKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwogCWlmIChyZXR2YWwpIHsKLQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZG4ndCBzdWJtaXQgaW50ZXJydXB0X2luX3VyYiAlZFxuIiwgcmV0dmFsKTsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsCisJCQkiQ291bGRuJ3Qgc3VibWl0IGludGVycnVwdF9pbl91cmIgJWRcbiIsIHJldHZhbCk7CiAJCWRldi0+aW50ZXJydXB0X2luX3J1bm5pbmcgPSAwOwogCQlkZXYtPm9wZW5fY291bnQgPSAwOwogCQlnb3RvIHVubG9ja19leGl0OwpAQCAtNDc5LDcgKzQwOSw2IEBACiAJLyogc2F2ZSBkZXZpY2UgaW4gdGhlIGZpbGUncyBwcml2YXRlIHN0cnVjdHVyZSAqLwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKIAotCiB1bmxvY2tfZXhpdDoKIAl1cCgmZGV2LT5zZW0pOwogCkBAIC01MjUsNyArNDU0LDkgQEAKIAogCS8qIHdhaXQgdW50aWwgd3JpdGUgdHJhbnNmZXIgaXMgZmluaXNoZWQgKi8KIAlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3kpCi0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGRldi0+d3JpdGVfd2FpdCwgIWRldi0+aW50ZXJydXB0X291dF9idXN5LCAyICogSFopOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChkZXYtPndyaXRlX3dhaXQsCisJCQkJCQkhZGV2LT5pbnRlcnJ1cHRfb3V0X2J1c3ksCisJCQkJCQkyICogSFopOwogCXVzYl90cmFuenBvcnRfYWJvcnRfdHJhbnNmZXJzKGRldik7CiAJZGV2LT5vcGVuX2NvdW50ID0gMDsKIApAQCAtNTM5LDM3ICs0NzAsMzEgQEAKIC8qKgogICoJdXNiX3RyYW56cG9ydF9wb2xsCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXNiX3RyYW56cG9ydF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQorc3RhdGljIHVuc2lnbmVkIGludCB1c2JfdHJhbnpwb3J0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQogewogCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICpkZXY7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAwOwotCiAJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCiAJcG9sbF93YWl0KGZpbGUsICZkZXYtPnJlYWRfd2FpdCwgd2FpdCk7CiAJcG9sbF93YWl0KGZpbGUsICZkZXYtPndyaXRlX3dhaXQsIHdhaXQpOwotCiAJaWYgKGRldi0+cmluZ19oZWFkICE9IGRldi0+cmluZ190YWlsKQogCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CiAJaWYgKCFkZXYtPmludGVycnVwdF9vdXRfYnVzeSkKIAkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKLQogCXJldHVybiBtYXNrOwogfQotCiAvKioKICAqCXVzYl90cmFuenBvcnRfcmVhZAogICovCi1zdGF0aWMgc3NpemVfdCB1c2JfdHJhbnpwb3J0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwKLQkJCSAgIGxvZmZfdCAqcHBvcykKKworc3RhdGljIHNzaXplX3QgdXNiX3RyYW56cG9ydF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICpkZXY7CiAJaW50IHJldHZhbCA9IDA7Ci0KICNpZiBCVUZGRVJFRF9SRUFEUwogCWludCBjID0gMDsKICNlbmRpZgotCiAjaWYgQ09NUFJFU1NfV0hFRUxfRVZFTlRTCiAJc2lnbmVkIGNoYXIgb2xkd2hlZWw7CiAJc2lnbmVkIGNoYXIgbmV3d2hlZWw7CkBAIC01NzcsNyArNTAyLDcgQEAKIAlpbnQgbmV4dF90YWlsOwogI2VuZGlmCiAKLS8qIGRvIEkgaGF2ZSBzdWNoIGEgdGhpbmcgYXMgYSBudWxsIGV2ZW50PyAqLworCS8qIGRvIEkgaGF2ZSBzdWNoIGEgdGhpbmcgYXMgYSBudWxsIGV2ZW50PyAqLwogCiAJZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCkBAIC01OTEsOCArNTE2LDcgQEAKIAkJZ290byBleGl0OwogCX0KIAotCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLwotCWlmIChkZXYtPmludGYgPT0gTlVMTCkgeworCS8qIHZlcmlmeSB0aGF0IHRoZSBkZXZpY2Ugd2Fzbid0IHVucGx1Z2dlZCAqLyBpZiAoZGV2LT5pbnRmID09IE5VTEwpIHsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZXJyKCJObyBkZXZpY2Ugb3IgZGV2aWNlIHVucGx1Z2dlZCAlZFxuIiwgcmV0dmFsKTsKIAkJZ290byB1bmxvY2tfZXhpdDsKQEAgLTYwNCwxMDQgKzUyOCwxNDkgQEAKIAkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQlnb3RvIHVubG9ja19leGl0OwogCQl9Ci0JCS8vIGF0b21pY19jbXBfZXhjaGFuZ2UoJmRldi0+aW50ZXJydXB0X2luX2RvbmUsMCwwKTsKLQkJZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSA9IDAgOyAvKiB0aW55IHJhY2UgLSBGSVhNRTogbWFrZSBhdG9taWM/ICovCi0JCXJldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPnJlYWRfd2FpdCwgZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSk7Ci0JCWlmIChyZXR2YWwgPCAwKSB7CisJCS8qIHRpbnkgcmFjZSAtIEZJWE1FOiBtYWtlIGF0b21pYz8gKi8KKwkJLyogYXRvbWljX2NtcF9leGNoYW5nZSgmZGV2LT5pbnRlcnJ1cHRfaW5fZG9uZSwwLDApOyAqLworCQlkZXYtPmludGVycnVwdF9pbl9kb25lID0gMDsKKwkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+cmVhZF93YWl0LAorCQkJCQkJICBkZXYtPmludGVycnVwdF9pbl9kb25lKTsKKwkJaWYgKHJldHZhbCA8IDApCiAJCQlnb3RvIHVubG9ja19leGl0OwotCQl9CiAJfQogCi0JZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGNvcHlpbmcgdG8gdXNlcnNwYWNlOiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKLQkJCSBfX2Z1bmNfXywgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzBdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFsxXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMl0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzNdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs0XSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNV0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzZdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs3XSk7CisJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAorCQkiJXM6IGNvcHlpbmcgdG8gdXNlcnNwYWNlOiAiCisJCSIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJIF9fZnVuY19fLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzBdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzFdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzJdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzNdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzRdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzVdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzZdLAorCQkgKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzddKTsKIAogI2lmIEJVRkZFUkVEX1JFQURTCi0JICAgYyA9IDA7Ci0JICAgd2hpbGUoKGMgPCBjb3VudCkgJiYgKGRldi0+cmluZ190YWlsICE9IGRldi0+cmluZ19oZWFkKSkgeworCWMgPSAwOworCXdoaWxlICgoYyA8IGNvdW50KSAmJiAoZGV2LT5yaW5nX3RhaWwgIT0gZGV2LT5yaW5nX2hlYWQpKSB7CiAKLS8qIFRoaXMgc3RhcnRlZCBvZmYgaW4gdGhlIGxvd2VyIGxldmVsIHNlcnZpY2Ugcm91dGluZSwgYW5kIEkgbW92ZWQgaXQgaGVyZS4gVGhlbiBteSBicmFpbiBkaWVkLiBOb3QgZG9uZSB5ZXQuICovCiAjaWYgQ09NUFJFU1NfV0hFRUxfRVZFTlRTCiAJCW5leHRfdGFpbCA9IChkZXYtPnJpbmdfdGFpbCsxKSAlIHJpbmdfYnVmZmVyX3NpemU7Ci0JCWlmKGRldi0+Y29tcHJlc3Nfd2hlZWwpIGNhbmNvbXByZXNzID0gMTsKLQkJd2hpbGUoZGV2LT5yaW5nX2hlYWQgIT0gbmV4dF90YWlsICYmIGNhbmNvbXByZXNzID09IDEgKSB7CisJCWlmIChkZXYtPmNvbXByZXNzX3doZWVsKQorCQkJY2FuY29tcHJlc3MgPSAxOworCQl3aGlsZSAoZGV2LT5yaW5nX2hlYWQgIT0gbmV4dF90YWlsICYmIGNhbmNvbXByZXNzID09IDEpIHsKIAkJCW5ld3doZWVsID0gKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFs2XTsKIAkJCW9sZHdoZWVsID0gKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzZdOwotCQkJLy8gaWYgYm90aCBhcmUgd2hlZWwgZXZlbnRzLCBhbmQgbm8gYnV0dG9ucyBoYXZlIGNoYW5nZXMgKEZJWE1FLCBkbyBJIGhhdmUgdG8gY2hlY2s/KSwKLQkJCS8vIGFuZCB3ZSBhcmUgdGhlIHNhbWUgc2lnbiwgd2UgY2FuIGNvbXByZXNzICstIDdGCi0JCQkvLyBGSVhNRTogc2FuZXIgY2hlY2sgZm9yIG92ZXJmbG93ISAtIG1heCBvZiArLSA3RgotCQkJLy8gRklYTUUgdGhlIG1hdGggaXMgd3JvbmcgZm9yIGdvaW5nIGluIHJldmVyc2UsIGFjdHVhbGx5LCBhcyB0aGUgbWlkaSBzcGVjIGRvZXNuJ3QgYWxsb3cgc2lnbmVkIGNoYXJzCisJCQkvKiBpZiBib3RoIGFyZSB3aGVlbCBldmVudHMsIGFuZAorCQkJICAgbm8gYnV0dG9ucyBoYXZlIGNoYW5nZXMgKEZJWE1FLCBkbyBJIGhhdmUgdG8gY2hlY2s/KSwKKwkJCSAgIGFuZCB3ZSBhcmUgdGhlIHNhbWUgc2lnbiwgd2UgY2FuIGNvbXByZXNzICstIDdGCisJCQkqLworCQkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAorCQkJCSIlczogdHJ5aW5nIHRvIGNvbXByZXNzOiAiCisJCQkJIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJCV9fZnVuY19fLAorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFswXSwKKwkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMV0sCisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzJdLAorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFszXSwKKwkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNF0sCisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzVdLAorCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs2XSwKKwkJCQkoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbN10pOwogCi0JZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IHRyeWluZyB0byBjb21wcmVzczogJTAyeCUwMnglMDJ4JTAyeCUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JCQkgX19mdW5jX18sICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFswXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMV0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzJdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFszXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNF0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzVdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs2XSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbN10pOwotCi0KLQkJCWlmKCgoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNl0gIT0gMCAmJgotCQkJICAgICgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbNl0gIT0gMCApICYmCisJCQlpZiAoKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs2XSAhPSAwICYmCisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFs2XSAhPSAwKSAmJgogCQkJCSgobmV3d2hlZWwgPiAwICYmIG9sZHdoZWVsID4gMCkgfHwKLQkJCQkobmV3d2hlZWwgPCAwICYmIG9sZHdoZWVsIDwgMCkpICYmCi0JCQkJKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFsyXSA9PSAoKmRldi0+cmluZ19idWZmZXIpW25leHRfdGFpbF0uY21kWzJdKSAmJgotCQkJCSgoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbM10gPT0gKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFszXSkgJiYKLQkJCQkoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzRdID09ICgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbNF0pICYmCi0JCQkJKCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs1XSA9PSAoKmRldi0+cmluZ19idWZmZXIpW25leHRfdGFpbF0uY21kWzVdKSkKLSB7Ci0JZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IHNob3VsZCBjb21wcmVzczogJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCQkgX19mdW5jX18sICgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFswXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbMV0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzJdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFszXSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbNF0sKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzVdLCgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLmNtZFs2XSwoKmRldi0+cmluZ19idWZmZXIpW2Rldi0+cmluZ190YWlsXS5jbWRbN10pOwotCisJCQkJCShuZXd3aGVlbCA8IDAgJiYgb2xkd2hlZWwgPCAwKSkgJiYKKwkJCQkoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzJdID09CisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFsyXSkgJiYKKwkJCQkoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzNdID09CisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFszXSkgJiYKKwkJCQkoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzRdID09CisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFs0XSkgJiYKKwkJCQkoKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0uY21kWzVdID09CisJCQkJKCpkZXYtPnJpbmdfYnVmZmVyKVtuZXh0X3RhaWxdLmNtZFs1XSkpIHsKKwkJCQlkYmdfaW5mbygmZGV2LT5pbnRmLT5kZXYsCisJCQkJCSIlczogc2hvdWxkIGNvbXByZXNzOiAiCisJCQkJCSIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCQkJX19mdW5jX18sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbMF0sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbMV0sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbMl0sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbM10sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbNF0sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbNV0sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbNl0sCisJCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLgorCQkJCQljbWRbN10pOwogCQkJCW5ld3doZWVsICs9IG9sZHdoZWVsOwotCQkJCWlmKG9sZHdoZWVsID4gMCAmJiAhKG5ld3doZWVsID4gMCkpIHsKKwkJCQlpZiAob2xkd2hlZWwgPiAwICYmICEobmV3d2hlZWwgPiAwKSkgewogCQkJCQluZXd3aGVlbCA9IDB4N2Y7CiAJCQkJCWNhbmNvbXByZXNzID0gMDsKIAkJCQl9Ci0JCQkJaWYob2xkd2hlZWwgPCAwICYmICEobmV3d2hlZWwgPCAwKSkgeworCQkJCWlmIChvbGR3aGVlbCA8IDAgJiYgIShuZXd3aGVlbCA8IDApKSB7CiAJCQkJCW5ld3doZWVsID0gMHg4MDsKIAkJCQkJY2FuY29tcHJlc3MgPSAwOwogCQkJCX0KIAotCQkJCSgqZGV2LT5yaW5nX2J1ZmZlcilbbmV4dF90YWlsXS5jbWRbNl0gPSBuZXd3aGVlbDsKKwkJCQkoKmRldi0+cmluZ19idWZmZXIpW25leHRfdGFpbF0uY21kWzZdID0KKwkJCQkJbmV3d2hlZWw7CiAJCQkJZGV2LT5yaW5nX3RhaWwgPSBuZXh0X3RhaWw7Ci0JCQkJbmV4dF90YWlsID0gKGRldi0+cmluZ190YWlsKzEpICUgcmluZ19idWZmZXJfc2l6ZTsKKwkJCQluZXh0X3RhaWwgPQorCQkJCQkoZGV2LT5yaW5nX3RhaWwgKyAxKSAlIHJpbmdfYnVmZmVyX3NpemU7CiAJCQl9IGVsc2UgewogCQkJCWNhbmNvbXByZXNzID0gMDsKIAkJCX0KIAkJfQogI2VuZGlmIC8qIENPTVBSRVNTX1dIRUVMX0VWRU5UUyAqLwotCi0JCWlmIChjb3B5X3RvX3VzZXIoJmJ1ZmZlcltjXSwgJigqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLCA4KSkgeworCQlpZiAoY29weV90b191c2VyKAorCQkJCSZidWZmZXJbY10sCisJCQkJJigqZGV2LT5yaW5nX2J1ZmZlcilbZGV2LT5yaW5nX3RhaWxdLCA4KSkgewogCQkJcmV0dmFsID0gLUVGQVVMVDsKIAkJCWdvdG8gdW5sb2NrX2V4aXQ7CiAJCX0KLQotCQlkZXYtPnJpbmdfdGFpbCA9IChkZXYtPnJpbmdfdGFpbCsxKSAlIHJpbmdfYnVmZmVyX3NpemU7Ci0JCWMrPTg7Ci0JCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsIF9fZnVuY19fLGRldi0+cmluZ19oZWFkLGRldi0+cmluZ190YWlsKTsKLQkgICB9Ci0JICAgcmV0dmFsID0gYzsKKwkJZGV2LT5yaW5nX3RhaWwgPSAoZGV2LT5yaW5nX3RhaWwgKyAxKSAlIHJpbmdfYnVmZmVyX3NpemU7CisJCWMgKz0gODsKKwkJZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LAorCQkJICIlczogaGVhZCwgdGFpbCBhcmUgJXgsICV4XG4iLAorCQkJIF9fZnVuY19fLCBkZXYtPnJpbmdfaGVhZCwgZGV2LT5yaW5nX3RhaWwpOworCX0KKwlyZXR2YWwgPSBjOwogCiAjZWxzZQotCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCAmKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0sIDgpKSB7Ci0JCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCWdvdG8gdW5sb2NrX2V4aXQ7Ci0JfQorLyogIGlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCAmKCpkZXYtPnJpbmdfYnVmZmVyKVtkZXYtPnJpbmdfdGFpbF0sIDgpKSB7ICovCisJcmV0dmFsID0gLUVGQVVMVDsKKwlnb3RvIHVubG9ja19leGl0OworfQogCi0JZGV2LT5yaW5nX3RhaWwgPSAoZGV2LT5yaW5nX3RhaWwrMSkgJSByaW5nX2J1ZmZlcl9zaXplOwotCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBoZWFkLCB0YWlsIGFyZSAleCwgJXhcbiIsIF9fZnVuY19fLGRldi0+cmluZ19oZWFkLGRldi0+cmluZ190YWlsKTsKK2Rldi0+cmluZ190YWlsID0gKGRldi0+cmluZ190YWlsICsgMSkgJSByaW5nX2J1ZmZlcl9zaXplOworZGJnX2luZm8oJmRldi0+aW50Zi0+ZGV2LCAiJXM6IGhlYWQsIHRhaWwgYXJlICV4LCAleFxuIiwKKwkgX19mdW5jX18sIGRldi0+cmluZ19oZWFkLCBkZXYtPnJpbmdfdGFpbCk7CiAKLQlyZXR2YWwgPSA4OworcmV0dmFsID0gODsKICNlbmRpZiAvKiBCVUZGRVJFRF9SRUFEUyAqLwogCiB1bmxvY2tfZXhpdDoKLQkvKiB1bmxvY2sgdGhlIGRldmljZSAqLwotCXVwKCZkZXYtPnNlbSk7CisvKiB1bmxvY2sgdGhlIGRldmljZSAqLwordXAoJmRldi0+c2VtKTsKIAogZXhpdDoKLQlyZXR1cm4gcmV0dmFsOworcmV0dXJuIHJldHZhbDsKIH0KIAogLyoqCiAgKgl1c2JfdHJhbnpwb3J0X3dyaXRlCiAgKi8KLXN0YXRpYyBzc2l6ZV90IHVzYl90cmFuenBvcnRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCB1c2JfdHJhbnpwb3J0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCWNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwKKwkJCQlsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHVzYl90cmFuenBvcnQgKmRldjsKIAlzaXplX3QgYnl0ZXNfdG9fd3JpdGU7CkBAIC03MTgsNyArNjg3LDYgQEAKIAkJcmV0dmFsID0gLUVSRVNUQVJUU1lTOwogCQlnb3RvIGV4aXQ7CiAJfQotCiAJLyogdmVyaWZ5IHRoYXQgdGhlIGRldmljZSB3YXNuJ3QgdW5wbHVnZ2VkICovCiAJaWYgKGRldi0+aW50ZiA9PSBOVUxMKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7CkBAIC03MzIsMTggKzcwMCwyNCBAQAogCQkJcmV0dmFsID0gLUVBR0FJTjsKIAkJCWdvdG8gdW5sb2NrX2V4aXQ7CiAJCX0KLQkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+d3JpdGVfd2FpdCwgIWRldi0+aW50ZXJydXB0X291dF9idXN5KTsKLQkJaWYgKHJldHZhbCA8IDApIHsKKwkJcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRldi0+d3JpdGVfd2FpdCwKKwkJCQkJCSFkZXYtPmludGVycnVwdF9vdXRfYnVzeSk7CisJCWlmIChyZXR2YWwgPCAwKQogCQkJZ290byB1bmxvY2tfZXhpdDsKLQkJfQogCX0KIAogCS8qIHdyaXRlIHRoZSBkYXRhIGludG8gaW50ZXJydXB0X291dF9idWZmZXIgZnJvbSB1c2Vyc3BhY2UgKi8KLQlieXRlc190b193cml0ZSA9IG1pbihjb3VudCwgd3JpdGVfYnVmZmVyX3NpemUqZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUpOworCWJ5dGVzX3RvX3dyaXRlID0gbWluKGNvdW50LAorCQkJd3JpdGVfYnVmZmVyX3NpemUgKgorCQkJZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUpOwogCWlmIChieXRlc190b193cml0ZSA8IGNvdW50KQotCQlkZXZfd2FybigmZGV2LT5pbnRmLT5kZXYsICJXcml0ZSBidWZmZXIgb3ZlcmZsb3csICV6ZCBieXRlcyBkcm9wcGVkXG4iLGNvdW50LWJ5dGVzX3RvX3dyaXRlKTsKKwkJZGV2X3dhcm4oJmRldi0+aW50Zi0+ZGV2LAorCQkJIldyaXRlIGJ1ZmZlciBvdmVyZmxvdywgJXpkIGJ5dGVzIGRyb3BwZWRcbiIsCisJCQljb3VudCAtIGJ5dGVzX3RvX3dyaXRlKTsKIAotCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwgIiVzOiBjb3VudCA9ICV6ZCwgYnl0ZXNfdG9fd3JpdGUgPSAlemRcbiIsIF9fZnVuY19fLCBjb3VudCwgYnl0ZXNfdG9fd3JpdGUpOworCWRiZ19pbmZvKCZkZXYtPmludGYtPmRldiwKKwkJIiVzOiBjb3VudCA9ICV6ZCwgYnl0ZXNfdG9fd3JpdGUgPSAlemRcbiIsIF9fZnVuY19fLAorCQljb3VudCwgYnl0ZXNfdG9fd3JpdGUpOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGRldi0+aW50ZXJydXB0X291dF9idWZmZXIsIGJ1ZmZlciwgYnl0ZXNfdG9fd3JpdGUpKSB7CiAJCXJldHZhbCA9IC1FRkFVTFQ7CkBAIC03NTcsMTQgKzczMSwxMyBAQAogCiAJLyogc2VuZCBvZmYgdGhlIHVyYiAqLwogCXVzYl9maWxsX2ludF91cmIoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiwKLQkJCSBpbnRlcmZhY2VfdG9fdXNiZGV2KGRldi0+aW50ZiksCi0JCQkgdXNiX3NuZGludHBpcGUoaW50ZXJmYWNlX3RvX3VzYmRldihkZXYtPmludGYpLAotCQkJCQlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAotCQkJIGRldi0+aW50ZXJydXB0X291dF9idWZmZXIsCi0JCQkgYnl0ZXNfdG9fd3JpdGUsCi0JCQkgdXNiX3RyYW56cG9ydF9pbnRlcnJ1cHRfb3V0X2NhbGxiYWNrLAotCQkJIGRldiwKLQkJCSBkZXYtPmludGVycnVwdF9vdXRfaW50ZXJ2YWwpOworCQkJaW50ZXJmYWNlX3RvX3VzYmRldihkZXYtPmludGYpLAorCQkJdXNiX3NuZGludHBpcGUoaW50ZXJmYWNlX3RvX3VzYmRldihkZXYtPmludGYpLAorCQkJCWRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+CisJCQkJYkVuZHBvaW50QWRkcmVzcyksCisJCQlkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyLCBieXRlc190b193cml0ZSwKKwkJCXVzYl90cmFuenBvcnRfaW50ZXJydXB0X291dF9jYWxsYmFjaywgZGV2LAorCQkJZGV2LT5pbnRlcnJ1cHRfb3V0X2ludGVydmFsKTsKIAogCWRldi0+aW50ZXJydXB0X291dF9idXN5ID0gMTsKIAl3bWIoKTsKQEAgLTc4NywxMiArNzYwLDEyIEBACiAKIC8qIGZpbGUgb3BlcmF0aW9ucyBuZWVkZWQgd2hlbiB3ZSByZWdpc3RlciB0aGlzIGRyaXZlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiX3RyYW56cG9ydF9mb3BzID0gewotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCS5yZWFkICA9CXVzYl90cmFuenBvcnRfcmVhZCwKLQkud3JpdGUgPQl1c2JfdHJhbnpwb3J0X3dyaXRlLAotCS5vcGVuID0JCXVzYl90cmFuenBvcnRfb3BlbiwKLQkucmVsZWFzZSA9CXVzYl90cmFuenBvcnRfcmVsZWFzZSwKLQkucG9sbCA9CQl1c2JfdHJhbnpwb3J0X3BvbGwsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnJlYWQgPSB1c2JfdHJhbnpwb3J0X3JlYWQsCisJLndyaXRlID0gdXNiX3RyYW56cG9ydF93cml0ZSwKKwkub3BlbiA9IHVzYl90cmFuenBvcnRfb3BlbiwKKwkucmVsZWFzZSA9IHVzYl90cmFuenBvcnRfcmVsZWFzZSwKKwkucG9sbCA9IHVzYl90cmFuenBvcnRfcG9sbCwKIH07CiAKIC8qCkBAIC04MDAsMjAgKzc3MywxOSBAQAogICogYW5kIHRvIGhhdmUgdGhlIGRldmljZSByZWdpc3RlcmVkIHdpdGggdGhlIGRyaXZlciBjb3JlCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciB1c2JfdHJhbnpwb3J0X2NsYXNzID0gewotCS5uYW1lID0JCSJ0cmFuenBvcnQlZCIsCi0JLmZvcHMgPQkJJnVzYl90cmFuenBvcnRfZm9wcywKLQkubWlub3JfYmFzZSA9CVVTQl9UUkFOWlBPUlRfTUlOT1JfQkFTRSwKKwkubmFtZSA9ICJ0cmFuenBvcnQlZCIsCisJLmZvcHMgPSAmdXNiX3RyYW56cG9ydF9mb3BzLAorCS5taW5vcl9iYXNlID0gVVNCX1RSQU5aUE9SVF9NSU5PUl9CQVNFLAogfTsKIAotCiAvKioKICAqCXVzYl90cmFuenBvcnRfcHJvYmUKICAqCiAgKglDYWxsZWQgYnkgdGhlIHVzYiBjb3JlIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGNvbm5lY3RlZCB0aGF0IGl0IHRoaW5rcwogICoJdGhpcyBkcml2ZXIgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbi4KICAqLwotc3RhdGljIGludCB1c2JfdHJhbnpwb3J0X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17CitzdGF0aWMgaW50IHVzYl90cmFuenBvcnRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKSB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCXN0cnVjdCB1c2JfdHJhbnpwb3J0ICpkZXYgPSBOVUxMOwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CkBAIC04MjQsNyArNzk2LDcgQEAKIAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCiAKLQlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJIGRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CiAJCWdvdG8gZXhpdDsKQEAgLTg1MSwyNSArODIzLDMzIEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCWlmIChkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQgPT0gTlVMTCkKLQkJZGV2X3dhcm4oJmludGYtPmRldiwgIkludGVycnVwdCBvdXQgZW5kcG9pbnQgbm90IGZvdW5kICh1c2luZyBjb250cm9sIGVuZHBvaW50IGluc3RlYWQpXG4iKTsKKwkJZGV2X3dhcm4oJmludGYtPmRldiwKKwkJCSJJbnRlcnJ1cHQgb3V0IGVuZHBvaW50IG5vdCBmb3VuZCIKKwkJCSIodXNpbmcgY29udHJvbCBlbmRwb2ludCBpbnN0ZWFkKVxuIik7CiAKLQotCWRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUgPSBsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCWRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUgPQorCSAgICBsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+d01heFBhY2tldFNpemUpOwogCiAJaWYgKGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUgIT0gOCkKLQkgICAgZGV2X3dhcm4oJmludGYtPmRldiwgIkludGVycnVwdCBpbiBlbmRwb2ludCBzaXplIGlzIG5vdCA4IVxuIik7CisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJJbnRlcnJ1cHQgaW4gZW5kcG9pbnQgc2l6ZSBpcyBub3QgOCFcbiIpOwogCi0JaWYocmluZ19idWZmZXJfc2l6ZSA9PSAwKSB7IHJpbmdfYnVmZmVyX3NpemUgPSBSSU5HX0JVRkZFUl9TSVpFOyB9Ci0JdHJ1ZV9zaXplID0gbWluKHJpbmdfYnVmZmVyX3NpemUsUklOR19CVUZGRVJfU0laRSk7Ci0JLyogRklYTUUgLSB0aGVyZSBhcmUgbW9yZSB1c2JfYWxsb2Mgcm91dGluZXMgZm9yIGRtYSBjb3JyZWN0bmVzcy4gTmVlZGVkPyAqLworCWlmIChyaW5nX2J1ZmZlcl9zaXplID09IDApCisJCXJpbmdfYnVmZmVyX3NpemUgPSBSSU5HX0JVRkZFUl9TSVpFOworCXRydWVfc2l6ZSA9IG1pbihyaW5nX2J1ZmZlcl9zaXplLCBSSU5HX0JVRkZFUl9TSVpFKTsKIAotCWRldi0+cmluZ19idWZmZXIgPSBrbWFsbG9jKCh0cnVlX3NpemUqc2l6ZW9mKHN0cnVjdCB0cmFuenBvcnRfY21kKSkrOCwgR0ZQX0tFUk5FTCk7CisJLyogRklYTUUgLSB0aGVyZSBhcmUgbW9yZSB1c2JfYWxsb2Mgcm91dGluZXMgZm9yIGRtYSBjb3JyZWN0bmVzcy4KKwkgICBOZWVkZWQ/ICovCisKKwlkZXYtPnJpbmdfYnVmZmVyID0KKwkgICAga21hbGxvYygodHJ1ZV9zaXplICogc2l6ZW9mKHN0cnVjdCB0cmFuenBvcnRfY21kKSkgKyA4LCBHRlBfS0VSTkVMKTsKIAogCWlmICghZGV2LT5yaW5nX2J1ZmZlcikgewotCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSByaW5nX2J1ZmZlciBvZiBzaXplICVkXG4iLHRydWVfc2l6ZSk7CisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSJDb3VsZG4ndCBhbGxvY2F0ZSByaW5nX2J1ZmZlciBzaXplICVkXG4iLCB0cnVlX3NpemUpOwogCQlnb3RvIGVycm9yOwogCX0KLQlkZXYtPmludGVycnVwdF9pbl9idWZmZXIgPSBrbWFsbG9jKGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50X3NpemUsIEdGUF9LRVJORUwpOworCWRldi0+aW50ZXJydXB0X2luX2J1ZmZlciA9CisJICAgIGttYWxsb2MoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYtPmludGVycnVwdF9pbl9idWZmZXIpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X2luX2J1ZmZlclxuIik7CiAJCWdvdG8gZXJyb3I7CkBAIC04NzksMTMgKzg1OSwxOCBAQAogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfaW5fdXJiXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0JZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUgPSBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQgPyBsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA6Ci0JCQkJCQkJCQkgdWRldi0+ZGVzY3JpcHRvci5iTWF4UGFja2V0U2l6ZTA7CisJZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUgPQorCSAgICBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQgPworCSAgICBsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSA6CisJICAgIHVkZXYtPmRlc2NyaXB0b3IuYk1heFBhY2tldFNpemUwOwogCi0JaWYgKGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludF9zaXplICE9OCkKLQkJZGV2X3dhcm4oJmludGYtPmRldiwgIkludGVycnVwdCBvdXQgZW5kcG9pbnQgc2l6ZSBpcyBub3QgOCEpXG4iKTsKKwlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUgIT0gOCkKKwkJZGV2X3dhcm4oJmludGYtPmRldiwKKwkJCSAiSW50ZXJydXB0IG91dCBlbmRwb2ludCBzaXplIGlzIG5vdCA4ISlcbiIpOwogCi0JZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciA9IGttYWxsb2Mod3JpdGVfYnVmZmVyX3NpemUqZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUsIEdGUF9LRVJORUwpOworCWRldi0+aW50ZXJydXB0X291dF9idWZmZXIgPQorCSAgICBrbWFsbG9jKHdyaXRlX2J1ZmZlcl9zaXplICogZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50X3NpemUsCisJCSAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldi0+aW50ZXJydXB0X291dF9idWZmZXIpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X291dF9idWZmZXJcbiIpOwogCQlnb3RvIGVycm9yOwpAQCAtODk1LDkgKzg4MCwxOCBAQAogCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSBpbnRlcnJ1cHRfb3V0X3VyYlxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWRldi0+aW50ZXJydXB0X2luX2ludGVydmFsID0gbWluX2ludGVycnVwdF9pbl9pbnRlcnZhbCA+IGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT5iSW50ZXJ2YWwgPyBtaW5faW50ZXJydXB0X2luX2ludGVydmFsIDogZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPmJJbnRlcnZhbDsKLQlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50KQotCQlkZXYtPmludGVycnVwdF9vdXRfaW50ZXJ2YWwgPSBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA+IGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+YkludGVydmFsID8gbWluX2ludGVycnVwdF9vdXRfaW50ZXJ2YWwgOiBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJJbnRlcnZhbDsKKwlkZXYtPmludGVycnVwdF9pbl9pbnRlcnZhbCA9CisJICAgIG1pbl9pbnRlcnJ1cHRfaW5faW50ZXJ2YWwgPgorCSAgICBkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkludGVydmFsID8gbWluX2ludGVycnVwdF9pbl9pbnRlcnZhbAorCSAgICA6IGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT5iSW50ZXJ2YWw7CisKKwlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50KSB7CisJCWRldi0+aW50ZXJydXB0X291dF9pbnRlcnZhbCA9CisJCSAgICBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA+CisJCSAgICBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJJbnRlcnZhbCA/CisJCSAgICBtaW5faW50ZXJydXB0X291dF9pbnRlcnZhbCA6CisJCSAgICBkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPmJJbnRlcnZhbDsKKwl9CiAKIAkvKiB3ZSBjYW4gcmVnaXN0ZXIgdGhlIGRldmljZSBub3csIGFzIGl0IGlzIHJlYWR5ICovCiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOwpAQCAtOTA1LDM1ICs4OTksMzMgQEAKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfdHJhbnpwb3J0X2NsYXNzKTsKIAlpZiAocmV0dmFsKSB7CiAJCS8qIHNvbWV0aGluZyBwcmV2ZW50ZWQgdXMgZnJvbSByZWdpc3RlcmluZyB0aGlzIGRyaXZlciAqLwotCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJOb3QgYWJsZSB0byBnZXQgYSBtaW5vciBmb3IgdGhpcyBkZXZpY2UuXG4iKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LAorCQkJIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiIpOwogCQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0UmVjb3JkKSkpIGdvdG8gZXJyb3I7Ci0JaWYoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfTGlnaHRUcmFja3JlYykpKSBnb3RvIGVycm9yOwotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX0xpZ2h0VHJhY2ttdXRlKSkpIGdvdG8gZXJyb3I7Ci0JaWYoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfTGlnaHRUcmFja3NvbG8pKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodEFueXNvbG8pKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodExvb3ApKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9MaWdodFB1bmNoKSkpIGdvdG8gZXJyb3I7Ci0JaWYoKHJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfd2hlZWwpKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9ldmVudCkpKSBnb3RvIGVycm9yOwotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2R1bXBfc3RhdGUpKSkgZ290byBlcnJvcjsKLQlpZigocmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9jb21wcmVzc193aGVlbCkpKSBnb3RvIGVycm9yOwotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2VuYWJsZSkpKSBnb3RvIGVycm9yOwotCWlmKChyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX29mZmxpbmUpKSkgZ290byBlcnJvcjsKKwlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2NvbXByZXNzX3doZWVsKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm9yOworCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfZW5hYmxlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm9yOworCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfb2ZmbGluZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcjsKIAogCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KLQlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiVHJhbnpwb3J0IERldmljZSAjJWQgbm93IGF0dGFjaGVkIHRvIG1ham9yICVkIG1pbm9yICVkXG4iLAotCQkoaW50Zi0+bWlub3IgLSBVU0JfVFJBTlpQT1JUX01JTk9SX0JBU0UpLCBVU0JfTUFKT1IsIGludGYtPm1pbm9yKTsKKwlkZXZfaW5mbygmaW50Zi0+ZGV2LAorCQkiVHJhbnpwb3J0IERldmljZSAjJWQgbm93IGF0dGFjaGVkIHRvIG1ham9yICVkIG1pbm9yICVkXG4iLAorCQkoaW50Zi0+bWlub3IgLSBVU0JfVFJBTlpQT1JUX01JTk9SX0JBU0UpLCBVU0JfTUFKT1IsCisJCWludGYtPm1pbm9yKTsKIAogZXhpdDoKIAlyZXR1cm4gcmV0dmFsOwogCiBlcnJvcjoKIAl1c2JfdHJhbnpwb3J0X2RlbGV0ZShkZXYpOwotCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtOTY2LDE1ICs5NTgsMTUgQEAKIAltdXRleF91bmxvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAJZGV2X2luZm8oJmludGYtPmRldiwgIlRyYW56cG9ydCBTdXJmYWNlICMlZCBub3cgZGlzY29ubmVjdGVkXG4iLAotCQkgKG1pbm9yIC0gVVNCX1RSQU5aUE9SVF9NSU5PUl9CQVNFKSk7CisJCShtaW5vciAtIFVTQl9UUkFOWlBPUlRfTUlOT1JfQkFTRSkpOwogfQogCiAvKiB1c2Igc3BlY2lmaWMgb2JqZWN0IG5lZWRlZCB0byByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSB1c2Igc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX3RyYW56cG9ydF9kcml2ZXIgPSB7Ci0JLm5hbWUgPQkJInRyYW56cG9ydCIsCi0JLnByb2JlID0JdXNiX3RyYW56cG9ydF9wcm9iZSwKLQkuZGlzY29ubmVjdCA9CXVzYl90cmFuenBvcnRfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPQl1c2JfdHJhbnpwb3J0X3RhYmxlLAorCS5uYW1lID0gInRyYW56cG9ydCIsCisJLnByb2JlID0gdXNiX3RyYW56cG9ydF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHVzYl90cmFuenBvcnRfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSB1c2JfdHJhbnpwb3J0X3RhYmxlLAogfTsKIAogLyoqCkBAIC05ODcsMTQgKzk3OSwxNCBAQAogCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnVzYl90cmFuenBvcnRfZHJpdmVyKTsKIAlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQgZm9yIHRoZSAiX19GSUxFX18iIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkXG4iLCByZXR2YWwpOwotCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZCBmb3IgdGhlICIgX19GSUxFX18KKwkJCSIgZHJpdmVyLiBFcnJvciBudW1iZXIgJWRcbiIsIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KLQogLyoqCiAgKgl1c2JfdHJhbnpwb3J0X2V4aXQKICAqLworCiBzdGF0aWMgdm9pZCBfX2V4aXQgdXNiX3RyYW56cG9ydF9leGl0KHZvaWQpCiB7CiAJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCkBAIC0xMDAzLDQgKzk5NSwzIEBACiAKIG1vZHVsZV9pbml0KHVzYl90cmFuenBvcnRfaW5pdCk7CiBtb2R1bGVfZXhpdCh1c2JfdHJhbnpwb3J0X2V4aXQpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L0tjb25maWcKaW5kZXggZjJjZjdmNi4uY2E2YWRlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvS2NvbmZpZwpAQCAtMTAsNyArMTAsNyBAQAogCXNlbGVjdCBDUkMzMgogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KLQkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHNvbWUgd2llcmQgZGV2aWNlLi4uCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBzb21lIHdlaXJkIGRldmljZS4uLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBnbzcwMDcKQEAgLTIwLDcgKzIwLDcgQEAKIAlkZXBlbmRzIG9uIFZJREVPX0dPNzAwNyAmJiBVU0IKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBzb21lIHdpZXJkIGRldmljZS4uLgorCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3Igc29tZSB3ZWlyZCBkZXZpY2UuLi4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ283MDA3LXVzYgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdjRsMi5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdjRsMi5jCmluZGV4IDg2OGVkYjYuLjA2Y2FjZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvZ283MDA3LXY0bDIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy12NGwyLmMKQEAgLTE4MjcsNyArMTgyNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGdvNzAwN190ZW1wbGF0ZSA9IHsKIAkubmFtZQkJPSAiZ283MDA3IiwKLQkudmZsX3R5cGUJPSBWSURfVFlQRV9DQVBUVVJFLAogCS5mb3BzCQk9ICZnbzcwMDdfZm9wcywKIAkubWlub3IJCT0gLTEsCiAJLnJlbGVhc2UJPSBnbzcwMDdfdmZsX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKaW5kZXggZmI2ODQ1ZS4uZDMzM2VhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiBzdGF0aWMgaW50IHdyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXN0cnVjdCBnbzcwMDcgKmdvID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYjsKIAlpbnQgcmM7CiAJaW50IGRldl9hZGRyID0gY2xpZW50LT5hZGRyOwogCXU4ICpidWY7CkBAIC0xNjQsOCArMTY0LDEwIEBACiAJaWYgKGJ1ZiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXVzYiA9IGdvLT5ocGlfY29udGV4dDsKIAlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZ1c2ItPmkyY19sb2NrKSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gImkyYyBsb2NrIGZhaWxlZFxuIik7CisJCWtmcmVlKGJ1Zik7CiAJCXJldHVybiAtRUlOVFI7CiAJfQogCXJjID0gZ283MDA3X3VzYl92ZW5kb3JfcmVxdWVzdChnbywgMHg1NSwgZGV2X2FkZHIsCkBAIC0xODEsNyArMTgzLDcgQEAKIHN0YXRpYyBpbnQgd3JpdGVfcmVnX2ZwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBhZGRyLCB1MTYgdmFsKQogewogCXN0cnVjdCBnbzcwMDcgKmdvID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCXN0cnVjdCBnbzcwMDdfdXNiICp1c2IgPSBnby0+aHBpX2NvbnRleHQ7CisJc3RydWN0IGdvNzAwN191c2IgKnVzYjsKIAl1OCAqYnVmOwogCXN0cnVjdCBzMjI1MCAqZGVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKQEAgLTIwMCw2ICsyMDIsNyBAQAogCiAJbWVtc2V0KGJ1ZiwgMHhjZCwgNik7CiAKKwl1c2IgPSBnby0+aHBpX2NvbnRleHQ7CiAJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmdXNiLT5pMmNfbG9jaykgIT0gMCkgewogCQlwcmludGsoS0VSTl9JTkZPICJpMmMgbG9jayBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTlRSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2hlY2kvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4ZDU4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL0tjb25maWcKQEAgLTAsMCArMSw2IEBACitjb25maWcgSEVDSQorCXRyaXN0YXRlICJJbnRlbCBNYW5hZ2VtZW50IEVuZ2luZSBJbnRlcmZhY2UgKE1FSSkgU3VwcG9ydCIKKwktLS1oZWxwLS0tCisJICBUaGUgSW50ZWwgTWFuYWdlbWVudCBFbmdpbmUgSW50ZXJmYWNlIChJbnRlbCBNRUkpIGRyaXZlciBhbGxvd3MKKwkgIGFwcGxpY2F0aW9ucyB0byBhY2Nlc3MgdGhlIEFjdGl2ZSBNYW5hZ2VtZW50IFRlY2hub2xvZ3kKKwkgIGZpcm13YXJlIGFuZCBvdGhlciBNYW5hZ2VtZW50IEVuZ2luZSBzdWItc3lzdGVtcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9oZWNpL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUyNDg1NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorb2JqLSQoQ09ORklHX0hFQ0kpCSs9IGhlY2kubworCitoZWNpLW9ianMgOj0JCQkJXAorCQloZWNpX2luaXQubwkJXAorCQlpbnRlcnJ1cHQubwkJXAorCQloZWNpX2ludGVyZmFjZS5vCVwKKwkJaW9faGVjaS5vCQlcCisJCWhlY2lfbWFpbi5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9oZWNpL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NjcxNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9UT0RPCkBAIC0wLDAgKzEsNiBAQAorVE9ETzoKKwktIGZpeCB1c2VyL2tlcm5lbCBwb2ludGVyIG1lc3MgaW4gdGhlIGlvY3RsIGhhbmRsZXJzIGFzIHBvaW50ZWQKKwkgIG91dCBieSBzcGFyc2UuCisJLSByZXNvbHZlIHRoZSBpb2N0bHMgYW5kIHNlZSBpZiBtb3N0IG9mIHRoZW0gY2FuIGp1c3QgYmUgc2ltcGxlCisJICBzeXNmcyBmaWxlcworCS0gZml4IGxvY2tpbmcgaXNzdWVzIHRoYXQgc3BhcnNlIHBvaW50cyBvdXQgYXQgdGhlIGxlYXN0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaS5oIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MTkyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpLmgKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisgKiBQYXJ0IG9mIEludGVsKFIpIE1hbmFnZWFiaWxpdHkgRW5naW5lIEludGVyZmFjZSBMaW51eCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnAuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisKKyNpZm5kZWYgX0hFQ0lfSF8KKyNkZWZpbmUgX0hFQ0lfSF8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Fpby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSAiaGVjaV9kYXRhX3N0cnVjdHVyZXMuaCIKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBndWlkIGhlY2lfcHRoaV9ndWlkOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBndWlkIGhlY2lfd2RfZ3VpZDsKK2V4dGVybiBjb25zdCBfX3U4IGhlY2lfc3RhcnRfd2RfcGFyYW1zW107CitleHRlcm4gY29uc3QgX191OCBoZWNpX3N0b3Bfd2RfcGFyYW1zW107CitleHRlcm4gY29uc3QgX191OCBoZWNpX3dkX3N0YXRlX2luZGVwZW5kZW5jZV9tc2dbM11bNF07CisKKy8qCisgKiBoZWNpIGRldmljZSBJRAorICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEXzgyOTQ2R1ogICAgMHgyOTc0ICAvKiA4Mjk0NkdaL0dMICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEXzgyRzM1ICAgICAgMHgyOTg0ICAvKiA4MkczNSBFeHByZXNzICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEXzgyUTk2NSAgICAgMHgyOTk0ICAvKiA4MlE5NjMvUTk2NSAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF84Mkc5NjUgICAgIDB4MjlBNCAgLyogODJQOTY1L0c5NjUgKi8KKworI2RlZmluZSAgICBIRUNJX0RFVl9JRF84MkdNOTY1ICAgIDB4MkEwNCAgLyogTW9iaWxlIFBNOTY1L0dNOTY1ICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEXzgyR01FOTY1ICAgMHgyQTE0ICAvKiBNb2JpbGUgR01FOTY1L0dMRTk2MCAqLworCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlfODJRMzUgMHgyOUI0ICAvKiA4MlEzNSBFeHByZXNzICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlfODJHMzMgMHgyOUM0ICAvKiA4MkczMy9HMzEvUDM1L1AzMSBFeHByZXNzICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlfODJRMzMgMHgyOUQ0ICAvKiA4MlEzMyBFeHByZXNzICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlfODJYMzggMHgyOUU0ICAvKiA4MlgzOC9YNDggRXhwcmVzcyAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5XzMyMDAgIDB4MjlGNCAgLyogMzIwMC8zMjEwIFNlcnZlciAqLworCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlfNiAgICAgMHgyOEI0ICAvKiBCZWFybGFrZSAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5XzcgICAgIDB4MjhDNCAgLyogQmVhcmxha2UgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIOV84ICAgICAweDI4RDQgIC8qIEJlYXJsYWtlICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDlfOSAgICAgMHgyOEU0ICAvKiBCZWFybGFrZSAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5XzEwICAgIDB4MjhGNCAgLyogQmVhcmxha2UgKi8KKworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5TV8xICAgIDB4MkE0NCAgLyogQ2FudGlnYSAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5TV8yICAgIDB4MkE1NCAgLyogQ2FudGlnYSAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5TV8zICAgIDB4MkE2NCAgLyogQ2FudGlnYSAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0g5TV80ICAgIDB4MkE3NCAgLyogQ2FudGlnYSAqLworCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDEwXzEgICAgMHgyRTA0ICAvKiBFYWdsZWxha2UgKi8KKyNkZWZpbmUgICAgSEVDSV9ERVZfSURfSUNIMTBfMiAgICAweDJFMTQgIC8qIEVhZ2xlbGFrZSAqLworI2RlZmluZSAgICBIRUNJX0RFVl9JRF9JQ0gxMF8zICAgIDB4MkUyNCAgLyogRWFnbGVsYWtlICovCisjZGVmaW5lICAgIEhFQ0lfREVWX0lEX0lDSDEwXzQgICAgMHgyRTM0ICAvKiBFYWdsZWxha2UgKi8KKworLyoKKyAqIGhlY2kgaW5pdCBmdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KK3N0cnVjdCBpYW10X2hlY2lfZGV2aWNlICppbml0X2hlY2lfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3ZvaWQgaGVjaV9yZXNldChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaW50ZXJydXB0cyk7CitpbnQgaGVjaV9od19pbml0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworaW50IGhlY2lfdGFza19pbml0aWFsaXplX2NsaWVudHModm9pZCAqZGF0YSk7CitpbnQgaGVjaV9pbml0aWFsaXplX2NsaWVudHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CitzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmhlY2lfYWxsb2NfZmlsZV9wcml2YXRlKHN0cnVjdCBmaWxlICpmaWxlKTsKK2ludCBoZWNpX2Rpc2Nvbm5lY3RfaG9zdF9jbGllbnQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKK3ZvaWQgaGVjaV9pbml0aWFsaXplX2xpc3Qoc3RydWN0IGlvX2hlY2lfbGlzdCAqbGlzdCwKKwkJCSAgc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7Cit2b2lkIGhlY2lfZmx1c2hfbGlzdChzdHJ1Y3QgaW9faGVjaV9saXN0ICpsaXN0LAorCQkgICAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOwordm9pZCBoZWNpX2ZsdXNoX3F1ZXVlcyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7CisKK3ZvaWQgaGVjaV9yZW1vdmVfY2xpZW50X2Zyb21fZmlsZV9saXN0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIF9fdTggaG9zdF9jbGllbnRfaWQpOworCisvKgorICogIGludGVycnVwdCBmdW5jdGlvbiBwcm90b3R5cGUKKyAqLworaXJxcmV0dXJuX3QgaGVjaV9pc3JfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CisKK3ZvaWQgaGVjaV93ZF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOworCisvKgorICogIGlucHV0IG91dHB1dCBmdW5jdGlvbiBwcm90b3R5cGUKKyAqLworaW50IGhlY2lfaW9jdGxfZ2V0X3ZlcnNpb24oc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGlmX251bSwKKwkJCSAgIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBfX3VzZXIgKnVfbXNnLAorCQkJICAgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIGtfbXNnLAorCQkJICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7CisKK2ludCBoZWNpX2lvY3RsX2Nvbm5lY3RfY2xpZW50KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpZl9udW0sCisJCQkgICAgICBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEgX191c2VyICp1X21zZywKKwkJCSAgICAgIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBrX21zZywKKwkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlKTsKKworaW50IGhlY2lfaW9jdGxfd2Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGlmX251bSwKKwkJICBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEga19tc2csCisJCSAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7CisKK2ludCBoZWNpX2lvY3RsX2J5cGFzc193ZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaWZfbnVtLAorCQkgIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBrX21zZywKKwkJICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKKworaW50IGhlY2lfc3RhcnRfcmVhZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaWZfbnVtLAorCQkgICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7CisKK2ludCBwdGhpX3dyaXRlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJICAgICAgIHN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2IpOworCitpbnQgcHRoaV9yZWFkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpZl9udW0sIHN0cnVjdCBmaWxlICpmaWxlLAorCSAgICAgIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgbGVuZ3RoLCBsb2ZmX3QgKm9mZnNldCk7CisKK3N0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKmZpbmRfcHRoaV9yZWFkX2xpc3RfZW50cnkoCisJCQlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJc3RydWN0IGZpbGUgKmZpbGUpOworCit2b2lkIHJ1bl9uZXh0X2lhbXRoaWZfY21kKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworCit2b2lkIGhlY2lfZnJlZV9jYl9wcml2YXRlKHN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2IpOworCisvKioKKyAqIGhlY2lfZmVfc2FtZV9pZCAtIHRlbGwgaWYgZmlsZSBwcml2YXRlIGRhdGEgaGF2ZSBzYW1lIGlkCisgKgorICogQGZlMTogcHJpdmF0ZSBkYXRhIG9mIDEuIGZpbGUgb2JqZWN0CisgKiBAZmUyOiBwcml2YXRlIGRhdGEgb2YgMi4gZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zICAhPTAgLSBpZiBpZHMgYXJlIHRoZSBzYW1lLCAwIC0gaWYgZGlmZmVyLgorICovCitzdGF0aWMgaW5saW5lIGludCBoZWNpX2ZlX3NhbWVfaWQoY29uc3Qgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmZTEsCisJCQkJICBjb25zdCBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZlMikKK3sKKwlyZXR1cm4gKChmZTEtPmhvc3RfY2xpZW50X2lkID09IGZlMi0+aG9zdF9jbGllbnRfaWQpCisJCSYmIChmZTEtPm1lX2NsaWVudF9pZCA9PSBmZTItPm1lX2NsaWVudF9pZCkpOworfQorCisjZW5kaWYgLyogX0hFQ0lfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfZGF0YV9zdHJ1Y3R1cmVzLmggYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX2RhdGFfc3RydWN0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NWU4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX2RhdGFfc3RydWN0dXJlcy5oCkBAIC0wLDAgKzEsNTMwIEBACisvKgorICogUGFydCBvZiBJbnRlbChSKSBNYW5hZ2VhYmlsaXR5IEVuZ2luZSBJbnRlcmZhY2UgTGludXggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworCisjaWZuZGVmIF9IRUNJX0RBVEFfU1RSVUNUVVJFU19IXworI2RlZmluZSBfSEVDSV9EQVRBX1NUUlVDVFVSRVNfSF8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Fpby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBlcnJvciBjb2RlIGRlZmluaXRpb24KKyAqLworI2RlZmluZSAgICAgRVNMT1RTX09WRVJGTE9XICAgICAgICAgICAgICAxCisjZGVmaW5lICAgICBFQ09SUlVQVEVEX01FU1NBR0VfSEVBREVSICAgIDEwMDAKKyNkZWZpbmUgICAgIEVDT01QTEVURV9NRVNTQUdFICAgICAgICAgICAgMTAwMQorCisjZGVmaW5lICAgICBIRUNJX0ZDX01FU1NBR0VfUkVTRVJWRURfTEVOR1RIICAgICAgICAgICA1CisKKy8qCisgKiBOdW1iZXIgb2YgcXVldWUgbGlzdHMgdXNlZCBieSB0aGlzIGRyaXZlcgorICovCisjZGVmaW5lIEhFQ0lfSU9fTElTVFNfTlVNQkVSICAgICAgICA3CisKKy8qCisgKiBNYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0IChNVFUpIG9mIGhlY2kgbWVzc2FnZXMKKyAqLworI2RlZmluZSBJQU1USElGX01UVSA0MTYwCisKKworLyoKKyAqIEhFQ0kgSFcgU2VjdGlvbgorICovCisKKy8qIEhFQ0kgcmVnaXN0ZXJzICovCisvKiBIX0NCX1dXIC0gSG9zdCBDaXJjdWxhciBCdWZmZXIgKENCKSBXcml0ZSBXaW5kb3cgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSF9DQl9XVyAgICAwCisvKiBIX0NTUiAtIEhvc3QgQ29udHJvbCBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSF9DU1IgICAgICA0CisvKiBNRV9DQl9SVyAtIE1FIENpcmN1bGFyIEJ1ZmZlciBSZWFkIFdpbmRvdyByZWdpc3RlciAocmVhZCBvbmx5KSAqLworI2RlZmluZSBNRV9DQl9SVyAgIDgKKy8qIE1FX0NTUl9IQSAtIE1FIENvbnRyb2wgU3RhdHVzIEhvc3QgQWNjZXNzIHJlZ2lzdGVyIChyZWFkIG9ubHkpICovCisjZGVmaW5lIE1FX0NTUl9IQSAgMHhDCisKKworLyogcmVnaXN0ZXIgYml0cyBvZiBIX0NTUiAoSG9zdCBDb250cm9sIFN0YXR1cyByZWdpc3RlcikgKi8KKy8qIEhvc3QgQ2lyY3VsYXIgQnVmZmVyIERlcHRoIC0gbWF4aW11bSBudW1iZXIgb2YgMzItYml0IGVudHJpZXMgaW4gQ0IgKi8KKyNkZWZpbmUgSF9DQkQgICAgICAgICAgICAgMHhGRjAwMDAwMAorLyogSG9zdCBDaXJjdWxhciBCdWZmZXIgV3JpdGUgUG9pbnRlciAqLworI2RlZmluZSBIX0NCV1AgICAgICAgICAgICAweDAwRkYwMDAwCisvKiBIb3N0IENpcmN1bGFyIEJ1ZmZlciBSZWFkIFBvaW50ZXIgKi8KKyNkZWZpbmUgSF9DQlJQICAgICAgICAgICAgMHgwMDAwRkYwMAorLyogSG9zdCBSZXNldCAqLworI2RlZmluZSBIX1JTVCAgICAgICAgICAgICAweDAwMDAwMDEwCisvKiBIb3N0IFJlYWR5ICovCisjZGVmaW5lIEhfUkRZICAgICAgICAgICAgIDB4MDAwMDAwMDgKKy8qIEhvc3QgSW50ZXJydXB0IEdlbmVyYXRlICovCisjZGVmaW5lIEhfSUcgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKy8qIEhvc3QgSW50ZXJydXB0IFN0YXR1cyAqLworI2RlZmluZSBIX0lTICAgICAgICAgICAgICAweDAwMDAwMDAyCisvKiBIb3N0IEludGVycnVwdCBFbmFibGUgKi8KKyNkZWZpbmUgSF9JRSAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisKKy8qIHJlZ2lzdGVyIGJpdHMgb2YgTUVfQ1NSX0hBIChNRSBDb250cm9sIFN0YXR1cyBIb3N0IEFjY2VzcyByZWdpc3RlcikgKi8KKy8qIE1FIENCIChDaXJjdWxhciBCdWZmZXIpIERlcHRoIEhSQSAoSG9zdCBSZWFkIEFjY2VzcykKKyAqICAtIGhvc3QgcmVhZCBvbmx5IGFjY2VzcyB0byBNRV9DQkQgKi8KKyNkZWZpbmUgTUVfQ0JEX0hSQSAgICAgICAgMHhGRjAwMDAwMAorLyogTUUgQ0IgV3JpdGUgUG9pbnRlciBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfQ0JXUCAqLworI2RlZmluZSBNRV9DQldQX0hSQSAgICAgICAweDAwRkYwMDAwCisvKiBNRSBDQiBSZWFkIFBvaW50ZXIgSFJBIC0gaG9zdCByZWFkIG9ubHkgYWNjZXNzIHRvIE1FX0NCUlAgKi8KKyNkZWZpbmUgTUVfQ0JSUF9IUkEgICAgICAgMHgwMDAwRkYwMAorLyogTUUgUmVzZXQgSFJBIC0gaG9zdCByZWFkIG9ubHkgYWNjZXNzIHRvIE1FX1JTVCAqLworI2RlZmluZSBNRV9SU1RfSFJBICAgICAgICAweDAwMDAwMDEwCisvKiBNRSBSZWFkeSBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfUkRZICovCisjZGVmaW5lIE1FX1JEWV9IUkEgICAgICAgIDB4MDAwMDAwMDgKKy8qIE1FIEludGVycnVwdCBHZW5lcmF0ZSBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfSUcgKi8KKyNkZWZpbmUgTUVfSUdfSFJBICAgICAgICAgMHgwMDAwMDAwNAorLyogTUUgSW50ZXJydXB0IFN0YXR1cyBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfSVMgKi8KKyNkZWZpbmUgTUVfSVNfSFJBICAgICAgICAgMHgwMDAwMDAwMgorLyogTUUgSW50ZXJydXB0IEVuYWJsZSBIUkEgLSBob3N0IHJlYWQgb25seSBhY2Nlc3MgdG8gTUVfSUUgKi8KKyNkZWZpbmUgTUVfSUVfSFJBICAgICAgICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIEhFQ0lfTUlOT1JTX0JBU0UJMQorI2RlZmluZSBIRUNJX01JTk9SU19DT1VOVAkxCisKKyNkZWZpbmUgIEhFQ0lfTUlOT1JfTlVNQkVSCTEKKyNkZWZpbmUgIEhFQ0lfTUFYX09QRU5fSEFORExFX0NPVU5UCTI1MworCisvKgorICogZGVidWcga2VybmVsIHByaW50IG1hY3JvIGRlZmluZQorICovCitleHRlcm4gaW50IGhlY2lfZGVidWc7CisKKyNkZWZpbmUgREJHKGZvcm1hdCwgYXJnLi4uKSBkbyB7IFwKKwlpZiAoaGVjaV9kZWJ1ZykgXAorCQlwcmludGsoS0VSTl9JTkZPICJoZWNpOiAlczogIiBmb3JtYXQsIF9fZnVuY19fLCAjIyBhcmcpOyBcCit9IHdoaWxlICgwKQorCisKKy8qCisgKiB0aW1lIHRvIHdhaXQgSEVDSSBiZWNvbWUgcmVhZHkgYWZ0ZXIgaW5pdAorICovCisjZGVmaW5lIEhFQ0lfSU5URVJPUF9USU1FT1VUICAgIChIWiAqIDcpCisKKy8qCisgKiB3YXRjaCBkb2cgZGVmaW5pdGlvbgorICovCisjZGVmaW5lIEhFQ0lfV0FUQ0hET0dfREFUQV9TSVpFICAgICAgICAgMTYKKyNkZWZpbmUgSEVDSV9TVEFSVF9XRF9EQVRBX1NJWkUgICAgICAgICAyMAorI2RlZmluZSBIRUNJX1dEX1BBUkFNU19TSVpFICAgICAgICAgICAgIDQKKyNkZWZpbmUgSEVDSV9XRF9TVEFURV9JTkRFUEVOREVOQ0VfTVNHX1NFTlQgICAgICAgKDEgPDwgMCkKKworI2RlZmluZSBIRUNJX1dEX0hPU1RfQ0xJRU5UX0lEICAgICAgICAgIDEKKyNkZWZpbmUgSEVDSV9JQU1USElGX0hPU1RfQ0xJRU5UX0lEICAgICAyCisKK3N0cnVjdCBndWlkIHsKKwlfX3UzMiBkYXRhMTsKKwlfX3UxNiBkYXRhMjsKKwlfX3UxNiBkYXRhMzsKKwlfX3U4IGRhdGE0WzhdOworfTsKKworLyogRmlsZSBzdGF0ZSAqLworZW51bSBmaWxlX3N0YXRlIHsKKwlIRUNJX0ZJTEVfSU5JVElBTElaSU5HID0gMCwKKwlIRUNJX0ZJTEVfQ09OTkVDVElORywKKwlIRUNJX0ZJTEVfQ09OTkVDVEVELAorCUhFQ0lfRklMRV9ESVNDT05ORUNUSU5HLAorCUhFQ0lfRklMRV9ESVNDT05ORUNURUQKK307CisKKy8qIEhFQ0kgZGV2aWNlIHN0YXRlcyAqLworZW51bSBoZWNpX3N0YXRlcyB7CisJSEVDSV9JTklUSUFMSVpJTkcgPSAwLAorCUhFQ0lfRU5BQkxFRCwKKwlIRUNJX1JFU0VUSU5HLAorCUhFQ0lfRElTQUJMRUQsCisJSEVDSV9SRUNPVkVSSU5HX0ZST01fUkVTRVQsCisJSEVDSV9QT1dFUl9ET1dOLAorCUhFQ0lfUE9XRVJfVVAKK307CisKK2VudW0gaWFtdGhpZl9zdGF0ZXMgeworCUhFQ0lfSUFNVEhJRl9JRExFLAorCUhFQ0lfSUFNVEhJRl9XUklUSU5HLAorCUhFQ0lfSUFNVEhJRl9GTE9XX0NPTlRST0wsCisJSEVDSV9JQU1USElGX1JFQURJTkcsCisJSEVDSV9JQU1USElGX1JFQURfQ09NUExFVEUKK307CisKK2VudW0gaGVjaV9maWxlX3RyYW5zYWN0aW9uX3N0YXRlcyB7CisJSEVDSV9JRExFLAorCUhFQ0lfV1JJVElORywKKwlIRUNJX1dSSVRFX0NPTVBMRVRFLAorCUhFQ0lfRkxPV19DT05UUk9MLAorCUhFQ0lfUkVBRElORywKKwlIRUNJX1JFQURfQ09NUExFVEUKK307CisKKy8qIEhFQ0kgQ0IgKi8KK2VudW0gaGVjaV9jYl9tYWpvcl90eXBlcyB7CisJSEVDSV9SRUFEID0gMCwKKwlIRUNJX1dSSVRFLAorCUhFQ0lfSU9DVEwsCisJSEVDSV9PUEVOLAorCUhFQ0lfQ0xPU0UKK307CisKKy8qIEhFQ0kgdXNlciBkYXRhIHN0cnVjdCAqLworc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIHsKKwlfX3UzMiBzaXplOworCWNoYXIgKmRhdGE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIEhFQ0lfQ09OTkVDVF9USU1FT1VUICAgICAgICAgICAgIDMJLyogYXQgbGVhc3QgMiBzZWNvbmRzICovCisKKyNkZWZpbmUgSUFNVEhJRl9TVEFMTF9USU1FUiAgICAgICAgICAgICAgMTIJLyogc2Vjb25kcyAqLworI2RlZmluZSBJQU1USElGX1JFQURfVElNRVIgICAgICAgICAgICAgICAxNQkvKiBzZWNvbmRzICovCisKK3N0cnVjdCBoZWNpX2NiX3ByaXZhdGUgeworCXN0cnVjdCBsaXN0X2hlYWQgY2JfbGlzdDsKKwllbnVtIGhlY2lfY2JfbWFqb3JfdHlwZXMgbWFqb3JfZmlsZV9vcGVyYXRpb25zOworCXZvaWQgKmZpbGVfcHJpdmF0ZTsKKwlzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEgcmVxdWVzdF9idWZmZXI7CisJc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIHJlc3BvbnNlX2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIGluZm9ybWF0aW9uOworCXVuc2lnbmVkIGxvbmcgcmVhZF90aW1lOworCXN0cnVjdCBmaWxlICpmaWxlX29iamVjdDsKK307CisKKy8qIFByaXZhdGUgZmlsZSBzdHJ1Y3QgKi8KK3N0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworCXN0cnVjdCBmaWxlICpmaWxlOworCWVudW0gZmlsZV9zdGF0ZSBzdGF0ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB0eF93YWl0OworCXdhaXRfcXVldWVfaGVhZF90IHJ4X3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwlzcGlubG9ja190IGZpbGVfbG9jazsgLyogZmlsZSBsb2NrICovCisJc3BpbmxvY2tfdCByZWFkX2lvX2xvY2s7IC8qIHJlYWQgbG9jayAqLworCXNwaW5sb2NrX3Qgd3JpdGVfaW9fbG9jazsgLyogd3JpdGUgbG9jayAqLworCWludCByZWFkX3BlbmRpbmc7CisJaW50IHN0YXR1czsKKwkvKiBJRCBvZiBjbGllbnQgY29ubmVjdGVkICovCisJX191OCBob3N0X2NsaWVudF9pZDsKKwlfX3U4IG1lX2NsaWVudF9pZDsKKwlfX3U4IGZsb3dfY3RybF9jcmVkczsKKwlfX3U4IHRpbWVyX2NvdW50OworCWVudW0gaGVjaV9maWxlX3RyYW5zYWN0aW9uX3N0YXRlcyByZWFkaW5nX3N0YXRlOworCWVudW0gaGVjaV9maWxlX3RyYW5zYWN0aW9uX3N0YXRlcyB3cml0aW5nX3N0YXRlOworCWludCBzbV9zdGF0ZTsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpyZWFkX2NiOworfTsKKworc3RydWN0IGlvX2hlY2lfbGlzdCB7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSBoZWNpX2NiOworCWludCBzdGF0dXM7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldmljZV9leHRlbnNpb247Cit9OworCitzdHJ1Y3QgaGVjaV9kcml2ZXJfdmVyc2lvbiB7CisJX191OCBtYWpvcjsKKwlfX3U4IG1pbm9yOworCV9fdTggaG90Zml4OworCV9fdTE2IGJ1aWxkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgaGVjaV9jbGllbnQgeworCV9fdTMyIG1heF9tc2dfbGVuZ3RoOworCV9fdTggcHJvdG9jb2xfdmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiAgSEVDSSBCVVMgSW50ZXJmYWNlIFNlY3Rpb24KKyAqLworc3RydWN0IGhlY2lfbXNnX2hkciB7CisJX191MzIgbWVfYWRkcjo4OworCV9fdTMyIGhvc3RfYWRkcjo4OworCV9fdTMyIGxlbmd0aDo5OworCV9fdTMyIHJlc2VydmVkOjY7CisJX191MzIgbXNnX2NvbXBsZXRlOjE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKK3N0cnVjdCBoYm1fY21kIHsKKwlfX3U4IGNtZDo3OworCV9fdTggaXNfcmVzcG9uc2U6MTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworc3RydWN0IGhlY2lfYnVzX21lc3NhZ2UgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IGNvbW1hbmRfc3BlY2lmaWNfZGF0YVtdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV92ZXJzaW9uIHsKKwlfX3U4IG1pbm9yX3ZlcnNpb247CisJX191OCBtYWpvcl92ZXJzaW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV9ob3N0X3ZlcnNpb25fcmVxdWVzdCB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggcmVzZXJ2ZWQ7CisJc3RydWN0IGhibV92ZXJzaW9uIGhvc3RfdmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1faG9zdF92ZXJzaW9uX3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJaW50IGhvc3RfdmVyc2lvbl9zdXBwb3J0ZWQ7CisJc3RydWN0IGhibV92ZXJzaW9uIG1lX21heF92ZXJzaW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGhibV9ob3N0X3N0b3BfcmVxdWVzdCB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggcmVhc29uOworCV9fdTggcmVzZXJ2ZWRbMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXNwb25zZSB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX21lX3N0b3BfcmVxdWVzdCB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggcmVhc29uOworCV9fdTggcmVzZXJ2ZWRbMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX2hvc3RfZW51bV9yZXF1ZXN0IHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCByZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1faG9zdF9lbnVtX3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCByZXNlcnZlZFszXTsKKwlfX3U4IHZhbGlkX2FkZHJlc3Nlc1szMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGVjaV9jbGllbnRfcHJvcGVydGllcyB7CisJc3RydWN0IGd1aWQgcHJvdG9jb2xfbmFtZTsKKwlfX3U4IHByb3RvY29sX3ZlcnNpb247CisJX191OCBtYXhfbnVtYmVyX29mX2Nvbm5lY3Rpb25zOworCV9fdTggZml4ZWRfYWRkcmVzczsKKwlfX3U4IHNpbmdsZV9yZWN2X2J1ZjsKKwlfX3UzMiBtYXhfbXNnX2xlbmd0aDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1fcHJvcHNfcmVxdWVzdCB7CisJc3RydWN0IGhibV9jbWQgY21kOworCV9fdTggYWRkcmVzczsKKwlfX3U4IHJlc2VydmVkWzJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgaGJtX3Byb3BzX3Jlc3BvbnNlIHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCBhZGRyZXNzOworCV9fdTggc3RhdHVzOworCV9fdTggcmVzZXJ2ZWRbMV07CisJc3RydWN0IGhlY2lfY2xpZW50X3Byb3BlcnRpZXMgY2xpZW50X3Byb3BlcnRpZXM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3JlcXVlc3QgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IG1lX2FkZHI7CisJX191OCBob3N0X2FkZHI7CisJX191OCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IG1lX2FkZHI7CisJX191OCBob3N0X2FkZHI7CisJX191OCBzdGF0dXM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgeworCXN0cnVjdCBoYm1fY21kIGNtZDsKKwlfX3U4IG1lX2FkZHI7CisJX191OCBob3N0X2FkZHI7CisJX191OCByZXNlcnZlZFsxXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBoYm1fZmxvd19jb250cm9sIHsKKwlzdHJ1Y3QgaGJtX2NtZCBjbWQ7CisJX191OCBtZV9hZGRyOworCV9fdTggaG9zdF9hZGRyOworCV9fdTggcmVzZXJ2ZWRbSEVDSV9GQ19NRVNTQUdFX1JFU0VSVkVEX0xFTkdUSF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaGVjaV9tZV9jbGllbnQgeworCXN0cnVjdCBoZWNpX2NsaWVudF9wcm9wZXJ0aWVzIHByb3BzOworCV9fdTggY2xpZW50X2lkOworCV9fdTggZmxvd19jdHJsX2NyZWRzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogcHJpdmF0ZSBkZXZpY2Ugc3RydWN0ICovCitzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CS8qIHBvaW50ZXIgdG8gcGNpIGRldmljZSBzdHJ1Y3QgKi8KKwkvKgorCSAqIGxpc3RzIG9mIHF1ZXVlcworCSAqLworCSAvKiBhcnJheSBvZiBwb2ludGVycyB0byAgYWlvIGxpc3RzICovCisJc3RydWN0IGlvX2hlY2lfbGlzdCAqaW9fbGlzdF9hcnJheVtIRUNJX0lPX0xJU1RTX05VTUJFUl07CisJc3RydWN0IGlvX2hlY2lfbGlzdCByZWFkX2xpc3Q7CS8qIGRyaXZlciByZWFkIHF1ZXVlICovCisJc3RydWN0IGlvX2hlY2lfbGlzdCB3cml0ZV9saXN0OwkvKiBkcml2ZXIgd3JpdGUgcXVldWUgKi8KKwlzdHJ1Y3QgaW9faGVjaV9saXN0IHdyaXRlX3dhaXRpbmdfbGlzdDsJLyogd3JpdGUgd2FpdGluZyBxdWV1ZSAqLworCXN0cnVjdCBpb19oZWNpX2xpc3QgY3RybF93cl9saXN0OwkvKiBtYW5hZ2VkIHdyaXRlIElPQ1RMIGxpc3QgKi8KKwlzdHJ1Y3QgaW9faGVjaV9saXN0IGN0cmxfcmRfbGlzdDsJLyogbWFuYWdlZCByZWFkIElPQ1RMIGxpc3QgKi8KKwlzdHJ1Y3QgaW9faGVjaV9saXN0IHB0aGlfY21kX2xpc3Q7CS8qIFBUSEkgbGlzdCBmb3IgY21kIHdhaXRpbmcgKi8KKworCS8qIGRyaXZlciBtYW5hZ2VkIFBUSEkgbGlzdCBmb3IgcmVhZGluZyBjb21wbGV0ZWQgcHRoaSBjbWQgZGF0YSAqLworCXN0cnVjdCBpb19oZWNpX2xpc3QgcHRoaV9yZWFkX2NvbXBsZXRlX2xpc3Q7CisJLyoKKwkgKiBsaXN0IG9mIGZpbGVzCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBmaWxlX2xpc3Q7CisJLyoKKwkgKiBtZW1vcnkgb2YgZGV2aWNlCisJICovCisJdW5zaWduZWQgaW50IG1lbV9iYXNlOworCXVuc2lnbmVkIGludCBtZW1fbGVuZ3RoOworCXZvaWQgX19pb21lbSAqbWVtX2FkZHI7CisJLyoKKwkgKiBsb2NrIGZvciB0aGUgZGV2aWNlCisJICovCisJc3BpbmxvY2tfdCBkZXZpY2VfbG9jazsgLyogZGV2aWNlIGxvY2sqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCWludCByZWN2ZF9tc2c7CisKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlaW5pdF90c2s7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCB3ZF90aW1lcjsKKwkvKgorCSAqIGh3IHN0YXRlcyBvZiBob3N0IGFuZCBmdyhNRSkKKwkgKi8KKwlfX3UzMiBob3N0X2h3X3N0YXRlOworCV9fdTMyIG1lX2h3X3N0YXRlOworCS8qCisJICogd2FpdGluZyBxdWV1ZSBmb3IgcmVjZWl2ZSBtZXNzYWdlIGZyb20gRlcKKwkgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3JlY3ZkX21zZzsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3N0b3Bfd2Q7CisJLyoKKwkgKiBoZWNpIGRldmljZSAgc3RhdGVzCisJICovCisJZW51bSBoZWNpX3N0YXRlcyBoZWNpX3N0YXRlOworCWludCBzdG9wOworCisJX191MzIgZXh0cmFfd3JpdGVfaW5kZXg7CisJX191MzIgcmRfbXNnX2J1ZlsxMjhdOwkvKiB1c2VkIGZvciBjb250cm9sIG1lc3NhZ2VzICovCisJX191MzIgd3JfbXNnX2J1ZlsxMjhdOwkvKiB1c2VkIGZvciBjb250cm9sIG1lc3NhZ2VzICovCisJX191MzIgZXh0X21zZ19idWZbOF07CS8qIGZvciBjb250cm9sIHJlc3BvbnNlcyAgICAqLworCV9fdTMyIHJkX21zZ19oZHI7CisKKwlzdHJ1Y3QgaGJtX3ZlcnNpb24gdmVyc2lvbjsKKworCWludCBob3N0X2J1ZmZlcl9pc19lbXB0eTsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgd2RfZmlsZV9leHQ7CisJc3RydWN0IGhlY2lfbWVfY2xpZW50ICptZV9jbGllbnRzOyAvKiBOb3RlOiBtZW1vcnkgaGFzIHRvIGJlIGFsbG9jYXRlZCovCisJX191OCBoZWNpX21lX2NsaWVudHNbMzJdOwkvKiBsaXN0IG9mIGV4aXN0aW5nIGNsaWVudHMgKi8KKwlfX3U4IG51bV9oZWNpX21lX2NsaWVudHM7CisJX191OCBoZWNpX2hvc3RfY2xpZW50c1szMl07CS8qIGxpc3Qgb2YgZXhpc3RpbmcgY2xpZW50cyAqLworCV9fdTggY3VycmVudF9ob3N0X2NsaWVudF9pZDsKKworCWludCB3ZF9wZW5kaW5nOworCWludCB3ZF9zdG9wZWQ7CisJX191MTYgd2RfdGltZW91dDsJLyogc2Vjb25kcyAoKHdkX2RhdGFbMV0gPDwgOCkgKyB3ZF9kYXRhWzBdKSAqLworCXVuc2lnbmVkIGNoYXIgd2RfZGF0YVtIRUNJX1NUQVJUX1dEX0RBVEFfU0laRV07CisKKworCV9fdTE2IHdkX2R1ZV9jb3VudGVyOworCWludCBhc2ZfbW9kZTsKKwlpbnQgd2RfYnlwYXNzOwkvKiBpZiAxLCBkb24ndCByZWZyZXNoIHdhdGNoZG9nIE1FIGNsaWVudCAqLworCisJc3RydWN0IGZpbGUgKmlhbXRoaWZfZmlsZV9vYmplY3Q7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlIGlhbXRoaWZfZmlsZV9leHQ7CisJaW50IGlhbXRoaWZfaW9jdGw7CisJaW50IGlhbXRoaWZfY2FuY2VsZWQ7CisJX191MzIgaWFtdGhpZl90aW1lcjsKKwlfX3UzMiBpYW10aGlmX3N0YWxsX3RpbWVyOworCXVuc2lnbmVkIGNoYXIgaWFtdGhpZl9tc2dfYnVmW0lBTVRISUZfTVRVXTsKKwlfX3UzMiBpYW10aGlmX21zZ19idWZfc2l6ZTsKKwlfX3UzMiBpYW10aGlmX21zZ19idWZfaW5kZXg7CisJaW50IGlhbXRoaWZfZmxvd19jb250cm9sX3BlbmRpbmc7CisJZW51bSBpYW10aGlmX3N0YXRlcyBpYW10aGlmX3N0YXRlOworCisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqaWFtdGhpZl9jdXJyZW50X2NiOworCV9fdTggd3JpdGVfaGFuZzsKKwlpbnQgbmVlZF9yZXNldDsKKwlsb25nIG9wZW5faGFuZGxlX2NvdW50OworCit9OworCisvKioKKyAqIHJlYWRfaGVjaV9yZWdpc3RlciAtIFJlYWQgYSBieXRlIGZyb20gdGhlIGhlY2kgZGV2aWNlCisgKgorICogQGRldjogdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBvZmZzZXQ6IG9mZnNldCBmcm9tIHdoaWNoIHRvIHJlYWQgdGhlIGRhdGEKKyAqCisgKiByZXR1cm5zICB0aGUgYnl0ZSByZWFkLgorICovCitzdGF0aWMgaW5saW5lIF9fdTMyIHJlYWRfaGVjaV9yZWdpc3RlcihzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwoZGV2LT5tZW1fYWRkciArIG9mZnNldCk7Cit9CisKKy8qKgorICogd3JpdGVfaGVjaV9yZWdpc3RlciAtIFdyaXRlICA0IGJ5dGVzIHRvIHRoZSBoZWNpIGRldmljZQorICoKKyAqIEBkZXY6IHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAb2Zmc2V0OiBvZmZzZXQgZnJvbSB3aGljaCB0byB3cml0ZSB0aGUgZGF0YQorICogQHZhbHVlOiB0aGUgYnl0ZSB0byB3cml0ZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfaGVjaV9yZWdpc3RlcihzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCQl1bnNpZ25lZCBsb25nIG9mZnNldCwgIF9fdTMyIHZhbHVlKQoreworCXdyaXRlbCh2YWx1ZSwgZGV2LT5tZW1fYWRkciArIG9mZnNldCk7Cit9CisKKyNlbmRpZiAvKiBfSEVDSV9EQVRBX1NUUlVDVFVSRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhMGRhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfaW5pdC5jCkBAIC0wLDAgKzEsMTA3NyBAQAorLyoKKyAqIFBhcnQgb2YgSW50ZWwoUikgTWFuYWdlYWJpbGl0eSBFbmdpbmUgSW50ZXJmYWNlIExpbnV4IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisKKyNpbmNsdWRlICJoZWNpX2RhdGFfc3RydWN0dXJlcy5oIgorI2luY2x1ZGUgImhlY2lfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiaGVjaS5oIgorCisKK2NvbnN0IF9fdTggaGVjaV9zdGFydF93ZF9wYXJhbXNbXSA9IHsgMHgwMiwgMHgxMiwgMHgxMywgMHgxMCB9OworY29uc3QgX191OCBoZWNpX3N0b3Bfd2RfcGFyYW1zW10gPSB7IDB4MDIsIDB4MDIsIDB4MTQsIDB4MTAgfTsKKworY29uc3QgX191OCBoZWNpX3dkX3N0YXRlX2luZGVwZW5kZW5jZV9tc2dbM11bNF0gPSB7CisJezB4MDUsIDB4MDIsIDB4NTEsIDB4MTB9LAorCXsweDA1LCAweDAyLCAweDUyLCAweDEwfSwKKwl7MHgwNywgMHgwMiwgMHgwMSwgMHgxMH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZ3VpZCBoZWNpX2FzZl9ndWlkID0geworCTB4NzVCMzBDRDYsIDB4QTI5RSwgMHg0QUY3LAorCXsweEE3LCAweDEyLCAweEU2LCAweDE3LCAweDQzLCAweDkzLCAweEM4LCAweEE2fQorfTsKK2NvbnN0IHN0cnVjdCBndWlkIGhlY2lfd2RfZ3VpZCA9IHsKKwkweDA1Qjc5QTZGLCAweDQ2MjgsIDB4NEQ3RiwKKwl7MHg4OSwgMHg5RCwgMHhBOSwgMHgxNSwgMHgxNCwgMHhDQiwgMHgzMiwgMHhBQn0KK307Citjb25zdCBzdHJ1Y3QgZ3VpZCBoZWNpX3B0aGlfZ3VpZCA9IHsKKwkweDEyZjgwMDI4LCAweGI0YjcsIDB4NGIyZCwKKwl7MHhhYywgMHhhOCwgMHg0NiwgMHhlMCwgMHhmZiwgMHg2NSwgMHg4MSwgMHg0Y30KK307CisKKworLyoKKyAqICBoZWNpIGluaXQgZnVuY3Rpb24gcHJvdG90eXBlcworICovCitzdGF0aWMgdm9pZCBoZWNpX2NoZWNrX2FzZl9tb2RlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBob3N0X3N0YXJ0X21lc3NhZ2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGhvc3RfZW51bV9jbGllbnRzX21lc3NhZ2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGFsbG9jYXRlX21lX2NsaWVudHNfc3RvcmFnZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIGhvc3RfaW5pdF93ZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIGhvc3RfaW5pdF9pYW10aGlmKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBoZWNpX3dhaXRfZXZlbnRfaW50X3RpbWVvdXQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgbG9uZyB0aW1lb3V0KTsKKworCisvKioKKyAqIGhlY2lfaW5pdGlhbGl6ZV9saXN0IC0gU2V0cyB1cCBhIHF1ZXVlIGxpc3QuCisgKgorICogQGxpc3Q6IEFuIGluc3RhbmNlIG9mIG91ciBsaXN0IHN0cnVjdHVyZQorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICovCit2b2lkIGhlY2lfaW5pdGlhbGl6ZV9saXN0KHN0cnVjdCBpb19oZWNpX2xpc3QgKmxpc3QsCisJCQkgIHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJLyogaW5pdGlhbGl6ZSBvdXIgcXVldWUgbGlzdCAqLworCUlOSVRfTElTVF9IRUFEKCZsaXN0LT5oZWNpX2NiLmNiX2xpc3QpOworCWxpc3QtPnN0YXR1cyA9IDA7CisJbGlzdC0+ZGV2aWNlX2V4dGVuc2lvbiA9IGRldjsKK30KKworLyoqCisgKiBoZWNpX2ZsdXNoX3F1ZXVlcyAtIGZsdXNoIG91ciBxdWV1ZXMgbGlzdCBiZWxvbmcgdG8gZmlsZV9leHQuCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKi8KK3ZvaWQgaGVjaV9mbHVzaF9xdWV1ZXMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJaW50IGk7CisKKwlpZiAoIWRldiB8fCAhZmlsZV9leHQpCisJCXJldHVybjsKKworCS8qIGZsdXNoIG91ciBxdWV1ZSBsaXN0IGJlbG9uZyB0byBmaWxlX2V4dCAqLworCWZvciAoaSA9IDA7IGkgPCBIRUNJX0lPX0xJU1RTX05VTUJFUjsgaSsrKSB7CisJCURCRygicmVtb3ZlIGxpc3QgZW50cnkgYmVsb25nIHRvIGZpbGVfZXh0XG4iKTsKKwkJaGVjaV9mbHVzaF9saXN0KGRldi0+aW9fbGlzdF9hcnJheVtpXSwgZmlsZV9leHQpOworCX0KK30KKworCisvKioKKyAqIGhlY2lfZmx1c2hfbGlzdCAtIHJlbW92ZSBsaXN0IGVudHJ5IGJlbG9uZyB0byBmaWxlX2V4dC4KKyAqCisgKiBAbGlzdDogIEFuIGluc3RhbmNlIG9mIG91ciBsaXN0IHN0cnVjdHVyZQorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKi8KK3ZvaWQgaGVjaV9mbHVzaF9saXN0KHN0cnVjdCBpb19oZWNpX2xpc3QgKmxpc3QsCisJCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dF90bXA7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfbmV4dCA9IE5VTEw7CisKKwlpZiAoIWxpc3QgfHwgIWZpbGVfZXh0KQorCQlyZXR1cm47CisKKwlpZiAobGlzdC0+c3RhdHVzICE9IDApCisJCXJldHVybjsKKworCWlmIChsaXN0X2VtcHR5KCZsaXN0LT5oZWNpX2NiLmNiX2xpc3QpKQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdl9jYl9wb3MsIHByaXZfY2JfbmV4dCwKKwkJCQkgJmxpc3QtPmhlY2lfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQlpZiAocHJpdl9jYl9wb3MpIHsKKwkJCWZpbGVfZXh0X3RtcCA9IChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKikKKwkJCQlwcml2X2NiX3Bvcy0+ZmlsZV9wcml2YXRlOworCQkJaWYgKGZpbGVfZXh0X3RtcCkgeworCQkJCWlmIChoZWNpX2ZlX3NhbWVfaWQoZmlsZV9leHQsIGZpbGVfZXh0X3RtcCkpCisJCQkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgorICogaGVjaV9yZXNldF9pYW10aGlmX3BhcmFtcyAtIGluaXRpYWxpemVzIGhlY2kgZGV2aWNlIGlhbXRoaWYKKyAqCisgKiBAZGV2OiBUaGUgaGVjaSBkZXZpY2Ugc3RydWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfcmVzZXRfaWFtdGhpZl9wYXJhbXMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwkvKiByZXNldCBpYW10aGlmIHBhcmFtZXRlcnMuICovCisJZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgPSBOVUxMOworCWRldi0+aWFtdGhpZl9tc2dfYnVmX3NpemUgPSAwOworCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4ID0gMDsKKwlkZXYtPmlhbXRoaWZfY2FuY2VsZWQgPSAwOworCWRldi0+aWFtdGhpZl9maWxlX2V4dC5maWxlID0gTlVMTDsKKwlkZXYtPmlhbXRoaWZfaW9jdGwgPSAwOworCWRldi0+aWFtdGhpZl9zdGF0ZSA9IEhFQ0lfSUFNVEhJRl9JRExFOworCWRldi0+aWFtdGhpZl90aW1lciA9IDA7Cit9CisKKy8qKgorICogaW5pdF9oZWNpX2RldmljZSAtIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIGhlY2kgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIEBwZGV2OiBUaGUgcGNpIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIFRoZSBoZWNpX2RldmljZV9kZXZpY2UgcG9pbnRlciBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBpYW10X2hlY2lfZGV2aWNlICppbml0X2hlY2lfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBpOworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXY7CisKKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHNldHVwIG91ciBsaXN0IGFycmF5ICovCisJZGV2LT5pb19saXN0X2FycmF5WzBdID0gJmRldi0+cmVhZF9saXN0OworCWRldi0+aW9fbGlzdF9hcnJheVsxXSA9ICZkZXYtPndyaXRlX2xpc3Q7CisJZGV2LT5pb19saXN0X2FycmF5WzJdID0gJmRldi0+d3JpdGVfd2FpdGluZ19saXN0OworCWRldi0+aW9fbGlzdF9hcnJheVszXSA9ICZkZXYtPmN0cmxfd3JfbGlzdDsKKwlkZXYtPmlvX2xpc3RfYXJyYXlbNF0gPSAmZGV2LT5jdHJsX3JkX2xpc3Q7CisJZGV2LT5pb19saXN0X2FycmF5WzVdID0gJmRldi0+cHRoaV9jbWRfbGlzdDsKKwlkZXYtPmlvX2xpc3RfYXJyYXlbNl0gPSAmZGV2LT5wdGhpX3JlYWRfY29tcGxldGVfbGlzdDsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5maWxlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPndkX2ZpbGVfZXh0LmxpbmspOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPmlhbXRoaWZfZmlsZV9leHQubGluayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+ZGV2aWNlX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d2FpdF9yZWN2ZF9tc2cpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d2FpdF9zdG9wX3dkKTsKKwlkZXYtPmhlY2lfc3RhdGUgPSBIRUNJX0lOSVRJQUxJWklORzsKKwlkZXYtPmlhbXRoaWZfc3RhdGUgPSBIRUNJX0lBTVRISUZfSURMRTsKKworCS8qIGluaXQgd29yayBmb3Igc2NoZWR1bGUgd29yayAqLworCUlOSVRfV09SSygmZGV2LT53b3JrLCBOVUxMKTsKKwlmb3IgKGkgPSAwOyBpIDwgSEVDSV9JT19MSVNUU19OVU1CRVI7IGkrKykKKwkJaGVjaV9pbml0aWFsaXplX2xpc3QoZGV2LT5pb19saXN0X2FycmF5W2ldLCBkZXYpOworCWRldi0+cGRldiA9IHBkZXY7CisJcmV0dXJuIGRldjsKK30KKworCisKKworc3RhdGljIGludCBoZWNpX3dhaXRfZXZlbnRfaW50X3RpbWVvdXQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJbG9uZyB0aW1lb3V0KQoreworCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChkZXYtPndhaXRfcmVjdmRfbXNnLAorCQkJKGRldi0+cmVjdmRfbXNnKSwgdGltZW91dCk7Cit9CisKKy8qKgorICogaGVjaV9od19pbml0ICAtIGluaXQgaG9zdCBhbmQgZncgdG8gc3RhcnQgd29yay4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK2ludCBoZWNpX2h3X2luaXQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyID0gMDsKKworCWRldi0+aG9zdF9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSKTsKKwlkZXYtPm1lX2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgTUVfQ1NSX0hBKTsKKwlEQkcoImhvc3RfaHdfc3RhdGUgPSAweCUwOHgsIG1lc3RhdGUgPSAweCUwOHguXG4iLAorCSAgICBkZXYtPmhvc3RfaHdfc3RhdGUsIGRldi0+bWVfaHdfc3RhdGUpOworCisJaWYgKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0lTKSA9PSBIX0lTKSB7CisJCS8qIGFja25vd2xlZGdlIGludGVycnVwdCBhbmQgc3RvcCBpbnRlcnVwdHMgKi8KKwkJaGVjaV9zZXRfY3NyX3JlZ2lzdGVyKGRldik7CisJfQorCWRldi0+cmVjdmRfbXNnID0gMDsKKwlEQkcoInJlc2V0IGluIHN0YXJ0IHRoZSBoZWNpIGRldmljZS5cbiIpOworCisJaGVjaV9yZXNldChkZXYsIDEpOworCisJREJHKCJob3N0X2h3X3N0YXRlID0gMHglMDh4LCBtZV9od19zdGF0ZSA9IDB4JTA4eC5cbiIsCisJICAgIGRldi0+aG9zdF9od19zdGF0ZSwgZGV2LT5tZV9od19zdGF0ZSk7CisKKwkvKiB3YWl0IGZvciBNRSB0byB0dXJuIG9uIE1FX1JEWSAqLworCWlmICghZGV2LT5yZWN2ZF9tc2cpCisJCWVyciA9IGhlY2lfd2FpdF9ldmVudF9pbnRfdGltZW91dChkZXYsIEhFQ0lfSU5URVJPUF9USU1FT1VUKTsKKworCWlmICghZXJyICYmICFkZXYtPnJlY3ZkX21zZykgeworCQlkZXYtPmhlY2lfc3RhdGUgPSBIRUNJX0RJU0FCTEVEOworCQlEQkcoIndhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0IGZhaWxlZCIKKwkJICAgICJvbiB3YWl0IGZvciBNRSB0byB0dXJuIG9uIE1FX1JEWS5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgeworCQlpZiAoISgoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfUkRZKSA9PSBIX1JEWSkKKwkJICAgICAgJiYgKChkZXYtPm1lX2h3X3N0YXRlICYgTUVfUkRZX0hSQSkgPT0gTUVfUkRZX0hSQSkpKSB7CisJCQlkZXYtPmhlY2lfc3RhdGUgPSBIRUNJX0RJU0FCTEVEOworCQkJREJHKCJob3N0X2h3X3N0YXRlID0gMHglMDh4LCBtZV9od19zdGF0ZSA9IDB4JTA4eC5cbiIsCisJCQkgICAgZGV2LT5ob3N0X2h3X3N0YXRlLAorCQkJICAgIGRldi0+bWVfaHdfc3RhdGUpOworCisJCQlpZiAoIShkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX1JEWSkgIT0gSF9SRFkpCisJCQkJREJHKCJob3N0IHR1cm4gb2ZmIEhfUkRZLlxuIik7CisKKwkJCWlmICghKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9SRFlfSFJBKSAhPSBNRV9SRFlfSFJBKQorCQkJCURCRygiTUUgdHVybiBvZmYgTUVfUkRZLlxuIik7CisKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJoZWNpOiBsaW5rIGxheWVyIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9CisJZGV2LT5yZWN2ZF9tc2cgPSAwOworCURCRygiaG9zdF9od19zdGF0ZSA9IDB4JTA4eCwgbWVfaHdfc3RhdGUgPSAweCUwOHguXG4iLAorCSAgICBkZXYtPmhvc3RfaHdfc3RhdGUsIGRldi0+bWVfaHdfc3RhdGUpOworCURCRygiTUUgdHVybiBvbiBNRV9SRFkgYW5kIGhvc3QgdHVybiBvbiBIX1JEWS5cbiIpOworCXByaW50ayhLRVJOX0lORk8gImhlY2k6IGxpbmsgbGF5ZXIgaGFzIGJlZW4gZXN0YWJsaXNoZWQuXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBoZWNpX2h3X3Jlc2V0IC0gcmVzZXQgZncgdmlhIGhlY2kgY3NyIHJlZ2lzdGVyLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBpbnRlcnJ1cHRzOiBpZiBpbnRlcnJ1cHQgc2hvdWxkIGJlIGVuYWJsZSBhZnRlciByZXNldC4KKyAqLworc3RhdGljIHZvaWQgaGVjaV9od19yZXNldChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaW50ZXJydXB0cykKK3sKKwlkZXYtPmhvc3RfaHdfc3RhdGUgfD0gKEhfUlNUIHwgSF9JRyk7CisKKwlpZiAoaW50ZXJydXB0cykKKwkJaGVjaV9jc3JfZW5hYmxlX2ludGVycnVwdHMoZGV2KTsKKwllbHNlCisJCWhlY2lfY3NyX2Rpc2FibGVfaW50ZXJydXB0cyhkZXYpOworCisJQlVHX09OKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX1JTVCkgIT0gSF9SU1QpOworCUJVR19PTigoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9SRFkpICE9IDApOworfQorCisvKioKKyAqIGhlY2lfcmVzZXQgLSByZXNldCBob3N0IGFuZCBmdy4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaW50ZXJydXB0czogaWYgaW50ZXJydXB0IHNob3VsZCBiZSBlbmFibGUgYWZ0ZXIgcmVzZXQuCisgKi8KK3ZvaWQgaGVjaV9yZXNldChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBpbnQgaW50ZXJydXB0cykKK3sKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfbmV4dCA9IE5VTEw7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfbmV4dCA9IE5VTEw7CisJaW50IHVuZXhwZWN0ZWQgPSAwOworCisJaWYgKGRldi0+aGVjaV9zdGF0ZSA9PSBIRUNJX1JFQ09WRVJJTkdfRlJPTV9SRVNFVCkgeworCQlkZXYtPm5lZWRfcmVzZXQgPSAxOworCQlyZXR1cm47CisJfQorCisJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0lOSVRJQUxJWklORyAmJgorCSAgICBkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9ESVNBQkxFRCAmJgorCSAgICBkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9QT1dFUl9ET1dOICYmCisJICAgIGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX1BPV0VSX1VQKQorCQl1bmV4cGVjdGVkID0gMTsKKworCWlmIChkZXYtPnJlaW5pdF90c2sgIT0gTlVMTCkgeworCQlrdGhyZWFkX3N0b3AoZGV2LT5yZWluaXRfdHNrKTsKKwkJZGV2LT5yZWluaXRfdHNrID0gTlVMTDsKKwl9CisKKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUik7CisKKwlEQkcoImJlZm9yZSByZXNldCBob3N0X2h3X3N0YXRlID0gMHglMDh4LlxuIiwKKwkgICAgZGV2LT5ob3N0X2h3X3N0YXRlKTsKKworCWhlY2lfaHdfcmVzZXQoZGV2LCBpbnRlcnJ1cHRzKTsKKworCWRldi0+aG9zdF9od19zdGF0ZSAmPSB+SF9SU1Q7CisJZGV2LT5ob3N0X2h3X3N0YXRlIHw9IEhfSUc7CisKKwl3cml0ZV9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IsIGRldi0+aG9zdF9od19zdGF0ZSk7CisKKwlEQkcoImN1cnJlbnRseSBzYXZlZCBob3N0X2h3X3N0YXRlID0gMHglMDh4LlxuIiwKKwkgICAgZGV2LT5ob3N0X2h3X3N0YXRlKTsKKworCWRldi0+bmVlZF9yZXNldCA9IDA7CisKKwlpZiAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfSU5JVElBTElaSU5HKSB7CisJCWlmICgoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfRElTQUJMRUQpICYmCisJCSAgICAoZGV2LT5oZWNpX3N0YXRlICE9IEhFQ0lfUE9XRVJfRE9XTikpCisJCQlkZXYtPmhlY2lfc3RhdGUgPSBIRUNJX1JFU0VUSU5HOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmaWxlX3BvcywKKwkJCQlmaWxlX25leHQsICZkZXYtPmZpbGVfbGlzdCwgbGluaykgeworCQkJZmlsZV9wb3MtPnN0YXRlID0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRDsKKwkJCWZpbGVfcG9zLT5mbG93X2N0cmxfY3JlZHMgPSAwOworCQkJZmlsZV9wb3MtPnJlYWRfY2IgPSBOVUxMOworCQkJZmlsZV9wb3MtPnRpbWVyX2NvdW50ID0gMDsKKwkJfQorCQkvKiByZW1vdmUgZW50cnkgaWYgYWxyZWFkeSBpbiBsaXN0ICovCisJCURCRygibGlzdCBkZWwgaWFtdGhpZiBhbmQgd2QgZmlsZSBsaXN0LlxuIik7CisJCWhlY2lfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChkZXYsCisJCQkJZGV2LT53ZF9maWxlX2V4dC5ob3N0X2NsaWVudF9pZCk7CisKKwkJaGVjaV9yZW1vdmVfY2xpZW50X2Zyb21fZmlsZV9saXN0KGRldiwKKwkJCQlkZXYtPmlhbXRoaWZfZmlsZV9leHQuaG9zdF9jbGllbnRfaWQpOworCisJCWhlY2lfcmVzZXRfaWFtdGhpZl9wYXJhbXMoZGV2KTsKKwkJZGV2LT53ZF9kdWVfY291bnRlciA9IDA7CisJCWRldi0+ZXh0cmFfd3JpdGVfaW5kZXggPSAwOworCX0KKworCWRldi0+bnVtX2hlY2lfbWVfY2xpZW50cyA9IDA7CisJZGV2LT5yZF9tc2dfaGRyID0gMDsKKwlkZXYtPnN0b3AgPSAwOworCWRldi0+d2RfcGVuZGluZyA9IDA7CisKKwkvKiB1cGRhdGUgdGhlIHN0YXRlIG9mIHRoZSByZWdpc3RlcnMgYWZ0ZXIgcmVzZXQgKi8KKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSAgcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IpOworCWRldi0+bWVfaHdfc3RhdGUgPSAgcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgTUVfQ1NSX0hBKTsKKworCURCRygiYWZ0ZXIgcmVzZXQgaG9zdF9od19zdGF0ZSA9IDB4JTA4eCwgbWVfaHdfc3RhdGUgPSAweCUwOHguXG4iLAorCSAgICBkZXYtPmhvc3RfaHdfc3RhdGUsIGRldi0+bWVfaHdfc3RhdGUpOworCisJaWYgKHVuZXhwZWN0ZWQpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImhlY2k6IHVuZXhwZWN0ZWQgcmVzZXQuXG4iKTsKKworCS8qIFdha2UgdXAgYWxsIHJlYWRpbmdzIHNvIHRoZXkgY2FuIGJlIGludGVycnVwdGVkICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZpbGVfcG9zLCBmaWxlX25leHQsICZkZXYtPmZpbGVfbGlzdCwgbGluaykgeworCQlpZiAoJmZpbGVfcG9zLT5yeF93YWl0ICYmCisJCSAgICB3YWl0cXVldWVfYWN0aXZlKCZmaWxlX3Bvcy0+cnhfd2FpdCkpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gImhlY2k6IFdha2luZyB1cCBjbGllbnQhXG4iKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZmlsZV9wb3MtPnJ4X3dhaXQpOworCQl9CisJfQorCS8qIHJlbW92ZSBhbGwgd2FpdGluZyByZXF1ZXN0cyAqLworCWlmIChkZXYtPndyaXRlX2xpc3Quc3RhdHVzID09IDAgJiYKKwkJIWxpc3RfZW1wdHkoJmRldi0+d3JpdGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2NiX3BvcywgcHJpdl9jYl9uZXh0LAorCQkJCSZkZXYtPndyaXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCQlpZiAocHJpdl9jYl9wb3MpIHsKKwkJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJCWhlY2lfZnJlZV9jYl9wcml2YXRlKHByaXZfY2JfcG9zKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoqCisgKiBoZWNpX2luaXRpYWxpemVfY2xpZW50cyAtIGhlY2kgY29tbXVuaWNhdGlvbiBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKi8KK2ludCBoZWNpX2luaXRpYWxpemVfY2xpZW50cyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCWludCBzdGF0dXM7CisKKwltc2xlZXAoMTAwKTsgLyogRlcgbmVlZHMgdGltZSB0byBiZSByZWFkeSB0byB0YWxrIHdpdGggdXMgKi8KKwlEQkcoImxpbmsgaXMgZXN0YWJsaXNoZWQgc3RhcnQgc2VuZGluZyBtZXNzYWdlcy5cbiIpOworCS8qIGxpbmsgaXMgZXN0YWJsaXNoZWQgc3RhcnQgc2VuZGluZyBtZXNzYWdlcy4gKi8KKwlzdGF0dXMgPSBob3N0X3N0YXJ0X21lc3NhZ2UoZGV2KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZGV2LT5oZWNpX3N0YXRlID0gSEVDSV9ESVNBQkxFRDsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlEQkcoInN0YXJ0IHNlbmRpbmcgbWVzc2FnZXMgZmFpbGVkLlxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogZW51bWVyYXRlIGNsaWVudHMgKi8KKwlzdGF0dXMgPSBob3N0X2VudW1fY2xpZW50c19tZXNzYWdlKGRldik7CisJaWYgKHN0YXR1cyAhPSAwKSB7CisJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWRldi0+aGVjaV9zdGF0ZSA9IEhFQ0lfRElTQUJMRUQ7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJREJHKCJlbnVtIGNsaWVudHMgZmFpbGVkLlxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCS8qIGFsbG9jYXRlIHN0b3JhZ2UgZm9yIE1FIGNsaWVudHMgcmVwcmVzZW50YXRpb24gKi8KKwlzdGF0dXMgPSBhbGxvY2F0ZV9tZV9jbGllbnRzX3N0b3JhZ2UoZGV2KTsKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZGV2LT5udW1faGVjaV9tZV9jbGllbnRzID0gMDsKKwkJZGV2LT5oZWNpX3N0YXRlID0gSEVDSV9ESVNBQkxFRDsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlEQkcoImFsbG9jYXRlIGNsaWVudHMgZmFpbGVkLlxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaGVjaV9jaGVja19hc2ZfbW9kZShkZXYpOworCS8qaGVjaSBpbml0aWFsaXphdGlvbiB3ZCAqLworCWhvc3RfaW5pdF93ZChkZXYpOworCS8qaGVjaSBpbml0aWFsaXphdGlvbiBpYW10aGlmIGNsaWVudCAqLworCWhvc3RfaW5pdF9pYW10aGlmKGRldik7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPm5lZWRfcmVzZXQpIHsKKwkJZGV2LT5uZWVkX3Jlc2V0ID0gMDsKKwkJZGV2LT5oZWNpX3N0YXRlID0gSEVDSV9ESVNBQkxFRDsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltZW1zZXQoZGV2LT5oZWNpX2hvc3RfY2xpZW50cywgMCwgc2l6ZW9mKGRldi0+aGVjaV9ob3N0X2NsaWVudHMpKTsKKwlkZXYtPm9wZW5faGFuZGxlX2NvdW50ID0gMDsKKwlkZXYtPmhlY2lfaG9zdF9jbGllbnRzWzBdIHw9IDc7CisJZGV2LT5jdXJyZW50X2hvc3RfY2xpZW50X2lkID0gMzsKKwlkZXYtPmhlY2lfc3RhdGUgPSBIRUNJX0VOQUJMRUQ7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCURCRygiaW5pdGlhbGl6YXRpb24gaGVjaSBjbGllbnRzIHN1Y2Nlc3NmdWwuXG4iKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBoZWNpX3Rhc2tfaW5pdGlhbGl6ZV9jbGllbnRzIC0gaGVjaSByZWluaXRpYWxpemF0aW9uIHRhc2sKKyAqCisgKiBAZGF0YTogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICovCitpbnQgaGVjaV90YXNrX2luaXRpYWxpemVfY2xpZW50cyh2b2lkICpkYXRhKQoreworCWludCByZXQ7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqKSBkYXRhOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5yZWluaXRfdHNrICE9IE5VTEwpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlEQkcoInJlaW5pdCB0YXNrIGFscmVhZHkgc3RhcnRlZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJZGV2LT5yZWluaXRfdHNrID0gY3VycmVudDsKKwljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlyZXQgPSBoZWNpX2luaXRpYWxpemVfY2xpZW50cyhkZXYpOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlkZXYtPnJlaW5pdF90c2sgPSBOVUxMOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaG9zdF9zdGFydF9tZXNzYWdlIC0gaGVjaSBob3N0IHNlbmQgc3RhcnQgbWVzc2FnZS4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaG9zdF9zdGFydF9tZXNzYWdlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJbG9uZyB0aW1lb3V0ID0gNjA7CS8qIDYwIHNlY29uZCAqLworCisJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHI7CisJc3RydWN0IGhibV9ob3N0X3ZlcnNpb25fcmVxdWVzdCAqaG9zdF9zdGFydF9yZXE7CisJc3RydWN0IGhibV9ob3N0X3N0b3BfcmVxdWVzdCAqaG9zdF9zdG9wX3JlcTsKKwlpbnQgZXJyID0gMDsKKworCS8qIGhvc3Qgc3RhcnQgbWVzc2FnZSAqLworCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwloZWNpX2hkci0+aG9zdF9hZGRyID0gMDsKKwloZWNpX2hkci0+bWVfYWRkciA9IDA7CisJaGVjaV9oZHItPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaGJtX2hvc3RfdmVyc2lvbl9yZXF1ZXN0KTsKKwloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJaG9zdF9zdGFydF9yZXEgPQorCSAgICAoc3RydWN0IGhibV9ob3N0X3ZlcnNpb25fcmVxdWVzdCAqKSAmZGV2LT53cl9tc2dfYnVmWzFdOworCW1lbXNldChob3N0X3N0YXJ0X3JlcSwgMCwgc2l6ZW9mKHN0cnVjdCBoYm1faG9zdF92ZXJzaW9uX3JlcXVlc3QpKTsKKwlob3N0X3N0YXJ0X3JlcS0+Y21kLmNtZCA9IEhPU1RfU1RBUlRfUkVRX0NNRDsKKwlob3N0X3N0YXJ0X3JlcS0+aG9zdF92ZXJzaW9uLm1ham9yX3ZlcnNpb24gPSBIQk1fTUFKT1JfVkVSU0lPTjsKKwlob3N0X3N0YXJ0X3JlcS0+aG9zdF92ZXJzaW9uLm1pbm9yX3ZlcnNpb24gPSBIQk1fTUlOT1JfVkVSU0lPTjsKKwlkZXYtPnJlY3ZkX21zZyA9IDA7CisJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCBoZWNpX2hkciwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikgKGhvc3Rfc3RhcnRfcmVxKSwKKwkJCQkgICAgICAgaGVjaV9oZHItPmxlbmd0aCkpIHsKKwkJREJHKCJzZW5kIHZlcnNpb24gdG8gZncgZmFpbC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJREJHKCJjYWxsIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0IGZvciByZXNwb25zZSBtZXNzYWdlLlxuIik7CisJLyogd2FpdCBmb3IgcmVzcG9uc2UgKi8KKwllcnIgPSBoZWNpX3dhaXRfZXZlbnRfaW50X3RpbWVvdXQoZGV2LCB0aW1lb3V0ICogSFopOworCWlmICghZXJyICYmICFkZXYtPnJlY3ZkX21zZykgeworCQlEQkcoIndhaXRfdGltZW91dCBmYWlsZWQgb24gaG9zdCBzdGFydCByZXNwb25zZSBtZXNzYWdlLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlkZXYtPnJlY3ZkX21zZyA9IDA7CisJREJHKCJ3YWl0X3RpbWVvdXQgc3VjY2Vzc2Z1bCBvbiBob3N0IHN0YXJ0IHJlc3BvbnNlIG1lc3NhZ2UuXG4iKTsKKwlpZiAoKGRldi0+dmVyc2lvbi5tYWpvcl92ZXJzaW9uICE9IEhCTV9NQUpPUl9WRVJTSU9OKSB8fAorCSAgICAoZGV2LT52ZXJzaW9uLm1pbm9yX3ZlcnNpb24gIT0gSEJNX01JTk9SX1ZFUlNJT04pKSB7CisJCS8qIHNlbmQgc3RvcCBtZXNzYWdlICovCisJCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSAwOworCQloZWNpX2hkci0+bWVfYWRkciA9IDA7CisJCWhlY2lfaGRyLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhibV9ob3N0X3N0b3BfcmVxdWVzdCk7CisJCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCQloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJCWhvc3Rfc3RvcF9yZXEgPQorCQkgICAgKHN0cnVjdCBoYm1faG9zdF9zdG9wX3JlcXVlc3QgKikgJmRldi0+d3JfbXNnX2J1ZlsxXTsKKworCQltZW1zZXQoaG9zdF9zdG9wX3JlcSwgMCwgc2l6ZW9mKHN0cnVjdCBoYm1faG9zdF9zdG9wX3JlcXVlc3QpKTsKKwkJaG9zdF9zdG9wX3JlcS0+Y21kLmNtZCA9IEhPU1RfU1RPUF9SRVFfQ01EOworCQlob3N0X3N0b3BfcmVxLT5yZWFzb24gPSBEUklWRVJfU1RPUF9SRVFVRVNUOworCQloZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCBoZWNpX2hkciwKKwkJCQkgICAodW5zaWduZWQgY2hhciAqKSAoaG9zdF9zdG9wX3JlcSksCisJCQkJICAgaGVjaV9oZHItPmxlbmd0aCk7CisJCURCRygidmVyc2lvbiBtaXNtYXRjaC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBob3N0X2VudW1fY2xpZW50c19tZXNzYWdlIC0gaG9zdCBzZW5kIGVudW1lcmF0aW9uIGNsaWVudCByZXF1ZXN0IG1lc3NhZ2UuCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGhvc3RfZW51bV9jbGllbnRzX21lc3NhZ2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwlsb25nIHRpbWVvdXQgPSA1OwkvKjUgc2Vjb25kICovCisJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHI7CisJc3RydWN0IGhibV9ob3N0X2VudW1fcmVxdWVzdCAqaG9zdF9lbnVtX3JlcTsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaSwgajsKKworCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwkvKiBlbnVtZXJhdGUgY2xpZW50cyAqLworCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSAwOworCWhlY2lfaGRyLT5tZV9hZGRyID0gMDsKKwloZWNpX2hkci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoYm1faG9zdF9lbnVtX3JlcXVlc3QpOworCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwlob3N0X2VudW1fcmVxID0gKHN0cnVjdCBoYm1faG9zdF9lbnVtX3JlcXVlc3QgKikgJmRldi0+d3JfbXNnX2J1ZlsxXTsKKwltZW1zZXQoaG9zdF9lbnVtX3JlcSwgMCwgc2l6ZW9mKHN0cnVjdCBoYm1faG9zdF9lbnVtX3JlcXVlc3QpKTsKKwlob3N0X2VudW1fcmVxLT5jbWQuY21kID0gSE9TVF9FTlVNX1JFUV9DTUQ7CisJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCBoZWNpX2hkciwKKwkJCSAgICAgICAodW5zaWduZWQgY2hhciAqKSAoaG9zdF9lbnVtX3JlcSksCisJCQkgICAgICAgaGVjaV9oZHItPmxlbmd0aCkpIHsKKwkJREJHKCJzZW5kIGVudW1lcmF0aW9uIHJlcXVlc3QgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwkvKiB3YWl0IGZvciByZXNwb25zZSAqLworCWRldi0+cmVjdmRfbXNnID0gMDsKKwllcnIgPSBoZWNpX3dhaXRfZXZlbnRfaW50X3RpbWVvdXQoZGV2LCB0aW1lb3V0ICogSFopOworCWlmICghZXJyICYmICFkZXYtPnJlY3ZkX21zZykgeworCQlEQkcoIndhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0IGZhaWxlZCAiCisJCQkJIm9uIGVudW1lcmF0aW9uIGNsaWVudHMgcmVzcG9uc2UgbWVzc2FnZS5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJZGV2LT5yZWN2ZF9tc2cgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkvKiBjb3VudCBob3cgbWFueSBNRSBjbGllbnRzIHdlIGhhdmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGRldi0+aGVjaV9tZV9jbGllbnRzKTsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCA4OyBqKyspIHsKKwkJCWlmICgoZGV2LT5oZWNpX21lX2NsaWVudHNbaV0gJiAoMSA8PCBqKSkgIT0gMCkKKwkJCQlkZXYtPm51bV9oZWNpX21lX2NsaWVudHMrKzsKKworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGhvc3RfY2xpZW50X3Byb3BlcnRpZXMgLSByZWFkcyBwcm9wZXJ0aWVzIGZvciBjbGllbnQKKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaWR4OiBjbGllbnQgaW5kZXggaW4gbWUgY2xpZW50IGFycmF5CisgKiBAY2xpZW50X2lkOiBpZCBvZiB0aGUgY2xpZW50CisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaG9zdF9jbGllbnRfcHJvcGVydGllcyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGhlY2lfbWVfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHI7CisJc3RydWN0IGhibV9wcm9wc19yZXF1ZXN0ICpob3N0X2NsaV9yZXE7CisJaW50IGVycjsKKworCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwloZWNpX2hkci0+aG9zdF9hZGRyID0gMDsKKwloZWNpX2hkci0+bWVfYWRkciA9IDA7CisJaGVjaV9oZHItPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaGJtX3Byb3BzX3JlcXVlc3QpOworCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCWhlY2lfaGRyLT5yZXNlcnZlZCA9IDA7CisKKwlob3N0X2NsaV9yZXEgPSAoc3RydWN0IGhibV9wcm9wc19yZXF1ZXN0ICopICZkZXYtPndyX21zZ19idWZbMV07CisJbWVtc2V0KGhvc3RfY2xpX3JlcSwgMCwgc2l6ZW9mKHN0cnVjdCBoYm1fcHJvcHNfcmVxdWVzdCkpOworCWhvc3RfY2xpX3JlcS0+Y21kLmNtZCA9IEhPU1RfQ0xJRU5UX1BST1BFUlRFSVNfUkVRX0NNRDsKKwlob3N0X2NsaV9yZXEtPmFkZHJlc3MgPSBjbGllbnQtPmNsaWVudF9pZDsKKwlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsIGhlY2lfaGRyLAorCQkJCSh1bnNpZ25lZCBjaGFyICopIChob3N0X2NsaV9yZXEpLAorCQkJCWhlY2lfaGRyLT5sZW5ndGgpKSB7CisJCURCRygic2VuZCBwcm9wcyByZXF1ZXN0IGZhaWxlZC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJLyogd2FpdCBmb3IgcmVzcG9uc2UgKi8KKwlkZXYtPnJlY3ZkX21zZyA9IDA7CisJZXJyID0gaGVjaV93YWl0X2V2ZW50X2ludF90aW1lb3V0KGRldiwgMTAgKiBIWik7CisJaWYgKCFlcnIgJiYgIWRldi0+cmVjdmRfbXNnKSB7CisJCURCRygid2FpdCBmYWlsZWQgb24gcHJvcHMgcmVzcCBtc2cuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWRldi0+cmVjdmRfbXNnID0gMDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhbGxvY2F0ZV9tZV9jbGllbnRzX3N0b3JhZ2UgLSBhbGxvY2F0ZSBzdG9yYWdlIGZvciBtZSBjbGllbnRzCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGFsbG9jYXRlX21lX2NsaWVudHNfc3RvcmFnZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBoZWNpX21lX2NsaWVudCAqY2xpZW50czsKKwlzdHJ1Y3QgaGVjaV9tZV9jbGllbnQgKmNsaWVudDsKKwlfX3U4IG51bSwgaSwgajsKKwlpbnQgZXJyOworCisJaWYgKGRldi0+bnVtX2hlY2lfbWVfY2xpZW50cyA8PSAwKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJa2ZyZWUoZGV2LT5tZV9jbGllbnRzKTsKKwlkZXYtPm1lX2NsaWVudHMgPSBOVUxMOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCS8qIGFsbG9jYXRlIHN0b3JhZ2UgZm9yIE1FIGNsaWVudHMgcmVwcmVzZW50YXRpb24gKi8KKwljbGllbnRzID0ga2NhbGxvYyhkZXYtPm51bV9oZWNpX21lX2NsaWVudHMsCisJCQlzaXplb2Yoc3RydWN0IGhlY2lfbWVfY2xpZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbGllbnRzKSB7CisJCURCRygibWVtb3J5IGFsbG9jYXRpb24gZm9yIE1FIGNsaWVudHMgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJZGV2LT5tZV9jbGllbnRzID0gY2xpZW50czsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwludW0gPSAwOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZGV2LT5oZWNpX21lX2NsaWVudHMpOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgeworCQkJaWYgKChkZXYtPmhlY2lfbWVfY2xpZW50c1tpXSAmICgxIDw8IGopKSAhPSAwKSB7CisJCQkJY2xpZW50ID0gJmRldi0+bWVfY2xpZW50c1tudW1dOworCQkJCWNsaWVudC0+Y2xpZW50X2lkID0gKGkgKiA4KSArIGo7CisJCQkJY2xpZW50LT5mbG93X2N0cmxfY3JlZHMgPSAwOworCQkJCWVyciA9IGhvc3RfY2xpZW50X3Byb3BlcnRpZXMoZGV2LCBjbGllbnQpOworCQkJCWlmIChlcnIgIT0gMCkgeworCQkJCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJCQlrZnJlZShkZXYtPm1lX2NsaWVudHMpOworCQkJCQlkZXYtPm1lX2NsaWVudHMgPSBOVUxMOworCQkJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQkJCXJldHVybiBlcnI7CisJCQkJfQorCQkJCW51bSsrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaGVjaV9pbml0X2ZpbGVfcHJpdmF0ZSAtIGluaXRpYWxpemVzIHByaXZhdGUgZmlsZSBzdHJ1Y3R1cmUuCisgKgorICogQHByaXY6IHByaXZhdGUgZmlsZSBzdHJ1Y3R1cmUgdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIEBmaWxlOiB0aGUgZmlsZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgaGVjaV9pbml0X2ZpbGVfcHJpdmF0ZShzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKnByaXYsCisJCQkJICAgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUpKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+ZmlsZV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cmVhZF9pb19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+d3JpdGVfaW9fbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+d2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+cnhfd2FpdCk7CisJREJHKCJwcml2LT5yeF93YWl0ID0lcFxuIiwgJnByaXYtPnJ4X3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPnR4X3dhaXQpOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5saW5rKTsKKwlwcml2LT5yZWFkaW5nX3N0YXRlID0gSEVDSV9JRExFOworCXByaXYtPndyaXRpbmdfc3RhdGUgPSBIRUNJX0lETEU7Cit9CisKKy8qKgorICogaGVjaV9maW5kX21lX2NsaWVudCAtIHNlYXJjaCBmb3IgTUUgY2xpZW50IGd1aWQKKyAqICAgICAgICAgICAgICAgICAgICAgICBzZXRzIGNsaWVudF9pZCBpbiBoZWNpX2ZpbGVfcHJpdmF0ZSBpZiBmb3VuZAorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQHByaXY6IHByaXZhdGUgZmlsZSBzdHJ1Y3R1cmUgdG8gc2V0IGNsaWVudF9pZCBpbgorICogQGNndWlkOiBzZWFyY2hlZCBndWlkIG9mIE1FIGNsaWVudAorICogQGNsaWVudF9pZDogaWQgb2YgaG9zdCBjbGllbnQgdG8gYmUgc2V0IGluIGZpbGUgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIE1FIGNsaWVudCBpbmRleAorICovCitzdGF0aWMgX191OCBoZWNpX2ZpbmRfbWVfY2xpZW50KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpwcml2LAorCQkJCWNvbnN0IHN0cnVjdCBndWlkICpjZ3VpZCwgX191OCBjbGllbnRfaWQpCit7CisJX191OCBpOworCisJaWYgKChkZXYgPT0gTlVMTCkgfHwgKHByaXYgPT0gTlVMTCkgfHwgKGNndWlkID09IE5VTEwpKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9oZWNpX21lX2NsaWVudHM7IGkrKykgeworCQlpZiAobWVtY21wKGNndWlkLAorCQkJICAgJmRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5wcm90b2NvbF9uYW1lLAorCQkJICAgc2l6ZW9mKHN0cnVjdCBndWlkKSkgPT0gMCkgeworCQkJcHJpdi0+bWVfY2xpZW50X2lkID0gZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZDsKKwkJCXByaXYtPnN0YXRlID0gSEVDSV9GSUxFX0NPTk5FQ1RJTkc7CisJCQlwcml2LT5ob3N0X2NsaWVudF9pZCA9IGNsaWVudF9pZDsKKworCQkJbGlzdF9hZGRfdGFpbCgmcHJpdi0+bGluaywgJmRldi0+ZmlsZV9saXN0KTsKKwkJCXJldHVybiBpOworCQl9CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIGhlY2lfY2hlY2tfYXNmX21vZGUgLSBjaGVjayBmb3IgQVNGIGNsaWVudAorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqLworc3RhdGljIHZvaWQgaGVjaV9jaGVja19hc2ZfbW9kZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCV9fdTggaTsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJZGV2LT5hc2ZfbW9kZSA9IDA7CisJLyogZmluZCBNRSBBU0YgY2xpZW50IC0gb3RoZXJ3aXNlIGFzc3VtZSBBTVQgbW9kZSAqLworCURCRygiZmluZCBNRSBBU0YgY2xpZW50IC0gb3RoZXJ3aXNlIGFzc3VtZSBBTVQgbW9kZS5cbiIpOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9oZWNpX21lX2NsaWVudHM7IGkrKykgeworCQlpZiAobWVtY21wKCZoZWNpX2FzZl9ndWlkLAorCQkJCSZkZXYtPm1lX2NsaWVudHNbaV0ucHJvcHMucHJvdG9jb2xfbmFtZSwKKwkJCQlzaXplb2Yoc3RydWN0IGd1aWQpKSA9PSAwKSB7CisJCQlkZXYtPmFzZl9tb2RlID0gMTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCURCRygiZm91bmQgTUUgQVNGIGNsaWVudC5cbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlEQkcoImFzc3VtZSBBTVQgbW9kZS5cbiIpOworfQorCisvKioKKyAqIGhlY2lfY29ubmVjdF9tZV9jbGllbnQgLSBjb25uZWN0IE1FIGNsaWVudAorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQHByaXY6IHByaXZhdGUgZmlsZSBzdHJ1Y3R1cmUKKyAqIEB0aW1lb3V0OiBjb25uZWN0IHRpbWVvdXQgaW4gc2Vjb25kcworICoKKyAqIHJldHVybnMgMSAtIGlmIGNvbm5lY3RlZCwgMCAtIGlmIG5vdAorICovCitzdGF0aWMgX191OCBoZWNpX2Nvbm5lY3RfbWVfY2xpZW50KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpwcml2LAorCQkJCSAgIGxvbmcgdGltZW91dCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICgoZGV2ID09IE5VTEwpIHx8IChwcml2ID09IE5VTEwpKQorCQlyZXR1cm4gMDsKKworCWlmICghaGVjaV9jb25uZWN0KGRldiwgcHJpdikpIHsKKwkJREJHKCJmYWlsZWQgdG8gY2FsbCBoZWNpX2Nvbm5lY3QgZm9yIGNsaWVudF9pZD0lZC5cbiIsCisJCSAgICBwcml2LT5ob3N0X2NsaWVudF9pZCk7CisJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWhlY2lfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdChkZXYsIHByaXYtPmhvc3RfY2xpZW50X2lkKTsKKwkJcHJpdi0+c3RhdGUgPSBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybiAwOworCX0KKworCWVyciA9IHdhaXRfZXZlbnRfdGltZW91dChkZXYtPndhaXRfcmVjdmRfbXNnLAorCSAgICAoSEVDSV9GSUxFX0NPTk5FQ1RFRCA9PSBwcml2LT5zdGF0ZSB8fAorCSAgICAgSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRCA9PSBwcml2LT5zdGF0ZSksCisJICAgIHRpbWVvdXQgKiBIWik7CisJaWYgKEhFQ0lfRklMRV9DT05ORUNURUQgIT0gcHJpdi0+c3RhdGUpIHsKKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJaGVjaV9yZW1vdmVfY2xpZW50X2Zyb21fZmlsZV9saXN0KGRldiwgcHJpdi0+aG9zdF9jbGllbnRfaWQpOworCQlEQkcoImZhaWxlZCB0byBjb25uZWN0IGNsaWVudF9pZD0lZCBzdGF0ZT0lZC5cbiIsCisJCSAgICBwcml2LT5ob3N0X2NsaWVudF9pZCwgcHJpdi0+c3RhdGUpOworCQlpZiAoZXJyKQorCQkJREJHKCJmYWlsZWQgY29ubmVjdCBlcnI9JTA4eFxuIiwgZXJyKTsKKwkJcHJpdi0+c3RhdGUgPSBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybiAwOworCX0KKwlEQkcoInN1Y2Nlc3NmdWxseSBjb25uZWN0ZWQgY2xpZW50X2lkPSVkLlxuIiwKKwkgICAgcHJpdi0+aG9zdF9jbGllbnRfaWQpOworCXJldHVybiAxOworfQorCisvKioKKyAqIGhvc3RfaW5pdF93ZCAtIGhlY2kgaW5pdGlhbGl6YXRpb24gd2QuCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICovCitzdGF0aWMgdm9pZCBob3N0X2luaXRfd2Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJaGVjaV9pbml0X2ZpbGVfcHJpdmF0ZSgmZGV2LT53ZF9maWxlX2V4dCwgTlVMTCk7CisKKwkvKiBsb29rIGZvciBXRCBjbGllbnQgYW5kIGNvbm5lY3QgdG8gaXQgKi8KKwlkZXYtPndkX2ZpbGVfZXh0LnN0YXRlID0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRDsKKwlkZXYtPndkX3RpbWVvdXQgPSAwOworCisJaWYgKGRldi0+YXNmX21vZGUpIHsKKwkJbWVtY3B5KGRldi0+d2RfZGF0YSwgaGVjaV9zdG9wX3dkX3BhcmFtcywgSEVDSV9XRF9QQVJBTVNfU0laRSk7CisJfSBlbHNlIHsKKwkJLyogQU1UIG1vZGUgKi8KKwkJZGV2LT53ZF90aW1lb3V0ID0gQU1UX1dEX1ZBTFVFOworCQlEQkcoImRldi0+d2RfdGltZW91dD0lZC5cbiIsIGRldi0+d2RfdGltZW91dCk7CisJCW1lbWNweShkZXYtPndkX2RhdGEsIGhlY2lfc3RhcnRfd2RfcGFyYW1zLCBIRUNJX1dEX1BBUkFNU19TSVpFKTsKKwkJbWVtY3B5KGRldi0+d2RfZGF0YSArIEhFQ0lfV0RfUEFSQU1TX1NJWkUsCisJCSAgICAgICAmZGV2LT53ZF90aW1lb3V0LCBzaXplb2YoX191MTYpKTsKKwl9CisKKwkvKiBmaW5kIE1FIFdEIGNsaWVudCAqLworCWhlY2lfZmluZF9tZV9jbGllbnQoZGV2LCAmZGV2LT53ZF9maWxlX2V4dCwKKwkJCSAgICAmaGVjaV93ZF9ndWlkLCBIRUNJX1dEX0hPU1RfQ0xJRU5UX0lEKTsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlEQkcoImNoZWNrIHdkX2ZpbGVfZXh0XG4iKTsKKwlpZiAoSEVDSV9GSUxFX0NPTk5FQ1RJTkcgPT0gZGV2LT53ZF9maWxlX2V4dC5zdGF0ZSkgeworCQlpZiAoaGVjaV9jb25uZWN0X21lX2NsaWVudChkZXYsICZkZXYtPndkX2ZpbGVfZXh0LCAxNSkgPT0gMSkgeworCQkJREJHKCJkZXYtPndkX3RpbWVvdXQ9JWQuXG4iLCBkZXYtPndkX3RpbWVvdXQpOworCQkJaWYgKGRldi0+d2RfdGltZW91dCAhPSAwKQorCQkJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAxOworCQkJZWxzZQorCQkJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAwOworCQkJREJHKCJzdWNjZXNzZnVsbHkgY29ubmVjdGVkIHRvIFdEIGNsaWVudC5cbiIpOworCQl9CisJfSBlbHNlCisJCURCRygiZmFpbGVkIHRvIGZpbmQgV0QgY2xpZW50LlxuIik7CisKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJZGV2LT53ZF90aW1lci5mdW5jdGlvbiA9ICZoZWNpX3dkX3RpbWVyOworCWRldi0+d2RfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworfQorCisKKy8qKgorICogaG9zdF9pbml0X2lhbXRoaWYgLSBoZWNpIGluaXRpYWxpemF0aW9uIGlhbXRoaWYgY2xpZW50LgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGhvc3RfaW5pdF9pYW10aGlmKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJX191OCBpOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCWhlY2lfaW5pdF9maWxlX3ByaXZhdGUoJmRldi0+aWFtdGhpZl9maWxlX2V4dCwgTlVMTCk7CisJZGV2LT5pYW10aGlmX2ZpbGVfZXh0LnN0YXRlID0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRDsKKworCS8qIGZpbmQgTUUgUFRISSBjbGllbnQgKi8KKwlpID0gaGVjaV9maW5kX21lX2NsaWVudChkZXYsICZkZXYtPmlhbXRoaWZfZmlsZV9leHQsCisJCQkgICAgJmhlY2lfcHRoaV9ndWlkLCBIRUNJX0lBTVRISUZfSE9TVF9DTElFTlRfSUQpOworCWlmIChkZXYtPmlhbXRoaWZfZmlsZV9leHQuc3RhdGUgIT0gSEVDSV9GSUxFX0NPTk5FQ1RJTkcpIHsKKwkJREJHKCJmYWlsZWQgdG8gZmluZCBpYW10aGlmIGNsaWVudC5cbiIpOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwlCVUdfT04oZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLm1heF9tc2dfbGVuZ3RoICE9IElBTVRISUZfTVRVKTsKKworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoaGVjaV9jb25uZWN0X21lX2NsaWVudChkZXYsICZkZXYtPmlhbXRoaWZfZmlsZV9leHQsIDE1KSA9PSAxKSB7CisJCURCRygiY29ubmVjdGVkIHRvIGlhbXRoaWYgY2xpZW50LlxuIik7CisJCWRldi0+aWFtdGhpZl9zdGF0ZSA9IEhFQ0lfSUFNVEhJRl9JRExFOworCX0KK30KKworLyoqCisgKiBoZWNpX2FsbG9jX2ZpbGVfcHJpdmF0ZSAtIGFsbG9jYXRlcyBhIHByaXZhdGUgZmlsZSBzdHJ1Y3R1cmUgYW5kIHNldCBpdCB1cC4KKyAqIEBmaWxlOiB0aGUgZmlsZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zICBUaGUgYWxsb2NhdGVkIGZpbGUgb3IgTlVMTCBvbiBmYWlsdXJlCisgKi8KK3N0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqaGVjaV9hbGxvY19maWxlX3ByaXZhdGUoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpwcml2OworCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIE5VTEw7CisKKwloZWNpX2luaXRfZmlsZV9wcml2YXRlKHByaXYsIGZpbGUpOworCisJcmV0dXJuIHByaXY7Cit9CisKKworCisvKioKKyAqIGhlY2lfZGlzY29ubmVjdF9ob3N0X2NsaWVudCAtIHNlbmQgZGlzY29ubmVjdCBtZXNzYWdlICB0byBmdyBmcm9tIGhvc3QgY2xpZW50LgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgaGVjaV9kaXNjb25uZWN0X2hvc3RfY2xpZW50KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJaW50IHJldHMsIGVycjsKKwlsb25nIHRpbWVvdXQgPSAxNTsJLyogMTUgc2Vjb25kcyAqLworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2I7CisKKwlpZiAoKCFkZXYpIHx8ICghZmlsZV9leHQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChmaWxlX2V4dC0+c3RhdGUgIT0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RJTkcpCisJCXJldHVybiAwOworCisJcHJpdl9jYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZWNpX2NiX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXZfY2IpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQoJnByaXZfY2ItPmNiX2xpc3QpOworCXByaXZfY2ItPmZpbGVfcHJpdmF0ZSA9IGZpbGVfZXh0OworCXByaXZfY2ItPm1ham9yX2ZpbGVfb3BlcmF0aW9ucyA9IEhFQ0lfQ0xPU0U7CisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSkgeworCQlkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKwkJaWYgKGhlY2lfZGlzY29ubmVjdChkZXYsIGZpbGVfZXh0KSkgeworCQkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYi0+Y2JfbGlzdCwKKwkJCQkmZGV2LT5jdHJsX3JkX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJCXJldHMgPSAtRU5PREVWOworCQkJREJHKCJmYWlsZWQgdG8gY2FsbCBoZWNpX2Rpc2Nvbm5lY3QuXG4iKTsKKwkJCWdvdG8gZnJlZTsKKwkJfQorCX0gZWxzZSB7CisJCURCRygiYWRkIGRpc2Nvbm5lY3QgY2IgdG8gY29udHJvbCB3cml0ZSBsaXN0XG4iKTsKKwkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYi0+Y2JfbGlzdCwKKwkJCQkmZGV2LT5jdHJsX3dyX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJZXJyID0gd2FpdF9ldmVudF90aW1lb3V0KGRldi0+d2FpdF9yZWN2ZF9tc2csCisJCSAoSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRCA9PSBmaWxlX2V4dC0+c3RhdGUpLAorCQkgdGltZW91dCAqIEhaKTsKKwlpZiAoSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRCA9PSBmaWxlX2V4dC0+c3RhdGUpIHsKKwkJcmV0cyA9IDA7CisJCURCRygic3VjY2Vzc2Z1bGx5IGRpc2Nvbm5lY3RlZCBmcm9tIGZ3IGNsaWVudC5cbiIpOworCX0gZWxzZSB7CisJCXJldHMgPSAtRU5PREVWOworCQlpZiAoSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRCAhPSBmaWxlX2V4dC0+c3RhdGUpCisJCQlEQkcoIndyb25nIHN0YXR1cyBjbGllbnQgZGlzY29ubmVjdC5cbiIpOworCisJCWlmIChlcnIpCisJCQlEQkcoIndhaXQgZmFpbGVkIGRpc2Nvbm5lY3QgZXJyPSUwOHhcbiIsIGVycik7CisKKwkJREJHKCJmYWlsZWQgdG8gZGlzY29ubmVjdCBmcm9tIGZ3IGNsaWVudC5cbiIpOworCX0KKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaGVjaV9mbHVzaF9saXN0KCZkZXYtPmN0cmxfcmRfbGlzdCwgZmlsZV9leHQpOworCWhlY2lfZmx1c2hfbGlzdCgmZGV2LT5jdHJsX3dyX2xpc3QsIGZpbGVfZXh0KTsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CitmcmVlOgorCWhlY2lfZnJlZV9jYl9wcml2YXRlKHByaXZfY2IpOworCXJldHVybiByZXRzOworfQorCisvKioKKyAqIGhlY2lfcmVtb3ZlX2NsaWVudF9mcm9tX2ZpbGVfbGlzdCAtCisgKglyZW1vdmUgZmlsZSBwcml2YXRlIGRhdGEgZnJvbSBkZXZpY2UgZmlsZSBsaXN0CisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGhvc3RfY2xpZW50X2lkOiBob3N0IGNsaWVudCBpZCB0byBiZSByZW1vdmVkCisgKi8KK3ZvaWQgaGVjaV9yZW1vdmVfY2xpZW50X2Zyb21fZmlsZV9saXN0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIF9fdTggaG9zdF9jbGllbnRfaWQpCit7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX3BvcyA9IE5VTEw7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX25leHQgPSBOVUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmaWxlX3BvcywgZmlsZV9uZXh0LCAmZGV2LT5maWxlX2xpc3QsIGxpbmspIHsKKwkJaWYgKGhvc3RfY2xpZW50X2lkID09IGZpbGVfcG9zLT5ob3N0X2NsaWVudF9pZCkgeworCQkJREJHKCJyZW1vdmUgaG9zdCBjbGllbnQgPSAlZCwgTUUgY2xpZW50ID0gJWRcbiIsCisJCQkJCWZpbGVfcG9zLT5ob3N0X2NsaWVudF9pZCwKKwkJCQkJZmlsZV9wb3MtPm1lX2NsaWVudF9pZCk7CisJCQlsaXN0X2RlbF9pbml0KCZmaWxlX3Bvcy0+bGluayk7CisJCQlicmVhazsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZjUxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsNDg1IEBACisvKgorICogUGFydCBvZiBJbnRlbChSKSBNYW5hZ2VhYmlsaXR5IEVuZ2luZSBJbnRlcmZhY2UgTGludXggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworCisKKyNpbmNsdWRlICJoZWNpLmgiCisjaW5jbHVkZSAiaGVjaV9pbnRlcmZhY2UuaCIKKworCisvKioKKyAqIGhlY2lfc2V0X2Nzcl9yZWdpc3RlciAtIHdyaXRlIEhfQ1NSIHJlZ2lzdGVyIHRvIHRoZSBoZWNpIGRldmljZQorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqLwordm9pZCBoZWNpX3NldF9jc3JfcmVnaXN0ZXIoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwl3cml0ZV9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IsIGRldi0+aG9zdF9od19zdGF0ZSk7CisJZGV2LT5ob3N0X2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IpOworfQorCisvKioKKyAqIGhlY2lfY3NyX2VuYWJsZV9pbnRlcnJ1cHRzIC0gZW5hYmxlIGhlY2kgZGV2aWNlIGludGVycnVwdHMKKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKi8KK3ZvaWQgaGVjaV9jc3JfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwlkZXYtPmhvc3RfaHdfc3RhdGUgfD0gSF9JRTsKKwloZWNpX3NldF9jc3JfcmVnaXN0ZXIoZGV2KTsKK30KKworLyoqCisgKiBoZWNpX2Nzcl9kaXNhYmxlX2ludGVycnVwdHMgLSBkaXNhYmxlIGhlY2kgZGV2aWNlIGludGVycnVwdHMKKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKi8KK3ZvaWQgaGVjaV9jc3JfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJZGV2LT5ob3N0X2h3X3N0YXRlICY9IH5IX0lFOworCWhlY2lfc2V0X2Nzcl9yZWdpc3RlcihkZXYpOworfQorCisKKy8qKgorICogX2hvc3RfZ2V0X2ZpbGxlZF9zbG90cyAtIGdldCBudW1iZXIgb2YgZGV2aWNlIGZpbGxlZCBidWZmZXIgc2xvdHMKKyAqCisgKiBAZGV2aWNlOiB0aGUgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgbnVtZXIgb2YgZmlsbGVkIHNsb3RzCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIF9ob3N0X2dldF9maWxsZWRfc2xvdHMoY29uc3Qgc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldikKK3sKKwljaGFyIHJlYWRfcHRyLCB3cml0ZV9wdHI7CisKKwlyZWFkX3B0ciA9IChjaGFyKSAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfQ0JSUCkgPj4gOCk7CisJd3JpdGVfcHRyID0gKGNoYXIpICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQldQKSA+PiAxNik7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGNoYXIpICh3cml0ZV9wdHIgLSByZWFkX3B0cik7Cit9CisKKy8qKgorICogaG9zdF9idWZmZXJfaXNfZW1wdHkgIC0gY2hlY2sgaWYgaG9zdCBidWZmZXIgaXMgZW1wdHkuCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICoKKyAqIHJldHVybnMgIDEgaWYgZW1wdHksIDAgLSBvdGhlcndpc2UuCisgKi8KK2ludCBob3N0X2J1ZmZlcl9pc19lbXB0eShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgZmlsbGVkX3Nsb3RzOworCisJZGV2LT5ob3N0X2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IpOworCWZpbGxlZF9zbG90cyA9IF9ob3N0X2dldF9maWxsZWRfc2xvdHMoZGV2KTsKKworCWlmIChmaWxsZWRfc2xvdHMgPiAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIGNvdW50X2VtcHR5X3dyaXRlX3Nsb3RzICAtIGNvdW50IHdyaXRlIGVtcHR5IHNsb3RzLgorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqCisgKiByZXR1cm5zIC0xKEVTTE9UU19PVkVSRkxPVykgaWYgb3ZlcmZsb3csIG90aGVyd2lzZSBlbXB0eSBzbG90cyBjb3VudAorICovCitfX3MzMiBjb3VudF9lbXB0eV93cml0ZV9zbG90cyhjb25zdCBzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGNoYXIgYnVmZmVyX2RlcHRoLCBmaWxsZWRfc2xvdHMsIGVtcHR5X3Nsb3RzOworCisJYnVmZmVyX2RlcHRoID0gKHVuc2lnbmVkIGNoYXIpICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQkQpID4+IDI0KTsKKwlmaWxsZWRfc2xvdHMgPSBfaG9zdF9nZXRfZmlsbGVkX3Nsb3RzKGRldik7CisJZW1wdHlfc2xvdHMgPSBidWZmZXJfZGVwdGggLSBmaWxsZWRfc2xvdHM7CisKKwlpZiAoZmlsbGVkX3Nsb3RzID4gYnVmZmVyX2RlcHRoKSB7CisJCS8qIG92ZXJmbG93ICovCisJCXJldHVybiAtRVNMT1RTX09WRVJGTE9XOworCX0KKworCXJldHVybiAoX19zMzIpIGVtcHR5X3Nsb3RzOworfQorCisvKioKKyAqIGhlY2lfd3JpdGVfbWVzc2FnZSAgLSB3cml0ZSBhIG1lc3NhZ2UgdG8gaGVjaSBkZXZpY2UuCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGhlY2lfaGRyOiBoZWFkZXIgb2YgIG1lc3NhZ2UKKyAqIEB3cml0ZV9idWZmZXI6IG1lc3NhZ2UgYnVmZmVyIHdpbGwgYmUgd3JpdGUKKyAqIEB3cml0ZV9sZW5ndGg6IG1lc3NhZ2Ugc2l6ZSB3aWxsIGJlIHdyaXRlCisgKgorICogcmV0dXJucyAxIGlmIHN1Y2Nlc3MsIDAgLSBvdGhlcndpc2UuCisgKi8KK2ludCBoZWNpX3dyaXRlX21lc3NhZ2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGhlY2lfbXNnX2hkciAqaGVhZGVyLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICp3cml0ZV9idWZmZXIsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgd3JpdGVfbGVuZ3RoKQoreworCV9fdTMyIHRlbXBfbXNnID0gMDsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzX3dyaXR0ZW4gPSAwOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyX2RlcHRoLCBmaWxsZWRfc2xvdHMsIGVtcHR5X3Nsb3RzOworCXVuc2lnbmVkIGxvbmcgZHdfdG9fd3JpdGU7CisKKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUik7CisJREJHKCJob3N0X2h3X3N0YXRlID0gMHglMDh4LlxuIiwgZGV2LT5ob3N0X2h3X3N0YXRlKTsKKwlEQkcoImhlY2lfd3JpdGVfbWVzc2FnZSBoZWFkZXI9JTA4eC5cbiIsICooKF9fdTMyICopIGhlYWRlcikpOworCWJ1ZmZlcl9kZXB0aCA9ICh1bnNpZ25lZCBjaGFyKSAoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfQ0JEKSA+PiAyNCk7CisJZmlsbGVkX3Nsb3RzID0gX2hvc3RfZ2V0X2ZpbGxlZF9zbG90cyhkZXYpOworCWVtcHR5X3Nsb3RzID0gYnVmZmVyX2RlcHRoIC0gZmlsbGVkX3Nsb3RzOworCURCRygiZmlsbGVkID0gJWh1LCBlbXB0eSA9ICVodS5cbiIsIGZpbGxlZF9zbG90cywgZW1wdHlfc2xvdHMpOworCisJZHdfdG9fd3JpdGUgPSAoKHdyaXRlX2xlbmd0aCArIDMpIC8gNCk7CisKKwlpZiAoZHdfdG9fd3JpdGUgPiBlbXB0eV9zbG90cykKKwkJcmV0dXJuIDA7CisKKwl3cml0ZV9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DQl9XVywgKigoX191MzIgKikgaGVhZGVyKSk7CisKKwl3aGlsZSAod3JpdGVfbGVuZ3RoID49IDQpIHsKKwkJd3JpdGVfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ0JfV1csCisJCQkJKihfX3UzMiAqKSAod3JpdGVfYnVmZmVyICsgYnl0ZXNfd3JpdHRlbikpOworCQlieXRlc193cml0dGVuICs9IDQ7CisJCXdyaXRlX2xlbmd0aCAtPSA0OworCX0KKworCWlmICh3cml0ZV9sZW5ndGggPiAwKSB7CisJCW1lbWNweSgmdGVtcF9tc2csICZ3cml0ZV9idWZmZXJbYnl0ZXNfd3JpdHRlbl0sIHdyaXRlX2xlbmd0aCk7CisJCXdyaXRlX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NCX1dXLCB0ZW1wX21zZyk7CisJfQorCisJZGV2LT5ob3N0X2h3X3N0YXRlIHw9IEhfSUc7CisJd3JpdGVfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSLCBkZXYtPmhvc3RfaHdfc3RhdGUpOworCWRldi0+bWVfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBNRV9DU1JfSEEpOworCWlmICgoZGV2LT5tZV9od19zdGF0ZSAmIE1FX1JEWV9IUkEpICE9IE1FX1JEWV9IUkEpCisJCXJldHVybiAwOworCisJZGV2LT53cml0ZV9oYW5nID0gMDsKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBjb3VudF9mdWxsX3JlYWRfc2xvdHMgIC0gY291bnQgcmVhZCBmdWxsIHNsb3RzLgorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqCisgKiByZXR1cm5zIC0xKEVTTE9UU19PVkVSRkxPVykgaWYgb3ZlcmZsb3csIG90aGVyd2lzZSBmaWxsZWQgc2xvdHMgY291bnQKKyAqLworX19zMzIgY291bnRfZnVsbF9yZWFkX3Nsb3RzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJY2hhciByZWFkX3B0ciwgd3JpdGVfcHRyOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyX2RlcHRoLCBmaWxsZWRfc2xvdHM7CisKKwlkZXYtPm1lX2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgTUVfQ1NSX0hBKTsKKwlidWZmZXJfZGVwdGggPSAodW5zaWduZWQgY2hhcikoKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9DQkRfSFJBKSA+PiAyNCk7CisJcmVhZF9wdHIgPSAoY2hhcikgKChkZXYtPm1lX2h3X3N0YXRlICYgTUVfQ0JSUF9IUkEpID4+IDgpOworCXdyaXRlX3B0ciA9IChjaGFyKSAoKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9DQldQX0hSQSkgPj4gMTYpOworCWZpbGxlZF9zbG90cyA9ICh1bnNpZ25lZCBjaGFyKSAod3JpdGVfcHRyIC0gcmVhZF9wdHIpOworCisJaWYgKGZpbGxlZF9zbG90cyA+IGJ1ZmZlcl9kZXB0aCkgeworCQkvKiBvdmVyZmxvdyAqLworCQlyZXR1cm4gLUVTTE9UU19PVkVSRkxPVzsKKwl9CisKKwlEQkcoImZpbGxlZF9zbG90cyA9JTA4eCAgXG4iLCBmaWxsZWRfc2xvdHMpOworCXJldHVybiAoX19zMzIpIGZpbGxlZF9zbG90czsKK30KKworLyoqCisgKiBoZWNpX3JlYWRfc2xvdHMgIC0gcmVhZCBhIG1lc3NhZ2UgZnJvbSBoZWNpIGRldmljZS4KKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAYnVmZmVyOiBtZXNzYWdlIGJ1ZmZlciB3aWxsIGJlIHdyaXRlCisgKiBAYnVmZmVyX2xlbmd0aDogbWVzc2FnZSBzaXplIHdpbGwgYmUgcmVhZAorICovCit2b2lkIGhlY2lfcmVhZF9zbG90cyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZmZXJfbGVuZ3RoKQoreworCV9fdTMyIGkgPSAwOworCXVuc2lnbmVkIGNoYXIgdGVtcF9idWZbc2l6ZW9mKF9fdTMyKV07CisKKwl3aGlsZSAoYnVmZmVyX2xlbmd0aCA+PSBzaXplb2YoX191MzIpKSB7CisJCSgoX191MzIgKikgYnVmZmVyKVtpXSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIE1FX0NCX1JXKTsKKwkJREJHKCJidWZmZXJbJWRdPSAlZFxuIiwgaSwgKChfX3UzMiAqKSBidWZmZXIpW2ldKTsKKwkJaSsrOworCQlidWZmZXJfbGVuZ3RoIC09IHNpemVvZihfX3UzMik7CisJfQorCisJaWYgKGJ1ZmZlcl9sZW5ndGggPiAwKSB7CisJCSooKF9fdTMyICopICZ0ZW1wX2J1ZikgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBNRV9DQl9SVyk7CisJCW1lbWNweSgmYnVmZmVyW2kgKiA0XSwgdGVtcF9idWYsIGJ1ZmZlcl9sZW5ndGgpOworCX0KKworCWRldi0+aG9zdF9od19zdGF0ZSB8PSBIX0lHOworCWhlY2lfc2V0X2Nzcl9yZWdpc3RlcihkZXYpOworfQorCisvKioKKyAqIGZsb3dfY3RybF9jcmVkcyAgLSBjaGVjayBmbG93X2NvbnRyb2wgY3JlZGVudGlhbHMuCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAxIGlmIGZsb3dfY3RybF9jcmVkcyA+MCwgMCAtIG90aGVyd2lzZS4KKyAqLworaW50IGZsb3dfY3RybF9jcmVkcyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJX191OCBpOworCisJaWYgKCFkZXYtPm51bV9oZWNpX21lX2NsaWVudHMpCisJCXJldHVybiAwOworCisJaWYgKGZpbGVfZXh0ID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKGZpbGVfZXh0LT5mbG93X2N0cmxfY3JlZHMgPiAwKQorCQlyZXR1cm4gMTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9oZWNpX21lX2NsaWVudHM7IGkrKykgeworCQlpZiAoZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCA9PSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKSB7CisJCQlpZiAoZGV2LT5tZV9jbGllbnRzW2ldLmZsb3dfY3RybF9jcmVkcyA+IDApIHsKKwkJCQlCVUdfT04oZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLnNpbmdsZV9yZWN2X2J1ZgorCQkJCQkgPT0gMCk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlCVUcoKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBmbG93X2N0cmxfcmVkdWNlICAtIHJlZHVjZSBmbG93X2NvbnRyb2wuCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKi8KK3ZvaWQgZmxvd19jdHJsX3JlZHVjZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJX191OCBpOworCisJaWYgKCFkZXYtPm51bV9oZWNpX21lX2NsaWVudHMpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9oZWNpX21lX2NsaWVudHM7IGkrKykgeworCQlpZiAoZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZCA9PSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkKSB7CisJCQlpZiAoZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLnNpbmdsZV9yZWN2X2J1ZiAhPSAwKSB7CisJCQkJQlVHX09OKGRldi0+bWVfY2xpZW50c1tpXS5mbG93X2N0cmxfY3JlZHMgPD0gMCk7CisJCQkJZGV2LT5tZV9jbGllbnRzW2ldLmZsb3dfY3RybF9jcmVkcy0tOworCQkJfSBlbHNlIHsKKwkJCQlCVUdfT04oZmlsZV9leHQtPmZsb3dfY3RybF9jcmVkcyA8PSAwKTsKKwkJCQlmaWxlX2V4dC0+Zmxvd19jdHJsX2NyZWRzLS07CisJCQl9CisJCQlyZXR1cm47CisJCX0KKwl9CisJQlVHKCk7Cit9CisKKy8qKgorICogaGVjaV9zZW5kX2Zsb3dfY29udHJvbCAtIHNlbmQgZmxvdyBjb250cm9sIHRvIGZ3LgorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMSBpZiBzdWNjZXNzLCAwIC0gb3RoZXJ3aXNlLgorICovCitpbnQgaGVjaV9zZW5kX2Zsb3dfY29udHJvbChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyOworCXN0cnVjdCBoYm1fZmxvd19jb250cm9sICpoZWNpX2Zsb3dfY29udHJvbDsKKworCWhlY2lfaGRyID0gKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+d3JfbXNnX2J1ZlswXTsKKwloZWNpX2hkci0+aG9zdF9hZGRyID0gMDsKKwloZWNpX2hkci0+bWVfYWRkciA9IDA7CisJaGVjaV9oZHItPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCk7CisJaGVjaV9oZHItPm1zZ19jb21wbGV0ZSA9IDE7CisJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKworCWhlY2lfZmxvd19jb250cm9sID0gKHN0cnVjdCBoYm1fZmxvd19jb250cm9sICopICZkZXYtPndyX21zZ19idWZbMV07CisJbWVtc2V0KGhlY2lfZmxvd19jb250cm9sLCAwLCBzaXplb2YoaGVjaV9mbG93X2NvbnRyb2wpKTsKKwloZWNpX2Zsb3dfY29udHJvbC0+aG9zdF9hZGRyID0gZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkOworCWhlY2lfZmxvd19jb250cm9sLT5tZV9hZGRyID0gZmlsZV9leHQtPm1lX2NsaWVudF9pZDsKKwloZWNpX2Zsb3dfY29udHJvbC0+Y21kLmNtZCA9IEhFQ0lfRkxPV19DT05UUk9MX0NNRDsKKwltZW1zZXQoaGVjaV9mbG93X2NvbnRyb2wtPnJlc2VydmVkLCAwLAorCQkJc2l6ZW9mKGhlY2lfZmxvd19jb250cm9sLT5yZXNlcnZlZCkpOworCURCRygic2VuZGluZyBmbG93IGNvbnRyb2wgaG9zdCBjbGllbnQgPSAlZCwgbWUgY2xpZW50ID0gJWRcbiIsCisJICAgIGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCwgZmlsZV9leHQtPm1lX2NsaWVudF9pZCk7CisJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCBoZWNpX2hkciwKKwkJCQkodW5zaWduZWQgY2hhciAqKSBoZWNpX2Zsb3dfY29udHJvbCwKKwkJCQlzaXplb2Yoc3RydWN0IGhibV9mbG93X2NvbnRyb2wpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKKworfQorCisvKioKKyAqIG90aGVyX2NsaWVudF9pc19jb25uZWN0aW5nICAtIGNoZWNrIGlmIG90aGVyCisgKiAgICBjbGllbnQgd2l0aCB0aGUgc2FtZSBjbGllbnQgaWQgaXMgY29ubmVjdGVkLgorICoKKyAqIEBkZXY6IGRldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMSBpZiBvdGhlciBjbGllbnQgaXMgY29ubmVjdGVkLCAwIC0gb3RoZXJ3aXNlLgorICovCitpbnQgb3RoZXJfY2xpZW50X2lzX2Nvbm5lY3Rpbmcoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfbmV4dCA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlsZV9wb3MsIGZpbGVfbmV4dCwgJmRldi0+ZmlsZV9saXN0LCBsaW5rKSB7CisJCWlmICgoZmlsZV9wb3MtPnN0YXRlID09IEhFQ0lfRklMRV9DT05ORUNUSU5HKQorCQkJJiYgKGZpbGVfcG9zICE9IGZpbGVfZXh0KQorCQkJJiYgZmlsZV9leHQtPm1lX2NsaWVudF9pZCA9PSBmaWxlX3Bvcy0+bWVfY2xpZW50X2lkKQorCQkJcmV0dXJuIDE7CisKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaGVjaV9zZW5kX3dkICAtIHNlbmQgd2F0Y2ggZG9nIG1lc3NhZ2UgdG8gZncuCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICoKKyAqIHJldHVybnMgMSBpZiBzdWNjZXNzLCAwIC0gb3RoZXJ3aXNlLgorICovCitpbnQgaGVjaV9zZW5kX3dkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHI7CisKKwloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJaGVjaV9oZHItPmhvc3RfYWRkciA9IGRldi0+d2RfZmlsZV9leHQuaG9zdF9jbGllbnRfaWQ7CisJaGVjaV9oZHItPm1lX2FkZHIgPSBkZXYtPndkX2ZpbGVfZXh0Lm1lX2NsaWVudF9pZDsKKwloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJaWYgKCFtZW1jbXAoZGV2LT53ZF9kYXRhLCBoZWNpX3N0YXJ0X3dkX3BhcmFtcywKKwkJCUhFQ0lfV0RfUEFSQU1TX1NJWkUpKSB7CisJCWhlY2lfaGRyLT5sZW5ndGggPSBIRUNJX1NUQVJUX1dEX0RBVEFfU0laRTsKKwl9IGVsc2UgeworCQlCVUdfT04obWVtY21wKGRldi0+d2RfZGF0YSwgaGVjaV9zdG9wX3dkX3BhcmFtcywKKwkJCUhFQ0lfV0RfUEFSQU1TX1NJWkUpKTsKKwkJaGVjaV9oZHItPmxlbmd0aCA9IEhFQ0lfV0RfUEFSQU1TX1NJWkU7CisJfQorCisJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCBoZWNpX2hkciwgZGV2LT53ZF9kYXRhLCBoZWNpX2hkci0+bGVuZ3RoKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBoZWNpX2Rpc2Nvbm5lY3QgIC0gc2VuZCBkaXNjb25uZWN0IG1lc3NhZ2UgdG8gZncuCisgKgorICogQGRldjogZGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAxIGlmIHN1Y2Nlc3MsIDAgLSBvdGhlcndpc2UuCisgKi8KK2ludCBoZWNpX2Rpc2Nvbm5lY3Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcjsKKwlzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgKmhlY2lfY2xpX2Rpc2Nvbm5lY3Q7CisKKwloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJaGVjaV9oZHItPmhvc3RfYWRkciA9IDA7CisJaGVjaV9oZHItPm1lX2FkZHIgPSAwOworCWhlY2lfaGRyLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0KTsKKwloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJaGVjaV9jbGlfZGlzY29ubmVjdCA9CisJICAgIChzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgKikgJmRldi0+d3JfbXNnX2J1ZlsxXTsKKwltZW1zZXQoaGVjaV9jbGlfZGlzY29ubmVjdCwgMCwgc2l6ZW9mKGhlY2lfY2xpX2Rpc2Nvbm5lY3QpKTsKKwloZWNpX2NsaV9kaXNjb25uZWN0LT5ob3N0X2FkZHIgPSBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQ7CisJaGVjaV9jbGlfZGlzY29ubmVjdC0+bWVfYWRkciA9IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQ7CisJaGVjaV9jbGlfZGlzY29ubmVjdC0+Y21kLmNtZCA9IENMSUVOVF9ESVNDT05ORUNUX1JFUV9DTUQ7CisJaGVjaV9jbGlfZGlzY29ubmVjdC0+cmVzZXJ2ZWRbMF0gPSAwOworCisJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCBoZWNpX2hkciwKKwkJCQkodW5zaWduZWQgY2hhciAqKSBoZWNpX2NsaV9kaXNjb25uZWN0LAorCQkJCXNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBoZWNpX2Nvbm5lY3QgLSBzZW5kIGNvbm5lY3QgbWVzc2FnZSB0byBmdy4KKyAqCisgKiBAZGV2OiBkZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqCisgKiByZXR1cm5zIDEgaWYgc3VjY2VzcywgMCAtIG90aGVyd2lzZS4KKyAqLworaW50IGhlY2lfY29ubmVjdChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcjsKKwlzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3JlcXVlc3QgKmhlY2lfY2xpX2Nvbm5lY3Q7CisKKwloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJaGVjaV9oZHItPmhvc3RfYWRkciA9IDA7CisJaGVjaV9oZHItPm1lX2FkZHIgPSAwOworCWhlY2lfaGRyLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXF1ZXN0KTsKKwloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCisJaGVjaV9jbGlfY29ubmVjdCA9CisJICAgIChzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3JlcXVlc3QgKikgJmRldi0+d3JfbXNnX2J1ZlsxXTsKKwloZWNpX2NsaV9jb25uZWN0LT5ob3N0X2FkZHIgPSBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQ7CisJaGVjaV9jbGlfY29ubmVjdC0+bWVfYWRkciA9IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQ7CisJaGVjaV9jbGlfY29ubmVjdC0+Y21kLmNtZCA9IENMSUVOVF9DT05ORUNUX1JFUV9DTUQ7CisJaGVjaV9jbGlfY29ubmVjdC0+cmVzZXJ2ZWQgPSAwOworCisJaWYgKCFoZWNpX3dyaXRlX21lc3NhZ2UoZGV2LCBoZWNpX2hkciwKKwkJCQkodW5zaWduZWQgY2hhciAqKSBoZWNpX2NsaV9jb25uZWN0LAorCQkJCXNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3JlcXVlc3QpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfaW50ZXJmYWNlLmggYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzM2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsMTcwIEBACisvKgorICogUGFydCBvZiBJbnRlbChSKSBNYW5hZ2VhYmlsaXR5IEVuZ2luZSBJbnRlcmZhY2UgTGludXggZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3JwLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgIk5PIFdBUlJBTlRZIiBkaXNjbGFpbWVyIGJlbG93CisgKiAgICAoIkRpc2NsYWltZXIiKSBhbmQgYW55IHJlZGlzdHJpYnV0aW9uIG11c3QgYmUgY29uZGl0aW9uZWQgdXBvbgorICogICAgaW5jbHVkaW5nIGEgc3Vic3RhbnRpYWxseSBzaW1pbGFyIERpc2NsYWltZXIgcmVxdWlyZW1lbnQgZm9yIGZ1cnRoZXIKKyAqICAgIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIEhPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKKyAqIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorICoKKyAqLworCisKKyNpZm5kZWYgX0hFQ0lfSU5URVJGQUNFX0hfCisjZGVmaW5lIF9IRUNJX0lOVEVSRkFDRV9IXworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYWlvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlICJoZWNpX2RhdGFfc3RydWN0dXJlcy5oIgorCisKKyNkZWZpbmUgSEJNX01JTk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBIQk1fTUFKT1JfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEhCTV9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgIDEJLyogMSBzZWNvbmQgKi8KKworCisjZGVmaW5lIEhPU1RfU1RBUlRfUkVRX0NNRCAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgSE9TVF9TVEFSVF9SRVNfQ01EICAgICAgICAgICAgICAgICAgMHg4MQorCisjZGVmaW5lIEhPU1RfU1RPUF9SRVFfQ01EICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgSE9TVF9TVE9QX1JFU19DTUQgICAgICAgICAgICAgICAgICAgMHg4MgorCisjZGVmaW5lIE1FX1NUT1BfUkVRX0NNRCAgICAgICAgICAgICAgICAgICAgIDB4MDMKKworI2RlZmluZSBIT1NUX0VOVU1fUkVRX0NNRCAgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEhPU1RfRU5VTV9SRVNfQ01EICAgICAgICAgICAgICAgICAgIDB4ODQKKworI2RlZmluZSBIT1NUX0NMSUVOVF9QUk9QRVJURUlTX1JFUV9DTUQgICAgICAweDA1CisjZGVmaW5lIEhPU1RfQ0xJRU5UX1BST1BFUlRFSVNfUkVTX0NNRCAgICAgIDB4ODUKKworI2RlZmluZSBDTElFTlRfQ09OTkVDVF9SRVFfQ01EICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIENMSUVOVF9DT05ORUNUX1JFU19DTUQgICAgICAgICAgICAgIDB4ODYKKworI2RlZmluZSBDTElFTlRfRElTQ09OTkVDVF9SRVFfQ01EICAgICAgICAgICAweDA3CisjZGVmaW5lIENMSUVOVF9ESVNDT05ORUNUX1JFU19DTUQgICAgICAgICAgIDB4ODcKKworI2RlZmluZSBIRUNJX0ZMT1dfQ09OVFJPTF9DTUQgICAgICAgICAgICAgICAweDA4CisKKworI2RlZmluZSBBTVRfV0RfVkFMVUUgMTIwCS8qIHNlY29uZHMgKi8KKworI2RlZmluZSBIRUNJX1dBVENIRE9HX0RBVEFfU0laRSAgICAgICAgIDE2CisjZGVmaW5lIEhFQ0lfU1RBUlRfV0RfREFUQV9TSVpFICAgICAgICAgMjAKKyNkZWZpbmUgSEVDSV9XRF9QQVJBTVNfU0laRSAgICAgICAgICAgICA0CisKKy8qIElPQ1RMIGNvbW1hbmRzICovCisjZGVmaW5lIElPQ1RMX0hFQ0lfR0VUX1ZFUlNJT04gXAorICAgIF9JT1dSKCdIJyAsIDB4MCwgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhKQorI2RlZmluZSBJT0NUTF9IRUNJX0NPTk5FQ1RfQ0xJRU5UIFwKKyAgICBfSU9XUignSCcgLCAweDAxLCBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEpCisjZGVmaW5lIElPQ1RMX0hFQ0lfV0QgXAorICAgIF9JT1dSKCdIJyAsIDB4MDIsIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSkKKyNkZWZpbmUgSU9DVExfSEVDSV9CWVBBU1NfV0QgXAorICAgIF9JT1dSKCdIJyAsIDB4MTAsIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSkKKworZW51bSBoZWNpX3N0b3BfcmVhc29uX3R5cGVzeworCURSSVZFUl9TVE9QX1JFUVVFU1QgPSAweDAwLAorCURFVklDRV9EMV9FTlRSWSA9IDB4MDEsCisJREVWSUNFX0QyX0VOVFJZID0gMHgwMiwKKwlERVZJQ0VfRDNfRU5UUlkgPSAweDAzLAorCVNZU1RFTV9TMV9FTlRSWSA9IDB4MDQsCisJU1lTVEVNX1MyX0VOVFJZID0gMHgwNSwKKwlTWVNURU1fUzNfRU5UUlkgPSAweDA2LAorCVNZU1RFTV9TNF9FTlRSWSA9IDB4MDcsCisJU1lTVEVNX1M1X0VOVFJZID0gMHgwOAorfTsKKworZW51bSBtZV9zdG9wX3JlYXNvbl90eXBlc3sKKwlGV19VUERBVEUgPSAweDAwCit9OworCitlbnVtIGNsaWVudF9jb25uZWN0X3N0YXR1c190eXBlc3sKKwlDQ1NfU1VDQ0VTUyA9IDB4MDAsCisJQ0NTX05PVF9GT1VORCA9IDB4MDEsCisJQ0NTX0FMUkVBRFlfU1RBUlRFRCA9IDB4MDIsCisJQ0NTX09VVF9PRl9SRVNPVVJDRVMgPSAweDAzLAorCUNDU19NRVNTQUdFX1NNQUxMID0gMHgwNAorfTsKKworZW51bSBjbGllbnRfZGlzY29ubmVjdF9zdGF0dXNfdHlwZXN7CisJQ0RTX1NVQ0NFU1MgPSAweDAwCit9OworCisKKy8qCisgKiBoZWNpIGludGVyZmFjZSBmdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KK3ZvaWQgaGVjaV9zZXRfY3NyX3JlZ2lzdGVyKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOwordm9pZCBoZWNpX2Nzcl9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKK3ZvaWQgaGVjaV9jc3JfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYpOworCit2b2lkIGhlY2lfcmVhZF9zbG90cyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZmZXJfbGVuZ3RoKTsKKworaW50IGhlY2lfd3JpdGVfbWVzc2FnZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWFkZXIsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKndyaXRlX2J1ZmZlciwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyB3cml0ZV9sZW5ndGgpOworCitpbnQgaG9zdF9idWZmZXJfaXNfZW1wdHkoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CisKK19fczMyIGNvdW50X2Z1bGxfcmVhZF9zbG90cyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKKworX19zMzIgY291bnRfZW1wdHlfd3JpdGVfc2xvdHMoY29uc3Qgc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldik7CisKK2ludCBmbG93X2N0cmxfY3JlZHMoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKKworaW50IGhlY2lfc2VuZF93ZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KTsKKwordm9pZCBmbG93X2N0cmxfcmVkdWNlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7CisKK2ludCBoZWNpX3NlbmRfZmxvd19jb250cm9sKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOworCitpbnQgaGVjaV9kaXNjb25uZWN0KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOworaW50IG90aGVyX2NsaWVudF9pc19jb25uZWN0aW5nKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KTsKK2ludCBoZWNpX2Nvbm5lY3Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpOworCisjZW5kaWYgLyogX0hFQ0lfSU5URVJGQUNFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2hlY2lfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTQ0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX21haW4uYwpAQCAtMCwwICsxLDE1NjQgQEAKKy8qCisgKiBQYXJ0IG9mIEludGVsKFIpIE1hbmFnZWFiaWxpdHkgRW5naW5lIEludGVyZmFjZSBMaW51eCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnAuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCisgKiAgICB3aXRob3V0IG1vZGlmaWNhdGlvbi4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhdCBtaW5pbXVtIGEgZGlzY2xhaW1lcgorICogICAgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cKKyAqICAgICgiRGlzY2xhaW1lciIpIGFuZCBhbnkgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uCisgKiAgICBpbmNsdWRpbmcgYSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlcgorICogICAgYmluYXJ5IHJlZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZXMgb2YgdGhlIGFib3ZlLWxpc3RlZCBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzCisgKiAgICBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIE5PIFdBUlJBTlRZCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworICogSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvYWlvLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisKKyNpbmNsdWRlICJoZWNpLmgiCisjaW5jbHVkZSAiaGVjaV9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJoZWNpX3ZlcnNpb24uaCIKKworCisjZGVmaW5lIEhFQ0lfUkVBRF9USU1FT1VUCTQ1CisKKyNkZWZpbmUgSEVDSV9EUklWRVJfTkFNRQkiaGVjaSIKKworLyoKKyAqICBoZWNpIGRyaXZlciBzdHJpbmdzCisgKi8KK3N0YXRpYyBjaGFyIGhlY2lfZHJpdmVyX25hbWVbXSA9IEhFQ0lfRFJJVkVSX05BTUU7CitzdGF0aWMgY2hhciBoZWNpX2RyaXZlcl9zdHJpbmdbXSA9ICJJbnRlbChSKSBNYW5hZ2VtZW50IEVuZ2luZSBJbnRlcmZhY2UiOworc3RhdGljIGNoYXIgaGVjaV9kcml2ZXJfdmVyc2lvbltdID0gSEVDSV9EUklWRVJfVkVSU0lPTjsKK3N0YXRpYyBjaGFyIGhlY2lfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4iOworCisKKyNpZmRlZiBIRUNJX0RFQlVHCitpbnQgaGVjaV9kZWJ1ZyA9IDE7CisjZWxzZQoraW50IGhlY2lfZGVidWc7CisjZW5kaWYKK01PRFVMRV9QQVJNX0RFU0MoaGVjaV9kZWJ1ZywgICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOworbW9kdWxlX3BhcmFtKGhlY2lfZGVidWcsIGludCwgMDY0NCk7CisKKworI2RlZmluZSBIRUNJX0RFVl9OQU1FCSJoZWNpIgorCisvKiBoZWNpIGNoYXIgZGV2aWNlIGZvciByZWdpc3RyYXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgY2RldiBoZWNpX2NkZXY7CisKKy8qIG1ham9yIG51bWJlciBmb3IgZGV2aWNlICovCitzdGF0aWMgaW50IGhlY2lfbWFqb3I7CisvKiBUaGUgZGV2aWNlIHBvaW50ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqaGVjaV9kZXZpY2U7CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmhlY2lfY2xhc3M7CisKKworLyogaGVjaV9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZSAqLworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhlY2lfcGNpX3RibFtdID0geworCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEXzgyOTQ2R1opfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF84MkczNSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEXzgyUTk2NSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEXzgyRzk2NSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEXzgyR005NjUpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF84MkdNRTk2NSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlfODJRMzUpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5XzgyRzMzKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOV84MlEzMyl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlfODJYMzgpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5XzMyMDApfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5XzYpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5XzcpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5XzgpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5XzkpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5XzEwKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOU1fMSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDlNXzIpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0g5TV8zKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIOU1fNCl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDEwXzEpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBIRUNJX0RFVl9JRF9JQ0gxMF8yKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgSEVDSV9ERVZfSURfSUNIMTBfMyl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIEhFQ0lfREVWX0lEX0lDSDEwXzQpfSwKKwkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCisJezAsIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBoZWNpX3BjaV90YmwpOworCisvKgorICogTG9jYWwgRnVuY3Rpb24gUHJvdG90eXBlcworICovCitzdGF0aWMgaW50IF9faW5pdCBoZWNpX2luaXRfbW9kdWxlKHZvaWQpOworc3RhdGljIHZvaWQgX19leGl0IGhlY2lfZXhpdF9tb2R1bGUodm9pZCk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBoZWNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOworc3RhdGljIHZvaWQgX19kZXZleGl0IGhlY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3N0YXRpYyBpbnQgaGVjaV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBpbnQgaGVjaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKK3N0YXRpYyBzc2l6ZV90IGhlY2lfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsCisJCQkgc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpvZmZzZXQpOworc3RhdGljIGludCBoZWNpX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHNzaXplX3QgaGVjaV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkgIHNpemVfdCBsZW5ndGgsIGxvZmZfdCAqb2Zmc2V0KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGVjaV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KTsKK3N0YXRpYyBzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpmaW5kX3JlYWRfbGlzdF9lbnRyeSgKKwkJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCk7CisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGhlY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK3N0YXRpYyBpbnQgaGVjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworc3RhdGljIF9fdTE2IGdfc3VzX3dkX3RpbWVvdXQ7CisjZWxzZQorI2RlZmluZSBoZWNpX3N1c3BlbmQgTlVMTAorI2RlZmluZSBoZWNpX3Jlc3VtZSBOVUxMCisjZW5kaWYKKy8qCisgKiAgUENJIGRyaXZlciBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGhlY2lfZHJpdmVyID0geworCS5uYW1lID0gaGVjaV9kcml2ZXJfbmFtZSwKKwkuaWRfdGFibGUgPSBoZWNpX3BjaV90YmwsCisJLnByb2JlID0gaGVjaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoaGVjaV9yZW1vdmUpLAorCS5zaHV0ZG93biA9IF9fZGV2ZXhpdF9wKGhlY2lfcmVtb3ZlKSwKKwkuc3VzcGVuZCA9IGhlY2lfc3VzcGVuZCwKKwkucmVzdW1lID0gaGVjaV9yZXN1bWUKK307CisKKy8qCisgKiBmaWxlIG9wZXJhdGlvbnMgc3RydWN0dXJlIHdpbGwgYmUgdXNlIGhlY2kgY2hhciBkZXZpY2UuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhlY2lfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkucmVhZCA9IGhlY2lfcmVhZCwKKwkuaW9jdGwgPSBoZWNpX2lvY3RsLAorCS5vcGVuID0gaGVjaV9vcGVuLAorCS5yZWxlYXNlID0gaGVjaV9yZWxlYXNlLAorCS53cml0ZSA9IGhlY2lfd3JpdGUsCisJLnBvbGwgPSBoZWNpX3BvbGwsCit9OworCisvKioKKyAqIGhlY2lfcmVnaXN0cmF0aW9uX2NkZXYgLSBzZXQgdXAgdGhlIGNkZXYgc3RydWN0dXJlIGZvciBoZWNpIGRldmljZS4KKyAqCisgKiBAZGV2OiBjaGFyIGRldmljZSBzdHJ1Y3QKKyAqIEBobWlub3I6IG1pbm9yIG51bWJlciBmb3IgcmVnaXN0cmF0aW9uIGNoYXIgZGV2aWNlCisgKiBAZm9wczogZmlsZSBvcGVyYXRpb25zIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGhlY2lfcmVnaXN0cmF0aW9uX2NkZXYoc3RydWN0IGNkZXYgKmRldiwgaW50IGhtaW5vciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpCit7CisJaW50IHJldCwgZGV2bm8gPSBNS0RFVihoZWNpX21ham9yLCBobWlub3IpOworCisJY2Rldl9pbml0KGRldiwgZm9wcyk7CisJZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOworCXJldCA9IGNkZXZfYWRkKGRldiwgZGV2bm8sIDEpOworCS8qIEZhaWwgZ3JhY2VmdWxseSBpZiBuZWVkIGJlICovCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IEVycm9yICVkIHJlZ2lzdGVyaW5nIGhlY2kgZGV2aWNlICVkXG4iLAorCQkgICAgICAgcmV0LCBobWlub3IpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBEaXNwbGF5IHRoZSB2ZXJzaW9uIG9mIGhlY2kgZHJpdmVyLiAqLworc3RhdGljIHNzaXplX3QgdmVyc2lvbl9zaG93KHN0cnVjdCBjbGFzcyAqZGV2LCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXMgJXMuXG4iLAorCQkgICAgICAgaGVjaV9kcml2ZXJfc3RyaW5nLCBoZWNpX2RyaXZlcl92ZXJzaW9uKTsKK30KKworc3RhdGljIENMQVNTX0FUVFIodmVyc2lvbiwgU19JUlVHTywgdmVyc2lvbl9zaG93LCBOVUxMKTsKKworLyoqCisgKiBoZWNpX3JlZ2lzdGVyX2NkZXYgLSByZWdpc3RlcnMgaGVjaSBjaGFyIGRldmljZQorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGhlY2lfcmVnaXN0ZXJfY2Rldih2b2lkKQoreworCWludCByZXQ7CisJZGV2X3QgZGV2OworCisJLyogcmVnaXN0cmF0aW9uIG9mIGNoYXIgZGV2aWNlcyAqLworCXJldCA9IGFsbG9jX2NocmRldl9yZWdpb24oJmRldiwgSEVDSV9NSU5PUlNfQkFTRSwgSEVDSV9NSU5PUlNfQ09VTlQsCisJCQkJICBIRUNJX0RSSVZFUl9OQU1FKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogRXJyb3IgYWxsb2NhdGluZyBjaGFyIGRldmljZSByZWdpb24uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloZWNpX21ham9yID0gTUFKT1IoZGV2KTsKKworCXJldCA9IGhlY2lfcmVnaXN0cmF0aW9uX2NkZXYoJmhlY2lfY2RldiwgSEVDSV9NSU5PUl9OVU1CRVIsCisJCQkJICAgICAmaGVjaV9mb3BzKTsKKwlpZiAocmV0KQorCQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoaGVjaV9tYWpvciwgSEVDSV9NSU5PUlNfQkFTRSksCisJCQkJCSBIRUNJX01JTk9SU19DT1VOVCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGhlY2lfdW5yZWdpc3Rlcl9jZGV2IC0gdW5yZWdpc3RlcnMgaGVjaSBjaGFyIGRldmljZQorICovCitzdGF0aWMgdm9pZCBoZWNpX3VucmVnaXN0ZXJfY2Rldih2b2lkKQoreworCWNkZXZfZGVsKCZoZWNpX2NkZXYpOworCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVihoZWNpX21ham9yLCBIRUNJX01JTk9SU19CQVNFKSwKKwkJCQkgSEVDSV9NSU5PUlNfQ09VTlQpOworfQorCisjaWZuZGVmIEhFQ0lfREVWSUNFX0NSRUFURQorI2RlZmluZSBIRUNJX0RFVklDRV9DUkVBVEUgZGV2aWNlX2NyZWF0ZQorI2VuZGlmCisvKioKKyAqIGhlY2lfc3lzZnNfZGV2aWNlX2NyZWF0ZSAtIGFkZHMgZGV2aWNlIGVudHJ5IHRvIHN5c2ZzCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaGVjaV9zeXNmc19kZXZpY2VfY3JlYXRlKHZvaWQpCit7CisJc3RydWN0IGNsYXNzICpjbGFzczsKKwl2b2lkICp0bXBoZGV2OworCWludCBlcnIgPSAwOworCisJY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsIEhFQ0lfRFJJVkVSX05BTUUpOworCWlmIChJU19FUlIoY2xhc3MpKSB7CisJCWVyciA9IFBUUl9FUlIoY2xhc3MpOworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IEVycm9yIGNyZWF0aW5nIGhlY2kgY2xhc3MuXG4iKTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCWVyciA9IGNsYXNzX2NyZWF0ZV9maWxlKGNsYXNzLCAmY2xhc3NfYXR0cl92ZXJzaW9uKTsKKwlpZiAoZXJyKSB7CisJCWNsYXNzX2Rlc3Ryb3koY2xhc3MpOworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IEVycm9yIGNyZWF0aW5nIGhlY2kgY2xhc3MgZmlsZS5cbiIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJdG1waGRldiA9IEhFQ0lfREVWSUNFX0NSRUFURShjbGFzcywgTlVMTCwgaGVjaV9jZGV2LmRldiwgTlVMTCwKKwkJCQkJSEVDSV9ERVZfTkFNRSk7CisJaWYgKElTX0VSUih0bXBoZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKHRtcGhkZXYpOworCQljbGFzc19yZW1vdmVfZmlsZShjbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbik7CisJCWNsYXNzX2Rlc3Ryb3koY2xhc3MpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJaGVjaV9jbGFzcyA9IGNsYXNzOworZXJyX291dDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGhlY2lfc3lzZnNfZGV2aWNlX3JlbW92ZSAtIHVucmVnaXN0ZXJzIHRoZSBkZXZpY2UgZW50cnkgb24gc3lzZnMKKyAqLworc3RhdGljIHZvaWQgaGVjaV9zeXNmc19kZXZpY2VfcmVtb3ZlKHZvaWQpCit7CisJaWYgKChoZWNpX2NsYXNzID09IE5VTEwpIHx8IChJU19FUlIoaGVjaV9jbGFzcykpKQorCQlyZXR1cm47CisKKwlkZXZpY2VfZGVzdHJveShoZWNpX2NsYXNzLCBoZWNpX2NkZXYuZGV2KTsKKwljbGFzc19yZW1vdmVfZmlsZShoZWNpX2NsYXNzLCAmY2xhc3NfYXR0cl92ZXJzaW9uKTsKKwljbGFzc19kZXN0cm95KGhlY2lfY2xhc3MpOworfQorCisvKioKKyAqIGhlY2lfaW5pdF9tb2R1bGUgLSBEcml2ZXIgUmVnaXN0cmF0aW9uIFJvdXRpbmUKKyAqCisgKiBoZWNpX2luaXRfbW9kdWxlIGlzIHRoZSBmaXJzdCByb3V0aW5lIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMKKyAqIGxvYWRlZC4gQWxsIGl0IGRvZXMgaXMgcmVnaXN0ZXIgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4KKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgaGVjaV9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQgPSAwOworCisJcHJpbnRrKEtFUk5fSU5GTyAiaGVjaTogJXMgLSB2ZXJzaW9uICVzXG4iLCBoZWNpX2RyaXZlcl9zdHJpbmcsCisJCQloZWNpX2RyaXZlcl92ZXJzaW9uKTsKKwlwcmludGsoS0VSTl9JTkZPICJoZWNpOiAlc1xuIiwgaGVjaV9jb3B5cmlnaHQpOworCisJLyogaW5pdCBwY2kgbW9kdWxlICovCisJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaGVjaV9kcml2ZXIpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaGVjaTogRXJyb3IgcmVnaXN0ZXJpbmcgZHJpdmVyLlxuIik7CisJCWdvdG8gZW5kOworCX0KKworCXJldCA9IGhlY2lfcmVnaXN0ZXJfY2RldigpOworCWlmIChyZXQpCisJCWdvdG8gdW5yZWdpc3Rlcl9wY2k7CisKKwlyZXQgPSBoZWNpX3N5c2ZzX2RldmljZV9jcmVhdGUoKTsKKwlpZiAocmV0KQorCQlnb3RvIHVucmVnaXN0ZXJfY2RldjsKKworCXJldHVybiByZXQ7CisKK3VucmVnaXN0ZXJfY2RldjoKKwloZWNpX3VucmVnaXN0ZXJfY2RldigpOwordW5yZWdpc3Rlcl9wY2k6CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZoZWNpX2RyaXZlcik7CitlbmQ6CisJcmV0dXJuIHJldDsKK30KKworbW9kdWxlX2luaXQoaGVjaV9pbml0X21vZHVsZSk7CisKKworLyoqCisgKiBoZWNpX2V4aXRfbW9kdWxlIC0gRHJpdmVyIEV4aXQgQ2xlYW51cCBSb3V0aW5lCisgKgorICogaGVjaV9leGl0X21vZHVsZSBpcyBjYWxsZWQganVzdCBiZWZvcmUgdGhlIGRyaXZlciBpcyByZW1vdmVkCisgKiBmcm9tIG1lbW9yeS4KKyAqLworc3RhdGljIHZvaWQgX19leGl0IGhlY2lfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmhlY2lfZHJpdmVyKTsKKwloZWNpX3N5c2ZzX2RldmljZV9yZW1vdmUoKTsKKwloZWNpX3VucmVnaXN0ZXJfY2RldigpOworfQorCittb2R1bGVfZXhpdChoZWNpX2V4aXRfbW9kdWxlKTsKKworCisvKioKKyAqIGhlY2lfcHJvYmUgLSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUm91dGluZQorICoKKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdAorICogQGVudDogZW50cnkgaW4ga2NzX3BjaV90YmwKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBfX2RldmluaXQgaGVjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYgPSBOVUxMOworCWludCBpLCBlcnIgPSAwOworCisJaWYgKGhlY2lfZGV2aWNlKSB7CisJCWVyciA9IC1FRVhJU1Q7CisJCWdvdG8gZW5kOworCX0KKwkvKiBlbmFibGUgcGNpIGRldiAqLworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBGYWlsZWQgdG8gZW5hYmxlIHBjaSBkZXZpY2UuXG4iKTsKKwkJZ290byBlbmQ7CisJfQorCS8qIHNldCBQQ0kgaG9zdCBtYXN0ZXJpbmcgICovCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJLyogcGNpIHJlcXVlc3QgcmVnaW9ucyBmb3IgaGVjaSBkcml2ZXIgKi8KKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGhlY2lfZHJpdmVyX25hbWUpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBGYWlsZWQgdG8gZ2V0IHBjaSByZWdpb25zLlxuIik7CisJCWdvdG8gZGlzYWJsZV9kZXZpY2U7CisJfQorCS8qIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgdGhlIGhlY2kgZGV2IHN0cnVjdHVyZSAqLworCWRldiA9IGluaXRfaGVjaV9kZXZpY2UocGRldik7CisJaWYgKCFkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byByZWxlYXNlX3JlZ2lvbnM7CisJfQorCS8qIG1hcHBpbmcgIElPIGRldmljZSBtZW1vcnkgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IDU7IGkrKykgeworCQlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKSA9PSAwKQorCQkJY29udGludWU7CisJCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgJiBJT1JFU09VUkNFX0lPKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IGhlY2kgaGFzIElPIHBvcnRzLlxuIik7CisJCQlnb3RvIGZyZWVfZGV2aWNlOworCQl9IGVsc2UgaWYgKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSAmIElPUkVTT1VSQ0VfTUVNKSB7CisJCQlpZiAoZGV2LT5tZW1fYmFzZSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCQkiaGVjaTogVG9vIG1hbnkgbWVtIGFkZHJlc3Nlcy5cbiIpOworCQkJCWdvdG8gZnJlZV9kZXZpY2U7CisJCQl9CisJCQlkZXYtPm1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOworCQkJZGV2LT5tZW1fbGVuZ3RoID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBpKTsKKwkJfQorCX0KKwlpZiAoIWRldi0+bWVtX2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBObyBhZGRyZXNzIHRvIHVzZS5cbiIpOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfZGV2aWNlOworCX0KKwlkZXYtPm1lbV9hZGRyID0gaW9yZW1hcF9ub2NhY2hlKGRldi0+bWVtX2Jhc2UsCisJCQlkZXYtPm1lbV9sZW5ndGgpOworCWlmICghZGV2LT5tZW1fYWRkcikgeworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IFJlbWFwIElPIGRldmljZSBtZW1vcnkgZmFpbHVyZS5cbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfZGV2aWNlOworCX0KKwkvKiByZXF1ZXN0IGFuZCBlbmFibGUgaW50ZXJydXB0ICAgKi8KKwllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGhlY2lfaXNyX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCisJCQloZWNpX2RyaXZlcl9uYW1lLCBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBSZXF1ZXN0X2lycSBmYWlsdXJlLiBpcnEgPSAlZCBcbiIsCisJCSAgICAgICBwZGV2LT5pcnEpOworCQlnb3RvIHVubWFwX21lbW9yeTsKKwl9CisKKwlpZiAoaGVjaV9od19pbml0KGRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBJbml0IGh3IGZhaWx1cmUuXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byByZWxlYXNlX2lycTsKKwl9CisJaW5pdF90aW1lcigmZGV2LT53ZF90aW1lcik7CisKKwloZWNpX2luaXRpYWxpemVfY2xpZW50cyhkZXYpOworCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9FTkFCTEVEKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gcmVsZWFzZV9odzsKKwl9CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWhlY2lfZGV2aWNlID0gcGRldjsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlpZiAoZGV2LT53ZF90aW1lb3V0KQorCQltb2RfdGltZXIoJmRldi0+d2RfdGltZXIsIGppZmZpZXMpOworCisjaWZkZWYgQ09ORklHX1BNCisJZ19zdXNfd2RfdGltZW91dCA9IDA7CisjZW5kaWYKKwlwcmludGsoS0VSTl9JTkZPICJoZWNpIGRyaXZlciBpbml0aWFsaXphdGlvbiBzdWNjZXNzZnVsLlxuIik7CisJcmV0dXJuIDA7CisKK3JlbGVhc2VfaHc6CisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJZGV2LT5ob3N0X2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IpOworCWhlY2lfY3NyX2Rpc2FibGVfaW50ZXJydXB0cyhkZXYpOworCisJZGVsX3RpbWVyX3N5bmMoJmRldi0+d2RfdGltZXIpOworCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworcmVsZWFzZV9pcnE6CisJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOwordW5tYXBfbWVtb3J5OgorCWlmIChkZXYtPm1lbV9hZGRyKQorCQlpb3VubWFwKGRldi0+bWVtX2FkZHIpOworZnJlZV9kZXZpY2U6CisJa2ZyZWUoZGV2KTsKK3JlbGVhc2VfcmVnaW9uczoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZGlzYWJsZV9kZXZpY2U6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworZW5kOgorCXByaW50ayhLRVJOX0VSUiAiaGVjaSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBoZWNpX3JlbW92ZSAtIERldmljZSBSZW1vdmFsIFJvdXRpbmUKKyAqCisgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKKyAqCisgKiBoZWNpX3JlbW92ZSBpcyBjYWxsZWQgYnkgdGhlIFBDSSBzdWJzeXN0ZW0gdG8gYWxlcnQgdGhlIGRyaXZlcgorICogdGhhdCBpdCBzaG91bGQgcmVsZWFzZSBhIFBDSSBkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBoZWNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGhlY2lfZGV2aWNlICE9IHBkZXYpCisJCXJldHVybjsKKworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoaGVjaV9kZXZpY2UgIT0gcGRldikgeworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGV2LT5yZWluaXRfdHNrICE9IE5VTEwpIHsKKwkJa3RocmVhZF9zdG9wKGRldi0+cmVpbml0X3Rzayk7CisJCWRldi0+cmVpbml0X3RzayA9IE5VTEw7CisJfQorCisJZGVsX3RpbWVyX3N5bmMoJmRldi0+d2RfdGltZXIpOworCWlmIChkZXYtPndkX2ZpbGVfZXh0LnN0YXRlID09IEhFQ0lfRklMRV9DT05ORUNURUQKKwkgICAgJiYgZGV2LT53ZF90aW1lb3V0KSB7CisJCWRldi0+d2RfdGltZW91dCA9IDA7CisJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAwOworCQltZW1jcHkoZGV2LT53ZF9kYXRhLCBoZWNpX3N0b3Bfd2RfcGFyYW1zLCBIRUNJX1dEX1BBUkFNU19TSVpFKTsKKwkJZGV2LT5zdG9wID0gMTsKKwkJaWYgKGRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgJiYKKwkJICAgIGZsb3dfY3RybF9jcmVkcyhkZXYsICZkZXYtPndkX2ZpbGVfZXh0KSkgeworCQkJZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSA9IDA7CisKKwkJCWlmICghaGVjaV9zZW5kX3dkKGRldikpCisJCQkJREJHKCJzZW5kIHN0b3AgV0QgZmFpbGVkXG4iKTsKKwkJCWVsc2UKKwkJCQlmbG93X2N0cmxfcmVkdWNlKGRldiwgJmRldi0+d2RfZmlsZV9leHQpOworCisJCQlkZXYtPndkX3BlbmRpbmcgPSAwOworCQl9IGVsc2UgeworCQkJZGV2LT53ZF9wZW5kaW5nID0gMTsKKwkJfQorCQlkZXYtPndkX3N0b3BlZCA9IDA7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChkZXYtPndhaXRfc3RvcF93ZCwKKwkJCQkoZGV2LT53ZF9zdG9wZWQpLCAxMCAqIEhaKTsKKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJaWYgKCFkZXYtPndkX3N0b3BlZCkKKwkJCURCRygic3RvcCB3ZCBmYWlsZWQgdG8gY29tcGxldGUuXG4iKTsKKwkJZWxzZQorCQkJREJHKCJzdG9wIHdkIGNvbXBsZXRlLlxuIik7CisKKwl9CisKKwloZWNpX2RldmljZSA9IE5VTEw7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJaWYgKGRldi0+aWFtdGhpZl9maWxlX2V4dC5zdGF0ZSA9PSBIRUNJX0ZJTEVfQ09OTkVDVEVEKSB7CisJCWRldi0+aWFtdGhpZl9maWxlX2V4dC5zdGF0ZSA9IEhFQ0lfRklMRV9ESVNDT05ORUNUSU5HOworCQloZWNpX2Rpc2Nvbm5lY3RfaG9zdF9jbGllbnQoZGV2LAorCQkJCQkgICAgJmRldi0+aWFtdGhpZl9maWxlX2V4dCk7CisJfQorCWlmIChkZXYtPndkX2ZpbGVfZXh0LnN0YXRlID09IEhFQ0lfRklMRV9DT05ORUNURUQpIHsKKwkJZGV2LT53ZF9maWxlX2V4dC5zdGF0ZSA9IEhFQ0lfRklMRV9ESVNDT05ORUNUSU5HOworCQloZWNpX2Rpc2Nvbm5lY3RfaG9zdF9jbGllbnQoZGV2LAorCQkJCQkgICAgJmRldi0+d2RfZmlsZV9leHQpOworCX0KKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwkvKiByZW1vdmUgZW50cnkgaWYgYWxyZWFkeSBpbiBsaXN0ICovCisJREJHKCJsaXN0IGRlbCBpYW10aGlmIGFuZCB3ZCBmaWxlIGxpc3QuXG4iKTsKKwloZWNpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3QoZGV2LCBkZXYtPndkX2ZpbGVfZXh0LgorCQkJCQkgIGhvc3RfY2xpZW50X2lkKTsKKwloZWNpX3JlbW92ZV9jbGllbnRfZnJvbV9maWxlX2xpc3QoZGV2LAorCQkJZGV2LT5pYW10aGlmX2ZpbGVfZXh0Lmhvc3RfY2xpZW50X2lkKTsKKworCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gTlVMTDsKKwlkZXYtPmlhbXRoaWZfZmlsZV9leHQuZmlsZSA9IE5VTEw7CisJZGV2LT5udW1faGVjaV9tZV9jbGllbnRzID0gMDsKKworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwloZWNpX2Nzcl9kaXNhYmxlX2ludGVycnVwdHMoZGV2KTsKKworCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlpZiAoZGV2LT5tZW1fYWRkcikKKwkJaW91bm1hcChkZXYtPm1lbV9hZGRyKTsKKworCWtmcmVlKGRldik7CisKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworLyoqCisgKiBoZWNpX2NsZWFyX2xpc3QgLSByZW1vdmUgYWxsIGNhbGxiYWNrcyBhc3NvY2lhdGVkIHdpdGggZmlsZQorICogCQlmcm9tIGhlY2lfY2JfbGlzdAorICoKKyAqIEBmaWxlOiBmaWxlIGluZm9ybWF0aW9uIHN0cnVjdAorICogQGhlY2lfY2JfbGlzdDogY2FsbGJhY2tzIGxpc3QKKyAqCisgKiBoZWNpX2NsZWFyX2xpc3QgaXMgY2FsbGVkIHRvIGNsZWFyIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggZmlsZQorICogd2hlbiBhcHBsaWNhdGlvbiBjYWxscyBjbG9zZSBmdW5jdGlvbiBvciBDdHJsLUMgd2FzIHByZXNzZWQKKyAqCisgKiByZXR1cm5zIDEgaWYgY2FsbGJhY2sgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LCAwIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IGhlY2lfY2xlYXJfbGlzdChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGxpc3RfaGVhZCAqaGVjaV9jYl9saXN0KQoreworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX25leHQgPSBOVUxMOworCXN0cnVjdCBmaWxlICpmaWxlX3RlbXA7CisJaW50IHJldHMgPSAwOworCisJLyogbGlzdCBhbGwgbGlzdCBtZW1iZXIgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdl9jYl9wb3MsIHByaXZfY2JfbmV4dCwKKwkJCQkgaGVjaV9jYl9saXN0LCBjYl9saXN0KSB7CisJCWZpbGVfdGVtcCA9IChzdHJ1Y3QgZmlsZSAqKXByaXZfY2JfcG9zLT5maWxlX29iamVjdDsKKwkJLyogY2hlY2sgaWYgbGlzdCBtZW1iZXIgYXNzb2NpYXRlZCB3aXRoIGEgZmlsZSAqLworCQlpZiAoZmlsZV90ZW1wID09IGZpbGUpIHsKKwkJCS8qIHJlbW92ZSBtZW1iZXIgZnJvbSB0aGUgbGlzdCAqLworCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCS8qIGNoZWNrIGlmIGNiIGVxdWFsIHRvIGN1cnJlbnQgaWFtdGhpZiBjYiAqLworCQkJaWYgKGRldi0+aWFtdGhpZl9jdXJyZW50X2NiID09IHByaXZfY2JfcG9zKSB7CisJCQkJZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgPSBOVUxMOworCQkJCS8qIHNlbmQgZmxvdyBjb250cm9sIHRvIGlhbXRoaWYgY2xpZW50ICovCisJCQkJaGVjaV9zZW5kX2Zsb3dfY29udHJvbChkZXYsCisJCQkJCQkgICAgICAgJmRldi0+aWFtdGhpZl9maWxlX2V4dCk7CisJCQl9CisJCQkvKiBmcmVlIGFsbCBhbGxvY2F0ZWQgYnVmZmVycyAqLworCQkJaGVjaV9mcmVlX2NiX3ByaXZhdGUocHJpdl9jYl9wb3MpOworCQkJcmV0cyA9IDE7CisJCX0KKwl9CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogaGVjaV9jbGVhcl9saXN0cyAtIHJlbW92ZSBhbGwgY2FsbGJhY2tzIGFzc29jaWF0ZWQgd2l0aCBmaWxlCisgKgorICogQGRldjogZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdAorICogQGZpbGU6IGZpbGUgaW5mb3JtYXRpb24gc3RydWN0CisgKgorICogaGVjaV9jbGVhcl9saXN0cyBpcyBjYWxsZWQgdG8gY2xlYXIgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBmaWxlCisgKiB3aGVuIGFwcGxpY2F0aW9uIGNhbGxzIGNsb3NlIGZ1bmN0aW9uIG9yIEN0cmwtQyB3YXMgcHJlc3NlZAorICoKKyAqIHJldHVybnMgMSBpZiBjYWxsYmFjayByZW1vdmVkIGZyb20gdGhlIGxpc3QsIDAgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgaGVjaV9jbGVhcl9saXN0cyhzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0cyA9IDA7CisKKwkvKiByZW1vdmUgY2FsbGJhY2tzIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUgKi8KKwloZWNpX2NsZWFyX2xpc3QoZGV2LCBmaWxlLCAmZGV2LT5wdGhpX2NtZF9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJaWYgKGhlY2lfY2xlYXJfbGlzdChkZXYsIGZpbGUsCisJCQkgICAgJmRldi0+cHRoaV9yZWFkX2NvbXBsZXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkKKwkJcmV0cyA9IDE7CisKKwloZWNpX2NsZWFyX2xpc3QoZGV2LCBmaWxlLCAmZGV2LT5jdHJsX3JkX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKworCWlmIChoZWNpX2NsZWFyX2xpc3QoZGV2LCBmaWxlLCAmZGV2LT5jdHJsX3dyX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkKKwkJcmV0cyA9IDE7CisKKwlpZiAoaGVjaV9jbGVhcl9saXN0KGRldiwgZmlsZSwKKwkJCSAgICAmZGV2LT53cml0ZV93YWl0aW5nX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkKKwkJcmV0cyA9IDE7CisKKwlpZiAoaGVjaV9jbGVhcl9saXN0KGRldiwgZmlsZSwgJmRldi0+d3JpdGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKQorCQlyZXRzID0gMTsKKworCS8qIGNoZWNrIGlmIGlhbXRoaWZfY3VycmVudF9jYiBub3QgTlVMTCAqLworCWlmIChkZXYtPmlhbXRoaWZfY3VycmVudF9jYiAmJiAoIXJldHMpKSB7CisJCS8qIGNoZWNrIGZpbGUgYW5kIGlhbXRoaWYgY3VycmVudCBjYiBhc3NvY2lhdGlvbiAqLworCQlpZiAoZGV2LT5pYW10aGlmX2N1cnJlbnRfY2ItPmZpbGVfb2JqZWN0ID09IGZpbGUpIHsKKwkJCS8qIHJlbW92ZSBjYiAqLworCQkJaGVjaV9mcmVlX2NiX3ByaXZhdGUoZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IpOworCQkJZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgPSBOVUxMOworCQkJcmV0cyA9IDE7CisJCX0KKwl9CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogaGVjaV9vcGVuIC0gdGhlIG9wZW4gZnVuY3Rpb24KKyAqCisgKiBAaW5vZGU6IHBvaW50ZXIgdG8gaW5vZGUgc3RydWN0dXJlCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZQorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50IGhlY2lfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0OworCWludCBpZl9udW0gPSBpbWlub3IoaW5vZGUpOworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXY7CisKKwlpZiAoIWhlY2lfZGV2aWNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShoZWNpX2RldmljZSk7CisJaWYgKChpZl9udW0gIT0gSEVDSV9NSU5PUl9OVU1CRVIpIHx8ICghZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmaWxlX2V4dCA9IGhlY2lfYWxsb2NfZmlsZV9wcml2YXRlKGZpbGUpOworCWlmIChmaWxlX2V4dCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0VOQUJMRUQpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlrZnJlZShmaWxlX2V4dCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoZGV2LT5vcGVuX2hhbmRsZV9jb3VudCA+PSBIRUNJX01BWF9PUEVOX0hBTkRMRV9DT1VOVCkgeworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWtmcmVlKGZpbGVfZXh0KTsKKwkJcmV0dXJuIC1FTkZJTEU7CisJfTsKKwlkZXYtPm9wZW5faGFuZGxlX2NvdW50Kys7CisJbGlzdF9hZGRfdGFpbCgmZmlsZV9leHQtPmxpbmssICZkZXYtPmZpbGVfbGlzdCk7CisJd2hpbGUgKChkZXYtPmhlY2lfaG9zdF9jbGllbnRzW2Rldi0+Y3VycmVudF9ob3N0X2NsaWVudF9pZCAvIDhdCisJCSYgKDEgPDwgKGRldi0+Y3VycmVudF9ob3N0X2NsaWVudF9pZCAlIDgpKSkgIT0gMCkgeworCisJCWRldi0+Y3VycmVudF9ob3N0X2NsaWVudF9pZCsrOyAvKiBhbGxvdyBvdmVyZmxvdyAqLworCQlEQkcoImN1cnJlbnRfaG9zdF9jbGllbnRfaWQgPSAlZFxuIiwKKwkJICAgIGRldi0+Y3VycmVudF9ob3N0X2NsaWVudF9pZCk7CisJCURCRygiZGV2LT5vcGVuX2hhbmRsZV9jb3VudCA9ICVsdVxuIiwKKwkJICAgIGRldi0+b3Blbl9oYW5kbGVfY291bnQpOworCX0KKwlEQkcoImN1cnJlbnRfaG9zdF9jbGllbnRfaWQgPSAlZFxuIiwgZGV2LT5jdXJyZW50X2hvc3RfY2xpZW50X2lkKTsKKwlmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQgPSBkZXYtPmN1cnJlbnRfaG9zdF9jbGllbnRfaWQ7CisJZGV2LT5oZWNpX2hvc3RfY2xpZW50c1tmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQgLyA4XSB8PQorCQkoMSA8PCAoZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkICUgOCkpOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlzcGluX2xvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCWZpbGVfZXh0LT5zdGF0ZSA9IEhFQ0lfRklMRV9JTklUSUFMSVpJTkc7CisJZmlsZV9leHQtPnNtX3N0YXRlID0gMDsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZpbGVfZXh0OworCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGhlY2lfcmVsZWFzZSAtIHRoZSByZWxlYXNlIGZ1bmN0aW9uCisgKgorICogQGlub2RlOiBwb2ludGVyIHRvIGlub2RlIHN0cnVjdHVyZQorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZXJyb3IKKyAqLworc3RhdGljIGludCBoZWNpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJldHMgPSAwOworCWludCBpZl9udW0gPSBpbWlub3IoaW5vZGUpOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYiA9IE5VTEw7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldjsKKworCWlmICghaGVjaV9kZXZpY2UpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gcGNpX2dldF9kcnZkYXRhKGhlY2lfZGV2aWNlKTsKKwlpZiAoKGlmX251bSAhPSBIRUNJX01JTk9SX05VTUJFUikgfHwgKCFkZXYpIHx8ICghZmlsZV9leHQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChmaWxlX2V4dCAhPSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSB7CisJCXNwaW5fbG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJCWlmIChmaWxlX2V4dC0+c3RhdGUgPT0gSEVDSV9GSUxFX0NPTk5FQ1RFRCkgeworCQkJZmlsZV9leHQtPnN0YXRlID0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RJTkc7CisJCQlzcGluX3VubG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJCQlEQkcoImRpc2Nvbm5lY3RpbmcgY2xpZW50IGhvc3QgY2xpZW50ID0gJWQsICIKKwkJCSAgICAiTUUgY2xpZW50ID0gJWRcbiIsCisJCQkgICAgZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkLAorCQkJICAgIGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpOworCQkJcmV0cyA9IGhlY2lfZGlzY29ubmVjdF9ob3N0X2NsaWVudChkZXYsIGZpbGVfZXh0KTsKKwkJCXNwaW5fbG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJCX0KKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJaGVjaV9mbHVzaF9xdWV1ZXMoZGV2LCBmaWxlX2V4dCk7CisJCURCRygicmVtb3ZlIGNsaWVudCBob3N0IGNsaWVudCA9ICVkLCBNRSBjbGllbnQgPSAlZFxuIiwKKwkJICAgIGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCwKKwkJICAgIGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpOworCisJCWlmIChkZXYtPm9wZW5faGFuZGxlX2NvdW50ID4gMCkgeworCQkJZGV2LT5oZWNpX2hvc3RfY2xpZW50c1tmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQgLyA4XSAmPQorCQkJfigxIDw8IChmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQgJSA4KSk7CisJCQlkZXYtPm9wZW5faGFuZGxlX2NvdW50LS07CisJCX0KKwkJaGVjaV9yZW1vdmVfY2xpZW50X2Zyb21fZmlsZV9saXN0KGRldiwKKwkJCQlmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQpOworCisJCS8qIGZyZWUgcmVhZCBjYiAqLworCQlpZiAoZmlsZV9leHQtPnJlYWRfY2IgIT0gTlVMTCkgeworCQkJcHJpdl9jYiA9IGZpbmRfcmVhZF9saXN0X2VudHJ5KGRldiwgZmlsZV9leHQpOworCQkJLyogUmVtb3ZlIGVudHJ5IGZyb20gcmVhZCBsaXN0ICovCisJCQlpZiAocHJpdl9jYiAhPSBOVUxMKQorCQkJCWxpc3RfZGVsKCZwcml2X2NiLT5jYl9saXN0KTsKKworCQkJcHJpdl9jYiA9IGZpbGVfZXh0LT5yZWFkX2NiOworCQkJZmlsZV9leHQtPnJlYWRfY2IgPSBOVUxMOworCQl9CisKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCQlzcGluX3VubG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisKKwkJaWYgKHByaXZfY2IgIT0gTlVMTCkKKwkJCWhlY2lfZnJlZV9jYl9wcml2YXRlKHByaXZfY2IpOworCisJCWtmcmVlKGZpbGVfZXh0KTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJCWlmIChkZXYtPm9wZW5faGFuZGxlX2NvdW50ID4gMCkKKwkJCWRldi0+b3Blbl9oYW5kbGVfY291bnQtLTsKKworCQlpZiAoZGV2LT5pYW10aGlmX2ZpbGVfb2JqZWN0ID09IGZpbGUKKwkJICAgICYmIGRldi0+aWFtdGhpZl9zdGF0ZSAhPSBIRUNJX0lBTVRISUZfSURMRSkgeworCQkJREJHKCJwdGhpIGNhbmNlbGVkIGlhbXRoaWYgc3RhdGUgJWRcbiIsCisJCQkgICAgZGV2LT5pYW10aGlmX3N0YXRlKTsKKwkJCWRldi0+aWFtdGhpZl9jYW5jZWxlZCA9IDE7CisJCQlpZiAoZGV2LT5pYW10aGlmX3N0YXRlID09IEhFQ0lfSUFNVEhJRl9SRUFEX0NPTVBMRVRFKSB7CisJCQkJREJHKCJydW4gbmV4dCBwdGhpIGlhbXRoaWYgY2JcbiIpOworCQkJCXJ1bl9uZXh0X2lhbXRoaWZfY21kKGRldik7CisJCQl9CisJCX0KKworCQlpZiAoaGVjaV9jbGVhcl9saXN0cyhkZXYsIGZpbGUpKQorCQkJZGV2LT5pYW10aGlmX3N0YXRlID0gSEVDSV9JQU1USElGX0lETEU7CisKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCX0KKwlyZXR1cm4gcmV0czsKK30KKworc3RhdGljIHN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKmZpbmRfcmVhZF9saXN0X2VudHJ5KAorCQlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX25leHQgPSBOVUxMOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHRfbGlzdF90ZW1wOworCisJaWYgKGRldi0+cmVhZF9saXN0LnN0YXR1cyA9PSAwCisJICAgICYmICFsaXN0X2VtcHR5KCZkZXYtPnJlYWRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKSB7CisJCURCRygicmVtb3ZlIHJlYWRfbGlzdCBDQiBcbiIpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdl9jYl9wb3MsCisJCQkJcHJpdl9jYl9uZXh0LAorCQkJCSZkZXYtPnJlYWRfbGlzdC5oZWNpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKworCQkJZmlsZV9leHRfbGlzdF90ZW1wID0gKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqKQorCQkJCXByaXZfY2JfcG9zLT5maWxlX3ByaXZhdGU7CisKKwkJCWlmICgoZmlsZV9leHRfbGlzdF90ZW1wICE9IE5VTEwpICYmCisJCQkgICAgaGVjaV9mZV9zYW1lX2lkKGZpbGVfZXh0LCBmaWxlX2V4dF9saXN0X3RlbXApKQorCQkJCXJldHVybiBwcml2X2NiX3BvczsKKworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIGhlY2lfcmVhZCAtIHRoZSByZWFkIGNsaWVudCBtZXNzYWdlIGZ1bmN0aW9uLgorICoKKyAqIEBmaWxlOiBwb2ludGVyIHRvIGZpbGUgc3RydWN0dXJlCisgKiBAdWJ1ZjogcG9pbnRlciB0byB1c2VyIGJ1ZmZlcgorICogQGxlbmd0aDogYnVmZmVyIGxlbmd0aAorICogQG9mZnNldDogZGF0YSBvZmZzZXQgaW4gYnVmZmVyCisgKgorICogcmV0dXJucyA+PTAgZGF0YSBsZW5ndGggb24gc3VjY2VzcyAsIDwwIG9uIGVycm9yCisgKi8KK3N0YXRpYyBzc2l6ZV90IGhlY2lfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsCisJCQkgc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpvZmZzZXQpCit7CisJaW50IGk7CisJaW50IHJldHMgPSAwLCBlcnIgPSAwOworCWludCBpZl9udW0gPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2IgPSBOVUxMOworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXY7CisKKwlpZiAoIWhlY2lfZGV2aWNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShoZWNpX2RldmljZSk7CisJaWYgKChpZl9udW0gIT0gSEVDSV9NSU5PUl9OVU1CRVIpIHx8ICghZGV2KSB8fCAoIWZpbGVfZXh0KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9FTkFCTEVEKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCXNwaW5fbG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJaWYgKChmaWxlX2V4dC0+c21fc3RhdGUgJiBIRUNJX1dEX1NUQVRFX0lOREVQRU5ERU5DRV9NU0dfU0VOVCkgPT0gMCkgeworCQlzcGluX3VubG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJCS8qIERvIG5vdCBhbGxvdyB0byByZWFkIHdhdGNoZG9nIGNsaWVudCAqLworCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faGVjaV9tZV9jbGllbnRzOyBpKyspIHsKKwkJCWlmIChtZW1jbXAoJmhlY2lfd2RfZ3VpZCwKKwkJCQkgICAmZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLnByb3RvY29sX25hbWUsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBndWlkKSkgPT0gMCkgeworCQkJCWlmIChmaWxlX2V4dC0+bWVfY2xpZW50X2lkID09CisJCQkJICAgIGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQpCisJCQkJCXJldHVybiAtRUJBREY7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlmaWxlX2V4dC0+c21fc3RhdGUgJj0gfkhFQ0lfV0RfU1RBVEVfSU5ERVBFTkRFTkNFX01TR19TRU5UOworCQlzcGluX3VubG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJfQorCisJaWYgKGZpbGVfZXh0ID09ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpIHsKKwkJcmV0cyA9IHB0aGlfcmVhZChkZXYsIGlmX251bSwgZmlsZSwgdWJ1ZiwgbGVuZ3RoLCBvZmZzZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZmlsZV9leHQtPnJlYWRfY2IgJiYgZmlsZV9leHQtPnJlYWRfY2ItPmluZm9ybWF0aW9uID4gKm9mZnNldCkgeworCQlwcml2X2NiID0gZmlsZV9leHQtPnJlYWRfY2I7CisJCWdvdG8gY29weV9idWZmZXI7CisJfSBlbHNlIGlmIChmaWxlX2V4dC0+cmVhZF9jYiAmJiBmaWxlX2V4dC0+cmVhZF9jYi0+aW5mb3JtYXRpb24gPiAwICYmCisJCSAgIGZpbGVfZXh0LT5yZWFkX2NiLT5pbmZvcm1hdGlvbiA8PSAqb2Zmc2V0KSB7CisJCXByaXZfY2IgPSBmaWxlX2V4dC0+cmVhZF9jYjsKKwkJcmV0cyA9IDA7CisJCWdvdG8gZnJlZTsKKwl9IGVsc2UgaWYgKCghZmlsZV9leHQtPnJlYWRfY2IgfHwgZmlsZV9leHQtPnJlYWRfY2ItPmluZm9ybWF0aW9uID09IDApCisJCSAgICAmJiAqb2Zmc2V0ID4gMCkgeworCQkvKk9mZnNldCBuZWVkcyB0byBiZSBjbGVhbmVkIGZvciBjb250aW5nb3VzIHJlYWRzKi8KKwkJKm9mZnNldCA9IDA7CisJCXJldHMgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlzcGluX2xvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCWVyciA9IGhlY2lfc3RhcnRfcmVhZChkZXYsIGlmX251bSwgZmlsZV9leHQpOworCWlmIChlcnIgIT0gMCAmJiBlcnIgIT0gLUVCVVNZKSB7CisJCURCRygiaGVjaSBzdGFydCByZWFkIGZhaWx1cmUgd2l0aCBzdGF0dXMgPSAlZFxuIiwgZXJyKTsKKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCQlyZXRzID0gZXJyOworCQlnb3RvIG91dDsKKwl9CisJaWYgKEhFQ0lfUkVBRF9DT01QTEVURSAhPSBmaWxlX2V4dC0+cmVhZGluZ19zdGF0ZQorCQkJJiYgIXdhaXRxdWV1ZV9hY3RpdmUoJmZpbGVfZXh0LT5yeF93YWl0KSkgeworCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwkJCXJldHMgPSAtRUFHQUlOOworCQkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCisJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZmlsZV9leHQtPnJ4X3dhaXQsCisJCQkoSEVDSV9SRUFEX0NPTVBMRVRFID09IGZpbGVfZXh0LT5yZWFkaW5nX3N0YXRlCisJCQkgfHwgSEVDSV9GSUxFX0lOSVRJQUxJWklORyA9PSBmaWxlX2V4dC0+c3RhdGUKKwkJCSB8fCBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEID09IGZpbGVfZXh0LT5zdGF0ZQorCQkJIHx8IEhFQ0lfRklMRV9ESVNDT05ORUNUSU5HID09IGZpbGVfZXh0LT5zdGF0ZSkpKSB7CisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlyZXRzID0gLUVJTlRSOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJfQorCisJCWlmIChIRUNJX0ZJTEVfSU5JVElBTElaSU5HID09IGZpbGVfZXh0LT5zdGF0ZSB8fAorCQkgICAgSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRCA9PSBmaWxlX2V4dC0+c3RhdGUgfHwKKwkJICAgIEhFQ0lfRklMRV9ESVNDT05ORUNUSU5HID09IGZpbGVfZXh0LT5zdGF0ZSkgeworCQkJcmV0cyA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXNwaW5fbG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJfQorCisJcHJpdl9jYiA9IGZpbGVfZXh0LT5yZWFkX2NiOworCisJaWYgKCFwcml2X2NiKSB7CisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChmaWxlX2V4dC0+cmVhZGluZ19zdGF0ZSAhPSBIRUNJX1JFQURfQ09NUExFVEUpIHsKKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCQlyZXR1cm4gMDsKKwl9CisJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCS8qIG5vdyBjb3B5IHRoZSBkYXRhIHRvIHVzZXIgc3BhY2UgKi8KK2NvcHlfYnVmZmVyOgorCURCRygicHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyIHNpemUgLSAlZFxuIiwKKwkgICAgcHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyLnNpemUpOworCURCRygicHJpdl9jYi0+aW5mb3JtYXRpb24gLSAlbHVcbiIsCisJICAgIHByaXZfY2ItPmluZm9ybWF0aW9uKTsKKwlpZiAobGVuZ3RoID09IDAgfHwgdWJ1ZiA9PSBOVUxMIHx8CisJICAgICpvZmZzZXQgPiBwcml2X2NiLT5pbmZvcm1hdGlvbikgeworCQlyZXRzID0gLUVNU0dTSVpFOworCQlnb3RvIGZyZWU7CisJfQorCisJLyogbGVuZ3RoIGlzIGJlaW5nIHR1cm5jYXRlZCB0byBQQUdFX1NJWkUsIGhvd2V2ZXIsICovCisJLyogaW5mb3JtYXRpb24gc2l6ZSBtYXkgYmUgbG9uZ2VyICovCisJbGVuZ3RoID0gKGxlbmd0aCA8IChwcml2X2NiLT5pbmZvcm1hdGlvbiAtICpvZmZzZXQpID8KKwkJCWxlbmd0aCA6IChwcml2X2NiLT5pbmZvcm1hdGlvbiAtICpvZmZzZXQpKTsKKworCWlmIChjb3B5X3RvX3VzZXIodWJ1ZiwKKwkJCSBwcml2X2NiLT5yZXNwb25zZV9idWZmZXIuZGF0YSArICpvZmZzZXQsCisJCQkgbGVuZ3RoKSkgeworCQlyZXRzID0gLUVGQVVMVDsKKwkJZ290byBmcmVlOworCX0KKworCXJldHMgPSBsZW5ndGg7CisJKm9mZnNldCArPSBsZW5ndGg7CisJaWYgKCh1bnNpZ25lZCBsb25nKSpvZmZzZXQgPCBwcml2X2NiLT5pbmZvcm1hdGlvbikKKwkJZ290byBvdXQ7CisKK2ZyZWU6CisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlwcml2X2NiX3BvcyA9IGZpbmRfcmVhZF9saXN0X2VudHJ5KGRldiwgZmlsZV9leHQpOworCS8qIFJlbW92ZSBlbnRyeSBmcm9tIHJlYWQgbGlzdCAqLworCWlmIChwcml2X2NiX3BvcyAhPSBOVUxMKQorCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwloZWNpX2ZyZWVfY2JfcHJpdmF0ZShwcml2X2NiKTsKKwlzcGluX2xvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCWZpbGVfZXh0LT5yZWFkaW5nX3N0YXRlID0gSEVDSV9JRExFOworCWZpbGVfZXh0LT5yZWFkX2NiID0gTlVMTDsKKwlmaWxlX2V4dC0+cmVhZF9wZW5kaW5nID0gMDsKKwlzcGluX3VubG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CitvdXQ6CURCRygiZW5kIGhlY2kgcmVhZCByZXRzPSAlZFxuIiwgcmV0cyk7CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogaGVjaV93cml0ZSAtIHRoZSB3cml0ZSBmdW5jdGlvbi4KKyAqCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZQorICogQHVidWY6IHBvaW50ZXIgdG8gdXNlciBidWZmZXIKKyAqIEBsZW5ndGg6IGJ1ZmZlciBsZW5ndGgKKyAqIEBvZmZzZXQ6IGRhdGEgb2Zmc2V0IGluIGJ1ZmZlcgorICoKKyAqIHJldHVybnMgPj0wIGRhdGEgbGVuZ3RoIG9uIHN1Y2Nlc3MgLCA8MCBvbiBlcnJvcgorICovCitzdGF0aWMgc3NpemVfdCBoZWNpX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJCSAgc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpvZmZzZXQpCit7CisJaW50IHJldHMgPSAwOworCV9fdTggaTsKKwlpbnQgaWZfbnVtID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfd3JpdGVfY2IgPSBOVUxMOworCXN0cnVjdCBoZWNpX21zZ19oZHIgaGVjaV9oZHI7CisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIGN1cnJ0aW1lID0gZ2V0X3NlY29uZHMoKTsKKworCWlmICghaGVjaV9kZXZpY2UpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gcGNpX2dldF9kcnZkYXRhKGhlY2lfZGV2aWNlKTsKKworCWlmICgoaWZfbnVtICE9IEhFQ0lfTUlOT1JfTlVNQkVSKSB8fCAoIWRldikgfHwgKCFmaWxlX2V4dCkpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9FTkFCTEVEKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChmaWxlX2V4dCA9PSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSB7CisJCXByaXZfd3JpdGVfY2IgPSBmaW5kX3B0aGlfcmVhZF9saXN0X2VudHJ5KGRldiwgZmlsZSk7CisJCWlmICgocHJpdl93cml0ZV9jYiAhPSBOVUxMKSAmJgorCQkgICAgICgoKGN1cnJ0aW1lIC0gcHJpdl93cml0ZV9jYi0+cmVhZF90aW1lKSA+CisJCQkgICAgSUFNVEhJRl9SRUFEX1RJTUVSKSB8fAorCQkgICAgICAoZmlsZV9leHQtPnJlYWRpbmdfc3RhdGUgPT0gSEVDSV9SRUFEX0NPTVBMRVRFKSkpIHsKKwkJCSgqb2Zmc2V0KSA9IDA7CisJCQlsaXN0X2RlbCgmcHJpdl93cml0ZV9jYi0+Y2JfbGlzdCk7CisJCQloZWNpX2ZyZWVfY2JfcHJpdmF0ZShwcml2X3dyaXRlX2NiKTsKKwkJCXByaXZfd3JpdGVfY2IgPSBOVUxMOworCQl9CisJfQorCisJLyogZnJlZSBlbnRyeSB1c2VkIGluIHJlYWQgKi8KKwlpZiAoZmlsZV9leHQtPnJlYWRpbmdfc3RhdGUgPT0gSEVDSV9SRUFEX0NPTVBMRVRFKSB7CisJCSpvZmZzZXQgPSAwOworCQlwcml2X3dyaXRlX2NiID0gZmluZF9yZWFkX2xpc3RfZW50cnkoZGV2LCBmaWxlX2V4dCk7CisJCWlmIChwcml2X3dyaXRlX2NiICE9IE5VTEwpIHsKKwkJCWxpc3RfZGVsKCZwcml2X3dyaXRlX2NiLT5jYl9saXN0KTsKKwkJCWhlY2lfZnJlZV9jYl9wcml2YXRlKHByaXZfd3JpdGVfY2IpOworCQkJcHJpdl93cml0ZV9jYiA9IE5VTEw7CisJCQlzcGluX2xvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCQkJZmlsZV9leHQtPnJlYWRpbmdfc3RhdGUgPSBIRUNJX0lETEU7CisJCQlmaWxlX2V4dC0+cmVhZF9jYiA9IE5VTEw7CisJCQlmaWxlX2V4dC0+cmVhZF9wZW5kaW5nID0gMDsKKwkJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+cmVhZF9pb19sb2NrKTsKKwkJfQorCX0gZWxzZSBpZiAoZmlsZV9leHQtPnJlYWRpbmdfc3RhdGUgPT0gSEVDSV9JRExFICYmCisJCQlmaWxlX2V4dC0+cmVhZF9wZW5kaW5nID09IDApCisJCSgqb2Zmc2V0KSA9IDA7CisKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwlwcml2X3dyaXRlX2NiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdl93cml0ZV9jYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2X3dyaXRlX2NiLT5maWxlX29iamVjdCA9IGZpbGU7CisJcHJpdl93cml0ZV9jYi0+ZmlsZV9wcml2YXRlID0gZmlsZV9leHQ7CisJcHJpdl93cml0ZV9jYi0+cmVxdWVzdF9idWZmZXIuZGF0YSA9IGttYWxsb2MobGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXZfd3JpdGVfY2ItPnJlcXVlc3RfYnVmZmVyLmRhdGEpIHsKKwkJa2ZyZWUocHJpdl93cml0ZV9jYik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlEQkcoImxlbmd0aCA9JWRcbiIsIChpbnQpIGxlbmd0aCk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIocHJpdl93cml0ZV9jYi0+cmVxdWVzdF9idWZmZXIuZGF0YSwKKwkJdWJ1ZiwgbGVuZ3RoKSkgeworCQlyZXRzID0gLUVGQVVMVDsKKwkJZ290byBmYWlsOworCX0KKworCXNwaW5fbG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJZmlsZV9leHQtPnNtX3N0YXRlID0gMDsKKwlpZiAoKGxlbmd0aCA9PSA0KSAmJgorCSAgICAoKG1lbWNtcChoZWNpX3dkX3N0YXRlX2luZGVwZW5kZW5jZV9tc2dbMF0sIHVidWYsIDQpID09IDApIHx8CisJICAgICAobWVtY21wKGhlY2lfd2Rfc3RhdGVfaW5kZXBlbmRlbmNlX21zZ1sxXSwgdWJ1ZiwgNCkgPT0gMCkgfHwKKwkgICAgIChtZW1jbXAoaGVjaV93ZF9zdGF0ZV9pbmRlcGVuZGVuY2VfbXNnWzJdLCB1YnVmLCA0KSA9PSAwKSkpCisJCWZpbGVfZXh0LT5zbV9zdGF0ZSB8PSBIRUNJX1dEX1NUQVRFX0lOREVQRU5ERU5DRV9NU0dfU0VOVDsKKwlzcGluX3VubG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisKKwlJTklUX0xJU1RfSEVBRCgmcHJpdl93cml0ZV9jYi0+Y2JfbGlzdCk7CisJaWYgKGZpbGVfZXh0ID09ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpIHsKKwkJcHJpdl93cml0ZV9jYi0+cmVzcG9uc2VfYnVmZmVyLmRhdGEgPQorCQkgICAga21hbGxvYyhJQU1USElGX01UVSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdl93cml0ZV9jYi0+cmVzcG9uc2VfYnVmZmVyLmRhdGEpIHsKKwkJCXJldHMgPSAtRU5PTUVNOworCQkJZ290byBmYWlsOworCQl9CisJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9FTkFCTEVEKSB7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faGVjaV9tZV9jbGllbnRzOyBpKyspIHsKKwkJCWlmIChkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkID09CisJCQkJZGV2LT5pYW10aGlmX2ZpbGVfZXh0Lm1lX2NsaWVudF9pZCkKKwkJCQlicmVhazsKKwkJfQorCisJCUJVR19PTihkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkICE9IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpOworCQlpZiAoKGkgPT0gZGV2LT5udW1faGVjaV9tZV9jbGllbnRzKSB8fAorCQkgICAgKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgIT0KKwkJICAgICAgZGV2LT5pYW10aGlmX2ZpbGVfZXh0Lm1lX2NsaWVudF9pZCkpIHsKKworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJcmV0cyA9IC1FTk9ERVY7CisJCQlnb3RvIGZhaWw7CisJCX0gZWxzZSBpZiAoKGxlbmd0aCA+IGRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5tYXhfbXNnX2xlbmd0aCkKKwkJCSAgICB8fCAobGVuZ3RoIDw9IDApKSB7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlyZXRzID0gLUVNU0dTSVpFOworCQkJZ290byBmYWlsOworCQl9CisKKworCQlwcml2X3dyaXRlX2NiLT5yZXNwb25zZV9idWZmZXIuc2l6ZSA9IElBTVRISUZfTVRVOworCQlwcml2X3dyaXRlX2NiLT5tYWpvcl9maWxlX29wZXJhdGlvbnMgPSBIRUNJX0lPQ1RMOworCQlwcml2X3dyaXRlX2NiLT5pbmZvcm1hdGlvbiA9IDA7CisJCXByaXZfd3JpdGVfY2ItPnJlcXVlc3RfYnVmZmVyLnNpemUgPSBsZW5ndGg7CisJCWlmIChkZXYtPmlhbXRoaWZfZmlsZV9leHQuc3RhdGUgIT0gSEVDSV9GSUxFX0NPTk5FQ1RFRCkgeworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJcmV0cyA9IC1FTk9ERVY7CisJCQlnb3RvIGZhaWw7CisJCX0KKworCQlpZiAoIWxpc3RfZW1wdHkoJmRldi0+cHRoaV9jbWRfbGlzdC5oZWNpX2NiLmNiX2xpc3QpCisJCQkJfHwgZGV2LT5pYW10aGlmX3N0YXRlICE9IEhFQ0lfSUFNVEhJRl9JRExFKSB7CisJCQlEQkcoInB0aGlfc3RhdGUgPSAlZFxuIiwgKGludCkgZGV2LT5pYW10aGlmX3N0YXRlKTsKKwkJCURCRygiYWRkIFBUSEkgY2IgdG8gcHRoaSBjbWQgd2FpdGluZyBsaXN0XG4iKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnByaXZfd3JpdGVfY2ItPmNiX2xpc3QsCisJCQkJCSZkZXYtPnB0aGlfY21kX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwkJCXJldHMgPSBsZW5ndGg7CisJCX0gZWxzZSB7CisJCQlEQkcoImNhbGwgcHRoaSB3cml0ZVxuIik7CisJCQlyZXRzID0gcHRoaV93cml0ZShkZXYsIHByaXZfd3JpdGVfY2IpOworCisJCQlpZiAocmV0cyAhPSAwKSB7CisJCQkJREJHKCJwdGhpIHdyaXRlIGZhaWxlZCB3aXRoIHN0YXR1cyA9ICVkXG4iLAorCQkJCSAgICByZXRzKTsKKwkJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQkJZ290byBmYWlsOworCQkJfQorCQkJcmV0cyA9IGxlbmd0aDsKKwkJfQorCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybiByZXRzOworCX0KKworCXByaXZfd3JpdGVfY2ItPm1ham9yX2ZpbGVfb3BlcmF0aW9ucyA9IEhFQ0lfV1JJVEU7CisJLyogbWFrZSBzdXJlIGluZm9ybWF0aW9uIGlzIHplcm8gYmVmb3JlIHdlIHN0YXJ0ICovCisKKwlwcml2X3dyaXRlX2NiLT5pbmZvcm1hdGlvbiA9IDA7CisJcHJpdl93cml0ZV9jYi0+cmVxdWVzdF9idWZmZXIuc2l6ZSA9IGxlbmd0aDsKKworCXNwaW5fbG9jaygmZmlsZV9leHQtPndyaXRlX2lvX2xvY2spOworCURCRygiaG9zdCBjbGllbnQgPSAlZCwgTUUgY2xpZW50ID0gJWRcbiIsCisJICAgIGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCwgZmlsZV9leHQtPm1lX2NsaWVudF9pZCk7CisJaWYgKGZpbGVfZXh0LT5zdGF0ZSAhPSBIRUNJX0ZJTEVfQ09OTkVDVEVEKSB7CisJCXJldHMgPSAtRU5PREVWOworCQlEQkcoImhvc3QgY2xpZW50ID0gJWQsICBpcyBub3QgY29ubmVjdGVkIHRvIE1FIGNsaWVudCA9ICVkIiwKKwkJICAgIGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCwKKwkJICAgIGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpOworCisJCWdvdG8gdW5sb2NrOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faGVjaV9tZV9jbGllbnRzOyBpKyspIHsKKwkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgPT0KKwkJICAgIGZpbGVfZXh0LT5tZV9jbGllbnRfaWQpCisJCQlicmVhazsKKwl9CisJQlVHX09OKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgIT0gZmlsZV9leHQtPm1lX2NsaWVudF9pZCk7CisJaWYgKGkgPT0gZGV2LT5udW1faGVjaV9tZV9jbGllbnRzKSB7CisJCXJldHMgPSAtRU5PREVWOworCQlnb3RvIHVubG9jazsKKwl9CisJaWYgKGxlbmd0aCA+IGRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5tYXhfbXNnX2xlbmd0aCB8fCBsZW5ndGggPD0gMCkgeworCQlyZXRzID0gLUVJTlZBTDsKKwkJZ290byB1bmxvY2s7CisJfQorCXByaXZfd3JpdGVfY2ItPmZpbGVfcHJpdmF0ZSA9IGZpbGVfZXh0OworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZmxvd19jdHJsX2NyZWRzKGRldiwgZmlsZV9leHQpICYmCisJCWRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKwkJaWYgKGxlbmd0aCA+ICgoKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCRCkgPj4gMjQpICoKKwkJCXNpemVvZihfX3UzMikpIC0gc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpKSkgeworCisJCQloZWNpX2hkci5sZW5ndGggPQorCQkJCSgoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfQ0JEKSA+PiAyNCkgKgorCQkJCXNpemVvZihfX3UzMikpIC0KKwkJCQlzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcik7CisJCQloZWNpX2hkci5tc2dfY29tcGxldGUgPSAwOworCQl9IGVsc2UgeworCQkJaGVjaV9oZHIubGVuZ3RoID0gbGVuZ3RoOworCQkJaGVjaV9oZHIubXNnX2NvbXBsZXRlID0gMTsKKwkJfQorCQloZWNpX2hkci5ob3N0X2FkZHIgPSBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQ7CisJCWhlY2lfaGRyLm1lX2FkZHIgPSBmaWxlX2V4dC0+bWVfY2xpZW50X2lkOworCQloZWNpX2hkci5yZXNlcnZlZCA9IDA7CisJCURCRygiY2FsbCBoZWNpX3dyaXRlX21lc3NhZ2UgaGVhZGVyPSUwOHguXG4iLAorCQkgICAgKigoX191MzIgKikgJmhlY2lfaGRyKSk7CisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+d3JpdGVfaW9fbG9jayk7CisJCS8qICBwcm90ZWN0IGhlY2kgbG93IGxldmVsIHdyaXRlICovCisJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgJmhlY2lfaGRyLAorCQkJKHVuc2lnbmVkIGNoYXIgKikgKHByaXZfd3JpdGVfY2ItPnJlcXVlc3RfYnVmZmVyLmRhdGEpLAorCQkJaGVjaV9oZHIubGVuZ3RoKSkgeworCisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQloZWNpX2ZyZWVfY2JfcHJpdmF0ZShwcml2X3dyaXRlX2NiKTsKKwkJCXJldHMgPSAtRU5PREVWOworCQkJcHJpdl93cml0ZV9jYi0+aW5mb3JtYXRpb24gPSAwOworCQkJcmV0dXJuIHJldHM7CisJCX0KKwkJZmlsZV9leHQtPndyaXRpbmdfc3RhdGUgPSBIRUNJX1dSSVRJTkc7CisJCXByaXZfd3JpdGVfY2ItPmluZm9ybWF0aW9uID0gaGVjaV9oZHIubGVuZ3RoOworCQlpZiAoaGVjaV9oZHIubXNnX2NvbXBsZXRlKSB7CisJCQlmbG93X2N0cmxfcmVkdWNlKGRldiwgZmlsZV9leHQpOworCQkJbGlzdF9hZGRfdGFpbCgmcHJpdl93cml0ZV9jYi0+Y2JfbGlzdCwKKwkJCQkgICAgICAmZGV2LT53cml0ZV93YWl0aW5nX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnByaXZfd3JpdGVfY2ItPmNiX2xpc3QsCisJCQkJICAgICAgJmRldi0+d3JpdGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCX0gZWxzZSB7CisKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlwcml2X3dyaXRlX2NiLT5pbmZvcm1hdGlvbiA9IDA7CisJCWZpbGVfZXh0LT53cml0aW5nX3N0YXRlID0gSEVDSV9XUklUSU5HOworCQlzcGluX3VubG9jaygmZmlsZV9leHQtPndyaXRlX2lvX2xvY2spOworCQlsaXN0X2FkZF90YWlsKCZwcml2X3dyaXRlX2NiLT5jYl9saXN0LAorCQkJICAgICAgJmRldi0+d3JpdGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCX0KKwlyZXR1cm4gbGVuZ3RoOworCit1bmxvY2s6CisJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT53cml0ZV9pb19sb2NrKTsKK2ZhaWw6CisJaGVjaV9mcmVlX2NiX3ByaXZhdGUocHJpdl93cml0ZV9jYik7CisJcmV0dXJuIHJldHM7CisKK30KKworLyoqCisgKiBoZWNpX2lvY3RsIC0gdGhlIElPQ1RMIGZ1bmN0aW9uCisgKgorICogQGlub2RlOiBwb2ludGVyIHRvIGlub2RlIHN0cnVjdHVyZQorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBzdHJ1Y3R1cmUKKyAqIEBjbWQ6IGlvY3RsIGNvbW1hbmQKKyAqIEBkYXRhOiBwb2ludGVyIHRvIGhlY2kgbWVzc2FnZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcyAsIDwwIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgaGVjaV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCWludCByZXRzID0gMDsKKwlpbnQgaWZfbnVtID0gaW1pbm9yKGlub2RlKTsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCS8qIGluIHVzZXIgc3BhY2UgKi8KKwlzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEgX191c2VyICp1X21zZzsKKwlzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEga19tc2c7CS8qIGFsbCBpbiBrZXJuZWwgb24gdGhlIHN0YWNrICovCisJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldjsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICghaGVjaV9kZXZpY2UpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2ID0gcGNpX2dldF9kcnZkYXRhKGhlY2lfZGV2aWNlKTsKKwlpZiAoKGlmX251bSAhPSBIRUNJX01JTk9SX05VTUJFUikgfHwgKCFkZXYpIHx8ICghZmlsZV9leHQpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0VOQUJMRUQpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJLyogZmlyc3QgY29weSBmcm9tIHVzZXIgYWxsIGRhdGEgbmVlZGVkICovCisJdV9tc2cgPSAoc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIF9fdXNlciAqKWRhdGE7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZrX21zZywgdV9tc2csIHNpemVvZihrX21zZykpKSB7CisJCURCRygiZmlyc3QgY29weSBmcm9tIHVzZXIgYWxsIGRhdGEgbmVlZGVkIGZpbGxlZFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlEQkcoInVzZXIgbWVzc2FnZSBzaXplIGlzICVkXG4iLCBrX21zZy5zaXplKTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBJT0NUTF9IRUNJX0dFVF9WRVJTSU9OOgorCQlEQkcoIjogSU9DVExfSEVDSV9HRVRfVkVSU0lPTlxuIik7CisJCXJldHMgPSBoZWNpX2lvY3RsX2dldF92ZXJzaW9uKGRldiwgaWZfbnVtLCB1X21zZywga19tc2csCisJCQkJCSAgICAgIGZpbGVfZXh0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1RMX0hFQ0lfQ09OTkVDVF9DTElFTlQ6CisJCURCRygiOiBJT0NUTF9IRUNJX0NPTk5FQ1RfQ0xJRU5ULlxuIik7CisJCXJldHMgPSBoZWNpX2lvY3RsX2Nvbm5lY3RfY2xpZW50KGRldiwgaWZfbnVtLCB1X21zZywga19tc2csCisJCQkJCQkgZmlsZSk7CisJCWJyZWFrOworCisJY2FzZSBJT0NUTF9IRUNJX1dEOgorCQlEQkcoIjogSU9DVExfSEVDSV9XRC5cbiIpOworCQlyZXRzID0gaGVjaV9pb2N0bF93ZChkZXYsIGlmX251bSwga19tc2csIGZpbGVfZXh0KTsKKwkJYnJlYWs7CisKKwljYXNlIElPQ1RMX0hFQ0lfQllQQVNTX1dEOgorCQlEQkcoIjogSU9DVExfSEVDSV9CWVBBU1NfV0QuXG4iKTsKKwkJcmV0cyA9IGhlY2lfaW9jdGxfYnlwYXNzX3dkKGRldiwgaWZfbnVtLCBrX21zZywgZmlsZV9leHQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogaGVjaV9wb2xsIC0gdGhlIHBvbGwgZnVuY3Rpb24KKyAqCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIHN0cnVjdHVyZQorICogQHdhaXQ6IHBvaW50ZXIgdG8gcG9sbF90YWJsZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIHBvbGwgbWFzaworICovCitzdGF0aWMgdW5zaWduZWQgaW50IGhlY2lfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlpbnQgaWZfbnVtID0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2OworCisJaWYgKCFoZWNpX2RldmljZSkKKwkJcmV0dXJuIG1hc2s7CisKKwlkZXYgPSBwY2lfZ2V0X2RydmRhdGEoaGVjaV9kZXZpY2UpOworCisJaWYgKChpZl9udW0gIT0gSEVDSV9NSU5PUl9OVU1CRVIpIHx8ICghZGV2KSB8fCAoIWZpbGVfZXh0KSkKKwkJcmV0dXJuIG1hc2s7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9FTkFCTEVEKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuIG1hc2s7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCWlmIChmaWxlX2V4dCA9PSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSB7CisJCXBvbGxfd2FpdChmaWxlLCAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0LndhaXQsIHdhaXQpOworCQlzcGluX2xvY2soJmRldi0+aWFtdGhpZl9maWxlX2V4dC5maWxlX2xvY2spOworCQlpZiAoZGV2LT5pYW10aGlmX3N0YXRlID09IEhFQ0lfSUFNVEhJRl9SRUFEX0NPTVBMRVRFCisJCSAgICAmJiBkZXYtPmlhbXRoaWZfZmlsZV9vYmplY3QgPT0gZmlsZSkgeworCQkJbWFzayB8PSAoUE9MTElOIHwgUE9MTFJETk9STSk7CisJCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJREJHKCJydW4gbmV4dCBwdGhpIGNiXG4iKTsKKwkJCXJ1bl9uZXh0X2lhbXRoaWZfY21kKGRldik7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCX0KKwkJc3Bpbl91bmxvY2soJmRldi0+aWFtdGhpZl9maWxlX2V4dC5maWxlX2xvY2spOworCisJfSBlbHNleworCQlwb2xsX3dhaXQoZmlsZSwgJmZpbGVfZXh0LT50eF93YWl0LCB3YWl0KTsKKwkJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+d3JpdGVfaW9fbG9jayk7CisJCWlmIChIRUNJX1dSSVRFX0NPTVBMRVRFID09IGZpbGVfZXh0LT53cml0aW5nX3N0YXRlKQorCQkJbWFzayB8PSAoUE9MTElOIHwgUE9MTFJETk9STSk7CisKKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT53cml0ZV9pb19sb2NrKTsKKwl9CisKKwlyZXR1cm4gbWFzazsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBoZWNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBlcnIgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5yZWluaXRfdHNrICE9IE5VTEwpIHsKKwkJa3RocmVhZF9zdG9wKGRldi0+cmVpbml0X3Rzayk7CisJCWRldi0+cmVpbml0X3RzayA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKworCS8qIFN0b3Agd2F0Y2hkb2cgaWYgZXhpc3RzICovCisJZGVsX3RpbWVyX3N5bmMoJmRldi0+d2RfdGltZXIpOworCWlmIChkZXYtPndkX2ZpbGVfZXh0LnN0YXRlID09IEhFQ0lfRklMRV9DT05ORUNURUQKKwkgICAgJiYgZGV2LT53ZF90aW1lb3V0KSB7CisJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWdfc3VzX3dkX3RpbWVvdXQgPSBkZXYtPndkX3RpbWVvdXQ7CisJCWRldi0+d2RfdGltZW91dCA9IDA7CisJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAwOworCQltZW1jcHkoZGV2LT53ZF9kYXRhLCBoZWNpX3N0b3Bfd2RfcGFyYW1zLAorCQkJCQlIRUNJX1dEX1BBUkFNU19TSVpFKTsKKwkJZGV2LT5zdG9wID0gMTsKKwkJaWYgKGRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgJiYKKwkJICAgIGZsb3dfY3RybF9jcmVkcyhkZXYsICZkZXYtPndkX2ZpbGVfZXh0KSkgeworCQkJZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSA9IDA7CisJCQlpZiAoIWhlY2lfc2VuZF93ZChkZXYpKQorCQkJCURCRygic2VuZCBzdG9wIFdEIGZhaWxlZFxuIik7CisJCQllbHNlCisJCQkJZmxvd19jdHJsX3JlZHVjZShkZXYsICZkZXYtPndkX2ZpbGVfZXh0KTsKKworCQkJZGV2LT53ZF9wZW5kaW5nID0gMDsKKwkJfSBlbHNlIHsKKwkJCWRldi0+d2RfcGVuZGluZyA9IDE7CisJCX0KKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlkZXYtPndkX3N0b3BlZCA9IDA7CisKKwkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZGV2LT53YWl0X3N0b3Bfd2QsCisJCQkJCQkgICAgICAgKGRldi0+d2Rfc3RvcGVkKSwKKwkJCQkJCSAgICAgICAxMCAqIEhaKTsKKwkJaWYgKCFkZXYtPndkX3N0b3BlZCkKKwkJCURCRygic3RvcCB3ZCBmYWlsZWQgdG8gY29tcGxldGUuXG4iKTsKKwkJZWxzZSB7CisJCQlEQkcoInN0b3Agd2QgY29tcGxldGUgJWQuXG4iLCBlcnIpOworCQkJZXJyID0gMDsKKwkJfQorCX0KKwkvKiBTZXQgbmV3IGhlY2kgc3RhdGUgKi8KKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPmhlY2lfc3RhdGUgPT0gSEVDSV9FTkFCTEVEIHx8CisJICAgIGRldi0+aGVjaV9zdGF0ZSA9PSBIRUNJX1JFQ09WRVJJTkdfRlJPTV9SRVNFVCkgeworCQlkZXYtPmhlY2lfc3RhdGUgPSBIRUNJX1BPV0VSX0RPV047CisJCWhlY2lfcmVzZXQoZGV2LCAwKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJZnJlZV9pcnEocGRldi0+aXJxLCBkZXYpOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBoZWNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2OworCWludCBlcnIgPSAwOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHJlcXVlc3QgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgICAqLworCWVyciA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgaGVjaV9pc3JfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwkJCWhlY2lfZHJpdmVyX25hbWUsIGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IFJlcXVlc3RfaXJxIGZhaWx1cmUuIGlycSA9ICVkIFxuIiwKKwkJICAgICAgIHBkZXYtPmlycSk7CisJCXJldHVybiBlcnI7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlkZXYtPmhlY2lfc3RhdGUgPSBIRUNJX1BPV0VSX1VQOworCWhlY2lfcmVzZXQoZGV2LCAxKTsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwkvKiBTdGFydCB3YXRjaGRvZyBpZiBzdG9wcGVkIGluIHN1c3BlbmQgKi8KKwlpZiAoZ19zdXNfd2RfdGltZW91dCAhPSAwKSB7CisJCWRldi0+d2RfdGltZW91dCA9IGdfc3VzX3dkX3RpbWVvdXQ7CisKKwkJbWVtY3B5KGRldi0+d2RfZGF0YSwgaGVjaV9zdGFydF93ZF9wYXJhbXMsCisJCQkJCUhFQ0lfV0RfUEFSQU1TX1NJWkUpOworCQltZW1jcHkoZGV2LT53ZF9kYXRhICsgSEVDSV9XRF9QQVJBTVNfU0laRSwKKwkJICAgICAgICZkZXYtPndkX3RpbWVvdXQsIHNpemVvZihfX3UxNikpOworCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMTsKKworCQlpZiAoZGV2LT53ZF90aW1lb3V0KQorCQkJbW9kX3RpbWVyKCZkZXYtPndkX3RpbWVyLCBqaWZmaWVzKTsKKworCQlnX3N1c193ZF90aW1lb3V0ID0gMDsKKwl9CisJcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCitNT0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbChSKSBNYW5hZ2VtZW50IEVuZ2luZSBJbnRlcmZhY2UiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKK01PRFVMRV9WRVJTSU9OKEhFQ0lfRFJJVkVSX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV92ZXJzaW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9oZWNpX3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDA3YWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaGVjaV92ZXJzaW9uLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIFBhcnQgb2YgSW50ZWwoUikgTWFuYWdlYWJpbGl0eSBFbmdpbmUgSW50ZXJmYWNlIExpbnV4IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KKworI2lmbmRlZiBIRUNJX1ZFUlNJT05fSAorI2RlZmluZSBIRUNJX1ZFUlNJT05fSAorCisjZGVmaW5lIE1BSk9SX1ZFUlNJT04gICAgICAgICAgICAgIDUKKyNkZWZpbmUgTUlOT1JfVkVSU0lPTiAgICAgICAgICAgICAgMAorI2RlZmluZSBRVUlDS19GSVhfTlVNQkVSICAgICAgICAwCisjZGVmaW5lIFZFUl9CVUlMRCAgICAgICAgICAgICAgIDMxCisKKyNkZWZpbmUgSEVDSV9EUlZfVkVSMSBfX3N0cmluZ2lmeShNQUpPUl9WRVJTSU9OKSAiLiIgX19zdHJpbmdpZnkoTUlOT1JfVkVSU0lPTikKKyNkZWZpbmUgSEVDSV9EUlZfVkVSMiBfX3N0cmluZ2lmeShRVUlDS19GSVhfTlVNQkVSKSAiLiIgX19zdHJpbmdpZnkoVkVSX0JVSUxEKQorCisjZGVmaW5lIEhFQ0lfRFJJVkVSX1ZFUlNJT04JSEVDSV9EUlZfVkVSMSAiLiIgSEVDSV9EUlZfVkVSMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2ludGVycnVwdC5jIGIvZHJpdmVycy9zdGFnaW5nL2hlY2kvaW50ZXJydXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFjZDI2MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2ludGVycnVwdC5jCkBAIC0wLDAgKzEsMTU1MyBAQAorLyoKKyAqIFBhcnQgb2YgSW50ZWwoUikgTWFuYWdlYWJpbGl0eSBFbmdpbmUgSW50ZXJmYWNlIExpbnV4IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKworI2luY2x1ZGUgImhlY2kuaCIKKyNpbmNsdWRlICJoZWNpX2ludGVyZmFjZS5oIgorCisvKgorICogIGludGVycnVwdCBmdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KK3N0YXRpYyB2b2lkIGhlY2lfYmhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIGludCBoZWNpX2JoX3JlYWRfaGFuZGxlcihzdHJ1Y3QgaW9faGVjaV9saXN0ICpjb21wbGV0ZV9saXN0LAorCQlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlfX3MzMiAqc2xvdHMpOworc3RhdGljIGludCBoZWNpX2JoX3dyaXRlX2hhbmRsZXIoc3RydWN0IGlvX2hlY2lfbGlzdCAqY29tcGxldGVfbGlzdCwKKwkJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJX19zMzIgKnNsb3RzKTsKK3N0YXRpYyB2b2lkIGhlY2lfYmhfcmVhZF9idXNfbWVzc2FnZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcik7CitzdGF0aWMgaW50IGhlY2lfYmhfcmVhZF9wdGhpX21lc3NhZ2Uoc3RydWN0IGlvX2hlY2lfbGlzdCAqY29tcGxldGVfbGlzdCwKKwkJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHIpOworc3RhdGljIGludCBoZWNpX2JoX3JlYWRfY2xpZW50X21lc3NhZ2Uoc3RydWN0IGlvX2hlY2lfbGlzdCAqY29tcGxldGVfbGlzdCwKKwkJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHIpOworc3RhdGljIHZvaWQgaGVjaV9jbGllbnRfY29ubmVjdF9yZXNwb25zZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICpjb25uZWN0X3Jlcyk7CitzdGF0aWMgdm9pZCBoZWNpX2NsaWVudF9kaXNjb25uZWN0X3Jlc3BvbnNlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKmRpc2Nvbm5lY3RfcmVzKTsKK3N0YXRpYyB2b2lkIGhlY2lfY2xpZW50X2Zsb3dfY29udHJvbF9yZXNwb25zZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqZmxvd19jb250cm9sKTsKK3N0YXRpYyB2b2lkIGhlY2lfY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGJtX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3QgKmRpc2Nvbm5lY3RfcmVxKTsKKworCisvKioKKyAqIGhlY2lfaXNyX2ludGVycnVwdCAtIFRoZSBJU1Igb2YgdGhlIEhFQ0kgZGV2aWNlCisgKgorICogQGlycTogVGhlIGlycSBudW1iZXIKKyAqIEBkZXZfaWQ6IHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiByZXR1cm5zIGlycXJldHVybl90CisgKi8KK2lycXJldHVybl90IGhlY2lfaXNyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICopIGRldl9pZDsKKworCWRldi0+aG9zdF9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIEhfQ1NSKTsKKworCWlmICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9JUykgIT0gSF9JUykKKwkJcmV0dXJuIElSUV9OT05FOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJaGVjaV9jc3JfZGlzYWJsZV9pbnRlcnJ1cHRzKGRldik7CisKKwkvKgorCSAqIE91ciBkZXZpY2UgaW50ZXJydXB0ZWQsIHNjaGVkdWxlIHdvcmsgdGhlIGhlY2lfYmhfaGFuZGxlcgorCSAqIHRvIGhhbmRsZSB0aGUgaW50ZXJydXB0IHByb2Nlc3NpbmcuIFRoaXMgbmVlZHMgdG8gYmUgYQorCSAqIHdvcmtxdWV1ZSBpdGVtIHNpbmNlIHRoZSBoYW5kbGVyIGNhbiBzbGVlcC4KKwkgKi8KKwlQUkVQQVJFX1dPUksoJmRldi0+d29yaywgaGVjaV9iaF9oYW5kbGVyKTsKKwlEQkcoInNjaGVkdWxlIHdvcmsgdGhlIGhlY2lfYmhfaGFuZGxlci5cbiIpOworCWVyciA9IHNjaGVkdWxlX3dvcmsoJmRldi0+d29yayk7CisJaWYgKCFlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJoZWNpOiBzY2hlZHVsZSB0aGUgaGVjaV9iaF9oYW5kbGVyIgorCQkgICAgICAgIiBmYWlsZWQgZXJyb3I9JXhcbiIsIGVycik7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiBfaGVjaV9jbXBsIC0gcHJvY2VzcyBjb21wbGV0ZWQgb3BlcmF0aW9uLgorICoKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdC4KKyAqIEBwcml2X2NiX3BvczogY2FsbGJhY2sgYmxvY2suCisgKi8KK3N0YXRpYyB2b2lkIF9oZWNpX2NtcGwoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCwKKwkJCQlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcykKK3sKKwlpZiAocHJpdl9jYl9wb3MtPm1ham9yX2ZpbGVfb3BlcmF0aW9ucyA9PSBIRUNJX1dSSVRFKSB7CisJCWhlY2lfZnJlZV9jYl9wcml2YXRlKHByaXZfY2JfcG9zKTsKKwkJREJHKCJjb21wbGV0aW5nIHdyaXRlIGNhbGwgYmFjay5cbiIpOworCQlmaWxlX2V4dC0+d3JpdGluZ19zdGF0ZSA9IEhFQ0lfV1JJVEVfQ09NUExFVEU7CisJCWlmICgoJmZpbGVfZXh0LT50eF93YWl0KSAmJgorCQkgICAgd2FpdHF1ZXVlX2FjdGl2ZSgmZmlsZV9leHQtPnR4X3dhaXQpKQorCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmaWxlX2V4dC0+dHhfd2FpdCk7CisKKwl9IGVsc2UgaWYgKHByaXZfY2JfcG9zLT5tYWpvcl9maWxlX29wZXJhdGlvbnMgPT0gSEVDSV9SRUFECisJCQkJJiYgSEVDSV9SRUFESU5HID09IGZpbGVfZXh0LT5yZWFkaW5nX3N0YXRlKSB7CisJCURCRygiY29tcGxldGluZyByZWFkIGNhbGwgYmFjayBpbmZvcm1hdGlvbj0gJWx1XG4iLAorCQkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbik7CisJCWZpbGVfZXh0LT5yZWFkaW5nX3N0YXRlID0gSEVDSV9SRUFEX0NPTVBMRVRFOworCQlpZiAoKCZmaWxlX2V4dC0+cnhfd2FpdCkgJiYKKwkJICAgIHdhaXRxdWV1ZV9hY3RpdmUoJmZpbGVfZXh0LT5yeF93YWl0KSkKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZmlsZV9leHQtPnJ4X3dhaXQpOworCisJfQorfQorCisvKioKKyAqIF9oZWNpX2NtcGxfaWFtdGhpZiAtIHByb2Nlc3MgY29tcGxldGVkIGlhbXRoaWYgb3BlcmF0aW9uLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIuCisgKiBAcHJpdl9jYl9wb3M6IGNhbGxiYWNrIGJsb2NrLgorICovCitzdGF0aWMgdm9pZCBfaGVjaV9jbXBsX2lhbXRoaWYoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcykKK3sKKwlpZiAoZGV2LT5pYW10aGlmX2NhbmNlbGVkICE9IDEpIHsKKwkJZGV2LT5pYW10aGlmX3N0YXRlID0gSEVDSV9JQU1USElGX1JFQURfQ09NUExFVEU7CisJCWRldi0+aWFtdGhpZl9zdGFsbF90aW1lciA9IDA7CisJCW1lbWNweShwcml2X2NiX3Bvcy0+cmVzcG9uc2VfYnVmZmVyLmRhdGEsCisJCQkJZGV2LT5pYW10aGlmX21zZ19idWYsCisJCQkJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXgpOworCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkmZGV2LT5wdGhpX3JlYWRfY29tcGxldGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCQlEQkcoInB0aGkgcmVhZCBjb21wbGV0ZWQuXG4iKTsKKwl9IGVsc2UgeworCQlydW5fbmV4dF9pYW10aGlmX2NtZChkZXYpOworCX0KKwlpZiAoJmRldi0+aWFtdGhpZl9maWxlX2V4dC53YWl0KSB7CisJCURCRygiY29tcGxldGluZyBwdGhpIGNhbGwgYmFjay5cbiIpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+aWFtdGhpZl9maWxlX2V4dC53YWl0KTsKKwl9Cit9CisvKioKKyAqIGhlY2lfYmhfaGFuZGxlciAtIGZ1bmN0aW9uIGNhbGxlZCBhZnRlciBJU1IgdG8gaGFuZGxlIHRoZSBpbnRlcnJ1cHQKKyAqIHByb2Nlc3NpbmcuCisgKgorICogQHdvcms6IHBvaW50ZXIgdG8gdGhlIHdvcmsgc3RydWN0dXJlCisgKgorICogTk9URTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgc2NoZWR1bGUgd29yaworICovCitzdGF0aWMgdm9pZCBoZWNpX2JoX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UsIHdvcmspOworCXN0cnVjdCBpb19oZWNpX2xpc3QgY29tcGxldGVfbGlzdDsKKwlfX3MzMiBzbG90czsKKwlpbnQgcmV0czsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpjYl9wb3MgPSBOVUxMLCAqY2JfbmV4dCA9IE5VTEw7CisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dDsKKwlpbnQgYnVzX21lc3NhZ2VfcmVjZWl2ZWQgPSAwOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOworCisJREJHKCJmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgSVNSIHRvIGhhbmRsZSB0aGUgaW50ZXJydXB0IHByb2Nlc3NpbmcuXG4iKTsKKwkvKiBpbml0aWFsaXplIG91ciBjb21wbGV0ZSBsaXN0ICovCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwloZWNpX2luaXRpYWxpemVfbGlzdCgmY29tcGxldGVfbGlzdCwgZGV2KTsKKwlkZXYtPmhvc3RfaHdfc3RhdGUgPSByZWFkX2hlY2lfcmVnaXN0ZXIoZGV2LCBIX0NTUik7CisJZGV2LT5tZV9od19zdGF0ZSA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIE1FX0NTUl9IQSk7CisKKwkvKiBjaGVjayBpZiBNRSB3YW50cyBhIHJlc2V0ICovCisJaWYgKCgoZGV2LT5tZV9od19zdGF0ZSAmIE1FX1JEWV9IUkEpID09IDApCisJICAgICYmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9SRVNFVElORykKKwkgICAgJiYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0lOSVRJQUxJWklORykpIHsKKwkJREJHKCJGVyBub3QgcmVhZHkuXG4iKTsKKwkJaGVjaV9yZXNldChkZXYsIDEpOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwkvKiAgY2hlY2sgaWYgd2UgbmVlZCB0byBzdGFydCB0aGUgZGV2ICovCisJaWYgKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX1JEWSkgPT0gMCkgeworCQlpZiAoKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9SRFlfSFJBKSA9PSBNRV9SRFlfSFJBKSB7CisJCQlEQkcoIndlIG5lZWQgdG8gc3RhcnQgdGhlIGRldi5cbiIpOworCQkJZGV2LT5ob3N0X2h3X3N0YXRlIHw9IChIX0lFIHwgSF9JRyB8IEhfUkRZKTsKKwkJCWhlY2lfc2V0X2Nzcl9yZWdpc3RlcihkZXYpOworCQkJaWYgKGRldi0+aGVjaV9zdGF0ZSA9PSBIRUNJX0lOSVRJQUxJWklORykgeworCQkJCWRldi0+cmVjdmRfbXNnID0gMTsKKwkJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfcmVjdmRfbXNnKTsKKwkJCQlyZXR1cm47CisKKwkJCX0gZWxzZSB7CisJCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJCXRzayA9IGt0aHJlYWRfcnVuKGhlY2lfdGFza19pbml0aWFsaXplX2NsaWVudHMsCisJCQkJCQkgIGRldiwgImhlY2lfcmVpbml0Iik7CisJCQkJaWYgKElTX0VSUih0c2spKSB7CisJCQkJCWludCByYyA9IFBUUl9FUlIodHNrKTsKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGVjaTogVW5hYmxlIHRvIgorCQkJCQkic3RhcnQgdGhlIGhlY2kgdGhyZWFkOiAlZFxuIiwgcmMpOworCQkJCX0KKwkJCQlyZXR1cm47CisJCQl9CisJCX0gZWxzZSB7CisJCQlEQkcoImVuYWJsZSBpbnRlcnJ1cHQgRlcgbm90IHJlYWR5LlxuIik7CisJCQloZWNpX2Nzcl9lbmFibGVfaW50ZXJydXB0cyhkZXYpOworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJcmV0dXJuOworCQl9CisJfQorCS8qIGNoZWNrIHNsb3RzIGF2YWxhYmxlIGZvciByZWFkaW5nICovCisJc2xvdHMgPSBjb3VudF9mdWxsX3JlYWRfc2xvdHMoZGV2KTsKKwlEQkcoInNsb3RzID0lMDh4ICBleHRyYV93cml0ZV9pbmRleCA9JTA4eC5cbiIsCisJCXNsb3RzLCBkZXYtPmV4dHJhX3dyaXRlX2luZGV4KTsKKwl3aGlsZSAoKHNsb3RzID4gMCkgJiYgKCFkZXYtPmV4dHJhX3dyaXRlX2luZGV4KSkgeworCQlEQkcoInNsb3RzID0lMDh4ICBleHRyYV93cml0ZV9pbmRleCA9JTA4eC5cbiIsIHNsb3RzLAorCQkJCWRldi0+ZXh0cmFfd3JpdGVfaW5kZXgpOworCQlEQkcoImNhbGwgaGVjaV9iaF9yZWFkX2hhbmRsZXIuXG4iKTsKKwkJcmV0cyA9IGhlY2lfYmhfcmVhZF9oYW5kbGVyKCZjb21wbGV0ZV9saXN0LCBkZXYsICZzbG90cyk7CisJCWlmIChyZXRzICE9IDApCisJCQlnb3RvIGVuZDsKKwl9CisJcmV0cyA9IGhlY2lfYmhfd3JpdGVfaGFuZGxlcigmY29tcGxldGVfbGlzdCwgZGV2LCAmc2xvdHMpOworZW5kOgorCURCRygiZW5kIG9mIGJvdHRvbSBoYWxmIGZ1bmN0aW9uLlxuIik7CisJZGV2LT5ob3N0X2h3X3N0YXRlID0gcmVhZF9oZWNpX3JlZ2lzdGVyKGRldiwgSF9DU1IpOworCWRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgPSBob3N0X2J1ZmZlcl9pc19lbXB0eShkZXYpOworCisJaWYgKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0lTKSA9PSBIX0lTKSB7CisJCS8qIGFja25vd2xlZGdlIGludGVycnVwdCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJCWhlY2lfY3NyX2Rpc2FibGVfaW50ZXJydXB0cyhkZXYpOworCisJCVBSRVBBUkVfV09SSygmZGV2LT53b3JrLCBoZWNpX2JoX2hhbmRsZXIpOworCQlEQkcoInNjaGVkdWxlIHdvcmsgdGhlIGhlY2lfYmhfaGFuZGxlci5cbiIpOworCQlyZXRzID0gc2NoZWR1bGVfd29yaygmZGV2LT53b3JrKTsKKwkJaWYgKCFyZXRzKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImhlY2k6IHNjaGVkdWxlIHRoZSBoZWNpX2JoX2hhbmRsZXIiCisJCQkgICAgICAgIiBmYWlsZWQgZXJyb3I9JXhcbiIsIHJldHMpOworCQl9CisJfSBlbHNlIHsKKwkJaGVjaV9jc3JfZW5hYmxlX2ludGVycnVwdHMoZGV2KTsKKwl9CisKKwlpZiAoZGV2LT5yZWN2ZF9tc2cgJiYgd2FpdHF1ZXVlX2FjdGl2ZSgmZGV2LT53YWl0X3JlY3ZkX21zZykpIHsKKwkJREJHKCJyZWNlaXZlZCB3YWl0aW5nIGJ1cyBtZXNzYWdlXG4iKTsKKwkJYnVzX21lc3NhZ2VfcmVjZWl2ZWQgPSAxOworCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGJ1c19tZXNzYWdlX3JlY2VpdmVkKSB7CisJCURCRygid2FrZSB1cCBkZXYtPndhaXRfcmVjdmRfbXNnXG4iKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfcmVjdmRfbXNnKTsKKwkJYnVzX21lc3NhZ2VfcmVjZWl2ZWQgPSAwOworCX0KKwlpZiAoKGNvbXBsZXRlX2xpc3Quc3RhdHVzICE9IDApCisJICAgIHx8IGxpc3RfZW1wdHkoJmNvbXBsZXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkKKwkJcmV0dXJuOworCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2JfcG9zLCBjYl9uZXh0LAorCQkJJmNvbXBsZXRlX2xpc3QuaGVjaV9jYi5jYl9saXN0LCBjYl9saXN0KSB7CisJCWZpbGVfZXh0ID0gKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqKWNiX3Bvcy0+ZmlsZV9wcml2YXRlOworCQlsaXN0X2RlbCgmY2JfcG9zLT5jYl9saXN0KTsKKwkJaWYgKGZpbGVfZXh0ICE9IE5VTEwpIHsKKwkJCWlmIChmaWxlX2V4dCAhPSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSB7CisJCQkJREJHKCJjb21wbGV0aW5nIGNhbGwgYmFjay5cbiIpOworCQkJCV9oZWNpX2NtcGwoZmlsZV9leHQsIGNiX3Bvcyk7CisJCQkJY2JfcG9zID0gTlVMTDsKKwkJCX0gZWxzZSBpZiAoZmlsZV9leHQgPT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgeworCQkJCV9oZWNpX2NtcGxfaWFtdGhpZihkZXYsIGNiX3Bvcyk7CisJCQl9CisJCX0KKwl9Cit9CisKKworLyoqCisgKiBoZWNpX2JoX3JlYWRfaGFuZGxlciAtIGJvdHRvbSBoYWxmIHJlYWQgcm91dGluZSBhZnRlciBJU1IgdG8KKyAqIGhhbmRsZSB0aGUgcmVhZCBwcm9jZXNzaW5nLgorICoKKyAqIEBjbXBsX2xpc3Q6IEFuIGluc3RhbmNlIG9mIG91ciBsaXN0IHN0cnVjdHVyZQorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQHNsb3RzOiBzbG90cyB0byByZWFkLgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGhlY2lfYmhfcmVhZF9oYW5kbGVyKHN0cnVjdCBpb19oZWNpX2xpc3QgKmNtcGxfbGlzdCwKKwkJc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJX19zMzIgKnNsb3RzKQoreworCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyOworCWludCByZXQgPSAwOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9uZXh0ID0gTlVMTDsKKworCWlmICghZGV2LT5yZF9tc2dfaGRyKSB7CisJCWRldi0+cmRfbXNnX2hkciA9IHJlYWRfaGVjaV9yZWdpc3RlcihkZXYsIE1FX0NCX1JXKTsKKwkJREJHKCJzbG90cz0lMDh4LlxuIiwgKnNsb3RzKTsKKwkJKCpzbG90cyktLTsKKwkJREJHKCJzbG90cz0lMDh4LlxuIiwgKnNsb3RzKTsKKwl9CisJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT5yZF9tc2dfaGRyOworCURCRygiaGVjaV9oZHItPmxlbmd0aCA9JWRcbiIsIGhlY2lfaGRyLT5sZW5ndGgpOworCisJaWYgKChoZWNpX2hkci0+cmVzZXJ2ZWQpIHx8ICEoZGV2LT5yZF9tc2dfaGRyKSkgeworCQlEQkcoImNvcnJ1cHRlZCBtZXNzYWdlIGhlYWRlci5cbiIpOworCQlyZXQgPSAtRUNPUlJVUFRFRF9NRVNTQUdFX0hFQURFUjsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKChoZWNpX2hkci0+aG9zdF9hZGRyKSB8fCAoaGVjaV9oZHItPm1lX2FkZHIpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmaWxlX3BvcywgZmlsZV9uZXh0LAorCQkJCSZkZXYtPmZpbGVfbGlzdCwgbGluaykgeworCQkJREJHKCJsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUgcmVhZCBob3N0IgorCQkJCQkiIGNsaWVudCA9ICVkLCBNRSBjbGllbnQgPSAlZFxuIiwKKwkJCQkJZmlsZV9wb3MtPmhvc3RfY2xpZW50X2lkLAorCQkJCQlmaWxlX3Bvcy0+bWVfY2xpZW50X2lkKTsKKwkJCWlmICgoZmlsZV9wb3MtPmhvc3RfY2xpZW50X2lkID09IGhlY2lfaGRyLT5ob3N0X2FkZHIpCisJCQkgICAgJiYgKGZpbGVfcG9zLT5tZV9jbGllbnRfaWQgPT0gaGVjaV9oZHItPm1lX2FkZHIpKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKCZmaWxlX3Bvcy0+bGluayA9PSAmZGV2LT5maWxlX2xpc3QpIHsKKwkJCURCRygiY29ycnVwdGVkIG1lc3NhZ2UgaGVhZGVyXG4iKTsKKwkJCXJldCA9IC1FQ09SUlVQVEVEX01FU1NBR0VfSEVBREVSOworCQkJZ290byBlbmQ7CisJCX0KKwl9CisJaWYgKCgoKnNsb3RzKSAqIHNpemVvZihfX3UzMikpIDwgaGVjaV9oZHItPmxlbmd0aCkgeworCQlEQkcoIndlIGNhbid0IHJlYWQgdGhlIG1lc3NhZ2Ugc2xvdHM9JTA4eC5cbiIsICpzbG90cyk7CisJCS8qIHdlIGNhbid0IHJlYWQgdGhlIG1lc3NhZ2UgKi8KKwkJcmV0ID0gLUVSQU5HRTsKKwkJZ290byBlbmQ7CisJfQorCisJLyogZGVjaWRlIHdoZXJlIHRvIHJlYWQgdGhlIG1lc3NhZ2UgdG9vICovCisJaWYgKCFoZWNpX2hkci0+aG9zdF9hZGRyKSB7CisJCURCRygiY2FsbCBoZWNpX2JoX3JlYWRfYnVzX21lc3NhZ2UuXG4iKTsKKwkJaGVjaV9iaF9yZWFkX2J1c19tZXNzYWdlKGRldiwgaGVjaV9oZHIpOworCQlEQkcoImVuZCBoZWNpX2JoX3JlYWRfYnVzX21lc3NhZ2UuXG4iKTsKKwl9IGVsc2UgaWYgKChoZWNpX2hkci0+aG9zdF9hZGRyID09IGRldi0+aWFtdGhpZl9maWxlX2V4dC5ob3N0X2NsaWVudF9pZCkKKwkJICAgJiYgKEhFQ0lfRklMRV9DT05ORUNURUQgPT0gZGV2LT5pYW10aGlmX2ZpbGVfZXh0LnN0YXRlKQorCQkgICAmJiAoZGV2LT5pYW10aGlmX3N0YXRlID09IEhFQ0lfSUFNVEhJRl9SRUFESU5HKSkgeworCQlEQkcoImNhbGwgaGVjaV9iaF9yZWFkX2lhbXRoaWZfbWVzc2FnZS5cbiIpOworCQlEQkcoImhlY2lfaGRyLT5sZW5ndGggPSVkXG4iLCBoZWNpX2hkci0+bGVuZ3RoKTsKKwkJcmV0ID0gaGVjaV9iaF9yZWFkX3B0aGlfbWVzc2FnZShjbXBsX2xpc3QsIGRldiwgaGVjaV9oZHIpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIGVuZDsKKworCX0gZWxzZSB7CisJCURCRygiY2FsbCBoZWNpX2JoX3JlYWRfY2xpZW50X21lc3NhZ2UuXG4iKTsKKwkJcmV0ID0gaGVjaV9iaF9yZWFkX2NsaWVudF9tZXNzYWdlKGNtcGxfbGlzdCwgZGV2LCBoZWNpX2hkcik7CisJCWlmIChyZXQgIT0gMCkKKwkJCWdvdG8gZW5kOworCisJfQorCisJLyogcmVzZXQgdGhlIG51bWJlciBvZiBzbG90cyBhbmQgaGVhZGVyICovCisJKnNsb3RzID0gY291bnRfZnVsbF9yZWFkX3Nsb3RzKGRldik7CisJZGV2LT5yZF9tc2dfaGRyID0gMDsKKworCWlmICgqc2xvdHMgPT0gLUVTTE9UU19PVkVSRkxPVykgeworCQkvKiBvdmVyZmxvdyAtIHJlc2V0ICovCisJCURCRygicmVzZXRpbmcgZHVlIHRvIHNsb3RzIG92ZXJmbG93LlxuIik7CisJCS8qIHNldCB0aGUgZXZlbnQgc2luY2UgbWVzc2FnZSBoYXMgYmVlbiByZWFkICovCisJCXJldCA9IC1FUkFOR0U7CisJCWdvdG8gZW5kOworCX0KK2VuZDoKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICogaGVjaV9iaF9yZWFkX2J1c19tZXNzYWdlIC0gYm90dG9tIGhhbGYgcmVhZCByb3V0aW5lIGFmdGVyIElTUiB0bworICogaGFuZGxlIHRoZSByZWFkIGJ1cyBtZXNzYWdlIGNtZCAgcHJvY2Vzc2luZy4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaGVjaV9oZHI6IGhlYWRlciBvZiBidXMgbWVzc2FnZQorICovCitzdGF0aWMgdm9pZCBoZWNpX2JoX3JlYWRfYnVzX21lc3NhZ2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHIpCit7CisJc3RydWN0IGhlY2lfYnVzX21lc3NhZ2UgKmhlY2lfbXNnOworCXN0cnVjdCBoYm1faG9zdF92ZXJzaW9uX3Jlc3BvbnNlICp2ZXJzaW9uX3JlczsKKwlzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICpjb25uZWN0X3JlczsKKwlzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICpkaXNjb25uZWN0X3JlczsKKwlzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqZmxvd19jb250cm9sOworCXN0cnVjdCBoYm1fcHJvcHNfcmVzcG9uc2UgKnByb3BzX3JlczsKKwlzdHJ1Y3QgaGJtX2hvc3RfZW51bV9yZXNwb25zZSAqZW51bV9yZXM7CisJc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0ICpkaXNjb25uZWN0X3JlcTsKKwlzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXF1ZXN0ICpoX3N0b3BfcmVxOworCWludCBpOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCS8qICByZWFkIHRoZSBtZXNzYWdlIHRvIG91ciBidWZmZXIgKi8KKwlidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSBkZXYtPnJkX21zZ19idWY7CisJQlVHX09OKGhlY2lfaGRyLT5sZW5ndGggPj0gc2l6ZW9mKGRldi0+cmRfbXNnX2J1ZikpOworCWhlY2lfcmVhZF9zbG90cyhkZXYsIGJ1ZmZlciwgaGVjaV9oZHItPmxlbmd0aCk7CisJaGVjaV9tc2cgPSAoc3RydWN0IGhlY2lfYnVzX21lc3NhZ2UgKikgYnVmZmVyOworCisJc3dpdGNoICgqKF9fdTggKikgaGVjaV9tc2cpIHsKKwljYXNlIEhPU1RfU1RBUlRfUkVTX0NNRDoKKwkJdmVyc2lvbl9yZXMgPSAoc3RydWN0IGhibV9ob3N0X3ZlcnNpb25fcmVzcG9uc2UgKikgaGVjaV9tc2c7CisJCWlmICh2ZXJzaW9uX3Jlcy0+aG9zdF92ZXJzaW9uX3N1cHBvcnRlZCkgeworCQkJZGV2LT52ZXJzaW9uLm1ham9yX3ZlcnNpb24gPSBIQk1fTUFKT1JfVkVSU0lPTjsKKwkJCWRldi0+dmVyc2lvbi5taW5vcl92ZXJzaW9uID0gSEJNX01JTk9SX1ZFUlNJT047CisJCX0gZWxzZSB7CisJCQlkZXYtPnZlcnNpb24gPSB2ZXJzaW9uX3Jlcy0+bWVfbWF4X3ZlcnNpb247CisJCX0KKwkJZGV2LT5yZWN2ZF9tc2cgPSAxOworCQlEQkcoImhvc3Qgc3RhcnQgcmVzcG9uc2UgbWVzc2FnZSByZWNlaXZlZC5cbiIpOworCQlicmVhazsKKworCWNhc2UgQ0xJRU5UX0NPTk5FQ1RfUkVTX0NNRDoKKwkJY29ubmVjdF9yZXMgPQorCQkJKHN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKikgaGVjaV9tc2c7CisJCWhlY2lfY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UoZGV2LCBjb25uZWN0X3Jlcyk7CisJCURCRygiY2xpZW50IGNvbm5lY3QgcmVzcG9uc2UgbWVzc2FnZSByZWNlaXZlZC5cbiIpOworCQl3YWtlX3VwKCZkZXYtPndhaXRfcmVjdmRfbXNnKTsKKwkJYnJlYWs7CisKKwljYXNlIENMSUVOVF9ESVNDT05ORUNUX1JFU19DTUQ6CisJCWRpc2Nvbm5lY3RfcmVzID0KKwkJCShzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICopIGhlY2lfbXNnOworCQloZWNpX2NsaWVudF9kaXNjb25uZWN0X3Jlc3BvbnNlKGRldiwJIGRpc2Nvbm5lY3RfcmVzKTsKKwkJREJHKCJjbGllbnQgZGlzY29ubmVjdCByZXNwb25zZSBtZXNzYWdlIHJlY2VpdmVkLlxuIik7CisJCXdha2VfdXAoJmRldi0+d2FpdF9yZWN2ZF9tc2cpOworCQlicmVhazsKKworCWNhc2UgSEVDSV9GTE9XX0NPTlRST0xfQ01EOgorCQlmbG93X2NvbnRyb2wgPSAoc3RydWN0IGhibV9mbG93X2NvbnRyb2wgKikgaGVjaV9tc2c7CisJCWhlY2lfY2xpZW50X2Zsb3dfY29udHJvbF9yZXNwb25zZShkZXYsIGZsb3dfY29udHJvbCk7CisJCURCRygiY2xpZW50IGZsb3cgY29udHJvbCByZXNwb25zZSBtZXNzYWdlIHJlY2VpdmVkLlxuIik7CisJCWJyZWFrOworCisJY2FzZSBIT1NUX0NMSUVOVF9QUk9QRVJURUlTX1JFU19DTUQ6CisJCXByb3BzX3JlcyA9IChzdHJ1Y3QgaGJtX3Byb3BzX3Jlc3BvbnNlICopIGhlY2lfbXNnOworCQlpZiAocHJvcHNfcmVzLT5zdGF0dXMgIT0gMCkgeworCQkJQlVHKCk7CisJCQlicmVhazsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faGVjaV9tZV9jbGllbnRzOyBpKyspIHsKKwkJCWlmIChkZXYtPm1lX2NsaWVudHNbaV0uY2xpZW50X2lkID09CisJCQkJCXByb3BzX3Jlcy0+YWRkcmVzcykgeworCQkJCWRldi0+bWVfY2xpZW50c1tpXS5wcm9wcyA9CisJCQkJCXByb3BzX3Jlcy0+Y2xpZW50X3Byb3BlcnRpZXM7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJfQorCQlkZXYtPnJlY3ZkX21zZyA9IDE7CisJCWJyZWFrOworCisJY2FzZSBIT1NUX0VOVU1fUkVTX0NNRDoKKwkJZW51bV9yZXMgPSAoc3RydWN0IGhibV9ob3N0X2VudW1fcmVzcG9uc2UgKikgaGVjaV9tc2c7CisJCW1lbWNweShkZXYtPmhlY2lfbWVfY2xpZW50cywgZW51bV9yZXMtPnZhbGlkX2FkZHJlc3NlcywgMzIpOworCQlkZXYtPnJlY3ZkX21zZyA9IDE7CisJCWJyZWFrOworCisJY2FzZSBIT1NUX1NUT1BfUkVTX0NNRDoKKwkJZGV2LT5oZWNpX3N0YXRlID0gSEVDSV9ESVNBQkxFRDsKKwkJREJHKCJyZXNldGluZyBiZWNhdXNlIG9mIEZXIHN0b3AgcmVzcG9uc2UuXG4iKTsKKwkJaGVjaV9yZXNldChkZXYsIDEpOworCQlicmVhazsKKworCWNhc2UgQ0xJRU5UX0RJU0NPTk5FQ1RfUkVRX0NNRDoKKwkJLyogc2VhcmNoIGZvciBjbGllbnQgKi8KKwkJZGlzY29ubmVjdF9yZXEgPQorCQkJKHN0cnVjdCBoYm1fY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCAqKSBoZWNpX21zZzsKKwkJaGVjaV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0KGRldiwgZGlzY29ubmVjdF9yZXEpOworCQlicmVhazsKKworCWNhc2UgTUVfU1RPUF9SRVFfQ01EOgorCQkvKiBwcmVwYXJlIHN0b3AgcmVxdWVzdCAqLworCQloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPmV4dF9tc2dfYnVmWzBdOworCQloZWNpX2hkci0+aG9zdF9hZGRyID0gMDsKKwkJaGVjaV9oZHItPm1lX2FkZHIgPSAwOworCQloZWNpX2hkci0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBoYm1faG9zdF9zdG9wX3JlcXVlc3QpOworCQloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwkJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKwkJaF9zdG9wX3JlcSA9CisJCQkoc3RydWN0IGhibV9ob3N0X3N0b3BfcmVxdWVzdCAqKSAmZGV2LT5leHRfbXNnX2J1ZlsxXTsKKwkJbWVtc2V0KGhfc3RvcF9yZXEsIDAsIHNpemVvZihzdHJ1Y3QgaGJtX2hvc3Rfc3RvcF9yZXF1ZXN0KSk7CisJCWhfc3RvcF9yZXEtPmNtZC5jbWQgPSBIT1NUX1NUT1BfUkVRX0NNRDsKKwkJaF9zdG9wX3JlcS0+cmVhc29uID0gRFJJVkVSX1NUT1BfUkVRVUVTVDsKKwkJaF9zdG9wX3JlcS0+cmVzZXJ2ZWRbMF0gPSAwOworCQloX3N0b3BfcmVxLT5yZXNlcnZlZFsxXSA9IDA7CisJCWRldi0+ZXh0cmFfd3JpdGVfaW5kZXggPSAyOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVhazsKKworCX0KK30KKworLyoqCisgKiBoZWNpX2JoX3JlYWRfcHRoaV9tZXNzYWdlIC0gYm90dG9tIGhhbGYgcmVhZCByb3V0aW5lIGFmdGVyIElTUiB0bworICogaGFuZGxlIHRoZSByZWFkIHB0aGkgbWVzc2FnZSBkYXRhIHByb2Nlc3NpbmcuCisgKgorICogQGNvbXBsZXRlX2xpc3Q6IEFuIGluc3RhbmNlIG9mIG91ciBsaXN0IHN0cnVjdHVyZQorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGhlY2lfaGRyOiBoZWFkZXIgb2YgcHRoaSBtZXNzYWdlCisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaGVjaV9iaF9yZWFkX3B0aGlfbWVzc2FnZShzdHJ1Y3QgaW9faGVjaV9saXN0ICpjb21wbGV0ZV9saXN0LAorCQlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcikKK3sKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0OworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2I7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJQlVHX09OKGhlY2lfaGRyLT5tZV9hZGRyICE9IGRldi0+aWFtdGhpZl9maWxlX2V4dC5tZV9jbGllbnRfaWQpOworCUJVR19PTihkZXYtPmlhbXRoaWZfc3RhdGUgIT0gSEVDSV9JQU1USElGX1JFQURJTkcpOworCisJYnVmZmVyID0gKHVuc2lnbmVkIGNoYXIgKikgKGRldi0+aWFtdGhpZl9tc2dfYnVmICsKKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4KTsKKwlCVUdfT04oc2l6ZW9mKGRldi0+aWFtdGhpZl9tc2dfYnVmKSA8CisJCQkoZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXggKyBoZWNpX2hkci0+bGVuZ3RoKSk7CisKKwloZWNpX3JlYWRfc2xvdHMoZGV2LCBidWZmZXIsIGhlY2lfaGRyLT5sZW5ndGgpOworCisJZGV2LT5pYW10aGlmX21zZ19idWZfaW5kZXggKz0gaGVjaV9oZHItPmxlbmd0aDsKKworCWlmICghKGhlY2lfaGRyLT5tc2dfY29tcGxldGUpKQorCQlyZXR1cm4gMDsKKworCURCRygicHRoaV9tZXNzYWdlX2J1ZmZlcl9pbmRleD0lZFxuIiwgaGVjaV9oZHItPmxlbmd0aCk7CisJREJHKCJjb21wbGV0ZWQgcHRoaSByZWFkLlxuICIpOworCWlmICghZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IpCisJCXJldHVybiAtRU5PREVWOworCisJcHJpdl9jYiA9IGRldi0+aWFtdGhpZl9jdXJyZW50X2NiOworCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gTlVMTDsKKworCWZpbGVfZXh0ID0gKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqKXByaXZfY2ItPmZpbGVfcHJpdmF0ZTsKKwlpZiAoIWZpbGVfZXh0KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldi0+aWFtdGhpZl9zdGFsbF90aW1lciA9IDA7CisJcHJpdl9jYi0+aW5mb3JtYXRpb24gPQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleDsKKwlwcml2X2NiLT5yZWFkX3RpbWUgPSBnZXRfc2Vjb25kcygpOworCWlmICgoZGV2LT5pYW10aGlmX2lvY3RsKSAmJiAoZmlsZV9leHQgPT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkpIHsKKwkJLyogZm91bmQgdGhlIGlhbXRoaWYgY2IgKi8KKwkJREJHKCJjb21wbGV0ZSB0aGUgcHRoaSByZWFkIGNiLlxuICIpOworCQlpZiAoJmRldi0+aWFtdGhpZl9maWxlX2V4dCkgeworCQkJREJHKCJhZGQgdGhlIHB0aGkgcmVhZCBjYiB0byBjb21wbGV0ZS5cbiAiKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2ItPmNiX2xpc3QsCisJCQkJICAgICAgJmNvbXBsZXRlX2xpc3QtPmhlY2lfY2IuY2JfbGlzdCk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2hlY2lfYmhfc3RhdGVfb2sgLSBjaGVjayBpZiBoZWNpIGhlYWRlciBtYXRjaGVzIGZpbGUgcHJpdmF0ZSBkYXRhCisgKgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKiBAaGVjaV9oZHI6IGhlYWRlciBvZiBoZWNpIGNsaWVudCBtZXNzYWdlCisgKgorICogcmV0dXJucyAgIT0wIGlmIG1hdGNoZXMsIDAgaWYgbm8gbWF0Y2guCisgKi8KK3N0YXRpYyBpbnQgX2hlY2lfYmhfc3RhdGVfb2soc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCwKKwkJCQkJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHIpCit7CisJcmV0dXJuICgoZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkID09IGhlY2lfaGRyLT5ob3N0X2FkZHIpCisJCSYmIChmaWxlX2V4dC0+bWVfY2xpZW50X2lkID09IGhlY2lfaGRyLT5tZV9hZGRyKQorCQkmJiAoZmlsZV9leHQtPnN0YXRlID09IEhFQ0lfRklMRV9DT05ORUNURUQpCisJCSYmIChIRUNJX1JFQURfQ09NUExFVEUgIT0gZmlsZV9leHQtPnJlYWRpbmdfc3RhdGUpKTsKK30KKworLyoqCisgKiBoZWNpX2JoX3JlYWRfY2xpZW50X21lc3NhZ2UgLSBib3R0b20gaGFsZiByZWFkIHJvdXRpbmUgYWZ0ZXIgSVNSIHRvCisgKiBoYW5kbGUgdGhlIHJlYWQgaGVjaSBjbGllbnQgbWVzc2FnZSBkYXRhICBwcm9jZXNzaW5nLgorICoKKyAqIEBjb21wbGV0ZV9saXN0OiBBbiBpbnN0YW5jZSBvZiBvdXIgbGlzdCBzdHJ1Y3R1cmUKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBoZWNpX2hkcjogaGVhZGVyIG9mIGhlY2kgY2xpZW50IG1lc3NhZ2UKKyAqCisgKiByZXR1cm5zICAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaGVjaV9iaF9yZWFkX2NsaWVudF9tZXNzYWdlKHN0cnVjdCBpb19oZWNpX2xpc3QgKmNvbXBsZXRlX2xpc3QsCisJCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyKQoreworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQ7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MgPSBOVUxMLCAqcHJpdl9jYl9uZXh0ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBOVUxMOworCisJREJHKCJzdGFydCBjbGllbnQgbXNnXG4iKTsKKwlpZiAoISgoZGV2LT5yZWFkX2xpc3Quc3RhdHVzID09IDApICYmCisJICAgICAgIWxpc3RfZW1wdHkoJmRldi0+cmVhZF9saXN0LmhlY2lfY2IuY2JfbGlzdCkpKQorCQlnb3RvIHF1aXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdl9jYl9wb3MsIHByaXZfY2JfbmV4dCwKKwkJCSZkZXYtPnJlYWRfbGlzdC5oZWNpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJZmlsZV9leHQgPSAoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICopCisJCQkJcHJpdl9jYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKwkJaWYgKChmaWxlX2V4dCAhPSBOVUxMKSAmJgorCQkgICAgKF9oZWNpX2JoX3N0YXRlX29rKGZpbGVfZXh0LCBoZWNpX2hkcikpKSB7CisJCQlzcGluX2xvY2soJmZpbGVfZXh0LT5yZWFkX2lvX2xvY2spOworCQkJZmlsZV9leHQtPnJlYWRpbmdfc3RhdGUgPSBIRUNJX1JFQURJTkc7CisJCQlidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKQorCQkJCShwcml2X2NiX3Bvcy0+cmVzcG9uc2VfYnVmZmVyLmRhdGEgKworCQkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbik7CisJCQlCVUdfT04ocHJpdl9jYl9wb3MtPnJlc3BvbnNlX2J1ZmZlci5zaXplIDwKKwkJCQkJaGVjaV9oZHItPmxlbmd0aCArCisJCQkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbik7CisKKwkJCWlmIChwcml2X2NiX3Bvcy0+cmVzcG9uc2VfYnVmZmVyLnNpemUgPAorCQkJCQloZWNpX2hkci0+bGVuZ3RoICsKKwkJCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uKSB7CisJCQkJREJHKCJtZXNzYWdlIG92ZXJmbG93LlxuIik7CisJCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCQlzcGluX3VubG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCQlpZiAoYnVmZmVyKSB7CisJCQkJaGVjaV9yZWFkX3Nsb3RzKGRldiwgYnVmZmVyLAorCQkJCQkJaGVjaV9oZHItPmxlbmd0aCk7CisJCQl9CisJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24gKz0gaGVjaV9oZHItPmxlbmd0aDsKKwkJCWlmIChoZWNpX2hkci0+bXNnX2NvbXBsZXRlKSB7CisJCQkJZmlsZV9leHQtPnN0YXR1cyA9IDA7CisJCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCQlzcGluX3VubG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJCQkJREJHKCJjb21wbGV0ZWQgcmVhZCBob3N0IGNsaWVudCA9ICVkLCIKKwkJCQkJIk1FIGNsaWVudCA9ICVkLCAiCisJCQkJCSJkYXRhIGxlbmd0aCA9ICVsdVxuIiwKKwkJCQkJZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkLAorCQkJCQlmaWxlX2V4dC0+bWVfY2xpZW50X2lkLAorCQkJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24pOworCisJCQkJKihwcml2X2NiX3Bvcy0+cmVzcG9uc2VfYnVmZmVyLmRhdGEgKworCQkJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24pID0gJ1wwJzsKKwkJCQlEQkcoInByaXZfY2JfcG9zLT5yZXNfYnVmZmVyIC0gJXNcbiIsCisJCQkJCXByaXZfY2JfcG9zLT5yZXNwb25zZV9idWZmZXIuZGF0YSk7CisJCQkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QsCisJCQkJCSZjb21wbGV0ZV9saXN0LT5oZWNpX2NiLmNiX2xpc3QpOworCQkJfSBlbHNlIHsKKwkJCQlzcGluX3VubG9jaygmZmlsZV9leHQtPnJlYWRfaW9fbG9jayk7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisKKwl9CisKK3F1aXQ6CisJREJHKCJtZXNzYWdlIHJlYWRcbiIpOworCWlmICghYnVmZmVyKSB7CisJCWhlY2lfcmVhZF9zbG90cyhkZXYsICh1bnNpZ25lZCBjaGFyICopIGRldi0+cmRfbXNnX2J1ZiwKKwkJCQkJCWhlY2lfaGRyLT5sZW5ndGgpOworCQlEQkcoImRpc2NhcmRpbmcgbWVzc2FnZSwgaGVhZGVyPSUwOHguXG4iLAorCQkJCSooX191MzIgKikgZGV2LT5yZF9tc2dfYnVmKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfaGVjaV9iaF9pYW10aGlmX3JlYWQgLSBwcmVwYXJlIHRvIHJlYWQgaWFtdGhpZiBkYXRhLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIuCisgKiBAc2xvdHM6IGZyZWUgc2xvdHMuCisgKgorICogcmV0dXJucyAgMCwgT0s7IG90aGVyd2lzZSwgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgX2hlY2lfYmhfaWFtdGhpZl9yZWFkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCV9fczMyICpzbG90cykKK3sKKworCWlmICgoKCpzbG90cykgKiBzaXplb2YoX191MzIpKSA+PSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpCisJCQkrIHNpemVvZihzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCkpKSB7CisJCSpzbG90cyAtPSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCQlzaXplb2Yoc3RydWN0IGhibV9mbG93X2NvbnRyb2wpICsgMykgLyA0OworCQlpZiAoIWhlY2lfc2VuZF9mbG93X2NvbnRyb2woZGV2LCAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSkgeworCQkJREJHKCJpYW10aGlmIGZsb3cgY29udHJvbCBmYWlsZWRcbiIpOworCQl9IGVsc2UgeworCQkJREJHKCJpYW10aGlmIGZsb3cgY29udHJvbCBzdWNjZXNzXG4iKTsKKwkJCWRldi0+aWFtdGhpZl9zdGF0ZSA9IEhFQ0lfSUFNVEhJRl9SRUFESU5HOworCQkJZGV2LT5pYW10aGlmX2Zsb3dfY29udHJvbF9wZW5kaW5nID0gMDsKKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4ID0gMDsKKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX3NpemUgPSAwOworCQkJZGV2LT5pYW10aGlmX3N0YWxsX3RpbWVyID0gSUFNVEhJRl9TVEFMTF9USU1FUjsKKwkJCWRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgPSBob3N0X2J1ZmZlcl9pc19lbXB0eShkZXYpOworCQl9CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXJldHVybiAtRUNPTVBMRVRFX01FU1NBR0U7CisJfQorfQorCisvKioKKyAqIF9oZWNpX2JoX2Nsb3NlIC0gcHJvY2VzcyBjbG9zZSByZWxhdGVkIG9wZXJhdGlvbi4KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyLgorICogQHNsb3RzOiBmcmVlIHNsb3RzLgorICogQHByaXZfY2JfcG9zOiBjYWxsYmFjayBibG9jay4KKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdC4KKyAqIEBjbXBsX2xpc3Q6IGNvbXBsZXRlIGxpc3QuCisgKgorICogcmV0dXJucyAgMCwgT0s7IG90aGVyd2lzZSwgZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgX2hlY2lfYmhfY2xvc2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwJX19zMzIgKnNsb3RzLAorCQkJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MsCisJCQlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0LAorCQkJc3RydWN0IGlvX2hlY2lfbGlzdCAqY21wbF9saXN0KQoreworCWlmICgoKnNsb3RzICogc2l6ZW9mKF9fdTMyKSkgPj0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQlzaXplb2Yoc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0KSkpIHsKKwkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJc2l6ZW9mKHN0cnVjdCBoYm1fY2xpZW50X2Rpc2Nvbm5lY3RfcmVxdWVzdCkgKyAzKSAvIDQ7CisKKwkJaWYgKCFoZWNpX2Rpc2Nvbm5lY3QoZGV2LCBmaWxlX2V4dCkpIHsKKwkJCWZpbGVfZXh0LT5zdGF0dXMgPSAwOworCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uID0gMDsKKwkJCWxpc3RfbW92ZV90YWlsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkJJmNtcGxfbGlzdC0+aGVjaV9jYi5jYl9saXN0KTsKKwkJCXJldHVybiAtRUNPTVBMRVRFX01FU1NBR0U7CisJCX0gZWxzZSB7CisJCQlmaWxlX2V4dC0+c3RhdGUgPSBIRUNJX0ZJTEVfRElTQ09OTkVDVElORzsKKwkJCWZpbGVfZXh0LT5zdGF0dXMgPSAwOworCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uID0gMDsKKwkJCWxpc3RfbW92ZV90YWlsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkJJmRldi0+Y3RybF9yZF9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJCQlmaWxlX2V4dC0+dGltZXJfY291bnQgPSBIRUNJX0NPTk5FQ1RfVElNRU9VVDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHJldHVybiB0aGUgY2FuY2VsIHJvdXRpbmUgKi8KKwkJcmV0dXJuIC1FQ09SUlVQVEVEX01FU1NBR0VfSEVBREVSOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIF9oZWNpX2hiX2Nsb3NlIC0gcHJvY2VzcyByZWFkIHJlbGF0ZWQgb3BlcmF0aW9uLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIuCisgKiBAc2xvdHM6IGZyZWUgc2xvdHMuCisgKiBAcHJpdl9jYl9wb3M6IGNhbGxiYWNrIGJsb2NrLgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0LgorICogQGNtcGxfbGlzdDogY29tcGxldGUgbGlzdC4KKyAqCisgKiByZXR1cm5zIDAsIE9LOyBvdGhlcndpc2UsIGVycm9yLgorICovCitzdGF0aWMgaW50IF9oZWNpX2JoX3JlYWQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwJX19zMzIgKnNsb3RzLAorCQkJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MsCisJCQlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0LAorCQkJc3RydWN0IGlvX2hlY2lfbGlzdCAqY21wbF9saXN0KQoreworCWlmICgoKnNsb3RzICogc2l6ZW9mKF9fdTMyKSkgPj0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQlzaXplb2Yoc3RydWN0IGhibV9mbG93X2NvbnRyb2wpKSkgeworCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQlzaXplb2Yoc3RydWN0IGhibV9mbG93X2NvbnRyb2wpICsgMykgLyA0OworCQlpZiAoIWhlY2lfc2VuZF9mbG93X2NvbnRyb2woZGV2LCBmaWxlX2V4dCkpIHsKKwkJCWZpbGVfZXh0LT5zdGF0dXMgPSAtRU5PREVWOworCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uID0gMDsKKwkJCWxpc3RfbW92ZV90YWlsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkJJmNtcGxfbGlzdC0+aGVjaV9jYi5jYl9saXN0KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9IGVsc2UgeworCQkJbGlzdF9tb3ZlX3RhaWwoJnByaXZfY2JfcG9zLT5jYl9saXN0LAorCQkJCQkmZGV2LT5yZWFkX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHJldHVybiB0aGUgY2FuY2VsIHJvdXRpbmUgKi8KKwkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJcmV0dXJuIC1FQ09SUlVQVEVEX01FU1NBR0VfSEVBREVSOworCX0KKworCXJldHVybiAwOworfQorCisKKy8qKgorICogX2hlY2lfYmhfaW9jdGwgLSBwcm9jZXNzIGlvY3RsIHJlbGF0ZWQgb3BlcmF0aW9uLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIuCisgKiBAc2xvdHM6IGZyZWUgc2xvdHMuCisgKiBAcHJpdl9jYl9wb3M6IGNhbGxiYWNrIGJsb2NrLgorICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0LgorICogQGNtcGxfbGlzdDogY29tcGxldGUgbGlzdC4KKyAqCisgKiByZXR1cm5zICAwLCBPSzsgb3RoZXJ3aXNlLCBlcnJvci4KKyAqLworc3RhdGljIGludCBfaGVjaV9iaF9pb2N0bChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAlfX3MzMiAqc2xvdHMsCisJCQlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcywKKwkJCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQsCisJCQlzdHJ1Y3QgaW9faGVjaV9saXN0ICpjbXBsX2xpc3QpCit7CisJaWYgKCgqc2xvdHMgKiBzaXplb2YoX191MzIpKSA+PSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCXNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3JlcXVlc3QpKSkgeworCQlmaWxlX2V4dC0+c3RhdGUgPSBIRUNJX0ZJTEVfQ09OTkVDVElORzsKKwkJKnNsb3RzIC09IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJc2l6ZW9mKHN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVxdWVzdCkgKyAzKSAvIDQ7CisJCWlmICghaGVjaV9jb25uZWN0KGRldiwgZmlsZV9leHQpKSB7CisJCQlmaWxlX2V4dC0+c3RhdHVzID0gLUVOT0RFVjsKKwkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbiA9IDA7CisJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQlsaXN0X21vdmVfdGFpbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QsCisJCQkJJmRldi0+Y3RybF9yZF9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJCQlmaWxlX2V4dC0+dGltZXJfY291bnQgPSBIRUNJX0NPTk5FQ1RfVElNRU9VVDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHJldHVybiB0aGUgY2FuY2VsIHJvdXRpbmUgKi8KKwkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJcmV0dXJuIC1FQ09SUlVQVEVEX01FU1NBR0VfSEVBREVSOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIF9oZWNpX2JoX2NtcGwgLSBwcm9jZXNzIGNvbXBsZXRlZCBhbmQgbm8taWFtdGhpZiBvcGVyYXRpb24uCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlci4KKyAqIEBzbG90czogZnJlZSBzbG90cy4KKyAqIEBwcml2X2NiX3BvczogY2FsbGJhY2sgYmxvY2suCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QuCisgKiBAY21wbF9saXN0OiBjb21wbGV0ZSBsaXN0LgorICoKKyAqIHJldHVybnMgIDAsIE9LOyBvdGhlcndpc2UsIGVycm9yLgorICovCitzdGF0aWMgaW50IF9oZWNpX2JoX2NtcGwoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwJX19zMzIgKnNsb3RzLAorCQkJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MsCisJCQlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0LAorCQkJc3RydWN0IGlvX2hlY2lfbGlzdCAqY21wbF9saXN0KQoreworCXN0cnVjdCBoZWNpX21zZ19oZHIgKmhlY2lfaGRyOworCisJaWYgKCgqc2xvdHMgKiBzaXplb2YoX191MzIpKSA+PSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCShwcml2X2NiX3Bvcy0+cmVxdWVzdF9idWZmZXIuc2l6ZSAtCisJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24pKSkgeworCQloZWNpX2hkciA9IChzdHJ1Y3QgaGVjaV9tc2dfaGRyICopICZkZXYtPndyX21zZ19idWZbMF07CisJCWhlY2lfaGRyLT5ob3N0X2FkZHIgPSBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQ7CisJCWhlY2lfaGRyLT5tZV9hZGRyID0gZmlsZV9leHQtPm1lX2NsaWVudF9pZDsKKwkJaGVjaV9oZHItPmxlbmd0aCA9ICgocHJpdl9jYl9wb3MtPnJlcXVlc3RfYnVmZmVyLnNpemUpIC0KKwkJCQkocHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uKSk7CisJCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCQloZWNpX2hkci0+cmVzZXJ2ZWQgPSAwOworCQlEQkcoInByaXZfY2JfcG9zLT5yZXF1ZXN0X2J1ZmZlci5zaXplID0lZCIKKwkJCSJoZWNpX2hkci0+bXNnX2NvbXBsZXRlPSAlZFxuIiwKKwkJCQlwcml2X2NiX3Bvcy0+cmVxdWVzdF9idWZmZXIuc2l6ZSwKKwkJCQloZWNpX2hkci0+bXNnX2NvbXBsZXRlKTsKKwkJREJHKCJwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24gID0lbHVcbiIsCisJCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uKTsKKwkJREJHKCJoZWNpX2hkci0+bGVuZ3RoICA9JWRcbiIsCisJCQkJaGVjaV9oZHItPmxlbmd0aCk7CisJCSpzbG90cyAtPSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCQloZWNpX2hkci0+bGVuZ3RoICsgMykgLyA0OworCQlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsIGhlY2lfaGRyLAorCQkJCSh1bnNpZ25lZCBjaGFyICopCisJCQkJKHByaXZfY2JfcG9zLT5yZXF1ZXN0X2J1ZmZlci5kYXRhICsKKwkJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24pLAorCQkJCWhlY2lfaGRyLT5sZW5ndGgpKSB7CisJCQlmaWxlX2V4dC0+c3RhdHVzID0gLUVOT0RFVjsKKwkJCWxpc3RfbW92ZV90YWlsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkmY21wbF9saXN0LT5oZWNpX2NiLmNiX2xpc3QpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQlmbG93X2N0cmxfcmVkdWNlKGRldiwgZmlsZV9leHQpOworCQkJZmlsZV9leHQtPnN0YXR1cyA9IDA7CisJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24gKz0gaGVjaV9oZHItPmxlbmd0aDsKKwkJCWxpc3RfbW92ZV90YWlsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkmZGV2LT53cml0ZV93YWl0aW5nX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwkJfQorCX0gZWxzZSBpZiAoKnNsb3RzID09ICgoZGV2LT5ob3N0X2h3X3N0YXRlICYgSF9DQkQpID4+IDI0KSkgeworCQkvKiBidWZmZXIgaXMgc3RpbGwgZW1wdHkgKi8KKwkJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCQloZWNpX2hkci0+aG9zdF9hZGRyID0gZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkOworCQloZWNpX2hkci0+bWVfYWRkciA9IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQ7CisJCWhlY2lfaGRyLT5sZW5ndGggPQorCQkJKCpzbG90cyAqIHNpemVvZihfX3UzMikpIC0gc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpOworCQloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMDsKKwkJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKworCQkoKnNsb3RzKSAtPSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCQloZWNpX2hkci0+bGVuZ3RoICsgMykgLyA0OworCQlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsIGhlY2lfaGRyLAorCQkJCQkodW5zaWduZWQgY2hhciAqKQorCQkJCQkocHJpdl9jYl9wb3MtPnJlcXVlc3RfYnVmZmVyLmRhdGEgKworCQkJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24pLAorCQkJCQloZWNpX2hkci0+bGVuZ3RoKSkgeworCQkJZmlsZV9leHQtPnN0YXR1cyA9IC1FTk9ERVY7CisJCQlsaXN0X21vdmVfdGFpbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QsCisJCQkJJmNtcGxfbGlzdC0+aGVjaV9jYi5jYl9saXN0KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9IGVsc2UgeworCQkJcHJpdl9jYl9wb3MtPmluZm9ybWF0aW9uICs9IGhlY2lfaGRyLT5sZW5ndGg7CisJCQlEQkcoInByaXZfY2JfcG9zLT5yZXF1ZXN0X2J1ZmZlci5zaXplID0lZCIKKwkJCQkJIiBoZWNpX2hkci0+bXNnX2NvbXBsZXRlPSAlZFxuIiwKKwkJCQkJcHJpdl9jYl9wb3MtPnJlcXVlc3RfYnVmZmVyLnNpemUsCisJCQkJCWhlY2lfaGRyLT5tc2dfY29tcGxldGUpOworCQkJREJHKCJwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24gID0lbHVcbiIsCisJCQkJCXByaXZfY2JfcG9zLT5pbmZvcm1hdGlvbik7CisJCQlEQkcoImhlY2lfaGRyLT5sZW5ndGggID0lZFxuIiwgaGVjaV9oZHItPmxlbmd0aCk7CisJCX0KKwkJcmV0dXJuIC1FQ09NUExFVEVfTUVTU0FHRTsKKwl9IGVsc2UgeworCQlyZXR1cm4gLUVDT1JSVVBURURfTUVTU0FHRV9IRUFERVI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX2hlY2lfYmhfY21wbF9pYW10aGlmIC0gcHJvY2VzcyBjb21wbGV0ZWQgaWFtdGhpZiBvcGVyYXRpb24uCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlci4KKyAqIEBzbG90czogZnJlZSBzbG90cy4KKyAqIEBwcml2X2NiX3BvczogY2FsbGJhY2sgYmxvY2suCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QuCisgKiBAY21wbF9saXN0OiBjb21wbGV0ZSBsaXN0LgorICoKKyAqIHJldHVybnMgIDAsIE9LOyBvdGhlcndpc2UsIGVycm9yLgorICovCitzdGF0aWMgaW50IF9oZWNpX2JoX2NtcGxfaWFtdGhpZihzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LCBfX3MzMiAqc2xvdHMsCisJCQlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcywKKwkJCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQsCisJCQlzdHJ1Y3QgaW9faGVjaV9saXN0ICpjbXBsX2xpc3QpCit7CisJc3RydWN0IGhlY2lfbXNnX2hkciAqaGVjaV9oZHI7CisKKwlpZiAoKCpzbG90cyAqIHNpemVvZihfX3UzMikpID49IChzaXplb2Yoc3RydWN0IGhlY2lfbXNnX2hkcikgKworCQkJZGV2LT5pYW10aGlmX21zZ19idWZfc2l6ZSAtCisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCkpIHsKKwkJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCQloZWNpX2hkci0+aG9zdF9hZGRyID0gZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkOworCQloZWNpX2hkci0+bWVfYWRkciA9IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQ7CisJCWhlY2lfaGRyLT5sZW5ndGggPSBkZXYtPmlhbXRoaWZfbXNnX2J1Zl9zaXplIC0KKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4OworCQloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMTsKKwkJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKworCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQkJaGVjaV9oZHItPmxlbmd0aCArIDMpIC8gNDsKKworCQlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsIGhlY2lfaGRyLAorCQkJCQkoZGV2LT5pYW10aGlmX21zZ19idWYgKworCQkJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCksCisJCQkJCWhlY2lfaGRyLT5sZW5ndGgpKSB7CisJCQlkZXYtPmlhbXRoaWZfc3RhdGUgPSBIRUNJX0lBTVRISUZfSURMRTsKKwkJCWZpbGVfZXh0LT5zdGF0dXMgPSAtRU5PREVWOworCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9IGVsc2UgeworCQkJZmxvd19jdHJsX3JlZHVjZShkZXYsIGZpbGVfZXh0KTsKKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4ICs9IGhlY2lfaGRyLT5sZW5ndGg7CisJCQlwcml2X2NiX3Bvcy0+aW5mb3JtYXRpb24gPSBkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleDsKKwkJCWZpbGVfZXh0LT5zdGF0dXMgPSAwOworCQkJZGV2LT5pYW10aGlmX3N0YXRlID0gSEVDSV9JQU1USElGX0ZMT1dfQ09OVFJPTDsKKwkJCWRldi0+aWFtdGhpZl9mbG93X2NvbnRyb2xfcGVuZGluZyA9IDE7CisJCQkvKiBzYXZlIGlhbXRoaWYgY2Igc2VudCB0byBwdGhpIGNsaWVudCAqLworCQkJZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IgPSBwcml2X2NiX3BvczsKKwkJCWxpc3RfbW92ZV90YWlsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkmZGV2LT53cml0ZV93YWl0aW5nX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKworCQl9CisJfSBlbHNlIGlmICgqc2xvdHMgPT0gKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCRCkgPj4gMjQpKSB7CisJCQkvKiBidWZmZXIgaXMgc3RpbGwgZW1wdHkgKi8KKwkJaGVjaV9oZHIgPSAoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT53cl9tc2dfYnVmWzBdOworCQloZWNpX2hkci0+aG9zdF9hZGRyID0gZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkOworCQloZWNpX2hkci0+bWVfYWRkciA9IGZpbGVfZXh0LT5tZV9jbGllbnRfaWQ7CisJCWhlY2lfaGRyLT5sZW5ndGggPQorCQkJKCpzbG90cyAqIHNpemVvZihfX3UzMikpIC0gc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpOworCQloZWNpX2hkci0+bXNnX2NvbXBsZXRlID0gMDsKKwkJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKworCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQkJaGVjaV9oZHItPmxlbmd0aCArIDMpIC8gNDsKKworCQlpZiAoIWhlY2lfd3JpdGVfbWVzc2FnZShkZXYsIGhlY2lfaGRyLAorCQkJCQkoZGV2LT5pYW10aGlmX21zZ19idWYgKworCQkJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCksCisJCQkJCWhlY2lfaGRyLT5sZW5ndGgpKSB7CisJCQlmaWxlX2V4dC0+c3RhdHVzID0gLUVOT0RFVjsKKwkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCX0gZWxzZSB7CisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCArPSBoZWNpX2hkci0+bGVuZ3RoOworCQl9CisJCXJldHVybiAtRUNPTVBMRVRFX01FU1NBR0U7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FQ09SUlVQVEVEX01FU1NBR0VfSEVBREVSOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGhlY2lfYmhfd3JpdGVfaGFuZGxlciAtIGJvdHRvbSBoYWxmIHdyaXRlIHJvdXRpbmUgYWZ0ZXIKKyAqIElTUiB0byBoYW5kbGUgdGhlIHdyaXRlIHByb2Nlc3NpbmcuCisgKgorICogQGNtcGxfbGlzdDogQW4gaW5zdGFuY2Ugb2Ygb3VyIGxpc3Qgc3RydWN0dXJlCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAc2xvdHM6IHNsb3RzIHRvIHdyaXRlLgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGhlY2lfYmhfd3JpdGVfaGFuZGxlcihzdHJ1Y3QgaW9faGVjaV9saXN0ICpjbXBsX2xpc3QsCisJCXN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCV9fczMyICpzbG90cykKK3sKKworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQ7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MgPSBOVUxMLCAqcHJpdl9jYl9uZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgaW9faGVjaV9saXN0ICpsaXN0OworCWludCByZXQ7CisKKwlpZiAoIWhvc3RfYnVmZmVyX2lzX2VtcHR5KGRldikpIHsKKwkJREJHKCJob3N0IGJ1ZmZlciBpcyBub3QgZW1wdHkuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWRldi0+d3JpdGVfaGFuZyA9IC0xOworCSpzbG90cyA9IGNvdW50X2VtcHR5X3dyaXRlX3Nsb3RzKGRldik7CisJLyogY29tcGxldGUgYWxsIHdhaXRpbmcgZm9yIHdyaXRlIENCICovCisJREJHKCJjb21wbGV0ZSBhbGwgd2FpdGluZyBmb3Igd3JpdGUgY2IuXG4iKTsKKworCWxpc3QgPSAmZGV2LT53cml0ZV93YWl0aW5nX2xpc3Q7CisJaWYgKChsaXN0LT5zdGF0dXMgPT0gMCkKKwkgICAgJiYgIWxpc3RfZW1wdHkoJmxpc3QtPmhlY2lfY2IuY2JfbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXZfY2JfcG9zLCBwcml2X2NiX25leHQsCisJCQkJJmxpc3QtPmhlY2lfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQkJZmlsZV9leHQgPSAoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICopCisJCQkJCXByaXZfY2JfcG9zLT5maWxlX3ByaXZhdGU7CisJCQlpZiAoZmlsZV9leHQgIT0gTlVMTCkgeworCQkJCWZpbGVfZXh0LT5zdGF0dXMgPSAwOworCQkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQkJaWYgKChIRUNJX1dSSVRJTkcgPT0gZmlsZV9leHQtPndyaXRpbmdfc3RhdGUpICYmCisJCQkJCShwcml2X2NiX3Bvcy0+bWFqb3JfZmlsZV9vcGVyYXRpb25zID09CisJCQkJCQlIRUNJX1dSSVRJTkcpICYmCisJCQkJCShmaWxlX2V4dCAhPSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSkgeworCQkJCQlEQkcoIkhFQ0kgV1JJVEUgQ09NUExFVEVcbiIpOworCQkJCQlmaWxlX2V4dC0+d3JpdGluZ19zdGF0ZSA9CisJCQkJCQlIRUNJX1dSSVRFX0NPTVBMRVRFOworCQkJCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCwKKwkJCQkJCSZjbXBsX2xpc3QtPmhlY2lfY2IuY2JfbGlzdCk7CisJCQkJfQorCQkJCWlmIChmaWxlX2V4dCA9PSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSB7CisJCQkJCURCRygiY2hlY2sgaWFtdGhpZiBmbG93IGNvbnRyb2wuXG4iKTsKKwkJCQkJaWYgKGRldi0+aWFtdGhpZl9mbG93X2NvbnRyb2xfcGVuZGluZykgeworCQkJCQkJcmV0ID0gX2hlY2lfYmhfaWFtdGhpZl9yZWFkKGRldiwKKwkJCQkJCQkJCXNsb3RzKTsKKwkJCQkJCWlmIChyZXQgIT0gMCkKKwkJCQkJCQlyZXR1cm4gcmV0OworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCX0KKwl9CisKKwlpZiAoKGRldi0+c3RvcCkgJiYgKCFkZXYtPndkX3BlbmRpbmcpKSB7CisJCWRldi0+d2Rfc3RvcGVkID0gMTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkZXYtPndhaXRfc3RvcF93ZCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChkZXYtPmV4dHJhX3dyaXRlX2luZGV4ICE9IDApIHsKKwkJREJHKCJleHRyYV93cml0ZV9pbmRleCA9JWQuXG4iLAlkZXYtPmV4dHJhX3dyaXRlX2luZGV4KTsKKwkJaGVjaV93cml0ZV9tZXNzYWdlKGRldiwKKwkJCQkoc3RydWN0IGhlY2lfbXNnX2hkciAqKSAmZGV2LT5leHRfbXNnX2J1ZlswXSwKKwkJCQkodW5zaWduZWQgY2hhciAqKSAmZGV2LT5leHRfbXNnX2J1ZlsxXSwKKwkJCQkoZGV2LT5leHRyYV93cml0ZV9pbmRleCAtIDEpICogc2l6ZW9mKF9fdTMyKSk7CisJCSpzbG90cyAtPSBkZXYtPmV4dHJhX3dyaXRlX2luZGV4OworCQlkZXYtPmV4dHJhX3dyaXRlX2luZGV4ID0gMDsKKwl9CisJaWYgKGRldi0+aGVjaV9zdGF0ZSA9PSBIRUNJX0VOQUJMRUQpIHsKKwkJaWYgKChkZXYtPndkX3BlbmRpbmcpCisJCSAgICAmJiBmbG93X2N0cmxfY3JlZHMoZGV2LCAmZGV2LT53ZF9maWxlX2V4dCkpIHsKKwkJCWlmICghaGVjaV9zZW5kX3dkKGRldikpCisJCQkJREJHKCJ3ZCBzZW5kIGZhaWxlZC5cbiIpOworCQkJZWxzZQorCQkJCWZsb3dfY3RybF9yZWR1Y2UoZGV2LCAmZGV2LT53ZF9maWxlX2V4dCk7CisKKwkJCWRldi0+d2RfcGVuZGluZyA9IDA7CisKKwkJCWlmIChkZXYtPndkX3RpbWVvdXQgIT0gMCkgeworCQkJCSpzbG90cyAtPSAoc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpICsKKwkJCQkJIEhFQ0lfU1RBUlRfV0RfREFUQV9TSVpFICsgMykgLyA0OworCQkJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAyOworCQkJfSBlbHNlIHsKKwkJCQkqc2xvdHMgLT0gKHNpemVvZihzdHJ1Y3QgaGVjaV9tc2dfaGRyKSArCisJCQkJCSBIRUNJX1dEX1BBUkFNU19TSVpFICsgMykgLyA0OworCQkJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAwOworCQkJfQorCisJCX0KKwl9CisJaWYgKGRldi0+c3RvcCkKKwkJcmV0dXJuIH5FTk9ERVY7CisKKwkvKiBjb21wbGV0ZSBjb250cm9sIHdyaXRlIGxpc3QgQ0IgKi8KKwlpZiAoZGV2LT5jdHJsX3dyX2xpc3Quc3RhdHVzID09IDApIHsKKwkJLyogY29tcGxldGUgY29udHJvbCB3cml0ZSBsaXN0IENCICovCisJCURCRygiY29tcGxldGUgY29udHJvbCB3cml0ZSBsaXN0IGNiLlxuIik7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2X2NiX3BvcywgcHJpdl9jYl9uZXh0LAorCQkJCSZkZXYtPmN0cmxfd3JfbGlzdC5oZWNpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJCWZpbGVfZXh0ID0gKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqKQorCQkJCXByaXZfY2JfcG9zLT5maWxlX3ByaXZhdGU7CisJCQlpZiAoZmlsZV9leHQgPT0gTlVMTCkgeworCQkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCQlzd2l0Y2ggKHByaXZfY2JfcG9zLT5tYWpvcl9maWxlX29wZXJhdGlvbnMpIHsKKwkJCWNhc2UgSEVDSV9DTE9TRToKKwkJCQkvKiBzZW5kIGRpc2Nvbm5lY3QgbWVzc2FnZSAqLworCQkJCXJldCA9IF9oZWNpX2JoX2Nsb3NlKGRldiwgc2xvdHMsCisJCQkJCQkgICAgIHByaXZfY2JfcG9zLAorCQkJCQkJICAgICBmaWxlX2V4dCwgY21wbF9saXN0KTsKKwkJCQlpZiAocmV0ICE9IDApCisJCQkJCXJldHVybiByZXQ7CisKKwkJCQlicmVhazsKKwkJCWNhc2UgSEVDSV9SRUFEOgorCQkJCS8qIHNlbmQgZmxvdyBjb250cm9sIG1lc3NhZ2UgKi8KKwkJCQlyZXQgPSBfaGVjaV9iaF9yZWFkKGRldiwgc2xvdHMsCisJCQkJCQkgICAgcHJpdl9jYl9wb3MsCisJCQkJCQkgICAgZmlsZV9leHQsIGNtcGxfbGlzdCk7CisJCQkJaWYgKHJldCAhPSAwKQorCQkJCQlyZXR1cm4gcmV0OworCisJCQkJYnJlYWs7CisJCQljYXNlIEhFQ0lfSU9DVEw6CisJCQkJLyogY29ubmVjdCBtZXNzYWdlICovCisJCQkJaWYgKCFvdGhlcl9jbGllbnRfaXNfY29ubmVjdGluZyhkZXYsIGZpbGVfZXh0KSkKKwkJCQkJY29udGludWU7CisJCQkJcmV0ID0gX2hlY2lfYmhfaW9jdGwoZGV2LCBzbG90cywKKwkJCQkJCSAgICAgcHJpdl9jYl9wb3MsCisJCQkJCQkgICAgIGZpbGVfZXh0LCBjbXBsX2xpc3QpOworCQkJCWlmIChyZXQgIT0gMCkKKwkJCQkJcmV0dXJuIHJldDsKKworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCUJVRygpOworCQkJfQorCisJCX0KKwl9CisJLyogY29tcGxldGUgIHdyaXRlIGxpc3QgQ0IgKi8KKwlpZiAoKGRldi0+d3JpdGVfbGlzdC5zdGF0dXMgPT0gMCkKKwkgICAgJiYgIWxpc3RfZW1wdHkoJmRldi0+d3JpdGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QpKSB7CisJCURCRygiY29tcGxldGUgd3JpdGUgbGlzdCBjYi5cbiIpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdl9jYl9wb3MsIHByaXZfY2JfbmV4dCwKKwkJCQkmZGV2LT53cml0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQkJZmlsZV9leHQgPSAoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICopCisJCQkJCXByaXZfY2JfcG9zLT5maWxlX3ByaXZhdGU7CisKKwkJCWlmIChmaWxlX2V4dCAhPSBOVUxMKSB7CisJCQkJaWYgKGZpbGVfZXh0ICE9ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpIHsKKwkJCQkJaWYgKCFmbG93X2N0cmxfY3JlZHMoZGV2LCBmaWxlX2V4dCkpIHsKKwkJCQkJCURCRygiTm8gZmxvdyBjb250cm9sIgorCQkJCQkJICAgICIgY3JlZGVudGlhbHMgZm9yIGNsaWVudCIKKwkJCQkJCSAgICAiICVkLCBub3Qgc2VuZGluZy5cbiIsCisJCQkJCQkgICAgZmlsZV9leHQtPmhvc3RfY2xpZW50X2lkKTsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCXJldCA9IF9oZWNpX2JoX2NtcGwoZGV2LCBzbG90cywKKwkJCQkJCQkgICAgcHJpdl9jYl9wb3MsCisJCQkJCQkJICAgIGZpbGVfZXh0LAorCQkJCQkJCSAgICBjbXBsX2xpc3QpOworCQkJCQlpZiAocmV0ICE9IDApCisJCQkJCQlyZXR1cm4gcmV0OworCisJCQkJfSBlbHNlIGlmIChmaWxlX2V4dCA9PSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSB7CisJCQkJCS8qIElBTVRISUYgSU9DVEwgKi8KKwkJCQkJREJHKCJjb21wbGV0ZSBwdGhpIHdyaXRlIGNiLlxuIik7CisJCQkJCWlmICghZmxvd19jdHJsX2NyZWRzKGRldiwgZmlsZV9leHQpKSB7CisJCQkJCQlEQkcoIk5vIGZsb3cgY29udHJvbCIKKwkJCQkJCSAgICAiIGNyZWRlbnRpYWxzIGZvciBwdGhpIgorCQkJCQkJICAgICIgY2xpZW50ICVkLlxuIiwKKwkJCQkJCSAgICBmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJcmV0ID0gX2hlY2lfYmhfY21wbF9pYW10aGlmKGRldiwgc2xvdHMsCisJCQkJCQkJCSAgIHByaXZfY2JfcG9zLAorCQkJCQkJCQkgICBmaWxlX2V4dCwKKwkJCQkJCQkJICAgY21wbF9saXN0KTsKKwkJCQkJaWYgKHJldCAhPSAwKQorCQkJCQkJcmV0dXJuIHJldDsKKworCQkJCX0KKwkJCX0KKworCQl9CisJfQorCXJldHVybiAwOworfQorCisKKy8qKgorICogaXNfdHJlYXRfc3BlY2lhbGx5X2NsaWVudCAgLSBjaGVjayBpZiB0aGUgbWVzc2FnZSBiZWxvbmcKKyAqIHRvIHRoZSBmaWxlIHByaXZhdGUgZGF0YS4KKyAqCisgKiBAZmlsZV9leHQ6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QKKyAqIEByczogY29ubmVjdCByZXNwb25zZSBidXMgbWVzc2FnZQorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGlzX3RyZWF0X3NwZWNpYWxseV9jbGllbnQoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCwKKwkJc3RydWN0IGhibV9jbGllbnRfY29ubmVjdF9yZXNwb25zZSAqcnMpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoKGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCA9PSBycy0+aG9zdF9hZGRyKSAmJgorCSAgICAoZmlsZV9leHQtPm1lX2NsaWVudF9pZCA9PSBycy0+bWVfYWRkcikpIHsKKwkJaWYgKHJzLT5zdGF0dXMgPT0gMCkgeworCQkJREJHKCJjbGllbnQgY29ubmVjdCBzdGF0dXMgPSAweCUwOHguXG4iLCBycy0+c3RhdHVzKTsKKwkJCWZpbGVfZXh0LT5zdGF0ZSA9IEhFQ0lfRklMRV9DT05ORUNURUQ7CisJCQlmaWxlX2V4dC0+c3RhdHVzID0gMDsKKwkJfSBlbHNlIHsKKwkJCURCRygiY2xpZW50IGNvbm5lY3Qgc3RhdHVzID0gMHglMDh4LlxuIiwgcnMtPnN0YXR1cyk7CisJCQlmaWxlX2V4dC0+c3RhdGUgPSBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEOworCQkJZmlsZV9leHQtPnN0YXR1cyA9IC1FTk9ERVY7CisJCX0KKwkJcmV0ID0gMTsKKwl9CisJREJHKCJjbGllbnQgc3RhdGUgPSAlZC5cbiIsIGZpbGVfZXh0LT5zdGF0ZSk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBoZWNpX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICAtIGNvbm5lY3QgcmVzcG9uc2UgYmggcm91dGluZQorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEByczogY29ubmVjdCByZXNwb25zZSBidXMgbWVzc2FnZQorICovCitzdGF0aWMgdm9pZCBoZWNpX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBoYm1fY2xpZW50X2Nvbm5lY3RfcmVzcG9uc2UgKnJzKQoreworCisJc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX3BvcyA9IE5VTEwsICpwcml2X2NiX25leHQgPSBOVUxMOworCisJLyogaWYgV0Qgb3IgaWFtdGhpZiBjbGllbnQgdHJlYXQgc3BlY2lhbGx5ICovCisKKwlpZiAoKGlzX3RyZWF0X3NwZWNpYWxseV9jbGllbnQoJihkZXYtPndkX2ZpbGVfZXh0KSwgcnMpKSB8fAorCSAgICAoaXNfdHJlYXRfc3BlY2lhbGx5X2NsaWVudCgmKGRldi0+aWFtdGhpZl9maWxlX2V4dCksIHJzKSkpCisJCXJldHVybjsKKworCWlmIChkZXYtPmN0cmxfcmRfbGlzdC5zdGF0dXMgPT0gMAorCSAgICAmJiAhbGlzdF9lbXB0eSgmZGV2LT5jdHJsX3JkX2xpc3QuaGVjaV9jYi5jYl9saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdl9jYl9wb3MsIHByaXZfY2JfbmV4dCwKKwkJCSZkZXYtPmN0cmxfcmRfbGlzdC5oZWNpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJCWZpbGVfZXh0ID0gKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqKQorCQkJCQlwcml2X2NiX3Bvcy0+ZmlsZV9wcml2YXRlOworCQkJaWYgKGZpbGVfZXh0ID09IE5VTEwpIHsKKwkJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmIChIRUNJX0lPQ1RMID09IHByaXZfY2JfcG9zLT5tYWpvcl9maWxlX29wZXJhdGlvbnMpIHsKKwkJCQlpZiAoaXNfdHJlYXRfc3BlY2lhbGx5X2NsaWVudChmaWxlX2V4dCwgcnMpKSB7CisJCQkJCWxpc3RfZGVsKCZwcml2X2NiX3Bvcy0+Y2JfbGlzdCk7CisJCQkJCWZpbGVfZXh0LT5zdGF0dXMgPSAwOworCQkJCQlmaWxlX2V4dC0+dGltZXJfY291bnQgPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgorICogaGVjaV9jbGllbnRfZGlzY29ubmVjdF9yZXNwb25zZSAgLSBkaXNjb25uZWN0IHJlc3BvbnNlIGJoIHJvdXRpbmUKKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAcnM6IGRpc2Nvbm5lY3QgcmVzcG9uc2UgYnVzIG1lc3NhZ2UKKyAqLworc3RhdGljIHZvaWQgaGVjaV9jbGllbnRfZGlzY29ubmVjdF9yZXNwb25zZShzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICpycykKK3sKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0OworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zID0gTlVMTCwgKnByaXZfY2JfbmV4dCA9IE5VTEw7CisKKwlpZiAoZGV2LT5jdHJsX3JkX2xpc3Quc3RhdHVzID09IDAKKwkgICAgJiYgIWxpc3RfZW1wdHkoJmRldi0+Y3RybF9yZF9saXN0LmhlY2lfY2IuY2JfbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXZfY2JfcG9zLCBwcml2X2NiX25leHQsCisJCQkJJmRldi0+Y3RybF9yZF9saXN0LmhlY2lfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQkJZmlsZV9leHQgPSAoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICopCisJCQkJcHJpdl9jYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKworCQkJaWYgKGZpbGVfZXh0ID09IE5VTEwpIHsKKwkJCQlsaXN0X2RlbCgmcHJpdl9jYl9wb3MtPmNiX2xpc3QpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJREJHKCJsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUgaW4gY3RybF9yZF9saXN0LlxuIik7CisJCQlpZiAoKGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCA9PSBycy0+aG9zdF9hZGRyKSAmJgorCQkJCShmaWxlX2V4dC0+bWVfY2xpZW50X2lkID09IHJzLT5tZV9hZGRyKSkgeworCisJCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCQlpZiAocnMtPnN0YXR1cyA9PSAwKSB7CisJCQkJCWZpbGVfZXh0LT5zdGF0ZSA9CisJCQkJCSAgICBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEOworCQkJCX0KKworCQkJCWZpbGVfZXh0LT5zdGF0dXMgPSAwOworCQkJCWZpbGVfZXh0LT50aW1lcl9jb3VudCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgorICogc2FtZV9mbG93X2FkZHIgLSB0ZWxsIHRoZXkgaGF2ZSBzYW1lIGFkZHJlc3MuCisgKgorICogQGZpbGU6IHByaXZhdGUgZGF0YSBvZiB0aGUgZmlsZSBvYmplY3QuCisgKiBAZmxvdzogZmxvdyBjb250cm9sLgorICoKKyAqIHJldHVybnMgICE9MCwgc2FtZTsgMCxub3QuCisgKi8KK3N0YXRpYyBpbnQgc2FtZV9mbG93X2FkZHIoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlLAorCQkJCQlzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqZmxvdykKK3sKKwlyZXR1cm4gKChmaWxlLT5ob3N0X2NsaWVudF9pZCA9PSBmbG93LT5ob3N0X2FkZHIpCisJCSYmIChmaWxlLT5tZV9jbGllbnRfaWQgPT0gZmxvdy0+bWVfYWRkcikpOworfQorCisvKioKKyAqIGFkZF9zaW5nbGVfZmxvd19jcmVkcyAtIGFkZCBzaW5nbGUgYnVmZmVyIGNyZWRlbnRpYWxzLgorICoKKyAqIEBmaWxlOiBwcml2YXRlIGRhdGEgb3QgdGhlIGZpbGUgb2JqZWN0LgorICogQGZsb3c6IGZsb3cgY29udHJvbC4KKyAqLworc3RhdGljIHZvaWQgYWRkX3NpbmdsZV9mbG93X2NyZWRzKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaGJtX2Zsb3dfY29udHJvbCAqZmxvdykKK3sKKwlzdHJ1Y3QgaGVjaV9tZV9jbGllbnQgKmNsaWVudDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9oZWNpX21lX2NsaWVudHM7IGkrKykgeworCQljbGllbnQgPSAmZGV2LT5tZV9jbGllbnRzW2ldOworCQlpZiAoKGNsaWVudCAhPSBOVUxMKSAmJgorCQkgICAgKGZsb3ctPm1lX2FkZHIgPT0gY2xpZW50LT5jbGllbnRfaWQpKSB7CisJCQlpZiAoY2xpZW50LT5wcm9wcy5zaW5nbGVfcmVjdl9idWYgIT0gMCkgeworCQkJCWNsaWVudC0+Zmxvd19jdHJsX2NyZWRzKys7CisJCQkJREJHKCJyZWN2IGZsb3cgY3RybCBtc2cgTUUgJWQgKHNpbmdsZSkuXG4iLAorCQkJCSAgICBmbG93LT5tZV9hZGRyKTsKKwkJCQlEQkcoImZsb3cgY29udHJvbCBjcmVkZW50aWFscz0lZC5cbiIsCisJCQkJICAgIGNsaWVudC0+Zmxvd19jdHJsX2NyZWRzKTsKKwkJCX0gZWxzZSB7CisJCQkJQlVHKCk7CS8qIGVycm9yIGluIGZsb3cgY29udHJvbCAqLworCQkJfQorCQl9CisJfQorfQorCisvKioKKyAqIGhlY2lfY2xpZW50X2Zsb3dfY29udHJvbF9yZXNwb25zZSAgLSBmbG93IGNvbnRyb2wgcmVzcG9uc2UgYmggcm91dGluZQorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBmbG93X2NvbnRyb2w6IGZsb3cgY29udHJvbCByZXNwb25zZSBidXMgbWVzc2FnZQorICovCitzdGF0aWMgdm9pZCBoZWNpX2NsaWVudF9mbG93X2NvbnRyb2xfcmVzcG9uc2Uoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhibV9mbG93X2NvbnRyb2wgKmZsb3dfY29udHJvbCkKK3sKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfbmV4dCA9IE5VTEw7CisKKwlpZiAoZmxvd19jb250cm9sLT5ob3N0X2FkZHIgPT0gMCkgeworCQkvKiBzaW5nbGUgcmVjZWl2ZSBidWZmZXIgKi8KKwkJYWRkX3NpbmdsZV9mbG93X2NyZWRzKGRldiwgZmxvd19jb250cm9sKTsKKwl9IGVsc2UgeworCQkvKiBub3JtYWwgY29ubmVjdGlvbiAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlsZV9wb3MsIGZpbGVfbmV4dCwKKwkJCQkmZGV2LT5maWxlX2xpc3QsIGxpbmspIHsKKwkJCURCRygibGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlIGluIGZpbGVfbGlzdFxuIik7CisKKwkJCURCRygiZmlsZV9leHQgb2YgaG9zdCBjbGllbnQgJWQgTUUgY2xpZW50ICVkLlxuIiwKKwkJCSAgICBmaWxlX3Bvcy0+aG9zdF9jbGllbnRfaWQsCisJCQkgICAgZmlsZV9wb3MtPm1lX2NsaWVudF9pZCk7CisJCQlEQkcoImZsb3cgY3RybCBtc2cgZm9yIGhvc3QgJWQgTUUgJWQuXG4iLAorCQkJICAgIGZsb3dfY29udHJvbC0+aG9zdF9hZGRyLAorCQkJICAgIGZsb3dfY29udHJvbC0+bWVfYWRkcik7CisJCQlpZiAoc2FtZV9mbG93X2FkZHIoZmlsZV9wb3MsIGZsb3dfY29udHJvbCkpIHsKKwkJCQlEQkcoInJlY3YgY3RybCBtc2cgZm9yIGhvc3QgICVkIE1FICVkLlxuIiwKKwkJCQkgICAgZmxvd19jb250cm9sLT5ob3N0X2FkZHIsCisJCQkJICAgIGZsb3dfY29udHJvbC0+bWVfYWRkcik7CisJCQkJZmlsZV9wb3MtPmZsb3dfY3RybF9jcmVkcysrOworCQkJCURCRygiZmxvdyBjb250cm9sIGNyZWRlbnRpYWxzPSVkLlxuIiwKKwkJCQkgICAgZmlsZV9wb3MtPmZsb3dfY3RybF9jcmVkcyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qKgorICogc2FtZV9kaXNjb25uX2FkZHIgLSB0ZWxsIHRoZXkgaGF2ZSBzYW1lIGFkZHJlc3MKKyAqCisgKiBAZmlsZTogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdC4KKyAqIEBkaXNjb25uOiBkaXNjb25uZWN0aW9uIHJlcXVlc3QuCisgKgorICogcmV0dXJucyAhPTAsIHNhbWU7IDAsbm90LgorICovCitzdGF0aWMgaW50IHNhbWVfZGlzY29ubl9hZGRyKHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZSwKKwkJCSAgICAgc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0ICpkaXNjb25uKQoreworCXJldHVybiAoKGZpbGUtPmhvc3RfY2xpZW50X2lkID09IGRpc2Nvbm4tPmhvc3RfYWRkcikKKwkJJiYgKGZpbGUtPm1lX2NsaWVudF9pZCA9PSBkaXNjb25uLT5tZV9hZGRyKSk7Cit9CisKKy8qKgorICogaGVjaV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0ICAtIGRpc2Nvbm5lY3QgcmVxdWVzdCBiaCByb3V0aW5lCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlci4KKyAqIEBkaXNjb25uZWN0X3JlcTogZGlzY29ubmVjdCByZXF1ZXN0IGJ1cyBtZXNzYWdlLgorICovCitzdGF0aWMgdm9pZCBoZWNpX2NsaWVudF9kaXNjb25uZWN0X3JlcXVlc3Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkJc3RydWN0IGhibV9jbGllbnRfZGlzY29ubmVjdF9yZXF1ZXN0ICpkaXNjb25uZWN0X3JlcSkKK3sKKwlzdHJ1Y3QgaGVjaV9tc2dfaGRyICpoZWNpX2hkcjsKKwlzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICpkaXNjb25uZWN0X3JlczsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfbmV4dCA9IE5VTEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlsZV9wb3MsIGZpbGVfbmV4dCwgJmRldi0+ZmlsZV9saXN0LCBsaW5rKSB7CisJCWlmIChzYW1lX2Rpc2Nvbm5fYWRkcihmaWxlX3BvcywgZGlzY29ubmVjdF9yZXEpKSB7CisJCQlEQkcoImRpc2Nvbm5lY3QgcmVxdWVzdCBob3N0IGNsaWVudCAlZCBNRSBjbGllbnQgJWQuXG4iLAorCQkJCQlkaXNjb25uZWN0X3JlcS0+aG9zdF9hZGRyLAorCQkJCQlkaXNjb25uZWN0X3JlcS0+bWVfYWRkcik7CisJCQlmaWxlX3Bvcy0+c3RhdGUgPSBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEOworCQkJZmlsZV9wb3MtPnRpbWVyX2NvdW50ID0gMDsKKwkJCWlmIChmaWxlX3BvcyA9PSAmZGV2LT53ZF9maWxlX2V4dCkgeworCQkJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAwOworCQkJCWRldi0+d2RfcGVuZGluZyA9IDA7CisJCQl9IGVsc2UgaWYgKGZpbGVfcG9zID09ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpCisJCQkJZGV2LT5pYW10aGlmX3RpbWVyID0gMDsKKworCQkJLyogcHJlcGFyZSBkaXNjb25uZWN0IHJlc3BvbnNlICovCisJCQloZWNpX2hkciA9CisJCQkJKHN0cnVjdCBoZWNpX21zZ19oZHIgKikgJmRldi0+ZXh0X21zZ19idWZbMF07CisJCQloZWNpX2hkci0+aG9zdF9hZGRyID0gMDsKKwkJCWhlY2lfaGRyLT5tZV9hZGRyID0gMDsKKwkJCWhlY2lfaGRyLT5sZW5ndGggPQorCQkJCXNpemVvZihzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlKTsKKwkJCWhlY2lfaGRyLT5tc2dfY29tcGxldGUgPSAxOworCQkJaGVjaV9oZHItPnJlc2VydmVkID0gMDsKKworCQkJZGlzY29ubmVjdF9yZXMgPQorCQkJCShzdHJ1Y3QgaGJtX2NsaWVudF9jb25uZWN0X3Jlc3BvbnNlICopCisJCQkJJmRldi0+ZXh0X21zZ19idWZbMV07CisJCQlkaXNjb25uZWN0X3Jlcy0+aG9zdF9hZGRyID0gZmlsZV9wb3MtPmhvc3RfY2xpZW50X2lkOworCQkJZGlzY29ubmVjdF9yZXMtPm1lX2FkZHIgPSBmaWxlX3Bvcy0+bWVfY2xpZW50X2lkOworCQkJKihfX3U4ICopICgmZGlzY29ubmVjdF9yZXMtPmNtZCkgPQorCQkJCUNMSUVOVF9ESVNDT05ORUNUX1JFU19DTUQ7CisJCQlkaXNjb25uZWN0X3Jlcy0+c3RhdHVzID0gMDsKKwkJCWRldi0+ZXh0cmFfd3JpdGVfaW5kZXggPSAyOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qKgorICogaGVjaV90aW1lciAtIHRpbWVyIGZ1bmN0aW9uLgorICoKKyAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogTk9URTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGltZXIgaW50ZXJydXB0IHdvcmsKKyAqLwordm9pZCBoZWNpX3dkX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2ID0gKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICopIGRhdGE7CisKKwlEQkcoInNlbmQgd2F0Y2hkb2cuXG4iKTsKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9FTkFCTEVEKSB7CisJCW1vZF90aW1lcigmZGV2LT53ZF90aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgMiAqIEhaKSk7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZGV2LT53ZF9maWxlX2V4dC5zdGF0ZSAhPSBIRUNJX0ZJTEVfQ09OTkVDVEVEKSB7CisJCW1vZF90aW1lcigmZGV2LT53ZF90aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgMiAqIEhaKSk7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuOworCX0KKwkvKiBXYXRjaGRvZyAqLworCWlmICgoZGV2LT53ZF9kdWVfY291bnRlciAhPSAwKSAmJiAoZGV2LT53ZF9ieXBhc3MgPT0gMCkpIHsKKwkJaWYgKC0tZGV2LT53ZF9kdWVfY291bnRlciA9PSAwKSB7CisJCQlpZiAoZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSAmJgorCQkJICAgIGZsb3dfY3RybF9jcmVkcyhkZXYsICZkZXYtPndkX2ZpbGVfZXh0KSkgeworCQkJCWRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgPSAwOworCQkJCWlmICghaGVjaV9zZW5kX3dkKGRldikpIHsKKwkJCQkJREJHKCJ3ZCBzZW5kIGZhaWxlZC5cbiIpOworCQkJCX0gZWxzZSB7CisJCQkJCWZsb3dfY3RybF9yZWR1Y2UoZGV2LAorCQkJCQkJCSAmZGV2LT53ZF9maWxlX2V4dCk7CisJCQkJfQorCisJCQkJaWYgKGRldi0+d2RfdGltZW91dCAhPSAwKQorCQkJCQlkZXYtPndkX2R1ZV9jb3VudGVyID0gMjsKKwkJCQllbHNlCisJCQkJCWRldi0+d2RfZHVlX2NvdW50ZXIgPSAwOworCisJCQl9IGVsc2UKKwkJCQlkZXYtPndkX3BlbmRpbmcgPSAxOworCisJCX0KKwl9CisJaWYgKGRldi0+aWFtdGhpZl9zdGFsbF90aW1lciAhPSAwKSB7CisJCWlmICgtLWRldi0+aWFtdGhpZl9zdGFsbF90aW1lciA9PSAwKSB7CisJCQlEQkcoInJlc2V0aW5nIGJlY2F1c2Ugb2YgaGFuZyB0byBQVEhJLlxuIik7CisJCQloZWNpX3Jlc2V0KGRldiwgMSk7CisJCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9zaXplID0gMDsKKwkJCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4ID0gMDsKKwkJCWRldi0+aWFtdGhpZl9jYW5jZWxlZCA9IDA7CisJCQlkZXYtPmlhbXRoaWZfaW9jdGwgPSAxOworCQkJZGV2LT5pYW10aGlmX3N0YXRlID0gSEVDSV9JQU1USElGX0lETEU7CisJCQlkZXYtPmlhbXRoaWZfdGltZXIgPSAwOworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJCQlpZiAoZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IpCisJCQkJaGVjaV9mcmVlX2NiX3ByaXZhdGUoZGV2LT5pYW10aGlmX2N1cnJlbnRfY2IpOworCisJCQlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJZGV2LT5pYW10aGlmX2ZpbGVfb2JqZWN0ID0gTlVMTDsKKwkJCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gTlVMTDsKKwkJCXJ1bl9uZXh0X2lhbXRoaWZfY21kKGRldik7CisJCX0KKwl9CisJbW9kX3RpbWVyKCZkZXYtPndkX3RpbWVyLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyAyICogSFopKTsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaGVjaS9pb19oZWNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvaGVjaS9pb19oZWNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1NDRhNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9oZWNpL2lvX2hlY2kuYwpAQCAtMCwwICsxLDg0NyBAQAorLyoKKyAqIFBhcnQgb2YgSW50ZWwoUikgTWFuYWdlYWJpbGl0eSBFbmdpbmUgSW50ZXJmYWNlIExpbnV4IGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdworICogICAgKCJEaXNjbGFpbWVyIikgYW5kIGFueSByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24KKyAqICAgIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBmdXJ0aGVyCisgKiAgICBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCisgKiBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvYWlvLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImhlY2lfZGF0YV9zdHJ1Y3R1cmVzLmgiCisjaW5jbHVkZSAiaGVjaS5oIgorI2luY2x1ZGUgImhlY2lfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiaGVjaV92ZXJzaW9uLmgiCisKKworLyoqCisgKiBoZWNpX2lvY3RsX2dldF92ZXJzaW9uIC0gdGhlIGdldCBkcml2ZXIgdmVyc2lvbiBJT0NUTCBmdW5jdGlvbgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBpZl9udW06ICBtaW5vciBudW1iZXIKKyAqIEAqdV9tc2c6IHBvaW50ZXIgdG8gdXNlciBkYXRhIHN0cnVjdCBpbiB1c2VyIHNwYWNlCisgKiBAa19tc2c6IGRhdGEgaW4ga2VybmVsIG9uIHRoZSBzdGFjaworICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK2ludCBoZWNpX2lvY3RsX2dldF92ZXJzaW9uKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpZl9udW0sCisJCQkgICBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEgX191c2VyICp1X21zZywKKwkJCSAgIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBrX21zZywKKwkJCSAgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJaW50IHJldHMgPSAwOworCXN0cnVjdCBoZWNpX2RyaXZlcl92ZXJzaW9uICp2ZXJzaW9uOworCXN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSByZXNfbXNnOworCisJaWYgKChpZl9udW0gIT0gSEVDSV9NSU5PUl9OVU1CRVIpIHx8ICghZGV2KQorCSAgICB8fCAoIWZpbGVfZXh0KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoa19tc2cuc2l6ZSA8IChzaXplb2Yoc3RydWN0IGhlY2lfZHJpdmVyX3ZlcnNpb24pIC0gMikpIHsKKwkJREJHKCJ1c2VyIGJ1ZmZlciBsZXNzIHRoYW4gaGVjaV9kcml2ZXJfdmVyc2lvbi5cbiIpOworCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KKworCXJlc19tc2cuZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoZWNpX2RyaXZlcl92ZXJzaW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXNfbXNnLmRhdGEpIHsKKwkJREJHKCJmYWlsZWQgYWxsb2NhdGlvbiByZXNwb25zZSBidWZmZXIgc2l6ZSA9ICVkLlxuIiwKKwkJICAgIChpbnQpIHNpemVvZihzdHJ1Y3QgaGVjaV9kcml2ZXJfdmVyc2lvbikpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl2ZXJzaW9uID0gKHN0cnVjdCBoZWNpX2RyaXZlcl92ZXJzaW9uICopIHJlc19tc2cuZGF0YTsKKwl2ZXJzaW9uLT5tYWpvciA9IE1BSk9SX1ZFUlNJT047CisJdmVyc2lvbi0+bWlub3IgPSBNSU5PUl9WRVJTSU9OOworCXZlcnNpb24tPmhvdGZpeCA9IFFVSUNLX0ZJWF9OVU1CRVI7CisJdmVyc2lvbi0+YnVpbGQgPSBWRVJfQlVJTEQ7CisJcmVzX21zZy5zaXplID0gc2l6ZW9mKHN0cnVjdCBoZWNpX2RyaXZlcl92ZXJzaW9uKTsKKwlpZiAoa19tc2cuc2l6ZSA8IHNpemVvZihzdHJ1Y3QgaGVjaV9kcml2ZXJfdmVyc2lvbikpCisJCXJlc19tc2cuc2l6ZSAtPSAyOworCisJcmV0cyA9IGZpbGVfZXh0LT5zdGF0dXM7CisJLyogbm93IGNvcHkgdGhlIGRhdGEgdG8gdXNlciBzcGFjZSAqLworCWlmIChjb3B5X3RvX3VzZXIoa19tc2cuZGF0YSwgcmVzX21zZy5kYXRhLCByZXNfbXNnLnNpemUpKSB7CisJCXJldHMgPSAtRUZBVUxUOworCQlnb3RvIGVuZDsKKwl9CisJaWYgKHB1dF91c2VyKHJlc19tc2cuc2l6ZSwgJnVfbXNnLT5zaXplKSkgeworCQlyZXRzID0gLUVGQVVMVDsKKwkJZ290byBlbmQ7CisJfQorZW5kOgorCWtmcmVlKHJlc19tc2cuZGF0YSk7CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogaGVjaV9pb2N0bF9jb25uZWN0X2NsaWVudCAtIHRoZSBjb25uZWN0IHRvIGZ3IGNsaWVudCBJT0NUTCBmdW5jdGlvbgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBpZl9udW06ICBtaW5vciBudW1iZXIKKyAqIEAqdV9tc2c6IHBvaW50ZXIgdG8gdXNlciBkYXRhIHN0cnVjdCBpbiB1c2VyIHNwYWNlCisgKiBAa19tc2c6IGRhdGEgaW4ga2VybmVsIG9uIHRoZSBzdGFjaworICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK2ludCBoZWNpX2lvY3RsX2Nvbm5lY3RfY2xpZW50KHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpZl9udW0sCisJCQkgICAgICBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEgX191c2VyICp1X21zZywKKwkJCSAgICAgIHN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSBrX21zZywKKwkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXRzID0gMDsKKwlzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEgcmVxX21zZywgcmVzX21zZzsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0OworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9uZXh0ID0gTlVMTDsKKwlsb25nIHRpbWVvdXQgPSAxNTsJLyoxNSBzZWNvbmQgKi8KKwlfX3U4IGk7CisJaW50IGVyciA9IDA7CisKKwlpZiAoKGlmX251bSAhPSBIRUNJX01JTk9SX05VTUJFUikgfHwgKCFkZXYpIHx8ICghZmlsZSkpCisJCXJldHVybiAtRU5PREVWOworCisJZmlsZV9leHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaWYgKCFmaWxlX2V4dCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoa19tc2cuc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGd1aWQpKSB7CisJCURCRygidXNlciBidWZmZXIgc2l6ZSBpcyBub3QgZXF1YWwgdG8gc2l6ZSBvZiBzdHJ1Y3QgIgorCQkJCSJndWlkKDE2KS5cbiIpOworCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KKworCWlmICgha19tc2cuZGF0YSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXFfbXNnLmRhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3VpZCksIEdGUF9LRVJORUwpOworCXJlc19tc2cuZGF0YSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoZWNpX2NsaWVudCksIEdGUF9LRVJORUwpOworCisJaWYgKCFyZXNfbXNnLmRhdGEpIHsKKwkJREJHKCJmYWlsZWQgYWxsb2NhdGlvbiByZXNwb25zZSBidWZmZXIgc2l6ZSA9ICVkLlxuIiwKKwkJICAgIChpbnQpIHNpemVvZihzdHJ1Y3QgaGVjaV9jbGllbnQpKTsKKwkJa2ZyZWUocmVxX21zZy5kYXRhKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWlmICghcmVxX21zZy5kYXRhKSB7CisJCURCRygiZmFpbGVkIGFsbG9jYXRpb24gcmVxdWVzdCBidWZmZXIgc2l6ZSA9ICVkLlxuIiwKKwkJICAgIChpbnQpIHNpemVvZihzdHJ1Y3QgZ3VpZCkpOworCQlrZnJlZShyZXNfbXNnLmRhdGEpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmVxX21zZy5zaXplID0gc2l6ZW9mKHN0cnVjdCBndWlkKTsKKwlyZXNfbXNnLnNpemUgPSBzaXplb2Yoc3RydWN0IGhlY2lfY2xpZW50KTsKKworCS8qIGNvcHkgdGhlIG1lc3NhZ2UgdG8ga2VybmVsIHNwYWNlIC0KKwkgKiB1c2UgYSBwb2ludGVyIGFscmVhZHkgY29waWVkIGludG8ga2VybmVsIHNwYWNlCisJICovCisJaWYgKGNvcHlfZnJvbV91c2VyKHJlcV9tc2cuZGF0YSwga19tc2cuZGF0YSwga19tc2cuc2l6ZSkpIHsKKwkJcmV0cyA9IC1FRkFVTFQ7CisJCWdvdG8gZW5kOworCX0KKwkvKiBidWZmZXJlZCBpb2N0bCBjYiAqLworCXByaXZfY2IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2X2NiKSB7CisJCXJldHMgPSAtRU5PTUVNOworCQlnb3RvIGVuZDsKKwl9CisJSU5JVF9MSVNUX0hFQUQoJnByaXZfY2ItPmNiX2xpc3QpOworCXByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlci5kYXRhID0gcmVzX21zZy5kYXRhOworCXByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlci5zaXplID0gcmVzX21zZy5zaXplOworCXByaXZfY2ItPnJlcXVlc3RfYnVmZmVyLmRhdGEgPSByZXFfbXNnLmRhdGE7CisJcHJpdl9jYi0+cmVxdWVzdF9idWZmZXIuc2l6ZSA9IHJlcV9tc2cuc2l6ZTsKKwlwcml2X2NiLT5tYWpvcl9maWxlX29wZXJhdGlvbnMgPSBIRUNJX0lPQ1RMOworCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0VOQUJMRUQpIHsKKwkJcmV0cyA9IC1FTk9ERVY7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZ290byBlbmQ7CisJfQorCWlmICgoZmlsZV9leHQtPnN0YXRlICE9IEhFQ0lfRklMRV9JTklUSUFMSVpJTkcpICYmCisJICAgIChmaWxlX2V4dC0+c3RhdGUgIT0gSEVDSV9GSUxFX0RJU0NPTk5FQ1RFRCkpIHsKKwkJcmV0cyA9IC1FQlVTWTsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlnb3RvIGVuZDsKKwl9CisKKwkvKiBmaW5kIE1FIGNsaWVudCB3ZSdyZSB0cnlpbmcgdG8gY29ubmVjdCB0byAqLworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9oZWNpX21lX2NsaWVudHM7IGkrKykgeworCQlpZiAobWVtY21wKChzdHJ1Y3QgZ3VpZCAqKXJlcV9tc2cuZGF0YSwKKwkJCSAgICAmZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLnByb3RvY29sX25hbWUsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBndWlkKSkgPT0gMCkgeworCQkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5maXhlZF9hZGRyZXNzID09IDApIHsKKwkJCQlmaWxlX2V4dC0+bWVfY2xpZW50X2lkID0KKwkJCQkgICAgZGV2LT5tZV9jbGllbnRzW2ldLmNsaWVudF9pZDsKKwkJCQlmaWxlX2V4dC0+c3RhdGUgPSBIRUNJX0ZJTEVfQ09OTkVDVElORzsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorCS8qIGlmIHdlJ3JlIGNvbm5lY3RpbmcgdG8gUFRISSBjbGllbnQgc28gd2Ugd2lsbCB1c2UgdGhlIGV4aXN0CisJICogY29ubmVjdGlvbgorCSAqLworCWlmIChtZW1jbXAoKHN0cnVjdCBndWlkICopcmVxX21zZy5kYXRhLCAmaGVjaV9wdGhpX2d1aWQsCisJCQkJc2l6ZW9mKHN0cnVjdCBndWlkKSkgPT0gMCkgeworCQlpZiAoZGV2LT5pYW10aGlmX2ZpbGVfZXh0LnN0YXRlICE9IEhFQ0lfRklMRV9DT05ORUNURUQpIHsKKwkJCXJldHMgPSAtRU5PREVWOworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJZ290byBlbmQ7CisJCX0KKwkJZGV2LT5oZWNpX2hvc3RfY2xpZW50c1tmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQgLyA4XSAmPQorCQkJfigxIDw8IChmaWxlX2V4dC0+aG9zdF9jbGllbnRfaWQgJSA4KSk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmaWxlX3BvcywKKwkJICAgIGZpbGVfbmV4dCwgJmRldi0+ZmlsZV9saXN0LCBsaW5rKSB7CisJCQlpZiAoaGVjaV9mZV9zYW1lX2lkKGZpbGVfZXh0LCBmaWxlX3BvcykpIHsKKwkJCQlEQkcoInJlbW92ZSBmaWxlIHByaXZhdGUgZGF0YSBub2RlIGhvc3QiCisJCQkJICAgICIgY2xpZW50ID0gJWQsIE1FIGNsaWVudCA9ICVkLlxuIiwKKwkJCQkgICAgZmlsZV9wb3MtPmhvc3RfY2xpZW50X2lkLAorCQkJCSAgICBmaWxlX3Bvcy0+bWVfY2xpZW50X2lkKTsKKwkJCQlsaXN0X2RlbCgmZmlsZV9wb3MtPmxpbmspOworCQkJfQorCisJCX0KKwkJREJHKCJmcmVlIGZpbGUgcHJpdmF0ZSBkYXRhIG1lbW9yeS5cbiIpOworCQlrZnJlZShmaWxlX2V4dCk7CisJCWZpbGVfZXh0ID0gTlVMTDsKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gJmRldi0+aWFtdGhpZl9maWxlX2V4dDsKKwkJY2xpZW50ID0gKHN0cnVjdCBoZWNpX2NsaWVudCAqKSByZXNfbXNnLmRhdGE7CisJCWNsaWVudC0+bWF4X21zZ19sZW5ndGggPQorCQkJZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLm1heF9tc2dfbGVuZ3RoOworCQljbGllbnQtPnByb3RvY29sX3ZlcnNpb24gPQorCQkJZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLnByb3RvY29sX3ZlcnNpb247CisJCXJldHMgPSBkZXYtPmlhbXRoaWZfZmlsZV9leHQuc3RhdHVzOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisKKwkJLyogbm93IGNvcHkgdGhlIGRhdGEgdG8gdXNlciBzcGFjZSAqLworCQlpZiAoY29weV90b191c2VyKGtfbXNnLmRhdGEsIHJlc19tc2cuZGF0YSwgcmVzX21zZy5zaXplKSkgeworCQkJcmV0cyA9IC1FRkFVTFQ7CisJCQlnb3RvIGVuZDsKKwkJfQorCQlpZiAocHV0X3VzZXIocmVzX21zZy5zaXplLCAmdV9tc2ctPnNpemUpKSB7CisJCQlyZXRzID0gLUVGQVVMVDsKKwkJCWdvdG8gZW5kOworCQl9CisJCWdvdG8gZW5kOworCX0KKwlzcGluX2xvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCWlmIChmaWxlX2V4dC0+c3RhdGUgIT0gSEVDSV9GSUxFX0NPTk5FQ1RJTkcpIHsKKwkJcmV0cyA9IC1FTk9ERVY7CisJCXNwaW5fdW5sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlnb3RvIGVuZDsKKwl9CisJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCS8qIHByZXBhcmUgdGhlIG91dHB1dCBidWZmZXIgKi8KKwljbGllbnQgPSAoc3RydWN0IGhlY2lfY2xpZW50ICopIHJlc19tc2cuZGF0YTsKKwljbGllbnQtPm1heF9tc2dfbGVuZ3RoID0gZGV2LT5tZV9jbGllbnRzW2ldLnByb3BzLm1heF9tc2dfbGVuZ3RoOworCWNsaWVudC0+cHJvdG9jb2xfdmVyc2lvbiA9IGRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5wcm90b2NvbF92ZXJzaW9uOworCWlmIChkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5CisJICAgICYmICFvdGhlcl9jbGllbnRfaXNfY29ubmVjdGluZyhkZXYsIGZpbGVfZXh0KSkgeworCQlkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKwkJaWYgKCFoZWNpX2Nvbm5lY3QoZGV2LCBmaWxlX2V4dCkpIHsKKwkJCXJldHMgPSAtRU5PREVWOworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJZ290byBlbmQ7CisJCX0gZWxzZSB7CisJCQlmaWxlX2V4dC0+dGltZXJfY291bnQgPSBIRUNJX0NPTk5FQ1RfVElNRU9VVDsKKwkJCXByaXZfY2ItPmZpbGVfcHJpdmF0ZSA9IGZpbGVfZXh0OworCQkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYi0+Y2JfbGlzdCwKKwkJCQkgICAgICAmZGV2LT5jdHJsX3JkX2xpc3QuaGVjaV9jYi4KKwkJCQkgICAgICBjYl9saXN0KTsKKwkJfQorCisKKwl9IGVsc2UgeworCQlwcml2X2NiLT5maWxlX3ByaXZhdGUgPSBmaWxlX2V4dDsKKwkJREJHKCJhZGQgY29ubmVjdCBjYiB0byBjb250cm9sIHdyaXRlIGxpc3QuXG4iKTsKKwkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYi0+Y2JfbGlzdCwKKwkJCSAgICAgICZkZXYtPmN0cmxfd3JfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCX0KKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJZXJyID0gd2FpdF9ldmVudF90aW1lb3V0KGRldi0+d2FpdF9yZWN2ZF9tc2csCisJCQkoSEVDSV9GSUxFX0NPTk5FQ1RFRCA9PSBmaWxlX2V4dC0+c3RhdGUKKwkJCSB8fCBIRUNJX0ZJTEVfRElTQ09OTkVDVEVEID09IGZpbGVfZXh0LT5zdGF0ZSksCisJCQl0aW1lb3V0ICogSFopOworCisJaWYgKEhFQ0lfRklMRV9DT05ORUNURUQgPT0gZmlsZV9leHQtPnN0YXRlKSB7CisJCURCRygic3VjY2Vzc2Z1bGx5IGNvbm5lY3RlZCB0byBGVyBjbGllbnQuXG4iKTsKKwkJcmV0cyA9IGZpbGVfZXh0LT5zdGF0dXM7CisJCS8qIG5vdyBjb3B5IHRoZSBkYXRhIHRvIHVzZXIgc3BhY2UgKi8KKwkJaWYgKGNvcHlfdG9fdXNlcihrX21zZy5kYXRhLCByZXNfbXNnLmRhdGEsIHJlc19tc2cuc2l6ZSkpIHsKKwkJCXJldHMgPSAtRUZBVUxUOworCQkJZ290byBlbmQ7CisJCX0KKwkJaWYgKHB1dF91c2VyKHJlc19tc2cuc2l6ZSwgJnVfbXNnLT5zaXplKSkgeworCQkJcmV0cyA9IC1FRkFVTFQ7CisJCQlnb3RvIGVuZDsKKwkJfQorCQlnb3RvIGVuZDsKKwl9IGVsc2UgeworCQlEQkcoImZhaWxlZCB0byBjb25uZWN0IHRvIEZXIGNsaWVudC5maWxlX2V4dC0+c3RhdGUgPSAlZC5cbiIsCisJCSAgICBmaWxlX2V4dC0+c3RhdGUpOworCQlpZiAoIWVycikgeworCQkJREJHKCJ3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCBmYWlsZWQgb24gY2xpZW50IgorCQkJICAgICIgY29ubmVjdCBtZXNzYWdlIGZ3IHJlc3BvbnNlIG1lc3NhZ2UuXG4iKTsKKwkJfQorCQlyZXRzID0gLUVGQVVMVDsKKwkJZ290byByZW1vdmVfbGlzdDsKKwl9CisKK3JlbW92ZV9saXN0OgorCWlmIChwcml2X2NiKSB7CisJCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWhlY2lfZmx1c2hfbGlzdCgmZGV2LT5jdHJsX3JkX2xpc3QsIGZpbGVfZXh0KTsKKwkJaGVjaV9mbHVzaF9saXN0KCZkZXYtPmN0cmxfd3JfbGlzdCwgZmlsZV9leHQpOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJfQorZW5kOgorCURCRygiZnJlZSBjb25uZWN0IGNiIG1lbW9yeS4iKTsKKwlrZnJlZShyZXFfbXNnLmRhdGEpOworCWtmcmVlKHJlc19tc2cuZGF0YSk7CisJa2ZyZWUocHJpdl9jYik7CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogaGVjaV9pb2N0bF93ZCAgLSB0aGUgd2QgSU9DVEwgZnVuY3Rpb24KKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAaWZfbnVtOiAgbWlub3IgbnVtYmVyCisgKiBAa19tc2c6IGRhdGEgaW4ga2VybmVsIG9uIHRoZSBzdGFjaworICogQGZpbGVfZXh0OiBwcml2YXRlIGRhdGEgb2YgdGhlIGZpbGUgb2JqZWN0CisgKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGZhaWx1cmUuCisgKi8KK2ludCBoZWNpX2lvY3RsX3dkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpZl9udW0sCisJCSAgc3RydWN0IGhlY2lfbWVzc2FnZV9kYXRhIGtfbXNnLAorCQkgIHN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHQpCit7CisJaW50IHJldHMgPSAwOworCXN0cnVjdCBoZWNpX21lc3NhZ2VfZGF0YSByZXFfbXNnOwkvKmluIGtlcm5lbCBvbiB0aGUgc3RhY2sgKi8KKworCWlmIChpZl9udW0gIT0gSEVDSV9NSU5PUl9OVU1CRVIpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwlpZiAoa19tc2cuc2l6ZSAhPSBIRUNJX1dBVENIRE9HX0RBVEFfU0laRSkgeworCQlEQkcoInVzZXIgYnVmZmVyIGhhcyBpbnZhbGlkIHNpemUuXG4iKTsKKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KKwlzcGluX3VubG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisKKwlyZXFfbXNnLmRhdGEgPSBrbWFsbG9jKEhFQ0lfV0FUQ0hET0dfREFUQV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcV9tc2cuZGF0YSkgeworCQlEQkcoImZhaWxlZCBhbGxvY2F0aW9uIHJlcXVlc3QgYnVmZmVyIHNpemUgPSAlZC5cbiIsCisJCSAgICBIRUNJX1dBVENIRE9HX0RBVEFfU0laRSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXFfbXNnLnNpemUgPSBIRUNJX1dBVENIRE9HX0RBVEFfU0laRTsKKworCS8qIGNvcHkgdGhlIG1lc3NhZ2UgdG8ga2VybmVsIHNwYWNlIC0gdXNlIGEgcG9pbnRlciBhbHJlYWR5CisJICogY29waWVkIGludG8ga2VybmVsIHNwYWNlCisJICovCisJaWYgKGNvcHlfZnJvbV91c2VyKHJlcV9tc2cuZGF0YSwga19tc2cuZGF0YSwgcmVxX21zZy5zaXplKSkgeworCQlyZXRzID0gLUVGQVVMVDsKKwkJZ290byBlbmQ7CisJfQorCXNwaW5fbG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJaWYgKGRldi0+aGVjaV9zdGF0ZSAhPSBIRUNJX0VOQUJMRUQpIHsKKwkJcmV0cyA9IC1FTk9ERVY7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJZ290byBlbmQ7CisJfQorCisJaWYgKGRldi0+d2RfZmlsZV9leHQuc3RhdGUgIT0gSEVDSV9GSUxFX0NPTk5FQ1RFRCkgeworCQlyZXRzID0gLUVOT0RFVjsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlnb3RvIGVuZDsKKwl9CisJaWYgKCFkZXYtPmFzZl9tb2RlKSB7CisJCXJldHMgPSAtRUlPOworCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCWdvdG8gZW5kOworCX0KKworCW1lbWNweSgmZGV2LT53ZF9kYXRhW0hFQ0lfV0RfUEFSQU1TX1NJWkVdLCByZXFfbXNnLmRhdGEsCisJICAgICAgIEhFQ0lfV0FUQ0hET0dfREFUQV9TSVpFKTsKKworCWRldi0+d2RfdGltZW91dCA9IChyZXFfbXNnLmRhdGFbMV0gPDwgOCkgKyByZXFfbXNnLmRhdGFbMF07CisJZGV2LT53ZF9wZW5kaW5nID0gMDsKKwlkZXYtPndkX2R1ZV9jb3VudGVyID0gMTsJLyogbmV4dCB0aW1lciAqLworCWlmIChkZXYtPndkX3RpbWVvdXQgPT0gMCkgeworCQltZW1jcHkoZGV2LT53ZF9kYXRhLCBoZWNpX3N0b3Bfd2RfcGFyYW1zLAorCQkgICAgICAgSEVDSV9XRF9QQVJBTVNfU0laRSk7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGRldi0+d2RfZGF0YSwgaGVjaV9zdGFydF93ZF9wYXJhbXMsCisJCSAgICAgICBIRUNJX1dEX1BBUkFNU19TSVpFKTsKKwkJbW9kX3RpbWVyKCZkZXYtPndkX3RpbWVyLCBqaWZmaWVzKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworZW5kOgorCWtmcmVlKHJlcV9tc2cuZGF0YSk7CisJcmV0dXJuIHJldHM7Cit9CisKKworLyoqCisgKiBoZWNpX2lvY3RsX2J5cGFzc193ZCAgLSB0aGUgYnlwYXNzX3dkIElPQ1RMIGZ1bmN0aW9uCisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGlmX251bTogIG1pbm9yIG51bWJlcgorICogQGtfbXNnOiBkYXRhIGluIGtlcm5lbCBvbiB0aGUgc3RhY2sKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgaGVjaV9pb2N0bF9ieXBhc3Nfd2Qoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGlmX251bSwKKwkJICBzdHJ1Y3QgaGVjaV9tZXNzYWdlX2RhdGEga19tc2csCisJCSAgc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICpmaWxlX2V4dCkKK3sKKwlfX3U4IGZsYWcgPSAwOworCWludCByZXRzID0gMDsKKworCWlmIChpZl9udW0gIT0gSEVDSV9NSU5PUl9OVU1CRVIpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrKCZmaWxlX2V4dC0+ZmlsZV9sb2NrKTsKKwlpZiAoa19tc2cuc2l6ZSA8IDEpIHsKKwkJREJHKCJ1c2VyIGJ1ZmZlciBsZXNzIHRoYW4gSEVDSV9XQVRDSERPR19EQVRBX1NJWkUuXG4iKTsKKwkJc3Bpbl91bmxvY2soJmZpbGVfZXh0LT5maWxlX2xvY2spOworCQlyZXR1cm4gLUVNU0dTSVpFOworCX0KKwlzcGluX3VubG9jaygmZmlsZV9leHQtPmZpbGVfbG9jayk7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZmbGFnLCBrX21zZy5kYXRhLCAxKSkgeworCQlyZXRzID0gLUVGQVVMVDsKKwkJZ290byBlbmQ7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlmbGFnID0gZmxhZyA/ICgxKSA6ICgwKTsKKwlkZXYtPndkX2J5cGFzcyA9IGZsYWc7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworZW5kOgorCXJldHVybiByZXRzOworfQorCisvKioKKyAqIGZpbmRfcHRoaV9yZWFkX2xpc3RfZW50cnkgLSBmaW5kcyBhIFBUSElsaXN0IGVudHJ5IGZvciBjdXJyZW50IGZpbGUKKyAqCisgKiBAZGV2OiBEZXZpY2Ugb2JqZWN0IGZvciBvdXIgZHJpdmVyCisgKiBAZmlsZTogcG9pbnRlciB0byBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgICByZXR1cm5lZCBhIGxpc3QgZW50cnkgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCitzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpmaW5kX3B0aGlfcmVhZF9saXN0X2VudHJ5KAorCQlzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0X3RlbXA7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYl9wb3MgPSBOVUxMOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfbmV4dCA9IE5VTEw7CisKKwlpZiAoKGRldi0+cHRoaV9yZWFkX2NvbXBsZXRlX2xpc3Quc3RhdHVzID09IDApICYmCisJICAgICFsaXN0X2VtcHR5KCZkZXYtPnB0aGlfcmVhZF9jb21wbGV0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXZfY2JfcG9zLCBwcml2X2NiX25leHQsCisJCSAgICAmZGV2LT5wdGhpX3JlYWRfY29tcGxldGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QsIGNiX2xpc3QpIHsKKwkJCWZpbGVfZXh0X3RlbXAgPSAoc3RydWN0IGhlY2lfZmlsZV9wcml2YXRlICopCisJCQkJCXByaXZfY2JfcG9zLT5maWxlX3ByaXZhdGU7CisJCQlpZiAoKGZpbGVfZXh0X3RlbXAgIT0gTlVMTCkgJiYKKwkJCSAgICAoZmlsZV9leHRfdGVtcCA9PSAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSAmJgorCQkJICAgIChwcml2X2NiX3Bvcy0+ZmlsZV9vYmplY3QgPT0gZmlsZSkpCisJCQkJcmV0dXJuIHByaXZfY2JfcG9zOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHB0aGlfcmVhZCAtIHJlYWQgZGF0YSBmcm9tIHB0aGkgY2xpZW50CisgKgorICogQGRldjogRGV2aWNlIG9iamVjdCBmb3Igb3VyIGRyaXZlcgorICogQGlmX251bTogIG1pbm9yIG51bWJlcgorICogQGZpbGU6IHBvaW50ZXIgdG8gZmlsZSBvYmplY3QKKyAqIEAqdWJ1ZjogcG9pbnRlciB0byB1c2VyIGRhdGEgaW4gdXNlciBzcGFjZQorICogQGxlbmd0aDogZGF0YSBsZW5ndGggdG8gcmVhZAorICogQG9mZnNldDogZGF0YSByZWFkIG9mZnNldAorICoKKyAqIHJldHVybnMKKyAqICByZXR1cm5lZCBkYXRhIGxlbmd0aCBvbiBzdWNjZXNzLAorICogIHplcm8gaWYgbm8gZGF0YSB0byByZWFkLAorICogIG5lZ2F0aXZlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBwdGhpX3JlYWQoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwgaW50IGlmX251bSwgc3RydWN0IGZpbGUgKmZpbGUsCisJICAgICAgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBsZW5ndGgsIGxvZmZfdCAqb2Zmc2V0KQoreworCWludCByZXRzID0gMDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCV9fdTggaTsKKwl1bnNpZ25lZCBsb25nIGN1cnJ0aW1lID0gZ2V0X3NlY29uZHMoKTsKKworCWlmICgoaWZfbnVtICE9IEhFQ0lfTUlOT1JfTlVNQkVSKSB8fCAoIWRldikpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKChmaWxlX2V4dCA9PSBOVUxMKSB8fCAoZmlsZV9leHQgIT0gJmRldi0+aWFtdGhpZl9maWxlX2V4dCkpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faGVjaV9tZV9jbGllbnRzOyBpKyspIHsKKwkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgPT0KKwkJICAgIGRldi0+aWFtdGhpZl9maWxlX2V4dC5tZV9jbGllbnRfaWQpCisJCQlicmVhazsKKwl9CisJQlVHX09OKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgIT0gZmlsZV9leHQtPm1lX2NsaWVudF9pZCk7CisJaWYgKChpID09IGRldi0+bnVtX2hlY2lfbWVfY2xpZW50cykKKwkgICAgfHwgKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgIT0KKwkJZGV2LT5pYW10aGlmX2ZpbGVfZXh0Lm1lX2NsaWVudF9pZCkpIHsKKwkJREJHKCJQVEhJIGNsaWVudCBub3QgZm91bmQuXG4iKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcHJpdl9jYiA9IGZpbmRfcHRoaV9yZWFkX2xpc3RfZW50cnkoZGV2LCBmaWxlKTsKKwlpZiAoIXByaXZfY2IpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQlyZXR1cm4gMDsgLyogTm8gbW9yZSBkYXRhIHRvIHJlYWQgKi8KKwl9IGVsc2UgeworCQlpZiAocHJpdl9jYiAmJgorCQkgICAgKGN1cnJ0aW1lIC0gcHJpdl9jYi0+cmVhZF90aW1lID4gSUFNVEhJRl9SRUFEX1RJTUVSKSkgeworCQkJLyogMTUgc2VjIGZvciB0aGUgbWVzc2FnZSBoYXMgZXhwaXJlZCAqLworCQkJbGlzdF9kZWwoJnByaXZfY2ItPmNiX2xpc3QpOworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCQkJcmV0cyA9IC1FVElNRURPVVQ7CisJCQlnb3RvIGZyZWU7CisJCX0KKwkJLyogaWYgdGhlIHdob2xlIG1lc3NhZ2Ugd2lsbCBmaXQgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QgKi8KKwkJaWYgKChwcml2X2NiLT5pbmZvcm1hdGlvbiA+PSAqb2Zmc2V0KSAgJiYKKwkJICAgIChsZW5ndGggPj0gKHByaXZfY2ItPmluZm9ybWF0aW9uIC0gKm9mZnNldCkpKQorCQkJbGlzdF9kZWwoJnByaXZfY2ItPmNiX2xpc3QpOworCQllbHNlIGlmICgocHJpdl9jYi0+aW5mb3JtYXRpb24gPiAwKSAmJgorCQkgICAgKHByaXZfY2ItPmluZm9ybWF0aW9uIDw9ICpvZmZzZXQpKSB7CisJCQkvKiBlbmQgb2YgdGhlIG1lc3NhZ2UgaGFzIGJlZW4gcmVhY2hlZCAqLworCQkJbGlzdF9kZWwoJnByaXZfY2ItPmNiX2xpc3QpOworCQkJcmV0cyA9IDA7CisJCQlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJCQlnb3RvIGZyZWU7CisJCX0KKwkJLyogZWxzZSBtZWFucyB0aGF0IG5vdCBmdWxsIGJ1ZmZlciB3aWxsIGJlIHJlYWQgYW5kIGRvIG5vdAorCQkgKiByZW1vdmUgbWVzc2FnZSBmcm9tIGRlbGV0aW9uIGxpc3QKKwkJICovCisJfQorCURCRygicHRoaSBwcml2X2NiLT5yZXNwb25zZV9idWZmZXIgc2l6ZSAtICVkXG4iLAorCSAgICBwcml2X2NiLT5yZXNwb25zZV9idWZmZXIuc2l6ZSk7CisJREJHKCJwdGhpIHByaXZfY2ItPmluZm9ybWF0aW9uIC0gJWx1XG4iLAorCSAgICBwcml2X2NiLT5pbmZvcm1hdGlvbik7CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCisJLyogbGVuZ3RoIGlzIGJlaW5nIHR1cm5jYXRlZCB0byBQQUdFX1NJWkUsIGhvd2V2ZXIsCisJICogdGhlIGluZm9ybWF0aW9uIG1heSBiZSBsb25nZXIgKi8KKwlsZW5ndGggPSBsZW5ndGggPCAocHJpdl9jYi0+aW5mb3JtYXRpb24gLSAqb2Zmc2V0KSA/CisJCQlsZW5ndGggOiAocHJpdl9jYi0+aW5mb3JtYXRpb24gLSAqb2Zmc2V0KTsKKworCWlmIChjb3B5X3RvX3VzZXIodWJ1ZiwKKwkJCSBwcml2X2NiLT5yZXNwb25zZV9idWZmZXIuZGF0YSArICpvZmZzZXQsCisJCQkgbGVuZ3RoKSkKKwkJcmV0cyA9IC1FRkFVTFQ7CisJZWxzZSB7CisJCXJldHMgPSBsZW5ndGg7CisJCWlmICgoKm9mZnNldCArIGxlbmd0aCkgPCBwcml2X2NiLT5pbmZvcm1hdGlvbikgeworCQkJKm9mZnNldCArPSBsZW5ndGg7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KK2ZyZWU6CisJREJHKCJmcmVlIHB0aGkgY2IgbWVtb3J5LlxuIik7CisJKm9mZnNldCA9IDA7CisJaGVjaV9mcmVlX2NiX3ByaXZhdGUocHJpdl9jYik7CitvdXQ6CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogaGVjaV9zdGFydF9yZWFkICAtIHRoZSBzdGFydCByZWFkIGNsaWVudCBtZXNzYWdlIGZ1bmN0aW9uLgorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBpZl9udW06ICBtaW5vciBudW1iZXIKKyAqIEBmaWxlX2V4dDogcHJpdmF0ZSBkYXRhIG9mIHRoZSBmaWxlIG9iamVjdAorICoKKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCA8MCBvbiBmYWlsdXJlLgorICovCitpbnQgaGVjaV9zdGFydF9yZWFkKHN0cnVjdCBpYW10X2hlY2lfZGV2aWNlICpkZXYsIGludCBpZl9udW0sCisJCSAgICBzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKmZpbGVfZXh0KQoreworCWludCByZXRzID0gMDsKKwlfX3U4IGk7CisJc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYiA9IE5VTEw7CisKKwlpZiAoKGlmX251bSAhPSBIRUNJX01JTk9SX05VTUJFUikgfHwgKCFkZXYpIHx8ICghZmlsZV9leHQpKSB7CisJCURCRygicmVjZWl2ZWQgd3JvbmcgZnVuY3Rpb24gaW5wdXQgcGFyYW0uXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChmaWxlX2V4dC0+c3RhdGUgIT0gSEVDSV9GSUxFX0NPTk5FQ1RFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCWlmIChkZXYtPmhlY2lfc3RhdGUgIT0gSEVDSV9FTkFCTEVEKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlEQkcoImNoZWNrIGlmIHJlYWQgaXMgcGVuZGluZy5cbiIpOworCWlmICgoZmlsZV9leHQtPnJlYWRfcGVuZGluZykgfHwgKGZpbGVfZXh0LT5yZWFkX2NiICE9IE5VTEwpKSB7CisJCURCRygicmVhZCBpcyBwZW5kaW5nLlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCXByaXZfY2IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2X2NiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCURCRygiYWxsb2NhdGlvbiBjYWxsIGJhY2sgc3VjY2Vzc1xuIgorCSAgICAiaG9zdCBjbGllbnQgPSAlZCwgTUUgY2xpZW50ID0gJWRcbiIsCisJICAgIGZpbGVfZXh0LT5ob3N0X2NsaWVudF9pZCwgZmlsZV9leHQtPm1lX2NsaWVudF9pZCk7CisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1faGVjaV9tZV9jbGllbnRzOyBpKyspIHsKKwkJaWYgKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgPT0gZmlsZV9leHQtPm1lX2NsaWVudF9pZCkKKwkJCWJyZWFrOworCisJfQorCisJQlVHX09OKGRldi0+bWVfY2xpZW50c1tpXS5jbGllbnRfaWQgIT0gZmlsZV9leHQtPm1lX2NsaWVudF9pZCk7CisJaWYgKGkgPT0gZGV2LT5udW1faGVjaV9tZV9jbGllbnRzKSB7CisJCXJldHMgPSAtRU5PREVWOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlwcml2X2NiLT5yZXNwb25zZV9idWZmZXIuc2l6ZSA9IGRldi0+bWVfY2xpZW50c1tpXS5wcm9wcy5tYXhfbXNnX2xlbmd0aDsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5kZXZpY2VfbG9jayk7CisJcHJpdl9jYi0+cmVzcG9uc2VfYnVmZmVyLmRhdGEgPQorCSAgICBrbWFsbG9jKHByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlci5zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlci5kYXRhKSB7CisJCXJldHMgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCURCRygiYWxsb2NhdGlvbiBjYWxsIGJhY2sgZGF0YSBzdWNjZXNzLlxuIik7CisJcHJpdl9jYi0+bWFqb3JfZmlsZV9vcGVyYXRpb25zID0gSEVDSV9SRUFEOworCS8qIG1ha2Ugc3VyZSBpbmZvcm1hdGlvbiBpcyB6ZXJvIGJlZm9yZSB3ZSBzdGFydCAqLworCXByaXZfY2ItPmluZm9ybWF0aW9uID0gMDsKKwlwcml2X2NiLT5maWxlX3ByaXZhdGUgPSAodm9pZCAqKSBmaWxlX2V4dDsKKwlmaWxlX2V4dC0+cmVhZF9jYiA9IHByaXZfY2I7CisJc3Bpbl9sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKKwlpZiAoZGV2LT5ob3N0X2J1ZmZlcl9pc19lbXB0eSkgeworCQlkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5ID0gMDsKKwkJaWYgKCFoZWNpX3NlbmRfZmxvd19jb250cm9sKGRldiwgZmlsZV9leHQpKSB7CisJCQlyZXRzID0gLUVOT0RFVjsKKwkJCWdvdG8gdW5sb2NrOworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYi0+Y2JfbGlzdCwKKwkJCQkgICAgICAmZGV2LT5yZWFkX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwkJfQorCX0gZWxzZSB7CisJCWxpc3RfYWRkX3RhaWwoJnByaXZfY2ItPmNiX2xpc3QsCisJCQkgICAgICAmZGV2LT5jdHJsX3dyX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+ZGV2aWNlX2xvY2spOworCXJldHVybiByZXRzOwordW5sb2NrOgorCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmRldmljZV9sb2NrKTsKK2ZhaWw6CisJaGVjaV9mcmVlX2NiX3ByaXZhdGUocHJpdl9jYik7CisJcmV0dXJuIHJldHM7Cit9CisKKy8qKgorICogcHRoaV93cml0ZSAtIHdyaXRlIGlhbXRoaWYgZGF0YSB0byBwdGhpIGNsaWVudAorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqIEBwcml2X2NiOiBoZWNpIGNhbGwgYmFjayBzdHJ1Y3QKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLworaW50IHB0aGlfd3JpdGUoc3RydWN0IGlhbXRfaGVjaV9kZXZpY2UgKmRldiwKKwkgICAgICAgc3RydWN0IGhlY2lfY2JfcHJpdmF0ZSAqcHJpdl9jYikKK3sKKwlpbnQgcmV0cyA9IDA7CisJc3RydWN0IGhlY2lfbXNnX2hkciBoZWNpX2hkcjsKKworCWlmICgoIWRldikgfHwgKCFwcml2X2NiKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlEQkcoIndyaXRlIGRhdGEgdG8gcHRoaSBjbGllbnQuXG4iKTsKKworCWRldi0+aWFtdGhpZl9zdGF0ZSA9IEhFQ0lfSUFNVEhJRl9XUklUSU5HOworCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gcHJpdl9jYjsKKwlkZXYtPmlhbXRoaWZfZmlsZV9vYmplY3QgPSBwcml2X2NiLT5maWxlX29iamVjdDsKKwlkZXYtPmlhbXRoaWZfY2FuY2VsZWQgPSAwOworCWRldi0+aWFtdGhpZl9pb2N0bCA9IDE7CisJZGV2LT5pYW10aGlmX21zZ19idWZfc2l6ZSA9IHByaXZfY2ItPnJlcXVlc3RfYnVmZmVyLnNpemU7CisJbWVtY3B5KGRldi0+aWFtdGhpZl9tc2dfYnVmLCBwcml2X2NiLT5yZXF1ZXN0X2J1ZmZlci5kYXRhLAorCSAgICBwcml2X2NiLT5yZXF1ZXN0X2J1ZmZlci5zaXplKTsKKworCWlmIChmbG93X2N0cmxfY3JlZHMoZGV2LCAmZGV2LT5pYW10aGlmX2ZpbGVfZXh0KSAmJgorCSAgICBkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5KSB7CisJCWRldi0+aG9zdF9idWZmZXJfaXNfZW1wdHkgPSAwOworCQlpZiAocHJpdl9jYi0+cmVxdWVzdF9idWZmZXIuc2l6ZSA+CisJCSAgICAoKChkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX0NCRCkgPj4gMjQpICoKKwkJICAgIHNpemVvZihfX3UzMikpIC0gc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpKSB7CisJCQloZWNpX2hkci5sZW5ndGggPQorCQkJICAgICgoKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfQ0JEKSA+PiAyNCkgKgorCQkJICAgIHNpemVvZihfX3UzMikpIC0gc2l6ZW9mKHN0cnVjdCBoZWNpX21zZ19oZHIpOworCQkJaGVjaV9oZHIubXNnX2NvbXBsZXRlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWhlY2lfaGRyLmxlbmd0aCA9IHByaXZfY2ItPnJlcXVlc3RfYnVmZmVyLnNpemU7CisJCQloZWNpX2hkci5tc2dfY29tcGxldGUgPSAxOworCQl9CisKKwkJaGVjaV9oZHIuaG9zdF9hZGRyID0gZGV2LT5pYW10aGlmX2ZpbGVfZXh0Lmhvc3RfY2xpZW50X2lkOworCQloZWNpX2hkci5tZV9hZGRyID0gZGV2LT5pYW10aGlmX2ZpbGVfZXh0Lm1lX2NsaWVudF9pZDsKKwkJaGVjaV9oZHIucmVzZXJ2ZWQgPSAwOworCQlkZXYtPmlhbXRoaWZfbXNnX2J1Zl9pbmRleCArPSBoZWNpX2hkci5sZW5ndGg7CisJCWlmICghaGVjaV93cml0ZV9tZXNzYWdlKGRldiwgJmhlY2lfaGRyLAorCQkJCQkodW5zaWduZWQgY2hhciAqKShkZXYtPmlhbXRoaWZfbXNnX2J1ZiksCisJCQkJCWhlY2lfaGRyLmxlbmd0aCkpCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQlpZiAoaGVjaV9oZHIubXNnX2NvbXBsZXRlKSB7CisJCQlmbG93X2N0cmxfcmVkdWNlKGRldiwgJmRldi0+aWFtdGhpZl9maWxlX2V4dCk7CisJCQlkZXYtPmlhbXRoaWZfZmxvd19jb250cm9sX3BlbmRpbmcgPSAxOworCQkJZGV2LT5pYW10aGlmX3N0YXRlID0gSEVDSV9JQU1USElGX0ZMT1dfQ09OVFJPTDsKKwkJCURCRygiYWRkIHB0aGkgY2IgdG8gd3JpdGUgd2FpdGluZyBsaXN0XG4iKTsKKwkJCWRldi0+aWFtdGhpZl9jdXJyZW50X2NiID0gcHJpdl9jYjsKKwkJCWRldi0+aWFtdGhpZl9maWxlX29iamVjdCA9IHByaXZfY2ItPmZpbGVfb2JqZWN0OworCQkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYi0+Y2JfbGlzdCwKKwkJCQkgICAgICAmZGV2LT53cml0ZV93YWl0aW5nX2xpc3QuaGVjaV9jYi5jYl9saXN0KTsKKwkJfSBlbHNlIHsKKwkJCURCRygibWVzc2FnZSBkb2VzIG5vdCBjb21wbGV0ZSwgIgorCQkJCQkic28gYWRkIHB0aGkgY2IgdG8gd3JpdGUgbGlzdC5cbiIpOworCQkJbGlzdF9hZGRfdGFpbCgmcHJpdl9jYi0+Y2JfbGlzdCwKKwkJCQkgICAgICAmZGV2LT53cml0ZV9saXN0LmhlY2lfY2IuY2JfbGlzdCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIShkZXYtPmhvc3RfYnVmZmVyX2lzX2VtcHR5KSkKKwkJCURCRygiaG9zdCBidWZmZXIgaXMgbm90IGVtcHR5Iik7CisKKwkJREJHKCJObyBmbG93IGNvbnRyb2wgY3JlZGVudGlhbHMsICIKKwkJCQkic28gYWRkIGlhbXRoaWYgY2IgdG8gd3JpdGUgbGlzdC5cbiIpOworCQlsaXN0X2FkZF90YWlsKCZwcml2X2NiLT5jYl9saXN0LAorCQkJICAgICAgJmRldi0+d3JpdGVfbGlzdC5oZWNpX2NiLmNiX2xpc3QpOworCX0KKwlyZXR1cm4gcmV0czsKK30KKworLyoqCisgKiBpYW10aGlmX2lvY3RsX3NlbmRfbXNnIC0gc2VuZCBjbWQgZGF0YSB0byBwdGhpIGNsaWVudAorICoKKyAqIEBkZXY6IERldmljZSBvYmplY3QgZm9yIG91ciBkcml2ZXIKKyAqCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgPDAgb24gZmFpbHVyZS4KKyAqLwordm9pZCBydW5fbmV4dF9pYW10aGlmX2NtZChzdHJ1Y3QgaWFtdF9oZWNpX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBoZWNpX2ZpbGVfcHJpdmF0ZSAqZmlsZV9leHRfdG1wOworCXN0cnVjdCBoZWNpX2NiX3ByaXZhdGUgKnByaXZfY2JfcG9zID0gTlVMTDsKKwlzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiX25leHQgPSBOVUxMOworCWludCBzdGF0dXMgPSAwOworCisJaWYgKCFkZXYpCisJCXJldHVybjsKKworCWRldi0+aWFtdGhpZl9tc2dfYnVmX3NpemUgPSAwOworCWRldi0+aWFtdGhpZl9tc2dfYnVmX2luZGV4ID0gMDsKKwlkZXYtPmlhbXRoaWZfY2FuY2VsZWQgPSAwOworCWRldi0+aWFtdGhpZl9pb2N0bCA9IDE7CisJZGV2LT5pYW10aGlmX3N0YXRlID0gSEVDSV9JQU1USElGX0lETEU7CisJZGV2LT5pYW10aGlmX3RpbWVyID0gMDsKKwlkZXYtPmlhbXRoaWZfZmlsZV9vYmplY3QgPSBOVUxMOworCisJaWYgKGRldi0+cHRoaV9jbWRfbGlzdC5zdGF0dXMgPT0gMCAmJgorCSAgICAhbGlzdF9lbXB0eSgmZGV2LT5wdGhpX2NtZF9saXN0LmhlY2lfY2IuY2JfbGlzdCkpIHsKKwkJREJHKCJjb21wbGV0ZSBwdGhpIGNtZF9saXN0IGNiLlxuIik7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXZfY2JfcG9zLCBwcml2X2NiX25leHQsCisJCSAgICAmZGV2LT5wdGhpX2NtZF9saXN0LmhlY2lfY2IuY2JfbGlzdCwgY2JfbGlzdCkgeworCQkJbGlzdF9kZWwoJnByaXZfY2JfcG9zLT5jYl9saXN0KTsKKwkJCWZpbGVfZXh0X3RtcCA9IChzdHJ1Y3QgaGVjaV9maWxlX3ByaXZhdGUgKikKKwkJCQkJcHJpdl9jYl9wb3MtPmZpbGVfcHJpdmF0ZTsKKworCQkJaWYgKChmaWxlX2V4dF90bXAgIT0gTlVMTCkgJiYKKwkJCSAgICAoZmlsZV9leHRfdG1wID09ICZkZXYtPmlhbXRoaWZfZmlsZV9leHQpKSB7CisJCQkJc3RhdHVzID0gcHRoaV93cml0ZShkZXYsIHByaXZfY2JfcG9zKTsKKwkJCQlpZiAoc3RhdHVzICE9IDApIHsKKwkJCQkJREJHKCJwdGhpIHdyaXRlIGZhaWxlZCBzdGF0dXMgPSAlZFxuIiwKKwkJCQkJCQlzdGF0dXMpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCisvKioKKyAqIGhlY2lfZnJlZV9jYl9wcml2YXRlIC0gZnJlZSBoZWNpX2NiX3ByaXZhdGUgcmVsYXRlZCBtZW1vcnkKKyAqCisgKiBAcHJpdl9jYjogaGVjaSBjYWxsYmFjayBzdHJ1Y3QKKyAqLwordm9pZCBoZWNpX2ZyZWVfY2JfcHJpdmF0ZShzdHJ1Y3QgaGVjaV9jYl9wcml2YXRlICpwcml2X2NiKQoreworCWlmIChwcml2X2NiID09IE5VTEwpCisJCXJldHVybjsKKworCWtmcmVlKHByaXZfY2ItPnJlcXVlc3RfYnVmZmVyLmRhdGEpOworCWtmcmVlKHByaXZfY2ItPnJlc3BvbnNlX2J1ZmZlci5kYXRhKTsKKwlrZnJlZShwcml2X2NiKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODUyZDRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L0tjb25maWcKQEAgLTAsMCArMSwyMSBAQAorY29uZmlnIExJTkU2X1VTQgorCXRyaXN0YXRlICJMaW5lNiBVU0Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQiAmJiBTTkQKKwlzZWxlY3QgU05EX1JBV01JREkKKwloZWxwCisJICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgZ3VpdGFyIGFtcCwgY2FiLCBhbmQgZWZmZWN0cyBtb2RlbGxlcgorCSAgUE9EeHQgUHJvIGJ5IExpbmU2IChhbmQgc2ltaWxhciBkZXZpY2VzKSwgc3VwcG9ydGluZyB0aGUKKwkgIGZvbGxvd2luZyBmZWF0dXJlczoKKwkgICAgKiBSZWFkaW5nL3dyaXRpbmcgaW5kaXZpZHVhbCBwYXJhbWV0ZXJzCisJICAgICogUmVhZGluZy93cml0aW5nIGNvbXBsZXRlIGNoYW5uZWwsIGVmZmVjdHMgc2V0dXAsIGFuZCBhbXAKKwkgICAgICBzZXR1cCBkYXRhCisJICAgICogQ2hhbm5lbCBzd2l0Y2hpbmcKKwkgICAgKiBWaXJ0dWFsIE1JREkgaW50ZXJmYWNlCisJICAgICogVHVuZXIgYWNjZXNzCisJICAgICogUGxheWJhY2svY2FwdHVyZS9taXhlciBkZXZpY2UgZm9yIGFueSBBTFNBLWNvbXBhdGlibGUgUENNCisJICAgICAgYXVkaW8gYXBwbGljYXRpb24KKwkgICAgKiBTaWduYWwgcm91dGluZyAocmVjb3JkIGNsZWFuL3Byb2Nlc3NlZCBndWl0YXIgc2lnbmFsLAorCSAgICAgIHJlLWFtcGluZykKKworCSAgUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgdGhlIFZhcmlheCBXb3JrYmVuY2ggaXMgaW5jbHVkZWQuCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWM5M2VkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKK29iai0kKENPTkZJR19MSU5FNl9VU0IpCQkrPSBsaW5lNnVzYi5vCisKK2xpbmU2dXNiLW9ianMgOj0gCQlcCisJCWF1ZGlvLm8JCVwKKwkJY2FwdHVyZS5vCVwKKwkJY29udHJvbC5vCVwKKwkJZHJpdmVyLm8JXAorCQlkdW1wcmVxdWVzdC5vCVwKKwkJbWlkaS5vCQlcCisJCW1pZGlidWYubwlcCisJCXBjbS5vCQlcCisJCXBsYXliYWNrLm8JXAorCQlwb2QubwkJXAorCQl0b25lcG9ydC5vCVwKKwkJdmFyaWF4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9hdWRpby5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2F1ZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhOTQ2OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9hdWRpby5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisjaW5jbHVkZSAiYXVkaW8uaCIKKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisKKworc3RhdGljIGludCBsaW5lNl9pbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKK3N0YXRpYyBjaGFyICpsaW5lNl9pZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKKworCisvKgorCUluaXRpYWxpemUgdGhlIExpbmU2IFVTQiBhdWRpbyBzeXN0ZW0uCisqLworaW50IGxpbmU2X2luaXRfYXVkaW8oc3RydWN0IHVzYl9saW5lNiAqbGluZTYpCit7CisJc3RhdGljIGludCBkZXY7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCisJY2FyZCA9IHNuZF9jYXJkX25ldyhsaW5lNl9pbmRleFtkZXZdLCBsaW5lNl9pZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CisKKwlpZiAoY2FyZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxpbmU2LT5jYXJkID0gY2FyZDsKKworCXN0cmNweShjYXJkLT5kcml2ZXIsIERSSVZFUl9OQU1FKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiTGluZTYtVVNCIik7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIkxpbmU2ICVzIGF0IFVTQiAlcyIsIGxpbmU2LT5wcm9wZXJ0aWVzLT5uYW1lLAorCQlkZXZfbmFtZShsaW5lNi0+aWZjZGV2KSk7ICAvKiA4MCBjaGFycyAtIHNlZSBhc291bmQuaCAqLworCXJldHVybiAwOworfQorCisvKgorCVJlZ2lzdGVyIHRoZSBMaW5lNiBVU0IgYXVkaW8gc3lzdGVtLgorKi8KK2ludCBsaW5lNl9yZWdpc3Rlcl9hdWRpbyhzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIobGluZTYtPmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisJQ2xlYW51cCB0aGUgTGluZTYgVVNCIGF1ZGlvIHN5c3RlbS4KKyovCit2b2lkIGxpbmU2X2NsZWFudXBfYXVkaW8oc3RydWN0IHVzYl9saW5lNiAqbGluZTYpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gbGluZTYtPmNhcmQ7CisKKwlpZiAoY2FyZCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOworCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJbGluZTYtPmNhcmQgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2F1ZGlvLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzAyNDVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2F1ZGlvLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpZm5kZWYgQVVESU9fSAorI2RlZmluZSBBVURJT19ICisKKworI2luY2x1ZGUgImRyaXZlci5oIgorCisKK2V4dGVybiB2b2lkIGxpbmU2X2NsZWFudXBfYXVkaW8oc3RydWN0IHVzYl9saW5lNiAqKTsKK2V4dGVybiBpbnQgbGluZTZfaW5pdF9hdWRpbyhzdHJ1Y3QgdXNiX2xpbmU2ICopOworZXh0ZXJuIGludCBsaW5lNl9yZWdpc3Rlcl9hdWRpbyhzdHJ1Y3QgdXNiX2xpbmU2ICopOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NhcHR1cmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jYXB0dXJlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5M2UyNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jYXB0dXJlLmMKQEAgLTAsMCArMSwzNzIgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorCisjaW5jbHVkZSAiYXVkaW8uaCIKKyNpbmNsdWRlICJwY20uaCIKKyNpbmNsdWRlICJwb2QuaCIKKyNpbmNsdWRlICJjYXB0dXJlLmgiCisKKworLyoKKwlGaW5kIGEgZnJlZSBVUkIgYW5kIHN1Ym1pdCBpdC4KKyovCitzdGF0aWMgaW50IHN1Ym1pdF9hdWRpb19pbl91cmIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaW50IGluZGV4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCBpLCB1cmJfc2l6ZTsKKwlzdHJ1Y3QgdXJiICp1cmJfaW47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZTZwY20tPmxvY2tfYXVkaW9faW4sIGZsYWdzKTsKKwlpbmRleCA9IGZpbmRfZmlyc3RfemVyb19iaXQoJmxpbmU2cGNtLT5hY3RpdmVfdXJiX2luLCBMSU5FNl9JU09fQlVGRkVSUyk7CisKKwlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IExJTkU2X0lTT19CVUZGRVJTKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX2luLCBmbGFncyk7CisJCWRldl9lcnIoczJtKHN1YnN0cmVhbSksICJubyBmcmVlIFVSQiBmb3VuZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXVyYl9pbiA9IGxpbmU2cGNtLT51cmJfYXVkaW9faW5baW5kZXhdOworCXVyYl9zaXplID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fUEFDS0VUUzsgKytpKSB7CisJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmaW4gPSAmdXJiX2luLT5pc29fZnJhbWVfZGVzY1tpXTsKKwkJZmluLT5vZmZzZXQgPSB1cmJfc2l6ZTsKKwkJZmluLT5sZW5ndGggPSBsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplOworCQl1cmJfc2l6ZSArPSBsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplOworCX0KKworCXVyYl9pbi0+dHJhbnNmZXJfYnVmZmVyID0gbGluZTZwY20tPmJ1ZmZlcl9pbiArIGluZGV4ICogTElORTZfSVNPX1BBQ0tFVFMgKiBsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplOworCXVyYl9pbi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHVyYl9zaXplOworCXVyYl9pbi0+Y29udGV4dCA9IHN1YnN0cmVhbTsKKworCWlmICh1c2Jfc3VibWl0X3VyYih1cmJfaW4sIEdGUF9BVE9NSUMpID09IDApCisJCXNldF9iaXQoaW5kZXgsICZsaW5lNnBjbS0+YWN0aXZlX3VyYl9pbik7CisJZWxzZQorCQlkZXZfZXJyKHMybShzdWJzdHJlYW0pLCAiVVJCIGluICMlZCBzdWJtaXNzaW9uIGZhaWxlZFxuIiwgaW5kZXgpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTZwY20tPmxvY2tfYXVkaW9faW4sIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKwlTdWJtaXQgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgY2FwdHVyZSBVUkJzLgorKi8KK3N0YXRpYyBpbnQgc3VibWl0X2F1ZGlvX2luX2FsbF91cmJzKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCWludCByZXQsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX0JVRkZFUlM7ICsraSkgeworCQlyZXQgPSBzdWJtaXRfYXVkaW9faW5fdXJiKHN1YnN0cmVhbSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKwlVbmxpbmsgYWxsIGN1cnJlbnRseSBhY3RpdmUgY2FwdHVyZSBVUkJzLgorKi8KK3N0YXRpYyB2b2lkIHVubGlua19hdWRpb19pbl91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IExJTkU2X0lTT19CVUZGRVJTOyBpLS07KSB7CisJCWlmICh0ZXN0X2JpdChpLCAmbGluZTZwY20tPmFjdGl2ZV91cmJfaW4pKSB7CisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaSwgJmxpbmU2cGNtLT51bmxpbmtfdXJiX2luKSkgeworCQkJCXN0cnVjdCB1cmIgKnUgPSBsaW5lNnBjbS0+dXJiX2F1ZGlvX2luW2ldOworCQkJCXVzYl91bmxpbmtfdXJiKHUpOworCQkJfQorCQl9CisJfQorfQorCisvKgorCVdhaXQgdW50aWwgdW5saW5raW5nIG9mIGFsbCBjdXJyZW50bHkgYWN0aXZlIGNhcHR1cmUgVVJCcyBoYXMgYmVlbgorCWZpbmlzaGVkLgorKi8KK3N0YXRpYyB2b2lkIHdhaXRfY2xlYXJfYXVkaW9faW5fdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCit7CisJaW50IHRpbWVvdXQgPSBIWjsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgYWxpdmU7CisKKwlkbyB7CisJCWFsaXZlID0gMDsKKwkJZm9yIChpID0gTElORTZfSVNPX0JVRkZFUlM7IGktLTspIHsKKwkJCWlmICh0ZXN0X2JpdChpLCAmbGluZTZwY20tPmFjdGl2ZV91cmJfaW4pKQorCQkJCWFsaXZlKys7CisJCX0KKwkJaWYgKCFhbGl2ZSkKKwkJCWJyZWFrOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJfSB3aGlsZSAoLS10aW1lb3V0ID4gMCk7CisJaWYgKGFsaXZlKQorCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ0aW1lb3V0OiBzdGlsbCAlZCBhY3RpdmUgdXJicy4uXG4iLCBhbGl2ZSk7CisKKwlsaW5lNnBjbS0+YWN0aXZlX3VyYl9pbiA9IDA7CisJbGluZTZwY20tPnVubGlua191cmJfaW4gPSAwOworfQorCisvKgorCVVubGluayBhbGwgY3VycmVudGx5IGFjdGl2ZSBjYXB0dXJlIFVSQnMsIGFuZCB3YWl0IGZvciBmaW5pc2hpbmcuCisqLwordm9pZCB1bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19pbl91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKK3sKKwl1bmxpbmtfYXVkaW9faW5fdXJicyhsaW5lNnBjbSk7CisJd2FpdF9jbGVhcl9hdWRpb19pbl91cmJzKGxpbmU2cGNtKTsKK30KKworLyoKKwlDYWxsYmFjayBmb3IgY29tcGxldGVkIGNhcHR1cmUgVVJCLgorKi8KK3N0YXRpYyB2b2lkIGF1ZGlvX2luX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgaSwgaW5kZXgsIGxlbmd0aCA9IDAsIHNodXRkb3duID0gMDsKKwlpbnQgZnJhbWVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWNvbnN0IGludCBieXRlc19wZXJfZnJhbWUgPSBsaW5lNnBjbS0+cHJvcGVydGllcy0+Ynl0ZXNfcGVyX2ZyYW1lOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKwkvKiBmaW5kIGluZGV4IG9mIFVSQiAqLworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IExJTkU2X0lTT19CVUZGRVJTOyArK2luZGV4KQorCQlpZiAodXJiID09IGxpbmU2cGNtLT51cmJfYXVkaW9faW5baW5kZXhdKQorCQkJYnJlYWs7CisKKyNpZiBET19EVU1QX1BDTV9SRUNFSVZFCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19QQUNLRVRTOyArK2kpIHsKKwkJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmZvdXQgPSAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXTsKKwkJbGluZTZfd3JpdGVfaGV4ZHVtcChsaW5lNnBjbS0+bGluZTYsICdDJywgdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBmb3V0LT5vZmZzZXQsIGZvdXQtPmxlbmd0aCk7CisJfQorI2VuZGlmCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZTZwY20tPmxvY2tfYXVkaW9faW4sIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fUEFDS0VUUzsgKytpKSB7CisJCWNoYXIgKmZidWY7CisJCWludCBmc2l6ZTsKKwkJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmZpbiA9ICZ1cmItPmlzb19mcmFtZV9kZXNjW2ldOworCisJCWlmIChmaW4tPnN0YXR1cyA9PSAtMTgpIHsKKwkJCXNodXRkb3duID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJZmJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgZmluLT5vZmZzZXQ7CisJCWZzaXplID0gZmluLT5hY3R1YWxfbGVuZ3RoOworCQlsZW5ndGggKz0gZnNpemU7CisKKwkJaWYgKGZzaXplID4gMCkgeworCQkJZnJhbWVzID0gZnNpemUgLyBieXRlc19wZXJfZnJhbWU7CisKKwkJCWlmIChsaW5lNnBjbS0+cG9zX2luX2RvbmUgKyBmcmFtZXMgPiBydW50aW1lLT5idWZmZXJfc2l6ZSkgeworCQkJCS8qCisJCQkJCVRoZSB0cmFuc2ZlcnJlZCBhcmVhIGdvZXMgb3ZlciBidWZmZXIgYm91bmRhcnksCisJCQkJCWNvcHkgdHdvIHNlcGFyYXRlIGNodW5rcy4KKwkJCQkqLworCQkJCWludCBsZW47CisJCQkJbGVuID0gcnVudGltZS0+YnVmZmVyX3NpemUgLSBsaW5lNnBjbS0+cG9zX2luX2RvbmU7CisKKwkJCQlpZiAobGVuID4gMCkgeworCQkJCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBsaW5lNnBjbS0+cG9zX2luX2RvbmUgKiBieXRlc19wZXJfZnJhbWUsIGZidWYsIGxlbiAqIGJ5dGVzX3Blcl9mcmFtZSk7CisJCQkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwgZmJ1ZiArIGxlbiAqIGJ5dGVzX3Blcl9mcmFtZSwgKGZyYW1lcyAtIGxlbikgKiBieXRlc19wZXJfZnJhbWUpOworCQkJCX0gZWxzZQorCQkJCQlkZXZfZXJyKHMybShzdWJzdHJlYW0pLCAiZHJpdmVyIGJ1ZzogbGVuID0gJWRcbiIsIGxlbik7ICAvKiB0aGlzIGlzIHNvbWV3aGF0IHBhcmFub2lkICovCisJCQl9IGVsc2UgeworCQkJCS8qIGNvcHkgc2luZ2xlIGNodW5rICovCisJCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsgbGluZTZwY20tPnBvc19pbl9kb25lICogYnl0ZXNfcGVyX2ZyYW1lLCBmYnVmLCBmc2l6ZSAqIGJ5dGVzX3Blcl9mcmFtZSk7CisJCQl9CisKKwkJCWlmICgobGluZTZwY20tPnBvc19pbl9kb25lICs9IGZyYW1lcykgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCQkJbGluZTZwY20tPnBvc19pbl9kb25lIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQl9CisJfQorCisJY2xlYXJfYml0KGluZGV4LCAmbGluZTZwY20tPmFjdGl2ZV91cmJfaW4pOworCisJaWYgKHRlc3RfYml0KGluZGV4LCAmbGluZTZwY20tPnVubGlua191cmJfaW4pKQorCQlzaHV0ZG93biA9IDE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19pbiwgZmxhZ3MpOworCisJaWYgKCFzaHV0ZG93bikgeworCQlzdWJtaXRfYXVkaW9faW5fdXJiKHN1YnN0cmVhbSk7CisKKwkJaWYgKChsaW5lNnBjbS0+Ynl0ZXNfaW4gKz0gbGVuZ3RoKSA+PSBsaW5lNnBjbS0+cGVyaW9kX2luKSB7CisJCQlsaW5lNnBjbS0+Ynl0ZXNfaW4gLT0gbGluZTZwY20tPnBlcmlvZF9pbjsKKwkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKKwkJfQorCX0KK30KKworLyogb3BlbiBjYXB0dXJlIGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCWVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9yYXRkZW5zKHJ1bnRpbWUsIDAsCisJCQkJCSAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKKwkJCQkJICAgICgmbGluZTZwY20tPnByb3BlcnRpZXMtPnNuZF9saW5lNl9yYXRlcykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcnVudGltZS0+aHcgPSBsaW5lNnBjbS0+cHJvcGVydGllcy0+c25kX2xpbmU2X2NhcHR1cmVfaHc7CisJcmV0dXJuIDA7Cit9CisKKy8qIGNsb3NlIGNhcHR1cmUgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIGh3X3BhcmFtcyBjYXB0dXJlIGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9jYXB0dXJlX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwkvKiAtLSBGbG9yaWFuIERlbXNraSBbRkRdICovCisJLyogZG9uJ3QgYXNrIG1lIHdoeSwgYnV0IHRoaXMgZml4ZXMgdGhlIGJ1ZyBvbiBteSBtYWNoaW5lICovCisJaWYgKGxpbmU2cGNtID09IE5VTEwpIHsKKwkJaWYgKHN1YnN0cmVhbS0+cGNtID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKHN1YnN0cmVhbS0+cGNtLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlzdWJzdHJlYW0tPnByaXZhdGVfZGF0YSA9IHN1YnN0cmVhbS0+cGNtLT5wcml2YXRlX2RhdGE7CisJCWxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCX0KKwkvKiAtLSBbRkRdIGVuZCAqLworCisJcmV0ID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCQkgICAgICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWxpbmU2cGNtLT5wZXJpb2RfaW4gPSBwYXJhbXNfcGVyaW9kX2J5dGVzKGh3X3BhcmFtcyk7CisJbGluZTZwY20tPmJ1ZmZlcl9pbiA9IGttYWxsb2MoTElORTZfSVNPX0JVRkZFUlMgKiBMSU5FNl9JU09fUEFDS0VUUyAqIExJTkU2X0lTT19QQUNLRVRfU0laRV9NQVgsIEdGUF9LRVJORUwpOworCisJaWYgKCFsaW5lNnBjbS0+YnVmZmVyX2luKSB7CisJCWRldl9lcnIoczJtKHN1YnN0cmVhbSksICJjYW5ub3QgbWFsbG9jIGJ1ZmZlcl9pblxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorCisvKiBod19mcmVlIGNhcHR1cmUgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X2NhcHR1cmVfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9faW5fdXJicyhsaW5lNnBjbSk7CisKKwlrZnJlZShsaW5lNnBjbS0+YnVmZmVyX2luKTsKKwlsaW5lNnBjbS0+YnVmZmVyX2luID0gTlVMTDsKKworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKKy8qIHRyaWdnZXIgY2FsbGJhY2sgKi8KK2ludCBzbmRfbGluZTZfY2FwdHVyZV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgZXJyOworCWxpbmU2cGNtLT5jb3VudF9pbiA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChCSVRfUlVOTklOR19DQVBUVVJFLCAmbGluZTZwY20tPmZsYWdzKSkgeworCQkJZXJyID0gc3VibWl0X2F1ZGlvX2luX2FsbF91cmJzKHN1YnN0cmVhbSk7CisKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJY2xlYXJfYml0KEJJVF9SVU5OSU5HX0NBUFRVUkUsICZsaW5lNnBjbS0+ZmxhZ3MpOworCQkJCXJldHVybiBlcnI7CisJCQl9CisJCX0KKworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCSVRfUlVOTklOR19DQVBUVVJFLCAmbGluZTZwY20tPmZsYWdzKSkKKwkJCXVubGlua19hdWRpb19pbl91cmJzKGxpbmU2cGNtKTsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKiBjYXB0dXJlIHBvaW50ZXIgY2FsbGJhY2sgKi8KK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX2xpbmU2X2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJcmV0dXJuIGxpbmU2cGNtLT5wb3NfaW5fZG9uZTsKK30KKworLyogY2FwdHVyZSBvcGVyYXRvcnMgKi8KK3N0cnVjdCBzbmRfcGNtX29wcyBzbmRfbGluZTZfY2FwdHVyZV9vcHMgPSB7CisJLm9wZW4gPSAgICAgICAgc25kX2xpbmU2X2NhcHR1cmVfb3BlbiwKKwkuY2xvc2UgPSAgICAgICBzbmRfbGluZTZfY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwgPSAgICAgICBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gICBzbmRfbGluZTZfY2FwdHVyZV9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSAgICAgc25kX2xpbmU2X2NhcHR1cmVfaHdfZnJlZSwKKwkucHJlcGFyZSA9ICAgICBzbmRfbGluZTZfcHJlcGFyZSwKKwkudHJpZ2dlciA9ICAgICBzbmRfbGluZTZfdHJpZ2dlciwKKwkucG9pbnRlciA9ICAgICBzbmRfbGluZTZfY2FwdHVyZV9wb2ludGVyLAorfTsKKworaW50IGNyZWF0ZV9hdWRpb19pbl91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKK3sKKwlpbnQgaTsKKworCS8qIGNyZWF0ZSBhdWRpbyBVUkJzIGFuZCBmaWxsIGluIGNvbnN0YW50IHZhbHVlczogKi8KKwlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX0JVRkZFUlM7ICsraSkgeworCQlzdHJ1Y3QgdXJiICp1cmI7CisKKwkJLyogVVJCIGZvciBhdWRpbyBpbjogKi8KKwkJdXJiID0gbGluZTZwY20tPnVyYl9hdWRpb19pbltpXSA9IHVzYl9hbGxvY191cmIoTElORTZfSVNPX1BBQ0tFVFMsIEdGUF9LRVJORUwpOworCisJCWlmICh1cmIgPT0gTlVMTCkgeworCQkJZGV2X2VycihsaW5lNnBjbS0+bGluZTYtPmlmY2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQl1cmItPmRldiA9IGxpbmU2cGNtLT5saW5lNi0+dXNiZGV2OworCQl1cmItPnBpcGUgPSB1c2JfcmN2aXNvY3BpcGUobGluZTZwY20tPmxpbmU2LT51c2JkZXYsIGxpbmU2cGNtLT5lcF9hdWRpb19yZWFkICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT5zdGFydF9mcmFtZSA9IC0xOworCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gTElORTZfSVNPX1BBQ0tFVFM7CisJCXVyYi0+aW50ZXJ2YWwgPSBMSU5FNl9JU09fSU5URVJWQUw7CisJCXVyYi0+ZXJyb3JfY291bnQgPSAwOworCQl1cmItPmNvbXBsZXRlID0gYXVkaW9faW5fY2FsbGJhY2s7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY2FwdHVyZS5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NhcHR1cmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQ0NDY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NhcHR1cmUuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBDQVBUVVJFX0gKKyNkZWZpbmUgQ0FQVFVSRV9ICisKKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisKKyNpbmNsdWRlICJwY20uaCIKKworCitleHRlcm4gc3RydWN0IHNuZF9wY21fb3BzIHNuZF9saW5lNl9jYXB0dXJlX29wczsKKworCitleHRlcm4gaW50IGNyZWF0ZV9hdWRpb19pbl91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSk7CitleHRlcm4gaW50IHNuZF9saW5lNl9jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICBpbnQgY21kKTsKK2V4dGVybiB2b2lkIHVubGlua193YWl0X2NsZWFyX2F1ZGlvX2luX3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jb25maWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGFkMTMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NvbmZpZy5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIENPTkZJR19ICisjZGVmaW5lIENPTkZJR19ICisKKworI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKyNkZWZpbmUgREVCVUcgMQorI2VuZGlmCisKKworLyoqCisgICBEZXZlbG9wbWVudCB0b29scy4KKyovCisjZGVmaW5lIERPX0RFQlVHX01FU1NBR0VTICAgIDAKKyNkZWZpbmUgRE9fRFVNUF9VUkJfU0VORCAgICAgRE9fREVCVUdfTUVTU0FHRVMKKyNkZWZpbmUgRE9fRFVNUF9VUkJfUkVDRUlWRSAgRE9fREVCVUdfTUVTU0FHRVMKKyNkZWZpbmUgRE9fRFVNUF9QQ01fU0VORCAgICAgMAorI2RlZmluZSBET19EVU1QX1BDTV9SRUNFSVZFICAwCisjZGVmaW5lIERPX0RVTVBfTUlESV9TRU5EICAgIERPX0RFQlVHX01FU1NBR0VTCisjZGVmaW5lIERPX0RVTVBfTUlESV9SRUNFSVZFIERPX0RFQlVHX01FU1NBR0VTCisjZGVmaW5lIERPX0RVTVBfQU5ZICAgICAgICAgIChET19EVU1QX1VSQl9TRU5EIHx8IERPX0RVTVBfVVJCX1JFQ0VJVkUgfHwgXAorCQkJICAgICAgRE9fRFVNUF9QQ01fU0VORCB8fCBET19EVU1QX1BDTV9SRUNFSVZFIHx8IFwKKwkJCSAgICAgIERPX0RVTVBfTUlESV9TRU5EIHx8IERPX0RVTVBfTUlESV9SRUNFSVZFKQorI2RlZmluZSBDUkVBVEVfUkFXX0ZJTEUgICAgICAwCisKKyNpZiBET19ERUJVR19NRVNTQUdFUworI2RlZmluZSBDSEVDS1BPSU5UIHByaW50ayhLRVJOX0lORk8gImxpbmU2dXNiOiAlcyAoJXM6JWQpXG4iLCBcCisJCQkgIF9fZnVuY19fLCBfX0ZJTEVfXywgX19MSU5FX18pCisjZW5kaWYKKworI2lmIERPX0RFQlVHX01FU1NBR0VTCisjZGVmaW5lIERFQlVHX01FU1NBR0VTKHgpICh4KQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfTUVTU0FHRVMoeCkKKyNlbmRpZgorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NvbnRyb2wuYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jb250cm9sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNhZDA4ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jb250cm9sLmMKQEAgLTAsMCArMSw4NDAgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgImNvbnRyb2wuaCIKKyNpbmNsdWRlICJwb2QuaCIKKyNpbmNsdWRlICJ1c2JkZWZzLmgiCisjaW5jbHVkZSAidmFyaWF4LmgiCisKKyNkZWZpbmUgREVWSUNFX0FUVFIyKF9uYW1lMSwgX25hbWUyLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkgXAorc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfIyNfbmFtZTEgPSBfX0FUVFIoX25hbWUyLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkKKworI2RlZmluZSBMSU5FNl9QQVJBTV9SKFBSRUZJWCwgcHJlZml4LCB0eXBlLCBwYXJhbSkgXAorc3RhdGljIHNzaXplX3QgcHJlZml4ICMjIF9nZXRfICMjIHBhcmFtKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAoreyBcCisJcmV0dXJuIHByZWZpeCAjIyBfZ2V0X3BhcmFtXyAjIyB0eXBlKGRldiwgYnVmLCBQUkVGSVggIyMgXyAjIyBwYXJhbSk7IFwKK30KKworI2RlZmluZSBMSU5FNl9QQVJBTV9SVyhQUkVGSVgsIHByZWZpeCwgdHlwZSwgcGFyYW0pIFwKK0xJTkU2X1BBUkFNX1IoUFJFRklYLCBwcmVmaXgsIHR5cGUsIHBhcmFtKTsgXAorc3RhdGljIHNzaXplX3QgcHJlZml4ICMjIF9zZXRfICMjIHBhcmFtKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKK3sgXAorCXJldHVybiBwcmVmaXggIyMgX3NldF9wYXJhbV8gIyMgdHlwZShkZXYsIGJ1ZiwgY291bnQsIFBSRUZJWCAjIyBfICMjIHBhcmFtKTsgXAorfQorCisjZGVmaW5lIFBPRF9QQVJBTV9SKHR5cGUsIHBhcmFtKSBMSU5FNl9QQVJBTV9SKFBPRCwgcG9kLCB0eXBlLCBwYXJhbSkKKyNkZWZpbmUgUE9EX1BBUkFNX1JXKHR5cGUsIHBhcmFtKSBMSU5FNl9QQVJBTV9SVyhQT0QsIHBvZCwgdHlwZSwgcGFyYW0pCisjZGVmaW5lIFZBUklBWF9QQVJBTV9SKHR5cGUsIHBhcmFtKSBMSU5FNl9QQVJBTV9SKFZBUklBWCwgdmFyaWF4LCB0eXBlLCBwYXJhbSkKKyNkZWZpbmUgVkFSSUFYX1BBUkFNX1JXKHR5cGUsIHBhcmFtKSBMSU5FNl9QQVJBTV9SVyhWQVJJQVgsIHZhcmlheCwgdHlwZSwgcGFyYW0pCisKKworc3RhdGljIHNzaXplX3QgcG9kX2dldF9wYXJhbV9pbnQoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBwYXJhbSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IHJldHZhbCA9IGxpbmU2X3dhaXRfZHVtcCgmcG9kLT5kdW1wcmVxLCAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcG9kLT5wcm9nX2RhdGEuY29udHJvbFtwYXJhbV0pOworfQorCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X3BhcmFtX2ludChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBpbnQgcGFyYW0pCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCB2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCXBvZF90cmFuc21pdF9wYXJhbWV0ZXIocG9kLCBwYXJhbSwgdmFsdWUpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgdmFyaWF4X2dldF9wYXJhbV9pbnQoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBwYXJhbSkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IHJldHZhbCA9IGxpbmU2X3dhaXRfZHVtcCgmdmFyaWF4LT5kdW1wcmVxLCAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFyaWF4LT5tb2RlbF9kYXRhLmNvbnRyb2xbcGFyYW1dKTsKK30KKworc3RhdGljIHNzaXplX3QgdmFyaWF4X2dldF9wYXJhbV9mbG9hdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IHBhcmFtKQoreworCS8qCisJCVdlIGRvIG91ciBvd24gZmxvYXRpbmcgcG9pbnQgaGFuZGxpbmcgaGVyZSBzaW5jZSBmbG9hdHMgaW4gdGhlCisJCWtlcm5lbCBhcmUgcHJvYmxlbWF0aWMgZm9yIGF0IGxlYXN0IHR3byByZWFzb25zOiAtIG1hbnkgZGlzdHJvcworCQlhcmUgc3RpbGwgc2hpcHBlZCB3aXRoIGJpbmFyeSBrZXJuZWxzIG9wdGltaXplZCBmb3IgdGhlIGFuY2llbnQKKwkJODAzODYgd2l0aG91dCBGUFUKKwkJLSB0aGVyZSBpc24ndCBhIHByaW50ZigiJWYiKQorCQkgIChzZWUgaHR0cDovL3d3dy5rZXJuZWx0aHJlYWQuY29tL3B1YmxpY2F0aW9ucy9mYXEvMzM1Lmh0bWwpCisJKi8KKworCXN0YXRpYyBjb25zdCBpbnQgQklBUyA9IDB4N2Y7CisJc3RhdGljIGNvbnN0IGludCBPRkZTRVQgPSAweGY7CisJc3RhdGljIGNvbnN0IGludCBQUkVDSVNJT04gPSAxMDAwOworCisJaW50IGxlbiA9IDA7CisJdW5zaWduZWQgcGFydF9pbnQsIHBhcnRfZnJhYzsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHZhcmlheC0+bW9kZWxfZGF0YS5jb250cm9sICsgcGFyYW07CisJaW50IHJldHZhbCA9IGxpbmU2X3dhaXRfZHVtcCgmdmFyaWF4LT5kdW1wcmVxLCAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmICgocFswXSA9PSAwKSAmJiAocFsxXSA9PSAwKSAmJiAocFsyXSA9PSAwKSkKKwkJcGFydF9pbnQgPSBwYXJ0X2ZyYWMgPSAwOworCWVsc2UgeworCQlpbnQgZXhwb25lbnQgPSAoKChwWzBdICYgMHg3ZikgPDwgMSkgfCAocFsxXSA+PiA3KSkgLSBCSUFTOworCQl1bnNpZ25lZCBtYW50aXNzYSA9IChwWzFdIDw8IDgpIHwgcFsyXSB8IDB4ODAwMDsKKwkJZXhwb25lbnQgLT0gT0ZGU0VUOworCisJCWlmIChleHBvbmVudCA+PSAwKSB7CisJCQlwYXJ0X2ludCA9IG1hbnRpc3NhIDw8IGV4cG9uZW50OworCQkJcGFydF9mcmFjID0gMDsKKwkJfSBlbHNlIHsKKwkJCXBhcnRfaW50ID0gbWFudGlzc2EgPj4gLWV4cG9uZW50OworCQkJcGFydF9mcmFjID0gKG1hbnRpc3NhIDw8ICgzMiArIGV4cG9uZW50KSkgJiAweGZmZmZmZmZmOworCQl9CisKKwkJcGFydF9mcmFjID0gKHBhcnRfZnJhYyAvICgoMVVMIDw8IDMxKSAvIChQUkVDSVNJT04gLyAyICogMTApKSArIDUpIC8gMTA7CisJfQorCisJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJXMlZC4lMDNkXG4iLCAoKHBbMF0gJiAweDgwKSA/ICItIiA6ICIiKSwgcGFydF9pbnQsIHBhcnRfZnJhYyk7CisJcmV0dXJuIGxlbjsKK30KKworUE9EX1BBUkFNX1JXKGludCwgdHdlYWspOworUE9EX1BBUkFNX1JXKGludCwgd2FoX3Bvc2l0aW9uKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGNvbXByZXNzaW9uX2dhaW4pOworUE9EX1BBUkFNX1JXKGludCwgdm9sX3BlZGFsX3Bvc2l0aW9uKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGNvbXByZXNzaW9uX3RocmVzaG9sZCk7CitQT0RfUEFSQU1fUlcoaW50LCBwYW4pOworUE9EX1BBUkFNX1JXKGludCwgYW1wX21vZGVsX3NldHVwKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGFtcF9tb2RlbCk7CitQT0RfUEFSQU1fUlcoaW50LCBkcml2ZSk7CitQT0RfUEFSQU1fUlcoaW50LCBiYXNzKTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1pZCk7CitQT0RfUEFSQU1fUlcoaW50LCBsb3dtaWQpOworUE9EX1BBUkFNX1JXKGludCwgdHJlYmxlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGhpZ2htaWQpOworUE9EX1BBUkFNX1JXKGludCwgY2hhbl92b2wpOworUE9EX1BBUkFNX1JXKGludCwgcmV2ZXJiX21peCk7CitQT0RfUEFSQU1fUlcoaW50LCBlZmZlY3Rfc2V0dXApOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF8xX2ZyZXF1ZW5jeSk7CitQT0RfUEFSQU1fUlcoaW50LCBwcmVzZW5jZSk7CitQT0RfUEFSQU1fUlcoaW50LCB0cmVibGVfX2Jhc3MpOworUE9EX1BBUkFNX1JXKGludCwgbm9pc2VfZ2F0ZV9lbmFibGUpOworUE9EX1BBUkFNX1JXKGludCwgZ2F0ZV90aHJlc2hvbGQpOworUE9EX1BBUkFNX1JXKGludCwgZ2F0ZV9kZWNheV90aW1lKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHN0b21wX2VuYWJsZSk7CitQT0RfUEFSQU1fUlcoaW50LCBjb21wX2VuYWJsZSk7CitQT0RfUEFSQU1fUlcoaW50LCBzdG9tcF90aW1lKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X2VuYWJsZSk7CitQT0RfUEFSQU1fUlcoaW50LCBtb2RfcGFyYW1fMSk7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV9wYXJhbV8xKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X3BhcmFtXzFfbm90ZV92YWx1ZSk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzJfZnJlcXVlbmN5X19iYXNzKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X3BhcmFtXzIpOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfdm9sdW1lX21peCk7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV9wYXJhbV8zKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHJldmVyYl9lbmFibGUpOworUE9EX1BBUkFNX1JXKGludCwgcmV2ZXJiX3R5cGUpOworUE9EX1BBUkFNX1JXKGludCwgcmV2ZXJiX2RlY2F5KTsKK1BPRF9QQVJBTV9SVyhpbnQsIHJldmVyYl90b25lKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHJldmVyYl9wcmVfZGVsYXkpOworUE9EX1BBUkFNX1JXKGludCwgcmV2ZXJiX3ByZV9wb3N0KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfMl9mcmVxdWVuY3kpOworUE9EX1BBUkFNX1JXKGludCwgYmFuZF8zX2ZyZXF1ZW5jeV9fYmFzcyk7CitQT0RfUEFSQU1fUlcoaW50LCB3YWhfZW5hYmxlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1vZHVsYXRpb25fbG9fY3V0KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X3JldmVyYl9sb19jdXQpOworUE9EX1BBUkFNX1JXKGludCwgdm9sdW1lX3BlZGFsX21pbmltdW0pOworUE9EX1BBUkFNX1JXKGludCwgZXFfcHJlX3Bvc3QpOworUE9EX1BBUkFNX1JXKGludCwgdm9sdW1lX3ByZV9wb3N0KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRpX21vZGVsKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRpX2RlbGF5KTsKK1BPRF9QQVJBTV9SVyhpbnQsIG1vZF9lbmFibGUpOworUE9EX1BBUkFNX1JXKGludCwgbW9kX3BhcmFtXzFfbm90ZV92YWx1ZSk7CitQT0RfUEFSQU1fUlcoaW50LCBtb2RfcGFyYW1fMik7CitQT0RfUEFSQU1fUlcoaW50LCBtb2RfcGFyYW1fMyk7CitQT0RfUEFSQU1fUlcoaW50LCBtb2RfcGFyYW1fNCk7CitQT0RfUEFSQU1fUlcoaW50LCBtb2RfcGFyYW1fNSk7CitQT0RfUEFSQU1fUlcoaW50LCBtb2Rfdm9sdW1lX21peCk7CitQT0RfUEFSQU1fUlcoaW50LCBtb2RfcHJlX3Bvc3QpOworUE9EX1BBUkFNX1JXKGludCwgbW9kdWxhdGlvbl9tb2RlbCk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzNfZnJlcXVlbmN5KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfNF9mcmVxdWVuY3lfX2Jhc3MpOworUE9EX1BBUkFNX1JXKGludCwgbW9kX3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbik7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24pOworUE9EX1BBUkFNX1JXKGludCwgZXFfZW5hYmxlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHRhcCk7CitQT0RfUEFSQU1fUlcoaW50LCB2b2x1bWVfdHdlYWtfcGVkYWxfYXNzaWduKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfNV9mcmVxdWVuY3kpOworUE9EX1BBUkFNX1JXKGludCwgdHVuZXIpOworUE9EX1BBUkFNX1JXKGludCwgbWljX3NlbGVjdGlvbik7CitQT0RfUEFSQU1fUlcoaW50LCBjYWJpbmV0X21vZGVsKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHN0b21wX21vZGVsKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHJvb21sZXZlbCk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzRfZnJlcXVlbmN5KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGJhbmRfNl9mcmVxdWVuY3kpOworUE9EX1BBUkFNX1JXKGludCwgc3RvbXBfcGFyYW1fMV9ub3RlX3ZhbHVlKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHN0b21wX3BhcmFtXzIpOworUE9EX1BBUkFNX1JXKGludCwgc3RvbXBfcGFyYW1fMyk7CitQT0RfUEFSQU1fUlcoaW50LCBzdG9tcF9wYXJhbV80KTsKK1BPRF9QQVJBTV9SVyhpbnQsIHN0b21wX3BhcmFtXzUpOworUE9EX1BBUkFNX1JXKGludCwgc3RvbXBfcGFyYW1fNik7CitQT0RfUEFSQU1fUlcoaW50LCBhbXBfc3dpdGNoX3NlbGVjdCk7CitQT0RfUEFSQU1fUlcoaW50LCBkZWxheV9wYXJhbV80KTsKK1BPRF9QQVJBTV9SVyhpbnQsIGRlbGF5X3BhcmFtXzUpOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfcHJlX3Bvc3QpOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfbW9kZWwpOworUE9EX1BBUkFNX1JXKGludCwgZGVsYXlfdmVyYl9tb2RlbCk7CitQT0RfUEFSQU1fUlcoaW50LCB0ZW1wb19tc2IpOworUE9EX1BBUkFNX1JXKGludCwgdGVtcG9fbHNiKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHdhaF9tb2RlbCk7CitQT0RfUEFSQU1fUlcoaW50LCBieXBhc3Nfdm9sdW1lKTsKK1BPRF9QQVJBTV9SVyhpbnQsIGZ4X2xvb3Bfb25fb2ZmKTsKK1BPRF9QQVJBTV9SVyhpbnQsIHR3ZWFrX3BhcmFtX3NlbGVjdCk7CitQT0RfUEFSQU1fUlcoaW50LCBhbXAxX2VuZ2FnZSk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzFfZ2Fpbik7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzJfZ2Fpbl9fYmFzcyk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzJfZ2Fpbik7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzNfZ2Fpbl9fYmFzcyk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzNfZ2Fpbik7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzRfZ2Fpbl9fYmFzcyk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzVfZ2Fpbl9fYmFzcyk7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzRfZ2Fpbik7CitQT0RfUEFSQU1fUlcoaW50LCBiYW5kXzZfZ2Fpbl9fYmFzcyk7CitWQVJJQVhfUEFSQU1fUihpbnQsIGJvZHkpOworVkFSSUFYX1BBUkFNX1IoaW50LCBwaWNrdXAxX2VuYWJsZSk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHBpY2t1cDFfdHlwZSk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgcGlja3VwMV9wb3NpdGlvbik7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgcGlja3VwMV9hbmdsZSk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgcGlja3VwMV9sZXZlbCk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHBpY2t1cDJfZW5hYmxlKTsKK1ZBUklBWF9QQVJBTV9SKGludCwgcGlja3VwMl90eXBlKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBwaWNrdXAyX3Bvc2l0aW9uKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBwaWNrdXAyX2FuZ2xlKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBwaWNrdXAyX2xldmVsKTsKK1ZBUklBWF9QQVJBTV9SKGludCwgcGlja3VwX3BoYXNlKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCBjYXBhY2l0YW5jZSk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgdG9uZV9yZXNpc3RhbmNlKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCB2b2x1bWVfcmVzaXN0YW5jZSk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHRhcGVyKTsKK1ZBUklBWF9QQVJBTV9SKGZsb2F0LCB0b25lX2R1bXApOworVkFSSUFYX1BBUkFNX1IoaW50LCBzYXZlX3RvbmUpOworVkFSSUFYX1BBUkFNX1IoZmxvYXQsIHZvbHVtZV9kdW1wKTsKK1ZBUklBWF9QQVJBTV9SKGludCwgdHVuaW5nX2VuYWJsZSk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHR1bmluZzYpOworVkFSSUFYX1BBUkFNX1IoaW50LCB0dW5pbmc1KTsKK1ZBUklBWF9QQVJBTV9SKGludCwgdHVuaW5nNCk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHR1bmluZzMpOworVkFSSUFYX1BBUkFNX1IoaW50LCB0dW5pbmcyKTsKK1ZBUklBWF9QQVJBTV9SKGludCwgdHVuaW5nMSk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgZGV0dW5lNik7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgZGV0dW5lNSk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgZGV0dW5lNCk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgZGV0dW5lMyk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgZGV0dW5lMik7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgZGV0dW5lMSk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgbWl4Nik7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgbWl4NSk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgbWl4NCk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgbWl4Myk7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgbWl4Mik7CitWQVJJQVhfUEFSQU1fUihmbG9hdCwgbWl4MSk7CitWQVJJQVhfUEFSQU1fUihpbnQsIHBpY2t1cF93aXJpbmcpOworCitzdGF0aWMgREVWSUNFX0FUVFIodHdlYWssIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3R3ZWFrLCBwb2Rfc2V0X3R3ZWFrKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih3YWhfcG9zaXRpb24sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3dhaF9wb3NpdGlvbiwgcG9kX3NldF93YWhfcG9zaXRpb24pOworc3RhdGljIERFVklDRV9BVFRSKGNvbXByZXNzaW9uX2dhaW4sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2NvbXByZXNzaW9uX2dhaW4sIHBvZF9zZXRfY29tcHJlc3Npb25fZ2Fpbik7CitzdGF0aWMgREVWSUNFX0FUVFIodm9sX3BlZGFsX3Bvc2l0aW9uLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF92b2xfcGVkYWxfcG9zaXRpb24sIHBvZF9zZXRfdm9sX3BlZGFsX3Bvc2l0aW9uKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjb21wcmVzc2lvbl90aHJlc2hvbGQsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2NvbXByZXNzaW9uX3RocmVzaG9sZCwgcG9kX3NldF9jb21wcmVzc2lvbl90aHJlc2hvbGQpOworc3RhdGljIERFVklDRV9BVFRSKHBhbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfcGFuLCBwb2Rfc2V0X3Bhbik7CitzdGF0aWMgREVWSUNFX0FUVFIoYW1wX21vZGVsX3NldHVwLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9hbXBfbW9kZWxfc2V0dXAsIHBvZF9zZXRfYW1wX21vZGVsX3NldHVwKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihhbXBfbW9kZWwsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2FtcF9tb2RlbCwgcG9kX3NldF9hbXBfbW9kZWwpOworc3RhdGljIERFVklDRV9BVFRSKGRyaXZlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kcml2ZSwgcG9kX3NldF9kcml2ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmFzcywgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFzcywgcG9kX3NldF9iYXNzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtaWQsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21pZCwgcG9kX3NldF9taWQpOworc3RhdGljIERFVklDRV9BVFRSKGxvd21pZCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbG93bWlkLCBwb2Rfc2V0X2xvd21pZCk7CitzdGF0aWMgREVWSUNFX0FUVFIodHJlYmxlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF90cmVibGUsIHBvZF9zZXRfdHJlYmxlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihoaWdobWlkLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9oaWdobWlkLCBwb2Rfc2V0X2hpZ2htaWQpOworc3RhdGljIERFVklDRV9BVFRSKGNoYW5fdm9sLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9jaGFuX3ZvbCwgcG9kX3NldF9jaGFuX3ZvbCk7CitzdGF0aWMgREVWSUNFX0FUVFIocmV2ZXJiX21peCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfcmV2ZXJiX21peCwgcG9kX3NldF9yZXZlcmJfbWl4KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihlZmZlY3Rfc2V0dXAsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2VmZmVjdF9zZXR1cCwgcG9kX3NldF9lZmZlY3Rfc2V0dXApOworc3RhdGljIERFVklDRV9BVFRSKGJhbmRfMV9mcmVxdWVuY3ksIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfMV9mcmVxdWVuY3ksIHBvZF9zZXRfYmFuZF8xX2ZyZXF1ZW5jeSk7CitzdGF0aWMgREVWSUNFX0FUVFIocHJlc2VuY2UsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3ByZXNlbmNlLCBwb2Rfc2V0X3ByZXNlbmNlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUjIodHJlYmxlX19iYXNzLCB0cmVibGUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3RyZWJsZV9fYmFzcywgcG9kX3NldF90cmVibGVfX2Jhc3MpOworc3RhdGljIERFVklDRV9BVFRSKG5vaXNlX2dhdGVfZW5hYmxlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9ub2lzZV9nYXRlX2VuYWJsZSwgcG9kX3NldF9ub2lzZV9nYXRlX2VuYWJsZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZ2F0ZV90aHJlc2hvbGQsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2dhdGVfdGhyZXNob2xkLCBwb2Rfc2V0X2dhdGVfdGhyZXNob2xkKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihnYXRlX2RlY2F5X3RpbWUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2dhdGVfZGVjYXlfdGltZSwgcG9kX3NldF9nYXRlX2RlY2F5X3RpbWUpOworc3RhdGljIERFVklDRV9BVFRSKHN0b21wX2VuYWJsZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfc3RvbXBfZW5hYmxlLCBwb2Rfc2V0X3N0b21wX2VuYWJsZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoY29tcF9lbmFibGUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2NvbXBfZW5hYmxlLCBwb2Rfc2V0X2NvbXBfZW5hYmxlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdG9tcF90aW1lLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9zdG9tcF90aW1lLCBwb2Rfc2V0X3N0b21wX3RpbWUpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X2VuYWJsZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfZW5hYmxlLCBwb2Rfc2V0X2RlbGF5X2VuYWJsZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kX3BhcmFtXzEsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vZF9wYXJhbV8xLCBwb2Rfc2V0X21vZF9wYXJhbV8xKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV9wYXJhbV8xLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV9wYXJhbV8xLCBwb2Rfc2V0X2RlbGF5X3BhcmFtXzEpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X3BhcmFtXzFfbm90ZV92YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfcGFyYW1fMV9ub3RlX3ZhbHVlLCBwb2Rfc2V0X2RlbGF5X3BhcmFtXzFfbm90ZV92YWx1ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIyKGJhbmRfMl9mcmVxdWVuY3lfX2Jhc3MsIGJhbmRfMl9mcmVxdWVuY3ksIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfMl9mcmVxdWVuY3lfX2Jhc3MsIHBvZF9zZXRfYmFuZF8yX2ZyZXF1ZW5jeV9fYmFzcyk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfcGFyYW1fMiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfcGFyYW1fMiwgcG9kX3NldF9kZWxheV9wYXJhbV8yKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV92b2x1bWVfbWl4LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV92b2x1bWVfbWl4LCBwb2Rfc2V0X2RlbGF5X3ZvbHVtZV9taXgpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X3BhcmFtXzMsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X3BhcmFtXzMsIHBvZF9zZXRfZGVsYXlfcGFyYW1fMyk7CitzdGF0aWMgREVWSUNFX0FUVFIocmV2ZXJiX2VuYWJsZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfcmV2ZXJiX2VuYWJsZSwgcG9kX3NldF9yZXZlcmJfZW5hYmxlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXZlcmJfdHlwZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfcmV2ZXJiX3R5cGUsIHBvZF9zZXRfcmV2ZXJiX3R5cGUpOworc3RhdGljIERFVklDRV9BVFRSKHJldmVyYl9kZWNheSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfcmV2ZXJiX2RlY2F5LCBwb2Rfc2V0X3JldmVyYl9kZWNheSk7CitzdGF0aWMgREVWSUNFX0FUVFIocmV2ZXJiX3RvbmUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3JldmVyYl90b25lLCBwb2Rfc2V0X3JldmVyYl90b25lKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXZlcmJfcHJlX2RlbGF5LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9yZXZlcmJfcHJlX2RlbGF5LCBwb2Rfc2V0X3JldmVyYl9wcmVfZGVsYXkpOworc3RhdGljIERFVklDRV9BVFRSKHJldmVyYl9wcmVfcG9zdCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfcmV2ZXJiX3ByZV9wb3N0LCBwb2Rfc2V0X3JldmVyYl9wcmVfcG9zdCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmFuZF8yX2ZyZXF1ZW5jeSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF8yX2ZyZXF1ZW5jeSwgcG9kX3NldF9iYW5kXzJfZnJlcXVlbmN5KTsKK3N0YXRpYyBERVZJQ0VfQVRUUjIoYmFuZF8zX2ZyZXF1ZW5jeV9fYmFzcywgYmFuZF8zX2ZyZXF1ZW5jeSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF8zX2ZyZXF1ZW5jeV9fYmFzcywgcG9kX3NldF9iYW5kXzNfZnJlcXVlbmN5X19iYXNzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih3YWhfZW5hYmxlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF93YWhfZW5hYmxlLCBwb2Rfc2V0X3dhaF9lbmFibGUpOworc3RhdGljIERFVklDRV9BVFRSKG1vZHVsYXRpb25fbG9fY3V0LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb2R1bGF0aW9uX2xvX2N1dCwgcG9kX3NldF9tb2R1bGF0aW9uX2xvX2N1dCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfcmV2ZXJiX2xvX2N1dCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfcmV2ZXJiX2xvX2N1dCwgcG9kX3NldF9kZWxheV9yZXZlcmJfbG9fY3V0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUih2b2x1bWVfcGVkYWxfbWluaW11bSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdm9sdW1lX3BlZGFsX21pbmltdW0sIHBvZF9zZXRfdm9sdW1lX3BlZGFsX21pbmltdW0pOworc3RhdGljIERFVklDRV9BVFRSKGVxX3ByZV9wb3N0LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9lcV9wcmVfcG9zdCwgcG9kX3NldF9lcV9wcmVfcG9zdCk7CitzdGF0aWMgREVWSUNFX0FUVFIodm9sdW1lX3ByZV9wb3N0LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF92b2x1bWVfcHJlX3Bvc3QsIHBvZF9zZXRfdm9sdW1lX3ByZV9wb3N0KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkaV9tb2RlbCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGlfbW9kZWwsIHBvZF9zZXRfZGlfbW9kZWwpOworc3RhdGljIERFVklDRV9BVFRSKGRpX2RlbGF5LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kaV9kZWxheSwgcG9kX3NldF9kaV9kZWxheSk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kX2VuYWJsZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9kX2VuYWJsZSwgcG9kX3NldF9tb2RfZW5hYmxlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RfcGFyYW1fMV9ub3RlX3ZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb2RfcGFyYW1fMV9ub3RlX3ZhbHVlLCBwb2Rfc2V0X21vZF9wYXJhbV8xX25vdGVfdmFsdWUpOworc3RhdGljIERFVklDRV9BVFRSKG1vZF9wYXJhbV8yLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb2RfcGFyYW1fMiwgcG9kX3NldF9tb2RfcGFyYW1fMik7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kX3BhcmFtXzMsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vZF9wYXJhbV8zLCBwb2Rfc2V0X21vZF9wYXJhbV8zKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RfcGFyYW1fNCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9kX3BhcmFtXzQsIHBvZF9zZXRfbW9kX3BhcmFtXzQpOworc3RhdGljIERFVklDRV9BVFRSKG1vZF9wYXJhbV81LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb2RfcGFyYW1fNSwgcG9kX3NldF9tb2RfcGFyYW1fNSk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kX3ZvbHVtZV9taXgsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vZF92b2x1bWVfbWl4LCBwb2Rfc2V0X21vZF92b2x1bWVfbWl4KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RfcHJlX3Bvc3QsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vZF9wcmVfcG9zdCwgcG9kX3NldF9tb2RfcHJlX3Bvc3QpOworc3RhdGljIERFVklDRV9BVFRSKG1vZHVsYXRpb25fbW9kZWwsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21vZHVsYXRpb25fbW9kZWwsIHBvZF9zZXRfbW9kdWxhdGlvbl9tb2RlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmFuZF8zX2ZyZXF1ZW5jeSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF8zX2ZyZXF1ZW5jeSwgcG9kX3NldF9iYW5kXzNfZnJlcXVlbmN5KTsKK3N0YXRpYyBERVZJQ0VfQVRUUjIoYmFuZF80X2ZyZXF1ZW5jeV9fYmFzcywgYmFuZF80X2ZyZXF1ZW5jeSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF80X2ZyZXF1ZW5jeV9fYmFzcywgcG9kX3NldF9iYW5kXzRfZnJlcXVlbmN5X19iYXNzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9tb2RfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uLCBwb2Rfc2V0X21vZF9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24pOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uLCBwb2Rfc2V0X2RlbGF5X3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbik7CitzdGF0aWMgREVWSUNFX0FUVFIoZXFfZW5hYmxlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9lcV9lbmFibGUsIHBvZF9zZXRfZXFfZW5hYmxlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0YXAsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3RhcCwgcG9kX3NldF90YXApOworc3RhdGljIERFVklDRV9BVFRSKHZvbHVtZV90d2Vha19wZWRhbF9hc3NpZ24sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3ZvbHVtZV90d2Vha19wZWRhbF9hc3NpZ24sIHBvZF9zZXRfdm9sdW1lX3R3ZWFrX3BlZGFsX2Fzc2lnbik7CitzdGF0aWMgREVWSUNFX0FUVFIoYmFuZF81X2ZyZXF1ZW5jeSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF81X2ZyZXF1ZW5jeSwgcG9kX3NldF9iYW5kXzVfZnJlcXVlbmN5KTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0dW5lciwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdHVuZXIsIHBvZF9zZXRfdHVuZXIpOworc3RhdGljIERFVklDRV9BVFRSKG1pY19zZWxlY3Rpb24sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21pY19zZWxlY3Rpb24sIHBvZF9zZXRfbWljX3NlbGVjdGlvbik7CitzdGF0aWMgREVWSUNFX0FUVFIoY2FiaW5ldF9tb2RlbCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfY2FiaW5ldF9tb2RlbCwgcG9kX3NldF9jYWJpbmV0X21vZGVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdG9tcF9tb2RlbCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfc3RvbXBfbW9kZWwsIHBvZF9zZXRfc3RvbXBfbW9kZWwpOworc3RhdGljIERFVklDRV9BVFRSKHJvb21sZXZlbCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfcm9vbWxldmVsLCBwb2Rfc2V0X3Jvb21sZXZlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmFuZF80X2ZyZXF1ZW5jeSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF80X2ZyZXF1ZW5jeSwgcG9kX3NldF9iYW5kXzRfZnJlcXVlbmN5KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYW5kXzZfZnJlcXVlbmN5LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzZfZnJlcXVlbmN5LCBwb2Rfc2V0X2JhbmRfNl9mcmVxdWVuY3kpOworc3RhdGljIERFVklDRV9BVFRSKHN0b21wX3BhcmFtXzFfbm90ZV92YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfc3RvbXBfcGFyYW1fMV9ub3RlX3ZhbHVlLCBwb2Rfc2V0X3N0b21wX3BhcmFtXzFfbm90ZV92YWx1ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RvbXBfcGFyYW1fMiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfc3RvbXBfcGFyYW1fMiwgcG9kX3NldF9zdG9tcF9wYXJhbV8yKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdG9tcF9wYXJhbV8zLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9zdG9tcF9wYXJhbV8zLCBwb2Rfc2V0X3N0b21wX3BhcmFtXzMpOworc3RhdGljIERFVklDRV9BVFRSKHN0b21wX3BhcmFtXzQsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3N0b21wX3BhcmFtXzQsIHBvZF9zZXRfc3RvbXBfcGFyYW1fNCk7CitzdGF0aWMgREVWSUNFX0FUVFIoc3RvbXBfcGFyYW1fNSwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfc3RvbXBfcGFyYW1fNSwgcG9kX3NldF9zdG9tcF9wYXJhbV81KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdG9tcF9wYXJhbV82LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9zdG9tcF9wYXJhbV82LCBwb2Rfc2V0X3N0b21wX3BhcmFtXzYpOworc3RhdGljIERFVklDRV9BVFRSKGFtcF9zd2l0Y2hfc2VsZWN0LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9hbXBfc3dpdGNoX3NlbGVjdCwgcG9kX3NldF9hbXBfc3dpdGNoX3NlbGVjdCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfcGFyYW1fNCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfZGVsYXlfcGFyYW1fNCwgcG9kX3NldF9kZWxheV9wYXJhbV80KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV9wYXJhbV81LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV9wYXJhbV81LCBwb2Rfc2V0X2RlbGF5X3BhcmFtXzUpOworc3RhdGljIERFVklDRV9BVFRSKGRlbGF5X3ByZV9wb3N0LCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV9wcmVfcG9zdCwgcG9kX3NldF9kZWxheV9wcmVfcG9zdCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVsYXlfbW9kZWwsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2RlbGF5X21vZGVsLCBwb2Rfc2V0X2RlbGF5X21vZGVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZWxheV92ZXJiX21vZGVsLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9kZWxheV92ZXJiX21vZGVsLCBwb2Rfc2V0X2RlbGF5X3ZlcmJfbW9kZWwpOworc3RhdGljIERFVklDRV9BVFRSKHRlbXBvX21zYiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfdGVtcG9fbXNiLCBwb2Rfc2V0X3RlbXBvX21zYik7CitzdGF0aWMgREVWSUNFX0FUVFIodGVtcG9fbHNiLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF90ZW1wb19sc2IsIHBvZF9zZXRfdGVtcG9fbHNiKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih3YWhfbW9kZWwsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3dhaF9tb2RlbCwgcG9kX3NldF93YWhfbW9kZWwpOworc3RhdGljIERFVklDRV9BVFRSKGJ5cGFzc192b2x1bWUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2J5cGFzc192b2x1bWUsIHBvZF9zZXRfYnlwYXNzX3ZvbHVtZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZnhfbG9vcF9vbl9vZmYsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2Z4X2xvb3Bfb25fb2ZmLCBwb2Rfc2V0X2Z4X2xvb3Bfb25fb2ZmKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0d2Vha19wYXJhbV9zZWxlY3QsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3R3ZWFrX3BhcmFtX3NlbGVjdCwgcG9kX3NldF90d2Vha19wYXJhbV9zZWxlY3QpOworc3RhdGljIERFVklDRV9BVFRSKGFtcDFfZW5nYWdlLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9hbXAxX2VuZ2FnZSwgcG9kX3NldF9hbXAxX2VuZ2FnZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmFuZF8xX2dhaW4sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfMV9nYWluLCBwb2Rfc2V0X2JhbmRfMV9nYWluKTsKK3N0YXRpYyBERVZJQ0VfQVRUUjIoYmFuZF8yX2dhaW5fX2Jhc3MsIGJhbmRfMl9nYWluLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzJfZ2Fpbl9fYmFzcywgcG9kX3NldF9iYW5kXzJfZ2Fpbl9fYmFzcyk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmFuZF8yX2dhaW4sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfMl9nYWluLCBwb2Rfc2V0X2JhbmRfMl9nYWluKTsKK3N0YXRpYyBERVZJQ0VfQVRUUjIoYmFuZF8zX2dhaW5fX2Jhc3MsIGJhbmRfM19nYWluLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzNfZ2Fpbl9fYmFzcywgcG9kX3NldF9iYW5kXzNfZ2Fpbl9fYmFzcyk7CitzdGF0aWMgREVWSUNFX0FUVFIoYmFuZF8zX2dhaW4sIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2JhbmRfM19nYWluLCBwb2Rfc2V0X2JhbmRfM19nYWluKTsKK3N0YXRpYyBERVZJQ0VfQVRUUjIoYmFuZF80X2dhaW5fX2Jhc3MsIGJhbmRfNF9nYWluLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzRfZ2Fpbl9fYmFzcywgcG9kX3NldF9iYW5kXzRfZ2Fpbl9fYmFzcyk7CitzdGF0aWMgREVWSUNFX0FUVFIyKGJhbmRfNV9nYWluX19iYXNzLCBiYW5kXzVfZ2FpbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF81X2dhaW5fX2Jhc3MsIHBvZF9zZXRfYmFuZF81X2dhaW5fX2Jhc3MpOworc3RhdGljIERFVklDRV9BVFRSKGJhbmRfNF9nYWluLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF9iYW5kXzRfZ2FpbiwgcG9kX3NldF9iYW5kXzRfZ2Fpbik7CitzdGF0aWMgREVWSUNFX0FUVFIyKGJhbmRfNl9nYWluX19iYXNzLCBiYW5kXzZfZ2FpbiwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfYmFuZF82X2dhaW5fX2Jhc3MsIHBvZF9zZXRfYmFuZF82X2dhaW5fX2Jhc3MpOworc3RhdGljIERFVklDRV9BVFRSKGJvZHksIFNfSVJVR08sIHZhcmlheF9nZXRfYm9keSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwaWNrdXAxX2VuYWJsZSwgU19JUlVHTywgdmFyaWF4X2dldF9waWNrdXAxX2VuYWJsZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwaWNrdXAxX3R5cGUsIFNfSVJVR08sIHZhcmlheF9nZXRfcGlja3VwMV90eXBlLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHBpY2t1cDFfcG9zaXRpb24sIFNfSVJVR08sIHZhcmlheF9nZXRfcGlja3VwMV9wb3NpdGlvbiwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwaWNrdXAxX2FuZ2xlLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3BpY2t1cDFfYW5nbGUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGlja3VwMV9sZXZlbCwgU19JUlVHTywgdmFyaWF4X2dldF9waWNrdXAxX2xldmVsLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHBpY2t1cDJfZW5hYmxlLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3BpY2t1cDJfZW5hYmxlLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHBpY2t1cDJfdHlwZSwgU19JUlVHTywgdmFyaWF4X2dldF9waWNrdXAyX3R5cGUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGlja3VwMl9wb3NpdGlvbiwgU19JUlVHTywgdmFyaWF4X2dldF9waWNrdXAyX3Bvc2l0aW9uLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHBpY2t1cDJfYW5nbGUsIFNfSVJVR08sIHZhcmlheF9nZXRfcGlja3VwMl9hbmdsZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwaWNrdXAyX2xldmVsLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3BpY2t1cDJfbGV2ZWwsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGlja3VwX3BoYXNlLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3BpY2t1cF9waGFzZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjYXBhY2l0YW5jZSwgU19JUlVHTywgdmFyaWF4X2dldF9jYXBhY2l0YW5jZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0b25lX3Jlc2lzdGFuY2UsIFNfSVJVR08sIHZhcmlheF9nZXRfdG9uZV9yZXNpc3RhbmNlLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHZvbHVtZV9yZXNpc3RhbmNlLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3ZvbHVtZV9yZXNpc3RhbmNlLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHRhcGVyLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3RhcGVyLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHRvbmVfZHVtcCwgU19JUlVHTywgdmFyaWF4X2dldF90b25lX2R1bXAsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoc2F2ZV90b25lLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3NhdmVfdG9uZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih2b2x1bWVfZHVtcCwgU19JUlVHTywgdmFyaWF4X2dldF92b2x1bWVfZHVtcCwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0dW5pbmdfZW5hYmxlLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3R1bmluZ19lbmFibGUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodHVuaW5nNiwgU19JUlVHTywgdmFyaWF4X2dldF90dW5pbmc2LCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHR1bmluZzUsIFNfSVJVR08sIHZhcmlheF9nZXRfdHVuaW5nNSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0dW5pbmc0LCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3R1bmluZzQsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodHVuaW5nMywgU19JUlVHTywgdmFyaWF4X2dldF90dW5pbmczLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHR1bmluZzIsIFNfSVJVR08sIHZhcmlheF9nZXRfdHVuaW5nMiwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0dW5pbmcxLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X3R1bmluZzEsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGV0dW5lNiwgU19JUlVHTywgdmFyaWF4X2dldF9kZXR1bmU2LCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGRldHVuZTUsIFNfSVJVR08sIHZhcmlheF9nZXRfZGV0dW5lNSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZXR1bmU0LCBTX0lSVUdPLCB2YXJpYXhfZ2V0X2RldHVuZTQsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGV0dW5lMywgU19JUlVHTywgdmFyaWF4X2dldF9kZXR1bmUzLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGRldHVuZTIsIFNfSVJVR08sIHZhcmlheF9nZXRfZGV0dW5lMiwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZXR1bmUxLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X2RldHVuZTEsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobWl4NiwgU19JUlVHTywgdmFyaWF4X2dldF9taXg2LCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKG1peDUsIFNfSVJVR08sIHZhcmlheF9nZXRfbWl4NSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtaXg0LCBTX0lSVUdPLCB2YXJpYXhfZ2V0X21peDQsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobWl4MywgU19JUlVHTywgdmFyaWF4X2dldF9taXgzLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKG1peDIsIFNfSVJVR08sIHZhcmlheF9nZXRfbWl4MiwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtaXgxLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X21peDEsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocGlja3VwX3dpcmluZywgU19JUlVHTywgdmFyaWF4X2dldF9waWNrdXBfd2lyaW5nLCBsaW5lNl9ub3Bfd3JpdGUpOworCitpbnQgcG9kX2NyZWF0ZV9maWxlcyhpbnQgZmlybXdhcmUsIGludCB0eXBlLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R3ZWFrKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl93YWhfcG9zaXRpb24pKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY29tcHJlc3Npb25fZ2FpbikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sX3BlZGFsX3Bvc2l0aW9uKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jb21wcmVzc2lvbl90aHJlc2hvbGQpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3BhbikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYW1wX21vZGVsX3NldHVwKSk7CisJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9hbXBfbW9kZWwpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RyaXZlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYXNzKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21pZCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbG93bWlkKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3RyZWJsZSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaGlnaG1pZCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY2hhbl92b2wpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX21peCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZWZmZWN0X3NldHVwKSk7CisJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzFfZnJlcXVlbmN5KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3ByZXNlbmNlKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90cmVibGVfX2Jhc3MpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX25vaXNlX2dhdGVfZW5hYmxlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9nYXRlX3RocmVzaG9sZCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZ2F0ZV9kZWNheV90aW1lKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9lbmFibGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2NvbXBfZW5hYmxlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF90aW1lKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9lbmFibGUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV8xKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV8xKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV8xX25vdGVfdmFsdWUpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzJfZnJlcXVlbmN5X19iYXNzKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV8yKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV92b2x1bWVfbWl4KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV8zKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl9lbmFibGUpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX3R5cGUpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX2RlY2F5KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl90b25lKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl9wcmVfZGVsYXkpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV2ZXJiX3ByZV9wb3N0KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzJfZnJlcXVlbmN5KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8zX2ZyZXF1ZW5jeV9fYmFzcykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfd2FoX2VuYWJsZSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kdWxhdGlvbl9sb19jdXQpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3JldmVyYl9sb19jdXQpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbHVtZV9wZWRhbF9taW5pbXVtKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZXFfcHJlX3Bvc3QpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbHVtZV9wcmVfcG9zdCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGlfbW9kZWwpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpX2RlbGF5KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfZW5hYmxlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fMV9ub3RlX3ZhbHVlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fMikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzMpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV80KSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fNSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3ZvbHVtZV9taXgpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wcmVfcG9zdCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kdWxhdGlvbl9tb2RlbCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8zX2ZyZXF1ZW5jeSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNF9mcmVxdWVuY3lfX2Jhc3MpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24pKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbikpOworCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZXFfZW5hYmxlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90YXApKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbHVtZV90d2Vha19wZWRhbF9hc3NpZ24pKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzVfZnJlcXVlbmN5KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5lcikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWljX3NlbGVjdGlvbikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY2FiaW5ldF9tb2RlbCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfbW9kZWwpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Jvb21sZXZlbCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF80X2ZyZXF1ZW5jeSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNl9mcmVxdWVuY3kpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3BhcmFtXzFfbm90ZV92YWx1ZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfcGFyYW1fMikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfcGFyYW1fMykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfcGFyYW1fNCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfcGFyYW1fNSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfcGFyYW1fNikpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0xJVkUpKSAhPSAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2FtcF9zd2l0Y2hfc2VsZWN0KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV80KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV81KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wcmVfcG9zdCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9tb2RlbCkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfdmVyYl9tb2RlbCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdGVtcG9fbXNiKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90ZW1wb19sc2IpKTsKKwlpZiAoZmlybXdhcmUgPj0gMzAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3dhaF9tb2RlbCkpOworCWlmIChmaXJtd2FyZSA+PSAyMTQpCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYnlwYXNzX3ZvbHVtZSkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BSTykpICE9IDApCisJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZnhfbG9vcF9vbl9vZmYpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3R3ZWFrX3BhcmFtX3NlbGVjdCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYW1wMV9lbmdhZ2UpKTsKKwlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfMV9nYWluKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8yX2dhaW5fX2Jhc3MpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfMl9nYWluKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8zX2dhaW5fX2Jhc3MpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfM19nYWluKSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF80X2dhaW5fX2Jhc3MpKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzVfZ2Fpbl9fYmFzcykpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF80X2dhaW4pKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzZfZ2Fpbl9fYmFzcykpOworICByZXR1cm4gMDsKK30KKwordm9pZCBwb2RfcmVtb3ZlX2ZpbGVzKGludCBmaXJtd2FyZSwgaW50IHR5cGUsIHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHdlYWspOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl93YWhfcG9zaXRpb24pOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2NvbXByZXNzaW9uX2dhaW4pOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl92b2xfcGVkYWxfcG9zaXRpb24pOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9jb21wcmVzc2lvbl90aHJlc2hvbGQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9wYW4pOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9hbXBfbW9kZWxfc2V0dXApOworCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9hbXBfbW9kZWwpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kcml2ZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2Jhc3MpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21pZCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2xvd21pZCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHJlYmxlKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaGlnaG1pZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2NoYW5fdm9sKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfbWl4KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZWZmZWN0X3NldHVwKTsKKwlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8xX2ZyZXF1ZW5jeSk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHJlc2VuY2UpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90cmVibGVfX2Jhc3MpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9ub2lzZV9nYXRlX2VuYWJsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2dhdGVfdGhyZXNob2xkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZ2F0ZV9kZWNheV90aW1lKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfZW5hYmxlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY29tcF9lbmFibGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF90aW1lKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfZW5hYmxlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzEpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV8xKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcGFyYW1fMV9ub3RlX3ZhbHVlKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfMl9mcmVxdWVuY3lfX2Jhc3MpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV8yKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfdm9sdW1lX21peCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzMpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl9lbmFibGUpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl90eXBlKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfZGVjYXkpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldmVyYl90b25lKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfcHJlX2RlbGF5KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXZlcmJfcHJlX3Bvc3QpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzJfZnJlcXVlbmN5KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfM19mcmVxdWVuY3lfX2Jhc3MpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl93YWhfZW5hYmxlKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kdWxhdGlvbl9sb19jdXQpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9yZXZlcmJfbG9fY3V0KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sdW1lX3BlZGFsX21pbmltdW0pOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZXFfcHJlX3Bvc3QpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl92b2x1bWVfcHJlX3Bvc3QpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kaV9tb2RlbCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpX2RlbGF5KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX2VuYWJsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV8xX25vdGVfdmFsdWUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fMik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV8zKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3BhcmFtXzQpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RfcGFyYW1fNSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF92b2x1bWVfbWl4KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kX3ByZV9wb3N0KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kdWxhdGlvbl9tb2RlbCk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfM19mcmVxdWVuY3kpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF80X2ZyZXF1ZW5jeV9fYmFzcyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21vZF9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24pOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV8xX2RvdWJsZV9wcmVjaXNpb24pOworCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9lcV9lbmFibGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90YXApOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl92b2x1bWVfdHdlYWtfcGVkYWxfYXNzaWduKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNV9mcmVxdWVuY3kpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5lcik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21pY19zZWxlY3Rpb24pOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9jYWJpbmV0X21vZGVsKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfbW9kZWwpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yb29tbGV2ZWwpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzRfZnJlcXVlbmN5KTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNl9mcmVxdWVuY3kpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9wYXJhbV8xX25vdGVfdmFsdWUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9wYXJhbV8yKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfcGFyYW1fMyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b21wX3BhcmFtXzQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9tcF9wYXJhbV81KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvbXBfcGFyYW1fNik7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfTElWRSkpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9hbXBfc3dpdGNoX3NlbGVjdCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X3BhcmFtXzQpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWxheV9wYXJhbV81KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfcHJlX3Bvc3QpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RlbGF5X21vZGVsKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVsYXlfdmVyYl9tb2RlbCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3RlbXBvX21zYik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3RlbXBvX2xzYik7CisJaWYgKGZpcm13YXJlID49IDMwMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3dhaF9tb2RlbCk7CisJaWYgKGZpcm13YXJlID49IDIxNCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2J5cGFzc192b2x1bWUpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BSTykpICE9IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9meF9sb29wX29uX29mZik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R3ZWFrX3BhcmFtX3NlbGVjdCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2FtcDFfZW5nYWdlKTsKKwlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8xX2dhaW4pOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF8yX2dhaW5fX2Jhc3MpOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzJfZ2Fpbik7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMKSkgIT0gMCkKKwkJaWYgKGZpcm13YXJlID49IDIwMCkKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5kXzNfZ2Fpbl9fYmFzcyk7CisJaWYgKCh0eXBlICYgKExJTkU2X0JJVFNfUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfM19nYWluKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNF9nYWluX19iYXNzKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19CQVNTUE9EWFRBTEwpKSAhPSAwKQorCQlpZiAoZmlybXdhcmUgPj0gMjAwKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhbmRfNV9nYWluX19iYXNzKTsKKwlpZiAoKHR5cGUgJiAoTElORTZfQklUU19QT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF80X2dhaW4pOworCWlmICgodHlwZSAmIChMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCkpICE9IDApCisJCWlmIChmaXJtd2FyZSA+PSAyMDApCisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmFuZF82X2dhaW5fX2Jhc3MpOworfQorCitFWFBPUlRfU1lNQk9MKHBvZF9jcmVhdGVfZmlsZXMpOworRVhQT1JUX1NZTUJPTChwb2RfcmVtb3ZlX2ZpbGVzKTsKKworaW50IHZhcmlheF9jcmVhdGVfZmlsZXMoaW50IGZpcm13YXJlLCBpbnQgdHlwZSwgc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBlcnI7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9ib2R5KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAxX2VuYWJsZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMV90eXBlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAxX3Bvc2l0aW9uKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAxX2FuZ2xlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAxX2xldmVsKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAyX2VuYWJsZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMl90eXBlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAyX3Bvc2l0aW9uKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAyX2FuZ2xlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAyX2xldmVsKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXBfcGhhc2UpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2NhcGFjaXRhbmNlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90b25lX3Jlc2lzdGFuY2UpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbHVtZV9yZXNpc3RhbmNlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90YXBlcikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdG9uZV9kdW1wKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zYXZlX3RvbmUpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbHVtZV9kdW1wKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmdfZW5hYmxlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmc2KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmc1KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmc0KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmczKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmcyKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmcxKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXR1bmU2KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXR1bmU1KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXR1bmU0KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXR1bmUzKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXR1bmUyKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXR1bmUxKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9taXg2KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9taXg1KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9taXg0KSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9taXgzKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9taXgyKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9taXgxKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXBfd2lyaW5nKSk7CisgIHJldHVybiAwOworfQorCit2b2lkIHZhcmlheF9yZW1vdmVfZmlsZXMoaW50IGZpcm13YXJlLCBpbnQgdHlwZSwgc3RydWN0IGRldmljZSAqZGV2KQoreworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9ib2R5KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMV9lbmFibGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAxX3R5cGUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAxX3Bvc2l0aW9uKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMV9hbmdsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDFfbGV2ZWwpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAyX2VuYWJsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDJfdHlwZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cDJfcG9zaXRpb24pOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9waWNrdXAyX2FuZ2xlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGlja3VwMl9sZXZlbCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cF9waGFzZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2NhcGFjaXRhbmNlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdG9uZV9yZXNpc3RhbmNlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sdW1lX3Jlc2lzdGFuY2UpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90YXBlcik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3RvbmVfZHVtcCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3NhdmVfdG9uZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3ZvbHVtZV9kdW1wKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nX2VuYWJsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZzYpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmc1KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nNCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmluZzMpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5pbmcyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdHVuaW5nMSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldHVuZTYpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXR1bmU1KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV0dW5lNCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RldHVuZTMpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXR1bmUyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV0dW5lMSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21peDYpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9taXg1KTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWl4NCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21peDMpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9taXgyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWl4MSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BpY2t1cF93aXJpbmcpOworfQorCitFWFBPUlRfU1lNQk9MKHZhcmlheF9jcmVhdGVfZmlsZXMpOworRVhQT1JUX1NZTUJPTCh2YXJpYXhfcmVtb3ZlX2ZpbGVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jb250cm9sLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY29udHJvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMTk2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY29udHJvbC5oCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBMSU5FNl9DT05UUk9MX0gKKyNkZWZpbmUgTElORTZfQ09OVFJPTF9ICisKKworLyoqCisgICBMaXN0IG9mIFBPRHh0IFBybyBjb250cm9scy4KKyAgIFNlZSBBcHBlbmRpeCBDIG9mIHRoZSAiUE9EeHQgKFBybykgUGlsb3QncyBIYW5kYm9vayIgYnkgTGluZTYuCisgICBDb21tZW50cyBhZnRlciB0aGUgbnVtYmVyIHJlZmVyIHRvIHRoZSBQT0R4dCBQcm8gZmlybXdhcmUgdmVyc2lvbiByZXF1aXJlZAorICAgZm9yIHRoaXMgZmVhdHVyZS4KKyovCitlbnVtIHsKKwlQT0RfdHdlYWsgICAgICAgICAgICAgICAgICAgICAgICAgID0gICAxLAorCVBPRF93YWhfcG9zaXRpb24gICAgICAgICAgICAgICAgICAgPSAgIDQsCisJUE9EX2NvbXByZXNzaW9uX2dhaW4gICAgICAgICAgICAgICA9ICAgNSwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLworCVBPRF92b2xfcGVkYWxfcG9zaXRpb24gICAgICAgICAgICAgPSAgIDcsCisJUE9EX2NvbXByZXNzaW9uX3RocmVzaG9sZCAgICAgICAgICA9ICAgOSwKKwlQT0RfcGFuICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gIDEwLAorCVBPRF9hbXBfbW9kZWxfc2V0dXAgICAgICAgICAgICAgICAgPSAgMTEsCisJUE9EX2FtcF9tb2RlbCAgICAgICAgICAgICAgICAgICAgICA9ICAxMiwgIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfZHJpdmUgICAgICAgICAgICAgICAgICAgICAgICAgID0gIDEzLAorCVBPRF9iYXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgMTQsCisJUE9EX21pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICAxNSwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLworCVBPRF9sb3dtaWQgICAgICAgICAgICAgICAgICAgICAgICAgPSAgMTUsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovCisJUE9EX3RyZWJsZSAgICAgICAgICAgICAgICAgICAgICAgICA9ICAxNiwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLworCVBPRF9oaWdobWlkICAgICAgICAgICAgICAgICAgICAgICAgPSAgMTYsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovCisJUE9EX2NoYW5fdm9sICAgICAgICAgICAgICAgICAgICAgICA9ICAxNywKKwlQT0RfcmV2ZXJiX21peCAgICAgICAgICAgICAgICAgICAgID0gIDE4LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovCisJUE9EX2VmZmVjdF9zZXR1cCAgICAgICAgICAgICAgICAgICA9ICAxOSwKKwlQT0RfYmFuZF8xX2ZyZXF1ZW5jeSAgICAgICAgICAgICAgID0gIDIwLCAgLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9wcmVzZW5jZSAgICAgICAgICAgICAgICAgICAgICAgPSAgMjEsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8KKwlQT0RfdHJlYmxlX19iYXNzICAgICAgICAgICAgICAgICAgID0gIDIxLCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLworCVBPRF9ub2lzZV9nYXRlX2VuYWJsZSAgICAgICAgICAgICAgPSAgMjIsCisJUE9EX2dhdGVfdGhyZXNob2xkICAgICAgICAgICAgICAgICA9ICAyMywKKwlQT0RfZ2F0ZV9kZWNheV90aW1lICAgICAgICAgICAgICAgID0gIDI0LAorCVBPRF9zdG9tcF9lbmFibGUgICAgICAgICAgICAgICAgICAgPSAgMjUsCisJUE9EX2NvbXBfZW5hYmxlICAgICAgICAgICAgICAgICAgICA9ICAyNiwKKwlQT0Rfc3RvbXBfdGltZSAgICAgICAgICAgICAgICAgICAgID0gIDI3LAorCVBPRF9kZWxheV9lbmFibGUgICAgICAgICAgICAgICAgICAgPSAgMjgsCisJUE9EX21vZF9wYXJhbV8xICAgICAgICAgICAgICAgICAgICA9ICAyOSwKKwlQT0RfZGVsYXlfcGFyYW1fMSAgICAgICAgICAgICAgICAgID0gIDMwLAorCVBPRF9kZWxheV9wYXJhbV8xX25vdGVfdmFsdWUgICAgICAgPSAgMzEsCisJUE9EX2JhbmRfMl9mcmVxdWVuY3lfX2Jhc3MgICAgICAgICA9ICAzMiwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8gLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9kZWxheV9wYXJhbV8yICAgICAgICAgICAgICAgICAgPSAgMzMsCisJUE9EX2RlbGF5X3ZvbHVtZV9taXggICAgICAgICAgICAgICA9ICAzNCwKKwlQT0RfZGVsYXlfcGFyYW1fMyAgICAgICAgICAgICAgICAgID0gIDM1LAorCVBPRF9yZXZlcmJfZW5hYmxlICAgICAgICAgICAgICAgICAgPSAgMzYsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8KKwlQT0RfcmV2ZXJiX3R5cGUgICAgICAgICAgICAgICAgICAgID0gIDM3LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovCisJUE9EX3JldmVyYl9kZWNheSAgICAgICAgICAgICAgICAgICA9ICAzOCwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLworCVBPRF9yZXZlcmJfdG9uZSAgICAgICAgICAgICAgICAgICAgPSAgMzksICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8KKwlQT0RfcmV2ZXJiX3ByZV9kZWxheSAgICAgICAgICAgICAgID0gIDQwLCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovCisJUE9EX3JldmVyYl9wcmVfcG9zdCAgICAgICAgICAgICAgICA9ICA0MSwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLworCVBPRF9iYW5kXzJfZnJlcXVlbmN5ICAgICAgICAgICAgICAgPSAgNDIsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8gICAgIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfYmFuZF8zX2ZyZXF1ZW5jeV9fYmFzcyAgICAgICAgID0gIDQyLCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLyAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX3dhaF9lbmFibGUgICAgICAgICAgICAgICAgICAgICA9ICA0MywKKwlQT0RfbW9kdWxhdGlvbl9sb19jdXQgICAgICAgICAgICAgID0gIDQ0LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLworCVBPRF9kZWxheV9yZXZlcmJfbG9fY3V0ICAgICAgICAgICAgPSAgNDUsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovCisJUE9EX3ZvbHVtZV9wZWRhbF9taW5pbXVtICAgICAgICAgICA9ICA0NiwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLyAgICAgLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9lcV9wcmVfcG9zdCAgICAgICAgICAgICAgICAgICAgPSAgNDYsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0Rfdm9sdW1lX3ByZV9wb3N0ICAgICAgICAgICAgICAgID0gIDQ3LAorCVBPRF9kaV9tb2RlbCAgICAgICAgICAgICAgICAgICAgICAgPSAgNDgsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovCisJUE9EX2RpX2RlbGF5ICAgICAgICAgICAgICAgICAgICAgICA9ICA0OSwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8KKwlQT0RfbW9kX2VuYWJsZSAgICAgICAgICAgICAgICAgICAgID0gIDUwLAorCVBPRF9tb2RfcGFyYW1fMV9ub3RlX3ZhbHVlICAgICAgICAgPSAgNTEsCisJUE9EX21vZF9wYXJhbV8yICAgICAgICAgICAgICAgICAgICA9ICA1MiwKKwlQT0RfbW9kX3BhcmFtXzMgICAgICAgICAgICAgICAgICAgID0gIDUzLAorCVBPRF9tb2RfcGFyYW1fNCAgICAgICAgICAgICAgICAgICAgPSAgNTQsCisJUE9EX21vZF9wYXJhbV81ICAgICAgICAgICAgICAgICAgICA9ICA1NSwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8KKwlQT0RfbW9kX3ZvbHVtZV9taXggICAgICAgICAgICAgICAgID0gIDU2LAorCVBPRF9tb2RfcHJlX3Bvc3QgICAgICAgICAgICAgICAgICAgPSAgNTcsCisJUE9EX21vZHVsYXRpb25fbW9kZWwgICAgICAgICAgICAgICA9ICA1OCwKKwlQT0RfYmFuZF8zX2ZyZXF1ZW5jeSAgICAgICAgICAgICAgID0gIDYwLCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovICAgICAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2JhbmRfNF9mcmVxdWVuY3lfX2Jhc3MgICAgICAgICA9ICA2MCwgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8gLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9tb2RfcGFyYW1fMV9kb3VibGVfcHJlY2lzaW9uICAgPSAgNjEsCisJUE9EX2RlbGF5X3BhcmFtXzFfZG91YmxlX3ByZWNpc2lvbiA9ICA2MiwKKwlQT0RfZXFfZW5hYmxlICAgICAgICAgICAgICAgICAgICAgID0gIDYzLCAgLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF90YXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgNjQsCisJUE9EX3ZvbHVtZV90d2Vha19wZWRhbF9hc3NpZ24gICAgICA9ICA2NSwKKwlQT0RfYmFuZF81X2ZyZXF1ZW5jeSAgICAgICAgICAgICAgID0gIDY4LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLyAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX3R1bmVyICAgICAgICAgICAgICAgICAgICAgICAgICA9ICA2OSwKKwlQT0RfbWljX3NlbGVjdGlvbiAgICAgICAgICAgICAgICAgID0gIDcwLAorCVBPRF9jYWJpbmV0X21vZGVsICAgICAgICAgICAgICAgICAgPSAgNzEsCisJUE9EX3N0b21wX21vZGVsICAgICAgICAgICAgICAgICAgICA9ICA3NSwKKwlQT0Rfcm9vbWxldmVsICAgICAgICAgICAgICAgICAgICAgID0gIDc2LAorCVBPRF9iYW5kXzRfZnJlcXVlbmN5ICAgICAgICAgICAgICAgPSAgNzcsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfUE9EWFRBTEwgKi8gICAgIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfYmFuZF82X2ZyZXF1ZW5jeSAgICAgICAgICAgICAgID0gIDc3LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLyAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX3N0b21wX3BhcmFtXzFfbm90ZV92YWx1ZSAgICAgICA9ICA3OCwKKwlQT0Rfc3RvbXBfcGFyYW1fMiAgICAgICAgICAgICAgICAgID0gIDc5LAorCVBPRF9zdG9tcF9wYXJhbV8zICAgICAgICAgICAgICAgICAgPSAgODAsCisJUE9EX3N0b21wX3BhcmFtXzQgICAgICAgICAgICAgICAgICA9ICA4MSwKKwlQT0Rfc3RvbXBfcGFyYW1fNSAgICAgICAgICAgICAgICAgID0gIDgyLAorCVBPRF9zdG9tcF9wYXJhbV82ICAgICAgICAgICAgICAgICAgPSAgODMsCisJUE9EX2FtcF9zd2l0Y2hfc2VsZWN0ICAgICAgICAgICAgICA9ICA4NCwgIC8qIGRldmljZTogTElORTZfQklUU19MSVZFICovCisJUE9EX2RlbGF5X3BhcmFtXzQgICAgICAgICAgICAgICAgICA9ICA4NSwKKwlQT0RfZGVsYXlfcGFyYW1fNSAgICAgICAgICAgICAgICAgID0gIDg2LAorCVBPRF9kZWxheV9wcmVfcG9zdCAgICAgICAgICAgICAgICAgPSAgODcsCisJUE9EX2RlbGF5X21vZGVsICAgICAgICAgICAgICAgICAgICA9ICA4OCwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLworCVBPRF9kZWxheV92ZXJiX21vZGVsICAgICAgICAgICAgICAgPSAgODgsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovCisJUE9EX3RlbXBvX21zYiAgICAgICAgICAgICAgICAgICAgICA9ICA4OSwKKwlQT0RfdGVtcG9fbHNiICAgICAgICAgICAgICAgICAgICAgID0gIDkwLAorCVBPRF93YWhfbW9kZWwgICAgICAgICAgICAgICAgICAgICAgPSAgOTEsICAvKiBmaXJtd2FyZTogMy4wICovCisJUE9EX2J5cGFzc192b2x1bWUgICAgICAgICAgICAgICAgICA9IDEwNSwgIC8qIGZpcm13YXJlOiAyLjE0ICovCisJUE9EX2Z4X2xvb3Bfb25fb2ZmICAgICAgICAgICAgICAgICA9IDEwNywgIC8qIGRldmljZTogTElORTZfQklUU19QUk8gKi8KKwlQT0RfdHdlYWtfcGFyYW1fc2VsZWN0ICAgICAgICAgICAgID0gMTA4LAorCVBPRF9hbXAxX2VuZ2FnZSAgICAgICAgICAgICAgICAgICAgPSAxMTEsCisJUE9EX2JhbmRfMV9nYWluICAgICAgICAgICAgICAgICAgICA9IDExNCwgIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfYmFuZF8yX2dhaW5fX2Jhc3MgICAgICAgICAgICAgID0gMTE1LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTCAqLyAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2JhbmRfMl9nYWluICAgICAgICAgICAgICAgICAgICA9IDExNiwgIC8qIGRldmljZTogTElORTZfQklUU19QT0RYVEFMTCAqLyAgICAgLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9iYW5kXzNfZ2Fpbl9fYmFzcyAgICAgICAgICAgICAgPSAxMTYsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfYmFuZF8zX2dhaW4gICAgICAgICAgICAgICAgICAgID0gMTE3LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovICAgICAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2JhbmRfNF9nYWluX19iYXNzICAgICAgICAgICAgICA9IDExNywgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8gLyogZmlybXdhcmU6IDIuMCAqLworCVBPRF9iYW5kXzVfZ2Fpbl9fYmFzcyAgICAgICAgICAgICAgPSAxMTgsICAvKiBkZXZpY2U6IExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMICovIC8qIGZpcm13YXJlOiAyLjAgKi8KKwlQT0RfYmFuZF80X2dhaW4gICAgICAgICAgICAgICAgICAgID0gMTE5LCAgLyogZGV2aWNlOiBMSU5FNl9CSVRTX1BPRFhUQUxMICovICAgICAvKiBmaXJtd2FyZTogMi4wICovCisJUE9EX2JhbmRfNl9nYWluX19iYXNzICAgICAgICAgICAgICA9IDExOSAgIC8qIGRldmljZTogTElORTZfQklUU19CQVNTUE9EWFRBTEwgKi8gLyogZmlybXdhcmU6IDIuMCAqLworfTsKKworLyoqCisgICBMaXN0IG9mIFZhcmlheCB3b3JrYmVuY2ggY29udHJvbHMgKGR1bXApLgorKi8KK2VudW0geworCVZBUklBWF9ib2R5ICAgICAgICAgICAgICAgICAgICAgICAgPSAgIDMsCisJVkFSSUFYX3BpY2t1cDFfZW5hYmxlICAgICAgICAgICAgICA9ICAgNCwgIC8qIDA6IGVuYWJsZWQsIDE6IGRpc2FibGVkICovCisJVkFSSUFYX3BpY2t1cDFfdHlwZSAgICAgICAgICAgICAgICA9ICAgOCwKKwlWQVJJQVhfcGlja3VwMV9wb3NpdGlvbiAgICAgICAgICAgID0gICA5LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX3BpY2t1cDFfYW5nbGUgICAgICAgICAgICAgICA9ICAxMiwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9waWNrdXAxX2xldmVsICAgICAgICAgICAgICAgPSAgMTUsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfcGlja3VwMl9lbmFibGUgICAgICAgICAgICAgID0gIDE4LCAgLyogMDogZW5hYmxlZCwgMTogZGlzYWJsZWQgKi8KKwlWQVJJQVhfcGlja3VwMl90eXBlICAgICAgICAgICAgICAgID0gIDIyLAorCVZBUklBWF9waWNrdXAyX3Bvc2l0aW9uICAgICAgICAgICAgPSAgMjMsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfcGlja3VwMl9hbmdsZSAgICAgICAgICAgICAgID0gIDI2LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX3BpY2t1cDJfbGV2ZWwgICAgICAgICAgICAgICA9ICAyOSwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9waWNrdXBfcGhhc2UgICAgICAgICAgICAgICAgPSAgMzIsICAvKiAwOiBpbiBwaGFzZSwgMTogb3V0IG9mIHBoYXNlICovCisJVkFSSUFYX2NhcGFjaXRhbmNlICAgICAgICAgICAgICAgICA9ICAzMywgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF90b25lX3Jlc2lzdGFuY2UgICAgICAgICAgICAgPSAgMzYsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfdm9sdW1lX3Jlc2lzdGFuY2UgICAgICAgICAgID0gIDM5LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX3RhcGVyICAgICAgICAgICAgICAgICAgICAgICA9ICA0MiwgIC8qIDA6IExpbmVhciwgMTogQXVkaW8gKi8KKwlWQVJJQVhfdG9uZV9kdW1wICAgICAgICAgICAgICAgICAgID0gIDQzLCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX3NhdmVfdG9uZSAgICAgICAgICAgICAgICAgICA9ICA0NiwKKwlWQVJJQVhfdm9sdW1lX2R1bXAgICAgICAgICAgICAgICAgID0gIDQ3LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX3R1bmluZ19lbmFibGUgICAgICAgICAgICAgICA9ICA1MCwKKwlWQVJJQVhfdHVuaW5nNiAgICAgICAgICAgICAgICAgICAgID0gIDUxLAorCVZBUklBWF90dW5pbmc1ICAgICAgICAgICAgICAgICAgICAgPSAgNTIsCisJVkFSSUFYX3R1bmluZzQgICAgICAgICAgICAgICAgICAgICA9ICA1MywKKwlWQVJJQVhfdHVuaW5nMyAgICAgICAgICAgICAgICAgICAgID0gIDU0LAorCVZBUklBWF90dW5pbmcyICAgICAgICAgICAgICAgICAgICAgPSAgNTUsCisJVkFSSUFYX3R1bmluZzEgICAgICAgICAgICAgICAgICAgICA9ICA1NiwKKwlWQVJJQVhfZGV0dW5lNiAgICAgICAgICAgICAgICAgICAgID0gIDU3LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX2RldHVuZTUgICAgICAgICAgICAgICAgICAgICA9ICA2MCwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9kZXR1bmU0ICAgICAgICAgICAgICAgICAgICAgPSAgNjMsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfZGV0dW5lMyAgICAgICAgICAgICAgICAgICAgID0gIDY2LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX2RldHVuZTIgICAgICAgICAgICAgICAgICAgICA9ICA2OSwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9kZXR1bmUxICAgICAgICAgICAgICAgICAgICAgPSAgNzIsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfbWl4NiAgICAgICAgICAgICAgICAgICAgICAgID0gIDc1LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX21peDUgICAgICAgICAgICAgICAgICAgICAgICA9ICA3OCwgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9taXg0ICAgICAgICAgICAgICAgICAgICAgICAgPSAgODEsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfbWl4MyAgICAgICAgICAgICAgICAgICAgICAgID0gIDg0LCAgLyogdHlwZTogMjQgYml0IGZsb2F0ICovCisJVkFSSUFYX21peDIgICAgICAgICAgICAgICAgICAgICAgICA9ICA4NywgIC8qIHR5cGU6IDI0IGJpdCBmbG9hdCAqLworCVZBUklBWF9taXgxICAgICAgICAgICAgICAgICAgICAgICAgPSAgOTAsICAvKiB0eXBlOiAyNCBiaXQgZmxvYXQgKi8KKwlWQVJJQVhfcGlja3VwX3dpcmluZyAgICAgICAgICAgICAgID0gIDk2ICAgLyogMDogcGFyYWxsZWwsIDE6IHNlcmllcyAqLworfTsKKworLyoqCisgICBMaXN0IG9mIFZhcmlheCB3b3JrYmVuY2ggY29udHJvbHMgKE1JREkpLgorKi8KK2VudW0geworCVZBUklBWE1JRElfdm9sdW1lICAgICAgICAgICAgICAgICAgPSAgIDcsCisJVkFSSUFYTUlESV90b25lICAgICAgICAgICAgICAgICAgICA9ICA3OSwKK307CisKKworZXh0ZXJuIGludCBwb2RfY3JlYXRlX2ZpbGVzKGludCBmaXJtd2FyZSwgaW50IHR5cGUsIHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwb2RfcmVtb3ZlX2ZpbGVzKGludCBmaXJtd2FyZSwgaW50IHR5cGUsIHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHZhcmlheF9jcmVhdGVfZmlsZXMoaW50IGZpcm13YXJlLCBpbnQgdHlwZSwgc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHZhcmlheF9yZW1vdmVfZmlsZXMoaW50IGZpcm13YXJlLCBpbnQgdHlwZSwgc3RydWN0IGRldmljZSAqZGV2KTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWEyMGQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5jCkBAIC0wLDAgKzEsMTEwMiBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAiYXVkaW8uaCIKKyNpbmNsdWRlICJjYXB0dXJlLmgiCisjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgIm1pZGkuaCIKKyNpbmNsdWRlICJwbGF5YmFjay5oIgorI2luY2x1ZGUgInBvZC5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAidG9uZXBvcnQuaCIKKyNpbmNsdWRlICJ1c2JkZWZzLmgiCisjaW5jbHVkZSAidmFyaWF4LmgiCisKKworI2RlZmluZSBEUklWRVJfQVVUSE9SICAiTWFya3VzIEdyYWJuZXIgPGdyYWJuZXJAaWNnLnR1Z3Jhei5hdD4iCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICJMaW5lNiBVU0IgRHJpdmVyIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC44LjAiCisKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGxpbmU2X2lkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfQkFTU1BPRFhUKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkUpIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfQkFTU1BPRFhUUFJPKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX0dVSVRBUlBPUlQpIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfUE9DS0VUUE9EKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1BPRFgzKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1BPRFgzTElWRSkgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9QT0RYVCkgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9QT0RYVExJVkUpIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfUE9EWFRQUk8pIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfVE9ORVBPUlRfR1gpIH0sCisJeyBVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfVE9ORVBPUlRfVVgxKSB9LAorCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMikgfSwKKwl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9WQVJJQVgpIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBsaW5lNl9pZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgbGluZTZfcHJvcGVydGllcyBsaW5lNl9wcm9wZXJ0aWVzX3RhYmxlW10gPSB7CisJeyAiQmFzc1BPRHh0IiwgICAgICAgIExJTkU2X0JJVF9CQVNTUE9EWFQsICAgICBMSU5FNl9CSVRfQ09OVFJPTF9QQ00gfSwKKwl7ICJCYXNzUE9EeHQgTGl2ZSIsICAgTElORTZfQklUX0JBU1NQT0RYVExJVkUsIExJTkU2X0JJVF9DT05UUk9MX1BDTSB9LAorCXsgIkJhc3NQT0R4dCBQcm8iLCAgICBMSU5FNl9CSVRfQkFTU1BPRFhUUFJPLCAgTElORTZfQklUX0NPTlRST0xfUENNIH0sCisJeyAiR3VpdGFyUG9ydCIsICAgICAgIExJTkU2X0JJVF9HVUlUQVJQT1JULCAgICBMSU5FNl9CSVRfUENNICAgICAgICAgfSwKKwl7ICJQb2NrZXQgUE9EIiwgICAgICAgTElORTZfQklUX1BPQ0tFVFBPRCwgICAgIExJTkU2X0JJVF9DT05UUk9MX1BDTSB9LAorCXsgIlBPRCBYMyIsICAgICAgICAgICBMSU5FNl9CSVRfUE9EWDMsICAgICAgICAgTElORTZfQklUX1BDTSAgICAgICAgIH0sCisJeyAiUE9EIFgzIExpdmUiLCAgICAgIExJTkU2X0JJVF9QT0RYM0xJVkUsICAgICBMSU5FNl9CSVRfUENNICAgICAgICAgfSwKKwl7ICJQT0R4dCIsICAgICAgICAgICAgTElORTZfQklUX1BPRFhULCAgICAgICAgIExJTkU2X0JJVF9DT05UUk9MX1BDTSB9LAorCXsgIlBPRHh0IExpdmUiLCAgICAgICBMSU5FNl9CSVRfUE9EWFRMSVZFLCAgICAgTElORTZfQklUX0NPTlRST0xfUENNIH0sCisJeyAiUE9EeHQgUHJvIiwgICAgICAgIExJTkU2X0JJVF9QT0RYVFBSTywgICAgICBMSU5FNl9CSVRfQ09OVFJPTF9QQ00gfSwKKwl7ICJUb25lUG9ydCBHWCIsICAgICAgTElORTZfQklUX1RPTkVQT1JUX0dYLCAgIExJTkU2X0JJVF9QQ00gICAgICAgICB9LAorCXsgIlRvbmVQb3J0IFVYMSIsICAgICBMSU5FNl9CSVRfVE9ORVBPUlRfVVgxLCAgTElORTZfQklUX1BDTSAgICAgICAgIH0sCisJeyAiVG9uZVBvcnQgVVgyIiwgICAgIExJTkU2X0JJVF9UT05FUE9SVF9VWDIsICBMSU5FNl9CSVRfUENNICAgICAgICAgfSwKKwl7ICJWYXJpYXggV29ya2JlbmNoIiwgTElORTZfQklUX1ZBUklBWCwgICAgICAgIExJTkU2X0JJVF9DT05UUk9MICAgICB9Cit9OworCisKKy8qCisJVGhpcyBpcyBMaW5lNidzIE1JREkgbWFudWZhY3R1cmVyIElELgorKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgbGluZTZfbWlkaV9pZFtdID0geyAweDAwLCAweDAxLCAweDBjIH07CisKK3N0cnVjdCB1c2JfbGluZTYgKmxpbmU2X2RldmljZXNbTElORTZfTUFYX0RFVklDRVNdOworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmxpbmU2X3dvcmtxdWV1ZTsKKworCisvKioKKwkgQ2xhc3MgZm9yIGFzeW5jaHJvbm91cyBtZXNzYWdlcy4KKyovCitzdHJ1Y3QgbWVzc2FnZSB7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTY7CisJY29uc3QgY2hhciAqYnVmZmVyOworCWludCBzaXplOworCWludCBkb25lOworfTsKKworCisvKgorCUZvcndhcmQgZGVjbGFyYXRpb25zLgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X2RhdGFfcmVjZWl2ZWQoc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyBpbnQgbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luY19wYXJ0KHN0cnVjdCBtZXNzYWdlICptc2csCisJCQkJCSAgICAgc3RydWN0IHVyYiAqdXJiKTsKKworCisvKgorCVN0YXJ0IHRvIGxpc3RlbiBvbiBlbmRwb2ludC4KKyovCitzdGF0aWMgaW50IGxpbmU2X3N0YXJ0X2xpc3RlbihzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNikKK3sKKwl1c2JfZmlsbF9pbnRfdXJiKGxpbmU2LT51cmJfbGlzdGVuLCBsaW5lNi0+dXNiZGV2LAorCQkJIHVzYl9yY3ZpbnRwaXBlKGxpbmU2LT51c2JkZXYsIGxpbmU2LT5lcF9jb250cm9sX3JlYWQpLAorCQkJIGxpbmU2LT5idWZmZXJfbGlzdGVuLCBMSU5FNl9CVUZTSVpFX0xJU1RFTiwKKwkJCSBsaW5lNl9kYXRhX3JlY2VpdmVkLCBsaW5lNiwgbGluZTYtPmludGVydmFsKTsKKwlsaW5lNi0+dXJiX2xpc3Rlbi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJcmV0dXJuIHVzYl9zdWJtaXRfdXJiKGxpbmU2LT51cmJfbGlzdGVuLCBHRlBfS0VSTkVMKTsKK30KKworI2lmIERPX0RVTVBfQU5ZCisvKgorCVdyaXRlIGhleGR1bXAgdG8gc3lzbG9nLgorKi8KK3ZvaWQgbGluZTZfd3JpdGVfaGV4ZHVtcChzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgY2hhciBkaXIsCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSkKK3sKKwlzdGF0aWMgY29uc3QgaW50IEJZVEVTX1BFUl9MSU5FID0gODsKKwljaGFyIGhleGR1bXBbMTAwXTsKKwljaGFyIGFzY1tCWVRFU19QRVJfTElORSArIDFdOworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gQllURVNfUEVSX0xJTkUpIHsKKwkJaW50IGhleGR1bXBzaXplID0gc2l6ZW9mKGhleGR1bXApOworCQljaGFyICpwID0gaGV4ZHVtcDsKKwkJaW50IG4gPSBtaW4oc2l6ZSAtIGksIEJZVEVTX1BFUl9MSU5FKTsKKwkJYXNjW25dID0gMDsKKworCQlmb3IgKGogPSAwOyBqIDwgQllURVNfUEVSX0xJTkU7ICsraikgeworCQkJaW50IGJ5dGVzOworCisJCQlpZiAoaiA8IG4pIHsKKwkJCQl1bnNpZ25lZCBjaGFyIHZhbCA9IGJ1ZmZlcltpICsgal07CisJCQkJYnl0ZXMgPSBzbnByaW50ZihwLCBoZXhkdW1wc2l6ZSwgIiAlMDJYIiwgdmFsKTsKKwkJCQlhc2Nbal0gPSAoKHZhbCA+PSAweDIwKSAmJiAodmFsIDwgMHg3ZikpID8gdmFsIDogJy4nOworCQkJfSBlbHNlCisJCQkJYnl0ZXMgPSBzbnByaW50ZihwLCBoZXhkdW1wc2l6ZSwgIiAgICIpOworCisJCQlpZiAoYnl0ZXMgPiBoZXhkdW1wc2l6ZSkKKwkJCQlicmVhazsgIC8qIGJ1ZmZlciBvdmVyZmxvdyAqLworCisJCQlwICs9IGJ5dGVzOworCQkJaGV4ZHVtcHNpemUgLT0gYnl0ZXM7CisJCX0KKworCQlkZXZfaW5mbyhsaW5lNi0+aWZjZGV2LCAiJWMlMDRYOiVzICVzXG4iLCBkaXIsIGksIGhleGR1bXAsIGFzYyk7CisJfQorfQorI2VuZGlmCisKKyNpZiBET19EVU1QX1VSQl9SRUNFSVZFCisvKgorCUR1bXAgVVJCIGRhdGEgdG8gc3lzbG9nLgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X2R1bXBfdXJiKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IChzdHJ1Y3QgdXNiX2xpbmU2ICopdXJiLT5jb250ZXh0OworCisJaWYgKHVyYi0+c3RhdHVzIDwgMCkKKwkJcmV0dXJuOworCisJbGluZTZfd3JpdGVfaGV4ZHVtcChsaW5lNiwgJ1InLCAodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICAgIHVyYi0+YWN0dWFsX2xlbmd0aCk7Cit9CisjZW5kaWYKKworLyoKKwlTZW5kIHJhdyBtZXNzYWdlIGluIHBpZWNlcyBvZiB3TWF4UGFja2V0U2l6ZSBieXRlcy4KKyovCitpbnQgbGluZTZfc2VuZF9yYXdfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgY29uc3QgY2hhciAqYnVmZmVyLAorCQkJICAgaW50IHNpemUpCit7CisJaW50IGksIGRvbmUgPSAwOworCisjaWYgRE9fRFVNUF9VUkJfU0VORAorCWxpbmU2X3dyaXRlX2hleGR1bXAobGluZTYsICdTJywgYnVmZmVyLCBzaXplKTsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gbGluZTYtPm1heF9wYWNrZXRfc2l6ZSkgeworCQlpbnQgcGFydGlhbDsKKwkJY29uc3QgY2hhciAqZnJhZ19idWYgPSBidWZmZXIgKyBpOworCQlpbnQgZnJhZ19zaXplID0gbWluKGxpbmU2LT5tYXhfcGFja2V0X3NpemUsIHNpemUgLSBpKTsKKwkJaW50IHJldHZhbDsKKworCQlyZXR2YWwgPSB1c2JfaW50ZXJydXB0X21zZyhsaW5lNi0+dXNiZGV2LAorCQkJCQkgICB1c2Jfc25kaW50cGlwZShsaW5lNi0+dXNiZGV2LAorCQkJCQkJCSAgbGluZTYtPmVwX2NvbnRyb2xfd3JpdGUpLAorCQkJCQkgICAoY2hhciAqKWZyYWdfYnVmLCBmcmFnX3NpemUsCisJCQkJCSAgICZwYXJ0aWFsLCBMSU5FNl9USU1FT1VUICogSFopOworCisJCWlmIChyZXR2YWwpIHsKKwkJCWRldl9lcnIobGluZTYtPmlmY2RldiwKKwkJCQkidXNiX2ludGVycnVwdF9tc2cgZmFpbGVkICglZClcbiIsIHJldHZhbCk7CisJCQlicmVhazsKKwkJfQorCisJCWRvbmUgKz0gZnJhZ19zaXplOworCX0KKworCXJldHVybiBkb25lOworfQorCisvKgorCU5vdGlmaWNhdGlvbiBvZiBjb21wbGV0aW9uIG9mIGFzeW5jaHJvbm91cyByZXF1ZXN0IHRyYW5zbWlzc2lvbi4KKyovCitzdGF0aWMgdm9pZCBsaW5lNl9hc3luY19yZXF1ZXN0X3NlbnQoc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBtZXNzYWdlICptc2cgPSAoc3RydWN0IG1lc3NhZ2UgKil1cmItPmNvbnRleHQ7CisKKwlpZiAobXNnLT5kb25lID49IG1zZy0+c2l6ZSkgeworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJa2ZyZWUobXNnKTsKKwl9IGVsc2UKKwkJbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luY19wYXJ0KG1zZywgdXJiKTsKK30KKworLyoKKwlBc3luY2hyb25vdXNseSBzZW5kIHBhcnQgb2YgYSByYXcgbWVzc2FnZS4KKyovCitzdGF0aWMgaW50IGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmNfcGFydChzdHJ1Y3QgbWVzc2FnZSAqbXNnLAorCQkJCQkgICAgIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gbXNnLT5saW5lNjsKKwlpbnQgZG9uZSA9IG1zZy0+ZG9uZTsKKwlpbnQgYnl0ZXMgPSBtaW4obXNnLT5zaXplIC0gZG9uZSwgbGluZTYtPm1heF9wYWNrZXRfc2l6ZSk7CisKKwl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgbGluZTYtPnVzYmRldiwKKwkJCSB1c2Jfc25kaW50cGlwZShsaW5lNi0+dXNiZGV2LCBsaW5lNi0+ZXBfY29udHJvbF93cml0ZSksCisJCQkgKGNoYXIgKiltc2ctPmJ1ZmZlciArIGRvbmUsIGJ5dGVzLAorCQkJIGxpbmU2X2FzeW5jX3JlcXVlc3Rfc2VudCwgbXNnLCBsaW5lNi0+aW50ZXJ2YWwpOworCisjaWYgRE9fRFVNUF9VUkJfU0VORAorCWxpbmU2X3dyaXRlX2hleGR1bXAobGluZTYsICdTJywgKGNoYXIgKiltc2ctPmJ1ZmZlciArIGRvbmUsIGJ5dGVzKTsKKyNlbmRpZgorCisJbXNnLT5kb25lICs9IGJ5dGVzOworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkICglZClcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCWtmcmVlKG1zZyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKgorCUFzeW5jaHJvbm91c2x5IHNlbmQgcmF3IG1lc3NhZ2UuCisqLworaW50IGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmMoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCQkgaW50IHNpemUpCit7CisJc3RydWN0IG1lc3NhZ2UgKm1zZzsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwkvKiBjcmVhdGUgbWVzc2FnZTogKi8KKwltc2cgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVzc2FnZSksIEdGUF9BVE9NSUMpOworCisJaWYgKG1zZyA9PSBOVUxMKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBjcmVhdGUgVVJCOiAqLworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisKKwlpZiAodXJiID09IE5VTEwpIHsKKwkJa2ZyZWUobXNnKTsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIHNldCBtZXNzYWdlIGRhdGE6ICovCisJbXNnLT5saW5lNiA9IGxpbmU2OworCW1zZy0+YnVmZmVyID0gYnVmZmVyOworCW1zZy0+c2l6ZSA9IHNpemU7CisJbXNnLT5kb25lID0gMDsKKworCS8qIHN0YXJ0IHNlbmRpbmc6ICovCisJcmV0dXJuIGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmNfcGFydChtc2csIHVyYik7Cit9CisKKy8qCisJU2VuZCBzeXNleCBtZXNzYWdlIGluIHBpZWNlcyBvZiB3TWF4UGFja2V0U2l6ZSBieXRlcy4KKyovCitpbnQgbGluZTZfc2VuZF9zeXNleF9tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBjb25zdCBjaGFyICpidWZmZXIsCisJCQkgICAgIGludCBzaXplKQoreworCXJldHVybiBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlKGxpbmU2LCBidWZmZXIsIHNpemUgKyBTWVNFWF9FWFRSQV9TSVpFKSAtIFNZU0VYX0VYVFJBX1NJWkU7Cit9CisKKy8qCisJQWxsb2NhdGUgYnVmZmVyIGZvciBzeXNleCBtZXNzYWdlIGFuZCBwcmVwYXJlIGhlYWRlci4KKwlAcGFyYW0gY29kZSBzeXNleCBtZXNzYWdlIGNvZGUKKwlAcGFyYW0gc2l6ZSBudW1iZXIgb2YgYnl0ZXMgYmV0d2VlbiBjb2RlIGFuZCBzeXNleCBlbmQKKyovCitjaGFyICpsaW5lNl9hbGxvY19zeXNleF9idWZmZXIoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBjb2RlMSwgaW50IGNvZGUyLAorCQkJICAgICAgIGludCBzaXplKQoreworCWNoYXIgKmJ1ZmZlciA9IGttYWxsb2Moc2l6ZSArIFNZU0VYX0VYVFJBX1NJWkUsIEdGUF9LRVJORUwpOworCisJaWYgKCFidWZmZXIpIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCWJ1ZmZlclswXSA9IExJTkU2X1NZU0VYX0JFR0lOOworCW1lbWNweShidWZmZXIgKyAxLCBsaW5lNl9taWRpX2lkLCBzaXplb2YobGluZTZfbWlkaV9pZCkpOworCWJ1ZmZlcltzaXplb2YobGluZTZfbWlkaV9pZCkgKyAxXSA9IGNvZGUxOworCWJ1ZmZlcltzaXplb2YobGluZTZfbWlkaV9pZCkgKyAyXSA9IGNvZGUyOworCWJ1ZmZlcltzaXplb2YobGluZTZfbWlkaV9pZCkgKyAzICsgc2l6ZV0gPSBMSU5FNl9TWVNFWF9FTkQ7CisJcmV0dXJuIGJ1ZmZlcjsKK30KKworLyoKKwlOb3RpZmljYXRpb24gb2YgZGF0YSByZWNlaXZlZCBmcm9tIHRoZSBMaW5lNiBkZXZpY2UuCisqLworc3RhdGljIHZvaWQgbGluZTZfZGF0YV9yZWNlaXZlZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSAoc3RydWN0IHVzYl9saW5lNiAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgTWlkaUJ1ZmZlciAqbWIgPSAmbGluZTYtPmxpbmU2bWlkaS0+bWlkaWJ1Zl9pbjsKKwlpbnQgZG9uZTsKKworCWlmICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKQorCQlyZXR1cm47CisKKyNpZiBET19EVU1QX1VSQl9SRUNFSVZFCisJbGluZTZfZHVtcF91cmIodXJiKTsKKyNlbmRpZgorCisJZG9uZSA9IG1pZGlidWZfd3JpdGUobWIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCisJaWYgKGRvbmUgPCB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJbWlkaWJ1Zl9pZ25vcmUobWIsIGRvbmUpOworCQlERUJVR19NRVNTQUdFUyhkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICIlZCAlZCBidWZmZXIgb3ZlcmZsb3cgLSBtZXNzYWdlIHNraXBwZWRcbiIsIGRvbmUsIHVyYi0+YWN0dWFsX2xlbmd0aCkpOworCX0KKworCWZvciAoOzspIHsKKwkJZG9uZSA9IG1pZGlidWZfcmVhZChtYiwgbGluZTYtPmJ1ZmZlcl9tZXNzYWdlLCBMSU5FNl9NRVNTQUdFX01BWExFTik7CisKKwkJaWYgKGRvbmUgPT0gMCkKKwkJCWJyZWFrOworCisJCS8qIE1JREkgaW5wdXQgZmlsdGVyICovCisJCWlmIChtaWRpYnVmX3NraXBfbWVzc2FnZShtYiwgbGluZTYtPmxpbmU2bWlkaS0+bWlkaV9tYXNrX3JlY2VpdmUpKQorCQkJY29udGludWU7CisKKwkJbGluZTYtPm1lc3NhZ2VfbGVuZ3RoID0gZG9uZTsKKyNpZiBET19EVU1QX01JRElfUkVDRUlWRQorCQlsaW5lNl93cml0ZV9oZXhkdW1wKGxpbmU2LCAncicsIGxpbmU2LT5idWZmZXJfbWVzc2FnZSwgZG9uZSk7CisjZW5kaWYKKwkJbGluZTZfbWlkaV9yZWNlaXZlKGxpbmU2LCBsaW5lNi0+YnVmZmVyX21lc3NhZ2UsIGRvbmUpOworCisJCXN3aXRjaCAobGluZTYtPnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpIHsKKwkJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFQ6CisJCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUTElWRToKKwkJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRQUk86CisJCWNhc2UgTElORTZfREVWSURfUE9EWFQ6CisJCWNhc2UgTElORTZfREVWSURfUE9EWFRQUk86CisJCWNhc2UgTElORTZfREVWSURfUE9DS0VUUE9EOgorCQkJcG9kX3Byb2Nlc3NfbWVzc2FnZSgoc3RydWN0IHVzYl9saW5lNl9wb2QgKilsaW5lNik7CisJCQlicmVhazsKKworCQljYXNlIExJTkU2X0RFVklEX1BPRFhUTElWRToKKwkJCXN3aXRjaCAobGluZTYtPmludGVyZmFjZV9udW1iZXIpIHsKKwkJCWNhc2UgUE9EWFRMSVZFX0lOVEVSRkFDRV9QT0Q6CisJCQkJcG9kX3Byb2Nlc3NfbWVzc2FnZSgoc3RydWN0IHVzYl9saW5lNl9wb2QgKilsaW5lNik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgUE9EWFRMSVZFX0lOVEVSRkFDRV9WQVJJQVg6CisJCQkJdmFyaWF4X3Byb2Nlc3NfbWVzc2FnZSgoc3RydWN0IHVzYl9saW5lNl92YXJpYXggKilsaW5lNik7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAiUE9EeHQgTGl2ZSBpbnRlcmZhY2UgJWQgbm90IHN1cHBvcnRlZFxuIiwgbGluZTYtPmludGVyZmFjZV9udW1iZXIpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBMSU5FNl9ERVZJRF9WQVJJQVg6CisJCQl2YXJpYXhfcHJvY2Vzc19tZXNzYWdlKChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqKWxpbmU2KTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlNSVNTSU5HX0NBU0U7CisJCX0KKwl9CisKKwlsaW5lNl9zdGFydF9saXN0ZW4obGluZTYpOworfQorCisvKgorCVNlbmQgY2hhbm5lbCBudW1iZXIgKGkuZS4sIHN3aXRjaCB0byBhIGRpZmZlcmVudCBzb3VuZCkuCisqLworaW50IGxpbmU2X3NlbmRfcHJvZ3JhbShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IHZhbHVlKQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCXVuc2lnbmVkIGludCBwYXJ0aWFsOworCisJYnVmZmVyID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKKworCWlmICghYnVmZmVyKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlidWZmZXJbMF0gPSBMSU5FNl9QUk9HUkFNX0NIQU5HRSB8IExJTkU2X0NIQU5ORUxfSE9TVDsKKwlidWZmZXJbMV0gPSB2YWx1ZTsKKworI2lmIERPX0RVTVBfVVJCX1NFTkQKKwlsaW5lNl93cml0ZV9oZXhkdW1wKGxpbmU2LCAnUycsIGJ1ZmZlciwgMik7CisjZW5kaWYKKworCXJldHZhbCA9IHVzYl9pbnRlcnJ1cHRfbXNnKGxpbmU2LT51c2JkZXYsCisJCQkJICAgdXNiX3NuZGludHBpcGUobGluZTYtPnVzYmRldiwKKwkJCQkJCSAgbGluZTYtPmVwX2NvbnRyb2xfd3JpdGUpLAorCQkJCSAgIGJ1ZmZlciwgMiwgJnBhcnRpYWwsIExJTkU2X1RJTUVPVVQgKiBIWik7CisKKwlpZiAocmV0dmFsKQorCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJ1c2JfaW50ZXJydXB0X21zZyBmYWlsZWQgKCVkKVxuIiwgcmV0dmFsKTsKKworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKwlUcmFuc21pdCBMaW5lNiBjb250cm9sIHBhcmFtZXRlci4KKyovCitpbnQgbGluZTZfdHJhbnNtaXRfcGFyYW1ldGVyKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgcGFyYW0sIGludCB2YWx1ZSkKK3sKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBpbnQgcGFydGlhbDsKKworCWJ1ZmZlciA9IGttYWxsb2MoMywgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYnVmZmVyWzBdID0gTElORTZfUEFSQU1fQ0hBTkdFIHwgTElORTZfQ0hBTk5FTF9IT1NUOworCWJ1ZmZlclsxXSA9IHBhcmFtOworCWJ1ZmZlclsyXSA9IHZhbHVlOworCisjaWYgRE9fRFVNUF9VUkJfU0VORAorCWxpbmU2X3dyaXRlX2hleGR1bXAobGluZTYsICdTJywgYnVmZmVyLCAzKTsKKyNlbmRpZgorCisJcmV0dmFsID0gdXNiX2ludGVycnVwdF9tc2cobGluZTYtPnVzYmRldiwKKwkJCQkJCQkJCQkJCQkJIHVzYl9zbmRpbnRwaXBlKGxpbmU2LT51c2JkZXYsIGxpbmU2LT5lcF9jb250cm9sX3dyaXRlKSwKKwkJCQkJCQkJCQkJCQkJIGJ1ZmZlciwgMywgJnBhcnRpYWwsIExJTkU2X1RJTUVPVVQgKiBIWik7CisKKwlpZiAocmV0dmFsKQorCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJ1c2JfaW50ZXJydXB0X21zZyBmYWlsZWQgKCVkKVxuIiwgcmV0dmFsKTsKKworCWtmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKwlSZWFkIGRhdGEgZnJvbSBkZXZpY2UuCisqLworaW50IGxpbmU2X3JlYWRfZGF0YShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IGFkZHJlc3MsIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhbGVuKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBsaW5lNi0+dXNiZGV2OworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBsZW47CisKKwkvKiBxdWVyeSB0aGUgc2VyaWFsIG51bWJlcjogKi8KKwlyZXQgPSB1c2JfY29udHJvbF9tc2codXNiZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiZGV2LCAwKSwgMHg2NywKKwkJCQkJCQkJCQkJCVVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCwKKwkJCQkJCQkJCQkJCShkYXRhbGVuIDw8IDgpIHwgMHgyMSwgYWRkcmVzcywgTlVMTCwgMCwgTElORTZfVElNRU9VVCAqIEhaKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgInJlYWQgcmVxdWVzdCBmYWlsZWQgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBXYWl0IGZvciBkYXRhIGxlbmd0aC4gV2UnbGwgZ2V0IGEgY291cGxlIG9mIDB4ZmYgdW50aWwgbGVuZ3RoIGFycml2ZXMuICovCisJZG8geworCQlyZXQgPSB1c2JfY29udHJvbF9tc2codXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNiZGV2LCAwKSwgMHg2NywKKwkJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwKKwkJCQkgICAgICBVU0JfRElSX0lOLAorCQkJCSAgICAgIDB4MDAxMiwgMHgwMDAwLCAmbGVuLCAxLAorCQkJCSAgICAgIExJTkU2X1RJTUVPVVQgKiBIWik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsCisJCQkJInJlY2VpdmUgbGVuZ3RoIGZhaWxlZCAoZXJyb3IgJWQpXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwl3aGlsZSAobGVuID09IDB4ZmYpCisJCTsKKworCWlmIChsZW4gIT0gZGF0YWxlbikgeworCQkvKiBzaG91bGQgYmUgZXF1YWwgb3Igc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LAorCQkJImxlbmd0aCBtaXNtYXRjaCAoZXhwZWN0ZWQgJWQsIGdvdCAlZClcbiIsCisJCQkoaW50KWRhdGFsZW4sIChpbnQpbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogcmVjZWl2ZSB0aGUgcmVzdWx0OiAqLworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2JkZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2JkZXYsIDApLCAweDY3LAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCQkgICAgICAweDAwMTMsIDB4MDAwMCwgZGF0YSwgZGF0YWxlbiwKKwkJCSAgICAgIExJTkU2X1RJTUVPVVQgKiBIWik7CisKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJyZWFkIGZhaWxlZCAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKgorCVdyaXRlIGRhdGEgdG8gZGV2aWNlLgorKi8KK2ludCBsaW5lNl93cml0ZV9kYXRhKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgYWRkcmVzcywgdm9pZCAqZGF0YSwKKwkJICAgICBzaXplX3QgZGF0YWxlbikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gbGluZTYtPnVzYmRldjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYmRldiwgMCksIDB4NjcsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9PVVQsCisJCQkgICAgICAweDAwMjIsIGFkZHJlc3MsIGRhdGEsIGRhdGFsZW4sCisJCQkgICAgICBMSU5FNl9USU1FT1VUICogSFopOworCisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LAorCQkJIndyaXRlIHJlcXVlc3QgZmFpbGVkIChlcnJvciAlZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZG8geworCQlyZXQgPSB1c2JfY29udHJvbF9tc2codXNiZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNiZGV2LCAwKSwKKwkJCQkgICAgICAweDY3LAorCQkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfAorCQkJCSAgICAgIFVTQl9ESVJfSU4sCisJCQkJICAgICAgMHgwMDEyLCAweDAwMDAsCisJCQkJICAgICAgJnN0YXR1cywgMSwgTElORTZfVElNRU9VVCAqIEhaKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihsaW5lNi0+aWZjZGV2LAorCQkJCSJyZWNlaXZpbmcgc3RhdHVzIGZhaWxlZCAoZXJyb3IgJWQpXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwl3aGlsZSAoc3RhdHVzID09IDB4ZmYpCisJCTsKKworCWlmIChzdGF0dXMgIT0gMCkgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJ3cml0ZSBmYWlsZWQgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisJUmVhZCBMaW5lNiBkZXZpY2Ugc2VyaWFsIG51bWJlci4KKwkoUE9ELCBUb25lUG9ydCwgR3VpdGFyUG9ydCkKKyovCitpbnQgbGluZTZfcmVhZF9zZXJpYWxfbnVtYmVyKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgKnNlcmlhbF9udW1iZXIpCit7CisJcmV0dXJuIGxpbmU2X3JlYWRfZGF0YShsaW5lNiwgMHg4MGQwLCBzZXJpYWxfbnVtYmVyLCBzaXplb2YoKnNlcmlhbF9udW1iZXIpKTsKK30KKworLyoKKwlObyBvcGVyYXRpb24gKGkuZS4sIHVuc3VwcG9ydGVkKS4KKyovCitzc2l6ZV90IGxpbmU2X25vcF9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgICBjaGFyICpidWYpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisJTm8gb3BlcmF0aW9uIChpLmUuLCB1bnN1cHBvcnRlZCkuCisqLworc3NpemVfdCBsaW5lNl9ub3Bfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBjb3VudDsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gInJhdyIgc3BlY2lhbCBmaWxlLgorKi8KKyNpZiBDUkVBVEVfUkFXX0ZJTEUKK3NzaXplX3QgbGluZTZfc2V0X3JhdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWxpbmU2X3NlbmRfcmF3X21lc3NhZ2UobGluZTYsIGJ1ZiwgY291bnQpOworCXJldHVybiBjb3VudDsKK30KKyNlbmRpZgorCisvKgorCUdlbmVyaWMgZGVzdHJ1Y3Rvci4KKyovCitzdGF0aWMgdm9pZCBsaW5lNl9kZXN0cnVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2OworCisJaWYgKGludGVyZmFjZSA9PSBOVUxMKQorCQlyZXR1cm47CisJbGluZTYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaWYgKGxpbmU2ID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIGZyZWUgYnVmZmVyIG1lbW9yeSBmaXJzdDogKi8KKwlrZnJlZShsaW5lNi0+YnVmZmVyX21lc3NhZ2UpOworCWtmcmVlKGxpbmU2LT5idWZmZXJfbGlzdGVuKTsKKworCS8qIHRoZW4gZnJlZSBVUkJzOiAqLworCXVzYl9mcmVlX3VyYihsaW5lNi0+dXJiX2xpc3Rlbik7CisKKwkvKiBtYWtlIHN1cmUgdGhlIGRldmljZSBpc24ndCBkZXN0cnVjdGVkIHR3aWNlOiAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKworCS8qIGZyZWUgaW50ZXJmYWNlIGRhdGE6ICovCisJa2ZyZWUobGluZTYpOworfQorCitzdGF0aWMgdm9pZCBsaW5lNl9saXN0X2RldmljZXModm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9NQVhfREVWSUNFUzsgKytpKSB7CisJCXN0cnVjdCB1c2JfbGluZTYgKmRldiA9IGxpbmU2X2RldmljZXNbaV07CisJCXByaW50ayhLRVJOX0lORk8gIkxpbmU2IGRldmljZSAlZDogIiwgaSk7CisKKwkJaWYgKGRldiA9PSBOVUxMKQorCQkJcHJpbnRrKCIobm90IHVzZWQpXG4iKTsKKwkJZWxzZQorCQkJcHJpbnRrKCIlczolZFxuIiwgZGV2LT5wcm9wZXJ0aWVzLT5uYW1lLCBkZXYtPmludGVyZmFjZV9udW1iZXIpOworCX0KK30KKworLyoKKwlQcm9iZSBVU0IgZGV2aWNlLgorKi8KK3N0YXRpYyBpbnQgbGluZTZfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCBkZXZ0eXBlOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBOVUxMOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgbGluZTZfcHJvcGVydGllcyAqcHJvcGVydGllczsKKwlpbnQgZGV2bnVtOworCWludCBpbnRlcmZhY2VfbnVtYmVyLCBhbHRlcm5hdGUgPSAwOworCWludCBwcm9kdWN0OworCWludCBzaXplID0gMDsKKwlpbnQgZXBfcmVhZCA9IDAsIGVwX3dyaXRlID0gMDsKKwlpbnQgcmV0OworCisJaWYgKGludGVyZmFjZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwl1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJaWYgKHVzYmRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGluY3JlbWVudCByZWZlcmVuY2UgY291bnRlcnM6ICovCisJdXNiX2dldF9pbnRmKGludGVyZmFjZSk7CisJdXNiX2dldF9kZXYodXNiZGV2KTsKKworCS8qIHdlIGRvbid0IGhhbmRsZSBtdWx0aXBsZSBjb25maWd1cmF0aW9ucyAqLworCWlmICh1c2JkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCisJLyogY2hlY2sgdmVuZG9yIGFuZCBwcm9kdWN0IGlkICovCisJZm9yIChkZXZ0eXBlID0gc2l6ZW9mKGxpbmU2X2lkX3RhYmxlKSAvIHNpemVvZihsaW5lNl9pZF90YWJsZVswXSkgLSAxOyBkZXZ0eXBlLS07KQorCQlpZiAoKGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gbGluZTZfaWRfdGFibGVbZGV2dHlwZV0uaWRWZW5kb3IpICYmCisJCQkgKGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IGxpbmU2X2lkX3RhYmxlW2RldnR5cGVdLmlkUHJvZHVjdCkpCisJCQlicmVhazsKKworCWlmIChkZXZ0eXBlIDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBmaW5kIGZyZWUgc2xvdCBpbiBkZXZpY2UgdGFibGU6ICovCisJZm9yIChkZXZudW0gPSAwOyBkZXZudW0gPCBMSU5FNl9NQVhfREVWSUNFUzsgKytkZXZudW0pCisJCWlmIChsaW5lNl9kZXZpY2VzW2Rldm51bV0gPT0gTlVMTCkKKwkJCWJyZWFrOworCisJaWYgKGRldm51bSA9PSBMSU5FNl9NQVhfREVWSUNFUykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBpbml0aWFsaXplIGRldmljZSBpbmZvOiAqLworCXByb3BlcnRpZXMgPSAmbGluZTZfcHJvcGVydGllc190YWJsZVtkZXZ0eXBlXTsKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJMaW5lNiAlcyBmb3VuZFxuIiwgcHJvcGVydGllcy0+bmFtZSk7CisJcHJvZHVjdCA9IGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOworCisJLyogcXVlcnkgaW50ZXJmYWNlIG51bWJlciAqLworCWludGVyZmFjZV9udW1iZXIgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CisKKwlzd2l0Y2ggKHByb2R1Y3QpIHsKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkU6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0NLRVRQT0Q6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVExJVkU6CisJY2FzZSBMSU5FNl9ERVZJRF9WQVJJQVg6CisJCWFsdGVybmF0ZSA9IDE7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYMzoKKwljYXNlIExJTkU2X0RFVklEX1BPRFgzTElWRToKKwkJc3dpdGNoIChpbnRlcmZhY2VfbnVtYmVyKSB7CisJCWNhc2UgMDoKKwkJCWFsdGVybmF0ZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYWx0ZXJuYXRlID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJTUlTU0lOR19DQVNFOworCQl9CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFQ6CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRQUk86CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVDoKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUUFJPOgorCQlhbHRlcm5hdGUgPSA1OworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfR1g6CisJY2FzZSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUOgorCQlhbHRlcm5hdGUgPSAyOyAgLyogMS4uNCBzZWVtIHRvIGJlIG9rICovCisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDE6CisJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDI6CisJCXN3aXRjaCAoaW50ZXJmYWNlX251bWJlcikgeworCQljYXNlIDA6CisJCQkvKiBkZWZhdWx0cyB0byA0NC4xa0h6LCAxNi1iaXQgKi8KKwkJCWFsdGVybmF0ZSA9IDI7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYWx0ZXJuYXRlID0gMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJTUlTU0lOR19DQVNFOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZSh1c2JkZXYsIGludGVyZmFjZV9udW1iZXIsIGFsdGVybmF0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJzZXRfaW50ZXJmYWNlIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogaW5pdGlhbGl6ZSBkZXZpY2UgZGF0YSBiYXNlZCBvbiBwcm9kdWN0IGlkOiAqLworCXN3aXRjaCAocHJvZHVjdCkgeworCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUOgorCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUTElWRToKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTzoKKwljYXNlIExJTkU2X0RFVklEX1BPQ0tFVFBPRDoKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUOgorCWNhc2UgTElORTZfREVWSURfUE9EWFRQUk86CisJCXNpemUgPSBzaXplb2Yoc3RydWN0IHVzYl9saW5lNl9wb2QpOworCQllcF9yZWFkICA9IDB4ODQ7CisJCWVwX3dyaXRlID0gMHgwMzsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1BPRFgzOgorCWNhc2UgTElORTZfREVWSURfUE9EWDNMSVZFOgorCQkvKiBjdXJyZW50bHkgdW51c2VkISAqLworCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfcG9kKTsKKwkJZXBfcmVhZCAgPSAweDgxOworCQllcF93cml0ZSA9IDB4MDE7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9HWDoKKwljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMToKKwljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMjoKKwljYXNlIExJTkU2X0RFVklEX0dVSVRBUlBPUlQ6CisJCXNpemUgPSBzaXplb2Yoc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCk7CisJCS8qIHRoZXNlIGRvbid0IGhhdmUgYSBjb250cm9sIGNoYW5uZWwgKi8KKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUTElWRToKKwkJc3dpdGNoIChpbnRlcmZhY2VfbnVtYmVyKSB7CisJCWNhc2UgUE9EWFRMSVZFX0lOVEVSRkFDRV9QT0Q6CisJCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfcG9kKTsKKwkJCWVwX3JlYWQgID0gMHg4NDsKKwkJCWVwX3dyaXRlID0gMHgwMzsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9EWFRMSVZFX0lOVEVSRkFDRV9WQVJJQVg6CisJCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4KTsKKwkJCWVwX3JlYWQgID0gMHg4NjsKKwkJCWVwX3dyaXRlID0gMHgwNTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfVkFSSUFYOgorCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4KTsKKwkJZXBfcmVhZCAgPSAweDgyOworCQllcF93cml0ZSA9IDB4MDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJTUlTU0lOR19DQVNFOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoc2l6ZSA9PSAwKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgImRyaXZlciBidWc6IGludGVyZmFjZSBkYXRhIHNpemUgbm90IHNldFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWxpbmU2ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKworCWlmIChsaW5lNiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIHN0b3JlIGJhc2ljIGRhdGE6ICovCisJbGluZTYtPmludGVyZmFjZV9udW1iZXIgPSBpbnRlcmZhY2VfbnVtYmVyOworCWxpbmU2LT5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKKwlsaW5lNi0+dXNiZGV2ID0gdXNiZGV2OworCWxpbmU2LT5pZmNkZXYgPSAmaW50ZXJmYWNlLT5kZXY7CisJbGluZTYtPmVwX2NvbnRyb2xfcmVhZCA9IGVwX3JlYWQ7CisJbGluZTYtPmVwX2NvbnRyb2xfd3JpdGUgPSBlcF93cml0ZTsKKwlsaW5lNi0+cHJvZHVjdCA9IHByb2R1Y3Q7CisKKwkvKiBnZXQgZGF0YSBmcm9tIGVuZHBvaW50IGRlc2NyaXB0b3IgKHNlZSB1c2JfbWF4cGFja2V0KTogKi8KKwl7CisJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJCXVuc2lnbmVkIGVwbnVtID0gdXNiX3BpcGVlbmRwb2ludCh1c2JfcmN2aW50cGlwZSh1c2JkZXYsIGVwX3JlYWQpKTsKKwkJZXAgPSB1c2JkZXYtPmVwX2luW2VwbnVtXTsKKworCQlpZiAoZXAgIT0gTlVMTCkgeworCQkJbGluZTYtPmludGVydmFsID0gZXAtPmRlc2MuYkludGVydmFsOworCQkJbGluZTYtPm1heF9wYWNrZXRfc2l6ZSA9IGxlMTZfdG9fY3B1KGVwLT5kZXNjLndNYXhQYWNrZXRTaXplKTsKKwkJfSBlbHNlIHsKKwkJCWxpbmU2LT5pbnRlcnZhbCA9IExJTkU2X0ZBTExCQUNLX0lOVEVSVkFMOworCQkJbGluZTYtPm1heF9wYWNrZXRfc2l6ZSA9IExJTkU2X0ZBTExCQUNLX01BWFBBQ0tFVFNJWkU7CisJCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJlbmRwb2ludCBub3QgYXZhaWxhYmxlLCB1c2luZyBmYWxsYmFjayB2YWx1ZXMiKTsKKwkJfQorCX0KKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBsaW5lNik7CisKKwlpZiAocHJvcGVydGllcy0+Y2FwYWJpbGl0aWVzICYgTElORTZfQklUX0NPTlRST0wpIHsKKwkJLyogaW5pdGlhbGl6ZSBVU0IgYnVmZmVyczogKi8KKwkJbGluZTYtPmJ1ZmZlcl9saXN0ZW4gPSBrbWFsbG9jKExJTkU2X0JVRlNJWkVfTElTVEVOLCBHRlBfS0VSTkVMKTsKKworCQlpZiAobGluZTYtPmJ1ZmZlcl9saXN0ZW4gPT0gTlVMTCkgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJCWxpbmU2X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWxpbmU2LT5idWZmZXJfbWVzc2FnZSA9IGttYWxsb2MoTElORTZfTUVTU0FHRV9NQVhMRU4sIEdGUF9LRVJORUwpOworCisJCWlmIChsaW5lNi0+YnVmZmVyX21lc3NhZ2UgPT0gTlVMTCkgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJCWxpbmU2X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCWxpbmU2LT51cmJfbGlzdGVuID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKworCQlpZiAobGluZTYtPnVyYl9saXN0ZW4gPT0gTlVMTCkgeworCQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJCWxpbmU2X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXJldCA9IGxpbmU2X3N0YXJ0X2xpc3RlbihsaW5lNik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWRcbiIsCisJCQkJX19mdW5jX18pOworCQkJbGluZTZfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwkvKiBpbml0aWFsaXplIGRldmljZSBkYXRhIGJhc2VkIG9uIHByb2R1Y3QgaWQ6ICovCisJc3dpdGNoIChwcm9kdWN0KSB7CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFQ6CisJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFOgorCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUUFJPOgorCWNhc2UgTElORTZfREVWSURfUE9DS0VUUE9EOgorCWNhc2UgTElORTZfREVWSURfUE9EWDM6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYM0xJVkU6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVDoKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUUFJPOgorCQlyZXQgPSBwb2RfaW5pdChpbnRlcmZhY2UsIChzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqKWxpbmU2KTsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUTElWRToKKwkJc3dpdGNoIChpbnRlcmZhY2VfbnVtYmVyKSB7CisJCWNhc2UgUE9EWFRMSVZFX0lOVEVSRkFDRV9QT0Q6CisJCQlyZXQgPSBwb2RfaW5pdChpbnRlcmZhY2UsIChzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqKWxpbmU2KTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE9EWFRMSVZFX0lOVEVSRkFDRV9WQVJJQVg6CisJCQlyZXQgPSB2YXJpYXhfaW5pdChpbnRlcmZhY2UsIChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqKWxpbmU2KTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwKKwkJCQkiUE9EeHQgTGl2ZSBpbnRlcmZhY2UgJWQgbm90IHN1cHBvcnRlZFxuIiwKKwkJCQlpbnRlcmZhY2VfbnVtYmVyKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfVkFSSUFYOgorCQlyZXQgPSB2YXJpYXhfaW5pdChpbnRlcmZhY2UsIChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqKWxpbmU2KTsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX0dYOgorCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfVVgxOgorCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfVVgyOgorCWNhc2UgTElORTZfREVWSURfR1VJVEFSUE9SVDoKKwkJcmV0ID0gdG9uZXBvcnRfaW5pdChpbnRlcmZhY2UsIChzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICopbGluZTYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCU1JU1NJTkdfQ0FTRTsKKwkJcmV0ID0gLUVOT0RFVjsKKwl9CisKKwlpZiAocmV0IDwgMCkgeworCQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9saW5rKCZpbnRlcmZhY2UtPmRldi5rb2JqLCAmdXNiZGV2LT5kZXYua29iaiwKKwkJCQkidXNiX2RldmljZSIpOworCWlmIChyZXQgPCAwKSB7CisJCWxpbmU2X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiTGluZTYgJXMgbm93IGF0dGFjaGVkXG4iLAorCQkgbGluZTYtPnByb3BlcnRpZXMtPm5hbWUpOworCWxpbmU2X2RldmljZXNbZGV2bnVtXSA9IGxpbmU2OworCWxpbmU2X2xpc3RfZGV2aWNlcygpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisJTGluZTYgZGV2aWNlIGRpc2Nvbm5lY3RlZC4KKyovCitzdGF0aWMgdm9pZCBsaW5lNl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwlpbnQgaW50ZXJmYWNlX251bWJlciwgaTsKKworCWlmIChpbnRlcmZhY2UgPT0gTlVMTCkKKwkJcmV0dXJuOworCXVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlpZiAodXNiZGV2ID09IE5VTEwpCisJCXJldHVybjsKKworCXN5c2ZzX3JlbW92ZV9saW5rKCZpbnRlcmZhY2UtPmRldi5rb2JqLCAidXNiX2RldmljZSIpOworCisJaW50ZXJmYWNlX251bWJlciA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwlsaW5lNiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCWlmIChsaW5lNiAhPSBOVUxMKSB7CisJCWlmIChsaW5lNi0+dXJiX2xpc3RlbiAhPSBOVUxMKQorCQkJdXNiX2tpbGxfdXJiKGxpbmU2LT51cmJfbGlzdGVuKTsKKworCQlpZiAodXNiZGV2ICE9IGxpbmU2LT51c2JkZXYpCisJCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsCisJCQkJImRyaXZlciBidWc6IGluY29uc2lzdGVudCB1c2IgZGV2aWNlXG4iKTsKKworCQlzd2l0Y2ggKGxpbmU2LT51c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSB7CisJCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUOgorCQljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkU6CisJCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUUFJPOgorCQljYXNlIExJTkU2X0RFVklEX1BPQ0tFVFBPRDoKKwkJY2FzZSBMSU5FNl9ERVZJRF9QT0RYMzoKKwkJY2FzZSBMSU5FNl9ERVZJRF9QT0RYM0xJVkU6CisJCWNhc2UgTElORTZfREVWSURfUE9EWFQ6CisJCWNhc2UgTElORTZfREVWSURfUE9EWFRQUk86CisJCQlwb2RfZGlzY29ubmVjdChpbnRlcmZhY2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVExJVkU6CisJCQlzd2l0Y2ggKGludGVyZmFjZV9udW1iZXIpIHsKKwkJCWNhc2UgUE9EWFRMSVZFX0lOVEVSRkFDRV9QT0Q6CisJCQkJcG9kX2Rpc2Nvbm5lY3QoaW50ZXJmYWNlKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBQT0RYVExJVkVfSU5URVJGQUNFX1ZBUklBWDoKKwkJCQl2YXJpYXhfZGlzY29ubmVjdChpbnRlcmZhY2UpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIExJTkU2X0RFVklEX1ZBUklBWDoKKwkJCXZhcmlheF9kaXNjb25uZWN0KGludGVyZmFjZSk7CisJCQlicmVhazsKKworCQljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX0dYOgorCQljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMToKKwkJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDI6CisJCWNhc2UgTElORTZfREVWSURfR1VJVEFSUE9SVDoKKwkJCXRvbmVwb3J0X2Rpc2Nvbm5lY3QoaW50ZXJmYWNlKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlNSVNTSU5HX0NBU0U7CisJCX0KKworCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJMaW5lNiAlcyBub3cgZGlzY29ubmVjdGVkXG4iLCBsaW5lNi0+cHJvcGVydGllcy0+bmFtZSk7CisKKwkJZm9yIChpID0gTElORTZfTUFYX0RFVklDRVM7IGktLTspCisJCQlpZiAobGluZTZfZGV2aWNlc1tpXSA9PSBsaW5lNikKKwkJCQlsaW5lNl9kZXZpY2VzW2ldID0gTlVMTDsKKwl9CisKKwlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOworCisJLyogZGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudGVyczogKi8KKwl1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTsKKwl1c2JfcHV0X2Rldih1c2JkZXYpOworCisJbGluZTZfbGlzdF9kZXZpY2VzKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBsaW5lNl9kcml2ZXIgPSB7CisJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwkucHJvYmUgPSBsaW5lNl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGxpbmU2X2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gbGluZTZfaWRfdGFibGUsCit9OworCisvKgorCU1vZHVsZSBpbml0aWFsaXphdGlvbi4KKyovCitzdGF0aWMgaW50IF9faW5pdCBsaW5lNl9pbml0KHZvaWQpCit7CisJaW50IGksIHJldHZhbDsKKworCXByaW50ayhLRVJOX0lORk8gIiVzIGRyaXZlciB2ZXJzaW9uICVzJXNcbiIsCisJICAgICAgIERSSVZFUl9OQU1FLCBEUklWRVJfVkVSU0lPTiwgRFJJVkVSX1JFVklTSU9OKTsKKwlsaW5lNl93b3JrcXVldWUgPSBjcmVhdGVfd29ya3F1ZXVlKERSSVZFUl9OQU1FKTsKKworCWlmIChsaW5lNl93b3JrcXVldWUgPT0gTlVMTCkgeworCQllcnIoImNvdWxkbid0IGNyZWF0ZSB3b3JrcXVldWUiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gTElORTZfTUFYX0RFVklDRVM7IGktLTspCisJCWxpbmU2X2RldmljZXNbaV0gPSBOVUxMOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZsaW5lNl9kcml2ZXIpOworCisJaWYgKHJldHZhbCkKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKwlNb2R1bGUgY2xlYW51cC4KKyovCitzdGF0aWMgdm9pZCBfX2V4aXQgbGluZTZfZXhpdCh2b2lkKQoreworCWRlc3Ryb3lfd29ya3F1ZXVlKGxpbmU2X3dvcmtxdWV1ZSk7CisJdXNiX2RlcmVnaXN0ZXIoJmxpbmU2X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGxpbmU2X2luaXQpOworbW9kdWxlX2V4aXQobGluZTZfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MDhiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIERSSVZFUl9ICisjZGVmaW5lIERSSVZFUl9ICisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorCisjaW5jbHVkZSAibWlkaS5oIgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJsaW5lNnVzYiIKKworI2RlZmluZSBMSU5FNl9USU1FT1VUIDEKKyNkZWZpbmUgTElORTZfTUFYX0RFVklDRVMgOAorI2RlZmluZSBMSU5FNl9CVUZTSVpFX0xJU1RFTiAzMgorI2RlZmluZSBMSU5FNl9NRVNTQUdFX01BWExFTiAyNTYKKworCisvKgorCUxpbmU2IE1JREkgY29udHJvbCBjb21tYW5kcworKi8KKyNkZWZpbmUgTElORTZfUEFSQU1fQ0hBTkdFICAgMHhiMAorI2RlZmluZSBMSU5FNl9QUk9HUkFNX0NIQU5HRSAweGMwCisjZGVmaW5lIExJTkU2X1NZU0VYX0JFR0lOICAgIDB4ZjAKKyNkZWZpbmUgTElORTZfU1lTRVhfRU5EICAgICAgMHhmNworI2RlZmluZSBMSU5FNl9SRVNFVCAgICAgICAgICAweGZmCisKKy8qCisJTUlESSBjaGFubmVsIGZvciBtZXNzYWdlcyBpbml0aWF0ZWQgYnkgdGhlIGhvc3QKKwkoYW5kIGV2ZW50dWFsbHkgZWNob2VkIGJhY2sgYnkgdGhlIGRldmljZSkKKyovCisjZGVmaW5lIExJTkU2X0NIQU5ORUxfSE9TVCAgIDB4MDAKKworLyoKKwlNSURJIGNoYW5uZWwgZm9yIG1lc3NhZ2VzIGluaXRpYXRlZCBieSB0aGUgZGV2aWNlCisqLworI2RlZmluZSBMSU5FNl9DSEFOTkVMX0RFVklDRSAweDAyCisKKyNkZWZpbmUgTElORTZfQ0hBTk5FTF9VTktOT1dOIDUgIC8qIGRvbid0IGtub3cgeWV0IHdoYXQgdGhpcyBpcyBnb29kIGZvciAqLworCisjZGVmaW5lIExJTkU2X0NIQU5ORUxfTUFTSyAweDBmCisKKworI2RlZmluZSBNSVNTSU5HX0NBU0UJXAorCXByaW50ayhLRVJOX0VSUiAibGluZTZ1c2IgZHJpdmVyIGJ1ZzogbWlzc2luZyBjYXNlIGluICVzOiVkXG4iLCBcCisJCV9fRklMRV9fLCBfX0xJTkVfXykKKworCisjZGVmaW5lIENIRUNLX1JFVFVSTih4KQkJXAorZG8gewkJCQlcCisJZXJyID0geDsJCVwKKwlpZiAoZXJyIDwgMCkJCVwKKwkJcmV0dXJuIGVycjsJXAorfSB3aGlsZSAoMCkKKworCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBsaW5lNl9taWRpX2lkWzNdOworZXh0ZXJuIHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2X2RldmljZXNbTElORTZfTUFYX0RFVklDRVNdOworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsaW5lNl93b3JrcXVldWU7CisKK3N0YXRpYyBjb25zdCBpbnQgU1lTRVhfREFUQV9PRlMgPSBzaXplb2YobGluZTZfbWlkaV9pZCkgKyAzOworc3RhdGljIGNvbnN0IGludCBTWVNFWF9FWFRSQV9TSVpFID0gc2l6ZW9mKGxpbmU2X21pZGlfaWQpICsgNDsKKworCisvKioKKwkgQ29tbW9uIHByb3BlcnRpZXMgb2YgTGluZTYgZGV2aWNlcy4KKyovCitzdHJ1Y3QgbGluZTZfcHJvcGVydGllcyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZGV2aWNlX2JpdDsKKwlpbnQgY2FwYWJpbGl0aWVzOworfTsKKworLyoqCisJIENvbW1vbiBkYXRhIHNoYXJlZCBieSBhbGwgTGluZTYgZGV2aWNlcy4KKwkgQ29ycmVzcG9uZHMgdG8gYSBwYWlyIG9mIFVTQiBlbmRwb2ludHMuCisqLworc3RydWN0IHVzYl9saW5lNiB7CisJLyoqCisJCSBVU0IgZGV2aWNlLgorCSovCisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKworCS8qKgorCQkgUHJvZHVjdCBpZC4KKwkqLworCWludCBwcm9kdWN0OworCisJLyoqCisJCSBQcm9wZXJ0aWVzLgorCSovCisJY29uc3Qgc3RydWN0IGxpbmU2X3Byb3BlcnRpZXMgKnByb3BlcnRpZXM7CisKKwkvKioKKwkJIEludGVyZmFjZSBudW1iZXIuCisJKi8KKwlpbnQgaW50ZXJmYWNlX251bWJlcjsKKworCS8qKgorCQkgSW50ZXJ2YWwgKG1zKS4KKwkqLworCWludCBpbnRlcnZhbDsKKworCS8qKgorCQkgTWF4aW11bSBzaXplIG9mIFVTQiBwYWNrZXQuCisJKi8KKwlpbnQgbWF4X3BhY2tldF9zaXplOworCisJLyoqCisJCSBEZXZpY2UgcmVwcmVzZW50aW5nIHRoZSBVU0IgaW50ZXJmYWNlLgorCSovCisJc3RydWN0IGRldmljZSAqaWZjZGV2OworCisJLyoqCisJCSBMaW5lNiBzb3VuZCBjYXJkIGRhdGEgc3RydWN0dXJlLgorCQkgRWFjaCBkZXZpY2UgaGFzIGF0IGxlYXN0IE1JREkgb3IgUENNLgorCSovCisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCisJLyoqCisJCSBMaW5lNiBQQ00gZGV2aWNlIGRhdGEgc3RydWN0dXJlLgorCSovCisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtOworCisJLyoqCisJCSBMaW5lNiBNSURJIGRldmljZSBkYXRhIHN0cnVjdHVyZS4KKwkqLworCXN0cnVjdCBzbmRfbGluZTZfbWlkaSAqbGluZTZtaWRpOworCisJLyoqCisJCSBVU0IgZW5kcG9pbnQgZm9yIGxpc3RlbmluZyB0byBjb250cm9sIGNvbW1hbmRzLgorCSovCisJaW50IGVwX2NvbnRyb2xfcmVhZDsKKworCS8qKgorCQkgVVNCIGVuZHBvaW50IGZvciB3cml0aW5nIGNvbnRyb2wgY29tbWFuZHMuCisJKi8KKwlpbnQgZXBfY29udHJvbF93cml0ZTsKKworCS8qKgorCQkgVVJCIGZvciBsaXN0ZW5pbmcgdG8gUE9EeHQgUHJvIGNvbnRyb2wgZW5kcG9pbnQuCisJKi8KKwlzdHJ1Y3QgdXJiICp1cmJfbGlzdGVuOworCisJLyoqCisJCSBCdWZmZXIgZm9yIGxpc3RlbmluZyB0byBQT0R4dCBQcm8gY29udHJvbCBlbmRwb2ludC4KKwkqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9saXN0ZW47CisKKwkvKioKKwkJIEJ1ZmZlciBmb3IgbWVzc2FnZSB0byBiZSBwcm9jZXNzZWQuCisJKi8KKwl1bnNpZ25lZCBjaGFyICpidWZmZXJfbWVzc2FnZTsKKworCS8qKgorCQkgTGVuZ3RoIG9mIG1lc3NhZ2UgdG8gYmUgcHJvY2Vzc2VkLgorCSovCisJaW50IG1lc3NhZ2VfbGVuZ3RoOworfTsKKworCitleHRlcm4gY2hhciAqbGluZTZfYWxsb2Nfc3lzZXhfYnVmZmVyKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgY29kZTEsCisJCQkJICAgICAgaW50IGNvZGUyLCBpbnQgc2l6ZSk7CitleHRlcm4gc3NpemVfdCBsaW5lNl9ub3BfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK2V4dGVybiBzc2l6ZV90IGxpbmU2X25vcF93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOworZXh0ZXJuIGludCBsaW5lNl9yZWFkX2RhdGEoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBhZGRyZXNzLCB2b2lkICpkYXRhLAorCQkJICAgc2l6ZV90IGRhdGFsZW4pOworZXh0ZXJuIGludCBsaW5lNl9yZWFkX3NlcmlhbF9udW1iZXIoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsCisJCQkJICAgIGludCAqc2VyaWFsX251bWJlcik7CitleHRlcm4gaW50IGxpbmU2X3NlbmRfcHJvZ3JhbShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IHZhbHVlKTsKK2V4dGVybiBpbnQgbGluZTZfc2VuZF9yYXdfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgY29uc3QgY2hhciAqYnVmZmVyLAorCQkJCSAgaW50IHNpemUpOworZXh0ZXJuIGludCBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LAorCQkJCQljb25zdCBjaGFyICpidWZmZXIsIGludCBzaXplKTsKK2V4dGVybiBpbnQgbGluZTZfc2VuZF9zeXNleF9tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LAorCQkJCSAgICBjb25zdCBjaGFyICpidWZmZXIsIGludCBzaXplKTsKK2V4dGVybiBzc2l6ZV90IGxpbmU2X3NldF9yYXcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOworZXh0ZXJuIGludCBsaW5lNl90cmFuc21pdF9wYXJhbWV0ZXIoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBwYXJhbSwKKwkJCQkgICAgaW50IHZhbHVlKTsKK2V4dGVybiBpbnQgbGluZTZfd3JpdGVfZGF0YShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IGFkZHJlc3MsIHZvaWQgKmRhdGEsCisJCQkgICAgc2l6ZV90IGRhdGFsZW4pOworZXh0ZXJuIHZvaWQgbGluZTZfd3JpdGVfaGV4ZHVtcChzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgY2hhciBkaXIsCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgc2l6ZSk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHVtcHJlcXVlc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kdW1wcmVxdWVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlY2JhYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHVtcHJlcXVlc3QuYwpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKyNpbmNsdWRlICJkdW1wcmVxdWVzdC5oIgorCisKKy8qCisJU2V0ICJkdW1wIGluIHByb2dyZXNzIiBmbGFnLgorKi8KK3ZvaWQgbGluZTZfZHVtcF9zdGFydGVkKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsIGludCBkZXN0KQoreworCWw2ZHItPmluX3Byb2dyZXNzID0gZGVzdDsKK30KKworLyoKKwlJbnZhbGlkYXRlIGN1cnJlbnQgY2hhbm5lbCwgaS5lLiwgc2V0ICJkdW1wIGluIHByb2dyZXNzIiBmbGFnLgorCVJlYWRpbmcgZnJvbSB0aGUgImR1bXAiIHNwZWNpYWwgZmlsZSBibG9ja3MgdW50aWwgZHVtcCBpcyBjb21wbGV0ZWQuCisqLwordm9pZCBsaW5lNl9pbnZhbGlkYXRlX2N1cnJlbnQoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkcikKK3sKKwlsaW5lNl9kdW1wX3N0YXJ0ZWQobDZkciwgTElORTZfRFVNUF9DVVJSRU5UKTsKK30KKworLyoKKwlDbGVhciAiZHVtcCBpbiBwcm9ncmVzcyIgZmxhZyBhbmQgbm90aWZ5IHdhaXRpbmcgcHJvY2Vzc2VzLgorKi8KK3ZvaWQgbGluZTZfZHVtcF9maW5pc2hlZChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyKQoreworCWw2ZHItPmluX3Byb2dyZXNzID0gTElORTZfRFVNUF9OT05FOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbDZkci0+d2FpdCk7Cit9CisKKy8qCisJU2VuZCBhbiBhc3luY2hyb25vdXMgY2hhbm5lbCBkdW1wIHJlcXVlc3QuCisqLworaW50IGxpbmU2X2R1bXBfcmVxdWVzdF9hc3luYyhzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLAorCQkJICAgICBzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IG51bSkKK3sKKwlpbnQgcmV0OworCWxpbmU2X2ludmFsaWRhdGVfY3VycmVudChsNmRyKTsKKwlyZXQgPSBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jKGxpbmU2LCBsNmRyLT5yZXFidWZzW251bV0uYnVmZmVyLAorCQkJCQkgICBsNmRyLT5yZXFidWZzW251bV0ubGVuZ3RoKTsKKworCWlmIChyZXQgPCAwKQorCQlsaW5lNl9kdW1wX2ZpbmlzaGVkKGw2ZHIpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKwlTZW5kIGFuIGFzeW5jaHJvbm91cyBkdW1wIHJlcXVlc3QgYWZ0ZXIgYSBnaXZlbiBpbnRlcnZhbC4KKyovCit2b2lkIGxpbmU2X3N0YXJ0dXBfZGVsYXllZChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLCBpbnQgc2Vjb25kcywKKwkJCSAgIHZvaWQgKCpmdW5jdGlvbikodW5zaWduZWQgbG9uZyksIHZvaWQgKmRhdGEpCit7CisJbDZkci0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBzZWNvbmRzICogSFo7CisJbDZkci0+dGltZXIuZnVuY3Rpb24gPSBmdW5jdGlvbjsKKwlsNmRyLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKKwlhZGRfdGltZXIoJmw2ZHItPnRpbWVyKTsKK30KKworLyoKKwlXYWl0IGZvciBjb21wbGV0aW9uLgorKi8KK2ludCBsaW5lNl93YWl0X2R1bXAoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwgaW50IG5vbmJsb2NrKQoreworCWludCByZXR2YWwgPSAwOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCWFkZF93YWl0X3F1ZXVlKCZsNmRyLT53YWl0LCAmd2FpdCk7CisJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisKKwl3aGlsZSAobDZkci0+aW5fcHJvZ3Jlc3MpIHsKKwkJaWYgKG5vbmJsb2NrKSB7CisJCQlyZXR2YWwgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCXNjaGVkdWxlKCk7CisJfQorCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJcmVtb3ZlX3dhaXRfcXVldWUoJmw2ZHItPndhaXQsICZ3YWl0KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKgorCUluaXRpYWxpemUgZHVtcCByZXF1ZXN0IGJ1ZmZlci4KKyovCitpbnQgbGluZTZfZHVtcHJlcV9pbml0YnVmKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJCSAgc2l6ZV90IGxlbiwgaW50IG51bSkKK3sKKwlsNmRyLT5yZXFidWZzW251bV0uYnVmZmVyID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmIChsNmRyLT5yZXFidWZzW251bV0uYnVmZmVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShsNmRyLT5yZXFidWZzW251bV0uYnVmZmVyLCBidWYsIGxlbik7CisJbDZkci0+cmVxYnVmc1tudW1dLmxlbmd0aCA9IGxlbjsKKwlyZXR1cm4gMDsKK30KKworLyoKKwlJbml0aWFsaXplIGR1bXAgcmVxdWVzdCBkYXRhIHN0cnVjdHVyZSAoaW5jbHVkaW5nIG9uZSBidWZmZXIpLgorKi8KK2ludCBsaW5lNl9kdW1wcmVxX2luaXQoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwgY29uc3Qgdm9pZCAqYnVmLAorCQkgICAgICAgc2l6ZV90IGxlbikKK3sKKwlpbnQgcmV0OworCXJldCA9IGxpbmU2X2R1bXByZXFfaW5pdGJ1ZihsNmRyLCBidWYsIGxlbiwgMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbDZkci0+d2FpdCk7CisJaW5pdF90aW1lcigmbDZkci0+dGltZXIpOworCXJldHVybiAwOworfQorCisvKgorCURlc3RydWN0IGR1bXAgcmVxdWVzdCBkYXRhIHN0cnVjdHVyZS4KKyovCit2b2lkIGxpbmU2X2R1bXByZXFfZGVzdHJ1Y3RidWYoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwgaW50IG51bSkKK3sKKwlpZiAobDZkciA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYgKGw2ZHItPnJlcWJ1ZnNbbnVtXS5idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCWtmcmVlKGw2ZHItPnJlcWJ1ZnNbbnVtXS5idWZmZXIpOworCWw2ZHItPnJlcWJ1ZnNbbnVtXS5idWZmZXIgPSBOVUxMOworfQorCisvKgorCURlc3RydWN0IGR1bXAgcmVxdWVzdCBkYXRhIHN0cnVjdHVyZS4KKyovCit2b2lkIGxpbmU2X2R1bXByZXFfZGVzdHJ1Y3Qoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkcikKK3sKKwlpZiAobDZkci0+cmVxYnVmc1swXS5idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCWxpbmU2X2R1bXByZXFfZGVzdHJ1Y3RidWYobDZkciwgMCk7CisJbDZkci0+b2sgPSAxOworCWRlbF90aW1lcl9zeW5jKCZsNmRyLT50aW1lcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHVtcHJlcXVlc3QuaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kdW1wcmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NzVkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHVtcHJlcXVlc3QuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBEVU1QUkVRVUVTVF9ICisjZGVmaW5lIERVTVBSRVFVRVNUX0gKKworCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorCisKK2VudW0geworCUxJTkU2X0RVTVBfTk9ORSwKKwlMSU5FNl9EVU1QX0NVUlJFTlQKK307CisKKworc3RydWN0IGxpbmU2X2R1bXBfcmVxYnVmIHsKKwkvKioKKwkJIEJ1ZmZlciBmb3IgZHVtcCByZXF1ZXN0cy4KKwkqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKKworCS8qKgorCQkgU2l6ZSBvZiBkdW1wIHJlcXVlc3QuCisJKi8KKwlzaXplX3QgbGVuZ3RoOworfTsKKworLyoqCisJIFByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRvIHJlcXVlc3QgY2hhbm5lbC9tb2RlbC8uLi4gZHVtcCBkYXRhIGZyb20gYQorCSBMaW5lNiBkZXZpY2UuCisqLworc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCB7CisJLyoqCisJCSBXYWl0IHF1ZXVlIGZvciBhY2Nlc3MgdG8gcHJvZ3JhbSBkdW1wIGRhdGEuCisJKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCisJLyoqCisJCSBJbmRpY2F0ZXMgYW4gdW5maW5pc2hlZCBwcm9ncmFtIGR1bXAgcmVxdWVzdC4KKwkJIDA6IG5vIGR1bXAKKwkJIDE6IGR1bXAgY3VycmVudCBzZXR0aW5ncworCQkgT3RoZXIgZGV2aWNlLXNwZWNpZmljIHZhbHVlcyBhcmUgYWxzbyBhbGxvd2VkLgorCSovCisJaW50IGluX3Byb2dyZXNzOworCisJLyoqCisJCSBUaW1lciBmb3IgZGVsYXllZCBkdW1wIHJlcXVlc3QuCisJKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKworCS8qKgorCQkgRmxhZyBpZiBpbml0aWFsIGR1bXAgcmVxdWVzdCBoYXMgYmVlbiBzdWNjZXNzZnVsLgorCSovCisJY2hhciBvazsKKworCS8qKgorCQkgRHVtcCByZXF1ZXN0IGJ1ZmZlcnMKKwkqLworCXN0cnVjdCBsaW5lNl9kdW1wX3JlcWJ1ZiByZXFidWZzWzFdOworfTsKKworZXh0ZXJuIHZvaWQgbGluZTZfZHVtcF9maW5pc2hlZChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyKTsKK2V4dGVybiBpbnQgbGluZTZfZHVtcF9yZXF1ZXN0X2FzeW5jKHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsCisJCQkJICAgIHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgbnVtKTsKK2V4dGVybiB2b2lkIGxpbmU2X2R1bXBfc3RhcnRlZChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLCBpbnQgZGVzdCk7CitleHRlcm4gdm9pZCBsaW5lNl9kdW1wcmVxX2Rlc3RydWN0KHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIpOworZXh0ZXJuIHZvaWQgbGluZTZfZHVtcHJlcV9kZXN0cnVjdGJ1ZihzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLCBpbnQgbnVtKTsKK2V4dGVybiBpbnQgbGluZTZfZHVtcHJlcV9pbml0KHN0cnVjdCBsaW5lNl9kdW1wX3JlcXVlc3QgKmw2ZHIsIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJCSAgICAgIHNpemVfdCBsZW4pOworZXh0ZXJuIGludCBsaW5lNl9kdW1wcmVxX2luaXRidWYoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwKKwkJCQkgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuLCBpbnQgbnVtKTsKK2V4dGVybiB2b2lkIGxpbmU2X2ludmFsaWRhdGVfY3VycmVudChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyKTsKK2V4dGVybiB2b2lkIGxpbmU2X3N0YXJ0dXBfZGVsYXllZChzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0ICpsNmRyLCBpbnQgc2Vjb25kcywKKwkJCQkgIHZvaWQgKCpmdW5jdGlvbikodW5zaWduZWQgbG9uZyksIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBsaW5lNl93YWl0X2R1bXAoc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCAqbDZkciwgaW50IG5vbmJsb2NrKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5YTJiMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaS5jCkBAIC0wLDAgKzEsNDIyIEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgorCisjaW5jbHVkZSAiYXVkaW8uaCIKKyNpbmNsdWRlICJtaWRpLmgiCisjaW5jbHVkZSAicG9kLmgiCisjaW5jbHVkZSAidXNiZGVmcy5oIgorCisKKyNkZWZpbmUgVVNFX01JRElCVUYgICAgICAxCisjZGVmaW5lIE9VVFBVVF9EVU1QX09OTFkgMAorCisKKyNkZWZpbmUgbGluZTZfcmF3bWlkaV9zdWJzdHJlYW1fbWlkaShzdWJzdHJlYW0pIFwKKwkoKHN0cnVjdCBzbmRfbGluZTZfbWlkaSAqKSgoc3Vic3RyZWFtKS0+cm1pZGktPnByaXZhdGVfZGF0YSkpCisKKworc3RhdGljIGludCBzZW5kX21pZGlfYXN5bmMoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkgICBpbnQgbGVuZ3RoKTsKKworCisvKgorCVBhc3MgZGF0YSByZWNlaXZlZCB2aWEgVVNCIHRvIE1JREkuCisqLwordm9pZCBsaW5lNl9taWRpX3JlY2VpdmUoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQlpbnQgbGVuZ3RoKQoreworCWlmIChsaW5lNi0+bGluZTZtaWRpLT5zdWJzdHJlYW1fcmVjZWl2ZSkKKwkJc25kX3Jhd21pZGlfcmVjZWl2ZShsaW5lNi0+bGluZTZtaWRpLT5zdWJzdHJlYW1fcmVjZWl2ZSwKKwkJCQkgICAgZGF0YSwgbGVuZ3RoKTsKK30KKworLyoKKwlSZWFkIGRhdGEgZnJvbSBNSURJIGJ1ZmZlciBhbmQgdHJhbnNtaXQgdGhlbSB2aWEgVVNCLgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X21pZGlfdHJhbnNtaXQoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gbGluZTZfcmF3bWlkaV9zdWJzdHJlYW1fbWlkaShzdWJzdHJlYW0pLT5saW5lNjsKKwlzdHJ1Y3Qgc25kX2xpbmU2X21pZGkgKmxpbmU2bWlkaSA9IGxpbmU2LT5saW5lNm1pZGk7CisJc3RydWN0IE1pZGlCdWZmZXIgKm1iID0gJmxpbmU2bWlkaS0+bWlkaWJ1Zl9vdXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBjaGFyIGNodW5rW2xpbmU2LT5tYXhfcGFja2V0X3NpemVdOworCWludCByZXEsIGRvbmU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZTYtPmxpbmU2bWlkaS0+bWlkaV90cmFuc21pdF9sb2NrLCBmbGFncyk7CisKKwlmb3IgKDs7KSB7CisJCXJlcSA9IG1pbihtaWRpYnVmX2J5dGVzX2ZyZWUobWIpLCBsaW5lNi0+bWF4X3BhY2tldF9zaXplKTsKKwkJZG9uZSA9IHNuZF9yYXdtaWRpX3RyYW5zbWl0X3BlZWsoc3Vic3RyZWFtLCBjaHVuaywgcmVxKTsKKworCQlpZiAoZG9uZSA9PSAwKQorCQkJYnJlYWs7CisKKyNpZiBET19EVU1QX01JRElfU0VORAorCQlsaW5lNl93cml0ZV9oZXhkdW1wKGxpbmU2LCAncycsIGNodW5rLCBkb25lKTsKKyNlbmRpZgorCQltaWRpYnVmX3dyaXRlKG1iLCBjaHVuaywgZG9uZSk7CisJCXNuZF9yYXdtaWRpX3RyYW5zbWl0X2FjayhzdWJzdHJlYW0sIGRvbmUpOworCX0KKworCWZvciAoOzspIHsKKwkJZG9uZSA9IG1pZGlidWZfcmVhZChtYiwgY2h1bmssIGxpbmU2LT5tYXhfcGFja2V0X3NpemUpOworCisJCWlmIChkb25lID09IDApCisJCQlicmVhazsKKworCQlpZiAobWlkaWJ1Zl9za2lwX21lc3NhZ2UobWIsIGxpbmU2bWlkaS0+bWlkaV9tYXNrX3RyYW5zbWl0KSkKKwkJCWNvbnRpbnVlOworCisJCXNlbmRfbWlkaV9hc3luYyhsaW5lNiwgY2h1bmssIGRvbmUpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2LT5saW5lNm1pZGktPm1pZGlfdHJhbnNtaXRfbG9jaywgZmxhZ3MpOworfQorCisvKgorCU5vdGlmaWNhdGlvbiBvZiBjb21wbGV0aW9uIG9mIE1JREkgdHJhbnNtaXNzaW9uLgorKi8KK3N0YXRpYyB2b2lkIG1pZGlfc2VudChzdHJ1Y3QgdXJiICp1cmIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3RhdHVzOworCWludCBudW07CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSAoc3RydWN0IHVzYl9saW5lNiAqKXVyYi0+Y29udGV4dDsKKworCXN0YXR1cyA9IHVyYi0+c3RhdHVzOworCWtmcmVlKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwl1c2JfZnJlZV91cmIodXJiKTsKKworCWlmIChzdGF0dXMgPT0gLUVTSFVURE9XTikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmU2LT5saW5lNm1pZGktPnNlbmRfdXJiX2xvY2ssIGZsYWdzKTsKKwludW0gPSAtLWxpbmU2LT5saW5lNm1pZGktPm51bV9hY3RpdmVfc2VuZF91cmJzOworCisJaWYgKG51bSA9PSAwKSB7CisJCWxpbmU2X21pZGlfdHJhbnNtaXQobGluZTYtPmxpbmU2bWlkaS0+c3Vic3RyZWFtX3RyYW5zbWl0KTsKKwkJbnVtID0gbGluZTYtPmxpbmU2bWlkaS0+bnVtX2FjdGl2ZV9zZW5kX3VyYnM7CisJfQorCisJaWYgKG51bSA9PSAwKQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmxpbmU2LT5saW5lNm1pZGktPnNlbmRfd2FpdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNi0+bGluZTZtaWRpLT5zZW5kX3VyYl9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisJU2VuZCBhbiBhc3luY2hyb25vdXMgTUlESSBtZXNzYWdlLgorCUFzc3VtZXMgdGhhdCBsaW5lNi0+bGluZTZtaWRpLT5zZW5kX3VyYl9sb2NrIGlzIGhlbGQKKwkoaS5lLiwgdGhpcyBmdW5jdGlvbiBpcyBzZXJpYWxpemVkKS4KKyovCitzdGF0aWMgaW50IHNlbmRfbWlkaV9hc3luYyhzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJCSAgIGludCBsZW5ndGgpCit7CisJc3RydWN0IHVyYiAqdXJiOworCWludCByZXR2YWw7CisJdW5zaWduZWQgY2hhciAqdHJhbnNmZXJfYnVmZmVyOworCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKworCWlmICh1cmIgPT0gMCkgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisjaWYgRE9fRFVNUF9VUkJfU0VORAorCWxpbmU2X3dyaXRlX2hleGR1bXAobGluZTYsICdTJywgZGF0YSwgbGVuZ3RoKTsKKyNlbmRpZgorCisJdHJhbnNmZXJfYnVmZmVyID0ga21hbGxvYyhsZW5ndGgsIEdGUF9BVE9NSUMpOworCisJaWYgKHRyYW5zZmVyX2J1ZmZlciA9PSAwKSB7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5KHRyYW5zZmVyX2J1ZmZlciwgZGF0YSwgbGVuZ3RoKTsKKwl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgbGluZTYtPnVzYmRldiwKKwkJCSB1c2Jfc25kYnVsa3BpcGUobGluZTYtPnVzYmRldiwKKwkJCQkJIGxpbmU2LT5lcF9jb250cm9sX3dyaXRlKSwKKwkJCSB0cmFuc2Zlcl9idWZmZXIsIGxlbmd0aCwgbWlkaV9zZW50LCBsaW5lNiwKKwkJCSBsaW5lNi0+aW50ZXJ2YWwpOworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgInVzYl9zdWJtaXRfdXJiIGZhaWxlZFxuIik7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkrK2xpbmU2LT5saW5lNm1pZGktPm51bV9hY3RpdmVfc2VuZF91cmJzOworCisJc3dpdGNoIChsaW5lNi0+dXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgeworCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUOgorCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUTElWRToKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTzoKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUOgorCWNhc2UgTElORTZfREVWSURfUE9EWFRMSVZFOgorCWNhc2UgTElORTZfREVWSURfUE9EWFRQUk86CisJY2FzZSBMSU5FNl9ERVZJRF9QT0NLRVRQT0Q6CisJCXBvZF9taWRpX3Bvc3Rwcm9jZXNzKChzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqKWxpbmU2LCBkYXRhLAorCQkJCSAgICAgbGVuZ3RoKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0U7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGluZTZfbWlkaV9vdXRwdXRfb3BlbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGluZTZfbWlkaV9vdXRwdXRfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsaW5lNl9taWRpX291dHB1dF90cmlnZ2VyKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgICBpbnQgdXApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IGxpbmU2X3Jhd21pZGlfc3Vic3RyZWFtX21pZGkoc3Vic3RyZWFtKS0+bGluZTY7CisKKwlsaW5lNi0+bGluZTZtaWRpLT5zdWJzdHJlYW1fdHJhbnNtaXQgPSBzdWJzdHJlYW07CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmU2LT5saW5lNm1pZGktPnNlbmRfdXJiX2xvY2ssIGZsYWdzKTsKKworCWlmIChsaW5lNi0+bGluZTZtaWRpLT5udW1fYWN0aXZlX3NlbmRfdXJicyA9PSAwKQorCQlsaW5lNl9taWRpX3RyYW5zbWl0KHN1YnN0cmVhbSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNi0+bGluZTZtaWRpLT5zZW5kX3VyYl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmU2X21pZGlfb3V0cHV0X2RyYWluKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IGxpbmU2X3Jhd21pZGlfc3Vic3RyZWFtX21pZGkoc3Vic3RyZWFtKS0+bGluZTY7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKmhlYWQgPSAmbGluZTYtPmxpbmU2bWlkaS0+c2VuZF93YWl0OworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCWFkZF93YWl0X3F1ZXVlKGhlYWQsICZ3YWl0KTsKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKworCXdoaWxlIChsaW5lNi0+bGluZTZtaWRpLT5udW1fYWN0aXZlX3NlbmRfdXJicyA+IDApCisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCWJyZWFrOworCQllbHNlCisJCQlzY2hlZHVsZSgpOworCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJcmVtb3ZlX3dhaXRfcXVldWUoaGVhZCwgJndhaXQpOworfQorCitzdGF0aWMgaW50IGxpbmU2X21pZGlfaW5wdXRfb3BlbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGluZTZfbWlkaV9pbnB1dF9jbG9zZShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbmU2X21pZGlfaW5wdXRfdHJpZ2dlcihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICBpbnQgdXApCit7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSBsaW5lNl9yYXdtaWRpX3N1YnN0cmVhbV9taWRpKHN1YnN0cmVhbSktPmxpbmU2OworCisJaWYgKHVwKQorCQlsaW5lNi0+bGluZTZtaWRpLT5zdWJzdHJlYW1fcmVjZWl2ZSA9IHN1YnN0cmVhbTsKKwllbHNlCisJCWxpbmU2LT5saW5lNm1pZGktPnN1YnN0cmVhbV9yZWNlaXZlID0gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfcmF3bWlkaV9vcHMgbGluZTZfbWlkaV9vdXRwdXRfb3BzID0geworCS5vcGVuID0gbGluZTZfbWlkaV9vdXRwdXRfb3BlbiwKKwkuY2xvc2UgPSBsaW5lNl9taWRpX291dHB1dF9jbG9zZSwKKwkudHJpZ2dlciA9IGxpbmU2X21pZGlfb3V0cHV0X3RyaWdnZXIsCisJLmRyYWluID0gbGluZTZfbWlkaV9vdXRwdXRfZHJhaW4sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9yYXdtaWRpX29wcyBsaW5lNl9taWRpX2lucHV0X29wcyA9IHsKKwkub3BlbiA9IGxpbmU2X21pZGlfaW5wdXRfb3BlbiwKKwkuY2xvc2UgPSBsaW5lNl9taWRpX2lucHV0X2Nsb3NlLAorCS50cmlnZ2VyID0gbGluZTZfbWlkaV9pbnB1dF90cmlnZ2VyLAorfTsKKworLyoKKwlDbGVhbnVwIHRoZSBMaW5lNiBNSURJIGRldmljZS4KKyovCitzdGF0aWMgdm9pZCBsaW5lNl9jbGVhbnVwX21pZGkoc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSkKK3sKK30KKworLyogQ3JlYXRlIGEgTUlESSBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X25ld19taWRpKHN0cnVjdCBzbmRfbGluZTZfbWlkaSAqbGluZTZtaWRpKQoreworCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9yYXdtaWRpX25ldyhsaW5lNm1pZGktPmxpbmU2LT5jYXJkLCAiTGluZTYgTUlESSIsIDAsIDEsIDEsCisJCQkgICAgICAmcm1pZGkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcm1pZGktPnByaXZhdGVfZGF0YSA9IGxpbmU2bWlkaTsKKwlybWlkaS0+cHJpdmF0ZV9mcmVlID0gbGluZTZfY2xlYW51cF9taWRpOworCXN0cmNweShybWlkaS0+bmFtZSwgbGluZTZtaWRpLT5saW5lNi0+cHJvcGVydGllcy0+bmFtZSk7CisKKwlybWlkaS0+aW5mb19mbGFncyA9CisJCVNORFJWX1JBV01JRElfSU5GT19PVVRQVVQgfAorCQlTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQgfAorCQlTTkRSVl9SQVdNSURJX0lORk9fRFVQTEVYOworCisJc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULAorCQkJICAgICZsaW5lNl9taWRpX291dHB1dF9vcHMpOworCXNuZF9yYXdtaWRpX3NldF9vcHMocm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULAorCQkJICAgICZsaW5lNl9taWRpX2lucHV0X29wcyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gIm1pZGlfbWFza190cmFuc21pdCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IG1pZGlfZ2V0X21pZGlfbWFza190cmFuc21pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgbGluZTYtPmxpbmU2bWlkaS0+bWlkaV9tYXNrX3RyYW5zbWl0KTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gIm1pZGlfbWFzayIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IG1pZGlfc2V0X21pZGlfbWFza190cmFuc21pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCB2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCWxpbmU2LT5saW5lNm1pZGktPm1pZGlfbWFza190cmFuc21pdCA9IHZhbHVlOworCXJldHVybiBjb3VudDsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAibWlkaV9tYXNrX3JlY2VpdmUiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBtaWRpX2dldF9taWRpX21hc2tfcmVjZWl2ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxpbmU2LT5saW5lNm1pZGktPm1pZGlfbWFza19yZWNlaXZlKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gIm1pZGlfbWFzayIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IG1pZGlfc2V0X21pZGlfbWFza19yZWNlaXZlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCB2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCWxpbmU2LT5saW5lNm1pZGktPm1pZGlfbWFza19yZWNlaXZlID0gdmFsdWU7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobWlkaV9tYXNrX3RyYW5zbWl0LCBTX0lXVUdPIHwgU19JUlVHTywgbWlkaV9nZXRfbWlkaV9tYXNrX3RyYW5zbWl0LCBtaWRpX3NldF9taWRpX21hc2tfdHJhbnNtaXQpOworc3RhdGljIERFVklDRV9BVFRSKG1pZGlfbWFza19yZWNlaXZlLCBTX0lXVUdPIHwgU19JUlVHTywgbWlkaV9nZXRfbWlkaV9tYXNrX3JlY2VpdmUsIG1pZGlfc2V0X21pZGlfbWFza19yZWNlaXZlKTsKKworLyogTUlESSBkZXZpY2UgZGVzdHJ1Y3RvciAqLworc3RhdGljIGludCBzbmRfbGluZTZfbWlkaV9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHNuZF9saW5lNl9taWRpICpsaW5lNm1pZGkgPSBkZXZpY2UtPmRldmljZV9kYXRhOworCWRldmljZV9yZW1vdmVfZmlsZShsaW5lNm1pZGktPmxpbmU2LT5pZmNkZXYsICZkZXZfYXR0cl9taWRpX21hc2tfdHJhbnNtaXQpOworCWRldmljZV9yZW1vdmVfZmlsZShsaW5lNm1pZGktPmxpbmU2LT5pZmNkZXYsICZkZXZfYXR0cl9taWRpX21hc2tfcmVjZWl2ZSk7CisJbWlkaWJ1Zl9kZXN0cm95KCZsaW5lNm1pZGktPm1pZGlidWZfaW4pOworCW1pZGlidWZfZGVzdHJveSgmbGluZTZtaWRpLT5taWRpYnVmX291dCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisJSW5pdGlhbGl6ZSB0aGUgTGluZTYgTUlESSBzdWJzeXN0ZW0uCisqLworaW50IGxpbmU2X2luaXRfbWlkaShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNikKK3sKKwlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG1pZGlfb3BzID0geworCQkuZGV2X2ZyZWUgPSBzbmRfbGluZTZfbWlkaV9mcmVlLAorCX07CisKKwlpbnQgZXJyOworCXN0cnVjdCBzbmRfbGluZTZfbWlkaSAqbGluZTZtaWRpOworCisJaWYgKCEobGluZTYtPnByb3BlcnRpZXMtPmNhcGFiaWxpdGllcyAmIExJTkU2X0JJVF9DT05UUk9MKSkKKwkJcmV0dXJuIDA7ICAvKiBza2lwIE1JREkgaW5pdGlhbGl6YXRpb24gYW5kIHJlcG9ydCBzdWNjZXNzICovCisKKwlsaW5lNm1pZGkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX2xpbmU2X21pZGkpLCBHRlBfS0VSTkVMKTsKKworCWlmIChsaW5lNm1pZGkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBtaWRpYnVmX2luaXQoJmxpbmU2bWlkaS0+bWlkaWJ1Zl9pbiwgTUlESV9CVUZGRVJfU0laRSwgMCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBtaWRpYnVmX2luaXQoJmxpbmU2bWlkaS0+bWlkaWJ1Zl9vdXQsIE1JRElfQlVGRkVSX1NJWkUsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJbGluZTZtaWRpLT5saW5lNiA9IGxpbmU2OworCWxpbmU2bWlkaS0+bWlkaV9tYXNrX3RyYW5zbWl0ID0gMTsKKwlsaW5lNm1pZGktPm1pZGlfbWFza19yZWNlaXZlID0gNDsKKwlsaW5lNi0+bGluZTZtaWRpID0gbGluZTZtaWRpOworCisJZXJyID0gc25kX2RldmljZV9uZXcobGluZTYtPmNhcmQsIFNORFJWX0RFVl9SQVdNSURJLCBsaW5lNm1pZGksCisJCQkgICAgICZtaWRpX29wcyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlzbmRfY2FyZF9zZXRfZGV2KGxpbmU2LT5jYXJkLCBsaW5lNi0+aWZjZGV2KTsKKworCWVyciA9IHNuZF9saW5lNl9uZXdfbWlkaShsaW5lNm1pZGkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGxpbmU2LT5pZmNkZXYsICZkZXZfYXR0cl9taWRpX21hc2tfdHJhbnNtaXQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGxpbmU2LT5pZmNkZXYsICZkZXZfYXR0cl9taWRpX21hc2tfcmVjZWl2ZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZsaW5lNm1pZGktPnNlbmRfd2FpdCk7CisJc3Bpbl9sb2NrX2luaXQoJmxpbmU2bWlkaS0+c2VuZF91cmJfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmxpbmU2bWlkaS0+bWlkaV90cmFuc21pdF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2OWZkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIE1JRElfSAorI2RlZmluZSBNSURJX0gKKworCisjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgorCisjaW5jbHVkZSAibWlkaWJ1Zi5oIgorCisKKyNkZWZpbmUgTUlESV9CVUZGRVJfU0laRSAxMDI0CisKKworc3RydWN0IHNuZF9saW5lNl9taWRpIHsKKwkvKioKKwkJIFBvaW50ZXIgYmFjayB0byB0aGUgTGluZTYgZHJpdmVyIGRhdGEgc3RydWN0dXJlLgorCSovCisJc3RydWN0IHVzYl9saW5lNiAqbGluZTY7CisKKwkvKioKKwkJIE1JREkgc3Vic3RyZWFtIGZvciByZWNlaXZpbmcgKG9yIE5VTEwgaWYgbm90IGFjdGl2ZSkuCisJKi8KKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW1fcmVjZWl2ZTsKKworCS8qKgorCQkgTUlESSBzdWJzdHJlYW0gZm9yIHRyYW5zbWl0dGluZyAob3IgTlVMTCBpZiBub3QgYWN0aXZlKS4KKwkqLworCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbV90cmFuc21pdDsKKworCS8qKgorCQkgTnVtYmVyIG9mIGN1cnJlbnRseSBhY3RpdmUgTUlESSBzZW5kIFVSQnMuCisJKi8KKwlpbnQgbnVtX2FjdGl2ZV9zZW5kX3VyYnM7CisKKwkvKioKKwkJIFNwaW4gbG9jayB0byBwcm90ZWN0IHVwZGF0ZXMgb2Ygc2VuZF91cmIuCisJKi8KKwlzcGlubG9ja190IHNlbmRfdXJiX2xvY2s7CisKKwkvKioKKwkJIFNwaW4gbG9jayB0byBwcm90ZWN0IE1JREkgYnVmZmVyIGhhbmRsaW5nLgorCSovCisJc3BpbmxvY2tfdCBtaWRpX3RyYW5zbWl0X2xvY2s7CisKKwkvKioKKwkJIFdhaXQgcXVldWUgZm9yIE1JREkgdHJhbnNtaXNzaW9uLgorCSovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgc2VuZF93YWl0OworCisJLyoqCisJCSBCaXQgbWFzayBmb3Igb3V0cHV0IE1JREkgY2hhbm5lbHMuCisJKi8KKwlpbnQgbWlkaV9tYXNrX3RyYW5zbWl0OworCisJLyoqCisJCSBCaXQgbWFzayBmb3IgaW5wdXQgTUlESSBjaGFubmVscy4KKwkqLworCWludCBtaWRpX21hc2tfcmVjZWl2ZTsKKworCS8qKgorCQkgQnVmZmVyIGZvciBpbmNvbWluZyBNSURJIHN0cmVhbS4KKwkqLworCXN0cnVjdCBNaWRpQnVmZmVyIG1pZGlidWZfaW47CisKKwkvKioKKwkJIEJ1ZmZlciBmb3Igb3V0Z29pbmcgTUlESSBzdHJlYW0uCisJKi8KKwlzdHJ1Y3QgTWlkaUJ1ZmZlciBtaWRpYnVmX291dDsKK307CisKKworZXh0ZXJuIGludCBsaW5lNl9pbml0X21pZGkoc3RydWN0IHVzYl9saW5lNiAqbGluZTYpOworZXh0ZXJuIHZvaWQgbGluZTZfbWlkaV9yZWNlaXZlKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJICAgICAgIGludCBsZW5ndGgpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGlidWYuYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwYTVmMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpYnVmLmMKQEAgLTAsMCArMSwyNjIgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJtaWRpYnVmLmgiCisKKworc3RhdGljIGludCBtaWRpYnVmX21lc3NhZ2VfbGVuZ3RoKHVuc2lnbmVkIGNoYXIgY29kZSkKK3sKKwlpZiAoY29kZSA8IDB4ODApCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChjb2RlIDwgMHhmMCkgeworCQlzdGF0aWMgY29uc3QgaW50IGxlbmd0aFtdID0geyAzLCAzLCAzLCAzLCAyLCAyLCAzIH07CisJCXJldHVybiBsZW5ndGhbKGNvZGUgPj4gNCkgLSA4XTsKKwl9IGVsc2UgeworCQkvKgorCQkJTm90ZSB0aGF0IGFjY29yZGluZyB0byB0aGUgTUlESSBzcGVjaWZpY2F0aW9uIDB4ZjIgaXMKKwkJCXRoZSAiU29uZyBQb3NpdGlvbiBQb2ludGVyIiwgYnV0IHRoaXMgaXMgdXNlZCBieSBMaW5lNgorCQkJdG8gc2VuZCBzeXNleCBtZXNzYWdlcyB0byB0aGUgaG9zdC4KKwkJKi8KKwkJc3RhdGljIGNvbnN0IGludCBsZW5ndGhbXSA9IHsgLTEsIDIsIC0xLCAyLCAtMSwgLTEsIDEsIDEsIDEsIDEsCisJCQkJCSAgICAgICAxLCAxLCAxLCAtMSwgMSwgMSB9OworCQlyZXR1cm4gbGVuZ3RoW2NvZGUgJiAweDBmXTsKKwl9Cit9CisKK3ZvaWQgbWlkaWJ1Zl9yZXNldChzdHJ1Y3QgTWlkaUJ1ZmZlciAqdGhpcykKK3sKKwl0aGlzLT5wb3NfcmVhZCA9IHRoaXMtPnBvc193cml0ZSA9IHRoaXMtPmZ1bGwgPSAwOworCXRoaXMtPmNvbW1hbmRfcHJldiA9IC0xOworfQorCitpbnQgbWlkaWJ1Zl9pbml0KHN0cnVjdCBNaWRpQnVmZmVyICp0aGlzLCBpbnQgc2l6ZSwgaW50IHNwbGl0KQoreworCXRoaXMtPmJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAodGhpcy0+YnVmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJdGhpcy0+c2l6ZSA9IHNpemU7CisJdGhpcy0+c3BsaXQgPSBzcGxpdDsKKwltaWRpYnVmX3Jlc2V0KHRoaXMpOworCXJldHVybiAwOworfQorCit2b2lkIG1pZGlidWZfc3RhdHVzKHN0cnVjdCBNaWRpQnVmZmVyICp0aGlzKQoreworCXByaW50ayhLRVJOX0RFQlVHICJtaWRpYnVmIHNpemU9JWQgc3BsaXQ9JWQgcG9zX3JlYWQ9JWQgcG9zX3dyaXRlPSVkICIKKwkgICAgICAgImZ1bGw9JWQgY29tbWFuZF9wcmV2PSUwMnhcbiIsIHRoaXMtPnNpemUsIHRoaXMtPnNwbGl0LAorCSAgICAgICB0aGlzLT5wb3NfcmVhZCwgdGhpcy0+cG9zX3dyaXRlLCB0aGlzLT5mdWxsLCB0aGlzLT5jb21tYW5kX3ByZXYpOworfQorCitzdGF0aWMgaW50IG1pZGlidWZfaXNfZW1wdHkoc3RydWN0IE1pZGlCdWZmZXIgKnRoaXMpCit7CisJcmV0dXJuICh0aGlzLT5wb3NfcmVhZCA9PSB0aGlzLT5wb3Nfd3JpdGUpICYmICF0aGlzLT5mdWxsOworfQorCitzdGF0aWMgaW50IG1pZGlidWZfaXNfZnVsbChzdHJ1Y3QgTWlkaUJ1ZmZlciAqdGhpcykKK3sKKwlyZXR1cm4gdGhpcy0+ZnVsbDsKK30KKworaW50IG1pZGlidWZfYnl0ZXNfZnJlZShzdHJ1Y3QgTWlkaUJ1ZmZlciAqdGhpcykKK3sKKwlyZXR1cm4KKwkJbWlkaWJ1Zl9pc19mdWxsKHRoaXMpID8KKwkJMCA6CisJCSh0aGlzLT5wb3NfcmVhZCAtIHRoaXMtPnBvc193cml0ZSArIHRoaXMtPnNpemUgLSAxKSAlIHRoaXMtPnNpemUgKyAxOworfQorCitpbnQgbWlkaWJ1Zl9ieXRlc191c2VkKHN0cnVjdCBNaWRpQnVmZmVyICp0aGlzKQoreworCXJldHVybgorCQltaWRpYnVmX2lzX2VtcHR5KHRoaXMpID8KKwkJMCA6CisJCSh0aGlzLT5wb3Nfd3JpdGUgLSB0aGlzLT5wb3NfcmVhZCArIHRoaXMtPnNpemUgLSAxKSAlIHRoaXMtPnNpemUgKyAxOworfQorCitpbnQgbWlkaWJ1Zl93cml0ZShzdHJ1Y3QgTWlkaUJ1ZmZlciAqdGhpcywgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgYnl0ZXNfZnJlZTsKKwlpbnQgbGVuZ3RoMSwgbGVuZ3RoMjsKKwlpbnQgc2tpcF9hY3RpdmVfc2Vuc2UgPSAwOworCisJaWYgKG1pZGlidWZfaXNfZnVsbCh0aGlzKSB8fCAobGVuZ3RoIDw9IDApKQorCQlyZXR1cm4gMDsKKworCS8qIHNraXAgdHJhaWxpbmcgYWN0aXZlIHNlbnNlICovCisJaWYgKGRhdGFbbGVuZ3RoIC0gMV0gPT0gMHhmZSkgeworCQktLWxlbmd0aDsKKwkJc2tpcF9hY3RpdmVfc2Vuc2UgPSAxOworCX0KKworCWJ5dGVzX2ZyZWUgPSBtaWRpYnVmX2J5dGVzX2ZyZWUodGhpcyk7CisKKwlpZiAobGVuZ3RoID4gYnl0ZXNfZnJlZSkKKwkJbGVuZ3RoID0gYnl0ZXNfZnJlZTsKKworCWlmIChsZW5ndGggPiAwKSB7CisJCWxlbmd0aDEgPSB0aGlzLT5zaXplIC0gdGhpcy0+cG9zX3dyaXRlOworCisJCWlmIChsZW5ndGggPCBsZW5ndGgxKSB7CisJCQkvKiBubyBidWZmZXIgd3JhcGFyb3VuZCAqLworCQkJbWVtY3B5KHRoaXMtPmJ1ZiArIHRoaXMtPnBvc193cml0ZSwgZGF0YSwgbGVuZ3RoKTsKKwkJCXRoaXMtPnBvc193cml0ZSArPSBsZW5ndGg7CisJCX0gZWxzZSB7CisJCQkvKiBidWZmZXIgd3JhcGFyb3VuZCAqLworCQkJbGVuZ3RoMiA9IGxlbmd0aCAtIGxlbmd0aDE7CisJCQltZW1jcHkodGhpcy0+YnVmICsgdGhpcy0+cG9zX3dyaXRlLCBkYXRhLCBsZW5ndGgxKTsKKwkJCW1lbWNweSh0aGlzLT5idWYsIGRhdGEgKyBsZW5ndGgxLCBsZW5ndGgyKTsKKwkJCXRoaXMtPnBvc193cml0ZSA9IGxlbmd0aDI7CisJCX0KKworCQlpZiAodGhpcy0+cG9zX3dyaXRlID09IHRoaXMtPnBvc19yZWFkKQorCQkJdGhpcy0+ZnVsbCA9IDE7CisJfQorCisJcmV0dXJuIGxlbmd0aCArIHNraXBfYWN0aXZlX3NlbnNlOworfQorCitpbnQgbWlkaWJ1Zl9yZWFkKHN0cnVjdCBNaWRpQnVmZmVyICp0aGlzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCWludCBieXRlc191c2VkOworCWludCBsZW5ndGgxLCBsZW5ndGgyOworCWludCBjb21tYW5kOworCWludCBtaWRpX2xlbmd0aDsKKwlpbnQgcmVwZWF0ID0gMDsKKwlpbnQgaTsKKworCS8qIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzdG9yZSBhdCBsZWFzdCBhIDMgYnl0ZSBNSURJIG1lc3NhZ2UgKi8KKwlpZiAobGVuZ3RoIDwgMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWlkaWJ1Zl9pc19lbXB0eSh0aGlzKSkKKwkJcmV0dXJuIDA7CisKKwlieXRlc191c2VkID0gbWlkaWJ1Zl9ieXRlc191c2VkKHRoaXMpOworCisJaWYgKGxlbmd0aCA+IGJ5dGVzX3VzZWQpCisJCWxlbmd0aCA9IGJ5dGVzX3VzZWQ7CisKKwlsZW5ndGgxID0gdGhpcy0+c2l6ZSAtIHRoaXMtPnBvc19yZWFkOworCisJLyogY2hlY2sgTUlESSBjb21tYW5kIGxlbmd0aCAqLworCWNvbW1hbmQgPSB0aGlzLT5idWZbdGhpcy0+cG9zX3JlYWRdOworCisJaWYgKGNvbW1hbmQgJiAweDgwKSB7CisJCW1pZGlfbGVuZ3RoID0gbWlkaWJ1Zl9tZXNzYWdlX2xlbmd0aChjb21tYW5kKTsKKwkJdGhpcy0+Y29tbWFuZF9wcmV2ID0gY29tbWFuZDsKKwl9IGVsc2UgeworCQlpZiAodGhpcy0+Y29tbWFuZF9wcmV2ID4gMCkgeworCQkJaW50IG1pZGlfbGVuZ3RoX3ByZXYgPSBtaWRpYnVmX21lc3NhZ2VfbGVuZ3RoKHRoaXMtPmNvbW1hbmRfcHJldik7CisKKwkJCWlmIChtaWRpX2xlbmd0aF9wcmV2ID4gMCkgeworCQkJCW1pZGlfbGVuZ3RoID0gbWlkaV9sZW5ndGhfcHJldiAtIDE7CisJCQkJcmVwZWF0ID0gMTsKKwkJCX0gZWxzZQorCQkJCW1pZGlfbGVuZ3RoID0gLTE7CisJCX0gZWxzZQorCQkJbWlkaV9sZW5ndGggPSAtMTsKKwl9CisKKwlpZiAobWlkaV9sZW5ndGggPCAwKSB7CisJCS8qIHNlYXJjaCBmb3IgZW5kIG9mIG1lc3NhZ2UgKi8KKwkJaWYgKGxlbmd0aCA8IGxlbmd0aDEpIHsKKwkJCS8qIG5vIGJ1ZmZlciB3cmFwYXJvdW5kICovCisJCQlmb3IgKGkgPSAxOyBpIDwgbGVuZ3RoOyArK2kpCisJCQkJaWYgKHRoaXMtPmJ1Zlt0aGlzLT5wb3NfcmVhZCArIGldICYgMHg4MCkKKwkJCQkJYnJlYWs7CisKKwkJCW1pZGlfbGVuZ3RoID0gaTsKKwkJfSBlbHNlIHsKKwkJCS8qIGJ1ZmZlciB3cmFwYXJvdW5kICovCisJCQlsZW5ndGgyID0gbGVuZ3RoIC0gbGVuZ3RoMTsKKworCQkJZm9yIChpID0gMTsgaSA8IGxlbmd0aDE7ICsraSkKKwkJCQlpZiAodGhpcy0+YnVmW3RoaXMtPnBvc19yZWFkICsgaV0gJiAweDgwKQorCQkJCQlicmVhazsKKworCQkJaWYgKGkgPCBsZW5ndGgxKQorCQkJCW1pZGlfbGVuZ3RoID0gaTsKKwkJCWVsc2UgeworCQkJCWZvciAoaSA9IDA7IGkgPCBsZW5ndGgyOyArK2kpCisJCQkJCWlmICh0aGlzLT5idWZbaV0gJiAweDgwKQorCQkJCQkJYnJlYWs7CisKKwkJCQltaWRpX2xlbmd0aCA9IGxlbmd0aDEgKyBpOworCQkJfQorCQl9CisKKwkJaWYgKG1pZGlfbGVuZ3RoID09IGxlbmd0aCkKKwkJCW1pZGlfbGVuZ3RoID0gLTE7ICAvKiBlbmQgb2YgbWVzc2FnZSBub3QgZm91bmQgKi8KKwl9CisKKwlpZiAobWlkaV9sZW5ndGggPCAwKSB7CisJCWlmICghdGhpcy0+c3BsaXQpCisJCQlyZXR1cm4gMDsgIC8qIGNvbW1hbmQgaXMgbm90IHlldCBjb21wbGV0ZSAqLworCX0gZWxzZSB7CisJCWlmIChsZW5ndGggPCBtaWRpX2xlbmd0aCkKKwkJCXJldHVybiAwOyAgLyogY29tbWFuZCBpcyBub3QgeWV0IGNvbXBsZXRlICovCisKKwkJbGVuZ3RoID0gbWlkaV9sZW5ndGg7CisJfQorCisJaWYgKGxlbmd0aCA8IGxlbmd0aDEpIHsKKwkJLyogbm8gYnVmZmVyIHdyYXBhcm91bmQgKi8KKwkJbWVtY3B5KGRhdGEgKyByZXBlYXQsIHRoaXMtPmJ1ZiArIHRoaXMtPnBvc19yZWFkLCBsZW5ndGgpOworCQl0aGlzLT5wb3NfcmVhZCArPSBsZW5ndGg7CisJfSBlbHNlIHsKKwkJLyogYnVmZmVyIHdyYXBhcm91bmQgKi8KKwkJbGVuZ3RoMiA9IGxlbmd0aCAtIGxlbmd0aDE7CisJCW1lbWNweShkYXRhICsgcmVwZWF0LCB0aGlzLT5idWYgKyB0aGlzLT5wb3NfcmVhZCwgbGVuZ3RoMSk7CisJCW1lbWNweShkYXRhICsgcmVwZWF0ICsgbGVuZ3RoMSwgdGhpcy0+YnVmLCBsZW5ndGgyKTsKKwkJdGhpcy0+cG9zX3JlYWQgPSBsZW5ndGgyOworCX0KKworCWlmIChyZXBlYXQpCisJCWRhdGFbMF0gPSB0aGlzLT5jb21tYW5kX3ByZXY7CisKKwl0aGlzLT5mdWxsID0gMDsKKwlyZXR1cm4gbGVuZ3RoICsgcmVwZWF0OworfQorCitpbnQgbWlkaWJ1Zl9pZ25vcmUoc3RydWN0IE1pZGlCdWZmZXIgKnRoaXMsIGludCBsZW5ndGgpCit7CisJaW50IGJ5dGVzX3VzZWQgPSBtaWRpYnVmX2J5dGVzX3VzZWQodGhpcyk7CisKKwlpZiAobGVuZ3RoID4gYnl0ZXNfdXNlZCkKKwkJbGVuZ3RoID0gYnl0ZXNfdXNlZDsKKworCXRoaXMtPnBvc19yZWFkID0gKHRoaXMtPnBvc19yZWFkICsgbGVuZ3RoKSAlIHRoaXMtPnNpemU7CisJdGhpcy0+ZnVsbCA9IDA7CisJcmV0dXJuIGxlbmd0aDsKK30KKworaW50IG1pZGlidWZfc2tpcF9tZXNzYWdlKHN0cnVjdCBNaWRpQnVmZmVyICp0aGlzLCB1bnNpZ25lZCBzaG9ydCBtYXNrKQoreworCWludCBjbWQgPSB0aGlzLT5jb21tYW5kX3ByZXY7CisKKwlpZiAoKGNtZCA+PSAweDgwKSAmJiAoY21kIDwgMHhmMCkpCisJCWlmICgobWFzayAmICgxIDw8IChjbWQgJiAweDBmKSkpID09IDApCisJCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCit2b2lkIG1pZGlidWZfZGVzdHJveShzdHJ1Y3QgTWlkaUJ1ZmZlciAqdGhpcykKK3sKKwlrZnJlZSh0aGlzLT5idWYpOworCXRoaXMtPmJ1ZiA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaWJ1Zi5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGlidWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODc3NTgxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGlidWYuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBNSURJQlVGX0gKKyNkZWZpbmUgTUlESUJVRl9ICisKKworc3RydWN0IE1pZGlCdWZmZXIgeworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlpbnQgc2l6ZTsKKwlpbnQgc3BsaXQ7CisJaW50IHBvc19yZWFkLCBwb3Nfd3JpdGU7CisJaW50IGZ1bGw7CisJaW50IGNvbW1hbmRfcHJldjsKK307CisKKworZXh0ZXJuIGludCBtaWRpYnVmX2J5dGVzX3VzZWQoc3RydWN0IE1pZGlCdWZmZXIgKm1iKTsKK2V4dGVybiBpbnQgbWlkaWJ1Zl9ieXRlc19mcmVlKHN0cnVjdCBNaWRpQnVmZmVyICptYik7CitleHRlcm4gdm9pZCBtaWRpYnVmX2Rlc3Ryb3koc3RydWN0IE1pZGlCdWZmZXIgKm1iKTsKK2V4dGVybiBpbnQgbWlkaWJ1Zl9pZ25vcmUoc3RydWN0IE1pZGlCdWZmZXIgKm1iLCBpbnQgbGVuZ3RoKTsKK2V4dGVybiBpbnQgbWlkaWJ1Zl9pbml0KHN0cnVjdCBNaWRpQnVmZmVyICptYiwgaW50IHNpemUsIGludCBzcGxpdCk7CitleHRlcm4gaW50IG1pZGlidWZfcmVhZChzdHJ1Y3QgTWlkaUJ1ZmZlciAqbWIsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW5ndGgpOworZXh0ZXJuIHZvaWQgbWlkaWJ1Zl9yZXNldChzdHJ1Y3QgTWlkaUJ1ZmZlciAqbWIpOworZXh0ZXJuIGludCBtaWRpYnVmX3NraXBfbWVzc2FnZShzdHJ1Y3QgTWlkaUJ1ZmZlciAqbWIsIHVuc2lnbmVkIHNob3J0IG1hc2spOworZXh0ZXJuIHZvaWQgbWlkaWJ1Zl9zdGF0dXMoc3RydWN0IE1pZGlCdWZmZXIgKm1iKTsKK2V4dGVybiBpbnQgbWlkaWJ1Zl93cml0ZShzdHJ1Y3QgTWlkaUJ1ZmZlciAqbWIsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkgaW50IGxlbmd0aCk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGNtLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM0MTEzZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wY20uYwpAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorCisjaW5jbHVkZSAiYXVkaW8uaCIKKyNpbmNsdWRlICJjYXB0dXJlLmgiCisjaW5jbHVkZSAicGxheWJhY2suaCIKKyNpbmNsdWRlICJwb2QuaCIKKworCisvKiB0cmlnZ2VyIGNhbGxiYWNrICovCitpbnQgc25kX2xpbmU2X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZTZwY20tPmxvY2tfdHJpZ2dlciwgZmxhZ3MpOworCWNsZWFyX2JpdChCSVRfUFJFUEFSRUQsICZsaW5lNnBjbS0+ZmxhZ3MpOworCisJc25kX3BjbV9ncm91cF9mb3JfZWFjaF9lbnRyeShzLCBzdWJzdHJlYW0pIHsKKwkJc3dpdGNoIChzLT5zdHJlYW0pIHsKKwkJY2FzZSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOgorCQkJZXJyID0gc25kX2xpbmU2X3BsYXliYWNrX3RyaWdnZXIocywgY21kKTsKKworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja190cmlnZ2VyLAorCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRToKKwkJCWVyciA9IHNuZF9saW5lNl9jYXB0dXJlX3RyaWdnZXIocywgY21kKTsKKworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja190cmlnZ2VyLAorCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGV2X2VycihzMm0oc3Vic3RyZWFtKSwgIlVua25vd24gc3RyZWFtIGRpcmVjdGlvbiAlZFxuIiwKKwkJCQlzLT5zdHJlYW0pOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTZwY20tPmxvY2tfdHJpZ2dlciwgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKiBjb250cm9sIGluZm8gY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X2NvbnRyb2xfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDI1NjsKKwlyZXR1cm4gMDsKK30KKworLyogY29udHJvbCBnZXQgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X2NvbnRyb2xfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisKKwlmb3IgKGkgPSAyOyBpLS07KQorCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXSA9IGxpbmU2cGNtLT52b2x1bWVbaV07CisKKwlyZXR1cm4gMDsKK30KKworLyogY29udHJvbCBwdXQgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X2NvbnRyb2xfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlpbnQgaSwgY2hhbmdlZCA9IDA7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCisJZm9yIChpID0gMjsgaS0tOykKKwkJaWYgKGxpbmU2cGNtLT52b2x1bWVbaV0gIT0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV0pIHsKKwkJCWxpbmU2cGNtLT52b2x1bWVbaV0gPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXTsKKwkJCWNoYW5nZWQgPSAxOworCQl9CisKKwlyZXR1cm4gY2hhbmdlZDsKK30KKworLyogY29udHJvbCBkZWZpbml0aW9uICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbGluZTZfY29udHJvbCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJQQ00gUGxheWJhY2sgVm9sdW1lIiwKKwkuaW5kZXggPSAwLAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFLAorCS5pbmZvID0gc25kX2xpbmU2X2NvbnRyb2xfaW5mbywKKwkuZ2V0ID0gc25kX2xpbmU2X2NvbnRyb2xfZ2V0LAorCS5wdXQgPSBzbmRfbGluZTZfY29udHJvbF9wdXQKK307CisKKy8qCisJQ2xlYW51cCB0aGUgUENNIGRldmljZS4KKyovCitzdGF0aWMgdm9pZCBsaW5lNl9jbGVhbnVwX3BjbShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCWludCBpOworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fY2hpcChwY20pOworCisJZm9yIChpID0gTElORTZfSVNPX0JVRkZFUlM7IGktLTspIHsKKwkJaWYgKGxpbmU2cGNtLT51cmJfYXVkaW9fb3V0W2ldKSB7CisJCQl1c2Jfa2lsbF91cmIobGluZTZwY20tPnVyYl9hdWRpb19vdXRbaV0pOworCQkJdXNiX2ZyZWVfdXJiKGxpbmU2cGNtLT51cmJfYXVkaW9fb3V0W2ldKTsKKwkJfQorCQlpZiAobGluZTZwY20tPnVyYl9hdWRpb19pbltpXSkgeworCQkJdXNiX2tpbGxfdXJiKGxpbmU2cGNtLT51cmJfYXVkaW9faW5baV0pOworCQkJdXNiX2ZyZWVfdXJiKGxpbmU2cGNtLT51cmJfYXVkaW9faW5baV0pOworCQl9CisJfQorfQorCisvKiBjcmVhdGUgYSBQQ00gZGV2aWNlICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9uZXdfcGNtKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfcGNtX25ldyhsaW5lNnBjbS0+bGluZTYtPmNhcmQsCisJCQkgKGNoYXIgKilsaW5lNnBjbS0+bGluZTYtPnByb3BlcnRpZXMtPm5hbWUsCisJCQkgMCwgMSwgMSwgJnBjbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlwY20tPnByaXZhdGVfZGF0YSA9IGxpbmU2cGNtOworCXBjbS0+cHJpdmF0ZV9mcmVlID0gbGluZTZfY2xlYW51cF9wY207CisJbGluZTZwY20tPnBjbSA9IHBjbTsKKwlzdHJjcHkocGNtLT5uYW1lLCBsaW5lNnBjbS0+bGluZTYtPnByb3BlcnRpZXMtPm5hbWUpOworCisJLyogc2V0IG9wZXJhdG9ycyAqLworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssICZzbmRfbGluZTZfcGxheWJhY2tfb3BzKTsKKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZzbmRfbGluZTZfY2FwdHVyZV9vcHMpOworCisJLyogcHJlLWFsbG9jYXRpb24gb2YgYnVmZmVycyAqLworCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9DT05USU5VT1VTLAorCQkJCQlzbmRfZG1hX2NvbnRpbnVvdXNfZGF0YShHRlBfS0VSTkVMKSwKKwkJCQkJNjQgKiAxMDI0LCAxMjggKiAxMDI0KTsKKworCXJldHVybiAwOworfQorCisvKiBQQ00gZGV2aWNlIGRlc3RydWN0b3IgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X3BjbV9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisJQ3JlYXRlIGFuZCByZWdpc3RlciB0aGUgUENNIGRldmljZSBhbmQgbWl4ZXIgZW50cmllcy4KKwlDcmVhdGUgVVJCcyBmb3IgcGxheWJhY2sgYW5kIGNhcHR1cmUuCisqLworaW50IGxpbmU2X2luaXRfcGNtKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LAorCQkgICBzdHJ1Y3QgbGluZTZfcGNtX3Byb3BlcnRpZXMgKnByb3BlcnRpZXMpCit7CisJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBwY21fb3BzID0geworCQkuZGV2X2ZyZWUgPSBzbmRfbGluZTZfcGNtX2ZyZWUsCisJfTsKKworCWludCBlcnI7CisJaW50IGVwX3JlYWQgPSAwLCBlcF93cml0ZSA9IDA7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtOworCisJaWYgKCEobGluZTYtPnByb3BlcnRpZXMtPmNhcGFiaWxpdGllcyAmIExJTkU2X0JJVF9QQ00pKQorCQlyZXR1cm4gMDsgIC8qIHNraXAgUENNIGluaXRpYWxpemF0aW9uIGFuZCByZXBvcnQgc3VjY2VzcyAqLworCisJLyogaW5pdGlhbGl6ZSBQQ00gc3Vic3lzdGVtIGJhc2VkIG9uIHByb2R1Y3QgaWQ6ICovCisJc3dpdGNoIChsaW5lNi0+cHJvZHVjdCkgeworCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUOgorCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUTElWRToKKwljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTzoKKwljYXNlIExJTkU2X0RFVklEX1BPRFhUOgorCWNhc2UgTElORTZfREVWSURfUE9EWFRMSVZFOgorCWNhc2UgTElORTZfREVWSURfUE9EWFRQUk86CisJCWVwX3JlYWQgID0gMHg4MjsKKwkJZXBfd3JpdGUgPSAweDAxOworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfUE9EWDM6CisJY2FzZSBMSU5FNl9ERVZJRF9QT0RYM0xJVkU6CisJCWVwX3JlYWQgID0gMHg4NjsKKwkJZXBfd3JpdGUgPSAweDAyOworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfUE9DS0VUUE9EOgorCQllcF9yZWFkICA9IDB4ODI7CisJCWVwX3dyaXRlID0gMHgwMjsKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X0RFVklEX0dVSVRBUlBPUlQ6CisJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9HWDoKKwkJZXBfcmVhZCAgPSAweDgyOworCQllcF93cml0ZSA9IDB4MDE7CisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDE6CisJCWVwX3JlYWQgID0gMHgwMDsKKwkJZXBfd3JpdGUgPSAweDAwOworCQlicmVhazsKKworCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfVVgyOgorCQllcF9yZWFkICA9IDB4ODc7CisJCWVwX3dyaXRlID0gMHgwMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0U7CisJfQorCisJbGluZTZwY20gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc25kX2xpbmU2X3BjbSksIEdGUF9LRVJORUwpOworCisJaWYgKGxpbmU2cGNtID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbGluZTZwY20tPnZvbHVtZVswXSA9IGxpbmU2cGNtLT52b2x1bWVbMV0gPSAxMjg7CisJbGluZTZwY20tPmxpbmU2ID0gbGluZTY7CisJbGluZTZwY20tPmVwX2F1ZGlvX3JlYWQgPSBlcF9yZWFkOworCWxpbmU2cGNtLT5lcF9hdWRpb193cml0ZSA9IGVwX3dyaXRlOworCWxpbmU2cGNtLT5tYXhfcGFja2V0X3NpemUgPSB1c2JfbWF4cGFja2V0KGxpbmU2LT51c2JkZXYsCisJCQkJCQkgdXNiX3JjdmludHBpcGUobGluZTYtPnVzYmRldiwKKwkJCQkJCQkJZXBfcmVhZCksCisJCQkJCQkgIDApOworCWxpbmU2cGNtLT5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKKwlsaW5lNi0+bGluZTZwY20gPSBsaW5lNnBjbTsKKworCS8qIFBDTSBkZXZpY2U6ICovCisJZXJyID0gc25kX2RldmljZV9uZXcobGluZTYtPmNhcmQsIFNORFJWX0RFVl9QQ00sIGxpbmU2LCAmcGNtX29wcyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlzbmRfY2FyZF9zZXRfZGV2KGxpbmU2LT5jYXJkLCBsaW5lNi0+aWZjZGV2KTsKKworCWVyciA9IHNuZF9saW5lNl9uZXdfcGNtKGxpbmU2cGNtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXNwaW5fbG9ja19pbml0KCZsaW5lNnBjbS0+bG9ja19hdWRpb19vdXQpOworCXNwaW5fbG9ja19pbml0KCZsaW5lNnBjbS0+bG9ja19hdWRpb19pbik7CisJc3Bpbl9sb2NrX2luaXQoJmxpbmU2cGNtLT5sb2NrX3RyaWdnZXIpOworCisJZXJyID0gY3JlYXRlX2F1ZGlvX291dF91cmJzKGxpbmU2cGNtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGNyZWF0ZV9hdWRpb19pbl91cmJzKGxpbmU2cGNtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCS8qIG1peGVyOiAqLworCWVyciA9IHNuZF9jdGxfYWRkKGxpbmU2LT5jYXJkLCBzbmRfY3RsX25ldzEoJmxpbmU2X2NvbnRyb2wsIGxpbmU2cGNtKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworLyogcHJlcGFyZSBwY20gY2FsbGJhY2sgKi8KK2ludCBzbmRfbGluZTZfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQklUX1BSRVBBUkVELCAmbGluZTZwY20tPmZsYWdzKSkgeworCQl1bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19vdXRfdXJicyhsaW5lNnBjbSk7CisJCWxpbmU2cGNtLT5wb3Nfb3V0ID0gMDsKKwkJbGluZTZwY20tPnBvc19vdXRfZG9uZSA9IDA7CisKKwkJdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9faW5fdXJicyhsaW5lNnBjbSk7CisJCWxpbmU2cGNtLT5ieXRlc19vdXQgPSAwOworCQlsaW5lNnBjbS0+cG9zX2luX2RvbmUgPSAwOworCQlsaW5lNnBjbS0+Ynl0ZXNfaW4gPSAwOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BjbS5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZGIyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGNtLmgKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisvKgorCVBDTSBpbnRlcmZhY2UgdG8gUE9EIHNlcmllcyBkZXZpY2VzLgorKi8KKworI2lmbmRlZiBQQ01fSAorI2RlZmluZSBQQ01fSAorCisKKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKworI2luY2x1ZGUgImRyaXZlci5oIgorI2luY2x1ZGUgInVzYmRlZnMuaCIKKworCisvKiBudW1iZXIgb2YgVVJCcyAqLworI2RlZmluZSBMSU5FNl9JU09fQlVGRkVSUwk4CisKKy8qIG51bWJlciBvZiBVU0IgZnJhbWVzIHBlciBVUkIgKi8KKyNkZWZpbmUgTElORTZfSVNPX1BBQ0tFVFMJMgorCisvKiBpbiBhICJmdWxsIHNwZWVkIiBkZXZpY2UgKHN1Y2ggYXMgdGhlIFBPRHh0IFBybykgdGhpcyBtZWFucyAxbXMgKi8KKyNkZWZpbmUgTElORTZfSVNPX0lOVEVSVkFMCTEKKworLyogdGhpcyBzaG91bGQgYmUgcXVlcmllZCBkeW5hbWljYWxseSBmcm9tIHRoZSBVU0IgaW50ZXJmYWNlISAqLworI2RlZmluZSBMSU5FNl9JU09fUEFDS0VUX1NJWkVfTUFYCTI1MgorCisKKy8qCisJRXh0cmFjdCB0aGUgbWVzc2FnaW5nIGRldmljZSBmcm9tIHRoZSBzdWJzdHJlYW0gaW5zdGFuY2UKKyovCisjZGVmaW5lIHMybShzKQkoKChzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqKSBcCisJCSAgIHNuZF9wY21fc3Vic3RyZWFtX2NoaXAocykpLT5saW5lNi0+aWZjZGV2KQorCisKK2VudW0geworCUJJVF9SVU5OSU5HX1BMQVlCQUNLLAorCUJJVF9SVU5OSU5HX0NBUFRVUkUsCisJQklUX1BBVVNFX1BMQVlCQUNLLAorCUJJVF9QUkVQQVJFRAorfTsKKworc3RydWN0IGxpbmU2X3BjbV9wcm9wZXJ0aWVzIHsKKwlzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfbGluZTZfcGxheWJhY2tfaHcsIHNuZF9saW5lNl9jYXB0dXJlX2h3OworCXN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0ZGVucyBzbmRfbGluZTZfcmF0ZXM7CisJaW50IGJ5dGVzX3Blcl9mcmFtZTsKK307CisKK3N0cnVjdCBzbmRfbGluZTZfcGNtIHsKKwkvKioKKwkJIFBvaW50ZXIgYmFjayB0byB0aGUgTGluZTYgZHJpdmVyIGRhdGEgc3RydWN0dXJlLgorCSovCisJc3RydWN0IHVzYl9saW5lNiAqbGluZTY7CisKKwkvKioKKwkJIFByb3BlcnRpZXMuCisJKi8KKwlzdHJ1Y3QgbGluZTZfcGNtX3Byb3BlcnRpZXMgKnByb3BlcnRpZXM7CisKKwkvKioKKwkJIEFMU0EgcGNtIHN0cmVhbQorCSovCisJc3RydWN0IHNuZF9wY20gKnBjbTsKKworCS8qKgorCQkgVVJCcyBmb3IgYXVkaW8gcGxheWJhY2suCisJKi8KKwlzdHJ1Y3QgdXJiICp1cmJfYXVkaW9fb3V0W0xJTkU2X0lTT19CVUZGRVJTXTsKKworCS8qKgorCQkgVVJCcyBmb3IgYXVkaW8gY2FwdHVyZS4KKwkqLworCXN0cnVjdCB1cmIgKnVyYl9hdWRpb19pbltMSU5FNl9JU09fQlVGRkVSU107CisKKwkvKioKKwkJIFRlbXBvcmFyeSBidWZmZXIgdG8gaG9sZCBkYXRhIHdoZW4gcGxheWJhY2sgYnVmZmVyIHdyYXBzLgorCSovCisJdW5zaWduZWQgY2hhciAqd3JhcF9vdXQ7CisKKwkvKioKKwkJIFRlbXBvcmFyeSBidWZmZXIgZm9yIGNhcHR1cmUuCisJCSBTaW5jZSB0aGUgcGFja2V0IHNpemUgaXMgbm90IGtub3duIGluIGFkdmFuY2UsIHRoaXMgYnVmZmVyIGlzCisJCSBsYXJnZSBlbm91Z2ggdG8gc3RvcmUgbWF4aW11bSBzaXplIHBhY2tldHMuCisJKi8KKwl1bnNpZ25lZCBjaGFyICpidWZmZXJfaW47CisKKwkvKioKKwkJIEZyZWUgZnJhbWUgcG9zaXRpb24gaW4gdGhlIHBsYXliYWNrIGJ1ZmZlci4KKwkqLworCXNuZF9wY21fdWZyYW1lc190IHBvc19vdXQ7CisKKwkvKioKKwkJIENvdW50IHByb2Nlc3NlZCBieXRlcyBmb3IgcGxheWJhY2suCisJCSBUaGlzIGlzIG1vZHVsbyBwZXJpb2Qgc2l6ZSAodG8gZGV0ZXJtaW5lIHdoZW4gYSBwZXJpb2QgaXMKKwkJIGZpbmlzaGVkKS4KKwkqLworCXVuc2lnbmVkIGJ5dGVzX291dDsKKworCS8qKgorCQkgQ291bnRlciB0byBjcmVhdGUgZGVzaXJlZCBwbGF5YmFjayBzYW1wbGUgcmF0ZS4KKwkqLworCXVuc2lnbmVkIGNvdW50X291dDsKKworCS8qKgorCQkgUGxheWJhY2sgcGVyaW9kIHNpemUgaW4gYnl0ZXMKKwkqLworCXVuc2lnbmVkIHBlcmlvZF9vdXQ7CisKKwkvKioKKwkJIFByb2Nlc3NlZCBmcmFtZSBwb3NpdGlvbiBpbiB0aGUgcGxheWJhY2sgYnVmZmVyLgorCQkgVGhlIGNvbnRlbnRzIG9mIHRoZSBvdXRwdXQgcmluZyBidWZmZXIgaGF2ZSBiZWVuIGNvbnN1bWVkIGJ5CisJCSB0aGUgVVNCIHN1YnN5c3RlbSAoaS5lLiwgc2VudCB0byB0aGUgVVNCIGRldmljZSkgdXAgdG8gdGhpcworCQkgcG9zaXRpb24uCisJKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBwb3Nfb3V0X2RvbmU7CisKKwkvKioKKwkJIENvdW50IHByb2Nlc3NlZCBieXRlcyBmb3IgY2FwdHVyZS4KKwkJIFRoaXMgaXMgbW9kdWxvIHBlcmlvZCBzaXplICh0byBkZXRlcm1pbmUgd2hlbiBhIHBlcmlvZCBpcworCQkgZmluaXNoZWQpLgorCSovCisJdW5zaWduZWQgYnl0ZXNfaW47CisKKwkvKioKKwkJIENvdW50ZXIgdG8gY3JlYXRlIGRlc2lyZWQgY2FwdHVyZSBzYW1wbGUgcmF0ZS4KKwkqLworCXVuc2lnbmVkIGNvdW50X2luOworCisJLyoqCisJCSBDYXB0dXJlIHBlcmlvZCBzaXplIGluIGJ5dGVzCisJKi8KKwl1bnNpZ25lZCBwZXJpb2RfaW47CisKKwkvKioKKwkJIFByb2Nlc3NlZCBmcmFtZSBwb3NpdGlvbiBpbiB0aGUgY2FwdHVyZSBidWZmZXIuCisJCSBUaGUgY29udGVudHMgb2YgdGhlIG91dHB1dCByaW5nIGJ1ZmZlciBoYXZlIGJlZW4gY29uc3VtZWQgYnkKKwkJIHRoZSBVU0Igc3Vic3lzdGVtIChpLmUuLCBzZW50IHRvIHRoZSBVU0IgZGV2aWNlKSB1cCB0byB0aGlzCisJCSBwb3NpdGlvbi4KKwkqLworCXNuZF9wY21fdWZyYW1lc190IHBvc19pbl9kb25lOworCisJLyoqCisJCSBCaXQgbWFzayBvZiBhY3RpdmUgcGxheWJhY2sgVVJCcy4KKwkqLworCXVuc2lnbmVkIGxvbmcgYWN0aXZlX3VyYl9vdXQ7CisKKwkvKioKKwkJIE1heGltdW0gc2l6ZSBvZiBVU0IgcGFja2V0LgorCSovCisJaW50IG1heF9wYWNrZXRfc2l6ZTsKKworCS8qKgorCQkgVVNCIGVuZHBvaW50IGZvciBsaXN0ZW5pbmcgdG8gYXVkaW8gZGF0YS4KKwkqLworCWludCBlcF9hdWRpb19yZWFkOworCisJLyoqCisJCSBVU0IgZW5kcG9pbnQgZm9yIHdyaXRpbmcgYXVkaW8gZGF0YS4KKwkqLworCWludCBlcF9hdWRpb193cml0ZTsKKworCS8qKgorCQkgQml0IG1hc2sgb2YgYWN0aXZlIGNhcHR1cmUgVVJCcy4KKwkqLworCXVuc2lnbmVkIGxvbmcgYWN0aXZlX3VyYl9pbjsKKworCS8qKgorCQkgQml0IG1hc2sgb2YgcGxheWJhY2sgVVJCcyBjdXJyZW50bHkgYmVpbmcgdW5saW5rZWQuCisJKi8KKwl1bnNpZ25lZCBsb25nIHVubGlua191cmJfb3V0OworCisJLyoqCisJCSBCaXQgbWFzayBvZiBjYXB0dXJlIFVSQnMgY3VycmVudGx5IGJlaW5nIHVubGlua2VkLgorCSovCisJdW5zaWduZWQgbG9uZyB1bmxpbmtfdXJiX2luOworCisJLyoqCisJCSBTcGluIGxvY2sgdG8gcHJvdGVjdCB1cGRhdGVzIG9mIHRoZSBwbGF5YmFjayBidWZmZXIgcG9zaXRpb25zIChub3QKKwkJIGNvbnRlbnRzISkKKwkqLworCXNwaW5sb2NrX3QgbG9ja19hdWRpb19vdXQ7CisKKwkvKioKKwkJIFNwaW4gbG9jayB0byBwcm90ZWN0IHVwZGF0ZXMgb2YgdGhlIGNhcHR1cmUgYnVmZmVyIHBvc2l0aW9ucyAobm90CisJCSBjb250ZW50cyEpCisJKi8KKwlzcGlubG9ja190IGxvY2tfYXVkaW9faW47CisKKwkvKioKKwkJIFNwaW4gbG9jayB0byBwcm90ZWN0IHRyaWdnZXIuCisJKi8KKwlzcGlubG9ja190IGxvY2tfdHJpZ2dlcjsKKworCS8qKgorCQkgUENNIHBsYXliYWNrIHZvbHVtZSAobGVmdCBhbmQgcmlnaHQpLgorCSovCisJaW50IHZvbHVtZVsyXTsKKworCS8qKgorCQkgU2V2ZXJhbCBzdGF0dXMgYml0cyAoc2VlIEJJVF8qKS4KKwkqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cit9OworCisKK2V4dGVybiBpbnQgbGluZTZfaW5pdF9wY20oc3RydWN0IHVzYl9saW5lNiAqbGluZTYsCisJCQkgIHN0cnVjdCBsaW5lNl9wY21fcHJvcGVydGllcyAqcHJvcGVydGllcyk7CitleHRlcm4gaW50IHNuZF9saW5lNl90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKTsKK2V4dGVybiBpbnQgc25kX2xpbmU2X3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BsYXliYWNrLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGxheWJhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2IwNjEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BsYXliYWNrLmMKQEAgLTAsMCArMSw0MjcgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorCisjaW5jbHVkZSAiYXVkaW8uaCIKKyNpbmNsdWRlICJwY20uaCIKKyNpbmNsdWRlICJwb2QuaCIKKyNpbmNsdWRlICJwbGF5YmFjay5oIgorCisKKy8qCisJU29mdHdhcmUgc3RlcmVvIHZvbHVtZSBjb250cm9sLgorKi8KK3N0YXRpYyB2b2lkIGNoYW5nZV92b2x1bWUoc3RydWN0IHVyYiAqdXJiX291dCwgaW50IHZvbHVtZVtdLAorCQkJICBpbnQgYnl0ZXNfcGVyX2ZyYW1lKQoreworCWludCBjaG4gPSAwOworCisJaWYgKHZvbHVtZVswXSA9PSAyNTYgJiYgdm9sdW1lWzFdID09IDI1NikKKwkJcmV0dXJuOyAgLyogbWF4aW11bSB2b2x1bWUgLSBubyBjaGFuZ2UgKi8KKworCWlmIChieXRlc19wZXJfZnJhbWUgPT0gNCkgeworCQlzaG9ydCAqcCwgKmJ1Zl9lbmQ7CisJCXAgPSAoc2hvcnQgKil1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXI7CisJCWJ1Zl9lbmQgPSBwICsgdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAvIHNpemVvZigqcCk7CisKKwkJZm9yICg7IHAgPCBidWZfZW5kOyArK3ApIHsKKwkJCSpwID0gKCpwICogdm9sdW1lW2NobiAmIDFdKSA+PiA4OworCQkJKytjaG47CisJCX0KKwl9IGVsc2UgaWYgKGJ5dGVzX3Blcl9mcmFtZSA9PSA2KSB7CisJCXVuc2lnbmVkIGNoYXIgKnAsICpidWZfZW5kOworCQlwID0gKHVuc2lnbmVkIGNoYXIgKil1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXI7CisJCWJ1Zl9lbmQgPSBwICsgdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKworCQlmb3IgKDsgcCA8IGJ1Zl9lbmQ7IHAgKz0gMykgeworCQkJaW50IHZhbDsKKwkJCXZhbCA9IHBbMF0gKyAocFsxXSA8PCA4KSArICgoc2lnbmVkIGNoYXIpcFsyXSA8PCAxNik7CisJCQl2YWwgPSAodmFsICogdm9sdW1lW2NobiAmIDFdKSA+PiA4OworCQkJcFswXSA9IHZhbDsKKwkJCXBbMV0gPSB2YWwgPj4gODsKKwkJCXBbMl0gPSB2YWwgPj4gMTY7CisJCQkrK2NobjsKKwkJfQorCX0KK30KKworLyoKKwlGaW5kIGEgZnJlZSBVUkIsIHByZXBhcmUgYXVkaW8gZGF0YSwgYW5kIHN1Ym1pdCBVUkIuCisqLworc3RhdGljIGludCBzdWJtaXRfYXVkaW9fb3V0X3VyYihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlpbnQgaW5kZXg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgdXJiX3NpemUsIHVyYl9mcmFtZXM7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWNvbnN0IGludCBieXRlc19wZXJfZnJhbWUgPSBsaW5lNnBjbS0+cHJvcGVydGllcy0+Ynl0ZXNfcGVyX2ZyYW1lOworCWNvbnN0IGludCBmcmFtZV9pbmNyZW1lbnQgPSBsaW5lNnBjbS0+cHJvcGVydGllcy0+c25kX2xpbmU2X3JhdGVzLnJhdHNbMF0ubnVtX21pbjsKKwljb25zdCBpbnQgZnJhbWVfZmFjdG9yID0gbGluZTZwY20tPnByb3BlcnRpZXMtPnNuZF9saW5lNl9yYXRlcy5yYXRzWzBdLmRlbiAqIChVU0JfSU5URVJWQUxTX1BFUl9TRUNPTkQgLyBMSU5FNl9JU09fSU5URVJWQUwpOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHVyYiAqdXJiX291dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19vdXQsIGZsYWdzKTsKKwlpbmRleCA9IGZpbmRfZmlyc3RfemVyb19iaXQoJmxpbmU2cGNtLT5hY3RpdmVfdXJiX291dCwgTElORTZfSVNPX0JVRkZFUlMpOworCisJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBMSU5FNl9JU09fQlVGRkVSUykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19vdXQsIGZsYWdzKTsKKwkJZGV2X2VycihzMm0oc3Vic3RyZWFtKSwgIm5vIGZyZWUgVVJCIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdXJiX291dCA9IGxpbmU2cGNtLT51cmJfYXVkaW9fb3V0W2luZGV4XTsKKwl1cmJfc2l6ZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX1BBQ0tFVFM7ICsraSkgeworCQkvKiBjb21wdXRlIGZyYW1lIHNpemUgZm9yIGdpdmVuIHNhbXBsaW5nIHJhdGUgKi8KKwkJaW50IG4sIGZzOworCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZm91dCA9ICZ1cmJfb3V0LT5pc29fZnJhbWVfZGVzY1tpXTsKKwkJbGluZTZwY20tPmNvdW50X291dCArPSBmcmFtZV9pbmNyZW1lbnQ7CisJCW4gPSBsaW5lNnBjbS0+Y291bnRfb3V0IC8gZnJhbWVfZmFjdG9yOworCQlsaW5lNnBjbS0+Y291bnRfb3V0IC09IG4gKiBmcmFtZV9mYWN0b3I7CisJCWZzID0gbiAqIGJ5dGVzX3Blcl9mcmFtZTsKKwkJZm91dC0+b2Zmc2V0ID0gdXJiX3NpemU7CisJCWZvdXQtPmxlbmd0aCA9IGZzOworCQl1cmJfc2l6ZSArPSBmczsKKwl9CisKKwl1cmJfZnJhbWVzID0gdXJiX3NpemUgLyBieXRlc19wZXJfZnJhbWU7CisKKwlpZiAodGVzdF9iaXQoQklUX1BBVVNFX1BMQVlCQUNLLCAmbGluZTZwY20tPmZsYWdzKSkgeworCQl1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXIgPSBsaW5lNnBjbS0+d3JhcF9vdXQ7CisJCW1lbXNldChsaW5lNnBjbS0+d3JhcF9vdXQsIDAsIHVyYl9zaXplKTsKKwl9IGVsc2UgeworCQlpZiAobGluZTZwY20tPnBvc19vdXQgKyB1cmJfZnJhbWVzID4gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJCS8qCisJCQkJVGhlIHRyYW5zZmVycmVkIGFyZWEgZ29lcyBvdmVyIGJ1ZmZlciBib3VuZGFyeSwKKwkJCQljb3B5IHRoZSBkYXRhIHRvIHRoZSB0ZW1wIGJ1ZmZlci4KKwkJCSovCisJCQlpbnQgbGVuOworCQkJbGVuID0gcnVudGltZS0+YnVmZmVyX3NpemUgLSBsaW5lNnBjbS0+cG9zX291dDsKKwkJCXVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlciA9IGxpbmU2cGNtLT53cmFwX291dDsKKworCQkJaWYgKGxlbiA+IDApIHsKKwkJCQltZW1jcHkobGluZTZwY20tPndyYXBfb3V0LCBydW50aW1lLT5kbWFfYXJlYSArIGxpbmU2cGNtLT5wb3Nfb3V0ICogYnl0ZXNfcGVyX2ZyYW1lLCBsZW4gKiBieXRlc19wZXJfZnJhbWUpOworCQkJCW1lbWNweShsaW5lNnBjbS0+d3JhcF9vdXQgKyBsZW4gKiBieXRlc19wZXJfZnJhbWUsIHJ1bnRpbWUtPmRtYV9hcmVhLCAodXJiX2ZyYW1lcyAtIGxlbikgKiBieXRlc19wZXJfZnJhbWUpOworCQkJfSBlbHNlCisJCQkJZGV2X2VycihzMm0oc3Vic3RyZWFtKSwgImRyaXZlciBidWc6IGxlbiA9ICVkXG4iLCBsZW4pOyAgLyogdGhpcyBpcyBzb21ld2hhdCBwYXJhbm9pZCAqLworCQl9IGVsc2UgeworCQkJLyogc2V0IHRoZSBidWZmZXIgcG9pbnRlciAqLworCQkJdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyID0gcnVudGltZS0+ZG1hX2FyZWEgKyBsaW5lNnBjbS0+cG9zX291dCAqIGJ5dGVzX3Blcl9mcmFtZTsKKwkJfQorCX0KKworCWlmICgobGluZTZwY20tPnBvc19vdXQgKz0gdXJiX2ZyYW1lcykgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWxpbmU2cGNtLT5wb3Nfb3V0IC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCisJdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHVyYl9zaXplOworCXVyYl9vdXQtPmNvbnRleHQgPSBzdWJzdHJlYW07CisJY2hhbmdlX3ZvbHVtZSh1cmJfb3V0LCBsaW5lNnBjbS0+dm9sdW1lLCBieXRlc19wZXJfZnJhbWUpOworCisjaWYgRE9fRFVNUF9QQ01fU0VORAorCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fUEFDS0VUUzsgKytpKSB7CisJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmb3V0ID0gJnVyYl9vdXQtPmlzb19mcmFtZV9kZXNjW2ldOworCQlsaW5lNl93cml0ZV9oZXhkdW1wKGxpbmU2cGNtLT5saW5lNiwgJ1AnLCB1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXIgKyBmb3V0LT5vZmZzZXQsIGZvdXQtPmxlbmd0aCk7CisJfQorI2VuZGlmCisKKwlpZiAodXNiX3N1Ym1pdF91cmIodXJiX291dCwgR0ZQX0FUT01JQykgPT0gMCkKKwkJc2V0X2JpdChpbmRleCwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX291dCk7CisJZWxzZQorCQlkZXZfZXJyKHMybShzdWJzdHJlYW0pLCAiVVJCIG91dCAjJWQgc3VibWlzc2lvbiBmYWlsZWRcbiIsIGluZGV4KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX291dCwgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKgorCVN1Ym1pdCBhbGwgY3VycmVudGx5IGF2YWlsYWJsZSBwbGF5YmFjayBVUkJzLgorKi8KK3N0YXRpYyBpbnQgc3VibWl0X2F1ZGlvX291dF9hbGxfdXJicyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlpbnQgcmV0LCBpOworCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19CVUZGRVJTOyArK2kpIHsKKwkJcmV0ID0gc3VibWl0X2F1ZGlvX291dF91cmIoc3Vic3RyZWFtKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKgorCVVubGluayBhbGwgY3VycmVudGx5IGFjdGl2ZSBwbGF5YmFjayBVUkJzLgorKi8KK3N0YXRpYyB2b2lkIHVubGlua19hdWRpb19vdXRfdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSBMSU5FNl9JU09fQlVGRkVSUzsgaS0tOykgeworCQlpZiAodGVzdF9iaXQoaSwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX291dCkpIHsKKwkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCAmbGluZTZwY20tPnVubGlua191cmJfb3V0KSkgeworCQkJCXN0cnVjdCB1cmIgKnUgPSBsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpXTsKKwkJCQl1c2JfdW5saW5rX3VyYih1KTsKKwkJCX0KKwkJfQorCX0KK30KKworLyoKKwlXYWl0IHVudGlsIHVubGlua2luZyBvZiBhbGwgY3VycmVudGx5IGFjdGl2ZSBwbGF5YmFjayBVUkJzIGhhcyBiZWVuIGZpbmlzaGVkLgorKi8KK3N0YXRpYyB2b2lkIHdhaXRfY2xlYXJfYXVkaW9fb3V0X3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQoreworCWludCB0aW1lb3V0ID0gSFo7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGFsaXZlOworCisJZG8geworCQlhbGl2ZSA9IDA7CisJCWZvciAoaSA9IExJTkU2X0lTT19CVUZGRVJTOyBpLS07KSB7CisJCQlpZiAodGVzdF9iaXQoaSwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX291dCkpCisJCQkJYWxpdmUrKzsKKwkJfQorCQlpZiAoIWFsaXZlKQorCQkJYnJlYWs7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwl9IHdoaWxlICgtLXRpbWVvdXQgPiAwKTsKKwlpZiAoYWxpdmUpCisJCXNuZF9wcmludGsoS0VSTl9FUlIgInRpbWVvdXQ6IHN0aWxsICVkIGFjdGl2ZSB1cmJzLi5cbiIsIGFsaXZlKTsKKworCWxpbmU2cGNtLT5hY3RpdmVfdXJiX291dCA9IDA7CisJbGluZTZwY20tPnVubGlua191cmJfb3V0ID0gMDsKK30KKworLyoKKwlVbmxpbmsgYWxsIGN1cnJlbnRseSBhY3RpdmUgcGxheWJhY2sgVVJCcywgYW5kIHdhaXQgZm9yIGZpbmlzaGluZy4KKyovCit2b2lkIHVubGlua193YWl0X2NsZWFyX2F1ZGlvX291dF91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKK3sKKwl1bmxpbmtfYXVkaW9fb3V0X3VyYnMobGluZTZwY20pOworCXdhaXRfY2xlYXJfYXVkaW9fb3V0X3VyYnMobGluZTZwY20pOworfQorCisvKgorCUNhbGxiYWNrIGZvciBjb21wbGV0ZWQgcGxheWJhY2sgVVJCLgorKi8KK3N0YXRpYyB2b2lkIGF1ZGlvX291dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IGksIGluZGV4LCBsZW5ndGggPSAwLCBzaHV0ZG93biA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtID0gKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKworCS8qIGZpbmQgaW5kZXggb2YgVVJCICovCisJZm9yIChpbmRleCA9IExJTkU2X0lTT19CVUZGRVJTOyBpbmRleC0tOykKKwkJaWYgKHVyYiA9PSBsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpbmRleF0pCisJCQlicmVhazsKKworCWlmIChpbmRleCA8IDApCisJCXJldHVybjsgIC8qIFVSQiBoYXMgYmVlbiB1bmxpbmtlZCBhc3luY2hyb25vdXNseSAqLworCisJZm9yIChpID0gTElORTZfSVNPX1BBQ0tFVFM7IGktLTspCisJCWxlbmd0aCArPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19vdXQsIGZsYWdzKTsKKwlsaW5lNnBjbS0+cG9zX291dF9kb25lICs9IGxlbmd0aCAvIGxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5ieXRlc19wZXJfZnJhbWU7CisKKwlpZiAobGluZTZwY20tPnBvc19vdXRfZG9uZSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJbGluZTZwY20tPnBvc19vdXRfZG9uZSAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKworCWNsZWFyX2JpdChpbmRleCwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX291dCk7CisKKwlmb3IgKGkgPSBMSU5FNl9JU09fUEFDS0VUUzsgaS0tOykKKwkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID09IC1FU0hVVERPV04pIHsKKwkJCXNodXRkb3duID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwlpZiAodGVzdF9iaXQoaW5kZXgsICZsaW5lNnBjbS0+dW5saW5rX3VyYl9vdXQpKQorCQlzaHV0ZG93biA9IDE7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19vdXQsIGZsYWdzKTsKKworCWlmICghc2h1dGRvd24pIHsKKwkJc3VibWl0X2F1ZGlvX291dF91cmIoc3Vic3RyZWFtKTsKKworCQlpZiAoKGxpbmU2cGNtLT5ieXRlc19vdXQgKz0gbGVuZ3RoKSA+PSBsaW5lNnBjbS0+cGVyaW9kX291dCkgeworCQkJbGluZTZwY20tPmJ5dGVzX291dCAtPSBsaW5lNnBjbS0+cGVyaW9kX291dDsKKwkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKKwkJfQorCX0KK30KKworLyogb3BlbiBwbGF5YmFjayBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X3JhdGRlbnMocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCisJCQkJCSAgICAoJmxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5zbmRfbGluZTZfcmF0ZXMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJ1bnRpbWUtPmh3ID0gbGluZTZwY20tPnByb3BlcnRpZXMtPnNuZF9saW5lNl9wbGF5YmFja19odzsKKwlyZXR1cm4gMDsKK30KKworLyogY2xvc2UgcGxheWJhY2sgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCisvKiBod19wYXJhbXMgcGxheWJhY2sgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X3BsYXliYWNrX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwkvKiAtLSBGbG9yaWFuIERlbXNraSBbRkRdICovCisJLyogZG9uJ3QgYXNrIG1lIHdoeSwgYnV0IHRoaXMgZml4ZXMgdGhlIGJ1ZyBvbiBteSBtYWNoaW5lICovCisJaWYgKGxpbmU2cGNtID09IE5VTEwpIHsKKwkJaWYgKHN1YnN0cmVhbS0+cGNtID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJaWYgKHN1YnN0cmVhbS0+cGNtLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlzdWJzdHJlYW0tPnByaXZhdGVfZGF0YSA9IHN1YnN0cmVhbS0+cGNtLT5wcml2YXRlX2RhdGE7CisJCWxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCX0KKwkvKiAtLSBbRkRdIGVuZCAqLworCisJcmV0ID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCQkgICAgICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWxpbmU2cGNtLT5wZXJpb2Rfb3V0ID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhod19wYXJhbXMpOworCWxpbmU2cGNtLT53cmFwX291dCA9IGttYWxsb2MoMiAqIExJTkU2X0lTT19QQUNLRVRfU0laRV9NQVgsIEdGUF9LRVJORUwpOworCisJaWYgKCFsaW5lNnBjbS0+d3JhcF9vdXQpIHsKKwkJZGV2X2VycihzMm0oc3Vic3RyZWFtKSwgImNhbm5vdCBtYWxsb2Mgd3JhcF9vdXRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogaHdfZnJlZSBwbGF5YmFjayBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfcGxheWJhY2tfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9fb3V0X3VyYnMobGluZTZwY20pOworCisJa2ZyZWUobGluZTZwY20tPndyYXBfb3V0KTsKKwlsaW5lNnBjbS0+d3JhcF9vdXQgPSBOVUxMOworCisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworLyogdHJpZ2dlciBwbGF5YmFjayBjYWxsYmFjayAqLworaW50IHNuZF9saW5lNl9wbGF5YmFja190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgZXJyOworCWxpbmU2cGNtLT5jb3VudF9vdXQgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoQklUX1JVTk5JTkdfUExBWUJBQ0ssICZsaW5lNnBjbS0+ZmxhZ3MpKSB7CisJCQllcnIgPSBzdWJtaXRfYXVkaW9fb3V0X2FsbF91cmJzKHN1YnN0cmVhbSk7CisKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJY2xlYXJfYml0KEJJVF9SVU5OSU5HX1BMQVlCQUNLLCAmbGluZTZwY20tPmZsYWdzKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQklUX1JVTk5JTkdfUExBWUJBQ0ssICZsaW5lNnBjbS0+ZmxhZ3MpKQorCQkJdW5saW5rX2F1ZGlvX291dF91cmJzKGxpbmU2cGNtKTsKKworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJc2V0X2JpdChCSVRfUEFVU0VfUExBWUJBQ0ssICZsaW5lNnBjbS0+ZmxhZ3MpOworCQlicmVhazsKKworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJY2xlYXJfYml0KEJJVF9QQVVTRV9QTEFZQkFDSywgJmxpbmU2cGNtLT5mbGFncyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIHBsYXliYWNrIHBvaW50ZXIgY2FsbGJhY2sgKi8KK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorc25kX2xpbmU2X3BsYXliYWNrX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXJldHVybiBsaW5lNnBjbS0+cG9zX291dF9kb25lOworfQorCisvKiBwbGF5YmFjayBvcGVyYXRvcnMgKi8KK3N0cnVjdCBzbmRfcGNtX29wcyBzbmRfbGluZTZfcGxheWJhY2tfb3BzID0geworCS5vcGVuID0gICAgICAgIHNuZF9saW5lNl9wbGF5YmFja19vcGVuLAorCS5jbG9zZSA9ICAgICAgIHNuZF9saW5lNl9wbGF5YmFja19jbG9zZSwKKwkuaW9jdGwgPSAgICAgICBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zID0gICBzbmRfbGluZTZfcGxheWJhY2tfaHdfcGFyYW1zLAorCS5od19mcmVlID0gICAgIHNuZF9saW5lNl9wbGF5YmFja19od19mcmVlLAorCS5wcmVwYXJlID0gICAgIHNuZF9saW5lNl9wcmVwYXJlLAorCS50cmlnZ2VyID0gICAgIHNuZF9saW5lNl90cmlnZ2VyLAorCS5wb2ludGVyID0gICAgIHNuZF9saW5lNl9wbGF5YmFja19wb2ludGVyLAorfTsKKworaW50IGNyZWF0ZV9hdWRpb19vdXRfdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCit7CisJaW50IGk7CisKKwkvKiBjcmVhdGUgYXVkaW8gVVJCcyBhbmQgZmlsbCBpbiBjb25zdGFudCB2YWx1ZXM6ICovCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19CVUZGRVJTOyArK2kpIHsKKwkJc3RydWN0IHVyYiAqdXJiOworCisJCS8qIFVSQiBmb3IgYXVkaW8gb3V0OiAqLworCQl1cmIgPSBsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpXSA9IHVzYl9hbGxvY191cmIoTElORTZfSVNPX1BBQ0tFVFMsIEdGUF9LRVJORUwpOworCisJCWlmICh1cmIgPT0gTlVMTCkgeworCQkJZGV2X2VycihsaW5lNnBjbS0+bGluZTYtPmlmY2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQl1cmItPmRldiA9IGxpbmU2cGNtLT5saW5lNi0+dXNiZGV2OworCQl1cmItPnBpcGUgPSB1c2Jfc25kaXNvY3BpcGUobGluZTZwY20tPmxpbmU2LT51c2JkZXYsIGxpbmU2cGNtLT5lcF9hdWRpb193cml0ZSAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+c3RhcnRfZnJhbWUgPSAtMTsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IExJTkU2X0lTT19QQUNLRVRTOworCQl1cmItPmludGVydmFsID0gTElORTZfSVNPX0lOVEVSVkFMOworCQl1cmItPmVycm9yX2NvdW50ID0gMDsKKwkJdXJiLT5jb21wbGV0ZSA9IGF1ZGlvX291dF9jYWxsYmFjazsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BsYXliYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxZTQ4YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIFBMQVlCQUNLX0gKKyNkZWZpbmUgUExBWUJBQ0tfSAorCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorCisKK2V4dGVybiBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2xpbmU2X3BsYXliYWNrX29wczsKKworCitleHRlcm4gaW50IGNyZWF0ZV9hdWRpb19vdXRfdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pOworZXh0ZXJuIGludCBzbmRfbGluZTZfcGxheWJhY2tfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgICBpbnQgY21kKTsKK2V4dGVybiB2b2lkIHVubGlua193YWl0X2NsZWFyX2F1ZGlvX291dF91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcG9kLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcG9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1Y2FhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wb2QuYwpAQCAtMCwwICsxLDExNTEgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlICJhdWRpby5oIgorI2luY2x1ZGUgImNhcHR1cmUuaCIKKyNpbmNsdWRlICJjb250cm9sLmgiCisjaW5jbHVkZSAicGxheWJhY2suaCIKKyNpbmNsdWRlICJwb2QuaCIKKworCisjZGVmaW5lIFBPRF9TWVNFWF9DT0RFIDMKKyNkZWZpbmUgUE9EX0JZVEVTX1BFUl9GUkFNRSA2ICAvKiAyNGJpdCBhdWRpbyAoc3RlcmVvKSAqLworCisKK2VudW0geworCVBPRF9TWVNFWF9DTElQICAgICAgPSAweDBmLAorCVBPRF9TWVNFWF9TQVZFICAgICAgPSAweDI0LAorCVBPRF9TWVNFWF9TWVNURU0gICAgPSAweDU2LAorCVBPRF9TWVNFWF9TWVNURU1SRVEgPSAweDU3LAorCS8qIFBPRF9TWVNFWF9VUERBVEUgICAgPSAweDZjLCAqLyAgLyogc29mdHdhcmUgdXBkYXRlISAqLworCVBPRF9TWVNFWF9TVE9SRSAgICAgPSAweDcxLAorCVBPRF9TWVNFWF9GSU5JU0ggICAgPSAweDcyLAorCVBPRF9TWVNFWF9EVU1QTUVNICAgPSAweDczLAorCVBPRF9TWVNFWF9EVU1QICAgICAgPSAweDc0LAorCVBPRF9TWVNFWF9EVU1QUkVRICAgPSAweDc1CisJLyogUE9EX1NZU0VYX0RVTVBNRU0yICA9IDB4NzYgKi8gICAvKiBkdW1wcyBlbnRpcmUgaW50ZXJuYWwgbWVtb3J5IG9mIFBPRHh0IFBybyAqLworfTsKKworZW51bSB7CisJUE9EX21vbml0b3JfbGV2ZWwgID0gMHgwNCwKKwlQT0Rfcm91dGluZyAgICAgICAgPSAweDA1LAorCVBPRF90dW5lcl9tdXRlICAgICA9IDB4MTMsCisJUE9EX3R1bmVyX2ZyZXEgICAgID0gMHgxNSwKKwlQT0RfdHVuZXJfbm90ZSAgICAgPSAweDE2LAorCVBPRF90dW5lcl9waXRjaCAgICA9IDB4MTcsCisJUE9EX3N5c3RlbV9pbnZhbGlkID0gMHg3ZmZmCit9OworCitlbnVtIHsKKwlQT0RfRFVNUF9NRU1PUlkgPSAyCit9OworCitlbnVtIHsKKwlQT0RfQlVTWV9SRUFELAorCVBPRF9CVVNZX1dSSVRFLAorCVBPRF9DSEFOTkVMX0RJUlRZLAorCVBPRF9TQVZFX1BSRVNTRUQsCisJUE9EX0JVU1lfTUlESVNFTkQKK307CisKKworc3RhdGljIHN0cnVjdCBzbmRfcmF0ZGVuIHBvZF9yYXRkZW4gPSB7CisJLm51bV9taW4gPSA3ODEyNSwKKwkubnVtX21heCA9IDc4MTI1LAorCS5udW1fc3RlcCA9IDEsCisJLmRlbiA9IDIKK307CisKK3N0YXRpYyBzdHJ1Y3QgbGluZTZfcGNtX3Byb3BlcnRpZXMgcG9kX3BjbV9wcm9wZXJ0aWVzID0geworICAuc25kX2xpbmU2X3BsYXliYWNrX2h3ID0geworCQkuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUKSwKKwkJLmZvcm1hdHMgPSAgICAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUsCisJCS5yYXRlcyA9ICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfS05PVCwKKwkJLnJhdGVfbWluID0gICAgICAgICAzOTA2MiwKKwkJLnJhdGVfbWF4ID0gICAgICAgICAzOTA2MywKKwkJLmNoYW5uZWxzX21pbiA9ICAgICAyLAorCQkuY2hhbm5lbHNfbWF4ID0gICAgIDIsCisJCS5idWZmZXJfYnl0ZXNfbWF4ID0gNjAwMDAsCisJCS5wZXJpb2RfYnl0ZXNfbWluID0gTElORTZfSVNPX1BBQ0tFVF9TSVpFX01BWCAqIFBPRF9CWVRFU19QRVJfRlJBTUUsICAvKiBhdCBsZWFzdCBvbmUgVVJCIG11c3QgZml0IGludG8gb25lIHBlcmlvZCAqLworCQkucGVyaW9kX2J5dGVzX21heCA9IDgxOTIsCisJCS5wZXJpb2RzX21pbiA9ICAgICAgMSwKKwkJLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0CisJfSwKKyAgLnNuZF9saW5lNl9jYXB0dXJlX2h3ID0geworCQkuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAorCQkuZm9ybWF0cyA9ICAgICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSwKKwkJLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV9LTk9ULAorCQkucmF0ZV9taW4gPSAgICAgICAgIDM5MDYyLAorCQkucmF0ZV9tYXggPSAgICAgICAgIDM5MDYzLAorCQkuY2hhbm5lbHNfbWluID0gICAgIDIsCisJCS5jaGFubmVsc19tYXggPSAgICAgMiwKKwkJLmJ1ZmZlcl9ieXRlc19tYXggPSA2MDAwMCwKKwkJLnBlcmlvZF9ieXRlc19taW4gPSBMSU5FNl9JU09fUEFDS0VUX1NJWkVfTUFYICogUE9EX0JZVEVTX1BFUl9GUkFNRSwgIC8qIGF0IGxlYXN0IG9uZSBVUkIgbXVzdCBmaXQgaW50byBvbmUgcGVyaW9kICovCisJCS5wZXJpb2RfYnl0ZXNfbWF4ID0gODE5MiwKKwkJLnBlcmlvZHNfbWluID0gICAgICAxLAorCQkucGVyaW9kc19tYXggPSAgICAgIDEwMjQKKwl9LAorCS5zbmRfbGluZTZfcmF0ZXMgPSB7CisJCS5ucmF0cyA9IDEsCisJCS5yYXRzID0gJnBvZF9yYXRkZW4KKwl9LAorCS5ieXRlc19wZXJfZnJhbWUgPSBQT0RfQllURVNfUEVSX0ZSQU1FCit9OworCitzdGF0aWMgY29uc3QgY2hhciBwb2RfcmVxdWVzdF92ZXJzaW9uW10gPSB7IDB4ZjAsIDB4N2UsIDB4N2YsIDB4MDYsIDB4MDEsIDB4ZjcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIHBvZF9yZXF1ZXN0X2NoYW5uZWxbXSA9IHsgMHhmMCwgMHgwMCwgMHgwMSwgMHgwYywgMHgwMywgMHg3NSwgMHhmNyB9Oworc3RhdGljIGNvbnN0IGNoYXIgcG9kX3ZlcnNpb25faGVhZGVyW10gID0geyAweGYyLCAweDdlLCAweDdmLCAweDA2LCAweDAyIH07CisKKworLyoKKwlNYXJrIGFsbCBwYXJhbWV0ZXJzIGFzIGRpcnR5IGFuZCBub3RpZnkgd2FpdGluZyBwcm9jZXNzZXMuCisqLworc3RhdGljIHZvaWQgcG9kX21hcmtfYmF0Y2hfYWxsX2RpcnR5KHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBQT0RfQ09OVFJPTF9TSVpFOyBpLS07KQorCQlzZXRfYml0KGksIHBvZC0+cGFyYW1fZGlydHkpOworfQorCisvKgorCVNlbmQgYW4gYXN5bmNocm9ub3VzIHJlcXVlc3QgZm9yIHRoZSBQT0QgZmlybXdhcmUgdmVyc2lvbiBhbmQgZGV2aWNlIElELgorKi8KK3N0YXRpYyBpbnQgcG9kX3ZlcnNpb25fcmVxdWVzdF9hc3luYyhzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kKQoreworCXJldHVybiBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jKCZwb2QtPmxpbmU2LCBwb2QtPmJ1ZmZlcl92ZXJzaW9ucmVxLCBzaXplb2YocG9kX3JlcXVlc3RfdmVyc2lvbikpOworfQorCitzdGF0aWMgdm9pZCBwb2RfY3JlYXRlX2ZpbGVzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9saW5lNl9wb2QsIGNyZWF0ZV9maWxlc193b3JrKTsKKworCXBvZF9jcmVhdGVfZmlsZXMocG9kLT5maXJtd2FyZV92ZXJzaW9uLCBwb2QtPmxpbmU2LnByb3BlcnRpZXMtPmRldmljZV9iaXQsIHBvZC0+bGluZTYuaWZjZGV2KTsKK30KKworc3RhdGljIHZvaWQgcG9kX3N0YXJ0dXBfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwllbnVtIHsKKwkJUkVRVUVTVF9OT05FLAorCQlSRVFVRVNUX0RVTVAsCisJCVJFUVVFU1RfVkVSU0lPTgorCX07CisKKwlpbnQgcmVxdWVzdCA9IFJFUVVFU1RfTk9ORTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gKHN0cnVjdCB1c2JfbGluZTZfcG9kICopYXJnOworCisJaWYgKHBvZC0+ZHVtcHJlcS5vaykgeworCQlpZiAoIXBvZC0+dmVyc2lvbnJlcV9vaykKKwkJCXJlcXVlc3QgPSBSRVFVRVNUX1ZFUlNJT047CisJfSBlbHNlIHsKKwkJaWYgKHBvZC0+dmVyc2lvbnJlcV9vaykKKwkJCXJlcXVlc3QgPSBSRVFVRVNUX0RVTVA7CisJCWVsc2UgaWYgKHBvZC0+c3RhcnR1cF9jb3VudCsrICYgMSkKKwkJCXJlcXVlc3QgPSBSRVFVRVNUX0RVTVA7CisJCWVsc2UKKwkJCXJlcXVlc3QgPSBSRVFVRVNUX1ZFUlNJT047CisJfQorCisJc3dpdGNoIChyZXF1ZXN0KSB7CisJY2FzZSBSRVFVRVNUX0RVTVA6CisJCWxpbmU2X2R1bXBfcmVxdWVzdF9hc3luYygmcG9kLT5kdW1wcmVxLCAmcG9kLT5saW5lNiwgMCk7CisJCWJyZWFrOworCisJY2FzZSBSRVFVRVNUX1ZFUlNJT046CisJCXBvZF92ZXJzaW9uX3JlcXVlc3RfYXN5bmMocG9kKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJbGluZTZfc3RhcnR1cF9kZWxheWVkKCZwb2QtPmR1bXByZXEsIDEsIHBvZF9zdGFydHVwX3RpbWVvdXQsIHBvZCk7Cit9CisKK3N0YXRpYyBjaGFyICpwb2RfYWxsb2Nfc3lzZXhfYnVmZmVyKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIGludCBjb2RlLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gbGluZTZfYWxsb2Nfc3lzZXhfYnVmZmVyKCZwb2QtPmxpbmU2LCBQT0RfU1lTRVhfQ09ERSwgY29kZSwgc2l6ZSk7Cit9CisKKy8qCisJU2VuZCBjaGFubmVsIGR1bXAgZGF0YSB0byB0aGUgUE9EeHQgUHJvLgorKi8KK3N0YXRpYyB2b2lkIHBvZF9kdW1wKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisJaW50IHNpemUgPSAxICsgc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKTsKKwljaGFyICpzeXNleCA9IHBvZF9hbGxvY19zeXNleF9idWZmZXIocG9kLCBQT0RfU1lTRVhfRFVNUCwgc2l6ZSk7CisJaWYgKCFzeXNleCkKKwkJcmV0dXJuOworCS8qIERvbid0IGtub3cgd2hhdCB0aGlzIGlzIGdvb2QgZm9yLCBidXQgUE9EeHQgUHJvIHRyYW5zbWl0cyBpdCwgc28gd2UKKwkgKiBhbHNvIGRvLi4uICovCisJc3lzZXhbU1lTRVhfREFUQV9PRlNdID0gNTsKKwltZW1jcHkoc3lzZXggKyBTWVNFWF9EQVRBX09GUyArIDEsIGRhdGEsIHNpemVvZihwb2QtPnByb2dfZGF0YSkpOworCWxpbmU2X3NlbmRfc3lzZXhfbWVzc2FnZSgmcG9kLT5saW5lNiwgc3lzZXgsIHNpemUpOworCW1lbWNweSgmcG9kLT5wcm9nX2RhdGEsIGRhdGEsIHNpemVvZihwb2QtPnByb2dfZGF0YSkpOworCXBvZF9tYXJrX2JhdGNoX2FsbF9kaXJ0eShwb2QpOworCWtmcmVlKHN5c2V4KTsKK30KKworLyoKKwlTdG9yZSBwYXJhbWV0ZXIgdmFsdWUgaW4gZHJpdmVyIG1lbW9yeSBhbmQgbWFyayBpdCBhcyBkaXJ0eS4KKyovCitzdGF0aWMgdm9pZCBwb2Rfc3RvcmVfcGFyYW1ldGVyKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIGludCBwYXJhbSwgaW50IHZhbHVlKQoreworCXBvZC0+cHJvZ19kYXRhLmNvbnRyb2xbcGFyYW1dID0gdmFsdWU7CisJc2V0X2JpdChwYXJhbSwgcG9kLT5wYXJhbV9kaXJ0eSk7CisJcG9kLT5kaXJ0eSA9IDE7Cit9CisKKy8qCisJSGFuZGxlIFNBVkUgYnV0dG9uCisqLworc3RhdGljIHZvaWQgcG9kX3NhdmVfYnV0dG9uX3ByZXNzZWQoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgaW50IHR5cGUsIGludCBpbmRleCkKK3sKKwlwb2QtPmRpcnR5ID0gMDsKKwlzZXRfYml0KFBPRF9TQVZFX1BSRVNTRUQsICZwb2QtPmF0b21pY19mbGFncyk7Cit9CisKKy8qCisJUHJvY2VzcyBhIGNvbXBsZXRlbHkgcmVjZWl2ZWQgbWVzc2FnZS4KKyovCit2b2lkIHBvZF9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpidWYgPSBwb2QtPmxpbmU2LmJ1ZmZlcl9tZXNzYWdlOworCisJLyogZmlsdGVyIG1lc3NhZ2VzIGJ5IHR5cGUgKi8KKwlzd2l0Y2ggKGJ1ZlswXSAmIDB4ZjApIHsKKwljYXNlIExJTkU2X1BBUkFNX0NIQU5HRToKKwljYXNlIExJTkU2X1BST0dSQU1fQ0hBTkdFOgorCWNhc2UgTElORTZfU1lTRVhfQkVHSU46CisJCWJyZWFrOyAgLyogaGFuZGxlIHRoZXNlIGZ1cnRoZXIgZG93biAqLworCisJZGVmYXVsdDoKKwkJcmV0dXJuOyAgLyogaWdub3JlIGFsbCBvdGhlcnMgKi8KKwl9CisKKwkvKiBwcm9jZXNzIGFsbCByZW1haW5pbmcgbWVzc2FnZXMgKi8KKwlzd2l0Y2ggKGJ1ZlswXSkgeworCWNhc2UgTElORTZfUEFSQU1fQ0hBTkdFIHwgTElORTZfQ0hBTk5FTF9ERVZJQ0U6CisJCXBvZF9zdG9yZV9wYXJhbWV0ZXIocG9kLCBidWZbMV0sIGJ1ZlsyXSk7CisJCS8qIGludGVudGlvbmFsbHkgbm8gYnJlYWsgaGVyZSEgKi8KKworCWNhc2UgTElORTZfUEFSQU1fQ0hBTkdFIHwgTElORTZfQ0hBTk5FTF9IT1NUOgorCQlpZiAoKGJ1ZlsxXSA9PSBQT0RfYW1wX21vZGVsX3NldHVwKSB8fAorCQkgICAgKGJ1ZlsxXSA9PSBQT0RfZWZmZWN0X3NldHVwKSkKKwkJCS8qIHRoZXNlIGFsc28gYWZmZWN0IG90aGVyIHNldHRpbmdzICovCisJCQlsaW5lNl9kdW1wX3JlcXVlc3RfYXN5bmMoJnBvZC0+ZHVtcHJlcSwgJnBvZC0+bGluZTYsIDApOworCisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9QUk9HUkFNX0NIQU5HRSB8IExJTkU2X0NIQU5ORUxfREVWSUNFOgorCWNhc2UgTElORTZfUFJPR1JBTV9DSEFOR0UgfCBMSU5FNl9DSEFOTkVMX0hPU1Q6CisJCXBvZC0+Y2hhbm5lbF9udW0gPSBidWZbMV07CisJCXBvZC0+ZGlydHkgPSAwOworCQlzZXRfYml0KFBPRF9DSEFOTkVMX0RJUlRZLCAmcG9kLT5hdG9taWNfZmxhZ3MpOworCQlsaW5lNl9kdW1wX3JlcXVlc3RfYXN5bmMoJnBvZC0+ZHVtcHJlcSwgJnBvZC0+bGluZTYsIDApOworCQlicmVhazsKKworCWNhc2UgTElORTZfU1lTRVhfQkVHSU4gfCBMSU5FNl9DSEFOTkVMX0RFVklDRToKKwljYXNlIExJTkU2X1NZU0VYX0JFR0lOIHwgTElORTZfQ0hBTk5FTF9VTktOT1dOOgorCQlpZiAobWVtY21wKGJ1ZiArIDEsIGxpbmU2X21pZGlfaWQsIHNpemVvZihsaW5lNl9taWRpX2lkKSkgPT0gMCkgeworCQkJc3dpdGNoIChidWZbNV0pIHsKKwkJCWNhc2UgUE9EX1NZU0VYX0RVTVA6CisJCQkJaWYgKHBvZC0+bGluZTYubWVzc2FnZV9sZW5ndGggPT0gc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKSArIDcpIHsKKwkJCQkJc3dpdGNoIChwb2QtPmR1bXByZXEuaW5fcHJvZ3Jlc3MpIHsKKwkJCQkJY2FzZSBMSU5FNl9EVU1QX0NVUlJFTlQ6CisJCQkJCQltZW1jcHkoJnBvZC0+cHJvZ19kYXRhLCBidWYgKyA3LCBzaXplb2YocG9kLT5wcm9nX2RhdGEpKTsKKwkJCQkJCXBvZF9tYXJrX2JhdGNoX2FsbF9kaXJ0eShwb2QpOworCQkJCQkJcG9kLT5kdW1wcmVxLm9rID0gMTsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgUE9EX0RVTVBfTUVNT1JZOgorCQkJCQkJbWVtY3B5KCZwb2QtPnByb2dfZGF0YV9idWYsIGJ1ZiArIDcsIHNpemVvZihwb2QtPnByb2dfZGF0YV9idWYpKTsKKwkJCQkJCWJyZWFrOworCisJCQkJCWRlZmF1bHQ6CisJCQkJCQlERUJVR19NRVNTQUdFUyhkZXZfZXJyKHBvZC0+bGluZTYuaWZjZGV2LCAidW5rbm93biBkdW1wIGNvZGUgJTAyWFxuIiwgcG9kLT5kdW1wcmVxLmluX3Byb2dyZXNzKSk7CisJCQkJCX0KKworCQkJCQlsaW5lNl9kdW1wX2ZpbmlzaGVkKCZwb2QtPmR1bXByZXEpOworCQkJCX0gZWxzZQorCQkJCQlERUJVR19NRVNTQUdFUyhkZXZfZXJyKHBvZC0+bGluZTYuaWZjZGV2LCAid3Jvbmcgc2l6ZSBvZiBjaGFubmVsIGR1bXAgbWVzc2FnZSAoJWQgaW5zdGVhZCBvZiAlZClcbiIsCisJCQkJCQkJCQkJCQkJCQkJIHBvZC0+bGluZTYubWVzc2FnZV9sZW5ndGgsIChpbnQpc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKSArIDcpKTsKKworCQkJCWJyZWFrOworCisJCQljYXNlIFBPRF9TWVNFWF9TWVNURU06IHsKKwkJCQlzaG9ydCB2YWx1ZSA9ICgoaW50KWJ1Zls3XSA8PCAxMikgfCAoKGludClidWZbOF0gPDwgOCkgfCAoKGludClidWZbOV0gPDwgNCkgfCAoaW50KWJ1ZlsxMF07CisKKyNkZWZpbmUgUFJPQ0VTU19TWVNURU1fUEFSQU0oeCkgXAorCQkJCQljYXNlIFBPRF8gIyMgeDogXAorCQkJCQkJcG9kLT54LnZhbHVlID0gdmFsdWU7IFwKKwkJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9kLT54LndhaXQpOyBcCisJCQkJCQlicmVhazsKKworCQkJCXN3aXRjaCAoYnVmWzZdKSB7CisJCQkJCVBST0NFU1NfU1lTVEVNX1BBUkFNKG1vbml0b3JfbGV2ZWwpOworCQkJCQlQUk9DRVNTX1NZU1RFTV9QQVJBTShyb3V0aW5nKTsKKwkJCQkJUFJPQ0VTU19TWVNURU1fUEFSQU0odHVuZXJfbXV0ZSk7CisJCQkJCVBST0NFU1NfU1lTVEVNX1BBUkFNKHR1bmVyX2ZyZXEpOworCQkJCQlQUk9DRVNTX1NZU1RFTV9QQVJBTSh0dW5lcl9ub3RlKTsKKwkJCQkJUFJPQ0VTU19TWVNURU1fUEFSQU0odHVuZXJfcGl0Y2gpOworCisjdW5kZWYgUFJPQ0VTU19TWVNURU1fUEFSQU0KKworCQkJCWRlZmF1bHQ6CisJCQkJCURFQlVHX01FU1NBR0VTKGRldl9lcnIocG9kLT5saW5lNi5pZmNkZXYsICJ1bmtub3duIHR1bmVyL3N5c3RlbSByZXNwb25zZSAlMDJYXG4iLCBidWZbNl0pKTsKKwkJCQl9CisKKwkJCQlicmVhazsKKwkJCX0KKworCQkJY2FzZSBQT0RfU1lTRVhfRklOSVNIOgorCQkJCS8qIGRvIHdlIG5lZWQgdG8gcmVzcG9uZCB0byB0aGlzPyAqLworCQkJCWJyZWFrOworCisJCQljYXNlIFBPRF9TWVNFWF9TQVZFOgorCQkJCXBvZF9zYXZlX2J1dHRvbl9wcmVzc2VkKHBvZCwgYnVmWzZdLCBidWZbN10pOworCQkJCWJyZWFrOworCisJCQljYXNlIFBPRF9TWVNFWF9DTElQOgorCQkJCURFQlVHX01FU1NBR0VTKGRldl9lcnIocG9kLT5saW5lNi5pZmNkZXYsICJhdWRpbyBjbGlwcGVkXG4iKSk7CisJCQkJcG9kLT5jbGlwcGluZy52YWx1ZSA9IDE7CisJCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb2QtPmNsaXBwaW5nLndhaXQpOworCQkJCWJyZWFrOworCisJCQljYXNlIFBPRF9TWVNFWF9TVE9SRToKKwkJCQlERUJVR19NRVNTQUdFUyhkZXZfZXJyKHBvZC0+bGluZTYuaWZjZGV2LCAibWVzc2FnZSAlMDJYIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIGJ1Zls1XSkpOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCURFQlVHX01FU1NBR0VTKGRldl9lcnIocG9kLT5saW5lNi5pZmNkZXYsICJ1bmtub3duIHN5c2V4IG1lc3NhZ2UgJTAyWFxuIiwgYnVmWzVdKSk7CisJCQl9CisJCX0gZWxzZSBpZiAobWVtY21wKGJ1ZiwgcG9kX3ZlcnNpb25faGVhZGVyLCBzaXplb2YocG9kX3ZlcnNpb25faGVhZGVyKSkgPT0gMCkgeworCQkJaWYgKHBvZC0+dmVyc2lvbnJlcV9vayA9PSAwKSB7CisJCQkJcG9kLT5maXJtd2FyZV92ZXJzaW9uID0gYnVmWzEzXSAqIDEwMCArIGJ1ZlsxNF0gKiAxMCArIGJ1ZlsxNV07CisJCQkJcG9kLT5kZXZpY2VfaWQgPSAoKGludClidWZbOF0gPDwgMTYpIHwgKChpbnQpYnVmWzldIDw8IDgpIHwgKGludClidWZbMTBdOworCQkJCXBvZC0+dmVyc2lvbnJlcV9vayA9IDE7CisKKwkJCQkvKiBOb3cgd2Uga25vdyB0aGUgZmlybXdhcmUgdmVyc2lvbiwgc28gd2Ugc2NoZWR1bGUgYSBib3R0b20gaGFsZgorCQkJCQkgaGFuZGxlciB0byBjcmVhdGUgdGhlIHNwZWNpYWwgZmlsZXM6ICovCisJCQkJSU5JVF9XT1JLKCZwb2QtPmNyZWF0ZV9maWxlc193b3JrLCBwb2RfY3JlYXRlX2ZpbGVzX3dvcmspOworCQkJCXF1ZXVlX3dvcmsobGluZTZfd29ya3F1ZXVlLCAmcG9kLT5jcmVhdGVfZmlsZXNfd29yayk7CisJCQl9IGVsc2UKKwkJCQlERUJVR19NRVNTQUdFUyhkZXZfZXJyKHBvZC0+bGluZTYuaWZjZGV2LCAibXVsdGlwbGUgZmlybXdhcmUgdmVyc2lvbiBtZXNzYWdlXG4iKSk7CisJCX0gZWxzZQorCQkJREVCVUdfTUVTU0FHRVMoZGV2X2Vycihwb2QtPmxpbmU2LmlmY2RldiwgInVua25vd24gc3lzZXggaGVhZGVyXG4iKSk7CisKKwkJYnJlYWs7CisKKwljYXNlIExJTkU2X1NZU0VYX0VORDoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlERUJVR19NRVNTQUdFUyhkZXZfZXJyKHBvZC0+bGluZTYuaWZjZGV2LCAiUE9EOiB1bmtub3duIG1lc3NhZ2UgJTAyWFxuIiwgYnVmWzBdKSk7CisJfQorfQorCisvKgorCURldGVjdCBzb21lIGNhc2VzIHRoYXQgcmVxdWlyZSBhIGNoYW5uZWwgZHVtcCBhZnRlciBzZW5kaW5nIGEgY29tbWFuZCB0byB0aGUKKwlkZXZpY2UuIEltcG9ydGFudCBub3RlczoKKwkqKSBUaGUgYWN0dWFsIGR1bXAgcmVxdWVzdCBjYW4gbm90IGJlIHNlbnQgaGVyZSBzaW5jZSB3ZSBhcmUgbm90IGFsbG93ZWQgdG8KKwl3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiB0aGUgZmlyc3QgbWVzc2FnZSBpbiB0aGlzIGNvbnRleHQsIGFuZCBzZW5kaW5nCisJdGhlIGR1bXAgcmVxdWVzdCBiZWZvcmUgY29tcGxldGlvbiBvZiB0aGUgcHJldmlvdXMgbWVzc2FnZSBsZWF2ZXMgdGhlIFBPRAorCWluIGFuIHVuZGVmaW5lZCBzdGF0ZS4gVGhlIGR1bXAgcmVxdWVzdCB3aWxsIGJlIHNlbnQgd2hlbiB0aGUgZWNob2VkCisJY29tbWFuZHMgYXJlIHJlY2VpdmVkLgorCSopIFRoaXMgbWV0aG9kIGZhaWxzIGlmIGEgcGFyYW0gY2hhbmdlIG1lc3NhZ2UgaXMgImNob3BwZWQiIGFmdGVyIHRoZSBmaXJzdAorCWJ5dGUuCisqLwordm9pZCBwb2RfbWlkaV9wb3N0cHJvY2VzcyhzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuZ3RoKQoreworCWludCBpOworCisJaWYgKCFwb2QtPm1pZGlfcG9zdHByb2Nlc3MpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworCQlpZiAoZGF0YVtpXSA9PSAoTElORTZfUFJPR1JBTV9DSEFOR0UgfCBMSU5FNl9DSEFOTkVMX0hPU1QpKSB7CisJCQlsaW5lNl9pbnZhbGlkYXRlX2N1cnJlbnQoJnBvZC0+ZHVtcHJlcSk7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICgoZGF0YVtpXSA9PSAoTElORTZfUEFSQU1fQ0hBTkdFIHwgTElORTZfQ0hBTk5FTF9IT1NUKSkgJiYgKGkgPCBsZW5ndGggLSAxKSkKKwkJCWlmICgoZGF0YVtpICsgMV0gPT0gUE9EX2FtcF9tb2RlbF9zZXR1cCkgfHwgKGRhdGFbaSArIDFdID09IFBPRF9lZmZlY3Rfc2V0dXApKSB7CisJCQkJbGluZTZfaW52YWxpZGF0ZV9jdXJyZW50KCZwb2QtPmR1bXByZXEpOworCQkJCWJyZWFrOworCQkJfQorCX0KK30KKworLyoKKwlTZW5kIGNoYW5uZWwgbnVtYmVyIChpLmUuLCBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgc291bmQpLgorKi8KK3N0YXRpYyB2b2lkIHBvZF9zZW5kX2NoYW5uZWwoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgaW50IHZhbHVlKQoreworCWxpbmU2X2ludmFsaWRhdGVfY3VycmVudCgmcG9kLT5kdW1wcmVxKTsKKworCWlmIChsaW5lNl9zZW5kX3Byb2dyYW0oJnBvZC0+bGluZTYsIHZhbHVlKSA9PSAwKQorCQlwb2QtPmNoYW5uZWxfbnVtID0gdmFsdWU7CisJZWxzZQorCQlsaW5lNl9kdW1wX2ZpbmlzaGVkKCZwb2QtPmR1bXByZXEpOworfQorCisvKgorCVRyYW5zbWl0IFBPRHh0IFBybyBjb250cm9sIHBhcmFtZXRlci4KKyovCit2b2lkIHBvZF90cmFuc21pdF9wYXJhbWV0ZXIoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgaW50IHBhcmFtLCBpbnQgdmFsdWUpCit7CisJaWYgKGxpbmU2X3RyYW5zbWl0X3BhcmFtZXRlcigmcG9kLT5saW5lNiwgcGFyYW0sIHZhbHVlKSA9PSAwKQorCQlwb2Rfc3RvcmVfcGFyYW1ldGVyKHBvZCwgcGFyYW0sIHZhbHVlKTsKKworCWlmICgocGFyYW0gPT0gUE9EX2FtcF9tb2RlbF9zZXR1cCkgfHwgKHBhcmFtID09IFBPRF9lZmZlY3Rfc2V0dXApKSAgLyogdGhlc2UgYWxzbyBhZmZlY3Qgb3RoZXIgc2V0dGluZ3MgKi8KKwkJbGluZTZfaW52YWxpZGF0ZV9jdXJyZW50KCZwb2QtPmR1bXByZXEpOworfQorCisvKgorCVJlc29sdmUgdmFsdWUgdG8gbWVtb3J5IGxvY2F0aW9uLgorKi8KK3N0YXRpYyB2b2lkIHBvZF9yZXNvbHZlKGNvbnN0IGNoYXIgKmJ1Ziwgc2hvcnQgYmxvY2swLCBzaG9ydCBibG9jazEsIHVuc2lnbmVkIGNoYXIgKmxvY2F0aW9uKQoreworCWludCB2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCXNob3J0IGJsb2NrID0gKHZhbHVlIDwgMHg0MCkgPyBibG9jazAgOiBibG9jazE7CisJdmFsdWUgJj0gMHgzZjsKKwlsb2NhdGlvblswXSA9IGJsb2NrID4+IDc7CisJbG9jYXRpb25bMV0gPSB2YWx1ZSB8IChibG9jayAmIDB4N2YpOworfQorCisvKgorCVNlbmQgY29tbWFuZCB0byBzdG9yZSBjaGFubmVsL2VmZmVjdHMgc2V0dXAvYW1wIHNldHVwIHRvIFBPRHh0IFByby4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2VuZF9zdG9yZV9jb21tYW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIHNob3J0IGJsb2NrMCwgc2hvcnQgYmxvY2sxKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCWludCBzaXplID0gMyArIHNpemVvZihwb2QtPnByb2dfZGF0YV9idWYpOworCWNoYXIgKnN5c2V4ID0gcG9kX2FsbG9jX3N5c2V4X2J1ZmZlcihwb2QsIFBPRF9TWVNFWF9TVE9SRSwgc2l6ZSk7CisJaWYgKCFzeXNleCkKKwkJcmV0dXJuIDA7CisKKwlzeXNleFtTWVNFWF9EQVRBX09GU10gPSA1OyAgLyogc2VlIHBvZF9kdW1wKCkgKi8KKwlwb2RfcmVzb2x2ZShidWYsIGJsb2NrMCwgYmxvY2sxLCBzeXNleCArIFNZU0VYX0RBVEFfT0ZTICsgMSk7CisJbWVtY3B5KHN5c2V4ICsgU1lTRVhfREFUQV9PRlMgKyAzLCAmcG9kLT5wcm9nX2RhdGFfYnVmLCBzaXplb2YocG9kLT5wcm9nX2RhdGFfYnVmKSk7CisKKwlsaW5lNl9zZW5kX3N5c2V4X21lc3NhZ2UoJnBvZC0+bGluZTYsIHN5c2V4LCBzaXplKTsKKwlrZnJlZShzeXNleCk7CisJLyogbmVlZHMgc29tZSBkZWxheSBoZXJlIG9uIEFNRDY0IHBsYXRmb3JtICovCisJcmV0dXJuIGNvdW50OworfQorCisvKgorCVNlbmQgY29tbWFuZCB0byByZXRyaWV2ZSBjaGFubmVsL2VmZmVjdHMgc2V0dXAvYW1wIHNldHVwIHRvIFBPRHh0IFByby4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2VuZF9yZXRyaWV2ZV9jb21tYW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsIHNob3J0IGJsb2NrMCwgc2hvcnQgYmxvY2sxKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbnQgc2l6ZSA9IDQ7CisJY2hhciAqc3lzZXggPSBwb2RfYWxsb2Nfc3lzZXhfYnVmZmVyKHBvZCwgUE9EX1NZU0VYX0RVTVBNRU0sIHNpemUpOworCisJaWYgKCFzeXNleCkKKwkJcmV0dXJuIDA7CisKKwlwb2RfcmVzb2x2ZShidWYsIGJsb2NrMCwgYmxvY2sxLCBzeXNleCArIFNZU0VYX0RBVEFfT0ZTKTsKKwlzeXNleFtTWVNFWF9EQVRBX09GUyArIDJdID0gMDsKKwlzeXNleFtTWVNFWF9EQVRBX09GUyArIDNdID0gMDsKKwlsaW5lNl9kdW1wX3N0YXJ0ZWQoJnBvZC0+ZHVtcHJlcSwgUE9EX0RVTVBfTUVNT1JZKTsKKworCWlmIChsaW5lNl9zZW5kX3N5c2V4X21lc3NhZ2UoJnBvZC0+bGluZTYsIHN5c2V4LCBzaXplKSA8IHNpemUpCisJCWxpbmU2X2R1bXBfZmluaXNoZWQoJnBvZC0+ZHVtcHJlcSk7CisKKwlrZnJlZShzeXNleCk7CisJLyogbmVlZHMgc29tZSBkZWxheSBoZXJlIG9uIEFNRDY0IHBsYXRmb3JtICovCisJcmV0dXJuIGNvdW50OworfQorCisvKgorCUdlbmVyaWMgZ2V0IG5hbWUgZnVuY3Rpb24uCisqLworc3RhdGljIHNzaXplX3QgZ2V0X25hbWVfZ2VuZXJpYyhzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCBjb25zdCBjaGFyICpzdHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgbGVuZ3RoID0gMDsKKwljb25zdCBjaGFyICpwMTsKKwljaGFyICpwMjsKKwljaGFyICpsYXN0X25vbl9zcGFjZSA9IGJ1ZjsKKworCWludCByZXR2YWwgPSBsaW5lNl93YWl0X2R1bXAoJnBvZC0+ZHVtcHJlcSwgMCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisKKwlmb3IgKHAxID0gc3RyLCBwMiA9IGJ1ZjsgKnAxOyArK3AxLCArK3AyKSB7CisJCSpwMiA9ICpwMTsKKwkJaWYgKCpwMiAhPSAnICcpCisJCQlsYXN0X25vbl9zcGFjZSA9IHAyOworCQlpZiAoKytsZW5ndGggPT0gUE9EX05BTUVfTEVOR1RIKQorCQkJYnJlYWs7CisJfQorCisJKihsYXN0X25vbl9zcGFjZSArIDEpID0gJ1xuJzsKKwlyZXR1cm4gbGFzdF9ub25fc3BhY2UgLSBidWYgKyAyOworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJjaGFubmVsIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX2dldF9jaGFubmVsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcG9kLT5jaGFubmVsX251bSk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJjaGFubmVsIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NldF9jaGFubmVsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IHZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJcG9kX3NlbmRfY2hhbm5lbChwb2QsIHZhbHVlKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gIm5hbWUiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXJldHVybiBnZXRfbmFtZV9nZW5lcmljKHBvZCwgcG9kLT5wcm9nX2RhdGEuaGVhZGVyICsgUE9EX05BTUVfT0ZGU0VULCBidWYpOworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJuYW1lIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX2dldF9uYW1lX2J1ZihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJcmV0dXJuIGdldF9uYW1lX2dlbmVyaWMocG9kLCBwb2QtPnByb2dfZGF0YV9idWYuaGVhZGVyICsgUE9EX05BTUVfT0ZGU0VULCBidWYpOworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJkdW1wIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX2dldF9kdW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbnQgcmV0dmFsID0gbGluZTZfd2FpdF9kdW1wKCZwb2QtPmR1bXByZXEsIDApOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCW1lbWNweShidWYsICZwb2QtPnByb2dfZGF0YSwgc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKSk7CisJcmV0dXJuIHNpemVvZihwb2QtPnByb2dfZGF0YSk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJkdW1wIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NldF9kdW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCisJaWYgKGNvdW50ICE9IHNpemVvZihwb2QtPnByb2dfZGF0YSkpIHsKKwkJZGV2X2Vycihwb2QtPmxpbmU2LmlmY2RldiwKKwkJCQkJCSJkYXRhIGJsb2NrIG11c3QgYmUgZXhhY3RseSAlZCBieXRlc1xuIiwKKwkJCQkJCShpbnQpc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBvZF9kdW1wKHBvZCwgYnVmKTsKKwlyZXR1cm4gc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKTsKK30KKworLyoKKwlSZXF1ZXN0IHN5c3RlbSBwYXJhbWV0ZXIuCisJQHBhcmFtIHR1bmVyIG5vbi16ZXJvLCBpZiBjb2RlIHJlZmVycyB0byBhIHR1bmVyIHBhcmFtZXRlcgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfc3lzdGVtX3BhcmFtKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIGNoYXIgKmJ1ZiwgaW50IGNvZGUsIHN0cnVjdCBWYWx1ZVdhaXQgKnBhcmFtLCBpbnQgdHVuZXIsIGludCBzaWduKQoreworCWNoYXIgKnN5c2V4OworCWludCB2YWx1ZTsKKwlzdGF0aWMgY29uc3QgaW50IHNpemUgPSAxOworCWludCByZXR2YWwgPSAwOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJaWYgKCgocG9kLT5wcm9nX2RhdGEuY29udHJvbFtQT0RfdHVuZXJdICYgMHg0MCkgPT0gMCkgJiYgdHVuZXIpCisJCXJldHVybiAtRU5PREVWOworCisJLyogc2VuZCB2YWx1ZSByZXF1ZXN0IHRvIHR1bmVyOiAqLworCXBhcmFtLT52YWx1ZSA9IFBPRF9zeXN0ZW1faW52YWxpZDsKKwlzeXNleCA9IHBvZF9hbGxvY19zeXNleF9idWZmZXIocG9kLCBQT0RfU1lTRVhfU1lTVEVNUkVRLCBzaXplKTsKKwlpZiAoIXN5c2V4KQorCQlyZXR1cm4gMDsKKwlzeXNleFtTWVNFWF9EQVRBX09GU10gPSBjb2RlOworCWxpbmU2X3NlbmRfc3lzZXhfbWVzc2FnZSgmcG9kLT5saW5lNiwgc3lzZXgsIHNpemUpOworCWtmcmVlKHN5c2V4KTsKKworCS8qIHdhaXQgZm9yIHR1bmVyIHRvIHJlc3BvbmQ6ICovCisJYWRkX3dhaXRfcXVldWUoJnBhcmFtLT53YWl0LCAmd2FpdCk7CisJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisKKwl3aGlsZSAocGFyYW0tPnZhbHVlID09IFBPRF9zeXN0ZW1faW52YWxpZCkgeworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCXNjaGVkdWxlKCk7CisJfQorCisJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnBhcmFtLT53YWl0LCAmd2FpdCk7CisKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXZhbHVlID0gc2lnbiA/IChpbnQpKHNpZ25lZCBzaG9ydClwYXJhbS0+dmFsdWUgOiAoaW50KSh1bnNpZ25lZCBzaG9ydClwYXJhbS0+dmFsdWU7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbHVlKTsKK30KKworLyoKKwlTZW5kIHN5c3RlbSBwYXJhbWV0ZXIuCisJQHBhcmFtIHR1bmVyIG5vbi16ZXJvLCBpZiBjb2RlIHJlZmVycyB0byBhIHR1bmVyIHBhcmFtZXRlcgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfc3lzdGVtX3BhcmFtKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkgICAgaW50IGNvdW50LCBpbnQgY29kZSwgdW5zaWduZWQgc2hvcnQgbWFzaywKKwkJCQkgICAgaW50IHR1bmVyKQoreworCWNoYXIgKnN5c2V4OworCXN0YXRpYyBjb25zdCBpbnQgc2l6ZSA9IDU7CisJdW5zaWduZWQgc2hvcnQgdmFsdWU7CisKKwlpZiAoKChwb2QtPnByb2dfZGF0YS5jb250cm9sW1BPRF90dW5lcl0gJiAweDQwKSA9PSAwKSAmJiB0dW5lcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzZW5kIHZhbHVlIHRvIHR1bmVyOiAqLworCXN5c2V4ID0gcG9kX2FsbG9jX3N5c2V4X2J1ZmZlcihwb2QsIFBPRF9TWVNFWF9TWVNURU0sIHNpemUpOworCWlmICghc3lzZXgpCisJCXJldHVybiAwOworCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCkgJiBtYXNrOworCXN5c2V4W1NZU0VYX0RBVEFfT0ZTXSA9IGNvZGU7CisJc3lzZXhbU1lTRVhfREFUQV9PRlMgKyAxXSA9ICh2YWx1ZSA+PiAxMikgJiAweDBmOworCXN5c2V4W1NZU0VYX0RBVEFfT0ZTICsgMl0gPSAodmFsdWUgPj4gIDgpICYgMHgwZjsKKwlzeXNleFtTWVNFWF9EQVRBX09GUyArIDNdID0gKHZhbHVlID4+ICA0KSAmIDB4MGY7CisJc3lzZXhbU1lTRVhfREFUQV9PRlMgKyA0XSA9ICh2YWx1ZSAgICAgICkgJiAweDBmOworCWxpbmU2X3NlbmRfc3lzZXhfbWVzc2FnZSgmcG9kLT5saW5lNiwgc3lzZXgsIHNpemUpOworCWtmcmVlKHN5c2V4KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gImR1bXBfYnVmIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX2dldF9kdW1wX2J1ZihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJaW50IHJldHZhbCA9IGxpbmU2X3dhaXRfZHVtcCgmcG9kLT5kdW1wcmVxLCAwKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwltZW1jcHkoYnVmLCAmcG9kLT5wcm9nX2RhdGFfYnVmLCBzaXplb2YocG9kLT5wcm9nX2RhdGFfYnVmKSk7CisJcmV0dXJuIHNpemVvZihwb2QtPnByb2dfZGF0YV9idWYpOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAiZHVtcF9idWYiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X2R1bXBfYnVmKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlpZiAoY291bnQgIT0gc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKSkgeworCQlkZXZfZXJyKHBvZC0+bGluZTYuaWZjZGV2LAorCQkJCQkJImRhdGEgYmxvY2sgbXVzdCBiZSBleGFjdGx5ICVkIGJ5dGVzXG4iLAorCQkJCQkJKGludClzaXplb2YocG9kLT5wcm9nX2RhdGEpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWVtY3B5KCZwb2QtPnByb2dfZGF0YV9idWYsIGJ1Ziwgc2l6ZW9mKHBvZC0+cHJvZ19kYXRhKSk7CisJcmV0dXJuIHNpemVvZihwb2QtPnByb2dfZGF0YSk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJmaW5pc2giIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X2ZpbmlzaChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbnQgc2l6ZSA9IDA7CisJY2hhciAqc3lzZXggPSBwb2RfYWxsb2Nfc3lzZXhfYnVmZmVyKHBvZCwgUE9EX1NZU0VYX0ZJTklTSCwgc2l6ZSk7CisJaWYgKCFzeXNleCkKKwkJcmV0dXJuIDA7CisJbGluZTZfc2VuZF9zeXNleF9tZXNzYWdlKCZwb2QtPmxpbmU2LCBzeXNleCwgc2l6ZSk7CisJa2ZyZWUoc3lzZXgpOworCXJldHVybiBjb3VudDsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gInN0b3JlX2NoYW5uZWwiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X3N0b3JlX2NoYW5uZWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gcG9kX3NlbmRfc3RvcmVfY29tbWFuZChkZXYsIGJ1ZiwgY291bnQsIDB4MDAwMCwgMHgwMGMwKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gInN0b3JlX2VmZmVjdHNfc2V0dXAiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X3N0b3JlX2VmZmVjdHNfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHBvZF9zZW5kX3N0b3JlX2NvbW1hbmQoZGV2LCBidWYsIGNvdW50LCAweDAwODAsIDB4MDA4MCk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJzdG9yZV9hbXBfc2V0dXAiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X3N0b3JlX2FtcF9zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gcG9kX3NlbmRfc3RvcmVfY29tbWFuZChkZXYsIGJ1ZiwgY291bnQsIDB4MDA0MCwgMHgwMTAwKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gInJldHJpZXZlX2NoYW5uZWwiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X3JldHJpZXZlX2NoYW5uZWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHBvZF9zZW5kX3JldHJpZXZlX2NvbW1hbmQoZGV2LCBidWYsIGNvdW50LCAweDAwMDAsIDB4MDBjMCk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJyZXRyaWV2ZV9lZmZlY3RzX3NldHVwIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NldF9yZXRyaWV2ZV9lZmZlY3RzX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBwb2Rfc2VuZF9yZXRyaWV2ZV9jb21tYW5kKGRldiwgYnVmLCBjb3VudCwgMHgwMDgwLCAweDAwODApOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAicmV0cmlldmVfYW1wX3NldHVwIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX3NldF9yZXRyaWV2ZV9hbXBfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBwb2Rfc2VuZF9yZXRyaWV2ZV9jb21tYW5kKGRldiwgYnVmLCBjb3VudCwgMHgwMDQwLCAweDAxMDApOworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJkaXJ0eSIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHBvZF9nZXRfZGlydHkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlidWZbMF0gPSBwb2QtPmRpcnR5ID8gJzEnIDogJzAnOworCWJ1ZlsxXSA9ICdcbic7CisJcmV0dXJuIDI7Cit9CisKKy8qCisJInJlYWQiIHJlcXVlc3Qgb24gIm1pZGlfcG9zdHByb2Nlc3MiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2RfZ2V0X21pZGlfcG9zdHByb2Nlc3Moc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcG9kLT5taWRpX3Bvc3Rwcm9jZXNzKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gIm1pZGlfcG9zdHByb2Nlc3MiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCBwb2Rfc2V0X21pZGlfcG9zdHByb2Nlc3Moc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWludCB2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCXBvZC0+bWlkaV9wb3N0cHJvY2VzcyA9IHZhbHVlID8gMSA6IDA7CisJcmV0dXJuIGNvdW50OworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJzZXJpYWxfbnVtYmVyIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX2dldF9zZXJpYWxfbnVtYmVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwb2QtPnNlcmlhbF9udW1iZXIpOworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJmaXJtd2FyZV92ZXJzaW9uIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX2dldF9maXJtd2FyZV92ZXJzaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJTAyZFxuIiwgcG9kLT5maXJtd2FyZV92ZXJzaW9uIC8gMTAwLAorCQkgICAgICAgcG9kLT5maXJtd2FyZV92ZXJzaW9uICUgMTAwKTsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAiZGV2aWNlX2lkIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX2dldF9kZXZpY2VfaWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcG9kLT5kZXZpY2VfaWQpOworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJjbGlwIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgcG9kX3dhaXRfZm9yX2NsaXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlpbnQgZXJyID0gMDsKKwlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlwb2QtPmNsaXBwaW5nLnZhbHVlID0gMDsKKwlhZGRfd2FpdF9xdWV1ZSgmcG9kLT5jbGlwcGluZy53YWl0LCAmd2FpdCk7CisJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisKKwl3aGlsZSAocG9kLT5jbGlwcGluZy52YWx1ZSA9PSAwKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJZXJyID0gLUVSRVNUQVJUU1lTOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJc2NoZWR1bGUoKTsKKwl9CisKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmcG9kLT5jbGlwcGluZy53YWl0LCAmd2FpdCk7CisJcmV0dXJuIGVycjsKK30KKworI2RlZmluZSBQT0RfR0VUX1NZU1RFTV9QQVJBTShjb2RlLCB0dW5lciwgc2lnbikgXAorc3RhdGljIHNzaXplX3QgcG9kX2dldF8gIyMgY29kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIFwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSBcCit7IFwKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOyBcCisJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsgXAorCXJldHVybiBwb2RfZ2V0X3N5c3RlbV9wYXJhbShwb2QsIGJ1ZiwgUE9EXyAjIyBjb2RlLCAmcG9kLT5jb2RlLCBcCisJCQkJICAgIHR1bmVyLCBzaWduKTsgXAorfQorCisjZGVmaW5lIFBPRF9HRVRfU0VUX1NZU1RFTV9QQVJBTShjb2RlLCBtYXNrLCB0dW5lciwgc2lnbikgXAorUE9EX0dFVF9TWVNURU1fUEFSQU0oY29kZSwgdHVuZXIsIHNpZ24pIFwKK3N0YXRpYyBzc2l6ZV90IHBvZF9zZXRfICMjIGNvZGUoc3RydWN0IGRldmljZSAqZGV2LCBcCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkgXAoreyBcCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsgXAorCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7IFwKKwlyZXR1cm4gcG9kX3NldF9zeXN0ZW1fcGFyYW0ocG9kLCBidWYsIGNvdW50LCBQT0RfICMjIGNvZGUsIG1hc2ssIFwKKwkJCQkgICAgdHVuZXIpOyBcCit9CisKK1BPRF9HRVRfU0VUX1NZU1RFTV9QQVJBTShtb25pdG9yX2xldmVsLCAweGZmZmYsIDAsIDApOworUE9EX0dFVF9TRVRfU1lTVEVNX1BBUkFNKHJvdXRpbmcsIDB4MDAwMywgMCwgMCk7CitQT0RfR0VUX1NFVF9TWVNURU1fUEFSQU0odHVuZXJfbXV0ZSwgMHgwMDAxLCAxLCAwKTsKK1BPRF9HRVRfU0VUX1NZU1RFTV9QQVJBTSh0dW5lcl9mcmVxLCAweGZmZmYsIDEsIDApOworUE9EX0dFVF9TWVNURU1fUEFSQU0odHVuZXJfbm90ZSwgMSwgMSk7CitQT0RfR0VUX1NZU1RFTV9QQVJBTSh0dW5lcl9waXRjaCwgMSwgMSk7CisKKyN1bmRlZiBHRVRfU0VUX1NZU1RFTV9QQVJBTQorI3VuZGVmIEdFVF9TWVNURU1fUEFSQU0KKworLyogUE9EIHNwZWNpYWwgZmlsZXM6ICovCitzdGF0aWMgREVWSUNFX0FUVFIoY2hhbm5lbCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfY2hhbm5lbCwgcG9kX3NldF9jaGFubmVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjbGlwLCBTX0lSVUdPLCBwb2Rfd2FpdF9mb3JfY2xpcCwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihkZXZpY2VfaWQsIFNfSVJVR08sIHBvZF9nZXRfZGV2aWNlX2lkLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGRpcnR5LCBTX0lSVUdPLCBwb2RfZ2V0X2RpcnR5LCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGR1bXAsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2R1bXAsIHBvZF9zZXRfZHVtcCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZHVtcF9idWYsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X2R1bXBfYnVmLCBwb2Rfc2V0X2R1bXBfYnVmKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaW5pc2gsIFNfSVdVR08sIGxpbmU2X25vcF9yZWFkLCBwb2Rfc2V0X2ZpbmlzaCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZmlybXdhcmVfdmVyc2lvbiwgU19JUlVHTywgcG9kX2dldF9maXJtd2FyZV92ZXJzaW9uLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKG1pZGlfcG9zdHByb2Nlc3MsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X21pZGlfcG9zdHByb2Nlc3MsIHBvZF9zZXRfbWlkaV9wb3N0cHJvY2Vzcyk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9uaXRvcl9sZXZlbCwgU19JV1VHTyB8IFNfSVJVR08sIHBvZF9nZXRfbW9uaXRvcl9sZXZlbCwgcG9kX3NldF9tb25pdG9yX2xldmVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBwb2RfZ2V0X25hbWUsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobmFtZV9idWYsIFNfSVJVR08sIHBvZF9nZXRfbmFtZV9idWYsIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocmV0cmlldmVfYW1wX3NldHVwLCBTX0lXVUdPLCBsaW5lNl9ub3BfcmVhZCwgcG9kX3NldF9yZXRyaWV2ZV9hbXBfc2V0dXApOworc3RhdGljIERFVklDRV9BVFRSKHJldHJpZXZlX2NoYW5uZWwsIFNfSVdVR08sIGxpbmU2X25vcF9yZWFkLCBwb2Rfc2V0X3JldHJpZXZlX2NoYW5uZWwpOworc3RhdGljIERFVklDRV9BVFRSKHJldHJpZXZlX2VmZmVjdHNfc2V0dXAsIFNfSVdVR08sIGxpbmU2X25vcF9yZWFkLCBwb2Rfc2V0X3JldHJpZXZlX2VmZmVjdHNfc2V0dXApOworc3RhdGljIERFVklDRV9BVFRSKHJvdXRpbmcsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3JvdXRpbmcsIHBvZF9zZXRfcm91dGluZyk7CitzdGF0aWMgREVWSUNFX0FUVFIoc2VyaWFsX251bWJlciwgU19JUlVHTywgcG9kX2dldF9zZXJpYWxfbnVtYmVyLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHN0b3JlX2FtcF9zZXR1cCwgU19JV1VHTywgbGluZTZfbm9wX3JlYWQsIHBvZF9zZXRfc3RvcmVfYW1wX3NldHVwKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdG9yZV9jaGFubmVsLCBTX0lXVUdPLCBsaW5lNl9ub3BfcmVhZCwgcG9kX3NldF9zdG9yZV9jaGFubmVsKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzdG9yZV9lZmZlY3RzX3NldHVwLCBTX0lXVUdPLCBsaW5lNl9ub3BfcmVhZCwgcG9kX3NldF9zdG9yZV9lZmZlY3RzX3NldHVwKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0dW5lcl9mcmVxLCBTX0lXVUdPIHwgU19JUlVHTywgcG9kX2dldF90dW5lcl9mcmVxLCBwb2Rfc2V0X3R1bmVyX2ZyZXEpOworc3RhdGljIERFVklDRV9BVFRSKHR1bmVyX211dGUsIFNfSVdVR08gfCBTX0lSVUdPLCBwb2RfZ2V0X3R1bmVyX211dGUsIHBvZF9zZXRfdHVuZXJfbXV0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIodHVuZXJfbm90ZSwgU19JUlVHTywgcG9kX2dldF90dW5lcl9ub3RlLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKHR1bmVyX3BpdGNoLCBTX0lSVUdPLCBwb2RfZ2V0X3R1bmVyX3BpdGNoLCBsaW5lNl9ub3Bfd3JpdGUpOworCisjaWYgQ1JFQVRFX1JBV19GSUxFCitzdGF0aWMgREVWSUNFX0FUVFIocmF3LCBTX0lXVUdPLCBsaW5lNl9ub3BfcmVhZCwgbGluZTZfc2V0X3Jhdyk7CisjZW5kaWYKKworLyoKKwlQT0QgZGVzdHJ1Y3Rvci4KKyovCitzdGF0aWMgdm9pZCBwb2RfZGVzdHJ1Y3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2OworCisJaWYgKHBvZCA9PSBOVUxMKQorCQlyZXR1cm47CisJbGluZTYgPSAmcG9kLT5saW5lNjsKKwlpZiAobGluZTYgPT0gTlVMTCkKKwkJcmV0dXJuOworCWxpbmU2X2NsZWFudXBfYXVkaW8obGluZTYpOworCisJLyogZnJlZSBkdW1wIHJlcXVlc3QgZGF0YTogKi8KKwlsaW5lNl9kdW1wcmVxX2Rlc3RydWN0KCZwb2QtPmR1bXByZXEpOworCisJa2ZyZWUocG9kLT5idWZmZXJfdmVyc2lvbnJlcSk7Cit9CisKKy8qCisJQ3JlYXRlIHN5c2ZzIGVudHJpZXMuCisqLworc3RhdGljIGludCBwb2RfY3JlYXRlX2ZpbGVzMihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY2hhbm5lbCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY2xpcCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGV2aWNlX2lkKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kaXJ0eSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZHVtcCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZHVtcF9idWYpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2ZpbmlzaCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWlkaV9wb3N0cHJvY2VzcykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9uaXRvcl9sZXZlbCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbmFtZSkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbmFtZV9idWYpKTsKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JldHJpZXZlX2FtcF9zZXR1cCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV0cmlldmVfY2hhbm5lbCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV0cmlldmVfZWZmZWN0c19zZXR1cCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcm91dGluZykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc2VyaWFsX251bWJlcikpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc3RvcmVfYW1wX3NldHVwKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9yZV9jaGFubmVsKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9yZV9lZmZlY3RzX3NldHVwKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5lcl9mcmVxKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5lcl9tdXRlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5lcl9ub3RlKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90dW5lcl9waXRjaCkpOworCisjaWYgQ1JFQVRFX1JBV19GSUxFCisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yYXcpKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKy8qCisJIEluaXQgUE9EIGRldmljZS4KKyovCitpbnQgcG9kX2luaXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gJnBvZC0+bGluZTY7CisKKwlpZiAoKGludGVyZmFjZSA9PSBOVUxMKSB8fCAocG9kID09IE5VTEwpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBvZC0+Y2hhbm5lbF9udW0gPSAyNTU7CisKKwkvKiBpbml0aWFsaXplIHdhaXQgcXVldWVzOiAqLworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvZC0+bW9uaXRvcl9sZXZlbC53YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb2QtPnJvdXRpbmcud2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9kLT50dW5lcl9tdXRlLndhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBvZC0+dHVuZXJfZnJlcS53YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb2QtPnR1bmVyX25vdGUud2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9kLT50dW5lcl9waXRjaC53YWl0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb2QtPmNsaXBwaW5nLndhaXQpOworCisJbWVtc2V0KHBvZC0+cGFyYW1fZGlydHksIDB4ZmYsIHNpemVvZihwb2QtPnBhcmFtX2RpcnR5KSk7CisKKwkvKiBpbml0aWFsaXplIFVTQiBidWZmZXJzOiAqLworCWVyciA9IGxpbmU2X2R1bXByZXFfaW5pdCgmcG9kLT5kdW1wcmVxLCBwb2RfcmVxdWVzdF9jaGFubmVsLAorCQkJCSBzaXplb2YocG9kX3JlcXVlc3RfY2hhbm5lbCkpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXBvZF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwb2QtPmJ1ZmZlcl92ZXJzaW9ucmVxID0ga21hbGxvYyhzaXplb2YocG9kX3JlcXVlc3RfdmVyc2lvbiksCisJCQkJCSBHRlBfS0VSTkVMKTsKKworCWlmIChwb2QtPmJ1ZmZlcl92ZXJzaW9ucmVxID09IE5VTEwpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcG9kX2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1lbWNweShwb2QtPmJ1ZmZlcl92ZXJzaW9ucmVxLCBwb2RfcmVxdWVzdF92ZXJzaW9uLAorCSAgICAgICBzaXplb2YocG9kX3JlcXVlc3RfdmVyc2lvbikpOworCisJLyogY3JlYXRlIHN5c2ZzIGVudHJpZXM6ICovCisJZXJyID0gcG9kX2NyZWF0ZV9maWxlczIoJmludGVyZmFjZS0+ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwb2RfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBpbml0aWFsaXplIGF1ZGlvIHN5c3RlbTogKi8KKwllcnIgPSBsaW5lNl9pbml0X2F1ZGlvKGxpbmU2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwb2RfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBpbml0aWFsaXplIE1JREkgc3Vic3lzdGVtOiAqLworCWVyciA9IGxpbmU2X2luaXRfbWlkaShsaW5lNik7CisJaWYgKGVyciA8IDApIHsKKwkJcG9kX2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogaW5pdGlhbGl6ZSBQQ00gc3Vic3lzdGVtOiAqLworCWVyciA9IGxpbmU2X2luaXRfcGNtKGxpbmU2LCAmcG9kX3BjbV9wcm9wZXJ0aWVzKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwb2RfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiByZWdpc3RlciBhdWRpbyBzeXN0ZW06ICovCisJZXJyID0gbGluZTZfcmVnaXN0ZXJfYXVkaW8obGluZTYpOworCWlmIChlcnIgPCAwKSB7CisJCXBvZF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlmIChwb2QtPmxpbmU2LnByb3BlcnRpZXMtPmNhcGFiaWxpdGllcyAmIExJTkU2X0JJVF9DT05UUk9MKSB7CisJCS8qIHF1ZXJ5IHNvbWUgZGF0YTogKi8KKwkJbGluZTZfc3RhcnR1cF9kZWxheWVkKCZwb2QtPmR1bXByZXEsIFBPRF9TVEFSVFVQX0RFTEFZLAorCQkJCSAgICAgIHBvZF9zdGFydHVwX3RpbWVvdXQsIHBvZCk7CisJCWxpbmU2X3JlYWRfc2VyaWFsX251bWJlcigmcG9kLT5saW5lNiwgJnBvZC0+c2VyaWFsX251bWJlcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisJUE9EIGRldmljZSBkaXNjb25uZWN0ZWQuCisqLwordm9pZCBwb2RfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2Q7CisKKwlpZiAoaW50ZXJmYWNlID09IE5VTEwpCisJCXJldHVybjsKKwlwb2QgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlpZiAocG9kICE9IE5VTEwpIHsKKwkJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gcG9kLT5saW5lNi5saW5lNnBjbTsKKwkJc3RydWN0IGRldmljZSAqZGV2ID0gJmludGVyZmFjZS0+ZGV2OworCisJCWlmIChsaW5lNnBjbSAhPSBOVUxMKSB7CisJCQl1bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19vdXRfdXJicyhsaW5lNnBjbSk7CisJCQl1bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19pbl91cmJzKGxpbmU2cGNtKTsKKwkJfQorCisJCWlmIChkZXYgIT0gTlVMTCkgeworCQkJLyogcmVtb3ZlIHN5c2ZzIGVudHJpZXM6ICovCisJCQlpZiAocG9kLT52ZXJzaW9ucmVxX29rKQorCQkJCXBvZF9yZW1vdmVfZmlsZXMocG9kLT5maXJtd2FyZV92ZXJzaW9uLCBwb2QtPmxpbmU2LnByb3BlcnRpZXMtPmRldmljZV9iaXQsIGRldik7CisKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9jaGFubmVsKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9jbGlwKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXZpY2VfaWQpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpcnR5KTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kdW1wKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kdW1wX2J1Zik7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmluaXNoKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9maXJtd2FyZV92ZXJzaW9uKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9taWRpX3Bvc3Rwcm9jZXNzKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9tb25pdG9yX2xldmVsKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9uYW1lKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9uYW1lX2J1Zik7CisJCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmV0cmlldmVfYW1wX3NldHVwKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXRyaWV2ZV9jaGFubmVsKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZXRyaWV2ZV9lZmZlY3RzX3NldHVwKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yb3V0aW5nKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zZXJpYWxfbnVtYmVyKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zdG9yZV9hbXBfc2V0dXApOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b3JlX2NoYW5uZWwpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0b3JlX2VmZmVjdHNfc2V0dXApOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmVyX2ZyZXEpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmVyX211dGUpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmVyX25vdGUpOworCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3R1bmVyX3BpdGNoKTsKKworI2lmIENSRUFURV9SQVdfRklMRQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Jhdyk7CisjZW5kaWYKKwkJfQorCX0KKworCXBvZF9kZXN0cnVjdChpbnRlcmZhY2UpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZC5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTFjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcG9kLmgKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIFBPRF9ICisjZGVmaW5lIFBPRF9ICisKKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisKKyNpbmNsdWRlICJkdW1wcmVxdWVzdC5oIgorCisKKy8qCisJUE9EeHQgTGl2ZSBpbnRlcmZhY2VzCisqLworI2RlZmluZSBQT0RYVExJVkVfSU5URVJGQUNFX1BPRCAgICAwCisjZGVmaW5lIFBPRFhUTElWRV9JTlRFUkZBQ0VfVkFSSUFYIDEKKworLyoKKwlMb2NhdGUgbmFtZSBpbiBiaW5hcnkgcHJvZ3JhbSBkdW1wCisqLworI2RlZmluZQlQT0RfTkFNRV9PRkZTRVQgMAorI2RlZmluZQlQT0RfTkFNRV9MRU5HVEggMTYKKworLyoKKwlPdGhlciBjb25zdGFudHMKKyovCisjZGVmaW5lIFBPRF9DT05UUk9MX1NJWkUgMHg4MAorI2RlZmluZSBQT0RfQlVGU0laRV9EVU1QUkVRIDcKKyNkZWZpbmUgUE9EX1NUQVJUVVBfREVMQVkgMworCisKKy8qKgorCSBEYXRhIHN0cnVjdHVyZSBmb3IgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSByZXF1ZXN0ZWQgZXhwbGljaXRseS4KKwkgVGhpcyBpcyB0aGUgY2FzZSBmb3Igc3lzdGVtIGFuZCB0dW5lciBzZXR0aW5ncy4KKyovCitzdHJ1Y3QgVmFsdWVXYWl0IHsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfTsKKworLyoqCisJIEJpbmFyeSBQb2RYVCBQcm8gcHJvZ3JhbSBkdW1wCisqLworc3RydWN0IHBvZF9wcm9ncmFtIHsKKwkvKioKKwkJIEhlYWRlciBpbmZvcm1hdGlvbiAoaW5jbHVkaW5nIHByb2dyYW0gbmFtZSkuCisJKi8KKwl1bnNpZ25lZCBjaGFyIGhlYWRlclsweDIwXTsKKworCS8qKgorCQkgUHJvZ3JhbSBwYXJhbWV0ZXJzLgorCSovCisJdW5zaWduZWQgY2hhciBjb250cm9sW1BPRF9DT05UUk9MX1NJWkVdOworfTsKKworc3RydWN0IHVzYl9saW5lNl9wb2QgeworCS8qKgorCQkgR2VuZXJpYyBMaW5lNiBVU0IgZGF0YS4KKwkqLworCXN0cnVjdCB1c2JfbGluZTYgbGluZTY7CisKKwkvKioKKwkJIER1bXAgcmVxdWVzdCBzdHJ1Y3R1cmUuCisJKi8KKwlzdHJ1Y3QgbGluZTZfZHVtcF9yZXF1ZXN0IGR1bXByZXE7CisKKwkvKioKKwkJIEN1cnJlbnQgcHJvZ3JhbSBudW1iZXIuCisJKi8KKwl1bnNpZ25lZCBjaGFyIGNoYW5uZWxfbnVtOworCisJLyoqCisJCSBDdXJyZW50IHByb2dyYW0gc2V0dGluZ3MuCisJKi8KKwlzdHJ1Y3QgcG9kX3Byb2dyYW0gcHJvZ19kYXRhOworCisJLyoqCisJCSBCdWZmZXIgZm9yIGRhdGEgcmV0cmlldmVkIGZyb20gb3IgdG8gYmUgc3RvcmVkIG9uIFBPRHh0IFByby4KKwkqLworCXN0cnVjdCBwb2RfcHJvZ3JhbSBwcm9nX2RhdGFfYnVmOworCisJLyoqCisJCSBCdWZmZXIgZm9yIHJlcXVlc3RpbmcgdmVyc2lvbiBudW1iZXIuCisJKi8KKwl1bnNpZ25lZCBjaGFyICpidWZmZXJfdmVyc2lvbnJlcTsKKworCS8qKgorCQkgVHVuZXIgbXV0ZSBtb2RlLgorCSovCisJc3RydWN0IFZhbHVlV2FpdCB0dW5lcl9tdXRlOworCisJLyoqCisJCSBUdW5lciBiYXNlIGZyZXF1ZW5jeSAodHlwaWNhbGx5IDQ0MEh6KS4KKwkqLworCXN0cnVjdCBWYWx1ZVdhaXQgdHVuZXJfZnJlcTsKKworCS8qKgorCQkgTm90ZSByZWNlaXZlZCBmcm9tIHR1bmVyLgorCSovCisJc3RydWN0IFZhbHVlV2FpdCB0dW5lcl9ub3RlOworCisJLyoqCisJCSBQaXRjaCB2YWx1ZSByZWNlaXZlZCBmcm9tIHR1bmVyLgorCSovCisJc3RydWN0IFZhbHVlV2FpdCB0dW5lcl9waXRjaDsKKworCS8qKgorCQkgSW5zdHJ1bWVudCBtb25pdG9yIGxldmVsLgorCSovCisJc3RydWN0IFZhbHVlV2FpdCBtb25pdG9yX2xldmVsOworCisJLyoqCisJCSBBdWRpbyByb3V0aW5nIG1vZGUuCisJCSAwOiBzZW5kIHByb2Nlc3NlZCBndWl0YXIKKwkJIDE6IHNlbmQgY2xlYW4gZ3VpdGFyCisJCSAyOiBzZW5kIGNsZWFuIGd1aXRhciByZS1hbXAgcGxheWJhY2sKKwkJIDM6IHNlbmQgcmUtYW1wIHBsYXliYWNrCisJKi8KKwlzdHJ1Y3QgVmFsdWVXYWl0IHJvdXRpbmc7CisKKwkvKioKKwkJIFdhaXQgZm9yIGF1ZGlvIGNsaXBwaW5nIGV2ZW50LgorCSovCisJc3RydWN0IFZhbHVlV2FpdCBjbGlwcGluZzsKKworCS8qKgorCQkgQm90dG9tLWhhbGYgZm9yIGNyZWF0aW9uIG9mIHN5c2ZzIHNwZWNpYWwgZmlsZXMuCisJKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3JlYXRlX2ZpbGVzX3dvcms7CisKKwkvKioKKwkJIERpcnR5IGZsYWdzIGZvciBhY2Nlc3MgdG8gcGFyYW1ldGVyIGRhdGEuCisJKi8KKwl1bnNpZ25lZCBsb25nIHBhcmFtX2RpcnR5W1BPRF9DT05UUk9MX1NJWkUgLyBzaXplb2YodW5zaWduZWQgbG9uZyldOworCisJLyoqCisJCSBTb21lIGF0b21pYyBmbGFncy4KKwkqLworCXVuc2lnbmVkIGxvbmcgYXRvbWljX2ZsYWdzOworCisJLyoqCisJCSBDb3VudGVyIGZvciBzdGFydHVwIHByb2Nlc3MuCisJKi8KKwlpbnQgc3RhcnR1cF9jb3VudDsKKworCS8qKgorCQkgU2VyaWFsIG51bWJlciBvZiBkZXZpY2UuCisJKi8KKwlpbnQgc2VyaWFsX251bWJlcjsKKworCS8qKgorCQkgRmlybXdhcmUgdmVyc2lvbiAoeCAxMDApLgorCSovCisJaW50IGZpcm13YXJlX3ZlcnNpb247CisKKwkvKioKKwkJIERldmljZSBJRC4KKwkqLworCWludCBkZXZpY2VfaWQ7CisKKwkvKioKKwkJIEZsYWcgdG8gaW5kaWNhdGUgbW9kaWZpY2F0aW9uIG9mIGN1cnJlbnQgcHJvZ3JhbSBzZXR0aW5ncy4KKwkqLworCWNoYXIgZGlydHk7CisKKwkvKioKKwkJIEZsYWcgaWYgaW5pdGlhbCBmaXJtd2FyZSB2ZXJzaW9uIHJlcXVlc3QgaGFzIGJlZW4gc3VjY2Vzc2Z1bC4KKwkqLworCWNoYXIgdmVyc2lvbnJlcV9vazsKKworCS8qKgorCQkgRmxhZyB0byBlbmFibGUgTUlESSBwb3N0cHJvY2Vzc2luZy4KKwkqLworCWNoYXIgbWlkaV9wb3N0cHJvY2VzczsKK307CisKKworZXh0ZXJuIHZvaWQgcG9kX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitleHRlcm4gaW50IHBvZF9pbml0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QpOworZXh0ZXJuIHZvaWQgcG9kX21pZGlfcG9zdHByb2Nlc3Moc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwKKwkJCQkgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbmd0aCk7CitleHRlcm4gdm9pZCBwb2RfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QpOworZXh0ZXJuIHZvaWQgcG9kX3JlY2VpdmVfcGFyYW1ldGVyKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIGludCBwYXJhbSk7CitleHRlcm4gdm9pZCBwb2RfdHJhbnNtaXRfcGFyYW1ldGVyKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIGludCBwYXJhbSwKKwkJCQkgICBpbnQgdmFsdWUpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3JldmlzaW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcmV2aXNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmEwYTg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3JldmlzaW9uLmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIERSSVZFUl9SRVZJU0lPTgorLyogY3VycmVudCBzdWJ2ZXJzaW9uIHJldmlzaW9uICovCisjZGVmaW5lIERSSVZFUl9SRVZJU0lPTiAiIChyZXZpc2lvbiA1MjkpIgorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdG9uZXBvcnQuYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi90b25lcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYTEyMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdG9uZXBvcnQuYwpAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjguMAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICBFbWlsIE15aHJtYW4gKGVtaWwubXlocm1hbkBnbWFpbC5jb20pCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlICJkcml2ZXIuaCIKKworI2luY2x1ZGUgImF1ZGlvLmgiCisjaW5jbHVkZSAiY2FwdHVyZS5oIgorI2luY2x1ZGUgInBsYXliYWNrLmgiCisjaW5jbHVkZSAidG9uZXBvcnQuaCIKKworCitzdGF0aWMgaW50IHRvbmVwb3J0X3NlbmRfY21kKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsIGludCBjbWQxLCBpbnQgY21kMik7CisKKworc3RhdGljIHN0cnVjdCBzbmRfcmF0ZGVuIHRvbmVwb3J0X3JhdGRlbiA9IHsKKwkubnVtX21pbiA9IDQ0MTAwLAorCS5udW1fbWF4ID0gNDQxMDAsCisJLm51bV9zdGVwID0gMSwKKwkuZGVuID0gMQorfTsKKworc3RhdGljIHN0cnVjdCBsaW5lNl9wY21fcHJvcGVydGllcyB0b25lcG9ydF9wY21fcHJvcGVydGllcyA9IHsKKyAgLnNuZF9saW5lNl9wbGF5YmFja19odyA9IHsKKwkJLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCksCisJCS5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJCS5yYXRlcyA9ICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfS05PVCwKKwkJLnJhdGVfbWluID0gICAgICAgICA0NDEwMCwKKwkJLnJhdGVfbWF4ID0gICAgICAgICA0NDEwMCwKKwkJLmNoYW5uZWxzX21pbiA9ICAgICAyLAorCQkuY2hhbm5lbHNfbWF4ID0gICAgIDIsCisJCS5idWZmZXJfYnl0ZXNfbWF4ID0gNjAwMDAsCisJCS5wZXJpb2RfYnl0ZXNfbWluID0gMTgwICogNCwKKwkJLnBlcmlvZF9ieXRlc19tYXggPSA4MTkyLAorCQkucGVyaW9kc19taW4gPSAgICAgIDEsCisJCS5wZXJpb2RzX21heCA9ICAgICAgMTAyNAorCX0sCisgIC5zbmRfbGluZTZfY2FwdHVyZV9odyA9IHsKKwkJLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJCQkgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCQkJIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJCQkJCSBTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUKSwKKwkJLmZvcm1hdHMgPSAgICAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkJLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV9LTk9ULAorCQkucmF0ZV9taW4gPSAgICAgICAgIDQ0MTAwLAorCQkucmF0ZV9tYXggPSAgICAgICAgIDQ0MTAwLAorCQkuY2hhbm5lbHNfbWluID0gICAgIDIsCisJCS5jaGFubmVsc19tYXggPSAgICAgMiwKKwkJLmJ1ZmZlcl9ieXRlc19tYXggPSA2MDAwMCwKKwkJLnBlcmlvZF9ieXRlc19taW4gPSAxODggKiA0LAorCQkucGVyaW9kX2J5dGVzX21heCA9IDgxOTIsCisJCS5wZXJpb2RzX21pbiA9ICAgICAgMSwKKwkJLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0CisJfSwKKwkuc25kX2xpbmU2X3JhdGVzID0geworCQkubnJhdHMgPSAxLAorCQkucmF0cyA9ICZ0b25lcG9ydF9yYXRkZW4KKwl9LAorCS5ieXRlc19wZXJfZnJhbWUgPSA0Cit9OworCisvKgorCUZvciB0aGUgbGVkIG9uIEd1aXRhcnBvcnQuCisJQnJpZ2h0bmVzcyBnb2VzIGZyb20gMHgwMCB0byAweDI2LiBTZXQgYSB2YWx1ZSBhYm92ZSB0aGlzIHRvIGhhdmUgbGVkCisJYmxpbmsuCisJKHZvaWQgY21kXzB4MDIoYnl0ZSByZWQsIGJ5dGUgZ3JlZW4pCisqLworc3RhdGljIGludCBsZWRfcmVkID0gMHgwMDsKK3N0YXRpYyBpbnQgbGVkX2dyZWVuID0gMHgyNjsKKworc3RhdGljIHZvaWQgdG9uZXBvcnRfdXBkYXRlX2xlZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKKwlzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICp0cCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKKworCWlmICghdHApCisJCXJldHVybjsKKworCWxpbmU2ID0gJnRwLT5saW5lNjsKKwlpZiAobGluZTYpCisJCXRvbmVwb3J0X3NlbmRfY21kKGxpbmU2LT51c2JkZXYsIChsZWRfcmVkIDw8IDgpIHwgMHgwMDAyLAorCQkJCSAgbGVkX2dyZWVuKTsKK30KKworc3RhdGljIHNzaXplX3QgdG9uZXBvcnRfc2V0X2xlZF9yZWQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJY2hhciAqYzsKKwlsZWRfcmVkID0gc2ltcGxlX3N0cnRvbChidWYsICZjLCAxMCk7CisJdG9uZXBvcnRfdXBkYXRlX2xlZChkZXYpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgdG9uZXBvcnRfc2V0X2xlZF9ncmVlbihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJY2hhciAqYzsKKwlsZWRfZ3JlZW4gPSBzaW1wbGVfc3RydG9sKGJ1ZiwgJmMsIDEwKTsKKwl0b25lcG9ydF91cGRhdGVfbGVkKGRldik7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobGVkX3JlZCwgU19JV1VHTyB8IFNfSVJVR08sIGxpbmU2X25vcF9yZWFkLCB0b25lcG9ydF9zZXRfbGVkX3JlZCk7CitzdGF0aWMgREVWSUNFX0FUVFIobGVkX2dyZWVuLCBTX0lXVUdPIHwgU19JUlVHTywgbGluZTZfbm9wX3JlYWQsIHRvbmVwb3J0X3NldF9sZWRfZ3JlZW4pOworCisKK3N0YXRpYyBpbnQgdG9uZXBvcnRfc2VuZF9jbWQoc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiwgaW50IGNtZDEsIGludCBjbWQyKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codXNiZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiZGV2LCAwKSwgMHg2NywKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCwKKwkJCSAgICAgIGNtZDEsIGNtZDIsIE5VTEwsIDAsIExJTkU2X1RJTUVPVVQgKiBIWik7CisKKwlpZiAocmV0IDwgMCkgeworCQllcnIoInNlbmQgZmFpbGVkIChlcnJvciAlZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisJVG9uZXBvcnQgZGVzdHJ1Y3Rvci4KKyovCitzdGF0aWMgdm9pZCB0b25lcG9ydF9kZXN0cnVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRvbmVwb3J0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2OworCisJaWYgKHRvbmVwb3J0ID09IE5VTEwpCisJCXJldHVybjsKKwlsaW5lNiA9ICZ0b25lcG9ydC0+bGluZTY7CisJaWYgKGxpbmU2ID09IE5VTEwpCisJCXJldHVybjsKKwlsaW5lNl9jbGVhbnVwX2F1ZGlvKGxpbmU2KTsKK30KKworLyoKKwkgSW5pdCBUb25lcG9ydCBkZXZpY2UuCisqLworaW50IHRvbmVwb3J0X2luaXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICBzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICp0b25lcG9ydCkKK3sKKwlpbnQgZXJyLCB0aWNrczsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9ICZ0b25lcG9ydC0+bGluZTY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKworCWlmICgoaW50ZXJmYWNlID09IE5VTEwpIHx8ICh0b25lcG9ydCA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBpbml0aWFsaXplIGF1ZGlvIHN5c3RlbTogKi8KKwllcnIgPSBsaW5lNl9pbml0X2F1ZGlvKGxpbmU2KTsKKwlpZiAoZXJyIDwgMCkgeworCQl0b25lcG9ydF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIGluaXRpYWxpemUgUENNIHN1YnN5c3RlbTogKi8KKwllcnIgPSBsaW5lNl9pbml0X3BjbShsaW5lNiwgJnRvbmVwb3J0X3BjbV9wcm9wZXJ0aWVzKTsKKwlpZiAoZXJyIDwgMCkgeworCQl0b25lcG9ydF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIHJlZ2lzdGVyIGF1ZGlvIHN5c3RlbTogKi8KKwllcnIgPSBsaW5lNl9yZWdpc3Rlcl9hdWRpbyhsaW5lNik7CisJaWYgKGVyciA8IDApIHsKKwkJdG9uZXBvcnRfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl1c2JkZXYgPSBsaW5lNi0+dXNiZGV2OworCWxpbmU2X3JlYWRfc2VyaWFsX251bWJlcihsaW5lNiwgJnRvbmVwb3J0LT5zZXJpYWxfbnVtYmVyKTsKKwlsaW5lNl9yZWFkX2RhdGEobGluZTYsIDB4ODBjMiwgJnRvbmVwb3J0LT5maXJtd2FyZV92ZXJzaW9uLCAxKTsKKworCS8qIHN5bmMgdGltZSBvbiBkZXZpY2Ugd2l0aCBob3N0OiAqLworCXRpY2tzID0gKGludClnZXRfc2Vjb25kcygpOworCWxpbmU2X3dyaXRlX2RhdGEobGluZTYsIDB4ODBjNiwgJnRpY2tzLCA0KTsKKworCS8qCisJc2VlbXMgdG8gd29yayB3aXRob3V0IHRoZSBmaXJzdCB0d28uLi4KKwkqLworCS8qIHRvbmVwb3J0X3NlbmRfY21kKHVzYmRldiwgMHgwMjAxLCAweDAwMDIpOyAqLworCS8qIHRvbmVwb3J0X3NlbmRfY21kKHVzYmRldiwgMHgwODAxLCAweDAwMDApOyAqLworCS8qIG9ubHkgb25lIHRoYXQgd29ya3MgZm9yIG1lOyBvbiBHUCwgVFAgbWlnaHQgYmUgZGlmZmVyZW50PyAqLworCXRvbmVwb3J0X3NlbmRfY21kKHVzYmRldiwgMHgwMzAxLCAweDAwMDApOworCisJaWYgKHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgIT0gTElORTZfREVWSURfR1VJVEFSUE9SVCkgeworCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2xlZF9yZWQpKTsKKwkJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9sZWRfZ3JlZW4pKTsKKwkJdG9uZXBvcnRfdXBkYXRlX2xlZCgmdXNiZGV2LT5kZXYpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorCVRvbmVwb3J0IGRldmljZSBkaXNjb25uZWN0ZWQuCisqLwordm9pZCB0b25lcG9ydF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQ7CisKKwlpZiAoaW50ZXJmYWNlID09IE5VTEwpCisJCXJldHVybjsKKwl0b25lcG9ydCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCWlmICh0b25lcG9ydC0+bGluZTYudXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCAhPSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUKSB7CisJCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9sZWRfcmVkKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2xlZF9ncmVlbik7CisJfQorCisJaWYgKHRvbmVwb3J0ICE9IE5VTEwpIHsKKwkJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gdG9uZXBvcnQtPmxpbmU2LmxpbmU2cGNtOworCisJCWlmIChsaW5lNnBjbSAhPSBOVUxMKSB7CisJCQl1bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19vdXRfdXJicyhsaW5lNnBjbSk7CisJCQl1bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19pbl91cmJzKGxpbmU2cGNtKTsKKwkJfQorCX0KKworCXRvbmVwb3J0X2Rlc3RydWN0KGludGVyZmFjZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdG9uZXBvcnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi90b25lcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZGM1OGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdG9uZXBvcnQuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBUT05FUE9SVF9ICisjZGVmaW5lIFRPTkVQT1JUX0gKKworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisKKworc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCB7CisJLyoqCisJCSBHZW5lcmljIExpbmU2IFVTQiBkYXRhLgorCSovCisJc3RydWN0IHVzYl9saW5lNiBsaW5lNjsKKworCS8qKgorCQkgU2VyaWFsIG51bWJlciBvZiBkZXZpY2UuCisJKi8KKwlpbnQgc2VyaWFsX251bWJlcjsKKworCS8qKgorCQkgRmlybXdhcmUgdmVyc2lvbiAoeCAxMDApLgorCSovCisJaW50IGZpcm13YXJlX3ZlcnNpb247Cit9OworCisKK2V4dGVybiB2b2lkIHRvbmVwb3J0X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitleHRlcm4gaW50IHRvbmVwb3J0X2luaXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCSBzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICp0b25lcG9ydCk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdXNiZGVmcy5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3VzYmRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzhmMzFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3VzYmRlZnMuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOC4wCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBVU0JERUZTX0gKKyNkZWZpbmUgVVNCREVGU19ICisKKworI2RlZmluZSBMSU5FNl9WRU5ET1JfSUQgIDB4MGU0MQorCisjZGVmaW5lIFVTQl9JTlRFUlZBTFNfUEVSX1NFQ09ORCAxMDAwCisKKy8qCisJRGV2aWNlIGlkcy4KKyovCisjZGVmaW5lIExJTkU2X0RFVklEX0JBU1NQT0RYVCAgICAgMHg0MjUwCisjZGVmaW5lIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkUgMHg0NjQyCisjZGVmaW5lIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTyAgMHg0MjUyCisjZGVmaW5lIExJTkU2X0RFVklEX0dVSVRBUlBPUlQgICAgMHg0NzUwCisjZGVmaW5lIExJTkU2X0RFVklEX1BPQ0tFVFBPRCAgICAgMHg1MDUxCisjZGVmaW5lIExJTkU2X0RFVklEX1BPRFgzICAgICAgICAgMHg0MTRhCisjZGVmaW5lIExJTkU2X0RFVklEX1BPRFgzTElWRSAgICAgMHg0MTRiCisjZGVmaW5lIExJTkU2X0RFVklEX1BPRFhUICAgICAgICAgMHg1MDQ0CisjZGVmaW5lIExJTkU2X0RFVklEX1BPRFhUTElWRSAgICAgMHg0NjUwCisjZGVmaW5lIExJTkU2X0RFVklEX1BPRFhUUFJPICAgICAgMHg1MDUwCisjZGVmaW5lIExJTkU2X0RFVklEX1RPTkVQT1JUX0dYICAgMHg0MTQ3CisjZGVmaW5lIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMSAgMHg0MTQxCisjZGVmaW5lIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMiAgMHg0MTQyCisjZGVmaW5lIExJTkU2X0RFVklEX1ZBUklBWCAgICAgICAgMHg1MzRkCisKKyNkZWZpbmUgTElORTZfQklUX0JBU1NQT0RYVCAgICAgICAoMSA8PCAwKQorI2RlZmluZSBMSU5FNl9CSVRfQkFTU1BPRFhUTElWRSAgICgxIDw8IDEpCisjZGVmaW5lIExJTkU2X0JJVF9CQVNTUE9EWFRQUk8gICAgKDEgPDwgMikKKyNkZWZpbmUgTElORTZfQklUX0dVSVRBUlBPUlQgICAgICAoMSA8PCAzKQorI2RlZmluZSBMSU5FNl9CSVRfUE9DS0VUUE9EICAgICAgICgxIDw8IDQpCisjZGVmaW5lIExJTkU2X0JJVF9QT0RYMyAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgTElORTZfQklUX1BPRFgzTElWRSAgICAgICAoMSA8PCA2KQorI2RlZmluZSBMSU5FNl9CSVRfUE9EWFQgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIExJTkU2X0JJVF9QT0RYVExJVkUgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgTElORTZfQklUX1BPRFhUUFJPICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBMSU5FNl9CSVRfVE9ORVBPUlRfR1ggICAgICgxIDw8IDEwKQorI2RlZmluZSBMSU5FNl9CSVRfVE9ORVBPUlRfVVgxICAgICgxIDw8IDExKQorI2RlZmluZSBMSU5FNl9CSVRfVE9ORVBPUlRfVVgyICAgICgxIDw8IDEyKQorI2RlZmluZSBMSU5FNl9CSVRfVkFSSUFYICAgICAgICAgICgxIDw8IDEzKQorCisjZGVmaW5lIExJTkU2X0JJVFNfUFJPCQkoTElORTZfQklUX0JBU1NQT0RYVFBSTyB8IFwKKwkJCQkgTElORTZfQklUX1BPRFhUUFJPKQorI2RlZmluZSBMSU5FNl9CSVRTX0xJVkUJCShMSU5FNl9CSVRfQkFTU1BPRFhUTElWRSB8IFwKKwkJCQkgTElORTZfQklUX1BPRFhUTElWRSB8IFwKKwkJCQkgTElORTZfQklUX1BPRFgzTElWRSkKKyNkZWZpbmUgTElORTZfQklUU19QT0RYVEFMTAkoTElORTZfQklUX1BPRFhUIHwgXAorCQkJCSBMSU5FNl9CSVRfUE9EWFRMSVZFIHwgXAorCQkJCSBMSU5FNl9CSVRfUE9EWFRQUk8pCisjZGVmaW5lIExJTkU2X0JJVFNfQkFTU1BPRFhUQUxMCShMSU5FNl9CSVRfQkFTU1BPRFhUIHwgXAorCQkJCSBMSU5FNl9CSVRfQkFTU1BPRFhUTElWRSB8IFwKKwkJCQkgTElORTZfQklUX0JBU1NQT0RYVFBSTykKKworLyogZGV2aWNlIHN1cHBvcnRzIHNldHRpbmdzIHBhcmFtZXRlciB2aWEgVVNCICovCisjZGVmaW5lIExJTkU2X0JJVF9DT05UUk9MCSgxIDw8IDApCisvKiBkZXZpY2Ugc3VwcG9ydHMgUENNIGlucHV0L291dHB1dCB2aWEgVVNCICovCisjZGVmaW5lIExJTkU2X0JJVF9QQ00JCSgxIDw8IDEpCisjZGVmaW5lIExJTkU2X0JJVF9DT05UUk9MX1BDTQkoTElORTZfQklUX0NPTlRST0wgfCBMSU5FNl9CSVRfUENNKQorCisjZGVmaW5lIExJTkU2X0ZBTExCQUNLX0lOVEVSVkFMCQkxMAorI2RlZmluZSBMSU5FNl9GQUxMQkFDS19NQVhQQUNLRVRTSVpFCTE2CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3ZhcmlheC5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3ZhcmlheC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDk2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdmFyaWF4LmMKQEAgLTAsMCArMSw1NDYgQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSAiZHJpdmVyLmgiCisKKyNpbmNsdWRlICJhdWRpby5oIgorI2luY2x1ZGUgImNvbnRyb2wuaCIKKyNpbmNsdWRlICJ2YXJpYXguaCIKKworCisjZGVmaW5lIFZBUklBWF9TWVNFWF9DT0RFIDcKKyNkZWZpbmUgVkFSSUFYX1NZU0VYX1BBUkFNIDB4M2IKKyNkZWZpbmUgVkFSSUFYX1NZU0VYX0FDVElWQVRFIDB4MmEKKyNkZWZpbmUgVkFSSUFYX01PREVMX0hFQURFUl9MRU5HVEggNworI2RlZmluZSBWQVJJQVhfTU9ERUxfTUVTU0FHRV9MRU5HVEggMTk5CisjZGVmaW5lIFZBUklBWF9PRkZTRVRfQUNUSVZBVEUgNworCisKK3N0YXRpYyBjb25zdCBjaGFyIHZhcmlheF9hY3RpdmF0ZVtdID0geworCTB4ZjAsIDB4MDAsIDB4MDEsIDB4MGMsIDB4MDcsIDB4MDAsIDB4MmEsIDB4MDEsCisJMHhmNworfTsKK3N0YXRpYyBjb25zdCBjaGFyIHZhcmlheF9yZXF1ZXN0X2JhbmtbXSA9IHsKKwkweGYwLCAweDAwLCAweDAxLCAweDBjLCAweDA3LCAweDAwLCAweDZkLCAweGY3Cit9Oworc3RhdGljIGNvbnN0IGNoYXIgdmFyaWF4X3JlcXVlc3RfbW9kZWwxW10gPSB7CisJMHhmMCwgMHgwMCwgMHgwMSwgMHgwYywgMHgwNywgMHgwMCwgMHgzYywgMHgwMCwKKwkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDA1LCAweDAzLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcKK307CitzdGF0aWMgY29uc3QgY2hhciB2YXJpYXhfcmVxdWVzdF9tb2RlbDJbXSA9IHsKKwkweGYwLCAweDAwLCAweDAxLCAweDBjLCAweDA3LCAweDAwLCAweDNjLCAweDAwLAorCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDcsIDB4MDMsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHhmNworfTsKKworCisvKgorCURlY29kZSBkYXRhIHRyYW5zbWl0dGVkIGJ5IHdvcmtiZW5jaC4KKyovCitzdGF0aWMgdm9pZCB2YXJpYXhfZGVjb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJhd19kYXRhLCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJICBpbnQgcmF3X3NpemUpCit7CisJZm9yICg7IHJhd19zaXplID4gMDsgcmF3X3NpemUgLT0gNikgeworCQlkYXRhWzJdID0gcmF3X2RhdGFbMF0gfCAocmF3X2RhdGFbMV0gPDwgNCk7CisJCWRhdGFbMV0gPSByYXdfZGF0YVsyXSB8IChyYXdfZGF0YVszXSA8PCA0KTsKKwkJZGF0YVswXSA9IHJhd19kYXRhWzRdIHwgKHJhd19kYXRhWzVdIDw8IDQpOworCQlyYXdfZGF0YSArPSA2OworCQlkYXRhICs9IDM7CisJfQorfQorCitzdGF0aWMgdm9pZCB2YXJpYXhfYWN0aXZhdGVfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICopYXJnOworCXZhcmlheC0+YnVmZmVyX2FjdGl2YXRlW1ZBUklBWF9PRkZTRVRfQUNUSVZBVEVdID0gMTsKKwlsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jKCZ2YXJpYXgtPmxpbmU2LCB2YXJpYXgtPmJ1ZmZlcl9hY3RpdmF0ZSwKKwkJCQkgICAgIHNpemVvZih2YXJpYXhfYWN0aXZhdGUpKTsKK30KKworLyoKKwlTZW5kIGFuIGFzeW5jaHJvbm91cyBhY3RpdmF0aW9uIHJlcXVlc3QgYWZ0ZXIgYSBnaXZlbiBpbnRlcnZhbC4KKyovCitzdGF0aWMgdm9pZCB2YXJpYXhfYWN0aXZhdGVfZGVsYXllZChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4LAorCQkJCSAgICBpbnQgc2Vjb25kcykKK3sKKwl2YXJpYXgtPmFjdGl2YXRlX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgc2Vjb25kcyAqIEhaOworCXZhcmlheC0+YWN0aXZhdGVfdGltZXIuZnVuY3Rpb24gPSB2YXJpYXhfYWN0aXZhdGVfdGltZW91dDsKKwl2YXJpYXgtPmFjdGl2YXRlX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyl2YXJpYXg7CisJYWRkX3RpbWVyKCZ2YXJpYXgtPmFjdGl2YXRlX3RpbWVyKTsKK30KKworc3RhdGljIHZvaWQgdmFyaWF4X3N0YXJ0dXBfdGltZW91dCh1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICopYXJnOworCisJaWYgKHZhcmlheC0+ZHVtcHJlcS5vaykKKwkJcmV0dXJuOworCisJbGluZTZfZHVtcF9yZXF1ZXN0X2FzeW5jKCZ2YXJpYXgtPmR1bXByZXEsICZ2YXJpYXgtPmxpbmU2LCAwKTsKKwlsaW5lNl9zdGFydHVwX2RlbGF5ZWQoJnZhcmlheC0+ZHVtcHJlcSwgMSwgdmFyaWF4X3N0YXJ0dXBfdGltZW91dCwKKwkJCSAgICAgIHZhcmlheCk7Cit9CisKKy8qCisJUHJvY2VzcyBhIGNvbXBsZXRlbHkgcmVjZWl2ZWQgbWVzc2FnZS4KKyovCit2b2lkIHZhcmlheF9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpidWYgPSB2YXJpYXgtPmxpbmU2LmJ1ZmZlcl9tZXNzYWdlOworCisJc3dpdGNoIChidWZbMF0pIHsKKwljYXNlIExJTkU2X1BBUkFNX0NIQU5HRSB8IExJTkU2X0NIQU5ORUxfSE9TVDoKKwkJc3dpdGNoIChidWZbMV0pIHsKKwkJY2FzZSBWQVJJQVhNSURJX3ZvbHVtZToKKwkJCXZhcmlheC0+dm9sdW1lID0gYnVmWzJdOworCQkJYnJlYWs7CisKKwkJY2FzZSBWQVJJQVhNSURJX3RvbmU6CisJCQl2YXJpYXgtPnRvbmUgPSBidWZbMl07CisJCX0KKworCQlicmVhazsKKworCWNhc2UgTElORTZfUFJPR1JBTV9DSEFOR0UgfCBMSU5FNl9DSEFOTkVMX0RFVklDRToKKwljYXNlIExJTkU2X1BST0dSQU1fQ0hBTkdFIHwgTElORTZfQ0hBTk5FTF9IT1NUOgorCQl2YXJpYXgtPm1vZGVsID0gYnVmWzFdOworCQlsaW5lNl9kdW1wX3JlcXVlc3RfYXN5bmMoJnZhcmlheC0+ZHVtcHJlcSwgJnZhcmlheC0+bGluZTYsIDApOworCQlicmVhazsKKworCWNhc2UgTElORTZfUkVTRVQ6CisJCWRldl9pbmZvKHZhcmlheC0+bGluZTYuaWZjZGV2LCAiVkFSSUFYIHJlc2V0XG4iKTsKKwkJdmFyaWF4X2FjdGl2YXRlX2RlbGF5ZWQodmFyaWF4LCBWQVJJQVhfQUNUSVZBVEVfREVMQVkpOworCQlicmVhazsKKworCWNhc2UgTElORTZfU1lTRVhfQkVHSU46CisJCWlmIChtZW1jbXAoYnVmICsgMSwgdmFyaWF4X3JlcXVlc3RfbW9kZWwxICsgMSwKKwkJCSAgIFZBUklBWF9NT0RFTF9IRUFERVJfTEVOR1RIIC0gMSkgPT0gMCkgeworCQkJaWYgKHZhcmlheC0+bGluZTYubWVzc2FnZV9sZW5ndGggPT0KKwkJCSAgICBWQVJJQVhfTU9ERUxfTUVTU0FHRV9MRU5HVEgpIHsKKwkJCQlzd2l0Y2ggKHZhcmlheC0+ZHVtcHJlcS5pbl9wcm9ncmVzcykgeworCQkJCWNhc2UgVkFSSUFYX0RVTVBfUEFTUzE6CisJCQkJCXZhcmlheF9kZWNvZGUoYnVmICsgVkFSSUFYX01PREVMX0hFQURFUl9MRU5HVEgsICh1bnNpZ25lZCBjaGFyICopJnZhcmlheC0+bW9kZWxfZGF0YSwKKwkJCQkJCQkJCQkJCShzaXplb2YodmFyaWF4LT5tb2RlbF9kYXRhLm5hbWUpICsgc2l6ZW9mKHZhcmlheC0+bW9kZWxfZGF0YS5jb250cm9sKSAvIDIpICogMik7CisJCQkJCWxpbmU2X2R1bXBfcmVxdWVzdF9hc3luYygmdmFyaWF4LT5kdW1wcmVxLCAmdmFyaWF4LT5saW5lNiwgMSk7CisJCQkJCWxpbmU2X2R1bXBfc3RhcnRlZCgmdmFyaWF4LT5kdW1wcmVxLCBWQVJJQVhfRFVNUF9QQVNTMik7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBWQVJJQVhfRFVNUF9QQVNTMjoKKwkJCQkJLyogbW9kZWwgbmFtZSBpcyB0cmFuc21pdHRlZCB0d2ljZSwgc28gc2tpcCBpdCBoZXJlOiAqLworCQkJCQl2YXJpYXhfZGVjb2RlKGJ1ZiArIFZBUklBWF9NT0RFTF9IRUFERVJfTEVOR1RILAorCQkJCQkJICAgICAgKHVuc2lnbmVkIGNoYXIgKikmdmFyaWF4LT5tb2RlbF9kYXRhLmNvbnRyb2wgKyBzaXplb2YodmFyaWF4LT5tb2RlbF9kYXRhLmNvbnRyb2wpIC8gMiwKKwkJCQkJCSAgICAgIHNpemVvZih2YXJpYXgtPm1vZGVsX2RhdGEuY29udHJvbCkgLyAyICogMik7CisJCQkJCXZhcmlheC0+ZHVtcHJlcS5vayA9IDE7CisJCQkJCWxpbmU2X2R1bXBfcmVxdWVzdF9hc3luYygmdmFyaWF4LT5kdW1wcmVxLCAmdmFyaWF4LT5saW5lNiwgMik7CisJCQkJCWxpbmU2X2R1bXBfc3RhcnRlZCgmdmFyaWF4LT5kdW1wcmVxLCBWQVJJQVhfRFVNUF9QQVNTMyk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlERUJVR19NRVNTQUdFUyhkZXZfZXJyKHZhcmlheC0+bGluZTYuaWZjZGV2LCAiaWxsZWdhbCBsZW5ndGggJWQgb2YgbW9kZWwgZGF0YVxuIiwgdmFyaWF4LT5saW5lNi5tZXNzYWdlX2xlbmd0aCkpOworCQkJCWxpbmU2X2R1bXBfZmluaXNoZWQoJnZhcmlheC0+ZHVtcHJlcSk7CisJCQl9CisJCX0gZWxzZSBpZiAobWVtY21wKGJ1ZiArIDEsIHZhcmlheF9yZXF1ZXN0X2JhbmsgKyAxLAorCQkJCXNpemVvZih2YXJpYXhfcmVxdWVzdF9iYW5rKSAtIDIpID09IDApIHsKKwkJCW1lbWNweSh2YXJpYXgtPmJhbmssCisJCQkgICAgICAgYnVmICsgc2l6ZW9mKHZhcmlheF9yZXF1ZXN0X2JhbmspIC0gMSwKKwkJCSAgICAgICBzaXplb2YodmFyaWF4LT5iYW5rKSk7CisJCQl2YXJpYXgtPmR1bXByZXEub2sgPSAxOworCQkJbGluZTZfZHVtcF9maW5pc2hlZCgmdmFyaWF4LT5kdW1wcmVxKTsKKwkJfQorCisJCWJyZWFrOworCisJY2FzZSBMSU5FNl9TWVNFWF9FTkQ6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJREVCVUdfTUVTU0FHRVMoZGV2X2Vycih2YXJpYXgtPmxpbmU2LmlmY2RldiwgIlZhcmlheDogdW5rbm93biBtZXNzYWdlICUwMlhcbiIsIGJ1ZlswXSkpOworCX0KK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAidm9sdW1lIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgdmFyaWF4X2dldF92b2x1bWUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhcmlheC0+dm9sdW1lKTsKK30KKworLyoKKwkid3JpdGUiIHJlcXVlc3Qgb24gInZvbHVtZSIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9zZXRfdm9sdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJaW50IHZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisKKwlpZiAobGluZTZfdHJhbnNtaXRfcGFyYW1ldGVyKCZ2YXJpYXgtPmxpbmU2LCBWQVJJQVhNSURJX3ZvbHVtZSwKKwkJCQkgICAgIHZhbHVlKSA9PSAwKQorCQl2YXJpYXgtPnZvbHVtZSA9IHZhbHVlOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJtb2RlbCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9nZXRfbW9kZWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFyaWF4LT5tb2RlbCk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJtb2RlbCIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9zZXRfbW9kZWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJaW50IHZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisKKwlpZiAobGluZTZfc2VuZF9wcm9ncmFtKCZ2YXJpYXgtPmxpbmU2LCB2YWx1ZSkgPT0gMCkKKwkJdmFyaWF4LT5tb2RlbCA9IHZhbHVlOworCisJcmV0dXJuIGNvdW50OworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJhY3RpdmUiIHNwZWNpYWwgZmlsZS4KKyovCitzdGF0aWMgc3NpemVfdCB2YXJpYXhfZ2V0X2FjdGl2ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFyaWF4LT5idWZmZXJfYWN0aXZhdGVbVkFSSUFYX09GRlNFVF9BQ1RJVkFURV0pOworfQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAiYWN0aXZlIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgdmFyaWF4X3NldF9hY3RpdmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEodG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlpbnQgdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKSA/IDEgOiAwOworCXZhcmlheC0+YnVmZmVyX2FjdGl2YXRlW1ZBUklBWF9PRkZTRVRfQUNUSVZBVEVdID0gdmFsdWU7CisJbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luYygmdmFyaWF4LT5saW5lNiwgdmFyaWF4LT5idWZmZXJfYWN0aXZhdGUsCisJCQkJICAgICBzaXplb2YodmFyaWF4X2FjdGl2YXRlKSk7CisJcmV0dXJuIGNvdW50OworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJ0b25lIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgdmFyaWF4X2dldF90b25lKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhcmlheC0+dG9uZSk7Cit9CisKKy8qCisJIndyaXRlIiByZXF1ZXN0IG9uICJ0b25lIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgdmFyaWF4X3NldF90b25lKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YSh0b191c2JfaW50ZXJmYWNlKGRldikpOworCWludCB2YWx1ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCisJaWYgKGxpbmU2X3RyYW5zbWl0X3BhcmFtZXRlcigmdmFyaWF4LT5saW5lNiwgVkFSSUFYTUlESV90b25lLAorCQkJCSAgICAgdmFsdWUpID09IDApCisJCXZhcmlheC0+dG9uZSA9IHZhbHVlOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBnZXRfc3RyaW5nKGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwlpbnQgaTsKKwltZW1jcHkoYnVmLCBkYXRhLCBsZW5ndGgpOworCisJZm9yIChpID0gbGVuZ3RoOyBpLS07KSB7CisJCWNoYXIgYyA9IGJ1ZltpXTsKKworCQlpZiAoKGMgIT0gMCkgJiYgKGMgIT0gJyAnKSkKKwkJCWJyZWFrOworCX0KKworCWJ1ZltpICsgMV0gPSAnXG4nOworCXJldHVybiBpICsgMjsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAibmFtZSIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9nZXRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YSh0b191c2JfaW50ZXJmYWNlKGRldikpOworCWxpbmU2X3dhaXRfZHVtcCgmdmFyaWF4LT5kdW1wcmVxLCAwKTsKKwlyZXR1cm4gZ2V0X3N0cmluZyhidWYsIHZhcmlheC0+bW9kZWxfZGF0YS5uYW1lLAorCQkJICBzaXplb2YodmFyaWF4LT5tb2RlbF9kYXRhLm5hbWUpKTsKK30KKworLyoKKwkicmVhZCIgcmVxdWVzdCBvbiAiYmFuayIgc3BlY2lhbCBmaWxlLgorKi8KK3N0YXRpYyBzc2l6ZV90IHZhcmlheF9nZXRfYmFuayhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YSh0b191c2JfaW50ZXJmYWNlKGRldikpOworCWxpbmU2X3dhaXRfZHVtcCgmdmFyaWF4LT5kdW1wcmVxLCAwKTsKKwlyZXR1cm4gZ2V0X3N0cmluZyhidWYsIHZhcmlheC0+YmFuaywgc2l6ZW9mKHZhcmlheC0+YmFuaykpOworfQorCisvKgorCSJyZWFkIiByZXF1ZXN0IG9uICJkdW1wIiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgdmFyaWF4X2dldF9kdW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSB1c2JfZ2V0X2ludGZkYXRhKHRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSBsaW5lNl93YWl0X2R1bXAoJnZhcmlheC0+ZHVtcHJlcSwgMCk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJbWVtY3B5KGJ1ZiwgJnZhcmlheC0+bW9kZWxfZGF0YS5jb250cm9sLAorCSAgICAgICBzaXplb2YodmFyaWF4LT5tb2RlbF9kYXRhLmNvbnRyb2wpKTsKKwlyZXR1cm4gc2l6ZW9mKHZhcmlheC0+bW9kZWxfZGF0YS5jb250cm9sKTsKK30KKworI2lmIENSRUFURV9SQVdfRklMRQorCisvKgorCSJ3cml0ZSIgcmVxdWVzdCBvbiAicmF3IiBzcGVjaWFsIGZpbGUuCisqLworc3RhdGljIHNzaXplX3QgdmFyaWF4X3NldF9yYXcyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YSh0b191c2JfaW50ZXJmYWNlKGRldikpOworCWludCBzaXplOworCWludCBpOworCWNoYXIgKnN5c2V4OworCisJY291bnQgLT0gY291bnQgJSAzOworCXNpemUgPSBjb3VudCAqIDI7CisJc3lzZXggPSB2YXJpYXhfYWxsb2Nfc3lzZXhfYnVmZmVyKHZhcmlheCwgVkFSSUFYX1NZU0VYX1BBUkFNLCBzaXplKTsKKworCWlmICghc3lzZXgpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpICs9IDMpIHsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqcDEgPSBidWYgKyBpOworCQljaGFyICpwMiA9IHN5c2V4ICsgU1lTRVhfREFUQV9PRlMgKyBpICogMjsKKwkJcDJbMF0gPSBwMVsyXSAmIDB4MGY7CisJCXAyWzFdID0gcDFbMl0gPj4gNDsKKwkJcDJbMl0gPSBwMVsxXSAmIDB4MGY7CisJCXAyWzNdID0gcDFbMV0gPj4gNDsKKwkJcDJbNF0gPSBwMVswXSAmIDB4MGY7CisJCXAyWzVdID0gcDFbMF0gPj4gNDsKKwl9CisKKwlsaW5lNl9zZW5kX3N5c2V4X21lc3NhZ2UoJnZhcmlheC0+bGluZTYsIHN5c2V4LCBzaXplKTsKKwlrZnJlZShzeXNleCk7CisJcmV0dXJuIGNvdW50OworfQorCisjZW5kaWYKKworLyogVmFyaWF4IHdvcmtiZW5jaCBzcGVjaWFsIGZpbGVzOiAqLworc3RhdGljIERFVklDRV9BVFRSKG1vZGVsLCBTX0lXVUdPIHwgU19JUlVHTywgdmFyaWF4X2dldF9tb2RlbCwgdmFyaWF4X3NldF9tb2RlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIodm9sdW1lLCBTX0lXVUdPIHwgU19JUlVHTywgdmFyaWF4X2dldF92b2x1bWUsIHZhcmlheF9zZXRfdm9sdW1lKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0b25lLCBTX0lXVUdPIHwgU19JUlVHTywgdmFyaWF4X2dldF90b25lLCB2YXJpYXhfc2V0X3RvbmUpOworc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIFNfSVJVR08sIHZhcmlheF9nZXRfbmFtZSwgbGluZTZfbm9wX3dyaXRlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYW5rLCBTX0lSVUdPLCB2YXJpYXhfZ2V0X2JhbmssIGxpbmU2X25vcF93cml0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZHVtcCwgU19JUlVHTywgdmFyaWF4X2dldF9kdW1wLCBsaW5lNl9ub3Bfd3JpdGUpOworc3RhdGljIERFVklDRV9BVFRSKGFjdGl2ZSwgU19JV1VHTyB8IFNfSVJVR08sIHZhcmlheF9nZXRfYWN0aXZlLCB2YXJpYXhfc2V0X2FjdGl2ZSk7CisKKyNpZiBDUkVBVEVfUkFXX0ZJTEUKK3N0YXRpYyBERVZJQ0VfQVRUUihyYXcsIFNfSVdVR08sIGxpbmU2X25vcF9yZWFkLCBsaW5lNl9zZXRfcmF3KTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyYXcyLCBTX0lXVUdPLCBsaW5lNl9ub3BfcmVhZCwgdmFyaWF4X3NldF9yYXcyKTsKKyNlbmRpZgorCisKKy8qCisJVmFyaWF4IGRlc3RydWN0b3IuCisqLworc3RhdGljIHZvaWQgdmFyaWF4X2Rlc3RydWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKKworCWlmICh2YXJpYXggPT0gTlVMTCkKKwkJcmV0dXJuOworCWxpbmU2ID0gJnZhcmlheC0+bGluZTY7CisJaWYgKGxpbmU2ID09IE5VTEwpCisJCXJldHVybjsKKwlsaW5lNl9jbGVhbnVwX2F1ZGlvKGxpbmU2KTsKKworCS8qIGZyZWUgZHVtcCByZXF1ZXN0IGRhdGE6ICovCisJbGluZTZfZHVtcHJlcV9kZXN0cnVjdGJ1ZigmdmFyaWF4LT5kdW1wcmVxLCAyKTsKKwlsaW5lNl9kdW1wcmVxX2Rlc3RydWN0YnVmKCZ2YXJpYXgtPmR1bXByZXEsIDEpOworCWxpbmU2X2R1bXByZXFfZGVzdHJ1Y3QoJnZhcmlheC0+ZHVtcHJlcSk7CisKKwlrZnJlZSh2YXJpYXgtPmJ1ZmZlcl9hY3RpdmF0ZSk7CisJZGVsX3RpbWVyX3N5bmMoJnZhcmlheC0+YWN0aXZhdGVfdGltZXIpOworfQorCisvKgorCUNyZWF0ZSBzeXNmcyBlbnRyaWVzLgorKi8KK3N0YXRpYyBpbnQgdmFyaWF4X2NyZWF0ZV9maWxlczIoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBlcnI7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RlbCkpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sdW1lKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90b25lKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9uYW1lKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5rKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kdW1wKSk7CisJQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9hY3RpdmUpKTsKKyNpZiBDUkVBVEVfUkFXX0ZJTEUKKwlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JhdykpOworCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmF3MikpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qCisJIEluaXQgd29ya2JlbmNoIGRldmljZS4KKyovCitpbnQgdmFyaWF4X2luaXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCkKK3sKKwlpbnQgZXJyOworCisJaWYgKChpbnRlcmZhY2UgPT0gTlVMTCkgfHwgKHZhcmlheCA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBpbml0aWFsaXplIFVTQiBidWZmZXJzOiAqLworCWVyciA9IGxpbmU2X2R1bXByZXFfaW5pdCgmdmFyaWF4LT5kdW1wcmVxLCB2YXJpYXhfcmVxdWVzdF9tb2RlbDEsCisJCQkJIHNpemVvZih2YXJpYXhfcmVxdWVzdF9tb2RlbDEpKTsKKworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXZhcmlheF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGxpbmU2X2R1bXByZXFfaW5pdGJ1ZigmdmFyaWF4LT5kdW1wcmVxLCB2YXJpYXhfcmVxdWVzdF9tb2RlbDIsCisJCQkJICAgIHNpemVvZih2YXJpYXhfcmVxdWVzdF9tb2RlbDIpLCAxKTsKKworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXZhcmlheF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGxpbmU2X2R1bXByZXFfaW5pdGJ1ZigmdmFyaWF4LT5kdW1wcmVxLCB2YXJpYXhfcmVxdWVzdF9iYW5rLAorCQkJCSAgICBzaXplb2YodmFyaWF4X3JlcXVlc3RfYmFuayksIDIpOworCisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJdmFyaWF4X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJdmFyaWF4LT5idWZmZXJfYWN0aXZhdGUgPSBrbWFsbG9jKHNpemVvZih2YXJpYXhfYWN0aXZhdGUpLCBHRlBfS0VSTkVMKTsKKworCWlmICh2YXJpYXgtPmJ1ZmZlcl9hY3RpdmF0ZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCXZhcmlheF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1jcHkodmFyaWF4LT5idWZmZXJfYWN0aXZhdGUsIHZhcmlheF9hY3RpdmF0ZSwKKwkgICAgICAgc2l6ZW9mKHZhcmlheF9hY3RpdmF0ZSkpOworCWluaXRfdGltZXIoJnZhcmlheC0+YWN0aXZhdGVfdGltZXIpOworCisJLyogY3JlYXRlIHN5c2ZzIGVudHJpZXM6ICovCisJZXJyID0gdmFyaWF4X2NyZWF0ZV9maWxlcygwLCAwLCAmaW50ZXJmYWNlLT5kZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXZhcmlheF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHZhcmlheF9jcmVhdGVfZmlsZXMyKCZpbnRlcmZhY2UtPmRldik7CisJaWYgKGVyciA8IDApIHsKKwkJdmFyaWF4X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogaW5pdGlhbGl6ZSBhdWRpbyBzeXN0ZW06ICovCisJZXJyID0gbGluZTZfaW5pdF9hdWRpbygmdmFyaWF4LT5saW5lNik7CisJaWYgKGVyciA8IDApIHsKKwkJdmFyaWF4X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogaW5pdGlhbGl6ZSBNSURJIHN1YnN5c3RlbTogKi8KKwllcnIgPSBsaW5lNl9pbml0X21pZGkoJnZhcmlheC0+bGluZTYpOworCWlmIChlcnIgPCAwKSB7CisJCXZhcmlheF9kZXN0cnVjdChpbnRlcmZhY2UpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIHJlZ2lzdGVyIGF1ZGlvIHN5c3RlbTogKi8KKwllcnIgPSBsaW5lNl9yZWdpc3Rlcl9hdWRpbygmdmFyaWF4LT5saW5lNik7CisJaWYgKGVyciA8IDApIHsKKwkJdmFyaWF4X2Rlc3RydWN0KGludGVyZmFjZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJdmFyaWF4X2FjdGl2YXRlX2RlbGF5ZWQodmFyaWF4LCBWQVJJQVhfQUNUSVZBVEVfREVMQVkpOworCWxpbmU2X3N0YXJ0dXBfZGVsYXllZCgmdmFyaWF4LT5kdW1wcmVxLCBWQVJJQVhfU1RBUlRVUF9ERUxBWSwKKwkJCSAgICAgIHZhcmlheF9zdGFydHVwX3RpbWVvdXQsIHZhcmlheCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisJV29ya2JlbmNoIGRldmljZSBkaXNjb25uZWN0ZWQuCisqLwordm9pZCB2YXJpYXhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWlmIChpbnRlcmZhY2UgPT0gTlVMTCkKKwkJcmV0dXJuOworCWRldiA9ICZpbnRlcmZhY2UtPmRldjsKKworCWlmIChkZXYgIT0gTlVMTCkgeworCQkvKiByZW1vdmUgc3lzZnMgZW50cmllczogKi8KKwkJdmFyaWF4X3JlbW92ZV9maWxlcygwLCAwLCBkZXYpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbW9kZWwpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdm9sdW1lKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3RvbmUpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbmFtZSk7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9iYW5rKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2R1bXApOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYWN0aXZlKTsKKyNpZiBDUkVBVEVfUkFXX0ZJTEUKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Jhdyk7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yYXcyKTsKKyNlbmRpZgorCX0KKworCXZhcmlheF9kZXN0cnVjdChpbnRlcmZhY2UpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3ZhcmlheC5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3ZhcmlheC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlMzMwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdmFyaWF4LmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC44LjAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIFZBUklBWF9ICisjZGVmaW5lIFZBUklBWF9ICisKKworI2luY2x1ZGUgImRyaXZlci5oIgorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisKKyNpbmNsdWRlICJkdW1wcmVxdWVzdC5oIgorCisKKyNkZWZpbmUgVkFSSUFYX0FDVElWQVRFX0RFTEFZIDEwCisjZGVmaW5lIFZBUklBWF9TVEFSVFVQX0RFTEFZIDMKKworCitlbnVtIHsKKwlWQVJJQVhfRFVNUF9QQVNTMSA9IExJTkU2X0RVTVBfQ1VSUkVOVCwKKwlWQVJJQVhfRFVNUF9QQVNTMiwKKwlWQVJJQVhfRFVNUF9QQVNTMworfTsKKworCisvKioKKwkgQmluYXJ5IFZhcmlheCBtb2RlbCBkdW1wCisqLworc3RydWN0IHZhcmlheF9tb2RlbCB7CisJLyoqCisJCSBIZWFkZXIgaW5mb3JtYXRpb24gKGluY2x1ZGluZyBwcm9ncmFtIG5hbWUpLgorCSovCisJdW5zaWduZWQgY2hhciBuYW1lWzE4XTsKKworCS8qKgorCQkgTW9kZWwgcGFyYW1ldGVycy4KKwkqLworCXVuc2lnbmVkIGNoYXIgY29udHJvbFs3OCAqIDJdOworfTsKKworc3RydWN0IHVzYl9saW5lNl92YXJpYXggeworCS8qKgorCQkgR2VuZXJpYyBMaW5lNiBVU0IgZGF0YS4KKwkqLworCXN0cnVjdCB1c2JfbGluZTYgbGluZTY7CisKKwkvKioKKwkJIER1bXAgcmVxdWVzdCBzdHJ1Y3R1cmUuCisJCSBBcHBlbmQgdHdvIGV4dHJhIGJ1ZmZlcnMgZm9yIDMtcGFzcyBkYXRhIHF1ZXJ5LgorCSovCisJc3RydWN0IGxpbmU2X2R1bXBfcmVxdWVzdCBkdW1wcmVxOyBzdHJ1Y3QgbGluZTZfZHVtcF9yZXFidWYgZXh0cmFidWZbMl07CisKKwkvKioKKwkJIEJ1ZmZlciBmb3IgYWN0aXZhdGlvbiBjb2RlLgorCSovCisJdW5zaWduZWQgY2hhciAqYnVmZmVyX2FjdGl2YXRlOworCisJLyoqCisJCSBNb2RlbCBudW1iZXIuCisJKi8KKwlpbnQgbW9kZWw7CisKKwkvKioKKwkJIEN1cnJlbnQgbW9kZWwgc2V0dGluZ3MuCisJKi8KKwlzdHJ1Y3QgdmFyaWF4X21vZGVsIG1vZGVsX2RhdGE7CisKKwkvKioKKwkJIE5hbWUgb2YgY3VycmVudCBtb2RlbCBiYW5rLgorCSovCisJdW5zaWduZWQgY2hhciBiYW5rWzE4XTsKKworCS8qKgorCQkgUG9zaXRpb24gb2Ygdm9sdW1lIGRpYWwuCisJKi8KKwlpbnQgdm9sdW1lOworCisJLyoqCisJCSBQb3NpdGlvbiBvZiB0b25lIGNvbnRyb2wgZGlhbC4KKwkqLworCWludCB0b25lOworCisJLyoqCisJCSBUaW1lciBmb3IgZGVsYXllZCBhY3RpdmF0aW9uIHJlcXVlc3QuCisJKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBhY3RpdmF0ZV90aW1lcjsKK307CisKKworZXh0ZXJuIHZvaWQgdmFyaWF4X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitleHRlcm4gaW50IHZhcmlheF9pbml0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgICBzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4KTsKK2V4dGVybiB2b2lkIHZhcmlheF9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCk7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5jIGIvZHJpdmVycy9zdGFnaW5nL21lNDAwMC9tZTQwMDAuYwppbmRleCBlMWM0YTgwLi4wMTAxN2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWU0MDAwL21lNDAwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZTQwMDAvbWU0MDAwLmMKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKIC8qIEluY2x1ZGUtRmlsZSBmb3IgdGhlIE1laWxoYXVzIE1FLTQwMDAgSS9PIGJvYXJkICovCkBAIC0yNDYsMTcgKzI0NiwxNyBAQAogICBJbmxpbmUgZnVuY3Rpb25zCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgaW5saW5lIG1lNDAwMF9idWZfY291bnQoc3RydWN0IG1lNDAwMF9jaXJjX2J1ZiBidWYsIGludCBzaXplKQorc3RhdGljIGlubGluZSBpbnQgbWU0MDAwX2J1Zl9jb3VudChzdHJ1Y3QgbWU0MDAwX2NpcmNfYnVmIGJ1ZiwgaW50IHNpemUpCiB7Ci0JcmV0dXJuICgoYnVmLmhlYWQgLSBidWYudGFpbCkgJiAoc2l6ZSAtIDEpKTsKKwlyZXR1cm4gKGJ1Zi5oZWFkIC0gYnVmLnRhaWwpICYgKHNpemUgLSAxKTsKIH0KIAotc3RhdGljIGludCBpbmxpbmUgbWU0MDAwX2J1Zl9zcGFjZShzdHJ1Y3QgbWU0MDAwX2NpcmNfYnVmIGJ1ZiwgaW50IHNpemUpCitzdGF0aWMgaW5saW5lIGludCBtZTQwMDBfYnVmX3NwYWNlKHN0cnVjdCBtZTQwMDBfY2lyY19idWYgYnVmLCBpbnQgc2l6ZSkKIHsKLQlyZXR1cm4gKChidWYudGFpbCAtIChidWYuaGVhZCArIDEpKSAmIChzaXplIC0gMSkpOworCXJldHVybiAoYnVmLnRhaWwgLSAoYnVmLmhlYWQgKyAxKSkgJiAoc2l6ZSAtIDEpOwogfQogCi1zdGF0aWMgaW50IGlubGluZSBtZTQwMDBfdmFsdWVzX3RvX2VuZChzdHJ1Y3QgbWU0MDAwX2NpcmNfYnVmIGJ1ZiwgaW50IHNpemUpCitzdGF0aWMgaW5saW5lIGludCBtZTQwMDBfdmFsdWVzX3RvX2VuZChzdHJ1Y3QgbWU0MDAwX2NpcmNfYnVmIGJ1ZiwgaW50IHNpemUpCiB7CiAJaW50IGVuZDsKIAlpbnQgbjsKQEAgLTI2NSw3ICsyNjUsNyBAQAogCXJldHVybiAobiA8IGVuZCkgPyBuIDogZW5kOwogfQogCi1zdGF0aWMgaW50IGlubGluZSBtZTQwMDBfc3BhY2VfdG9fZW5kKHN0cnVjdCBtZTQwMDBfY2lyY19idWYgYnVmLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IG1lNDAwMF9zcGFjZV90b19lbmQoc3RydWN0IG1lNDAwMF9jaXJjX2J1ZiBidWYsIGludCBzaXplKQogewogCWludCBlbmQ7CiAJaW50IG47CkBAIC0yNzUsMTkgKzI3NSwxOSBAQAogCXJldHVybiAobiA8PSBlbmQpID8gbiA6IChlbmQgKyAxKTsKIH0KIAotc3RhdGljIHZvaWQgaW5saW5lIG1lNDAwMF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZTQwMDBfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJUE9SVF9QREVCVUcoIi0tPiAweCUwMlggcG9ydCAweCUwNGxYXG4iLCB2YWx1ZSwgcG9ydCk7CiAJb3V0Yih2YWx1ZSwgcG9ydCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlubGluZSBtZTQwMDBfb3V0bCh1bnNpZ25lZCBsb25nIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgbWU0MDAwX291dGwodW5zaWduZWQgbG9uZyB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCVBPUlRfUERFQlVHKCItLT4gMHglMDhsWCBwb3J0IDB4JTA0bFhcbiIsIHZhbHVlLCBwb3J0KTsKIAlvdXRsKHZhbHVlLCBwb3J0KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5saW5lIG1lNDAwMF9pbmwodW5zaWduZWQgbG9uZyBwb3J0KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lNDAwMF9pbmwodW5zaWduZWQgbG9uZyBwb3J0KQogewogCXVuc2lnbmVkIGxvbmcgdmFsdWU7CiAJdmFsdWUgPSBpbmwocG9ydCk7CkBAIC0yOTUsNyArMjk1LDcgQEAKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlubGluZSBtZTQwMDBfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBtZTQwMDBfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKIAl1bnNpZ25lZCBjaGFyIHZhbHVlOwogCXZhbHVlID0gaW5iKHBvcnQpOwpAQCAtMzA5LDcgKzMwOSw3IEBACiAJLnByb2JlID0gbWU0MDAwX3Byb2JlCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYW9fZm9wc19zaW5nID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FvX2ZvcHNfc2luZyA9IHsKICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogICAgICAgLndyaXRlID0gbWU0MDAwX2FvX3dyaXRlX3NpbmcsCiAgICAgICAuaW9jdGwgPSBtZTQwMDBfYW9faW9jdGxfc2luZywKQEAgLTMxNyw3ICszMTcsNyBAQAogICAgICAgLnJlbGVhc2UgPSBtZTQwMDBfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9hb19mb3BzX3dyYXAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYW9fZm9wc193cmFwID0gewogICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCiAgICAgICAud3JpdGUgPSBtZTQwMDBfYW9fd3JpdGVfd3JhcCwKICAgICAgIC5pb2N0bCA9IG1lNDAwMF9hb19pb2N0bF93cmFwLApAQCAtMzI1LDcgKzMyNSw3IEBACiAgICAgICAucmVsZWFzZSA9IG1lNDAwMF9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FvX2ZvcHNfY29udCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9hb19mb3BzX2NvbnQgPSB7CiAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKICAgICAgIC53cml0ZSA9IG1lNDAwMF9hb193cml0ZV9jb250LAogICAgICAgLnBvbGwgPSBtZTQwMDBfYW9fcG9sbF9jb250LApAQCAtMzM1LDE0ICszMzUsMTQgQEAKICAgICAgIC5mc3luYyA9IG1lNDAwMF9hb19mc3luY19jb250LAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfc2luZyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX3NpbmcgPSB7CiAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKICAgICAgIC5pb2N0bCA9IG1lNDAwMF9haV9pb2N0bF9zaW5nLAogICAgICAgLm9wZW4gPSBtZTQwMDBfb3BlbiwKICAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfYWlfZm9wc19jb250X3N3ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9zdyA9IHsKICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogICAgICAgLnJlYWQgPSBtZTQwMDBfYWlfcmVhZCwKICAgICAgIC5wb2xsID0gbWU0MDAwX2FpX3BvbGwsCkBAIC0zNTIsNyArMzUyLDcgQEAKICAgICAgIC5mYXN5bmMgPSBtZTQwMDBfYWlfZmFzeW5jLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9ldCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfZXQgPSB7CiAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKICAgICAgIC5yZWFkID0gbWU0MDAwX2FpX3JlYWQsCiAgICAgICAucG9sbCA9IG1lNDAwMF9haV9wb2xsLApAQCAtMzYxLDcgKzM2MSw3IEBACiAgICAgICAucmVsZWFzZSA9IG1lNDAwMF9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9ldF92YWx1ZSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfZXRfdmFsdWUgPSB7CiAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKICAgICAgIC5yZWFkID0gbWU0MDAwX2FpX3JlYWQsCiAgICAgICAucG9sbCA9IG1lNDAwMF9haV9wb2xsLApAQCAtMzcwLDcgKzM3MCw3IEBACiAgICAgICAucmVsZWFzZSA9IG1lNDAwMF9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2FpX2ZvcHNfY29udF9ldF9jaGFubGlzdCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9haV9mb3BzX2NvbnRfZXRfY2hhbmxpc3QgPSB7CiAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKICAgICAgIC5yZWFkID0gbWU0MDAwX2FpX3JlYWQsCiAgICAgICAucG9sbCA9IG1lNDAwMF9haV9wb2xsLApAQCAtMzc5LDIxICszNzksMjEgQEAKICAgICAgIC5yZWxlYXNlID0gbWU0MDAwX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfZGlvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZTQwMDBfZGlvX2ZvcHMgPSB7CiAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKICAgICAgIC5pb2N0bCA9IG1lNDAwMF9kaW9faW9jdGwsCiAgICAgICAub3BlbiA9IG1lNDAwMF9vcGVuLAogICAgICAgLnJlbGVhc2UgPSBtZTQwMDBfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9jbnRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9jbnRfZm9wcyA9IHsKICAgICAgIC5vd25lciA9IFRISVNfTU9EVUxFLAogICAgICAgLmlvY3RsID0gbWU0MDAwX2NudF9pb2N0bCwKICAgICAgIC5vcGVuID0gbWU0MDAwX29wZW4sCiAgICAgICAucmVsZWFzZSA9IG1lNDAwMF9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWU0MDAwX2V4dF9pbnRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lNDAwMF9leHRfaW50X2ZvcHMgPSB7CiAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKICAgICAgIC5pb2N0bCA9IG1lNDAwMF9leHRfaW50X2lvY3RsLAogICAgICAgLm9wZW4gPSBtZTQwMDBfb3BlbiwKQEAgLTQwMSwxOCArNDAxLDI2IEBACiAgICAgICAuZmFzeW5jID0gbWU0MDAwX2V4dF9pbnRfZmFzeW5jLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKm1lNDAwMF9hb19mb3BzX2FycmF5W10gPSB7Ci0JJm1lNDAwMF9hb19mb3BzX3NpbmcsCS8vIHNpbmdsZSBvcGVyYXRpb25zCi0JJm1lNDAwMF9hb19mb3BzX3dyYXAsCS8vIHdyYXBhcm91bmQgb3BlcmF0aW9ucwotCSZtZTQwMDBfYW9fZm9wc19jb250LAkvLyBjb250aW5vdXMgb3BlcmF0aW9ucworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKm1lNDAwMF9hb19mb3BzX2FycmF5W10gPSB7CisJLyogc2luZ2xlIG9wZXJhdGlvbnMgKi8KKwkmbWU0MDAwX2FvX2ZvcHNfc2luZywKKwkvKiB3cmFwYXJvdW5kIG9wZXJhdGlvbnMgKi8KKwkmbWU0MDAwX2FvX2ZvcHNfd3JhcCwKKwkvKiBjb250aW51b3VzIG9wZXJhdGlvbnMgKi8KKwkmbWU0MDAwX2FvX2ZvcHNfY29udCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICptZTQwMDBfYWlfZm9wc19hcnJheVtdID0gewotCSZtZTQwMDBfYWlfZm9wc19zaW5nLAkvLyBzaW5nbGUgb3BlcmF0aW9ucwotCSZtZTQwMDBfYWlfZm9wc19jb250X3N3LAkvLyBjb250aW51b3VzIG9wZXJhdGlvbnMgd2l0aCBzb2Z0d2FyZSBzdGFydAotCSZtZTQwMDBfYWlfZm9wc19jb250X2V0LAkvLyBjb250aW5vdXMgb3BlcmF0aW9ucyB3aXRoIGV4dGVybmFsIHRyaWdnZXIKLQkmbWU0MDAwX2FpX2ZvcHNfY29udF9ldF92YWx1ZSwJLy8gc2FtcGxlIHZhbHVlcyBieSBleHRlcm5hbCB0cmlnZ2VyCi0JJm1lNDAwMF9haV9mb3BzX2NvbnRfZXRfY2hhbmxpc3QsCS8vIHdvcmsgdGhyb3VnaCBvbmUgY2hhbm5lbCBsaXN0IGJ5IGV4dGVybmFsIHRyaWdnZXIKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICptZTQwMDBfYWlfZm9wc19hcnJheVtdID0geworCS8qIHNpbmdsZSBvcGVyYXRpb25zICovCisJJm1lNDAwMF9haV9mb3BzX3NpbmcsCisJLyogY29udGludW91cyBvcGVyYXRpb25zIHdpdGggc29mdHdhcmUgc3RhcnQgKi8KKwkmbWU0MDAwX2FpX2ZvcHNfY29udF9zdywKKwkvKiBjb250aW51b3VzIG9wZXJhdGlvbnMgd2l0aCBleHRlcm5hbCB0cmlnZ2VyICovCisJJm1lNDAwMF9haV9mb3BzX2NvbnRfZXQsCisJLyogc2FtcGxlIHZhbHVlcyBieSBleHRlcm5hbCB0cmlnZ2VyICovCisJJm1lNDAwMF9haV9mb3BzX2NvbnRfZXRfdmFsdWUsCisJLyogd29yayB0aHJvdWdoIG9uZSBjaGFubmVsIGxpc3QgYnkgZXh0ZXJuYWwgdHJpZ2dlciAqLworCSZtZTQwMDBfYWlfZm9wc19jb250X2V0X2NoYW5saXN0LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWU0MDAwX2luaXRfbW9kdWxlKHZvaWQpCkBAIC01NDYsMTUgKzU1NCwxMyBAQAogCQkJCSZib2FyZF9pbmZvLT5hb19jb250ZXh0X2xpc3QsIGxpc3QpIHsKIAkJCW1lNDAwMF9hb19yZXNldChhb19jb250ZXh0KTsKIAkJCWZyZWVfaXJxKGFvX2NvbnRleHQtPmlycSwgYW9fY29udGV4dCk7Ci0JCQlpZiAoYW9fY29udGV4dC0+Y2lyY19idWYuYnVmKQotCQkJCWtmcmVlKGFvX2NvbnRleHQtPmNpcmNfYnVmLmJ1Zik7CisJCQlrZnJlZShhb19jb250ZXh0LT5jaXJjX2J1Zi5idWYpOwogCQkJbGlzdF9kZWwoJmFvX2NvbnRleHQtPmxpc3QpOwogCQkJa2ZyZWUoYW9fY29udGV4dCk7CiAJCX0KIAogCQkvKiBDbGVhciBhbmFsb2cgaW5wdXQgY29udGV4dCAqLwotCQlpZiAoYm9hcmRfaW5mby0+YWlfY29udGV4dC0+Y2lyY19idWYuYnVmKQotCQkJa2ZyZWUoYm9hcmRfaW5mby0+YWlfY29udGV4dC0+Y2lyY19idWYuYnVmKTsKKwkJa2ZyZWUoYm9hcmRfaW5mby0+YWlfY29udGV4dC0+Y2lyY19idWYuYnVmKTsKIAkJa2ZyZWUoYm9hcmRfaW5mby0+YWlfY29udGV4dCk7CiAKIAkJLyogQ2xlYXIgZGlnaXRhbCBJL08gY29udGV4dCAqLwpAQCAtMTI2Myw5ICsxMjY5LDggQEAKIAkJICAgIGluZm8tPm1lNDAwMF9yZWdiYXNlICsgTUU0MDAwX0FPX0RFTVVYX0FESlVTVF9SRUcpOwogCiAJLyogU2V0IGRpZ2l0YWwgSS9PIGRpcmVjdGlvbiBmb3IgcG9ydCAwIHRvIG91dHB1dCBvbiBpc29sYXRlZCB2ZXJzaW9ucyAqLwotCWlmICghKG1lNDAwMF9pbmwoaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX0RJUl9SRUcpICYgMHgxKSkgeworCWlmICghKG1lNDAwMF9pbmwoaW5mby0+bWU0MDAwX3JlZ2Jhc2UgKyBNRTQwMDBfRElPX0RJUl9SRUcpICYgMHgxKSkKIAkJbWU0MDAwX291dGwoMHgxLCBpbmZvLT5tZTQwMDBfcmVnYmFzZSArIE1FNDAwMF9ESU9fQ1RSTF9SRUcpOwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTQ2Myw3ICsxNDY4LDcgQEAKIAkJLyogU2V0IGZpbGUgb3BlcmF0aW9ucyBwb2ludGVyIHRvIHNpbmdsZSBmdW5jdGlvbnMgKi8KIAkJZmlsZV9wLT5mX29wID0gJm1lNDAwMF9kaW9fZm9wczsKIAotCQkvL21lNDAwMF9kaW9fcmVzZXQoZGlvX2NvbnRleHQpOworCQkvKiBtZTQwMDBfZGlvX3Jlc2V0KGRpb19jb250ZXh0KTsgKi8KIAl9CiAJLyogQ291bnRlcnMgKi8KIAllbHNlIGlmIChNQUpPUihpbm9kZV9wLT5pX3JkZXYpID09IG1lNDAwMF9jbnRfbWFqb3JfZHJpdmVyX25vKSB7CkBAIC0yMDU4LDcgKzIwNjMsNyBAQAogCQkJCQkJTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCk7CiAKIAkJCWlmIChjID09IDApCi0JCQkJcmV0dXJuICgyICogcmV0KTsKKwkJCQlyZXR1cm4gMiAqIHJldDsKIAogCQkJLyogT25seSBhYmxlIHRvIHdyaXRlIHNpemUgb2YgZnJlZSBidWZmZXIgb3Igc2l6ZSBvZiBjb3VudCAqLwogCQkJaWYgKGNvdW50IDwgYykKQEAgLTIxMDQsOSArMjEwOSw4IEBACiAJCX0KIAl9CiAKLQlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJaWYgKGZpbGVwLT5mX2ZsYWdzICYgT19OT05CTE9DSykKIAkJcmV0dXJuIChyZXQgPT0gMCkgPyAtRUFHQUlOIDogMiAqIHJldDsKLQl9CiAKIAlyZXR1cm4gMiAqIHJldDsKIH0KQEAgLTIyMDEsNyArMjIwNSw3IEBACiAJY2FzZSBNRTQwMDBfQU9fU0lNVUxUQU5FT1VTX1VQREFURToKIAkJcmV0dXJuCiAJCSAgICBtZTQwMDBfYW9fc2ltdWx0YW5lb3VzX3VwZGF0ZSgKLQkJICAgIAkJKHN0cnVjdCBtZTQwMDBfYW9fY2hhbm5lbF9saXN0ICopYXJnLAorCQkJCShzdHJ1Y3QgbWU0MDAwX2FvX2NoYW5uZWxfbGlzdCAqKWFyZywKIAkJCQlhb19jb250ZXh0KTsKIAljYXNlIE1FNDAwMF9BT19FWF9UUklHX1RJTUVPVVQ6CiAJCXJldHVybiBtZTQwMDBfYW9fZXhfdHJpZ190aW1lb3V0KCh1bnNpZ25lZCBsb25nICopYXJnLApAQCAtMjM2MSw3ICsyMzY1LDkgQEAKIAkJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3N0YXJ0KCk6V2FpdCBvbiBzdGFydCBvZiBzdGF0ZSBtYWNoaW5lIGludGVycnVwdGVkXG4iKTsKIAkJCQkJcmV0dXJuIC1FSU5UUjsKIAkJCQl9Ci0JCQkJaWYgKCgoamlmZmllcyAtIHJlZikgPiAodGltZW91dCAqIEhaIC8gVVNFUl9IWikpKSB7CS8vIDIuNiBoYXMgZGlmZnJlbnQgZGVmaW5pdGlvbnMgZm9yIEhaIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZQorCQkJCS8qIGtlcm5lbCAyLjYgaGFzIGRpZmZlcmVudCBkZWZpbml0aW9ucyBmb3IgSFoKKwkJCQkgKiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UgKi8KKwkJCQlpZiAoKGppZmZpZXMgLSByZWYpID4gKHRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSB7CiAJCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYW9fc3RhcnQoKTpUaW1lb3V0IHJlYWNoZWRcbiIpOwogCQkJCQlyZXR1cm4gLUVJTzsKQEAgLTI0MDIsOCArMjQwOCw4IEBACiAJfQogCiAJLyogQ2xlYXIgdGhlIHN0b3AgYml0ICovCi0JLy90bXAgJj0gfk1FNDAwMF9BT19DVFJMX0JJVF9TVE9QOwotCS8vbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CisJLyogdG1wICY9IH5NRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUDsgKi8KKwkvKiBtZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsgKi8KIAogCXJldHVybiAwOwogfQpAQCAtMjQzNCw4ICsyNDQwLDggQEAKIAl9CiAKIAkvKiBDbGVhciB0aGUgc3RvcCBiaXRzICovCi0JLy90bXAgJj0gfihNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCk7Ci0JLy9tZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPmN0cmxfcmVnKTsKKwkvKiB0bXAgJj0gfihNRTQwMDBfQU9fQ1RSTF9CSVRfU1RPUCB8IE1FNDAwMF9BT19DVFJMX0JJVF9JTU1FRElBVEVfU1RPUCk7ICovCisJLyogbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7ICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI1OTgsOCArMjYwNCwxMCBAQAogCiAJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOwogCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOwotCXRtcCAmPSB+KDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CS8vIERpc2FibGUgcHJlbG9hZCBiaXQKLQl0bXAgJj0gfigweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpKTsJLy8gRGlzYWJsZSBodyBzaW11bHRhbmVvdXMgYml0CisJLyogRGlzYWJsZSBwcmVsb2FkIGJpdCAqLworCXRtcCAmPSB+KDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CisJLyogRGlzYWJsZSBodyBzaW11bHRhbmVvdXMgYml0ICovCisJdG1wICY9IH4oMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CiAJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CiAJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CiAKQEAgLTI2MTQsOCArMjYyMiwxMCBAQAogCiAJc3Bpbl9sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOwogCXRtcCA9IG1lNDAwMF9pbmwoYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOwotCXRtcCB8PSAoMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4KTsJLy8gRW5hYmxlIHByZWxvYWQgYml0Ci0JdG1wIHw9ICgweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpKTsJLy8gRW5hYmxlIGh3IHNpbXVsdGFuZW91cyBiaXQKKwkvKiBFbmFibGUgcHJlbG9hZCBiaXQgKi8KKwl0bXAgfD0gKDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CisJLyogRW5hYmxlIGh3IHNpbXVsYXRlbm91cyBiaXQgKi8KKwl0bXAgfD0gKDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwogCW1lNDAwMF9vdXRsKHRtcCwgYW9fY29udGV4dC0+cHJlbG9hZF9yZWcpOwogCXNwaW5fdW5sb2NrKCZhb19jb250ZXh0LT5ib2FyZF9pbmZvLT5wcmVsb2FkX2xvY2spOwogCkBAIC0yNjMwLDggKzI2NDAsMTAgQEAKIAogCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKIAl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKLQl0bXAgfD0gKDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CS8vIEVuYWJsZSBwcmVsb2FkIGJpdAotCXRtcCAmPSB+KDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwkvLyBEaXNhYmxlIGh3IHNpbXVsdGFuZW91cyBiaXQKKwkvKiBFbmFibGUgcHJlbG9hZCBiaXQgKi8KKwl0bXAgfD0gKDB4MSA8PCBhb19jb250ZXh0LT5pbmRleCk7CisJLyogRW5hYmxlIGh3IHNpbXVsYXRlbm91cyBiaXQgKi8KKwl0bXAgJj0gfigweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpKTsKIAltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKIAlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKIApAQCAtMjY2OSwxMSArMjY4MSwxMSBAQAogCQkJICAgICh0bXAgJgogCQkJICAgICAoMHgxIDw8CiAJCQkgICAgICAoKChzdHJ1Y3QgbWU0MDAwX2FvX2NvbnRleHQgKillbnRyeSktPmluZGV4Ci0JCQkgICAgICAJCQkJCSAgICAgICsgMTYpKSkpIHsKKwkJCQkJCQkJICAgICAgKyAxNikpKSkgewogCQkJCXRtcCAmPQogCQkJCSAgICB+KDB4MSA8PAogCQkJCSAgICAgICgoKHN0cnVjdCBtZTQwMDBfYW9fY29udGV4dCAqKWVudHJ5KS0+Ci0JCQkJICAgICAgCQkJCQlpbmRleCkpOworCQkJCQkJCQkJaW5kZXgpKTsKIAkJCX0KIAkJfQogCX0KQEAgLTI3MzIsOCArMjc0NCwxMCBAQAogCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FvX3NpbXVsdGFuZW91c191cGRhdGUoKTpJbnZhbGlkIGJvYXJkIG51bWJlciBzcGVjaWZpZWRcbiIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQkJdG1wICY9IH4oMHgxIDw8IGNoYW5uZWxzLmxpc3RbaV0pOwkvLyBDbGVhciB0aGUgcHJlbG9hZCBiaXQKLQkJdG1wICY9IH4oMHgxIDw8IChjaGFubmVscy5saXN0W2ldICsgMTYpKTsJLy8gQ2xlYXIgdGhlIGh3IHNpbXVsdGFuZW91cyBiaXQKKwkJLyogQ2xlYXIgdGhlIHByZWxvYWQgYml0ICovCisJCXRtcCAmPSB+KDB4MSA8PCBjaGFubmVscy5saXN0W2ldKTsKKwkJLyogQ2xlYXIgdGhlIGh3IHNpbXVsdGFuZW91cyBiaXQgKi8KKwkJdG1wICY9IH4oMHgxIDw8IChjaGFubmVscy5saXN0W2ldICsgMTYpKTsKIAl9CiAJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CiAJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CkBAIC0yNzU5LDggKzI3NzMsMTAgQEAKIAogCXNwaW5fbG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKIAl0bXAgPSBtZTQwMDBfaW5sKGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKLQl0bXAgJj0gfigweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOwkvLyBEaXNhYmxlIHN5bmNocm9ub3VzIHN3IGJpdAotCXRtcCB8PSAweDEgPDwgKGFvX2NvbnRleHQtPmluZGV4ICsgMTYpOwkvLyBFbmFibGUgc3luY2hyb25vdXMgaHcgYml0CisJLyogRGlzYWJsZSBzeW5jaHJvbm91cyBzdyBiaXQgKi8KKwl0bXAgJj0gfigweDEgPDwgYW9fY29udGV4dC0+aW5kZXgpOworCS8qIEVuYWJsZSBzeW5jaHJvbm91cyBodyBiaXQgKi8KKwl0bXAgfD0gMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KTsKIAltZTQwMDBfb3V0bCh0bXAsIGFvX2NvbnRleHQtPnByZWxvYWRfcmVnKTsKIAlzcGluX3VubG9jaygmYW9fY29udGV4dC0+Ym9hcmRfaW5mby0+cHJlbG9hZF9sb2NrKTsKIApAQCAtMjc5NCw4ICsyODEwLDEwIEBACiAKIAlzcGluX2xvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CiAJdG1wID0gbWU0MDAwX2lubChhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7Ci0JdG1wIHw9IDB4MSA8PCBhb19jb250ZXh0LT5pbmRleDsJLy8gRW5hYmxlIHN5bmNocm9ub3VzIHN3IGJpdAotCXRtcCAmPSB+KDB4MSA8PCAoYW9fY29udGV4dC0+aW5kZXggKyAxNikpOwkvLyBEaXNhYmxlIHN5bmNocm9ub3VzIGh3IGJpdAorCS8qIEVuYWJsZSBzeW5jaHJvbm91cyBzdyBiaXQgKi8KKwl0bXAgfD0gMHgxIDw8IGFvX2NvbnRleHQtPmluZGV4OworCS8qIERpc2FibGUgc3luY2hyb25vdXMgaHcgYml0ICovCisJdG1wICY9IH4oMHgxIDw8IChhb19jb250ZXh0LT5pbmRleCArIDE2KSk7CiAJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5wcmVsb2FkX3JlZyk7CiAJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmJvYXJkX2luZm8tPnByZWxvYWRfbG9jayk7CiAKQEAgLTI4NjcsNyArMjg4NSw5IEBACiAJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKTpXYWl0IG9uIHN0YXJ0IG9mIHN0YXRlIG1hY2hpbmUgaW50ZXJydXB0ZWRcbiIpOwogCQkJCQlyZXR1cm4gLUVJTlRSOwogCQkJCX0KLQkJCQlpZiAoKChqaWZmaWVzIC0gcmVmKSA+ICh0aW1lb3V0ICogSFogLyBVU0VSX0haKSkpIHsJLy8gMi42IGhhcyBkaWZmcmVudCBkZWZpbml0aW9ucyBmb3IgSFogaW4gdXNlciBhbmQga2VybmVsIHNwYWNlCisJCQkJLyoga2VybmVsIDIuNiBoYXMgZGlmZmVyZW50IGRlZmluaXRpb25zIGZvciBIWgorCQkJCSAqIGluIHVzZXIgYW5kIGtlcm5lbCBzcGFjZSAqLworCQkJCWlmICgoamlmZmllcyAtIHJlZikgPiAodGltZW91dCAqIEhaIC8gVVNFUl9IWikpIHsKIAkJCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9hb19leF90cmlnX3RpbWVvdXQoKTpUaW1lb3V0IHJlYWNoZWRcbiIpOwogCQkJCQlyZXR1cm4gLUVJTzsKQEAgLTMyNDMsNyArMzI2Myw4IEBACiAJCQkJICAgICAgICJNRTQwMDA6bWU0MDAwX2FpX3NpbmdsZSgpOldhaXQgb24gc3RhcnQgb2Ygc3RhdGUgbWFjaGluZSBpbnRlcnJ1cHRlZFxuIik7CiAJCQkJcmV0dXJuIC1FSU5UUjsKIAkJCX0KLQkJCWlmICgoKGppZmZpZXMgLSBqaWZmeSkgPiAoY21kLnRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSAmJiBjbWQudGltZW91dCkgewkvLyAyLjYgaGFzIGRpZmZyZW50IGRlZmluaXRpb25zIGZvciBIWiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UKKwkJCS8qIDIuNiBoYXMgZGlmZmVyZW50IGRlZmluaXRpb25zIGZvciBIWiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UgKi8KKwkJCWlmICgoKGppZmZpZXMgLSBqaWZmeSkgPiAoY21kLnRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSAmJiBjbWQudGltZW91dCkgewogCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zaW5nbGUoKTpUaW1lb3V0IHJlYWNoZWRcbiIpOwogCQkJCXJldHVybiAtRUlPOwpAQCAtMzYyMiw5ICszNjQzLDggQEAKIAltZTQwMDBfb3V0bCh0bXAsIGFpX2NvbnRleHQtPmN0cmxfcmVnKTsKIAogCS8qIFdyaXRlIHRoZSBjaGFubmVsIGxpc3QgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY21kLmNoYW5uZWxfbGlzdC5jb3VudDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGNtZC5jaGFubmVsX2xpc3QuY291bnQ7IGkrKykKIAkJbWU0MDAwX291dGwobGlzdFtpXSwgYWlfY29udGV4dC0+Y2hhbm5lbF9saXN0X3JlZyk7Ci0JfQogCiAJLyogU2V0dXAgc2FtcGxlIGFuZCBob2xkICovCiAJaWYgKGNtZC5zaCkgewpAQCAtMzY2Myw4ICszNjgzLDcgQEAKIAl0bXAgJj0KIAkgICAgfihNRTQwMDBfQUlfQ1RSTF9CSVRfQ0hBTk5FTF9GSUZPIHwgTUU0MDAwX0FJX0NUUkxfQklUX1NBTVBMRV9IT0xEKTsKIAotCWlmIChsaXN0KQotCQlrZnJlZShsaXN0KTsKKwlrZnJlZShsaXN0KTsKIAogCXJldHVybiBlcnI7CiAKQEAgLTM3NzQsMjUgKzM3OTMsMjIgQEAKIAogCWlmICh0aW1lb3V0KSB7CiAJCXJlZiA9IGppZmZpZXM7Ci0JCXdoaWxlICghCi0JCSAgICAgICAoaW5sKGFpX2NvbnRleHQtPnN0YXR1c19yZWcpICYgTUU0MDAwX0FJX1NUQVRVU19CSVRfRlNNKSkKLQkJeworCQl3aGlsZSAoIShpbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pKSB7CiAJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnF1ZXVlLCAxKTsKIAkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCSAgICAgICAiTUU0MDAwOm1lNDAwMF9haV9zdGFydF9leCgpOldhaXQgb24gc3RhcnQgb2Ygc3RhdGUgbWFjaGluZSBpbnRlcnJ1cHRlZFxuIik7CiAJCQkJcmV0dXJuIC1FSU5UUjsKIAkJCX0KLQkJCWlmICgoKGppZmZpZXMgLSByZWYpID4gKHRpbWVvdXQgKiBIWiAvIFVTRVJfSFopKSkgewkvLyAyLjYgaGFzIGRpZmZyZW50IGRlZmluaXRpb25zIGZvciBIWiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UKKwkJCS8qIDIuNiBoYXMgZGlmZmVyZW50IGRlZmluaXRpb25zIGZvciBIWiBpbiB1c2VyIGFuZCBrZXJuZWwgc3BhY2UgKi8KKwkJCWlmICgoamlmZmllcyAtIHJlZikgPiAodGltZW91dCAqIEhaIC8gVVNFUl9IWikpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkgICAgICAgIk1FNDAwMDptZTQwMDBfYWlfc3RhcnRfZXgoKTpUaW1lb3V0IHJlYWNoZWRcbiIpOwogCQkJCXJldHVybiAtRUlPOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKLQkJd2hpbGUgKCEKLQkJICAgICAgIChpbmwoYWlfY29udGV4dC0+c3RhdHVzX3JlZykgJiBNRTQwMDBfQUlfU1RBVFVTX0JJVF9GU00pKQotCQl7CisJCXdoaWxlICghKGlubChhaV9jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BSV9TVEFUVVNfQklUX0ZTTSkpIHsKIAkJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcXVldWUsIDEpOwogCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCkBAIC00MTEzLDkgKzQxMjksOCBAQAogCQlyZXR1cm4gLUVQSVBFOwogCX0KIAotCWlmIChmaWxlcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKKwlpZiAoZmlsZXAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQogCQlyZXR1cm4gKGsgPT0gMCkgPyAtRUFHQUlOIDogMiAqIHJldDsKLQl9CiAKIAlDQUxMX1BERUJVRygibWU0MDAwX2FpX3JlYWQoKSBpcyBsZWF2ZWRcbiIpOwogCXJldHVybiByZXQgKiAyOwpAQCAtNDI1NCwxMSArNDI2OSwxMCBAQAogCXVkZWxheShFRVBST01fREVMQVkpOwogCiAJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCWlmIChjbWQgJiAoKDB4MSA8PCAobGVuZ3RoIC0gMSkpID4+IGkpKSB7CisJCWlmIChjbWQgJiAoKDB4MSA8PCAobGVuZ3RoIC0gMSkpID4+IGkpKQogCQkJdmFsdWUgfD0gUExYX0lDUl9CSVRfRUVQUk9NX1dSSVRFOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQl2YWx1ZSAmPSB+UExYX0lDUl9CSVRfRUVQUk9NX1dSSVRFOwotCQl9CiAKIAkJLyogV3JpdGUgdG8gRUVQUk9NICovCiAJCW1lNDAwMF9vdXRsKHZhbHVlLApAQCAtNDMxNCwxMSArNDMyOCwxMSBAQAogCiAJLyogV3JpdGUgdGhlIHJlYWQgY29tbWFuZCB0byB0aGUgZWVwcm9tICovCiAJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCWlmIChjbWQgJiAoKDB4MSA8PCAobGVuZ3RoIC0gMSkpID4+IGkpKSB7CisJCWlmIChjbWQgJiAoKDB4MSA8PCAobGVuZ3RoIC0gMSkpID4+IGkpKQogCQkJdmFsdWUgfD0gUExYX0lDUl9CSVRfRUVQUk9NX1dSSVRFOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQl2YWx1ZSAmPSB+UExYX0lDUl9CSVRfRUVQUk9NX1dSSVRFOwotCQl9CisKIAkJbWU0MDAwX291dGwodmFsdWUsCiAJCQkgICAgYWlfY29udGV4dC0+Ym9hcmRfaW5mby0+cGx4X3JlZ2Jhc2UgKyBQTFhfSUNSKTsKIAkJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CkBAIC01NDQwLDggKzU0NTQsNiBAQAogCWludCBpOwogCWludCBjID0gMDsKIAlpbnQgYzEgPSAwOwotCS8vdW5zaWduZWQgbG9uZyBiZWZvcmU7Ci0JLy91bnNpZ25lZCBsb25nIGFmdGVyOwogCiAJSVNSX1BERUJVRygibWU0MDAwX2FvX2lzcigpIGlzIGV4ZWN1dGVkXG4iKTsKIApAQCAtNTQ5Myw3ICs1NTA1LDYgQEAKIAkJCSAgICAoIm1lNDAwMF9hb19pc3IoKTpXb3JrIGRvbmUgb3IgYnVmZmVyIGVtcHR5XG4iKTsKIAkJCWJyZWFrOwogCQl9Ci0JCS8vcmR0c2NsKGJlZm9yZSk7CiAJCWlmICgoKGFvX2NvbnRleHQtPmZpZm9fcmVnICYgMHhGRikgPT0gTUU0MDAwX0FPXzAxX0ZJRk9fUkVHKSB8fAogCQkgICAgKChhb19jb250ZXh0LT5maWZvX3JlZyAmIDB4RkYpID09IE1FNDAwMF9BT18wM19GSUZPX1JFRykpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBjMTsgaSsrKSB7CkBAIC01NTA5LDggKzU1MjAsNiBAQAogCQkJICAgICAgYW9fY29udGV4dC0+Y2lyY19idWYuYnVmICsKIAkJCSAgICAgIGFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwsIGMxKTsKIAotCQkvL3JkdHNjbChhZnRlcik7Ci0JCS8vcHJpbnRrKEtFUk5fRVJSIk1FNDAwMDptZTQwMDBfYW9faXNyKCk6VGltZSBsYXBzZSA9ICVsdVxuIiwgYWZ0ZXIgLSBiZWZvcmUpOwogCiAJCWFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgPQogCQkgICAgKGFvX2NvbnRleHQtPmNpcmNfYnVmLnRhaWwgKyBjMSkgJiAoTUU0MDAwX0FPX0JVRkZFUl9DT1VOVCAtCkBAIC01NTQyLDggKzU1NTEsMTAgQEAKIAkvKiBJZiBzdGF0ZSBtYWNoaW5lIGlzIHN0b3BwZWQsIGZsb3cgd2FzIGludGVycnVwdGVkICovCiAJaWYgKCEobWU0MDAwX2lubChhb19jb250ZXh0LT5zdGF0dXNfcmVnKSAmIE1FNDAwMF9BT19TVEFUVVNfQklUX0ZTTSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJNRTQwMDA6bWU0MDAwX2FvX2lzcigpOkJyb2tlbiBwaXBlXG4iKTsKLQkJYW9fY29udGV4dC0+cGlwZV9mbGFnID0gMTsJLy8gU2V0IGZsYWcgaW4gb3JkZXIgdG8gaW5mb3JtIHdyaXRlIHJvdXRpbmUKLQkJdG1wICY9IH5NRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0lSUTsJLy8gRGlzYWJsZSBpbnRlcnJ1cHQKKwkJLyogU2V0IGZsYWcgaW4gb3JkZXIgdG8gaW5mb3JtIHdyaXRlIHJvdXRpbmUgKi8KKwkJYW9fY29udGV4dC0+cGlwZV9mbGFnID0gMTsKKwkJLyogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KKwkJdG1wICY9IH5NRTQwMDBfQU9fQ1RSTF9CSVRfRU5BQkxFX0lSUTsKIAl9CiAJbWU0MDAwX291dGwodG1wLCBhb19jb250ZXh0LT5jdHJsX3JlZyk7CiAJc3Bpbl91bmxvY2soJmFvX2NvbnRleHQtPmludF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX2RldmljZS5jCmluZGV4IDg5NTBlNDcuLmJhZTE3ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9kZXZpY2UuYwpAQCAtMTg2LDYgKzE4Niw3IEBACiAKIAlyZXR1cm4gKG1lX2RldmljZV90ICopIG1lMDYwMF9kZXZpY2U7CiB9CitFWFBPUlRfU1lNQk9MKG1lMDYwMF9wY2lfY29uc3RydWN0b3IpOwogCiAvLyBJbml0IGFuZCBleGl0IG9mIG1vZHVsZS4KIApAQCAtMjEwLDYgKzIxMSwzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSBEcml2ZXIgTW9kdWxlIGZvciBNRS02eHggRGV2aWNlIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgTUUtNnh4IERldmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLy8gRXhwb3J0IHRoZSBjb25zdHJ1Y3Rvci4KLUVYUE9SVF9TWU1CT0wobWUwNjAwX3BjaV9jb25zdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9kaW8uYwppbmRleCAzYTI3NzU3Li5kMjkzMDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX2Rpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfZGlvLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtOTEsNyArOTEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9kaW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX2Rpb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMTYyLDcgKzE2Miw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfZGlvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfZGlvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMjQyLDcgKzI0Miw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfZGlvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX2Rpb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTMyOSw3ICszMjksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX2Rpb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9kaW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zMzcsNyArMzM3LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfZGlvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfZGlvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTM0Niw3ICszNDYsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTM1Niw3ICszNTYsNyBAQAogCiBtZTA2MDBfZGlvX3N1YmRldmljZV90ICptZTA2MDBfZGlvX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAogCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGRpb19pZHgsCi0JCQkJCSAgICAgICBzcGlubG9ja190ICogY3RybF9yZWdfbG9jaykKKwkJCQkJICAgICAgIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2spCiB7CiAJbWUwNjAwX2Rpb19zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CkBAIC0zODEsNyArMzgxLDcgQEAKIAkJa2ZyZWUoc3ViZGV2aWNlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCS8vIEluaXRpYWxpemUgc3BpbiBsb2Nrcy4KKwkvKiBJbml0aWFsaXplIHNwaW4gbG9ja3MuICovCiAJc3Bpbl9sb2NrX2luaXQoJnN1YmRldmljZS0+c3ViZGV2aWNlX2xvY2spOwogCiAJc3ViZGV2aWNlLT5jdHJsX3JlZ19sb2NrID0gY3RybF9yZWdfbG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfZXh0X2lycS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9leHRfaXJxLmMKaW5kZXggZWJhMThhZC4uMmY2ZmVkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9leHRfaXJxLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9leHRfaXJxLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIApAQCAtMzM3LDExICszMzcsNyBAQAogCWtmcmVlKGluc3RhbmNlKTsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTA2MDBfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWUwNjAwX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotI2VuZGlmCiB7CiAJbWUwNjAwX2V4dF9pcnFfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCXVpbnQzMl90IHN0YXR1czsKQEAgLTM5Nyw3ICszOTMsNyBAQAogCiBtZTA2MDBfZXh0X2lycV9zdWJkZXZpY2VfdCAqbWUwNjAwX2V4dF9pcnFfY29uc3RydWN0b3IodWludDMyX3QgcGx4X3JlZ19iYXNlLAogCQkJCQkJICAgICAgIHVpbnQzMl90IG1lMDYwMF9yZWdfYmFzZSwKLQkJCQkJCSAgICAgICBzcGlubG9ja190ICogaW50Y3NyX2xvY2ssCisJCQkJCQkgICAgICAgc3BpbmxvY2tfdCAqaW50Y3NyX2xvY2ssCiAJCQkJCQkgICAgICAgdW5zaWduZWQgZXh0X2lycV9pZHgsCiAJCQkJCQkgICAgICAgaW50IGlycSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfb3B0b2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfb3B0b2kuYwppbmRleCBiNmQ5NzdmLi40M2Y3MTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX29wdG9pLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9vcHRvaS5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTY4LDcgKzY4LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfb3B0b2lfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX29wdG9pX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkJIGludCBjaGFubmVsLAogCQkJCQkgaW50IHNpbmdsZV9jb25maWcsCkBAIC0xMTgsNyArMTE4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9vcHRvaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX29wdG9pX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMTY5LDcgKzE2OSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfb3B0b2lfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfb3B0b2lfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9vcHRvaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX29wdG9pX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX29wdG9pX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfb3B0b2lfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgICBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCWtmcmVlKHN1YmRldmljZSk7CiAJCXJldHVybiBOVUxMOwogCX0KLQkvLyBJbml0aWFsaXplIHNwaW4gbG9ja3MuCisJLyogSW5pdGlhbGl6ZSBzcGluIGxvY2tzLiAqLwogCXNwaW5fbG9ja19pbml0KCZzdWJkZXZpY2UtPnN1YmRldmljZV9sb2NrKTsKIAogCS8qIFNhdmUgdGhlIHN1YmRldmljZSBpbmRleCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9yZWxheS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF9yZWxheS5jCmluZGV4IDI2NjVjNjkuLjAzODM1ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfcmVsYXkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwNjAwX3JlbGF5LmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtODUsNyArODUsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9yZWxheV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfcmVsYXlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCQkgaW50IGNoYW5uZWwsCiAJCQkJCSBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTEzNSw3ICsxMzUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX3JlbGF5X2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfcmVsYXlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0yMDMsNyArMjAzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9yZWxheV9pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9yZWxheV9pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCQlpbnQgY2hhbm5lbCwKIAkJCQkJaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTI3OSw3ICsyNzksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX3JlbGF5X3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX3JlbGF5X3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0yODcsNyArMjg3LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfcmVsYXlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF9yZWxheV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTI5Niw3ICsyOTYsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF9yZWxheV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX3JlbGF5X3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICAgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA2MDBfdHRsaS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF90dGxpLmMKaW5kZXggYWI4ZTEzYi4uN2Q5NzBmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF90dGxpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDYwMF90dGxpLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtNjcsNyArNjcsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF90dGxpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDYwMF90dGxpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCQlpbnQgY2hhbm5lbCwKIAkJCQkJaW50IHNpbmdsZV9jb25maWcsCkBAIC0xMTYsNyArMTE2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF90dGxpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfdHRsaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTE2NCw3ICsxNjQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwNjAwX3R0bGlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfdHRsaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0xNzIsNyArMTcyLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA2MDBfdHRsaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwNjAwX3R0bGlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTE4MSw3ICsxODEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDYwMF90dGxpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA2MDBfdHRsaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA5MDBfZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwOTAwX2RldmljZS5jCmluZGV4IDc2NGQ1ZDMuLmU5YzY4ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA5MDBfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDkwMF9kZXZpY2UuYwpAQCAtMTUyLDYgKzE1Miw3IEBACiAKIAlyZXR1cm4gKG1lX2RldmljZV90ICopIG1lMDkwMF9kZXZpY2U7CiB9CitFWFBPUlRfU1lNQk9MKG1lMDkwMF9wY2lfY29uc3RydWN0b3IpOwogCiAvLyBJbml0IGFuZCBleGl0IG9mIG1vZHVsZS4KIApAQCAtMTc1LDYgKzE3NiwzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSBEcml2ZXIgTW9kdWxlIGZvciBNRS05eCBEZXZpY2UiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBNRS05eCBEZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8vIEV4cG9ydCB0aGUgY29uc3RydWN0b3IuCi1FWFBPUlRfU1lNQk9MKG1lMDkwMF9wY2lfY29uc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDkwMF9kaS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDkwMF9kaS5jCmluZGV4IGQ3ZDczOTQuLjQ2NjViMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA5MDBfZGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwOTAwX2RpLmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CkBAIC03MSw3ICs3MSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwOTAwX2RpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDkwMF9kaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMTE1LDcgKzExNSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA5MDBfZGlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDkwMF9kaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTE2MSw3ICsxNjEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwOTAwX2RpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwOTAwX2RpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0xNjksNyArMTY5LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTA5MDBfZGlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDkwMF9kaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTE3OCw3ICsxNzgsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDkwMF9kaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICpjYXBzKQorc3RhdGljIGludCBtZTA5MDBfZGlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAkqY2FwcyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwOTAwX2RvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUwOTAwX2RvLmMKaW5kZXggYjViOWMzYS4uYTIyNzVmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMDkwMF9kby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTA5MDBfZG8uYwpAQCAtMzUsNyArMzUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC04MSw3ICs4MSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwOTAwX2RvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDkwMF9kb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMTI1LDcgKzEyNSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA5MDBfZG9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMDkwMF9kb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTE3MSw3ICsxNzEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUwOTAwX2RvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwOTAwX2RvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMjIzLDcgKzIyMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTA5MDBfZG9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTA5MDBfZG9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTIzMSw3ICsyMzEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMDkwMF9kb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUwOTAwX2RvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUwOTAwX2RvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKmNhcHMpCitzdGF0aWMgaW50IG1lMDkwMF9kb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCSpjYXBzID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTEwMDBfZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxMDAwX2RldmljZS5jCmluZGV4IGM0NGUyMTQuLmNmMGZiOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTEwMDBfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTAwMF9kZXZpY2UuYwpAQCAtNDksOCArNDksOCBAQAogI2luY2x1ZGUgIm1lc3ViZGV2aWNlLmgiCiAjaW5jbHVkZSAibWUxMDAwX2Rpby5oIgogCi1zdGF0aWMgaW50IG1lMTAwMF9jb25maWdfbG9hZChtZV9kZXZpY2VfdCAqIG1lX2RldmljZSwgc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJICAgICAgbWVfY2ZnX2RldmljZV9lbnRyeV90ICogY29uZmlnKQorc3RhdGljIGludCBtZTEwMDBfY29uZmlnX2xvYWQobWVfZGV2aWNlX3QgKm1lX2RldmljZSwgc3RydWN0IGZpbGUgKmZpbGVwLAorCQkJICAgICAgbWVfY2ZnX2RldmljZV9lbnRyeV90ICpjb25maWcpCiB7CiAJbWUxMDAwX2RldmljZV90ICptZTEwMDBfZGV2aWNlOwogCW1lMTAwMF9kaW9fc3ViZGV2aWNlX3QgKmRpbzsKQEAgLTE4MSw2ICsxODEsNyBAQAogCiAJcmV0dXJuIChtZV9kZXZpY2VfdCAqKSBtZTEwMDBfZGV2aWNlOwogfQorRVhQT1JUX1NZTUJPTChtZTEwMDBfcGNpX2NvbnN0cnVjdG9yKTsKIAogLy8gSW5pdCBhbmQgZXhpdCBvZiBtb2R1bGUuCiBzdGF0aWMgaW50IF9faW5pdCBtZTEwMDBfaW5pdCh2b2lkKQpAQCAtMjAzLDYgKzIwNCwzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSBEcml2ZXIgTW9kdWxlIGZvciBNZWlsaGF1cyBNRS0xMDAwIERldmljZXMiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBNRS0xMDAwIERpZ2l0YWwgSS9PIERldmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLy8gRXhwb3J0IHRoZSBjb25zdHJ1Y3Rvci4KLUVYUE9SVF9TWU1CT0wobWUxMDAwX3BjaV9jb25zdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxMDAwX2Rpby5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTAwMF9kaW8uYwppbmRleCA4NzYwNWE5Li4yZDdlZDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxMDAwX2Rpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTEwMDBfZGlvLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtMzcxLDcgKzM3MSw3IEBACiAKIG1lMTAwMF9kaW9fc3ViZGV2aWNlX3QgKm1lMTAwMF9kaW9fY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGlvX2lkeCwKLQkJCQkJICAgICAgIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrKQorCQkJCQkgICAgICAgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaykKIHsKIAltZTEwMDBfZGlvX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE0MDBfZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNDAwX2RldmljZS5jCmluZGV4IGI5NWJiNGYuLmNhNzQ5OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE0MDBfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTQwMF9kZXZpY2UuYwpAQCAtMjI4LDYgKzIyOCw3IEBACiAKIAlyZXR1cm4gKG1lX2RldmljZV90ICopIG1lMTQwMF9kZXZpY2U7CiB9CitFWFBPUlRfU1lNQk9MKG1lMTQwMF9wY2lfY29uc3RydWN0b3IpOwogCiAvLyBJbml0IGFuZCBleGl0IG9mIG1vZHVsZS4KIApAQCAtMjUxLDYgKzI1MiwzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSBEcml2ZXIgTW9kdWxlIGZvciBNZWlsaGF1cyBNRS0xNHh4IGRldmljZXMiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBNRS0xNHh4IE1JTyBkZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8vIEV4cG9ydCB0aGUgY29uc3RydWN0b3IuCi1FWFBPUlRfU1lNQk9MKG1lMTQwMF9wY2lfY29uc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTQwMF9leHRfaXJxLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNDAwX2V4dF9pcnEuYwppbmRleCBiNGRmN2NjLi4wZGM2YjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNDAwX2V4dF9pcnEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNDAwX2V4dF9pcnEuYwpAQCAtMzcsNyArMzcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCkBAIC0zMjMsMTIgKzMyMyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX05PVF9TVVBQT1JURUQ7CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWUxNDAwX2V4dF9pcnFfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWUxNDAwX2V4dF9pcnFfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwKLQkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLSNlbmRpZgogewogCW1lMTQwMF9leHRfaXJxX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAl1aW50MzJfdCBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNjAwX2FvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNjAwX2FvLmMKaW5kZXggZDEyN2M2Yi4uMTJlM2M3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTYwMF9hby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE2MDBfYW8uYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKQEAgLTU1LDM2ICs1NSwzMiBAQAogCiBzdGF0aWMgdm9pZCBtZTE2MDBfYW9fZGVzdHJ1Y3RvcihzdHJ1Y3QgbWVfc3ViZGV2aWNlICpzdWJkZXZpY2UpOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotc3RhdGljIHZvaWQgbWUxNjAwX2FvX3dvcmtfY29udHJvbF90YXNrKHZvaWQgKnN1YmRldmljZSk7Ci0jZWxzZQogc3RhdGljIHZvaWQgbWUxNjAwX2FvX3dvcmtfY29udHJvbF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0jZW5kaWYKIAotc3RhdGljIGludCBtZTE2MDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywgaW50IHJlZiwgaW50IHRyaWdfY2hhbiwKIAkJCQkgICAgICBpbnQgdHJpZ190eXBlLCBpbnQgdHJpZ19lZGdlLCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTE2MDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBjaGFubmVsLCBpbnQgKnZhbHVlLAogCQkJCSAgICBpbnQgdGltZV9vdXQsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lMTYwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGNoYW5uZWwsIGludCB2YWx1ZSwKIAkJCQkgICAgIGludCB0aW1lX291dCwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcik7Ci1zdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICp0eXBlLAorc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICp0eXBlLAogCQkJCQkgIGludCAqc3VidHlwZSk7Ci1zdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICpjYXBzKTsKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgdW5pdCwgaW50ICptaW4sIGludCAqbWF4LAogCQkJCQkgICAgaW50ICptYXhkYXRhLCBpbnQgKnJhbmdlKTsKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCB1bml0LAorc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgdW5pdCwKIAkJCQkJIGludCAqY291bnQpOwotc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50IHJhbmdlLAorc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgcmFuZ2UsCiAJCQkJICAgICAgaW50ICp1bml0LCBpbnQgKm1pbiwgaW50ICptYXgsCiAJCQkJICAgICAgaW50ICptYXhkYXRhKTsKIApAQCAtOTQsMTAgKzkwLDkgQEAKIG1lMTYwMF9hb19zdWJkZXZpY2VfdCAqbWUxNjAwX2FvX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBhb19pZHgsCiAJCQkJCSAgICAgaW50IGN1cnIsCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIGNvbmZpZ19yZWdzX2xvY2ssCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIGFvX3NoYWRvd3NfbG9jaywKLQkJCQkJICAgICBtZTE2MDBfYW9fc2hhZG93X3QgKgotCQkJCQkgICAgIGFvX3JlZ3Nfc2hhZG93cywKKwkJCQkJICAgICBzcGlubG9ja190ICpjb25maWdfcmVnc19sb2NrLAorCQkJCQkgICAgIHNwaW5sb2NrX3QgKmFvX3NoYWRvd3NfbG9jaywKKwkJCQkJICAgICBtZTE2MDBfYW9fc2hhZG93X3QgKmFvX3JlZ3Nfc2hhZG93cywKIAkJCQkJICAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWUxNjAwX3dxKQogewogCW1lMTYwMF9hb19zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwpAQCAtMjAwLDEzICsxOTUsOCBAQAogCXN1YmRldmljZS0+bWUxNjAwX3dvcmtxdWV1ZSA9IG1lMTYwMF93cTsKIAogLyogd29ya3F1ZXVlIEFQSSBjaGFuZ2VkIGluIGtlcm5lbCAyLjYuMjAgKi8KLSNpZiAoIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkgKQotCUlOSVRfV09SSygmc3ViZGV2aWNlLT5hb19jb250cm9sX3Rhc2ssIG1lMTYwMF9hb193b3JrX2NvbnRyb2xfdGFzaywKLQkJICAodm9pZCAqKXN1YmRldmljZSk7Ci0jZWxzZQogCUlOSVRfREVMQVlFRF9XT1JLKCZzdWJkZXZpY2UtPmFvX2NvbnRyb2xfdGFzaywKIAkJCSAgbWUxNjAwX2FvX3dvcmtfY29udHJvbF90YXNrKTsKLSNlbmRpZgogCXJldHVybiBzdWJkZXZpY2U7CiB9CiAKQEAgLTIzMSw3ICsyMjEsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBtZTE2MDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGZsYWdzKQogewogCW1lMTYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0zMTMsNyArMzAzLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTE2MDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC01NDUsNyArNTM1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTE2MDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lMTYwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTYxMiw3ICs2MDIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtNzU2LDcgKzc0Niw5IEBACiAJcXVldWVfZGVsYXllZF93b3JrKGluc3RhbmNlLT5tZTE2MDBfd29ya3F1ZXVlLAogCQkJICAgJmluc3RhbmNlLT5hb19jb250cm9sX3Rhc2ssIDEpOwogCi0JaWYgKCghZmxhZ3MgJiBNRV9JT19TSU5HTEVfVFlQRV9XUklURV9OT05CTE9DS0lORykgJiYgKChpbnN0YW5jZS0+YW9fcmVnc19zaGFkb3dzKS0+dHJpZ2dlciAmIGluc3RhbmNlLT5hb19pZHgpKSB7CS8vQmxvY2tpbmcgbW9kZS4gV2FpdCBmb3Igc29mdHdhcmUgdHJpZ2dlci4KKwlpZiAoKCEoZmxhZ3MgJiBNRV9JT19TSU5HTEVfVFlQRV9XUklURV9OT05CTE9DS0lORykpICYmCisJICAgICgoaW5zdGFuY2UtPmFvX3JlZ3Nfc2hhZG93cyktPnRyaWdnZXIgJiBpbnN0YW5jZS0+YW9faWR4KSkgeworCQkvKiBCbG9ja2luZyBtb2RlLiBXYWl0IGZvciBzb2Z0d2FyZSB0cmlnZ2VyLiAqLwogCQlpZiAodGltZV9vdXQpIHsKIAkJCWRlbGF5ID0gKHRpbWVfb3V0ICogSFopIC8gMTAwMDsKIAkJCWlmIChkZWxheSA9PSAwKQpAQCAtNzkzLDcgKzc4NSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKQogewogCW1lMTYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC04MDUsNyArNzk3LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqdHlwZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqdHlwZSwKIAkJCQkJICBpbnQgKnN1YnR5cGUpCiB7CiAJbWUxNjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTgxOCwxNCArODEwLDE0IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKmNhcHMpCitzdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCSpjYXBzID0gTUVfQ0FQU19BT19UUklHX1NZTkNIUk9OT1VTOwogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMTYwMF9hb19xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50IHVuaXQsCiAJCQkJCSAgICBpbnQgKm1pbiwKIAkJCQkJICAgIGludCAqbWF4LCBpbnQgKm1heGRhdGEsIGludCAqcmFuZ2UpCkBAIC05MDMsNyArODk1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJIGludCB1bml0LCBpbnQgKmNvdW50KQogewogCW1lMTYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC05MjgsNyArOTIwLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTE2MDBfYW9fcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWUxNjAwX2FvX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBpbnQgcmFuZ2UsCiAJCQkJICAgICAgaW50ICp1bml0LAogCQkJCSAgICAgIGludCAqbWluLCBpbnQgKm1heCwgaW50ICptYXhkYXRhKQpAQCAtOTYwLDIyICs5NTIsMTQgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLXN0YXRpYyB2b2lkIG1lMTYwMF9hb193b3JrX2NvbnRyb2xfdGFzayh2b2lkICpzdWJkZXZpY2UpCi0jZWxzZQogc3RhdGljIHZvaWQgbWUxNjAwX2FvX3dvcmtfY29udHJvbF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLSNlbmRpZgogewogCW1lMTYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJaW50IHJlc2NoZWR1bGUgPSAxOwogCWludCBzaWduYWxpbmcgPSAwOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCWluc3RhbmNlID0gKG1lMTYwMF9hb19zdWJkZXZpY2VfdCAqKSBzdWJkZXZpY2U7Ci0jZWxzZQogCWluc3RhbmNlID0KIAkgICAgY29udGFpbmVyX29mKCh2b2lkICopd29yaywgbWUxNjAwX2FvX3N1YmRldmljZV90LCBhb19jb250cm9sX3Rhc2spOwotI2VuZGlmCiAKIAlQSU5GTygiPCVzOiAlbGQ+IGV4ZWN1dGVkLiBpZHg9JWRcbiIsIF9fZnVuY19fLCBqaWZmaWVzLAogCSAgICAgIGluc3RhbmNlLT5hb19pZHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTYwMF9hby5oIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTYwMF9hby5oCmluZGV4IGI4MmJmNWEuLjQ4MjdkY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE2MDBfYW8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNjAwX2FvLmgKQEAgLTk4LDExICs5OCw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xdWV1ZTsJCQkJCQkJLyoqPCBXYWl0IHF1ZXVlIHRvIHB1dCBvbiB0YXNrcyB3YWl0aW5nIGZvciBkYXRhIHRvIGFycml2ZS4gKi8KIAltZTE2MDBfYW9fdGltZW91dF90IHRpbWVvdXQ7CQkJCQkJCS8qKjwgVGhlIHRpbWVvdXQgZm9yIHN0YXJ0IGluIGJsb2NraW5nIGFuZCBub24tYmxvY2tpbmcgbW9kZS4gKi8KIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWUxNjAwX3dvcmtxdWV1ZTsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0Jc3RydWN0IHdvcmtfc3RydWN0IGFvX2NvbnRyb2xfdGFzazsKLSNlbHNlCiAJc3RydWN0IGRlbGF5ZWRfd29yayBhb19jb250cm9sX3Rhc2s7Ci0jZW5kaWYKIAogCXZvbGF0aWxlIGludCBhb19jb250cm9sX3Rhc2tfZmxhZzsJCQkJCQkvKio8IEZsYWcgY29udHJvbGluZyByZWV4ZWN1dGluZyBvZiBjb250cm9sIHRhc2sgKi8KIH0gbWUxNjAwX2FvX3N1YmRldmljZV90OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTYwMF9kZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTE2MDBfZGV2aWNlLmMKaW5kZXggM2JjMmNiMS4uYzI0NGU5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lMTYwMF9kZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWUxNjAwX2RldmljZS5jCkBAIC00OCw3ICs0OCw3IEBACiAjaW5jbHVkZSAibWVzdWJkZXZpY2UuaCIKICNpbmNsdWRlICJtZTE2MDBfZGV2aWNlLmgiCiAKLXN0YXRpYyB2b2lkIG1lMTYwMF9zZXRfcmVnaXN0cnkobWUxNjAwX2RldmljZV90ICogc3ViZGV2aWNlLCB1aW50MzJfdCByZWdfYmFzZSk7CitzdGF0aWMgdm9pZCBtZTE2MDBfc2V0X3JlZ2lzdHJ5KG1lMTYwMF9kZXZpY2VfdCAqc3ViZGV2aWNlLCB1aW50MzJfdCByZWdfYmFzZSk7CiBzdGF0aWMgdm9pZCBtZTE2MDBfZGVzdHJ1Y3RvcihzdHJ1Y3QgbWVfZGV2aWNlICpkZXZpY2UpOwogCiAvKioKQEAgLTE0Miw2ICsxNDIsNyBAQAogCiAJcmV0dXJuIChtZV9kZXZpY2VfdCAqKSBtZTE2MDBfZGV2aWNlOwogfQorRVhQT1JUX1NZTUJPTChtZTE2MDBfcGNpX2NvbnN0cnVjdG9yKTsKIAogc3RhdGljIHZvaWQgbWUxNjAwX2Rlc3RydWN0b3Ioc3RydWN0IG1lX2RldmljZSAqZGV2aWNlKQogewpAQCAtMTU3LDcgKzE1OCw3IEBACiAJa2ZyZWUobWUxNjAwX2RldmljZSk7CiB9CiAKLXN0YXRpYyB2b2lkIG1lMTYwMF9zZXRfcmVnaXN0cnkobWUxNjAwX2RldmljZV90ICogc3ViZGV2aWNlLCB1aW50MzJfdCByZWdfYmFzZSkKK3N0YXRpYyB2b2lkIG1lMTYwMF9zZXRfcmVnaXN0cnkobWUxNjAwX2RldmljZV90ICpzdWJkZXZpY2UsIHVpbnQzMl90IHJlZ19iYXNlKQogewkJCQkvLyBDcmVhdGUgc2hhZG93IHN0cnVjdHVyZS4KIAlpZiAoc3ViZGV2aWNlLT5hb19yZWdzX3NoYWRvd3MuY291bnQgPj0gMSkgewogCQlzdWJkZXZpY2UtPmFvX3JlZ3Nfc2hhZG93cy5yZWdpc3RyeVswXSA9CkBAIC0yNTYsNiArMjU3LDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIE1FLTE2MDAgRGV2aWNlIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgTUUtMTYwMCBEZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8vIEV4cG9ydCB0aGUgY29uc3RydWN0b3IuCi1FWFBPUlRfU1lNQk9MKG1lMTYwMF9wY2lfY29uc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9haS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9haS5jCmluZGV4IDBhOGM5ZDcuLmEzY2ZlZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYWkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FpLmMKQEAgLTM2LDggKzM2LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNTcsMTAgKzU3LDEwIEBACiAgKi8KIAogc3RhdGljIHZvaWQgbWU0NjAwX2FpX2Rlc3RydWN0b3Ioc3RydWN0IG1lX3N1YmRldmljZSAqc3ViZGV2aWNlKTsKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBmbGFncyk7CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtNjgsMTIwICs2OCwxMTIgQEAKIAkJCQkgICAgICBpbnQgdHJpZ19jaGFuLAogCQkJCSAgICAgIGludCB0cmlnX3R5cGUsIGludCB0cmlnX2VkZ2UsIGludCBmbGFncyk7CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpOwogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKiBjb25maWdfbGlzdCwKKwkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKmNvbmZpZ19saXN0LAogCQkJCSAgICAgIGludCBjb3VudCwKLQkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICogdHJpZ2dlciwKKwkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICp0cmlnZ2VyLAogCQkJCSAgICAgIGludCBmaWZvX2lycV90aHJlc2hvbGQsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IHJlYWRfbW9kZSwKIAkJCQkgICAgaW50ICp2YWx1ZXMsIGludCAqY291bnQsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCQkgIGludCB0aW1lX291dCwgaW50ICpjb3VudCwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgaW5saW5lIG1lNDYwMF9haV9pb19zdHJlYW1fcmVhZF9nZXRfdmFsdWUobWU0NjAwX2FpX3N1YmRldmljZV90ICoKK3N0YXRpYyBpbmxpbmUgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fcmVhZF9nZXRfdmFsdWUobWU0NjAwX2FpX3N1YmRldmljZV90ICoKIAkJCQkJCSAgICAgaW5zdGFuY2UsIGludCAqdmFsdWVzLAogCQkJCQkJICAgICBjb25zdCBpbnQgY291bnQsCiAJCQkJCQkgICAgIGNvbnN0IGludCBmbGFncyk7CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IHN0YXJ0X21vZGUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgc3RvcF9tb2RlLCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IHdhaXQsCiAJCQkJICAgICAgaW50ICpzdGF0dXMsIGludCAqdmFsdWVzLCBpbnQgZmxhZ3MpOwogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50IHVuaXQsCiAJCQkJCSAgICBpbnQgKm1pbiwKIAkJCQkJICAgIGludCAqbWF4LCBpbnQgKm1heGRhdGEsIGludCAqcmFuZ2UpOwotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJIGludCB1bml0LCBpbnQgKmNvdW50KTsKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgaW50IHJhbmdlLAogCQkJCSAgICAgIGludCAqdW5pdCwKIAkJCQkgICAgICBpbnQgKm1pbiwgaW50ICptYXgsIGludCAqbWF4ZGF0YSk7Ci1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV90aW1lcihtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3RpbWVyKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIGludCB0aW1lciwKIAkJCQkgaW50ICpiYXNlX2ZyZXF1ZW5jeSwKIAkJCQkgbG9uZyBsb25nICptaW5fdGlja3MsIGxvbmcgbG9uZyAqbWF4X3RpY2tzKTsKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcik7Ci1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpOwotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqY2Fwcyk7CiBzdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9zdWJkZXZpY2VfY2Fwc19hcmdzKHN0cnVjdCBtZV9zdWJkZXZpY2UgKnN1YmRldmljZSwKIAkJCQkJICAgICAgIGludCBjYXAsIGludCAqYXJncywgaW50IGNvdW50KTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTQ2MDBfYWlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lNDYwMF9haV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0jZW5kaWYKIAotc3RhdGljIGludCBhaV9tdXhfdG9nZ2xlcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UpOworc3RhdGljIGludCBhaV9tdXhfdG9nZ2xlcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKnN1YmRldmljZSk7CiAKIC8qKiBJbW1pZGlhdGUgc3RvcC4KICogUmVzZXQgYWxsIElSUSdzIHNvdXJjZXMuIChibG9jayBsYWNoZXMpCiAqIFByZXNlcnZlIEZJRk8KICovCi1zdGF0aWMgaW50IGFpX3N0b3BfaW1tZWRpYXRlbHkobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpOworc3RhdGljIGludCBhaV9zdG9wX2ltbWVkaWF0ZWx5KG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpOwogCiAvKiogSW1taWRpYXRlIHN0b3AuCiAqIFJlc2V0IGFsbCBJUlEncyBzb3VyY2VzLiAoYmxvY2sgbGFjaGVzKQogKiBSZXNldCBkYXRhIEZJRk8KICovCi12b2lkIGlubGluZSBhaV9zdG9wX2lzcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSk7CitpbmxpbmUgdm9pZCBhaV9zdG9wX2lzcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKTsKIAogLyoqIEludGVycnVwdCBsb2dpY3MuCiAqIFJlYWQgZGF0YXMKICogUmVzZXQgbGF0Y2hlcwogKi8KLXZvaWQgYWlfbGltaXRlZF9pc3IobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGNvbnN0IHVpbnQzMl90IGlycV9zdGF0dXMsCit2b2lkIGFpX2xpbWl0ZWRfaXNyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGNvbnN0IHVpbnQzMl90IGlycV9zdGF0dXMsCiAJCSAgICBjb25zdCB1aW50MzJfdCBjdHJsX3N0YXR1cyk7Ci12b2lkIGFpX2luZmluaXRlX2lzcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwKK3ZvaWQgYWlfaW5maW5pdGVfaXNyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsCiAJCSAgICAgY29uc3QgdWludDMyX3QgaXJxX3N0YXR1cywgY29uc3QgdWludDMyX3QgY3RybF9zdGF0dXMpOwogCiAvKiogTGFzdCBjaHVuY2sgb2YgZGF0YXMuIFdlIG11c3QgcmVzY2hlZHVsZSBzYW1wbGUgY291bnRlci4KICogTGVhdmluZyBTQ19SRUxPQUQgZG9lc24ndCBkbyBhbnkgaGFybSwgYnV0IGluIHNvbWUgYmFkIGNhc2UgY2FuIG1ha2UgZXh0cmEgaW50ZXJydXB0cy4KICogV2hlbiB0aHJlc2hvbGQgaXMgd3JvbmdseSBzZXQgc29tZSBJUlEgYXJlIGxvc3QuKCEhISkKICovCi12b2lkIGlubGluZSBhaV9yZXNjaGVkdWxlX1NDKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKTsKK2lubGluZSB2b2lkIGFpX3Jlc2NoZWR1bGVfU0MobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSk7CiAKIC8qKiBSZWFkIGRhdGFzIGZyb20gRklGTyBhbmQgY29weSB0aGVtIHRvIGJ1ZmZlciAqLwotc3RhdGljIGludCBpbmxpbmUgYWlfcmVhZF9kYXRhKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLAorc3RhdGljIGlubGluZSBpbnQgYWlfcmVhZF9kYXRhKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsCiAJCQkgICAgICAgY29uc3QgaW50IGNvdW50KTsKIAogLyoqIENvcHkgcmVzdCBvZiBkYXRhIGZyb20gZmlmbyB0byBjaXJjdWxhciBidWZmZXIuKi8KLXN0YXRpYyBpbnQgaW5saW5lIGFpX3JlYWRfZGF0YV9wb29saW5nKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKTsKK3N0YXRpYyBpbmxpbmUgaW50IGFpX3JlYWRfZGF0YV9wb29saW5nKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpOwogCiAvKiogU2V0IElTTSB0byBuZXh0IHN0YXRlIGZvciBpbmZpbml0ZSBkYXRhIGFxdXNhdGlvbiBtb2RlKi8KLXZvaWQgaW5saW5lIGFpX2luZmluaXRlX0lTTShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSk7CitpbmxpbmUgdm9pZCBhaV9pbmZpbml0ZV9JU00obWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSk7CiAKIC8qKiBTZXQgSVNNIHRvIG5leHQgc3RhdGUgZm9yIGRlZmluZSBhbW91bnQgb2YgZGF0YSBhcXVzYXRpb24gbW9kZSovCi12b2lkIGlubGluZSBhaV9saW1pdGVkX0lTTShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwKK2lubGluZSB2b2lkIGFpX2xpbWl0ZWRfSVNNKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsCiAJCQkgICB1aW50MzJfdCBpcnFfc3RhdHVzKTsKIAogLyoqIFNldCBJU00gdG8gbmV4dCBzdGFnZSBmb3IgbGltaXRlZCBtb2RlICovCi12b2lkIGlubGluZSBhaV9kYXRhX2FjcXVpc2l0aW9uX2xvZ2ljKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKTsKK2lubGluZSB2b2lkIGFpX2RhdGFfYWNxdWlzaXRpb25fbG9naWMobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSk7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi1zdGF0aWMgdm9pZCBtZTQ2MDBfYWlfd29ya19jb250cm9sX3Rhc2sodm9pZCAqc3ViZGV2aWNlKTsKLSNlbHNlCiBzdGF0aWMgdm9pZCBtZTQ2MDBfYWlfd29ya19jb250cm9sX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLSNlbmRpZgogCiAvKiBEZWZpbml0aW9ucwogICovCkBAIC0xOTIsNyArMTg0LDcgQEAKIAkJCQkJICAgICBpbnQgaXNvbGF0ZWQsCiAJCQkJCSAgICAgaW50IHNoLAogCQkJCQkgICAgIGludCBpcnEsCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2ssCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaywKIAkJCQkJICAgICBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWU0NjAwX3dxKQogewogCW1lNDYwMF9haV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwpAQCAtMzYwLDEzICszNTIsOCBAQAogCXN1YmRldmljZS0+bWU0NjAwX3dvcmtxdWV1ZSA9IG1lNDYwMF93cTsKIAogLyogd29ya3F1ZXVlIEFQSSBjaGFuZ2VkIGluIGtlcm5lbCAyLjYuMjAgKi8KLSNpZiAoIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkgKQotCUlOSVRfV09SSygmc3ViZGV2aWNlLT5haV9jb250cm9sX3Rhc2ssIG1lNDYwMF9haV93b3JrX2NvbnRyb2xfdGFzaywKLQkJICAodm9pZCAqKXN1YmRldmljZSk7Ci0jZWxzZQogCUlOSVRfREVMQVlFRF9XT1JLKCZzdWJkZXZpY2UtPmFpX2NvbnRyb2xfdGFzaywKIAkJCSAgbWU0NjAwX2FpX3dvcmtfY29udHJvbF90YXNrKTsKLSNlbmRpZgogCiAJcmV0dXJuIHN1YmRldmljZTsKIH0KQEAgLTM5Nyw3ICszODQsNyBAQAogCWtmcmVlKGluc3RhbmNlKTsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGZsYWdzKQogewogCW1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC01MTksNyArNTA2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTcwOSw3ICs2OTYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC05MTUsMTEgKzkwMiwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqIGNvbmZpZ19saXN0LAorCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqY29uZmlnX2xpc3QsCiAJCQkJICAgICAgaW50IGNvdW50LAotCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKiB0cmlnZ2VyLAorCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKnRyaWdnZXIsCiAJCQkJICAgICAgaW50IGZpZm9faXJxX3RocmVzaG9sZCwgaW50IGZsYWdzKQogewogCW1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0xNTg2LDE1ICsxNTczLDE1IEBACiAJCSAgICBNRV9TSU5HTEVfQ0hBTk5FTF9OT1RfQ09ORklHVVJFRDsKIAl9CiAKLSAgICAgIFZFUklGWV9FUlJPUjoJCS8vIEVycm9yIGluIGNvZGUuIFdyb25nIHNldHRpbmcgY2hlY2suIFRoaXMgc2hvdWxkIG5ldmVyIGV2ZXIgaGFwcGVuZCEKK1ZFUklGWV9FUlJPUjoJCS8vIEVycm9yIGluIGNvZGUuIFdyb25nIHNldHRpbmcgY2hlY2suIFRoaXMgc2hvdWxkIG5ldmVyIGV2ZXIgaGFwcGVuZCEKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+c3ViZGV2aWNlX2xvY2ssIGNwdV9mbGFncyk7Ci0gICAgICBFUlJPUjoJCQkvLyBFcnJvciBpbiBzZXR0aW5ncy4KK0VSUk9SOgkJCS8vIEVycm9yIGluIHNldHRpbmdzLgogCU1FX1NVQkRFVklDRV9FWElUOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkJICBpbnQgdGltZV9vdXQsIGludCAqY291bnQsIGludCBmbGFncykKIHsKQEAgLTE2NzcsNyArMTY2NCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpbmxpbmUgbWU0NjAwX2FpX2lvX3N0cmVhbV9yZWFkX2dldF92YWx1ZShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKgorc3RhdGljIGlubGluZSBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9yZWFkX2dldF92YWx1ZShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKgogCQkJCQkJICAgICBpbnN0YW5jZSwgaW50ICp2YWx1ZXMsCiAJCQkJCQkgICAgIGNvbnN0IGludCBjb3VudCwKIAkJCQkJCSAgICAgY29uc3QgaW50IGZsYWdzKQpAQCAtMTcxMiw3ICsxNjk5LDcgQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCByZWFkX21vZGUsCiAJCQkJICAgIGludCAqdmFsdWVzLCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpCkBAIC0xODM4LDcgKzE4MjUsNyBAQAogKiBAcGFyYW0gaW5zdGFuY2UgVGhlIHN1YmRldmljZSBpbnN0YW5jZSAocG9pbnRlcikuCiAqLwogCi1zdGF0aWMgaW50IGFpX3N0b3BfaW1tZWRpYXRlbHkobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpCitzdGF0aWMgaW50IGFpX3N0b3BfaW1tZWRpYXRlbHkobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSkKIHsKIAl1bnNpZ25lZCBsb25nIGNwdV9mbGFncyA9IDA7CiAJdm9sYXRpbGUgdWludDMyX3QgY3RybDsKQEAgLTE4NzcsNyArMTg2NCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IHN0YXJ0X21vZGUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQogewpAQCAtMjA1NSwxMyArMjA0MiwxMyBAQAogCSAgICAgICh0bXAgJiBNRTQ2MDBfQUlfQ1RSTF9CSVRfU0NfSVJRX1JFU0VUKSA/ICJyZXNldCIgOiAid29yayIpOwogI2VuZGlmCiAKLSAgICAgIEVSUk9SOgorRVJST1I6CiAJTUVfU1VCREVWSUNFX0VYSVQ7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgd2FpdCwKIAkJCQkgICAgICBpbnQgKnN0YXR1cywgaW50ICp2YWx1ZXMsIGludCBmbGFncykKQEAgLTIxMzksNyArMjEyNiw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfaW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9haV9pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBzdG9wX21vZGUsIGludCBmbGFncykKIHsKQEAgLTIyMzYsNyArMjIyMyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCB1bml0LAogCQkJCQkgICAgaW50ICptaW4sCiAJCQkJCSAgICBpbnQgKm1heCwgaW50ICptYXhkYXRhLCBpbnQgKnJhbmdlKQpAQCAtMjI4OCw3ICsyMjc1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJIGludCB1bml0LCBpbnQgKmNvdW50KQogewogCW1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0yMzA2LDcgKzIyOTMsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIGludCByYW5nZSwKIAkJCQkgICAgICBpbnQgKnVuaXQsCiAJCQkJICAgICAgaW50ICptaW4sIGludCAqbWF4LCBpbnQgKm1heGRhdGEpCkBAIC0yMzMwLDcgKzIzMTcsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV90aW1lcihtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3RpbWVyKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIGludCB0aW1lciwKIAkJCQkgaW50ICpiYXNlX2ZyZXF1ZW5jeSwKIAkJCQkgbG9uZyBsb25nICptaW5fdGlja3MsIGxvbmcgbG9uZyAqbWF4X3RpY2tzKQpAQCAtMjM3MCw3ICsyMzU3LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKQogewogCW1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0yMzgzLDcgKzIzNzAsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9haV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC4gaWR4PTBcbiIpOwpAQCAtMjM5NCw3ICsyMzgxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYWlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqY2FwcykKK3N0YXRpYyBpbnQgbWU0NjAwX2FpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLiBpZHg9MFxuIik7CiAKQEAgLTI0MzksNyArMjQyNiw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotdm9pZCBhaV9saW1pdGVkX2lzcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgY29uc3QgdWludDMyX3QgaXJxX3N0YXR1cywKK3ZvaWQgYWlfbGltaXRlZF9pc3IobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSwgY29uc3QgdWludDMyX3QgaXJxX3N0YXR1cywKIAkJICAgIGNvbnN0IHVpbnQzMl90IGN0cmxfc3RhdHVzKQogewogCWludCB0b19yZWFkOwpAQCAtMjU0Nyw3ICsyNTM0LDcgQEAKIAl9CiB9CiAKLXZvaWQgYWlfaW5maW5pdGVfaXNyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLAordm9pZCBhaV9pbmZpbml0ZV9pc3IobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSwKIAkJICAgICBjb25zdCB1aW50MzJfdCBpcnFfc3RhdHVzLCBjb25zdCB1aW50MzJfdCBjdHJsX3N0YXR1cykKIHsKIAlpbnQgdG9fcmVhZDsKQEAgLTI2MDMsMTEgKzI1OTAsNyBAQAogCX0KIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTQ2MDBfYWlfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU0NjAwX2FpX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotI2VuZGlmCiB7CQkJCS8vLyBAbm90ZSBUaGlzIGlzIHRpbWUgY3JpdGljYWwgZnVuY3Rpb24hCiAJdWludDMyX3QgaXJxX3N0YXR1czsKIAl1aW50MzJfdCBjdHJsX3N0YXR1czsKQEAgLTI4MDMsNyArMjc4Niw3IEBACiAqCiAqIEBwYXJhbSBpbnN0YW5jZSBUaGUgc3ViZGV2aWNlIGluc3RhbmNlIChwb2ludGVyKS4KICovCi12b2lkIGlubGluZSBhaV9zdG9wX2lzcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSkKK2lubGluZSB2b2lkIGFpX3N0b3BfaXNyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpCiB7CQkJCS8vLyBAbm90ZSBUaGlzIGlzIHNvZnQgdGltZSBjcml0aWNhbCBmdW5jdGlvbiEKIAlyZWdpc3RlciB1aW50MzJfdCB0bXA7CiAKQEAgLTI4MjksNyArMjgxMiw3IEBACiAqIEByZXR1cm4gT24gc3VjY2VzczogTnVtYmVyIG9mIGNvcGllZCB2YWx1ZXMuCiAqIEByZXR1cm4gT24gZXJyb3I6IC1NRV9FUlJOT19SSU5HX0JVRkZFUl9PVkVSRkxPVy4KICovCi1zdGF0aWMgaW50IGlubGluZSBhaV9yZWFkX2RhdGEobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UsCitzdGF0aWMgaW5saW5lIGludCBhaV9yZWFkX2RhdGEobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSwKIAkJCSAgICAgICBjb25zdCBpbnQgY291bnQpCiB7CQkJCS8vLyBAbm90ZSBUaGlzIGlzIHRpbWUgY3JpdGljYWwgZnVuY3Rpb24hCiAJaW50IGMgPSBjb3VudDsKQEAgLTI4NzUsNyArMjg1OCw3IEBACiAJcmV0dXJuIGNvcGllZDsKIH0KIAotdm9pZCBpbmxpbmUgYWlfaW5maW5pdGVfSVNNKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKQoraW5saW5lIHZvaWQgYWlfaW5maW5pdGVfSVNNKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UpCiB7CQkJCS8vLyBAbm90ZSBUaGlzIGlzIHRpbWUgY3JpdGljYWwgZnVuY3Rpb24hCiAJcmVnaXN0ZXIgdm9sYXRpbGUgdWludDMyX3QgY3RybF9zZXQsIGN0cmxfcmVzZXQsIHRtcDsKIApAQCAtMjkyNSw3ICsyOTA4LDcgQEAKIAogfQogCi12b2lkIGlubGluZSBhaV9saW1pdGVkX0lTTShtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwKK2lubGluZSB2b2lkIGFpX2xpbWl0ZWRfSVNNKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsCiAJCQkgICB1aW50MzJfdCBpcnFfc3RhdHVzKQogewkJCQkvLy8gQG5vdGUgVGhpcyBpcyB0aW1lIGNyaXRpY2FsIGZ1bmN0aW9uIQogCXJlZ2lzdGVyIHZvbGF0aWxlIHVpbnQzMl90IGN0cmxfc2V0LCBjdHJsX3Jlc2V0ID0gMHhGRkZGRkZGRiwgdG1wOwpAQCAtMjk4Niw3ICsyOTY5LDcgQEAKICoJTGVhdmluZyBTQ19SRUxPQUQgZG9lc24ndCBkbyBhbnkgaGFybSwgYnV0IGluIHNvbWUgYmFkIGNhc2UgY2FuIG1ha2UgZXh0cmEgaW50ZXJydXB0cy4KICoJQHdhcm5pbmcgV2hlbiB0aHJlc2hvbGQgaXMgd3JvbmdseSBzZXQgc29tZSBJUlEgYXJlIGxvc3QuKCEhISkKICovCi12b2lkIGlubGluZSBhaV9yZXNjaGVkdWxlX1NDKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKQoraW5saW5lIHZvaWQgYWlfcmVzY2hlZHVsZV9TQyhtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKQogewogCXJlZ2lzdGVyIHVpbnQzMl90IHJlc3Q7CiAKQEAgLTMwMTgsNyArMzAwMSw3IEBACiB9CiAKIC8qKiBTdGFydCB0aGUgSVNNLiBBbGwgbXVzdCBiZSByZXNldGVkIGJlZm9yZSBlbnRlciB0byB0aGlzIGZ1bmN0aW9uLiAqLwotdm9pZCBpbmxpbmUgYWlfZGF0YV9hY3F1aXNpdGlvbl9sb2dpYyhtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSkKK2lubGluZSB2b2lkIGFpX2RhdGFfYWNxdWlzaXRpb25fbG9naWMobWU0NjAwX2FpX3N1YmRldmljZV90ICppbnN0YW5jZSkKIHsKIAlyZWdpc3RlciB1aW50MzJfdCB0bXA7CiAKQEAgLTMxNjYsNyArMzE0OSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGFpX211eF90b2dnbGVyKG1lNDYwMF9haV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlKQorc3RhdGljIGludCBhaV9tdXhfdG9nZ2xlcihtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKQogewogCXVpbnQzMl90IHRtcDsKIApAQCAtMzI3Niw3ICszMjU5LDcgQEAKICogQHJldHVybiBPbiBzdWNjZXNzOiBOdW1iZXIgb2YgY29waWVkIHZhbHVlcy4KICogQHJldHVybiBPbiBlcnJvcjogTmVnYXRpdmUgZXJyb3IgY29kZSAtTUVfRVJSTk9fUklOR19CVUZGRVJfT1ZFUkZMT1cuCiAqLwotc3RhdGljIGludCBpbmxpbmUgYWlfcmVhZF9kYXRhX3Bvb2xpbmcobWU0NjAwX2FpX3N1YmRldmljZV90ICogaW5zdGFuY2UpCitzdGF0aWMgaW5saW5lIGludCBhaV9yZWFkX2RhdGFfcG9vbGluZyhtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlKQogewkJCQkvLy8gQG5vdGUgVGhpcyBpcyB0aW1lIGNyaXRpY2FsIGZ1bmN0aW9uIQogCWludCBlbXB0eV9zcGFjZTsKIAlpbnQgY29waWVkID0gMDsKQEAgLTMzMTAsMTEgKzMyOTMsNyBAQAogCXJldHVybiAoIXN0YXR1cykgPyBjb3BpZWQgOiAtTUVfRVJSTk9fUklOR19CVUZGRVJfT1ZFUkZMT1c7CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi1zdGF0aWMgdm9pZCBtZTQ2MDBfYWlfd29ya19jb250cm9sX3Rhc2sodm9pZCAqc3ViZGV2aWNlKQotI2Vsc2UKIHN0YXRpYyB2b2lkIG1lNDYwMF9haV93b3JrX2NvbnRyb2xfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi0jZW5kaWYKIHsKIAltZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCXVpbnQzMl90IHN0YXR1czsKQEAgLTMzMjMsMTIgKzMzMDIsOCBAQAogCWludCByZXNjaGVkdWxlID0gMDsKIAlpbnQgc2lnbmFsaW5nID0gMDsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQlpbnN0YW5jZSA9IChtZTQ2MDBfYWlfc3ViZGV2aWNlX3QgKikgc3ViZGV2aWNlOwotI2Vsc2UKIAlpbnN0YW5jZSA9CiAJICAgIGNvbnRhaW5lcl9vZigodm9pZCAqKXdvcmssIG1lNDYwMF9haV9zdWJkZXZpY2VfdCwgYWlfY29udHJvbF90YXNrKTsKLSNlbmRpZgogCVBJTkZPKCI8JXM6ICVsZD4gZXhlY3V0ZWQuXG4iLCBfX2Z1bmNfXywgamlmZmllcyk7CiAKIAlzdGF0dXMgPSBpbmwoaW5zdGFuY2UtPnN0YXR1c19yZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9haS5oIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9haS5oCmluZGV4IDFkNWExYjkuLjEwNmUxOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYWkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FpLmgKQEAgLTEzOSwxMSArMTM5LDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3F1ZXVlOwkJCQkJLyoqPCBXYWl0IHF1ZXVlIHRvIHB1dCBvbiB0YXNrcyB3YWl0aW5nIGZvciBkYXRhIHRvIGFycml2ZS4gKi8KIAogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptZTQ2MDBfd29ya3F1ZXVlOwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYWlfY29udHJvbF90YXNrOwotI2Vsc2UKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGFpX2NvbnRyb2xfdGFzazsKLSNlbmRpZgogCiAJdm9sYXRpbGUgaW50IGFpX2NvbnRyb2xfdGFza19mbGFnOwkJCQkvKio8IEZsYWcgY29udHJvbGluZyByZWV4ZWN1dGluZyBvZiBjb250cm9sIHRhc2sgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9hby5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9hby5jCmluZGV4IGUyYmVjODIuLmViNDcyNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FvLmMKQEAgLTM4LDggKzM4LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC01OCwzMSArNTgsMzEgQEAKIC8qIERlZmluZXMKICAqLwogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50IHVuaXQsCiAJCQkJCSAgICBpbnQgKm1pbiwKIAkJCQkJICAgIGludCAqbWF4LCBpbnQgKm1heGRhdGEsIGludCAqcmFuZ2UpOwogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgaW50IHVuaXQsIGludCAqY291bnQpOwogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIGludCByYW5nZSwKIAkJCQkgICAgICBpbnQgKnVuaXQsCiAJCQkJICAgICAgaW50ICptaW4sIGludCAqbWF4LCBpbnQgKm1heGRhdGEpOwogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV90aW1lcihtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3RpbWVyKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIGludCB0aW1lciwKIAkJCQkgaW50ICpiYXNlX2ZyZXF1ZW5jeSwKIAkJCQkgbG9uZyBsb25nICptaW5fdGlja3MsIGxvbmcgbG9uZyAqbWF4X3RpY2tzKTsKIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKTsKIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKTsKIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqY2Fwcyk7CiAKIHN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzX2FyZ3Moc3RydWN0IG1lX3N1YmRldmljZSAqc3ViZGV2aWNlLApAQCAtMTA1LDEyICsxMDUsMTIgQEAKIAogLyoqIFJlc2V0IHN1YmRldmljZS4gU3RvcCBhbGwgYWN0aW9ucy4gUmVzZXQgcmVnaXN0cnkuIERpc2FibGUgRklGTy4gU2V0IG91dHB1dCB0byAwViBhbmQgc3RhdHVzIHRvICdub25lJy4KICovCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19yZXNldF9zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgZmxhZ3MpOwogCiAvKiogU2V0IG91dHB1dCBhcyBzaW5nbGUKICovCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTEyMCwxMDMgKzEyMCw5MyBAQAogCiAvKiogUGFzcyB0byB1c2VyIGFjdHVhbCB2YWx1ZSBvZiBvdXRwdXQuCiAqLwotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncyk7CiAKIC8qKiBXcml0ZSB0byBvdXRwdXQgcmVxdWVkIHZhbHVlLgogKi8KLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKTsKIAogLyoqIFNldCBvdXRwdXQgYXMgc3RyZWFtZWQgZGV2aWNlLgogKi8KLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqIGNvbmZpZ19saXN0LAorCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqY29uZmlnX2xpc3QsCiAJCQkJICAgICAgaW50IGNvdW50LAotCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKiB0cmlnZ2VyLAorCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKnRyaWdnZXIsCiAJCQkJICAgICAgaW50IGZpZm9faXJxX3RocmVzaG9sZCwgaW50IGZsYWdzKTsKIAogLyoqIFdhaXQgZm9yIC8gQ2hlY2sgZW1wdHkgc3BhY2UgaW4gYnVmZmVyLgogKi8KLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJCSAgaW50IHRpbWVfb3V0LCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpOwogCiAvKiogU3RhcnQgc3RyZWFtaW5nLgogKi8KLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IHN0YXJ0X21vZGUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKTsKIAogLyoqIENoZWNrIGFjdHVhbCBzdGF0ZS4gLyBXYWl0IGZvciBlbmQuCiAqLwotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IHdhaXQsCiAJCQkJICAgICAgaW50ICpzdGF0dXMsIGludCAqdmFsdWVzLCBpbnQgZmxhZ3MpOwogCiAvKiogU3RvcCBzdHJlYW1pbmcuCiAqLwotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBzdG9wX21vZGUsIGludCBmbGFncyk7CiAKIC8qKiBXcml0ZSBkYXRhcyB0byBidWZmb3IuCiAqLwotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgd3JpdGVfbW9kZSwKIAkJCQkgICAgIGludCAqdmFsdWVzLCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpOwogCiAvKiogSW50ZXJydXB0IGhhbmRsZXIuIENvcHkgZnJvbSBidWZmZXIgdG8gRklGTy4KICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU0NjAwX2FvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKLQkJCQkgLCBzdHJ1Y3QgcHRfcmVncyAqcmVncwotI2VuZGlmCi0gICAgKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBtZTQ2MDBfYW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAvKiogQ29weSBkYXRhIGZyb20gY2lyY3VsYXIgYnVmZmVyIHRvIGZpZm8gKGZhc3QpIGluIHdyYXBhcm91bmQgbW9kZS4KICovCi1pbnQgaW5saW5lIGFvX3dyaXRlX2RhdGFfd3JhcGFyb3VuZChtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb193cml0ZV9kYXRhX3dyYXBhcm91bmQobWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJCSAgICBpbnQgc3RhcnRfcG9zKTsKIAogLyoqIENvcHkgZGF0YSBmcm9tIGNpcmN1bGFyIGJ1ZmZlciB0byBmaWZvIChmYXN0KS4KICovCi1pbnQgaW5saW5lIGFvX3dyaXRlX2RhdGEobWU0NjAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fd3JpdGVfZGF0YShtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkgaW50IHN0YXJ0X3Bvcyk7CiAKIC8qKiBDb3B5IGRhdGEgZnJvbSBjaXJjdWxhciBidWZmZXIgdG8gZmlmbyAoc2xvdykuCiAqLwotaW50IGlubGluZSBhb193cml0ZV9kYXRhX3Bvb2xpbmcobWU0NjAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fd3JpdGVfZGF0YV9wb29saW5nKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCQkgaW50IHN0YXJ0X3Bvcyk7CiAKIC8qKiBDb3B5IGRhdGEgZnJvbSB1c2VyIHNwYWNlIHRvIGNpcmN1bGFyIGJ1ZmZlci4KICovCi1pbnQgaW5saW5lIGFvX2dldF9kYXRhX2Zyb21fdXNlcihtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb19nZXRfZGF0YV9mcm9tX3VzZXIobWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJCSBpbnQgKnVzZXJfdmFsdWVzKTsKIAogLyoqIFN0b3AgcHJlc2VudGF0aW9uLiBQcmVzZXJ2ZSBGSUZPcy4KICovCi1pbnQgaW5saW5lIGFvX3N0b3BfaW1tZWRpYXRlbHkobWU0NjAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UpOworaW5saW5lIGludCBhb19zdG9wX2ltbWVkaWF0ZWx5KG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UpOwogCiAvKiogVGFzayBmb3IgYXN5bmNocm9uaWNhbCBzdGF0ZSB2ZXJpZnlpbmcuCiAqLwotc3RhdGljIHZvaWQgbWU0NjAwX2FvX3dvcmtfY29udHJvbF90YXNrKAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKLQkJCQkJICAgICAgIHZvaWQgKnN1YmRldmljZQotI2Vsc2UKLQkJCQkJICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yawotI2VuZGlmCi0gICAgKTsKK3N0YXRpYyB2b2lkIG1lNDYwMF9hb193b3JrX2NvbnRyb2xfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogLyogRnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGZsYWdzKQogewogCW1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0yOTAsNyArMjgwLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTQ2Myw3ICs0NTMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC01NDcsNyArNTM3LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTk4OSwxMSArOTc5LDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCi0JCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICogY29uZmlnX2xpc3QsCisJCQkJICAgICAgbWVJT1N0cmVhbUNvbmZpZ190ICpjb25maWdfbGlzdCwKIAkJCQkgICAgICBpbnQgY291bnQsCi0JCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqIHRyaWdnZXIsCisJCQkJICAgICAgbWVJT1N0cmVhbVRyaWdnZXJfdCAqdHJpZ2dlciwKIAkJCQkgICAgICBpbnQgZmlmb19pcnFfdGhyZXNob2xkLCBpbnQgZmxhZ3MpCiB7CiAJbWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTEwMjUsNyArMTAxNSw3IEBACiAJfQogCiAJaWYgKGZsYWdzICYgTUVfSU9fU1RSRUFNX0NPTkZJR19IQVJEV0FSRV9PTkxZKSB7Ci0JCWlmICghZmxhZ3MgJiBNRV9JT19TVFJFQU1fQ09ORklHX1dSQVBBUk9VTkQpIHsKKwkJaWYgKCEoZmxhZ3MgJiBNRV9JT19TVFJFQU1fQ09ORklHX1dSQVBBUk9VTkQpKSB7CiAJCQlQRVJST1IKIAkJCSAgICAoIkhhcmR3YXJlIE1FX0lPX1NUUkVBTV9DT05GSUdfSEFSRFdBUkVfT05MWSBoYXMgdG8gYmUgd2l0aCBNRV9JT19TVFJFQU1fQ09ORklHX1dSQVBBUk9VTkQuXG4iKTsKIAkJCXJldHVybiBNRV9FUlJOT19JTlZBTElEX0ZMQUdTOwpAQCAtMTMyNyw3ICsxMzE3LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCQkgIGludCB0aW1lX291dCwgaW50ICpjb3VudCwgaW50IGZsYWdzKQogewpAQCAtMTQwOCw3ICsxMzk4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBzdGFydF9tb2RlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKIHsKQEAgLTE4NDUsNyArMTgzNSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IHdhaXQsCiAJCQkJICAgICAgaW50ICpzdGF0dXMsIGludCAqdmFsdWVzLCBpbnQgZmxhZ3MpCkBAIC0xOTQzLDcgKzE5MzMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdG9wKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgc3RvcF9tb2RlLCBpbnQgZmxhZ3MpCiB7CQkJCS8vIFN0b3Agd29yayBhbmQgZW1wdHkgYnVmZmVyIGFuZCBGSUZPCkBAIC0yMDQ4LDcgKzIwMzgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IHdyaXRlX21vZGUsCiAJCQkJICAgICBpbnQgKnZhbHVlcywgaW50ICpjb3VudCwgaW50IGZsYWdzKQpAQCAtMjI3MiwxMSArMjI2Miw3IEBACiAKIAlyZXR1cm4gZXJyOwogfQotc3RhdGljIGlycXJldHVybl90IG1lNDYwMF9hb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCi0JCQkJICwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MKLSNlbmRpZgotICAgICkKK3N0YXRpYyBpcnFyZXR1cm5fdCBtZTQ2MDBfYW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAltZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlID0gZGV2X2lkOwogCXVpbnQzMl90IGlycV9zdGF0dXM7CkBAIC0yNDk4LDggKzI0ODQsOCBAQAogfQogCiBtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKm1lNDYwMF9hb19jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKLQkJCQkJICAgICBzcGlubG9ja190ICogcHJlbG9hZF9yZWdfbG9jaywKLQkJCQkJICAgICB1aW50MzJfdCAqIHByZWxvYWRfZmxhZ3MsCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqcHJlbG9hZF9yZWdfbG9jaywKKwkJCQkJICAgICB1aW50MzJfdCAqcHJlbG9hZF9mbGFncywKIAkJCQkJICAgICBpbnQgYW9faWR4LAogCQkJCQkgICAgIGludCBmaWZvLAogCQkJCQkgICAgIGludCBpcnEsCkBAIC0yNjg5LDEzICsyNjc1LDggQEAKIAlzdWJkZXZpY2UtPm1lNDYwMF93b3JrcXVldWUgPSBtZTQ2MDBfd3E7CiAKIC8qIHdvcmtxdWV1ZSBBUEkgY2hhbmdlZCBpbiBrZXJuZWwgMi42LjIwICovCi0jaWYgKCBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApICkKLQlJTklUX1dPUksoJnN1YmRldmljZS0+YW9fY29udHJvbF90YXNrLCBtZTQ2MDBfYW9fd29ya19jb250cm9sX3Rhc2ssCi0JCSAgKHZvaWQgKilzdWJkZXZpY2UpOwotI2Vsc2UKIAlJTklUX0RFTEFZRURfV09SSygmc3ViZGV2aWNlLT5hb19jb250cm9sX3Rhc2ssCiAJCQkgIG1lNDYwMF9hb193b3JrX2NvbnRyb2xfdGFzayk7Ci0jZW5kaWYKIAogCWlmIChzdWJkZXZpY2UtPmZpZm8pIHsJLy8gU2V0IHNwZWVkIGZvciBzaW5nbGUgb3BlcmF0aW9ucy4KIAkJb3V0bChNRTQ2MDBfQU9fTUlOX0NIQU5fVElDS1MgLSAxLCBzdWJkZXZpY2UtPnRpbWVyX3JlZyk7CkBAIC0yNzA5LDcgKzI2OTAsNyBAQAogKgogKiBAcGFyYW0gaW5zdGFuY2UgVGhlIHN1YmRldmljZSBpbnN0YW5jZSAocG9pbnRlcikuCiAqLwotaW50IGlubGluZSBhb19zdG9wX2ltbWVkaWF0ZWx5KG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlKQoraW5saW5lIGludCBhb19zdG9wX2ltbWVkaWF0ZWx5KG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UpCiB7CiAJdW5zaWduZWQgbG9uZyBjcHVfZmxhZ3M7CiAJdWludDMyX3QgY3RybDsKQEAgLTI3NjIsNyArMjc0Myw3IEBACiAqIEByZXR1cm4gT24gZXJyb3Ivc3VjY2VzczogMC4JTm8gZGF0YXMgd2VyZSBjb3BpZWQgPT4gbm8gZGF0YSBpbiBidWZmZXIuCiAqIEByZXR1cm4gT24gZXJyb3I6IC1NRV9FUlJOT19GSUZPX0JVRkZFUl9PVkVSRkxPVy4KICovCi1pbnQgaW5saW5lIGFvX3dyaXRlX2RhdGFfd3JhcGFyb3VuZChtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb193cml0ZV9kYXRhX3dyYXBhcm91bmQobWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJCSAgICBpbnQgc3RhcnRfcG9zKQogewkJCQkvLy8gQG5vdGUgVGhpcyBpcyB0aW1lIGNyaXRpY2FsIGZ1bmN0aW9uIQogCXVpbnQzMl90IHN0YXR1czsKQEAgLTI4MjcsNyArMjgwOCw3IEBACiAqIEByZXR1cm4gT24gZXJyb3Ivc3VjY2VzczogMC4JTm8gZGF0YXMgd2VyZSBjb3BpZWQgPT4gbm8gZGF0YSBpbiBidWZmZXIuCiAqIEByZXR1cm4gT24gZXJyb3I6IC1NRV9FUlJOT19GSUZPX0JVRkZFUl9PVkVSRkxPVy4KICovCi1pbnQgaW5saW5lIGFvX3dyaXRlX2RhdGEobWU0NjAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fd3JpdGVfZGF0YShtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkgaW50IHN0YXJ0X3BvcykKIHsJCQkJLy8vIEBub3RlIFRoaXMgaXMgdGltZSBjcml0aWNhbCBmdW5jdGlvbiEKIAl1aW50MzJfdCBzdGF0dXM7CkBAIC0yODk3LDcgKzI4NzgsNyBAQAogKiBAcmV0dXJuIE9uIGVycm9yL3N1Y2Nlc3M6IDAuCUZJRk8gd2FzIGZ1bGwgYXQgYmVnaW5pbmcuCiAqIEByZXR1cm4gT24gZXJyb3I6IC1NRV9FUlJOT19SSU5HX0JVRkZFUl9VTkRFRkZMT1cuCiAqLwotaW50IGlubGluZSBhb193cml0ZV9kYXRhX3Bvb2xpbmcobWU0NjAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fd3JpdGVfZGF0YV9wb29saW5nKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCQkgaW50IHN0YXJ0X3BvcykKIHsJCQkJLy8vIEBub3RlIFRoaXMgaXMgc2xvdyBmdW5jdGlvbiEKIAl1aW50MzJfdCBzdGF0dXM7CkBAIC0yOTU1LDcgKzI5MzYsNyBAQAogKiBAcmV0dXJuIE9uIHN1Y2Nlc3M6IE51bWJlciBvZiBjb3BpZWQgdmFsdWVzLgogKiBAcmV0dXJuIE9uIGVycm9yOiAtTUVfRVJSTk9fSU5URVJOQUwuCiAqLwotaW50IGlubGluZSBhb19nZXRfZGF0YV9mcm9tX3VzZXIobWU0NjAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fZ2V0X2RhdGFfZnJvbV91c2VyKG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCQkgaW50ICp1c2VyX3ZhbHVlcykKIHsKIAlpbnQgaSwgZXJyOwpAQCAtMjk4NywxMyArMjk2OCw3IEBACiAvKiogQGJyaWVmIENoZWNraW5nIGFjdHVhbCBoYXJkd2FyZSBhbmQgbG9naWNhbCBzdGF0ZS4KICogQHBhcmFtIGluc3RhbmNlIFRoZSBzdWJkZXZpY2UgaW5zdGFuY2UgKHBvaW50ZXIpLgogKi8KLXN0YXRpYyB2b2lkIG1lNDYwMF9hb193b3JrX2NvbnRyb2xfdGFzaygKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0JCQkJCSAgICAgICB2b2lkICpzdWJkZXZpY2UKLSNlbHNlCi0JCQkJCSAgICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsKLSNlbmRpZgotICAgICkKK3N0YXRpYyB2b2lkIG1lNDYwMF9hb193b3JrX2NvbnRyb2xfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJbWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAl1bnNpZ25lZCBsb25nIGNwdV9mbGFncyA9IDA7CkBAIC0zMDAzLDEyICsyOTc4LDggQEAKIAlpbnQgcmVzY2hlZHVsZSA9IDA7CiAJaW50IHNpZ25hbGluZyA9IDA7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0JaW5zdGFuY2UgPSAobWU0NjAwX2FvX3N1YmRldmljZV90ICopIHN1YmRldmljZTsKLSNlbHNlCiAJaW5zdGFuY2UgPQogCSAgICBjb250YWluZXJfb2YoKHZvaWQgKil3b3JrLCBtZTQ2MDBfYW9fc3ViZGV2aWNlX3QsIGFvX2NvbnRyb2xfdGFzayk7Ci0jZW5kaWYKIAlQSU5GTygiPCVzOiAlbGQ+IGV4ZWN1dGVkLiBpZHg9JWRcbiIsIF9fZnVuY19fLCBqaWZmaWVzLAogCSAgICAgIGluc3RhbmNlLT5hb19pZHgpOwogCkBAIC0zMzIzLDcgKzMyOTQsNyBAQAogI2Vsc2UKIC8vLyBAbm90ZSBTUEVDSUFMIEJVSUxEIEZPUiBCT1NDSAogLy8vIEBhdXRob3IgR3VlbnRlciBHZWJoYXJkdAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGZsYWdzKQogewogCW1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0zMzY1LDcgKzMzMzYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMzYzNiw3ICszNjA3LDcgQEAKIAkJZ290byBFUlJPUjsKIAl9CiAKLSAgICAgIEVSUk9SOgorRVJST1I6CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+c3ViZGV2aWNlX2xvY2ssIGNwdV9mbGFncyk7CiAKQEAgLTM2NDUsNyArMzYxNiw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTM2ODIsNyArMzY1Myw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0zODMwLDE4ICszODAxLDE4IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5zdWJkZXZpY2VfbG9jaywgY3B1X2ZsYWdzKTsKIAl9CiAKLSAgICAgIEVSUk9SOgorRVJST1I6CiAKIAlNRV9TVUJERVZJQ0VfRVhJVDsKIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqIGNvbmZpZ19saXN0LAorCQkJCSAgICAgIG1lSU9TdHJlYW1Db25maWdfdCAqY29uZmlnX2xpc3QsCiAJCQkJICAgICAgaW50IGNvdW50LAotCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKiB0cmlnZ2VyLAorCQkJCSAgICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKnRyaWdnZXIsCiAJCQkJICAgICAgaW50IGZpZm9faXJxX3RocmVzaG9sZCwgaW50IGZsYWdzKQogewogCW1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC00MTUwLDcgKzQxMjEsNyBAQAogCVBERUJVRygiQ3RybCB3b3JkID0gMHglbFguXG4iLCBjdHJsKTsKIAlvdXRsKGN0cmwsIGluc3RhbmNlLT5jdHJsX3JlZyk7CS8vIFdyaXRlIHRoZSBjb250cm9sIHdvcmQKIAotICAgICAgRVJST1I6CitFUlJPUjoKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluc3RhbmNlLT5zdWJkZXZpY2VfbG9jaywgY3B1X2ZsYWdzKTsKIApAQCAtNDE1OSw3ICs0MTMwLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fbmV3X3ZhbHVlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCQkgIGludCB0aW1lX291dCwgaW50ICpjb3VudCwgaW50IGZsYWdzKQogewpAQCAtNDIzOCw3ICs0MjA5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBzdG9wX2ltbWVkaWF0ZWx5KG1lNDYwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlKQorc3RhdGljIHZvaWQgc3RvcF9pbW1lZGlhdGVseShtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlKQogewogCXVuc2lnbmVkIGxvbmcgY3B1X2ZsYWdzOwogCXVpbnQzMl90IHRtcDsKQEAgLTQyNTMsNyArNDIyNCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5zdGFuY2UtPnN1YmRldmljZV9sb2NrLCBjcHVfZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RhcnQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBzdGFydF9tb2RlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKIHsKQEAgLTQ3NzgsMTQgKzQ3NDksMTQgQEAKIAkJZ290byBFUlJPUjsKIAl9CiAKLSAgICAgIEVSUk9SOgorRVJST1I6CiAKIAlNRV9TVUJERVZJQ0VfRVhJVDsKIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCB3YWl0LAogCQkJCSAgICAgIGludCAqc3RhdHVzLCBpbnQgKnZhbHVlcywgaW50IGZsYWdzKQpAQCAtNDg0MiwxNCArNDgxMywxNCBAQAogCQlnb3RvIEVSUk9SOwogCX0KIAotICAgICAgRVJST1I6CitFUlJPUjoKIAogCU1FX1NVQkRFVklDRV9FWElUOwogCiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9faW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9hb19pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBzdG9wX21vZGUsIGludCBmbGFncykKIHsKQEAgLTQ4OTEsMTQgKzQ4NjIsMTQgQEAKIAkJZ290byBFUlJPUjsKIAl9CiAKLSAgICAgIEVSUk9SOgorRVJST1I6CiAKIAlNRV9TVUJERVZJQ0VfRVhJVDsKIAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX2lvX3N0cmVhbV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IHdyaXRlX21vZGUsCiAJCQkJICAgICBpbnQgKnZhbHVlcywgaW50ICpjb3VudCwgaW50IGZsYWdzKQpAQCAtNTQzMiwxOCArNTQwMywxNCBAQAogCQlnb3RvIEVSUk9SOwogCX0KIAotICAgICAgRVJST1I6CitFUlJPUjoKIAogCU1FX1NVQkRFVklDRV9FWElUOwogCiAJcmV0dXJuIGVycjsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTQ2MDBfYW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU0NjAwX2FvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotI2VuZGlmCiB7CiAJdW5zaWduZWQgbG9uZyB0bXA7CiAJaW50IHZhbHVlOwpAQCAtNTY2MCw4ICs1NjI3LDggQEAKIH0KIAogbWU0NjAwX2FvX3N1YmRldmljZV90ICptZTQ2MDBfYW9fY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIHByZWxvYWRfcmVnX2xvY2ssCi0JCQkJCSAgICAgdWludDMyX3QgKiBwcmVsb2FkX2ZsYWdzLAorCQkJCQkgICAgIHNwaW5sb2NrX3QgKnByZWxvYWRfcmVnX2xvY2ssCisJCQkJCSAgICAgdWludDMyX3QgKnByZWxvYWRfZmxhZ3MsCiAJCQkJCSAgICAgaW50IGFvX2lkeCwgaW50IGZpZm8sIGludCBpcnEpCiB7CiAJbWU0NjAwX2FvX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CkBAIC01ODIzLDcgKzU3OTAsNyBAQAogLyogQ29tbW9uIGZ1bmN0aW9ucwogKi8KIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCB1bml0LAogCQkJCQkgICAgaW50ICptaW4sCiAJCQkJCSAgICBpbnQgKm1heCwgaW50ICptYXhkYXRhLCBpbnQgKnJhbmdlKQpAQCAtNTg1OCw3ICs1ODI1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJIGludCB1bml0LCBpbnQgKmNvdW50KQogewogCW1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC01ODc2LDcgKzU4NDMsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIGludCByYW5nZSwKIAkJCQkgICAgICBpbnQgKnVuaXQsCiAJCQkJICAgICAgaW50ICptaW4sIGludCAqbWF4LCBpbnQgKm1heGRhdGEpCkBAIC01OTAwLDcgKzU4NjcsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV90aW1lcihtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3RpbWVyKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIGludCB0aW1lciwKIAkJCQkgaW50ICpiYXNlX2ZyZXF1ZW5jeSwKIAkJCQkgbG9uZyBsb25nICptaW5fdGlja3MsIGxvbmcgbG9uZyAqbWF4X3RpY2tzKQpAQCAtNTkzNCw3ICs1OTAxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfYW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKQogewogCW1lNDYwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC01OTQ3LDcgKzU5MTQsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJbWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTU5NjIsNyArNTkyOSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLCBpbnQgKmNhcHMpCitzdGF0aWMgaW50IG1lNDYwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLCBpbnQgKmNhcHMpCiB7CiAJbWU0NjAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAlpbnN0YW5jZSA9IChtZTQ2MDBfYW9fc3ViZGV2aWNlX3QgKikgc3ViZGV2aWNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9hby5oIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9hby5oCmluZGV4IDZmYmM0YTIuLjc1Nzk0MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfYW8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2FvLmgKQEAgLTIyNSwxMSArMjI1LDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3F1ZXVlOwkJCQkvKio8IFdhaXQgcXVldWUgdG8gcHV0IG9uIHRhc2tzIHdhaXRpbmcgZm9yIGRhdGEgdG8gYXJyaXZlLiAqLwogCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lNDYwMF93b3JrcXVldWU7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCXN0cnVjdCB3b3JrX3N0cnVjdCBhb19jb250cm9sX3Rhc2s7Ci0jZWxzZQogCXN0cnVjdCBkZWxheWVkX3dvcmsgYW9fY29udHJvbF90YXNrOwotI2VuZGlmCiAKIAl2b2xhdGlsZSBpbnQgYW9fY29udHJvbF90YXNrX2ZsYWc7CQkJLyoqPCBGbGFnIGNvbnRyb2xpbmcgcmVleGVjdXRpbmcgb2YgY29udHJvbCB0YXNrICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2RldmljZS5jCmluZGV4IGZhNDU1ODQuLjQ1NzY2NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kZXZpY2UuYwpAQCAtMzM2LDYgKzMzNiw3IEBACiAKIAlyZXR1cm4gKG1lX2RldmljZV90ICopIG1lNDYwMF9kZXZpY2U7CiB9CitFWFBPUlRfU1lNQk9MKG1lNDYwMF9wY2lfY29uc3RydWN0b3IpOwogCiAvLyBJbml0IGFuZCBleGl0IG9mIG1vZHVsZS4KIApAQCAtMzY4LDYgKzM2OSwzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSBEcml2ZXIgTW9kdWxlIGZvciBNRS00Nnh4IERldmljZXMiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBNRS00Nnh4IERldmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLy8gRXhwb3J0IHRoZSBjb25zdHJ1Y3Rvci4KLUVYUE9SVF9TWU1CT0wobWU0NjAwX3BjaV9jb25zdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2RpLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2RpLmMKaW5kZXggN2UzYzlmNC4uZTEwN2U1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZGkuYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC05MSw3ICs5MSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2RpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCBzaW5nbGVfY29uZmlnLApAQCAtMTMzLDcgKzEzMyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZGlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2RpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2RpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0xODUsNyArMTg1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZGlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTE5NCw3ICsxOTQsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICpjYXBzKQorc3RhdGljIGludCBtZTQ2MDBfZGlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAkqY2FwcyA9IDA7CkBAIC0yMDIsNyArMjAyLDcgQEAKIH0KIAogbWU0NjAwX2RpX3N1YmRldmljZV90ICptZTQ2MDBfZGlfY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2spCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaykKIHsKIAltZTQ2MDBfZGlfc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZGlvLmMKaW5kZXggMGFmOTVkMS4uYmFhMjhmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2Rpby5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTk0LDcgKzk0LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZGlvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kaW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTI2OCw3ICsyNjgsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2Rpb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2Rpb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTM0Miw3ICszNDIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2Rpb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kaW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC00MjUsNyArNDI1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kaW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZGlvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtNDMzLDcgKzQzMyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC00NDIsNyArNDQyLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZGlvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZGlvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC00NTIsNyArNDUyLDcgQEAKIAogbWU0NjAwX2Rpb19zdWJkZXZpY2VfdCAqbWU0NjAwX2Rpb19jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCBkaW9faWR4LAotCQkJCQkgICAgICAgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2spCisJCQkJCSAgICAgICBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrKQogewogCW1lNDYwMF9kaW9fc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kby5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9kby5jCmluZGV4IGVlNTkxYmMuLjM5NTEwZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTQ2MDBfZG8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2RvLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtOTMsNyArOTMsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZG9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTIyNCw3ICsyMjQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2RvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZG9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0yODQsNyArMjg0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTM1Miw3ICszNTIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2RvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2RvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zNjAsNyArMzYwLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZG9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9kb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTM2OSw3ICszNjksNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9kb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICpjYXBzKQorc3RhdGljIGludCBtZTQ2MDBfZG9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAkqY2FwcyA9IDA7CkBAIC0zNzcsNyArMzc3LDcgQEAKIH0KIAogbWU0NjAwX2RvX3N1YmRldmljZV90ICptZTQ2MDBfZG9fY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2spCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaykKIHsKIAltZTQ2MDBfZG9fc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNDYwMF9leHRfaXJxLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2V4dF9pcnEuYwppbmRleCBhZGMxZTFiLi42YjMzY2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2V4dF9pcnEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU0NjAwX2V4dF9pcnEuYwpAQCAtMzcsNyArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKQEAgLTYwLDcgKzYwLDcgQEAKICAqIEZ1bmN0aW9ucwogICovCiAKLXN0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfaW9faXJxX3N0YXJ0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9pb19pcnFfc3RhcnQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICAgaW50IGlycV9zb3VyY2UsCkBAIC0xMzUsNyArMTM1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX2lvX2lycV93YWl0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9pb19pcnFfd2FpdChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgKmlycV9jb3VudCwKQEAgLTIxNCw3ICsyMTQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfaW9faXJxX3N0b3AobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX2lvX2lycV9zdG9wKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLCBpbnQgZmxhZ3MpCiB7CkBAIC0yNTYsNyArMjU2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX2lvX3Jlc2V0X3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfaW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgZmxhZ3MpCiB7CiAJbWU0NjAwX2V4dF9pcnFfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMzA4LDcgKzMwOCw3IEBACiAJa2ZyZWUoaW5zdGFuY2UpOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCQlpbnQgKm51bWJlcikKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zMTYsNyArMzE2LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU0NjAwX2V4dF9pcnFfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgICAgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTMyNSw3ICszMjUsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNDYwMF9leHRfaXJxX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTQ2MDBfZXh0X2lycV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgICAgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTMzNSwxMiArMzM1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTQ2MDBfZXh0X2lycV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTQ2MDBfZXh0X2lycV9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLAotCQkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotI2VuZGlmCiB7CiAJbWU0NjAwX2V4dF9pcnFfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCXVpbnQzMl90IGN0cmw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2FvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2FvLmMKaW5kZXggOTRmMDEyMy4uZjdhYmRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9hby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfYW8uYwpAQCAtMzYsOCArMzYsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC01NywzMSArNTcsMzEgQEAKIC8qIERlZmluZXMKICAqLwogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50IHVuaXQsCiAJCQkJCSAgICBpbnQgKm1pbiwKIAkJCQkJICAgIGludCAqbWF4LCBpbnQgKm1heGRhdGEsIGludCAqcmFuZ2UpOwogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgaW50IHVuaXQsIGludCAqY291bnQpOwogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9yYW5nZV9pbmZvKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIGludCByYW5nZSwKIAkJCQkgICAgICBpbnQgKnVuaXQsCiAJCQkJICAgICAgaW50ICptaW4sIGludCAqbWF4LCBpbnQgKm1heGRhdGEpOwogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV90aW1lcihtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3RpbWVyKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIGludCB0aW1lciwKIAkJCQkgaW50ICpiYXNlX2ZyZXF1ZW5jeSwKIAkJCQkgbG9uZyBsb25nICptaW5fdGlja3MsIGxvbmcgbG9uZyAqbWF4X3RpY2tzKTsKIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqbnVtYmVyKTsKIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKTsKIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqY2Fwcyk7CiAKIHN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3N1YmRldmljZV9jYXBzX2FyZ3Moc3RydWN0IG1lX3N1YmRldmljZSAqc3ViZGV2aWNlLApAQCAtOTEsMTEgKzkxLDExIEBACiBzdGF0aWMgdm9pZCBtZTYwMDBfYW9fZGVzdHJ1Y3RvcihzdHJ1Y3QgbWVfc3ViZGV2aWNlICpzdWJkZXZpY2UpOwogCiAvKiogUmVzZXQgc3ViZGV2aWNlLiBTdG9wIGFsbCBhY3Rpb25zLiBSZXNldCByZWdpc3RyeS4gRGlzYWJsZSBGSUZPLiBTZXQgb3V0cHV0IHRvIDBWIGFuZCBzdGF0dXMgdG8gJ25vbmUnLiAqLwotc3RhdGljIGludCBtZTYwMDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGZsYWdzKTsKIAogLyoqIFNldCBvdXRwdXQgYXMgc2luZ2xlICovCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTEwNCw4OSArMTA0LDgxIEBACiAJCQkJICAgICAgaW50IHRyaWdfdHlwZSwgaW50IHRyaWdfZWRnZSwgaW50IGZsYWdzKTsKIAogLyoqIFBhc3MgdG8gdXNlciBhY3R1YWwgdmFsdWUgb2Ygb3V0cHV0LiAqLwotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBjaGFubmVsLAogCQkJCSAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncyk7CiAKIC8qKiBXcml0ZSB0byBvdXRwdXQgcmVxdWVkIHZhbHVlLiAqLwotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpOwogCiAvKiogU2V0IG91dHB1dCBhcyBzdHJlYW1lZCBkZXZpY2UuICovCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKiBjb25maWdfbGlzdCwKKwkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKmNvbmZpZ19saXN0LAogCQkJCSAgICAgIGludCBjb3VudCwKLQkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICogdHJpZ2dlciwKKwkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICp0cmlnZ2VyLAogCQkJCSAgICAgIGludCBmaWZvX2lycV90aHJlc2hvbGQsIGludCBmbGFncyk7CiAKIC8qKiBXYWl0IGZvciAvIENoZWNrIGVtcHR5IHNwYWNlIGluIGJ1ZmZlci4gKi8KLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJCSAgaW50IHRpbWVfb3V0LCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpOwogCiAvKiogU3RhcnQgc3RyZWFtaW5nLiAqLwotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3N0YXJ0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgc3RhcnRfbW9kZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpOwogCiAvKiogQ2hlY2sgYWN0dWFsIHN0YXRlLiAvIFdhaXQgZm9yIGVuZC4gKi8KLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9zdGF0dXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCB3YWl0LAogCQkJCSAgICAgIGludCAqc3RhdHVzLCBpbnQgKnZhbHVlcywgaW50IGZsYWdzKTsKIAogLyoqIFN0b3Agc3RyZWFtaW5nLiAqLwotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBzdG9wX21vZGUsIGludCBmbGFncyk7CiAKIC8qKiBXcml0ZSBkYXRhcyB0byBidWZmb3IuICovCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCB3cml0ZV9tb2RlLAogCQkJCSAgICAgaW50ICp2YWx1ZXMsIGludCAqY291bnQsIGludCBmbGFncyk7CiAKIC8qKiBJbnRlcnJ1cHQgaGFuZGxlci4gQ29weSBmcm9tIGJ1ZmZlciB0byBGSUZPLiAqLwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTYwMDBfYW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lNjAwMF9hb19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0jZW5kaWYKIAogLyoqIENvcHkgZGF0YSBmcm9tIGNpcmN1bGFyIGJ1ZmZlciB0byBmaWZvIChmYXN0KSBpbiB3cmFwYXJvdW5kIG1vZGUuICovCi1pbnQgaW5saW5lIGFvX3dyaXRlX2RhdGFfd3JhcGFyb3VuZChtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb193cml0ZV9kYXRhX3dyYXBhcm91bmQobWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJCSAgICBpbnQgc3RhcnRfcG9zKTsKIAogLyoqIENvcHkgZGF0YSBmcm9tIGNpcmN1bGFyIGJ1ZmZlciB0byBmaWZvIChmYXN0KS4qLwotaW50IGlubGluZSBhb193cml0ZV9kYXRhKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX3dyaXRlX2RhdGEobWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJIGludCBzdGFydF9wb3MpOwogCiAvKiogQ29weSBkYXRhIGZyb20gY2lyY3VsYXIgYnVmZmVyIHRvIGZpZm8gKHNsb3cpLiovCi1pbnQgaW5saW5lIGFvX3dyaXRlX2RhdGFfcG9vbGluZyhtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb193cml0ZV9kYXRhX3Bvb2xpbmcobWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJCSBpbnQgc3RhcnRfcG9zKTsKIAogLyoqIENvcHkgZGF0YSBmcm9tIHVzZXIgc3BhY2UgdG8gY2lyY3VsYXIgYnVmZmVyLiAqLwotaW50IGlubGluZSBhb19nZXRfZGF0YV9mcm9tX3VzZXIobWU2MDAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCBjb3VudCwKK2lubGluZSBpbnQgYW9fZ2V0X2RhdGFfZnJvbV91c2VyKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCQkgaW50ICp1c2VyX3ZhbHVlcyk7CiAKIC8qKiBTdG9wIHByZXNlbnRhdGlvbi4gUHJlc2VydmUgRklGT3MuICovCi1pbnQgaW5saW5lIGFvX3N0b3BfaW1tZWRpYXRlbHkobWU2MDAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UpOworaW5saW5lIGludCBhb19zdG9wX2ltbWVkaWF0ZWx5KG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UpOwogCiAvKiogRnVuY3Rpb24gZm9yIGNoZWNraW5nIHRpbWVvdXQgaW4gbm9uLWJsb2NraW5nIG1vZGUuICovCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotc3RhdGljIHZvaWQgbWU2MDAwX2FvX3dvcmtfY29udHJvbF90YXNrKHZvaWQgKnN1YmRldmljZSk7Ci0jZWxzZQogc3RhdGljIHZvaWQgbWU2MDAwX2FvX3dvcmtfY29udHJvbF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci0jZW5kaWYKIAogLyogRnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIGludCBtZTYwMDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fcmVzZXRfc3ViZGV2aWNlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGZsYWdzKQogewogCW1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0yNzQsNyArMjY2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTQ3Myw3ICs0NjUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC01NTUsNyArNTQ3LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50IHZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTEwMjcsMTEgKzEwMTksMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKiBjb25maWdfbGlzdCwKKwkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKmNvbmZpZ19saXN0LAogCQkJCSAgICAgIGludCBjb3VudCwKLQkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICogdHJpZ2dlciwKKwkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICp0cmlnZ2VyLAogCQkJCSAgICAgIGludCBmaWZvX2lycV90aHJlc2hvbGQsIGludCBmbGFncykKIHsKIAltZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMTA2Myw3ICsxMDU1LDcgQEAKIAl9CiAKIAlpZiAoZmxhZ3MgJiBNRV9JT19TVFJFQU1fQ09ORklHX0hBUkRXQVJFX09OTFkpIHsKLQkJaWYgKCFmbGFncyAmIE1FX0lPX1NUUkVBTV9DT05GSUdfV1JBUEFST1VORCkgeworCQlpZiAoIShmbGFncyAmIE1FX0lPX1NUUkVBTV9DT05GSUdfV1JBUEFST1VORCkpIHsKIAkJCVBFUlJPUgogCQkJICAgICgiSGFyZHdhcmUgTUVfSU9fU1RSRUFNX0NPTkZJR19IQVJEV0FSRV9PTkxZIGhhcyB0byBiZSB3aXRoIE1FX0lPX1NUUkVBTV9DT05GSUdfV1JBUEFST1VORC5cbiIpOwogCQkJcmV0dXJuIE1FX0VSUk5PX0lOVkFMSURfRkxBR1M7CkBAIC0xMzU5LDcgKzEzNTEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9uZXdfdmFsdWVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX25ld192YWx1ZXMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJCSAgaW50IHRpbWVfb3V0LCBpbnQgKmNvdW50LCBpbnQgZmxhZ3MpCiB7CkBAIC0xNDQwLDcgKzE0MzIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV9zdGFydChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IHN0YXJ0X21vZGUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQogewpAQCAtMTg4OSw3ICsxODgxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fc3RhdHVzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3N0YXR1cyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgd2FpdCwKIAkJCQkgICAgICBpbnQgKnN0YXR1cywgaW50ICp2YWx1ZXMsIGludCBmbGFncykKQEAgLTE5ODcsNyArMTk3OSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9faW9fc3RyZWFtX3N0b3AobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19pb19zdHJlYW1fc3RvcChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBzdG9wX21vZGUsIGludCBmbGFncykKIHsJCQkJLy8vIEBub3RlIFN0b3Agd29yayBhbmQgZW1wdHkgYnVmZmVyIGFuZCBGSUZPCkBAIC0yMDk0LDcgKzIwODYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV93cml0ZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX2lvX3N0cmVhbV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IHdyaXRlX21vZGUsCiAJCQkJICAgICBpbnQgKnZhbHVlcywgaW50ICpjb3VudCwgaW50IGZsYWdzKQpAQCAtMjMyNCwxMSArMjMxNiw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTYwMDBfYW9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU2MDAwX2FvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotI2VuZGlmCiB7CiAJbWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSA9IGRldl9pZDsKIAl1aW50MzJfdCBpcnFfc3RhdHVzOwpAQCAtMjU0NCw5ICsyNTMyLDkgQEAKIH0KIAogbWU2MDAwX2FvX3N1YmRldmljZV90ICptZTYwMDBfYW9fY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIHByZWxvYWRfcmVnX2xvY2ssCi0JCQkJCSAgICAgdWludDMyX3QgKiBwcmVsb2FkX2ZsYWdzLAotCQkJCQkgICAgIHVpbnQzMl90ICogdHJpZ2dlcmluZ19mbGFncywKKwkJCQkJICAgICBzcGlubG9ja190ICpwcmVsb2FkX3JlZ19sb2NrLAorCQkJCQkgICAgIHVpbnQzMl90ICpwcmVsb2FkX2ZsYWdzLAorCQkJCQkgICAgIHVpbnQzMl90ICp0cmlnZ2VyaW5nX2ZsYWdzLAogCQkJCQkgICAgIGludCBhb19pZHgsCiAJCQkJCSAgICAgaW50IGZpZm8sCiAJCQkJCSAgICAgaW50IGlycSwKQEAgLTI3OTcsMTMgKzI3ODUsOCBAQAogCXN1YmRldmljZS0+bWU2MDAwX3dvcmtxdWV1ZSA9IG1lNjAwMF93cTsKIAogLyogd29ya3F1ZXVlIEFQSSBjaGFuZ2VkIGluIGtlcm5lbCAyLjYuMjAgKi8KLSNpZiAoIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkgKQotCUlOSVRfV09SSygmc3ViZGV2aWNlLT5hb19jb250cm9sX3Rhc2ssIG1lNjAwMF9hb193b3JrX2NvbnRyb2xfdGFzaywKLQkJICAodm9pZCAqKXN1YmRldmljZSk7Ci0jZWxzZQogCUlOSVRfREVMQVlFRF9XT1JLKCZzdWJkZXZpY2UtPmFvX2NvbnRyb2xfdGFzaywKIAkJCSAgbWU2MDAwX2FvX3dvcmtfY29udHJvbF90YXNrKTsKLSNlbmRpZgogCiAJaWYgKHN1YmRldmljZS0+ZmlmbykgewkvL1NldCBzcGVlZAogCQlvdXRsKE1FNjAwMF9BT19NSU5fQ0hBTl9USUNLUyAtIDEsIHN1YmRldmljZS0+dGltZXJfcmVnKTsKQEAgLTI4MTcsNyArMjgwMCw3IEBACiAqCiAqIEBwYXJhbSBpbnN0YW5jZSBUaGUgc3ViZGV2aWNlIGluc3RhbmNlIChwb2ludGVyKS4KICovCi1pbnQgaW5saW5lIGFvX3N0b3BfaW1tZWRpYXRlbHkobWU2MDAwX2FvX3N1YmRldmljZV90ICogaW5zdGFuY2UpCitpbmxpbmUgaW50IGFvX3N0b3BfaW1tZWRpYXRlbHkobWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSkKIHsKIAl1bnNpZ25lZCBsb25nIGNwdV9mbGFnczsKIAl1aW50MzJfdCBjdHJsOwpAQCAtMjgyNSwxMCArMjgwOCwxMSBAQAogCWludCBpOwogCXVpbnQzMl90IHNpbmdsZV9tYXNrOwogCi0Jc2luZ2xlX21hc2sgPQotCSAgICAoaW5zdGFuY2UtPmFvX2lkeCAtIE1FNjAwMF9BT19TSU5HTEVfU1RBVFVTX09GRlNFVCA8Ci0JICAgICAwKSA/IDB4MDAwMCA6ICgweDAwMDEgPDwgKGluc3RhbmNlLT5hb19pZHggLQotCQkJCSAgICAgICBNRTYwMDBfQU9fU0lOR0xFX1NUQVRVU19PRkZTRVQpKTsKKwlpZiAoaW5zdGFuY2UtPmFvX2lkeCA8IE1FNjAwMF9BT19TSU5HTEVfU1RBVFVTX09GRlNFVCkKKwkJc2luZ2xlX21hc2sgPSAweDAwMDA7CisJZWxzZQorCQlzaW5nbGVfbWFzayA9IDB4MDAwMSA8PCAoaW5zdGFuY2UtPmFvX2lkeCAtCisJCQkJTUU2MDAwX0FPX1NJTkdMRV9TVEFUVVNfT0ZGU0VUKTsKIAogCXRpbWVvdXQgPQogCSAgICAoaW5zdGFuY2UtPmhhcmR3YXJlX3N0b3BfZGVsYXkgPgpAQCAtMjg4Nyw3ICsyODcxLDcgQEAKICogQHJldHVybiBPbiBlcnJvci9zdWNjZXNzOiAwLglObyBkYXRhcyB3ZXJlIGNvcGllZCA9PiBubyBkYXRhIGluIGJ1ZmZlci4KICogQHJldHVybiBPbiBlcnJvcjogLU1FX0VSUk5PX0ZJRk9fQlVGRkVSX09WRVJGTE9XLgogKi8KLWludCBpbmxpbmUgYW9fd3JpdGVfZGF0YV93cmFwYXJvdW5kKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgY291bnQsCitpbmxpbmUgaW50IGFvX3dyaXRlX2RhdGFfd3JhcGFyb3VuZChtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgY291bnQsCiAJCQkJICAgIGludCBzdGFydF9wb3MpCiB7CQkJCS8vLyBAbm90ZSBUaGlzIGlzIHRpbWUgY3JpdGljYWwgZnVuY3Rpb24hCiAJdWludDMyX3Qgc3RhdHVzOwpAQCAtMjk1Miw3ICsyOTM2LDcgQEAKICogQHJldHVybiBPbiBlcnJvci9zdWNjZXNzOiAwLglObyBkYXRhcyB3ZXJlIGNvcGllZCA9PiBubyBkYXRhIGluIGJ1ZmZlci4KICogQHJldHVybiBPbiBlcnJvcjogLU1FX0VSUk5PX0ZJRk9fQlVGRkVSX09WRVJGTE9XLgogKi8KLWludCBpbmxpbmUgYW9fd3JpdGVfZGF0YShtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb193cml0ZV9kYXRhKG1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCBjb3VudCwKIAkJCSBpbnQgc3RhcnRfcG9zKQogewkJCQkvLy8gQG5vdGUgVGhpcyBpcyB0aW1lIGNyaXRpY2FsIGZ1bmN0aW9uIQogCXVpbnQzMl90IHN0YXR1czsKQEAgLTMwMjIsNyArMzAwNiw3IEBACiAqIEByZXR1cm4gT24gZXJyb3Ivc3VjY2VzczogMC4JRklGTyB3YXMgZnVsbCBhdCBiZWdpbmluZy4KICogQHJldHVybiBPbiBlcnJvcjogLU1FX0VSUk5PX1JJTkdfQlVGRkVSX1VOREVGRkxPVy4KICovCi1pbnQgaW5saW5lIGFvX3dyaXRlX2RhdGFfcG9vbGluZyhtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb193cml0ZV9kYXRhX3Bvb2xpbmcobWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJCSBpbnQgc3RhcnRfcG9zKQogewkJCQkvLy8gQG5vdGUgVGhpcyBpcyBzbG93IGZ1bmN0aW9uIQogCXVpbnQzMl90IHN0YXR1czsKQEAgLTMwODAsNyArMzA2NCw3IEBACiAqIEByZXR1cm4gT24gc3VjY2VzczogTnVtYmVyIG9mIGNvcGllZCB2YWx1ZXMuCiAqIEByZXR1cm4gT24gZXJyb3I6IC1NRV9FUlJOT19JTlRFUk5BTC4KICovCi1pbnQgaW5saW5lIGFvX2dldF9kYXRhX2Zyb21fdXNlcihtZTYwMDBfYW9fc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IGNvdW50LAoraW5saW5lIGludCBhb19nZXRfZGF0YV9mcm9tX3VzZXIobWU2MDAwX2FvX3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IGNvdW50LAogCQkJCSBpbnQgKnVzZXJfdmFsdWVzKQogewogCWludCBpLCBlcnI7CkBAIC0zMTA5LDEzICszMDkzLDcgQEAKIAlyZXR1cm4gY29waWVkOwogfQogCi1zdGF0aWMgdm9pZCBtZTYwMDBfYW9fd29ya19jb250cm9sX3Rhc2soCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCQkJCQkgICAgICAgdm9pZCAqc3ViZGV2aWNlCi0jZWxzZQotCQkJCQkgICAgICAgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrCi0jZW5kaWYKLSAgICApCitzdGF0aWMgdm9pZCBtZTYwMDBfYW9fd29ya19jb250cm9sX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCW1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJdW5zaWduZWQgbG9uZyBjcHVfZmxhZ3MgPSAwOwpAQCAtMzEyNiwxMiArMzEwNCw4IEBACiAJaW50IHNpZ25hbGluZyA9IDA7CiAJdWludDMyX3Qgc2luZ2xlX21hc2s7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMjApCi0JaW5zdGFuY2UgPSAobWU2MDAwX2FvX3N1YmRldmljZV90ICopIHN1YmRldmljZTsKLSNlbHNlCiAJaW5zdGFuY2UgPQogCSAgICBjb250YWluZXJfb2YoKHZvaWQgKil3b3JrLCBtZTYwMDBfYW9fc3ViZGV2aWNlX3QsIGFvX2NvbnRyb2xfdGFzayk7Ci0jZW5kaWYKIAlQSU5GTygiPCVzOiAlbGQ+IGV4ZWN1dGVkLiBpZHg9JWRcbiIsIF9fZnVuY19fLCBqaWZmaWVzLAogCSAgICAgIGluc3RhbmNlLT5hb19pZHgpOwogCkBAIC0zNTU1LDcgKzM1MjksNyBAQAogCiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3JhbmdlX2J5X21pbl9tYXgobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICBpbnQgdW5pdCwKIAkJCQkJICAgIGludCAqbWluLAogCQkJCQkgICAgaW50ICptYXgsIGludCAqbWF4ZGF0YSwgaW50ICpyYW5nZSkKQEAgLTM1ODksNyArMzU2Myw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X251bWJlcl9yYW5nZXMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSBpbnQgdW5pdCwgaW50ICpjb3VudCkKIHsKIAltZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMzYwNyw3ICszNTgxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfcmFuZ2VfaW5mbyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X3JhbmdlX2luZm8obWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBpbnQgcmFuZ2UsCiAJCQkJICAgICAgaW50ICp1bml0LAogCQkJCSAgICAgIGludCAqbWluLCBpbnQgKm1heCwgaW50ICptYXhkYXRhKQpAQCAtMzYzMSw3ICszNjA1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfdGltZXIobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV90aW1lcihtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBpbnQgdGltZXIsCiAJCQkJIGludCAqYmFzZV9mcmVxdWVuY3ksCiAJCQkJIGxvbmcgbG9uZyAqbWluX3RpY2tzLCBsb25nIGxvbmcgKm1heF90aWNrcykKQEAgLTM2NjAsNyArMzYzNCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2FvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcikKIHsKIAltZTYwMDBfYW9fc3ViZGV2aWNlX3QgKmluc3RhbmNlOwpAQCAtMzY3Miw3ICszNjQ2LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCW1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0zNjkwLDcgKzM2NjQsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9hb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwgaW50ICpjYXBzKQorc3RhdGljIGludCBtZTYwMDBfYW9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwgaW50ICpjYXBzKQogewogCW1lNjAwMF9hb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJaW5zdGFuY2UgPSAobWU2MDAwX2FvX3N1YmRldmljZV90ICopIHN1YmRldmljZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfYW8uaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfYW8uaAppbmRleCA5NjI5NjQ5Li5lZjRkMDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2FvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9hby5oCkBAIC0xNjAsMTEgKzE2MCw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xdWV1ZTsJCQkvKio8IFdhaXQgcXVldWUgdG8gcHV0IG9uIHRhc2tzIHdhaXRpbmcgZm9yIGRhdGEgdG8gYXJyaXZlLiAqLwogCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKm1lNjAwMF93b3JrcXVldWU7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDIwKQotCXN0cnVjdCB3b3JrX3N0cnVjdCBhb19jb250cm9sX3Rhc2s7Ci0jZWxzZQogCXN0cnVjdCBkZWxheWVkX3dvcmsgYW9fY29udHJvbF90YXNrOwotI2VuZGlmCiAKIAl2b2xhdGlsZSBpbnQgYW9fY29udHJvbF90YXNrX2ZsYWc7CQkvKio8IEZsYWcgY29udHJvbGluZyByZWV4ZWN1dGluZyBvZiBjb250cm9sIHRhc2sgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9kZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfZGV2aWNlLmMKaW5kZXggZmVlNGM1OC4uMWE2Y2Y3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9kZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2RldmljZS5jCkBAIC0xNzgsNiArMTc4LDcgQEAKIAogCXJldHVybiAobWVfZGV2aWNlX3QgKikgbWU2MDAwX2RldmljZTsKIH0KK0VYUE9SVF9TWU1CT0wobWU2MDAwX3BjaV9jb25zdHJ1Y3Rvcik7CiAKIC8vIEluaXQgYW5kIGV4aXQgb2YgbW9kdWxlLgogCkBAIC0yMDYsNiArMjA3LDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIE1FLTYwMDAgRGV2aWNlIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgTUUtNjAwMCBEZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8vIEV4cG9ydCB0aGUgY29uc3RydWN0b3IuCi1FWFBPUlRfU1lNQk9MKG1lNjAwMF9wY2lfY29uc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9kaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTYwMDBfZGlvLmMKaW5kZXggMDdmMTA2OS4uYzkwNjg2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lNjAwMF9kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU2MDAwX2Rpby5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTkxLDcgKzkxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfZGlvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9kaW9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTE2MSw3ICsxNjEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2Rpb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2Rpb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICBpbnQgKnZhbHVlLCBpbnQgdGltZV9vdXQsIGludCBmbGFncykKQEAgLTIzMyw3ICsyMzMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2Rpb19pb19zaW5nbGVfd3JpdGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lNjAwMF9kaW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0zMTQsNyArMzE0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lNjAwMF9kaW9fcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfZGlvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU2MDAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU2MDAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zMzEsNyArMzMxLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTYwMDBfZGlvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTYwMDBfZGlvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zNDEsNyArMzQxLDcgQEAKIAogbWU2MDAwX2Rpb19zdWJkZXZpY2VfdCAqbWU2MDAwX2Rpb19jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCBkaW9faWR4LAotCQkJCQkgICAgICAgc3BpbmxvY2tfdCAqIGN0cmxfcmVnX2xvY2spCisJCQkJCSAgICAgICBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrKQogewogCW1lNjAwMF9kaW9fc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODEwMF9kZXZpY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgxMDBfZGV2aWNlLmMKaW5kZXggMWZiNzllNC4uNDFhOTM0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODEwMF9kZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MTAwX2RldmljZS5jCkBAIC0xNTksNiArMTU5LDcgQEAKIAogCXJldHVybiAobWVfZGV2aWNlX3QgKikgbWU4MTAwX2RldmljZTsKIH0KK0VYUE9SVF9TWU1CT0wobWU4MTAwX3BjaV9jb25zdHJ1Y3Rvcik7CiAKIC8vIEluaXQgYW5kIGV4aXQgb2YgbW9kdWxlLgogCkBAIC0xODIsNiArMTgzLDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIFRlbXBsYXRlIERldmljZSIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIFRlbXBsYXRlIERldmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLy8gRXhwb3J0IHRoZSBjb25zdHJ1Y3Rvci4KLUVYUE9SVF9TWU1CT0wobWU4MTAwX3BjaV9jb25zdHJ1Y3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MTAwX2RpLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MTAwX2RpLmMKaW5kZXggOTcxNzI3Yy4uMzAxZGJkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODEwMF9kaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgxMDBfZGkuYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KQEAgLTExNCw3ICsxMTQsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kaV9pb19pcnFfc3RhcnQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODEwMF9kaV9pb19pcnFfc3RhcnQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgIGludCBjaGFubmVsLAogCQkJCSAgaW50IGlycV9zb3VyY2UsCkBAIC0yMDgsNyArMjA4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kaV9pb19pcnFfd2FpdChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MTAwX2RpX2lvX2lycV93YWl0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgaW50IGNoYW5uZWwsCiAJCQkJIGludCAqaXJxX2NvdW50LApAQCAtMzE1LDcgKzMxNSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZGlfaW9faXJxX3N0b3AobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODEwMF9kaV9pb19pcnFfc3RvcChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBjaGFubmVsLCBpbnQgZmxhZ3MpCiB7CiAJbWU4MTAwX2RpX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTM1OCw3ICszNTgsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgxMDBfZGlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTQwNSw3ICs0MDUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgxMDBfZGlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC00NjYsNyArNDY2LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODEwMF9kaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtNDc0LDcgKzQ3NCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgxMDBfZGlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC00ODMsNyArNDgzLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZGlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqY2FwcykKK3N0YXRpYyBpbnQgbWU4MTAwX2RpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJKmNhcHMgPSBNRV9DQVBTX0RJT19CSVRfUEFUVEVSTl9JUlEgfCBNRV9DQVBTX0RJT19CSVRfTUFTS19JUlFfRURHRV9BTlk7CkBAIC01MDMsMTEgKzUwMyw3IEBACiAJa2ZyZWUoaW5zdGFuY2UpOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lODEwMF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTgxMDBfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi0jZW5kaWYKIHsKIAltZTgxMDBfZGlfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCXVpbnQzMl90IGljc3I7CkBAIC01OTgsNyArNTk0LDcgQEAKIAkJCQkJICAgICB1aW50MzJfdCBwbHhfcmVnX2Jhc2UsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IGRpX2lkeCwKIAkJCQkJICAgICBpbnQgaXJxLAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrKQorCQkJCQkgICAgIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2spCiB7CiAJbWU4MTAwX2RpX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgxMDBfZG8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgxMDBfZG8uYwppbmRleCA5NTdiOWY5Li44MTY1MWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MTAwX2RvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODEwMF9kby5jCkBAIC0zNiw3ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlICJtZWRlZmluZXMuaCIKQEAgLTkyLDcgKzkyLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZG9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MTAwX2RvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0xNTgsNyArMTU4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MTAwX2RvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMjE1LDcgKzIxNSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZG9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgxMDBfZG9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0yOTcsNyArMjk3LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODEwMF9kb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODEwMF9kb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX2RvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgxMDBfZG9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0zMTQsNyArMzE0LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgxMDBfZG9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqY2FwcykKK3N0YXRpYyBpbnQgbWU4MTAwX2RvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJKmNhcHMgPSBNRV9DQVBTX0RJT19TSU5LX1NPVVJDRTsKQEAgLTMyMyw3ICszMjMsNyBAQAogCiBtZTgxMDBfZG9fc3ViZGV2aWNlX3QgKm1lODEwMF9kb19jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgZG9faWR4LAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrKQorCQkJCQkgICAgIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2spCiB7CiAJbWU4MTAwX2RvX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2RldmljZS5jCmluZGV4IDI2MWMwY2IuLmIzMTM2NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kZXZpY2UuYwpAQCAtMTY2LDYgKzE2Niw3IEBACiAKIAlyZXR1cm4gKG1lX2RldmljZV90ICopIG1lODIwMF9kZXZpY2U7CiB9CitFWFBPUlRfU1lNQk9MKG1lODIwMF9wY2lfY29uc3RydWN0b3IpOwogCiAvLyBJbml0IGFuZCBleGl0IG9mIG1vZHVsZS4KIApAQCAtMTg5LDYgKzE5MCwzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSBEcml2ZXIgTW9kdWxlIGZvciBUZW1wbGF0ZSBEZXZpY2UiKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBUZW1wbGF0ZSBEZXZpY2VzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8vIEV4cG9ydCB0aGUgY29uc3RydWN0b3IuCi1FWFBPUlRfU1lNQk9MKG1lODIwMF9wY2lfY29uc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kaS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kaS5jCmluZGV4IDI3NTI1YmMuLmE5MzFmYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZGkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2RpLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CkBAIC01MCw1MiArNTAsNDQgQEAKIAogLy8vIERlZmluZXMKIHN0YXRpYyB2b2lkIG1lODIwMF9kaV9kZXN0cnVjdG9yKHN0cnVjdCBtZV9zdWJkZXZpY2UgKnN1YmRldmljZSk7Ci1zdGF0aWMgaW50IG1lODIwMF9kaV9pb19pcnFfc3RhcnQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9pb19pcnFfc3RhcnQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgIGludCBjaGFubmVsLAogCQkJCSAgaW50IGlycV9zb3VyY2UsCiAJCQkJICBpbnQgaXJxX2VkZ2UsIGludCBpcnFfYXJnLCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTgyMDBfZGlfaW9faXJxX3dhaXQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9pb19pcnFfd2FpdChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJIGludCBjaGFubmVsLAogCQkJCSBpbnQgKmlycV9jb3VudCwKIAkJCQkgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTgyMDBfZGlfaW9faXJxX3N0b3AobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9pb19pcnFfc3RvcChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBjaGFubmVsLCBpbnQgZmxhZ3MpOwotc3RhdGljIGludCBtZTgyMDBfZGlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCiAJCQkJICAgICAgaW50IHJlZiwKIAkJCQkgICAgICBpbnQgdHJpZ19jaGFuLAogCQkJCSAgICAgIGludCB0cmlnX3R5cGUsIGludCB0cmlnX2VkZ2UsIGludCBmbGFncyk7Ci1zdGF0aWMgaW50IG1lODIwMF9kaV9pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKTsKIHN0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX3Jlc2V0X3N1YmRldmljZShzdHJ1Y3QgbWVfc3ViZGV2aWNlICpzdWJkZXZpY2UsCiAJCQkJCXN0cnVjdCBmaWxlICpmaWxlcCwgaW50IGZsYWdzKTsKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKm51bWJlcik7Ci1zdGF0aWMgaW50IG1lODIwMF9kaV9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpOwotc3RhdGljIGludCBtZTgyMDBfZGlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgIGludCAqY2Fwcyk7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lODIwMF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU4MjAwX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLSNlbmRpZgotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTgyMDBfaXNyX0VYKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Ci0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lODIwMF9pc3JfRVgoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0jZW5kaWYKLXN0YXRpYyB2b2lkIG1lODIwMF9kaV9jaGVja192ZXJzaW9uKG1lODIwMF9kaV9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLAorc3RhdGljIHZvaWQgbWU4MjAwX2RpX2NoZWNrX3ZlcnNpb24obWU4MjAwX2RpX3N1YmRldmljZV90ICppbnN0YW5jZSwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyKTsKIAogLy8vRnVuY3Rpb25zCi1zdGF0aWMgaW50IG1lODIwMF9kaV9pb19pcnFfc3RhcnQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9pb19pcnFfc3RhcnQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgIGludCBjaGFubmVsLAogCQkJCSAgaW50IGlycV9zb3VyY2UsCkBAIC0yNDYsNyArMjM4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaV9pb19pcnFfd2FpdChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX2lycV93YWl0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgaW50IGNoYW5uZWwsCiAJCQkJIGludCAqaXJxX2NvdW50LApAQCAtMzUyLDcgKzM0NCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlfaW9faXJxX3N0b3AobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9pb19pcnFfc3RvcChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBjaGFubmVsLCBpbnQgZmxhZ3MpCiB7CiAJbWU4MjAwX2RpX3N1YmRldmljZV90ICppbnN0YW5jZTsKQEAgLTQwNiw3ICszOTgsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaV9pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfaW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgc2luZ2xlX2NvbmZpZywKQEAgLTQ1Myw3ICs0NDUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfaW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC01MTgsNyArNTEwLDcgQEAKIAlyZXR1cm4gbWU4MjAwX2RpX2lvX2lycV9zdG9wKHN1YmRldmljZSwgZmlsZXAsIDAsIDApOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaV9xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtNTI2LDcgKzUxOCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RpX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlfcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC01MzUsNyArNTI3LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlfcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqY2FwcykKK3N0YXRpYyBpbnQgbWU4MjAwX2RpX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJKmNhcHMgPQpAQCAtNTQ2LDExICs1MzgsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDE5KQogc3RhdGljIGlycXJldHVybl90IG1lODIwMF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotI2Vsc2UKLXN0YXRpYyBpcnFyZXR1cm5fdCBtZTgyMDBfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi0jZW5kaWYKIHsKIAltZTgyMDBfZGlfc3ViZGV2aWNlX3QgKmluc3RhbmNlOwogCXVpbnQ4X3QgY3RybDsKQEAgLTYyOSwxMSArNjE3LDcgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMTkpCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWU4MjAwX2lzcl9FWChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi0jZWxzZQotc3RhdGljIGlycXJldHVybl90IG1lODIwMF9pc3JfRVgoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLSNlbmRpZgogewogCW1lODIwMF9kaV9zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CiAJdWludDhfdCBpcnFfc3RhdHVzID0gMDsKQEAgLTcxNSw4ICs2OTksOCBAQAogbWU4MjAwX2RpX3N1YmRldmljZV90ICptZTgyMDBfZGlfY29uc3RydWN0b3IodWludDMyX3QgbWU4MjAwX3JlZ2Jhc2UsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IGRpX2lkeCwKIAkJCQkJICAgICBpbnQgaXJxLAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBpcnFfY3RybF9sb2NrLAotCQkJCQkgICAgIHNwaW5sb2NrX3QgKiBpcnFfbW9kZV9sb2NrKQorCQkJCQkgICAgIHNwaW5sb2NrX3QgKmlycV9jdHJsX2xvY2ssCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqaXJxX21vZGVfbG9jaykKIHsKIAltZTgyMDBfZGlfc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpAQCAtODQzLDcgKzgyNyw3IEBACiAJcmV0dXJuIHN1YmRldmljZTsKIH0KIAotc3RhdGljIHZvaWQgbWU4MjAwX2RpX2NoZWNrX3ZlcnNpb24obWU4MjAwX2RpX3N1YmRldmljZV90ICogaW5zdGFuY2UsCitzdGF0aWMgdm9pZCBtZTgyMDBfZGlfY2hlY2tfdmVyc2lvbihtZTgyMDBfZGlfc3ViZGV2aWNlX3QgKmluc3RhbmNlLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2Rpby5jCmluZGV4IGZmOGNhMWIuLmM3ZjQzZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kaW8uYwpAQCAtMzYsNyArMzYsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC05MCw3ICs5MCw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2Rpb19pb19zaW5nbGVfY29uZmlnKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0xNjQsNyArMTY0LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaW9faW9fc2luZ2xlX3JlYWQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgIGludCBjaGFubmVsLAogCQkJCSAgICAgaW50ICp2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0yNDEsNyArMjQxLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaW9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZGlvX2lvX3NpbmdsZV93cml0ZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgICBpbnQgdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMzMyLDcgKzMzMiw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZGlvX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2Rpb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgIGludCAqbnVtYmVyKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTM0MCw3ICszNDAsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kaW9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2Rpb19xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICBpbnQgKmNhcHMpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMzU5LDcgKzM1OSw3IEBACiAKIG1lODIwMF9kaW9fc3ViZGV2aWNlX3QgKm1lODIwMF9kaW9fY29uc3RydWN0b3IodWludDMyX3QgcmVnX2Jhc2UsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGlvX2lkeCwKLQkJCQkJICAgICAgIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrKQorCQkJCQkgICAgICAgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaykKIHsKIAltZTgyMDBfZGlvX3N1YmRldmljZV90ICpzdWJkZXZpY2U7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZG8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyMDBfZG8uYwppbmRleCBkMmJlYmQxLi40MGQ1MzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjAwX2RvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODIwMF9kby5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KIApAQCAtNTksNyArNTksNyBAQAogICogRnVuY3Rpb25zCiAgKi8KIAotc3RhdGljIGludCBtZTgyMDBfZG9faW9faXJxX3N0YXJ0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZG9faW9faXJxX3N0YXJ0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICBpbnQgY2hhbm5lbCwKIAkJCQkgIGludCBpcnFfc291cmNlLApAQCAtMTA5LDcgKzEwOSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZG9faW9faXJxX3dhaXQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kb19pb19pcnFfd2FpdChtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJIGludCBjaGFubmVsLAogCQkJCSBpbnQgKmlycV9jb3VudCwKQEAgLTE4NCw3ICsxODQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RvX2lvX2lycV9zdG9wKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZG9faW9faXJxX3N0b3AobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgY2hhbm5lbCwgaW50IGZsYWdzKQogewogCW1lODIwMF9kb19zdWJkZXZpY2VfdCAqaW5zdGFuY2U7CkBAIC0yNjIsNyArMjYyLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZG9faW9fc2luZ2xlX2NvbmZpZyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RvX2lvX3NpbmdsZV9jb25maWcobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgICAgaW50IHNpbmdsZV9jb25maWcsCkBAIC0zMDcsNyArMzA3LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kb19pb19zaW5nbGVfcmVhZChtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWU4MjAwX2RvX2lvX3NpbmdsZV9yZWFkKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgaW50IGNoYW5uZWwsCiAJCQkJICAgIGludCAqdmFsdWUsIGludCB0aW1lX291dCwgaW50IGZsYWdzKQpAQCAtMzU0LDcgKzM1NCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZG9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZG9faW9fc2luZ2xlX3dyaXRlKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICBpbnQgY2hhbm5lbCwKIAkJCQkgICAgIGludCB2YWx1ZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC00MTUsNyArNDE1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lODIwMF9kb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lODIwMF9kb19xdWVyeV9udW1iZXJfY2hhbm5lbHMobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtNDIzLDcgKzQyMyw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MjAwX2RvX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZTgyMDBfZG9fcXVlcnlfc3ViZGV2aWNlX3R5cGUobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSwKIAkJCQkJICBpbnQgKnR5cGUsIGludCAqc3VidHlwZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC00MzIsNyArNDMyLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBtZTgyMDBfZG9fcXVlcnlfc3ViZGV2aWNlX2NhcHMobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsIGludCAqY2FwcykKK3N0YXRpYyBpbnQgbWU4MjAwX2RvX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJKmNhcHMgPSBNRV9DQVBTX0RJT19PVkVSX1RFTVBfSVJROwpAQCAtNDUyLDExICs0NTIsNyBAQAogCWtmcmVlKGluc3RhbmNlKTsKIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLCA2LCAxOSkKIHN0YXRpYyBpcnFyZXR1cm5fdCBtZTgyMDBfZG9faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLSNlbHNlCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWU4MjAwX2RvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotI2VuZGlmCiB7CiAJbWU4MjAwX2RvX3N1YmRldmljZV90ICppbnN0YW5jZTsKIAl1aW50MTZfdCBjdHJsOwpAQCAtNTA1LDcgKzUwMSw3IEBACiBtZTgyMDBfZG9fc3ViZGV2aWNlX3QgKm1lODIwMF9kb19jb25zdHJ1Y3Rvcih1aW50MzJfdCByZWdfYmFzZSwKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgZG9faWR4LAogCQkJCQkgICAgIGludCBpcnEsCi0JCQkJCSAgICAgc3BpbmxvY2tfdCAqIGlycV9tb2RlX2xvY2spCisJCQkJCSAgICAgc3BpbmxvY2tfdCAqaXJxX21vZGVfbG9jaykKIHsKIAltZTgyMDBfZG9fc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODI1NC5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODI1NC5jCmluZGV4IDZlNDRjM2QuLmQ4Zjc0MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyNTQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjU0LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtMTgzLDcgKzE4Myw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZTE0MDBfYWJfcmVmX2NvbmZpZyhtZTgyNTRfc3ViZGV2aWNlX3QgKiBpbnN0YW5jZSwgaW50IHJlZikKK3N0YXRpYyBpbnQgbWUxNDAwX2FiX3JlZl9jb25maWcobWU4MjU0X3N1YmRldmljZV90ICppbnN0YW5jZSwgaW50IHJlZikKIHsKIAl1aW50OF90IGNsa19zcmM7CiAKQEAgLTI5MSw3ICsyOTEsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lMTQwMF9jZF9yZWZfY29uZmlnKG1lODI1NF9zdWJkZXZpY2VfdCAqIGluc3RhbmNlLCBpbnQgcmVmKQorc3RhdGljIGludCBtZTE0MDBfY2RfcmVmX2NvbmZpZyhtZTgyNTRfc3ViZGV2aWNlX3QgKmluc3RhbmNlLCBpbnQgcmVmKQogewogCXVpbnQ4X3QgY2xrX3NyYzsKIApAQCAtNDM2LDcgKzQzNiw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU0NjAwX3JlZl9jb25maWcobWU4MjU0X3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCByZWYpCitzdGF0aWMgaW50IG1lNDYwMF9yZWZfY29uZmlnKG1lODI1NF9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCByZWYpCiB7CiAJc3dpdGNoIChyZWYpIHsKIApAQCAtNDUzLDcgKzQ1Myw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWU4MTAwX3JlZl9jb25maWcobWU4MjU0X3N1YmRldmljZV90ICogaW5zdGFuY2UsIGludCByZWYpCitzdGF0aWMgaW50IG1lODEwMF9yZWZfY29uZmlnKG1lODI1NF9zdWJkZXZpY2VfdCAqaW5zdGFuY2UsIGludCByZWYpCiB7CiAJc3dpdGNoIChyZWYpIHsKIApAQCAtOTYyLDggKzk2Miw4IEBACiAJCQkJICAgICAgIHVpbnQzMl90IHJlZ19iYXNlLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWU4MjU0X2lkeCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IGN0cl9pZHgsCi0JCQkJICAgICAgIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrLAotCQkJCSAgICAgICBzcGlubG9ja190ICogY2xrX3NyY19yZWdfbG9jaykKKwkJCQkgICAgICAgc3BpbmxvY2tfdCAqY3RybF9yZWdfbG9jaywKKwkJCQkgICAgICAgc3BpbmxvY2tfdCAqY2xrX3NyY19yZWdfbG9jaykKIHsKIAltZTgyNTRfc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODI1NS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lODI1NS5jCmluZGV4IDE4MGU3ZjguLmVjOWM2MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZTgyNTUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWU4MjU1LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgIm1lZGVmaW5lcy5oIgpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCQkJICAgICAgIHVuc2lnbmVkIGludCBtZTgyNTVfaWR4LAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGlvX2lkeCwKIAkJCQkgICAgICAgaW50ICpjdHJsX3JlZ19taXJyb3IsCi0JCQkJICAgICAgIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrKQorCQkJCSAgICAgICBzcGlubG9ja190ICpjdHJsX3JlZ19sb2NrKQogewogCW1lODI1NV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlOwogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVjaXJjX2J1Zi5oIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lY2lyY19idWYuaAppbmRleCBlOWI1OTFlLi41MTY2NTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVjaXJjX2J1Zi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWNpcmNfYnVmLmgKQEAgLTQwLDE5ICs0MCwxOSBAQAogCWludCB2b2xhdGlsZSB0YWlsOwogfSBtZV9jaXJjX2J1Zl90OwogCi1zdGF0aWMgaW50IGlubGluZSBtZV9jaXJjX2J1Zl92YWx1ZXMobWVfY2lyY19idWZfdCAqIGJ1ZikKK3N0YXRpYyBpbmxpbmUgaW50IG1lX2NpcmNfYnVmX3ZhbHVlcyhtZV9jaXJjX2J1Zl90ICogYnVmKQogewogLy8gICAgICByZXR1cm4gKChidWYtPmhlYWQgLSBidWYtPnRhaWwpICYgKGJ1Zi0+Y291bnQgLSAxKSk7CiAJcmV0dXJuICgoYnVmLT5oZWFkIC0gYnVmLT50YWlsKSAmIChidWYtPm1hc2spKTsKIH0KIAotc3RhdGljIGludCBpbmxpbmUgbWVfY2lyY19idWZfc3BhY2UobWVfY2lyY19idWZfdCAqIGJ1ZikKK3N0YXRpYyBpbmxpbmUgaW50IG1lX2NpcmNfYnVmX3NwYWNlKG1lX2NpcmNfYnVmX3QgKiBidWYpCiB7CiAvLyAgICAgIHJldHVybiAoKGJ1Zi0+dGFpbCAtIChidWYtPmhlYWQgKyAxKSkgJiAoYnVmLT5jb3VudCAtIDEpKTsKIAlyZXR1cm4gKChidWYtPnRhaWwgLSAoYnVmLT5oZWFkICsgMSkpICYgKGJ1Zi0+bWFzaykpOwogfQogCi1zdGF0aWMgaW50IGlubGluZSBtZV9jaXJjX2J1Zl92YWx1ZXNfdG9fZW5kKG1lX2NpcmNfYnVmX3QgKiBidWYpCitzdGF0aWMgaW5saW5lIGludCBtZV9jaXJjX2J1Zl92YWx1ZXNfdG9fZW5kKG1lX2NpcmNfYnVmX3QgKiBidWYpCiB7CiAJaW50IGVuZDsKIAlpbnQgbjsKQEAgLTYzLDcgKzYzLDcgQEAKIAlyZXR1cm4gKG4gPCBlbmQpID8gbiA6IGVuZDsKIH0KIAotc3RhdGljIGludCBpbmxpbmUgbWVfY2lyY19idWZfc3BhY2VfdG9fZW5kKG1lX2NpcmNfYnVmX3QgKiBidWYpCitzdGF0aWMgaW5saW5lIGludCBtZV9jaXJjX2J1Zl9zcGFjZV90b19lbmQobWVfY2lyY19idWZfdCAqIGJ1ZikKIHsKIAlpbnQgZW5kOwogCWludCBuOwpAQCAtOTksMTkgKzk5LDE5IEBACiAjICAgZW5kaWYgLy9fQ0JVRkZfMzJiX3QKIAogLyoqIEhvdyBtYW55IHZhbHVlcyBpcyBpbiBidWZmZXIgKi8KLXN0YXRpYyBpbnQgaW5saW5lIG1lX2NpcmNfYnVmX3ZhbHVlcyhtZV9jaXJjX2J1Zl90ICogYnVmKQorc3RhdGljIGlubGluZSBpbnQgbWVfY2lyY19idWZfdmFsdWVzKG1lX2NpcmNfYnVmX3QgKiBidWYpCiB7CiAJcmV0dXJuICgoYnVmLT5oZWFkIC0gYnVmLT50YWlsKSAmIChidWYtPm1hc2spKTsKIH0KIAogLyoqIEhvdyBtYW55IHNwYWNlIGxlZnQgKi8KLXN0YXRpYyBpbnQgaW5saW5lIG1lX2NpcmNfYnVmX3NwYWNlKG1lX2NpcmNfYnVmX3QgKiBidWYpCitzdGF0aWMgaW5saW5lIGludCBtZV9jaXJjX2J1Zl9zcGFjZShtZV9jaXJjX2J1Zl90ICogYnVmKQogewogCXJldHVybiAoKGJ1Zi0+dGFpbCAtIChidWYtPmhlYWQgKyAxKSkgJiAoYnVmLT5tYXNrKSk7CiB9CiAKIC8qKiBIb3cgbWFueSB2YWx1ZXMgY2FuIGJlIHJlYWQgZnJvbSBidWZmb3IgaW4gb25lIGNodW5jay4gKi8KLXN0YXRpYyBpbnQgaW5saW5lIG1lX2NpcmNfYnVmX3ZhbHVlc190b19lbmQobWVfY2lyY19idWZfdCAqIGJ1ZikKK3N0YXRpYyBpbmxpbmUgaW50IG1lX2NpcmNfYnVmX3ZhbHVlc190b19lbmQobWVfY2lyY19idWZfdCAqIGJ1ZikKIHsKIAlyZXR1cm4gKGJ1Zi0+dGFpbCA8PQogCQlidWYtPmhlYWQpID8gKGJ1Zi0+aGVhZCAtIGJ1Zi0+dGFpbCkgOiAoYnVmLT5tYXNrIC0gYnVmLT50YWlsICsKQEAgLTExOSw3ICsxMTksNyBAQAogfQogCiAvKiogSG93IG1hbnkgdmFsdWVzIGNhbiBiZSB3cml0ZSB0byBidWZmZXIgaW4gb25lIGNodW5jay4gKi8KLXN0YXRpYyBpbnQgaW5saW5lIG1lX2NpcmNfYnVmX3NwYWNlX3RvX2VuZChtZV9jaXJjX2J1Zl90ICogYnVmKQorc3RhdGljIGlubGluZSBpbnQgbWVfY2lyY19idWZfc3BhY2VfdG9fZW5kKG1lX2NpcmNfYnVmX3QgKiBidWYpCiB7CiAJcmV0dXJuIChidWYtPnRhaWwgPD0KIAkJYnVmLT5oZWFkKSA/IChidWYtPm1hc2sgLSBidWYtPmhlYWQgKyAxKSA6IChidWYtPnRhaWwgLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkZXZpY2UuYwppbmRleCA4ZjYyZTE2Li43NWFhZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkZXZpY2UuYwpAQCAtMzkwLDkgKzM5MCw5IEBACiBzdGF0aWMgaW50IG1lX2RldmljZV9pb19zdHJlYW1fY29uZmlnKHN0cnVjdCBtZV9kZXZpY2UgKmRldmljZSwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgICAgaW50IHN1YmRldmljZSwKLQkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKiBjb25maWdfbGlzdCwKKwkJCQkgICAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKmNvbmZpZ19saXN0LAogCQkJCSAgICAgIGludCBjb3VudCwKLQkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICogdHJpZ2dlciwKKwkJCQkgICAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICp0cmlnZ2VyLAogCQkJCSAgICAgIGludCBmaWZvX2lycV90aHJlc2hvbGQsIGludCBmbGFncykKIHsKIAlpbnQgZXJyID0gTUVfRVJSTk9fU1VDQ0VTUzsKQEAgLTEwNDAsNyArMTA0MCw3IEBACiAJCQkJIGludCBzdWJkZXZpY2UsCiAJCQkJIGludCB0aW1lciwKIAkJCQkgaW50ICpiYXNlX2ZyZXF1ZW5jeSwKLQkJCQkgdWludDY0X3QgKiBtaW5fdGlja3MsIHVpbnQ2NF90ICogbWF4X3RpY2tzKQorCQkJCSB1aW50NjRfdCAqbWluX3RpY2tzLCB1aW50NjRfdCAqbWF4X3RpY2tzKQogewogCWludCBlcnIgPSBNRV9FUlJOT19TVUNDRVNTOwogCW1lX3N1YmRldmljZV90ICpzOwpAQCAtMTA4MiwxNCArMTA4MiwxNCBAQAogfQogCiBzdGF0aWMgaW50IG1lX2RldmljZV9jb25maWdfbG9hZChzdHJ1Y3QgbWVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkgbWVfY2ZnX2RldmljZV9lbnRyeV90ICogY29uZmlnKQorCQkJCSBtZV9jZmdfZGV2aWNlX2VudHJ5X3QgKmNvbmZpZykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CS8vSWYgbm8gbmVlZCBmb3IgY29uZmlnIHJldHVybiBzdWNjZXNzLgogLy8gICAgICByZXR1cm4gTUVfRVJSTk9fTk9UX1NVUFBPUlRFRDsKIH0KIAotc3RhdGljIHZvaWQgbWVfZGV2aWNlX2Rlc3RydWN0b3IobWVfZGV2aWNlX3QgKiBtZV9kZXZpY2UpCitzdGF0aWMgdm9pZCBtZV9kZXZpY2VfZGVzdHJ1Y3RvcihtZV9kZXZpY2VfdCAqbWVfZGV2aWNlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAltZV9kZXZpY2VfZGVpbml0KG1lX2RldmljZSk7CkBAIC0xNTgxLDcgKzE1ODEsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbWVfZGV2aWNlX3BjaV9pbml0KG1lX2RldmljZV90ICogbWVfZGV2aWNlLCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldmljZSkKK2ludCBtZV9kZXZpY2VfcGNpX2luaXQobWVfZGV2aWNlX3QgKm1lX2RldmljZSwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZpY2UpCiB7CiAJaW50IGVycjsKIAlpbnQgaTsKQEAgLTE3MjAsNyArMTcyMCw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXZvaWQgbWVfZGV2aWNlX2RlaW5pdChtZV9kZXZpY2VfdCAqIG1lX2RldmljZSkKK3ZvaWQgbWVfZGV2aWNlX2RlaW5pdChtZV9kZXZpY2VfdCAqbWVfZGV2aWNlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZGxpc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWRsaXN0LmMKaW5kZXggZWY0ZTM2OS4uYjZhNDA2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZGxpc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkbGlzdC5jCkBAIC02OSw3ICs2OSw3IEBACiAJcmV0dXJuIGRldmljZTsKIH0KIAotdm9pZCBtZV9kbGlzdF9hZGRfZGV2aWNlX3RhaWwoc3RydWN0IG1lX2RsaXN0ICpkbGlzdCwgbWVfZGV2aWNlX3QgKiBkZXZpY2UpCit2b2lkIG1lX2RsaXN0X2FkZF9kZXZpY2VfdGFpbChzdHJ1Y3QgbWVfZGxpc3QgKmRsaXN0LCBtZV9kZXZpY2VfdCAqZGV2aWNlKQogewogCVBERUJVR19MT0NLUygiY2FsbGVkLlxuIik7CiAKQEAgLTk5LDcgKzk5LDcgQEAKIAlyZXR1cm4gZGV2aWNlOwogfQogCi1pbnQgbWVfZGxpc3RfaW5pdChtZV9kbGlzdF90ICogZGxpc3QpCitpbnQgbWVfZGxpc3RfaW5pdChtZV9kbGlzdF90ICpkbGlzdCkKIHsKIAlQREVCVUdfTE9DS1MoImNhbGxlZC5cbiIpOwogCkBAIC0xMDgsNyArMTA4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBtZV9kbGlzdF9kZWluaXQobWVfZGxpc3RfdCAqIGRsaXN0KQordm9pZCBtZV9kbGlzdF9kZWluaXQobWVfZGxpc3RfdCAqZGxpc3QpCiB7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZGxvY2suYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWRsb2NrLmMKaW5kZXggZjY0OWUzZC4uOGRlZDM5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZGxvY2suYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkbG9jay5jCkBAIC02NSw3ICs2NSw3IEBACiB9CiAKIGludCBtZV9kbG9ja19sb2NrKHN0cnVjdCBtZV9kbG9jayAqZGxvY2ssCi0JCSAgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgbG9jaywgaW50IGZsYWdzLCBtZV9zbGlzdF90ICogc2xpc3QpCisJCSAgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgbG9jaywgaW50IGZsYWdzLCBtZV9zbGlzdF90ICpzbGlzdCkKIHsKIAlpbnQgZXJyID0gTUVfRVJSTk9fU1VDQ0VTUzsKIAlpbnQgaTsKQEAgLTE4Myw3ICsxODMsNyBAQAogCVBERUJVR19MT0NLUygiZXhlY3V0ZWQuXG4iKTsKIH0KIAotaW50IG1lX2Rsb2NrX2luaXQobWVfZGxvY2tfdCAqIGRsb2NrKQoraW50IG1lX2Rsb2NrX2luaXQobWVfZGxvY2tfdCAqZGxvY2spCiB7CiAJUERFQlVHX0xPQ0tTKCJleGVjdXRlZC5cbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkdW1teS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lZHVtbXkuYwppbmRleCA2YTlmMDhkLi4yNDIzNzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVkdW1teS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZWR1bW15LmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogI2luY2x1ZGUgIm1lZHVtbXkuaCIKIAotc3RhdGljIGludCBtZWR1bW15X2lvX2lycV9zdGFydChtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19pcnFfc3RhcnQobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQlzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJaW50IHN1YmRldmljZSwKIAkJCQlpbnQgY2hhbm5lbCwKQEAgLTU4LDcgKzU4LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX2lycV93YWl0KG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX2lycV93YWl0KG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJICAgICAgIGludCBzdWJkZXZpY2UsCiAJCQkgICAgICAgaW50IGNoYW5uZWwsCkBAIC02OSw3ICs2OSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19pcnFfc3RvcChtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19pcnFfc3RvcChtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCSAgICAgICBpbnQgc3ViZGV2aWNlLCBpbnQgY2hhbm5lbCwgaW50IGZsYWdzKQogewpAQCAtNzcsMTQgKzc3LDE0IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19yZXNldF9kZXZpY2UobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9fcmVzZXRfZGV2aWNlKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICAgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgZmxhZ3MpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9fcmVzZXRfc3ViZGV2aWNlKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX3Jlc2V0X3N1YmRldmljZShtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICAgICBpbnQgc3ViZGV2aWNlLCBpbnQgZmxhZ3MpCiB7CkBAIC05Miw3ICs5Miw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19zaW5nbGVfY29uZmlnKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX3NpbmdsZV9jb25maWcobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgICBpbnQgc3ViZGV2aWNlLAogCQkJCSAgICBpbnQgY2hhbm5lbCwKQEAgLTEwNSw3ICsxMDUsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9fc2luZ2xlX3JlYWQobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9fc2luZ2xlX3JlYWQobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgIGludCBzdWJkZXZpY2UsCiAJCQkJICBpbnQgY2hhbm5lbCwKQEAgLTExNSw3ICsxMTUsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9fc2luZ2xlX3dyaXRlKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X2lvX3NpbmdsZV93cml0ZShtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgICBpbnQgc3ViZGV2aWNlLAogCQkJCSAgIGludCBjaGFubmVsLApAQCAtMTI1LDE5ICsxMjUsMTkgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV9jb25maWcobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX2NvbmZpZyhtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBzdWJkZXZpY2UsCi0JCQkJICAgIG1lSU9TdHJlYW1Db25maWdfdCAqIGNvbmZpZ19saXN0LAorCQkJCSAgICBtZUlPU3RyZWFtQ29uZmlnX3QgKmNvbmZpZ19saXN0LAogCQkJCSAgICBpbnQgY291bnQsCi0JCQkJICAgIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKiB0cmlnZ2VyLAorCQkJCSAgICBtZUlPU3RyZWFtVHJpZ2dlcl90ICp0cmlnZ2VyLAogCQkJCSAgICBpbnQgZmlmb19pcnFfdGhyZXNob2xkLCBpbnQgZmxhZ3MpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX25ld192YWx1ZXMobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX25ld192YWx1ZXMobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkJc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCQlpbnQgc3ViZGV2aWNlLAogCQkJCQlpbnQgdGltZW91dCwgaW50ICpjb3VudCwgaW50IGZsYWdzKQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fcmVhZChtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fcmVhZChtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgaW50IHN1YmRldmljZSwKIAkJCQkgIGludCByZWFkX21vZGUsCkBAIC0xNTYsNyArMTU2LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV9zdGFydChtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fc3RhcnQobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgaW50IHN1YmRldmljZSwKIAkJCQkgICBpbnQgc3RhcnRfbW9kZSwgaW50IHRpbWVfb3V0LCBpbnQgZmxhZ3MpCkBAIC0xNjUsNyArMTY1LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X2lvX3N0cmVhbV9zdGF0dXMobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX3N0YXR1cyhtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCQkJICAgIGludCBzdWJkZXZpY2UsCiAJCQkJICAgIGludCB3YWl0LApAQCAtMTc1LDcgKzE3NSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fc3RvcChtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fc3RvcChtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCSAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgaW50IHN1YmRldmljZSwgaW50IHN0b3BfbW9kZSwgaW50IGZsYWdzKQogewpAQCAtMTgzLDcgKzE4Myw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9pb19zdHJlYW1fd3JpdGUobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfaW9fc3RyZWFtX3dyaXRlKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICAgc3RydWN0IGZpbGUgKmZpbGVwLAogCQkJCSAgIGludCBzdWJkZXZpY2UsCiAJCQkJICAgaW50IHdyaXRlX21vZGUsCkBAIC0xOTMsMTQgKzE5MywxNCBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfbG9ja19kZXZpY2UobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfbG9ja19kZXZpY2UobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBsb2NrLCBpbnQgZmxhZ3MpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfbG9ja19zdWJkZXZpY2UobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfbG9ja19zdWJkZXZpY2UobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgIHN0cnVjdCBmaWxlICpmaWxlcCwKIAkJCQkgIGludCBzdWJkZXZpY2UsIGludCBsb2NrLCBpbnQgZmxhZ3MpCiB7CkBAIC0yMDgsNyArMjA4LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X2Rlc2NyaXB0aW9uX2RldmljZShtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9kZXNjcmlwdGlvbl9kZXZpY2UobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkJICAgIGNoYXIgKipkZXNjcmlwdGlvbikKIHsKIAltZWR1bW15X2RldmljZV90ICppbnN0YW5jZSA9IChtZWR1bW15X2RldmljZV90ICopIGRldmljZTsKQEAgLTYwMiw3ICs2MDIsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfaW5mb19kZXZpY2UobWVfZGV2aWNlX3QgKiBkZXZpY2UsCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfaW5mb19kZXZpY2UobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgICAgIGludCAqdmVuZG9yX2lkLAogCQkJCSAgICAgaW50ICpkZXZpY2VfaWQsCiAJCQkJICAgICBpbnQgKnNlcmlhbF9ubywKQEAgLTYzMiwxNCArNjMyLDE0IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9uYW1lX2RldmljZV9kcml2ZXIobWVfZGV2aWNlX3QgKiBkZXZpY2UsIGNoYXIgKipuYW1lKQorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X25hbWVfZGV2aWNlX2RyaXZlcihtZV9kZXZpY2VfdCAqZGV2aWNlLCBjaGFyICoqbmFtZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJKm5hbWUgPSBNRURVTU1ZX05BTUVfRFJJVkVSOwogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfbmFtZV9kZXZpY2UobWVfZGV2aWNlX3QgKiBkZXZpY2UsIGNoYXIgKipuYW1lKQorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X25hbWVfZGV2aWNlKG1lX2RldmljZV90ICpkZXZpY2UsIGNoYXIgKipuYW1lKQogewogCW1lZHVtbXlfZGV2aWNlX3QgKmluc3RhbmNlID0gKG1lZHVtbXlfZGV2aWNlX3QgKikgZGV2aWNlOwogCkBAIC0xMDEyLDQxICsxMDEyLDQxIEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9udW1iZXJfc3ViZGV2aWNlcyhtZV9kZXZpY2VfdCAqIGRldmljZSwgaW50ICpudW1iZXIpCitzdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfbnVtYmVyX3N1YmRldmljZXMobWVfZGV2aWNlX3QgKmRldmljZSwgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCQkgaW50IHN1YmRldmljZSwgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfbnVtYmVyX3JhbmdlcyhtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9udW1iZXJfcmFuZ2VzKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJICAgICAgIGludCBzdWJkZXZpY2UsIGludCB1bml0LCBpbnQgKmNvdW50KQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJCWludCBzdWJkZXZpY2UsIGludCAqdHlwZSwgaW50ICpzdWJ0eXBlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlyZXR1cm4gTUVfRVJSTk9fREVWSUNFX1VOUExVR0dFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJCWludCBzdWJkZXZpY2UsIGludCAqY2FwcykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9zdWJkZXZpY2VfY2Fwc19hcmdzKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3N1YmRldmljZV9jYXBzX2FyZ3MobWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkJICAgICBpbnQgc3ViZGV2aWNlLAogCQkJCQkgICAgIGludCBjYXAsIGludCAqYXJncywgaW50IGNvdW50KQogewpAQCAtMTA1NCw3ICsxMDU0LDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fTk9UX1NVUFBPUlRFRDsKIH0KIAotc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3N1YmRldmljZV9ieV90eXBlKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3N1YmRldmljZV9ieV90eXBlKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJCSAgIGludCBzdGFydF9zdWJkZXZpY2UsCiAJCQkJCSAgIGludCB0eXBlLAogCQkJCQkgICBpbnQgc3VidHlwZSwgaW50ICpzdWJkZXZpY2UpCkBAIC0xMDYzLDcgKzEwNjMsNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfcmFuZ2VfYnlfbWluX21heChtZV9kZXZpY2VfdCAqIGRldmljZSwKK3N0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9yYW5nZV9ieV9taW5fbWF4KG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQkJCSAgaW50IHN1YmRldmljZSwKIAkJCQkJICBpbnQgdW5pdCwKIAkJCQkJICBpbnQgKm1pbiwKQEAgLTEwNzMsNyArMTA3Myw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX0RFVklDRV9VTlBMVUdHRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbWVkdW1teV9xdWVyeV9yYW5nZV9pbmZvKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3JhbmdlX2luZm8obWVfZGV2aWNlX3QgKmRldmljZSwKIAkJCQkgICAgaW50IHN1YmRldmljZSwKIAkJCQkgICAgaW50IHJhbmdlLAogCQkJCSAgICBpbnQgKnVuaXQsIGludCAqbWluLCBpbnQgKm1heCwgaW50ICptYXhkYXRhKQpAQCAtMTA4MiwxNyArMTA4MiwxNyBAQAogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1pbnQgbWVkdW1teV9xdWVyeV90aW1lcihtZV9kZXZpY2VfdCAqIGRldmljZSwKK2ludCBtZWR1bW15X3F1ZXJ5X3RpbWVyKG1lX2RldmljZV90ICpkZXZpY2UsCiAJCQlpbnQgc3ViZGV2aWNlLAogCQkJaW50IHRpbWVyLAogCQkJaW50ICpiYXNlX2ZyZXF1ZW5jeSwKLQkJCXVpbnQ2NF90ICogbWluX3RpY2tzLCB1aW50NjRfdCAqIG1heF90aWNrcykKKwkJCXVpbnQ2NF90ICptaW5fdGlja3MsIHVpbnQ2NF90ICptYXhfdGlja3MpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCXJldHVybiBNRV9FUlJOT19ERVZJQ0VfVU5QTFVHR0VEOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfcXVlcnlfdmVyc2lvbl9kZXZpY2VfZHJpdmVyKG1lX2RldmljZV90ICogZGV2aWNlLAorc3RhdGljIGludCBtZWR1bW15X3F1ZXJ5X3ZlcnNpb25fZGV2aWNlX2RyaXZlcihtZV9kZXZpY2VfdCAqZGV2aWNlLAogCQkJCQkgICAgICAgaW50ICp2ZXJzaW9uKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTExMDEsNyArMTEwMSw3IEBACiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CiB9CiAKLXN0YXRpYyB2b2lkIG1lZHVtbXlfZGVzdHJ1Y3RvcihtZV9kZXZpY2VfdCAqIGRldmljZSkKK3N0YXRpYyB2b2lkIG1lZHVtbXlfZGVzdHJ1Y3RvcihtZV9kZXZpY2VfdCAqZGV2aWNlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlrZnJlZShkZXZpY2UpOwpAQCAtMTExMyw3ICsxMTEzLDcgQEAKIAkJCSAgICBpbnQgYnVzX3R5cGUsCiAJCQkgICAgaW50IGJ1c19ubywKIAkJCSAgICBpbnQgZGV2X25vLAotCQkJICAgIGludCBmdW5jX25vLCBtZWR1bW15X2RldmljZV90ICogaW5zdGFuY2UpCisJCQkgICAgaW50IGZ1bmNfbm8sIG1lZHVtbXlfZGV2aWNlX3QgKmluc3RhbmNlKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIApAQCAtMTEyOSwxNCArMTEyOSwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1lZHVtbXlfY29uZmlnX2xvYWQobWVfZGV2aWNlX3QgKiBkZXZpY2UsIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCSAgICAgICBtZV9jZmdfZGV2aWNlX2VudHJ5X3QgKiBjb25maWcpCitzdGF0aWMgaW50IG1lZHVtbXlfY29uZmlnX2xvYWQobWVfZGV2aWNlX3QgKmRldmljZSwgc3RydWN0IGZpbGUgKmZpbGVwLAorCQkJICAgICAgIG1lX2NmZ19kZXZpY2VfZW50cnlfdCAqY29uZmlnKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIGludCBpbml0X2RldmljZV9pbnN0YW5jZShtZV9kZXZpY2VfdCAqIGRldmljZSkKK3N0YXRpYyBpbnQgaW5pdF9kZXZpY2VfaW5zdGFuY2UobWVfZGV2aWNlX3QgKmRldmljZSkKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAKQEAgLTEyMzgsNiArMTIzOCw3IEBACiAKIAlyZXR1cm4gKG1lX2RldmljZV90ICopIGluc3RhbmNlOwogfQorRVhQT1JUX1NZTUJPTChtZWR1bW15X2NvbnN0cnVjdG9yKTsKIAogLy8gSW5pdCBhbmQgZXhpdCBvZiBtb2R1bGUuCiAKQEAgLTEyNjEsNiArMTI2MiwzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSBEcml2ZXIgTW9kdWxlIGZvciBNZWlsaGF1cyBNRS1EVU1NWSBEZXZpY2VzIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiTWVpbGhhdXMgTUUtRFVNTVkgRGV2aWNlcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vLyBFeHBvcnQgdGhlIGNvbnN0cnVjdG9yLgotRVhQT1JUX1NZTUJPTChtZWR1bW15X2NvbnN0cnVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZW1haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZW1haW4uYwppbmRleCBiMDlkMWE2Li5mZDlmMDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVtYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lbWFpbi5jCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAvLyNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogCkBAIC01Niw2ICs1Niw3IEBACiAKICNpZmRlZiBCT1NDSAogc3RhdGljIHVuc2lnbmVkIGludCBtZV9ib3NjaF9mdyA9IDA7CitFWFBPUlRfU1lNQk9MKG1lX2Jvc2NoX2Z3KTsKIAogIyBpZmRlZiBtb2R1bGVfcGFyYW0KIG1vZHVsZV9wYXJhbShtZV9ib3NjaF9mdywgaW50LCBTX0lSVUdPKTsKQEAgLTc5LDcgKzgwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBmaWxlICptZV9maWxlcCA9IE5VTEw7CiBzdGF0aWMgaW50IG1lX2NvdW50ID0gMDsKLXN0YXRpYyBzcGlubG9ja190IG1lX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1lX2xvY2spOwogc3RhdGljIERFQ0xBUkVfUldTRU0obWVfcndzZW0pOwogCiAvKiBCb2FyZCBpbnN0YW5jZXMgYXJlIGtlcHQgaW4gYSBnbG9iYWwgbGlzdCAqLwpAQCAtOTAsNyArOTEsNyBAQAogCiBzdGF0aWMgaW50IG1lX3Byb2JlX3BjaShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwogc3RhdGljIHZvaWQgbWVfcmVtb3ZlX3BjaShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLXN0YXRpYyBpbnQgaW5zZXJ0X3RvX2RldmljZV9saXN0KG1lX2RldmljZV90ICogbl9kZXZpY2UpOworc3RhdGljIGludCBpbnNlcnRfdG9fZGV2aWNlX2xpc3QobWVfZGV2aWNlX3QgKm5fZGV2aWNlKTsKIHN0YXRpYyBpbnQgcmVwbGFjZV93aXRoX2R1bW15KGludCB2ZW5kb3JfaWQsIGludCBkZXZpY2VfaWQsIGludCBzZXJpYWxfbm8pOwogc3RhdGljIHZvaWQgY2xlYXJfZGV2aWNlX2xpc3Qodm9pZCk7CiBzdGF0aWMgaW50IG1lX29wZW4oc3RydWN0IGlub2RlICppbm9kZV9wdHIsIHN0cnVjdCBmaWxlICpmaWxlcCk7CkBAIC00NzIsNyArNDczLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fU1VDQ0VTUzsKIH0KIAotc3RhdGljIHZvaWQgcmVsZWFzZV9pbnN0YW5jZShtZV9kZXZpY2VfdCAqIGRldmljZSkKK3N0YXRpYyB2b2lkIHJlbGVhc2VfaW5zdGFuY2UobWVfZGV2aWNlX3QgKmRldmljZSkKIHsKIAlpbnQgdmVuZG9yX2lkOwogCWludCBkZXZpY2VfaWQ7CkBAIC01MTcsNyArNTE4LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgaW5zZXJ0X3RvX2RldmljZV9saXN0KG1lX2RldmljZV90ICogbl9kZXZpY2UpCitzdGF0aWMgaW50IGluc2VydF90b19kZXZpY2VfbGlzdChtZV9kZXZpY2VfdCAqbl9kZXZpY2UpCiB7CiAJbWVfZGV2aWNlX3QgKm9fZGV2aWNlID0gTlVMTDsKIApAQCAtNzYyLDcgKzc2Myw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZV9sb2NrX2RyaXZlcihzdHJ1Y3QgZmlsZSAqZmlsZXAsIG1lX2xvY2tfZHJpdmVyX3QgKiBhcmcpCitzdGF0aWMgaW50IG1lX2xvY2tfZHJpdmVyKHN0cnVjdCBmaWxlICpmaWxlcCwgbWVfbG9ja19kcml2ZXJfdCAqYXJnKQogewogCWludCBlcnIgPSAwOwogCkBAIC04MDcsNyArODA4LDcgQEAKIH0KIAogc3RhdGljIGludCBtZV9xdWVyeV92ZXJzaW9uX21haW5fZHJpdmVyKHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkJbWVfcXVlcnlfdmVyc2lvbl9tYWluX2RyaXZlcl90ICogYXJnKQorCQkJCQltZV9xdWVyeV92ZXJzaW9uX21haW5fZHJpdmVyX3QgKmFyZykKIHsKIAlpbnQgZXJyOwogCW1lX3F1ZXJ5X3ZlcnNpb25fbWFpbl9kcml2ZXJfdCBrYXJnOwpAQCAtODI4LDcgKzgyOSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgbWVfY29uZmlnX2xvYWRfZGV2aWNlKHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkgbWVfY2ZnX2RldmljZV9lbnRyeV90ICoga2FyZywgaW50IGRldmljZV9ubykKKwkJCQkgbWVfY2ZnX2RldmljZV9lbnRyeV90ICprYXJnLCBpbnQgZGV2aWNlX25vKQogewogCiAJaW50IGVyciA9IE1FX0VSUk5PX1NVQ0NFU1M7CkBAIC04NzQsNyArODc1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lX2NvbmZpZ19sb2FkKHN0cnVjdCBmaWxlICpmaWxlcCwgbWVfY29uZmlnX2xvYWRfdCAqIGFyZykKK3N0YXRpYyBpbnQgbWVfY29uZmlnX2xvYWQoc3RydWN0IGZpbGUgKmZpbGVwLCBtZV9jb25maWdfbG9hZF90ICphcmcpCiB7CiAJaW50IGVycjsKIAlpbnQgaTsKQEAgLTExNzAsNyArMTE3MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWVfaW9fc3RyZWFtX3N0YXJ0KHN0cnVjdCBmaWxlICpmaWxlcCwgbWVfaW9fc3RyZWFtX3N0YXJ0X3QgKiBhcmcpCitzdGF0aWMgaW50IG1lX2lvX3N0cmVhbV9zdGFydChzdHJ1Y3QgZmlsZSAqZmlsZXAsIG1lX2lvX3N0cmVhbV9zdGFydF90ICphcmcpCiB7CiAJaW50IGVycjsKIAlpbnQgaSwgazsKQEAgLTEyOTIsNyArMTI5Myw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtZV9pb19zaW5nbGUoc3RydWN0IGZpbGUgKmZpbGVwLCBtZV9pb19zaW5nbGVfdCAqIGFyZykKK3N0YXRpYyBpbnQgbWVfaW9fc2luZ2xlKHN0cnVjdCBmaWxlICpmaWxlcCwgbWVfaW9fc2luZ2xlX3QgKmFyZykKIHsKIAlpbnQgZXJyOwogCWludCBpLCBrOwpAQCAtMTQ0OCw3ICsxNDQ5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1lX2lvX3N0cmVhbV9jb25maWcoc3RydWN0IGZpbGUgKmZpbGVwLCBtZV9pb19zdHJlYW1fY29uZmlnX3QgKiBhcmcpCitzdGF0aWMgaW50IG1lX2lvX3N0cmVhbV9jb25maWcoc3RydWN0IGZpbGUgKmZpbGVwLCBtZV9pb19zdHJlYW1fY29uZmlnX3QgKmFyZykKIHsKIAlpbnQgZXJyOwogCWludCBrID0gMDsKQEAgLTE1NDAsNyArMTU0MSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgbWVfcXVlcnlfbnVtYmVyX2RldmljZXMoc3RydWN0IGZpbGUgKmZpbGVwLAotCQkJCSAgIG1lX3F1ZXJ5X251bWJlcl9kZXZpY2VzX3QgKiBhcmcpCisJCQkJICAgbWVfcXVlcnlfbnVtYmVyX2RldmljZXNfdCAqYXJnKQogewogCWludCBlcnI7CiAJbWVfcXVlcnlfbnVtYmVyX2RldmljZXNfdCBrYXJnOwpAQCAtMTU2OSw3ICsxNTcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtZV9pb19zdHJlYW1fc3RvcChzdHJ1Y3QgZmlsZSAqZmlsZXAsIG1lX2lvX3N0cmVhbV9zdG9wX3QgKiBhcmcpCitzdGF0aWMgaW50IG1lX2lvX3N0cmVhbV9zdG9wKHN0cnVjdCBmaWxlICpmaWxlcCwgbWVfaW9fc3RyZWFtX3N0b3BfdCAqYXJnKQogewogCWludCBlcnI7CiAJaW50IGksIGs7CkBAIC0yMDE1LDggKzIwMTYsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJDZW50cmFsIG1vZHVsZSBmb3IgTWVpbGhhdXMgRHJpdmVyIFN5c3RlbS4iKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJNZWlsaGF1cyBQQ0kvY1BDSSBib2FyZHMuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNpZmRlZiBCT1NDSAotLy8gRXhwb3J0IHRoZSBmbGFnIGZvciB0aGUgQk9TQ0ggZmlybXdhcmUuCi1FWFBPUlRfU1lNQk9MKG1lX2Jvc2NoX2Z3KTsKLSNlbmRpZiAvLyBCT1NDSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lc2xpc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXNsaXN0LmMKaW5kZXggN2U4YjY2Yy4uY2U0OTExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lc2xpc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVzbGlzdC5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIH0KIAogdm9pZCBtZV9zbGlzdF9hZGRfc3ViZGV2aWNlX3RhaWwoc3RydWN0IG1lX3NsaXN0ICpzbGlzdCwKLQkJCQkgbWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UpCisJCQkJIG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UpCiB7CiAJUERFQlVHX0xPQ0tTKCJjYWxsZWQuXG4iKTsKIApAQCAtMTQ1LDcgKzE0NSw3IEBACiAJcmV0dXJuIHN1YmRldmljZTsKIH0KIAotaW50IG1lX3NsaXN0X2luaXQobWVfc2xpc3RfdCAqIHNsaXN0KQoraW50IG1lX3NsaXN0X2luaXQobWVfc2xpc3RfdCAqc2xpc3QpCiB7CiAJUERFQlVHX0xPQ0tTKCJjYWxsZWQuXG4iKTsKIApAQCAtMTU0LDcgKzE1NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgbWVfc2xpc3RfZGVpbml0KG1lX3NsaXN0X3QgKiBzbGlzdCkKK3ZvaWQgbWVfc2xpc3RfZGVpbml0KG1lX3NsaXN0X3QgKnNsaXN0KQogewogCiAJc3RydWN0IGxpc3RfaGVhZCAqczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXNsb2NrLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWVzbG9jay5jCmluZGV4IDUyMzBiODkuLmFiY2RiNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXNsb2NrLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lc2xvY2suYwpAQCAtMTI0LDcgKzEyNCw3IEBACiAJUERFQlVHX0xPQ0tTKCJleGVjdXRlZC5cbiIpOwogfQogCi1pbnQgbWVfc2xvY2tfaW5pdChtZV9zbG9ja190ICogc2xvY2spCitpbnQgbWVfc2xvY2tfaW5pdChtZV9zbG9ja190ICpzbG9jaykKIHsKIAlQREVCVUdfTE9DS1MoImV4ZWN1dGVkLlxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWlsaGF1cy9tZXN1YmRldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lc3ViZGV2aWNlLmMKaW5kZXggOThkNGYxZi4uYjJlOTU2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lc3ViZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21lc3ViZGV2aWNlLmMKQEAgLTEwMSw5ICsxMDEsOSBAQAogCiBzdGF0aWMgaW50IG1lX3N1YmRldmljZV9pb19zdHJlYW1fY29uZmlnKHN0cnVjdCBtZV9zdWJkZXZpY2UgKnN1YmRldmljZSwKIAkJCQkJIHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCQkJIG1lSU9TdHJlYW1Db25maWdfdCAqIGNvbmZpZ19saXN0LAorCQkJCQkgbWVJT1N0cmVhbUNvbmZpZ190ICpjb25maWdfbGlzdCwKIAkJCQkJIGludCBjb3VudCwKLQkJCQkJIG1lSU9TdHJlYW1UcmlnZ2VyX3QgKiB0cmlnZ2VyLAorCQkJCQkgbWVJT1N0cmVhbVRyaWdnZXJfdCAqdHJpZ2dlciwKIAkJCQkJIGludCBmaWZvX2lycV90aHJlc2hvbGQsIGludCBmbGFncykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CkBAIC0xNjIsNyArMTYyLDcgQEAKIAlyZXR1cm4gTUVfRVJSTk9fTk9UX1NVUFBPUlRFRDsKIH0KIAotc3RhdGljIGludCBtZV9zdWJkZXZpY2VfbG9ja19zdWJkZXZpY2UobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UsCitzdGF0aWMgaW50IG1lX3N1YmRldmljZV9sb2NrX3N1YmRldmljZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXAsIGludCBsb2NrLCBpbnQgZmxhZ3MpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtMjM1LDcgKzIzNSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgbWVfc3ViZGV2aWNlX2NvbmZpZ19sb2FkKHN0cnVjdCBtZV9zdWJkZXZpY2UgKnN1YmRldmljZSwKLQkJCQkgICAgbWVfY2ZnX2RldmljZV9lbnRyeV90ICogY29uZmlnKQorCQkJCSAgICBtZV9jZmdfZGV2aWNlX2VudHJ5X3QgKmNvbmZpZykKIHsKIAlQREVCVUcoImV4ZWN1dGVkLlxuIik7CiAJcmV0dXJuIE1FX0VSUk5PX1NVQ0NFU1M7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIAlrZnJlZShzdWJkZXZpY2UpOwogfQogCi1pbnQgbWVfc3ViZGV2aWNlX2luaXQobWVfc3ViZGV2aWNlX3QgKiBzdWJkZXZpY2UpCitpbnQgbWVfc3ViZGV2aWNlX2luaXQobWVfc3ViZGV2aWNlX3QgKnN1YmRldmljZSkKIHsKIAlpbnQgZXJyOwogCkBAIC0zMDgsNyArMzA4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBtZV9zdWJkZXZpY2VfZGVpbml0KG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlKQordm9pZCBtZV9zdWJkZXZpY2VfZGVpbml0KG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwogCW1lX3N1YmRldmljZV9pb19yZXNldF9zdWJkZXZpY2Uoc3ViZGV2aWNlLCBOVUxMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21ldGVtcGxfZGV2aWNlLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWV0ZW1wbF9kZXZpY2UuYwppbmRleCBlNDg2MzJkLi5iZGFmNmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWV0ZW1wbF9kZXZpY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWV0ZW1wbF9kZXZpY2UuYwpAQCAtMTA5LDYgKzEwOSw3IEBACiAKIAlyZXR1cm4gKG1lX2RldmljZV90ICopIG1ldGVtcGxfZGV2aWNlOwogfQorRVhQT1JUX1NZTUJPTChtZXRlbXBsX3BjaV9jb25zdHJ1Y3Rvcik7CiAKIC8vIEluaXQgYW5kIGV4aXQgb2YgbW9kdWxlLgogCkBAIC0xMzIsNiArMTMzLDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRGV2aWNlIERyaXZlciBNb2R1bGUgZm9yIFRlbXBsYXRlIERldmljZSIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIk1laWxoYXVzIFRlbXBsYXRlIERldmljZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLy8gRXhwb3J0IHRoZSBjb25zdHJ1Y3Rvci4KLUVYUE9SVF9TWU1CT0wobWV0ZW1wbF9wY2lfY29uc3RydWN0b3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21laWxoYXVzL21ldGVtcGxfc3ViLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWV0ZW1wbF9zdWIuYwppbmRleCBmMWQ2NWQ4Li5iNWE2YTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWV0ZW1wbF9zdWIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVpbGhhdXMvbWV0ZW1wbF9zdWIuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSAibWVkZWZpbmVzLmgiCkBAIC02OCw3ICs2OCw3IEBACiAJa2ZyZWUoaW5zdGFuY2UpOwogfQogCi1zdGF0aWMgaW50IG1ldGVtcGxfc3ViX3F1ZXJ5X251bWJlcl9jaGFubmVscyhtZV9zdWJkZXZpY2VfdCAqIHN1YmRldmljZSwKK3N0YXRpYyBpbnQgbWV0ZW1wbF9zdWJfcXVlcnlfbnVtYmVyX2NoYW5uZWxzKG1lX3N1YmRldmljZV90ICpzdWJkZXZpY2UsCiAJCQkJCSAgICAgaW50ICpudW1iZXIpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtNzYsNyArNzYsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1ldGVtcGxfc3ViX3F1ZXJ5X3N1YmRldmljZV90eXBlKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZXRlbXBsX3N1Yl9xdWVyeV9zdWJkZXZpY2VfdHlwZShtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50ICp0eXBlLCBpbnQgKnN1YnR5cGUpCiB7CiAJUERFQlVHKCJleGVjdXRlZC5cbiIpOwpAQCAtODUsNyArODUsNyBAQAogCXJldHVybiBNRV9FUlJOT19TVUNDRVNTOwogfQogCi1zdGF0aWMgaW50IG1ldGVtcGxfc3ViX3F1ZXJ5X3N1YmRldmljZV9jYXBzKG1lX3N1YmRldmljZV90ICogc3ViZGV2aWNlLAorc3RhdGljIGludCBtZXRlbXBsX3N1Yl9xdWVyeV9zdWJkZXZpY2VfY2FwcyhtZV9zdWJkZXZpY2VfdCAqc3ViZGV2aWNlLAogCQkJCQkgICAgaW50ICpjYXBzKQogewogCVBERUJVRygiZXhlY3V0ZWQuXG4iKTsKQEAgLTk1LDcgKzk1LDcgQEAKIAogbWV0ZW1wbF9zdWJfc3ViZGV2aWNlX3QgKm1ldGVtcGxfc3ViX2NvbnN0cnVjdG9yKHVpbnQzMl90IHJlZ19iYXNlLAogCQkJCQkJIHVuc2lnbmVkIGludCBzdWJfaWR4LAotCQkJCQkJIHNwaW5sb2NrX3QgKiBjdHJsX3JlZ19sb2NrKQorCQkJCQkJIHNwaW5sb2NrX3QgKmN0cmxfcmVnX2xvY2spCiB7CiAJbWV0ZW1wbF9zdWJfc3ViZGV2aWNlX3QgKnN1YmRldmljZTsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21pbWlvL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvbWltaW8vS2NvbmZpZwppbmRleCBjMGJhNGM4Li41MDVkY2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWltaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWltaW8vS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBJTlBVVF9NSU1JTwogCXRyaXN0YXRlICJNaW1pbyBYaSBpbnRlcmFjdGl2ZSB3aGl0ZWJvYXJkIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IKKwlkZXBlbmRzIG9uIFVTQiAmJiBJTlBVVAogCWRlZmF1bHQgTgogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgTWltaW8gWGkgaW50ZXJhY3RpdmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9hbXNkdS5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2Ftc2R1LmMKaW5kZXggYzkxMjNkNS4uMDMyMTI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2Ftc2R1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2Ftc2R1LmMKQEAgLTM0LDUzICszNCw1MyBAQAogLyogICAgICBTdGVwaGVuIENoZW4gICAgICAgIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIElOQy4gICAgMjAwNy4yICAgICAgKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotemJ1Zl90KiB6ZkdldEFtc2R1U3ViRnJhbWUoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCogb2Zmc2V0KQoremJ1Zl90ICp6ZkdldEFtc2R1U3ViRnJhbWUoemRldl90ICpkZXYsIHpidWZfdCAqYnVmLCB1MTZfdCAqb2Zmc2V0KQogewotICAgIHUxNl90IHN1YmZyYW1lTGVuOwotICAgIHUxNl90IGFtc2R1TGVuID0gemZ3QnVmR2V0U2l6ZShkZXYsIGJ1Zik7Ci0gICAgemJ1Zl90KiBuZXdCdWY7CisJdTE2X3Qgc3ViZnJhbWVMZW47CisJdTE2X3QgYW1zZHVMZW4gPSB6ZndCdWZHZXRTaXplKGRldiwgYnVmKTsKKwl6YnVmX3QgKm5ld0J1ZjsKIAotICAgIFpNX1BFUkZPUk1BTkNFX1JYX0FNU0RVKGRldiwgYnVmLCBhbXNkdUxlbik7CisJWk1fUEVSRk9STUFOQ0VfUlhfQU1TRFUoZGV2LCBidWYsIGFtc2R1TGVuKTsKIAotICAgIC8qIFZlcmlmeSBBLU1TRFUgbGVuZ3RoICovCi0gICAgaWYgKGFtc2R1TGVuIDwgKCpvZmZzZXQgKyAxNCkpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisJLyogVmVyaWZ5IEEtTVNEVSBsZW5ndGggKi8KKwlpZiAoYW1zZHVMZW4gPCAoKm9mZnNldCArIDE0KSkKKwkJcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBMb2NhdGUgQS1NU0RVIHN1YmZyYW1lIGJ5IG9mZnNldCBhbmQgdmVyaWZ5IHN1YmZyYW1lIGxlbmd0aCAqLwotICAgIHN1YmZyYW1lTGVuID0gKHptd19idWZfcmVhZGIoZGV2LCBidWYsICpvZmZzZXQgKyAxMikgPDwgOCkgKwotICAgICAgICAgICAgICAgICAgem13X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgKm9mZnNldCArIDEzKTsKLSAgICBpZiAoc3ViZnJhbWVMZW4gPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKwkvKiBMb2NhdGUgQS1NU0RVIHN1YmZyYW1lIGJ5IG9mZnNldCBhbmQgdmVyaWZ5IHN1YmZyYW1lIGxlbmd0aCAqLworCXN1YmZyYW1lTGVuID0gKHptd19idWZfcmVhZGIoZGV2LCBidWYsICpvZmZzZXQgKyAxMikgPDwgOCkgKworCQl6bXdfYnVmX3JlYWRiKGRldiwgYnVmLCAqb2Zmc2V0ICsgMTMpOwogCi0gICAgLyogVmVyaWZ5IEEtTVNEVSBzdWJmcmFtZSBsZW5ndGggKi8KLSAgICBpZiAoKCpvZmZzZXQrMTQrc3ViZnJhbWVMZW4pIDw9IGFtc2R1TGVuKQotICAgIHsKLSAgICAgICAgLyogQWxsb2NhdGUgYSBuZXcgYnVmZmVyICovCi0gICAgICAgIGlmICgobmV3QnVmID0gemZ3QnVmQWxsb2NhdGUoZGV2LCAyNCsyK3N1YmZyYW1lTGVuKSkgIT0gTlVMTCkKLSAgICAgICAgewotI2lmZGVmIFpNX0VOQUJMRV9OQVRJVkVfV0lGSQotICAgICAgICAgICAgLyogQ29weSBhbmQgY29udmVydCBzdWJmcmFtZSB0byB3bGFuIGZyYW1lIGZvcm1hdCAqLwotICAgICAgICAgICAgLyogU0hBTEwgTk9UIElOQ0xVREUgUU9TIGFuZCBBTVNEVSBoZWFkZXIuIFJheSAyMDA3MDgwNyBGb3IgVmlzdGEgKi8KLSAgICAgICAgICAgIHpmUnhCdWZmZXJDb3B5KGRldiwgbmV3QnVmLCBidWYsIDAsIDAsIDI0KTsKLSAgICAgICAgICAgIHpmUnhCdWZmZXJDb3B5KGRldiwgbmV3QnVmLCBidWYsIDI0LCAqb2Zmc2V0KzE0LCBzdWJmcmFtZUxlbik7Ci0gICAgICAgICAgICB6ZndCdWZTZXRTaXplKGRldiwgbmV3QnVmLCAyNCtzdWJmcmFtZUxlbik7Ci0jZWxzZQotICAgICAgICAgICAgLyogQ29weSBzdWJmcmFtZSB0byBuZXcgYnVmZmVyICovCi0gICAgICAgICAgICB6ZlJ4QnVmZmVyQ29weShkZXYsIG5ld0J1ZiwgYnVmLCAwLCAqb2Zmc2V0LCAxNCtzdWJmcmFtZUxlbik7Ci0gICAgICAgICAgICB6ZndCdWZTZXRTaXplKGRldiwgbmV3QnVmLCAxNCtzdWJmcmFtZUxlbik7Ci0jZW5kaWYKLSAgICAgICAgICAgIC8qIFVwZGF0ZSBvZmZzZXQgKi8KLSAgICAgICAgICAgICpvZmZzZXQgKz0gKCgoMTQrc3ViZnJhbWVMZW4pKzMpICYgMHhmZmZjKTsKKwlpZiAoc3ViZnJhbWVMZW4gPT0gMCkKKwkJcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIC8qIFJldHVybiBidWZmZXIgcG9pbnRlciAqLwotICAgICAgICAgICAgcmV0dXJuIG5ld0J1ZjsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKKwkvKiBWZXJpZnkgQS1NU0RVIHN1YmZyYW1lIGxlbmd0aCAqLworCWlmICgoKm9mZnNldCsxNCtzdWJmcmFtZUxlbikgPD0gYW1zZHVMZW4pIHsKKwkJLyogQWxsb2NhdGUgYSBuZXcgYnVmZmVyICovCisJCW5ld0J1ZiA9IHpmd0J1ZkFsbG9jYXRlKGRldiwgMjQrMitzdWJmcmFtZUxlbik7CisJCWlmIChuZXdCdWYgIT0gTlVMTCkgeworCQkJI2lmZGVmIFpNX0VOQUJMRV9OQVRJVkVfV0lGSQorCQkJLyogQ29weSBhbmQgY29udmVydCBzdWJmcmFtZSB0byB3bGFuIGZyYW1lIGZvcm1hdAorCQkJKiBTSEFMTCBOT1QgSU5DTFVERSBRT1MgYW5kIEFNU0RVIGhlYWRlci4KKwkJCSogUmF5IDIwMDcwODA3IEZvciBWaXN0YQorCQkJKi8KKwkJCXpmUnhCdWZmZXJDb3B5KGRldiwgbmV3QnVmLCBidWYsIDAsIDAsIDI0KTsKKwkJCXpmUnhCdWZmZXJDb3B5KGRldiwgbmV3QnVmLCBidWYsIDI0LCAqb2Zmc2V0KzE0LAorCQkJCQlzdWJmcmFtZUxlbik7CisJCQl6ZndCdWZTZXRTaXplKGRldiwgbmV3QnVmLCAyNCtzdWJmcmFtZUxlbik7CisJCQkjZWxzZQorCQkJLyogQ29weSBzdWJmcmFtZSB0byBuZXcgYnVmZmVyICovCisJCQl6ZlJ4QnVmZmVyQ29weShkZXYsIG5ld0J1ZiwgYnVmLCAwLCAqb2Zmc2V0LAorCQkJCQkxNCtzdWJmcmFtZUxlbik7CisJCQl6ZndCdWZTZXRTaXplKGRldiwgbmV3QnVmLCAxNCtzdWJmcmFtZUxlbik7CisJCQkjZW5kaWYKKwkJCS8qIFVwZGF0ZSBvZmZzZXQgKi8KKwkJCSpvZmZzZXQgKz0gKCgoMTQrc3ViZnJhbWVMZW4pKzMpICYgMHhmZmZjKTsKKworCQkJLyogUmV0dXJuIGJ1ZmZlciBwb2ludGVyICovCisJCQlyZXR1cm4gbmV3QnVmOworCQl9CisJfQorCXJldHVybiBOVUxMOwogfQogCiAKQEAgLTEwMSwzNCArMTAxLDI5IEBACiAvKiAgICAgIFN0ZXBoZW4gQ2hlbiAgICAgICAgQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSU5DLiAgICAyMDA3LjIgICAgICAqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIHpmRGVBbXNkdSh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYsIHUxNl90IHZhcCwgdThfdCBlbmNyeU1vZGUpCit2b2lkIHpmRGVBbXNkdSh6ZGV2X3QgKmRldiwgemJ1Zl90ICpidWYsIHUxNl90IHZhcCwgdThfdCBlbmNyeU1vZGUpCiB7Ci0gICAgdTE2X3Qgb2Zmc2V0ID0gWk1fU0laRV9PRl9XTEFOX0RBVEFfSEVBREVSK1pNX1NJWkVfT0ZfUU9TX0NUUkw7Ci0gICAgemJ1Zl90KiBzdWJmcmFtZUJ1ZjsKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisJdTE2X3Qgb2Zmc2V0ID0gWk1fU0laRV9PRl9XTEFOX0RBVEFfSEVBREVSK1pNX1NJWkVfT0ZfUU9TX0NUUkw7CisJemJ1Zl90ICpzdWJmcmFtZUJ1ZjsKKwl6bXdfZ2V0X3dsYW5fZGV2KGRldik7CiAKLSAgICBaTV9CVUZGRVJfVFJBQ0UoZGV2LCBidWYpCisJWk1fQlVGRkVSX1RSQUNFKGRldiwgYnVmKQogCi0gICAgaWYgKGVuY3J5TW9kZSA9PSBaTV9BRVMgfHwgZW5jcnlNb2RlID09IFpNX1RLSVApCi0gICAgewotICAgICAgICBvZmZzZXQgKz0gKFpNX1NJWkVfT0ZfSVYgKyBaTV9TSVpFX09GX0VYVF9JVik7Ci0gICAgfQotICAgIGVsc2UgaWYgKGVuY3J5TW9kZSA9PSBaTV9XRVA2NCB8fCBlbmNyeU1vZGUgPT0gWk1fV0VQMTI4KQotICAgIHsKLSAgICAgICAgb2Zmc2V0ICs9IFpNX1NJWkVfT0ZfSVY7Ci0gICAgfQorCWlmIChlbmNyeU1vZGUgPT0gWk1fQUVTIHx8IGVuY3J5TW9kZSA9PSBaTV9US0lQKQorCQlvZmZzZXQgKz0gKFpNX1NJWkVfT0ZfSVYgKyBaTV9TSVpFX09GX0VYVF9JVik7CisJZWxzZSBpZiAoZW5jcnlNb2RlID09IFpNX1dFUDY0IHx8IGVuY3J5TW9kZSA9PSBaTV9XRVAxMjgpCisJCW9mZnNldCArPSBaTV9TSVpFX09GX0lWOwogCi0gICAgLyogUmVwZWF0bHkgY2FsbGluZyB6ZkdldEFtc2R1U3ViRnJhbWUoKSB1bnRpbCBOVUxMIHJldHVybmVkICovCi0gICAgd2hpbGUgKChzdWJmcmFtZUJ1ZiA9IHpmR2V0QW1zZHVTdWJGcmFtZShkZXYsIGJ1ZiwgJm9mZnNldCkpICE9IE5VTEwpCi0gICAgewotICAgICAgICB3ZC0+Y29tbVRhbGx5Lk5vdGlmeU5ESVNSeEZybUNudCsrOwotICAgICAgICBpZiAod2QtPnpmY2JSZWN2RXRoICE9IE5VTEwpCi0gICAgCXsKLSAgICAgICAgICAgIHdkLT56ZmNiUmVjdkV0aChkZXYsIHN1YmZyYW1lQnVmLCAodThfdCl2YXApOwotICAgICAgICAgICAgWk1fUEVSRk9STUFOQ0VfUlhfTVNEVShkZXYsIHdkLT50aWNrKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKIAotICAgIHJldHVybjsKKwkvKiBSZXBlYXRseSBjYWxsaW5nIHpmR2V0QW1zZHVTdWJGcmFtZSgpIHVudGlsIE5VTEwgcmV0dXJuZWQgKi8KKwl3aGlsZSAoKHN1YmZyYW1lQnVmID0gemZHZXRBbXNkdVN1YkZyYW1lKGRldiwgYnVmLCAmb2Zmc2V0KSkgIT0gTlVMTCkgeworCQl3ZC0+Y29tbVRhbGx5Lk5vdGlmeU5ESVNSeEZybUNudCsrOworCQlpZiAod2QtPnpmY2JSZWN2RXRoICE9IE5VTEwpIHsKKwkJCXdkLT56ZmNiUmVjdkV0aChkZXYsIHN1YmZyYW1lQnVmLCAodThfdCl2YXApOworCQkJWk1fUEVSRk9STUFOQ0VfUlhfTVNEVShkZXYsIHdkLT50aWNrKTsKKwkJfQorCX0KKwl6ZndCdWZGcmVlKGRldiwgYnVmLCAwKTsKKworCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW1zdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW1zdGEuYwppbmRleCBjNzViYTExLi5iMjhhNGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY21tc3RhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbXN0YS5jCkBAIC03MjQsNiArNzI0LDkgQEAKIC8qIHByb2Nlc3MgODAyLjExaCBEeW5hbWljIEZyZXF1ZW5jeSBTZWxlY3Rpb24gKi8KIHZvaWQgemZTdGFVcGRhdGVEb3QxMUhERlMoemRldl90KiBkZXYsIHpidWZfdCogYnVmKQogeworICAgIC8vdThfdCAgICBsZW5ndGgsIGNoYW5uZWwsIGlzNUc7CisgICAgdTE2X3QgICBvZmZzZXQ7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CiAKICAgICAvKgpAQCAtNzM2LDggKzczOSw2IEBACiAgICAgfFZhbHVlIHwgICAzNyAgICAgfCAgMyAgIHwgICAgICAgMCBvciAxICAgICAgfHVuc2lnbmVkIGludGVnZXIgIHx1bnNpZ25lZCBpbnRlZ2VyICAgIHwKICAgICArLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgICovCi0gICAgLy91OF90ICAgIGxlbmd0aCwgY2hhbm5lbCwgaXM1RzsKLSAgICB1MTZfdCAgIG9mZnNldDsKIAogICAgIC8qIGdldCBFSUQoQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50KSAqLwogICAgIGlmICggKG9mZnNldCA9IHpmRmluZEVsZW1lbnQoZGV2LCBidWYsIFpNX1dMQU5fRUlEX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFKSkgPT0gMHhmZmZmICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jb2lkLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY29pZC5jCmluZGV4IDYwMDdmMzEuLjg4ZjhkMzQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY29pZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jb2lkLmMKQEAgLTIxNCwxMCArMjE0LDEwIEBACiAKIHUzMl90IHpmaVdsYW5RdWVyeVRyYW5zbWl0UG93ZXIoemRldl90KiBkZXYpCiB7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCiAgICAgdTMyX3QgcmV0ID0gMDsKIAorICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKwogICAgIGlmICh6ZlN0YUlzQ29ubmVjdGVkKGRldikpIHsKICAgICAgICAgcmV0ID0gd2QtPnN0YS5jb25uUG93ZXJJbkhhbGZEYm07CiAgICAgfSBlbHNlIHsKQEAgLTE0MzIsMTIgKzE0MzIsMTIgQEAKIAogdTMyX3QgemZpV2xhblF1ZXJ5RnJlcXVlbmN5QXR0cmlidXRlKHpkZXZfdCogZGV2LCB1MzJfdCBmcmVxKQogewotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQogICAgIHU4X3QgIGk7CiAgICAgdTE2X3QgZnJlcXVlbmN5ID0gKHUxNl90KSAoZnJlcS8xMDAwKTsKICAgICB1MzJfdCByZXQgPSAwOwogCisgICAgem13X2dldF93bGFuX2RldihkZXYpOworCiAgICAgZm9yIChpID0gMDsgaSA8IHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsQ250OyBpKyspCiAgICAgewogICAgICAgICBpZiAoIHdkLT5yZWd1bGF0aW9uVGFibGUuYWxsb3dDaGFubmVsW2ldLmNoYW5uZWwgPT0gZnJlcXVlbmN5ICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jd20uYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jd20uYwppbmRleCA4MGYxMTQxLi4xYmQwYjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3dtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N3bS5jCkBAIC03NSw5ICs3NSw5IEBACiAKICAgICBpZigod2QtPndsYW5Nb2RlID09IFpNX01PREVfSU5GUkFTVFJVQ1RVUkUgfHwgd2QtPndsYW5Nb2RlID09IFpNX01PREVfUFNFVURPIHx8CiAgICAgICAgIHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0lCU1MpKSB7Ci0gICAgICAgIGlmICh3ZC0+c3RhLmllLkh0Q2FwLkh0Q2FwSW5mbyAmJiBIVENBUF9TdXBDaGFubmVsV2lkdGhTZXQgIT0gMCAmJgotICAgICAgICAgICAgd2QtPnN0YS5pZS5IdEluZm8uQ2hhbm5lbEluZm8gJiYgRXh0SHRDYXBfUmVjb21UeFdpZHRoU2V0ICE9IDAgJiYKLSAgICAgICAgICAgICh3ZC0+c3RhLmllLkh0SW5mby5DaGFubmVsSW5mbyAmJiBFeHRIdENhcF9FeHRDaGFubmVsT2Zmc2V0QWJvdmUpID09IDEpIHsKKyAgICAgICAgaWYgKCh3ZC0+c3RhLmllLkh0Q2FwLkh0Q2FwSW5mbyAmIEhUQ0FQX1N1cENoYW5uZWxXaWR0aFNldCkgJiYKKyAgICAgICAgICAgICh3ZC0+c3RhLmllLkh0SW5mby5DaGFubmVsSW5mbyAmIEV4dEh0Q2FwX1JlY29tVHhXaWR0aFNldCkgJiYKKyAgICAgICAgICAgICh3ZC0+c3RhLmllLkh0SW5mby5DaGFubmVsSW5mbyAmIEV4dEh0Q2FwX0V4dENoYW5uZWxPZmZzZXRBYm92ZSkpIHsKIAogICAgICAgICAgICAgd2QtPmN3bS5jd193aWR0aCA9IENXTV9XSURUSDQwOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL290dXMvVE9ETwppbmRleCBlOTEyMjkzLi40Y2FmMDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL1RPRE8KQEAgLTEsOCArMSwxNSBAQAorSSdtIGhlc2l0YW50IHRvIGFkZCBhIFRPRE8gZmlsZSBoZXJlLCBhcyB0aGUgd2lyZWxlc3MgZGV2ZWxvcGVycyB3b3VsZAorcmVhbGx5IGhhdmUgcGVvcGxlIGhlbHAgdGhlbSBvdXQgb24gdGhlICJjbGVhbiIgYXI5MTcwIGRyaXZlciB0aGF0IGNhbgorYmUgZm91bmQgYXQgdGhlIGxpbnV4LXdpcmVsZXNzIGRldmVsb3BlciBzaXRlLgorCitCdXQsIGlmIHlvdSB3aXNoIHRvIGNsZWFuIHVwIHRoaXMgZHJpdmVyIGluc3RlYWQsIGhlcmUncyBhIHNob3J0IGxpc3Qgb2YKK3RoaW5ncyB0aGF0IG5lZWQgdG8gYmUgZG9uZSB0byBnZXQgaXQgaW50byBhIG1vcmUgbWVyZ2FibGUgc2hhcGU6CisKIFRPRE86CiAJLSBjaGVja3BhdGNoLnBsIGNsZWFudXBzCiAJLSBzcGFyc2UgY2xlYW51cHMKIAktIHBvcnQgdG8gaW4ta2VybmVsIDgwMjExIHN0YWNrCi0JLSBwcm9wZXIgbmV0d29yayBkZXZlbG9wZXIgbWFpbnRhaW5lcgorCS0gcmV2aWV3IGJ5IHRoZSB3aXJlbGVzcyBkZXZlbG9wZXIgY29tbXVuaXR5CiAKIFBsZWFzZSBzZW5kIGFueSBwYXRjaGVzIHRvIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+IGFuZAogTHVpcyBSb2RyaWd1ZXogPEx1aXMuUm9kcmlndWV6QEF0aGVyb3MuY29tPiBhbmQgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBhbmkuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocGFuaS5jCmluZGV4IGJhOTViNWQwMS4uMGFmZWNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwYW5pLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwYW5pLmMKQEAgLTU1LDEwICs1NSwxMCBAQAogczMyX3QgQkVBQ09OX1JTU0koemRldl90KiBkZXYpCiB7CiAgICAgczMyX3QgcnNzaTsKKyAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQotICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKKyAgICBIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOwogCiAgICAgcnNzaSA9IFpNX0hBTF9FUF9STkQoSHBQcml2LT5zdGF0cy5hc3Rfbm9kZXN0YXRzLm5zX2F2Z2Jyc3NpLCBaTV9IQUxfUlNTSV9FUF9NVUxUSVBMSUVSKTsKIApAQCAtNzQsMTYgKzc0LDE2IEBACiB7CiAjZGVmaW5lIE4oYSkgICAgIChzaXplb2YoYSkgLyBzaXplb2YoYVswXSkpCiAgICAgdTMyX3QgaTsKLQotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQotICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKKyAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdjsKIAogICAgIGNvbnN0IGludCB0b3RhbFNpemVEZXNpcmVkW10gPSB7IC01NSwgLTU1LCAtNTUsIC01NSwgLTYyIH07CiAgICAgY29uc3QgaW50IGNvYXJzZUhpZ2hbXSAgICAgICA9IHsgLTE0LCAtMTQsIC0xNCwgLTE0LCAtMTIgfTsKICAgICBjb25zdCBpbnQgY29hcnNlTG93W10gICAgICAgID0geyAtNjQsIC02NCwgLTY0LCAtNjQsIC03MCB9OwogICAgIGNvbnN0IGludCBmaXJwd3JbXSAgICAgICAgICAgPSB7IC03OCwgLTc4LCAtNzgsIC03OCwgLTgwIH07CiAKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKKwogICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspCiAgICAgewogICAgICAgICBIcFByaXYtPnRvdGFsU2l6ZURlc2lyZWRbaV0gPSB0b3RhbFNpemVEZXNpcmVkW2ldOwpAQCAtMTM5LDEyICsxMzksMTIgQEAKIHsKICNkZWZpbmUgTihhKSAoc2l6ZW9mKGEpL3NpemVvZihhWzBdKSkKICAgICB0eXBlZGVmIHMzMl90IFRBQkxFW107CisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXY7CisgICAgc3RydWN0IHpzQW5pU3RhdGUgKmFuaVN0YXRlOwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotCi0gICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOwotCi0gICAgc3RydWN0IHpzQW5pU3RhdGUgKmFuaVN0YXRlID0gSHBQcml2LT5jdXJhbmk7CisgICAgSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKKyAgICBhbmlTdGF0ZSA9IEhwUHJpdi0+Y3VyYW5pOwogCiAgICAgc3dpdGNoIChjbWQpCiAgICAgewpAQCAtMzQ2LDExICszNDYsMTAgQEAKIHZvaWQgemZIcEFuaVJlc3RhcnQoemRldl90KiBkZXYpCiB7CiAgICAgc3RydWN0IHpzQW5pU3RhdGUgKmFuaVN0YXRlOworICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotCi0gICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOwotCisgICAgSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKICAgICBhbmlTdGF0ZSA9IEhwUHJpdi0+Y3VyYW5pOwogCiAgICAgYW5pU3RhdGUtPmxpc3RlblRpbWUgPSAwOwpAQCAtMzg3LDEwICszODYsMTAgQEAKIHsKICAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAqYW5pU3RhdGU7CiAgICAgczMyX3QgcnNzaTsKKyAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQotICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKKyAgICBIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOwogCiAgICAgLy9IQUxBU1NFUlQoY2hhbiAhPSBOVUxMKTsKIApAQCAtNDY2LDEwICs0NjUsMTAgQEAKIHsKICAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAqYW5pU3RhdGU7CiAgICAgczMyX3QgcnNzaTsKKyAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQotICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKKyAgICBIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOwogCiAgICAgLy9IQUxBU1NFUlQoY2hhbiAhPSBOVUxMKTsKIApAQCAtNTExLDExICs1MTAsMTAgQEAKIHsKICAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAqYW5pU3RhdGU7CiAgICAgczMyX3QgcnNzaTsKKyAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQotICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKLQorICAgIEhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CiAgICAgYW5pU3RhdGUgPSBIcFByaXYtPmN1cmFuaTsKIAogICAgIHJzc2kgPSBCRUFDT05fUlNTSShkZXYpOwpAQCAtNTg2LDEwICs1ODQsMTAgQEAKICAgICBzdHJ1Y3QgenNBbmlTdGF0ZSAqYW5pU3RhdGU7CiAgICAgdTMyX3QgdHhGcmFtZUNvdW50LCByeEZyYW1lQ291bnQsIGN5Y2xlQ291bnQ7CiAgICAgczMyX3QgbGlzdGVuVGltZTsKKyAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQotICAgIHN0cnVjdCB6c0hwUHJpdiAqSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKKyAgICBIcFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kil3ZC0+aHBQcml2YXRlOwogCiAgICAgdHhGcmFtZUNvdW50ID0gMDsvL09TX1JFR19SRUFEKGFoLCBBUl9URkNOVCk7CiAgICAgcnhGcmFtZUNvdW50ID0gMDsvL09TX1JFR19SRUFEKGFoLCBBUl9SRkNOVCk7CkBAIC02MjcsMTAgKzYyNSwxMCBAQAogewogICAgIHN0cnVjdCB6c0FuaVN0YXRlICphbmlTdGF0ZTsKICAgICAvL3MzMl90IGxpc3RlblRpbWU7CisgICAgc3RydWN0IHpzSHBQcml2ICpIcFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KLSAgICBzdHJ1Y3QgenNIcFByaXYgKkhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGU7CisgICAgSHBQcml2ID0gKHN0cnVjdCB6c0hwUHJpdiopd2QtPmhwUHJpdmF0ZTsKIAogICAgIC8qCiAgICAgICogU2luY2Ugd2UncmUgY2FsbGVkIGZyb20gZW5kIG9mIHJ4IHRhc2tsZXQsIHdlIGFsc28gY2hlY2sgZm9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBtYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBtYWluLmMKaW5kZXggMmU2NWM0Ni4uMzIyNTg1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocG1haW4uYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAgICAgZWxzZQogICAgIHsKICAgICAjaWZuZGVmIFpNX09UVVNfTElOVVhfUEhBU0VfMgotICAgICAgICAvKiBkb253bG9hZCB0aGUgbm9ybWFsIGZyaW13YXJlICovCisgICAgICAgIC8qIGRvd25sb2FkIHRoZSBub3JtYWwgZmlybXdhcmUgKi8KICAgICAgICAgaWYgKChyZXQgPSB6ZkZpcm13YXJlRG93bmxvYWQoZGV2LCAodTMyX3QqKXpjRndJbWFnZSwKICAgICAgICAgICAgICAgICAodTMyX3QpemNGd0ltYWdlU2l6ZSwgWk1fRklSTVdBUkVfV0xBTl9BRERSKSkgIT0gWk1fU1VDQ0VTUykKICAgICAgICAgewpAQCAtMzI4LDggKzMyOCw4IEBACiAgICAgdTE2X3QgbW9kZXNJbmRleCA9IDA7CiAgICAgdTE2X3QgZnJlcUluZGV4ID0gMDsKICAgICB1MzJfdCB0bXAsIHRtcDE7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB1MzJfdCBlZXByb21Cb2FyZERhdGFbMTVdWzZdID0gewogICAgIC8qIFJlZ2lzdGVyICAgQS0yMCAgICAgICAgQS0yMC80MCAgICAgRy0yMC80MCAgICAgRy0yMCAgICAgICAgRy1UdXJibyAgICAqLwogICAgICAgICB7MHg5OTY0LCAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDB9LApAQCAtMzQ5LDYgKzM0OSw5IEBACiAgICAgICAgIHsweGEyNTgsICAgIDAsICAgICAgMCwgICAgICAwLCAgICAgIDAsICAgICAgMH0sCiAgICAgfTsKIAorICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKwogICAgIC8qICMxIFNhdmUgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHJlbGF0ZWQgUklGUyByZWdpc3RlciBzZXR0aW5ncyAqLwogICAgIC8vKChzdHJ1Y3QgenNIcFByaXYqKXdkLT5ocFByaXZhdGUpLT5pc0luaXRpYWxQaHkrKzsKIApAQCAtMTMyNCw5ICsxMzI3LDEwIEBACiAgICAgaW50IGRlbHRhX3Nsb3BlX2NvZWZmX21hbjsKICAgICBpbnQgZGVsdGFfc2xvcGVfY29lZmZfZXhwX3NoZ2k7CiAgICAgaW50IGRlbHRhX3Nsb3BlX2NvZWZmX21hbl9zaGdpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXYgPSB3ZC0+aHBQcml2YXRlOwogCiAgICAgem1fbXNnMV9zY2FuKFpNX0xWXzEsICJGcmVxdWVuY3kgPSAiLCBmcmVxdWVuY3kpOwogICAgIHptX21zZzFfc2NhbihaTV9MVl8xLCAiYnc0MCA9ICIsIGJ3NDApOwpAQCAtMTU2MCw5ICsxNTY0LDEwIEBACiB7CiAgICAgdThfdCBpOwogICAgIHUzMl90IGtleVs0XSA9IHswLCAwLCAwLCAwfTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgZm9yKGk9MDtpPDQ7aSsrKQogICAgIHsKQEAgLTE2MDEsOSArMTYwNiwxMCBAQAogICAgIHUzMl90IGNtZFsoWk1fTUFYX0NNRF9TSVpFLzQpXTsKICAgICB1MTZfdCByZXQ7CiAgICAgdTE2X3QgaTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAjaWYgMCAgIC8qIHJlbW92ZSB0byB6ZkNvcmVTZXRLZXkoKSAqLwogICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CkBAIC0xNjcwLDggKzE2NzYsMTAgQEAKICAgICB1MTZfdCBtYWNBZGRyWzNdID0gezAsIDAsIDB9OwogCiAgICAgI2lmZGVmIFpNX0VOQUJMRV9JQlNTX1dQQTJQU0sKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKIAogICAgIGlmICggaHBQcml2LT5kb3QxMU1vZGUgPT0gWk1fSEFMXzgwMjExX01PREVfSUJTU19XUEEyUFNLICkKICAgICB7IC8qIElmIG5vdCB3cGEycHNrICwgdXNlIHRyYWRpdGlvbmFsICovCkBAIC0xNzAyLDggKzE3MTAsMTAgQEAKIHUzMl90IHpmSHBTZXRQZXJVc2VyS2V5KHpkZXZfdCogZGV2LCB1OF90IHVzZXIsIHU4X3Qga2V5SWQsIHU4X3QqIG1hYywgdThfdCB0eXBlLCB1MzJfdCoga2V5LCB1MzJfdCogbWljS2V5KQogewogI2lmZGVmIFpNX0VOQUJMRV9JQlNTX1dQQTJQU0sKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKIAogICAgIGlmICggaHBQcml2LT5kb3QxMU1vZGUgPT0gWk1fSEFMXzgwMjExX01PREVfSUJTU19XUEEyUFNLICkKICAgICB7IC8qIElmIG5vdCB3cGEycHNrICwgdXNlIHRyYWRpdGlvbmFsICovCkBAIC0xOTE4LDkgKzE5MjgsMTAgQEAKIAogdTE2X3QgemZIcFNldEFwU3RhTW9kZSh6ZGV2X3QqIGRldiwgdThfdCBtb2RlKQogewotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKICAgICBocFByaXYtPmRvdDExTW9kZSA9IG1vZGU7CiAKICAgICBzd2l0Y2gobW9kZSkKQEAgLTE5OTMsOCArMjAwNCwxMCBAQAogdThfdCB6ZkhwVXBkYXRlUW9zUGFyYW1ldGVyKHpkZXZfdCogZGV2LCB1MTZfdCogY3dtaW5UYmwsIHUxNl90KiBjd21heFRibCwKICAgICAgICAgdTE2X3QqIGFpZnNUYmwsIHUxNl90KiB0eG9wVGJsKQogeworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXYgPSB3ZC0+aHBQcml2YXRlOwogCiAgICAgem1fbXNnMF9tbShaTV9MVl8wLCAiemZIYWxVcGRhdGVRb3NQYXJhbWV0ZXIoKSIpOwogCkBAIC0yMjU5LDkgKzIyNzIsMTEgQEAKICAgICAvLwogICAgIC8vcmV0ID0gemZJc3N1ZUNtZChkZXYsIGNtZCwgMTIsIFpNX0NXTV9SRUFELCAwKTsKICAgICAvL3JldHVybiByZXQ7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOwogCi0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIHpmQ29yZUN3bUJ1c3koZGV2LCB6ZkN3bUlzRXh0Q2hhbkJ1c3koaHBQcml2LT5jdGxCdXN5LCBocFByaXYtPmV4dEJ1c3kpKTsKIApAQCAtMjI5MSw5ICsyMzA2LDEwIEBACiAgKi8KIHUzMl90IHpmSHBBbmlVcGRhdGVSc3NpKHpkZXZfdCogZGV2LCB1OF90IHJzc2kpCiB7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCi0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICBocFByaXYtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2kgPSByc3NpOwogCkBAIC0yMzI1LDExICsyMzQxLDEyIEBACiAKIHUzMl90IHpmSHBHZXRUcmFuc21pdFBvd2VyKHpkZXZfdCogZGV2KQogewotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQotICAgIHN0cnVjdCB6c0hwUHJpdiogICAgaHBQcml2ICA9IHdkLT5ocFByaXZhdGU7CisgICAgc3RydWN0IHpzSHBQcml2KiAgICBocFByaXY7CiAgICAgdTE2X3QgICAgICAgICAgICAgICB0cGMgICAgID0gMDsKIAorICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBocFByaXYgID0gd2QtPmhwUHJpdmF0ZTsKKwogICAgIGlmIChocFByaXYtPmh3RnJlcXVlbmN5IDwgMzAwMCkgewogICAgICAgICB0cGMgPSBocFByaXYtPnRQb3cyeDJnWzBdICYgMHgzZjsKICAgICAgICAgd2QtPm1heFR4UG93ZXIyICY9IDB4M2Y7CkBAIC0yMzQ1LDExICsyMzYyLDEyIEBACiAKIHU4X3QgemZIcEdldE1pblR4UG93ZXIoemRldl90KiBkZXYpCiB7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCi0gICAgc3RydWN0IHpzSHBQcml2KiAgICBocFByaXYgID0gd2QtPmhwUHJpdmF0ZTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqICAgIGhwUHJpdjsKICAgICB1OF90ICAgICAgICAgICAgICAgdHBjICAgICA9IDA7CiAKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgaHBQcml2ICA9IHdkLT5ocFByaXZhdGU7CisKICAgICBpZiAoaHBQcml2LT5od0ZyZXF1ZW5jeSA8IDMwMDApCiAgICAgewogICAgICAgICBpZih3ZC0+QmFuZFdpZHRoNDApCkBAIC0yMzgyLDExICsyNDAwLDEyIEBACiAKIHU4X3QgemZIcEdldE1heFR4UG93ZXIoemRldl90KiBkZXYpCiB7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCi0gICAgc3RydWN0IHpzSHBQcml2KiAgICBocFByaXYgID0gd2QtPmhwUHJpdmF0ZTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqICAgIGhwUHJpdjsKICAgICB1OF90ICAgICAgICAgICAgICAgdHBjICAgICA9IDA7CiAKKyAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgaHBQcml2ICA9IHdkLT5ocFByaXZhdGU7CisKICAgICBpZiAoaHBQcml2LT5od0ZyZXF1ZW5jeSA8IDMwMDApCiAgICAgewogICAgICAgICB0cGMgPSAoaHBQcml2LT50UG93MnhDY2tbMF0mMHgzZik7CkBAIC0yNDIxLDExICsyNDQwLDEzIEBACiAKIHZvaWQgemZIcEhlYXJ0QmVhdCh6ZGV2X3QqIGRldikKIHsKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKICAgICB1OF90IHBvbGx1dGVkID0gMDsKICAgICB1OF90IGFja1RwYzsKIAorICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKwogICAgIC8qIFdvcmthcm91bmQgOiBNYWtlIE9UVVMgZmlyZSBtb3JlIGJlYWNvbiBpbiBhZCBob2MgbW9kZSBpbiAyLjRHSHogKi8KICAgICBpZiAoaHBQcml2LT5pYnNzQmNuRW5hYmxlZCAhPSAwKQogICAgIHsKQEAgLTQyMTksOCArNDI0MCwxMCBAQAogCiB2b2lkIHpmSHBQb3dlclNhdmVTZXRTdGF0ZSh6ZGV2X3QqIGRldiwgdThfdCBwc1N0YXRlKQogeworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXYgPSB3ZC0+aHBQcml2YXRlOwogCiAJLy9EYmdQcmludCgiSU5UTyB6ZkhwUG93ZXJTYXZlU2V0U3RhdGUiKTsKIApAQCAtNDI3OSw4ICs0MzAyLDEwIEBACiAKIHZvaWQgemZIcFNldEFnZ1BrdE51bSh6ZGV2X3QqIGRldiwgdTMyX3QgbnVtKQogeworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2ID0gd2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXYgPSB3ZC0+aHBQcml2YXRlOwogCiAgICAgbnVtID0gKG51bSA8PCAxNikgfCAoMHhhKTsKIApAQCAtNDMxMCw4ICs0MzM1LDEwIEBACiAKIHZvaWQgemZIcFNldFNsb3RUaW1lKHpkZXZfdCogZGV2LCB1OF90IHR5cGUpCiB7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXYgPSB3ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdiA9IHdkLT5ocFByaXZhdGU7CiAKICAgICBpZiAodHlwZSA9PSAwKQogICAgIHsKQEAgLTQzNzYsOCArNDQwMywxMCBAQAogCiB2b2lkIHpmSHBCZWdpblNpdGVTdXJ2ZXkoemRldl90KiBkZXYsIHU4X3Qgc3RhdHVzKQogeworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICBpZiAoIHN0YXR1cyA9PSAxICkKICAgICB7IC8vIENvbm5lY3RlZApAQCAtNDQyMSw4ICs0NDUwLDEwIEBACiAKIHZvaWQgemZIcEZpbmlzaFNpdGVTdXJ2ZXkoemRldl90KiBkZXYsIHU4X3Qgc3RhdHVzKQogeworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOwogCkBAIC00NTI3LDE2ICs0NTU4LDIwIEBACiAKIHUzMl90IHpmSHBDYXBhYmlsaXR5KHpkZXZfdCogZGV2KQogeworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICByZXR1cm4gaHBQcml2LT5oYWxDYXBhYmlsaXR5OwogfQogCiB2b2lkIHpmSHBTZXRSb2xsQ2FsbFRhYmxlKHpkZXZfdCogZGV2KQogeworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICBpZiAoaHBQcml2LT5jYW1Sb2xsQ2FsbFRhYmxlICE9ICh1NjRfdCkgMCkKICAgICB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5jCmluZGV4IDNjZmViYTguLmQ5ODk0ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJlZy5jCkBAIC0xNzcwLDggKzE3NzAsMTAgQEAKIAlSRUdfRE9NQUlOIHJkNUdIeiwgcmQyR0h6OwogCWNvbnN0IHN0cnVjdCBjbW9kZSAqY207CiAJczE2X3QgbmV4dD0wLGI7CisJc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CiAKQEAgLTI0NzMsOSArMjQ3NSwxMCBAQAogCiB2b2lkIHpmSHBEaXNhYmxlRGZzQ2hhbm5lbCh6ZGV2X3QqIGRldiwgdThfdCBkaXNhYmxlRmxhZykKIHsKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKICAgICBocFByaXYtPmRpc2FibGVEZnNDaCA9IGRpc2FibGVGbGFnOwogICAgIHJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJ3LmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBydy5jCmluZGV4IGRiN2Q0OTUuLmQ5ZmFkNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJ3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcncuYwpAQCAtMjksOCArMjksMTAgQEAKIAogdm9pZCB6ZkluaXRDbWRRdWV1ZSh6ZGV2X3QqIGRldikKIHsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKKwogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdiA9IChzdHJ1Y3QgenNIcFByaXYqKSh3ZC0+aHBQcml2YXRlKTsKKyAgICBocFByaXYgPSAoc3RydWN0IHpzSHBQcml2Kikod2QtPmhwUHJpdmF0ZSk7CiAKICAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOwogCkBAIC00OCw5ICs1MCwxMCBAQAogdTE2X3QgemZQdXRDbWQoemRldl90KiBkZXYsIHUzMl90KiBjbWQsIHUxNl90IGNtZExlbiwgdTE2X3Qgc3JjLCB1OF90KiBidWYpCiB7CiAgICAgdTE2X3QgaTsKKyAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdjsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLSAgICBzdHJ1Y3QgenNIcFByaXYqIGhwUHJpdj13ZC0+aHBQcml2YXRlOworICAgIGhwUHJpdj13ZC0+aHBQcml2YXRlOwogCiAgICAgLyogTWFrZSBzdXJlIGNvbW1hbmQgbGVuZ3RoIDwgWk1fTUFYX0NNRF9TSVpFICovCiAgICAgem1fYXNzZXJ0KGNtZExlbiA8PSBaTV9NQVhfQ01EX1NJWkUpOwpAQCAtNzcsOSArODAsMTAgQEAKIHUxNl90IHpmR2V0Q21kKHpkZXZfdCogZGV2LCB1MzJfdCogY21kLCB1MTZfdCogY21kTGVuLCB1MTZfdCogc3JjLCB1OF90KiogYnVmKQogewogICAgIHUxNl90IGk7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIGlmIChocFByaXYtPmNtZFRhaWwgPT0gaHBQcml2LT5jbWRIZWFkKQogICAgIHsKQEAgLTEwNiw5ICsxMTAsMTAgQEAKICAgICB1MTZfdCBuY21kTGVuID0gMDsKICAgICB1MTZfdCBjbWRGbGFnID0gMDsKICAgICB1MTZfdCBpOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OwogCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICB6bXdfZGVjbGFyZV9mb3JfY3JpdGljYWxfc2VjdGlvbigpOwogCkBAIC0xNDEsOCArMTQ2LDEwIEBACiAKIHZvaWQgemZpU2VuZENtZENvbXAoemRldl90KiBkZXYpCiB7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CiAKQEAgLTE1OCw5ICsxNjUsMTAgQEAKIHsKICAgICB1MTZfdCBjbWRGbGFnID0gMDsKICAgICB1MTZfdCByZXQ7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CiAKQEAgLTIxNCw5ICsyMjIsMTAgQEAKICAgICB1MTZfdCBpOwogICAgIHMzMl90IG5mOwogICAgIHMzMl90IG5vaXNlZmxvb3JbNF07CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogCiAgICAgem13X2RlY2xhcmVfZm9yX2NyaXRpY2FsX3NlY3Rpb24oKTsKQEAgLTgyNiw5ICs4MzUsMTAgQEAKICAgICB1MzJfdCBjbWRbKFpNX01BWF9DTURfU0laRS80KV07CiAgICAgdTE2X3QgaTsKICAgICB1MTZfdCByZXQ7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CiAKQEAgLTg5Miw4ICs5MDIsMTAgQEAKICAgICB1MzJfdCBjbWRbKFpNX01BWF9DTURfU0laRS80KV07CiAgICAgdTE2X3QgaTsKICAgICB1MTZfdCByZXQ7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CisKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgIHptd19kZWNsYXJlX2Zvcl9jcml0aWNhbF9zZWN0aW9uKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwdXNiLmMKaW5kZXggNGI3NmRlOS4uZWU5MzkwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwdXNiLmMKQEAgLTY0LDkgKzY0LDEwIEBACiAgICAgdTMyX3Qgb2xkUGh5Q3RybDsKIAogICAgIHUxNl90IHRwYyA9IDA7CisgICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0gICAgc3RydWN0IHpzSHBQcml2KiBocFByaXY9d2QtPmhwUHJpdmF0ZTsKKyAgICBocFByaXY9d2QtPmhwUHJpdmF0ZTsKIAogICAgLyogbW0gKi8KICAgICBpZiAoaGVhZGVyID09IE5VTEwpCkBAIC0zMzAsOCArMzMxLDEwIEBACiAgICAgdTE2X3QgaTsKICAgIAl1MTZfdCBzd2xwT2Zmc2V0OwogI2VuZGlmIC8qICNpZiBaTV9TV19MT09QX0JBQ0sgPT0gMSAqLworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICB6bV9tc2cxX3R4KFpNX0xWXzEsICJ6ZkhwU2VuZCgpLCBsZW4gPSAiLCAxMiArIGhlYWRlckxlbi04ICsgc25hcExlbiArIHpmd0J1ZkdldFNpemUoZGV2LCBidWYpICsgNCArIDgpOwogCkBAIC01NzYsOCArNTc5LDEwIEBACiAgICAgdTMyX3QgICAgICAgICAgICAgICByeE1DUzsKICAgICB1MzJfdCAgICAgICAgICAgICAgIHJ4Qlc7CiAgICAgdTMyX3QgICAgICAgICAgICAgICByeFNHOworICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2OworCiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwotICAgIHN0cnVjdCB6c0hwUHJpdiogaHBQcml2PXdkLT5ocFByaXZhdGU7CisgICAgaHBQcml2PXdkLT5ocFByaXZhdGU7CiAKICAgICAvL3ptX21zZzBfcngoWk1fTFZfMCwgInpmaVVzYlJlY3YoKSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9pb2N0bC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaW9jdGwuYwppbmRleCA3YTVjMWU4Li5jZTA0MjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2lvY3RsLmMKQEAgLTI1LDcgKzI1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJ1c2JkcnYuaCIKIApAQCAtMzQsNyArMzQsNyBAQAogI2RlZmluZSBaRF9JT0NUTF9HRVRXUEFJRQkJICAgIChTSU9DREVWUFJJVkFURSArIDMpCiAjaWZkZWYgWk1fRU5BQkxFX0NFTkMKICNkZWZpbmUgWk1fSU9DVExfQ0VOQyAgICAgICAgICAgICAgIChTSU9DREVWUFJJVkFURSArIDQpCi0jZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworI2VuZGlmICAvKiBaTV9FTkFCTEVfQ0VOQyAqLwogI2RlZmluZSBaRF9QQVJBTV9ST0FNSU5HCQkgICAgMHgwMDAxCiAjZGVmaW5lIFpEX1BBUkFNX1BSSVZBQ1kJCSAgICAweDAwMDIKICNkZWZpbmUgWkRfUEFSQU1fV1BBCQkJICAgIDB4MDAwMwpAQCAtNDUsNyArNDUsNyBAQAogCiAjaWZkZWYgWk1fRU5BQkxFX0NFTkMKICNkZWZpbmUgUDgwMjExX1BBQ0tFVF9DRU5DRkxBRwkJMHgwMDAxCi0jZW5kaWYgLy9aTV9FTkFCTEVfQ0VOQworI2VuZGlmICAvKiBaTV9FTkFCTEVfQ0VOQyAqLwogI2RlZmluZSBQODAyMTFfUEFDS0VUX1NFVEtFWSAgICAgCTB4MDAwMwogCiAjZGVmaW5lIFpEX0NNRF9TRVRfRU5DUllQVF9LRVkJCTB4MDAwMQpAQCAtNjIsMjA0ICs2MiwxOTAgQEAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2VuZGlmCiAKLWV4dGVybiB1MTZfdCB6ZkxueEdldFZhcElkKHpkZXZfdCogZGV2KTsKK2V4dGVybiB1MTZfdCB6ZkxueEdldFZhcElkKHpkZXZfdCAqZGV2KTsKIAogc3RhdGljIGNvbnN0IHUzMl90IGNoYW5uZWxfZnJlcXVlbmN5XzExQVtdID0KIHsKLS8vRXZlbiBlbGVtZW50IGZvciBDaGFubmVsIE51bWJlciwgT2RkIGZvciBGcmVxdWVuY3kKLSAgICAzNiw1MTgwLAotICAgIDQwLDUyMDAsCi0gICAgNDQsNTIyMCwKLSAgICA0OCw1MjQwLAotICAgIDUyLDUyNjAsCi0gICAgNTYsNTI4MCwKLSAgICA2MCw1MzAwLAotICAgIDY0LDUzMjAsCi0gICAgMTAwLDU1MDAsCi0gICAgMTA0LDU1MjAsCi0gICAgMTA4LDU1NDAsCi0gICAgMTEyLDU1NjAsCi0gICAgMTE2LDU1ODAsCi0gICAgMTIwLDU2MDAsCi0gICAgMTI0LDU2MjAsCi0gICAgMTI4LDU2NDAsCi0gICAgMTMyLDU2NjAsCi0gICAgMTM2LDU2ODAsCi0gICAgMTQwLDU3MDAsCi0vLwotICAgIDE4NCw0OTIwLAotICAgIDE4OCw0OTQwLAotICAgIDE5Miw0OTYwLAotICAgIDE5Niw0OTgwLAotICAgIDgsNTA0MCwKLSAgICAxMiw1MDYwLAotICAgIDE2LDUwODAsCi0gICAgMzQsNTE3MCwKLSAgICAzOCw1MTkwLAotICAgIDQyLDUyMTAsCi0gICAgNDYsNTIzMCwKLS8vCi0gICAgMTQ5LDU3NDUsCi0gICAgMTUzLDU3NjUsCi0gICAgMTU3LDU3ODUsCi0gICAgMTYxLDU4MDUsCi0gICAgMTY1LDU4MjUKLS8vCisJLyogRXZlbiBlbGVtZW50IGZvciBDaGFubmVsIE51bWJlciwgT2RkIGZvciBGcmVxdWVuY3kgKi8KKwkzNiwgNTE4MCwKKwk0MCwgNTIwMCwKKwk0NCwgNTIyMCwKKwk0OCwgNTI0MCwKKwk1MiwgNTI2MCwKKwk1NiwgNTI4MCwKKwk2MCwgNTMwMCwKKwk2NCwgNTMyMCwKKwkxMDAsIDU1MDAsCisJMTA0LCA1NTIwLAorCTEwOCwgNTU0MCwKKwkxMTIsIDU1NjAsCisJMTE2LCA1NTgwLAorCTEyMCwgNTYwMCwKKwkxMjQsIDU2MjAsCisJMTI4LCA1NjQwLAorCTEzMiwgNTY2MCwKKwkxMzYsIDU2ODAsCisJMTQwLCA1NzAwLAorCS8qKi8KKwkxODQsIDQ5MjAsCisJMTg4LCA0OTQwLAorCTE5MiwgNDk2MCwKKwkxOTYsIDQ5ODAsCisJOCwgNTA0MCwKKwkxMiwgNTA2MCwKKwkxNiwgNTA4MCwKKwkzNCwgNTE3MCwKKwkzOCwgNTE5MCwKKwk0MiwgNTIxMCwKKwk0NiwgNTIzMCwKKwkvKiovCisJMTQ5LCA1NzQ1LAorCTE1MywgNTc2NSwKKwkxNTcsIDU3ODUsCisJMTYxLCA1ODA1LAorCTE2NSwgNTgyNQorCS8qKi8KIH07CiAKIGludCB1c2JkcnZfZnJlcTJjaGFuKHUzMl90IGZyZXEpCiB7Ci0gICAgLyogMi40RyBIeiAqLwotICAgIGlmIChmcmVxID4gMjQwMCAmJiBmcmVxIDwgMzAwMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKGZyZXEtMjQxMikvNSkgKyAxOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB1MTZfdCBpaTsKLSAgICAgICAgdTE2X3QgbnVtX2NoYW4gPSBzaXplb2YoY2hhbm5lbF9mcmVxdWVuY3lfMTFBKS9zaXplb2YodTMyX3QpOworCS8qIDIuNEcgSHogKi8KKwlpZiAoZnJlcSA+IDI0MDAgJiYgZnJlcSA8IDMwMDApIHsKKwkJcmV0dXJuICgoZnJlcS0yNDEyKS81KSArIDE7CisJfSBlbHNlIHsKKwkJdTE2X3QgaWk7CisJCXUxNl90IG51bV9jaGFuID0gc2l6ZW9mKGNoYW5uZWxfZnJlcXVlbmN5XzExQSkvc2l6ZW9mKHUzMl90KTsKIAotICAgICAgICBmb3IoaWkgPSAxOyBpaSA8IG51bV9jaGFuOyBpaSArPSAyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY2hhbm5lbF9mcmVxdWVuY3lfMTFBW2lpXSA9PSBmcmVxKQotICAgICAgICAgICAgICAgIHJldHVybiBjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbaWktMV07Ci0gICAgICAgIH0KLSAgICB9CisJCWZvciAoaWkgPSAxOyBpaSA8IG51bV9jaGFuOyBpaSArPSAyKSB7CisJCQlpZiAoY2hhbm5lbF9mcmVxdWVuY3lfMTFBW2lpXSA9PSBmcmVxKQorCQkJCXJldHVybiBjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbaWktMV07CisJCX0KKwl9CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydl9jaGFuMmZyZXEoaW50IGNoYW4pCiB7Ci0gICAgaW50IGZyZXE7CisJaW50IGZyZXE7CiAKLSAgICAvKiBJZiBjaGFubmVsIG51bWJlciBpcyBvdXQgb2YgcmFuZ2UgKi8KLSAgICBpZiAoY2hhbiA+IDE2NSB8fCBjaGFuIDw9IDApCi0gICAgICAgIHJldHVybiAtMTsKKwkvKiBJZiBjaGFubmVsIG51bWJlciBpcyBvdXQgb2YgcmFuZ2UgKi8KKwlpZiAoY2hhbiA+IDE2NSB8fCBjaGFuIDw9IDApCisJCXJldHVybiAtMTsKIAotICAgIC8qIDIuNEcgYmFuZCAqLwotICAgIGlmIChjaGFuID49IDEgJiYgY2hhbiA8PSAxMykKLSAgICB7Ci0gICAgICAgIGZyZXEgPSAoMjQxMiArIChjaGFuIC0gMSkgKiA1KTsKLSAgICAgICAgcmV0dXJuIGZyZXE7Ci0gICAgfQotICAgIGVsc2UgaWYgKGNoYW4gPj0gMzYgJiYgY2hhbiA8PSAxNjUpCi0gICAgewotICAgICAgICB1MTZfdCBpaTsKLSAgICAgICAgdTE2X3QgbnVtX2NoYW4gPSBzaXplb2YoY2hhbm5lbF9mcmVxdWVuY3lfMTFBKS9zaXplb2YodTMyX3QpOworCS8qIDIuNEcgYmFuZCAqLworCWlmIChjaGFuID49IDEgJiYgY2hhbiA8PSAxMykgeworCQlmcmVxID0gKDI0MTIgKyAoY2hhbiAtIDEpICogNSk7CisJCQlyZXR1cm4gZnJlcTsKKwl9IGVsc2UgaWYgKGNoYW4gPj0gMzYgJiYgY2hhbiA8PSAxNjUpIHsKKwkJdTE2X3QgaWk7CisJCXUxNl90IG51bV9jaGFuID0gc2l6ZW9mKGNoYW5uZWxfZnJlcXVlbmN5XzExQSkvc2l6ZW9mKHUzMl90KTsKIAotICAgICAgICBmb3IoaWkgPSAwOyBpaSA8IG51bV9jaGFuOyBpaSArPSAyKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY2hhbm5lbF9mcmVxdWVuY3lfMTFBW2lpXSA9PSBjaGFuKQotICAgICAgICAgICAgICAgIHJldHVybiBjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbaWkrMV07Ci0gICAgICAgIH0KKwkJZm9yIChpaSA9IDA7IGlpIDwgbnVtX2NoYW47IGlpICs9IDIpIHsKKwkJCWlmIChjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbaWldID09IGNoYW4pCisJCQkJcmV0dXJuIGNoYW5uZWxfZnJlcXVlbmN5XzExQVtpaSsxXTsKKwkJfQogCi0gICAgICAgIC8qIENhbid0IGZpbmQgZGVzaXJlZCBmcmVxdWVuY3kgKi8KLSAgICAgICAgaWYgKGlpID09IG51bV9jaGFuKQotICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCS8qIENhbid0IGZpbmQgZGVzaXJlZCBmcmVxdWVuY3kgKi8KKwlpZiAoaWkgPT0gbnVtX2NoYW4pCisJCXJldHVybiAtMTsKKwl9CiAKLSAgICAvKiBDYW4ndCBmaW5kIGRlaXNyZWQgZnJlcXVlbmN5ICovCi0gICAgcmV0dXJuIC0xOworCS8qIENhbid0IGZpbmQgZGVpc3JlZCBmcmVxdWVuY3kgKi8KKwlyZXR1cm4gLTE7CiB9CiAKIGludCB1c2JkcnZfaW9jdGxfc2V0ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3BvaW50ICplcnEpCiB7Ci0jaWZkZWYgWk1fSE9TVEFQRF9TVVBQT1JUCi0gICAgLy9zdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgY2hhciBlc3NpZGJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXTsKLSAgICBpbnQgaTsKKwkjaWZkZWYgWk1fSE9TVEFQRF9TVVBQT1JUCisJLyogc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OyAqLworCWNoYXIgZXNzaWRidWZbSVdfRVNTSURfTUFYX1NJWkUrMV07CisJaW50IGk7CiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBtZW1zZXQoZXNzaWRidWYsIDAsIHNpemVvZihlc3NpZGJ1ZikpOworCW1lbXNldChlc3NpZGJ1ZiwgMCwgc2l6ZW9mKGVzc2lkYnVmKSk7CiAKLSAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydl9pb2N0bF9zZXRlc3NpZFxuIik7CisJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfaW9jdGxfc2V0ZXNzaWRcbiIpOwogCi0gICAgLy9wcmludGsoInNzaWRsZW49JWRcbiIsIGVycS0+bGVuZ3RoKTsgLy9mb3IgYW55LCBpdCBpcyAxLgotICAgIGlmIChlcnEtPmZsYWdzKSB7Ci0gICAgICAgIGlmIChlcnEtPmxlbmd0aCA+IChJV19FU1NJRF9NQVhfU0laRSsxKSkKLSAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisJLyogcHJpbnRrKCJzc2lkbGVuPSVkXG4iLCBlcnEtPmxlbmd0aCk7IC8vZm9yIGFueSwgaXQgaXMgMS4gKi8KKwlpZiAoZXJxLT5mbGFncykgeworCQlpZiAoZXJxLT5sZW5ndGggPiAoSVdfRVNTSURfTUFYX1NJWkUrMSkpCisJCQlyZXR1cm4gLUUyQklHOwogCi0gICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcihlc3NpZGJ1ZiwgZXJxLT5wb2ludGVyLCBlcnEtPmxlbmd0aCkpCi0gICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICB9CisJCWlmIChjb3B5X2Zyb21fdXNlcihlc3NpZGJ1ZiwgZXJxLT5wb2ludGVyLCBlcnEtPmxlbmd0aCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CiAKLSAgICAvL3pkX0Rpc2Fzb2NBbGwoMik7Ci0gICAgLy93YWl0X21zKDEwMCk7CisJLyogemRfRGlzYXNvY0FsbCgyKTsgKi8KKwkvKiB3YWl0X21zKDEwMCk7ICovCiAKLSAgICBwcmludGsoS0VSTl9FUlIgImVzc2lkYnVmOiAiKTsKKwlwcmludGsoS0VSTl9FUlIgImVzc2lkYnVmOiAiKTsKIAotICAgIGZvcihpID0gMDsgaSA8IGVycS0+bGVuZ3RoOyBpKyspCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9FUlIgIiUwMnggIiwgZXNzaWRidWZbaV0pOwotICAgIH0KKwlmb3IgKGkgPSAwOyBpIDwgZXJxLT5sZW5ndGg7IGkrKykKKwkJcHJpbnRrKEtFUk5fRVJSICIlMDJ4ICIsIGVzc2lkYnVmW2ldKTsKIAotICAgIHByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwlwcmludGsoS0VSTl9FUlIgIlxuIik7CiAKLSAgICBlc3NpZGJ1ZltlcnEtPmxlbmd0aF0gPSAnXDAnOwotICAgIC8vbWVtY3B5KG1hY3AtPndkLndzLnNzaWQsIGVzc2lkYnVmLCBlcnEtPmxlbmd0aCk7Ci0gICAgLy9tYWNwLT53ZC53cy5zc2lkTGVuID0gc3RybGVuKGVzc2lkYnVmKSsyOwotICAgIC8vbWFjcC0+d2Qud3Muc3NpZFsxXSA9IHN0cmxlbihlc3NpZGJ1Zik7IC8vIFVwZGF0ZSBzc2lkIGxlbmd0aAorCWVzc2lkYnVmW2VycS0+bGVuZ3RoXSA9ICdcMCc7CisJLyogbWVtY3B5KG1hY3AtPndkLndzLnNzaWQsIGVzc2lkYnVmLCBlcnEtPmxlbmd0aCk7ICovCisJLyogbWFjcC0+d2Qud3Muc3NpZExlbiA9IHN0cmxlbihlc3NpZGJ1ZikrMjsgKi8KKwkvKiBtYWNwLT53ZC53cy5zc2lkWzFdID0gc3RybGVuKGVzc2lkYnVmKTsgVXBkYXRlIHNzaWQgbGVuZ3RoICovCiAKLSAgICB6ZmlXbGFuU2V0U1NJRChkZXYsIGVzc2lkYnVmLCBlcnEtPmxlbmd0aCk7Ci0jaWYgMAotICAgIHByaW50ayhLRVJOX0VSUiAibWFjcC0+d2Qud3Muc3NpZDogIik7CisJemZpV2xhblNldFNTSUQoZGV2LCBlc3NpZGJ1ZiwgZXJxLT5sZW5ndGgpOworCSNpZiAwCisJCXByaW50ayhLRVJOX0VSUiAibWFjcC0+d2Qud3Muc3NpZDogIik7CiAKLSAgICBmb3IoaSA9IDA7IGkgPCBtYWNwLT53ZC53cy5zc2lkTGVuOyBpKyspCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9FUlIgIiUwMnggIiwgbWFjcC0+d2Qud3Muc3NpZFtpXSk7Ci0gICAgfQorCQlmb3IgKGkgPSAwOyBpIDwgbWFjcC0+d2Qud3Muc3NpZExlbjsgaSsrKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlMDJ4ICIsIG1hY3AtPndkLndzLnNzaWRbaV0pOwogCi0gICAgcHJpbnRrKEtFUk5fRVJSICJcbiIpOwotI2VuZGlmCi0gICAgemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKLSAgICB6ZmlXbGFuRW5hYmxlKGRldik7CisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwkjZW5kaWYKIAotI2VuZGlmCisJemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKKwl6ZmlXbGFuRW5hYmxlKGRldik7CiAKLSAgICByZXR1cm4gMDsKKwkjZW5kaWYKKworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2X2lvY3RsX2dldGVzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19wb2ludCAqZXJxKQogewotICAgICAvL3N0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICAgdThfdCBlc3NpZGJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXTsKLSAgICAgdThfdCBsZW47Ci0gICAgIHU4X3QgaTsKKwkvKiBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7ICovCisJdThfdCBlc3NpZGJ1ZltJV19FU1NJRF9NQVhfU0laRSsxXTsKKwl1OF90IGxlbjsKKwl1OF90IGk7CiAKIAotICAgICAvL2xlbiA9IG1hY3AtPndkLndzLnNzaWRMZW47Ci0gICAgIC8vbWVtY3B5KGVzc2lkYnVmLCBtYWNwLT53ZC53cy5zc2lkLCBtYWNwLT53ZC53cy5zc2lkTGVuKTsKLSAgICAgemZpV2xhblF1ZXJ5U1NJRChkZXYsIGVzc2lkYnVmLCAmbGVuKTsKKwkvKiBsZW4gPSBtYWNwLT53ZC53cy5zc2lkTGVuOyAqLworCS8qIG1lbWNweShlc3NpZGJ1ZiwgbWFjcC0+d2Qud3Muc3NpZCwgbWFjcC0+d2Qud3Muc3NpZExlbik7ICovCisJemZpV2xhblF1ZXJ5U1NJRChkZXYsIGVzc2lkYnVmLCAmbGVuKTsKIAotICAgICBlc3NpZGJ1ZltsZW5dID0gMDsKKwllc3NpZGJ1ZltsZW5dID0gMDsKIAotICAgICBwcmludGsoS0VSTl9FUlIgIkVTU0lEOiAiKTsKKwlwcmludGsoS0VSTl9FUlIgIkVTU0lEOiAiKTsKIAotICAgICBmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgewotICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIlYyIsIGVzc2lkYnVmW2ldKTsKLSAgICAgfQorCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJcHJpbnRrKEtFUk5fRVJSICIlYyIsIGVzc2lkYnVmW2ldKTsKIAotICAgICBwcmludGsoS0VSTl9FUlIgIlxuIik7CisJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwogCi0gICAgIGVycS0+ZmxhZ3M9IDE7Ci0gICAgIGVycS0+bGVuZ3RoID0gc3RybGVuKGVzc2lkYnVmKSArIDE7CisJZXJxLT5mbGFncyA9IDE7CisJZXJxLT5sZW5ndGggPSBzdHJsZW4oZXNzaWRidWYpICsgMTsKIAotICAgICBpZiAoZXJxLT5wb2ludGVyKQotICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihlcnEtPnBvaW50ZXIsIGVzc2lkYnVmLCBlcnEtPmxlbmd0aCkpCi0gICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGVycS0+cG9pbnRlcikgeworCQlpZiAoY29weV90b191c2VyKGVycS0+cG9pbnRlciwgZXNzaWRidWYsIGVycS0+bGVuZ3RoKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KIAotICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAotCiBpbnQgdXNiZHJ2X2lvY3RsX3NldHJ0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcGFyYW0gKnJycSkKIHsKLQotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiAjaWYgV0lSRUxFU1NfRVhUID4gMTQKQEAgLTI2Nyw0NjIgKzI1Myw0MTggQEAKICAqIEVuY29kZSBhIFdQQSBvciBSU04gaW5mb3JtYXRpb24gZWxlbWVudCBhcyBhIGN1c3RvbQogICogZWxlbWVudCB1c2luZyB0aGUgaG9zdGFwIGZvcm1hdC4KICAqLwotdTMyIGVuY29kZV9pZSh2b2lkICpidWYsIHUzMiBidWZzaXplLCBjb25zdCB1OCAqaWUsIHUzMiBpZWxlbiwgY29uc3QgdTggKmxlYWRlciwgdTMyIGxlYWRlcl9sZW4pCit1MzIgZW5jb2RlX2llKHZvaWQgKmJ1ZiwgdTMyIGJ1ZnNpemUsIGNvbnN0IHU4ICppZSwgdTMyIGllbGVuLAorCQljb25zdCB1OCAqbGVhZGVyLCB1MzIgbGVhZGVyX2xlbikKIHsKLSAgICB1OCAqcDsKLSAgICB1MzIgaTsKKwl1OCAqcDsKKwl1MzIgaTsKIAotICAgIGlmIChidWZzaXplIDwgbGVhZGVyX2xlbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcCA9IGJ1ZjsKLSAgICBtZW1jcHkocCwgbGVhZGVyLCBsZWFkZXJfbGVuKTsKLSAgICBidWZzaXplIC09IGxlYWRlcl9sZW47Ci0gICAgcCArPSBsZWFkZXJfbGVuOwotICAgIGZvciAoaSA9IDA7IGkgPCBpZWxlbiAmJiBidWZzaXplID4gMjsgaSsrKQotICAgICAgICBwICs9IHNwcmludGYocCwgIiUwMngiLCBpZVtpXSk7Ci0gICAgcmV0dXJuIChpID09IGllbGVuID8gcCAtICh1OCAqKWJ1ZiA6IDApOworCWlmIChidWZzaXplIDwgbGVhZGVyX2xlbikKKwkJcmV0dXJuIDA7CisJcCA9IGJ1ZjsKKwltZW1jcHkocCwgbGVhZGVyLCBsZWFkZXJfbGVuKTsKKwlidWZzaXplIC09IGxlYWRlcl9sZW47CisJcCArPSBsZWFkZXJfbGVuOworCWZvciAoaSA9IDA7IGkgPCBpZWxlbiAmJiBidWZzaXplID4gMjsgaSsrKQorCQlwICs9IHNwcmludGYocCwgIiUwMngiLCBpZVtpXSk7CisJcmV0dXJuIChpID09IGllbGVuID8gcCAtICh1OCAqKWJ1ZjowKTsKIH0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lSRUxFU1NfRVhUID4gMTQgKi8KKyNlbmRpZiAgLyogV0lSRUxFU1NfRVhUID4gMTQgKi8KIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIFRyYW5zbGF0ZSBzY2FuIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgY2FyZCB0byBhIGNhcmQgaW5kZXBlbmRlbnQKICAqIGZvcm1hdCB0aGF0IHRoZSBXaXJlbGVzcyBUb29scyB3aWxsIHVuZGVyc3RhbmQKICAqLwogY2hhciAqdXNiZHJ2X3RyYW5zbGF0ZV9zY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqY3VycmVudF9ldiwKLSAgICAgICAgY2hhciAqZW5kX2J1Ziwgc3RydWN0IHpzQnNzSW5mbyAqbGlzdCkKKwljaGFyICplbmRfYnVmLCBzdHJ1Y3QgenNCc3NJbmZvICpsaXN0KQogewotICAgIHN0cnVjdCBpd19ldmVudCBpd2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZW1wb3JhcnkgYnVmZmVyICovCi0gICAgdTE2X3QgY2FwYWJpbGl0aWVzOwotICAgIGNoYXIgKmN1cnJlbnRfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgcmF0ZXMgKi8KLSAgICBjaGFyICpsYXN0X2V2OwotICAgIGludCBpOwotI2lmIFdJUkVMRVNTX0VYVCA+IDE0Ci0gICAgY2hhciAgICBidWZbNjQqMiArIDMwXTsKLSNlbmRpZgorCXN0cnVjdCBpd19ldmVudCBpd2U7ICAgLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLworCXUxNl90IGNhcGFiaWxpdGllczsKKwljaGFyICpjdXJyZW50X3ZhbDsgICAgIC8qIEZvciByYXRlcyAqLworCWNoYXIgKmxhc3RfZXY7CisJaW50IGk7CisJI2lmIFdJUkVMRVNTX0VYVCA+IDE0CisJCWNoYXIgICAgYnVmWzY0KjIgKyAzMF07CisJI2VuZGlmCiAKLSAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKKwlsYXN0X2V2ID0gY3VycmVudF9ldjsKIAotLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLwotICAgIGl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0gICAgaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0gICAgbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgbGlzdC0+YnNzaWQsIEVUSF9BTEVOKTsKLSAgICBjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoCi0JaW5mbywKLQljdXJyZW50X2V2LAotCWVuZF9idWYsICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKwkvKiBGaXJzdCBlbnRyeSAqTVVTVCogYmUgdGhlIEFQIE1BQyBhZGRyZXNzICovCisJaXdlLmNtZCA9IFNJT0NHSVdBUDsKKwlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBsaXN0LT5ic3NpZCwgRVRIX0FMRU4pOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLAljdXJyZW50X2V2LAorCQkJCQllbmRfYnVmLCAmaXdlLCBJV19FVl9BRERSX0xFTik7CiAKLSAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLwotICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCi0gICAgewotICAgICAgICByZXR1cm4gZW5kX2J1ZjsKLSAgICB9CisJLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKwlpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQorCQlyZXR1cm4gZW5kX2J1ZjsKIAotICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OworCWxhc3RfZXYgPSBjdXJyZW50X2V2OwogCi0vKiBPdGhlciBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB3ZSBnaXZlIHRoZW0gKi8KKwkvKiBPdGhlciBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB3ZSBnaXZlIHRoZW0gKi8KIAotLyogQWRkIHRoZSBFU1NJRCAqLwotICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gbGlzdC0+c3NpZFsxXTsKLSAgICBpZihpd2UudS5kYXRhLmxlbmd0aCA+IDMyKQotICAgICAgICBpd2UudS5kYXRhLmxlbmd0aCA9IDMyOwotICAgIGl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7Ci0gICAgaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0gICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KAotCWluZm8sCi0JY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgJmxpc3QtPnNzaWRbMl0pOworCS8qIEFkZCB0aGUgRVNTSUQgKi8KKwlpd2UudS5kYXRhLmxlbmd0aCA9IGxpc3QtPnNzaWRbMV07CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoID4gMzIpCisJCWl3ZS51LmRhdGEubGVuZ3RoID0gMzI7CisJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKKwlpd2UudS5kYXRhLmZsYWdzID0gMTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywJY3VycmVudF9ldiwKKwkJCQkJZW5kX2J1ZiwgJml3ZSwgJmxpc3QtPnNzaWRbMl0pOwogCi0gICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KLSAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGVuZF9idWY7Ci0gICAgfQorCS8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisJaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKwkJcmV0dXJuIGVuZF9idWY7CiAKLSAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKKwlsYXN0X2V2ID0gY3VycmVudF9ldjsKIAotLyogQWRkIG1vZGUgKi8KLSAgICBpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0gICAgY2FwYWJpbGl0aWVzID0gKGxpc3QtPmNhcGFiaWxpdHlbMV0gPDwgOCkgKyBsaXN0LT5jYXBhYmlsaXR5WzBdOwotICAgIGlmKGNhcGFiaWxpdGllcyAmICgweDAxIHwgMHgwMikpCi0gICAgewotICAgICAgICBpZihjYXBhYmlsaXRpZXMgJiAweDAxKQotICAgICAgICAgICAgaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKLSAgICAgICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KAotCQlpbmZvLAotCQljdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9VSU5UX0xFTik7Ci0gICAgfQorCS8qIEFkZCBtb2RlICovCisJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOworCWNhcGFiaWxpdGllcyA9IChsaXN0LT5jYXBhYmlsaXR5WzFdIDw8IDgpICsgbGlzdC0+Y2FwYWJpbGl0eVswXTsKKwlpZiAoY2FwYWJpbGl0aWVzICYgKDB4MDEgfCAweDAyKSkgeworCQlpZiAoY2FwYWJpbGl0aWVzICYgMHgwMSkKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKKwkJZWxzZQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CisJCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywJY3VycmVudF9ldiwKKwkJCQkJCWVuZF9idWYsICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKKwl9CiAKLSAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLwotICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCi0gICAgewotICAgICAgICByZXR1cm4gZW5kX2J1ZjsKLSAgICB9CisJLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKwlpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQorCQlyZXR1cm4gZW5kX2J1ZjsKIAotICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OworCWxhc3RfZXYgPSBjdXJyZW50X2V2OwogCi0vKiBBZGQgZnJlcXVlbmN5ICovCi0gICAgaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotICAgIGl3ZS51LmZyZXEubSA9IGxpc3QtPmNoYW5uZWw7Ci0vKiBDaGFubmVsIGZyZXF1ZW5jeSBpbiBLSHogKi8KLSAgICBpZiAoaXdlLnUuZnJlcS5tID4gMTQpCi0gICAgewotICAgICAgICBpZiAoKDE4NCA8PSBpd2UudS5mcmVxLm0pICYmIChpd2UudS5mcmVxLm08PTE5NikpCi0gICAgICAgICAgICAgIGl3ZS51LmZyZXEubSA9IDQwMDAgKyBpd2UudS5mcmVxLm0gKiA1OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGl3ZS51LmZyZXEubSA9IDUwMDAgKyBpd2UudS5mcmVxLm0gKiA1OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoaXdlLnUuZnJlcS5tID09IDE0KQotICAgICAgICAgICAgICBpd2UudS5mcmVxLm0gPSAyNDg0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIGl3ZS51LmZyZXEubSA9IDI0MTIgKyAoaXdlLnUuZnJlcS5tIC0gMSkgKiA1OwotICAgIH0KLSAgICBpd2UudS5mcmVxLmUgPSA2OwotICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudCgKLQlpbmZvLAotICAgIAljdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9GUkVRX0xFTik7CisJLyogQWRkIGZyZXF1ZW5jeSAqLworCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwlpd2UudS5mcmVxLm0gPSBsaXN0LT5jaGFubmVsOworCS8qIENoYW5uZWwgZnJlcXVlbmN5IGluIEtIeiAqLworCWlmIChpd2UudS5mcmVxLm0gPiAxNCkgeworCQlpZiAoKDE4NCA8PSBpd2UudS5mcmVxLm0pICYmIChpd2UudS5mcmVxLm0gPD0gMTk2KSkKKwkJCWl3ZS51LmZyZXEubSA9IDQwMDAgKyBpd2UudS5mcmVxLm0gKiA1OworCQllbHNlCisJCQlpd2UudS5mcmVxLm0gPSA1MDAwICsgaXdlLnUuZnJlcS5tICogNTsKKwl9IGVsc2UgeworCQlpZiAoaXdlLnUuZnJlcS5tID09IDE0KQorCQkJaXdlLnUuZnJlcS5tID0gMjQ4NDsKKwkJZWxzZQorCQkJaXdlLnUuZnJlcS5tID0gMjQxMiArIChpd2UudS5mcmVxLm0gLSAxKSAqIDU7CisJfQorCWl3ZS51LmZyZXEuZSA9IDY7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCWVuZF9idWYsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKIAotICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCi0gICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlbmRfYnVmOwotICAgIH0KKwkvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworCWlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCisJCXJldHVybiBlbmRfYnVmOwogCi0gICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisJbGFzdF9ldiA9IGN1cnJlbnRfZXY7CiAKLS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MgKi8KLSAgICBpd2UuY21kID0gSVdFVlFVQUw7Ci0jaWYgV0lSRUxFU1NfRVhUID4gMTgKLSAgICBpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX1FVQUxfVVBEQVRFRCB8IElXX1FVQUxfTEVWRUxfVVBEQVRFRAotICAgICAgICAgICAgICAgICAgICAgICAgfElXX1FVQUxfTk9JU0VfVVBEQVRFRDsKLSNlbmRpZgotICAgIGl3ZS51LnF1YWwubGV2ZWwgPSBsaXN0LT5zaWduYWxTdHJlbmd0aDsKLSAgICBpd2UudS5xdWFsLm5vaXNlID0gMDsKLSAgICBpd2UudS5xdWFsLnF1YWwgPSBsaXN0LT5zaWduYWxRdWFsaXR5OwotICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudCgKLQlpbmZvLAotCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKwkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzICovCisJaXdlLmNtZCA9IElXRVZRVUFMOworCSNpZiBXSVJFTEVTU19FWFQgPiAxOAorCWl3ZS51LnF1YWwudXBkYXRlZCA9IElXX1FVQUxfUVVBTF9VUERBVEVEIHwgSVdfUVVBTF9MRVZFTF9VUERBVEVECisJCQkJfCBJV19RVUFMX05PSVNFX1VQREFURUQ7CisJI2VuZGlmCisJaXdlLnUucXVhbC5sZXZlbCA9IGxpc3QtPnNpZ25hbFN0cmVuZ3RoOworCWl3ZS51LnF1YWwubm9pc2UgPSAwOworCWl3ZS51LnF1YWwucXVhbCA9IGxpc3QtPnNpZ25hbFF1YWxpdHk7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sCWN1cnJlbnRfZXYsCisJCQkJCWVuZF9idWYsICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKIAotICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCi0gICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlbmRfYnVmOwotICAgIH0KKwkvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworCWlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCisJCXJldHVybiBlbmRfYnVmOwogCi0gICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisJbGFzdF9ldiA9IGN1cnJlbnRfZXY7CiAKLS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KKwkvKiBBZGQgZW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCiAKLSAgICBpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLSAgICBpZihjYXBhYmlsaXRpZXMgJiAweDEwKQotICAgICAgICBpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7Ci0gICAgZWxzZQotICAgICAgICBpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOworCWlmIChjYXBhYmlsaXRpZXMgJiAweDEwKQorCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7CisJZWxzZQorCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwogCi0gICAgaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludCgKLQlpbmZvLAotCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIGxpc3QtPnNzaWQpOworCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywJY3VycmVudF9ldiwKKwkJCQkJZW5kX2J1ZiwgJml3ZSwgbGlzdC0+c3NpZCk7CiAKLSAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLwotICAgIGlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCi0gICAgewotICAgICAgICByZXR1cm4gZW5kX2J1ZjsKLSAgICB9CisJLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKwlpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQorCQlyZXR1cm4gZW5kX2J1ZjsKIAotICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OworCWxhc3RfZXYgPSBjdXJyZW50X2V2OwogCi0vKiBSYXRlIDogc3R1ZmZpbmcgbXVsdGlwbGUgdmFsdWVzIGluIGEgc2luZ2xlIGV2ZW50IHJlcXVpcmUgYSBiaXQKLSAqIG1vcmUgb2YgbWFnaWMgKi8KLSAgICBjdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBJV19FVl9MQ1BfTEVOOworCS8qIFJhdGUgOiBzdHVmZmluZyBtdWx0aXBsZSB2YWx1ZXMgaW4gYSBzaW5nbGUgZXZlbnQgcmVxdWlyZSBhIGJpdAorCSogbW9yZSBvZiBtYWdpYworCSovCisJY3VycmVudF92YWwgPSBjdXJyZW50X2V2ICsgSVdfRVZfTENQX0xFTjsKIAotICAgIGl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKLS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLwotICAgIGl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKKwlpd2UuY21kID0gU0lPQ0dJV1JBVEU7CisJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCisJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOwogCi0gICAgZm9yKGkgPSAwIDsgaSA8IGxpc3QtPnN1cHBvcnRlZFJhdGVzWzFdIDsgaSsrKQotICAgIHsKLS8qIEJpdCByYXRlIGdpdmVuIGluIDUwMCBrYi9zIHVuaXRzICgrIDB4ODApICovCi0gICAgICAgIGl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGxpc3QtPnN1cHBvcnRlZFJhdGVzW2krMl0gJiAweDdmKSAqIDUwMDAwMCk7Ci0vKiBBZGQgbmV3IHZhbHVlIHRvIGV2ZW50ICovCi0gICAgICAgIGN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoCi0JCWluZm8sCi0JCWN1cnJlbnRfZXYsIGN1cnJlbnRfdmFsLCBlbmRfYnVmLCAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOworCWZvciAoaSA9IDAgOyBpIDwgbGlzdC0+c3VwcG9ydGVkUmF0ZXNbMV0gOyBpKyspIHsKKwkJLyogQml0IHJhdGUgZ2l2ZW4gaW4gNTAwIGtiL3MgdW5pdHMgKCsgMHg4MCkgKi8KKwkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgobGlzdC0+c3VwcG9ydGVkUmF0ZXNbaSsyXSAmIDB4N2YpCisJCQkJCSogNTAwMDAwKTsKKwkJLyogQWRkIG5ldyB2YWx1ZSB0byBldmVudCAqLworCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsCisJCQkJY3VycmVudF92YWwsIGVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CiAKLSAgICAgICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KLSAgICAgICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF92YWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbmRfYnVmOwotICAgICAgICB9CisJCS8qIFJhbiBvdXQgb2YgYnVmZmVyICovCisJCWlmIChsYXN0X2V2ID09IGN1cnJlbnRfdmFsKQorCQkJcmV0dXJuIGVuZF9idWY7CiAKLSAgICAgICAgbGFzdF9ldiA9IGN1cnJlbnRfdmFsOwotICAgIH0KKwkJbGFzdF9ldiA9IGN1cnJlbnRfdmFsOworCX0KIAotICAgIGZvciAoaSA9IDAgOyBpIDwgbGlzdC0+ZXh0U3VwcG9ydGVkUmF0ZXNbMV0gOyBpKyspCi0gICAgewotLyogQml0IHJhdGUgZ2l2ZW4gaW4gNTAwIGtiL3MgdW5pdHMgKCsgMHg4MCkgKi8KLSAgICAgICAgaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgobGlzdC0+ZXh0U3VwcG9ydGVkUmF0ZXNbaSsyXSAmIDB4N2YpICogNTAwMDAwKTsKLS8qIEFkZCBuZXcgdmFsdWUgdG8gZXZlbnQgKi8KLSAgICAgICAgY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZSgKLQkJaW5mbywKLQkJY3VycmVudF9ldiwgY3VycmVudF92YWwsIGVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7CisJZm9yIChpID0gMCA7IGkgPCBsaXN0LT5leHRTdXBwb3J0ZWRSYXRlc1sxXSA7IGkrKykgeworCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLworCQlpd2UudS5iaXRyYXRlLnZhbHVlID0gKChsaXN0LT5leHRTdXBwb3J0ZWRSYXRlc1tpKzJdICYgMHg3ZikKKwkJCQkJKiA1MDAwMDApOworCQkvKiBBZGQgbmV3IHZhbHVlIHRvIGV2ZW50ICovCisJCWN1cnJlbnRfdmFsID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwKKwkJCQljdXJyZW50X3ZhbCwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKIAotICAgICAgICAvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLwotICAgICAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X3ZhbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVuZF9idWY7Ci0gICAgICAgIH0KKwkJLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKwkJaWYgKGxhc3RfZXYgPT0gY3VycmVudF92YWwpCisJCQlyZXR1cm4gZW5kX2J1ZjsKIAotICAgICAgICBsYXN0X2V2ID0gY3VycmVudF9ldjsKLSAgICB9CisJCWxhc3RfZXYgPSBjdXJyZW50X2V2OworCX0KIAotLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCi0gICAgaWYoKGN1cnJlbnRfdmFsIC0gY3VycmVudF9ldikgPiBJV19FVl9MQ1BfTEVOKQotICAgICAgICBjdXJyZW50X2V2ID0gY3VycmVudF92YWw7Ci0jaWYgV0lSRUxFU1NfRVhUID4gMTQKLSNkZWZpbmUgSUVFRTgwMjExX0VMRU1JRF9SU04gMHgzMAotICAgIG1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0gICAgaXdlLmNtZCA9IElXRVZDVVNUT007Ci0gICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImJjbl9pbnQ9JWQiLCAobGlzdC0+YmVhY29uSW50ZXJ2YWxbMV0gPDwgOCkgKyBsaXN0LT5iZWFjb25JbnRlcnZhbFswXSk7Ci0gICAgaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLSAgICBjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoCi0JCWluZm8sCi0JCWN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIGJ1Zik7CisJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCisJaWYgKChjdXJyZW50X3ZhbCAtIGN1cnJlbnRfZXYpID4gSVdfRVZfTENQX0xFTikKKwkJY3VycmVudF9ldiA9IGN1cnJlbnRfdmFsOworCSNpZiBXSVJFTEVTU19FWFQgPiAxNAorCQkjZGVmaW5lIElFRUU4MDIxMV9FTEVNSURfUlNOIDB4MzAKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJiY25faW50PSVkIiwgKGxpc3QtPmJlYWNvbkludGVydmFsWzFdIDw8IDgpCisJCQkJCQkrIGxpc3QtPmJlYWNvbkludGVydmFsWzBdKTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJZW5kX2J1ZiwgJml3ZSwgYnVmKTsKIAotICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCi0gICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKLSAgICB7Ci0gICAgICAgIHJldHVybiBlbmRfYnVmOwotICAgIH0KKwkvKiBSYW4gb3V0IG9mIGJ1ZmZlciAqLworCWlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCisJCXJldHVybiBlbmRfYnVmOwogCi0gICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7CisJbGFzdF9ldiA9IGN1cnJlbnRfZXY7CiAKLSAgICBpZiAobGlzdC0+d3BhSWVbMV0gIT0gMCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHJzbl9sZWFkZXJbXSA9ICJyc25faWU9IjsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgd3BhX2xlYWRlcltdID0gIndwYV9pZT0iOworCWlmIChsaXN0LT53cGFJZVsxXSAhPSAwKSB7CisJCXN0YXRpYyBjb25zdCBjaGFyIHJzbl9sZWFkZXJbXSA9ICJyc25faWU9IjsKKwkJc3RhdGljIGNvbnN0IGNoYXIgd3BhX2xlYWRlcltdID0gIndwYV9pZT0iOwogCi0gICAgICAgIG1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0gICAgICAgIGl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotICAgICAgICBpZiAobGlzdC0+d3BhSWVbMF0gPT0gSUVFRTgwMjExX0VMRU1JRF9SU04pCi0gICAgICAgICAgICBpd2UudS5kYXRhLmxlbmd0aCA9IGVuY29kZV9pZShidWYsIHNpemVvZihidWYpLAotICAgICAgICAgICAgICAgIGxpc3QtPndwYUllLCBsaXN0LT53cGFJZVsxXSsyLAotICAgICAgICAgICAgICAgIHJzbl9sZWFkZXIsIHNpemVvZihyc25fbGVhZGVyKS0xKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaXdlLnUuZGF0YS5sZW5ndGggPSBlbmNvZGVfaWUoYnVmLCBzaXplb2YoYnVmKSwKLSAgICAgICAgICAgICAgICBsaXN0LT53cGFJZSwgbGlzdC0+d3BhSWVbMV0rMiwKLSAgICAgICAgICAgICAgICB3cGFfbGVhZGVyLCBzaXplb2Yod3BhX2xlYWRlciktMSk7CisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCQlpZiAobGlzdC0+d3BhSWVbMF0gPT0gSUVFRTgwMjExX0VMRU1JRF9SU04pCisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IGVuY29kZV9pZShidWYsIHNpemVvZihidWYpLAorCQkJCQlsaXN0LT53cGFJZSwgbGlzdC0+d3BhSWVbMV0rMiwKKwkJCQkJcnNuX2xlYWRlciwgc2l6ZW9mKHJzbl9sZWFkZXIpLTEpOworCQllbHNlCisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IGVuY29kZV9pZShidWYsIHNpemVvZihidWYpLAorCQkJCQlsaXN0LT53cGFJZSwgbGlzdC0+d3BhSWVbMV0rMiwKKwkJCQkJd3BhX2xlYWRlciwgc2l6ZW9mKHdwYV9sZWFkZXIpLTEpOwogCi0gICAgICAgIGlmIChpd2UudS5kYXRhLmxlbmd0aCAhPSAwKQotICAgICAgICAgICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KAotCQlpbmZvLAotCQljdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBidWYpOworCQlpZiAoaXdlLnUuZGF0YS5sZW5ndGggIT0gMCkKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCWVuZF9idWYsICZpd2UsIGJ1Zik7CiAKLSAgICAgICAgLyogUmFuIG91dCBvZiBidWZmZXIgKi8KLSAgICAgICAgaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVuZF9idWY7Ci0gICAgICAgIH0KKwkJLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKwkJaWYgKGxhc3RfZXYgPT0gY3VycmVudF9ldikKKwkJCXJldHVybiBlbmRfYnVmOwogCi0gICAgICAgIGxhc3RfZXYgPSBjdXJyZW50X2V2OwotICAgIH0KLSAgICBpZiAobGlzdC0+cnNuSWVbMV0gIT0gMCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIHJzbl9sZWFkZXJbXSA9ICJyc25faWU9IjsKLSAgICAgICAgbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLSAgICAgICAgaXdlLmNtZCA9IElXRVZDVVNUT007CisJCWxhc3RfZXYgPSBjdXJyZW50X2V2OworCX0KIAotICAgICAgICBpZiAobGlzdC0+cnNuSWVbMF0gPT0gSUVFRTgwMjExX0VMRU1JRF9SU04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGl3ZS51LmRhdGEubGVuZ3RoID0gZW5jb2RlX2llKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0gICAgICAgICAgICAgICAgbGlzdC0+cnNuSWUsIGxpc3QtPnJzbkllWzFdKzIsCi0gICAgICAgICAgICAgICAgcnNuX2xlYWRlciwgc2l6ZW9mKHJzbl9sZWFkZXIpLTEpOwotICAgICAgICAgICAgaWYgKGl3ZS51LmRhdGEubGVuZ3RoICE9IDApCi0gICAgICAgICAgICAgICAgY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KAotCQkJaW5mbywKLQkJCWN1cnJlbnRfZXYsIGVuZF9idWYsICAmaXdlLCBidWYpOworCWlmIChsaXN0LT5yc25JZVsxXSAhPSAwKSB7CisJCXN0YXRpYyBjb25zdCBjaGFyIHJzbl9sZWFkZXJbXSA9ICJyc25faWU9IjsKKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IElXRVZDVVNUT007CiAKLSAgICAgICAgICAgIC8qIFJhbiBvdXQgb2YgYnVmZmVyICovCi0gICAgICAgICAgICBpZiAobGFzdF9ldiA9PSBjdXJyZW50X2V2KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlbmRfYnVmOwotICAgICAgICAgICAgfQorCQlpZiAobGlzdC0+cnNuSWVbMF0gPT0gSUVFRTgwMjExX0VMRU1JRF9SU04pIHsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gZW5jb2RlX2llKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCQlsaXN0LT5yc25JZSwgbGlzdC0+cnNuSWVbMV0rMiwKKwkJCXJzbl9sZWFkZXIsIHNpemVvZihyc25fbGVhZGVyKS0xKTsKKwkJCWlmIChpd2UudS5kYXRhLmxlbmd0aCAhPSAwKQorCQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLAorCQkJCQljdXJyZW50X2V2LCBlbmRfYnVmLCAgJml3ZSwgYnVmKTsKIAotICAgICAgICAgICAgbGFzdF9ldiA9IGN1cnJlbnRfZXY7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLS8qIFRoZSBvdGhlciBkYXRhIGluIHRoZSBzY2FuIHJlc3VsdCBhcmUgbm90IHJlYWxseQotICogaW50ZXJlc3RpbmcsIHNvIGZvciBub3cgZHJvcCBpdCAqLwotICAgIHJldHVybiBjdXJyZW50X2V2OworCQkJLyogUmFuIG91dCBvZiBidWZmZXIgKi8KKwkJCWlmIChsYXN0X2V2ID09IGN1cnJlbnRfZXYpCisJCQkJcmV0dXJuIGVuZF9idWY7CisKKwkJCWxhc3RfZXYgPSBjdXJyZW50X2V2OworCQl9CisJfQorCSNlbmRpZgorCS8qIFRoZSBvdGhlciBkYXRhIGluIHRoZSBzY2FuIHJlc3VsdCBhcmUgbm90IHJlYWxseQorCSogaW50ZXJlc3RpbmcsIHNvIGZvciBub3cgZHJvcCBpdAorCSovCisJcmV0dXJuIGN1cnJlbnRfZXY7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X2dpd25hbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnEsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQl1bmlvbiBpd3JlcV9kYXRhICp3cnEsIGNoYXIgKmV4dHJhKQogewotICAgIC8vc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCS8qIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsgKi8KIAotICAgIHN0cmNweSh3cnEtPm5hbWUsICJJRUVFIDgwMi4xMS1NSU1PIik7CisJc3RyY3B5KHdycS0+bmFtZSwgIklFRUUgODAyLjExLU1JTU8iKTsKIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgdTMyX3QgRnJlcUtIejsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJdTMyX3QgRnJlcUtIejsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAoZnJlcS0+ZSA+IDEpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmIChmcmVxLT5lID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAoZnJlcS0+ZSA9PSAxKQotICAgIHsKLSAgICAgICAgRnJlcUtIeiA9IChmcmVxLT5tIC8gMTAwMDAwKTsKKwlpZiAoZnJlcS0+ZSA9PSAxKSB7CisJCUZyZXFLSHogPSAoZnJlcS0+bSAvIDEwMDAwMCk7CiAKLSAgICAgICAgaWYgKEZyZXFLSHogPiA0MDAwMDAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoRnJlcUtIeiA+IDU4MjUwMDApCi0gICAgICAgICAgICAgICAgRnJlcUtIeiA9IDU4MjUwMDA7Ci0gICAgICAgICAgICBlbHNlIGlmIChGcmVxS0h6IDwgNDkyMDAwMCkKLSAgICAgICAgICAgICAgICBGcmVxS0h6ID0gNDkyMDAwMDsKLSAgICAgICAgICAgIGVsc2UgaWYgKEZyZXFLSHogPCA1MDAwMDAwKQotICAgICAgICAgICAgICAgIEZyZXFLSHogPSAoKChGcmVxS0h6IC0gNDAwMDAwMCkgLyA1MDAwKSAqIDUwMDApICsgNDAwMDAwMDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBGcmVxS0h6ID0gKCgoRnJlcUtIeiAtIDUwMDAwMDApIC8gNTAwMCkgKiA1MDAwKSArIDUwMDAwMDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoRnJlcUtIeiA+IDI0ODQwMDApCi0gICAgICAgICAgICAgICAgRnJlcUtIeiA9IDI0ODQwMDA7Ci0gICAgICAgICAgICBlbHNlIGlmIChGcmVxS0h6IDwgMjQxMjAwMCkKLSAgICAgICAgICAgICAgICBGcmVxS0h6ID0gMjQxMjAwMDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBGcmVxS0h6ID0gKCgoRnJlcUtIeiAtIDI0MTIwMDApIC8gNTAwMCkgKiA1MDAwKSArIDI0MTIwMDA7Ci0gICAgICAgIH0KKwkJaWYgKEZyZXFLSHogPiA0MDAwMDAwKSB7CisJCQlpZiAoRnJlcUtIeiA+IDU4MjUwMDApCisJCQkJRnJlcUtIeiA9IDU4MjUwMDA7CisJCQllbHNlIGlmIChGcmVxS0h6IDwgNDkyMDAwMCkKKwkJCQlGcmVxS0h6ID0gNDkyMDAwMDsKKwkJCWVsc2UgaWYgKEZyZXFLSHogPCA1MDAwMDAwKQorCQkJCUZyZXFLSHogPSAoKChGcmVxS0h6IC0gNDAwMDAwMCkgLyA1MDAwKSAqIDUwMDApCisJCQkJCQkrIDQwMDAwMDA7CisJCQllbHNlCisJCQkJRnJlcUtIeiA9ICgoKEZyZXFLSHogLSA1MDAwMDAwKSAvIDUwMDApICogNTAwMCkKKwkJCQkJCSsgNTAwMDAwMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChGcmVxS0h6ID4gMjQ4NDAwMCkKKwkJCQlGcmVxS0h6ID0gMjQ4NDAwMDsKKwkJCWVsc2UgaWYgKEZyZXFLSHogPCAyNDEyMDAwKQorCQkJCUZyZXFLSHogPSAyNDEyMDAwOworCQkJZWxzZQorCQkJCUZyZXFLSHogPSAoKChGcmVxS0h6IC0gMjQxMjAwMCkgLyA1MDAwKSAqIDUwMDApCisJCQkJCQkrIDI0MTIwMDA7CisJCX0KKwl9IGVsc2UgeworCQlGcmVxS0h6ID0gdXNiZHJ2X2NoYW4yZnJlcShmcmVxLT5tKTsKIAotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBGcmVxS0h6ID0gdXNiZHJ2X2NoYW4yZnJlcShmcmVxLT5tKTsKKwkJaWYgKEZyZXFLSHogIT0gLTEpCisJCQlGcmVxS0h6ICo9IDEwMDA7CisJCWVsc2UKKwkJCUZyZXFLSHogPSAyNDEyMDAwOworCX0KIAotICAgICAgICBpZiAoRnJlcUtIeiAhPSAtMSkKLSAgICAgICAgICAgIEZyZXFLSHogKj0gMTAwMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgRnJlcUtIeiA9IDI0MTIwMDA7Ci0gICAgfQorCS8qIHByaW50aygiZnJlcS0+bTogJWQsIGZyZXEtPmU6ICVkXG4iLCBmcmVxLT5tLCBmcmVxLT5lKTsgKi8KKwkvKiBwcmludGsoIkZyZXFLSHo6ICVkXG4iLCBGcmVxS0h6KTsgKi8KIAotICAgIC8vcHJpbnRrKCJmcmVxLT5tOiAlZCwgZnJlcS0+ZTogJWRcbiIsIGZyZXEtPm0sIGZyZXEtPmUpOwotICAgIC8vcHJpbnRrKCJGcmVxS0h6OiAlZFxuIiwgRnJlcUtIeik7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKSB7CisJCXpmaVdsYW5TZXRGcmVxdWVuY3koZGV2LCBGcmVxS0h6LCAwKTsgLyogSW1tZWRpYXRlICovCisJCS8qIHU4X3Qgd3BhaWVMZW4sd3BhaWVbNTBdOyAqLworCQkvKiB6ZmlXbGFuUXVlcnlXcGFJZShkZXYsIHdwYWllLCAmd3BhaWVMZW4pOyAqLworCQl6ZmlXbGFuRGlzYWJsZShkZXYsIDApOworCQl6ZmlXbGFuRW5hYmxlKGRldik7CisJCS8qIGlmICh3cGFpZUxlbiA+IDIpICovCisJCS8qIHpmaVdsYW5TZXRXcGFJZShkZXYsIHdwYWllLCB3cGFpZUxlbik7ICovCisJfQogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKQotICAgIHsKLSAgICAgICAgemZpV2xhblNldEZyZXF1ZW5jeShkZXYsIEZyZXFLSHosIDApOyAvLyBJbW1lZGlhdGUKLSAgICAgICAgLy91OF90IHdwYWllTGVuLHdwYWllWzUwXTsKLSAgICAgICAgLy96ZmlXbGFuUXVlcnlXcGFJZShkZXYsIHdwYWllLCAmd3BhaWVMZW4pOwotICAgICAgICB6ZmlXbGFuRGlzYWJsZShkZXYsIDApOwotICAgICAgICB6ZmlXbGFuRW5hYmxlKGRldik7Ci0gICAgICAgIC8vaWYgKHdwYWllTGVuID4gMikKLSAgICAgICAgLy8gICAgemZpV2xhblNldFdwYUllKGRldiwgd3BhaWUsIHdwYWllTGVuKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfZ2l3ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBmcmVxLT5tID0gemZpV2xhblF1ZXJ5RnJlcXVlbmN5KGRldik7Ci0gICAgZnJlcS0+ZSA9IDM7CisJZnJlcS0+bSA9IHpmaVdsYW5RdWVyeUZyZXF1ZW5jeShkZXYpOworCWZyZXEtPmUgPSAzOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnEsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQl1bmlvbiBpd3JlcV9kYXRhICp3cnEsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICB1OF90IFdsYW5Nb2RlOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwl1OF90IFdsYW5Nb2RlOwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgc3dpdGNoKHdycS0+bW9kZSkKLSAgICB7Ci0gICAgICAgIGNhc2UgSVdfTU9ERV9NQVNURVI6Ci0gICAgICAgICAgICBXbGFuTW9kZSA9IFpNX01PREVfQVA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJV19NT0RFX0lORlJBOgotICAgICAgICAgICAgV2xhbk1vZGUgPSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSVdfTU9ERV9BREhPQzoKLSAgICAgICAgICAgIFdsYW5Nb2RlID0gWk1fTU9ERV9JQlNTOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBXbGFuTW9kZSA9IFpNX01PREVfSUJTUzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKwlzd2l0Y2ggKHdycS0+bW9kZSkgeworCWNhc2UgSVdfTU9ERV9NQVNURVI6CisJCVdsYW5Nb2RlID0gWk1fTU9ERV9BUDsKKwkJYnJlYWs7CisJY2FzZSBJV19NT0RFX0lORlJBOgorCQlXbGFuTW9kZSA9IFpNX01PREVfSU5GUkFTVFJVQ1RVUkU7CisJCWJyZWFrOworCWNhc2UgSVdfTU9ERV9BREhPQzoKKwkJV2xhbk1vZGUgPSBaTV9NT0RFX0lCU1M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdsYW5Nb2RlID0gWk1fTU9ERV9JQlNTOworCQlicmVhazsKKwl9CiAKLSAgICB6ZmlXbGFuU2V0V2xhbk1vZGUoZGV2LFdsYW5Nb2RlKTsKLSAgICB6ZmlXbGFuRGlzYWJsZShkZXYsIDEpOwotICAgIHpmaVdsYW5FbmFibGUoZGV2KTsKKwl6ZmlXbGFuU2V0V2xhbk1vZGUoZGV2LCBXbGFuTW9kZSk7CisJemZpV2xhbkRpc2FibGUoZGV2LCAxKTsKKwl6ZmlXbGFuRW5hYmxlKGRldik7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfZ2l3bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIF9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKKwlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCV9fdTMyICptb2RlLCBjaGFyICpleHRyYSkKIHsKLSAgICB1bnNpZ25lZCBsb25nIGlycUZsYWc7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXVuc2lnbmVkIGxvbmcgaXJxRmxhZzsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwogCi0gICAgc3dpdGNoKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikpCi0gICAgewotICAgICAgICBjYXNlIFpNX01PREVfQVA6Ci0gICAgICAgICAgICAqbW9kZSA9IElXX01PREVfTUFTVEVSOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWk1fTU9ERV9JTkZSQVNUUlVDVFVSRToKLSAgICAgICAgICAgICptb2RlID0gSVdfTU9ERV9JTkZSQTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFpNX01PREVfSUJTUzoKLSAgICAgICAgICAgICptb2RlID0gSVdfTU9ERV9BREhPQzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgKm1vZGUgPSBJV19NT0RFX0FESE9DOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQorCXN3aXRjaCAoemZpV2xhblF1ZXJ5V2xhbk1vZGUoZGV2KSkgeworCWNhc2UgWk1fTU9ERV9BUDoKKwkJKm1vZGUgPSBJV19NT0RFX01BU1RFUjsKKwkJYnJlYWs7CisJY2FzZSBaTV9NT0RFX0lORlJBU1RSVUNUVVJFOgorCQkqbW9kZSA9IElXX01PREVfSU5GUkE7CisJCWJyZWFrOworCWNhc2UgWk1fTU9ERV9JQlNTOgorCQkqbW9kZSA9IElXX01PREVfQURIT0M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSptb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJYnJlYWs7CisJfQogCi0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfc2l3c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNzQzLDMzOCArNjg1LDM0MSBAQAogfQogCiBpbnQgdXNiZHJ2d2V4dF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7Ci0gICAgaW50IGksIHZhbDsKLSAgICAvL2ludCBudW1fYmFuZF9hOwotICAgIHUxNl90IGNoYW5uZWxzWzYwXTsKLSAgICB1MTZfdCBjaGFubmVsX251bTsKKwlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKKwlpbnQgaSwgdmFsOworCS8qIGludCBudW1fYmFuZF9hOyAqLworCXUxNl90IGNoYW5uZWxzWzYwXTsKKwl1MTZfdCBjaGFubmVsX251bTsKIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotI2lmIFdJUkVMRVNTX0VYVCA+IDkKLSAgICByYW5nZS0+dHhwb3dlcl9jYXBhID0gSVdfVFhQT1dfREJNOwotLy8gWFhYIHdoYXQgYWJvdXQgbWluL21heF9wbXAsIG1pbi9tYXhfcG10LCBldGMuCi0jZW5kaWYKKwkjaWYgV0lSRUxFU1NfRVhUID4gOQorCXJhbmdlLT50eHBvd2VyX2NhcGEgPSBJV19UWFBPV19EQk07CisJLyogWFhYIHdoYXQgYWJvdXQgbWluL21heF9wbXAsIG1pbi9tYXhfcG10LCBldGMuICovCisJI2VuZGlmCiAKLSNpZiBXSVJFTEVTU19FWFQgPiAxMAotICAgIHJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwotICAgIHJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDEzOworCSNpZiBXSVJFTEVTU19FWFQgPiAxMAorCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOworCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDEzOwogCi0gICAgcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVDsKLSAgICByYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKLSAgICByYW5nZS0+bWluX3JldHJ5ID0gMDsKLSAgICByYW5nZS0+bWF4X3JldHJ5ID0gMjU1OwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJUkVMRVNTX0VYVCA+IDEwICovCisJcmFuZ2UtPnJldHJ5X2NhcGEgPSBJV19SRVRSWV9MSU1JVDsKKwlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKKwlyYW5nZS0+bWluX3JldHJ5ID0gMDsKKwlyYW5nZS0+bWF4X3JldHJ5ID0gMjU1OworCSNlbmRpZiAgLyogV0lSRUxFU1NfRVhUID4gMTAgKi8KIAotICAgIGNoYW5uZWxfbnVtID0gemZpV2xhblF1ZXJ5QWxsb3dDaGFubmVscyhkZXYsIGNoYW5uZWxzKTsKKwljaGFubmVsX251bSA9IHpmaVdsYW5RdWVyeUFsbG93Q2hhbm5lbHMoZGV2LCBjaGFubmVscyk7CiAKLSAgICAvKiBHdXJhbnRlZSByZXBvcnRlZCBjaGFubmVsIG51bWJlcnMgaXMgbGVzcyBvciBlcXVhbCB0byBJV19NQVhfRlJFUVVFTkNJRVMgKi8KLSAgICBpZiAoY2hhbm5lbF9udW0gPiBJV19NQVhfRlJFUVVFTkNJRVMpCi0gICAgICAgIGNoYW5uZWxfbnVtID0gSVdfTUFYX0ZSRVFVRU5DSUVTOworCS8qIEd1cmFudGVlIHJlcG9ydGVkIGNoYW5uZWwgbnVtYmVycyBpcyBsZXNzCisJKiBvciBlcXVhbCB0byBJV19NQVhfRlJFUVVFTkNJRVMKKwkqLworCWlmIChjaGFubmVsX251bSA+IElXX01BWF9GUkVRVUVOQ0lFUykKKwkJY2hhbm5lbF9udW0gPSBJV19NQVhfRlJFUVVFTkNJRVM7CiAKLSAgICB2YWwgPSAwOworCXZhbCA9IDA7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgY2hhbm5lbF9udW07IGkrKykKLSAgICB7Ci0gICAgICAgIHJhbmdlLT5mcmVxW3ZhbF0uaSA9IHVzYmRydl9mcmVxMmNoYW4oY2hhbm5lbHNbaV0pOwotICAgICAgICByYW5nZS0+ZnJlcVt2YWxdLm0gPSBjaGFubmVsc1tpXTsKLSAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5lID0gNjsKLSAgICAgICAgdmFsKys7Ci0gICAgfQorCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsX251bTsgaSsrKSB7CisJCXJhbmdlLT5mcmVxW3ZhbF0uaSA9IHVzYmRydl9mcmVxMmNoYW4oY2hhbm5lbHNbaV0pOworCQlyYW5nZS0+ZnJlcVt2YWxdLm0gPSBjaGFubmVsc1tpXTsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5lID0gNjsKKwkJdmFsKys7CisJfQogCi0gICAgcmFuZ2UtPm51bV9jaGFubmVscyA9IGNoYW5uZWxfbnVtOwotICAgIHJhbmdlLT5udW1fZnJlcXVlbmN5ID0gY2hhbm5lbF9udW07CisJcmFuZ2UtPm51bV9jaGFubmVscyA9IGNoYW5uZWxfbnVtOworCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gY2hhbm5lbF9udW07CiAKLSNpZiAwCi0gICAgcmFuZ2UtPm51bV9jaGFubmVscyA9IDE0OyAvLyBPbmx5IDIuNEcKKwkjaWYgMAorCXJhbmdlLT5udW1fY2hhbm5lbHMgPSAxNDsgLyogT25seSAyLjRHICovCiAKLS8qIFhYWCBuZWVkIHRvIGZpbHRlciBhZ2FpbnN0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiAmfCBhY3RpdmUgc2V0ICovCi0gICAgdmFsID0gMDsKLSAgICBmb3IgKGkgPSAxOyBpIDw9IDE0OyBpKyspIC8vIEIsRyBCYW5kcwotICAgIHsKLSAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5pID0gaTsKLSAgICAgICAgaWYgKGkgPT0gMTQpCi0gICAgICAgICAgICAgIHJhbmdlLT5mcmVxW3ZhbF0ubSA9IDI0ODQwMDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5tID0gKDI0MTIrKGktMSkqNSkqMTAwMDsKLSAgICAgICAgcmFuZ2UtPmZyZXFbdmFsXS5lID0gMzsKLSAgICAgICAgdmFsKys7Ci0gICAgfQorCS8qIFhYWCBuZWVkIHRvIGZpbHRlciBhZ2FpbnN0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiAmfCBhY3RpdmUgc2V0ICovCisJdmFsID0gMDsKKwkvKiBCLEcgQmFuZHMgKi8KKwlmb3IgKGkgPSAxOyBpIDw9IDE0OyBpKyspIHsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5pID0gaTsKKwkJaWYgKGkgPT0gMTQpCisJCQlyYW5nZS0+ZnJlcVt2YWxdLm0gPSAyNDg0MDAwOworCQllbHNlCisJCQlyYW5nZS0+ZnJlcVt2YWxdLm0gPSAoMjQxMisoaS0xKSo1KSoxMDAwOworCQlyYW5nZS0+ZnJlcVt2YWxdLmUgPSAzOworCQl2YWwrKzsKKwl9CiAKLSAgICBudW1fYmFuZF9hID0gKElXX01BWF9GUkVRVUVOQ0lFUyAtIHZhbCk7CisJbnVtX2JhbmRfYSA9IChJV19NQVhfRlJFUVVFTkNJRVMgLSB2YWwpOworCS8qIEEgQmFuZHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2JhbmRfYTsgaSsrKSB7CisJCXJhbmdlLT5mcmVxW3ZhbF0uaSA9IGNoYW5uZWxfZnJlcXVlbmN5XzExQVsyICogaV07CisJCXJhbmdlLT5mcmVxW3ZhbF0ubSA9IGNoYW5uZWxfZnJlcXVlbmN5XzExQVsyICogaSArIDFdICogMTAwMDsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5lID0gMzsKKwkJdmFsKys7CisJfQorCS8qIE1JTU8gUmF0ZSBOb3QgRGVmaW5lZCBOb3cKKwkqIEZvciA4MDIuMTFhLCB0aGVyZSBhcmUgdG9vIG1vcmUgZnJlcXVlbmN5LgorCSogV2UgY2FuJ3QgcmV0dXJuIHRoZW0gYWxsLgorCSovCisJcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSB2YWw7CisJI2VuZGlmCiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2JhbmRfYTsgaSsrKSAvLyBBIEJhbmRzCi0gICAgewotICAgICAgICByYW5nZS0+ZnJlcVt2YWxdLmkgPSBjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbMiAqIGldOwotICAgICAgICByYW5nZS0+ZnJlcVt2YWxdLm0gPSBjaGFubmVsX2ZyZXF1ZW5jeV8xMUFbMiAqIGkgKyAxXSAqIDEwMDA7Ci0gICAgICAgIHJhbmdlLT5mcmVxW3ZhbF0uZSA9IDM7Ci0gICAgICAgIHZhbCsrOwotICAgIH0KLSAgICAvLyBNSU1PIFJhdGUgTm90IERlZmluZWQgTm93Ci0gICAgLy9Gb3IgODAyLjExYSwgdGhlcmUgYXJlIHRvbyBtb3JlIGZyZXF1ZW5jeS4gV2UgY2FuJ3QgcmV0dXJuIHRoZW0gYWxsCi0gICAgcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSB2YWw7Ci0jZW5kaWYKKwkvKiBNYXggb2YgL3Byb2MvbmV0L3dpcmVsZXNzICovCisJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7ICAvKiA/PyAgOTI7ICovCisJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMTU0OyAvKiA/PyAqLworCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDE1NDsgLyogPz8gKi8KKwlyYW5nZS0+c2Vuc2l0aXZpdHkgPSAzOyAgICAgIC8qID8/ICovCiAKLS8qIE1heCBvZiAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KLSAgICByYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsgLy8/PyAgICAgICAgICAgICAgICAgIC8vOTI7Ci0gICAgcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMTU0OyAvLz8/Ci0gICAgcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMTU0OyAvLz8/Ci0gICAgcmFuZ2UtPnNlbnNpdGl2aXR5ID0gMzsgLy8/PworCS8qIFhYWCB0aGVzZSBuZWVkIHRvIGJlIG5zZC1zcGVjaWZpYyEgKi8KKwlyYW5nZS0+bWluX3J0cyA9IDA7CisJcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OworCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKKwlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OworCXJhbmdlLT5tYXhfZW5jb2RpbmdfdG9rZW5zID0gNCAvKiBOVU1fV0VQS0VZUyA/PyAqLzsKKwlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsgLyogPz8gKi8KIAotLy8gWFhYIHRoZXNlIG5lZWQgdG8gYmUgbnNkLXNwZWNpZmljIQotICAgIHJhbmdlLT5taW5fcnRzID0gMDsKLSAgICByYW5nZS0+bWF4X3J0cyA9IDIzNDc7Ci0gICAgcmFuZ2UtPm1pbl9mcmFnID0gMjU2OwotICAgIHJhbmdlLT5tYXhfZnJhZyA9IDIzNDY7Ci0gICAgcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSA0LypOVU1fV0VQS0VZUyovOyAvLz8/Ci0gICAgcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7IC8vPz8KKwlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7IC8qID8/IFdFUCBLZXkgRW5jb2RpbmcgU2l6ZSAqLworCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7IC8qID8/ICovCiAKLSAgICByYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IDU7IC8vPz8gICAgICAgICAgICAgICAvL1dFUCBLZXkgRW5jb2RpbmcgU2l6ZQotICAgIHJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7Ly8/PworCS8qIFhYWCB3aGF0IGFib3V0IG51bV9iaXRyYXRlcy90aHJvdWdocHV0PyAqLworCXJhbmdlLT5udW1fYml0cmF0ZXMgPSAwOyAvKiA/PyAqLwogCi0vLyBYWFggd2hhdCBhYm91dCBudW1fYml0cmF0ZXMvdGhyb3VnaHB1dD8KLSAgICByYW5nZS0+bnVtX2JpdHJhdGVzID0gMDsgLy8/PworCS8qIGVzdGltYXRlZCBtYXggdGhyb3VnaHB1dAorCSogWFhYIG5lZWQgdG8gY2FwIGl0IGlmIHdlJ3JlIHJ1bm5pbmcgYXQgfjJNYnBzLi4KKwkqLwogCi0vKiBlc3RpbWF0ZWQgbWF4IHRocm91Z2hwdXQgKi8KLS8vIFhYWCBuZWVkIHRvIGNhcCBpdCBpZiB3ZSdyZSBydW5uaW5nIGF0IH4yTWJwcy4uCisJcmFuZ2UtPnRocm91Z2hwdXQgPSAzMDAwMDAwMDA7CiAKLSAgICByYW5nZS0+dGhyb3VnaHB1dCA9IDMwMDAwMDAwMDsKLQotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKk1hY0FkZHIsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3Qgc29ja2FkZHIgKk1hY0FkZHIsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAoemZpV2xhblF1ZXJ5V2xhbk1vZGUoZGV2KSA9PSBaTV9NT0RFX0FQKSAvLyBBUCBNb2RlCi0gICAgICAgIHpmaVdsYW5TZXRNYWNBZGRyZXNzKGRldiwodTE2X3QgKikmTWFjQWRkci0+c2FfZGF0YVswXSk7Ci0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU1RBIE1vZGUKLSAgICAgICAgemZpV2xhblNldEJzc2lkKGRldiwmTWFjQWRkci0+c2FfZGF0YVswXSk7CisJaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgPT0gWk1fTU9ERV9BUCkgeworCQkvKiBBUCBNb2RlICovCisJCXpmaVdsYW5TZXRNYWNBZGRyZXNzKGRldiwgKHUxNl90ICopJk1hY0FkZHItPnNhX2RhdGFbMF0pOworCX0gZWxzZSB7CisJCS8qIFNUQSBNb2RlICovCisJCXpmaVdsYW5TZXRCc3NpZChkZXYsICZNYWNBZGRyLT5zYV9kYXRhWzBdKTsKKwl9CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpCi0gICAgewotICAgICAgICAvL3U4X3Qgd3BhaWVMZW4sd3BhaWVbODBdOwotICAgICAgICAvL3pmaVdsYW5RdWVyeVdwYUllKGRldiwgd3BhaWUsICZ3cGFpZUxlbik7Ci0gICAgICAgIHpmaVdsYW5EaXNhYmxlKGRldiwgMCk7Ci0gICAgICAgIHpmaVdsYW5FbmFibGUoZGV2KTsKLSAgICAgICAgLy9pZiAod3BhaWVMZW4gPiAyKQotICAgICAgICAvLyAgICB6ZmlXbGFuU2V0V3BhSWUoZGV2LCB3cGFpZSwgd3BhaWVMZW4pOwotICAgIH0KKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpIHsKKwkJLyogdThfdCB3cGFpZUxlbix3cGFpZVs4MF07ICovCisJCS8qIHpmaVdsYW5RdWVyeVdwYUllKGRldiwgd3BhaWUsICZ3cGFpZUxlbik7ICovCisJCXpmaVdsYW5EaXNhYmxlKGRldiwgMCk7CisJCXpmaVdsYW5FbmFibGUoZGV2KTsKKwkJLyogaWYgKHdwYWllTGVuID4gMikgKi8KKwkJLyogemZpV2xhblNldFdwYUllKGRldiwgd3BhaWUsIHdwYWllTGVuKTsgKi8KKwl9CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfZ2l3YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKk1hY0FkZHIsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3Qgc29ja2FkZHIgKk1hY0FkZHIsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBpZiAoemZpV2xhblF1ZXJ5V2xhbk1vZGUoZGV2KSA9PSBaTV9NT0RFX0FQKSAvLyBBUCBNb2RlCi0gICAgICAgIHpmaVdsYW5RdWVyeU1hY0FkZHJlc3MoZGV2LCAmTWFjQWRkci0+c2FfZGF0YVswXSk7Ci0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU1RBIE1vZGUKLSAgICB7Ci0gICAgICAgIGlmIChtYWNwLT5hZGFwdGVyU3RhdGUgPT0gWk1fU1RBVFVTX01FRElBX0NPTk5FQ1QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHpmaVdsYW5RdWVyeUJzc2lkKGRldiwgJk1hY0FkZHItPnNhX2RhdGFbMF0pOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdThfdCB6ZXJvX2FkZHJbNl0gPSB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKLSAgICAgICAgICAgIG1lbWNweSgmTWFjQWRkci0+c2FfZGF0YVswXSwgemVyb19hZGRyLCBzaXplb2YoemVyb19hZGRyKSk7Ci0gICAgICAgIH0KLSAgICB9CisJaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgPT0gWk1fTU9ERV9BUCkgeworCQkvKiBBUCBNb2RlICovCisJCXpmaVdsYW5RdWVyeU1hY0FkZHJlc3MoZGV2LCAmTWFjQWRkci0+c2FfZGF0YVswXSk7CisJfSBlbHNlIHsKKwkJLyogU1RBIE1vZGUgKi8KKwkJaWYgKG1hY3AtPmFkYXB0ZXJTdGF0ZSA9PSBaTV9TVEFUVVNfTUVESUFfQ09OTkVDVCkgeworCQkJemZpV2xhblF1ZXJ5QnNzaWQoZGV2LCAmTWFjQWRkci0+c2FfZGF0YVswXSk7CisJCX0gZWxzZSB7CisJCQl1OF90IHplcm9fYWRkcls2XSA9IHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkJCQkJMHgwMCwgMHgwMCB9OworCQkJbWVtY3B5KCZNYWNBZGRyLT5zYV9kYXRhWzBdLCB6ZXJvX2FkZHIsCisJCQkJCQkJc2l6ZW9mKHplcm9fYWRkcikpOworCQl9CisJfQogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X2l3YXBsaXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKIHsKLSAgICAvL0Rvbid0IGtub3cgaG93IHRvIGRvIHlldC0tQ1dZYW5nKCspCi0gICAgcmV0dXJuIDA7CisJLyogRG9uJ3Qga25vdyBob3cgdG8gZG8geWV0LS1DV1lhbmcoKykgKi8KKwlyZXR1cm4gMDsKIAogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCisJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgcHJpbnRrKCJDV1kgLSB1c2JkcnZ3ZXh0X3Npd3NjYW5cbiIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIkNXWSAtIHVzYmRydndleHRfc2l3c2NhblxuIik7CiAKLSAgICB6ZmlXbGFuU2NhbihkZXYpOworCXpmaVdsYW5TY2FuKGRldik7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfZ2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIC8vc3RydWN0IHpzV2xhbkRldiogd2QgPSAoc3RydWN0IHpzV2xhbkRldiopIHptd193bGFuX2RldihkZXYpOwotICAgIGNoYXIgKmN1cnJlbnRfZXYgPSBleHRyYTsKLSAgICBjaGFyICplbmRfYnVmOwotICAgIGludCBpOwotICAgIC8vc3RydWN0IHpzQnNzTGlzdCBCc3NMaXN0OwotICAgIHN0cnVjdCB6c0Jzc0xpc3RWMSAqcEJzc0xpc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgenNCc3NMaXN0VjEpLCBHRlBfS0VSTkVMKTsKLSAgICAvL0Jzc0xpc3QgPSB3ZC0+c3RhLnBCc3NMaXN0OwotICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwkvKiBzdHJ1Y3QgenNXbGFuRGV2KiB3ZCA9IChzdHJ1Y3QgenNXbGFuRGV2Kikgem13X3dsYW5fZGV2KGRldik7ICovCisJY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOworCWNoYXIgKmVuZF9idWY7CisJaW50IGk7CisJLyogc3RydWN0IHpzQnNzTGlzdCBCc3NMaXN0OyAqLworCXN0cnVjdCB6c0Jzc0xpc3RWMSAqcEJzc0xpc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgenNCc3NMaXN0VjEpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwkvKiBCc3NMaXN0ID0gd2QtPnN0YS5wQnNzTGlzdDsgKi8KKwkvKiB6bXdfZ2V0X3dsYW5fZGV2KGRldik7ICovCiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBpZiAoZGF0YS0+bGVuZ3RoID09IDApCi0gICAgewotICAgICAgIGVuZF9idWYgPSBleHRyYSArIElXX1NDQU5fTUFYX0RBVEE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGVuZF9idWYgPSBleHRyYSArIGRhdGEtPmxlbmd0aDsKLSAgICB9CisJaWYgKGRhdGEtPmxlbmd0aCA9PSAwKQorCQllbmRfYnVmID0gZXh0cmEgKyBJV19TQ0FOX01BWF9EQVRBOworCWVsc2UKKwkJZW5kX2J1ZiA9IGV4dHJhICsgZGF0YS0+bGVuZ3RoOwogCi0gICAgcHJpbnRrKCJnaXdzY2FuIC0gUmVwb3J0IFNjYW4gUmVzdWx0c1xuIik7Ci0gICAgLy9wcmludGsoImdpd3NjYW4gLSBCc3NMaXN0IFNyZXVjdHVyZSBMZW4gOiAlZFxuIiwgc2l6ZW9mKEJzc0xpc3QpKTsKLSAgICAvL3ByaW50aygiZ2l3c2NhbiAtIEJzc0xpc3QgQ291bnQgOiAlZFxuIiwgd2QtPnN0YS5wQnNzTGlzdC0+YnNzQ291bnQpOwotICAgIC8vcHJpbnRrKCJnaXdzY2FuIC0gVXBkYXRlQnNzTGlzdCBDb3VudCA6ICVkXG4iLCB3ZC0+c3RhLnBVcGRhdGVCc3NMaXN0LT5ic3NDb3VudCk7Ci0gICAgemZpV2xhblF1ZXJ5QnNzTGlzdFYxKGRldiwgcEJzc0xpc3QpOwotICAgIC8vemZpV2xhblF1ZXJ5QnNzTGlzdChkZXYsICZCc3NMaXN0KTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJnaXdzY2FuIC0gUmVwb3J0IFNjYW4gUmVzdWx0c1xuIik7CisJLyogcHJpbnRrKCJnaXdzY2FuIC0gQnNzTGlzdCBTcmV1Y3R1cmUgTGVuIDogJWRcbiIsIHNpemVvZihCc3NMaXN0KSk7CisJKiBwcmludGsoImdpd3NjYW4gLSBCc3NMaXN0IENvdW50IDogJWRcbiIsCisJKiB3ZC0+c3RhLnBCc3NMaXN0LT5ic3NDb3VudCk7CisJKiBwcmludGsoImdpd3NjYW4gLSBVcGRhdGVCc3NMaXN0IENvdW50IDogJWRcbiIsCisJKiB3ZC0+c3RhLnBVcGRhdGVCc3NMaXN0LT5ic3NDb3VudCk7CisJKi8KKwl6ZmlXbGFuUXVlcnlCc3NMaXN0VjEoZGV2LCBwQnNzTGlzdCk7CisJLyogemZpV2xhblF1ZXJ5QnNzTGlzdChkZXYsICZCc3NMaXN0KTsgKi8KIAotLyogUmVhZCBhbmQgcGFyc2UgYWxsIGVudHJpZXMgKi8KLSAgICBwcmludGsoImdpd3NjYW4gLSBwQnNzTGlzdC0+YnNzQ291bnQgOiAlZFxuIiwgcEJzc0xpc3QtPmJzc0NvdW50KTsKLSAgICAvL3ByaW50aygiZ2l3c2NhbiAtIEJzc0xpc3QuYnNzQ291bnQgOiAlZFxuIiwgQnNzTGlzdC5ic3NDb3VudCk7CisJLyogUmVhZCBhbmQgcGFyc2UgYWxsIGVudHJpZXMgKi8KKwlwcmludGsoS0VSTl9XQVJOSU5HICJnaXdzY2FuIC0gcEJzc0xpc3QtPmJzc0NvdW50IDogJWRcbiIsCisJCQkJCQlwQnNzTGlzdC0+YnNzQ291bnQpOworCS8qIHByaW50aygiZ2l3c2NhbiAtIEJzc0xpc3QuYnNzQ291bnQgOiAlZFxuIiwgQnNzTGlzdC5ic3NDb3VudCk7ICovCiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgcEJzc0xpc3QtPmJzc0NvdW50OyBpKyspCi0gICAgewotLyogVHJhbnNsYXRlIHRvIFdFIGZvcm1hdCB0aGlzIGVudHJ5ICovCi0gICAgICAgIC8vY3VycmVudF9ldiA9IHVzYmRydl90cmFuc2xhdGVfc2NhbihkZXYsIGluZm8sIGN1cnJlbnRfZXYsCi0gICAgICAgIC8vICAgIGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQSwgJnBCc3NMaXN0LT5ic3NJbmZvW2ldKTsKLSAgICAgICAgY3VycmVudF9ldiA9IHVzYmRydl90cmFuc2xhdGVfc2NhbihkZXYsIGluZm8sIGN1cnJlbnRfZXYsCi0gICAgICAgICAgICBlbmRfYnVmLCAmcEJzc0xpc3QtPmJzc0luZm9baV0pOworCWZvciAoaSA9IDA7IGkgPCBwQnNzTGlzdC0+YnNzQ291bnQ7IGkrKykgeworCQkvKiBUcmFuc2xhdGUgdG8gV0UgZm9ybWF0IHRoaXMgZW50cnkKKwkJKiBjdXJyZW50X2V2ID0gdXNiZHJ2X3RyYW5zbGF0ZV9zY2FuKGRldiwgaW5mbywgY3VycmVudF9ldiwKKwkJKiBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsICZwQnNzTGlzdC0+YnNzSW5mb1tpXSk7CisJCSovCisJCWN1cnJlbnRfZXYgPSB1c2JkcnZfdHJhbnNsYXRlX3NjYW4oZGV2LCBpbmZvLCBjdXJyZW50X2V2LAorCQkJCQllbmRfYnVmLCAmcEJzc0xpc3QtPmJzc0luZm9baV0pOwogCi0jaWYgV0lSRUxFU1NfRVhUID4gMTYKLSAgICAgICAgaWYgKGN1cnJlbnRfZXYgPT0gZW5kX2J1ZikKLSAgICAgICAgewotICAgICAgICAgICAga2ZyZWUocEJzc0xpc3QpOwotICAgICAgICAgICAgZGF0YS0+bGVuZ3RoID0gY3VycmVudF9ldiAtIGV4dHJhOwotICAgICAgICAgICAgcmV0dXJuIC1FMkJJRzsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQorCQkjaWYgV0lSRUxFU1NfRVhUID4gMTYKKwkJaWYgKGN1cnJlbnRfZXYgPT0gZW5kX2J1ZikgeworCQkJa2ZyZWUocEJzc0xpc3QpOworCQkJZGF0YS0+bGVuZ3RoID0gY3VycmVudF9ldiAtIGV4dHJhOworCQkJcmV0dXJuIC1FMkJJRzsKKwkJfQorCQkjZW5kaWYKKwl9CiAKLS8qIExlbmd0aCBvZiBkYXRhICovCi0gICAgZGF0YS0+bGVuZ3RoID0gKGN1cnJlbnRfZXYgLSBleHRyYSk7Ci0gICAgZGF0YS0+ZmxhZ3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRvZG8gKi8KKwkvKiBMZW5ndGggb2YgZGF0YSAqLworCWRhdGEtPmxlbmd0aCA9IChjdXJyZW50X2V2IC0gZXh0cmEpOworCWRhdGEtPmZsYWdzID0gMDsgICAvKiB0b2RvICovCiAKLSAgICBrZnJlZShwQnNzTGlzdCk7CisJa2ZyZWUocEJzc0xpc3QpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd2Vzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BvaW50ICplc3NpZCwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wb2ludCAqZXNzaWQsIGNoYXIgKmV4dHJhKQogewotICAgIGNoYXIgRXNzaWRCdWZbSVdfRVNTSURfTUFYX1NJWkUrMV07Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCWNoYXIgRXNzaWRCdWZbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAoZXNzaWQtPmZsYWdzID09IDEpCi0gICAgewotICAgICAgICBpZiAoZXNzaWQtPmxlbmd0aCA+IChJV19FU1NJRF9NQVhfU0laRSsxKSkKLSAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisJaWYgKGVzc2lkLT5mbGFncyA9PSAxKSB7CisJCWlmIChlc3NpZC0+bGVuZ3RoID4gKElXX0VTU0lEX01BWF9TSVpFICsgMSkpCisJCQlyZXR1cm4gLUUyQklHOwogCi0gICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmRXNzaWRCdWYsIGVzc2lkLT5wb2ludGVyLCBlc3NpZC0+bGVuZ3RoKSkKLSAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCQlpZiAoY29weV9mcm9tX3VzZXIoJkVzc2lkQnVmLCBlc3NpZC0+cG9pbnRlciwgZXNzaWQtPmxlbmd0aCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAotICAgICAgICBFc3NpZEJ1Zltlc3NpZC0+bGVuZ3RoXSA9ICdcMCc7Ci0gICAgICAgIC8vcHJpbnRrKCJzaXdlc3NpZCAtIFNldCBFc3NpZCA6ICVzXG4iLEVzc2lkQnVmKTsKLSAgICAgICAgLy9wcmludGsoInNpd2Vzc2lkIC0gRXNzaWQgTGVuIDogJWRcbiIsZXNzaWQtPmxlbmd0aCk7Ci0gICAgICAgIC8vcHJpbnRrKCJzaXdlc3NpZCAtIEVzc2lkIEZsYWcgOiAleFxuIixlc3NpZC0+ZmxhZ3MpOwotICAgICAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHpmaVdsYW5TZXRTU0lEKGRldiwgRXNzaWRCdWYsIHN0cmxlbihFc3NpZEJ1ZikpOwotICAgICAgICAgICAgemZpV2xhblNldEZyZXF1ZW5jeShkZXYsIHpmaVdsYW5RdWVyeUZyZXF1ZW5jeShkZXYpLCBGQUxTRSk7Ci0gICAgICAgICAgICB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgemZpV2xhblF1ZXJ5RW5jcnlNb2RlKGRldikpOwotICAgICAgICAgICAgLy91OF90IHdwYWllTGVuLHdwYWllWzUwXTsKLSAgICAgICAgICAgIC8vemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCB3cGFpZSwgJndwYWllTGVuKTsKLSAgICAgICAgICAgIHpmaVdsYW5EaXNhYmxlKGRldiwgMCk7Ci0gICAgICAgICAgICB6ZmlXbGFuRW5hYmxlKGRldik7Ci0gICAgICAgICAgICAvL2lmICh3cGFpZUxlbiA+IDIpCi0gICAgICAgICAgICAvLyAgICB6ZmlXbGFuU2V0V3BhSWUoZGV2LCB3cGFpZSwgd3BhaWVMZW4pOwotICAgICAgICB9Ci0gICAgfQorCQlFc3NpZEJ1Zltlc3NpZC0+bGVuZ3RoXSA9ICdcMCc7CisJCS8qIHByaW50aygic2l3ZXNzaWQgLSBTZXQgRXNzaWQgOiAlc1xuIixFc3NpZEJ1Zik7ICovCisJCS8qIHByaW50aygic2l3ZXNzaWQgLSBFc3NpZCBMZW4gOiAlZFxuIixlc3NpZC0+bGVuZ3RoKTsgKi8KKwkJLyogcHJpbnRrKCJzaXdlc3NpZCAtIEVzc2lkIEZsYWcgOiAleFxuIixlc3NpZC0+ZmxhZ3MpOyAqLworCQlpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpIHsKKwkJCXpmaVdsYW5TZXRTU0lEKGRldiwgRXNzaWRCdWYsIHN0cmxlbihFc3NpZEJ1ZikpOworCQkJemZpV2xhblNldEZyZXF1ZW5jeShkZXYsIHpmaVdsYW5RdWVyeUZyZXF1ZW5jeShkZXYpLAorCQkJCQkJRkFMU0UpOworCQkJemZpV2xhblNldEVuY3J5TW9kZShkZXYsIHpmaVdsYW5RdWVyeUVuY3J5TW9kZShkZXYpKTsKKwkJCS8qIHU4X3Qgd3BhaWVMZW4sd3BhaWVbNTBdOyAqLworCQkJLyogemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCB3cGFpZSwgJndwYWllTGVuKTsgKi8KKwkJCXpmaVdsYW5EaXNhYmxlKGRldiwgMCk7CisJCQl6ZmlXbGFuRW5hYmxlKGRldik7CisJCQkvKiBpZiAod3BhaWVMZW4gPiAyKSAqLworCQkJLyogemZpV2xhblNldFdwYUllKGRldiwgd3BhaWUsIHdwYWllTGVuKTsgKi8KKwkJfQorCX0KIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9naXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZXNzaWQsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcG9pbnQgKmVzc2lkLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgdThfdCBFc3NpZExlbjsKLSAgICBjaGFyIEVzc2lkQnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdOwotICAgIGludCBzc2lkX2xlbjsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJdThfdCBFc3NpZExlbjsKKwljaGFyIEVzc2lkQnVmW0lXX0VTU0lEX01BWF9TSVpFICsgMV07CisJaW50IHNzaWRfbGVuOwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgemZpV2xhblF1ZXJ5U1NJRChkZXYsICZFc3NpZEJ1ZlswXSwgJkVzc2lkTGVuKTsKKwl6ZmlXbGFuUXVlcnlTU0lEKGRldiwgJkVzc2lkQnVmWzBdLCAmRXNzaWRMZW4pOwogCi0gICAgLyogQ29udmVydCB0eXBlIGZyb20gdW5zaWduZWQgY2hhciB0byBjaGFyICovCi0gICAgc3NpZF9sZW4gPSAoaW50KUVzc2lkTGVuOworCS8qIENvbnZlcnQgdHlwZSBmcm9tIHVuc2lnbmVkIGNoYXIgdG8gY2hhciAqLworCXNzaWRfbGVuID0gKGludClFc3NpZExlbjsKIAotICAgIC8qIE1ha2Ugc3VyZSB0aGUgZXNzaWQgbGVuZ3RoIGlzIG5vdCBncmVhdGVyIHRoYW4gSVdfRVNTSURfTUFYX1NJWkUgKi8KLSAgICBpZiAoc3NpZF9sZW4gPiBJV19FU1NJRF9NQVhfU0laRSkKLSAgICAgICAgc3NpZF9sZW4gPSBJV19FU1NJRF9NQVhfU0laRTsKKwkvKiBNYWtlIHN1cmUgdGhlIGVzc2lkIGxlbmd0aCBpcyBub3QgZ3JlYXRlciB0aGFuIElXX0VTU0lEX01BWF9TSVpFICovCisJaWYgKHNzaWRfbGVuID4gSVdfRVNTSURfTUFYX1NJWkUpCisJCXNzaWRfbGVuID0gSVdfRVNTSURfTUFYX1NJWkU7CiAKLSAgICBFc3NpZEJ1Zltzc2lkX2xlbl0gPSAnXDAnOworCUVzc2lkQnVmW3NzaWRfbGVuXSA9ICdcMCc7CiAKLSAgICBlc3NpZC0+ZmxhZ3MgPSAxOwotICAgIGVzc2lkLT5sZW5ndGggPSBzdHJsZW4oRXNzaWRCdWYpOworCWVzc2lkLT5mbGFncyA9IDE7CisJZXNzaWQtPmxlbmd0aCA9IHN0cmxlbihFc3NpZEJ1Zik7CiAKLSAgICBtZW1jcHkoZXh0cmEsIEVzc2lkQnVmLCBlc3NpZC0+bGVuZ3RoKTsKLSAgICAvLyB3aXJlbGVzcy5jIGluIEtlcm5lbCB3b3VsZCBoYW5kbGUgY29weV90b191c2VyIC0tIGxpbmUgNjc5Ci0gICAgLyppZiAoZXNzaWQtPnBvaW50ZXIpCi0gICAgewotICAgICAgICBpZiAoIGNvcHlfdG9fdXNlcihlc3NpZC0+cG9pbnRlciwgRXNzaWRCdWYsIGVzc2lkLT5sZW5ndGgpICkKLSAgICAgICAgewotICAgICAgICAgICAgcHJpbnRrKCJnaXdlc3NpZCAtIGNvcHlfdG9fdXNlciBGYWlsXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICB9Ci0gICAgfSovCisJbWVtY3B5KGV4dHJhLCBFc3NpZEJ1ZiwgZXNzaWQtPmxlbmd0aCk7CisJLyogd2lyZWxlc3MuYyBpbiBLZXJuZWwgd291bGQgaGFuZGxlIGNvcHlfdG9fdXNlciAtLSBsaW5lIDY3OSAqLworCS8qIGlmIChlc3NpZC0+cG9pbnRlcikgeworCSogaWYgKGNvcHlfdG9fdXNlcihlc3NpZC0+cG9pbnRlciwgRXNzaWRCdWYsIGVzc2lkLT5sZW5ndGgpKSB7CisJKiBwcmludGsoImdpd2Vzc2lkIC0gY29weV90b191c2VyIEZhaWxcbiIpOworCSogcmV0dXJuIC1FRkFVTFQ7CisJKiB9CisJKiB9CisJKi8KIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXduaWNrbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqbmlja25hbWUpCiB7Ci0gICAgLy9FeGlzdCBidXQganVuay0tQ1dZYW5nKCspCisJLyogRXhpc3QgYnV0IGp1bmstLUNXWWFuZygrKSAqLwogCXJldHVybiAwOwogfQogCkBAIC0xMDgyLDE4MiArMTAyNywxODAgQEAKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKm5pY2tuYW1lKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICB1OF90IEVzc2lkTGVuOwotICAgIGNoYXIgRXNzaWRCdWZbSVdfRVNTSURfTUFYX1NJWkUrMV07CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXU4X3QgRXNzaWRMZW47CisJY2hhciBFc3NpZEJ1ZltJV19FU1NJRF9NQVhfU0laRSArIDFdOwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgemZpV2xhblF1ZXJ5U1NJRChkZXYsICZFc3NpZEJ1ZlswXSwgJkVzc2lkTGVuKTsKLSAgICBFc3NpZEJ1ZltFc3NpZExlbl0gPSAwOworCXpmaVdsYW5RdWVyeVNTSUQoZGV2LCAmRXNzaWRCdWZbMF0sICZFc3NpZExlbik7CisJRXNzaWRCdWZbRXNzaWRMZW5dID0gMDsKIAotICAgIGRhdGEtPmZsYWdzID0gMTsKLSAgICBkYXRhLT5sZW5ndGggPSBzdHJsZW4oRXNzaWRCdWYpOworCWRhdGEtPmZsYWdzID0gMTsKKwlkYXRhLT5sZW5ndGggPSBzdHJsZW4oRXNzaWRCdWYpOwogCi0gICAgbWVtY3B5KG5pY2tuYW1lLCBFc3NpZEJ1ZiwgZGF0YS0+bGVuZ3RoKTsKKwltZW1jcHkobmlja25hbWUsIEVzc2lkQnVmLCBkYXRhLT5sZW5ndGgpOwogCiAJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZycSwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wYXJhbSAqZnJxLCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgLy9BcnJheSB0byBEZWZpbmUgUmF0ZSBOdW1iZXIgdGhhdCBTZW5kIHRvIERyaXZlcgotICAgIHUxNl90IHpjSW5kZXh0b1JhdGVCR1sxNl0gPSB7MTAwMCwgMjAwMCwgNTUwMCwgMTEwMDAsIDAsIDAsIDAsIDAsIDQ4MDAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0MDAwLCAxMjAwMCwgNjAwMCwgNTQwMDAsIDM2MDAwLCAxODAwMCwgOTAwMH07Ci0gICAgdTE2X3QgemNSYXRlVG9NQ1NbXSA9IHsweGZmLCAwLCAxLCAyLCAzLCAweGIsIDB4ZiwgMHhhLCAweGUsIDB4OSwgMHhkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4LCAweGN9OwotICAgIHU4X3QgaSxSYXRlSW5kZXggPSA0OwotICAgIHUxNl90IFJhdGVLYnBzOworCS8qIEFycmF5IHRvIERlZmluZSBSYXRlIE51bWJlciB0aGF0IFNlbmQgdG8gRHJpdmVyICovCisJdTE2X3QgemNJbmRleHRvUmF0ZUJHWzE2XSA9IHsxMDAwLCAyMDAwLCA1NTAwLCAxMTAwMCwgMCwgMCwgMCwgMCwKKwkJCTQ4MDAwLCAyNDAwMCwgMTIwMDAsIDYwMDAsIDU0MDAwLCAzNjAwMCwgMTgwMDAsIDkwMDB9OworCXUxNl90IHpjUmF0ZVRvTUNTW10gPSB7MHhmZiwgMCwgMSwgMiwgMywgMHhiLCAweGYsIDB4YSwgMHhlLCAweDksIDB4ZCwKKwkJCQkweDgsIDB4Y307CisJdThfdCBpLCBSYXRlSW5kZXggPSA0OworCXUxNl90IFJhdGVLYnBzOwogCi0gICAgLy9wcmludGsoImZycS0+ZGlzYWJsZWQgOiAweCV4XG4iLGZycS0+ZGlzYWJsZWQpOwotICAgIC8vcHJpbnRrKCJmcnEtPnZhbHVlIDogMHgleFxuIixmcnEtPnZhbHVlKTsKKwkvKiBwcmludGsoImZycS0+ZGlzYWJsZWQgOiAweCV4XG4iLGZycS0+ZGlzYWJsZWQpOyAqLworCS8qIHByaW50aygiZnJxLT52YWx1ZSA6IDB4JXhcbiIsZnJxLT52YWx1ZSk7ICovCiAKLSAgICBSYXRlS2JwcyA9IGZycS0+dmFsdWUgLyAxMDAwOwotICAgIC8vcHJpbnRrKCJSYXRlS2JwcyA6ICVkXG4iLCBSYXRlS2Jwcyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0gICAgewotICAgICAgICBpZiAoUmF0ZUticHMgPT0gemNJbmRleHRvUmF0ZUJHW2ldKQotICAgICAgICAgICAgUmF0ZUluZGV4ID0gaTsKLSAgICB9Ci0gICAgaWYgKHpjSW5kZXh0b1JhdGVCR1tSYXRlSW5kZXhdID09IDApCi0gICAgICAgIFJhdGVJbmRleCA9IDB4ZmY7Ci0gICAgLy9wcmludGsoIlJhdGVJbmRleCA6ICV4XG4iLCBSYXRlSW5kZXgpOwotICAgIGZvciAoaSA9IDA7IGkgPCAxMzsgaSsrKQotICAgICAgICBpZiAoUmF0ZUluZGV4ID09IHpjUmF0ZVRvTUNTW2ldKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgLy9wcmludGsoIkluZGV4IDogJXhcbiIsIGkpOwotICAgIGlmIChSYXRlS2JwcyA9PSA2NTAwMCkKLSAgICB7Ci0gICAgICAgIFJhdGVJbmRleCA9IDIwOwotICAgICAgICBwcmludGsoIlJhdGVJbmRleCA6ICVkXG4iLCBSYXRlSW5kZXgpOwotICAgIH0KLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpCi0gICAgewotICAgICAgICB6ZmlXbGFuU2V0VHhSYXRlKGRldiwgaSk7Ci0gICAgICAgIC8vemZpV2xhbkRpc2FibGUoZGV2KTsKLSAgICAgICAgLy96ZmlXbGFuRW5hYmxlKGRldik7Ci0gICAgfQorCVJhdGVLYnBzID0gZnJxLT52YWx1ZSAvIDEwMDA7CisJLyogcHJpbnRrKCJSYXRlS2JwcyA6ICVkXG4iLCBSYXRlS2Jwcyk7ICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJaWYgKFJhdGVLYnBzID09IHpjSW5kZXh0b1JhdGVCR1tpXSkKKwkJCVJhdGVJbmRleCA9IGk7CisJfQogCi0gICAgcmV0dXJuIDA7CisJaWYgKHpjSW5kZXh0b1JhdGVCR1tSYXRlSW5kZXhdID09IDApCisJCVJhdGVJbmRleCA9IDB4ZmY7CisJLyogcHJpbnRrKCJSYXRlSW5kZXggOiAleFxuIiwgUmF0ZUluZGV4KTsgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykKKwkJaWYgKFJhdGVJbmRleCA9PSB6Y1JhdGVUb01DU1tpXSkKKwkJCWJyZWFrOworCS8qIHByaW50aygiSW5kZXggOiAleFxuIiwgaSk7ICovCisJaWYgKFJhdGVLYnBzID09IDY1MDAwKSB7CisJCVJhdGVJbmRleCA9IDIwOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSYXRlSW5kZXggOiAlZFxuIiwgUmF0ZUluZGV4KTsKKwl9CisKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpIHsKKwkJemZpV2xhblNldFR4UmF0ZShkZXYsIGkpOworCQkvKiB6ZmlXbGFuRGlzYWJsZShkZXYpOyAqLworCQkvKiB6ZmlXbGFuRW5hYmxlKGRldik7ICovCisJfQorCisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X2dpd3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZycSwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wYXJhbSAqZnJxLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgZnJxLT5maXhlZCA9IDA7Ci0gICAgZnJxLT5kaXNhYmxlZCA9IDA7Ci0gICAgZnJxLT52YWx1ZSA9IHpmaVdsYW5RdWVyeVJ4UmF0ZShkZXYpICogMTAwMDsKKwlmcnEtPmZpeGVkID0gMDsKKwlmcnEtPmRpc2FibGVkID0gMDsKKwlmcnEtPnZhbHVlID0gemZpV2xhblF1ZXJ5UnhSYXRlKGRldikgKiAxMDAwOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X3Npd3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICBpbnQgdmFsID0gcnRzLT52YWx1ZTsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJaW50IHZhbCA9IHJ0cy0+dmFsdWU7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBpZiAocnRzLT5kaXNhYmxlZCkKLSAgICAgICAgdmFsID0gMjM0NzsKKwlpZiAocnRzLT5kaXNhYmxlZCkKKwkJdmFsID0gMjM0NzsKIAotICAgIGlmICgodmFsIDwgMCkgfHwgKHZhbCA+IDIzNDcpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoKHZhbCA8IDApIHx8ICh2YWwgPiAyMzQ3KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICB6ZmlXbGFuU2V0UnRzVGhyZXNob2xkKGRldix2YWwpOworCXpmaVdsYW5TZXRSdHNUaHJlc2hvbGQoZGV2LCB2YWwpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X2dpd3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotICAgICAgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLSAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBydHMtPnZhbHVlID0gemZpV2xhblF1ZXJ5UnRzVGhyZXNob2xkKGRldik7Ci0gICAgcnRzLT5kaXNhYmxlZCA9IChydHMtPnZhbHVlID49IDIzNDcpOwotICAgIHJ0cy0+Zml4ZWQgPSAxOworCXJ0cy0+dmFsdWUgPSB6ZmlXbGFuUXVlcnlSdHNUaHJlc2hvbGQoZGV2KTsKKwlydHMtPmRpc2FibGVkID0gKHJ0cy0+dmFsdWUgPj0gMjM0Nyk7CisJcnRzLT5maXhlZCA9IDE7CiAKLSAgICByZXR1cm4gMDsKLQorCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXdmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKKwkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgdTE2X3QgZnJhZ1RocmVzaG9sZDsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJdTE2X3QgZnJhZ1RocmVzaG9sZDsKIAotICAgIGlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQorCQlyZXR1cm4gMDsKIAotICAgIGlmIChmcmFnLT5kaXNhYmxlZCkKLSAgICAgICAgZnJhZ1RocmVzaG9sZCA9IDA7Ci0gICAgZWxzZQotICAgICAgICBmcmFnVGhyZXNob2xkID0gZnJhZy0+dmFsdWU7CisJaWYgKGZyYWctPmRpc2FibGVkKQorCQlmcmFnVGhyZXNob2xkID0gMDsKKwllbHNlCisJCWZyYWdUaHJlc2hvbGQgPSBmcmFnLT52YWx1ZTsKIAotICAgIHpmaVdsYW5TZXRGcmFnVGhyZXNob2xkKGRldixmcmFnVGhyZXNob2xkKTsKKwl6ZmlXbGFuU2V0RnJhZ1RocmVzaG9sZChkZXYsIGZyYWdUaHJlc2hvbGQpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X2dpd2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICB1MTYgdmFsOwotICAgIHVuc2lnbmVkIGxvbmcgaXJxRmxhZzsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJdTE2IHZhbDsKKwl1bnNpZ25lZCBsb25nIGlycUZsYWc7CiAKLSAgICBpZighbmV0aWZfcnVubmluZyhkZXYpKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwogCi0gICAgdmFsID0gemZpV2xhblF1ZXJ5RnJhZ1RocmVzaG9sZChkZXYpOworCXZhbCA9IHpmaVdsYW5RdWVyeUZyYWdUaHJlc2hvbGQoZGV2KTsKIAotICAgIGZyYWctPnZhbHVlID0gdmFsOworCWZyYWctPnZhbHVlID0gdmFsOwogCi0gICAgZnJhZy0+ZGlzYWJsZWQgPSAodmFsID49IDIzNDYpOwotICAgIGZyYWctPmZpeGVkID0gMTsKKwlmcmFnLT5kaXNhYmxlZCA9ICh2YWwgPj0gMjM0Nik7CisJZnJhZy0+Zml4ZWQgPSAxOwogCi0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjcC0+Y3NfbG9jaywgaXJxRmxhZyk7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfc2l3dHhwb3coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQlzdHJ1Y3QgaXdfcGFyYW0gKnJycSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgLy9Ob3Qgc3VwcG9ydCB5ZXQtLUNXWW5nKCspCisJLyogTm90IHN1cHBvcnQgeWV0LS1DV1luZygrKSAqLwogCXJldHVybiAwOwogfQogCkBAIC0xMjY1LDcgKzEyMDgsNyBAQAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKIHsKLSAgICAvL05vdCBzdXBwb3J0IHlldC0tQ1dZbmcoKykKKwkvKiBOb3Qgc3VwcG9ydCB5ZXQtLUNXWW5nKCspICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNzMsNyArMTIxNiw3IEBACiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQogewotICAgIC8vRG8gbm90aGluZy0tQ1dZYW5nKCspCisJLyogRG8gbm90aGluZy0tQ1dZYW5nKCspICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyODEsNjY1ICsxMjI0LDY2MiBAQAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKIHsKLSAgICAvL0RvIG5vdGhpbmctLUNXWWFuZygrKQorCS8qIERvIG5vdGhpbmctLUNXWWFuZygrKSAqLwogCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9zaXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KQogewotICAgIHN0cnVjdCB6c0tleUluZm8ga2V5SW5mbzsKLSAgICBpbnQgaSwgV2VwU3RhdGUgPSBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRDsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IHpzS2V5SW5mbyBrZXlJbmZvOworCWludCBpOworCWludCBXZXBTdGF0ZSA9IFpNX0VOQ1JZUFRJT05fV0VQX0RJU0FCTEVEOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGlmKCFuZXRpZl9ydW5uaW5nKGRldikpCi0gICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIGlmICgoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkgPT0gMCkKLSAgICB7Ci0gICAgICAgIGtleUluZm8ua2V5ID0ga2V5OwotICAgICAgICBrZXlJbmZvLmtleUxlbmd0aCA9IGVycS0+bGVuZ3RoOwotICAgICAgICBrZXlJbmZvLmtleUluZGV4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLSAgICAgICAgaWYgKGtleUluZm8ua2V5SW5kZXggPj0gNCkKLSAgICAgICAgICAgIGtleUluZm8ua2V5SW5kZXggPSAwOwotICAgICAgICBrZXlJbmZvLmZsYWcgPSBaTV9LRVlfRkxBR19ERUZBVUxUX0tFWTsKKwlpZiAoKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpID09IDApIHsKKwkJa2V5SW5mby5rZXkgPSBrZXk7CisJCWtleUluZm8ua2V5TGVuZ3RoID0gZXJxLT5sZW5ndGg7CisJCWtleUluZm8ua2V5SW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworCQlpZiAoa2V5SW5mby5rZXlJbmRleCA+PSA0KQorCQkJa2V5SW5mby5rZXlJbmRleCA9IDA7CisJCWtleUluZm8uZmxhZyA9IFpNX0tFWV9GTEFHX0RFRkFVTFRfS0VZOwogCi0gICAgICAgIHpmaVdsYW5TZXRLZXkoZGV2LCBrZXlJbmZvKTsKLSAgICAgICAgV2VwU3RhdGUgPSBaTV9FTkNSWVBUSU9OX1dFUF9FTkFCTEVEOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBmb3IgKGkgPSAxOyBpIDwgNDsgaSsrKQotICAgICAgICAgICAgemZpV2xhblJlbW92ZUtleShkZXYsIDAsIGkpOwotICAgICAgICBXZXBTdGF0ZSA9IFpNX0VOQ1JZUFRJT05fV0VQX0RJU0FCTEVEOwotICAgICAgICAvL3pmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9OT19XRVApOwotICAgIH0KKwkJemZpV2xhblNldEtleShkZXYsIGtleUluZm8pOworCQlXZXBTdGF0ZSA9IFpNX0VOQ1JZUFRJT05fV0VQX0VOQUJMRUQ7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMTsgaSA8IDQ7IGkrKykKKwkJCXpmaVdsYW5SZW1vdmVLZXkoZGV2LCAwLCBpKTsKKwkJV2VwU3RhdGUgPSBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRDsKKwkJLyogemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX05PX1dFUCk7ICovCisJfQogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKQotICAgIHsKLSAgICAgICAgemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFdlcFN0YXRlKTsKLSAgICAgICAgemZpV2xhblNldEZyZXF1ZW5jeShkZXYsIHpmaVdsYW5RdWVyeUZyZXF1ZW5jeShkZXYpLCBGQUxTRSk7Ci0gICAgICAgIC8vemZpV2xhblNldEVuY3J5TW9kZShkZXYsIHpmaVdsYW5RdWVyeUVuY3J5TW9kZShkZXYpKTsKLSAgICAgICAgLy91OF90IHdwYWllTGVuLHdwYWllWzUwXTsKLSAgICAgICAgLy96ZmlXbGFuUXVlcnlXcGFJZShkZXYsIHdwYWllLCAmd3BhaWVMZW4pOwotICAgICAgICB6ZmlXbGFuRGlzYWJsZShkZXYsIDApOwotICAgICAgICB6ZmlXbGFuRW5hYmxlKGRldik7Ci0gICAgICAgIC8vaWYgKHdwYWllTGVuID4gMikKLSAgICAgICAgLy8gICAgemZpV2xhblNldFdwYUllKGRldiwgd3BhaWUsIHdwYWllTGVuKTsKLSAgICB9CisJaWYgKG1hY3AtPkRldmljZU9wZW5lZCA9PSAxKSB7CisJCXpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBXZXBTdGF0ZSk7CisJCXpmaVdsYW5TZXRGcmVxdWVuY3koZGV2LCB6ZmlXbGFuUXVlcnlGcmVxdWVuY3koZGV2KSwgRkFMU0UpOworCQkvKiB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgemZpV2xhblF1ZXJ5RW5jcnlNb2RlKGRldikpOyAqLworCQkvKiB1OF90IHdwYWllTGVuLHdwYWllWzUwXTsgKi8KKwkJLyogemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCB3cGFpZSwgJndwYWllTGVuKTsgKi8KKwkJemZpV2xhbkRpc2FibGUoZGV2LCAwKTsKKwkJemZpV2xhbkVuYWJsZShkZXYpOworCQkvKiBpZiAod3BhaWVMZW4gPiAyKSAqLworCQkvKiB6ZmlXbGFuU2V0V3BhSWUoZGV2LCB3cGFpZSwgd3BhaWVMZW4pOyAqLworCX0KIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBpbnQgdXNiZHJ2d2V4dF9naXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KQogewotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKLSAgICB1OF90IEVuY3J5cHRpb25Nb2RlOwotICAgIHU4X3Qga2V5TGVuID0gMDsKKwlzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJdThfdCBFbmNyeXB0aW9uTW9kZTsKKwl1OF90IGtleUxlbiA9IDA7CiAKLSAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCi0gICAgICAgIHJldHVybiAwOworCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKKwkJcmV0dXJuIDA7CiAKLSAgICBFbmNyeXB0aW9uTW9kZSA9IHpmaVdsYW5RdWVyeUVuY3J5TW9kZShkZXYpOworCUVuY3J5cHRpb25Nb2RlID0gemZpV2xhblF1ZXJ5RW5jcnlNb2RlKGRldik7CiAKLSAgICBpZiAoRW5jcnlwdGlvbk1vZGUpCi0gICAgewotICAgICAgICBlcnEtPmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGVycS0+ZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0gICAgfQorCWlmIChFbmNyeXB0aW9uTW9kZSkKKwkJZXJxLT5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEOworCWVsc2UKKwkJZXJxLT5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKIAotLyogV2UgY2FuJ3QgcmV0dXJuIHRoZSBrZXksIHNvIHNldCB0aGUgcHJvcGVyIGZsYWcgYW5kIHJldHVybiB6ZXJvICovCi0gICAgZXJxLT5mbGFncyB8PSBJV19FTkNPREVfTk9LRVk7Ci0gICAgbWVtc2V0KGtleSwgMCwgMTYpOworCS8qIFdlIGNhbid0IHJldHVybiB0aGUga2V5LCBzbyBzZXQgdGhlIHByb3BlciBmbGFnIGFuZCByZXR1cm4gemVybyAqLworCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX05PS0VZOworCW1lbXNldChrZXksIDAsIDE2KTsKIAotLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwotICAgIHN3aXRjaChFbmNyeXB0aW9uTW9kZSkKLSAgICB7Ci0gICAgICAgIGNhc2UgWk1fV0VQNjQ6Ci0gICAgICAgICAgICBrZXlMZW4gPSA1OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWk1fV0VQMTI4OgotICAgICAgICAgICAga2V5TGVuID0gMTM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBaTV9XRVAyNTY6Ci0gICAgICAgICAgICBrZXlMZW4gPSAyOTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFpNX0FFUzoKLSAgICAgICAgICAgIGtleUxlbiA9IDE2OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgWk1fVEtJUDoKLSAgICAgICAgICAgIGtleUxlbiA9IDMyOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgWk1fRU5BQkxFX0NFTkMKLSAgICAgICAgY2FzZSBaTV9DRU5DOgotICAgICAgICAgICAga2V5TGVuID0gMzI7Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCi0gICAgICAgIGNhc2UgWk1fTk9fV0VQOgotICAgICAgICAgICAga2V5TGVuID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0IDoKLSAgICAgICAgICAgIGtleUxlbiA9IDA7Ci0gICAgICAgICAgICBwcmludGsoIlVua25vd24gRW5jcnlNb2RlXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOworCS8qIENvcHkgdGhlIGtleSB0byB0aGUgdXNlciBidWZmZXIgKi8KKwlzd2l0Y2ggKEVuY3J5cHRpb25Nb2RlKSB7CisJY2FzZSBaTV9XRVA2NDoKKwkJa2V5TGVuID0gNTsKKwkJYnJlYWs7CisJY2FzZSBaTV9XRVAxMjg6CisJCWtleUxlbiA9IDEzOworCQlicmVhazsKKwljYXNlIFpNX1dFUDI1NjoKKwkJa2V5TGVuID0gMjk7CisJCWJyZWFrOworCWNhc2UgWk1fQUVTOgorCQlrZXlMZW4gPSAxNjsKKwkJYnJlYWs7CisJY2FzZSBaTV9US0lQOgorCQlrZXlMZW4gPSAzMjsKKwkJYnJlYWs7CisJI2lmZGVmIFpNX0VOQUJMRV9DRU5DCisJY2FzZSBaTV9DRU5DOgorCQkvKiBaTV9FTkFCTEVfQ0VOQyAqLworCQlrZXlMZW4gPSAzMjsKKwkJYnJlYWs7CisJI2VuZGlmCisJY2FzZSBaTV9OT19XRVA6CisJCWtleUxlbiA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWtleUxlbiA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBFbmNyeU1vZGVcbiIpOworCQlicmVhazsKKwl9CisJZXJxLT5sZW5ndGggPSBrZXlMZW47CiAKLSAgICB9Ci0gICAgZXJxLT5sZW5ndGggPSBrZXlMZW47Ci0KLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogaW50IHVzYmRydndleHRfc2l3cG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKmZycSwgY2hhciAqZXh0cmEpCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wYXJhbSAqZnJxLCBjaGFyICpleHRyYSkKIHsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgdThfdCBQU01vZGU7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXU4X3QgUFNNb2RlOwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgaWYgKGZycS0+ZGlzYWJsZWQpCi0gICAgICAgIFBTTW9kZSA9IFpNX1NUQV9QU19OT05FOwotICAgIGVsc2UKLSAgICAgICAgUFNNb2RlID0gWk1fU1RBX1BTX01BWDsKKwlpZiAoZnJxLT5kaXNhYmxlZCkKKwkJUFNNb2RlID0gWk1fU1RBX1BTX05PTkU7CisJZWxzZQorCQlQU01vZGUgPSBaTV9TVEFfUFNfTUFYOwogCi0gICAgemZpV2xhblNldFBvd2VyU2F2ZU1vZGUoZGV2LFBTTW9kZSk7CisJemZpV2xhblNldFBvd2VyU2F2ZU1vZGUoZGV2LCBQU01vZGUpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIGludCB1c2JkcnZ3ZXh0X2dpd3Bvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0gICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpmcnEsIGNoYXIgKmV4dHJhKQorCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcGFyYW0gKmZycSwgY2hhciAqZXh0cmEpCiB7Ci0gICAgdW5zaWduZWQgbG9uZyBpcnFGbGFnOwotICAgIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKKwl1bnNpZ25lZCBsb25nIGlycUZsYWc7CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwogCi0gICAgaWYgKG1hY3AtPkRldmljZU9wZW5lZCAhPSAxKQotICAgICAgICByZXR1cm4gMDsKKwlpZiAobWFjcC0+RGV2aWNlT3BlbmVkICE9IDEpCisJCXJldHVybiAwOwogCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOworCXNwaW5fbG9ja19pcnFzYXZlKCZtYWNwLT5jc19sb2NrLCBpcnFGbGFnKTsKIAotICAgIGlmICh6ZmlXbGFuUXVlcnlQb3dlclNhdmVNb2RlKGRldikgPT0gWk1fU1RBX1BTX05PTkUpCi0gICAgICAgIGZycS0+ZGlzYWJsZWQgPSAxOwotICAgIGVsc2UKLSAgICAgICAgZnJxLT5kaXNhYmxlZCA9IDA7CisJaWYgKHpmaVdsYW5RdWVyeVBvd2VyU2F2ZU1vZGUoZGV2KSA9PSBaTV9TVEFfUFNfTk9ORSkKKwkJZnJxLT5kaXNhYmxlZCA9IDE7CisJZWxzZQorCQlmcnEtPmRpc2FibGVkID0gMDsKIAotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hY3AtPmNzX2xvY2ssIGlycUZsYWcpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKLS8vaW50IHVzYmRydndleHRfc2V0cGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLS8vCQkgICAJIHZvaWQgKncsIGNoYXIgKmV4dHJhKQotLy97Ci0vLwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBkZXYtPm1sX3ByaXY7Ci0vLwlzdHJ1Y3QgaWVlZTgwMjExY29tICppYyA9IHZhcC0+aXZfaWM7Ci0vLwlzdHJ1Y3QgaWVlZTgwMjExX3JzbnBhcm1zICpyc24gPSAmdmFwLT5pdl9ic3MtPm5pX3JzbjsKLS8vCWludCAqaSA9IChpbnQgKikgZXh0cmE7Ci0vLwlpbnQgcGFyYW0gPSBpWzBdOwkJLyogcGFyYW1ldGVyIGlkIGlzIDFzdCAqLwotLy8JaW50IHZhbHVlID0gaVsxXTsJCS8qIE5COiBtb3N0IHZhbHVlcyBhcmUgVFlQRV9JTlQgKi8KLS8vCWludCByZXR2ID0gMDsKLS8vCWludCBqLCBjYXBzOwotLy8JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9hdXRoZW50aWNhdG9yICphdXRoOwotLy8JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9hY2xhdG9yICphY2w7Ci0vLwotLy8Jc3dpdGNoIChwYXJhbSkgewotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQVVUSE1PREU6Ci0vLwkJc3dpdGNoICh2YWx1ZSkgewotLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfV1BBOgkvKiBXUEEgKi8KLS8vCQljYXNlIElFRUU4MDIxMV9BVVRIXzgwMjFYOgkvKiA4MDIuMXggKi8KLS8vCQljYXNlIElFRUU4MDIxMV9BVVRIX09QRU46CS8qIG9wZW4gKi8KLS8vCQljYXNlIElFRUU4MDIxMV9BVVRIX1NIQVJFRDoJLyogc2hhcmVkLWtleSAqLwotLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfQVVUTzoJLyogYXV0byAqLwotLy8JCQlhdXRoID0gaWVlZTgwMjExX2F1dGhlbnRpY2F0b3JfZ2V0KHZhbHVlKTsKLS8vCQkJaWYgKGF1dGggPT0gTlVMTCkKLS8vCQkJCXJldHVybiAtRUlOVkFMOwotLy8JCQlicmVhazsKLS8vCQlkZWZhdWx0OgotLy8JCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQl9Ci0vLwkJc3dpdGNoICh2YWx1ZSkgewotLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfV1BBOgkvKiBXUEEgdy8gODAyLjF4ICovCi0vLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfUFJJVkFDWTsKLS8vCQkJdmFsdWUgPSBJRUVFODAyMTFfQVVUSF84MDIxWDsKLS8vCQkJYnJlYWs7Ci0vLwkJY2FzZSBJRUVFODAyMTFfQVVUSF9PUEVOOgkvKiBvcGVuICovCi0vLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfihJRUVFODAyMTFfRl9XUEF8SUVFRTgwMjExX0ZfUFJJVkFDWSk7Ci0vLwkJCWJyZWFrOwotLy8JCWNhc2UgSUVFRTgwMjExX0FVVEhfU0hBUkVEOgkvKiBzaGFyZWQta2V5ICovCi0vLwkJY2FzZSBJRUVFODAyMTFfQVVUSF9BVVRPOgkvKiBhdXRvICovCi0vLwkJY2FzZSBJRUVFODAyMTFfQVVUSF84MDIxWDoJLyogODAyLjF4ICovCi0vLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1dQQTsKLS8vCQkJLyogYm90aCByZXF1aXJlIGEga2V5IHNvIG1hcmsgdGhlIFBSSVZBQ1kgY2FwYWJpbGl0eSAqLwotLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1BSSVZBQ1k7Ci0vLwkJCWJyZWFrOwotLy8JCX0KLS8vCQkvKiBOQjogYXV0aGVudGljYXRvciBhdHRhY2gvZGV0YWNoIGhhcHBlbnMgb24gc3RhdGUgY2hhbmdlICovCi0vLwkJdmFwLT5pdl9ic3MtPm5pX2F1dGhtb2RlID0gdmFsdWU7Ci0vLwkJLyogWFhYIG1peGVkL21vZGUvdXNhZ2U/ICovCi0vLwkJdmFwLT5pdl9hdXRoID0gYXV0aDsKLS8vCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUFJPVE1PREU6Ci0vLwkJaWYgKHZhbHVlID4gSUVFRTgwMjExX1BST1RfUlRTQ1RTKQotLy8JCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQlpYy0+aWNfcHJvdG1vZGUgPSB2YWx1ZTsKLS8vCQkvKiBOQjogaWYgbm90IG9wZXJhdGluZyBpbiAxMWcgdGhpcyBjYW4gd2FpdCAqLwotLy8JCWlmIChpYy0+aWNfYnNzY2hhbiAhPSBJRUVFODAyMTFfQ0hBTl9BTllDICYmCi0vLwkJICAgIElFRUU4MDIxMV9JU19DSEFOX0FOWUcoaWMtPmljX2Jzc2NoYW4pKQotLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fTUNBU1RDSVBIRVI6Ci0vLwkJaWYgKCh2YXAtPml2X2NhcHMgJiBjaXBoZXIyY2FwKHZhbHVlKSkgPT0gMCAmJgotLy8JCSAgICAhaWVlZTgwMjExX2NyeXB0b19hdmFpbGFibGUodmFsdWUpKQotLy8JCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQlyc24tPnJzbl9tY2FzdGNpcGhlciA9IHZhbHVlOwotLy8JCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQotLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fTUNBU1RLRVlMRU46Ci0vLwkJaWYgKCEoMCA8IHZhbHVlICYmIHZhbHVlIDwgSUVFRTgwMjExX0tFWUJVRl9TSVpFKSkKLS8vCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJLyogWFhYIG5vIHdheSB0byB2ZXJpZnkgZHJpdmVyIGNhcGFiaWxpdHkgKi8KLS8vCQlyc24tPnJzbl9tY2FzdGtleWxlbiA9IHZhbHVlOwotLy8JCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQotLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fVUNBU1RDSVBIRVJTOgotLy8JCS8qCi0vLwkJICogQ29udmVydCBjaXBoZXIgc2V0IHRvIGVxdWl2YWxlbnQgY2FwYWJpbGl0aWVzLgotLy8JCSAqIE5COiB0aGlzIGxvZ2ljIGludGVudGlvbmFsbHkgaWdub3JlcyB1bmtub3duIGFuZAotLy8JCSAqIHVuc3VwcG9ydGVkIGNpcGhlcnMgc28gZm9sa3MgY2FuIHNwZWNpZnkgMHhmZiBvcgotLy8JCSAqIHNpbWlsYXIgYW5kIGdldCBhbGwgYXZhaWxhYmxlIGNpcGhlcnMuCi0vLwkJICovCi0vLwkJY2FwcyA9IDA7Ci0vLwkJZm9yIChqID0gMTsgaiA8IDMyOyBqKyspCS8qIE5COiBza2lwIFdFUCAqLwotLy8JCQlpZiAoKHZhbHVlICYgKDE8PGopKSAmJgotLy8JCQkgICAgKCh2YXAtPml2X2NhcHMgJiBjaXBoZXIyY2FwKGopKSB8fAotLy8JCQkgICAgIGllZWU4MDIxMV9jcnlwdG9fYXZhaWxhYmxlKGopKSkKLS8vCQkJCWNhcHMgfD0gMTw8ajsKLS8vCQlpZiAoY2FwcyA9PSAwKQkJCS8qIG5vdGhpbmcgYXZhaWxhYmxlICovCi0vLwkJCXJldHVybiAtRUlOVkFMOwotLy8JCS8qIFhYWCB2ZXJpZnkgY2lwaGVycyBvayBmb3IgdW5pY2FzdCB1c2U/ICovCi0vLwkJLyogWFhYIGRpc2FsbG93IGlmIHJ1bm5pbmcgYXMgaXQnbGwgaGF2ZSBubyBlZmZlY3QgKi8KLS8vCQlyc24tPnJzbl91Y2FzdGNpcGhlcnNldCA9IGNhcHM7Ci0vLwkJaWYgKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpCi0vLwkJCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9VQ0FTVENJUEhFUjoKLS8vCQlpZiAoKHJzbi0+cnNuX3VjYXN0Y2lwaGVyc2V0ICYgY2lwaGVyMmNhcCh2YWx1ZSkpID09IDApCi0vLwkJCXJldHVybiAtRUlOVkFMOwotLy8JCXJzbi0+cnNuX3VjYXN0Y2lwaGVyID0gdmFsdWU7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9VQ0FTVEtFWUxFTjoKLS8vCQlpZiAoISgwIDwgdmFsdWUgJiYgdmFsdWUgPCBJRUVFODAyMTFfS0VZQlVGX1NJWkUpKQotLy8JCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQkvKiBYWFggbm8gd2F5IHRvIHZlcmlmeSBkcml2ZXIgY2FwYWJpbGl0eSAqLwotLy8JCXJzbi0+cnNuX3VjYXN0a2V5bGVuID0gdmFsdWU7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9LRVlNR1RBTEdTOgotLy8JCS8qIFhYWCBjaGVjayAqLwotLy8JCXJzbi0+cnNuX2tleW1nbXRzZXQgPSB2YWx1ZTsKLS8vCQlpZiAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkKLS8vCQkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JTTkNBUFM6Ci0vLwkJLyogWFhYIGNoZWNrICovCi0vLwkJcnNuLT5yc25fY2FwcyA9IHZhbHVlOwotLy8JCWlmICh2YXAtPml2X2ZsYWdzICYgSUVFRTgwMjExX0ZfV1BBKQotLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fV1BBOgotLy8JCWlmICh2YWx1ZSA+IDMpCi0vLwkJCXJldHVybiAtRUlOVkFMOwotLy8JCS8qIFhYWCB2ZXJpZnkgY2lwaGVycyBhdmFpbGFibGUgKi8KLS8vCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9XUEE7Ci0vLwkJc3dpdGNoICh2YWx1ZSkgewotLy8JCWNhc2UgMToKLS8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9XUEExOwotLy8JCQlicmVhazsKLS8vCQljYXNlIDI6Ci0vLwkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV1BBMjsKLS8vCQkJYnJlYWs7Ci0vLwkJY2FzZSAzOgotLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1dQQTEgfCBJRUVFODAyMTFfRl9XUEEyOwotLy8JCQlicmVhazsKLS8vCQl9Ci0vLwkJcmV0diA9IEVORVRSRVNFVDsJCS8qIFhYWD8gKi8KLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1JTkc6Ci0vLwkJaWYgKCEoSUVFRTgwMjExX1JPQU1JTkdfREVWSUNFIDw9IHZhbHVlICYmCi0vLwkJICAgIHZhbHVlIDw9IElFRUU4MDIxMV9ST0FNSU5HX01BTlVBTCkpCi0vLwkJCXJldHVybiAtRUlOVkFMOwotLy8JCWljLT5pY19yb2FtaW5nID0gdmFsdWU7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9QUklWQUNZOgotLy8JCWlmICh2YWx1ZSkgewotLy8JCQkvKiBYWFggY2hlY2sgZm9yIGtleSBzdGF0ZT8gKi8KLS8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9QUklWQUNZOwotLy8JCX0gZWxzZQotLy8JCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9QUklWQUNZOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fRFJPUFVORU5DUllQVEVEOgotLy8JCWlmICh2YWx1ZSkKLS8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9EUk9QVU5FTkM7Ci0vLwkJZWxzZQotLy8JCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9EUk9QVU5FTkM7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9DT1VOVEVSTUVBU1VSRVM6Ci0vLwkJaWYgKHZhbHVlKSB7Ci0vLwkJCWlmICgodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkgPT0gMCkKLS8vCQkJCXJldHVybiAtRUlOVkFMOwotLy8JCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX0NPVU5URVJNOwotLy8JCX0gZWxzZQotLy8JCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9DT1VOVEVSTTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0RSSVZFUl9DQVBTOgotLy8JCXZhcC0+aXZfY2FwcyA9IHZhbHVlOwkJLyogTkI6IGZvciB0ZXN0aW5nICovCi0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9NQUNDTUQ6Ci0vLwkJYWNsID0gdmFwLT5pdl9hY2w7Ci0vLwkJc3dpdGNoICh2YWx1ZSkgewotLy8JCWNhc2UgSUVFRTgwMjExX01BQ0NNRF9QT0xJQ1lfT1BFTjoKLS8vCQljYXNlIElFRUU4MDIxMV9NQUNDTURfUE9MSUNZX0FMTE9XOgotLy8JCWNhc2UgSUVFRTgwMjExX01BQ0NNRF9QT0xJQ1lfREVOWToKLS8vCQkJaWYgKGFjbCA9PSBOVUxMKSB7Ci0vLwkJCQlhY2wgPSBpZWVlODAyMTFfYWNsYXRvcl9nZXQoIm1hYyIpOwotLy8JCQkJaWYgKGFjbCA9PSBOVUxMIHx8ICFhY2wtPmlhY19hdHRhY2godmFwKSkKLS8vCQkJCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQkJCXZhcC0+aXZfYWNsID0gYWNsOwotLy8JCQl9Ci0vLwkJCWFjbC0+aWFjX3NldHBvbGljeSh2YXAsIHZhbHVlKTsKLS8vCQkJYnJlYWs7Ci0vLwkJY2FzZSBJRUVFODAyMTFfTUFDQ01EX0ZMVVNIOgotLy8JCQlpZiAoYWNsICE9IE5VTEwpCi0vLwkJCQlhY2wtPmlhY19mbHVzaCh2YXApOwotLy8JCQkvKiBOQjogc2lsZW50bHkgaWdub3JlIHdoZW4gbm90IGluIHVzZSAqLwotLy8JCQlicmVhazsKLS8vCQljYXNlIElFRUU4MDIxMV9NQUNDTURfREVUQUNIOgotLy8JCQlpZiAoYWNsICE9IE5VTEwpIHsKLS8vCQkJCXZhcC0+aXZfYWNsID0gTlVMTDsKLS8vCQkJCWFjbC0+aWFjX2RldGFjaCh2YXApOwotLy8JCQl9Ci0vLwkJCWJyZWFrOwotLy8JCX0KLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1dNTToKLS8vCQlpZiAoaWMtPmljX2NhcHMgJiBJRUVFODAyMTFfQ19XTUUpewotLy8JCQlpZiAodmFsdWUpIHsKLS8vCQkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV01FOwotLy8JCQkJdmFwLT5pdl9pYy0+aWNfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV01FOyAvKiBYWFggbmVlZGVkIGJ5IGljX3Jlc2V0ICovCi0vLwkJCX0KLS8vCQkJZWxzZSB7Ci0vLwkJCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9XTUU7Ci0vLwkJCQl2YXAtPml2X2ljLT5pY19mbGFncyAmPSB+SUVFRTgwMjExX0ZfV01FOyAvKiBYWFggbmVlZGVkIGJ5IGljX3Jlc2V0ICovCi0vLwkJCX0KLS8vCQkJcmV0diA9IEVORVRSRVNFVDsJLyogUmVuZWdvdGlhdGUgZm9yIGNhcGFiaWxpdGllcyAqLwotLy8JCX0KLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0hJREVTU0lEOgotLy8JCWlmICh2YWx1ZSkKLS8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9ISURFU1NJRDsKLS8vCQllbHNlCi0vLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX0hJREVTU0lEOwotLy8JCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9BUEJSSURHRToKLS8vCQlpZiAodmFsdWUgPT0gMCkKLS8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9OT0JSSURHRTsKLS8vCQllbHNlCi0vLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX05PQlJJREdFOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fSU5BQ1Q6Ci0vLwkJdmFwLT5pdl9pbmFjdF9ydW4gPSB2YWx1ZSAvIElFRUU4MDIxMV9JTkFDVF9XQUlUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fSU5BQ1RfQVVUSDoKLS8vCQl2YXAtPml2X2luYWN0X2F1dGggPSB2YWx1ZSAvIElFRUU4MDIxMV9JTkFDVF9XQUlUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fSU5BQ1RfSU5JVDoKLS8vCQl2YXAtPml2X2luYWN0X2luaXQgPSB2YWx1ZSAvIElFRUU4MDIxMV9JTkFDVF9XQUlUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQUJPTFQ6Ci0vLwkJY2FwcyA9IDA7Ci0vLwkJLyoKLS8vCQkgKiBNYXAgYWJvbHQgc2V0dGluZ3MgdG8gY2FwYWJpbGl0eSBiaXRzOwotLy8JCSAqIHRoaXMgYWxzbyBzdHJpcHMgdW5rbm93bi91bndhbnRlZCBiaXRzLgotLy8JCSAqLwotLy8JCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9UVVJCT19QUklNRSkKLS8vCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19UVVJCT1A7Ci0vLwkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX0NPTVBSRVNTSU9OKQotLy8JCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX0NPTVA7Ci0vLwkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX0ZBU1RfRlJBTUUpCi0vLwkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfRkY7Ci0vLwkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX1hSKQotLy8JCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX1hSOwotLy8JCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9BUikKLS8vCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19BUjsKLS8vCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfQlVSU1QpCi0vLwkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfQlVSU1Q7Ci0vLyAgICAgICAgaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX1dNRV9FTEUpCi0vLyAgICAgICAgICAgIGNhcHMgfD0gSUVFRTgwMjExX0FUSENfV01FOwotLy8JCS8qIHZlcmlmeSByZXF1ZXN0ZWQgY2FwYWJpbGl0aWVzIGFyZSBzdXBwb3J0ZWQgKi8KLS8vCQlpZiAoKGNhcHMgJiBpYy0+aWNfYXRoX2NhcCkgIT0gY2FwcykKLS8vCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJaWYgKHZhcC0+aXZfYXRoX2NhcCAhPSBjYXBzKSB7Ci0vLwkJCWlmICgodmFwLT5pdl9hdGhfY2FwIF4gY2FwcykgJiBJRUVFODAyMTFfQVRIQ19UVVJCT1ApIHsKLS8vCQkJCWlmIChpZWVlODAyMTFfc2V0X3R1cmJvKGRldiwgIGNhcHMgJiBJRUVFODAyMTFfQVRIQ19UVVJCT1ApKQotLy8JCQkJCXJldHVybiAtRUlOVkFMOwotLy8JCQkJaWVlZTgwMjExX3NjYW5fZmx1c2goaWMpOwotLy8JCQl9Ci0vLwkJCXZhcC0+aXZfYXRoX2NhcCA9IGNhcHM7Ci0vLwkJCWljLT5pY19hdGhjYXBzZXR1cCh2YXAtPml2X2ljLCB2YXAtPml2X2F0aF9jYXApOwotLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCX0KLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0RUSU1fUEVSSU9EOgotLy8JCWlmICh2YXAtPml2X29wbW9kZSAhPSBJRUVFODAyMTFfTV9IT1NUQVAgJiYKLS8vCQkgICAgdmFwLT5pdl9vcG1vZGUgIT0gSUVFRTgwMjExX01fSUJTUykKLS8vCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJaWYgKElFRUU4MDIxMV9EVElNX01JTiA8PSB2YWx1ZSAmJgotLy8JCSAgICB2YWx1ZSA8PSBJRUVFODAyMTFfRFRJTV9NQVgpIHsKLS8vCQkJdmFwLT5pdl9kdGltX3BlcmlvZCA9IHZhbHVlOwotLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwkJLyogcmVxdWlyZXMgcmVzdGFydCAqLwotLy8JCX0gZWxzZQotLy8JCQlyZXR2ID0gRUlOVkFMOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQkVBQ09OX0lOVEVSVkFMOgotLy8JCWlmICh2YXAtPml2X29wbW9kZSAhPSBJRUVFODAyMTFfTV9IT1NUQVAgJiYKLS8vCQkgICAgdmFwLT5pdl9vcG1vZGUgIT0gSUVFRTgwMjExX01fSUJTUykKLS8vCQkJcmV0dXJuIC1FSU5WQUw7Ci0vLwkJaWYgKElFRUU4MDIxMV9CSU5UVkFMX01JTiA8PSB2YWx1ZSAmJgotLy8JCSAgICB2YWx1ZSA8PSBJRUVFODAyMTFfQklOVFZBTF9NQVgpIHsKLS8vCQkJaWMtPmljX2xpbnR2YWwgPSB2YWx1ZTsJCS8qIFhYWCBtdWx0aS1ic3MgKi8KLS8vCQkJcmV0diA9IEVORVRSRVNFVDsJCS8qIHJlcXVpcmVzIHJlc3RhcnQgKi8KLS8vCQl9IGVsc2UKLS8vCQkJcmV0diA9IEVJTlZBTDsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0RPVEg6Ci0vLwkJaWYgKHZhbHVlKSB7Ci0vLwkJCWljLT5pY19mbGFncyB8PSBJRUVFODAyMTFfRl9ET1RIOwotLy8JCX0KLS8vCQllbHNlCi0vLwkJCWljLT5pY19mbGFncyAmPSB+SUVFRTgwMjExX0ZfRE9USDsKLS8vCQlyZXR2ID0gRU5FVFJFU0VUOwkvKiBYWFg6IG5lZWQgc29tZXRoaW5nIHRoaXMgZHJhc3RpYz8gKi8KLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1BXUlRBUkdFVDoKLS8vCQlpYy0+aWNfY3VyY2hhbm1heHB3ciA9IHZhbHVlOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fR0VOUkVBU1NPQzoKLS8vCQlJRUVFODAyMTFfU0VORF9NR01UKHZhcC0+aXZfYnNzLCBJRUVFODAyMTFfRkMwX1NVQlRZUEVfUkVBU1NPQ19SRVEsIDApOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQ09NUFJFU1NJT046Ci0vLwkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19DT01QLCB2YWx1ZSk7Ci0vLwkJYnJlYWs7Ci0vLyAgICBjYXNlIElFRUU4MDIxMV9QQVJBTV9XTU1fQUdHUk1PREU6Ci0vLyAgICAgICAgcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19XTUUsIHZhbHVlKTsKLS8vICAgICAgICBicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0ZGOgotLy8JCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfRkYsIHZhbHVlKTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1RVUkJPOgotLy8JCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfVFVSQk9QLCB2YWx1ZSk7Ci0vLwkJaWYgKHJldHYgPT0gRU5FVFJFU0VUKSB7Ci0vLwkJCWlmKGllZWU4MDIxMV9zZXRfdHVyYm8oZGV2LHZhbHVlKSkKLS8vCQkJCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQkJaWVlZTgwMjExX3NjYW5fZmx1c2goaWMpOwotLy8JCX0KLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1hSOgotLy8JCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfWFIsIHZhbHVlKTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0JVUlNUOgotLy8JCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfQlVSU1QsIHZhbHVlKTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0FSOgotLy8JCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfQVIsIHZhbHVlKTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1BVUkVHOgotLy8JCWlmICh2YWx1ZSkKLS8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9QVVJFRzsKLS8vCQllbHNlCi0vLwkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1BVUkVHOwotLy8JCS8qIE5COiByZXNldCBvbmx5IGlmIHdlJ3JlIG9wZXJhdGluZyBvbiBhbiAxMWcgY2hhbm5lbCAqLwotLy8JCWlmIChpYy0+aWNfYnNzY2hhbiAhPSBJRUVFODAyMTFfQ0hBTl9BTllDICYmCi0vLwkJICAgIElFRUU4MDIxMV9JU19DSEFOX0FOWUcoaWMtPmljX2Jzc2NoYW4pKQotLy8JCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fV0RTOgotLy8JCWlmICh2YWx1ZSkKLS8vCQkJdmFwLT5pdl9mbGFnc19leHQgfD0gSUVFRTgwMjExX0ZFWFRfV0RTOwotLy8JCWVsc2UKLS8vCQkJdmFwLT5pdl9mbGFnc19leHQgJj0gfklFRUU4MDIxMV9GRVhUX1dEUzsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0JHU0NBTjoKLS8vCQlpZiAodmFsdWUpIHsKLS8vCQkJaWYgKCh2YXAtPml2X2NhcHMgJiBJRUVFODAyMTFfQ19CR1NDQU4pID09IDApCi0vLwkJCQlyZXR1cm4gLUVJTlZBTDsKLS8vCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9CR1NDQU47Ci0vLwkJfSBlbHNlIHsKLS8vCQkJLyogWFhYIHJhY2V5PyAqLwotLy8JCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9CR1NDQU47Ci0vLwkJCWllZWU4MDIxMV9jYW5jZWxfc2Nhbih2YXApOwkvKiBhbnl0aGluZyBjdXJyZW50ICovCi0vLwkJfQotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQkdTQ0FOX0lETEU6Ci0vLwkJaWYgKHZhbHVlID49IElFRUU4MDIxMV9CR1NDQU5fSURMRV9NSU4pCi0vLwkJCXZhcC0+aXZfYmdzY2FuaWRsZSA9IHZhbHVlKkhaLzEwMDA7Ci0vLwkJZWxzZQotLy8JCQlyZXR2ID0gRUlOVkFMOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQkdTQ0FOX0lOVEVSVkFMOgotLy8JCWlmICh2YWx1ZSA+PSBJRUVFODAyMTFfQkdTQ0FOX0lOVFZBTF9NSU4pCi0vLwkJCXZhcC0+aXZfYmdzY2FuaW50dmwgPSB2YWx1ZSpIWjsKLS8vCQllbHNlCi0vLwkJCXJldHYgPSBFSU5WQUw7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9NQ0FTVF9SQVRFOgotLy8JCS8qIHVuaXRzIGFyZSBpbiBLSUxPYml0cyBwZXIgc2Vjb25kICovCi0vLwkJaWYgKHZhbHVlID49IDI1NiAmJiB2YWx1ZSA8PSA1NDAwMCkKLS8vCQkJdmFwLT5pdl9tY2FzdF9yYXRlID0gdmFsdWU7Ci0vLwkJZWxzZQotLy8JCQlyZXR2ID0gRUlOVkFMOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQ09WRVJBR0VfQ0xBU1M6Ci0vLwkJaWYgKHZhbHVlID49IDAgJiYgdmFsdWUgPD0gSUVFRTgwMjExX0NPVkVSQUdFX0NMQVNTX01BWCkgewotLy8JCQlpYy0+aWNfY292ZXJhZ2VjbGFzcyA9IHZhbHVlOwotLy8JCQlpZiAoSVNfVVBfQVVUTyh2YXApKQotLy8JCQkJaWVlZTgwMjExX25ld19zdGF0ZSh2YXAsIElFRUU4MDIxMV9TX1NDQU4sIDApOwotLy8JCQlyZXR2ID0gMDsKLS8vCQl9Ci0vLwkJZWxzZQotLy8JCQlyZXR2ID0gRUlOVkFMOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fQ09VTlRSWV9JRToKLS8vCQlpZiAodmFsdWUpCi0vLwkJCWljLT5pY19mbGFnc19leHQgfD0gSUVFRTgwMjExX0ZFWFRfQ09VTlRSWUlFOwotLy8JCWVsc2UKLS8vCQkJaWMtPmljX2ZsYWdzX2V4dCAmPSB+SUVFRTgwMjExX0ZFWFRfQ09VTlRSWUlFOwotLy8JCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9SRUdDTEFTUzoKLS8vCQlpZiAodmFsdWUpCi0vLwkJCWljLT5pY19mbGFnc19leHQgfD0gSUVFRTgwMjExX0ZFWFRfUkVHQ0xBU1M7Ci0vLwkJZWxzZQotLy8JCQlpYy0+aWNfZmxhZ3NfZXh0ICY9IH5JRUVFODAyMTFfRkVYVF9SRUdDTEFTUzsKLS8vCQlyZXR2ID0gRU5FVFJFU0VUOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fU0NBTlZBTElEOgotLy8JCXZhcC0+aXZfc2NhbnZhbGlkID0gdmFsdWUqSFo7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JTU0lfMTFBOgotLy8JCXZhcC0+aXZfcm9hbS5yc3NpMTFhID0gdmFsdWU7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JTU0lfMTFCOgotLy8JCXZhcC0+aXZfcm9hbS5yc3NpMTFiT25seSA9IHZhbHVlOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SU1NJXzExRzoKLS8vCQl2YXAtPml2X3JvYW0ucnNzaTExYiA9IHZhbHVlOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SQVRFXzExQToKLS8vCQl2YXAtPml2X3JvYW0ucmF0ZTExYSA9IHZhbHVlOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SQVRFXzExQjoKLS8vCQl2YXAtPml2X3JvYW0ucmF0ZTExYk9ubHkgPSB2YWx1ZTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUkFURV8xMUc6Ci0vLwkJdmFwLT5pdl9yb2FtLnJhdGUxMWIgPSB2YWx1ZTsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX1VBUFNESU5GTzoKLS8vCQlpZiAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fSE9TVEFQKSB7Ci0vLwkJCWlmIChpYy0+aWNfY2FwcyAmIElFRUU4MDIxMV9DX1VBUFNEKSB7Ci0vLwkJCQlpZiAodmFsdWUpCi0vLwkJCQkJSUVFRTgwMjExX1ZBUF9VQVBTRF9FTkFCTEUodmFwKTsKLS8vCQkJCWVsc2UKLS8vCQkJCQlJRUVFODAyMTFfVkFQX1VBUFNEX0RJU0FCTEUodmFwKTsKLS8vCQkJCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJCX0KLS8vCQl9Ci0vLwkJZWxzZSBpZiAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fU1RBKSB7Ci0vLwkJCXZhcC0+aXZfdWFwc2RpbmZvID0gdmFsdWU7Ci0vLwkJCUlFRUU4MDIxMV9WQVBfVUFQU0RfRU5BQkxFKHZhcCk7Ci0vLwkJCXJldHYgPSBFTkVUUkVTRVQ7Ci0vLwkJfQotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fU0xFRVA6Ci0vLwkJLyogWFhYOiBGb3JjZWQgc2xlZXAgZm9yIHRlc3RpbmcuIERvZXMgbm90IGFjdHVhbGx5IHBsYWNlIHRoZQotLy8JCSAqICAgICAgSFcgaW4gc2xlZXAgbW9kZSB5ZXQuIHRoaXMgb25seSBtYWtlcyBzZW5zZSBmb3IgU1RBcy4KLS8vCQkgKi8KLS8vCQlpZiAodmFsdWUpIHsKLS8vCQkJLyogZ290byBzbGVlcCAqLwotLy8JCQlJRUVFODAyMTFfVkFQX0dPVE9TTEVFUCh2YXApOwotLy8JCX0KLS8vCQllbHNlIHsKLS8vCQkJLyogd2FrZXVwICovCi0vLwkJCUlFRUU4MDIxMV9WQVBfV0FLRVVQKHZhcCk7Ci0vLwkJfQotLy8JCWllZWU4MDIxMV9zZW5kX251bGxkYXRhKGllZWU4MDIxMV9yZWZfbm9kZSh2YXAtPml2X2JzcykpOwotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fUU9TTlVMTDoKLS8vCQkvKiBGb3JjZSBhIFFvUyBOdWxsIGZvciB0ZXN0aW5nLiAqLwotLy8JCWllZWU4MDIxMV9zZW5kX3Fvc251bGxkYXRhKHZhcC0+aXZfYnNzLCB2YWx1ZSk7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9QU1BPTEw6Ci0vLwkJLyogRm9yY2UgYSBQUy1QT0xMIGZvciB0ZXN0aW5nLiAqLwotLy8JCWllZWU4MDIxMV9zZW5kX3BzcG9sbCh2YXAtPml2X2Jzcyk7Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9FT1NQRFJPUDoKLS8vCQlpZiAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fSE9TVEFQKSB7Ci0vLwkJCWlmICh2YWx1ZSkgSUVFRTgwMjExX1ZBUF9FT1NQRFJPUF9FTkFCTEUodmFwKTsKLS8vCQkJZWxzZSBJRUVFODAyMTFfVkFQX0VPU1BEUk9QX0RJU0FCTEUodmFwKTsKLS8vCQl9Ci0vLwkJYnJlYWs7Ci0vLwljYXNlIElFRUU4MDIxMV9QQVJBTV9NQVJLREZTOgotLy8JCWlmICh2YWx1ZSkKLS8vCQkJaWMtPmljX2ZsYWdzX2V4dCB8PSBJRUVFODAyMTFfRkVYVF9NQVJLREZTOwotLy8JCWVsc2UKLS8vCQkJaWMtPmljX2ZsYWdzX2V4dCAmPSB+SUVFRTgwMjExX0ZFWFRfTUFSS0RGUzsKLS8vCQlicmVhazsKLS8vCWNhc2UgSUVFRTgwMjExX1BBUkFNX0NIQU5CVzoKLS8vCQlzd2l0Y2ggKHZhbHVlKSB7Ci0vLwkJCWNhc2UgMDoKLS8vCQkJCWljLT5pY19jaGFuYndmbGFnID0gMDsKLS8vCQkJCWJyZWFrOwotLy8JCQljYXNlIDE6Ci0vLwkJCQlpYy0+aWNfY2hhbmJ3ZmxhZyA9IElFRUU4MDIxMV9DSEFOX0hBTEY7Ci0vLwkJCQlicmVhazsKLS8vCQkJY2FzZSAyOgotLy8JCQkJaWMtPmljX2NoYW5id2ZsYWcgPSBJRUVFODAyMTFfQ0hBTl9RVUFSVEVSOwotLy8JCQkJYnJlYWs7Ci0vLwkJCWRlZmF1bHQ6Ci0vLwkJCQlyZXR2ID0gRUlOVkFMOwotLy8JCQkJYnJlYWs7Ci0vLwkJfQotLy8JCWJyZWFrOwotLy8JY2FzZSBJRUVFODAyMTFfUEFSQU1fU0hPUlRQUkVBTUJMRToKLS8vCQlpZiAodmFsdWUpIHsKLS8vCQkJaWMtPmljX2NhcHMgfD0gSUVFRTgwMjExX0NfU0hQUkVBTUJMRTsKLS8vCQl9IGVsc2UgewotLy8JCQlpYy0+aWNfY2FwcyAmPSB+SUVFRTgwMjExX0NfU0hQUkVBTUJMRTsKLS8vCQl9Ci0vLwkJcmV0diA9IEVORVRSRVNFVDsKLS8vCQlicmVhazsKLS8vCWRlZmF1bHQ6Ci0vLwkJcmV0diA9IEVPUE5PVFNVUFA7Ci0vLwkJYnJlYWs7Ci0vLwl9Ci0vLwkvKiBYWFggc2hvdWxkIGFueSBvZiB0aGVzZSBjYXVzZSBhIHJlc2Nhbj8gKi8KLS8vCWlmIChyZXR2ID09IEVORVRSRVNFVCkKLS8vCQlyZXR2ID0gSVNfVVBfQVVUTyh2YXApID8gaWVlZTgwMjExX29wZW4odmFwLT5pdl9kZXYpIDogMDsKLS8vCXJldHVybiAtcmV0djsKLS8vfQorLyppbnQgdXNiZHJ2d2V4dF9zZXRwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorKgkJICAgCSB2b2lkICp3LCBjaGFyICpleHRyYSkKKyp7CisqCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IGRldi0+bWxfcHJpdjsKKyoJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2X2ljOworKglzdHJ1Y3QgaWVlZTgwMjExX3JzbnBhcm1zICpyc24gPSAmdmFwLT5pdl9ic3MtPm5pX3JzbjsKKyoJaW50ICppID0gKGludCAqKSBleHRyYTsKKyoJaW50IHBhcmFtID0gaVswXTsJCS8vIHBhcmFtZXRlciBpZCBpcyAxc3QKKyoJaW50IHZhbHVlID0gaVsxXTsJCS8vIE5COiBtb3N0IHZhbHVlcyBhcmUgVFlQRV9JTlQKKyoJaW50IHJldHYgPSAwOworKglpbnQgaiwgY2FwczsKKyoJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9hdXRoZW50aWNhdG9yICphdXRoOworKgljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2FjbGF0b3IgKmFjbDsKKyoKKyoJc3dpdGNoIChwYXJhbSkgeworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9BVVRITU9ERToKKyoJCXN3aXRjaCAodmFsdWUpIHsKKyoJCWNhc2UgSUVFRTgwMjExX0FVVEhfV1BBOgkvLyBXUEEKKyoJCWNhc2UgSUVFRTgwMjExX0FVVEhfODAyMVg6CS8vIDgwMi4xeAorKgkJY2FzZSBJRUVFODAyMTFfQVVUSF9PUEVOOgkvLyBvcGVuCisqCQljYXNlIElFRUU4MDIxMV9BVVRIX1NIQVJFRDoJLy8gc2hhcmVkLWtleQorKgkJY2FzZSBJRUVFODAyMTFfQVVUSF9BVVRPOgkvLyBhdXRvCisqCQkJYXV0aCA9IGllZWU4MDIxMV9hdXRoZW50aWNhdG9yX2dldCh2YWx1ZSk7CisqCQkJaWYgKGF1dGggPT0gTlVMTCkKKyoJCQkJcmV0dXJuIC1FSU5WQUw7CisqCQkJYnJlYWs7CisqCQlkZWZhdWx0OgorKgkJCXJldHVybiAtRUlOVkFMOworKgkJfQorKgkJc3dpdGNoICh2YWx1ZSkgeworKgkJY2FzZSBJRUVFODAyMTFfQVVUSF9XUEE6CS8vIFdQQSB3LyA4MDIuMXgKKyoJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1BSSVZBQ1k7CisqCQkJdmFsdWUgPSBJRUVFODAyMTFfQVVUSF84MDIxWDsKKyoJCQlicmVhazsKKyoJCWNhc2UgSUVFRTgwMjExX0FVVEhfT1BFTjoJLy8gb3BlbgorKgkJdmFwLT5pdl9mbGFncyAmPSB+KElFRUU4MDIxMV9GX1dQQSB8IElFRUU4MDIxMV9GX1BSSVZBQ1kpOworKgkJCWJyZWFrOworKgkJY2FzZSBJRUVFODAyMTFfQVVUSF9TSEFSRUQ6CS8vIHNoYXJlZC1rZXkKKyoJCWNhc2UgSUVFRTgwMjExX0FVVEhfQVVUTzoJLy8gYXV0bworKgkJY2FzZSBJRUVFODAyMTFfQVVUSF84MDIxWDoJLy8gODAyLjF4CisqCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfV1BBOworKgkJCS8vIGJvdGggcmVxdWlyZSBhIGtleSBzbyBtYXJrIHRoZSBQUklWQUNZIGNhcGFiaWxpdHkKKyoJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1BSSVZBQ1k7CisqCQkJYnJlYWs7CisqCQl9CisqCQkvLyBOQjogYXV0aGVudGljYXRvciBhdHRhY2gvZGV0YWNoIGhhcHBlbnMgb24gc3RhdGUgY2hhbmdlCisqCQl2YXAtPml2X2Jzcy0+bmlfYXV0aG1vZGUgPSB2YWx1ZTsKKyoJCS8vIFhYWCBtaXhlZC9tb2RlL3VzYWdlPworKgkJdmFwLT5pdl9hdXRoID0gYXV0aDsKKyoJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUFJPVE1PREU6CisqCQlpZiAodmFsdWUgPiBJRUVFODAyMTFfUFJPVF9SVFNDVFMpCisqCQkJcmV0dXJuIC1FSU5WQUw7CisqCQlpYy0+aWNfcHJvdG1vZGUgPSB2YWx1ZTsKKyoJCS8vIE5COiBpZiBub3Qgb3BlcmF0aW5nIGluIDExZyB0aGlzIGNhbiB3YWl0CisqCQlpZiAoaWMtPmljX2Jzc2NoYW4gIT0gSUVFRTgwMjExX0NIQU5fQU5ZQyAmJgorKgkJICAgIElFRUU4MDIxMV9JU19DSEFOX0FOWUcoaWMtPmljX2Jzc2NoYW4pKQorKgkJCXJldHYgPSBFTkVUUkVTRVQ7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fTUNBU1RDSVBIRVI6CisqCQlpZiAoKHZhcC0+aXZfY2FwcyAmIGNpcGhlcjJjYXAodmFsdWUpKSA9PSAwICYmCisqCQkgICAgIWllZWU4MDIxMV9jcnlwdG9fYXZhaWxhYmxlKHZhbHVlKSkKKyoJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCXJzbi0+cnNuX21jYXN0Y2lwaGVyID0gdmFsdWU7CisqCQlpZiAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkKKyoJCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX01DQVNUS0VZTEVOOgorKgkJaWYgKCEoMCA8IHZhbHVlICYmIHZhbHVlIDwgSUVFRTgwMjExX0tFWUJVRl9TSVpFKSkKKyoJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCS8vIFhYWCBubyB3YXkgdG8gdmVyaWZ5IGRyaXZlciBjYXBhYmlsaXR5CisqCQlyc24tPnJzbl9tY2FzdGtleWxlbiA9IHZhbHVlOworKgkJaWYgKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpCisqCQkJcmV0diA9IEVORVRSRVNFVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9VQ0FTVENJUEhFUlM6CisqCisqCQkgLy8gQ29udmVydCBjaXBoZXIgc2V0IHRvIGVxdWl2YWxlbnQgY2FwYWJpbGl0aWVzLgorKgkJIC8vIE5COiB0aGlzIGxvZ2ljIGludGVudGlvbmFsbHkgaWdub3JlcyB1bmtub3duIGFuZAorKgkJIC8vIHVuc3VwcG9ydGVkIGNpcGhlcnMgc28gZm9sa3MgY2FuIHNwZWNpZnkgMHhmZiBvcgorKgkJIC8vIHNpbWlsYXIgYW5kIGdldCBhbGwgYXZhaWxhYmxlIGNpcGhlcnMuCisqCisqCQljYXBzID0gMDsKKyoJCWZvciAoaiA9IDE7IGogPCAzMjsgaisrKQkvLyBOQjogc2tpcCBXRVAKKyoJCQlpZiAoKHZhbHVlICYgKDE8PGopKSAmJgorKgkJCSAgICAoKHZhcC0+aXZfY2FwcyAmIGNpcGhlcjJjYXAoaikpIHx8CisqCQkJICAgICBpZWVlODAyMTFfY3J5cHRvX2F2YWlsYWJsZShqKSkpCisqCQkJCWNhcHMgfD0gMTw8ajsKKyoJCWlmIChjYXBzID09IDApCQkJLy8gbm90aGluZyBhdmFpbGFibGUKKyoJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCS8vIFhYWCB2ZXJpZnkgY2lwaGVycyBvayBmb3IgdW5pY2FzdCB1c2U/CisqCQkvLyBYWFggZGlzYWxsb3cgaWYgcnVubmluZyBhcyBpdCdsbCBoYXZlIG5vIGVmZmVjdAorKgkJcnNuLT5yc25fdWNhc3RjaXBoZXJzZXQgPSBjYXBzOworKgkJaWYgKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpCisqCQkJcmV0diA9IEVORVRSRVNFVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9VQ0FTVENJUEhFUjoKKyoJCWlmICgocnNuLT5yc25fdWNhc3RjaXBoZXJzZXQgJiBjaXBoZXIyY2FwKHZhbHVlKSkgPT0gMCkKKyoJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCXJzbi0+cnNuX3VjYXN0Y2lwaGVyID0gdmFsdWU7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fVUNBU1RLRVlMRU46CisqCQlpZiAoISgwIDwgdmFsdWUgJiYgdmFsdWUgPCBJRUVFODAyMTFfS0VZQlVGX1NJWkUpKQorKgkJCXJldHVybiAtRUlOVkFMOworKgkJLy8gWFhYIG5vIHdheSB0byB2ZXJpZnkgZHJpdmVyIGNhcGFiaWxpdHkKKyoJCXJzbi0+cnNuX3VjYXN0a2V5bGVuID0gdmFsdWU7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fS0VZTUdUQUxHUzoKKyoJCS8vIFhYWCBjaGVjaworKgkJcnNuLT5yc25fa2V5bWdtdHNldCA9IHZhbHVlOworKgkJaWYgKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpCisqCQkJcmV0diA9IEVORVRSRVNFVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9SU05DQVBTOgorKgkJLy8gWFhYIGNoZWNrCisqCQlyc24tPnJzbl9jYXBzID0gdmFsdWU7CisqCQlpZiAodmFwLT5pdl9mbGFncyAmIElFRUU4MDIxMV9GX1dQQSkKKyoJCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1dQQToKKyoJCWlmICh2YWx1ZSA+IDMpCisqCQkJcmV0dXJuIC1FSU5WQUw7CisqCQkvLyBYWFggdmVyaWZ5IGNpcGhlcnMgYXZhaWxhYmxlCisqCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9XUEE7CisqCQlzd2l0Y2ggKHZhbHVlKSB7CisqCQljYXNlIDE6CisqCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9XUEExOworKgkJCWJyZWFrOworKgkJY2FzZSAyOgorKgkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfV1BBMjsKKyoJCQlicmVhazsKKyoJCWNhc2UgMzoKKyoJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1dQQTEgfCBJRUVFODAyMTFfRl9XUEEyOworKgkJCWJyZWFrOworKgkJfQorKgkJcmV0diA9IEVORVRSRVNFVDsJCS8vIFhYWD8KKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNSU5HOgorKgkJaWYgKCEoSUVFRTgwMjExX1JPQU1JTkdfREVWSUNFIDw9IHZhbHVlICYmCisqCQkgICAgdmFsdWUgPD0gSUVFRTgwMjExX1JPQU1JTkdfTUFOVUFMKSkKKyoJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCWljLT5pY19yb2FtaW5nID0gdmFsdWU7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUFJJVkFDWToKKyoJCWlmICh2YWx1ZSkgeworKgkJCS8vIFhYWCBjaGVjayBmb3Iga2V5IHN0YXRlPworKgkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfUFJJVkFDWTsKKyoJCX0gZWxzZQorKgkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1BSSVZBQ1k7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fRFJPUFVORU5DUllQVEVEOgorKgkJaWYgKHZhbHVlKQorKgkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfRFJPUFVORU5DOworKgkJZWxzZQorKgkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX0RST1BVTkVOQzsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9DT1VOVEVSTUVBU1VSRVM6CisqCQlpZiAodmFsdWUpIHsKKyoJCQlpZiAoKHZhcC0+aXZfZmxhZ3MgJiBJRUVFODAyMTFfRl9XUEEpID09IDApCisqCQkJCXJldHVybiAtRUlOVkFMOworKgkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfQ09VTlRFUk07CisqCQl9IGVsc2UKKyoJCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9DT1VOVEVSTTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9EUklWRVJfQ0FQUzoKKyoJCXZhcC0+aXZfY2FwcyA9IHZhbHVlOwkJLy8gTkI6IGZvciB0ZXN0aW5nCisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fTUFDQ01EOgorKgkJYWNsID0gdmFwLT5pdl9hY2w7CisqCQlzd2l0Y2ggKHZhbHVlKSB7CisqCQljYXNlIElFRUU4MDIxMV9NQUNDTURfUE9MSUNZX09QRU46CisqCQljYXNlIElFRUU4MDIxMV9NQUNDTURfUE9MSUNZX0FMTE9XOgorKgkJY2FzZSBJRUVFODAyMTFfTUFDQ01EX1BPTElDWV9ERU5ZOgorKgkJCWlmIChhY2wgPT0gTlVMTCkgeworKgkJCQlhY2wgPSBpZWVlODAyMTFfYWNsYXRvcl9nZXQoIm1hYyIpOworKgkJCQlpZiAoYWNsID09IE5VTEwgfHwgIWFjbC0+aWFjX2F0dGFjaCh2YXApKQorKgkJCQkJcmV0dXJuIC1FSU5WQUw7CisqCQkJCXZhcC0+aXZfYWNsID0gYWNsOworKgkJCX0KKyoJCQlhY2wtPmlhY19zZXRwb2xpY3kodmFwLCB2YWx1ZSk7CisqCQkJYnJlYWs7CisqCQljYXNlIElFRUU4MDIxMV9NQUNDTURfRkxVU0g6CisqCQkJaWYgKGFjbCAhPSBOVUxMKQorKgkJCQlhY2wtPmlhY19mbHVzaCh2YXApOworKgkJCS8vIE5COiBzaWxlbnRseSBpZ25vcmUgd2hlbiBub3QgaW4gdXNlCisqCQkJYnJlYWs7CisqCQljYXNlIElFRUU4MDIxMV9NQUNDTURfREVUQUNIOgorKgkJCWlmIChhY2wgIT0gTlVMTCkgeworKgkJCQl2YXAtPml2X2FjbCA9IE5VTEw7CisqCQkJCWFjbC0+aWFjX2RldGFjaCh2YXApOworKgkJCX0KKyoJCQlicmVhazsKKyoJCX0KKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9XTU06CisqCQlpZiAoaWMtPmljX2NhcHMgJiBJRUVFODAyMTFfQ19XTUUpeworKgkJCWlmICh2YWx1ZSkgeworKgkJCQl2YXAtPml2X2ZsYWdzIHw9IElFRUU4MDIxMV9GX1dNRTsKKyoJCQkJICovLyogWFhYIG5lZWRlZCBieSBpY19yZXNldCAqLy8qCisqCQkJCXZhcC0+aXZfaWMtPmljX2ZsYWdzIHw9IElFRUU4MDIxMV9GX1dNRTsKKyoJCQl9CisqCQkJZWxzZSB7CisqCQkJCSovLyogWFhYIG5lZWRlZCBieSBpY19yZXNldCAqLy8qCisqCQkJCXZhcC0+aXZfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1dNRTsKKyoJCQkJdmFwLT5pdl9pYy0+aWNfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX1dNRTsKKyoJCQl9CisqCQkJcmV0diA9IEVORVRSRVNFVDsJLy8gUmVuZWdvdGlhdGUgZm9yIGNhcGFiaWxpdGllcworKgkJfQorKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0hJREVTU0lEOgorKgkJaWYgKHZhbHVlKQorKgkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfSElERVNTSUQ7CisqCQllbHNlCisqCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfSElERVNTSUQ7CisqCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0FQQlJJREdFOgorKgkJaWYgKHZhbHVlID09IDApCisqCQkJdmFwLT5pdl9mbGFncyB8PSBJRUVFODAyMTFfRl9OT0JSSURHRTsKKyoJCWVsc2UKKyoJCQl2YXAtPml2X2ZsYWdzICY9IH5JRUVFODAyMTFfRl9OT0JSSURHRTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9JTkFDVDoKKyoJCXZhcC0+aXZfaW5hY3RfcnVuID0gdmFsdWUgLyBJRUVFODAyMTFfSU5BQ1RfV0FJVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9JTkFDVF9BVVRIOgorKgkJdmFwLT5pdl9pbmFjdF9hdXRoID0gdmFsdWUgLyBJRUVFODAyMTFfSU5BQ1RfV0FJVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9JTkFDVF9JTklUOgorKgkJdmFwLT5pdl9pbmFjdF9pbml0ID0gdmFsdWUgLyBJRUVFODAyMTFfSU5BQ1RfV0FJVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9BQk9MVDoKKyoJCWNhcHMgPSAwOworKgorKgkJIC8vIE1hcCBhYm9sdCBzZXR0aW5ncyB0byBjYXBhYmlsaXR5IGJpdHM7CisqCQkgLy8gdGhpcyBhbHNvIHN0cmlwcyB1bmtub3duL3Vud2FudGVkIGJpdHMuCisqCisqCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfVFVSQk9fUFJJTUUpCisqCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19UVVJCT1A7CisqCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfQ09NUFJFU1NJT04pCisqCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19DT01QOworKgkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX0ZBU1RfRlJBTUUpCisqCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19GRjsKKyoJCWlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9YUikKKyoJCQljYXBzIHw9IElFRUU4MDIxMV9BVEhDX1hSOworKgkJaWYgKHZhbHVlICYgSUVFRTgwMjExX0FCT0xUX0FSKQorKgkJCWNhcHMgfD0gSUVFRTgwMjExX0FUSENfQVI7CisqCQlpZiAodmFsdWUgJiBJRUVFODAyMTFfQUJPTFRfQlVSU1QpCisqCQkJY2FwcyB8PSBJRUVFODAyMTFfQVRIQ19CVVJTVDsKKyogICAgICAgIGlmICh2YWx1ZSAmIElFRUU4MDIxMV9BQk9MVF9XTUVfRUxFKQorKiAgICAgICAgICAgIGNhcHMgfD0gSUVFRTgwMjExX0FUSENfV01FOworKgkJLy8gdmVyaWZ5IHJlcXVlc3RlZCBjYXBhYmlsaXRpZXMgYXJlIHN1cHBvcnRlZAorKgkJaWYgKChjYXBzICYgaWMtPmljX2F0aF9jYXApICE9IGNhcHMpCisqCQkJcmV0dXJuIC1FSU5WQUw7CisqCQlpZiAodmFwLT5pdl9hdGhfY2FwICE9IGNhcHMpIHsKKyoJCQlpZiAoKHZhcC0+aXZfYXRoX2NhcCBeIGNhcHMpICYgSUVFRTgwMjExX0FUSENfVFVSQk9QKSB7CisqCQkJCWlmIChpZWVlODAyMTFfc2V0X3R1cmJvKGRldiwKKyoJCQkJCQljYXBzICYgSUVFRTgwMjExX0FUSENfVFVSQk9QKSkKKyoJCQkJCXJldHVybiAtRUlOVkFMOworKgkJCQlpZWVlODAyMTFfc2Nhbl9mbHVzaChpYyk7CisqCQkJfQorKgkJCXZhcC0+aXZfYXRoX2NhcCA9IGNhcHM7CisqCQkJaWMtPmljX2F0aGNhcHNldHVwKHZhcC0+aXZfaWMsIHZhcC0+aXZfYXRoX2NhcCk7CisqCQkJcmV0diA9IEVORVRSRVNFVDsKKyoJCX0KKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9EVElNX1BFUklPRDoKKyoJCWlmICh2YXAtPml2X29wbW9kZSAhPSBJRUVFODAyMTFfTV9IT1NUQVAgJiYKKyoJCSAgICB2YXAtPml2X29wbW9kZSAhPSBJRUVFODAyMTFfTV9JQlNTKQorKgkJCXJldHVybiAtRUlOVkFMOworKgkJaWYgKElFRUU4MDIxMV9EVElNX01JTiA8PSB2YWx1ZSAmJgorKgkJICAgIHZhbHVlIDw9IElFRUU4MDIxMV9EVElNX01BWCkgeworKgkJCXZhcC0+aXZfZHRpbV9wZXJpb2QgPSB2YWx1ZTsKKyoJCQlyZXR2ID0gRU5FVFJFU0VUOwkJLy8gcmVxdWlyZXMgcmVzdGFydAorKgkJfSBlbHNlCisqCQkJcmV0diA9IEVJTlZBTDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9CRUFDT05fSU5URVJWQUw6CisqCQlpZiAodmFwLT5pdl9vcG1vZGUgIT0gSUVFRTgwMjExX01fSE9TVEFQICYmCisqCQkgICAgdmFwLT5pdl9vcG1vZGUgIT0gSUVFRTgwMjExX01fSUJTUykKKyoJCQlyZXR1cm4gLUVJTlZBTDsKKyoJCWlmIChJRUVFODAyMTFfQklOVFZBTF9NSU4gPD0gdmFsdWUgJiYKKyoJCSAgICB2YWx1ZSA8PSBJRUVFODAyMTFfQklOVFZBTF9NQVgpIHsKKyoJCQlpYy0+aWNfbGludHZhbCA9IHZhbHVlOwkJLy8gWFhYIG11bHRpLWJzcworKgkJCXJldHYgPSBFTkVUUkVTRVQ7CQkvLyByZXF1aXJlcyByZXN0YXJ0CisqCQl9IGVsc2UKKyoJCQlyZXR2ID0gRUlOVkFMOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0RPVEg6CisqCQlpZiAodmFsdWUpIHsKKyoJCQlpYy0+aWNfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfRE9USDsKKyoJCX0KKyoJCWVsc2UKKyoJCQlpYy0+aWNfZmxhZ3MgJj0gfklFRUU4MDIxMV9GX0RPVEg7CisqCQlyZXR2ID0gRU5FVFJFU0VUOwkvLyBYWFg6IG5lZWQgc29tZXRoaW5nIHRoaXMgZHJhc3RpYz8KKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9QV1JUQVJHRVQ6CisqCQlpYy0+aWNfY3VyY2hhbm1heHB3ciA9IHZhbHVlOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0dFTlJFQVNTT0M6CisqCQlJRUVFODAyMTFfU0VORF9NR01UKHZhcC0+aXZfYnNzLAorKgkJCQkJSUVFRTgwMjExX0ZDMF9TVUJUWVBFX1JFQVNTT0NfUkVRLCAwKTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9DT01QUkVTU0lPTjoKKyoJCXJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfQ09NUCwgdmFsdWUpOworKgkJYnJlYWs7CisqICAgIGNhc2UgSUVFRTgwMjExX1BBUkFNX1dNTV9BR0dSTU9ERToKKyogICAgICAgIHJldHYgPSBpZWVlODAyMTFfc2V0YXRoY2FwKHZhcCwgSUVFRTgwMjExX0FUSENfV01FLCB2YWx1ZSk7CisqICAgICAgICBicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fRkY6CisqCQlyZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX0ZGLCB2YWx1ZSk7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fVFVSQk86CisqCQlyZXR2ID0gaWVlZTgwMjExX3NldGF0aGNhcCh2YXAsIElFRUU4MDIxMV9BVEhDX1RVUkJPUCwgdmFsdWUpOworKgkJaWYgKHJldHYgPT0gRU5FVFJFU0VUKSB7CisqCQkJaWYoaWVlZTgwMjExX3NldF90dXJibyhkZXYsdmFsdWUpKQorKgkJCQkJcmV0dXJuIC1FSU5WQUw7CisqCQkJaWVlZTgwMjExX3NjYW5fZmx1c2goaWMpOworKgkJfQorKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1hSOgorKgkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19YUiwgdmFsdWUpOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0JVUlNUOgorKgkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19CVVJTVCwgdmFsdWUpOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0FSOgorKgkJcmV0diA9IGllZWU4MDIxMV9zZXRhdGhjYXAodmFwLCBJRUVFODAyMTFfQVRIQ19BUiwgdmFsdWUpOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1BVUkVHOgorKgkJaWYgKHZhbHVlKQorKgkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfUFVSRUc7CisqCQllbHNlCisqCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfUFVSRUc7CisqCQkvLyBOQjogcmVzZXQgb25seSBpZiB3ZSdyZSBvcGVyYXRpbmcgb24gYW4gMTFnIGNoYW5uZWwKKyoJCWlmIChpYy0+aWNfYnNzY2hhbiAhPSBJRUVFODAyMTFfQ0hBTl9BTllDICYmCisqCQkgICAgSUVFRTgwMjExX0lTX0NIQU5fQU5ZRyhpYy0+aWNfYnNzY2hhbikpCisqCQkJcmV0diA9IEVORVRSRVNFVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9XRFM6CisqCQlpZiAodmFsdWUpCisqCQkJdmFwLT5pdl9mbGFnc19leHQgfD0gSUVFRTgwMjExX0ZFWFRfV0RTOworKgkJZWxzZQorKgkJCXZhcC0+aXZfZmxhZ3NfZXh0ICY9IH5JRUVFODAyMTFfRkVYVF9XRFM7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQkdTQ0FOOgorKgkJaWYgKHZhbHVlKSB7CisqCQkJaWYgKCh2YXAtPml2X2NhcHMgJiBJRUVFODAyMTFfQ19CR1NDQU4pID09IDApCisqCQkJCXJldHVybiAtRUlOVkFMOworKgkJCXZhcC0+aXZfZmxhZ3MgfD0gSUVFRTgwMjExX0ZfQkdTQ0FOOworKgkJfSBlbHNlIHsKKyoJCQkvLyBYWFggcmFjZXk/CisqCQkJdmFwLT5pdl9mbGFncyAmPSB+SUVFRTgwMjExX0ZfQkdTQ0FOOworKgkJCWllZWU4MDIxMV9jYW5jZWxfc2Nhbih2YXApOwkvLyBhbnl0aGluZyBjdXJyZW50CisqCQl9CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQkdTQ0FOX0lETEU6CisqCQlpZiAodmFsdWUgPj0gSUVFRTgwMjExX0JHU0NBTl9JRExFX01JTikKKyoJCQl2YXAtPml2X2Jnc2NhbmlkbGUgPSB2YWx1ZSpIWi8xMDAwOworKgkJZWxzZQorKgkJCXJldHYgPSBFSU5WQUw7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fQkdTQ0FOX0lOVEVSVkFMOgorKgkJaWYgKHZhbHVlID49IElFRUU4MDIxMV9CR1NDQU5fSU5UVkFMX01JTikKKyoJCQl2YXAtPml2X2Jnc2NhbmludHZsID0gdmFsdWUqSFo7CisqCQllbHNlCisqCQkJcmV0diA9IEVJTlZBTDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9NQ0FTVF9SQVRFOgorKgkJLy8gdW5pdHMgYXJlIGluIEtJTE9iaXRzIHBlciBzZWNvbmQKKyoJCWlmICh2YWx1ZSA+PSAyNTYgJiYgdmFsdWUgPD0gNTQwMDApCisqCQkJdmFwLT5pdl9tY2FzdF9yYXRlID0gdmFsdWU7CisqCQllbHNlCisqCQkJcmV0diA9IEVJTlZBTDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9DT1ZFUkFHRV9DTEFTUzoKKyoJCWlmICh2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IElFRUU4MDIxMV9DT1ZFUkFHRV9DTEFTU19NQVgpIHsKKyoJCQlpYy0+aWNfY292ZXJhZ2VjbGFzcyA9IHZhbHVlOworKgkJCWlmIChJU19VUF9BVVRPKHZhcCkpCisqCQkJCWllZWU4MDIxMV9uZXdfc3RhdGUodmFwLCBJRUVFODAyMTFfU19TQ0FOLCAwKTsKKyoJCQlyZXR2ID0gMDsKKyoJCX0KKyoJCWVsc2UKKyoJCQlyZXR2ID0gRUlOVkFMOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX0NPVU5UUllfSUU6CisqCQlpZiAodmFsdWUpCisqCQkJaWMtPmljX2ZsYWdzX2V4dCB8PSBJRUVFODAyMTFfRkVYVF9DT1VOVFJZSUU7CisqCQllbHNlCisqCQkJaWMtPmljX2ZsYWdzX2V4dCAmPSB+SUVFRTgwMjExX0ZFWFRfQ09VTlRSWUlFOworKgkJcmV0diA9IEVORVRSRVNFVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9SRUdDTEFTUzoKKyoJCWlmICh2YWx1ZSkKKyoJCQlpYy0+aWNfZmxhZ3NfZXh0IHw9IElFRUU4MDIxMV9GRVhUX1JFR0NMQVNTOworKgkJZWxzZQorKgkJCWljLT5pY19mbGFnc19leHQgJj0gfklFRUU4MDIxMV9GRVhUX1JFR0NMQVNTOworKgkJcmV0diA9IEVORVRSRVNFVDsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9TQ0FOVkFMSUQ6CisqCQl2YXAtPml2X3NjYW52YWxpZCA9IHZhbHVlKkhaOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUlNTSV8xMUE6CisqCQl2YXAtPml2X3JvYW0ucnNzaTExYSA9IHZhbHVlOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1JPQU1fUlNTSV8xMUI6CisqCQl2YXAtPml2X3JvYW0ucnNzaTExYk9ubHkgPSB2YWx1ZTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JTU0lfMTFHOgorKgkJdmFwLT5pdl9yb2FtLnJzc2kxMWIgPSB2YWx1ZTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JBVEVfMTFBOgorKgkJdmFwLT5pdl9yb2FtLnJhdGUxMWEgPSB2YWx1ZTsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9ST0FNX1JBVEVfMTFCOgorKgkJdmFwLT5pdl9yb2FtLnJhdGUxMWJPbmx5ID0gdmFsdWU7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUk9BTV9SQVRFXzExRzoKKyoJCXZhcC0+aXZfcm9hbS5yYXRlMTFiID0gdmFsdWU7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fVUFQU0RJTkZPOgorKgkJaWYgKHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX0hPU1RBUCkgeworKgkJCWlmIChpYy0+aWNfY2FwcyAmIElFRUU4MDIxMV9DX1VBUFNEKSB7CisqCQkJCWlmICh2YWx1ZSkKKyoJCQkJCUlFRUU4MDIxMV9WQVBfVUFQU0RfRU5BQkxFKHZhcCk7CisqCQkJCWVsc2UKKyoJCQkJCUlFRUU4MDIxMV9WQVBfVUFQU0RfRElTQUJMRSh2YXApOworKgkJCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJCX0KKyoJCX0KKyoJCWVsc2UgaWYgKHZhcC0+aXZfb3Btb2RlID09IElFRUU4MDIxMV9NX1NUQSkgeworKgkJCXZhcC0+aXZfdWFwc2RpbmZvID0gdmFsdWU7CisqCQkJSUVFRTgwMjExX1ZBUF9VQVBTRF9FTkFCTEUodmFwKTsKKyoJCQlyZXR2ID0gRU5FVFJFU0VUOworKgkJfQorKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1NMRUVQOgorKgkJLy8gWFhYOiBGb3JjZWQgc2xlZXAgZm9yIHRlc3RpbmcuIERvZXMgbm90IGFjdHVhbGx5IHBsYWNlIHRoZQorKgkJLy8gICAgICBIVyBpbiBzbGVlcCBtb2RlIHlldC4gdGhpcyBvbmx5IG1ha2VzIHNlbnNlIGZvciBTVEFzLgorKgorKgkJaWYgKHZhbHVlKSB7CisqCQkJLy8gZ290byBzbGVlcAorKgkJCUlFRUU4MDIxMV9WQVBfR09UT1NMRUVQKHZhcCk7CisqCQl9CisqCQllbHNlIHsKKyoJCQkvLyB3YWtldXAKKyoJCQlJRUVFODAyMTFfVkFQX1dBS0VVUCh2YXApOworKgkJfQorKgkJaWVlZTgwMjExX3NlbmRfbnVsbGRhdGEoaWVlZTgwMjExX3JlZl9ub2RlKHZhcC0+aXZfYnNzKSk7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fUU9TTlVMTDoKKyoJCS8vIEZvcmNlIGEgUW9TIE51bGwgZm9yIHRlc3RpbmcuCisqCQlpZWVlODAyMTFfc2VuZF9xb3NudWxsZGF0YSh2YXAtPml2X2JzcywgdmFsdWUpOworKgkJYnJlYWs7CisqCWNhc2UgSUVFRTgwMjExX1BBUkFNX1BTUE9MTDoKKyoJCS8vIEZvcmNlIGEgUFMtUE9MTCBmb3IgdGVzdGluZy4KKyoJCWllZWU4MDIxMV9zZW5kX3BzcG9sbCh2YXAtPml2X2Jzcyk7CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fRU9TUERST1A6CisqCQlpZiAodmFwLT5pdl9vcG1vZGUgPT0gSUVFRTgwMjExX01fSE9TVEFQKSB7CisqCQkJaWYgKHZhbHVlKSBJRUVFODAyMTFfVkFQX0VPU1BEUk9QX0VOQUJMRSh2YXApOworKgkJCWVsc2UgSUVFRTgwMjExX1ZBUF9FT1NQRFJPUF9ESVNBQkxFKHZhcCk7CisqCQl9CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fTUFSS0RGUzoKKyoJCWlmICh2YWx1ZSkKKyoJCQlpYy0+aWNfZmxhZ3NfZXh0IHw9IElFRUU4MDIxMV9GRVhUX01BUktERlM7CisqCQllbHNlCisqCQkJaWMtPmljX2ZsYWdzX2V4dCAmPSB+SUVFRTgwMjExX0ZFWFRfTUFSS0RGUzsKKyoJCWJyZWFrOworKgljYXNlIElFRUU4MDIxMV9QQVJBTV9DSEFOQlc6CisqCQlzd2l0Y2ggKHZhbHVlKSB7CisqCQkJY2FzZSAwOgorKgkJCQlpYy0+aWNfY2hhbmJ3ZmxhZyA9IDA7CisqCQkJCWJyZWFrOworKgkJCWNhc2UgMToKKyoJCQkJaWMtPmljX2NoYW5id2ZsYWcgPSBJRUVFODAyMTFfQ0hBTl9IQUxGOworKgkJCQlicmVhazsKKyoJCQljYXNlIDI6CisqCQkJCWljLT5pY19jaGFuYndmbGFnID0gSUVFRTgwMjExX0NIQU5fUVVBUlRFUjsKKyoJCQkJYnJlYWs7CisqCQkJZGVmYXVsdDoKKyoJCQkJcmV0diA9IEVJTlZBTDsKKyoJCQkJYnJlYWs7CisqCQl9CisqCQlicmVhazsKKyoJY2FzZSBJRUVFODAyMTFfUEFSQU1fU0hPUlRQUkVBTUJMRToKKyoJCWlmICh2YWx1ZSkgeworKgkJCWljLT5pY19jYXBzIHw9IElFRUU4MDIxMV9DX1NIUFJFQU1CTEU7CisqCQl9IGVsc2UgeworKgkJCWljLT5pY19jYXBzICY9IH5JRUVFODAyMTFfQ19TSFBSRUFNQkxFOworKgkJfQorKgkJcmV0diA9IEVORVRSRVNFVDsKKyoJCWJyZWFrOworKglkZWZhdWx0OgorKgkJcmV0diA9IEVPUE5PVFNVUFA7CisqCQlicmVhazsKKyoJfQorKgkvLyBYWFggc2hvdWxkIGFueSBvZiB0aGVzZSBjYXVzZSBhIHJlc2Nhbj8KKyoJaWYgKHJldHYgPT0gRU5FVFJFU0VUKQorKgkJcmV0diA9IElTX1VQX0FVVE8odmFwKSA/IGllZWU4MDIxMV9vcGVuKHZhcC0+aXZfZGV2KSA6IDA7CisqCXJldHVybiAtcmV0djsKKyp9CisqLwogCiBpbnQgdXNiZHJ2d2V4dF9zZXRtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgIAkgdm9pZCAqdywgY2hhciAqZXh0cmEpCisJCQl2b2lkICp3LCBjaGFyICpleHRyYSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTE5NDcsMTU4ICsxODg3LDEzOCBAQAogaW50IHVzYmRydndleHRfZ2V0bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJdm9pZCAqdywgY2hhciAqZXh0cmEpCiB7Ci0JLy9zdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJLyogc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OyAqLwogCXN0cnVjdCBpd19wb2ludCAqd3JpID0gKHN0cnVjdCBpd19wb2ludCAqKWV4dHJhOwogCWNoYXIgbW9kZVs4XTsKIAotICAgIHN0cmNweShtb2RlLCIxMWciKTsKLQlyZXR1cm4gKGNvcHlfdG9fdXNlcih3cmktPnBvaW50ZXIsIG1vZGUsIDYpID8gLUVGQVVMVCA6IDApOworCXN0cmNweShtb2RlLCAiMTFnIik7CisJcmV0dXJuIGNvcHlfdG9fdXNlcih3cmktPnBvaW50ZXIsIG1vZGUsIDYpID8gLUVGQVVMVCA6IDA7CiB9CiAKIGludCB6ZkxueFByaXZhdGVJb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgemRhcF9pb2N0bCogemRyZXEpCiB7Ci0JLy92b2lkKiByZWdwID0gbWFjcC0+cmVncDsKKwkvKiB2b2lkKiByZWdwID0gbWFjcC0+cmVncDsgKi8KIAl1MTZfdCBjbWQ7Ci0JLy91MzJfdCB0ZW1wOwotCXUzMl90KiBwOworCS8qIHUzMl90IHRlbXA7ICovCisJdTMyX3QgKnA7CiAJdTMyX3QgaTsKIAogCWNtZCA9IHpkcmVxLT5jbWQ7Ci0Jc3dpdGNoKGNtZCkKLQl7CisJc3dpdGNoIChjbWQpIHsKIAljYXNlIFpNX0lPQ1RMX1JFR19SRUFEOgogCQl6ZmlEYmdSZWFkUmVnKGRldiwgemRyZXEtPmFkZHIpOwogCQlicmVhazsKLQogCWNhc2UgWk1fSU9DVExfUkVHX1dSSVRFOgogCQl6ZmlEYmdXcml0ZVJlZyhkZXYsIHpkcmVxLT5hZGRyLCB6ZHJlcS0+dmFsdWUpOwogCQlicmVhazsKLQogCWNhc2UgWk1fSU9DVExfTUVNX1JFQUQ6CiAJCXAgPSAodTMyX3QgKikgYnVzX3RvX3ZpcnQoemRyZXEtPmFkZHIpOwotCQlwcmludGsoS0VSTl9ERUJVRyAidXNiZHJ2OiByZWFkIG1lbW9yeSBhZGRyOiAweCUwOHggdmFsdWU6IDB4JTA4eFxuIiwgemRyZXEtPmFkZHIsICpwKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSJ1c2JkcnY6IHJlYWQgbWVtb3J5IGFkZHI6IDB4JTA4eCB2YWx1ZToiCisJCQkJIiAweCUwOHhcbiIsIHpkcmVxLT5hZGRyLCAqcCk7CiAJCWJyZWFrOwotCiAJY2FzZSBaTV9JT0NUTF9NRU1fV1JJVEU6CiAJCXAgPSAodTMyX3QgKikgYnVzX3RvX3ZpcnQoemRyZXEtPmFkZHIpOwogCQkqcCA9IHpkcmVxLT52YWx1ZTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInVzYmRydjogd3JpdGUgdmFsdWU6IDB4JTA4eCB0byBtZW1vcnkgYWRkcjogMHglMDh4XG4iLCB6ZHJlcS0+dmFsdWUsIHpkcmVxLT5hZGRyKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJInVzYmRydiA6IHdyaXRlIHZhbHVlIDogMHglMDh4IHRvIG1lbW9yeSBhZGRyIDoiCisJCQkiIDB4JTA4eFxuIiwgemRyZXEtPnZhbHVlLCB6ZHJlcS0+YWRkcik7CiAJCWJyZWFrOwotCi0JY2FzZSBaTV9JT0NUTF9UQUxMWSA6CisJY2FzZSBaTV9JT0NUTF9UQUxMWToKIAkJemZpV2xhblNob3dUYWxseShkZXYpOwogCQlpZiAoemRyZXEtPmFkZHIpCiAJCQl6ZmlXbGFuUmVzZXRUYWxseShkZXYpOwogCQlicmVhazsKKwljYXNlIFpNX0lPQ1RMX1RFU1Q6CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkiWk1fSU9DVExfVEVTVDpsZW49JWRcbiIsIHpkcmVxLT5hZGRyKTsKKwkJLyogemZpV2xhblJlYWRSZWcoZGV2LCAweDEwZjQwMCk7ICovCisJCS8qIHpmaVdsYW5SZWFkUmVnKGRldiwgMHgxMGY0MDQpOyAqLworCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0NUTCBURVNUXG4iKTsKKwkJI2lmIDEKKwkJLyogcHJpbnQgcGFja2V0ICovCisJCWZvciAoaSA9IDA7IGkgPCB6ZHJlcS0+YWRkcjsgaSsrKSB7CisJCQlpZiAoKGkmMHg3KSA9PSAwKQorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlMDJYICIsCisJCQkJCSh1bnNpZ25lZCBjaGFyKXpkcmVxLT5kYXRhW2ldKTsKKwkJfQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJcbiIpOworCQkjZW5kaWYKIAotCWNhc2UgWk1fSU9DVExfVEVTVCA6Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiWk1fSU9DVExfVEVTVDpsZW49JWRcbiIsIHpkcmVxLT5hZGRyKTsKLSAgICAgICAgICAgIC8vemZpV2xhblJlYWRSZWcoZGV2LCAweDEwZjQwMCk7Ci0gICAgICAgICAgICAvL3pmaVdsYW5SZWFkUmVnKGRldiwgMHgxMGY0MDQpOwotICAgICAgICAgICAgcHJpbnRrKCJJT0NUTCBURVNUXG4iKTsKLSAgICAgICAgICAgICNpZiAxCi0gICAgICAgICAgICAvL3ByaW50IHBhY2tldAotICAgICAgICAgICAgZm9yIChpPTA7IGk8emRyZXEtPmFkZHI7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoKGkmMHg3KSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGsoIiUwMlggIiwgKHVuc2lnbmVkIGNoYXIpemRyZXEtPmRhdGFbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgICAgICAgICAgI2VuZGlmCisJCS8qIEZvciBUZXN0Pz8gMSB0byAwIGJ5IENXWWFuZygtKSAqLworCQkjaWYgMAorCQkJc3RydWN0IHNrX2J1ZmYgKnM7CiAKKwkJCS8qIEFsbG9jYXRlIGEgc2tiICovCisJCQlzID0gYWxsb2Nfc2tiKDIwMDAsIEdGUF9BVE9NSUMpOwogCi0gICAgICAgICAgICAjaWYgMCAvL0ZvciBUZXN0Pz8gMSB0byAwIGJ5IENXWWFuZygtKQotICAgICAgICAgICAgewotICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYqIHM7CisJCQkvKiBDb3B5IGRhdGEgdG8gc2tiICovCisJCQlmb3IgKGkgPSAwOyBpIDwgemRyZXEtPmFkZHI7IGkrKykKKwkJCQlzLT5kYXRhW2ldID0gemRyZXEtPmRhdGFbaV07CisJCQlzLT5sZW4gPSB6ZHJlcS0+YWRkcjsKIAotICAgICAgICAgICAgLyogQWxsb2NhdGUgYSBza2IgKi8KLSAgICAgICAgICAgIHMgPSBhbGxvY19za2IoMjAwMCwgR0ZQX0FUT01JQyk7CisJCQkvKiBDYWxsIHpmSWRsUmVjdigpICovCisJCQl6ZmlSZWN2ODAyMTEoZGV2LCBzLCBOVUxMKTsKKwkJI2VuZGlmCisJCWJyZWFrOworCS8qKioqKioqKioqKioqKioqKioqKioqKioqIFpEQ09ORklHICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwljYXNlIFpNX0lPQ1RMX0ZSQUc6CisJCXpmaVdsYW5TZXRGcmFnVGhyZXNob2xkKGRldiwgemRyZXEtPmFkZHIpOworCQlicmVhazsKKwljYXNlIFpNX0lPQ1RMX1JUUzoKKwkJemZpV2xhblNldFJ0c1RocmVzaG9sZChkZXYsIHpkcmVxLT5hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBaTV9JT0NUTF9TQ0FOOgorCQl6ZmlXbGFuU2NhbihkZXYpOworCQlicmVhazsKKwljYXNlIFpNX0lPQ1RMX0tFWTogeworCQl1OF90IGtleVsyOV07CisJCXN0cnVjdCB6c0tleUluZm8ga2V5SW5mbzsKKwkJdTMyX3QgaTsKIAotICAgICAgICAgICAgLyogQ29weSBkYXRhIHRvIHNrYiAqLwotICAgICAgICAgICAgZm9yIChpPTA7IGk8emRyZXEtPmFkZHI7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzLT5kYXRhW2ldID0gemRyZXEtPmRhdGFbaV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzLT5sZW4gPSB6ZHJlcS0+YWRkcjsKKwkJZm9yIChpID0gMDsgaSA8IDI5OyBpKyspCisJCQlrZXlbaV0gPSAwOwogCi0gICAgICAgICAgICAvKiBDYWxsIHpmSWRsUmVjdigpICovCi0gICAgICAgICAgICB6ZmlSZWN2ODAyMTEoZGV2LCBzLCBOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICNlbmRpZgorCQlmb3IgKGkgPSAwOyBpIDwgemRyZXEtPmFkZHI7IGkrKykKKwkJCWtleVtpXSA9IHpkcmVxLT5kYXRhW2ldOwogCi0gICAgICAgICAgICBicmVhazsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImtleSBsZW49JWQsIGtleT0lMDJ4JTAyeCUwMnglMDJ4JTAyeC4uLlxuIiwKKwkJCXpkcmVxLT5hZGRyLCBrZXlbMF0sIGtleVsxXSwga2V5WzJdLCBrZXlbM10sIGtleVs0XSk7CiAKKwkJa2V5SW5mby5rZXlMZW5ndGggPSB6ZHJlcS0+YWRkcjsKKwkJa2V5SW5mby5rZXlJbmRleCA9IDA7CisJCWtleUluZm8uZmxhZyA9IDA7CisJCWtleUluZm8ua2V5ID0ga2V5OworCQl6ZmlXbGFuU2V0S2V5KGRldiwga2V5SW5mbyk7CisJfQorCQlicmVhazsKKwljYXNlIFpNX0lPQ1RMX1JBVEU6CisJCXpmaVdsYW5TZXRUeFJhdGUoZGV2LCB6ZHJlcS0+YWRkcik7CisJCWJyZWFrOworCWNhc2UgWk1fSU9DVExfRU5DUllQVElPTl9NT0RFOgorCQl6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgemRyZXEtPmFkZHIpOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFpEQ09ORklHICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAgICAgY2FzZSBaTV9JT0NUTF9GUkFHIDoKLSAgICAgICAgICAgIHpmaVdsYW5TZXRGcmFnVGhyZXNob2xkKGRldiwgemRyZXEtPmFkZHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBaTV9JT0NUTF9SVFMgOgotICAgICAgICAgICAgemZpV2xhblNldFJ0c1RocmVzaG9sZChkZXYsIHpkcmVxLT5hZGRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgWk1fSU9DVExfU0NBTiA6Ci0gICAgICAgICAgICB6ZmlXbGFuU2NhbihkZXYpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBaTV9JT0NUTF9LRVkgOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHU4X3Qga2V5WzI5XTsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgenNLZXlJbmZvIGtleUluZm87Ci0gICAgICAgICAgICAgICAgdTMyX3QgaTsKLQotICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDI5OyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBrZXlbaV0gPSAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPHpkcmVxLT5hZGRyOyBpKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBrZXlbaV0gPSB6ZHJlcS0+ZGF0YVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwcmludGsoImtleSBsZW49JWQsIGtleT0lMDJ4JTAyeCUwMnglMDJ4JTAyeC4uLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHpkcmVxLT5hZGRyLCBrZXlbMF0sIGtleVsxXSwga2V5WzJdLCBrZXlbM10sIGtleVs0XSk7Ci0KLSAgICAgICAgICAgICAgICBrZXlJbmZvLmtleUxlbmd0aCA9IHpkcmVxLT5hZGRyOwotICAgICAgICAgICAgICAgIGtleUluZm8ua2V5SW5kZXggPSAwOwotICAgICAgICAgICAgICAgIGtleUluZm8uZmxhZyA9IDA7Ci0gICAgICAgICAgICAgICAga2V5SW5mby5rZXkgPSBrZXk7Ci0gICAgICAgICAgICAgICAgemZpV2xhblNldEtleShkZXYsIGtleUluZm8pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBaTV9JT0NUTF9SQVRFIDoKLSAgICAgICAgICAgIHpmaVdsYW5TZXRUeFJhdGUoZGV2LCB6ZHJlcS0+YWRkcik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFpNX0lPQ1RMX0VOQ1JZUFRJT05fTU9ERSA6Ci0gICAgICAgICAgICB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgemRyZXEtPmFkZHIpOwotCi0gICAgICAgICAgICB6ZmlXbGFuRGlzYWJsZShkZXYsIDApOwotICAgICAgICAgICAgemZpV2xhbkVuYWJsZShkZXYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vQ1dZYW5nKCspCi0gICAgICAgIGNhc2UgWk1fSU9DVExfU0lHTkFMX1NUUkVOR1RIIDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1OF90IGJ1ZmZlclsyXTsKLSAgICAgICAgICAgICAgICB6ZmlXbGFuUXVlcnlTaWduYWxJbmZvKGRldiwgJmJ1ZmZlclswXSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJDdXJyZW50IFNpZ25hbCBTdHJlbmd0aCA6ICUwMmRcbiIsIGJ1ZmZlclswXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy9DV1lhbmcoKykKLSAgICAgICAgY2FzZSBaTV9JT0NUTF9TSUdOQUxfUVVBTElUWSA6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdThfdCBidWZmZXJbMl07Ci0gICAgICAgICAgICAgICAgemZpV2xhblF1ZXJ5U2lnbmFsSW5mbyhkZXYsICZidWZmZXJbMF0pOwotICAgICAgICAgICAgICAgIHByaW50aygiQ3VycmVudCBTaWduYWwgUXVhbGl0eSA6ICUwMmRcbiIsIGJ1ZmZlclsxXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQorCQl6ZmlXbGFuRGlzYWJsZShkZXYsIDApOworCQl6ZmlXbGFuRW5hYmxlKGRldik7CisJCWJyZWFrOworCQkvKiBDV1lhbmcoKykgKi8KKwljYXNlIFpNX0lPQ1RMX1NJR05BTF9TVFJFTkdUSDogeworCQl1OF90IGJ1ZmZlclsyXTsKKwkJemZpV2xhblF1ZXJ5U2lnbmFsSW5mbyhkZXYsICZidWZmZXJbMF0pOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkiQ3VycmVudCBTaWduYWwgU3RyZW5ndGggOiAlMDJkXG4iLCBidWZmZXJbMF0pOworCX0KKwkJYnJlYWs7CisJCS8qIENXWWFuZygrKSAqLworCWNhc2UgWk1fSU9DVExfU0lHTkFMX1FVQUxJVFk6IHsKKwkJdThfdCBidWZmZXJbMl07CisJCXpmaVdsYW5RdWVyeVNpZ25hbEluZm8oZGV2LCAmYnVmZmVyWzBdKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIkN1cnJlbnQgU2lnbmFsIFF1YWxpdHkgOiAlMDJkXG4iLCBidWZmZXJbMV0pOworCX0KKwkJYnJlYWs7CiAJY2FzZSBaTV9JT0NUTF9TRVRfUElCU1NfTU9ERToKIAkJaWYgKHpkcmVxLT5hZGRyID09IDEpCiAJCQl6ZmlXbGFuU2V0V2xhbk1vZGUoZGV2LCBaTV9NT0RFX1BTRVVETyk7CkBAIC0yMTA3LDExICsyMDI3LDkgQEAKIAogCQl6ZmlXbGFuRGlzYWJsZShkZXYsIDApOwogCQl6ZmlXbGFuRW5hYmxlKGRldik7Ci0KIAkJYnJlYWs7Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFpEQ09ORklHICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCWRlZmF1bHQgOgorCS8qKioqKioqKioqKioqKioqKioqKiogWkRDT05GSUcgKioqKioqKioqKioqKioqKioqKioqKiovCisJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnY6IGVycm9yIGNvbW1hbmQgPSAleFxuIiwgY21kKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjEyMSw3OTMgKzIwMzksNzM2IEBACiAKIGludCB1c2JkcnZfd3BhX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBhdGhyX3dsYW5fcGFyYW0gKnpkcGFybSkKIHsKLSAgICBpbnQgcmV0ID0gMDsKLSAgICB1OF90IGJjX2FkZHJbNl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLSAgICB1OF90IG1hY19hZGRyWzgwXTsKLSAgICBzdHJ1Y3QgenNLZXlJbmZvIGtleUluZm87Ci0gICAgc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OwotICAgIHUxNl90IHZhcElkID0gMDsKKwlpbnQgcmV0ID0gMDsKKwl1OF90IGJjX2FkZHJbNl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKwl1OF90IG1hY19hZGRyWzgwXTsKKwlzdHJ1Y3QgenNLZXlJbmZvIGtleUluZm87CisJc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwID0gZGV2LT5tbF9wcml2OworCXUxNl90IHZhcElkID0gMDsKIAotICAgIC8vem13X2dldF93bGFuX2RldihkZXYpOworCS8qIHptd19nZXRfd2xhbl9kZXYoZGV2KTsgKi8KIAotICAgIHN3aXRjaCh6ZHBhcm0tPmNtZCkKLSAgICB7Ci0gICAgICAgIGNhc2UgWkRfQ01EX1NFVF9FTkNSWVBUX0tFWToKKwlzd2l0Y2ggKHpkcGFybS0+Y21kKSB7CisJY2FzZSBaRF9DTURfU0VUX0VOQ1JZUFRfS0VZOgorCQkvKiBTZXQgdXAga2V5IGluZm9ybWF0aW9uICovCisJCWtleUluZm8ua2V5TGVuZ3RoID0gemRwYXJtLT51LmNyeXB0LmtleV9sZW47CisJCWtleUluZm8ua2V5SW5kZXggPSB6ZHBhcm0tPnUuY3J5cHQuaWR4OworCQlpZiAoemZpV2xhblF1ZXJ5V2xhbk1vZGUoZGV2KSA9PSBaTV9NT0RFX0FQKSB7CisJCQkvKiBBUCBNb2RlICovCisJCQlrZXlJbmZvLmZsYWcgPSBaTV9LRVlfRkxBR19BVVRIRU5USUNBVE9SOworCQl9IGVsc2UKKwkJCWtleUluZm8uZmxhZyA9IDA7CisJCWtleUluZm8ua2V5ID0gemRwYXJtLT51LmNyeXB0LmtleTsKKwkJa2V5SW5mby5pbml0SXYgPSB6ZHBhcm0tPnUuY3J5cHQuc2VxOworCQlrZXlJbmZvLm1hY0FkZHIgPSAodTE2X3QgKil6ZHBhcm0tPnN0YV9hZGRyOwogCi0gICAgICAgICAgICAvKiBTZXQgdXAga2V5IGluZm9ybWF0aW9uICovCi0gICAgICAgICAgICBrZXlJbmZvLmtleUxlbmd0aCA9IHpkcGFybS0+dS5jcnlwdC5rZXlfbGVuOwotICAgICAgICAgICAga2V5SW5mby5rZXlJbmRleCA9IHpkcGFybS0+dS5jcnlwdC5pZHg7Ci0gICAgICAgICAgICBpZiAoemZpV2xhblF1ZXJ5V2xhbk1vZGUoZGV2KSA9PSBaTV9NT0RFX0FQKSAvLyBBUCBNb2RlCi0gICAgICAgICAgICAgICAga2V5SW5mby5mbGFnID0gWk1fS0VZX0ZMQUdfQVVUSEVOVElDQVRPUjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBrZXlJbmZvLmZsYWcgPSAwOwotICAgICAgICAgICAga2V5SW5mby5rZXkgPSB6ZHBhcm0tPnUuY3J5cHQua2V5OwotICAgICAgICAgICAga2V5SW5mby5pbml0SXYgPSB6ZHBhcm0tPnUuY3J5cHQuc2VxOwotICAgICAgICAgICAga2V5SW5mby5tYWNBZGRyID0gKHUxNl90ICopemRwYXJtLT5zdGFfYWRkcjsKKwkJLyogSWRlbnRpZnkgdGhlIE1BQyBhZGRyZXNzIGluZm9ybWF0aW9uICovCisJCWlmIChtZW1jbXAoemRwYXJtLT5zdGFfYWRkciwgYmNfYWRkciwgc2l6ZW9mKGJjX2FkZHIpKSA9PSAwKQorCQkJa2V5SW5mby5mbGFnIHw9IFpNX0tFWV9GTEFHX0dLOworCQllbHNlCisJCQlrZXlJbmZvLmZsYWcgfD0gWk1fS0VZX0ZMQUdfUEs7CiAKLSAgICAgICAgICAgIC8qIElkZW50aWZ5IHRoZSBNQUMgYWRkcmVzcyBpbmZvcm1hdGlvbiAqLwotICAgICAgICAgICAgaWYgKG1lbWNtcCh6ZHBhcm0tPnN0YV9hZGRyLCBiY19hZGRyLCBzaXplb2YoYmNfYWRkcikpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAga2V5SW5mby5mbGFnIHw9IFpNX0tFWV9GTEFHX0dLOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGtleUluZm8uZmxhZyB8PSBaTV9LRVlfRkxBR19QSzsKLSAgICAgICAgICAgIH0KKwkJaWYgKCFzdHJjbXAoemRwYXJtLT51LmNyeXB0LmFsZywgIk5PTkUiKSkgeworCQkJLyogdThfdCB6ZXJvX21hY1tdPXswLDAsMCwwLDAsMH07ICovCiAKLSAgICAgICAgICAgIGlmICghc3RyY21wKHpkcGFybS0+dS5jcnlwdC5hbGcsICJOT05FIikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy91OF90IHplcm9fbWFjW109ezAsMCwwLDAsMCwwfTsKKwkJCS8qIFNldCBrZXkgbGVuZ3RoIHRvIHplcm8gKi8KKwkJCWtleUluZm8ua2V5TGVuZ3RoID0gMDsKIAotICAgICAgICAgICAgICAgIC8qIFNldCBrZXkgbGVuZ3RoIHRvIHplcm8gKi8KLSAgICAgICAgICAgICAgICBrZXlJbmZvLmtleUxlbmd0aCA9IDA7CisJCQkvKiBkZWwgZ3JvdXAga2V5ICovCisJCQlpZiAoemRwYXJtLT5zdGFfYWRkclswXSAmIDEpIHsKKwkJCQkvKiBpZiAobWFjcC0+Y2FyZFNldHRpbmcuV1BBSWVMZW49PTApCisJCQkJKiB7IDgwMi4xeCBkeW5hbWljIFdFUAorCQkJCSogICAgbUR5bktleU1vZGUgPSAwOworCQkJCSogICAgbUtleUZvcm1hdFswXSA9IDA7CisJCQkJKiAgICBtUHJpdmFjeUludm9rZWRbMF09RkFMU0U7CisJCQkJKiAgICBtQ2FwWzBdICY9IH5DQVBfUFJJVkFDWTsKKwkJCQkqICAgIG1hY3AtPmNhcmRTZXR0aW5nLkVuY3J5T25PZmZbMF09MDsKKwkJCQkqIH0KKwkJCQkqIG1XcGFCY0tleUxlbiA9IG1Ha0luc3RhbGxlZCA9IDA7CisJCQkJKi8KKwkJCX0gZWxzZSB7CisJCQkJLyogaWYgKG1lbWNtcCh6ZXJvX21hYyx6ZHBhcm0tPnN0YV9hZGRyLCA2KT09MCkKKwkJCQkqIHsKKwkJCQkqICAgICBtRHluS2V5TW9kZT0wOworCQkJCSogICAgbUtleUZvcm1hdFswXT0wOworCQkJCSogICAgcFNldHRpbmctPkR5bktleU1vZGU9MDsKKwkJCQkqICAgIHBTZXR0aW5nLT5FbmNyeU1vZGVbMF09MDsKKwkJCQkqICAgIG1EeW5LZXlNb2RlPTA7CisJCQkJKiB9CisJCQkJKi8KKwkJCX0KIAotICAgICAgICAgICAgICAgIGlmICh6ZHBhcm0tPnN0YV9hZGRyWzBdICYgMSkvL2RlbCBncm91cCBrZXkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vaWYgKG1hY3AtPmNhcmRTZXR0aW5nLldQQUllTGVuPT0wKQotICAgICAgICAgICAgICAgICAgICAvL3svLzgwMi4xeCBkeW5hbWljIFdFUAotICAgICAgICAgICAgICAgICAgICAvLyAgICBtRHluS2V5TW9kZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgIG1LZXlGb3JtYXRbMF0gPSAwOwotICAgICAgICAgICAgICAgICAgICAvLyAgICBtUHJpdmFjeUludm9rZWRbMF09RkFMU0U7Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgIG1DYXBbMF0gJj0gfkNBUF9QUklWQUNZOwotICAgICAgICAgICAgICAgICAgICAvLyAgICBtYWNwLT5jYXJkU2V0dGluZy5FbmNyeU9uT2ZmWzBdPTA7Ci0gICAgICAgICAgICAgICAgICAgIC8vfQotICAgICAgICAgICAgICAgICAgICAvL21XcGFCY0tleUxlbiA9IG1Ha0luc3RhbGxlZCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vaWYgKG1lbWNtcCh6ZXJvX21hYyx6ZHBhcm0tPnN0YV9hZGRyLCA2KT09MCkKLSAgICAgICAgICAgICAgICAgICAgLy97Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgIG1EeW5LZXlNb2RlPTA7Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgIG1LZXlGb3JtYXRbMF09MDsKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgcFNldHRpbmctPkR5bktleU1vZGU9MDsKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgcFNldHRpbmctPkVuY3J5TW9kZVswXT0wOwotICAgICAgICAgICAgICAgICAgICAvLyAgICBtRHluS2V5TW9kZT0wOwotICAgICAgICAgICAgICAgICAgICAvL30KLSAgICAgICAgICAgICAgICB9CisJCQlwcmludGsoS0VSTl9FUlIgIlNldCBFbmNyeXB0aW9uIFR5cGUgTk9ORVxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9IGVsc2UgaWYgKCFzdHJjbXAoemRwYXJtLT51LmNyeXB0LmFsZywgIlRLSVAiKSkgeworCQkJemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX1RLSVApOworCQkJLyogLy9MaW51eCBTdXBwbGljYW50IHdpbGwgaW52ZXJzZSBUeC9SeCBrZXkKKwkJCSogLy9TbyB3ZSBpbnZlcnNlIGl0IGJhY2ssIENXWWFuZygrKQorCQkJKiB6Zk1lbW9yeUNvcHkoJnRlbXBbMF0sICZrZXlJbmZvLmtleVsxNl0sIDgpOworCQkJKiB6Zk1lbW9yeUNvcHkoJmtleUluZm8ua2V5WzE2XSwga2V5SW5mby5rZXlbMjRdLCA4KTsKKwkJCSogemZNZW1vcnlDb3B5KCZrZXlJbmZvLmtleVsyNF0sICZ0ZW1wWzBdLCA4KTsKKwkJCSogdThfdCB0ZW1wOworCQkJKiBpbnQgazsKKwkJCSogZm9yIChrID0gMDsgayA8IDg7IGsrKykKKwkJCSogeworCQkJKiAgICAgdGVtcCA9IGtleUluZm8ua2V5WzE2ICsga107CisJCQkqICAgICBrZXlJbmZvLmtleVsxNiArIGtdID0ga2V5SW5mby5rZXlbMjQgKyBrXTsKKwkJCSogICAgIGtleUluZm8ua2V5WzI0ICsga10gPSB0ZW1wOworCQkJKiB9CisJCQkqIENhbUVuY3J5VHlwZSA9IFpNX1RLSVA7CisJCQkqIGlmIChpZHggPT0gMCkKKwkJCSogeyAgIC8vIFBhaXJ3aXNlIGtleQorCQkJKiAgICAgbUtleUZvcm1hdFswXSA9IENhbUVuY3J5VHlwZTsKKwkJCSogICAgIG1EeW5LZXlNb2RlID0gcFNldHRpbmctPkR5bktleU1vZGUgPSBEWU5fS0VZX1RLSVA7CisJCQkqIH0KKwkJCSovCisJCX0gZWxzZSBpZiAoIXN0cmNtcCh6ZHBhcm0tPnUuY3J5cHQuYWxnLCAiQ0NNUCIpKSB7CisJCQl6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fQUVTKTsKKwkJCS8qIENhbUVuY3J5VHlwZSA9IFpNX0FFUzsKKwkJCSogaWYgKGlkeCA9PSAwKQorCQkJKiB7ICAvLyBQYWlyd2lzZSBrZXkKKwkJCSogICAgbUtleUZvcm1hdFswXSA9IENhbUVuY3J5VHlwZTsKKwkJCSogICAgbUR5bktleU1vZGUgPSBwU2V0dGluZy0+RHluS2V5TW9kZSA9IERZTl9LRVlfQUVTOworCQkJKiB9CisJCQkqLworCQl9IGVsc2UgaWYgKCFzdHJjbXAoemRwYXJtLT51LmNyeXB0LmFsZywgIldFUCIpKSB7CisJCQlpZiAoa2V5SW5mby5rZXlMZW5ndGggPT0gNSkgeworCQkJCS8qIFdFUCA2NCAqLworCQkJCXpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9XRVA2NCk7CisJCQkJLyogQ2FtRW5jcnlUeXBlID0gWk1fV0VQNjQ7ICovCisJCQkJLyogdG1wRHluS2V5TW9kZT1EWU5fS0VZX1dFUDY0OyAqLworCQkJfSBlbHNlIGlmIChrZXlJbmZvLmtleUxlbmd0aCA9PSAxMykgeworCQkJCS8qIGtleWxlbj0xMywgV0VQIDEyOCAqLworCQkJCXpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9XRVAxMjgpOworCQkJCS8qIENhbUVuY3J5VHlwZSA9IFpNX1dFUDEyODsgKi8KKwkJCQkvKiB0bXBEeW5LZXlNb2RlPURZTl9LRVlfV0VQMTI4OyAqLworCQkJfSBlbHNlIHsKKwkJCQl6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fV0VQMjU2KTsKKwkJCX0KIAotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiU2V0IEVuY3J5cHRpb24gVHlwZSBOT05FXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh6ZHBhcm0tPnUuY3J5cHQuYWxnLCAiVEtJUCIpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBaTV9US0lQKTsKLSAgICAgICAgICAgICAgICAvL0xpbnV4IFN1cHBsaWNhbnQgd2lsbCBpbnZlcnNlIFR4L1J4IGtleQotICAgICAgICAgICAgICAgIC8vU28gd2UgaW52ZXJzZSBpdCBiYWNrIC8vQ1dZYW5nKCspCi0gICAgICAgICAgICAgICAgLy96Zk1lbW9yeUNvcHkoJnRlbXBbMF0sICZrZXlJbmZvLmtleVsxNl0sIDgpOwotICAgICAgICAgICAgICAgIC8vemZNZW1vcnlDb3B5KCZrZXlJbmZvLmtleVsxNl0sIGtleUluZm8ua2V5WzI0XSwgOCk7Ci0gICAgICAgICAgICAgICAgLy96Zk1lbW9yeUNvcHkoJmtleUluZm8ua2V5WzI0XSwgJnRlbXBbMF0sIDgpOwotICAgICAgICAgICAgICAgIC8vdThfdCB0ZW1wOwotICAgICAgICAgICAgICAgIC8vaW50IGs7Ci0gICAgICAgICAgICAgICAgLy9mb3IgKGsgPSAwOyBrIDwgODsgaysrKQotICAgICAgICAgICAgICAgIC8vewotICAgICAgICAgICAgICAgIC8vICAgIHRlbXAgPSBrZXlJbmZvLmtleVsxNiArIGtdOwotICAgICAgICAgICAgICAgIC8vICAgIGtleUluZm8ua2V5WzE2ICsga10gPSBrZXlJbmZvLmtleVsyNCArIGtdOwotICAgICAgICAgICAgICAgIC8vICAgIGtleUluZm8ua2V5WzI0ICsga10gPSB0ZW1wOwotICAgICAgICAgICAgICAgIC8vfQotICAgICAgICAgICAgICAgIC8vQ2FtRW5jcnlUeXBlID0gWk1fVEtJUDsKLSAgICAgICAgICAgICAgICAvLy8vaWYgKGlkeCA9PSAwKQotICAgICAgICAgICAgICAgIC8vey8vIFBhaXJ3aXNlIGtleQotICAgICAgICAgICAgICAgIC8vICAgIG1LZXlGb3JtYXRbMF0gPSBDYW1FbmNyeVR5cGU7Ci0gICAgICAgICAgICAgICAgLy8gICAgbUR5bktleU1vZGUgPSBwU2V0dGluZy0+RHluS2V5TW9kZSA9IERZTl9LRVlfVEtJUDsKLSAgICAgICAgICAgICAgICAvL30KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAoemRwYXJtLT51LmNyeXB0LmFsZywgIkNDTVAiKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fQUVTKTsKLSAgICAgICAgICAgICAgICAvL0NhbUVuY3J5VHlwZSA9IFpNX0FFUzsKLSAgICAgICAgICAgICAgICAvLy8vaWYgKGlkeCA9PSAwKQotICAgICAgICAgICAgICAgIC8vey8vIFBhaXJ3aXNlIGtleQotICAgICAgICAgICAgICAgIC8vICAgIG1LZXlGb3JtYXRbMF0gPSBDYW1FbmNyeVR5cGU7Ci0gICAgICAgICAgICAgICAgLy8gICAgbUR5bktleU1vZGUgPSBwU2V0dGluZy0+RHluS2V5TW9kZSA9IERZTl9LRVlfQUVTOwotICAgICAgICAgICAgICAgIC8vfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh6ZHBhcm0tPnUuY3J5cHQuYWxnLCAiV0VQIikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGtleUluZm8ua2V5TGVuZ3RoID09IDUpCi0gICAgICAgICAgICAgICAgeyAvLyBXRVAgNjQKLSAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX1dFUDY0KTsKLSAgICAgICAgICAgICAgICAvLyAgICBDYW1FbmNyeVR5cGUgPSBaTV9XRVA2NDsKLSAgICAgICAgICAgICAgICAvLyAgICB0bXBEeW5LZXlNb2RlPURZTl9LRVlfV0VQNjQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleUluZm8ua2V5TGVuZ3RoID09IDEzKQotICAgICAgICAgICAgICAgIHsvL2tleWxlbj0xMywgV0VQIDEyOAotICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0RW5jcnlNb2RlKGRldiwgWk1fV0VQMTI4KTsKLSAgICAgICAgICAgICAgICAvLyAgICBDYW1FbmNyeVR5cGUgPSBaTV9XRVAxMjg7Ci0gICAgICAgICAgICAgICAgLy8gICAgdG1wRHluS2V5TW9kZT1EWU5fS0VZX1dFUDEyODsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldEVuY3J5TW9kZShkZXYsIFpNX1dFUDI1Nik7Ci0gICAgICAgICAgICAgICAgfQorCS8qIEZvciBEeW5hbWljIFdFUCBrZXkgKE5vbi1XUEEgUmFkaXVzKSwgdGhlIGtleSBJRCByYW5nZTogMC0zCisJKiBJbiBXUEEvUlNOIG1vZGUsIHRoZSBrZXkgSUQgcmFuZ2U6IDEtMywgdXN1YWxseSwgYSBicm9hZGNhc3Qga2V5LgorCSogRm9yIFdFUCBrZXkgc2V0dGluZzogd2Ugc2V0IG1EeW5LZXlNb2RlIGFuZCBtS2V5Rm9ybWF0IGluIGZvbGxvd2luZworCSogY2FzZToKKwkqICAgMS4gRm9yIDgwMi4xeCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgV0VQIGtleSBtZXRob2QuCisJKiAgIDIuIEZvciBXUEEvUlNOIG1vZGUsIGJ1dCBrZXkgaWQgPT0gMC4KKwkqCShCdXQgdGhpcyBpcyBhbiBpbXBvc3NpYmxlIGNhc2UpCisJKiBTbywgb25seSBjaGVjayBjYXNlIDEuCisJKiBpZiAobWFjcC0+Y2FyZFNldHRpbmcuV1BBSWVMZW49PTApCisJKiB7CisJKiAgICBtS2V5Rm9ybWF0WzBdID0gQ2FtRW5jcnlUeXBlOworCSogICAgbUR5bktleU1vZGUgPSBwU2V0dGluZy0+RHluS2V5TW9kZSA9IHRtcER5bktleU1vZGU7CisJKiAgICBtUHJpdmFjeUludm9rZWRbMF09VFJVRTsKKwkqICAgIG1DYXBbMF0gfD0gQ0FQX1BSSVZBQ1k7CisJKiAgICBtYWNwLT5jYXJkU2V0dGluZy5FbmNyeU9uT2ZmWzBdPTE7CisJKiB9CisJKi8KKwkJfQogCi0gICAgICAgICAgICAgICAgLy8gRm9yIER5bmFtaWMgV0VQIGtleSAoTm9uLVdQQSBSYWRpdXMpLCB0aGUga2V5IElEIHJhbmdlOiAwLTMKLSAgICAgICAgICAgICAgICAvLyBJbiBXUEEvUlNOIG1vZGUsIHRoZSBrZXkgSUQgcmFuZ2U6IDEtMywgdXN1YWxseSwgYSBicm9hZGNhc3Qga2V5LgotICAgICAgICAgICAgICAgIC8vIEZvciBXRVAga2V5IHNldHRpbmc6IHdlIHNldCBtRHluS2V5TW9kZSBhbmQgbUtleUZvcm1hdCBpbiBmb2xsb3dpbmcgY2FzZToKLSAgICAgICAgICAgICAgICAvLyAgIDEuIEZvciA4MDIuMXggZHluYW1pY2FsbHkgZ2VuZXJhdGVkIFdFUCBrZXkgbWV0aG9kLgotICAgICAgICAgICAgICAgIC8vICAgMi4gRm9yIFdQQS9SU04gbW9kZSwgYnV0IGtleSBpZCA9PSAwLiAoQnV0IHRoaXMgaXMgYW4gaW1wb3NzaWJsZSBjYXNlKQotICAgICAgICAgICAgICAgIC8vIFNvLCBvbmx5IGNoZWNrIGNhc2UgMS4KLSAgICAgICAgICAgICAgICAvL2lmIChtYWNwLT5jYXJkU2V0dGluZy5XUEFJZUxlbj09MCkKLSAgICAgICAgICAgICAgICAvL3sKLSAgICAgICAgICAgICAgICAvLyAgICBtS2V5Rm9ybWF0WzBdID0gQ2FtRW5jcnlUeXBlOwotICAgICAgICAgICAgICAgIC8vICAgIG1EeW5LZXlNb2RlID0gcFNldHRpbmctPkR5bktleU1vZGUgPSB0bXBEeW5LZXlNb2RlOwotICAgICAgICAgICAgICAgIC8vICAgIG1Qcml2YWN5SW52b2tlZFswXT1UUlVFOwotICAgICAgICAgICAgICAgIC8vICAgIG1DYXBbMF0gfD0gQ0FQX1BSSVZBQ1k7Ci0gICAgICAgICAgICAgICAgLy8gICAgbWFjcC0+Y2FyZFNldHRpbmcuRW5jcnlPbk9mZlswXT0xOwotICAgICAgICAgICAgICAgIC8vfQotICAgICAgICAgICAgfQorCQkvKiBEVU1QIGtleSBjb250ZXh0ICovCisJCS8qICNpZmRlZiBXUEFfREVCVUcgKi8KKwkJaWYgKGtleUluZm8ua2V5TGVuZ3RoID4gMCkgeworCQkJaW50IGlpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJIk90dXM6IEtleSBDb250ZXh0OlxuIik7CisJCQlmb3IgKGlpID0gMDsgaWkgPCBrZXlJbmZvLmtleUxlbmd0aDsgKSB7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJIjB4JTAyeCAiLCBrZXlJbmZvLmtleVtpaV0pOworCQkJCWlmICgoKytpaSAlIDE2KSA9PSAwKQorCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJcbiIpOworCQkJfQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiXG4iKTsKKwkJfQorCQkvKiAjZW5kaWYgKi8KIAotICAgICAgICAgICAgLyogRFVNUCBrZXkgY29udGV4dCAqLwotLy8jaWZkZWYgV1BBX0RFQlVHCi0gICAgICAgICAgICBpZiAoa2V5SW5mby5rZXlMZW5ndGggPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBpaTsKLSAgICAgICAgICAgICAgICBwcmludGsoIk90dXM6IEtleSBDb250ZXh0OlxuIik7Ci0gICAgICAgICAgICAgICAgZm9yKGlpID0gMDsgaWkgPCBrZXlJbmZvLmtleUxlbmd0aDspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwcmludGsoIjB4JTAyeCAiLCBrZXlJbmZvLmtleVtpaV0pOwotICAgICAgICAgICAgICAgICAgICBpZigoKytpaSAlIDE2KSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGsoIlxuIik7Ci0gICAgICAgICAgICB9Ci0vLyNlbmRpZgorCQkvKiBTZXQgZW5jcnlwdCBtb2RlICovCisJCS8qIHpmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBDYW1FbmNyeVR5cGUpOyAqLworCQl2YXBJZCA9IHpmTG54R2V0VmFwSWQoZGV2KTsKKwkJaWYgKHZhcElkID09IDB4ZmZmZikKKwkJCWtleUluZm8udmFwSWQgPSAwOworCQllbHNlCisJCQlrZXlJbmZvLnZhcElkID0gdmFwSWQgKyAxOworCQlrZXlJbmZvLnZhcEFkZHJbMF0gPSBrZXlJbmZvLm1hY0FkZHJbMF07CisJCWtleUluZm8udmFwQWRkclsxXSA9IGtleUluZm8ubWFjQWRkclsxXTsKKwkJa2V5SW5mby52YXBBZGRyWzJdID0ga2V5SW5mby5tYWNBZGRyWzJdOwogCi0gICAgICAgICAgICAvKiBTZXQgZW5jcnlwdCBtb2RlICovCi0gICAgICAgICAgICAvL3pmaVdsYW5TZXRFbmNyeU1vZGUoZGV2LCBDYW1FbmNyeVR5cGUpOwotICAgICAgICAgICAgdmFwSWQgPSB6ZkxueEdldFZhcElkKGRldik7Ci0gICAgICAgICAgICBpZiAodmFwSWQgPT0gMHhmZmZmKQotICAgICAgICAgICAgICAgIGtleUluZm8udmFwSWQgPSAwOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGtleUluZm8udmFwSWQgPSB2YXBJZCArIDE7Ci0gICAgICAgICAgICBrZXlJbmZvLnZhcEFkZHJbMF0gPSBrZXlJbmZvLm1hY0FkZHJbMF07Ci0gICAgICAgICAgICBrZXlJbmZvLnZhcEFkZHJbMV0gPSBrZXlJbmZvLm1hY0FkZHJbMV07Ci0gICAgICAgICAgICBrZXlJbmZvLnZhcEFkZHJbMl0gPSBrZXlJbmZvLm1hY0FkZHJbMl07CisJCXpmaVdsYW5TZXRLZXkoZGV2LCBrZXlJbmZvKTsKIAotICAgICAgICAgICAgemZpV2xhblNldEtleShkZXYsIGtleUluZm8pOworCQkvKiB6ZmlXbGFuRGlzYWJsZShkZXYpOyAqLworCQkvKiB6ZmlXbGFuRW5hYmxlKGRldik7ICovCisJCWJyZWFrOworCWNhc2UgWkRfQ01EX1NFVF9NTE1FOgorCQlwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGw6IFpEX0NNRF9TRVRfTUxNRVxuIik7CiAKLSAgICAgICAgICAgIC8vemZpV2xhbkRpc2FibGUoZGV2KTsKLSAgICAgICAgICAgIC8vemZpV2xhbkVuYWJsZShkZXYpOwotICAgICAgICAgICAgYnJlYWs7CisJCS8qIFRyYW5zbGF0ZSBTVEEncyBhZGRyZXNzICovCisJCXNwcmludGYobWFjX2FkZHIsICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsCisJCQl6ZHBhcm0tPnN0YV9hZGRyWzBdLCB6ZHBhcm0tPnN0YV9hZGRyWzFdLAorCQkJemRwYXJtLT5zdGFfYWRkclsyXSwgemRwYXJtLT5zdGFfYWRkclszXSwKKwkJCXpkcGFybS0+c3RhX2FkZHJbNF0sIHpkcGFybS0+c3RhX2FkZHJbNV0pOwogCi0gICAgICAgIGNhc2UgWkRfQ01EX1NFVF9NTE1FOgotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsOiBaRF9DTURfU0VUX01MTUVcbiIpOworCQlzd2l0Y2ggKHpkcGFybS0+dS5tbG1lLmNtZCkgeworCQljYXNlIE1MTUVfU1RBX0RFQVVUSDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkiIC0tLS0tLS1DYWxsIHpmaVdsYW5EZWF1dGgsIHJlYXNvbjolZFxuIiwKKwkJCQl6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSk7CisJCQlpZiAoemZpV2xhbkRlYXV0aChkZXYsICh1MTZfdCAqKSB6ZHBhcm0tPnN0YV9hZGRyLAorCQkJCXpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKSAhPSAwKQorCQkJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZGVhdXRoZW5jYXRlIFNUQTogJXNcbiIsCisJCQkJCW1hY19hZGRyKTsKKwkJCWVsc2UKKwkJCQlwcmludGsoS0VSTl9FUlIgIkRlYXV0aGVudGljYXRlIFNUQTogJXMiCisJCQkJCSJ3aXRoIHJlYXNvbiBjb2RlOiAlZFxuIiwKKwkJCQkJbWFjX2FkZHIsIHpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKTsKKwkJCWJyZWFrOworCQljYXNlIE1MTUVfU1RBX0RJU0FTU09DOgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSIgLS0tLS0tLUNhbGwgemZpV2xhbkRlYXV0aCwgcmVhc29uOiVkXG4iLAorCQkJCXpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKTsKKwkJCWlmICh6ZmlXbGFuRGVhdXRoKGRldiwgKHUxNl90ICopIHpkcGFybS0+c3RhX2FkZHIsCisJCQkJemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpICE9IDApCisJCQkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBkaXNhc3NvY2lhdGUgU1RBOiAlc1xuIiwKKwkJCQkJbWFjX2FkZHIpOworCQkJZWxzZQorCQkJCXByaW50ayhLRVJOX0VSUiAiRGlzYXNzb2NpYXRlIFNUQTogJXMiCisJCQkJCSJ3aXRoIHJlYXNvbiBjb2RlOiAlZFxuIiwKKwkJCQkJbWFjX2FkZHIsIHpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICJNTE1FIGNvbW1hbmQ6IDB4JTA0eCBub3Qgc3VwcG9ydFxuIiwKKwkJCQl6ZHBhcm0tPnUubWxtZS5jbWQpOworCQkJYnJlYWs7CisJCX0KIAotICAgICAgICAgICAgLyogVHJhbnNsYXRlIFNUQSdzIGFkZHJlc3MgKi8KLSAgICAgICAgICAgIHNwcmludGYobWFjX2FkZHIsICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIsIHpkcGFybS0+c3RhX2FkZHJbMF0sIHpkcGFybS0+c3RhX2FkZHJbMV0sCi0gICAgICAgICAgICAgICAgemRwYXJtLT5zdGFfYWRkclsyXSwgemRwYXJtLT5zdGFfYWRkclszXSwgemRwYXJtLT5zdGFfYWRkcls0XSwgemRwYXJtLT5zdGFfYWRkcls1XSk7CisJCWJyZWFrOworCWNhc2UgWkRfQ01EX1NDQU5fUkVROgorCQlwcmludGsoS0VSTl9FUlIgInVzYmRydl93cGFfaW9jdGw6IFpEX0NNRF9TQ0FOX1JFUVxuIik7CisJCWJyZWFrOworCWNhc2UgWkRfQ01EX1NFVF9HRU5FUklDX0VMRU1FTlQ6CisJCXByaW50ayhLRVJOX0VSUiAidXNiZHJ2X3dwYV9pb2N0bDoiCisJCQkJCSIgWkRfQ01EX1NFVF9HRU5FUklDX0VMRU1FTlRcbiIpOwogCi0gICAgICAgICAgICBzd2l0Y2goemRwYXJtLT51Lm1sbWUuY21kKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgTUxNRV9TVEFfREVBVVRIOgotICAgICAgICAgICAgICAgICAgICBwcmludGsoIiAtLS0tLS0tQ2FsbCB6ZmlXbGFuRGVhdXRoLCByZWFzb246JWRcbiIsemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpOwotICAgICAgICAgICAgICAgICAgICBpZih6ZmlXbGFuRGVhdXRoKGRldiwgKHUxNl90KikgemRwYXJtLT5zdGFfYWRkciwgemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpICE9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkNhbid0IGRlYXV0aGVuY2F0ZSBTVEE6ICVzXG4iLCBtYWNfYWRkcik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiRGVhdXRoZW50aWNhdGUgU1RBOiAlcyB3aXRoIHJlYXNvbiBjb2RlOiAlZFxuIiwgbWFjX2FkZHIsIHpkcGFybS0+dS5tbG1lLnJlYXNvbl9jb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisJCS8qIENvcHkgdGhlIFdQQSBJRQorCQkqIHptX21zZzFfbW0oWk1fTFZfMCwgIkNXWSAtIHdwYWllIExlbmd0aCA6ICIsCisJCSogemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOworCQkqLworCQlwcmludGsoS0VSTl9FUlIgIndwYWllIExlbmd0aCA6ICUgZFxuIiwKKwkJCQkJCXpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuKTsKKwkJaWYgKHpmaVdsYW5RdWVyeVdsYW5Nb2RlKGRldikgPT0gWk1fTU9ERV9BUCkgeworCQkJLyogQVAgTW9kZSAqLworCQkJemZpV2xhblNldFdwYUllKGRldiwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5kYXRhLAorCQkJCQl6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbik7CisJCX0gZWxzZSB7CisJCQltYWNwLT5zdXBMZW4gPSB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbjsKKwkJCW1lbWNweShtYWNwLT5zdXBJZSwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5kYXRhLAorCQkJCXpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuKTsKKwkJfQorCQl6ZmlXbGFuU2V0V3BhU3VwcG9ydChkZXYsIDEpOworCQkvKiB6ZmlXbGFuU2V0V3BhSWUoZGV2LCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmRhdGEsCisJCSogemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOworCQkqLworCQlpbnQgaWk7CisJCXU4X3QgbGVuID0gemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW47CisJCXU4X3QgKndwYWllID0gKHU4X3QgKil6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmRhdGE7CiAKLSAgICAgICAgICAgICAgICBjYXNlIE1MTUVfU1RBX0RJU0FTU09DOgotICAgICAgICAgICAgICAgICAgICBwcmludGsoIiAtLS0tLS0tQ2FsbCB6ZmlXbGFuRGVhdXRoLCByZWFzb246JWRcbiIsemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpOwotICAgICAgICAgICAgICAgICAgICBpZih6ZmlXbGFuRGVhdXRoKGRldiwgKHUxNl90KikgemRwYXJtLT5zdGFfYWRkciwgemRwYXJtLT51Lm1sbWUucmVhc29uX2NvZGUpICE9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkNhbid0IGRpc2Fzc29jaWF0ZSBTVEE6ICVzXG4iLCBtYWNfYWRkcik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiRGlzYXNzb2NpYXRlIFNUQTogJXMgd2l0aCByZWFzb24gY29kZTogJWRcbiIsIG1hY19hZGRyLCB6ZHBhcm0tPnUubWxtZS5yZWFzb25fY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQlwcmludGsoS0VSTl9FUlIgIndkLT5hcC53cGFMZW4gOiAlIGRcbiIsIGxlbik7CiAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIk1MTUUgY29tbWFuZDogMHglMDR4IG5vdCBzdXBwb3J0XG4iLCB6ZHBhcm0tPnUubWxtZS5jbWQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KKwkJLyogRFVNUCBXUEEgSUUgKi8KKwkJZm9yKGlpID0gMDsgaWkgPCBsZW47KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIjB4JTAyeCAiLCB3cGFpZVtpaV0pOwogCi0gICAgICAgICAgICBicmVhazsKKwkJCWlmKCgrK2lpICUgMTYpID09IDApCisJCQkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOworCQl9CisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKIAotICAgICAgICBjYXNlIFpEX0NNRF9TQ0FOX1JFUToKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2X3dwYV9pb2N0bDogWkRfQ01EX1NDQU5fUkVRXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOworCQkvKiAjaWZkZWYgWk1fSE9TVEFQRF9TVVBQT1JUCisJCSogaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQorCQkqIHsvLyBVcGRhdGUgQmVhY29uIEZJRk8gaW4gdGhlIG5leHQgVEJUVC4KKwkJKiAgICAgbWVtY3B5KCZtV1BBSWUsIHBTZXR0aW5nLT5XUEFJZSwgcFNldHRpbmctPldQQUllTGVuKTsKKwkJKiAgICAgcHJpbnRrKEtFUk5fRVJSICJDb3B5IFdQQSBJRSBpbnRvIG1XUEFJZVxuIik7CisJCSogfQorCQkqICNlbmRpZgorCQkqLworCQlicmVhazsKIAotICAgICAgICBjYXNlIFpEX0NNRF9TRVRfR0VORVJJQ19FTEVNRU5UOgotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsOiBaRF9DTURfU0VUX0dFTkVSSUNfRUxFTUVOVFxuIik7CisJLyogI2lmZGVmIFpNX0hPU1RBUERfU1VQUE9SVCAqLworCWNhc2UgWkRfQ01EX0dFVF9UU0M6CisJCXByaW50ayhLRVJOX0VSUiAidXNiZHJ2X3dwYV9pb2N0bCA6IFpEX0NNRF9HRVRfVFNDXG4iKTsKKwkJYnJlYWs7CisJLyogI2VuZGlmICovCiAKLSAgICAgICAgICAgIC8qIENvcHkgdGhlIFdQQSBJRSAqLwotICAgICAgICAgICAgLy96bV9tc2cxX21tKFpNX0xWXzAsICJDV1kgLSB3cGFpZSBMZW5ndGggOiAiLCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbik7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndwYWllIExlbmd0aCA6ICVkXG4iLCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbik7Ci0gICAgICAgICAgICBpZiAoemZpV2xhblF1ZXJ5V2xhbk1vZGUoZGV2KSA9PSBaTV9NT0RFX0FQKSAvLyBBUCBNb2RlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgemZpV2xhblNldFdwYUllKGRldiwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5kYXRhLCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWFjcC0+c3VwTGVuID0gemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW47Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG1hY3AtPnN1cEllLCB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmRhdGEsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHpmaVdsYW5TZXRXcGFTdXBwb3J0KGRldiwgMSk7Ci0gICAgICAgICAgICAvL3pmaVdsYW5TZXRXcGFJZShkZXYsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0uZGF0YSwgemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW4pOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBpaTsKLSAgICAgICAgICAgICAgICB1OF90IGxlbiA9IHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuOwotICAgICAgICAgICAgICAgIHU4X3QgKndwYWllID0gKHU4X3QgKil6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmRhdGE7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsIGRlZmF1bHQgOiAweCUwNHhcbiIsCisJCQl6ZHBhcm0tPmNtZCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KIAotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPmFwLndwYUxlbjogJWRcbiIsIGxlbik7Ci0KLSAgICAgICAgICAgICAgICAvKiBEVU1QIFdQQSBJRSAqLwotICAgICAgICAgICAgICAgIGZvcihpaSA9IDA7IGlpIDwgbGVuOykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiMHglMDJ4ICIsIHdwYWllW2lpXSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYoKCsraWkgJSAxNikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJcbiIpOwotICAgICAgICAgICAgfQotCi0vLyAgICAgICAgICAgICNpZmRlZiBaTV9IT1NUQVBEX1NVUFBPUlQKLSAgICAgICAgICAgIC8vaWYgKHdkLT53bGFuTW9kZSA9PSBaTV9NT0RFX0FQKQotICAgICAgICAgICAgLy97Ly8gVXBkYXRlIEJlYWNvbiBGSUZPIGluIHRoZSBuZXh0IFRCVFQuCi0gICAgICAgICAgICAvLyAgICBtZW1jcHkoJm1XUEFJZSwgcFNldHRpbmctPldQQUllLCBwU2V0dGluZy0+V1BBSWVMZW4pOwotICAgICAgICAgICAgLy8gICAgcHJpbnRrKEtFUk5fRVJSICJDb3B5IFdQQSBJRSBpbnRvIG1XUEFJZVxuIik7Ci0gICAgICAgICAgICAvL30KLS8vICAgICAgICAgICAgI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLQotLy8gICAgICAgICNpZmRlZiBaTV9IT1NUQVBEX1NVUFBPUlQKLSAgICAgICAgY2FzZSBaRF9DTURfR0VUX1RTQzoKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2X3dwYV9pb2N0bDogWkRfQ01EX0dFVF9UU0NcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0vLyAgICAgICAgI2VuZGlmCi0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2X3dwYV9pb2N0bCBkZWZhdWx0OiAweCUwNHhcbiIsIHpkcGFybS0+Y21kKTsKLSAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OworCXJldHVybiByZXQ7CiB9CiAKICNpZmRlZiBaTV9FTkFCTEVfQ0VOQwogaW50IHVzYmRydl9jZW5jX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB6eWRhc19jZW5jX3BhcmFtICp6ZHBhcm0pCiB7Ci0gICAgLy9zdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7Ci0gICAgc3RydWN0IHpzS2V5SW5mbyBrZXlJbmZvOwotICAgIHUxNl90IGFwSWQ7Ci0gICAgdThfdCBiY19hZGRyWzZdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0gICAgaW50IHJldCA9IDA7Ci0gICAgaW50IGlpOworCS8qIHN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsgKi8KKwlzdHJ1Y3QgenNLZXlJbmZvIGtleUluZm87CisJdTE2X3QgYXBJZDsKKwl1OF90IGJjX2FkZHJbNl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaWk7CiAKLSAgICAvKiBHZXQgdGhlIEFQIElkICovCi0gICAgYXBJZCA9IHpmTG54R2V0VmFwSWQoZGV2KTsKKwkvKiBHZXQgdGhlIEFQIElkICovCisJYXBJZCA9IHpmTG54R2V0VmFwSWQoZGV2KTsKIAotICAgIGlmIChhcElkID09IDB4ZmZmZikKLSAgICB7Ci0gICAgICAgIGFwSWQgPSAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBhcElkID0gYXBJZCsxOwotICAgIH0KKwlpZiAoYXBJZCA9PSAweGZmZmYpIHsKKwkJYXBJZCA9IDA7CisJfSBlbHNlIHsKKwkJYXBJZCA9IGFwSWQgKyAxOworCX0KIAotICAgIHN3aXRjaCAoemRwYXJtLT5jbWQpCi0gICAgewotICAgICAgICBjYXNlIFpNX0NNRF9DRU5DX1NFVENFTkM6Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlpNX0NNRF9DRU5DX1NFVENFTkNcbiIpOwotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJsZW5ndGg6ICVkXG4iLCB6ZHBhcm0tPmxlbik7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInBvbGljeTogJWRcbiIsIHpkcGFybS0+dS5pbmZvLmNlbmNfcG9saWN5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFpNX0NNRF9DRU5DX1NFVEtFWToKLSAgICAgICAgICAgIC8vcmV0ID0gd2FpX2lvY3RsX3NldGtleSh2YXAsIGlvY3RsX21zZyk7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlpNX0NNRF9DRU5DX1NFVEtFWVxuIik7CisJc3dpdGNoICh6ZHBhcm0tPmNtZCkgeworCWNhc2UgWk1fQ01EX0NFTkNfU0VUQ0VOQzoKKwkJcHJpbnRrKEtFUk5fRVJSICJaTV9DTURfQ0VOQ19TRVRDRU5DXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJsZW5ndGggOiAlIGRcbiIsIHpkcGFybS0+bGVuKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwb2xpY3kgOiAlIGRcbiIsIHpkcGFybS0+dS5pbmZvLmNlbmNfcG9saWN5KTsKKwkJYnJlYWs7CisJY2FzZSBaTV9DTURfQ0VOQ19TRVRLRVk6CisJCS8qIHJldCA9IHdhaV9pb2N0bF9zZXRrZXkodmFwLCBpb2N0bF9tc2cpOyAqLworCQlwcmludGsoS0VSTl9FUlIgIlpNX0NNRF9DRU5DX1NFVEtFWVxuIik7CiAKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiTUFDIGFkZHJlc3M9ICIpOwotICAgICAgICAgICAgZm9yKGlpID0gMDsgaWkgPCA2OyBpaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiMHglMDJ4ICIsIHpkcGFybS0+dS5jcnlwdC5zdGFfYWRkcltpaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk1BQyBhZGRyZXNzID0gIik7CisJCWZvciAoaWkgPSAwOyBpaSA8IDY7IGlpKyspIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiMHglMDJ4ICIsCisJCQkJemRwYXJtLT51LmNyeXB0LnN0YV9hZGRyW2lpXSk7CisJCX0KKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwogCi0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIktleSBJbmRleDogJWRcbiIsIHpkcGFybS0+dS5jcnlwdC5rZXlpZCk7Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkVuY3J5cHRpb24ga2V5PSAiKTsKLSAgICAgICAgICAgIGZvcihpaSA9IDA7IGlpIDwgMTY7IGlpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgemRwYXJtLT51LmNyeXB0LmtleVtpaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIktleSBJbmRleCA6ICUgZFxuIiwgemRwYXJtLT51LmNyeXB0LmtleWlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJFbmNyeXB0aW9uIGtleSA9ICIpOworCQlmb3IgKGlpID0gMDsgaWkgPCAxNjsgaWkrKykgeworCQkJcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgemRwYXJtLT51LmNyeXB0LmtleVtpaV0pOworCQl9CisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKIAotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJNSUMga2V5PSAiKTsKLSAgICAgICAgICAgIGZvcihpaSA9IDE2OyBpaSA8IFpNX0NFTkNfS0VZX1NJWkU7IGlpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgemRwYXJtLT51LmNyeXB0LmtleVtpaV0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk1JQyBrZXkgPSAiKTsKKwkJZm9yKGlpID0gMTY7IGlpIDwgWk1fQ0VOQ19LRVlfU0laRTsgaWkrKykgeworCQkJcHJpbnRrKEtFUk5fRVJSICIweCUwMnggIiwgemRwYXJtLT51LmNyeXB0LmtleVtpaV0pOworCQl9CisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKIAotICAgICAgICAgICAgLyogU2V0IHVwIGtleSBpbmZvcm1hdGlvbiAqLwotICAgICAgICAgICAga2V5SW5mby5rZXlMZW5ndGggPSBaTV9DRU5DX0tFWV9TSVpFOwotICAgICAgICAgICAga2V5SW5mby5rZXlJbmRleCA9IHpkcGFybS0+dS5jcnlwdC5rZXlpZDsKLSAgICAgICAgICAgIGtleUluZm8uZmxhZyA9IFpNX0tFWV9GTEFHX0FVVEhFTlRJQ0FUT1IgfCBaTV9LRVlfRkxBR19DRU5DOwotICAgICAgICAgICAga2V5SW5mby5rZXkgPSB6ZHBhcm0tPnUuY3J5cHQua2V5OwotICAgICAgICAgICAga2V5SW5mby5tYWNBZGRyID0gKHUxNl90ICopemRwYXJtLT51LmNyeXB0LnN0YV9hZGRyOworCQkvKiBTZXQgdXAga2V5IGluZm9ybWF0aW9uICovCisJCWtleUluZm8ua2V5TGVuZ3RoID0gWk1fQ0VOQ19LRVlfU0laRTsKKwkJa2V5SW5mby5rZXlJbmRleCA9IHpkcGFybS0+dS5jcnlwdC5rZXlpZDsKKwkJa2V5SW5mby5mbGFnID0gWk1fS0VZX0ZMQUdfQVVUSEVOVElDQVRPUiB8IFpNX0tFWV9GTEFHX0NFTkM7CisJCWtleUluZm8ua2V5ID0gemRwYXJtLT51LmNyeXB0LmtleTsKKwkJa2V5SW5mby5tYWNBZGRyID0gKHUxNl90ICopemRwYXJtLT51LmNyeXB0LnN0YV9hZGRyOwogCi0gICAgICAgICAgICAvKiBJZGVudGlmeSB0aGUgTUFDIGFkZHJlc3MgaW5mb3JtYXRpb24gKi8KLSAgICAgICAgICAgIGlmIChtZW1jbXAoemRwYXJtLT51LmNyeXB0LnN0YV9hZGRyLCBiY19hZGRyLCBzaXplb2YoYmNfYWRkcikpID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAga2V5SW5mby5mbGFnIHw9IFpNX0tFWV9GTEFHX0dLOwotICAgICAgICAgICAgICAgIGtleUluZm8udmFwSWQgPSBhcElkOwotICAgICAgICAgICAgICAgIG1lbWNweShrZXlJbmZvLnZhcEFkZHIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBrZXlJbmZvLmZsYWcgfD0gWk1fS0VZX0ZMQUdfUEs7Ci0gICAgICAgICAgICB9CisJCS8qIElkZW50aWZ5IHRoZSBNQUMgYWRkcmVzcyBpbmZvcm1hdGlvbiAqLworCQlpZiAobWVtY21wKHpkcGFybS0+dS5jcnlwdC5zdGFfYWRkciwgYmNfYWRkciwKKwkJCQlzaXplb2YoYmNfYWRkcikpID09IDApIHsKKwkJCWtleUluZm8uZmxhZyB8PSBaTV9LRVlfRkxBR19HSzsKKwkJCWtleUluZm8udmFwSWQgPSBhcElkOworCQkJbWVtY3B5KGtleUluZm8udmFwQWRkciwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQl9IGVsc2UgeworCQkJa2V5SW5mby5mbGFnIHw9IFpNX0tFWV9GTEFHX1BLOworCQl9CiAKLSAgICAgICAgICAgIHpmaVdsYW5TZXRLZXkoZGV2LCBrZXlJbmZvKTsKKwkJemZpV2xhblNldEtleShkZXYsIGtleUluZm8pOwogCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBaTV9DTURfQ0VOQ19SRUtFWToKLSAgICAgICAgICAgIC8vcmV0ID0gd2FpX2lvY3RsX3Jla2V5KHZhcCwgaW9jdGxfbXNnKTsKLSAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiWk1fQ01EX0NFTkNfUkVLRVlcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXQgPSAtRU9QTk9UU1VQUDsKLSAgICAgICAgICAgIGJyZWFrOworCQlicmVhazsKKwljYXNlIFpNX0NNRF9DRU5DX1JFS0VZOgorCQkvKiByZXQgPSB3YWlfaW9jdGxfcmVrZXkodmFwLCBpb2N0bF9tc2cpOyAqLworCQlwcmludGsoS0VSTl9FUlIgIlpNX0NNRF9DRU5DX1JFS0VZXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCX0KIAotICAgIH0KKwkvKiBpZiAocmV0diA9PSBFTkVUUkVTRVQpICovCisJLyogcmV0diA9IElTX1VQX0FVVE8odmFwKSA/IGllZWU4MDIxMV9vcGVuKHZhcC0+aXZfZGV2KSA6IDA7ICovCiAKLSAgICAvL2lmIChyZXR2ID09IEVORVRSRVNFVCkKLSAgICAvLyAgICByZXR2ID0gSVNfVVBfQVVUTyh2YXApID8gaWVlZTgwMjExX29wZW4odmFwLT5pdl9kZXYpIDogMDsKLQotICAgIHJldHVybiByZXQ7CisJcmV0dXJuIHJldDsKIH0KLSNlbmRpZiAvL1pNX0VOQUJMRV9DRU5DCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2VuZGlmIC8qIFpNX0VOQUJMRV9DRU5DICovCisKIGludCB1c2JkcnZfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiB7Ci0vLyAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3A7Ci0vLyAgICB2b2lkICpyZWdwOwotICAgIHN0cnVjdCB6ZGFwX2lvY3RsIHpkcmVxOwotICAgIHN0cnVjdCBpd3JlcSAqd3JxID0gKHN0cnVjdCBpd3JlcSAqKWlmcjsKLSAgICBzdHJ1Y3QgYXRocl93bGFuX3BhcmFtIHpkcGFybTsKLSAgICBzdHJ1Y3QgdXNiZHJ2X3ByaXZhdGUgKm1hY3AgPSBkZXYtPm1sX3ByaXY7CisJLyogc3RydWN0IHVzYmRydl9wcml2YXRlICptYWNwOyAqLworCS8qIHZvaWQgKnJlZ3A7ICovCisJc3RydWN0IHpkYXBfaW9jdGwgemRyZXE7CisJc3RydWN0IGl3cmVxICp3cnEgPSAoc3RydWN0IGl3cmVxICopaWZyOworCXN0cnVjdCBhdGhyX3dsYW5fcGFyYW0gemRwYXJtOworCXN0cnVjdCB1c2JkcnZfcHJpdmF0ZSAqbWFjcCA9IGRldi0+bWxfcHJpdjsKIAotICAgIGludCBlcnIgPSAwOwotICAgIGludCBjaGFuZ2VkID0gMDsKKwlpbnQgZXJyID0gMDsKKwlpbnQgY2hhbmdlZCA9IDA7CiAKLS8vICAgIHJlZ3AgPSBtYWNwLT5yZWdwOworCS8qIHJlZ3AgPSBtYWNwLT5yZWdwOyAqLwogCi0gICAgaWYoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgc3dpdGNoIChjbWQpCi0gICAgewotICAgICAgICAgICAgY2FzZSBTSU9DR0lXTkFNRToKLSAgICAgICAgICAgIHN0cmNweSh3cnEtPnUubmFtZSwgIklFRUUgODAyLjExLURTIik7Ci0gICAgICAgICAgICBicmVhazsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ0dJV05BTUU6CisJCXN0cmNweSh3cnEtPnUubmFtZSwgIklFRUUgODAyLjExLURTIik7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dJV0FQOgorCQllcnIgPSB1c2JkcnZ3ZXh0X2dpd2FwKGRldiwgTlVMTCwgJndycS0+dS5hcF9hZGRyLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBTSU9DU0lXQVA6CisJCWVyciA9IHVzYmRydndleHRfc2l3YXAoZGV2LCBOVUxMLCAmd3JxLT51LmFwX2FkZHIsIE5VTEwpOworCQlicmVhazsKKwljYXNlIFNJT0NHSVdNT0RFOgorCQllcnIgPSB1c2JkcnZ3ZXh0X2dpd21vZGUoZGV2LCBOVUxMLCAmd3JxLT51Lm1vZGUsIE5VTEwpOworCQlicmVhazsKKwljYXNlIFNJT0NTSVdFU1NJRDoKKwkJcHJpbnRrKEtFUk5fRVJSICJDV1kgLSB1c2JkcnZ3ZXh0X3Npd2Vzc2lkXG4iKTsKKwkJLyogZXJyID0gdXNiZHJ2X2lvY3RsX3NldGVzc2lkKGRldiwgJndycS0+dS5lc3NpZCk7ICovCisJCWVyciA9IHVzYmRydndleHRfc2l3ZXNzaWQoZGV2LCBOVUxMLCAmd3JxLT51LmVzc2lkLCBOVUxMKTsKIAotICAgICAgICBjYXNlIFNJT0NHSVdBUDoKLSAgICAgICAgICAgIGVyciA9IHVzYmRydndleHRfZ2l3YXAoZGV2LCBOVUxMLCAmd3JxLT51LmFwX2FkZHIsIE5VTEwpOwotICAgICAgICAgICAgYnJlYWs7CisJCWlmICghZXJyKQorCQkJY2hhbmdlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgU0lPQ0dJV0VTU0lEOgorCQllcnIgPSB1c2JkcnZ3ZXh0X2dpd2Vzc2lkKGRldiwgTlVMTCwgJndycS0+dS5lc3NpZCwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ1NJV1JUUzoKKwkJZXJyID0gdXNiZHJ2X2lvY3RsX3NldHJ0cyhkZXYsICZ3cnEtPnUucnRzKTsKKwkJaWYgKCEgZXJyKQorCQkJY2hhbmdlZCA9IDE7CisJCWJyZWFrOworCS8qIHNldF9hdXRoICovCisJY2FzZSBTSU9DSVdGSVJTVFBSSVYgKyAweDI6IHsKKwkJLyogcHJpbnRrKCJDV1kgLSBTSU9DSVdGSVJTVFBSSVYgKyAweDIoc2V0X2F1dGgpXG4iKTsgKi8KKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCQllcnIgPSAtRVBFUk07CisJCQlicmVhazsKKwkJfQorCQlpbnQgdmFsID0gKigoaW50ICopIHdycS0+dS5uYW1lKTsKKwkJaWYgKCh2YWwgPCAwKSB8fCAodmFsID4gMikpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCXpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCB2YWwpOwogCisJCQlpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpIHsKKwkJCQl6ZmlXbGFuRGlzYWJsZShkZXYsIDApOworCQkJCXpmaVdsYW5FbmFibGUoZGV2KTsKKwkJCX0KIAotICAgICAgICBjYXNlIFNJT0NTSVdBUDoKLSAgICAgICAgICAgIGVyciA9IHVzYmRydndleHRfc2l3YXAoZGV2LCBOVUxMLCAmd3JxLT51LmFwX2FkZHIsIE5VTEwpOwotICAgICAgICAgICAgYnJlYWs7CisJCQllcnIgPSAwOworCQkJY2hhbmdlZCA9IDE7CisJCX0KKwl9CisJCWJyZWFrOworCS8qIGdldF9hdXRoICovCisJY2FzZSBTSU9DSVdGSVJTVFBSSVYgKyAweDM6IHsKKwkJaW50IEF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX09QRU47CiAKKwkJLyogcHJpbnRrKCJDV1kgLSBTSU9DSVdGSVJTVFBSSVYgKyAweDMoZ2V0X2F1dGgpXG4iKTsgKi8KIAotICAgICAgICBjYXNlIFNJT0NHSVdNT0RFOgotICAgICAgICAgICAgZXJyID0gdXNiZHJ2d2V4dF9naXdtb2RlKGRldiwgTlVMTCwgJndycS0+dS5tb2RlLCBOVUxMKTsKLSAgICAgICAgICAgIGJyZWFrOworCQlpZiAod3JxLT51LmRhdGEucG9pbnRlcikgeworCQkJd3JxLT51LmRhdGEuZmxhZ3MgPSAxOwogCisJCQlBdXRoTW9kZSA9IHpmaVdsYW5RdWVyeUF1dGhlbnRpY2F0aW9uTW9kZShkZXYsIDApOworCQkJaWYgKEF1dGhNb2RlID09IFpNX0FVVEhfTU9ERV9PUEVOKSB7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gMTI7CiAKLSAgICAgICAgY2FzZSBTSU9DU0lXRVNTSUQ6Ci0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkNXWSAtIHVzYmRydndleHRfc2l3ZXNzaWRcbiIpOwotICAgICAgICAgICAgLy9lcnIgPSB1c2JkcnZfaW9jdGxfc2V0ZXNzaWQoZGV2LCAmd3JxLT51LmVzc2lkKTsKLSAgICAgICAgICAgIGVyciA9IHVzYmRydndleHRfc2l3ZXNzaWQoZGV2LCBOVUxMLCAmd3JxLT51LmVzc2lkLCBOVUxMKTsKKwkJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsCisJCQkJCSJvcGVuIHN5c3RlbSIsIDEyKSkgeworCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJfQorCQkJfSBlbHNlIGlmIChBdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfU0hBUkVEX0tFWSkJeworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDExOwogCi0gICAgICAgICAgICBpZiAoISBlcnIpCi0gICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKKwkJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsCisJCQkJCSJzaGFyZWQga2V5IiwgMTEpKSB7CisJCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJfQorCQkJfSBlbHNlIGlmIChBdXRoTW9kZSA9PSBaTV9BVVRIX01PREVfQVVUTykgeworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IDEwOwogCisJCQkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLAorCQkJCQkiYXV0byBtb2RlIiwgMTApKSB7CisJCQkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCX0KKwkJfQorCX0KKwkJYnJlYWs7CisJLyogZGVidWcgY29tbWFuZCAqLworCWNhc2UgWkRBUElPQ1RMOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnpkcmVxLCBpZnItPmlmcl9kYXRhLCBzaXplb2YoemRyZXEpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnYgOiBjb3B5X2Zyb21fdXNlciBlcnJvclxuIik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQogCi0gICAgICAgIGNhc2UgU0lPQ0dJV0VTU0lEOgotICAgICAgICAgICAgZXJyID0gdXNiZHJ2d2V4dF9naXdlc3NpZChkZXYsIE5VTEwsICZ3cnEtPnUuZXNzaWQsIE5VTEwpOwotICAgICAgICAgICAgYnJlYWs7CisJCS8qIHByaW50ayhLRVJOX1dBUk5JTkcKKwkJKiAidXNiZHJ2IDogY21kID0gJSAyeCwgcmVnID0gMHglMDRseCwKKwkJKnZhbHVlID0gMHglMDhseFxuIiwKKwkJKiB6ZHJlcS5jbWQsIHpkcmVxLmFkZHIsIHpkcmVxLnZhbHVlKTsKKwkJKi8KKwkJemZMbnhQcml2YXRlSW9jdGwoZGV2LCAmemRyZXEpOwogCisJCWVyciA9IDA7CisJCWJyZWFrOworCWNhc2UgWkRfSU9DVExfV1BBOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnpkcGFybSwgaWZyLT5pZnJfZGF0YSwKKwkJCXNpemVvZihzdHJ1Y3QgYXRocl93bGFuX3BhcmFtKSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiZHJ2IDogY29weV9mcm9tX3VzZXIgZXJyb3JcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KIAotICAgICAgICBjYXNlIFNJT0NTSVdSVFM6CisJCXVzYmRydl93cGFfaW9jdGwoZGV2LCAmemRwYXJtKTsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJY2FzZSBaRF9JT0NUTF9QQVJBTTogeworCQlpbnQgKnA7CisJCWludCBvcDsKKwkJaW50IGFyZzsKIAotICAgICAgICAgICAgZXJyID0gdXNiZHJ2X2lvY3RsX3NldHJ0cyhkZXYsICZ3cnEtPnUucnRzKTsKLSAgICAgICAgICAgIGlmICghIGVycikKLSAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKLSAgICAgICAgICAgIGJyZWFrOworCQkvKiBQb2ludCB0byB0aGUgbmFtZSBmaWVsZCBhbmQgcmV0cmlldmUgdGhlCisJCSogb3AgYW5kIGFyZyBlbGVtZW50cy4KKwkJKi8KKwkJcCA9IChpbnQgKil3cnEtPnUubmFtZTsKKwkJb3AgPSAqcCsrOworCQlhcmcgPSAqcDsKIAorCQlpZiAob3AgPT0gWkRfUEFSQU1fUk9BTUlORykgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkiKioqKioqKioqKioqKlpEX1BBUkFNX1JPQU1JTkcgOiAlIGRcbiIsIGFyZyk7CisJCQkvKiBtYWNwLT5jYXJkU2V0dGluZy5hcF9zY2FuPShVOClhcmc7ICovCisJCX0KKwkJaWYgKG9wID09IFpEX1BBUkFNX1BSSVZBQ1kpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiWkRfSU9DVExfUFJJVkFDWSA6ICIpOwogCi0JCWNhc2UgU0lPQ0lXRklSU1RQUklWICsgMHgyOiAvKiBzZXRfYXV0aCAqLwotCQl7Ci0JCQkvL3ByaW50aygiQ1dZIC0gU0lPQ0lXRklSU1RQUklWICsgMHgyIChzZXRfYXV0aClcbiIpOwotCQkJaWYgKCEgY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKLQkJCXsKLQkJCQllcnIgPSAtRVBFUk07CisJCQkvKiBUdXJuIG9uIHRoZSBwcml2YWN5IGludm9rZSBmbGFnICovCisJCQlpZiAoYXJnKSB7CisJCQkJLyogbUNhcFswXSB8PSBDQVBfUFJJVkFDWTsgKi8KKwkJCQkvKiBtYWNwLT5jYXJkU2V0dGluZy5FbmNyeU9uT2ZmWzBdID0gMTsgKi8KKwkJCQlwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7CisKKwkJCX0gZWxzZSB7CisJCQkJLyogbUNhcFswXSAmPSB+Q0FQX1BSSVZBQ1k7ICovCisJCQkJLyogbWFjcC0+Y2FyZFNldHRpbmcuRW5jcnlPbk9mZlswXSA9IDA7ICovCisJCQkJcHJpbnRrKEtFUk5fRVJSICJkaXNhYmxlXG4iKTsKKwkJCX0KKwkJCS8qIGNoYW5nZWQ9MTsgKi8KKwkJfQorCQlpZiAob3AgPT0gWkRfUEFSQU1fV1BBKSB7CisKKwkJcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9XUEEgOiAiKTsKKworCQlpZiAoYXJnKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7CisKKwkJCWlmICh6ZmlXbGFuUXVlcnlXbGFuTW9kZShkZXYpICE9IFpNX01PREVfQVApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIlN0YXRpb24gTW9kZVxuIik7CisJCQkJLyogemZpV2xhblF1ZXJ5V3BhSWUoZGV2LCAodThfdCAqKQorCQkJCQkmd3BhSWUsICZ3cGFsZW4pOyAqLworCQkJCS8qIHByaW50aygid3BhSWUgOiAlIDJ4LCAlIDJ4LCAlIDJ4XG4iLAorCQkJCQl3cGFJZVsyMV0sIHdwYUllWzIyXSwgd3BhSWVbMjNdKTsgKi8KKwkJCQkvKiBwcmludGsoInJzbkllIDogJSAyeCwgJSAyeCwgJSAyeFxuIiwKKwkJCQkJd3BhSWVbMTddLCB3cGFJZVsxOF0sIHdwYUllWzE5XSk7ICovCisJCQkJaWYgKChtYWNwLT5zdXBJZVsyMV0gPT0gMHg1MCkgJiYKKwkJCQkJKG1hY3AtPnN1cEllWzIyXSA9PSAweGYyKSAmJgorCQkJCQkobWFjcC0+c3VwSWVbMjNdID09IDB4MikpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIndkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBUFNLXG4iKTsKKwkJCQkvKiB3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQVBTSzsgKi8KKwkJCQkvKiB3ZC0+d3MuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBUFNLOyAqLworCQkJCXpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LAorCQkJCQkJCVpNX0FVVEhfTU9ERV9XUEFQU0spOworCQkJCX0gZWxzZSBpZiAoKG1hY3AtPnN1cEllWzIxXSA9PSAweDUwKSAmJgorCQkJCQkobWFjcC0+c3VwSWVbMjJdID09IDB4ZjIpICYmCisJCQkJCShtYWNwLT5zdXBJZVsyM10gPT0gMHgxKSkgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkid2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEFcbiIpOworCQkJCS8qIHdkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBOyAqLworCQkJCS8qIHdkLT53cy5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEE7ICovCisJCQkJemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsCisJCQkJCQkJWk1fQVVUSF9NT0RFX1dQQSk7CisJCQkJCX0gZWxzZSBpZiAoKG1hY3AtPnN1cEllWzE3XSA9PSAweGYpICYmCisJCQkJCQkobWFjcC0+c3VwSWVbMThdID09IDB4YWMpICYmCisJCQkJCQkobWFjcC0+c3VwSWVbMTldID09IDB4MikpCisJCQkJCXsKKwkJCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJ3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJQU0tcbiIpOworCQkJCS8qIHdkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMlBTSzsgKi8KKwkJCQkvKiB3ZC0+d3MuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMlBTSzsgKi8KKwkJCQl6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwKKwkJCQlaTV9BVVRIX01PREVfV1BBMlBTSyk7CisJCQl9IGVsc2UgaWYgKChtYWNwLT5zdXBJZVsxN10gPT0gMHhmKSAmJgorCQkJCShtYWNwLT5zdXBJZVsxOF0gPT0gMHhhYykgJiYKKwkJCQkobWFjcC0+c3VwSWVbMTldID09IDB4MSkpCisJCQkJeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkid2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyXG4iKTsKKwkJCQkvKiB3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTI7ICovCisJCQkJLyogd2QtPndzLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTI7ICovCisJCQkJemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsCisJCQkJCQkJWk1fQVVUSF9NT0RFX1dQQTIpOworCQkJfQorCQkJLyogV1BBIG9yIFdQQVBTSyAqLworCQkJaWYgKChtYWNwLT5zdXBJZVsyMV0gPT0gMHg1MCkgfHwKKwkJCQkobWFjcC0+c3VwSWVbMjJdID09IDB4ZjIpKSB7CisJCQkJaWYgKG1hY3AtPnN1cEllWzExXSA9PSAweDIpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIndkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQXG4iKTsKKwkJCQkvKiB3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUDsgKi8KKwkJCQkvKiB3ZC0+d3Mud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQOyAqLworCQkJCXpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBaTV9FTkNSWVBUSU9OX1RLSVApOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkid2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFU1xuIik7CisJCQkJLyogd2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFUzsgKi8KKwkJCQkvKiB3ZC0+d3Mud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVM7ICovCisJCQkJemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFpNX0VOQ1JZUFRJT05fQUVTKTsKKwkJCQl9CisJCQl9CisJCQkvL1dQQTIgb3IgV1BBMlBTSworCQkJaWYgKChtYWNwLT5zdXBJZVsxN10gPT0gMHhmKSB8fAorCQkJCShtYWNwLT5zdXBJZVsxOF0gPT0gMHhhYykpIHsKKwkJCQlpZiAobWFjcC0+c3VwSWVbMTNdID09IDB4MikgeworCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkid2QtPnN0YS53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVBcbiIpOworCQkJCS8qIHdkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQOyAqLworCQkJCS8qIHdkLT53cy53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX1RLSVA7ICovCisJCQkJemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFpNX0VOQ1JZUFRJT05fVEtJUCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIndkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVNcbiIpOworCQkJCS8qIHdkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9BRVM7ICovCisJCQkJLyogd2QtPndzLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTOyAqLworCQkJCXpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBaTV9FTkNSWVBUSU9OX0FFUyk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQl6ZmlXbGFuU2V0V3BhU3VwcG9ydChkZXYsIDEpOworCQl9IGVsc2UgeworCQkJLyogUmVzZXQgdGhlIFdQQSByZWxhdGVkIHZhcmlhYmxlcyAqLworCQkJcHJpbnRrKEtFUk5fRVJSICJkaXNhYmxlXG4iKTsKKworCQkJemZpV2xhblNldFdwYVN1cHBvcnQoZGV2LCAwKTsKKwkJCXpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCBaTV9BVVRIX01PREVfT1BFTik7CisJCQl6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9XRVBfRElTQUJMRUQpOworCisJCQkvKiBOb3cgd2Ugb25seSBzZXQgdGhlIGxlbmd0aCBpbiB0aGUgV1BBIElFCisJCQkqIGZpZWxkIHRvIHplcm8uCisJCQkqbWFjcC0+Y2FyZFNldHRpbmcuV1BBSWVbMV0gPSAwOworCQkJKi8KKwkJCX0KKwkJfQorCisJCWlmIChvcCA9PSBaRF9QQVJBTV9DT1VOVEVSTUVBU1VSRVMpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSIqKioqKioqKioqKioqKioqWkRfUEFSQU1fQ09VTlRFUk1FQVNVUkVTIDogIik7CisKKwkJCWlmKGFyZykgeworCQkJCS8qICAgIG1Db3VudGVyTWVhc3VyZVN0YXRlPTE7ICovCisJCQkJcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOworCQkJfSBlbHNlIHsKKwkJCQkvKiAgICBtQ291bnRlck1lYXN1cmVTdGF0ZT0wOyAqLworCQkJCXByaW50ayhLRVJOX0VSUiAiZGlzYWJsZVxuIik7CisJCQl9CisJCX0KKwkJaWYgKG9wID09IFpEX1BBUkFNX0RST1BVTkVOQ1JZUFRFRCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9EUk9QVU5FTkNSWVBURUQgOiAiKTsKKworCQkJaWYoYXJnKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOworCQkJfQorCQl9CisJCWlmIChvcCA9PSBaRF9QQVJBTV9BVVRIX0FMR1MpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiWkRfUEFSQU1fQVVUSF9BTEdTIDogIik7CisKKwkJCWlmIChhcmcgPT0gMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiT1BFTl9TWVNURU1cbiIpOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIlNIQVJFRF9LRVlcbiIpOworCQkJfQorCQl9CisJCWlmIChvcCA9PSBaRF9QQVJBTV9XUFNfRklMVEVSKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlpEX1BBUkFNX1dQU19GSUxURVIgOiAiKTsKKworCQkJaWYgKGFyZykgeworCQkJCS8qICAgIG1Db3VudGVyTWVhc3VyZVN0YXRlPTE7ICovCisJCQkJbWFjcC0+Zm9yd2FyZE1nbXQgPSAxOworCQkJCXByaW50ayhLRVJOX0VSUiAiZW5hYmxlXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogICAgbUNvdW50ZXJNZWFzdXJlU3RhdGU9MDsgKi8KKwkJCQltYWNwLT5mb3J3YXJkTWdtdCA9IDA7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJkaXNhYmxlXG4iKTsKKwkJCX0KKwkJfQorCX0KKwkJZXJyID0gMDsKKwkJYnJlYWs7CisJY2FzZSBaRF9JT0NUTF9HRVRXUEFJRTogeworCQlzdHJ1Y3QgaWVlZTgwMjExcmVxX3dwYWllIHJlcV93cGFpZTsKKwkJdTE2X3QgYXBJZCwgaSwgajsKKworCQkvKiBHZXQgdGhlIEFQIElkICovCisJCWFwSWQgPSB6ZkxueEdldFZhcElkKGRldik7CisKKwkJaWYgKGFwSWQgPT0gMHhmZmZmKSB7CisJCQlhcElkID0gMDsKKwkJfSBlbHNlIHsKKwkJCWFwSWQgPSBhcElkICsgMTsKKwkJfQorCisJCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxX3dwYWllLCBpZnItPmlmcl9kYXRhLAorCQkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMXJlcV93cGFpZSkpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVzYmRydiA6IGNvcHlfZnJvbV91c2VyIGVycm9yXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IFpNX09BTF9NQVhfU1RBX1NVUFBPUlQ7IGkrKykgeworCQkJZm9yIChqID0gMDsgaiA8IElFRUU4MDIxMV9BRERSX0xFTjsgaisrKSB7CisJCQkJaWYgKG1hY3AtPnN0YXdwYWllW2ldLndwYV9tYWNhZGRyW2pdICE9CisJCQkJCQlyZXFfd3BhaWUud3BhX21hY2FkZHJbal0pCiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQl7Ci0JCQkJaW50IHZhbCA9ICooIChpbnQgKikgd3JxLT51Lm5hbWUgKTsKLQkJCQlpZiAoKHZhbCA8IDApIHx8ICh2YWwgPiAyKSkKLQkJCQl7Ci0JCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJewotCQkJCQl6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwgdmFsKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobWFjcC0+RGV2aWNlT3BlbmVkID09IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5EaXNhYmxlKGRldiwgMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuRW5hYmxlKGRldik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotCQkJCQllcnIgPSAwOwotCQkJCQljaGFuZ2VkID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCX0KKwkJCWlmIChqID09IDYpCiAJCQlicmVhazsKLQotCQljYXNlIFNJT0NJV0ZJUlNUUFJJViArIDB4MzogLyogZ2V0X2F1dGggKi8KLQkJewotCQkgICAgaW50IEF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX09QRU47Ci0KLQkJCS8vcHJpbnRrKCJDV1kgLSBTSU9DSVdGSVJTVFBSSVYgKyAweDMgKGdldF9hdXRoKVxuIik7Ci0KLQkJCWlmICh3cnEtPnUuZGF0YS5wb2ludGVyKQotCQkJewotCQkJCXdycS0+dS5kYXRhLmZsYWdzID0gMTsKLQotCQkJCUF1dGhNb2RlID0gemZpV2xhblF1ZXJ5QXV0aGVudGljYXRpb25Nb2RlKGRldiwgMCk7Ci0JCQkJaWYgKEF1dGhNb2RlID09IFpNX0FVVEhfTU9ERV9PUEVOKQotCQkJCXsKLQkJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gMTI7Ci0KLQkJCQkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAib3BlbiBzeXN0ZW0iLCAxMikpCi0JCQkJCXsKLQkJCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgaWYgKEF1dGhNb2RlID09IFpNX0FVVEhfTU9ERV9TSEFSRURfS0VZKQotCQkJCXsKLQkJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gMTE7Ci0KLQkJCQkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAic2hhcmVkIGtleSIsIDExKSkKLQkJCQkJewotCQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJZWxzZSBpZiAoQXV0aE1vZGUgPT0gWk1fQVVUSF9NT0RFX0FVVE8pCi0JCQkJewotCQkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAxMDsKLQotCQkJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICJhdXRvIG1vZGUiLCAxMCkpCi0JCQkJCXsKLQkJCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCX0KLQkJCX0KIAkJfQotCQkJYnJlYWs7CiAKKwkJaWYgKGkgPCBaTV9PQUxfTUFYX1NUQV9TVVBQT1JUKSB7CisJCS8qIHByaW50aygiWkRfSU9DVExfR0VUV1BBSUUgLSBzdGEgaW5kZXggPSAlIGRcbiIsIGkpOyAqLworCQltZW1jcHkocmVxX3dwYWllLndwYV9pZSwgbWFjcC0+c3Rhd3BhaWVbaV0ud3BhX2llLAorCQkJCQkJCUlFRUU4MDIxMV9NQVhfSUVfU0laRSk7CisJCX0KIAotICAgICAgICBjYXNlIFpEQVBJT0NUTDogICAgLy9kZWJ1ZyBjb21tYW5kCi0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnpkcmVxLCBpZnItPmlmcl9kYXRhLCBzaXplb2YgKHpkcmVxKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnY6IGNvcHlfZnJvbV91c2VyIGVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KKwkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcmVxX3dwYWllLAorCQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExcmVxX3dwYWllKSkpIHsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfQogCi0gICAgICAgICAgICAvL3ByaW50ayhLRVJOX0RFQlVHICJ1c2JkcnY6IGNtZD0lMngsIHJlZz0weCUwNGx4LCB2YWx1ZT0weCUwOGx4XG4iLAotICAgICAgICAgICAgLy8gICAgICAgIHpkcmVxLmNtZCwgemRyZXEuYWRkciwgemRyZXEudmFsdWUpOworCQllcnIgPSAwOworCQlicmVhazsKKwkjaWZkZWYgWk1fRU5BQkxFX0NFTkMKKwljYXNlIFpNX0lPQ1RMX0NFTkM6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmbWFjcC0+emRfd3BhX3JlcSwgaWZyLT5pZnJfZGF0YSwKKwkJCXNpemVvZihzdHJ1Y3QgYXRocl93bGFuX3BhcmFtKSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNiZHJ2IDogY29weV9mcm9tX3VzZXIgZXJyb3JcbiIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KIAotCQkJemZMbnhQcml2YXRlSW9jdGwoZGV2LCAmemRyZXEpOworCQl1c2JkcnZfY2VuY19pb2N0bChkZXYsCisJCQkJKHN0cnVjdCB6eWRhc19jZW5jX3BhcmFtICopJm1hY3AtPnpkX3dwYV9yZXEpOworCQllcnIgPSAwOworCQlicmVhazsKKwkjZW5kaWYgLyogWk1fRU5BQkxFX0NFTkMgKi8KKwlkZWZhdWx0OgorCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisJfQogCi0gICAgICAgICAgICBlcnIgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBaRF9JT0NUTF9XUEE6Ci0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnpkcGFybSwgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBhdGhyX3dsYW5fcGFyYW0pKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgInVzYmRydjogY29weV9mcm9tX3VzZXIgZXJyb3JcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1c2JkcnZfd3BhX2lvY3RsKGRldiwgJnpkcGFybSk7Ci0gICAgICAgICAgICBlcnIgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBaRF9JT0NUTF9QQVJBTToKLSAgICAgICAgewotICAgICAgICAgICAgaW50ICpwOwotICAgICAgICAgICAgaW50IG9wOwotICAgICAgICAgICAgaW50IGFyZzsKLQotICAgICAgICAgICAgLyogUG9pbnQgdG8gdGhlIG5hbWUgZmllbGQgYW5kIHJldHJpZXZlIHRoZQotICAgICAgICAgICAgICogb3AgYW5kIGFyZyBlbGVtZW50cy4gICAgICAgICAgKi8KLSAgICAgICAgICAgIHAgPSAoaW50ICopd3JxLT51Lm5hbWU7Ci0gICAgICAgICAgICBvcCA9ICpwKys7Ci0gICAgICAgICAgICBhcmcgPSAqcDsKLQotICAgICAgICAgICAgaWYob3AgPT0gWkRfUEFSQU1fUk9BTUlORykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIioqKioqKioqKioqKiogWkRfUEFSQU1fUk9BTUlORzogJWRcbiIsIGFyZyk7Ci0gICAgICAgICAgICAgICAgLy9tYWNwLT5jYXJkU2V0dGluZy5hcF9zY2FuPShVOClhcmc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZihvcCA9PSBaRF9QQVJBTV9QUklWQUNZKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiWkRfSU9DVExfUFJJVkFDWTogIik7Ci0KLSAgICAgICAgICAgICAgICAvKiBUdXJuIG9uIHRoZSBwcml2YWN5IGludm9rZSBmbGFnICovCi0gICAgICAgICAgICAgICAgaWYoYXJnKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICBtQ2FwWzBdIHw9IENBUF9QUklWQUNZOwotICAgICAgICAgICAgICAgIC8vICAgIG1hY3AtPmNhcmRTZXR0aW5nLkVuY3J5T25PZmZbMF0gPSAxOwotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVuYWJsZVxuIik7Ci0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyAgICBtQ2FwWzBdICY9IH5DQVBfUFJJVkFDWTsKLSAgICAgICAgICAgICAgICAvLyAgICBtYWNwLT5jYXJkU2V0dGluZy5FbmNyeU9uT2ZmWzBdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJkaXNhYmxlXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY2hhbmdlZD0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYob3AgPT0gWkRfUEFSQU1fV1BBKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiWkRfUEFSQU1fV1BBOiAiKTsKLQotICAgICAgICAgICAgICAgIGlmKGFyZykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZW5hYmxlXG4iKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoemZpV2xhblF1ZXJ5V2xhbk1vZGUoZGV2KSAhPSBaTV9NT0RFX0FQKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIlN0YXRpb24gTW9kZVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvL3pmaVdsYW5RdWVyeVdwYUllKGRldiwgKHU4X3QgKikmd3BhSWUsICZ3cGFsZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGsoIndwYUllIDogJTJ4LCUyeCwlMnhcbiIsIHdwYUllWzIxXSwgd3BhSWVbMjJdLCB3cGFJZVsyM10pOwotICAgICAgICAgICAgICAgICAgICAgICAgLy9wcmludGsoInJzbkllIDogJTJ4LCUyeCwlMnhcbiIsIHdwYUllWzE3XSwgd3BhSWVbMThdLCB3cGFJZVsxOV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChtYWNwLT5zdXBJZVsyMV0gPT0gMHg1MCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjcC0+c3VwSWVbMjJdID09IDB4ZjIpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY3AtPnN1cEllWzIzXSA9PSAweDIpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAid2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEFQU0tcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEFQU0s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+d3MuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBUFNLOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCBaTV9BVVRIX01PREVfV1BBUFNLKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChtYWNwLT5zdXBJZVsyMV0gPT0gMHg1MCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNwLT5zdXBJZVsyMl0gPT0gMHhmMikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNwLT5zdXBJZVsyM10gPT0gMHgxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPndzLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwgWk1fQVVUSF9NT0RFX1dQQSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgobWFjcC0+c3VwSWVbMTddID09IDB4ZikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNwLT5zdXBJZVsxOF0gPT0gMHhhYykgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNwLT5zdXBJZVsxOV0gPT0gMHgyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndkLT5zdGEuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMlBTS1xuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJQU0s7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+d3MuYXV0aE1vZGUgPSBaTV9BVVRIX01PREVfV1BBMlBTSzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0QXV0aGVudGljYXRpb25Nb2RlKGRldiwgWk1fQVVUSF9NT0RFX1dQQTJQU0spOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKG1hY3AtPnN1cEllWzE3XSA9PSAweGYpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjcC0+c3VwSWVbMThdID09IDB4YWMpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjcC0+c3VwSWVbMTldID09IDB4MSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3ZC0+c3RhLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPnN0YS5hdXRoTW9kZSA9IFpNX0FVVEhfTU9ERV9XUEEyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2QtPndzLmF1dGhNb2RlID0gWk1fQVVUSF9NT0RFX1dQQTI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldEF1dGhlbnRpY2F0aW9uTW9kZShkZXYsIFpNX0FVVEhfTU9ERV9XUEEyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobWFjcC0+c3VwSWVbMjFdID09IDB4NTApIHx8IChtYWNwLT5zdXBJZVsyMl0gPT0gMHhmMikpLy9XUEEgb3IgV1BBUFNLCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hY3AtPnN1cEllWzExXSA9PSAweDIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+d3Mud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9US0lQKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT53cy53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFUzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFpNX0VOQ1JZUFRJT05fQUVTKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1hY3AtPnN1cEllWzE3XSA9PSAweGYpIHx8IChtYWNwLT5zdXBJZVsxOF0gPT0gMHhhYykpIC8vV1BBMiBvciBXUEEyUFNLCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hY3AtPnN1cEllWzEzXSA9PSAweDIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIndkLT5zdGEud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fVEtJUDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+d3Mud2VwU3RhdHVzID0gWk1fRU5DUllQVElPTl9US0lQOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZmlXbGFuU2V0V2VwU3RhdHVzKGRldiwgWk1fRU5DUllQVElPTl9US0lQKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ3ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93ZC0+c3RhLndlcFN0YXR1cyA9IFpNX0VOQ1JZUFRJT05fQUVTOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3dkLT53cy53ZXBTdGF0dXMgPSBaTV9FTkNSWVBUSU9OX0FFUzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldFdlcFN0YXR1cyhkZXYsIFpNX0VOQ1JZUFRJT05fQUVTKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgemZpV2xhblNldFdwYVN1cHBvcnQoZGV2LCAxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgdGhlIFdQQSByZWxhdGVkIHZhcmlhYmxlcyAqLwotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImRpc2FibGVcbiIpOwotCi0gICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRXcGFTdXBwb3J0KGRldiwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRBdXRoZW50aWNhdGlvbk1vZGUoZGV2LCBaTV9BVVRIX01PREVfT1BFTik7Ci0gICAgICAgICAgICAgICAgICAgIHpmaVdsYW5TZXRXZXBTdGF0dXMoZGV2LCBaTV9FTkNSWVBUSU9OX1dFUF9ESVNBQkxFRCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLyogTm93IHdlIG9ubHkgc2V0IHRoZSBsZW5ndGggaW4gdGhlIFdQQSBJRQotICAgICAgICAgICAgICAgICAgICAgKiBmaWVsZCB0byB6ZXJvLiAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAvL21hY3AtPmNhcmRTZXR0aW5nLldQQUllWzFdID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZihvcCA9PSBaRF9QQVJBTV9DT1VOVEVSTUVBU1VSRVMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICI9PT09PT09PT09PT09PT09WkRfUEFSQU1fQ09VTlRFUk1FQVNVUkVTOiAiKTsKLQotICAgICAgICAgICAgICAgIGlmKGFyZykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gICAgbUNvdW50ZXJNZWFzdXJlU3RhdGU9MTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vICAgIG1Db3VudGVyTWVhc3VyZVN0YXRlPTA7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZGlzYWJsZVxuIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYob3AgPT0gWkRfUEFSQU1fRFJPUFVORU5DUllQVEVEKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiWkRfUEFSQU1fRFJPUFVORU5DUllQVEVEOiAiKTsKLQotICAgICAgICAgICAgICAgIGlmKGFyZykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZW5hYmxlXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJkaXNhYmxlXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZihvcCA9PSBaRF9QQVJBTV9BVVRIX0FMR1MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJaRF9QQVJBTV9BVVRIX0FMR1M6ICIpOwotCi0gICAgICAgICAgICAgICAgaWYoYXJnID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIk9QRU5fU1lTVEVNXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJTSEFSRURfS0VZXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZihvcCA9PSBaRF9QQVJBTV9XUFNfRklMVEVSKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiWkRfUEFSQU1fV1BTX0ZJTFRFUjogIik7Ci0KLSAgICAgICAgICAgICAgICBpZihhcmcpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vICAgIG1Db3VudGVyTWVhc3VyZVN0YXRlPTE7Ci0gICAgICAgICAgICAgICAgICAgIG1hY3AtPmZvcndhcmRNZ210ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlbmFibGVcbiIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vICAgIG1Db3VudGVyTWVhc3VyZVN0YXRlPTA7Ci0gICAgICAgICAgICAgICAgICAgIG1hY3AtPmZvcndhcmRNZ210ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJkaXNhYmxlXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFpEX0lPQ1RMX0dFVFdQQUlFOgotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExcmVxX3dwYWllIHJlcV93cGFpZTsKLSAgICAgICAgICAgIHUxNl90IGFwSWQsIGksIGo7Ci0KLSAgICAgICAgICAgIC8qIEdldCB0aGUgQVAgSWQgKi8KLSAgICAgICAgICAgIGFwSWQgPSB6ZkxueEdldFZhcElkKGRldik7Ci0KLSAgICAgICAgICAgIGlmIChhcElkID09IDB4ZmZmZikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhcElkID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhcElkID0gYXBJZCsxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnJlcV93cGFpZSwgaWZyLT5pZnJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFyZXFfd3BhaWUpKSl7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnY6IGNvcHlfZnJvbV91c2VyIGVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgWk1fT0FMX01BWF9TVEFfU1VQUE9SVDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IElFRUU4MDIxMV9BRERSX0xFTjsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1hY3AtPnN0YXdwYWllW2ldLndwYV9tYWNhZGRyW2pdICE9IHJlcV93cGFpZS53cGFfbWFjYWRkcltqXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoaiA9PSA2KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpIDwgWk1fT0FMX01BWF9TVEFfU1VQUE9SVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvL3ByaW50aygiWkRfSU9DVExfR0VUV1BBSUUgLSBzdGEgaW5kZXggPSAlZFxuIiwgaSk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHJlcV93cGFpZS53cGFfaWUsIG1hY3AtPnN0YXdwYWllW2ldLndwYV9pZSwgSUVFRTgwMjExX01BWF9JRV9TSVpFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcmVxX3dwYWllLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMXJlcV93cGFpZSkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgICAgICBlcnIgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgWk1fRU5BQkxFX0NFTkMKLSAgICAgICAgY2FzZSBaTV9JT0NUTF9DRU5DOgotICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZtYWNwLT56ZF93cGFfcmVxLCBpZnItPmlmcl9kYXRhLCBzaXplb2Yoc3RydWN0IGF0aHJfd2xhbl9wYXJhbSkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAidXNiZHJ2OiBjb3B5X2Zyb21fdXNlciBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVzYmRydl9jZW5jX2lvY3RsKGRldiwgKHN0cnVjdCB6eWRhc19jZW5jX3BhcmFtICopJm1hY3AtPnpkX3dwYV9yZXEpOwotICAgICAgICAgICAgZXJyID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8vWk1fRU5BQkxFX0NFTkMKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVyciA9IC1FT1BOT1RTVVBQOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0KLSAgICByZXR1cm4gZXJyOworCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3VzYmRydi5jCmluZGV4IGRmZTA3MDcuLjU2NWE4MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3VzYmRydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3VzYmRydi5jCkBAIC05MzYsMzAgKzkzNiwyNiBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkKICAgICB7CiAgICAgICAgIGVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7Ci0gICAgICAgIGlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgotICAgICAgICAgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpCisJIGlmICh1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihlbmRwb2ludCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIHdlIGZvdW5kIGEgYnVsayBpbiBlbmRwb2ludCAqLwogICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJidWxrIGluOiB3TWF4UGFja2V0U2l6ZSA9ICV4XG4iLCBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgPT0gMHgwMCkgJiYKLSAgICAgICAgICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDIpKQorCSBpZiAodXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KGVuZHBvaW50KSkKICAgICAgICAgewogICAgICAgICAgICAgLyogd2UgZm91bmQgYSBidWxrIG91dCBlbmRwb2ludCAqLwogICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJidWxrIG91dDogd01heFBhY2tldFNpemUgPSAleFxuIiwgbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkgJiYKLSAgICAgICAgICAgICgoZW5kcG9pbnQtPmJtQXR0cmlidXRlcyAmIDMpID09IDB4MDMpKQorCSBpZiAodXNiX2VuZHBvaW50X2lzX2ludF9pbihlbmRwb2ludCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIHdlIGZvdW5kIGEgaW50ZXJydXB0IGluIGVuZHBvaW50ICovCiAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImludGVycnVwdCBpbjogd01heFBhY2tldFNpemUgPSAleFxuIiwgbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSk7CiAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImludGVycnVwdCBpbjogaW50X2ludGVydmFsID0gJWRcbiIsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAweDAwKSAmJgotICAgICAgICAgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMykpCisJIGlmICh1c2JfZW5kcG9pbnRfaXNfaW50X291dChlbmRwb2ludCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIHdlIGZvdW5kIGEgaW50ZXJydXB0IG91dCBlbmRwb2ludCAqLwogICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJpbnRlcnJ1cHQgb3V0OiB3TWF4UGFja2V0U2l6ZSA9ICV4XG4iLCBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3d3cmFwLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy93d3JhcC5jCmluZGV4IDFiYjVmNTkuLjRkYjhmNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3d3cmFwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3dyYXAuYwpAQCAtMzUwLDggKzM1MCw3IEBACiAgICAgYnVmLT5sZW4gPSAwOwogI2VuZGlmCiAKLSAgICBpZiAoKGJ1Zi0+dGFpbCArIHVyYi0+YWN0dWFsX2xlbmd0aCkgPiBidWYtPmVuZCkKLSAgICAgICAgQlVHKCk7CisgICAgQlVHX09OKChidWYtPnRhaWwgKyB1cmItPmFjdHVhbF9sZW5ndGgpID4gYnVmLT5lbmQpOwogCiAgICAgc2tiX3B1dChidWYsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAKQEAgLTk3MSw4ICs5NzAsNyBAQAogb3V0OgogCXJldHVybiByZXQ7CiBubG1zZ19mYWlsdXJlOiAvKk5MTVNHX1BVVCDKp7Dco6zU8rO3z/rM173T19a7urTmKi8KLSAgCWlmKHNrYikKLSAgICAJCWtmcmVlX3NrYihza2IpOworCWtmcmVlX3NrYihza2IpOwogCWdvdG8gb3V0OwogCiAjdW5kZWYgQ09NTVRZUEVfR1JPVVAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkY29tcGF0LmggYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy96ZGNvbXBhdC5oCmluZGV4IDhhY2Y0MDAuLmQ5YTNiMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkY29tcGF0LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvemRjb21wYXQuaApAQCAtNDUsMTMgKzQ1LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgSVJRX05PTkUKLXR5cGVkZWYgdm9pZCBpcnFyZXR1cm5fdDsKLSNkZWZpbmUgSVJRX05PTkUKLSNkZWZpbmUgSVJRX0hBTkRMRUQKLSNkZWZpbmUgSVJRX1JFVFZBTCh4KQotI2VuZGlmCi0KICNpZm5kZWYgaW5fYXRvbWljCiAjZGVmaW5lIGluX2F0b21pYygpICAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWM2NmQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9LY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorY29uZmlnIFBMQU45QVVUSAorCXRyaXN0YXRlICJQbGFuIDkgc3R5bGUgY2FwYWJpbGl0eSBkZXZpY2UgaW1wbGVtZW50YXRpb24iCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBDUllQVE8KKwloZWxwCisJICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBQbGFuIDkgc3R5bGUgY2FwYWJpbGl0eSBkZXZpY2UuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZQorCSAgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHA5YXV0aC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYmY2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL01ha2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19QTEFOOUFVVEgpCSs9IHA5YXV0aC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL3A5YXV0aC5jIGIvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2FjODliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYwpAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqIFBsYW4gOSBzdHlsZSBjYXBhYmlsaXR5IGRldmljZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIExpbnV4IEtlcm5lbAorICoKKyAqIENvcHlyaWdodCAyMDA4LCAyMDA5IEFzaHdpbiBHYW50aSA8YXNod2luLmdhbnRpQGdtYWlsLmNvbT4KKyAqCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KKworI2lmbmRlZiBDQVBfTUFKT1IKKyNkZWZpbmUgQ0FQX01BSk9SIDAKKyNlbmRpZgorCisjaWZuZGVmIENBUF9OUl9ERVZTCisjZGVmaW5lIENBUF9OUl9ERVZTIDIJCS8qIGNhcGhhc2ggYW5kIGNhcHVzZSAqLworI2VuZGlmCisKKyNpZm5kZWYgQ0FQX05PREVfU0laRQorI2RlZmluZSBDQVBfTk9ERV9TSVpFIDIwCisjZW5kaWYKKworI2RlZmluZSBNQVhfRElHRVNUX1NJWkUgIDIwCisKK3N0cnVjdCBjYXBfbm9kZSB7CisJY2hhciBkYXRhW0NBUF9OT0RFX1NJWkVdOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0cnVjdCBjYXBfZGV2IHsKKwlzdHJ1Y3QgY2FwX25vZGUgKmhlYWQ7CisJaW50IG5vZGVfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJc3RydWN0IHNlbWFwaG9yZSBzZW07CisJc3RydWN0IGNkZXYgY2RldjsKK307CisKK3N0YXRpYyBpbnQgY2FwX21ham9yID0gQ0FQX01BSk9SOworc3RhdGljIGludCBjYXBfbWlub3I7CitzdGF0aWMgaW50IGNhcF9ucl9kZXZzID0gQ0FQX05SX0RFVlM7CitzdGF0aWMgaW50IGNhcF9ub2RlX3NpemUgPSBDQVBfTk9ERV9TSVpFOworCittb2R1bGVfcGFyYW0oY2FwX21ham9yLCBpbnQsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKGNhcF9taW5vciwgaW50LCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbShjYXBfbnJfZGV2cywgaW50LCBTX0lSVUdPKTsKKworTU9EVUxFX0FVVEhPUigiQXNod2luIEdhbnRpIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBzdHJ1Y3QgY2FwX2RldiAqY2FwX2RldmljZXM7CisKK3N0YXRpYyB2b2lkIGhleGR1bXAodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXdoaWxlIChsZW4tLSkKKwkJcHJpbnRrKCIlMDJ4IiwgKmJ1ZisrKTsKKwlwcmludGsoIlxuIik7Cit9CisKK3N0YXRpYyBjaGFyICpjYXBfaGFzaChjaGFyICpwbGFpbl90ZXh0LCB1bnNpZ25lZCBpbnQgcGxhaW5fdGV4dF9zaXplLAorCQkgICAgICBjaGFyICprZXksIHVuc2lnbmVkIGludCBrZXlfc2l6ZSkKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisJY2hhciAqcmVzdWx0OworCXN0cnVjdCBjcnlwdG9faGFzaCAqdGZtOworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKKwlpbnQgcmV0OworCisJdGZtID0gY3J5cHRvX2FsbG9jX2hhc2goImhtYWMoc2hhMSkiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHRmbSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiZmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciBobWFjKHNoYTEpOiAlbGRcbiIsCisJCSAgICAgICBQVFJfRVJSKHRmbSkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkZXNjLnRmbSA9IHRmbTsKKwlkZXNjLmZsYWdzID0gMDsKKworCXJlc3VsdCA9IGt6YWxsb2MoTUFYX0RJR0VTVF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIm91dCBvZiBtZW1vcnkhXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJc2dfc2V0X2J1Zigmc2csIHBsYWluX3RleHQsIHBsYWluX3RleHRfc2l6ZSk7CisKKwlyZXQgPSBjcnlwdG9faGFzaF9zZXRrZXkodGZtLCBrZXksIGtleV9zaXplKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAic2V0a2V5KCkgZmFpbGVkIHJldD0lZFxuIiwgcmV0KTsKKwkJa2ZyZWUocmVzdWx0KTsKKwkJcmVzdWx0ID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCAmc2csIHBsYWluX3RleHRfc2l6ZSwgcmVzdWx0KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiZGlnZXN0ICgpIGZhaWxlZCByZXQ9JWRcbiIsIHJldCk7CisJCWtmcmVlKHJlc3VsdCk7CisJCXJlc3VsdCA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJjcnlwdG8gaGFzaCBkaWdlc3Qgc2l6ZSAlZFxuIiwKKwkgICAgICAgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZSh0Zm0pKTsKKwloZXhkdW1wKHJlc3VsdCwgTUFYX0RJR0VTVF9TSVpFKTsKKworb3V0OgorCWNyeXB0b19mcmVlX2hhc2godGZtKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGNhcF90cmltKHN0cnVjdCBjYXBfZGV2ICpkZXYpCit7CisJc3RydWN0IGNhcF9ub2RlICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqcTsKKwlpZiAoZGV2LT5oZWFkICE9IE5VTEwpIHsKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcSwgJihkZXYtPmhlYWQtPmxpc3QpKSB7CisJCQl0bXAgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGNhcF9ub2RlLCBsaXN0KTsKKwkJCWxpc3RfZGVsKHBvcyk7CisJCQlrZnJlZSh0bXApOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhcF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBjYXBfZGV2ICpkZXY7CisJZGV2ID0gY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBjYXBfZGV2LCBjZGV2KTsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBkZXY7CisKKwkvKiB0cmltIHRvIDAgdGhlIGxlbmd0aCBvZiB0aGUgZGV2aWNlIGlmIG9wZW4gd2FzIHdyaXRlLW9ubHkgKi8KKwlpZiAoKGZpbHAtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fV1JPTkxZKSB7CisJCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRldi0+c2VtKSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCWNhcF90cmltKGRldik7CisJCXVwKCZkZXYtPnNlbSk7CisJfQorCS8qIGluaXRpYWxpc2UgdGhlIGhlYWQgaWYgaXQgaXMgTlVMTCAqLworCWlmIChkZXYtPmhlYWQgPT0gTlVMTCkgeworCQlkZXYtPmhlYWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2FwX25vZGUpLCBHRlBfS0VSTkVMKTsKKwkJSU5JVF9MSVNUX0hFQUQoJihkZXYtPmhlYWQtPmxpc3QpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2FwX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNhcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqZl9wb3MpCit7CisJc3RydWN0IGNhcF9ub2RlICpub2RlX3B0ciwgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IGNhcF9kZXYgKmRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzc2l6ZV90IHJldHZhbCA9IC1FTk9NRU07CisJc3RydWN0IGNyZWQgKm5ldzsKKwlpbnQgbGVuLCB0YXJnZXRfaW50LCBzb3VyY2VfaW50LCBmbGFnID0gMDsKKwljaGFyICp1c2VyX2J1ZiwgKnVzZXJfYnVmX3J1bm5pbmcsICpzb3VyY2VfdXNlciwgKnRhcmdldF91c2VyLAorCSAgICAqcmFuZF9zdHIsICpoYXNoX3N0ciwgKnJlc3VsdDsKKworCWlmIChkb3duX2ludGVycnVwdGlibGUoJmRldi0+c2VtKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCW5vZGVfcHRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhcF9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJdXNlcl9idWYgPSBremFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcih1c2VyX2J1ZiwgYnVmLCBjb3VudCkpIHsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgbWlub3IgbnVtYmVyIGlzIDAgKCAvZGV2L2NhcGhhc2ggKSB0aGVuIHNpbXBseSBhZGQgdGhlCisJICogaGFzaGVkIGNhcGFiaWxpdHkgc3VwcGxpZWQgYnkgdGhlIHVzZXIgdG8gdGhlIGxpc3Qgb2YgaGFzaGVzCisJICovCisJaWYgKDAgPT0gaW1pbm9yKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDYXBhYmlsaXR5IGJlaW5nIHdyaXR0ZW4gdG8gL2Rldi9jYXBoYXNoIDogXG4iKTsKKwkJaGV4ZHVtcCh1c2VyX2J1ZiwgY291bnQpOworCQltZW1jcHkobm9kZV9wdHItPmRhdGEsIHVzZXJfYnVmLCBjb3VudCk7CisJCWxpc3RfYWRkKCYobm9kZV9wdHItPmxpc3QpLCAmKGRldi0+aGVhZC0+bGlzdCkpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIGJyZWFrIHRoZSBzdXBwbGllZCBzdHJpbmcgaW50byB0b2tlbnMgd2l0aCBAIGFzIHRoZQorCQkgKiBkZWxpbWl0ZXIgSWYgdGhlIHN0cmluZyBpcyAidXNlcjFAdXNlcjJAcmFuZG9tc3RyaW5nIiB3ZQorCQkgKiBuZWVkIHRvIHNwbGl0IGl0IGFuZCBoYXNoICd1c2VyMUB1c2VyMicgdXNpbmcgJ3JhbmRvbXN0cmluZycKKwkJICogYXMgdGhlIGtleS4KKwkJICovCisJCXVzZXJfYnVmX3J1bm5pbmcgPSBrc3RyZHVwKHVzZXJfYnVmLCBHRlBfS0VSTkVMKTsKKwkJc291cmNlX3VzZXIgPSBzdHJzZXAoJnVzZXJfYnVmX3J1bm5pbmcsICJAIik7CisJCXRhcmdldF91c2VyID0gc3Ryc2VwKCZ1c2VyX2J1Zl9ydW5uaW5nLCAiQCIpOworCQlyYW5kX3N0ciA9IHN0cnNlcCgmdXNlcl9idWZfcnVubmluZywgIkAiKTsKKworCQkvKiBoYXNoIHRoZSBzdHJpbmcgdXNlcjFAdXNlcjIgd2l0aCByYW5kX3N0ciBhcyB0aGUga2V5ICovCisJCWxlbiA9IHN0cmxlbihzb3VyY2VfdXNlcikgKyBzdHJsZW4odGFyZ2V0X3VzZXIpICsgMTsKKwkJaGFzaF9zdHIgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCXN0cmNhdChoYXNoX3N0ciwgc291cmNlX3VzZXIpOworCQlzdHJjYXQoaGFzaF9zdHIsICJAIik7CisJCXN0cmNhdChoYXNoX3N0ciwgdGFyZ2V0X3VzZXIpOworCisJCXByaW50ayhLRVJOX0FMRVJUICJ0aGUgc291cmNlIHVzZXIgaXMgJXMgXG4iLCBzb3VyY2VfdXNlcik7CisJCXByaW50ayhLRVJOX0FMRVJUICJ0aGUgdGFyZ2V0IHVzZXIgaXMgJXMgXG4iLCB0YXJnZXRfdXNlcik7CisKKwkJcmVzdWx0ID0gY2FwX2hhc2goaGFzaF9zdHIsIGxlbiwgcmFuZF9zdHIsIHN0cmxlbihyYW5kX3N0cikpOworCQlpZiAoTlVMTCA9PSByZXN1bHQpIHsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQltZW1jcHkobm9kZV9wdHItPmRhdGEsIHJlc3VsdCwgQ0FQX05PREVfU0laRSk7CisJCS8qIENoYW5nZSB0aGUgcHJvY2VzcydzIHVpZCBpZiB0aGUgaGFzaCBpcyBwcmVzZW50IGluIHRoZQorCQkgKiBsaXN0IG9mIGhhc2hlcworCQkgKi8KKwkJbGlzdF9mb3JfZWFjaChwb3MsICYoY2FwX2RldmljZXMtPmhlYWQtPmxpc3QpKSB7CisJCQkvKgorCQkJICogQ2hhbmdlIHRoZSB1c2VyIGlkIG9mIHRoZSBwcm9jZXNzIGlmIHRoZSBoYXNoZXMKKwkJCSAqIG1hdGNoCisJCQkgKi8KKwkJCWlmICgwID09CisJCQkgICAgbWVtY21wKHJlc3VsdCwKKwkJCQkgICBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGNhcF9ub2RlLAorCQkJCQkgICAgICBsaXN0KS0+ZGF0YSwKKwkJCQkgICBDQVBfTk9ERV9TSVpFKSkgeworCQkJCXRhcmdldF9pbnQgPSAodW5zaWduZWQgaW50KQorCQkJCSAgICBzaW1wbGVfc3RydG9sKHRhcmdldF91c2VyLCBOVUxMLCAwKTsKKwkJCQlzb3VyY2VfaW50ID0gKHVuc2lnbmVkIGludCkKKwkJCQkgICAgc2ltcGxlX3N0cnRvbChzb3VyY2VfdXNlciwgTlVMTCwgMCk7CisJCQkJZmxhZyA9IDE7CisKKwkJCQkvKgorCQkJCSAqIENoZWNrIHdoZXRoZXIgdGhlIHByb2Nlc3Mgd3JpdGluZyB0byBjYXB1c2UKKwkJCQkgKiBpcyBhY3R1YWxseSBvd25lZCBieSB0aGUgc291cmNlIG93bmVyCisJCQkJICovCisJCQkJaWYgKHNvdXJjZV9pbnQgIT0gY3VycmVudF91aWQoKSkgeworCQkJCQlwcmludGsoS0VSTl9BTEVSVAorCQkJCQkgICAgICAgIlByb2Nlc3MgaXMgbm90IG93bmVkIGJ5IHRoZSBzb3VyY2UgdXNlciBvZiB0aGUgY2FwYWJpbGl0eS5cbiIpOworCQkJCQlyZXR2YWwgPSAtRUZBVUxUOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJLyoKKwkJCQkgKiBXaGF0IGFsbCBpZCdzIG5lZWQgdG8gYmUgY2hhbmdlZCBoZXJlPyB1aWQsCisJCQkJICogZXVpZCwgZnNpZCwgc2F2ZWRpZHMgPz8gIEN1cnJlbnRseSBJIGFtCisJCQkJICogY2hhbmdpbmcgdGhlIGVmZmVjdGl2ZSB1c2VyIGlkIHNpbmNlIG1vc3Qgb2YKKwkJCQkgKiB0aGUgYXV0aG9yaXNhdGlvbiBkZWNpc2lvbnMgYXJlIGJhc2VkIG9uIGl0CisJCQkJICovCisJCQkJbmV3ID0gcHJlcGFyZV9jcmVkcygpOworCQkJCWlmICghbmV3KSB7CisJCQkJCXJldHZhbCA9IC1FTk9NRU07CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCQluZXctPnVpZCA9ICh1aWRfdCkgdGFyZ2V0X2ludDsKKwkJCQluZXctPmV1aWQgPSAodWlkX3QpIHRhcmdldF9pbnQ7CisJCQkJcmV0dmFsID0gY29tbWl0X2NyZWRzKG5ldyk7CisJCQkJaWYgKHJldHZhbCkKKwkJCQkJZ290byBvdXQ7CisKKwkJCQkvKgorCQkJCSAqIFJlbW92ZSB0aGUgY2FwYWJpbGl0eSBmcm9tIHRoZSBsaXN0IGFuZAorCQkJCSAqIGJyZWFrCisJCQkJICovCisJCQkJdG1wID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBjYXBfbm9kZSwgbGlzdCk7CisJCQkJbGlzdF9kZWwocG9zKTsKKwkJCQlrZnJlZSh0bXApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICgwID09IGZsYWcpIHsKKwkJCS8qCisJCQkgKiBUaGUgY2FwYWJpbGl0eSBpcyBub3QgcHJlc2VudCBpbiB0aGUgbGlzdCBvZiB0aGUKKwkJCSAqIGhhc2hlcyBzdG9yZWQsIGhlbmNlIHJldHVybiBmYWlsdXJlCisJCQkgKi8KKwkJCXByaW50ayhLRVJOX0FMRVJUCisJCQkgICAgICAgIkludmFsaWQgY2FwYWJpbGl5IHdyaXR0ZW4gdG8gL2Rldi9jYXB1c2UgXG4iKTsKKwkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwkqZl9wb3MgKz0gY291bnQ7CisJcmV0dmFsID0gY291bnQ7CisJLyogdXBkYXRlIHRoZSBzaXplICovCisJaWYgKGRldi0+c2l6ZSA8ICpmX3BvcykKKwkJZGV2LT5zaXplID0gKmZfcG9zOworCitvdXQ6CisJdXAoJmRldi0+c2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYXBfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkud3JpdGUgPSBjYXBfd3JpdGUsCisJLm9wZW4gPSBjYXBfb3BlbiwKKwkucmVsZWFzZSA9IGNhcF9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgY2FwX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJaW50IGk7CisJZGV2X3QgZGV2bm8gPSBNS0RFVihjYXBfbWFqb3IsIGNhcF9taW5vcik7CisJaWYgKGNhcF9kZXZpY2VzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjYXBfbnJfZGV2czsgaSsrKSB7CisJCQljYXBfdHJpbShjYXBfZGV2aWNlcyArIGkpOworCQkJY2Rldl9kZWwoJmNhcF9kZXZpY2VzW2ldLmNkZXYpOworCQl9CisJCWtmcmVlKGNhcF9kZXZpY2VzKTsKKwl9CisJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldm5vLCBjYXBfbnJfZGV2cyk7CisKK30KKworc3RhdGljIHZvaWQgY2FwX3NldHVwX2NkZXYoc3RydWN0IGNhcF9kZXYgKmRldiwgaW50IGluZGV4KQoreworCWludCBlcnIsIGRldm5vID0gTUtERVYoY2FwX21ham9yLCBjYXBfbWlub3IgKyBpbmRleCk7CisJY2Rldl9pbml0KCZkZXYtPmNkZXYsICZjYXBfZm9wcyk7CisJZGV2LT5jZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisJZGV2LT5jZGV2Lm9wcyA9ICZjYXBfZm9wczsKKwllcnIgPSBjZGV2X2FkZCgmZGV2LT5jZGV2LCBkZXZubywgMSk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJFcnJvciAlZCBhZGRpbmcgY2FwJWQiLCBlcnIsIGluZGV4KTsKK30KKworc3RhdGljIGludCBjYXBfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmVzdWx0LCBpOworCWRldl90IGRldiA9IDA7CisKKwlpZiAoY2FwX21ham9yKSB7CisJCWRldiA9IE1LREVWKGNhcF9tYWpvciwgY2FwX21pbm9yKTsKKwkJcmVzdWx0ID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkZXYsIGNhcF9ucl9kZXZzLCAiY2FwIik7CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmZGV2LCBjYXBfbWlub3IsIGNhcF9ucl9kZXZzLAorCQkJCQkgICAgICJjYXAiKTsKKwkJY2FwX21ham9yID0gTUFKT1IoZGV2KTsKKwl9CisKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjYXA6IGNhbid0IGdldCBtYWpvciAlZFxuIiwKKwkJICAgICAgIGNhcF9tYWpvcik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJY2FwX2RldmljZXMgPSBremFsbG9jKGNhcF9ucl9kZXZzICogc2l6ZW9mKHN0cnVjdCBjYXBfZGV2KSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghY2FwX2RldmljZXMpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIEluaXRpYWxpemUgZWFjaCBkZXZpY2UuICovCisJZm9yIChpID0gMDsgaSA8IGNhcF9ucl9kZXZzOyBpKyspIHsKKwkJY2FwX2RldmljZXNbaV0ubm9kZV9zaXplID0gY2FwX25vZGVfc2l6ZTsKKwkJaW5pdF9NVVRFWCgmY2FwX2RldmljZXNbaV0uc2VtKTsKKwkJY2FwX3NldHVwX2NkZXYoJmNhcF9kZXZpY2VzW2ldLCBpKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwljYXBfY2xlYW51cF9tb2R1bGUoKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCittb2R1bGVfaW5pdChjYXBfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoY2FwX2NsZWFudXBfbW9kdWxlKTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9LY29uZmlnCmluZGV4IGM0YjMwZjIuLjNhYmU3YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9LY29uZmlnCkBAIC0xMTAsNyArMTEwLDcgQEAKIAktLS1oZWxwLS0tCiAJICBNb3N0IExDRHMgdXNlIGEgc3RhbmRhcmQgY29udHJvbGxlciB3aGljaCBzdXBwb3J0cyBoYXJkd2FyZSBsaW5lcyBvZiA0MAogCSAgY2hhcmFjdGVycywgYWx0aG91Z2ggc29tZXRpbWVzIG9ubHkgMTYsIDIwIG9yIDI0IG9mIHRoZW0gYXJlIHJlYWxseSB3aXJlZAotCSAgdG8gdGhlIHRlcm1pbmFsLiBUaGlzIHJlc3VsdHMgaW4gc29tZSBub24tdmlzaWJsZSBidXQgYWRyZXNzYWJsZSBjaGFyYWN0ZXJzLAorCSAgdG8gdGhlIHRlcm1pbmFsLiBUaGlzIHJlc3VsdHMgaW4gc29tZSBub24tdmlzaWJsZSBidXQgYWRkcmVzc2FibGUgY2hhcmFjdGVycywKIAkgIGFuZCBpcyB0aGUgY2FzZSBmb3IgbW9zdCBwYXJhbGxlbCBMQ0RzLiBPdGhlciBMQ0RzLCBhbmQgc29tZSBzZXJpYWwgb25lcywKIAkgIGhvd2V2ZXIsIHVzZSB0aGUgc2FtZSBsaW5lIHdpZHRoIGludGVybmFsbHkgYXMgd2hhdCBpcyB2aXNpYmxlLiBUaGUgS1MwMDc0CiAJICBmb3IgZXhhbXBsZSwgdXNlcyAxNiBjaGFyYWN0ZXJzIHBlciBsaW5lIGZvciAxNiB2aXNpYmxlIGNoYXJhY3RlcnMgcGVyIGxpbmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjNjVkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vS2NvbmZpZwpAQCAtMCwwICsxLDUgQEAKK2NvbmZpZyBJREVfUEhJU09OCisJdHJpc3RhdGUgIlBDSUUgQVRBIFBTNTAwMCBJREUgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBBVEEgJiYgQVRBX1NGRgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlciBmb3IgUFM1MDAwIElERSBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjQyYTIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfSURFX1BISVNPTikJKz0gcGhpc29uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vcGhpc29uLmMgYi9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL3BoaXNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MGViY2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL3BoaXNvbi5jCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2CQlSZWQgSGF0IDxldmFuX2tvQHBoaXNvbi5jb20+CisgKgorICogIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICoKKyAqICBbTW9kaWZ5IEhpc3RvcnldCisgKiAgICMwMDAxLCBFdmFuLCAyMDA4LjEwLjIyLCBWMC4wMCwgTmV3IHJlbGVhc2UuCisgKiAgICMwMDAyLCBFdmFuLCAyMDA4LjExLjAxLCBWMC45MCwgVGVzdCBXb3JrIEluIFVidW50dSBMaW51eCA4LjA0LgorICogICAjMDAwMywgRXZhbiwgMjAwOC4wMS4wOCwgVjAuOTEsIENoYW5nZSBOYW1lICJQQ0lFLVNTRCIgdG8gIkUtQk9YIi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9hdGEuaD4KKworI2RlZmluZSBQSElTT05fREVCVUcKKworI2RlZmluZSBEUlZfTkFNRQkJInBoaXNvbl9lLWJveCIJLyogIzAwMDMgKi8KKyNkZWZpbmUgRFJWX1ZFUlNJT04gCQkiMC45MSIJCS8qICMwMDAzICovCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QSElTT04JMHgxOTg3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFM1MDAwCTB4NTAwMAorCitzdGF0aWMgaW50IHBoaXNvbl9wcmVfcmVzZXQoc3RydWN0IGF0YV9saW5rICpsaW5rLCB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQoreworCWludCByZXQ7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGxpbmstPmFwOworCisJYXAtPmNibCA9IEFUQV9DQkxfTk9ORTsKKwlyZXQgPSBhdGFfc3RkX3ByZXJlc2V0KGxpbmssIGRlYWRsaW5lKTsKKwlkZXZfZGJnKGFwLT5kZXYsICJwaGlzb25fcHJlX3Jlc2V0KCksIHJldCA9ICV4XG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBoaXNvbl9zaHQgPSB7CisJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCit9OworCitzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgcGhpc29uX29wcyA9IHsKKwkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkucHJlcmVzZXQJCT0gcGhpc29uX3ByZV9yZXNldCwKK307CisKK3N0YXRpYyBpbnQgcGhpc29uX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0geworCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfTk9fQVRBUEksCisKKwkJLnBpb19tYXNrCT0gMHgxZiwKKwkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwKKworCQkucG9ydF9vcHMJPSAmcGhpc29uX29wcywKKwl9OworCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKKworCXJldCA9IGF0YV9wY2lfc2ZmX2luaXRfb25lKHBkZXYsIHBwaSwgJnBoaXNvbl9zaHQsIE5VTEwpOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAicGhpc29uX2luaXRfb25lKCksIHJldCA9ICV4XG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBoaXNvbl9wY2lfdGJsW10gPSB7CisJeyBQQ0lfVkVORE9SX0lEX1BISVNPTiwgUENJX0RFVklDRV9JRF9QUzUwMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCisJICBQQ0lfQ0xBU1NfU1RPUkFHRV9JREUgPDwgOCwgMHhmZmZmMDAsIDAgfSwKKwl7IDAsIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBoaXNvbl9wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBoaXNvbl9wY2lfZHJpdmVyID0geworCS5uYW1lCQk9IERSVl9OQU1FLAorCS5pZF90YWJsZQk9IHBoaXNvbl9wY2lfdGJsLAorCS5wcm9iZQkJPSBwaGlzb25faW5pdF9vbmUsCisJLnJlbW92ZQkJPSBhdGFfcGNpX3JlbW92ZV9vbmUsCisjaWZkZWYgQ09ORklHX1BNCS8qIGhhdmVuJ3QgdGVzdGVkIGl0LiAqLworCS5zdXNwZW5kCT0gYXRhX3BjaV9kZXZpY2Vfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGF0YV9wY2lfZGV2aWNlX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBwaGlzb25faWRlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGhpc29uX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBwaGlzb25faWRlX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnBoaXNvbl9wY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocGhpc29uX2lkZV9pbml0KTsKK21vZHVsZV9leGl0KHBoaXNvbl9pZGVfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkV2YW4gS28iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUENJRSBkcml2ZXIgbW9kdWxlIGZvciBQSElTT04gUFM1MDAwIEUtQk9YIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MTU4YjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvS2NvbmZpZwpAQCAtMCwwICsxLDI4IEBACitjb25maWcgUE9ITUVMRlMKKwl0cmlzdGF0ZSAiUE9ITUVMRlMgZmlsZXN5c3RlbSBzdXBwb3J0IgorCWRlcGVuZHMgb24gTkVUCisJc2VsZWN0IENPTk5FQ1RPUgorCXNlbGVjdCBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorCXNlbGVjdCBDUllQVE9fSE1BQworCWhlbHAKKwkgIFBPSE1FTEZTIHN0YW5kcyBmb3IgUGFyYWxsZWwgT3B0aW1pemVkIEhvc3QgTWVzc2FnZSBFeGNoYW5nZSBMYXllcmVkCisJICBGaWxlIFN5c3RlbS4gIFRoaXMgaXMgYSBuZXR3b3JrIGZpbGVzeXN0ZW0gd2hpY2ggc3VwcG9ydHMgY29oZXJlbnQKKwkgIGNhY2hpbmcgb2YgZGF0YSBhbmQgbWV0YWRhdGEgb24gY2xpZW50cy4KKworY29uZmlnIFBPSE1FTEZTX0RFQlVHCisJYm9vbCAiUE9ITUVMRlMgZGVidWdnaW5nIgorCWRlcGVuZHMgb24gUE9ITUVMRlMKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUdXJucyBvbiBleGNlc3NpdmUgUE9ITUVMRlMgZGVidWdnaW5nIGZhY2lsaXRpZXMuCisJICBZb3UgdXN1YWxseSBkbyBub3Qgd2FudCB0byBzbG93IHRoaW5ncyBkb3duIG5vdGljZWFibHkgYW5kIGdldCByZWFsbHkKKwkgIGxvdHMgb2Yga2VybmVsIG1lc3NhZ2VzIGluIHN5c2xvZy4KKworY29uZmlnIFBPSE1FTEZTX0NSWVBUTworCWJvb2wgIlBPSE1FTEZTIGNyeXB0byBzdXBwb3J0IgorCWRlcGVuZHMgb24gUE9ITUVMRlMKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgdG8gZW5jcnlwdCBhbmQvb3IgcHJvdGVjdCB3aXRoIHN0cm9uZworCSAgY3J5cHRvZ3JhcGhpYyBoYXNoIGFsbCBkYXRhZmxvdyBiZXR3ZWVuIHNlcnZlciBhbmQgY2xpZW50cy4KKwkgIEVhY2ggY29uZmlnIGdyb3VwIGNhbiBoYXZlIGl0cyBvd24ga2V5cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTY1NjFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorb2JqLSQoQ09ORklHX1BPSE1FTEZTKQkrPSBwb2htZWxmcy5vCisKK3BvaG1lbGZzLXkgOj0gaW5vZGUubyBjb25maWcubyBkaXIubyBuZXQubyBwYXRoX2VudHJ5Lm8gdHJhbnMubyBjcnlwdG8ubyBsb2NrLm8gbWNhY2hlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9jb25maWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTY3ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2NvbmZpZy5jCkBAIC0wLDAgKzEsNDc4IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDx6YnJAaW9yZW1hcC5uZXQ+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKworI2luY2x1ZGUgIm5ldGZzLmgiCisKKy8qCisgKiBHbG9iYWwgY29uZmlndXJhdGlvbiBsaXN0LgorICogRWFjaCBjbGllbnQgY2FuIGJlIGFza2VkIHRvIGdldCBvbmUgb2YgdGhlbS4KKyAqCisgKiBBbGxvd3MgdG8gcHJvdmlkZSByZW1vdGUgc2VydmVyIGFkZHJlc3MgKGlwdjQvdjYvd2hhdGV2ZXIpLCBwb3J0CisgKiBhbmQgc28gb24gdmlhIGtlcm5lbCBjb25uZWN0b3IuCisgKi8KKworc3RhdGljIHN0cnVjdCBjYl9pZCBwb2htZWxmc19jbl9pZCA9IHsuaWR4ID0gUE9ITUVMRlNfQ05fSURYLCAudmFsID0gUE9ITUVMRlNfQ05fVkFMfTsKK3N0YXRpYyBMSVNUX0hFQUQocG9obWVsZnNfY29uZmlnX2xpc3QpOworc3RhdGljIERFRklORV9NVVRFWChwb2htZWxmc19jb25maWdfbG9jayk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvaG1lbGZzX2NvbmZpZ19lcWwoc3RydWN0IHBvaG1lbGZzX2N0bCAqc2MsIHN0cnVjdCBwb2htZWxmc19jdGwgKmN0bCkKK3sKKwlpZiAoc2MtPmlkeCA9PSBjdGwtPmlkeCAmJiBzYy0+dHlwZSA9PSBjdGwtPnR5cGUgJiYKKwkJCXNjLT5wcm90byA9PSBjdGwtPnByb3RvICYmCisJCQlzYy0+YWRkcmxlbiA9PSBjdGwtPmFkZHJsZW4gJiYKKwkJCSFtZW1jbXAoJnNjLT5hZGRyLCAmY3RsLT5hZGRyLCBjdGwtPmFkZHJsZW4pKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqcG9obWVsZnNfZmluZF9jb25maWdfZ3JvdXAodW5zaWduZWQgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpnLCAqZ3JvdXAgPSBOVUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShnLCAmcG9obWVsZnNfY29uZmlnX2xpc3QsIGdyb3VwX2VudHJ5KSB7CisJCWlmIChnLT5pZHggPT0gaWR4KSB7CisJCQlncm91cCA9IGc7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBncm91cDsKK30KKworc3RhdGljIHN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKnBvaG1lbGZzX2ZpbmRfY3JlYXRlX2NvbmZpZ19ncm91cCh1bnNpZ25lZCBpbnQgaWR4KQoreworCXN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKmc7CisKKwlnID0gcG9obWVsZnNfZmluZF9jb25maWdfZ3JvdXAoaWR4KTsKKwlpZiAoZykKKwkJcmV0dXJuIGc7CisKKwlnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCksIEdGUF9LRVJORUwpOworCWlmICghZykKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmZy0+Y29uZmlnX2xpc3QpOworCWctPmlkeCA9IGlkeDsKKwlnLT5udW1fZW50cnkgPSAwOworCisJbGlzdF9hZGRfdGFpbCgmZy0+Z3JvdXBfZW50cnksICZwb2htZWxmc19jb25maWdfbGlzdCk7CisKKwlyZXR1cm4gZzsKK30KKworaW50IHBvaG1lbGZzX2NvcHlfY29uZmlnKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKmc7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYywgKmRzdDsKKwlpbnQgZXJyID0gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKworCWcgPSBwb2htZWxmc19maW5kX2NvbmZpZ19ncm91cChwc2ItPmlkeCk7CisJaWYgKCFnKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwkvKgorCSAqIFJ1biBvdmVyIGFsbCBlbnRyaWVzIGluIGdpdmVuIGNvbmZpZyBncm91cCBhbmQgdHJ5IHRvIGNyYXRlIGFuZAorCSAqIGluaXRpYWxpemUgdGhvc2UsIHdoaWNoIGRvIG5vdCBleGlzdCBpbiBzdXBlcmJsb2NrIGxpc3QuCisJICogU2tpcCBhbGwgZXhpc3RpbmcgZW50cmllcy4KKwkgKi8KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmctPmNvbmZpZ19saXN0LCBjb25maWdfZW50cnkpIHsKKwkJZXJyID0gMDsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkc3QsICZwc2ItPnN0YXRlX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQkJaWYgKHBvaG1lbGZzX2NvbmZpZ19lcWwoJmRzdC0+c3RhdGUuY3RsLCAmYy0+c3RhdGUuY3RsKSkgeworCQkJCWVyciA9IC1FRVhJU1Q7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoZXJyKQorCQkJY29udGludWU7CisKKwkJZHN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2NvbmZpZyksIEdGUF9LRVJORUwpOworCQlpZiAoIWRzdCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKKwkJbWVtY3B5KCZkc3QtPnN0YXRlLmN0bCwgJmMtPnN0YXRlLmN0bCwgc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19jdGwpKTsKKworCQlsaXN0X2FkZF90YWlsKCZkc3QtPmNvbmZpZ19lbnRyeSwgJnBzYi0+c3RhdGVfbGlzdCk7CisKKwkJZXJyID0gcG9obWVsZnNfc3RhdGVfaW5pdF9vbmUocHNiLCBkc3QpOworCQlpZiAoZXJyKSB7CisJCQlsaXN0X2RlbCgmZHN0LT5jb25maWdfZW50cnkpOworCQkJa2ZyZWUoZHN0KTsKKwkJfQorCisJCWVyciA9IDA7CisJfQorCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCisJcmV0dXJuIGVycjsKK30KKworaW50IHBvaG1lbGZzX2NvcHlfY3J5cHRvKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKmc7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwltdXRleF9sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisJZyA9IHBvaG1lbGZzX2ZpbmRfY29uZmlnX2dyb3VwKHBzYi0+aWR4KTsKKwlpZiAoIWcpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJaWYgKGctPmhhc2hfc3RyaW5nKSB7CisJCWVyciA9IC1FTk9NRU07CisJCXBzYi0+aGFzaF9zdHJpbmcgPSBrc3RyZHVwKGctPmhhc2hfc3RyaW5nLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwc2ItPmhhc2hfc3RyaW5nKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJCXBzYi0+aGFzaF9zdHJsZW4gPSBnLT5oYXNoX3N0cmxlbjsKKwl9CisKKwlpZiAoZy0+Y2lwaGVyX3N0cmluZykgeworCQlwc2ItPmNpcGhlcl9zdHJpbmcgPSBrc3RyZHVwKGctPmNpcGhlcl9zdHJpbmcsIEdGUF9LRVJORUwpOworCQlpZiAoIXBzYi0+Y2lwaGVyX3N0cmluZykKKwkJCWdvdG8gZXJyX291dF9mcmVlX2hhc2hfc3RyaW5nOworCQlwc2ItPmNpcGhlcl9zdHJsZW4gPSBnLT5jaXBoZXJfc3RybGVuOworCX0KKworCWlmIChnLT5oYXNoX2tleXNpemUpIHsKKwkJcHNiLT5oYXNoX2tleSA9IGttYWxsb2MoZy0+aGFzaF9rZXlzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwc2ItPmhhc2hfa2V5KQorCQkJZ290byBlcnJfb3V0X2ZyZWVfY2lwaGVyX3N0cmluZzsKKwkJbWVtY3B5KHBzYi0+aGFzaF9rZXksIGctPmhhc2hfa2V5LCBnLT5oYXNoX2tleXNpemUpOworCQlwc2ItPmhhc2hfa2V5c2l6ZSA9IGctPmhhc2hfa2V5c2l6ZTsKKwl9CisKKwlpZiAoZy0+Y2lwaGVyX2tleXNpemUpIHsKKwkJcHNiLT5jaXBoZXJfa2V5ID0ga21hbGxvYyhnLT5jaXBoZXJfa2V5c2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHNiLT5jaXBoZXJfa2V5KQorCQkJZ290byBlcnJfb3V0X2ZyZWVfaGFzaDsKKwkJbWVtY3B5KHBzYi0+Y2lwaGVyX2tleSwgZy0+Y2lwaGVyX2tleSwgZy0+Y2lwaGVyX2tleXNpemUpOworCQlwc2ItPmNpcGhlcl9rZXlzaXplID0gZy0+Y2lwaGVyX2tleXNpemU7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9mcmVlX2hhc2g6CisJa2ZyZWUocHNiLT5oYXNoX2tleSk7CitlcnJfb3V0X2ZyZWVfY2lwaGVyX3N0cmluZzoKKwlrZnJlZShwc2ItPmNpcGhlcl9zdHJpbmcpOworZXJyX291dF9mcmVlX2hhc2hfc3RyaW5nOgorCWtmcmVlKHBzYi0+aGFzaF9zdHJpbmcpOworZXJyX291dF9leGl0OgorCW11dGV4X3VubG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfc2VuZF9yZXBseShpbnQgZXJyLCBpbnQgbXNnX251bSwgaW50IGFjdGlvbiwgc3RydWN0IGNuX21zZyAqbXNnLCBzdHJ1Y3QgcG9obWVsZnNfY3RsICpjdGwpCit7CisJc3RydWN0IHBvaG1lbGZzX2NuX2FjayAqYWNrOworCisJYWNrID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2NuX2FjayksIEdGUF9LRVJORUwpOworCWlmICghYWNrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChhY2ssIDAsIHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfY25fYWNrKSk7CisJbWVtY3B5KCZhY2stPm1zZywgbXNnLCBzaXplb2Yoc3RydWN0IGNuX21zZykpOworCisJaWYgKGFjdGlvbiA9PSBQT0hNRUxGU19DVExJTkZPX0FDSykKKwkJbWVtY3B5KCZhY2stPmN0bCwgY3RsLCBzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2N0bCkpOworCisJYWNrLT5tc2cubGVuID0gc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19jbl9hY2spIC0gc2l6ZW9mKHN0cnVjdCBjbl9tc2cpOworCWFjay0+bXNnLmFjayA9IG1zZy0+YWNrICsgMTsKKwlhY2stPmVycm9yID0gZXJyOworCWFjay0+bXNnX251bSA9IG1zZ19udW07CisKKwljbl9uZXRsaW5rX3NlbmQoJmFjay0+bXNnLCAwLCBHRlBfS0VSTkVMKTsKKwlrZnJlZShhY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NuX2Rpc3Aoc3RydWN0IGNuX21zZyAqbXNnKQoreworCXN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKmc7CisJc3RydWN0IHBvaG1lbGZzX2N0bCAqY3RsID0gKHN0cnVjdCBwb2htZWxmc19jdGwgKiltc2ctPmRhdGE7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYywgKnRtcDsKKwlpbnQgZXJyID0gMCwgaSA9IDE7CisKKwlpZiAobXNnLT5sZW4gIT0gc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19jdGwpKQorCQlyZXR1cm4gLUVCQURNU0c7CisKKwltdXRleF9sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisKKwlnID0gcG9obWVsZnNfZmluZF9jb25maWdfZ3JvdXAoY3RsLT5pZHgpOworCWlmICghZykgeworCQlwb2htZWxmc19zZW5kX3JlcGx5KGVyciwgMCwgUE9ITUVMRlNfTk9JTkZPX0FDSywgbXNnLCBOVUxMKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjLCB0bXAsICZnLT5jb25maWdfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCXN0cnVjdCBwb2htZWxmc19jdGwgKnNjID0gJmMtPnN0YXRlLmN0bDsKKwkJaWYgKHBvaG1lbGZzX3NlbmRfcmVwbHkoZXJyLCBnLT5udW1fZW50cnkgLSBpLCBQT0hNRUxGU19DVExJTkZPX0FDSywgbXNnLCBzYykpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwkJaSArPSAxOworCX0KKworb3V0X3VubG9jazoKKyAgICAgICAgbXV0ZXhfdW5sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisgICAgICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY25fY3RsKHN0cnVjdCBjbl9tc2cgKm1zZywgaW50IGFjdGlvbikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpnOworCXN0cnVjdCBwb2htZWxmc19jdGwgKmN0bCA9IChzdHJ1Y3QgcG9obWVsZnNfY3RsICopbXNnLT5kYXRhOworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKmMsICp0bXA7CisJaW50IGVyciA9IDA7CisKKwlpZiAobXNnLT5sZW4gIT0gc2l6ZW9mKHN0cnVjdCBwb2htZWxmc19jdGwpKQorCQlyZXR1cm4gLUVCQURNU0c7CisKKwltdXRleF9sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisKKwlnID0gcG9obWVsZnNfZmluZF9jcmVhdGVfY29uZmlnX2dyb3VwKGN0bC0+aWR4KTsKKwlpZiAoIWcpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjLCB0bXAsICZnLT5jb25maWdfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCXN0cnVjdCBwb2htZWxmc19jdGwgKnNjID0gJmMtPnN0YXRlLmN0bDsKKworCQlpZiAocG9obWVsZnNfY29uZmlnX2VxbChzYywgY3RsKSkgeworCQkJaWYgKGFjdGlvbiA9PSBQT0hNRUxGU19GTEFHU19BREQpIHsKKwkJCQllcnIgPSAtRUVYSVNUOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0gZWxzZSBpZiAoYWN0aW9uID09IFBPSE1FTEZTX0ZMQUdTX0RFTCkgeworCQkJCWxpc3RfZGVsKCZjLT5jb25maWdfZW50cnkpOworCQkJCWctPm51bV9lbnRyeS0tOworCQkJCWtmcmVlKGMpOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0gZWxzZSB7CisJCQkJZXJyID0gLUVFWElTVDsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisJCX0KKwl9CisJaWYgKGFjdGlvbiA9PSBQT0hNRUxGU19GTEFHU19ERUwpIHsKKwkJZXJyID0gLUVCQURNU0c7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwljID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2NvbmZpZyksIEdGUF9LRVJORUwpOworCWlmICghYykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCW1lbWNweSgmYy0+c3RhdGUuY3RsLCBjdGwsIHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfY3RsKSk7CisJZy0+bnVtX2VudHJ5Kys7CisJbGlzdF9hZGRfdGFpbCgmYy0+Y29uZmlnX2VudHJ5LCAmZy0+Y29uZmlnX2xpc3QpOworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCWlmIChwb2htZWxmc19zZW5kX3JlcGx5KGVyciwgMCwgUE9ITUVMRlNfTk9JTkZPX0FDSywgbXNnLCBOVUxMKSkKKwkJZXJyID0gLUVOT01FTTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRvX2hhc2hfaW5pdChzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwICpnLCBzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvICpjKQoreworCWNoYXIgKmFsZ28gPSAoY2hhciAqKWMtPmRhdGE7CisJdTggKmtleSA9ICh1OCAqKShhbGdvICsgYy0+c3RybGVuKTsKKworCWlmIChnLT5oYXNoX3N0cmluZykKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlnLT5oYXNoX3N0cmluZyA9IGtzdHJkdXAoYWxnbywgR0ZQX0tFUk5FTCk7CisJaWYgKCFnLT5oYXNoX3N0cmluZykKKwkJcmV0dXJuIC1FTk9NRU07CisJZy0+aGFzaF9zdHJsZW4gPSBjLT5zdHJsZW47CisJZy0+aGFzaF9rZXlzaXplID0gYy0+a2V5c2l6ZTsKKworCWctPmhhc2hfa2V5ID0ga21hbGxvYyhjLT5rZXlzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWctPmhhc2hfa2V5KSB7CisJCWtmcmVlKGctPmhhc2hfc3RyaW5nKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5KGctPmhhc2hfa2V5LCBrZXksIGMtPmtleXNpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRvX2NpcGhlcl9pbml0KHN0cnVjdCBwb2htZWxmc19jb25maWdfZ3JvdXAgKmcsIHN0cnVjdCBwb2htZWxmc19jcnlwdG8gKmMpCit7CisJY2hhciAqYWxnbyA9IChjaGFyICopYy0+ZGF0YTsKKwl1OCAqa2V5ID0gKHU4ICopKGFsZ28gKyBjLT5zdHJsZW4pOworCisJaWYgKGctPmNpcGhlcl9zdHJpbmcpCisJCXJldHVybiAtRUVYSVNUOworCisJZy0+Y2lwaGVyX3N0cmluZyA9IGtzdHJkdXAoYWxnbywgR0ZQX0tFUk5FTCk7CisJaWYgKCFnLT5jaXBoZXJfc3RyaW5nKQorCQlyZXR1cm4gLUVOT01FTTsKKwlnLT5jaXBoZXJfc3RybGVuID0gYy0+c3RybGVuOworCWctPmNpcGhlcl9rZXlzaXplID0gYy0+a2V5c2l6ZTsKKworCWctPmNpcGhlcl9rZXkgPSBrbWFsbG9jKGMtPmtleXNpemUsIEdGUF9LRVJORUwpOworCWlmICghZy0+Y2lwaGVyX2tleSkgeworCQlrZnJlZShnLT5jaXBoZXJfc3RyaW5nKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5KGctPmNpcGhlcl9rZXksIGtleSwgYy0+a2V5c2l6ZSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHBvaG1lbGZzX2NuX2NyeXB0byhzdHJ1Y3QgY25fbXNnICptc2cpCit7CisJc3RydWN0IHBvaG1lbGZzX2NyeXB0byAqY3J5cHRvID0gKHN0cnVjdCBwb2htZWxmc19jcnlwdG8gKiltc2ctPmRhdGE7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqZzsKKwlpbnQgZXJyID0gMDsKKworCWRwcmludGsoIiVzOiBpZHg6ICV1LCBzdHJsZW46ICV1LCB0eXBlOiAldSwga2V5c2l6ZTogJXUsIGFsZ286ICVzLlxuIiwKKwkJCV9fZnVuY19fLCBjcnlwdG8tPmlkeCwgY3J5cHRvLT5zdHJsZW4sIGNyeXB0by0+dHlwZSwKKwkJCWNyeXB0by0+a2V5c2l6ZSwgKGNoYXIgKiljcnlwdG8tPmRhdGEpOworCisJbXV0ZXhfbG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCWcgPSBwb2htZWxmc19maW5kX2NyZWF0ZV9jb25maWdfZ3JvdXAoY3J5cHRvLT5pZHgpOworCWlmICghZykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJc3dpdGNoIChjcnlwdG8tPnR5cGUpIHsKKwkJY2FzZSBQT0hNRUxGU19DUllQVE9fSEFTSDoKKwkJCWVyciA9IHBvaG1lbGZzX2NyeXB0b19oYXNoX2luaXQoZywgY3J5cHRvKTsKKwkJCWJyZWFrOworCQljYXNlIFBPSE1FTEZTX0NSWVBUT19DSVBIRVI6CisJCQllcnIgPSBwb2htZWxmc19jcnlwdG9fY2lwaGVyX2luaXQoZywgY3J5cHRvKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXJyID0gLUVOT1RTVVBQOworCQkJYnJlYWs7CisJfQorCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworCWlmIChwb2htZWxmc19zZW5kX3JlcGx5KGVyciwgMCwgUE9ITUVMRlNfTk9JTkZPX0FDSywgbXNnLCBOVUxMKSkKKwkJZXJyID0gLUVOT01FTTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX2NuX2NhbGxiYWNrKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNuX21zZyAqbXNnID0gZGF0YTsKKwlpbnQgZXJyOworCisJc3dpdGNoIChtc2ctPmZsYWdzKSB7CisJCWNhc2UgUE9ITUVMRlNfRkxBR1NfQUREOgorCQkJZXJyID0gcG9obWVsZnNfY25fY3RsKG1zZywgUE9ITUVMRlNfRkxBR1NfQUREKTsKKwkJCWJyZWFrOworCQljYXNlIFBPSE1FTEZTX0ZMQUdTX0RFTDoKKwkJCWVyciA9IHBvaG1lbGZzX2NuX2N0bChtc2csIFBPSE1FTEZTX0ZMQUdTX0RFTCk7CisJCQlicmVhazsKKwkJY2FzZSBQT0hNRUxGU19GTEFHU19TSE9XOgorCQkJZXJyID0gcG9obWVsZnNfY25fZGlzcChtc2cpOworCQkJYnJlYWs7CisJCWNhc2UgUE9ITUVMRlNfRkxBR1NfQ1JZUFRPOgorCQkJZXJyID0gcG9obWVsZnNfY25fY3J5cHRvKG1zZyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciA9IC1FTk9TWVM7CisJCQlicmVhazsKKwl9Cit9CisKK2ludCBwb2htZWxmc19jb25maWdfY2hlY2soc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqY29uZmlnLCBpbnQgaWR4KQoreworCXN0cnVjdCBwb2htZWxmc19jdGwgKmN0bCA9ICZjb25maWctPnN0YXRlLmN0bDsKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICp0bXA7CisJaW50IGVyciA9IC1FTk9FTlQ7CisJc3RydWN0IHBvaG1lbGZzX2N0bCAqc2M7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqZzsKKworCW11dGV4X2xvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKworCWcgPSBwb2htZWxmc19maW5kX2NvbmZpZ19ncm91cChjdGwtPmlkeCk7CisJaWYgKGcpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZnLT5jb25maWdfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCQlzYyA9ICZ0bXAtPnN0YXRlLmN0bDsKKworCQkJaWYgKHBvaG1lbGZzX2NvbmZpZ19lcWwoc2MsIGN0bCkpIHsKKwkJCQllcnIgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwb2htZWxmc19jb25maWdfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgX19pbml0IHBvaG1lbGZzX2NvbmZpZ19pbml0KHZvaWQpCit7CisJcmV0dXJuIGNuX2FkZF9jYWxsYmFjaygmcG9obWVsZnNfY25faWQsICJwb2htZWxmcyIsIHBvaG1lbGZzX2NuX2NhbGxiYWNrKTsKK30KKwordm9pZCBwb2htZWxmc19jb25maWdfZXhpdCh2b2lkKQoreworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKmMsICp0bXA7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZ19ncm91cCAqZywgKmd0bXA7CisKKwljbl9kZWxfY2FsbGJhY2soJnBvaG1lbGZzX2NuX2lkKTsKKworCW11dGV4X2xvY2soJnBvaG1lbGZzX2NvbmZpZ19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZywgZ3RtcCwgJnBvaG1lbGZzX2NvbmZpZ19saXN0LCBncm91cF9lbnRyeSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYywgdG1wLCAmZy0+Y29uZmlnX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQkJbGlzdF9kZWwoJmMtPmNvbmZpZ19lbnRyeSk7CisJCQlrZnJlZShjKTsKKwkJfQorCisJCWxpc3RfZGVsKCZnLT5ncm91cF9lbnRyeSk7CisKKwkJaWYgKGctPmhhc2hfc3RyaW5nKQorCQkJa2ZyZWUoZy0+aGFzaF9zdHJpbmcpOworCisJCWlmIChnLT5jaXBoZXJfc3RyaW5nKQorCQkJa2ZyZWUoZy0+Y2lwaGVyX3N0cmluZyk7CisKKwkJa2ZyZWUoZyk7CisJfQorCW11dGV4X3VubG9jaygmcG9obWVsZnNfY29uZmlnX2xvY2spOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2NyeXB0by5jIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2NyeXB0by5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZDc2NWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvY3J5cHRvLmMKQEAgLTAsMCArMSw4ODAgQEAKKy8qCisgKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJuZXRmcy5oIgorCitzdGF0aWMgc3RydWN0IGNyeXB0b19oYXNoICpwb2htZWxmc19pbml0X2hhc2goc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmhhc2g7CisKKwloYXNoID0gY3J5cHRvX2FsbG9jX2hhc2gocHNiLT5oYXNoX3N0cmluZywgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUihoYXNoKSkgeworCQllcnIgPSBQVFJfRVJSKGhhc2gpOworCQlkcHJpbnRrKCIlczogaWR4OiAldTogZmFpbGVkIHRvIGFsbG9jYXRlIGhhc2ggJyVzJywgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIHBzYi0+aWR4LCBwc2ItPmhhc2hfc3RyaW5nLCBlcnIpOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlwc2ItPmNyeXB0b19hdHRhY2hlZF9zaXplID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShoYXNoKTsKKworCWlmICghcHNiLT5oYXNoX2tleXNpemUpCisJCXJldHVybiBoYXNoOworCisJZXJyID0gY3J5cHRvX2hhc2hfc2V0a2V5KGhhc2gsIHBzYi0+aGFzaF9rZXksIHBzYi0+aGFzaF9rZXlzaXplKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoIiVzOiBpZHg6ICV1OiBmYWlsZWQgdG8gc2V0IGtleSBmb3IgaGFzaCAnJXMnLCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgcHNiLT5pZHgsIHBzYi0+aGFzaF9zdHJpbmcsIGVycik7CisJCWdvdG8gZXJyX291dF9mcmVlOworCX0KKworCXJldHVybiBoYXNoOworCitlcnJfb3V0X2ZyZWU6CisJY3J5cHRvX2ZyZWVfaGFzaChoYXNoKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpwb2htZWxmc19pbml0X2NpcGhlcihzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlpbnQgZXJyID0gLUVJTlZBTDsKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmNpcGhlcjsKKworCWlmICghcHNiLT5jaXBoZXJfa2V5c2l6ZSkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwljaXBoZXIgPSBjcnlwdG9fYWxsb2NfYWJsa2NpcGhlcihwc2ItPmNpcGhlcl9zdHJpbmcsIDAsIDApOworCWlmIChJU19FUlIoY2lwaGVyKSkgeworCQllcnIgPSBQVFJfRVJSKGNpcGhlcik7CisJCWRwcmludGsoIiVzOiBpZHg6ICV1OiBmYWlsZWQgdG8gYWxsb2NhdGUgY2lwaGVyICclcycsIGVycjogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBwc2ItPmlkeCwgcHNiLT5jaXBoZXJfc3RyaW5nLCBlcnIpOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwljcnlwdG9fYWJsa2NpcGhlcl9jbGVhcl9mbGFncyhjaXBoZXIsIH4wKTsKKworCWVyciA9IGNyeXB0b19hYmxrY2lwaGVyX3NldGtleShjaXBoZXIsIHBzYi0+Y2lwaGVyX2tleSwgcHNiLT5jaXBoZXJfa2V5c2l6ZSk7CisJaWYgKGVycikgeworCQlkcHJpbnRrKCIlczogaWR4OiAldTogZmFpbGVkIHRvIHNldCBrZXkgZm9yIGNpcGhlciAnJXMnLCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgcHNiLT5pZHgsIHBzYi0+Y2lwaGVyX3N0cmluZywgZXJyKTsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJfQorCisJcmV0dXJuIGNpcGhlcjsKKworZXJyX291dF9mcmVlOgorCWNyeXB0b19mcmVlX2FibGtjaXBoZXIoY2lwaGVyKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitpbnQgcG9obWVsZnNfY3J5cHRvX2VuZ2luZV9pbml0KHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplLCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlpbnQgZXJyOworCisJZS0+cGFnZV9udW0gPSAwOworCisJZS0+c2l6ZSA9IFBBR0VfU0laRTsKKwllLT5kYXRhID0ga21hbGxvYyhlLT5zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWUtPmRhdGEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJaWYgKHBzYi0+aGFzaF9zdHJpbmcpIHsKKwkJZS0+aGFzaCA9IHBvaG1lbGZzX2luaXRfaGFzaChwc2IpOworCQlpZiAoSVNfRVJSKGUtPmhhc2gpKSB7CisJCQllcnIgPSBQVFJfRVJSKGUtPmhhc2gpOworCQkJZS0+aGFzaCA9IE5VTEw7CisJCQlnb3RvIGVycl9vdXRfZnJlZTsKKwkJfQorCX0KKworCWlmIChwc2ItPmNpcGhlcl9zdHJpbmcpIHsKKwkJZS0+Y2lwaGVyID0gcG9obWVsZnNfaW5pdF9jaXBoZXIocHNiKTsKKwkJaWYgKElTX0VSUihlLT5jaXBoZXIpKSB7CisJCQllcnIgPSBQVFJfRVJSKGUtPmNpcGhlcik7CisJCQllLT5jaXBoZXIgPSBOVUxMOworCQkJZ290byBlcnJfb3V0X2ZyZWVfaGFzaDsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfaGFzaDoKKwljcnlwdG9fZnJlZV9oYXNoKGUtPmhhc2gpOworZXJyX291dF9mcmVlOgorCWtmcmVlKGUtPmRhdGEpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgcG9obWVsZnNfY3J5cHRvX2VuZ2luZV9leGl0KHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplKQoreworCWlmIChlLT5oYXNoKQorCQljcnlwdG9fZnJlZV9oYXNoKGUtPmhhc2gpOworCWlmIChlLT5jaXBoZXIpCisJCWNyeXB0b19mcmVlX2FibGtjaXBoZXIoZS0+Y2lwaGVyKTsKKwlrZnJlZShlLT5kYXRhKTsKK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfY3J5cHRvX2NvbXBsZXRlKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLCBpbnQgZXJyKQoreworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fY29tcGxldGlvbiAqYyA9IHJlcS0+ZGF0YTsKKworCWlmIChlcnIgPT0gLUVJTlBST0dSRVNTKQorCQlyZXR1cm47CisKKwlkcHJpbnRrKCIlczogcmVxOiAlcCwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCByZXEsIGVycik7CisJYy0+ZXJyb3IgPSBlcnI7CisJY29tcGxldGUoJmMtPmNvbXBsZXRlKTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jcnlwdG9fcHJvY2VzcyhzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3NyYywKKwkJdm9pZCAqaXYsIGludCBlbmMsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2NvbXBsZXRpb24gY29tcGxldGU7CisJaW50IGVycjsKKworCWluaXRfY29tcGxldGlvbigmY29tcGxldGUuY29tcGxldGUpOworCWNvbXBsZXRlLmVycm9yID0gLUVJTlBST0dSRVNTOworCisJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF9jYWxsYmFjayhyZXEsIENSWVBUT19URk1fUkVRX01BWV9CQUNLTE9HLAorCQkJCQlwb2htZWxmc19jcnlwdG9fY29tcGxldGUsICZjb21wbGV0ZSk7CisKKwlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0KHJlcSwgc2dfc3JjLCBzZ19kc3QsIHNnX3NyYy0+bGVuZ3RoLCBpdik7CisKKwlpZiAoZW5jKQorCQllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9lbmNyeXB0KHJlcSk7CisJZWxzZQorCQllcnIgPSBjcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0KHJlcSk7CisKKwlzd2l0Y2ggKGVycikgeworCQljYXNlIC1FSU5QUk9HUkVTUzoKKwkJY2FzZSAtRUJVU1k6CisJCQllcnIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmY29tcGxldGUuY29tcGxldGUsCisJCQkJCXRpbWVvdXQpOworCQkJaWYgKCFlcnIpCisJCQkJZXJyID0gLUVUSU1FRE9VVDsKKwkJCWVsc2UKKwkJCQllcnIgPSBjb21wbGV0ZS5lcnJvcjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworaW50IHBvaG1lbGZzX2NyeXB0b19wcm9jZXNzX2lucHV0X2RhdGEoc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUsIHU2NCBjbWRfaXYsCisJCXZvaWQgKmRhdGEsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKworCWlmICghZS0+Y2lwaGVyICYmICFlLT5oYXNoKQorCQlyZXR1cm4gMDsKKworCWRwcmludGsoIiVzOiBlbmc6ICVwLCBpdjogJWxseCwgZGF0YTogJXAsIHBhZ2U6ICVwLyVsdSwgc2l6ZTogJXUuXG4iLAorCQlfX2Z1bmNfXywgZSwgY21kX2l2LCBkYXRhLCBwYWdlLCAocGFnZSk/cGFnZS0+aW5kZXg6MCwgc2l6ZSk7CisKKwlpZiAoZGF0YSkgeworCQlzZ19pbml0X29uZSgmc2csIGRhdGEsIHNpemUpOworCX0gZWxzZSB7CisJCXNnX2luaXRfdGFibGUoJnNnLCAxKTsKKwkJc2dfc2V0X3BhZ2UoJnNnLCBwYWdlLCBzaXplLCAwKTsKKwl9CisKKwlpZiAoZS0+Y2lwaGVyKSB7CisJCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSA9IGUtPmRhdGEgKyBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGUtPmhhc2gpOworCQl1OCBpdlszMl07CisKKwkJbWVtc2V0KGl2LCAwLCBzaXplb2YoaXYpKTsKKwkJbWVtY3B5KGl2LCAmY21kX2l2LCBzaXplb2YoY21kX2l2KSk7CisKKwkJYWJsa2NpcGhlcl9yZXF1ZXN0X3NldF90Zm0ocmVxLCBlLT5jaXBoZXIpOworCisJCWVyciA9IHBvaG1lbGZzX2NyeXB0b19wcm9jZXNzKHJlcSwgJnNnLCAmc2csIGl2LCAwLCBlLT50aW1lb3V0KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWlmIChlLT5oYXNoKSB7CisJCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKKwkJdm9pZCAqZHN0ID0gZS0+ZGF0YSArIGUtPnNpemUvMjsKKworCQlkZXNjLnRmbSA9IGUtPmhhc2g7CisJCWRlc2MuZmxhZ3MgPSAwOworCisJCWVyciA9IGNyeXB0b19oYXNoX2luaXQoJmRlc2MpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJZXJyID0gY3J5cHRvX2hhc2hfdXBkYXRlKCZkZXNjLCAmc2csIHNpemUpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwkJZXJyID0gY3J5cHRvX2hhc2hfZmluYWwoJmRlc2MsIGRzdCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCQllcnIgPSAhIW1lbWNtcChkc3QsIGUtPmRhdGEsIGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCkpOworCisJCWlmIChlcnIpIHsKKyNpZmRlZiBDT05GSUdfUE9ITUVMRlNfREVCVUcKKwkJCXVuc2lnbmVkIGludCBpOworCQkJdW5zaWduZWQgY2hhciAqcmVjdiA9IGUtPmRhdGEsICpjYWxjID0gZHN0OworCisJCQlkcHJpbnRrKCIlczogZW5nOiAlcCwgaGFzaDogJXAsIGNpcGhlcjogJXA6IGl2IDogJWxseCwgaGFzaCBtaXNtYXRjaCAocmVjdi9jYWxjKTogIiwKKwkJCQkJX19mdW5jX18sIGUsIGUtPmhhc2gsIGUtPmNpcGhlciwgY21kX2l2KTsKKwkJCWZvciAoaT0wOyBpPGNyeXB0b19oYXNoX2RpZ2VzdHNpemUoZS0+aGFzaCk7ICsraSkgeworI2lmIDAKKwkJCQlkcHJpbnRrYSgiJTAyeCAiLCByZWN2W2ldKTsKKwkJCQlpZiAocmVjdltpXSAhPSBjYWxjW2ldKSB7CisJCQkJCWRwcmludGthKCJ8IGNhbGMgYnl0ZTogJTAyeC5cbiIsIGNhbGNbaV0pOworCQkJCQlicmVhazsKKwkJCQl9CisjZWxzZQorCQkJCWRwcmludGthKCIlMDJ4LyUwMnggIiwgcmVjdltpXSwgY2FsY1tpXSk7CisjZW5kaWYKKwkJCX0KKwkJCWRwcmludGsoIlxuIik7CisjZW5kaWYKKwkJCWdvdG8gZXJyX291dF9leGl0OworCQl9IGVsc2UgeworCQkJZHByaW50aygiJXM6IGVuZzogJXAsIGhhc2g6ICVwLCBjaXBoZXI6ICVwOiBoYXNoZXMgbWF0Y2hlZC5cbiIsCisJCQkJCV9fZnVuY19fLCBlLCBlLT5oYXNoLCBlLT5jaXBoZXIpOworCQl9CisJfQorCisJZHByaW50aygiJXM6IGVuZzogJXAsIHNpemU6ICV1LCBoYXNoOiAlcCwgY2lwaGVyOiAlcDogY29tcGxldGVkLlxuIiwKKwkJCV9fZnVuY19fLCBlLCBlLT5zaXplLCBlLT5oYXNoLCBlLT5jaXBoZXIpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlkcHJpbnRrKCIlczogZW5nOiAlcCwgaGFzaDogJXAsIGNpcGhlcjogJXA6IGVycjogJWQuXG4iLAorCQkJX19mdW5jX18sIGUsIGUtPmhhc2gsIGUtPmNpcGhlciwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3RyYW5zX2l0ZXIoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSwKKwkJaW50ICgqIGl0ZXJhdG9yKSAoc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUsCisJCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjKSkKK3sKKwl2b2lkICpkYXRhID0gdC0+aW92ZWMuaW92X2Jhc2UgKyBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCkgKyB0LT5wc2ItPmNyeXB0b19hdHRhY2hlZF9zaXplOworCXVuc2lnbmVkIGludCBzaXplID0gdC0+aW92ZWMuaW92X2xlbiAtIHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKSAtIHQtPnBzYi0+Y3J5cHRvX2F0dGFjaGVkX3NpemU7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gZGF0YTsKKwl1bnNpZ25lZCBpbnQgc3osIHBhZ2VzID0gdC0+YXR0YWNoZWRfcGFnZXMsIGksIGNzaXplLCBjbWRfY21kLCBkcGFnZV9pZHg7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnX3NyYywgc2dfZHN0OworCWludCBlcnI7CisKKwl3aGlsZSAoc2l6ZSkgeworCQljbWQgPSBkYXRhOworCQljbWRfY21kID0gX19iZTE2X3RvX2NwdShjbWQtPmNtZCk7CisJCWNzaXplID0gX19iZTMyX3RvX2NwdShjbWQtPnNpemUpOworCQljbWQtPml2ID0gX19jcHVfdG9fYmU2NChlLT5pdik7CisKKwkJaWYgKGNtZF9jbWQgPT0gTkVURlNfUkVBRF9QQUdFUyB8fCBjbWRfY21kID09IE5FVEZTX1JFQURfUEFHRSkKKwkJCWNzaXplID0gX19iZTE2X3RvX2NwdShjbWQtPmV4dCk7CisKKwkJc3ogPSBjc2l6ZSArIF9fYmUxNl90b19jcHUoY21kLT5jcGFkKSArIHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKTsKKworCQlkcHJpbnRrKCIlczogc2l6ZTogJXUsIHN6OiAldSwgY21kX3NpemU6ICV1LCBjbWRfY3BhZDogJXUuXG4iLAorCQkJCV9fZnVuY19fLCBzaXplLCBzeiwgX19iZTMyX3RvX2NwdShjbWQtPnNpemUpLCBfX2JlMTZfdG9fY3B1KGNtZC0+Y3BhZCkpOworCisJCWRhdGEgKz0gc3o7CisJCXNpemUgLT0gc3o7CisKKwkJc2dfaW5pdF9vbmUoJnNnX3NyYywgY21kLT5kYXRhLCBzeiAtIHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKSk7CisJCXNnX2luaXRfb25lKCZzZ19kc3QsIGNtZC0+ZGF0YSwgc3ogLSBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCkpOworCisJCWVyciA9IGl0ZXJhdG9yKGUsICZzZ19kc3QsICZzZ19zcmMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoIXBhZ2VzKQorCQlyZXR1cm4gMDsKKworCWRwYWdlX2lkeCA9IDA7CisJZm9yIChpPTA7IGk8dC0+cGFnZV9udW07ICsraSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHQtPnBhZ2VzW2ldOworCQlzdHJ1Y3QgcGFnZSAqZHBhZ2UgPSBlLT5wYWdlc1tkcGFnZV9pZHhdOworCisJCWlmICghcGFnZSkKKwkJCWNvbnRpbnVlOworCisJCXNnX2luaXRfdGFibGUoJnNnX3NyYywgMSk7CisJCXNnX2luaXRfdGFibGUoJnNnX2RzdCwgMSk7CisJCXNnX3NldF9wYWdlKCZzZ19zcmMsIHBhZ2UsIHBhZ2VfcHJpdmF0ZShwYWdlKSwgMCk7CisJCXNnX3NldF9wYWdlKCZzZ19kc3QsIGRwYWdlLCBwYWdlX3ByaXZhdGUocGFnZSksIDApOworCisJCWVyciA9IGl0ZXJhdG9yKGUsICZzZ19kc3QsICZzZ19zcmMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlwYWdlcy0tOworCQlpZiAoIXBhZ2VzKQorCQkJYnJlYWs7CisJCWRwYWdlX2lkeCsrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2VuY3J5cHRfaXRlcmF0b3Ioc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUsCisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX3NyYykKK3sKKwlzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEgPSBlLT5kYXRhOworCXU4IGl2WzMyXTsKKworCW1lbXNldChpdiwgMCwgc2l6ZW9mKGl2KSk7CisKKwltZW1jcHkoaXYsICZlLT5pdiwgc2l6ZW9mKGUtPml2KSk7CisKKwlyZXR1cm4gcG9obWVsZnNfY3J5cHRvX3Byb2Nlc3MocmVxLCBzZ19kc3QsIHNnX3NyYywgaXYsIDEsIGUtPnRpbWVvdXQpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2VuY3J5cHQoc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnRjKQoreworCXN0cnVjdCBuZXRmc190cmFucyAqdCA9IHRjLT50cmFuczsKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSA9ICZ0Yy0+ZW5nOworCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSA9IGUtPmRhdGE7CisKKwltZW1zZXQocmVxLCAwLCBzaXplb2Yoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCkpOworCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfdGZtKHJlcSwgZS0+Y2lwaGVyKTsKKworCWUtPml2ID0gcG9obWVsZnNfZ2VuX2l2KHQpOworCisJcmV0dXJuIHBvaG1lbGZzX3RyYW5zX2l0ZXIodCwgZSwgcG9obWVsZnNfZW5jcnlwdF9pdGVyYXRvcik7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfaGFzaF9pdGVyYXRvcihzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ19kc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfc3JjKQoreworCXJldHVybiBjcnlwdG9faGFzaF91cGRhdGUoZS0+ZGF0YSwgc2dfc3JjLCBzZ19zcmMtPmxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfaGFzaChzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdGMpCit7CisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUgPSAmdGMtPmVuZzsKKwlzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjID0gZS0+ZGF0YTsKKwl1bnNpZ25lZCBjaGFyICpkc3QgPSB0Yy0+dHJhbnMtPmlvdmVjLmlvdl9iYXNlICsgc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpOworCWludCBlcnI7CisKKwlkZXNjLT50Zm0gPSBlLT5oYXNoOworCWRlc2MtPmZsYWdzID0gMDsKKworCWVyciA9IGNyeXB0b19oYXNoX2luaXQoZGVzYyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHBvaG1lbGZzX3RyYW5zX2l0ZXIodGMtPnRyYW5zLCBlLCBwb2htZWxmc19oYXNoX2l0ZXJhdG9yKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gY3J5cHRvX2hhc2hfZmluYWwoZGVzYywgZHN0KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJeworCQl1bnNpZ25lZCBpbnQgaTsKKwkJZHByaW50aygiJXM6ICIsIF9fZnVuY19fKTsKKwkJZm9yIChpPTA7IGk8dGMtPnBzYi0+Y3J5cHRvX2F0dGFjaGVkX3NpemU7ICsraSkKKwkJCWRwcmludGthKCIlMDJ4ICIsIGRzdFtpXSk7CisJCWRwcmludGthKCJcbiIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19jcnlwdG9fcGFnZXNfZnJlZShzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaT0wOyBpPGUtPnBhZ2VfbnVtOyArK2kpCisJCV9fZnJlZV9wYWdlKGUtPnBhZ2VzW2ldKTsKKwlrZnJlZShlLT5wYWdlcyk7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRvX3BhZ2VzX2FsbG9jKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplLCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWUtPnBhZ2VzID0ga21hbGxvYyhwc2ItPnRyYW5zX21heF9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlLT5wYWdlcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGk9MDsgaTxwc2ItPnRyYW5zX21heF9wYWdlczsgKytpKSB7CisJCWUtPnBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKCFlLT5wYWdlc1tpXSkKKwkJCWJyZWFrOworCX0KKworCWUtPnBhZ2VfbnVtID0gaTsKKwlpZiAoIWUtPnBhZ2VfbnVtKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJa2ZyZWUoZS0+cGFnZXMpOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19zeXNfY3J5cHRvX2V4aXRfb25lKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0KQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gdC0+cHNiOworCisJaWYgKHQtPnRocmVhZCkKKwkJa3RocmVhZF9zdG9wKHQtPnRocmVhZCk7CisKKwltdXRleF9sb2NrKCZwc2ItPmNyeXB0b190aHJlYWRfbG9jayk7CisJbGlzdF9kZWwoJnQtPnRocmVhZF9lbnRyeSk7CisJcHNiLT5jcnlwdG9fdGhyZWFkX251bS0tOworCW11dGV4X3VubG9jaygmcHNiLT5jcnlwdG9fdGhyZWFkX2xvY2spOworCisJcG9obWVsZnNfY3J5cHRvX2VuZ2luZV9leGl0KCZ0LT5lbmcpOworCXBvaG1lbGZzX2NyeXB0b19wYWdlc19mcmVlKCZ0LT5lbmcpOworCWtmcmVlKHQpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0b19maW5pc2goc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgaW50IGVycikKK3sKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSB0LT5pb3ZlYy5pb3ZfYmFzZTsKKwluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCisJaWYgKGxpa2VseSghZXJyKSkKKwkJZXJyID0gbmV0ZnNfdHJhbnNfZmluaXNoX3NlbmQodCwgcHNiKTsKKworCXQtPnJlc3VsdCA9IGVycjsKKwluZXRmc190cmFuc19wdXQodCk7CisKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIHBvaG1lbGZzX2NyeXB0b190aHJlYWRfbWFrZV9yZWFkeShzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdGgpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSB0aC0+cHNiOworCisJdGgtPnBhZ2UgPSBOVUxMOworCXRoLT50cmFucyA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZwc2ItPmNyeXB0b190aHJlYWRfbG9jayk7CisJbGlzdF9tb3ZlX3RhaWwoJnRoLT50aHJlYWRfZW50cnksICZwc2ItPmNyeXB0b19yZWFkeV9saXN0KTsKKwltdXRleF91bmxvY2soJnBzYi0+Y3J5cHRvX3RocmVhZF9sb2NrKTsKKwl3YWtlX3VwKCZwc2ItPndhaXQpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0b190aHJlYWRfdHJhbnMoc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnQpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0cmFuczsKKwlpbnQgZXJyID0gMDsKKworCXRyYW5zID0gdC0+dHJhbnM7CisJdHJhbnMtPmVuZyA9IE5VTEw7CisKKwlpZiAodC0+ZW5nLmhhc2gpIHsKKwkJZXJyID0gcG9obWVsZnNfaGFzaCh0KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X2NvbXBsZXRlOworCX0KKworCWlmICh0LT5lbmcuY2lwaGVyKSB7CisJCWVyciA9IHBvaG1lbGZzX2VuY3J5cHQodCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dF9jb21wbGV0ZTsKKwkJdHJhbnMtPmVuZyA9ICZ0LT5lbmc7CisJfQorCitvdXRfY29tcGxldGU6CisJdC0+cGFnZSA9IE5VTEw7CisJdC0+dHJhbnMgPSBOVUxMOworCisJaWYgKCF0cmFucy0+ZW5nKQorCQlwb2htZWxmc19jcnlwdG9fdGhyZWFkX21ha2VfcmVhZHkodCk7CisKKwlwb2htZWxmc19jcnlwdG9fZmluaXNoKHRyYW5zLCB0LT5wc2IsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jcnlwdG9fdGhyZWFkX3BhZ2Uoc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnQpCit7CisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUgPSAmdC0+ZW5nOworCXN0cnVjdCBwYWdlICpwYWdlID0gdC0+cGFnZTsKKwlpbnQgZXJyOworCisJV0FSTl9PTighUGFnZUNoZWNrZWQocGFnZSkpOworCisJZXJyID0gcG9obWVsZnNfY3J5cHRvX3Byb2Nlc3NfaW5wdXRfZGF0YShlLCBlLT5pdiwgTlVMTCwgcGFnZSwgdC0+c2l6ZSk7CisJaWYgKCFlcnIpCisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwllbHNlCisJCVNldFBhZ2VFcnJvcihwYWdlKTsKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisKKwlwb2htZWxmc19jcnlwdG9fdGhyZWFkX21ha2VfcmVhZHkodCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0b190aHJlYWRfZnVuYyh2b2lkICpkYXRhKQoreworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0ID0gZGF0YTsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh0LT53YWl0LCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwKKwkJCQl0LT50cmFucyB8fCB0LT5wYWdlKTsKKworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJYnJlYWs7CisKKwkJaWYgKCF0LT50cmFucyAmJiAhdC0+cGFnZSkKKwkJCWNvbnRpbnVlOworCisJCWRwcmludGsoIiVzOiB0aHJlYWQ6ICVwLCB0cmFuczogJXAsIHBhZ2U6ICVwLlxuIiwKKwkJCQlfX2Z1bmNfXywgdCwgdC0+dHJhbnMsIHQtPnBhZ2UpOworCisJCWlmICh0LT50cmFucykKKwkJCXBvaG1lbGZzX2NyeXB0b190aHJlYWRfdHJhbnModCk7CisJCWVsc2UgaWYgKHQtPnBhZ2UpCisJCQlwb2htZWxmc19jcnlwdG9fdGhyZWFkX3BhZ2UodCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX2NyeXB0b19mbHVzaChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnQgPSBOVUxMOworCisJCW11dGV4X2xvY2soJnBzYi0+Y3J5cHRvX3RocmVhZF9sb2NrKTsKKwkJaWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisJCQl0ID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCwgdGhyZWFkX2VudHJ5KTsKKwkJCWxpc3RfZGVsX2luaXQoJnQtPnRocmVhZF9lbnRyeSk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwc2ItPmNyeXB0b190aHJlYWRfbG9jayk7CisKKwkJaWYgKHQpCisJCQlwb2htZWxmc19zeXNfY3J5cHRvX2V4aXRfb25lKHQpOworCX0KK30KKworc3RhdGljIHZvaWQgcG9obWVsZnNfc3lzX2NyeXB0b19leGl0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXdoaWxlICghbGlzdF9lbXB0eSgmcHNiLT5jcnlwdG9fYWN0aXZlX2xpc3QpIHx8ICFsaXN0X2VtcHR5KCZwc2ItPmNyeXB0b19yZWFkeV9saXN0KSkgeworCQlkcHJpbnRrKCIlczogY3J5cHRvX3RocmVhZF9udW06ICV1LlxuIiwgX19mdW5jX18sIHBzYi0+Y3J5cHRvX3RocmVhZF9udW0pOworCQlwb2htZWxmc19jcnlwdG9fZmx1c2gocHNiLCAmcHNiLT5jcnlwdG9fYWN0aXZlX2xpc3QpOworCQlwb2htZWxmc19jcnlwdG9fZmx1c2gocHNiLCAmcHNiLT5jcnlwdG9fcmVhZHlfbGlzdCk7CisJfQorfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3N5c19jcnlwdG9faW5pdChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdDsKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjOworCXN0cnVjdCBuZXRmc19zdGF0ZSAqc3Q7CisJaW50IGVycjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJnBzYi0+c3RhdGVfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCXN0ID0gJmMtPnN0YXRlOworCisJCWVyciA9IHBvaG1lbGZzX2NyeXB0b19lbmdpbmVfaW5pdCgmc3QtPmVuZywgcHNiKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9leGl0OworCisJCWRwcmludGsoIiVzOiBzdDogJXAsIGVuZzogJXAsIGhhc2g6ICVwLCBjaXBoZXI6ICVwLlxuIiwKKwkJCQlfX2Z1bmNfXywgc3QsICZzdC0+ZW5nLCAmc3QtPmVuZy5oYXNoLCAmc3QtPmVuZy5jaXBoZXIpOworCX0KKworCWZvciAoaT0wOyBpPHBzYi0+Y3J5cHRvX3RocmVhZF9udW07ICsraSkgeworCQllcnIgPSAtRU5PTUVNOworCQl0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0KQorCQkJZ290byBlcnJfb3V0X2ZyZWVfc3RhdGVfZW5naW5lczsKKworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0LT53YWl0KTsKKworCQl0LT5wc2IgPSBwc2I7CisJCXQtPnRyYW5zID0gTlVMTDsKKwkJdC0+ZW5nLnRocmVhZCA9IHQ7CisKKwkJZXJyID0gcG9obWVsZnNfY3J5cHRvX2VuZ2luZV9pbml0KCZ0LT5lbmcsIHBzYik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZnJlZV9zdGF0ZV9lbmdpbmVzOworCisJCWVyciA9IHBvaG1lbGZzX2NyeXB0b19wYWdlc19hbGxvYygmdC0+ZW5nLCBwc2IpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwkJdC0+dGhyZWFkID0ga3RocmVhZF9ydW4ocG9obWVsZnNfY3J5cHRvX3RocmVhZF9mdW5jLCB0LAorCQkJCSJwb2htZWxmcy1jcnlwdG8tJWQtJWQiLCBwc2ItPmlkeCwgaSk7CisJCWlmIChJU19FUlIodC0+dGhyZWFkKSkgeworCQkJZXJyID0gUFRSX0VSUih0LT50aHJlYWQpOworCQkJdC0+dGhyZWFkID0gTlVMTDsKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCQl9CisKKwkJaWYgKHQtPmVuZy5jaXBoZXIpCisJCQlwc2ItPmNyeXB0b19hbGlnbl9zaXplID0gY3J5cHRvX2FibGtjaXBoZXJfYmxvY2tzaXplKHQtPmVuZy5jaXBoZXIpOworCisJCW11dGV4X2xvY2soJnBzYi0+Y3J5cHRvX3RocmVhZF9sb2NrKTsKKwkJbGlzdF9hZGRfdGFpbCgmdC0+dGhyZWFkX2VudHJ5LCAmcHNiLT5jcnlwdG9fcmVhZHlfbGlzdCk7CisJCW11dGV4X3VubG9jaygmcHNiLT5jcnlwdG9fdGhyZWFkX2xvY2spOworCX0KKworCXBzYi0+Y3J5cHRvX3RocmVhZF9udW0gPSBpOworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJcG9obWVsZnNfc3lzX2NyeXB0b19leGl0X29uZSh0KTsKK2Vycl9vdXRfZnJlZV9zdGF0ZV9lbmdpbmVzOgorCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJnBzYi0+c3RhdGVfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCXN0ID0gJmMtPnN0YXRlOworCQlwb2htZWxmc19jcnlwdG9fZW5naW5lX2V4aXQoJnN0LT5lbmcpOworCX0KK2Vycl9vdXRfZXhpdDoKKwlwb2htZWxmc19zeXNfY3J5cHRvX2V4aXQocHNiKTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIHBvaG1lbGZzX2NyeXB0b19leGl0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXBvaG1lbGZzX3N5c19jcnlwdG9fZXhpdChwc2IpOworCisJa2ZyZWUocHNiLT5oYXNoX3N0cmluZyk7CisJa2ZyZWUocHNiLT5jaXBoZXJfc3RyaW5nKTsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jcnlwdF9pbml0X2NvbXBsZXRlKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX251bSwKKwkJdm9pZCAqcHJpdmF0ZSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IHByaXZhdGU7CisKKwlwc2ItPmZsYWdzID0gLWVycjsKKwlkcHJpbnRrKCIlczogZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBlcnIpOworCisJd2FrZV91cCgmcHNiLT53YWl0KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRvX2luaXRfaGFuZHNoYWtlKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKQoreworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwlzdHJ1Y3QgbmV0ZnNfY3J5cHRvX2NhcGFiaWxpdGllcyAqY2FwOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZDsKKwljaGFyICpzdHI7CisJaW50IGVyciA9IC1FTk9NRU0sIHNpemU7CisKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBuZXRmc19jcnlwdG9fY2FwYWJpbGl0aWVzKSArCisJCXBzYi0+Y2lwaGVyX3N0cmxlbiArIHBzYi0+aGFzaF9zdHJsZW4gKyAyOyAvKiAwIGJ5dGVzICovCisKKwl0ID0gbmV0ZnNfdHJhbnNfYWxsb2MocHNiLCBzaXplLCAwLCAwKTsKKwlpZiAoIXQpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJdC0+Y29tcGxldGUgPSBwb2htZWxmc19jcnlwdF9pbml0X2NvbXBsZXRlOworCXQtPnByaXZhdGUgPSBwc2I7CisKKwljbWQgPSBuZXRmc190cmFuc19jdXJyZW50KHQpOworCWNhcCA9IChzdHJ1Y3QgbmV0ZnNfY3J5cHRvX2NhcGFiaWxpdGllcyAqKShjbWQgKyAxKTsKKwlzdHIgPSAoY2hhciAqKShjYXAgKyAxKTsKKworCWNtZC0+Y21kID0gTkVURlNfQ0FQQUJJTElUSUVTOworCWNtZC0+aWQgPSBQT0hNRUxGU19DUllQVE9fQ0FQQUJJTElUSUVTOworCWNtZC0+c2l6ZSA9IHNpemU7CisJY21kLT5zdGFydCA9IDA7CisJY21kLT5leHQgPSAwOworCWNtZC0+Y3NpemUgPSAwOworCisJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKwluZXRmc190cmFuc191cGRhdGUoY21kLCB0LCBzaXplKTsKKworCWNhcC0+aGFzaF9zdHJsZW4gPSBwc2ItPmhhc2hfc3RybGVuOworCWlmIChjYXAtPmhhc2hfc3RybGVuKSB7CisJCXNwcmludGYoc3RyLCAiJXMiLCBwc2ItPmhhc2hfc3RyaW5nKTsKKwkJc3RyICs9IGNhcC0+aGFzaF9zdHJsZW47CisJfQorCisJY2FwLT5jaXBoZXJfc3RybGVuID0gcHNiLT5jaXBoZXJfc3RybGVuOworCWNhcC0+Y2lwaGVyX2tleXNpemUgPSBwc2ItPmNpcGhlcl9rZXlzaXplOworCWlmIChjYXAtPmNpcGhlcl9zdHJsZW4pCisJCXNwcmludGYoc3RyLCAiJXMiLCBwc2ItPmNpcGhlcl9zdHJpbmcpOworCisJbmV0ZnNfY29udmVydF9jcnlwdG9fY2FwYWJpbGl0aWVzKGNhcCk7CisKKwlwc2ItPmZsYWdzID0gfjA7CisJZXJyID0gbmV0ZnNfdHJhbnNfZmluaXNoKHQsIHBzYik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwc2ItPndhaXQsIChwc2ItPmZsYWdzICE9IH4wKSwKKwkJCXBzYi0+d2FpdF9vbl9wYWdlX3RpbWVvdXQpOworCWlmICghZXJyKQorCQllcnIgPSAtRVRJTUVET1VUOworCWVsc2UKKwkJZXJyID0gLXBzYi0+ZmxhZ3M7CisKKwlpZiAoIWVycikKKwkJcHNiLT5wZXJmb3JtX2NyeXB0byA9IDE7CisJcHNiLT5mbGFncyA9IDA7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQgTkVURlNfQ0FQQUJJTElUSUVTIHJlc3BvbnNlIGNvbW1hbmQKKwkgKiBzaG91bGQgc2V0dXAgc3VwZXJibG9jayBpbiBhIHdheSwgd2hpY2ggaXMgYWNjZXB0aWJsZQorCSAqIGZvciBib3RoIGNsaWVudCBhbmQgc2VydmVyLCBzbyBpZiBzZXJ2ZXIgcmVmdXNlcyBjb25uZWN0aW9uLAorCSAqIGl0IHdpbGwgc2VuZCBlcnJvciBpbiB0cmFuc2FjdGlvbiByZXNwb25zZS4KKwkgKi8KKworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcG9obWVsZnNfY3J5cHRvX2luaXQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJaW50IGVycjsKKworCWlmICghcHNiLT5jaXBoZXJfc3RyaW5nICYmICFwc2ItPmhhc2hfc3RyaW5nKQorCQlyZXR1cm4gMDsKKworCWVyciA9IHBvaG1lbGZzX2NyeXB0b19pbml0X2hhbmRzaGFrZShwc2IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBwb2htZWxmc19zeXNfY3J5cHRvX2luaXQocHNiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfY3J5cHRvX3RocmVhZF9nZXQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsCisJCWludCAoKiBhY3Rpb24pKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0LCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX3RocmVhZCAqdCA9IE5VTEw7CisJaW50IGVycjsKKworCXdoaWxlICghdCkgeworCQllcnIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwc2ItPndhaXQsCisJCQkJIWxpc3RfZW1wdHkoJnBzYi0+Y3J5cHRvX3JlYWR5X2xpc3QpLAorCQkJCXBzYi0+d2FpdF9vbl9wYWdlX3RpbWVvdXQpOworCisJCXQgPSBOVUxMOworCQllcnIgPSAwOworCQltdXRleF9sb2NrKCZwc2ItPmNyeXB0b190aHJlYWRfbG9jayk7CisJCWlmICghbGlzdF9lbXB0eSgmcHNiLT5jcnlwdG9fcmVhZHlfbGlzdCkpIHsKKwkJCXQgPSBsaXN0X2VudHJ5KHBzYi0+Y3J5cHRvX3JlYWR5X2xpc3QucHJldiwKKwkJCQkJc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQsCisJCQkJCXRocmVhZF9lbnRyeSk7CisKKwkJCWxpc3RfbW92ZV90YWlsKCZ0LT50aHJlYWRfZW50cnksCisJCQkJCSZwc2ItPmNyeXB0b19hY3RpdmVfbGlzdCk7CisKKwkJCWFjdGlvbih0LCBkYXRhKTsKKwkJCXdha2VfdXAoJnQtPndhaXQpOworCisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwc2ItPmNyeXB0b190aHJlYWRfbG9jayk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc190cmFuc19jcnlwdF9hY3Rpb24oc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0cmFucyA9IGRhdGE7CisKKwluZXRmc190cmFuc19nZXQodHJhbnMpOworCXQtPnRyYW5zID0gdHJhbnM7CisKKwlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJXUsIHRocmVhZDogJXAuXG4iLCBfX2Z1bmNfXywgdHJhbnMsIHRyYW5zLT5nZW4sIHQpOworCXJldHVybiAwOworfQorCitpbnQgcG9obWVsZnNfdHJhbnNfY3J5cHQoc3RydWN0IG5ldGZzX3RyYW5zICp0cmFucywgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJaWYgKCghcHNiLT5oYXNoX3N0cmluZyAmJiAhcHNiLT5jaXBoZXJfc3RyaW5nKSB8fCAhcHNiLT5wZXJmb3JtX2NyeXB0bykgeworCQluZXRmc190cmFuc19nZXQodHJhbnMpOworCQlyZXR1cm4gcG9obWVsZnNfY3J5cHRvX2ZpbmlzaCh0cmFucywgcHNiLCAwKTsKKwl9CisKKwlyZXR1cm4gcG9obWVsZnNfY3J5cHRvX3RocmVhZF9nZXQocHNiLCBwb2htZWxmc190cmFuc19jcnlwdF9hY3Rpb24sIHRyYW5zKTsKK30KKworc3RydWN0IHBvaG1lbGZzX2NyeXB0b19pbnB1dF9hY3Rpb25fZGF0YQoreworCXN0cnVjdCBwYWdlCQkJKnBhZ2U7CisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUJKmU7CisJdTY0CQkJCWl2OworCXVuc2lnbmVkIGludAkJCXNpemU7Cit9OworCitzdGF0aWMgaW50IHBvaG1lbGZzX2NyeXB0X2lucHV0X3BhZ2VfYWN0aW9uKHN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkICp0LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9faW5wdXRfYWN0aW9uX2RhdGEgKmFjdCA9IGRhdGE7CisKKwltZW1jcHkodC0+ZW5nLmRhdGEsIGFjdC0+ZS0+ZGF0YSwgdC0+cHNiLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSk7CisKKwl0LT5zaXplID0gYWN0LT5zaXplOworCXQtPmVuZy5pdiA9IGFjdC0+aXY7CisKKwl0LT5wYWdlID0gYWN0LT5wYWdlOworCXJldHVybiAwOworfQorCitpbnQgcG9obWVsZnNfY3J5cHRvX3Byb2Nlc3NfaW5wdXRfcGFnZShzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSwKKwkJc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBzaXplLCB1NjQgaXYpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b19pbnB1dF9hY3Rpb25fZGF0YSBhY3Q7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwlhY3QucGFnZSA9IHBhZ2U7CisJYWN0LmUgPSBlOworCWFjdC5zaXplID0gc2l6ZTsKKwlhY3QuaXYgPSBpdjsKKworCWVyciA9IHBvaG1lbGZzX2NyeXB0b190aHJlYWRfZ2V0KFBPSE1FTEZTX1NCKGlub2RlLT5pX3NiKSwKKwkJCXBvaG1lbGZzX2NyeXB0X2lucHV0X3BhZ2VfYWN0aW9uLCAmYWN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvZGlyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0MTE4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9kaXIuYwpAQCAtMCwwICsxLDEwOTMgQEAKKy8qCisgKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisKKyNpbmNsdWRlICJuZXRmcy5oIgorCitzdGF0aWMgaW50IHBvaG1lbGZzX2NtcF9oYXNoKHN0cnVjdCBwb2htZWxmc19uYW1lICpuLCB1MzIgaGFzaCkKK3sKKwlpZiAobi0+aGFzaCA+IGhhc2gpCisJCXJldHVybiAtMTsKKwlpZiAobi0+aGFzaCA8IGhhc2gpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqcG9obWVsZnNfc2VhcmNoX2hhc2hfdW5wcmVjaXNlKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHUzMiBoYXNoKQoreworCXN0cnVjdCByYl9ub2RlICpuID0gcGktPmhhc2hfcm9vdC5yYl9ub2RlOworCXN0cnVjdCBwb2htZWxmc19uYW1lICp0bXAgPSBOVUxMOworCWludCBjbXA7CisKKwl3aGlsZSAobikgeworCQl0bXAgPSByYl9lbnRyeShuLCBzdHJ1Y3QgcG9obWVsZnNfbmFtZSwgaGFzaF9ub2RlKTsKKworCQljbXAgPSBwb2htZWxmc19jbXBfaGFzaCh0bXAsIGhhc2gpOworCQlpZiAoY21wIDwgMCkKKwkJCW4gPSBuLT5yYl9sZWZ0OworCQllbHNlIGlmIChjbXAgPiAwKQorCQkJbiA9IG4tPnJiX3JpZ2h0OworCQllbHNlCisJCQlicmVhazsKKworCX0KKworCXJldHVybiB0bXA7Cit9CisKK3N0cnVjdCBwb2htZWxmc19uYW1lICpwb2htZWxmc19zZWFyY2hfaGFzaChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1MzIgaGFzaCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqdG1wOworCisJdG1wID0gcG9obWVsZnNfc2VhcmNoX2hhc2hfdW5wcmVjaXNlKHBpLCBoYXNoKTsKKwlpZiAodG1wICYmICh0bXAtPmhhc2ggPT0gaGFzaCkpCisJCXJldHVybiB0bXA7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgX19wb2htZWxmc19uYW1lX2RlbChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHBvaG1lbGZzX25hbWUgKm5vZGUpCit7CisJcmJfZXJhc2UoJm5vZGUtPmhhc2hfbm9kZSwgJnBhcmVudC0+aGFzaF9yb290KTsKK30KKworLyoKKyAqIFJlbW92ZSBuYW1lIGNhY2hlIGVudHJ5IGZyb20gaXRzIGNhY2hlcyBhbmQgZnJlZSBpdC4KKyAqLworc3RhdGljIHZvaWQgcG9obWVsZnNfbmFtZV9mcmVlKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbm9kZSkKK3sKKwlfX3BvaG1lbGZzX25hbWVfZGVsKHBhcmVudCwgbm9kZSk7CisJbGlzdF9kZWwoJm5vZGUtPnN5bmNfY3JlYXRlX2VudHJ5KTsKKwlrZnJlZShub2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBwb2htZWxmc19uYW1lICpwb2htZWxmc19pbnNlcnRfaGFzaChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLAorCQlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbmV3KQoreworCXN0cnVjdCByYl9ub2RlICoqbiA9ICZwaS0+aGFzaF9yb290LnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBwb2htZWxmc19uYW1lICpyZXQgPSBOVUxMLCAqdG1wOworCWludCBjbXA7CisKKwl3aGlsZSAoKm4pIHsKKwkJcGFyZW50ID0gKm47CisKKwkJdG1wID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgcG9obWVsZnNfbmFtZSwgaGFzaF9ub2RlKTsKKworCQljbXAgPSBwb2htZWxmc19jbXBfaGFzaCh0bXAsIG5ldy0+aGFzaCk7CisJCWlmIChjbXAgPCAwKQorCQkJbiA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQluID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UgeworCQkJcmV0ID0gdG1wOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmV0KSB7CisJCXByaW50aygiJXM6IGV4aXN0OiBwYXJlbnQ6ICVsbHUsIGlubzogJWxsdSwgaGFzaDogJXgsIGxlbjogJXUsIGRhdGE6ICclcycsICIKKwkJCQkgICAgICAgICAgICJuZXc6IGlubzogJWxsdSwgaGFzaDogJXgsIGxlbjogJXUsIGRhdGE6ICclcycuXG4iLAorCQkJCV9fZnVuY19fLCBwaS0+aW5vLAorCQkJCXJldC0+aW5vLCByZXQtPmhhc2gsIHJldC0+bGVuLCByZXQtPmRhdGEsCisJCQkJbmV3LT5pbm8sIG5ldy0+aGFzaCwgbmV3LT5sZW4sIG5ldy0+ZGF0YSk7CisJCXJldC0+aW5vID0gbmV3LT5pbm87CisJCXJldHVybiByZXQ7CisJfQorCisJcmJfbGlua19ub2RlKCZuZXctPmhhc2hfbm9kZSwgcGFyZW50LCBuKTsKKwlyYl9pbnNlcnRfY29sb3IoJm5ldy0+aGFzaF9ub2RlLCAmcGktPmhhc2hfcm9vdCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEZyZWUgbmFtZSBjYWNoZSBmb3IgZ2l2ZW4gaW5vZGUuCisgKi8KK3ZvaWQgcG9obWVsZnNfZnJlZV9uYW1lcyhzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbjsKKworCWZvciAocmJfbm9kZSA9IHJiX2ZpcnN0KCZwYXJlbnQtPmhhc2hfcm9vdCk7IHJiX25vZGU7KSB7CisJCW4gPSByYl9lbnRyeShyYl9ub2RlLCBzdHJ1Y3QgcG9obWVsZnNfbmFtZSwgaGFzaF9ub2RlKTsKKwkJcmJfbm9kZSA9IHJiX25leHQocmJfbm9kZSk7CisKKwkJcG9obWVsZnNfbmFtZV9mcmVlKHBhcmVudCwgbik7CisJfQorfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19maXhfb2Zmc2V0KHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbm9kZSkKK3sKKwlwYXJlbnQtPnRvdGFsX2xlbiAtPSBub2RlLT5sZW47Cit9CisKKy8qCisgKiBGcmVlIG5hbWUgY2FjaGUgZW50cnkgaGVscGVyLgorICovCit2b2lkIHBvaG1lbGZzX25hbWVfZGVsKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbm9kZSkKK3sKKwlwb2htZWxmc19maXhfb2Zmc2V0KHBhcmVudCwgbm9kZSk7CisJcG9obWVsZnNfbmFtZV9mcmVlKHBhcmVudCwgbm9kZSk7Cit9CisKKy8qCisgKiBJbnNlcnQgbmV3IG5hbWUgY2FjaGUgZW50cnkgaW50byBhbGwgaGFzaCBjYWNoZS4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19pbnNlcnRfbmFtZShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHBvaG1lbGZzX25hbWUgKm4pCit7CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKm5hbWU7CisKKwluYW1lID0gcG9obWVsZnNfaW5zZXJ0X2hhc2gocGFyZW50LCBuKTsKKwlpZiAobmFtZSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlwYXJlbnQtPnRvdGFsX2xlbiArPSBuLT5sZW47CisJbGlzdF9hZGRfdGFpbCgmbi0+c3luY19jcmVhdGVfZW50cnksICZwYXJlbnQtPnN5bmNfY3JlYXRlX2xpc3QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBuZXcgbmFtZSBjYWNoZSBlbnRyeS4KKyAqLworc3RhdGljIHN0cnVjdCBwb2htZWxmc19uYW1lICpwb2htZWxmc19uYW1lX2FsbG9jKHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKm47CisKKwluID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBvaG1lbGZzX25hbWUpICsgbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW4pCisJCXJldHVybiBOVUxMOworCisJSU5JVF9MSVNUX0hFQUQoJm4tPnN5bmNfY3JlYXRlX2VudHJ5KTsKKworCW4tPmRhdGEgPSAoY2hhciAqKShuKzEpOworCisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBBZGQgbmV3IG5hbWUgZW50cnkgaW50byBkaXJlY3RvcnkncyBjYWNoZS4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19hZGRfZGlyKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwKKwkJc3RydWN0IHBvaG1lbGZzX2lub2RlICpucGksIHN0cnVjdCBxc3RyICpzdHIsIHVuc2lnbmVkIGludCBtb2RlLCBpbnQgbGluaykKK3sKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbjsKKworCW4gPSBwb2htZWxmc19uYW1lX2FsbG9jKHN0ci0+bGVuICsgMSk7CisJaWYgKCFuKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCW4tPmlubyA9IG5waS0+aW5vOworCW4tPm1vZGUgPSBtb2RlOworCW4tPmxlbiA9IHN0ci0+bGVuOworCW4tPmhhc2ggPSBzdHItPmhhc2g7CisJc3ByaW50ZihuLT5kYXRhLCAiJXMiLCBzdHItPm5hbWUpOworCisJbXV0ZXhfbG9jaygmcGFyZW50LT5vZmZzZXRfbG9jayk7CisJZXJyID0gcG9obWVsZnNfaW5zZXJ0X25hbWUocGFyZW50LCBuKTsKKwltdXRleF91bmxvY2soJnBhcmVudC0+b2Zmc2V0X2xvY2spOworCisJaWYgKGVycikgeworCQlpZiAoZXJyICE9IC1FRVhJU1QpCisJCQlnb3RvIGVycl9vdXRfZnJlZTsKKwkJa2ZyZWUobik7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwlrZnJlZShuKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ3JlYXRlIG5ldyBpbm9kZSBmb3IgZ2l2ZW4gcGFyYW1ldGVycyAobmFtZSwgaW5vZGUgaW5mbywgcGFyZW50KS4KKyAqIFRoaXMgZG9lcyBub3QgY3JlYXRlIG9iamVjdCBvbiB0aGUgc2VydmVyLCBpdCB3aWxsIGJlIHN5bmNlZCB0aGVyZSBkdXJpbmcgd3JpdGViYWNrLgorICovCitzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBvaG1lbGZzX25ld19pbm9kZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwKKwkJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBxc3RyICpzdHIsCisJCXN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICppbmZvLCBpbnQgbGluaykKK3sKKwlzdHJ1Y3QgaW5vZGUgKm5ldyA9IE5VTEw7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpucGk7CisJaW50IGVyciA9IC1FRVhJU1Q7CisKKwlkcHJpbnRrKCIlczogY3JlYXRpbmcgaW5vZGU6IHBhcmVudDogJWxsdSwgaW5vOiAlbGx1LCBzdHI6ICVwLlxuIiwKKwkJCV9fZnVuY19fLCAocGFyZW50KT9wYXJlbnQtPmlubzowLCBpbmZvLT5pbm8sIHN0cik7CisKKwllcnIgPSAtRU5PTUVNOworCW5ldyA9IGlnZXRfbG9ja2VkKHBzYi0+c2IsIGluZm8tPmlubyk7CisJaWYgKCFuZXcpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJbnBpID0gUE9ITUVMRlNfSShuZXcpOworCW5waS0+aW5vID0gaW5mby0+aW5vOworCWVyciA9IDA7CisKKwlpZiAobmV3LT5pX3N0YXRlICYgSV9ORVcpIHsKKwkJZHByaW50aygiJXM6IGZpbGxpbmcgVkZTIGlub2RlOiAlbHUvJWxsdS5cbiIsCisJCQkJX19mdW5jX18sIG5ldy0+aV9pbm8sIGluZm8tPmlubyk7CisJCXBvaG1lbGZzX2ZpbGxfaW5vZGUobmV3LCBpbmZvKTsKKworCQlpZiAoU19JU0RJUihpbmZvLT5tb2RlKSkgeworCQkJc3RydWN0IHFzdHIgczsKKworCQkJcy5uYW1lID0gIi4iOworCQkJcy5sZW4gPSAxOworCQkJcy5oYXNoID0gamhhc2gocy5uYW1lLCBzLmxlbiwgMCk7CisKKwkJCWVyciA9IHBvaG1lbGZzX2FkZF9kaXIocHNiLCBucGksIG5waSwgJnMsIGluZm8tPm1vZGUsIDApOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycl9vdXRfcHV0OworCisJCQlzLm5hbWUgPSAiLi4iOworCQkJcy5sZW4gPSAyOworCQkJcy5oYXNoID0gamhhc2gocy5uYW1lLCBzLmxlbiwgMCk7CisKKwkJCWVyciA9IHBvaG1lbGZzX2FkZF9kaXIocHNiLCBucGksIChwYXJlbnQpP3BhcmVudDpucGksICZzLAorCQkJCQkocGFyZW50KT9wYXJlbnQtPnZmc19pbm9kZS5pX21vZGU6bnBpLT52ZnNfaW5vZGUuaV9tb2RlLCAwKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnJfb3V0X3B1dDsKKwkJfQorCX0KKworCWlmIChzdHIpIHsKKwkJaWYgKHBhcmVudCkgeworCQkJZXJyID0gcG9obWVsZnNfYWRkX2Rpcihwc2IsIHBhcmVudCwgbnBpLCBzdHIsIGluZm8tPm1vZGUsIGxpbmspOworCisJCQlkcHJpbnRrKCIlczogJXMgaW5zZXJ0ZWQgbmFtZTogJyVzJywgbmV3X29mZnNldDogJWxsdSwgaW5vOiAlbGx1LCBwYXJlbnQ6ICVsbHUuXG4iLAorCQkJCQlfX2Z1bmNfXywgKGVycik/InVuc3VjY2Vzc2Z1bGx5Ijoic3VjY2Vzc2Z1bGx5IiwKKwkJCQkJc3RyLT5uYW1lLCBwYXJlbnQtPnRvdGFsX2xlbiwgaW5mby0+aW5vLCBwYXJlbnQtPmlubyk7CisKKwkJCWlmIChlcnIgJiYgZXJyICE9IC1FRVhJU1QpCisJCQkJZ290byBlcnJfb3V0X3B1dDsKKwkJfQorCX0KKworCWlmIChuZXctPmlfc3RhdGUgJiBJX05FVykgeworCQlpZiAocGFyZW50KQorCQkJbWFya19pbm9kZV9kaXJ0eSgmcGFyZW50LT52ZnNfaW5vZGUpOworCQltYXJrX2lub2RlX2RpcnR5KG5ldyk7CisJfQorCisJc2V0X2JpdChORVRGU19JTk9ERV9PV05FRCwgJm5waS0+c3RhdGUpOworCW5waS0+bG9ja190eXBlID0gUE9ITUVMRlNfV1JJVEVfTE9DSzsKKwl1bmxvY2tfbmV3X2lub2RlKG5ldyk7CisKKwlyZXR1cm4gbnBpOworCitlcnJfb3V0X3B1dDoKKwlwcmludGsoIiVzOiBwdXR0aW5nIGlub2RlOiAlcCwgbnBpOiAlcCwgZXJyb3I6ICVkLlxuIiwgX19mdW5jX18sIG5ldywgbnBpLCBlcnIpOworCWlwdXQobmV3KTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlbW90ZV9zeW5jX2NvbXBsZXRlKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX251bSwKKwkJdm9pZCAqcHJpdmF0ZSwgaW50IGVycikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gcHJpdmF0ZTsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHBpLT52ZnNfaW5vZGUuaV9zYik7CisKKwlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBlcnI6ICVkLlxuIiwgX19mdW5jX18sIHBpLT5pbm8sIGVycik7CisKKwlpZiAoZXJyKQorCQlwaS0+ZXJyb3IgPSBlcnI7CisJd2FrZV91cCgmcHNiLT53YWl0KTsKKwlwb2htZWxmc19wdXRfaW5vZGUocGkpOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJlY2VpdmUgZGlyZWN0b3J5IGNvbnRlbnQgZnJvbSB0aGUgc2VydmVyLgorICogVGhpcyBzaG91bGQgYmUgb25seSBkb25lIGZvciBvYmplY3RzLCB3aGljaCB3ZXJlIG5vdCBjcmVhdGVkIGxvY2FsbHksCisgKiBhbmQgd2hpY2ggd2VyZSBub3Qgc3luY2VkIHByZXZpb3VzbHkuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfc3luY19yZW1vdGVfZGlyKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZwaS0+dmZzX2lub2RlOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpOworCWxvbmcgcmV0ID0gbXNlY3NfdG9famlmZmllcygyNTAwMCk7CisJaW50IGVycjsKKworCWRwcmludGsoIiVzOiBkaXI6ICVsbHUsIHN0YXRlOiAlbHg6IHJlbW90ZV9zeW5jZWQ6ICVkLlxuIiwKKwkJX19mdW5jX18sIHBpLT5pbm8sIHBpLT5zdGF0ZSwgdGVzdF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJnBpLT5zdGF0ZSkpOworCisJaWYgKHRlc3RfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9ESVJfU1lOQ0VELCAmcGktPnN0YXRlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWlncmFiKGlub2RlKSkgeworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwllcnIgPSBwb2htZWxmc19tZXRhX2NvbW1hbmQocGksIE5FVEZTX1JFQURESVIsIE5FVEZTX1RSQU5TX1NJTkdMRV9EU1QsCisJCQlwb2htZWxmc19yZW1vdGVfc3luY19jb21wbGV0ZSwgcGksIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcGktPmVycm9yID0gMDsKKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwc2ItPndhaXQsCisJCQl0ZXN0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfRElSX1NZTkNFRCwgJnBpLT5zdGF0ZSkgfHwgcGktPmVycm9yLCByZXQpOworCWRwcmludGsoIiVzOiBhd2FrZSBkaXI6ICVsbHUsIHJldDogJWxkLCBlcnI6ICVkLlxuIiwgX19mdW5jX18sIHBpLT5pbm8sIHJldCwgcGktPmVycm9yKTsKKwlpZiAocmV0IDw9IDApIHsKKwkJZXJyID0gLUVUSU1FRE9VVDsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJaWYgKHBpLT5lcnJvcikKKwkJcmV0dXJuIHBpLT5lcnJvcjsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJY2xlYXJfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZwaS0+c3RhdGUpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19kaXJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCisvKgorICogVkZTIHJlYWRkaXIgY2FsbGJhY2suIFN5bmNzIGRpcmVjdG9yeSBjb250ZW50IGZyb20gc2VydmVyIGlmIG5lZWRlZCwKKyAqIGFuZCBwcm92aWRlcyBkaXJlbnRyeSBpbmZvIHRvIHRoZSB1c2Vyc3BhY2UuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZGlyZW50LCBmaWxsZGlyX3QgZmlsbGRpcikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJc3RydWN0IHBvaG1lbGZzX25hbWUgKm47CisJc3RydWN0IHJiX25vZGUgKnJiX25vZGU7CisJaW50IGVyciA9IDAsIG1vZGU7CisJdTY0IGxlbjsKKworCWRwcmludGsoIiVzOiBwYXJlbnQ6ICVsbHUsIGZwb3M6ICVsbHUsIGhhc2g6ICUwOGx4LlxuIiwKKwkJCV9fZnVuY19fLCBwaS0+aW5vLCAodTY0KWZpbGUtPmZfcG9zLAorCQkJKHVuc2lnbmVkIGxvbmcpZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKworCWVyciA9IHBvaG1lbGZzX2RhdGFfbG9jayhwaSwgMCwgfjAsIFBPSE1FTEZTX1JFQURfTE9DSyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHBvaG1lbGZzX3N5bmNfcmVtb3RlX2RpcihwaSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChmaWxlLT5wcml2YXRlX2RhdGEgJiYgKGZpbGUtPnByaXZhdGVfZGF0YSA9PSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWZpbGUtPmZfcG9zKSkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZwaS0+b2Zmc2V0X2xvY2spOworCW4gPSBwb2htZWxmc19zZWFyY2hfaGFzaF91bnByZWNpc2UocGksICh1bnNpZ25lZCBsb25nKWZpbGUtPnByaXZhdGVfZGF0YSk7CisKKwl3aGlsZSAobikgeworCQltb2RlID0gKG4tPm1vZGUgPj4gMTIpICYgMTU7CisKKwkJZHByaW50aygiJXM6IG9mZnNldDogJWxsdSwgcGFyZW50IGlubzogJWxsdSwgbmFtZTogJyVzJywgbGVuOiAldSwgaW5vOiAlbGx1LCAiCisJCQkJIm1vZGU6ICVvLyVvLCBmcG9zOiAlbGx1LCBoYXNoOiAlMDh4LlxuIiwKKwkJCQlfX2Z1bmNfXywgZmlsZS0+Zl9wb3MsIHBpLT5pbm8sIG4tPmRhdGEsIG4tPmxlbiwKKwkJCQluLT5pbm8sIG4tPm1vZGUsIG1vZGUsIGZpbGUtPmZfcG9zLCBuLT5oYXNoKTsKKworCQlmaWxlLT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKW4tPmhhc2g7CisKKwkJbGVuID0gbi0+bGVuOworCQllcnIgPSBmaWxsZGlyKGRpcmVudCwgbi0+ZGF0YSwgbi0+bGVuLCBmaWxlLT5mX3Bvcywgbi0+aW5vLCBtb2RlKTsKKworCQlpZiAoZXJyIDwgMCkgeworCQkJZHByaW50aygiJXM6IGVycjogJWQuXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJCWVyciA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWZpbGUtPmZfcG9zICs9IGxlbjsKKworCQlyYl9ub2RlID0gcmJfbmV4dCgmbi0+aGFzaF9ub2RlKTsKKworCQlpZiAoIXJiX25vZGUgfHwgKHJiX25vZGUgPT0gJm4tPmhhc2hfbm9kZSkpIHsKKwkJCWZpbGUtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpZmlsZS0+Zl9wb3M7CisJCQlicmVhazsKKwkJfQorCisJCW4gPSByYl9lbnRyeShyYl9ub2RlLCBzdHJ1Y3QgcG9obWVsZnNfbmFtZSwgaGFzaF9ub2RlKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwaS0+b2Zmc2V0X2xvY2spOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGxvZmZfdCBwb2htZWxmc19kaXJfbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pCit7CisJZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlyZXR1cm4gb2Zmc2V0OworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBvaG1lbGZzX2Rpcl9mb3BzID0geworCS5vcGVuID0gcG9obWVsZnNfZGlyX29wZW4sCisJLnJlYWQgPSBnZW5lcmljX3JlYWRfZGlyLAorCS5sbHNlZWsgPSBwb2htZWxmc19kaXJfbHNlZWssCisJLnJlYWRkaXIgPSBwb2htZWxmc19yZWFkZGlyLAorfTsKKworLyoKKyAqIExvb2t1cCBzaW5nbGUgb2JqZWN0IG9uIHNlcnZlci4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19sb29rdXBfc2luZ2xlKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LAorCQlzdHJ1Y3QgcXN0ciAqc3RyLCB1NjQgaW5vKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IocGFyZW50LT52ZnNfaW5vZGUuaV9zYik7CisJbG9uZyByZXQgPSBtc2Vjc190b19qaWZmaWVzKDUwMDApOworCWludCBlcnI7CisKKwlzZXRfYml0KE5FVEZTX0NPTU1BTkRfUEVORElORywgJnBhcmVudC0+c3RhdGUpOworCWVyciA9IHBvaG1lbGZzX21ldGFfY29tbWFuZF9kYXRhKHBhcmVudCwgcGFyZW50LT5pbm8sIE5FVEZTX0xPT0tVUCwKKwkJCShjaGFyICopc3RyLT5uYW1lLCBORVRGU19UUkFOU19TSU5HTEVfRFNULCBOVUxMLCBOVUxMLCBpbm8pOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJZXJyID0gMDsKKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwc2ItPndhaXQsCisJCQkhdGVzdF9iaXQoTkVURlNfQ09NTUFORF9QRU5ESU5HLCAmcGFyZW50LT5zdGF0ZSksIHJldCk7CisJaWYgKHJldCA9PSAwKQorCQllcnIgPSAtRVRJTUVET1VUOworCWVsc2UgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQllcnIgPSAtRUlOVFI7CisKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJY2xlYXJfYml0KE5FVEZTX0NPTU1BTkRfUEVORElORywgJnBhcmVudC0+c3RhdGUpOworCisJcHJpbnRrKCIlczogZmFpbGVkOiBwYXJlbnQ6ICVsbHUsIGlubzogJWxsdSwgbmFtZTogJyVzJywgZXJyOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgcGFyZW50LT5pbm8sIGlubywgc3RyLT5uYW1lLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFZGUyBsb29rdXAgY2FsbGJhY2suCisgKiBXZSBmaXJzdCB0cnkgdG8gZ2V0IGlub2RlIG51bWJlciBmcm9tIGxvY2FsIG5hbWUgY2FjaGUsIGlmIHdlIGhhdmUgb25lLAorICogdGhlbiBpbm9kZSBjYW4gYmUgZm91bmQgaW4gaW5vZGUgY2FjaGUuIElmIHRoZXJlIGlzIG5vIGlub2RlIG9yIG5vIG9iamVjdCBpbgorICogbG9jYWwgY2FjaGUsIHRyeSB0byBsb29rdXAgaXQgb24gc2VydmVyLiBUaGlzIG9ubHkgc2hvdWxkIGJlIGRvbmUgZm9yIGRpcmVjdG9yaWVzLAorICogd2hpY2ggd2VyZSBub3QgY3JlYXRlZCBsb2NhbGx5LCBvdGhlcndpc2UgcmVtb3RlIHNlcnZlciBkb2VzIG5vdCBrbm93IGFib3V0IGRpciBhdCBhbGwsCisgKiBzbyBubyBuZWVkIHRvIHRyeSB0byBrbm93IHRoYXQuCisgKi8KK3N0cnVjdCBkZW50cnkgKnBvaG1lbGZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCA9IFBPSE1FTEZTX0koZGlyKTsKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGlubyA9IDA7CisJaW50IGVyciwgbG9ja190eXBlID0gUE9ITUVMRlNfUkVBRF9MT0NLLCBuZWVkX2xvY2s7CisJc3RydWN0IHFzdHIgc3RyID0gZGVudHJ5LT5kX25hbWU7CisKKwlpZiAoKG5kLT5pbnRlbnQub3Blbi5mbGFncyAmIE9fQUNDTU9ERSkgPiAxKQorCQlsb2NrX3R5cGUgPSBQT0hNRUxGU19XUklURV9MT0NLOworCisJbmVlZF9sb2NrID0gcG9obWVsZnNfbmVlZF9sb2NrKHBhcmVudCwgbG9ja190eXBlKTsKKworCWVyciA9IHBvaG1lbGZzX2RhdGFfbG9jayhwYXJlbnQsIDAsIH4wLCBsb2NrX3R5cGUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJc3RyLmhhc2ggPSBqaGFzaChkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4sIDApOworCisJbXV0ZXhfbG9jaygmcGFyZW50LT5vZmZzZXRfbG9jayk7CisJbiA9IHBvaG1lbGZzX3NlYXJjaF9oYXNoKHBhcmVudCwgc3RyLmhhc2gpOworCWlmIChuKQorCQlpbm8gPSBuLT5pbm87CisJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPm9mZnNldF9sb2NrKTsKKworCWRwcmludGsoIiVzOiAxIGlubzogJWx1LCBpbm9kZTogJXAsIG5hbWU6ICclcycsIGhhc2g6ICV4LCBwYXJlbnRfc3RhdGU6ICVseC5cbiIsCisJCQlfX2Z1bmNfXywgaW5vLCBpbm9kZSwgc3RyLm5hbWUsIHN0ci5oYXNoLCBwYXJlbnQtPnN0YXRlKTsKKworCWlmIChpbm8pIHsKKwkJaW5vZGUgPSBpbG9va3VwKGRpci0+aV9zYiwgaW5vKTsKKwkJaWYgKGlub2RlKQorCQkJZ290byBvdXQ7CisJfQorCisJZHByaW50aygiJXM6IGRpcjogJXAsIGRpcl9pbm86ICVsbHUsIG5hbWU6ICclcycsIGxlbjogJXUsIGRpcl9zdGF0ZTogJWx4LCBpbm86ICVsdS5cbiIsCisJCQlfX2Z1bmNfXywgZGlyLCBwYXJlbnQtPmlubywKKwkJCXN0ci5uYW1lLCBzdHIubGVuLCBwYXJlbnQtPnN0YXRlLCBpbm8pOworCisJaWYgKCFpbm8pIHsKKwkJaWYgKCFuZWVkX2xvY2spCisJCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBwb2htZWxmc19sb29rdXBfc2luZ2xlKHBhcmVudCwgJnN0ciwgaW5vKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWlmICghaW5vKSB7CisJCW11dGV4X2xvY2soJnBhcmVudC0+b2Zmc2V0X2xvY2spOworCQluID0gcG9obWVsZnNfc2VhcmNoX2hhc2gocGFyZW50LCBzdHIuaGFzaCk7CisJCWlmIChuKQorCQkJaW5vID0gbi0+aW5vOworCQltdXRleF91bmxvY2soJnBhcmVudC0+b2Zmc2V0X2xvY2spOworCX0KKworCWlmIChpbm8pIHsKKwkJaW5vZGUgPSBpbG9va3VwKGRpci0+aV9zYiwgaW5vKTsKKwkJcHJpbnRrKCIlczogc2Vjb25kIGxvb2t1cCBpbm86ICVsdSwgaW5vZGU6ICVwLCBuYW1lOiAnJXMnLCBoYXNoOiAleC5cbiIsCisJCQkJX19mdW5jX18sIGlubywgaW5vZGUsIHN0ci5uYW1lLCBzdHIuaGFzaCk7CisJCWlmICghaW5vZGUpIHsKKwkJCXByaW50aygiJXM6IE5vIGlub2RlIGZvciBpbm86ICVsdSwgbmFtZTogJyVzJywgaGFzaDogJXguXG4iLAorCQkJCV9fZnVuY19fLCBpbm8sIHN0ci5uYW1lLCBzdHIuaGFzaCk7CisJCQkvL3JldHVybiBOVUxMOworCQkJcmV0dXJuIEVSUl9QVFIoLUVBQ0NFUyk7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGsoIiVzOiBObyBpbm9kZSBudW1iZXIgOiBuYW1lOiAnJXMnLCBoYXNoOiAleC5cbiIsCisJCQlfX2Z1bmNfXywgc3RyLm5hbWUsIHN0ci5oYXNoKTsKKwl9CitvdXQ6CisJcmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOworfQorCisvKgorICogQ3JlYXRlIG5ldyBvYmplY3QgaW4gbG9jYWwgY2FjaGUuIE9iamVjdCB3aWxsIGJlIHN5bmNlZCB0byBzZXJ2ZXIKKyAqIGR1cmluZyB3cml0ZWJhY2sgZm9yIGdpdmVuIGlub2RlLgorICovCitzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBvaG1lbGZzX2NyZWF0ZV9lbnRyeV9sb2NhbChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHFzdHIgKnN0ciwgdTY0IHN0YXJ0LCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKm5waTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyBpbmZvOworCisJZHByaW50aygiJXM6IG5hbWU6ICclcycsIG1vZGU6ICVvLCBzdGFydDogJWxsdS5cbiIsCisJCQlfX2Z1bmNfXywgc3RyLT5uYW1lLCBtb2RlLCBzdGFydCk7CisKKwlpbmZvLm1vZGUgPSBtb2RlOworCWluZm8uaW5vID0gc3RhcnQ7CisKKwlpZiAoIXN0YXJ0KQorCQlpbmZvLmlubyA9IHBvaG1lbGZzX25ld19pbm8ocHNiKTsKKworCWluZm8ubmxpbmsgPSBTX0lTRElSKG1vZGUpPzI6MTsKKwlpbmZvLnVpZCA9IGN1cnJlbnRfZnN1aWQoKTsKKwlpbmZvLmdpZCA9IGN1cnJlbnRfZnNnaWQoKTsKKwlpbmZvLnNpemUgPSAwOworCWluZm8uYmxvY2tzaXplID0gNTEyOworCWluZm8uYmxvY2tzID0gMDsKKwlpbmZvLnJkZXYgPSAwOworCWluZm8udmVyc2lvbiA9IDA7CisKKwlucGkgPSBwb2htZWxmc19uZXdfaW5vZGUocHNiLCBwYXJlbnQsIHN0ciwgJmluZm8sICEhc3RhcnQpOworCWlmIChJU19FUlIobnBpKSkgeworCQllcnIgPSBQVFJfRVJSKG5waSk7CisJCWdvdG8gZXJyX291dF91bmxvY2s7CisJfQorCisJcmV0dXJuIG5waTsKKworZXJyX291dF91bmxvY2s6CisJZHByaW50aygiJXM6IGVycjogJWQuXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCisvKgorICogQ3JlYXRlIGxvY2FsIG9iamVjdCBhbmQgYmluZCBpdCB0byBkZW50cnkuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfY3JlYXRlX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHU2NCBzdGFydCwgaW50IG1vZGUpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihkaXItPmlfc2IpOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqbnBpLCAqcGFyZW50OworCXN0cnVjdCBxc3RyIHN0ciA9IGRlbnRyeS0+ZF9uYW1lOworCWludCBlcnI7CisKKwlwYXJlbnQgPSBQT0hNRUxGU19JKGRpcik7CisKKwllcnIgPSBwb2htZWxmc19kYXRhX2xvY2socGFyZW50LCAwLCB+MCwgUE9ITUVMRlNfV1JJVEVfTE9DSyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXN0ci5oYXNoID0gamhhc2goZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuLCAwKTsKKworCW5waSA9IHBvaG1lbGZzX2NyZWF0ZV9lbnRyeV9sb2NhbChwc2IsIHBhcmVudCwgJnN0ciwgc3RhcnQsIG1vZGUpOworCWlmIChJU19FUlIobnBpKSkKKwkJcmV0dXJuIFBUUl9FUlIobnBpKTsKKworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCAmbnBpLT52ZnNfaW5vZGUpOworCisJZHByaW50aygiJXM6IHBhcmVudDogJWxsdSwgaW5vZGU6ICVsbHUsIG5hbWU6ICclcycsIHBhcmVudF9ubGluazogJWQsIG5saW5rOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgcGFyZW50LT5pbm8sIG5waS0+aW5vLCBkZW50cnktPmRfbmFtZS5uYW1lLAorCQkJKHNpZ25lZClkaXItPmlfbmxpbmssIChzaWduZWQpbnBpLT52ZnNfaW5vZGUuaV9ubGluayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFZGUyBjcmVhdGUgYW5kIG1rZGlyIGNhbGxiYWNrcy4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCisJCXN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXJldHVybiBwb2htZWxmc19jcmVhdGVfZW50cnkoZGlyLCBkZW50cnksIDAsIG1vZGUpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKQoreworCWludCBlcnI7CisKKwlpbm9kZV9pbmNfbGlua19jb3VudChkaXIpOworCWVyciA9IHBvaG1lbGZzX2NyZWF0ZV9lbnRyeShkaXIsIGRlbnRyeSwgMCwgbW9kZSB8IFNfSUZESVIpOworCWlmIChlcnIpCisJCWlub2RlX2RlY19saW5rX2NvdW50KGRpcik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlbW92ZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoZGlyLT5pX3NiKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50ID0gUE9ITUVMRlNfSShkaXIpLCAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbjsKKwlpbnQgZXJyID0gLUVOT0VOVDsKKwlzdHJ1Y3QgcXN0ciBzdHIgPSBkZW50cnktPmRfbmFtZTsKKworCWVyciA9IHBvaG1lbGZzX2RhdGFfbG9jayhwYXJlbnQsIDAsIH4wLCBQT0hNRUxGU19XUklURV9MT0NLKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3RyLmhhc2ggPSBqaGFzaChkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4sIDApOworCisJZHByaW50aygiJXM6IGRpcl9pbm86ICVsbHUsIGlub2RlOiAlbGx1LCBuYW1lOiAnJXMnLCBubGluazogJWQuXG4iLAorCQkJX19mdW5jX18sIHBhcmVudC0+aW5vLCBwaS0+aW5vLAorCQkJc3RyLm5hbWUsIChzaWduZWQpaW5vZGUtPmlfbmxpbmspOworCisJQlVHX09OKCFpbm9kZSk7CisKKwltdXRleF9sb2NrKCZwYXJlbnQtPm9mZnNldF9sb2NrKTsKKwluID0gcG9obWVsZnNfc2VhcmNoX2hhc2gocGFyZW50LCBzdHIuaGFzaCk7CisJaWYgKG4pIHsKKwkJcG9obWVsZnNfZml4X29mZnNldChwYXJlbnQsIG4pOworCQlpZiAodGVzdF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJnBpLT5zdGF0ZSkpIHsKKwkJCXBvaG1lbGZzX3JlbW92ZV9jaGlsZChwaSwgbik7CisJCX0KKwkJcG9obWVsZnNfbmFtZV9mcmVlKHBhcmVudCwgbik7CisJCWVyciA9IDA7CisJfQorCW11dGV4X3VubG9jaygmcGFyZW50LT5vZmZzZXRfbG9jayk7CisKKwlpZiAoIWVycikgeworCQlwc2ItPmF2YWlsX3NpemUgKz0gaW5vZGUtPmlfc2l6ZTsKKworCQlwb2htZWxmc19pbm9kZV9kZWxfaW5vZGUocHNiLCBwaSk7CisKKwkJbWFya19pbm9kZV9kaXJ0eShkaXIpOworCisJCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lOworCQlpZiAoaW5vZGUtPmlfbmxpbmspCisJCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJfQorCWRwcmludGsoIiVzOiBpbm9kZTogJXAsIGxvY2s6ICVsZCwgdW5oYXNoZWQ6ICVkLlxuIiwKKwkJX19mdW5jX18sIHBpLCBpbm9kZS0+aV9zdGF0ZSAmIElfTE9DSywgaGxpc3RfdW5oYXNoZWQoJmlub2RlLT5pX2hhc2gpKTsKKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBVbmxpbmsgYW5kIHJtZGlyIFZGUyBjYWxsYmFja3MuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJcmV0dXJuIHBvaG1lbGZzX3JlbW92ZV9lbnRyeShkaXIsIGRlbnRyeSk7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisKKwlkcHJpbnRrKCIlczogcGFyZW50OiAlbGx1LCBpbm9kZTogJWxsdSwgbmFtZTogJyVzJywgcGFyZW50X25saW5rOiAlZCwgbmxpbms6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBQT0hNRUxGU19JKGRpciktPmlubywgUE9ITUVMRlNfSShpbm9kZSktPmlubywKKwkJCWRlbnRyeS0+ZF9uYW1lLm5hbWUsIChzaWduZWQpZGlyLT5pX25saW5rLCAoc2lnbmVkKWlub2RlLT5pX25saW5rKTsKKworCWVyciA9IHBvaG1lbGZzX3JlbW92ZV9lbnRyeShkaXIsIGRlbnRyeSk7CisJaWYgKCFlcnIpIHsKKwkJaW5vZGVfZGVjX2xpbmtfY291bnQoZGlyKTsKKwkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBMaW5rIGNyZWF0aW9uIGlzIHN5bmNocm9ub3VzLgorICogSSdtIGxhenkuCisgKiBFYXJ0aCBpcyBzb21ld2hhdCByb3VuZC4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19jcmVhdGVfbGluayhzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCwgc3RydWN0IHFzdHIgKm9iaiwKKwkJc3RydWN0IHBvaG1lbGZzX2lub2RlICp0YXJnZXQsIHN0cnVjdCBxc3RyICp0c3RyKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBwYXJlbnQtPnZmc19pbm9kZS5pX3NiOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0Ioc2IpOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZDsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJdm9pZCAqZGF0YTsKKwlpbnQgZXJyLCBwYXJlbnRfbGVuLCB0YXJnZXRfbGVuID0gMCwgY3VyX2xlbiwgcGF0aF9zaXplID0gMDsKKworCWVyciA9IHBvaG1lbGZzX2RhdGFfbG9jayhwYXJlbnQsIDAsIH4wLCBQT0hNRUxGU19XUklURV9MT0NLKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gc2ItPnNfb3AtPndyaXRlX2lub2RlKCZwYXJlbnQtPnZmc19pbm9kZSwgMCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlpZiAodHN0cikKKwkJdGFyZ2V0X2xlbiA9IHRzdHItPmxlbjsKKworCXBhcmVudF9sZW4gPSBwb2htZWxmc19wYXRoX2xlbmd0aChwYXJlbnQpOworCWlmICh0YXJnZXQpCisJCXRhcmdldF9sZW4gKz0gcG9obWVsZnNfcGF0aF9sZW5ndGgodGFyZ2V0KTsKKworCWlmIChwYXJlbnRfbGVuIDwgMCkgeworCQllcnIgPSBwYXJlbnRfbGVuOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlpZiAodGFyZ2V0X2xlbiA8IDApIHsKKwkJZXJyID0gdGFyZ2V0X2xlbjsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJdCA9IG5ldGZzX3RyYW5zX2FsbG9jKHBzYiwgcGFyZW50X2xlbiArIHRhcmdldF9sZW4gKyBvYmotPmxlbiArIDIsIDAsIDApOworCWlmICghdCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisJY3VyX2xlbiA9IG5ldGZzX3RyYW5zX2N1cl9sZW4odCk7CisKKwljbWQgPSBuZXRmc190cmFuc19jdXJyZW50KHQpOworCWlmIChJU19FUlIoY21kKSkgeworCQllcnIgPSBQVFJfRVJSKGNtZCk7CisJCWdvdG8gZXJyX291dF9mcmVlOworCX0KKworCWRhdGEgPSAodm9pZCAqKShjbWQgKyAxKTsKKwljdXJfbGVuIC09IHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKTsKKworCWVyciA9IHBvaG1lbGZzX2NvbnN0cnVjdF9wYXRoX3N0cmluZyhwYXJlbnQsIGRhdGEsIHBhcmVudF9sZW4pOworCWlmIChlcnIgPiAwKSB7CisJCS8qIERvIG5vdCBwbGFjZSBudWxsLWJ5dGUgYmVmb3JlIHRoZSBzbGFzaCAqLworCQlwYXRoX3NpemUgPSBlcnIgLSAxOworCQljdXJfbGVuIC09IHBhdGhfc2l6ZTsKKworCQllcnIgPSBzbnByaW50ZihkYXRhICsgcGF0aF9zaXplLCBjdXJfbGVuLCAiLyVzfCIsIG9iai0+bmFtZSk7CisKKwkJcGF0aF9zaXplICs9IGVycjsKKwkJY3VyX2xlbiAtPSBlcnI7CisKKwkJY21kLT5leHQgPSBwYXRoX3NpemUgLSAxOyAvKiBObyB8IHN5bWJvbCAqLworCisJCWlmICh0YXJnZXQpIHsKKwkJCWVyciA9IHBvaG1lbGZzX2NvbnN0cnVjdF9wYXRoX3N0cmluZyh0YXJnZXQsIGRhdGEgKyBwYXRoX3NpemUsIHRhcmdldF9sZW4pOworCQkJaWYgKGVyciA+IDApIHsKKwkJCQlwYXRoX3NpemUgKz0gZXJyOworCQkJCWN1cl9sZW4gLT0gZXJyOworCQkJfQorCQl9CisJfQorCisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJY21kLT5zdGFydCA9IDA7CisKKwlpZiAoIXRhcmdldCAmJiB0c3RyKSB7CisJCWlmICh0c3RyLT5sZW4gPiBjdXJfbGVuIC0gMSkgeworCQkJZXJyID0gLUVOQU1FVE9PTE9ORzsKKwkJCWdvdG8gZXJyX291dF9mcmVlOworCQl9CisKKwkJZXJyID0gc25wcmludGYoZGF0YSArIHBhdGhfc2l6ZSwgY3VyX2xlbiwgIiVzIiwgdHN0ci0+bmFtZSkgKyAxOyAvKiAwLWJ5dGUgKi8KKwkJcGF0aF9zaXplICs9IGVycjsKKwkJY3VyX2xlbiAtPSBlcnI7CisJCWNtZC0+c3RhcnQgPSAxOworCX0KKworCWRwcmludGsoIiVzOiBwYXJlbnQ6ICVsbHUsIG9iajogJyVzJywgdGFyZ2V0X2lub2RlOiAlbGx1LCB0YXJnZXRfc3RyOiAnJXMnLCBmdWxsOiAnJXMnLlxuIiwKKwkJCV9fZnVuY19fLCBwYXJlbnQtPmlubywgb2JqLT5uYW1lLCAodGFyZ2V0KT90YXJnZXQtPmlubzowLCAodHN0cik/dHN0ci0+bmFtZTpOVUxMLAorCQkJKGNoYXIgKilkYXRhKTsKKworCWNtZC0+Y21kID0gTkVURlNfTElOSzsKKwljbWQtPnNpemUgPSBwYXRoX3NpemU7CisJY21kLT5pZCA9IHBhcmVudC0+aW5vOworCisJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKworCW5ldGZzX3RyYW5zX3VwZGF0ZShjbWQsIHQsIHBhdGhfc2l6ZSk7CisKKwllcnIgPSBuZXRmc190cmFuc19maW5pc2godCwgcHNiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJdC0+cmVzdWx0ID0gZXJyOworCW5ldGZzX3RyYW5zX3B1dCh0KTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogIFZGUyBoYXJkIGFuZCBzb2Z0IGxpbmsgY2FsbGJhY2tzLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2xpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsCisJc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlpbnQgZXJyOworCXN0cnVjdCBxc3RyIHN0ciA9IGRlbnRyeS0+ZF9uYW1lOworCisJc3RyLmhhc2ggPSBqaGFzaChkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4sIDApOworCisJZXJyID0gaW5vZGUtPmlfc2ItPnNfb3AtPndyaXRlX2lub2RlKGlub2RlLCAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcG9obWVsZnNfY3JlYXRlX2xpbmsoUE9ITUVMRlNfSShkaXIpLCAmc3RyLCBwaSwgTlVMTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBwb2htZWxmc19jcmVhdGVfZW50cnkoZGlyLCBkZW50cnksIHBpLT5pbm8sIGlub2RlLT5pX21vZGUpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqc3ltbmFtZSkKK3sKKwlzdHJ1Y3QgcXN0ciBzeW1fc3RyOworCXN0cnVjdCBxc3RyIHN0ciA9IGRlbnRyeS0+ZF9uYW1lOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW50IGVycjsKKworCXN0ci5oYXNoID0gamhhc2goZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuLCAwKTsKKworCXN5bV9zdHIubmFtZSA9IHN5bW5hbWU7CisJc3ltX3N0ci5sZW4gPSBzdHJsZW4oc3ltbmFtZSk7CisKKwllcnIgPSBwb2htZWxmc19jcmVhdGVfbGluayhQT0hNRUxGU19JKGRpciksICZzdHIsIE5VTEwsICZzeW1fc3RyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWVyciA9IHBvaG1lbGZzX2NyZWF0ZV9lbnRyeShkaXIsIGRlbnRyeSwgMCwgU19JRkxOSyB8IFNfSVJXWFUgfCBTX0lSV1hHIHwgU19JUldYTyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKworCWVyciA9IHBhZ2Vfc3ltbGluayhpbm9kZSwgc3ltbmFtZSwgc3ltX3N0ci5sZW4gKyAxKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcHV0OworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfcHV0OgorCWlwdXQoaW5vZGUpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfc2VuZF9yZW5hbWUoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsCisJCXN0cnVjdCBxc3RyICpzdHIpCit7CisJaW50IHBhdGhfbGVuLCBlcnIsIHRvdGFsX2xlbiA9IDAsIGlub2RlX2xlbiwgcGFyZW50X2xlbjsKKwljaGFyICpwYXRoOworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQ7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihwaS0+dmZzX2lub2RlLmlfc2IpOworCisJcGFyZW50X2xlbiA9IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHBhcmVudCk7CisJaW5vZGVfbGVuID0gcG9obWVsZnNfcGF0aF9sZW5ndGgocGkpOworCisJaWYgKHBhcmVudF9sZW4gPCAwIHx8IGlub2RlX2xlbiA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcGF0aF9sZW4gPSBwYXJlbnRfbGVuICsgaW5vZGVfbGVuICsgc3RyLT5sZW4gKyAzOworCisJdCA9IG5ldGZzX3RyYW5zX2FsbG9jKHBzYiwgcGF0aF9sZW4sIDAsIDApOworCWlmICghdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQgPSBuZXRmc190cmFuc19jdXJyZW50KHQpOworCXBhdGggPSAoY2hhciAqKShjbWQgKyAxKTsKKworCWVyciA9IHBvaG1lbGZzX2NvbnN0cnVjdF9wYXRoX3N0cmluZyhwaSwgcGF0aCwgaW5vZGVfbGVuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0X3VubG9jazsKKworCWNtZC0+ZXh0ID0gZXJyOworCisJcGF0aCArPSBlcnI7CisJdG90YWxfbGVuICs9IGVycjsKKwlwYXRoX2xlbiAtPSBlcnI7CisKKwkqcGF0aCA9ICd8JzsKKwlwYXRoKys7CisJdG90YWxfbGVuKys7CisJcGF0aF9sZW4tLTsKKworCWVyciA9IHBvaG1lbGZzX2NvbnN0cnVjdF9wYXRoX3N0cmluZyhwYXJlbnQsIHBhdGgsIHBhcmVudF9sZW4pOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXRfdW5sb2NrOworCisJLyoKKwkgKiBEbyBub3QgcGxhY2UgYSBudWxsLWJ5dGUgYmVmb3JlIHRoZSBmaW5hbCBzbGFzaCBhbmQgdGhlIG5hbWUuCisJICovCisJZXJyLS07CisJcGF0aCArPSBlcnI7CisJdG90YWxfbGVuICs9IGVycjsKKwlwYXRoX2xlbiAtPSBlcnI7CisKKwllcnIgPSBzbnByaW50ZihwYXRoLCBwYXRoX2xlbiAtIDEsICIvJXMiLCBzdHItPm5hbWUpOworCisJdG90YWxfbGVuICs9IGVyciArIDE7IC8qIDAgc3ltYm9sICovCisJcGF0aF9sZW4gLT0gZXJyICsgMTsKKworCWNtZC0+Y21kID0gTkVURlNfUkVOQU1FOworCWNtZC0+aWQgPSBwaS0+aW5vOworCWNtZC0+c3RhcnQgPSBwYXJlbnQtPmlubzsKKwljbWQtPnNpemUgPSB0b3RhbF9sZW47CisKKwluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCisJbmV0ZnNfdHJhbnNfdXBkYXRlKGNtZCwgdCwgdG90YWxfbGVuKTsKKworCXJldHVybiBuZXRmc190cmFuc19maW5pc2godCwgcHNiKTsKKworZXJyX291dF91bmxvY2s6CisJbmV0ZnNfdHJhbnNfZnJlZSh0KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisJCQlzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpvbGRfcGFyZW50LCAqcGksICpuZXdfcGFyZW50OworCXN0cnVjdCBxc3RyIHN0ciA9IG5ld19kZW50cnktPmRfbmFtZTsKKwlzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqbjsKKwl1bnNpZ25lZCBpbnQgb2xkX2hhc2g7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwlwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCW9sZF9wYXJlbnQgPSBQT0hNRUxGU19JKG9sZF9kaXIpOworCisJaWYgKG5ld19kaXIpIHsKKwkJbmV3X2Rpci0+aV9zYi0+c19vcC0+d3JpdGVfaW5vZGUobmV3X2RpciwgMCk7CisJfQorCisJb2xkX2hhc2ggPSBqaGFzaChvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwgb2xkX2RlbnRyeS0+ZF9uYW1lLmxlbiwgMCk7CisJc3RyLmhhc2ggPSBqaGFzaChuZXdfZGVudHJ5LT5kX25hbWUubmFtZSwgbmV3X2RlbnRyeS0+ZF9uYW1lLmxlbiwgMCk7CisKKwlzdHIubGVuID0gbmV3X2RlbnRyeS0+ZF9uYW1lLmxlbjsKKwlzdHIubmFtZSA9IG5ld19kZW50cnktPmRfbmFtZS5uYW1lOworCXN0ci5oYXNoID0gamhhc2gobmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUsIG5ld19kZW50cnktPmRfbmFtZS5sZW4sIDApOworCisJaWYgKG5ld19kaXIpIHsKKwkJbmV3X3BhcmVudCA9IFBPSE1FTEZTX0kobmV3X2Rpcik7CisJCWVyciA9IC1FTk9URU1QVFk7CisKKwkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYKKwkJCQluZXdfcGFyZW50LT50b3RhbF9sZW4gPD0gMykKKwkJCWdvdG8gZXJyX291dF9leGl0OworCX0gZWxzZSB7CisJCW5ld19wYXJlbnQgPSBvbGRfcGFyZW50OworCX0KKworCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIHBhcmVudDogJWxsdSwgbmFtZTogJyVzJyAtPiBwYXJlbnQ6ICVsbHUsIG5hbWU6ICclcycsIGlfc2l6ZTogJWxsdS5cbiIsCisJCQlfX2Z1bmNfXywgcGktPmlubywgb2xkX3BhcmVudC0+aW5vLCBvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwKKwkJCW5ld19wYXJlbnQtPmlubywgbmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUsIGlub2RlLT5pX3NpemUpOworCisJaWYgKHRlc3RfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZwaS0+c3RhdGUpICYmCisJCQl0ZXN0X2JpdChORVRGU19JTk9ERV9PV05FRCwgJnBpLT5zdGF0ZSkpIHsKKwkJZXJyID0gcG9obWVsZnNfc2VuZF9yZW5hbWUocGksIG5ld19wYXJlbnQsICZzdHIpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJbiA9IHBvaG1lbGZzX25hbWVfYWxsb2Moc3RyLmxlbiArIDEpOworCWlmICghbikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwltdXRleF9sb2NrKCZuZXdfcGFyZW50LT5vZmZzZXRfbG9jayk7CisJbi0+aW5vID0gcGktPmlubzsKKwluLT5tb2RlID0gaW5vZGUtPmlfbW9kZTsKKwluLT5sZW4gPSBzdHIubGVuOworCW4tPmhhc2ggPSBzdHIuaGFzaDsKKwlzcHJpbnRmKG4tPmRhdGEsICIlcyIsIHN0ci5uYW1lKTsKKworCWVyciA9IHBvaG1lbGZzX2luc2VydF9uYW1lKG5ld19wYXJlbnQsIG4pOworCW11dGV4X3VubG9jaygmbmV3X3BhcmVudC0+b2Zmc2V0X2xvY2spOworCisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwltdXRleF9sb2NrKCZvbGRfcGFyZW50LT5vZmZzZXRfbG9jayk7CisJbiA9IHBvaG1lbGZzX3NlYXJjaF9oYXNoKG9sZF9wYXJlbnQsIG9sZF9oYXNoKTsKKwlpZiAobikKKwkJcG9obWVsZnNfbmFtZV9kZWwob2xkX3BhcmVudCwgbik7CisJbXV0ZXhfdW5sb2NrKCZvbGRfcGFyZW50LT5vZmZzZXRfbG9jayk7CisKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwltYXJrX2lub2RlX2RpcnR5KCZuZXdfcGFyZW50LT52ZnNfaW5vZGUpOworCisJV0FSTl9PTl9PTkNFKGxpc3RfZW1wdHkoJmlub2RlLT5pX2RlbnRyeSkpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKworCWNsZWFyX2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmcGktPnN0YXRlKTsKKworCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBQT0hNRUxGUyBkaXJlY3RvcnkgaW5vZGUgb3BlcmF0aW9ucy4KKyAqLworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcG9obWVsZnNfZGlyX2lub2RlX29wcyA9IHsKKwkubGluawkJPSBwb2htZWxmc19saW5rLAorCS5zeW1saW5rCT0gcG9obWVsZnNfc3ltbGluaywKKwkudW5saW5rCQk9IHBvaG1lbGZzX3VubGluaywKKwkubWtkaXIJCT0gcG9obWVsZnNfbWtkaXIsCisJLnJtZGlyCQk9IHBvaG1lbGZzX3JtZGlyLAorCS5jcmVhdGUJCT0gcG9obWVsZnNfY3JlYXRlLAorCS5sb29rdXAgCT0gcG9obWVsZnNfbG9va3VwLAorCS5zZXRhdHRyCT0gcG9obWVsZnNfc2V0YXR0ciwKKwkucmVuYW1lCQk9IHBvaG1lbGZzX3JlbmFtZSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZjE2NTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYwpAQCAtMCwwICsxLDE5NzYgQEAKKy8qCisgKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXRmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CisKKyNpbmNsdWRlICJuZXRmcy5oIgorCisjZGVmaW5lIFBPSE1FTEZTX01BR0lDX05VTQkweDUwNGY0ODJlCisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcG9obWVsZnNfaW5vZGVfY2FjaGU7CisKKy8qCisgKiBSZW1vdmVzIGlub2RlIGZyb20gYWxsIHRyZWVzLCBkcm9wcyBsb2NhbCBuYW1lIGNhY2hlIGFuZCByZW1vdmVzIGFsbCBxdWV1ZWQKKyAqIHJlcXVlc3RzIGZvciBvYmplY3QgcmVtb3ZhbC4KKyAqLwordm9pZCBwb2htZWxmc19pbm9kZV9kZWxfaW5vZGUoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkpCit7CisJbXV0ZXhfbG9jaygmcGktPm9mZnNldF9sb2NrKTsKKwlwb2htZWxmc19mcmVlX25hbWVzKHBpKTsKKwltdXRleF91bmxvY2soJnBpLT5vZmZzZXRfbG9jayk7CisKKwlkcHJpbnRrKCIlczogZGVsZXRlZCBzdHVmZiBpbiBpbm86ICVsbHUuXG4iLCBfX2Z1bmNfXywgcGktPmlubyk7Cit9CisKKy8qCisgKiBTeW5jIGlub2RlIHRvIHNlcnZlci4KKyAqIFJldHVybnMgemVybyBpbiBzdWNjZXNzIGFuZCBuZWdhdGl2ZSBlcnJvciB2YWx1ZSBvdGhlcndpc2UuCisgKiBJdCB3aWxsIGdhdGhlciBwYXRoIHRvIHJvb3QgZGlyZWN0b3J5IGludG8gc3RydWN0dXJlcyBjb250YWluaW5nCisgKiBjcmVhdGlvbiBtb2RlLCBwZXJtaXNzaW9ucyBhbmQgbmFtZXMsIHNvIHRoYXQgdGhlIHdob2xlIHBhdGgKKyAqIHRvIGdpdmVuIGlub2RlIGNvdWxkIGJlIGNyZWF0ZWQgdXNpbmcgb25seSBzaW5nbGUgbmV0d29yayBjb21tYW5kLgorICovCitpbnQgcG9obWVsZnNfd3JpdGVfaW5vZGVfY3JlYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZXRmc190cmFucyAqdHJhbnMpCit7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCWludCBlcnIgPSAtRU5PTUVNLCBzaXplOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZDsKKwl2b2lkICpkYXRhOworCWludCBjdXJfbGVuID0gbmV0ZnNfdHJhbnNfY3VyX2xlbih0cmFucyk7CisKKwlpZiAodW5saWtlbHkoY3VyX2xlbiA8IDApKQorCQlyZXR1cm4gLUVUT09TTUFMTDsKKworCWNtZCA9IG5ldGZzX3RyYW5zX2N1cnJlbnQodHJhbnMpOworCWN1cl9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpOworCisJZGF0YSA9ICh2b2lkICopKGNtZCArIDEpOworCisJZXJyID0gcG9obWVsZnNfY29uc3RydWN0X3BhdGhfc3RyaW5nKHBpLCBkYXRhLCBjdXJfbGVuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlzaXplID0gZXJyOworCisJY21kLT5zdGFydCA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwljbWQtPmNtZCA9IE5FVEZTX0NSRUFURTsKKwljbWQtPnNpemUgPSBzaXplOworCWNtZC0+aWQgPSBwaS0+aW5vOworCWNtZC0+ZXh0ID0gaW5vZGUtPmlfbW9kZTsKKworCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisKKwluZXRmc190cmFuc191cGRhdGUoY21kLCB0cmFucywgc2l6ZSk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXByaW50aygiJXM6IGNvbXBsZXRlZCBpbm86ICVsbHUsIGVycjogJWQuXG4iLCBfX2Z1bmNfXywgcGktPmlubywgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3dyaXRlX3RyYW5zX2NvbXBsZXRlKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBwYWdlX251bSwKKwkJdm9pZCAqcHJpdmF0ZSwgaW50IGVycikKK3sKKwl1bnNpZ25lZCBpOworCisJZHByaW50aygiJXM6IHBhZ2VzOiAlbHUtJWx1LCBwYWdlX251bTogJXUsIGVycjogJWQuXG4iLAorCQkJX19mdW5jX18sIHBhZ2VzWzBdLT5pbmRleCwgcGFnZXNbcGFnZV9udW0tMV0tPmluZGV4LAorCQkJcGFnZV9udW0sIGVycik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFnZV9udW07IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBhZ2VzW2ldOworCisJCWlmICghcGFnZSkKKwkJCWNvbnRpbnVlOworCisJCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKworCQlpZiAoZXJyIDwgMCkgeworCQkJU2V0UGFnZUVycm9yKHBhZ2UpOworCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisJCX0KKworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCisJCS8qIGRwcmludGsoIiVzOiAlM3UvJXU6IHBhZ2U6ICVwLlxuIiwgX19mdW5jX18sIGksIHBhZ2VfbnVtLCBwYWdlKTsgKi8KKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19pbm9kZV9oYXNfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlyZXQgPSByYWRpeF90cmVlX2dhbmdfbG9va3VwX3RhZygmbWFwcGluZy0+cGFnZV90cmVlLAorCQkJCSh2b2lkICoqKSZwYWdlLCBpbmRleCwgMSwgUEFHRUNBQ0hFX1RBR19ESVJUWSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwb2htZWxmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9IG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87CisJaW50IGVyciA9IDA7CisJaW50IGRvbmUgPSAwOworCWludCBucl9wYWdlczsKKwlwZ29mZl90IGluZGV4OworCXBnb2ZmX3QgZW5kOwkJLyogSW5jbHVzaXZlICovCisJaW50IHNjYW5uZWQgPSAwOworCWludCByYW5nZV93aG9sZSA9IDA7CisKKwlpZiAod2JjLT5ub25ibG9ja2luZyAmJiBiZGlfd3JpdGVfY29uZ2VzdGVkKGJkaSkpIHsKKwkJd2JjLT5lbmNvdW50ZXJlZF9jb25nZXN0aW9uID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHdiYy0+cmFuZ2VfY3ljbGljKSB7CisJCWluZGV4ID0gbWFwcGluZy0+d3JpdGViYWNrX2luZGV4OyAvKiBTdGFydCBmcm9tIHByZXYgb2Zmc2V0ICovCisJCWVuZCA9IC0xOworCX0gZWxzZSB7CisJCWluZGV4ID0gd2JjLT5yYW5nZV9zdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZUOworCQllbmQgPSB3YmMtPnJhbmdlX2VuZCA+PiBQQUdFX0NBQ0hFX1NISUZUOworCQlpZiAod2JjLT5yYW5nZV9zdGFydCA9PSAwICYmIHdiYy0+cmFuZ2VfZW5kID09IExMT05HX01BWCkKKwkJCXJhbmdlX3dob2xlID0gMTsKKwkJc2Nhbm5lZCA9IDE7CisJfQorcmV0cnk6CisJd2hpbGUgKCFkb25lICYmIChpbmRleCA8PSBlbmQpKSB7CisJCXVuc2lnbmVkIGludCBpID0gbWluKGVuZCAtIGluZGV4LCAocGdvZmZfdClwc2ItPnRyYW5zX21heF9wYWdlcyk7CisJCWludCBwYXRoX2xlbjsKKwkJc3RydWN0IG5ldGZzX3RyYW5zICp0cmFuczsKKworCQllcnIgPSBwb2htZWxmc19pbm9kZV9oYXNfZGlydHlfcGFnZXMobWFwcGluZywgaW5kZXgpOworCQlpZiAoIWVycikKKwkJCWJyZWFrOworCisJCWVyciA9IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHBpKTsKKwkJaWYgKGVyciA8IDApCisJCQlicmVhazsKKworCQlwYXRoX2xlbiA9IGVycjsKKworCQlpZiAocGF0aF9sZW4gPD0gMikgeworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWJyZWFrOworCQl9CisKKwkJdHJhbnMgPSBuZXRmc190cmFuc19hbGxvYyhwc2IsIHBhdGhfbGVuLCAwLCBpKTsKKwkJaWYgKCF0cmFucykgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisJCXRyYW5zLT5jb21wbGV0ZSA9ICZwb2htZWxmc193cml0ZV90cmFuc19jb21wbGV0ZTsKKworCQl0cmFucy0+cGFnZV9udW0gPSBucl9wYWdlcyA9IGZpbmRfZ2V0X3BhZ2VzX3RhZyhtYXBwaW5nLCAmaW5kZXgsCisJCQkJUEFHRUNBQ0hFX1RBR19ESVJUWSwgdHJhbnMtPnBhZ2VfbnVtLAorCQkJCXRyYW5zLT5wYWdlcyk7CisKKwkJZHByaW50aygiJXM6IHQ6ICVwLCBucl9wYWdlczogJXUsIGVuZDogJWx1LCBpbmRleDogJWx1LCBtYXg6ICV1LlxuIiwKKwkJCQlfX2Z1bmNfXywgdHJhbnMsIG5yX3BhZ2VzLCBlbmQsIGluZGV4LCB0cmFucy0+cGFnZV9udW0pOworCisJCWlmICghbnJfcGFnZXMpCisJCQlnb3RvIGVycl9vdXRfcmVzZXQ7CisKKwkJZXJyID0gcG9obWVsZnNfd3JpdGVfaW5vZGVfY3JlYXRlKGlub2RlLCB0cmFucyk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfcmVzZXQ7CisKKwkJZXJyID0gMDsKKwkJc2Nhbm5lZCA9IDE7CisKKwkJZm9yIChpID0gMDsgaSA8IHRyYW5zLT5wYWdlX251bTsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHRyYW5zLT5wYWdlc1tpXTsKKworCQkJbG9ja19wYWdlKHBhZ2UpOworCisJCQlpZiAodW5saWtlbHkocGFnZS0+bWFwcGluZyAhPSBtYXBwaW5nKSkKKwkJCQlnb3RvIG91dF9jb250aW51ZTsKKworCQkJaWYgKCF3YmMtPnJhbmdlX2N5Y2xpYyAmJiBwYWdlLT5pbmRleCA+IGVuZCkgeworCQkJCWRvbmUgPSAxOworCQkJCWdvdG8gb3V0X2NvbnRpbnVlOworCQkJfQorCisJCQlpZiAod2JjLT5zeW5jX21vZGUgIT0gV0JfU1lOQ19OT05FKQorCQkJCXdhaXRfb25fcGFnZV93cml0ZWJhY2socGFnZSk7CisKKwkJCWlmIChQYWdlV3JpdGViYWNrKHBhZ2UpIHx8CisJCQkgICAgIWNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpKSB7CisJCQkJZHByaW50aygiJXM6IG5vdCBjbGVhciBmb3IgaW8gcGFnZTogJXAsIHdyaXRlYmFjazogJWQuXG4iLAorCQkJCQkJX19mdW5jX18sIHBhZ2UsIFBhZ2VXcml0ZWJhY2socGFnZSkpOworCQkJCWdvdG8gb3V0X2NvbnRpbnVlOworCQkJfQorCisJCQlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CisKKwkJCXRyYW5zLT5hdHRhY2hlZF9zaXplICs9IHBhZ2VfcHJpdmF0ZShwYWdlKTsKKwkJCXRyYW5zLT5hdHRhY2hlZF9wYWdlcysrOworI2lmIDAKKwkJCWRwcmludGsoIiVzOiAldS8ldSBhZGRlZCB0cmFuczogJXAsIGdlbjogJXUsIHBhZ2U6ICVwLCBbSGlnaDogJWRdLCBzaXplOiAlbHUsIGlkeDogJWx1LlxuIiwKKwkJCQkJX19mdW5jX18sIGksIHRyYW5zLT5wYWdlX251bSwgdHJhbnMsIHRyYW5zLT5nZW4sIHBhZ2UsCisJCQkJCSEhUGFnZUhpZ2hNZW0ocGFnZSksIHBhZ2VfcHJpdmF0ZShwYWdlKSwgcGFnZS0+aW5kZXgpOworI2VuZGlmCisJCQl3YmMtPm5yX3RvX3dyaXRlLS07CisKKwkJCWlmICh3YmMtPm5yX3RvX3dyaXRlIDw9IDApCisJCQkJZG9uZSA9IDE7CisJCQlpZiAod2JjLT5ub25ibG9ja2luZyAmJiBiZGlfd3JpdGVfY29uZ2VzdGVkKGJkaSkpIHsKKwkJCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOworCQkJCWRvbmUgPSAxOworCQkJfQorCisJCQljb250aW51ZTsKK291dF9jb250aW51ZToKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJdHJhbnMtPnBhZ2VzW2ldID0gTlVMTDsKKwkJfQorCisJCWVyciA9IG5ldGZzX3RyYW5zX2ZpbmlzaCh0cmFucywgcHNiKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCisJCWNvbnRpbnVlOworCitlcnJfb3V0X3Jlc2V0OgorCQl0cmFucy0+cmVzdWx0ID0gZXJyOworCQluZXRmc190cmFuc19yZXNldCh0cmFucyk7CisJCW5ldGZzX3RyYW5zX3B1dCh0cmFucyk7CisJCWJyZWFrOworCX0KKworCWlmICghc2Nhbm5lZCAmJiAhZG9uZSkgeworCQkvKgorCQkgKiBXZSBoaXQgdGhlIGxhc3QgcGFnZSBhbmQgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGJlIGRvbmU6IHdyYXAKKwkJICogYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbGUKKwkJICovCisJCXNjYW5uZWQgPSAxOworCQlpbmRleCA9IDA7CisJCWdvdG8gcmV0cnk7CisJfQorCisJaWYgKHdiYy0+cmFuZ2VfY3ljbGljIHx8IChyYW5nZV93aG9sZSAmJiB3YmMtPm5yX3RvX3dyaXRlID4gMCkpCisJCW1hcHBpbmctPndyaXRlYmFja19pbmRleCA9IGluZGV4OworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIElub2RlIHdyaXRlYmFjayBjcmVhdGlvbiBjb21wbGV0aW9uIGNhbGxiYWNrLgorICogT25seSBpbnZva2VkIGZvciBqdXN0IGNyZWF0ZWQgaW5vZGVzLCB3aGljaCBkbyBub3QgaGF2ZSBwYWdlcyBhdHRhY2hlZCwKKyAqIGxpa2UgZGlycyBhbmQgZW1wdHkgZmlsZXMuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfd3JpdGVfaW5vZGVfY29tcGxldGUoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBhZ2VfbnVtLAorCQl2b2lkICpwcml2YXRlLCBpbnQgZXJyKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwcml2YXRlOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKworCWlmIChpbm9kZSkgeworCQlpZiAoZXJyKSB7CisJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwkJCWNsZWFyX2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmcGktPnN0YXRlKTsKKwkJfSBlbHNlIHsKKwkJCXNldF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJnBpLT5zdGF0ZSk7CisJCX0KKworCQlwb2htZWxmc19wdXRfaW5vZGUocGkpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2ludCBwb2htZWxmc193cml0ZV9jcmVhdGVfaW5vZGUoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSkKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJc3RydWN0IGlub2RlICppbm9kZSA9ICZwaS0+dmZzX2lub2RlOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpOworCWludCBlcnI7CisKKwlpZiAodGVzdF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJnBpLT5zdGF0ZSkpCisJCXJldHVybiAwOworCisJZHByaW50aygiJXM6IHN0YXJ0ZWQgaW5vOiAlbGx1LlxuIiwgX19mdW5jX18sIHBpLT5pbm8pOworCisJZXJyID0gcG9obWVsZnNfcGF0aF9sZW5ndGgocGkpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXQgPSBuZXRmc190cmFuc19hbGxvYyhwc2IsIGVyciArIDEsIDAsIDApOworCWlmICghdCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfcHV0OworCX0KKwl0LT5jb21wbGV0ZSA9IHBvaG1lbGZzX3dyaXRlX2lub2RlX2NvbXBsZXRlOworCXQtPnByaXZhdGUgPSBpZ3JhYihpbm9kZSk7CisJaWYgKCF0LT5wcml2YXRlKSB7CisJCWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX291dF9wdXQ7CisJfQorCisJZXJyID0gcG9obWVsZnNfd3JpdGVfaW5vZGVfY3JlYXRlKGlub2RlLCB0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcHV0OworCisJbmV0ZnNfdHJhbnNfZmluaXNoKHQsIFBPSE1FTEZTX1NCKGlub2RlLT5pX3NiKSk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9wdXQ6CisJdC0+cmVzdWx0ID0gZXJyOworCW5ldGZzX3RyYW5zX3B1dCh0KTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU3luYyBhbGwgbm90LXlldC1jcmVhdGVkIGNoaWxkcmVuIGluIGdpdmVuIGRpcmVjdG9yeSB0byB0aGUgc2VydmVyLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3dyaXRlX2lub2RlX2NyZWF0ZV9jaGlsZHJlbihzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50ID0gUE9ITUVMRlNfSShpbm9kZSk7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBwb2htZWxmc19uYW1lICpuOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZwYXJlbnQtPnN5bmNfY3JlYXRlX2xpc3QpKSB7CisJCW4gPSBOVUxMOworCQltdXRleF9sb2NrKCZwYXJlbnQtPm9mZnNldF9sb2NrKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZwYXJlbnQtPnN5bmNfY3JlYXRlX2xpc3QpKSB7CisJCQluID0gbGlzdF9maXJzdF9lbnRyeSgmcGFyZW50LT5zeW5jX2NyZWF0ZV9saXN0LAorCQkJCXN0cnVjdCBwb2htZWxmc19uYW1lLCBzeW5jX2NyZWF0ZV9lbnRyeSk7CisJCQlsaXN0X2RlbF9pbml0KCZuLT5zeW5jX2NyZWF0ZV9lbnRyeSk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZwYXJlbnQtPm9mZnNldF9sb2NrKTsKKworCQlpZiAoIW4pCisJCQlicmVhazsKKworCQlpbm9kZSA9IGlsb29rdXAoc2IsIG4tPmlubyk7CisKKwkJZHByaW50aygiJXM6IHBhcmVudDogJWxsdSwgaW5vOiAlbGx1LCBpbm9kZTogJXAuXG4iLAorCQkJCV9fZnVuY19fLCBwYXJlbnQtPmlubywgbi0+aW5vLCBpbm9kZSk7CisKKwkJaWYgKGlub2RlICYmIChpbm9kZS0+aV9zdGF0ZSAmIElfRElSVFkpKSB7CisJCQlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJCQlwb2htZWxmc193cml0ZV9jcmVhdGVfaW5vZGUocGkpOworCQkJLy9wb2htZWxmc19tZXRhX2NvbW1hbmQocGksIE5FVEZTX0lOT0RFX0lORk8sIDAsIE5VTEwsIE5VTEwsIDApOworCQkJaXB1dChpbm9kZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlbW92ZXMgZ2l2ZW4gY2hpbGQgZnJvbSBnaXZlbiBpbm9kZSBvbiBzZXJ2ZXIuCisgKi8KK2ludCBwb2htZWxmc19yZW1vdmVfY2hpbGQoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgc3RydWN0IHBvaG1lbGZzX25hbWUgKm4pCit7CisJcmV0dXJuIHBvaG1lbGZzX21ldGFfY29tbWFuZF9kYXRhKHBpLCBwaS0+aW5vLCBORVRGU19SRU1PVkUsIE5VTEwsIDAsIE5VTEwsIE5VTEwsIDApOworfQorCisvKgorICogV3JpdGViYWNrIGZvciBnaXZlbiBpbm9kZS4KKyAqLworc3RhdGljIGludCBwb2htZWxmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgc3luYykKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisKKwlwb2htZWxmc193cml0ZV9jcmVhdGVfaW5vZGUocGkpOworCXBvaG1lbGZzX3dyaXRlX2lub2RlX2NyZWF0ZV9jaGlsZHJlbihpbm9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEl0IGlzIG5vdCBleHBvcnRlZCwgc29ycnkuLi4KKyAqLworc3RhdGljIGlubGluZSB3YWl0X3F1ZXVlX2hlYWRfdCAqcGFnZV93YWl0cXVldWUoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUgPSBwYWdlX3pvbmUocGFnZSk7CisKKwlyZXR1cm4gJnpvbmUtPndhaXRfdGFibGVbaGFzaF9wdHIocGFnZSwgem9uZS0+d2FpdF90YWJsZV9iaXRzKV07Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfd2FpdF9vbl9wYWdlX2xvY2tlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHBhZ2UtPm1hcHBpbmctPmhvc3QtPmlfc2IpOworCWxvbmcgcmV0ID0gcHNiLT53YWl0X29uX3BhZ2VfdGltZW91dDsKKwlERUZJTkVfV0FJVF9CSVQod2FpdCwgJnBhZ2UtPmZsYWdzLCBQR19sb2NrZWQpOworCWludCBlcnIgPSAwOworCisJaWYgKCFQYWdlTG9ja2VkKHBhZ2UpKQorCQlyZXR1cm4gMDsKKworCWZvciAoOzspIHsKKwkJcHJlcGFyZV90b193YWl0KHBhZ2Vfd2FpdHF1ZXVlKHBhZ2UpLAorCQkJCSZ3YWl0LndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisKKwkJZHByaW50aygiJXM6IHBhZ2U6ICVwLCBsb2NrZWQ6ICVkLCB1cHRvZGF0ZTogJWQsIGVycm9yOiAlZCwgZmxhZ3M6ICVseC5cbiIsCisJCQkJX19mdW5jX18sIHBhZ2UsIFBhZ2VMb2NrZWQocGFnZSksIFBhZ2VVcHRvZGF0ZShwYWdlKSwKKwkJCQlQYWdlRXJyb3IocGFnZSksIHBhZ2UtPmZsYWdzKTsKKworCQlpZiAoIVBhZ2VMb2NrZWQocGFnZSkpCisJCQlicmVhazsKKworCQlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlyZXQgPSBzY2hlZHVsZV90aW1lb3V0KHJldCk7CisJCQlpZiAoIXJldCkKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQl9CisJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJYnJlYWs7CisJfQorCWZpbmlzaF93YWl0KHBhZ2Vfd2FpdHF1ZXVlKHBhZ2UpLCAmd2FpdC53YWl0KTsKKworCWlmICghcmV0KQorCQllcnIgPSAtRVRJTUVET1VUOworCisKKwlpZiAoIWVycikKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCisJaWYgKGVycikKKwkJcHJpbnRrKCIlczogcGFnZTogJXAsIHVwdG9kYXRlOiAlZCwgbG9ja2VkOiAlZCwgZXJyOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgcGFnZSwgUGFnZVVwdG9kYXRlKHBhZ2UpLCBQYWdlTG9ja2VkKHBhZ2UpLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19yZWFkX3BhZ2VfY29tcGxldGUoc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IHBhZ2VfbnVtLAorCQl2b2lkICpwcml2YXRlLCBpbnQgZXJyKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gcHJpdmF0ZTsKKworCWlmIChQYWdlQ2hlY2tlZChwYWdlKSkKKwkJcmV0dXJuIGVycjsKKworCWlmIChlcnIgPCAwKSB7CisJCWRwcmludGsoIiVzOiBwYWdlOiAlcCwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBwYWdlLCBlcnIpOworCQlTZXRQYWdlRXJyb3IocGFnZSk7CisJfQorCisJdW5sb2NrX3BhZ2UocGFnZSk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUmVhZCBhIHBhZ2UgZnJvbSByZW1vdGUgc2VydmVyLgorICogRnVuY3Rpb24gd2lsbCB3YWl0IHVudGlsIHBhZ2UgaXMgdW5sb2NrZWQuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kOworCWludCBlcnIsIHBhdGhfbGVuOworCXZvaWQgKmRhdGE7CisJdTY0IGlzaXplOworCisJZXJyID0gcG9obWVsZnNfZGF0YV9sb2NrKHBpLCBwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZULAorCQkJUEFHRV9TSVpFLCBQT0hNRUxGU19SRUFEX0xPQ0spOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJaWYgKGlzaXplIDw9IHBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpIHsKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcGF0aF9sZW4gPSBwb2htZWxmc19wYXRoX2xlbmd0aChwaSk7CisJaWYgKHBhdGhfbGVuIDwgMCkgeworCQllcnIgPSBwYXRoX2xlbjsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJdCA9IG5ldGZzX3RyYW5zX2FsbG9jKHBzYiwgcGF0aF9sZW4sIE5FVEZTX1RSQU5TX1NJTkdMRV9EU1QsIDApOworCWlmICghdCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwl0LT5jb21wbGV0ZSA9IHBvaG1lbGZzX3JlYWRfcGFnZV9jb21wbGV0ZTsKKwl0LT5wcml2YXRlID0gcGFnZTsKKworCWNtZCA9IG5ldGZzX3RyYW5zX2N1cnJlbnQodCk7CisJZGF0YSA9ICh2b2lkICopKGNtZCArIDEpOworCisJZXJyID0gcG9obWVsZnNfY29uc3RydWN0X3BhdGhfc3RyaW5nKHBpLCBkYXRhLCBwYXRoX2xlbik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJcGF0aF9sZW4gPSBlcnI7CisKKwljbWQtPmlkID0gcGktPmlubzsKKwljbWQtPnN0YXJ0ID0gcGFnZS0+aW5kZXg7CisJY21kLT5zdGFydCA8PD0gUEFHRV9DQUNIRV9TSElGVDsKKwljbWQtPnNpemUgPSBQQUdFX0NBQ0hFX1NJWkUgKyBwYXRoX2xlbjsKKwljbWQtPmNtZCA9IE5FVEZTX1JFQURfUEFHRTsKKwljbWQtPmV4dCA9IHBhdGhfbGVuOworCisJZHByaW50aygiJXM6IHBhdGg6ICclcycsIHBhZ2U6ICVwLCBpbm86ICVsbHUsIHN0YXJ0OiAlbGx1LCBzaXplOiAlbHUuXG4iLAorCQkJX19mdW5jX18sIChjaGFyICopZGF0YSwgcGFnZSwgcGktPmlubywgY21kLT5zdGFydCwgUEFHRV9DQUNIRV9TSVpFKTsKKworCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisJbmV0ZnNfdHJhbnNfdXBkYXRlKGNtZCwgdCwgcGF0aF9sZW4pOworCisJZXJyID0gbmV0ZnNfdHJhbnNfZmluaXNoKHQsIHBzYik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3JldHVybjsKKworCXJldHVybiBwb2htZWxmc193YWl0X29uX3BhZ2VfbG9ja2VkKHBhZ2UpOworCitlcnJfb3V0X2ZyZWU6CisJdC0+cmVzdWx0ID0gZXJyOworCW5ldGZzX3RyYW5zX3B1dCh0KTsKK2Vycl9vdXRfZXhpdDoKKwlTZXRQYWdlRXJyb3IocGFnZSk7CisJaWYgKFBhZ2VMb2NrZWQocGFnZSkpCisJCXVubG9ja19wYWdlKHBhZ2UpOworZXJyX291dF9yZXR1cm46CisJcHJpbnRrKCIlczogcGFnZTogJXAsIHN0YXJ0OiAlbHUsIHNpemU6ICVsdSwgZXJyOiAlZC5cbiIsCisJCV9fZnVuY19fLCBwYWdlLCBwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZULCBQQUdFX0NBQ0hFX1NJWkUsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogV3JpdGUgYmVnaW4vZW5kIG1hZ2ljLgorICogQWxsb2NhdGVzIGEgcGFnZSBhbmQgd3JpdGVzIGlub2RlIGlmIGl0IHdhcyBub3Qgc3luY2VkIHRvIHNlcnZlciBiZWZvcmUuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAorCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OworCXN0cnVjdCBwYWdlICpwYWdlOworCXBnb2ZmX3QgaW5kZXg7CisJdW5zaWduZWQgc3RhcnQsIGVuZDsKKwlpbnQgZXJyOworCisJKnBhZ2VwID0gTlVMTDsKKworCWluZGV4ID0gcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJc3RhcnQgPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJZW5kID0gc3RhcnQgKyBsZW47CisKKwlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlKG1hcHBpbmcsIGluZGV4KTsKKyNpZiAwCisJZHByaW50aygiJXM6IHBhZ2U6ICVwIHBvczogJWxsdSwgbGVuOiAldSwgaW5kZXg6ICVsdSwgc3RhcnQ6ICV1LCBlbmQ6ICV1LCB1cHRvZGF0ZTogJWQuXG4iLAorCQkJX19mdW5jX18sIHBhZ2UsCXBvcywgbGVuLCBpbmRleCwgc3RhcnQsIGVuZCwgUGFnZVVwdG9kYXRlKHBhZ2UpKTsKKyNlbmRpZgorCWlmICghcGFnZSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwl3aGlsZSAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgeworCQlpZiAoc3RhcnQgJiYgdGVzdF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJlBPSE1FTEZTX0koaW5vZGUpLT5zdGF0ZSkpIHsKKwkJCWVyciA9IHBvaG1lbGZzX3JlYWRwYWdlKGZpbGUsIHBhZ2UpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCQkJbG9ja19wYWdlKHBhZ2UpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAobGVuICE9IFBBR0VfQ0FDSEVfU0laRSkgeworCQkJdm9pZCAqa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisKKwkJCW1lbXNldChrYWRkciArIHN0YXJ0LCAwLCBQQUdFX0NBQ0hFX1NJWkUgLSBzdGFydCk7CisJCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwkJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKKwkJfQorCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJfQorCisJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCBlbmQpOworCisJKnBhZ2VwID0gcGFnZTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCSpwYWdlcCA9IE5VTEw7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3dyaXRlX2VuZChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGNvcGllZCwKKwkJCXN0cnVjdCBwYWdlICpwYWdlLCB2b2lkICpmc2RhdGEpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisKKwlpZiAoY29waWVkICE9IGxlbikgeworCQl1bnNpZ25lZCBmcm9tID0gcG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCQl2b2lkICprYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKworCQltZW1zZXQoa2FkZHIgKyBmcm9tICsgY29waWVkLCAwLCBsZW4gLSBjb3BpZWQpOworCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOworCX0KKworCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKyNpZiAwCisJZHByaW50aygiJXM6IHBhZ2U6ICVwIFtVOiAlZCwgRDogJWQsIEw6ICVkXSwgcG9zOiAlbGx1LCBsZW46ICV1LCBjb3BpZWQ6ICV1LlxuIiwKKwkJCV9fZnVuY19fLCBwYWdlLAorCQkJUGFnZVVwdG9kYXRlKHBhZ2UpLCBQYWdlRGlydHkocGFnZSksIFBhZ2VMb2NrZWQocGFnZSksCisJCQlwb3MsIGxlbiwgY29waWVkKTsKKyNlbmRpZgorCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCisJdW5sb2NrX3BhZ2UocGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCisJaWYgKHBvcyArIGNvcGllZCA+IGlub2RlLT5pX3NpemUpIHsKKwkJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihpbm9kZS0+aV9zYik7CisKKwkJcHNiLT5hdmFpbF9zaXplIC09IHBvcyArIGNvcGllZCAtIGlub2RlLT5pX3NpemU7CisKKwkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MgKyBjb3BpZWQpOworCX0KKworCXJldHVybiBjb3BpZWQ7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVhZHBhZ2VzX3RyYW5zX2NvbXBsZXRlKHN0cnVjdCBwYWdlICoqX19wYWdlcywgdW5zaWduZWQgaW50IHBhZ2VfbnVtLAorCQl2b2lkICpwcml2YXRlLCBpbnQgZXJyKQoreworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBwcml2YXRlOworCXVuc2lnbmVkIGludCBpLCBudW07CisJc3RydWN0IHBhZ2UgKipwYWdlcywgKnBhZ2UgPSAoc3RydWN0IHBhZ2UgKilfX3BhZ2VzOworCWxvZmZfdCBpbmRleCA9IHBhZ2UtPmluZGV4OworCisJcGFnZXMgPSBremFsbG9jKHNpemVvZih2b2lkICopICogcGFnZV9udW0sIEdGUF9OT0lPKTsKKwlpZiAoIXBhZ2VzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW51bSA9IGZpbmRfZ2V0X3BhZ2VzX2NvbnRpZyhwaS0+dmZzX2lub2RlLmlfbWFwcGluZywgaW5kZXgsIHBhZ2VfbnVtLCBwYWdlcyk7CisJaWYgKG51bSA8PSAwKSB7CisJCWVyciA9IG51bTsKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJfQorCisJZm9yIChpPTA7IGk8bnVtOyArK2kpIHsKKwkJcGFnZSA9IHBhZ2VzW2ldOworCisJCWlmIChlcnIpCisJCQlwcmludGsoIiVzOiAldS8ldTogcGFnZTogJXAsIGluZGV4OiAlbHUsIHVwdG9kYXRlOiAlZCwgbG9ja2VkOiAlZCwgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIGksIG51bSwgcGFnZSwgcGFnZS0+aW5kZXgsCisJCQkJUGFnZVVwdG9kYXRlKHBhZ2UpLCBQYWdlTG9ja2VkKHBhZ2UpLCBlcnIpOworCisJCWlmICghUGFnZUNoZWNrZWQocGFnZSkpIHsKKwkJCWlmIChlcnIgPCAwKQorCQkJCVNldFBhZ2VFcnJvcihwYWdlKTsKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQl9CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCX0KKworZXJyX291dF9mcmVlOgorCWtmcmVlKHBhZ2VzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3NlbmRfcmVhZHBhZ2VzKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHN0cnVjdCBwYWdlICpmaXJzdCwgdW5zaWduZWQgaW50IG51bSkKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IocGktPnZmc19pbm9kZS5pX3NiKTsKKwlpbnQgZXJyLCBwYXRoX2xlbjsKKwl2b2lkICpkYXRhOworCisJZXJyID0gcG9obWVsZnNfZGF0YV9sb2NrKHBpLCBmaXJzdC0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVCwKKwkJCW51bSAqIFBBR0VfU0laRSwgUE9ITUVMRlNfUkVBRF9MT0NLKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXBhdGhfbGVuID0gcG9obWVsZnNfcGF0aF9sZW5ndGgocGkpOworCWlmIChwYXRoX2xlbiA8IDApIHsKKwkJZXJyID0gcGF0aF9sZW47CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCXQgPSBuZXRmc190cmFuc19hbGxvYyhwc2IsIHBhdGhfbGVuLCBORVRGU19UUkFOU19TSU5HTEVfRFNULCAwKTsKKwlpZiAoIXQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJY21kID0gbmV0ZnNfdHJhbnNfY3VycmVudCh0KTsKKwlkYXRhID0gKHZvaWQgKikoY21kICsgMSk7CisKKwl0LT5jb21wbGV0ZSA9IHBvaG1lbGZzX3JlYWRwYWdlc190cmFuc19jb21wbGV0ZTsKKwl0LT5wcml2YXRlID0gcGk7CisJdC0+cGFnZV9udW0gPSBudW07CisJdC0+cGFnZXMgPSAoc3RydWN0IHBhZ2UgKiopZmlyc3Q7CisKKwllcnIgPSBwb2htZWxmc19jb25zdHJ1Y3RfcGF0aF9zdHJpbmcocGksIGRhdGEsIHBhdGhfbGVuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0X3B1dDsKKworCXBhdGhfbGVuID0gZXJyOworCisJY21kLT5jbWQgPSBORVRGU19SRUFEX1BBR0VTOworCWNtZC0+c3RhcnQgPSBmaXJzdC0+aW5kZXg7CisJY21kLT5zdGFydCA8PD0gUEFHRV9DQUNIRV9TSElGVDsKKwljbWQtPnNpemUgPSAobnVtIDw8IDggfCBQQUdFX0NBQ0hFX1NISUZUKTsKKwljbWQtPmlkID0gcGktPmlubzsKKwljbWQtPmV4dCA9IHBhdGhfbGVuOworCisJZHByaW50aygiJXM6IHQ6ICVwLCBnZW46ICV1LCBwYXRoOiAnJXMnLCBwYXRoX2xlbjogJXUsICIKKwkJCSJzdGFydDogJWx1LCBudW06ICV1LlxuIiwKKwkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIChjaGFyICopZGF0YSwgcGF0aF9sZW4sCisJCQlmaXJzdC0+aW5kZXgsIG51bSk7CisKKwluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCW5ldGZzX3RyYW5zX3VwZGF0ZShjbWQsIHQsIHBhdGhfbGVuKTsKKworCXJldHVybiBuZXRmc190cmFuc19maW5pc2godCwgcHNiKTsKKworZXJyX291dF9wdXQ6CisJbmV0ZnNfdHJhbnNfZnJlZSh0KTsKK2Vycl9vdXRfZXhpdDoKKwlwb2htZWxmc19yZWFkcGFnZXNfdHJhbnNfY29tcGxldGUoKHN0cnVjdCBwYWdlICoqKWZpcnN0LCBudW0sIHBpLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKyNkZWZpbmUgbGlzdF90b19wYWdlKGhlYWQpIChsaXN0X2VudHJ5KChoZWFkKS0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSkpCisKK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVhZHBhZ2VzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLCB1bnNpZ25lZCBucl9wYWdlcykKK3sKKwl1bnNpZ25lZCBpbnQgcGFnZV9pZHgsIG51bSA9IDA7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMLCAqZmlyc3QgPSBOVUxMOworCisJZm9yIChwYWdlX2lkeCA9IDA7IHBhZ2VfaWR4IDwgbnJfcGFnZXM7IHBhZ2VfaWR4KyspIHsKKwkJcGFnZSA9IGxpc3RfdG9fcGFnZShwYWdlcyk7CisKKwkJcHJlZmV0Y2h3KCZwYWdlLT5mbGFncyk7CisJCWxpc3RfZGVsKCZwYWdlLT5scnUpOworCisJCWlmICghYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1KHBhZ2UsIG1hcHBpbmcsCisJCQkJCXBhZ2UtPmluZGV4LCBHRlBfS0VSTkVMKSkgeworCisJCQlpZiAoIW51bSkgeworCQkJCW51bSA9IDE7CisJCQkJZmlyc3QgPSBwYWdlOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlkcHJpbnRrKCIlczogYWRkZWQgdG8gbHJ1IHBhZ2U6ICVwLCBwYWdlX2luZGV4OiAlbHUsIGZpcnN0X2luZGV4OiAlbHUuXG4iLAorCQkJCQlfX2Z1bmNfXywgcGFnZSwgcGFnZS0+aW5kZXgsIGZpcnN0LT5pbmRleCk7CisKKwkJCWlmICh1bmxpa2VseShmaXJzdC0+aW5kZXggKyBudW0gIT0gcGFnZS0+aW5kZXgpIHx8IChudW0gPiA1MDApKSB7CisJCQkJcG9obWVsZnNfc2VuZF9yZWFkcGFnZXMoUE9ITUVMRlNfSShtYXBwaW5nLT5ob3N0KSwKKwkJCQkJCWZpcnN0LCBudW0pOworCQkJCWZpcnN0ID0gcGFnZTsKKwkJCQludW0gPSAwOworCQkJfQorCisJCQludW0rKzsKKwkJfQorCX0KKwlwb2htZWxmc19zZW5kX3JlYWRwYWdlcyhQT0hNRUxGU19JKG1hcHBpbmctPmhvc3QpLCBmaXJzdCwgbnVtKTsKKworCS8qCisJICogVGhpcyB3aWxsIGJlIHN5bmMgcmVhZCwgc28gd2hlbiBsYXN0IHBhZ2UgaXMgcHJvY2Vzc2VkLAorCSAqIGFsbCBwcmV2aW91cyBhcmUgYWxlcmFkeSB1bmxvY2tlZCBhbmQgcmVhZHkgdG8gYmUgdXNlZC4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNtYWxsIGFkZHJlcyBzcGFjZSBvcGVyYXRpb25zIGZvciBQT0hNRUxGUy4KKyAqLworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBwb2htZWxmc19hb3BzID0geworCS5yZWFkcGFnZQkJPSBwb2htZWxmc19yZWFkcGFnZSwKKwkucmVhZHBhZ2VzCQk9IHBvaG1lbGZzX3JlYWRwYWdlcywKKwkud3JpdGVwYWdlcwkJPSBwb2htZWxmc193cml0ZXBhZ2VzLAorCS53cml0ZV9iZWdpbgkJPSBwb2htZWxmc193cml0ZV9iZWdpbiwKKwkud3JpdGVfZW5kCQk9IHBvaG1lbGZzX3dyaXRlX2VuZCwKKwkuc2V0X3BhZ2VfZGlydHkgCT0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCit9OworCisvKgorICogLT5kZXRyb3lfaW5vZGUoKSBjYWxsYmFjay4gRGVsZXRlcyBpbm9kZSBmcm9tIHRoZSBjYWNoZXMKKyAqICBhbmQgZnJlZXMgcHJpdmF0ZSBkYXRhLgorICovCitzdGF0aWMgdm9pZCBwb2htZWxmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0Ioc2IpOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKworCS8vcG9obWVsZnNfZGF0YV91bmxvY2socGksIDAsIGlub2RlLT5pX3NpemUsIFBPSE1FTEZTX1JFQURfTE9DSyk7CisKKwlwb2htZWxmc19pbm9kZV9kZWxfaW5vZGUocHNiLCBwaSk7CisKKwlkcHJpbnRrKCIlczogcGk6ICVwLCBpbm9kZTogJXAsIGlubzogJWxsdS5cbiIsCisJCV9fZnVuY19fLCBwaSwgJnBpLT52ZnNfaW5vZGUsIHBpLT5pbm8pOworCWttZW1fY2FjaGVfZnJlZShwb2htZWxmc19pbm9kZV9jYWNoZSwgcGkpOworCWF0b21pY19sb25nX2RlYygmcHNiLT50b3RhbF9pbm9kZXMpOworfQorCisvKgorICogLT5hbGxvY19pbm9kZSgpIGNhbGxiYWNrLiBBbGxvY2F0ZXMgaW5vZGUgYW5kIGluaXRpbGl6ZXMgcHJpdmF0ZSBkYXRhLgorICovCitzdGF0aWMgc3RydWN0IGlub2RlICpwb2htZWxmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGk7CisKKwlwaSA9IGttZW1fY2FjaGVfYWxsb2MocG9obWVsZnNfaW5vZGVfY2FjaGUsIEdGUF9OT0lPKTsKKwlpZiAoIXBpKQorCQlyZXR1cm4gTlVMTDsKKworCXBpLT5oYXNoX3Jvb3QgPSBSQl9ST09UOworCW11dGV4X2luaXQoJnBpLT5vZmZzZXRfbG9jayk7CisKKwlJTklUX0xJU1RfSEVBRCgmcGktPnN5bmNfY3JlYXRlX2xpc3QpOworCisJSU5JVF9MSVNUX0hFQUQoJnBpLT5pbm9kZV9lbnRyeSk7CisKKwlwaS0+bG9ja190eXBlID0gMDsKKwlwaS0+c3RhdGUgPSAwOworCXBpLT50b3RhbF9sZW4gPSAwOworCXBpLT5kcm9wX2NvdW50ID0gMDsKKworCWRwcmludGsoIiVzOiBwaTogJXAsIGlub2RlOiAlcC5cbiIsIF9fZnVuY19fLCBwaSwgJnBpLT52ZnNfaW5vZGUpOworCisJYXRvbWljX2xvbmdfaW5jKCZQT0hNRUxGU19TQihzYiktPnRvdGFsX2lub2Rlcyk7CisKKwlyZXR1cm4gJnBpLT52ZnNfaW5vZGU7Cit9CisKKy8qCisgKiBXZSB3YW50IGZzeW5jKCkgdG8gd29yayBvbiBQT0hNRUxGUy4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZGF0YXN5bmMpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0geworCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwsCisJCS5ucl90b193cml0ZSA9IDAsCS8qIHN5c19mc3luYyBkaWQgdGhpcyAqLworCX07CisKKwlyZXR1cm4gc3luY19pbm9kZShpbm9kZSwgJndiYyk7Cit9CisKK3NzaXplX3QgcG9obWVsZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJc3RydWN0IGlvdmVjIGlvdiA9IHsgLmlvdl9iYXNlID0gKHZvaWQgX191c2VyICopYnVmLCAuaW92X2xlbiA9IGxlbiB9OworCXN0cnVjdCBraW9jYiBraW9jYjsKKwlzc2l6ZV90IHJldDsKKwlsb2ZmX3QgcG9zID0gKnBwb3M7CisKKwlpbml0X3N5bmNfa2lvY2IoJmtpb2NiLCBmaWxlKTsKKwlraW9jYi5raV9wb3MgPSBwb3M7CisJa2lvY2Iua2lfbGVmdCA9IGxlbjsKKworCWRwcmludGsoIiVzOiBsZW46ICV6dSwgcG9zOiAlbGx1LlxuIiwgX19mdW5jX18sIGxlbiwgcG9zKTsKKworCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlyZXQgPSBwb2htZWxmc19kYXRhX2xvY2socGksIHBvcywgbGVuLCBQT0hNRUxGU19XUklURV9MT0NLKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9vdXRfdW5sb2NrOworCisJcmV0ID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soJmtpb2NiLCAmaW92LCAxLCBwb3MpOworCSpwcG9zID0ga2lvY2Iua2lfcG9zOworCisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJV0FSTl9PTihyZXQgPCAwKTsKKworCWlmIChyZXQgPiAwICYmICgoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7CisJCXNzaXplX3QgZXJyOworCisJCWVyciA9IHN5bmNfcGFnZV9yYW5nZShpbm9kZSwgbWFwcGluZywgcG9zLCByZXQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldCA9IGVycjsKKwkJV0FSTl9PTihyZXQgPCAwKTsKKwl9CisKKwlyZXR1cm4gcmV0OworCitlcnJfb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitjb25zdCBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb2htZWxmc19maWxlX29wcyA9IHsKKwkub3BlbgkJPSBnZW5lcmljX2ZpbGVfb3BlbiwKKwkuZnN5bmMJCT0gcG9obWVsZnNfZnN5bmMsCisKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCisKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAorCisJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCisKKwkuc3BsaWNlX3JlYWQJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCisJLnNwbGljZV93cml0ZQk9IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUsCisKKwkud3JpdGUJCT0gcG9obWVsZnNfd3JpdGUsCisJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCit9OworCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwb2htZWxmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7CisJLnJlYWRsaW5rCT0gZ2VuZXJpY19yZWFkbGluaywKKwkuZm9sbG93X2xpbmsJPSBwYWdlX2ZvbGxvd19saW5rX2xpZ2h0LAorCS5wdXRfbGluawk9IHBhZ2VfcHV0X2xpbmssCit9OworCitpbnQgcG9obWVsZnNfc2V0YXR0cl9yYXcoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRyKQoreworCWludCBlcnI7CisKKwllcnIgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGF0dHIpOworCWlmIChlcnIpIHsKKwkJZHByaW50aygiJXM6IGlubzogJWxsdSwgaW5vZGUgY2hhbmdlcyBhcmUgbm90IGFsbG93ZWQuXG4iLCBfX2Z1bmNfXywgUE9ITUVMRlNfSShpbm9kZSktPmlubyk7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCAmJiBhdHRyLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkKSB8fAorCSAgICAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCAmJiBhdHRyLT5pYV9naWQgIT0gaW5vZGUtPmlfZ2lkKSkgeworCQllcnIgPSB2ZnNfZHFfdHJhbnNmZXIoaW5vZGUsIGF0dHIpID8gLUVEUVVPVCA6IDA7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwllcnIgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIGZhaWxlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZXMuXG4iLCBfX2Z1bmNfXywgUE9ITUVMRlNfSShpbm9kZSktPmlubyk7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIG1vZGU6ICVvIC0+ICVvLCB1aWQ6ICV1IC0+ICV1LCBnaWQ6ICV1IC0+ICV1LCBzaXplOiAlbGx1IC0+ICVsbHUuXG4iLAorCQkJX19mdW5jX18sIFBPSE1FTEZTX0koaW5vZGUpLT5pbm8sIGlub2RlLT5pX21vZGUsIGF0dHItPmlhX21vZGUsCisJCQlpbm9kZS0+aV91aWQsIGF0dHItPmlhX3VpZCwgaW5vZGUtPmlfZ2lkLCBhdHRyLT5pYV9naWQsIGlub2RlLT5pX3NpemUsIGF0dHItPmlhX3NpemUpOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcG9obWVsZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKwlpbnQgZXJyOworCisJZXJyID0gcG9obWVsZnNfZGF0YV9sb2NrKHBpLCAwLCB+MCwgUE9ITUVMRlNfV1JJVEVfTE9DSyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwllcnIgPSBzZWN1cml0eV9pbm9kZV9zZXRhdHRyKGRlbnRyeSwgYXR0cik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwllcnIgPSBwb2htZWxmc19zZXRhdHRyX3Jhdyhpbm9kZSwgYXR0cik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfc2VuZF94YXR0cl9yZXEoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdTY0IGlkLCB1NjQgc3RhcnQsCisJCWNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgYXR0cnNpemUsIGludCBjb21tYW5kKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IocGktPnZmc19pbm9kZS5pX3NiKTsKKwlpbnQgZXJyLCBwYXRoX2xlbiwgbmFtZWxlbiA9IHN0cmxlbihuYW1lKSArIDE7IC8qIDAtYnl0ZSAqLworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQ7CisJdm9pZCAqZGF0YTsKKworCWRwcmludGsoIiVzOiBpZDogJWxsdSwgc3RhcnQ6ICVsbHUsIG5hbWU6ICclcycsIGF0dHJzaXplOiAlenUsIGNtZDogJWQuXG4iLAorCQkJX19mdW5jX18sIGlkLCBzdGFydCwgbmFtZSwgYXR0cnNpemUsIGNvbW1hbmQpOworCisJcGF0aF9sZW4gPSBwb2htZWxmc19wYXRoX2xlbmd0aChwaSk7CisJaWYgKHBhdGhfbGVuIDwgMCkgeworCQllcnIgPSBwYXRoX2xlbjsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJdCA9IG5ldGZzX3RyYW5zX2FsbG9jKHBzYiwgbmFtZWxlbiArIHBhdGhfbGVuICsgYXR0cnNpemUsIDAsIDApOworCWlmICghdCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwljbWQgPSBuZXRmc190cmFuc19jdXJyZW50KHQpOworCWRhdGEgPSBjbWQgKyAxOworCisJcGF0aF9sZW4gPSBwb2htZWxmc19jb25zdHJ1Y3RfcGF0aF9zdHJpbmcocGksIGRhdGEsIHBhdGhfbGVuKTsKKwlpZiAocGF0aF9sZW4gPCAwKSB7CisJCWVyciA9IHBhdGhfbGVuOworCQlnb3RvIGVycl9vdXRfcHV0OworCX0KKwlkYXRhICs9IHBhdGhfbGVuOworCisJLyoKKwkgKiAnbmFtZScgaXMgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgYWxyZWFkeSBhbmQKKwkgKiAnbmFtZWxlbicgaW5jbHVkZXMgMC1ieXRlLgorCSAqLworCW1lbWNweShkYXRhLCBuYW1lLCBuYW1lbGVuKTsKKwlkYXRhICs9IG5hbWVsZW47CisKKwltZW1jcHkoZGF0YSwgdmFsdWUsIGF0dHJzaXplKTsKKworCWNtZC0+Y21kID0gY29tbWFuZDsKKwljbWQtPmlkID0gaWQ7CisJY21kLT5zdGFydCA9IHN0YXJ0OworCWNtZC0+c2l6ZSA9IGF0dHJzaXplICsgbmFtZWxlbiArIHBhdGhfbGVuOworCWNtZC0+ZXh0ID0gcGF0aF9sZW47CisJY21kLT5jc2l6ZSA9IDA7CisJY21kLT5jcGFkID0gMDsKKworCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisJbmV0ZnNfdHJhbnNfdXBkYXRlKGNtZCwgdCwgbmFtZWxlbiArIHBhdGhfbGVuICsgYXR0cnNpemUpOworCisJcmV0dXJuIG5ldGZzX3RyYW5zX2ZpbmlzaCh0LCBwc2IpOworCitlcnJfb3V0X3B1dDoKKwl0LT5yZXN1bHQgPSBlcnI7CisJbmV0ZnNfdHJhbnNfcHV0KHQpOworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfc2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQljb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IGF0dHJzaXplLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihpbm9kZS0+aV9zYik7CisKKwlpZiAoIShwc2ItPnN0YXRlX2ZsYWdzICYgUE9ITUVMRlNfRkxBR1NfWEFUVFIpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gcG9obWVsZnNfc2VuZF94YXR0cl9yZXEocGksIGZsYWdzLCBhdHRyc2l6ZSwgbmFtZSwKKwkJCXZhbHVlLCBhdHRyc2l6ZSwgTkVURlNfWEFUVFJfU0VUKTsKK30KKworc3RhdGljIHNzaXplX3QgcG9obWVsZnNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAorCQl2b2lkICp2YWx1ZSwgc2l6ZV90IGF0dHJzaXplKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm07CisJaW50IGVycjsKKwlsb25nIHRpbWVvdXQgPSBwc2ItPm1jYWNoZV90aW1lb3V0OworCisJaWYgKCEocHNiLT5zdGF0ZV9mbGFncyAmIFBPSE1FTEZTX0ZMQUdTX1hBVFRSKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJbSA9IHBvaG1lbGZzX21jYWNoZV9hbGxvYyhwc2IsIDAsIGF0dHJzaXplLCB2YWx1ZSk7CisJaWYgKElTX0VSUihtKSkKKwkJcmV0dXJuIFBUUl9FUlIobSk7CisKKwlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBuYW1lOiAnJXMnLCBzaXplOiAlenUuXG4iLAorCQkJX19mdW5jX18sIHBpLT5pbm8sIG5hbWUsIGF0dHJzaXplKTsKKworCWVyciA9IHBvaG1lbGZzX3NlbmRfeGF0dHJfcmVxKHBpLCBtLT5nZW4sIGF0dHJzaXplLCBuYW1lLCB2YWx1ZSwgMCwgTkVURlNfWEFUVFJfR0VUKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfcHV0OworCisJZG8geworCQllcnIgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJm0tPmNvbXBsZXRlLCB0aW1lb3V0KTsKKwkJaWYgKGVycikgeworCQkJZXJyID0gbS0+ZXJyOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBUaGlzIGxvb3AgaXMgYSBiaXQgdWdseSwgc2luY2UgaXQgd2FpdHMgdW50aWwgcmVmZXJlbmNlIGNvdW50ZXIKKwkJICogaGl0cyAxIGFuZCB0aGVuIHB1dCBvYmplY3QgaGVyZS4gTWFpbiBnb2FsIGlzIHRvIHByZXZlbnQgcmFjZSB3aXRoCisJCSAqIG5ldHdvcmsgdGhyZWFkLCB3aGVuIGl0IGNhbiBzdGFydCBwcm9jZXNzaW5nIGdpdmVuIHJlcXVlc3QsIGkuZS4KKwkJICogaW5jcmVhc2UgaXRzIHJlZmVyZW5jZSBjb3VudGVyIGJ1dCB5ZXQgbm90IGNvbXBsZXRlIGl0LCB3aGlsZQorCQkgKiB3ZSB3aWxsIGV4aXQgZnJvbSAtPmdldHhhdHRyKCkgd2l0aCB0aW1lb3V0LCBhbmQgYWx0aG91Z2ggcmVxdWVzdAorCQkgKiB3aWxsIG5vdCBiZSBmcmVlZCAoaXRzIHJlZmVyZW5jZSBjb3VudGVyIHdhcyBpbmNyZWFzZWQgYnkgbmV0d29yaworCQkgKiB0aHJlYWQpLCBkYXRhIHBvaW50ZXIgcHJvdmlkZWQgYnkgdXNlciBtYXkgYmUgcmVsZWFzZWQsIHNvIHdlIHdpbGwKKwkJICogb3ZlcndyaXRlIGFscmVhZHkgZnJlZWQgYXJlYSBpbiBuZXR3b3JrIHRocmVhZC4KKwkJICoKKwkJICogTm93IGFmdGVyIHRpbWVvdXQgd2UgcmVtb3ZlIHJlcXVlc3QgZnJvbSB0aGUgY2FjaGUsIHNvIGl0IGNhbiBub3QgYmUKKwkJICogZm91bmQgYnkgbmV0d29yayB0aHJlYWQsIGFuZCB3YWl0IGZvciBpdHMgcmVmZXJlbmNlIGNvdW50ZXIgdG8gaGl0IDEsCisJCSAqIGkuZS4gaWYgbmV0d29yayB0aHJlYWQgYWxyZWFkeSBzdGFydGVkIHRvIHByb2Nlc3MgdGhpcyByZXF1ZXN0LCB3ZSB3YWl0CisJCSAqIGl0IHRvIGZpbmlzaCwgYW5kIHRoZW4gZnJlZSBvYmplY3QgbG9jYWxseS4gSWYgcmVmZXJlbmNlIGNvdW50ZXIgaXMKKwkJICogYWxyZWFkeSAxLCBpLmUuIHJlcXVlc3QgaXMgbm90IHVzZWQgYnkgYW55b25lIGVsc2UsIHdlIGNhbiBmcmVlIGl0IHdpdGhvdXQKKwkJICogcHJvYmxlbS4KKwkJICovCisJCWVyciA9IC1FVElNRURPVVQ7CisJCXRpbWVvdXQgPSBIWjsKKworCQlwb2htZWxmc19tY2FjaGVfcmVtb3ZlX2xvY2tlZChwc2IsIG0pOworCX0gd2hpbGUgKGF0b21pY19yZWFkKCZtLT5yZWZjbnQpICE9IDEpOworCisJcG9obWVsZnNfbWNhY2hlX3B1dChwc2IsIG0pOworCisJZHByaW50aygiJXM6IGlubzogJWxsdSwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCBwaS0+aW5vLCBlcnIpOworCisJcmV0dXJuIGVycjsKKworZXJyX291dF9wdXQ6CisJcG9obWVsZnNfbWNhY2hlX3B1dChwc2IsIG0pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfZ2V0YXR0cihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXQgKnN0YXQpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisJaW50IGVycjsKKworCWVyciA9IHBvaG1lbGZzX2RhdGFfbG9jayhwaSwgMCwgfjAsIFBPSE1FTEZTX1JFQURfTE9DSyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIG1vZGU6ICVvLCB1aWQ6ICV1LCBnaWQ6ICV1LCBzaXplOiAlbGx1LlxuIiwKKwkJCV9fZnVuY19fLCBwaS0+aW5vLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV91aWQsCisJCQlpbm9kZS0+aV9naWQsIGlub2RlLT5pX3NpemUpOworCisJZ2VuZXJpY19maWxsYXR0cihpbm9kZSwgc3RhdCk7CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHBvaG1lbGZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkuc2V0YXR0cgk9IHBvaG1lbGZzX3NldGF0dHIsCisJLmdldGF0dHIJPSBwb2htZWxmc19nZXRhdHRyLAorCS5zZXR4YXR0cgk9IHBvaG1lbGZzX3NldHhhdHRyLAorCS5nZXR4YXR0cgk9IHBvaG1lbGZzX2dldHhhdHRyLAorfTsKKworLyoKKyAqIEZpbGwgaW5vZGUgZGF0YTogbW9kZSwgc2l6ZSwgb3BlcmF0aW9uIGNhbGxiYWNrcyBhbmQgc28gb24uLi4KKyAqLwordm9pZCBwb2htZWxmc19maWxsX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICppbmZvKQoreworCWlub2RlLT5pX21vZGUgPSBpbmZvLT5tb2RlOworCWlub2RlLT5pX25saW5rID0gaW5mby0+bmxpbms7CisJaW5vZGUtPmlfdWlkID0gaW5mby0+dWlkOworCWlub2RlLT5pX2dpZCA9IGluZm8tPmdpZDsKKwlpbm9kZS0+aV9ibG9ja3MgPSBpbmZvLT5ibG9ja3M7CisJaW5vZGUtPmlfcmRldiA9IGluZm8tPnJkZXY7CisJaW5vZGUtPmlfc2l6ZSA9IGluZm8tPnNpemU7CisJaW5vZGUtPmlfdmVyc2lvbiA9IGluZm8tPnZlcnNpb247CisJaW5vZGUtPmlfYmxrYml0cyA9IGZmcyhpbmZvLT5ibG9ja3NpemUpOworCisJZHByaW50aygiJXM6IGlub2RlOiAlcCwgbnVtOiAlbHUvJWxsdSBpbm9kZSBpcyByZWd1bGFyOiAlZCwgZGlyOiAlZCwgbGluazogJWQsIG1vZGU6ICVvLCBzaXplOiAlbGx1LlxuIiwKKwkJCV9fZnVuY19fLCBpbm9kZSwgaW5vZGUtPmlfaW5vLCBpbmZvLT5pbm8sCisJCQlTX0lTUkVHKGlub2RlLT5pX21vZGUpLCBTX0lTRElSKGlub2RlLT5pX21vZGUpLAorCQkJU19JU0xOSyhpbm9kZS0+aV9tb2RlKSwgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfc2l6ZSk7CisKKwlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOworCisJLyoKKwkgKiBpX21hcHBpbmcgaXMgYSBwb2ludGVyIHRvIGlfZGF0YSBkdXJpbmcgaW5vZGUgaW5pdGlhbGl6YXRpb24uCisJICovCisJaW5vZGUtPmlfZGF0YS5hX29wcyA9ICZwb2htZWxmc19hb3BzOworCisJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaW5vZGUtPmlfZm9wID0gJnBvaG1lbGZzX2ZpbGVfb3BzOworCQlpbm9kZS0+aV9vcCA9ICZwb2htZWxmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CisJfSBlbHNlIGlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCWlub2RlLT5pX2ZvcCA9ICZwb2htZWxmc19kaXJfZm9wczsKKwkJaW5vZGUtPmlfb3AgPSAmcG9obWVsZnNfZGlyX2lub2RlX29wczsKKwl9IGVsc2UgaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaW5vZGUtPmlfb3AgPSAmcG9obWVsZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9mb3AgPSAmcG9obWVsZnNfZmlsZV9vcHM7CisJfSBlbHNlIHsKKwkJaW5vZGUtPmlfZm9wID0gJmdlbmVyaWNfcm9fZm9wczsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gUE9ITUVMRlNfSShpbm9kZSk7CisKKwlzcGluX2xvY2soJnBzYi0+aW5vX2xvY2spOworCWxpc3RfZGVsX2luaXQoJnBpLT5pbm9kZV9lbnRyeSk7CisJc3Bpbl91bmxvY2soJnBzYi0+aW5vX2xvY2spOworCisJZ2VuZXJpY19kcm9wX2lub2RlKGlub2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcG9obWVsZnNfZ2V0X2lub2RlX2Zyb21fbGlzdChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwKKwkJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgdW5zaWduZWQgaW50ICpjb3VudCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gTlVMTDsKKworCXNwaW5fbG9jaygmcHNiLT5pbm9fbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisJCXBpID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgcG9obWVsZnNfaW5vZGUsCisJCQkJCWlub2RlX2VudHJ5KTsKKwkJbGlzdF9kZWxfaW5pdCgmcGktPmlub2RlX2VudHJ5KTsKKwkJKmNvdW50ID0gcGktPmRyb3BfY291bnQ7CisJCXBpLT5kcm9wX2NvdW50ID0gMDsKKwl9CisJc3Bpbl91bmxvY2soJnBzYi0+aW5vX2xvY2spOworCisJcmV0dXJuIHBpOworfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19mbHVzaF90cmFuc2FjdGlvbnMoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYzsKKworCW11dGV4X2xvY2soJnBzYi0+c3RhdGVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmcHNiLT5zdGF0ZV9saXN0LCBjb25maWdfZW50cnkpIHsKKwkJcG9obWVsZnNfc3RhdGVfZmx1c2hfdHJhbnNhY3Rpb25zKCZjLT5zdGF0ZSk7CisJfQorCW11dGV4X3VubG9jaygmcHNiLT5zdGF0ZV9sb2NrKTsKK30KKworLyoKKyAqIC0+cHV0X3N1cGVyKCkgY2FsbGJhY2suIEludm9rZWQgYmVmb3JlIHN1cGVyYmxvY2sgaXMgZGVzdHJveWVkLAorICogIHNvIGl0IGhhcyB0byBjbGVhbiBhbGwgcHJpdmF0ZSBkYXRhLgorICovCitzdGF0aWMgdm9pZCBwb2htZWxmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHNiKTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpOworCXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgaW5fZHJvcF9saXN0ID0gMDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqdG1wOworCisJZHByaW50aygiJXMuXG4iLCBfX2Z1bmNfXyk7CisKKwkvKgorCSAqIEtpbGwgcGVuZGluZyB0cmFuc2FjdGlvbnMsIHdoaWNoIGNvdWxkIGFmZmVjdCBpbm9kZXMgaW4tZmxpZ2h0LgorCSAqLworCXBvaG1lbGZzX2ZsdXNoX3RyYW5zYWN0aW9ucyhwc2IpOworCisJd2hpbGUgKChwaSA9IHBvaG1lbGZzX2dldF9pbm9kZV9mcm9tX2xpc3QocHNiLCAmcHNiLT5kcm9wX2xpc3QsICZjb3VudCkpKSB7CisJCWlub2RlID0gJnBpLT52ZnNfaW5vZGU7CisKKwkJZHByaW50aygiJXM6IGlubzogJWxsdSwgcGk6ICVwLCBpbm9kZTogJXAsIGNvdW50OiAldS5cbiIsCisJCQkJX19mdW5jX18sIHBpLT5pbm8sIHBpLCBpbm9kZSwgY291bnQpOworCisJCWlmIChhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpICE9IGNvdW50KSB7CisJCQlwcmludGsoIiVzOiBpbm86ICVsbHUsIHBpOiAlcCwgaW5vZGU6ICVwLCBjb3VudDogJXUsIGlfY291bnQ6ICVkLlxuIiwKKwkJCQkJX19mdW5jX18sIHBpLT5pbm8sIHBpLCBpbm9kZSwgY291bnQsCisJCQkJCWF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkpOworCQkJY291bnQgPSBhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpOworCQkJaW5fZHJvcF9saXN0Kys7CisJCX0KKworCQl3aGlsZSAoY291bnQtLSkKKwkJCWlwdXQoJnBpLT52ZnNfaW5vZGUpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbm9kZSwgdG1wLCAmc2ItPnNfaW5vZGVzLCBpX3NiX2xpc3QpIHsKKwkJcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKKworCQlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBwaTogJXAsIGlub2RlOiAlcCwgaV9jb3VudDogJXUuXG4iLAorCQkJCV9fZnVuY19fLCBwaS0+aW5vLCBwaSwgaW5vZGUsIGF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkpOworCisJCS8qCisJCSAqIFRoZXNlIGFyZSBzcGVjaWFsIGlub2RlcywgdGhleSB3ZXJlIGNyZWF0ZWQgZHVyaW5nCisJCSAqIGRpcmVjdG9yeSByZWFkaW5nIG9yIGxvb2t1cCwgYW5kIHdlcmUgbm90IGJvdW5kIHRvIGRlbnRyeSwKKwkJICogc28gdGhleSBsaXZlIGhlcmUgd2l0aCByZWZlcmVuY2UgY291bnRlciBiZWluZyAxIGFuZCBwcmV2ZW50CisJCSAqIHVtb3VudCBmcm9tIHN1Y2NlZWQgc2luY2UgaXQgYmVsaWV2ZXMgdGhhdCB0aGV5IGFyZSBidXN5LgorCQkgKi8KKwkJY291bnQgPSBhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpOworCQlpZiAoY291bnQpIHsKKwkJCWxpc3RfZGVsX2luaXQoJmlub2RlLT5pX3NiX2xpc3QpOworCQkJd2hpbGUgKGNvdW50LS0pCisJCQkJaXB1dCgmcGktPnZmc19pbm9kZSk7CisJCX0KKwl9CisKKwlwc2ItPnRyYW5zX3NjYW5fdGltZW91dCA9IHBzYi0+ZHJvcF9zY2FuX3RpbWVvdXQgPSAwOworCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJnBzYi0+ZHdvcmspOworCWNhbmNlbF9yZWFybWluZ19kZWxheWVkX3dvcmsoJnBzYi0+ZHJvcF9kd29yayk7CisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKworCWRwcmludGsoIiVzOiBzdG9wcGVkIHdvcmtxdWV1ZXMuXG4iLCBfX2Z1bmNfXyk7CisKKwlwb2htZWxmc19jcnlwdG9fZXhpdChwc2IpOworCXBvaG1lbGZzX3N0YXRlX2V4aXQocHNiKTsKKworCWtmcmVlKHBzYik7CisJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CisKKwlwb2htZWxmc19mdHJhbnNfZXhpdCgpOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKK3sKKwkqZmxhZ3MgfD0gTVNfUkRPTkxZOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHNiKTsKKworCS8qCisJICogVGhlcmUgYXJlIG5vIGZpbGVzeXN0ZW0gc2l6ZSBsaW1pdHMgeWV0LgorCSAqLworCW1lbXNldChidWYsIDAsIHNpemVvZihzdHJ1Y3Qga3N0YXRmcykpOworCisJYnVmLT5mX3R5cGUgPSBQT0hNRUxGU19NQUdJQ19OVU07IC8qICdQT0guJyAqLworCWJ1Zi0+Zl9ic2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKKwlidWYtPmZfZmlsZXMgPSBwc2ItPmlubzsKKwlidWYtPmZfbmFtZWxlbiA9IDI1NTsKKwlidWYtPmZfZmlsZXMgPSBhdG9taWNfbG9uZ19yZWFkKCZwc2ItPnRvdGFsX2lub2Rlcyk7CisJYnVmLT5mX2JmcmVlID0gYnVmLT5mX2JhdmFpbCA9IHBzYi0+YXZhaWxfc2l6ZSA+PiBQQUdFX1NISUZUOworCWJ1Zi0+Zl9ibG9ja3MgPSBwc2ItPnRvdGFsX3NpemUgPj4gUEFHRV9TSElGVDsKKworCWRwcmludGsoIiVzOiB0b3RhbDogJWxsdSwgYXZhaWw6ICVsbHUsIGlub2RlczogJWxsdSwgYnNpemU6ICVsdS5cbiIsCisJCV9fZnVuY19fLCBwc2ItPnRvdGFsX3NpemUsIHBzYi0+YXZhaWxfc2l6ZSwgYnVmLT5mX2ZpbGVzLCBzYi0+c19ibG9ja3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdmZzbW91bnQgKnZmcykKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKHZmcy0+bW50X3NiKTsKKworCXNlcV9wcmludGYoc2VxLCAiLGlkeD0ldSIsIHBzYi0+aWR4KTsKKwlzZXFfcHJpbnRmKHNlcSwgIix0cmFuc19zY2FuX3RpbWVvdXQ9JXUiLCBqaWZmaWVzX3RvX21zZWNzKHBzYi0+dHJhbnNfc2Nhbl90aW1lb3V0KSk7CisJc2VxX3ByaW50ZihzZXEsICIsZHJvcF9zY2FuX3RpbWVvdXQ9JXUiLCBqaWZmaWVzX3RvX21zZWNzKHBzYi0+ZHJvcF9zY2FuX3RpbWVvdXQpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIix3YWl0X29uX3BhZ2VfdGltZW91dD0ldSIsIGppZmZpZXNfdG9fbXNlY3MocHNiLT53YWl0X29uX3BhZ2VfdGltZW91dCkpOworCXNlcV9wcmludGYoc2VxLCAiLHRyYW5zX3JldHJpZXM9JXUiLCBwc2ItPnRyYW5zX3JldHJpZXMpOworCXNlcV9wcmludGYoc2VxLCAiLGNyeXB0b190aHJlYWRfbnVtPSV1IiwgcHNiLT5jcnlwdG9fdGhyZWFkX251bSk7CisJc2VxX3ByaW50ZihzZXEsICIsdHJhbnNfbWF4X3BhZ2VzPSV1IiwgcHNiLT50cmFuc19tYXhfcGFnZXMpOworCXNlcV9wcmludGYoc2VxLCAiLG1jYWNoZV90aW1lb3V0PSV1IiwgamlmZmllc190b19tc2Vjcyhwc2ItPm1jYWNoZV90aW1lb3V0KSk7CisJaWYgKHBzYi0+Y3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQpCisJCXNlcV9wcmludGYoc2VxLCAiLGNyeXB0b19mYWlsX3Vuc3VwcG9ydGVkIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHBvaG1lbGZzX3NiX29wcyA9IHsKKwkuYWxsb2NfaW5vZGUJPSBwb2htZWxmc19hbGxvY19pbm9kZSwKKwkuZGVzdHJveV9pbm9kZQk9IHBvaG1lbGZzX2Rlc3Ryb3lfaW5vZGUsCisJLmRyb3BfaW5vZGUJPSBwb2htZWxmc19kcm9wX2lub2RlLAorCS53cml0ZV9pbm9kZQk9IHBvaG1lbGZzX3dyaXRlX2lub2RlLAorCS5wdXRfc3VwZXIJPSBwb2htZWxmc19wdXRfc3VwZXIsCisJLnJlbW91bnRfZnMJPSBwb2htZWxmc19yZW1vdW50LAorCS5zdGF0ZnMJCT0gcG9obWVsZnNfc3RhdGZzLAorCS5zaG93X29wdGlvbnMJPSBwb2htZWxmc19zaG93X29wdGlvbnMsCit9OworCitlbnVtIHsKKwlwb2htZWxmc19vcHRfaWR4LAorCXBvaG1lbGZzX29wdF90cmFuc19zY2FuX3RpbWVvdXQsCisJcG9obWVsZnNfb3B0X2Ryb3Bfc2Nhbl90aW1lb3V0LAorCXBvaG1lbGZzX29wdF93YWl0X29uX3BhZ2VfdGltZW91dCwKKwlwb2htZWxmc19vcHRfdHJhbnNfcmV0cmllcywKKwlwb2htZWxmc19vcHRfY3J5cHRvX3RocmVhZF9udW0sCisJcG9obWVsZnNfb3B0X3RyYW5zX21heF9wYWdlcywKKwlwb2htZWxmc19vcHRfY3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQsCisJcG9obWVsZnNfb3B0X21jYWNoZV90aW1lb3V0LAorfTsKKworc3RhdGljIHN0cnVjdCBtYXRjaF90b2tlbiBwb2htZWxmc190b2tlbnNbXSA9IHsKKwl7cG9obWVsZnNfb3B0X2lkeCwgImlkeD0ldSJ9LAorCXtwb2htZWxmc19vcHRfdHJhbnNfc2Nhbl90aW1lb3V0LCAidHJhbnNfc2Nhbl90aW1lb3V0PSV1In0sCisJe3BvaG1lbGZzX29wdF9kcm9wX3NjYW5fdGltZW91dCwgImRyb3Bfc2Nhbl90aW1lb3V0PSV1In0sCisJe3BvaG1lbGZzX29wdF93YWl0X29uX3BhZ2VfdGltZW91dCwgIndhaXRfb25fcGFnZV90aW1lb3V0PSV1In0sCisJe3BvaG1lbGZzX29wdF90cmFuc19yZXRyaWVzLCAidHJhbnNfcmV0cmllcz0ldSJ9LAorCXtwb2htZWxmc19vcHRfY3J5cHRvX3RocmVhZF9udW0sICJjcnlwdG9fdGhyZWFkX251bT0ldSJ9LAorCXtwb2htZWxmc19vcHRfdHJhbnNfbWF4X3BhZ2VzLCAidHJhbnNfbWF4X3BhZ2VzPSV1In0sCisJe3BvaG1lbGZzX29wdF9jcnlwdG9fZmFpbF91bnN1cHBvcnRlZCwgImNyeXB0b19mYWlsX3Vuc3VwcG9ydGVkIn0sCisJe3BvaG1lbGZzX29wdF9tY2FjaGVfdGltZW91dCwgIm1jYWNoZV90aW1lb3V0PSV1In0sCit9OworCitzdGF0aWMgaW50IHBvaG1lbGZzX3BhcnNlX29wdGlvbnMoY2hhciAqb3B0aW9ucywgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJY2hhciAqcDsKKwlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CisJaW50IG9wdGlvbiwgZXJyOworCisJaWYgKCFvcHRpb25zKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgocCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgeworCQlpbnQgdG9rZW47CisJCWlmICghKnApCisJCQljb250aW51ZTsKKworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHBvaG1lbGZzX3Rva2VucywgYXJncyk7CisKKwkJZXJyID0gbWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJc3dpdGNoICh0b2tlbikgeworCQkJY2FzZSBwb2htZWxmc19vcHRfaWR4OgorCQkJCXBzYi0+aWR4ID0gb3B0aW9uOworCQkJCWJyZWFrOworCQkJY2FzZSBwb2htZWxmc19vcHRfdHJhbnNfc2Nhbl90aW1lb3V0OgorCQkJCXBzYi0+dHJhbnNfc2Nhbl90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhvcHRpb24pOworCQkJCWJyZWFrOworCQkJY2FzZSBwb2htZWxmc19vcHRfZHJvcF9zY2FuX3RpbWVvdXQ6CisJCQkJcHNiLT5kcm9wX3NjYW5fdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMob3B0aW9uKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgcG9obWVsZnNfb3B0X3dhaXRfb25fcGFnZV90aW1lb3V0OgorCQkJCXBzYi0+d2FpdF9vbl9wYWdlX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKG9wdGlvbik7CisJCQkJYnJlYWs7CisJCQljYXNlIHBvaG1lbGZzX29wdF9tY2FjaGVfdGltZW91dDoKKwkJCQlwc2ItPm1jYWNoZV90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyhvcHRpb24pOworCQkJCWJyZWFrOworCQkJY2FzZSBwb2htZWxmc19vcHRfdHJhbnNfcmV0cmllczoKKwkJCQlwc2ItPnRyYW5zX3JldHJpZXMgPSBvcHRpb247CisJCQkJYnJlYWs7CisJCQljYXNlIHBvaG1lbGZzX29wdF9jcnlwdG9fdGhyZWFkX251bToKKwkJCQlwc2ItPmNyeXB0b190aHJlYWRfbnVtID0gb3B0aW9uOworCQkJCWJyZWFrOworCQkJY2FzZSBwb2htZWxmc19vcHRfdHJhbnNfbWF4X3BhZ2VzOgorCQkJCXBzYi0+dHJhbnNfbWF4X3BhZ2VzID0gb3B0aW9uOworCQkJCWJyZWFrOworCQkJY2FzZSBwb2htZWxmc19vcHRfY3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQ6CisJCQkJcHNiLT5jcnlwdG9fZmFpbF91bnN1cHBvcnRlZCA9IDE7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX2ZsdXNoX2lub2RlKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gJnBpLT52ZnNfaW5vZGU7CisKKwlkcHJpbnRrKCIlczogJXA6IGlubzogJWxsdSwgb3duZWQ6ICVkLlxuIiwKKwkJX19mdW5jX18sIGlub2RlLCBwaS0+aW5vLCB0ZXN0X2JpdChORVRGU19JTk9ERV9PV05FRCwgJnBpLT5zdGF0ZSkpOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkVURlNfSU5PREVfT1dORUQsICZwaS0+c3RhdGUpKSB7CisJCWZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKKwkJaW5vZGUtPmlfc2ItPnNfb3AtPndyaXRlX2lub2RlKGlub2RlLCAwKTsKKwl9CisKKwl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhpbm9kZS0+aV9tYXBwaW5nLCAwKTsKKworCXBvaG1lbGZzX2RhdGFfdW5sb2NrKHBpLCAwLCB+MCwgUE9ITUVMRlNfV1JJVEVfTE9DSyk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX3B1dF9pbm9kZV9jb3VudChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJZHByaW50aygiJXM6IGlubzogJWxsdSwgcGk6ICVwLCBpbm9kZTogJXAsIGNvdW50OiAldS5cbiIsCisJCQlfX2Z1bmNfXywgcGktPmlubywgcGksICZwaS0+dmZzX2lub2RlLCBjb3VudCk7CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5FVEZTX0lOT0RFX05FRURfRkxVU0gsICZwaS0+c3RhdGUpKQorCQlwb2htZWxmc19mbHVzaF9pbm9kZShwaSwgY291bnQpOworCisJd2hpbGUgKGNvdW50LS0pCisJCWlwdXQoJnBpLT52ZnNfaW5vZGUpOworfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19kcm9wX3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwb2htZWxmc19zYiwgZHJvcF9kd29yay53b3JrKTsKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpOworCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CisKKwl3aGlsZSAoKHBpID0gcG9obWVsZnNfZ2V0X2lub2RlX2Zyb21fbGlzdChwc2IsICZwc2ItPmRyb3BfbGlzdCwgJmNvdW50KSkpIHsKKwkJcG9obWVsZnNfcHV0X2lub2RlX2NvdW50KHBpLCBjb3VudCk7CisJfQorCXBvaG1lbGZzX2NoZWNrX3N0YXRlcyhwc2IpOworCisJaWYgKHBzYi0+ZHJvcF9zY2FuX3RpbWVvdXQpCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHNiLT5kcm9wX2R3b3JrLCBwc2ItPmRyb3Bfc2Nhbl90aW1lb3V0KTsKK30KKworLyoKKyAqIFJ1biB0aHJvdWdoIGFsbCB0cmFuc2FjdGlvbnMgc3RhcnRpbmcgZnJvbSB0aGUgb2xkZXN0LAorICogZHJvcCB0cmFuc2FjdGlvbiBmcm9tIGN1cnJlbnQgc3RhdGUgYW5kIHRyeSB0byBzZW5kIGl0CisgKiB0byBhbGwgcmVtb3RlIG5vZGVzLCB3aGljaCBhcmUgY3VycmVudGx5IGluc3RhbGxlZC4KKyAqLworc3RhdGljIHZvaWQgcG9obWVsZnNfdHJhbnNfc2Nhbl9zdGF0ZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOworCXN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdDsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IHN0LT5wc2I7CisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSBwc2ItPnRyYW5zX3NjYW5fdGltZW91dDsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJaW50IGVycjsKKworCW11dGV4X2xvY2soJnN0LT50cmFuc19sb2NrKTsKKwlmb3IgKHJiX25vZGUgPSByYl9maXJzdCgmc3QtPnRyYW5zX3Jvb3QpOyByYl9ub2RlOyApIHsKKwkJZHN0ID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IG5ldGZzX3RyYW5zX2RzdCwgc3RhdGVfZW50cnkpOworCQl0ID0gZHN0LT50cmFuczsKKworCQlpZiAodGltZW91dCAmJiB0aW1lX2FmdGVyKGRzdC0+c2VuZF90aW1lICsgdGltZW91dCwgamlmZmllcykKKwkJCQkmJiBkc3QtPnJldHJpZXMgPT0gMCkKKwkJCWJyZWFrOworCisJCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAldSwgc3Q6ICVwLCByZXRyaWVzOiAldSwgbWF4OiAldS5cbiIsCisJCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBzdCwgZHN0LT5yZXRyaWVzLCBwc2ItPnRyYW5zX3JldHJpZXMpOworCQluZXRmc190cmFuc19nZXQodCk7CisKKwkJcmJfbm9kZSA9IHJiX25leHQocmJfbm9kZSk7CisKKwkJZXJyID0gLUVUSU1FRE9VVDsKKwkJaWYgKHRpbWVvdXQgJiYgKCsrZHN0LT5yZXRyaWVzIDwgcHNiLT50cmFuc19yZXRyaWVzKSkgeworCQkJZXJyID0gbmV0ZnNfdHJhbnNfcmVzZW5kKHQsIHBzYik7CisJCX0KKworCQlpZiAoZXJyIHx8ICh0LT5mbGFncyAmIE5FVEZTX1RSQU5TX1NJTkdMRV9EU1QpKSB7CisJCQlpZiAobmV0ZnNfdHJhbnNfcmVtb3ZlX25vbG9jayhkc3QsIHN0KSkKKwkJCQluZXRmc190cmFuc19kcm9wX2RzdF9ub3N0YXRlKGRzdCk7CisJCX0KKworCQl0LT5yZXN1bHQgPSBlcnI7CisJCW5ldGZzX3RyYW5zX3B1dCh0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZzdC0+dHJhbnNfbG9jayk7Cit9CisKKy8qCisgKiBXYWxrIHRocm91Z2ggYWxsIGluc3RhbGxlZCBuZXR3b3JrIHN0YXRlcyBhbmQgcmVzZW5kIGFsbAorICogdHJhbnNhY3Rpb25zLCB3aGljaCBhcmUgb2xkIGVub3VnaC4KKyAqLworc3RhdGljIHZvaWQgcG9obWVsZnNfdHJhbnNfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBvaG1lbGZzX3NiLCBkd29yay53b3JrKTsKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0OworCXN0cnVjdCBwb2htZWxmc19jb25maWcgKmM7CisKKwltdXRleF9sb2NrKCZwc2ItPnN0YXRlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJnBzYi0+c3RhdGVfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCXN0ID0gJmMtPnN0YXRlOworCisJCXBvaG1lbGZzX3RyYW5zX3NjYW5fc3RhdGUoc3QpOworCX0KKwltdXRleF91bmxvY2soJnBzYi0+c3RhdGVfbG9jayk7CisKKwkvKgorCSAqIElmIG5vIHRpbWVvdXQgc3BlY2lmaWVkIHRoZW4gc3lzdGVtIGlzIGluIHRoZSBtaWRkbGUgb2YgdW1vdW50IHByb2Nlc3MsCisJICogc28gbm8gbmVlZCB0byByZXNjaGVkdWxlIHNjYW5uaW5nIHByb2Nlc3MgYWdhaW4uCisJICovCisJaWYgKHBzYi0+dHJhbnNfc2Nhbl90aW1lb3V0KQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBzYi0+ZHdvcmssIHBzYi0+dHJhbnNfc2Nhbl90aW1lb3V0KTsKK30KKworaW50IHBvaG1lbGZzX21ldGFfY29tbWFuZF9kYXRhKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHU2NCBpZCwgdW5zaWduZWQgaW50IGNtZF9vcCwgY2hhciAqYWRkb24sCisJCXVuc2lnbmVkIGludCBmbGFncywgbmV0ZnNfdHJhbnNfY29tcGxldGVfdCBjb21wbGV0ZSwgdm9pZCAqcHJpdiwgdTY0IHN0YXJ0KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmcGktPnZmc19pbm9kZTsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IFBPSE1FTEZTX1NCKGlub2RlLT5pX3NiKTsKKwlpbnQgZXJyID0gMCwgc3o7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCWludCBwYXRoX2xlbiwgYWRkb25fbGVuID0gMDsKKwl2b2lkICpkYXRhOworCXN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICppbmZvOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZDsKKworCWRwcmludGsoIiVzOiBpbm86ICVsbHUsIGNtZDogJXUsIGFkZG9uOiAlcC5cbiIsIF9fZnVuY19fLCBwaS0+aW5vLCBjbWRfb3AsIGFkZG9uKTsKKworCXBhdGhfbGVuID0gcG9obWVsZnNfcGF0aF9sZW5ndGgocGkpOworCWlmIChwYXRoX2xlbiA8IDApIHsKKwkJZXJyID0gcGF0aF9sZW47CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKworCWlmIChhZGRvbikKKwkJYWRkb25fbGVuID0gc3RybGVuKGFkZG9uKSArIDE7IC8qIDAtYnl0ZSAqLworCXN6ID0gYWRkb25fbGVuOworCisJaWYgKGNtZF9vcCA9PSBORVRGU19JTk9ERV9JTkZPKQorCQlzeiArPSBzaXplb2Yoc3RydWN0IG5ldGZzX2lub2RlX2luZm8pOworCisJdCA9IG5ldGZzX3RyYW5zX2FsbG9jKHBzYiwgc3ogKyBwYXRoX2xlbiwgZmxhZ3MsIDApOworCWlmICghdCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisJdC0+Y29tcGxldGUgPSBjb21wbGV0ZTsKKwl0LT5wcml2YXRlID0gcHJpdjsKKworCWNtZCA9IG5ldGZzX3RyYW5zX2N1cnJlbnQodCk7CisJZGF0YSA9ICh2b2lkICopKGNtZCArIDEpOworCisJaWYgKGNtZF9vcCA9PSBORVRGU19JTk9ERV9JTkZPKSB7CisJCWluZm8gPSAoc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKikoY21kICsgMSk7CisJCWRhdGEgPSAodm9pZCAqKShpbmZvICsgMSk7CisKKwkJLyoKKwkJICogV2UgYXJlIHVuZGVyIGlfbXV0ZXgsIGNhbiByZWFkIGFuZCBjaGFuZ2Ugd2hhdGV2ZXIgd2Ugd2FudC4uLgorCQkgKi8KKwkJaW5mby0+bW9kZSA9IGlub2RlLT5pX21vZGU7CisJCWluZm8tPm5saW5rID0gaW5vZGUtPmlfbmxpbms7CisJCWluZm8tPnVpZCA9IGlub2RlLT5pX3VpZDsKKwkJaW5mby0+Z2lkID0gaW5vZGUtPmlfZ2lkOworCQlpbmZvLT5ibG9ja3MgPSBpbm9kZS0+aV9ibG9ja3M7CisJCWluZm8tPnJkZXYgPSBpbm9kZS0+aV9yZGV2OworCQlpbmZvLT5zaXplID0gaW5vZGUtPmlfc2l6ZTsKKwkJaW5mby0+dmVyc2lvbiA9IGlub2RlLT5pX3ZlcnNpb247CisKKwkJbmV0ZnNfY29udmVydF9pbm9kZV9pbmZvKGluZm8pOworCX0KKworCXBhdGhfbGVuID0gcG9obWVsZnNfY29uc3RydWN0X3BhdGhfc3RyaW5nKHBpLCBkYXRhLCBwYXRoX2xlbik7CisJaWYgKHBhdGhfbGVuIDwgMCkKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlkcHJpbnRrKCIlczogcGF0aF9sZW46ICVkLlxuIiwgX19mdW5jX18sIHBhdGhfbGVuKTsKKworCWlmIChhZGRvbikgeworCQlwYXRoX2xlbi0tOyAvKiBEbyBub3QgcGxhY2UgbnVsbC1ieXRlIGJlZm9yZSB0aGUgYWRkb24gKi8KKwkJcGF0aF9sZW4gKz0gc3ByaW50ZihkYXRhICsgcGF0aF9sZW4sICIvJXMiLCBhZGRvbikgKyAxOyAvKiAwIC0gYnl0ZSAqLworCX0KKworCXN6ICs9IHBhdGhfbGVuOworCisJY21kLT5jbWQgPSBjbWRfb3A7CisJY21kLT5leHQgPSBwYXRoX2xlbjsKKwljbWQtPnNpemUgPSBzejsKKwljbWQtPmlkID0gaWQ7CisJY21kLT5zdGFydCA9IHN0YXJ0OworCisJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKwluZXRmc190cmFuc191cGRhdGUoY21kLCB0LCBzeik7CisKKwkvKgorCSAqIE5vdGUsIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gbGVhayBlcnJvciBoZXJlOiB0cmFuc2FjdGlvbiBjYWxsYmFjayB3aWxsIG5vdAorCSAqIGJlIGludm9rZWQgZm9yIGFsbG9jYXRpb24gcGF0aCBmYWlsdXJlLgorCSAqLworCXJldHVybiBuZXRmc190cmFuc19maW5pc2godCwgcHNiKTsKKworZXJyX291dF9mcmVlOgorCW5ldGZzX3RyYW5zX2ZyZWUodCk7CitlcnJfb3V0X2V4aXQ6CisJaWYgKGNvbXBsZXRlKQorCQljb21wbGV0ZShOVUxMLCAwLCBwcml2LCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBwb2htZWxmc19tZXRhX2NvbW1hbmQoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdW5zaWduZWQgaW50IGNtZF9vcCwgdW5zaWduZWQgaW50IGZsYWdzLAorCQluZXRmc190cmFuc19jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpwcml2LCB1NjQgc3RhcnQpCit7CisJcmV0dXJuIHBvaG1lbGZzX21ldGFfY29tbWFuZF9kYXRhKHBpLCBwaS0+aW5vLCBjbWRfb3AsIE5VTEwsIGZsYWdzLCBjb21wbGV0ZSwgcHJpdiwgc3RhcnQpOworfQorCisvKgorICogU2VuZCByZXF1ZXN0IGFuZCB3YWl0IGZvciBQT0hNRUxGUyByb290IGNhcGFiaWxpdGllcyByZXNwb25zZSwKKyAqIHdoaWNoIHdpbGwgdXBkYXRlIHNlcnZlcidzIGluZm9ybWFpb24gYWJvdXQgc2l6ZSBvZiB0aGUgZXhwb3J0LAorICogcGVybWlzc2lvbnMsIG51bWJlciBvZiBvYmplY3RzLCBhdmFpbGFibGUgc2l6ZSBhbmQgc28gb24uCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfcm9vdF9oYW5kc2hha2Uoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCXN0cnVjdCBuZXRmc19jbWQgKmNtZDsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXQgPSBuZXRmc190cmFuc19hbGxvYyhwc2IsIDAsIDAsIDApOworCWlmICghdCkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwljbWQgPSBuZXRmc190cmFuc19jdXJyZW50KHQpOworCisJY21kLT5jbWQgPSBORVRGU19DQVBBQklMSVRJRVM7CisJY21kLT5pZCA9IFBPSE1FTEZTX1JPT1RfQ0FQQUJJTElUSUVTOworCWNtZC0+c2l6ZSA9IDA7CisJY21kLT5zdGFydCA9IDA7CisJY21kLT5leHQgPSAwOworCWNtZC0+Y3NpemUgPSAwOworCisJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKwluZXRmc190cmFuc191cGRhdGUoY21kLCB0LCAwKTsKKworCWVyciA9IG5ldGZzX3RyYW5zX2ZpbmlzaCh0LCBwc2IpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcHNiLT5mbGFncyA9IH4wOworCWVyciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHBzYi0+d2FpdCwKKwkJCShwc2ItPmZsYWdzICE9IH4wKSwKKwkJCXBzYi0+d2FpdF9vbl9wYWdlX3RpbWVvdXQpOworCWlmICghZXJyKSB7CisJCWVyciA9IC1FVElNRURPVVQ7CisJfSBlbHNlIHsKKwkJZXJyID0gLXBzYi0+ZmxhZ3M7CisJfQorCisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9leGl0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBwcml2YXRlIHN1cGVyYmxvY2sgYW5kIGNyZWF0ZSByb290IGRpci4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2I7CisJaW50IGVyciA9IC1FTk9NRU07CisJc3RydWN0IGlub2RlICpyb290OworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqbnBpOworCXN0cnVjdCBxc3RyIHN0cjsKKworCXBvaG1lbGZzX2Z0cmFuc19pbml0KCk7CisKKwlwc2IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG9obWVsZnNfc2IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBzYikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlzYi0+c19mc19pbmZvID0gcHNiOworCXNiLT5zX29wID0gJnBvaG1lbGZzX3NiX29wczsKKwlzYi0+c19tYWdpYyA9IFBPSE1FTEZTX01BR0lDX05VTTsKKwlzYi0+c19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7CisJc2ItPnNfYmxvY2tzaXplID0gUEFHRV9TSVpFOworCisJcHNiLT5zYiA9IHNiOworCisJcHNiLT5pbm8gPSAyOworCXBzYi0+aWR4ID0gMDsKKwlwc2ItPmFjdGl2ZV9zdGF0ZSA9IE5VTEw7CisJcHNiLT50cmFuc19yZXRyaWVzID0gNTsKKwlwc2ItPnRyYW5zX2RhdGFfc2l6ZSA9IFBBR0VfU0laRTsKKwlwc2ItPmRyb3Bfc2Nhbl90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygxMDAwKTsKKwlwc2ItPnRyYW5zX3NjYW5fdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwMCk7CisJcHNiLT53YWl0X29uX3BhZ2VfdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwMCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcHNiLT53YWl0KTsKKworCXNwaW5fbG9ja19pbml0KCZwc2ItPmlub19sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZwc2ItPmRyb3BfbGlzdCk7CisKKwltdXRleF9pbml0KCZwc2ItPm1jYWNoZV9sb2NrKTsKKwlwc2ItPm1jYWNoZV9yb290ID0gUkJfUk9PVDsKKwlwc2ItPm1jYWNoZV90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyg1MDAwKTsKKwlhdG9taWNfbG9uZ19zZXQoJnBzYi0+bWNhY2hlX2dlbiwgMCk7CisKKwlwc2ItPnRyYW5zX21heF9wYWdlcyA9IDEwMDsKKworCXBzYi0+Y3J5cHRvX2FsaWduX3NpemUgPSAxNjsKKwlwc2ItPmNyeXB0b19hdHRhY2hlZF9zaXplID0gMDsKKwlwc2ItPmhhc2hfc3RybGVuID0gMDsKKwlwc2ItPmNpcGhlcl9zdHJsZW4gPSAwOworCXBzYi0+cGVyZm9ybV9jcnlwdG8gPSAwOworCXBzYi0+Y3J5cHRvX3RocmVhZF9udW0gPSAyOworCXBzYi0+Y3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQgPSAwOworCW11dGV4X2luaXQoJnBzYi0+Y3J5cHRvX3RocmVhZF9sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmcHNiLT5jcnlwdG9fcmVhZHlfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnBzYi0+Y3J5cHRvX2FjdGl2ZV9saXN0KTsKKworCWF0b21pY19zZXQoJnBzYi0+dHJhbnNfZ2VuLCAxKTsKKwlhdG9taWNfc2V0KCZwc2ItPnRvdGFsX2lub2RlcywgMCk7CisKKwltdXRleF9pbml0KCZwc2ItPnN0YXRlX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZwc2ItPnN0YXRlX2xpc3QpOworCisJZXJyID0gcG9obWVsZnNfcGFyc2Vfb3B0aW9ucygoY2hhciAqKSBkYXRhLCBwc2IpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX3NiOworCisJZXJyID0gcG9obWVsZnNfY29weV9jcnlwdG8ocHNiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZV9zYjsKKworCWVyciA9IHBvaG1lbGZzX3N0YXRlX2luaXQocHNiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZV9zdHJpbmdzOworCisJZXJyID0gcG9obWVsZnNfY3J5cHRvX2luaXQocHNiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfc3RhdGVfZXhpdDsKKworCWVyciA9IHBvaG1lbGZzX3Jvb3RfaGFuZHNoYWtlKHBzYik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2NyeXB0b19leGl0OworCisJc3RyLm5hbWUgPSAiLyI7CisJc3RyLmhhc2ggPSBqaGFzaCgiLyIsIDEsIDApOworCXN0ci5sZW4gPSAxOworCisJbnBpID0gcG9obWVsZnNfY3JlYXRlX2VudHJ5X2xvY2FsKHBzYiwgTlVMTCwgJnN0ciwgMCwgMDc1NXxTX0lGRElSKTsKKwlpZiAoSVNfRVJSKG5waSkpIHsKKwkJZXJyID0gUFRSX0VSUihucGkpOworCQlnb3RvIGVycl9vdXRfY3J5cHRvX2V4aXQ7CisJfQorCisJcm9vdCA9ICZucGktPnZmc19pbm9kZTsKKworCXNiLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3Qocm9vdCk7CisJaWYgKCFzYi0+c19yb290KQorCQlnb3RvIGVycl9vdXRfcHV0X3Jvb3Q7CisKKwlJTklUX0RFTEFZRURfV09SSygmcHNiLT5kcm9wX2R3b3JrLCBwb2htZWxmc19kcm9wX3NjYW4pOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHNiLT5kcm9wX2R3b3JrLCBwc2ItPmRyb3Bfc2Nhbl90aW1lb3V0KTsKKworCUlOSVRfREVMQVlFRF9XT1JLKCZwc2ItPmR3b3JrLCBwb2htZWxmc190cmFuc19zY2FuKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBzYi0+ZHdvcmssIHBzYi0+dHJhbnNfc2Nhbl90aW1lb3V0KTsKKworCXJldHVybiAwOworCitlcnJfb3V0X3B1dF9yb290OgorCWlwdXQocm9vdCk7CitlcnJfb3V0X2NyeXB0b19leGl0OgorCXBvaG1lbGZzX2NyeXB0b19leGl0KHBzYik7CitlcnJfb3V0X3N0YXRlX2V4aXQ6CisJcG9obWVsZnNfc3RhdGVfZXhpdChwc2IpOworZXJyX291dF9mcmVlX3N0cmluZ3M6CisJa2ZyZWUocHNiLT5jaXBoZXJfc3RyaW5nKTsKKwlrZnJlZShwc2ItPmhhc2hfc3RyaW5nKTsKK2Vycl9vdXRfZnJlZV9zYjoKKwlrZnJlZShwc2IpOworZXJyX291dF9leGl0OgorCisJZHByaW50aygiJXM6IGVycjogJWQuXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU29tZSBWRlMgbWFnaWMgaGVyZS4uLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlyZXR1cm4gZ2V0X3NiX25vZGV2KGZzX3R5cGUsIGZsYWdzLCBkYXRhLCBwb2htZWxmc19maWxsX3N1cGVyLAorCQkJCW1udCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBwb2htZWxfZnNfdHlwZSA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gInBvaG1lbCIsCisJLmdldF9zYgkJPSBwb2htZWxmc19nZXRfc2IsCisJLmtpbGxfc2IgCT0ga2lsbF9hbm9uX3N1cGVyLAorfTsKKworLyoKKyAqIENhY2hlIGFuZCBtb2R1bGUgaW5pdGlhbGl6YXRpb25zIGFuZCBmcmVlaW5nIHJvdXRpbmdzLgorICovCitzdGF0aWMgdm9pZCBwb2htZWxmc19pbml0X29uY2Uodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpID0gZGF0YTsKKworCWlub2RlX2luaXRfb25jZSgmcGktPnZmc19pbm9kZSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBvaG1lbGZzX2luaXRfaW5vZGVjYWNoZSh2b2lkKQoreworCXBvaG1lbGZzX2lub2RlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInBvaG1lbGZzX2lub2RlX2NhY2hlIiwKKwkJCQlzaXplb2Yoc3RydWN0IHBvaG1lbGZzX2lub2RlKSwKKwkJCQkwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9NRU1fU1BSRUFEKSwKKwkJCQlwb2htZWxmc19pbml0X29uY2UpOworCWlmICghcG9obWVsZnNfaW5vZGVfY2FjaGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBvaG1lbGZzX2Rlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShwb2htZWxmc19pbm9kZV9jYWNoZSk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcG9obWVsX2ZzKHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IHBvaG1lbGZzX2NvbmZpZ19pbml0KCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwllcnIgPSBwb2htZWxmc19pbml0X2lub2RlY2FjaGUoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfY29uZmlnX2V4aXQ7CisKKwllcnIgPSBwb2htZWxmc19tY2FjaGVfaW5pdCgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9kZXN0cm95OworCisJZXJyID0gbmV0ZnNfdHJhbnNfaW5pdCgpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9tY2FjaGVfZXhpdDsKKworCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnBvaG1lbF9mc190eXBlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfdHJhbnM7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF90cmFuczoKKwluZXRmc190cmFuc19leGl0KCk7CitlcnJfb3V0X21jYWNoZV9leGl0OgorCXBvaG1lbGZzX21jYWNoZV9leGl0KCk7CitlcnJfb3V0X2Rlc3Ryb3k6CisJcG9obWVsZnNfZGVzdHJveV9pbm9kZWNhY2hlKCk7CitlcnJfb3V0X2NvbmZpZ19leGl0OgorCXBvaG1lbGZzX2NvbmZpZ19leGl0KCk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfcG9obWVsX2ZzKHZvaWQpCit7CisgICAgICAgIHVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmcG9obWVsX2ZzX3R5cGUpOworCXBvaG1lbGZzX2Rlc3Ryb3lfaW5vZGVjYWNoZSgpOworCXBvaG1lbGZzX21jYWNoZV9leGl0KCk7CisJcG9obWVsZnNfY29uZmlnX2V4aXQoKTsKKwluZXRmc190cmFuc19leGl0KCk7Cit9CisKK21vZHVsZV9pbml0KGluaXRfcG9obWVsX2ZzKTsKK21vZHVsZV9leGl0KGV4aXRfcG9obWVsX2ZzKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQb2htZWwgZmlsZXN5c3RlbSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL2xvY2suYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9sb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0YTE4NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9sb2NrLmMKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorCisjaW5jbHVkZSAibmV0ZnMuaCIKKworc3RhdGljIGludCBwb2htZWxmc19zZW5kX2xvY2tfdHJhbnMoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwKKwkJdTY0IGlkLCB1NjQgc3RhcnQsIHUzMiBzaXplLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gJnBpLT52ZnNfaW5vZGU7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihpbm9kZS0+aV9zYik7CisJc3RydWN0IG5ldGZzX3RyYW5zICp0OworCXN0cnVjdCBuZXRmc19jbWQgKmNtZDsKKwlpbnQgcGF0aF9sZW4sIGVycjsKKwl2b2lkICpkYXRhOworCXN0cnVjdCBuZXRmc19sb2NrICpsOworCWludCBpc2l6ZSA9ICh0eXBlICYgUE9ITUVMRlNfTE9DS19HUkFCKSA/IDAgOiBzaXplb2Yoc3RydWN0IG5ldGZzX2lub2RlX2luZm8pOworCisJZXJyID0gcG9obWVsZnNfcGF0aF9sZW5ndGgocGkpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCXBhdGhfbGVuID0gZXJyOworCisJZXJyID0gLUVOT01FTTsKKwl0ID0gbmV0ZnNfdHJhbnNfYWxsb2MocHNiLCBwYXRoX2xlbiArIHNpemVvZihzdHJ1Y3QgbmV0ZnNfbG9jaykgKyBpc2l6ZSwgMCwgMCk7CisJaWYgKCF0KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWNtZCA9IG5ldGZzX3RyYW5zX2N1cnJlbnQodCk7CisJZGF0YSA9IGNtZCArIDE7CisKKwllcnIgPSBwb2htZWxmc19jb25zdHJ1Y3RfcGF0aF9zdHJpbmcocGksIGRhdGEsIHBhdGhfbGVuKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisJcGF0aF9sZW4gPSBlcnI7CisKKwlsID0gZGF0YSArIHBhdGhfbGVuOworCisJbC0+c3RhcnQgPSBzdGFydDsKKwlsLT5zaXplID0gc2l6ZTsKKwlsLT50eXBlID0gdHlwZTsKKwlsLT5pbm8gPSBwaS0+aW5vOworCisJY21kLT5jbWQgPSBORVRGU19MT0NLOworCWNtZC0+c3RhcnQgPSAwOworCWNtZC0+aWQgPSBpZDsKKwljbWQtPnNpemUgPSBzaXplb2Yoc3RydWN0IG5ldGZzX2xvY2spICsgcGF0aF9sZW4gKyBpc2l6ZTsKKwljbWQtPmV4dCA9IHBhdGhfbGVuOworCWNtZC0+Y3NpemUgPSAwOworCisJbmV0ZnNfY29udmVydF9jbWQoY21kKTsKKwluZXRmc19jb252ZXJ0X2xvY2sobCk7CisKKwlpZiAoaXNpemUpIHsKKwkJc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKmluZm8gPSAoc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKikobCArIDEpOworCisJCWluZm8tPm1vZGUgPSBpbm9kZS0+aV9tb2RlOworCQlpbmZvLT5ubGluayA9IGlub2RlLT5pX25saW5rOworCQlpbmZvLT51aWQgPSBpbm9kZS0+aV91aWQ7CisJCWluZm8tPmdpZCA9IGlub2RlLT5pX2dpZDsKKwkJaW5mby0+YmxvY2tzID0gaW5vZGUtPmlfYmxvY2tzOworCQlpbmZvLT5yZGV2ID0gaW5vZGUtPmlfcmRldjsKKwkJaW5mby0+c2l6ZSA9IGlub2RlLT5pX3NpemU7CisJCWluZm8tPnZlcnNpb24gPSBpbm9kZS0+aV92ZXJzaW9uOworCisJCW5ldGZzX2NvbnZlcnRfaW5vZGVfaW5mbyhpbmZvKTsKKwl9CisKKwluZXRmc190cmFuc191cGRhdGUoY21kLCB0LCBwYXRoX2xlbiArIHNpemVvZihzdHJ1Y3QgbmV0ZnNfbG9jaykgKyBpc2l6ZSk7CisKKwlyZXR1cm4gbmV0ZnNfdHJhbnNfZmluaXNoKHQsIHBzYik7CisKK2Vycl9vdXRfZnJlZToKKwluZXRmc190cmFuc19mcmVlKHQpOworZXJyX291dF9leGl0OgorCXByaW50aygiJXM6IGVycjogJWQuXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcG9obWVsZnNfZGF0YV9sb2NrKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHU2NCBzdGFydCwgdTMyIHNpemUsIGludCB0eXBlKQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gUE9ITUVMRlNfU0IocGktPnZmc19pbm9kZS5pX3NiKTsKKwlzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptOworCWludCBlcnIgPSAtRU5PTUVNOworCXN0cnVjdCBpYXR0ciBpYXR0cjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gJnBpLT52ZnNfaW5vZGU7CisKKwlkcHJpbnRrKCIlczogJXA6IGlubzogJWxsdSwgc3RhcnQ6ICVsbHUsIHNpemU6ICV1LCAiCisJCQkidHlwZTogJWQsIGxvY2tlZCBhczogJWQsIG93bmVkOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgJnBpLT52ZnNfaW5vZGUsIHBpLT5pbm8sCisJCQlzdGFydCwgc2l6ZSwgdHlwZSwgcGktPmxvY2tfdHlwZSwKKwkJCSEhdGVzdF9iaXQoTkVURlNfSU5PREVfT1dORUQsICZwaS0+c3RhdGUpKTsKKworCWlmICghcG9obWVsZnNfbmVlZF9sb2NrKHBpLCB0eXBlKSkKKwkJcmV0dXJuIDA7CisKKwltID0gcG9obWVsZnNfbWNhY2hlX2FsbG9jKHBzYiwgc3RhcnQsIHNpemUsIE5VTEwpOworCWlmIChJU19FUlIobSkpCisJCXJldHVybiBQVFJfRVJSKG0pOworCisJZXJyID0gcG9obWVsZnNfc2VuZF9sb2NrX3RyYW5zKHBpLCBtLT5nZW4sIHN0YXJ0LCBzaXplLAorCQkJdHlwZSB8IFBPSE1FTEZTX0xPQ0tfR1JBQik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X3B1dDsKKworCWVyciA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmbS0+Y29tcGxldGUsIHBzYi0+bWNhY2hlX3RpbWVvdXQpOworCWlmIChlcnIpCisJCWVyciA9IG0tPmVycjsKKwllbHNlCisJCWVyciA9IC1FVElNRURPVVQ7CisKKwlpZiAoZXJyKSB7CisJCXByaW50aygiJXM6ICVwOiBpbm86ICVsbHUsIG1nZW46ICVsbHUsIHN0YXJ0OiAlbGx1LCBzaXplOiAldSwgZXJyOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgJnBpLT52ZnNfaW5vZGUsIHBpLT5pbm8sIG0tPmdlbiwgc3RhcnQsIHNpemUsIGVycik7CisJfQorCisJaWYgKGVyciAmJiAoZXJyICE9IC1FTk9FTlQpKQorCQlnb3RvIGVycl9vdXRfcHV0OworCisJaWYgKCFlcnIpIHsKKwkJbmV0ZnNfY29udmVydF9pbm9kZV9pbmZvKCZtLT5pbmZvKTsKKworCQlpYXR0ci5pYV92YWxpZCA9IEFUVFJfTU9ERSB8IEFUVFJfVUlEIHwgQVRUUl9HSUQgfCBBVFRSX1NJWkUgfCBBVFRSX0FUSU1FOworCQlpYXR0ci5pYV9tb2RlID0gbS0+aW5mby5tb2RlOworCQlpYXR0ci5pYV91aWQgPSBtLT5pbmZvLnVpZDsKKwkJaWF0dHIuaWFfZ2lkID0gbS0+aW5mby5naWQ7CisJCWlhdHRyLmlhX3NpemUgPSBtLT5pbmZvLnNpemU7CisJCWlhdHRyLmlhX2F0aW1lID0gQ1VSUkVOVF9USU1FOworCisJCWRwcmludGsoIiVzOiAlcDogaW5vOiAlbGx1LCBtZ2VuOiAlbGx1LCBzdGFydDogJWxsdSwgaXNpemU6ICVsbHUgLT4gJWxsdS5cbiIsCisJCQlfX2Z1bmNfXywgJnBpLT52ZnNfaW5vZGUsIHBpLT5pbm8sIG0tPmdlbiwgc3RhcnQsIGlub2RlLT5pX3NpemUsIG0tPmluZm8uc2l6ZSk7CisKKwkJZXJyID0gcG9obWVsZnNfc2V0YXR0cl9yYXcoaW5vZGUsICZpYXR0cik7CisJCWlmICghZXJyKSB7CisJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBkX2ZpbmRfYWxpYXMoaW5vZGUpOworCQkJaWYgKGRlbnRyeSkgeworCQkJCWZzbm90aWZ5X2NoYW5nZShkZW50cnksIGlhdHRyLmlhX3ZhbGlkKTsKKwkJCQlkcHV0KGRlbnRyeSk7CisJCQl9CisJCX0KKwl9CisKKwlwaS0+bG9ja190eXBlID0gdHlwZTsKKwlzZXRfYml0KE5FVEZTX0lOT0RFX09XTkVELCAmcGktPnN0YXRlKTsKKworCXBvaG1lbGZzX21jYWNoZV9wdXQocHNiLCBtKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X3B1dDoKKwlwb2htZWxmc19tY2FjaGVfcHV0KHBzYiwgbSk7CisJcmV0dXJuIGVycjsKK30KKworaW50IHBvaG1lbGZzX2RhdGFfdW5sb2NrKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHU2NCBzdGFydCwgdTMyIHNpemUsIGludCB0eXBlKQoreworCWRwcmludGsoIiVzOiAlcDogaW5vOiAlbGx1LCBzdGFydDogJWxsdSwgc2l6ZTogJXUsIHR5cGU6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCAmcGktPnZmc19pbm9kZSwgcGktPmlubywgc3RhcnQsIHNpemUsIHR5cGUpOworCXBpLT5sb2NrX3R5cGUgPSAwOworCWNsZWFyX2JpdChORVRGU19JTk9ERV9SRU1PVEVfRElSX1NZTkNFRCwgJnBpLT5zdGF0ZSk7CisJY2xlYXJfYml0KE5FVEZTX0lOT0RFX09XTkVELCAmcGktPnN0YXRlKTsKKwlyZXR1cm4gcG9obWVsZnNfc2VuZF9sb2NrX3RyYW5zKHBpLCBwaS0+aW5vLCBzdGFydCwgc2l6ZSwgdHlwZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbWNhY2hlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyNjY1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9tY2FjaGUuYwpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisKKyNpbmNsdWRlICJuZXRmcy5oIgorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBvaG1lbGZzX21jYWNoZV9jYWNoZTsKK3N0YXRpYyBtZW1wb29sX3QgKnBvaG1lbGZzX21jYWNoZV9wb29sOworCitzdGF0aWMgaW5saW5lIGludCBwb2htZWxmc19tY2FjaGVfY21wKHU2NCBnZW4sIHU2NCBuZXcpCit7CisJaWYgKGdlbiA8IG5ldykKKwkJcmV0dXJuIDE7CisJaWYgKGdlbiA+IG5ldykKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICpwb2htZWxmc19tY2FjaGVfc2VhcmNoKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCB1NjQgZ2VuKQoreworCXN0cnVjdCByYl9yb290ICpyb290ID0gJnBzYi0+bWNhY2hlX3Jvb3Q7CisJc3RydWN0IHJiX25vZGUgKm4gPSByb290LT5yYl9ub2RlOworCXN0cnVjdCBwb2htZWxmc19tY2FjaGUgKnRtcCwgKnJldCA9IE5VTEw7CisJaW50IGNtcDsKKworCXdoaWxlIChuKSB7CisJCXRtcCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBwb2htZWxmc19tY2FjaGUsIG1jYWNoZV9lbnRyeSk7CisKKwkJY21wID0gcG9obWVsZnNfbWNhY2hlX2NtcCh0bXAtPmdlbiwgZ2VuKTsKKwkJaWYgKGNtcCA8IDApCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJZWxzZSB7CisJCQlyZXQgPSB0bXA7CisJCQlwb2htZWxmc19tY2FjaGVfZ2V0KHJldCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcG9obWVsZnNfbWNhY2hlX2luc2VydChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbSkKK3sKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZwc2ItPm1jYWNoZV9yb290OworCXN0cnVjdCByYl9ub2RlICoqbiA9ICZyb290LT5yYl9ub2RlLCAqcGFyZW50ID0gTlVMTDsKKwlzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICpyZXQgPSBOVUxMLCAqdG1wOworCWludCBjbXA7CisKKwl3aGlsZSAoKm4pIHsKKwkJcGFyZW50ID0gKm47CisKKwkJdG1wID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlLCBtY2FjaGVfZW50cnkpOworCisJCWNtcCA9IHBvaG1lbGZzX21jYWNoZV9jbXAodG1wLT5nZW4sIG0tPmdlbik7CisJCWlmIChjbXAgPCAwKQorCQkJbiA9ICZwYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQluID0gJnBhcmVudC0+cmJfcmlnaHQ7CisJCWVsc2UgeworCQkJcmV0ID0gdG1wOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVFWElTVDsKKworCXJiX2xpbmtfbm9kZSgmbS0+bWNhY2hlX2VudHJ5LCBwYXJlbnQsIG4pOworCXJiX2luc2VydF9jb2xvcigmbS0+bWNhY2hlX2VudHJ5LCByb290KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBvaG1lbGZzX21jYWNoZV9yZW1vdmUoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm0pCit7CisJaWYgKG0gJiYgbS0+bWNhY2hlX2VudHJ5LnJiX3BhcmVudF9jb2xvcikgeworCQlyYl9lcmFzZSgmbS0+bWNhY2hlX2VudHJ5LCAmcHNiLT5tY2FjaGVfcm9vdCk7CisJCW0tPm1jYWNoZV9lbnRyeS5yYl9wYXJlbnRfY29sb3IgPSAwOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcG9obWVsZnNfbWNhY2hlX3JlbW92ZV9sb2NrZWQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm0pCit7CisJbXV0ZXhfbG9jaygmcHNiLT5tY2FjaGVfbG9jayk7CisJcG9obWVsZnNfbWNhY2hlX3JlbW92ZShwc2IsIG0pOworCW11dGV4X3VubG9jaygmcHNiLT5tY2FjaGVfbG9jayk7Cit9CisKK3N0cnVjdCBwb2htZWxmc19tY2FjaGUgKnBvaG1lbGZzX21jYWNoZV9hbGxvYyhzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgdTY0IHN0YXJ0LAorCQl1bnNpZ25lZCBpbnQgc2l6ZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptOworCWludCBlcnIgPSAtRU5PTUVNOworCisJbSA9IG1lbXBvb2xfYWxsb2MocG9obWVsZnNfbWNhY2hlX3Bvb2wsIEdGUF9LRVJORUwpOworCWlmICghbSkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwlpbml0X2NvbXBsZXRpb24oJm0tPmNvbXBsZXRlKTsKKwltLT5lcnIgPSAwOworCWF0b21pY19zZXQoJm0tPnJlZmNudCwgMSk7CisJbS0+ZGF0YSA9IGRhdGE7CisJbS0+c3RhcnQgPSBzdGFydDsKKwltLT5zaXplID0gc2l6ZTsKKwltLT5nZW4gPSBhdG9taWNfbG9uZ19pbmNfcmV0dXJuKCZwc2ItPm1jYWNoZV9nZW4pOworCisJbXV0ZXhfbG9jaygmcHNiLT5tY2FjaGVfbG9jayk7CisJZXJyID0gcG9obWVsZnNfbWNhY2hlX2luc2VydChwc2IsIG0pOworCW11dGV4X3VubG9jaygmcHNiLT5tY2FjaGVfbG9jayk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWU7CisKKwlyZXR1cm4gbTsKKworZXJyX291dF9mcmVlOgorCW1lbXBvb2xfZnJlZShtLCBwb2htZWxmc19tY2FjaGVfcG9vbCk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwordm9pZCBwb2htZWxmc19tY2FjaGVfZnJlZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbSkKK3sKKwlwb2htZWxmc19tY2FjaGVfcmVtb3ZlX2xvY2tlZChwc2IsIG0pOworCisJbWVtcG9vbF9mcmVlKG0sIHBvaG1lbGZzX21jYWNoZV9wb29sKTsKK30KKworaW50IF9faW5pdCBwb2htZWxmc19tY2FjaGVfaW5pdCh2b2lkKQoreworCXBvaG1lbGZzX21jYWNoZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJwb2htZWxmc19tY2FjaGVfY2FjaGUiLAorCQkJCXNpemVvZihzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlKSwKKwkJCQkwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9NRU1fU1BSRUFEKSwgTlVMTCk7CisJaWYgKCFwb2htZWxmc19tY2FjaGVfY2FjaGUpCisJCWdvdG8gZXJyX291dF9leGl0OworCisJcG9obWVsZnNfbWNhY2hlX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woMjU2LCBwb2htZWxmc19tY2FjaGVfY2FjaGUpOworCWlmICghcG9obWVsZnNfbWNhY2hlX3Bvb2wpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocG9obWVsZnNfbWNhY2hlX2NhY2hlKTsKK2Vycl9vdXRfZXhpdDoKKwlyZXR1cm4gLUVOT01FTTsKK30KKwordm9pZCBwb2htZWxmc19tY2FjaGVfZXhpdCh2b2lkKQoreworCW1lbXBvb2xfZGVzdHJveShwb2htZWxmc19tY2FjaGVfcG9vbCk7CisJa21lbV9jYWNoZV9kZXN0cm95KHBvaG1lbGZzX21jYWNoZV9jYWNoZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzliODU0MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9uZXQuYwpAQCAtMCwwICsxLDEyNDcgQEAKKy8qCisgKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlICJuZXRmcy5oIgorCitzdGF0aWMgaW50IHBvaG1lbGZzX2Z0cmFuc19zaXplID0gMTAyNDA7CitzdGF0aWMgdTMyICpwb2htZWxmc19mdHJhbnM7CisKK2ludCBwb2htZWxmc19mdHJhbnNfaW5pdCh2b2lkKQoreworCXBvaG1lbGZzX2Z0cmFucyA9IHZtYWxsb2MocG9obWVsZnNfZnRyYW5zX3NpemUgKiA0KTsKKwlpZiAoIXBvaG1lbGZzX2Z0cmFucykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBwb2htZWxmc19mdHJhbnNfZXhpdCh2b2lkKQoreworCXZmcmVlKHBvaG1lbGZzX2Z0cmFucyk7Cit9CisKK3ZvaWQgcG9obWVsZnNfZnRyYW5zX2NsZWFuKHU2NCBpZCkKK3sKKwlpZiAocG9obWVsZnNfZnRyYW5zKSB7CisJCXUzMiBpID0gaWQgJiAweGZmZmZmZmZmOworCQlpbnQgaWR4ID0gaSAlIHBvaG1lbGZzX2Z0cmFuc19zaXplOworCisJCXBvaG1lbGZzX2Z0cmFuc1tpZHhdID0gMDsKKwl9Cit9CisKK3ZvaWQgcG9obWVsZnNfZnRyYW5zX3VwZGF0ZSh1NjQgaWQpCit7CisJaWYgKHBvaG1lbGZzX2Z0cmFucykgeworCQl1MzIgaSA9IGlkICYgMHhmZmZmZmZmZjsKKwkJaW50IGlkeCA9IGkgJSBwb2htZWxmc19mdHJhbnNfc2l6ZTsKKworCQlwb2htZWxmc19mdHJhbnNbaWR4XSA9IGk7CisJfQorfQorCitpbnQgcG9obWVsZnNfZnRyYW5zX2NoZWNrKHU2NCBpZCkKK3sKKwlpZiAocG9obWVsZnNfZnRyYW5zKSB7CisJCXUzMiBpID0gaWQgJiAweGZmZmZmZmZmOworCQlpbnQgaWR4ID0gaSAlIHBvaG1lbGZzX2Z0cmFuc19zaXplOworCisJCXJldHVybiAocG9obWVsZnNfZnRyYW5zW2lkeF0gPT0gaSk7CisJfQorCisJcmV0dXJuIC0xOworfQorCisvKgorICogQXN5bmMgbWFjaGluZXJ5IGxpdmVzIGhlcmUuCisgKiBBbGwgY29tbWFuZHMgYmVpbmcgc2VudCB0byBzZXJ2ZXIgZG8gX25vdF8gcmVxdWlyZSBzeW5jIHJlcGx5LAorICogaW5zdGVhZCwgaWYgaXQgaXMgcmVhbGx5IG5lZWRlZCwgbGlrZSByZWFkZGlyIG9yIHJlYWRwYWdlLCBjYWxsZXIKKyAqIHNsZWVwcyB3YWl0aW5nIGZvciBkYXRhLCB3aGljaCB3aWxsIGJlIHBsYWNlZCBpbnRvIHByb3ZpZGVkIGJ1ZmZlcgorICogYW5kIGNhbGxlciB3aWxsIGJlIGF3YWtlbmVkLgorICoKKyAqIEV2ZXJ5IGNvbW1hbmQgcmVzcG9uc2UgY2FuIGNvbWUgd2l0aG91dCBzb21lIGxpc3RlbmVyLiBGb3IgZXhhbXBsZQorICogcmVhZGRpciByZXNwb25zZSB3aWxsIGFkZCBuZXcgb2JqZWN0cyBpbnRvIGNhY2hlIHdpdGhvdXQgYXBwcm9wcmlhdGUKKyAqIHJlcXVlc3QgZnJvbSB1c2Vyc3BhY2UuIFRoaXMgaXMgdXNlZCBpbiBjYWNoZSBjb2hlcmVuY3kuCisgKgorICogSWYgb2JqZWN0IGlzIG5vdCBmb3VuZCBmb3IgZ2l2ZW4gZGF0YSwgaXQgaXMgZGlzY2FyZGVkLgorICoKKyAqIEFsbCByZXF1ZXN0cyBhcmUgcmVjZWl2ZWQgYnkgZGVkaWNhdGVkIGtlcm5lbCB0aHJlYWQuCisgKi8KKworLyoKKyAqIEJhc2ljIG5ldHdvcmsgc2VuZGluZy9yZWNlaXZpbmcgZnVuY3Rpb25zLgorICogQmxvY2tlZCBtb2RlIGlzIHVzZWQuCisgKi8KK3N0YXRpYyBpbnQgbmV0ZnNfZGF0YV9yZWN2KHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QsIHZvaWQgKmJ1ZiwgdTY0IHNpemUpCit7CisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGt2ZWMgaW92OworCWludCBlcnI7CisKKwlCVUdfT04oIXNpemUpOworCisJaW92Lmlvdl9iYXNlID0gYnVmOworCWlvdi5pb3ZfbGVuID0gc2l6ZTsKKworCW1zZy5tc2dfaW92ID0gKHN0cnVjdCBpb3ZlYyAqKSZpb3Y7CisJbXNnLm1zZ19pb3ZsZW4gPSAxOworCW1zZy5tc2dfbmFtZSA9IE5VTEw7CisJbXNnLm1zZ19uYW1lbGVuID0gMDsKKwltc2cubXNnX2NvbnRyb2wgPSBOVUxMOworCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisJbXNnLm1zZ19mbGFncyA9IE1TR19ET05UV0FJVDsKKworCWVyciA9IGtlcm5lbF9yZWN2bXNnKHN0LT5zb2NrZXQsICZtc2csICZpb3YsIDEsIGlvdi5pb3ZfbGVuLAorCQkJbXNnLm1zZ19mbGFncyk7CisJaWYgKGVyciA8PSAwKSB7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byByZWN2IGRhdGE6IHNpemU6ICVsbHUsIGVycjogJWQuXG4iLCBfX2Z1bmNfXywgc2l6ZSwgZXJyKTsKKwkJaWYgKGVyciA9PSAwKQorCQkJZXJyID0gLUVDT05OUkVTRVQ7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19kYXRhX3JlY3Yoc3RydWN0IG5ldGZzX3N0YXRlICpzdCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJdW5zaWduZWQgaW50IHJldmVudHMgPSAwOworCXVuc2lnbmVkIGludCBlcnJfbWFzayA9IFBPTExFUlIgfCBQT0xMSFVQIHwgUE9MTFJESFVQOworCXVuc2lnbmVkIGludCBtYXNrID0gZXJyX21hc2sgfCBQT0xMSU47CisJaW50IGVyciA9IDA7CisKKwl3aGlsZSAoc2l6ZSAmJiAhZXJyKSB7CisJCXJldmVudHMgPSBuZXRmc19zdGF0ZV9wb2xsKHN0KTsKKworCQlpZiAoIShyZXZlbnRzICYgbWFzaykpIHsKKwkJCURFRklORV9XQUlUKHdhaXQpOworCisJCQlmb3IgKDs7KSB7CisJCQkJcHJlcGFyZV90b193YWl0KCZzdC0+dGhyZWFkX3dhaXQsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQkJCWJyZWFrOworCisJCQkJcmV2ZW50cyA9IG5ldGZzX3N0YXRlX3BvbGwoc3QpOworCisJCQkJaWYgKHJldmVudHMgJiBtYXNrKQorCQkJCQlicmVhazsKKworCQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCQkJYnJlYWs7CisKKwkJCQlzY2hlZHVsZSgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZmluaXNoX3dhaXQoJnN0LT50aHJlYWRfd2FpdCwgJndhaXQpOworCQl9CisKKwkJZXJyID0gMDsKKwkJbmV0ZnNfc3RhdGVfbG9jayhzdCk7CisJCWlmIChzdC0+c29ja2V0ICYmIChzdC0+cmVhZF9zb2NrZXQgPT0gc3QtPnNvY2tldCkgJiYgKHJldmVudHMgJiBQT0xMSU4pKSB7CisJCQllcnIgPSBuZXRmc19kYXRhX3JlY3Yoc3QsIGRhdGEsIHNpemUpOworCQkJaWYgKGVyciA+IDApIHsKKwkJCQlkYXRhICs9IGVycjsKKwkJCQlzaXplIC09IGVycjsKKwkJCQllcnIgPSAwOworCQkJfSBlbHNlIGlmIChlcnIgPT0gMCkKKwkJCQllcnIgPSAtRUNPTk5SRVNFVDsKKwkJfQorCisJCWlmIChyZXZlbnRzICYgZXJyX21hc2spIHsKKwkJCXByaW50aygiJXM6IHJldmVudHM6ICV4LCBzb2NrZXQ6ICVwLCBzaXplOiAldSwgZXJyOiAlZC5cbiIsCisJCQkJCV9fZnVuY19fLCByZXZlbnRzLCBzdC0+c29ja2V0LCBzaXplLCBlcnIpOworCQkJZXJyID0gLUVDT05OUkVTRVQ7CisJCX0KKwkJbmV0ZnNfc3RhdGVfdW5sb2NrKHN0KTsKKworCQlpZiAoZXJyIDwgMCkgeworCQkJaWYgKG5ldGZzX3N0YXRlX3RyeWxvY2tfc2VuZChzdCkpIHsKKwkJCQluZXRmc19zdGF0ZV9leGl0KHN0KTsKKwkJCQllcnIgPSBuZXRmc19zdGF0ZV9pbml0KHN0KTsKKwkJCQlpZiAoIWVycikKKwkJCQkJZXJyID0gLUVBR0FJTjsKKwkJCQluZXRmc19zdGF0ZV91bmxvY2tfc2VuZChzdCk7CisJCQl9IGVsc2UgeworCQkJCXN0LT5uZWVkX3Jlc2V0ID0gMTsKKwkJCX0KKwkJfQorCisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQllcnIgPSAtRU5PREVWOworCisJCWlmIChlcnIpCisJCQlwcmludGsoIiVzOiBzb2NrZXQ6ICVwLCByZWFkX3NvY2tldDogJXAsIHJldmVudHM6ICV4LCByZXZfZXJyb3I6ICVkLCAiCisJCQkJCSJzaG91bGRfc3RvcDogJWQsIHNpemU6ICV1LCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgc3QtPnNvY2tldCwgc3QtPnJlYWRfc29ja2V0LAorCQkJCXJldmVudHMsIHJldmVudHMgJiBlcnJfbWFzaywga3RocmVhZF9zaG91bGRfc3RvcCgpLCBzaXplLCBlcnIpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2ludCBwb2htZWxmc19kYXRhX3JlY3ZfYW5kX2NoZWNrKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKQoreworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCWludCBlcnI7CisKKwllcnIgPSBwb2htZWxmc19kYXRhX3JlY3Yoc3QsIGRhdGEsIHNpemUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gcG9obWVsZnNfY3J5cHRvX3Byb2Nlc3NfaW5wdXRfZGF0YSgmc3QtPmVuZywgY21kLT5pdiwgZGF0YSwgTlVMTCwgc2l6ZSk7Cit9CisKKy8qCisgKiBQb2xsaW5nIG1hY2hpbmVyeS4KKyAqLworCitzdHJ1Y3QgbmV0ZnNfcG9sbF9oZWxwZXIKK3sKKwlwb2xsX3RhYmxlIAkJcHQ7CisJc3RydWN0IG5ldGZzX3N0YXRlCSpzdDsKK307CisKK3N0YXRpYyBpbnQgbmV0ZnNfcXVldWVfd2FrZSh3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsIGludCBzeW5jLCB2b2lkICprZXkpCit7CisJc3RydWN0IG5ldGZzX3N0YXRlICpzdCA9IGNvbnRhaW5lcl9vZih3YWl0LCBzdHJ1Y3QgbmV0ZnNfc3RhdGUsIHdhaXQpOworCisJd2FrZV91cCgmc3QtPnRocmVhZF93YWl0KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbmV0ZnNfcXVldWVfZnVuYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgd2FpdF9xdWV1ZV9oZWFkX3QgKndoZWFkLAorCQkJCSBwb2xsX3RhYmxlICpwdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0ID0gY29udGFpbmVyX29mKHB0LCBzdHJ1Y3QgbmV0ZnNfcG9sbF9oZWxwZXIsIHB0KS0+c3Q7CisKKwlzdC0+d2hlYWQgPSB3aGVhZDsKKwlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZzdC0+d2FpdCwgbmV0ZnNfcXVldWVfd2FrZSk7CisJYWRkX3dhaXRfcXVldWUod2hlYWQsICZzdC0+d2FpdCk7Cit9CisKK3N0YXRpYyB2b2lkIG5ldGZzX3BvbGxfZXhpdChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCWlmIChzdC0+d2hlYWQpIHsKKwkJcmVtb3ZlX3dhaXRfcXVldWUoc3QtPndoZWFkLCAmc3QtPndhaXQpOworCQlzdC0+d2hlYWQgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBuZXRmc19wb2xsX2luaXQoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfcG9sbF9oZWxwZXIgcGg7CisKKwlwaC5zdCA9IHN0OworCWluaXRfcG9sbF9mdW5jcHRyKCZwaC5wdCwgJm5ldGZzX3F1ZXVlX2Z1bmMpOworCisJc3QtPnNvY2tldC0+b3BzLT5wb2xsKE5VTEwsIHN0LT5zb2NrZXQsICZwaC5wdCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHZXQgcmVzcG9uc2UgZm9yIHJlYWRwYWdlIGNvbW1hbmQuIFdlIHNlYXJjaCBpbm9kZSBhbmQgcGFnZSBpbiBpdHMgbWFwcGluZworICogYW5kIGNvcHkgZGF0YSBpbnRvLiBJZiBpdCB3YXMgYXN5bmMgcmVxdWVzdCwgdGhlbiB3ZSBxdWV1ZSBwYWdlIGludG8gc2hhcmVkCisgKiBkYXRhIGFuZCB3YWtldXAgbGlzdGVuZXIsIHdobyB3aWxsIGNvcHkgaXQgdG8gdXNlcnNwYWNlLgorICoKKyAqIFRoZXJlIGlzIGEgd29yayBpbiBwcm9ncmVzcyBvZiBhbGxvd2luZyB0byBjYWxsIGNvcHlfdG9fdXNlcigpIGRpcmVjdGx5IGZyb20KKyAqIGFzeW5jIHJlY2VpdmluZyBrZXJuZWwgdGhyZWFkLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlYWRfcGFnZV9yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBwb2htZWxmc19zYiAqcHNiID0gc3QtPnBzYjsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBlcnIgPSAwOworCisJaWYgKGNtZC0+c2l6ZSA+IFBBR0VfQ0FDSEVfU0laRSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlpbm9kZSA9IGlsb29rdXAoc3QtPnBzYi0+c2IsIGNtZC0+aWQpOworCWlmICghaW5vZGUpIHsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGZpbmQgaW5vZGU6IGlkOiAlbGx1LlxuIiwgX19mdW5jX18sIGNtZC0+aWQpOworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlwYWdlID0gZmluZF9nZXRfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBjbWQtPnN0YXJ0ID4+IFBBR0VfQ0FDSEVfU0hJRlQpOworCWlmICghcGFnZSB8fCAhUGFnZUxvY2tlZChwYWdlKSkgeworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gZmluZC9sb2NrIHBhZ2U6IHBhZ2U6ICVwLCBpZDogJWxsdSwgc3RhcnQ6ICVsbHUsIGluZGV4OiAlbGx1LlxuIiwKKwkJCQlfX2Z1bmNfXywgcGFnZSwgY21kLT5pZCwgY21kLT5zdGFydCwgY21kLT5zdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZUKTsKKworCQl3aGlsZSAoY21kLT5zaXplKSB7CisJCQl1bnNpZ25lZCBpbnQgc3ogPSBtaW4oY21kLT5zaXplLCBzdC0+c2l6ZSk7CisKKwkJCWVyciA9IHBvaG1lbGZzX2RhdGFfcmVjdihzdCwgc3QtPmRhdGEsIHN6KTsKKwkJCWlmIChlcnIpCisJCQkJYnJlYWs7CisKKwkJCWNtZC0+c2l6ZSAtPSBzejsKKwkJfQorCisJCWVyciA9IC1FTk9ERVY7CisJCWlmIChwYWdlKQorCQkJZ290byBlcnJfb3V0X3BhZ2VfcHV0OworCQlnb3RvIGVycl9vdXRfcHV0OworCX0KKworCWlmIChjbWQtPnNpemUpIHsKKwkJdm9pZCAqYWRkcjsKKworCQlhZGRyID0ga21hcChwYWdlKTsKKwkJZXJyID0gcG9obWVsZnNfZGF0YV9yZWN2KHN0LCBhZGRyLCBjbWQtPnNpemUpOworCQlrdW5tYXAocGFnZSk7CisKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9wYWdlX3VubG9jazsKKwl9CisKKwlkcHJpbnRrKCIlczogcGFnZTogJXAsIHN0YXJ0OiAlbGx1LCBzaXplOiAldSwgbG9ja2VkOiAlZC5cbiIsCisJCV9fZnVuY19fLCBwYWdlLCBjbWQtPnN0YXJ0LCBjbWQtPnNpemUsIFBhZ2VMb2NrZWQocGFnZSkpOworCisJU2V0UGFnZUNoZWNrZWQocGFnZSk7CisJaWYgKChwc2ItPmhhc2hfc3RyaW5nIHx8IHBzYi0+Y2lwaGVyX3N0cmluZykgJiYgcHNiLT5wZXJmb3JtX2NyeXB0byAmJiBjbWQtPnNpemUpIHsKKwkJZXJyID0gcG9obWVsZnNfY3J5cHRvX3Byb2Nlc3NfaW5wdXRfcGFnZSgmc3QtPmVuZywgcGFnZSwgY21kLT5zaXplLCBjbWQtPml2KTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycl9vdXRfcGFnZV91bmxvY2s7CisJfSBlbHNlIHsKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCX0KKworCXBvaG1lbGZzX3B1dF9pbm9kZShQT0hNRUxGU19JKGlub2RlKSk7CisJd2FrZV91cCgmc3QtPnBzYi0+d2FpdCk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9wYWdlX3VubG9jazoKKwlTZXRQYWdlRXJyb3IocGFnZSk7CisJdW5sb2NrX3BhZ2UocGFnZSk7CitlcnJfb3V0X3BhZ2VfcHV0OgorCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKK2Vycl9vdXRfcHV0OgorCXBvaG1lbGZzX3B1dF9pbm9kZShQT0hNRUxGU19JKGlub2RlKSk7CitlcnJfb3V0X2V4aXQ6CisJd2FrZV91cCgmc3QtPnBzYi0+d2FpdCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwb2htZWxmc19jaGVja19uYW1lKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqc3RyLAorCQlzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBwb2htZWxmc19uYW1lICpuOworCWludCBlcnIgPSAwOworCXU2NCBpbm8gPSAwOworCisJbXV0ZXhfbG9jaygmcGFyZW50LT5vZmZzZXRfbG9jayk7CisJbiA9IHBvaG1lbGZzX3NlYXJjaF9oYXNoKHBhcmVudCwgc3RyLT5oYXNoKTsKKwlpZiAobikKKwkJaW5vID0gbi0+aW5vOworCW11dGV4X3VubG9jaygmcGFyZW50LT5vZmZzZXRfbG9jayk7CisKKwlpZiAoIWlubykKKwkJZ290byBvdXQ7CisKKwlpbm9kZSA9IGlsb29rdXAocGFyZW50LT52ZnNfaW5vZGUuaV9zYiwgaW5vKTsKKwlpZiAoIWlub2RlKQorCQlnb3RvIG91dDsKKworCWRwcmludGsoIiVzOiBwYXJlbnQ6ICVsbHUsIGlub2RlOiAlbGx1LlxuIiwgX19mdW5jX18sIHBhcmVudC0+aW5vLCBpbm8pOworCisJcG9obWVsZnNfZmlsbF9pbm9kZShpbm9kZSwgaW5mbyk7CisJcG9obWVsZnNfcHV0X2lub2RlKFBPSE1FTEZTX0koaW5vZGUpKTsKKwllcnIgPSAtRUVYSVNUOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSZWFkZGlyIHJlc3BvbnNlIGZyb20gc2VydmVyLiBJZiBzcGVjaWFsIGZpZWxkIGlzIHNldCwgd2Ugd2FrZXVwCisgKiBsaXN0ZW5lciAocmVhZGRpcigpIGNhbGwpLCB3aGljaCB3aWxsIGNvcHkgZGF0YSB0byB1c2Vyc3BhY2UuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfcmVhZGRpcl9yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKmluZm87CisJc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQgPSBOVUxMLCAqbnBpOworCWludCBlcnIgPSAwLCBsYXN0ID0gY21kLT5leHQ7CisJc3RydWN0IHFzdHIgc3RyOworCisJaWYgKGNtZC0+c2l6ZSA+IHN0LT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlub2RlID0gaWxvb2t1cChzdC0+cHNiLT5zYiwgY21kLT5pZCk7CisJaWYgKCFpbm9kZSkgeworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gZmluZCBpbm9kZTogaWQ6ICVsbHUuXG4iLCBfX2Z1bmNfXywgY21kLT5pZCk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlwYXJlbnQgPSBQT0hNRUxGU19JKGlub2RlKTsKKworCWlmICghY21kLT5zaXplICYmIGNtZC0+c3RhcnQpIHsKKwkJZXJyID0gLWNtZC0+c3RhcnQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjbWQtPnNpemUpIHsKKwkJY2hhciAqbmFtZTsKKworCQllcnIgPSBwb2htZWxmc19kYXRhX3JlY3ZfYW5kX2NoZWNrKHN0LCBzdC0+ZGF0YSwgY21kLT5zaXplKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9wdXQ7CisKKwkJaW5mbyA9IChzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqKShzdC0+ZGF0YSk7CisKKwkJbmFtZSA9IChjaGFyICopKGluZm8gKyAxKTsKKwkJc3RyLmxlbiA9IGNtZC0+c2l6ZSAtIHNpemVvZihzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbykgLSAxIC0gY21kLT5jcGFkOworCQluYW1lW3N0ci5sZW5dID0gMDsKKwkJc3RyLm5hbWUgPSBuYW1lOworCQlzdHIuaGFzaCA9IGpoYXNoKHN0ci5uYW1lLCBzdHIubGVuLCAwKTsKKworCQluZXRmc19jb252ZXJ0X2lub2RlX2luZm8oaW5mbyk7CisKKwkJaWYgKHBhcmVudCkgeworCQkJZXJyID0gcG9obWVsZnNfY2hlY2tfbmFtZShwYXJlbnQsICZzdHIsIGluZm8pOworCQkJaWYgKGVycikgeworCQkJCWlmIChlcnIgPT0gLUVFWElTVCkKKwkJCQkJZXJyID0gMDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCisJCWluZm8tPmlubyA9IGNtZC0+c3RhcnQ7CisJCWlmICghaW5mby0+aW5vKQorCQkJaW5mby0+aW5vID0gcG9obWVsZnNfbmV3X2lubyhzdC0+cHNiKTsKKworCQlkcHJpbnRrKCIlczogcGFyZW50OiAlbGx1LCBpbm86ICVsbHUsIG5hbWU6ICclcycsIGhhc2g6ICV4LCBsZW46ICV1LCBtb2RlOiAlby5cbiIsCisJCQkJX19mdW5jX18sIHBhcmVudC0+aW5vLCBpbmZvLT5pbm8sIHN0ci5uYW1lLCBzdHIuaGFzaCwgc3RyLmxlbiwKKwkJCQlpbmZvLT5tb2RlKTsKKworCQlucGkgPSBwb2htZWxmc19uZXdfaW5vZGUoc3QtPnBzYiwgcGFyZW50LCAmc3RyLCBpbmZvLCAwKTsKKwkJaWYgKElTX0VSUihucGkpKSB7CisJCQllcnIgPSBQVFJfRVJSKG5waSk7CisKKwkJCWlmIChlcnIgIT0gLUVFWElTVCkKKwkJCQlnb3RvIGVycl9vdXRfcHV0OworCQl9IGVsc2UgeworCQkJc2V0X2JpdChORVRGU19JTk9ERV9SRU1PVEVfU1lOQ0VELCAmbnBpLT5zdGF0ZSk7CisJCQljbGVhcl9iaXQoTkVURlNfSU5PREVfT1dORUQsICZucGktPnN0YXRlKTsKKwkJfQorCX0KK291dDoKKwlpZiAobGFzdCkgeworCQlzZXRfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9ESVJfU1lOQ0VELCAmcGFyZW50LT5zdGF0ZSk7CisJCXNldF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJnBhcmVudC0+c3RhdGUpOworCQl3YWtlX3VwKCZzdC0+cHNiLT53YWl0KTsKKwl9CisJcG9obWVsZnNfcHV0X2lub2RlKHBhcmVudCk7CisKKwlyZXR1cm4gZXJyOworCitlcnJfb3V0X3B1dDoKKwljbGVhcl9iaXQoTkVURlNfSU5PREVfUkVNT1RFX0RJUl9TWU5DRUQsICZwYXJlbnQtPnN0YXRlKTsKKwlwcmludGsoIiVzOiBwYXJlbnQ6ICVsbHUsIGlubzogJWxsdSwgY21kX2lkOiAlbGx1LlxuIiwgX19mdW5jX18sIHBhcmVudC0+aW5vLCBjbWQtPnN0YXJ0LCBjbWQtPmlkKTsKKwlwb2htZWxmc19wdXRfaW5vZGUocGFyZW50KTsKKwl3YWtlX3VwKCZzdC0+cHNiLT53YWl0KTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogTG9va3VwIGNvbW1hbmQgcmVzcG9uc2UuCisgKiBJdCBzZWFyY2hlcyBmb3IgaW5vZGUgdG8gYmUgbG9va2VkIGF0IChpZiBpdCBleGlzdHMpIGFuZCBzdWJzdGl0dXRlcworICogaXRzIGlub2RlIGluZm9ybWF0aW9uIChzaXplLCBwZXJtaXNzaW9uLCBtb2RlIGFuZCBzbyBvbiksIGlmIGlub2RlIGRvZXMKKyAqIG5vdCBleGlzdCwgbmV3IG9uZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIGluc2VydGVkIGludG8gY2FjaGVzLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX2xvb2t1cF9yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCXN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICppbmZvOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50ID0gTlVMTCwgKm5waTsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKwljaGFyICpuYW1lOworCisJaW5vZGUgPSBpbG9va3VwKHN0LT5wc2ItPnNiLCBjbWQtPmlkKTsKKwlpZiAoIWlub2RlKSB7CisJCXByaW50aygiJXM6IGxvb2t1cCByZXNwb25zZTogaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LCBzaXplOiAldS5cbiIsCisJCQkJX19mdW5jX18sIGNtZC0+aWQsIGNtZC0+c3RhcnQsIGNtZC0+c2l6ZSk7CisJCWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX291dF9leGl0OworCX0KKwlwYXJlbnQgPSBQT0hNRUxGU19JKGlub2RlKTsKKworCWlmICghY21kLT5zaXplKSB7CisJCWVyciA9IC1jbWQtPnN0YXJ0OworCQlnb3RvIGVycl9vdXRfcHV0OworCX0KKworCWlmIChjbWQtPnNpemUgPCBzaXplb2Yoc3RydWN0IG5ldGZzX2lub2RlX2luZm8pKSB7CisJCXByaW50aygiJXM6IGJyb2tlbiBsb29rdXAgcmVzcG9uc2U6IGlkOiAlbGx1LCBzdGFydDogJWxsdSwgc2l6ZTogJXUuXG4iLAorCQkJCV9fZnVuY19fLCBjbWQtPmlkLCBjbWQtPnN0YXJ0LCBjbWQtPnNpemUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXRfcHV0OworCX0KKworCWVyciA9IHBvaG1lbGZzX2RhdGFfcmVjdl9hbmRfY2hlY2soc3QsIHN0LT5kYXRhLCBjbWQtPnNpemUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9wdXQ7CisKKwlpbmZvID0gKHN0cnVjdCBuZXRmc19pbm9kZV9pbmZvICopKHN0LT5kYXRhKTsKKwluYW1lID0gKGNoYXIgKikoaW5mbyArIDEpOworCisJbmV0ZnNfY29udmVydF9pbm9kZV9pbmZvKGluZm8pOworCisJaW5mby0+aW5vID0gY21kLT5zdGFydDsKKwlpZiAoIWluZm8tPmlubykKKwkJaW5mby0+aW5vID0gcG9obWVsZnNfbmV3X2lubyhzdC0+cHNiKTsKKworCWRwcmludGsoIiVzOiBwYXJlbnQ6ICVsbHUsIGlubzogJWxsdSwgbmFtZTogJyVzJywgc3RhcnQ6ICVsbHUuXG4iLAorCQkJX19mdW5jX18sIHBhcmVudC0+aW5vLCBpbmZvLT5pbm8sIG5hbWUsIGNtZC0+c3RhcnQpOworCisJaWYgKGNtZC0+c3RhcnQpCisJCW5waSA9IHBvaG1lbGZzX25ld19pbm9kZShzdC0+cHNiLCBwYXJlbnQsIE5VTEwsIGluZm8sIDApOworCWVsc2UgeworCQlzdHJ1Y3QgcXN0ciBzdHI7CisKKwkJc3RyLm5hbWUgPSBuYW1lOworCQlzdHIubGVuID0gY21kLT5zaXplIC0gc2l6ZW9mKHN0cnVjdCBuZXRmc19pbm9kZV9pbmZvKSAtIDEgLSBjbWQtPmNwYWQ7CisJCXN0ci5oYXNoID0gamhhc2gobmFtZSwgc3RyLmxlbiwgMCk7CisKKwkJbnBpID0gcG9obWVsZnNfbmV3X2lub2RlKHN0LT5wc2IsIHBhcmVudCwgJnN0ciwgaW5mbywgMCk7CisJfQorCWlmIChJU19FUlIobnBpKSkgeworCQllcnIgPSBQVFJfRVJSKG5waSk7CisKKwkJaWYgKGVyciAhPSAtRUVYSVNUKQorCQkJZ290byBlcnJfb3V0X3B1dDsKKwl9IGVsc2UgeworCQlzZXRfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZucGktPnN0YXRlKTsKKwkJY2xlYXJfYml0KE5FVEZTX0lOT0RFX09XTkVELCAmbnBpLT5zdGF0ZSk7CisJfQorCisJY2xlYXJfYml0KE5FVEZTX0NPTU1BTkRfUEVORElORywgJnBhcmVudC0+c3RhdGUpOworCXBvaG1lbGZzX3B1dF9pbm9kZShwYXJlbnQpOworCisJd2FrZV91cCgmc3QtPnBzYi0+d2FpdCk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF9wdXQ6CisJcG9obWVsZnNfcHV0X2lub2RlKHBhcmVudCk7CitlcnJfb3V0X2V4aXQ6CisJY2xlYXJfYml0KE5FVEZTX0NPTU1BTkRfUEVORElORywgJnBhcmVudC0+c3RhdGUpOworCXdha2VfdXAoJnN0LT5wc2ItPndhaXQpOworCXByaW50aygiJXM6IGlub2RlOiAlcCwgaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LCBzaXplOiAldSwgZXJyOiAlZC5cbiIsCisJCQlfX2Z1bmNfXywgaW5vZGUsIGNtZC0+aWQsIGNtZC0+c3RhcnQsIGNtZC0+c2l6ZSwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ3JlYXRlIHJlc3BvbnNlLCBqdXN0IG1hcmtzIGxvY2FsIGlub2RlIGFzICdjcmVhdGVkJywgc28gdGhhdCB3cml0ZWJhY2sKKyAqIGZvciBhbnkgb2YgaXRzIGNoaWxkcmVuIChvciBvd24pIHdvdWxkIG5vdCB0cnkgdG8gc3luYyBpdCBhZ2Fpbi4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19jcmVhdGVfcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGk7CisKKwlpbm9kZSA9IGlsb29rdXAoc3QtPnBzYi0+c2IsIGNtZC0+aWQpOworCWlmICghaW5vZGUpIHsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGZpbmQgaW5vZGU6IGlkOiAlbGx1LCBzdGFydDogJWxsdS5cbiIsCisJCQkJX19mdW5jX18sIGNtZC0+aWQsIGNtZC0+c3RhcnQpOworCQlnb3RvIGVycl9vdXRfZXhpdDsKKwl9CisKKwlwaSA9IFBPSE1FTEZTX0koaW5vZGUpOworCisJLyoKKwkgKiBUbyBsb2NrIG9yIG5vdCB0byBsb2NrPworCSAqIFdlIGFjdHVhbGx5IGRvIG5vdCBjYXJlIGlmIGl0IHJhY2VzLi4uCisJICovCisJaWYgKGNtZC0+c3RhcnQpCisJCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKKwlzZXRfYml0KE5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsICZwaS0+c3RhdGUpOworCisJcG9obWVsZnNfcHV0X2lub2RlKHBpKTsKKworCXdha2VfdXAoJnN0LT5wc2ItPndhaXQpOworCXJldHVybiAwOworCitlcnJfb3V0X2V4aXQ6CisJd2FrZV91cCgmc3QtPnBzYi0+d2FpdCk7CisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKKy8qCisgKiBPYmplY3QgcmVtb3ZlIHJlc3BvbnNlLiBKdXN0IHNheXMgdGhhdCByZW1vdmUgcmVxdWVzdCBoYXMgYmVlbiByZWNlaXZlZC4KKyAqIFVzZWQgaW4gY2FjaGUgY29oZXJlbmN5IHByb3RvY29sLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3JlbW92ZV9yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCWludCBlcnI7CisKKwllcnIgPSBwb2htZWxmc19kYXRhX3JlY3ZfYW5kX2NoZWNrKHN0LCBzdC0+ZGF0YSwgY21kLT5zaXplKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZHByaW50aygiJXM6IHBhcmVudDogJWxsdSwgcGF0aDogJyVzJy5cbiIsIF9fZnVuY19fLCBjbWQtPmlkLCAoY2hhciAqKXN0LT5kYXRhKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVHJhbnNhY3Rpb24gcmVwbHkgcHJvY2Vzc2luZy4KKyAqCisgKiBGaW5kIHRyYW5zYWN0aW9uIGJhc2VkIG9uIGl0cyBnZW5lcmF0aW9uIG51bWJlciwgYnVtcCBpdHMgcmVmZXJlbmNlIGNvdW50ZXIsCisgKiBzbyB0aGF0IG5vbmUgY291bGQgZnJlZSBpdCB1bmRlciB1cywgZHJvcCBmcm9tIHRoZSB0cmVlcyBhbmQgbGlzdHMgYW5kCisgKiBkcm9wIHJlZmVyZW5jZSBjb3VudGVyLiBXaGVuIGl0IGhpdHMgemVybyAod2hlbiBhbGwgZGVzdGluYXRpb25zIHJlcGxpZWQKKyAqIGFuZCBhbGwgdGltZW91dCBoYW5kbGVkIGJ5IGFzeW5jIHNjYW5uaW5nIGNvZGUpLCBjb21wbGV0aW9uIHdpbGwgYmUgY2FsbGVkCisgKiBhbmQgdHJhbnNhY3Rpb24gd2lsbCBiZSBmcmVlZC4KKyAqLworc3RhdGljIGludCBwb2htZWxmc190cmFuc2FjdGlvbl9yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdDsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQgPSBOVUxMOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCXNob3J0IGVyciA9IChzaWduZWQpY21kLT5leHQ7CisKKwltdXRleF9sb2NrKCZzdC0+dHJhbnNfbG9jayk7CisJZHN0ID0gbmV0ZnNfdHJhbnNfc2VhcmNoKHN0LCBjbWQtPnN0YXJ0KTsKKwlpZiAoZHN0KSB7CisJCW5ldGZzX3RyYW5zX3JlbW92ZV9ub2xvY2soZHN0LCBzdCk7CisJCXQgPSBkc3QtPnRyYW5zOworCisJCXBvaG1lbGZzX2Z0cmFuc191cGRhdGUoY21kLT5zdGFydCk7CisJfQorCW11dGV4X3VubG9jaygmc3QtPnRyYW5zX2xvY2spOworCisJaWYgKCF0KSB7CisJCWludCBjaGVjayA9IHBvaG1lbGZzX2Z0cmFuc19jaGVjayhjbWQtPnN0YXJ0KTsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGZpbmQgdHJhbnNhY3Rpb246IHN0YXJ0OiAlbGx1OiBpZDogJWxsdSwgc2l6ZTogJXUsIGV4dDogJXUsIGRvdWJsZTogJWQuXG4iLAorCQkJCV9fZnVuY19fLCBjbWQtPnN0YXJ0LCBjbWQtPmlkLCBjbWQtPnNpemUsIGNtZC0+ZXh0LCBjaGVjayk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXQtPnJlc3VsdCA9IGVycjsKKwluZXRmc190cmFuc19kcm9wX2RzdF9ub3N0YXRlKGRzdCk7CisKK291dDoKKwl3YWtlX3VwKCZzdC0+cHNiLT53YWl0KTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogSW5vZGUgbWV0YWRhdGEgY2FjaGUgY29oZXJlbmN5IG1lc3NhZ2UuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfcGFnZV9jYWNoZV9yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9ICZzdC0+Y21kOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlkcHJpbnRrKCIlczogc3Q6ICVwLCBpZDogJWxsdSwgc3RhcnQ6ICVsbHUsIHNpemU6ICV1LlxuIiwgX19mdW5jX18sIHN0LCBjbWQtPmlkLCBjbWQtPnN0YXJ0LCBjbWQtPnNpemUpOworCisJaW5vZGUgPSBpbG9va3VwKHN0LT5wc2ItPnNiLCBjbWQtPmlkKTsKKwlpZiAoIWlub2RlKSB7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBmaW5kIGlub2RlOiBpZDogJWxsdS5cbiIsIF9fZnVuY19fLCBjbWQtPmlkKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJc2V0X2JpdChORVRGU19JTk9ERV9ORUVEX0ZMVVNILCAmUE9ITUVMRlNfSShpbm9kZSktPnN0YXRlKTsKKwlwb2htZWxmc19wdXRfaW5vZGUoUE9ITUVMRlNfSShpbm9kZSkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSb290IGNhcGFiaWxpdGllcyByZXNwb25zZTogZXhwb3J0IHN0YXRpc3RpY3MKKyAqIGxpa2UgdXNlZCBhbmQgYXZhaWxhYmxlIHNpemUsIG51bWJlciBvZiBmaWxlcyBhbmQgZGlycywKKyAqIHBlcm1pc3Npb25zLgorICovCitzdGF0aWMgaW50IHBvaG1lbGZzX3Jvb3RfY2FwX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJc3RydWN0IG5ldGZzX3Jvb3RfY2FwYWJpbGl0aWVzICpjYXA7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBzdC0+cHNiOworCisJaWYgKGNtZC0+c2l6ZSAhPSBzaXplb2Yoc3RydWN0IG5ldGZzX3Jvb3RfY2FwYWJpbGl0aWVzKSkgeworCQlwc2ItPmZsYWdzID0gRVBST1RPOworCQl3YWtlX3VwKCZwc2ItPndhaXQpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwljYXAgPSBzdC0+ZGF0YTsKKworCW5ldGZzX2NvbnZlcnRfcm9vdF9jYXBhYmlsaXRpZXMoY2FwKTsKKworCWlmIChwc2ItPnRvdGFsX3NpemUgPCBjYXAtPnVzZWQgKyBjYXAtPmF2YWlsKQorCQlwc2ItPnRvdGFsX3NpemUgPSBjYXAtPnVzZWQgKyBjYXAtPmF2YWlsOworCWlmIChjYXAtPmF2YWlsKQorCQlwc2ItPmF2YWlsX3NpemUgPSBjYXAtPmF2YWlsOworCXBzYi0+c3RhdGVfZmxhZ3MgPSBjYXAtPmZsYWdzOworCisJaWYgKHBzYi0+c3RhdGVfZmxhZ3MgJiBQT0hNRUxGU19GTEFHU19STykgeworCQlwc2ItPnNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTW91bnRpbmcgUE9ITUVMRlMgKCVkKSByZWFkLW9ubHkuXG4iLCBwc2ItPmlkeCk7CisJfQorCisJaWYgKHBzYi0+c3RhdGVfZmxhZ3MgJiBQT0hNRUxGU19GTEFHU19YQVRUUikKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTW91bnRpbmcgUE9ITUVMRlMgKCVkKSAiCisJCQkid2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzIHN1cHBvcnQuXG4iLCBwc2ItPmlkeCk7CisKKwlpZiAoYXRvbWljX3JlYWQoJnBzYi0+dG90YWxfaW5vZGVzKSA8PSAxKQorCQlhdG9taWNfbG9uZ19zZXQoJnBzYi0+dG90YWxfaW5vZGVzLCBjYXAtPm5yX2ZpbGVzKTsKKworCWRwcmludGsoIiVzOiB0b3RhbDogJWxsdSwgYXZhaWw6ICVsbHUsIGZsYWdzOiAlbGx4LCBpbm9kZXM6ICVsbHUuXG4iLAorCQlfX2Z1bmNfXywgcHNiLT50b3RhbF9zaXplLCBwc2ItPmF2YWlsX3NpemUsIHBzYi0+c3RhdGVfZmxhZ3MsIGNhcC0+bnJfZmlsZXMpOworCisJcHNiLT5mbGFncyA9IDA7CisJd2FrZV91cCgmcHNiLT53YWl0KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENyeXB0byBjYXBhYmlsaXRpZXMgb2YgdGhlIHNlcnZlciwgd2hlcmUgaXQgc2F5cyB0aGF0CisgKiBpdCBzdXBwb3J0cyBvciBkb2VzIG5vdCByZXF1ZXN0ZWQgaGFzaC9jaXBoZXIgYWxnb3JpdGhtcy4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19jcnlwdG9fY2FwX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJc3RydWN0IG5ldGZzX2NyeXB0b19jYXBhYmlsaXRpZXMgKmNhcDsKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IHN0LT5wc2I7CisJaW50IGVyciA9IDA7CisKKwlpZiAoY21kLT5zaXplICE9IHNpemVvZihzdHJ1Y3QgbmV0ZnNfY3J5cHRvX2NhcGFiaWxpdGllcykpIHsKKwkJcHNiLT5mbGFncyA9IEVQUk9UTzsKKwkJd2FrZV91cCgmcHNiLT53YWl0KTsKKwkJcmV0dXJuIC1FUFJPVE87CisJfQorCisJY2FwID0gc3QtPmRhdGE7CisKKwlkcHJpbnRrKCIlczogY2lwaGVyICclcyc6ICVzLCBoYXNoOiAnJXMnOiAlcy5cbiIsCisJCQlfX2Z1bmNfXywKKwkJCXBzYi0+Y2lwaGVyX3N0cmluZywgKGNhcC0+Y2lwaGVyX3N0cmxlbik/IlNVUFBPUlRFRCI6Ik5PVCBTVVBQT1JURUQiLAorCQkJcHNiLT5oYXNoX3N0cmluZywgKGNhcC0+aGFzaF9zdHJsZW4pPyJTVVBQT1JURUQiOiJOT1QgU1VQUE9SVEVEIik7CisKKwlpZiAoIWNhcC0+aGFzaF9zdHJsZW4pIHsKKwkJaWYgKHBzYi0+aGFzaF9zdHJsZW4gJiYgcHNiLT5jcnlwdG9fZmFpbF91bnN1cHBvcnRlZCkKKwkJCWVyciA9IC1FTk9UU1VQUDsKKwkJcHNiLT5oYXNoX3N0cmxlbiA9IDA7CisJCWtmcmVlKHBzYi0+aGFzaF9zdHJpbmcpOworCQlwc2ItPmhhc2hfc3RyaW5nID0gTlVMTDsKKwl9CisKKwlpZiAoIWNhcC0+Y2lwaGVyX3N0cmxlbikgeworCQlpZiAocHNiLT5jaXBoZXJfc3RybGVuICYmIHBzYi0+Y3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQpCisJCQllcnIgPSAtRU5PVFNVUFA7CisJCXBzYi0+Y2lwaGVyX3N0cmxlbiA9IDA7CisJCWtmcmVlKHBzYi0+Y2lwaGVyX3N0cmluZyk7CisJCXBzYi0+Y2lwaGVyX3N0cmluZyA9IE5VTEw7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENhcGFiaWxpdGllcyBoYW5kc2hha2UgcmVzcG9uc2UuCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfY2FwYWJpbGl0aWVzX3Jlc3BvbnNlKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBwb2htZWxmc19kYXRhX3JlY3Yoc3QsIHN0LT5kYXRhLCBjbWQtPnNpemUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzd2l0Y2ggKGNtZC0+aWQpIHsKKwkJY2FzZSBQT0hNRUxGU19DUllQVE9fQ0FQQUJJTElUSUVTOgorCQkJcmV0dXJuIHBvaG1lbGZzX2NyeXB0b19jYXBfcmVzcG9uc2Uoc3QpOworCQljYXNlIFBPSE1FTEZTX1JPT1RfQ0FQQUJJTElUSUVTOgorCQkJcmV0dXJuIHBvaG1lbGZzX3Jvb3RfY2FwX3Jlc3BvbnNlKHN0KTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIFJlY2VpdmluZyBleHRlbmRlZCBhdHRyaWJ1dGUuCisgKiBEb2VzIG5vdCB3b3JrIHByb3Blcmx5IGlmIHJlY2VpdmVkIHNpemUgaXMgbW9yZSB0aGFuIHJlcXVlc3RlZCBvbmUsCisgKiBpdCBzaG91bGQgbm90IGhhcHBlbiB3aXRoIGN1cnJlbnQgcmVxdWVzdC9yZXBseSBtb2RlbCB0aG91Z2guCisgKi8KK3N0YXRpYyBpbnQgcG9obWVsZnNfZ2V0eGF0dHJfcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IHN0LT5wc2I7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbTsKKwlzaG9ydCBlcnJvciA9IChzaWduZWQgc2hvcnQpY21kLT5leHQsIGVycjsKKwl1bnNpZ25lZCBpbnQgc3osIHRvdGFsX3NpemU7CisKKwltID0gcG9obWVsZnNfbWNhY2hlX3NlYXJjaChwc2IsIGNtZC0+aWQpOworCisJZHByaW50aygiJXM6IGlkOiAlbGx1LCBnZW46ICVsbHUsIGVycjogJWQuXG4iLAorCQlfX2Z1bmNfXywgY21kLT5pZCwgKG0pP20tPmdlbjowLCBlcnJvcik7CisKKwlpZiAoIW0pIHsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGZpbmQgZ2V0eGF0dHIgY2FjaGUgZW50cnk6IGlkOiAlbGx1LlxuIiwgX19mdW5jX18sIGNtZC0+aWQpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlpZiAoY21kLT5zaXplKSB7CisJCXN6ID0gbWluX3QodW5zaWduZWQgaW50LCBjbWQtPnNpemUsIG0tPnNpemUpOworCQllcnIgPSBwb2htZWxmc19kYXRhX3JlY3ZfYW5kX2NoZWNrKHN0LCBtLT5kYXRhLCBzeik7CisJCWlmIChlcnIpIHsKKwkJCWVycm9yID0gZXJyOworCQkJZ290byBvdXQ7CisJCX0KKworCQltLT5zaXplID0gc3o7CisJCXRvdGFsX3NpemUgPSBjbWQtPnNpemUgLSBzejsKKworCQl3aGlsZSAodG90YWxfc2l6ZSkgeworCQkJc3ogPSBtaW4odG90YWxfc2l6ZSwgc3QtPnNpemUpOworCisJCQllcnIgPSBwb2htZWxmc19kYXRhX3JlY3ZfYW5kX2NoZWNrKHN0LCBzdC0+ZGF0YSwgc3opOworCQkJaWYgKGVycikgeworCQkJCWVycm9yID0gZXJyOworCQkJCWJyZWFrOworCQkJfQorCisJCQl0b3RhbF9zaXplIC09IHN6OworCQl9CisJfQorCitvdXQ6CisJbS0+ZXJyID0gZXJyb3I7CisJY29tcGxldGUoJm0tPmNvbXBsZXRlKTsKKwlwb2htZWxmc19tY2FjaGVfcHV0KHBzYiwgbSk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBwb2htZWxmc19kYXRhX2xvY2tfcmVzcG9uc2Uoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiA9IHN0LT5wc2I7CisJc3RydWN0IG5ldGZzX2NtZCAqY21kID0gJnN0LT5jbWQ7CisJc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbTsKKwlzaG9ydCBlcnIgPSAoc2lnbmVkIHNob3J0KWNtZC0+ZXh0OworCXU2NCBpZCA9IGNtZC0+aWQ7CisKKwltID0gcG9obWVsZnNfbWNhY2hlX3NlYXJjaChwc2IsIGlkKTsKKworCWRwcmludGsoIiVzOiBpZDogJWxsdSwgZ2VuOiAlbGx1LCBlcnI6ICVkLlxuIiwKKwkJX19mdW5jX18sIGNtZC0+aWQsIChtKT9tLT5nZW46MCwgZXJyKTsKKworCWlmICghbSkgeworCQlwb2htZWxmc19kYXRhX3JlY3Yoc3QsIHN0LT5kYXRhLCBjbWQtPnNpemUpOworCQlwcmludGsoIiVzOiBmYWlsZWQgdG8gZmluZCBkYXRhIGxvY2sgcmVzcG9uc2U6IGlkOiAlbGx1LlxuIiwgX19mdW5jX18sIGNtZC0+aWQpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlpZiAoY21kLT5zaXplKQorCQllcnIgPSBwb2htZWxmc19kYXRhX3JlY3ZfYW5kX2NoZWNrKHN0LCAmbS0+aW5mbywgY21kLT5zaXplKTsKKworCW0tPmVyciA9IGVycjsKKwljb21wbGV0ZSgmbS0+Y29tcGxldGUpOworCXBvaG1lbGZzX21jYWNoZV9wdXQocHNiLCBtKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5saW5lX18gbmV0ZnNfc3RhdGVfcmVzZXQoc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwluZXRmc19zdGF0ZV9sb2NrX3NlbmQoc3QpOworCW5ldGZzX3N0YXRlX2V4aXQoc3QpOworCW5ldGZzX3N0YXRlX2luaXQoc3QpOworCW5ldGZzX3N0YXRlX3VubG9ja19zZW5kKHN0KTsKK30KKworLyoKKyAqIE1haW4gcmVjZWl2aW5nIGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSBkZWRpY2F0ZWQga2VybmVsIHRocmVhZC4KKyAqLworc3RhdGljIGludCBwb2htZWxmc19yZWN2KHZvaWQgKmRhdGEpCit7CisJaW50IGVyciA9IC1FSU5UUjsKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0ID0gZGF0YTsKKwlzdHJ1Y3QgbmV0ZnNfY21kICpjbWQgPSAmc3QtPmNtZDsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCS8qCisJCSAqIElmIHNvY2tldCB3aWxsIGJlIHJlc2V0IGFmdGVyIHRoaXMgc3RhdGVtZW50LCB0aGVuCisJCSAqIHBvaG1lbGZzX2RhdGFfcmVjdigpIHdpbGwganVzdCBmYWlsIGFuZCBsb29wIHdpbGwKKwkJICogc3RhcnQgYWdhaW4sIHNvIGl0IGNhbiBiZSBkb25lIHdpdGhvdXQgYW55IGxvY2tzLgorCQkgKgorCQkgKiBzdC0+cmVhZF9zb2NrZXQgaXMgbmVlZGVkIHRvIHByZXZlbnRzIHN0YXRlIG1hY2hpbmUKKwkJICogYnJlYWtpbmcgYmV0d2VlbiB0aGlzIGRhdGEgcmVhZGluZyBhbmQgc3Vic2VxdWVudCBvbmUKKwkJICogaW4gcHJvdG9jb2wgc3BlY2lmaWMgZnVuY3Rpb25zIGR1cmluZyBjb25uZWN0aW9uIHJlc2V0LgorCQkgKiBJbiBjYXNlIG9mIHJlc2V0IHdlIGhhdmUgdG8gcmVhZCBuZXh0IGNvbW1hbmQgYW5kIGRvCisJCSAqIG5vdCBleHBlY3QgZGF0YSBmb3Igb2xkIGNvbW1hbmQgdG8gbWFnaWNhbGx5IGFwcGVhciBpbgorCQkgKiBuZXcgY29ubmVjdGlvbi4KKwkJICovCisJCXN0LT5yZWFkX3NvY2tldCA9IHN0LT5zb2NrZXQ7CisJCWVyciA9IHBvaG1lbGZzX2RhdGFfcmVjdihzdCwgY21kLCBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCkpOworCQlpZiAoZXJyKSB7CisJCQltc2xlZXAoMTAwMCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW5ldGZzX2NvbnZlcnRfY21kKGNtZCk7CisKKwkJZHByaW50aygiJXM6IGNtZDogJXUsIGlkOiAlbGx1LCBzdGFydDogJWxsdSwgc2l6ZTogJXUsICIKKwkJCQkiZXh0OiAldSwgY3NpemU6ICV1LCBjcGFkOiAldS5cbiIsCisJCQkJX19mdW5jX18sIGNtZC0+Y21kLCBjbWQtPmlkLCBjbWQtPnN0YXJ0LAorCQkJCWNtZC0+c2l6ZSwgY21kLT5leHQsIGNtZC0+Y3NpemUsIGNtZC0+Y3BhZCk7CisKKwkJaWYgKGNtZC0+Y3NpemUpIHsKKwkJCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lICplID0gJnN0LT5lbmc7CisKKwkJCWlmICh1bmxpa2VseShjbWQtPmNzaXplID4gZS0+c2l6ZS8yKSkgeworCQkJCW5ldGZzX3N0YXRlX3Jlc2V0KHN0KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKGUtPmhhc2ggJiYgdW5saWtlbHkoY21kLT5jc2l6ZSAhPSBzdC0+cHNiLT5jcnlwdG9fYXR0YWNoZWRfc2l6ZSkpIHsKKwkJCQlkcHJpbnRrKCIlczogY21kOiBjbWQ6ICV1LCBpZDogJWxsdSwgc3RhcnQ6ICVsbHUsIHNpemU6ICV1LCAiCisJCQkJCQkiY3NpemU6ICV1ICE9IGRpZ2VzdCBzaXplICV1LlxuIiwKKwkJCQkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5pZCwgY21kLT5zdGFydCwgY21kLT5zaXplLAorCQkJCQkJY21kLT5jc2l6ZSwgc3QtPnBzYi0+Y3J5cHRvX2F0dGFjaGVkX3NpemUpOworCQkJCW5ldGZzX3N0YXRlX3Jlc2V0KHN0KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZXJyID0gcG9obWVsZnNfZGF0YV9yZWN2KHN0LCBlLT5kYXRhLCBjbWQtPmNzaXplKTsKKwkJCWlmIChlcnIpIHsKKwkJCQluZXRmc19zdGF0ZV9yZXNldChzdCk7CisJCQkJY29udGludWU7CisJCQl9CisKKyNpZmRlZiBDT05GSUdfUE9ITUVMRlNfREVCVUcKKwkJCXsKKwkJCQl1bnNpZ25lZCBpbnQgaTsKKwkJCQl1bnNpZ25lZCBjaGFyICpoYXNoID0gZS0+ZGF0YTsKKworCQkJCWRwcmludGsoIiVzOiByZWNlaXZlZCBoYXNoOiAiLCBfX2Z1bmNfXyk7CisJCQkJZm9yIChpPTA7IGk8Y21kLT5jc2l6ZTsgKytpKSB7CisJCQkJCXByaW50aygiJTAyeCAiLCBoYXNoW2ldKTsKKwkJCQl9CisJCQkJcHJpbnRrKCJcbiIpOworCQkJfQorI2VuZGlmCisJCQljbWQtPnNpemUgLT0gY21kLT5jc2l6ZTsKKwkJfQorCisJCS8qCisJCSAqIFRoaXMgc2hvdWxkIGNhdGNoIHByb3RvY29sIGJyZWFrYWdlIGFuZCByYW5kb20gZ2FyYmFnZSBpbnN0ZWFkIG9mIGNvbW1hbmRzLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KChjbWQtPnNpemUgPiBzdC0+c2l6ZSkgJiYgKGNtZC0+Y21kICE9IE5FVEZTX1hBVFRSX0dFVCkpKSB7CisJCQluZXRmc19zdGF0ZV9yZXNldChzdCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN3aXRjaCAoY21kLT5jbWQpIHsKKwkJCWNhc2UgTkVURlNfUkVBRF9QQUdFOgorCQkJCWVyciA9IHBvaG1lbGZzX3JlYWRfcGFnZV9yZXNwb25zZShzdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5FVEZTX1JFQURESVI6CisJCQkJZXJyID0gcG9obWVsZnNfcmVhZGRpcl9yZXNwb25zZShzdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5FVEZTX0xPT0tVUDoKKwkJCQllcnIgPSBwb2htZWxmc19sb29rdXBfcmVzcG9uc2Uoc3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBORVRGU19DUkVBVEU6CisJCQkJZXJyID0gcG9obWVsZnNfY3JlYXRlX3Jlc3BvbnNlKHN0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkVURlNfUkVNT1ZFOgorCQkJCWVyciA9IHBvaG1lbGZzX3JlbW92ZV9yZXNwb25zZShzdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5FVEZTX1RSQU5TOgorCQkJCWVyciA9IHBvaG1lbGZzX3RyYW5zYWN0aW9uX3Jlc3BvbnNlKHN0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkVURlNfUEFHRV9DQUNIRToKKwkJCQllcnIgPSBwb2htZWxmc19wYWdlX2NhY2hlX3Jlc3BvbnNlKHN0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkVURlNfQ0FQQUJJTElUSUVTOgorCQkJCWVyciA9IHBvaG1lbGZzX2NhcGFiaWxpdGllc19yZXNwb25zZShzdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIE5FVEZTX0xPQ0s6CisJCQkJZXJyID0gcG9obWVsZnNfZGF0YV9sb2NrX3Jlc3BvbnNlKHN0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkVURlNfWEFUVFJfR0VUOgorCQkJCWVyciA9IHBvaG1lbGZzX2dldHhhdHRyX3Jlc3BvbnNlKHN0KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRrKCIlczogd3JvbmcgY21kOiAldSwgaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LCBzaXplOiAldSwgZXh0OiAldS5cbiIsCisJCQkJCV9fZnVuY19fLCBjbWQtPmNtZCwgY21kLT5pZCwgY21kLT5zdGFydCwgY21kLT5zaXplLCBjbWQtPmV4dCk7CisJCQkJbmV0ZnNfc3RhdGVfcmVzZXQoc3QpOworCQkJCWJyZWFrOworCQl9CisJfQorCisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBuZXRmc19zdGF0ZV9pbml0KHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgcG9obWVsZnNfY3RsICpjdGwgPSAmc3QtPmN0bDsKKworCWVyciA9IHNvY2tfY3JlYXRlKGN0bC0+YWRkci5zYV9mYW1pbHksIGN0bC0+dHlwZSwgY3RsLT5wcm90bywgJnN0LT5zb2NrZXQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGNyZWF0ZSBhIHNvY2tldDogZmFtaWx5OiAlZCwgdHlwZTogJWQsIHByb3RvOiAlZCwgZXJyOiAlZC5cbiIsCisJCQkJX19mdW5jX18sIGN0bC0+YWRkci5zYV9mYW1pbHksIGN0bC0+dHlwZSwgY3RsLT5wcm90bywgZXJyKTsKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisJfQorCisJc3QtPnNvY2tldC0+c2stPnNrX2FsbG9jYXRpb24gPSBHRlBfTk9JTzsKKwlzdC0+c29ja2V0LT5zay0+c2tfc25kdGltZW8gPSBzdC0+c29ja2V0LT5zay0+c2tfcmN2dGltZW8gPSBtc2Vjc190b19qaWZmaWVzKDYwMDAwKTsKKworCWVyciA9IGtlcm5lbF9jb25uZWN0KHN0LT5zb2NrZXQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmY3RsLT5hZGRyLCBjdGwtPmFkZHJsZW4sIDApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGNvbm5lY3QgdG8gc2VydmVyOiBpZHg6ICV1LCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgc3QtPnBzYi0+aWR4LCBlcnIpOworCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKKwl9CisJc3QtPnNvY2tldC0+c2stPnNrX3NuZHRpbWVvID0gc3QtPnNvY2tldC0+c2stPnNrX3JjdnRpbWVvID0gbXNlY3NfdG9famlmZmllcyg2MDAwMCk7CisKKwllcnIgPSBuZXRmc19wb2xsX2luaXQoc3QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9yZWxlYXNlOworCisJaWYgKHN0LT5zb2NrZXQtPm9wcy0+ZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJmN0bC0+YWRkcjsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IChyZSljb25uZWN0ZWQgdG8gcGVlciAldS4ldS4ldS4ldTolZC5cbiIsIF9fZnVuY19fLAorCQkJTklQUVVBRChzaW4tPnNpbl9hZGRyLnNfYWRkciksIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKKwl9IGVsc2UgaWYgKHN0LT5zb2NrZXQtPm9wcy0+ZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmN0bC0+YWRkcjsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IChyZSljb25uZWN0ZWQgdG8gcGVlciAiCisJCQkiJXBpNjolZCIsCisJCQlfX2Z1bmNfXywgJnNpbi0+c2luNl9hZGRyLCBudG9ocyhzaW4tPnNpbjZfcG9ydCkpOworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0X3JlbGVhc2U6CisJc29ja19yZWxlYXNlKHN0LT5zb2NrZXQpOworZXJyX291dF9leGl0OgorCXN0LT5zb2NrZXQgPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgbmV0ZnNfc3RhdGVfZXhpdChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCWlmIChzdC0+c29ja2V0KSB7CisJCW5ldGZzX3BvbGxfZXhpdChzdCk7CisJCXN0LT5zb2NrZXQtPm9wcy0+c2h1dGRvd24oc3QtPnNvY2tldCwgMik7CisKKwkJaWYgKHN0LT5zb2NrZXQtPm9wcy0+ZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzdC0+Y3RsLmFkZHI7CisJCQlwcmludGsoIiVzOiBkaXNjb25uZWN0ZWQgZnJvbSBwZWVyICV1LiV1LiV1LiV1OiVkLlxuIiwgX19mdW5jX18sCisJCQkJTklQUVVBRChzaW4tPnNpbl9hZGRyLnNfYWRkciksIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKKwkJfSBlbHNlIGlmIChzdC0+c29ja2V0LT5vcHMtPmZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmc3QtPmN0bC5hZGRyOworCQkJcHJpbnRrKCIlczogZGlzY29ubmVjdGVkIGZyb20gcGVlciAiCisJCQkJIiVwaTY6JWQiLAorCQkJCV9fZnVuY19fLCAmc2luLT5zaW42X2FkZHIsIG50b2hzKHNpbi0+c2luNl9wb3J0KSk7CisJCX0KKworCQlzb2NrX3JlbGVhc2Uoc3QtPnNvY2tldCk7CisJCXN0LT5zb2NrZXQgPSBOVUxMOworCQlzdC0+cmVhZF9zb2NrZXQgPSBOVUxMOworCQlzdC0+bmVlZF9yZXNldCA9IDA7CisJfQorfQorCitpbnQgcG9obWVsZnNfc3RhdGVfaW5pdF9vbmUoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHN0cnVjdCBwb2htZWxmc19jb25maWcgKmNvbmYpCit7CisJc3RydWN0IG5ldGZzX3N0YXRlICpzdCA9ICZjb25mLT5zdGF0ZTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCW11dGV4X2luaXQoJnN0LT5fX3N0YXRlX2xvY2spOworCW11dGV4X2luaXQoJnN0LT5fX3N0YXRlX3NlbmRfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc3QtPnRocmVhZF93YWl0KTsKKworCXN0LT5wc2IgPSBwc2I7CisJc3QtPnRyYW5zX3Jvb3QgPSBSQl9ST09UOworCW11dGV4X2luaXQoJnN0LT50cmFuc19sb2NrKTsKKworCXN0LT5zaXplID0gcHNiLT50cmFuc19kYXRhX3NpemU7CisJc3QtPmRhdGEgPSBrbWFsbG9jKHN0LT5zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0LT5kYXRhKQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCWlmIChwc2ItPnBlcmZvcm1fY3J5cHRvKSB7CisJCWVyciA9IHBvaG1lbGZzX2NyeXB0b19lbmdpbmVfaW5pdCgmc3QtPmVuZywgcHNiKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF9mcmVlX2RhdGE7CisJfQorCisJZXJyID0gbmV0ZnNfc3RhdGVfaW5pdChzdCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0X2ZyZWVfZW5naW5lOworCisJc3QtPnRocmVhZCA9IGt0aHJlYWRfcnVuKHBvaG1lbGZzX3JlY3YsIHN0LCAicG9obWVsZnMvJXUiLCBwc2ItPmlkeCk7CisJaWYgKElTX0VSUihzdC0+dGhyZWFkKSkgeworCQllcnIgPSBQVFJfRVJSKHN0LT50aHJlYWQpOworCQlnb3RvIGVycl9vdXRfbmV0ZnNfZXhpdDsKKwl9CisKKwlpZiAoIXBzYi0+YWN0aXZlX3N0YXRlKQorCQlwc2ItPmFjdGl2ZV9zdGF0ZSA9IGNvbmY7CisKKwlkcHJpbnRrKCIlczogY29uZjogJXAsIHN0OiAlcCwgc29ja2V0OiAlcC5cbiIsCisJCQlfX2Z1bmNfXywgY29uZiwgc3QsIHN0LT5zb2NrZXQpOworCXJldHVybiAwOworCitlcnJfb3V0X25ldGZzX2V4aXQ6CisJbmV0ZnNfc3RhdGVfZXhpdChzdCk7CitlcnJfb3V0X2ZyZWVfZW5naW5lOgorCXBvaG1lbGZzX2NyeXB0b19lbmdpbmVfZXhpdCgmc3QtPmVuZyk7CitlcnJfb3V0X2ZyZWVfZGF0YToKKwlrZnJlZShzdC0+ZGF0YSk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKKworfQorCit2b2lkIHBvaG1lbGZzX3N0YXRlX2ZsdXNoX3RyYW5zYWN0aW9ucyhzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCXN0cnVjdCByYl9ub2RlICpyYl9ub2RlOworCXN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdDsKKworCW11dGV4X2xvY2soJnN0LT50cmFuc19sb2NrKTsKKwlmb3IgKHJiX25vZGUgPSByYl9maXJzdCgmc3QtPnRyYW5zX3Jvb3QpOyByYl9ub2RlOyApIHsKKwkJZHN0ID0gcmJfZW50cnkocmJfbm9kZSwgc3RydWN0IG5ldGZzX3RyYW5zX2RzdCwgc3RhdGVfZW50cnkpOworCQlyYl9ub2RlID0gcmJfbmV4dChyYl9ub2RlKTsKKworCQlkc3QtPnRyYW5zLT5yZXN1bHQgPSAtRUlOVkFMOworCQluZXRmc190cmFuc19yZW1vdmVfbm9sb2NrKGRzdCwgc3QpOworCQluZXRmc190cmFuc19kcm9wX2RzdF9ub3N0YXRlKGRzdCk7CisJfQorCW11dGV4X3VubG9jaygmc3QtPnRyYW5zX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBwb2htZWxmc19zdGF0ZV9leGl0X29uZShzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjKQoreworCXN0cnVjdCBuZXRmc19zdGF0ZSAqc3QgPSAmYy0+c3RhdGU7CisKKwlkcHJpbnRrKCIlczogZXhpdGluZywgc3Q6ICVwLlxuIiwgX19mdW5jX18sIHN0KTsKKwlpZiAoc3QtPnRocmVhZCkgeworCQlrdGhyZWFkX3N0b3Aoc3QtPnRocmVhZCk7CisJCXN0LT50aHJlYWQgPSBOVUxMOworCX0KKworCW5ldGZzX3N0YXRlX2xvY2tfc2VuZChzdCk7CisJbmV0ZnNfc3RhdGVfZXhpdChzdCk7CisJbmV0ZnNfc3RhdGVfdW5sb2NrX3NlbmQoc3QpOworCisJcG9obWVsZnNfc3RhdGVfZmx1c2hfdHJhbnNhY3Rpb25zKHN0KTsKKworCXBvaG1lbGZzX2NyeXB0b19lbmdpbmVfZXhpdCgmc3QtPmVuZyk7CisJa2ZyZWUoc3QtPmRhdGEpOworCisJa2ZyZWUoYyk7Cit9CisKKy8qCisgKiBJbml0aWFsaXplIG5ldHdvcmsgc3RhY2suIEl0IHNlYXJjaGVzIGZvciBnaXZlbiBJRCBpbiBnbG9iYWwKKyAqIGNvbmZpZ3VyYXRpb24gdGFibGUsIHRoaXMgY29udGFpbnMgaW5mb3JtYXRpb24gb2YgdGhlIHJlbW90ZSBzZXJ2ZXIKKyAqIChhZGRyZXNzIChhbnkgc3VwcG9ydGVkIGJ5IHNvY2tldCBpbnRlcmZhY2UpIGFuZCBwb3J0LCBwcm90b2NvbCBhbmQgc28gb24pLgorICovCitpbnQgcG9obWVsZnNfc3RhdGVfaW5pdChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCWVyciA9IHBvaG1lbGZzX2NvcHlfY29uZmlnKHBzYik7CisJaWYgKGVycikgeworCQlwb2htZWxmc19zdGF0ZV9leGl0KHBzYik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcG9obWVsZnNfc3RhdGVfZXhpdChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGMsIHRtcCwgJnBzYi0+c3RhdGVfbGlzdCwgY29uZmlnX2VudHJ5KSB7CisJCWxpc3RfZGVsKCZjLT5jb25maWdfZW50cnkpOworCQlwb2htZWxmc19zdGF0ZV9leGl0X29uZShjKTsKKwl9Cit9CisKK3ZvaWQgcG9obWVsZnNfc3dpdGNoX2FjdGl2ZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjID0gcHNiLT5hY3RpdmVfc3RhdGU7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnBzYi0+c3RhdGVfbGlzdCkpIHsKKwkJaWYgKGMtPmNvbmZpZ19lbnRyeS5uZXh0ICE9ICZwc2ItPnN0YXRlX2xpc3QpIHsKKwkJCXBzYi0+YWN0aXZlX3N0YXRlID0gbGlzdF9lbnRyeShjLT5jb25maWdfZW50cnkubmV4dCwKKwkJCQlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnLCBjb25maWdfZW50cnkpOworCQl9IGVsc2UgeworCQkJcHNiLT5hY3RpdmVfc3RhdGUgPSBsaXN0X2VudHJ5KHBzYi0+c3RhdGVfbGlzdC5uZXh0LAorCQkJCXN0cnVjdCBwb2htZWxmc19jb25maWcsIGNvbmZpZ19lbnRyeSk7CisJCX0KKworCQlkcHJpbnRrKCIlczogZW1wdHk6ICVkLCBhY3RpdmUgJXAgLT4gJXAuXG4iLAorCQkJX19mdW5jX18sIGxpc3RfZW1wdHkoJnBzYi0+c3RhdGVfbGlzdCksIGMsCisJCQlwc2ItPmFjdGl2ZV9zdGF0ZSk7CisJfSBlbHNlCisJCXBzYi0+YWN0aXZlX3N0YXRlID0gTlVMTDsKK30KKwordm9pZCBwb2htZWxmc19jaGVja19zdGF0ZXMoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYywgKnRtcDsKKwlMSVNUX0hFQUQoZGVsZXRlX2xpc3QpOworCisJbXV0ZXhfbG9jaygmcHNiLT5zdGF0ZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYywgdG1wLCAmcHNiLT5zdGF0ZV9saXN0LCBjb25maWdfZW50cnkpIHsKKwkJaWYgKHBvaG1lbGZzX2NvbmZpZ19jaGVjayhjLCBwc2ItPmlkeCkpIHsKKworCQkJaWYgKHBzYi0+YWN0aXZlX3N0YXRlID09IGMpCisJCQkJcG9obWVsZnNfc3dpdGNoX2FjdGl2ZShwc2IpOworCQkJbGlzdF9tb3ZlKCZjLT5jb25maWdfZW50cnksICZkZWxldGVfbGlzdCk7CisJCX0KKwl9CisJcG9obWVsZnNfY29weV9jb25maWcocHNiKTsKKwltdXRleF91bmxvY2soJnBzYi0+c3RhdGVfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYywgdG1wLCAmZGVsZXRlX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQlsaXN0X2RlbCgmYy0+Y29uZmlnX2VudHJ5KTsKKwkJcG9obWVsZnNfc3RhdGVfZXhpdF9vbmUoYyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL25ldGZzLmggYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmYyMWFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL25ldGZzLmgKQEAgLTAsMCArMSw5MzIgQEAKKy8qCisgKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19ORVRGU19ICisjZGVmaW5lIF9fTkVURlNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KKworI2RlZmluZSBQT0hNRUxGU19DTl9JRFgJCQk1CisjZGVmaW5lIFBPSE1FTEZTX0NOX1ZBTAkJCTAKKworI2RlZmluZSBQT0hNRUxGU19DVExJTkZPX0FDSwkJMQorI2RlZmluZSBQT0hNRUxGU19OT0lORk9fQUNLCQkyCisKKworLyoKKyAqIE5ldHdvcmsgY29tbWFuZCBzdHJ1Y3R1cmUuCisgKiBXaWxsIGJlIGV4dGVuZGVkLgorICovCitzdHJ1Y3QgbmV0ZnNfY21kCit7CisJX191MTYJCQljbWQ7CS8qIENvbW1hbmQgbnVtYmVyICovCisJX191MTYJCQljc2l6ZTsJLyogQXR0YWNoZWQgY3J5cHRvIGluZm9ybWF0aW9uIHNpemUgKi8KKwlfX3UxNgkJCWNwYWQ7CS8qIEF0dGFjaGVkIHBhZGRpbmcgc2l6ZSAqLworCV9fdTE2CQkJZXh0OwkvKiBFeHRlcm5hbCBmbGFncyAqLworCV9fdTMyCQkJc2l6ZTsJLyogU2l6ZSBvZiB0aGUgYXR0YWNoZWQgZGF0YSAqLworCV9fdTMyCQkJdHJhbnM7CS8qIFRyYW5zYWN0aW9uIGlkICovCisJX191NjQJCQlpZDsJLyogT2JqZWN0IElEIHRvIG9wZXJhdGUgb24uIFVzZWQgZm9yIGZlZWRiYWNrLiovCisJX191NjQJCQlzdGFydDsJLyogU3RhcnQgb2YgdGhlIG9iamVjdC4gKi8KKwlfX3U2NAkJCWl2OwkvKiBJViBzZXF1ZW5jZSAqLworCV9fdTgJCQlkYXRhWzBdOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2NvbnZlcnRfY21kKHN0cnVjdCBuZXRmc19jbWQgKmNtZCkKK3sKKwljbWQtPmlkID0gX19iZTY0X3RvX2NwdShjbWQtPmlkKTsKKwljbWQtPnN0YXJ0ID0gX19iZTY0X3RvX2NwdShjbWQtPnN0YXJ0KTsKKwljbWQtPml2ID0gX19iZTY0X3RvX2NwdShjbWQtPml2KTsKKwljbWQtPmNtZCA9IF9fYmUxNl90b19jcHUoY21kLT5jbWQpOworCWNtZC0+ZXh0ID0gX19iZTE2X3RvX2NwdShjbWQtPmV4dCk7CisJY21kLT5jc2l6ZSA9IF9fYmUxNl90b19jcHUoY21kLT5jc2l6ZSk7CisJY21kLT5jcGFkID0gX19iZTE2X3RvX2NwdShjbWQtPmNwYWQpOworCWNtZC0+c2l6ZSA9IF9fYmUzMl90b19jcHUoY21kLT5zaXplKTsKK30KKworI2RlZmluZSBORVRGU19UUkFOU19TSU5HTEVfRFNUCQkoMTw8MCkKKworZW51bSB7CisJTkVURlNfUkVBRERJUgk9IDEsCS8qIFJlYWQgZGlyZWN0b3J5IGZvciBnaXZlbiBpbm9kZSBudW1iZXIgKi8KKwlORVRGU19SRUFEX1BBR0UsCS8qIFJlYWQgZGF0YSBwYWdlIGZyb20gdGhlIHNlcnZlciAqLworCU5FVEZTX1dSSVRFX1BBR0UsCS8qIFdyaXRlIGRhdGEgcGFnZSB0byB0aGUgc2VydmVyICovCisJTkVURlNfQ1JFQVRFLAkJLyogQ3JlYXRlIGRpcmVjdG9yeSBlbnRyeSAqLworCU5FVEZTX1JFTU9WRSwJCS8qIFJlbW92ZSBkaXJlY3RvcnkgZW50cnkgKi8KKworCU5FVEZTX0xPT0tVUCwJCS8qIExvb2t1cCBzaW5nbGUgb2JqZWN0ICovCisJTkVURlNfTElOSywJCS8qIENyZWF0ZSBhIGxpbmsgKi8KKwlORVRGU19UUkFOUywJCS8qIFRyYW5zYWN0aW9uICovCisJTkVURlNfT1BFTiwJCS8qIE9wZW4gaW50ZW50ICovCisJTkVURlNfSU5PREVfSU5GTywJLyogTWV0YWRhdGEgY2FjaGUgY29oZXJlbmN5IHN5bmNocm9uaXphdGlvbiBtZXNzYWdlICovCisKKwlORVRGU19QQUdFX0NBQ0hFLAkvKiBQYWdlIGNhY2hlIGludmFsaWRhdGlvbiBtZXNzYWdlICovCisJTkVURlNfUkVBRF9QQUdFUywJLyogUmVhZCBtdWx0aXBsZSBjb250aWd1b3VzIHBhZ2VzIGluIG9uZSBnbyAqLworCU5FVEZTX1JFTkFNRSwJCS8qIFJlbmFtZSBvYmplY3QgKi8KKwlORVRGU19DQVBBQklMSVRJRVMsCS8qIENhcGFiaWxpdGllcyBvZiB0aGUgY2xpZW50LCBmb3IgZXhhbXBsZSBzdXBwb3J0ZWQgY3J5cHRvICovCisJTkVURlNfTE9DSywJCS8qIERpc3RyaWJ1dGVkIGxvY2sgbWVzc2FnZSAqLworCisJTkVURlNfWEFUVFJfU0VULAkvKiBTZXQgZXh0ZW5kZWQgYXR0cmlidXRlICovCisJTkVURlNfWEFUVFJfR0VULAkvKiBHZXQgZXh0ZW5kZWQgYXR0cmlidXRlICovCisJTkVURlNfQ01EX01BWAorfTsKKworZW51bSB7CisJUE9ITUVMRlNfRkxBR1NfQUREID0gMCwgLyogTmV0d29yayBzdGF0ZSBjb250cm9sIG1lc3NhZ2UgZm9yIEFERCAqLworCVBPSE1FTEZTX0ZMQUdTX0RFTCwgICAgIC8qIE5ldHdvcmsgc3RhdGUgY29udHJvbCBtZXNzYWdlIGZvciBERUwgKi8KKwlQT0hNRUxGU19GTEFHU19TSE9XLCAgICAvKiBOZXR3b3JrIHN0YXRlIGNvbnRyb2wgbWVzc2FnZSBmb3IgU0hPVyAqLworCVBPSE1FTEZTX0ZMQUdTX0NSWVBUTywJLyogQ3J5cHRvIGRhdGEgY29udHJvbCBtZXNzYWdlICovCit9OworCisvKgorICogQWx3YXlzIHdhbnRlZCB0byBjb3B5IGl0IGZyb20gc29ja2V0IGhlYWRlcnMgaW50byBwdWJsaWMgb25lLAorICogc2luY2UgdGhleSBhcmUgX19LRVJORUxfXyBwcm90ZWN0ZWQgdGhlcmUuCisgKi8KKyNkZWZpbmUgX0tfU1NfTUFYU0laRQkxMjgKKworc3RydWN0IHNhZGRyCit7CisJdW5zaWduZWQgc2hvcnQJCXNhX2ZhbWlseTsKKwljaGFyCQkJYWRkcltfS19TU19NQVhTSVpFXTsKK307CisKK2VudW0geworCVBPSE1FTEZTX0NSWVBUT19IQVNIID0gMCwKKwlQT0hNRUxGU19DUllQVE9fQ0lQSEVSLAorfTsKKworc3RydWN0IHBvaG1lbGZzX2NyeXB0bworeworCXVuc2lnbmVkIGludAkJaWR4OwkJLyogQ29uZmlnIGluZGV4ICovCisJdW5zaWduZWQgc2hvcnQJCXN0cmxlbjsJCS8qIFNpemUgb2YgdGhlIGF0dGFjaGVkIGNyeXB0byBzdHJpbmcgaW5jbHVkaW5nIDAtYnl0ZQorCQkJCQkJICogImNiYyhhZXMpIiBmb3IgZXhhbXBsZSAqLworCXVuc2lnbmVkIHNob3J0CQl0eXBlOwkJLyogSE1BQywgY2lwaGVyLCBib3RoICovCisJdW5zaWduZWQgaW50CQlrZXlzaXplOwkvKiBLZXkgc2l6ZSAqLworCXVuc2lnbmVkIGNoYXIJCWRhdGFbMF07CS8qIEFsZ29yaXRobSBzdHJpbmcsIGtleSBhbmQgSVYgKi8KK307CisKKy8qCisgKiBDb25maWd1cmF0aW9uIGNvbW1hbmQgdXNlZCB0byBjcmVhdGUgdGFibGUgb2YgZGlmZmVyZW50IHJlbW90ZSBzZXJ2ZXJzLgorICovCitzdHJ1Y3QgcG9obWVsZnNfY3RsCit7CisJdW5zaWduZWQgaW50CQlpZHg7CQkvKiBDb25maWcgaW5kZXggKi8KKwl1bnNpZ25lZCBpbnQJCXR5cGU7CQkvKiBTb2NrZXQgdHlwZSAqLworCXVuc2lnbmVkIGludAkJcHJvdG87CQkvKiBTb2NrZXQgcHJvdG9jb2wgKi8KKwl1bnNpZ25lZCBpbnQJCWFkZHJsZW47CS8qIFNpemUgb2YgdGhlIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBzaG9ydAkJdW51c2VkOwkJLyogQWxpZ24gc3RydWN0dXJlIGJ5IDQgYnl0ZXMgKi8KKwlzdHJ1Y3Qgc2FkZHIJCWFkZHI7CQkvKiBSZW1vdGUgc2VydmVyIGFkZHJlc3MgKi8KK307CisKKy8qCisgKiBBY2sgZm9yIHVzZXJzcGFjZSBhYm91dCByZXF1ZXN0ZWQgY29tbWFuZC4KKyAqLworc3RydWN0IHBvaG1lbGZzX2NuX2FjaworeworCXN0cnVjdCBjbl9tc2cJCW1zZzsKKwlpbnQJCQllcnJvcjsKKwlpbnQJCQltc2dfbnVtOworCWludAkJCXVudXNlZFszXTsKKwlzdHJ1Y3QgcG9obWVsZnNfY3RsCWN0bDsKK307CisKKy8qCisgKiBJbm9kZSBpbmZvIHN0cnVjdHVyZSB1c2VkIHRvIHN5bmMgd2l0aCBzZXJ2ZXIuCisgKiBDaGVjayB3aGF0IHN0YXQoKSByZXR1cm5zLgorICovCitzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbworeworCXVuc2lnbmVkIGludAkJbW9kZTsKKwl1bnNpZ25lZCBpbnQJCW5saW5rOworCXVuc2lnbmVkIGludAkJdWlkOworCXVuc2lnbmVkIGludAkJZ2lkOworCXVuc2lnbmVkIGludAkJYmxvY2tzaXplOworCXVuc2lnbmVkIGludAkJcGFkZGluZzsKKwlfX3U2NAkJCWlubzsKKwlfX3U2NAkJCWJsb2NrczsKKwlfX3U2NAkJCXJkZXY7CisJX191NjQJCQlzaXplOworCV9fdTY0CQkJdmVyc2lvbjsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19jb252ZXJ0X2lub2RlX2luZm8oc3RydWN0IG5ldGZzX2lub2RlX2luZm8gKmluZm8pCit7CisJaW5mby0+bW9kZSA9IF9fY3B1X3RvX2JlMzIoaW5mby0+bW9kZSk7CisJaW5mby0+bmxpbmsgPSBfX2NwdV90b19iZTMyKGluZm8tPm5saW5rKTsKKwlpbmZvLT51aWQgPSBfX2NwdV90b19iZTMyKGluZm8tPnVpZCk7CisJaW5mby0+Z2lkID0gX19jcHVfdG9fYmUzMihpbmZvLT5naWQpOworCWluZm8tPmJsb2Nrc2l6ZSA9IF9fY3B1X3RvX2JlMzIoaW5mby0+YmxvY2tzaXplKTsKKwlpbmZvLT5ibG9ja3MgPSBfX2NwdV90b19iZTY0KGluZm8tPmJsb2Nrcyk7CisJaW5mby0+cmRldiA9IF9fY3B1X3RvX2JlNjQoaW5mby0+cmRldik7CisJaW5mby0+c2l6ZSA9IF9fY3B1X3RvX2JlNjQoaW5mby0+c2l6ZSk7CisJaW5mby0+dmVyc2lvbiA9IF9fY3B1X3RvX2JlNjQoaW5mby0+dmVyc2lvbik7CisJaW5mby0+aW5vID0gX19jcHVfdG9fYmU2NChpbmZvLT5pbm8pOworfQorCisvKgorICogQ2FjaGUgc3RhdGUgbWFjaGluZS4KKyAqLworZW51bSB7CisJTkVURlNfQ09NTUFORF9QRU5ESU5HID0gMCwJLyogQ29tbWFuZCBpcyBiZWluZyBleGVjdXRlZCAqLworCU5FVEZTX0lOT0RFX1JFTU9URV9TWU5DRUQsCS8qIElub2RlIHdhcyBzeW5jZWQgdG8gc2VydmVyICovCisJTkVURlNfSU5PREVfUkVNT1RFX0RJUl9TWU5DRUQsCS8qIElub2RlIChkaXJlY3RvcnkpIHdhcyBzeW5jZWQgZnJvbSB0aGUgc2VydmVyICovCisJTkVURlNfSU5PREVfT1dORUQsCQkvKiBJbm9kZSBpcyBvd25lZCBieSBnaXZlbiBob3N0ICovCisJTkVURlNfSU5PREVfTkVFRF9GTFVTSCwJCS8qIElub2RlIGhhcyB0byBiZSBmbHVzaGVkIHRvIHRoZSBzZXJ2ZXIgKi8KK307CisKKy8qCisgKiBQT0hNRUxGUyBjYXBhYmlsaXRpZXM6IGluZm9ybWF0aW9uIGFib3V0IHN1cHBvcnRlZAorICogY3J5cHRvIG9wZXJhdGlvbnMgKGhhc2gvY2lwaGVyLCBtb2Rlcywga2V5IHNpemVzIGFuZCBzbyBvbiksCisgKiByb290IGluZm9ybWFpb24gKHVzZWQvYXZhaWxhYmxlIHNpemUsIG51bWJlciBvZiBvYmplY3RzLCBwZXJtaXNzaW9ucykKKyAqLworZW51bSBwb2htZWxmc19jYXBhYmlsaXRpZXMgeworCVBPSE1FTEZTX0NSWVBUT19DQVBBQklMSVRJRVMgPSAwLAorCVBPSE1FTEZTX1JPT1RfQ0FQQUJJTElUSUVTLAorfTsKKworLyogUmVhZC1vbmx5IG1vdW50ICovCisjZGVmaW5lIFBPSE1FTEZTX0ZMQUdTX1JPCQkoMTw8MCkKKy8qIEV4dGVuZGVkIGF0dHJpYnV0ZXMgc3VwcG9ydCBvbi9vZmYgKi8KKyNkZWZpbmUgUE9ITUVMRlNfRkxBR1NfWEFUVFIJCSgxPDwxKQorCitzdHJ1Y3QgbmV0ZnNfcm9vdF9jYXBhYmlsaXRpZXMKK3sKKwlfX3U2NAkJCW5yX2ZpbGVzOworCV9fdTY0CQkJdXNlZCwgYXZhaWw7CisJX191NjQJCQlmbGFnczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19jb252ZXJ0X3Jvb3RfY2FwYWJpbGl0aWVzKHN0cnVjdCBuZXRmc19yb290X2NhcGFiaWxpdGllcyAqY2FwKQoreworCWNhcC0+bnJfZmlsZXMgPSBfX2NwdV90b19iZTY0KGNhcC0+bnJfZmlsZXMpOworCWNhcC0+dXNlZCA9IF9fY3B1X3RvX2JlNjQoY2FwLT51c2VkKTsKKwljYXAtPmF2YWlsID0gX19jcHVfdG9fYmU2NChjYXAtPmF2YWlsKTsKKwljYXAtPmZsYWdzID0gX19jcHVfdG9fYmU2NChjYXAtPmZsYWdzKTsKK30KKworc3RydWN0IG5ldGZzX2NyeXB0b19jYXBhYmlsaXRpZXMKK3sKKwl1bnNpZ25lZCBzaG9ydAkJaGFzaF9zdHJsZW47CS8qIEhhc2ggc3RyaW5nIGxlbmd0aCwgbGlrZSAiaG1hYyhzaGExKSBpbmNsdWRpbmcgMCBieXRlICIqLworCXVuc2lnbmVkIHNob3J0CQljaXBoZXJfc3RybGVuOwkvKiBDaXBoZXIgc3RyaW5nIGxlbmd0aCB3aXRoIHRoZSBzYW1lIGZvcm1hdCAqLworCXVuc2lnbmVkIGludAkJY2lwaGVyX2tleXNpemU7CS8qIENpcGhlciBrZXkgc2l6ZSAqLworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX2NvbnZlcnRfY3J5cHRvX2NhcGFiaWxpdGllcyhzdHJ1Y3QgbmV0ZnNfY3J5cHRvX2NhcGFiaWxpdGllcyAqY2FwKQoreworCWNhcC0+aGFzaF9zdHJsZW4gPSBfX2NwdV90b19iZTE2KGNhcC0+aGFzaF9zdHJsZW4pOworCWNhcC0+Y2lwaGVyX3N0cmxlbiA9IF9fY3B1X3RvX2JlMTYoY2FwLT5jaXBoZXJfc3RybGVuKTsKKwljYXAtPmNpcGhlcl9rZXlzaXplID0gX19jcHVfdG9fYmUzMihjYXAtPmNpcGhlcl9rZXlzaXplKTsKK30KKworZW51bSBwb2htZWxmc19sb2NrX3R5cGUgeworCVBPSE1FTEZTX0xPQ0tfR1JBQgk9ICgxPDwxNSksCisKKwlQT0hNRUxGU19SRUFEX0xPQ0sJPSAwLAorCVBPSE1FTEZTX1dSSVRFX0xPQ0ssCit9OworCitzdHJ1Y3QgbmV0ZnNfbG9jaworeworCV9fdTY0CQkJc3RhcnQ7CisJX191NjQJCQlpbm87CisJX191MzIJCQlzaXplOworCV9fdTMyCQkJdHlwZTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19jb252ZXJ0X2xvY2soc3RydWN0IG5ldGZzX2xvY2sgKmxvY2spCit7CisJbG9jay0+c3RhcnQgPSBfX2NwdV90b19iZTY0KGxvY2stPnN0YXJ0KTsKKwlsb2NrLT5pbm8gPSBfX2NwdV90b19iZTY0KGxvY2stPmlubyk7CisJbG9jay0+c2l6ZSA9IF9fY3B1X3RvX2JlMzIobG9jay0+c2l6ZSk7CisJbG9jay0+dHlwZSA9IF9fY3B1X3RvX2JlMzIobG9jay0+dHlwZSk7Cit9CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorCisvKgorICogUHJpdmF0ZSBQT0hNRUxGUyBjYWNoZSBvZiBvYmplY3RzIGluIGRpcmVjdG9yeS4KKyAqLworc3RydWN0IHBvaG1lbGZzX25hbWUKK3sKKwlzdHJ1Y3QgcmJfbm9kZQkJaGFzaF9ub2RlOworCisJc3RydWN0IGxpc3RfaGVhZAlzeW5jX2NyZWF0ZV9lbnRyeTsKKworCXU2NAkJCWlubzsKKworCXUzMgkJCWhhc2g7CisJdTMyCQkJbW9kZTsKKwl1MzIJCQlsZW47CisKKwljaGFyCQkJKmRhdGE7Cit9OworCisvKgorICogUE9ITUVMRlMgaW5vZGUuIE1haW4gb2JqZWN0LgorICovCitzdHJ1Y3QgcG9obWVsZnNfaW5vZGUKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCWlub2RlX2VudHJ5OwkJLyogRW50cnkgaW4gc3VwZXJibG9jayBsaXN0LgorCQkJCQkJCSAqIE9iamVjdHMgd2hpY2ggYXJlIG5vdCBib3VuZCB0byBkZW50cnkgcmVxdWlyZSB0byBiZSBkcm9wcGVkCisJCQkJCQkJICogaW4gLT5wdXRfc3VwZXIoKQorCQkJCQkJCSAqLworCXN0cnVjdCByYl9yb290CQloYXNoX3Jvb3Q7CQkvKiBUaGUgc2FtZSwgYnV0IGluZGV4ZWQgYnkgbmFtZSBoYXNoIGFuZCBsZW4gKi8KKwlzdHJ1Y3QgbXV0ZXgJCW9mZnNldF9sb2NrOwkJLyogUHJvdGVjdCBib3RoIGFib3ZlIHRyZWVzICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkCXN5bmNfY3JlYXRlX2xpc3Q7CS8qIExpc3Qgb2YgY3JlYXRlZCBidXQgbm90IHlldCBzeW5jZWQgdG8gdGhlIHNlcnZlciBjaGlsZHJlbiAqLworCisJdW5zaWduZWQgaW50CQlkcm9wX2NvdW50OworCisJaW50CQkJbG9ja190eXBlOwkJLyogSG93IHRoaXMgaW5vZGUgaXMgbG9ja2VkOiByZWFkIG9yIHdyaXRlICovCisKKwlpbnQJCQllcnJvcjsJCQkvKiBUcmFuc2FjdGlvbiBlcnJvciBmb3IgZ2l2ZW4gaW5vZGUgKi8KKworCWxvbmcJCQlzdGF0ZTsJCQkvKiBTdGF0ZSBtYWNoaW5lIGFib3ZlICovCisKKwl1NjQJCQlpbm87CQkJLyogSW5vZGUgbnVtYmVyICovCisJdTY0CQkJdG90YWxfbGVuOwkJLyogVG90YWwgbGVuZ3RoIG9mIGFsbCBjaGlsZHJlbiBuYW1lcywgdXNlZCB0byBjcmVhdGUgb2Zmc2V0cyAqLworCisJc3RydWN0IGlub2RlCQl2ZnNfaW5vZGU7Cit9OworCitzdHJ1Y3QgbmV0ZnNfdHJhbnM7Cit0eXBlZGVmIGludCAoKiBuZXRmc190cmFuc19jb21wbGV0ZV90KShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgcGFnZV9udW0sCisJCXZvaWQgKnByaXZhdGUsIGludCBlcnIpOworCitzdHJ1Y3QgbmV0ZnNfc3RhdGU7CitzdHJ1Y3QgcG9obWVsZnNfc2I7CisKK3N0cnVjdCBuZXRmc190cmFucworeworCS8qCisJICogVHJhbnNhY3Rpb24gaGVhZGVyIGFuZCBhdHRhY2hlZCBjb250aWd1b3VzIGRhdGEgbGl2ZSBoZXJlLgorCSAqLworCXN0cnVjdCBpb3ZlYwkJCWlvdmVjOworCisJLyoKKwkgKiBQYWdlcyBhdHRhY2hlZCB0byB0cmFuc2FjdGlvbi4KKwkgKi8KKwlzdHJ1Y3QgcGFnZQkJCSoqcGFnZXM7CisKKwkvKgorCSAqIExpc3QgYW5kIHByb3RlY3RpbmcgbG9jayBmb3IgdHJhbnNhY3Rpb24gZGVzdGluYXRpb24KKwkgKiBuZXR3b3JrIHN0YXRlcy4KKwkgKi8KKwlzcGlubG9ja190CQkJZHN0X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAkJZHN0X2xpc3Q7CisKKwkvKgorCSAqIE51bWJlciBvZiB1c2VycyBmb3IgZ2l2ZW4gdHJhbnNhY3Rpb24uCisJICogRm9yIGV4YW1wbGUgZWFjaCBuZXR3b3JrIHN0YXRlIGF0dGFjaGVkIHRvIHRyYW5zYWN0aW9uCisJICogdmlhIGRzdF9saXN0IGluY3JlYXNlcyBpdC4KKwkgKi8KKwlhdG9taWNfdAkJCXJlZmNudDsKKworCS8qCisJICogTnVtYmVyIG9mIHBhZ2VzIGF0dGFjaGVkIHRvIGdpdmVuIHRyYW5zYWN0aW9uLgorCSAqIFNvbWUgc2xvdHMgaW4gYWJvdmUgcGFnZSBhcnJheSBjYW4gYmUgTlVMTCwgc2luY2UKKwkgKiBmb3IgZXhhbXBsZSBwYWdlIGNhbiBiZSB1bmRlciB3cml0ZWJhY2sgYWxyZWFkeSwKKwkgKiBzbyB3ZSBza2lwIGl0IGluIHRoaXMgdHJhbnNhY3Rpb24uCisJICovCisJdW5zaWduZWQgaW50CQkJcGFnZV9udW07CisKKwkvKgorCSAqIFRyYW5zYWN0aW9uIGZsYWdzOiBzaW5nbGUgZHN0IG9yIGJyb2FkY2FzdCBhbmQgc28gb24uCisJICovCisJdW5zaWduZWQgaW50CQkJZmxhZ3M7CisKKwkvKgorCSAqIFNpemUgb2YgdGhlIGRhdGEsIHdoaWNoIGNhbiBiZSBwbGFjZWQgaW50bworCSAqIGlvdmVjLmlvdl9iYXNlIGFyZWEuCisJICovCisJdW5zaWduZWQgaW50CQkJdG90YWxfc2l6ZTsKKworCS8qCisJICogTnVtYmVyIG9mIHBhZ2VzIHRvIGJlIHNlbnQgdG8gcmVtb3RlIHNlcnZlci4KKwkgKiBVc3VhbGx5IGVxdWFsIHRvIGFib3ZlIHBhZ2VfbnVtLCBidXQgaW4gY2FzZSBvZiBwYXJ0aWFsCisJICogd3JpdGViYWNrIGl0IGNhbiBhY2N1bXVsYXRlIG9ubHkgcGFnZXMgYWxyZWFkeSBjb21wbGV0ZWQKKwkgKiBwcmV2aW91cyB3cml0ZWJhY2suCisJICovCisJdW5zaWduZWQgaW50CQkJYXR0YWNoZWRfcGFnZXM7CisKKwkvKgorCSAqIEF0dGFjaGVkIG51bWJlciBvZiBieXRlcyBpbiBhbGwgYWJvdmUgcGFnZXMuCisJICovCisJdW5zaWduZWQgaW50CQkJYXR0YWNoZWRfc2l6ZTsKKworCS8qCisJICogVW5pcXVlIHRyYW5zYWN0b24gZ2VuZXJhdGlvbiBudW1iZXIuCisJICogVXNlZCBhcyBpZGVudGl0eSBpbiB0aGUgbmV0d29yayBzdGF0ZSB0cmVlIG9mIHRyYW5zYWN0aW9ucy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCQlnZW47CisKKwkvKgorCSAqIFRyYW5zYWN0aW9uIGNvbXBsZXRpb24gc3RhdHVzLgorCSAqLworCWludAkJCQlyZXN1bHQ7CisKKwkvKgorCSAqIFN1cGVyYmxvY2sgdGhpcyB0cmFuc2FjdGlvbiBiZWxvbmdzIHRvCisJICovCisJc3RydWN0IHBvaG1lbGZzX3NiCQkqcHNiOworCisJLyoKKwkgKiBDcnlwdG8gZW5naW5lLCB3aGljaCBwcm9jZXNzZWQgdGhpcyB0cmFuc2FjdGlvbi4KKwkgKiBDYW4gYmUgbm90IE5VTEwgb25seSBpZiBjcnlwdG8gZW5naW5lIGhvbGRzIGVuY3J5cHRlZCBwYWdlcy4KKwkgKi8KKwlzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZQkqZW5nOworCisJLyogUHJpdmF0ZSBkYXRhICovCisJdm9pZAkJCQkqcHJpdmF0ZTsKKworCS8qIENvbXBsZXRpb24gY2FsbGJhY2ssIGludm9rZWQganVzdCBiZWZvcmUgdHJhbnNhY3Rpb24gaXMgZGVzdHJveWVkICovCisJbmV0ZnNfdHJhbnNfY29tcGxldGVfdAkJY29tcGxldGU7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBuZXRmc190cmFuc19jdXJfbGVuKHN0cnVjdCBuZXRmc190cmFucyAqdCkKK3sKKwlyZXR1cm4gKHNpZ25lZCkodC0+dG90YWxfc2l6ZSAtIHQtPmlvdmVjLmlvdl9sZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKm5ldGZzX3RyYW5zX2N1cnJlbnQoc3RydWN0IG5ldGZzX3RyYW5zICp0KQoreworCXJldHVybiB0LT5pb3ZlYy5pb3ZfYmFzZSArIHQtPmlvdmVjLmlvdl9sZW47Cit9CisKK3N0cnVjdCBuZXRmc190cmFucyAqbmV0ZnNfdHJhbnNfYWxsb2Moc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHVuc2lnbmVkIGludCBzaXplLAorCQl1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBucik7Cit2b2lkIG5ldGZzX3RyYW5zX2ZyZWUoc3RydWN0IG5ldGZzX3RyYW5zICp0KTsKK2ludCBuZXRmc190cmFuc19maW5pc2goc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7CitpbnQgbmV0ZnNfdHJhbnNfZmluaXNoX3NlbmQoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc190cmFuc19yZXNldChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQpCit7CisJdC0+Y29tcGxldGUgPSBOVUxMOworfQorCitzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0Cit7CisJc3RydWN0IGxpc3RfaGVhZAkJdHJhbnNfZW50cnk7CisJc3RydWN0IHJiX25vZGUJCQlzdGF0ZV9lbnRyeTsKKworCXVuc2lnbmVkIGxvbmcJCQlzZW5kX3RpbWU7CisKKwkvKgorCSAqIFRpbWVzIHRoaXMgdHJhbnNhY3Rpb24gd2FzIHJlc2VudCB0byBpdHMgb2xkIG9yIG5ldywKKwkgKiBkZXBlbmRpbmcgb24gZmxhZ3MsIGRlc3RpbmF0aW9ucy4gV2hlbiBpdCByZWFjaGVzIG1heGltdW0KKwkgKiBhbGxvd2VkIG51bWJlciwgc3BlY2lmaWVkIGluIHN1cGVyYmxvY2stPnRyYW5zX3JldHJpZXMsCisJICogdHJhbnNhY3Rpb24gd2lsbCBiZSBmcmVlZCB3aXRoIEVUSU1FRE9VVCBlcnJvci4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCQlyZXRyaWVzOworCisJc3RydWN0IG5ldGZzX3RyYW5zCQkqdHJhbnM7CisJc3RydWN0IG5ldGZzX3N0YXRlCQkqc3RhdGU7Cit9OworCitzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpuZXRmc190cmFuc19zZWFyY2goc3RydWN0IG5ldGZzX3N0YXRlICpzdCwgdW5zaWduZWQgaW50IGdlbik7Cit2b2lkIG5ldGZzX3RyYW5zX2Ryb3BfZHN0KHN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdCk7Cit2b2lkIG5ldGZzX3RyYW5zX2Ryb3BfZHN0X25vc3RhdGUoc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0KTsKK3ZvaWQgbmV0ZnNfdHJhbnNfZHJvcF90cmFucyhzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpOwordm9pZCBuZXRmc190cmFuc19kcm9wX2xhc3Qoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KTsKK2ludCBuZXRmc190cmFuc19yZXNlbmQoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7CitpbnQgbmV0ZnNfdHJhbnNfcmVtb3ZlX25vbG9jayhzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3QsIHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpOworCitpbnQgbmV0ZnNfdHJhbnNfaW5pdCh2b2lkKTsKK3ZvaWQgbmV0ZnNfdHJhbnNfZXhpdCh2b2lkKTsKKworc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUKK3sKKwl1NjQJCQkJaXY7CQkvKiBDcnlwdG8gSVYgZm9yIGN1cnJlbnQgb3BlcmF0aW9uICovCisJdW5zaWduZWQgbG9uZwkJCXRpbWVvdXQ7CS8qIENyeXB0byB3YWl0aW5nIHRpbWVvdXQgKi8KKwl1bnNpZ25lZCBpbnQJCQlzaXplOwkJLyogU2l6ZSBvZiBjcnlwdG8gc2NyYXRjaHBhZCAqLworCXZvaWQJCQkJKmRhdGE7CQkvKiBUZW1wb3JhbCBjcnlwdG8gc2NyYXRjaHBhZCAqLworCS8qCisJICogQ3J5cHRvIG9wZXJhdGlvbnMgcGVyZm9ybWVkIG9uIG9iamVjdHMuCisJICovCisJc3RydWN0IGNyeXB0b19oYXNoCQkqaGFzaDsKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIJKmNpcGhlcjsKKworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkCSp0aHJlYWQ7CS8qIENyeXB0byB0aHJlYWQgd2hpY2ggaG9zdHMgdGhpcyBlbmdpbmUgKi8KKworCXN0cnVjdCBwYWdlCQkJKipwYWdlczsKKwl1bnNpZ25lZCBpbnQJCQlwYWdlX251bTsKK307CisKK3N0cnVjdCBwb2htZWxmc19jcnlwdG9fdGhyZWFkCit7CisJc3RydWN0IGxpc3RfaGVhZAkJdGhyZWFkX2VudHJ5OworCisJc3RydWN0IHRhc2tfc3RydWN0CQkqdGhyZWFkOworCXN0cnVjdCBwb2htZWxmc19zYgkJKnBzYjsKKworCXN0cnVjdCBwb2htZWxmc19jcnlwdG9fZW5naW5lCWVuZzsKKworCXN0cnVjdCBuZXRmc190cmFucwkJKnRyYW5zOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJCXdhaXQ7CisJaW50CQkJCWVycm9yOworCisJdW5zaWduZWQgaW50CQkJc2l6ZTsKKwlzdHJ1Y3QgcGFnZQkJCSpwYWdlOworfTsKKwordm9pZCBwb2htZWxmc19jcnlwdG9fdGhyZWFkX21ha2VfcmVhZHkoc3RydWN0IHBvaG1lbGZzX2NyeXB0b190aHJlYWQgKnRoKTsKKworLyoKKyAqIE5ldHdvcmsgc3RhdGUsIGF0dGFjaGVkIHRvIG9uZSBzZXJ2ZXIuCisgKi8KK3N0cnVjdCBuZXRmc19zdGF0ZQoreworCXN0cnVjdCBtdXRleAkJX19zdGF0ZV9sb2NrOwkJLyogQ2FuIG5vdCBhbGxvdyB0byB1c2UgdGhlIHNhbWUgc29ja2V0IHNpbXVsdGFuZW91c2x5ICovCisJc3RydWN0IG11dGV4CQlfX3N0YXRlX3NlbmRfbG9jazsKKwlzdHJ1Y3QgbmV0ZnNfY21kIAljbWQ7CQkJLyogQ2FjaGVkIGNvbW1hbmQgKi8KKwlzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbwlpbmZvOwkJCS8qIENhY2hlZCBpbm9kZSBpbmZvICovCisKKwl2b2lkCQkJKmRhdGE7CQkJLyogQ2FjaGVkIHNvbWUgZGF0YSAqLworCXVuc2lnbmVkIGludAkJc2l6ZTsJCQkvKiBTaXplIG9mIHRoYXQgZGF0YSAqLworCisJc3RydWN0IHBvaG1lbGZzX3NiCSpwc2I7CQkJLyogU3VwZXJibG9jayAqLworCisJc3RydWN0IHRhc2tfc3RydWN0CSp0aHJlYWQ7CQkvKiBBc3luYyByZWNlaXZpbmcgdGhyZWFkICovCisKKwkvKiBXYWl0aW5nL3BvbGxpbmcgbWFjaGluZXJ5ICovCisJd2FpdF9xdWV1ZV90IAkJd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAJKndoZWFkOworCXdhaXRfcXVldWVfaGVhZF90IAl0aHJlYWRfd2FpdDsKKworCXN0cnVjdCBtdXRleAkJdHJhbnNfbG9jazsKKwlzdHJ1Y3QgcmJfcm9vdAkJdHJhbnNfcm9vdDsKKworCXN0cnVjdCBwb2htZWxmc19jdGwJY3RsOwkJCS8qIFJlbW90ZSBwZWVyICovCisKKwlzdHJ1Y3Qgc29ja2V0CQkqc29ja2V0OwkJLyogU29ja2V0IG9iamVjdCAqLworCXN0cnVjdCBzb2NrZXQJCSpyZWFkX3NvY2tldDsJCS8qIENhY2hlZCBwb2ludGVyIHRvIHNvY2tldCBvYmplY3QuCisJCQkJCQkJICogVXNlZCB0byBkZXRlcm1pbmUgaWYgYmV0d2VlbiBsb2NrIGRyb3BzIHNvY2tldCB3YXMgY2hhbmdlZC4KKwkJCQkJCQkgKiBOZXZlciB1c2VkIHRvIHJlYWQgZGF0YSBvciBhbnkga2luZCBvZiBhY2Nlc3MuCisJCQkJCQkJICovCisJLyoKKwkgKiBDcnlwdG8gZW5naW5lcyB0byBwcm9jZXNzIGluY29taW5nIGRhdGEuCisJICovCisJc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUJZW5nOworCisJaW50CQkJbmVlZF9yZXNldDsKK307CisKK2ludCBuZXRmc19zdGF0ZV9pbml0KHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpOwordm9pZCBuZXRmc19zdGF0ZV9leGl0KHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfc3RhdGVfbG9ja19zZW5kKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJbXV0ZXhfbG9jaygmc3QtPl9fc3RhdGVfc2VuZF9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmV0ZnNfc3RhdGVfdHJ5bG9ja19zZW5kKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJcmV0dXJuIG11dGV4X3RyeWxvY2soJnN0LT5fX3N0YXRlX3NlbmRfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRmc19zdGF0ZV91bmxvY2tfc2VuZChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZzdC0+X19zdGF0ZV9zZW5kX2xvY2spKTsKKworCW11dGV4X3VubG9jaygmc3QtPl9fc3RhdGVfc2VuZF9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX3N0YXRlX2xvY2soc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwltdXRleF9sb2NrKCZzdC0+X19zdGF0ZV9sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX3N0YXRlX3VubG9jayhzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZzdC0+X19zdGF0ZV9sb2NrKSk7CisKKwltdXRleF91bmxvY2soJnN0LT5fX3N0YXRlX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuZXRmc19zdGF0ZV9wb2xsKHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJdW5zaWduZWQgaW50IHJldmVudHMgPSBQT0xMSFVQIHwgUE9MTEVSUjsKKworCW5ldGZzX3N0YXRlX2xvY2soc3QpOworCWlmIChzdC0+c29ja2V0KQorCQlyZXZlbnRzID0gc3QtPnNvY2tldC0+b3BzLT5wb2xsKE5VTEwsIHN0LT5zb2NrZXQsIE5VTEwpOworCW5ldGZzX3N0YXRlX3VubG9jayhzdCk7CisKKwlyZXR1cm4gcmV2ZW50czsKK30KKworc3RydWN0IHBvaG1lbGZzX2NvbmZpZzsKKworc3RydWN0IHBvaG1lbGZzX3NiCit7CisJc3RydWN0IHJiX3Jvb3QJCW1jYWNoZV9yb290OworCXN0cnVjdCBtdXRleAkJbWNhY2hlX2xvY2s7CisJYXRvbWljX2xvbmdfdAkJbWNhY2hlX2dlbjsKKwl1bnNpZ25lZCBsb25nCQltY2FjaGVfdGltZW91dDsKKworCXVuc2lnbmVkIGludAkJaWR4OworCisJdW5zaWduZWQgaW50CQl0cmFuc19yZXRyaWVzOworCisJYXRvbWljX3QJCXRyYW5zX2dlbjsKKworCXVuc2lnbmVkIGludAkJY3J5cHRvX2F0dGFjaGVkX3NpemU7CisJdW5zaWduZWQgaW50CQljcnlwdG9fYWxpZ25fc2l6ZTsKKworCXVuc2lnbmVkIGludAkJY3J5cHRvX2ZhaWxfdW5zdXBwb3J0ZWQ7CisKKwl1bnNpZ25lZCBpbnQJCWNyeXB0b190aHJlYWRfbnVtOworCXN0cnVjdCBsaXN0X2hlYWQJY3J5cHRvX2FjdGl2ZV9saXN0LCBjcnlwdG9fcmVhZHlfbGlzdDsKKwlzdHJ1Y3QgbXV0ZXgJCWNyeXB0b190aHJlYWRfbG9jazsKKworCXVuc2lnbmVkIGludAkJdHJhbnNfbWF4X3BhZ2VzOworCXVuc2lnbmVkIGxvbmcJCXRyYW5zX2RhdGFfc2l6ZTsKKwl1bnNpZ25lZCBsb25nCQl0cmFuc190aW1lb3V0OworCisJdW5zaWduZWQgbG9uZwkJZHJvcF9zY2FuX3RpbWVvdXQ7CisJdW5zaWduZWQgbG9uZwkJdHJhbnNfc2Nhbl90aW1lb3V0OworCisJdW5zaWduZWQgbG9uZwkJd2FpdF9vbl9wYWdlX3RpbWVvdXQ7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZsdXNoX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlkcm9wX2xpc3Q7CisJc3BpbmxvY2tfdAkJaW5vX2xvY2s7CisJdTY0CQkJaW5vOworCisJLyoKKwkgKiBSZW1vdGUgbm9kZXMgUE9ITUVMRlMgY29ubmVjdGVkIHRvLgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQJc3RhdGVfbGlzdDsKKwlzdHJ1Y3QgbXV0ZXgJCXN0YXRlX2xvY2s7CisKKwkvKgorCSAqIEN1cnJlbnRseSBhY3RpdmUgc3RhdGUgdG8gcmVxdWVzdCBkYXRhIGZyb20uCisJICovCisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZwkqYWN0aXZlX3N0YXRlOworCisKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OworCisJLyoKKwkgKiBUaW1lZCBjaGVja3M6IHN0YWxlIHRyYW5zYWN0aW9ucywgaW5vZGVzIHRvIGJlIGZyZWVkIGFuZCBzbyBvbi4KKwkgKi8KKwlzdHJ1Y3QgZGVsYXllZF93b3JrIAlkd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIAlkcm9wX2R3b3JrOworCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYjsKKworCS8qCisJICogQWxnb3JpdGhtIHN0cmluZ3MuCisJICovCisJY2hhcgkJCSpoYXNoX3N0cmluZzsKKwljaGFyCQkJKmNpcGhlcl9zdHJpbmc7CisKKwl1OAkJCSpoYXNoX2tleTsKKwl1OAkJCSpjaXBoZXJfa2V5OworCisJLyoKKwkgKiBBbGdvcml0aG0gc3RyaW5nIGxlbmd0aHMuCisJICovCisJdW5zaWduZWQgaW50CQloYXNoX3N0cmxlbjsKKwl1bnNpZ25lZCBpbnQJCWNpcGhlcl9zdHJsZW47CisJdW5zaWduZWQgaW50CQloYXNoX2tleXNpemU7CisJdW5zaWduZWQgaW50CQljaXBoZXJfa2V5c2l6ZTsKKworCS8qCisJICogQ29udHJvbHMgd2hldGhlciB0byBwZXJmcm9tIGNyeXB0byBwcm9jZXNzaW5nIG9yIG5vdC4KKwkgKi8KKwlpbnQJCQlwZXJmb3JtX2NyeXB0bzsKKworCS8qCisJICogUE9ITUVMRlMgc3RhdGlzdGljcy4KKwkgKi8KKwl1NjQJCQl0b3RhbF9zaXplOworCXU2NAkJCWF2YWlsX3NpemU7CisJYXRvbWljX2xvbmdfdAkJdG90YWxfaW5vZGVzOworCisJLyoKKwkgKiBYYXR0ciBzdXBwb3J0LCByZWFkLW9ubHkgYW5kIHNvIG9uLgorCSAqLworCXU2NAkJCXN0YXRlX2ZsYWdzOworCisJLyoKKwkgKiBUZW1wb3Jhcnkgc3RvcmFnZSB0byBkZXRlY3QgY2hhbmdlcyBpbiB0aGUgd2FpdCBxdWV1ZS4KKwkgKi8KKwlsb25nCQkJZmxhZ3M7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0ZnNfdHJhbnNfdXBkYXRlKHN0cnVjdCBuZXRmc19jbWQgKmNtZCwKKwkJc3RydWN0IG5ldGZzX3RyYW5zICp0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgc3ogPSBBTElHTihzaXplLCB0LT5wc2ItPmNyeXB0b19hbGlnbl9zaXplKTsKKworCXQtPmlvdmVjLmlvdl9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpICsgc3o7CisJY21kLT5jcGFkID0gX19jcHVfdG9fYmUxNihzeiAtIHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwb2htZWxmc19zYiAqUE9ITUVMRlNfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKlBPSE1FTEZTX0koc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgcG9obWVsZnNfaW5vZGUsIHZmc19pbm9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IHBvaG1lbGZzX25ld19pbm8oc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJdTY0IGlubzsKKworCXNwaW5fbG9jaygmcHNiLT5pbm9fbG9jayk7CisJaW5vID0gcHNiLT5pbm8rKzsKKwlzcGluX3VubG9jaygmcHNiLT5pbm9fbG9jayk7CisKKwlyZXR1cm4gaW5vOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG9obWVsZnNfcHV0X2lub2RlKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkpCit7CisJc3RydWN0IHBvaG1lbGZzX3NiICpwc2IgPSBQT0hNRUxGU19TQihwaS0+dmZzX2lub2RlLmlfc2IpOworCisJc3Bpbl9sb2NrKCZwc2ItPmlub19sb2NrKTsKKwlsaXN0X21vdmVfdGFpbCgmcGktPmlub2RlX2VudHJ5LCAmcHNiLT5kcm9wX2xpc3QpOworCXBpLT5kcm9wX2NvdW50Kys7CisJc3Bpbl91bmxvY2soJnBzYi0+aW5vX2xvY2spOworfQorCitzdHJ1Y3QgcG9obWVsZnNfY29uZmlnCit7CisJc3RydWN0IGxpc3RfaGVhZAljb25maWdfZW50cnk7CisKKwlzdHJ1Y3QgbmV0ZnNfc3RhdGUJc3RhdGU7Cit9OworCitzdHJ1Y3QgcG9obWVsZnNfY29uZmlnX2dyb3VwCit7CisJLyoKKwkgKiBFbnRyeSBpbiB0aGUgZ2xvYmFsIGNvbmZpZyBncm91cCBsaXN0LgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQJZ3JvdXBfZW50cnk7CisKKwkvKgorCSAqIEluZGV4IG9mIHRoZSBjdXJyZW50IGdyb3VwLgorCSAqLworCXVuc2lnbmVkIGludAkJaWR4OworCS8qCisJICogTnVtYmVyIG9mIGNvbmZpZ19saXN0IGVudHJpZXMgaW4gdGhpcyBncm91cCBlbnRyeS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJCW51bV9lbnRyeTsKKwkvKgorCSAqIEFsZ29yaXRobSBzdHJpbmdzLgorCSAqLworCWNoYXIJCQkqaGFzaF9zdHJpbmc7CisJY2hhcgkJCSpjaXBoZXJfc3RyaW5nOworCisJLyoKKwkgKiBBbGdvcml0aG0gc3RyaW5nIGxlbmd0aHMuCisJICovCisJdW5zaWduZWQgaW50CQloYXNoX3N0cmxlbjsKKwl1bnNpZ25lZCBpbnQJCWNpcGhlcl9zdHJsZW47CisKKwkvKgorCSAqIEtleSBhbmQgaXRzIHNpemUuCisJICovCisJdW5zaWduZWQgaW50CQloYXNoX2tleXNpemU7CisJdW5zaWduZWQgaW50CQljaXBoZXJfa2V5c2l6ZTsKKwl1OAkJCSpoYXNoX2tleTsKKwl1OAkJCSpjaXBoZXJfa2V5OworCisJLyoKKwkgKiBMaXN0IG9mIGNvbmZpZyBlbnRyaWVzIChuZXR3b3JrIHN0YXRlIGluZm8pIGZvciBnaXZlbiBpZHguCisJICovCisJc3RydWN0IGxpc3RfaGVhZAljb25maWdfbGlzdDsKK307CisKK2ludCBfX2luaXQgcG9obWVsZnNfY29uZmlnX2luaXQodm9pZCk7Cit2b2lkIHBvaG1lbGZzX2NvbmZpZ19leGl0KHZvaWQpOworaW50IHBvaG1lbGZzX2NvcHlfY29uZmlnKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKK2ludCBwb2htZWxmc19jb3B5X2NyeXB0byhzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7CitpbnQgcG9obWVsZnNfY29uZmlnX2NoZWNrKHN0cnVjdCBwb2htZWxmc19jb25maWcgKmNvbmZpZywgaW50IGlkeCk7CitpbnQgcG9obWVsZnNfc3RhdGVfaW5pdF9vbmUoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHN0cnVjdCBwb2htZWxmc19jb25maWcgKmNvbmYpOworCitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb2htZWxmc19kaXJfZm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwb2htZWxmc19kaXJfaW5vZGVfb3BzOworCitpbnQgcG9obWVsZnNfc3RhdGVfaW5pdChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7Cit2b2lkIHBvaG1lbGZzX3N0YXRlX2V4aXQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOwordm9pZCBwb2htZWxmc19zdGF0ZV9mbHVzaF90cmFuc2FjdGlvbnMoc3RydWN0IG5ldGZzX3N0YXRlICpzdCk7CisKK3ZvaWQgcG9obWVsZnNfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqaW5mbyk7CisKK3ZvaWQgcG9obWVsZnNfbmFtZV9kZWwoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBwb2htZWxmc19uYW1lICpuKTsKK3ZvaWQgcG9obWVsZnNfZnJlZV9uYW1lcyhzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBhcmVudCk7CitzdHJ1Y3QgcG9obWVsZnNfbmFtZSAqcG9obWVsZnNfc2VhcmNoX2hhc2goc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdTMyIGhhc2gpOworCit2b2lkIHBvaG1lbGZzX2lub2RlX2RlbF9pbm9kZShzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSk7CisKK3N0cnVjdCBwb2htZWxmc19pbm9kZSAqcG9obWVsZnNfY3JlYXRlX2VudHJ5X2xvY2FsKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLAorCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqc3RyLCB1NjQgc3RhcnQsIGludCBtb2RlKTsKKworaW50IHBvaG1lbGZzX3dyaXRlX2NyZWF0ZV9pbm9kZShzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpKTsKKworaW50IHBvaG1lbGZzX3dyaXRlX2lub2RlX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnRyYW5zKTsKK2ludCBwb2htZWxmc19yZW1vdmVfY2hpbGQoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwYXJlbnQsIHN0cnVjdCBwb2htZWxmc19uYW1lICpuKTsKKworc3RydWN0IHBvaG1lbGZzX2lub2RlICpwb2htZWxmc19uZXdfaW5vZGUoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsCisJCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGFyZW50LCBzdHJ1Y3QgcXN0ciAqc3RyLAorCQlzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbyAqaW5mbywgaW50IGxpbmspOworCitpbnQgcG9obWVsZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7CitpbnQgcG9obWVsZnNfc2V0YXR0cl9yYXcoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRyKTsKKworaW50IHBvaG1lbGZzX21ldGFfY29tbWFuZChzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1bnNpZ25lZCBpbnQgY21kX29wLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCW5ldGZzX3RyYW5zX2NvbXBsZXRlX3QgY29tcGxldGUsIHZvaWQgKnByaXYsIHU2NCBzdGFydCk7CitpbnQgcG9obWVsZnNfbWV0YV9jb21tYW5kX2RhdGEoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdTY0IGlkLCB1bnNpZ25lZCBpbnQgY21kX29wLCBjaGFyICphZGRvbiwKKwkJdW5zaWduZWQgaW50IGZsYWdzLCBuZXRmc190cmFuc19jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpwcml2LCB1NjQgc3RhcnQpOworCit2b2lkIHBvaG1lbGZzX2NoZWNrX3N0YXRlcyhzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYik7Cit2b2lkIHBvaG1lbGZzX3N3aXRjaF9hY3RpdmUoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOworCitpbnQgcG9obWVsZnNfY29uc3RydWN0X3BhdGhfc3RyaW5nKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIHZvaWQgKmRhdGEsIGludCBsZW4pOworaW50IHBvaG1lbGZzX3BhdGhfbGVuZ3RoKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkpOworCitzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2NvbXBsZXRpb24KK3sKKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0ZTsKKwlpbnQJCQllcnJvcjsKK307CisKK2ludCBwb2htZWxmc190cmFuc19jcnlwdChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKK3ZvaWQgcG9obWVsZnNfY3J5cHRvX2V4aXQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOworaW50IHBvaG1lbGZzX2NyeXB0b19pbml0KHN0cnVjdCBwb2htZWxmc19zYiAqcHNiKTsKKworaW50IHBvaG1lbGZzX2NyeXB0b19lbmdpbmVfaW5pdChzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSwgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpOwordm9pZCBwb2htZWxmc19jcnlwdG9fZW5naW5lX2V4aXQoc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUpOworCitpbnQgcG9obWVsZnNfY3J5cHRvX3Byb2Nlc3NfaW5wdXRfZGF0YShzdHJ1Y3QgcG9obWVsZnNfY3J5cHRvX2VuZ2luZSAqZSwgdTY0IGl2LAorCQl2b2lkICpkYXRhLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IHNpemUpOworaW50IHBvaG1lbGZzX2NyeXB0b19wcm9jZXNzX2lucHV0X3BhZ2Uoc3RydWN0IHBvaG1lbGZzX2NyeXB0b19lbmdpbmUgKmUsCisJCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdTY0IGl2KTsKKworc3RhdGljIGlubGluZSB1NjQgcG9obWVsZnNfZ2VuX2l2KHN0cnVjdCBuZXRmc190cmFucyAqdCkKK3sKKwl1NjQgaXYgPSB0LT5nZW47CisKKwlpdiA8PD0gMzI7CisJaXYgfD0gKCh1bnNpZ25lZCBsb25nKXQpICYgMHhmZmZmZmZmZjsKKworCXJldHVybiBpdjsKK30KKworaW50IHBvaG1lbGZzX2RhdGFfbG9jayhzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB1NjQgc3RhcnQsIHUzMiBzaXplLCBpbnQgdHlwZSk7CitpbnQgcG9obWVsZnNfZGF0YV91bmxvY2soc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSwgdTY0IHN0YXJ0LCB1MzIgc2l6ZSwgaW50IHR5cGUpOworaW50IHBvaG1lbGZzX2RhdGFfbG9ja19yZXNwb25zZShzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KTsKKworc3RhdGljIGlubGluZSBpbnQgcG9obWVsZnNfbmVlZF9sb2NrKHN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGksIGludCB0eXBlKQoreworCWlmICh0ZXN0X2JpdChORVRGU19JTk9ERV9PV05FRCwgJnBpLT5zdGF0ZSkpIHsKKwkJaWYgKHR5cGUgPT0gcGktPmxvY2tfdHlwZSkKKwkJCXJldHVybiAwOworCQlpZiAoKHR5cGUgPT0gUE9ITUVMRlNfUkVBRF9MT0NLKSAmJiAocGktPmxvY2tfdHlwZSA9PSBQT0hNRUxGU19XUklURV9MT0NLKSkKKwkJCXJldHVybiAwOworCX0KKworCWlmICghdGVzdF9iaXQoTkVURlNfSU5PREVfUkVNT1RFX1NZTkNFRCwgJnBpLT5zdGF0ZSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK2ludCBfX2luaXQgcG9obWVsZnNfbWNhY2hlX2luaXQodm9pZCk7Cit2b2lkIHBvaG1lbGZzX21jYWNoZV9leGl0KHZvaWQpOworCisvLyNkZWZpbmUgQ09ORklHX1BPSE1FTEZTX0RFQlVHCisKKyNpZmRlZiBDT05GSUdfUE9ITUVMRlNfREVCVUcKKyNkZWZpbmUgZHByaW50a2EoZiwgYS4uLikgcHJpbnRrKGYsICMjYSkKKyNkZWZpbmUgZHByaW50ayhmLCBhLi4uKSBwcmludGsoIiVkOiAiIGYsIHRhc2tfcGlkX3ZucihjdXJyZW50KSwgIyNhKQorI2Vsc2UKKyNkZWZpbmUgZHByaW50a2EoZiwgYS4uLikgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGRwcmludGsoZiwgYS4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX3RyYW5zX2dldChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQpCit7CisJYXRvbWljX2luYygmdC0+cmVmY250KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG5ldGZzX3RyYW5zX3B1dChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnQtPnJlZmNudCkpIHsKKwkJZHByaW50aygiJXM6IHQ6ICVwLCBnZW46ICV1LCBlcnI6ICVkLlxuIiwKKwkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIHQtPnJlc3VsdCk7CisJCWlmICh0LT5jb21wbGV0ZSkKKwkJCXQtPmNvbXBsZXRlKHQtPnBhZ2VzLCB0LT5wYWdlX251bSwKKwkJCQl0LT5wcml2YXRlLCB0LT5yZXN1bHQpOworCQluZXRmc190cmFuc19mcmVlKHQpOworCX0KK30KKworc3RydWN0IHBvaG1lbGZzX21jYWNoZQoreworCXN0cnVjdCByYl9ub2RlCQkJbWNhY2hlX2VudHJ5OworCXN0cnVjdCBjb21wbGV0aW9uCQljb21wbGV0ZTsKKworCWF0b21pY190CQkJcmVmY250OworCisJdTY0CQkJCWdlbjsKKworCXZvaWQJCQkJKmRhdGE7CisJdTY0CQkJCXN0YXJ0OworCXUzMgkJCQlzaXplOworCWludAkJCQllcnI7CisKKwlzdHJ1Y3QgbmV0ZnNfaW5vZGVfaW5mbwkJaW5mbzsKK307CisKK3N0cnVjdCBwb2htZWxmc19tY2FjaGUgKnBvaG1lbGZzX21jYWNoZV9hbGxvYyhzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgdTY0IHN0YXJ0LAorCQl1bnNpZ25lZCBpbnQgc2l6ZSwgdm9pZCAqZGF0YSk7Cit2b2lkIHBvaG1lbGZzX21jYWNoZV9mcmVlKHN0cnVjdCBwb2htZWxmc19zYiAqcHNiLCBzdHJ1Y3QgcG9obWVsZnNfbWNhY2hlICptKTsKK3N0cnVjdCBwb2htZWxmc19tY2FjaGUgKnBvaG1lbGZzX21jYWNoZV9zZWFyY2goc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHU2NCBnZW4pOwordm9pZCBwb2htZWxmc19tY2FjaGVfcmVtb3ZlX2xvY2tlZChzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYiwgc3RydWN0IHBvaG1lbGZzX21jYWNoZSAqbSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb2htZWxmc19tY2FjaGVfZ2V0KHN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm0pCit7CisJYXRvbWljX2luYygmbS0+cmVmY250KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBvaG1lbGZzX21jYWNoZV9wdXQoc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsCisJCXN0cnVjdCBwb2htZWxmc19tY2FjaGUgKm0pCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm0tPnJlZmNudCkpCisJCXBvaG1lbGZzX21jYWNoZV9mcmVlKHBzYiwgbSk7Cit9CisKK2ludCBwb2htZWxmc19mdHJhbnNfaW5pdCh2b2lkKTsKK3ZvaWQgcG9obWVsZnNfZnRyYW5zX2V4aXQodm9pZCk7Cit2b2lkIHBvaG1lbGZzX2Z0cmFuc191cGRhdGUodTY0IGlkKTsKK2ludCBwb2htZWxmc19mdHJhbnNfY2hlY2sodTY0IGlkKTsKK3ZvaWQgcG9obWVsZnNfZnRyYW5zX2NsZWFuKHU2NCBpZCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fKi8KKworI2VuZGlmIC8qIF9fTkVURlNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL3BhdGhfZW50cnkuYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9wYXRoX2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhZDg4OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9wYXRoX2VudHJ5LmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAyMDA3KyBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPHpickBpb3JlbWFwLm5ldD4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlICJuZXRmcy5oIgorCisjZGVmaW5lIFVOSEFTSEVEX09CU0NVUkVfU1RSSU5HX1NJWkUJCXNpemVvZigiIChkZWxldGVkKSIpCisKKy8qCisgKiBDcmVhdGUgcGF0aCBmcm9tIHJvb3QgZm9yIGdpdmVuIGlub2RlLgorICogUGF0aCBpcyBmb3JtZWQgYXMgc2V0IG9mIHN0dWN0dXJlcywgY29udGFpbmluZyBuYW1lIG9mIHRoZSBvYmplY3QKKyAqIGFuZCBpdHMgaW5vZGUgZGF0YSAobW9kZSwgcGVybWlzc2lvbnMgYW5kIHNvIG9uKS4KKyAqLworaW50IHBvaG1lbGZzX2NvbnN0cnVjdF9wYXRoX3N0cmluZyhzdHJ1Y3QgcG9obWVsZnNfaW5vZGUgKnBpLCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBwYXRoIHBhdGg7CisJc3RydWN0IGRlbnRyeSAqZDsKKwljaGFyICpwdHI7CisJaW50IGVyciA9IDAsIHN0cmxlbiwgcmVkdWNlID0gMDsKKworCWQgPSBkX2ZpbmRfYWxpYXMoJnBpLT52ZnNfaW5vZGUpOworCWlmICghZCkgeworCQlwcmludGsoIiVzOiBubyBhbGlhcywgbGlzdF9lbXB0eTogJWQuXG4iLCBfX2Z1bmNfXywgbGlzdF9lbXB0eSgmcGktPnZmc19pbm9kZS5pX2RlbnRyeSkpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZWFkX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwlwYXRoLm1udCA9IG1udGdldChjdXJyZW50LT5mcy0+cm9vdC5tbnQpOworCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisKKwlwYXRoLmRlbnRyeSA9IGQ7CisKKwlpZiAoIUlTX1JPT1QoZCkgJiYgZF91bmhhc2hlZChkKSkKKwkJcmVkdWNlID0gMTsKKworCXB0ciA9IGRfcGF0aCgmcGF0aCwgZGF0YSwgbGVuKTsKKwlpZiAoSVNfRVJSKHB0cikpIHsKKwkJZXJyID0gUFRSX0VSUihwdHIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocmVkdWNlICYmIGxlbiA+PSBVTkhBU0hFRF9PQlNDVVJFX1NUUklOR19TSVpFKSB7CisJCWNoYXIgKmVuZCA9IGRhdGEgKyBsZW4gLSBVTkhBU0hFRF9PQlNDVVJFX1NUUklOR19TSVpFOworCQkqZW5kID0gJ1wwJzsKKwl9CisKKwlzdHJsZW4gPSBsZW4gLSAocHRyIC0gKGNoYXIgKilkYXRhKTsKKwltZW1tb3ZlKGRhdGEsIHB0ciwgc3RybGVuKTsKKwlwdHIgPSBkYXRhOworCisJZXJyID0gc3RybGVuOworCisJZHByaW50aygiJXM6IGRuYW1lOiAnJXMnLCBsZW46ICV1LCBtYXhsZW46ICV1LCBuYW1lOiAnJXMnLCBzdHJsZW46ICVkLlxuIiwKKwkJCV9fZnVuY19fLCBkLT5kX25hbWUubmFtZSwgZC0+ZF9uYW1lLmxlbiwgbGVuLCBwdHIsIHN0cmxlbik7CisKK291dDoKKwlkcHV0KGQpOworCW1udHB1dChwYXRoLm1udCk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgcG9obWVsZnNfcGF0aF9sZW5ndGgoc3RydWN0IHBvaG1lbGZzX2lub2RlICpwaSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkLCAqcm9vdCwgKmZpcnN0OworCWludCBsZW4gPSAxOyAvKiBSb290IHNsYXNoICovCisKKwlmaXJzdCA9IGQgPSBkX2ZpbmRfYWxpYXMoJnBpLT52ZnNfaW5vZGUpOworCWlmICghZCkgeworCQlkcHJpbnRrKCIlczogaW5vOiAlbGx1LCBtb2RlOiAlby5cbiIsIF9fZnVuY19fLCBwaS0+aW5vLCBwaS0+dmZzX2lub2RlLmlfbW9kZSk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCXJvb3QgPSBkZ2V0KGN1cnJlbnQtPmZzLT5yb290LmRlbnRyeSk7CisJcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKworCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCisJaWYgKCFJU19ST09UKGQpICYmIGRfdW5oYXNoZWQoZCkpCisJCWxlbiArPSBVTkhBU0hFRF9PQlNDVVJFX1NUUklOR19TSVpFOyAvKiBPYnNjdXJlICIgKGRlbGV0ZWQpIiBzdHJpbmcgKi8KKworCXdoaWxlIChkICYmIGQgIT0gcm9vdCAmJiAhSVNfUk9PVChkKSkgeworCQlsZW4gKz0gZC0+ZF9uYW1lLmxlbiArIDE7IC8qIFBsdXMgc2xhc2ggKi8KKwkJZCA9IGQtPmRfcGFyZW50OworCX0KKwlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCisJZHB1dChyb290KTsKKwlkcHV0KGZpcnN0KTsKKworCXJldHVybiBsZW4gKyAxOyAvKiBJbmNsdWRpbmcgemVyby1ieXRlICovCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvdHJhbnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy90cmFucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYjU5NDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvdHJhbnMuYwpAQCAtMCwwICsxLDcxNSBAQAorLyoKKyAqIDIwMDcrIENvcHlyaWdodCAoYykgRXZnZW5peSBQb2x5YWtvdiA8emJyQGlvcmVtYXAubmV0PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKworI2luY2x1ZGUgIm5ldGZzLmgiCisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbmV0ZnNfdHJhbnNfZHN0Oworc3RhdGljIG1lbXBvb2xfdCAqbmV0ZnNfdHJhbnNfZHN0X3Bvb2w7CisKK3N0YXRpYyB2b2lkIG5ldGZzX3RyYW5zX2luaXRfc3RhdGljKHN0cnVjdCBuZXRmc190cmFucyAqdCwgaW50IG51bSwgaW50IHNpemUpCit7CisJdC0+cGFnZV9udW0gPSBudW07CisJdC0+dG90YWxfc2l6ZSA9IHNpemU7CisJYXRvbWljX3NldCgmdC0+cmVmY250LCAxKTsKKworCXNwaW5fbG9ja19pbml0KCZ0LT5kc3RfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnQtPmRzdF9saXN0KTsKK30KKworc3RhdGljIGludCBuZXRmc190cmFuc19zZW5kX3BhZ2VzKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBpbnQgaSwgYXR0YWNoZWRfcGFnZXMgPSB0LT5hdHRhY2hlZF9wYWdlcywgY2k7CisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IHBhZ2UgKipwYWdlcyA9ICh0LT5lbmcpP3QtPmVuZy0+cGFnZXM6dC0+cGFnZXM7CisJc3RydWN0IHBhZ2UgKnA7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwltc2cubXNnX25hbWUgPSBOVUxMOworCW1zZy5tc2dfbmFtZWxlbiA9IDA7CisJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwltc2cubXNnX2NvbnRyb2xsZW4gPSAwOworCW1zZy5tc2dfZmxhZ3MgPSBNU0dfV0FJVEFMTCB8IE1TR19NT1JFOworCisJY2kgPSAwOworCWZvciAoaT0wOyBpPHQtPnBhZ2VfbnVtOyArK2kpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdlc1tjaV07CisJCXN0cnVjdCBuZXRmc19jbWQgY21kOworCQlzdHJ1Y3QgaW92ZWMgaW87CisKKwkJcCA9IHQtPnBhZ2VzW2ldOworCisJCWlmICghcCkKKwkJCWNvbnRpbnVlOworCisJCXNpemUgPSBwYWdlX3ByaXZhdGUocCk7CisKKwkJaW8uaW92X2Jhc2UgPSAmY21kOworCQlpby5pb3ZfbGVuID0gc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpOworCisJCWNtZC5jbWQgPSBORVRGU19XUklURV9QQUdFOworCQljbWQuZXh0ID0gMDsKKwkJY21kLmlkID0gMDsKKwkJY21kLnNpemUgPSBzaXplOworCQljbWQuc3RhcnQgPSBwLT5pbmRleDsKKwkJY21kLnN0YXJ0IDw8PSBQQUdFX0NBQ0hFX1NISUZUOworCQljbWQuY3NpemUgPSAwOworCQljbWQuY3BhZCA9IDA7CisJCWNtZC5pdiA9IHBvaG1lbGZzX2dlbl9pdih0KTsKKworCQluZXRmc19jb252ZXJ0X2NtZCgmY21kKTsKKworCQltc2cubXNnX2lvdiA9ICZpbzsKKwkJbXNnLm1zZ19pb3ZsZW4gPSAxOworCQltc2cubXNnX2ZsYWdzID0gTVNHX1dBSVRBTEwgfCBNU0dfTU9SRTsKKworCQllcnIgPSBrZXJuZWxfc2VuZG1zZyhzdC0+c29ja2V0LCAmbXNnLCAoc3RydWN0IGt2ZWMgKiltc2cubXNnX2lvdiwgMSwgc2l6ZW9mKHN0cnVjdCBuZXRmc19jbWQpKTsKKwkJaWYgKGVyciA8PSAwKSB7CisJCQlwcmludGsoIiVzOiAlZC8lZCBmYWlsZWQgdG8gc2VuZCB0cmFuc2FjdGlvbiBoZWFkZXI6IHQ6ICVwLCBnZW46ICV1LCBlcnI6ICVkLlxuIiwKKwkJCQkJX19mdW5jX18sIGksIHQtPnBhZ2VfbnVtLCB0LCB0LT5nZW4sIGVycik7CisJCQlpZiAoZXJyID09IDApCisJCQkJZXJyID0gLUVDT05OUkVTRVQ7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKworCQltc2cubXNnX2ZsYWdzID0gTVNHX1dBSVRBTEx8KGF0dGFjaGVkX3BhZ2VzID09IDEpPzA6TVNHX01PUkU7CisKKwkJZXJyID0ga2VybmVsX3NlbmRwYWdlKHN0LT5zb2NrZXQsIHBhZ2UsIDAsIHNpemUsIG1zZy5tc2dfZmxhZ3MpOworCQlpZiAoZXJyIDw9IDApIHsKKwkJCXByaW50aygiJXM6ICVkLyVkIGZhaWxlZCB0byBzZW5kIHRyYW5zYWN0aW9uIHBhZ2U6IHQ6ICVwLCBnZW46ICV1LCBzaXplOiAldSwgZXJyOiAlZC5cbiIsCisJCQkJCV9fZnVuY19fLCBpLCB0LT5wYWdlX251bSwgdCwgdC0+Z2VuLCBzaXplLCBlcnIpOworCQkJaWYgKGVyciA9PSAwKQorCQkJCWVyciA9IC1FQ09OTlJFU0VUOworCQkJZ290byBlcnJfb3V0OworCQl9CisKKwkJZHByaW50aygiJXM6ICVkLyVkIHNlbnQgdDogJXAsIGdlbjogJXUsIHBhZ2U6ICVwLyVwLCBzaXplOiAldS5cbiIsCisJCQlfX2Z1bmNfXywgaSwgdC0+cGFnZV9udW0sIHQsIHQtPmdlbiwgcGFnZSwgcCwgc2l6ZSk7CisKKwkJZXJyID0gMDsKKwkJYXR0YWNoZWRfcGFnZXMtLTsKKwkJaWYgKCFhdHRhY2hlZF9wYWdlcykKKwkJCWJyZWFrOworCQljaSsrOworCisJCWNvbnRpbnVlOworCitlcnJfb3V0OgorCQlwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAldSwgZXJyOiAlZC5cbiIsIF9fZnVuY19fLCB0LCB0LT5nZW4sIGVycik7CisJCW5ldGZzX3N0YXRlX2V4aXQoc3QpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbmV0ZnNfdHJhbnNfc2VuZChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKworCUJVR19PTighdC0+aW92ZWMuaW92X2xlbik7CisJQlVHX09OKHQtPmlvdmVjLmlvdl9sZW4gPiAxMDI0KjEwMjQqMTAyNCk7CisKKwluZXRmc19zdGF0ZV9sb2NrX3NlbmQoc3QpOworCWlmICghc3QtPnNvY2tldCkgeworCQllcnIgPSBuZXRmc19zdGF0ZV9pbml0KHN0KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dF91bmxvY2tfcmV0dXJuOworCX0KKworCW1zZy5tc2dfaW92ID0gJnQtPmlvdmVjOworCW1zZy5tc2dfaW92bGVuID0gMTsKKwltc2cubXNnX25hbWUgPSBOVUxMOworCW1zZy5tc2dfbmFtZWxlbiA9IDA7CisJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwltc2cubXNnX2NvbnRyb2xsZW4gPSAwOworCW1zZy5tc2dfZmxhZ3MgPSBNU0dfV0FJVEFMTDsKKworCWlmICh0LT5hdHRhY2hlZF9wYWdlcykKKwkJbXNnLm1zZ19mbGFncyB8PSBNU0dfTU9SRTsKKworCWVyciA9IGtlcm5lbF9zZW5kbXNnKHN0LT5zb2NrZXQsICZtc2csIChzdHJ1Y3Qga3ZlYyAqKW1zZy5tc2dfaW92LCAxLCB0LT5pb3ZlYy5pb3ZfbGVuKTsKKwlpZiAoZXJyIDw9IDApIHsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIHNlbmQgY29udGlnIHRyYW5zYWN0aW9uOiB0OiAlcCwgZ2VuOiAldSwgc2l6ZTogJXp1LCBlcnI6ICVkLlxuIiwKKwkJCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCB0LT5pb3ZlYy5pb3ZfbGVuLCBlcnIpOworCQlpZiAoZXJyID09IDApCisJCQllcnIgPSAtRUNPTk5SRVNFVDsKKwkJZ290byBlcnJfb3V0X3VubG9ja19yZXR1cm47CisJfQorCisJZHByaW50aygiJXM6IHNlbnQgJXMgdHJhbnNhY3Rpb246IHQ6ICVwLCBnZW46ICV1LCBzaXplOiAlenUsIHBhZ2VfbnVtOiAldS5cbiIsCisJCQlfX2Z1bmNfXywgKHQtPnBhZ2VfbnVtKT8icGFydGlhbCI6ImZ1bGwiLAorCQkJdCwgdC0+Z2VuLCB0LT5pb3ZlYy5pb3ZfbGVuLCB0LT5wYWdlX251bSk7CisKKwllcnIgPSAwOworCWlmICh0LT5hdHRhY2hlZF9wYWdlcykKKwkJZXJyID0gbmV0ZnNfdHJhbnNfc2VuZF9wYWdlcyh0LCBzdCk7CisKK2Vycl9vdXRfdW5sb2NrX3JldHVybjoKKworCWlmIChzdC0+bmVlZF9yZXNldCkgeworCQluZXRmc19zdGF0ZV9leGl0KHN0KTsKKwl9CisJbmV0ZnNfc3RhdGVfdW5sb2NrX3NlbmQoc3QpOworCisJZHByaW50aygiJXM6IHQ6ICVwLCBnZW46ICV1LCBlcnI6ICVkLlxuIiwKKwkJX19mdW5jX18sIHQsIHQtPmdlbiwgZXJyKTsKKworCXQtPnJlc3VsdCA9IGVycjsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZXRmc190cmFuc19jbXAodW5zaWduZWQgaW50IGdlbiwgdW5zaWduZWQgaW50IG5ldykKK3sKKwlpZiAoZ2VuIDwgbmV3KQorCQlyZXR1cm4gMTsKKwlpZiAoZ2VuID4gbmV3KQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBuZXRmc190cmFuc19kc3QgKm5ldGZzX3RyYW5zX3NlYXJjaChzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0LCB1bnNpZ25lZCBpbnQgZ2VuKQoreworCXN0cnVjdCByYl9yb290ICpyb290ID0gJnN0LT50cmFuc19yb290OworCXN0cnVjdCByYl9ub2RlICpuID0gcm9vdC0+cmJfbm9kZTsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICp0bXAsICpyZXQgPSBOVUxMOworCXN0cnVjdCBuZXRmc190cmFucyAqdDsKKwlpbnQgY21wOworCisJd2hpbGUgKG4pIHsKKwkJdG1wID0gcmJfZW50cnkobiwgc3RydWN0IG5ldGZzX3RyYW5zX2RzdCwgc3RhdGVfZW50cnkpOworCQl0ID0gdG1wLT50cmFuczsKKworCQljbXAgPSBuZXRmc190cmFuc19jbXAodC0+Z2VuLCBnZW4pOworCQlpZiAoY21wIDwgMCkKKwkJCW4gPSBuLT5yYl9sZWZ0OworCQllbHNlIGlmIChjbXAgPiAwKQorCQkJbiA9IG4tPnJiX3JpZ2h0OworCQllbHNlIHsKKwkJCXJldCA9IHRtcDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuZXRmc190cmFuc19pbnNlcnQoc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqbmRzdCwgc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZzdC0+dHJhbnNfcm9vdDsKKwlzdHJ1Y3QgcmJfbm9kZSAqKm4gPSAmcm9vdC0+cmJfbm9kZSwgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqcmV0ID0gTlVMTCwgKnRtcDsKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQgPSBOVUxMLCAqbmV3ID0gbmRzdC0+dHJhbnM7CisJaW50IGNtcDsKKworCXdoaWxlICgqbikgeworCQlwYXJlbnQgPSAqbjsKKworCQl0bXAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBuZXRmc190cmFuc19kc3QsIHN0YXRlX2VudHJ5KTsKKwkJdCA9IHRtcC0+dHJhbnM7CisKKwkJY21wID0gbmV0ZnNfdHJhbnNfY21wKHQtPmdlbiwgbmV3LT5nZW4pOworCQlpZiAoY21wIDwgMCkKKwkJCW4gPSAmcGFyZW50LT5yYl9sZWZ0OworCQllbHNlIGlmIChjbXAgPiAwKQorCQkJbiA9ICZwYXJlbnQtPnJiX3JpZ2h0OworCQllbHNlIHsKKwkJCXJldCA9IHRtcDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHJldCkgeworCQlwcmludGsoIiVzOiBleGlzdDogb2xkOiBnZW46ICV1LCBmbGFnczogJXgsIHNlbmRfdGltZTogJWx1LCAiCisJCQkJIm5ldzogZ2VuOiAldSwgZmxhZ3M6ICV4LCBzZW5kX3RpbWU6ICVsdS5cbiIsCisJCQlfX2Z1bmNfXywgdC0+Z2VuLCB0LT5mbGFncywgcmV0LT5zZW5kX3RpbWUsCisJCQluZXctPmdlbiwgbmV3LT5mbGFncywgbmRzdC0+c2VuZF90aW1lKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcmJfbGlua19ub2RlKCZuZHN0LT5zdGF0ZV9lbnRyeSwgcGFyZW50LCBuKTsKKwlyYl9pbnNlcnRfY29sb3IoJm5kc3QtPnN0YXRlX2VudHJ5LCByb290KTsKKwluZHN0LT5zZW5kX3RpbWUgPSBqaWZmaWVzOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBuZXRmc190cmFuc19yZW1vdmVfbm9sb2NrKHN0cnVjdCBuZXRmc190cmFuc19kc3QgKmRzdCwgc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlpZiAoZHN0ICYmIGRzdC0+c3RhdGVfZW50cnkucmJfcGFyZW50X2NvbG9yKSB7CisJCXJiX2VyYXNlKCZkc3QtPnN0YXRlX2VudHJ5LCAmc3QtPnRyYW5zX3Jvb3QpOworCQlkc3QtPnN0YXRlX2VudHJ5LnJiX3BhcmVudF9jb2xvciA9IDA7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXRmc190cmFuc19yZW1vdmVfc3RhdGUoc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0KQoreworCWludCByZXQ7CisJc3RydWN0IG5ldGZzX3N0YXRlICpzdCA9IGRzdC0+c3RhdGU7CisKKwltdXRleF9sb2NrKCZzdC0+dHJhbnNfbG9jayk7CisJcmV0ID0gbmV0ZnNfdHJhbnNfcmVtb3ZlX25vbG9jayhkc3QsIHN0KTsKKwltdXRleF91bmxvY2soJnN0LT50cmFuc19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBDcmVhdGUgbmV3IGRlc3RpbmF0aW9uIGZvciBnaXZlbiB0cmFuc2FjdGlvbiBhc3NvY2lhdGVkIHdpdGggZ2l2ZW4gbmV0d29yayBzdGF0ZS4KKyAqIFRyYW5zYWN0aW9uJ3MgcmVmZXJlbmNlIGNvdW50ZXIgaXMgYnVtcGVkIGFuZCB3aWxsIGJlIGRyb3BwZWQgd2hlbiBlaXRoZXIKKyAqIHJlcGx5IGlzIHJlY2VpdmVkIG9yIHdoZW4gYXN5bmMgdGltZW91dCBkZXRlY3Rpb24gdGFzayB3aWxsIGZhaWwgcmVzZW5kaW5nCisgKiBhbmQgZHJvcCB0cmFuc2FjdGlvbi4KKyAqLworc3RhdGljIGludCBuZXRmc190cmFuc19wdXNoX2RzdChzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0OworCWludCBlcnI7CisKKwlkc3QgPSBtZW1wb29sX2FsbG9jKG5ldGZzX3RyYW5zX2RzdF9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRzdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkc3QtPnJldHJpZXMgPSAwOworCWRzdC0+c2VuZF90aW1lID0gMDsKKwlkc3QtPnN0YXRlID0gc3Q7CisJZHN0LT50cmFucyA9IHQ7CisJbmV0ZnNfdHJhbnNfZ2V0KHQpOworCisJbXV0ZXhfbG9jaygmc3QtPnRyYW5zX2xvY2spOworCWVyciA9IG5ldGZzX3RyYW5zX2luc2VydChkc3QsIHN0KTsKKwltdXRleF91bmxvY2soJnN0LT50cmFuc19sb2NrKTsKKworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJc3Bpbl9sb2NrKCZ0LT5kc3RfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZHN0LT50cmFuc19lbnRyeSwgJnQtPmRzdF9saXN0KTsKKwlzcGluX3VubG9jaygmdC0+ZHN0X2xvY2spOworCisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwl0LT5yZXN1bHQgPSBlcnI7CisJbmV0ZnNfdHJhbnNfcHV0KHQpOworCW1lbXBvb2xfZnJlZShkc3QsIG5ldGZzX3RyYW5zX2RzdF9wb29sKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBuZXRmc190cmFuc19mcmVlX2RzdChzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3QpCit7CisJbmV0ZnNfdHJhbnNfcHV0KGRzdC0+dHJhbnMpOworCW1lbXBvb2xfZnJlZShkc3QsIG5ldGZzX3RyYW5zX2RzdF9wb29sKTsKK30KKworc3RhdGljIHZvaWQgbmV0ZnNfdHJhbnNfcmVtb3ZlX2RzdChzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3QpCit7CisJaWYgKG5ldGZzX3RyYW5zX3JlbW92ZV9zdGF0ZShkc3QpKQorCQluZXRmc190cmFuc19mcmVlX2RzdChkc3QpOworfQorCisvKgorICogRHJvcCBkZXN0aW5hdGlvbiB0cmFuc2FjdGlvbiBlbnRyeSB3aGVuIHdlIGtub3cgaXQuCisgKi8KK3ZvaWQgbmV0ZnNfdHJhbnNfZHJvcF9kc3Qoc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0KQoreworCXN0cnVjdCBuZXRmc190cmFucyAqdCA9IGRzdC0+dHJhbnM7CisKKwlzcGluX2xvY2soJnQtPmRzdF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZkc3QtPnRyYW5zX2VudHJ5KTsKKwlzcGluX3VubG9jaygmdC0+ZHN0X2xvY2spOworCisJbmV0ZnNfdHJhbnNfcmVtb3ZlX2RzdChkc3QpOworfQorCisvKgorICogRHJvcCBkZXN0aW5hdGlvbiB0cmFuc2FjdGlvbiBlbnRyeSB3aGVuIHdlIGtub3cgaXQgYW5kIHdoZW4gd2UKKyAqIGFscmVhZHkgcmVtb3ZlZCBkc3QgZnJvbSBzdGF0ZSB0cmVlLgorICovCit2b2lkIG5ldGZzX3RyYW5zX2Ryb3BfZHN0X25vc3RhdGUoc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0KQoreworCXN0cnVjdCBuZXRmc190cmFucyAqdCA9IGRzdC0+dHJhbnM7CisKKwlzcGluX2xvY2soJnQtPmRzdF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZkc3QtPnRyYW5zX2VudHJ5KTsKKwlzcGluX3VubG9jaygmdC0+ZHN0X2xvY2spOworCisJbmV0ZnNfdHJhbnNfZnJlZV9kc3QoZHN0KTsKK30KKworLyoKKyAqIFRoaXMgZHJvcHMgZGVzdGluYXRpb24gdHJhbnNhY3Rpb24gZW50cnkgZnJvbSBhcHByb3ByaWF0ZSBuZXR3b3JrIHN0YXRlCisgKiB0cmVlIGFuZCBkcm9wcyByZWxhdGVkIHJlZmVyZW5jZSBjb3VudGVyLiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRyYW5zYWN0aW9uCisgKiB3aWxsIGJlIGZyZWVkIGhlcmUgaWYgaXRzIHJlZmVyZW5jZSBjb3VudGVyIGhpdHMgemVyby4KKyAqIERlc3RpbmF0aW9uIHRyYW5zYWN0aW9uIGVudHJ5IHdpbGwgYmUgZnJlZWQuCisgKi8KK3ZvaWQgbmV0ZnNfdHJhbnNfZHJvcF90cmFucyhzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQsIHN0cnVjdCBuZXRmc19zdGF0ZSAqc3QpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0LCAqdG1wLCAqcmV0ID0gTlVMTDsKKworCXNwaW5fbG9jaygmdC0+ZHN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkc3QsIHRtcCwgJnQtPmRzdF9saXN0LCB0cmFuc19lbnRyeSkgeworCQlpZiAoZHN0LT5zdGF0ZSA9PSBzdCkgeworCQkJcmV0ID0gZHN0OworCQkJbGlzdF9kZWwoJmRzdC0+dHJhbnNfZW50cnkpOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJnQtPmRzdF9sb2NrKTsKKworCWlmIChyZXQpCisJCW5ldGZzX3RyYW5zX3JlbW92ZV9kc3QocmV0KTsKK30KKworLyoKKyAqIFRoaXMgZHJvcHMgZGVzdGluYXRpb24gdHJhbnNhY3Rpb24gZW50cnkgZnJvbSBhcHByb3ByaWF0ZSBuZXR3b3JrIHN0YXRlCisgKiB0cmVlIGFuZCBkcm9wcyByZWxhdGVkIHJlZmVyZW5jZSBjb3VudGVyLiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRyYW5zYWN0aW9uCisgKiB3aWxsIGJlIGZyZWVkIGhlcmUgaWYgaXRzIHJlZmVyZW5jZSBjb3VudGVyIGhpdHMgemVyby4KKyAqIERlc3RpbmF0aW9uIHRyYW5zYWN0aW9uIGVudHJ5IHdpbGwgYmUgZnJlZWQuCisgKi8KK3ZvaWQgbmV0ZnNfdHJhbnNfZHJvcF9sYXN0KHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IG5ldGZzX3N0YXRlICpzdCkKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0ICpkc3QsICp0bXAsICpyZXQ7CisKKwlzcGluX2xvY2soJnQtPmRzdF9sb2NrKTsKKwlyZXQgPSBsaXN0X2VudHJ5KHQtPmRzdF9saXN0LnByZXYsIHN0cnVjdCBuZXRmc190cmFuc19kc3QsIHRyYW5zX2VudHJ5KTsKKwlpZiAocmV0LT5zdGF0ZSAhPSBzdCkgeworCQlyZXQgPSBOVUxMOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZHN0LCB0bXAsICZ0LT5kc3RfbGlzdCwgdHJhbnNfZW50cnkpIHsKKwkJCWlmIChkc3QtPnN0YXRlID09IHN0KSB7CisJCQkJcmV0ID0gZHN0OworCQkJCWxpc3RfZGVsX2luaXQoJmRzdC0+dHJhbnNfZW50cnkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJbGlzdF9kZWwoJnJldC0+dHJhbnNfZW50cnkpOworCX0KKwlzcGluX3VubG9jaygmdC0+ZHN0X2xvY2spOworCisJaWYgKHJldCkKKwkJbmV0ZnNfdHJhbnNfcmVtb3ZlX2RzdChyZXQpOworfQorCitzdGF0aWMgaW50IG5ldGZzX3RyYW5zX3B1c2goc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgbmV0ZnNfc3RhdGUgKnN0KQoreworCWludCBlcnI7CisKKwllcnIgPSBuZXRmc190cmFuc19wdXNoX2RzdCh0LCBzdCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IG5ldGZzX3RyYW5zX3NlbmQodCwgc3QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlOworCisJaWYgKHQtPmZsYWdzICYgTkVURlNfVFJBTlNfU0lOR0xFX0RTVCkKKwkJcG9obWVsZnNfc3dpdGNoX2FjdGl2ZShzdC0+cHNiKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJdC0+cmVzdWx0ID0gZXJyOworCW5ldGZzX3RyYW5zX2Ryb3BfbGFzdCh0LCBzdCk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbmV0ZnNfdHJhbnNfZmluaXNoX3NlbmQoc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlzdHJ1Y3QgcG9obWVsZnNfY29uZmlnICpjOworCWludCBlcnIgPSAtRU5PREVWOworCXN0cnVjdCBuZXRmc19zdGF0ZSAqc3Q7CisjaWYgMAorCWRwcmludGsoIiVzOiB0OiAlcCwgZ2VuOiAldSwgc2l6ZTogJXUsIHBhZ2VfbnVtOiAldSwgYWN0aXZlOiAlcC5cbiIsCisJCV9fZnVuY19fLCB0LCB0LT5nZW4sIHQtPmlvdmVjLmlvdl9sZW4sIHQtPnBhZ2VfbnVtLCBwc2ItPmFjdGl2ZV9zdGF0ZSk7CisjZW5kaWYKKwltdXRleF9sb2NrKCZwc2ItPnN0YXRlX2xvY2spOworCisJaWYgKCh0LT5mbGFncyAmIE5FVEZTX1RSQU5TX1NJTkdMRV9EU1QpICYmIHBzYi0+YWN0aXZlX3N0YXRlKSB7CisJCXN0ID0gJnBzYi0+YWN0aXZlX3N0YXRlLT5zdGF0ZTsKKworCQllcnIgPSAtRVBJUEU7CisJCWlmIChuZXRmc19zdGF0ZV9wb2xsKHN0KSAmIFBPTExPVVQpIHsKKwkJCWVyciA9IG5ldGZzX3RyYW5zX3B1c2hfZHN0KHQsIHN0KTsKKwkJCWlmICghZXJyKSB7CisJCQkJZXJyID0gbmV0ZnNfdHJhbnNfc2VuZCh0LCBzdCk7CisJCQkJaWYgKGVycikgeworCQkJCQluZXRmc190cmFuc19kcm9wX2xhc3QodCwgc3QpOworCQkJCX0gZWxzZSB7CisJCQkJCXBvaG1lbGZzX3N3aXRjaF9hY3RpdmUocHNiKTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJfQorCQl9CisJCXBvaG1lbGZzX3N3aXRjaF9hY3RpdmUocHNiKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZwc2ItPnN0YXRlX2xpc3QsIGNvbmZpZ19lbnRyeSkgeworCQlzdCA9ICZjLT5zdGF0ZTsKKworCQllcnIgPSBuZXRmc190cmFuc19wdXNoKHQsIHN0KTsKKwkJaWYgKCFlcnIgJiYgKHQtPmZsYWdzICYgTkVURlNfVFJBTlNfU0lOR0xFX0RTVCkpCisJCQlicmVhazsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwc2ItPnN0YXRlX2xvY2spOworI2lmIDAKKwlkcHJpbnRrKCIlczogZnVsbHkgc2VudCB0OiAlcCwgZ2VuOiAldSwgc2l6ZTogJXUsIHBhZ2VfbnVtOiAldSwgZXJyOiAlZC5cbiIsCisJCV9fZnVuY19fLCB0LCB0LT5nZW4sIHQtPmlvdmVjLmlvdl9sZW4sIHQtPnBhZ2VfbnVtLCBlcnIpOworI2VuZGlmCisJaWYgKGVycikKKwkJdC0+cmVzdWx0ID0gZXJyOworCXJldHVybiBlcnI7Cit9CisKK2ludCBuZXRmc190cmFuc19maW5pc2goc3RydWN0IG5ldGZzX3RyYW5zICp0LCBzdHJ1Y3QgcG9obWVsZnNfc2IgKnBzYikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZCA9IHQtPmlvdmVjLmlvdl9iYXNlOworCisJdC0+Z2VuID0gYXRvbWljX2luY19yZXR1cm4oJnBzYi0+dHJhbnNfZ2VuKTsKKworCXBvaG1lbGZzX2Z0cmFuc19jbGVhbih0LT5nZW4pOworCisJY21kLT5zaXplID0gdC0+aW92ZWMuaW92X2xlbiAtIHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKSArCisJCXQtPmF0dGFjaGVkX3NpemUgKyB0LT5hdHRhY2hlZF9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKTsKKwljbWQtPmNtZCA9IE5FVEZTX1RSQU5TOworCWNtZC0+c3RhcnQgPSB0LT5nZW47CisJY21kLT5pZCA9IDA7CisKKwlpZiAocHNiLT5wZXJmb3JtX2NyeXB0bykgeworCQljbWQtPmV4dCA9IHBzYi0+Y3J5cHRvX2F0dGFjaGVkX3NpemU7CisJCWNtZC0+Y3NpemUgPSBwc2ItPmNyeXB0b19hdHRhY2hlZF9zaXplOworCX0KKworCWRwcmludGsoIiVzOiB0OiAldSwgc2l6ZTogJXUsIGlvdl9sZW46ICV6dSwgYXR0YWNoZWRfc2l6ZTogJXUsIGF0dGFjaGVkX3BhZ2VzOiAldS5cbiIsCisJCQlfX2Z1bmNfXywgdC0+Z2VuLCBjbWQtPnNpemUsIHQtPmlvdmVjLmlvdl9sZW4sIHQtPmF0dGFjaGVkX3NpemUsIHQtPmF0dGFjaGVkX3BhZ2VzKTsKKwllcnIgPSBwb2htZWxmc190cmFuc19jcnlwdCh0LCBwc2IpOworCWlmIChlcnIpIHsKKwkJdC0+cmVzdWx0ID0gZXJyOworCQluZXRmc19jb252ZXJ0X2NtZChjbWQpOworCQlkcHJpbnRrKCIlczogdHJhbnM6ICVsbHUsIGNyeXB0b19hdHRhY2hlZF9zaXplOiAldSwgYXR0YWNoZWRfc2l6ZTogJXUsIGF0dGFjaGVkX3BhZ2VzOiAlZCwgdHJhbnNfc2l6ZTogJXUsIGVycjogJWQuXG4iLAorCQkJX19mdW5jX18sIGNtZC0+c3RhcnQsIHBzYi0+Y3J5cHRvX2F0dGFjaGVkX3NpemUsIHQtPmF0dGFjaGVkX3NpemUsIHQtPmF0dGFjaGVkX3BhZ2VzLCBjbWQtPnNpemUsIGVycik7CisJfQorCW5ldGZzX3RyYW5zX3B1dCh0KTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUmVzZW5kIHRyYW5zYWN0aW9uIHRvIHJlbW90ZSBzZXJ2ZXIocykuCisgKiBJZiBuZXcgc2VydmVycyB3ZXJlIGFkZGVkIGludG8gc3VwZXJibG9jaywgd2UgY2FuIHRyeSB0byBzZW5kIGRhdGEKKyAqIHRvIHRoZW0gdG9vLgorICoKKyAqIEl0IGlzIGNhbGxlZCB1bmRlciBzdXBlcmJsb2NrJ3Mgc3RhdGVfbG9jaywgc28gd2UgY2FuIHNhZmVseQorICogZGVyZWZlcmVuY2UgcHNiLT5zdGF0ZV9saXN0LiBBbHNvLCB0cmFuc2FjdGlvbidzIHJlZmVyZW5jZSBjb3VudGVyIGlzCisgKiBidW1wZWQsIHNvIGl0IGNhbiBub3QgZ28gYXdheSB1bmRlciB1cywgdGh1cyB3ZSBjYW4gc2FmZWx5IGFjY2VzcyBhbGwKKyAqIGl0cyBtZW1iZXJzLiBTdGF0ZSBpcyBsb2NrZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdHJhbnNhY3Rpb24gd2FzIHN1Y2Nlc3NmdWxseSBzZW50IHRvIGF0CisgKiBsZWFzdCBvbmUgZGVzdGluYXRpb24gdGFyZ2V0LgorICovCitpbnQgbmV0ZnNfdHJhbnNfcmVzZW5kKHN0cnVjdCBuZXRmc190cmFucyAqdCwgc3RydWN0IHBvaG1lbGZzX3NiICpwc2IpCit7CisJc3RydWN0IG5ldGZzX3RyYW5zX2RzdCAqZHN0OworCXN0cnVjdCBuZXRmc19zdGF0ZSAqc3Q7CisJc3RydWN0IHBvaG1lbGZzX2NvbmZpZyAqYzsKKwlpbnQgZXJyLCBleGlzdCwgZXJyb3IgPSAtRU5PREVWOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmcHNiLT5zdGF0ZV9saXN0LCBjb25maWdfZW50cnkpIHsKKwkJc3QgPSAmYy0+c3RhdGU7CisKKwkJZXhpc3QgPSAwOworCQlzcGluX2xvY2soJnQtPmRzdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkc3QsICZ0LT5kc3RfbGlzdCwgdHJhbnNfZW50cnkpIHsKKwkJCWlmIChzdCA9PSBkc3QtPnN0YXRlKSB7CisJCQkJZXhpc3QgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrKCZ0LT5kc3RfbG9jayk7CisKKwkJaWYgKGV4aXN0KSB7CisJCQlpZiAoISh0LT5mbGFncyAmIE5FVEZTX1RSQU5TX1NJTkdMRV9EU1QpIHx8CisJCQkJCShjLT5jb25maWdfZW50cnkubmV4dCA9PSAmcHNiLT5zdGF0ZV9saXN0KSkgeworCQkJCWRwcmludGsoIiVzOiByZXNlbmRpbmcgc3Q6ICVwLCB0OiAlcCwgZ2VuOiAldS5cbiIsCisJCQkJCQlfX2Z1bmNfXywgc3QsIHQsIHQtPmdlbik7CisJCQkJZXJyID0gbmV0ZnNfdHJhbnNfc2VuZCh0LCBzdCk7CisJCQkJaWYgKCFlcnIpCisJCQkJCWVycm9yID0gMDsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZHByaW50aygiJXM6IHB1c2hpbmcvcmVzZW5kaW5nIHN0OiAlcCwgdDogJXAsIGdlbjogJXUuXG4iLAorCQkJCV9fZnVuY19fLCBzdCwgdCwgdC0+Z2VuKTsKKwkJZXJyID0gbmV0ZnNfdHJhbnNfcHVzaCh0LCBzdCk7CisJCWlmIChlcnIpCisJCQljb250aW51ZTsKKwkJZXJyb3IgPSAwOworCQlpZiAodC0+ZmxhZ3MgJiBORVRGU19UUkFOU19TSU5HTEVfRFNUKQorCQkJYnJlYWs7CisJfQorCisJdC0+cmVzdWx0ID0gZXJyb3I7CisJcmV0dXJuIGVycm9yOworfQorCit2b2lkICpuZXRmc190cmFuc19hZGQoc3RydWN0IG5ldGZzX3RyYW5zICp0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3QgaW92ZWMgKmlvID0gJnQtPmlvdmVjOworCXZvaWQgKnB0cjsKKworCWlmIChzaXplID4gdC0+dG90YWxfc2l6ZSkgeworCQlwdHIgPSBFUlJfUFRSKC1FSU5WQUwpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW8tPmlvdl9sZW4gKyBzaXplID4gdC0+dG90YWxfc2l6ZSkgeworCQlkcHJpbnRrKCIlczogdG9vIGJpZyBzaXplIHQ6ICVwLCBnZW46ICV1LCBpb3ZfbGVuOiAlenUsIHNpemU6ICV1LCB0b3RhbDogJXUuXG4iLAorCQkJCV9fZnVuY19fLCB0LCB0LT5nZW4sIGlvLT5pb3ZfbGVuLCBzaXplLCB0LT50b3RhbF9zaXplKTsKKwkJcHRyID0gRVJSX1BUUigtRTJCSUcpOworCQlnb3RvIG91dDsKKwl9CisKKwlwdHIgPSBpby0+aW92X2Jhc2UgKyBpby0+aW92X2xlbjsKKwlpby0+aW92X2xlbiArPSBzaXplOworCitvdXQ6CisJZHByaW50aygiJXM6IHQ6ICVwLCBnZW46ICV1LCBzaXplOiAldSwgdG90YWw6ICV6dS5cbiIsCisJCV9fZnVuY19fLCB0LCB0LT5nZW4sIHNpemUsIGlvLT5pb3ZfbGVuKTsKKwlyZXR1cm4gcHRyOworfQorCit2b2lkIG5ldGZzX3RyYW5zX2ZyZWUoc3RydWN0IG5ldGZzX3RyYW5zICp0KQoreworCWlmICh0LT5lbmcpCisJCXBvaG1lbGZzX2NyeXB0b190aHJlYWRfbWFrZV9yZWFkeSh0LT5lbmctPnRocmVhZCk7CisJa2ZyZWUodCk7Cit9CisKK3N0cnVjdCBuZXRmc190cmFucyAqbmV0ZnNfdHJhbnNfYWxsb2Moc3RydWN0IHBvaG1lbGZzX3NiICpwc2IsIHVuc2lnbmVkIGludCBzaXplLAorCQl1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGludCBucikKK3sKKwlzdHJ1Y3QgbmV0ZnNfdHJhbnMgKnQ7CisJdW5zaWduZWQgaW50IG51bSwgY29udCwgcGFkLCBzaXplX25vX3RyYW5zOworCXVuc2lnbmVkIGludCBjcnlwdG9fYWRkZWQgPSAwOworCXN0cnVjdCBuZXRmc19jbWQgKmNtZDsKKworCWlmIChwc2ItPnBlcmZvcm1fY3J5cHRvKQorCQljcnlwdG9fYWRkZWQgPSBwc2ItPmNyeXB0b19hdHRhY2hlZF9zaXplOworCisJLyoKKwkgKiB8c2l6ZW9mKHN0cnVjdCBuZXRmc190cmFucyl8CisJICogfHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKXwgLSB0cmFuc2FjdGlvbiBoZWFkZXIKKwkgKiB8c2l6ZXwgLSBidWZmZXIgd2l0aCByZXF1ZXN0ZWQgc2l6ZQorCSAqIHxwYWRkaW5nfCAtIGNyeXB0byBwYWRkaW5nLCB6ZXJvIGJ5dGVzCisJICogfG5yICogc2l6ZW9mKHN0cnVjdCBwYWdlICopfCAtIGFycmF5IG9mIHBhZ2UgcG9pbnRlcnMKKwkgKgorCSAqIE92ZXJhbGwgc2l6ZSBzaG91bGQgYmUgbGVzcyB0aGFuIFBBR0VfU0laRSBmb3IgZ3VhcmFudGVlZCBhbGxvY2F0aW9uLgorCSAqLworCisJY29udCA9IHNpemU7CisJc2l6ZSA9IEFMSUdOKHNpemUsIHBzYi0+Y3J5cHRvX2FsaWduX3NpemUpOworCXBhZCA9IHNpemUgLSBjb250OworCisJc2l6ZV9ub190cmFucyA9IHNpemUgKyBzaXplb2Yoc3RydWN0IG5ldGZzX2NtZCkgKiAyICsgY3J5cHRvX2FkZGVkOworCisJY29udCA9IHNpemVvZihzdHJ1Y3QgbmV0ZnNfdHJhbnMpICsgc2l6ZV9ub190cmFuczsKKworCW51bSA9IChQQUdFX1NJWkUgLSBjb250KS9zaXplb2Yoc3RydWN0IHBhZ2UgKik7CisKKwlpZiAobnIgPiBudW0pCisJCW5yID0gbnVtOworCisJdCA9IGt6YWxsb2MoY29udCArIG5yKnNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX05PSU8pOworCWlmICghdCkKKwkJZ290byBlcnJfb3V0X2V4aXQ7CisKKwl0LT5pb3ZlYy5pb3ZfYmFzZSA9ICh2b2lkICopKHQgKyAxKTsKKwl0LT5wYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKikodC0+aW92ZWMuaW92X2Jhc2UgKyBzaXplX25vX3RyYW5zKTsKKworCS8qCisJICogUmVzZXJ2aW5nIHNwYWNlIGZvciB0cmFuc2FjdGlvbiBoZWFkZXIuCisJICovCisJdC0+aW92ZWMuaW92X2xlbiA9IHNpemVvZihzdHJ1Y3QgbmV0ZnNfY21kKSArIGNyeXB0b19hZGRlZDsKKworCW5ldGZzX3RyYW5zX2luaXRfc3RhdGljKHQsIG5yLCBzaXplX25vX3RyYW5zKTsKKworCXQtPmZsYWdzID0gZmxhZ3M7CisJdC0+cHNiID0gcHNiOworCisJY21kID0gKHN0cnVjdCBuZXRmc19jbWQgKil0LT5pb3ZlYy5pb3ZfYmFzZTsKKworCWNtZC0+c2l6ZSA9IHNpemU7CisJY21kLT5jcGFkID0gcGFkOworCWNtZC0+Y3NpemUgPSBjcnlwdG9fYWRkZWQ7CisKKwlkcHJpbnRrKCIlczogdDogJXAsIGdlbjogJXUsIHNpemU6ICV1LCBwYWRkaW5nOiAldSwgYWxpZ25fc2l6ZTogJXUsIGZsYWdzOiAleCwgIgorCQkJInBhZ2VfbnVtOiAldSwgYmFzZTogJXAsIHBhZ2VzOiAlcC5cbiIsCisJCQlfX2Z1bmNfXywgdCwgdC0+Z2VuLCBzaXplLCBwYWQsIHBzYi0+Y3J5cHRvX2FsaWduX3NpemUsIGZsYWdzLCBuciwKKwkJCXQtPmlvdmVjLmlvdl9iYXNlLCB0LT5wYWdlcyk7CisKKwlyZXR1cm4gdDsKKworZXJyX291dF9leGl0OgorCXJldHVybiBOVUxMOworfQorCitpbnQgbmV0ZnNfdHJhbnNfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSAtRU5PTUVNOworCisJbmV0ZnNfdHJhbnNfZHN0ID0ga21lbV9jYWNoZV9jcmVhdGUoIm5ldGZzX3RyYW5zX2RzdCIsIHNpemVvZihzdHJ1Y3QgbmV0ZnNfdHJhbnNfZHN0KSwKKwkJCTAsIDAsIE5VTEwpOworCWlmICghbmV0ZnNfdHJhbnNfZHN0KQorCQlnb3RvIGVycl9vdXRfZXhpdDsKKworCW5ldGZzX3RyYW5zX2RzdF9wb29sID0gbWVtcG9vbF9jcmVhdGVfc2xhYl9wb29sKDI1NiwgbmV0ZnNfdHJhbnNfZHN0KTsKKwlpZiAoIW5ldGZzX3RyYW5zX2RzdF9wb29sKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWU6CisJa21lbV9jYWNoZV9kZXN0cm95KG5ldGZzX3RyYW5zX2RzdCk7CitlcnJfb3V0X2V4aXQ6CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBuZXRmc190cmFuc19leGl0KHZvaWQpCit7CisJbWVtcG9vbF9kZXN0cm95KG5ldGZzX3RyYW5zX2RzdF9wb29sKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobmV0ZnNfdHJhbnNfZHN0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yc3BpdXNiL3JzcGl1c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9yc3BpdXNiL3JzcGl1c2IuYwppbmRleCBjYTI4MWQ2Li5lY2FmZmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnNwaXVzYi9yc3BpdXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3JzcGl1c2IvcnNwaXVzYi5jCkBAIC03ODEsOSArNzgxLDggQEAKIAkJCWRiZygiRW5kcG9pbnRbJWRdLT5NYXhQYWNrZXRTaXplID0gJWRcbiIsIGksCiAJCQkgICAgZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKIAkJfQotCQlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLQkJICAgIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspIHsKLQkJCWlmIChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pCisJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVuZHBvaW50KSkgeworCQkJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZW5kcG9pbnQpKQogCQkJCXBkeC0+aEVQW2ldID0KIAkJCQkgICAgdXNiX3JjdmJ1bGtwaXBlKHBkeC0+dWRldiwKIAkJCQkJCSAgICBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwLzI4NjBfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvMjg2MF9tYWluX2Rldi5jCmluZGV4IDA4Y2E4MWYuLmZmN2Y4MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvMjg2MF9tYWluX2Rldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvMjg2MF9tYWluX2Rldi5jCkBAIC05MCwxMiArOTAsMTAgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBydDI4NjBfY2xlYW51cF9tb2R1bGUodm9pZCk7CiBzdGF0aWMgaW50IF9faW5pdCBydDI4NjBfaW5pdF9tb2R1bGUodm9pZCk7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHJ0Mjg2MF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogc3RhdGljIGludCBydDI4NjBfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KTsKICNlbmRpZiAvLyBDT05GSUdfUE0gLy8KLSNlbmRpZgogCiAKIC8vCkBAIC0xMjgsMjIgKzEyNiwxNSBAQAogICAgIG5hbWU6ICAgICAgICJydDI4NjAiLAogICAgIGlkX3RhYmxlOiAgIHJ0Mjg2MF9wY2lfdGJsLAogICAgIHByb2JlOiAgICAgIHJ0Mjg2MF9pbml0X29uZSwKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gMHgyMDQxMgogICAgIHJlbW92ZTogICAgIF9fZGV2ZXhpdF9wKHJ0Mjg2MF9yZW1vdmVfb25lKSwKLSNlbHNlCi0gICAgcmVtb3ZlOiAgICAgX19kZXZleGl0KHJ0Mjg2MF9yZW1vdmVfb25lKSwKLSNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogI2lmZGVmIENPTkZJR19QTQogCXN1c3BlbmQ6CXJ0Mjg2MF9zdXNwZW5kLAogCXJlc3VtZToJCXJ0Mjg2MF9yZXN1bWUsCiAjZW5kaWYKLSNlbmRpZgogfTsKIAogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogI2lmZGVmIENPTkZJR19QTQogCiBWT0lEIFJUMjg2MFJlamVjdFBlbmRpbmdQYWNrZXRzKApAQCAtMjg0LDE2ICsyNzUsMTEgQEAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZiAvLyBDT05GSUdfUE0gLy8KLSNlbmRpZgogCiAKIHN0YXRpYyBJTlQgX19pbml0IHJ0Mjg2MF9pbml0X21vZHVsZShWT0lEKQogewotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnQyODYwX2RyaXZlcik7Ci0jZWxzZQotICAgIHJldHVybiBwY2lfbW9kdWxlX2luaXQoJnJ0Mjg2MF9kcml2ZXIpOwotI2VuZGlmCiB9CiAKIApAQCAtMzc0LDExICszNjAsNyBAQAogCX0KIAogCS8vIEZyZWUgcHJlLWFsbG9jYXRlZCBuZXRfZGV2aWNlIG1lbW9yeQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKIAlmcmVlX25ldGRldihuZXRfZGV2KTsKLSNlbHNlCi0Ja2ZyZWUobmV0X2Rldik7Ci0jZW5kaWYKIH0KIAogLy8KQEAgLTc1OCwxNiArNzQwLDEzIEBACiBpbnQgcHJpbnRfaW50X2NvdW50OwogCiBJUlFfSEFORExFX1RZUEUKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwxOSkpCiBydDI4NjBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKLSNlbHNlCi1ydDI4NjBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi0jZW5kaWYKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXZfaW5zdGFuY2U7CiAJUFJUTVBfQURBUFRFUiBwQWQgPSBuZXRfZGV2LT5tbF9wcml2OwogCUlOVF9TT1VSQ0VfQ1NSX1NUUlVDCUludFNvdXJjZTsKIAlQT1NfQ09PS0lFIHBPYmo7CisJQk9PTEVBTgliT2xkVmFsdWU7CiAKIAlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOwogCkBAIC04MDAsMjAgKzc3OSwxOSBAQAogCS8vIFJUMjY2MSA9PiB3aGVuIEFTSUMgaXMgc2xlZXBpbmcsIE1BQyByZWdpc3RlciBjYW5ub3QgYmUgcmVhZCBhbmQgd3JpdHRlbi4KIAkvLyBSVDI4NjAgPT4gd2hlbiBBU0lDIGlzIHNsZWVwaW5nLCBNQUMgcmVnaXN0ZXIgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4uCiAKKwliT2xkVmFsdWUgPSBwQWQtPmJQQ0ljbGtPZmY7CisJcEFkLT5iUENJY2xrT2ZmID0gRkFMU0U7CiAJewogCQlSVE1QX0lPX1JFQUQzMihwQWQsIElOVF9TT1VSQ0VfQ1NSLCAmSW50U291cmNlLndvcmQpOwogCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBJTlRfU09VUkNFX0NTUiwgSW50U291cmNlLndvcmQpOyAvLyB3cml0ZSAxIHRvIGNsZWFyCiAJfQorCXBBZC0+YlBDSWNsa09mZiA9IGJPbGRWYWx1ZTsKIAogCS8vIERvIG5vdGhpbmcgaWYgUmVzZXQgaW4gcHJvZ3Jlc3MKIAlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSB8fAogCQlSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpCiAJewotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSAgICAgICAgcmV0dXJuICBJUlFfSEFORExFRDsKLSNlbHNlCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCiAJLy8KQEAgLTgyMiw4ICs4MDAsNiBAQAogCS8vIFRoZSBwcmlvcml0eSBjYW4gYmUgYWRqdXN0IGJ5IGFsdGVyaW5nIHByb2Nlc3NpbmcgaWYgc3RhdGVtZW50CiAJLy8KIAotICAgIHBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOwotCiAJLy8gSWYgcmVxdWlyZWQgc3BpbmxvY2ssIGVhY2ggaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBoYXMgdG8gYWNxdWlyZQogCS8vIGFuZCByZWxlYXNlIGl0c2VsZi4KIAkvLwpAQCAtODMyLDExICs4MDgsOCBAQAogCWlmIChJbnRTb3VyY2Uud29yZCA9PSAweGZmZmZmZmZmKQogCXsKIAkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCB8IGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyk7Ci0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQotICAgICAgICByZXR1cm4gIElSUV9IQU5ETEVEOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCisJCXByaW50aygic25vd3BpbiAtIEludFNvdXJjZS53b3JkID09IDB4ZmZmZmZmZmZcbiIpOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCiAJaWYgKEludFNvdXJjZS53b3JkICYgVHhDb2hlcmVudCkKQEAgLTk3MCwxMCArOTQzLDcgQEAKIAl9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAgICAgcmV0dXJuICBJUlFfSEFORExFRDsKLSNlbmRpZgotCiB9CiAKIC8qCkBAIC0xMDI2LDExICs5OTYsNyBAQAogICAgIFVMT05HCWNzcl9hZGRyOwogCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgcHJpbnRfbmFtZSA9IHBjaV9kZXYgPyBwY2lfbmFtZShwY2lfZGV2KSA6ICJydDI4NjAiOwotI2Vsc2UKLSAgICBwcmludF9uYW1lID0gcGNpX2RldiA/IHBjaV9kZXYtPnNsb3RfbmFtZSA6ICJydDI4NjAiOwotI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCXByaW50X25hbWUgPSBwY2lfZGV2ID8gcGNpX25hbWUocGNpX2RldikgOiAicnQyODYwIjsKIAogCW5ldF9kZXYtPmJhc2VfYWRkciA9IDA7CiAJbmV0X2Rldi0+aXJxID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL01ha2VmaWxlCmluZGV4IDYxNjIyMTIuLmI5NTYzNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9NYWtlZmlsZQpAQCAtMiw3ICsyLDYgQEAKIAogIyBUT0RPOiBhbGwgb2YgdGhlc2Ugc2hvdWxkIGJlIHJlbW92ZWQKIEVYVFJBX0NGTEFHUyArPSAtRExJTlVYIC1EQUdHUkVHQVRJT05fU1VQUE9SVCAtRFBJR0dZQkFDS19TVVBQT1JUIC1EV01NX1NVUFBPUlQKLUVYVFJBX0NGTEFHUyArPSAtRFJUMjg2MAogRVhUUkFfQ0ZMQUdTICs9IC1EQ09ORklHX1NUQV9TVVBQT1JUCiBFWFRSQV9DRkxBR1MgKz0gLUREQkcKIEVYVFJBX0NGTEFHUyArPSAtRERPVDExX05fU1VQUE9SVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9UT0RPCmluZGV4IDJmNzBiMGYuLjYxNThkYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL1RPRE8KQEAgLTEsNiArMSw2IEBACiBJJ20gaGVzaXRhbnQgdG8gYWRkIGEgVE9ETyBmaWxlIGhlcmUsIGFzIHRoZSB3aXJlbGVzcyBkZXZlbG9wZXJzIHdvdWxkCiByZWFsbHkgaGF2ZSBwZW9wbGUgaGVscCB0aGVtIG91dCBvbiB0aGUgImNsZWFuIiBydDI4NjAgZHJpdmVyIHRoYXQgY2FuCi1iZSBmb3VuZCBhdCB0aGUgcnQyODYwLnNmLm5ldCBzaXRlLgorYmUgZm91bmQgYXQgdGhlIGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbS8gc2l0ZS4KIAogQnV0LCBpZiB5b3Ugd2lzaCB0byBjbGVhbiB1cCB0aGlzIGRyaXZlciBpbnN0ZWFkLCBoZXJlJ3MgYSBzaG9ydCBsaXN0IG9mCiB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGRvbmUgdG8gZ2V0IGl0IGludG8gYSBtb3JlIG1lcmdhYmxlIHNoYXBlOgpAQCAtOCw3ICs4LDcgQEAKIFRPRE86CiAJLSBjaGVja3BhdGNoLnBsIGNsZWFuCiAJLSBzcGFyc2UgY2xlYW4KLQktIHBvcnQgdG8gaW4ta2VybmVsIDgwMjExIHN0YWNrCisJLSBwb3J0IHRvIGluLWtlcm5lbCA4MDIxMSBzdGFjayBhbmQgY29tbW9uIHJ0MngwMCBpbmZyYXN0cnVjdHVyZQogCS0gcmVtb3ZlIHJlYWRpbmcgZnJvbSAvZXRjLyBjb25maWcgZmlsZXMKIAktIHJldmlldyBieSB0aGUgd2lyZWxlc3MgZGV2ZWxvcGVyIGNvbW11bml0eQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGEuYwppbmRleCBiNjdiOWViLi5iM2Y4OGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhLmMKQEAgLTEwNSw5ICsxMDUsNyBAQAogCVBORElTX1BBQ0tFVAlwUGFja2V0OwogCU5ESVNfU1RBVFVTICAJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKIAlVTE9ORwkgCQlGcmVlTnVtOwotI2lmZGVmIFJUMjg2MAogCXVuc2lnbmVkIGxvbmcJSXJxRmxhZ3MgPSAwOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCVVDSEFSCQkJSXJxU3RhdGU7CiAJVUNIQVIJCQlydG1wSHdIZHJbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOyAvL1JUTVBfSFdfSERSX0xFTl07CiAKQEAgLTExOCwxMCArMTE2LDkgQEAKIAkvLyAyODYwQyB1c2UgVHggUmluZwogCiAJSXJxU3RhdGUgPSBwQWQtPmlycV9kaXNhYmxlZDsKLSNpZmRlZiBSVDI4NjAKKwogCWlmICgocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApICYmICghSXJxU3RhdGUpKQogCQlSVE1QX0lSUV9MT0NLKCZwQWQtPmlycV9sb2NrLCBJcnFGbGFncyk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAlkbwogCXsKQEAgLTE3NSwxNyArMTcyLDE0IEBACiAKIAl9IHdoaWxlIChGQUxTRSk7CiAKLSNpZmRlZiBSVDI4NjAKIAkvLyAyODYwQyB1c2UgVHggUmluZwogCWlmICgocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApICYmICghSXJxU3RhdGUpKQogCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIElycUZsYWdzKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCXJldHVybiBTdGF0dXM7CiB9CiAKIAotI2lmZGVmIFJUMjg2MAogTkRJU19TVEFUVVMgTWluaXBvcnRNTVJlcXVlc3RVbmxvY2soCiAJSU4JUFJUTVBfQURBUFRFUglwQWQsCiAJSU4JVUNIQVIJCQlRdWVJZHgsCkBAIC0yNTMsNyArMjQ3LDYgQEAKIAogCXJldHVybiBTdGF0dXM7CiB9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogLyoKQEAgLTI5MCwxNyArMjgzLDE0IEBACiAJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwogCX0KIAotI2lmZGVmIFJUMjg2MAogCWlmICggcEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDAgKQogCQlyZXR1cm4gTWxtZUhhcmRUcmFuc21pdFR4UmluZyhwQWQsUXVlSWR4LHBQYWNrZXQpOwogCWVsc2UKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJcmV0dXJuIE1sbWVIYXJkVHJhbnNtaXRNZ210UmluZyhwQWQsUXVlSWR4LHBQYWNrZXQpOwogCiB9CiAKIAotI2lmZGVmIFJUMjg2MAogTkRJU19TVEFUVVMgTWxtZUhhcmRUcmFuc21pdFR4UmluZygKIAlJTglQUlRNUF9BREFQVEVSCXBBZCwKIAlJTglVQ0hBUglRdWVJZHgsCkBAIC0zNjYsNyArMzU2LDcgQEAKIAl7CiAJCS8vIG91dGdvaW5nIGZyYW1lIGFsd2F5cyB3YWtldXAgUEhZIHRvIHByZXZlbnQgZnJhbWUgbG9zdAogCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKLQkJCUFzaWNGb3JjZVdha2V1cChwQWQsIFRSVUUpOworCQkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgRlJPTV9UWCk7CiAJfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCXBGaXJzdFR4V0kJPShQVFhXSV9TVFJVQylwU3JjQnVmVkE7CkBAIC01MDksNyArNDk5LDYgQEAKIAogCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIE5ESVNfU1RBVFVTIE1sbWVIYXJkVHJhbnNtaXRNZ210UmluZygKQEAgLTU0MSw3ICs1MzAsNyBAQAogCXsKIAkJLy8gb3V0Z29pbmcgZnJhbWUgYWx3YXlzIHdha2V1cCBQSFkgdG8gcHJldmVudCBmcmFtZSBsb3N0CiAJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQotCQkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgVFJVRSk7CisJCQlBc2ljRm9yY2VXYWtldXAocEFkLCBGUk9NX1RYKTsKIAl9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKQEAgLTEwNzYsNyArMTA2NSw2IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLSNpZmRlZiBSVDI4NjAKIAkJCUZyZWVOdW1iZXJbUXVlSWR4XSA9IEdFVF9UWFJJTkdfRlJFRU5PKHBBZCwgUXVlSWR4KTsKIAogI2lmZGVmIERCR19ESUFHTk9TRQpAQCAtMTEwMSw3ICsxMDg5LDYgQEAKIAkJCQlSVE1QRnJlZVRYRFVwb25UeERtYURvbmUocEFkLCBRdWVJZHgpOwogCQkJCUZyZWVOdW1iZXJbUXVlSWR4XSA9IEdFVF9UWFJJTkdfRlJFRU5PKHBBZCwgUXVlSWR4KTsKIAkJCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCQkJLy8gcHJvYmUgdGhlIFF1ZXVlIEhlYWQKIAkJCXBRdWV1ZSA9ICZwQWQtPlR4U3dRdWV1ZVtRdWVJZHhdOwpAQCAtMTE4MCwxMiArMTE2NywxMCBAQAogCQkJCVN0YXR1cyA9IFNUQUhhcmRUcmFuc21pdChwQWQsIHBUeEJsaywgUXVlSWR4KTsKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAotI2lmZGVmIFJUMjg2MAogCQkJREVRVUVVRV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIGJJbnRDb250ZXh0LCBJcnFGbGFncyk7CiAJCQkvLyBzdGF0aWMgcmF0ZSBhbHNvIG5lZWQgTklDVXBkYXRlRmlmb1N0YUNvdW50ZXJzKCkgZnVuY3Rpb24uCiAJCQkvL2lmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpKQogCQkJCU5JQ1VwZGF0ZUZpZm9TdGFDb3VudGVycyhwQWQpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQl9CiAKIAkJUlQyOFhYX1NUT1BfREVRVUVVRShwQWQsIFF1ZUlkeCwgSXJxRmxhZ3MpOwpAQCAtMTc2NCw3ICsxNzQ5LDYgQEAKIH0KIAogCi0jaWZkZWYgUlQyODYwCiBCT09MRUFOICBSVE1QRnJlZVRYRFVwb25UeERtYURvbmUoCiAJSU4gUFJUTVBfQURBUFRFUglwQWQsCiAJSU4gVUNIQVIJCQlRdWVJZHgpCkBAIC0yMzA5LDcgKzIyOTMsNiBAQAogCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIiAJUnhTd1JlYWRJZHggWyVkXT0iLCBBQzBmcmVlSWR4KSk7CiAJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiCXBlbmRpbmctTkRJUz0lbGRcbiIsIHBBZC0+UmFsaW5rQ291bnRlcnMuUGVuZGluZ05kaXNQYWNrZXRDb3VudCkpOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAvKgogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMjYzNCw5ICsyNjE3LDcgQEAKIAkJCQkJcEVudHJ5LT5BdXRoTW9kZSA9IHBBZC0+U3RhQ2ZnLkF1dGhNb2RlOwogCQkJCQlwRW50cnktPldlcFN0YXR1cyA9IHBBZC0+U3RhQ2ZnLldlcFN0YXR1czsKIAkJCQkJcEVudHJ5LT5Qcml2YWN5RmlsdGVyID0gTmRpczgwMl8xMVByaXZGaWx0ZXJBY2NlcHRBbGw7Ci0jaWZkZWYgUlQyODYwCiAJCQkJCUFzaWNSZW1vdmVQYWlyd2lzZUtleUVudHJ5KHBBZCwgcEVudHJ5LT5hcGlkeCwgKFVDSEFSKWkpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCX0KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAkJCX0KQEAgLTI4MjMsOSArMjgwNCw3IEBACiAKIAlmb3IgKGk9MTsgaTxNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKQogCXsKLSNpZmRlZiBSVDI4NjAKIAkJUlQyOFhYX1NUQV9FTlRSWV9NQUNfUkVTRVQocEFkLCBpKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJaWYgKHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uVmFsaWRBc0NMSSA9PSBUUlVFKQogCSAgIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfMjg2MC5jCmluZGV4IDQxOWU1MGMuLmZhZTc0MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhXzI4NjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV8yODYwLmMKQEAgLTYzNCw3ICs2MzQsNyBAQAogCX0KIAogICAgIC8vIE9uY2UgZ28gaW50byB0aGlzIGZ1bmN0aW9uLCBkaXNhYmxlIHR4IGJlY2F1c2UgZG9uJ3Qgd2FudCB0b28gbWFueSBwYWNrZXRzIGluIHF1ZXVlIHRvIHByZXZlbnQgSFcgc3RvcHMuCi0JcEFkLT5iUENJY2xrT2ZmRGlzYWJsZVR4ID0gVFJVRTsKKwlSVE1QX1NFVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19ESVNBQkxFX1RYKTsKIAogCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCiAJewpAQCAtNjUxLDcgKzY1MSw3IEBACiAJCQl7CiAJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVGJUVFRpbWUgPSAweCV4ICwgZ2l2ZSB1cCB0aGlzIHNsZWVwLiBcbiIsIFRiVFRUaW1lKSk7CiAJICAgICAgICAgICAgT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSk7Ci0JICAgICAgICAgICAgcEFkLT5iUENJY2xrT2ZmRGlzYWJsZVR4ID0gRkFMU0U7CisJCQkJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19ESVNBQkxFX1RYKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQllbHNlCkBAIC02ODgsMTggKzY4OCwyNSBAQAogCWlmIChpID49IDUwKQogCXsKIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRE1BIGtlZXBzIGJ1c3kuICByZXR1cm4gb24gUlQyOHh4UGNpQXNpY1JhZGlvT2ZmICgpXG4iKSk7Ci0JCXBBZC0+YlBDSWNsa09mZkRpc2FibGVUeCA9IEZBTFNFOwogCQlSVE1QX0lPX1JFQUQzMihwQWQsIFdQRE1BX0dMT19DRkcsICZEbWFDZmcud29yZCk7CiAJCURtYUNmZy5maWVsZC5FbmFibGVUeERNQSA9IDE7CiAJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdQRE1BX0dMT19DRkcsIERtYUNmZy53b3JkKTsKKwkJcEFkLT5DaGVja0RtYUJ1c3lDb3VudCsrOwogCQlyZXR1cm47CiAJfQorCWVsc2UKKwl7CisJCXBBZC0+Q2hlY2tEbWFCdXN5Q291bnQgPSAwOworCX0KIAogICAgIFJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKTsKIAogICAgIC8vIFNldCB0byAxUi4KLSAgICB0ZW1wQkJQX1IzID0gKHBBZC0+U3RhQ2ZnLkJCUFIzICYgMHhFNyk7Ci0JUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgdGVtcEJCUF9SMyk7CisJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPiAxKQorCXsKKwkJdGVtcEJCUF9SMyA9IChwQWQtPlN0YUNmZy5CQlBSMyAmIDB4RTcpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCB0ZW1wQkJQX1IzKTsKKwl9CiAKIAkvLyBJbiBSYWRpbyBPZmYsIHdlIHR1cm4gb2ZmIFJGIGNsaywgU28gbm93IG5lZWQgdG8gY2FsbCBBU0lDU3dpdGNoQ2hhbm5lbCBhZ2Fpbi4KIAlpZiAoSU5GUkFfT04ocEFkKSAmJiAocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgIT0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKQEAgLTcxNCw4ICs3MjEsMTUgQEAKIAkJQXNpY1R1cm5PZmZSRkNsayhwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOwogCX0KIAotICAgIC8vIFdoZW4gUENJIGNsb2NrIGlzIG9mZiwgZG9uJ3Qgd2FudCB0byBzZXJ2aWNlIGludGVycnVwdC4KLQlSVE1QX0lPX1dSSVRFMzIocEFkLCBJTlRfTUFTS19DU1IsIEF1dG9XYWtldXBJbnQpOworCWlmIChMZXZlbCAhPSBSVE1QX0hBTFQpCisJeworCQkvLyBDaGFuZ2UgSW50ZXJydXB0IGJpdG1hc2suCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIElOVF9NQVNLX0NTUiwgQXV0b1dha2V1cEludCk7CisJfQorCWVsc2UKKwl7CisJCU5JQ0Rpc2FibGVJbnRlcnJ1cHQocEFkKTsKKwl9CiAKICAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9DUlhfSURYLCBwQWQtPlJ4UmluZy5SeENwdUlkeCk7CiAJLy8gRGlzYWJsZSBNQUMgUngKQEAgLTcyNiw3ICs3NDAsOCBAQAogCS8vICAyLiBTZW5kIFNsZWVwIGNvbW1hbmQKIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBIMk1fTUFJTEJPWF9TVEFUVVMsIDB4ZmZmZmZmZmYpOwogCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9NQUlMQk9YX0NJRCwgMHhmZmZmZmZmZik7Ci0JQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMwLCBQb3dlclNhZmVDSUQsIDB4ZmYsIDB4MDApOyAgIC8vIHNlbmQgUE9XRVItU0FWRSBjb21tYW5kIHRvIE1DVS4gVGltZW91dCB1bml0OjQwdXMuCisJLy8gc2VuZCBQT1dFUi1TQVZFIGNvbW1hbmQgdG8gTUNVLiBoaWdoLWJ5dGUgPSAxIHNhdmUgcG93ZXIgYXMgbXVjaCBhcyBwb3NzaWJsZS4gaGlnaCBieXRlID0gMCBzYXZlIGxlc3MgcG93ZXIKKwlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzAsIFBvd2VyU2FmZUNJRCwgMHhmZiwgMHgxKTsKIAkvLyAgMi0xLiBXYWl0IGNvbW1hbmQgc3VjY2VzcwogCS8vIFN0YXR1cyA9IDEgOiBzdWNjZXNzLCBTdGF0dXMgPSAyLCBhbHJlYWR5IHNsZWVwLCBTdGF0dXMgPSAzLCBNYXliZSBNQUMgaXMgYnVzeSBzbyBjYW4ndCBmaW5pc2ggdGhpcyB0YXNrLgogCWJyYyA9IEFzaWNDaGVja0NvbW1hbk9rKHBBZCwgUG93ZXJTYWZlQ0lEKTsKQEAgLTczNCw3ICs3NDksNyBAQAogICAgIGlmIChicmMgPT0gRkFMU0UpCiAgICAgewogICAgICAgICAvLyB0cnkgYWdhaW4KLSAgICAJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMwLCBQb3dlclNhZmVDSUQsIDB4ZmYsIDB4MDApOyAgIC8vIHNlbmQgUE9XRVItU0FWRSBjb21tYW5kIHRvIE1DVS4gVGltZW91dCB1bml0OjQwdXMuCisgICAgCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMCwgUG93ZXJTYWZlQ0lELCAweGZmLCAweDAxKTsgICAvLyBzZW5kIFBPV0VSLVNBVkUgY29tbWFuZCB0byBNQ1UuIFRpbWVvdXQgdW5pdDo0MHVzLgogICAgIAkvL1JUTVB1c2VjRGVsYXkoMjAwKTsKICAgICAJYnJjID0gQXNpY0NoZWNrQ29tbWFuT2socEFkLCBQb3dlclNhZmVDSUQpOwogICAgIH0KQEAgLTc1OSw3ICs3NzQsNyBAQAogCWRvCiAJewogCQlSVE1QX0lPX1JFQUQzMihwQWQsIFdQRE1BX0dMT19DRkcsICZEbWFDZmcud29yZCk7Ci0JCWlmIChEbWFDZmcuZmllbGQuUnhETUFCdXN5ID09IDApCisJCWlmICgoRG1hQ2ZnLmZpZWxkLlJ4RE1BQnVzeSA9PSAwKSAmJiAoRG1hQ2ZnLmZpZWxkLlR4RE1BQnVzeSA9PSAwKSkKIAkJCWJyZWFrOwogCQlSVE1QdXNlY0RlbGF5KDIwKTsKIAkJaSsrOwpAQCAtNzY3LDEzICs3ODIsMTIgQEAKIAogCWlmIChpID49IDUwKQogCXsKKwkJcEFkLT5DaGVja0RtYUJ1c3lDb3VudCsrOwogCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJETUEgUngga2VlcHMgYnVzeS4gIG9uIFJUMjh4eFBjaUFzaWNSYWRpb09mZiAoKVxuIikpOwogCX0KLQkvLyBkaXNhYmxlIERNQSBSeC4KKwllbHNlCiAJewotCQlSVE1QX0lPX1JFQUQzMihwQWQsIFdQRE1BX0dMT19DRkcsICZEbWFDZmcud29yZCk7Ci0JCURtYUNmZy5maWVsZC5FbmFibGVSeERNQSA9IDA7Ci0JCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdQRE1BX0dMT19DRkcsIERtYUNmZy53b3JkKTsKKwkJcEFkLT5DaGVja0RtYUJ1c3lDb3VudCA9IDA7CiAJfQogCiAJaWYgKExldmVsID09IERPVDExUE9XRVJTQVZFKQpAQCAtNzk5LDcgKzgxMyw3IEBACiAJaWYgKExldmVsID09IFJUTVBfSEFMVCkKIAl7CiAJCWlmICgoYnJjID09IFRSVUUpICYmIChpIDwgNTApKQotCQkJUlRNUFBDSWVMaW5rQ3RybFNldHRpbmcocEFkLCAxKTsKKwkJCVJUTVBQQ0llTGlua0N0cmxTZXR0aW5nKHBBZCwgMCk7CiAJfQogCS8vICA0LiBTZXQgUENJIGNvbmZpZ3VyYXRpb24gU3BhY2UgTGluayBDb210cm9sIGZpZWxkcy4gIE9ubHkgUmFkaW8gT2ZmIG5lZWRzIHRvIGNhbGwgdGhpcyBmdW5jdGlvbgogCWVsc2UKQEAgLTgwOCw3ICs4MjIsNyBAQAogCQkJUlRNUFBDSWVMaW5rQ3RybFNldHRpbmcocEFkLCAzKTsKIAl9CiAKLSAgICBwQWQtPmJQQ0ljbGtPZmZEaXNhYmxlVHggPSBGQUxTRTsKKwlSVE1QX0NMRUFSX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0RJU0FCTEVfVFgpOwogfQogCiAKQEAgLTgzNSw3ICs4NDksOCBAQAogCXsKIAkgICAgcEFkLT5NbG1lLmJQc1BvbGxUaW1lclJ1bm5pbmcgPSBGQUxTRTsKIAkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUHNQb2xsVGltZXIsCSZDYW5jZWxsZWQpOwotCQlpZiAoKExldmVsID09IEdVSVJBRElPX09GRikgfHwgKExldmVsID09IEdVSV9JRExFX1BPV0VSX1NBVkUpKQorCQlpZiAoKExldmVsID09IEdVSVJBRElPX09GRikgfHwgKExldmVsID09IEdVSV9JRExFX1BPV0VSX1NBVkUpCisJCXx8IChSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfU0VUX1BDSV9DTEtfT0ZGX0NPTU1BTkQpKSkKIAkJewogCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlQyOHh4UGNpQXNpY1JhZGlvT24gKClcbiIpKTsKIAkJCS8vIDEuIFNldCBQQ0kgTGluayBDb250cm9sIGluIENvbmZpZ3VyYXRpb24gU3BhY2UuCkBAIC04NDUsMTUgKzg2MCwxNCBAQAogCX0KIAogICAgIHBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOwotCisJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCAweDNhODApOwogCS8vIDIuIFNlbmQgd2FrZSB1cCBjb21tYW5kLgotCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMSwgUG93ZXJXYWtlQ0lELCAweDAwLCAweDAwKTsKKwlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzEsIFBvd2VyV2FrZUNJRCwgMHgwMCwgMHgwMik7CiAKIAkvLyAyLTEuIHdhaXQgY29tbWFuZCBvay4KIAlicnYgPSBBc2ljQ2hlY2tDb21tYW5PayhwQWQsIFBvd2VyV2FrZUNJRCk7CiAgICAgaWYgKGJydikKICAgICB7Ci0gICAgCS8vUlRNUF9JT19XUklURTMyKHBBZCwgSU5UX01BU0tfQ1NSLCAoREVMQVlJTlRNQVNLfFJ4SU5UKSk7CiAgICAgCU5JQ0VuYWJsZUludGVycnVwdChwQWQpOwogCiAgICAgCS8vIDMuIEVuYWJsZSBUeCBETUEuCkBAIC04OTMsMTMgKzkwNywxMCBAQAogCiBWT0lEIFJUMjh4eFBjaVN0YUFzaWNGb3JjZVdha2V1cCgKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCwKLQlJTiBCT09MRUFOICAgICAgIGJGcm9tVHgpCisJSU4gVUNIQVIgICAgCSBMZXZlbCkKIHsKICAgICBBVVRPX1dBS0VVUF9TVFJVQwlBdXRvV2FrZXVwQ2ZnOwogCi0gICAgaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XQUtFVVBfTk9XKSkKICAgICB7CiAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIndha2luZyB1cCBub3chXG4iKSk7CkBAIC05MDcsMzggKzkxOCw0OCBAQAogICAgIH0KIAogICAgIE9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XQUtFVVBfTk9XKTsKKwlSVE1QX0NMRUFSX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0dPX1RPX1NMRUVQX05PVyk7CiAKICAgICBpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKQogICAgIHsKICAgICAgICAgLy8gU3VwcG9ydCBQQ0llIEFkdmFuY2UgUG93ZXIgU2F2ZQotICAgIAlpZiAoYkZyb21UeCA9PSBUUlVFKQorICAgIAlpZiAoKChMZXZlbCA9PSBGUk9NX1RYKSAmJiAocEFkLT5NbG1lLmJQc1BvbGxUaW1lclJ1bm5pbmcgPT0gVFJVRSkpIHx8CisJCQkoTGV2ZWwgPT0gUlRNUF9IQUxUKSkKICAgICAJewogICAgICAgICAgICAgcEFkLT5NbG1lLmJQc1BvbGxUaW1lclJ1bm5pbmcgPSBGQUxTRTsKICAgICAJCVJUTVBQQ0llTGlua0N0cmxWYWx1ZVJlc3RvcmUocEFkLCBSRVNUT1JFX1dBS0VVUCk7Ci0gICAgCQlSVE1QdXNlY0RlbGF5KDMwMDApOworICAgIAkJUlRNUHVzZWNEZWxheSg1MDAwKTsKICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT09PT1Bc2ljRm9yY2VXYWtldXA9PT1iRnJvbVR4XG4iKSk7CiAgICAgCX0KIAogCQlBdXRvV2FrZXVwQ2ZnLndvcmQgPSAwOwogCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1dBS0VVUF9DRkcsIEF1dG9XYWtldXBDZmcud29yZCk7CiAKLSAgICAgICAgaWYgKFJUMjh4eFBjaUFzaWNSYWRpb09uKHBBZCwgRE9UMTFQT1dFUlNBVkUpKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJbiBSYWRpbyBPZmYsIHdlIHR1cm4gb2ZmIFJGIGNsaywgU28gbm93IG5lZWQgdG8gY2FsbCBBU0lDU3dpdGNoQ2hhbm5lbCBhZ2Fpbi4KLSAgICAgICAgCWlmIChJTkZSQV9PTihwQWQpICYmIChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQotICAgICAgICAJCSYmIChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKQotICAgICAgICAJewotICAgICAgICAJCS8vIE11c3QgdXNpbmcgNDBNSHouCi0gICAgICAgIAkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOwotICAgICAgICAJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKTsKLSAgICAgICAgCX0KLSAgICAgICAgCWVsc2UKLSAgICAgICAgCXsKLSAgICAgICAgCQkvLyBNdXN0IHVzaW5nIDIwTUh6LgotICAgICAgICAJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOwotICAgICAgICAJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOwotICAgICAgICAJfQotICAgICAgICB9CisJCS8vIElmIHRoaXMgaXMgY2FsbGVkIGZyb20gSGFsdC4gQUxXQVlTIGZvcmNlIHdha2V1cCEhIQorCQlpZiAoTGV2ZWwgPT0gUlRNUF9IQUxUKQorCQl7CisJCQlSVDI4eHhQY2lBc2ljUmFkaW9PbihwQWQsIFJUTVBfSEFMVCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoUlQyOHh4UGNpQXNpY1JhZGlvT24ocEFkLCBET1QxMVBPV0VSU0FWRSkpCisJCQl7CisJCQkJLy8gSW4gUmFkaW8gT2ZmLCB3ZSB0dXJuIG9mZiBSRiBjbGssIFNvIG5vdyBuZWVkIHRvIGNhbGwgQVNJQ1N3aXRjaENoYW5uZWwgYWdhaW4uCisJCQkJaWYgKElORlJBX09OKHBBZCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsICE9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCisJCQkJCSYmIChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKQorCQkJCXsKKwkJCQkJLy8gTXVzdCB1c2luZyA0ME1Iei4KKwkJCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCQkJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vIE11c3QgdXNpbmcgMjBNSHouCisJCQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOworCQkJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJCQl9CisJCQl9CisJCX0KICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTExMjIsNiArMTE0Myw3IEBACiAgICAgewogICAgIAlOSUNSZXNldEZyb21FcnJvcihwQWQpOwogCisgICAgCS8qCiAgICAgCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CSyk7CiAgICAgCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CRSk7CiAgICAgCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19WSSk7CkBAIC0xMTI5LDYgKzExNTEsNyBAQAogICAgIAlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfSENDQSk7CiAgICAgCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9NR01UKTsKICAgICAJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX1JYKTsKKwkJKi8KIAogICAgIAkvLyBFbmFibGUgVHgvUngKICAgICAJUlRNUEVuYWJsZVJ4VHgocEFkKTsKQEAgLTExNjIsNiArMTE4NSwxMiBAQAogICAgIFdQRE1BX0dMT19DRkdfU1RSVUMJR2xvQ2ZnOwogCVVJTlQzMglpOwogCisJaWYgKHBBZC0+U3RhQ2ZnLmJSYWRpbyA9PSBUUlVFKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCItLT5NbG1lUmFkaW9PZmYoKSByZXR1cm4gb24gYlJhZGlvID09IFRSVUU7IFxuIikpOworCQlyZXR1cm47CisJfQorCiAgICAgaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpKQogICAgIAlyZXR1cm47CiAKQEAgLTExNjksMTMgKzExOTgsMTIgQEAKIAogCS8vIFNldCBMRUQKIAlSVE1QU2V0TEVEKHBBZCwgTEVEX1JBRElPX09GRik7Ci0JLy8gU2V0IFJhZGlvIG9mZiBmbGFnCi0JUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKTsKIAogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAogCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCiAgICAgewogICAgIAlCT09MRUFOCQlDYW5jZWxsZWQ7CisKICAgICAJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCiAgICAgCXsKIAkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgJkNhbmNlbGxlZCk7CkBAIC0xMTg1LDYgKzEyMTMsMTUgQEAKIAkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFKSkKICAgICAgICAgewogICAgICAgICAgICAgQk9PTEVBTiBDYW5jZWxsZWQ7CisKKwkJCS8vIEFsd2F5cyByYWRpbyBvbiBzaW5jZSB0aGUgTklDIG5lZWRzIHRvIHNldCB0aGUgTUNVIGNvbW1hbmQgKExFRF9SQURJT19PRkYpLg0KKwkJCWlmICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYgDQorCQkJICAgICAoSURMRV9PTihwQWQpKSAmJiANCisJCQkgICAgIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSURMRV9SQURJT19PRkYpKSkNCisJCQl7DQorCQkJCVJUMjh4eFBjaUFzaWNSYWRpb09uKHBBZCwgR1VJX0lETEVfUE9XRVJfU0FWRSk7DQorCQkJfQorCiAgICAgICAgICAgICBwQWQtPk1sbWUuYlBzUG9sbFRpbWVyUnVubmluZyA9IEZBTFNFOwogICAgICAgICAgICAgUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUHNQb2xsVGltZXIsCSZDYW5jZWxsZWQpOwogCSAgICAgICAgUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUmFkaW9Pbk9mZlRpbWVyLAkmQ2FuY2VsbGVkKTsKQEAgLTExOTcsOSArMTIzNCwyNiBAQAogICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAvLyBDbGVhbiB1cCBvbGQgYnNzIHRhYmxlCiAgICAgICAgIEJzc1RhYmxlSW5pdCgmcEFkLT5TY2FuVGFiKTsKKworCQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfQkspOworICAgIAlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfQkUpOworICAgIAlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfVkkpOworICAgIAlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfVk8pOworICAgIAlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfSENDQSk7CisgICAgCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9NR01UKTsKKyAgICAJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX1JYKTsKKworCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKQorCQl7CisJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5SYWRpb09uT2ZmVGltZXIsIDUwMCk7CisJCQlyZXR1cm47CisJCX0KICAgICB9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKKwkvLyBTZXQgUmFkaW8gb2ZmIGZsYWcKKwlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpOworCiAJLy8gRGlzYWJsZSBUeC9SeCBETUEKIAlSVE1QX0lPX1JFQUQzMihwQWQsIFdQRE1BX0dMT19DRkcsICZHbG9DZmcud29yZCk7CSAgIC8vIGRpc2FibGUgRE1BCiAJR2xvQ2ZnLmZpZWxkLkVuYWJsZVR4RE1BID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1faW5mby5jCmluZGV4IGRkOTJhYzYuLmMzZTEzMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9pbmZvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2luZm8uYwpAQCAtODE0LDcgKzgxNCw2IEBACiAJSU4JUFJUTVBfQURBUFRFUglwQWQsCiAJSU4JUFVDSEFSCQkJYXJnKQogewotI2lmZGVmIFJUMjg2MAogCUlOVCBpLCBRdWVJZHg9MDsKIAlQUlQyOFhYX1JYRF9TVFJVQyBwUnhEOwogICAgIFBUWERfU1RSVUMgcFR4RDsKQEAgLTg0NSw3ICs4NDQsNiBAQAogCSAgICBoZXhfZHVtcCgiUnggRGVzY3JpcHRvciIsIChjaGFyICopcFJ4RCwgMTYpOwogCQlwcmludGsoInBSeEQtPkRET05FID0gJXhcbiIsIHBSeEQtPkRET05FKTsKIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAlyZXR1cm4gVFJVRTsKIH0KQEAgLTE4MDMsOSArMTgwMSw3IEBACiAJfQogCiAJLy8gRm9yIGtleSBpbmRleCBhbmQgZXh0IElWIGJpdCwgc28gb25seSBuZWVkIHRvIHVwZGF0ZSB0aGUgcG9zaXRpb24ob2Zmc2V0KzMpLgotI2lmZGVmIFJUMjg2MAogCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0KzMsIElWRUlWKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeTogV0NJRCAjJWQsIEtleUluZGV4ICMlZCwgQWxnPSVzXG4iLFdjaWQsIEtleUlkeCwgQ2lwaGVyTmFtZVtDaXBoZXJBbGddKSk7CiAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIJV0NJREF0dHJpID0gMHgleCBcbiIsICBXQ0lEQXR0cmkpKTsKQEAgLTI4MjcsOSArMjgyMyw3IEBACiAKIAlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CiAKLSNpZmRlZiBSVDI4NjAKIAlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCXsKIAkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQ2FuIG5vdCBzd2l0Y2ggb3BlcmF0ZSBtb2RlIG9uIGludGVyZmFjZSB1cCAhISBcbiIpKTsKIAkJcmV0dXJuIEZBTFNFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3N5bmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9zeW5jLmMKaW5kZXggNDBlNDEwOS4uZDI5ZTBiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3N5bmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fc3luYy5jCkBAIC00NzAsNyArNDcwLDcgQEAKIAkJewogCQkvLyBCQlAgYW5kIFJGIGFyZSBub3QgYWNjZXNzaWJsZSBpbiBQUyBtb2RlLCB3ZSBoYXMgdG8gd2FrZSB0aGVtIHVwIGZpcnN0CiAJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQotCQkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgVFJVRSk7CisJCQkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgRlJPTV9UWCk7CiAKIAkJCS8vIGxlYXZlIFBTTSBkdXJpbmcgc2Nhbm5pbmcuIG90aGVyd2lzZSB3ZSBtYXkgbG9zdCBQcm9iZVJzcCAmIEJFQUNPTgogCQkJaWYgKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93cGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV93cGEuYwppbmRleCA4MWMzMzJhLi42OWJhZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fd3BhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX3dwYS5jCkBAIC0zOSw4ICszOSwxMCBAQAogLy8gV1BBIE9VSQogVUNIQVIJCU9VSV9XUEFfTk9ORV9BS01bNF0JCT0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDB9OwogVUNIQVIgICAgICAgT1VJX1dQQV9WRVJTSU9OWzRdICAgICAgPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMX07CitVQ0hBUiAgICAgICBPVUlfV1BBX1dFUDQwWzRdICAgICAgPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMX07CiBVQ0hBUiAgICAgICBPVUlfV1BBX1RLSVBbNF0gICAgID0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDJ9OwogVUNIQVIgICAgICAgT1VJX1dQQV9DQ01QWzRdICAgICA9IHsweDAwLCAweDUwLCAweEYyLCAweDA0fTsKK1VDSEFSICAgICAgIE9VSV9XUEFfV0VQMTA0WzRdICAgICAgPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwNX07CiBVQ0hBUiAgICAgICBPVUlfV1BBXzgwMjFYX0FLTVs0XQk9IHsweDAwLCAweDUwLCAweEYyLCAweDAxfTsKIFVDSEFSICAgICAgIE9VSV9XUEFfUFNLX0FLTVs0XSAgICAgID0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDJ9OwogLy8gV1BBMiBPVUkKQEAgLTQ5LDYgKzUxLDcgQEAKIFVDSEFSICAgICAgIE9VSV9XUEEyX0NDTVBbNF0gICAgICAgID0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDR9OwogVUNIQVIgICAgICAgT1VJX1dQQTJfODAyMVhfQUtNWzRdICAgPSB7MHgwMCwgMHgwRiwgMHhBQywgMHgwMX07CiBVQ0hBUiAgICAgICBPVUlfV1BBMl9QU0tfQUtNWzRdICAgCT0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDJ9OworVUNIQVIgICAgICAgT1VJX1dQQTJfV0VQMTA0WzRdICAgPSB7MHgwMCwgMHgwRiwgMHhBQywgMHgwNX07CiAvLyBNU0EgT1VJCiBVQ0hBUiAgIAlPVUlfTVNBXzgwMjFYX0FLTVs0XSAgICA9IHsweDAwLCAweDBGLCAweEFDLCAweDA1fTsJCS8vIE5vdCB5ZXQgZmluYWwgLSBJRUVFIDgwMi4xMXMtRDEuMDYKIFVDSEFSICAgCU9VSV9NU0FfUFNLX0FLTVs0XSAgIAk9IHsweDAwLCAweDBGLCAweEFDLCAweDA2fTsJCS8vIE5vdCB5ZXQgZmluYWwgLSBJRUVFIDgwMi4xMXMtRDEuMDYKQEAgLTM2Nyw2ICszNzAsMjQgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCWlmICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYKKwkJCShwQWQtPlN0YUNmZy5Hcm91cENpcGhlciAhPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSAmJgorCQkJKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyICE9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpKQorCQl7CisJCQlVSU5UIEdyb3VwQ2lwaGVyID0gcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXI7CisJCQlzd2l0Y2goR3JvdXBDaXBoZXIpCisJCQl7CisJCQkJY2FzZSBOZGlzODAyXzExR3JvdXBXRVA0MEVuYWJsZWQ6CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm1jYXN0LCBPVUlfV1BBMl9XRVA0MCwgNCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgTmRpczgwMl8xMUdyb3VwV0VQMTA0RW5hYmxlZDoKKwkJCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEEyX1dFUDEwNCwgNCk7CisJCQkJCWJyZWFrOworCQkJfQorCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKIAkJLy8gc3dhcCBmb3IgYmlnLWVuZGlhbiBwbGF0Zm9ybQogCQlwUnNuaWVfY2lwaGVyLT52ZXJzaW9uID0gY3B1MmxlMTYocFJzbmllX2NpcGhlci0+dmVyc2lvbik7CiAJICAgIHBSc25pZV9jaXBoZXItPnVjb3VudCA9IGNwdTJsZTE2KHBSc25pZV9jaXBoZXItPnVjb3VudCk7CkBAIC00MjcsMTEgKzQ0OCwyOCBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJgorCQkJKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyICE9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpICYmCisJCQkocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgIT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkpCisJCXsKKwkJCVVJTlQgR3JvdXBDaXBoZXIgPSBwQWQtPlN0YUNmZy5Hcm91cENpcGhlcjsKKwkJCXN3aXRjaChHcm91cENpcGhlcikKKwkJCXsKKwkJCQljYXNlIE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZDoKKwkJCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEFfV0VQNDAsIDQpOworCQkJCQlicmVhazsKKwkJCQljYXNlIE5kaXM4MDJfMTFHcm91cFdFUDEwNEVuYWJsZWQ6CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm1jYXN0LCBPVUlfV1BBX1dFUDEwNCwgNCk7CisJCQkJCWJyZWFrOworCQkJfQorCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKIAkJLy8gc3dhcCBmb3IgYmlnLWVuZGlhbiBwbGF0Zm9ybQogCQlwUnNuaWVfY2lwaGVyLT52ZXJzaW9uID0gY3B1MmxlMTYocFJzbmllX2NpcGhlci0+dmVyc2lvbik7CiAJICAgIHBSc25pZV9jaXBoZXItPnVjb3VudCA9IGNwdTJsZTE2KHBSc25pZV9jaXBoZXItPnVjb3VudCk7CiAJfQotCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9tbG1lLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9tbG1lLmMKaW5kZXggMjI5NzQ3MC4uYzAwZjlhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vbWxtZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL21sbWUuYwpAQCAtNTI3LDcgKzUyNyw2IEBACiAKIAogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAotI2lmZGVmIFJUMjg2MAogCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQogCQl7CiAJICAgICAgICBpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKQpAQCAtNTM3LDcgKzUzNiw2IEBACiAJICAgIAkJUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPk1sbWUuUmFkaW9Pbk9mZlRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oUmFkaW9PbkV4ZWMpLCBwQWQsIEZBTFNFKTsKIAkgICAgICAgIH0KIAkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCiAJfSB3aGlsZSAoRkFMU0UpOwpAQCAtNzExLDEzICs3MDksMTEgQEAKIAkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLAkJJkNhbmNlbGxlZCk7CiAJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLAkJJkNhbmNlbGxlZCk7CiAJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwJCSZDYW5jZWxsZWQpOwotI2lmZGVmIFJUMjg2MAogCSAgICBpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKQogCSAgICB7CiAJICAgCSAgICBSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5Qc1BvbGxUaW1lciwJCSZDYW5jZWxsZWQpOwogCQkgICAgUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUmFkaW9Pbk9mZlRpbWVyLAkJJkNhbmNlbGxlZCk7CiAJCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogI2lmZGVmIFFPU19ETFNfU1VQUE9SVAogCQlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQpAQCAtODA4LDIxICs4MDQsMzQgQEAKIAlVTE9ORwkJCVR4VG90YWxDbnQ7CiAJUFJUTVBfQURBUFRFUglwQWQgPSAoUlRNUF9BREFQVEVSICopRnVuY3Rpb25Db250ZXh0OwogCisJLy9CYXJvbiAyMDA4LzA3LzEwCisJLy9wcmludGsoIkJhcm9uX1Rlc3Q6XHQlcyIsIFJUTVBHZXRSYWxpbmtFbmNyeU1vZGVTdHIocEFkLT5TdGFDZmcuV2VwU3RhdHVzKSk7CisJLy9JZiB0aGUgU1RBIHNlY3VyaXR5IHNldHRpbmcgaXMgT1BFTiBvciBXRVAsIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IDAuCisJLy9JZiB0aGUgU1RBIHNlY3VyaXR5IHNldHRpbmcgaXMgV1BBUFNLIG9yIFdQQTJQU0ssIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IDEuCisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzPDIpCisJeworCQlwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSAwOworCX0KKwllbHNlCisJeworCQlwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSAxOworCX0KKwogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAotI2lmZGVmIFJUMjg2MAogCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCiAJewogCSAgICAvLyBJZiBIYXJkd2FyZSBjb250cm9sbGVkIFJhZGlvIGVuYWJsZWQsIHdlIGhhdmUgdG8gY2hlY2sgR1BJTyBwaW4yIGV2ZXJ5IDIgc2Vjb25kLgogCQkvLyBNb3ZlIGNvZGUgdG8gaGVyZSwgYmVjYXVzZSBmb2xsb3dpbmcgY29kZSB3aWxsIHJldHVybiB3aGVuIHJhZGlvIGlzIG9mZgotCQlpZiAoKHBBZC0+TWxtZS5QZXJpb2RpY1JvdW5kICUgKE1MTUVfVEFTS19FWEVDX01VTFRJUExFICogMikgPT0gMCkgJiYgKHBBZC0+U3RhQ2ZnLmJIYXJkd2FyZVJhZGlvID09IFRSVUUpICYmCisJCWlmICgocEFkLT5NbG1lLlBlcmlvZGljUm91bmQgJSAoTUxNRV9UQVNLX0VYRUNfTVVMVElQTEUgKiAyKSA9PSAwKSAmJgorCQkJKHBBZC0+U3RhQ2ZnLmJIYXJkd2FyZVJhZGlvID09IFRSVUUpICYmCisJCQkoUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfU1RBUlRfVVApKSAmJgogCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpICYmCi0JCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkgJiYKLQkJCShwQWQtPmJQQ0ljbGtPZmYgPT0gRkFMU0UpKQorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpKQogCQl7CiAJCQlVSU5UMzIJCQkJZGF0YSA9IDA7CiAKIAkJCS8vIFJlYWQgR1BJTyBwaW4yIGFzIEhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8gc3RhdGUKLQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgR1BJT19DVFJMX0NGRywgJmRhdGEpOworCQkJUlRNUF9JT19GT1JDRV9SRUFEMzIocEFkLCBHUElPX0NUUkxfQ0ZHLCAmZGF0YSk7CiAJCQlpZiAoZGF0YSAmIDB4MDQpCiAJCQl7CiAJCQkJcEFkLT5TdGFDZmcuYkh3UmFkaW8gPSBUUlVFOwpAQCAtODQ5LDcgKzg1OCw2IEBACiAJCQl9CiAJCX0KIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKIAkvLyBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4KQEAgLTg2MCw2ICs4NjgsNDUgQEAKIAkJCQkJCQkJZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpKSkKIAkJcmV0dXJuOwogCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmICgocEFkLT5SYWxpbmtDb3VudGVycy5MYXN0UmVjZWl2ZWRCeXRlQ291bnQgPT0gcEFkLT5SYWxpbmtDb3VudGVycy5SZWNlaXZlZEJ5dGVDb3VudCkgJiYgKHBBZC0+U3RhQ2ZnLmJSYWRpbyA9PSBUUlVFKSkKKwkJeworCQkJLy8gSWYgUmVjZWl2ZUJ5dGVDb3VudCBkb2Vzbid0IGNoYW5nZSwgIGluY3JlYXNlIFNhbWVSeEJ5dGVDb3VudCBieSAxLgorCQkJcEFkLT5TYW1lUnhCeXRlQ291bnQrKzsKKwkJfQorCQllbHNlCisJCQlwQWQtPlNhbWVSeEJ5dGVDb3VudCA9IDA7CisKKwkJLy8gSWYgYWZ0ZXIgQkJQLCBzdGlsbCBub3Qgd29yay4uLm5lZWQgdG8gY2hlY2sgdG8gcmVzZXQgUEJGJk1BQy4KKwkJaWYgKHBBZC0+U2FtZVJ4Qnl0ZUNvdW50ID09IDcwMikKKwkJeworCQkJcEFkLT5TYW1lUnhCeXRlQ291bnQgPSAwOworCQkJQXNpY1Jlc2V0UEJGKHBBZCk7CisJCQlBc2ljUmVzZXRNQUMocEFkKTsKKwkJfQorCisJCS8vIElmIFNhbWVSeEJ5dGVDb3VudCBrZWVwcyBoYXBwZW5zIGZvciAyIHNlY29uZCBpbiBpbmZyYSBtb2RlLCBvciBmb3IgNjAgc2Vjb25kcyBpbiBpZGxlIG1vZGUuCisJCWlmICgoKElORlJBX09OKHBBZCkpICYmIChwQWQtPlNhbWVSeEJ5dGVDb3VudCA+IDIwKSkgfHwgKChJRExFX09OKHBBZCkpICYmIChwQWQtPlNhbWVSeEJ5dGVDb3VudCA+IDYwMCkpKQorCQl7CisJCQlpZiAoKHBBZC0+U3RhQ2ZnLmJSYWRpbyA9PSBUUlVFKSAmJiAocEFkLT5TYW1lUnhCeXRlQ291bnQgPCA3MDApKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT4gIFNhbWVSeEJ5dGVDb3VudCA9ICVsdSAhISEhISEhISEhISEhISEgXG4iLCBwQWQtPlNhbWVSeEJ5dGVDb3VudCkpOworCQkJCXBBZC0+U2FtZVJ4Qnl0ZUNvdW50ID0gNzAwOworCQkJCUFzaWNSZXNldEJCUChwQWQpOworCQkJfQorCQl9CisKKwkJLy8gVXBkYXRlIGxhc3RSZWNlaXZlQnl0ZUNvdW50LgorCQlwQWQtPlJhbGlua0NvdW50ZXJzLkxhc3RSZWNlaXZlZEJ5dGVDb3VudCA9IHBBZC0+UmFsaW5rQ291bnRlcnMuUmVjZWl2ZWRCeXRlQ291bnQ7CisKKwkJaWYgKChwQWQtPkNoZWNrRG1hQnVzeUNvdW50ID4gMykgJiYgKElETEVfT04ocEFkKSkpCisJCXsKKwkJCXBBZC0+Q2hlY2tEbWFCdXN5Q291bnQgPSAwOworCQkJQXNpY1Jlc2V0RnJvbURNQUJ1c3kocEFkKTsKKwkJfQorCX0KKwogCVJUMjhYWF9NTE1FX1BSRV9TQU5JVFlfQ0hFQ0socEFkKTsKIAogI2lmZGVmIFJBTElOS19BVEUKQEAgLTEwMjIsOSArMTA2OSw3IEBACiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCiAJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCiAJCXsKLSNpZmRlZiBSVDI4NjAKIAkJCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpICYmIChwQWQtPmJQQ0ljbGtPZmYgPT0gRkFMU0UpKQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJewogCQkJCS8vIFdoZW4gQWRob2MgYmVhY29uIGlzIGVuYWJsZWQgYW5kIFJUUy9DVFMgaXMgZW5hYmxlZCwgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCBoYXJkd2FyZSBNQUMgRlNNIHdpbGwgcnVuIGludG8gYSBkZWFkbG9jawogCQkJCS8vIGFuZCBzZW5kaW5nIENUUy10by1zZWxmIG92ZXIgYW5kIG92ZXIuCkBAIC0xMDgxLDYgKzExMjYsMTkgQEAKICAgICAJCXBBZC0+U3RhQ2ZnLmJCbG9ja0Fzc29jID0gRkFMU0U7CiAgICAgfQogCisJLy9CYXJvbiAyMDA4LzA3LzEwCisJLy9wcmludGsoIkJhcm9uX1Rlc3Q6XHQlcyIsIFJUTVBHZXRSYWxpbmtFbmNyeU1vZGVTdHIocEFkLT5TdGFDZmcuV2VwU3RhdHVzKSk7CisJLy9JZiB0aGUgU1RBIHNlY3VyaXR5IHNldHRpbmcgaXMgT1BFTiBvciBXRVAsIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IDAuCisJLy9JZiB0aGUgU1RBIHNlY3VyaXR5IHNldHRpbmcgaXMgV1BBUFNLIG9yIFdQQTJQU0ssIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IDEuCisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzPDIpCisJeworCQlwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSAwOworCX0KKwllbHNlCisJeworCQlwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSAxOworCX0KKwogICAgIGlmICgocEFkLT5QcmVNZWRpYVN0YXRlICE9IHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlKSAmJiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpKQogCXsKIAkJaWYgKHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID09IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkKQpAQCAtMTA5MCw2ICsxMTQ4LDE1IEBACiAJCXBBZC0+UHJlTWVkaWFTdGF0ZSA9IHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlOwogCX0KIAorCWlmICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYgKElETEVfT04ocEFkKSkgJiYKKyAgICAgICAgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFKSkgJiYKKwkJKHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPT0gU1lOQ19JRExFKSAmJgorCQkocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpICYmCisJCShSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9TVEFSVF9VUCkpICYmCisJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKSkpCisJeworCQlSVDI4eHhQY2lBc2ljUmFkaW9PZmYocEFkLCBHVUlfSURMRV9QT1dFUl9TQVZFLCAwKTsKKwl9CiAKIAogCkBAIC0yNzgxLDcgKzI4NDgsNyBAQAogCWlmIChJTkZSQV9PTihwQWQpICYmCiAJCShQb3dlck1vZGUgIT0gTmRpczgwMl8xMVBvd2VyTW9kZUNBTSkgJiYKIAkJKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfQUNUSVZFKSAmJgotCQkocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpKQorCQlSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKSkKIAl7CiAJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJnBBZC0+TWxtZS5MYXN0U2VuZE5VTExwc21UaW1lKTsKIAkJcEFkLT5SYWxpbmtDb3VudGVycy5SeENvdW50U2luY2VMYXN0TlVMTCA9IDA7CkBAIC00MDY1LDcgKzQxMzIsOSBAQAogCQkJCQkJCWNvbnRpbnVlOwogCiAJCQkJCS8vIGNoZWNrIGdyb3VwIGNpcGhlcgotCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzIDwgcEluQnNzLT5XUEEuR3JvdXBDaXBoZXIpCisJCQkJCWlmICgocEFkLT5TdGFDZmcuV2VwU3RhdHVzIDwgcEluQnNzLT5XUEEuR3JvdXBDaXBoZXIpICYmCisJCQkJCQkocEluQnNzLT5XUEEuR3JvdXBDaXBoZXIgIT0gTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkKSAmJgorCQkJCQkJKHBJbkJzcy0+V1BBLkdyb3VwQ2lwaGVyICE9IE5kaXM4MDJfMTFHcm91cFdFUDEwNEVuYWJsZWQpKQogCQkJCQkJY29udGludWU7CiAKIAkJCQkJLy8gY2hlY2sgcGFpcndpc2UgY2lwaGVyLCBza2lwIGlmIG5vbmUgbWF0Y2hlZApAQCAtNDA4NCw3ICs0MTUzLDkgQEAKIAkJCQkJCQljb250aW51ZTsKIAogCQkJCQkvLyBjaGVjayBncm91cCBjaXBoZXIKLQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA8IHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlcikKKwkJCQkJaWYgKChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPCBwSW5Cc3MtPldQQS5Hcm91cENpcGhlcikgJiYKKwkJCQkJCShwSW5Cc3MtPldQQTIuR3JvdXBDaXBoZXIgIT0gTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkKSAmJgorCQkJCQkJKHBJbkJzcy0+V1BBMi5Hcm91cENpcGhlciAhPSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkKSkKIAkJCQkJCWNvbnRpbnVlOwogCiAJCQkJCS8vIGNoZWNrIHBhaXJ3aXNlIGNpcGhlciwgc2tpcCBpZiBub25lIG1hdGNoZWQKQEAgLTQzNzEsOCArNDQ0MiwxMCBAQAogCQkJCXN3aXRjaCAoKnBUbXApCiAJCQkJewogCQkJCQljYXNlIDE6Ci0JCQkJCWNhc2UgNToJLy8gQWx0aG91Z2ggV0VQIGlzIG5vdCBhbGxvd2VkIGluIFdQQSByZWxhdGVkIGF1dGggbW9kZSwgd2UgcGFyc2UgaXQgYW55d2F5Ci0JCQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgNToKKwkJCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFHcm91cFdFUDEwNEVuYWJsZWQ7CiAJCQkJCQlicmVhazsKIAkJCQkJY2FzZSAyOgogCQkJCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKQEAgLTQ0ODksOCArNDU2MiwxMCBAQAogCQkJCXN3aXRjaCAocENpcGhlci0+VHlwZSkKIAkJCQl7CiAJCQkJCWNhc2UgMToKLQkJCQkJY2FzZSA1OgkvLyBBbHRob3VnaCBXRVAgaXMgbm90IGFsbG93ZWQgaW4gV1BBIHJlbGF0ZWQgYXV0aCBtb2RlLCB3ZSBwYXJzZSBpdCBhbnl3YXkKLQkJCQkJCXBCc3MtPldQQTIuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJcEJzcy0+V1BBMi5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDU6CisJCQkJCQlwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUdyb3VwV0VQMTA0RW5hYmxlZDsKIAkJCQkJCWJyZWFrOwogCQkJCQljYXNlIDI6CiAJCQkJCQlwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKQEAgLTQ5NTMsMTYgKzUwMjgsMTMgQEAKIFZPSUQJTWxtZVJlc3RhcnRTdGF0ZU1hY2hpbmUoCiAJSU4JUFJUTVBfQURBUFRFUglwQWQpCiB7Ci0jaWZkZWYgUlQyODYwCiAJTUxNRV9RVUVVRV9FTEVNCQkqRWxlbSA9IE5VTEw7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCiAJQk9PTEVBTgkJCQlDYW5jZWxsZWQ7CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lUmVzdGFydFN0YXRlTWFjaGluZSBcbiIpKTsKIAotI2lmZGVmIFJUMjg2MAogCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7CiAJaWYocEFkLT5NbG1lLmJSdW5uaW5nKQogCXsKQEAgLTQ5OTAsNyArNTA2Miw2IEBACiAJCQlEQkdQUklOVF9FUlIoKCJNbG1lUmVzdGFydFN0YXRlTWFjaGluZTogTWxtZVF1ZXVlIGVtcHR5XG4iKSk7CiAJCX0KIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKIAlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQpAQCAtNTAzOSwxMiArNTExMCwxMCBAQAogCX0KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAotI2lmZGVmIFJUMjg2MAogCS8vIFJlbW92ZSBydW5uaW5nIHN0YXRlCiAJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKIAlwQWQtPk1sbWUuYlJ1bm5pbmcgPSBGQUxTRTsKIAlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogfQogCiAvKiEgXGJyaWVmCXRlc3QgaWYgdGhlIE1MTUUgUXVldWUgaXMgZW1wdHkKQEAgLTYxNDksNiArNjIxOCwxMiBAQAogCVVMT05HCQlUeFB3cls1XTsKIAlDSEFSCQlWYWx1ZTsKIAorCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpCisJCXx8IChwQWQtPmJQQ0ljbGtPZmYgPT0gVFJVRSkKKwkJfHwgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lETEVfUkFESU9fT0ZGKQorCQl8fCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQorCQlyZXR1cm47CisKIAlpZiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKQogCXsKIAkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID4gMTQpCkBAIC02NDkzLDEwICs2NTY4LDEwIEBACiAgKi8KIFZPSUQgQXNpY0ZvcmNlV2FrZXVwKAogCUlOIFBSVE1QX0FEQVBURVIgcEFkLAotCUlOIEJPT0xFQU4gICAgYkZyb21UeCkKKwlJTiBVQ0hBUiAgICAJIExldmVsKQogewogICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBBc2ljRm9yY2VXYWtldXAgXG4iKSk7Ci0gICAgUlQyOFhYX1NUQV9GT1JDRV9XQUtFVVAocEFkLCBiRnJvbVR4KTsKKyAgICBSVDI4WFhfU1RBX0ZPUkNFX1dBS0VVUChwQWQsIExldmVsKTsKIH0KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIC8qCkBAIC02NzEwLDcgKzY3ODUsNiBAQAogCWNzcjkuZmllbGQuYlRzZlRpY2tpbmcgPSAwOwogCVJUTVBfSU9fV1JJVEUzMihwQWQsIEJDTl9USU1FX0NGRywgY3NyOS53b3JkKTsKIAotI2lmZGVmIFJUMjg2MAogCS8vIG1vdmUgQkVBQ09OIFRYRCBhbmQgZnJhbWUgY29udGVudCB0byBvbi1jaGlwIG1lbW9yeQogCXB0ciA9IChQVUNIQVIpJnBBZC0+QmVhY29uVHhXSTsKIAlmb3IgKGk9MDsgaTxUWFdJX1NJWkU7IGkrPTQpICAvLyAxNi1ieXRlIFRYV0kgZmllbGQKQEAgLTY3MjgsNyArNjgwMiw2IEBACiAJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEhXX0JFQUNPTl9CQVNFMCArIFRYV0lfU0laRSArIGksIGxvbmdwdHIpOwogCQlwdHIgKz00OwogCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCS8vIHN0YXJ0IHNlbmRpbmcgQkVBQ09OCiAJY3NyOS5maWVsZC5CZWFjb25JbnRlcnZhbCA9IHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA8PCA0OyAvLyBBU0lDIHJlZ2lzdGVyIGluIHVuaXRzIG9mIDEvMTYgVFUKQEAgLTcwOTcsOSArNzE3MCw3IEBACiB7CiAJVUxPTkcgb2Zmc2V0OyAvLywgY3NyMDsKIAlTSEFSRURLRVlfTU9ERV9TVFJVQyBjc3IxOwotI2lmZGVmIFJUMjg2MAogCUlOVCAgIGk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBc2ljQWRkU2hhcmVkS2V5RW50cnkgQnNzSW5kZXg9JWQsIEtleUlkeD0lZFxuIiwgQnNzSW5kZXgsS2V5SWR4KSk7CiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC03MTIxLDcgKzcxOTIsNiBAQAogCS8vCiAJLy8gZmlsbCBrZXkgbWF0ZXJpYWwgLSBrZXkgKyBUWCBNSUMgKyBSWCBNSUMKIAkvLwotI2lmZGVmIFJUMjg2MAogCW9mZnNldCA9IFNIQVJFRF9LRVlfVEFCTEVfQkFTRSArICg0KkJzc0luZGV4ICsgS2V5SWR4KSpIV19LRVlfRU5UUllfU0laRTsKIAlmb3IgKGk9MDsgaTxNQVhfTEVOX09GX1NIQVJFX0tFWTsgaSsrKQogCXsKQEAgLTcxNDUsNyArNzIxNSw2IEBACiAJCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCArIGksIHBSeE1pY1tpXSk7CiAJCX0KIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCS8vCkBAIC03MzIwLDkgKzczODksNyBAQAogCVBVQ0hBUgkJcFR4dHNjID0gcENpcGhlcktleS0+VHhUc2M7CiAJVUNIQVIJCUNpcGhlckFsZyA9IHBDaXBoZXJLZXktPkNpcGhlckFsZzsKIAlTSEFSRURLRVlfTU9ERV9TVFJVQyBjc3IxOwotI2lmZGVmIFJUMjg2MAogCVVDSEFSCQlpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT0+IEFzaWNBZGRLZXlFbnRyeVxuIikpOwogCS8vCkBAIC03MzM3LDcgKzc0MDQsNiBAQAogCS8vIDIuKSBTZXQgS2V5IHRvIEFzaWMKIAkvLwogCS8vZm9yIChpID0gMDsgaSA8IEtleUxlbjsgaSsrKQotI2lmZGVmIFJUMjg2MAogCWZvciAoaSA9IDA7IGkgPCBNQVhfTEVOX09GX1BFRVJfS0VZOyBpKyspCiAJewogCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCArIGksIHBLZXlbaV0pOwpAQCAtNzM2Myw3ICs3NDI5LDYgQEAKIAkJCVJUTVBfSU9fV1JJVEU4KHBBZCwgb2Zmc2V0ICsgaSwgcFJ4TWljW2ldKTsKIAkJfQogCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAJLy8KQEAgLTczNzIsNyArNzQzNyw2IEBACiAJLy8KIAlpZiAoYlR4S2V5KQogCXsKLSNpZmRlZiBSVDI4NjAKIAkJb2Zmc2V0ID0gTUFDX0lWRUlWX1RBQkxFX0JBU0UgKyAoV0NJRCAqIEhXX0lWRUlWX0VOVFJZX1NJWkUpOwogCQkvLwogCQkvLyBXcml0ZSBJVgpAQCAtNzM5NSw3ICs3NDU5LDYgQEAKIAkJewogCQkJUlRNUF9JT19XUklURTgocEFkLCBvZmZzZXQgKyBpLCBwVHh0c2NbaSArIDJdKTsKIAkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJCUFzaWNVcGRhdGVXQ0lEQXR0cmlidXRlKHBBZCwgV0NJRCwgQnNzSW5kZXgsIENpcGhlckFsZywgYlVzZVBhaXJld2lzZUtleVRhYmxlKTsKIAl9CkBAIC03NDYxLDEyICs3NTI0LDEwIEBACiAKIAkvLyBFS0VZCiAJb2Zmc2V0ID0gUEFJUldJU0VfS0VZX1RBQkxFX0JBU0UgKyAoV0NJRCAqIEhXX0tFWV9FTlRSWV9TSVpFKTsKLSNpZmRlZiBSVDI4NjAKIAlmb3IgKGk9MDsgaTxNQVhfTEVOX09GX1BFRVJfS0VZOyBpKyspCiAJewogCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCArIGksIHBLZXlbaV0pOwogCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAlmb3IgKGk9MDsgaTxNQVhfTEVOX09GX1BFRVJfS0VZOyBpKz00KQogCXsKIAkJVUlOVDMyIFZhbHVlOwpAQCAtNzQ3OCwyMiArNzUzOSwxOCBAQAogCS8vICBNSUMgS0VZCiAJaWYgKHBUeE1pYykKIAl7Ci0jaWZkZWYgUlQyODYwCiAJCWZvciAoaT0wOyBpPDg7IGkrKykKIAkJewogCQkJUlRNUF9JT19XUklURTgocEFkLCBvZmZzZXQraSwgcFR4TWljW2ldKTsKIAkJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCX0KIAlvZmZzZXQgKz0gODsKIAlpZiAocFJ4TWljKQogCXsKLSNpZmRlZiBSVDI4NjAKIAkJZm9yIChpPTA7IGk8ODsgaSsrKQogCQl7CiAJCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCtpLCBwUnhNaWNbaV0pOwogCQl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJfQogCiAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBc2ljQWRkUGFpcndpc2VLZXlFbnRyeTogV0NJRCAjJWQgQWxnPSVzXG4iLFdDSUQsIENpcGhlck5hbWVbQ2lwaGVyQWxnXSkpOwpAQCAtNzU0MiwxMSArNzU5OSw5IEBACiAJSE9TVF9DTURfQ1NSX1NUUlVDCUgyTUNtZDsKIAlIMk1fTUFJTEJPWF9TVFJVQwlIMk1NYWlsYm94OwogCVVMT05HCQkJCWkgPSAwOwotI2lmZGVmIFJUMjg2MAogI2lmZGVmIFJBTElOS19BVEUKIAlzdGF0aWMgVUlOVDMyIGogPSAwOwogI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAlkbwogCXsKIAkJUlRNUF9JT19SRUFEMzIocEFkLCBIMk1fTUFJTEJPWF9DU1IsICZIMk1NYWlsYm94LndvcmQpOwpAQCAtNzU1OCw3ICs3NjEzLDYgQEAKIAogCWlmIChpID49IDEwMCkKIAl7Ci0jaWZkZWYgUlQyODYwCiAjaWZkZWYgUkFMSU5LX0FURQogCQlpZiAocEFkLT5hdGUuYkZXTG9hZGluZyA9PSBUUlVFKQogCQl7CkBAIC03NTgzLDE0ICs3NjM3LDMzIEBACiAJCX0KIAkJZWxzZQogI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJeworCQkJVUlOVDMyIERhdGE7CisKKwkJCS8vIFJlc2V0IERNQQorCQkJUlRNUF9JT19SRUFEMzIocEFkLCBQQkZfU1lTX0NUUkwsICZEYXRhKTsKKwkJCURhdGEgfD0gMHgyOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCBEYXRhKTsKKworCQkJLy8gQWZ0ZXIgUmVzZXQgRE1BLCBETUEgaW5kZXggd2lsbCBiZWNvbWUgWmVyby4gU28gRHJpdmVyIG5lZWQgdG8gcmVzZXQgYWxsIHJpbmcgaW5kZXhzIHRvby4KKwkJCS8vIFJlc2V0IERNQS9DUFUgcmluZyBpbmRleAorCQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JLKTsKKwkJCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CRSk7CisJCQlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfVkkpOworCQkJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZPKTsKKwkJCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9IQ0NBKTsKKwkJCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9NR01UKTsKKwkJCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9SWCk7CisKKwkJCS8vIENsZWFyIFJlc2V0CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFBCRl9TWVNfQ1RSTCwgJkRhdGEpOworCQkJRGF0YSAmPSAweGZmZmZmZmZkOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCBEYXRhKTsKIAkJREJHUFJJTlRfRVJSKCgiSDJNX01BSUxCT1ggc3RpbGwgaG9sZCBieSBNQ1UuIGNvbW1hbmQgZmFpbFxuIikpOwogCQl9Ci0JCXJldHVybiBGQUxTRTsKKwkJLy9yZXR1cm4gRkFMU0U7CiAJfQogCi0jaWZkZWYgUlQyODYwCiAjaWZkZWYgUkFMSU5LX0FURQogCWVsc2UgaWYgKHBBZC0+YXRlLmJGV0xvYWRpbmcgPT0gVFJVRSkKIAl7CkBAIC03NjAwLDcgKzc2NzMsNiBAQAogCQlqID0gMDsKIAl9CiAjZW5kaWYgLy8gUkFMSU5LX0FURSAvLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJSDJNTWFpbGJveC5maWVsZC5Pd25lcgkgID0gMTsJICAgLy8gcGFzcyBvd25lcnNoaXAgdG8gTUNVCiAJSDJNTWFpbGJveC5maWVsZC5DbWRUb2tlbiA9IFRva2VuOwpAQCAtNzYxOSw3ICs3NjkxLDYgQEAKIAlyZXR1cm4gVFJVRTsKIH0KIAotI2lmZGVmIFJUMjg2MAogQk9PTEVBTiBBc2ljQ2hlY2tDb21tYW5PaygKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCwKIAlJTiBVQ0hBUgkJIENvbW1hbmQpCkBAIC03Njg0LDcgKzc3NTUsNiBAQAogCiAJcmV0dXJuIEZBTFNFOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAvKgogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtODA5NiwxMCArODE2Niw4IEBACiAJfQogCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIEJCUFIzKTsKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKLSNpZmRlZiBSVDI4NjAKIAlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQogICAgIAlwQWQtPlN0YUNmZy5CQlBSMyA9IEJCUFIzOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkKIAkJKQpAQCAtODIxMSw5ICs4Mjc5LDcgQEAKIAkJCUJCUFIzIHw9ICgweDApOwogCQl9CiAJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIEJCUFIzKTsKLSNpZmRlZiBSVDI4NjAKLSAgICBwQWQtPlN0YUNmZy5CQlBSMyA9IEJCUFIzOwotI2VuZGlmIC8vIFJUMjg2MCAvLworCQlwQWQtPlN0YUNmZy5CQlBSMyA9IEJCUFIzOwogCX0KIAogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwpAQCAtODQzOSwxMCArODUwNSw3IEBACiAJCSYmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkKIAkJCSkKIAkJJiYgIShPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQotI2lmZGVmIFJUMjg2MAotCQkmJiAocEFkLT5iUENJY2xrT2ZmID09IEZBTFNFKQotI2VuZGlmIC8vIFJUMjg2MCAvLwotCQkpCisJCSYmIChwQWQtPmJQQ0ljbGtPZmYgPT0gRkFMU0UpKQogCXsKIAkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgJk9yaWdSNjZWYWx1ZSk7CiAJCVI2NiA9IE9yaWdSNjZWYWx1ZTsKQEAgLTg1MTgsNiArODU4MSwxMDYgQEAKIAogCX0KIH0KKworVk9JRCBBc2ljUmVzZXRGcm9tRE1BQnVzeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVSU5UMzIJCURhdGE7CisJQk9PTEVBTgkJYkN0cmwgPSBGQUxTRTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT4gIEFzaWNSZXNldEZyb21ETUFCdXN5ICAhISEhISEhISEhISEhISEhISEhISEhISBcbiIpKTsKKworCS8vIEJlIHN1cmUgcmVzdG9yZSBsaW5rIGNvbnRyb2wgdmFsdWUgc28gd2UgY2FuIHdyaXRlIHJlZ2lzdGVyLgorCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKKwlpZiAoUlRNUF9URVNUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX1NFVF9QQ0lfQ0xLX09GRl9DT01NQU5EKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQXNpY1Jlc2V0RnJvbURNQUJ1c3k9PT5cbiIpKTsKKwkJUlRNUFBDSWVMaW5rQ3RybFZhbHVlUmVzdG9yZShwQWQsIFJFU1RPUkVfSEFMVCk7CisJCVJUTVB1c2VjRGVsYXkoNjAwMCk7CisJCXBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOworCQliQ3RybCA9IFRSVUU7CisJfQorCS8vIFJlc2V0IERNQQorCVJUTVBfSU9fUkVBRDMyKHBBZCwgUEJGX1NZU19DVFJMLCAmRGF0YSk7CisJRGF0YSB8PSAweDI7CisJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCBEYXRhKTsKKworCS8vIEFmdGVyIFJlc2V0IERNQSwgRE1BIGluZGV4IHdpbGwgYmVjb21lIFplcm8uIFNvIERyaXZlciBuZWVkIHRvIHJlc2V0IGFsbCByaW5nIGluZGV4cyB0b28uCisJLy8gUmVzZXQgRE1BL0NQVSByaW5nIGluZGV4CisJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX0JLKTsKKwlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfQkUpOworCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19WSSk7CisJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZPKTsKKwlSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfSENDQSk7CisJUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX01HTVQpOworCVJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9SWCk7CisKKwkvLyBDbGVhciBSZXNldAorCVJUTVBfSU9fUkVBRDMyKHBBZCwgUEJGX1NZU19DVFJMLCAmRGF0YSk7CisJRGF0YSAmPSAweGZmZmZmZmZkOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgRGF0YSk7CisKKwkvLyBJZiBpbiBSYWRpbyBvZmYsIHNob3VsZCBjYWxsIFJUTVBQQ0llUG93ZXJMaW5rQ3RybCBhZ2Fpbi4KKwlpZiAoKGJDdHJsID09IFRSVUUpICYmIChwQWQtPlN0YUNmZy5iUmFkaW8gPT0gRkFMU0UpKQorCQlSVE1QUENJZUxpbmtDdHJsU2V0dGluZyhwQWQsIDMpOworCisJUlRNUF9TRVRfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKKwlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QgfCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS0gIEFzaWNSZXNldEZyb21ETUFCdXN5ICEhISEhISEhISEhISEhISEhISEhISEhICBcbiIpKTsKK30KKworVk9JRCBBc2ljUmVzZXRCQlAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPiAgQXNpYyBIYXJkUmVzZXQgQkJQICAhISEhISEhISEhISEhISEhISEhISEhISBcbiIpKTsKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgwKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4Mik7CisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweGMpOworCisJLy8gQWZ0ZXIgaGFyZC1yZXNldCBCQlAsIGluaXRpYWxpemUgYWxsIEJCUCB2YWx1ZXMuCisJTklDUmVzdG9yZUJCUFZhbHVlKHBBZCk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLSAgQXNpYyBIYXJkUmVzZXQgQkJQICEhISEhISEhISEhISEhISEhISEhISEhICBcbiIpKTsKK30KKworVk9JRCBBc2ljUmVzZXRNQUMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUxPTkcJCURhdGE7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+ICBBc2ljUmVzZXRNQUMgICAhISEhIFxuIikpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgUEJGX1NZU19DVFJMLCAmRGF0YSk7CisJRGF0YSB8PSAweDQ7CisJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCBEYXRhKTsKKwlEYXRhICY9IDB4ZmZmZmZmZmI7CisJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCBEYXRhKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS0gIEFzaWNSZXNldE1BQyAgICEhISEgXG4iKSk7Cit9CisKK1ZPSUQgQXNpY1Jlc2V0UEJGKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVMT05HCQlWYWx1ZTEsIFZhbHVlMjsKKwlVTE9ORwkJRGF0YTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhSWFFfUENOVCwgJlZhbHVlMSk7CisJUlRNUF9JT19SRUFEMzIocEFkLCBQQkZfREJHLCAmVmFsdWUyKTsKKworCVZhbHVlMiAmPSAweGZmOworCS8vIHN1bSBzaG91bGQgYmUgZXF1YWxzIHRvIDB4ZmYsIHdoaWNoIGlzIHRoZSB0b3RhbCBidWZmZXIgc2l6ZS4KKwlpZiAoKFZhbHVlMSArIFZhbHVlMikgPCAweGZmKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPiAgQXNpYyBIYXJkUmVzZXQgUEJGICEhISEgXG4iKSk7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgUEJGX1NZU19DVFJMLCAmRGF0YSk7CisJCURhdGEgfD0gMHg4OworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIERhdGEpOworCQlEYXRhICY9IDB4ZmZmZmZmZjc7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgRGF0YSk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLSAgQXNpYyBIYXJkUmVzZXQgUEJGICEhISEgXG4iKSk7CisJfQorfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCiBWT0lEIFJUTVBTZXRBR0NJbml0VmFsdWUoCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfaW5pdC5jCmluZGV4IDU2M2YyYzUuLjhhMDBjZWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX2luaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX2luaXQuYwpAQCAtMTQ5LDkgKzE0OSw3IEBACiAJe0dGMjBfUFJPVF9DRkcsCQkJMHgwMTc0NDAwNH0sICAgIC8vIHNldCAxOToxOCAtLT4gU2hvcnQgTkFWIGZvciBNSU1PIFBTCiAJe0dGNDBfUFJPVF9DRkcsCQkJMHgwM0Y0NDA4NH0sCiAJe01NMjBfUFJPVF9DRkcsCQkJMHgwMTc0NDAwNH0sCi0jaWZkZWYgUlQyODYwCiAJe01NNDBfUFJPVF9DRkcsCQkJMHgwM0Y1NDA4NH0sCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAJe1RYT1BfQ1RSTF9DRkcsCQkJMHgwMDAwNTgzZiwgLyoweDAwMDAyNDNmKi8gLyoweDAwMDAyNGJmKi99LAkvL0V4dGVuc2lvbiBjaGFubmVsIGJhY2tvZmYuCiAJe1RYX1JUU19DRkcsCQkJMHgwMDA5MmIyMH0sCiAJe0VYUF9BQ0tfVElNRSwJCQkweDAwMjQwMGNhfSwJLy8gZGVmYXVsdCB2YWx1ZQpAQCAtMTg4LDkgKzE4Niw3IEBACiAjZGVmaW5lIEZJUk1XQVJFSU1BR0VWMV9MRU5HVEgJMHgxMDAwCiAjZGVmaW5lIEZJUk1XQVJFSU1BR0VWMl9MRU5HVEgJMHgxMDAwCiAKLSNpZmRlZiBSVDI4NjAKICNkZWZpbmUgRklSTVdBUkVfTUlOT1JfVkVSU0lPTgkyCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogLyoKQEAgLTI0OCw5ICsyNDQsNyBAQAogCiAJCS8vIEluaXQgc3BpbiBsb2NrcwogCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NZ210UmluZ0xvY2spOwotI2lmZGVmIFJUMjg2MAogCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5SeFJpbmdMb2NrKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCQlmb3IgKGluZGV4ID0wIDsgaW5kZXggPCBOVU1fT0ZfVFhfUklORzsgaW5kZXgrKykKIAkJewpAQCAtMTU1NSwxMCArMTU0OSw3IEBACiAJCXBBZC0+TGVkQ250bC53b3JkID0gMHgwMTsKIAkJcEFkLT5MZWQxID0gMHg1NTU1OwogCQlwQWQtPkxlZDIgPSAweDIyMjE7Ci0KLSNpZmRlZiBSVDI4NjAKIAkJcEFkLT5MZWQzID0gMHhBOUY4OwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCX0KIAogCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MiwgMHhmZiwgKFVDSEFSKXBBZC0+TGVkMSwgKFVDSEFSKShwQWQtPkxlZDEgPj4gOCkpOwpAQCAtMTU5NCwxMiArMTU4NSwxMCBAQAogCQllbHNlCiAJCXsKIAkJCVJUTVBTZXRMRUQocEFkLCBMRURfUkFESU9fT04pOwotI2lmZGVmIFJUMjg2MAogCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMwLCAweGZmLCAweGZmLCAweDAyKTsKIAkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHgzMSwgUG93ZXJXYWtlQ0lELCAweDAwLCAweDAwKTsKIAkJCS8vIDItMS4gd2FpdCBjb21tYW5kIG9rLgogCQkJQXNpY0NoZWNrQ29tbWFuT2socEFkLCBQb3dlcldha2VDSUQpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQl9CiAJfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwpAQCAtMTY3NywxMCArMTY2Niw4IEBACiB7CiAJTkRJU19TVEFUVVMgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CiAJV1BETUFfR0xPX0NGR19TVFJVQwlHbG9DZmc7Ci0jaWZkZWYgUlQyODYwCiAJVUlOVDMyCQkJVmFsdWU7CiAJREVMQVlfSU5UX0NGR19TVFJVQwlJbnRDZmc7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJVUxPTkcJaSA9MCwgaj0wOwogCUFDX1RYT1BfQ1NSMF9TVFJVQwljc3IwOwogCkBAIC0xNzE5LDExICsxNzA2LDkgQEAKIAogCS8vIGFzaWMgc2ltdWxhdGlvbiBzZXF1ZW5jZSBwdXQgdGhpcyBhaGVhZCBiZWZvcmUgbG9hZGluZyBmaXJtd2FyZS4KIAkvLyBwYmYgaGFyZHdhcmUgcmVzZXQKLSNpZmRlZiBSVDI4NjAKIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBXUERNQV9SU1RfSURYLCAweDEwMDNmKTsJLy8gMHgxMDAwMCBmb3IgcmVzZXQgcngsIDB4M2YgcmVzZXRzIGFsbCA2IHR4IHJpbmdzLgogCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHhlMWYpOwogCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9TWVNfQ1RSTCwgMHhlMDApOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJLy8gSW5pdGlhbHplIEFTSUMgZm9yIFRYICYgUnggb3BlcmF0aW9uCiAJaWYgKE5JQ0luaXRpYWxpemVBc2ljKHBBZCAsIGJIYXJkUmVzZXQpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCkBAIC0xNzM3LDcgKzE3MjIsNiBAQAogCX0KIAogCi0jaWZkZWYgUlQyODYwCiAJLy8gV3JpdGUgQUNfQksgYmFzZSBhZGRyZXNzIHJlZ2lzdGVyCiAJVmFsdWUgPSBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0xvdyhwQWQtPlR4UmluZ1tRSURfQUNfQktdLkNlbGxbMF0uQWxsb2NQYSk7CiAJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFTRV9QVFIxLCBWYWx1ZSk7CkBAIC0xODEwLDcgKzE3OTQsNiBAQAogCS8vIFdyaXRlIFJYX1JJTkdfQ1NSIHJlZ2lzdGVyCiAJVmFsdWUgPSBSWF9SSU5HX1NJWkU7CiAJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfTUFYX0NOVCwgVmFsdWUpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIAkvLyBXTU0gcGFyYW1ldGVyCkBAIC0xODI5LDcgKzE4MTIsNiBAQAogCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdNTV9UWE9QMV9DRkcsIGNzcjAud29yZCk7CiAKIAotI2lmZGVmIFJUMjg2MAogCS8vIDMuIFNldCBETUEgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gZXhjZXB0IFRYX0RNQV9FTiBhbmQgUlhfRE1BX0VOIGJpdHM6CiAJaSA9IDA7CiAJZG8KQEAgLTE4NDgsNyArMTgzMCw2IEBACiAKIAlJbnRDZmcud29yZCA9IDA7CiAJUlRNUF9JT19XUklURTMyKHBBZCwgREVMQVlfSU5UX0NGRywgSW50Q2ZnLndvcmQpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIAkvLyByZXNldCBhY3Rpb24KQEAgLTE4ODksNyArMTg3MCw2IEBACiAKIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gTklDSW5pdGlhbGl6ZUFzaWNcbiIpKTsKIAotI2lmZGVmIFJUMjg2MAogCWlmIChiSGFyZFJlc2V0ID09IFRSVUUpCiAJewogCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4Myk7CkBAIC0xOTE0LDcgKzE4OTQsNiBAQAogCQl9CiAJfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIAkvLwpAQCAtMjA0MSw2ICsyMDIwLDEzMSBAQAogCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOwogfQogCisKK1ZPSUQgTklDUmVzdG9yZUJCUFZhbHVlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVDSEFSCQlpbmRleDsKKwlVQ0hBUgkJVmFsdWUgPSAwOworCVVMT05HCQlEYXRhOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPiAgTklDUmVzdG9yZUJCUFZhbHVlICEhISEhISEhISEhISEhISEhISEhISEhICBcbiIpKTsKKwkvLyBJbml0aWFsaXplIEJCUCByZWdpc3RlciB0byBkZWZhdWx0IHZhbHVlIChydG1wX2luaXQuYykKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fQkJQX1JFR19QQVJNUzsgaW5kZXgrKykKKwl7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBSZWdUYWJsZVtpbmRleF0uUmVnaXN0ZXIsIEJCUFJlZ1RhYmxlW2luZGV4XS5WYWx1ZSk7CisJfQorCS8vIGNvcHkgZnJvbSAocnRtcF9pbml0LmMpCisJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQorCXsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MTYpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxMik7CisJfQorCisJLy8gY29weSBmcm9tIChjb25uZWN0LmMgTGlua1VwIGZ1bmN0aW9uKQorCWlmIChJTkZSQV9PTihwQWQpKQorCXsKKwkJLy8gQ2hhbmdlIHRvIEFQIGNoYW5uZWwKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA+IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpICYmIChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKQorCQl7CisJCQkvLyBNdXN0IHVzaW5nIDQwTUh6LgorCQkJcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfNDA7CisJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLCBGQUxTRSk7CisJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJlZhbHVlKTsKKwkJCVZhbHVlICY9ICh+MHgxOCk7CisJCQlWYWx1ZSB8PSAweDEwOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgVmFsdWUpOworCisJCQkvLyAgUlggOiBjb250cm9sIGNoYW5uZWwgYXQgbG93ZXIKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKKwkJCVZhbHVlICY9ICh+MHgyMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBWYWx1ZSk7CisJCQkvLyBSZWNvcmQgQkJQUjMgc2V0dGluZywgQnV0IGRvbid0IGtlZXAgUiBBbnRlbm5hICMgaW5mb3JtYXRpb24uCisJCQlwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOworCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmRGF0YSk7CisJCQlEYXRhICY9IDB4ZmZmZmZmZmU7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgRGF0YSk7CisKKwkJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKKwkJCXsKKwkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgMHgxQSk7CisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsIDB4MEEpOworCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjczLCAweDE2KTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISFydDI4NjBDICEhISBcbiIgKSk7CisJCQl9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhITQwTUh6IExvd2VyIExJTksgVVAgISEhIENvbnRyb2wgQ2hhbm5lbCBhdCBCZWxvdy4gQ2VudHJhbCA9ICVkIFxuIiwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgKSk7CisJCX0KKwkJZWxzZSBpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsIDwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkgJiYgKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV180MCkpCisJCXsKKwkJCS8vIE11c3QgdXNpbmcgNDBNSHouCisJCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKKwkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKTsKKworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmVmFsdWUpOworCQkJVmFsdWUgJj0gKH4weDE4KTsKKwkJCVZhbHVlIHw9IDB4MTA7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBWYWx1ZSk7CisKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZEYXRhKTsKKwkJCURhdGEgfD0gMHgxOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIERhdGEpOworCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7CisJCQlWYWx1ZSB8PSAoMHgyMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBWYWx1ZSk7CisJCQkvLyBSZWNvcmQgQkJQUjMgc2V0dGluZywgQnV0IGRvbid0IGtlZXAgUiBBbnRlbm5hICMgaW5mb3JtYXRpb24uCisJCQlwQWQtPlN0YUNmZy5CQlBSMyA9IFZhbHVlOworCisJCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCisJCQl7CisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MUEpOworCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCAweDBBKTsKKwkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxNik7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhcnQyODYwQyAhISEgXG4iICkpOworCQkJfQorCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISE0ME1IeiBVcHBlciBMSU5LIFVQICEhISBDb250cm9sIENoYW5uZWwgYXQgVXBwZXJDZW50cmFsID0gJWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCApKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzIwOworCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmVmFsdWUpOworCQkJVmFsdWUgJj0gKH4weDE4KTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIFZhbHVlKTsKKworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJkRhdGEpOworCQkJRGF0YSAmPSAweGZmZmZmZmZlOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIERhdGEpOworCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7CisJCQlWYWx1ZSAmPSAofjB4MjApOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgVmFsdWUpOworCQkJLy8gUmVjb3JkIEJCUFIzIHNldHRpbmcsIEJ1dCBkb24ndCBrZWVwIFIgQW50ZW5uYSAjIGluZm9ybWF0aW9uLgorCQkJcEFkLT5TdGFDZmcuQkJQUjMgPSBWYWx1ZTsKKworCQkJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQorCQkJeworCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY5LCAweDE2KTsKKwkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MCwgMHgwOCk7CisJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzMsIDB4MTEpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhIXJ0Mjg2MEMgISEhIFxuIiApKTsKKwkJCX0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhMjBNSHogTElOSyBVUCAhISEgXG4iICkpOworCQl9CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLSAgTklDUmVzdG9yZUJCUFZhbHVlICEhISEhISEhISEhISEhISEhISEhISEhICBcbiIpKTsKK30KKwogLyoKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMzAyOCwxMSArMzEzMiwxMCBAQAogCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzIwOwogCiAJcEFkLT5MZWRDbnRsLndvcmQgPSAwOwotI2lmZGVmIFJUMjg2MAogCXBBZC0+TGVkSW5kaWNhdG9yU3RyZWd0aCA9IDA7CiAJcEFkLT5STG5rQ3RybE9mZnNldCA9IDA7CiAJcEFkLT5Ib3N0TG5rQ3RybE9mZnNldCA9IDA7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCisJcEFkLT5DaGVja0RtYUJ1c3lDb3VudCA9IDA7CiAKIAlwQWQtPmJBdXRvVHhBZ2NBID0gRkFMU0U7CQkJLy8gRGVmYXVsdCBpcyBPRkYKIAlwQWQtPmJBdXRvVHhBZ2NHID0gRkFMU0U7CQkJLy8gRGVmYXVsdCBpcyBPRkYKQEAgLTMyOTIsOSArMzM5NSw3IEBACiAJcEFkLT5hdGUuYlJ4RmVyID0gMDsKIAlwQWQtPmF0ZS5iUUFUeFN0YXJ0ID0gRkFMU0U7CiAJcEFkLT5hdGUuYlFBUnhTdGFydCA9IEZBTFNFOwotI2lmZGVmIFJUMjg2MAogCXBBZC0+YXRlLmJGV0xvYWRpbmcgPSBGQUxTRTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KICNpZmRlZiBSQUxJTktfMjh4eF9RQQogCS8vcEFkLT5hdGUuUmVwZWF0ID0gMDsKIAlwQWQtPmF0ZS5UeFN0YXR1cyA9IDA7CkBAIC0zMzA0LDExICszNDA1LDkgQEAKIAogCiAJcEFkLT5Db21tb25DZmcuYldpRmlUZXN0ID0gRkFMU0U7Ci0jaWZkZWYgUlQyODYwCi0gICAgcEFkLT5iUENJY2xrT2ZmID0gRkFMU0U7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCisJcEFkLT5iUENJY2xrT2ZmID0gRkFMU0U7CiAKLQorCVJUTVBfU0VUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0NBTl9HT19TTEVFUCk7CiAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tIFVzZXJDZmdJbml0XG4iKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3NwZWN0cnVtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9zcGVjdHJ1bS5jCmluZGV4IDAyNjVhNmQuLmIzNjUwZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3NwZWN0cnVtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vc3BlY3RydW0uYwpAQCAtMTU5Niw3ICsxNTk2LDcgQEAKIAogCWlmICgocE1lYXN1cmVSZXBvcnRJbmZvID0ga21hbGxvYyhzaXplb2YoTUVBU1VSRV9SUElfUkVQT1JUKSwgR0ZQX0FUT01JQykpID09IE5VTEwpCiAJewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyB1bmFibGUgdG8gYWxsb2MgbWVtb3J5IGZvciBtZWFzdXJlIHJlcG9ydCBidWZmZXIgKHNpemU9JWQpLlxuIiwgX19mdW5jX18sIHNpemVvZihNRUFTVVJFX1JQSV9SRVBPUlQpKSk7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIHVuYWJsZSB0byBhbGxvYyBtZW1vcnkgZm9yIG1lYXN1cmUgcmVwb3J0IGJ1ZmZlciAoc2l6ZT0lenUpLlxuIiwgX19mdW5jX18sIHNpemVvZihNRUFTVVJFX1JQSV9SRVBPUlQpKSk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29uZmlnLm1rIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb25maWcubWsKaW5kZXggZjU3ZDdiYi4uMjViZDU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb25maWcubWsKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb25maWcubWsKQEAgLTEwOCwxMCArMTA4LDYgQEAKIFdGTEFHUyArPSAtREVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKIGVuZGlmCiAKLWlmZXEgKCQoQ0hJUFNFVCksMjg2MCkKLVdGTEFHUyArPS1EUlQyODYwCi1lbmRpZgotCiBpZmVxICgkKENISVBTRVQpLDI4NzApCiBXRkxBR1MgKz0tRFJUMjg3MAogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvb2lkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL29pZC5oCmluZGV4IGYyZjkxYjYuLjVlNmVkOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvb2lkLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9vaWQuaApAQCAtNTQ0LDYgKzU0NCw4IEBACiAgICAgTmRpczgwMl8xMUVuY3J5cHRpb24zS2V5QWJzZW50LAogICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uNEVuYWJsZWQsCS8vIFRLSVAgb3IgQUVTIG1peAogICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uNEtleUFic2VudCwKKyAgICBOZGlzODAyXzExR3JvdXBXRVA0MEVuYWJsZWQsCisJTmRpczgwMl8xMUdyb3VwV0VQMTA0RW5hYmxlZCwKIH0gTkRJU184MDJfMTFfV0VQX1NUQVRVUywgKlBORElTXzgwMl8xMV9XRVBfU1RBVFVTLAogICBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUywgKlBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydDI4NjAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnQyODYwLmgKaW5kZXggMDE3MjAxOS4uNGZiZWM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydDI4NjAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0Mjg2MC5oCkBAIC00NiwxOCArNDYsMTAgQEAKIAlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOwogCiAvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAjZGVmaW5lIElSUV9IQU5ETEVfVFlQRSAgaXJxcmV0dXJuX3QKLSNlbHNlCi0jZGVmaW5lIElSUV9IQU5ETEVfVFlQRSAgdm9pZAotI2VuZGlmCiAKIElSUV9IQU5ETEVfVFlQRQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDE5KSkKIHJ0Mjg2MF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKLSNlbHNlCi1ydDI4NjBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2VuZGlmCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tIEZyaW13YXJlIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgUlQyOFhYX1dSSVRFX0ZJUk1XQVJFKF9wQWQsIF9wRndJbWFnZSwgX0Z3TGVuKQkJCQlcCkBAIC0yMzcsOSArMjI5LDcgQEAKICNkZWZpbmUgUlRNUF9NU0lfRElTQUJMRShfcEFkKQogI2VuZGlmIC8vIFBDSV9NU0lfU1VQUE9SVCAvLwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkKICNkZWZpbmUgU0FfU0hJUlEgSVJRRl9TSEFSRUQKLSNlbmRpZgogCiAjZGVmaW5lIFJUMjhYWF9JUlFfUkVRVUVTVChuZXRfZGV2KQkJCQkJCQlcCiB7CVBSVE1QX0FEQVBURVIgX3BBZCA9IChQUlRNUF9BREFQVEVSKSgobmV0X2RldiktPm1sX3ByaXYpOwlcCkBAIC0yNTEsMjAgKzI0MSwxMiBAQAogCQlwcmludGsoIlJUMjg2MDogcmVxdWVzdF9pcnEgIEVSUk9SKCVkKVxuIiwgcmV0dmFsKTsJXAogCXJldHVybiByZXR2YWw7IH0gfQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogI2RlZmluZSBSVDI4WFhfSVJRX1JFTEVBU0UobmV0X2RldikJCQkJCQkJCVwKIHsJUFJUTVBfQURBUFRFUiBfcEFkID0gKFBSVE1QX0FEQVBURVIpKChuZXRfZGV2KS0+bWxfcHJpdik7CQlcCiAJUE9TX0NPT0tJRSBfcE9iaiA9IChQT1NfQ09PS0lFKShfcEFkLT5PU19Db29raWUpOwkJCVwKIAlzeW5jaHJvbml6ZV9pcnEoX3BPYmotPnBjaV9kZXYtPmlycSk7CQkJCQkJXAogCWZyZWVfaXJxKF9wT2JqLT5wY2lfZGV2LT5pcnEsIChuZXRfZGV2KSk7CQkJCQlcCiAJUlRNUF9NU0lfRElTQUJMRShfcEFkKTsgfQotI2Vsc2UKLSNkZWZpbmUgUlQyOFhYX0lSUV9SRUxFQVNFKG5ldF9kZXYpCQkJCQkJCQlcCi17CVBSVE1QX0FEQVBURVIgX3BBZCA9IChQUlRNUF9BREFQVEVSKSgobmV0X2RldiktPnByaXYpOwkJXAotCVBPU19DT09LSUUgX3BPYmogPSAoUE9TX0NPT0tJRSkoX3BBZC0+T1NfQ29va2llKTsJCQlcCi0JZnJlZV9pcnEoX3BPYmotPnBjaV9kZXYtPmlycSwgKG5ldF9kZXYpKTsJCQkJCVwKLQlSVE1QX01TSV9ESVNBQkxFKF9wQWQpOyB9Ci0jZW5kaWYKIAogI2RlZmluZSBSVDI4WFhfSVJRX0lOSVQocEFkKQkJCQkJCQkJCQlcCiAJewlwQWQtPmludF9lbmFibGVfcmVnID0gKChERUxBWUlOVE1BU0spIHwJCQkJCQlcCkBAIC0zMzMsOCArMzE1LDggQEAKICAgICByZWcxNiA9IGNwdTJsZTE2KENvbmZpZ3VyYXRpb24pOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpX2Rldiwgb2Zmc2V0LCByZWcxNik7ICAgICAgICAgIFwKIAotI2RlZmluZSBSVDI4WFhfU1RBX0ZPUkNFX1dBS0VVUChwQWQsIGJGcm9tVHgpIFwKLSAgICBSVDI4eHhQY2lTdGFBc2ljRm9yY2VXYWtldXAocEFkLCBiRnJvbVR4KTsKKyNkZWZpbmUgUlQyOFhYX1NUQV9GT1JDRV9XQUtFVVAocEFkLCBMZXZlbCkgXAorICAgIFJUMjh4eFBjaVN0YUFzaWNGb3JjZVdha2V1cChwQWQsIExldmVsKTsKIAogI2RlZmluZSBSVDI4WFhfU1RBX1NMRUVQX1RIRU5fQVVUT19XQUtFVVAocEFkLCBUYnR0TnVtVG9OZXh0V2FrZVVwKSBcCiAgICAgUlQyOHh4UGNpU3RhQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAocEFkLCBUYnR0TnVtVG9OZXh0V2FrZVVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnQyOHh4LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0Mjh4eC5oCmluZGV4IGZmMjMwNDMuLmU1ZTZmMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnQyOHh4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydDI4eHguaApAQCAtMTY3MCwxMSArMTY3MCw5IEBACiAjZGVmaW5lIEUyUFJPTV9DU1IgICAgICAgICAgMHgwMDA0CiAjZGVmaW5lIElPX0NOVExfQ1NSICAgICAgICAgMHg3N2QwCiAKLSNpZmRlZiBSVDI4NjAKIC8vIDgwNTEgZmlybXdhcmUgaW1hZ2UgZm9yIFJUMjg2MCAtIGJhc2UgYWRkcmVzcyA9IDB4NDAwMAogI2RlZmluZSBGSVJNV0FSRV9JTUFHRV9CQVNFICAgICAweDIwMDAKICNkZWZpbmUgTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUgMHgyMDAwICAgIC8vIDhrYnl0ZQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIwMjksNyArMjAyNyw2IEBACiAvLwogLy8gUnggZGVzY3JpcHRvciBmb3JtYXQsIFJ4CVJpbmcKIC8vCi0jaWZkZWYgUlQyODYwCiAjaWZkZWYgUlRfQklHX0VORElBTgogdHlwZWRlZglzdHJ1Y3QJUEFDS0VEIF9SWERfU1RSVUMJewogCS8vIFdvcmQgMApAQCAtMjA5OCw3ICsyMDk1LDYgQEAKIAlVSU5UMzIJCVJzdjE6MTM7CiB9CVJYRF9TVFJVQywgKlBSWERfU1RSVUMsIFJUMjhYWF9SWERfU1RSVUMsICpQUlQyOFhYX1JYRF9TVFJVQzsKICNlbmRpZgotI2VuZGlmIC8vIFJUMjg2MCAvLwogLy8KIC8vIFJYV0kgd2lyZWxlc3MgaW5mb3JtYXRpb24gZm9ybWF0LCBpbiBQQkYuIGludmlzaWJsZSBpbiBkcml2ZXIuCiAvLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9hdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfYXRlLmMKaW5kZXggZjMzMTZlYy4uMWVkNzNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9hdGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2F0ZS5jCkBAIC02OCw3ICs2OCw2IEBACiAJSU4gVUNIQVIgTW9kZSwKIAlJTiBVQ0hBUiBNY3MpOwogCi0jaWZkZWYgUlQyODYwCiBzdGF0aWMgVk9JRCBBVEVXcml0ZVR4V0koCiAJSU4JUFJUTVBfQURBUFRFUglwQWQsCiAJSU4JUFRYV0lfU1RSVUMgCXBPdXRUeFdJLApAQCAtODcsNyArODYsNiBAQAogCUlOCVVDSEFSCQkJVHhvcG1vZGUsCiAJSU4JQk9PTEVBTgkJCUNmQWNrLAogCUlOCUhUVFJBTlNNSVRfU0VUVElORwkqcFRyYW5zbWl0KTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiBzdGF0aWMgVk9JRCBTZXRKYXBhbkZpbHRlcigKQEAgLTk1LDcgKzkzLDYgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09ZW5kIG9mIHByb3RvdHlwZT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi0jaWZkZWYgUlQyODYwCiBzdGF0aWMgSU5UIFR4RG1hQnVzeSgKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCkKIHsKQEAgLTE1Myw3ICsxNTAsNiBAQAogCiAJcmV0dXJuOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIHN0YXRpYyBWT0lEIEJicFNvZnRSZXNldCgKQEAgLTQ4OCw3ICs0ODQsNiBAQAogICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCiAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi0jaWZkZWYgUlQyODYwCiBzdGF0aWMgSU5UCUFURUNtZEhhbmRsZXIoCiAJSU4JUFJUTVBfQURBUFRFUglwQWQsCiAJSU4JUFVDSEFSCQkJYXJnKQpAQCAtMTI5Nyw3ICsxMjkyLDYgQEAKIAogCXJldHVybiBUUlVFOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT1FbmQgb2YgUlQyODYwPT09PT09PT09PT09PT09PT09PT09PT0qLwpAQCAtMjkwNyw3ICsyOTAxLDYgQEAKIAkJTm9uZQogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKi8KLSNpZmRlZiBSVDI4NjAKIHN0YXRpYyBWT0lEIEFURVdyaXRlVHhXSSgKIAlJTglQUlRNUF9BREFQVEVSCXBBZCwKIAlJTglQVFhXSV9TVFJVQyAJcE91dFR4V0ksCkBAIC0yOTcyLDcgKzI5NjUsNiBAQAogCiAgICAgICAgIHJldHVybjsKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogLyoKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTMyNDksMTMgKzMyNDEsMTEgQEAKICAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCkKIHsKICAgICBBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gUlRNUFN0YXRpb25TdGFydFxuIikpOwotI2lmZGVmIFJUMjg2MAotCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CitlcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKIAkvLwogCS8vIFdlIGRpZCBub3QgY2FuY2VsIHRoaXMgdGltZXIgd2hlbiBlbnRlcmluZyBBVEUgbW9kZS4KIAkvLwogLy8JUlRNUFNldFRpbWVyKCZwQWQtPk1sbWUuUGVyaW9kaWNUaW1lciwgTUxNRV9UQVNLX0VYRUNfSU5UVik7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IFJUTVBTdGF0aW9uU3RhcnRcbiIpKTsKIH0KICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KQEAgLTMyNjgsNyArMzI1OCw2IEBACiAJCVRoaXMgcm91dGluZSBzaG91bGQgb25seSBiZSB1c2VkIGluIEFURSBtb2RlLgogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKi8KLSNpZmRlZiBSVDI4NjAKIHN0YXRpYyBJTlQgQVRFU2V0VXBGcmFtZSgKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCwKIAlJTiBVSU5UMzIgVHhJZHgpCkBAIC0zNDU1LDcgKzM0NDQsNiBAQAogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT1FbmQgb2YgUlQyODYwPT09PT09PT09PT09PT09PT09PT09PT0qLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIFZPSUQgcnRfZWVfcmVhZF9hbGwoUFJUTVBfQURBUFRFUiBwQWQsIFVTSE9SVCAqRGF0YSkKQEAgLTQ1NzgsOSArNDU2Niw3IEBACiAJCQkJCQl7CiAJCQkJCQkJaWYgKHBBZGFwdGVyLT5hdGUuVHhDb3VudCA9PSAwKQogCQkJCQkJCXsKLSNpZmRlZiBSVDI4NjAKIAkJCQkJCQkJcEFkYXB0ZXItPmF0ZS5UeENvdW50ID0gMHhGRkZGRkZGRjsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJCQkJCQl9CiAJCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTVEFSVCBUWEZSQU1FXG4iKSk7CiAJCQkJCQkJcEFkYXB0ZXItPmF0ZS5iUUFUeFN0YXJ0ID0gVFJVRTsKQEAgLTUzNzUsNyArNTM2MSw2IEBACiAKIAkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOwogCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOwotI2lmZGVmIFJUMjg2MAogCQkJCS8qIFRYX0ZSQU1FX0NPVU5UID09IDAgbWVhbnMgdHggaW5maW5pdGVseSAqLwogCQkJCWlmICh2YWx1ZSA9PSAwKQogCQkJCXsKQEAgLTUzODcsNyArNTM3Miw2IEBACiAKIAkJCQl9CiAJCQkJZWxzZQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCXsKIAkJCQkJc3ByaW50ZigoUENIQVIpc3RyLCAiJWQiLCB2YWx1ZSk7CiAJCQkJCVNldF9BVEVfVFhfQ09VTlRfUHJvYyhwQWRhcHRlciwgc3RyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfYXRlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2F0ZS5oCmluZGV4IDQ4YWE3MGQuLjM4ZjVjNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfYXRlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9hdGUuaApAQCAtMzEsMTIgKzMxLDEwIEBACiAjaWZuZGVmIFVDT1MKICNkZWZpbmUgYXRlX3ByaW50IHByaW50awogI2RlZmluZSBBVEVEQkdQUklOVCBEQkdQUklOVAotI2lmZGVmIFJUMjg2MAogI2RlZmluZSBFRVBST01fU0laRQkJCQkJCQkJMHgyMDAKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKICNkZWZpbmUgRUVQUk9NX0JJTl9GSUxFX05BTUUgICIvZXRjL1dpcmVsZXNzL1JUMjg2MFNUQS9lMnAuYmluIgogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAjZWxzZSAvLyAhVUNPUyAvLwogI2RlZmluZSBmQVRFX0xPQURfRUVQUk9NCQkJCQkJMHgwQzQzCkBAIC02OSw3ICs2Nyw2IEBACiAjZGVmaW5lIEFURV9PTihfcCkgICAgICAgICAgICAgICgoKF9wKS0+YXRlLk1vZGUpICE9IEFURV9TVE9QKQogCiAvKiBSVDI4ODBfaU5JQyB3aWxsIGRlZmluZSAiUlQyODYwIi4gKi8KLSNpZmRlZiBSVDI4NjAKICNkZWZpbmUgQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBCQlBfQ1NSX0NGR19TVFJVQyAgQmJwQ3NyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTMxLDEwICsxMjgsOCBAQAogICAgICAgICBBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJCQlAgd3JpdGUgUiVkIGZhaWxcbiIsIF9JKSk7ICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogLyogUlQyODgwX2lOSUMgd2lsbCBkZWZpbmUgUlQyODYwLiAqLwotI2lmZGVmIFJUMjg2MAogI2RlZmluZSBFRVBST01fU0laRQkJCQkJCQkJMHgyMDAKIC8qIGlOSUMgaGFzIGl0cyBvd24gRUVQUk9NX0JJTl9GSUxFX05BTUUgKi8KICNpZm5kZWYgVUNPUwpAQCAtMTQyLDcgKzEzNyw2IEBACiAjZGVmaW5lIEVFUFJPTV9CSU5fRklMRV9OQU1FICAiL2V0Yy9XaXJlbGVzcy9SVDI4NjBTVEEvZTJwLmJpbiIKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KICNlbmRpZiAvLyAhVUNPUyAvLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9jb25maWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfY29uZmlnLmgKaW5kZXggN2VlN2E0MC4uYTY3MDI0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9jb25maWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2NvbmZpZy5oCkBAIC01Myw5ICs1Myw3IEBACiAjaW5jbHVkZSAgICAicnRtcF9kZWYuaCIKICNpbmNsdWRlICAgICJydDI4eHguaCIKIAotI2lmZGVmIFJUMjg2MAogI2luY2x1ZGUJInJ0Mjg2MC5oIgotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKICNpbmNsdWRlICAgICJvaWQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYwppbmRleCBmMTQ1MDA5Li5mM2MxMjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCkBAIC00OCwxMCArNDgsOCBAQAogI2VuZGlmCiBCVUlMRF9USU1FUl9GVU5DVElPTihTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKTsKIEJVSUxEX1RJTUVSX0ZVTkNUSU9OKFdwYURpc2Fzc29jQXBBbmRCbG9ja0Fzc29jKTsKLSNpZmRlZiBSVDI4NjAKIEJVSUxEX1RJTUVSX0ZVTkNUSU9OKFBzUG9sbFdha2VFeGVjKTsKIEJVSUxEX1RJTUVSX0ZVTkNUSU9OKFJhZGlvT25FeGVjKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KICNpZmRlZiBRT1NfRExTX1NVUFBPUlQKIEJVSUxEX1RJTUVSX0ZVTkNUSU9OKERsc1RpbWVvdXRBY3Rpb24pOwogI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLwpAQCAtMjkzLDkgKzI5MSw3IEBACiAKIAlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPk1nbXRSaW5nTG9jayk7CiAKLSNpZmRlZiBSVDI4NjAKIAlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPlJ4UmluZ0xvY2spOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJZm9yIChpbmRleCA9MCA7IGluZGV4IDwgTlVNX09GX1RYX1JJTkc7IGluZGV4KyspCiAJewpAQCAtODU0LDcgKzg1MCw3IEBACiAKICAgICBpZiAocFJ4QmxrLT5EYXRhU2l6ZSArIHNpemVvZih3bGFuX25nX3ByaXNtMl9oZWFkZXIpID4gUlhfQlVGRkVSX0FHR1JFU0laRSkKICAgICB7Ci0gICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIDogU2l6ZSBpcyB0b28gbGFyZ2UhICglZClcbiIsIF9fZnVuY19fLCBwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpKTsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBTaXplIGlzIHRvbyBsYXJnZSEgKCV6dSlcbiIsIF9fZnVuY19fLCBwUnhCbGstPkRhdGFTaXplICsgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpKTsKIAkJZ290byBlcnJfZnJlZV9za19idWZmOwogICAgIH0KIApAQCAtMTAwNSwzNSArMTAwMSwxNCBAQAogCiB2b2lkIHJ0bXBfb3NfdGhyZWFkX2luaXQoUFVDSEFSIHBUaHJlYWROYW1lLCBQVk9JRCBwTm90aWZ5KQogewotCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQogCWRhZW1vbml6ZShwVGhyZWFkTmFtZSAvKiIlcyIscEFkLT5uZXRfZGV2LT5uYW1lKi8pOwogCiAJYWxsb3dfc2lnbmFsKFNJR1RFUk0pOwogCWFsbG93X3NpZ25hbChTSUdLSUxMKTsKIAljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKLSNlbHNlCi0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRhZW1vbml6ZSgpOwotCXJlcGFyZW50X3RvX2luaXQoKTsKLQlzdHJjcHkoY3VycmVudC0+Y29tbSwgcFRocmVhZE5hbWUpOwotCi0Jc2lnaW5pdHNldGludigmY3VycmVudC0+YmxvY2tlZCwgc2lnbWFzayhTSUdURVJNKSB8IHNpZ21hc2soU0lHS0lMTCkpOwotCi0JLyogQWxsb3cgaW50ZXJjZXB0aW9uIG9mIFNJR0tJTEwgb25seQotCSAqIERvbid0IGFsbG93IG90aGVyIHNpZ25hbHMgdG8gaW50ZXJydXB0IHRoZSB0cmFuc21pc3Npb24gKi8KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDQsMjIpCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmN1cnJlbnQtPnNpZ21hc2tfbG9jaywgZmxhZ3MpOwotCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoY3VycmVudCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3VycmVudC0+c2lnbWFza19sb2NrLCBmbGFncyk7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgLyogc2lnbmFsIHRoYXQgd2UndmUgc3RhcnRlZCB0aGUgdGhyZWFkICovCisJLyogc2lnbmFsIHRoYXQgd2UndmUgc3RhcnRlZCB0aGUgdGhyZWFkICovCiAJY29tcGxldGUocE5vdGlmeSk7Ci0KIH0KIAogdm9pZCBSVE1QX0luZGljYXRlTWVkaWFTdGF0ZSgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguaAppbmRleCAwZmQ1OGY1Li43MDg5MjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5oCkBAIC02NSw3ICs2NSw2IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAKLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAKIC8vIGxvYWQgZmlybXdhcmUKQEAgLTkwLDI4ICs4OSwyMiBAQAogLy8gYWRkIGJ5IGthdGh5CiAKICNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKLSNpZmRlZiBSVDI4NjAKICNkZWZpbmUgU1RBX1BST0ZJTEVfUEFUSAkJCSIvZXRjL1dpcmVsZXNzL1JUMjg2MFNUQS9SVDI4NjBTVEEuZGF0IgogI2RlZmluZSBTVEFfUlRNUF9GSVJNV0FSRV9GSUxFX05BTUUgIi9ldGMvV2lyZWxlc3MvUlQyODYwU1RBL1JUMjg2MFNUQS5iaW4iCiAjZGVmaW5lIFNUQV9OSUNfREVWSUNFX05BTUUJCQkiUlQyODYwU1RBIgotI2RlZmluZSBTVEFfRFJJVkVSX1ZFUlNJT04JCQkiMS44LjAuMCIKKyNkZWZpbmUgU1RBX0RSSVZFUl9WRVJTSU9OCQkJIjEuOC4xLjEiCiAjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCiAjZGVmaW5lIENBUkRfSU5GT19QQVRICQkJIi9ldGMvV2lyZWxlc3MvUlQyODYwU1RBL1JUMjg2MFNUQUNhcmQuZGF0IgogI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAotI2lmZGVmIFJUMjg2MAogI2lmbmRlZiBQQ0lfREVWSUNFCiAjZGVmaW5lIFBDSV9ERVZJQ0UodmVuZCxkZXYpIFwKIAkudmVuZG9yID0gKHZlbmQpLCAuZGV2aWNlID0gKGRldiksIFwKIAkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwgLnN1YmRldmljZSA9IFBDSV9BTllfSUQKICNlbmRpZiAvLyBQQ0lfREVWSUNFIC8vCi0jZW5kaWYgLy8gUlQyODYwIC8vCi0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCiAKICNkZWZpbmUgUlRNUF9USU1FX0FGVEVSKGEsYikJCVwKIAkodHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsICh1bnNpZ25lZCBsb25nKWEpICYmIFwKQEAgLTEyMywxMSArMTE2LDcgQEAKIAkgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsICh1bnNpZ25lZCBsb25nKWIpICYmIFwKIAkgKChsb25nKShhKSAtIChsb25nKShiKSA+PSAwKSkKICNkZWZpbmUgUlRNUF9USU1FX0JFRk9SRShhLGIpCVJUTVBfVElNRV9BRlRFUl9FUShiLGEpCi0jZWxzZQotI2RlZmluZSBSVE1QX1RJTUVfQUZURVIoYSxiKSB0aW1lX2FmdGVyKGEsIGIpCi0jZW5kaWYKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKICNkZWZpbmUgUlRfTU9EX0lOQ19VU0VfQ09VTlQoKSBcCiAJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpIFwKIAl7IFwKQEAgLTEzNiwxMCArMTI1LDYgQEAKIAl9CiAKICNkZWZpbmUgUlRfTU9EX0RFQ19VU0VfQ09VTlQoKSBtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKLSNlbHNlCi0jZGVmaW5lIFJUX01PRF9JTkNfVVNFX0NPVU5UKCkJTU9EX0lOQ19VU0VfQ09VTlQ7Ci0jZGVmaW5lIFJUX01PRF9ERUNfVVNFX0NPVU5UKCkgTU9EX0RFQ19VU0VfQ09VTlQ7Ci0jZW5kaWYKIAogI2RlZmluZSBPU19IWgkJCUhaCiAKQEAgLTE3MSwyMSArMTU2LDEyIEBACiAjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVAkzCiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI3KQogdHlwZWRlZglzdHJ1Y3QgcGlkICoJVEhSRUFEX1BJRDsKICNkZWZpbmUJVEhSRUFEX1BJRF9JTklUX1ZBTFVFCU5VTEwKICNkZWZpbmUJR0VUX1BJRChfdikJZmluZF9nZXRfcGlkKF92KQogI2RlZmluZQlHRVRfUElEX05VTUJFUihfdikJcGlkX25yKF92KQogI2RlZmluZSBDSEVDS19QSURfTEVHQUxJVFkoX3BpZCkJaWYgKHBpZF9ucihfcGlkKSA+PSAwKQogI2RlZmluZSBLSUxMX1RIUkVBRF9QSUQoX0EsIF9CLCBfQykJa2lsbF9waWQoX0EsIF9CLCBfQykKLSNlbHNlCi10eXBlZGVmCXBpZF90CVRIUkVBRF9QSUQ7Ci0jZGVmaW5lCVRIUkVBRF9QSURfSU5JVF9WQUxVRQktMQotI2RlZmluZQlHRVRfUElEKF92KQlfdgotI2RlZmluZQlHRVRfUElEX05VTUJFUihfdikJX3YKLSNkZWZpbmUgQ0hFQ0tfUElEX0xFR0FMSVRZKF9waWQpCWlmIChfcGlkID49IDApCi0jZGVmaW5lIEtJTExfVEhSRUFEX1BJRChfQSwgX0IsIF9DKQlraWxsX3Byb2MoX0EsIF9CLCBfQykKLSNlbmRpZgogCiBzdHJ1Y3Qgb3NfbG9jayAgewogCXNwaW5sb2NrX3QJCWxvY2s7CkBAIC0xOTQsMTEgKzE3MCw5IEBACiAKIAogc3RydWN0IG9zX2Nvb2tpZSB7Ci0jaWZkZWYgUlQyODYwCiAJc3RydWN0IHBjaV9kZXYgCQkJKnBjaV9kZXY7CiAJc3RydWN0IHBjaV9kZXYgCQkJKnBhcmVudF9wY2lfZGV2OwogCWRtYV9hZGRyX3QJCSAgCQlwQWRfcGE7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJcnhfZG9uZV90YXNrOwpAQCAtMjA5LDkgKzE4Myw3IEBACiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IAlhYzNfZG1hX2RvbmVfdGFzazsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgCWhjY2FfZG1hX2RvbmVfdGFzazsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJdGJ0dF90YXNrOwotI2lmZGVmIFJUMjg2MAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAlmaWZvX3N0YXRpc3RpY19mdWxsX3Rhc2s7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCXVuc2lnbmVkIGxvbmcJCQlhcGRfcGlkOyAvLzgwMi4xeCBkYWVtb24gcGlkCkBAIC0yNjYsNyArMjM4LDYgQEAKIAogI2RlZmluZSBSVDI4NjBfUENJX0RFVklDRV9JRAkJMHgwNjAxCiAKLSNpZmRlZiBSVDI4NjAKICNkZWZpbmUgUENJX01BUF9TSU5HTEUoX2hhbmRsZSwgX3B0ciwgX3NpemUsIF9zZF9pZHgsIF9kaXIpIFwKIAlsaW51eF9wY2lfbWFwX3NpbmdsZShfaGFuZGxlLCBfcHRyLCBfc2l6ZSwgX3NkX2lkeCwgX2RpcikKIApAQCAtMjgxLDcgKzI1Miw2IEBACiAKICNkZWZpbmUgREVWX0FMTE9DX1NLQihfbGVuZ3RoKSBcCiAJZGV2X2FsbG9jX3NrYihfbGVuZ3RoKQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIApAQCAtNDAxLDcgKzM3MSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgoc3BpbmxvY2tfdCAqKShfX2xvY2spLCAoKHVuc2lnbmVkIGxvbmcpX19pcnFmbGFnKSk7CVwKIH0KIAotI2lmZGVmIFJUMjg2MAogI2lmIGRlZmluZWQoSU5GX1RXSU5QQVNTKSB8fCBkZWZpbmVkKElORl9EQU5VQkUpIHx8IGRlZmluZWQoSUtBTk9TX1ZYXzFYMCkKIC8vUGF0Y2ggZm9yIEFTSUMgdHVyc3QgcmVhZC93cml0ZSBidWcsIG5lZWRzIHRvIHJlbW92ZSBhZnRlciBtZXRlbCBmaXgKICNkZWZpbmUgUlRNUF9JT19SRUFEMzIoX0EsIF9SLCBfcFYpCQkJCQkJCQkJXApAQCAtNDEzLDYgKzM4MiwxMiBAQAogCSgqX3BWID0gU1dBUDMyKCooKFVJTlQzMiAqKShfcFYpKSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KKyNkZWZpbmUgUlRNUF9JT19GT1JDRV9SRUFEMzIoX0EsIF9SLCBfcFYpCQkJCQkJCVwKK3sJCQkJCQkJCQkJCQkJCQkJCVwKKwkoKl9wViA9IHJlYWRsKCh2b2lkICopKChfQSktPkNTUkJhc2VBZGRyZXNzICsgTUFDX0NTUjApKSk7CQlcCisJKCpfcFYgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIChfUikpKSk7CQkJXAorCSgqX3BWID0gU1dBUDMyKCooKFVJTlQzMiAqKShfcFYpKSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KICNkZWZpbmUgUlRNUF9JT19SRUFEOChfQSwgX1IsIF9wVikJCQkJCQkJCQlcCiB7CQkJCQkJCQkJCQkJCQkJCQlcCiAJKCpfcFYgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIE1BQ19DU1IwKSkpOwkJXApAQCAtNDUyLDYgKzQyNywxMSBAQAogICAgIGVsc2UJCQkJCQkJCQkJCQkJCQlcCiAJCSpfcFYgPSAwOwkJCQkJCQkJCQkJCQlcCiB9CisjZGVmaW5lIFJUTVBfSU9fRk9SQ0VfUkVBRDMyKF9BLCBfUiwgX3BWKQkJCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJCQlcCisJKCpfcFYgPSByZWFkbCgodm9pZCAqKSgoX0EpLT5DU1JCYXNlQWRkcmVzcyArIE1BQ19DU1IwKSkpOwkJXAorCSgqX3BWID0gcmVhZGwoKHZvaWQgKikoKF9BKS0+Q1NSQmFzZUFkZHJlc3MgKyAoX1IpKSkpOwkJCVwKK30KICNkZWZpbmUgUlRNUF9JT19SRUFEOChfQSwgX1IsIF9wVikJCQkJCQkJCVwKIHsJCQkJCQkJCQkJCQkJCQkJXAogCSgqX3BWID0gcmVhZGwoKHZvaWQgKikoKF9BKS0+Q1NSQmFzZUFkZHJlc3MgKyBNQUNfQ1NSMCkpKTsJCQlcCkBAIC00OTIsNyArNDcyLDYgQEAKIAl3cml0ZXcoKF9WKSwgKFBVU0hPUlQpKChfQSktPkNTUkJhc2VBZGRyZXNzICsgKF9SKSkpOwlcCiB9CiAjZW5kaWYKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAjaWZuZGVmIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0CkBAIC01NDQsNyArNTIzLDYgQEAKICNkZWZpbmUgTWxtZUFsbG9jYXRlTWVtb3J5KF9wQWQsIF9wcFZBKSBvc19hbGxvY19tZW0oX3BBZCwgX3BwVkEsIE1HTVRfRE1BX0JVRkZFUl9TSVpFKQogI2RlZmluZSBNbG1lRnJlZU1lbW9yeShfcEFkLCBfcFZBKSAgICAgb3NfZnJlZV9tZW0oX3BBZCwgX3BWQSkKIAotI2lmZGVmIFJUMjg2MAogI2RlZmluZSBCVUlMRF9USU1FUl9GVU5DVElPTihfZnVuYykJCQkJCQkJCQkJCQlcCiB2b2lkIGxpbnV4XyMjX2Z1bmModW5zaWduZWQgbG9uZyBkYXRhKQkJCQkJCQkJCQkJXAogewkJCQkJCQkJCQkJCQkJCQkJCQkJXApAQCAtNTU0LDcgKzUzMiw2IEBACiAJaWYgKHBUaW1lci0+UmVwZWF0KQkJCQkJCQkJCQkJCQkJCVwKIAkJUlRNUF9PU19BZGRfVGltZXIoJnBUaW1lci0+VGltZXJPYmosIHBUaW1lci0+VGltZXJWYWx1ZSk7CQkJCVwKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAKQEAgLTkwNyw3ICs4ODQsNiBAQAogCiB2b2lkIHJ0bXBfb3NfdGhyZWFkX2luaXQoUFVDSEFSIHBUaHJlYWROYW1lLCBQVk9JRCBwTm90aWZ5KTsKIAotI2lmZGVmIFJUMjg2MAogI2lmICFkZWZpbmVkKFBDSV9DQVBfSURfRVhQKQogI2RlZmluZSBQQ0lfQ0FQX0lEX0VYUAkJCSAgICAweDEwCiAjZW5kaWYKQEAgLTkyMSw2ICs4OTcsNSBAQAogI2VuZGlmCiAKICNkZWZpbmUgUENJQlVTX0lOVEVMX1ZFTkRPUiAgICAgICAgIDB4ODA4NgotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYwppbmRleCAzODczYzQ3Li5jZjE3YmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCkBAIC01OCwxMSArNTgsNyBAQAogCiBjaGFyICptYWMgPSAiIjsJCSAgIC8vIGRlZmF1bHQgMDA6MDA6MDA6MDA6MDA6MDAKIGNoYXIgKmhvc3RuYW1lID0gIiI7CQkgICAvLyBkZWZhdWx0IENNUEMKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gS0VSTkVMX1ZFUlNJT04oMiw2LDEyKQotTU9EVUxFX1BBUk0gKG1hYywgInMiKTsKLSNlbHNlCiBtb2R1bGVfcGFyYW0gKG1hYywgY2hhcnAsIDApOwotI2VuZGlmCiBNT0RVTEVfUEFSTV9ERVNDIChtYWMsICJydDI4eHg6IHdpcmVsZXNzIG1hYyBhZGRyIik7CiAKIApAQCAtNzUsOSArNzEsNyBAQAogI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLwogZXh0ZXJuIE5ESVNfU1RBVFVTIE5JQ0xvYWRSYXRlU3dpdGNoaW5nUGFyYW1zKElOIFBSVE1QX0FEQVBURVIgcEFkKTsKIAotI2lmZGVmIFJUMjg2MAogZXh0ZXJuIHZvaWQgaW5pdF90aHJlYWRfdGFzayhQUlRNUF9BREFQVEVSIHBBZCk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIC8vIHB1YmxpYyBmdW5jdGlvbiBwcm90b3R5cGUKIElOVCBfX2RldmluaXQgcnQyOHh4X3Byb2JlKElOIHZvaWQgKl9kZXZfcCwgSU4gdm9pZCAqX2Rldl9pZF9wLApAQCAtODcsMTMgKzgxLDYgQEAKIHN0YXRpYyBpbnQgcnQyOHh4X2luaXQoSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOwogSU5UIHJ0Mjh4eF9zZW5kX3BhY2tldHMoSU4gc3RydWN0IHNrX2J1ZmYgKnNrYl9wLCBJTiBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CiAKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gMHgyMDQwMgkvLyBSZWQgSGF0IDcuMQotc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX25ldGRldigKLQlpbnQgc2l6ZW9mX3ByaXYsCi0JY29uc3QgY2hhciAqbWFzaywKLQl2b2lkICgqc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICopKTsKLSNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KLQogc3RhdGljIHZvaWQgQ2ZnSW5pdEhvb2soUFJUTVBfQURBUFRFUiBwQWQpOwogCiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCkBAIC0yMzUsMTUgKzIyMiwxMyBAQAogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAogCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCiAJewotI2lmZGVmIFJUMjg2MAotCQlSVE1QUENJZUxpbmtDdHJsVmFsdWVSZXN0b3JlKHBBZCwgUkVTVE9SRV9DTE9TRSk7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCi0KIAkJLy8gSWYgZGlydmVyIGRvZXNuJ3Qgd2FrZSB1cCBmaXJtd2FyZSBoZXJlLAogCQkvLyBOSUNMb2FkRmlybXdhcmUgd2lsbCBoYW5nIGZvcmV2ZXIgd2hlbiBpbnRlcmZhY2UgaXMgdXAgYWdhaW4uCi0JCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQorCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSB8fAorCQkJUlRNUF9TRVRfUFNGTEFHKHBBZCwgZlJUTVBfUFNfU0VUX1BDSV9DTEtfT0ZGX0NPTU1BTkQpIHx8CisJCQlSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSURMRV9SQURJT19PRkYpKQogICAgICAgICB7Ci0JCSAgICBBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKKwkJICAgIEFzaWNGb3JjZVdha2V1cChwQWQsIFJUTVBfSEFMVCk7CiAgICAgICAgIH0KIAogI2lmZGVmIFFPU19ETFNfU1VQUE9SVApAQCAtMzIzLDkgKzMwOCw3IEBACiAjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLwogCiAJCU1sbWVSYWRpb09mZihwQWQpOwotI2lmZGVmIFJUMjg2MAogCQlwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAl9CiAjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCiAKQEAgLTM1OSw3ICszNDIsNiBAQAogCVRwY1JlcVRhYkV4aXQocEFkKTsKIAogCi0jaWZkZWYgUlQyODYwCiAJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfQUNUSVZFKSkKIAl7CiAJCU5JQ0Rpc2FibGVJbnRlcnJ1cHQocEFkKTsKQEAgLTM3NSw3ICszNTcsNiBAQAogCQlSVDI4WFhfSVJRX1JFTEVBU0UobmV0X2RldikKIAkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKTsKIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAogCS8vIEZyZWUgUmluZyBvciBVU0IgYnVmZmVycwpAQCAtNDM5LDEyICs0MjAsMTAgQEAKIAogCS8vIERpc2FibGUgaW50ZXJydXB0cyBoZXJlIHdoaWNoIGlzIGFzIHNvb24gYXMgcG9zc2libGUKIAkvLyBUaGlzIHN0YXRlbWVudCBzaG91bGQgbmV2ZXIgYmUgdHJ1ZS4gV2UgbWlnaHQgY29uc2lkZXIgdG8gcmVtb3ZlIGl0IGxhdGVyCi0jaWZkZWYgUlQyODYwCiAJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfQUNUSVZFKSkKIAl7CiAJCU5JQ0Rpc2FibGVJbnRlcnJ1cHQocEFkKTsKIAl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAlTdGF0dXMgPSBSVE1QQWxsb2NUeFJ4UmluZ01lbW9yeShwQWQpOwogCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKQEAgLTY2NywyNiArNjQ2LDYgQEAKICNlbmRpZiAvLyBXSVJFTEVTU19FWFQgPj0gMTIgLy8KICNlbmRpZiAvLyBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVCAvLwogCi0jaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCi0jaWZkZWYgUlQyODYwCi0JSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKLQl7Ci0gICAgCS8vIElmIGRpcnZlciBkb2Vzbid0IHdha2UgdXAgZmlybXdhcmUgaGVyZSwKLSAgICAJLy8gTklDTG9hZEZpcm13YXJlIHdpbGwgaGFuZyBmb3JldmVyIHdoZW4gaW50ZXJmYWNlIGlzIHVwIGFnYWluLgotICAgIAkvLyBSVDI4NjAgUENJCi0gICAgCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpICYmCi0gICAgICAgIAlPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSkpCi0gICAgCXsKLSAgICAgICAgCUFVVE9fV0FLRVVQX1NUUlVDIEF1dG9XYWtldXBDZmc7Ci0JCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKLSAgICAgICAgCUF1dG9XYWtldXBDZmcud29yZCA9IDA7Ci0JICAgIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1dBS0VVUF9DRkcsIEF1dG9XYWtldXBDZmcud29yZCk7Ci0gICAgICAgIAlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKTsKLSAgICAJfQotCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KLSNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KLQogCS8vIEluaXQKICAJcE9iaiA9IChQT1NfQ09PS0lFKXBBZC0+T1NfQ29va2llOwogCkBAIC03NTMsMTAgKzcxMiw4IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCi0jaWZkZWYgUlQyODYwCiAJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKICAgICAgICAgUlRNUEluaXRQQ0llTGlua0N0cmxWYWx1ZShwQWQpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCiAJcmV0dXJuIChyZXR2YWwpOwpAQCAtODA4LDkgKzc2NSw3IEBACiAJZGV2LT5zdG9wID0gTWFpblZpcnR1YWxJRl9jbG9zZTsgLy9ydDI4eHhfY2xvc2U7CiAJZGV2LT5wcml2X2ZsYWdzID0gSU5UX01BSU47CiAJZGV2LT5kb19pb2N0bCA9IHJ0Mjh4eF9pb2N0bDsKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI0KQotICAgIGRldi0+dmFsaWRhdGVfYWRkciA9IE5VTEw7Ci0jZW5kaWYKKwlkZXYtPnZhbGlkYXRlX2FkZHIgPSBOVUxMOwogCS8vIGZpbmQgYXZhaWxhYmxlIGRldmljZSBuYW1lCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAl7CkBAIC04MjEsMjUgKzc3NiwxMSBAQAogI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLwogCQlzcHJpbnRmKHNsb3RfbmFtZSwgInJhJWQiLCBpKTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI0KQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjYpCi0gICAgICAgIGRldmljZSA9IGRldl9nZXRfYnlfbmFtZShkZXZfbmV0KGRldiksIHNsb3RfbmFtZSk7Ci0jZWxzZQotICAgICAgICBkZXZpY2UgPSBkZXZfZ2V0X2J5X25hbWUoZGV2LT5uZF9uZXQsIHNsb3RfbmFtZSk7Ci0jZW5kaWYKLSNlbHNlCi0JCWRldmljZSA9IGRldl9nZXRfYnlfbmFtZShzbG90X25hbWUpOwotI2VuZGlmCi0JCWlmIChkZXZpY2UgIT0gTlVMTCkgZGV2X3B1dChkZXZpY2UpOwotI2Vsc2UKLQkJZm9yIChkZXZpY2UgPSBkZXZfYmFzZTsgZGV2aWNlICE9IE5VTEw7IGRldmljZSA9IGRldmljZS0+bmV4dCkKLQkJewotCQkJaWYgKHN0cm5jbXAoZGV2aWNlLT5uYW1lLCBzbG90X25hbWUsIDQpID09IDApCi0JCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCQlpZihkZXZpY2UgPT0gTlVMTCkKKwkJZGV2aWNlID0gZGV2X2dldF9ieV9uYW1lKGRldl9uZXQoZGV2KSwgc2xvdF9uYW1lKTsKKwkJaWYgKGRldmljZSAhPSBOVUxMKQorCQkJZGV2X3B1dChkZXZpY2UpOworCisJCWlmIChkZXZpY2UgPT0gTlVMTCkKIAkJCWJyZWFrOwogCX0KIApAQCAtMTI1Miw0NyArMTE5MywyOCBAQAogICAgIFBSVE1QX0FEQVBURVIgICAgICAgcEFkID0gKFBSVE1QX0FEQVBURVIpIE5VTEw7CiAgICAgSU5UICAgICAgICAgICAgICAgICBzdGF0dXM7CiAJUFZPSUQJCQkJaGFuZGxlOwotI2lmZGVmIFJUMjg2MAogCXN0cnVjdCBwY2lfZGV2ICpkZXZfcCA9IChzdHJ1Y3QgcGNpX2RldiAqKV9kZXZfcDsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCiAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1RBIERyaXZlciB2ZXJzaW9uLSVzXG4iLCBTVEFfRFJJVkVSX1ZFUlNJT04pKTsKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSAweDIwNDAyICAgICAgIC8vIFJlZCBIYXQgNy4xCi0gICAgbmV0X2RldiA9IGFsbG9jX25ldGRldihzaXplb2YoUFJUTVBfQURBUFRFUiksICJldGglZCIsIGV0aGVyX3NldHVwKTsKLSNlbHNlCiAgICAgbmV0X2RldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihQUlRNUF9BREFQVEVSKSk7Ci0jZW5kaWYKICAgICBpZiAobmV0X2RldiA9PSBOVUxMKQogICAgIHsKICAgICAgICAgcHJpbnRrKCJhbGxvY19uZXRkZXYgZmFpbGVkXG4iKTsKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTUpCi0JCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwotI2VuZGlmIC8vTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE1KQotI2Vsc2UKLQkJTU9EX0RFQ19VU0VfQ09VTlQ7Ci0jZW5kaWYKICAgICAgICAgZ290byBlcnJfb3V0OwogICAgIH0KIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkKLSAgICBTRVRfTU9EVUxFX09XTkVSKG5ldF9kZXYpOwotI2VuZGlmCi0KIAluZXRpZl9zdG9wX3F1ZXVlKG5ldF9kZXYpOwogI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCiAvKiBmb3Igc3VwcG9ydGluZyBOZXR3b3JrIE1hbmFnZXIgKi8KIC8qIFNldCB0aGUgc3lzZnMgcGh5c2ljYWwgZGV2aWNlIHJlZmVyZW5jZSBmb3IgdGhlIG5ldHdvcmsgbG9naWNhbCBkZXZpY2UKICAqIGlmIHNldCBwcmlvciB0byByZWdpc3RyYXRpb24gd2lsbCBjYXVzZSBhIHN5bWxpbmsgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogICovCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkpCiAgICAgU0VUX05FVERFVl9ERVYobmV0X2RldiwgJihkZXZfcC0+ZGV2KSk7Ci0jZW5kaWYKICNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLwogCiAJLy8gQWxsb2NhdGUgUlRNUF9BREFQVEVSIG1pbmlwb3J0IGFkYXB0ZXIgc3RydWN0dXJlCkBAIC0xMzEzLDEzICsxMjM1LDggQEAKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAogCS8vIFBvc3QgY29uZmlnCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JaWYgKFJUMjhYWFByb2JlUG9zdENvbmZpZyhfZGV2X3AsIHBBZCwgYXJnYykgPT0gRkFMU0UpCi0JCWdvdG8gZXJyX291dF91bm1hcDsKLSNlbHNlCiAJaWYgKFJUMjhYWFByb2JlUG9zdENvbmZpZyhfZGV2X3AsIHBBZCwgMCkgPT0gRkFMU0UpCiAJCWdvdG8gZXJyX291dF91bm1hcDsKLSNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KIAogI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAogCXBBZC0+T3BNb2RlID0gT1BNT0RFX1NUQTsKQEAgLTEzNjIsMjAgKzEyNzksMTIgQEAKIAlSVDI4WFhfVU5NQVAoKTsKIAogZXJyX291dF9mcmVlX25ldGRldjoKLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0gICAgZnJlZV9uZXRkZXYobmV0X2Rldik7Ci0jZWxzZQotCWtmcmVlKG5ldF9kZXYpOwotI2VuZGlmCisJZnJlZV9uZXRkZXYobmV0X2Rldik7CiAKIGVycl9vdXQ6CiAJUlQyOFhYX1BVVF9ERVZJQ0UoZGV2X3ApOwogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCi0JcmV0dXJuIChMT05HKU5VTEw7Ci0jZWxzZQotICAgIHJldHVybiAtRU5PREVWOyAvKiBwcm9iZSBmYWlsICovCi0jZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisJcmV0dXJuIC1FTk9ERVY7IC8qIHByb2JlIGZhaWwgKi8KIH0gLyogRW5kIG9mIHJ0Mjh4eF9wcm9iZSAqLwogCiAKQEAgLTE0OTUsNDAgKzE0MDQsNiBAQAogCiAKIAotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSAweDIwNDAyCS8vIFJlZCBIYXQgNy4xCi1zdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2KAotCWludCBzaXplb2ZfcHJpdiwKLQljb25zdCBjaGFyICptYXNrLAotCXZvaWQgKCpzZXR1cCkoc3RydWN0IG5ldF9kZXZpY2UgKikpCi17Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKLSAgICBJTlQJCQkJCWFsbG9jX3NpemU7Ci0KLQotICAgIC8qIGVuc3VyZSAzMi1ieXRlIGFsaWdubWVudCBvZiB0aGUgcHJpdmF0ZSBhcmVhICovCi0gICAgYWxsb2Nfc2l6ZSA9IHNpemVvZiAoKmRldikgKyBzaXplb2ZfcHJpdiArIDMxOwotCi0gICAgZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGttYWxsb2MoYWxsb2Nfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0gICAgaWYgKGRldiA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsCi0JCQkJKCJhbGxvY19uZXRkZXY6IFVuYWJsZSB0byBhbGxvY2F0ZSBkZXZpY2UgbWVtb3J5LlxuIikpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBtZW1zZXQoZGV2LCAwLCBhbGxvY19zaXplKTsKLQotICAgIGlmIChzaXplb2ZfcHJpdikKLSAgICAgICAgZGV2LT5wcml2ID0gKHZvaWQgKikgKCgobG9uZykoZGV2ICsgMSkgKyAzMSkgJiB+MzEpOwotCi0gICAgc2V0dXAoZGV2KTsKLSAgICBzdHJjcHkoZGV2LT5uYW1lLCBtYXNrKTsKLQotICAgIHJldHVybiBkZXY7Ci19Ci0jZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCi0KLQogdm9pZCBDZmdJbml0SG9vayhQUlRNUF9BREFQVEVSIHBBZCkKIHsKIAlwQWQtPmJCcm9hZENvbUhUID0gVFJVRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfcHJvZmlsZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9wcm9maWxlLmMKaW5kZXggMzI2YTNjYi4uNjIxNDFmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9wcm9maWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9wcm9maWxlLmMKQEAgLTE0NTEsNyArMTQ1MSw3IEBACiAJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCiAJCQkJCXsKIAkJCQkJCS8vUFNNb2RlCi0JCQkJCQlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiUFNNb2RlIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJQU01vZGUiLCB0bXBidWYsIDMyLCBidWZmZXIpKQogCQkJCQkJewogCQkJCQkJCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19JTkZSQSkKIAkJCQkJCQl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCmluZGV4IDQxMTk1NDIuLmI5MDRiNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCkBAIC0yMDMsOSArMjAzLDcgQEAKIAlCT09MRUFOCWJSeEZlcjsKIAlCT09MRUFOCWJRQVR4U3RhcnQ7IC8vIEhhdmUgY29tcGlsZWQgUUEgaW4gYW5kIHVzZSBpdCB0byBBVEUgdHguCiAJQk9PTEVBTgliUUFSeFN0YXJ0OwkvLyBIYXZlIGNvbXBpbGVkIFFBIGluIGFuZCB1c2UgaXQgdG8gQVRFIHJ4LgotI2lmZGVmIFJUMjg2MAogCUJPT0xFQU4JYkZXTG9hZGluZzsJLy8gUmVsb2FkIGZpcm13YXJlIHdoZW4gQVRFIGlzIGRvbmUuCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAJVUlOVDMyCVJ4VG90YWxDbnQ7CiAJVUlOVDMyCVJ4Q250UGVyU2VjOwogCkBAIC0zNjYsNiArMzY0LDEzIEBACiAjZGVmaW5lIFJUTVBfVEVTVF9GTEFHKF9NLCBfRikgICAgICAoKChfTSktPkZsYWdzICYgKF9GKSkgIT0gMCkKICNkZWZpbmUgUlRNUF9URVNUX0ZMQUdTKF9NLCBfRikgICAgICgoKF9NKS0+RmxhZ3MgJiAoX0YpKSA9PSAoX0YpKQogCisvLyBNYWNybyBmb3IgcG93ZXIgc2F2ZSBmbGFnLgorI2RlZmluZSBSVE1QX1NFVF9QU0ZMQUcoX00sIF9GKSAgICAgICAoKF9NKS0+UFNGbGFncyB8PSAoX0YpKQorI2RlZmluZSBSVE1QX0NMRUFSX1BTRkxBRyhfTSwgX0YpICAgICAoKF9NKS0+UFNGbGFncyAmPSB+KF9GKSkKKyNkZWZpbmUgUlRNUF9DTEVBUl9QU0ZMQUdTKF9NKSAgICAgICAgKChfTSktPlBTRmxhZ3MgPSAwKQorI2RlZmluZSBSVE1QX1RFU1RfUFNGTEFHKF9NLCBfRikgICAgICAoKChfTSktPlBTRmxhZ3MgJiAoX0YpKSAhPSAwKQorI2RlZmluZSBSVE1QX1RFU1RfUFNGTEFHUyhfTSwgX0YpICAgICAoKChfTSktPlBTRmxhZ3MgJiAoX0YpKSA9PSAoX0YpKQorCiAjZGVmaW5lIE9QU1RBVFVTX1NFVF9GTEFHKF9wQWQsIF9GKSAgICAgKChfcEFkKS0+Q29tbW9uQ2ZnLk9wU3RhdHVzRmxhZ3MgfD0gKF9GKSkKICNkZWZpbmUgT1BTVEFUVVNfQ0xFQVJfRkxBRyhfcEFkLCBfRikgICAoKF9wQWQpLT5Db21tb25DZmcuT3BTdGF0dXNGbGFncyAmPSB+KF9GKSkKICNkZWZpbmUgT1BTVEFUVVNfVEVTVF9GTEFHKF9wQWQsIF9GKSAgICAoKChfcEFkKS0+Q29tbW9uQ2ZnLk9wU3RhdHVzRmxhZ3MgJiAoX0YpKSAhPSAwKQpAQCAtNDc4LDcgKzQ4Myw2IEBACiAvLwogI2RlZmluZSBNQVhfQlVTWV9DT1VOVCAgMTAwICAgICAgICAgLy8gTnVtYmVyIG9mIHJldHJ5IGJlZm9yZSBmYWlsaW5nIGFjY2VzcyBCQlAgJiBSRiBpbmRpcmVjdCByZWdpc3RlcgogLy8KLSNpZmRlZiBSVDI4NjAKICNkZWZpbmUgUlRNUF9SRl9JT19XUklURTMyKF9BLCBfVikgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFBIWV9DU1I0X1NUUlVDICBWYWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTY0Miw3ICs2NDYsNiBAQAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAjZGVmaW5lICAgICBNQVBfQ0hBTk5FTF9JRF9UT19LSFooY2gsIGtoeikgIHsgICAgICAgICAgICAgICBcCkBAIC04OTQsNyArODk3LDYgQEAKIC8vIEVucXVldWUgdGhpcyBmcmFtZSB0byBNTE1FIGVuZ2luZQogLy8gV2UgbmVlZCB0byBlbnF1ZXVlIHRoZSB3aG9sZSBmcmFtZSBiZWNhdXNlIE1MTUUgbmVlZCB0byBwYXNzIGRhdGEgdHlwZQogLy8gaW5mb3JtYXRpb24gZnJvbSA4MDIuMTEgaGVhZGVyCi0jaWZkZWYgUlQyODYwCiAjZGVmaW5lIFJFUE9SVF9NR01UX0ZSQU1FX1RPX01MTUUoX3BBZCwgV2NpZCwgX3BGcmFtZSwgX0ZyYW1lU2l6ZSwgX1Jzc2kwLCBfUnNzaTEsIF9Sc3NpMiwgX1BsY3BTaWduYWwpICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFVJTlQzMiBIaWdoMzJUU0YsIExvdzMyVFNGOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC05MDIsNyArOTA0LDYgQEAKICAgICBSVE1QX0lPX1JFQUQzMihfcEFkLCBUU0ZfVElNRVJfRFcwLCAmTG93MzJUU0YpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgTWxtZUVucXVldWVGb3JSZWN2KF9wQWQsIFdjaWQsIEhpZ2gzMlRTRiwgTG93MzJUU0YsIChVQ0hBUilfUnNzaTAsIChVQ0hBUilfUnNzaTEsKFVDSEFSKV9Sc3NpMixfRnJhbWVTaXplLCBfcEZyYW1lLCAoVUNIQVIpX1BsY3BTaWduYWwpOyAgIFwKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogI2RlZmluZSBORElTX1FVRVJZX0JVRkZFUihfTmRpc0J1ZiwgX3BwVkEsIF9wQnVmTGVuKSAgICAgICAgICAgICAgICAgICAgXAogICAgIE5kaXNRdWVyeUJ1ZmZlcihfTmRpc0J1ZiwgX3BwVkEsIF9wQnVmTGVuKQpAQCAtOTE5LDkgKzkyMCwxMCBAQAogI2RlZmluZSBTVEFfUE9SVF9TRUNVUkVEKF9wQWQpIFwKIHsgXAogCV9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOyBcCi0JTmRpc0FjcXVpcmVTcGluTG9jaygmX3BBZC0+TWFjVGFiTG9jayk7IFwKKwlSVE1QX1NFVF9QU0ZMQUcoX3BBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsgXAorCU5kaXNBY3F1aXJlU3BpbkxvY2soJihfcEFkKS0+TWFjVGFiTG9jayk7IFwKIAlfcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5Qb3J0U2VjdXJlZCA9IF9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZDsgXAotCU5kaXNSZWxlYXNlU3BpbkxvY2soJl9wQWQtPk1hY1RhYkxvY2spOyBcCisJTmRpc1JlbGVhc2VTcGluTG9jaygmKF9wQWQpLT5NYWNUYWJMb2NrKTsgXAogfQogI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLwogCkBAIC0xMDAwLDkgKzEwMDIsNyBAQAogCVVDSEFSIAkJRGF0YU9mZnNldDsKIAlVU0hPUlQgCQlEYXRhc2l6ZTsKIAlVTE9ORyAgICAgICAgICAgICAgICAgICBBbGxvY1NpemU7Ci0jaWZkZWYgUlQyODYwCiAJTkRJU19QSFlTSUNBTF9BRERSRVNTICAgQWxsb2NQYTsgICAgICAgICAgICAvLyBUeEJ1ZiBwaHlzaWNhbCBhZGRyZXNzCi0jZW5kaWYgLy8gUlQyODYwIC8vCiB9ICAgUlRNUF9SRU9SREVSQlVGLCAqUFJUTVBfUkVPUkRFUkJVRjsKIAogLy8KQEAgLTExMDEsNiArMTEwMSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IF9DT1VOVEVSX1JBTElOSyB7CiAJVUxPTkcgICAgICAgICAgIFRyYW5zbWl0dGVkQnl0ZUNvdW50OyAgIC8vIGJvdGggc3VjY2Vzc2Z1bCBhbmQgZmFpbHVyZSwgdXNlZCB0byBjYWxjdWxhdGUgVFggdGhyb3VnaHB1dAorCVVMT05HICAgICAgICAgICBMYXN0UmVjZWl2ZWRCeXRlQ291bnQ7CiAJVUxPTkcgICAgICAgICAgIFJlY2VpdmVkQnl0ZUNvdW50OyAgICAgIC8vIGJvdGggQ1JDIG9rYXkgYW5kIENSQyBlcnJvciwgdXNlZCB0byBjYWxjdWxhdGUgUlggdGhyb3VnaHB1dAogCVVMT05HICAgICAgICAgICBCZWVuRGlzYXNzb2NpYXRlZENvdW50OwogCVVMT05HICAgICAgICAgICBCYWRDUUlBdXRvUmVjb3ZlcnlDb3VudDsKQEAgLTE0MzYsMTEgKzE0MzcsOSBAQAogCVJBTElOS19USU1FUl9TVFJVQ1QgICAgIEFQU0RQZXJpb2RpY1RpbWVyOwogCVJBTElOS19USU1FUl9TVFJVQ1QgICAgIExpbmtEb3duVGltZXI7CiAJUkFMSU5LX1RJTUVSX1NUUlVDVCAgICAgTGlua1VwVGltZXI7Ci0jaWZkZWYgUlQyODYwCiAgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgYlBzUG9sbFRpbWVyUnVubmluZzsKICAgICBSQUxJTktfVElNRVJfU1RSVUNUICAgICBQc1BvbGxUaW1lcjsKIAlSQUxJTktfVElNRVJfU1RSVUNUICAgICBSYWRpb09uT2ZmVGltZXI7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAJVUxPTkcgICAgICAgICAgICAgICAgICAgUGVyaW9kaWNSb3VuZDsKIAlVTE9ORyAgICAgICAgICAgICAgICAgICBPbmVTZWNQZXJpb2RpY1JvdW5kOwogCkBAIC0yMjI4LDkgKzIyMjcsNyBAQAogCVJUX0hUX1BIWV9JTkZPCQkJCQlEZXNpcmVkSHRQaHlJbmZvOwogCUJPT0xFQU4JCQkJCQkJYkF1dG9UeFJhdGVTd2l0Y2g7CiAKLSNpZmRlZiBSVDI4NjAKICAgICBVQ0hBUiAgICAgICBCQlBSMzsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKIAlVQ0hBUgkJCQlJRUVFODAyMTFkQ2xpZW50TW9kZTsKQEAgLTI2NjMsNyArMjY2MCw2IEBACiAJUE5FVF9ERVYJCQkJbmV0X2RldjsKIAlVTE9ORwkJCQkJVmlydHVhbElmQ250OwogCi0jaWZkZWYgUlQyODYwCiAgICAgVVNIT1JUCQkgICAgICAgICAgICBMbmtDdHJsQml0TWFzazsKICAgICBVU0hPUlQJCSAgICAgICAgICAgIFJMbmtDdHJsQ29uZmlndXJhdGlvbjsKICAgICBVU0hPUlQgICAgICAgICAgICAgICAgICBSTG5rQ3RybE9mZnNldDsKQEAgLTI2NzEsNyArMjY2Nyw5IEBACiAgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgSG9zdExua0N0cmxPZmZzZXQ7CiAJVVNIT1JUCQkgICAgICAgICAgICBQQ0llUG93ZXJTYXZlTGV2ZWw7CiAgICAJQk9PTEVBTgkJCQkJYlBDSWNsa09mZjsJCQkJCQkvLyBmbGFnIHRoYXQgaW5kaWNhdGUgaWYgdGhlIFBJQ0UgcG93ZXIgc3RhdHVzIGluIENvbmZpZ3VyYXRpb24gU1BhY2UuLgotCUJPT0xFQU4JCQkJCWJQQ0ljbGtPZmZEaXNhYmxlVHg7CQkJLy8KKyAgIAlVTE9ORwkJCQkJQ2hlY2tEbWFCdXN5Q291bnQ7ICAvLyBDaGVjayBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIENvdW50LgorICAgCVVTSE9SVAkJCQkJVGhpc1RidHROdW1Ub05leHRXYWtlVXA7CisJVUxPTkcJCQkJCVNhbWVSeEJ5dGVDb3VudDsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yNjg4LDcgKzI2ODYsNiBAQAogCVJUTVBfRE1BQlVGICAgICAgICAgICAgIFJ4RGVzY1Jpbmc7ICAgICAgICAgICAgICAgICAvLyBTaGFyZWQgbWVtb3J5IGZvciBSWCBkZXNjcmlwdG9ycwogCVJUTVBfRE1BQlVGICAgICAgICAgICAgIFR4RGVzY1JpbmdbTlVNX09GX1RYX1JJTkddOyAJLy8gU2hhcmVkIG1lbW9yeSBmb3IgVHggZGVzY3JpcHRvcnMKIAlSVE1QX1RYX1JJTkcgICAgICAgICAgICBUeFJpbmdbTlVNX09GX1RYX1JJTkddOyAgICAgCS8vIEFDMH40ICsgSENDQQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIAlORElTX1NQSU5fTE9DSyAgICAgICAgICBpcnFfbG9jazsKQEAgLTI3MjEsMTAgKzI3MTgsOCBAQAogLyogICAgICBSeCByZWxhdGVkIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBSVDI4NjAKIAlSVE1QX1JYX1JJTkcgICAgICAgICAgICBSeFJpbmc7CiAJTkRJU19TUElOX0xPQ0sgICAgICAgICAgUnhSaW5nTG9jazsgICAgICAgICAgICAgICAgIC8vIFJ4IFJpbmcgc3BpbmxvY2sKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAKQEAgLTI4OTUsNiArMjg5MCw3IEBACiAKIAkvLyBmbGFncywgc2VlIGZSVE1QX0FEQVBURVJfeHh4IGZsYWdzCiAJVUxPTkcgICAgICAgICAgICAgICAgICAgRmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcHJlc2VudCBjdXJyZW50IGRldmljZSBzdGF0dXMKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBQU0ZsYWdzOyAgICAgICAgICAgICAgICAgICAgLy8gUG93ZXIgU2F2ZSBvcGVyYXRpb24gZmxhZy4KIAogCS8vIGN1cnJlbnQgVFggc2VxdWVuY2UgIwogCVVTSE9SVCAgICAgICAgICAgICAgICAgIFNlcXVlbmNlOwpAQCAtMzE4MSw3ICszMTc3LDYgQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIAotI2lmZGVmIFJUMjg2MAogLy8KIC8vIEVuYWJsZSAmIERpc2FibGUgTklDIGludGVycnVwdCB2aWEgd3JpdGluZyBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcgogLy8gU2luY2UgaXQgdXNlIEFEQVBURVIgc3RydWN0dXJlLCBpdCBoYXZlIHRvIGJlIHB1dCBhZnRlciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4KQEAgLTMyMTQsNyArMzIwOSw2IEBACiAJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfSU5UX0VOQSwgMHgwMDAwMDAzMCk7IC8vIDEgOiBlbmFibGUKIAlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfQUNUSVZFKTsKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogI2lmZGVmIFJUX0JJR19FTkRJQU4KIHN0YXRpYyBpbmxpbmUgVk9JRAlXcml0ZUJhY2tUb0Rlc2NyaXB0b3IoCkBAIC0zMjkxLDcgKzMyODUsNiBAQAogCQlDYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiByZWFkIG9yIHVwZGF0ZSBkZXNjcmlwdG9yCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwotI2lmZGVmIFJUMjg2MAogc3RhdGljIGlubGluZSBWT0lECVJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKAogCUlOCVBVQ0hBUgkJCXBEYXRhLAogCUlOCVVMT05HCQkJRGVzY3JpcHRvclR5cGUpCkBAIC0zMzAxLDcgKzMyOTQsNiBAQAogCSooKFVJTlQzMiAqKShwRGF0YSArMTIpKSA9IFNXQVAzMigqKChVSU5UMzIgKikocERhdGEgKyAxMikpKTsJLy8gQnl0ZSAxMn4xNQogCSooKFVJTlQzMiAqKShwRGF0YSArIDQpKSA9IFNXQVAzMigqKChVSU5UMzIgKikocERhdGEgKyA0KSkpOwkJCQkvLyBCeXRlIDR+NywgdGhpcyBtdXN0IGJlIHN3YXBwZWQgbGFzdAogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAvKgogCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzU1MCw2ICszNTQyLDkgQEAKIAlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKIAlJTiAgQk9PTEVBTgkJYkhhcmRSZXNldCk7CiAKK1ZPSUQgTklDUmVzdG9yZUJCUFZhbHVlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKwogVk9JRCBOSUNJc3N1ZVJlc2V0KAogCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKIApAQCAtNDIwOCw3ICs0MjAzLDcgQEAKIAogVk9JRCBBc2ljRm9yY2VXYWtldXAoCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQsCi0JSU4gQk9PTEVBTiAgICBiRnJvbVR4KTsKKwlJTiBVQ0hBUiAgICAJIExldmVsKTsKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAogVk9JRCBBc2ljU2V0QnNzaWQoCkBAIC00MzA0LDExICs0Mjk5LDkgQEAKIAlJTiBVQ0hBUiAgICAgICAgIEFyZzAsCiAJSU4gVUNIQVIgICAgICAgICBBcmcxKTsKIAotI2lmZGVmIFJUMjg2MAogQk9PTEVBTiBBc2ljQ2hlY2tDb21tYW5PaygKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCwKIAlJTiBVQ0hBUgkJIENvbW1hbmQpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiBWT0lEIE1hY0FkZHJSYW5kb21Cc3NpZCgKIAlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKQEAgLTY5NzgsNyArNjk3MSw2IEBACiAKIHZvaWQgdGJ0dF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKLSNpZmRlZiBSVDI4NjAKIC8vCiAvLyBGdW5jdGlvbiBQcm90b3R5cGUgaW4gY21tX2RhdGFfMjg2MC5jCiAvLwpAQCAtNzA2OSw3ICs3MDYxLDcgQEAKIAogVk9JRCBSVDI4eHhQY2lTdGFBc2ljRm9yY2VXYWtldXAoCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQsCi0JSU4gQk9PTEVBTiAgICAgICBiRnJvbVR4KTsKKwlJTiBVQ0hBUiAgICAJIExldmVsKTsKIAogVk9JRCBSVDI4eHhQY2lTdGFBc2ljU2xlZXBUaGVuQXV0b1dha2V1cCgKIAlJTiBQUlRNUF9BREFQVEVSIHBBZCwKQEAgLTcwOTMsNyArNzA4NSw2IEBACiAKIFZPSUQgUlQyOHh4UGNpTWxtZVJhZGlvT0ZGKAogCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogVk9JRCBBc2ljVHVybk9mZlJGQ2xrKAogCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkLApAQCAtNzEzMiw2ICs3MTIzLDE4IEBACiAjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCiBWT0lEIEFzaWNTdGFCYnBUdW5pbmcoCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFzaWNSZXNldEZyb21ETUFCdXN5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBc2ljUmVzZXRCQlAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFzaWNSZXNldE1BQygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgQXNpY1Jlc2V0UEJGKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKICNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KIAogdm9pZCBSVE1QX0luZGljYXRlTWVkaWFTdGF0ZSgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcF9kZWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcF9kZWYuaAppbmRleCBiZTk4MjE0Li4yNWE1M2Q4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXBfZGVmLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydG1wX2RlZi5oCkBAIC0xMTEsNyArMTExLDYgQEAKIC8vIEVudHJ5IG51bWJlciBmb3IgZWFjaCBETUEgZGVzY3JpcHRvciByaW5nCiAvLwogCi0jaWZkZWYgUlQyODYwCiAjZGVmaW5lIFRYX1JJTkdfU0laRSAgICAgICAgICAgIDY0IC8vNjQKICNkZWZpbmUgTUdNVF9SSU5HX1NJWkUgICAgICAgICAgMTI4CiAjZGVmaW5lIFJYX1JJTkdfU0laRSAgICAgICAgICAgIDEyOCAvLzY0CkBAIC0xMTksNyArMTE4LDYgQEAKICNkZWZpbmUgTUFYX0RNQV9ET05FX1BST0NFU1MgICAgVFhfUklOR19TSVpFCiAjZGVmaW5lIE1BWF9UWF9ET05FX1BST0NFU1MgICAgIFRYX1JJTkdfU0laRSAvLzgKICNkZWZpbmUgTE9DQUxfVFhCVUZfU0laRSAgICAgICAgMgotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKICNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKQEAgLTIxMiw2ICsyMTAsMTkgQEAKICNkZWZpbmUgZk9QX1NUQVRVU19XQUtFVVBfTk9XICAgICAgICAgICAgICAgMHgwMDAwODAwMAogI2RlZmluZSBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSAgICAgICAweDAwMDIwMDAwCiAKKy8vCisvLyAgUlRNUF9BREFQVEVSIFBTRmxhZ3MgOiByZWxhdGVkIHRvIGFkdmFuY2VkIHBvd2VyIHNhdmUuCisvLworLy8gSW5kaWNhdGUgd2hldGhlciBkcml2ZXIgY2FuIGdvIHRvIHNsZWVwIG1vZGUgZnJvbSBub3cuIFRoaXMgZmxhZyBpcyB1c2VmdWwgQUZURVIgbGluayB1cAorI2RlZmluZSBmUlRNUF9QU19DQU5fR09fU0xFRVAgICAgICAgICAgMHgwMDAwMDAwMQorLy8gSW5kaWNhdGUgd2hldGhlciBkcml2ZXIgaGFzIGlzc3VlIGEgTGlua0NvbnRyb2wgY29tbWFuZCB0byBQQ0llIEwxCisjZGVmaW5lIGZSVE1QX1BTX1NFVF9QQ0lfQ0xLX09GRl9DT01NQU5EICAgICAgICAgIDB4MDAwMDAwMDIKKy8vIEluZGljYXRlIGRyaXZlciBzaG91bGQgZGlzYWJsZSBraWNrIG9mZiBoYXJkd2FyZSB0byBzZW5kIHBhY2tldHMgZnJvbSBub3cuCisjZGVmaW5lIGZSVE1QX1BTX0RJU0FCTEVfVFggICAgICAgICAweDAwMDAwMDA0CisvLyBJbmRpY2F0ZSBkcml2ZXIgc2hvdWxkIElNTUVESUFURUxZIGZvIHRvIHNsZWVwIGFmdGVyIHJlY2VpdmluZyBBUCdzIGJlYWNvbiBpbiB3aGljaCAgZG9lc24ndCBpbmRpY2F0ZSB1bmljYXRlIG5vciBtdWx0aWNhc3QgcGFja2V0cyBmb3IgbWUKKy8vLiBUaGlzIGZsYWcgaXMgdXNlZCBPTkxZIGluIFJUTVBIYW5kbGVSeERvbmVJbnRlcnJ1cHQgcm91dGluZS4KKyNkZWZpbmUgZlJUTVBfUFNfR09fVE9fU0xFRVBfTk9XICAgICAgICAgMHgwMDAwMDAwOAorCiAjaWZkZWYgRE9UMTFOX0RSQUZUMwogI2RlZmluZSBmT1BfU1RBVFVTX1NDQU5fMjA0MCAgICAgICAgICAgICAgIAkgICAgMHgwMDA0MDAwMAogI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KQEAgLTE1MTQsMTIgKzE1MjUsMTQgQEAKICNkZWZpbmUgTUNBU1RfSFRNSVgJCTMKICNlbmRpZiAvLyBNQ0FTVF9SQVRFX1NQRUNJRklDIC8vCiAKLS8vIEZvciBBc2ljUmFkaW9PZmYvQXNpY1JhZGlvT24gZnVuY3Rpb24KLSNkZWZpbmUgRE9UMTFQT1dFUlNBVkUJCTAKLSNkZWZpbmUgR1VJUkFESU9fT0ZGCQkxCi0jZGVmaW5lIFJUTVBfSEFMVAkJICAgIDIKLSNkZWZpbmUgR1VJX0lETEVfUE9XRVJfU0FWRQkJMwotLy8gLS0KKy8vIEZvciBBc2ljUmFkaW9PZmYvQXNpY1JhZGlvT24vQXNpY0ZvcmNlV2FrZXVwIGZ1bmN0aW9uCisvLyBUaGlzIGlzIHRvIGluZGljYXRlIGZyb20gd2hlcmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uLgorI2RlZmluZSBET1QxMVBPV0VSU0FWRQkJMAkvLyBUTyBkbyAuMTEgcG93ZXIgc2F2ZSBzbGVlcAorI2RlZmluZSBHVUlSQURJT19PRkYJCTEJLy8gVG8gcGVyZm9ybSBSYWRpbyBPRmYgY29tbWFuZCBmcm9tIEdVSQorI2RlZmluZSBSVE1QX0hBTFQJCQkyCS8vIENhbGxlZCBmcm9tIEhhbHQgaGFuZGxlci4KKyNkZWZpbmUgR1VJX0lETEVfUE9XRVJfU0FWRQkzCS8vIENhbGwgdG8gc2xlZXAgYmVmb3JlIGxpbmsgdXAgd2l0aCBBUAorI2RlZmluZSBGUk9NX1RYCQkJCTQJLy8gRm9yY2Ugd2FrZSB1cCBmcm9tIFR4IHBhY2tldC4KKwogCiAKIC8vIGRlZmluaXRpb24gZm9yIFdwYVN1cHBvcnQgZmxhZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvYXNzb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2Fzc29jLmMKaW5kZXggNDJkYjc1My4uMzRmMWMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvYXNzb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9hc3NvYy5jCkBAIC00NzMsMTIgKzQ3Myw3IEBACiAJCQkJUlNOSWUgPSBJRV9XUEEyOwogCQkJfQogCi0jaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKLSNpZmRlZiBTSU9DU0lXR0VOSUUKLQkJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gMSkKLSNlbmRpZiAvLyBTSU9DU0lXR0VOSUUgLy8KLSNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLwotICAgICAgICAgICAgCVJUTVBNYWtlUlNOSUUocEFkLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzLCBCU1MwKTsKKyAgICAgICAgICAgIFJUTVBNYWtlUlNOSUUocEFkLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzLCBCU1MwKTsKIAogICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFdQQSBQTUsgY2FjaGUgbGlzdAogCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCkBAIC01MDQsMTcgKzQ5OSw2IEBACiAJCQkJfQogCQkJfQogCi0jaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKLSNpZmRlZiBTSU9DU0lXR0VOSUUKLQkJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gMSkKLQkJCXsKLQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgIAkJJnRtcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgCXBBZC0+U3RhQ2ZnLlJTTklFX0xlbiwJCQlwQWQtPlN0YUNmZy5SU05fSUUsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgIAlFTkRfT0ZfQVJHUyk7Ci0JCQl9Ci0JCQllbHNlCi0jZW5kaWYKLSNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLwogCQkJewogCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgCQkmdG1wLAogCQkJCSAgICAgICAgICAgICAgCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZSU05JZSwKQEAgLTUyNSwxMSArNTA5LDYgQEAKIAogCQkJRnJhbWVMZW4gKz0gdG1wOwogCi0jaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKLSNpZmRlZiBTSU9DU0lXR0VOSUUKLQkJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gMSkKLSNlbmRpZgotI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCiAJCQl7CiAJICAgICAgICAgICAgLy8gQXBwZW5kIFZhcmlhYmxlIElFCiAJICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCAmUlNOSWUsIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvY29ubmVjdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvY29ubmVjdC5jCmluZGV4IDM2ZjI4ZjguLmQ4YmNjNzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9jb25uZWN0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvY29ubmVjdC5jCkBAIC0zMzcsNiArMzM3LDEwIEBACiAJTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUICAgRGlzYXNzb2NSZXE7CiAJVUxPTkcJCQkJCSAgIE5vdzsKIAorCS8vIEJCUCBhbmQgUkYgYXJlIG5vdCBhY2Nlc3NpYmxlIGluIFBTIG1vZGUsIHdlIGhhcyB0byB3YWtlIHRoZW0gdXAgZmlyc3QKKwlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKKwkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgUlRNUF9IQUxUKTsKKwogCS8vIFN0ZXAgMS4gcmVjb3JkIHRoZSBkZXNpcmVkIHVzZXIgc2V0dGluZ3MgdG8gTWxtZUF1eAogCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBNQVhfTEVOX09GX1NTSUQpOwogCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBwT2lkU3NpZC0+U3NpZCwgcE9pZFNzaWQtPlNzaWRMZW5ndGgpOwpAQCAtMTI0MCw2ICsxMjQ0LDEzIEBACiAJVUNIQVIJVmFsdWUgPSAwLCBpZHg7CiAJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkgPSBOVUxMLCAqcEN1cnJFbnRyeTsKIAorCWlmIChSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfU0VUX1BDSV9DTEtfT0ZGX0NPTU1BTkQpKQorCXsKKwkJUlRNUFBDSWVMaW5rQ3RybFZhbHVlUmVzdG9yZShwQWQsIFJFU1RPUkVfSEFMVCk7CisJCVJUTVB1c2VjRGVsYXkoNjAwMCk7CisJCXBBZC0+YlBDSWNsa09mZiA9IEZBTFNFOworCX0KKwogCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdOwogCiAJLy8KQEAgLTEyNjQsNyArMTI3NSw2IEBACiAJLy9ydDI4NjBiLiBEb24ndCBrbm93IHdoeSBuZWVkIHRoaXMKIAlTd2l0Y2hCZXR3ZWVuV2VwQW5kQ2tpcChwQWQpOwogCi0jaWZkZWYgUlQyODYwCiAJLy8gQmVmb3JlIHBvd2VyIHNhdmUgYmVmb3JlIGxpbmsgdXAgZnVuY3Rpb24sIFdlIHdpbGwgZm9yY2UgdXNlIDFSLgogCS8vIFNvIGFmdGVyIGxpbmsgdXAsIGNoZWNrIFJ4IGFudGVubmEgIyBhZ2Fpbi4KIAlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7CkBAIC0xMjgyLDcgKzEyOTIsNiBAQAogCX0KIAlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBWYWx1ZSk7CiAJcEFkLT5TdGFDZmcuQkJQUjMgPSBWYWx1ZTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCWlmIChCc3NUeXBlID09IEJTU19BREhPQykKIAl7CkBAIC0xMzMwLDkgKzEzMzksNyBAQAogCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7CiAJCVZhbHVlICY9ICh+MHgyMCk7CiAJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKLSNpZmRlZiBSVDI4NjAKICAgICAgICAgcEFkLT5TdGFDZmcuQkJQUjMgPSBWYWx1ZTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmRGF0YSk7CiAJCURhdGEgJj0gMHhmZmZmZmZmZTsKQEAgLTEzNjcsOSArMTM3NCw3IEBACiAJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJlZhbHVlKTsKIAkgICAgVmFsdWUgfD0gKDB4MjApOwogCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBWYWx1ZSk7Ci0jaWZkZWYgUlQyODYwCiAgICAgICAgIHBBZC0+U3RhQ2ZnLkJCUFIzID0gVmFsdWU7Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAkJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQogCQl7CkBAIC0xNDAwLDkgKzE0MDUsNyBAQAogCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7CiAJCVZhbHVlICY9ICh+MHgyMCk7CiAJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIFZhbHVlKTsKLSNpZmRlZiBSVDI4NjAKICAgICAgICAgcEFkLT5TdGFDZmcuQkJQUjMgPSBWYWx1ZTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCiAJCXsKQEAgLTE1OTgsNiArMTYwMSw4IEBACiAJCQlJViA9IDA7CiAJCQlJViB8PSAocEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkIDw8IDMwKTsKIAkJCUFzaWNVcGRhdGVXQ0lESVZFSVYocEFkLCBCU1NJRF9XQ0lELCBJViwgMCk7CisKKwkJCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKIAkJfQogCQkvLyBOT1RFOgogCQkvLyB0aGUgZGVjaXNpb24gb2YgdXNpbmcgInNob3J0IHNsb3QgdGltZSIgb3Igbm90IG1heSBjaGFuZ2UgZHluYW1pY2FsbHkgZHVlIHRvCkBAIC0xOTE5LDYgKzE5MjQsNyBAQAogCX0KIAogCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpOworCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfR09fVE9fU0xFRVBfTk9XKTsKIAogI2lmZGVmIERPVDExX05fU1VQUE9SVAogI2lmZGVmIERPVDExTl9EUkFGVDMKQEAgLTE5NjEsNiArMTk2Nyw3IEBACiAJSU4gIEJPT0xFQU4gICAgICBJc1JlcUZyb21BUCkKIHsKIAlVQ0hBUgkJCSAgICBpLCBCeXRlVmFsdWUgPSAwOworCUJPT0xFQU4JCUNhbmNlbGxlZDsKIAogCS8vIERvIG5vdGhpbmcgaWYgbW9uaXRvciBtb2RlIGlzIG9uCiAJaWYgKE1PTklUT1JfT04ocEFkKSkKQEAgLTE5NzIsNiArMTk3OSwxMiBAQAogCQlyZXR1cm47CiAjZW5kaWYgLy8gUkFMSU5LX0FURSAvLwogCisJUlRNUF9DTEVBUl9QU0ZMQUcocEFkLCBmUlRNUF9QU19HT19UT19TTEVFUF9OT1cpOworCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBzUG9sbFRpbWVyLAkJJkNhbmNlbGxlZCk7CisKKwkvLyBOb3QgYWxsb3cgZ28gdG8gc2xlZXAgd2l0aGluIGxpbmtkb3duIGZ1bmN0aW9uLgorCVJUTVBfQ0xFQVJfUFNGTEFHKHBBZCwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKKwogICAgIGlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKIAl7CiAJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1NUQV9MSU5LRE9XTl9FVkVOVF9GTEFHLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIEJTUzAsIDApOwpAQCAtMTk4MCw3ICsxOTkzLDYgQEAKIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgTElOSyBET1dOICEhIVxuIikpOwogCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCk7CiAKLSNpZmRlZiBSVDI4NjAKICAgICBpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKQogICAgIHsKIAkgICAgQk9PTEVBTiBDYW5jZWxsZWQ7CkBAIC0xOTg4LDE3ICsyMDAwLDE1IEBACiAgICAgICAgIFJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBzUG9sbFRpbWVyLAkmQ2FuY2VsbGVkKTsKICAgICB9CiAKLSAgICBpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKKyAgICBpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSB8fAorCQlSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfU0VUX1BDSV9DTEtfT0ZGX0NPTU1BTkQpIHx8CisJCVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRikpCiAgICAgewotICAgICAgICBBVVRPX1dBS0VVUF9TVFJVQyBBdXRvV2FrZXVwQ2ZnOwotCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKLSAgICAgICAgQXV0b1dha2V1cENmZy53b3JkID0gMDsKLQkgICAgUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19XQUtFVVBfQ0ZHLCBBdXRvV2FrZXVwQ2ZnLndvcmQpOworCQlBc2ljRm9yY2VXYWtldXAocEFkLCBSVE1QX0hBTFQpOwogICAgICAgICBPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKTsKICAgICB9CiAKICAgICBwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAlpZiAoQURIT0NfT04ocEFkKSkJCS8vIEFkaG9jIG1vZGUgbGluayBkb3duCiAJewogCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgTElOSyBET1dOIDEhISFcbiIpKTsKQEAgLTIyNjYsNiArMjI3Niw5IEBACiAJUlRNUF9JT19XUklURTMyKHBBZCwgTUFYX0xFTl9DRkcsIDB4MWZmZik7CiAJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyk7CiAKKwkvLyBBbGxvdyBnbyB0byBzbGVlcCBhZnRlciBsaW5rZG93biBzdGVwcy4KKwlSVE1QX1NFVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOworCiAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAogI2lmbmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAogCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApIHsKQEAgLTI1MTAsNyArMjUyMyw2IEBACiAKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICovCi0jaWZkZWYgUlQyODYwCiBWT0lEIENvbXBvc2VQc1BvbGwoCiAJSU4gUFJUTVBfQURBUFRFUiBwQWQpCiB7CkBAIC0yNTM0LDcgKzI1NDYsNiBAQAogCUNPUFlfTUFDX0FERFIocEFkLT5OdWxsRnJhbWUuQWRkcjIsIHBBZC0+Q3VycmVudEFkZHJlc3MpOwogCUNPUFlfTUFDX0FERFIocEFkLT5OdWxsRnJhbWUuQWRkcjMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKIH0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2Rscy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvZGxzLmMKaW5kZXggNzhmYjI4OS4uODczY2Y3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvZGxzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvZGxzLmMKQEAgLTE0MTksNyArMTQxOSw2IEBACiAJCQkJLy9Bc2ljQWRkS2V5RW50cnkocEFkLCAoVVNIT1JUKShpICsgMiksIEJTUzAsIDAsICZQYWlyd2lzZUtleSwgVFJVRSwgVFJVRSk7CS8vIHJlc2VydmUgMCBmb3IgbXVsdGljYXN0LCAxIGZvciB1bmljYXN0CiAJCQkJLy9Bc2ljVXBkYXRlUnhXQ0lEVGFibGUocEFkLCAoVVNIT1JUKShpICsgMiksIHBBZGRyKTsKIAkJCQkvLyBBZGQgUGFpci13aXNlIGtleSB0byBBc2ljCi0jaWZkZWYgUlQyODYwCiAgICAgICAgICAgICAJQXNpY0FkZFBhaXJ3aXNlS2V5RW50cnkocEFkLAogCQkJCQkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIsCiAJCQkJCQkJCQkJKFVDSEFSKXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY1RhYk1hdGNoV0NJRCwKQEAgLTE0MzEsNyArMTQzMCw2IEBACiAJCQkJCQkJCQkJICBQYWlyd2lzZUtleS5DaXBoZXJBbGcsCiAJCQkJCQkJCQkJICBwRW50cnkpOwogCi0jZW5kaWYgLy8gUlQyODYwIC8vCiAJCQkJTmRpc01vdmVNZW1vcnkoJnBFbnRyeS0+UGFpcndpc2VLZXksICZQYWlyd2lzZUtleSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKIAkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFJlY2VpdmUgU1RBS2V5IE1lc3NhZ2UtMSAoUGVlciBTVEEgTUFDIEFkZHJlc3MgU1RBS2V5KSBcbiIpKTsKIApAQCAtMTQ3Nyw3ICsxNDc1LDYgQEAKIAkJCQkvL0FzaWNBZGRLZXlFbnRyeShwQWQsIChVU0hPUlQpKGkgKyAyKSwgQlNTMCwgMCwgJlBhaXJ3aXNlS2V5LCBUUlVFLCBUUlVFKTsJLy8gcmVzZXJ2ZSAwIGZvciBtdWx0aWNhc3QsIDEgZm9yIHVuaWNhc3QKIAkJCQkvL0FzaWNVcGRhdGVSeFdDSURUYWJsZShwQWQsIChVU0hPUlQpKGkgKyAyKSwgcEFkZHIpOwogCQkJCS8vIEFkZCBQYWlyLXdpc2Uga2V5IHRvIEFzaWMKLSNpZmRlZiBSVDI4NjAKICAgICAgICAgICAgIAlBc2ljQWRkUGFpcndpc2VLZXlFbnRyeShwQWQsCiAJCQkJCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkciwKIAkJCQkJCQkJCQkoVUNIQVIpcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lELApAQCAtMTQ4OCw3ICsxNDg1LDYgQEAKIAkJCQkJCQkJCQkgIDAsCiAJCQkJCQkJCQkJICBQYWlyd2lzZUtleS5DaXBoZXJBbGcsCiAJCQkJCQkJCQkJICBwRW50cnkpOwotI2VuZGlmIC8vIFJUMjg2MCAvLwogCQkJCU5kaXNNb3ZlTWVtb3J5KCZwRW50cnktPlBhaXJ3aXNlS2V5LCAmUGFpcndpc2VLZXksIHNpemVvZihDSVBIRVJfS0VZKSk7CiAJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBSZWNlaXZlIFNUQUtleSBNZXNzYWdlLTEgKEluaXRpYXRvciBTVEEgTUFDIEFkZHJlc3MgU1RBS2V5KVxuIikpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9ydG1wX2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3J0bXBfZGF0YS5jCmluZGV4IDM2YWZmMjQuLmM1ZTc2YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3J0bXBfZGF0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3J0bXBfZGF0YS5jCkBAIC03NSw3ICs3NSw2IEBACiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtpZHhdLktleUxlbiA+IDApCiAgICAgCQkJCXsKLSNpZmRlZiBSVDI4NjAKIAkJCQkJCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CiAKIAkJCQkJCS8vIFNldCBrZXkgbWF0ZXJpYWwgYW5kIGNpcGhlckFsZyB0byBBc2ljCkBAIC04OSw3ICs4OCw2IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19VUDsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJCQkJCS8vIEZvciBQcmV2ZW50aW5nIFNoYXJkS2V5IFRhYmxlIGlzIGNsZWFyZWQgYnkgcmVtb3ZlIGtleSBwcm9jZWR1cmUuCiAgICAgCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLkNpcGhlckFsZyA9IENpcGhlckFsZzsKIAkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uS2V5TGVuID0gcEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5TGVuOwpAQCAtNjkzLDE0ICs2OTEsMTIgQEAKIAkJCWJyZWFrOwogCQl9CiAKLSNpZmRlZiBSVDI4NjAKIAkJaWYgKFJ4UHJvY2Vzc2VkKysgPiBNQVhfUlhfUFJPQ0VTU19DTlQpCiAJCXsKIAkJCS8vIG5lZWQgdG8gcmVzY2hlZHVsZSByeCBoYW5kbGUKIAkJCWJSZXNjaGVkdWxlID0gVFJVRTsKIAkJCWJyZWFrOwogCQl9Ci0jZW5kaWYgLy8gUlQyODYwIC8vCiAKIAkJUnhQcm9jZXNzZWQgKys7IC8vIHRlc3QKIApAQCAtODExLDYgKzgwNywxMyBAQAogCQl9CiAJfQogCisJLy8gZlJUTVBfUFNfR09fVE9fU0xFRVBfTk9XIGlzIHNldCBpZiByZWNlaXZpbmcgYmVhY29uLgorCWlmIChSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfR09fVE9fU0xFRVBfTk9XKSAmJiAoSU5GUkFfT04ocEFkKSkpCisJeworCQlSVE1QX0NMRUFSX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0dPX1RPX1NMRUVQX05PVyk7CisJCUFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKHBBZCwgcEFkLT5UaGlzVGJ0dE51bVRvTmV4dFdha2VVcCk7CisJCWJSZXNjaGVkdWxlID0gRkFMU0U7CisJfQogCXJldHVybiBiUmVzY2hlZHVsZTsKIH0KIApAQCAtODI4LDcgKzgzMSw3IEBACiBWT0lECVJUTVBIYW5kbGVUd2FrZXVwSW50ZXJydXB0KAogCUlOIFBSVE1QX0FEQVBURVIgcEFkKQogewotCUFzaWNGb3JjZVdha2V1cChwQWQsIEZBTFNFKTsKKwlBc2ljRm9yY2VXYWtldXAocEFkLCBET1QxMVBPV0VSU0FWRSk7CiB9CiAKIC8qCkBAIC0xMjIwLDcgKzEyMjMsNiBAQAogCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwotI2lmZGVmIFJUMjg2MAogTkRJU19TVEFUVVMgUlRNUEZyZWVUWERSZXF1ZXN0KAogCUlOCQlQUlRNUF9BREFQVEVSCXBBZCwKIAlJTgkJVUNIQVIJCQlRdWVJZHgsCkBAIC0xMjY0LDcgKzEyNjYsNiBAQAogCiAJcmV0dXJuIChTdGF0dXMpOwogfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAKIApAQCAtMTg4OSw3ICsxODkwLDggQEAKIAkJLy8KIAkJLy8gS2ljayBvdXQgVHgKIAkJLy8KLQkJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOworCQlpZiAoIVJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19ESVNBQkxFX1RYKSkKKwkJCUhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIHBUeEJsay0+UXVlSWR4KTsKIAogCQlwQWQtPlJhbGlua0NvdW50ZXJzLktpY2tUeENvdW50Kys7CiAJCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhEb25lQ291bnQrKzsKQEAgLTIwMTksNyArMjAyMSw4IEBACiAJLy8KIAkvLyBLaWNrIG91dCBUeAogCS8vCi0JSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOworCWlmICghUlRNUF9URVNUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0RJU0FCTEVfVFgpKQorCQlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7CiB9CiAjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCiAKQEAgLTIxMzksNyArMjE0Miw4IEBACiAJLy8KIAkvLyBLaWNrIG91dCBUeAogCS8vCi0JSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOworCWlmICghUlRNUF9URVNUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0RJU0FCTEVfVFgpKQorCQlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7CiB9CiAKIApAQCAtMjI0OSw3ICsyMjUzLDggQEAKIAkvLwogCS8vIEtpY2sgb3V0IFR4CiAJLy8KLQlIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBwVHhCbGstPlF1ZUlkeCk7CisJaWYgKCFSVE1QX1RFU1RfUFNGTEFHKHBBZCwgZlJUTVBfUFNfRElTQUJMRV9UWCkpCisJCUhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIHBUeEJsay0+UXVlSWR4KTsKIAogfQogCkBAIC0yNTI2LDcgKzI1MzEsNyBAQAogCWlmICgocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSAmJiBPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQogCXsKIAkgICAgREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIkFzaWNGb3JjZVdha2V1cCBBdCBIYXJkVHhcbiIpKTsKLQkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgVFJVRSk7CisJCUFzaWNGb3JjZVdha2V1cChwQWQsIEZST01fVFgpOwogCX0KIAogCS8vIEl0IHNob3VsZCBub3QgY2hhbmdlIFBTTSBiaXQsIHdoZW4gQVBTRCB0dXJuIG9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvc3luYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvc3luYy5jCmluZGV4IGQxOTZmODUuLjE0ODAzN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3N5bmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9zeW5jLmMKQEAgLTIyOCw3ICsyMjgsNiBAQAogCS8vIEluY3JlYXNlIHRoZSBzY2FuIHJldHJ5IGNvdW50ZXJzLgogCXBBZC0+U3RhQ2ZnLlNjYW5DbnQrKzsKIAotI2lmZGVmIFJUMjg2MAogICAgIGlmICgoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKSAmJgogICAgICAgICAoSURMRV9PTihwQWQpKSAmJgogCQkocEFkLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpICYmCkBAIC0yMzYsNyArMjM1LDYgQEAKIAl7CiAJCVJUMjh4eFBjaUFzaWNSYWRpb09uKHBBZCwgR1VJX0lETEVfUE9XRVJfU0FWRSk7CiAJfQotI2VuZGlmIC8vIFJUMjg2MCAvLwogCiAJLy8gZmlyc3QgY2hlY2sgdGhlIHBhcmFtZXRlciBzYW5pdHkKIAlpZiAoTWxtZVNjYW5SZXFTYW5pdHkocEFkLApAQCAtMzQ5LDcgKzM0Nyw2IEBACiAKIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gTWxtZUpvaW5SZXFBY3Rpb24oQlNTICMlbGQpXG4iLCBwSW5mby0+QnNzSWR4KSk7CiAKLSNpZmRlZiBSVDI4NjAKICAgICBpZiAoKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFKSkgJiYKICAgICAgICAgKElETEVfT04ocEFkKSkgJiYKIAkJKHBBZC0+U3RhQ2ZnLmJSYWRpbyA9PSBUUlVFKSAmJgpAQCAtMzU3LDcgKzM1NCw2IEBACiAJewogCQlSVDI4eHhQY2lBc2ljUmFkaW9PbihwQWQsIEdVSV9JRExFX1BPV0VSX1NBVkUpOwogCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAogCS8vIHJlc2V0IGFsbCB0aGUgdGltZXJzCiAJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOwpAQCAtMTUzMiwxMyArMTUyOCwxMCBAQAogCQkJCS8vICA1LiBvdGhlcndpc2UsIHB1dCBQSFkgYmFjayB0byBzbGVlcCB0byBzYXZlIGJhdHRlcnkuCiAJCQkJaWYgKE1lc3NhZ2VUb01lKQogCQkJCXsKLSNpZmRlZiBSVDI4NjAKIAkJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURWQU5DRV9QT1dFUl9TQVZFX1BDSUVfREVWSUNFKSkKIAkJCQkJewogCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgcEFkLT5TdGFDZmcuQkJQUjMpOwotCQkJCQkJLy8gVHVybiBjbGsgdG8gODBNaHouCiAJCQkJCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSAmJiBwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJBUFNEQ2FwYWJsZSAmJgogCQkJCQkJcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CRSAmJiBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JLICYmIHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVkkgJiYgcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WTykKIAkJCQkJewpAQCAtMTU0OSwxMiArMTU0MiwxMCBAQAogCQkJCX0KIAkJCQllbHNlIGlmIChCY2FzdEZsYWcgJiYgKER0aW1Db3VudCA9PSAwKSAmJiBPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSkpCiAJCQkJewotI2lmZGVmIFJUMjg2MAogCQkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKQogCQkJCQl7CiAJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBwQWQtPlN0YUNmZy5CQlBSMyk7CiAJCQkJCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJCQl9CiAJCQkJZWxzZSBpZiAoKHBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19CS10uTnVtYmVyICE9IDApCQkJCQkJCQkJCQkJCXx8CiAJCQkJCQkocEFkLT5UeFN3UXVldWVbUUlEX0FDX0JFXS5OdW1iZXIgIT0gMCkJCQkJCQkJCQkJCQkJCXx8CkBAIC0xNTY4LDEyICsxNTU5LDEwIEBACiAJCQkJewogCQkJCQkvLyBUT0RPOiBjb25zaWRlciBzY2hlZHVsZWQgSENDQS4gbWlnaHQgbm90IGJlIHByb3BlciB0byB1c2UgdHJhZGl0aW9uYWwgRFRJTS1iYXNlZCBwb3dlci1zYXZpbmcgc2NoZW1lCiAJCQkJCS8vIGNhbiB3ZSBjaGVhdCBoZXJlIChpLmUuIGp1c3QgY2hlY2sgTUdNVCAmIEFDX0JFKSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlPwotI2lmZGVmIFJUMjg2MAogCQkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BRFZBTkNFX1BPV0VSX1NBVkVfUENJRV9ERVZJQ0UpKQogCQkJCQl7CiAJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBwQWQtPlN0YUNmZy5CQlBSMyk7CiAJCQkJCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKQEAgLTE1ODgsNyArMTU3NywxMCBAQAogCiAJCQkJCWlmICghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKIAkJCQkJewotCQkJCQkJQXNpY1NsZWVwVGhlbkF1dG9XYWtldXAocEFkLCBUYnR0TnVtVG9OZXh0V2FrZVVwKTsKKwkJCQkJCS8vIFNldCBhIGZsYWcgdG8gZ28gdG8gc2xlZXAgLiBUaGVuIGFmdGVyIHBhcnNlIHRoaXMgUnhEb25lSW50ZXJydXB0LCB3aWxsIGdvIHRvIHNsZWVwIG1vZGUuCisJCQkJCQlSVE1QX1NFVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19HT19UT19TTEVFUF9OT1cpOworCQkJCQkJcEFkLT5UaGlzVGJ0dE51bVRvTmV4dFdha2VVcCA9IFRidHROdW1Ub05leHRXYWtlVXA7CisJCQkJCQkvL0FzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKHBBZCwgVGJ0dE51bVRvTmV4dFdha2VVcCk7CiAJCQkJCX0KIAkJCQl9CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS93cGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3dwYS5jCmluZGV4IDc3NGM2NTYuLjI2MDlkODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3dwYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL3dwYS5jCkBAIC0xMzg0LDYgKzEzODQsMTAgQEAKIAkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1RLSVA7CiAJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCiAJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZCkKKwkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQllbHNlIGlmIChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExR3JvdXBXRVAxMDRFbmFibGVkKQorCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OwogCiAgICAgCS8vaGV4X2R1bXAoIkdyb3VwIEtleSA6IiwgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksIExFTl9US0lQX0VLKTsKIAl9CkBAIC0xNzYwLDcgKzE3NjQsNyBAQAogCS8vIEdldCBHVEsgbGVuZ3RoIC0gcmVmZXIgdG8gSUVFRSA4MDIuMTFpLTIwMDQgcC44MgogCUdUS0xFTiA9IHBLREUtPkxlbiAtNjsKIAotCWlmIChHVEtMRU4gPCBMRU5fQUVTX0tFWSkKKwlpZiAoR1RLTEVOIDwgTUlOX0xFTl9PRl9HVEspCiAJewogCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUjogR1RLIEtleSBsZW5ndGggaXMgdG9vIHNob3J0ICglZCkgXG4iLCBHVEtMRU4pKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMTc4Niw2ICsxNzkwLDEwIEBACiAJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1RLSVA7CiAJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKIAkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOworCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFHcm91cFdFUDQwRW5hYmxlZCkKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUdyb3VwV0VQMTA0RW5hYmxlZCkKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OwogCiAJcmV0dXJuIFRSVUU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhX2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YV9pb2N0bC5jCmluZGV4IDNlYTJiMmMuLmM1NDUyZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGFfaW9jdGwuYwpAQCAtNDksMTUgKzQ5LDkgQEAKIAogI2RlZmluZSBHUk9VUF9LRVlfTk8gICAgICAgICAgICAgICAgNAogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKICNkZWZpbmUgSVdFX1NUUkVBTV9BRERfRVZFTlQoX0EsIF9CLCBfQywgX0QsIF9FKQkJaXdlX3N0cmVhbV9hZGRfZXZlbnQoX0EsIF9CLCBfQywgX0QsIF9FKQogI2RlZmluZSBJV0VfU1RSRUFNX0FERF9QT0lOVChfQSwgX0IsIF9DLCBfRCwgX0UpCQlpd2Vfc3RyZWFtX2FkZF9wb2ludChfQSwgX0IsIF9DLCBfRCwgX0UpCiAjZGVmaW5lIElXRV9TVFJFQU1fQUREX1ZBTFVFKF9BLCBfQiwgX0MsIF9ELCBfRSwgX0YpCWl3ZV9zdHJlYW1fYWRkX3ZhbHVlKF9BLCBfQiwgX0MsIF9ELCBfRSwgX0YpCi0jZWxzZQotI2RlZmluZSBJV0VfU1RSRUFNX0FERF9FVkVOVChfQSwgX0IsIF9DLCBfRCwgX0UpCQlpd2Vfc3RyZWFtX2FkZF9ldmVudChfQiwgX0MsIF9ELCBfRSkKLSNkZWZpbmUgSVdFX1NUUkVBTV9BRERfUE9JTlQoX0EsIF9CLCBfQywgX0QsIF9FKQkJaXdlX3N0cmVhbV9hZGRfcG9pbnQoX0IsIF9DLCBfRCwgX0UpCi0jZGVmaW5lIElXRV9TVFJFQU1fQUREX1ZBTFVFKF9BLCBfQiwgX0MsIF9ELCBfRSwgX0YpCWl3ZV9zdHJlYW1fYWRkX3ZhbHVlKF9CLCBfQywgX0QsIF9FLCBfRikKLSNlbmRpZgogCiBleHRlcm4gVUNIQVIgICAgQ2lwaGVyV3BhMlRlbXBsYXRlW107CiBleHRlcm4gVUNIQVIgICAgQ2lwaGVyV3BhUHNrVGtpcFtdOwpAQCAtMzU4LDYgKzM1MiwyMCBAQAogCiAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUEFkZEtleSAtLS0tLS0+XG4iKSk7CiAKKwlSVE1QX0NMRUFSX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0NBTl9HT19TTEVFUCk7CisJaWYgKFJUTVBfVEVTVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19TRVRfUENJX0NMS19PRkZfQ09NTUFORCkpCisJeworCQlpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IEZBTFNFKQorCQl7CisJCQlSVE1QX1NFVF9QU0ZMQUcocEFkLCBmUlRNUF9QU19DQU5fR09fU0xFRVApOworCQkJcmV0dXJuOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUlRNUFdQQUFkZEtleVByb2MxPT0+XG4iKSk7CisJCVJUTVBQQ0llTGlua0N0cmxWYWx1ZVJlc3RvcmUocEFkLCBSRVNUT1JFX0hBTFQpOworCQlSVE1QdXNlY0RlbGF5KDYwMDApOworCQlwQWQtPmJQQ0ljbGtPZmYgPSBGQUxTRTsKKwl9CisKIAlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQogCXsKIAkJaWYgKHBLZXktPktleUluZGV4ICYgMHg4MDAwMDAwMCkKQEAgLTU1MSw2ICs1NTksOCBAQAogCQl9CiAJfQogZW5kOgorCVJUTVBfU0VUX1BTRkxBRyhwQWQsIGZSVE1QX1BTX0NBTl9HT19TTEVFUCk7CisgICAgREJHUFJJTlQoUlRfREVCVUdfSU5GTywgKCI8LS0tLS0tIFJUTVBBZGRLZXlcbiIpKTsKIAlyZXR1cm47CiB9CiAKQEAgLTU3Myw5ICs1ODMsNyBAQAogewogLy8JUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKIAotI2lmZGVmIFJUMjg2MAogICAgIHN0cm5jcHkobmFtZSwgIlJUMjg2MCBXaXJlbGVzcyIsIElGTkFNU0laKTsKLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjcwLDExICs2NzgsOSBAQAogCQljYXNlIElXX01PREVfSU5GUkE6CiAJCQlTZXRfTmV0d29ya1R5cGVfUHJvYyhwQWRhcHRlciwgIkluZnJhIik7CiAJCQlicmVhazsKLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw0LDIwKSkKICAgICAgICAgY2FzZSBJV19NT0RFX01PTklUT1I6CiAJCQlTZXRfTmV0d29ya1R5cGVfUHJvYyhwQWRhcHRlciwgIk1vbml0b3IiKTsKIAkJCWJyZWFrOwotI2VuZGlmCiAJCWRlZmF1bHQ6CiAJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+cnRfaW9jdGxfc2l3bW9kZTo6U0lPQ1NJV01PREUgKHVua25vd24gJWQpXG4iLCAqbW9kZSkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC03MTUsMTIgKzcyMSwxMCBAQAogCQkqbW9kZSA9IElXX01PREVfQURIT0M7CiAgICAgZWxzZSBpZiAoSU5GUkFfT04ocEFkYXB0ZXIpKQogCQkqbW9kZSA9IElXX01PREVfSU5GUkE7Ci0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNCwyMCkpCiAgICAgZWxzZSBpZiAoTU9OSVRPUl9PTihwQWRhcHRlcikpCiAgICAgewogICAgICAgICAqbW9kZSA9IElXX01PREVfTU9OSVRPUjsKICAgICB9Ci0jZW5kaWYKICAgICBlbHNlCiAgICAgICAgICptb2RlID0gSVdfTU9ERV9BVVRPOwogCkBAIC0xMDM4LDYgKzEwNDIsMTUgQEAKICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAgICAgfQogCisJaWYgKChwQWRhcHRlci0+T3BNb2RlID09IE9QTU9ERV9TVEEpICYmIChJRExFX09OKHBBZGFwdGVyKSkKKwkJJiYgKHBBZGFwdGVyLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpCisJCSYmIChSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JRExFX1JBRElPX09GRikpKQorCXsKKwkJUlQyOHh4UGNpQXNpY1JhZGlvT24ocEFkYXB0ZXIsIEdVSV9JRExFX1BPV0VSX1NBVkUpOworCX0KKwkvLyBDaGVjayBpZiBzdGlsbCByYWRpbyBvZmYuCisJZWxzZSBpZiAocEFkYXB0ZXItPmJQQ0ljbGtPZmYgPT0gVFJVRSkKKwkJcmV0dXJuIDA7CiAKICNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCiAJaWYgKHBBZGFwdGVyLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID09IFdQQV9TVVBQTElDQU5UX0VOQUJMRSkKQEAgLTE3NTYsNyArMTc2OSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIGVsc2UKIAkJCS8qIERvbid0IGNvbXBsYWluIGlmIG9ubHkgY2hhbmdlIHRoZSBtb2RlICovCi0JCQlpZighZXJxLT5mbGFncyAmIElXX0VOQ09ERV9NT0RFKSB7CisJCQlpZiAoIShlcnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpKSB7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC0yMTYxLDEyICsyMTc0LDYgQEAKICAgICAgICAgICAgIHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7IC8vIDE6IHNpemUgb2YgJ1wwJwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUkFJT19PTjoKLSAgICAgICAgICAgIGlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHNwcmludGYoZXh0cmEsICJTY2FubmluZ1xuIik7Ci0gICAgICAgICAgICAgICAgd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBwQWQtPlN0YUNmZy5iU3dSYWRpbyA9IFRSVUU7CiAgICAgICAgICAgICAvL2lmIChwQWQtPlN0YUNmZy5iUmFkaW8gIT0gKHBBZC0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvKSkKICAgICAgICAgICAgIHsKQEAgLTI0NTAsNiArMjQ1NywyMCBAQAogICAgIElOICBCT09MRUFOICAgICAgICAgYkdUSywKICAgICBJTiAgc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCkKIHsKKwlSVE1QX0NMRUFSX1BTRkxBRyhwQWRhcHRlciwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKKwlpZiAoUlRNUF9URVNUX1BTRkxBRyhwQWRhcHRlciwgZlJUTVBfUFNfU0VUX1BDSV9DTEtfT0ZGX0NPTU1BTkQpKQorCXsKKwkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuYlJhZGlvID09IEZBTFNFKQorCQl7CisJCQlSVE1QX1NFVF9QU0ZMQUcocEFkYXB0ZXIsIGZSVE1QX1BTX0NBTl9HT19TTEVFUCk7CisJCQlyZXR1cm47CisJCX0KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSVE1QV1BBQWRkS2V5UHJvYzE9PT5cbiIpKTsKKwkJUlRNUFBDSWVMaW5rQ3RybFZhbHVlUmVzdG9yZShwQWRhcHRlciwgUkVTVE9SRV9IQUxUKTsKKwkJUlRNUHVzZWNEZWxheSg2MDAwKTsKKwkJcEFkYXB0ZXItPmJQQ0ljbGtPZmYgPSBGQUxTRTsKKwl9CisKICAgICBOZGlzWmVyb01lbW9yeSgmcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLCBzaXplb2YoQ0lQSEVSX0tFWSkpOwogICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKICAgICBOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5LCBleHQtPmtleSwgTEVOX1RLSVBfRUspOwpAQCAtMjQ4MCw2ICsyNTAxLDggQEAKICAgICAJCQkJCQkJICBrZXlJZHgsCiAgICAgCQkJCQkJCSAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLkNpcGhlckFsZywKICAgICAJCQkJCQkJICAmcEFkYXB0ZXItPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdKTsKKworCVJUTVBfU0VUX1BTRkxBRyhwQWRhcHRlciwgZlJUTVBfUFNfQ0FOX0dPX1NMRUVQKTsKIH0KIAogaW50IHJ0X2lvY3RsX3Npd2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMjU0NCw2ICsyNTY3LDIxIEBACiAKICAgICAgICAgICAgICAgICBOZGlzWmVyb01lbW9yeShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5LCAgMTYpOwogCQkJICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXksIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOworCisJCQkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUdyb3VwV0VQNDBFbmFibGVkIHx8CisJCQkJCXBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUdyb3VwV0VQMTA0RW5hYmxlZCkKKwkJCQl7CisJCQkJCS8vIFNldCBHcm91cCBrZXkgbWF0ZXJpYWwgdG8gQXNpYworCQkJCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkYXB0ZXIsIEJTUzAsIGtleUlkeCwgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLkNpcGhlckFsZywgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgTlVMTCwgTlVMTCk7CisKKwkJCQkJLy8gVXBkYXRlIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZSBmb3IgdGhpcyBncm91cCBrZXkgdGFibGUKKwkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWRhcHRlciwgQlNTMCwga2V5SWR4LCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnLCBOVUxMKTsKKworCQkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKworICAgIAkJCQkvLyBJbmRpY2F0ZSBDb25uZWN0ZWQgZm9yIEdVSQorICAgIAkJCQlwQWRhcHRlci0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisJCQkJfQogICAgIAkJCWJyZWFrOwogICAgICAgICAgICAgY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6CiAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OklXX0VOQ09ERV9BTEdfVEtJUCAtIGtleUlkeCA9ICVkLCBleHQtPmtleV9sZW4gPSAlZFxuIiwgX19mdW5jX18sIGtleUlkeCwgZXh0LT5rZXlfbGVuKSk7CkBAIC00MjU5LDcgKzQyOTcsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgfQogCiAjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAotICAgICAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCkKKwkJCQkJaWYgKChwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSAwKSAmJgorCQkJCQkJKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSkKKwkJCQkJeworCQkJCQkJS2V5ID0gcFdlcEtleS0+S2V5TWF0ZXJpYWw7CisKKwkJCQkJCS8vIFNldCBHcm91cCBrZXkgbWF0ZXJpYWwgdG8gQXNpYworICAgIAkJCQkJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZGFwdGVyLCBCU1MwLCBLZXlJZHgsIENpcGhlckFsZywgS2V5LCBOVUxMLCBOVUxMKTsKKworCQkJCQkJLy8gVXBkYXRlIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZSBmb3IgdGhpcyBncm91cCBrZXkgdGFibGUKKwkJCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkYXB0ZXIsIEJTUzAsIEtleUlkeCwgQ2lwaGVyQWxnLCBOVUxMKTsKKworCQkJCQkJU1RBX1BPUlRfU0VDVVJFRChwQWRhcHRlcik7CisKKyAgICAgICAgCQkJCS8vIEluZGljYXRlIENvbm5lY3RlZCBmb3IgR1VJCisgICAgICAgIAkJCQlwQWRhcHRlci0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisJCQkJCX0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCkKICNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEtleSA9IHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXk7CkBAIC01MjY1LDcgKzUzMTksNiBAQAogCQljYXNlIFJUX09JRF84MDJfMTFfUFJPRFVDVElEOgogCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUFJPRFVDVElEIFxuIikpOwogCi0jaWZkZWYgUlQyODYwCiAJCQl7CiAKIAkJCQlVU0hPUlQgIGRldmljZV9pZDsKQEAgLTUyNzUsNyArNTMyOCw2IEBACiAJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBwY2lfZGV2ID0gTlVMTFxuIikpOwogCQkJCXNwcmludGYodG1wLCAiJTA0eCAlMDR4XG4iLCBOSUNfUENJX1ZFTkRPUl9JRCwgZGV2aWNlX2lkKTsKIAkJCX0KLSNlbmRpZiAvLyBSVDI4NjAgLy8KIAkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHN0cmxlbih0bXApOwogCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHRtcCwgd3JxLT51LmRhdGEubGVuZ3RoKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC93cGEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvd3BhLmgKaW5kZXggODhjN2M4Yi4uMDEzNGFlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC93cGEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3dwYS5oCkBAIC05MCw2ICs5MCw3IEBACiAjZGVmaW5lIFRLSVBfQVBfUlhNSUNLX09GRlNFVAkJKFRLSVBfQVBfVFhNSUNLX09GRlNFVCtMRU5fVEtJUF9UWE1JQ0spCiAjZGVmaW5lIFRLSVBfR1RLX0xFTkdUSAkJCQkoKExFTl9US0lQX0VLKSsoTEVOX1RLSVBfUlhNSUNLKSsoTEVOX1RLSVBfVFhNSUNLKSkKICNkZWZpbmUgTEVOX1BUSwkJCQkJCSgoTEVOX0VBUF9LRVkpKyhMRU5fVEtJUF9LRVkpKQorI2RlZmluZSBNSU5fTEVOX09GX0dUSwkJCQk1CiAKIC8vIFJTTiBJRSBMZW5ndGggZGVmaW5pdGlvbgogI2RlZmluZSBNQVhfTEVOX09GX1JTTklFICAgICAgICAgCTkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwLzI4NzBfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvMjg3MF9tYWluX2Rldi5jCmluZGV4IDA0Yzc2NGQuLjlkNTllMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvMjg3MF9tYWluX2Rldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvMjg3MF9tYWluX2Rldi5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkgKi8KIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoICI8LS0tJXNcbiIsX19mdW5jX18pKTsKIAotCXBPYmotPk1MTUVUaHJfcGlkID0gVEhSRUFEX1BJRF9JTklUX1ZBTFVFOworCXBPYmotPk1MTUVUaHJfdGFzayA9IE5VTEw7CiAKIAljb21wbGV0ZV9hbmRfZXhpdCAoJnBBZC0+bWxtZUNvbXBsZXRlLCAwKTsKIAlyZXR1cm4gMDsKQEAgLTM3Myw3ICszNzMsNyBAQAogCSAqLwogCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCggIjwtLS1SVFVTQkNtZFRocmVhZFxuIikpOwogCi0JcE9iai0+UlRVU0JDbWRUaHJfcGlkID0gVEhSRUFEX1BJRF9JTklUX1ZBTFVFOworCXBPYmotPlJUVVNCQ21kVGhyX3Rhc2sgPSBOVUxMOwogCiAJY29tcGxldGVfYW5kX2V4aXQgKCZwQWQtPkNtZFFDb21wbGV0ZSwgMCk7CiAJcmV0dXJuIDA7CkBAIC00NjcsNyArNDY3LDcgQEAKIAkgKi8KIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoICI8LS0tJXNcbiIsX19mdW5jX18pKTsKIAotCXBPYmotPlRpbWVyUVRocl9waWQgPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7CisJcE9iai0+VGltZXJRVGhyX3Rhc2sgPSBOVUxMOwogCiAJY29tcGxldGVfYW5kX2V4aXQoJnBBZC0+VGltZXJRQ29tcGxldGUsIDApOwogCXJldHVybiAwOwpAQCAtOTQ0LDY5ICs5NDQsNDYgQEAKIAlSVFVTQkNhbmNlbFBlbmRpbmdJUlBzKHBBZCk7CiAKIAkvLyBUZXJtaW5hdGUgVGhyZWFkcwotCUNIRUNLX1BJRF9MRUdBTElUWShwT2JqLT5UaW1lclFUaHJfcGlkKQorCUJVR19PTihwT2JqLT5UaW1lclFUaHJfdGFzayA9PSBOVUxMKTsKKwlDSEVDS19QSURfTEVHQUxJVFkodGFza19waWQocE9iai0+VGltZXJRVGhyX3Rhc2spKQogCXsKIAkJUE9TX0NPT0tJRSBwT2JqID0gKFBPU19DT09LSUUpcEFkLT5PU19Db29raWU7CiAKLQkJcHJpbnRrKCJUZXJtaW5hdGUgdGhlIFRpbWVyUVRocl9waWQ9JWQhXG4iLCBHRVRfUElEX05VTUJFUihwT2JqLT5UaW1lclFUaHJfcGlkKSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJUZXJtaW5hdGUgdGhlIFRpbWVyUVRociBwaWQ9JWQhXG4iLAorCQkJcGlkX25yKHRhc2tfcGlkKHBPYmotPlRpbWVyUVRocl90YXNrKSkpOwogCQltYigpOwogCQlwQWQtPlRpbWVyRnVuY19raWxsID0gMTsKIAkJbWIoKTsKLQkJcmV0ID0gS0lMTF9USFJFQURfUElEKHBPYmotPlRpbWVyUVRocl9waWQsIFNJR1RFUk0sIDEpOwotCQlpZiAocmV0KQotCQl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIHN0b3AgVGltZXJRVGhyZWFkLCBwaWQ9JWQsIHJldD0lZCFcbiIsCi0JCQkJCXBBZC0+bmV0X2Rldi0+bmFtZSwgR0VUX1BJRF9OVU1CRVIocE9iai0+VGltZXJRVGhyX3BpZCksIHJldCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZwQWQtPlRpbWVyUUNvbXBsZXRlKTsKLQkJCXBPYmotPlRpbWVyUVRocl9waWQgPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7Ci0JCX0KKwkJa3RocmVhZF9zdG9wKHBPYmotPlRpbWVyUVRocl90YXNrKTsKKwkJcE9iai0+VGltZXJRVGhyX3Rhc2sgPSBOVUxMOwogCX0KIAotCUNIRUNLX1BJRF9MRUdBTElUWShwT2JqLT5NTE1FVGhyX3BpZCkKKwlCVUdfT04ocE9iai0+TUxNRVRocl90YXNrID09IE5VTEwpOworCUNIRUNLX1BJRF9MRUdBTElUWSh0YXNrX3BpZChwT2JqLT5NTE1FVGhyX3Rhc2spKQogCXsKLQkJcHJpbnRrKCJUZXJtaW5hdGUgdGhlIE1MTUVUaHJfcGlkPSVkIVxuIiwgR0VUX1BJRF9OVU1CRVIocE9iai0+TUxNRVRocl9waWQpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRlcm1pbmF0ZSB0aGUgTUxNRVRociBwaWQ9JWQhXG4iLAorCQkJcGlkX25yKHRhc2tfcGlkKHBPYmotPk1MTUVUaHJfdGFzaykpKTsKIAkJbWIoKTsKIAkJcEFkLT5tbG1lX2tpbGwgPSAxOwogCQkvL1JUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKIAkJbWIoKTsKLQkJcmV0ID0gS0lMTF9USFJFQURfUElEKHBPYmotPk1MTUVUaHJfcGlkLCBTSUdURVJNLCAxKTsKLQkJaWYgKHJldCkKLQkJewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gTWxtZSB0aHJlYWQsIHBpZD0lZCwgcmV0PSVkIVxuIiwKLQkJCQkJcEFkLT5uZXRfZGV2LT5uYW1lLCBHRVRfUElEX05VTUJFUihwT2JqLT5NTE1FVGhyX3BpZCksIHJldCk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQkvL3dhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWQtPm5vdGlmeSk7Ci0JCQl3YWl0X2Zvcl9jb21wbGV0aW9uICgmcEFkLT5tbG1lQ29tcGxldGUpOwotCQkJcE9iai0+TUxNRVRocl9waWQgPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7Ci0JCX0KKwkJa3RocmVhZF9zdG9wKHBPYmotPk1MTUVUaHJfdGFzayk7CisJCXBPYmotPk1MTUVUaHJfdGFzayA9IE5VTEw7CiAJfQogCi0JQ0hFQ0tfUElEX0xFR0FMSVRZKHBPYmotPlJUVVNCQ21kVGhyX3BpZCkKKwlCVUdfT04ocE9iai0+UlRVU0JDbWRUaHJfdGFzayA9PSBOVUxMKTsKKwlDSEVDS19QSURfTEVHQUxJVFkodGFza19waWQocE9iai0+UlRVU0JDbWRUaHJfdGFzaykpCiAJewotCQlwcmludGsoIlRlcm1pbmF0ZSB0aGUgUlRVU0JDbWRUaHJfcGlkPSVkIVxuIiwgR0VUX1BJRF9OVU1CRVIocE9iai0+UlRVU0JDbWRUaHJfcGlkKSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJUZXJtaW5hdGUgdGhlIFJUVVNCQ21kVGhyIHBpZD0lZCFcbiIsCisJCQlwaWRfbnIodGFza19waWQocE9iai0+UlRVU0JDbWRUaHJfdGFzaykpKTsKIAkJbWIoKTsKIAkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CiAJCXBBZC0+Q21kUS5DbWRRU3RhdGUgPSBSVDI4NzBfVEhSRUFEX1NUT1BFRDsKIAkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CiAJCW1iKCk7CiAJCS8vUlRVU0JDTURVcChwQWQpOwotCQlyZXQgPSBLSUxMX1RIUkVBRF9QSUQocE9iai0+UlRVU0JDbWRUaHJfcGlkLCBTSUdURVJNLCAxKTsKLQkJaWYgKHJldCkKLQkJewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBSVFVTQkNtZCB0aHJlYWQsIHBpZD0lZCwgcmV0PSVkIVxuIiwKLQkJCQkJcEFkLT5uZXRfZGV2LT5uYW1lLCBHRVRfUElEX05VTUJFUihwT2JqLT5SVFVTQkNtZFRocl9waWQpLCByZXQpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLy93YWl0X2Zvcl9jb21wbGV0aW9uICgmcEFkLT5ub3RpZnkpOwotCQkJd2FpdF9mb3JfY29tcGxldGlvbiAoJnBBZC0+Q21kUUNvbXBsZXRlKTsKLQkJCXBPYmotPlJUVVNCQ21kVGhyX3BpZCA9IFRIUkVBRF9QSURfSU5JVF9WQUxVRTsKLQl9CisJCWt0aHJlYWRfc3RvcChwT2JqLT5SVFVTQkNtZFRocl90YXNrKTsKKwkJcE9iai0+UlRVU0JDbWRUaHJfdGFzayA9IE5VTEw7CiAJfQogCiAKQEAgLTEwNjcsNyArMTA0NCw3IEBACiAJCWlmIChkZXZfcC0+ZGVzY3JpcHRvci5pZFZlbmRvciA9PSBydHVzYl91c2JfaWRbaV0uaWRWZW5kb3IgJiYKIAkJCWRldl9wLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBydHVzYl91c2JfaWRbaV0uaWRQcm9kdWN0KQogCQl7Ci0JCQlwcmludGsoInJ0Mjg3MDogaWRWZW5kb3IgPSAweCV4LCBpZFByb2R1Y3QgPSAweCV4XG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgInJ0Mjg3MDogaWRWZW5kb3IgPSAweCV4LCBpZFByb2R1Y3QgPSAweCV4XG4iLAogCQkJCQlkZXZfcC0+ZGVzY3JpcHRvci5pZFZlbmRvciwgZGV2X3AtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL1RPRE8KaW5kZXggZWFlMWFjNC4uMmRmMWJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvVE9ETwpAQCAtMSw3ICsxLDE0IEBACitJJ20gaGVzaXRhbnQgdG8gYWRkIGEgVE9ETyBmaWxlIGhlcmUsIGFzIHRoZSB3aXJlbGVzcyBkZXZlbG9wZXJzIHdvdWxkCityZWFsbHkgaGF2ZSBwZW9wbGUgaGVscCB0aGVtIG91dCBvbiB0aGUgImNsZWFuIiBydDI4NzAgZHJpdmVyIHRoYXQgY2FuCitiZSBmb3VuZCBhdCB0aGUgaHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tLyBzaXRlLgorCitCdXQsIGlmIHlvdSB3aXNoIHRvIGNsZWFuIHVwIHRoaXMgZHJpdmVyIGluc3RlYWQsIGhlcmUncyBhIHNob3J0IGxpc3Qgb2YKK3RoaW5ncyB0aGF0IG5lZWQgdG8gYmUgZG9uZSB0byBnZXQgaXQgaW50byBhIG1vcmUgbWVyZ2FibGUgc2hhcGU6CisKIFRPRE86CiAJLSBjaGVja3BhdGNoLnBsIGNsZWFuCiAJLSBzcGFyc2UgY2xlYW4KLQktIHBvcnQgdG8gaW4ta2VybmVsIDgwMjExIHN0YWNrCisJLSBwb3J0IHRvIGluLWtlcm5lbCA4MDIxMSBzdGFjayBhbmQgY29tbW9uIHJ0MngwMCBpbmZyYXN0cnVjdHVyZQogCS0gcmVtb3ZlIHJlYWRpbmcgZnJvbSAvZXRjLyBjb25maWcgZmlsZXMKIAktIHJldmlldyBieSB0aGUgd2lyZWxlc3MgZGV2ZWxvcGVyIGNvbW11bml0eQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi8yODcwX3J0bXBfaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vMjg3MF9ydG1wX2luaXQuYwppbmRleCA5ZjUxNDNiLi5jYjE2ZDJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi8yODcwX3J0bXBfaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uLzI4NzBfcnRtcF9pbml0LmMKQEAgLTcyNyw4ICs3MjcsOCBAQAogCiAJdXNiX2RldiA9IHBPYmotPnBVc2JfRGV2OwogCi0JcE9iai0+TUxNRVRocl9waWQJCT0gVEhSRUFEX1BJRF9JTklUX1ZBTFVFOwotCXBPYmotPlJUVVNCQ21kVGhyX3BpZAk9IFRIUkVBRF9QSURfSU5JVF9WQUxVRTsKKwlwT2JqLT5NTE1FVGhyX3Rhc2sJCT0gTlVMTDsKKwlwT2JqLT5SVFVTQkNtZFRocl90YXNrCT0gTlVMTDsKIAogCSpwcEFkID0gKFBWT0lEKXZtYWxsb2Moc2l6ZW9mKFJUTVBfQURBUFRFUikpOwogCkBAIC03NjUsNyArNzY1LDcgQEAKIHsKIAlQUlRNUF9BREFQVEVSIHBBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CiAJUE9TX0NPT0tJRSBwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOwotCXBpZF90IHBpZF9udW1iZXIgPSAtMTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAogCS8vaW5pdF9NVVRFWCgmKHBBZC0+dXNiZGV2X3NlbWFwaG9yZSkpOwogCkBAIC03NzksMzYgKzc3OSwzOSBAQAogCWluaXRfY29tcGxldGlvbiAoJnBBZC0+VGltZXJRQ29tcGxldGUpOwogCiAJLy8gQ3JlYXQgTUxNRSBUaHJlYWQKLQlwT2JqLT5NTE1FVGhyX3BpZD0gVEhSRUFEX1BJRF9JTklUX1ZBTFVFOwotCXBpZF9udW1iZXIgPSBrZXJuZWxfdGhyZWFkKE1sbWVUaHJlYWQsIHBBZCwgQ0xPTkVfVk0pOwotCWlmIChwaWRfbnVtYmVyIDwgMCkKLQl7CisJcE9iai0+TUxNRVRocl90YXNrID0gTlVMTDsKKwl0c2sgPSBrdGhyZWFkX3J1bihNbG1lVGhyZWFkLCBwQWQsIHBBZC0+bmV0X2Rldi0+bmFtZSk7CisKKwlpZiAoSVNfRVJSKHRzaykpIHsKIAkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gc3RhcnQgTWxtZSB0aHJlYWRcbiIscEFkLT5uZXRfZGV2LT5uYW1lKTsKIAkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CiAJfQotCXBPYmotPk1MTUVUaHJfcGlkID0gR0VUX1BJRChwaWRfbnVtYmVyKTsKKworCXBPYmotPk1MTUVUaHJfdGFzayA9IHRzazsKIAkvLyBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIHN0YXJ0CiAJd2FpdF9mb3JfY29tcGxldGlvbigmKHBBZC0+bWxtZUNvbXBsZXRlKSk7CiAKIAkvLyBDcmVhdCBDb21tYW5kIFRocmVhZAotCXBPYmotPlJUVVNCQ21kVGhyX3BpZD0gVEhSRUFEX1BJRF9JTklUX1ZBTFVFOwotCXBpZF9udW1iZXIgPSBrZXJuZWxfdGhyZWFkKFJUVVNCQ21kVGhyZWFkLCBwQWQsIENMT05FX1ZNKTsKLQlpZiAocGlkX251bWJlciA8IDApCisJcE9iai0+UlRVU0JDbWRUaHJfdGFzayA9IE5VTEw7CisJdHNrID0ga3RocmVhZF9ydW4oUlRVU0JDbWRUaHJlYWQsIHBBZCwgcEFkLT5uZXRfZGV2LT5uYW1lKTsKKworCWlmIChJU19FUlIodHNrKSA8IDApCiAJewogCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBzdGFydCBSVFVTQkNtZCB0aHJlYWRcbiIscEFkLT5uZXRfZGV2LT5uYW1lKTsKIAkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CiAJfQotCXBPYmotPlJUVVNCQ21kVGhyX3BpZCA9IEdFVF9QSUQocGlkX251bWJlcik7CisKKwlwT2JqLT5SVFVTQkNtZFRocl90YXNrID0gdHNrOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJihwQWQtPkNtZFFDb21wbGV0ZSkpOwogCi0JcE9iai0+VGltZXJRVGhyX3BpZD0gVEhSRUFEX1BJRF9JTklUX1ZBTFVFOwotCXBpZF9udW1iZXIgPSBrZXJuZWxfdGhyZWFkKFRpbWVyUVRocmVhZCwgcEFkLCBDTE9ORV9WTSk7Ci0JaWYgKHBpZF9udW1iZXIgPCAwKQorCXBPYmotPlRpbWVyUVRocl90YXNrID0gTlVMTDsKKwl0c2sgPSBrdGhyZWFkX3J1bihUaW1lclFUaHJlYWQsIHBBZCwgcEFkLT5uZXRfZGV2LT5uYW1lKTsKKwlpZiAoSVNfRVJSKHRzaykgPCAwKQogCXsKIAkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gc3RhcnQgVGltZXJRVGhyZWFkXG4iLHBBZC0+bmV0X2Rldi0+bmFtZSk7CiAJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOwogCX0KLQlwT2JqLT5UaW1lclFUaHJfcGlkID0gR0VUX1BJRChwaWRfbnVtYmVyKTsKKwlwT2JqLT5UaW1lclFUaHJfdGFzayA9IHRzazsKIAkvLyBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIHN0YXJ0CiAJd2FpdF9mb3JfY29tcGxldGlvbigmKHBBZC0+VGltZXJRQ29tcGxldGUpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL2NtbV9kYXRhLmMKaW5kZXggZmQ4MDlhYi4uZjhlMGViZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vY21tX2RhdGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9jbW1fZGF0YS5jCkBAIC03MDksOSArNzA5LDYgQEAKIAl9CiAKIAlyZXR1cm4gVFJVRTsKLQotRmlsbFR4QmxrRXJyOgotCXJldHVybiBGQUxTRTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydG1wX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0bXBfaW5pdC5jCmluZGV4IDg3MGEwMGQuLjA5OWI2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0bXBfaW5pdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0bXBfaW5pdC5jCkBAIC0zNjU1LDcgKzM2NTUsNyBAQAogI2lmZGVmIFJBTElOS18yOHh4X1FBCiAJLy9wQWQtPmF0ZS5SZXBlYXQgPSAwOwogCXBBZC0+YXRlLlR4U3RhdHVzID0gMDsKLQlwQWQtPmF0ZS5BdGVQaWQgPSBUSFJFQURfUElEX0lOSVRfVkFMVUU7CisJcEFkLT5hdGUuQXRlUGlkID0gTlVMTDsKICNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLwogI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0dXNiX2lvLmMKaW5kZXggNmRiNDQzZS4uYWZkZTEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9pby5jCkBAIC05NTgsNyArOTU4LDggQEAKIAlQT1NfQ09PS0lFIHBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CiAKIAotCUNIRUNLX1BJRF9MRUdBTElUWShwT2JqLT5SVFVTQkNtZFRocl9waWQpCisJQlVHX09OKHBPYmotPlJUVVNCQ21kVGhyX3Rhc2sgPT0gTlVMTCk7CisJQ0hFQ0tfUElEX0xFR0FMSVRZKHRhc2tfcGlkKHBPYmotPlJUVVNCQ21kVGhyX3Rhc2spKQogCQlyZXR1cm4gKE5ESVNfU1RBVFVTX1JFU09VUkNFUyk7CiAKIAlzdGF0dXMgPSBSVE1QQWxsb2NhdGVNZW1vcnkoKFBWT0lEICopJmNtZHFlbG10LCBzaXplb2YoQ21kUUVsbXQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3NwZWN0cnVtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9zcGVjdHJ1bS5jCmluZGV4IDQzNzgyY2UuLjc0MzgwOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3NwZWN0cnVtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vc3BlY3RydW0uYwpAQCAtMTU5NSw3ICsxNTk1LDcgQEAKIAogCWlmICgocE1lYXN1cmVSZXBvcnRJbmZvID0ga21hbGxvYyhzaXplb2YoTUVBU1VSRV9SUElfUkVQT1JUKSwgR0ZQX0FUT01JQykpID09IE5VTEwpCiAJewotCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyB1bmFibGUgdG8gYWxsb2MgbWVtb3J5IGZvciBtZWFzdXJlIHJlcG9ydCBidWZmZXIgKHNpemU9JWQpLlxuIiwgX19mdW5jX18sIHNpemVvZihNRUFTVVJFX1JQSV9SRVBPUlQpKSk7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIHVuYWJsZSB0byBhbGxvYyBtZW1vcnkgZm9yIG1lYXN1cmUgcmVwb3J0IGJ1ZmZlciAoc2l6ZT0lenUpLlxuIiwgX19mdW5jX18sIHNpemVvZihNRUFTVVJFX1JQSV9SRVBPUlQpKSk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnQyODcwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0Mjg3MC5oCmluZGV4IDMwYWY0YjUuLjVkZDE1YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnQyODcwLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydDI4NzAuaApAQCAtODYsNiArODYsNyBAQAogI2RlZmluZSBSVDI4NzBfVVNCX0RFVklDRVMJXAogewlcCiAJe1VTQl9ERVZJQ0UoMHgxNDhGLDB4Mjc3MCl9LCAvKiBSYWxpbmsgKi8JCVwKKwl7VVNCX0RFVklDRSgweDE3MzcsMHgwMDcxKX0sIC8qIExpbmtzeXMgV1VTQjYwME4gKi8JXAogCXtVU0JfREVWSUNFKDB4MTQ4RiwweDI4NzApfSwgLyogUmFsaW5rICovCQlcCiAJe1VTQl9ERVZJQ0UoMHgxNDhGLDB4MzA3MCl9LCAvKiBSYWxpbmsgKi8JCVwKIAl7VVNCX0RFVklDRSgweDBCMDUsMHgxNzMxKX0sIC8qIEFzdXMgKi8JCQlcCkBAIC01NzYsMTQgKzU3NywxNiBAQAogI2RlZmluZSBSVFVTQk1sbWVVcChwQWQpCSAgICAgICAgXAogewkJCQkJCQkJICAgIFwKIAlQT1NfQ09PS0lFIHBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CVwKLQlDSEVDS19QSURfTEVHQUxJVFkocE9iai0+TUxNRVRocl9waWQpCQkgICAgXAorCUJVR19PTihwT2JqLT5NTE1FVGhyX3Rhc2sgPT0gTlVMTCk7CQkgICAgXAorCUNIRUNLX1BJRF9MRUdBTElUWSh0YXNrX3BpZChwT2JqLT5NTE1FVGhyX3Rhc2spKQkJICAgIFwKICAgICAgICAgdXAoJihwQWQtPm1sbWVfc2VtYXBob3JlKSk7IFwKIH0KIAogI2RlZmluZSBSVFVTQkNNRFVwKHBBZCkJICAgICAgICAgICAgICAgIFwKIHsJCQkJCQkJCQkgICAgXAogCVBPU19DT09LSUUgcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsJXAotCUNIRUNLX1BJRF9MRUdBTElUWShwT2JqLT5SVFVTQkNtZFRocl9waWQpCSAgICBcCisJQlVHX09OKHBPYmotPlJUVVNCQ21kVGhyX3Rhc2sgPT0gTlVMTCk7CSAgICBcCisJQ0hFQ0tfUElEX0xFR0FMSVRZKHRhc2tfcGlkKHBPYmotPlJUVVNCQ21kVGhyX3Rhc2spKQkgICAgXAogCSAgICB1cCgmKHBBZC0+UlRVU0JDbWRfc2VtYXBob3JlKSk7IFwKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9saW51eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9saW51eC5jCmluZGV4IDk5MmUzZDEuLmUzODU1MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfbGludXguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X2xpbnV4LmMKQEAgLTg5NSw3ICs4OTUsNyBAQAogCiAgICAgaWYgKHBSeEJsay0+RGF0YVNpemUgKyBzaXplb2Yod2xhbl9uZ19wcmlzbTJfaGVhZGVyKSA+IFJYX0JVRkZFUl9BR0dSRVNJWkUpCiAgICAgewotICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyA6IFNpemUgaXMgdG9vIGxhcmdlISAoJWQpXG4iLCBfX2Z1bmNfXywgcFJ4QmxrLT5EYXRhU2l6ZSArIHNpemVvZih3bGFuX25nX3ByaXNtMl9oZWFkZXIpKSk7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIDogU2l6ZSBpcyB0b28gbGFyZ2UhICglenUpXG4iLCBfX2Z1bmNfXywgcFJ4QmxrLT5EYXRhU2l6ZSArIHNpemVvZih3bGFuX25nX3ByaXNtMl9oZWFkZXIpKSk7CiAJCWdvdG8gZXJyX2ZyZWVfc2tfYnVmZjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfbGludXguaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvcnRfbGludXguaAppbmRleCA4NTlmOWNlLi41YTZlZTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3J0X2xpbnV4LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9ydF9saW51eC5oCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtNjUsNyArNjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogCi0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogCiAvLyBsb2FkIGZpcm13YXJlCkBAIC0xNjYsMTQgKzE2NiwxMiBAQAogCiAjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNykKIHR5cGVkZWYJc3RydWN0IHBpZCAqCVRIUkVBRF9QSUQ7Ci0jZGVmaW5lCVRIUkVBRF9QSURfSU5JVF9WQUxVRQlOVUxMCiAjZGVmaW5lCUdFVF9QSUQoX3YpCWZpbmRfZ2V0X3BpZChfdikKICNkZWZpbmUJR0VUX1BJRF9OVU1CRVIoX3YpCXBpZF9ucihfdikKICNkZWZpbmUgQ0hFQ0tfUElEX0xFR0FMSVRZKF9waWQpCWlmIChwaWRfbnIoX3BpZCkgPj0gMCkKICNkZWZpbmUgS0lMTF9USFJFQURfUElEKF9BLCBfQiwgX0MpCWtpbGxfcGlkKF9BLCBfQiwgX0MpCiAjZWxzZQogdHlwZWRlZglwaWRfdAlUSFJFQURfUElEOwotI2RlZmluZQlUSFJFQURfUElEX0lOSVRfVkFMVUUJLTEKICNkZWZpbmUJR0VUX1BJRChfdikJX3YKICNkZWZpbmUJR0VUX1BJRF9OVU1CRVIoX3YpCV92CiAjZGVmaW5lIENIRUNLX1BJRF9MRUdBTElUWShfcGlkKQlpZiAoX3BpZCA+PSAwKQpAQCAtMTg5LDExICsxODcsMTEgQEAKIHN0cnVjdCBvc19jb29raWUgewogCiAjaWZkZWYgUlQyODcwCi0Jc3RydWN0IHVzYl9kZXZpY2UJCSpwVXNiX0RldjsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqcFVzYl9EZXY7CiAKLQlUSFJFQURfUElECQkJCU1MTUVUaHJfcGlkOwotCVRIUkVBRF9QSUQJCQkJUlRVU0JDbWRUaHJfcGlkOwotCVRIUkVBRF9QSUQJCQkJVGltZXJRVGhyX3BpZDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKk1MTUVUaHJfdGFzazsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKlJUVVNCQ21kVGhyX3Rhc2s7CisJc3RydWN0IHRhc2tfc3RydWN0CSpUaW1lclFUaHJfdGFzazsKICNlbmRpZiAvLyBSVDI4NzAgLy8KIAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJcnhfZG9uZV90YXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zdGFfaW9jdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvc3RhX2lvY3RsLmMKaW5kZXggOTFmMGZhYi4uNGI0MzJjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9zdGFfaW9jdGwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL3N0YV9pb2N0bC5jCkBAIC0xNzc2LDcgKzE3NzYsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICBlbHNlCiAJCQkvKiBEb24ndCBjb21wbGFpbiBpZiBvbmx5IGNoYW5nZSB0aGUgbW9kZSAqLwotCQkJaWYoIWVycS0+ZmxhZ3MgJiBJV19FTkNPREVfTU9ERSkgeworCQkJaWYgKCEoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9NT0RFKSkgewogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC8yODcwX21haW5fZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwLzI4NzBfbWFpbl9kZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDFkZGIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC8yODcwX21haW5fZGV2LmMKQEAgLTAsMCArMSwxNjI3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIE1vZHVsZSBOYW1lOgorICAgIHJ0bXBfbWFpbi5jCisKKyAgICBBYnN0cmFjdDoKKyAgICBtYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzCisKKyAgICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIFdobyAgICAgICAgIFdoZW4gICAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBOYW1lICAgICAgICBEYXRlICAgICAgICAgICAgTW9kaWZpY2F0aW9uIGxvZ3MKKyAgICBKYW4gTGVlCQkwMS0xMC0yMDA1CSAgICBtb2RpZmllZAorCVNhbXBsZQkJSnVuLzAxLzA3CQlNZXJnZSBSVDI4NzAgYW5kIFJUMjg2MCBkcml2ZXJzLgorKi8KKworI2luY2x1ZGUgInJ0X2NvbmZpZy5oIgorCisKKy8vIEZvbGxvd2luZyBpbmZvcm1hdGlvbiB3aWxsIGJlIHNob3cgd2hlbiB5b3UgcnVuICdtb2RpbmZvJworLy8gKioqIElmIHlvdSBoYXZlIGEgc29sdXRpb24gZm9yIHRoZSBidWcgaW4gY3VycmVudCB2ZXJzaW9uIG9mIGRyaXZlciwgcGxlYXNlIG1haWwgdG8gbWUuCisvLyBPdGhlcndpc2UgcG9zdCB0byBmb3J1bSBpbiByYWxpbmt0ZWNoJ3Mgd2ViIHNpdGUod3d3LnJhbGlua3RlY2guY29tKSBhbmQgbGV0IGFsbCB1c2VycyBoZWxwIHlvdS4gKioqCitNT0RVTEVfQVVUSE9SKCJQYXVsIExpbiA8cGF1bF9saW5AcmFsaW5rdGVjaC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJUMjg3MCBXaXJlbGVzcyBMYW4gTGludXggRHJpdmVyIik7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisjaWZkZWYgTU9EVUxFX1ZFUlNJT04KK01PRFVMRV9WRVJTSU9OKFNUQV9EUklWRVJfVkVSU0lPTik7CisjZW5kaWYKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIE1VTFRJUExFX0NBUkRfU1VQUE9SVAorLy8gcmVjb3JkIHdoZXRoZXIgdGhlIGNhcmQgaW4gdGhlIGNhcmQgbGlzdCBpcyB1c2VkIGluIHRoZSBjYXJkIGZpbGUKK2V4dGVybiBVSU5UOCAgTUNfQ2FyZFVzZWRbXTsKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKworLyogS2VybmVsIHRocmVhZCBhbmQgdmFycywgd2hpY2ggaGFuZGxlcyBwYWNrZXRzIHRoYXQgYXJlIGNvbXBsZXRlZC4gT25seQorICogcGFja2V0cyB0aGF0IGhhdmUgYSAiY29tcGxldGUiIGZ1bmN0aW9uIGFyZSBzZW50IGhlcmUuIFRoaXMgd2F5LCB0aGUKKyAqIGNvbXBsZXRpb24gaXMgcnVuIG91dCBvZiBrZXJuZWwgY29udGV4dCwgYW5kIGRvZXNuJ3QgYmxvY2sgdGhlIHJlc3Qgb2YKKyAqIHRoZSBzdGFjay4gKi8KKy8vc3RhdGljIGludCBtbG1lX2tpbGwgPSAwOwkJLy8gTWxtZSBrZXJuZWwgdGhyZWFkCisvL3N0YXRpYyBpbnQgUlRVU0JDbWRfa2lsbCA9IDA7CS8vIENvbW1hbmQga2VybmVsIHRocmVhZAorLy9zdGF0aWMgaW50IFRpbWVyRnVuY19raWxsID0gMDsJLy8gVGltZXJRIGtlcm5lbCB0aHJlYWQKKworLy9zdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgCXRpbWVyV2FpdFE7CisvL3N0YXRpYyB3YWl0X3F1ZXVlX3QgCQl3YWl0UTsKKworZXh0ZXJuIElOVCBfX2RldmluaXQgcnQyOHh4X3Byb2JlKElOIHZvaWQgKl9kZXZfcCwgSU4gdm9pZCAqX2Rldl9pZF9wLAorCQkJCQkJCQkJSU4gVUlOVCBhcmdjLCBPVVQgUFJUTVBfQURBUFRFUiAqcHBBZCk7CisKKworLyogbW9kdWxlIHRhYmxlICovCitzdHJ1Y3QgdXNiX2RldmljZV9pZCAgICBydHVzYl91c2JfaWRbXSA9IFJUMjg3MF9VU0JfREVWSUNFUzsKK0lOVCBjb25zdCAgICAgICAgICAgICAgIHJ0dXNiX3VzYl9pZF9sZW4gPSBzaXplb2YocnR1c2JfdXNiX2lkKSAvIHNpemVvZihzdHJ1Y3QgdXNiX2RldmljZV9pZCk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcnR1c2JfdXNiX2lkKTsKKworI2lmbmRlZiBQRl9OT0ZSRUVaRQorI2RlZmluZSBQRl9OT0ZSRUVaRSAgMAorI2VuZGlmCisKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvL3Rlc3RlZCBmb3Iga2VybmVsIDIuNCBzZXJpZXMKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkICpydHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBVSU5UIGludGVyZmFjZSwKKwkJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZF90YWJsZSk7CitzdGF0aWMgdm9pZCBydHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHZvaWQgKnB0cik7CisKK3N0cnVjdCB1c2JfZHJpdmVyIHJ0dXNiX2RyaXZlciA9IHsKKwkJbmFtZToicnQyODcwIiwKKwkJcHJvYmU6cnR1c2JfcHJvYmUsCisJCWRpc2Nvbm5lY3Q6cnR1c2JfZGlzY29ubmVjdCwKKwkJaWRfdGFibGU6cnR1c2JfdXNiX2lkLAorCX07CisKKyNlbHNlCisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgcnQyODcwX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitzdGF0aWMgaW50IHJ0Mjg3MF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworI2VuZGlmIC8vIENPTkZJR19QTSAvLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvL3Rlc3RlZCBmb3Iga2VybmVsIDIuNnNlcmllcworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBydHVzYl9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworc3RhdGljIHZvaWQgcnR1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKK3N0cnVjdCB1c2JfZHJpdmVyIHJ0dXNiX2RyaXZlciA9IHsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDYsMTUpCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisjZW5kaWYKKwkubmFtZT0icnQyODcwIiwKKwkucHJvYmU9cnR1c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3Q9cnR1c2JfZGlzY29ubmVjdCwKKwkuaWRfdGFibGU9cnR1c2JfdXNiX2lkLAorCisjaWZkZWYgQ09ORklHX1BNCisJc3VzcGVuZDoJcnQyODcwX3N1c3BlbmQsCisJcmVzdW1lOgkJcnQyODcwX3Jlc3VtZSwKKyNlbmRpZgorCX07CisKKyNpZmRlZiBDT05GSUdfUE0KKworVk9JRCBSVDI4NjBSZWplY3RQZW5kaW5nUGFja2V0cygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwkvLyBjbGVhciBQUyBwYWNrZXRzCisJLy8gY2xlYXIgVHhTdyBwYWNrZXRzCit9CisKK3N0YXRpYyBpbnQgcnQyODcwX3N1c3BlbmQoCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2OworCVBSVE1QX0FEQVBURVIgcEFkID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiBydDI4NzBfc3VzcGVuZCgpXG4iKSk7CisJbmV0X2RldiA9IHBBZC0+bmV0X2RldjsKKwkJCW5ldGlmX2RldmljZV9kZXRhY2gobmV0X2Rldik7CisKKwlwQWQtPlBNX0ZsZ1N1c3BlbmQgPSAxOworCWlmIChuZXRpZl9ydW5uaW5nKG5ldF9kZXYpKSB7CisJCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUChwQWQpOworCQlSVFVTQkNhbmNlbFBlbmRpbmdCdWxrT3V0SVJQKHBBZCk7CisJfQorCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PT0gcnQyODcwX3N1c3BlbmQoKVxuIikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJ0Mjg3MF9yZXN1bWUoCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXY7CisJUFJUTVBfQURBUFRFUiBwQWQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+IHJ0Mjg3MF9yZXN1bWUoKVxuIikpOworCisJcEFkLT5QTV9GbGdTdXNwZW5kID0gMDsKKwluZXRfZGV2ID0gcEFkLT5uZXRfZGV2OworCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRfZGV2KTsKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldF9kZXYpOworCQkJbmV0aWZfY2Fycmllcl9vbihuZXRfZGV2KTsKKwkJCW5ldGlmX3dha2VfcXVldWUobmV0X2Rldik7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT09IHJ0Mjg3MF9yZXN1bWUoKVxuIikpOworCXJldHVybiAwOworfQorI2VuZGlmIC8vIENPTkZJR19QTSAvLworI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCisKKy8vIEluaXQgZHJpdmVyIG1vZHVsZQorSU5UIF9faW5pdCBydHVzYl9pbml0KHZvaWQpCit7CisJcHJpbnRrKCJydHVzYiBpbml0IC0tLT5cbiIpOworCXJldHVybiB1c2JfcmVnaXN0ZXIoJnJ0dXNiX2RyaXZlcik7Cit9CisKKy8vIERlaW5pdCBkcml2ZXIgbW9kdWxlCitWT0lEIF9fZXhpdCBydHVzYl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnJ0dXNiX2RyaXZlcik7CisJcHJpbnRrKCI8LS0tIHJ0dXNiIGV4aXRcbiIpOworfQorCittb2R1bGVfaW5pdChydHVzYl9pbml0KTsKK21vZHVsZV9leGl0KHJ0dXNiX2V4aXQpOworCisKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLworLyogZnVuY3Rpb24gZGVjbGFyYXRpb25zCQkJCQkJCQkJCQkJKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCSovCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgTUxNRSBrZXJuZWwgdGhyZWFkLgorCitBcmd1bWVudHM6CisJKkNvbnRleHQJCQl0aGUgcEFkLCBkcml2ZXIgY29udHJvbCBibG9jayBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKyAgICAwCQkJCQljbG9zZSB0aGUgdGhyZWFkCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgTWxtZVRocmVhZCgKKwlJTiB2b2lkICpDb250ZXh0KQoreworCVBSVE1QX0FEQVBURVIJcEFkID0gKFBSVE1QX0FEQVBURVIpQ29udGV4dDsKKwlQT1NfQ09PS0lFCXBPYmo7CisJaW50IHN0YXR1czsKKworCXBPYmogPSAoUE9TX0NPT0tJRSlwQWQtPk9TX0Nvb2tpZTsKKworCXJ0bXBfb3NfdGhyZWFkX2luaXQoInJ0Mjg3ME1sbWVUaHJlYWQiLCAoUFZPSUQpJihwQWQtPm1sbWVDb21wbGV0ZSkpOworCisJd2hpbGUgKHBBZC0+bWxtZV9raWxsID09IDApCisJeworCQkvKiBsb2NrIHRoZSBkZXZpY2UgcG9pbnRlcnMgKi8KKwkJLy9kb3duKCYocEFkLT5tbG1lX3NlbWFwaG9yZSkpOworCQlzdGF0dXMgPSBkb3duX2ludGVycnVwdGlibGUoJihwQWQtPm1sbWVfc2VtYXBob3JlKSk7CisKKwkJLyogbG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzICwgbmVlZCB0byBjaGVjayBpZiByZXF1aXJlZCovCisJCS8vZG93bigmKHBBZC0+dXNiZGV2X3NlbWFwaG9yZSkpOworCisJCWlmICghcEFkLT5QTV9GbGdTdXNwZW5kKQorCQlNbG1lSGFuZGxlcihwQWQpOworCisJCS8qIHVubG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzICovCisJCS8vdXAoJihwQWQtPnVzYmRldl9zZW1hcGhvcmUpKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQl7CisJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogbm90aWZ5IHRoZSBleGl0IHJvdXRpbmUgdGhhdCB3ZSdyZSBhY3R1YWxseSBleGl0aW5nIG5vdworCSAqCisJICogY29tcGxldGUoKS93YWl0X2Zvcl9jb21wbGV0aW9uKCkgaXMgc2ltaWxhciB0byB1cCgpL2Rvd24oKSwKKwkgKiBleGNlcHQgdGhhdCBjb21wbGV0ZSgpIGlzIHNhZmUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHN0cnVjdHVyZQorCSAqIGlzIGdldHRpbmcgZGVsZXRlZCBpbiBhIHBhcmFsbGVsIG1vZGUgb2YgZXhlY3V0aW9uIChpLmUuIGp1c3QKKwkgKiBhZnRlciB0aGUgZG93bigpIC0tIHRoYXQncyBuZWNlc3NhcnkgZm9yIHRoZSB0aHJlYWQtc2h1dGRvd24KKwkgKiBjYXNlLgorCSAqCisJICogY29tcGxldGVfYW5kX2V4aXQoKSBnb2VzIGV2ZW4gZnVydGhlciB0aGFuIHRoaXMgLS0gaXQgaXMgc2FmZSBpbgorCSAqIHRoZSBjYXNlIHRoYXQgdGhlIHRocmVhZCBvZiB0aGUgY2FsbGVyIGlzIGdvaW5nIGF3YXkgKG5vdCBqdXN0CisJICogdGhlIHN0cnVjdHVyZSkgLS0gdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBtb2R1bGUtcmVtb3ZlIGNhc2UuCisJICogVGhpcyBpcyBpbXBvcnRhbnQgaW4gcHJlZW1wdGlvbiBrZXJuZWxzLCB3aGljaCB0cmFuc2ZlciB0aGUgZmxvdworCSAqIG9mIGV4ZWN1dGlvbiBpbW1lZGlhdGVseSB1cG9uIGEgY29tcGxldGUoKS4KKwkgKi8KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoICI8LS0tJXNcbiIsX19GVU5DVElPTl9fKSk7CisKKwlwT2JqLT5NTE1FVGhyX3BpZCA9IE5VTEw7CisKKwljb21wbGV0ZV9hbmRfZXhpdCAoJnBBZC0+bWxtZUNvbXBsZXRlLCAwKTsKKwlyZXR1cm4gMDsKKworfQorCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgVVNCIGNvbW1hbmQga2VybmVsIHRocmVhZC4KKworQXJndW1lbnRzOgorCSpDb250ZXh0CQkJdGhlIHBBZCwgZHJpdmVyIGNvbnRyb2wgYmxvY2sgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgMAkJCQkJY2xvc2UgdGhlIHRocmVhZAorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFJUVVNCQ21kVGhyZWFkKAorCUlOIHZvaWQgKiBDb250ZXh0KQoreworCVBSVE1QX0FEQVBURVIJcEFkID0gKFBSVE1QX0FEQVBURVIpQ29udGV4dDsKKwlQT1NfQ09PS0lFCQlwT2JqOworCWludCBzdGF0dXM7CisKKwlwT2JqID0gKFBPU19DT09LSUUpcEFkLT5PU19Db29raWU7CisKKwlydG1wX29zX3RocmVhZF9pbml0KCJydDI4NzBDbWRUaHJlYWQiLCAoUFZPSUQpJihwQWQtPkNtZFFDb21wbGV0ZSkpOworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisJcEFkLT5DbWRRLkNtZFFTdGF0ZSA9IFJUMjg3MF9USFJFQURfUlVOTklORzsKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKworCXdoaWxlIChwQWQtPkNtZFEuQ21kUVN0YXRlID09IFJUMjg3MF9USFJFQURfUlVOTklORykKKwl7CisJCS8qIGxvY2sgdGhlIGRldmljZSBwb2ludGVycyAqLworCQkvL2Rvd24oJihwQWQtPlJUVVNCQ21kX3NlbWFwaG9yZSkpOworCQlzdGF0dXMgPSBkb3duX2ludGVycnVwdGlibGUoJihwQWQtPlJUVVNCQ21kX3NlbWFwaG9yZSkpOworCisJCWlmIChwQWQtPkNtZFEuQ21kUVN0YXRlID09IFJUMjg3MF9USFJFQURfU1RPUEVEKQorCQkJYnJlYWs7CisKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQl7CisJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGxvY2sgdGhlIGRldmljZSBwb2ludGVycyAsIG5lZWQgdG8gY2hlY2sgaWYgcmVxdWlyZWQqLworCQkvL2Rvd24oJihwQWQtPnVzYmRldl9zZW1hcGhvcmUpKTsKKworCQlpZiAoIXBBZC0+UE1fRmxnU3VzcGVuZCkKKwkJQ01ESGFuZGxlcihwQWQpOworCisJCS8qIHVubG9jayB0aGUgZGV2aWNlIHBvaW50ZXJzICovCisJCS8vdXAoJihwQWQtPnVzYmRldl9zZW1hcGhvcmUpKTsKKwl9CisKKwlpZiAoIXBBZC0+UE1fRmxnU3VzcGVuZCkKKwl7CS8vIENsZWFyIHRoZSBDbWRRRWxlbWVudHMuCisJCUNtZFFFbG10CSpwQ21kUUVsbXQgPSBOVUxMOworCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworCQlwQWQtPkNtZFEuQ21kUVN0YXRlID0gUlQyODcwX1RIUkVBRF9TVE9QRUQ7CisJCXdoaWxlKHBBZC0+Q21kUS5zaXplKQorCQl7CisJCQlSVFVTQkRlcXVldWVDbWQoJnBBZC0+Q21kUSwgJnBDbWRRRWxtdCk7CisJCQlpZiAocENtZFFFbG10KQorCQkJeworCQkJCWlmIChwQ21kUUVsbXQtPkNtZEZyb21OZGlzID09IFRSVUUpCisJCQkJeworCQkJCQlpZiAocENtZFFFbG10LT5idWZmZXIgIT0gTlVMTCkKKwkJCQkJCU5kaXNGcmVlTWVtb3J5KHBDbWRRRWxtdC0+YnVmZmVyLCBwQ21kUUVsbXQtPmJ1ZmZlcmxlbmd0aCwgMCk7CisKKwkJCQkJTmRpc0ZyZWVNZW1vcnkocENtZFFFbG10LCBzaXplb2YoQ21kUUVsbXQpLCAwKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKChwQ21kUUVsbXQtPmJ1ZmZlciAhPSBOVUxMKSAmJiAocENtZFFFbG10LT5idWZmZXJsZW5ndGggIT0gMCkpCisJCQkJCQlOZGlzRnJlZU1lbW9yeShwQ21kUUVsbXQtPmJ1ZmZlciwgcENtZFFFbG10LT5idWZmZXJsZW5ndGgsIDApOworCQkgICAgICAgICAgICB7CisJCQkJCQlOZGlzRnJlZU1lbW9yeShwQ21kUUVsbXQsIHNpemVvZihDbWRRRWxtdCksIDApOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisJfQorCS8qIG5vdGlmeSB0aGUgZXhpdCByb3V0aW5lIHRoYXQgd2UncmUgYWN0dWFsbHkgZXhpdGluZyBub3cKKwkgKgorCSAqIGNvbXBsZXRlKCkvd2FpdF9mb3JfY29tcGxldGlvbigpIGlzIHNpbWlsYXIgdG8gdXAoKS9kb3duKCksCisJICogZXhjZXB0IHRoYXQgY29tcGxldGUoKSBpcyBzYWZlIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzdHJ1Y3R1cmUKKwkgKiBpcyBnZXR0aW5nIGRlbGV0ZWQgaW4gYSBwYXJhbGxlbCBtb2RlIG9mIGV4ZWN1dGlvbiAoaS5lLiBqdXN0CisJICogYWZ0ZXIgdGhlIGRvd24oKSAtLSB0aGF0J3MgbmVjZXNzYXJ5IGZvciB0aGUgdGhyZWFkLXNodXRkb3duCisJICogY2FzZS4KKwkgKgorCSAqIGNvbXBsZXRlX2FuZF9leGl0KCkgZ29lcyBldmVuIGZ1cnRoZXIgdGhhbiB0aGlzIC0tIGl0IGlzIHNhZmUgaW4KKwkgKiB0aGUgY2FzZSB0aGF0IHRoZSB0aHJlYWQgb2YgdGhlIGNhbGxlciBpcyBnb2luZyBhd2F5IChub3QganVzdAorCSAqIHRoZSBzdHJ1Y3R1cmUpIC0tIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciB0aGUgbW9kdWxlLXJlbW92ZSBjYXNlLgorCSAqIFRoaXMgaXMgaW1wb3J0YW50IGluIHByZWVtcHRpb24ga2VybmVscywgd2hpY2ggdHJhbnNmZXIgdGhlIGZsb3cKKwkgKiBvZiBleGVjdXRpb24gaW1tZWRpYXRlbHkgdXBvbiBhIGNvbXBsZXRlKCkuCisJICovCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCAiPC0tLVJUVVNCQ21kVGhyZWFkXG4iKSk7CisKKwlwT2JqLT5SVFVTQkNtZFRocl9waWQgPSBOVUxMOworCisJY29tcGxldGVfYW5kX2V4aXQgKCZwQWQtPkNtZFFDb21wbGV0ZSwgMCk7CisJcmV0dXJuIDA7CisKK30KKworCitzdGF0aWMgdm9pZCBSVDI4NzBfVGltZXJRX0hhbmRsZShSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlpbnQgc3RhdHVzOworCVJBTElOS19USU1FUl9TVFJVQ1QJKnBUaW1lcjsKKwlSVDI4NzBfVElNRVJfRU5UUlkJKnBFbnRyeTsKKwl1bnNpZ25lZCBsb25nCWlycUZsYWc7CisKKwl3aGlsZSghcEFkLT5UaW1lckZ1bmNfa2lsbCkKKwl7CisvLwkJcHJpbnRrKCJ3YWl0aW5nIGZvciBldmVudCFcbiIpOworCQlwVGltZXIgPSBOVUxMOworCisJCXN0YXR1cyA9IGRvd25faW50ZXJydXB0aWJsZSgmKHBBZC0+UlRVU0JUaW1lcl9zZW1hcGhvcmUpKTsKKworCQlpZiAocEFkLT5UaW1lclEuc3RhdHVzID09IFJUMjg3MF9USFJFQURfU1RPUEVEKQorCQkJYnJlYWs7CisKKwkJLy8gZXZlbnQgaGFwcGVuZWQuCisJCXdoaWxlKHBBZC0+VGltZXJRLnBRSGVhZCkKKwkJeworCQkJUlRNUF9JUlFfTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFnKTsKKwkJCXBFbnRyeSA9IHBBZC0+VGltZXJRLnBRSGVhZDsKKwkJCWlmIChwRW50cnkpCisJCQl7CisJCQkJcFRpbWVyID0gcEVudHJ5LT5wUmFUaW1lcjsKKworCQkJCS8vIHVwZGF0ZSBwUUhlYWQKKwkJCQlwQWQtPlRpbWVyUS5wUUhlYWQgPSBwRW50cnktPnBOZXh0OworCQkJCWlmIChwRW50cnkgPT0gcEFkLT5UaW1lclEucFFUYWlsKQorCQkJCQlwQWQtPlRpbWVyUS5wUVRhaWwgPSBOVUxMOworCisJCQkJLy8gcmV0dXJuIHRoaXMgcXVldWUgZW50cnkgdG8gdGltZXJRRnJlZUxpc3QuCisJCQkJcEVudHJ5LT5wTmV4dCA9IHBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0OworCQkJCXBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0ID0gcEVudHJ5OworCQkJfQorCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWcpOworCisJCQlpZiAocFRpbWVyKQorCQkJeworCQkJCWlmIChwVGltZXItPmhhbmRsZSAhPSBOVUxMKQorCQkJCWlmICghcEFkLT5QTV9GbGdTdXNwZW5kKQorCQkJCQlwVGltZXItPmhhbmRsZShOVUxMLCAoUFZPSUQpIHBUaW1lci0+Y29va2llLCBOVUxMLCBwVGltZXIpOworCQkJCWlmICgocFRpbWVyLT5SZXBlYXQpICYmIChwVGltZXItPlN0YXRlID09IEZBTFNFKSkKKwkJCQkJUlRNUF9PU19BZGRfVGltZXIoJnBUaW1lci0+VGltZXJPYmosIHBUaW1lci0+VGltZXJWYWx1ZSk7CisJCQl9CisJCX0KKworCQlpZiAoc3RhdHVzICE9IDApCisJCXsKKwkJCXBBZC0+VGltZXJRLnN0YXR1cyA9IFJUMjg3MF9USFJFQURfU1RPUEVEOworCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworCitJTlQgVGltZXJRVGhyZWFkKAorCUlOIE9VVCBQVk9JRCBDb250ZXh0KQoreworCVBSVE1QX0FEQVBURVIJcEFkOworCVBPU19DT09LSUUJcE9iajsKKworCXBBZCA9IChQUlRNUF9BREFQVEVSKUNvbnRleHQ7CisJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKworCXJ0bXBfb3NfdGhyZWFkX2luaXQoInJ0Mjg3MFRpbWVyUUhhbmRsZSIsIChQVk9JRCkmKHBBZC0+VGltZXJRQ29tcGxldGUpKTsKKworCVJUMjg3MF9UaW1lclFfSGFuZGxlKHBBZCk7CisKKwkvKiBub3RpZnkgdGhlIGV4aXQgcm91dGluZSB0aGF0IHdlJ3JlIGFjdHVhbGx5IGV4aXRpbmcgbm93CisJICoKKwkgKiBjb21wbGV0ZSgpL3dhaXRfZm9yX2NvbXBsZXRpb24oKSBpcyBzaW1pbGFyIHRvIHVwKCkvZG93bigpLAorCSAqIGV4Y2VwdCB0aGF0IGNvbXBsZXRlKCkgaXMgc2FmZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgc3RydWN0dXJlCisJICogaXMgZ2V0dGluZyBkZWxldGVkIGluIGEgcGFyYWxsZWwgbW9kZSBvZiBleGVjdXRpb24gKGkuZS4ganVzdAorCSAqIGFmdGVyIHRoZSBkb3duKCkgLS0gdGhhdCdzIG5lY2Vzc2FyeSBmb3IgdGhlIHRocmVhZC1zaHV0ZG93bgorCSAqIGNhc2UuCisJICoKKwkgKiBjb21wbGV0ZV9hbmRfZXhpdCgpIGdvZXMgZXZlbiBmdXJ0aGVyIHRoYW4gdGhpcyAtLSBpdCBpcyBzYWZlIGluCisJICogdGhlIGNhc2UgdGhhdCB0aGUgdGhyZWFkIG9mIHRoZSBjYWxsZXIgaXMgZ29pbmcgYXdheSAobm90IGp1c3QKKwkgKiB0aGUgc3RydWN0dXJlKSAtLSB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIG1vZHVsZS1yZW1vdmUgY2FzZS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBpbiBwcmVlbXB0aW9uIGtlcm5lbHMsIHdoaWNoIHRyYW5zZmVyIHRoZSBmbG93CisJICogb2YgZXhlY3V0aW9uIGltbWVkaWF0ZWx5IHVwb24gYSBjb21wbGV0ZSgpLgorCSAqLworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCggIjwtLS0lc1xuIixfX0ZVTkNUSU9OX18pKTsKKworCXBPYmotPlRpbWVyUVRocl9waWQgPSBOVUxMOworCisJY29tcGxldGVfYW5kX2V4aXQoJnBBZC0+VGltZXJRQ29tcGxldGUsIDApOworCXJldHVybiAwOworCit9CisKKworUlQyODcwX1RJTUVSX0VOVFJZICpSVDI4NzBfVGltZXJRX0luc2VydCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBSQUxJTktfVElNRVJfU1RSVUNUICpwVGltZXIpCit7CisJUlQyODcwX1RJTUVSX0VOVFJZICpwUU5vZGUgPSBOVUxMLCAqcFFUYWlsOworCXVuc2lnbmVkIGxvbmcgaXJxRmxhZ3M7CisKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZ3MpOworCWlmIChwQWQtPlRpbWVyUS5zdGF0dXMgJiBSVDI4NzBfVEhSRUFEX0NBTl9ET19JTlNFUlQpCisJeworCQlpZihwQWQtPlRpbWVyUS5wUVBvbGxGcmVlTGlzdCkKKwkJeworCQkJcFFOb2RlID0gcEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3Q7CisJCQlwQWQtPlRpbWVyUS5wUVBvbGxGcmVlTGlzdCA9IHBRTm9kZS0+cE5leHQ7CisKKwkJCXBRTm9kZS0+cFJhVGltZXIgPSBwVGltZXI7CisJCQlwUU5vZGUtPnBOZXh0ID0gTlVMTDsKKworCQkJcFFUYWlsID0gcEFkLT5UaW1lclEucFFUYWlsOworCQkJaWYgKHBBZC0+VGltZXJRLnBRVGFpbCAhPSBOVUxMKQorCQkJCXBRVGFpbC0+cE5leHQgPSBwUU5vZGU7CisJCQlwQWQtPlRpbWVyUS5wUVRhaWwgPSBwUU5vZGU7CisJCQlpZiAocEFkLT5UaW1lclEucFFIZWFkID09IE5VTEwpCisJCQkJcEFkLT5UaW1lclEucFFIZWFkID0gcFFOb2RlOworCQl9CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFncyk7CisKKwkJaWYgKHBRTm9kZSkKKwkJCXVwKCZwQWQtPlJUVVNCVGltZXJfc2VtYXBob3JlKTsKKwkJCS8vd2FrZV91cCgmdGltZXJXYWl0USk7CisJfQorCWVsc2UKKwl7CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFncyk7CisJfQorCXJldHVybiBwUU5vZGU7Cit9CisKKworQk9PTEVBTiBSVDI4NzBfVGltZXJRX1JlbW92ZSgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBSQUxJTktfVElNRVJfU1RSVUNUICpwVGltZXIpCit7CisJUlQyODcwX1RJTUVSX0VOVFJZICpwTm9kZSwgKnBQcmV2ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGlycUZsYWdzOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5UaW1lclFMb2NrLCBpcnFGbGFncyk7CisJaWYgKHBBZC0+VGltZXJRLnN0YXR1cyA+PSBSVDI4NzBfVEhSRUFEX0lOSVRFRCkKKwl7CisJCXBOb2RlID0gcEFkLT5UaW1lclEucFFIZWFkOworCQl3aGlsZSAocE5vZGUpCisJCXsKKwkJCWlmIChwTm9kZS0+cFJhVGltZXIgPT0gcFRpbWVyKQorCQkJCWJyZWFrOworCQkJcFByZXYgPSBwTm9kZTsKKwkJCXBOb2RlID0gcE5vZGUtPnBOZXh0OworCQl9CisKKwkJLy8gTm93IG1vdmUgaXQgdG8gZnJlZUxpc3QgcXVldWUuCisJCWlmIChwTm9kZSkKKwkJeworCQkJaWYgKHBOb2RlID09IHBBZC0+VGltZXJRLnBRSGVhZCkKKwkJCQlwQWQtPlRpbWVyUS5wUUhlYWQgPSBwTm9kZS0+cE5leHQ7CisJCQlpZiAocE5vZGUgPT0gcEFkLT5UaW1lclEucFFUYWlsKQorCQkJCXBBZC0+VGltZXJRLnBRVGFpbCA9IHBQcmV2OworCQkJaWYgKHBQcmV2ICE9IE5VTEwpCisJCQkJcFByZXYtPnBOZXh0ID0gcE5vZGUtPnBOZXh0OworCisJCQkvLyByZXR1cm4gdGhpcyBxdWV1ZSBlbnRyeSB0byB0aW1lclFGcmVlTGlzdC4KKwkJCXBOb2RlLT5wTmV4dCA9IHBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0OworCQkJcEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3QgPSBwTm9kZTsKKwkJfQorCX0KKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZ3MpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKwordm9pZCBSVDI4NzBfVGltZXJRX0V4aXQoUlRNUF9BREFQVEVSICpwQWQpCit7CisJUlQyODcwX1RJTUVSX0VOVFJZICpwVGltZXJROworCXVuc2lnbmVkIGxvbmcgaXJxRmxhZ3M7CisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWdzKTsKKwl3aGlsZSAocEFkLT5UaW1lclEucFFIZWFkKQorCXsKKwkJcFRpbWVyUSA9IHBBZC0+VGltZXJRLnBRSGVhZDsKKwkJcEFkLT5UaW1lclEucFFIZWFkID0gcFRpbWVyUS0+cE5leHQ7CisJCS8vIHJlbW92ZSB0aGUgdGltZVEKKwl9CisJcEFkLT5UaW1lclEucFFQb2xsRnJlZUxpc3QgPSBOVUxMOworCW9zX2ZyZWVfbWVtKHBBZCwgcEFkLT5UaW1lclEucFRpbWVyUVBvbGwpOworCXBBZC0+VGltZXJRLnBRVGFpbCA9IE5VTEw7CisJcEFkLT5UaW1lclEucFFIZWFkID0gTlVMTDsKKwlwQWQtPlRpbWVyUS5zdGF0dXMgPSBSVDI4NzBfVEhSRUFEX1NUT1BFRDsKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZ3MpOworCit9CisKKwordm9pZCBSVDI4NzBfVGltZXJRX0luaXQoUlRNUF9BREFQVEVSICpwQWQpCit7CisJaW50IAlpOworCVJUMjg3MF9USU1FUl9FTlRSWSAqcFFOb2RlLCAqcEVudHJ5OworCXVuc2lnbmVkIGxvbmcgaXJxRmxhZ3M7CisKKwlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5UaW1lclFMb2NrKTsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+VGltZXJRTG9jaywgaXJxRmxhZ3MpOworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlRpbWVyUSwgc2l6ZW9mKHBBZC0+VGltZXJRKSk7CisJLy9JbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPlRpbWVyUS5jb3VudCwgMCk7CisKKwkvKiBJbml0aWFsaXNlIHRoZSB3YWl0IHEgaGVhZCAqLworCS8vaW5pdF93YWl0cXVldWVfaGVhZCgmdGltZXJXYWl0USk7CisKKwlvc19hbGxvY19tZW0ocEFkLCAmcEFkLT5UaW1lclEucFRpbWVyUVBvbGwsIHNpemVvZihSVDI4NzBfVElNRVJfRU5UUlkpICogVElNRVJfUVVFVUVfU0laRV9NQVgpOworCWlmIChwQWQtPlRpbWVyUS5wVGltZXJRUG9sbCkKKwl7CisJCXBFbnRyeSA9IE5VTEw7CisJCXBRTm9kZSA9IChSVDI4NzBfVElNRVJfRU5UUlkgKilwQWQtPlRpbWVyUS5wVGltZXJRUG9sbDsKKwkJZm9yIChpID0gMCA7aSA8VElNRVJfUVVFVUVfU0laRV9NQVg7IGkrKykKKwkJeworCQkJcFFOb2RlLT5wTmV4dCA9IHBFbnRyeTsKKwkJCXBFbnRyeSA9IHBRTm9kZTsKKwkJCXBRTm9kZSsrOworCQl9CisJCXBBZC0+VGltZXJRLnBRUG9sbEZyZWVMaXN0ID0gcEVudHJ5OworCQlwQWQtPlRpbWVyUS5wUUhlYWQgPSBOVUxMOworCQlwQWQtPlRpbWVyUS5wUVRhaWwgPSBOVUxMOworCQlwQWQtPlRpbWVyUS5zdGF0dXMgPSBSVDI4NzBfVEhSRUFEX0lOSVRFRDsKKwl9CisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlRpbWVyUUxvY2ssIGlycUZsYWdzKTsKK30KKworCitWT0lEIFJUMjg3MF9XYXRjaERvZyhJTiBSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlQSFRfVFhfQ09OVEVYVAkJcEhUVFhDb250ZXh0OworCWludCAJCQkJCWlkeDsKKwlVTE9ORwkJCQlpcnFGbGFnczsKKwlQVVJCCQkgICAJCXBVcmI7CisJQk9PTEVBTgkJCQluZWVkRHVtcFNlcSA9IEZBTFNFOworCVVJTlQzMiAgICAgICAgICAJTUFDVmFsdWU7CisKKworCWlkeCA9IDA7CisJUlRNUF9JT19SRUFEMzIocEFkLCBUWFJYUV9QQ05ULCAmTUFDVmFsdWUpOworCWlmICgoTUFDVmFsdWUgJiAweGZmKSAhPTAgKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVFggUVVFVUUgMCBOb3QgRU1QVFkoVmFsdWU9MHglMHgpLiAhISEhISEhISEhISEhISFcbiIsIE1BQ1ZhbHVlKSk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9DRkcsIDB4ZjQwMDEyKTsKKwkJd2hpbGUoKE1BQ1ZhbHVlICYweGZmKSAhPSAwICYmIChpZHgrKyA8IDEwKSkKKwkJeworCQkgICAgICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgVFhSWFFfUENOVCwgJk1BQ1ZhbHVlKTsKKwkJICAgICAgICBOZGlzTVNsZWVwKDEpOworCQl9CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9DRkcsIDB4ZjQwMDA2KTsKKwl9CisKKy8vUFMgcGFja2V0cyB1c2UgSENDQSBxdWV1ZSB3aGVuIGRlcXVldWUgZnJvbSBQUyB1bmljYXN0IHF1ZXVlIChXaUZpIFdQQTIgTUE5X0RUMSBmb3IgTWFydmVsbCBCIFNUQSkKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJaWR4ID0gMDsKKwkJaWYgKChNQUNWYWx1ZSAmIDB4ZmYwMCkgIT0wICkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVFggUVVFVUUgMSBOb3QgRU1QVFkoVmFsdWU9MHglMHgpLiAhISEhISEhISEhISEhISFcbiIsIE1BQ1ZhbHVlKSk7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfQ0ZHLCAweGY0MDAwYSk7CisJCQl3aGlsZSgoTUFDVmFsdWUgJjB4ZmYwMCkgIT0gMCAmJiAoaWR4KysgPCAxMCkpCisJCQl7CisJCQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWFJYUV9QQ05ULCAmTUFDVmFsdWUpOworCQkJCU5kaXNNU2xlZXAoMSk7CisJCQl9CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfQ0ZHLCAweGY0MDAwNik7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlpZiAocEFkLT53YXRjaERvZ1J4T3ZlckZsb3dDbnQgPj0gMikKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1heWJlIHRoZSBSeCBCdWxrLUluIGhhbmdlZCEgQ2FuY2VsIHRoZSBwZW5kaW5nIFJ4IGJ1bGtzIHJlcXVlc3QhXG4iKSk7CisJCWlmICgoIVJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9CVUxLSU5fUkVTRVQgfAorCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2FsbCBDTURUSFJFQURfUkVTRVRfQlVMS19JTiB0byBjYW5jZWwgdGhlIHBlbmRpbmcgUnggQnVsayFcbiIpKTsKKwkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCk7CisJCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9SRVNFVF9CVUxLX0lOLCBOVUxMLCAwKTsKKwkJCW5lZWREdW1wU2VxID0gVFJVRTsKKwkJfQorCQlwQWQtPndhdGNoRG9nUnhPdmVyRmxvd0NudCA9IDA7CisJfQorCisKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IE5VTV9PRl9UWF9SSU5HOyBpZHgrKykKKwl7CisJCXBVcmIgPSBOVUxMOworCisJCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbaWR4XSwgaXJxRmxhZ3MpOworCQlpZiAoKHBBZC0+QnVsa091dFBlbmRpbmdbaWR4XSA9PSBUUlVFKSAmJiBwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250KQorCQl7CisJCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W2lkeF0rKzsKKworCQkJaWYgKChwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W2lkeF0gPiAyKSAmJgorCQkJCSAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QgfCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpKSkKKwkJCQkpCisJCQl7CisJCQkJLy8gRklYTUU6IEZvbGxvd2luZyBjb2RlIGp1c3Qgc3VwcG9ydCBzaW5nbGUgYnVsayBvdXQuIElmIHlvdSB3YW5uYSBzdXBwb3J0IG11bHRpcGxlIGJ1bGsgb3V0LiBNb2RpZnkgaXQhCisJCQkJcEhUVFhDb250ZXh0ID0gKFBIVF9UWF9DT05URVhUKSgmcEFkLT5UeENvbnRleHRbaWR4XSk7CisJCQkJaWYgKHBIVFRYQ29udGV4dC0+SVJQUGVuZGluZykKKwkJCQl7CS8vIENoZWNrIFR4Q29udGV4dC4KKwkJCQkJcFVyYiA9IHBIVFRYQ29udGV4dC0+cFVyYjsKKwkJCQl9CisJCQkJZWxzZSBpZiAoaWR4ID09IE1HTVRQSVBFSURYKQorCQkJCXsKKwkJCQkJUFRYX0NPTlRFWFQgcE1MTUVDb250ZXh0LCBwTlVMTENvbnRleHQsIHBQc1BvbGxDb250ZXh0OworCisJCQkJCS8vQ2hlY2sgTWdtdENvbnRleHQuCisJCQkJCXBNTE1FQ29udGV4dCA9IChQVFhfQ09OVEVYVCkocEFkLT5NZ210UmluZy5DZWxsW3BBZC0+TWdtdFJpbmcuVHhEbWFJZHhdLkFsbG9jVmEpOworCQkJCQlwUHNQb2xsQ29udGV4dCA9IChQVFhfQ09OVEVYVCkoJnBBZC0+UHNQb2xsQ29udGV4dCk7CisJCQkJCXBOVUxMQ29udGV4dCA9IChQVFhfQ09OVEVYVCkoJnBBZC0+TnVsbENvbnRleHQpOworCisJCQkJCWlmIChwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcpCisJCQkJCXsKKwkJCQkJCUFTU0VSVChwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcpOworCQkJCQkJcFVyYiA9IHBNTE1FQ29udGV4dC0+cFVyYjsKKwkJCQkJfQorCQkJCQllbHNlIGlmIChwTlVMTENvbnRleHQtPklSUFBlbmRpbmcpCisJCQkJCXsKKwkJCQkJCUFTU0VSVChwTlVMTENvbnRleHQtPklSUFBlbmRpbmcpOworCQkJCQkJcFVyYiA9IHBOVUxMQ29udGV4dC0+cFVyYjsKKwkJCQkJfQorCQkJCQllbHNlIGlmIChwUHNQb2xsQ29udGV4dC0+SVJQUGVuZGluZykKKwkJCQkJeworCQkJCQkJQVNTRVJUKHBQc1BvbGxDb250ZXh0LT5JUlBQZW5kaW5nKTsKKwkJCQkJCXBVcmIgPSBwUHNQb2xsQ29udGV4dC0+cFVyYjsKKwkJCQkJfQorCQkJCX0KKworCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tpZHhdLCBpcnFGbGFncyk7CisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNYXliZSB0aGUgVHggQnVsay1PdXQgaGFuZ2VkISBDYW5jZWwgdGhlIHBlbmRpbmcgVHggYnVsa3MgcmVxdWVzdCBvZiBpZHgoJWQpIVxuIiwgaWR4KSk7CisJCQkJaWYgKHBVcmIpCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJVbmxpbmsgdGhlIHBlbmRpbmcgVVJCIVxuIikpOworCQkJCQkvLyB1bmxpbmsgaXQgbm93CisJCQkJCVJUVVNCX1VOTElOS19VUkIocFVyYik7CisJCQkJCS8vIFNsZWVwIDIwMCBtaWNyb3NlY29uZHMgdG8gZ2l2ZSBjYW5jZWxsYXRpb24gdGltZSB0byB3b3JrCisJCQkJCVJUTVB1c2VjRGVsYXkoMjAwKTsKKwkJCQkJbmVlZER1bXBTZXEgPSBUUlVFOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJVbmtvbncgYnVsa091dCBVUkIgbWF5YmUgaGFuZ2VkISEhISEhISEhISEhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tpZHhdLCBpcnFGbGFncyk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbaWR4XSwgaXJxRmxhZ3MpOworCQl9CisJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gRm9yIFNpZ21hIGRlYnVnLCBkdW1wIHRoZSBiYV9yZW9yZGVyaW5nIHNlcXVlbmNlLgorCWlmKChuZWVkRHVtcFNlcSA9PSBUUlVFKSAmJiAocEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID09IDApKQorCXsKKwkJVVNIT1JUCQkJCUlkeDsKKwkJUEJBX1JFQ19FTlRSWQkJcEJBRW50cnkgPSBOVUxMOworCQlVQ0hBUgkJCQljb3VudCA9IDA7CisJCXN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrOworCisJCUlkeCA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQkFSZWNXY2lkQXJyYXlbMF07CisKKwkJcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBUmVjRW50cnlbSWR4XTsKKwkJaWYoKHBCQUVudHJ5LT5saXN0LnFsZW4gPiAwKSAmJiAocEJBRW50cnktPmxpc3QubmV4dCAhPSBOVUxMKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTklDVXBkYXRlUmF3Q291bnRlcnMoKTpUaGUgUXVldWVpbmcgcGt0IGluIHJlb3JkZXJpbmcgYnVmZmVyOlxuIikpOworCQkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEJBRW50cnktPlJ4UmVSaW5nTG9jayk7CisJCQltcGR1X2JsayA9IHBCQUVudHJ5LT5saXN0Lm5leHQ7CisJCQl3aGlsZSAobXBkdV9ibGspCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiXHQlZDpTZXEtJWQsIGJBTVNEVS0lZCFcbiIsIGNvdW50LCBtcGR1X2Jsay0+U2VxdWVuY2UsIG1wZHVfYmxrLT5iQU1TRFUpKTsKKwkJCQltcGR1X2JsayA9IG1wZHVfYmxrLT5uZXh0OworCQkJCWNvdW50Kys7CisJCQl9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlxucEJBRW50cnktPkxhc3RJbmRTZXE9JWQhXG4iLCBwQkFFbnRyeS0+TGFzdEluZFNlcSkpOworCQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEJBRW50cnktPlJ4UmVSaW5nTG9jayk7CisJCX0KKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgUmVsZWFzZSBhbGxvY2F0ZWQgcmVzb3VyY2VzLgorCitBcmd1bWVudHM6CisgICAgKmRldgkJCQlQb2ludCB0byB0aGUgUENJIG9yIFVTQiBkZXZpY2UKKwlwQWQJCQkJCWRyaXZlciBjb250cm9sIGJsb2NrIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorICAgIE5vbmUKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIF9ydHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIFBSVE1QX0FEQVBURVIgcEFkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXRfZGV2ID0gTlVMTDsKKworCisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgicnR1c2JfZGlzY29ubmVjdDogdW5yZWdpc3RlciB1c2JuZXQgdXNiLSVzLSVzXG4iLAorCQkJCWRldi0+YnVzLT5idXNfbmFtZSwgZGV2LT5kZXZwYXRoKSk7CisJaWYgKCFwQWQpCisJeworI2lmZGVmIE1VTFRJUExFX0NBUkRfU1VQUE9SVAorCQlpZiAoKHBBZC0+TUNfUm93SUQgPj0gMCkgJiYgKHBBZC0+TUNfUm93SUQgPD0gTUFYX05VTV9PRl9NVUxUSVBMRV9DQVJEKSkKKwkJCU1DX0NhcmRVc2VkW3BBZC0+TUNfUm93SURdID0gMDsgLy8gbm90IGNsZWFyIE1BQyBhZGRyZXNzCisjZW5kaWYgLy8gTVVMVElQTEVfQ0FSRF9TVVBQT1JUIC8vCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkJLyoga2VybmVsIDIuNCBzZXJpZXMgKi8KKwkJd2hpbGUoTU9EX0lOX1VTRSA+IDApCisJCXsKKwkJCU1PRF9ERUNfVVNFX0NPVU5UOworCQl9CisjZWxzZQorCQl1c2JfcHV0X2RldihkZXYpOworI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCisJCXByaW50aygicnR1c2JfZGlzY29ubmVjdDogcEFkID09IE5VTEwhXG4iKTsKKwkJcmV0dXJuOworCX0KKwlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKTsKKworCisKKwkvLyBmb3IgZGVidWcsIHdhaXQgdG8gc2hvdyBzb21lIG1lc3NhZ2VzIHRvIC9wcm9jIHN5c3RlbQorCXVkZWxheSgxKTsKKworCisKKworCW5ldF9kZXYgPSBwQWQtPm5ldF9kZXY7CisJaWYgKHBBZC0+bmV0X2RldiAhPSBOVUxMKQorCXsKKwkJcHJpbnRrKCJydHVzYl9kaXNjb25uZWN0OiB1bnJlZ2lzdGVyX25ldGRldigpLCBkZXYtPm5hbWU9JXMhXG4iLCBuZXRfZGV2LT5uYW1lKTsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYgKHBBZC0+bmV0X2Rldik7CisJfQorCXVkZWxheSgxKTsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkJLyoga2VybmVsIDIuNCBzZXJpZXMgKi8KKyNlbHNlCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKwl1ZGVsYXkoMSk7CisKKwkvLyBmcmVlIG5ldF9kZXZpY2UgbWVtb3J5CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCS8qIGtlcm5lbCAyLjQgc2VyaWVzICovCisJa2ZyZWUobmV0X2Rldik7CisjZWxzZQorCWZyZWVfbmV0ZGV2KG5ldF9kZXYpOworI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCisJLy8gZnJlZSBhZGFwdGVyIG1lbW9yeQorCVJUTVBGcmVlQWRhcHRlcihwQWQpOworCisJLy8gcmVsZWFzZSBhIHVzZSBvZiB0aGUgdXNiIGRldmljZSBzdHJ1Y3R1cmUKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkJLyoga2VybmVsIDIuNCBzZXJpZXMgKi8KKwl3aGlsZShNT0RfSU5fVVNFID4gMCkKKwl7CisJCU1PRF9ERUNfVVNFX0NPVU5UOworCX0KKyNlbHNlCisJdXNiX3B1dF9kZXYoZGV2KTsKKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKwl1ZGVsYXkoMSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIgUlRVU0IgZGlzY29ubmVjdCBzdWNjZXNzZnVsbHlcbiIpKTsKK30KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIFByb2JlIFJUMjhYWCBjaGlwc2V0LgorCitBcmd1bWVudHM6CisgICAgKmRldgkJCQlQb2ludCB0byB0aGUgUENJIG9yIFVTQiBkZXZpY2UKKwlpbnRlcmZhY2UKKwkqaWRfdGFibGUJCQlQb2ludCB0byB0aGUgUENJIG9yIFVTQiBkZXZpY2UgSUQKKworUmV0dXJuIFZhbHVlOgorICAgIE5vbmUKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkJLyoga2VybmVsIDIuNCBzZXJpZXMgKi8KK3N0YXRpYyB2b2lkICpydHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBVSU5UIGludGVyZmFjZSwKKwkJCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZDsKKwlydDI4eHhfcHJvYmUoKHZvaWQgKilkZXYsICh2b2lkICopaWQsIGludGVyZmFjZSwgJnBBZCk7CisJcmV0dXJuICh2b2lkICopcEFkOworfQorCisvL0Rpc2Nvbm5lY3QgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGhpbiBleGl0IHJvdXRpbmUKK3N0YXRpYyB2b2lkIHJ0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKQoreworCV9ydHVzYl9kaXNjb25uZWN0KGRldiwgKChQUlRNUF9BREFQVEVSKXB0cikpOworfQorCisjZWxzZQkvKiBrZXJuZWwgMi42IHNlcmllcyAqLworc3RhdGljIGludCBydHVzYl9wcm9iZSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJUFJUTVBfQURBUFRFUiBwQWQ7CisJcmV0dXJuIChpbnQpcnQyOHh4X3Byb2JlKCh2b2lkICopaW50ZiwgKHZvaWQgKilpZCwgMCwgJnBBZCk7Cit9CisKKworc3RhdGljIHZvaWQgcnR1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAgICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCVBSVE1QX0FEQVBURVIgICAgICAgcEFkOworCisKKwlwQWQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisKKwlfcnR1c2JfZGlzY29ubmVjdChkZXYsIHBBZCk7Cit9CisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBDbG9zZSBrZXJuZWwgdGhyZWFkcy4KKworQXJndW1lbnRzOgorCSpwQWQJCQkJdGhlIHJheHggaW50ZXJmYWNlIGRhdGEgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgTk9ORQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVDI4eHhUaHJlYWRUZXJtaW5hdGUoCisJSU4gUlRNUF9BREFQVEVSICpwQWQpCit7CisJUE9TX0NPT0tJRQlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCUlOVAkJCXJldDsKKworCisJLy8gU2xlZXAgNTAgbWlsbGlzZWNvbmRzIHNvIHBlbmRpbmcgaW8gbWlnaHQgZmluaXNoIG5vcm1hbGx5CisJUlRNUHVzZWNEZWxheSg1MDAwMCk7CisKKwkvLyBXZSB3YW50IHRvIHdhaXQgdW50aWwgYWxsIHBlbmRpbmcgcmVjZWl2ZXMgYW5kIHNlbmRzIHRvIHRoZQorCS8vIGRldmljZSBvYmplY3QuIFdlIGNhbmNlbCBhbnkKKwkvLyBpcnBzLiBXYWl0IHVudGlsIHNlbmRzIGFuZCByZWNlaXZlcyBoYXZlIHN0b3BwZWQuCisJUlRVU0JDYW5jZWxQZW5kaW5nSVJQcyhwQWQpOworCisJLy8gVGVybWluYXRlIFRocmVhZHMKKwlpZiAocE9iai0+TUxNRVRocl9waWQpCisJeworCQlwcmludGsoIlRlcm1pbmF0ZSB0aGUgTUxNRVRocl9waWQ9JWQhXG4iLCBwaWRfbnIocE9iai0+TUxNRVRocl9waWQpKTsKKwkJbWIoKTsKKwkJcEFkLT5tbG1lX2tpbGwgPSAxOworCQkvL1JUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKwkJbWIoKTsKKwkJcmV0ID0ga2lsbF9waWQocE9iai0+TUxNRVRocl9waWQsIFNJR1RFUk0sIDEpOworCQlpZiAocmV0KQorCQl7CisJCQlwcmludGsgKEtFUk5fV0FSTklORyAiJXM6IHVuYWJsZSB0byBNbG1lIHRocmVhZCwgcGlkPSVkLCByZXQ9JWQhXG4iLAorCQkJCQlwQWQtPm5ldF9kZXYtPm5hbWUsIHBpZF9ucihwT2JqLT5NTE1FVGhyX3BpZCksIHJldCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvL3dhaXRfZm9yX2NvbXBsZXRpb24gKCZwQWQtPm5vdGlmeSk7CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uICgmcEFkLT5tbG1lQ29tcGxldGUpOworCQkJcE9iai0+TUxNRVRocl9waWQgPSBOVUxMOworCQl9CisJfQorCisJaWYgKHBPYmotPlJUVVNCQ21kVGhyX3BpZCA+PSAwKQorCXsKKwkJcHJpbnRrKCJUZXJtaW5hdGUgdGhlIFJUVVNCQ21kVGhyX3BpZD0lZCFcbiIsIHBpZF9ucihwT2JqLT5SVFVTQkNtZFRocl9waWQpKTsKKwkJbWIoKTsKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisJCXBBZC0+Q21kUS5DbWRRU3RhdGUgPSBSVDI4NzBfVEhSRUFEX1NUT1BFRDsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisJCW1iKCk7CisJCS8vUlRVU0JDTURVcChwQWQpOworCQlyZXQgPSBraWxsX3BpZChwT2JqLT5SVFVTQkNtZFRocl9waWQsIFNJR1RFUk0sIDEpOworCQlpZiAocmV0KQorCQl7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIFJUVVNCQ21kIHRocmVhZCwgcGlkPSVkLCByZXQ9JWQhXG4iLAorCQkJCQlwQWQtPm5ldF9kZXYtPm5hbWUsIHBpZF9ucihwT2JqLT5SVFVTQkNtZFRocl9waWQpLCByZXQpOworCQl9CisJCWVsc2UKKwkJeworCQkJLy93YWl0X2Zvcl9jb21wbGV0aW9uICgmcEFkLT5ub3RpZnkpOworCQkJd2FpdF9mb3JfY29tcGxldGlvbiAoJnBBZC0+Q21kUUNvbXBsZXRlKTsKKwkJCXBPYmotPlJUVVNCQ21kVGhyX3BpZCA9IE5VTEw7CisJCX0KKwl9CisJaWYgKHBPYmotPlRpbWVyUVRocl9waWQgPj0gMCkKKwl7CisJCVBPU19DT09LSUUgcE9iaiA9IChQT1NfQ09PS0lFKXBBZC0+T1NfQ29va2llOworCisJCXByaW50aygiVGVybWluYXRlIHRoZSBUaW1lclFUaHJfcGlkPSVkIVxuIiwgcGlkX25yKHBPYmotPlRpbWVyUVRocl9waWQpKTsKKwkJbWIoKTsKKwkJcEFkLT5UaW1lckZ1bmNfa2lsbCA9IDE7CisJCW1iKCk7CisJCXJldCA9IGtpbGxfcGlkKHBPYmotPlRpbWVyUVRocl9waWQsIFNJR1RFUk0sIDEpOworCQlpZiAocmV0KQorCQl7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIHN0b3AgVGltZXJRVGhyZWFkLCBwaWQ9JWQsIHJldD0lZCFcbiIsCisJCQkJCXBBZC0+bmV0X2Rldi0+bmFtZSwgcGlkX25yKHBPYmotPlRpbWVyUVRocl9waWQpLCByZXQpOworCQl9CisJCWVsc2UKKwkJeworCQkJcHJpbnRrKCJ3YWl0X2Zvcl9jb21wbGV0aW9uIFRpbWVyUVRoclxuIik7CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZwQWQtPlRpbWVyUUNvbXBsZXRlKTsKKwkJCXBPYmotPlRpbWVyUVRocl9waWQgPSBOVUxMOworCQl9CisJfQorCS8vIEtpbGwgdGFza2xldHMKKwlwQWQtPm1sbWVfa2lsbCA9IDA7CisJcEFkLT5DbWRRLkNtZFFTdGF0ZSA9IFJUMjg3MF9USFJFQURfVU5LTk9XTjsKKwlwQWQtPlRpbWVyRnVuY19raWxsID0gMDsKK30KKworCit2b2lkIGtpbGxfdGhyZWFkX3Rhc2soSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJUE9TX0NPT0tJRSBwT2JqOworCisJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKworCXRhc2tsZXRfa2lsbCgmcE9iai0+cnhfZG9uZV90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJnBPYmotPm1nbXRfZG1hX2RvbmVfdGFzayk7CisJdGFza2xldF9raWxsKCZwT2JqLT5hYzBfZG1hX2RvbmVfdGFzayk7CisJdGFza2xldF9raWxsKCZwT2JqLT5hYzFfZG1hX2RvbmVfdGFzayk7CisJdGFza2xldF9raWxsKCZwT2JqLT5hYzJfZG1hX2RvbmVfdGFzayk7CisJdGFza2xldF9raWxsKCZwT2JqLT5hYzNfZG1hX2RvbmVfdGFzayk7CisJdGFza2xldF9raWxsKCZwT2JqLT5oY2NhX2RtYV9kb25lX3Rhc2spOworCXRhc2tsZXRfa2lsbCgmcE9iai0+dGJ0dF90YXNrKTsKKworfQorCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgQ2hlY2sgdGhlIGNoaXBzZXQgdmVuZG9yL3Byb2R1Y3QgSUQuCisKK0FyZ3VtZW50czoKKyAgICBfZGV2X3AJCQkJUG9pbnQgdG8gdGhlIFBDSSBvciBVU0IgZGV2aWNlCisKK1JldHVybiBWYWx1ZToKKyAgICBUUlVFCQkJCUNoZWNrIG9rCisJRkFMU0UJCQkJQ2hlY2sgZmFpbAorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTiBSVDI4WFhDaGlwc2V0Q2hlY2soCisJSU4gdm9pZCAqX2Rldl9wKQoreworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQkvKiBrZXJuZWwgMi40IHNlcmllcyAqLworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZfcCA9IChzdHJ1Y3QgdXNiX2RldmljZSAqKV9kZXZfcDsKKyNlbHNlCisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKilfZGV2X3A7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldl9wID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKwlVSU5UMzIgaTsKKworCisJZm9yKGk9MDsgaTxydHVzYl91c2JfaWRfbGVuOyBpKyspCisJeworCQlpZiAoZGV2X3AtPmRlc2NyaXB0b3IuaWRWZW5kb3IgPT0gcnR1c2JfdXNiX2lkW2ldLmlkVmVuZG9yICYmCisJCQlkZXZfcC0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0gcnR1c2JfdXNiX2lkW2ldLmlkUHJvZHVjdCkKKwkJeworCQkJcHJpbnRrKCJydDI4NzA6IGlkVmVuZG9yID0gMHgleCwgaWRQcm9kdWN0ID0gMHgleFxuIiwKKwkJCQkJZGV2X3AtPmRlc2NyaXB0b3IuaWRWZW5kb3IsIGRldl9wLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09IHJ0dXNiX3VzYl9pZF9sZW4pCisJeworCQlwcmludGsoInJ0Mjg3MDogRXJyb3IhIERldmljZSBEZXNjcmlwdG9yIG5vdCBtYXRjaGluZyFcbiIpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBJbml0IG5ldCBkZXZpY2Ugc3RydWN0dXJlLgorCitBcmd1bWVudHM6CisgICAgX2Rldl9wCQkJCVBvaW50IHRvIHRoZSBQQ0kgb3IgVVNCIGRldmljZQorICAgICpuZXRfZGV2CQkJUG9pbnQgdG8gdGhlIG5ldCBkZXZpY2UKKwkqcEFkCQkJCXRoZSByYXh4IGludGVyZmFjZSBkYXRhIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorICAgIFRSVUUJCQkJSW5pdCBvaworCUZBTFNFCQkJCUluaXQgZmFpbAorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTiBSVDI4WFhOZXREZXZJbml0KAorCUlOIHZvaWQgCQkJCSpfZGV2X3AsCisJSU4gc3RydWN0ICBuZXRfZGV2aWNlCSpuZXRfZGV2LAorCUlOIFJUTVBfQURBUFRFUiAJCSpwQWQpCit7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCS8qIGtlcm5lbCAyLjQgc2VyaWVzICovCisJc3RydWN0IHVzYl9kZXZpY2UgKmRldl9wID0gKHN0cnVjdCB1c2JfZGV2aWNlICopX2Rldl9wOworI2Vsc2UKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKV9kZXZfcDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2X3AgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkJLyoga2VybmVsIDIuNCBzZXJpZXMgKi8KKwlwQWQtPmNvbmZpZyA9IGRldl9wLT5jb25maWc7CisjZWxzZQorCXBBZC0+Y29uZmlnID0gJmRldl9wLT5jb25maWctPmRlc2M7CisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisJcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBJbml0IG5ldCBkZXZpY2Ugc3RydWN0dXJlLgorCitBcmd1bWVudHM6CisgICAgX2Rldl9wCQkJCVBvaW50IHRvIHRoZSBQQ0kgb3IgVVNCIGRldmljZQorCSpwQWQJCQkJdGhlIHJheHggaW50ZXJmYWNlIGRhdGEgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgVFJVRQkJCQlDb25maWcgb2sKKwlGQUxTRQkJCQlDb25maWcgZmFpbAorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorQk9PTEVBTiBSVDI4WFhQcm9iZVBvc3RDb25maWcoCisJSU4gdm9pZCAJCQkJKl9kZXZfcCwKKwlJTiBSVE1QX0FEQVBURVIgCQkqcEFkLAorCUlOIElOVDMyCQkJCWludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2X3AgPSAoc3RydWN0IHVzYl9kZXZpY2UgKilfZGV2X3A7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqaWZhY2VfZGVzYzsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCVVMT05HIEJ1bGtPdXRJZHg7CisJVUlOVDMyIGk7CisKKworCS8qIGdldCB0aGUgYWN0aXZlIGludGVyZmFjZSBkZXNjcmlwdG9yICovCisJaW50ZiA9ICZkZXZfcC0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaW50ZXJmYWNlXTsKKwlpZmFjZV9kZXNjID0gJmludGYtPmFsdHNldHRpbmdbMF07CisKKwkvKiBnZXQgIyBvZiBlbnBvaW50cyAqLworCXBBZC0+TnVtYmVyT2ZQaXBlcyA9IGlmYWNlX2Rlc2MtPmJOdW1FbmRwb2ludHM7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTnVtRW5kcG9pbnRzPSVkXG4iLCBpZmFjZV9kZXNjLT5iTnVtRW5kcG9pbnRzKSk7CisKKwkvKiBDb25maWd1cmUgUGlwZXMgKi8KKwllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFswXTsKKwlCdWxrT3V0SWR4ID0gMDsKKworCWZvcihpPTA7IGk8cEFkLT5OdW1iZXJPZlBpcGVzOyBpKyspCisJeworCQlpZiAoKGVuZHBvaW50W2ldLmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSAmJgorCQkJKChlbmRwb2ludFtpXS5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX0lOKSkKKwkJeworCQkJcEFkLT5CdWxrSW5FcEFkZHIgPSBlbmRwb2ludFtpXS5iRW5kcG9pbnRBZGRyZXNzOworCQkJcEFkLT5CdWxrSW5NYXhQYWNrZXRTaXplID0gZW5kcG9pbnRbaV0ud01heFBhY2tldFNpemU7CisKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKKwkJCQkoIkJVTEsgSU4gTWF4aW11bVBhY2tldFNpemUgPSAlZFxuIiwgcEFkLT5CdWxrSW5NYXhQYWNrZXRTaXplKSk7CisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCisJCQkJKCJFUCBhZGRyZXNzID0gMHglMnggIFxuIiwgZW5kcG9pbnRbaV0uYkVuZHBvaW50QWRkcmVzcykpOworCQl9CisJCWVsc2UgaWYgKChlbmRwb2ludFtpXS5ibUF0dHJpYnV0ZXMgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgJiYKKwkJCQkoKGVuZHBvaW50W2ldLmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKSkKKwkJeworCQkJLy8gVGhlcmUgYXJlIDYgYnVsayBvdXQgRVAuIEVQNiBoaWdoZXN0IHByaW9yaXR5LgorCQkJLy8gRVAxLTQgaXMgRURDQS4gIEVQNSBpcyBIQ0NBLgorCQkJcEFkLT5CdWxrT3V0RXBBZGRyW0J1bGtPdXRJZHgrK10gPSBlbmRwb2ludFtpXS5iRW5kcG9pbnRBZGRyZXNzOworCQkJcEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSA9IGVuZHBvaW50W2ldLndNYXhQYWNrZXRTaXplOworCisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCisJCQkJKCJCVUxLIE9VVCBNYXhpbXVtUGFja2V0U2l6ZSA9ICVkXG4iLCBwQWQtPkJ1bGtPdXRNYXhQYWNrZXRTaXplKSk7CisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCisJCQkJKCJFUCBhZGRyZXNzID0gMHglMnggIFxuIiwgZW5kcG9pbnRbaV0uYkVuZHBvaW50QWRkcmVzcykpOworCQl9CisJfQorCisJaWYgKCEocEFkLT5CdWxrSW5FcEFkZHIgJiYgcEFkLT5CdWxrT3V0RXBBZGRyWzBdKSkKKwl7CisJCXByaW50aygiQ291bGQgbm90IGZpbmQgYm90aCBidWxrLWluIGFuZCBidWxrLW91dCBlbmRwb2ludHNcbiIpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKyNlbHNlCitCT09MRUFOIFJUMjhYWFByb2JlUG9zdENvbmZpZygKKwlJTiB2b2lkIAkJCQkqX2Rldl9wLAorCUlOIFJUTVBfQURBUFRFUiAJCSpwQWQsCisJSU4gSU5UMzIJCQkJaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gKHN0cnVjdCB1c2JfaW50ZXJmYWNlICopX2Rldl9wOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJVUxPTkcgQnVsa091dElkeDsKKwlVSU5UMzIgaTsKKworCisJLyogZ2V0IHRoZSBhY3RpdmUgaW50ZXJmYWNlIGRlc2NyaXB0b3IgKi8KKwlpZmFjZV9kZXNjID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisKKwkvKiBnZXQgIyBvZiBlbnBvaW50cyAgKi8KKwlwQWQtPk51bWJlck9mUGlwZXMgPSBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCisJCQkoIk51bUVuZHBvaW50cz0lZFxuIiwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzKSk7CisKKwkvKiBDb25maWd1cmUgUGlwZXMgKi8KKwlCdWxrT3V0SWR4ID0gMDsKKworCWZvcihpPTA7IGk8cEFkLT5OdW1iZXJPZlBpcGVzOyBpKyspCisJeworCQlpZiAoKGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2MuYm1BdHRyaWJ1dGVzID09CisJCQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgJiYKKwkJCSgoaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYKKwkJCQlVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pKQorCQl7CisJCQlwQWQtPkJ1bGtJbkVwQWRkciA9IGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzczsKKwkJCXBBZC0+QnVsa0luTWF4UGFja2V0U2l6ZSA9IGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2Mud01heFBhY2tldFNpemU7CisKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKKwkJCQkoIkJVTEsgSU4gTWF4aW11bVBhY2tldFNpemUgPSAlZFxuIiwgcEFkLT5CdWxrSW5NYXhQYWNrZXRTaXplKSk7CisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsCisJCQkJKCJFUCBhZGRyZXNzID0gMHglMnhcbiIsIGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2MuYkVuZHBvaW50QWRkcmVzcykpOworCQl9CisJCWVsc2UgaWYgKChpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjLmJtQXR0cmlidXRlcyA9PQorCQkJCQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSAmJgorCQkJCSgoaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYKKwkJCQkJVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX09VVCkpCisJCXsKKwkJCS8vIHRoZXJlIGFyZSA2IGJ1bGsgb3V0IEVQLiBFUDYgaGlnaGVzdCBwcmlvcml0eS4KKwkJCS8vIEVQMS00IGlzIEVEQ0EuICBFUDUgaXMgSENDQS4KKwkJCXBBZC0+QnVsa091dEVwQWRkcltCdWxrT3V0SWR4KytdID0gaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQkJcEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSA9IGlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2Mud01heFBhY2tldFNpemU7CisKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKKwkJCQkoIkJVTEsgT1VUIE1heGltdW1QYWNrZXRTaXplID0gJWRcbiIsIHBBZC0+QnVsa091dE1heFBhY2tldFNpemUpKTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwKKwkJCQkoIkVQIGFkZHJlc3MgPSAweCUyeCAgXG4iLCBpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjLmJFbmRwb2ludEFkZHJlc3MpKTsKKwkJfQorCX0KKworCWlmICghKHBBZC0+QnVsa0luRXBBZGRyICYmIHBBZC0+QnVsa091dEVwQWRkclswXSkpCisJeworCQlwcmludGsoIiVzOiBDb3VsZCBub3QgZmluZCBib3RoIGJ1bGstaW4gYW5kIGJ1bGstb3V0IGVuZHBvaW50c1xuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIExJTlVYX1ZFUlNJT05fQ09ERSAvLworCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgRGlzYWJsZSBETUEuCisKK0FyZ3VtZW50czoKKwkqcEFkCQkJCXRoZSByYXh4IGludGVyZmFjZSBkYXRhIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorCU5vbmUKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlQyOFhYRE1BRGlzYWJsZSgKKwlJTiBSVE1QX0FEQVBURVIgCQkqcEFkKQoreworCS8vIG5vIHVzZQorfQorCisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBFbmFibGUgRE1BLgorCitBcmd1bWVudHM6CisJKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKwlOb25lCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUMjhYWERNQUVuYWJsZSgKKwlJTiBSVE1QX0FEQVBURVIgCQkqcEFkKQoreworCVdQRE1BX0dMT19DRkdfU1RSVUMJR2xvQ2ZnOworCVVTQl9ETUFfQ0ZHX1NUUlVDCVVzYkNmZzsKKwlpbnQJCQkJCWkgPSAwOworCisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4NCk7CisJZG8KKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgV1BETUFfR0xPX0NGRywgJkdsb0NmZy53b3JkKTsKKwkJaWYgKChHbG9DZmcuZmllbGQuVHhETUFCdXN5ID09IDApICAmJiAoR2xvQ2ZnLmZpZWxkLlJ4RE1BQnVzeSA9PSAwKSkKKwkJCWJyZWFrOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiAgRE1BQnVzeVxuIikpOworCQlSVE1QdXNlY0RlbGF5KDEwMDApOworCQlpKys7CisJfXdoaWxlICggaSA8MjAwKTsKKworCisJUlRNUHVzZWNEZWxheSg1MCk7CisJR2xvQ2ZnLmZpZWxkLkVuVFhXcml0ZUJhY2tERE9ORSA9IDE7CisJR2xvQ2ZnLmZpZWxkLkVuYWJsZVJ4RE1BID0gMTsKKwlHbG9DZmcuZmllbGQuRW5hYmxlVHhETUEgPSAxOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBXUklURSBETUEgb2Zmc2V0IDB4MjA4ID0gMHgleFxuIiwgR2xvQ2ZnLndvcmQpKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBXUERNQV9HTE9fQ0ZHLCBHbG9DZmcud29yZCk7CisKKwlVc2JDZmcud29yZCA9IDA7CisJVXNiQ2ZnLmZpZWxkLnBoeWNsZWFyID0gMDsKKwkvKiB1c2IgdmVyc2lvbiBpcyAxLjEsZG8gbm90IHVzZSBidWxrIGluIGFnZ3JlZ2F0aW9uICovCisJaWYgKHBBZC0+QnVsa0luTWF4UGFja2V0U2l6ZSA9PSA1MTIpCisJCQlVc2JDZmcuZmllbGQuUnhCdWxrQWdnRW4gPSAxOworCS8qIGZvciBsYXN0IHBhY2tldCwgUEJGIG1pZ2h0IHVzZSBtb3JlIHRoYW4gbGltaXRlZCwgc28gbWludXMgMiB0byBwcmV2ZW50IGZyb20gZXJyb3IgKi8KKwlVc2JDZmcuZmllbGQuUnhCdWxrQWdnTG10ID0gKE1BWF9SWEJVTEtfU0laRSAvMTAyNCktMzsKKwlVc2JDZmcuZmllbGQuUnhCdWxrQWdnVE91dCA9IDB4ODA7IC8qIDIwMDYtMTAtMTggKi8KKwlVc2JDZmcuZmllbGQuUnhCdWxrRW4gPSAxOworCVVzYkNmZy5maWVsZC5UeEJ1bGtFbiA9IDE7CisKKwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBVU0JfRE1BX0NGRywgVXNiQ2ZnLndvcmQpOworCit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgV3JpdGUgQmVhY29uIGJ1ZmZlciB0byBBc2ljLgorCitBcmd1bWVudHM6CisJKnBBZAkJCQl0aGUgcmF4eCBpbnRlcmZhY2UgZGF0YSBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKwlOb25lCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUMjh4eF9VcGRhdGVCZWFjb25Ub0FzaWMoCisJSU4gUlRNUF9BREFQVEVSCQkqcEFkLAorCUlOIElOVAkJCQlhcGlkeCwKKwlJTiBVTE9ORwkJCUZyYW1lTGVuLAorCUlOIFVMT05HCQkJVXBkYXRlUG9zKQoreworCVBVQ0hBUiAgICAgICAgCXBCZWFjb25GcmFtZSA9IE5VTEw7CisJVUNIQVIgIAkJCSpwdHI7CisJVUlOVCAgCQkJaSwgcGFkZGluZzsKKwlCRUFDT05fU1lOQ19TVFJVQ1QJKnBCZWFjb25TeW5jID0gcEFkLT5Db21tb25DZmcucEJlYWNvblN5bmM7CisJVUlOVDMyCQkJbG9uZ1ZhbHVlOworLy8JVVNIT1JUCQkJc2hvcnRWYWx1ZTsKKwlCT09MRUFOCQkJYkJjblJlcSA9IEZBTFNFOworCVVDSEFSCQkJYmNuX2lkeCA9IDA7CisKKworCWlmIChwQmVhY29uRnJhbWUgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgicEJlYWNvbkZyYW1lIGlzIE5VTEwhXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocEJlYWNvblN5bmMgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgicEJlYWNvblN5bmMgaXMgTlVMTCFcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCS8vaWYgKChwQWQtPldkc1RhYi5Nb2RlID09IFdEU19CUklER0VfTU9ERSkgfHwKKwkvLwkoKHBBZC0+QXBDZmcuTUJTU0lEW2FwaWR4XS5NU1NJRERldiA9PSBOVUxMKSB8fCAhKHBBZC0+QXBDZmcuTUJTU0lEW2FwaWR4XS5NU1NJRERldi0+ZmxhZ3MgJiBJRkZfVVApKQorCS8vCSkKKwlpZiAoYkJjblJlcSA9PSBGQUxTRSkKKwl7CisJCS8qIHdoZW4gdGhlIHJhIGludGVyZmFjZSBpcyBkb3duLCBkbyBub3Qgc2VuZCBpdHMgYmVhY29uIGZyYW1lICovCisJCS8qIGNsZWFyIGFsbCB6ZXJvICovCisJCWZvcihpPTA7IGk8VFhXSV9TSVpFOyBpKz00KSB7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBwQWQtPkJlYWNvbk9mZnNldFtiY25faWR4XSArIGksIDB4MDApOworCQl9CisJCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgJj0gKH4oQkVBQ09OX0JJVE1BUF9NQVNLICYgKDEgPDwgYmNuX2lkeCkpKTsKKwkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvblR4V0lbYmNuX2lkeF0sIFRYV0lfU0laRSk7CisJfQorCWVsc2UKKwl7CisJCXB0ciA9IChQVUNIQVIpJnBBZC0+QmVhY29uVHhXSTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCVJUTVBXSUVuZGlhbkNoYW5nZShwdHIsIFRZUEVfVFhXSSk7CisjZW5kaWYKKwkJaWYgKE5kaXNFcXVhbE1lbW9yeShwQmVhY29uU3luYy0+QmVhY29uVHhXSVtiY25faWR4XSwgJnBBZC0+QmVhY29uVHhXSSwgVFhXSV9TSVpFKSA9PSBGQUxTRSkKKwkJewkvLyBJZiBCZWFjb25UeFdJIGNoYW5nZWQsIHdlIG5lZWQgdG8gcmV3cml0ZSB0aGUgVHhXSSBmb3IgdGhlIEJlYWNvbiBmcmFtZXMuCisJCQlwQmVhY29uU3luYy0+QmVhY29uQml0TWFwICY9ICh+KEJFQUNPTl9CSVRNQVBfTUFTSyAmICgxIDw8IGJjbl9pZHgpKSk7CisJCQlOZGlzTW92ZU1lbW9yeShwQmVhY29uU3luYy0+QmVhY29uVHhXSVtiY25faWR4XSwgJnBBZC0+QmVhY29uVHhXSSwgVFhXSV9TSVpFKTsKKwkJfQorCisJCWlmICgocEJlYWNvblN5bmMtPkJlYWNvbkJpdE1hcCAmICgxIDw8IGJjbl9pZHgpKSAhPSAoMSA8PCBiY25faWR4KSkKKwkJeworCQkJZm9yIChpPTA7IGk8VFhXSV9TSVpFOyBpKz00KSAgLy8gMTYtYnl0ZSBUWFdJIGZpZWxkCisJCQl7CisJCQkJbG9uZ1ZhbHVlID0gICpwdHIgKyAoKihwdHIrMSk8PDgpICsgKCoocHRyKzIpPDwxNikgKyAoKihwdHIrMyk8PDI0KTsKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBwQWQtPkJlYWNvbk9mZnNldFtiY25faWR4XSArIGksIGxvbmdWYWx1ZSk7CisJCQkJcHRyICs9IDQ7CisJCQl9CisJCX0KKworCQlwdHIgPSBwQmVhY29uU3luYy0+QmVhY29uQnVmW2Jjbl9pZHhdOworCQlwYWRkaW5nID0gKEZyYW1lTGVuICYgMHgwMSk7CisJCU5kaXNaZXJvTWVtb3J5KChQVUNIQVIpKHBCZWFjb25GcmFtZSArIEZyYW1lTGVuKSwgcGFkZGluZyk7CisJCUZyYW1lTGVuICs9IHBhZGRpbmc7CisJCWZvciAoaSA9IDAgOyBpIDwgRnJhbWVMZW4gLypIV19CRUFDT05fT0ZGU0VUKi87IGkgKz0gMikKKwkJeworCQkJaWYgKE5kaXNFcXVhbE1lbW9yeShwdHIsIHBCZWFjb25GcmFtZSwgMikgPT0gRkFMU0UpCisJCQl7CisJCQkJTmRpc01vdmVNZW1vcnkocHRyLCBwQmVhY29uRnJhbWUsIDIpOworCQkJCS8vc2hvcnRWYWx1ZSA9ICpwdHIgKyAoKihwdHIrMSk8PDgpOworCQkJCS8vUlRNUF9JT19XUklURTgocEFkLCBwQWQtPkJlYWNvbk9mZnNldFtiY25faWR4XSArIFRYV0lfU0laRSArIGksIHNob3J0VmFsdWUpOworCQkJCVJUVVNCTXVsdGlXcml0ZShwQWQsIHBBZC0+QmVhY29uT2Zmc2V0W2Jjbl9pZHhdICsgVFhXSV9TSVpFICsgaSwgcHRyLCAyKTsKKwkJCX0KKwkJCXB0ciArPTI7CisJCQlwQmVhY29uRnJhbWUgKz0gMjsKKwkJfQorCisJCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgfD0gKDEgPDwgYmNuX2lkeCk7CisKKwkJLy8gRm9yIEFQIGludGVyZmFjZSwgc2V0IHRoZSBEdGltQml0T24gc28gdGhhdCB3ZSBjYW4gc2VuZCBCY2FzdC9NY2FzdCBmcmFtZSBvdXQgYWZ0ZXIgdGhpcyBiZWFjb24gZnJhbWUuCisJfQorCit9CisKKworVk9JRCBSVDI4NzBfQnNzQmVhY29uU3RvcCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlCRUFDT05fU1lOQ19TVFJVQ1QJKnBCZWFjb25TeW5jOworCWludCBpLCBvZmZzZXQ7CisJQk9PTEVBTglDYW5jZWxsZWQgPSBUUlVFOworCisJcEJlYWNvblN5bmMgPSBwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYzsKKwlpZiAocEJlYWNvblN5bmMgJiYgcEJlYWNvblN5bmMtPkVuYWJsZUJlYWNvbikKKwl7CisJCUlOVCBOdW1PZkJjbjsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCU51bU9mQmNuID0gTUFYX01FU0hfTlVNOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPkNvbW1vbkNmZy5CZWFjb25VcGRhdGVUaW1lciwgJkNhbmNlbGxlZCk7CisKKwkJZm9yKGk9MDsgaTxOdW1PZkJjbjsgaSsrKQorCQl7CisJCQlOZGlzWmVyb01lbW9yeShwQmVhY29uU3luYy0+QmVhY29uQnVmW2ldLCBIV19CRUFDT05fT0ZGU0VUKTsKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25UeFdJW2ldLCBUWFdJX1NJWkUpOworCisJCQlmb3IgKG9mZnNldD0wOyBvZmZzZXQ8SFdfQkVBQ09OX09GRlNFVDsgb2Zmc2V0Kz00KQorCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIHBBZC0+QmVhY29uT2Zmc2V0W2ldICsgb2Zmc2V0LCAweDAwKTsKKworCQkJcEJlYWNvblN5bmMtPkNhcGFiaWxpdHlJbmZvTG9jYXRpb25JbkJlYWNvbltpXSA9IDA7CisJCQlwQmVhY29uU3luYy0+VGltSUVMb2NhdGlvbkluQmVhY29uW2ldID0gMDsKKwkJfQorCQlwQmVhY29uU3luYy0+QmVhY29uQml0TWFwID0gMDsKKwkJcEJlYWNvblN5bmMtPkR0aW1CaXRPbiA9IDA7CisJfQorfQorCisKK1ZPSUQgUlQyODcwX0Jzc0JlYWNvblN0YXJ0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKQoreworCWludCBhcGlkeDsKKwlCRUFDT05fU1lOQ19TVFJVQ1QJKnBCZWFjb25TeW5jOworLy8JTEFSR0VfSU5URUdFUiAJdHNmVGltZSwgZGVsdGFUaW1lOworCisJcEJlYWNvblN5bmMgPSBwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYzsKKwlpZiAocEJlYWNvblN5bmMgJiYgcEJlYWNvblN5bmMtPkVuYWJsZUJlYWNvbikKKwl7CisJCUlOVCBOdW1PZkJjbjsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCU51bU9mQmNuID0gTUFYX01FU0hfTlVNOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJZm9yKGFwaWR4PTA7IGFwaWR4PE51bU9mQmNuOyBhcGlkeCsrKQorCQl7CisJCQlVQ0hBUiBDYXBhYmlsaXR5SW5mb0xvY2F0aW9uSW5CZWFjb24gPSAwOworCQkJVUNIQVIgVGltSUVMb2NhdGlvbkluQmVhY29uID0gMDsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCQlOZGlzWmVyb01lbW9yeShwQmVhY29uU3luYy0+QmVhY29uQnVmW2FwaWR4XSwgSFdfQkVBQ09OX09GRlNFVCk7CisJCQlwQmVhY29uU3luYy0+Q2FwYWJpbGl0eUluZm9Mb2NhdGlvbkluQmVhY29uW2FwaWR4XSA9IENhcGFiaWxpdHlJbmZvTG9jYXRpb25JbkJlYWNvbjsKKwkJCXBCZWFjb25TeW5jLT5UaW1JRUxvY2F0aW9uSW5CZWFjb25bYXBpZHhdID0gVGltSUVMb2NhdGlvbkluQmVhY29uOworCQkJTmRpc1plcm9NZW1vcnkocEJlYWNvblN5bmMtPkJlYWNvblR4V0lbYXBpZHhdLCBUWFdJX1NJWkUpOworCQl9CisJCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgPSAwOworCQlwQmVhY29uU3luYy0+RHRpbUJpdE9uID0gMDsKKwkJcEFkLT5Db21tb25DZmcuQmVhY29uVXBkYXRlVGltZXIuUmVwZWF0ID0gVFJVRTsKKworCQlwQWQtPkNvbW1vbkNmZy5CZWFjb25BZGp1c3QgPSAwOworCQlwQWQtPkNvbW1vbkNmZy5CZWFjb25GYWN0b3IgPSAweGZmZmZmZmZmIC8gKHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA8PCAxMCk7CisJCXBBZC0+Q29tbW9uQ2ZnLkJlYWNvblJlbWFpbiA9ICgweGZmZmZmZmZmICUgKHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA8PCAxMCkpICsgMTsKKwkJcHJpbnRrKCJSVDI4NzBfQnNzQmVhY29uU3RhcnQ6QmVhY29uRmFjdG9yPSVkLCBCZWFjb25SZW1haW49JWQhXG4iLCBwQWQtPkNvbW1vbkNmZy5CZWFjb25GYWN0b3IsIHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblJlbWFpbik7CisJCVJUTVBTZXRUaW1lcigmcEFkLT5Db21tb25DZmcuQmVhY29uVXBkYXRlVGltZXIsIHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCk7CisKKwl9Cit9CisKKworVk9JRCBSVDI4NzBfQnNzQmVhY29uSW5pdCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlCRUFDT05fU1lOQ19TVFJVQ1QJKnBCZWFjb25TeW5jOworCWludCBpOworCisJTmRpc0FsbG9jTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jLCBzaXplb2YoQkVBQ09OX1NZTkNfU1RSVUNUKSwgTUVNX0FMTE9DX0ZMQUcpOworCWlmIChwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYykKKwl7CisJCXBCZWFjb25TeW5jID0gcEFkLT5Db21tb25DZmcucEJlYWNvblN5bmM7CisJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLCBzaXplb2YoQkVBQ09OX1NZTkNfU1RSVUNUKSk7CisJCWZvcihpPTA7IGkgPCBIV19CRUFDT05fTUFYX0NPVU5UOyBpKyspCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25CdWZbaV0sIEhXX0JFQUNPTl9PRkZTRVQpOworCQkJcEJlYWNvblN5bmMtPkNhcGFiaWxpdHlJbmZvTG9jYXRpb25JbkJlYWNvbltpXSA9IDA7CisJCQlwQmVhY29uU3luYy0+VGltSUVMb2NhdGlvbkluQmVhY29uW2ldID0gMDsKKwkJCU5kaXNaZXJvTWVtb3J5KHBCZWFjb25TeW5jLT5CZWFjb25UeFdJW2ldLCBUWFdJX1NJWkUpOworCQl9CisJCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgPSAwOworCisJCS8vUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPkNvbW1vbkNmZy5CZWFjb25VcGRhdGVUaW1lciwgR0VUX1RJTUVSX0ZVTkNUSU9OKEJlYWNvblVwZGF0ZUV4ZWMpLCBwQWQsIFRSVUUpOworCQlwQmVhY29uU3luYy0+RW5hYmxlQmVhY29uID0gVFJVRTsKKwl9Cit9CisKKworVk9JRCBSVDI4NzBfQnNzQmVhY29uRXhpdCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCkKK3sKKwlCRUFDT05fU1lOQ19TVFJVQ1QJKnBCZWFjb25TeW5jOworCUJPT0xFQU4JQ2FuY2VsbGVkID0gVFJVRTsKKwlpbnQgaTsKKworCWlmIChwQWQtPkNvbW1vbkNmZy5wQmVhY29uU3luYykKKwl7CisJCXBCZWFjb25TeW5jID0gcEFkLT5Db21tb25DZmcucEJlYWNvblN5bmM7CisJCXBCZWFjb25TeW5jLT5FbmFibGVCZWFjb24gPSBGQUxTRTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPkNvbW1vbkNmZy5CZWFjb25VcGRhdGVUaW1lciwgJkNhbmNlbGxlZCk7CisJCXBCZWFjb25TeW5jLT5CZWFjb25CaXRNYXAgPSAwOworCisJCWZvcihpPTA7IGk8SFdfQkVBQ09OX01BWF9DT1VOVDsgaSsrKQorCQl7CisJCQlOZGlzWmVyb01lbW9yeShwQmVhY29uU3luYy0+QmVhY29uQnVmW2ldLCBIV19CRUFDT05fT0ZGU0VUKTsKKwkJCXBCZWFjb25TeW5jLT5DYXBhYmlsaXR5SW5mb0xvY2F0aW9uSW5CZWFjb25baV0gPSAwOworCQkJcEJlYWNvblN5bmMtPlRpbUlFTG9jYXRpb25JbkJlYWNvbltpXSA9IDA7CisJCQlOZGlzWmVyb01lbW9yeShwQmVhY29uU3luYy0+QmVhY29uVHhXSVtpXSwgVFhXSV9TSVpFKTsKKwkJfQorCisJCU5kaXNGcmVlTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jLCBIV19CRUFDT05fT0ZGU0VUICogSFdfQkVBQ09OX01BWF9DT1VOVCwgMCk7CisJCXBBZC0+Q29tbW9uQ2ZnLnBCZWFjb25TeW5jID0gTlVMTDsKKwl9Cit9CisKK1ZPSUQgQmVhY29uVXBkYXRlRXhlYygKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisJUFJUTVBfQURBUFRFUglwQWQgPSAoUFJUTVBfQURBUFRFUilGdW5jdGlvbkNvbnRleHQ7CisJTEFSR0VfSU5URUdFUgl0c2ZUaW1lX2E7Ly8sIHRzZlRpbWVfYiwgZGVsdGFUaW1lX2V4cCwgZGVsdGFUaW1lX2FiOworCVVJTlQzMgkJCWRlbHRhLCByZW1haW4sIHJlbWFpbl9sb3csIHJlbWFpbl9oaWdoOworLy8JQk9PTEVBTgkJCXBvc2l0aXZlOworCisJUmVTeW5jQmVhY29uVGltZShwQWQpOworCisKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFNGX1RJTUVSX0RXMCwgJnRzZlRpbWVfYS51Lkxvd1BhcnQpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFNGX1RJTUVSX0RXMSwgJnRzZlRpbWVfYS51LkhpZ2hQYXJ0KTsKKworCisJLy9wb3NpdGl2ZT1nZXREZWx0YVRpbWUodHNmVGltZV9hLCBleHBlY3RlZFRpbWUsICZkZWx0YVRpbWVfZXhwKTsKKwlyZW1haW5faGlnaCA9IHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblJlbWFpbiAqIHRzZlRpbWVfYS51LkhpZ2hQYXJ0OworCXJlbWFpbl9sb3cgPSB0c2ZUaW1lX2EudS5Mb3dQYXJ0ICUgKHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA8PCAxMCk7CisJcmVtYWluID0gKHJlbWFpbl9oaWdoICsgcmVtYWluX2xvdyklKHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA8PCAxMCk7CisJZGVsdGEgPSAocEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kIDw8IDEwKSAtIHJlbWFpbjsKKworCXBBZC0+Q29tbW9uQ2ZnLkJlYWNvblVwZGF0ZVRpbWVyLlRpbWVyVmFsdWUgPSAoZGVsdGEgPj4gMTApICsgMTA7CisKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzN2ZiNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL0tjb25maWcKQEAgLTAsMCArMSw2IEBACitjb25maWcgUlQzMDcwCisJdHJpc3RhdGUgIlJhbGluayAzMDcwIHdpcmVsZXNzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IgJiYgWDg2ICYmIFdMQU5fODAyMTEKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgMzA3MCB3aXJlbGVzcyBjaGlwLgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTk4MGM5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9NYWtlZmlsZQpAQCAtMCwwICsxLDQ3IEBACitvYmotJChDT05GSUdfUlQzMDcwKQkrPSBydDMwNzBzdGEubworCisjIFRPRE86IGFsbCBvZiB0aGVzZSBzaG91bGQgYmUgcmVtb3ZlZAorRVhUUkFfQ0ZMQUdTICs9IC1ETElOVVggLURBR0dSRUdBVElPTl9TVVBQT1JUIC1EUElHR1lCQUNLX1NVUFBPUlQgLURXTU1fU1VQUE9SVAorRVhUUkFfQ0ZMQUdTICs9IC1EUlQyODcwIC1EUlQzMHh4IC1EUlQzMDcwCitFWFRSQV9DRkxBR1MgKz0gLURDT05GSUdfU1RBX1NVUFBPUlQKK0VYVFJBX0NGTEFHUyArPSAtRERCRworRVhUUkFfQ0ZMQUdTICs9IC1ERE9UMTFfTl9TVVBQT1JUCitFWFRSQV9DRkxBR1MgKz0gLURXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCitFWFRSQV9DRkxBR1MgKz0gLUROQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCitydDMwNzBzdGEtb2JqcyA6PQkJXAorCWNvbW1vbi9tZDUubwkJXAorCWNvbW1vbi9tbG1lLm8JCVwKKwljb21tb24vcnRtcF93ZXAubwlcCisJY29tbW9uL2FjdGlvbi5vCQlcCisJY29tbW9uL2NtbV9kYXRhLm8JXAorCWNvbW1vbi9ydG1wX2luaXQubwlcCisJY29tbW9uL3J0bXBfdGtpcC5vCVwKKwljb21tb24vY21tX3N5bmMubwlcCisJY29tbW9uL2VlcHJvbS5vCQlcCisJY29tbW9uL2NtbV9zYW5pdHkubwlcCisJY29tbW9uL2NtbV9pbmZvLm8JXAorCWNvbW1vbi9jbW1fd3BhLm8JXAorCWNvbW1vbi9kZnMubwkJXAorCWNvbW1vbi9zcGVjdHJ1bS5vCVwKKwlzdGEvYXNzb2MubwkJXAorCXN0YS9haXJvbmV0Lm8JCVwKKwlzdGEvYXV0aC5vCQlcCisJc3RhL2F1dGhfcnNwLm8JCVwKKwlzdGEvc3luYy5vCQlcCisJc3RhL3Nhbml0eS5vCQlcCisJc3RhL3J0bXBfZGF0YS5vCQlcCisJc3RhL2Nvbm5lY3QubwkJXAorCXN0YS93cGEubwkJXAorCXJ0X2xpbnV4Lm8JCVwKKwlydF9wcm9maWxlLm8JCVwKKwlydF9tYWluX2Rldi5vCQlcCisJc3RhX2lvY3RsLm8JCVwKKwljb21tb24vYmFfYWN0aW9uLm8JXAorCTI4NzBfbWFpbl9kZXYubwkJXAorCWNvbW1vbi8yODcwX3J0bXBfaW5pdC5vCVwKKwljb21tb24vcnR1c2JfaW8ubwlcCisJY29tbW9uL3J0dXNiX2J1bGsubwlcCisJY29tbW9uL3J0dXNiX2RhdGEubwlcCisJY29tbW9uL2NtbV9kYXRhXzI4NzAubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2FjdGlvbi5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9hY3Rpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTM4NzdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9hY3Rpb24uaApAQCAtMCwwICsxLDY4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWFpcm9uZXQuaAorCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncworCVBhdWwgTGluCTA0LTA2LTE1CQlJbml0aWFsCisqLworCisjaWZuZGVmCV9fQUNUSU9OX0hfXworI2RlZmluZQlfX0FDVElPTl9IX18KKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9fSFRfSU5GT19PQ1RFVAoreworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUglSZXNlcnZlZDo1OworCVVDSEFSIAlTVEFfQ2hhbm5lbF9XaWR0aDoxOworCVVDSEFSCUZvcnR5X01Iel9JbnRvbGVyYW50OjE7CisJVUNIQVIJUmVxdWVzdDoxOworI2Vsc2UKKwlVQ0hBUglSZXF1ZXN0OjE7CisJVUNIQVIJRm9ydHlfTUh6X0ludG9sZXJhbnQ6MTsKKwlVQ0hBUiAJU1RBX0NoYW5uZWxfV2lkdGg6MTsKKwlVQ0hBUglSZXNlcnZlZDo1OworI2VuZGlmCit9IEhUX0lORk9STUFUSU9OX09DVEVUOworCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfX0ZSQU1FX0hUX0lORk8KK3sKKwlIRUFERVJfODAyXzExICAgCQlIZHI7CisJVUNIQVIJCQkJCUNhdGVnb3J5OworCVVDSEFSCQkJCQlBY3Rpb247CisJSFRfSU5GT1JNQVRJT05fT0NURVQJSFRfSW5mbzsKK30gICBGUkFNRV9IVF9JTkZPLCAqUEZSQU1FX0hUX0lORk87CisKKyNlbmRpZiAvKiBfX0FDVElPTl9IX18gKi8KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2Fpcm9uZXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvYWlyb25ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMDdiMTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2Fpcm9uZXQuaApAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlhaXJvbmV0LmgKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlOYW1lCQlEYXRlCQkJTW9kaWZpY2F0aW9uIGxvZ3MKKwlQYXVsIExpbgkwNC0wNi0xNQkJSW5pdGlhbAorKi8KKworI2lmbmRlZglfX0FJUk9ORVRfSF9fCisjZGVmaW5lCV9fQUlST05FVF9IX18KKworLy8gTWVhc3VyZW1lbnQgVHlwZSBkZWZpbml0aW9uCisjZGVmaW5lCU1TUk5fVFlQRV9VTlVTRUQJCQkJMAorI2RlZmluZQlNU1JOX1RZUEVfQ0hBTk5FTF9MT0FEX1JFUQkJMQorI2RlZmluZQlNU1JOX1RZUEVfTk9JU0VfSElTVF9SRVEJCTIKKyNkZWZpbmUJTVNSTl9UWVBFX0JFQUNPTl9SRVEJCQkzCisjZGVmaW5lCU1TUk5fVFlQRV9GUkFNRV9SRVEJCQkJNAorCisvLyBTY2FuIE1vZGUgaW4gQmVhY29uIFJlcXVlc3QKKyNkZWZpbmUJTVNSTl9TQ0FOX01PREVfUEFTU0lWRQkJCTAKKyNkZWZpbmUJTVNSTl9TQ0FOX01PREVfQUNUSVZFCQkJMQorI2RlZmluZQlNU1JOX1NDQU5fTU9ERV9CRUFDT05fVEFCTEUJCTIKKworLy8gUEhZIHR5cGUgZGVmaW5pdGlvbiBmb3IgQWlyb25ldCBiZWFjb24gcmVwb3J0LCBDQ1ggMiB0YWJsZSAzNi05CisjZGVmaW5lCVBIWV9GSAkJCQkJCQkxCisjZGVmaW5lCVBIWV9EU1MJCQkJCQkJMgorI2RlZmluZQlQSFlfVU5VU0VECQkJCQkJMworI2RlZmluZQlQSFlfT0ZETQkJCQkJCTQKKyNkZWZpbmUJUEhZX0hSX0RTUwkJCQkJCTUKKyNkZWZpbmUJUEhZX0VSUAkJCQkJCQk2CisKKy8vIFJQSSB0YWJsZSBpbiBkQm0KKyNkZWZpbmUJUlBJXzAJCQkwCQkJLy8JUG93ZXIgPD0gLTg3CisjZGVmaW5lCVJQSV8xCQkJMQkJCS8vCS04NyA8IFBvd2VyIDw9IC04MgorI2RlZmluZQlSUElfMgkJCTIJCQkvLwktODIgPCBQb3dlciA8PSAtNzcKKyNkZWZpbmUJUlBJXzMJCQkzCQkJLy8JLTc3IDwgUG93ZXIgPD0gLTcyCisjZGVmaW5lCVJQSV80CQkJNAkJCS8vCS03MiA8IFBvd2VyIDw9IC02NworI2RlZmluZQlSUElfNQkJCTUJCQkvLwktNjcgPCBQb3dlciA8PSAtNjIKKyNkZWZpbmUJUlBJXzYJCQk2CQkJLy8JLTYyIDwgUG93ZXIgPD0gLTU3CisjZGVmaW5lCVJQSV83CQkJNwkJCS8vCS01NyA8IFBvd2VyCisKKy8vIENpc2NvIEFpcm9uZXQgSUFQUCBkZWZpbmV0aW9ucworI2RlZmluZQlBSVJPTkVUX0lBUFBfVFlQRQkJCQkJMHgzMgorI2RlZmluZQlBSVJPTkVUX0lBUFBfU1VCVFlQRV9SRVFVRVNUCQkweDAxCisjZGVmaW5lCUFJUk9ORVRfSUFQUF9TVUJUWVBFX1JFUE9SVAkJCTB4ODEKKworLy8gTWVhc3VyZW1lbnQgUmVxdWVzdCBkZXRhaWwgZm9ybWF0Cit0eXBlZGVmCXN0cnVjdAlfTUVBU1VSRU1FTlRfUkVRVUVTVAl7CisJVUNIQVIJQ2hhbm5lbDsKKwlVQ0hBUglTY2FuTW9kZTsJCQkvLyBVc2Ugb25seSBpbiBiZWFjb24gcmVxdWVzdCwgb3RoZXIgcmVxdWVzdHMgZGlkIG5vdCB1c2UgdGhpcyBmaWVsZAorCVVTSE9SVAlEdXJhdGlvbjsKK30JTUVBU1VSRU1FTlRfUkVRVUVTVCwgKlBNRUFTVVJFTUVOVF9SRVFVRVNUOworCisvLyBCZWFjb24gTWVhc3VyZW1lbnQgUmVwb3J0CisvLyBBbGwgdGhlc2UgZmllbGQgbWlnaHQgY2hhbmdlIHRvIFVDSEFSLCBiZWNhdXNlIHdlIGRpZG4ndCBkbyBhbnl0aGluZyB0byB0aGVzZSByZXBvcnQuCisvLyBXZSBjb3B5IGFsbCB0aGVzZSBiZWFjb25zIGFuZCByZXBvcnQgdG8gQ0NYIDIgQVAuCit0eXBlZGVmCXN0cnVjdAlfQkVBQ09OX1JFUE9SVAl7CisJVUNIQVIJQ2hhbm5lbDsKKwlVQ0hBUglTcGFyZTsKKwlVU0hPUlQJRHVyYXRpb247CisJVUNIQVIJUGh5VHlwZTsJCQkvLyBEZWZpbmlhdGlvbiBpcyBsaXN0ZWQgYWJvdmUgdGFibGUgMzYtOQorCVVDSEFSCVJ4UG93ZXI7CisJVUNIQVIJQlNTSURbNl07CisJVUNIQVIJUGFyZW50VFNGWzRdOworCVVDSEFSCVRhcmdldFRTRls4XTsKKwlVU0hPUlQJQmVhY29uSW50ZXJ2YWw7CisJVVNIT1JUCUNhcGFiaWxpdHlJbmZvOworfQlCRUFDT05fUkVQT1JULCAqUEJFQUNPTl9SRVBPUlQ7CisKKy8vIEZyYW1lIE1lYXN1cmVtZW50IFJlcG9ydCAoT3B0aW9uYWwpCit0eXBlZGVmCXN0cnVjdAlfRlJBTUVfUkVQT1JUCXsKKwlVQ0hBUglDaGFubmVsOworCVVDSEFSCVNwYXJlOworCVVTSE9SVAlEdXJhdGlvbjsKKwlVQ0hBUglUQTsKKwlVQ0hBUglCU1NJRFs2XTsKKwlVQ0hBUglSU1NJOworCVVDSEFSCUNvdW50OworfQlGUkFNRV9SRVBPUlQsICpQRlJBTUVfUkVQT1JUOworCisjcHJhZ21hIHBhY2soMSkKKy8vIENoYW5uZWwgTG9hZCBSZXBvcnQKK3R5cGVkZWYJc3RydWN0CV9DSEFOTkVMX0xPQURfUkVQT1JUCXsKKwlVQ0hBUglDaGFubmVsOworCVVDSEFSCVNwYXJlOworCVVTSE9SVAlEdXJhdGlvbjsKKwlVQ0hBUglDQ0FCdXN5OworfQlDSEFOTkVMX0xPQURfUkVQT1JULCAqUENIQU5ORUxfTE9BRF9SRVBPUlQ7CisjcHJhZ21hIHBhY2soKQorCisvLyBOb3NpZSBIaXN0b2dyYW0gUmVwb3J0Cit0eXBlZGVmCXN0cnVjdAlfTk9JU0VfSElTVF9SRVBPUlQJeworCVVDSEFSCUNoYW5uZWw7CisJVUNIQVIJU3BhcmU7CisJVVNIT1JUCUR1cmF0aW9uOworCVVDSEFSCURlbnNpdHlbOF07Cit9CU5PSVNFX0hJU1RfUkVQT1JULCAqUE5PSVNFX0hJU1RfUkVQT1JUOworCisvLyBSYWRpbyBNYW5hZ2VtZW50IENhcGFiaWxpdHkgZWxlbWVudAordHlwZWRlZglzdHJ1Y3QJX1JBRElPX01BTkFHRU1FTlRfQ0FQQUJJTElUWQl7CisJVUNIQVIJRWlkOwkJCQkvLyBUT0RPOiBXaHkgdGhlIEVpZCBpcyAxIGJ5dGUsIG5vdCBub3JtYWwgMiBieXRlcz8/PworCVVDSEFSCUxlbmd0aDsKKwlVQ0hBUglBaXJvbmV0T3VpWzNdOwkJLy8gQUlyb25ldCBPVUkgKDAwIDQwIDk2KQorCVVDSEFSCVR5cGU7CQkJCS8vIFR5cGUgLyBWZXJzaW9uCisJVVNIT1JUCVN0YXR1czsJCQkJLy8gc3dhcDE2IHJlcXVpcmVkCit9CVJBRElPX01BTkFHRU1FTlRfQ0FQQUJJTElUWSwgKlBSQURJT19NQU5BR0VNRU5UX0NBUEFCSUxJVFk7CisKKy8vIE1lYXN1cmVtZW50IE1vZGUgQml0IGRlZmluaXRpb24KK3R5cGVkZWYJc3RydWN0CV9NRUFTVVJFTUVOVF9NT0RFCXsKKwlVQ0hBUglSc3ZkOjQ7CisJVUNIQVIJUmVwb3J0OjE7CisJVUNIQVIJTm90VXNlZDoxOworCVVDSEFSCUVuYWJsZToxOworCVVDSEFSCVBhcmFsbGVsOjE7Cit9CU1FQVNVUkVNRU5UX01PREUsICpQTUVBU1VSRU1FTlRfTU9ERTsKKworLy8gTWVhc3VyZW1lbnQgUmVxdWVzdCBlbGVtZW50LCBUaGlzIGlzIGxpdHRsZSBlbmRpYW4gbW9kZQordHlwZWRlZglzdHJ1Y3QJX01FQVNVUkVNRU5UX1JFUVVFU1RfRUxFTUVOVAl7CisJVVNIT1JUCQkJCUVpZDsKKwlVU0hPUlQJCQkJTGVuZ3RoOwkJCQkvLyBzd2FwMTYgcmVxdWlyZWQKKwlVU0hPUlQJCQkJVG9rZW47CQkJCS8vIG5vbi16ZXJvIHVuaXF1ZSB0b2tlbgorCVVDSEFSCQkJCU1vZGU7CQkJCS8vIE1lYXN1cmVtZW50IE1vZGUKKwlVQ0hBUgkJCQlUeXBlOwkJCQkvLyBNZWFzdXJlbWVudCB0eXBlCit9CU1FQVNVUkVNRU5UX1JFUVVFU1RfRUxFTUVOVCwgKlBNRUFTVVJFTUVOVF9SRVFVRVNUX0VMRU1FTlQ7CisKKy8vIE1lYXN1cmVtZW50IFJlcG9ydCBlbGVtZW50LCBUaGlzIGlzIGxpdHRsZSBlbmRpYW4gbW9kZQordHlwZWRlZglzdHJ1Y3QJX01FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UCXsKKwlVU0hPUlQJCQkJRWlkOworCVVTSE9SVAkJCQlMZW5ndGg7CQkJCS8vIHN3YXAxNiByZXF1aXJlZAorCVVTSE9SVAkJCQlUb2tlbjsJCQkJLy8gbm9uLXplcm8gdW5pcXVlIHRva2VuCisJVUNIQVIJCQkJTW9kZTsJCQkJLy8gTWVhc3VyZW1lbnQgTW9kZQorCVVDSEFSCQkJCVR5cGU7CQkJCS8vIE1lYXN1cmVtZW50IHR5cGUKK30JTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQsICpQTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQ7CisKKy8vIENpc2NvIEFpcm9uZXQgSUFQUCBGcmFtZSBIZWFkZXIsIE5ldHdvcmsgYnl0ZSBvcmRlciB1c2VkCit0eXBlZGVmCXN0cnVjdAlfQUlST05FVF9JQVBQX0hFQURFUiB7CisJVUNIQVIJQ2lzY29TbmFwSGVhZGVyWzhdOwkvLyA4IGJ5dGVzIENpc2NvIHNuYXAgaGVhZGVyCisJVVNIT1JUCUxlbmd0aDsJCQkJLy8gSUFQUCBJRCAmIGxlbmd0aCwgcmVtZW1iZXIgdG8gc3dhcDE2IGluIExFIHN5c3RlbQorCVVDSEFSCVR5cGU7CQkJCS8vIElBUFAgdHlwZQorCVVDSEFSCVN1YlR5cGU7CQkJLy8gSUFQUCBzdWJ0eXBlCisJVUNIQVIJREFbNl07CQkJCS8vIERlc3RpbmF0aW9uIE1BQyBhZGRyZXNzCisJVUNIQVIJU0FbNl07CQkJCS8vIFNvdXJjZSBNQUMgYWRkcmVzcworCVVTSE9SVAlUb2tlbjsJCQkJLy8gRGlhbG9nIHRva2VuLCBubyBuZWVkIHRvIHN3YXAxNiBzaW5jZSBpdCBpcyBmb3IgeW9rZW4gdXNhZ2Ugb25seQorfQlBSVJPTkVUX0lBUFBfSEVBREVSLCAqUEFJUk9ORVRfSUFQUF9IRUFERVI7CisKKy8vIFJhZGlvIE1lYXN1cmVtZW50IFJlcXVlc3QgZnJhbWUKK3R5cGVkZWYJc3RydWN0CV9BSVJPTkVUX1JNX1JFUVVFU1RfRlJBTUUJeworICAgIEFJUk9ORVRfSUFQUF9IRUFERVIJSUFQUDsJCQkvLyBDb21tb24gaGVhZGVyCisJVUNIQVIJCQkJRGVsYXk7CQkJLy8gQWN0aXZhdGlvbiBEZWxheQorCVVDSEFSCQkJCU9mZnNldDsJCQkvLyBNZWFzdXJlbWVudCBvZmZzZXQKK30JQUlST05FVF9STV9SRVFVRVNUX0ZSQU1FLCAqUEFJUk9ORVRfUk1fUkVRVUVTVF9GUkFNRTsKKworLy8gUmFkaW8gTWVhc3VyZW1lbnQgUmVwb3J0IGZyYW1lCit0eXBlZGVmCXN0cnVjdAlfQUlST05FVF9STV9SRVBPUlRfRlJBTUUJeworICAgIEFJUk9ORVRfSUFQUF9IRUFERVIJSUFQUDsJCQkvLyBDb21tb24gaGVhZGVyCit9CUFJUk9ORVRfUk1fUkVQT1JUX0ZSQU1FLCAqUEFJUk9ORVRfUk1fUkVQT1JUX0ZSQU1FOworCisvLyBTYXZlZCBlbGVtZW50IHJlcXVlc3QgYWN0aW9ucyB3aGljaCB3aWxsIHNhdmVkIGluIFN0YUNmZy4KK3R5cGVkZWYJc3RydWN0CV9STV9SRVFVRVNUX0FDVElPTgl7CisJTUVBU1VSRU1FTlRfUkVRVUVTVF9FTEVNRU5UCVJlcUVsZW07CQkvLyBTYXZlZCByZXF1ZXN0IGVsZW1lbnQKKwlNRUFTVVJFTUVOVF9SRVFVRVNUCQkJTWVhc3VyZW1lbnQ7CS8vIFNhdmVkIG1lYXN1cmVtZW50IHdpdGhpbiB0aGUgcmVxdWVzdCBlbGVtZW50Cit9CVJNX1JFUVVFU1RfQUNUSU9OLCAqUFJNX1JFUVVFU1RfQUNUSU9OOworCisvLyBDQ1ggYWRtaW5pc3RyYXRpb24gY29udHJvbAordHlwZWRlZgl1bmlvbglfQ0NYX0NPTlRST0wJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJRW5hYmxlOjE7CQkJLy8gRW5hYmxlIENDWDIKKwkJVUlOVDMyCQlMZWFwRW5hYmxlOjE7CQkvLyBFbmFibGUgTEVBUCBhdCBDQ1gyCisJCVVJTlQzMgkJUk1FbmFibGU6MTsJCQkvLyBSYWRpbyBNZWFzdXJlbWVudCBFbmFibGUKKwkJVUlOVDMyCQlEQ1JNRW5hYmxlOjE7CQkvLyBOb24gc2VydmluZyBjaGFubmVsIFJhZGlvIE1lYXN1cmVtZW50IGVuYWJsZQorCQlVSU5UMzIJCVFPU0VuYWJsZToxOwkJLy8gRW5hYmxlIFFPUyBmb3IgQ0NYIDIuMCBzdXBwb3J0CisJCVVJTlQzMgkJRmFzdFJvYW1FbmFibGU6MTsJLy8gRW5hYmxlIGZhc3Qgcm9hbWluZworCQlVSU5UMzIJCVJzdmQ6MjsJCQkJLy8gTm90IHVzZWQKKwkJVUlOVDMyCQlkQm1Ub1JvYW06ODsJCS8vIHRoZSBjb25kaXRpb24gdG8gcm9hbSB3aGVuIHJlY2VpdmluZyBSc3NpIGxlc3MgdGhhbiB0aGlzIHZhbHVlLiBJdCdzIG5lZ2F0aXZlIHZhbHVlLgorCQlVSU5UMzIJCVR1TGltaXQ6MTY7CQkJLy8gTGltaXQgZm9yIGRpZmZlcmVudCBjaGFubmVsIHNjYW4KKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUNDWF9DT05UUk9MLCAqUENDWF9DT05UUk9MOworCisjZW5kaWYJLy8gX19BSVJPTkVUX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9hcC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YmEwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2FwLmgKQEAgLTAsMCArMSw1NTcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisgICAgYXAuaAorCisgICAgQWJzdHJhY3Q6CisgICAgTWluaXBvcnQgZ2VuZXJpYyBwb3J0aW9uIGhlYWRlciBmaWxlCisKKyAgICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIFdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFBhdWwgTGluICAgIDA4LTAxLTIwMDIgICAgY3JlYXRlZAorICAgIEphbWVzIFRhbiAgIDA5LTA2LTIwMDIgICAgbW9kaWZpZWQgKFJldmlzZSBOVENSZWdUYWJsZSkKKyAgICBKb2huIENoYW5nICAxMi0yMi0yMDA0ICAgIG1vZGlmaWVkIGZvciBSVDI1NjEvMjY2MS4gbWVyZ2Ugd2l0aCBTVEEgZHJpdmVyCisqLworI2lmbmRlZiBfX0FQX0hfXworI2RlZmluZSBfX0FQX0hfXworCisKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PSBBUCBSVE1QLmggPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vICAgICAgRnVuY3Rpb24gUHJvdG90eXBlcworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvLyBhcF9kYXRhLmMKKworQk9PTEVBTiBBUEJyaWRnZVRvV2lyZWxlc3NTdGEoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwSGVhZGVyLAorICAgIElOICBVSU5UICAgICAgICAgICAgSGRyTGVuLAorICAgIElOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBEYXRhTGVuLAorICAgIElOICBVTE9ORyAgICAgICAgICAgZnJvbXdkc2lkeCk7CisKK0JPT0xFQU4gQVBIYW5kbGVSeERvbmVJbnRlcnJ1cHQoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lECUFQU2VuZFBhY2tldHMoCisJSU4JTkRJU19IQU5ETEUJCU1pbmlwb3J0QWRhcHRlckNvbnRleHQsCisJSU4JUFBORElTX1BBQ0tFVAlwcFBhY2tldEFycmF5LAorCUlOCVVJTlQJCQlOdW1iZXJPZlBhY2tldHMpOworCitORElTX1NUQVRVUyBBUFNlbmRQYWNrZXQoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBORElTX1BBQ0tFVCAgICBwUGFja2V0KTsKKworCitORElTX1NUQVRVUyBBUEhhcmRUcmFuc21pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJUXVlSWR4KTsKKworVk9JRCBBUFJ4RUFQT0xGcmFtZUluZGljYXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1BQ19UQUJMRV9FTlRSWQkqcEVudHJ5LAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKK05ESVNfU1RBVFVTIEFQQ2hlY2tSeEVycm9yKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBSVDI4WFhfUlhEX1NUUlVDCQlwUnhELAorCUlOCVVDSEFSCQkJV2NpZCk7CisKK0JPT0xFQU4gQVBDaGVja0NsYXNzMkNsYXNzM0Vycm9yKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIFVMT05HIFdjaWQsCisJSU4gIFBIRUFERVJfODAyXzExICBwSGVhZGVyKTsKKworVk9JRCBBUEhhbmRsZVJ4UHNQb2xsKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBBZGRyLAorCUlOCVVTSE9SVAkJCUFpZCwKKyAgICBJTglCT09MRUFOCQkJaXNBY3RpdmUpOworCitWT0lEICAgIFJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKAorICAgIElOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisgICAgSU4gIFVMT05HICAgICAgICAgICBEZXNjcmlwdG9yVHlwZSk7CisKK1ZPSUQgICAgUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisgICAgSU4gIFVMT05HICAgICAgICAgICBEaXIsCisgICAgSU4gIEJPT0xFQU4gICAgICAgICBGcm9tUnhEb25lSW50KTsKKworLy8gYXBfYXNzb2MuYworCitWT0lEIEFQQXNzb2NTdGF0ZU1hY2hpbmVJbml0KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBTVEFURV9NQUNISU5FICpTLAorICAgIE9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSk7CisKK1ZPSUQgIEFQUGVlckFzc29jUmVxQWN0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICBBUFBlZXJSZWFzc29jUmVxQWN0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICBBUFBlZXJEaXNhc3NvY1JlcUFjdGlvbigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBNYnNzS2lja091dFN0YXMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gSU5UIGFwaWR4LAorCUlOIFVTSE9SVCBSZWFzb24pOworCitWT0lEIEFQTWxtZUtpY2tPdXRTdGEoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBTdGFBZGRyLAorCUlOIFVDSEFSIFdjaWQsCisJSU4gVVNIT1JUIFJlYXNvbik7CisKK1ZPSUQgQVBNbG1lRGlzYXNzb2NSZXFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgQVBDbHMzZXJyQWN0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIAlVTE9ORyBXY2lkLAorICAgIElOCVBIRUFERVJfODAyXzExCXBIZWFkZXIpOworCisKK1VTSE9SVCBBUEJ1aWxkQXNzb2NpYXRpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUFDX1RBQkxFX0VOVFJZICpwRW50cnksCisgICAgSU4gVVNIT1JUIENhcGFiaWxpdHlJbmZvLAorICAgIElOIFVDSEFSICBNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzLAorICAgIElOIFVDSEFSICAqUlNOLAorICAgIElOIFVDSEFSICAqcFJTTkxlbiwKKyAgICBJTiBCT09MRUFOIGJXbW1DYXBhYmxlLAorICAgIElOIFVMT05HICBSYWxpbmtJZSwKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisgICAgSU4gRVhUX0NBUF9JTkZPX0VMRU1FTlQgRXh0Q2FwSW5mbywKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisJSU4gSFRfQ0FQQUJJTElUWV9JRQkJKnBIdENhcGFiaWxpdHksCisJSU4gVUNIQVIJCSBIdENhcGFiaWxpdHlMZW4sCisgICAgT1VUIFVTSE9SVCAqcEFpZCk7CisKKy8qCitWT0lECVJUTVBBZGRDbGllbnRTZWMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJQnNzSWR4LAorCUlOIFVDSEFSCQkgS2V5SWR4LAorCUlOIFVDSEFSCQkgQ2lwaGVyQWxnLAorCUlOIFBVQ0hBUgkJIHBLZXksCisJSU4gUFVDSEFSCQkgcFR4TWljLAorCUlOIFBVQ0hBUgkJIHBSeE1pYywKKwlJTiBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSk7CisqLworCisvLyBhcF9hdXRoLmMKKwordm9pZCBBUEF1dGhTdGF0ZU1hY2hpbmVJbml0KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFNUQVRFX01BQ0hJTkUgKlNtLAorICAgIE9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSk7CisKK1ZPSUQgQVBNbG1lRGVhdXRoUmVxQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBDbHMyZXJyQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIAlVTE9ORyBXY2lkLAorICAgIElOCVBIRUFERVJfODAyXzExCXBIZWFkZXIpOworCisvLyBhcF9hdXRocnNwLmMKKworVk9JRCBBUEF1dGhSc3BTdGF0ZU1hY2hpbmVJbml0KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFBTVEFURV9NQUNISU5FIFNtLAorICAgIElOIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCBBUFBlZXJBdXRoQXRBdXRoUnNwSWRsZUFjdGlvbigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUFBlZXJEZWF1dGhSZXFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUglwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUFBlZXJBdXRoU2ltcGxlUnNwR2VuQW5kU2VuZCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUEhFQURFUl84MDJfMTEgcEhkcjgwMjExLAorICAgIElOICBVU0hPUlQgQWxnLAorICAgIElOICBVU0hPUlQgU2VxLAorICAgIElOICBVU0hPUlQgU3RhdHVzQ29kZSk7CisKKy8vIGFwX2Nvbm5lY3QuYworCitCT09MRUFOIEJlYWNvblRyYW5zbWl0UmVxdWlyZWQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gSU5UCQkJCWFwaWR4KTsKKworVk9JRCBBUE1ha2VCc3NCZWFjb24oCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JSU5UCQkJCWFwaWR4KTsKKworVk9JRCAgQVBVcGRhdGVCZWFjb25GcmFtZSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTglJTlQJCQkJYXBpZHgpOworCitWT0lEIEFQTWFrZUFsbEJzc0JlYWNvbigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgIEFQVXBkYXRlQWxsQmVhY29uRnJhbWUoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCisKKy8vIGFwX3N5bmMuYworCitWT0lEIEFQU3luY1N0YXRlTWFjaGluZUluaXQoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gU1RBVEVfTUFDSElORSAqU20sCisgICAgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCBBUFNjYW5UaW1lb3V0KAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgQVBJbnZhbGlkU3RhdGVXaGVuU2NhbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFQU2NhblRpbWVvdXRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUFBlZXJQcm9iZVJlcUFjdGlvbigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBQZWVyQmVhY29uQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBNbG1lU2NhblJlcUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFQUGVlckJlYWNvbkF0U2NhbkFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFQU2NhbkNuY2xBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBcFNpdGVTdXJ2ZXkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIFN1cHBvcnRSYXRlKAorCUlOIFBVQ0hBUiBTdXBSYXRlLAorCUlOIFVDSEFSIFN1cFJhdGVMZW4sCisJSU4gUFVDSEFSIEV4dFJhdGUsCisJSU4gVUNIQVIgRXh0UmF0ZUxlbiwKKwlPVVQgUFVDSEFSICpSYXRlcywKKwlPVVQgUFVDSEFSIFJhdGVzTGVuLAorCU9VVCBQVUNIQVIgcE1heFN1cHBvcnRSYXRlKTsKKworCitCT09MRUFOIEFwU2NhblJ1bm5pbmcoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCisjaWZkZWYgRE9UMTFOX0RSQUZUMworVk9JRCBBUE92ZXJsYXBwaW5nQlNTU2NhbigKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCk7CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworCisvLyBhcF93cGEuYworCitWT0lEIEFQV3BhU3RhdGVNYWNoaW5lSW5pdCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgU1RBVEVfTUFDSElORSAqU20sCisgICAgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworLy8gYXBfbWxtZS5jCisKK1ZPSUQgQVBNbG1lUGVyaW9kaWNFeGVjKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBBUE1sbWVTZWxlY3RUeFJhdGVUYWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4gUE1BQ19UQUJMRV9FTlRSWQkJcEVudHJ5LAorCUlOIFBVQ0hBUgkJCQkqcHBUYWJsZSwKKwlJTiBQVUNIQVIJCQkJcFRhYmxlU2l6ZSwKKwlJTiBQVUNIQVIJCQkJcEluaXRUeFJhdGVJZHgpOworCitWT0lEIEFQTWxtZVNldFR4UmF0ZSgKKwlJTiBQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4gUE1BQ19UQUJMRV9FTlRSWQkJcEVudHJ5LAorCUlOIFBSVE1QX1RYX1JBVEVfU1dJVENICXBUeFJhdGUpOworCitWT0lEIEFQTWxtZUR5bmFtaWNUeFJhdGVTd2l0Y2hpbmcoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIEFQUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYygKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitCT09MRUFOIEFQTXNnVHlwZVN1YnN0KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFBGUkFNRV84MDJfMTEgcEZyYW1lLAorICAgIE9VVCBJTlQgKk1hY2hpbmUsCisgICAgT1VUIElOVCAqTXNnVHlwZSk7CisKK1ZPSUQgQVBRdWlja1Jlc3BvbmVGb3JSYXRlVXBFeGVjKAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKKyNpZmRlZiBSVDI4NzAKK1ZPSUQgQmVhY29uVXBkYXRlRXhlYygKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCitWT0lEIFJUTVBTZXRQaWdneUJhY2soCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gQk9PTEVBTgkJCWJQaWdneUJhY2spOworCitWT0lEIEFQQXNpY0V2YWx1YXRlUnhBbnQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIEFQQXNpY1J4QW50RXZhbFRpbWVvdXQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpOworCisvLyBhcC5jCisKK1ZPSUQgQVBTd2l0Y2hDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIElOVCBDaGFubmVsKTsKKworTkRJU19TVEFUVVMgQVBJbml0aWFsaXplKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBBUFNodXRkb3duKAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkKTsKKworVk9JRCBBUFN0YXJ0VXAoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEFQU3RvcCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgQVBDbGVhbnVwUHNRdWV1ZSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFFVRVVFX0hFQURFUiAgIHBRdWV1ZSk7CisKK1ZPSUQgTWFjVGFibGVSZXNldCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK01BQ19UQUJMRV9FTlRSWSAqTWFjVGFibGVJbnNlcnRFbnRyeSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIHBBZGRyLAorCUlOCVVDSEFSCQkJYXBpZHgsCisJSU4gQk9PTEVBTglDbGVhbkFsbCk7CisKK0JPT0xFQU4gTWFjVGFibGVEZWxldGVFbnRyeSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiBVU0hPUlQgd2NpZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIHBBZGRyKTsKKworTUFDX1RBQkxFX0VOVFJZICpNYWNUYWJsZUxvb2t1cCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIHBBZGRyKTsKKworVk9JRCBNYWNUYWJsZU1haW50ZW5hbmNlKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVUlOVDMyIE1hY1RhYmxlQXNzb2NTdGFOdW1HZXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitNQUNfVEFCTEVfRU5UUlkgKkFQU3NQc0lucXVpcnkoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwQWRkciwKKyAgICBPVVQgU1NUICAgICAgICAgICAgICpTc3QsCisgICAgT1VUIFVTSE9SVCAgICAgICAgICAqQWlkLAorICAgIE9VVCBVQ0hBUiAgICAgICAgICAgKlBzTW9kZSwKKyAgICBPVVQgVUNIQVIgICAgICAgICAgICpSYXRlKTsKKworQk9PTEVBTiBBUFBzSW5kaWNhdGUoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwQWRkciwKKwlJTiBVTE9ORyBXY2lkLAorICAgIElOICBVQ0hBUiAgICAgICAgICAgUHNtKTsKKworVk9JRCBBcExvZ0V2ZW50KAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorICAgIElOIFBVQ0hBUiAgICAgICAgICAgcEFkZHIsCisgICAgSU4gVVNIT1JUICAgICAgICAgICBFdmVudCk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgQVBVcGRhdGVPcGVyYXRpb25Nb2RlKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBBUFVwZGF0ZUNhcGFiaWxpdHlBbmRFcnBJZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK0JPT0xFQU4gQXBDaGVja0FjY2Vzc0NvbnRyb2xMaXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiAgICAgICAgcEFkZHIsCisJSU4gVUNIQVIgICAgICAgICBBcGlkeCk7CisKK1ZPSUQgQXBVcGRhdGVBY2Nlc3NDb250cm9sTGlzdCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBVQ0hBUiAgICAgICAgIEFwaWR4KTsKKworVk9JRCBBcEVucXVldWVOdWxsRnJhbWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSICAgICAgICBwQWRkciwKKwlJTiBVQ0hBUiAgICAgICAgIFR4UmF0ZSwKKwlJTiBVQ0hBUiAgICAgICAgIFBJRCwKKwlJTiBVQ0hBUiAgICAgICAgIGFwaWR4LAorICAgIElOIEJPT0xFQU4gICAgICAgYlFvc051bGwsCisgICAgSU4gQk9PTEVBTiAgICAgICBiRU9TUCwKKyAgICBJTiBVQ0hBUiAgICAgICAgIE9sZFVQKTsKKworVk9JRCBBcFNlbmRGcmFtZSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgUFZPSUQgICAgICAgICAgIHBCdWZmZXIsCisgICAgSU4gIFVMT05HICAgICAgICAgICBMZW5ndGgsCisgICAgSU4gIFVDSEFSICAgICAgICAgICBUeFJhdGUsCisgICAgSU4gIFVDSEFSICAgICAgICAgICBQSUQpOworCitWT0lEIEFwRW5xdWV1ZUFja0ZyYW1lKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFBVQ0hBUiAgICAgICAgcEFkZHIsCisgICAgSU4gVUNIQVIgICAgICAgICBUeFJhdGUsCisJSU4gVUNIQVIgICAgICAgICBhcGlkeCk7CisKK1VDSEFSIEFQQXV0b1NlbGVjdENoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gQk9PTEVBTiBPcHRpbWFsKTsKKworLy8gYXBfc2FuaXR5LmMKKworCitCT09MRUFOIFBlZXJBc3NvY1JlcUNtbVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBCT09MRUFOIGlzUmVzc29jLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFVTSE9SVCAqcENhcGFiaWxpdHlJbmZvLAorICAgIE9VVCBVU0hPUlQgKnBMaXN0ZW5JbnRlcnZhbCwKKyAgICBPVVQgUFVDSEFSIHBBcEFkZHIsCisgICAgT1VUIFVDSEFSICpwU3NpZExlbiwKKyAgICBPVVQgY2hhciAqU3NpZCwKKyAgICBPVVQgVUNIQVIgKnBSYXRlc0xlbiwKKyAgICBPVVQgVUNIQVIgUmF0ZXNbXSwKKyAgICBPVVQgVUNIQVIgKlJTTiwKKyAgICBPVVQgVUNIQVIgKnBSU05MZW4sCisgICAgT1VUIEJPT0xFQU4gKnBiV21tQ2FwYWJsZSwKKyAgICBPVVQgVUxPTkcgICpwUmFsaW5rSWUsCisjaWZkZWYgRE9UMTFOX0RSQUZUMworICAgIE9VVCBFWFRfQ0FQX0lORk9fRUxFTUVOVAkqcEV4dENhcEluZm8sCisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworICAgIE9VVCBVQ0hBUgkJICpwSHRDYXBhYmlsaXR5TGVuLAorICAgIE9VVCBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5KTsKKworCitCT09MRUFOIFBlZXJEaXNhc3NvY1JlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyLAorICAgIE9VVCBVU0hPUlQgKlJlYXNvbik7CisKK0JPT0xFQU4gUGVlckRlYXV0aFJlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyLAorICAgIE9VVCBVU0hPUlQgKlJlYXNvbik7CisKK0JPT0xFQU4gQVBQZWVyQXV0aFNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIxLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyLAorICAgIE9VVCBVU0hPUlQgKkFsZywKKyAgICBPVVQgVVNIT1JUICpTZXEsCisgICAgT1VUIFVTSE9SVCAqU3RhdHVzLAorICAgIENIQVIgKkNobGdUZXh0KTsKKworQk9PTEVBTiBBUFBlZXJQcm9iZVJlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyLAorICAgIE9VVCBDSEFSIFNzaWRbXSwKKyAgICBPVVQgVUNIQVIgKlNzaWRMZW4pOworCitCT09MRUFOIEFQUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFBVQ0hBUiBwQnNzaWQsCisgICAgT1VUIENIQVIgU3NpZFtdLAorICAgIE9VVCBVQ0hBUiAqU3NpZExlbiwKKyAgICBPVVQgVUNIQVIgKkJzc1R5cGUsCisgICAgT1VUIFVTSE9SVCAqQmVhY29uUGVyaW9kLAorICAgIE9VVCBVQ0hBUiAqQ2hhbm5lbCwKKyAgICBPVVQgTEFSR0VfSU5URUdFUiAqVGltZXN0YW1wLAorICAgIE9VVCBVU0hPUlQgKkNhcGFiaWxpdHlJbmZvLAorICAgIE9VVCBVQ0hBUiBSYXRlW10sCisgICAgT1VUIFVDSEFSICpSYXRlTGVuLAorICAgIE9VVCBCT09MRUFOICpFeHRlbmRlZFJhdGVJZUV4aXN0LAorICAgIE9VVCBVQ0hBUiAqRXJwKTsKKworCisvLyA9PT09PT09PT09PT09PT09PT0gZW5kIG9mIEFQIFJUTVAuaCA9PT09PT09PT09PT09PT09PT09PT09PT0KKworCisjZW5kaWYgIC8vIF9fQVBfSF9fCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY2hsaXN0LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NobGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNTFlODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NobGlzdC5oCkBAIC0wLDAgKzEsMTI1MyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwljaGxpc3QuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorCS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUZvbmNoaSBXdSAgIDIwMDctMTItMTkgICAgY3JlYXRlZAorKi8KKworI2lmbmRlZiBfX0NITElTVF9IX18KKyNkZWZpbmUgX19DSExJU1RfSF9fCisKKyNpbmNsdWRlICJydG1wX3R5cGUuaCIKKyNpbmNsdWRlICJydG1wX2RlZi5oIgorCisKKyNkZWZpbmUgT0RPUgkJCTAKKyNkZWZpbmUgSURPUgkJCTEKKyNkZWZpbmUgQk9USAkJCTIKKworI2RlZmluZSBCQU5EXzVHICAgICAgICAgMAorI2RlZmluZSBCQU5EXzI0RyAgICAgICAgMQorI2RlZmluZSBCQU5EX0JPVEggICAgICAgMgorCit0eXBlZGVmIHN0cnVjdCBfQ0hfREVTUCB7CisJVUNIQVIgRmlyc3RDaGFubmVsOworCVVDSEFSIE51bU9mQ2g7CisJQ0hBUiBNYXhUeFB3cjsJCQkvLyBkQm0KKwlVQ0hBUiBHZW9ncmFwaHk7CQkJLy8gMDpvdXQgZG9vciwgMTppbiBkb29yLCAyOmJvdGgKKwlCT09MRUFOIERmc1JlcTsJCQkvLyBEZnMgcmVxdWlyZSwgMDogTm8sIDE6IHllcy4KK30gQ0hfREVTUCwgKlBDSF9ERVNQOworCit0eXBlZGVmIHN0cnVjdCBfQ0hfUkVHSU9OIHsKKwlVQ0hBUiBDb3VudFJlZ1szXTsKKwlVQ0hBUiBEZnNUeXBlOwkJCS8vIDA6IENFLCAxOiBGQ0MsIDI6IEpBUCwgMzpKQVBfVzUzLCBKQVBfVzU2CisJQ0hfREVTUCBDaERlc3BbMTBdOworfSBDSF9SRUdJT04sICpQQ0hfUkVHSU9OOworCitzdGF0aWMgQ0hfUkVHSU9OIENoUmVnaW9uW10gPQoreworCQl7CS8vIEFudGlndWEgYW5kIEJlcmJ1ZGEKKwkJCSJBRyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEFyZ2VudGluYQorCQkJIkFSIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDUyLCAgNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCA0LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEFydWJhCisJCQkiQVciLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBBdXN0cmFsaWEKKwkJCSJBVSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCA1LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjUKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEF1c3RyaWEKKwkJCSJBVCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgSURPUiwgVFJVRX0sCQkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIEJPVEgsIFRSVUV9LAkJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEJhaGFtYXMKKwkJCSJCUyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCA1LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjUKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEJhcmJhZG9zCisJCQkiQkIiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBCZXJtdWRhCisJCQkiQk0iLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBCcmF6aWwKKwkJCSJCUiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDE0OSwgNSwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBCZWxnaXVtCisJCQkiQkUiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMTgsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAxOCwgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEJ1bGdhcmlhCisJCQkiQkciLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgMzAsIE9ET1IsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQ2FuYWRhCisJCQkiQ0EiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDE0OSwgNSwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTY1CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBDYXltYW4gSXNMYW5kcworCQkJIktZIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQ2hpbGUKKwkJCSJDTCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCA1LCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjUKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIENoaW5hCisJCQkiQ04iLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMTQ5LCA0LCAgMjcsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIENvbG9tYmlhCisJCQkiQ08iLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMTcsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAxNDksIDUsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQ29zdGEgUmljYQorCQkJIkNSIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDE3LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksIDQsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gQ3lwcnVzCisJCQkiQ1kiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyNCwgSURPUiwgVFJVRX0sCQkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsIDMwLCBCT1RILCBUUlVFfSwJCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBDemVjaF9SZXB1YmxpYworCQkJIkNaIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgMjMsIElET1IsIFRSVUV9LAkJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBEZW5tYXJrCisJCQkiREsiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAyMywgSURPUiwgVFJVRX0sCQkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsIDMwLCBCT1RILCBUUlVFfSwJCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBEb21pbmljYW4gUmVwdWJsaWMKKwkJCSJETyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAwCisJCQkJeyAxNDksIDQsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gRXF1YWRvcgorCQkJIkVDIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAxMDAsIDExLCAgMjcsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEVsIFNhbHZhZG9yCisJCQkiU1YiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCA0LCAgIDM2LCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDE0OX4xNjUKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEZpbmxhbmQKKwkJCSJGSSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gRnJhbmNlCisJCQkiRlIiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gR2VybWFueQorCQkJIkRFIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgIDQsICAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBHcmVlY2UKKwkJCSJHUiIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIE9ET1IsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gR3VhbQorCQkJIkdVIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMSwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjExCisJCQkJeyAzNiwgIDQsICAgMTcsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgIDQsICAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDE0OSwgIDUsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gR3VhdGVtYWxhCisJCQkiR1QiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgNCwgICAxNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgNCwgICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDE0OSwgIDQsICAzMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gSGFpdGkKKwkJCSJIVCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICA0LCAgIDE3LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICA0LCAgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCAgNCwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBIb25kdXJhcworCQkJIkhOIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAxNDksICA0LCAgMjcsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEhvbmcgS29uZworCQkJIkhLIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksICA0LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEh1bmdhcnkKKwkJCSJIVSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBJY2VsYW5kCisJCQkiSVMiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEluZGlhCisJCQkiSU4iLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDE0OSwgCTQsICAyNCwgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gSW5kb25lc2lhCisJCQkiSUQiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDE0OSwgCTQsICAyNywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gSXJlbGFuZAorCQkJIklFIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAJNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIE9ET1IsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gSXNyYWVsCisJCQkiSUwiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgICAzLCAgMjAsIElET1IsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MworCQkJCXsgNCwgCTYsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggNH45CisJCQkJeyAxMCwgCTQsICAyMCwgSURPUiwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMTB+MTMKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIEl0YWx5CisJCQkiSVQiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAJNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsIAk0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgT0RPUiwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBKYXBhbgorCQkJIkpQIiwKKwkJCUpBUCwKKwkJCXsKKwkJCQl7IDEsICAgMTQsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xNAorCQkJCXsgMzQsIAk0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM0fjQ2CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBKb3JkYW4KKwkJCSJKTyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgSURPUiwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsIAk0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyAxNDksIAk0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIExhdHZpYQorCQkJIkxWIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAJNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTGllY2h0ZW5zdGVpbgorCQkJIkxJIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyA1MiwgCTQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIExpdGh1YW5pYQorCQkJIkxUIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAJNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTHV4ZW1idXJnCisJCQkiTFUiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAJNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsIAk0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBNYWxheXNpYQorCQkJIk1ZIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMzYsIAk0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgCTQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDE0OSwgIDUsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTWFsdGEKKwkJCSJNVCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsIAk0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgCTQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIE1hcm9jY28KKwkJCSJNQSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsIAk0LCAgMjQsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBNZXhpY28KKwkJCSJNWCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsIAk0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgCTQsICAyNCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDE0OSwgIDUsICAzMCwgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2NQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gTmV0aGVybGFuZHMKKwkJCSJOTCIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsIAk0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgCTQsICAyNCwgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIE5ldyBaZWFsYW5kCisJCQkiTloiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAJNCwgIDI0LCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsIAk0LCAgMjQsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksICA0LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIE5vcndheQorCQkJIk5PIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgCTQsICAyNCwgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAJNCwgIDI0LCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gUGVydQorCQkJIlBFIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAxNDksICA0LCAgMjcsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFBvcnR1Z2FsCisJCQkiUFQiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFBvbGFuZAorCQkJIlBMIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBSb21hbmlhCisJCQkiUk8iLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFJ1c3NpYQorCQkJIlJVIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAxNDksICA0LCAgMjAsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFNhdWRpIEFyYWJpYQorCQkJIlNBIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxNDksICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFNlcmJpYV9hbmRfTW9udGVuZWdybworCQkJIkNTIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBTaW5nYXBvcmUKKwkJCSJTRyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTQ5LCAgNCwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBTbG92YWtpYQorCQkJIlNLIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBTbG92ZW5pYQorCQkJIlNJIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFNvdXRoIEFmcmljYQorCQkJIlpBIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMjMsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjMsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMTQ5LCAgNCwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTYxCisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBTb3V0aCBLb3JlYQorCQkJIktSIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjEzCisJCQkJeyAzNiwgICA0LCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDM2fjQ4CisJCQkJeyA1MiwgICA0LCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsICA4LCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDEwMH4xMjgKKwkJCQl7IDE0OSwgIDQsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTQ5fjE2MQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gU3BhaW4KKwkJCSJFUyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMworCQkJCXsgMzYsICAgNCwgIDE3LCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAxMDAsIDExLCAgMzAsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gU3dlZGVuCisJCQkiU0UiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFN3aXR6ZXJsYW5kCisJCQkiQ0giLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTMKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCAzNn40OAorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBUUlVFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCisKKwkJewkvLyBUYWl3YW4KKwkJCSJUVyIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTEsICAzMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMQorCQkJCXsgNTIsICAgNCwgIDIzLCBJRE9SLCBGQUxTRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gVHVya2V5CisJCQkiVFIiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTEKKwkJCQl7IDM2LCAgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMzZ+NDgKKwkJCQl7IDUyLCAgIDQsICAyMywgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFVLCisJCQkiR0IiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDEzLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTEKKwkJCQl7IDM2LCAgIDQsICAyMywgSURPUiwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDUyLCAgIDQsICAyMywgSURPUiwgVFJVRX0sCS8vIDVHLCBjaCA1Mn42NAorCQkJCXsgMTAwLCAxMSwgIDMwLCBCT1RILCBUUlVFfSwJLy8gNUcsIGNoIDEwMH4xNDAKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFVrcmFpbmUKKwkJCSJVQSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gVW5pdGVkX0FyYWJfRW1pcmF0ZXMKKwkJCSJBRSIsCisJCQlDRSwKKwkJCXsKKwkJCQl7IDEsICAgMTMsICAyMCwgQk9USCwgRkFMU0V9LAkvLyAyLjQgRywgY2ggMX4xMQorCQkJCXsgMH0sCQkJCQkJCS8vIGVuZAorCQkJfQorCQl9LAorCisJCXsJLy8gVW5pdGVkX1N0YXRlcworCQkJIlVTIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMSwgIDMwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjExCisJCQkJeyAzNiwgICA0LCAgMTcsIElET1IsIEZBTFNFfSwJLy8gNUcsIGNoIDUyfjY0CisJCQkJeyA1MiwgICA0LCAgMjQsIEJPVEgsIFRSVUV9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAzMCwgQk9USCwgVFJVRX0sCS8vIDVHLCBjaCAxMDB+MTQwCisJCQkJeyAxNDksICA1LCAgMzAsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjUKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIFZlbmV6dWVsYQorCQkJIlZFIiwKKwkJCUNFLAorCQkJeworCQkJCXsgMSwgICAxMywgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDIuNCBHLCBjaCAxfjExCisJCQkJeyAxNDksICA0LCAgMjcsIEJPVEgsIEZBTFNFfSwJLy8gNUcsIGNoIDE0OX4xNjEKKwkJCQl7IDB9LAkJCQkJCQkvLyBlbmQKKwkJCX0KKwkJfSwKKworCQl7CS8vIERlZmF1bHQKKwkJCSIiLAorCQkJQ0UsCisJCQl7CisJCQkJeyAxLCAgIDExLCAgMjAsIEJPVEgsIEZBTFNFfSwJLy8gMi40IEcsIGNoIDF+MTEKKwkJCQl7IDM2LCAgIDQsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDUyLCAgIDQsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggNTJ+NjQKKwkJCQl7IDEwMCwgMTEsICAyMCwgQk9USCwgRkFMU0V9LAkvLyA1RywgY2ggMTAwfjE0MAorCQkJCXsgMTQ5LCAgNSwgIDIwLCBCT1RILCBGQUxTRX0sCS8vIDVHLCBjaCAxNDl+MTY1CisJCQkJeyAwfSwJCQkJCQkJLy8gZW5kCisJCQl9CisJCX0sCit9OworCitzdGF0aWMgaW5saW5lIFBDSF9SRUdJT04gR2V0Q2hSZWdpb24oCisJSU4gUFVDSEFSIENudHJ5Q29kZSkKK3sKKwlJTlQgbG9vcCA9IDA7CisJUENIX1JFR0lPTiBwQ2hSZWdpb24gPSBOVUxMOworCisJd2hpbGUgKHN0cmNtcChDaFJlZ2lvbltsb29wXS5Db3VudFJlZywgIiIpICE9IDApCisJeworCQlpZiAoc3RybmNtcChDaFJlZ2lvbltsb29wXS5Db3VudFJlZywgQ250cnlDb2RlLCAyKSA9PSAwKQorCQl7CisJCQlwQ2hSZWdpb24gPSAmQ2hSZWdpb25bbG9vcF07CisJCQlicmVhazsKKwkJfQorCQlsb29wKys7CisJfQorCisJaWYgKHBDaFJlZ2lvbiA9PSBOVUxMKQorCQlwQ2hSZWdpb24gPSAmQ2hSZWdpb25bbG9vcF07CisJcmV0dXJuIHBDaFJlZ2lvbjsKK30KKworc3RhdGljIGlubGluZSBWT0lEIENoQmFuZENoZWNrKAorCUlOIFVDSEFSIFBoeU1vZGUsCisJT1VUIFBVQ0hBUiBwQ2hUeXBlKQoreworCXN3aXRjaChQaHlNb2RlKQorCXsKKwkJY2FzZSBQSFlfMTFBOgorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQljYXNlIFBIWV8xMUFOX01JWEVEOgorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJKnBDaFR5cGUgPSBCQU5EXzVHOworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExQUJHX01JWEVEOgorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQljYXNlIFBIWV8xMUFHTl9NSVhFRDoKKwkJY2FzZSBQSFlfMTFBQkdOX01JWEVEOgorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJKnBDaFR5cGUgPSBCQU5EX0JPVEg7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJKnBDaFR5cGUgPSBCQU5EXzI0RzsKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlubGluZSBVQ0hBUiBGaWxsQ2hMaXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBDSF9ERVNQIHBDaERlc3AsCisJSU4gVUNIQVIgT2Zmc2V0LAorCUlOIFVDSEFSIGluY3JlbWVudCkKK3sKKwlJTlQgaSwgaiwgbDsKKwlVQ0hBUiBjaGFubmVsOworCisJaiA9IE9mZnNldDsKKwlmb3IgKGkgPSAwOyBpIDwgcENoRGVzcC0+TnVtT2ZDaDsgaSsrKQorCXsKKwkJY2hhbm5lbCA9IHBDaERlc3AtPkZpcnN0Q2hhbm5lbCArIGkgKiBpbmNyZW1lbnQ7CisJCWZvciAobD0wOyBsPE1BWF9OVU1fT0ZfQ0hBTk5FTFM7IGwrKykKKwkJeworCQkJaWYgKGNoYW5uZWwgPT0gcEFkLT5UeFBvd2VyW2xdLkNoYW5uZWwpCisJCQl7CisJCQkJcEFkLT5DaGFubmVsTGlzdFtqXS5Qb3dlciA9IHBBZC0+VHhQb3dlcltsXS5Qb3dlcjsKKwkJCQlwQWQtPkNoYW5uZWxMaXN0W2pdLlBvd2VyMiA9IHBBZC0+VHhQb3dlcltsXS5Qb3dlcjI7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGwgPT0gTUFYX05VTV9PRl9DSEFOTkVMUykKKwkJCWNvbnRpbnVlOworCisJCXBBZC0+Q2hhbm5lbExpc3Rbal0uQ2hhbm5lbCA9IHBDaERlc3AtPkZpcnN0Q2hhbm5lbCArIGkgKiBpbmNyZW1lbnQ7CisJCXBBZC0+Q2hhbm5lbExpc3Rbal0uTWF4VHhQd3IgPSBwQ2hEZXNwLT5NYXhUeFB3cjsKKwkJcEFkLT5DaGFubmVsTGlzdFtqXS5EZnNSZXEgPSBwQ2hEZXNwLT5EZnNSZXE7CisJCWorKzsKKwl9CisJcEFkLT5DaGFubmVsTGlzdE51bSA9IGo7CisKKwlyZXR1cm4gajsKK30KKworc3RhdGljIGlubGluZSBWT0lEIENyZWF0ZUNoTGlzdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQQ0hfUkVHSU9OIHBDaFJlZ2lvbiwKKwlJTiBVQ0hBUiBHZW9ncmFwaHkpCit7CisJSU5UIGk7CisJVUNIQVIgb2Zmc2V0ID0gMDsKKwlQQ0hfREVTUCBwQ2hEZXNwOworCVVDSEFSIENoVHlwZTsKKwlVQ0hBUiBpbmNyZW1lbnQ7CisKKwlpZiAocENoUmVnaW9uID09IE5VTEwpCisJCXJldHVybjsKKworCUNoQmFuZENoZWNrKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUsICZDaFR5cGUpOworCisJZm9yIChpPTA7IGk8MTA7IGkrKykKKwl7CisJCXBDaERlc3AgPSAmcENoUmVnaW9uLT5DaERlc3BbaV07CisJCWlmIChwQ2hEZXNwLT5GaXJzdENoYW5uZWwgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmIChDaFR5cGUgPT0gQkFORF81RykKKwkJeworCQkJaWYgKHBDaERlc3AtPkZpcnN0Q2hhbm5lbCA8PSAxNCkKKwkJCQljb250aW51ZTsKKwkJfQorCQllbHNlIGlmIChDaFR5cGUgPT0gQkFORF8yNEcpCisJCXsKKwkJCWlmIChwQ2hEZXNwLT5GaXJzdENoYW5uZWwgPiAxNCkKKwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgocENoRGVzcC0+R2VvZ3JhcGh5ID09IEJPVEgpCisJCQl8fCAocENoRGVzcC0+R2VvZ3JhcGh5ID09IEdlb2dyYXBoeSkpCisgICAgICAgIHsKKwkJCWlmIChwQ2hEZXNwLT5GaXJzdENoYW5uZWwgPiAxNCkKKyAgICAgICAgICAgICAgICBpbmNyZW1lbnQgPSA0OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluY3JlbWVudCA9IDE7CisJCQlvZmZzZXQgPSBGaWxsQ2hMaXN0KHBBZCwgcENoRGVzcCwgb2Zmc2V0LCBpbmNyZW1lbnQpOworICAgICAgICB9CisJfQorfQorCitzdGF0aWMgaW5saW5lIFZPSUQgQnVpbGRDaGFubmVsTGlzdEV4KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVBDSF9SRUdJT04gcENoUmVnOworCisJcENoUmVnID0gR2V0Q2hSZWdpb24ocEFkLT5Db21tb25DZmcuQ291bnRyeUNvZGUpOworCUNyZWF0ZUNoTGlzdChwQWQsIHBDaFJlZywgcEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5KTsKK30KKworc3RhdGljIGlubGluZSBWT0lEIEJ1aWxkQmVhY29uQ2hMaXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCU9VVCBQVUNIQVIgcEJ1ZiwKKwlPVVQJUFVMT05HIHBCdWZMZW4pCit7CisJSU5UIGk7CisJVUxPTkcgVG1wTGVuOworCVBDSF9SRUdJT04gcENoUmVnaW9uOworCVBDSF9ERVNQIHBDaERlc3A7CisJVUNIQVIgQ2hUeXBlOworCisJcENoUmVnaW9uID0gR2V0Q2hSZWdpb24ocEFkLT5Db21tb25DZmcuQ291bnRyeUNvZGUpOworCisJaWYgKHBDaFJlZ2lvbiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlDaEJhbmRDaGVjayhwQWQtPkNvbW1vbkNmZy5QaHlNb2RlLCAmQ2hUeXBlKTsKKwkqcEJ1ZkxlbiA9IDA7CisKKwlmb3IgKGk9MDsgaTwxMDsgaSsrKQorCXsKKwkJcENoRGVzcCA9ICZwQ2hSZWdpb24tPkNoRGVzcFtpXTsKKwkJaWYgKHBDaERlc3AtPkZpcnN0Q2hhbm5lbCA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYgKENoVHlwZSA9PSBCQU5EXzVHKQorCQl7CisJCQlpZiAocENoRGVzcC0+Rmlyc3RDaGFubmVsIDw9IDE0KQorCQkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKENoVHlwZSA9PSBCQU5EXzI0RykKKwkJeworCQkJaWYgKHBDaERlc3AtPkZpcnN0Q2hhbm5lbCA+IDE0KQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKChwQ2hEZXNwLT5HZW9ncmFwaHkgPT0gQk9USCkKKwkJCXx8IChwQ2hEZXNwLT5HZW9ncmFwaHkgPT0gcEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5KSkKKwkJeworCQkJTWFrZU91dGdvaW5nRnJhbWUocEJ1ZiArICpwQnVmTGVuLAkJJlRtcExlbiwKKwkJCQkJCQkJMSwgICAgICAgICAgICAgICAgIAkmcENoRGVzcC0+Rmlyc3RDaGFubmVsLAorCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgCSZwQ2hEZXNwLT5OdW1PZkNoLAorCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgCSZwQ2hEZXNwLT5NYXhUeFB3ciwKKwkJCQkJCQkJRU5EX09GX0FSR1MpOworCQkJKnBCdWZMZW4gKz0gVG1wTGVuOworCQl9CisJfQorfQorCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK3N0YXRpYyBpbmxpbmUgQk9PTEVBTiBJc1ZhbGlkQ2hhbm5lbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiBjaGFubmVsKQorCit7CisJSU5UIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaSsrKQorCXsKKwkJaWYgKHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCA9PSBjaGFubmVsKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gcEFkLT5DaGFubmVsTGlzdE51bSkKKwkJcmV0dXJuIEZBTFNFOworCWVsc2UKKwkJcmV0dXJuIFRSVUU7Cit9CisKKworc3RhdGljIGlubGluZSBVQ0hBUiBHZXRFeHRDaCgKKwlJTiBVQ0hBUiBDaGFubmVsLAorCUlOIFVDSEFSIERpcmVjdGlvbikKK3sKKwlDSEFSIEV4dENoOworCisJaWYgKERpcmVjdGlvbiA9PSBFWFRDSEFfQUJPVkUpCisJCUV4dENoID0gQ2hhbm5lbCArIDQ7CisJZWxzZQorCQlFeHRDaCA9IChDaGFubmVsIC0gNCkgPiAwID8gKENoYW5uZWwgLSA0KSA6IDA7CisKKwlyZXR1cm4gRXh0Q2g7Cit9CisKKworc3RhdGljIGlubGluZSBWT0lEIE5fQ2hhbm5lbENoZWNrKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCS8vVUNIQVIgQ2hhbm5lbE51bSA9IHBBZC0+Q2hhbm5lbExpc3ROdW07CisJVUNIQVIgQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7CisKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyAgPT0gQldfNDApKQorCXsKKwkJaWYgKENoYW5uZWwgPiAxNCkKKwkJeworCQkJaWYgKChDaGFubmVsID09IDM2KSB8fCAoQ2hhbm5lbCA9PSA0NCkgfHwgKENoYW5uZWwgPT0gNTIpIHx8IChDaGFubmVsID09IDYwKSB8fCAoQ2hhbm5lbCA9PSAxMDApIHx8IChDaGFubmVsID09IDEwOCkgfHwKKwkJCSAgICAoQ2hhbm5lbCA9PSAxMTYpIHx8IChDaGFubmVsID09IDEyNCkgfHwgKENoYW5uZWwgPT0gMTMyKSB8fCAoQ2hhbm5lbCA9PSAxNDkpIHx8IChDaGFubmVsID09IDE1NykpCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSA9IEVYVENIQV9BQk9WRTsKKwkJCX0KKwkJCWVsc2UgaWYgKChDaGFubmVsID09IDQwKSB8fCAoQ2hhbm5lbCA9PSA0OCkgfHwgKENoYW5uZWwgPT0gNTYpIHx8IChDaGFubmVsID09IDY0KSB8fCAoQ2hhbm5lbCA9PSAxMDQpIHx8IChDaGFubmVsID09IDExMikgfHwKKwkJCQkJKENoYW5uZWwgPT0gMTIwKSB8fCAoQ2hhbm5lbCA9PSAxMjgpIHx8IChDaGFubmVsID09IDEzNikgfHwgKENoYW5uZWwgPT0gMTUzKSB8fCAoQ2hhbm5lbCA9PSAxNjEpKQorCQkJeworCQkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgPSBFWFRDSEFfQkVMT1c7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9IEJXXzIwOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJZG8KKwkJCXsKKwkJCQlVQ0hBUiBFeHRDaDsKKwkJCQlVQ0hBUiBEaXIgPSBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBOworCQkJCUV4dENoID0gR2V0RXh0Q2goQ2hhbm5lbCwgRGlyKTsKKwkJCQlpZiAoSXNWYWxpZENoYW5uZWwocEFkLCBFeHRDaCkpCisJCQkJCWJyZWFrOworCisJCQkJRGlyID0gKERpciA9PSBFWFRDSEFfQUJPVkUpID8gRVhUQ0hBX0JFTE9XIDogRVhUQ0hBX0FCT1ZFOworCQkJCUV4dENoID0gR2V0RXh0Q2goQ2hhbm5lbCwgRGlyKTsKKwkJCQlpZiAoSXNWYWxpZENoYW5uZWwocEFkLCBFeHRDaCkpCisJCQkJeworCQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBID0gRGlyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9IEJXXzIwOworCQkJfSB3aGlsZShGQUxTRSk7CisKKwkJCWlmIChDaGFubmVsID09IDE0KQorCQkJeworCQkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyAgPSBCV18yMDsKKwkJCQkvL3BBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgPSBFWFRDSEFfTk9ORTsJLy8gV2UgZGlkbid0IHNldCB0aGUgRXh0Q2ggYXMgTk9ORSBkdWUgdG8gaXQnbGwgc2V0IGluIFJUTVBTZXRIVCgpCisJCQl9CisJCX0KKwl9CisKKworfQorCisKK3N0YXRpYyBpbmxpbmUgVk9JRCBOX1NldENlbkNoKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCWlmIChwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPT0gQldfNDApCisJeworCQlpZiAocEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSA9PSBFWFRDSEFfQUJPVkUpCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCArIDI7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA9PSAxNCkKKwkJCQlwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgLSAxOworCQkJZWxzZQorCQkJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCAtIDI7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCX0KK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCitzdGF0aWMgaW5saW5lIFVJTlQ4IEdldEN1bnRyeU1heFR4UHdyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVJTlQ4IGNoYW5uZWwpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHBBZC0+Q2hhbm5lbExpc3ROdW07IGkrKykKKwl7CisJCWlmIChwQWQtPkNoYW5uZWxMaXN0W2ldLkNoYW5uZWwgPT0gY2hhbm5lbCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IHBBZC0+Q2hhbm5lbExpc3ROdW0pCisJCXJldHVybiAweGZmOworCWVsc2UKKwkJcmV0dXJuIHBBZC0+Q2hhbm5lbExpc3RbaV0uTWF4VHhQd3I7Cit9CisjZW5kaWYgLy8gX19DSExJU1RfSF9fCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uLzI4NzBfcnRtcF9pbml0LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi8yODcwX3J0bXBfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZjhkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi8yODcwX3J0bXBfaW5pdC5jCkBAIC0wLDAgKzEsMTc2MiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwkyODcwX3J0bXBfaW5pdC5jCisKKwlBYnN0cmFjdDoKKwlNaW5pcG9ydCBnZW5lcmljIHBvcnRpb24gaGVhZGVyIGZpbGUKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisJLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUGF1bCBMaW4gICAgMjAwMi0wOC0wMSAgICBjcmVhdGVkCisgICAgSm9obiBDaGFuZyAgMjAwNC0wOC0yMCAgICBSVDI1NjEvMjY2MSB1c2Ugc2NhdHRlci1nYXRoZXIgc2NoZW1lCisgICAgSmFuIExlZSAgCTIwMDYtMDktMTUgICAgUlQyODYwLiBDaGFuZ2UgZm9yIDgwMi4xMW4gLCBFRVBST00sIExlZCwgQkEsIEhULgorCVNhbXBsZSBMaW4JMjAwNy0wNS0zMSAgICBNZXJnZSBSVDI4NjAgYW5kIFJUMjg3MCBkcml2ZXJzLgorKi8KKworI2luY2x1ZGUJIi4uL3J0X2NvbmZpZy5oIgorCisKK3N0YXRpYyB2b2lkIHJ4X2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgcnQyODcwX2hjY2FfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgcnQyODcwX2FjM19kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBydDI4NzBfYWMyX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9hYzFfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgcnQyODcwX2FjMF9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBydDI4NzBfbWdtdF9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBydDI4NzBfbnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBydDI4NzBfcnRzX2ZyYW1lX2NvbXBsZXRlX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9wc3BvbGxfZnJhbWVfY29tcGxldGVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgcnQyODcwX2RhdGFvdXRfY29tcGxldGVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOworCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgSW5pdGlhbGl6ZSByZWNlaXZlIGRhdGEgc3RydWN0dXJlcy4KKworQXJndW1lbnRzOgorICAgIHBBZAkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCitSZXR1cm4gVmFsdWU6CisJTkRJU19TVEFUVVNfU1VDQ0VTUworCU5ESVNfU1RBVFVTX1JFU09VUkNFUworCitOb3RlOgorCUluaXRpYWxpemUgYWxsIHJlY2VpdmUgcmVsZWF0ZWQgcHJpdmF0ZSBidWZmZXIsIGluY2x1ZGUgdGhvc2UgZGVmaW5lCisJaW4gUlRNUF9BREFQVEVSIHN0cnVjdHVyZSBhbmQgYWxsIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzLiBUaGUgbWFob3IKKwl3b3JrIGlzIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgZWFjaCBwYWNrZXQgYW5kIGNoYWluIGJ1ZmZlciB0bworCU5ESVMgcGFja2V0IGRlc2NyaXB0b3IuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUwlOSUNJbml0UmVjdigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVQ0hBUgkJCQlpOworCU5ESVNfU1RBVFVTCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwlQT1NfQ09PS0lFCQkJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IE5JQ0luaXRSZWN2XG4iKSk7CisJcE9iaiA9IHBPYmo7CisKKwkvL0ludGVybG9ja2VkRXhjaGFuZ2UoJnBBZC0+UGVuZGluZ1J4LCAwKTsKKwlwQWQtPlBlbmRpbmdSeCA9IDA7CisJcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXggCT0gMDsJLy8gTmV4dCBSeCBSZWFkIGluZGV4CisJcEFkLT5OZXh0UnhCdWxrSW5JbmRleAkJPSAwIDsgLy9SWF9SSU5HX1NJWkUgLTE7IC8vIFJ4IEJ1bGsgcG9pbnRlcgorCXBBZC0+TmV4dFJ4QnVsa0luUG9zaXRpb24gCT0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAoUlhfUklOR19TSVpFKTsgaSsrKQorCXsKKwkJUFJYX0NPTlRFWFQgIHBSeENvbnRleHQgPSAmKHBBZC0+UnhDb250ZXh0W2ldKTsKKworCQkvL0FsbG9jYXRlIFVSQgorCQlwUnhDb250ZXh0LT5wVXJiID0gUlRVU0JfQUxMT0NfVVJCKDApOworCQlpZiAocFJ4Q29udGV4dC0+cFVyYiA9PSBOVUxMKQorCQl7CisJCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CisJCQlnb3RvIG91dDE7CisJCX0KKworCQkvLyBBbGxvY2F0ZSB0cmFuc2ZlciBidWZmZXIKKwkJcFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIgPSBSVFVTQl9VUkJfQUxMT0NfQlVGRkVSKHBPYmotPnBVc2JfRGV2LCBNQVhfUlhCVUxLX1NJWkUsICZwUnhDb250ZXh0LT5kYXRhX2RtYSk7CisJCWlmIChwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9PSBOVUxMKQorCQl7CisJCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CisJCQlnb3RvIG91dDE7CisJCX0KKworCQlOZGlzWmVyb01lbW9yeShwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwgTUFYX1JYQlVMS19TSVpFKTsKKworCQlwUnhDb250ZXh0LT5wQWQJPSBwQWQ7CisJCXBSeENvbnRleHQtPnBJcnAgPSBOVUxMOworCQlwUnhDb250ZXh0LT5JblVzZQkJPSBGQUxTRTsKKwkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZwk9IEZBTFNFOworCQlwUnhDb250ZXh0LT5SZWFkYWJsZQk9IEZBTFNFOworCQkvL3BSeENvbnRleHQtPlJlb3JkZXJJblVzZSA9IEZBTFNFOworCQlwUnhDb250ZXh0LT5iUnhIYW5kbGluZyA9IEZBTFNFOworCQlwUnhDb250ZXh0LT5CdWxrSW5PZmZzZXQgPSAwOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNJbml0UmVjdlxuIikpOworCXJldHVybiBTdGF0dXM7CisKK291dDE6CisJZm9yIChpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJeworCQlQUlhfQ09OVEVYVCAgcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCisJCWlmIChOVUxMICE9IHBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyKQorCQl7CisJCQlSVFVTQl9VUkJfRlJFRV9CVUZGRVIocE9iai0+cFVzYl9EZXYsIE1BWF9SWEJVTEtfU0laRSwKKwkJCQkJCQkJcFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIsIHBSeENvbnRleHQtPmRhdGFfZG1hKTsKKwkJCXBSeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyID0gTlVMTDsKKwkJfQorCisJCWlmIChOVUxMICE9IHBSeENvbnRleHQtPnBVcmIpCisJCXsKKwkJCVJUVVNCX1VOTElOS19VUkIocFJ4Q29udGV4dC0+cFVyYik7CisJCQlSVFVTQl9GUkVFX1VSQihwUnhDb250ZXh0LT5wVXJiKTsKKwkJCXBSeENvbnRleHQtPnBVcmIgPSBOVUxMOworCQl9CisJfQorCisJcmV0dXJuIFN0YXR1czsKK30KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIEluaXRpYWxpemUgdHJhbnNtaXQgZGF0YSBzdHJ1Y3R1cmVzLgorCitBcmd1bWVudHM6CisgICAgcEFkCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKK1JldHVybiBWYWx1ZToKKwlORElTX1NUQVRVU19TVUNDRVNTCisJTkRJU19TVEFUVVNfUkVTT1VSQ0VTCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUwlOSUNJbml0VHJhbnNtaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisjZGVmaW5lIExNX1VTQl9BTExPQyhwT2JqLCBDb250ZXh0LCBUQl9UeXBlLCBCdWZmZXJTaXplLCBTdGF0dXMsIG1zZzEsIGVycjEsIG1zZzIsIGVycjIpCVwKKwlDb250ZXh0LT5wVXJiID0gUlRVU0JfQUxMT0NfVVJCKDApOwkJXAorCWlmIChDb250ZXh0LT5wVXJiID09IE5VTEwpIHsJCQlcCisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCBtc2cxKTsJCVwKKwkJU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOwkJXAorCQlnb3RvIGVycjE7IH0JCQkJCQlcCisJCQkJCQkJCQkJCVwKKwlDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9IAkJCQlcCisJCShUQl9UeXBlKVJUVVNCX1VSQl9BTExPQ19CVUZGRVIocE9iai0+cFVzYl9EZXYsIEJ1ZmZlclNpemUsICZDb250ZXh0LT5kYXRhX2RtYSk7CVwKKwlpZiAoQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIgPT0gTlVMTCkgewlcCisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCBtc2cyKTsJCVwKKwkJU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOwkJXAorCQlnb3RvIGVycjI7IH0KKworI2RlZmluZSBMTV9VUkJfRlJFRShwT2JqLCBDb250ZXh0LCBCdWZmZXJTaXplKQkJCQlcCisJaWYgKE5VTEwgIT0gQ29udGV4dC0+cFVyYikgewkJCQkJCQlcCisJCVJUVVNCX1VOTElOS19VUkIoQ29udGV4dC0+cFVyYik7CQkJCQlcCisJCVJUVVNCX0ZSRUVfVVJCKENvbnRleHQtPnBVcmIpOwkJCQkJCVwKKwkJQ29udGV4dC0+cFVyYiA9IE5VTEw7IH0JCQkJCQkJCVwKKwlpZiAoTlVMTCAhPSBDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlcikgewkJCQlcCisJCVJUVVNCX1VSQl9GUkVFX0JVRkZFUihwT2JqLT5wVXNiX0RldiwgQnVmZmVyU2l6ZSwJXAorCQkJCQkJCQlDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwJXAorCQkJCQkJCQlDb250ZXh0LT5kYXRhX2RtYSk7CQkJXAorCQlDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9IE5VTEw7IH0KKworCVVDSEFSCQkJaSwgYWNpZHg7CisJTkRJU19TVEFUVVMgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJUFRYX0NPTlRFWFQJCXBOdWxsQ29udGV4dCAgID0gJihwQWQtPk51bGxDb250ZXh0KTsKKwlQVFhfQ09OVEVYVAkJcFBzUG9sbENvbnRleHQgPSAmKHBBZC0+UHNQb2xsQ29udGV4dCk7CisJUFRYX0NPTlRFWFQJCXBSVFNDb250ZXh0ICAgID0gJihwQWQtPlJUU0NvbnRleHQpOworCVBUWF9DT05URVhUCQlwTUxNRUNvbnRleHQgPSBOVUxMOworLy8JUEhUX1RYX0NPTlRFWFQJcEhUVFhDb250ZXh0ID0gTlVMTDsKKwlQT1NfQ09PS0lFCQlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCVBWT0lECQkJUmluZ0Jhc2VWYTsKKy8vCVJUTVBfVFhfUklORwkqcFR4UmluZzsKKwlSVE1QX01HTVRfUklORyAgKnBNZ210UmluZzsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBOSUNJbml0VHJhbnNtaXRcbiIpKTsKKwlwT2JqID0gcE9iajsKKworCS8vIEluaXQgNCBzZXQgb2YgVHggcGFyYW1ldGVycworCWZvcihhY2lkeCA9IDA7IGFjaWR4IDwgTlVNX09GX1RYX1JJTkc7IGFjaWR4KyspCisJeworCQkvLyBJbml0aWFsaXplIGFsbCBUcmFuc21pdCByZWxlYXRlZCBxdWV1ZXMKKwkJSW5pdGlhbGl6ZVF1ZXVlSGVhZGVyKCZwQWQtPlR4U3dRdWV1ZVthY2lkeF0pOworCisJCS8vIE5leHQgTG9jYWwgdHggcmluZyBwb2ludGVyIHdhaXRpbmcgZm9yIGJ1Y2sgb3V0CisJCXBBZC0+TmV4dEJ1bGtPdXRJbmRleFthY2lkeF0gPSBhY2lkeDsKKwkJcEFkLT5CdWxrT3V0UGVuZGluZ1thY2lkeF0gPSBGQUxTRTsgLy8gQnVjayBPdXQgY29udHJvbCBmbGFnCisJCS8vcEFkLT5EYXRhQnVsa0RvbmVJZHhbYWNpZHhdID0gMDsKKwl9CisKKwkvL3BBZC0+TmV4dE1MTUVJbmRleAk9IDA7CisJLy9wQWQtPlB1c2hNZ210SW5kZXgJPSAwOworCS8vcEFkLT5Qb3BNZ210SW5kZXgJPSAwOworCS8vSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5NZ210UXVldWVTaXplLCAwKTsKKwkvL0ludGVybG9ja2VkRXhjaGFuZ2UoJnBBZC0+VHhDb3VudCwgMCk7CisKKwkvL3BBZC0+UHJpb1JpbmdGaXJzdEluZGV4CT0gMDsKKwkvL3BBZC0+UHJpb1JpbmdUeENudAkJPSAwOworCisJZG8KKwl7CisJCS8vCisJCS8vIFRYX1JJTkdfU0laRSwgNCBBQ3MKKwkJLy8KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJZm9yKGFjaWR4PTA7IGFjaWR4PDQ7IGFjaWR4KyspCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCXsKKyNpZiAxIC8vZGVmIERPVDExX05fU1VQUE9SVAorCQkJUEhUX1RYX0NPTlRFWFQJcEhUVFhDb250ZXh0ID0gJihwQWQtPlR4Q29udGV4dFthY2lkeF0pOworCisJCQlOZGlzWmVyb01lbW9yeShwSFRUWENvbnRleHQsIHNpemVvZihIVF9UWF9DT05URVhUKSk7CisJCQkvL0FsbG9jYXRlIFVSQgorCQkJTE1fVVNCX0FMTE9DKHBPYmosIHBIVFRYQ29udGV4dCwgUEhUVFhfQlVGRkVSLCBzaXplb2YoSFRUWF9CVUZGRVIpLCBTdGF0dXMsCisJCQkJCQkJKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggVHhDb250ZXh0WyVkXSB1cmIhISBcbiIsIGFjaWR4KSwKKwkJCQkJCQlkb25lLAorCQkJCQkJCSgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIFR4Q29udGV4dFslZF0gSFRUWF9CVUZGRVIgISEgXG4iLCBhY2lkeCksCisJCQkJCQkJb3V0MSk7CisKKwkJCU5kaXNaZXJvTWVtb3J5KHBIVFRYQ29udGV4dC0+VHJhbnNmZXJCdWZmZXItPkFnZ3JlZ2F0aW9uLCA0KTsKKwkJCXBIVFRYQ29udGV4dC0+cEFkID0gcEFkOworCQkJcEhUVFhDb250ZXh0LT5wSXJwID0gTlVMTDsKKwkJCXBIVFRYQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCQkJcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uID0gMDsKKwkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSAwOworCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID0gMDsKKwkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID0gMDsKKwkJCXBIVFRYQ29udGV4dC0+QnVsa091dFNpemUgPSAwOworCQkJcEhUVFhDb250ZXh0LT5CdWxrT3V0UGlwZUlkID0gYWNpZHg7CisJCQlwSFRUWENvbnRleHQtPmJSaW5nRW1wdHkgPSBUUlVFOworCQkJcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQgPSBGQUxTRTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCXBBZC0+QnVsa091dFBlbmRpbmdbYWNpZHhdID0gRkFMU0U7CisJCX0KKworCisJCS8vCisJCS8vIE1HTVRfUklOR19TSVpFCisJCS8vCisJCS8vIEFsbG9jYXRlIE1HTVQgcmluZyBkZXNjcmlwdG9yJ3MgbWVtb3J5CisJCXBBZC0+TWdtdERlc2NSaW5nLkFsbG9jU2l6ZSA9IE1HTVRfUklOR19TSVpFICogc2l6ZW9mKFRYX0NPTlRFWFQpOworCQlSVE1QQWxsb2NhdGVNZW1vcnkoJnBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmEsIHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jU2l6ZSk7CisJCWlmIChwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhID09IE5VTEwpCisJCXsKKwkJCURCR1BSSU5UX0VSUigoIkZhaWxlZCB0byBhbGxvY2F0ZSBhIGJpZyBidWZmZXIgZm9yIE1nbXREZXNjUmluZyFcbiIpKTsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1JFU09VUkNFUzsKKwkJCWdvdG8gb3V0MTsKKwkJfQorCQlOZGlzWmVyb01lbW9yeShwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhLCBwQWQtPk1nbXREZXNjUmluZy5BbGxvY1NpemUpOworCQlSaW5nQmFzZVZhICAgICA9IHBBZC0+TWdtdERlc2NSaW5nLkFsbG9jVmE7CisKKwkJLy8gSW5pdGlhbGl6ZSBNR01UIFJpbmcgYW5kIGFzc29jaWF0ZWQgYnVmZmVyIG1lbW9yeQorCQlwTWdtdFJpbmcgPSAmcEFkLT5NZ210UmluZzsKKwkJZm9yIChpID0gMDsgaSA8IE1HTVRfUklOR19TSVpFOyBpKyspCisJCXsKKwkJCS8vIGxpbmsgdGhlIHByZS1hbGxvY2F0ZWQgTWdtdCBidWZmZXIgdG8gTWdtdFJpbmcuQ2VsbAorCQkJcE1nbXRSaW5nLT5DZWxsW2ldLkFsbG9jU2l6ZSA9IHNpemVvZihUWF9DT05URVhUKTsKKwkJCXBNZ210UmluZy0+Q2VsbFtpXS5BbGxvY1ZhID0gUmluZ0Jhc2VWYTsKKwkJCXBNZ210UmluZy0+Q2VsbFtpXS5wTmRpc1BhY2tldCA9IE5VTEw7CisJCQlwTWdtdFJpbmctPkNlbGxbaV0ucE5leHROZGlzUGFja2V0ID0gTlVMTDsKKworCQkJLy9BbGxvY2F0ZSBVUkIgZm9yIE1MTUVDb250ZXh0CisJCQlwTUxNRUNvbnRleHQgPSAoUFRYX0NPTlRFWFQpIHBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5BbGxvY1ZhOworCQkJcE1MTUVDb250ZXh0LT5wVXJiID0gUlRVU0JfQUxMT0NfVVJCKDApOworCQkJaWYgKHBNTE1FQ29udGV4dC0+cFVyYiA9PSBOVUxMKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIjwtLSBFUlJPUiBpbiBBbGxvYyBUWCBNTE1FQ29udGV4dFslZF0gdXJiISEgXG4iLCBpKSk7CisJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOworCQkJCWdvdG8gb3V0MjsKKwkJCX0KKwkJCXBNTE1FQ29udGV4dC0+cEFkID0gcEFkOworCQkJcE1MTUVDb250ZXh0LT5wSXJwID0gTlVMTDsKKwkJCXBNTE1FQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIgPSBOVUxMOworCQkJcE1MTUVDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCQkJcE1MTUVDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCQlwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9IEZBTFNFOworCQkJcE1MTUVDb250ZXh0LT5CdWxrT3V0U2l6ZSA9IDA7CisJCQlwTUxNRUNvbnRleHQtPlNlbGZJZHggPSBpOworCisJCQkvLyBPZmZzZXQgdG8gbmV4dCByaW5nIGRlc2NyaXB0b3IgYWRkcmVzcworCQkJUmluZ0Jhc2VWYSA9IChQVUNIQVIpIFJpbmdCYXNlVmEgKyBzaXplb2YoVFhfQ09OVEVYVCk7CisJCX0KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTUdNVCBSaW5nOiB0b3RhbCAlZCBlbnRyeSBhbGxvY2F0ZWRcbiIsIGkpKTsKKworCQkvL3BBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHggPSAoTUdNVF9SSU5HX1NJWkUgLSAxKTsKKwkJcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCA9IE1HTVRfUklOR19TSVpFOworCQlwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4ID0gMDsKKwkJcEFkLT5NZ210UmluZy5UeERtYUlkeCA9IDA7CisKKwkJLy8KKwkJLy8gQkVBQ09OX1JJTkdfU0laRQorCQkvLworCQlmb3IoaT0wOyBpPEJFQUNPTl9SSU5HX1NJWkU7IGkrKykgLy8gMgorCQl7CisJCQlQVFhfQ09OVEVYVAlwQmVhY29uQ29udGV4dCA9ICYocEFkLT5CZWFjb25Db250ZXh0W2ldKTsKKworCisJCQlOZGlzWmVyb01lbW9yeShwQmVhY29uQ29udGV4dCwgc2l6ZW9mKFRYX0NPTlRFWFQpKTsKKworCQkJLy9BbGxvY2F0ZSBVUkIKKwkJCUxNX1VTQl9BTExPQyhwT2JqLCBwQmVhY29uQ29udGV4dCwgUFRYX0JVRkZFUiwgc2l6ZW9mKFRYX0JVRkZFUiksIFN0YXR1cywKKwkJCQkJCQkoIjwtLSBFUlJPUiBpbiBBbGxvYyBUWCBCZWFjb25Db250ZXh0WyVkXSB1cmIhISBcbiIsIGkpLAorCQkJCQkJCW91dDIsCisJCQkJCQkJKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggQmVhY29uQ29udGV4dFslZF0gVFhfQlVGRkVSICEhIFxuIiwgaSksCisJCQkJCQkJb3V0Myk7CisKKwkJCXBCZWFjb25Db250ZXh0LT5wQWQgPSBwQWQ7CisJCQlwQmVhY29uQ29udGV4dC0+cElycCA9IE5VTEw7CisJCQlwQmVhY29uQ29udGV4dC0+SW5Vc2UgPSBGQUxTRTsKKwkJCXBCZWFjb25Db250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCX0KKworCQkvLworCQkvLyBOdWxsQ29udGV4dAorCQkvLworCQlOZGlzWmVyb01lbW9yeShwTnVsbENvbnRleHQsIHNpemVvZihUWF9DT05URVhUKSk7CisKKwkJLy9BbGxvY2F0ZSBVUkIKKwkJTE1fVVNCX0FMTE9DKHBPYmosIHBOdWxsQ29udGV4dCwgUFRYX0JVRkZFUiwgc2l6ZW9mKFRYX0JVRkZFUiksIFN0YXR1cywKKwkJCQkJCSgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIE51bGxDb250ZXh0IHVyYiEhIFxuIiksCisJCQkJCQlvdXQzLAorCQkJCQkJKCI8LS0gRVJST1IgaW4gQWxsb2MgVFggTnVsbENvbnRleHQgVFhfQlVGRkVSICEhIFxuIiksCisJCQkJCQlvdXQ0KTsKKworCQlwTnVsbENvbnRleHQtPnBBZCA9IHBBZDsKKwkJcE51bGxDb250ZXh0LT5wSXJwID0gTlVMTDsKKwkJcE51bGxDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCQlwTnVsbENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKworCQkvLworCQkvLyBSVFNDb250ZXh0CisJCS8vCisJCU5kaXNaZXJvTWVtb3J5KHBSVFNDb250ZXh0LCBzaXplb2YoVFhfQ09OVEVYVCkpOworCisJCS8vQWxsb2NhdGUgVVJCCisJCUxNX1VTQl9BTExPQyhwT2JqLCBwUlRTQ29udGV4dCwgUFRYX0JVRkZFUiwgc2l6ZW9mKFRYX0JVRkZFUiksIFN0YXR1cywKKwkJCQkJCSgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIFJUU0NvbnRleHQgdXJiISEgXG4iKSwKKwkJCQkJCW91dDQsCisJCQkJCQkoIjwtLSBFUlJPUiBpbiBBbGxvYyBUWCBSVFNDb250ZXh0IFRYX0JVRkZFUiAhISBcbiIpLAorCQkJCQkJb3V0NSk7CisKKwkJcFJUU0NvbnRleHQtPnBBZCA9IHBBZDsKKwkJcFJUU0NvbnRleHQtPnBJcnAgPSBOVUxMOworCQlwUlRTQ29udGV4dC0+SW5Vc2UgPSBGQUxTRTsKKwkJcFJUU0NvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKworCQkvLworCQkvLyBQc1BvbGxDb250ZXh0CisJCS8vCisJCS8vTmRpc1plcm9NZW1vcnkocFBzUG9sbENvbnRleHQsIHNpemVvZihUWF9DT05URVhUKSk7CisJCS8vQWxsb2NhdGUgVVJCCisJCUxNX1VTQl9BTExPQyhwT2JqLCBwUHNQb2xsQ29udGV4dCwgUFRYX0JVRkZFUiwgc2l6ZW9mKFRYX0JVRkZFUiksIFN0YXR1cywKKwkJCQkJCSgiPC0tIEVSUk9SIGluIEFsbG9jIFRYIFBzUG9sbENvbnRleHQgdXJiISEgXG4iKSwKKwkJCQkJCW91dDUsCisJCQkJCQkoIjwtLSBFUlJPUiBpbiBBbGxvYyBUWCBQc1BvbGxDb250ZXh0IFRYX0JVRkZFUiAhISBcbiIpLAorCQkJCQkJb3V0Nik7CisKKwkJcFBzUG9sbENvbnRleHQtPnBBZCA9IHBBZDsKKwkJcFBzUG9sbENvbnRleHQtPnBJcnAgPSBOVUxMOworCQlwUHNQb2xsQ29udGV4dC0+SW5Vc2UgPSBGQUxTRTsKKwkJcFBzUG9sbENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJcFBzUG9sbENvbnRleHQtPmJBZ2dyZWdhdGlibGUgPSBGQUxTRTsKKwkJcFBzUG9sbENvbnRleHQtPkxhc3RPbmUgPSBUUlVFOworCisJfSAgIHdoaWxlIChGQUxTRSk7CisKKworZG9uZToKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0gTklDSW5pdFRyYW5zbWl0XG4iKSk7CisKKwlyZXR1cm4gU3RhdHVzOworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVSUk9SIEhBTkRMRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK291dDY6CisJTE1fVVJCX0ZSRUUocE9iaiwgcFBzUG9sbENvbnRleHQsIHNpemVvZihUWF9CVUZGRVIpKTsKKworb3V0NToKKwlMTV9VUkJfRlJFRShwT2JqLCBwUlRTQ29udGV4dCwgc2l6ZW9mKFRYX0JVRkZFUikpOworCitvdXQ0OgorCUxNX1VSQl9GUkVFKHBPYmosIHBOdWxsQ29udGV4dCwgc2l6ZW9mKFRYX0JVRkZFUikpOworCitvdXQzOgorCWZvcihpPTA7IGk8QkVBQ09OX1JJTkdfU0laRTsgaSsrKQorCXsKKwkJUFRYX0NPTlRFWFQJcEJlYWNvbkNvbnRleHQgPSAmKHBBZC0+QmVhY29uQ29udGV4dFtpXSk7CisJCWlmIChwQmVhY29uQ29udGV4dCkKKwkJCUxNX1VSQl9GUkVFKHBPYmosIHBCZWFjb25Db250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisJfQorCitvdXQyOgorCWlmIChwQWQtPk1nbXREZXNjUmluZy5BbGxvY1ZhKQorCXsKKwkJcE1nbXRSaW5nID0gJnBBZC0+TWdtdFJpbmc7CisJZm9yKGk9MDsgaTxNR01UX1JJTkdfU0laRTsgaSsrKQorCXsKKwkJcE1MTUVDb250ZXh0ID0gKFBUWF9DT05URVhUKSBwQWQtPk1nbXRSaW5nLkNlbGxbaV0uQWxsb2NWYTsKKwkJaWYgKHBNTE1FQ29udGV4dCkKKwkJCUxNX1VSQl9GUkVFKHBPYmosIHBNTE1FQ29udGV4dCwgc2l6ZW9mKFRYX0JVRkZFUikpOworCX0KKwkJTmRpc0ZyZWVNZW1vcnkocEFkLT5NZ210RGVzY1JpbmcuQWxsb2NWYSwgcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NTaXplLCAwKTsKKwkJcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NWYSA9IE5VTEw7CisJfQorCitvdXQxOgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJZm9yKGFjaWR4PTA7IGFjaWR4PDQ7IGFjaWR4KyspCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJeworCQlQSFRfVFhfQ09OVEVYVCBwVHhDb250ZXh0ID0gJihwQWQtPlR4Q29udGV4dFthY2lkeF0pOworCQlpZiAocFR4Q29udGV4dCkKKwkJCUxNX1VSQl9GUkVFKHBPYmosIHBUeENvbnRleHQsIHNpemVvZihIVFRYX0JVRkZFUikpOworCX0KKworCS8vIEhlcmUgd2UgZGlkbid0IGhhdmUgYW55IHByZS1hbGxvY2F0ZWQgbWVtb3J5IG5lZWQgdG8gZnJlZS4KKworCXJldHVybiBTdGF0dXM7Cit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBBbGxvY2F0ZSBETUEgbWVtb3J5IGJsb2NrcyBmb3Igc2VuZCwgcmVjZWl2ZS4KKworQXJndW1lbnRzOgorICAgIHBBZAkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCitSZXR1cm4gVmFsdWU6CisJTkRJU19TVEFUVVNfU1VDQ0VTUworCU5ESVNfU1RBVFVTX0ZBSUxVUkUKKwlORElTX1NUQVRVU19SRVNPVVJDRVMKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCVJUTVBBbGxvY1R4UnhSaW5nTWVtb3J5KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworLy8JQ09VTlRFUl84MDJfMTEJcENvdW50ZXIgPSAmcEFkLT5XbGFuQ291bnRlcnM7CisJTkRJU19TVEFUVVMJCVN0YXR1czsKKwlJTlQJCQkJbnVtOworCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gUlRNUEFsbG9jVHhSeFJpbmdNZW1vcnlcbiIpKTsKKworCisJZG8KKwl7CisJCS8vIEluaXQgdGhlIENtZFEgYW5kIENtZFFMb2NrCisJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisJCVJUVVNCSW5pdGlhbGl6ZUNtZFEoJnBBZC0+Q21kUSk7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworCisKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+TUxNRUJ1bGtPdXRMb2NrKTsKKwkJLy9OZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NTE1FV2FpdFF1ZXVlTG9jayk7CisJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrWzBdKTsKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbMV0pOworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1syXSk7CisJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrWzNdKTsKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbNF0pOworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1s1XSk7CisJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJ1bGtJbkxvY2spOworCisJCWZvciAobnVtID0gMDsgbnVtIDwgTlVNX09GX1RYX1JJTkc7IG51bSsrKQorCQl7CisJCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbbnVtXSk7CisJCX0KKworI2lmZGVmIFJBTElOS19BVEUKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworLy8JCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPk1lbUxvY2spOwkvLyBOb3QgdXNlZCBpbiBSVDI4WFgKKworLy8JCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOyAvLyBpbml0IGl0IGluIFVzZXJDZmdJbml0KCkKKy8vCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOyAvLyBpbml0IGl0IGluIEJBVGFibGVJbml0KCkKKworLy8JCWZvcihudW09MDsgbnVtPE1BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFOyBudW0rKykKKy8vCQl7CisvLwkJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtudW1dLlJ4UmVSaW5nTG9jayk7CisvLwkJfQorCisJCS8vCisJCS8vIEluaXQgTWFjIFRhYmxlCisJCS8vCisvLwkJTWFjVGFibGVJbml0aWFsaXplKHBBZCk7CisKKwkJLy8KKwkJLy8gSW5pdCBzZW5kIGRhdGEgc3RydWN0dXJlcyBhbmQgcmVsYXRlZCBwYXJhbWV0ZXJzCisJCS8vCisJCVN0YXR1cyA9IE5JQ0luaXRUcmFuc21pdChwQWQpOworCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQlicmVhazsKKworCQkvLworCQkvLyBJbml0IHJlY2VpdmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZWxhdGVkIHBhcmFtZXRlcnMKKwkJLy8KKwkJU3RhdHVzID0gTklDSW5pdFJlY3YocEFkKTsKKwkJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJYnJlYWs7CisKKwkJcEFkLT5QZW5kaW5nSW9Db3VudCA9IDE7CisKKwl9IHdoaWxlIChGQUxTRSk7CisKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5GcmFnRnJhbWUsIHNpemVvZihGUkFHTUVOVF9GUkFNRSkpOworCXBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0ID0gIFJUTVBfQWxsb2NhdGVGcmFnUGFja2V0QnVmZmVyKHBBZCwgUlhfQlVGRkVSX05PUk1TSVpFKTsKKworCWlmIChwQWQtPkZyYWdGcmFtZS5wRnJhZ1BhY2tldCA9PSBOVUxMKQorCXsKKwkJU3RhdHVzID0gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOworCX0KKworCURCR1BSSU5UX1MoU3RhdHVzLCAoIjwtLSBSVE1QQWxsb2NUeFJ4UmluZ01lbW9yeSwgU3RhdHVzPSV4XG4iLCBTdGF0dXMpKTsKKwlyZXR1cm4gU3RhdHVzOworfQorCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisJQ2FsbHMgVVNCX0ludGVyZmFjZVN0b3AgYW5kIGZyZWVzIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSBVUkJzCisgICAgY2FsbHMgTmRpc01EZXJlZ2lzdGVyRGV2aWNlIGFuZCBmcmVlcyB0aGUgbWVtb3J5CisgICAgYWxsb2NhdGVkIGluIFZOZXRJbml0aWFsaXplIGZvciB0aGUgQWRhcHRlciBPYmplY3QKKworQXJndW1lbnRzOgorCSpwQWQJCQkJdGhlIHJheHggaW50ZXJmYWNlIGRhdGEgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisJTm9uZQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QRnJlZVR4UnhSaW5nTWVtb3J5KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworI2RlZmluZSBMTV9VUkJfRlJFRShwT2JqLCBDb250ZXh0LCBCdWZmZXJTaXplKQkJCQlcCisJaWYgKE5VTEwgIT0gQ29udGV4dC0+cFVyYikgewkJCQkJCQlcCisJCVJUVVNCX1VOTElOS19VUkIoQ29udGV4dC0+cFVyYik7CQkJCQlcCisJCVJUVVNCX0ZSRUVfVVJCKENvbnRleHQtPnBVcmIpOwkJCQkJCVwKKwkJQ29udGV4dC0+cFVyYiA9IE5VTEw7IH0JCQkJCQkJCVwKKwlpZiAoTlVMTCAhPSBDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlcikgewkJCQkJXAorCQlSVFVTQl9VUkJfRlJFRV9CVUZGRVIocE9iai0+cFVzYl9EZXYsIEJ1ZmZlclNpemUsCVwKKwkJCQkJCQkJQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIsCVwKKwkJCQkJCQkJQ29udGV4dC0+ZGF0YV9kbWEpOwkJCVwKKwkJQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIgPSBOVUxMOyB9CisKKworCVVJTlQgICAgICAgICAgICAgICAgaSwgYWNpZHg7CisJUFRYX0NPTlRFWFQJCQlwTnVsbENvbnRleHQgICA9ICZwQWQtPk51bGxDb250ZXh0OworCVBUWF9DT05URVhUCQkJcFBzUG9sbENvbnRleHQgPSAmcEFkLT5Qc1BvbGxDb250ZXh0OworCVBUWF9DT05URVhUCQkJcFJUU0NvbnRleHQgICAgPSAmcEFkLT5SVFNDb250ZXh0OworLy8JUEhUX1RYX0NPTlRFWFQgCQlwSFRUWENvbnRleHQ7CisJLy9QUlRNUF9SRU9SREVSQlVGCXBSZW9yZGVyQnVmOworCVBPU19DT09LSUUJCQlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworLy8JUlRNUF9UWF9SSU5HCQkqcFR4UmluZzsKKworCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIi0tLT4gUlRNUEZyZWVUeFJ4UmluZ01lbW9yeVxuIikpOworCXBPYmogPSBwT2JqOworCisJLy8gRnJlZSBhbGwgcmVzb3VyY2VzIGZvciB0aGUgUkVDRUlWRSBidWZmZXIgcXVldWUuCisJZm9yKGk9MDsgaTwoUlhfUklOR19TSVpFKTsgaSsrKQorCXsKKwkJUFJYX0NPTlRFWFQgIHBSeENvbnRleHQgPSAmKHBBZC0+UnhDb250ZXh0W2ldKTsKKwkJaWYgKHBSeENvbnRleHQpCisJCQlMTV9VUkJfRlJFRShwT2JqLCBwUnhDb250ZXh0LCBNQVhfUlhCVUxLX1NJWkUpOworCX0KKworCS8vIEZyZWUgUHNQb2xsIGZyYW1lIHJlc291cmNlCisJTE1fVVJCX0ZSRUUocE9iaiwgcFBzUG9sbENvbnRleHQsIHNpemVvZihUWF9CVUZGRVIpKTsKKworCS8vIEZyZWUgTlVMTCBmcmFtZSByZXNvdXJjZQorCUxNX1VSQl9GUkVFKHBPYmosIHBOdWxsQ29udGV4dCwgc2l6ZW9mKFRYX0JVRkZFUikpOworCisJLy8gRnJlZSBSVFMgZnJhbWUgcmVzb3VyY2UKKwlMTV9VUkJfRlJFRShwT2JqLCBwUlRTQ29udGV4dCwgc2l6ZW9mKFRYX0JVRkZFUikpOworCisKKwkvLyBGcmVlIGJlYWNvbiBmcmFtZSByZXNvdXJjZQorCWZvcihpPTA7IGk8QkVBQ09OX1JJTkdfU0laRTsgaSsrKQorCXsKKwkJUFRYX0NPTlRFWFQJcEJlYWNvbkNvbnRleHQgPSAmKHBBZC0+QmVhY29uQ29udGV4dFtpXSk7CisJCWlmIChwQmVhY29uQ29udGV4dCkKKwkJCUxNX1VSQl9GUkVFKHBPYmosIHBCZWFjb25Db250ZXh0LCBzaXplb2YoVFhfQlVGRkVSKSk7CisJfQorCisKKwkvLyBGcmVlIG1nbXQgZnJhbWUgcmVzb3VyY2UKKwlmb3IoaSA9IDA7IGkgPCBNR01UX1JJTkdfU0laRTsgaSsrKQorCXsKKwkJUFRYX0NPTlRFWFQgcE1MTUVDb250ZXh0ID0gKFBUWF9DT05URVhUKXBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5BbGxvY1ZhOworCQkvL0xNX1VSQl9GUkVFKHBPYmosIHBNTE1FQ29udGV4dCwgc2l6ZW9mKFRYX0JVRkZFUikpOworCQlpZiAoTlVMTCAhPSBwQWQtPk1nbXRSaW5nLkNlbGxbaV0ucE5kaXNQYWNrZXQpCisJCXsKKwkJCVJUTVBGcmVlTmRpc1BhY2tldChwQWQsIHBBZC0+TWdtdFJpbmcuQ2VsbFtpXS5wTmRpc1BhY2tldCk7CisJCQlwQWQtPk1nbXRSaW5nLkNlbGxbaV0ucE5kaXNQYWNrZXQgPSBOVUxMOworCQkJcE1MTUVDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9IE5VTEw7CisJCX0KKworCQlpZiAocE1MTUVDb250ZXh0KQorCQl7CisJCQlpZiAoTlVMTCAhPSBwTUxNRUNvbnRleHQtPnBVcmIpCisJCQl7CisJCQkJUlRVU0JfVU5MSU5LX1VSQihwTUxNRUNvbnRleHQtPnBVcmIpOworCQkJCVJUVVNCX0ZSRUVfVVJCKHBNTE1FQ29udGV4dC0+cFVyYik7CisJCQkJcE1MTUVDb250ZXh0LT5wVXJiID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KKwlpZiAocEFkLT5NZ210RGVzY1JpbmcuQWxsb2NWYSkKKwkJTmRpc0ZyZWVNZW1vcnkocEFkLT5NZ210RGVzY1JpbmcuQWxsb2NWYSwgcEFkLT5NZ210RGVzY1JpbmcuQWxsb2NTaXplLCAwKTsKKworCisJLy8gRnJlZSBUeCBmcmFtZSByZXNvdXJjZQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlmb3IoYWNpZHg9MDsgYWNpZHg8NDsgYWNpZHgrKykKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJeworCQlQSFRfVFhfQ09OVEVYVCBwSFRUWENvbnRleHQgPSAmKHBBZC0+VHhDb250ZXh0W2FjaWR4XSk7CisJCQlpZiAocEhUVFhDb250ZXh0KQorCQkJCUxNX1VSQl9GUkVFKHBPYmosIHBIVFRYQ29udGV4dCwgc2l6ZW9mKEhUVFhfQlVGRkVSKSk7CisJCX0KKworCWlmIChwQWQtPkZyYWdGcmFtZS5wRnJhZ1BhY2tldCkKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0LCBORElTX1NUQVRVU19TVUNDRVNTKTsKKworCWZvcihpPTA7IGk8NjsgaSsrKQorCXsKKwkJTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1tpXSk7CisJfQorCisJTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5CdWxrSW5Mb2NrKTsKKwlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPk1MTUVCdWxrT3V0TG9jayk7CisKKwlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKyNpZmRlZiBSQUxJTktfQVRFCisJTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCS8vIENsZWFyIGFsbCBwZW5kaW5nIGJ1bGstb3V0IHJlcXVlc3QgZmxhZ3MuCisJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgMHhmZmZmZmZmZik7CisKKy8vCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisKKy8vCWZvcihpPTA7IGk8TUFYX0xFTl9PRl9CQV9SRUNfVEFCTEU7IGkrKykKKy8vCXsKKy8vCQlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtpXS5SeFJlUmluZ0xvY2spOworLy8JfQorCisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiPC0tLSBSZWxlYXNlQWRhcHRlclxuIikpOworfQorCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgQWxsb2NhdGUgbWVtb3J5IGZvciBhZGFwdGVyIGNvbnRyb2wgYmxvY2suCisKK0FyZ3VtZW50czoKKyAgICBwQWQJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworUmV0dXJuIFZhbHVlOgorCU5ESVNfU1RBVFVTX1NVQ0NFU1MKKwlORElTX1NUQVRVU19GQUlMVVJFCisJTkRJU19TVEFUVVNfUkVTT1VSQ0VTCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUyBBZGFwdGVyQmxvY2tBbGxvY2F0ZU1lbW9yeSgKKwlJTiBQVk9JRAloYW5kbGUsCisJT1VUCVBWT0lECSpwcEFkKQoreworCVBVU0JfREVWCXVzYl9kZXY7CisJUE9TX0NPT0tJRQlwT2JqID0gKFBPU19DT09LSUUpIGhhbmRsZTsKKworCisJdXNiX2RldiA9IHBPYmotPnBVc2JfRGV2OworCisJcE9iai0+TUxNRVRocl9waWQJPSBOVUxMOworCXBPYmotPlJUVVNCQ21kVGhyX3BpZAk9IE5VTEw7CisKKwkqcHBBZCA9IChQVk9JRCl2bWFsbG9jKHNpemVvZihSVE1QX0FEQVBURVIpKTsKKworCWlmICgqcHBBZCkKKwl7CisJCU5kaXNaZXJvTWVtb3J5KCpwcEFkLCBzaXplb2YoUlRNUF9BREFQVEVSKSk7CisJCSgoUFJUTVBfQURBUFRFUikqcHBBZCktPk9TX0Nvb2tpZSA9IGhhbmRsZTsKKwkJcmV0dXJuIChORElTX1NUQVRVU19TVUNDRVNTKTsKKwl9CisJZWxzZQorCXsKKwkJcmV0dXJuIChORElTX1NUQVRVU19GQUlMVVJFKTsKKwl9Cit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBDcmVhdGUga2VybmVsIHRocmVhZHMgJiB0YXNrbGV0cy4KKworQXJndW1lbnRzOgorICAgICpuZXRfZGV2CQkJUG9pbnRlciB0byB3aXJlbGVzcyBuZXQgZGV2aWNlIGludGVyZmFjZQorCitSZXR1cm4gVmFsdWU6CisJTkRJU19TVEFUVVNfU1VDQ0VTUworCU5ESVNfU1RBVFVTX0ZBSUxVUkUKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCSBDcmVhdGVUaHJlYWRzKAorCUlOCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworCVBSVE1QX0FEQVBURVIgcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKwlQT1NfQ09PS0lFIHBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CisJcGlkX3QgcGlkX251bWJlcjsKKworCS8vaW5pdF9NVVRFWCgmKHBBZC0+dXNiZGV2X3NlbWFwaG9yZSkpOworCisJaW5pdF9NVVRFWF9MT0NLRUQoJihwQWQtPm1sbWVfc2VtYXBob3JlKSk7CisJaW5pdF9jb21wbGV0aW9uICgmcEFkLT5tbG1lQ29tcGxldGUpOworCisJaW5pdF9NVVRFWF9MT0NLRUQoJihwQWQtPlJUVVNCQ21kX3NlbWFwaG9yZSkpOworCWluaXRfY29tcGxldGlvbiAoJnBBZC0+Q21kUUNvbXBsZXRlKTsKKworCWluaXRfTVVURVhfTE9DS0VEKCYocEFkLT5SVFVTQlRpbWVyX3NlbWFwaG9yZSkpOworCWluaXRfY29tcGxldGlvbiAoJnBBZC0+VGltZXJRQ29tcGxldGUpOworCisJLy8gQ3JlYXQgTUxNRSBUaHJlYWQKKwlwT2JqLT5NTE1FVGhyX3BpZCA9IE5VTEw7CisJcGlkX251bWJlciA9IGtlcm5lbF90aHJlYWQoTWxtZVRocmVhZCwgcEFkLCBDTE9ORV9WTSk7CisJaWYgKHBpZF9udW1iZXIgPCAwKQorCXsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gc3RhcnQgTWxtZSB0aHJlYWRcbiIscEFkLT5uZXRfZGV2LT5uYW1lKTsKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCXBPYmotPk1MTUVUaHJfcGlkID0gZmluZF9nZXRfcGlkKHBpZF9udW1iZXIpOworCS8vIFdhaXQgZm9yIHRoZSB0aHJlYWQgdG8gc3RhcnQKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCYocEFkLT5tbG1lQ29tcGxldGUpKTsKKworCS8vIENyZWF0IENvbW1hbmQgVGhyZWFkCisJcE9iai0+UlRVU0JDbWRUaHJfcGlkID0gTlVMTDsKKwlwaWRfbnVtYmVyID0ga2VybmVsX3RocmVhZChSVFVTQkNtZFRocmVhZCwgcEFkLCBDTE9ORV9WTSk7CisJaWYgKHBpZF9udW1iZXIgPCAwKQorCXsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiB1bmFibGUgdG8gc3RhcnQgUlRVU0JDbWQgdGhyZWFkXG4iLHBBZC0+bmV0X2Rldi0+bmFtZSk7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKwlwT2JqLT5SVFVTQkNtZFRocl9waWQgPSBmaW5kX2dldF9waWQocGlkX251bWJlcik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmKHBBZC0+Q21kUUNvbXBsZXRlKSk7CisKKwlwT2JqLT5UaW1lclFUaHJfcGlkID0gTlVMTDsKKwlwaWRfbnVtYmVyID0ga2VybmVsX3RocmVhZChUaW1lclFUaHJlYWQsIHBBZCwgQ0xPTkVfVk0pOworCWlmIChwaWRfbnVtYmVyIDwgMCkKKwl7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogdW5hYmxlIHRvIHN0YXJ0IFRpbWVyUVRocmVhZFxuIixwQWQtPm5ldF9kZXYtPm5hbWUpOworCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisJcE9iai0+VGltZXJRVGhyX3BpZCA9IGZpbmRfZ2V0X3BpZChwaWRfbnVtYmVyKTsKKwkvLyBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIHN0YXJ0CisJd2FpdF9mb3JfY29tcGxldGlvbigmKHBBZC0+VGltZXJRQ29tcGxldGUpKTsKKworCS8vIENyZWF0ZSByZWNlaXZlIHRhc2tsZXQKKwl0YXNrbGV0X2luaXQoJnBPYmotPnJ4X2RvbmVfdGFzaywgcnhfZG9uZV90YXNrbGV0LCAoVUxPTkcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPm1nbXRfZG1hX2RvbmVfdGFzaywgcnQyODcwX21nbXRfZG1hX2RvbmVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPmFjMF9kbWFfZG9uZV90YXNrLCBydDI4NzBfYWMwX2RtYV9kb25lX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXBBZCk7CisJdGFza2xldF9pbml0KCZwT2JqLT5hYzFfZG1hX2RvbmVfdGFzaywgcnQyODcwX2FjMV9kbWFfZG9uZV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOworCXRhc2tsZXRfaW5pdCgmcE9iai0+YWMyX2RtYV9kb25lX3Rhc2ssIHJ0Mjg3MF9hYzJfZG1hX2RvbmVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPmFjM19kbWFfZG9uZV90YXNrLCBydDI4NzBfYWMzX2RtYV9kb25lX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXBBZCk7CisJdGFza2xldF9pbml0KCZwT2JqLT5oY2NhX2RtYV9kb25lX3Rhc2ssIHJ0Mjg3MF9oY2NhX2RtYV9kb25lX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXBBZCk7CisJdGFza2xldF9pbml0KCZwT2JqLT50YnR0X3Rhc2ssIHRidHRfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPm51bGxfZnJhbWVfY29tcGxldGVfdGFzaywgcnQyODcwX251bGxfZnJhbWVfY29tcGxldGVfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcEFkKTsKKwl0YXNrbGV0X2luaXQoJnBPYmotPnJ0c19mcmFtZV9jb21wbGV0ZV90YXNrLCBydDI4NzBfcnRzX2ZyYW1lX2NvbXBsZXRlX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXBBZCk7CisJdGFza2xldF9pbml0KCZwT2JqLT5wc3BvbGxfZnJhbWVfY29tcGxldGVfdGFzaywgcnQyODcwX3BzcG9sbF9mcmFtZV9jb21wbGV0ZV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwQWQpOworCisJcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAJQXMgU1RBJ3MgQlNTSUQgaXMgYSBXQyB0b28sIGl0IHVzZXMgc2hhcmVkIGtleSB0YWJsZS4KKyAJVGhpcyBmdW5jdGlvbiB3cml0ZSBjb3JyZWN0IHVuaWNhc3QgVFgga2V5IHRvIEFTSUMgV0NJRC4KKyAJQW5kIHdlIHN0aWxsIG1ha2UgYSBjb3B5IGluIG91ciBNYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5QYWlyd2lzZUtleS4KKwlDYWxsZXIgZ3VhcmFudGVlIFRLSVAvQUVTIGFsd2F5cyBoYXMga2V5aWR4ID0gMC4gKHBhaXJ3aXNlIGtleSkKKwlDYWxsZXIgZ3VhcmFudGVlIFdFUCBjYWxscyB0aGlzIGZ1bmN0aW9uIHdoZW4gc2V0IFR4a2V5LCAgZGVmYXVsdCBrZXkgaW5kZXg9MH4zLgorCitBcmd1bWVudHM6CisJcEFkIAkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCXBLZXkJCQkJCVBvaW50ZXIgdG8gdGhlIHdoZXJlIHRoZSBrZXkgc3RvcmVkCisKK1JldHVybiBWYWx1ZToKKwlORElTX1NVQ0NFU1MJCQlBZGQga2V5IHN1Y2Nlc3NmdWxseQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QQWRkQlNTSURDaXBoZXIoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCVVDSEFSCQkJCUFpZCwKKwlJTglQTkRJU184MDJfMTFfS0VZCXBLZXksCisJSU4gIFVDSEFSICAgCQkJQ2lwaGVyQWxnKQoreworCVBVQ0hBUgkJcFR4TWljLCBwUnhNaWM7CisJQk9PTEVBTiAJYktleVJTQywgYkF1dGhlbnRpY2F0b3I7IC8vIGluZGljYXRlIHRoZSByZWNlaXZlIFNDIHNldCBieSBLZXlSU0MgdmFsdWUKKy8vCVVDSEFSCQlDaXBoZXJBbGc7CisJVUNIQVIJCWk7CisJVUxPTkcJCVdDSURBdHRyaTsKKwlVU0hPUlQJIAlvZmZzZXQ7CisJVUNIQVIJCUtleUlkeCwgSVZFSVZbOF07CisJVUlOVDMyCQlWYWx1ZTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBBZGRCU1NJRENpcGhlcj09PiBBaWQgPSAlZFxuIixBaWQpKTsKKworCS8vIEJpdCAyOSBvZiBBZGQta2V5IEtleVJTQworCWJLZXlSU0MgCSAgID0gKHBLZXktPktleUluZGV4ICYgMHgyMDAwMDAwMCkgPyBUUlVFIDogRkFMU0U7CisKKwkvLyBCaXQgMjggb2YgQWRkLWtleSBBdXRoZW50aWNhdG9yCisJYkF1dGhlbnRpY2F0b3IgPSAocEtleS0+S2V5SW5kZXggJiAweDEwMDAwMDAwKSA/IFRSVUUgOiBGQUxTRTsKKwlLZXlJZHggPSAoVUNIQVIpcEtleS0+S2V5SW5kZXgmMHhmZjsKKworCWlmIChLZXlJZHggPiA0KQorCQlyZXR1cm47CisKKworCWlmIChwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuQ2lwaGVyQWxnID09IENJUEhFUl9US0lQKQorCXsJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisJCXsKKwkJCS8vIGZvciBXUEEtTm9uZSBUeCwgUnggTUlDIGlzIHRoZSBzYW1lCisJCQlwVHhNaWMgPSAoUFVDSEFSKSAoJnBLZXktPktleU1hdGVyaWFsKSArIDE2OworCQkJcFJ4TWljID0gcFR4TWljOworCQl9CisJCWVsc2UgaWYgKGJBdXRoZW50aWNhdG9yID09IFRSVUUpCisJCXsKKwkJCXBUeE1pYyA9IChQVUNIQVIpICgmcEtleS0+S2V5TWF0ZXJpYWwpICsgMTY7CisJCQlwUnhNaWMgPSAoUFVDSEFSKSAoJnBLZXktPktleU1hdGVyaWFsKSArIDI0OworCQl9CisJCWVsc2UKKwkJeworCQkJcFJ4TWljID0gKFBVQ0hBUikgKCZwS2V5LT5LZXlNYXRlcmlhbCkgKyAxNjsKKwkJCXBUeE1pYyA9IChQVUNIQVIpICgmcEtleS0+S2V5TWF0ZXJpYWwpICsgMjQ7CisJCX0KKworCQlvZmZzZXQgPSBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRSArIChBaWQgKiBIV19LRVlfRU5UUllfU0laRSkgKyAweDEwOworCQlmb3IgKGk9MDsgaTw4OyApCisJCXsKKwkJCVZhbHVlID0gKihwVHhNaWMraSk7CisJCQlWYWx1ZSArPSAoKihwVHhNaWMraSsxKTw8OCk7CisJCQlWYWx1ZSArPSAoKihwVHhNaWMraSsyKTw8MTYpOworCQkJVmFsdWUgKz0gKCoocFR4TWljK2krMyk8PDI0KTsKKwkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldCtpLCBWYWx1ZSk7CisJCQlpKz00OworCQl9CisKKwkJb2Zmc2V0ID0gUEFJUldJU0VfS0VZX1RBQkxFX0JBU0UgKyAoQWlkICogSFdfS0VZX0VOVFJZX1NJWkUpICsgMHgxODsKKwkJZm9yIChpPTA7IGk8ODsgKQorCQl7CisJCQlWYWx1ZSA9ICoocFJ4TWljK2kpOworCQkJVmFsdWUgKz0gKCoocFJ4TWljK2krMSk8PDgpOworCQkJVmFsdWUgKz0gKCoocFJ4TWljK2krMik8PDE2KTsKKwkJCVZhbHVlICs9ICgqKHBSeE1pYytpKzMpPDwyNCk7CisJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQraSwgVmFsdWUpOworCQkJaSs9NDsKKwkJfQorCisJCS8vIE9ubHkgS2V5IGxlbnRoIGVxdWFsIHRvIFRLSVAga2V5IGhhdmUgdGhlc2UKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5NYWNUYWIuQ29udGVudFtBaWRdLlBhaXJ3aXNlS2V5LlJ4TWljLCBwUnhNaWMsIDgpOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuVHhNaWMsIHBUeE1pYywgOCk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCisJCQkJKCIJVHhNSUMgID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IFxuIiwKKwkJCQlwVHhNaWNbMF0scFR4TWljWzFdLHBUeE1pY1syXSxwVHhNaWNbM10sCisJCQkJcFR4TWljWzRdLHBUeE1pY1s1XSxwVHhNaWNbNl0scFR4TWljWzddKSk7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAorCQkJCSgiCVJ4TUlDICA9ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCBcbiIsCisJCQkJcFJ4TWljWzBdLHBSeE1pY1sxXSxwUnhNaWNbMl0scFJ4TWljWzNdLAorCQkJCXBSeE1pY1s0XSxwUnhNaWNbNV0scFJ4TWljWzZdLHBSeE1pY1s3XSkpOworCX0KKworCS8vIDIuIFJlY29yZCBTZWN1cml0eSBLZXkuCisJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5QYWlyd2lzZUtleS5LZXlMZW49IChVQ0hBUilwS2V5LT5LZXlMZW5ndGg7CisJTmRpc01vdmVNZW1vcnkocEFkLT5NYWNUYWIuQ29udGVudFtBaWRdLlBhaXJ3aXNlS2V5LktleSwgJnBLZXktPktleU1hdGVyaWFsLCBwS2V5LT5LZXlMZW5ndGgpOworCisJLy8gMy4gQ2hlY2sgUnhUc2MuIEFuZCB1c2VkIHRvIGluaXQgdG8gQVNJQyBJVi4KKwlpZiAoYktleVJTQyA9PSBUUlVFKQorCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuUnhUc2MsICZwS2V5LT5LZXlSU0MsIDYpOworCWVsc2UKKwkJTmRpc1plcm9NZW1vcnkocEFkLT5NYWNUYWIuQ29udGVudFtBaWRdLlBhaXJ3aXNlS2V5LlJ4VHNjLCA2KTsKKworCS8vIDQuIEluaXQgVHhUc2MgdG8gb25lIGJhc2VkIG9uIFdpRmkgV1BBIHNwZWNzCisJcEFkLT5NYWNUYWIuQ29udGVudFtBaWRdLlBhaXJ3aXNlS2V5LlR4VHNjWzBdID0gMTsKKwlwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuVHhUc2NbMV0gPSAwOworCXBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5UeFRzY1syXSA9IDA7CisJcEFkLT5NYWNUYWIuQ29udGVudFtBaWRdLlBhaXJ3aXNlS2V5LlR4VHNjWzNdID0gMDsKKwlwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuVHhUc2NbNF0gPSAwOworCXBBZC0+TWFjVGFiLkNvbnRlbnRbQWlkXS5QYWlyd2lzZUtleS5UeFRzY1s1XSA9IDA7CisKKwlDaXBoZXJBbGcgPSBwQWQtPk1hY1RhYi5Db250ZW50W0FpZF0uUGFpcndpc2VLZXkuQ2lwaGVyQWxnOworCisJb2Zmc2V0ID0gUEFJUldJU0VfS0VZX1RBQkxFX0JBU0UgKyAoQWlkICogSFdfS0VZX0VOVFJZX1NJWkUpOworCVJUVVNCTXVsdGlXcml0ZShwQWQsIChVU0hPUlQpIG9mZnNldCwgcEtleS0+S2V5TWF0ZXJpYWwsCisJCQkJKChwS2V5LT5LZXlMZW5ndGggPT0gTEVOX1RLSVBfS0VZKSA/IDE2IDogKFVTSE9SVClwS2V5LT5LZXlMZW5ndGgpKTsKKworCW9mZnNldCA9IFNIQVJFRF9LRVlfVEFCTEVfQkFTRSArIChLZXlJZHggKiBIV19LRVlfRU5UUllfU0laRSk7CisJUlRVU0JNdWx0aVdyaXRlKHBBZCwgKFVTSE9SVCkgb2Zmc2V0LCBwS2V5LT5LZXlNYXRlcmlhbCwgKFVTSE9SVClwS2V5LT5LZXlMZW5ndGgpOworCisJb2Zmc2V0ID0gUEFJUldJU0VfSVZFSVZfVEFCTEVfQkFTRSArIChBaWQgKiBIV19JVkVJVl9FTlRSWV9TSVpFKTsKKwlOZGlzWmVyb01lbW9yeShJVkVJViwgOCk7CisKKwkvLyBJVi9FSVYKKwlpZiAoKENpcGhlckFsZyA9PSBDSVBIRVJfVEtJUCkgfHwKKwkJKENpcGhlckFsZyA9PSBDSVBIRVJfVEtJUF9OT19NSUMpIHx8CisJCShDaXBoZXJBbGcgPT0gQ0lQSEVSX0FFUykpCisJeworCQlJVkVJVlszXSA9IDB4MjA7IC8vIEVpdiBiaXQgb24uIGtleWlkIGFsd2F5cyAwIGZvciBwYWlyd2lzZSBrZXkKKwl9CisJLy8gZGVmYXVsdCBrZXkgaWR4IG5lZWRzIHRvIHNldC4KKwkvLyBpbiBUS0lQL0FFUyBLZXlJZHggPSAwICwgV0VQIEtleUlkeCBpcyBkZWZhdWx0IHR4IGtleS4KKwllbHNlCisJeworCQlJVkVJVlszXSB8PSAoS2V5SWR4PDwgNik7CisJfQorCVJUVVNCTXVsdGlXcml0ZShwQWQsIChVU0hPUlQpIG9mZnNldCwgSVZFSVYsIDgpOworCisJLy8gV0NJRCBBdHRyaWJ1dGUgVURGOjMsIEJTU0lkeDozLCBBbGc6MywgS2V5dGFibGU6MT1QQUlSV0lTRSBLRVksIEJTU0lkeCBpcyAwCisJaWYgKChDaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVApIHx8CisJCShDaXBoZXJBbGcgPT0gQ0lQSEVSX1RLSVBfTk9fTUlDKSB8fAorCQkoQ2lwaGVyQWxnID09IENJUEhFUl9BRVMpKQorCXsKKwkJV0NJREF0dHJpID0gKENpcGhlckFsZzw8MSl8U0hBUkVES0VZVEFCTEU7CisJfQorCWVsc2UKKwkJV0NJREF0dHJpID0gKENpcGhlckFsZzw8MSl8U0hBUkVES0VZVEFCTEU7CisKKwlvZmZzZXQgPSBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRSArIChBaWQqIEhXX1dDSURfQVRUUklfU0laRSk7CisJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCBXQ0lEQXR0cmkpOworCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCAmVmFsdWUpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQlNTSURfV0NJRCA6IG9mZnNldCA9ICV4LCBXQ0lEQXR0cmkgPSAlbHhcbiIsCisJCQlvZmZzZXQsIFdDSURBdHRyaSkpOworCisJLy8gcEFkZHIKKwkvLyBBZGQgQnNzaWQgbWFjIGFkZHJlc3MgYXQgbGlua3VwLiBub3QgaGVyZS4gIGNoZWNrIQorCS8qb2Zmc2V0ID0gTUFDX1dDSURfQkFTRSArIChCU1NJRF9XQ0lEICogSFdfV0NJRF9FTlRSWV9TSVpFKTsKKwkqZm9yIChpPTA7IGk8TUFDX0FERFJfTEVOOyBpKyspCisJeworCQlSVE1QX0lPX1dSSVRFOChwQWQsIG9mZnNldCtpLCBwS2V5LT5CU1NJRFtpXSk7CisJfQorCSovCisKKwlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJBZGRCU1NJRGFzV0NJREVudHJ5OiBBbGc9JXMsIEtleUxlbmd0aCA9ICVkXG4iLAorCQkJQ2lwaGVyTmFtZVtDaXBoZXJBbGddLCBwS2V5LT5LZXlMZW5ndGgpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJLZXkgW2lkeD0leF0gW0tleUxlbiA9ICVkXVxuIiwKKwkJCXBLZXktPktleUluZGV4LCBwS2V5LT5LZXlMZW5ndGgpKTsKKwlmb3IoaT0wOyBpPHBLZXktPktleUxlbmd0aDsgaSsrKQorCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCIgJXg6IiwgcEtleS0+S2V5TWF0ZXJpYWxbaV0pKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIgkgXG4iKSk7Cit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgR2V0IGEgcmVjZWl2ZWQgcGFja2V0LgorCitBcmd1bWVudHM6CisJcEFkCQkJCQlkZXZpY2UgY29udHJvbCBibG9jaworCXBTYXZlUnhECQkJcmVjZWl2ZSBkZXNjcmlwdG9yIGluZm9ybWF0aW9uCisJKnBiUmVzY2hlZHVsZQkJbmVlZCByZXNjaGVkdWxlIGZsYWcKKwkqcFJ4UGVuZGluZwkJCXBlbmRpbmcgcmVjZWl2ZWQgcGFja2V0IGZsYWcKKworUmV0dXJuIFZhbHVlOgorICAgIHRoZSByZWNpZXZlZCBwYWNrZXQKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKyNkZWZpbmUgUlQyODcwX1JYRE1BTEVOX0ZJRUxEX1NJWkUJCQk0CitQTkRJU19QQUNLRVQgR2V0UGFja2V0RnJvbVJ4UmluZygKKwlJTgkJUFJUTVBfQURBUFRFUgkJcEFkLAorCU9VVAkJUFJUMjhYWF9SWERfU1RSVUMJcFNhdmVSeEQsCisJT1VUCQlCT09MRUFOCQkJCSpwYlJlc2NoZWR1bGUsCisJSU4gT1VUCVVJTlQzMgkJCQkqcFJ4UGVuZGluZykKK3sKKwlQUlhfQ09OVEVYVAkJcFJ4Q29udGV4dDsKKwlQTkRJU19QQUNLRVQJcFNrYjsKKwlQVUNIQVIJCQlwRGF0YTsKKwlVTE9ORwkJCVRoaXNGcmFtZUxlbjsKKwlVTE9ORwkJCVJ4QnVmZmVyTGVuZ3RoOworCVBSWFdJX1NUUlVDCQlwUnhXSTsKKworCXBSeENvbnRleHQgPSAmcEFkLT5SeENvbnRleHRbcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXhdOworCWlmICgocFJ4Q29udGV4dC0+UmVhZGFibGUgPT0gRkFMU0UpIHx8IChwUnhDb250ZXh0LT5JblVzZSA9PSBUUlVFKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlSeEJ1ZmZlckxlbmd0aCA9IHBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCAtIHBBZC0+UmVhZFBvc2l0aW9uOworCWlmIChSeEJ1ZmZlckxlbmd0aCA8IChSVDI4NzBfUlhETUFMRU5fRklFTERfU0laRSArIHNpemVvZihSWFdJX1NUUlVDKSArIHNpemVvZihSWElORk9fU1RSVUMpKSkKKwl7CisJCWdvdG8gbGFiZWxfbnVsbDsKKwl9CisKKwlwRGF0YSA9ICZwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlcltwQWQtPlJlYWRQb3NpdGlvbl07IC8qIDRLQiAqLworCS8vIFRoZSBSWERNQSBmaWVsZCBpcyA0IGJ5dGVzLCBub3cganVzdCB1c2UgdGhlIGZpcnN0IDIgYnl0ZXMuIFRoZSBMZW5ndGggaW5jbHVkaW5nIHRoZSAoUlhXSSArIE1TRFUgKyBQYWRkaW5nKQorCVRoaXNGcmFtZUxlbiA9ICpwRGF0YSArICgqKHBEYXRhKzEpPDw4KTsKKyAgICBpZiAoVGhpc0ZyYW1lTGVuID09IDApCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCSVJJZHgoJWQpOiBSWERNQUxlbiBpcyB6ZXJvLlslbGRdLCBCdWxrSW5CdWZMZW4gPSAlbGQpXG4iLAorCQkJCQkJCQlwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCwgVGhpc0ZyYW1lTGVuLCBwUnhDb250ZXh0LT5CdWxrSW5PZmZzZXQpKTsKKwkJZ290byBsYWJlbF9udWxsOworCX0KKwlpZiAoKFRoaXNGcmFtZUxlbiYweDMpICE9IDApCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJCSVJJZHgoJWQpOiBSWERNQUxlbiBub3QgbXVsdGlwbGUgb2YgNC5bJWxkXSwgQnVsa0luQnVmTGVuID0gJWxkKVxuIiwKKwkJCQkJCQkJcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXgsIFRoaXNGcmFtZUxlbiwgcFJ4Q29udGV4dC0+QnVsa0luT2Zmc2V0KSk7CisJCWdvdG8gbGFiZWxfbnVsbDsKKwl9CisKKwlpZiAoKFRoaXNGcmFtZUxlbiArIDgpPiBSeEJ1ZmZlckxlbmd0aCkJLy8gOCBmb3IgKFJUMjg3MF9SWERNQUxFTl9GSUVMRF9TSVpFICsgc2l6ZW9mKFJYSU5GT19TVFJVQykpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJJUklkeCglZCk6RnJhbWVMZW4oMHglbHgpIG91dHJhbmdlcy4gQnVsa0luTGVuPTB4JWx4LCByZW1haW5pbmcgUnhCdWZMZW49MHglbHgsIFJlYWRQb3M9MHglbHhcbiIsCisJCQkJCQlwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCwgVGhpc0ZyYW1lTGVuLCBwUnhDb250ZXh0LT5CdWxrSW5PZmZzZXQsIFJ4QnVmZmVyTGVuZ3RoLCBwQWQtPlJlYWRQb3NpdGlvbikpOworCisJCS8vIGVycm9yIGZyYW1lLiBmaW5pc2ggdGhpcyBsb29wCisJCWdvdG8gbGFiZWxfbnVsbDsKKwl9CisKKwkvLyBza2lwIFVTQiBmcmFtZSBsZW5ndGggZmllbGQKKwlwRGF0YSArPSBSVDI4NzBfUlhETUFMRU5fRklFTERfU0laRTsKKwlwUnhXSSA9IChQUlhXSV9TVFJVQylwRGF0YTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUFdJRW5kaWFuQ2hhbmdlKHBEYXRhLCBUWVBFX1JYV0kpOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKwlpZiAocFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCA+IFRoaXNGcmFtZUxlbikKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzKCk6cFJ4V0lNUERVdG90YWxCeXRlQ291bnQoJWQpIGxhcmdlIHRoYW4gUnhETUFMZW4oJWxkKVxuIiwKKwkJCQkJCQkJCV9fRlVOQ1RJT05fXywgcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCwgVGhpc0ZyYW1lTGVuKSk7CisJCWdvdG8gbGFiZWxfbnVsbDsKKwl9CisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBXSUVuZGlhbkNoYW5nZShwRGF0YSwgVFlQRV9SWFdJKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisKKwkvLyBhbGxvY2F0ZSBhIHJ4IHBhY2tldAorCXBTa2IgPSBkZXZfYWxsb2Nfc2tiKFRoaXNGcmFtZUxlbik7CisJaWYgKHBTa2IgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiJXMoKTpDYW5ub3QgQWxsb2NhdGUgc2sgYnVmZmVyIGZvciB0aGlzIEJ1bGstSW4gYnVmZmVyIVxuIiwgX19GVU5DVElPTl9fKSk7CisJCWdvdG8gbGFiZWxfbnVsbDsKKwl9CisKKwkvLyBjb3B5IHRoZSByeCBwYWNrZXQKKwltZW1jcHkoc2tiX3B1dChwU2tiLCBUaGlzRnJhbWVMZW4pLCBwRGF0YSwgVGhpc0ZyYW1lTGVuKTsKKwlSVFBLVF9UT19PU1BLVChwU2tiKS0+ZGV2ID0gZ2V0X25ldGRldl9mcm9tX2Jzc2lkKHBBZCwgQlNTMCk7CisJUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShPU1BLVF9UT19SVFBLVChwU2tiKSwgUEtUU1JDX05ESVMpOworCisJLy8gY29weSBSeEQKKwkqcFNhdmVSeEQgPSAqKFBSWElORk9fU1RSVUMpKHBEYXRhICsgVGhpc0ZyYW1lTGVuKTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUERlc2NyaXB0b3JFbmRpYW5DaGFuZ2UoKFBVQ0hBUilwU2F2ZVJ4RCwgVFlQRV9SWElORk8pOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworCS8vIHVwZGF0ZSBuZXh0IHBhY2tldCByZWFkIHBvc2l0aW9uLgorCXBBZC0+UmVhZFBvc2l0aW9uICs9IChUaGlzRnJhbWVMZW4gKyBSVDI4NzBfUlhETUFMRU5fRklFTERfU0laRSArIFJYSU5GT19TSVpFKTsJLy8gOCBmb3IgKFJUMjg3MF9SWERNQUxFTl9GSUVMRF9TSVpFICsgc2l6ZW9mKFJYSU5GT19TVFJVQykpCisKKwlyZXR1cm4gcFNrYjsKKworbGFiZWxfbnVsbDoKKworCXJldHVybiBOVUxMOworfQorCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgSGFuZGxlIHJlY2VpdmVkIHBhY2tldHMuCisKK0FyZ3VtZW50czoKKwlkYXRhCQkJCS0gVVJCIGluZm9ybWF0aW9uIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorICAgIE5vbmUKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyB2b2lkIHJ4X2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJcHVyYmJfdCAJCQlwVXJiOworCVBSWF9DT05URVhUCQkJcFJ4Q29udGV4dDsKKwlQUlRNUF9BREFQVEVSCQlwQWQ7CisJTlRTVEFUVVMJCQlTdGF0dXM7CisJdW5zaWduZWQgaW50CQlJcnFGbGFnczsKKworCXBVcmIJCT0gKHB1cmJiX3QpZGF0YTsKKwlwUnhDb250ZXh0CT0gKFBSWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkIAkJPSBwUnhDb250ZXh0LT5wQWQ7CisJU3RhdHVzID0gcFVyYi0+c3RhdHVzOworCisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwlwUnhDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCXBSeENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwlwUnhDb250ZXh0LT5CdWxrSW5PZmZzZXQgKz0gcFVyYi0+YWN0dWFsX2xlbmd0aDsKKwkvL05kaXNJbnRlcmxvY2tlZERlY3JlbWVudCgmcEFkLT5QZW5kaW5nUngpOworCXBBZC0+UGVuZGluZ1J4LS07CisKKwlpZiAoU3RhdHVzID09IFVTQl9TVF9OT0VSUk9SKQorCXsKKwkJcEFkLT5CdWxrSW5Db21wbGV0ZSsrOworCQlwQWQtPk5leHRSeEJ1bGtJblBvc2l0aW9uID0gMDsKKwkJaWYgKHBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCkJLy8gQXMgamFuJ3MgY29tbWVudCwgaXQgbWF5IGJ1bGstaW4gc3VjY2VzcyBidXQgc2l6ZSBpcyB6ZXJvLgorCQl7CisJCQlwUnhDb250ZXh0LT5SZWFkYWJsZSA9IFRSVUU7CisJCQlJTkNfUklOR19JTkRFWChwQWQtPk5leHRSeEJ1bGtJbkluZGV4LCBSWF9SSU5HX1NJWkUpOworCQl9CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJfQorCWVsc2UJIC8vIFNUQVRVU19PVEhFUgorCXsKKwkJcEFkLT5CdWxrSW5Db21wbGV0ZUZhaWwrKzsKKwkJLy8gU3RpbGwgcmVhZCB0aGlzIHBhY2tldCBhbHRob3VnaCBpdCBtYXkgY29tdGFpbiB3cm9uZyBieXRlcy4KKwkJcFJ4Q29udGV4dC0+UmVhZGFibGUgPSBGQUxTRTsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKworCQkvLyBQYXJzaW5nIGFsbCBwYWNrZXRzLiBiZWNhdXNlIGFmdGVyIHJlc2V0LCB0aGUgaW5kZXggd2lsbCByZXNldCB0byBhbGwgemVyby4KKwkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCQlmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCB8CisJCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpKQorCQl7CisKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJCdWxrIEluIEZhaWxlZC4gU3RhdHVzPSVkLCBCSUlkeD0weCV4LCBCSVJJZHg9MHgleCwgYWN0dWFsX2xlbmd0aD0gMHgleFxuIiwKKwkJCQkJCQlTdGF0dXMsIHBBZC0+TmV4dFJ4QnVsa0luSW5kZXgsIHBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4LCBwUnhDb250ZXh0LT5wVXJiLT5hY3R1YWxfbGVuZ3RoKSk7CisKKwkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCk7CisJCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9SRVNFVF9CVUxLX0lOLCBOVUxMLCAwKTsKKwkJfQorCX0KKworCUFTU0VSVCgocFJ4Q29udGV4dC0+SW5Vc2UgPT0gcFJ4Q29udGV4dC0+SVJQUGVuZGluZykpOworCisjaWZkZWYgUkFMSU5LX0FURQorCWlmIChBVEVfT04ocEFkKSkKKyAgICB7CisJCS8vIElmIHRoZSBkcml2ZXIgaXMgaW4gQVRFIG1vZGUgYW5kIFJ4IGZyYW1lIGlzIHNldCBpbnRvIGhlcmUuCisJCWlmIChwQWQtPkNvbnRpbkJ1bGtJbiA9PSBUUlVFKQorCQl7CisJCQlSVFVTQkJ1bGtSZWNlaXZlKHBBZCk7CisJCX0KKwl9CisJZWxzZQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKwlSVFVTQkJ1bGtSZWNlaXZlKHBBZCk7CisKKwlyZXR1cm47CisKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfbWdtdF9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlQUlRNUF9BREFQVEVSIAlwQWQ7CisJUFRYX0NPTlRFWFQJCXBNTE1FQ29udGV4dDsKKwlpbnQJCQkJaW5kZXg7CisJUE5ESVNfUEFDS0VUCXBQYWNrZXQ7CisJcHVyYmJfdAkJCXBVcmI7CisJTlRTVEFUVVMJCVN0YXR1czsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisKKwlwVXJiCQkJPSAocHVyYmJfdClkYXRhOworCXBNTE1FQ29udGV4dAk9IChQVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZCAJCQk9IHBNTE1FQ29udGV4dC0+cEFkOworCVN0YXR1cwkJCT0gcFVyYi0+c3RhdHVzOworCWluZGV4IAkJCT0gcE1MTUVDb250ZXh0LT5TZWxmSWR4OworCisJQVNTRVJUKChwQWQtPk1nbXRSaW5nLlR4RG1hSWR4ID09IGluZGV4KSk7CisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW01HTVRQSVBFSURYXSwgSXJxRmxhZ3MpOworCisKKwlpZiAoU3RhdHVzICE9IFVTQl9TVF9OT0VSUk9SKQorCXsKKwkJLy9CdWxrLU91dCBmYWlsIHN0YXR1cyBoYW5kbGUKKwkJaWYgKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkpCisJCXsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJCdWxrIE91dCBNTE1FIEZhaWxlZCwgU3RhdHVzPSVkIVxuIiwgU3RhdHVzKSk7CisJCQkvLyBUT0RPOiBIb3cgdG8gaGFuZGxlIGFib3V0IHRoZSBNTE1FQnVsa091dCBmYWlsZWQgaXNzdWUuIE5lZWQgdG8gcmVzZW5kIHRoZSBtZ210IHBrdD8KKwkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpOworCQkJcEFkLT5idWxrUmVzZXRQaXBlaWQgPSAoTUdNVFBJUEVJRFggfCBCVUxLT1VUX01HTVRfUkVTRVRfRkxBRyk7CisJCX0KKwl9CisKKwlwQWQtPkJ1bGtPdXRQZW5kaW5nW01HTVRQSVBFSURYXSA9IEZBTFNFOworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF0sIElycUZsYWdzKTsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+TUxNRUJ1bGtPdXRMb2NrLCBJcnFGbGFncyk7CisJLy8gUmVzZXQgTUxNRSBjb250ZXh0IGZsYWdzCisJcE1MTUVDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJcE1MTUVDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCXBNTE1FQ29udGV4dC0+YldhaXRpbmdCdWxrT3V0ID0gRkFMU0U7CisJcE1MTUVDb250ZXh0LT5CdWxrT3V0U2l6ZSA9IDA7CisKKwlwUGFja2V0ID0gcEFkLT5NZ210UmluZy5DZWxsW2luZGV4XS5wTmRpc1BhY2tldDsKKwlwQWQtPk1nbXRSaW5nLkNlbGxbaW5kZXhdLnBOZGlzUGFja2V0ID0gTlVMTDsKKworCS8vIEluY3JlYXNlIE1nbXRSaW5nIEluZGV4CisJSU5DX1JJTkdfSU5ERVgocEFkLT5NZ210UmluZy5UeERtYUlkeCwgTUdNVF9SSU5HX1NJWkUpOworCXBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHgrKzsKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+TUxNRUJ1bGtPdXRMb2NrLCBJcnFGbGFncyk7CisKKwkvLyBOby1tYXR0ZXIgc3VjY2VzcyBvciBmYWlsLCB3ZSBmcmVlIHRoZSBtZ210IHBhY2tldC4KKwlpZiAocFBhY2tldCkKKwkJUlRNUEZyZWVOZGlzUGFja2V0KHBBZCwgcFBhY2tldCk7CisKKwlpZiAoKFJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpCisJeworCQkvLyBkbyBub3RoaW5nIGFuZCByZXR1cm4gZGlyZWN0bHkuCisJfQorCWVsc2UKKwl7CisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkgJiYKKwkJCSgocEFkLT5idWxrUmVzZXRQaXBlaWQgJiBCVUxLT1VUX01HTVRfUkVTRVRfRkxBRykgPT0gQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcpKQorCQl7CS8vIEZvciBNZ210IEJ1bGstT3V0IGZhaWxlZCwgaWdub3JlIGl0IG5vdy4KKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULCBOVUxMLCAwKTsKKwkJfQorCQllbHNlCisJCXsKKworCQkJLy8gQWx3YXlzIGNhbGwgQnVsayByb3V0aW5lLCBldmVuIHJlc2V0IGJ1bGsuCisJCQkvLyBUaGUgcHJvdGVjdGlvb24gb2YgcmVzdCBidWxrIHNob3VsZCBiZSBpbiBCdWxrT3V0IHJvdXRpbmUKKwkJCWlmIChwQWQtPk1nbXRSaW5nLlR4U3dGcmVlSWR4IDwgTUdNVF9SSU5HX1NJWkUgLyogcE1MTUVDb250ZXh0LT5iV2FpdGluZ0J1bGtPdXQgPT0gVFJVRSAqLykKKwkJCXsKKwkJCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX01MTUUpOworCQkJfQorCQkJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKwkJCX0KKwkJfQorCit9CisKKworc3RhdGljIHZvaWQgcnQyODcwX2hjY2FfZG1hX2RvbmVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJUFJUTVBfQURBUFRFUgkJcEFkOworCVBIVF9UWF9DT05URVhUCQlwSFRUWENvbnRleHQ7CisJVUNIQVIJCQkJQnVsa091dFBpcGVJZCA9IDQ7CisJcHVyYmJfdAkJCQlwVXJiOworCisKKwlwVXJiCQkJPSAocHVyYmJfdClkYXRhOworCXBIVFRYQ29udGV4dAk9IChQSFRfVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZAkJCQk9IHBIVFRYQ29udGV4dC0+cEFkOworCisJcnQyODcwX2RhdGFvdXRfY29tcGxldGVfdGFza2xldCgodW5zaWduZWQgbG9uZylwVXJiKTsKKworCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkKKwl7CisJCS8vIGRvIG5vdGhpbmcgYW5kIHJldHVybiBkaXJlY3RseS4KKwl9CisJZWxzZQorCXsKKwkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKSkKKwkJeworCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQl9CisJCWVsc2UKKwkJewlwSFRUWENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF07CisJCQlpZiAoKHBBZC0+VHhTd1F1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA+IDApICYmCisJCQkJLyooKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA+IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gKyAweDYwMDApKSB8fCAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uID4gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgMHg2MDAwKSkgJiYgKi8KKwkJCQkocEFkLT5EZVF1ZXVlUnVubmluZ1tCdWxrT3V0UGlwZUlkXSA9PSBGQUxTRSkgJiYKKwkJCQkocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBGQUxTRSkpCisJCQl7CisJCQkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgQnVsa091dFBpcGVJZCwgTUFYX1RYX1BST0NFU1MpOworCQkJfQorCisJCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMPDw0KTsKKwkJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKwkJfQorCX0KKworCisJCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfYWMzX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCVBSVE1QX0FEQVBURVIJCXBBZDsKKwlQSFRfVFhfQ09OVEVYVAkJcEhUVFhDb250ZXh0OworCVVDSEFSCQkJCUJ1bGtPdXRQaXBlSWQgPSAzOworCXB1cmJiX3QJCQkJcFVyYjsKKworCisJcFVyYgkJCT0gKHB1cmJiX3QpZGF0YTsKKwlwSFRUWENvbnRleHQJPSAoUEhUX1RYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQJCQkJPSBwSFRUWENvbnRleHQtPnBBZDsKKworCXJ0Mjg3MF9kYXRhb3V0X2NvbXBsZXRlX3Rhc2tsZXQoKHVuc2lnbmVkIGxvbmcpcFVyYik7CisKKwlpZiAoKFJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpCisJeworCQkvLyBkbyBub3RoaW5nIGFuZCByZXR1cm4gZGlyZWN0bHkuCisJfQorCWVsc2UKKwl7CisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpCisJCXsKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULCBOVUxMLCAwKTsKKwkJfQorCQllbHNlCisJCXsJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W0J1bGtPdXRQaXBlSWRdOworCQkJaWYgKChwQWQtPlR4U3dRdWV1ZVtCdWxrT3V0UGlwZUlkXS5OdW1iZXIgPiAwKSAmJgorCQkJCS8qKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPiAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uICsgMHg2MDAwKSkgfHwgKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiA+IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArIDB4NjAwMCkpICYmICovCisJCQkJKHBBZC0+RGVRdWV1ZVJ1bm5pbmdbQnVsa091dFBpcGVJZF0gPT0gRkFMU0UpICYmCisJCQkJKHBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPT0gRkFMU0UpKQorCQkJeworCQkJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgRkFMU0UsIEJ1bGtPdXRQaXBlSWQsIE1BWF9UWF9QUk9DRVNTKTsKKwkJCX0KKworCQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTDw8Myk7CisJCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7CisJCX0KKwl9CisKKworCQlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgcnQyODcwX2FjMl9kbWFfZG9uZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlQUlRNUF9BREFQVEVSCQlwQWQ7CisJUEhUX1RYX0NPTlRFWFQJCXBIVFRYQ29udGV4dDsKKwlVQ0hBUgkJCQlCdWxrT3V0UGlwZUlkID0gMjsKKwlwdXJiYl90CQkJCXBVcmI7CisKKworCXBVcmIJCQk9IChwdXJiYl90KWRhdGE7CisJcEhUVFhDb250ZXh0CT0gKFBIVF9UWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkCQkJCT0gcEhUVFhDb250ZXh0LT5wQWQ7CisKKwlydDI4NzBfZGF0YW91dF9jb21wbGV0ZV90YXNrbGV0KCh1bnNpZ25lZCBsb25nKXBVcmIpOworCisJaWYgKChSVE1QX1RFU1RfRkxBRyhwQWQsIChmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpKQorCXsKKwkJLy8gZG8gbm90aGluZyBhbmQgcmV0dXJuIGRpcmVjdGx5LgorCX0KKwllbHNlCisJeworCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpKQorCQl7CisJCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVCwgTlVMTCwgMCk7CisJCX0KKwkJZWxzZQorCQl7CXBIVFRYQ29udGV4dCA9ICZwQWQtPlR4Q29udGV4dFtCdWxrT3V0UGlwZUlkXTsKKwkJCWlmICgocEFkLT5UeFN3UXVldWVbQnVsa091dFBpcGVJZF0uTnVtYmVyID4gMCkgJiYKKwkJCQkvKigocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID4gKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiArIDB4NjAwMCkpIHx8IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPiBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyAweDYwMDApKSAmJiAqLworCQkJCShwQWQtPkRlUXVldWVSdW5uaW5nW0J1bGtPdXRQaXBlSWRdID09IEZBTFNFKSAmJgorCQkJCShwSFRUWENvbnRleHQtPmJDdXJXcml0aW5nID09IEZBTFNFKSkKKwkJCXsKKwkJCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBCdWxrT3V0UGlwZUlkLCBNQVhfVFhfUFJPQ0VTUyk7CisJCQl9CisKKwkJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUw8PDIpOworCQkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCQl9CisJfQorCisJCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfYWMxX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCVBSVE1QX0FEQVBURVIJCXBBZDsKKwlQSFRfVFhfQ09OVEVYVAkJcEhUVFhDb250ZXh0OworCVVDSEFSCQkJCUJ1bGtPdXRQaXBlSWQgPSAxOworCXB1cmJiX3QJCQkJcFVyYjsKKworCisJcFVyYgkJCT0gKHB1cmJiX3QpZGF0YTsKKwlwSFRUWENvbnRleHQJPSAoUEhUX1RYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQJCQkJPSBwSFRUWENvbnRleHQtPnBBZDsKKworCXJ0Mjg3MF9kYXRhb3V0X2NvbXBsZXRlX3Rhc2tsZXQoKHVuc2lnbmVkIGxvbmcpcFVyYik7CisKKwlpZiAoKFJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpCisJeworCQkvLyBkbyBub3RoaW5nIGFuZCByZXR1cm4gZGlyZWN0bHkuCisJfQorCWVsc2UKKwl7CisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpCisJCXsKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULCBOVUxMLCAwKTsKKwkJfQorCQllbHNlCisJCXsJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W0J1bGtPdXRQaXBlSWRdOworCQkJaWYgKChwQWQtPlR4U3dRdWV1ZVtCdWxrT3V0UGlwZUlkXS5OdW1iZXIgPiAwKSAmJgorCQkJCS8qKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPiAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uICsgMHg2MDAwKSkgfHwgKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiA+IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArIDB4NjAwMCkpICYmICovCisJCQkJKHBBZC0+RGVRdWV1ZVJ1bm5pbmdbQnVsa091dFBpcGVJZF0gPT0gRkFMU0UpICYmCisJCQkJKHBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPT0gRkFMU0UpKQorCQkJeworCQkJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgRkFMU0UsIEJ1bGtPdXRQaXBlSWQsIE1BWF9UWF9QUk9DRVNTKTsKKwkJCX0KKworCQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTDw8MSk7CisJCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7CisJCX0KKwl9CisKKworCXJldHVybjsKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfYWMwX2RtYV9kb25lX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCVBSVE1QX0FEQVBURVIJCXBBZDsKKwlQSFRfVFhfQ09OVEVYVAkJcEhUVFhDb250ZXh0OworCVVDSEFSCQkJCUJ1bGtPdXRQaXBlSWQgPSAwOworCXB1cmJiX3QJCQkJcFVyYjsKKworCisJcFVyYgkJCT0gKHB1cmJiX3QpZGF0YTsKKwlwSFRUWENvbnRleHQJPSAoUEhUX1RYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQJCQkJPSBwSFRUWENvbnRleHQtPnBBZDsKKworCXJ0Mjg3MF9kYXRhb3V0X2NvbXBsZXRlX3Rhc2tsZXQoKHVuc2lnbmVkIGxvbmcpcFVyYik7CisKKwlpZiAoKFJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkpCisJeworCQkvLyBkbyBub3RoaW5nIGFuZCByZXR1cm4gZGlyZWN0bHkuCisJfQorCWVsc2UKKwl7CisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpCisJCXsKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULCBOVUxMLCAwKTsKKwkJfQorCQllbHNlCisJCXsJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W0J1bGtPdXRQaXBlSWRdOworCQkJaWYgKChwQWQtPlR4U3dRdWV1ZVtCdWxrT3V0UGlwZUlkXS5OdW1iZXIgPiAwKSAmJgorCQkJCS8qICAoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA+IChwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gKyAweDYwMDApKSB8fCAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uID4gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgMHg2MDAwKSkgJiYgKi8KKwkJCQkocEFkLT5EZVF1ZXVlUnVubmluZ1tCdWxrT3V0UGlwZUlkXSA9PSBGQUxTRSkgJiYKKwkJCQkocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBGQUxTRSkpCisJCQl7CisJCQkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgQnVsa091dFBpcGVJZCwgTUFYX1RYX1BST0NFU1MpOworCQkJfQorCisJCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMKTsKKwkJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKwkJfQorCX0KKworCisJcmV0dXJuOworCit9CisKKworc3RhdGljIHZvaWQgcnQyODcwX251bGxfZnJhbWVfY29tcGxldGVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJUFJUTVBfQURBUFRFUglwQWQ7CisJUFRYX0NPTlRFWFQJCXBOdWxsQ29udGV4dDsKKwlwdXJiYl90CQkJcFVyYjsKKwlOVFNUQVRVUwkJU3RhdHVzOworCXVuc2lnbmVkIGxvbmcJaXJxRmxhZzsKKworCisJcFVyYgkJCT0gKHB1cmJiX3QpZGF0YTsKKwlwTnVsbENvbnRleHQJPSAoUFRYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQgCQkJPSBwTnVsbENvbnRleHQtPnBBZDsKKwlTdGF0dXMgCQkJPSBwVXJiLT5zdGF0dXM7CisKKwkvLyBSZXNldCBOdWxsIGZyYW1lIGNvbnRleHQgZmxhZ3MKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKKwlwTnVsbENvbnRleHQtPklSUFBlbmRpbmcgCT0gRkFMU0U7CisJcE51bGxDb250ZXh0LT5JblVzZSAJCT0gRkFMU0U7CisJcEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9IEZBTFNFOworCXBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbMF0gPSAwOworCisJaWYgKFN0YXR1cyA9PSBVU0JfU1RfTk9FUlJPUikKKwl7CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgaXJxRmxhZyk7CisKKwkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsKKwl9CisJZWxzZQkvLyBTVEFUVVNfT1RIRVIKKwl7CisJCWlmICgoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpKQorCQl7CisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiQnVsayBPdXQgTnVsbCBGcmFtZSBGYWlsZWQsIFJlYXNvbkNvZGU9JWQhXG4iLCBTdGF0dXMpKTsKKwkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpOworCQkJcEFkLT5idWxrUmVzZXRQaXBlaWQgPSAoTUdNVFBJUEVJRFggfCBCVUxLT1VUX01HTVRfUkVTRVRfRkxBRyk7CisJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIGlycUZsYWcpOworCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQsIE5VTEwsIDApOworCQl9CisJCWVsc2UKKwkJeworCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKKwkJfQorCX0KKworCS8vIEFsd2F5cyBjYWxsIEJ1bGsgcm91dGluZSwgZXZlbiByZXNldCBidWxrLgorCS8vIFRoZSBwcm90ZWN0aW9vbiBvZiByZXN0IGJ1bGsgc2hvdWxkIGJlIGluIEJ1bGtPdXQgcm91dGluZQorCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKworfQorCisKK3N0YXRpYyB2b2lkIHJ0Mjg3MF9ydHNfZnJhbWVfY29tcGxldGVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJUFJUTVBfQURBUFRFUglwQWQ7CisJUFRYX0NPTlRFWFQJCXBSVFNDb250ZXh0OworCXB1cmJiX3QJCQlwVXJiOworCU5UU1RBVFVTCQlTdGF0dXM7CisJdW5zaWduZWQgbG9uZwlpcnFGbGFnOworCisKKwlwVXJiCQk9IChwdXJiYl90KWRhdGE7CisJcFJUU0NvbnRleHQJPSAoUFRYX0NPTlRFWFQpcFVyYi0+Y29udGV4dDsKKwlwQWQJCQk9IHBSVFNDb250ZXh0LT5wQWQ7CisJU3RhdHVzCQk9IHBVcmItPnN0YXR1czsKKworCS8vIFJlc2V0IFJUUyBmcmFtZSBjb250ZXh0IGZsYWdzCisJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgaXJxRmxhZyk7CisJcFJUU0NvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwlwUlRTQ29udGV4dC0+SW5Vc2UJCT0gRkFMU0U7CisKKwlpZiAoU3RhdHVzID09IFVTQl9TVF9OT0VSUk9SKQorCXsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBpcnFGbGFnKTsKKwkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsKKwl9CisJZWxzZQkvLyBTVEFUVVNfT1RIRVIKKwl7CisJCWlmICgoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpKQorCQl7CisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiQnVsayBPdXQgUlRTIEZyYW1lIEZhaWxlZFxuIikpOworCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7CisJCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCA9IChNR01UUElQRUlEWCB8IEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHKTsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgaXJxRmxhZyk7CisJCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZChwQWQsIENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVCwgTlVMTCwgMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIGlycUZsYWcpOworCQl9CisJfQorCisJUlRNUF9TRU1fTE9DSygmcEFkLT5CdWxrT3V0TG9ja1twUlRTQ29udGV4dC0+QnVsa091dFBpcGVJZF0pOworCXBBZC0+QnVsa091dFBlbmRpbmdbcFJUU0NvbnRleHQtPkJ1bGtPdXRQaXBlSWRdID0gRkFMU0U7CisJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW3BSVFNDb250ZXh0LT5CdWxrT3V0UGlwZUlkXSk7CisKKwkvLyBBbHdheXMgY2FsbCBCdWxrIHJvdXRpbmUsIGV2ZW4gcmVzZXQgYnVsay4KKwkvLyBUaGUgcHJvdGVjdGlvb24gb2YgcmVzdCBidWxrIHNob3VsZCBiZSBpbiBCdWxrT3V0IHJvdXRpbmUKKwlSVFVTQktpY2tCdWxrT3V0KHBBZCk7CisKK30KKworCitzdGF0aWMgdm9pZCBydDI4NzBfcHNwb2xsX2ZyYW1lX2NvbXBsZXRlX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCVBSVE1QX0FEQVBURVIJcEFkOworCVBUWF9DT05URVhUCQlwUHNQb2xsQ29udGV4dDsKKwlwdXJiYl90CQkJcFVyYjsKKwlOVFNUQVRVUwkJU3RhdHVzOworCisKKwlwVXJiCQkJPSAocHVyYmJfdClkYXRhOworCXBQc1BvbGxDb250ZXh0CT0gKFBUWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkCQkJCT0gcFBzUG9sbENvbnRleHQtPnBBZDsKKwlTdGF0dXMJCQk9IHBVcmItPnN0YXR1czsKKworCS8vIFJlc2V0IFBzUG9sbCBjb250ZXh0IGZsYWdzCisJcFBzUG9sbENvbnRleHQtPklSUFBlbmRpbmcJPSBGQUxTRTsKKwlwUHNQb2xsQ29udGV4dC0+SW5Vc2UJCT0gRkFMU0U7CisJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFswXSA9IDA7CisKKwlpZiAoU3RhdHVzID09IFVTQl9TVF9OT0VSUk9SKQorCXsKKwkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsKKwl9CisJZWxzZSAvLyBTVEFUVVNfT1RIRVIKKwl7CisJCWlmICgoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpKQorCQl7CisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiQnVsayBPdXQgUFNQb2xsIEZhaWxlZFxuIikpOworCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7CisJCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCA9IChNR01UUElQRUlEWCB8IEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHKTsKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULCBOVUxMLCAwKTsKKwkJfQorCX0KKworCVJUTVBfU0VNX0xPQ0soJnBBZC0+QnVsa091dExvY2tbMF0pOworCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBGQUxTRTsKKwlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0pOworCisJLy8gQWx3YXlzIGNhbGwgQnVsayByb3V0aW5lLCBldmVuIHJlc2V0IGJ1bGsuCisJLy8gVGhlIHByb3RlY3Rpb29uIG9mIHJlc3QgYnVsayBzaG91bGQgYmUgaW4gQnVsa091dCByb3V0aW5lCisJUlRVU0JLaWNrQnVsa091dChwQWQpOworCit9CisKKworc3RhdGljIHZvaWQgcnQyODcwX2RhdGFvdXRfY29tcGxldGVfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJUFJUTVBfQURBUFRFUgkJcEFkOworCXB1cmJiX3QJCQkJcFVyYjsKKwlQT1NfQ09PS0lFCQkJcE9iajsKKwlQSFRfVFhfQ09OVEVYVAkJcEhUVFhDb250ZXh0OworCVVDSEFSCQkJCUJ1bGtPdXRQaXBlSWQ7CisJTlRTVEFUVVMJCQlTdGF0dXM7CisJdW5zaWduZWQgbG9uZwkJSXJxRmxhZ3M7CisKKworCXBVcmIJCQk9IChwdXJiYl90KWRhdGE7CisJcEhUVFhDb250ZXh0CT0gKFBIVF9UWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkCQkJCT0gcEhUVFhDb250ZXh0LT5wQWQ7CisJcE9iaiAJCQk9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKwlTdGF0dXMJCQk9IHBVcmItPnN0YXR1czsKKworCS8vIFN0b3JlIEJ1bGtPdXQgUGlwZUlkCisJQnVsa091dFBpcGVJZCA9IHBIVFRYQ29udGV4dC0+QnVsa091dFBpcGVJZDsKKwlwQWQtPkJ1bGtPdXREYXRhT25lU2VjQ291bnQrKzsKKworCS8vREJHUFJJTlQoUlRfREVCVUdfTE9VRCwgKCJEb25lLUIoJWQpOkk9MHglbHgsIENXUG9zPSVsZCwgTkJQb3M9JWxkLCBFTkJQb3M9JWxkLCBiQ29weT0lZCFcbiIsIEJ1bGtPdXRQaXBlSWQsIGluX2ludGVycnVwdCgpLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sCisJLy8JCXBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQpKTsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwlwQWQtPkJ1bGtPdXRQZW5kaW5nW0J1bGtPdXRQaXBlSWRdID0gRkFMU0U7CisJcEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFtCdWxrT3V0UGlwZUlkXSA9IDA7CisKKwlpZiAoU3RhdHVzID09IFVTQl9TVF9OT0VSUk9SKQorCXsKKwkJcEFkLT5CdWxrT3V0Q29tcGxldGUrKzsKKworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKworCQlwQWQtPkNvdW50ZXJzODAyMy5Hb29kVHJhbnNtaXRzKys7CisJCS8vUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJRlJFRV9IVFRYX1JJTkcocEFkLCBCdWxrT3V0UGlwZUlkLCBwSFRUWENvbnRleHQpOworCQkvL1JUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKworCisJfQorCWVsc2UJLy8gU1RBVFVTX09USEVSCisJeworCQlQVUNIQVIJcEJ1ZjsKKworCQlwQWQtPkJ1bGtPdXRDb21wbGV0ZU90aGVyKys7CisKKwkJcEJ1ZiA9ICZwSFRUWENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb25dOworCisJCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUIHwKKwkJCQkJCQkJCWZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpKQorCQl7CisJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUKTsKKwkJCXBBZC0+YnVsa1Jlc2V0UGlwZWlkID0gQnVsa091dFBpcGVJZDsKKwkJCXBBZC0+YnVsa1Jlc2V0UmVxW0J1bGtPdXRQaXBlSWRdID0gcEFkLT5CdWxrT3V0UmVxOworCQl9CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJCdWxrT3V0RGF0YVBhY2tldCBmYWlsZWQ6IFJlYXNvbkNvZGU9JWQhXG4iLCBTdGF0dXMpKTsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlx0Pj5CdWxrT3V0IFJlcT0weCVseCwgQ29tcGxldGU9MHglbHgsIE90aGVyPTB4JWx4XG4iLCBwQWQtPkJ1bGtPdXRSZXEsIHBBZC0+QnVsa091dENvbXBsZXRlLCBwQWQtPkJ1bGtPdXRDb21wbGV0ZU90aGVyKSk7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJcdD4+QnVsa091dCBIZWFkZXI6JXggJXggJXggJXggJXggJXggJXggJXhcbiIsIHBCdWZbMF0sIHBCdWZbMV0sIHBCdWZbMl0sIHBCdWZbM10sIHBCdWZbNF0sIHBCdWZbNV0sIHBCdWZbNl0sIHBCdWZbN10pKTsKKwkJLy9EQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiPj5CdWxrT3V0Q29tcGxldGVDYW5jZWw9MHgleCwgQnVsa091dENvbXBsZXRlT3RoZXI9MHgleFxuIiwgcEFkLT5CdWxrT3V0Q29tcGxldGVDYW5jZWwsIHBBZC0+QnVsa091dENvbXBsZXRlT3RoZXIpKTsKKworCX0KKworCS8vCisJLy8gYkluVXNlID0gVFJVRSwgbWVhbnMgc29tZSBwcm9jZXNzIGFyZSBmaWxsaW5nIFRYIGRhdGEsIGFmdGVyIHRoYXQgbXVzdCB0dXJuIG9uIGJXYWl0aW5nQnVsa091dAorCS8vIGJXYWl0aW5nQnVsa091dCA9IFRSVUUsIG1lYW5zIHRoZSBUWCBkYXRhIGFyZSB3YWl0aW5nIGZvciBidWxrIG91dC4KKwkvLworCS8vUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwlpZiAoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gIT0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSAmJgorCQkocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiAhPSAocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKzgpKSAmJgorCQkhUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfRlJBRyA8PCBCdWxrT3V0UGlwZUlkKSkpCisJeworCQkvLyBJbmRpY2F0ZSBUaGVyZSBpcyBkYXRhIGF2YWxpYWJsZQorCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgKGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PCBCdWxrT3V0UGlwZUlkKSk7CisJfQorCS8vUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCisJLy8gQWx3YXlzIGNhbGwgQnVsayByb3V0aW5lLCBldmVuIHJlc2V0IGJ1bGsuCisJLy8gVGhlIHByb3RlY3Rpb24gb2YgcmVzdCBidWxrIHNob3VsZCBiZSBpbiBCdWxrT3V0IHJvdXRpbmUKKwlSVFVTQktpY2tCdWxrT3V0KHBBZCk7Cit9CisKKy8qIEVuZCBvZiAyODcwX3J0bXBfaW5pdC5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9hY3Rpb24uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2FjdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YWU1MzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9hY3Rpb24uYwpAQCAtMCwwICsxLDEwMzggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisJYWN0aW9uLmMKKworICAgIEFic3RyYWN0OgorICAgIEhhbmRsZSBhc3NvY2lhdGlvbiByZWxhdGVkIHJlcXVlc3RzIGVpdGhlciBmcm9tIFdTVEEgb3IgZnJvbSBsb2NhbCBNTE1FCisKKyAgICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIFdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUphbiBMZWUJCTIwMDYJICAJY3JlYXRlZCBmb3IgcnQyODYwCisgKi8KKworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorI2luY2x1ZGUgIi4uL2FjdGlvbi5oIgorCisKK3N0YXRpYyBWT0lEIFJlc2VydmVkQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgYXNzb2NpYXRpb24gc3RhdGUgbWFjaGluZSBpbml0LCBpbmNsdWRpbmcgc3RhdGUgdHJhbnNpdGlvbiBhbmQgdGltZXIgaW5pdAorICAgIFBhcmFtZXRlcnM6CisgICAgICAgIFMgLSBwb2ludGVyIHRvIHRoZSBhc3NvY2lhdGlvbiBzdGF0ZSBtYWNoaW5lCisgICAgTm90ZToKKyAgICAgICAgVGhlIHN0YXRlIG1hY2hpbmUgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU09DX0lETEUKKyAgICAgICAgTVQyX01MTUVfRElTQVNTT0NfUkVRICAgIG1sbWVfZGlzYXNzb2NfcmVxX2FjdGlvbgorICAgICAgICBNVDJfUEVFUl9ESVNBU1NPQ19SRVEgICAgcGVlcl9kaXNhc3NvY19hY3Rpb24KKyAgICAgICAgTVQyX1BFRVJfQVNTT0NfUkVRICAgICAgIGRyb3AKKyAgICAgICAgTVQyX1BFRVJfUkVBU1NPQ19SRVEgICAgIGRyb3AKKyAgICAgICAgTVQyX0NMUzNFUlIgICAgICAgICAgICAgIGNsczNlcnJfYWN0aW9uCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBY3Rpb25TdGF0ZU1hY2hpbmVJbml0KAorICAgIElOCVBSVE1QX0FEQVBURVIJcEFkLAorICAgIElOICBTVEFURV9NQUNISU5FICpTLAorICAgIE9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSkKK3sKKwlTdGF0ZU1hY2hpbmVJbml0KFMsIChTVEFURV9NQUNISU5FX0ZVTkMgKilUcmFucywgTUFYX0FDVF9TVEFURSwgTUFYX0FDVF9NU0csIChTVEFURV9NQUNISU5FX0ZVTkMpRHJvcCwgQUNUX0lETEUsIEFDVF9NQUNISU5FX0JBU0UpOworCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfUEVFUl9TUEVDVFJVTV9DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJTcGVjdHJ1bUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfUEVFUl9RT1NfQ0FURSwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyUU9TQWN0aW9uKTsKKworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX1BFRVJfRExTX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpUmVzZXJ2ZWRBY3Rpb24pOworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9QRUVSX0RMU19DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJETFNBY3Rpb24pOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfUEVFUl9CQV9DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJCQUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfUEVFUl9IVF9DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJIVEFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfTUxNRV9BRERfQkFfQ0FURSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lQUREQkFBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX01MTUVfT1JJX0RFTEJBX0NBVEUsIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZURFTEJBQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9NTE1FX1JFQ19ERUxCQV9DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVERUxCQUFjdGlvbik7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9QRUVSX1BVQkxJQ19DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJQdWJsaWNBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX1BFRVJfUk1fQ0FURSwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyUk1BY3Rpb24pOworCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFDVF9JRExFLCBNVDJfTUxNRV9RT1NfQ0FURSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lUU9TQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUNUX0lETEUsIE1UMl9NTE1FX0RMU19DQVRFLCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVETFNBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBQ1RfSURMRSwgTVQyX0FDVF9JTlZBTElELCAoU1RBVEVfTUFDSElORV9GVU5DKU1sbWVJbnZhbGlkQWN0aW9uKTsKK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBNbG1lQUREQkFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQorCit7CisJTUxNRV9BRERCQV9SRVFfU1RSVUNUICpwSW5mbzsKKwlVQ0hBUiAgICAgICAgICAgQWRkcls2XTsKKwlQVUNIQVIgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlORElTX1NUQVRVUyAgICAgTlN0YXR1czsKKwlVTE9ORwkJSWR4OworCUZSQU1FX0FEREJBX1JFUSAgRnJhbWU7CisJVUxPTkcJCUZyYW1lTGVuOworCUJBX09SSV9FTlRSWQkJCSpwQkFFbnRyeSA9IE5VTEw7CisKKwlwSW5mbyA9IChNTE1FX0FEREJBX1JFUV9TVFJVQ1QgKilFbGVtLT5Nc2c7CisJTmRpc1plcm9NZW1vcnkoJkZyYW1lLCBzaXplb2YoRlJBTUVfQUREQkFfUkVRKSk7CisKKwlpZihNbG1lQWRkQkFSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQWRkcikpCisJeworCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCQlpZihOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQkEgLSBNbG1lQUREQkFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQkJcmV0dXJuOworCQl9CisJCS8vIDEuIGZpbmQgZW50cnkKKwkJSWR4ID0gcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uQkFPcmlXY2lkQXJyYXlbcEluZm8tPlRJRF07CisJCWlmIChJZHggPT0gMCkKKwkJeworCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiQkEgLSBNbG1lQUREQkFBY3Rpb24oKSBjYW4ndCBmaW5kIEJBT3JpRW50cnkgXG4iKSk7CisJCQlyZXR1cm47CisJCX0KKwkJZWxzZQorCQl7CisJCQlwQkFFbnRyeSA9JnBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W0lkeF07CisJCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlpZiAoQURIT0NfT04ocEFkKSkKKwkJCQlBY3RIZWFkZXJJbml0KHBBZCwgJkZyYW1lLkhkciwgcEluZm8tPnBBZGRyLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQllbHNlCisJCQkJQWN0SGVhZGVySW5pdChwQWQsICZGcmFtZS5IZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwSW5mby0+cEFkZHIpOworCisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlGcmFtZS5DYXRlZ29yeSA9IENBVEVHT1JZX0JBOworCQlGcmFtZS5BY3Rpb24gPSBBRERCQV9SRVE7CisJCUZyYW1lLkJhUGFybS5BTVNEVVN1cHBvcnRlZCA9IDA7CisJCUZyYW1lLkJhUGFybS5CQVBvbGljeSA9IElNTUVEX0JBOworCQlGcmFtZS5CYVBhcm0uVElEID0gcEluZm8tPlRJRDsKKwkJRnJhbWUuQmFQYXJtLkJ1ZlNpemUgPSBwSW5mby0+QmFCdWZTaXplOworCQlGcmFtZS5Ub2tlbiA9IHBJbmZvLT5Ub2tlbjsKKwkJRnJhbWUuVGltZU91dFZhbHVlID0gcEluZm8tPlRpbWVPdXRWYWx1ZTsKKwkJRnJhbWUuQmFTdGFydFNlcS5maWVsZC5GcmFnTnVtID0gMDsKKwkJRnJhbWUuQmFTdGFydFNlcS5maWVsZC5TdGFydFNlcSA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbcEluZm8tPldjaWRdLlR4U2VxW3BJbmZvLT5USURdOworCisJCSooVVNIT1JUICopKCZGcmFtZS5CYVBhcm0pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJkZyYW1lLkJhUGFybSkpOworCQlGcmFtZS5UaW1lT3V0VmFsdWUgPSBjcHUybGUxNihGcmFtZS5UaW1lT3V0VmFsdWUpOworCQlGcmFtZS5CYVN0YXJ0U2VxLndvcmQgPSBjcHUybGUxNihGcmFtZS5CYVN0YXJ0U2VxLndvcmQpOworCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsCQkgICAmRnJhbWVMZW4sCisJCSAgICAgICAgICAgICAgc2l6ZW9mKEZSQU1FX0FEREJBX1JFUSksICZGcmFtZSwKKwkJICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJCS8vTWluaXBvcnREYXRhTU1SZXF1ZXN0KHBBZCwgTWFwVXNlclByaW9yaXR5VG9BY2Nlc3NDYXRlZ29yeVtwSW5mby0+VElEXSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJBIC0gU2VuZCBBRERCQSByZXF1ZXN0LiBTdGFydFNlcSA9ICV4LCAgRnJhbWVMZW4gPSAlbGQuIEJ1ZlNpemUgPSAlZFxuIiwgRnJhbWUuQmFTdGFydFNlcS5maWVsZC5TdGFydFNlcSwgRnJhbWVMZW4sIEZyYW1lLkJhUGFybS5CdWZTaXplKSk7CisgICAgfQorfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIHNlbmQgREVMQkEgYW5kIGRlbGV0ZSBCYUVudHJ5IGlmIGFueQorICAgIFBhcmFtZXRyczoKKyAgICAgICAgRWxlbSAtIE1MTUUgbWVzc2FnZSBNTE1FX0RFTEJBX1JFUV9TVFJVQ1QKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lREVMQkFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCU1MTUVfREVMQkFfUkVRX1NUUlVDVCAqcEluZm87CisJUFVDSEFSICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJUFVDSEFSCQkgICBwT3V0QnVmZmVyMiA9IE5VTEw7CisJTkRJU19TVEFUVVMgICAgIE5TdGF0dXM7CisJVUxPTkcJCUlkeDsKKwlGUkFNRV9ERUxCQV9SRVEgIEZyYW1lOworCVVMT05HCQlGcmFtZUxlbjsKKwlGUkFNRV9CQVIJRnJhbWVCYXI7CisKKwlwSW5mbyA9IChNTE1FX0RFTEJBX1JFUV9TVFJVQ1QgKilFbGVtLT5Nc2c7CisJLy8gbXVzdCBzZW5kIGJhY2sgREVMQkEKKwlOZGlzWmVyb01lbW9yeSgmRnJhbWUsIHNpemVvZihGUkFNRV9ERUxCQV9SRVEpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gTWxtZURFTEJBQWN0aW9uKCksIEluaXRpYXRvciglZCkgXG4iLCBwSW5mby0+SW5pdGlhdG9yKSk7CisKKwlpZihNbG1lRGVsQkFSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbikpCisJeworCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCQlpZihOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiQkEgLSBNbG1lREVMQkFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIDEuIFxuIikpOworCQkJcmV0dXJuOworCQl9CisKKwkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyMik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkJBIC0gTWxtZURFTEJBQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCAyLiBcbiIpKTsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIFNFTkQgQkFSIChTZW5kIEJBUiB0byByZWZyZXNoIHBlZXIgcmVvcmRlcmluZyBidWZmZXIuKQorCQlJZHggPSBwQWQtPk1hY1RhYi5Db250ZW50W3BJbmZvLT5XY2lkXS5CQU9yaVdjaWRBcnJheVtwSW5mby0+VElEXTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJQmFySGVhZGVySW5pdChwQWQsICZGcmFtZUJhciwgcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uQWRkciwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJRnJhbWVCYXIuU3RhcnRpbmdTZXEuZmllbGQuRnJhZ051bSA9IDA7IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCQlGcmFtZUJhci5TdGFydGluZ1NlcS5maWVsZC5TdGFydFNlcSA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbcEluZm8tPldjaWRdLlR4U2VxW3BJbmZvLT5USURdOyAvLyBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jaXRvbi4KKwkJRnJhbWVCYXIuQmFyQ29udHJvbC5USUQgPSBwSW5mby0+VElEOyAvLyBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jaXRvbi4KKwkJRnJhbWVCYXIuQmFyQ29udHJvbC5BQ0tQb2xpY3kgPSBJTU1FRF9CQTsgLy8gbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY2l0b24uCisJCUZyYW1lQmFyLkJhckNvbnRyb2wuQ29tcHJlc3NlZCA9IDE7IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCQlGcmFtZUJhci5CYXJDb250cm9sLk1USUQgPSAwOyAvLyBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jaXRvbi4KKworCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyMiwJCQkJJkZyYW1lTGVuLAorCQkJCQkgIHNpemVvZihGUkFNRV9CQVIpLAkgICZGcmFtZUJhciwKKwkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyMiwgRnJhbWVMZW4pOworCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIyKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJCQSAtIE1sbWVERUxCQUFjdGlvbigpIC4gU2VuZCBCQVIgdG8gcmVmcmVzaCBwZWVyIHJlb3JkZXJpbmcgYnVmZmVyIFxuIikpOworCisJCS8vIFNFTkQgREVMQkEgRlJBTUUKKwkJRnJhbWVMZW4gPSAwOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlpZiAoQURIT0NfT04ocEFkKSkKKwkJCQlBY3RIZWFkZXJJbml0KHBBZCwgJkZyYW1lLkhkciwgcEFkLT5NYWNUYWIuQ29udGVudFtwSW5mby0+V2NpZF0uQWRkciwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQkJZWxzZQorCQkJCUFjdEhlYWRlckluaXQocEFkLCAmRnJhbWUuSGRyLCAgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBBZC0+TWFjVGFiLkNvbnRlbnRbcEluZm8tPldjaWRdLkFkZHIpOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCUZyYW1lLkNhdGVnb3J5ID0gQ0FURUdPUllfQkE7CisJCUZyYW1lLkFjdGlvbiA9IERFTEJBOworCQlGcmFtZS5EZWxiYVBhcm0uSW5pdGlhdG9yID0gcEluZm8tPkluaXRpYXRvcjsKKwkJRnJhbWUuRGVsYmFQYXJtLlRJRCA9IHBJbmZvLT5USUQ7CisJCUZyYW1lLlJlYXNvbkNvZGUgPSAzOTsgLy8gVGltZSBPdXQKKwkJKihVU0hPUlQgKikoJkZyYW1lLkRlbGJhUGFybSkgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmRnJhbWUuRGVsYmFQYXJtKSk7CisJCUZyYW1lLlJlYXNvbkNvZGUgPSBjcHUybGUxNihGcmFtZS5SZWFzb25Db2RlKTsKKworCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgICAgICZGcmFtZUxlbiwKKwkJICAgICAgICAgICAgICBzaXplb2YoRlJBTUVfREVMQkFfUkVRKSwgICAgJkZyYW1lLAorCQkgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKwkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQkEgLSBNbG1lREVMQkFBY3Rpb24oKSAuIDMgREVMQkEgc2VudC4gSW5pdGlhdG9yKCVkKVxuIiwgcEluZm8tPkluaXRpYXRvcikpOworICAgIAl9Cit9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgTWxtZVFPU0FjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7Cit9CisKK1ZPSUQgTWxtZURMU0FjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7Cit9CisKK1ZPSUQgTWxtZUludmFsaWRBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCS8vUFVDSEFSCQkgICBwT3V0QnVmZmVyID0gTlVMTDsKKwkvL1JldHVybiB0aGUgcmVjZWl2aW5nIGZyYW1lIGV4Y2VwdCB0aGUgTVNCIG9mIGNhdGVnb3J5IGZpbGVkIHNldCB0byAxLiAgNy4zLjEuMTEKK30KKworVk9JRCBQZWVyUU9TQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKK30KKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorVk9JRCBQZWVyRExTQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVQ0hBUglBY3Rpb24gPSBFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSsxXTsKKworCXN3aXRjaChBY3Rpb24pCisJeworCQljYXNlIEFDVElPTl9ETFNfUkVRVUVTVDoKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlQZWVyRGxzUmVxQWN0aW9uKHBBZCwgRWxlbSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQlicmVhazsKKworCQljYXNlIEFDVElPTl9ETFNfUkVTUE9OU0U6CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJUGVlckRsc1JzcEFjdGlvbihwQWQsIEVsZW0pOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJYnJlYWs7CisKKwkJY2FzZSBBQ1RJT05fRExTX1RFQVJET1dOOgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCVBlZXJEbHNUZWFyRG93bkFjdGlvbihwQWQsIEVsZW0pOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJYnJlYWs7CisJfQorfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lEIFBlZXJCQUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIJQWN0aW9uID0gRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMV07CisKKwlzd2l0Y2goQWN0aW9uKQorCXsKKwkJY2FzZSBBRERCQV9SRVE6CisJCQlQZWVyQWRkQkFSZXFBY3Rpb24ocEFkLEVsZW0pOworCQkJYnJlYWs7CisJCWNhc2UgQUREQkFfUkVTUDoKKwkJCVBlZXJBZGRCQVJzcEFjdGlvbihwQWQsRWxlbSk7CisJCQlicmVhazsKKwkJY2FzZSBERUxCQToKKwkJCVBlZXJEZWxCQUFjdGlvbihwQWQsRWxlbSk7CisJCQlicmVhazsKKwl9Cit9CisKKworI2lmZGVmIERPVDExTl9EUkFGVDMKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorVk9JRCBTdGFQdWJsaWNBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgQnNzMjA0MENvZXhpc3QpCit7CisJQlNTXzIwNDBfQ09FWElTVF9JRQkJQnNzQ29leGlzdDsKKwlNTE1FX1NDQU5fUkVRX1NUUlVDVAkJCVNjYW5SZXE7CisKKwlCc3NDb2V4aXN0LndvcmQgPSBCc3MyMDQwQ29leGlzdDsKKwkvLyBBUCBhc2tzIFN0YXRpb24gdG8gcmV0dXJuIGEgMjAvNDAgQlNTIENvZXhpc3RlbmNlIG1nbXQgZnJhbWUuICBTbyB3ZSBmaXJzdCBzdGFydHMgYSBzY2FuLCB0aGVuIHNlbmQgYmFjayAyMC80MCBCU1MgQ29leGlzdGVuY2UgbWdtdCBmcmFtZQorCWlmICgoQnNzQ29leGlzdC5maWVsZC5JbmZvUmVxID09IDEpICYmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NDQU5fMjA0MCkpKQorCXsKKwkJLy8gQ2xlYXIgcmVjb3JkIGZpcnN0LiAgQWZ0ZXIgc2NhbiAsIHdpbGwgdXBkYXRlIHRob3NlIGJpdCBhbmQgc2VuZCBiYWNrIHRvIHRyYW5zbWl0ZXIuCisJCXBBZC0+Q29tbW9uQ2ZnLkJTU0NvZXhpc3QyMDQwLmZpZWxkLkluZm9SZXEgPSAxOworCQlwQWQtPkNvbW1vbkNmZy5CU1NDb2V4aXN0MjA0MC5maWVsZC5JbnRvbGVyYW50NDAgPSAwOworCQlwQWQtPkNvbW1vbkNmZy5CU1NDb2V4aXN0MjA0MC5maWVsZC5CU1MyMFdpZHRoUmVxID0gMDsKKwkJLy8gRmlsbCBvdXQgc3R1ZmYgZm9yIHNjYW4gcmVxdWVzdAorCQlTY2FuUGFybUZpbGwocEFkLCAmU2NhblJlcSwgWmVyb1NzaWQsIDAsIEJTU19BTlksIFNDQU5fMjA0MF9CU1NfQ09FWElTVCk7CisJCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9TQ0FOX1JFUSwgc2l6ZW9mKE1MTUVfU0NBTl9SRVFfU1RSVUNUKSwgJlNjYW5SZXEpOworCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX09JRF9MSVNUX1NDQU47CisJfQorfQorCisKKy8qCitEZXNjcmlwdGlvbiA6IEJ1aWxkIEludG9sZXJhbnQgQ2hhbm5lbCBSZXJwb3QgZnJvbSBUcmlnZ2VyIGV2ZW50IHRhYmxlLgorcmV0dXJuIDogaG93IG1hbnkgYnl0ZXMgY29waWVkLgorKi8KK1VMT05HIEJ1aWxkSW50b2xlcmFudENoYW5uZWxSZXAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gICAgUFVDSEFSICBwRGVzdCkKK3sKKwlVTE9ORwkJCUZyYW1lTGVuID0gMDsKKwlVTE9ORwkJCVJlYWRPZmZzZXQgPSAwOworCVVDSEFSCQkJaTsKKwlVQ0hBUgkJCUxhc3RSZWdDbGFzcyA9IDB4ZmY7CisJUFVDSEFSCQkJcExlbjsKKworCWZvciAoIGkgPSAwO2kgPCBNQVhfVFJJR0dFUl9FVkVOVDtpKyspCisJeworCQlpZiAocEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QVtpXS5iVmFsaWQgPT0gVFJVRSkKKwkJeworCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEFbaV0uUmVnQ2xhc3MgPT0gTGFzdFJlZ0NsYXNzKQorCQkJeworCQkJCSoocERlc3QgKyBSZWFkT2Zmc2V0KSA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLkNoYW5uZWw7CisJCQkJKnBMZW4rKzsKKwkJCQlSZWFkT2Zmc2V0Kys7CisJCQkJRnJhbWVMZW4rKzsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkqKHBEZXN0ICsgUmVhZE9mZnNldCkgPSBJRV8yMDQwX0JTU19JTlRPTEVSQU5UX1JFUE9SVDsgIC8vIElFCisJCQkJKihwRGVzdCArIFJlYWRPZmZzZXQgKyAxKSA9IDI7CS8vIExlbiA9IFJlZ0NsYXNzIGJ5dGUgKyBjaGFubmVsIGJ5dGUuCisJCQkJcExlbiA9IHBEZXN0ICsgUmVhZE9mZnNldCArIDE7CisJCQkJTGFzdFJlZ0NsYXNzID0gcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QVtpXS5SZWdDbGFzczsKKwkJCQkqKHBEZXN0ICsgUmVhZE9mZnNldCArIDIpID0gTGFzdFJlZ0NsYXNzOwkvLyBMZW4gPSBSZWdDbGFzcyBieXRlICsgY2hhbm5lbCBieXRlLgorCQkJCSoocERlc3QgKyBSZWFkT2Zmc2V0ICsgMykgPSAoVUNIQVIpcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QVtpXS5DaGFubmVsOworCQkJCUZyYW1lTGVuICs9IDQ7CisJCQkJUmVhZE9mZnNldCArPSA0OworCQkJfQorCisJCX0KKwl9CisJcmV0dXJuIEZyYW1lTGVuOworfQorCisKKy8qCitEZXNjcmlwdGlvbiA6IFNlbmQgMjAvNDAgQlNTIENvZXhpc3RlbmNlIEFjdGlvbiBmcmFtZSBJZiBvbmUgdHJpZ2dlciBldmVudCBpcyB0cmlnZ2VyZWQuCisqLworVk9JRCBTZW5kMjA0MENvZXhpc3RBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gICAgVUNIQVIgIFdjaWQsCisJSU4JQk9PTEVBTgliQWRkSW50b2xlcmFudENoYSkKK3sKKwlQVUNIQVIJCQlwT3V0QnVmZmVyID0gTlVMTDsKKwlORElTX1NUQVRVUyAJTlN0YXR1czsKKwlGUkFNRV9BQ1RJT05fSERSCUZyYW1lOworCVVMT05HCQkJRnJhbWVMZW47CisJVUxPTkcJCQlJbnRvbGVyYW50Q2hhUmVwTGVuOworCisJSW50b2xlcmFudENoYVJlcExlbiA9IDA7CisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwlpZihOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkFDVCAtIFNlbmQyMDQwQ29leGlzdEFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCXJldHVybjsKKwl9CisJQWN0SGVhZGVySW5pdChwQWQsICZGcmFtZS5IZHIsIHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQWRkciwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCUZyYW1lLkNhdGVnb3J5ID0gQ0FURUdPUllfUFVCTElDOworCUZyYW1lLkFjdGlvbiA9IEFDVElPTl9CU1NfMjA0MF9DT0VYSVNUOworCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCQkJJkZyYW1lTGVuLAorCQkJCSAgc2l6ZW9mKEZSQU1FX0FDVElPTl9IRFIpLAkgICZGcmFtZSwKKwkJCQkgIEVORF9PRl9BUkdTKTsKKworCSoocE91dEJ1ZmZlciArIEZyYW1lTGVuKSA9IHBBZC0+Q29tbW9uQ2ZnLkJTU0NvZXhpc3QyMDQwLndvcmQ7CisJRnJhbWVMZW4rKzsKKworCWlmIChiQWRkSW50b2xlcmFudENoYSA9PSBUUlVFKQorCQlJbnRvbGVyYW50Q2hhUmVwTGVuID0gQnVpbGRJbnRvbGVyYW50Q2hhbm5lbFJlcChwQWQsIHBPdXRCdWZmZXIgKyBGcmFtZUxlbik7CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4gKyBJbnRvbGVyYW50Q2hhUmVwTGVuKTsKKwlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkFDVCAtIFNlbmQyMDQwQ29leGlzdEFjdGlvbiggQlNTQ29leGlzdDIwNDAgPSAweCV4ICkgIFxuIiwgcEFkLT5Db21tb25DZmcuQlNTQ29leGlzdDIwNDAud29yZCkpOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCUFmdGVyIHNjYW4sIFVwZGF0ZSAyMC80MCBCU1MgQ29leGlzdGVuY2UgSUUgYW5kIHNlbmQgb3V0LgorCUFjY29yZGluZyB0byA4MDIuMTFuIEQzLjAzIDExLjE0LjEwCisKKwlQYXJhbWV0ZXJzOgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgVXBkYXRlMjA0MENvZXhpc3RGcmFtZUFuZE5vdGlmeSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBVQ0hBUiAgV2NpZCwKKwlJTglCT09MRUFOCWJBZGRJbnRvbGVyYW50Q2hhKQoreworCUJTU18yMDQwX0NPRVhJU1RfSUUJT2xkVmFsdWU7CisKKwlPbGRWYWx1ZS53b3JkID0gcEFkLT5Db21tb25DZmcuQlNTQ29leGlzdDIwNDAud29yZDsKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEFObyA+IDApIHx8IChwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRCQ291bnREb3duID4gMCkpCisJCXBBZC0+Q29tbW9uQ2ZnLkJTU0NvZXhpc3QyMDQwLmZpZWxkLkJTUzIwV2lkdGhSZXEgPSAxOworCisJLy8gTmVlZCB0byBjaGVjayAhISEhCisJLy8gSG93IFNUQSB3aWxsIHNldCBJbnRvbGVyYW50NDAgaWYgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LiBOb3cgd2UgZG9uJ3Qgc2V0IHRoaXMgYml0IGZpcnN0LiEhISEhCisJLy8gU28gT25seSBjaGVjayBCU1MyMFdpZHRoUmVxIGNoYW5nZS4KKwlpZiAoT2xkVmFsdWUuZmllbGQuQlNTMjBXaWR0aFJlcSAhPSBwQWQtPkNvbW1vbkNmZy5CU1NDb2V4aXN0MjA0MC5maWVsZC5CU1MyMFdpZHRoUmVxKQorCXsKKwkJU2VuZDIwNDBDb2V4aXN0QWN0aW9uKHBBZCwgV2NpZCwgYkFkZEludG9sZXJhbnRDaGEpOworCX0KK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCitCT09MRUFOIENoYW5uZWxTd2l0Y2hTYW5pdHlDaGVjaygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBVQ0hBUiAgV2NpZCwKKwlJTiAgICBVQ0hBUiAgTmV3Q2hhbm5lbCwKKwlJTiAgICBVQ0hBUiAgU2Vjb25kYXJ5KQoreworCVVDSEFSCQlpOworCisJaWYgKFdjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXJldHVybiBGQUxTRTsKKworCWlmICgoTmV3Q2hhbm5lbCA+IDcpICYmIChTZWNvbmRhcnkgPT0gMSkpCisJCXJldHVybiBGQUxTRTsKKworCWlmICgoTmV3Q2hhbm5lbCA8IDUpICYmIChTZWNvbmRhcnkgPT0gMykpCisJCXJldHVybiBGQUxTRTsKKworCS8vIDAuIENoZWNrIGlmIG5ldyBjaGFubmVsIGlzIGluIHRoZSBjaGFubmVsbGlzdC4KKwlmb3IgKGkgPSAwO2kgPCBwQWQtPkNoYW5uZWxMaXN0TnVtO2krKykKKwl7CisJCWlmIChwQWQtPkNoYW5uZWxMaXN0W2ldLkNoYW5uZWwgPT0gTmV3Q2hhbm5lbCkKKwkJeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA9PSBwQWQtPkNoYW5uZWxMaXN0TnVtKQorCQlyZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4gVFJVRTsKK30KKworCitWT0lEIENoYW5uZWxTd2l0Y2hBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gICAgVUNIQVIgIFdjaWQsCisJSU4gICAgVUNIQVIgIE5ld0NoYW5uZWwsCisJSU4gICAgVUNIQVIgIFNlY29uZGFyeSkKK3sKKwlVQ0hBUgkJQkJQVmFsdWUgPSAwOworCVVMT05HCQlNQUNWYWx1ZTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU1BFQ1RSVU0gLSBDaGFubmVsU3dpdGNoQWN0aW9uKE5ld0NoYW5uZWwgPSAlZCAsIFNlY29uZGFyeSA9ICVkKSAgXG4iLCBOZXdDaGFubmVsLCBTZWNvbmRhcnkpKTsKKworCWlmIChDaGFubmVsU3dpdGNoU2FuaXR5Q2hlY2socEFkLCBXY2lkLCBOZXdDaGFubmVsLCBTZWNvbmRhcnkpID09IEZBTFNFKQorCQlyZXR1cm47CisKKwkvLyAxLiAgU3dpdGNoZXMgdG8gQlcgPSAyMC4KKwlpZiAoU2Vjb25kYXJ5ID09IDApCisJeworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7CisJCUJCUFZhbHVlJj0gKH4weDE4KTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCisJCXsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY5LCAweDE2KTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCAweDA4KTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjczLCAweDExKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhIXJ0Mjg2MEMgISEhIFxuIiApKTsKKwkJfQorCQlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV18yMDsKKwkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCA9IE5ld0NoYW5uZWw7CisJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKKwkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLEZBTFNFKTsKKwkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uSFRQaHlNb2RlLmZpZWxkLkJXID0gMDsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhMjBNSHogICAhISEgXG4iICkpOworCX0KKwkvLyAxLiAgU3dpdGNoZXMgdG8gQlcgPSA0MCBBbmQgU3RhdGlvbiBzdXBwb3J0cyBCVyA9IDQwLgorCWVsc2UgaWYgKCgoU2Vjb25kYXJ5ID09IDEpIHx8IChTZWNvbmRhcnkgPT0gMykpICYmIChwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSAxKSkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSBOZXdDaGFubmVsOworCisJCWlmIChTZWNvbmRhcnkgPT0gMSkKKwkJeworCQkJLy8gU2Vjb25kYXJ5IGFib3ZlLgorCQkJcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsICsgMjsKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZNQUNWYWx1ZSk7CisJCQlNQUNWYWx1ZSAmPSAweGZlOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIE1BQ1ZhbHVlKTsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJCUJCUFZhbHVlJj0gKH4weDE4KTsKKwkJCUJCUFZhbHVlfD0gKDB4MTApOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQkJQVmFsdWUpOworCQkJQkJQVmFsdWUmPSAofjB4MjApOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQkJQVmFsdWUpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhNDBNSHogTG93ZXIgTElOSyBVUCAhISEgQ29udHJvbCBDaGFubmVsIGF0IEJlbG93LiBDZW50cmFsID0gJWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCApKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIFNlY29uZGFyeSBiZWxvdy4KKwkJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCAtIDI7CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmTUFDVmFsdWUpOworCQkJTUFDVmFsdWUgJj0gMHhmZTsKKwkJCU1BQ1ZhbHVlIHw9IDB4MTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBNQUNWYWx1ZSk7CisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7CisJCQlCQlBWYWx1ZSY9ICh+MHgxOCk7CisJCQlCQlBWYWx1ZXw9ICgweDEwKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJCUFZhbHVlKTsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJCUFZhbHVlKTsKKwkJCUJCUFZhbHVlJj0gKH4weDIwKTsKKwkJCUJCUFZhbHVlfD0gKDB4MjApOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQkJQVmFsdWUpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhNDBNSHogVXBwZXIgTElOSyBVUCAhISEgQ29udHJvbCBDaGFubmVsIGF0IFVwcGVyQ2VudHJhbCA9ICVkIFxuIiwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgKSk7CisJCX0KKwkJcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfNDA7CisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworCQlwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkhUUGh5TW9kZS5maWVsZC5CVyA9IDE7CisJfQorfQorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBQZWVyUHVibGljQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJVUNIQVIJQWN0aW9uID0gRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMV07CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworCisJaWYgKEVsZW0tPldjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXJldHVybjsKKworI2lmZGVmIERPVDExTl9EUkFGVDMKKwlzd2l0Y2goQWN0aW9uKQorCXsKKwkJY2FzZSBBQ1RJT05fQlNTXzIwNDBfQ09FWElTVDoJLy8gRm9ybWF0IGRlZmluZWQgaW4gSUVFRSA3LjQuN2EuMSBpbiAxMW4gRHJhZjMuMDMKKwkJCXsKKwkJCQkvL1VDSEFSCUJzc0NvZXhpc3Q7CisJCQkJQlNTXzIwNDBfQ09FWElTVF9FTEVNRU5UCQkqcENvZXhpc3RJbmZvOworCQkJCUJTU18yMDQwX0NPRVhJU1RfSUUgCQkJKnBCc3NDb2V4aXN0SWU7CisJCQkJQlNTXzIwNDBfSU5UT0xFUkFOVF9DSF9SRVBPUlQJKnBJbnRvbGVyYW50UmVwb3J0ID0gTlVMTDsKKworCQkJCWlmIChFbGVtLT5Nc2dMZW4gPD0gKExFTkdUSF84MDJfMTEgKyBzaXplb2YoQlNTXzIwNDBfQ09FWElTVF9FTEVNRU5UKSkgKQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQUNUSU9OIC0gMjAvNDAgQlNTIENvZXhpc3RlbmNlIE1hbmFnZW1lbnQgRnJhbWUgbGVuZ3RoIHRvbyBzaG9ydCEgbGVuID0gJWxkIVxuIiwgRWxlbS0+TXNnTGVuKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBQ1RJT04gLSAyMC80MCBCU1MgQ29leGlzdGVuY2UgTWFuYWdlbWVudCBhY3Rpb24tLS0tPiBcbiIpKTsKKwkJCQloZXhfZHVtcCgiQ29leGlzdGVuY2VNZ210RnJhbWUiLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbik7CisKKworCQkJCXBDb2V4aXN0SW5mbyA9IChCU1NfMjA0MF9DT0VYSVNUX0VMRU1FTlQgKikgJkVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzJdOworCQkJCS8vaGV4X2R1bXAoIkNvZXhpc3RJbmZvIiwgKFBVQ0hBUilwQ29leGlzdEluZm8sIHNpemVvZihCU1NfMjA0MF9DT0VYSVNUX0VMRU1FTlQpKTsKKwkJCQlpZiAoRWxlbS0+TXNnTGVuID49IChMRU5HVEhfODAyXzExICsgc2l6ZW9mKEJTU18yMDQwX0NPRVhJU1RfRUxFTUVOVCkgKyBzaXplb2YoQlNTXzIwNDBfSU5UT0xFUkFOVF9DSF9SRVBPUlQpKSkKKwkJCQl7CisJCQkJCXBJbnRvbGVyYW50UmVwb3J0ID0gKEJTU18yMDQwX0lOVE9MRVJBTlRfQ0hfUkVQT1JUICopKChQVUNIQVIpcENvZXhpc3RJbmZvICsgc2l6ZW9mKEJTU18yMDQwX0NPRVhJU1RfRUxFTUVOVCkpOworCQkJCX0KKwkJCQkvL2hleF9kdW1wKCJJbnRvbGVyYW50UmVwb3J0ICIsIChQVUNIQVIpcEludG9sZXJhbnRSZXBvcnQsIHNpemVvZihCU1NfMjA0MF9JTlRPTEVSQU5UX0NIX1JFUE9SVCkpOworCisJCQkJcEJzc0NvZXhpc3RJZSA9IChCU1NfMjA0MF9DT0VYSVNUX0lFICopKCZwQ29leGlzdEluZm8tPkJzc0NvZXhpc3RJZSk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCXsKKwkJCQkJaWYgKElORlJBX09OKHBBZCkpCisJCQkJCXsKKwkJCQkJCVN0YVB1YmxpY0FjdGlvbihwQWQsIHBDb2V4aXN0SW5mbyk7CisJCQkJCX0KKwkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCX0KKwkJCWJyZWFrOworCX0KKworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworfQorCisKK3N0YXRpYyBWT0lEIFJlc2VydmVkQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVQ0hBUiBDYXRlZ29yeTsKKworCWlmIChFbGVtLT5Nc2dMZW4gPD0gTEVOR1RIXzgwMl8xMSkKKwl7CisJCXJldHVybjsKKwl9CisKKwlDYXRlZ29yeSA9IEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExXTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJjdiByZXNlcnZlZCBjYXRlZ29yeSglZCkgQWN0aW9uIEZyYW1lXG4iLCBDYXRlZ29yeSkpOworCWhleF9kdW1wKCJSZXNlcnZlZCBBY3Rpb24gRnJhbWUiLCAmRWxlbS0+TXNnWzBdLCBFbGVtLT5Nc2dMZW4pOworfQorCitWT0lEIFBlZXJSTUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCisKK3sKKwlyZXR1cm47Cit9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK3N0YXRpYyBWT0lEIHJlc3BvbmRfaHRfaW5mb3JtYXRpb25fZXhjaGFuZ2VfYWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlQVUNIQVIJCQlwT3V0QnVmZmVyID0gTlVMTDsKKwlORElTX1NUQVRVUwkJTlN0YXR1czsKKwlVTE9ORwkJCUZyYW1lTGVuOworCUZSQU1FX0hUX0lORk8JSFRJTkZPZnJhbWUsICpwRnJhbWU7CisJVUNIQVIgICAJCSpwQWRkcjsKKworCisJLy8gMi4gQWx3YXlzIHNlbmQgYmFjayBBRERCQSBSZXNwb25zZQorCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7CSAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisKKwlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBQ1RJT04gLSByZXNwb25kX2h0X2luZm9ybWF0aW9uX2V4Y2hhbmdlX2FjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwkvLyBnZXQgUkEKKwlwRnJhbWUgPSAoRlJBTUVfSFRfSU5GTyAqKSAmRWxlbS0+TXNnWzBdOworCXBBZGRyID0gcEZyYW1lLT5IZHIuQWRkcjI7CisKKwlOZGlzWmVyb01lbW9yeSgmSFRJTkZPZnJhbWUsIHNpemVvZihGUkFNRV9IVF9JTkZPKSk7CisJLy8gMi0xLiBQcmVwYXJlIEFEREJBIFJlc3BvbnNlIGZyYW1lLgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAoQURIT0NfT04ocEFkKSkKKwkJCUFjdEhlYWRlckluaXQocEFkLCAmSFRJTkZPZnJhbWUuSGRyLCBwQWRkciwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQllbHNlCisJCQlBY3RIZWFkZXJJbml0KHBBZCwgJkhUSU5GT2ZyYW1lLkhkciwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBBZGRyKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlIVElORk9mcmFtZS5DYXRlZ29yeSA9IENBVEVHT1JZX0hUOworCUhUSU5GT2ZyYW1lLkFjdGlvbiA9IEhUX0lORk9fRVhDSEFOR0U7CisJSFRJTkZPZnJhbWUuSFRfSW5mby5SZXF1ZXN0ID0gMDsKKwlIVElORk9mcmFtZS5IVF9JbmZvLkZvcnR5X01Iel9JbnRvbGVyYW50ID0gcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5Gb3J0eV9NaHpfSW50b2xlcmFudDsKKwlIVElORk9mcmFtZS5IVF9JbmZvLlNUQV9DaGFubmVsX1dpZHRoCSA9IHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uUmVjb21XaWR0aDsKKworCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsCQkJCQkmRnJhbWVMZW4sCisJCQkJCSAgc2l6ZW9mKEZSQU1FX0hUX0lORk8pLAkmSFRJTkZPZnJhbWUsCisJCQkJCSAgRU5EX09GX0FSR1MpOworCisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworfQorCisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCitWT0lEIFNlbmROb3RpZnlCV0FjdGlvbkZyYW1lKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSICBXY2lkLAorCUlOIFVDSEFSIGFwaWR4KQoreworCVBVQ0hBUgkJCXBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTIAlOU3RhdHVzOworCUZSQU1FX0FDVElPTl9IRFIJRnJhbWU7CisJVUxPTkcJCQlGcmFtZUxlbjsKKwlQVUNIQVIJCQlwQWRkcjE7CisKKworCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJBQ1QgLSBTZW5kTm90aWZ5QldBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQlyZXR1cm47CisJfQorCisJaWYgKFdjaWQgPT0gTUNBU1RfV0NJRCkKKwkJcEFkZHIxID0gJkJST0FEQ0FTVF9BRERSWzBdOworCWVsc2UKKwkJcEFkZHIxID0gcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5BZGRyOworCUFjdEhlYWRlckluaXQocEFkLCAmRnJhbWUuSGRyLCBwQWRkcjEsIHBBZC0+QXBDZmcuTUJTU0lEW2FwaWR4XS5Cc3NpZCwgcEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLkJzc2lkKTsKKworCUZyYW1lLkNhdGVnb3J5ID0gQ0FURUdPUllfSFQ7CisJRnJhbWUuQWN0aW9uID0gTk9USUZZX0JXX0FDVElPTjsKKworCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsCQkJCSZGcmFtZUxlbiwKKwkJCQkgIHNpemVvZihGUkFNRV9BQ1RJT05fSERSKSwJICAmRnJhbWUsCisJCQkJICBFTkRfT0ZfQVJHUyk7CisKKwkqKHBPdXRCdWZmZXIgKyBGcmFtZUxlbikgPSBwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvLlJlY29tV2lkdGg7CisJRnJhbWVMZW4rKzsKKworCisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFDVCAtIFNlbmROb3RpZnlCV0FjdGlvbihOb3RpZnlCVz0gJWQpIVxuIiwgcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoKSk7CisKK30KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKworVk9JRCBQZWVySFRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSCUFjdGlvbiA9IEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzFdOworCisJaWYgKEVsZW0tPldjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXJldHVybjsKKworCXN3aXRjaChBY3Rpb24pCisJeworCQljYXNlIE5PVElGWV9CV19BQ1RJT046CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFDVElPTiAtIEhUIE5vdGlmeSBDaGFubmVsIGJhbmR3aWR0aCBhY3Rpb24tLS0tPiBcbiIpKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCWlmKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlID09IEZBTFNFKQorCQkJeworCQkJCS8vIE5vdGUsIHRoaXMgaXMgdG8gcGF0Y2ggRElSLTEzNTMgQVAuIFdoZW4gdGhlIEFQIHNldCB0byBXZXAsIGl0IHdpbGwgdXNlIGxlZ2FjeSBtb2RlLiBCdXQgQVAgc3RpbGwga2VlcHMKKwkJCQkvLyBzZW5kaW5nIEJXX05vdGlmeSBBY3Rpb24gZnJhbWUsIGFuZCBjYXVzZSB1cyB0byBsaW5rdXAgYW5kIGxpbmtkb3duLgorCQkJCS8vIEluIGxlZ2FjeSBtb2RlLCBkb24ndCBuZWVkIHRvIHBhcnNlIEhUIGFjdGlvbiBmcmFtZS4KKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFDVElPTiAtSWdub3JlIEhUIE5vdGlmeSBDaGFubmVsIEJXIHdoZW4gbGluayBhcyBsZWdhY3kgbW9kZS4gQlcgPSAlZC0tLT4gXG4iLAorCQkJCQkJCQlFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSsyXSApKTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkJaWYgKEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzJdID09IDApCS8vIDcuNC44LjIuIGlmIHZhbHVlIGlzIDEsIGtlZXAgdGhlIHNhbWUgYXMgc3VwcG9ydGVkIGNoYW5uZWwgYmFuZHdpZHRoLgorCQkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF0uSFRQaHlNb2RlLmZpZWxkLkJXID0gMDsKKworCQkJYnJlYWs7CisKKwkJY2FzZSBTTVBTX0FDVElPTjoKKwkJCS8vIDcuMy4xLjI1CisgCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBQ1RJT04gLSBTTVBTIGFjdGlvbi0tLS0+IFxuIikpOworCQkJaWYgKCgoRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErMl0mMHgxKSA9PSAwKSkKKwkJCXsKKwkJCQlwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdLk1tcHNNb2RlID0gTU1QU19FTkFCTEU7CisJCQl9CisJCQllbHNlIGlmICgoKEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzJdJjB4MikgPT0gMCkpCisJCQl7CisJCQkJcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5NbXBzTW9kZSA9IE1NUFNfU1RBVElDOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF0uTW1wc01vZGUgPSBNTVBTX0RZTkFNSUM7CisJCQl9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQWlkKCVkKSBNSU1PIFBTID0gJWRcbiIsIEVsZW0tPldjaWQsIHBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF0uTW1wc01vZGUpKTsKKwkJCS8vIHJ0Mjg2MGMgOiBhZGQgc29tZXRoaW5nIGZvciBzbXBzIGNoYW5nZS4KKwkJCWJyZWFrOworCisJCWNhc2UgU0VUUENPX0FDVElPTjoKKwkJCWJyZWFrOworCisJCWNhc2UgTUlNT19DSEFfTUVBU1VSRV9BQ1RJT046CisJCQlicmVhazsKKworCQljYXNlIEhUX0lORk9fRVhDSEFOR0U6CisJCQl7CisJCQkJSFRfSU5GT1JNQVRJT05fT0NURVQJKnBIVF9pbmZvOworCisJCQkJcEhUX2luZm8gPSAoSFRfSU5GT1JNQVRJT05fT0NURVQgKikgJkVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzJdOworICAgIAkJCQkvLyA3LjQuOC4xMAorICAgIAkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFDVElPTiAtIEhUIEluZm9ybWF0aW9uIEV4Y2hhbmdlIGFjdGlvbi0tLS0+IFxuIikpOworICAgIAkJCQlpZiAocEhUX2luZm8tPlJlcXVlc3QpCisgICAgCQkJCXsKKyAgICAJCQkJCXJlc3BvbmRfaHRfaW5mb3JtYXRpb25fZXhjaGFuZ2VfYWN0aW9uKHBBZCwgRWxlbSk7CisgICAgCQkJCX0KKwkJCX0KKyAgICAJCQlicmVhazsKKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlSZXRyeSBzZW5kaW5nIEFEREJBIFJlcWVzdC4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJUGFyYW1ldHJzOgorCXA4MDIzSGVhZGVyOiBpZiB0aGlzIGlzIGFscmVhZHkgODAyLjMgZm9ybWF0LCBwODAyM0hlYWRlciBpcyBOVUxMCisKKwlSZXR1cm4JOiBUUlVFIGlmIHB1dCBpbnRvIHJ4IHJlb3JkZXJpbmcgYnVmZmVyLCBzaG91bGRuJ3QgaW5kaWNhdGVyeGhlcmUuCisJCQkJRkFMU0UgLCB0aGVuIGNvbnRpbnVlIGluZGljYXRlcnggYXQgdGhpcyBtb21lbnQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBPUklCQVRpbWVyVGltZW91dCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlNQUNfVEFCTEVfRU5UUlkJKnBFbnRyeTsKKwlJTlQJCQlpLCB0b3RhbDsKKy8vCUZSQU1FX0JBUgkJCUZyYW1lQmFyOworLy8JVUxPTkcJCQlGcmFtZUxlbjsKKy8vCU5ESVNfU1RBVFVTIAlOU3RhdHVzOworLy8JUFVDSEFSCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisvLwlVU0hPUlQJCQlTZXF1ZW5jZTsKKwlVQ0hBUgkJCVRJRDsKKworI2lmZGVmIFJBTElOS19BVEUKKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwl0b3RhbCA9IHBBZC0+TWFjVGFiLlNpemUgKiBOVU1fT0ZfVElEOworCisJZm9yIChpID0gMTsgKChpIDxNQVhfTEVOX09GX0JBX09SSV9UQUJMRSkgJiYgKHRvdGFsID4gMCkpIDsgaSsrKQorCXsKKwkJaWYgIChwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtpXS5PUklfQkFfU3RhdHVzID09IE9yaWdpbmF0b3JfRG9uZSkKKwkJeworCQkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbaV0uV2NpZF07CisJCQlUSUQgPSBwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtpXS5USUQ7CisKKwkJCUFTU0VSVChwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtpXS5XY2lkIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEUpOworCQl9CisJCXRvdGFsIC0tOworCX0KK30KKworCitWT0lEIFNlbmRSZWZyZXNoQkFSKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1BQ19UQUJMRV9FTlRSWQkqcEVudHJ5KQoreworCUZSQU1FX0JBUgkJRnJhbWVCYXI7CisJVUxPTkcJCQlGcmFtZUxlbjsKKwlORElTX1NUQVRVUyAJTlN0YXR1czsKKwlQVUNIQVIJCQlwT3V0QnVmZmVyID0gTlVMTDsKKwlVU0hPUlQJCQlTZXF1ZW5jZTsKKwlVQ0hBUgkJCWksIFRJRDsKKwlVU0hPUlQJCQlpZHg7CisJQkFfT1JJX0VOVFJZCSpwQkFFbnRyeTsKKworCWZvciAoaSA9IDA7IGkgPE5VTV9PRl9USUQ7IGkrKykKKwl7CisJCWlkeCA9IHBFbnRyeS0+QkFPcmlXY2lkQXJyYXlbaV07CisJCWlmIChpZHggPT0gMCkKKwkJeworCQkJY29udGludWU7CisJCX0KKwkJcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbaWR4XTsKKworCQlpZiAgKHBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID09IE9yaWdpbmF0b3JfRG9uZSkKKwkJeworCQkJVElEID0gcEJBRW50cnktPlRJRDsKKworCQkJQVNTRVJUKHBCQUVudHJ5LT5XY2lkIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEUpOworCisJCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCQkJaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiQkEgLSBNbG1lQUREQkFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJU2VxdWVuY2UgPSBwRW50cnktPlR4U2VxW1RJRF07CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQlCYXJIZWFkZXJJbml0KHBBZCwgJkZyYW1lQmFyLCBwRW50cnktPkFkZHIsIHBBZC0+Q3VycmVudEFkZHJlc3MpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCQlGcmFtZUJhci5TdGFydGluZ1NlcS5maWVsZC5GcmFnTnVtID0gMDsgLy8gbWFrZSBzdXJlIHNlcXVlbmNlIG5vdCBjbGVhciBpbiBERUwgZnVuY3Rpb24uCisJCQlGcmFtZUJhci5TdGFydGluZ1NlcS5maWVsZC5TdGFydFNlcSA9IFNlcXVlbmNlOyAvLyBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jaXRvbi4KKwkJCUZyYW1lQmFyLkJhckNvbnRyb2wuVElEID0gVElEOyAvLyBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jaXRvbi4KKworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCQkJJkZyYW1lTGVuLAorCQkJCQkJCSAgc2l6ZW9mKEZSQU1FX0JBUiksCSAgJkZyYW1lQmFyLAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJLy9pZiAoIShDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1JBTElOS19DSElQU0VUKSkpCisJCQlpZiAoMSkJLy8gTm93IHdlIGFsd2F5cyBzZW5kIEJBUi4KKwkJCXsKKwkJCQkvL01pbmlwb3J0TU1SZXF1ZXN0VW5sb2NrKHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCQkJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJCQkJLy9NaW5pcG9ydERhdGFNTVJlcXVlc3QocEFkLCBNYXBVc2VyUHJpb3JpdHlUb0FjY2Vzc0NhdGVnb3J5W1RJRF0sIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwkJCX0KKwkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJCX0KKwl9Cit9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgQWN0SGVhZGVySW5pdCgKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiBPVVQgUEhFQURFUl84MDJfMTEgcEhkcjgwMjExLAorICAgIElOIFBVQ0hBUiBBZGRyMSwKKyAgICBJTiBQVUNIQVIgQWRkcjIsCisgICAgSU4gUFVDSEFSIEFkZHIzKQoreworICAgIE5kaXNaZXJvTWVtb3J5KHBIZHI4MDIxMSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKyAgICBwSGRyODAyMTEtPkZDLlR5cGUgPSBCVFlQRV9NR01UOworICAgIHBIZHI4MDIxMS0+RkMuU3ViVHlwZSA9IFNVQlRZUEVfQUNUSU9OOworCisgICAgQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIxLCBBZGRyMSk7CisJQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIyLCBBZGRyMik7CisgICAgQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIzLCBBZGRyMyk7Cit9CisKK1ZPSUQgQmFySGVhZGVySW5pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBPVVQgUEZSQU1FX0JBUiBwQ250bEJhciwKKwlJTiBQVUNIQVIgcERBLAorCUlOIFBVQ0hBUiBwU0EpCit7CisvLwlVU0hPUlQJRHVyYXRpb247CisKKwlOZGlzWmVyb01lbW9yeShwQ250bEJhciwgc2l6ZW9mKEZSQU1FX0JBUikpOworCXBDbnRsQmFyLT5GQy5UeXBlID0gQlRZUEVfQ05UTDsKKwlwQ250bEJhci0+RkMuU3ViVHlwZSA9IFNVQlRZUEVfQkxPQ0tfQUNLX1JFUTsKKyAgIAlwQ250bEJhci0+QmFyQ29udHJvbC5NVElEID0gMDsKKwlwQ250bEJhci0+QmFyQ29udHJvbC5Db21wcmVzc2VkID0gMTsKKwlwQ250bEJhci0+QmFyQ29udHJvbC5BQ0tQb2xpY3kgPSAwOworCisKKwlwQ250bEJhci0+RHVyYXRpb24gPSAxNiArIFJUTVBDYWxjRHVyYXRpb24ocEFkLCBSQVRFXzEsIHNpemVvZihGUkFNRV9CQSkpOworCisJQ09QWV9NQUNfQUREUihwQ250bEJhci0+QWRkcjEsIHBEQSk7CisJQ09QWV9NQUNfQUREUihwQ250bEJhci0+QWRkcjIsIHBTQSk7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlJbnNlcnQgQ2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlIGludG8gdGhlIGFjdGlvbiBmcmFtZS4KKworCVBhcmFtZXRyczoKKwkJMS4gZnJhbWUgYnVmZmVyIHBvaW50ZXIuCisJCTIuIGZyYW1lIGxlbmd0aC4KKwkJMy4gY2F0ZWdvcnkgY29kZSBvZiB0aGUgZnJhbWUuCisJCTQuIGFjdGlvbiBjb2RlIG9mIHRoZSBmcmFtZS4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBJbnNlcnRBY3RGaWVsZCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBGcmFtZUJ1ZiwKKwlPVVQgUFVMT05HIHBGcmFtZUxlbiwKKwlJTiBVSU5UOCBDYXRlZ29yeSwKKwlJTiBVSU5UOCBBY3RDb2RlKQoreworCVVMT05HIFRlbXBMZW47CisKKwlNYWtlT3V0Z29pbmdGcmFtZSgJcEZyYW1lQnVmLAkJJlRlbXBMZW4sCisJCQkJCQkxLAkJCQkmQ2F0ZWdvcnksCisJCQkJCQkxLAkJCQkmQWN0Q29kZSwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKworCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKKworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2JhX2FjdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vYmFfYWN0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdlMWY4NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2JhX2FjdGlvbi5jCkBAIC0wLDAgKzEsMTgxMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisKKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworCisKKyNkZWZpbmUgQkFfT1JJX0lOSVRfU0VRCQkocEVudHJ5LT5UeFNlcVtUSURdKSAvLzEJCQkvLyBpbml0YWwgc2VxdWVuY2UgbnVtYmVyIG9mIEJBIHNlc3Npb24KKworI2RlZmluZSBPUklfU0VTU0lPTl9NQVhfUkVUUlkJOAorI2RlZmluZSBPUklfQkFfU0VTU0lPTl9USU1FT1VUCSgyMDAwKQkvLyBtcworI2RlZmluZSBSRUNfQkFfU0VTU0lPTl9JRExFX1RJTUVPVVQJKDEwMDApCS8vIG1zCisKKyNkZWZpbmUgUkVPUkRFUklOR19QQUNLRVRfVElNRU9VVAkJKCgxMDAgKiBIWikvMTAwMCkJLy8gc3lzdGVtIHRpY2tzIC0tIDEwMCBtcworI2RlZmluZSBNQVhfUkVPUkRFUklOR19QQUNLRVRfVElNRU9VVAkoKDMwMDAgKiBIWikvMTAwMCkJLy8gc3lzdGVtIHRpY2tzIC0tIDEwMCBtcworCisjZGVmaW5lIFJFU0VUX1JDVl9TRVEJCSgweEZGRkYpCisKK3N0YXRpYyB2b2lkIGJhX21wZHVfYmxrX2ZyZWUoUFJUTVBfQURBUFRFUiBwQWQsIHN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm1wZHVfYmxrKTsKKworCitCQV9PUklfRU5UUlkgKkJBVGFibGVBbGxvY09yaUVudHJ5KAorCQkJCQkJCQkgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCQkJCQkJCQkgIE9VVCBVU0hPUlQgICAgICAgICAgKklkeCk7CisKK0JBX1JFQ19FTlRSWSAqQkFUYWJsZUFsbG9jUmVjRW50cnkoCisJCQkJCQkJCSAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJCQkJCQkJCSAgT1VUIFVTSE9SVCAgICAgICAgICAqSWR4KTsKKworVk9JRCBCQU9yaVNlc3Npb25TZXR1cFRpbWVvdXQoCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorICAgIElOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBCQVJlY1Nlc3Npb25JZGxlVGltZW91dCgKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCisKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKEJBT3JpU2Vzc2lvblNldHVwVGltZW91dCk7CitCVUlMRF9USU1FUl9GVU5DVElPTihCQVJlY1Nlc3Npb25JZGxlVGltZW91dCk7CisKKyNkZWZpbmUgQU5OT1VOQ0VfUkVPUkRFUklOR19QQUNLRVQoX3BBZCwgX21wZHVfYmxrKQlcCisJCQlBbm5vdW5jZV9SZW9yZGVyaW5nX1BhY2tldChfcEFkLCBfbXBkdV9ibGspOworCitWT0lEIEJBX01heFdpblNpemVSZWFzaWduKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeVBlZXIsCisJT1VUIFVDSEFSCQkJKnBXaW5TaXplKQoreworCVVDSEFSIE1heFNpemU7CisKKworCWlmIChwQWQtPk1BQ1ZlcnNpb24gPj0gUkFMSU5LXzI4ODNfVkVSU0lPTikgLy8gMyozCisJeworCQlpZiAocEFkLT5NQUNWZXJzaW9uID49IFJBTElOS18zMDcwX1ZFUlNJT04pCisJCXsKKwkJCWlmIChwRW50cnlQZWVyLT5XZXBTdGF0dXMgIT0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZCkKKwkJCQlNYXhTaXplID0gNzsgLy8gZm9yIG5vbi1vcGVuIG1vZGUKKwkJCWVsc2UKKwkJCQlNYXhTaXplID0gMTM7CisJCX0KKwkJZWxzZQorCQkJTWF4U2l6ZSA9IDMxOworCX0KKwllbHNlIGlmIChwQWQtPk1BQ1ZlcnNpb24gPj0gUkFMSU5LXzI4ODBFX1ZFUlNJT04pIC8vIDI4ODAgZQorCXsKKwkJaWYgKHBFbnRyeVBlZXItPldlcFN0YXR1cyAhPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkKQorCQkJTWF4U2l6ZSA9IDc7IC8vIGZvciBub24tb3BlbiBtb2RlCisJCWVsc2UKKwkJCU1heFNpemUgPSAxMzsKKwl9CisJZWxzZQorCQlNYXhTaXplID0gNzsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImJhPiBXaW4gU2l6ZSA9ICVkLCBNYXggU2l6ZSA9ICVkXG4iLAorCQkJKnBXaW5TaXplLCBNYXhTaXplKSk7CisKKwlpZiAoKCpwV2luU2l6ZSkgPiBNYXhTaXplKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYmE+IHJlYXNzaWduIG1heCB3aW4gc2l6ZSBmcm9tICVkIHRvICVkXG4iLAorCQkJCSpwV2luU2l6ZSwgTWF4U2l6ZSkpOworCisJCSpwV2luU2l6ZSA9IE1heFNpemU7CisJfQorfQorCit2b2lkIEFubm91bmNlX1Jlb3JkZXJpbmdfUGFja2V0KElOIFBSVE1QX0FEQVBURVIJCQlwQWQsCisJCQkJCQkJCUlOIHN0cnVjdCByZW9yZGVyaW5nX21wZHUJKm1wZHUpCit7CisJUE5ESVNfUEFDS0VUICAgIHBQYWNrZXQ7CisKKwlwUGFja2V0ID0gbXBkdS0+cFBhY2tldDsKKworCWlmIChtcGR1LT5iQU1TRFUpCisJeworCQlBU1NFUlQoMCk7CisJCUJBX1Jlb3JkZXJfQU1TRFVfQW5ubm91bmNlKHBBZCwgcFBhY2tldCk7CisJfQorCWVsc2UKKwl7CisJCS8vCisJCS8vIHBhc3MgdGhpcyA4MDIuMyBwYWNrZXQgdG8gdXBwZXIgbGF5ZXIgb3IgZm9yd2FyZCB0aGlzIHBhY2tldCB0byBXTSBkaXJlY3RseQorCQkvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlBTk5PVU5DRV9PUl9GT1JXQVJEXzgwMl8zX1BBQ0tFVChwQWQsIHBQYWNrZXQsIFJUTVBfR0VUX1BBQ0tFVF9JRihwUGFja2V0KSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorfQorCisvKgorICogSW5zZXJ0IGEgcmVvcmRlcmluZyBtcGR1IGludG8gc29ydGVkIGxpbmtlZCBsaXN0IGJ5IHNlcXVlbmNlIG5vLgorICovCitCT09MRUFOIGJhX3Jlb3JkZXJpbmdfbXBkdV9pbnNlcnRzb3J0ZWQoc3RydWN0IHJlb3JkZXJpbmdfbGlzdCAqbGlzdCwgc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdSkKK3sKKworCXN0cnVjdCByZW9yZGVyaW5nX21wZHUgKipwcFNjYW4gPSAmbGlzdC0+bmV4dDsKKworCXdoaWxlICgqcHBTY2FuICE9IE5VTEwpCisJeworCQlpZiAoU0VRX1NNQUxMRVIoKCpwcFNjYW4pLT5TZXF1ZW5jZSwgbXBkdS0+U2VxdWVuY2UsIE1BWFNFUSkpCisJCXsKKwkJCXBwU2NhbiA9ICYoKnBwU2NhbiktPm5leHQ7CisJCX0KKwkJZWxzZSBpZiAoKCpwcFNjYW4pLT5TZXF1ZW5jZSA9PSBtcGR1LT5TZXF1ZW5jZSkKKwkJeworCQkJLyogZ2l2ZSB1cCB0aGlzIGR1cGxpY2F0ZWQgZnJhbWUgKi8KKwkJCXJldHVybihGQUxTRSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBmaW5kIHBvc2l0aW9uICovCisJCQlicmVhazsKKwkJfQorCX0KKworCW1wZHUtPm5leHQgPSAqcHBTY2FuOworCSpwcFNjYW4gPSBtcGR1OworCWxpc3QtPnFsZW4rKzsKKwlyZXR1cm4gVFJVRTsKK30KKworCisvKgorICogY2FsbGVyIGxvY2sgY3JpdGljYWwgc2VjdGlvbiBpZiBuZWNlc3NhcnkKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGJhX2VucXVldWUoc3RydWN0IHJlb3JkZXJpbmdfbGlzdCAqbGlzdCwgc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGspCit7CisJbGlzdC0+cWxlbisrOworCW1wZHVfYmxrLT5uZXh0ID0gbGlzdC0+bmV4dDsKKwlsaXN0LT5uZXh0ID0gbXBkdV9ibGs7Cit9CisKKy8qCisgKiBjYWxsZXIgbG9jayBjcml0aWNhbCBzZWN0aW9uIGlmIG5lY2Vzc2FyeQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZW9yZGVyaW5nX21wZHUgKiBiYV9kZXF1ZXVlKHN0cnVjdCByZW9yZGVyaW5nX2xpc3QgKmxpc3QpCit7CisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGsgPSBOVUxMOworCisJQVNTRVJUKGxpc3QpOworCisJCWlmIChsaXN0LT5xbGVuKQorCQl7CisJCQlsaXN0LT5xbGVuLS07CisJCQltcGR1X2JsayA9IGxpc3QtPm5leHQ7CisJCQlpZiAobXBkdV9ibGspCisJCQl7CisJCQkJbGlzdC0+bmV4dCA9IG1wZHVfYmxrLT5uZXh0OworCQkJCW1wZHVfYmxrLT5uZXh0ID0gTlVMTDsKKwkJCX0KKwkJfQorCXJldHVybiBtcGR1X2JsazsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZW9yZGVyaW5nX21wZHUgICpiYV9yZW9yZGVyaW5nX21wZHVfZGVxdWV1ZShzdHJ1Y3QgcmVvcmRlcmluZ19saXN0ICpsaXN0KQoreworCXJldHVybihiYV9kZXF1ZXVlKGxpc3QpKTsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZW9yZGVyaW5nX21wZHUgICpiYV9yZW9yZGVyaW5nX21wZHVfcHJvYmUoc3RydWN0IHJlb3JkZXJpbmdfbGlzdCAqbGlzdCkKKwl7CisJQVNTRVJUKGxpc3QpOworCisJCXJldHVybihsaXN0LT5uZXh0KTsKKwl9CisKKworLyoKKyAqIGZyZWUgYWxsIHJlc291cmNlIGZvciByZW9yZGVyaW5nIG1lY2hhbmlzbQorICovCit2b2lkIGJhX3Jlb3JkZXJpbmdfcmVzb3VyY2VfcmVsZWFzZShQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlCQV9UQUJMRSAgICAgICAgKlRhYjsKKwlQQkFfUkVDX0VOVFJZICAgcEJBRW50cnk7CisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGs7CisJaW50IGk7CisKKwlUYWIgPSAmcEFkLT5CQVRhYmxlOworCisJLyogSS4gIHJlbGVhc2UgYWxsIHBlbmRpbmcgcmVvcmRlcmluZyBwYWNrZXQgKi8KKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFOyBpKyspCisJeworCQlwQkFFbnRyeSA9ICZUYWItPkJBUmVjRW50cnlbaV07CisJCWlmIChwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cyAhPSBSZWNpcGllbnRfTk9ORSkKKwkJeworCQkJd2hpbGUgKChtcGR1X2JsayA9IGJhX3Jlb3JkZXJpbmdfbXBkdV9kZXF1ZXVlKCZwQkFFbnRyeS0+bGlzdCkpKQorCQkJeworCQkJCUFTU0VSVChtcGR1X2Jsay0+cFBhY2tldCk7CisJCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIG1wZHVfYmxrLT5wUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCQliYV9tcGR1X2Jsa19mcmVlKHBBZCwgbXBkdV9ibGspOworCQkJfQorCQl9CisJfQorCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKworCUFTU0VSVChwQkFFbnRyeS0+bGlzdC5xbGVuID09IDApOworCS8qIElJLiBmcmVlIG1lbW9yeSBvZiByZW9yZGVyaW5nIG1wZHUgdGFibGUgKi8KKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPm1wZHVfYmxrX3Bvb2wubG9jayk7CisJb3NfZnJlZV9tZW0ocEFkLCBwQWQtPm1wZHVfYmxrX3Bvb2wubWVtKTsKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPm1wZHVfYmxrX3Bvb2wubG9jayk7Cit9CisKKworCisvKgorICogQWxsb2NhdGUgYWxsIHJlc291cmNlIGZvciByZW9yZGVyaW5nIG1lY2hhbmlzbQorICovCitCT09MRUFOIGJhX3Jlb3JkZXJpbmdfcmVzb3VyY2VfaW5pdChQUlRNUF9BREFQVEVSIHBBZCwgaW50IG51bSkKK3sKKwlpbnQgICAgIGk7CisJUFVDSEFSICBtZW07CisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGs7CisJc3RydWN0IHJlb3JkZXJpbmdfbGlzdCAqZnJlZWxpc3Q7CisKKwkvKiBhbGxvY2F0ZSBzcGlubG9jayAqLworCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPm1wZHVfYmxrX3Bvb2wubG9jayk7CisKKwkvKiBpbml0aWFsaXplIGZyZWVsaXN0ICovCisJZnJlZWxpc3QgPSAmcEFkLT5tcGR1X2Jsa19wb29sLmZyZWVsaXN0OworCWZyZWVsaXN0LT5uZXh0ID0gTlVMTDsKKwlmcmVlbGlzdC0+cWxlbiA9IDA7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBbGxvY2F0ZSAlZCBtZW1vcnkgZm9yIEJBIHJlb3JkZXJpbmdcbiIsIChVSU5UMzIpKG51bSpzaXplb2Yoc3RydWN0IHJlb3JkZXJpbmdfbXBkdSkpKSk7CisKKwkvKiBhbGxvY2F0ZSBudW1iZXIgb2YgbXBkdV9ibGsgbWVtb3J5ICovCisJb3NfYWxsb2NfbWVtKHBBZCwgKFBVQ0hBUiAqKSZtZW0sIChudW0qc2l6ZW9mKHN0cnVjdCByZW9yZGVyaW5nX21wZHUpKSk7CisKKwlwQWQtPm1wZHVfYmxrX3Bvb2wubWVtID0gbWVtOworCisJaWYgKG1lbSA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQ2FuJ3QgQWxsb2NhdGUgTWVtb3J5IGZvciBCQSBSZW9yZGVyaW5nXG4iKSk7CisJCXJldHVybihGQUxTRSk7CisJfQorCisJLyogYnVpbGQgbXBkdV9ibGsgZnJlZSBsaXN0ICovCisJZm9yIChpPTA7IGk8bnVtOyBpKyspCisJeworCQkvKiBnZXQgbXBkdV9ibGsgKi8KKwkJbXBkdV9ibGsgPSAoc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqKSBtZW07CisJCS8qIGluaXRpYWwgbXBkdV9ibGsgKi8KKwkJTmRpc1plcm9NZW1vcnkobXBkdV9ibGssIHNpemVvZihzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1KSk7CisJCS8qIG5leHQgbXBkdV9ibGsgKi8KKwkJbWVtICs9IHNpemVvZihzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1KTsKKwkJLyogaW5zZXJ0IG1wZHVfYmxrIGludG8gZnJlZWxpc3QgKi8KKwkJYmFfZW5xdWV1ZShmcmVlbGlzdCwgbXBkdV9ibGspOworCX0KKworCXJldHVybihUUlVFKTsKK30KKworLy9zdGF0aWMgaW50IGJsa19jb3VudD0wOyAvLyBzYW1wbGUgdGFrZSBvZmYsIG5vIHVzZQorCitzdGF0aWMgc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqYmFfbXBkdV9ibGtfYWxsb2MoUFJUTVBfQURBUFRFUiBwQWQpCit7CisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGs7CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPm1wZHVfYmxrX3Bvb2wubG9jayk7CisJbXBkdV9ibGsgPSBiYV9kZXF1ZXVlKCZwQWQtPm1wZHVfYmxrX3Bvb2wuZnJlZWxpc3QpOworCWlmIChtcGR1X2JsaykKKwl7CisvLwkJYmxrX2NvdW50Kys7CisJCS8qIHJlc2V0IG1wZHVfYmxrICovCisJCU5kaXNaZXJvTWVtb3J5KG1wZHVfYmxrLCBzaXplb2Yoc3RydWN0IHJlb3JkZXJpbmdfbXBkdSkpOworCX0KKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPm1wZHVfYmxrX3Bvb2wubG9jayk7CisJcmV0dXJuIG1wZHVfYmxrOworfQorCitzdGF0aWMgdm9pZCBiYV9tcGR1X2Jsa19mcmVlKFBSVE1QX0FEQVBURVIgcEFkLCBzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsaykKK3sKKwlBU1NFUlQobXBkdV9ibGspOworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5tcGR1X2Jsa19wb29sLmxvY2spOworLy8JYmxrX2NvdW50LS07CisJYmFfZW5xdWV1ZSgmcEFkLT5tcGR1X2Jsa19wb29sLmZyZWVsaXN0LCBtcGR1X2Jsayk7CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5tcGR1X2Jsa19wb29sLmxvY2spOworfQorCisKK3N0YXRpYyBVU0hPUlQgYmFfaW5kaWNhdGVfcmVvcmRlcmluZ19tcGR1c19pbl9vcmRlcigKKwkJCQkJCQkJCQkJCSAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCQkJCQkJCQkJCQkJICAgSU4gUEJBX1JFQ19FTlRSWSAgICBwQkFFbnRyeSwKKwkJCQkJCQkJCQkJCSAgIElOIFVTSE9SVCAgICAgICAgICAgU3RhcnRTZXEpCit7CisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGs7CisJVVNIT1JUICBMYXN0SW5kU2VxID0gUkVTRVRfUkNWX1NFUTsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOworCisJd2hpbGUgKChtcGR1X2JsayA9IGJhX3Jlb3JkZXJpbmdfbXBkdV9wcm9iZSgmcEJBRW50cnktPmxpc3QpKSkKKwkJeworCQkJLyogZmluZCBpbi1vcmRlciBmcmFtZSAqLworCQlpZiAoIVNFUV9TVEVQT05FKG1wZHVfYmxrLT5TZXF1ZW5jZSwgU3RhcnRTZXEsIE1BWFNFUSkpCisJCQl7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBkZXF1ZXVlIGluLW9yZGVyIGZyYW1lIGZyb20gcmVvZGVyaW5nIGxpc3QgKi8KKwkJCW1wZHVfYmxrID0gYmFfcmVvcmRlcmluZ19tcGR1X2RlcXVldWUoJnBCQUVudHJ5LT5saXN0KTsKKwkJCS8qIHBhc3MgdGhpcyBmcmFtZSB1cCAqLworCQlBTk5PVU5DRV9SRU9SREVSSU5HX1BBQ0tFVChwQWQsIG1wZHVfYmxrKTsKKwkJLyogbW92ZSB0byBuZXh0IHNlcXVlbmNlICovCisJCQlTdGFydFNlcSA9IG1wZHVfYmxrLT5TZXF1ZW5jZTsKKwkJTGFzdEluZFNlcSA9IFN0YXJ0U2VxOworCQkvKiBmcmVlIG1wZHVfYmxrICovCisJCQliYV9tcGR1X2Jsa19mcmVlKHBBZCwgbXBkdV9ibGspOworCX0KKworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOworCisJLyogdXBkYXRlIGxhc3QgaW5kaWNhdGVkIHNlcXVlbmNlICovCisJcmV0dXJuIExhc3RJbmRTZXE7Cit9CisKK3N0YXRpYyB2b2lkIGJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfbGVfc2VxKAorCQkJCQkJCQkJCQkgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwkJCQkJCQkJCQkJICAgSU4gUEJBX1JFQ19FTlRSWSAgICBwQkFFbnRyeSwKKwkJCQkJCQkJCQkJICAgSU4gVVNIT1JUICAgICAgICAgICBTZXF1ZW5jZSkKK3sKKwlzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1ICptcGR1X2JsazsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOworCXdoaWxlICgobXBkdV9ibGsgPSBiYV9yZW9yZGVyaW5nX21wZHVfcHJvYmUoJnBCQUVudHJ5LT5saXN0KSkpCisJCXsKKwkJCS8qIGZpbmQgaW4tb3JkZXIgZnJhbWUgKi8KKwkJaWYgKChtcGR1X2Jsay0+U2VxdWVuY2UgPT0gU2VxdWVuY2UpIHx8IFNFUV9TTUFMTEVSKG1wZHVfYmxrLT5TZXF1ZW5jZSwgU2VxdWVuY2UsIE1BWFNFUSkpCisJCXsKKwkJCS8qIGRlcXVldWUgaW4tb3JkZXIgZnJhbWUgZnJvbSByZW9kZXJpbmcgbGlzdCAqLworCQkJbXBkdV9ibGsgPSBiYV9yZW9yZGVyaW5nX21wZHVfZGVxdWV1ZSgmcEJBRW50cnktPmxpc3QpOworCQkJLyogcGFzcyB0aGlzIGZyYW1lIHVwICovCisJCQlBTk5PVU5DRV9SRU9SREVSSU5HX1BBQ0tFVChwQWQsIG1wZHVfYmxrKTsKKwkJCS8qIGZyZWUgbXBkdV9ibGsgKi8KKwkJCWJhX21wZHVfYmxrX2ZyZWUocEFkLCBtcGR1X2Jsayk7CisJCX0KKwkJZWxzZQorCQkJeworCQkJCWJyZWFrOworCQkJfQorCX0KKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQkFFbnRyeS0+UnhSZVJpbmdMb2NrKTsKK30KKworCitzdGF0aWMgdm9pZCBiYV9yZWZyZXNoX3Jlb3JkZXJpbmdfbXBkdXMoCisJCQkJCQkJCQkgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwkJCQkJCQkJCSAgIFBCQV9SRUNfRU5UUlkgICAgICAgcEJBRW50cnkpCit7CisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGs7CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQkFFbnRyeS0+UnhSZVJpbmdMb2NrKTsKKworCQkJLyogZGVxdWV1ZSBpbi1vcmRlciBmcmFtZSBmcm9tIHJlb2RlcmluZyBsaXN0ICovCisJd2hpbGUgKChtcGR1X2JsayA9IGJhX3Jlb3JkZXJpbmdfbXBkdV9kZXF1ZXVlKCZwQkFFbnRyeS0+bGlzdCkpKQorCXsKKwkJCS8qIHBhc3MgdGhpcyBmcmFtZSB1cCAqLworCQlBTk5PVU5DRV9SRU9SREVSSU5HX1BBQ0tFVChwQWQsIG1wZHVfYmxrKTsKKworCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IG1wZHVfYmxrLT5TZXF1ZW5jZTsKKwkJCWJhX21wZHVfYmxrX2ZyZWUocEFkLCBtcGR1X2Jsayk7CisKKwkJLyogdXBkYXRlIGxhc3QgaW5kaWNhdGVkIHNlcXVlbmNlICovCisJfQorCUFTU0VSVChwQkFFbnRyeS0+bGlzdC5xbGVuID09IDApOworCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gUkVTRVRfUkNWX1NFUTsKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQkFFbnRyeS0+UnhSZVJpbmdMb2NrKTsKK30KKworCisvL3N0YXRpYwordm9pZCBiYV9mbHVzaF9yZW9yZGVyaW5nX3RpbWVvdXRfbXBkdXMoCisJCQkJCQkJCQlJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwkJCQkJCQkJCUlOIFBCQV9SRUNfRU5UUlkgICAgcEJBRW50cnksCisJCQkJCQkJCQlJTiBVTE9ORyAgICAgICAgICAgIE5vdzMyKQorCit7CisJVVNIT1JUIFNlcXVlbmNlOworCisvLwlpZiAoKFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3czMiwgKHVuc2lnbmVkIGxvbmcpKHBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lcitSRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VUKSkgJiYKKy8vCQkgKHBCQUVudHJ5LT5saXN0LnFsZW4gPiAoKHBCQUVudHJ5LT5CQVdpblNpemUqNykvOCkpKSAvL3x8CisvLwkJKFJUTVBfVElNRV9BRlRFUigodW5zaWduZWQgbG9uZylOb3czMiwgKHVuc2lnbmVkIGxvbmcpKHBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lcisoMTAqUkVPUkRFUklOR19QQUNLRVRfVElNRU9VVCkpKSAmJgorLy8JCSAocEJBRW50cnktPmxpc3QucWxlbiA+IChwQkFFbnRyeS0+QkFXaW5TaXplLzgpKSkKKwlpZiAoUlRNUF9USU1FX0FGVEVSKCh1bnNpZ25lZCBsb25nKU5vdzMyLCAodW5zaWduZWQgbG9uZykocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyKyhNQVhfUkVPUkRFUklOR19QQUNLRVRfVElNRU9VVC82KSkpCisJCSAmJihwQkFFbnRyeS0+bGlzdC5xbGVuID4gMSkKKwkJKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJ0aW1lb3V0WyVkXSAoJTA4bHgtJTA4bHggPSAlZCA+ICVkKTogJXgsIGZsdXNoIGFsbCFcbiAiLCBwQkFFbnRyeS0+bGlzdC5xbGVuLCBOb3czMiwgKHBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lciksCisJCQkgICAoaW50KSgobG9uZykgTm93MzIgLSAobG9uZykocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyKSksIE1BWF9SRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VULAorCQkJICAgcEJBRW50cnktPkxhc3RJbmRTZXEpKTsKKwkJYmFfcmVmcmVzaF9yZW9yZGVyaW5nX21wZHVzKHBBZCwgcEJBRW50cnkpOworCQlwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIgPSBOb3czMjsKKwl9CisJZWxzZQorCWlmIChSVE1QX1RJTUVfQUZURVIoKHVuc2lnbmVkIGxvbmcpTm93MzIsICh1bnNpZ25lZCBsb25nKShwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIrKFJFT1JERVJJTkdfUEFDS0VUX1RJTUVPVVQpKSkKKwkJJiYgKHBCQUVudHJ5LT5saXN0LnFsZW4gPiAwKQorCSAgICkKKwkJeworLy8JCXByaW50aygidGltZW91dFslZF0gKCVseC0lbHggPSAlZCA+ICVkKTogJXgsICIsIHBCQUVudHJ5LT5saXN0LnFsZW4sIE5vdzMyLCAocEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyKSwKKy8vCQkJICAgKGludCkoKGxvbmcpIE5vdzMyIC0gKGxvbmcpKHBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lcikpLCBSRU9SREVSSU5HX1BBQ0tFVF9USU1FT1VULAorLy8JCQkgICBwQkFFbnRyeS0+TGFzdEluZFNlcSk7CisgICAgCQkvLworCQkvLyBmb3JjZSBMYXN0SW5kU2VxIHRvIHNoaWZ0IHRvIExhc3RJbmRTZXErMQorICAgIAkJLy8KKyAgICAJCVNlcXVlbmNlID0gKHBCQUVudHJ5LT5MYXN0SW5kU2VxKzEpICYgTUFYU0VROworICAgIAkJYmFfaW5kaWNhdGVfcmVvcmRlcmluZ19tcGR1c19sZV9zZXEocEFkLCBwQkFFbnRyeSwgU2VxdWVuY2UpOworICAgIAkJcEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyID0gTm93MzI7CisJCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IFNlcXVlbmNlOworICAgIAkJLy8KKyAgICAJCS8vIGluZGljYXRlIGluLW9yZGVyIG1wZHVzCisgICAgCQkvLworICAgIAkJU2VxdWVuY2UgPSBiYV9pbmRpY2F0ZV9yZW9yZGVyaW5nX21wZHVzX2luX29yZGVyKHBBZCwgcEJBRW50cnksIFNlcXVlbmNlKTsKKyAgICAJCWlmIChTZXF1ZW5jZSAhPSBSRVNFVF9SQ1ZfU0VRKQorICAgIAkJeworICAgIAkJCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gU2VxdWVuY2U7CisgICAgCQl9CisKKwkJLy9wcmludGsoIiV4LCBmbHVzaCBvbmUhXG4iLCBwQkFFbnRyeS0+TGFzdEluZFNlcSk7CisKKwl9Cit9CisKKworLyoKKyAqIGdlbmVyYXRlIEFEREJBIHJlcXVlc3QgdG8KKyAqIHNldCB1cCBCQSBhZ3JlZW1lbnQKKyAqLworVk9JRCBCQU9yaVNlc3Npb25TZXRVcCgKKwkJCQkJICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwkJCQkJICBJTiBNQUNfVEFCTEVfRU5UUlkgICpwRW50cnksCisJCQkJCSAgSU4gVUNIQVIgICAgICAgICAgICBUSUQsCisJCQkJCSAgSU4gVVNIT1JUICAgICAgICAgICBUaW1lT3V0LAorCQkJCQkgIElOIFVMT05HICAgICAgICAgICAgRGVsYXlUaW1lLAorCQkJCQkgIElOIEJPT0xFQU4gICAgICAgICAgaXNGb3JjZWQpCisKK3sKKwkvL01MTUVfQUREQkFfUkVRX1NUUlVDVAlBZGRiYVJlcTsKKwlCQV9PUklfRU5UUlkgICAgICAgICAgICAqcEJBRW50cnkgPSBOVUxMOworCVVTSE9SVCAgICAgICAgICAgICAgICAgIElkeDsKKwlCT09MRUFOICAgICAgICAgICAgICAgICBDYW5jZWxsZWQ7CisKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgIT0gVFJVRSkgICYmICAoaXNGb3JjZWQgPT0gRkFMU0UpKQorCQlyZXR1cm47CisKKwkvLyBpZiB0aGlzIGVudHJ5IGlzIGxpbWl0ZWQgdG8gdXNlIGxlZ2FjeSB0eCBtb2RlLCBpdCBkb2Vzbid0IGdlbmVyYXRlIEJBLgorCWlmIChSVE1QU3RhRml4ZWRUeE1vZGUocEFkLCBwRW50cnkpICE9IEZJWEVEX1RYTU9ERV9IVCkKKwkJcmV0dXJuOworCisJaWYgKChwRW50cnktPkJBRGVjbGluZUJpdG1hcCAmICgxPDxUSUQpKSAmJiAoaXNGb3JjZWQgPT0gRkFMU0UpKQorCXsKKwkJLy8gdHJ5IGFnYWluIGFmdGVyIDMgc2VjcworCQlEZWxheVRpbWUgPSAzMDAwOworLy8JCXByaW50aygiRGVDbGluZSBCQSBmcm9tIFBlZXJcbiIpOworLy8JCXJldHVybjsKKwl9CisKKworCUlkeCA9IHBFbnRyeS0+QkFPcmlXY2lkQXJyYXlbVElEXTsKKwlpZiAoSWR4ID09IDApCisJeworCQkvLyBhbGxvY2F0ZSBhIEJBIHNlc3Npb24KKwkJcEJBRW50cnkgPSBCQVRhYmxlQWxsb2NPcmlFbnRyeShwQWQsICZJZHgpOworCQlpZiAocEJBRW50cnkgPT0gTlVMTCkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBRERCQSAtIE1sbWVBRERCQUFjdGlvbigpIGFsbG9jYXRlIEJBIHNlc3Npb24gZmFpbGVkIFxuIikpOworCQkJcmV0dXJuOworCQl9CisJfQorCWVsc2UKKwl7CisJCXBCQUVudHJ5ID0mcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbSWR4XTsKKwl9CisKKwlpZiAocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPj0gT3JpZ2luYXRvcl9XYWl0UmVzKQorCXsKKwkJcmV0dXJuOworCX0KKworCXBFbnRyeS0+QkFPcmlXY2lkQXJyYXlbVElEXSA9IElkeDsKKworCS8vIEluaXRpYWxpemUgQkEgc2Vzc2lvbgorCXBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID0gT3JpZ2luYXRvcl9XYWl0UmVzOworCXBCQUVudHJ5LT5XY2lkID0gcEVudHJ5LT5BaWQ7CisJcEJBRW50cnktPkJBV2luU2l6ZSA9IHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQ7CisJcEJBRW50cnktPlNlcXVlbmNlID0gQkFfT1JJX0lOSVRfU0VROworCXBCQUVudHJ5LT5Ub2tlbiA9IDE7CS8vICgyMDA4LTAxLTIxKSBKYW4gTGVlIHJlY29tbWVuZHMgaXQgLSB0aGlzIHRva2VuIGNhbid0IGJlIDAKKwlwQkFFbnRyeS0+VElEID0gVElEOworCXBCQUVudHJ5LT5UaW1lT3V0VmFsdWUgPSBUaW1lT3V0OworCXBCQUVudHJ5LT5wQWRhcHRlciA9IHBBZDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU2VuZCBBZGRCQSB0byAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCBUaWQ6JWQgaXNGb3JjZWQ6JWQgV2NpZDolZFxuIgorCQkscEVudHJ5LT5BZGRyWzBdLHBFbnRyeS0+QWRkclsxXSxwRW50cnktPkFkZHJbMl0KKwkJLHBFbnRyeS0+QWRkclszXSxwRW50cnktPkFkZHJbNF0scEVudHJ5LT5BZGRyWzVdCisJCSxUSUQsaXNGb3JjZWQscEVudHJ5LT5BaWQpKTsKKworCWlmICghKHBFbnRyeS0+VFhCQWJpdG1hcCAmICgxPDxUSUQpKSkKKwl7CisJCVJUTVBJbml0VGltZXIocEFkLCAmcEJBRW50cnktPk9SSUJBVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihCQU9yaVNlc3Npb25TZXR1cFRpbWVvdXQpLCBwQkFFbnRyeSwgRkFMU0UpOworCX0KKwllbHNlCisJCVJUTVBDYW5jZWxUaW1lcigmcEJBRW50cnktPk9SSUJBVGltZXIsICZDYW5jZWxsZWQpOworCisJLy8gc2V0IHRpbWVyIHRvIHNlbmQgQUREQkEgcmVxdWVzdAorCVJUTVBTZXRUaW1lcigmcEJBRW50cnktPk9SSUJBVGltZXIsIERlbGF5VGltZSk7Cit9CisKK1ZPSUQgQkFPcmlTZXNzaW9uQWRkKAorCQkJSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisJCQkJCUlOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeSwKKwkJCUlOIFBGUkFNRV9BRERCQV9SU1AgcEZyYW1lKQoreworCUJBX09SSV9FTlRSWSAgKnBCQUVudHJ5ID0gTlVMTDsKKwlCT09MRUFOICAgICAgIENhbmNlbGxlZDsKKwlVQ0hBUiAgICAgICAgIFRJRDsKKwlVU0hPUlQgICAgICAgIElkeDsKKwlQVUNIQVIgICAgICAgICAgcE91dEJ1ZmZlcjIgPSBOVUxMOworCU5ESVNfU1RBVFVTICAgICBOU3RhdHVzOworCVVMT05HICAgICAgICAgICBGcmFtZUxlbjsKKwlGUkFNRV9CQVIgICAgICAgRnJhbWVCYXI7CisKKwlUSUQgPSBwRnJhbWUtPkJhUGFybS5USUQ7CisJSWR4ID0gcEVudHJ5LT5CQU9yaVdjaWRBcnJheVtUSURdOworCXBCQUVudHJ5ID0mcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbSWR4XTsKKworCS8vIFN0YXJ0IGZpbGwgaW4gcGFyYW1ldGVycy4KKwlpZiAoKElkeCAhPTApICYmIChwQkFFbnRyeS0+VElEID09IFRJRCkgJiYgKHBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID09IE9yaWdpbmF0b3JfV2FpdFJlcykpCisJeworCQlwQkFFbnRyeS0+QkFXaW5TaXplID0gbWluKHBCQUVudHJ5LT5CQVdpblNpemUsICgoVUNIQVIpcEZyYW1lLT5CYVBhcm0uQnVmU2l6ZSkpOworCQlCQV9NYXhXaW5TaXplUmVhc2lnbihwQWQsIHBFbnRyeSwgJnBCQUVudHJ5LT5CQVdpblNpemUpOworCisJCXBCQUVudHJ5LT5UaW1lT3V0VmFsdWUgPSBwRnJhbWUtPlRpbWVPdXRWYWx1ZTsKKwkJcEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX0RvbmU7CisJCS8vIHJlc2V0IHNlcXVlbmNlIG51bWJlcgorCQlwQkFFbnRyeS0+U2VxdWVuY2UgPSBCQV9PUklfSU5JVF9TRVE7CisJCS8vIFNldCBCaXRtYXAgZmxhZy4KKwkJcEVudHJ5LT5UWEJBYml0bWFwIHw9ICgxPDxUSUQpOworCQkJCVJUTVBDYW5jZWxUaW1lcigmcEJBRW50cnktPk9SSUJBVGltZXIsICZDYW5jZWxsZWQpOworCisJCXBCQUVudHJ5LT5PUklCQVRpbWVyLlRpbWVyVmFsdWUgPSAwOwkvL3BGcmFtZS0+VGltZU91dFZhbHVlOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiJXMgOiBUWEJBYml0bWFwID0gJXgsIEJBV2luU2l6ZSA9ICVkLCBUaW1lT3V0ID0gJWxkXG4iLCBfX0ZVTkNUSU9OX18sIHBFbnRyeS0+VFhCQWJpdG1hcCwKKwkJCQkJCQkJIHBCQUVudHJ5LT5CQVdpblNpemUsIHBCQUVudHJ5LT5PUklCQVRpbWVyLlRpbWVyVmFsdWUpKTsKKworCQkvLyBTRU5EIEJBUiA7CisJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcjIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCQlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJBIC0gQkFPcmlTZXNzaW9uQWRkKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKKwkJCXJldHVybjsKKwkJfQorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCUJhckhlYWRlckluaXQocEFkLCAmRnJhbWVCYXIsIHBBZC0+TWFjVGFiLkNvbnRlbnRbcEJBRW50cnktPldjaWRdLkFkZHIsIHBBZC0+Q3VycmVudEFkZHJlc3MpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCUZyYW1lQmFyLlN0YXJ0aW5nU2VxLmZpZWxkLkZyYWdOdW0gPSAwOwkvLyBtYWtlIHN1cmUgc2VxdWVuY2Ugbm90IGNsZWFyIGluIERFTCBmdW5jdGlvbi4KKwkJRnJhbWVCYXIuU3RhcnRpbmdTZXEuZmllbGQuU3RhcnRTZXEgPSBwQkFFbnRyeS0+U2VxdWVuY2U7IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCQlGcmFtZUJhci5CYXJDb250cm9sLlRJRCA9IHBCQUVudHJ5LT5USUQ7IC8vIG1ha2Ugc3VyZSBzZXF1ZW5jZSBub3QgY2xlYXIgaW4gREVMIGZ1bmNpdG9uLgorCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyMiwgICAgICAgICAgICAgICZGcmFtZUxlbiwKKwkJCQkJCSAgc2l6ZW9mKEZSQU1FX0JBUiksICAgICAgJkZyYW1lQmFyLAorCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIyLCBGcmFtZUxlbik7CisJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcjIpOworCisKKwkJaWYgKHBCQUVudHJ5LT5PUklCQVRpbWVyLlRpbWVyVmFsdWUpCisJCQlSVE1QU2V0VGltZXIoJnBCQUVudHJ5LT5PUklCQVRpbWVyLCBwQkFFbnRyeS0+T1JJQkFUaW1lci5UaW1lclZhbHVlKTsgLy8gaW4gbVNlYworCX0KK30KKworQk9PTEVBTiBCQVJlY1Nlc3Npb25BZGQoCisJCQkJCSAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCQkJCQkgICBJTiBNQUNfVEFCTEVfRU5UUlkgICpwRW50cnksCisJCQkJCSAgIElOIFBGUkFNRV9BRERCQV9SRVEgcEZyYW1lKQoreworCUJBX1JFQ19FTlRSWSAgICAgICAgICAgICpwQkFFbnRyeSA9IE5VTEw7CisJQk9PTEVBTiAgICAgICAgICAgICAgICAgU3RhdHVzID0gVFJVRTsKKwlCT09MRUFOICAgICAgICAgICAgICAgICBDYW5jZWxsZWQ7CisJVVNIT1JUICAgICAgICAgICAgICAgICAgSWR4OworCVVDSEFSICAgICAgICAgICAgICAgICAgIFRJRDsKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBCQVdpblNpemU7CisJLy9VSU5UMzIgICAgICAgICAgICAgICAgICBWYWx1ZTsKKwkvL1VJTlQgICAgICAgICAgICAgICAgICAgIG9mZnNldDsKKworCisJQVNTRVJUKHBFbnRyeSk7CisKKwkvLyBmaW5kIFRJRAorCVRJRCA9IHBGcmFtZS0+QmFQYXJtLlRJRDsKKworCUJBV2luU2l6ZSA9IG1pbigoKFVDSEFSKXBGcmFtZS0+QmFQYXJtLkJ1ZlNpemUpLCAoVUNIQVIpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCk7CisKKwkvLyBJbnRlbCBwYXRjaAorCWlmIChCQVdpblNpemUgPT0gMCkKKwl7CisJCUJBV2luU2l6ZSA9IDY0OworCX0KKworCUlkeCA9IHBFbnRyeS0+QkFSZWNXY2lkQXJyYXlbVElEXTsKKworCisJaWYgKElkeCA9PSAwKQorCXsKKwkJcEJBRW50cnkgPSBCQVRhYmxlQWxsb2NSZWNFbnRyeShwQWQsICZJZHgpOworCX0KKwllbHNlCisJeworCQlwQkFFbnRyeSA9ICZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtJZHhdOworCQkvLyBmbHVzaCBhbGwgcGVuZGluZyByZW9yZGVyaW5nIG1wZHVzCisJCWJhX3JlZnJlc2hfcmVvcmRlcmluZ19tcGR1cyhwQWQsIHBCQUVudHJ5KTsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiVzKCVsZCk6IElkeCA9ICVkLCBCQVdpblNpemUocmVxICVkKSA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCwgSWR4LAorCQkJCQkJCSBwRnJhbWUtPkJhUGFybS5CdWZTaXplLCBCQVdpblNpemUpKTsKKworCS8vIFN0YXJ0IGZpbGwgaW4gcGFyYW1ldGVycy4KKwlpZiAocEJBRW50cnkgIT0gTlVMTCkKKwl7CisJCUFTU0VSVChwQkFFbnRyeS0+bGlzdC5xbGVuID09IDApOworCisJCXBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzID0gUmVjaXBpZW50X0hhbmRsZVJlczsKKwkJcEJBRW50cnktPkJBV2luU2l6ZSA9IEJBV2luU2l6ZTsKKwkJcEJBRW50cnktPldjaWQgPSBwRW50cnktPkFpZDsKKwkJcEJBRW50cnktPlRJRCA9IFRJRDsKKwkJcEJBRW50cnktPlRpbWVPdXRWYWx1ZSA9IHBGcmFtZS0+VGltZU91dFZhbHVlOworCQlwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cyA9IFJlY2lwaWVudF9BY2NlcHQ7CisJCS8vIGluaXRpYWwgc2VxdWVuY2UgbnVtYmVyCisJCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gUkVTRVRfUkNWX1NFUTsgLy9wRnJhbWUtPkJhU3RhcnRTZXEuZmllbGQuU3RhcnRTZXE7CisKKwkJcHJpbnRrKCJTdGFydCBTZXEgPSAlMDh4XG4iLCAgcEZyYW1lLT5CYVN0YXJ0U2VxLmZpZWxkLlN0YXJ0U2VxKTsKKworCQlpZiAocEVudHJ5LT5SWEJBYml0bWFwICYgKDE8PFRJRCkpCisJCXsKKwkJCVJUTVBDYW5jZWxUaW1lcigmcEJBRW50cnktPlJFQ0JBVGltZXIsICZDYW5jZWxsZWQpOworCQl9CisJCWVsc2UKKwkJeworCQkJUlRNUEluaXRUaW1lcihwQWQsICZwQkFFbnRyeS0+UkVDQkFUaW1lciwgR0VUX1RJTUVSX0ZVTkNUSU9OKEJBUmVjU2Vzc2lvbklkbGVUaW1lb3V0KSwgcEJBRW50cnksIFRSVUUpOworCQl9CisKKwkJLy8gU2V0IEJpdG1hcCBmbGFnLgorCQlwRW50cnktPlJYQkFiaXRtYXAgfD0gKDE8PFRJRCk7CisJCXBFbnRyeS0+QkFSZWNXY2lkQXJyYXlbVElEXSA9IElkeDsKKworCQlwRW50cnktPkJBRGVjbGluZUJpdG1hcCAmPSB+KDE8PFRJRCk7CisKKwkJLy8gU2V0IEJBIHNlc3Npb24gbWFzayBpbiBXQ0lEIHRhYmxlLgorCQlSVDI4WFhfQUREX0JBX1NFU1NJT05fVE9fQVNJQyhwQWQsIHBFbnRyeS0+QWlkLCBUSUQpOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiTUFDRW50cnlbJWRdUlhCQWJpdG1hcCA9IDB4JXguIEJBUmVjV2NpZEFycmF5PSVkXG4iLAorCQkJCXBFbnRyeS0+QWlkLCBwRW50cnktPlJYQkFiaXRtYXAsIHBFbnRyeS0+QkFSZWNXY2lkQXJyYXlbVElEXSkpOworCX0KKwllbHNlCisJeworCQlTdGF0dXMgPSBGQUxTRTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJDYW4ndCBBY2NlcHQgQUREQkEgZm9yICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IFRJRCA9ICVkXG4iLAorCQkJCVBSSU5UX01BQyhwRW50cnktPkFkZHIpLCBUSUQpKTsKKwl9CisJcmV0dXJuKFN0YXR1cyk7Cit9CisKKworQkFfUkVDX0VOVFJZICpCQVRhYmxlQWxsb2NSZWNFbnRyeSgKKwkJCQkJCQkJICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwkJCQkJCQkJICBPVVQgVVNIT1JUICAgICAgICAgICpJZHgpCit7CisJaW50ICAgICAgICAgICAgIGk7CisJQkFfUkVDX0VOVFJZICAgICpwQkFFbnRyeSA9IE5VTEw7CisKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKworCWlmIChwQWQtPkJBVGFibGUubnVtQXNSZWNpcGllbnQgPj0gTUFYX0JBUkVDSV9TRVNTSU9OKQorCXsKKwkJcHJpbnRrKCJCQSBSZWNpcGVpbnQgU2Vzc2lvbiAoJWxkKSA+ICVkXG4iLCBwQWQtPkJBVGFibGUubnVtQXNSZWNpcGllbnQsCisJCQlNQVhfQkFSRUNJX1NFU1NJT04pOworCQlnb3RvIGRvbmU7CisJfQorCisJLy8gcmVzZXJ2ZSBpZHggMCB0byBpZGVudGlmeSBCQVdjaWRBcnJheVtUSURdIGFzIGVtcHR5CisJZm9yIChpPTE7IGkgPCBNQVhfTEVOX09GX0JBX1JFQ19UQUJMRTsgaSsrKQorCXsKKwkJcEJBRW50cnkgPSZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtpXTsKKwkJaWYgKChwQkFFbnRyeS0+UkVDX0JBX1N0YXR1cyA9PSBSZWNpcGllbnRfTk9ORSkpCisJCXsKKwkJCS8vIGdldCBvbmUKKwkJCXBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCsrOworCQkJcEJBRW50cnktPlJFQ19CQV9TdGF0dXMgPSBSZWNpcGllbnRfVVNFRDsKKwkJCSpJZHggPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKK2RvbmU6CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCXJldHVybiBwQkFFbnRyeTsKK30KKworQkFfT1JJX0VOVFJZICpCQVRhYmxlQWxsb2NPcmlFbnRyeSgKKwkJCQkJCQkJICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwkJCQkJCQkJICBPVVQgVVNIT1JUICAgICAgICAgICpJZHgpCit7CisJaW50ICAgICAgICAgICAgIGk7CisJQkFfT1JJX0VOVFJZICAgICpwQkFFbnRyeSA9IE5VTEw7CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7CisKKwlpZiAocEFkLT5CQVRhYmxlLm51bUFzT3JpZ2luYXRvciA+PSAoTUFYX0xFTl9PRl9CQV9PUklfVEFCTEUpKQorCXsKKwkJZ290byBkb25lOworCX0KKworCS8vIHJlc2VydmUgaWR4IDAgdG8gaWRlbnRpZnkgQkFXY2lkQXJyYXlbVElEXSBhcyBlbXB0eQorCWZvciAoaT0xOyBpPE1BWF9MRU5fT0ZfQkFfT1JJX1RBQkxFOyBpKyspCisJeworCQlwQkFFbnRyeSA9JnBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W2ldOworCQlpZiAoKHBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID09IE9yaWdpbmF0b3JfTk9ORSkpCisJCXsKKwkJCS8vIGdldCBvbmUKKwkJCXBBZC0+QkFUYWJsZS5udW1Bc09yaWdpbmF0b3IrKzsKKwkJCXBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID0gT3JpZ2luYXRvcl9VU0VEOworCQkJcEJBRW50cnktPnBBZGFwdGVyID0gcEFkOworCQkJKklkeCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworZG9uZToKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7CisJcmV0dXJuIHBCQUVudHJ5OworfQorCisKK1ZPSUQgQkFUYWJsZUZyZWVPcmlFbnRyeSgKKwkJCQkJCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCQkJCQkJSU4gIFVMT05HICAgICAgICAgICBJZHgpCit7CisJQkFfT1JJX0VOVFJZICAgICpwQkFFbnRyeSA9IE5VTEw7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisKKworCWlmICgoSWR4ID09IDApIHx8IChJZHggPj0gTUFYX0xFTl9PRl9CQV9PUklfVEFCTEUpKQorCQlyZXR1cm47CisKKwlwQkFFbnRyeSA9JnBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W0lkeF07CisKKwlpZiAocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgIT0gT3JpZ2luYXRvcl9OT05FKQorCXsKKwkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbcEJBRW50cnktPldjaWRdOworCQlwRW50cnktPkJBT3JpV2NpZEFycmF5W3BCQUVudHJ5LT5USURdID0gMDsKKworCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKwkJaWYgKHBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID09IE9yaWdpbmF0b3JfRG9uZSkKKwkJeworCQkgCXBFbnRyeS0+VFhCQWJpdG1hcCAmPSAofigxPDwocEJBRW50cnktPlRJRCkgKSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCQVRhYmxlRnJlZU9yaUVudHJ5IG51bUFzT3JpZ2luYXRvcj0gJWxkXG4iLCBwQWQtPkJBVGFibGUubnVtQXNSZWNpcGllbnQpKTsKKwkJCS8vIEVyYXNlIEJpdG1hcCBmbGFnLgorCQl9CisKKwkJQVNTRVJUKHBBZC0+QkFUYWJsZS5udW1Bc09yaWdpbmF0b3IgIT0gMCk7CisKKwkJcEFkLT5CQVRhYmxlLm51bUFzT3JpZ2luYXRvciAtPSAxOworCisJCXBCQUVudHJ5LT5PUklfQkFfU3RhdHVzID0gT3JpZ2luYXRvcl9OT05FOworCQlwQkFFbnRyeS0+VG9rZW4gPSAwOworCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7CisJfQorfQorCisKK1ZPSUQgQkFUYWJsZUZyZWVSZWNFbnRyeSgKKwkJCQkJCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCQkJCQkJSU4gIFVMT05HICAgICAgICAgICBJZHgpCit7CisJQkFfUkVDX0VOVFJZICAgICpwQkFFbnRyeSA9IE5VTEw7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisKKworCWlmICgoSWR4ID09IDApIHx8IChJZHggPj0gTUFYX0xFTl9PRl9CQV9SRUNfVEFCTEUpKQorCQlyZXR1cm47CisKKwlwQkFFbnRyeSA9JnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W0lkeF07CisKKwlpZiAocEJBRW50cnktPlJFQ19CQV9TdGF0dXMgIT0gUmVjaXBpZW50X05PTkUpCisJeworCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtwQkFFbnRyeS0+V2NpZF07CisJCXBFbnRyeS0+QkFSZWNXY2lkQXJyYXlbcEJBRW50cnktPlRJRF0gPSAwOworCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKworCQlBU1NFUlQocEFkLT5CQVRhYmxlLm51bUFzUmVjaXBpZW50ICE9IDApOworCisJCXBBZC0+QkFUYWJsZS5udW1Bc1JlY2lwaWVudCAtPSAxOworCisJCXBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzID0gUmVjaXBpZW50X05PTkU7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKwl9Cit9CisKKworVk9JRCBCQU9yaVNlc3Npb25UZWFyRG93bigKKwkJCQkJCSBJTiBPVVQgIFBSVE1QX0FEQVBURVIgICBwQWQsCisJCQkJCQkgSU4gICAgICBVQ0hBUiAgICAgICAgICAgV2NpZCwKKwkJCQkJCSBJTiAgICAgIFVDSEFSICAgICAgICAgICBUSUQsCisJCQkJCQkgSU4gICAgICBCT09MRUFOICAgICAgICAgYlBhc3NpdmUsCisJCQkJCQkgSU4gICAgICBCT09MRUFOICAgICAgICAgYkZvcmNlU2VuZCkKK3sKKwlVTE9ORyAgICAgICAgICAgSWR4ID0gMDsKKwlCQV9PUklfRU5UUlkgICAgKnBCQUVudHJ5OworCUJPT0xFQU4gICAgICAgICBDYW5jZWxsZWQ7CisKKwlpZiAoV2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwl7CisJCXJldHVybjsKKwl9CisKKwkvLworCS8vIExvY2F0ZSBjb3JyZXNwb25kaW5nIEJBIE9yaWdpbmF0b3IgRW50cnkgaW4gQkEgVGFibGUgd2l0aCB0aGUgKHBBZGRyLFRJRCkuCisJLy8KKwlJZHggPSBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkJBT3JpV2NpZEFycmF5W1RJRF07CisJaWYgKChJZHggPT0gMCkgfHwgKElkeCA+PSBNQVhfTEVOX09GX0JBX09SSV9UQUJMRSkpCisJeworCQlpZiAoYkZvcmNlU2VuZCA9PSBUUlVFKQorCQl7CisJCQkvLyBmb3JjZSBzZW5kIHNwZWNpZmllZCBUSUQgRGVsQkEKKwkJCU1MTUVfREVMQkFfUkVRX1NUUlVDVCAgIERlbGJhUmVxOworCQkJTUxNRV9RVUVVRV9FTEVNICpFbGVtID0gKE1MTUVfUVVFVUVfRUxFTSAqKSBrbWFsbG9jKHNpemVvZihNTE1FX1FVRVVFX0VMRU0pLCBNRU1fQUxMT0NfRkxBRyk7CisKKwkJCU5kaXNaZXJvTWVtb3J5KCZEZWxiYVJlcSwgc2l6ZW9mKERlbGJhUmVxKSk7CisJCQlOZGlzWmVyb01lbW9yeShFbGVtLCBzaXplb2YoTUxNRV9RVUVVRV9FTEVNKSk7CisKKwkJCUNPUFlfTUFDX0FERFIoRGVsYmFSZXEuQWRkciwgcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5BZGRyKTsKKwkJCURlbGJhUmVxLldjaWQgPSBXY2lkOworCQkJRGVsYmFSZXEuVElEID0gVElEOworCQkJRGVsYmFSZXEuSW5pdGlhdG9yID0gT1JJR0lOQVRPUjsKKyNpZiAxCisJCQlFbGVtLT5Nc2dMZW4gID0gc2l6ZW9mKERlbGJhUmVxKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KEVsZW0tPk1zZywgJkRlbGJhUmVxLCBzaXplb2YoRGVsYmFSZXEpKTsKKwkJCU1sbWVERUxCQUFjdGlvbihwQWQsIEVsZW0pOworCQkJa2ZyZWUoRWxlbSk7CisjZWxzZQorCQkJTWxtZUVucXVldWUocEFkLCBBQ1RJT05fU1RBVEVfTUFDSElORSwgTVQyX01MTUVfT1JJX0RFTEJBX0NBVEUsIHNpemVvZihNTE1FX0RFTEJBX1JFUV9TVFJVQ1QpLCAoUFZPSUQpJkRlbGJhUmVxKTsKKwkJCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKyNlbmRpZgorCQl9CisKKwkJcmV0dXJuOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiJXM9PT0+V2NpZD0lZC5USUQ9JWQgXG4iLCBfX0ZVTkNUSU9OX18sIFdjaWQsIFRJRCkpOworCisJcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBT3JpRW50cnlbSWR4XTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlx0PT09PklkeCA9ICVsZCwgV2NpZD0lZC5USUQ9JWQsIE9SSV9CQV9TdGF0dXMgPSAlZCBcbiIsIElkeCwgV2NpZCwgVElELCBwQkFFbnRyeS0+T1JJX0JBX1N0YXR1cykpOworCS8vCisJLy8gUHJlcGFyZSBEZWxCQSBhY3Rpb24gZnJhbWUgYW5kIHNlbmQgdG8gdGhlIHBlZXIuCisJLy8KKwlpZiAoKGJQYXNzaXZlID09IEZBTFNFKSAmJiAoVElEID09IHBCQUVudHJ5LT5USUQpICYmIChwQkFFbnRyeS0+T1JJX0JBX1N0YXR1cyA9PSBPcmlnaW5hdG9yX0RvbmUpKQorCXsKKwkJTUxNRV9ERUxCQV9SRVFfU1RSVUNUICAgRGVsYmFSZXE7CisJCU1MTUVfUVVFVUVfRUxFTSAqRWxlbSA9IChNTE1FX1FVRVVFX0VMRU0gKikga21hbGxvYyhzaXplb2YoTUxNRV9RVUVVRV9FTEVNKSwgTUVNX0FMTE9DX0ZMQUcpOworCisJCU5kaXNaZXJvTWVtb3J5KCZEZWxiYVJlcSwgc2l6ZW9mKERlbGJhUmVxKSk7CisJCU5kaXNaZXJvTWVtb3J5KEVsZW0sIHNpemVvZihNTE1FX1FVRVVFX0VMRU0pKTsKKworCQlDT1BZX01BQ19BRERSKERlbGJhUmVxLkFkZHIsIHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQWRkcik7CisJCURlbGJhUmVxLldjaWQgPSBXY2lkOworCQlEZWxiYVJlcS5USUQgPSBwQkFFbnRyeS0+VElEOworCQlEZWxiYVJlcS5Jbml0aWF0b3IgPSBPUklHSU5BVE9SOworI2lmIDEKKwkJRWxlbS0+TXNnTGVuICA9IHNpemVvZihEZWxiYVJlcSk7CisJCU5kaXNNb3ZlTWVtb3J5KEVsZW0tPk1zZywgJkRlbGJhUmVxLCBzaXplb2YoRGVsYmFSZXEpKTsKKwkJTWxtZURFTEJBQWN0aW9uKHBBZCwgRWxlbSk7CisJCWtmcmVlKEVsZW0pOworI2Vsc2UKKwkJTWxtZUVucXVldWUocEFkLCBBQ1RJT05fU1RBVEVfTUFDSElORSwgTVQyX01MTUVfT1JJX0RFTEJBX0NBVEUsIHNpemVvZihNTE1FX0RFTEJBX1JFUV9TVFJVQ1QpLCAoUFZPSUQpJkRlbGJhUmVxKTsKKwkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworI2VuZGlmCisJfQorCVJUTVBDYW5jZWxUaW1lcigmcEJBRW50cnktPk9SSUJBVGltZXIsICZDYW5jZWxsZWQpOworCUJBVGFibGVGcmVlT3JpRW50cnkocEFkLCBJZHgpOworCisJaWYgKGJQYXNzaXZlKQorCXsKKwkJLy9CQU9yaVNlc3Npb25TZXRVcChwQWQsICZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLCBUSUQsIDAsIDEwMDAwLCBUUlVFKTsKKwl9Cit9CisKK1ZPSUQgQkFSZWNTZXNzaW9uVGVhckRvd24oCisJCQkJCQkgSU4gT1VUICBQUlRNUF9BREFQVEVSICAgcEFkLAorCQkJCQkJIElOICAgICAgVUNIQVIgICAgICAgICAgIFdjaWQsCisJCQkJCQkgSU4gICAgICBVQ0hBUiAgICAgICAgICAgVElELAorCQkJCQkJIElOICAgICAgQk9PTEVBTiAgICAgICAgIGJQYXNzaXZlKQoreworCVVMT05HICAgICAgICAgICBJZHggPSAwOworCUJBX1JFQ19FTlRSWSAgICAqcEJBRW50cnk7CisKKwlpZiAoV2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwl7CisJCXJldHVybjsKKwl9CisKKwkvLworCS8vICBMb2NhdGUgY29ycmVzcG9uZGluZyBCQSBPcmlnaW5hdG9yIEVudHJ5IGluIEJBIFRhYmxlIHdpdGggdGhlIChwQWRkcixUSUQpLgorCS8vCisJSWR4ID0gcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5CQVJlY1djaWRBcnJheVtUSURdOworCWlmIChJZHggPT0gMCkKKwkJcmV0dXJuOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIlcz09PT5XY2lkPSVkLlRJRD0lZCBcbiIsIF9fRlVOQ1RJT05fXywgV2NpZCwgVElEKSk7CisKKworCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W0lkeF07CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJcdD09PT5JZHggPSAlbGQsIFdjaWQ9JWQuVElEPSVkLCBSRUNfQkFfU3RhdHVzID0gJWQgXG4iLCBJZHgsIFdjaWQsIFRJRCwgcEJBRW50cnktPlJFQ19CQV9TdGF0dXMpKTsKKwkvLworCS8vIFByZXBhcmUgRGVsQkEgYWN0aW9uIGZyYW1lIGFuZCBzZW5kIHRvIHRoZSBwZWVyLgorCS8vCisJaWYgKChUSUQgPT0gcEJBRW50cnktPlRJRCkgJiYgKHBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzID09IFJlY2lwaWVudF9BY2NlcHQpKQorCXsKKwkJTUxNRV9ERUxCQV9SRVFfU1RSVUNUICAgRGVsYmFSZXE7CisJCUJPT0xFQU4gCQkJCUNhbmNlbGxlZDsKKwkJTUxNRV9RVUVVRV9FTEVNICpFbGVtID0gKE1MTUVfUVVFVUVfRUxFTSAqKSBrbWFsbG9jKHNpemVvZihNTE1FX1FVRVVFX0VMRU0pLCBNRU1fQUxMT0NfRkxBRyk7CisJCS8vVUxPTkcgICBvZmZzZXQ7CisJCS8vVUlOVDMyICBWQUxVRTsKKworCQlSVE1QQ2FuY2VsVGltZXIoJnBCQUVudHJ5LT5SRUNCQVRpbWVyLCAmQ2FuY2VsbGVkKTsKKworCQkvLworCQkvLyAxLiBTZW5kIERFTEJBIEFjdGlvbiBGcmFtZQorCQkvLworCQlpZiAoYlBhc3NpdmUgPT0gRkFMU0UpCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KCZEZWxiYVJlcSwgc2l6ZW9mKERlbGJhUmVxKSk7CisJCQlOZGlzWmVyb01lbW9yeShFbGVtLCBzaXplb2YoTUxNRV9RVUVVRV9FTEVNKSk7CisKKwkJCUNPUFlfTUFDX0FERFIoRGVsYmFSZXEuQWRkciwgcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5BZGRyKTsKKwkJCURlbGJhUmVxLldjaWQgPSBXY2lkOworCQkJRGVsYmFSZXEuVElEID0gVElEOworCQkJRGVsYmFSZXEuSW5pdGlhdG9yID0gUkVDSVBJRU5UOworI2lmIDEKKwkJCUVsZW0tPk1zZ0xlbiAgPSBzaXplb2YoRGVsYmFSZXEpOworCQkJTmRpc01vdmVNZW1vcnkoRWxlbS0+TXNnLCAmRGVsYmFSZXEsIHNpemVvZihEZWxiYVJlcSkpOworCQkJTWxtZURFTEJBQWN0aW9uKHBBZCwgRWxlbSk7CisJCQlrZnJlZShFbGVtKTsKKyNlbHNlCisJCQlNbG1lRW5xdWV1ZShwQWQsIEFDVElPTl9TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9PUklfREVMQkFfQ0FURSwgc2l6ZW9mKE1MTUVfREVMQkFfUkVRX1NUUlVDVCksIChQVk9JRCkmRGVsYmFSZXEpOworCQkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworI2VuZGlmCisJCX0KKworCisJCS8vCisJCS8vIDIuIEZyZWUgcmVzb3VyY2Ugb2YgQkEgc2Vzc2lvbgorCQkvLworCQkvLyBmbHVzaCBhbGwgcGVuZGluZyByZW9yZGVyaW5nIG1wZHVzCisJCWJhX3JlZnJlc2hfcmVvcmRlcmluZ19tcGR1cyhwQWQsIHBCQUVudHJ5KTsKKworCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7CisKKwkJLy8gRXJhc2UgQml0bWFwIGZsYWcuCisJCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gUkVTRVRfUkNWX1NFUTsKKwkJcEJBRW50cnktPkJBV2luU2l6ZSA9IDA7CisJCS8vIEVyYXNlIEJpdG1hcCBmbGFnIGF0IHNvZnR3YXJlIG1hY3RhYmxlCisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uUlhCQWJpdG1hcCAmPSAofigxPDwocEJBRW50cnktPlRJRCkpKTsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXS5CQVJlY1djaWRBcnJheVtUSURdID0gMDsKKworCQlSVDI4WFhfREVMX0JBX1NFU1NJT05fRlJPTV9BU0lDKHBBZCwgV2NpZCwgVElEKTsKKworCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJBVGFiTG9jayk7CisKKwl9CisKKwlCQVRhYmxlRnJlZVJlY0VudHJ5KHBBZCwgSWR4KTsKK30KKworVk9JRCBCQVNlc3Npb25UZWFyRG93bkFMTCgKKwkJCQkJCSBJTiBPVVQgIFBSVE1QX0FEQVBURVIgcEFkLAorCQkJCQkJIElOICAgICAgVUNIQVIgV2NpZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpPE5VTV9PRl9USUQ7IGkrKykKKwl7CisJCUJBT3JpU2Vzc2lvblRlYXJEb3duKHBBZCwgV2NpZCwgaSwgRkFMU0UsIEZBTFNFKTsKKwkJQkFSZWNTZXNzaW9uVGVhckRvd24ocEFkLCBXY2lkLCBpLCBGQUxTRSk7CisJfQorfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUmV0cnkgc2VuZGluZyBBRERCQSBSZXFlc3QuCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCVBhcmFtZXRyczoKKwlwODAyM0hlYWRlcjogaWYgdGhpcyBpcyBhbHJlYWR5IDgwMi4zIGZvcm1hdCwgcDgwMjNIZWFkZXIgaXMgTlVMTAorCisJUmV0dXJuCTogVFJVRSBpZiBwdXQgaW50byByeCByZW9yZGVyaW5nIGJ1ZmZlciwgc2hvdWxkbid0IGluZGljYXRlcnhoZXJlLgorCQkJCUZBTFNFICwgdGhlbiBjb250aW51ZSBpbmRpY2F0ZXJ4IGF0IHRoaXMgbW9tZW50LgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQkFPcmlTZXNzaW9uU2V0dXBUaW1lb3V0KAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKwlCQV9PUklfRU5UUlkgICAgKnBCQUVudHJ5ID0gKEJBX09SSV9FTlRSWSAqKUZ1bmN0aW9uQ29udGV4dDsKKwlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKwlQUlRNUF9BREFQVEVSICAgcEFkOworCisJaWYgKHBCQUVudHJ5ID09IE5VTEwpCisJCXJldHVybjsKKworCXBBZCA9IHBCQUVudHJ5LT5wQWRhcHRlcjsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyBEbyBub3RoaW5nIGlmIG1vbml0b3IgbW9kZSBpcyBvbgorCQlpZiAoTU9OSVRPUl9PTihwQWQpKQorCQkJcmV0dXJuOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIFJBTElOS19BVEUKKwkvLyBOb3RoaW5nIHRvIGRvIGluIEFURSBtb2RlLgorCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3BCQUVudHJ5LT5XY2lkXTsKKworCWlmICgocEJBRW50cnktPk9SSV9CQV9TdGF0dXMgPT0gT3JpZ2luYXRvcl9XYWl0UmVzKSAmJiAocEJBRW50cnktPlRva2VuIDwgT1JJX1NFU1NJT05fTUFYX1JFVFJZKSkKKwl7CisJCU1MTUVfQUREQkFfUkVRX1NUUlVDVCAgICBBZGRiYVJlcTsKKworCQlOZGlzWmVyb01lbW9yeSgmQWRkYmFSZXEsIHNpemVvZihBZGRiYVJlcSkpOworCQlDT1BZX01BQ19BRERSKEFkZGJhUmVxLnBBZGRyLCBwRW50cnktPkFkZHIpOworCQlBZGRiYVJlcS5XY2lkID0gKFVDSEFSKShwRW50cnktPkFpZCk7CisJCUFkZGJhUmVxLlRJRCA9IHBCQUVudHJ5LT5USUQ7CisJCUFkZGJhUmVxLkJhQnVmU2l6ZSA9IHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQ7CisJCUFkZGJhUmVxLlRpbWVPdXRWYWx1ZSA9IDA7CisJCUFkZGJhUmVxLlRva2VuID0gcEJBRW50cnktPlRva2VuOworCQlNbG1lRW5xdWV1ZShwQWQsIEFDVElPTl9TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9BRERfQkFfQ0FURSwgc2l6ZW9mKE1MTUVfQUREQkFfUkVRX1NUUlVDVCksIChQVk9JRCkmQWRkYmFSZXEpOworCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisJCS8vREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJCQSBPcmkgU2Vzc2lvbiBUaW1lb3V0KCVkKSA6IFNlbmQgQUREIEJBIGFnYWluXG4iLCBwQkFFbnRyeS0+VG9rZW4pKTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJBIE9yaSBTZXNzaW9uIFRpbWVvdXQoJWQpIHRvICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IFRpZDolZCBXY2lkOiVkXG4iCisJCSxwQkFFbnRyeS0+VG9rZW4KKwkJLHBFbnRyeS0+QWRkclswXSxwRW50cnktPkFkZHJbMV0scEVudHJ5LT5BZGRyWzJdCisJCSxwRW50cnktPkFkZHJbM10scEVudHJ5LT5BZGRyWzRdLHBFbnRyeS0+QWRkcls1XQorCQkscEJBRW50cnktPlRJRCxwRW50cnktPkFpZCkpOworCisJCXBCQUVudHJ5LT5Ub2tlbisrOworCQlSVE1QU2V0VGltZXIoJnBCQUVudHJ5LT5PUklCQVRpbWVyLCBPUklfQkFfU0VTU0lPTl9USU1FT1VUKTsKKwl9CisJZWxzZQorCXsKKwkJQkFUYWJsZUZyZWVPcmlFbnRyeShwQWQsIHBFbnRyeS0+QkFPcmlXY2lkQXJyYXlbcEJBRW50cnktPlRJRF0pOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlSZXRyeSBzZW5kaW5nIEFEREJBIFJlcWVzdC4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJUGFyYW1ldHJzOgorCXA4MDIzSGVhZGVyOiBpZiB0aGlzIGlzIGFscmVhZHkgODAyLjMgZm9ybWF0LCBwODAyM0hlYWRlciBpcyBOVUxMCisKKwlSZXR1cm4JOiBUUlVFIGlmIHB1dCBpbnRvIHJ4IHJlb3JkZXJpbmcgYnVmZmVyLCBzaG91bGRuJ3QgaW5kaWNhdGVyeGhlcmUuCisJCQkJRkFMU0UgLCB0aGVuIGNvbnRpbnVlIGluZGljYXRlcnggYXQgdGhpcyBtb21lbnQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBCQVJlY1Nlc3Npb25JZGxlVGltZW91dCgKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisKKwlCQV9SRUNfRU5UUlkgICAgKnBCQUVudHJ5ID0gKEJBX1JFQ19FTlRSWSAqKUZ1bmN0aW9uQ29udGV4dDsKKwlQUlRNUF9BREFQVEVSICAgcEFkOworCVVMT05HICAgICAgICAgICBOb3czMjsKKworCWlmIChwQkFFbnRyeSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoKHBCQUVudHJ5LT5SRUNfQkFfU3RhdHVzID09IFJlY2lwaWVudF9BY2NlcHQpKQorCXsKKwkJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93MzIpOworCisJCWlmIChSVE1QX1RJTUVfQUZURVIoKHVuc2lnbmVkIGxvbmcpTm93MzIsICh1bnNpZ25lZCBsb25nKShwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIgKyBSRUNfQkFfU0VTU0lPTl9JRExFX1RJTUVPVVQpKSkKKwkJeworCQkJcEFkID0gcEJBRW50cnktPnBBZGFwdGVyOworCQkJLy8gZmx1c2ggYWxsIHBlbmRpbmcgcmVvcmRlcmluZyBtcGR1cworCQkJYmFfcmVmcmVzaF9yZW9yZGVyaW5nX21wZHVzKHBBZCwgcEJBRW50cnkpOworCQkJcHJpbnRrKCIlbGQ6IFJFQyBCQSBzZXNzaW9uIFRpbWVvdXRcbiIsIE5vdzMyKTsKKwkJfQorCX0KK30KKworCitWT0lEIFBlZXJBZGRCQVJlcUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCisKK3sKKwkvLwk3LjQuNC4xCisJLy9VTE9ORwlJZHg7CisJVUNIQVIgICBTdGF0dXMgPSAxOworCVVDSEFSICAgcEFkZHJbNl07CisJRlJBTUVfQUREQkFfUlNQIEFERGZyYW1lOworCVBVQ0hBUiAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTICAgICBOU3RhdHVzOworCVBGUkFNRV9BRERCQV9SRVEgIHBBZGRyZXFGcmFtZSA9IE5VTEw7CisJLy9VQ0hBUgkJQnVmU2l6ZTsKKwlVTE9ORyAgICAgICBGcmFtZUxlbjsKKwlQVUxPTkcgICAgICBwdGVtcDsKKwlQTUFDX1RBQkxFX0VOVFJZCXBNYWNFbnRyeTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzID09PiAoV2NpZCA9ICVkKVxuIiwgX19GVU5DVElPTl9fLCBFbGVtLT5XY2lkKSk7CisKKwkvL2hleF9kdW1wKCJBZGRCQVJlcSIsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuKTsKKworCS8vQUREQkEgUmVxdWVzdCBmcm9tIHVua25vd24gcGVlciwgaWdub3JlIHRoaXMuCisJaWYgKEVsZW0tPldjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXJldHVybjsKKworCXBNYWNFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQkEgLSBQZWVyQWRkQkFSZXFBY3Rpb24tLS0tPiBcbiIpKTsKKwlwdGVtcCA9IChQVUxPTkcpRWxlbS0+TXNnOworCS8vREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VNVSwgKCIlMDh4OjogJTA4eDo6ICUwOHg6OiAlMDh4OjogJTA4eDo6ICUwOHg6OiAlMDh4OjogJTA4eDo6ICUwOHhcbiIsICoocHRlbXApLCAqKHB0ZW1wKzEpLCAqKHB0ZW1wKzIpLCAqKHB0ZW1wKzMpLCAqKHB0ZW1wKzQpLCAqKHB0ZW1wKzUpLCAqKHB0ZW1wKzYpLCAqKHB0ZW1wKzcpLCAqKHB0ZW1wKzgpKSk7CisKKwlpZiAoUGVlckFkZEJBUmVxQWN0aW9uU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIHBBZGRyKSkKKwl7CisKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5iQkFEZWNsaW5lID09IEZBTFNFKSAmJiBJU19IVF9TVEEocE1hY0VudHJ5KSkKKwkJeworCQkJcEFkZHJlcUZyYW1lID0gKFBGUkFNRV9BRERCQV9SRVEpKCZFbGVtLT5Nc2dbMF0pOworCQkJcHJpbnRrKCJSY3YgV2NpZCglZCkgQWRkQkFSZXFcbiIsIEVsZW0tPldjaWQpOworCQkJaWYgKEJBUmVjU2Vzc2lvbkFkZChwQWQsICZwQWQtPk1hY1RhYi5Db250ZW50W0VsZW0tPldjaWRdLCBwQWRkcmVxRnJhbWUpKQorCQkJCVN0YXR1cyA9IDA7CisJCQllbHNlCisJCQkJU3RhdHVzID0gMzg7IC8vIG1vcmUgcGFyYW1ldGVycyBoYXZlIGludmFsaWQgdmFsdWVzCisJCX0KKwkJZWxzZQorCQl7CisJCQlTdGF0dXMgPSAzNzsgLy8gdGhlIHJlcXVlc3QgaGFzIGJlZW4gZGVjbGluZWQuCisJCX0KKwl9CisKKwlpZiAocEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5WYWxpZEFzQ0xJKQorCQlBU1NFUlQocEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5Tc3QgPT0gU1NUX0FTU09DKTsKKworCXBBZGRyZXFGcmFtZSA9IChQRlJBTUVfQUREQkFfUkVRKSgmRWxlbS0+TXNnWzBdKTsKKwkvLyAyLiBBbHdheXMgc2VuZCBiYWNrIEFEREJBIFJlc3BvbnNlCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsJIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBQ1RJT04gLSBQZWVyQkFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQlyZXR1cm47CisJfQorCisJTmRpc1plcm9NZW1vcnkoJkFERGZyYW1lLCBzaXplb2YoRlJBTUVfQUREQkFfUlNQKSk7CisJLy8gMi0xLiBQcmVwYXJlIEFEREJBIFJlc3BvbnNlIGZyYW1lLgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAoQURIT0NfT04ocEFkKSkKKwkJCUFjdEhlYWRlckluaXQocEFkLCAmQUREZnJhbWUuSGRyLCBwQWRkciwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQllbHNlCisJCQlBY3RIZWFkZXJJbml0KHBBZCwgJkFERGZyYW1lLkhkciwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBBZGRyKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJQUREZnJhbWUuQ2F0ZWdvcnkgPSBDQVRFR09SWV9CQTsKKwlBRERmcmFtZS5BY3Rpb24gPSBBRERCQV9SRVNQOworCUFERGZyYW1lLlRva2VuID0gcEFkZHJlcUZyYW1lLT5Ub2tlbjsKKwkvLyBXaGF0IGlzIHRoZSBTdGF0dXMgY29kZT8/ICBuZWVkIHRvIGNoZWNrLgorCUFERGZyYW1lLlN0YXR1c0NvZGUgPSBTdGF0dXM7CisJQUREZnJhbWUuQmFQYXJtLkJBUG9saWN5ID0gSU1NRURfQkE7CisJQUREZnJhbWUuQmFQYXJtLkFNU0RVU3VwcG9ydGVkID0gMDsKKwlBRERmcmFtZS5CYVBhcm0uVElEID0gcEFkZHJlcUZyYW1lLT5CYVBhcm0uVElEOworCUFERGZyYW1lLkJhUGFybS5CdWZTaXplID0gbWluKCgoVUNIQVIpcEFkZHJlcUZyYW1lLT5CYVBhcm0uQnVmU2l6ZSksIChVQ0hBUilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0KTsKKwlpZiAoQUREZnJhbWUuQmFQYXJtLkJ1ZlNpemUgPT0gMCkKKwl7CisJCUFERGZyYW1lLkJhUGFybS5CdWZTaXplID0gNjQ7CisJfQorCUFERGZyYW1lLlRpbWVPdXRWYWx1ZSA9IDA7IC8vcEFkZHJlcUZyYW1lLT5UaW1lT3V0VmFsdWU7CisKKwkqKFVTSE9SVCAqKSgmQUREZnJhbWUuQmFQYXJtKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZBRERmcmFtZS5CYVBhcm0pKTsKKwlBRERmcmFtZS5TdGF0dXNDb2RlID0gY3B1MmxlMTYoQUREZnJhbWUuU3RhdHVzQ29kZSk7CisJQUREZnJhbWUuVGltZU91dFZhbHVlID0gY3B1MmxlMTYoQUREZnJhbWUuVGltZU91dFZhbHVlKTsKKworCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkgIHNpemVvZihGUkFNRV9BRERCQV9SU1ApLCAgJkFERGZyYW1lLAorCQkJICBFTkRfT0ZfQVJHUyk7CisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMoJWQpOiBUSUQoJWQpLCBCdWZTaXplKCVkKSA8PT0gXG4iLCBfX0ZVTkNUSU9OX18sIEVsZW0tPldjaWQsIEFERGZyYW1lLkJhUGFybS5USUQsCisJCQkJCQkJICBBRERmcmFtZS5CYVBhcm0uQnVmU2l6ZSkpOworfQorCisKK1ZPSUQgUGVlckFkZEJBUnNwQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKKworeworCS8vVUNIQVIJCUlkeCwgaTsKKwkvL1BVQ0hBUgkJICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJUEZSQU1FX0FEREJBX1JTUCAgICBwRnJhbWUgPSBOVUxMOworCS8vUEJBX09SSV9FTlRSWQkJcEJBRW50cnk7CisKKwkvL0FEREJBIFJlc3BvbnNlIGZyb20gdW5rbm93biBwZWVyLCBpZ25vcmUgdGhpcy4KKwlpZiAoRWxlbS0+V2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMgPT0+IFdjaWQoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIEVsZW0tPldjaWQpKTsKKworCS8vaGV4X2R1bXAoIlBlZXJBZGRCQVJzcEFjdGlvbigpIiwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4pOworCisJaWYgKFBlZXJBZGRCQVJzcEFjdGlvblNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuKSkKKwl7CisJCXBGcmFtZSA9IChQRlJBTUVfQUREQkFfUlNQKSgmRWxlbS0+TXNnWzBdKTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJcdFx0IFN0YXR1c0NvZGUgPSAlZFxuIiwgcEZyYW1lLT5TdGF0dXNDb2RlKSk7CisJCXN3aXRjaCAocEZyYW1lLT5TdGF0dXNDb2RlKQorCQl7CisJCQljYXNlIDA6CisJCQkJLy8gSSB3YW50IGEgQkFzZXNzaW9uIHdpdGggdGhpcyBwZWVyIGFzIGFuIG9yaWdpbmF0b3IuCisJCQkJQkFPcmlTZXNzaW9uQWRkKHBBZCwgJnBBZC0+TWFjVGFiLkNvbnRlbnRbRWxlbS0+V2NpZF0sIHBGcmFtZSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8vIGNoZWNrIHN0YXR1cyA9PSBVU0VEID8/PworCQkJCUJBT3JpU2Vzc2lvblRlYXJEb3duKHBBZCwgRWxlbS0+V2NpZCwgcEZyYW1lLT5CYVBhcm0uVElELCBUUlVFLCBGQUxTRSk7CisJCQkJYnJlYWs7CisJCX0KKwkJLy8gUmN2IERlY2xpbmUgU3RhdHVzQ29kZQorCQlpZiAoKHBGcmFtZS0+U3RhdHVzQ29kZSA9PSAzNykKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyAgICAgICAgICAgIHx8ICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYgU1RBX1RHTl9XSUZJX09OKHBBZCkgJiYgKHBGcmFtZS0+U3RhdHVzQ29kZSAhPSAwKSkKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICkKKwkJeworCQkJcEFkLT5NYWNUYWIuQ29udGVudFtFbGVtLT5XY2lkXS5CQURlY2xpbmVCaXRtYXAgfD0gMTw8cEZyYW1lLT5CYVBhcm0uVElEOworCQl9CisJfQorfQorCitWT0lEIFBlZXJEZWxCQUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCisKK3sKKwkvL1VDSEFSCQkJCUlkeDsKKwkvL1BVQ0hBUgkJCQlwT3V0QnVmZmVyID0gTlVMTDsKKwlQRlJBTUVfREVMQkFfUkVRICAgIHBEZWxGcmFtZSA9IE5VTEw7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiVzID09PlxuIiwgX19GVU5DVElPTl9fKSk7CisJLy9ERUxCQSBSZXF1ZXN0IGZyb20gdW5rbm93biBwZWVyLCBpZ25vcmUgdGhpcy4KKwlpZiAoUGVlckRlbEJBQWN0aW9uU2FuaXR5KHBBZCwgRWxlbS0+V2NpZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4pKQorCXsKKwkJcERlbEZyYW1lID0gKFBGUkFNRV9ERUxCQV9SRVEpKCZFbGVtLT5Nc2dbMF0pOworCQlpZiAocERlbEZyYW1lLT5EZWxiYVBhcm0uSW5pdGlhdG9yID09IE9SSUdJTkFUT1IpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQkEgLSBQZWVyRGVsQkFBY3Rpb24tLS0tPiBPUklHSU5BVE9SXG4iKSk7CisJCQlCQVJlY1Nlc3Npb25UZWFyRG93bihwQWQsIEVsZW0tPldjaWQsIHBEZWxGcmFtZS0+RGVsYmFQYXJtLlRJRCwgVFJVRSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJBIC0gUGVlckRlbEJBQWN0aW9uLS0tLT4gUkVDSVBJRU5ULCBSZWFzb24gPSAlZFxuIiwgIHBEZWxGcmFtZS0+UmVhc29uQ29kZSkpOworCQkJLy9oZXhfZHVtcCgiRGVsQkEgRnJhbWUiLCBwRGVsRnJhbWUsIEVsZW0tPk1zZ0xlbik7CisJCQlCQU9yaVNlc3Npb25UZWFyRG93bihwQWQsIEVsZW0tPldjaWQsIHBEZWxGcmFtZS0+RGVsYmFQYXJtLlRJRCwgVFJVRSwgRkFMU0UpOworCQl9CisJfQorfQorCisKK0JPT0xFQU4gQ250bEVucXVldWVGb3JSZWN2KAorCQkJCQkJICBJTiBQUlRNUF9BREFQVEVSCQlwQWQsCisJCQkJCQkgIElOIFVMT05HCQkJCVdjaWQsCisJCQkJCQkgIElOIFVMT05HCQkJCU1zZ0xlbiwKKwkJCQkJCSAgSU4gUEZSQU1FX0JBX1JFUQkJcE1zZykKK3sKKwlQRlJBTUVfQkFfUkVRICAgcEZyYW1lID0gcE1zZzsKKwkvL1BSVE1QX1JFT1JERVJCVUYJcEJ1ZmZlcjsKKwkvL1BSVE1QX1JFT1JERVJCVUYJcERtYUJ1ZjsKKwlQQkFfUkVDX0VOVFJZIHBCQUVudHJ5OworCS8vQk9PTEVBTiAJUmVzdWx0OworCVVMT05HICAgSWR4OworCS8vVUNIQVIJTnVtUnhQa3Q7CisJVUNIQVIJVElEOy8vLCBpOworCisJVElEID0gKFVDSEFSKXBGcmFtZS0+QkFSQ29udHJvbC5USUQ7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcygpOiBCQVItV2NpZCglbGQpLCBUaWQgKCVkKVxuIiwgX19GVU5DVElPTl9fLCBXY2lkLCBUSUQpKTsKKwkvL2hleF9kdW1wKCJCQVIiLCAoUENIQVIpIHBGcmFtZSwgTXNnTGVuKTsKKwkvLyBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4KKwkvLyBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvLyBGaXJzdCBjaGVjayB0aGUgc2l6ZSwgaXQgTVVTVCBub3QgZXhjZWVkIHRoZSBtbG1lIHF1ZXVlIHNpemUKKwlpZiAoTXNnTGVuID4gTUdNVF9ETUFfQlVGRkVSX1NJWkUpCisJeworCQlEQkdQUklOVF9FUlIoKCJDbnRsRW5xdWV1ZUZvclJlY3Y6IGZyYW1lIHRvbyBsYXJnZSwgc2l6ZSA9ICVsZCBcbiIsIE1zZ0xlbikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCWVsc2UgaWYgKE1zZ0xlbiAhPSBzaXplb2YoRlJBTUVfQkFfUkVRKSkKKwl7CisJCURCR1BSSU5UX0VSUigoIkNudGxFbnF1ZXVlRm9yUmVjdjogQmxvY2tBY2sgUmVxdWVzdCBmcmFtZSBsZW5ndGggc2l6ZSA9ICVsZCBpbmNvcnJlY3RcbiIsIE1zZ0xlbikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCWVsc2UgaWYgKE1zZ0xlbiAhPSBzaXplb2YoRlJBTUVfQkFfUkVRKSkKKwl7CisJCURCR1BSSU5UX0VSUigoIkNudGxFbnF1ZXVlRm9yUmVjdjogQmxvY2tBY2sgUmVxdWVzdCBmcmFtZSBsZW5ndGggc2l6ZSA9ICVsZCBpbmNvcnJlY3RcbiIsIE1zZ0xlbikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKChXY2lkIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEUpICYmIChUSUQgPCA4KSkKKwkJeworCQkvLyBpZiB0aGlzIHJlY2VpdmluZyBwYWNrZXQgaXMgZnJvbSBTQSB0aGF0IGlzIGluIG91ciBPcmlFbnRyeS4gU2luY2UgV0NJRCA8OSBoYXMgZGlyZWN0IG1hcHBpbmcuIG5vIG5lZWQgc2VhcmNoLgorCQlJZHggPSBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkJBUmVjV2NpZEFycmF5W1RJRF07CisJCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W0lkeF07CisJCX0KKwkJZWxzZQorCQl7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCQVIoJWxkKSA6IFRpZCAoJWQpIC0gJTA0eDolMDR4XG4iLCBXY2lkLCBUSUQsIHBGcmFtZS0+QkFTdGFydGluZ1NlcS5maWVsZC5TdGFydFNlcSwgcEJBRW50cnktPkxhc3RJbmRTZXEgKSk7CisKKwlpZiAoU0VRX1NNQUxMRVIocEJBRW50cnktPkxhc3RJbmRTZXEsIHBGcmFtZS0+QkFTdGFydGluZ1NlcS5maWVsZC5TdGFydFNlcSwgTUFYU0VRKSkKKwl7CisJCS8vcHJpbnRrKCJCQVIgU2VxID0gJXgsIExhc3RJbmRTZXEgPSAleFxuIiwgcEZyYW1lLT5CQVN0YXJ0aW5nU2VxLmZpZWxkLlN0YXJ0U2VxLCBwQkFFbnRyeS0+TGFzdEluZFNlcSk7CisJCWJhX2luZGljYXRlX3Jlb3JkZXJpbmdfbXBkdXNfbGVfc2VxKHBBZCwgcEJBRW50cnksIHBGcmFtZS0+QkFTdGFydGluZ1NlcS5maWVsZC5TdGFydFNlcSk7CisJCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gKHBGcmFtZS0+QkFTdGFydGluZ1NlcS5maWVsZC5TdGFydFNlcSA9PSAwKSA/IE1BWFNFUSA6KHBGcmFtZS0+QkFTdGFydGluZ1NlcS5maWVsZC5TdGFydFNlcSAtMSk7CisJfQorCS8vYmFfcmVmcmVzaF9yZW9yZGVyaW5nX21wZHVzKHBBZCwgcEJBRW50cnkpOworCXJldHVybiBUUlVFOworfQorCisvKgorRGVzY3JpcHRpb24gOiBTZW5kIFBTTVAgQWN0aW9uIGZyYW1lIElmIFBTTVAgbW9kZSBzd2l0Y2hlcy4KKyovCitWT0lEIFNlbmRQU01QQWN0aW9uKAorCQkJCSAgIElOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwkJCQkgICBJTiBVQ0hBUgkJCQlXY2lkLAorCQkJCSAgIElOIFVDSEFSCQkJCVBzbXApCit7CisJUFVDSEFSICAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTICAgICBOU3RhdHVzOworCS8vVUxPTkcgICAgICAgICAgIElkeDsKKwlGUkFNRV9QU01QX0FDVElPTiAgIEZyYW1lOworCVVMT05HICAgICAgICAgICBGcmFtZUxlbjsKKyNpZmRlZiBSVDMweHgKKwlVQ0hBUgkJCWJicGRhdGE9MDsKKwlVSU5UMzIJCQltYWNkYXRhOworI2VuZGlmIC8vIFJUMzB4eCAvLworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsJIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJCQSAtIE1sbWVBRERCQUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCXJldHVybjsKKwl9CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJQWN0SGVhZGVySW5pdChwQWQsICZGcmFtZS5IZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkFkZHIpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJRnJhbWUuQ2F0ZWdvcnkgPSBDQVRFR09SWV9IVDsKKwlGcmFtZS5BY3Rpb24gPSBTTVBTX0FDVElPTjsKKwlzd2l0Y2ggKFBzbXApCisJeworCQljYXNlIE1NUFNfRU5BQkxFOgorI2lmZGVmIFJUMzB4eAorCQkJaWYgKElTX1JUMzA5MChwQWQpKQorCQkJeworCQkJCS8vIGRpc2FibGUgTU1QUyBCQlAgY29udHJvbCByZWdpc3RlcgorCQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJmJicGRhdGEpOworCQkJCWJicGRhdGEgJj0gfigweDA0KTsJLy9iaXQgMgorCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIGJicGRhdGEpOworCisJCQkJLy8gZGlzYWJsZSBNTVBTIE1BQyBjb250cm9sIHJlZ2lzdGVyCisJCQkJUlRNUF9JT19SRUFEMzIocEFkLCAweDEyMTAsICZtYWNkYXRhKTsKKwkJCQltYWNkYXRhICY9IH4oMHgwOSk7CS8vYml0IDAsIDMKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCAweDEyMTAsIG1hY2RhdGEpOworCQkJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJRnJhbWUuUHNtcCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBNTVBTX0RZTkFNSUM6CisjaWZkZWYgUlQzMHh4CisJCQlpZiAoSVNfUlQzMDkwKHBBZCkpCisJCQl7CisJCQkJLy8gZW5hYmxlIE1NUFMgQkJQIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZiYnBkYXRhKTsKKwkJCQliYnBkYXRhIHw9IDB4MDQ7CS8vYml0IDIKKwkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBiYnBkYXRhKTsKKworCQkJCS8vIGVuYWJsZSBNTVBTIE1BQyBjb250cm9sIHJlZ2lzdGVyCisJCQkJUlRNUF9JT19SRUFEMzIocEFkLCAweDEyMTAsICZtYWNkYXRhKTsKKwkJCQltYWNkYXRhIHw9IDB4MDk7CS8vYml0IDAsIDMKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCAweDEyMTAsIG1hY2RhdGEpOworCQkJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJRnJhbWUuUHNtcCA9IDM7CisJCQlicmVhazsKKwkJY2FzZSBNTVBTX1NUQVRJQzoKKyNpZmRlZiBSVDMweHgKKwkJCWlmIChJU19SVDMwOTAocEFkKSkKKwkJCXsKKwkJCQkvLyBlbmFibGUgTU1QUyBCQlAgY29udHJvbCByZWdpc3RlcgorCQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJmJicGRhdGEpOworCQkJCWJicGRhdGEgfD0gMHgwNDsJLy9iaXQgMgorCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIGJicGRhdGEpOworCisJCQkJLy8gZW5hYmxlIE1NUFMgTUFDIGNvbnRyb2wgcmVnaXN0ZXIKKwkJCQlSVE1QX0lPX1JFQUQzMihwQWQsIDB4MTIxMCwgJm1hY2RhdGEpOworCQkJCW1hY2RhdGEgfD0gMHgwOTsJLy9iaXQgMCwgMworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIDB4MTIxMCwgbWFjZGF0YSk7CisJCQl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJCQlGcmFtZS5Qc21wID0gMTsKKwkJCWJyZWFrOworCX0KKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgICAgICZGcmFtZUxlbiwKKwkJCQkJICBzaXplb2YoRlJBTUVfUFNNUF9BQ1RJT04pLCAgICAgICZGcmFtZSwKKwkJCQkJICBFTkRfT0ZfQVJHUyk7CisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiSFQgLSBTZW5kUFNNUEFjdGlvbiggJWQgKSAgXG4iLCBGcmFtZS5Qc21wKSk7Cit9CisKKworI2RlZmluZSBSQURJT19NRUFTVVJFTUVOVF9SRVFVRVNUX0FDVElPTgkwCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRAoreworCVVDSEFSCVJlZ3VsYXRvcnlDbGFzczsKKwlVQ0hBUglDaGFubmVsTnVtYmVyOworCVVTSE9SVAlSYW5kb21JbnRlcnZhbDsKKwlVU0hPUlQJTWVhc3VyZW1lbnREdXJhdGlvbjsKKwlVQ0hBUglNZWFzdXJlbWVudE1vZGU7CisJVUNIQVIgICBCU1NJRFtNQUNfQUREUl9MRU5dOworCVVDSEFSCVJlcG9ydGluZ0NvbmRpdGlvbjsKKwlVQ0hBUglUaHJlc2hvbGQ7CisJVUNIQVIgICBTU0lESUVbMl07CQkJLy8gMiBieXRlCit9IEJFQUNPTl9SRVFVRVNUOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQKK3sKKwlVQ0hBUglJRDsKKwlVQ0hBUglMZW5ndGg7CisJVUNIQVIJVG9rZW47CisJVUNIQVIJUmVxdWVzdE1vZGU7CisJVUNIQVIJVHlwZTsKK30gTUVBU1VSRU1FTlRfUkVROworCisKKworCit2b2lkIGNvbnZlcnRfcmVvcmRlcmluZ19wYWNrZXRfdG9fcHJlQU1TRFVfb3JfODAyXzNfcGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4gIFVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJUE5ESVNfUEFDS0VUCXBSeFBrdDsKKwlVQ0hBUgkJCUhlYWRlcjgwMl8zW0xFTkdUSF84MDJfM107CisKKwkvLyAxLiBnZXQgODAyLjMgSGVhZGVyCisJLy8gMi4gcmVtb3ZlIExMQworCS8vIAkJYS4gcG9pbnRlciBwUnhCbGstPnBEYXRhIHRvIHBheWxvYWQKKwkvLyAgICAgIGIuIG1vZGlmeSBwUnhCbGstPkRhdGFTaXplCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlSVE1QXzgwMl8xMV9SRU1PVkVfTExDX0FORF9DT05WRVJUX1RPXzgwMl8zKHBSeEJsaywgSGVhZGVyODAyXzMpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJQVNTRVJUKHBSeEJsay0+cFJ4UGFja2V0KTsKKwlwUnhQa3QgPSBSVFBLVF9UT19PU1BLVChwUnhCbGstPnBSeFBhY2tldCk7CisKKwlSVFBLVF9UT19PU1BLVChwUnhQa3QpLT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBGcm9tV2hpY2hCU1NJRCk7CisJUlRQS1RfVE9fT1NQS1QocFJ4UGt0KS0+ZGF0YSA9IHBSeEJsay0+cERhdGE7CisJUlRQS1RfVE9fT1NQS1QocFJ4UGt0KS0+bGVuID0gcFJ4QmxrLT5EYXRhU2l6ZTsKKwlSVFBLVF9UT19PU1BLVChwUnhQa3QpLT50YWlsID0gUlRQS1RfVE9fT1NQS1QocFJ4UGt0KS0+ZGF0YSArIFJUUEtUX1RPX09TUEtUKHBSeFBrdCktPmxlbjsKKworCS8vCisJLy8gY29weSA4MDIuMyBoZWFkZXIsIGlmIG5lY2Vzc2FyeQorCS8vCisJaWYgKCFSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FNU0RVKSkKKwl7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworI2lmZGVmIExJTlVYCisJCQlOZGlzTW92ZU1lbW9yeShza2JfcHVzaChwUnhQa3QsIExFTkdUSF84MDJfMyksIEhlYWRlcjgwMl8zLCBMRU5HVEhfODAyXzMpOworI2VuZGlmCisjaWZkZWYgVUNPUworCQkJTmRpc01vdmVNZW1vcnkobmV0X3BrdF9wdXNoKHBSeFBrdCwgTEVOR1RIXzgwMl8zKSwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMyk7CisjZW5kaWYKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KK30KKworCisjZGVmaW5lIElORElDQVRFX0xFR0FDWV9PUl9BTVNEVShfcEFkLCBfcFJ4QmxrLCBfZnJvbVdoaWNoQlNTSUQpCQlcCisJZG8JCQkJCQkJCQkJCQkJCQkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJCQlcCisgICAgCWlmIChSWF9CTEtfVEVTVF9GTEFHKF9wUnhCbGssIGZSWF9BTVNEVSkpCQkJCQkJXAorICAgIAl7CQkJCQkJCQkJCQkJCQkJCVwKKyAgICAJCUluZGljYXRlX0FNU0RVX1BhY2tldChfcEFkLCBfcFJ4QmxrLCBfZnJvbVdoaWNoQlNTSUQpOwkJXAorICAgIAl9CQkJCQkJCQkJCQkJCQkJCVwKKwkJZWxzZSBpZiAoUlhfQkxLX1RFU1RfRkxBRyhfcFJ4QmxrLCBmUlhfRUFQKSkJCQkJCVwKKwkJewkJCQkJCQkJCQkJCQkJCQlcCisJCQlJbmRpY2F0ZV9FQVBPTF9QYWNrZXQoX3BBZCwgX3BSeEJsaywgX2Zyb21XaGljaEJTU0lEKTsJCVwKKwkJfQkJCQkJCQkJCQkJCQkJCQlcCisgICAgCWVsc2UJCQkJCQkJCQkJCQkJCQlcCisgICAgCXsJCQkJCQkJCQkJCQkJCQkJXAorICAgIAkJSW5kaWNhdGVfTGVnYWN5X1BhY2tldChfcEFkLCBfcFJ4QmxrLCBfZnJvbVdoaWNoQlNTSUQpOwkJXAorICAgIAl9CQkJCQkJCQkJCQkJCQkJCVwKKwl9IHdoaWxlICgwKTsKKworCisKK3N0YXRpYyBWT0lEIGJhX2VucXVldWVfcmVvcmRlcmluZ19wYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUEJBX1JFQ19FTlRSWQlwQkFFbnRyeSwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdSAqbXBkdV9ibGs7CisJVUlOVDE2CVNlcXVlbmNlID0gKFVJTlQxNikgcFJ4QmxrLT5wSGVhZGVyLT5TZXF1ZW5jZTsKKworCW1wZHVfYmxrID0gYmFfbXBkdV9ibGtfYWxsb2MocEFkKTsKKwlpZiAobXBkdV9ibGsgIT0gTlVMTCkKKwl7CisJCS8vIFdyaXRlIFJ4RCBidWZmZXIgYWRkcmVzcyAmIGFsbG9jYXRlZCBidWZmZXIgbGVuZ3RoCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBCQUVudHJ5LT5SeFJlUmluZ0xvY2spOworCisJCW1wZHVfYmxrLT5TZXF1ZW5jZSA9IFNlcXVlbmNlOworCisJCW1wZHVfYmxrLT5iQU1TRFUgPSBSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FNU0RVKTsKKworCQljb252ZXJ0X3Jlb3JkZXJpbmdfcGFja2V0X3RvX3ByZUFNU0RVX29yXzgwMl8zX3BhY2tldChwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCisJCVNUQVRTX0lOQ19SWF9QQUNLRVRTKHBBZCwgRnJvbVdoaWNoQlNTSUQpOworCisgICAgICAgIC8vCisJCS8vIGl0IGlzIG5lY2Vzc2FyeSBmb3IgcmVvcmRlcmluZyBwYWNrZXQgdG8gcmVjb3JkCisJCS8vIHdoaWNoIEJTUyBpdCBjb21lIGZyb20KKwkJLy8KKwkJUlRNUF9TRVRfUEFDS0VUX0lGKHBSeEJsay0+cFJ4UGFja2V0LCBGcm9tV2hpY2hCU1NJRCk7CisKKwkJbXBkdV9ibGstPnBQYWNrZXQgPSBwUnhCbGstPnBSeFBhY2tldDsKKworCQlpZiAoYmFfcmVvcmRlcmluZ19tcGR1X2luc2VydHNvcnRlZCgmcEJBRW50cnktPmxpc3QsIG1wZHVfYmxrKSA9PSBGQUxTRSkKKwkJeworCQkJLy8gaGFkIGJlZW4gYWxyZWFkeSB3aXRoaW4gcmVvcmRlcmluZyBsaXN0CisJCQkvLyBkb24ndCBpbmRpY2F0ZQorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBORElTX1NUQVRVU19TVUNDRVNTKTsKKwkJCWJhX21wZHVfYmxrX2ZyZWUocEFkLCBtcGR1X2Jsayk7CisJCX0KKworCQlBU1NFUlQoKDA8PSBwQkFFbnRyeS0+bGlzdC5xbGVuKSAgJiYgKHBCQUVudHJ5LT5saXN0LnFsZW4gPD0gcEJBRW50cnktPkJBV2luU2l6ZSkpOworCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQkFFbnRyeS0+UnhSZVJpbmdMb2NrKTsKKwl9CisJZWxzZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICAoIiEhISAoJWQpIENhbid0IGFsbG9jYXRlIHJlb3JkZXJpbmcgbXBkdSBibGtcbiIsCisJCQkJCQkJCSAgIHBCQUVudHJ5LT5saXN0LnFsZW4pKTsKKwkJLyoKKwkJICogZmx1c2ggYWxsIHBlbmRpbmcgcmVvcmRlcmluZyBtcGR1cworCQkgKiBhbmQgcmVjZXZpbmcgbXBkdSB0byB1cHBlciBsYXllcgorCQkgKiBtYWtlIHRjcC9pcCB0byB0YWtlIGNhcmUgcmVvcmRlcmluZyBtZWNoYW5pc20KKwkJICovCisJCS8vYmFfcmVmcmVzaF9yZW9yZGVyaW5nX21wZHVzKHBBZCwgcEJBRW50cnkpOworCQliYV9pbmRpY2F0ZV9yZW9yZGVyaW5nX21wZHVzX2xlX3NlcShwQWQsIHBCQUVudHJ5LCBTZXF1ZW5jZSk7CisKKwkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBTZXF1ZW5jZTsKKwkJSU5ESUNBVEVfTEVHQUNZX09SX0FNU0RVKHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJfQorfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJSW5kaWNhdGUgdGhpcyBwYWNrZXQgdG8gdXBwZXIgbGF5ZXIgb3IgcHV0IGl0IGludG8gcmVvcmRlcmluZyBidWZmZXIKKworCVBhcmFtZXRyczoKKwkJcFJ4QmxrICAgICAgICAgOiBjYXJyeSBuZWNlc3NhcnkgcGFja2V0IGluZm8gODAyLjExIGZvcm1hdAorCQlGcm9tV2hpY2hCU1NJRCA6IHRoZSBwYWNrZXQgcmVjZWl2ZWQgZnJvbSB3aGljaCBCU1MKKworCVJldHVybgk6CisJCQkgIG5vbmUKKworCU5vdGUgICAgOgorCSAgICAgICAgICB0aGUgcGFja2V0IHF1ZXVlZCBpbnRvIHJlb3JkZXJpbmcgYnVmZmVyIG5lZWQgdG8gY292ZXIgdG8gODAyLjMgZm9ybWF0CisJCQkgIG9yIHByZV9BTVNEVSBmb3JtYXQKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKK1ZPSUQgSW5kaWNhdGVfQU1QRFVfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlVU0hPUlQJCQkJSWR4OworCVBCQV9SRUNfRU5UUlkJCXBCQUVudHJ5ID0gTlVMTDsKKwlVSU5UMTYJCQkJU2VxdWVuY2UgPSBwUnhCbGstPnBIZWFkZXItPlNlcXVlbmNlOworCVVMT05HCQkJCU5vdzMyOworCVVDSEFSCQkJCVdjaWQgPSBwUnhCbGstPnBSeFdJLT5XaXJlbGVzc0NsaUlEOworCVVDSEFSCQkJCVRJRCA9IHBSeEJsay0+cFJ4V0ktPlRJRDsKKworCisJaWYgKCFSWF9CTEtfVEVTVF9GTEFHKHBSeEJsaywgZlJYX0FNU0RVKSAmJiAgKHBSeEJsay0+RGF0YVNpemUgPiBNQVhfUlhfUEtUX0xFTikpCisJeworCQkvLyByZWxlYXNlIHBhY2tldAorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlyZXR1cm47CisJfQorCisJaWYgKFdjaWQgPCBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwl7CisJCUlkeCA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uQkFSZWNXY2lkQXJyYXlbVElEXTsKKwkJaWYgKElkeCA9PSAwKQorCQl7CisJCQkvKiBSZWMgQkEgU2Vzc2lvbiBoYWQgYmVlbiB0b3JuIGRvd24gKi8KKwkJCUlORElDQVRFX0xFR0FDWV9PUl9BTVNEVShwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCQkJcmV0dXJuOworCQl9CisJCXBCQUVudHJ5ID0gJnBBZC0+QkFUYWJsZS5CQVJlY0VudHJ5W0lkeF07CisJfQorCWVsc2UKKwl7CisJCS8vIGltcG9zc2libGUgISEhCisJCUFTU0VSVCgwKTsKKwkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJcmV0dXJuOworCX0KKworCUFTU0VSVChwQkFFbnRyeSk7CisKKwkvLyB1cGRhdGUgbGFzdCByeCB0aW1lCisJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93MzIpOworCisJcEJBRW50cnktPnJjdlNlcSA9IFNlcXVlbmNlOworCisKKwliYV9mbHVzaF9yZW9yZGVyaW5nX3RpbWVvdXRfbXBkdXMocEFkLCBwQkFFbnRyeSwgTm93MzIpOworCXBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lciA9IE5vdzMyOworCisJLy8KKwkvLyBSZXNldCBMYXN0IEluZGljYXRlIFNlcXVlbmNlCisJLy8KKwlpZiAocEJBRW50cnktPkxhc3RJbmRTZXEgPT0gUkVTRVRfUkNWX1NFUSkKKwl7CisJCUFTU0VSVCgocEJBRW50cnktPmxpc3QucWxlbiA9PSAwKSAmJiAocEJBRW50cnktPmxpc3QubmV4dCA9PSBOVUxMKSk7CisKKwkJLy8gcmVzZXQgcmN2IHNlcXVlbmNlIG9mIEJBIHNlc3Npb24KKwkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBTZXF1ZW5jZTsKKwkJcEJBRW50cnktPkxhc3RJbmRTZXFBdFRpbWVyID0gTm93MzI7CisJCUlORElDQVRFX0xFR0FDWV9PUl9BTVNEVShwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCQlyZXR1cm47CisJfQorCisKKwkvLworCS8vIEkuIENoZWNrIGlmIGluIG9yZGVyLgorCS8vCisJaWYgKFNFUV9TVEVQT05FKFNlcXVlbmNlLCBwQkFFbnRyeS0+TGFzdEluZFNlcSwgTUFYU0VRKSkKKwl7CisJCVVTSE9SVCAgTGFzdEluZFNlcTsKKworCQlwQkFFbnRyeS0+TGFzdEluZFNlcSA9IFNlcXVlbmNlOworCQlJTkRJQ0FURV9MRUdBQ1lfT1JfQU1TRFUocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKyAJCUxhc3RJbmRTZXEgPSBiYV9pbmRpY2F0ZV9yZW9yZGVyaW5nX21wZHVzX2luX29yZGVyKHBBZCwgcEJBRW50cnksIHBCQUVudHJ5LT5MYXN0SW5kU2VxKTsKKwkJaWYgKExhc3RJbmRTZXEgIT0gUkVTRVRfUkNWX1NFUSkKKwkJeworCQkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBMYXN0SW5kU2VxOworCQl9CisJCXBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lciA9IE5vdzMyOworCX0KKwkvLworCS8vIElJLiBEcm9wIER1cGxpY2F0ZWQgUGFja2V0CisJLy8KKwllbHNlIGlmIChTZXF1ZW5jZSA9PSBwQkFFbnRyeS0+TGFzdEluZFNlcSkKKwl7CisKKwkJLy8gZHJvcCBhbmQgcmVsZWFzZSBwYWNrZXQKKwkJcEJBRW50cnktPm5Ecm9wUGFja2V0Kys7CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJfQorCS8vCisJLy8gSUlJLiBEcm9wIE9sZCBSZWNlaXZlZCBQYWNrZXQKKwkvLworCWVsc2UgaWYgKFNFUV9TTUFMTEVSKFNlcXVlbmNlLCBwQkFFbnRyeS0+TGFzdEluZFNlcSwgTUFYU0VRKSkKKwl7CisKKwkJLy8gZHJvcCBhbmQgcmVsZWFzZSBwYWNrZXQKKwkJcEJBRW50cnktPm5Ecm9wUGFja2V0Kys7CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJfQorCS8vCisJLy8gSVYuIFJlY2VpdmUgU2VxdWVuY2Ugd2l0aGluIFdpbmRvdyBTaXplCisJLy8KKwllbHNlIGlmIChTRVFfU01BTExFUihTZXF1ZW5jZSwgKCgocEJBRW50cnktPkxhc3RJbmRTZXErcEJBRW50cnktPkJBV2luU2l6ZSsxKSkgJiBNQVhTRVEpLCBNQVhTRVEpKQorCXsKKwkJYmFfZW5xdWV1ZV9yZW9yZGVyaW5nX3BhY2tldChwQWQsIHBCQUVudHJ5LCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwl9CisJLy8KKwkvLyBWLiBSZWNlaXZlIHNlcSBzdXJwYXNzZXMgV2luKGxhc3RzZXEgKyBuTVNEVSkuIFNvIHJlZnJlc2ggYWxsIHJlb3JkZXIgYnVmZmVyCisJLy8KKwllbHNlCisJeworCQlMT05HIFdpblN0YXJ0U2VxLCBUbXBTZXE7CisKKworCQlUbXBTZXEgPSBTZXF1ZW5jZSAtIChwQkFFbnRyeS0+QkFXaW5TaXplKSAtMTsKKwkJaWYgKFRtcFNlcSA8IDApCisJCXsKKwkJCVRtcFNlcSA9IChNQVhTRVErMSkgKyBUbXBTZXE7CisJCX0KKwkJV2luU3RhcnRTZXEgPSAoVG1wU2VxKzEpICYgTUFYU0VROworCQliYV9pbmRpY2F0ZV9yZW9yZGVyaW5nX21wZHVzX2xlX3NlcShwQWQsIHBCQUVudHJ5LCBXaW5TdGFydFNlcSk7CisJCXBCQUVudHJ5LT5MYXN0SW5kU2VxID0gV2luU3RhcnRTZXE7IC8vVG1wU2VxOworCisJCXBCQUVudHJ5LT5MYXN0SW5kU2VxQXRUaW1lciA9IE5vdzMyOworCisJCWJhX2VucXVldWVfcmVvcmRlcmluZ19wYWNrZXQocEFkLCBwQkFFbnRyeSwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisKKwkJVG1wU2VxID0gYmFfaW5kaWNhdGVfcmVvcmRlcmluZ19tcGR1c19pbl9vcmRlcihwQWQsIHBCQUVudHJ5LCBwQkFFbnRyeS0+TGFzdEluZFNlcSk7CisJCWlmIChUbXBTZXEgIT0gUkVTRVRfUkNWX1NFUSkKKwkJeworCQkJcEJBRW50cnktPkxhc3RJbmRTZXEgPSBUbXBTZXE7CisJCX0KKwl9Cit9CisKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX2RhdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2NtbV9kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVmOTJiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2NtbV9kYXRhLmMKQEAgLTAsMCArMSwyODI3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyovCisKKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworI2RlZmluZSBNQVhfVFhfSU5fVEJUVAkJKDE2KQorCisKK1VDSEFSCVNOQVBfODAyXzFIW10gPSB7MHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH07CitVQ0hBUglTTkFQX0JSSURHRV9UVU5ORUxbXSA9IHsweGFhLCAweGFhLCAweDAzLCAweDAwLCAweDAwLCAweGY4fTsKKy8vIEFkZCBDaXNjbyBBaXJvbmV0IFNOQVAgaGVhZGUgZm9yIENDWDIgc3VwcG9ydAorVUNIQVIJU05BUF9BSVJPTkVUW10gPSB7MHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NiwgMHgwMCwgMHgwMH07CitVQ0hBUglDS0lQX0xMQ19TTkFQW10gPSB7MHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NiwgMHgwMCwgMHgwMn07CitVQ0hBUglFQVBPTF9MTENfU05BUFtdPSB7MHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4ZX07CitVQ0hBUglFQVBPTFtdID0gezB4ODgsIDB4OGV9OworVUNIQVIgICBUUElEW10gPSB7MHg4MSwgMHgwMH07IC8qIFZMQU4gcmVsYXRlZCAqLworCitVQ0hBUglJUFhbXSA9IHsweDgxLCAweDM3fTsKK1VDSEFSCUFQUExFX1RBTEtbXSA9IHsweDgwLCAweGYzfTsKK1VDSEFSCVJhdGVJZFRvUGxjcFNpZ25hbFsxMl0gPSB7CisJIDAsIC8qIFJBVEVfMSAqLwkxLCAvKiBSQVRFXzIgKi8gCTIsIC8qIFJBVEVfNV81ICovCTMsIC8qIFJBVEVfMTEgKi8JLy8gc2VlIEJCUCBzcGVjCisJMTEsIC8qIFJBVEVfNiAqLyAgIDE1LCAvKiBSQVRFXzkgKi8gICAgMTAsIC8qIFJBVEVfMTIgKi8gICAxNCwgLyogUkFURV8xOCAqLwkvLyBzZWUgSUVFRTgwMi4xMWEtMTk5OSBwLjE0CisJIDksIC8qIFJBVEVfMjQgKi8gIDEzLCAvKiBSQVRFXzM2ICovCTgsIC8qIFJBVEVfNDggKi8gICAxMiAgLyogUkFURV81NCAqLyB9OyAvLyBzZWUgSUVFRTgwMi4xMWEtMTk5OSBwLjE0CisKK1VDSEFSCSBPZmRtU2lnbmFsVG9SYXRlSWRbMTZdID0geworCVJBVEVfNTQsICBSQVRFXzU0LAlSQVRFXzU0LCAgUkFURV81NCwJLy8gT0ZETSBQTENQIFNpZ25hbCA9IDAsICAxLCAgMiwgIDMgcmVzcGVjdGl2ZWx5CisJUkFURV81NCwgIFJBVEVfNTQsCVJBVEVfNTQsICBSQVRFXzU0LAkvLyBPRkRNIFBMQ1AgU2lnbmFsID0gNCwgIDUsICA2LCAgNyByZXNwZWN0aXZlbHkKKwlSQVRFXzQ4LCAgUkFURV8yNCwJUkFURV8xMiwgIFJBVEVfNiwJLy8gT0ZETSBQTENQIFNpZ25hbCA9IDgsICA5LCAgMTAsIDExIHJlc3BlY3RpdmVseQorCVJBVEVfNTQsICBSQVRFXzM2LAlSQVRFXzE4LCAgUkFURV85LAkvLyBPRkRNIFBMQ1AgU2lnbmFsID0gMTIsIDEzLCAxNCwgMTUgcmVzcGVjdGl2ZWx5Cit9OworCitVQ0hBUgkgT2ZkbVJhdGVUb1J4d2lNQ1NbMTJdID0geworCTAsICAwLAkwLCAgMCwKKwkwLCAgMSwJMiwgIDMsCS8vIE9GRE0gcmF0ZSA2LDksMTIsMTggPSByeHdpIG1jcyAwLDEsMiwzCisJNCwgIDUsCTYsICA3LAkvLyBPRkRNIHJhdGUgMjQsMzYsNDgsNTQgPSByeHdpIG1jcyA0LDUsNiw3Cit9OworVUNIQVIJIFJ4d2lNQ1NUb09mZG1SYXRlWzEyXSA9IHsKKwlSQVRFXzYsICBSQVRFXzksCVJBVEVfMTIsICBSQVRFXzE4LAorCVJBVEVfMjQsICBSQVRFXzM2LAlSQVRFXzQ4LCAgUkFURV81NCwJLy8gT0ZETSByYXRlIDYsOSwxMiwxOCA9IHJ4d2kgbWNzIDAsMSwyLDMKKwk0LCAgNSwJNiwgIDcsCS8vIE9GRE0gcmF0ZSAyNCwzNiw0OCw1NCA9IHJ4d2kgbWNzIDQsNSw2LDcKK307CisKK2NoYXIqICAgTUNTVG9NYnBzW10gPSB7IjFNYnBzIiwiMk1icHMiLCI1LjVNYnBzIiwiMTFNYnBzIiwiMDZNYnBzIiwiMDlNYnBzIiwiMTJNYnBzIiwiMThNYnBzIiwiMjRNYnBzIiwiMzZNYnBzIiwiNDhNYnBzIiwiNTRNYnBzIiwiTU0tMCIsIk1NLTEiLCJNTS0yIiwiTU0tMyIsIk1NLTQiLCJNTS01IiwiTU0tNiIsIk1NLTciLCJNTS04IiwiTU0tOSIsIk1NLTEwIiwiTU0tMTEiLCJNTS0xMiIsIk1NLTEzIiwiTU0tMTQiLCJNTS0xNSIsIk1NLTMyIiwiZWUxIiwiZWUyIiwiZWUzIn07CisKK1VDSEFSIGRlZmF1bHRfY3dtaW5bXT17Q1dfTUlOX0lOX0JJVFMsIENXX01JTl9JTl9CSVRTLCBDV19NSU5fSU5fQklUUy0xLCBDV19NSU5fSU5fQklUUy0yfTsKKy8vVUNIQVIgZGVmYXVsdF9jd21heFtdPXtDV19NQVhfSU5fQklUUywgQ1dfTUFYX0lOX0JJVFMsIENXX01JTl9JTl9CSVRTLCBDV19NSU5fSU5fQklUUy0xfTsKK1VDSEFSIGRlZmF1bHRfc3RhX2FpZnNuW109ezMsNywyLDJ9OworCitVQ0hBUiBNYXBVc2VyUHJpb3JpdHlUb0FjY2Vzc0NhdGVnb3J5WzhdID0ge1FJRF9BQ19CRSwgUUlEX0FDX0JLLCBRSURfQUNfQkssIFFJRF9BQ19CRSwgUUlEX0FDX1ZJLCBRSURfQUNfVkksIFFJRF9BQ19WTywgUUlEX0FDX1ZPfTsKKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQVBJIGZvciBNTE1FIHRvIHRyYW5zbWl0IG1hbmFnZW1lbnQgZnJhbWUgdG8gQVAgKEJTUyBNb2RlKQorCW9yIHN0YXRpb24gKElCU1MgTW9kZSkKKworCUFyZ3VtZW50czoKKwkJcEFkIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcERhdGEJCVBvaW50ZXIgdG8gdGhlIG91dGdvaW5nIDgwMi4xMSBmcmFtZQorCQlMZW5ndGgJCVNpemUgb2Ygb3V0Z29pbmcgbWFuYWdlbWVudCBmcmFtZQorCisJUmV0dXJuIFZhbHVlOgorCQlORElTX1NUQVRVU19GQUlMVVJFCisJCU5ESVNfU1RBVFVTX1BFTkRJTkcKKwkJTkRJU19TVEFUVVNfU1VDQ0VTUworCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUyBNaW5pcG9ydE1NUmVxdWVzdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVF1ZUlkeCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVSU5UCQkJTGVuZ3RoKQoreworCVBORElTX1BBQ0tFVAlwUGFja2V0OworCU5ESVNfU1RBVFVTICAJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwlVTE9ORwkgCQlGcmVlTnVtOworCVVDSEFSCQkJSXJxU3RhdGU7CisJVUNIQVIJCQlydG1wSHdIZHJbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOyAvL1JUTVBfSFdfSERSX0xFTl07CisKKwlBU1NFUlQoTGVuZ3RoIDw9IE1HTVRfRE1BX0JVRkZFUl9TSVpFKTsKKworCVF1ZUlkeD0zOworCisJLy8gMjg2MEMgdXNlIFR4IFJpbmcKKworCUlycVN0YXRlID0gcEFkLT5pcnFfZGlzYWJsZWQ7CisKKwlkbworCXsKKwkJLy8gUmVzZXQgaXMgaW4gcHJvZ3Jlc3MsIHN0b3AgaW1tZWRpYXRlbHkKKwkJaWYgKCBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpIHx8CisJCQkgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpfHwKKwkJCSAhUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1NUQVJUX1VQKSkKKwkJeworCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gQ2hlY2sgRnJlZSBwcmlvcml0eSBxdWV1ZQorCQkvLyBTaW5jZSB3ZSB1c2UgUEJGIFF1ZXVlMiBmb3IgbWFuYWdlbWVudCBmcmFtZS4gIEl0cyBjb3JyZXNwb25kaW5nIERNQSByaW5nIHNob3VsZCBiZSB1c2luZyBUeFJpbmcuCisKKwkJLy8gMjg2MEMgdXNlIFR4IFJpbmcKKwkJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQorCQl7CisJCQlGcmVlTnVtID0gR0VUX1RYUklOR19GUkVFTk8ocEFkLCBRdWVJZHgpOworCQl9CisJCWVsc2UKKwkJeworCQkJRnJlZU51bSA9IEdFVF9NR01UUklOR19GUkVFTk8ocEFkKTsKKwkJfQorCisJCWlmICgoRnJlZU51bSA+IDApKQorCQl7CisJCQkvLyBXZSBuZWVkIHRvIHJlc2VydmUgc3BhY2UgZm9yIHJ0bXAgaGFyZHdhcmUgaGVhZGVyLiBpLmUuLCBUeFdJIGZvciBSVDI4NjAgYW5kIFR4SW5mbytUeFdJIGZvciBSVDI4NzAKKwkJCU5kaXNaZXJvTWVtb3J5KCZydG1wSHdIZHIsIChUWElORk9fU0laRSArIFRYV0lfU0laRSkpOworCQkJU3RhdHVzID0gUlRNUEFsbG9jYXRlTmRpc1BhY2tldChwQWQsICZwUGFja2V0LCAoUFVDSEFSKSZydG1wSHdIZHIsIChUWElORk9fU0laRSArIFRYV0lfU0laRSksIHBEYXRhLCBMZW5ndGgpOworCQkJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiTWluaXBvcnRNTVJlcXVlc3QgKGVycm9yOjogY2FuJ3QgYWxsb2NhdGUgTkRJUyBQQUNLRVQpXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8vcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJCS8vcEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPSBSQVRFXzI7CisKKworCQkJU3RhdHVzID0gTWxtZUhhcmRUcmFuc21pdChwQWQsIFF1ZUlkeCwgcFBhY2tldCk7CisJCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQkJUlRNUEZyZWVOZGlzUGFja2V0KHBBZCwgcFBhY2tldCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk1nbXRSaW5nRnVsbENvdW50Kys7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJRaWR4KCVkKSwgbm90IGVub3VnaCBzcGFjZSBpbiBNZ210UmluZywgTWdtdFJpbmdGdWxsQ291bnQ9JWxkIVxuIiwKKwkJCQkJCQkJCQlRdWVJZHgsIHBBZC0+UmFsaW5rQ291bnRlcnMuTWdtdFJpbmdGdWxsQ291bnQpKTsKKwkJfQorCisJfSB3aGlsZSAoRkFMU0UpOworCisKKwlyZXR1cm4gU3RhdHVzOworfQorCisKKworTkRJU19TVEFUVVMgTWxtZURhdGFIYXJkVHJhbnNtaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJUXVlSWR4LAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KTsKKworI2RlZmluZSBNQVhfREFUQU1NX1JFVFJZCTMKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlBUEkgZm9yIE1MTUUgdG8gdHJhbnNtaXQgbWFuYWdlbWVudCBmcmFtZSB0byBBUCAoQlNTIE1vZGUpCisJb3Igc3RhdGlvbiAoSUJTUyBNb2RlKQorCisJQXJndW1lbnRzOgorCQlwQWQgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwRGF0YQkJUG9pbnRlciB0byB0aGUgb3V0Z29pbmcgODAyLjExIGZyYW1lCisJCUxlbmd0aAkJU2l6ZSBvZiBvdXRnb2luZyBtYW5hZ2VtZW50IGZyYW1lCisKKwlSZXR1cm4gVmFsdWU6CisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUKKwkJTkRJU19TVEFUVVNfUEVORElORworCQlORElTX1NUQVRVU19TVUNDRVNTCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIE1pbmlwb3J0RGF0YU1NUmVxdWVzdCgKKwkJCQkJCQkgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJCQkJCQkJIElOICBVQ0hBUiAgICAgICAgICAgUXVlSWR4LAorCQkJCQkJCSBJTiAgUFVDSEFSICAgICAgICAgIHBEYXRhLAorCQkJCQkJCSBJTiAgVUlOVCAgICAgICAgICAgIExlbmd0aCkKK3sKKwlQTkRJU19QQUNLRVQgICAgcFBhY2tldDsKKwlORElTX1NUQVRVUyAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwlVTE9ORyAgICBGcmVlTnVtOworCWludCAJcmV0cnkgPSAwOworCVVDSEFSICAgICAgICAgICBJcnFTdGF0ZTsKKwlVQ0hBUgkJCXJ0bXBId0hkcltUWElORk9fU0laRSArIFRYV0lfU0laRV07IC8vUlRNUF9IV19IRFJfTEVOXTsKKworCUFTU0VSVChMZW5ndGggPD0gTUdNVF9ETUFfQlVGRkVSX1NJWkUpOworCisJLy8gMjg2MEMgdXNlIFR4IFJpbmcKKwlJcnFTdGF0ZSA9IHBBZC0+aXJxX2Rpc2FibGVkOworCisJZG8KKwl7CisJCS8vIFJlc2V0IGlzIGluIHByb2dyZXNzLCBzdG9wIGltbWVkaWF0ZWx5CisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpIHx8CisJCQkgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpfHwKKwkJCSFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfU1RBUlRfVVApKQorCQl7CisJCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCQkJYnJlYWs7CisJCX0KKworCQkvLyBDaGVjayBGcmVlIHByaW9yaXR5IHF1ZXVlCisJCS8vIFNpbmNlIHdlIHVzZSBQQkYgUXVldWUyIGZvciBtYW5hZ2VtZW50IGZyYW1lLiAgSXRzIGNvcnJlc3BvbmRpbmcgRE1BIHJpbmcgc2hvdWxkIGJlIHVzaW5nIFR4UmluZy4KKworCQkvLyAyODYwQyB1c2UgVHggUmluZworCisJCS8vIGZyZWUgVHgoUXVlSWR4KSByZXNvdXJjZXMKKwkJRnJlZU51bSA9IEdFVF9UWFJJTkdfRlJFRU5PKHBBZCwgUXVlSWR4KTsKKworCQlpZiAoKEZyZWVOdW0gPiAwKSkKKwkJeworCQkJLy8gV2UgbmVlZCB0byByZXNlcnZlIHNwYWNlIGZvciBydG1wIGhhcmR3YXJlIGhlYWRlci4gaS5lLiwgVHhXSSBmb3IgUlQyODYwIGFuZCBUeEluZm8rVHhXSSBmb3IgUlQyODcwCisJCQlOZGlzWmVyb01lbW9yeSgmcnRtcEh3SGRyLCAoVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUpKTsKKwkJCVN0YXR1cyA9IFJUTVBBbGxvY2F0ZU5kaXNQYWNrZXQocEFkLCAmcFBhY2tldCwgKFBVQ0hBUikmcnRtcEh3SGRyLCAoVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUpLCBwRGF0YSwgTGVuZ3RoKTsKKwkJCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIk1pbmlwb3J0TU1SZXF1ZXN0IChlcnJvcjo6IGNhbid0IGFsbG9jYXRlIE5ESVMgUEFDS0VUKVxuIikpOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvL3BBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkvL3BBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlID0gUkFURV8yOworCisKKwkJCVN0YXR1cyA9IE1sbWVEYXRhSGFyZFRyYW5zbWl0KHBBZCwgUXVlSWR4LCBwUGFja2V0KTsKKwkJCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCQlSVE1QRnJlZU5kaXNQYWNrZXQocEFkLCBwUGFja2V0KTsKKwkJCXJldHJ5ID0gTUFYX0RBVEFNTV9SRVRSWTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJldHJ5ICsrOworCisJCQlwcmludGsoInJldHJ5ICVkXG4iLCByZXRyeSk7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk1nbXRSaW5nRnVsbENvdW50Kys7CisKKwkJCWlmIChyZXRyeSA+PSBNQVhfREFUQU1NX1JFVFJZKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlFpZHgoJWQpLCBub3QgZW5vdWdoIHNwYWNlIGluIERhdGFSaW5nLCBNZ210UmluZ0Z1bGxDb3VudD0lbGQhXG4iLAorCQkJCQkJCQkJCQlRdWVJZHgsIHBBZC0+UmFsaW5rQ291bnRlcnMuTWdtdFJpbmdGdWxsQ291bnQpKTsKKwkJCX0KKwkJfQorCisJfSB3aGlsZSAocmV0cnkgPCBNQVhfREFUQU1NX1JFVFJZKTsKKworCisJcmV0dXJuIFN0YXR1czsKK30KKworCisKKworCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDb3B5IGZyYW1lIGZyb20gd2FpdGluZyBxdWV1ZSBpbnRvIHJlbGF0aXZlIHJpbmcgYnVmZmVyIGFuZCBzZXQKKwlhcHByb3ByaWF0ZSBBU0lDIHJlZ2lzdGVyIHRvIGtpY2sgaGFyZHdhcmUgdHJhbnNtaXQgZnVuY3Rpb24KKworCUFyZ3VtZW50czoKKwkJcEFkIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcEJ1ZmZlciAJUG9pbnRlciB0bwltZW1vcnkgb2Ygb3V0Z29pbmcgZnJhbWUKKwkJTGVuZ3RoCQlTaXplIG9mIG91dGdvaW5nIG1hbmFnZW1lbnQgZnJhbWUKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVEFUVVNfRkFJTFVSRQorCQlORElTX1NUQVRVU19QRU5ESU5HCisJCU5ESVNfU1RBVFVTX1NVQ0NFU1MKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMgTWxtZUhhcmRUcmFuc21pdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVF1ZUlkeCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCkKK3sKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSAhPSBSRF9OT1JNQUxfTU9ERSkKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUCisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCQkpCisJeworCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKwkJcmV0dXJuIE1sbWVIYXJkVHJhbnNtaXRNZ210UmluZyhwQWQsUXVlSWR4LHBQYWNrZXQpOworCit9CisKK05ESVNfU1RBVFVTIE1sbWVEYXRhSGFyZFRyYW5zbWl0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCVF1ZUlkeCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCkKK3sKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSAhPSBSRF9OT1JNQUxfTU9ERSkKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUCisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCQkpCisJeworCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKyNpZmRlZiBSVDI4NzAKKwlyZXR1cm4gTWxtZUhhcmRUcmFuc21pdE1nbXRSaW5nKHBBZCxRdWVJZHgscFBhY2tldCk7CisjZW5kaWYgLy8gUlQyODcwIC8vCit9CisKKworCisKKworTkRJU19TVEFUVVMgTWxtZUhhcmRUcmFuc21pdE1nbXRSaW5nKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCVF1ZUlkeCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCkKK3sKKwlQQUNLRVRfSU5GTyAJUGFja2V0SW5mbzsKKwlQVUNIQVIJCQlwU3JjQnVmVkE7CisJVUlOVAkJCVNyY0J1ZkxlbjsKKwlQSEVBREVSXzgwMl8xMQlwSGVhZGVyXzgwMl8xMTsKKwlCT09MRUFOIAkJYkFja1JlcXVpcmVkLCBiSW5zZXJ0VGltZXN0YW1wOworCVVDSEFSCQkJTWxtZVJhdGU7CisJUFRYV0lfU1RSVUMgCXBGaXJzdFR4V0k7CisJTUFDX1RBQkxFX0VOVFJZCSpwTWFjRW50cnkgPSBOVUxMOworCisJUlRNUF9RdWVyeVBhY2tldEluZm8ocFBhY2tldCwgJlBhY2tldEluZm8sICZwU3JjQnVmVkEsICZTcmNCdWZMZW4pOworCisJLy8gTWFrZSBzdXJlIE1HTVQgcmluZyByZXNvdXJjZSB3b24ndCBiZSB1c2VkIGJ5IG90aGVyIHRocmVhZHMKKy8vIHNhbXBsZSwgZm9yIElSUSBMT0NLIC0+IFNFTSBMT0NLCisvLwlJcnFTdGF0ZSA9IHBBZC0+aXJxX2Rpc2FibGVkOworLy8JaWYgKCFJcnFTdGF0ZSkKKwkJUlRNUF9TRU1fTE9DSygmcEFkLT5NZ210UmluZ0xvY2spOworCisKKwlpZiAocFNyY0J1ZlZBID09IE5VTEwpCisJeworCQkvLyBUaGUgYnVmZmVyIHNob3VsZG4ndCBiZSBOVUxMCisvLwkJaWYgKCFJcnFTdGF0ZSkKKwkJCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5NZ210UmluZ0xvY2spOworCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gb3V0Z29pbmcgZnJhbWUgYWx3YXlzIHdha2V1cCBQSFkgdG8gcHJldmVudCBmcmFtZSBsb3N0CisJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQorCQkJQXNpY0ZvcmNlV2FrZXVwKHBBZCwgVFJVRSk7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcEZpcnN0VHhXSSA9IChQVFhXSV9TVFJVQykocFNyY0J1ZlZBICsgIFRYSU5GT19TSVpFKTsKKwlwSGVhZGVyXzgwMl8xMSA9IChQSEVBREVSXzgwMl8xMSkgKHBTcmNCdWZWQSArIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFKTsgLy9UWFdJX1NJWkUpOworCisJaWYgKHBIZWFkZXJfODAyXzExLT5BZGRyMVswXSAmIDB4MDEpCisJeworCQlNbG1lUmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLkJhc2ljTWxtZVJhdGU7CisJfQorCWVsc2UKKwl7CisJCU1sbWVSYXRlID0gcEFkLT5Db21tb25DZmcuTWxtZVJhdGU7CisJfQorCisJLy8gVmVyaWZ5IE1sbWUgcmF0ZSBmb3IgYSAvIGcgYmFuZHMuCisJaWYgKChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPiAxNCkgJiYgKE1sbWVSYXRlIDwgUkFURV82KSkgLy8gMTFBIGJhbmQKKwkJTWxtZVJhdGUgPSBSQVRFXzY7CisKKwlpZiAoKHBIZWFkZXJfODAyXzExLT5GQy5UeXBlID09IEJUWVBFX0RBVEEpICYmCisJCShwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9PSBTVUJUWVBFX1FPU19OVUxMKSkKKwl7CisJCXBNYWNFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZCwgcEhlYWRlcl84MDJfMTEtPkFkZHIxKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gRml4ZWQgVzUyIHdpdGggQWN0aXZpdHkgc2NhbiBpc3N1ZSBpbiBBQkdfTUlYRUQgYW5kIEFCR05fTUlYRUQgbW9kZS4KKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHX01JWEVECisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQl8fCBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFCR05fTUlYRUQKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJKQorCQl7CisJCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID4gMTQpCisJCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSAxOworCQkJZWxzZQorCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gMDsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vCisJLy8gU2hvdWxkIG5vdCBiZSBoYXJkIGNvZGUgdG8gc2V0IFB3ck1nbXQgdG8gMCAoUFdSX0FDVElWRSkKKwkvLyBTbmljZSBpdCdzIGJlZW4gc2V0IHRvIDAgd2hpbGUgb24gTWd0TWFjSGVhZGVySW5pdAorCS8vIEJ5IHRoZSB3YXkgdGhpcyB3aWxsIGNhdXNlIGZyYW1lIHRvIGJlIHNlbmQgb24gUFdSX1NBVkUgZmFpbGVkLgorCS8vCisJLy8gcEhlYWRlcl84MDJfMTEtPkZDLlB3ck1nbXQgPSAwOyAvLyAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKTsKKwkvLworCS8vIEluIFdNTS1VQVBTRCwgbWxtZSBmcmFtZSBzaG91bGQgYmUgc2V0IHBzbSBhcyBwb3dlciBzYXZpbmcgYnV0IHByb2JlIHJlcXVlc3QgZnJhbWUKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyAgICAvLyBEYXRhLU51bGwgcGFja2V0cyBhbHNlIHBhc3MgdGhyb3VnaCBNTVJlcXVlc3QgaW4gUlQyODYwLCBob3dldmVyLCB3ZSBob3BlIGNvbnRyb2wgdGhlIHBzbSBiaXQgdG8gcGFzcyBBUFNECisJaWYgKChwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSAhPSBCVFlQRV9EQVRBKSAmJiAocEhlYWRlcl84MDJfMTEtPkZDLlR5cGUgIT0gQlRZUEVfQ05UTCkpCisJeworCQlpZiAoKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkgJiYKKwkJCShwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9PSBTVUJUWVBFX0FDVElPTikpCisJCQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IFBXUl9TQVZFOworCQllbHNlCisJCQlwSGVhZGVyXzgwMl8xMS0+RkMuUHdyTWdtdCA9IFBXUl9BQ1RJVkU7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJYkluc2VydFRpbWVzdGFtcCA9IEZBTFNFOworCWlmIChwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSA9PSBCVFlQRV9DTlRMKSAvLyBtdXN0IGJlIFBTLVBPTEwKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCS8vU2V0IFBNIGJpdCBpbiBwcy1wb2xsLCB0byBmaXggV0xLIDEuMiAgUG93ZXJTYXZlTW9kZV9leHQgZmFpbHVyZSBpc3N1ZS4KKwkJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSAmJiAocEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgPT0gU1VCVFlQRV9QU19QT0xMKSkKKwkJeworCQkJcEhlYWRlcl84MDJfMTEtPkZDLlB3ck1nbXQgPSBQV1JfU0FWRTsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQliQWNrUmVxdWlyZWQgPSBGQUxTRTsKKwl9CisJZWxzZSAvLyBCVFlQRV9NR01UIG9yIEJUWVBFX0RBVEEobXVzdCBiZSBOVUxMIGZyYW1lKQorCXsKKwkJLy9wQWQtPlNlcXVlbmNlKys7CisJCS8vcEhlYWRlcl84MDJfMTEtPlNlcXVlbmNlID0gcEFkLT5TZXF1ZW5jZTsKKworCQlpZiAocEhlYWRlcl84MDJfMTEtPkFkZHIxWzBdICYgMHgwMSkgLy8gTVVMVElDQVNULCBCUk9BRENBU1QKKwkJeworCQkJYkFja1JlcXVpcmVkID0gRkFMU0U7CisJCQlwSGVhZGVyXzgwMl8xMS0+RHVyYXRpb24gPSAwOworCQl9CisJCWVsc2UKKwkJeworCQkJYkFja1JlcXVpcmVkID0gVFJVRTsKKwkJCXBIZWFkZXJfODAyXzExLT5EdXJhdGlvbiA9IFJUTVBDYWxjRHVyYXRpb24ocEFkLCBNbG1lUmF0ZSwgMTQpOworCQkJaWYgKHBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfUFJPQkVfUlNQKQorCQkJeworCQkJCWJJbnNlcnRUaW1lc3RhbXAgPSBUUlVFOworCQkJfQorCQl9CisJfQorCisJcEhlYWRlcl84MDJfMTEtPlNlcXVlbmNlID0gcEFkLT5TZXF1ZW5jZSsrOworCWlmIChwQWQtPlNlcXVlbmNlID4weGZmZikKKwkJcEFkLT5TZXF1ZW5jZSA9IDA7CisKKwkvLyBCZWZvcmUgcmFkYXIgZGV0ZWN0aW9uIGRvbmUsIG1nbXQgZnJhbWUgY2FuIG5vdCBiZSBzZW50IGJ1dCBwcm9iZSByZXEKKwkvLyBCZWNhdXNlIHdlIG5lZWQgdG8gdXNlIHByb2JlIHJlcSB0byB0cmlnZ2VyIGRyaXZlciB0byBzZW5kIHByb2JlIHJlcSBpbiBwYXNzaXZlIHNjYW4KKwlpZiAoKHBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlICE9IFNVQlRZUEVfUFJPQkVfUkVRKQorCQkmJiAocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPT0gMSkKKwkJJiYgKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSAhPSBSRF9OT1JNQUxfTU9ERSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIk1sbWVIYXJkVHJhbnNtaXQgLS0+IHJhZGFyIGRldGVjdCBub3QgaW4gbm9ybWFsIG1vZGUgISEhXG4iKSk7CisvLwkJaWYgKCFJcnFTdGF0ZSkKKwkJCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5NZ210UmluZ0xvY2spOworCQlyZXR1cm4gKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCX0KKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRnJhbWVFbmRpYW5DaGFuZ2UocEFkLCAoUFVDSEFSKXBIZWFkZXJfODAyXzExLCBESVJfV1JJVEUsIEZBTFNFKTsKKyNlbmRpZgorCisJLy8KKwkvLyBmaWxsIHNjYXR0ZXItYW5kLWdhdGhlciBidWZmZXIgbGlzdCBpbnRvIFRYRC4gSW50ZXJuYWxseSBjcmVhdGVkIE5ESVMgUEFDS0VUCisJLy8gc2hvdWxkIGFsd2F5cyBoYXMgb25seSBvbmUgb2h5c2ljYWwgYnVmZmVyLCBhbmQgdGhlIHdob2xlIGZyYW1lIHNpemUgZXF1YWxzCisJLy8gdG8gdGhlIGZpcnN0IHNjYXR0ZXIgYnVmZmVyIHNpemUKKwkvLworCisJLy8gSW5pdGlhbGl6ZSBUWCBEZXNjcmlwdG9yCisJLy8gRm9yIGludGVyLWZyYW1lIGdhcCwgdGhlIG51bWJlciBpcyBmb3IgdGhpcyBmcmFtZSBhbmQgbmV4dCBmcmFtZQorCS8vIEZvciBNTE1FIHJhdGUsIHdlIHdpbGwgZml4IGFzIDJNYiB0byBtYXRjaCBvdGhlciB2ZW5kb3IncyBpbXBsZW1lbnQKKy8vCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gMTsKKworLy8gbWFuYWdlbWVudCBmcmFtZSBkb2Vzbid0IG5lZWQgZW5jcnlwdGlvbi4gc28gdXNlIFJFU0VSVkVEX1dDSUQgbm8gbWF0dGVyIHUgYXJlIHNlbmRpbmcgdG8gc3BlY2lmaWMgd2NpZCBvciBub3QuCisJaWYgKHBNYWNFbnRyeSA9PSBOVUxMKQorCXsKKwkJUlRNUFdyaXRlVHhXSShwQWQsIHBGaXJzdFR4V0ksIEZBTFNFLCBGQUxTRSwgYkluc2VydFRpbWVzdGFtcCwgRkFMU0UsIGJBY2tSZXF1aXJlZCwgRkFMU0UsCisJCTAsIFJFU0VSVkVEX1dDSUQsIChTcmNCdWZMZW4gLSBUWElORk9fU0laRSAtIFRYV0lfU0laRSksIFBJRF9NR01ULCAwLCAgKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MsIElGU19CQUNLT0ZGLCBGQUxTRSwgJnBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdCk7CisJfQorCWVsc2UKKwl7CisJCVJUTVBXcml0ZVR4V0kocEFkLCBwRmlyc3RUeFdJLCBGQUxTRSwgRkFMU0UsCisJCQkJCWJJbnNlcnRUaW1lc3RhbXAsIEZBTFNFLCBiQWNrUmVxdWlyZWQsIEZBTFNFLAorCQkJCQkwLCBwTWFjRW50cnktPkFpZCwgKFNyY0J1ZkxlbiAtIFRYSU5GT19TSVpFIC0gVFhXSV9TSVpFKSwKKwkJCQkJcE1hY0VudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTLCAwLAorCQkJCQkoVUNIQVIpcE1hY0VudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTLAorCQkJCQlJRlNfQkFDS09GRiwgRkFMU0UsICZwTWFjRW50cnktPk1heEhUUGh5TW9kZSk7CisJfQorCisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBXSUVuZGlhbkNoYW5nZSgoUFVDSEFSKXBGaXJzdFR4V0ksIFRZUEVfVFhXSSk7CisjZW5kaWYKKworCS8vIE5vdyBkbyBoYXJkd2FyZS1kZXBlbmVkIGtpY2sgb3V0LgorCUhBTF9LaWNrT3V0TWdtdFR4KHBBZCwgUXVlSWR4LCBwUGFja2V0LCBwU3JjQnVmVkEsIFNyY0J1Zkxlbik7CisKKwkvLyBNYWtlIHN1cmUgdG8gcmVsZWFzZSBNR01UIHJpbmcgcmVzb3VyY2UKKy8vCWlmICghSXJxU3RhdGUpCisJCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5NZ210UmluZ0xvY2spOworCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTmV3IERlUXVldWUgUHJvY2VkdXJlcy4KKworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIERFUVVFVUVfTE9DSyhsb2NrLCBiSW50Q29udGV4dCwgSXJxRmxhZ3MpIAkJCQlcCisJCQlkb3sJCQkJCQkJCQkJCQkJXAorCQkJCWlmIChiSW50Q29udGV4dCA9PSBGQUxTRSkJCQkJCQlcCisJCQkJUlRNUF9JUlFfTE9DSygobG9jayksIElycUZsYWdzKTsJCVwKKwkJCX13aGlsZSgwKQorCisjZGVmaW5lIERFUVVFVUVfVU5MT0NLKGxvY2ssIGJJbnRDb250ZXh0LCBJcnFGbGFncykJCQkJXAorCQkJZG97CQkJCQkJCQkJCQkJCVwKKwkJCQlpZiAoYkludENvbnRleHQgPT0gRkFMU0UpCQkJCQkJXAorCQkJCQlSVE1QX0lSUV9VTkxPQ0soKGxvY2spLCBJcnFGbGFncyk7CVwKKwkJCX13aGlsZSgwKQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJVHggUGF0aCBkZXNpZ24gYWxnb3JpdGhtOgorCQlCYXNpY2FsbHksIHdlIGRpdmlkZSB0aGUgcGFja2V0cyBpbnRvIGZvdXIgdHlwZXMsIEJyb2FkY2FzdC9NdWx0aWNhc3QsIDExTiBSYXRlKEFNUERVLCBBTVNEVSwgTm9ybWFsKSwgQi9HIFJhdGUoQVJBTElOSywgTm9ybWFsKSwKKwkJU3BlY2lmaWMgUGFja2V0IFR5cGUuIEZvbGxvd2luZyBzaG93IHRoZSBjbGFzc2lmaWNhdGlvbiBydWxlIGFuZCBwb2xpY3kgZm9yIGVhY2gga2luZHMgb2YgcGFja2V0cy4KKwkJCQlDbGFzc2lmaWNhdGlvbiBSdWxlPT4KKwkJCQkJTXVsdGljYXN0OiAoKmFkZHIxICYgMHgwMSkgPT0gMHgwMQorCQkJCQlTcGVjaWZpYyA6IGJESENQRnJhbWUsIGJBUlBGcmFtZSwgYkVBUE9MRnJhbWUsIGV0Yy4KKwkJCQkJMTFOIFJhdGUgOiBJZiBwZWVyIHN1cHBvcnQgSFQKKwkJCQkJCQkJKDEpLkFNUERVICAtLSBJZiBUWEJBIGlzIG5lZ290aWF0ZWQuCisJCQkJCQkJCSgyKS5BTVNEVSAgLS0gSWYgQU1TRFUgaXMgY2FwYWJsZSBmb3IgYm90aCBwZWVyIGFuZCBvdXJzZWxmLgorCQkJCQkJCQkJCQkqKS4gQU1TRFUgY2FuIGVtYmVkZGVkIGluIGEgQU1QRFUsIGJ1dCBub3cgd2UgZGlkbid0IHN1cHBvcnQgaXQuCisJCQkJCQkJCSgzKS5Ob3JtYWwgLS0gT3RoZXIgcGFja2V0cyB3aGljaCBzZW5kIGFzIDExbiByYXRlLgorCisJCQkJCUIvRyBSYXRlIDogSWYgcGVlciBpcyBiL2cgb25seS4KKwkJCQkJCQkJKDEpLkFSQUxJTkstLSBJZiBib3RoIG9mIHBlZXIvdXMgc3VwcHJvdCBSYWxpbmsgcHJvcHJpZXRhcnkgQWdncmVnYXRpb24gYW5kIHRoZSBUeFJhdGUgaXMgbGFyZ2UgdGhhbiBSQVRFXzYKKwkJCQkJCQkJKDIpLk5vcm1hbCAtLSBPdGhlciBwYWNrZXRzIHdoaWNoIHNlbmQgYXMgYi9nIHJhdGUuCisJCQkJCUZyYWdtZW50OgorCQkJCQkJCQlUaGUgcGFja2V0IG11c3QgYmUgdW5pY2FzdCwgTk9UIEEtUkFMSU5LLCBOT1QgQS1NU0RVLCBOT1QgMTFuLCB0aGVuIGNhbiBjb25zaWRlciBhYm91dCBmcmFnbWVudC4KKworCQkJCUNsYXNzaWZpZWQgUGFja2V0IEhhbmRsZSBSdWxlPT4KKwkJCQkJTXVsdGljYXN0OgorCQkJCQkJCQlObyBBQ0ssIAkJLy9wVHhCbGstPmJBY2tSZXF1aXJlZCA9IEZBTFNFOworCQkJCQkJCQlObyBXTU0sIAkJLy9wVHhCbGstPmJXTU0gPSBGQUxTRTsKKwkJCQkJCQkJTm8gcGlnZ3liYWNrLCAgIC8vcFR4QmxrLT5iUGlnZ3lCYWNrID0gRkFMU0U7CisJCQkJCQkJCUZvcmNlIExvd1JhdGUsICAvL3BUeEJsay0+YkZvcmNlTG93UmF0ZSA9IFRSVUU7CisJCQkJCVNwZWNpZmljIDoJQmFzaWNhbGx5LCBmb3Igc3BlY2lmaWMgcGFja2V0LCB3ZSBzaG91bGQgaGFuZGxlIGl0IHNwZWNpZmljYWxseSwgYnV0IG5vdyBhbGwgc3BlY2lmaWMgcGFja2V0cyBhcmUgdXNlCisJCQkJCQkJCQl0aGUgc2FtZSBwb2xpY3kgdG8gaGFuZGxlIGl0LgorCQkJCQkJCQlGb3JjZSBMb3dSYXRlLCAgLy9wVHhCbGstPmJGb3JjZUxvd1JhdGUgPSBUUlVFOworCisJCQkJCTExTiBSYXRlIDoKKwkJCQkJCQkJTm8gcGlnZ3liYWNrLAkvL3BUeEJsay0+YlBpZ2d5QmFjayA9IEZBTFNFOworCisJCQkJCQkJCSgxKS5BTVNEVQorCQkJCQkJCQkJcFR4QmxrLT5iV01NID0gVFJVRTsKKwkJCQkJCQkJKDIpLkFNUERVCisJCQkJCQkJCQlwVHhCbGstPmJXTU0gPSBUUlVFOworCQkJCQkJCQkoMykuTm9ybWFsCisKKwkJCQkJQi9HIFJhdGUgOgorCQkJCQkJCQkoMSkuQVJBTElOSworCisJCQkJCQkJCSgyKS5Ob3JtYWwKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgVUNIQVIgVHhQa3RDbGFzc2lmaWNhdGlvbigKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBQTkRJU19QQUNLRVQgIHBQYWNrZXQpCit7CisJVUNIQVIJCQlUeEZyYW1lVHlwZSA9IFRYX1VOS09XTl9GUkFNRTsKKwlVQ0hBUgkJCVdjaWQ7CisJTUFDX1RBQkxFX0VOVFJZCSpwTWFjRW50cnkgPSBOVUxMOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUJPT0xFQU4JCQliSFRSYXRlID0gRkFMU0U7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlXY2lkID0gUlRNUF9HRVRfUEFDS0VUX1dDSUQocFBhY2tldCk7CisJaWYgKFdjaWQgPT0gTUNBU1RfV0NJRCkKKwl7CS8vIEhhbmRsZSBmb3IgUkEgaXMgQnJvYWRjYXN0L011bHRpY2FzdCBBZGRyZXNzLgorCQlyZXR1cm4gVFhfTUNBU1RfRlJBTUU7CisJfQorCisJLy8gSGFuZGxlIGZvciB1bmljYXN0IHBhY2tldHMKKwlwTWFjRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXTsKKwlpZiAoUlRNUF9HRVRfUEFDS0VUX0xPV1JBVEUocFBhY2tldCkpCisJewkvLyBJdCdzIGEgc3BlY2lmaWMgcGFja2V0IG5lZWQgdG8gZm9yY2UgbG93IHJhdGUsIGkuZS4sIGJESENQRnJhbWUsIGJFQVBPTEZyYW1lLCBiV0FJRnJhbWUKKwkJVHhGcmFtZVR5cGUgPSBUWF9MRUdBQ1lfRlJBTUU7CisJfQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWVsc2UgaWYgKElTX0hUX1JBVEUocE1hY0VudHJ5KSkKKwl7CS8vIGl0J3MgYSAxMW4gY2FwYWJsZSBwYWNrZXQKKworCQkvLyBEZXBlbmRzIG9uIEhUUGh5TW9kZSB0byBjaGVjayBpZiB0aGUgcGVlciBzdXBwb3J0IHRoZSBIVFJhdGUgdHJhbnNtaXNzaW9uLgorCQkvLyAJQ3VycmVudGx5IGRpZG4ndCBzdXBwb3J0IEEtTVNEVSBlbWJlZGRlZCBpbiBBLU1QRFUKKwkJYkhUUmF0ZSA9IFRSVUU7CisJCWlmIChSVE1QX0dFVF9QQUNLRVRfTU9SRURBVEEocFBhY2tldCkgfHwgKHBNYWNFbnRyeS0+UHNNb2RlID09IFBXUl9TQVZFKSkKKwkJCVR4RnJhbWVUeXBlID0gVFhfTEVHQUNZX0ZSQU1FOworI2lmZGVmIFVBUFNEX0FQX1NVUFBPUlQKKwkJZWxzZSBpZiAoUlRNUF9HRVRfUEFDS0VUX0VPU1AocFBhY2tldCkpCisJCQlUeEZyYW1lVHlwZSA9IFRYX0xFR0FDWV9GUkFNRTsKKyNlbmRpZiAvLyBVQVBTRF9BUF9TVVBQT1JUIC8vCisJCWVsc2UgaWYoKHBNYWNFbnRyeS0+VFhCQWJpdG1hcCAmICgxPDwoUlRNUF9HRVRfUEFDS0VUX1VQKHBQYWNrZXQpKSkpICE9IDApCisJCQlyZXR1cm4gVFhfQU1QRFVfRlJBTUU7CisJCWVsc2UgaWYoQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocE1hY0VudHJ5LCBmQ0xJRU5UX1NUQVRVU19BTVNEVV9JTlVTRUQpKQorCQkJcmV0dXJuIFRYX0FNU0RVX0ZSQU1FOworCQllbHNlCisJCQlUeEZyYW1lVHlwZSA9IFRYX0xFR0FDWV9GUkFNRTsKKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJZWxzZQorCXsJLy8gaXQncyBhIGxlZ2FjeSBiL2cgcGFja2V0LgorCQlpZiAoKENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgZkNMSUVOVF9TVEFUVVNfQUdHUkVHQVRJT05fQ0FQQUJMRSkgJiYgcEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSkgJiYKKwkJCShSVE1QX0dFVF9QQUNLRVRfVFhSQVRFKHBQYWNrZXQpID49IFJBVEVfNikgJiYKKwkJCSghKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfV01NX0lOVVNFRCkgJiYgQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocE1hY0VudHJ5LCBmQ0xJRU5UX1NUQVRVU19XTU1fQ0FQQUJMRSkpKSkKKwkJewkvLyBpZiBwZWVyIHN1cHBvcnQgUmFsaW5rIEFnZ3JlZ2F0aW9uLCB3ZSB1c2UgaXQuCisJCQlUeEZyYW1lVHlwZSA9IFRYX1JBTElOS19GUkFNRTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVR4RnJhbWVUeXBlID0gVFhfTEVHQUNZX0ZSQU1FOworCQl9CisJfQorCisJLy8gQ3VycmVudGx5LCBvdXIgZnJhZ21lbnQgb25seSBzdXBwb3J0IHdoZW4gYSB1bmljYXN0IHBhY2tldCBzZW5kIGFzIE5PVC1BUkFMSU5LLCBOT1QtQU1TRFUgYW5kIE5PVC1BTVBEVS4KKwlpZiAoKFJUTVBfR0VUX1BBQ0tFVF9GUkFHTUVOVFMocFBhY2tldCkgPiAxKSAmJiAoVHhGcmFtZVR5cGUgPT0gVFhfTEVHQUNZX0ZSQU1FKSkKKwkJVHhGcmFtZVR5cGUgPSBUWF9GUkFHX0ZSQU1FOworCisJcmV0dXJuIFR4RnJhbWVUeXBlOworfQorCisKK0JPT0xFQU4gUlRNUF9GaWxsVHhCbGtJbmZvKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFRYX0JMSyAqcFR4QmxrKQoreworCVBBQ0tFVF9JTkZPCQkJUGFja2V0SW5mbzsKKwlQTkRJU19QQUNLRVQJCXBQYWNrZXQ7CisJUE1BQ19UQUJMRV9FTlRSWQlwTWFjRW50cnkgPSBOVUxMOworCisJcFBhY2tldCA9IHBUeEJsay0+cFBhY2tldDsKKwlSVE1QX1F1ZXJ5UGFja2V0SW5mbyhwUGFja2V0LCAmUGFja2V0SW5mbywgJnBUeEJsay0+cFNyY0J1ZkhlYWRlciwgJnBUeEJsay0+U3JjQnVmTGVuKTsKKworCXBUeEJsay0+V2NpZAkgCSAJCT0gUlRNUF9HRVRfUEFDS0VUX1dDSUQocFBhY2tldCk7CisJcFR4QmxrLT5hcGlkeAkJIAkJPSBSVE1QX0dFVF9QQUNLRVRfSUYocFBhY2tldCk7CisJcFR4QmxrLT5Vc2VyUHJpb3JpdHkgCQk9IFJUTVBfR0VUX1BBQ0tFVF9VUChwUGFja2V0KTsKKwlwVHhCbGstPkZyYW1lR2FwID0gSUZTX0hUVFhPUDsJCS8vIEFTSUMgZGV0ZXJtaW5lIEZyYW1lIEdhcAorCisJaWYgKFJUTVBfR0VUX1BBQ0tFVF9DTEVBUl9FQVBfRlJBTUUocFR4QmxrLT5wUGFja2V0KSkKKwkJVFhfQkxLX1NFVF9GTEFHKHBUeEJsaywgZlRYX2JDbGVhckVBUEZyYW1lKTsKKwllbHNlCisJCVRYX0JMS19DTEVBUl9GTEFHKHBUeEJsaywgZlRYX2JDbGVhckVBUEZyYW1lKTsKKworCS8vIERlZmF1bHQgdG8gY2xlYXIgdGhpcyBmbGFnCisJVFhfQkxLX0NMRUFSX0ZMQUcocFR4QmxrLCBmVFhfYkZvcmNlTm9uUW9TKTsKKworCisJaWYgKHBUeEJsay0+V2NpZCA9PSBNQ0FTVF9XQ0lEKQorCXsKKwkJcFR4QmxrLT5wTWFjRW50cnkgPSBOVUxMOworCQl7CisjaWZkZWYgTUNBU1RfUkFURV9TUEVDSUZJQworCQkJUFVDSEFSIHBEQSA9IEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KTsKKwkJCWlmICgoKCpwREEgJiAweDAxKSA9PSAweDAxKSAmJiAoKnBEQSAhPSAweGZmKSkKKwkJCQlwVHhCbGstPnBUcmFuc21pdCA9ICZwQWQtPkNvbW1vbkNmZy5NQ2FzdFBoeU1vZGU7CisJCQllbHNlCisjZW5kaWYgLy8gTUNBU1RfUkFURV9TUEVDSUZJQyAvLworCQkJCXBUeEJsay0+cFRyYW5zbWl0ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbTUNBU1RfV0NJRF0uSFRQaHlNb2RlOworCQl9CisKKwkJVFhfQkxLX0NMRUFSX0ZMQUcocFR4QmxrLCBmVFhfYkFja1JlcXVpcmVkKTsJLy8gQWNrUmVxdWlyZWQgPSBGQUxTRSwgd2hlbiBicm9hZGNhc3QgcGFja2V0IGluIEFkaG9jIG1vZGUuCisJCS8vVFhfQkxLX1NFVF9GTEFHKHBUeEJsaywgZlRYX2JGb3JjZUxvd1JhdGUpOworCQlUWF9CTEtfQ0xFQVJfRkxBRyhwVHhCbGssIGZUWF9iQWxsb3dGcmFnKTsKKwkJVFhfQkxLX0NMRUFSX0ZMQUcocFR4QmxrLCBmVFhfYldNTSk7CisJCWlmIChSVE1QX0dFVF9QQUNLRVRfTU9SRURBVEEocFBhY2tldCkpCisJCXsKKwkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iTW9yZURhdGEpOworCQl9CisKKwl9CisJZWxzZQorCXsKKwkJcFR4QmxrLT5wTWFjRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtwVHhCbGstPldjaWRdOworCQlwVHhCbGstPnBUcmFuc21pdCA9ICZwVHhCbGstPnBNYWNFbnRyeS0+SFRQaHlNb2RlOworCisJCXBNYWNFbnRyeSA9IHBUeEJsay0+cE1hY0VudHJ5OworCisKKwkJLy8gRm9yIGFsbCB1bmljYXN0IHBhY2tldHMsIG5lZWQgQWNrIHVubGVzcyB0aGUgQWNrIFBvbGljeSBpcyBub3Qgc2V0IGFzIE5PUk1BTF9BQ0suCisJCWlmIChwQWQtPkNvbW1vbkNmZy5BY2tQb2xpY3lbcFR4QmxrLT5RdWVJZHhdICE9IE5PUk1BTF9BQ0spCisJCQlUWF9CTEtfQ0xFQVJfRkxBRyhwVHhCbGssIGZUWF9iQWNrUmVxdWlyZWQpOworCQllbHNlCisJCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYkFja1JlcXVpcmVkKTsKKworCQl7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQl7CisKKwkJCQkvLyBJZiBzdXBwb3J0IFdNTSwgZW5hYmxlIGl0LgorCQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpICYmCisJCQkJCUNMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpKQorCQkJCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYldNTSk7CisKKy8vCQkJCWlmIChwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCkKKy8vCQkJCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfQXV0b1JhdGVTd2l0Y2gpOworCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQl9CisKKwkJaWYgKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfTEVHQUNZX0ZSQU1FKQorCQl7CisJCQlpZiAoIChSVE1QX0dFVF9QQUNLRVRfTE9XUkFURShwUGFja2V0KSkgfHwKKyAgICAgICAgICAgICAgICAoKHBBZC0+T3BNb2RlID09IE9QTU9ERV9BUCkgJiYgKHBNYWNFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPT0gTU9ERV9DQ0spICYmIChwTWFjRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPT0gUkFURV8xKSkpCisJCQl7CS8vIFNwZWNpZmljIHBhY2tldCwgaS5lLiwgYkRIQ1BGcmFtZSwgYkVBUE9MRnJhbWUsIGJXQUlGcmFtZSwgbmVlZCBmb3JjZSBsb3cgcmF0ZS4KKwkJCQlwVHhCbGstPnBUcmFuc21pdCA9ICZwQWQtPk1hY1RhYi5Db250ZW50W01DQVNUX1dDSURdLkhUUGh5TW9kZTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQkvLyBNb2RpZnkgdGhlIFdNTSBiaXQgZm9yIElDViBpc3N1ZS4gSWYgd2UgaGF2ZSBhIHBhY2tldCB3aXRoIEVPU1AgZmllbGQgbmVlZCB0byBzZXQgYXMgMSwgaG93IHRvIGhhbmRsZSBpdD8/PworCQkJCWlmIChJU19IVF9TVEEocFR4QmxrLT5wTWFjRW50cnkpICYmCisJCQkJCShDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwTWFjRW50cnksIGZDTElFTlRfU1RBVFVTX1JBTElOS19DSElQU0VUKSkgJiYKKwkJCQkJKChwQWQtPkNvbW1vbkNmZy5iUmRnID09IFRSVUUpICYmIENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUkRHX0NBUEFCTEUpKSkKKwkJCQl7CisJCQkJCVRYX0JMS19DTEVBUl9GTEFHKHBUeEJsaywgZlRYX2JXTU0pOworCQkJCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYkZvcmNlTm9uUW9TKTsKKwkJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWlmICggKElTX0hUX1JBVEUocE1hY0VudHJ5KSA9PSBGQUxTRSkgJiYKKwkJCQkoQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocE1hY0VudHJ5LCBmQ0xJRU5UX1NUQVRVU19QSUdHWUJBQ0tfQ0FQQUJMRSkpKQorCQkJewkvLyBDdXJyZW50bHkgcGlnZ3ktYmFjayBvbmx5IHN1cHBvcnQgd2hlbiBwZWVyIGlzIG9wZXJhdGUgaW4gYi9nIG1vZGUuCisJCQkJVFhfQkxLX1NFVF9GTEFHKHBUeEJsaywgZlRYX2JQaWdneUJhY2spOworCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQlpZiAoUlRNUF9HRVRfUEFDS0VUX01PUkVEQVRBKHBQYWNrZXQpKQorCQkJeworCQkJCVRYX0JMS19TRVRfRkxBRyhwVHhCbGssIGZUWF9iTW9yZURhdGEpOworCQkJfQorI2lmZGVmIFVBUFNEX0FQX1NVUFBPUlQKKwkJCWlmIChSVE1QX0dFVF9QQUNLRVRfRU9TUChwUGFja2V0KSkKKwkJCXsKKwkJCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYldNTV9VQVBTRF9FT1NQKTsKKwkJCX0KKyNlbmRpZiAvLyBVQVBTRF9BUF9TVVBQT1JUIC8vCisJCX0KKwkJZWxzZSBpZiAocFR4QmxrLT5UeEZyYW1lVHlwZSA9PSBUWF9GUkFHX0ZSQU1FKQorCQl7CisJCQlUWF9CTEtfU0VUX0ZMQUcocFR4QmxrLCBmVFhfYkFsbG93RnJhZyk7CisJCX0KKworCQlwTWFjRW50cnktPkRlYnVnVHhDb3VudCsrOworCX0KKworCXJldHVybiBUUlVFOworCitGaWxsVHhCbGtFcnI6CisJcmV0dXJuIEZBTFNFOworfQorCisKK0JPT0xFQU4gQ2FuRG9BZ2dyZWdhdGVUcmFuc21pdCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBORElTX1BBQ0tFVCAqcFBhY2tldCwKKwlJTiBUWF9CTEsJCSpwVHhCbGspCit7CisKKwkvL3ByaW50aygiQ2hlY2sgaWYgY2FuIGRvIGFnZ3JlZ2F0aW9uISBUeEZyYW1lVHlwZT0lZCFcbiIsIHBUeEJsay0+VHhGcmFtZVR5cGUpOworCisJaWYgKFJUTVBfR0VUX1BBQ0tFVF9XQ0lEKHBQYWNrZXQpID09IE1DQVNUX1dDSUQpCisJCXJldHVybiBGQUxTRTsKKworCWlmIChSVE1QX0dFVF9QQUNLRVRfREhDUChwUGFja2V0KSB8fAorCQlSVE1QX0dFVF9QQUNLRVRfRUFQT0wocFBhY2tldCkgfHwKKwkJUlRNUF9HRVRfUEFDS0VUX1dBSShwUGFja2V0KSkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX0FNU0RVX0ZSQU1FKSAmJgorCQkoKHBUeEJsay0+VG90YWxGcmFtZUxlbiArIEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpKT4gKFJYX0JVRkZFUl9BR0dSRVNJWkUgLSAxMDApKSkKKwl7CS8vIEZvciBBTVNEVSwgYWxsb3cgdGhlIHBhY2tldHMgd2l0aCB0b3RhbCBsZW5ndGggPCBtYXgtYW1zZHUgc2l6ZQorCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX1JBTElOS19GUkFNRSkgJiYKKwkJKHBUeEJsay0+VHhQYWNrZXRMaXN0Lk51bWJlciA9PSAyKSkKKwl7CS8vIEZvciBSQUxJTkstQWdncmVnYXRpb24sIGFsbG93IHR3byBmcmFtZXMgaW4gb25lIGJhdGNoLgorCQlyZXR1cm4gRkFMU0U7CisJfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJaWYgKChJTkZSQV9PTihwQWQpKSAmJiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkpIC8vIG11c3QgYmUgdW5pY2FzdCB0byBBUAorCQlyZXR1cm4gVFJVRTsKKwllbHNlCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCXJldHVybiBGQUxTRTsKKworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlUbyBkbyB0aGUgZW5xdWV1ZSBvcGVyYXRpb24gYW5kIGV4dHJhY3QgdGhlIGZpcnN0IGl0ZW0gb2Ygd2FpdGluZworCQlsaXN0LiBJZiBhIG51bWJlciBvZiBhdmFpbGFibGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBjb3VsZCBtZWV0CisJCXRoZSByZXF1ZXN0IG9mIGV4dHJhY3RlZCBpdGVtLCB0aGUgZXh0cmFjdGVkIGl0ZW0gd2lsbCBiZSBmcmFnbWVudGVkCisJCWludG8gc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4KKworCUFyZ3VtZW50czoKKwkJcEFkIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcFF1ZXVlCQlQb2ludGVyIHRvIFdhaXRpbmcgUXVldWUKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QRGVRdWV1ZVBhY2tldCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgQk9PTEVBTiAgICAgICAgIGJJbnRDb250ZXh0LAorCUlOICBVQ0hBUgkJCVFJZHgsIC8qIEJ1bGtPdXRQaXBlSWQgKi8KKwlJTiAgVUNIQVIgICAgICAgICAgIE1heF9UeF9QYWNrZXRzKQoreworCVBRVUVVRV9FTlRSWSAgICBwRW50cnkgPSBOVUxMOworCVBORElTX1BBQ0tFVCAJcFBhY2tldDsKKwlORElTX1NUQVRVUyAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwlVQ0hBUiAgICAgICAgICAgQ291bnQ9MDsKKwlQUVVFVUVfSEVBREVSICAgcFF1ZXVlOworCVVMT05HICAgICAgICAgICBGcmVlTnVtYmVyW05VTV9PRl9UWF9SSU5HXTsKKwlVQ0hBUgkJCVF1ZUlkeCwgc1FJZHgsIGVRSWR4OworCXVuc2lnbmVkIGxvbmcJSXJxRmxhZ3MgPSAwOworCUJPT0xFQU4JCQloYXNUeERlc2MgPSBGQUxTRTsKKwlUWF9CTEsJCQlUeEJsazsKKwlUWF9CTEsJCQkqcFR4QmxrOworCisjaWZkZWYgREJHX0RJQUdOT1NFCisJQk9PTEVBTgkJCWZpcnN0Um91bmQ7CisJUnRtcERpYWdTdHJ1Y3QJKnBEaWFnU3RydWN0ID0gJnBBZC0+RGlhZ1N0cnVjdDsKKyNlbmRpZgorCisKKwlpZiAoUUlkeCA9PSBOVU1fT0ZfVFhfUklORykKKwl7CisJCXNRSWR4ID0gMDsKKy8vUFMgcGFja2V0cyB1c2UgSENDQSBxdWV1ZSB3aGVuIGRlcXVldWUgZnJvbSBQUyB1bmljYXN0IHF1ZXVlIChXaUZpIFdQQTIgTUE5X0RUMSBmb3IgTWFydmVsbCBCIFNUQSkKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJZVFJZHggPSAzOwkvLyA0IEFDcywgc3RhcnQgZnJvbSAwLgorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKwllbHNlCisJeworCQlzUUlkeCA9IGVRSWR4ID0gUUlkeDsKKwl9CisKKwlmb3IgKFF1ZUlkeD1zUUlkeDsgUXVlSWR4IDw9IGVRSWR4OyBRdWVJZHgrKykKKwl7CisJCUNvdW50PTA7CisKKwkJUlQyOFhYX1NUQVJUX0RFUVVFVUUocEFkLCBRdWVJZHgsIElycUZsYWdzKTsKKworI2lmZGVmIERCR19ESUFHTk9TRQorCQlmaXJzdFJvdW5kID0gKChRdWVJZHggPT0gMCkgPyBUUlVFIDogRkFMU0UpOworI2VuZGlmIC8vIERCR19ESUFHTk9TRSAvLworCisJCXdoaWxlICgxKQorCQl7CisJCQlpZiAoKFJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MgfAorCQkJCQkJCQkJCWZSVE1QX0FEQVBURVJfUkFESU9fT0ZGIHwKKwkJCQkJCQkJCQlmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAorCQkJCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKSkKKwkJCXsKKwkJCQlSVDI4WFhfU1RPUF9ERVFVRVVFKHBBZCwgUXVlSWR4LCBJcnFGbGFncyk7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlpZiAoQ291bnQgPj0gTWF4X1R4X1BhY2tldHMpCisJCQkJYnJlYWs7CisKKwkJCURFUVVFVUVfTE9DSygmcEFkLT5pcnFfbG9jaywgYkludENvbnRleHQsIElycUZsYWdzKTsKKwkJCWlmICgmcEFkLT5UeFN3UXVldWVbUXVlSWR4XSA9PSBOVUxMKQorCQkJeworI2lmZGVmIERCR19ESUFHTk9TRQorCQkJCWlmIChmaXJzdFJvdW5kID09IFRSVUUpCisJCQkJCXBEaWFnU3RydWN0LT5UeFNXUXVlQ250W3BEaWFnU3RydWN0LT5BcnJheUN1cklkeF1bMF0rKzsKKyNlbmRpZiAvLyBEQkdfRElBR05PU0UgLy8KKwkJCQlERVFVRVVFX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgYkludENvbnRleHQsIElycUZsYWdzKTsKKwkJCQlicmVhazsKKwkJCX0KKworCisJCQkvLyBwcm9iZSB0aGUgUXVldWUgSGVhZAorCQkJcFF1ZXVlID0gJnBBZC0+VHhTd1F1ZXVlW1F1ZUlkeF07CisJCQlpZiAoKHBFbnRyeSA9IHBRdWV1ZS0+SGVhZCkgPT0gTlVMTCkKKwkJCXsKKwkJCQlERVFVRVVFX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgYkludENvbnRleHQsIElycUZsYWdzKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcFR4QmxrID0gJlR4QmxrOworCQkJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUilwVHhCbGssIHNpemVvZihUWF9CTEspKTsKKwkJCS8vSW5pdGlhbGl6ZVF1ZXVlSGVhZGVyKCZwVHhCbGstPlR4UGFja2V0TGlzdCk7CQkvLyBEaWRuJ3QgbmVlZCBpdCBiZWNhdXNlIHdlIGFscmVhZHkgbWVtemVybyBpdC4KKwkJCXBUeEJsay0+UXVlSWR4ID0gUXVlSWR4OworCisJCQlwUGFja2V0ID0gUVVFVUVfRU5UUllfVE9fUEtUKHBFbnRyeSk7CisKKwkJCS8vIEVhcmx5IGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub2d1aCBUeCBSZXNvdXJjZS4KKwkJCWhhc1R4RGVzYyA9IFJUMjhYWF9IQVNfRU5PVUdIX0ZSRUVfREVTQyhwQWQsIHBUeEJsaywgRnJlZU51bWJlcltRdWVJZHhdLCBwUGFja2V0KTsKKwkJCWlmICghaGFzVHhEZXNjKQorCQkJeworCQkJCXBBZC0+UHJpdmF0ZUluZm8uVHhSaW5nRnVsbENudCsrOworCisJCQkJREVRVUVVRV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIGJJbnRDb250ZXh0LCBJcnFGbGFncyk7CisKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcFR4QmxrLT5UeEZyYW1lVHlwZSA9IFR4UGt0Q2xhc3NpZmljYXRpb24ocEFkLCBwUGFja2V0KTsKKwkJCXBFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZShwUXVldWUpOworCQkJcFR4QmxrLT5Ub3RhbEZyYW1lTnVtKys7CisJCQlwVHhCbGstPlRvdGFsRnJhZ051bSArPSBSVE1QX0dFVF9QQUNLRVRfRlJBR01FTlRTKHBQYWNrZXQpOwkvLyBUaGUgcmVhbCBmcmFnbWVudCBudW1iZXIgbWF5YmUgdmFyeQorCQkJcFR4QmxrLT5Ub3RhbEZyYW1lTGVuICs9IEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOworCQkJcFR4QmxrLT5wUGFja2V0ID0gcFBhY2tldDsKKwkJCUluc2VydFRhaWxRdWV1ZSgmcFR4QmxrLT5UeFBhY2tldExpc3QsIFBBQ0tFVF9UT19RVUVVRV9FTlRSWShwUGFja2V0KSk7CisKKwkJCWlmIChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX1JBTElOS19GUkFNRSB8fCBwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX0FNU0RVX0ZSQU1FKQorCQkJeworCQkJCS8vIEVuaGFuY2UgU1cgQWdncmVnYXRpb24gTWVjaGFuaXNtCisJCQkJaWYgKE5FRURfUVVFVUVfQkFDS19GT1JfQUdHKHBBZCwgUXVlSWR4LCBGcmVlTnVtYmVyW1F1ZUlkeF0sIHBUeEJsay0+VHhGcmFtZVR5cGUpKQorCQkJCXsKKwkJCQkJSW5zZXJ0SGVhZFF1ZXVlKHBRdWV1ZSwgUEFDS0VUX1RPX1FVRVVFX0VOVFJZKHBQYWNrZXQpKTsKKwkJCQkJREVRVUVVRV9VTkxPQ0soJnBBZC0+aXJxX2xvY2ssIGJJbnRDb250ZXh0LCBJcnFGbGFncyk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWRveworCQkJCQlpZigocEVudHJ5ID0gcFF1ZXVlLT5IZWFkKSA9PSBOVUxMKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJLy8gRm9yIFRYX0FNU0RVX0ZSQU1FL1RYX1JBTElOS19GUkFNRSwgTmVlZCB0byBjaGVjayBpZiBuZXh0IHBha2NldCBjYW4gZG8gYWdncmVnYXRpb24uCisJCQkJCXBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QS1QocEVudHJ5KTsKKwkJCQkJRnJlZU51bWJlcltRdWVJZHhdID0gR0VUX1RYUklOR19GUkVFTk8ocEFkLCBRdWVJZHgpOworCQkJCQloYXNUeERlc2MgPSBSVDI4WFhfSEFTX0VOT1VHSF9GUkVFX0RFU0MocEFkLCBwVHhCbGssIEZyZWVOdW1iZXJbUXVlSWR4XSwgcFBhY2tldCk7CisJCQkJCWlmICgoaGFzVHhEZXNjID09IEZBTFNFKSB8fCAoQ2FuRG9BZ2dyZWdhdGVUcmFuc21pdChwQWQsIHBQYWNrZXQsIHBUeEJsaykgPT0gRkFMU0UpKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJLy9SZW1vdmUgdGhlIHBhY2tldCBmcm9tIHRoZSBUeFN3UXVldWUgYW5kIGluc2VydCBpbnRvIHBUeEJsaworCQkJCQlwRW50cnkgPSBSZW1vdmVIZWFkUXVldWUocFF1ZXVlKTsKKwkJCQkJQVNTRVJUKHBFbnRyeSk7CisJCQkJCXBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QS1QocEVudHJ5KTsKKwkJCQkJcFR4QmxrLT5Ub3RhbEZyYW1lTnVtKys7CisJCQkJCXBUeEJsay0+VG90YWxGcmFnTnVtICs9IFJUTVBfR0VUX1BBQ0tFVF9GUkFHTUVOVFMocFBhY2tldCk7CS8vIFRoZSByZWFsIGZyYWdtZW50IG51bWJlciBtYXliZSB2YXJ5CisJCQkJCXBUeEJsay0+VG90YWxGcmFtZUxlbiArPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKKwkJCQkJSW5zZXJ0VGFpbFF1ZXVlKCZwVHhCbGstPlR4UGFja2V0TGlzdCwgUEFDS0VUX1RPX1FVRVVFX0VOVFJZKHBQYWNrZXQpKTsKKwkJCQl9d2hpbGUoMSk7CisKKwkJCQlpZiAocFR4QmxrLT5UeFBhY2tldExpc3QuTnVtYmVyID09IDEpCisJCQkJCXBUeEJsay0+VHhGcmFtZVR5cGUgPSBUWF9MRUdBQ1lfRlJBTUU7CisJCQl9CisKKyNpZmRlZiBSVDI4NzAKKwkJCURFUVVFVUVfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBiSW50Q29udGV4dCwgSXJxRmxhZ3MpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJCQlDb3VudCArPSBwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXI7CisKKwkJCQkvLyBEbyBIYXJkVHJhbnNtaXQgbm93LgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQlTdGF0dXMgPSBTVEFIYXJkVHJhbnNtaXQocEFkLCBwVHhCbGssIFF1ZUlkeCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCX0KKworCQlSVDI4WFhfU1RPUF9ERVFVRVVFKHBBZCwgUXVlSWR4LCBJcnFGbGFncyk7CisKKyNpZmRlZiBSVDI4NzAKKwkJaWYgKCFoYXNUeERlc2MpCisJCQlSVFVTQktpY2tCdWxrT3V0KHBBZCk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNpZmRlZiBCTE9DS19ORVRfSUYKKwkJaWYgKChwQWQtPmJsb2NrUXVldWVUYWJbUXVlSWR4XS5Td1R4UXVldWVCbG9ja0ZsYWcgPT0gVFJVRSkKKwkJCSYmIChwQWQtPlR4U3dRdWV1ZVtRdWVJZHhdLk51bWJlciA8IDEpKQorCQl7CisJCQlyZWxlYXNlTmV0SWYoJnBBZC0+YmxvY2tRdWV1ZVRhYltRdWVJZHhdKTsKKwkJfQorI2VuZGlmIC8vIEJMT0NLX05FVF9JRiAvLworCisJfQorCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNhbGN1bGF0ZXMgdGhlIGR1cmF0aW9uIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHRyYW5zbWl0IG91dCBmcmFtZXMKKwl3aXRoIGdpdmVuIHNpemUgYW5kIHNwZWNpZmllZCByYXRlLgorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJUmF0ZQkJCVRyYW5zbWl0IHJhdGUKKwkJU2l6ZQkJCUZyYW1lIHNpemUgaW4gdW5pdHMgb2YgYnl0ZQorCisJUmV0dXJuIFZhbHVlOgorCQlEdXJhdGlvbiBudW1iZXIgaW4gdW5pdHMgb2YgdXNlYworCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitVU0hPUlQJUlRNUENhbGNEdXJhdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCVJhdGUsCisJSU4JVUxPTkcJCQlTaXplKQoreworCVVMT05HCUR1cmF0aW9uID0gMDsKKworCWlmIChSYXRlIDwgUkFURV9GSVJTVF9PRkRNX1JBVEUpIC8vIENDSworCXsKKwkJaWYgKChSYXRlID4gUkFURV8xKSAmJiBPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCkpCisJCQlEdXJhdGlvbiA9IDk2OwkvLyA3MisyNCBwcmVhbWJsZStwbGNwCisJCWVsc2UKKwkJCUR1cmF0aW9uID0gMTkyOyAvLyAxNDQrNDggcHJlYW1ibGUrcGxjcAorCisJCUR1cmF0aW9uICs9IChVU0hPUlQpKChTaXplIDw8IDQpIC8gUmF0ZUlkVG81MDBLYnBzW1JhdGVdKTsKKwkJaWYgKChTaXplIDw8IDQpICUgUmF0ZUlkVG81MDBLYnBzW1JhdGVdKQorCQkJRHVyYXRpb24gKys7CisJfQorCWVsc2UgaWYgKFJhdGUgPD0gUkFURV9MQVNUX09GRE1fUkFURSkvLyBPRkRNIHJhdGVzCisJeworCQlEdXJhdGlvbiA9IDIwICsgNjsJCS8vIDE2KzQgcHJlYW1ibGUrcGxjcCArIFNpZ25hbCBFeHRlbnNpb24KKwkJRHVyYXRpb24gKz0gNCAqIChVU0hPUlQpKCgxMSArIFNpemUgKiA0KSAvIFJhdGVJZFRvNTAwS2Jwc1tSYXRlXSk7CisJCWlmICgoMTEgKyBTaXplICogNCkgJSBSYXRlSWRUbzUwMEticHNbUmF0ZV0pCisJCQlEdXJhdGlvbiArPSA0OworCX0KKwllbHNlCS8vbWltbyByYXRlCisJeworCQlEdXJhdGlvbiA9IDIwICsgNjsJCS8vIDE2KzQgcHJlYW1ibGUrcGxjcCArIFNpZ25hbCBFeHRlbnNpb24KKwl9CisKKwlyZXR1cm4gKFVTSE9SVClEdXJhdGlvbjsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2FsY3VsYXRlcyB0aGUgZHVyYXRpb24gd2hpY2ggaXMgcmVxdWlyZWQgdG8gdHJhbnNtaXQgb3V0IGZyYW1lcworCXdpdGggZ2l2ZW4gc2l6ZSBhbmQgc3BlY2lmaWVkIHJhdGUuCisKKwlBcmd1bWVudHM6CisJCXBUeFdJCQlQb2ludGVyIHRvIGhlYWQgb2YgZWFjaCBNUERVIHRvIEhXLgorCQlBY2sgCQlTZXR0aW5nIGZvciBBY2sgcmVxdWlyZW1lbnQgYml0CisJCUZyYWdtZW50CVNldHRpbmcgZm9yIEZyYWdtZW50IGJpdAorCQlSZXRyeU1vZGUJU2V0dGluZyBmb3IgcmV0cnkgbW9kZQorCQlJZnMgCQlTZXR0aW5nIGZvciBJRlMgZ2FwCisJCVJhdGUJCVNldHRpbmcgZm9yIHRyYW5zbWl0IHJhdGUKKwkJU2VydmljZSAJU2V0dGluZyBmb3Igc2VydmljZQorCQlMZW5ndGgJCUZyYW1lIGxlbmd0aAorCQlUeFByZWFtYmxlCVNob3J0IG9yIExvbmcgcHJlYW1ibGUgd2hlbiB1c2luZyBDQ0sgcmF0ZXMKKwkJUXVlSWR4IC0gMC0zLCBhY2NvcmRpbmcgdG8gODAyLjExZS9kNC40IEp1bmUvMjAwMworCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgU2VlIGFsc28gOiBCQVNtYXJ0SGFyZFRyYW5zbWl0KCkgICAgISEhCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBXcml0ZVR4V0koCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFRYV0lfU1RSVUMgCXBPdXRUeFdJLAorCUlOCUJPT0xFQU4JCQlGUkFHLAorCUlOCUJPT0xFQU4JCQlDRkFDSywKKwlJTglCT09MRUFOCQkJSW5zVGltZXN0YW1wLAorCUlOCUJPT0xFQU4gCQlBTVBEVSwKKwlJTglCT09MRUFOIAkJQWNrLAorCUlOCUJPT0xFQU4gCQlOU2VxLAkJLy8gSFcgbmV3IGEgc2VxdWVuY2UuCisJSU4JVUNIQVIJCQlCQVNpemUsCisJSU4JVUNIQVIJCQlXQ0lELAorCUlOCVVMT05HCQkJTGVuZ3RoLAorCUlOCVVDSEFSIAkJCVBJRCwKKwlJTglVQ0hBUgkJCVRJRCwKKwlJTglVQ0hBUgkJCVR4UmF0ZSwKKwlJTglVQ0hBUgkJCVR4b3Btb2RlLAorCUlOCUJPT0xFQU4JCQlDZkFjaywKKwlJTglIVFRSQU5TTUlUX1NFVFRJTkcJKnBUcmFuc21pdCkKK3sKKwlQTUFDX1RBQkxFX0VOVFJZCXBNYWMgPSBOVUxMOworCVRYV0lfU1RSVUMgCQlUeFdJOworCVBUWFdJX1NUUlVDIAlwVHhXSTsKKworCWlmIChXQ0lEIDwgTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXBNYWMgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtXQ0lEXTsKKworCS8vCisJLy8gQWx3YXlzIHVzZSBMb25nIHByZWFtYmxlIGJlZm9yZSB2ZXJpZmlhdGlvbiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzIHdlbGwuCisJLy8gVG9kbzogcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBpZiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzCisJLy8KKwlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpOworCU5kaXNaZXJvTWVtb3J5KCZUeFdJLCBUWFdJX1NJWkUpOworCXBUeFdJID0gJlR4V0k7CisKKwlwVHhXSS0+RlJBRz0gRlJBRzsKKworCXBUeFdJLT5DRkFDSyA9IENGQUNLOworCXBUeFdJLT5UUz0gSW5zVGltZXN0YW1wOworCXBUeFdJLT5BTVBEVSA9IEFNUERVOworCXBUeFdJLT5BQ0sgPSBBY2s7CisJcFR4V0ktPnR4b3A9IFR4b3Btb2RlOworCisJcFR4V0ktPk5TRVEgPSBOU2VxOworCS8vIEpvaG4gdHVuZSB0aGUgcGVyZm9ybWFjZSB3aXRoIEludGVsIENsaWVudCBpbiAyMCBNSHogcGVyZm9ybWFuY2UKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlCQVNpemUgPSBwQWQtPkNvbW1vbkNmZy5UeEJBU2l6ZTsKKworCWlmKCBCQVNpemUgPjcgKQorCQlCQVNpemUgPTc7CisJcFR4V0ktPkJBV2luU2l6ZSA9IEJBU2l6ZTsKKwlwVHhXSS0+U2hvcnRHSSA9IHBUcmFuc21pdC0+ZmllbGQuU2hvcnRHSTsKKwlwVHhXSS0+U1RCQyA9IHBUcmFuc21pdC0+ZmllbGQuU1RCQzsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCXBUeFdJLT5XaXJlbGVzc0NsaUlEID0gV0NJRDsKKwlwVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50ID0gTGVuZ3RoOworCXBUeFdJLT5QYWNrZXRJZCA9IFBJRDsKKworCS8vIElmIENDSyBvciBPRkRNLCBCVyBtdXN0IGJlIDIwCisJcFR4V0ktPkJXID0gKHBUcmFuc21pdC0+ZmllbGQuTU9ERSA8PSBNT0RFX09GRE0pID8gKEJXXzIwKSA6IChwVHJhbnNtaXQtPmZpZWxkLkJXKTsKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJaWYgKHBUeFdJLT5CVykKKwkJcFR4V0ktPkJXID0gKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uUmVjb21XaWR0aCA9PSAwKSA/IChCV18yMCkgOiAocFRyYW5zbWl0LT5maWVsZC5CVyk7CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworCisJcFR4V0ktPk1DUyA9IHBUcmFuc21pdC0+ZmllbGQuTUNTOworCXBUeFdJLT5QSFlNT0RFID0gcFRyYW5zbWl0LT5maWVsZC5NT0RFOworCXBUeFdJLT5DRkFDSyA9IENmQWNrOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJaWYgKHBNYWMpCisJeworCQlpZiAocEFkLT5Db21tb25DZmcuYk1JTU9QU0VuYWJsZSkKKwkJeworCQkJaWYgKChwTWFjLT5NbXBzTW9kZSA9PSBNTVBTX0RZTkFNSUMpICYmIChwVHJhbnNtaXQtPmZpZWxkLk1DUyA+IDcpKQorCQkJeworCQkJCS8vIER5bmFtaWMgTUlNTyBQb3dlciBTYXZlIE1vZGUKKwkJCQlwVHhXSS0+TUlNT3BzID0gMTsKKwkJCX0KKwkJCWVsc2UgaWYgKHBNYWMtPk1tcHNNb2RlID09IE1NUFNfU1RBVElDKQorCQkJeworCQkJCS8vIFN0YXRpYyBNSU1PIFBvd2VyIFNhdmUgTW9kZQorCQkJCWlmIChwVHJhbnNtaXQtPmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCAmJiBwVHJhbnNtaXQtPmZpZWxkLk1DUyA+IDcpCisJCQkJeworCQkJCQlwVHhXSS0+TUNTID0gNzsKKwkJCQkJcFR4V0ktPk1JTU9wcyA9IDA7CisJCQkJfQorCQkJfQorCQl9CisJCS8vcFR4V0ktPk1JTU9wcyA9IChwTWFjLT5Qc01vZGUgPT0gUFdSX01NUFMpPyAxOjA7CisJCWlmIChwTWFjLT5iSUFtQmFkQXRoZXJvcyAmJiAocE1hYy0+V2VwU3RhdHVzICE9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkpCisJCXsKKwkJCXBUeFdJLT5NcGR1RGVuc2l0eSA9IDc7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwVHhXSS0+TXBkdURlbnNpdHkgPSBwTWFjLT5NcGR1RGVuc2l0eTsKKwkJfQorCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCXBUeFdJLT5QYWNrZXRJZCA9IHBUeFdJLT5NQ1M7CisJTmRpc01vdmVNZW1vcnkocE91dFR4V0ksICZUeFdJLCBzaXplb2YoVFhXSV9TVFJVQykpOworfQorCisKK1ZPSUQgUlRNUFdyaXRlVHhXSV9EYXRhKAorCUlOCVBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTglPVVQgUFRYV0lfU1RSVUMJCXBUeFdJLAorCUlOCVRYX0JMSwkJCQkqcFR4QmxrKQoreworCUhUVFJBTlNNSVRfU0VUVElORwkqcFRyYW5zbWl0OworCVBNQUNfVEFCTEVfRU5UUlkJcE1hY0VudHJ5OworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCVVDSEFSCQkJCUJBU2l6ZTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCisJQVNTRVJUKHBUeFdJKTsKKworCXBUcmFuc21pdCA9IHBUeEJsay0+cFRyYW5zbWl0OworCXBNYWNFbnRyeSA9IHBUeEJsay0+cE1hY0VudHJ5OworCisKKwkvLworCS8vIEFsd2F5cyB1c2UgTG9uZyBwcmVhbWJsZSBiZWZvcmUgdmVyaWZpYXRpb24gc2hvcnQgcHJlYW1ibGUgZnVuY3Rpb25hbGl0eSB3b3JrcyB3ZWxsLgorCS8vIFRvZG86IHJlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgaWYgc2hvcnQgcHJlYW1ibGUgZnVuY3Rpb25hbGl0eSB3b3JrcworCS8vCisJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfUFJFQU1CTEVfSU5VU0VEKTsKKwlOZGlzWmVyb01lbW9yeShwVHhXSSwgVFhXSV9TSVpFKTsKKworCXBUeFdJLT5GUkFHCQk9IFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYkFsbG93RnJhZyk7CisJcFR4V0ktPkFDSwkJPSBUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JBY2tSZXF1aXJlZCk7CisJcFR4V0ktPnR4b3AJCT0gcFR4QmxrLT5GcmFtZUdhcDsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCWlmIChwTWFjRW50cnkgJiYKKwkJKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0lORlJBKSAmJgorCQkocE1hY0VudHJ5LT5WYWxpZEFzRGxzID09IFRSVUUpKQorCQlwVHhXSS0+V2lyZWxlc3NDbGlJRCA9IEJTU0lEX1dDSUQ7CisJZWxzZQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQlwVHhXSS0+V2lyZWxlc3NDbGlJRAkJPSBwVHhCbGstPldjaWQ7CisKKwlwVHhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50CT0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuICsgcFR4QmxrLT5TcmNCdWZMZW47CisJcFR4V0ktPkNGQUNLCQkJCT0gVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iUGlnZ3lCYWNrKTsKKworCS8vIElmIENDSyBvciBPRkRNLCBCVyBtdXN0IGJlIDIwCisJcFR4V0ktPkJXID0gKHBUcmFuc21pdC0+ZmllbGQuTU9ERSA8PSBNT0RFX09GRE0pID8gKEJXXzIwKSA6IChwVHJhbnNtaXQtPmZpZWxkLkJXKTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJaWYgKHBUeFdJLT5CVykKKwkJcFR4V0ktPkJXID0gKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uUmVjb21XaWR0aCA9PSAwKSA/IChCV18yMCkgOiAocFRyYW5zbWl0LT5maWVsZC5CVyk7CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworCXBUeFdJLT5BTVBEVQk9ICgocFR4QmxrLT5UeEZyYW1lVHlwZSA9PSBUWF9BTVBEVV9GUkFNRSkgPyBUUlVFIDogRkFMU0UpOworCisJLy8gSm9obiB0dW5lIHRoZSBwZXJmb3JtYWNlIHdpdGggSW50ZWwgQ2xpZW50IGluIDIwIE1IeiBwZXJmb3JtYW5jZQorCUJBU2l6ZSA9IHBBZC0+Q29tbW9uQ2ZnLlR4QkFTaXplOworCWlmKChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX0FNUERVX0ZSQU1FKSAmJiAocE1hY0VudHJ5KSkKKwl7CisJCVVDSEFSCQlSQUJBT3JpSWR4ID0gMDsJLy9UaGUgUkEncyBCQSBPcmlnaW5hdG9yIHRhYmxlIGluZGV4LgorCisJCVJBQkFPcmlJZHggPSBwVHhCbGstPnBNYWNFbnRyeS0+QkFPcmlXY2lkQXJyYXlbcFR4QmxrLT5Vc2VyUHJpb3JpdHldOworCQlCQVNpemUgPSBwQWQtPkJBVGFibGUuQkFPcmlFbnRyeVtSQUJBT3JpSWR4XS5CQVdpblNpemU7CisJfQorCisJcFR4V0ktPlR4QkYgPSBwVHJhbnNtaXQtPmZpZWxkLlR4QkY7CisJcFR4V0ktPkJBV2luU2l6ZSA9IEJBU2l6ZTsKKwlwVHhXSS0+U2hvcnRHSSA9IHBUcmFuc21pdC0+ZmllbGQuU2hvcnRHSTsKKwlwVHhXSS0+U1RCQyA9IHBUcmFuc21pdC0+ZmllbGQuU1RCQzsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCXBUeFdJLT5NQ1MgPSBwVHJhbnNtaXQtPmZpZWxkLk1DUzsKKwlwVHhXSS0+UEhZTU9ERSA9IHBUcmFuc21pdC0+ZmllbGQuTU9ERTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmIChwTWFjRW50cnkpCisJeworCQlpZiAoKHBNYWNFbnRyeS0+TW1wc01vZGUgPT0gTU1QU19EWU5BTUlDKSAmJiAocFRyYW5zbWl0LT5maWVsZC5NQ1MgPiA3KSkKKwkJeworCQkJLy8gRHluYW1pYyBNSU1PIFBvd2VyIFNhdmUgTW9kZQorCQkJcFR4V0ktPk1JTU9wcyA9IDE7CisJCX0KKwkJZWxzZSBpZiAocE1hY0VudHJ5LT5NbXBzTW9kZSA9PSBNTVBTX1NUQVRJQykKKwkJeworCQkJLy8gU3RhdGljIE1JTU8gUG93ZXIgU2F2ZSBNb2RlCisJCQlpZiAocFRyYW5zbWl0LT5maWVsZC5NT0RFID49IE1PREVfSFRNSVggJiYgcFRyYW5zbWl0LT5maWVsZC5NQ1MgPiA3KQorCQkJeworCQkJCXBUeFdJLT5NQ1MgPSA3OworCQkJCXBUeFdJLT5NSU1PcHMgPSAwOworCQkJfQorCQl9CisKKwkJaWYgKHBNYWNFbnRyeS0+YklBbUJhZEF0aGVyb3MgJiYgKHBNYWNFbnRyeS0+V2VwU3RhdHVzICE9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkpCisJCXsKKwkJCXBUeFdJLT5NcGR1RGVuc2l0eSA9IDc7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwVHhXSS0+TXBkdURlbnNpdHkgPSBwTWFjRW50cnktPk1wZHVEZW5zaXR5OworCQl9CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjaWZkZWYgREJHX0RJQUdOT1NFCisJCWlmIChwVHhCbGstPlF1ZUlkeD09IDApCisJCXsKKwkJCXBBZC0+RGlhZ1N0cnVjdC5UeERhdGFDbnRbcEFkLT5EaWFnU3RydWN0LkFycmF5Q3VySWR4XSsrOworCQkJcEFkLT5EaWFnU3RydWN0LlR4TWNzQ250W3BBZC0+RGlhZ1N0cnVjdC5BcnJheUN1cklkeF1bcFR4V0ktPk1DU10rKzsKKwkJfQorI2VuZGlmIC8vIERCR19ESUFHTk9TRSAvLworCisJLy8gZm9yIHJhdGUgYWRhcGF0aW9uCisJcFR4V0ktPlBhY2tldElkID0gcFR4V0ktPk1DUzsKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisvKkl2ZXJzb24gcGF0Y2ggZm9yIFdNTSBBNS1UMDcgLFdpcmVsZXNzU3RhVG9XaXJlbGVzc1N0YSBkbyBub3QgYnVsayBvdXQgYWdncmVnYXRlICovCisJaWYoIFJUTVBfR0VUX1BBQ0tFVF9OT0JVTEtPVVQocFR4QmxrLT5wUGFja2V0KSkKKwl7CisJCWlmKHBUeFdJLT5QSFlNT0RFID09IE1PREVfQ0NLKQorCQl7CisJCQlwVHhXSS0+UGFja2V0SWQgPSA2OworCQl9CisJfQorI2VuZGlmIC8vIElORl9BTUFaT05fU0UgLy8KK30KKworCitWT0lEIFJUTVBXcml0ZVR4V0lfQ2FjaGUoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCU9VVCBQVFhXSV9TVFJVQwkJcFR4V0ksCisJSU4JVFhfQkxLCQkJCSpwVHhCbGspCit7CisJUEhUVFJBTlNNSVRfU0VUVElORwkvKnBUeEhUUGh5TW9kZSwqLyBwVHJhbnNtaXQ7CisJUE1BQ19UQUJMRV9FTlRSWQlwTWFjRW50cnk7CisKKwkvLworCS8vIHVwZGF0ZSBUWFdJCisJLy8KKwlwTWFjRW50cnkgPSBwVHhCbGstPnBNYWNFbnRyeTsKKwlwVHJhbnNtaXQgPSBwVHhCbGstPnBUcmFuc21pdDsKKworCS8vaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfVFhfUkFURV9TV0lUQ0hfRU5BQkxFRCkpCisJLy9pZiAoUlRNUENoZWNrRW50cnlFbmFibGVBdXRvUmF0ZVN3aXRjaChwQWQsIHBNYWNFbnRyeSkpCisJLy9pZiAoVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9BdXRvUmF0ZVN3aXRjaCkpCisJaWYgKHBNYWNFbnRyeS0+YkF1dG9UeFJhdGVTd2l0Y2gpCisJeworCQlwVHhXSS0+dHhvcCA9IElGU19IVFRYT1A7CisKKwkJLy8gSWYgQ0NLIG9yIE9GRE0sIEJXIG11c3QgYmUgMjAKKwkJcFR4V0ktPkJXID0gKHBUcmFuc21pdC0+ZmllbGQuTU9ERSA8PSBNT0RFX09GRE0pID8gKEJXXzIwKSA6IChwVHJhbnNtaXQtPmZpZWxkLkJXKTsKKwkJcFR4V0ktPlNob3J0R0kgPSBwVHJhbnNtaXQtPmZpZWxkLlNob3J0R0k7CisJCXBUeFdJLT5TVEJDID0gcFRyYW5zbWl0LT5maWVsZC5TVEJDOworCisJCXBUeFdJLT5NQ1MgPSBwVHJhbnNtaXQtPmZpZWxkLk1DUzsKKwkJcFR4V0ktPlBIWU1PREUgPSBwVHJhbnNtaXQtPmZpZWxkLk1PREU7CisKKwkJLy8gc2V0IFBJRCBmb3IgVHhSYXRlU3dpdGNoaW5nCisJCXBUeFdJLT5QYWNrZXRJZCA9IHBUcmFuc21pdC0+ZmllbGQuTUNTOworCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCXBUeFdJLT5BTVBEVSA9ICgocE1hY0VudHJ5LT5Ob0JBRGF0YUNvdW50RG93biA9PSAwKSA/IFRSVUU6IEZBTFNFKTsKKwlwVHhXSS0+TUlNT3BzID0gMDsKKworI2lmZGVmIERPVDExTl9EUkFGVDMKKwlpZiAocFR4V0ktPkJXKQorCQlwVHhXSS0+QlcgPSAocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoID09IDApID8gKEJXXzIwKSA6IChwVHJhbnNtaXQtPmZpZWxkLkJXKTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKwlpZiAocEFkLT5Db21tb25DZmcuYk1JTU9QU0VuYWJsZSkKKwl7CisJCS8vIE1JTU8gUG93ZXIgU2F2ZSBNb2RlCisJCWlmICgocE1hY0VudHJ5LT5NbXBzTW9kZSA9PSBNTVBTX0RZTkFNSUMpICYmIChwVHJhbnNtaXQtPmZpZWxkLk1DUyA+IDcpKQorCQl7CisJCQkvLyBEeW5hbWljIE1JTU8gUG93ZXIgU2F2ZSBNb2RlCisJCQlwVHhXSS0+TUlNT3BzID0gMTsKKwkJfQorCQllbHNlIGlmIChwTWFjRW50cnktPk1tcHNNb2RlID09IE1NUFNfU1RBVElDKQorCQl7CisJCQkvLyBTdGF0aWMgTUlNTyBQb3dlciBTYXZlIE1vZGUKKwkJCWlmICgocFRyYW5zbWl0LT5maWVsZC5NT0RFID49IE1PREVfSFRNSVgpICYmIChwVHJhbnNtaXQtPmZpZWxkLk1DUyA+IDcpKQorCQkJeworCQkJCXBUeFdJLT5NQ1MgPSA3OworCQkJCXBUeFdJLT5NSU1PcHMgPSAwOworCQkJfQorCQl9CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjaWZkZWYgREJHX0RJQUdOT1NFCisJaWYgKHBUeEJsay0+UXVlSWR4PT0gMCkKKwl7CisJCXBBZC0+RGlhZ1N0cnVjdC5UeERhdGFDbnRbcEFkLT5EaWFnU3RydWN0LkFycmF5Q3VySWR4XSsrOworCQlwQWQtPkRpYWdTdHJ1Y3QuVHhNY3NDbnRbcEFkLT5EaWFnU3RydWN0LkFycmF5Q3VySWR4XVtwVHhXSS0+TUNTXSsrOworCX0KKyNlbmRpZiAvLyBEQkdfRElBR05PU0UgLy8KKworCXBUeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKKworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDYWxjdWxhdGVzIHRoZSBkdXJhdGlvbiB3aGljaCBpcyByZXF1aXJlZCB0byB0cmFuc21pdCBvdXQgZnJhbWVzCisJd2l0aCBnaXZlbiBzaXplIGFuZCBzcGVjaWZpZWQgcmF0ZS4KKworCUFyZ3VtZW50czoKKwkJcFR4RAkJUG9pbnRlciB0byB0cmFuc21pdCBkZXNjcmlwdG9yCisJCUFjayAJCVNldHRpbmcgZm9yIEFjayByZXF1aXJlbWVudCBiaXQKKwkJRnJhZ21lbnQJU2V0dGluZyBmb3IgRnJhZ21lbnQgYml0CisJCVJldHJ5TW9kZQlTZXR0aW5nIGZvciByZXRyeSBtb2RlCisJCUlmcyAJCVNldHRpbmcgZm9yIElGUyBnYXAKKwkJUmF0ZQkJU2V0dGluZyBmb3IgdHJhbnNtaXQgcmF0ZQorCQlTZXJ2aWNlIAlTZXR0aW5nIGZvciBzZXJ2aWNlCisJCUxlbmd0aAkJRnJhbWUgbGVuZ3RoCisJCVR4UHJlYW1ibGUJU2hvcnQgb3IgTG9uZyBwcmVhbWJsZSB3aGVuIHVzaW5nIENDSyByYXRlcworCQlRdWVJZHggLSAwLTMsIGFjY29yZGluZyB0byA4MDIuMTFlL2Q0LjQgSnVuZS8yMDAzCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBXcml0ZVR4RGVzY3JpcHRvcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVFhEX1NUUlVDCQlwVHhELAorCUlOCUJPT0xFQU4gCQliV0lWLAorCUlOCVVDSEFSCQkJUXVldWVTRUwpCit7CisJLy8KKwkvLyBBbHdheXMgdXNlIExvbmcgcHJlYW1ibGUgYmVmb3JlIHZlcmlmaWF0aW9uIHNob3J0IHByZWFtYmxlIGZ1bmN0aW9uYWxpdHkgd29ya3Mgd2VsbC4KKwkvLyBUb2RvOiByZW1vdmUgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHNob3J0IHByZWFtYmxlIGZ1bmN0aW9uYWxpdHkgd29ya3MKKwkvLworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1BSRUFNQkxFX0lOVVNFRCk7CisKKwlwVHhELT5XSVYJPSAoYldJVikgPyAxOiAwOworCXBUeEQtPlFTRUw9IChRdWV1ZVNFTCk7CisJaWYgKHBBZC0+Ykdlbk9uZUhDQ0EgPT0gVFJVRSkKKwkJcFR4RC0+UVNFTD0gRklGT19IQ0NBOworCXBUeEQtPkRNQURPTkUgPSAwOworfQorCisKKy8vIHNob3VsZCBiZSBjYWxsZWQgb25seSB3aGVuIC0KKy8vIDEuIE1FQURJQV9DT05ORUNURUQKKy8vIDIuIEFHR1JFR0FUSU9OX0lOX1VTRUQKKy8vIDMuIEZyYWdtZW50YXRpb24gbm90IGluIHVzZWQKKy8vIDQuIGVpdGhlciBubyBwcmV2aW91cyBmcmFtZSAocFByZXZBZGRyMT1OVUxMKSAuT1IuIHByZXZpb3VkIGZyYW1lIGlzIGFnZ3JlZ2F0aWJsZQorQk9PTEVBTiBUeEZyYW1lSXNBZ2dyZWdhdGlibGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcFByZXZBZGRyMSwKKwlJTglQVUNIQVIJCQlwODAyM2hkcikKK3sKKworCS8vIGNhbid0IGFnZ3JlZ2F0ZSBFQVBPTCAoODAyLjF4KSBmcmFtZQorCWlmICgocDgwMjNoZHJbMTJdID09IDB4ODgpICYmIChwODAyM2hkclsxM10gPT0gMHg4ZSkpCisJCXJldHVybiBGQUxTRTsKKworCS8vIGNhbid0IGFnZ3JlZ2F0ZSBtdWx0aWNhc3QvYnJvYWRjYXN0IGZyYW1lCisJaWYgKHA4MDIzaGRyWzBdICYgMHgwMSkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKElORlJBX09OKHBBZCkpIC8vIG11c3QgYmUgdW5pY2FzdCB0byBBUAorCQlyZXR1cm4gVFJVRTsKKwllbHNlIGlmICgocFByZXZBZGRyMSA9PSBOVUxMKSB8fCBNQUNfQUREUl9FUVVBTChwUHJldkFkZHIxLCBwODAyM2hkcikpIC8vIHVuaWNhc3QgdG8gc2FtZSBTVEEKKwkJcmV0dXJuIFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJICAgQ2hlY2sgdGhlIE1TRFUgQWdncmVnYXRpb24gcG9saWN5CisJMS5IVCBhZ2dyZWdhdGlvbiBpcyBBLU1TRFUKKwkyLmxlZ2FhY3kgcmF0ZSBhZ2dyZWdhdGlvbiBpcyBzb2Z0d2FyZSBhZ2dyZWdhdGlvbiBieSBSYWxpbmsuCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTiBQZWVySXNBZ2dyZU9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVMT05HCQkgICBUeFJhdGUsCisJSU4JUE1BQ19UQUJMRV9FTlRSWSBwTWFjRW50cnkpCit7CisJVUxPTkcJQUZsYWdzID0gKGZDTElFTlRfU1RBVFVTX0FNU0RVX0lOVVNFRCB8IGZDTElFTlRfU1RBVFVTX0FHR1JFR0FUSU9OX0NBUEFCTEUpOworCisJaWYgKHBNYWNFbnRyeSAhPSBOVUxMICYmIENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBNYWNFbnRyeSwgQUZsYWdzKSkKKwl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmIChwTWFjRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID49IE1PREVfSFRNSVgpCisJCXsKKwkJCXJldHVybiBUUlVFOworCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBBR0dSRUdBVElPTl9TVVBQT1JUCisJCWlmIChUeFJhdGUgPj0gUkFURV82ICYmIHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUgJiYgKCEoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XTU1fSU5VU0VEKSAmJiBDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwTWFjRW50cnksIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKSkpKQorCQl7CS8vIGxlZ2FjeSAgUmFsaW5rIEFnZ3JlZ2F0aW9uIHN1cHBvcnQKKwkJCXJldHVybiBUUlVFOworCQl9CisjZW5kaWYgLy8gQUdHUkVHQVRJT05fU1VQUE9SVCAvLworCX0KKworCXJldHVybiBGQUxTRTsKKworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDaGVjayBhbmQgZmluZSB0aGUgcGFja2V0IHdhaXRpbmcgaW4gU1cgcXVldWUgd2l0aCBoaWdoZXN0IHByaW9yaXR5CisKKwlBcmd1bWVudHM6CisJCXBBZCBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCXBRdWV1ZQkJUG9pbnRlciB0byBXYWl0aW5nIFF1ZXVlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitQUVVFVUVfSEVBREVSCVJUTVBDaGVja1R4U3dRdWV1ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQgUFVDSEFSCQkJcFF1ZUlkeCkKK3sKKworCVVMT05HCU51bWJlcjsKKwkvLyAyMDA0LTExLTE1IHRvIGJlIHJlbW92ZWQuIHRlc3QgYWdncmVnYXRpb24gb25seQorLy8JaWYgKChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCkpICYmICgqcE51bWJlciA8IDIpKQorLy8JCSByZXR1cm4gTlVMTDsKKworCU51bWJlciA9IHBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19CS10uTnVtYmVyCisJCQkgKyBwQWQtPlR4U3dRdWV1ZVtRSURfQUNfQkVdLk51bWJlcgorCQkJICsgcEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZJXS5OdW1iZXIKKwkJCSArIHBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19WT10uTnVtYmVyCisJCQkgKyBwQWQtPlR4U3dRdWV1ZVtRSURfSENDQV0uTnVtYmVyOworCisJaWYgKHBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19WT10uSGVhZCAhPSBOVUxMKQorCXsKKwkJKnBRdWVJZHggPSBRSURfQUNfVk87CisJCXJldHVybiAoJnBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19WT10pOworCX0KKwllbHNlIGlmIChwQWQtPlR4U3dRdWV1ZVtRSURfQUNfVkldLkhlYWQgIT0gTlVMTCkKKwl7CisJCSpwUXVlSWR4ID0gUUlEX0FDX1ZJOworCQlyZXR1cm4gKCZwQWQtPlR4U3dRdWV1ZVtRSURfQUNfVkldKTsKKwl9CisJZWxzZSBpZiAocEFkLT5UeFN3UXVldWVbUUlEX0FDX0JFXS5IZWFkICE9IE5VTEwpCisJeworCQkqcFF1ZUlkeCA9IFFJRF9BQ19CRTsKKwkJcmV0dXJuICgmcEFkLT5UeFN3UXVldWVbUUlEX0FDX0JFXSk7CisJfQorCWVsc2UgaWYgKHBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19CS10uSGVhZCAhPSBOVUxMKQorCXsKKwkJKnBRdWVJZHggPSBRSURfQUNfQks7CisJCXJldHVybiAoJnBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19CS10pOworCX0KKwllbHNlIGlmIChwQWQtPlR4U3dRdWV1ZVtRSURfSENDQV0uSGVhZCAhPSBOVUxMKQorCXsKKwkJKnBRdWVJZHggPSBRSURfSENDQTsKKwkJcmV0dXJuICgmcEFkLT5UeFN3UXVldWVbUUlEX0hDQ0FdKTsKKwl9CisKKwkvLyBObyBwYWNrZXQgcGVuZGluZyBpbiBUeCBTdyBxdWV1ZQorCSpwUXVlSWR4ID0gUUlEX0FDX0JLOworCisJcmV0dXJuIChOVUxMKTsKK30KKworCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlTdXNwZW5kIE1TRFUgdHJhbnNtaXNzaW9uCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QU3VzcGVuZE1zZHVUcmFuc21pc3Npb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTQ0FOTklORywgc3VzcGVuZCBNU0RVIHRyYW5zbWlzc2lvbiAuLi5cbiIpKTsKKworCisJLy8KKwkvLyBCZWZvcmUgQlNTX1NDQU5fSU5fUFJPR1JFU1MsIHdlIG5lZWQgdG8ga2VlcCBDdXJyZW50IFI2NiB2YWx1ZSBhbmQKKwkvLyB1c2UgTG93Ym91bmQgYXMgUjY2IHZhbHVlIG9uIFNjYW5OZXh0Q2hhbm5lbCguLi4pCisJLy8KKwlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCAmcEFkLT5CYnBUdW5pbmcuUjY2Q3VycmVudFZhbHVlKTsKKworCS8vIHNldCBCQlBfUjY2IHRvIDB4MzAvMHg0MCB3aGVuIHNjYW5uaW5nIChBc2ljU3dpdGNoQ2hhbm5lbCB3aWxsIHNldCBSNjYgYWNjb3JkaW5nIHRvIGNoYW5uZWwgd2hlbiBzY2FubmluZykKKwkvL1JUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCAoMHgyNiArIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJUlRNUFNldEFHQ0luaXRWYWx1ZShwQWQsIEJXXzIwKTsKKworCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKTsKKwkvL1JUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0NOVExfQ1NSLCAweDAwMGYwMDAwKTsJCS8vIGFib3J0IGFsbCBUWCByaW5ncworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlSZXN1bWUgTVNEVSB0cmFuc21pc3Npb24KKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUFJlc3VtZU1zZHVUcmFuc21pc3Npb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisvLyAgICBVQ0hBUgkJCUlycVN0YXRlOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTQ0FOIGRvbmUsIHJlc3VtZSBNU0RVIHRyYW5zbWlzc2lvbiAuLi5cbiIpKTsKKworCisJLy8gQWZ0ZXIgZmluaXNoIEJTU19TQ0FOX0lOX1BST0dSRVNTLCB3ZSBuZWVkIHRvIHJlc3RvcmUgQ3VycmVudCBSNjYgdmFsdWUKKwkvLyBSNjYgc2hvdWxkIG5vdCBiZSAwCisJaWYgKHBBZC0+QmJwVHVuaW5nLlI2NkN1cnJlbnRWYWx1ZSA9PSAwKQorCXsKKwkJcEFkLT5CYnBUdW5pbmcuUjY2Q3VycmVudFZhbHVlID0gMHgzODsKKwkJREJHUFJJTlRfRVJSKCgiUlRNUFJlc3VtZU1zZHVUcmFuc21pc3Npb24sIFI2NkN1cnJlbnRWYWx1ZT0wLi4uXG4iKSk7CisJfQorCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUpOworCisJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyk7CisvLyBzYW1wbGUsIGZvciBJUlEgTE9DSyB0byBTRU0gTE9DSworLy8gICAgSXJxU3RhdGUgPSBwQWQtPmlycV9kaXNhYmxlZDsKKy8vCWlmIChJcnFTdGF0ZSkKKy8vCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIFRSVUUsIE5VTV9PRl9UWF9SSU5HLCBNQVhfVFhfUFJPQ0VTUyk7CisvLyAgICBlbHNlCisJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsKK30KKworCitVSU5UIGRlYWdncmVnYXRlX0FNU0RVX2Fubm91bmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCVBORElTX1BBQ0tFVAkJcFBhY2tldCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplKQoreworCVVTSE9SVCAJCQlQYXlsb2FkU2l6ZTsKKwlVU0hPUlQgCQkJU3ViRnJhbWVTaXplOworCVBIRUFERVJfODAyXzMgCXBBTVNEVXN1YmhlYWRlcjsKKwlVSU5UCQkJbk1TRFU7CisgICAgVUNIQVIJCQlIZWFkZXI4MDJfM1sxNF07CisKKwlQVUNIQVIJCQlwUGF5bG9hZCwgcERBLCBwU0EsIHBSZW1vdmVkTExDU05BUDsKKwlQTkRJU19QQUNLRVQJcENsb25lUGFja2V0OworCisKKworCW5NU0RVID0gMDsKKworCXdoaWxlIChEYXRhU2l6ZSA+IExFTkdUSF84MDJfMykKKwl7CisKKwkJbk1TRFUrKzsKKworCQkvL2hleF9kdW1wKCJzdWJoZWFkZXIiLCBwRGF0YSwgNjQpOworCQlwQU1TRFVzdWJoZWFkZXIgPSAoUEhFQURFUl84MDJfMylwRGF0YTsKKwkJLy9wRGF0YSArPSBMRU5HVEhfODAyXzM7CisJCVBheWxvYWRTaXplID0gcEFNU0RVc3ViaGVhZGVyLT5PY3RldFsxXSArIChwQU1TRFVzdWJoZWFkZXItPk9jdGV0WzBdPDw4KTsKKwkJU3ViRnJhbWVTaXplID0gUGF5bG9hZFNpemUgKyBMRU5HVEhfODAyXzM7CisKKworCQlpZiAoKERhdGFTaXplIDwgU3ViRnJhbWVTaXplKSB8fCAoUGF5bG9hZFNpemUgPiAxNTE4ICkpCisJCXsKKwkJCWJyZWFrOworCQl9CisKKwkJLy9wcmludGsoIiVkIHN1YmZyYW1lOiBTaXplID0gJWRcbiIsICBuTVNEVSwgUGF5bG9hZFNpemUpOworCisJCXBQYXlsb2FkID0gcERhdGEgKyBMRU5HVEhfODAyXzM7CisJCXBEQSA9IHBEYXRhOworCQlwU0EgPSBwRGF0YSArIE1BQ19BRERSX0xFTjsKKworCQkvLyBjb252ZXJ0IHRvIDgwMi4zIGhlYWRlcgorICAgICAgICBDT05WRVJUX1RPXzgwMl8zKEhlYWRlcjgwMl8zLCBwREEsIHBTQSwgcFBheWxvYWQsIFBheWxvYWRTaXplLCBwUmVtb3ZlZExMQ1NOQVApOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCWlmICgoSGVhZGVyODAyXzNbMTJdID09IDB4ODgpICYmIChIZWFkZXI4MDJfM1sxM10gPT0gMHg4RSkgKQorCQl7CisJCSAgICAvLyBhdm9pZCBsb2NhbCBoZWFwIG92ZXJmbG93LCB1c2UgZHlhbmFtaWMgYWxsb2NhdGlvbgorCQkgICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0gPSAoTUxNRV9RVUVVRV9FTEVNICopIGttYWxsb2Moc2l6ZW9mKE1MTUVfUVVFVUVfRUxFTSksIE1FTV9BTExPQ19GTEFHKTsKKwkJICAgbWVtbW92ZShFbGVtLT5Nc2crKExFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSCksIHBQYXlsb2FkLCBQYXlsb2FkU2l6ZSk7CisJCSAgIEVsZW0tPk1zZ0xlbiA9IExFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSCArIFBheWxvYWRTaXplOworCQkgICBXcGFFQVBPTEtleUFjdGlvbihwQWQsIEVsZW0pOworCQkgICBrZnJlZShFbGVtKTsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkgICAgICAgIAlpZiAocFJlbW92ZWRMTENTTkFQKQorCSAgICAgICAgCXsKKwkgICAgCQkJcFBheWxvYWQgLT0gTEVOR1RIXzgwMl8zOworCSAgICAJCQlQYXlsb2FkU2l6ZSArPSBMRU5HVEhfODAyXzM7CisJICAgIAkJCU5kaXNNb3ZlTWVtb3J5KHBQYXlsb2FkLCAmSGVhZGVyODAyXzNbMF0sIExFTkdUSF84MDJfMyk7CisJICAgICAgICAJfQorCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJcENsb25lUGFja2V0ID0gQ2xvbmVQYWNrZXQocEFkLCBwUGFja2V0LCBwUGF5bG9hZCwgUGF5bG9hZFNpemUpOworCQlpZiAocENsb25lUGFja2V0KQorCQl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCUFOTk9VTkNFX09SX0ZPUldBUkRfODAyXzNfUEFDS0VUKHBBZCwgcENsb25lUGFja2V0LCBSVE1QX0dFVF9QQUNLRVRfSUYocFBhY2tldCkpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQl9CisKKworCQkvLyBBLU1TRFUgaGFzIHBhZGRpbmcgdG8gbXVsdGlwbGUgb2YgNCBpbmNsdWRpbmcgc3ViZnJhbWUgaGVhZGVyLgorCQkvLyBhbGlnbiBTdWJGcmFtZVNpemUgdXAgdG8gbXVsdGlwbGUgb2YgNAorCQlTdWJGcmFtZVNpemUgPSAoU3ViRnJhbWVTaXplKzMpJih+MHgzKTsKKworCisJCWlmIChTdWJGcmFtZVNpemUgPiAxNTI4IHx8IFN1YkZyYW1lU2l6ZSA8IDMyKQorCQl7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChEYXRhU2l6ZSA+IFN1YkZyYW1lU2l6ZSkKKwkJeworCQkJcERhdGEgKz0gU3ViRnJhbWVTaXplOworCQkJRGF0YVNpemUgLT0gU3ViRnJhbWVTaXplOworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gZW5kIG9mIEEtTVNEVQorCQkJRGF0YVNpemUgPSAwOworCQl9CisJfQorCisJLy8gZmluYWxseSByZWxlYXNlIG9yaWdpbmFsIHJ4IHBhY2tldAorCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LCBORElTX1NUQVRVU19TVUNDRVNTKTsKKworCXJldHVybiBuTVNEVTsKK30KKworCitVSU5UIEJBX1Jlb3JkZXJfQU1TRFVfQW5ubm91bmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KQoreworCVBVQ0hBUgkJCXBEYXRhOworCVVTSE9SVAkJCURhdGFTaXplOworCVVJTlQJCQluTVNEVSA9IDA7CisKKwlwRGF0YSA9IChQVUNIQVIpIEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KTsKKwlEYXRhU2l6ZSA9IChVU0hPUlQpIEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOworCisJbk1TRFUgPSBkZWFnZ3JlZ2F0ZV9BTVNEVV9hbm5vdW5jZShwQWQsIHBQYWNrZXQsIHBEYXRhLCBEYXRhU2l6ZSk7CisKKwlyZXR1cm4gbk1TRFU7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlMb29rIHVwIHRoZSBNQUMgYWRkcmVzcyBpbiB0aGUgTUFDIHRhYmxlLiBSZXR1cm4gTlVMTCBpZiBub3QgZm91bmQuCisJUmV0dXJuOgorCQlwRW50cnkgLSBwb2ludGVyIHRvIHRoZSBNQUMgZW50cnk7IE5VTEwgaXMgbm90IGZvdW5kCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitNQUNfVEFCTEVfRU5UUlkgKk1hY1RhYmxlTG9va3VwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCVBVQ0hBUiBwQWRkcikKK3sKKwlVTE9ORyBIYXNoSWR4OworCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5ID0gTlVMTDsKKworCUhhc2hJZHggPSBNQUNfQUREUl9IQVNIX0lOREVYKHBBZGRyKTsKKwlwRW50cnkgPSBwQWQtPk1hY1RhYi5IYXNoW0hhc2hJZHhdOworCisJd2hpbGUgKHBFbnRyeSAmJiAocEVudHJ5LT5WYWxpZEFzQ0xJIHx8IHBFbnRyeS0+VmFsaWRBc1dEUyB8fCBwRW50cnktPlZhbGlkQXNBcENsaSB8fCBwRW50cnktPlZhbGlkQXNNZXNoKSkKKwl7CisJCWlmIChNQUNfQUREUl9FUVVBTChwRW50cnktPkFkZHIsIHBBZGRyKSkKKwkJeworCQkJYnJlYWs7CisJCX0KKwkJZWxzZQorCQkJcEVudHJ5ID0gcEVudHJ5LT5wTmV4dDsKKwl9CisKKwlyZXR1cm4gcEVudHJ5OworfQorCitNQUNfVEFCTEVfRU5UUlkgKk1hY1RhYmxlSW5zZXJ0RW50cnkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUgkJCXBBZGRyLAorCUlOCVVDSEFSCQkJYXBpZHgsCisJSU4gQk9PTEVBTglDbGVhbkFsbCkKK3sKKwlVQ0hBUiBIYXNoSWR4OworCWludCBpLCBGaXJzdFdjaWQ7CisJTUFDX1RBQkxFX0VOVFJZICpwRW50cnkgPSBOVUxMLCAqcEN1cnJFbnRyeTsKKy8vCVVTSE9SVAlvZmZzZXQ7CisvLwlVTE9ORwlhZGRyOworCisJLy8gaWYgRlVMTCwgcmV0dXJuCisJaWYgKHBBZC0+TWFjVGFiLlNpemUgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXJldHVybiBOVUxMOworCisJRmlyc3RXY2lkID0gMTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19JTkZSQSkKKwkJRmlyc3RXY2lkID0gMjsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIGFsbG9jYXRlIG9uZSBNQUMgZW50cnkKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCWZvciAoaSA9IEZpcnN0V2NpZDsgaTwgTUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykgICAvLyBza2lwIGVudHJ5IzAgc28gdGhhdCAiZW50cnkgaW5kZXggPT0gQUlEIiBmb3IgZmFzdCBsb29rdXAKKwl7CisJCS8vIHBpY2sgdXAgdGhlIGZpcnN0IGF2YWlsYWJsZSB2YWNhbmN5CisJCWlmICgocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzQ0xJID09IEZBTFNFKSAmJgorCQkJKHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uVmFsaWRBc1dEUyA9PSBGQUxTRSkgJiYKKwkJCShwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNBcENsaT09IEZBTFNFKSAmJgorCQkJKHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uVmFsaWRBc01lc2ggPT0gRkFMU0UpCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQkmJiAocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzRGxzID09IEZBTFNFKQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJKQorCQl7CisJCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtpXTsKKwkJCWlmIChDbGVhbkFsbCA9PSBUUlVFKQorCQkJeworCQkJCXBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTE7CisJCQkJcEVudHJ5LT5DdXJyVHhSYXRlID0gUkFURV8xMTsKKwkJCQlOZGlzWmVyb01lbW9yeShwRW50cnksIHNpemVvZihNQUNfVEFCTEVfRU5UUlkpKTsKKwkJCQlwRW50cnktPlBhaXJ3aXNlS2V5LktleUxlbiA9IDA7CisJCQkJcEVudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKwkJCX0KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCWlmIChhcGlkeCA+PSBNSU5fTkVUX0RFVklDRV9GT1JfRExTKQorCQkJeworCQkJCXBFbnRyeS0+VmFsaWRBc0NMSSA9IEZBTFNFOworCQkJCXBFbnRyeS0+VmFsaWRBc1dEUyA9IEZBTFNFOworCQkJCXBFbnRyeS0+VmFsaWRBc0FwQ2xpID0gRkFMU0U7CisJCQkJcEVudHJ5LT5WYWxpZEFzTWVzaCA9IEZBTFNFOworCQkJCXBFbnRyeS0+VmFsaWRBc0RscyA9IFRSVUU7CisJCQkJcEVudHJ5LT5pc0NhY2hlZCA9IEZBTFNFOworCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJeworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQl7CisJCQkJCXBFbnRyeS0+VmFsaWRBc0NMSSA9IFRSVUU7CisJCQkJCXBFbnRyeS0+VmFsaWRBc1dEUyA9IEZBTFNFOworCQkJCQlwRW50cnktPlZhbGlkQXNBcENsaSA9IEZBTFNFOworCQkJCQlwRW50cnktPlZhbGlkQXNNZXNoID0gRkFMU0U7CisJCQkJCXBFbnRyeS0+VmFsaWRBc0RscyA9IEZBTFNFOworCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCX0KKworCQkJcEVudHJ5LT5iSUFtQmFkQXRoZXJvcyA9IEZBTFNFOworCQkJcEVudHJ5LT5wQWQgPSBwQWQ7CisJCQlwRW50cnktPkNNVGltZXJSdW5uaW5nID0gRkFMU0U7CisJCQlwRW50cnktPkVucXVldWVFYXBvbFN0YXJ0VGltZXJSdW5uaW5nID0gRUFQT0xfU1RBUlRfRElTQUJMRTsKKwkJCXBFbnRyeS0+UlNOSUVfTGVuID0gMDsKKwkJCU5kaXNaZXJvTWVtb3J5KHBFbnRyeS0+Ul9Db3VudGVyLCBzaXplb2YocEVudHJ5LT5SX0NvdW50ZXIpKTsKKwkJCXBFbnRyeS0+UmVUcnlDb3VudGVyID0gUEVFUl9NU0cxX1JFVFJZX1RJTUVSX0NUUjsKKworCQkJaWYgKHBFbnRyeS0+VmFsaWRBc01lc2gpCisJCQkJcEVudHJ5LT5hcGlkeCA9IChhcGlkeCAtIE1JTl9ORVRfREVWSUNFX0ZPUl9NRVNIKTsKKwkJCWVsc2UgaWYgKHBFbnRyeS0+VmFsaWRBc0FwQ2xpKQorCQkJCXBFbnRyeS0+YXBpZHggPSAoYXBpZHggLSBNSU5fTkVUX0RFVklDRV9GT1JfQVBDTEkpOworCQkJZWxzZSBpZiAocEVudHJ5LT5WYWxpZEFzV0RTKQorCQkJCXBFbnRyeS0+YXBpZHggPSAoYXBpZHggLSBNSU5fTkVUX0RFVklDRV9GT1JfV0RTKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCWVsc2UgaWYgKHBFbnRyeS0+VmFsaWRBc0RscykKKwkJCQlwRW50cnktPmFwaWR4ID0gKGFwaWR4IC0gTUlOX05FVF9ERVZJQ0VfRk9SX0RMUyk7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQllbHNlCisJCQkJcEVudHJ5LT5hcGlkeCA9IGFwaWR4OworCisJCQl7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCXsKKwkJCQkJcEVudHJ5LT5BdXRoTW9kZSA9IHBBZC0+U3RhQ2ZnLkF1dGhNb2RlOworCQkJCQlwRW50cnktPldlcFN0YXR1cyA9IHBBZC0+U3RhQ2ZnLldlcFN0YXR1czsKKwkJCQkJcEVudHJ5LT5Qcml2YWN5RmlsdGVyID0gTmRpczgwMl8xMVByaXZGaWx0ZXJBY2NlcHRBbGw7CisJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJfQorCisJCQlwRW50cnktPkdUS1N0YXRlID0gUkVLRVlfTkVHT1RJQVRJTkc7CisJCQlwRW50cnktPlBhaXJ3aXNlS2V5LktleUxlbiA9IDA7CisJCQlwRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkJaWYgKHBFbnRyeS0+VmFsaWRBc0RscyA9PSBUUlVFKQorCQkJCXBFbnRyeS0+UG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwkJCWVsc2UKKyNlbmRpZiAvL1FPU19ETFNfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJcEVudHJ5LT5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwkJCXBFbnRyeS0+UE1LSURfQ2FjaGVJZHggPSBFTlRSWV9OT1RfRk9VTkQ7CisJCQlDT1BZX01BQ19BRERSKHBFbnRyeS0+QWRkciwgcEFkZHIpOworCQkJcEVudHJ5LT5Tc3QgPSBTU1RfTk9UX0FVVEg7CisJCQlwRW50cnktPkF1dGhTdGF0ZSA9IEFTX05PVF9BVVRIOworCQkJcEVudHJ5LT5BaWQgPSAoVVNIT1JUKWk7ICAvLzA7CisJCQlwRW50cnktPkNhcGFiaWxpdHlJbmZvID0gMDsKKwkJCXBFbnRyeS0+UHNNb2RlID0gUFdSX0FDVElWRTsKKwkJCXBFbnRyeS0+UHNRSWRsZUNvdW50ID0gMDsKKwkJCXBFbnRyeS0+Tm9EYXRhSWRsZUNvdW50ID0gMDsKKwkJCXBFbnRyeS0+Q29udGludWVUeEZhaWxDbnQgPSAwOworCQkJSW5pdGlhbGl6ZVF1ZXVlSGVhZGVyKCZwRW50cnktPlBzUXVldWUpOworCisKKwkJCXBBZC0+TWFjVGFiLlNpemUgKys7CisKKwkJCS8vIEFkZCB0aGlzIGVudHJ5IGludG8gQVNJQyBSWCBXQ0lEIHNlYXJjaCB0YWJsZQorCQkJUlQyOFhYX1NUQV9FTlRSWV9BREQocEFkLCBwRW50cnkpOworCisKKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWFjVGFibGVJbnNlcnRFbnRyeSAtIGFsbG9jYXRlIGVudHJ5ICMlZCwgVG90YWw9ICVkXG4iLGksIHBBZC0+TWFjVGFiLlNpemUpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLy8gYWRkIHRoaXMgTUFDIGVudHJ5IGludG8gSEFTSCB0YWJsZQorCWlmIChwRW50cnkpCisJeworCQlIYXNoSWR4ID0gTUFDX0FERFJfSEFTSF9JTkRFWChwQWRkcik7CisJCWlmIChwQWQtPk1hY1RhYi5IYXNoW0hhc2hJZHhdID09IE5VTEwpCisJCXsKKwkJCXBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF0gPSBwRW50cnk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwQ3VyckVudHJ5ID0gcEFkLT5NYWNUYWIuSGFzaFtIYXNoSWR4XTsKKwkJCXdoaWxlIChwQ3VyckVudHJ5LT5wTmV4dCAhPSBOVUxMKQorCQkJCXBDdXJyRW50cnkgPSBwQ3VyckVudHJ5LT5wTmV4dDsKKwkJCXBDdXJyRW50cnktPnBOZXh0ID0gcEVudHJ5OworCQl9CisJfQorCisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKwlyZXR1cm4gcEVudHJ5OworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCURlbGV0ZSBhIHNwZWNpZmllZCBjbGllbnQgZnJvbSBNQUMgdGFibGUKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIE1hY1RhYmxlRGVsZXRlRW50cnkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIHdjaWQsCisJSU4gUFVDSEFSIHBBZGRyKQoreworCVVTSE9SVCBIYXNoSWR4OworCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5LCAqcFByZXZFbnRyeSwgKnBQcm9iZUVudHJ5OworCUJPT0xFQU4gQ2FuY2VsbGVkOworCS8vVVNIT1JUCW9mZnNldDsJLy8gdW51c2VkIHZhcmlhYmxlCisJLy9VQ0hBUglqOwkJCS8vIHVudXNlZCB2YXJpYWJsZQorCisJaWYgKHdjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpCisJCXJldHVybiBGQUxTRTsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisKKwlIYXNoSWR4ID0gTUFDX0FERFJfSEFTSF9JTkRFWChwQWRkcik7CisJLy9wRW50cnkgPSBwQWQtPk1hY1RhYi5IYXNoW0hhc2hJZHhdOworCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W3djaWRdOworCisJaWYgKHBFbnRyeSAmJiAocEVudHJ5LT5WYWxpZEFzQ0xJIHx8IHBFbnRyeS0+VmFsaWRBc0FwQ2xpIHx8IHBFbnRyeS0+VmFsaWRBc1dEUyB8fCBwRW50cnktPlZhbGlkQXNNZXNoCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisgCQl8fCBwRW50cnktPlZhbGlkQXNEbHMKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJKSkKKwl7CisJCWlmIChNQUNfQUREUl9FUVVBTChwRW50cnktPkFkZHIsIHBBZGRyKSkKKwkJeworCisJCQkvLyBEZWxldGUgdGhpcyBlbnRyeSBmcm9tIEFTSUMgb24tY2hpcCBXQ0lEIFRhYmxlCisJCQlSVDI4WFhfU1RBX0VOVFJZX01BQ19SRVNFVChwQWQsIHdjaWQpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkvLyBmcmVlIHJlc291cmNlcyBvZiBCQQorCQkJQkFTZXNzaW9uVGVhckRvd25BTEwocEFkLCBwRW50cnktPkFpZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKworCQkJcFByZXZFbnRyeSA9IE5VTEw7CisJCQlwUHJvYmVFbnRyeSA9IHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF07CisJCQlBU1NFUlQocFByb2JlRW50cnkpOworCisJCQkvLyB1cGRhdGUgSGFzaCBsaXN0CisJCQlkbworCQkJeworCQkJCWlmIChwUHJvYmVFbnRyeSA9PSBwRW50cnkpCisJCQkJeworCQkJCQlpZiAocFByZXZFbnRyeSA9PSBOVUxMKQorCQkJCQl7CisJCQkJCQlwQWQtPk1hY1RhYi5IYXNoW0hhc2hJZHhdID0gcEVudHJ5LT5wTmV4dDsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBQcmV2RW50cnktPnBOZXh0ID0gcEVudHJ5LT5wTmV4dDsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlwUHJldkVudHJ5ID0gcFByb2JlRW50cnk7CisJCQkJcFByb2JlRW50cnkgPSBwUHJvYmVFbnRyeS0+cE5leHQ7CisJCQl9IHdoaWxlIChwUHJvYmVFbnRyeSk7CisKKwkJCS8vIG5vdCBmb3VuZCAhISEKKwkJCUFTU0VSVChwUHJvYmVFbnRyeSAhPSBOVUxMKTsKKworCQkJUlQyOFhYX1NUQV9FTlRSWV9LRVlfREVMKHBBZCwgQlNTMCwgd2NpZCk7CisKKworCQlpZiAocEVudHJ5LT5FbnF1ZXVlRWFwb2xTdGFydFRpbWVyUnVubmluZyAhPSBFQVBPTF9TVEFSVF9ESVNBQkxFKQorCQl7CisJCQlSVE1QQ2FuY2VsVGltZXIoJnBFbnRyeS0+RW5xdWV1ZVN0YXJ0Rm9yUFNLVGltZXIsICZDYW5jZWxsZWQpOworCQkJcEVudHJ5LT5FbnF1ZXVlRWFwb2xTdGFydFRpbWVyUnVubmluZyA9IEVBUE9MX1NUQVJUX0RJU0FCTEU7CisJCX0KKworCisgICAJCQlOZGlzWmVyb01lbW9yeShwRW50cnksIHNpemVvZihNQUNfVEFCTEVfRU5UUlkpKTsKKwkJCXBBZC0+TWFjVGFiLlNpemUgLS07CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNYWNUYWJsZURlbGV0ZUVudHJ5MSAtIFRvdGFsPSAlZFxuIiwgcEFkLT5NYWNUYWIuU2l6ZSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJcHJpbnRrKCJcbiVzOiBJbXBvc3NpYmxlIFdjaWQgPSAlZCAhISEhIVxuIiwgX19GVU5DVElPTl9fLCB3Y2lkKTsKKwkJfQorCX0KKworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisKKwkvL1Jlc2V0IG9wZXJhdGluZyBtb2RlIHdoZW4gbm8gU3RhLgorCWlmIChwQWQtPk1hY1RhYi5TaXplID09IDApCisJeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUgPSAwOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkvL0FzaWNVcGRhdGVQcm90ZWN0KHBBZCwgMCAvKnBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSovLCAoQUxMTl9TRVRQUk9URUNUKSwgVFJVRSwgMCAvKnBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uTm9uR0YqLyk7CisJCVJUMjhYWF9VUERBVEVfUFJPVEVDVChwQWQpOyAgLy8gZWRpdCBieSBqb2hubGksIGZpeCAiaW5faW50ZXJydXB0IiBlcnJvciB3aGVuIGNhbGwgIk1hY1RhYmxlRGVsZXRlRW50cnkiIGluIFJ4IHRhc2tsZXQKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSByZXNldCB0aGUgZW50aXJlIE1BQyB0YWJsZS4gQWxsIHBhY2tldHMgcGVuZGluZyBpbgorCQl0aGUgcG93ZXItc2F2aW5nIHF1ZXVlcyBhcmUgZnJlZWQgaGVyZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1hY1RhYmxlUmVzZXQoCisJSU4gIFBSVE1QX0FEQVBURVIgIHBBZCkKK3sKKwlpbnQgICAgICAgICBpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWFjVGFibGVSZXNldFxuIikpOworCS8vTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCWZvciAoaT0xOyBpPE1BWF9MRU5fT0ZfTUFDX1RBQkxFOyBpKyspCisJeworCQlpZiAocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzQ0xJID09IFRSVUUpCisJICAgeworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkvLyBmcmVlIHJlc291cmNlcyBvZiBCQQorCQkJQkFTZXNzaW9uVGVhckRvd25BTEwocEFkLCBpKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkJcEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzQ0xJID0gRkFMU0U7CisKKworCisjaWZkZWYgUlQyODcwCisJCQlOZGlzWmVyb01lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W2ldLkFkZHIsIDYpOworCQkJUlQyOFhYX1NUQV9FTlRSWV9NQUNfUkVTRVQocEFkLCBpKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCQkJLy9Bc2ljRGVsV2NpZFRhYihwQWQsIGkpOworCQl9CisJfQorCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBBc3NvY1Bhcm1GaWxsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE9VVCBNTE1FX0FTU09DX1JFUV9TVFJVQ1QgKkFzc29jUmVxLAorCUlOIFBVQ0hBUiAgICAgICAgICAgICAgICAgICAgIHBBZGRyLAorCUlOIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIENhcGFiaWxpdHlJbmZvLAorCUlOIFVMT05HICAgICAgICAgICAgICAgICAgICAgIFRpbWVvdXQsCisJSU4gVVNIT1JUICAgICAgICAgICAgICAgICAgICAgTGlzdGVuSW50dikKK3sKKwlDT1BZX01BQ19BRERSKEFzc29jUmVxLT5BZGRyLCBwQWRkcik7CisJLy8gQWRkIG1hc2sgdG8gc3VwcG9ydCA4MDIuMTFiIG1vZGUgb25seQorCUFzc29jUmVxLT5DYXBhYmlsaXR5SW5mbyA9IENhcGFiaWxpdHlJbmZvICYgU1VQUE9SVEVEX0NBUEFCSUxJVFlfSU5GTzsgLy8gbm90IGNmLXBvbGxhYmxlLCBub3QgY2YtcG9sbC1yZXF1ZXN0CisJQXNzb2NSZXEtPlRpbWVvdXQgPSBUaW1lb3V0OworCUFzc29jUmVxLT5MaXN0ZW5JbnR2ID0gTGlzdGVuSW50djsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBEaXNhc3NvY1Bhcm1GaWxsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE9VVCBNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QgKkRpc2Fzc29jUmVxLAorCUlOIFBVQ0hBUiBwQWRkciwKKwlJTiBVU0hPUlQgUmVhc29uKQoreworCUNPUFlfTUFDX0FERFIoRGlzYXNzb2NSZXEtPkFkZHIsIHBBZGRyKTsKKwlEaXNhc3NvY1JlcS0+UmVhc29uID0gUmVhc29uOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDaGVjayB0aGUgb3V0IGdvaW5nIGZyYW1lLCBpZiB0aGlzIGlzIGFuIERIQ1Agb3IgQVJQIGRhdGFncmFtCisJd2lsbCBiZSBkdXBsaWNhdGUgYW5vdGhlciBmcmFtZSBhdCBsb3cgZGF0YSByYXRlIHRyYW5zbWl0LgorCisJQXJndW1lbnRzOgorCQlwQWQgCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBQYWNrZXQgCVBvaW50ZXIgdG8gb3V0Z29pbmcgTmRpcyBmcmFtZQorCisJUmV0dXJuIFZhbHVlOgorCQlUUlVFCQlUbyBiZSBkdXBsaWNhdGUgYXQgTG93IGRhdGEgcmF0ZSB0cmFuc21pdC4gKDFtYikKKwkJRkFMU0UJCURvIG5vdGhpbmcuCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwkJTUFDIGhlYWRlciArIElQIEhlYWRlciArIFVEUCBIZWFkZXIKKwkJICAxNCBCeXRlcwkgIDIwIEJ5dGVzCisKKwkJVURQIEhlYWRlcgorCQkwMHwwMXwwMnwwM3wwNHwwNXwwNnwwN3wwOHwwOXwxMHwxMXwxMnwxM3wxNHwxNXwKKwkJCQkJCVNvdXJjZSBQb3J0CisJCTE2fDE3fDE4fDE5fDIwfDIxfDIyfDIzfDI0fDI1fDI2fDI3fDI4fDI5fDMwfDMxfAorCQkJCQlEZXN0aW5hdGlvbiBQb3J0CisKKwkJcG9ydCAweDQzIG1lYW5zIEJvb3RzdHJhcCBQcm90b2NvbCwgc2VydmVyLgorCQlQb3J0IDB4NDQgbWVhbnMgQm9vdHN0cmFwIFByb3RvY29sLCBjbGllbnQuCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKK0JPT0xFQU4gUlRNUENoZWNrREhDUEZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KQoreworCVBBQ0tFVF9JTkZPIAlQYWNrZXRJbmZvOworCVVMT05HCQkJTnVtYmVyT2ZCeXRlc1JlYWQgPSAwOworCVVMT05HCQkJQ3VycmVudE9mZnNldCA9IDA7CisJUFZPSUQJCQlwVmlydHVhbEFkZHJlc3MgPSBOVUxMOworCVVJTlQJCQlOZGlzQnVmZmVyTGVuZ3RoOworCVBVQ0hBUgkJCXBTcmM7CisJVVNIT1JUCQkJUHJvdG9jb2w7CisJVUNIQVIJCQlCeXRlT2Zmc2V0MzYgPSAwOworCVVDSEFSCQkJQnl0ZU9mZnNldDM4ID0gMDsKKwlCT09MRUFOIAkJUmVhZEZpcnN0UGFybSA9IFRSVUU7CisKKwlSVE1QX1F1ZXJ5UGFja2V0SW5mbyhwUGFja2V0LCAmUGFja2V0SW5mbywgKFBVQ0hBUiAqKSZwVmlydHVhbEFkZHJlc3MsICZOZGlzQnVmZmVyTGVuZ3RoKTsKKworCU51bWJlck9mQnl0ZXNSZWFkICs9IE5kaXNCdWZmZXJMZW5ndGg7CisJcFNyYyA9IChQVUNIQVIpIHBWaXJ0dWFsQWRkcmVzczsKKwlQcm90b2NvbCA9ICoocFNyYyArIDEyKSAqIDI1NiArICoocFNyYyArIDEzKTsKKworCS8vCisJLy8gQ2hlY2sgREhDUCAmIEJPT1RQIHByb3RvY29sCisJLy8KKwl3aGlsZSAoTnVtYmVyT2ZCeXRlc1JlYWQgPD0gUGFja2V0SW5mby5Ub3RhbFBhY2tldExlbmd0aCkKKwl7CisJCWlmICgoTnVtYmVyT2ZCeXRlc1JlYWQgPj0gMzUpICYmIChSZWFkRmlyc3RQYXJtID09IFRSVUUpKQorCQl7CisJCQlDdXJyZW50T2Zmc2V0ID0gMzUgLSAoTnVtYmVyT2ZCeXRlc1JlYWQgLSBOZGlzQnVmZmVyTGVuZ3RoKTsKKwkJCUJ5dGVPZmZzZXQzNiA9ICoocFNyYyArIEN1cnJlbnRPZmZzZXQpOworCQkJUmVhZEZpcnN0UGFybSA9IEZBTFNFOworCQl9CisKKwkJaWYgKE51bWJlck9mQnl0ZXNSZWFkID49IDM3KQorCQl7CisJCQlDdXJyZW50T2Zmc2V0ID0gMzcgLSAoTnVtYmVyT2ZCeXRlc1JlYWQgLSBOZGlzQnVmZmVyTGVuZ3RoKTsKKwkJCUJ5dGVPZmZzZXQzOCA9ICoocFNyYyArIEN1cnJlbnRPZmZzZXQpOworCQkJLy9FbmQgb2YgUmVhZAorCQkJYnJlYWs7CisJCX0KKwkJcmV0dXJuIEZBTFNFOworCX0KKworCS8vIENoZWNrIGZvciBESENQICYgQk9PVFAgcHJvdG9jb2wKKwlpZiAoKEJ5dGVPZmZzZXQzNiAhPSAweDQ0KSB8fCAoQnl0ZU9mZnNldDM4ICE9IDB4NDMpKQorCQl7CisJCS8vCisJCS8vIDIwNTQgKGhleCAwODA2KSBmb3IgQVJQIGRhdGFncmFtcworCQkvLyBpZiB0aGlzIHBhY2tldCBpcyBub3QgQVJQIGRhdGFncmFtcywgdGhlbiBkbyBub3RoaW5nCisJCS8vIEFSUCBkYXRhZ3JhbXMgd2lsbCBhbHNvIGJlIGR1cGxpY2F0ZSBhdCAxbWIgYnJvYWRjYXN0IGZyYW1lcworCQkvLworCQlpZiAoUHJvdG9jb2wgIT0gMHgwODA2ICkKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKworQk9PTEVBTiBSVE1QQ2hlY2tFdGhlclR5cGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpCit7CisJVVNIT1JUCVR5cGVMZW47CisJVUNIQVIJQnl0ZTAsIEJ5dGUxOworCVBVQ0hBUglwU3JjQnVmOworCVVJTlQzMglwa3RMZW47CisJVUlOVDE2IAlzcmNQb3J0LCBkc3RQb3J0OworCUJPT0xFQU4Jc3RhdHVzID0gVFJVRTsKKworCisJcFNyY0J1ZiA9IEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KTsKKwlwa3RMZW4gPSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKKworCUFTU0VSVChwU3JjQnVmKTsKKworCVJUTVBfU0VUX1BBQ0tFVF9TUEVDSUZJQyhwUGFja2V0LCAwKTsKKworCS8vIGdldCBFdGhlcm5ldCBwcm90b2NvbCBmaWVsZAorCVR5cGVMZW4gPSAocFNyY0J1ZlsxMl0gPDwgOCkgKyBwU3JjQnVmWzEzXTsKKworCXBTcmNCdWYgKz0gTEVOR1RIXzgwMl8zOwkvLyBTa2lwIHRoZSBFdGhlcm5ldCBIZWFkZXIuCisKKwlpZiAoVHlwZUxlbiA8PSAxNTAwKQorCXsJLy8gODAyLjMsIDgwMi4zIExMQworCQkvKgorCQkJRGVzdE1BQyg2KSArIFNyY01BQyg2KSArIExlbmdodCgyKSArCisJCQlEU0FQKDEpICsgU1NBUCgxKSArIENvbnRyb2woMSkgKworCQkJaWYgdGhlIERTQVAgPSAweEFBLCBTU0FQPTB4QUEsIENvbnRvcmwgPSAweDAzLCBpdCBoYXMgYSA1LWJ5dGVzIFNOQVAgaGVhZGVyLgorCQkJCT0+ICsgU05BUCAoNSwgT3JpZ2luYXRpb25JRCgzKSArIGV0aGVyVHlwZSgyKSkKKwkJKi8KKwkJaWYgKHBTcmNCdWZbMF0gPT0gMHhBQSAmJiBwU3JjQnVmWzFdID09IDB4QUEgJiYgcFNyY0J1ZlsyXSA9PSAweDAzKQorCQl7CisJCQlTbmlmZjJCeXRlc0Zyb21OZGlzQnVmZmVyKHBTcmNCdWYsIDYsICZCeXRlMCwgJkJ5dGUxKTsKKwkJCVJUTVBfU0VUX1BBQ0tFVF9MTENTTkFQKHBQYWNrZXQsIDEpOworCQkJVHlwZUxlbiA9IChVU0hPUlQpKChCeXRlMCA8PCA4KSArIEJ5dGUxKTsKKwkJCXBTcmNCdWYgKz0gODsgLy8gU2tpcCB0aGlzIExMQy9TTkFQIGhlYWRlcgorCQl9CisJCWVsc2UKKwkJeworCQkJLy9JdCBqdXN0IGhhcyAzLWJ5dGUgTExDIGhlYWRlciwgbWF5YmUgYSBsZWdhY3kgZXRoZXIgdHlwZSBmcmFtZS4gd2UgZGlkbid0IGhhbmRsZSBpdC4KKwkJfQorCX0KKworCS8vIElmIGl0J3MgYSBWTEFOIHBhY2tldCwgZ2V0IHRoZSByZWFsIFR5cGUvTGVuZ3RoIGZpZWxkLgorCWlmIChUeXBlTGVuID09IDB4ODEwMCkKKwl7CisJCS8qIDB4ODEwMCBtZWFucyBWTEFOIHBhY2tldHMgKi8KKworCQkvKiBEZXN0LiBNQUMgQWRkcmVzcyAoNi1ieXRlcykgKworCQkgICBTb3VyY2UgTUFDIEFkZHJlc3MgKDYtYnl0ZXMpICsKKwkJICAgTGVuZ3RoL1R5cGUgPSA4MDIuMVEgVGFnIFR5cGUgKDItYnl0ZSkgKworCQkgICBUYWcgQ29udHJvbCBJbmZvcm1hdGlvbiAoMi1ieXRlcykgKworCQkgICBMZW5ndGggLyBUeXBlICgyLWJ5dGVzKSArCisJCSAgIGRhdGEgcGF5bG9hZCAoMC1uIGJ5dGVzKSArCisJCSAgIFBhZCAoMC1wIGJ5dGVzKSArCisJCSAgIEZyYW1lIENoZWNrIFNlcXVlbmNlICg0LWJ5dGVzKSAqLworCisJCVJUTVBfU0VUX1BBQ0tFVF9WTEFOKHBQYWNrZXQsIDEpOworCQlTbmlmZjJCeXRlc0Zyb21OZGlzQnVmZmVyKHBTcmNCdWYsIDIsICZCeXRlMCwgJkJ5dGUxKTsKKwkJVHlwZUxlbiA9IChVU0hPUlQpKChCeXRlMCA8PCA4KSArIEJ5dGUxKTsKKworCQlwU3JjQnVmICs9IDQ7IC8vIFNraXAgdGhlIFZMQU4gSGVhZGVyLgorCX0KKworCXN3aXRjaCAoVHlwZUxlbikKKwl7CisJCWNhc2UgMHgwODAwOgorCQkJeworCQkJCUFTU0VSVCgocGt0TGVuID4gMzQpKTsKKwkJCQlpZiAoKihwU3JjQnVmICsgOSkgPT0gMHgxMSkKKwkJCQl7CS8vIHVkcCBwYWNrZXQKKwkJCQkJQVNTRVJUKChwa3RMZW4gPiAzNCkpOwkvLyAxNCBmb3IgZXRoZXJuZXQgaGVhZGVyLCAyMCBmb3IgSVAgaGVhZGVyCisKKwkJCQkJcFNyY0J1ZiArPSAyMDsJLy8gU2tpcCB0aGUgSVAgaGVhZGVyCisJCQkJCXNyY1BvcnQgPSBPU19OVE9IUygqKChVSU5UMTYgKilwU3JjQnVmKSk7CisJCQkJCWRzdFBvcnQgPSBPU19OVE9IUygqKChVSU5UMTYgKikocFNyY0J1ZiArMikpKTsKKworCQkJCQlpZiAoKHNyY1BvcnQ9PTB4NDQgJiYgZHN0UG9ydD09MHg0MykgfHwgKHNyY1BvcnQ9PTB4NDMgJiYgZHN0UG9ydD09MHg0NCkpCisJCQkJCXsJLy9JdCdzIGEgQk9PVFAvREhDUCBwYWNrZXQKKwkJCQkJCVJUTVBfU0VUX1BBQ0tFVF9ESENQKHBQYWNrZXQsIDEpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMHgwODA2OgorCQkJeworCQkJCS8vQVJQIFBhY2tldC4KKwkJCQlSVE1QX1NFVF9QQUNLRVRfREhDUChwUGFja2V0LCAxKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDB4ODg4ZToKKwkJCXsKKwkJCQkvLyBFQVBPTCBQYWNrZXQuCisJCQkJUlRNUF9TRVRfUEFDS0VUX0VBUE9MKHBQYWNrZXQsIDEpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzdGF0dXMgPSBGQUxTRTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBzdGF0dXM7CisKK30KKworCisKK1ZPSUQgVXBkYXRlX1Jzc2lfU2FtcGxlKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFJTU0lfU0FNUExFCQkqcFJzc2ksCisJSU4gUFJYV0lfU1RSVUMJCXBSeFdJKQorCQl7CisJQ0hBUglyc3NpMCA9IHBSeFdJLT5SU1NJMDsKKwlDSEFSCXJzc2kxID0gcFJ4V0ktPlJTU0kxOworCUNIQVIJcnNzaTIgPSBwUnhXSS0+UlNTSTI7CisKKwlpZiAocnNzaTAgIT0gMCkKKwl7CisJCXBSc3NpLT5MYXN0UnNzaTAJPSBDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpcnNzaTAsIFJTU0lfMCk7CisJCXBSc3NpLT5BdmdSc3NpMFg4CT0gKHBSc3NpLT5BdmdSc3NpMFg4IC0gcFJzc2ktPkF2Z1Jzc2kwKSArIHBSc3NpLT5MYXN0UnNzaTA7CisJCXBSc3NpLT5BdmdSc3NpMAk9IHBSc3NpLT5BdmdSc3NpMFg4ID4+IDM7CisJfQorCisJaWYgKHJzc2kxICE9IDApCisJeworCQlwUnNzaS0+TGFzdFJzc2kxCT0gQ29udmVydFRvUnNzaShwQWQsIChDSEFSKXJzc2kxLCBSU1NJXzEpOworCQlwUnNzaS0+QXZnUnNzaTFYOAk9IChwUnNzaS0+QXZnUnNzaTFYOCAtIHBSc3NpLT5BdmdSc3NpMSkgKyBwUnNzaS0+TGFzdFJzc2kxOworCQlwUnNzaS0+QXZnUnNzaTEJPSBwUnNzaS0+QXZnUnNzaTFYOCA+PiAzOworCX0KKworCWlmIChyc3NpMiAhPSAwKQorCXsKKwkJcFJzc2ktPkxhc3RSc3NpMgk9IENvbnZlcnRUb1Jzc2kocEFkLCAoQ0hBUilyc3NpMiwgUlNTSV8yKTsKKwkJcFJzc2ktPkF2Z1Jzc2kyWDggID0gKHBSc3NpLT5BdmdSc3NpMlg4IC0gcFJzc2ktPkF2Z1Jzc2kyKSArIHBSc3NpLT5MYXN0UnNzaTI7CisJCXBSc3NpLT5BdmdSc3NpMiA9IHBSc3NpLT5BdmdSc3NpMlg4ID4+IDM7CisJfQorfQorCisKKworLy8gTm9ybWFsIGxlZ2FjeSBSeCBwYWNrZXQgaW5kaWNhdGlvbgorVk9JRCBJbmRpY2F0ZV9MZWdhY3lfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlQTkRJU19QQUNLRVQJcFJ4UGFja2V0ID0gcFJ4QmxrLT5wUnhQYWNrZXQ7CisJVUNIQVIJCQlIZWFkZXI4MDJfM1tMRU5HVEhfODAyXzNdOworCisJLy8gMS4gZ2V0IDgwMi4zIEhlYWRlcgorCS8vIDIuIHJlbW92ZSBMTEMKKwkvLyAJCWEuIHBvaW50ZXIgcFJ4QmxrLT5wRGF0YSB0byBwYXlsb2FkCisJLy8gICAgICBiLiBtb2RpZnkgcFJ4QmxrLT5EYXRhU2l6ZQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCVJUTVBfODAyXzExX1JFTU9WRV9MTENfQU5EX0NPTlZFUlRfVE9fODAyXzMocFJ4QmxrLCBIZWFkZXI4MDJfMyk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlpZiAocFJ4QmxrLT5EYXRhU2l6ZSA+IE1BWF9SWF9QS1RfTEVOKQorCXsKKwkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybjsKKwl9CisKKworCVNUQVRTX0lOQ19SWF9QQUNLRVRTKHBBZCwgRnJvbVdoaWNoQlNTSUQpOworCisjaWZkZWYgUlQyODcwCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJEaXNhYmxlUmVvcmRlcmluZyA9PSAwKQorCXsKKwkJUEJBX1JFQ19FTlRSWQkJcEJBRW50cnk7CisJCVVMT05HCQkJCU5vdzMyOworCQlVQ0hBUgkJCQlXY2lkID0gcFJ4QmxrLT5wUnhXSS0+V2lyZWxlc3NDbGlJRDsKKwkJVUNIQVIJCQkJVElEID0gcFJ4QmxrLT5wUnhXSS0+VElEOworCQlVU0hPUlQJCQkJSWR4OworCisjZGVmaW5lIFJFT1JERVJJTkdfUEFDS0VUX1RJTUVPVVQJCSgoMTAwICogSFopLzEwMDApCS8vIHN5c3RlbSB0aWNrcyAtLSAxMDAgbXMKKworCQlpZiAoV2NpZCA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCQl7CisJCQlJZHggPSBwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLkJBUmVjV2NpZEFycmF5W1RJRF07CisJCQlpZiAoSWR4ICE9IDApCisJCQl7CisJCQkJcEJBRW50cnkgPSAmcEFkLT5CQVRhYmxlLkJBUmVjRW50cnlbSWR4XTsKKwkJCQkvLyB1cGRhdGUgbGFzdCByeCB0aW1lCisJCQkJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93MzIpOworCQkJCWlmICgocEJBRW50cnktPmxpc3QucWxlbiA+IDApICYmCisJCQkJCSBSVE1QX1RJTUVfQUZURVIoKHVuc2lnbmVkIGxvbmcpTm93MzIsICh1bnNpZ25lZCBsb25nKShwQkFFbnRyeS0+TGFzdEluZFNlcUF0VGltZXIrKFJFT1JERVJJTkdfUEFDS0VUX1RJTUVPVVQpKSkKKwkgICAJCQkJKQorCQkJCXsKKwkJCQkJcHJpbnRrKCJJbmRpY2F0ZV9MZWdhY3lfUGFja2V0KCk6Zmx1c2ggcmVvcmRlcmluZ190aW1lb3V0X21wZHVzISBSeFdJLT5GbGFncz0lZCwgcFJ4V0kuVElEPSVkLCBSeEQtPkFNUERVPSVkIVxuIiwgcFJ4QmxrLT5GbGFncywgcFJ4QmxrLT5wUnhXSS0+VElELCBwUnhCbGstPlJ4RC5BTVBEVSk7CisJCQkJCWhleF9kdW1wKCJEdW1wIHRoZSBsZWdhY3kgUGFja2V0OiIsIEdFVF9PU19QS1RfREFUQVBUUihwUnhCbGstPnBSeFBhY2tldCksIDY0KTsKKwkJCQkJYmFfZmx1c2hfcmVvcmRlcmluZ190aW1lb3V0X21wZHVzKHBBZCwgcEJBRW50cnksIE5vdzMyKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwl3bGFuXzgwMl8xMV90b184MDJfM19wYWNrZXQocEFkLCBwUnhCbGssIEhlYWRlcjgwMl8zLCBGcm9tV2hpY2hCU1NJRCk7CisKKwkvLworCS8vIHBhc3MgdGhpcyA4MDIuMyBwYWNrZXQgdG8gdXBwZXIgbGF5ZXIgb3IgZm9yd2FyZCB0aGlzIHBhY2tldCB0byBXTSBkaXJlY3RseQorCS8vCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJQU5OT1VOQ0VfT1JfRk9SV0FSRF84MDJfM19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIEZyb21XaGljaEJTU0lEKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworfQorCisKKy8vIE5vcm1hbCwgQU1QRFUgb3IgQU1TRFUKK1ZPSUQgQ21tUnhub25SYWxpbmtGcmFtZUluZGljYXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAoUlhfQkxLX1RFU1RfRkxBRyhwUnhCbGssIGZSWF9BTVBEVSkgJiYgKHBBZC0+Q29tbW9uQ2ZnLmJEaXNhYmxlUmVvcmRlcmluZyA9PSAwKSkKKwl7CisJCUluZGljYXRlX0FNUERVX1BhY2tldChwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCX0KKwllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlpZiAoUlhfQkxLX1RFU1RfRkxBRyhwUnhCbGssIGZSWF9BTVNEVSkpCisJCXsKKwkJCS8vIGhhbmRsZSBBLU1TRFUKKwkJCUluZGljYXRlX0FNU0RVX1BhY2tldChwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJeworCQkJSW5kaWNhdGVfTGVnYWN5X1BhY2tldChwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCQl9CisJfQorfQorCisKK1ZPSUQgQ21tUnhSYWxpbmtGcmFtZUluZGljYXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1BQ19UQUJMRV9FTlRSWQkqcEVudHJ5LAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlVQ0hBUgkJCUhlYWRlcjgwMl8zW0xFTkdUSF84MDJfM107CisJVUlOVDE2CQkJTXNkdTJTaXplOworCVVJTlQxNiAJCQlQYXlsb2FkMVNpemUsIFBheWxvYWQyU2l6ZTsKKwlQVUNIQVIgCQkJcERhdGEyOworCVBORElTX1BBQ0tFVAlwUGFja2V0MiA9IE5VTEw7CisKKworCisJTXNkdTJTaXplID0gKihwUnhCbGstPnBEYXRhKSArICgqKHBSeEJsay0+cERhdGErMSkgPDwgOCk7CisKKwlpZiAoKE1zZHUyU2l6ZSA8PSAxNTM2KSAmJiAoTXNkdTJTaXplIDwgcFJ4QmxrLT5EYXRhU2l6ZSkpCisJeworCQkvKiBza2lwIHR3byBieXRlIE1TRFUyIGxlbiAqLworCQlwUnhCbGstPnBEYXRhICs9IDI7CisJCXBSeEJsay0+RGF0YVNpemUgLT0gMjsKKwl9CisJZWxzZQorCXsKKwkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJcmV0dXJuOworCX0KKworCS8vIGdldCA4MDIuMyBIZWFkZXIgYW5kICByZW1vdmUgTExDCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJUlRNUF84MDJfMTFfUkVNT1ZFX0xMQ19BTkRfQ09OVkVSVF9UT184MDJfMyhwUnhCbGssIEhlYWRlcjgwMl8zKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisJQVNTRVJUKHBSeEJsay0+cFJ4UGFja2V0KTsKKworCS8vIFJhbGluayBBZ2dyZWdhdGlvbiBmcmFtZQorCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhBZ2dyZWdhdGlvbkNvdW50ICsrOworCVBheWxvYWQxU2l6ZSA9IHBSeEJsay0+RGF0YVNpemUgLSBNc2R1MlNpemU7CisJUGF5bG9hZDJTaXplID0gTXNkdTJTaXplIC0gTEVOR1RIXzgwMl8zOworCisJcERhdGEyID0gcFJ4QmxrLT5wRGF0YSArIFBheWxvYWQxU2l6ZSArIExFTkdUSF84MDJfMzsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlwUGFja2V0MiA9IGR1cGxpY2F0ZV9wa3QocEFkLCAocERhdGEyLUxFTkdUSF84MDJfMyksIExFTkdUSF84MDJfMywgcERhdGEyLCBQYXlsb2FkMlNpemUsIEZyb21XaGljaEJTU0lEKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmICghcFBhY2tldDIpCisJeworCQkvLyByZWxlYXNlIHBhY2tldAorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlyZXR1cm47CisJfQorCisJLy8gdXBkYXRlIHBheWxvYWQgc2l6ZSBvZiAxc3QgcGFja2V0CisJcFJ4QmxrLT5EYXRhU2l6ZSA9IFBheWxvYWQxU2l6ZTsKKwl3bGFuXzgwMl8xMV90b184MDJfM19wYWNrZXQocEFkLCBwUnhCbGssIEhlYWRlcjgwMl8zLCBGcm9tV2hpY2hCU1NJRCk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlBTk5PVU5DRV9PUl9GT1JXQVJEXzgwMl8zX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBGcm9tV2hpY2hCU1NJRCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlpZiAocFBhY2tldDIpCisJeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJQU5OT1VOQ0VfT1JfRk9SV0FSRF84MDJfM19QQUNLRVQocEFkLCBwUGFja2V0MiwgRnJvbVdoaWNoQlNTSUQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KK30KKworCisjZGVmaW5lIFJFU0VUX0ZSQUdGUkFNRShfZnJhZ0ZyYW1lKSBcCisJewkJCQkJCQkJXAorCQlfZnJhZ0ZyYW1lLlJ4U2l6ZSA9IDA7CQlcCisJCV9mcmFnRnJhbWUuU2VxdWVuY2UgPSAwOwlcCisJCV9mcmFnRnJhbWUuTGFzdEZyYWcgPSAwOwlcCisJCV9mcmFnRnJhbWUuRmxhZ3MgPSAwOwkJXAorCX0KKworCitQTkRJU19QQUNLRVQgUlRNUERlRnJhZ21lbnREYXRhRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaykKK3sKKwlQSEVBREVSXzgwMl8xMQlwSGVhZGVyID0gcFJ4QmxrLT5wSGVhZGVyOworCVBORElTX1BBQ0tFVAlwUnhQYWNrZXQgPSBwUnhCbGstPnBSeFBhY2tldDsKKwlVQ0hBUgkJCSpwRGF0YSA9IHBSeEJsay0+cERhdGE7CisJVVNIT1JUCQkJRGF0YVNpemUgPSBwUnhCbGstPkRhdGFTaXplOworCVBORElTX1BBQ0tFVAlwUmV0UGFja2V0ID0gTlVMTDsKKwlVQ0hBUgkJCSpwRnJhZ0J1ZmZlciA9IE5VTEw7CisJQk9PTEVBTiAJCWJSZWFzc0RvbmUgPSBGQUxTRTsKKwlVQ0hBUgkJCUhlYWRlclJvb20gPSAwOworCisKKwlBU1NFUlQocEhlYWRlcik7CisKKwlIZWFkZXJSb29tID0gcERhdGEgLSAoVUNIQVIgKilwSGVhZGVyOworCisJLy8gUmUtYXNzZW1ibGUgdGhlIGZyYWdtZW50ZWQgcGFja2V0cworCWlmIChwSGVhZGVyLT5GcmFnID09IDApCQkvLyBGcmFnLiBOdW1iZXIgaXMgMCA6IEZpcnN0IGZyYWcgb3Igb25seSBvbmUgcGt0CisJeworCQkvLyB0aGUgZmlyc3QgcGt0IG9mIGZyYWdtZW50LCByZWNvcmQgaXQuCisJCWlmIChwSGVhZGVyLT5GQy5Nb3JlRnJhZykKKwkJeworCQkJQVNTRVJUKHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0KTsKKwkJCXBGcmFnQnVmZmVyID0gR0VUX09TX1BLVF9EQVRBUFRSKHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0KTsKKwkJCXBBZC0+RnJhZ0ZyYW1lLlJ4U2l6ZSAgID0gRGF0YVNpemUgKyBIZWFkZXJSb29tOworCQkJTmRpc01vdmVNZW1vcnkocEZyYWdCdWZmZXIsCSBwSGVhZGVyLCBwQWQtPkZyYWdGcmFtZS5SeFNpemUpOworCQkJcEFkLT5GcmFnRnJhbWUuU2VxdWVuY2UgPSBwSGVhZGVyLT5TZXF1ZW5jZTsKKwkJCXBBZC0+RnJhZ0ZyYW1lLkxhc3RGcmFnID0gcEhlYWRlci0+RnJhZzsJICAgLy8gU2hvdWxkIGJlIDAKKwkJCUFTU0VSVChwQWQtPkZyYWdGcmFtZS5MYXN0RnJhZyA9PSAwKTsKKwkJCWdvdG8gZG9uZTsJLy8gZW5kIG9mIHByb2Nlc3NpbmcgdGhpcyBmcmFtZQorCQl9CisJfQorCWVsc2UJLy9NaWRkbGUgJiBFbmQgb2YgZnJhZ21lbnQKKwl7CisJCWlmICgocEhlYWRlci0+U2VxdWVuY2UgIT0gcEFkLT5GcmFnRnJhbWUuU2VxdWVuY2UpIHx8CisJCQkocEhlYWRlci0+RnJhZyAhPSAocEFkLT5GcmFnRnJhbWUuTGFzdEZyYWcgKyAxKSkpCisJCXsKKwkJCS8vIEZyYWdtZW50IGlzIG5vdCB0aGUgc2FtZSBzZXF1ZW5jZSBvciBvdXQgb2YgZnJhZ21lbnQgbnVtYmVyIG9yZGVyCisJCQkvLyBSZXNldCBGcmFnbWVudCBjb250cm9sIGJsaworCQkJUkVTRVRfRlJBR0ZSQU1FKHBBZC0+RnJhZ0ZyYW1lKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkZyYWdtZW50IGlzIG5vdCB0aGUgc2FtZSBzZXF1ZW5jZSBvciBvdXQgb2YgZnJhZ21lbnQgbnVtYmVyIG9yZGVyLlxuIikpOworCQkJZ290byBkb25lOyAvLyBnaXZlIHVwIHRoaXMgZnJhbWUKKwkJfQorCQllbHNlIGlmICgocEFkLT5GcmFnRnJhbWUuUnhTaXplICsgRGF0YVNpemUpID4gTUFYX0ZSQU1FX1NJWkUpCisJCXsKKwkJCS8vIEZyYWdtZW50IGZyYW1lIGlzIHRvbyBsYXJnZSwgaXQgZXhlZWRzIHRoZSBtYXhpbXVtIGZyYW1lIHNpemUuCisJCQkvLyBSZXNldCBGcmFnbWVudCBjb250cm9sIGJsaworCQkJUkVTRVRfRlJBR0ZSQU1FKHBBZC0+RnJhZ0ZyYW1lKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkZyYWdtZW50IGZyYW1lIGlzIHRvbyBsYXJnZSwgaXQgZXhlZWRzIHRoZSBtYXhpbXVtIGZyYW1lIHNpemUuXG4iKSk7CisJCQlnb3RvIGRvbmU7IC8vIGdpdmUgdXAgdGhpcyBmcmFtZQorCQl9CisKKyAgICAgICAgLy8KKwkJLy8gQnJvYWRjb20gQVAoQkNNOTQ3MDRBR1IpIHdpbGwgc2VuZCBvdXQgTExDIGluIGZyYWdtZW50J3MgcGFja2V0LCBMTEMgb25seSBjYW4gYWNjcGV0IGF0IGZpcnN0IGZyYWdtZW50LgorCQkvLyBJbiB0aGlzIGNhc2UsIHdlIHdpbGwgZHJvcHQgaXQuCisJCS8vCisJCWlmIChOZGlzRXF1YWxNZW1vcnkocERhdGEsIFNOQVBfODAyXzFILCBzaXplb2YoU05BUF84MDJfMUgpKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRmluZCBhbm90aGVyIExMQyBhdCBNaWRkbGUgb3IgRW5kIGZyYWdtZW50KFNOPSVkLCBGcmFnPSVkKVxuIiwgcEhlYWRlci0+U2VxdWVuY2UsIHBIZWFkZXItPkZyYWcpKTsKKwkJCWdvdG8gZG9uZTsgLy8gZ2l2ZSB1cCB0aGlzIGZyYW1lCisJCX0KKworCQlwRnJhZ0J1ZmZlciA9IEdFVF9PU19QS1RfREFUQVBUUihwQWQtPkZyYWdGcmFtZS5wRnJhZ1BhY2tldCk7CisKKwkJLy8gY29uY2F0ZW5hdGUgdGhpcyBmcmFnbWVudCBpbnRvIHRoZSByZS1hc3NlbWJseSBidWZmZXIKKwkJTmRpc01vdmVNZW1vcnkoKHBGcmFnQnVmZmVyICsgcEFkLT5GcmFnRnJhbWUuUnhTaXplKSwgcERhdGEsIERhdGFTaXplKTsKKwkJcEFkLT5GcmFnRnJhbWUuUnhTaXplICArPSBEYXRhU2l6ZTsKKwkJcEFkLT5GcmFnRnJhbWUuTGFzdEZyYWcgPSBwSGVhZGVyLT5GcmFnOwkgICAvLyBVcGRhdGUgZnJhZ21lbnQgbnVtYmVyCisKKwkJLy8gTGFzdCBmcmFnbWVudAorCQlpZiAocEhlYWRlci0+RkMuTW9yZUZyYWcgPT0gRkFMU0UpCisJCXsKKwkJCWJSZWFzc0RvbmUgPSBUUlVFOworCQl9CisJfQorCitkb25lOgorCS8vIGFsd2F5cyByZWxlYXNlIHJ4IGZyYWdtZW50ZWQgcGFja2V0CisJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisKKwkvLyByZXR1cm4gZGVmcmFnbWVudGVkIHBhY2tldCBpZiBwYWNrZXQgaXMgcmVhc3NlbWJsZWQgY29tcGxldGVseQorCS8vIG90aGVyd2lzZSByZXR1cm4gTlVMTAorCWlmIChiUmVhc3NEb25lKQorCXsKKwkJUE5ESVNfUEFDS0VUIHBOZXdGcmFnUGFja2V0OworCisJCS8vIGFsbG9jYXRlIGEgbmV3IHBhY2tldCBidWZmZXIgZm9yIGZyYWdtZW50CisJCXBOZXdGcmFnUGFja2V0ID0gUlRNUF9BbGxvY2F0ZUZyYWdQYWNrZXRCdWZmZXIocEFkLCBSWF9CVUZGRVJfTk9STVNJWkUpOworCQlpZiAocE5ld0ZyYWdQYWNrZXQpCisJCXsKKwkJCS8vIHVwZGF0ZSBSeEJsaworCQkJcFJldFBhY2tldCA9IHBBZC0+RnJhZ0ZyYW1lLnBGcmFnUGFja2V0OworCQkJcEFkLT5GcmFnRnJhbWUucEZyYWdQYWNrZXQgPSBwTmV3RnJhZ1BhY2tldDsKKwkJCXBSeEJsay0+cEhlYWRlciA9IChQSEVBREVSXzgwMl8xMSkgR0VUX09TX1BLVF9EQVRBUFRSKHBSZXRQYWNrZXQpOworCQkJcFJ4QmxrLT5wRGF0YSA9IChVQ0hBUiAqKXBSeEJsay0+cEhlYWRlciArIEhlYWRlclJvb207CisJCQlwUnhCbGstPkRhdGFTaXplID0gcEFkLT5GcmFnRnJhbWUuUnhTaXplIC0gSGVhZGVyUm9vbTsKKwkJCXBSeEJsay0+cFJ4UGFja2V0ID0gcFJldFBhY2tldDsKKwkJfQorCQllbHNlCisJCXsKKwkJCVJFU0VUX0ZSQUdGUkFNRShwQWQtPkZyYWdGcmFtZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcFJldFBhY2tldDsKK30KKworCitWT0lEIEluZGljYXRlX0FNU0RVX1BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJVUlOVAkJCW5NU0RVOworCisJdXBkYXRlX29zX3BhY2tldF9pbmZvKHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJUlRNUF9TRVRfUEFDS0VUX0lGKHBSeEJsay0+cFJ4UGFja2V0LCBGcm9tV2hpY2hCU1NJRCk7CisJbk1TRFUgPSBkZWFnZ3JlZ2F0ZV9BTVNEVV9hbm5vdW5jZShwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBwUnhCbGstPnBEYXRhLCBwUnhCbGstPkRhdGFTaXplKTsKK30KKworVk9JRCBJbmRpY2F0ZV9FQVBPTF9QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5ID0gTlVMTDsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdOworCQlTVEFSeEVBUE9MRnJhbWVJbmRpY2F0ZShwQWQsIHBFbnRyeSwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCXJldHVybjsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlpZiAocEVudHJ5ID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIkluZGljYXRlX0VBUE9MX1BhY2tldDogZHJvcCBhbmQgcmVsZWFzZSB0aGUgaW52YWxpZCBwYWNrZXQuXG4iKSk7CisJCS8vIHJlbGVhc2UgcGFja2V0CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhCbGstPnBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybjsKKwl9Cit9CisKKyNkZWZpbmUgQkNOX1RCVFRfT0ZGU0VUCQk2NAkvL2RlZmVyIDY0IHVzCitWT0lEIFJlU3luY0JlYWNvblRpbWUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpCit7CisKKwlVSU5UMzIgIE9mZnNldDsKKworCisJT2Zmc2V0ID0gKHBBZC0+VGJ0dFRpY2tDb3VudCkgJSAoQkNOX1RCVFRfT0ZGU0VUKTsKKworCXBBZC0+VGJ0dFRpY2tDb3VudCsrOworCisJLy8KKwkvLyBUaGUgdXBkYXRlZCBCZWFjb25JbnRlcnZhbCBWYWx1ZSB3aWxsIGFmZmVjdCBCZWFjb24gSW50ZXJ2YWwgYWZ0ZXIgdHdvIFRCVFQKKwkvLyBiZWFjYXN1ZSB0aGUgb3JpZ2luYWwgQmVhY29uSW50ZXJ2YWwgaGFkIGJlZW4gbG9hZGVkIGludG8gbmV4dCBUQlRUX1RJTUVSCisJLy8KKwlpZiAoT2Zmc2V0ID09IChCQ05fVEJUVF9PRkZTRVQtMikpCisJeworCQlCQ05fVElNRV9DRkdfU1RSVUMgY3NyOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEJDTl9USU1FX0NGRywgJmNzci53b3JkKTsKKwkJY3NyLmZpZWxkLkJlYWNvbkludGVydmFsID0gKHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA8PCA0KSAtIDEgOwkvLyBBU0lDIHJlZ2lzdGVyIGluIHVuaXRzIG9mIDEvMTYgVFUgPSA2NHVzCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEJDTl9USU1FX0NGRywgY3NyLndvcmQpOworCX0KKwllbHNlCisJeworCQlpZiAoT2Zmc2V0ID09IChCQ05fVEJUVF9PRkZTRVQtMSkpCisJCXsKKwkJCUJDTl9USU1FX0NGR19TVFJVQyBjc3I7CisKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCAmY3NyLndvcmQpOworCQkJY3NyLmZpZWxkLkJlYWNvbkludGVydmFsID0gKHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCkgPDwgNDsgLy8gQVNJQyByZWdpc3RlciBpbiB1bml0cyBvZiAxLzE2IFRVCisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBCQ05fVElNRV9DRkcsIGNzci53b3JkKTsKKwkJfQorCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX2RhdGFfMjg3MC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX2RhdGFfMjg3MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMDY2YWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fZGF0YV8yODcwLmMKQEAgLTAsMCArMSw5ODAgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKy8qCisgICBBbGwgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBtdXN0IGJlIFVTQi1kZXBlbmRlZCwgb3IgeW91IHNob3VsZCBvdXQgeW91ciBmdW5jdGlvbgorCWluIG90aGVyIGZpbGVzLgorCisqLworI2luY2x1ZGUJIi4uL3J0X2NvbmZpZy5oIgorCisKKy8qCisJV2UgY2FuIGRvIGNvcHkgdGhlIGZyYW1lIGludG8gcFR4Q29udGV4dCB3aGVuIG1hdGNoIGZvbGxvd2luZyBjb25kaXRpb25zLgorCQk9PgorCQk9PgorCQk9PgorKi8KK3N0YXRpYyBpbmxpbmUgTkRJU19TVEFUVVMgUnRtcFVTQkNhbkRvV3JpdGUoCisJSU4gUlRNUF9BREFQVEVSCQkqcEFkLAorCUlOIFVDSEFSCQkJUXVlSWR4LAorCUlOIEhUX1RYX0NPTlRFWFQgCSpwSFRUWENvbnRleHQpCit7CisJTkRJU19TVEFUVVMJY2FuV3JpdGUgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CisKKwlpZiAoKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pIDwgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uKSAmJiAocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgTE9DQUxfVFhCVUZfU0laRSkgPiBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlJ0bXBVU0JDYW5Eb1dyaXRlIGMxIVxuIikpOworCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgKGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PCBRdWVJZHgpKTsKKwl9CisJZWxzZSBpZiAoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9PSA4KSAmJiAocEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uIDwgTE9DQUxfVFhCVUZfU0laRSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlJ0bXBVU0JDYW5Eb1dyaXRlIGMyIVxuIikpOworCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgKGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PCBRdWVJZHgpKTsKKwl9CisJZWxzZSBpZiAocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBUUlVFKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJSdG1wVVNCQ2FuRG9Xcml0ZSBjMyFcbiIpKTsKKwl9CisJZWxzZQorCXsKKwkJY2FuV3JpdGUgPSBORElTX1NUQVRVU19TVUNDRVNTOworCX0KKworCisJcmV0dXJuIGNhbldyaXRlOworfQorCisKK1VTSE9SVCBSdG1wVVNCX1dyaXRlU3ViVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCUJPT0xFQU4JCQliSXNMYXN0LAorCU9VVAlVU0hPUlQJCQkqRnJlZU51bWJlcikKK3sKKworCS8vIER1bW15IGZ1bmN0aW9uLiBTaG91bGQgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLgorCXJldHVybiAwOworCit9CisKK1VTSE9SVAlSdG1wVVNCX1dyaXRlRnJhZ1R4UmVzb3VyY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVFhfQkxLCQkJKnBUeEJsaywKKwlJTglVQ0hBUgkJCWZyYWdOdW0sCisJT1VUCVVTSE9SVAkJCSpGcmVlTnVtYmVyKQoreworCUhUX1RYX0NPTlRFWFQJKnBIVFRYQ29udGV4dDsKKwlVU0hPUlQJCQlod0hkckxlbjsJLy8gVGhlIGh3SGRyTGVuIGNvbnNpc3Qgb2YgODAyLjExIGhlYWRlciBsZW5ndGggcGx1cyB0aGUgaGVhZGVyIHBhZGRpbmcgbGVuZ3RoLgorCVVJTlQzMgkJCWZpbGxPZmZzZXQ7CisJVFhJTkZPX1NUUlVDCSpwVHhJbmZvOworCVRYV0lfU1RSVUMJCSpwVHhXSTsKKwlQVUNIQVIJCQlwV2lyZWxlc3NQYWNrZXQgPSBOVUxMOworCVVDSEFSCQkJUXVlSWR4OworCU5ESVNfU1RBVFVTCQlTdGF0dXM7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKwlVSU5UMzIJCQlVU0JETUFwa3RMZW4gPSAwLCBETUFIZHJMZW4sIHBhZGRpbmc7CisJQk9PTEVBTgkJCVR4UUxhc3RSb3VuZCA9IEZBTFNFOworCisJLy8KKwkvLyBnZXQgVHggUmluZyBSZXNvdXJjZSAmIERtYSBCdWZmZXIgYWRkcmVzcworCS8vCisJUXVlSWR4ID0gcFR4QmxrLT5RdWVJZHg7CisJcEhUVFhDb250ZXh0ICA9ICZwQWQtPlR4Q29udGV4dFtRdWVJZHhdOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJcEhUVFhDb250ZXh0ICA9ICZwQWQtPlR4Q29udGV4dFtRdWVJZHhdOworCWZpbGxPZmZzZXQgPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb247CisKKwlpZihmcmFnTnVtID09IDApCisJeworCQkvLyBDaGVjayBpZiB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgdGhpcyBidWxrLW91dCBiYXRjaC4KKwkJU3RhdHVzID0gUnRtcFVTQkNhbkRvV3JpdGUocEFkLCBRdWVJZHgsIHBIVFRYQ29udGV4dCk7CisJCWlmIChTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IFRSVUU7CisKKwkJCS8vIFJlc2VydmUgc3BhY2UgZm9yIDggYnl0ZXMgcGFkZGluZy4KKwkJCWlmICgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9PSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pKQorCQkJeworCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gKz0gODsKKwkJCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKz0gODsKKwkJCQlmaWxsT2Zmc2V0ICs9IDg7CisJCQl9CisJCQlwVHhCbGstPlByaXYgPSAwOworCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MgPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb247CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQlyZXR1cm4oU3RhdHVzKTsKKwkJfQorCX0KKwllbHNlCisJeworCQkvLyBGb3Igc3ViLXNlcXVlbnQgZnJhbWVzIG9mIHRoaXMgYnVsay1vdXQgYmF0Y2guIEp1c3QgY29weSBpdCB0byBvdXIgYnVsay1vdXQgYnVmZmVyLgorCQlTdGF0dXMgPSAoKHBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPT0gVFJVRSkgPyBORElTX1NUQVRVU19TVUNDRVNTIDogTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCWlmIChTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJZmlsbE9mZnNldCArPSBwVHhCbGstPlByaXY7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQlyZXR1cm4oU3RhdHVzKTsKKwkJfQorCX0KKworCU5kaXNaZXJvTWVtb3J5KChQVUNIQVIpKCZwVHhCbGstPkhlYWRlckJ1ZlswXSksIFRYSU5GT19TSVpFKTsKKwlwVHhJbmZvID0gKFBUWElORk9fU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZlswXSk7CisJcFR4V0k9IChQVFhXSV9TVFJVQykoJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFXSk7CisKKwlwV2lyZWxlc3NQYWNrZXQgPSAmcEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbZmlsbE9mZnNldF07CisKKwkvLyBjb3B5IFRYV0kgKyBXTEFOIEhlYWRlciArIExMQyBpbnRvIERNQSBIZWFkZXIgQnVmZmVyCisJLy9od0hkckxlbiA9IFJPVU5EX1VQKHBUeEJsay0+TXBkdUhlYWRlckxlbiwgNCk7CisJaHdIZHJMZW4gPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPkhkclBhZExlbjsKKworCS8vIEJ1aWxkIG91ciBVUkIgZm9yIFVTQkQKKwlETUFIZHJMZW4gPSBUWFdJX1NJWkUgKyBod0hkckxlbjsKKwlVU0JETUFwa3RMZW4gPSBETUFIZHJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKKwlwYWRkaW5nID0gKDQgLSAoVVNCRE1BcGt0TGVuICUgNCkpICYgMHgwMzsJLy8gcm91bmQgdXAgdG8gNCBieXRlIGFsaWdubWVudAorCVVTQkRNQXBrdExlbiArPSBwYWRkaW5nOworCisJcFR4QmxrLT5Qcml2ICs9IChUWElORk9fU0laRSArIFVTQkRNQXBrdExlbik7CisKKwkvLyBGb3IgVHhJbmZvLCB0aGUgbGVuZ3RoIG9mIFVTQkRNQXBrdExlbiA9IFRYV0lfU0laRSArIDgwMi4xMSBoZWFkZXIgKyBwYXlsb2FkCisJUlRNUFdyaXRlVHhJbmZvKHBBZCwgcFR4SW5mbywgKFVTSE9SVCkoVVNCRE1BcGt0TGVuKSwgRkFMU0UsIEZJRk9fRURDQSwgRkFMU0UgLypOZXh0VmFsaWQqLywgIEZBTFNFKTsKKworCWlmIChmcmFnTnVtID09IHBUeEJsay0+VG90YWxGcmFnTnVtKQorCXsKKwkJcFR4SW5mby0+VVNCRE1BVHhidXJzdCA9IDA7CisJCWlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uICsgcFR4QmxrLT5Qcml2ICsgMzkwNik+IE1BWF9UWEJVTEtfTElNSVQpCisJCXsKKwkJCXBUeEluZm8tPlN3VXNlTGFzdFJvdW5kID0gMTsKKwkJCVR4UUxhc3RSb3VuZCA9IFRSVUU7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJcFR4SW5mby0+VVNCRE1BVHhidXJzdCA9IDE7CisJfQorCisJTmRpc01vdmVNZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwVHhCbGstPkhlYWRlckJ1ZiwgVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBod0hkckxlbik7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpKHBXaXJlbGVzc1BhY2tldCArIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFKSwgRElSX1dSSVRFLCBGQUxTRSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCXBXaXJlbGVzc1BhY2tldCArPSAoVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBod0hkckxlbik7CisJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MgKz0gKFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgaHdIZHJMZW4pOworCisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7CisKKwlOZGlzTW92ZU1lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBUeEJsay0+cFNyY0J1ZkRhdGEsIHBUeEJsay0+U3JjQnVmTGVuKTsKKworCS8vCVplcm8gdGhlIGxhc3QgcGFkZGluZy4KKwlwV2lyZWxlc3NQYWNrZXQgKz0gcFR4QmxrLT5TcmNCdWZMZW47CisJTmRpc1plcm9NZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwYWRkaW5nICsgOCk7CisKKwlpZiAoZnJhZ051bSA9PSBwVHhCbGstPlRvdGFsRnJhZ051bSkKKwl7CisJCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworCQkvLyBVcGRhdGUgdGhlIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbi4gMzkwNiB1c2VkIHRvIHByZXZlbnQgdGhlIE5leHRCdWxrT3V0IGlzIGEgQS1SQUxJTksvQS1NU0RVIEZyYW1lLgorCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKz0gcFR4QmxrLT5Qcml2OworCQlpZiAoVHhRTGFzdFJvdW5kID09IFRSVUUpCisJCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPSA4OworCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKworCisJCS8vIEZpbmFsbHksIHNldCBiQ3VyV3JpdGluZyBhcyBGQUxTRQorCXBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPSBGQUxTRTsKKworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworCQkvLyBzdWNjZWVkIGFuZCByZWxlYXNlIHRoZSBza2IgYnVmZmVyCisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCX0KKworCisJcmV0dXJuKFN0YXR1cyk7CisKK30KKworCitVU0hPUlQgUnRtcFVTQl9Xcml0ZVNpbmdsZVR4UmVzb3VyY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVFhfQkxLCQkJKnBUeEJsaywKKwlJTglCT09MRUFOCQkJYklzTGFzdCwKKwlPVVQJVVNIT1JUCQkJKkZyZWVOdW1iZXIpCit7CisJSFRfVFhfQ09OVEVYVAkqcEhUVFhDb250ZXh0OworCVVTSE9SVAkJCWh3SGRyTGVuOworCVVJTlQzMgkJCWZpbGxPZmZzZXQ7CisJVFhJTkZPX1NUUlVDCSpwVHhJbmZvOworCVRYV0lfU1RSVUMJCSpwVHhXSTsKKwlQVUNIQVIJCQlwV2lyZWxlc3NQYWNrZXQ7CisJVUNIQVIJCQlRdWVJZHg7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKwlORElTX1NUQVRVUwkJU3RhdHVzOworCVVJTlQzMgkJCVVTQkRNQXBrdExlbiA9IDAsIERNQUhkckxlbiwgcGFkZGluZzsKKwlCT09MRUFOCQkJYlR4UUxhc3RSb3VuZCA9IEZBTFNFOworCisJLy8gRm9yIFVTQiwgZGlkbid0IG5lZWQgUENJX01BUF9TSU5HTEUoKQorCS8vU3JjQnVmUEEgPSBQQ0lfTUFQX1NJTkdMRShwQWQsIChjaGFyICopIHBUeEJsay0+cFNyY0J1ZkRhdGEsIHBUeEJsay0+U3JjQnVmTGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCisJLy8KKwkvLyBnZXQgVHggUmluZyBSZXNvdXJjZSAmIERtYSBCdWZmZXIgYWRkcmVzcworCS8vCisJUXVlSWR4ID0gcFR4QmxrLT5RdWVJZHg7CisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7CisJcEhUVFhDb250ZXh0ICA9ICZwQWQtPlR4Q29udGV4dFtRdWVJZHhdOworCWZpbGxPZmZzZXQgPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb247CisKKworCisJLy8gQ2hlY2sgcmluZyBmdWxsLgorCVN0YXR1cyA9IFJ0bXBVU0JDYW5Eb1dyaXRlKHBBZCwgUXVlSWR4LCBwSFRUWENvbnRleHQpOworCWlmKFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IFRSVUU7CisKKwkJcFR4SW5mbyA9IChQVFhJTkZPX1NUUlVDKSgmcFR4QmxrLT5IZWFkZXJCdWZbMF0pOworCQlwVHhXST0gKFBUWFdJX1NUUlVDKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKTsKKworCQkvLyBSZXNlcnZlIHNwYWNlIGZvciA4IGJ5dGVzIHBhZGRpbmcuCisJCWlmICgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9PSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pKQorCQl7CisJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uICs9IDg7CisJCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKz0gODsKKwkJCWZpbGxPZmZzZXQgKz0gODsKKwkJfQorCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKworCQlwV2lyZWxlc3NQYWNrZXQgPSAmcEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbZmlsbE9mZnNldF07CisKKwkJLy8gY29weSBUWFdJICsgV0xBTiBIZWFkZXIgKyBMTEMgaW50byBETUEgSGVhZGVyIEJ1ZmZlcgorCQkvL2h3SGRyTGVuID0gUk9VTkRfVVAocFR4QmxrLT5NcGR1SGVhZGVyTGVuLCA0KTsKKwkJaHdIZHJMZW4gPSBwVHhCbGstPk1wZHVIZWFkZXJMZW4gKyBwVHhCbGstPkhkclBhZExlbjsKKworCQkvLyBCdWlsZCBvdXIgVVJCIGZvciBVU0JECisJCURNQUhkckxlbiA9IFRYV0lfU0laRSArIGh3SGRyTGVuOworCQlVU0JETUFwa3RMZW4gPSBETUFIZHJMZW4gKyBwVHhCbGstPlNyY0J1ZkxlbjsKKwkJcGFkZGluZyA9ICg0IC0gKFVTQkRNQXBrdExlbiAlIDQpKSAmIDB4MDM7CS8vIHJvdW5kIHVwIHRvIDQgYnl0ZSBhbGlnbm1lbnQKKwkJVVNCRE1BcGt0TGVuICs9IHBhZGRpbmc7CisKKwkJcFR4QmxrLT5Qcml2ID0gKFRYSU5GT19TSVpFICsgVVNCRE1BcGt0TGVuKTsKKworCQkvLyBGb3IgVHhJbmZvLCB0aGUgbGVuZ3RoIG9mIFVTQkRNQXBrdExlbiA9IFRYV0lfU0laRSArIDgwMi4xMSBoZWFkZXIgKyBwYXlsb2FkCisJCS8vUFMgcGFja2V0cyB1c2UgSENDQSBxdWV1ZSB3aGVuIGRlcXVldWUgZnJvbSBQUyB1bmljYXN0IHF1ZXVlIChXaUZpIFdQQTIgTUE5X0RUMSBmb3IgTWFydmVsbCBCIFNUQSkKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJUlRNUFdyaXRlVHhJbmZvKHBBZCwgcFR4SW5mbywgKFVTSE9SVCkoVVNCRE1BcGt0TGVuKSwgRkFMU0UsIEZJRk9fRURDQSwgRkFMU0UgLypOZXh0VmFsaWQqLywgIEZBTFNFKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlpZiAoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArIDM5MDYgKyBwVHhCbGstPlByaXYpID4gTUFYX1RYQlVMS19MSU1JVCkKKwkJeworCQkJcFR4SW5mby0+U3dVc2VMYXN0Um91bmQgPSAxOworCQkJYlR4UUxhc3RSb3VuZCA9IFRSVUU7CisJCX0KKwkJTmRpc01vdmVNZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwVHhCbGstPkhlYWRlckJ1ZiwgVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBod0hkckxlbik7CisjaWZkZWYgUlRfQklHX0VORElBTgorCQlSVE1QRnJhbWVFbmRpYW5DaGFuZ2UocEFkLCAoUFVDSEFSKShwV2lyZWxlc3NQYWNrZXQgKyBUWElORk9fU0laRSArIFRYV0lfU0laRSksIERJUl9XUklURSwgRkFMU0UpOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKwkJcFdpcmVsZXNzUGFja2V0ICs9IChUWElORk9fU0laRSArIFRYV0lfU0laRSArIGh3SGRyTGVuKTsKKworCQkvLyBXZSB1bmxvY2sgaXQgaGVyZSB0byBwcmV2ZW50IHRoZSBmaXJzdCA4IGJ5dGVzIG1heWJlIG92ZXItd3JpdGVkIGlzc3VlLgorCQkvLwkxLiBGaXJzdCB3ZSBnb3QgQ3VyV3JpdGVQb3NpdGlvbiBidXQgdGhlIGZpcnN0IDggYnl0ZXMgc3RpbGwgbm90IHdyaXRlIHRvIHRoZSBwVHhjb250ZXh0LgorCQkvLwkyLiBBbiBpbnRlcnJ1cHQgYnJlYWsgb3VyIHJvdXRpbmUgYW5kIGhhbmRsZSBidWxrLW91dCBjb21wbGV0ZS4KKwkJLy8JMy4gSW4gdGhlIGJ1bGstb3V0IGNvbXBsbGV0ZSwgaXQgbmVlZCB0byBkbyBhbm90aGVyIGJ1bGstb3V0LAorCQkvLwkJCWlmIHRoZSBFTmV4dEJ1bGtPdXRQb3NpdGlvbiBpcyBqdXN0IHRoZSBzYW1lIGFzIEN1cldyaXRlUG9zaXRpb24sIGl0IHdpbGwgc2F2ZSB0aGUgZmlyc3QgOCBieXRlcyBmcm9tIEN1cldyaXRlUG9zaXRpb24sCisJCS8vCQkJYnV0IHRoZSBwYXlsb2FkIHN0aWxsIG5vdCBjb3B5ZWQuIHRoZSBwVHhDb250ZXh0LT5TYXZlZFBhZFtdIHdpbGwgc2F2ZSBhcyBhbGx6ZXJvLiBhbmQgc2V0IHRoZSBiQ29weVBhZCA9IFRSVUUuCisJCS8vCTQuIEludGVycnVwdCBjb21wbGV0ZS4KKwkJLy8gIDUuIE91ciBpbnRlcnJ1cHRlZCByb3V0aW5lIGdvIGJhY2sgYW5kIGZpbGwgdGhlIGZpcnN0IDggYnl0ZXMgdG8gcFR4Q29udGV4dC4KKwkJLy8JNi4gTmV4dCB0aW1lIHdoZW4gZG8gYnVsay1vdXQsIGl0IGZvdW5kIHRoZSBiQ29weVBhZD09VFJVRSBhbmQgd2lsbCBjb3B5IHRoZSBTYXZlZFBhZFtdIHRvIHBUeENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24uCisJCS8vCQlhbmQgdGhlIHBhY2tldCB3aWxsIHdyb25nLgorCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyArPSAoVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBod0hkckxlbik7CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJCU5kaXNNb3ZlTWVtb3J5KHBXaXJlbGVzc1BhY2tldCwgcFR4QmxrLT5wU3JjQnVmRGF0YSwgcFR4QmxrLT5TcmNCdWZMZW4pOworCQlwV2lyZWxlc3NQYWNrZXQgKz0gcFR4QmxrLT5TcmNCdWZMZW47CisJCU5kaXNaZXJvTWVtb3J5KHBXaXJlbGVzc1BhY2tldCwgcGFkZGluZyArIDgpOworCisJCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKz0gcFR4QmxrLT5Qcml2OworCQlpZiAoYlR4UUxhc3RSb3VuZCkKKwkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9IDg7CisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zID0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uOworCisJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IEZBTFNFOworCX0KKworCisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7CisKKworCS8vIHN1Y2NlZWQgYW5kIHJlbGVhc2UgdGhlIHNrYiBidWZmZXIKKwlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFR4QmxrLT5wUGFja2V0LCBORElTX1NUQVRVU19TVUNDRVNTKTsKKworCXJldHVybihTdGF0dXMpOworCit9CisKKworVVNIT1JUIFJ0bXBVU0JfV3JpdGVNdWx0aVR4UmVzb3VyY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVFhfQkxLCQkJKnBUeEJsaywKKwlJTglVQ0hBUgkJCWZyYW1lTnVtLAorCU9VVAlVU0hPUlQJCQkqRnJlZU51bWJlcikKK3sKKwlIVF9UWF9DT05URVhUCSpwSFRUWENvbnRleHQ7CisJVVNIT1JUCQkJaHdIZHJMZW47CS8vIFRoZSBod0hkckxlbiBjb25zaXN0IG9mIDgwMi4xMSBoZWFkZXIgbGVuZ3RoIHBsdXMgdGhlIGhlYWRlciBwYWRkaW5nIGxlbmd0aC4KKwlVSU5UMzIJCQlmaWxsT2Zmc2V0OworCVRYSU5GT19TVFJVQwkqcFR4SW5mbzsKKwlUWFdJX1NUUlVDCQkqcFR4V0k7CisJUFVDSEFSCQkJcFdpcmVsZXNzUGFja2V0ID0gTlVMTDsKKwlVQ0hBUgkJCVF1ZUlkeDsKKwlORElTX1NUQVRVUwkJU3RhdHVzOworCXVuc2lnbmVkIGxvbmcJSXJxRmxhZ3M7CisJLy9VSU5UMzIJCQlVU0JETUFwa3RMZW4gPSAwLCBETUFIZHJMZW4sIHBhZGRpbmc7CisKKwkvLworCS8vIGdldCBUeCBSaW5nIFJlc291cmNlICYgRG1hIEJ1ZmZlciBhZGRyZXNzCisJLy8KKwlRdWVJZHggPSBwVHhCbGstPlF1ZUlkeDsKKwlwSFRUWENvbnRleHQgID0gJnBBZC0+VHhDb250ZXh0W1F1ZUlkeF07CisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7CisKKwlpZihmcmFtZU51bSA9PSAwKQorCXsKKwkJLy8gQ2hlY2sgaWYgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIHRoaXMgYnVsay1vdXQgYmF0Y2guCisJCVN0YXR1cyA9IFJ0bXBVU0JDYW5Eb1dyaXRlKHBBZCwgUXVlSWR4LCBwSFRUWENvbnRleHQpOworCQlpZiAoU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJCXBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPSBUUlVFOworCisJCQlwVHhJbmZvID0gKFBUWElORk9fU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZlswXSk7CisJCQlwVHhXST0gKFBUWFdJX1NUUlVDKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKTsKKworCisJCQkvLyBSZXNlcnZlIHNwYWNlIGZvciA4IGJ5dGVzIHBhZGRpbmcuCisJCQlpZiAoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPT0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkKKwkJCXsKKworCQkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArPSA4OworCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gKz0gODsKKwkJCX0KKwkJCWZpbGxPZmZzZXQgPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb247CisJCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyA9IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbjsKKworCQkJcFdpcmVsZXNzUGFja2V0ID0gJnBIVFRYQ29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W2ZpbGxPZmZzZXRdOworCisJCQkvLworCQkJLy8gQ29weSBUWElORk8gKyBUWFdJICsgV0xBTiBIZWFkZXIgKyBMTEMgaW50byBETUEgSGVhZGVyIEJ1ZmZlcgorCQkJLy8KKwkJCWlmIChwVHhCbGstPlR4RnJhbWVUeXBlID09IFRYX0FNU0RVX0ZSQU1FKQorCQkJCS8vaHdIZHJMZW4gPSBST1VORF9VUChwVHhCbGstPk1wZHVIZWFkZXJMZW4tTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRCwgNCkrTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRDsKKwkJCQlod0hkckxlbiA9IHBUeEJsay0+TXBkdUhlYWRlckxlbi1MRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEICsgcFR4QmxrLT5IZHJQYWRMZW4gKyBMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEOworCQkJZWxzZSBpZiAocFR4QmxrLT5UeEZyYW1lVHlwZSA9PSBUWF9SQUxJTktfRlJBTUUpCisJCQkJLy9od0hkckxlbiA9IFJPVU5EX1VQKHBUeEJsay0+TXBkdUhlYWRlckxlbi1MRU5HVEhfQVJBTElOS19IRUFERVJfRklFTEQsIDQpK0xFTkdUSF9BUkFMSU5LX0hFQURFUl9GSUVMRDsKKwkJCQlod0hkckxlbiA9IHBUeEJsay0+TXBkdUhlYWRlckxlbi1MRU5HVEhfQVJBTElOS19IRUFERVJfRklFTEQgKyBwVHhCbGstPkhkclBhZExlbiArIExFTkdUSF9BUkFMSU5LX0hFQURFUl9GSUVMRDsKKwkJCWVsc2UKKwkJCQkvL2h3SGRyTGVuID0gUk9VTkRfVVAocFR4QmxrLT5NcGR1SGVhZGVyTGVuLCA0KTsKKwkJCQlod0hkckxlbiA9IHBUeEJsay0+TXBkdUhlYWRlckxlbiArIHBUeEJsay0+SGRyUGFkTGVuOworCisJCQkvLyBVcGRhdGUgdGhlIHBUeEJsay0+UHJpdi4KKwkJCXBUeEJsay0+UHJpdiA9IFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgaHdIZHJMZW47CisKKwkJCS8vCXBUeEluZm8tPlVTQkRNQXBrdExlbiBub3cganVzdCBhIHRlbXAgdmFsdWUgYW5kIHdpbGwgdG8gY29ycmVjdCBsYXR0ZXIuCisJCQlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAoVVNIT1JUKShwVHhCbGstPlByaXYpLCBGQUxTRSwgRklGT19FRENBLCBGQUxTRSAvKk5leHRWYWxpZCovLCAgRkFMU0UpOworCisJCQkvLyBDb3B5IGl0LgorCQkJTmRpc01vdmVNZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwVHhCbGstPkhlYWRlckJ1ZiwgcFR4QmxrLT5Qcml2KTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCQlSVE1QRnJhbWVFbmRpYW5DaGFuZ2UocEFkLCAoUFVDSEFSKShwV2lyZWxlc3NQYWNrZXQrIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFKSwgRElSX1dSSVRFLCBGQUxTRSk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCQkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MgKz0gcFR4QmxrLT5Qcml2OworCQkJcFdpcmVsZXNzUGFja2V0ICs9IHBUeEJsay0+UHJpdjsKKwkJfQorCX0KKwllbHNlCisJewkvLyBGb3Igc3ViLXNlcXVlbnQgZnJhbWVzIG9mIHRoaXMgYnVsay1vdXQgYmF0Y2guIEp1c3QgY29weSBpdCB0byBvdXIgYnVsay1vdXQgYnVmZmVyLgorCisJCVN0YXR1cyA9ICgocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBUUlVFKSA/IE5ESVNfU1RBVFVTX1NVQ0NFU1MgOiBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJaWYgKFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlmaWxsT2Zmc2V0ID0gIChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gKyBwVHhCbGstPlByaXYpOworCQkJcFdpcmVsZXNzUGFja2V0ID0gJnBIVFRYQ29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W2ZpbGxPZmZzZXRdOworCisJCQkvL2h3SGRyTGVuID0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuOworCQkJTmRpc01vdmVNZW1vcnkocFdpcmVsZXNzUGFja2V0LCBwVHhCbGstPkhlYWRlckJ1ZiwgcFR4QmxrLT5NcGR1SGVhZGVyTGVuKTsKKwkJCXBXaXJlbGVzc1BhY2tldCArPSAocFR4QmxrLT5NcGR1SGVhZGVyTGVuKTsKKwkJCXBUeEJsay0+UHJpdiArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47CisJCX0KKwkJZWxzZQorCQl7CS8vIEl0IHNob3VsZCBub3QgaGFwcGVuZWQgbm93IHVubGVzcyB3ZSBhcmUgZ29pbmcgdG8gc2h1dGRvd24uCisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJXcml0ZU11bHRpVHhSZXNvdXJjZSgpOmJDdXJXcml0aW5nIGlzIEZBTFNFIHdoZW4gaGFuZGxlIHN1Yi1zZXF1ZW50IGZyYW1lcy5cbiIpKTsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJCX0KKwl9CisKKworCS8vIFdlIHVubG9jayBpdCBoZXJlIHRvIHByZXZlbnQgdGhlIGZpcnN0IDggYnl0ZXMgbWF5YmUgb3Zlci13cml0ZSBpc3N1ZS4KKwkvLwkxLiBGaXJzdCB3ZSBnb3QgQ3VyV3JpdGVQb3NpdGlvbiBidXQgdGhlIGZpcnN0IDggYnl0ZXMgc3RpbGwgbm90IHdyaXRlIHRvIHRoZSBwVHhDb250ZXh0LgorCS8vCTIuIEFuIGludGVycnVwdCBicmVhayBvdXIgcm91dGluZSBhbmQgaGFuZGxlIGJ1bGstb3V0IGNvbXBsZXRlLgorCS8vCTMuIEluIHRoZSBidWxrLW91dCBjb21wbGxldGUsIGl0IG5lZWQgdG8gZG8gYW5vdGhlciBidWxrLW91dCwKKwkvLwkJCWlmIHRoZSBFTmV4dEJ1bGtPdXRQb3NpdGlvbiBpcyBqdXN0IHRoZSBzYW1lIGFzIEN1cldyaXRlUG9zaXRpb24sIGl0IHdpbGwgc2F2ZSB0aGUgZmlyc3QgOCBieXRlcyBmcm9tIEN1cldyaXRlUG9zaXRpb24sCisJLy8JCQlidXQgdGhlIHBheWxvYWQgc3RpbGwgbm90IGNvcHllZC4gdGhlIHBUeENvbnRleHQtPlNhdmVkUGFkW10gd2lsbCBzYXZlIGFzIGFsbHplcm8uIGFuZCBzZXQgdGhlIGJDb3B5UGFkID0gVFJVRS4KKwkvLwk0LiBJbnRlcnJ1cHQgY29tcGxldGUuCisJLy8gIDUuIE91ciBpbnRlcnJ1cHRlZCByb3V0aW5lIGdvIGJhY2sgYW5kIGZpbGwgdGhlIGZpcnN0IDggYnl0ZXMgdG8gcFR4Q29udGV4dC4KKwkvLwk2LiBOZXh0IHRpbWUgd2hlbiBkbyBidWxrLW91dCwgaXQgZm91bmQgdGhlIGJDb3B5UGFkPT1UUlVFIGFuZCB3aWxsIGNvcHkgdGhlIFNhdmVkUGFkW10gdG8gcFR4Q29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbi4KKwkvLwkJYW5kIHRoZSBwYWNrZXQgd2lsbCB3cm9uZy4KKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKworCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiV3JpdGVNdWx0aVR4UmVzb3VyY2U6IENXUG9zID0gJWxkLCBOQk91dFBvcyA9ICVsZC5cbiIsIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uKSk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvLyBDb3B5IHRoZSBmcmFtZSBjb250ZW50IGludG8gRE1BIGJ1ZmZlciBhbmQgdXBkYXRlIHRoZSBwVHhCbGstPlByaXYKKwlOZGlzTW92ZU1lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBUeEJsay0+cFNyY0J1ZkRhdGEsIHBUeEJsay0+U3JjQnVmTGVuKTsKKwlwV2lyZWxlc3NQYWNrZXQgKz0gcFR4QmxrLT5TcmNCdWZMZW47CisJcFR4QmxrLT5Qcml2ICs9IHBUeEJsay0+U3JjQnVmTGVuOworCitkb25lOgorCS8vIFJlbGVhc2UgdGhlIHNrYiBidWZmZXIgaGVyZQorCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCisJcmV0dXJuKFN0YXR1cyk7CisKK30KKworCitWT0lEIFJ0bXBVU0JfRmluYWxXcml0ZVR4UmVzb3VyY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVFhfQkxLCQkJKnBUeEJsaywKKwlJTglVU0hPUlQJCQl0b3RhbE1QRFVTaXplLAorCUlOCVVTSE9SVAkJCVR4SWR4KQoreworCVVDSEFSCQkJUXVlSWR4OworCUhUX1RYX0NPTlRFWFQJKnBIVFRYQ29udGV4dDsKKwlVSU5UMzIJCQlmaWxsT2Zmc2V0OworCVRYSU5GT19TVFJVQwkqcFR4SW5mbzsKKwlUWFdJX1NUUlVDCQkqcFR4V0k7CisJVUlOVDMyCQkJVVNCRE1BcGt0TGVuLCBwYWRkaW5nOworCXVuc2lnbmVkIGxvbmcJSXJxRmxhZ3M7CisJUFVDSEFSCQkJcFdpcmVsZXNzUGFja2V0OworCisJUXVlSWR4ID0gcFR4QmxrLT5RdWVJZHg7CisJcEhUVFhDb250ZXh0ICA9ICZwQWQtPlR4Q29udGV4dFtRdWVJZHhdOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbUXVlSWR4XSwgSXJxRmxhZ3MpOworCisJaWYgKHBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPT0gVFJVRSkKKwl7CisJCWZpbGxPZmZzZXQgPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb247CisJCWlmICgoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPT0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSB8fCAoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24tOCkgPT0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkKKwkJCSYmIChwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCA9PSBUUlVFKSkKKwkJCXBXaXJlbGVzc1BhY2tldCA9IChQVUNIQVIpKCZwSFRUWENvbnRleHQtPlNhdmVkUGFkWzBdKTsKKwkJZWxzZQorCQkJcFdpcmVsZXNzUGFja2V0ID0gKFBVQ0hBUikoJnBIVFRYQ29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W2ZpbGxPZmZzZXRdKTsKKworCQkvLworCQkvLyBVcGRhdGUgVHhJbmZvLT5VU0JETUFwa3RMZW4gLAorCQkvLwkJdGhlIGxlbmd0aCA9IFRYV0lfU0laRSArIDgwMi4xMV9oZHIgKyA4MDIuMTFfaGRyX3BhZCArIHBheWxvYWRfb2ZfYWxsX2JhdGNoX2ZyYW1lcyArIEJ1bGstT3V0LXBhZGRpbmcKKwkJLy8KKwkJcFR4SW5mbyA9IChQVFhJTkZPX1NUUlVDKShwV2lyZWxlc3NQYWNrZXQpOworCisJCS8vIENhbGN1bGF0ZSB0aGUgYnVsay1vdXQgcGFkZGluZworCQlVU0JETUFwa3RMZW4gPSBwVHhCbGstPlByaXYgLSBUWElORk9fU0laRTsKKwkJcGFkZGluZyA9ICg0IC0gKFVTQkRNQXBrdExlbiAlIDQpKSAmIDB4MDM7CS8vIHJvdW5kIHVwIHRvIDQgYnl0ZSBhbGlnbm1lbnQKKwkJVVNCRE1BcGt0TGVuICs9IHBhZGRpbmc7CisKKwkJcFR4SW5mby0+VVNCRE1BVHhQa3RMZW4gPSBVU0JETUFwa3RMZW47CisKKwkJLy8KKwkJLy8gVXBkYXRlIFRYV0ktPk1QRFV0b3RhbEJ5dGVDb3VudCAsCisJCS8vCQl0aGUgbGVuZ3RoID0gODAyLjExIGhlYWRlciArIHBheWxvYWRfb2ZfYWxsX2JhdGNoX2ZyYW1lcworCQlwVHhXST0gKFBUWFdJX1NUUlVDKShwV2lyZWxlc3NQYWNrZXQgKyBUWElORk9fU0laRSk7CisJCXBUeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPSB0b3RhbE1QRFVTaXplOworCisJCS8vCisJCS8vIFVwZGF0ZSB0aGUgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uCisJCS8vCisJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArPSAoVFhJTkZPX1NJWkUgKyBVU0JETUFwa3RMZW4pOworCQlpZiAoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArIDM5MDYpPiBNQVhfVFhCVUxLX0xJTUlUKQorCQl7CS8vIEFkZCAzOTA2IGZvciBwcmV2ZW50IHRoZSBOZXh0QnVsa091dCBwYWNrZXQgc2l6ZSBpcyBhIEEtUkFMSU5LL0EtTVNEVSBGcmFtZS4KKwkJCXBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9IDg7CisJCQlwVHhJbmZvLT5Td1VzZUxhc3RSb3VuZCA9IDE7CisJCX0KKwkJcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MgPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb247CisKKworCQkvLworCQkvLwlaZXJvIHRoZSBsYXN0IHBhZGRpbmcuCisJCS8vCisJCXBXaXJlbGVzc1BhY2tldCA9ICgmcEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbZmlsbE9mZnNldCArIHBUeEJsay0+UHJpdl0pOworCQlOZGlzWmVyb01lbW9yeShwV2lyZWxlc3NQYWNrZXQsIHBhZGRpbmcgKyA4KTsKKworCQkvLyBGaW5hbGx5LCBzZXQgYkN1cldyaXRpbmcgYXMgRkFMU0UKKwkJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IEZBTFNFOworCisJfQorCWVsc2UKKwl7CS8vIEl0IHNob3VsZCBub3QgaGFwcGVuZWQgbm93IHVubGVzcyB3ZSBhcmUgZ29pbmcgdG8gc2h1dGRvd24uCisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkZpbmFsV3JpdGVUeFJlc291cmNlKCk6YkN1cldyaXRpbmcgaXMgRkFMU0Ugd2hlbiBoYW5kbGUgbGFzdCBmcmFtZXMuXG4iKSk7CisJfQorCisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7CisKK30KKworCitWT0lEIFJ0bXBVU0JEYXRhTGFzdFR4SWR4KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJUXVlSWR4LAorCUlOCVVTSE9SVAkJCVR4SWR4KQoreworCS8vIERPIG5vdGhpbmcgZm9yIFVTQi4KK30KKworCisvKgorCVdoZW4gY2FuIGRvIGJ1bGstb3V0OgorCQkxLiBUeFN3RnJlZUlkeCA8IFRYX1JJTkdfU0laRTsKKwkJCUl0IG1lYW5zIGhhcyBhdCBsZWFzdCBvbmUgUmluZyBlbnRpdHkgaXMgcmVhZHkgZm9yIGJ1bGstb3V0LCBraWNrIGl0IG91dC4KKwkJMi4gSWYgVHhTd0ZyZWVJZHggPT0gVFhfUklOR19TSVpFCisJCQlDaGVjayBpZiB0aGUgQ3VyV3JpdGluZyBmbGFnIGlzIEZBTFNFLCBpZiBpdCdzIEZBTFNFLCB3ZSBjYW4gZG8ga2ljayBvdXQuCisKKyovCitWT0lEIFJ0bXBVU0JEYXRhS2lja091dCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVDSEFSCQkJUXVlSWR4KQoreworCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IFF1ZUlkeCkpOworCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKworfQorCisKKy8qCisJTXVzdCBiZSBydW4gaW4gSW50ZXJydXB0IGNvbnRleHQKKwlUaGlzIGZ1bmN0aW9uIGhhbmRsZSBSVDI4NzAgc3BlY2lmaWMgVHhEZXNjIGFuZCBjcHUgaW5kZXggdXBkYXRlIGFuZCBraWNrIHRoZSBwYWNrZXQgb3V0LgorICovCitpbnQgUnRtcFVTQk1nbXRLaWNrT3V0KAorCUlOIFJUTVBfQURBUFRFUiAJKnBBZCwKKwlJTiBVQ0hBUiAJCQlRdWVJZHgsCisJSU4gUE5ESVNfUEFDS0VUCQlwUGFja2V0LAorCUlOIFBVQ0hBUgkJCXBTcmNCdWZWQSwKKwlJTiBVSU5UIAkJCVNyY0J1ZkxlbikKK3sKKwlQVFhJTkZPX1NUUlVDCXBUeEluZm87CisJVUxPTkcJCQlCdWxrT3V0U2l6ZTsKKwlVQ0hBUgkJCXBhZExlbjsKKwlQVUNIQVIJCQlwRGVzdDsKKwlVTE9ORwkJCVN3SWR4ID0gcEFkLT5NZ210UmluZy5UeENwdUlkeDsKKwlQVFhfQ09OVEVYVAkJcE1MTUVDb250ZXh0ID0gKFBUWF9DT05URVhUKXBBZC0+TWdtdFJpbmcuQ2VsbFtTd0lkeF0uQWxsb2NWYTsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisKKwlwVHhJbmZvID0gKFBUWElORk9fU1RSVUMpKHBTcmNCdWZWQSk7CisKKwkvLyBCdWlsZCBvdXIgVVJCIGZvciBVU0JECisJQnVsa091dFNpemUgPSBTcmNCdWZMZW47CisJQnVsa091dFNpemUgPSAoQnVsa091dFNpemUgKyAzKSAmICh+Myk7CisJUlRNUFdyaXRlVHhJbmZvKHBBZCwgcFR4SW5mbywgKFVTSE9SVCkoQnVsa091dFNpemUgLSBUWElORk9fU0laRSksIFRSVUUsIEVwVG9RdWV1ZVtNR01UUElQRUlEWF0sIEZBTFNFLCAgRkFMU0UpOworCisJQnVsa091dFNpemUgKz0gNDsgLy8gQWx3YXlzIGFkZCA0IGV4dHJhIGJ5dGVzIGF0IGV2ZXJ5IHBhY2tldC4KKworCS8vIElmIEJ1bGtPdXRTaXplIGlzIG11bHRpcGxlIG9mIEJ1bGtPdXRNYXhQYWNrZXRTaXplLCBhZGQgZXh0cmEgNCBieXRlcyBhZ2Fpbi4KKwlpZiAoKEJ1bGtPdXRTaXplICUgcEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSkgPT0gMCkKKwkJQnVsa091dFNpemUgKz0gNDsKKworCXBhZExlbiA9IEJ1bGtPdXRTaXplIC0gU3JjQnVmTGVuOworCUFTU0VSVCgocGFkTGVuIDw9IFJUTVBfUEtUX1RBSUxfUEFERElORykpOworCisJLy8gTm93IG1lbXplcm8gYWxsIGV4dHJhIHBhZGRpbmcgYnl0ZXMuCisJcERlc3QgPSAoUFVDSEFSKShwU3JjQnVmVkEgKyBTcmNCdWZMZW4pOworCXNrYl9wdXQoR0VUX09TX1BLVF9UWVBFKHBQYWNrZXQpLCBwYWRMZW4pOworCU5kaXNaZXJvTWVtb3J5KHBEZXN0LCBwYWRMZW4pOworCisJUlRNUF9JUlFfTE9DSygmcEFkLT5NTE1FQnVsa091dExvY2ssIElycUZsYWdzKTsKKworCXBBZC0+TWdtdFJpbmcuQ2VsbFtwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4XS5wTmRpc1BhY2tldCA9IHBQYWNrZXQ7CisJcE1MTUVDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciA9IChQVFhfQlVGRkVSKShHRVRfT1NfUEtUX0RBVEFQVFIocFBhY2tldCkpOworCisJLy8gTGVuZ3RoIGluIFR4SW5mbyBzaG91bGQgYmUgOCBsZXNzIHRoYW4gYnVsa291dCBzaXplLgorCXBNTE1FQ29udGV4dC0+QnVsa091dFNpemUgPSBCdWxrT3V0U2l6ZTsKKwlwTUxNRUNvbnRleHQtPkluVXNlID0gVFJVRTsKKwlwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9IFRSVUU7CisKKworCS8vZm9yIGRlYnVnCisJLy9oZXhfZHVtcCgiUnRtcFVTQk1nbXRLaWNrT3V0IiwgJnBNTE1FQ29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0WzBdLCAocE1MTUVDb250ZXh0LT5CdWxrT3V0U2l6ZSA+IDE2ID8gMTYgOiBwTUxNRUNvbnRleHQtPkJ1bGtPdXRTaXplKSk7CisKKwkvL3BBZC0+UmFsaW5rQ291bnRlcnMuS2lja1R4Q291bnQrKzsKKwkvL3BBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhEb25lQ291bnQrKzsKKworCS8vaWYgKHBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHggPT0gTUdNVF9SSU5HX1NJWkUpCisJLy8JbmVlZEtpY2tPdXQgPSBUUlVFOworCisJLy8gRGVjcmVhc2UgdGhlIFR4U3dGcmVlSWR4IGFuZCBJbmNyZWFzZSB0aGUgVFhfQ1RYX0lEWAorCXBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHgtLTsKKwlJTkNfUklOR19JTkRFWChwQWQtPk1nbXRSaW5nLlR4Q3B1SWR4LCBNR01UX1JJTkdfU0laRSk7CisKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+TUxNRUJ1bGtPdXRMb2NrLCBJcnFGbGFncyk7CisKKwlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX01MTUUpOworCS8vaWYgKG5lZWRLaWNrT3V0KQorCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKworCXJldHVybiAwOworfQorCisKK1ZPSUQgUnRtcFVTQk51bGxGcmFtZUtpY2tPdXQoCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gVUNIQVIJCVF1ZUlkeCwKKwlJTiBVQ0hBUgkJKnBOdWxsRnJhbWUsCisJSU4gVUlOVDMyCQlmcmFtZUxlbikKK3sKKwlpZiAocEFkLT5OdWxsQ29udGV4dC5JblVzZSA9PSBGQUxTRSkKKwl7CisJCVBUWF9DT05URVhUCQlwTnVsbENvbnRleHQ7CisJCVBUWElORk9fU1RSVUMJcFR4SW5mbzsKKwkJUFRYV0lfU1RSVUMJCXBUeFdJOworCQlQVUNIQVIJCQlwV2lyZWxlc3NQa3Q7CisKKwkJcE51bGxDb250ZXh0ID0gJihwQWQtPk51bGxDb250ZXh0KTsKKworCQkvLyBTZXQgdGhlIGluIHVzZSBiaXQKKwkJcE51bGxDb250ZXh0LT5JblVzZSA9IFRSVUU7CisJCXBXaXJlbGVzc1BrdCA9IChQVUNIQVIpJnBOdWxsQ29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0WzBdOworCisJCVJUTVBaZXJvTWVtb3J5KCZwV2lyZWxlc3NQa3RbMF0sIDEwMCk7CisJCXBUeEluZm8gPSAoUFRYSU5GT19TVFJVQykmcFdpcmVsZXNzUGt0WzBdOworCQlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAoVVNIT1JUKShzaXplb2YoSEVBREVSXzgwMl8xMSkrVFhXSV9TSVpFKSwgVFJVRSwgRXBUb1F1ZXVlW01HTVRQSVBFSURYXSwgRkFMU0UsICBGQUxTRSk7CisJCXBUeEluZm8tPlFTRUwgPSBGSUZPX0VEQ0E7CisJCXBUeFdJID0gKFBUWFdJX1NUUlVDKSZwV2lyZWxlc3NQa3RbVFhJTkZPX1NJWkVdOworCQlSVE1QV3JpdGVUeFdJKHBBZCwgcFR4V0ksICBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgVFJVRSwgRkFMU0UsIDAsIEJTU0lEX1dDSUQsIChzaXplb2YoSEVBREVSXzgwMl8xMSkpLAorCQkJMCwgMCwgKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MsIElGU19IVFRYT1AsIEZBTFNFLCAmcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0KTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCVJUTVBXSUVuZGlhbkNoYW5nZSgoUFVDSEFSKXBUeFdJLCBUWVBFX1RYV0kpOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworCQlSVE1QTW92ZU1lbW9yeSgmcFdpcmVsZXNzUGt0W1RYV0lfU0laRStUWElORk9fU0laRV0sICZwQWQtPk51bGxGcmFtZSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpJnBXaXJlbGVzc1BrdFtUWElORk9fU0laRSArIFRYV0lfU0laRV0sIERJUl9XUklURSwgRkFMU0UpOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKwkJcEFkLT5OdWxsQ29udGV4dC5CdWxrT3V0U2l6ZSA9ICBUWElORk9fU0laRSArIFRYV0lfU0laRSArIHNpemVvZihwQWQtPk51bGxGcmFtZSkgKyA0OworCisJCS8vIEZpbGwgb3V0IGZyYW1lIGxlbmd0aCBpbmZvcm1hdGlvbiBmb3IgZ2xvYmFsIEJ1bGsgb3V0IGFyYml0b3IKKwkJLy9wTnVsbENvbnRleHQtPkJ1bGtPdXRTaXplID0gVHJhbnNmZXJCdWZmZXJMZW5ndGg7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBzZW5kIE5VTEwgRnJhbWUgQCVkIE1icHMuLi5cbiIsIFJhdGVJZFRvTWJwc1twQWQtPkNvbW1vbkNmZy5UeFJhdGVdKSk7CisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OVUxMKTsKKworCQkvLyBLaWNrIGJ1bGsgb3V0CisJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKwl9CisKK30KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNoZWNrIFJ4IGRlc2NyaXB0b3IsIHJldHVybiBORElTX1NUQVRVU19GQUlMVVJFIGlmIGFueSBlcnJvciBkb3VuZAorCisJQXJndW1lbnRzOgorCQlwUnhECQlQb2ludGVyCXRvIHRoZSBSeCBkZXNjcmlwdG9yCisKKwlSZXR1cm4gVmFsdWU6CisJCU5ESVNfU1RBVFVTX1NVQ0NFU1MJCU5vIGVycgorCQlORElTX1NUQVRVU19GQUlMVVJFCQlFcnJvcgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCVJUTVBDaGVja1J4RXJyb3IoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUEhFQURFUl84MDJfMTEJcEhlYWRlciwKKwlJTglQUlhXSV9TVFJVQwlwUnhXSSwKKwlJTglQUlQyOFhYX1JYRF9TVFJVQwlwUnhJTkZPKQoreworCVBDSVBIRVJfS0VZIHBXcGFLZXk7CisJSU5UCWRCbTsKKworCWlmIChwQWQtPmJQcm9taXNjdW91cyA9PSBUUlVFKQorCQlyZXR1cm4oTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJaWYocFJ4SU5GTyA9PSBOVUxMKQorCQlyZXR1cm4oTkRJU19TVEFUVVNfRkFJTFVSRSk7CisKKwkvLyBQaHkgZXJyb3JzICYgQ1JDIGVycm9ycworCWlmIChwUnhJTkZPLT5DcmMpCisJeworCQkvLyBDaGVjayBSU1NJIGZvciBOb2lzZSBIaXN0IHN0YXRpc3RpYyBjb2xsZWN0aW9uLgorCQlkQm0gPSAoSU5UKSAocFJ4V0ktPlJTU0kwKSAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGE7CisJCWlmIChkQm0gPD0gLTg3KQorCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVswXSArPSAxOworCQllbHNlIGlmIChkQm0gPD0gLTgyKQorCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVsxXSArPSAxOworCQllbHNlIGlmIChkQm0gPD0gLTc3KQorCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVsyXSArPSAxOworCQllbHNlIGlmIChkQm0gPD0gLTcyKQorCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVszXSArPSAxOworCQllbHNlIGlmIChkQm0gPD0gLTY3KQorCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVs0XSArPSAxOworCQllbHNlIGlmIChkQm0gPD0gLTYyKQorCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVs1XSArPSAxOworCQllbHNlIGlmIChkQm0gPD0gLTU3KQorCQkJcEFkLT5TdGFDZmcuUlBJRGVuc2l0eVs2XSArPSAxOworCQllbHNlIGlmIChkQm0gPiAtNTcpCisJCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5WzddICs9IDE7CisKKwkJcmV0dXJuKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCX0KKworCS8vIEFkZCBSeCBzaXplIHRvIGNoYW5uZWwgbG9hZCBjb3VudGVyLCB3ZSBzaG91bGQgaWdub3JlIGVycm9yIGNvdW50cworCXBBZC0+U3RhQ2ZnLkNMQnVzeUJ5dGVzICs9IChwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50KyAxNCk7CisKKwkvLyBEcm9wIFRvRHMgcHJvbWlzY291cyBmcmFtZSwgaXQgaXMgb3BlbmVkIGR1ZSB0byBDQ1ggMiBjaGFubmVsIGxvYWQgc3RhdGlzdGljcworCWlmIChwSGVhZGVyLT5GQy5Ub0RzKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkVycjtGQy5Ub0RzXG4iKSk7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCS8vIFBhdWwgMDQtMDMgZm9yIE9GRE0gUnggbGVuZ3RoIGlzc3VlCisJaWYgKHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgPiBNQVhfQUdHUkVHQVRJT05fU0laRSkKKwl7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJyZWNlaXZlZCBwYWNrZXQgdG9vIGxvbmdcbiIpKTsKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCisJLy8gRHJvcCBub3QgVTJNIGZyYW1lcywgY2FudCdzIGRyb3AgaGVyZSBiZWNhdXNlIHdlIHdpbGwgZHJvcCBiZWFjb24gaW4gdGhpcyBjYXNlCisJLy8gSSBhbSBraW5kIG9mIGRvdWJ0aW5nIHRoZSBVMk0gYml0IG9wZXJhdGlvbgorCS8vIGlmIChwUnhELT5VMk0gPT0gMCkKKwkvLwlyZXR1cm4oTkRJU19TVEFUVVNfRkFJTFVSRSk7CisKKwkvLyBkcm9wIGRlY3lwdGlvbiBmYWlsIGZyYW1lCisJaWYgKHBSeElORk8tPkRlY3J5cHRlZCAmJiBwUnhJTkZPLT5DaXBoZXJFcnIpCisJeworCisJCS8vCisJCS8vIE1JQyBFcnJvcgorCQkvLworCQlpZiAoKHBSeElORk8tPkNpcGhlckVyciA9PSAyKSAmJiBwUnhJTkZPLT5NeUJzcykKKwkJeworCQkJcFdwYUtleSA9ICZwQWQtPlNoYXJlZEtleVtCU1MwXVtwUnhXSS0+S2V5SW5kZXhdOworCQkJUlRNUFJlcG9ydE1pY0Vycm9yKHBBZCwgcFdwYUtleSk7CisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsKCJSeCBNSUMgVmFsdWUgZXJyb3JcbiIpKTsKKwkJfQorCisJCWlmIChwUnhJTkZPLT5EZWNyeXB0ZWQgJiYKKwkJCShwQWQtPlNoYXJlZEtleVtCU1MwXVtwUnhXSS0+S2V5SW5kZXhdLkNpcGhlckFsZyA9PSBDSVBIRVJfQUVTKSAmJgorCQkJKHBIZWFkZXItPlNlcXVlbmNlID09IHBBZC0+RnJhZ0ZyYW1lLlNlcXVlbmNlKSkKKwkJeworCQkJLy8KKwkJCS8vIEFjY2VwdGFibGUgc2luY2UgdGhlIEZpcnN0IEZyYWdGcmFtZSBubyBDaXBoZXJFcnIgcHJvYmxlbS4KKwkJCS8vCisJCQlyZXR1cm4oTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJCX0KKworCQlyZXR1cm4oTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJfQorCisJcmV0dXJuKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworfQorCitWT0lEIFJUMjh4eFVzYlN0YUFzaWNGb3JjZVdha2V1cCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBCT09MRUFOICAgICAgIGJGcm9tVHgpCit7CisgICAgQVVUT19XQUtFVVBfU1RSVUMJQXV0b1dha2V1cENmZzsKKworCUF1dG9XYWtldXBDZmcud29yZCA9IDA7CisJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19XQUtFVVBfQ0ZHLCBBdXRvV2FrZXVwQ2ZnLndvcmQpOworCisJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMxLCAweGZmLCAweDAwLCAweDAyKTsKKworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpOworfQorCitWT0lEIFJUMjh4eFVzYlN0YUFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVCBUYnR0TnVtVG9OZXh0V2FrZVVwKQoreworCUFVVE9fV0FLRVVQX1NUUlVDCUF1dG9XYWtldXBDZmc7CisKKwkvLyB3ZSBoYXZlIGRlY2lkZWQgdG8gU0xFRVAsIHNvIGF0IGxlYXN0IGRvIGl0IGZvciBhIEJFQUNPTiBwZXJpb2QuCisJaWYgKFRidHROdW1Ub05leHRXYWtlVXAgPT0gMCkKKwkJVGJ0dE51bVRvTmV4dFdha2VVcCA9IDE7CisKKwlBdXRvV2FrZXVwQ2ZnLndvcmQgPSAwOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEFVVE9fV0FLRVVQX0NGRywgQXV0b1dha2V1cENmZy53b3JkKTsKKworCUF1dG9XYWtldXBDZmcuZmllbGQuTnVtb2ZTbGVlcGluZ1RidHQgPSBUYnR0TnVtVG9OZXh0V2FrZVVwIC0gMTsKKwlBdXRvV2FrZXVwQ2ZnLmZpZWxkLkVuYWJsZUF1dG9XYWtldXAgPSAxOworCUF1dG9XYWtldXBDZmcuZmllbGQuQXV0b0xlYWRUaW1lID0gNTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBBVVRPX1dBS0VVUF9DRkcsIEF1dG9XYWtldXBDZmcud29yZCk7CisKKwlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzAsIDB4ZmYsIDB4ZmYsIDB4MDIpOyAgIC8vIHNlbmQgUE9XRVItU0FWRSBjb21tYW5kIHRvIE1DVS4gVGltZW91dCA0MHVzLgorCisJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpOworCit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK1ZPSUQgUlQyOHh4VXNiTWxtZVJhZGlvT24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSVDI4eHhVc2JNbG1lUmFkaW9PbigpXG4iKSk7CisKKwlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpKQorCQlyZXR1cm47CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKyAgICAJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDMxLCAweGZmLCAweDAwLCAweDAyKTsKKwkJUlRNUHVzZWNEZWxheSgxMDAwMCk7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCU5JQ1Jlc2V0RnJvbUVycm9yKHBBZCk7CisKKwkvLyBFbmFibGUgVHgvUngKKwlSVE1QRW5hYmxlUnhUeChwQWQpOworCisjaWZkZWYgUlQzMDcwCisJaWYgKElTX1JUMzA3MShwQWQpKQorCXsKKwkJUlQzMHh4UmV2ZXJzZVJGU2xlZXBNb2RlU2V0dXAocEFkKTsKKwl9CisjZW5kaWYgLy8gUlQzMDcwIC8vCisKKwkvLyBDbGVhciBSYWRpbyBvZmYgZmxhZworCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIFNldCBMRUQKKwlSVE1QU2V0TEVEKHBBZCwgTEVEX1JBRElPX09OKTsKK30KKworVk9JRCBSVDI4eHhVc2JNbG1lUmFkaW9PRkYoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJV1BETUFfR0xPX0NGR19TVFJVQwlHbG9DZmc7CisJVUlOVDMyCVZhbHVlLCBpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSVDI4eHhVc2JNbG1lUmFkaW9PRkYoKVxuIikpOworCisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpKQorCQlyZXR1cm47CisKKwkvLyBTZXQgTEVECisJUlRNUFNldExFRChwQWQsIExFRF9SQURJT19PRkYpOworCS8vIFNldCBSYWRpbyBvZmYgZmxhZworCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRik7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gTGluayBkb3duIGZpcnN0IGlmIGFueSBhc3NvY2lhdGlvbiBleGlzdHMKKwkJaWYgKElORlJBX09OKHBBZCkgfHwgQURIT0NfT04ocEFkKSkKKwkJCUxpbmtEb3duKHBBZCwgRkFMU0UpOworCQlSVE1QdXNlY0RlbGF5KDEwMDAwKTsKKworCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQkvLyBDbGVhbiB1cCBvbGQgYnNzIHRhYmxlCisJCUJzc1RhYmxlSW5pdCgmcEFkLT5TY2FuVGFiKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCWlmIChwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPT0gQldfNDApCisJeworCQkvLyBNdXN0IHVzaW5nIDQwTUh6LgorCQlBc2ljVHVybk9mZlJGQ2xrKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworCX0KKwllbHNlCisJeworCQkvLyBNdXN0IHVzaW5nIDIwTUh6LgorCQlBc2ljVHVybk9mZlJGQ2xrKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJfQorCisJLy8gRGlzYWJsZSBUeC9SeCBETUEKKwlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFdQRE1BX0dMT19DRkcsICZHbG9DZmcud29yZCk7CSAgIC8vIGRpc2FibGUgRE1BCisJR2xvQ2ZnLmZpZWxkLkVuYWJsZVR4RE1BID0gMDsKKwlHbG9DZmcuZmllbGQuRW5hYmxlUnhETUEgPSAwOworCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFdQRE1BX0dMT19DRkcsIEdsb0NmZy53b3JkKTsJICAgLy8gYWJvcnQgYWxsIFRYIHJpbmdzCisKKwkvLyBXYWl0aW5nIGZvciBETUEgaWRsZQorCWkgPSAwOworCWRvCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFdQRE1BX0dMT19DRkcsICZHbG9DZmcud29yZCk7CisJCWlmICgoR2xvQ2ZnLmZpZWxkLlR4RE1BQnVzeSA9PSAwKSAmJiAoR2xvQ2ZnLmZpZWxkLlJ4RE1BQnVzeSA9PSAwKSkKKwkJCWJyZWFrOworCisJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJfXdoaWxlIChpKysgPCAxMDApOworCisJLy8gRGlzYWJsZSBNQUMgVHgvUngKKwlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwlWYWx1ZSAmPSAoMHhmZmZmZmZmMyk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkvLyBNQUNfU1lTX0NUUkwgPT4gdmFsdWUgPSAweDAgPT4gNDBtQQorCS8vUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAwKTsKKworCS8vIFBXUl9QSU5fQ0ZHID0+IHZhbHVlID0gMHgwID0+IDQwbUEKKwkvL1JUTVBfSU9fV1JJVEUzMihwQWQsIFBXUl9QSU5fQ0ZHLCAwKTsKKworCS8vIFRYX1BJTl9DRkcgPT4gdmFsdWUgPSAweDAgPT4gMjBtQQorCS8vUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUElOX0NGRywgMCk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4MzAsIDB4ZmYsIDB4ZmYsIDB4MDIpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1faW5mby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGNiMWEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX2luZm8uYwpAQCAtMCwwICsxLDMzOTUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworI2luY2x1ZGUJIi4uL3J0X2NvbmZpZy5oIgorCitJTlQJU2hvd19TU0lEX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19XaXJlbGVzc01vZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X1R4QnVyc3RfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X1R4UHJlYW1ibGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X1R4UG93ZXJfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0NoYW5uZWxfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0JHUHJvdGVjdGlvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfUlRTVGhyZXNob2xkX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19GcmFnVGhyZXNob2xkX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitJTlQJU2hvd19IdEJ3X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19IdE1jc19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfSHRHaV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfSHRPcE1vZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0h0RXh0Y2hhX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19IdE1wZHVEZW5zaXR5X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19IdEJhV2luU2l6ZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfSHRSZGdfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0h0QW1zZHVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0h0QXV0b0JhX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitJTlQJU2hvd19Db3VudHJ5UmVnaW9uX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19Db3VudHJ5UmVnaW9uQUJhbmRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK0lOVAlTaG93X0NvdW50cnlDb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCisjaWZkZWYgQUdHUkVHQVRJT05fU1VQUE9SVAorSU5UCVNob3dfUGt0QWdncmVnYXRlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworI2VuZGlmIC8vIEFHR1JFR0FUSU9OX1NVUFBPUlQgLy8KKworI2lmZGVmIFdNTV9TVVBQT1JUCitJTlQJU2hvd19XbW1DYXBhYmxlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworI2VuZGlmIC8vIFdNTV9TVVBQT1JUIC8vCisKK0lOVAlTaG93X0lFRUU4MDIxMUhfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK0lOVAlTaG93X05ldHdvcmtUeXBlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitJTlQJU2hvd19BdXRoTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfRW5jcnlwVHlwZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKTsKKworSU5UCVNob3dfRGVmYXVsdEtleUlEX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19LZXkxX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19LZXkyX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19LZXkzX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19LZXk0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpOworCitJTlQJU2hvd19XUEFQU0tfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1Zik7CisKK3N0YXRpYyBzdHJ1Y3QgeworCUNIQVIgKm5hbWU7CisJSU5UICgqc2hvd19wcm9jKShQUlRNUF9BREFQVEVSIHBBZGFwdGVyLCBQVUNIQVIgYXJnKTsKK30gKlBSVE1QX1BSSVZBVEVfU1RBX1NIT1dfQ0ZHX1ZBTFVFX1BST0MsIFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQ1tdID0geworCXsiU1NJRCIsCQkJCQlTaG93X1NTSURfUHJvY30sCisJeyJXaXJlbGVzc01vZGUiLAkJCVNob3dfV2lyZWxlc3NNb2RlX1Byb2N9LAorCXsiVHhCdXJzdCIsCQkJCQlTaG93X1R4QnVyc3RfUHJvY30sCisJeyJUeFByZWFtYmxlIiwJCQkJU2hvd19UeFByZWFtYmxlX1Byb2N9LAorCXsiVHhQb3dlciIsCQkJCQlTaG93X1R4UG93ZXJfUHJvY30sCisJeyJDaGFubmVsIiwJCQkJCVNob3dfQ2hhbm5lbF9Qcm9jfSwKKwl7IkJHUHJvdGVjdGlvbiIsCQkJU2hvd19CR1Byb3RlY3Rpb25fUHJvY30sCisJeyJSVFNUaHJlc2hvbGQiLAkJCVNob3dfUlRTVGhyZXNob2xkX1Byb2N9LAorCXsiRnJhZ1RocmVzaG9sZCIsCQkJU2hvd19GcmFnVGhyZXNob2xkX1Byb2N9LAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCXsiSHRCdyIsCQkJCQlTaG93X0h0QndfUHJvY30sCisJeyJIdE1jcyIsCQkJCQlTaG93X0h0TWNzX1Byb2N9LAorCXsiSHRHaSIsCQkJCQlTaG93X0h0R2lfUHJvY30sCisJeyJIdE9wTW9kZSIsCQkJCVNob3dfSHRPcE1vZGVfUHJvY30sCisJeyJIdEV4dGNoYSIsCQkJCVNob3dfSHRFeHRjaGFfUHJvY30sCisJeyJIdE1wZHVEZW5zaXR5IiwJCQlTaG93X0h0TXBkdURlbnNpdHlfUHJvY30sCisJeyJIdEJhV2luU2l6ZSIsCQkgICAgICAgIFNob3dfSHRCYVdpblNpemVfUHJvY30sCisJeyJIdFJkZyIsCQkgICAgICAgIAlTaG93X0h0UmRnX1Byb2N9LAorCXsiSHRBbXNkdSIsCQkgICAgICAgIAlTaG93X0h0QW1zZHVfUHJvY30sCisJeyJIdEF1dG9CYSIsCQkgICAgICAgIFNob3dfSHRBdXRvQmFfUHJvY30sCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJeyJDb3VudHJ5UmVnaW9uIiwJCQlTaG93X0NvdW50cnlSZWdpb25fUHJvY30sCisJeyJDb3VudHJ5UmVnaW9uQUJhbmQiLAkJU2hvd19Db3VudHJ5UmVnaW9uQUJhbmRfUHJvY30sCisJeyJDb3VudHJ5Q29kZSIsCQkJCVNob3dfQ291bnRyeUNvZGVfUHJvY30sCisjaWZkZWYgQUdHUkVHQVRJT05fU1VQUE9SVAorCXsiUGt0QWdncmVnYXRlIiwJCQlTaG93X1BrdEFnZ3JlZ2F0ZV9Qcm9jfSwKKyNlbmRpZgorCisjaWZkZWYgV01NX1NVUFBPUlQKKwl7IldtbUNhcGFibGUiLAkJCQlTaG93X1dtbUNhcGFibGVfUHJvY30sCisjZW5kaWYKKwl7IklFRUU4MDIxMUgiLAkJCQlTaG93X0lFRUU4MDIxMUhfUHJvY30sCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisgICAgeyJOZXR3b3JrVHlwZSIsCQkJCVNob3dfTmV0d29ya1R5cGVfUHJvY30sCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJeyJBdXRoTW9kZSIsCQkJCVNob3dfQXV0aE1vZGVfUHJvY30sCisJeyJFbmNyeXBUeXBlIiwJCQkJU2hvd19FbmNyeXBUeXBlX1Byb2N9LAorCXsiRGVmYXVsdEtleUlEIiwJCQlTaG93X0RlZmF1bHRLZXlJRF9Qcm9jfSwKKwl7IktleTEiLAkJCQkJU2hvd19LZXkxX1Byb2N9LAorCXsiS2V5MiIsCQkJCQlTaG93X0tleTJfUHJvY30sCisJeyJLZXkzIiwJCQkJCVNob3dfS2V5M19Qcm9jfSwKKwl7IktleTQiLAkJCQkJU2hvd19LZXk0X1Byb2N9LAorCXsiV1BBUFNLIiwJCQkJCVNob3dfV1BBUFNLX1Byb2N9LAorCXtOVUxMLCBOVUxMfQorfTsKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBHZXQgRHJpdmVyIHZlcnNpb24uCisKKyAgICBSZXR1cm46CisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X0RyaXZlclZlcnNpb25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEcml2ZXIgdmVyc2lvbi0lc1xuIiwgU1RBX0RSSVZFUl9WRVJTSU9OKSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQ291bnRyeSBSZWdpb24uCisgICAgICAgIFRoaXMgY29tbWFuZCB3aWxsIG5vdCB3b3JrLCBpZiB0aGUgZmllbGQgb2YgQ291bnRyeVJlZ2lvbiBpbiBlZXByb20gaXMgcHJvZ3JhbW1lZC4KKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfQ291bnRyeVJlZ2lvbl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyByZWdpb247CisKKwlyZWdpb24gPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAorCXJldHVybiAtRU9QTk9UU1VQUDsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisKKwkvLyBDb3VudHJ5IGNhbiBiZSBzZXQgb25seSB3aGVuIEVFUFJPTSBub3QgcHJvZ3JhbW1lZAorCWlmIChwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uICYgMHg4MCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9Db3VudHJ5UmVnaW9uX1Byb2M6OnBhcmFtZXRlciBvZiBDb3VudHJ5UmVnaW9uIGluIGVlcHJvbSBpcyBwcm9ncmFtbWVkIFxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYoKHJlZ2lvbiA+PSAwKSAmJiAocmVnaW9uIDw9IFJFR0lPTl9NQVhJTVVNX0JHX0JBTkQpKQorCXsKKwkJcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbiA9IChVQ0hBUikgcmVnaW9uOworCX0KKwllbHNlIGlmIChyZWdpb24gPT0gUkVHSU9OXzMxX0JHX0JBTkQpCisJeworCQlwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uID0gKFVDSEFSKSByZWdpb247CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9Db3VudHJ5UmVnaW9uX1Byb2M6OnBhcmFtZXRlcnMgb3V0IG9mIHJhbmdlXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwkvLyBpZiBzZXQgY291bnRyeSByZWdpb24sIGRyaXZlciBuZWVkcyB0byBiZSByZXNldAorCUJ1aWxkQ2hhbm5lbExpc3QocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9Db3VudHJ5UmVnaW9uX1Byb2M6OihDb3VudHJ5UmVnaW9uPSVkKVxuIiwgcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbikpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IENvdW50cnkgUmVnaW9uIGZvciBBIGJhbmQuCisgICAgICAgIFRoaXMgY29tbWFuZCB3aWxsIG5vdCB3b3JrLCBpZiB0aGUgZmllbGQgb2YgQ291bnRyeVJlZ2lvbiBpbiBlZXByb20gaXMgcHJvZ3JhbW1lZC4KKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfQ291bnRyeVJlZ2lvbkFCYW5kX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIHJlZ2lvbjsKKworCXJlZ2lvbiA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJcmV0dXJuIC1FT1BOT1RTVVBQOworI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKworCS8vIENvdW50cnkgY2FuIGJlIHNldCBvbmx5IHdoZW4gRUVQUk9NIG5vdCBwcm9ncmFtbWVkCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCAmIDB4ODApCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQ291bnRyeVJlZ2lvbkFCYW5kX1Byb2M6OnBhcmFtZXRlciBvZiBDb3VudHJ5UmVnaW9uIGluIGVlcHJvbSBpcyBwcm9ncmFtbWVkIFxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYoKHJlZ2lvbiA+PSAwKSAmJiAocmVnaW9uIDw9IFJFR0lPTl9NQVhJTVVNX0FfQkFORCkpCisJeworCQlwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQgPSAoVUNIQVIpIHJlZ2lvbjsKKwl9CisJZWxzZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0NvdW50cnlSZWdpb25BQmFuZF9Qcm9jOjpwYXJhbWV0ZXJzIG91dCBvZiByYW5nZVxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJLy8gaWYgc2V0IGNvdW50cnkgcmVnaW9uLCBkcml2ZXIgbmVlZHMgdG8gYmUgcmVzZXQKKwlCdWlsZENoYW5uZWxMaXN0KHBBZCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQ291bnRyeVJlZ2lvbkFCYW5kX1Byb2M6OihDb3VudHJ5UmVnaW9uPSVkKVxuIiwgcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgV2lyZWxlc3MgTW9kZQorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9XaXJlbGVzc01vZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcJV2lyZWxlc3NNb2RlOworCUlOVAkJc3VjY2VzcyA9IFRSVUU7CisKKwlXaXJlbGVzc01vZGUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJSU5UIE1heFBoeU1vZGUgPSBQSFlfMTFHOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCU1heFBoeU1vZGUgPSBQSFlfMTFOXzVHOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCWlmIChXaXJlbGVzc01vZGUgPD0gTWF4UGh5TW9kZSkKKwkJeworCQkJUlRNUFNldFBoeU1vZGUocEFkLCBXaXJlbGVzc01vZGUpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJaWYgKFdpcmVsZXNzTW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKQorCQkJeworCQkJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPSBUUlVFOworCQkJCXBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPSBUUlVFOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPSBGQUxTRTsKKwkJCQlwQWQtPkNvbW1vbkNmZy5SRUdCQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID0gRkFMU0U7CisJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkvLyBTZXQgQWRob2NNb2RlIHJhdGVzCisJCQlpZiAocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfQURIT0MpCisJCQl7CisJCQkJTWxtZVVwZGF0ZVR4UmF0ZXMocEFkLCBGQUxTRSwgMCk7CisJCQkJTWFrZUlic3NCZWFjb24ocEFkKTsgICAgICAgICAgIC8vIHJlLWJ1aWxkIEJFQUNPTiBmcmFtZQorCQkJCUFzaWNFbmFibGVJYnNzU3luYyhwQWQpOyAgICAgICAvLyBjb3B5IHRvIG9uLWNoaXAgbWVtb3J5CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlzdWNjZXNzID0gRkFMU0U7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBpdCBpcyBuZWVkZWQgdG8gc2V0IFNTSUQgdG8gdGFrZSBlZmZlY3QKKwlpZiAoc3VjY2VzcyA9PSBUUlVFKQorCXsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJU2V0Q29tbW9uSFQocEFkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1dpcmVsZXNzTW9kZV9Qcm9jOjooPSVsZClcbiIsIFdpcmVsZXNzTW9kZSkpOworCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfV2lyZWxlc3NNb2RlX1Byb2M6OnBhcmFtZXRlcnMgb3V0IG9mIHJhbmdlXG4iKSk7CisJfQorCisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IENoYW5uZWwKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQ2hhbm5lbF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyAJSU5UCQlzdWNjZXNzID0gVFJVRTsKKwlVQ0hBUglDaGFubmVsOworCisJQ2hhbm5lbCA9IChVQ0hBUikgc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCS8vIGNoZWNrIGlmIHRoaXMgY2hhbm5lbCBpcyB2YWxpZAorCWlmIChDaGFubmVsU2FuaXR5KHBBZCwgQ2hhbm5lbCkgPT0gVFJVRSkKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSBDaGFubmVsOworCisJCQlpZiAoTU9OSVRPUl9PTihwQWQpKQorCQkJeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCU5fQ2hhbm5lbENoZWNrKHBBZCk7CisJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCAmJgorCQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPT0gQldfNDApCisJCQkJeworCQkJCQlOX1NldENlbkNoKHBBZCk7CisJCQkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCV180MCwgY29udHJvbF9jaGFubmVsKCVkKSwgQ2VudHJhbENoYW5uZWwoJWQpIFxuIiwKKwkJCQkJCQkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpKTsKKwkJCQl9CisJCQkJZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJCXsKKwkJCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJCQkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCV18yMCwgQ2hhbm5lbCglZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKKwkJCQl9CisJCQl9CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJc3VjY2VzcyA9IFRSVUU7CisJfQorCWVsc2UKKwl7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCXN1Y2Nlc3MgPSBGQUxTRTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9CisKKworCWlmIChzdWNjZXNzID09IFRSVUUpCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9DaGFubmVsX1Byb2M6OihDaGFubmVsPSVkKVxuIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IFNob3J0IFNsb3QgVGltZSBFbmFibGUgb3IgRGlzYWJsZQorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9TaG9ydFNsb3RfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgU2hvcnRTbG90OworCisJU2hvcnRTbG90ID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChTaG9ydFNsb3QgPT0gMSkKKwkJcEFkLT5Db21tb25DZmcuYlVzZVNob3J0U2xvdFRpbWUgPSBUUlVFOworCWVsc2UgaWYgKFNob3J0U2xvdCA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5iVXNlU2hvcnRTbG90VGltZSA9IEZBTFNFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfU2hvcnRTbG90X1Byb2M6OihTaG9ydFNsb3Q9JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5iVXNlU2hvcnRTbG90VGltZSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IFR4IHBvd2VyCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X1R4UG93ZXJfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgVHhQb3dlcjsKKwlJTlQgICBzdWNjZXNzID0gRkFMU0U7CisKKwlUeFBvd2VyID0gKFVMT05HKSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCWlmIChUeFBvd2VyIDw9IDEwMCkKKwl7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuVHhQb3dlckRlZmF1bHQgPSBUeFBvd2VyOworCQkJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyRGVmYXVsdDsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQlzdWNjZXNzID0gVFJVRTsKKwl9CisJZWxzZQorCQlzdWNjZXNzID0gRkFMU0U7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfVHhQb3dlcl9Qcm9jOjooVHhQb3dlclBlcmNlbnRhZ2U9JWxkKVxuIiwgcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UpKTsKKworCXJldHVybiBzdWNjZXNzOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCAxMUIvMTFHIFByb3RlY3Rpb24KKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQkdQcm90ZWN0aW9uX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCXN3aXRjaCAoc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKSkKKwl7CisJCWNhc2UgMDogLy9BVVRPCisJCQlwQWQtPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24gPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMTogLy9BbHdheXMgT24KKwkJCXBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAyOiAvL0Fsd2F5cyBPRkYKKwkJCXBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9IDI7CisJCQlicmVhazsKKwkJZGVmYXVsdDogIC8vSW52YWxpZCBhcmd1bWVudAorCQkJcmV0dXJuIEZBTFNFOworCX0KKworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0JHUHJvdGVjdGlvbl9Qcm9jOjooQkdQcm90ZWN0aW9uPSVsZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbikpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IFR4UHJlYW1ibGUKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfVHhQcmVhbWJsZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlSVF84MDJfMTFfUFJFQU1CTEUJUHJlYW1ibGU7CisKKwlQcmVhbWJsZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKworCXN3aXRjaCAoUHJlYW1ibGUpCisJeworCQljYXNlIFJ0ODAyXzExUHJlYW1ibGVTaG9ydDoKKwkJCXBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUgPSBQcmVhbWJsZTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJTWxtZVNldFR4UHJlYW1ibGUocEFkLCBSdDgwMl8xMVByZWFtYmxlU2hvcnQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJYnJlYWs7CisJCWNhc2UgUnQ4MDJfMTFQcmVhbWJsZUxvbmc6CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCWNhc2UgUnQ4MDJfMTFQcmVhbWJsZUF1dG86CisJCQkvLyBpZiB1c2VyIHdhbnRzIEFVVE8sIGluaXRpYWxpemUgdG8gTE9ORyBoZXJlLCB0aGVuIGNoYW5nZSBhY2NvcmRpbmcgdG8gQVAncworCQkJLy8gY2FwYWJpbGl0eSB1cG9uIGFzc29jaWF0aW9uLgorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJcEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9IFByZWFtYmxlOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQlNbG1lU2V0VHhQcmVhbWJsZShwQWQsIFJ0ODAyXzExUHJlYW1ibGVMb25nKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCWJyZWFrOworCQlkZWZhdWx0OiAvL0ludmFsaWQgYXJndW1lbnQKKwkJCXJldHVybiBGQUxTRTsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfVHhQcmVhbWJsZV9Qcm9jOjooVHhQcmVhbWJsZT0lbGQpXG4iLCBwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgUlRTIFRocmVzaG9sZAorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9SVFNUaHJlc2hvbGRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJIE5ESVNfODAyXzExX1JUU19USFJFU0hPTEQgICAgICAgICAgIFJ0c1RocmVzaDsKKworCVJ0c1RocmVzaCA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZigoUnRzVGhyZXNoID4gMCkgJiYgKFJ0c1RocmVzaCA8PSBNQVhfUlRTX1RIUkVTSE9MRCkpCisJCXBBZC0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCAgPSAoVVNIT1JUKVJ0c1RocmVzaDsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwllbHNlIGlmIChSdHNUaHJlc2ggPT0gMCkKKwkJcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkID0gTUFYX1JUU19USFJFU0hPTEQ7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1JUU1RocmVzaG9sZF9Qcm9jOjooUlRTVGhyZXNob2xkPSVkKVxuIiwgcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgRnJhZ21lbnQgVGhyZXNob2xkCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0ZyYWdUaHJlc2hvbGRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJIE5ESVNfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEICAgICBGcmFnVGhyZXNoOworCisJRnJhZ1RocmVzaCA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoRnJhZ1RocmVzaCA+IE1BWF9GUkFHX1RIUkVTSE9MRCB8fCBGcmFnVGhyZXNoIDwgTUlOX0ZSQUdfVEhSRVNIT0xEKQorCXsKKwkJLy9JbGxlZ2FsIEZyYWdUaHJlc2ggc28gd2Ugc2V0IGl0IHRvIGRlZmF1bHQKKwkJcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSBNQVhfRlJBR19USFJFU0hPTEQ7CisJfQorCWVsc2UgaWYgKEZyYWdUaHJlc2ggJSAyID09IDEpCisJeworCQkvLyBUaGUgbGVuZ3RoIG9mIGVhY2ggZnJhZ21lbnQgc2hhbGwgYWx3YXlzIGJlIGFuIGV2ZW4gbnVtYmVyIG9mIG9jdGV0cywgZXhjZXB0IGZvciB0aGUgbGFzdCBmcmFnbWVudAorCQkvLyBvZiBhbiBNU0RVIG9yIE1NUERVLCB3aGljaCBtYXkgYmUgZWl0aGVyIGFuIGV2ZW4gb3IgYW4gb2RkIG51bWJlciBvZiBvY3RldHMuCisJCXBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkID0gKFVTSE9SVCkoRnJhZ1RocmVzaCAtIDEpOworCX0KKwllbHNlCisJeworCQlwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCA9IChVU0hPUlQpRnJhZ1RocmVzaDsKKwl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkID09IE1BWF9GUkFHX1RIUkVTSE9MRCkKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJVc2VaZXJvVG9EaXNhYmxlRnJhZ21lbnQgPSBUUlVFOworCQllbHNlCisJCQlwQWQtPkNvbW1vbkNmZy5iVXNlWmVyb1RvRGlzYWJsZUZyYWdtZW50ID0gRkFMU0U7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0ZyYWdUaHJlc2hvbGRfUHJvYzo6KEZyYWdUaHJlc2hvbGQ9JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IFR4QnVyc3QKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfVHhCdXJzdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBUeEJ1cnN0OworCisJVHhCdXJzdCA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFR4QnVyc3QgPT0gMSkKKwkJcEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QgPSBUUlVFOworCWVsc2UgaWYgKFR4QnVyc3QgPT0gMCkKKwkJcEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QgPSBGQUxTRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZCBhcmd1bWVudAorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1R4QnVyc3RfUHJvYzo6KFR4QnVyc3Q9JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKyNpZmRlZiBBR0dSRUdBVElPTl9TVVBQT1JUCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBUeEJ1cnN0CisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X1BrdEFnZ3JlZ2F0ZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBhZ2dyZTsKKworCWFnZ3JlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChhZ2dyZSA9PSAxKQorCQlwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlID0gVFJVRTsKKwllbHNlIGlmIChhZ2dyZSA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlID0gRkFMU0U7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQgYXJndW1lbnQKKworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1BrdEFnZ3JlZ2F0ZV9Qcm9jOjooQUdHUkU9JWQpXG4iLCBwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZgorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBJRUVFODAyMTFILgorICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyAxIHdoZW4gbmVlZHMgcmFkYXIgZGV0ZWN0aW9uLCBvdGhlcndpc2UgMAorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9JRUVFODAyMTFIX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworICAgIFVMT05HIGllZWU4MDIxMWg7CisKKwlpZWVlODAyMTFoID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChpZWVlODAyMTFoID09IDEpCisJCXBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID0gVFJVRTsKKwllbHNlIGlmIChpZWVlODAyMTFoID09IDApCisJCXBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID0gRkFMU0U7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQgYXJndW1lbnQKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9JRUVFODAyMTFIX1Byb2M6OihJRUVFODAyMTFIPSVkKVxuIiwgcEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUgpKTsKKworCXJldHVybiBUUlVFOworfQorCisKKyNpZmRlZiBEQkcKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgRm9yIERlYnVnIGluZm9ybWF0aW9uCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0RlYnVnX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PiBTZXRfRGVidWdfUHJvYyAqKioqKioqKioqKioqKioqKioqXG4iKSk7CisKKyAgICBpZihzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApIDw9IFJUX0RFQlVHX0xPVUQpCisgICAgICAgIFJURGVidWdMZXZlbCA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT0gU2V0X0RlYnVnX1Byb2MoUlREZWJ1Z0xldmVsID0gJWxkKVxuIiwgUlREZWJ1Z0xldmVsKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZgorCitJTlQJU2hvd19EZXNjSW5mb19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFJlc2V0IHN0YXRpc3RpY3MgY291bnRlcgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBwQWRhcHRlciAgICAgICAgICAgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAgICAgICAgYXJnCisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfUmVzZXRTdGF0Q291bnRlcl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwkvL1VDSEFSICAgICAgICAgICBpOworCS8vTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT5TZXRfUmVzZXRTdGF0Q291bnRlcl9Qcm9jXG4iKSk7CisKKwkvLyBhZGQgdGhlIG1vc3QgdXAtdG8tZGF0ZSBoL3cgcmF3IGNvdW50ZXJzIGludG8gc29mdHdhcmUgY291bnRlcnMKKwlOSUNVcGRhdGVSYXdDb3VudGVycyhwQWQpOworCisJTmRpc1plcm9NZW1vcnkoJnBBZC0+V2xhbkNvdW50ZXJzLCBzaXplb2YoQ09VTlRFUl84MDJfMTEpKTsKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5Db3VudGVyczgwMjMsIHNpemVvZihDT1VOVEVSXzgwMl8zKSk7CisJTmRpc1plcm9NZW1vcnkoJnBBZC0+UmFsaW5rQ291bnRlcnMsIHNpemVvZihDT1VOVEVSX1JBTElOSykpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0JPT0xFQU4gUlRNUENoZWNrU3RyUHJpbnRBYmxlKAorICAgIElOICBDSEFSICpwSW5QdXRTdHIsCisgICAgSU4gIFVDSEFSIHN0ckxlbikKK3sKKyAgICBVQ0hBUiBpPTA7CisKKyAgICBmb3IgKGk9MDsgaTxzdHJMZW47IGkrKykKKyAgICB7CisgICAgICAgIGlmICgocEluUHV0U3RyW2ldIDwgMHgyMSkgfHwKKyAgICAgICAgICAgIChwSW5QdXRTdHJbaV0gPiAweDdFKSkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVJlbW92ZSBXUEEgS2V5IHByb2Nlc3MKKworCUFyZ3VtZW50czoKKwkJcEFkIAkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwQnVmCQkJCQkJCVBvaW50ZXIgdG8gdGhlIHdoZXJlIHRoZSBrZXkgc3RvcmVkCisKKwlSZXR1cm4gVmFsdWU6CisJCU5ESVNfU1VDQ0VTUwkJCQkJQWRkIGtleSBzdWNjZXNzZnVsbHkKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK1ZPSUQgICAgUlRNUFNldERlc2lyZWRSYXRlcygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBMT05HICAgICAgICAgICAgUmF0ZXMpCit7CisgICAgTkRJU184MDJfMTFfUkFURVMgYXJ5UmF0ZXM7CisKKyAgICBtZW1zZXQoJmFyeVJhdGVzLCAweDAwLCBzaXplb2YoTkRJU184MDJfMTFfUkFURVMpKTsKKyAgICBzd2l0Y2ggKHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSkKKyAgICB7CisgICAgICAgIGNhc2UgUEhZXzExQTogLy8gQSBvbmx5CisgICAgICAgICAgICBzd2l0Y2ggKFJhdGVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgNjAwMDAwMDogLy82TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4MGM7IC8vIDZNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA5MDAwMDAwOiAvLzlNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgxMjsgLy8gOU0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18xOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDEyMDAwMDAwOiAvLzEyTQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4MTg7IC8vIDEyTQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTgwMDAwMDA6IC8vMThNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgyNDsgLy8gMThNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfMzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyNDAwMDAwMDogLy8yNE0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDMwOyAvLyAyNE0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU180OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM2MDAwMDAwOiAvLzM2TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4NDg7IC8vIDM2TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDgwMDAwMDA6IC8vNDhNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHg2MDsgLy8gNDhNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfNjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA1NDAwMDAwMDogLy81NE0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDZjOyAvLyA1NE0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU183OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIC0xOiAvL0F1dG8KKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4NmM7IC8vIDU0TWJwcworICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1sxXSA9IDB4NjA7IC8vIDQ4TWJwcworICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1syXSA9IDB4NDg7IC8vIDM2TWJwcworICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1szXSA9IDB4MzA7IC8vIDI0TWJwcworICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1s0XSA9IDB4MjQ7IC8vIDE4TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1s1XSA9IDB4MTg7IC8vIDEyTQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1s2XSA9IDB4MTI7IC8vIDlNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzddID0gMHgwYzsgLy8gNk0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU19BVVRPOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBIWV8xMUJHX01JWEVEOiAvLyBCL0cgTWl4ZWQKKyAgICAgICAgY2FzZSBQSFlfMTFCOiAvLyBCIG9ubHkKKyAgICAgICAgY2FzZSBQSFlfMTFBQkdfTUlYRUQ6IC8vIEEvQi9HIE1peGVkCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzd2l0Y2ggKFJhdGVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTAwMDAwMDogLy8xTQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4MDI7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyMDAwMDAwOiAvLzJNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgwNDsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18xOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDUwMDAwMDA6IC8vNS41TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4MGI7IC8vIDUuNU0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18yOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDExMDAwMDAwOiAvLzExTQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4MTY7IC8vIDExTQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzM7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNjAwMDAwMDogLy82TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4MGM7IC8vIDZNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA5MDAwMDAwOiAvLzlNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgxMjsgLy8gOU0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18xOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDEyMDAwMDAwOiAvLzEyTQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4MTg7IC8vIDEyTQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTgwMDAwMDA6IC8vMThNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgyNDsgLy8gMThNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfMzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyNDAwMDAwMDogLy8yNE0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDMwOyAvLyAyNE0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU180OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM2MDAwMDAwOiAvLzM2TQorICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4NDg7IC8vIDM2TQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTXzU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDgwMDAwMDA6IC8vNDhNCisgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHg2MDsgLy8gNDhNCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfNjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA1NDAwMDAwMDogLy81NE0KKyAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMF0gPSAweDZjOyAvLyA1NE0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU183OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIC0xOiAvL0F1dG8KKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUIpCisgICAgICAgICAgICAgICAgICAgIHsgLy9CIE9ubHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzBdID0gMHgxNjsgLy8gMTFNYnBzCisgICAgICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1sxXSA9IDB4MGI7IC8vIDUuNU1icHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzJdID0gMHgwNDsgLy8gMk1icHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzNdID0gMHgwMjsgLy8gMU1icHMKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsgLy8oQi9HKSBNaXhlZCBvciAoQS9CL0cpIE1peGVkCisgICAgICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1swXSA9IDB4NmM7IC8vIDU0TWJwcworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbMV0gPSAweDYwOyAvLyA0OE1icHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzJdID0gMHg0ODsgLy8gMzZNYnBzCisgICAgICAgICAgICAgICAgICAgICAgICBhcnlSYXRlc1szXSA9IDB4MzA7IC8vIDI0TWJwcworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbNF0gPSAweDE2OyAvLyAxMU1icHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyeVJhdGVzWzVdID0gMHgwYjsgLy8gNS41TWJwcworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbNl0gPSAweDA0OyAvLyAyTWJwcworICAgICAgICAgICAgICAgICAgICAgICAgYXJ5UmF0ZXNbN10gPSAweDAyOyAvLyAxTWJwcworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfQVVUTzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBOZGlzWmVyb01lbW9yeShwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGUsIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKKyAgICBOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGUsICZhcnlSYXRlcywgc2l6ZW9mKE5ESVNfODAyXzExX1JBVEVTKSk7CisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIFJUTVBTZXREZXNpcmVkUmF0ZXMgKCUwMngsJTAyeCwlMDJ4LCUwMngsJTAyeCwlMDJ4LCUwMngsJTAyeClcbiIsCisgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVswXSxwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMV0sCisgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsyXSxwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbM10sCisgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs0XSxwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNV0sCisgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs2XSxwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbN10gKSk7CisgICAgLy8gQ2hhbmdpbmcgRGVzaXJlZFJhdGUgbWF5IGFmZmVjdCB0aGUgTUFYIFRYIHJhdGUgd2UgdXNlZCB0byBUWCBmcmFtZXMgb3V0CisgICAgTWxtZVVwZGF0ZVR4UmF0ZXMocEFkYXB0ZXIsIEZBTFNFLCAwKTsKK30KKworTkRJU19TVEFUVVMgUlRNUFdQQVJlbW92ZUtleVByb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFZPSUQJCQlwQnVmKQoreworCVBORElTXzgwMl8xMV9SRU1PVkVfS0VZIHBLZXk7CisJVUxPTkcJCQkJCUtleUlkeDsKKwlORElTX1NUQVRVUyAJCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCUJPT0xFQU4gCWJUeEtleTsgCQkvLyBTZXQgdGhlIGtleSBhcyB0cmFuc21pdCBrZXkKKwlCT09MRUFOIAliUGFpcndpc2U7CQkvLyBJbmRpY2F0ZSB0aGUga2V5IGlzIHBhaXJ3aXNlIGtleQorCUJPT0xFQU4gCWJLZXlSU0M7CQkvLyBpbmRpY2F0ZSB0aGUgcmVjZWl2ZSAgU0Mgc2V0IGJ5IEtleVJTQyB2YWx1ZS4KKwkJCQkJCQkJLy8gT3RoZXJ3aXNlLCBpdCB3aWxsIHNldCBieSB0aGUgTklDLgorCUJPT0xFQU4gCWJBdXRoZW50aWNhdG9yOyAvLyBpbmRpY2F0ZSBrZXkgaXMgc2V0IGJ5IGF1dGhlbnRpY2F0b3IuCisJSU5UIAkJaTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiLS0tPiBSVE1QV1BBUmVtb3ZlS2V5UHJvY1xuIikpOworCisJcEtleSA9IChQTkRJU184MDJfMTFfUkVNT1ZFX0tFWSkgcEJ1ZjsKKwlLZXlJZHggPSBwS2V5LT5LZXlJbmRleCAmIDB4ZmY7CisJLy8gQml0IDMxIG9mIEFkZC1rZXksIFR4IEtleQorCWJUeEtleQkJICAgPSAocEtleS0+S2V5SW5kZXggJiAweDgwMDAwMDAwKSA/IFRSVUUgOiBGQUxTRTsKKwkvLyBCaXQgMzAgb2YgQWRkLWtleSBQYWlyd2lzZUtleQorCWJQYWlyd2lzZQkgICA9IChwS2V5LT5LZXlJbmRleCAmIDB4NDAwMDAwMDApID8gVFJVRSA6IEZBTFNFOworCS8vIEJpdCAyOSBvZiBBZGQta2V5IEtleVJTQworCWJLZXlSU0MgCSAgID0gKHBLZXktPktleUluZGV4ICYgMHgyMDAwMDAwMCkgPyBUUlVFIDogRkFMU0U7CisJLy8gQml0IDI4IG9mIEFkZC1rZXkgQXV0aGVudGljYXRvcgorCWJBdXRoZW50aWNhdG9yID0gKHBLZXktPktleUluZGV4ICYgMHgxMDAwMDAwMCkgPyBUUlVFIDogRkFMU0U7CisKKwkvLyAxLiBJZiBiVHggaXMgVFJVRSwgcmV0dXJuIGZhaWx1cmUgaW5mb3JtYXRpb24KKwlpZiAoYlR4S2V5ID09IFRSVUUpCisJCXJldHVybihORElTX1NUQVRVU19JTlZBTElEX0RBVEEpOworCisJLy8gMi4gQ2hlY2sgUGFpcndpc2UgS2V5CisJaWYgKGJQYWlyd2lzZSkKKwl7CisJCS8vIGEuIElmIEJTU0lEIGlzIGJyb2FkY2FzdCwgcmVtb3ZlIGFsbCBwYWlyd2lzZSBrZXlzLgorCQkvLyBiLiBJZiBub3QgYnJvYWRjYXN0LCByZW1vdmUgdGhlIHBhaXJ3aXNlIHNwZWNpZmllZCBieSBCU1NJRAorCQlmb3IgKGkgPSAwOyBpIDwgU0hBUkVfS0VZX05VTTsgaSsrKQorCQl7CisJCQlpZiAoTUFDX0FERFJfRVFVQUwocEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQnNzSWQsIHBLZXktPkJTU0lEKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUTVBXUEFSZW1vdmVLZXlQcm9jKEtleUlkeD0lZClcbiIsIGkpKTsKKwkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5LZXlMZW4gPSAwOworCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCQkJCUFzaWNSZW1vdmVTaGFyZWRLZXlFbnRyeShwQWQsIEJTUzAsIChVQ0hBUilpKTsKKwkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCS8vIDMuIEdyb3VwIEtleQorCWVsc2UKKwl7CisJCS8vIGEuIElmIEJTU0lEIGlzIGJyb2FkY2FzdCwgcmVtb3ZlIGFsbCBncm91cCBrZXlzIGluZGV4ZWQKKwkJLy8gYi4gSWYgQlNTSUQgbWF0Y2hlZCwgZGVsZXRlIHRoZSBncm91cCBrZXkgaW5kZXhlZC4KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSVE1QV1BBUmVtb3ZlS2V5UHJvYyhLZXlJZHg9JWxkKVxuIiwgS2V5SWR4KSk7CisJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID0gMDsKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKwkJQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5KHBBZCwgQlNTMCwgKFVDSEFSKUtleUlkeCk7CisJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJfQorCisJcmV0dXJuIChTdGF0dXMpOworfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlSZW1vdmUgQWxsIFdQQSBLZXlzCisKKwlBcmd1bWVudHM6CisJCXBBZCAJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QV1BBUmVtb3ZlQWxsS2V5cygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKworCVVDSEFSIAlpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSVE1QV1BBUmVtb3ZlQWxsS2V5cyhBdXRoTW9kZT0lZCwgV2VwU3RhdHVzPSVkKVxuIiwgcEFkLT5TdGFDZmcuQXV0aE1vZGUsIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cykpOworCisJLy8gRm9yIFdFUC9DS0lQLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlbW92ZSBpdCwgc2luY2UgV2luWFAgd29uJ3Qgc2V0IGl0IGFnYWluIGFmdGVyCisJLy8gTGluayB1cC4gQW5kIGl0IHdpbGwgYmUgcmVwbGFjZWQgaWYgdXNlciBjaGFuZ2VkIGl0LgorCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA8IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKwkJcmV0dXJuOworCisJLy8gRm9yIFdQQS1Ob25lLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJlbW92ZSBpdCwgc2luY2UgV2luWFAgd29uJ3Qgc2V0IGl0IGFnYWluIGFmdGVyCisJLy8gTGluayB1cC4gQW5kIGl0IHdpbGwgYmUgcmVwbGFjZWQgaWYgdXNlciBjaGFuZ2VkIGl0LgorCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorCQlyZXR1cm47CisKKwkvLyBzZXQgQlNTSUQgd2NpZCBlbnRyeSBvZiB0aGUgUGFpci13aXNlIEtleSB0YWJsZSBhcyBuby1zZWN1cml0eSBtb2RlCisJQXNpY1JlbW92ZVBhaXJ3aXNlS2V5RW50cnkocEFkLCBCU1MwLCBCU1NJRF9XQ0lEKTsKKworCS8vIHNldCBhbGwgc2hhcmVkIGtleSBtb2RlIGFzIG5vLXNlY3VyaXR5LgorCWZvciAoaSA9IDA7IGkgPCBTSEFSRV9LRVlfTlVNOyBpKyspCisgICAgeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoInJlbW92ZSAlcyBrZXkgIyVkXG4iLCBDaXBoZXJOYW1lW3BBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZ10sIGkpKTsKKwkJTmRpc1plcm9NZW1vcnkoJnBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLCBzaXplb2YoQ0lQSEVSX0tFWSkpOworCisJCUFzaWNSZW1vdmVTaGFyZWRLZXlFbnRyeShwQWQsIEJTUzAsIGkpOworCX0KKworfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNoYW5nZSBOSUMgUEhZIG1vZGUuIFJlLWFzc29jaWF0aW9uIG1heSBiZSBuZWNlc3NhcnkuIHBvc3NpYmxlIHNldHRpbmdzCisJCWluY2x1ZGUgLSBQSFlfMTFCLCBQSFlfMTFCR19NSVhFRCwgUEhZXzExQSwgYW5kIFBIWV8xMUFCR19NSVhFRAorCisJQXJndW1lbnRzOgorCQlwQWQgLSBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBoeW1vZGUgIC0KKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBTZXRQaHlNb2RlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVMT05HIHBoeW1vZGUpCit7CisJSU5UIGk7CisJLy8gdGhlIHNlbGVjdGVkIHBoeW1vZGUgbXVzdCBiZSBzdXBwb3J0ZWQgYnkgdGhlIFJGIElDIGVuY29kZWQgaW4gRTJQUk9NCisKKwlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gKFVDSEFSKXBoeW1vZGU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUTVBTZXRQaHlNb2RlIDogUGh5TW9kZT0lZCwgY2hhbm5lbD0lZCBcbiIsIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJQnVpbGRDaGFubmVsTGlzdEV4KHBBZCk7CisjZWxzZQorCUJ1aWxkQ2hhbm5lbExpc3QocEFkKTsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisKKwkvLyBzYW5pdHkgY2hlY2sgdXNlciBzZXR0aW5nCisJZm9yIChpID0gMDsgaSA8IHBBZC0+Q2hhbm5lbExpc3ROdW07IGkrKykKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID09IHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IHBBZC0+Q2hhbm5lbExpc3ROdW0pCisJeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJcEFkLT5Db21tb25DZmcuQ2hhbm5lbCA9IEZpcnN0Q2hhbm5lbChwQWQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSVE1QU2V0UGh5TW9kZTogY2hhbm5lbCBpcyBvdXQgb2YgcmFuZ2UsIHVzZSBmaXJzdCBjaGFubmVsPSVkIFxuIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCX0KKworCU5kaXNaZXJvTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGUsIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKKwlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5FeHRSYXRlLCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7CisJTmRpc1plcm9NZW1vcnkocEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZSwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOworCXN3aXRjaCAocGh5bW9kZSkgeworCQljYXNlIFBIWV8xMUI6CisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzBdICA9IDB4ODI7CSAgLy8gMSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVsxXSAgPSAweDg0OwkgIC8vIDIgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbMl0gID0gMHg4QjsJICAvLyA1LjUgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbM10gID0gMHg5NjsJICAvLyAxMSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbiAgPSA0OworCQkJcEFkLT5Db21tb25DZmcuRXh0UmF0ZUxlbiAgPSAwOworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVswXSAgPSAyOwkgICAvLyAxIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzFdICA9IDQ7CSAgIC8vIDIgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMl0gID0gMTE7ICAgIC8vIDUuNSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVszXSAgPSAyMjsgICAgLy8gMTEgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCS8vcEFkLT5Db21tb25DZmcuSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0NDSzsgLy8gVGhpcyBNT0RFIGlzIG9ubHkgRllJLiBub3QgdXNlCisJCQlicmVhazsKKworCQljYXNlIFBIWV8xMUc6CisJCWNhc2UgUEhZXzExQkdfTUlYRUQ6CisJCWNhc2UgUEhZXzExQUJHX01JWEVEOgorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQljYXNlIFBIWV8xMU5fMl80RzoKKwkJY2FzZSBQSFlfMTFBQkdOX01JWEVEOgorCQljYXNlIFBIWV8xMUJHTl9NSVhFRDoKKwkJY2FzZSBQSFlfMTFHTl9NSVhFRDoKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbMF0gID0gMHg4MjsJICAvLyAxIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzFdICA9IDB4ODQ7CSAgLy8gMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVsyXSAgPSAweDhCOwkgIC8vIDUuNSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVszXSAgPSAweDk2OwkgIC8vIDExIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzRdICA9IDB4MTI7CSAgLy8gOSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVs1XSAgPSAweDI0OwkgIC8vIDE4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzZdICA9IDB4NDg7CSAgLy8gMzYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbN10gID0gMHg2YzsJICAvLyA1NCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbiAgPSA4OworCQkJcEFkLT5Db21tb25DZmcuRXh0UmF0ZVswXSAgPSAweDBDOwkgIC8vIDYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVbMV0gID0gMHgxODsJICAvLyAxMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRXh0UmF0ZVsyXSAgPSAweDMwOwkgIC8vIDI0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5FeHRSYXRlWzNdICA9IDB4NjA7CSAgLy8gNDggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW4gID0gNDsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMF0gID0gMjsJICAgLy8gMSBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsxXSAgPSA0OwkgICAvLyAyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzJdICA9IDExOyAgICAvLyA1LjUgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbM10gID0gMjI7ICAgIC8vIDExIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzRdICA9IDEyOyAgICAvLyA2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzVdICA9IDE4OyAgICAvLyA5IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzZdICA9IDI0OyAgICAvLyAxMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs3XSAgPSAzNjsgICAgLy8gMTggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbOF0gID0gNDg7ICAgIC8vIDI0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzldICA9IDcyOyAgICAvLyAzNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVsxMF0gPSA5NjsgICAgLy8gNDggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMTFdID0gMTA4OyAgIC8vIDU0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlicmVhazsKKworCQljYXNlIFBIWV8xMUE6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUEhZXzExQU5fTUlYRUQ6CisJCWNhc2UgUEhZXzExQUdOX01JWEVEOgorCQljYXNlIFBIWV8xMU5fNUc6CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzBdICA9IDB4OEM7CSAgLy8gNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVsxXSAgPSAweDEyOwkgIC8vIDkgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbMl0gID0gMHg5ODsJICAvLyAxMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywgYmFzaWMgcmF0ZQorCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVszXSAgPSAweDI0OwkgIC8vIDE4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzRdICA9IDB4YjA7CSAgLy8gMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVbNV0gID0gMHg0ODsJICAvLyAzNiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuU3VwUmF0ZVs2XSAgPSAweDYwOwkgIC8vIDQ4IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5TdXBSYXRlWzddICA9IDB4NmM7CSAgLy8gNTQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVMZW4gID0gODsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW4gID0gMDsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMF0gID0gMTI7ICAgIC8vIDYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMV0gID0gMTg7ICAgIC8vIDkgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMl0gID0gMjQ7ICAgIC8vIDEyIG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzNdICA9IDM2OyAgICAvLyAxOCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs0XSAgPSA0ODsgICAgLy8gMjQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNV0gID0gNzI7ICAgIC8vIDM2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzZdICA9IDk2OyAgICAvLyA0OCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlUmF0ZVs3XSAgPSAxMDg7ICAgLy8gNTQgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJCS8vcEFkLT5Db21tb25DZmcuSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07IC8vIFRoaXMgTU9ERSBpcyBvbmx5IEZZSS4gbm90IHVzZQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCisJcEFkLT5Db21tb25DZmcuQmFuZFN0YXRlID0gVU5LTk9XTl9CQU5EOworfQorCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2FsbGVyIGVuc3VyZXMgd2UgaGFzIDgwMi4xMW4gc3VwcG9ydC4KKwkJQ2FsbHMgYXQgc2V0dGluZyBIVCBmcm9tIEFQL1NUQVNldGluZm9ybWF0aW9uCisKKwlBcmd1bWVudHM6CisJCXBBZCAtIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcGh5bW9kZSAgLQorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QU2V0SFQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JT0lEX1NFVF9IVF9QSFlNT0RFICpwSFRQaHlNb2RlKQoreworCS8vVUxPTkcJKnBtY3M7CisJVUlOVDMyCVZhbHVlID0gMDsKKwlVQ0hBUglCQlBWYWx1ZSA9IDA7CisJVUNIQVIJQkJQM1ZhbHVlID0gMDsKKwlVQ0hBUglSeFN0cmVhbSA9IHBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNldEhUIDogSFRfbW9kZSglZCksIEV4dE9mZnNldCglZCksIE1DUyglZCksIEJXKCVkKSwgU1RCQyglZCksIFNIT1JUR0koJWQpXG4iLAorCQkJCQkJCQkJCXBIVFBoeU1vZGUtPkh0TW9kZSwgcEhUUGh5TW9kZS0+RXh0T2Zmc2V0LAorCQkJCQkJCQkJCXBIVFBoeU1vZGUtPk1DUywgcEhUUGh5TW9kZS0+QlcsCisJCQkJCQkJCQkJcEhUUGh5TW9kZS0+U1RCQywgcEhUUGh5TW9kZS0+U0hPUlRHSSkpOworCisJLy8gRG9uJ3QgemVybyBzdXBwb3J0ZWRIeVBoeSBzdHJ1Y3R1cmUuCisJUlRNUFplcm9NZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eSwgc2l6ZW9mKHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eSkpOworCVJUTVBaZXJvTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8sIHNpemVvZihwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8pKTsKKwlSVE1QWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuTmV3RXh0Q2hhbk9mZnNldCwgc2l6ZW9mKHBBZC0+Q29tbW9uQ2ZnLk5ld0V4dENoYW5PZmZzZXQpKTsKKwlSVE1QWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LCBzaXplb2YocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5KSk7CisKKyAgIAlpZiAocEFkLT5Db21tb25DZmcuYlJkZykKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUGx1c0hUQyA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUkRHU3VwcG9ydCA9IDE7CisJfQorCWVsc2UKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUGx1c0hUQyA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUkRHU3VwcG9ydCA9IDA7CisJfQorCisJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NYXhSQW1wZHVGYWN0b3IgPSAzOworCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NYXhSQW1wZHVGYWN0b3IgPSAzOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNldEhUIDogUnhCQVdpbkxpbWl0ID0gJWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQpKTsKKworCS8vIE1pbW8gcG93ZXIgc2F2ZSwgQS1NU0RVIHNpemUsCisJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1RW5hYmxlID0gKFVTSE9SVClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVFbmFibGU7CisJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1U2l6ZSA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVTaXplOworCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NaW1vUHMgPSAoVUNIQVIpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlOworCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NcGR1RGVuc2l0eSA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHk7CisKKwlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkFNc2R1U2l6ZSA9IChVU0hPUlQpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkFtc2R1U2l6ZTsKKwlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLk1pbW9QcyA9IChVU0hPUlQpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlOworCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTXBkdURlbnNpdHkgPSAoVUNIQVIpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5OworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNldEhUIDogQU1zZHVTaXplID0gJWQsIE1pbW9QcyA9ICVkLCBNcGR1RGVuc2l0eSA9ICVkLCBNYXhSQW1wZHVGYWN0b3IgPSAlZFxuIiwKKwkJCQkJCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVTaXplLAorCQkJCQkJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NaW1vUHMsCisJCQkJCQkJCQkJCQkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1wZHVEZW5zaXR5LAorCQkJCQkJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NYXhSQW1wZHVGYWN0b3IpKTsKKworCWlmKHBIVFBoeU1vZGUtPkh0TW9kZSA9PSBIVE1PREVfR0YpCisJeworCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkdGID0gMTsKKwkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkdGID0gMTsKKwl9CisJZWxzZQorCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuR0YgPSAwOworCisJLy8gRGVjaWRlIFJ4IE1DU1NldAorCXN3aXRjaCAoUnhTdHJlYW0pCisJeworCQljYXNlIDE6CisJCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzBdID0gIDB4ZmY7CisJCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzFdID0gIDB4MDA7CisJCQlicmVhazsKKworCQljYXNlIDI6CisJCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzBdID0gIDB4ZmY7CisJCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuTUNTU2V0WzFdID0gIDB4ZmY7CisJCQlicmVhazsKKworCQljYXNlIDM6IC8vIDMqMworCQkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFswXSA9ICAweGZmOworCQkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9ICAweGZmOworCQkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFsyXSA9ICAweGZmOworCQkJYnJlYWs7CisJfQorCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJGb3J0eV9NaHpfSW50b2xlcmFudCAmJiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA8PSAxNCkgJiYgKHBIVFBoeU1vZGUtPkJXID09IEJXXzQwKSApCisJeworCQlwSFRQaHlNb2RlLT5CVyA9IEJXXzIwOworCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkZvcnR5X01oel9JbnRvbGVyYW50ID0gMTsKKwl9CisKKwlpZihwSFRQaHlNb2RlLT5CVyA9PSBCV180MCkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbNF0gPSAweDE7IC8vIE1DUyAzMgorCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9IDE7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsIDw9IDE0KQorCQkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DQ0ttb2RlaW40MCA9IDE7CisKKwkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uUmVjb21XaWR0aCA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9IChwSFRQaHlNb2RlLT5FeHRPZmZzZXQgPT0gRVhUQ0hBX0JFTE9XKT8gKEVYVENIQV9CRUxPVyk6IEVYVENIQV9BQk9WRTsKKwkJLy8gU2V0IFJlZ3NpdGVyIGZvciBleHRlbnNpb24gY2hhbm5lbCBwb3NpdGlvbi4KKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJlZhbHVlKTsKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQkJQM1ZhbHVlKTsKKwkJaWYgKChwSFRQaHlNb2RlLT5FeHRPZmZzZXQgPT0gRVhUQ0hBX0JFTE9XKSkKKwkJeworCQkJVmFsdWUgfD0gMHgxOworCQkJQkJQM1ZhbHVlIHw9ICgweDIwKTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBWYWx1ZSk7CisJCX0KKwkJZWxzZSBpZiAoKHBIVFBoeU1vZGUtPkV4dE9mZnNldCA9PSBFWFRDSEFfQUJPVkUpKQorCQl7CisJCQlWYWx1ZSAmPSAweGZlOworCQkJQkJQM1ZhbHVlICY9ICh+MHgyMCk7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgVmFsdWUpOworCQl9CisKKwkJLy8gVHVybiBvbiBCQlAgNDBNSHogbW9kZSBub3cgb25seSBhcyBBUCAuCisJCS8vIFN0YSBjYW4gdHVybiBvbiBCQlAgNDBNSHogYWZ0ZXIgY29ubmVjdGlvbiB3aXRoIDQwTUh6IEFQLiBTdGEgb25seSBicm9hZGNhc3QgNDBNSHogY2FwYWJpbGl0eSBiZWZvcmUgY29ubmVjdGlvbi4KKwkJaWYgKChwQWQtPk9wTW9kZSA9PSBPUE1PREVfQVApIHx8IElORlJBX09OKHBBZCkgfHwgQURIT0NfT04ocEFkKQorCQkJKQorCQl7CisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7CisJCQlCQlBWYWx1ZSAmPSAofjB4MTgpOworCQkJQkJQVmFsdWUgfD0gMHgxMDsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJCUFZhbHVlKTsKKworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQkJQM1ZhbHVlKTsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzQwOworCQl9CisJfQorCWVsc2UKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID0gMDsKKwkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uUmVjb21XaWR0aCA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9IEVYVENIQV9OT05FOworCQlwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWw7CisJCS8vIFR1cm4gb24gQkJQIDIwTUh6IG1vZGUgYnkgcmVxdWVzdCBoZXJlLgorCQl7CisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7CisJCQlCQlBWYWx1ZSAmPSAofjB4MTgpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCQkJcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfMjA7CisJCX0KKwl9CisKKwlpZihwSFRQaHlNb2RlLT5TVEJDID09IFNUQkNfVVNFKQorCXsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5UeFNUQkMgPSAxOworCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuVHhTVEJDID0gMTsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5SeFNUQkMgPSAxOworCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuUnhTVEJDID0gMTsKKwl9CisJZWxzZQorCXsKKwkJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlR4U1RCQyA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5SeFNUQkMgPSAwOworCX0KKworCWlmKHBIVFBoeU1vZGUtPlNIT1JUR0kgPT0gR0lfNDAwKQorCXsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjAgPSAxOworCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3I0MCA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yMjAgPSAxOworCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjQwID0gMTsKKwl9CisJZWxzZQorCXsKKwkJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjAgPSAwOworCQlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3I0MCA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yMjAgPSAwOworCQlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjQwID0gMDsKKwl9CisKKwkvLyBXZSBzdXBwb3J0IGxpbmsgYWRhcHRhdGlvbiBmb3IgdW5zb2xpY2l0IE1DUyBmZWVkYmFjaywgc2V0IHRvIDIuCisJcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5NQ1NGZWVkYmFjayA9IE1DU0ZCS19OT05FOyAvL01DU0ZCS19VTlNPTElDSVQ7CisJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkNvbnRyb2xDaGFuID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKKwkvLyAxLCB0aGUgZXh0ZW5zaW9uIGNoYW5uZWwgYWJvdmUgdGhlIGNvbnRyb2wgY2hhbm5lbC4KKworCS8vIEVEQ0EgcGFyYW1ldGVycyB1c2VkIGZvciBBUCdzIG93biB0cmFuc21pc3Npb24KKwlpZiAocEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iVmFsaWQgPT0gRkFMU0UpCisJeworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLmJWYWxpZCA9IFRSVUU7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQWlmc25bMF0gPSAzOworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkFpZnNuWzFdID0gNzsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5BaWZzblsyXSA9IDE7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQWlmc25bM10gPSAxOworCisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtaW5bMF0gPSA0OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWluWzFdID0gNDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21pblsyXSA9IDM7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtaW5bM10gPSAyOworCisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbMF0gPSA2OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWF4WzFdID0gMTA7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbMl0gPSA0OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWF4WzNdID0gMzsKKworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLlR4b3BbMF0gID0gMDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5UeG9wWzFdICA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uVHhvcFsyXSAgPSA5NDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5UeG9wWzNdICA9IDQ3OworCX0KKwlBc2ljU2V0RWRjYVBhcm0ocEFkLCAmcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybSk7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlSVE1QU2V0SW5kaXZpZHVhbEhUKHBBZCwgMCk7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2FsbGVyIGVuc3VyZXMgd2UgaGFzIDgwMi4xMW4gc3VwcG9ydC4KKwkJQ2FsbHMgYXQgc2V0dGluZyBIVCBmcm9tIEFQL1NUQVNldGluZm9ybWF0aW9uCisKKwlBcmd1bWVudHM6CisJCXBBZCAtIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcGh5bW9kZSAgLQorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QU2V0SW5kaXZpZHVhbEhUKAorCUlOCVBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTglVQ0hBUgkJCQlhcGlkeCkKK3sKKwlQUlRfSFRfUEhZX0lORk8JCXBEZXNpcmVkX2h0X3BoeSA9IE5VTEw7CisJVUNIQVIJVHhTdHJlYW0gPSBwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbTsKKwlVQ0hBUglEZXNpcmVkTWNzCT0gTUNTX0FVVE87CisKKwlkbworCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlwRGVzaXJlZF9odF9waHkgPSAmcEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mbzsKKwkJCURlc2lyZWRNY3MgPSBwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUzsKKwkJCS8vcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPSAoRGVzaXJlZE1jcyA9PSBNQ1NfQVVUTykgPyBUUlVFIDogRkFMU0U7CisJCQkJYnJlYWs7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9IHdoaWxlIChGQUxTRSk7CisKKwlpZiAocERlc2lyZWRfaHRfcGh5ID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSVE1QU2V0SW5kaXZpZHVhbEhUOiBpbnZhbGlkIGFwaWR4KCVkKVxuIiwgYXBpZHgpKTsKKwkJcmV0dXJuOworCX0KKwlSVE1QWmVyb01lbW9yeShwRGVzaXJlZF9odF9waHksIHNpemVvZihSVF9IVF9QSFlfSU5GTykpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNldEluZGl2aWR1YWxIVCA6IERlc2lyZWQgTUNTID0gJWRcbiIsIERlc2lyZWRNY3MpKTsKKwkvLyBDaGVjayB0aGUgdmFsaWRpdHkgb2YgTUNTCisJaWYgKChUeFN0cmVhbSA9PSAxKSAmJiAoKERlc2lyZWRNY3MgPj0gTUNTXzgpICYmIChEZXNpcmVkTWNzIDw9IE1DU18xNSkpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJSVE1QU2V0SW5kaXZpZHVhbEhUOiBNQ1MoJWQpIGlzIGludmFsaWQgaW4gMVMsIHJlc2V0IGl0IGFzIE1DU183XG4iLCBEZXNpcmVkTWNzKSk7CisJCURlc2lyZWRNY3MgPSBNQ1NfNzsKKwl9CisKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5DaGFubmVsV2lkdGggPT0gQldfMjApICYmIChEZXNpcmVkTWNzID09IE1DU18zMikpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIlJUTVBTZXRJbmRpdmlkdWFsSFQ6IE1DU18zMiBpcyBvbmx5IHN1cHBvcnRlZCBpbiA0MC1NSHosIHJlc2V0IGl0IGFzIE1DU18wXG4iKSk7CisJCURlc2lyZWRNY3MgPSBNQ1NfMDsKKwl9CisKKwlwRGVzaXJlZF9odF9waHktPmJIdEVuYWJsZSA9IFRSVUU7CisKKwkvLyBEZWNpZGUgZGVzaXJlZCBUeCBNQ1MKKwlzd2l0Y2ggKFR4U3RyZWFtKQorCXsKKwkJY2FzZSAxOgorCQkJaWYgKERlc2lyZWRNY3MgPT0gTUNTX0FVVE8pCisJCQl7CisJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMF09IDB4ZmY7CisJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMV09IDB4MDA7CisJCQl9CisJCQllbHNlIGlmIChEZXNpcmVkTWNzIDw9IE1DU183KQorCQkJeworCQkJCXBEZXNpcmVkX2h0X3BoeS0+TUNTU2V0WzBdPSAxPDxEZXNpcmVkTWNzOworCQkJCXBEZXNpcmVkX2h0X3BoeS0+TUNTU2V0WzFdPSAweDAwOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSAyOgorCQkJaWYgKERlc2lyZWRNY3MgPT0gTUNTX0FVVE8pCisJCQl7CisJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMF09IDB4ZmY7CisJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMV09IDB4ZmY7CisJCQl9CisJCQllbHNlIGlmIChEZXNpcmVkTWNzIDw9IE1DU18xNSkKKwkJCXsKKwkJCQlVTE9ORyBtb2RlOworCisJCQkJbW9kZSA9IERlc2lyZWRNY3MgLyA4OworCQkJCWlmIChtb2RlIDwgMikKKwkJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbbW9kZV0gPSAoMSA8PCAoRGVzaXJlZE1jcyAtIG1vZGUgKiA4KSk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIDM6IC8vIDMqMworCQkJaWYgKERlc2lyZWRNY3MgPT0gTUNTX0FVVE8pCisJCQl7CisJCQkJLyogTUNTMCB+IE1DUzIzLCAzIGJ5dGVzICovCisJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMF09IDB4ZmY7CisJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMV09IDB4ZmY7CisJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbMl09IDB4ZmY7CisJCQl9CisJCQllbHNlIGlmIChEZXNpcmVkTWNzIDw9IE1DU18yMykKKwkJCXsKKwkJCQlVTE9ORyBtb2RlOworCisJCQkJbW9kZSA9IERlc2lyZWRNY3MgLyA4OworCQkJCWlmIChtb2RlIDwgMykKKwkJCQkJcERlc2lyZWRfaHRfcGh5LT5NQ1NTZXRbbW9kZV0gPSAoMSA8PCAoRGVzaXJlZE1jcyAtIG1vZGUgKiA4KSk7CisJCQl9CisJCQlicmVhazsKKwl9CisKKwlpZihwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoID09IEJXXzQwKQorCXsKKwkJaWYgKERlc2lyZWRNY3MgPT0gTUNTX0FVVE8gfHwgRGVzaXJlZE1jcyA9PSBNQ1NfMzIpCisJCQlwRGVzaXJlZF9odF9waHktPk1DU1NldFs0XSA9IDB4MTsKKwl9CisKKwkvLyB1cGRhdGUgSFQgUmF0ZSBzZXR0aW5nCisgICAgaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCisgICAgICAgIE1sbWVVcGRhdGVIdFR4UmF0ZXMocEFkLCBCU1MwKTsKKyAgICBlbHNlCisJICAgIE1sbWVVcGRhdGVIdFR4UmF0ZXMocEFkLCBhcGlkeCk7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlVcGRhdGUgSFQgSUUgZnJvbSBvdXIgY2FwYWJpbGl0eS4KKworCUFyZ3VtZW50czoKKwkJU2VuZCBhbGwgSFQgSUUgaW4gYmVhY29uL3Byb2JlIHJzcC9hc3NvYyByc3AvYWN0aW9uIGZyYW1lLgorCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBVcGRhdGVIVElFKAorCUlOCVJUX0hUX0NBUEFCSUxJVFkJKnBSdEh0LAorCUlOCQlVQ0hBUgkJCQkqcE1jc1NldCwKKwlPVVQJCUhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHksCisJT1VUCQlBRERfSFRfSU5GT19JRQkJKnBBZGRIdEluZm8pCit7CisJUlRNUFplcm9NZW1vcnkocEh0Q2FwYWJpbGl0eSwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKwlSVE1QWmVyb01lbW9yeShwQWRkSHRJbmZvLCBzaXplb2YoQUREX0hUX0lORk9fSUUpKTsKKworCQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID0gcFJ0SHQtPkNoYW5uZWxXaWR0aDsKKwkJcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLk1pbW9QcyA9IHBSdEh0LT5NaW1vUHM7CisJCXBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5HRiA9IHBSdEh0LT5HRjsKKwkJcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlNob3J0R0lmb3IyMCA9IHBSdEh0LT5TaG9ydEdJZm9yMjA7CisJCXBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5TaG9ydEdJZm9yNDAgPSBwUnRIdC0+U2hvcnRHSWZvcjQwOworCQlwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uVHhTVEJDID0gcFJ0SHQtPlR4U1RCQzsKKwkJcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlJ4U1RCQyA9IHBSdEh0LT5SeFNUQkM7CisJCXBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5BTXNkdVNpemUgPSBwUnRIdC0+QW1zZHVTaXplOworCQlwSHRDYXBhYmlsaXR5LT5IdENhcFBhcm0uTWF4UkFtcGR1RmFjdG9yID0gcFJ0SHQtPk1heFJBbXBkdUZhY3RvcjsKKwkJcEh0Q2FwYWJpbGl0eS0+SHRDYXBQYXJtLk1wZHVEZW5zaXR5ID0gcFJ0SHQtPk1wZHVEZW5zaXR5OworCisJCXBBZGRIdEluZm8tPkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID0gcFJ0SHQtPkV4dENoYW5PZmZzZXQgOworCQlwQWRkSHRJbmZvLT5BZGRIdEluZm8uUmVjb21XaWR0aCA9IHBSdEh0LT5SZWNvbVdpZHRoOworCQlwQWRkSHRJbmZvLT5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSA9IHBSdEh0LT5PcGVyYWlvbk1vZGU7CisJCXBBZGRIdEluZm8tPkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50ID0gcFJ0SHQtPk5vbkdmUHJlc2VudDsKKwkJUlRNUE1vdmVNZW1vcnkocEFkZEh0SW5mby0+TUNTU2V0LCAvKnBSdEh0LT5NQ1NTZXQqL3BNY3NTZXQsIDQpOyAvLyBydDI4NjAgb25seSBzdXBwb3J0IE1DUyBtYXg9MzIsIG5vIG5lZWQgdG8gY29weSBhbGwgMTYgdWNoYXIuCisKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSVE1QVXBkYXRlSFRJRSA8PT0gXG4iKSk7Cit9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUFkZCBDbGllbnQgc2VjdXJpdHkgaW5mb3JtYXRpb24gaW50byBBU0lDIFdDSUQgdGFibGUgYW5kIElWRUlWIHRhYmxlLgorICAgIFJldHVybjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlCc3NJZHgsCisJSU4gCVVDSEFSCQkgCUtleUlkeCwKKwlJTiAJVUNIQVIJCSAJQ2lwaGVyQWxnLAorCUlOIAlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSkKK3sKKwlVSU5UMzIJCVdDSURBdHRyaSA9IDA7CisJVVNIT1JUCQlvZmZzZXQ7CisJVUNIQVIJCUlWRUlWID0gMDsKKwlVU0hPUlQJCVdjaWQgPSAwOworCisJeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlpZiAoQnNzSWR4ID4gQlNTMCkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5OiBUaGUgQlNTLWluZGV4KCVkKSBpcyBvdXQgb2YgcmFuZ2UgZm9yIEluZnJhIGxpbmsuIFxuIiwgQnNzSWR4KSk7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyAxLglJbiBBREhPQyBtb2RlLCB0aGUgQUlEIGlzIHdjaWQgbnVtYmVyLiBBbmQgTk8gbWVzaCBsaW5rIGV4aXN0cy4KKwkJCS8vIDIuCUluIEluZnJhIG1vZGUsIHRoZSBBSUQ6MSBNVVNUIGJlIHdjaWQgb2YgaW5mcmEgU1RBLgorCQkJLy8JCQkJCSAgIHRoZSBBSUQ6Mn4gYXNzaWduIHRvIG1lc2ggbGluayBlbnRyeS4KKwkJCWlmIChwRW50cnkgJiYgQURIT0NfT04ocEFkKSkKKwkJCQlXY2lkID0gcEVudHJ5LT5BaWQ7CisJCQllbHNlIGlmIChwRW50cnkgJiYgSU5GUkFfT04ocEFkKSkKKwkJCXsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCQlpZiAocEVudHJ5LT5WYWxpZEFzRGxzID09IFRSVUUpCisJCQkJCVdjaWQgPSBwRW50cnktPkFpZDsKKwkJCQllbHNlCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJCQkJV2NpZCA9IEJTU0lEX1dDSUQ7CisJCQl9CisJCQllbHNlCisJCQkJV2NpZCA9IE1DQVNUX1dDSUQ7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9CisKKwkvLyBVcGRhdGUgV0NJRCBhdHRyaWJ1dGUgdGFibGUKKwlvZmZzZXQgPSBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRSArIChXY2lkICogSFdfV0NJRF9BVFRSSV9TSVpFKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAocEVudHJ5ICYmIHBFbnRyeS0+VmFsaWRBc01lc2gpCisJCQlXQ0lEQXR0cmkgPSAoQ2lwaGVyQWxnPDwxKSB8IFBBSVJXSVNFS0VZVEFCTEU7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCWVsc2UgaWYgKChwRW50cnkpICYmIChwRW50cnktPlZhbGlkQXNEbHMpICYmCisJCQkJCSgoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQKSB8fAorCQkJCSAJKENpcGhlckFsZyA9PSBDSVBIRVJfVEtJUF9OT19NSUMpIHx8CisJCQkJCShDaXBoZXJBbGcgPT0gQ0lQSEVSX0FFUykgfHwKKwkJCQkgCShDaXBoZXJBbGcgPT0gQ0lQSEVSX05PTkUpKSkKKwkJCVdDSURBdHRyaSA9IChDaXBoZXJBbGc8PDEpIHwgUEFJUldJU0VLRVlUQUJMRTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJZWxzZQorCQkJV0NJREF0dHJpID0gKENpcGhlckFsZzw8MSkgfCBTSEFSRURLRVlUQUJMRTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIFdDSURBdHRyaSk7CisKKworCS8vIFVwZGF0ZSBJVi9FSVYgdGFibGUKKwlvZmZzZXQgPSBNQUNfSVZFSVZfVEFCTEVfQkFTRSArIChXY2lkICogSFdfSVZFSVZfRU5UUllfU0laRSk7CisKKwkvLyBXUEEgbW9kZQorCWlmICgoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQKSB8fCAoQ2lwaGVyQWxnID09IENJUEhFUl9US0lQX05PX01JQykgfHwgKENpcGhlckFsZyA9PSBDSVBIRVJfQUVTKSkKKwl7CisJCS8vIEVpdiBiaXQgb24uIGtleWlkIGFsd2F5cyBpcyAwIGZvciBwYWlyd2lzZSBrZXkKKwkJSVZFSVYgPSAoS2V5SWR4IDw8NikgfCAweDIwOworCX0KKwllbHNlCisJeworCQkvLyBXRVAgS2V5SWR4IGlzIGRlZmF1bHQgdHgga2V5LgorCQlJVkVJViA9IChLZXlJZHggPDwgNik7CisJfQorCisJLy8gRm9yIGtleSBpbmRleCBhbmQgZXh0IElWIGJpdCwgc28gb25seSBuZWVkIHRvIHVwZGF0ZSB0aGUgcG9zaXRpb24ob2Zmc2V0KzMpLgorI2lmZGVmIFJUMjg3MAorCVJUVVNCTXVsdGlXcml0ZV9PbmVCeXRlKHBBZCwgb2Zmc2V0KzMsICZJVkVJVik7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnk6IFdDSUQgIyVkLCBLZXlJbmRleCAjJWQsIEFsZz0lc1xuIixXY2lkLCBLZXlJZHgsIENpcGhlck5hbWVbQ2lwaGVyQWxnXSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiCVdDSURBdHRyaSA9IDB4JXggXG4iLCAgV0NJREF0dHJpKSk7CisKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBQYXJzZSBlbmNyeXB0aW9uIHR5cGUKK0FyZ3VtZW50czoKKyAgICBwQWRhcHRlciAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorICAgIHdycSAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBpb2N0bCBhcmd1bWVudAorCisgICAgUmV0dXJuIFZhbHVlOgorICAgICAgICBOb25lCisKKyAgICBOb3RlOgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQ0hBUiAqR2V0RW5jcnlwdFR5cGUoQ0hBUiBlbmMpCit7CisgICAgaWYoZW5jID09IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuICJOT05FIjsKKyAgICBpZihlbmMgPT0gTmRpczgwMl8xMVdFUEVuYWJsZWQpCisgICAgCXJldHVybiAiV0VQIjsKKyAgICBpZihlbmMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKyAgICAJcmV0dXJuICJUS0lQIjsKKyAgICBpZihlbmMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKyAgICAJcmV0dXJuICJBRVMiOworCWlmKGVuYyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjRFbmFibGVkKQorICAgIAlyZXR1cm4gIlRLSVBBRVMiOworICAgIGVsc2UKKyAgICAJcmV0dXJuICJVTktOT1ciOworfQorCitDSEFSICpHZXRBdXRoTW9kZShDSEFSIGF1dGgpCit7CisgICAgaWYoYXV0aCA9PSBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQorICAgIAlyZXR1cm4gIk9QRU4iOworICAgIGlmKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKQorICAgIAlyZXR1cm4gIlNIQVJFRCI7CisJaWYoYXV0aCA9PSBOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoKQorICAgIAlyZXR1cm4gIkFVVE9XRVAiOworICAgIGlmKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgIAlyZXR1cm4gIldQQSI7CisgICAgaWYoYXV0aCA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spCisgICAgCXJldHVybiAiV1BBUFNLIjsKKyAgICBpZihhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisgICAgCXJldHVybiAiV1BBTk9ORSI7CisgICAgaWYoYXV0aCA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKQorICAgIAlyZXR1cm4gIldQQTIiOworICAgIGlmKGF1dGggPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKKyAgICAJcmV0dXJuICJXUEEyUFNLIjsKKwlpZihhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTFXUEEyKQorICAgIAlyZXR1cm4gIldQQTFXUEEyIjsKKwlpZihhdXRoID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTFQU0tXUEEyUFNLKQorICAgIAlyZXR1cm4gIldQQTFQU0tXUEEyUFNLIjsKKworICAgIAlyZXR1cm4gIlVOS05PVyI7Cit9CisKKyNpZiAxIC8vI2lmbmRlZiBVQ09TCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIEdldCBzaXRlIHN1cnZleSByZXN1bHRzCisJQXJndW1lbnRzOgorCSAgICBwQWRhcHRlciAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCSAgICB3cnEgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgaW9jdGwgYXJndW1lbnQKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgTm9uZQorCisgICAgTm90ZToKKyAgICAgICAgVXNhZ2U6CisgICAgICAgIAkJMS4pIFVJIG5lZWRzIHRvIHdhaXQgNCBzZWNvbmRzIGFmdGVyIGlzc3VlIGEgc2l0ZSBzdXJ2ZXkgY29tbWFuZAorICAgICAgICAJCTIuKSBpd3ByaXYgcmEwIGdldF9zaXRlX3N1cnZleQorICAgICAgICAJCTMuKSBVSSBuZWVkcyB0byBwcmVwYXJlIGF0IGxlYXN0IDQwOTZieXRlcyB0byBnZXQgdGhlIHJlc3VsdHMKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKyNkZWZpbmUJTElORV9MRU4JKDQrMzMrMjArOCsxMCs5KzcrMykJLy8gQ2hhbm5lbCtTU0lEK0Jzc2lkK1dlcFN0YXR1cytBdXRoTW9kZStTaWduYWwrV2lyZXNzTW9kZStOZXR3b3JrVHlwZQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworVk9JRCBSVE1QSW9jdGxHZXRTaXRlU3VydmV5KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4Jc3RydWN0IGl3cmVxCSp3cnEpCit7CisJQ0hBUgkJKm1zZzsKKwlJTlQgCQlpPTA7CisJSU5UCQkJV2FpdENudDsKKwlJTlQgCQlTdGF0dXM9MDsKKwlDSEFSCQlTc2lkW01BWF9MRU5fT0ZfU1NJRCArMV07CisgICAgSU5UICAgICAgICAgUnNzaSA9IDAsIG1heF9sZW4gPSBMSU5FX0xFTjsKKwlVSU5UICAgICAgICBSc3NpX1F1YWxpdHkgPSAwOworCU5ESVNfODAyXzExX05FVFdPUktfVFlQRSAgICB3aXJlbGVzc19tb2RlOworCisJb3NfYWxsb2NfbWVtKE5VTEwsIChQVUNIQVIgKikmbXNnLCBzaXplb2YoQ0hBUikqKChNQVhfTEVOX09GX0JTU19UQUJMRSkqbWF4X2xlbikpOworCisJaWYgKG1zZyA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUElvY3RsR2V0U2l0ZVN1cnZleSAtIG1zZyBtZW1vcnkgYWxsb2MgZmFpbC5cbiIpKTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldChtc2csIDAgLChNQVhfTEVOX09GX0JTU19UQUJMRSkqbWF4X2xlbiApOworCW1lbXNldChTc2lkLCAwICwoTUFYX0xFTl9PRl9TU0lEICsxKSk7CisJc3ByaW50Zihtc2csIiVzIiwiXG4iKTsKKwlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS00cyUtMzNzJS0yMHMlLThzJS0xMHMlLTlzJS03cyUtM3NcbiIsCisJICAgICJDaCIsICJTU0lEIiwgIkJTU0lEIiwgIkVuYyIsICJBdXRoIiwgIlNpZ2FubCglKSIsICJXLU1vZGUiLCAiIE5UIik7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCVdhaXRDbnQgPSAwOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCXBBZGFwdGVyLT5TdGFDZmcuYlNjYW5SZXFJc0Zyb21XZWJVSSA9IFRSVUU7CisJd2hpbGUgKChTY2FuUnVubmluZyhwQWRhcHRlcikgPT0gVFJVRSkgJiYgKFdhaXRDbnQrKyA8IDIwMCkpCisJCU9TX1dBSVQoNTAwKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWZvcihpPTA7IGk8cEFkYXB0ZXItPlNjYW5UYWIuQnNzTnIgO2krKykKKwl7CisJCWlmKCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsPT0wKQorCQkJYnJlYWs7CisKKwkJaWYoKHN0cmxlbihtc2cpK21heF9sZW4gKSA+PSBJV19TQ0FOX01BWF9EQVRBKQorCQkJYnJlYWs7CisKKwkJLy9DaGFubmVsCisJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTRkIiwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQ2hhbm5lbCk7CisJCS8vU1NJRAorCQltZW1jcHkoU3NpZCwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3NpZCwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3NpZExlbik7CisJCVNzaWRbcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3NpZExlbl0gPSAnXDAnOworCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS0zM3MiLCBTc2lkKTsKKwkJLy9CU1NJRAorCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggICAiLAorCQkJcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQnNzaWRbMF0sCisJCQlwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NpZFsxXSwKKwkJCXBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc2lkWzJdLAorCQkJcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQnNzaWRbM10sCisJCQlwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NpZFs0XSwKKwkJCXBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc2lkWzVdKTsKKwkJLy9FbmNyeXB0aW9uIFR5cGUKKwkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtOHMiLEdldEVuY3J5cHRUeXBlKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLldlcFN0YXR1cykpOworCQkvL0F1dGhlbnRpY2F0aW9uIE1vZGUKKwkJaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLldlcFN0YXR1cyA9PSBOZGlzODAyXzExV0VQRW5hYmxlZCkKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTEwcyIsICJVTktOT1ciKTsKKwkJZWxzZQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtMTBzIixHZXRBdXRoTW9kZShwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5BdXRoTW9kZSkpOworCQkvLyBSc3NpCisJCVJzc2kgPSAoSU5UKXBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzc2k7CisJCWlmIChSc3NpID49IC01MCkKKwkJCVJzc2lfUXVhbGl0eSA9IDEwMDsKKwkJZWxzZSBpZiAoUnNzaSA+PSAtODApICAgIC8vIGJldHdlZW4gLTUwIH4gLTgwZGJtCisJCQlSc3NpX1F1YWxpdHkgPSAoVUlOVCkoMjQgKyAoKFJzc2kgKyA4MCkgKiAyNikvMTApOworCQllbHNlIGlmIChSc3NpID49IC05MCkgICAvLyBiZXR3ZWVuIC04MCB+IC05MGRibQorCQkJUnNzaV9RdWFsaXR5ID0gKFVJTlQpKCgoUnNzaSArIDkwKSAqIDI2KS8xMCk7CisJCWVsc2UgICAgLy8gPCAtODQgZGJtCisJCQlSc3NpX1F1YWxpdHkgPSAwOworCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS05ZCIsIFJzc2lfUXVhbGl0eSk7CisJCS8vIFdpcmVsZXNzIE1vZGUKKwkJd2lyZWxlc3NfbW9kZSA9IE5ldHdvcmtUeXBlSW5Vc2VTYW5pdHkoJnBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldKTsKKwkJaWYgKHdpcmVsZXNzX21vZGUgPT0gTmRpczgwMl8xMUZIIHx8CisJCQl3aXJlbGVzc19tb2RlID09IE5kaXM4MDJfMTFEUykKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTdzIiwgIjExYiIpOworCQllbHNlIGlmICh3aXJlbGVzc19tb2RlID09IE5kaXM4MDJfMTFPRkRNNSkKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTdzIiwgIjExYSIpOworCQllbHNlIGlmICh3aXJlbGVzc19tb2RlID09IE5kaXM4MDJfMTFPRkRNNV9OKQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtN3MiLCAiMTFhL24iKTsKKwkJZWxzZSBpZiAod2lyZWxlc3NfbW9kZSA9PSBOZGlzODAyXzExT0ZETTI0KQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtN3MiLCAiMTFiL2ciKTsKKwkJZWxzZSBpZiAod2lyZWxlc3NfbW9kZSA9PSBOZGlzODAyXzExT0ZETTI0X04pCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS03cyIsICIxMWIvZy9uIik7CisJCWVsc2UKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTdzIiwgInVua25vdyIpOworCQkvL05ldHdvcmsgVHlwZQorCQlpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQnNzVHlwZSA9PSBCU1NfQURIT0MpCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS0zcyIsICIgQWQiKTsKKwkJZWxzZQorCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtM3MiLCAiIEluIik7CisKKyAgICAgICAgc3ByaW50Zihtc2crc3RybGVuKG1zZyksIlxuIik7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJcEFkYXB0ZXItPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJID0gRkFMU0U7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKG1zZyk7CisJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIG1zZywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBJb2N0bEdldFNpdGVTdXJ2ZXkgLSB3cnEtPnUuZGF0YS5sZW5ndGggPSAlZFxuIiwgd3JxLT51LmRhdGEubGVuZ3RoKSk7CisJb3NfZnJlZV9tZW0oTlVMTCwgKFBVQ0hBUiltc2cpOworfQorCisKKyNkZWZpbmUJTUFDX0xJTkVfTEVOCSgxNCs0KzQrMTArMTArMTArNis2KQkvLyBBZGRyK2FpZCtwc20rZGF0YXRpbWUrcnhieXRlK3R4Ynl0ZStjdXJyZW50IHR4IHJhdGUrbGFzdCB0eCByYXRlCitWT0lEIFJUTVBJb2N0bEdldE1hY1RhYmxlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIHN0cnVjdCBpd3JlcSAqd3JxKQoreworCUlOVCBpOworCVJUXzgwMl8xMV9NQUNfVEFCTEUgTWFjVGFiOworCWNoYXIgKm1zZzsKKworCU1hY1RhYi5OdW0gPSAwOworCWZvciAoaT0wOyBpPE1BWF9MRU5fT0ZfTUFDX1RBQkxFOyBpKyspCisJeworCQlpZiAocEFkLT5NYWNUYWIuQ29udGVudFtpXS5WYWxpZEFzQ0xJICYmIChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlNzdCA9PSBTU1RfQVNTT0MpKQorCQl7CisJCQlDT1BZX01BQ19BRERSKE1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5BZGRyLCAmcEFkLT5NYWNUYWIuQ29udGVudFtpXS5BZGRyKTsKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5BaWQgPSAoVUNIQVIpcEFkLT5NYWNUYWIuQ29udGVudFtpXS5BaWQ7CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uUHNtID0gcEFkLT5NYWNUYWIuQ29udGVudFtpXS5Qc01vZGU7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uTWltb1BzID0gcEFkLT5NYWNUYWIuQ29udGVudFtpXS5NbXBzTW9kZTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkJLy8gRmlsbCBpbiBSU1NJIHBlciBlbnRyeQorCQkJTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLkF2Z1Jzc2kwID0gcEFkLT5NYWNUYWIuQ29udGVudFtpXS5Sc3NpU2FtcGxlLkF2Z1Jzc2kwOworCQkJTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLkF2Z1Jzc2kxID0gcEFkLT5NYWNUYWIuQ29udGVudFtpXS5Sc3NpU2FtcGxlLkF2Z1Jzc2kxOworCQkJTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLkF2Z1Jzc2kyID0gcEFkLT5NYWNUYWIuQ29udGVudFtpXS5Sc3NpU2FtcGxlLkF2Z1Jzc2kyOworCisJCQkvLyB0aGUgY29ubmVjdGVkIHRpbWUgcGVyIGVudHJ5CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uQ29ubmVjdGVkVGltZSA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uU3RhQ29ubmVjdFRpbWU7CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uVHhSYXRlLmZpZWxkLk1DUyA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uSFRQaHlNb2RlLmZpZWxkLk1DUzsKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5UeFJhdGUuZmllbGQuQlcgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLkhUUGh5TW9kZS5maWVsZC5CVzsKKwkJCU1hY1RhYi5FbnRyeVtNYWNUYWIuTnVtXS5UeFJhdGUuZmllbGQuU2hvcnRHSSA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uSFRQaHlNb2RlLmZpZWxkLlNob3J0R0k7CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uVHhSYXRlLmZpZWxkLlNUQkMgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLkhUUGh5TW9kZS5maWVsZC5TVEJDOworCQkJTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLlR4UmF0ZS5maWVsZC5yc3YgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLkhUUGh5TW9kZS5maWVsZC5yc3Y7CisJCQlNYWNUYWIuRW50cnlbTWFjVGFiLk51bV0uVHhSYXRlLmZpZWxkLk1PREUgPSBwQWQtPk1hY1RhYi5Db250ZW50W2ldLkhUUGh5TW9kZS5maWVsZC5NT0RFOworCQkJTWFjVGFiLkVudHJ5W01hY1RhYi5OdW1dLlR4UmF0ZS53b3JkID0gcEFkLT5NYWNUYWIuQ29udGVudFtpXS5IVFBoeU1vZGUud29yZDsKKworCQkJTWFjVGFiLk51bSArPSAxOworCQl9CisJfQorCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihSVF84MDJfMTFfTUFDX1RBQkxFKTsKKwlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZNYWNUYWIsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczogY29weV90b191c2VyKCkgZmFpbFxuIiwgX19GVU5DVElPTl9fKSk7CisJfQorCisJbXNnID0gKENIQVIgKikga21hbGxvYyhzaXplb2YoQ0hBUikqKE1BWF9MRU5fT0ZfTUFDX1RBQkxFKk1BQ19MSU5FX0xFTiksIE1FTV9BTExPQ19GTEFHKTsKKwltZW1zZXQobXNnLCAwICxNQVhfTEVOX09GX01BQ19UQUJMRSpNQUNfTElORV9MRU4gKTsKKwlzcHJpbnRmKG1zZywiJXMiLCJcbiIpOworCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTE0cyUtNHMlLTRzJS0xMHMlLTEwcyUtMTBzJS02cyUtNnNcbiIsCisJCSJNQUMiLCAiQUlEIiwgIlBTTSIsICJMRFQiLCAiUnhCIiwgIlR4QiIsIkNUeFIiLCAiTFR4UiIpOworCisJZm9yIChpPTA7IGk8TUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykKKwl7CisJCVBNQUNfVEFCTEVfRU5UUlkgcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbaV07CisJCWlmIChwRW50cnktPlZhbGlkQXNDTEkgJiYgKHBFbnRyeS0+U3N0ID09IFNTVF9BU1NPQykpCisJCXsKKwkJCWlmKChzdHJsZW4obXNnKStNQUNfTElORV9MRU4gKSA+PSAoTUFYX0xFTl9PRl9NQUNfVEFCTEUqTUFDX0xJTkVfTEVOKSApCisJCQkJYnJlYWs7CisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICAiLAorCQkJCXBFbnRyeS0+QWRkclswXSwgcEVudHJ5LT5BZGRyWzFdLCBwRW50cnktPkFkZHJbMl0sCisJCQkJcEVudHJ5LT5BZGRyWzNdLCBwRW50cnktPkFkZHJbNF0sIHBFbnRyeS0+QWRkcls1XSk7CisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS00ZCIsIChpbnQpcEVudHJ5LT5BaWQpOworCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtNGQiLCAoaW50KXBFbnRyeS0+UHNNb2RlKTsKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTEwZCIsMC8qcEFkLT5NYWNUYWIuQ29udGVudFtpXS5IU0NvdW50ZXIuTGFzdERhdGFQYWNrZXRUaW1lKi8pOyAvLyBUb0RvCisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwiJS0xMGQiLDAvKnBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uSFNDb3VudGVyLlRvdGFsUnhCeXRlQ291bnQqLyk7IC8vIFRvRG8KKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTEwZCIsMC8qcEFkLT5NYWNUYWIuQ29udGVudFtpXS5IU0NvdW50ZXIuVG90YWxUeEJ5dGVDb3VudCovKTsgLy8gVG9EbworCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksIiUtNmQiLFJhdGVJZFRvTWJwc1twQWQtPk1hY1RhYi5Db250ZW50W2ldLkN1cnJUeFJhdGVdKTsKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCIlLTZkXG4iLDAvKlJhdGVJZFRvTWJwc1twQWQtPk1hY1RhYi5Db250ZW50W2ldLkxhc3RUeFJhdGVdKi8pOyAvLyBUb0RvCisJCX0KKwl9CisJLy8gZm9yIGNvbXBhdGlibGUgd2l0aCBvbGQgQVBJIGp1c3QgZG8gdGhlIHByaW50ayB0byBjb25zb2xlCisJLy93cnEtPnUuZGF0YS5sZW5ndGggPSBzdHJsZW4obXNnKTsKKwkvL2lmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgbXNnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMiLCBtc2cpKTsKKwl9CisKKwlrZnJlZShtc2cpOworfQorI2VuZGlmIC8vIFVDT1MgLy8KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorSU5UCVNldF9CQVNldHVwX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworICAgIFVDSEFSIG1hY1s2XSwgdGlkOworCWNoYXIgKnRva2VuLCBzZXBWYWx1ZVtdID0gIjoiLCBEQVNIID0gJy0nOworCUlOVCBpOworICAgIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5OworCisvKgorCVRoZSBCQVNldHVwIGludXB0IHN0cmluZyBmb3JtYXQgc2hvdWxkIGJlIHh4Onh4Onh4Onh4Onh4Onh4LWQsCisJCT0+VGhlIHNpeCAyIGRpZ2l0IGhleC1kZWNpbWFsIG51bWJlciBwcmV2aW91cyBhcmUgdGhlIE1hYyBhZGRyZXNzLAorCQk9PlRoZSBzZXZlbnRoIGRlY2ltYWwgbnVtYmVyIGlzIHRoZSB0aWQgdmFsdWUuCisqLworCS8vcHJpbnRrKCJcbiVzXG4iLCBhcmcpOworCisJaWYoc3RybGVuKGFyZykgPCAxOSkgIC8vTWFjIGFkZHJlc3MgYWNjZXB0YWJsZSBmb3JtYXQgMDE6MDI6MDM6MDQ6MDU6MDYgbGVuZ3RoIDE3IHBsdXMgdGhlICItIiBhbmQgdGlkIHZhbHVlIGluIGRlY2ltYWwgZm9ybWF0LgorCQlyZXR1cm4gRkFMU0U7CisKKwl0b2tlbiA9IHN0cmNocihhcmcsIERBU0gpOworCWlmICgodG9rZW4gIT0gTlVMTCkgJiYgKHN0cmxlbih0b2tlbik+MSkpCisJeworCQl0aWQgPSBzaW1wbGVfc3RydG9sKCh0b2tlbisxKSwgMCwgMTApOworCQlpZiAodGlkID4gMTUpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJKnRva2VuID0gJ1wwJzsKKwkJZm9yIChpID0gMCwgdG9rZW4gPSByc3RydG9rKGFyZywgJnNlcFZhbHVlWzBdKTsgdG9rZW47IHRva2VuID0gcnN0cnRvayhOVUxMLCAmc2VwVmFsdWVbMF0pLCBpKyspCisJCXsKKwkJCWlmKChzdHJsZW4odG9rZW4pICE9IDIpIHx8ICghaXN4ZGlnaXQoKnRva2VuKSkgfHwgKCFpc3hkaWdpdCgqKHRva2VuKzEpKSkpCisJCQkJcmV0dXJuIEZBTFNFOworCQkJQXRvSCh0b2tlbiwgKFBVQ0hBUikoJm1hY1tpXSksIDEpOworCQl9CisJCWlmKGkgIT0gNikKKwkJCXJldHVybiBGQUxTRTsKKworCQlwcmludGsoIlxuJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngtJTAyeFxuIiwgbWFjWzBdLCBtYWNbMV0sCisJCQkJbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdLCB0aWQpOworCisJICAgIHBFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZCwgbWFjKTsKKworICAgIAlpZiAocEVudHJ5KSB7CisgICAgICAgIAlwcmludGsoIlxuU2V0dXAgQkEgU2Vzc2lvbjogVGlkID0gJWRcbiIsIHRpZCk7CisJICAgICAgICBCQU9yaVNlc3Npb25TZXRVcChwQWQsIHBFbnRyeSwgdGlkLCAwLCAxMDAsIFRSVUUpOworICAgIAl9CisKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworCit9CisKK0lOVAlTZXRfQkFEZWNsaW5lX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIGJCQURlY2xpbmU7CisKKwliQkFEZWNsaW5lID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChiQkFEZWNsaW5lID09IDApCisJeworCQlwQWQtPkNvbW1vbkNmZy5iQkFEZWNsaW5lID0gRkFMU0U7CisJfQorCWVsc2UgaWYgKGJCQURlY2xpbmUgPT0gMSkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLmJCQURlY2xpbmUgPSBUUlVFOworCX0KKwllbHNlCisJeworCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9CQURlY2xpbmVfUHJvYzo6KEJBRGVjbGluZT0lZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJCQURlY2xpbmUpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0JBT3JpVGVhckRvd25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisgICAgVUNIQVIgbWFjWzZdLCB0aWQ7CisJY2hhciAqdG9rZW4sIHNlcFZhbHVlW10gPSAiOiIsIERBU0ggPSAnLSc7CisJSU5UIGk7CisgICAgTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisKKyAgICAvL3ByaW50aygiXG4lc1xuIiwgYXJnKTsKKy8qCisJVGhlIEJBT3JpVGVhckRvd24gaW51cHQgc3RyaW5nIGZvcm1hdCBzaG91bGQgYmUgeHg6eHg6eHg6eHg6eHg6eHgtZCwKKwkJPT5UaGUgc2l4IDIgZGlnaXQgaGV4LWRlY2ltYWwgbnVtYmVyIHByZXZpb3VzIGFyZSB0aGUgTWFjIGFkZHJlc3MsCisJCT0+VGhlIHNldmVudGggZGVjaW1hbCBudW1iZXIgaXMgdGhlIHRpZCB2YWx1ZS4KKyovCisgICAgaWYoc3RybGVuKGFyZykgPCAxOSkgIC8vTWFjIGFkZHJlc3MgYWNjZXB0YWJsZSBmb3JtYXQgMDE6MDI6MDM6MDQ6MDU6MDYgbGVuZ3RoIDE3IHBsdXMgdGhlICItIiBhbmQgdGlkIHZhbHVlIGluIGRlY2ltYWwgZm9ybWF0LgorCQlyZXR1cm4gRkFMU0U7CisKKwl0b2tlbiA9IHN0cmNocihhcmcsIERBU0gpOworCWlmICgodG9rZW4gIT0gTlVMTCkgJiYgKHN0cmxlbih0b2tlbik+MSkpCisJeworCQl0aWQgPSBzaW1wbGVfc3RydG9sKCh0b2tlbisxKSwgMCwgMTApOworCQlpZiAodGlkID4gTlVNX09GX1RJRCkKKwkJCXJldHVybiBGQUxTRTsKKworCQkqdG9rZW4gPSAnXDAnOworCQlmb3IgKGkgPSAwLCB0b2tlbiA9IHJzdHJ0b2soYXJnLCAmc2VwVmFsdWVbMF0pOyB0b2tlbjsgdG9rZW4gPSByc3RydG9rKE5VTEwsICZzZXBWYWx1ZVswXSksIGkrKykKKwkJeworCQkJaWYoKHN0cmxlbih0b2tlbikgIT0gMikgfHwgKCFpc3hkaWdpdCgqdG9rZW4pKSB8fCAoIWlzeGRpZ2l0KCoodG9rZW4rMSkpKSkKKwkJCQlyZXR1cm4gRkFMU0U7CisJCQlBdG9IKHRva2VuLCAoUFVDSEFSKSgmbWFjW2ldKSwgMSk7CisJCX0KKwkJaWYoaSAhPSA2KQorCQkJcmV0dXJuIEZBTFNFOworCisJICAgIHByaW50aygiXG4lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeC0lMDJ4IiwgbWFjWzBdLCBtYWNbMV0sCisJICAgICAgICAgICBtYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0sIHRpZCk7CisKKwkgICAgcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBtYWMpOworCisJICAgIGlmIChwRW50cnkpIHsKKwkgICAgICAgIHByaW50aygiXG5UZWFyIGRvd24gT3JpIEJBIFNlc3Npb246IFRpZCA9ICVkXG4iLCB0aWQpOworICAgICAgICBCQU9yaVNlc3Npb25UZWFyRG93bihwQWQsIHBFbnRyeS0+QWlkLCB0aWQsIEZBTFNFLCBUUlVFKTsKKwkgICAgfQorCisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKKworfQorCitJTlQJU2V0X0JBUmVjVGVhckRvd25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisgICAgVUNIQVIgbWFjWzZdLCB0aWQ7CisJY2hhciAqdG9rZW4sIHNlcFZhbHVlW10gPSAiOiIsIERBU0ggPSAnLSc7CisJSU5UIGk7CisgICAgTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisKKyAgICAvL3ByaW50aygiXG4lc1xuIiwgYXJnKTsKKy8qCisJVGhlIEJBUmVjVGVhckRvd24gaW51cHQgc3RyaW5nIGZvcm1hdCBzaG91bGQgYmUgeHg6eHg6eHg6eHg6eHg6eHgtZCwKKwkJPT5UaGUgc2l4IDIgZGlnaXQgaGV4LWRlY2ltYWwgbnVtYmVyIHByZXZpb3VzIGFyZSB0aGUgTWFjIGFkZHJlc3MsCisJCT0+VGhlIHNldmVudGggZGVjaW1hbCBudW1iZXIgaXMgdGhlIHRpZCB2YWx1ZS4KKyovCisgICAgaWYoc3RybGVuKGFyZykgPCAxOSkgIC8vTWFjIGFkZHJlc3MgYWNjZXB0YWJsZSBmb3JtYXQgMDE6MDI6MDM6MDQ6MDU6MDYgbGVuZ3RoIDE3IHBsdXMgdGhlICItIiBhbmQgdGlkIHZhbHVlIGluIGRlY2ltYWwgZm9ybWF0LgorCQlyZXR1cm4gRkFMU0U7CisKKwl0b2tlbiA9IHN0cmNocihhcmcsIERBU0gpOworCWlmICgodG9rZW4gIT0gTlVMTCkgJiYgKHN0cmxlbih0b2tlbik+MSkpCisJeworCQl0aWQgPSBzaW1wbGVfc3RydG9sKCh0b2tlbisxKSwgMCwgMTApOworCQlpZiAodGlkID4gTlVNX09GX1RJRCkKKwkJCXJldHVybiBGQUxTRTsKKworCQkqdG9rZW4gPSAnXDAnOworCQlmb3IgKGkgPSAwLCB0b2tlbiA9IHJzdHJ0b2soYXJnLCAmc2VwVmFsdWVbMF0pOyB0b2tlbjsgdG9rZW4gPSByc3RydG9rKE5VTEwsICZzZXBWYWx1ZVswXSksIGkrKykKKwkJeworCQkJaWYoKHN0cmxlbih0b2tlbikgIT0gMikgfHwgKCFpc3hkaWdpdCgqdG9rZW4pKSB8fCAoIWlzeGRpZ2l0KCoodG9rZW4rMSkpKSkKKwkJCQlyZXR1cm4gRkFMU0U7CisJCQlBdG9IKHRva2VuLCAoUFVDSEFSKSgmbWFjW2ldKSwgMSk7CisJCX0KKwkJaWYoaSAhPSA2KQorCQkJcmV0dXJuIEZBTFNFOworCisJCXByaW50aygiXG4lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeC0lMDJ4IiwgbWFjWzBdLCBtYWNbMV0sCisJCSAgICAgICBtYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0sIHRpZCk7CisKKwkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkLCBtYWMpOworCisJCWlmIChwRW50cnkpIHsKKwkJICAgIHByaW50aygiXG5UZWFyIGRvd24gUmVjIEJBIFNlc3Npb246IFRpZCA9ICVkXG4iLCB0aWQpOworCQkgICAgQkFSZWNTZXNzaW9uVGVhckRvd24ocEFkLCBwRW50cnktPkFpZCwgdGlkLCBGQUxTRSk7CisJCX0KKworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7CisKK30KKworSU5UCVNldF9IdEJ3X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIEh0Qnc7CisKKwlIdEJ3ID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKwlpZiAoSHRCdyA9PSBCV180MCkKKwkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXICA9IEJXXzQwOworCWVsc2UgaWYgKEh0QncgPT0gQldfMjApCisJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyAgPSBCV18yMDsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZCBhcmd1bWVudAorCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdEJ3X1Byb2M6OihIdEJ3PSVkKVxuIiwgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UCVNldF9IdE1jc19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBIdE1jcywgTWNzX3RtcDsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyAgICBCT09MRUFOIGJBdXRvUmF0ZSA9IEZBTFNFOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJTWNzX3RtcCA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoTWNzX3RtcCA8PSAxNSB8fCBNY3NfdG1wID09IDMyKQorCQlIdE1jcyA9IE1jc190bXA7CisJZWxzZQorCQlIdE1jcyA9IE1DU19BVVRPOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gSHRNY3M7CisJCXBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID0gKEh0TWNzID09IE1DU19BVVRPKSA/IFRSVUU6RkFMU0U7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdE1jc19Qcm9jOjooSHRNY3M9JWQsIGJBdXRvVHhSYXRlU3dpdGNoID0gJWQpXG4iLAorCQkJCQkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MsIHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoKSk7CisKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlIDwgUEhZXzExQUJHTl9NSVhFRCkgfHwKKwkJCShwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NT0RFIDwgTU9ERV9IVE1JWCkpCisJCXsKKwkgICAgICAgIGlmICgocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgIT0gTUNTX0FVVE8pICYmCisJCQkJKEh0TWNzID49IDAgJiYgSHRNY3MgPD0gMykgJiYKKwkgICAgICAgICAgICAocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5GaXhlZFR4TW9kZSA9PSBGSVhFRF9UWE1PREVfQ0NLKSkKKwkJCXsKKwkJCQlSVE1QU2V0RGVzaXJlZFJhdGVzKHBBZCwgKExPTkcpIChSYXRlSWRUb01icHNbSHRNY3NdICogMTAwMDAwMCkpOworCQkJfQorCSAgICAgICAgZWxzZSBpZiAoKHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTICE9IE1DU19BVVRPKSAmJgorCQkJCQkoSHRNY3MgPj0gMCAmJiBIdE1jcyA8PSA3KSAmJgorCSAgICAgICAgICAgIAkocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5GaXhlZFR4TW9kZSA9PSBGSVhFRF9UWE1PREVfT0ZETSkpCisJCQl7CisJCQkJUlRNUFNldERlc2lyZWRSYXRlcyhwQWQsIChMT05HKSAoUmF0ZUlkVG9NYnBzW0h0TWNzKzRdICogMTAwMDAwMCkpOworCQkJfQorCQkJZWxzZQorCQkJCWJBdXRvUmF0ZSA9IFRSVUU7CisKKwkJCWlmIChiQXV0b1JhdGUpCisJCQl7CisJICAgICAgICAgICAgcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfQVVUTzsKKwkJCQlSVE1QU2V0RGVzaXJlZFJhdGVzKHBBZCwgLTEpOworCQkJfQorCSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0TWNzX1Byb2M6OihGaXhlZFR4TW9kZT0lZClcbiIscEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5GaXhlZFR4TW9kZSkpOworCQl9CisgICAgICAgIGlmIChBREhPQ19PTihwQWQpKQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJU2V0Q29tbW9uSFQocEFkKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0R2lfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgSHRHaTsKKworCUh0R2kgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKCBIdEdpID09IEdJXzQwMCkKKwkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlNob3J0R0kgPSBHSV80MDA7CisJZWxzZSBpZiAoIEh0R2kgPT0gR0lfODAwICkKKwkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlNob3J0R0kgPSBHSV84MDA7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdEdpX1Byb2M6OihTaG9ydEdJPSVkKVxuIixwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU2hvcnRHSSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKworSU5UCVNldF9IdFR4QkFTaXplX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVDSEFSIFNpemU7CisKKwlTaXplID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChTaXplIDw9MCB8fCBTaXplID49NjQpCisJeworCQlTaXplID0gODsKKwl9CisJcEFkLT5Db21tb25DZmcuVHhCQVNpemUgPSBTaXplLTE7CisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0h0VHhCQVNpemUgOjooVHhCQVNpemU9ICVkKVxuIiwgU2l6ZSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKworSU5UCVNldF9IdE9wTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKFZhbHVlID09IEhUTU9ERV9HRikKKwkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERSAgPSBIVE1PREVfR0Y7CisJZWxzZSBpZiAoIFZhbHVlID09IEhUTU9ERV9NTSApCisJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5IVE1PREUgID0gSFRNT0RFX01NOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAvL0ludmFsaWQgYXJndW1lbnQKKworCVNldENvbW1vbkhUKHBBZCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRPcE1vZGVfUHJvYzo6KEh0T3BNb2RlPSVkKVxuIixwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuSFRNT0RFKSk7CisKKwlyZXR1cm4gVFJVRTsKKworfQorCitJTlQJU2V0X0h0U3RiY19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKFZhbHVlID09IFNUQkNfVVNFKQorCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU1RCQyA9IFNUQkNfVVNFOworCWVsc2UgaWYgKCBWYWx1ZSA9PSBTVEJDX05PTkUgKQorCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU1RCQyA9IFNUQkNfTk9ORTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1N0YmNfUHJvYzo6KEh0U3RiYz0lZClcbiIscEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlNUQkMpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0SHRjX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFZhbHVlID09IDApCisJCXBBZC0+SFRDRW5hYmxlID0gRkFMU0U7CisJZWxzZSBpZiAoIFZhbHVlID09MSApCisgICAgICAgIAlwQWQtPkhUQ0VuYWJsZSA9IFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0SHRjX1Byb2M6OihIdEh0Yz0lZClcbiIscEFkLT5IVENFbmFibGUpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0RXh0Y2hhX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoVmFsdWUgPT0gMCkKKwkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSAgPSBFWFRDSEFfQkVMT1c7CisJZWxzZSBpZiAoIFZhbHVlID09MSApCisgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgPSBFWFRDSEFfQUJPVkU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdEV4dGNoYV9Qcm9jOjooSHRFeHRjaGE9JWQpXG4iLHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0TXBkdURlbnNpdHlfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoVmFsdWUgPD03ICYmIFZhbHVlID49IDApCisJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NcGR1RGVuc2l0eSA9IFZhbHVlOworCWVsc2UKKwkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5ID0gNDsKKworCVNldENvbW1vbkhUKHBBZCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRNcGR1RGVuc2l0eV9Qcm9jOjooSHRNcGR1RGVuc2l0eT0lZClcbiIscEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5KSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UCVNldF9IdEJhV2luU2l6ZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCisJaWYgKFZhbHVlID49MSAmJiBWYWx1ZSA8PSA2NCkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQgPSBWYWx1ZTsKKwkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IFZhbHVlOworCX0KKwllbHNlCisJeworICAgICAgICBwQWQtPkNvbW1vbkNmZy5SRUdCQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0ID0gNjQ7CisJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQgPSA2NDsKKwl9CisKKwlTZXRDb21tb25IVChwQWQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0QmFXaW5TaXplX1Byb2M6OihIdEJhV2luU2l6ZT0lZClcbiIscEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfSHRSZGdfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoVmFsdWUgPT0gMCkKKwkJcEFkLT5Db21tb25DZmcuYlJkZyA9IEZBTFNFOworCWVsc2UgaWYgKCBWYWx1ZSA9PTEgKQorCXsKKwkJcEFkLT5IVENFbmFibGUgPSBUUlVFOworICAgICAgICAJcEFkLT5Db21tb25DZmcuYlJkZyA9IFRSVUU7CisJfQorCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAvL0ludmFsaWQgYXJndW1lbnQKKworCVNldENvbW1vbkhUKHBBZCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRSZGdfUHJvYzo6KEh0UmRnPSVkKVxuIixwQWQtPkNvbW1vbkNmZy5iUmRnKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UCVNldF9IdExpbmtBZGFwdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKwlpZiAoVmFsdWUgPT0gMCkKKwkJcEFkLT5iTGlua0FkYXB0ID0gRkFMU0U7CisJZWxzZSBpZiAoIFZhbHVlID09MSApCisJeworCQkJcEFkLT5IVENFbmFibGUgPSBUUlVFOworCQkJcEFkLT5iTGlua0FkYXB0ID0gVFJVRTsKKwl9CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0h0TGlua0FkYXB0X1Byb2M6OihIdExpbmtBZGFwdD0lZClcbiIscEFkLT5iTGlua0FkYXB0KSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UCVNldF9IdEFtc2R1X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCWlmIChWYWx1ZSA9PSAwKQorCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVFbmFibGUgPSBGQUxTRTsKKwllbHNlIGlmICggVmFsdWUgPT0gMSApCisgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZSA9IFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdEFtc2R1X1Byb2M6OihIdEFtc2R1PSVkKVxuIixwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVFbmFibGUpKTsKKworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0h0QXV0b0JhX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCWlmIChWYWx1ZSA9PSAwKQorCXsKKwkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IEZBTFNFOworCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5ID0gQkFfTk9UVVNFOworCX0KKyAgICAgICAgZWxzZSBpZiAoVmFsdWUgPT0gMSkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPSBUUlVFOworCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5ID0gSU1NRURfQkE7CisJfQorCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAvL0ludmFsaWQgYXJndW1lbnQKKworICAgIHBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPSBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBOworICAgIHBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPSBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5OworCVNldENvbW1vbkhUKHBBZCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRBdXRvQmFfUHJvYzo6KEh0QXV0b0JhPSVkKVxuIixwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBKSk7CisKKwlyZXR1cm4gVFJVRTsKKworfQorCitJTlQJU2V0X0h0UHJvdGVjdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKwlpZiAoVmFsdWUgPT0gMCkKKwkJcEFkLT5Db21tb25DZmcuYkhUUHJvdGVjdCA9IEZBTFNFOworICAgIGVsc2UgaWYgKFZhbHVlID09IDEpCisJCXBBZC0+Q29tbW9uQ2ZnLmJIVFByb3RlY3QgPSBUUlVFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOyAvL0ludmFsaWQgYXJndW1lbnQKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdFByb3RlY3RfUHJvYzo6KEh0UHJvdGVjdD0lZClcbiIscEFkLT5Db21tb25DZmcuYkhUUHJvdGVjdCkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfU2VuZFBTTVBBY3Rpb25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisgICAgVUNIQVIgbWFjWzZdLCBtb2RlOworCWNoYXIgKnRva2VuLCBzZXBWYWx1ZVtdID0gIjoiLCBEQVNIID0gJy0nOworCUlOVCBpOworICAgIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5OworCisgICAgLy9wcmludGsoIlxuJXNcbiIsIGFyZyk7CisvKgorCVRoZSBCQVJlY1RlYXJEb3duIGludXB0IHN0cmluZyBmb3JtYXQgc2hvdWxkIGJlIHh4Onh4Onh4Onh4Onh4Onh4LWQsCisJCT0+VGhlIHNpeCAyIGRpZ2l0IGhleC1kZWNpbWFsIG51bWJlciBwcmV2aW91cyBhcmUgdGhlIE1hYyBhZGRyZXNzLAorCQk9PlRoZSBzZXZlbnRoIGRlY2ltYWwgbnVtYmVyIGlzIHRoZSBtb2RlIHZhbHVlLgorKi8KKyAgICBpZihzdHJsZW4oYXJnKSA8IDE5KSAgLy9NYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAwMTowMjowMzowNDowNTowNiBsZW5ndGggMTcgcGx1cyB0aGUgIi0iIGFuZCBtb2RlIHZhbHVlIGluIGRlY2ltYWwgZm9ybWF0LgorCQlyZXR1cm4gRkFMU0U7CisKKyAgIAl0b2tlbiA9IHN0cmNocihhcmcsIERBU0gpOworCWlmICgodG9rZW4gIT0gTlVMTCkgJiYgKHN0cmxlbih0b2tlbik+MSkpCisJeworCQltb2RlID0gc2ltcGxlX3N0cnRvbCgodG9rZW4rMSksIDAsIDEwKTsKKwkJaWYgKG1vZGUgPiBNTVBTX0VOQUJMRSkKKwkJCXJldHVybiBGQUxTRTsKKworCQkqdG9rZW4gPSAnXDAnOworCQlmb3IgKGkgPSAwLCB0b2tlbiA9IHJzdHJ0b2soYXJnLCAmc2VwVmFsdWVbMF0pOyB0b2tlbjsgdG9rZW4gPSByc3RydG9rKE5VTEwsICZzZXBWYWx1ZVswXSksIGkrKykKKwkJeworCQkJaWYoKHN0cmxlbih0b2tlbikgIT0gMikgfHwgKCFpc3hkaWdpdCgqdG9rZW4pKSB8fCAoIWlzeGRpZ2l0KCoodG9rZW4rMSkpKSkKKwkJCQlyZXR1cm4gRkFMU0U7CisJCQlBdG9IKHRva2VuLCAoUFVDSEFSKSgmbWFjW2ldKSwgMSk7CisJCX0KKwkJaWYoaSAhPSA2KQorCQkJcmV0dXJuIEZBTFNFOworCisJCXByaW50aygiXG4lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeC0lMDJ4IiwgbWFjWzBdLCBtYWNbMV0sCisJCSAgICAgICBtYWNbMl0sIG1hY1szXSwgbWFjWzRdLCBtYWNbNV0sIG1vZGUpOworCisJCXBFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZCwgbWFjKTsKKworCQlpZiAocEVudHJ5KSB7CisJCSAgICBwcmludGsoIlxuU2VuZFBTTVBBY3Rpb24gTUlQUyBtb2RlID0gJWRcbiIsIG1vZGUpOworCQkgICAgU2VuZFBTTVBBY3Rpb24ocEFkLCBwRW50cnktPkFpZCwgbW9kZSk7CisJCX0KKworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7CisKKworfQorCitJTlQJU2V0X0h0TUlNT1BTbW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmIChWYWx1ZSA8PTMgJiYgVmFsdWUgPj0gMCkKKwkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlID0gVmFsdWU7CisJZWxzZQorCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGUgPSAzOworCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9IdE1JTU9QU21vZGVfUHJvYzo6KE1JTU9QUyBtb2RlPSVkKVxuIixwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGUpKTsKKworCXJldHVybiBUUlVFOworfQorCisKK0lOVAlTZXRfRm9yY2VTaG9ydEdJX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCWlmIChWYWx1ZSA9PSAwKQorCQlwQWQtPldJRkl0ZXN0YmVkLmJTaG9ydEdJID0gRkFMU0U7CisJZWxzZSBpZiAoVmFsdWUgPT0gMSkKKwkJcEFkLT5XSUZJdGVzdGJlZC5iU2hvcnRHSSA9IFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9Gb3JjZVNob3J0R0lfUHJvYzo6KEZvcmNlU2hvcnRHST0lZClcbiIsIHBBZC0+V0lGSXRlc3RiZWQuYlNob3J0R0kpKTsKKworCXJldHVybiBUUlVFOworfQorCisKKworSU5UCVNldF9Gb3JjZUdGX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVMT05HIFZhbHVlOworCisJVmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCWlmIChWYWx1ZSA9PSAwKQorCQlwQWQtPldJRkl0ZXN0YmVkLmJHcmVlbkZpZWxkID0gRkFMU0U7CisJZWxzZSBpZiAoVmFsdWUgPT0gMSkKKwkJcEFkLT5XSUZJdGVzdGJlZC5iR3JlZW5GaWVsZCA9IFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJU2V0Q29tbW9uSFQocEFkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9Gb3JjZUdGX1Byb2M6OihGb3JjZUdGPSVkKVxuIiwgcEFkLT5XSUZJdGVzdGJlZC5iR3JlZW5GaWVsZCkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfSHRNaW1vUHNfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUxPTkcgVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisJaWYgKFZhbHVlID09IDApCisJCXBBZC0+Q29tbW9uQ2ZnLmJNSU1PUFNFbmFibGUgPSBGQUxTRTsKKwllbHNlIGlmIChWYWx1ZSA9PSAxKQorCQlwQWQtPkNvbW1vbkNmZy5iTUlNT1BTRW5hYmxlID0gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsgLy9JbnZhbGlkIGFyZ3VtZW50CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfSHRNaW1vUHNfUHJvYzo6KEh0TWltb1BzPSVkKVxuIixwQWQtPkNvbW1vbkNmZy5iTUlNT1BTRW5hYmxlKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitJTlQJU2V0Q29tbW9uSFQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJT0lEX1NFVF9IVF9QSFlNT0RFCQlTZXRIVDsKKworCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlIDwgUEhZXzExQUJHTl9NSVhFRCkKKwkJcmV0dXJuIEZBTFNFOworCisJU2V0SFQuUGh5TW9kZSA9IHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGU7CisJU2V0SFQuVHJhbnNtaXRObyA9ICgoVUNIQVIpcEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCk7CisJU2V0SFQuSHRNb2RlID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5IVE1PREU7CisJU2V0SFQuRXh0T2Zmc2V0ID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEE7CisJU2V0SFQuTUNTID0gTUNTX0FVVE87CisJU2V0SFQuQlcgPSAoVUNIQVIpcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXOworCVNldEhULlNUQkMgPSAoVUNIQVIpcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlNUQkM7CisJU2V0SFQuU0hPUlRHSSA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU2hvcnRHSTsKKworCVJUTVBTZXRIVChwQWQsICZTZXRIVCk7CisKKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworSU5UCVNldF9GaXhlZFR4TW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVQ0hBUglmaXhfdHhfbW9kZSA9IEZJWEVEX1RYTU9ERV9IVDsKKworCWlmIChzdHJjbXAoYXJnLCAiT0ZETSIpID09IDAgfHwgc3RyY21wKGFyZywgIm9mZG0iKSA9PSAwKQorCXsKKwkJZml4X3R4X21vZGUgPSBGSVhFRF9UWE1PREVfT0ZETTsKKwl9CisJZWxzZSBpZiAoc3RyY21wKGFyZywgIkNDSyIpID09IDAgfHwgc3RyY21wKGFyZywgImNjayIpID09IDApCisJeworICAgICAgICBmaXhfdHhfbW9kZSA9IEZJWEVEX1RYTU9ERV9DQ0s7CisJfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5GaXhlZFR4TW9kZSA9IGZpeF90eF9tb2RlOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0ZpeGVkVHhNb2RlX1Byb2M6OihGaXhlZFR4TW9kZT0lZClcbiIsIGZpeF90eF9tb2RlKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCitJTlQJU2V0X09wTW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVTE9ORyBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworI2lmZGVmIFJUMjg3MAorCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfU1RBUlRfVVApKQorI2VuZGlmIC8vIFJUMjg3MCAvLworCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQ2FuIG5vdCBzd2l0Y2ggb3BlcmF0ZSBtb2RlIG9uIGludGVyZmFjZSB1cCAhISBcbiIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCWlmIChWYWx1ZSA9PSAwKQorCQlwQWQtPk9wTW9kZSA9IE9QTU9ERV9TVEE7CisJZWxzZSBpZiAoVmFsdWUgPT0gMSkKKwkJcEFkLT5PcE1vZGUgPSBPUE1PREVfQVA7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7IC8vSW52YWxpZCBhcmd1bWVudAorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X09wTW9kZV9Qcm9jOjooT3BNb2RlPSVzKVxuIiwgcEFkLT5PcE1vZGUgPT0gMSA/ICJBUCBNb2RlIiA6ICJTVEEgTW9kZSIpKTsKKworCXJldHVybiBUUlVFOworfQorI2VuZGlmIC8vIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUIC8vCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworUENIQVIgICBSVE1QR2V0UmFsaW5rQXV0aE1vZGVTdHIoCisgICAgSU4gIE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgYXV0aE1vZGUpCit7CisJc3dpdGNoKGF1dGhNb2RlKQorCXsKKwkJY2FzZSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOgorCQkJcmV0dXJuICJPUEVOIjsKKyAgICAgICAgZGVmYXVsdDoKKwkJY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0s6CisJCQlyZXR1cm4gIldQQVBTSyI7CisJCWNhc2UgTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkOgorCQkJcmV0dXJuICJTSEFSRUQiOworCQljYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQToKKwkJCXJldHVybiAiV1BBIjsKKwkJY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEEyOgorCQkJcmV0dXJuICJXUEEyIjsKKwkJY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLOgorCQkJcmV0dXJuICJXUEEyUFNLIjsKKyAgICAgICAgY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSzoKKwkJCXJldHVybiAiV1BBUFNLV1BBMlBTSyI7CisgICAgICAgIGNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMVdQQTI6CisJCQlyZXR1cm4gIldQQTFXUEEyIjsKKwl9Cit9CisKK1BDSEFSICAgUlRNUEdldFJhbGlua0VuY3J5TW9kZVN0cigKKyAgICBJTiAgVVNIT1JUIGVuY3J5TW9kZSkKK3sKKwlzd2l0Y2goZW5jcnlNb2RlKQorCXsKKwkgICAgZGVmYXVsdDoKKwkJY2FzZSBOZGlzODAyXzExV0VQRGlzYWJsZWQ6CisJCQlyZXR1cm4gIk5PTkUiOworCQljYXNlIE5kaXM4MDJfMTFXRVBFbmFibGVkOgorCQkJcmV0dXJuICJXRVAiOworCQljYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ6CisJCQlyZXR1cm4gIlRLSVAiOworCQljYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ6CisJCQlyZXR1cm4gIkFFUyI7CisgICAgICAgIGNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb240RW5hYmxlZDoKKwkJCXJldHVybiAiVEtJUEFFUyI7CisJfQorfQorCitJTlQgUlRNUFNob3dDZmdWYWx1ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwTmFtZSwKKwlJTglQVUNIQVIJCQlwQnVmKQoreworCUlOVAlTdGF0dXMgPSAwOworCisJZm9yIChQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DID0gUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DOyBQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DLT5uYW1lOyBQUlRNUF9QUklWQVRFX1NUQV9TSE9XX0NGR19WQUxVRV9QUk9DKyspCisJeworCQlpZiAoIXN0cmNtcChwTmFtZSwgUFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQy0+bmFtZSkpCisJCXsKKwkJCWlmKFBSVE1QX1BSSVZBVEVfU1RBX1NIT1dfQ0ZHX1ZBTFVFX1BST0MtPnNob3dfcHJvYyhwQWQsIHBCdWYpKQorCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQlicmVhazsgIC8vRXhpdCBmb3IgbG9vcC4KKwkJfQorCX0KKworCWlmKFBSVE1QX1BSSVZBVEVfU1RBX1NIT1dfQ0ZHX1ZBTFVFX1BST0MtPm5hbWUgPT0gTlVMTCkKKwl7CisJCXNwcmludGYocEJ1ZiwgIlxuIik7CisJCWZvciAoUFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQyA9IFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQzsgUFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQy0+bmFtZTsgUFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQysrKQorCQkJc3ByaW50ZihwQnVmLCAiJXMlc1xuIiwgcEJ1ZiwgUFJUTVBfUFJJVkFURV9TVEFfU0hPV19DRkdfVkFMVUVfUFJPQy0+bmFtZSk7CisJfQorCisJcmV0dXJuIFN0YXR1czsKK30KKworSU5UCVNob3dfU1NJRF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJc3ByaW50ZihwQnVmLCAiXHQlcyIsIHBBZC0+Q29tbW9uQ2ZnLlNzaWQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCXJldHVybiAwOworfQorCitJTlQJU2hvd19XaXJlbGVzc01vZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzd2l0Y2gocEFkLT5Db21tb25DZmcuUGh5TW9kZSkKKwl7CisJCWNhc2UgUEhZXzExQkdfTUlYRUQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExQi9HIik7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFCOgorCQkJc3ByaW50ZihwQnVmLCAiXHQxMUIiKTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV8xMUE6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExQSIpOworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExQUJHX01JWEVEOgorCQkJc3ByaW50ZihwQnVmLCAiXHQxMUEvQi9HIik7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFHOgorCQkJc3ByaW50ZihwQnVmLCAiXHQxMUciKTsKKwkJCWJyZWFrOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQljYXNlIFBIWV8xMUFCR05fTUlYRUQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExQS9CL0cvTiIpOworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExTl8yXzRHOgorCQkJc3ByaW50ZihwQnVmLCAiXHQxMU4gb25seSB3aXRoIDIuNEciKTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV8xMUdOX01JWEVEOgorCQkJc3ByaW50ZihwQnVmLCAiXHQxMUcvTiIpOworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExQU5fTUlYRUQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExQS9OIik7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFCR05fTUlYRUQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdDExQi9HL04iKTsKKwkJCWJyZWFrOworCQljYXNlIFBIWV8xMUFHTl9NSVhFRDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0MTFBL0cvTiIpOworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExTl81RzoKKwkJCXNwcmludGYocEJ1ZiwgIlx0MTFOIG9ubHkgd2l0aCA1RyIpOworCQkJYnJlYWs7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdFVua25vdyBWYWx1ZSglZCkiLCBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlKTsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworCitJTlQJU2hvd19UeEJ1cnN0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlcyIsIHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0ID8gIlRSVUUiOiJGQUxTRSIpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19UeFByZWFtYmxlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3dpdGNoKHBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUpCisJeworCQljYXNlIFJ0ODAyXzExUHJlYW1ibGVTaG9ydDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0U2hvcnQiKTsKKwkJCWJyZWFrOworCQljYXNlIFJ0ODAyXzExUHJlYW1ibGVMb25nOgorCQkJc3ByaW50ZihwQnVmLCAiXHRMb25nIik7CisJCQlicmVhazsKKwkJY2FzZSBSdDgwMl8xMVByZWFtYmxlQXV0bzoKKwkJCXNwcmludGYocEJ1ZiwgIlx0QXV0byIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdFVua25vdyBWYWx1ZSglbHUpIiwgcEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfVHhQb3dlcl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JWx1IiwgcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19DaGFubmVsX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlZCIsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19CR1Byb3RlY3Rpb25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzd2l0Y2gocEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uKQorCXsKKwkJY2FzZSAxOiAvL0Fsd2F5cyBPbgorCQkJc3ByaW50ZihwQnVmLCAiXHRPTiIpOworCQkJYnJlYWs7CisJCWNhc2UgMjogLy9BbHdheXMgT0ZGCisJCQlzcHJpbnRmKHBCdWYsICJcdE9GRiIpOworCQkJYnJlYWs7CisJCWNhc2UgMDogLy9BVVRPCisJCQlzcHJpbnRmKHBCdWYsICJcdEF1dG8iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3ByaW50ZihwQnVmLCAiXHRVbmtub3cgVmFsdWUoJWx1KSIsIHBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbik7CisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X1JUU1RocmVzaG9sZF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JXUiLCBwQWQtPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19GcmFnVGhyZXNob2xkX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQldSIsIHBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorSU5UCVNob3dfSHRCd19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCWlmIChwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPT0gQldfNDApCisJeworCQlzcHJpbnRmKHBCdWYsICJcdDQwIE1IeiIpOworCX0KKwllbHNlCisJeworICAgICAgICBzcHJpbnRmKHBCdWYsICJcdDIwIE1IeiIpOworCX0KKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfSHRNY3NfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXNwcmludGYocEJ1ZiwgIlx0JXUiLCBwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0h0R2lfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzd2l0Y2gocEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlNob3J0R0kpCisJeworCQljYXNlIEdJXzQwMDoKKwkJCXNwcmludGYocEJ1ZiwgIlx0R0lfNDAwIik7CisJCQlicmVhazsKKwkJY2FzZSBHSV84MDA6CisJCQlzcHJpbnRmKHBCdWYsICJcdEdJXzgwMCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdFVua25vdyBWYWx1ZSgldSkiLCBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU2hvcnRHSSk7CisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0h0T3BNb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3dpdGNoKHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5IVE1PREUpCisJeworCQljYXNlIEhUTU9ERV9HRjoKKwkJCXNwcmludGYocEJ1ZiwgIlx0R0YiKTsKKwkJCWJyZWFrOworCQljYXNlIEhUTU9ERV9NTToKKwkJCXNwcmludGYocEJ1ZiwgIlx0TU0iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3ByaW50ZihwQnVmLCAiXHRVbmtub3cgVmFsdWUoJXUpIiwgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERSk7CisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0h0RXh0Y2hhX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3dpdGNoKHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEpCisJeworCQljYXNlIEVYVENIQV9CRUxPVzoKKwkJCXNwcmludGYocEJ1ZiwgIlx0QmVsb3ciKTsKKwkJCWJyZWFrOworCQljYXNlIEVYVENIQV9BQk9WRToKKwkJCXNwcmludGYocEJ1ZiwgIlx0QWJvdmUiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3ByaW50ZihwQnVmLCAiXHRVbmtub3cgVmFsdWUoJXUpIiwgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkVYVENIQSk7CisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworSU5UCVNob3dfSHRNcGR1RGVuc2l0eV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JXUiLCBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHkpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19IdEJhV2luU2l6ZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JXUiLCBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUnhCQVdpbkxpbWl0KTsKKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfSHRSZGdfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzcHJpbnRmKHBCdWYsICJcdCVzIiwgcEFkLT5Db21tb25DZmcuYlJkZyA/ICJUUlVFIjoiRkFMU0UiKTsKKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfSHRBbXNkdV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JXMiLCBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVFbmFibGUgPyAiVFJVRSI6IkZBTFNFIik7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0h0QXV0b0JhX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJc3ByaW50ZihwQnVmLCAiXHQlcyIsIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPyAiVFJVRSI6IkZBTFNFIik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK0lOVAlTaG93X0NvdW50cnlSZWdpb25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzcHJpbnRmKHBCdWYsICJcdCVkIiwgcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbik7CisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X0NvdW50cnlSZWdpb25BQmFuZF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JWQiLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19Db3VudHJ5Q29kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JXMiLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5Q29kZSk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBBR0dSRUdBVElPTl9TVVBQT1JUCitJTlQJU2hvd19Qa3RBZ2dyZWdhdGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzcHJpbnRmKHBCdWYsICJcdCVzIiwgcEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZSA/ICJUUlVFIjoiRkFMU0UiKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvLyBBR0dSRUdBVElPTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBXTU1fU1VQUE9SVAorSU5UCVNob3dfV21tQ2FwYWJsZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJc3ByaW50ZihwQnVmLCAiXHQlcyIsIHBBZC0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlID8gIlRSVUUiOiJGQUxTRSIpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLy8gV01NX1NVUFBPUlQgLy8KKworSU5UCVNob3dfSUVFRTgwMjExSF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCXNwcmludGYocEJ1ZiwgIlx0JXMiLCBwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA/ICJUUlVFIjoiRkFMU0UiKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorSU5UCVNob3dfTmV0d29ya1R5cGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlzd2l0Y2gocEFkLT5TdGFDZmcuQnNzVHlwZSkKKwl7CisJCWNhc2UgQlNTX0FESE9DOgorCQkJc3ByaW50ZihwQnVmLCAiXHRBZGhvYyIpOworCQkJYnJlYWs7CisJCWNhc2UgQlNTX0lORlJBOgorCQkJc3ByaW50ZihwQnVmLCAiXHRJbmZyYSIpOworCQkJYnJlYWs7CisJCWNhc2UgQlNTX0FOWToKKwkJCXNwcmludGYocEJ1ZiwgIlx0QW55Iik7CisJCQlicmVhazsKKwkJY2FzZSBCU1NfTU9OSVRPUjoKKwkJCXNwcmludGYocEJ1ZiwgIlx0TW9uaXRvciIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzcHJpbnRmKHBCdWYsICJcdFVua25vdyBWYWx1ZSglZCkiLCBwQWQtPlN0YUNmZy5Cc3NUeXBlKTsKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworSU5UCVNob3dfQXV0aE1vZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCUF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCUF1dGhNb2RlID0gcEFkLT5TdGFDZmcuQXV0aE1vZGU7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlpZiAoKEF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pICYmCisJCShBdXRoTW9kZSA8PSBOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSykpCisJCXNwcmludGYocEJ1ZiwgIlx0JXMiLCBSVE1QR2V0UmFsaW5rQXV0aE1vZGVTdHIoQXV0aE1vZGUpKTsKKwllbHNlCisJCXNwcmludGYocEJ1ZiwgIlx0VW5rbm93IFZhbHVlKCVkKSIsIEF1dGhNb2RlKTsKKworCXJldHVybiAwOworfQorCitJTlQJU2hvd19FbmNyeXBUeXBlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJTkRJU184MDJfMTFfV0VQX1NUQVRVUwlXZXBTdGF0dXMgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlXZXBTdGF0dXMgPSBwQWQtPlN0YUNmZy5XZXBTdGF0dXM7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlpZiAoKFdlcFN0YXR1cyA+PSBOZGlzODAyXzExV0VQRW5hYmxlZCkgJiYKKwkJKFdlcFN0YXR1cyA8PSBOZGlzODAyXzExRW5jcnlwdGlvbjRLZXlBYnNlbnQpKQorCQlzcHJpbnRmKHBCdWYsICJcdCVzIiwgUlRNUEdldFJhbGlua0VuY3J5TW9kZVN0cihXZXBTdGF0dXMpKTsKKwllbHNlCisJCXNwcmludGYocEJ1ZiwgIlx0VW5rbm93IFZhbHVlKCVkKSIsIFdlcFN0YXR1cyk7CisKKwlyZXR1cm4gMDsKK30KKworSU5UCVNob3dfRGVmYXVsdEtleUlEX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJVUNIQVIgRGVmYXVsdEtleUlkID0gMDsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCURlZmF1bHRLZXlJZCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZDsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCXNwcmludGYocEJ1ZiwgIlx0JWQiLCBEZWZhdWx0S2V5SWQpOworCisJcmV0dXJuIDA7Cit9CisKK0lOVAlTaG93X1dlcEtleV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICBJTlQJCQkJS2V5SWR4LAorCU9VVAlQVUNIQVIJCQlwQnVmKQoreworCVVDSEFSICAgS2V5WzE2XSA9IHswfSwgS2V5TGVuZ3RoID0gMDsKKwlJTlQJCWluZGV4ID0gQlNTMDsKKworCUtleUxlbmd0aCA9IHBBZC0+U2hhcmVkS2V5W2luZGV4XVtLZXlJZHhdLktleUxlbjsKKwlOZGlzTW92ZU1lbW9yeShLZXksIHBBZC0+U2hhcmVkS2V5W2luZGV4XVtLZXlJZHhdLktleSwgS2V5TGVuZ3RoKTsKKworCS8vY2hlY2sga2V5IHN0cmluZyBpcyBBU0NJSSBvciBub3QKKyAgICBpZiAoUlRNUENoZWNrU3RyUHJpbnRBYmxlKEtleSwgS2V5TGVuZ3RoKSkKKyAgICAgICAgc3ByaW50ZihwQnVmLCAiXHQlcyIsIEtleSk7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IGlkeDsKKyAgICAgICAgc3ByaW50ZihwQnVmLCAiXHQiKTsKKyAgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBLZXlMZW5ndGg7IGlkeCsrKQorICAgICAgICAgICAgc3ByaW50ZihwQnVmK3N0cmxlbihwQnVmKSwgIiUwMlgiLCBLZXlbaWR4XSk7CisgICAgfQorCXJldHVybiAwOworfQorCitJTlQJU2hvd19LZXkxX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJU2hvd19XZXBLZXlfUHJvYyhwQWQsIDAsIHBCdWYpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19LZXkyX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJU2hvd19XZXBLZXlfUHJvYyhwQWQsIDEsIHBCdWYpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19LZXkzX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJU2hvd19XZXBLZXlfUHJvYyhwQWQsIDIsIHBCdWYpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19LZXk0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVQ0hBUgkJCXBCdWYpCit7CisJU2hvd19XZXBLZXlfUHJvYyhwQWQsIDMsIHBCdWYpOworCXJldHVybiAwOworfQorCitJTlQJU2hvd19XUEFQU0tfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJUFVDSEFSCQkJcEJ1ZikKK3sKKwlJTlQgCWlkeDsKKwlVQ0hBUglQTUtbMzJdID0gezB9OworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQlOZGlzTW92ZU1lbW9yeShQTUssIHBBZC0+U3RhQ2ZnLlBNSywgMzIpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisgICAgc3ByaW50ZihwQnVmLCAiXHRQTUsgPSAiKTsKKyAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IDMyOyBpZHgrKykKKyAgICAgICAgc3ByaW50ZihwQnVmK3N0cmxlbihwQnVmKSwgIiUwMlgiLCBQTUtbaWR4XSk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX3Nhbml0eS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX3Nhbml0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMThkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fc2FuaXR5LmMKQEAgLTAsMCArMSwxNjY5IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXNhbml0eS5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSm9obiBDaGFuZyAgMjAwNC0wOS0wMSAgICAgIGFkZCBXTU0gc3VwcG9ydAorKi8KKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworCitleHRlcm4gVUNIQVIJQ0lTQ09fT1VJW107CisKK2V4dGVybiBVQ0hBUglXUEFfT1VJW107CitleHRlcm4gVUNIQVIJUlNOX09VSVtdOworZXh0ZXJuIFVDSEFSCVdNRV9JTkZPX0VMRU1bXTsKK2V4dGVybiBVQ0hBUglXTUVfUEFSTV9FTEVNW107CitleHRlcm4gVUNIQVIJQ2N4MlFvc0luZm9bXTsKK2V4dGVybiBVQ0hBUglSQUxJTktfT1VJW107CitleHRlcm4gVUNIQVIJQlJPQURDT01fT1VJW107CitleHRlcm4gVUNIQVIgICAgV1BTX09VSVtdOworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIE1MTUUgbWVzc2FnZSBzYW5pdHkgY2hlY2sKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBNbG1lQWRkQkFSZXFTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBBZGRyMikKK3sKKyAgICBQTUxNRV9BRERCQV9SRVFfU1RSVUNUICAgcEluZm87CisKKyAgICBwSW5mbyA9IChNTE1FX0FEREJBX1JFUV9TVFJVQ1QgKilNc2c7CisKKyAgICBpZiAoKE1zZ0xlbiAhPSBzaXplb2YoTUxNRV9BRERCQV9SRVFfU1RSVUNUKSkpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lQWRkQkFSZXFTYW5pdHkgZmFpbCAtIG1lc3NhZ2UgbGVuZ2h0IG5vdCBjb3JyZWN0LlxuIikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYgKChwSW5mby0+V2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lQWRkQkFSZXFTYW5pdHkgZmFpbCAtIFRoZSBwZWVyIE1hYyBpcyBub3QgYXNzb2NpYXRlZCB5ZXQuXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKwkvKgorICAgIGlmICgocEluZm8tPkJhQnVmU2l6ZSA+IE1BWF9SWF9SRU9SREVSQlVGKSB8fCAocEluZm8tPkJhQnVmU2l6ZSA8IDIpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZUFkZEJBUmVxU2FuaXR5IGZhaWwgLSBSeCBSZW9yZGVyaW5nIGJ1ZmZlciB0b28gYmlnIG9yIHRvbyBzbWFsbFxuIikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCSovCisKKyAgICBpZiAoKHBJbmZvLT5wQWRkclswXSYweDAxKSA9PSAweDAxKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZUFkZEJBUmVxU2FuaXR5IGZhaWwgLSBicm9hZGNhc3QgYWRkcmVzcyBub3Qgc3VwcG9ydCBCQVxuIikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIE1sbWVEZWxCQVJlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuKQoreworCU1MTUVfREVMQkFfUkVRX1NUUlVDVCAqcEluZm87CisJcEluZm8gPSAoTUxNRV9ERUxCQV9SRVFfU1RSVUNUICopTXNnOworCisgICAgaWYgKChNc2dMZW4gIT0gc2l6ZW9mKE1MTUVfREVMQkFfUkVRX1NUUlVDVCkpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiTWxtZURlbEJBUmVxU2FuaXR5IGZhaWwgLSBtZXNzYWdlIGxlbmdodCBub3QgY29ycmVjdC5cbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmICgocEluZm8tPldjaWQgPj0gTUFYX0xFTl9PRl9NQUNfVEFCTEUpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiTWxtZURlbEJBUmVxU2FuaXR5IGZhaWwgLSBUaGUgcGVlciBNYWMgaXMgbm90IGFzc29jaWF0ZWQgeWV0LlxuIikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYgKChwSW5mby0+VElEICYgMHhmMCkpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJNbG1lRGVsQkFSZXFTYW5pdHkgZmFpbCAtIFRoZSBwZWVyIFRJRCBpcyBpbmNvcnJlY3QuXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKwlpZiAoTmRpc0VxdWFsTWVtb3J5KHBBZC0+TWFjVGFiLkNvbnRlbnRbcEluZm8tPldjaWRdLkFkZHIsIHBJbmZvLT5BZGRyLCBNQUNfQUREUl9MRU4pID09IDApCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJNbG1lRGVsQkFSZXFTYW5pdHkgZmFpbCAtIHRoZSBwZWVyIGFkZHIgZG9zZW4ndCBleGlzdC5cbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCitCT09MRUFOIFBlZXJBZGRCQVJlcUFjdGlvblNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpwTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVDSEFSIHBBZGRyMikKK3sKKwlQRlJBTUVfODAyXzExIHBGcmFtZSA9IChQRlJBTUVfODAyXzExKXBNc2c7CisJUEZSQU1FX0FEREJBX1JFUSBwQWRkRnJhbWU7CisJcEFkZEZyYW1lID0gKFBGUkFNRV9BRERCQV9SRVEpKHBNc2cpOworCWlmIChNc2dMZW4gPCAoc2l6ZW9mKEZSQU1FX0FEREJBX1JFUSkpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJQZWVyQWRkQkFSZXFBY3Rpb25TYW5pdHk6IEFEREJBIFJlcXVlc3QgZnJhbWUgbGVuZ3RoIHNpemUgPSAlbGQgaW5jb3JyZWN0XG4iLCBNc2dMZW4pKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwkvLyB3ZSBzdXBwb3J0IGltbWVkaWF0ZSBCQS4KKwkqKFVTSE9SVCAqKSgmcEFkZEZyYW1lLT5CYVBhcm0pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBBZGRGcmFtZS0+QmFQYXJtKSk7CisJcEFkZEZyYW1lLT5UaW1lT3V0VmFsdWUgPSBjcHUybGUxNihwQWRkRnJhbWUtPlRpbWVPdXRWYWx1ZSk7CisJcEFkZEZyYW1lLT5CYVN0YXJ0U2VxLndvcmQgPSBjcHUybGUxNihwQWRkRnJhbWUtPkJhU3RhcnRTZXEud29yZCk7CisKKwlpZiAocEFkZEZyYW1lLT5CYVBhcm0uQkFQb2xpY3kgIT0gSU1NRURfQkEpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlBlZXJBZGRCQVJlcUFjdGlvblNhbml0eTogQUREQkEgUmVxdWVzdCBCYSBQb2xpY3lbJWRdIG5vdCBzdXBwb3J0XG4iLCBwQWRkRnJhbWUtPkJhUGFybS5CQVBvbGljeSkpOworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkFEREJBIFJlcXVlc3QuIHRpZD0leCwgQnVmc2l6ZT0leCwgQU1TRFVTdXBwb3J0ZWQ9JXggXG4iLCBwQWRkRnJhbWUtPkJhUGFybS5USUQsIHBBZGRGcmFtZS0+QmFQYXJtLkJ1ZlNpemUsIHBBZGRGcmFtZS0+QmFQYXJtLkFNU0RVU3VwcG9ydGVkKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwkvLyB3ZSBzdXBwb3J0IGltbWVkaWF0ZSBCQS4KKwlpZiAocEFkZEZyYW1lLT5CYVBhcm0uVElEICYweGZmZjApCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlBlZXJBZGRCQVJlcUFjdGlvblNhbml0eTogQUREQkEgUmVxdWVzdCBpbmNvcnJlY3QgVElEID0gJWRcbiIsIHBBZGRGcmFtZS0+QmFQYXJtLlRJRCkpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCUNPUFlfTUFDX0FERFIocEFkZHIyLCBwRnJhbWUtPkhkci5BZGRyMik7CisJcmV0dXJuIFRSVUU7Cit9CisKK0JPT0xFQU4gUGVlckFkZEJBUnNwQWN0aW9uU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKnBNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuKQoreworCS8vUEZSQU1FXzgwMl8xMSBwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSlwTXNnOworCVBGUkFNRV9BRERCQV9SU1AgcEFkZEZyYW1lOworCisJcEFkZEZyYW1lID0gKFBGUkFNRV9BRERCQV9SU1ApKHBNc2cpOworCWlmIChNc2dMZW4gPCAoc2l6ZW9mKEZSQU1FX0FEREJBX1JTUCkpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJQZWVyQWRkQkFSc3BBY3Rpb25TYW5pdHk6IEFEREJBIFJlc3BvbnNlIGZyYW1lIGxlbmd0aCBzaXplID0gJWxkIGluY29ycmVjdFxuIiwgTXNnTGVuKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJLy8gd2Ugc3VwcG9ydCBpbW1lZGlhdGUgQkEuCisJKihVU0hPUlQgKikoJnBBZGRGcmFtZS0+QmFQYXJtKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZwQWRkRnJhbWUtPkJhUGFybSkpOworCXBBZGRGcmFtZS0+U3RhdHVzQ29kZSA9IGNwdTJsZTE2KHBBZGRGcmFtZS0+U3RhdHVzQ29kZSk7CisJcEFkZEZyYW1lLT5UaW1lT3V0VmFsdWUgPSBjcHUybGUxNihwQWRkRnJhbWUtPlRpbWVPdXRWYWx1ZSk7CisKKwlpZiAocEFkZEZyYW1lLT5CYVBhcm0uQkFQb2xpY3kgIT0gSU1NRURfQkEpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlBlZXJBZGRCQVJlcUFjdGlvblNhbml0eTogQUREQkEgUmVzcG9uc2UgQmEgUG9saWN5WyVkXSBub3Qgc3VwcG9ydFxuIiwgcEFkZEZyYW1lLT5CYVBhcm0uQkFQb2xpY3kpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCS8vIHdlIHN1cHBvcnQgaW1tZWRpYXRlIEJBLgorCWlmIChwQWRkRnJhbWUtPkJhUGFybS5USUQgJjB4ZmZmMCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiUGVlckFkZEJBUnNwQWN0aW9uU2FuaXR5OiBBRERCQSBSZXNwb25zZSBpbmNvcnJlY3QgVElEID0gJWRcbiIsIHBBZGRGcmFtZS0+QmFQYXJtLlRJRCkpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCXJldHVybiBUUlVFOworCit9CisKK0JPT0xFQU4gUGVlckRlbEJBQWN0aW9uU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFVDSEFSIFdjaWQsCisgICAgSU4gVk9JRCAqcE1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4gKQoreworCS8vUEZSQU1FXzgwMl8xMSBwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSlwTXNnOworCVBGUkFNRV9ERUxCQV9SRVEgIHBEZWxGcmFtZTsKKwlpZiAoTXNnTGVuICE9IChzaXplb2YoRlJBTUVfREVMQkFfUkVRKSkpCisJCXJldHVybiBGQUxTRTsKKworCWlmIChXY2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCQlyZXR1cm4gRkFMU0U7CisKKwlwRGVsRnJhbWUgPSAoUEZSQU1FX0RFTEJBX1JFUSkocE1zZyk7CisKKwkqKFVTSE9SVCAqKSgmcERlbEZyYW1lLT5EZWxiYVBhcm0pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBEZWxGcmFtZS0+RGVsYmFQYXJtKSk7CisJcERlbEZyYW1lLT5SZWFzb25Db2RlID0gY3B1MmxlMTYocERlbEZyYW1lLT5SZWFzb25Db2RlKTsKKworCWlmIChwRGVsRnJhbWUtPkRlbGJhUGFybS5USUQgJjB4ZmZmMCkKKwkJcmV0dXJuIEZBTFNFOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIElOIFVDSEFSICBNc2dDaGFubmVsLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyLAorICAgIE9VVCBQVUNIQVIgcEJzc2lkLAorICAgIE9VVCBDSEFSIFNzaWRbXSwKKyAgICBPVVQgVUNIQVIgKnBTc2lkTGVuLAorICAgIE9VVCBVQ0hBUiAqcEJzc1R5cGUsCisgICAgT1VUIFVTSE9SVCAqcEJlYWNvblBlcmlvZCwKKyAgICBPVVQgVUNIQVIgKnBDaGFubmVsLAorICAgIE9VVCBVQ0hBUiAqcE5ld0NoYW5uZWwsCisgICAgT1VUIExBUkdFX0lOVEVHRVIgKnBUaW1lc3RhbXAsCisgICAgT1VUIENGX1BBUk0gKnBDZlBhcm0sCisgICAgT1VUIFVTSE9SVCAqcEF0aW1XaW4sCisgICAgT1VUIFVTSE9SVCAqcENhcGFiaWxpdHlJbmZvLAorICAgIE9VVCBVQ0hBUiAqcEVycCwKKyAgICBPVVQgVUNIQVIgKnBEdGltQ291bnQsCisgICAgT1VUIFVDSEFSICpwRHRpbVBlcmlvZCwKKyAgICBPVVQgVUNIQVIgKnBCY2FzdEZsYWcsCisgICAgT1VUIFVDSEFSICpwTWVzc2FnZVRvTWUsCisgICAgT1VUIFVDSEFSIFN1cFJhdGVbXSwKKyAgICBPVVQgVUNIQVIgKnBTdXBSYXRlTGVuLAorICAgIE9VVCBVQ0hBUiBFeHRSYXRlW10sCisgICAgT1VUIFVDSEFSICpwRXh0UmF0ZUxlbiwKKyAgICBPVVQJVUNIQVIgKnBDa2lwRmxhZywKKyAgICBPVVQJVUNIQVIgKnBBaXJvbmV0Q2VsbFBvd2VyTGltaXQsCisgICAgT1VUIFBFRENBX1BBUk0gICAgICAgcEVkY2FQYXJtLAorICAgIE9VVCBQUUJTU19MT0FEX1BBUk0gIHBRYnNzTG9hZCwKKyAgICBPVVQgUFFPU19DQVBBQklMSVRZX1BBUk0gcFFvc0NhcGFiaWxpdHksCisgICAgT1VUIFVMT05HICpwUmFsaW5rSWUsCisgICAgT1VUIFVDSEFSCQkgKnBIdENhcGFiaWxpdHlMZW4sCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisgICAgT1VUIFVDSEFSCQkgKnBQcmVOSHRDYXBhYmlsaXR5TGVuLAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworICAgIE9VVCBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5LAorCU9VVCBVQ0hBUgkJICpBZGRIdEluZm9MZW4sCisJT1VUIEFERF9IVF9JTkZPX0lFICpBZGRIdEluZm8sCisJT1VUIFVDSEFSICpOZXdFeHRDaGFubmVsT2Zmc2V0LAkJLy8gSHQgZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0KGFib3ZlIG9yIGJlbG93KQorICAgIE9VVCBVU0hPUlQgKkxlbmd0aFZJRSwKKyAgICBPVVQJUE5ESVNfODAyXzExX1ZBUklBQkxFX0lFcyBwVklFKQoreworICAgIENIQVIJCQkJKlB0cjsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlDSEFSIAkJCQlUaW1MZW47CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgUEZSQU1FXzgwMl8xMQkJcEZyYW1lOworICAgIFBFSURfU1RSVUNUICAgICAgICAgcEVpZDsKKyAgICBVQ0hBUgkJCQlTdWJUeXBlOworICAgIFVDSEFSCQkJCVNhbml0eTsKKyAgICAvL1VDSEFSCQkJCUVDV01pbiwgRUNXTWF4OworICAgIC8vTUFDX0NTUjlfU1RSVUMJCUNzcjk7CisgICAgVUxPTkcJCQkJTGVuZ3RoID0gMDsKKworCS8vIEZvciBzb21lIDExYSBBUCB3aGljaCBkaWRuJ3QgaGF2ZSBEU19JRSwgd2UgdXNlIHR3byBjb25kaXRpb25zIHRvIGRlY2lkZSB0aGUgY2hhbm5lbAorCS8vCTEuIElmIHRoZSBBUCBpcyAxMW4gZW5hYmxlZCwgdGhlbiBjaGVjayB0aGUgY29udHJvbCBjaGFubmVsLgorCS8vCTIuIElmIHRoZSBBUCBkaWRuJ3QgaGF2ZSBhbnkgaW5mbyBhYm91dCBjaGFubmVsLCB1c2UgdGhlIGNoYW5uZWwgd2UgcmVjZWl2ZWQgdGhpcyBmcmFtZSBhcyB0aGUgY2hhbm5lbC4gKE1heSBpbmFjY3VyYWN5ISEpCisJVUNIQVIJCQlDdHJsQ2hhbm5lbCA9IDA7CisKKyAgICAvLyBBZGQgZm9yIDMgbmVjZXNzYXJ5IEVJRCBmaWVsZCBjaGVjaworICAgIFNhbml0eSA9IDA7CisKKyAgICAqcEF0aW1XaW4gPSAwOworICAgICpwRXJwID0gMDsKKyAgICAqcER0aW1Db3VudCA9IDA7CisgICAgKnBEdGltUGVyaW9kID0gMDsKKyAgICAqcEJjYXN0RmxhZyA9IDA7CisgICAgKnBNZXNzYWdlVG9NZSA9IDA7CisgICAgKnBFeHRSYXRlTGVuID0gMDsKKyAgICAqcENraXBGbGFnID0gMDsJCQkgICAgICAgIC8vIERlZmF1bHQgb2YgQ2tpcEZsYWcgaXMgMAorICAgICpwQWlyb25ldENlbGxQb3dlckxpbWl0ID0gMHhGRjsgIC8vIERlZmF1bHQgb2YgQWlyb25ldENlbGxQb3dlckxpbWl0IGlzIDB4RkYKKyAgICAqTGVuZ3RoVklFID0gMDsJCQkJCS8vIFNldCB0aGUgbGVuZ3RoIG9mIFZJRSB0byBpbml0IHZhbHVlIDAKKyAgICAqcEh0Q2FwYWJpbGl0eUxlbiA9IDA7CQkJCQkvLyBTZXQgdGhlIGxlbmd0aCBvZiBWSUUgdG8gaW5pdCB2YWx1ZSAwCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCisJCSpwUHJlTkh0Q2FwYWJpbGl0eUxlbiA9IDA7CQkJCQkvLyBTZXQgdGhlIGxlbmd0aCBvZiBWSUUgdG8gaW5pdCB2YWx1ZSAwCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgKkFkZEh0SW5mb0xlbiA9IDA7CQkJCQkvLyBTZXQgdGhlIGxlbmd0aCBvZiBWSUUgdG8gaW5pdCB2YWx1ZSAwCisgICAgKnBSYWxpbmtJZSA9IDA7CisgICAgKnBOZXdDaGFubmVsID0gMDsKKyAgICAqTmV3RXh0Q2hhbm5lbE9mZnNldCA9IDB4ZmY7CS8vRGVmYXVsdCAweGZmIG1lYW5zIG5vIHN1Y2ggSUUKKyAgICBwQ2ZQYXJtLT5iVmFsaWQgPSBGQUxTRTsgICAgICAgIC8vIGRlZmF1bHQ6IG5vIElFX0NGIGZvdW5kCisgICAgcFFic3NMb2FkLT5iVmFsaWQgPSBGQUxTRTsgICAgICAvLyBkZWZhdWx0OiBubyBJRV9RQlNTX0xPQUQgZm91bmQKKyAgICBwRWRjYVBhcm0tPmJWYWxpZCA9IEZBTFNFOyAgICAgIC8vIGRlZmF1bHQ6IG5vIElFX0VEQ0FfUEFSQU1FVEVSIGZvdW5kCisgICAgcFFvc0NhcGFiaWxpdHktPmJWYWxpZCA9IEZBTFNFOyAvLyBkZWZhdWx0OiBubyBJRV9RT1NfQ0FQQUJJTElUWSBmb3VuZAorCisgICAgcEZyYW1lID0gKFBGUkFNRV84MDJfMTEpTXNnOworCisgICAgLy8gZ2V0IHN1YnR5cGUgZnJvbSBoZWFkZXIKKyAgICBTdWJUeXBlID0gKFVDSEFSKXBGcmFtZS0+SGRyLkZDLlN1YlR5cGU7CisKKyAgICAvLyBnZXQgQWRkcjIgYW5kIEJTU0lEIGZyb20gaGVhZGVyCisgICAgQ09QWV9NQUNfQUREUihwQWRkcjIsIHBGcmFtZS0+SGRyLkFkZHIyKTsKKyAgICBDT1BZX01BQ19BRERSKHBCc3NpZCwgcEZyYW1lLT5IZHIuQWRkcjMpOworCisvLwloZXhfZHVtcCgiQmVhY29uIiwgTXNnLCBNc2dMZW4pOworCisgICAgUHRyID0gcEZyYW1lLT5PY3RldDsKKyAgICBMZW5ndGggKz0gTEVOR1RIXzgwMl8xMTsKKworICAgIC8vIGdldCB0aW1lc3RhbXAgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocFRpbWVzdGFtcCwgUHRyLCBUSU1FU1RBTVBfTEVOKTsKKworCXBUaW1lc3RhbXAtPnUuTG93UGFydCA9IGNwdTJsZTMyKHBUaW1lc3RhbXAtPnUuTG93UGFydCk7CisJcFRpbWVzdGFtcC0+dS5IaWdoUGFydCA9IGNwdTJsZTMyKHBUaW1lc3RhbXAtPnUuSGlnaFBhcnQpOworCisgICAgUHRyICs9IFRJTUVTVEFNUF9MRU47CisgICAgTGVuZ3RoICs9IFRJTUVTVEFNUF9MRU47CisKKyAgICAvLyBnZXQgYmVhY29uIGludGVydmFsIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIE5kaXNNb3ZlTWVtb3J5KHBCZWFjb25QZXJpb2QsIFB0ciwgMik7CisgICAgUHRyICs9IDI7CisgICAgTGVuZ3RoICs9IDI7CisKKyAgICAvLyBnZXQgY2FwYWJpbGl0eSBpbmZvIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIE5kaXNNb3ZlTWVtb3J5KHBDYXBhYmlsaXR5SW5mbywgUHRyLCAyKTsKKyAgICBQdHIgKz0gMjsKKyAgICBMZW5ndGggKz0gMjsKKworICAgIGlmIChDQVBfSVNfRVNTX09OKCpwQ2FwYWJpbGl0eUluZm8pKQorICAgICAgICAqcEJzc1R5cGUgPSBCU1NfSU5GUkE7CisgICAgZWxzZQorICAgICAgICAqcEJzc1R5cGUgPSBCU1NfQURIT0M7CisKKyAgICBwRWlkID0gKFBFSURfU1RSVUNUKSBQdHI7CisKKyAgICAvLyBnZXQgdmFyaWFibGUgZmllbGRzIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIHdoaWxlICgoTGVuZ3RoICsgMiArIHBFaWQtPkxlbikgPD0gTXNnTGVuKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gU2VjdXJlIGNvcHkgVklFIHRvIFZhcklFW01BWF9WSUVfTEVOXSBkaWRuJ3Qgb3ZlcmZsb3cuCisgICAgICAgIC8vCisgICAgICAgIGlmICgoKkxlbmd0aFZJRSArIHBFaWQtPkxlbiArIDIpID49IE1BWF9WSUVfTEVOKQorICAgICAgICB7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIFZhcmlhYmxlIElFcyBvdXQgb2YgcmVzb3VyY2UgW2xlbig9JWQpID4gTUFYX1ZJRV9MRU4oPSVkKV1cbiIsCisgICAgICAgICAgICAgICAgICAgICgqTGVuZ3RoVklFICsgcEVpZC0+TGVuICsgMiksIE1BWF9WSUVfTEVOKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaChwRWlkLT5FaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgSUVfU1NJRDoKKyAgICAgICAgICAgICAgICAvLyBBbHJlYWR5IGhhcyBvbmUgU1NJRCBFSUQgaW4gdGhpcyBiZWFjb24sIGlnbm9yZSB0aGUgc2Vjb25kIG9uZQorICAgICAgICAgICAgICAgIGlmIChTYW5pdHkgJiAweDEpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmKHBFaWQtPkxlbiA8PSBNQVhfTEVOX09GX1NTSUQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShTc2lkLCBwRWlkLT5PY3RldCwgcEVpZC0+TGVuKTsKKyAgICAgICAgICAgICAgICAgICAgKnBTc2lkTGVuID0gcEVpZC0+TGVuOworICAgICAgICAgICAgICAgICAgICBTYW5pdHkgfD0gMHgxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkgLSB3cm9uZyBJRV9TU0lEIChsZW49JWQpXG4iLHBFaWQtPkxlbikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIElFX1NVUFBfUkFURVM6CisgICAgICAgICAgICAgICAgaWYocEVpZC0+TGVuIDw9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU2FuaXR5IHw9IDB4MjsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoU3VwUmF0ZSwgcEVpZC0+T2N0ZXQsIHBFaWQtPkxlbik7CisgICAgICAgICAgICAgICAgICAgICpwU3VwUmF0ZUxlbiA9IHBFaWQtPkxlbjsKKworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiAyMDA0LTA5LTE0IG5vdCBhIGdvb2QgZGVzaWduIGhlcmUsIGNhdXNlIGl0IGV4Y2x1ZGUgZXh0cmEgcmF0ZXMKKyAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBTY2FuVGFiLiBXZSBzaG91bGQgcmVwb3J0IGFzIGlzLiBBbmQgZmlsdGVyIG91dCB1bnN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAvLyByYXRlcyBpbiBNbG1lQXV4LgorICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBhZ2FpbnN0IHRoZSBzdXBwb3J0ZWQgcmF0ZXMKKyAgICAgICAgICAgICAgICAgICAgLy8gUlRNUENoZWNrUmF0ZXMocEFkLCBTdXBSYXRlLCBwU3VwUmF0ZUxlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX1NVUFBfUkFURVMgKGxlbj0lZClcbiIscEVpZC0+TGVuKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgSUVfSFRfQ0FQOgorCQkJaWYgKHBFaWQtPkxlbiA+PSBTSVpFX0hUX0NBUF9JRSkgIC8vTm90ZTogYWxsb3cgZXh0ZW5zaW9uLiEhCisJCQl7CisJCQkJTmRpc01vdmVNZW1vcnkocEh0Q2FwYWJpbGl0eSwgcEVpZC0+T2N0ZXQsIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisJCQkJKnBIdENhcGFiaWxpdHlMZW4gPSBTSVpFX0hUX0NBUF9JRTsJLy8gTm5vdyB3ZSBvbmx5IHN1cHBvcnQgMjYgYnl0ZXMuCisKKwkJCQkqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8pKTsKKwkJCQkqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8pKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJeworCQkJCQkqcFByZU5IdENhcGFiaWxpdHlMZW4gPSAwOwkvLyBObm93IHdlIG9ubHkgc3VwcG9ydCAyNiBieXRlcy4KKworCQkJCQlQdHIgPSAoUFVDSEFSKSBwVklFOworCQkJCQlOZGlzTW92ZU1lbW9yeShQdHIgKyAqTGVuZ3RoVklFLCAmcEVpZC0+RWlkLCBwRWlkLT5MZW4gKyAyKTsKKwkJCQkJKkxlbmd0aFZJRSArPSAocEVpZC0+TGVuICsgMik7CisJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckJlYWNvbkFuZFByb2JlUnNwU2FuaXR5IC0gd3JvbmcgSUVfSFRfQ0FQLiBwRWlkLT5MZW4gPSAlZFxuIiwgcEVpZC0+TGVuKSk7CisJCQl9CisKKwkJYnJlYWs7CisgICAgICAgICAgICBjYXNlIElFX0FERF9IVDoKKwkJCWlmIChwRWlkLT5MZW4gPj0gc2l6ZW9mKEFERF9IVF9JTkZPX0lFKSkKKwkJCXsKKwkJCQkvLyBUaGlzIElFIGFsbG93cyBleHRlbnNpb24sIGJ1dCB3ZSBjYW4gaWdub3JlIGV4dHJhIGJ5dGVzIGJleW9uZCBvdXIga25vd2xlZGdlICwgc28gb25seQorCQkJCS8vIGNvcHkgZmlyc3Qgc2l6ZW9mKEFERF9IVF9JTkZPX0lFKQorCQkJCU5kaXNNb3ZlTWVtb3J5KEFkZEh0SW5mbywgcEVpZC0+T2N0ZXQsIHNpemVvZihBRERfSFRfSU5GT19JRSkpOworCQkJCSpBZGRIdEluZm9MZW4gPSBTSVpFX0FERF9IVF9JTkZPX0lFOworCisJCQkJQ3RybENoYW5uZWwgPSBBZGRIdEluZm8tPkNvbnRyb2xDaGFuOworCisJCQkJKihVU0hPUlQgKikoJkFkZEh0SW5mby0+QWRkSHRJbmZvMikgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmQWRkSHRJbmZvLT5BZGRIdEluZm8yKSk7CisJCQkJKihVU0hPUlQgKikoJkFkZEh0SW5mby0+QWRkSHRJbmZvMykgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmQWRkSHRJbmZvLT5BZGRIdEluZm8zKSk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCXsKKwkJCSAgICAgICAgICAgICAgICBQdHIgPSAoUFVDSEFSKSBwVklFOworCQkJICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KFB0ciArICpMZW5ndGhWSUUsICZwRWlkLT5FaWQsIHBFaWQtPkxlbiArIDIpOworCQkJICAgICAgICAgICAgICAgICpMZW5ndGhWSUUgKz0gKHBFaWQtPkxlbiArIDIpOworCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX0FERF9IVC4gXG4iKSk7CisJCQl9CisKKwkJYnJlYWs7CisgICAgICAgICAgICBjYXNlIElFX1NFQ09OREFSWV9DSF9PRkZTRVQ6CisJCQlpZiAocEVpZC0+TGVuID09IDEpCisJCQl7CisJCQkJKk5ld0V4dENoYW5uZWxPZmZzZXQgPSBwRWlkLT5PY3RldFswXTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX1NFQ09OREFSWV9DSF9PRkZTRVQuIFxuIikpOworCQkJfQorCisJCWJyZWFrOworICAgICAgICAgICAgY2FzZSBJRV9GSF9QQVJNOgorICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eShJRV9GSF9QQVJNKSBcbiIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBJRV9EU19QQVJNOgorICAgICAgICAgICAgICAgIGlmKHBFaWQtPkxlbiA9PSAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBDaGFubmVsID0gKnBFaWQtPk9jdGV0OworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCQl7CisJCQkJCQlpZiAoQ2hhbm5lbFNhbml0eShwQWQsICpwQ2hhbm5lbCkgPT0gMCkKKwkJCQkJCXsKKworCQkJCQkJCXJldHVybiBGQUxTRTsKKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworICAgICAgICAgICAgICAgICAgICBTYW5pdHkgfD0gMHg0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkgLSB3cm9uZyBJRV9EU19QQVJNIChsZW49JWQpXG4iLHBFaWQtPkxlbikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIElFX0NGX1BBUk06CisgICAgICAgICAgICAgICAgaWYocEVpZC0+TGVuID09IDYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQ2ZQYXJtLT5iVmFsaWQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBwQ2ZQYXJtLT5DZnBDb3VudCA9IHBFaWQtPk9jdGV0WzBdOworICAgICAgICAgICAgICAgICAgICBwQ2ZQYXJtLT5DZnBQZXJpb2QgPSBwRWlkLT5PY3RldFsxXTsKKyAgICAgICAgICAgICAgICAgICAgcENmUGFybS0+Q2ZwTWF4RHVyYXRpb24gPSBwRWlkLT5PY3RldFsyXSArIDI1NiAqIHBFaWQtPk9jdGV0WzNdOworICAgICAgICAgICAgICAgICAgICBwQ2ZQYXJtLT5DZnBEdXJSZW1haW5pbmcgPSBwRWlkLT5PY3RldFs0XSArIDI1NiAqIHBFaWQtPk9jdGV0WzVdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkgLSB3cm9uZyBJRV9DRl9QQVJNXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgSUVfSUJTU19QQVJNOgorICAgICAgICAgICAgICAgIGlmKHBFaWQtPkxlbiA9PSAyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEF0aW1XaW4sIHBFaWQtPk9jdGV0LCBwRWlkLT5MZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkgLSB3cm9uZyBJRV9JQlNTX1BBUk1cbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgICAgICAgICAgY2FzZSBJRV9USU06CisgICAgICAgICAgICAgICAgaWYoSU5GUkFfT04ocEFkKSAmJiBTdWJUeXBlID09IFNVQlRZUEVfQkVBQ09OKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR2V0VGltQml0KChQVUNIQVIpcEVpZCwgcEFkLT5TdGFBY3RpdmUuQWlkLCAmVGltTGVuLCBwQmNhc3RGbGFnLCBwRHRpbUNvdW50LCBwRHRpbVBlcmlvZCwgcE1lc3NhZ2VUb01lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgICAgICAgICBjYXNlIElFX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVDoKKyAgICAgICAgICAgICAgICBpZihwRWlkLT5MZW4gPT0gMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgCSpwTmV3Q2hhbm5lbCA9IHBFaWQtPk9jdGV0WzFdOwkvL2V4dHJhY3QgbmV3IGNoYW5uZWwgbnVtYmVyCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyBOZXcgZm9yIFdQQQorICAgICAgICAgICAgLy8gQ0NYIHYyIGhhcyB0aGUgc2FtZSBJRSwgd2UgbmVlZCB0byBwYXJzZSB0aGF0IHRvbworICAgICAgICAgICAgLy8gV2lmaSBXTU0gdXNlIHRoZSBzYW1lIElFIHZhbGUsIG5lZWQgdG8gcGFyc2UgdGhhdCB0b28KKyAgICAgICAgICAgIC8vIGNhc2UgSUVfV1BBOgorICAgICAgICAgICAgY2FzZSBJRV9WRU5ET1JfU1BFQ0lGSUM6CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgQnJvYWRjb20vQXRoZXJvcyA4MDIuMTFuIE9VSSB2ZXJzaW9uLCBmb3IgSFQgQ2FwYWJpbGl0eSBJRS4KKyAgICAgICAgICAgICAgICAvLyBUaGlzIEhUIElFIGlzIGJlZm9yZSBJRUVFIGRyYWZ0IHNldCBIVCBJRSB2YWx1ZS4yMDA2LTA5LTI4IGJ5IEphbi4KKyAgICAgICAgICAgICAgICAvKmlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIEJST0FEQ09NX09VSSwgMykgJiYgKHBFaWQtPkxlbiA+PSA0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgCWlmICgocEVpZC0+T2N0ZXRbM10gPT0gT1VJX0JST0FEQ09NX0hUKSAmJiAocEVpZC0+TGVuID49IDMwKSkKKyAgICAgICAgICAgIAkJeworCQkJCXsKKwkJCQkJTmRpc01vdmVNZW1vcnkocEh0Q2FwYWJpbGl0eSwgJnBFaWQtPk9jdGV0WzRdLCBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSkpOworCQkJCQkqcEh0Q2FwYWJpbGl0eUxlbiA9IFNJWkVfSFRfQ0FQX0lFOwkvLyBObm93IHdlIG9ubHkgc3VwcG9ydCAyNiBieXRlcy4KKwkJCQl9CisgICAgICAgICAJCX0KKyAgICAgICAgICAgICAgICAJaWYgKChwRWlkLT5PY3RldFszXSA9PSBPVUlfQlJPQURDT01fSFQpICYmIChwRWlkLT5MZW4gPj0gMjYpKQorICAgICAgICAgICAgCQl7CisJCQkJeworCQkJCQlOZGlzTW92ZU1lbW9yeShBZGRIdEluZm8sICZwRWlkLT5PY3RldFs0XSwgc2l6ZW9mKEFERF9IVF9JTkZPX0lFKSk7CisJCQkJCSpBZGRIdEluZm9MZW4gPSBTSVpFX0FERF9IVF9JTkZPX0lFOwkvLyBObm93IHdlIG9ubHkgc3VwcG9ydCAyNiBieXRlcy4KKwkJCQl9CisgICAgICAgICAJCX0KKyAgICAgICAgICAgICAgICB9CisJCQkJKi8KKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGUgT1VJIHZlcnNpb24sIGZpbHRlciBvdXQgbm9uLXN0YW5kYXJkIHVzYWdlCisgICAgICAgICAgICAgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgUkFMSU5LX09VSSwgMykgJiYgKHBFaWQtPkxlbiA9PSA3KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vKnBSYWxpbmtJZSA9IHBFaWQtPk9jdGV0WzNdOworICAgICAgICAgICAgICAgICAgICBpZiAocEVpZC0+T2N0ZXRbM10gIT0gMCkKKyAgICAgICAgCQkJCSpwUmFsaW5rSWUgPSBwRWlkLT5PY3RldFszXTsKKyAgICAgICAgCQkJZWxzZQorICAgICAgICAJCQkJKnBSYWxpbmtJZSA9IDB4ZjAwMDAwMDA7IC8vIFNldCB0byBub24temVybyB2YWx1ZSAoY2FuJ3Qgc2V0IGJpdDAtMikgdG8gcmVwcmVzZW50IHRoaXMgaXMgUmFsaW5rIENoaXAuIFNvIGF0IGxpbmt1cCwgd2Ugd2lsbCBzZXQgcmFsaW5rY2hpcCBmbGFnLgorICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJLy8gVGhpcyBIVCBJRSBpcyBiZWZvcmUgSUVFRSBkcmFmdCBzZXQgSFQgSUUgdmFsdWUuMjAwNi0wOS0yOCBieSBKYW4uCisKKyAgICAgICAgICAgICAgICAvLyBPdGhlciB2ZW5kb3JzIGhhZCBwcm9kdWN0aW9uIGJlZm9yZSBJRV9IVF9DQVAgdmFsdWUgaXMgYXNzaWduZWQuIFRvIGJhY2t3YXJkIHN1cHBvcnQgdGhvc2Ugb2xkLWZpcm13YXJlIEFQLAorICAgICAgICAgICAgICAgIC8vIENoZWNrIGJyb2FkY29tLWRlZmllbmQgcHJlLTgwMi4xMW5EMS4wIE9VSSBmb3IgSFQgcmVsYXRlZCBJRSwgaW5jbHVkaW5nIEhUIENhcGF0aWxpdGllcyBJRSBhbmQgSFQgSW5mb3JtYXRpb24gSUUKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgoKnBIdENhcGFiaWxpdHlMZW4gPT0gMCkgJiYgTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBQUkVfTl9IVF9PVUksIDMpICYmIChwRWlkLT5MZW4gPj0gNCkgJiYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChwRWlkLT5PY3RldFszXSA9PSBPVUlfUFJFTl9IVF9DQVApICYmIChwRWlkLT5MZW4gPj0gMzApICYmICgqcEh0Q2FwYWJpbGl0eUxlbiA9PSAwKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEh0Q2FwYWJpbGl0eSwgJnBFaWQtPk9jdGV0WzRdLCBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSkpOworICAgICAgICAgICAgICAgICAgICAgICAgKnBQcmVOSHRDYXBhYmlsaXR5TGVuID0gU0laRV9IVF9DQVBfSUU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoKHBFaWQtPk9jdGV0WzNdID09IE9VSV9QUkVOX0FERF9IVCkgJiYgKHBFaWQtPkxlbiA+PSAyNikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KEFkZEh0SW5mbywgJnBFaWQtPk9jdGV0WzRdLCBzaXplb2YoQUREX0hUX0lORk9fSUUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpBZGRIdEluZm9MZW4gPSBTSVpFX0FERF9IVF9JTkZPX0lFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworICAgICAgICAgICAgICAgIGVsc2UgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgV1BBX09VSSwgNCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBDb3B5IHRvIHBWSUUgd2hpY2ggd2lsbCByZXBvcnQgdG8gbWljcm9zb2Z0IGJzc2lkIGxpc3QuCisgICAgICAgICAgICAgICAgICAgIFB0ciA9IChQVUNIQVIpIHBWSUU7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KFB0ciArICpMZW5ndGhWSUUsICZwRWlkLT5FaWQsIHBFaWQtPkxlbiArIDIpOworICAgICAgICAgICAgICAgICAgICAqTGVuZ3RoVklFICs9IChwRWlkLT5MZW4gKyAyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBXTUVfUEFSTV9FTEVNLCA2KSAmJiAocEVpZC0+TGVuID09IDI0KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFBVQ0hBUiBwdHI7CisgICAgICAgICAgICAgICAgICAgIGludCBpOworCisgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNpbmcgRURDQSBwYXJhbWV0ZXJzCisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YlZhbGlkICAgICAgICAgID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iUUFjayAgICAgICAgICAgPSBGQUxTRTsgLy8gcEVpZC0+T2N0ZXRbMF0gJiAweDEwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJRdWV1ZVJlcXVlc3QgICA9IEZBTFNFOyAvLyBwRWlkLT5PY3RldFswXSAmIDB4MjA7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YlR4b3BSZXF1ZXN0ICAgID0gRkFMU0U7IC8vIHBFaWQtPk9jdGV0WzBdICYgMHg0MDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5FZGNhVXBkYXRlQ291bnQgPSBwRWlkLT5PY3RldFs2XSAmIDB4MGY7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YkFQU0RDYXBhYmxlICAgID0gKHBFaWQtPk9jdGV0WzZdICYgMHg4MCkgPyAxIDogMDsKKyAgICAgICAgICAgICAgICAgICAgcHRyID0gJnBFaWQtPk9jdGV0WzhdOworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSIGFjaSA9ICgqcHRyICYgMHg2MCkgPj4gNTsgLy8gYjV+NiBpcyBBQyBJTkRFWAorICAgICAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iQUNNW2FjaV0gID0gKCgoKnB0cikgJiAweDEwKSA9PSAweDEwKTsgICAvLyBiNSBpcyBBQ00KKyAgICAgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+QWlmc25bYWNpXSA9ICgqcHRyKSAmIDB4MGY7ICAgICAgICAgICAgICAgLy8gYjB+MyBpcyBBSUZTTgorICAgICAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5Dd21pblthY2ldID0gKihwdHIrMSkgJiAweDBmOyAgICAgICAgICAgICAvLyBiMH40IGlzIEN3bWluCisgICAgICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWF4W2FjaV0gPSAqKHB0cisxKSA+PiA0OyAgICAgICAgICAgICAgIC8vIGI1fjggaXMgQ3dtYXgKKyAgICAgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+VHhvcFthY2ldICA9ICoocHRyKzIpICsgMjU2ICogKCoocHRyKzMpKTsgLy8gaW4gdW5pdCBvZiAzMi11cworICAgICAgICAgICAgICAgICAgICAgICAgcHRyICs9IDQ7IC8vIHBvaW50IHRvIG5leHQgQUMKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdNRV9JTkZPX0VMRU0sIDYpICYmIChwRWlkLT5MZW4gPT0gNykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBwYXJzaW5nIEVEQ0EgcGFyYW1ldGVycworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJWYWxpZCAgICAgICAgICA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YlFBY2sgICAgICAgICAgID0gRkFMU0U7IC8vIHBFaWQtPk9jdGV0WzBdICYgMHgxMDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iUXVldWVSZXF1ZXN0ICAgPSBGQUxTRTsgLy8gcEVpZC0+T2N0ZXRbMF0gJiAweDIwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJUeG9wUmVxdWVzdCAgICA9IEZBTFNFOyAvLyBwRWlkLT5PY3RldFswXSAmIDB4NDA7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+RWRjYVVwZGF0ZUNvdW50ID0gcEVpZC0+T2N0ZXRbNl0gJiAweDBmOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJBUFNEQ2FwYWJsZSAgICA9IChwRWlkLT5PY3RldFs2XSAmIDB4ODApID8gMSA6IDA7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGRlZmF1bHQgRURDQSBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iQUNNW1FJRF9BQ19CRV0gID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfQkVdID0gMzsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfQkVdID0gQ1dfTUlOX0lOX0JJVFM7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX0JFXSA9IENXX01BWF9JTl9CSVRTOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX0JFXSAgPSAwOworCisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YkFDTVtRSURfQUNfQktdICA9IDA7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+QWlmc25bUUlEX0FDX0JLXSA9IDc7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX0JLXSA9IENXX01JTl9JTl9CSVRTOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19CS10gPSBDV19NQVhfSU5fQklUUzsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19CS10gID0gMDsKKworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJBQ01bUUlEX0FDX1ZJXSAgPSAwOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WSV0gPSAyOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19WSV0gPSBDV19NSU5fSU5fQklUUy0xOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19WSV0gPSBDV19NQVhfSU5fQklUUzsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19WSV0gID0gOTY7ICAgLy8gQUNfVkk6IDk2KjMydXMgfj0gM21zCisKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iQUNNW1FJRF9BQ19WT10gID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVk9dID0gMjsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfVk9dID0gQ1dfTUlOX0lOX0JJVFMtMjsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfVk9dID0gQ1dfTUFYX0lOX0JJVFMtMTsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19WT10gID0gNDg7ICAgLy8gQUNfVk86IDQ4KjMydXMgfj0gMS41bXMKKyAgICAgICAgICAgICAgICB9CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBJRV9FWFRfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgICAgICBpZiAocEVpZC0+TGVuIDw9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoRXh0UmF0ZSwgcEVpZC0+T2N0ZXQsIHBFaWQtPkxlbik7CisgICAgICAgICAgICAgICAgICAgICpwRXh0UmF0ZUxlbiA9IHBFaWQtPkxlbjsKKworICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiAyMDA0LTA5LTE0IG5vdCBhIGdvb2QgZGVzaWduIGhlcmUsIGNhdXNlIGl0IGV4Y2x1ZGUgZXh0cmEgcmF0ZXMKKyAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBTY2FuVGFiLiBXZSBzaG91bGQgcmVwb3J0IGFzIGlzLiBBbmQgZmlsdGVyIG91dCB1bnN1cHBvcnRlZAorICAgICAgICAgICAgICAgICAgICAvLyByYXRlcyBpbiBNbG1lQXV4LgorICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBhZ2FpbnN0IHRoZSBzdXBwb3J0ZWQgcmF0ZXMKKyAgICAgICAgICAgICAgICAgICAgLy8gUlRNUENoZWNrUmF0ZXMocEFkLCBFeHRSYXRlLCBwRXh0UmF0ZUxlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIElFX0VSUDoKKyAgICAgICAgICAgICAgICBpZiAocEVpZC0+TGVuID09IDEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcEVycCA9IChVQ0hBUilwRWlkLT5PY3RldFswXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgSUVfQUlST05FVF9DS0lQOgorICAgICAgICAgICAgICAgIC8vIDAuIENoZWNrIEFpcm9uZXQgSUUgbGVuZ3RoLCBpdCBtdXN0IGJlIGxhcmdlciBvciBlcXVhbCB0byAyOAorICAgICAgICAgICAgICAgIC8vIENpc2NvIEFQMzUwIHVzZWQgbGVuZ3RoIGFzIDI4CisgICAgICAgICAgICAgICAgLy8gQ2lzY28gQVAxMlhYIHVzZWQgbGVuZ3RoIGFzIDMwCisgICAgICAgICAgICAgICAgaWYgKHBFaWQtPkxlbiA8IChDS0lQX05FR09USUFUSU9OX0xFTkdUSCAtIDIpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIDEuIENvcHkgQ0tJUCBmbGFnIGJ5dGUgdG8gYnVmZmVyIGZvciBwcm9jZXNzCisgICAgICAgICAgICAgICAgKnBDa2lwRmxhZyA9ICoocEVpZC0+T2N0ZXQgKyA4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBJRV9BUF9UWF9QT1dFUjoKKyAgICAgICAgICAgICAgICAvLyBBUCBDb250cm9sIG9mIENsaWVudCBUcmFuc21pdCBQb3dlcgorICAgICAgICAgICAgICAgIC8vMC4gQ2hlY2sgQWlyb25ldCBJRSBsZW5ndGgsIGl0IG11c3QgYmUgNgorICAgICAgICAgICAgICAgIGlmIChwRWlkLT5MZW4gIT0gMHgwNikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgY2VsbCBwb3dlciBsaW1pdCBpbiBkQm0KKyAgICAgICAgICAgICAgICBpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBDSVNDT19PVUksIDMpID09IDEpCisgICAgICAgICAgICAgICAgICAgICpwQWlyb25ldENlbGxQb3dlckxpbWl0ID0gKihwRWlkLT5PY3RldCArIDQpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyBXUEEyICYgODAyLjExaSBSU04KKyAgICAgICAgICAgIGNhc2UgSUVfUlNOOgorICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIE9VSSBmb3IgdmVyc2lvbiBhbnltb3JlLCBjaGVjayB0aGUgZ3JvdXAgY2lwaGVyIE9VSSBiZWZvcmUgY29weWluZworICAgICAgICAgICAgICAgIGlmIChSVE1QRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQgKyAyLCBSU05fT1VJLCAzKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvcHkgdG8gcFZJRSB3aGljaCB3aWxsIHJlcG9ydCB0byBtaWNyb3NvZnQgYnNzaWQgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgUHRyID0gKFBVQ0hBUikgcFZJRTsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoUHRyICsgKkxlbmd0aFZJRSwgJnBFaWQtPkVpZCwgcEVpZC0+TGVuICsgMik7CisgICAgICAgICAgICAgICAgICAgICpMZW5ndGhWSUUgKz0gKHBFaWQtPkxlbiArIDIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJCQljYXNlIElFX0NPVU5UUlk6CisJCQkJUHRyID0gKFBVQ0hBUikgcFZJRTsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShQdHIgKyAqTGVuZ3RoVklFLCAmcEVpZC0+RWlkLCBwRWlkLT5MZW4gKyAyKTsKKyAgICAgICAgICAgICAgICAqTGVuZ3RoVklFICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQlicmVhazsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgTGVuZ3RoID0gTGVuZ3RoICsgMiArIHBFaWQtPkxlbjsgIC8vIEVpZFsxXSArIExlblsxXSsgY29udGVudFtMZW5dCisgICAgICAgIHBFaWQgPSAoUEVJRF9TVFJVQ1QpKChVQ0hBUiopcEVpZCArIDIgKyBwRWlkLT5MZW4pOworICAgIH0KKworICAgIC8vIEZvciBzb21lIDExYSBBUC4gaXQgZGlkIG5vdCBoYXZlIHRoZSBjaGFubmVsIEVJRCwgcGF0Y2ggaGVyZQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlVQ0hBUiBMYXRjaFJmQ2hhbm5lbCA9IE1zZ0NoYW5uZWw7CisJCWlmICgocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID4gMTQpICYmICgoU2FuaXR5ICYgMHg0KSA9PSAwKSkKKwkJeworCQkJaWYgKEN0cmxDaGFubmVsICE9IDApCisJCQkJKnBDaGFubmVsID0gQ3RybENoYW5uZWw7CisJCQllbHNlCisJCQkJKnBDaGFubmVsID0gTGF0Y2hSZkNoYW5uZWw7CisJCQlTYW5pdHkgfD0gMHg0OworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJaWYgKFNhbml0eSAhPSAweDcpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIG1pc3NpbmcgZmllbGQsIFNhbml0eT0weCUwMnhcbiIsIFNhbml0eSkpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBUUlVFOworCX0KKworfQorCisjaWZkZWYgRE9UMTFOX0RSQUZUMworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrIGZvciBzb21lIElFIGFkZHJlc3NlZCAgaW4gODAyLjExbiBkMy4wMy4KKwlSZXR1cm46CisJCVRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFZPSUQgKk1zZywKKwlJTiBVTE9ORyBNc2dMZW4sCisJT1VUIFVDSEFSIAkqUmVnQ2xhc3MpCit7CisJQ0hBUgkJCQkqUHRyOworCVBGUkFNRV84MDJfMTEJCXBGcmFtZTsKKwlQRUlEX1NUUlVDVAkJCXBFaWQ7CisJVUxPTkcJCQkJTGVuZ3RoID0gMDsKKworCXBGcmFtZSA9IChQRlJBTUVfODAyXzExKU1zZzsKKworCSpSZWdDbGFzcyA9IDA7CisJUHRyID0gcEZyYW1lLT5PY3RldDsKKwlMZW5ndGggKz0gTEVOR1RIXzgwMl8xMTsKKworCS8vIGdldCB0aW1lc3RhbXAgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisJUHRyICs9IFRJTUVTVEFNUF9MRU47CisJTGVuZ3RoICs9IFRJTUVTVEFNUF9MRU47CisKKwkvLyBnZXQgYmVhY29uIGludGVydmFsIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorCVB0ciArPSAyOworCUxlbmd0aCArPSAyOworCisJLy8gZ2V0IGNhcGFiaWxpdHkgaW5mbyBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKwlQdHIgKz0gMjsKKwlMZW5ndGggKz0gMjsKKworCXBFaWQgPSAoUEVJRF9TVFJVQ1QpIFB0cjsKKworCS8vIGdldCB2YXJpYWJsZSBmaWVsZHMgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisJd2hpbGUgKChMZW5ndGggKyAyICsgcEVpZC0+TGVuKSA8PSBNc2dMZW4pCisJeworCQlzd2l0Y2gocEVpZC0+RWlkKQorCQl7CisJCQljYXNlIElFX1NVUFBfUkVHX0NMQVNTOgorCQkJCWlmKHBFaWQtPkxlbiA+IDApCisJCQkJeworCQkJCQkqUmVnQ2xhc3MgPSAqcEVpZC0+T2N0ZXQ7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSAtIHdyb25nIElFX1NTSUQgKGxlbj0lZClcbiIscEVpZC0+TGVuKSk7CisJCQkJCXJldHVybiBGQUxTRTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCX0KKworCQlMZW5ndGggPSBMZW5ndGggKyAyICsgcEVpZC0+TGVuOyAgLy8gRWlkWzFdICsgTGVuWzFdKyBjb250ZW50W0xlbl0KKwkJcEVpZCA9IChQRUlEX1NUUlVDVCkoKFVDSEFSKilwRWlkICsgMiArIHBFaWQtPkxlbik7CisJfQorCisJcmV0dXJuIFRSVUU7CisKK30KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gTWxtZVNjYW5SZXFTYW5pdHkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVk9JRCAqTXNnLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlPVVQgVUNIQVIgKnBCc3NUeXBlLAorCU9VVCBDSEFSIFNzaWRbXSwKKwlPVVQgVUNIQVIgKnBTc2lkTGVuLAorCU9VVCBVQ0hBUiAqcFNjYW5UeXBlKQoreworCU1MTUVfU0NBTl9SRVFfU1RSVUNUICpJbmZvOworCisJSW5mbyA9IChNTE1FX1NDQU5fUkVRX1NUUlVDVCAqKShNc2cpOworCSpwQnNzVHlwZSA9IEluZm8tPkJzc1R5cGU7CisJKnBTc2lkTGVuID0gSW5mby0+U3NpZExlbjsKKwlOZGlzTW92ZU1lbW9yeShTc2lkLCBJbmZvLT5Tc2lkLCAqcFNzaWRMZW4pOworCSpwU2NhblR5cGUgPSBJbmZvLT5TY2FuVHlwZTsKKworCWlmICgoKnBCc3NUeXBlID09IEJTU19JTkZSQSB8fCAqcEJzc1R5cGUgPT0gQlNTX0FESE9DIHx8ICpwQnNzVHlwZSA9PSBCU1NfQU5ZKQorCQkmJiAoKnBTY2FuVHlwZSA9PSBTQ0FOX0FDVElWRSB8fCAqcFNjYW5UeXBlID09IFNDQU5fUEFTU0lWRQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQl8fCAqcFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fUEFTU0lWRSB8fCAqcFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQUNUSVZFCisJCXx8ICpwU2NhblR5cGUgPT0gU0NBTl9DSVNDT19DSEFOTkVMX0xPQUQgfHwgKnBTY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX05PSVNFCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCSkpCisJeworCQlyZXR1cm4gVFJVRTsKKwl9CisJZWxzZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVNjYW5SZXFTYW5pdHkgZmFpbCAtIHdyb25nIEJzc1R5cGUgb3IgU2NhblR5cGVcbiIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KK30KKworLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCitVQ0hBUiBDaGFubmVsU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFVDSEFSIGNoYW5uZWwpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaSArKykKKyAgICB7CisgICAgICAgIGlmIChjaGFubmVsID09IHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBNTE1FIG1lc3NhZ2Ugc2FuaXR5IGNoZWNrCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gUGVlckRlYXV0aFNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyLAorICAgIE9VVCBVU0hPUlQgKnBSZWFzb24pCit7CisgICAgUEZSQU1FXzgwMl8xMSBwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSlNc2c7CisKKyAgICBDT1BZX01BQ19BRERSKHBBZGRyMiwgcEZyYW1lLT5IZHIuQWRkcjIpOworICAgIE5kaXNNb3ZlTWVtb3J5KHBSZWFzb24sICZwRnJhbWUtPk9jdGV0WzBdLCAyKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIE1MTUUgbWVzc2FnZSBzYW5pdHkgY2hlY2sKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBQZWVyQXV0aFNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIsCisgICAgT1VUIFVTSE9SVCAqcEFsZywKKyAgICBPVVQgVVNIT1JUICpwU2VxLAorICAgIE9VVCBVU0hPUlQgKnBTdGF0dXMsCisgICAgQ0hBUiAqcENobGdUZXh0KQoreworICAgIFBGUkFNRV84MDJfMTEgcEZyYW1lID0gKFBGUkFNRV84MDJfMTEpTXNnOworCisgICAgQ09QWV9NQUNfQUREUihwQWRkciwgICBwRnJhbWUtPkhkci5BZGRyMik7CisgICAgTmRpc01vdmVNZW1vcnkocEFsZywgICAgJnBGcmFtZS0+T2N0ZXRbMF0sIDIpOworICAgIE5kaXNNb3ZlTWVtb3J5KHBTZXEsICAgICZwRnJhbWUtPk9jdGV0WzJdLCAyKTsKKyAgICBOZGlzTW92ZU1lbW9yeShwU3RhdHVzLCAmcEZyYW1lLT5PY3RldFs0XSwgMik7CisKKyAgICBpZiAoKCpwQWxnID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCisjaWZkZWYgTEVBUF9TVVBQT1JUCisgICAgICB8fCAoKnBBbGcgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworICAgICAgKQorICAgIHsKKyAgICAgICAgaWYgKCpwU2VxID09IDEgfHwgKnBTZXEgPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQXV0aFNhbml0eSBmYWlsIC0gd3JvbmcgU2VnI1xuIikpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCpwQWxnID09IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkKKyAgICB7CisgICAgICAgIGlmICgqcFNlcSA9PSAxIHx8ICpwU2VxID09IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCpwU2VxID09IDIgfHwgKnBTZXEgPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocENobGdUZXh0LCAmcEZyYW1lLT5PY3RldFs4XSwgQ0lQSEVSX1RFWFRfTEVOKTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckF1dGhTYW5pdHkgZmFpbCAtIHdyb25nIFNlZyNcbiIpKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQXV0aFNhbml0eSBmYWlsIC0gd3JvbmcgYWxnb3JpdGhtXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gTWxtZUF1dGhSZXFTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBBZGRyLAorICAgIE9VVCBVTE9ORyAqcFRpbWVvdXQsCisgICAgT1VUIFVTSE9SVCAqcEFsZykKK3sKKyAgICBNTE1FX0FVVEhfUkVRX1NUUlVDVCAqcEluZm87CisKKyAgICBwSW5mbyAgPSAoTUxNRV9BVVRIX1JFUV9TVFJVQ1QgKilNc2c7CisgICAgQ09QWV9NQUNfQUREUihwQWRkciwgcEluZm8tPkFkZHIpOworICAgICpwVGltZW91dCA9IHBJbmZvLT5UaW1lb3V0OworICAgICpwQWxnID0gcEluZm8tPkFsZzsKKworICAgIGlmICgoKCpwQWxnID09IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkgfHwoKnBBbGcgPT0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbikKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKyAgICAgfHwgKCpwQWxnID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKyAgICAgCSkgJiYKKyAgICAgICAgKCgqcEFkZHIgJiAweDAxKSA9PSAwKSkKKyAgICB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lQXV0aFJlcVNhbml0eSBmYWlsIC0gd3JvbmcgYWxnb3JpdGhtXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIE1sbWVBc3NvY1JlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFwQWRkciwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVMT05HICpwVGltZW91dCwKKyAgICBPVVQgVVNIT1JUICpwTGlzdGVuSW50dikKK3sKKyAgICBNTE1FX0FTU09DX1JFUV9TVFJVQ1QgKnBJbmZvOworCisgICAgcEluZm8gPSAoTUxNRV9BU1NPQ19SRVFfU1RSVUNUICopTXNnOworICAgICpwVGltZW91dCA9IHBJbmZvLT5UaW1lb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGltZW91dAorICAgIENPUFlfTUFDX0FERFIocEFwQWRkciwgcEluZm8tPkFkZHIpOyAgICAgICAgICAgICAgICAgICAvLyBBUCBhZGRyZXNzCisgICAgKnBDYXBhYmlsaXR5SW5mbyA9IHBJbmZvLT5DYXBhYmlsaXR5SW5mbzsgICAgICAgICAgICAgICAvLyBjYXBhYmlsaXR5IGluZm8KKyAgICAqcExpc3RlbkludHYgPSBwSW5mby0+TGlzdGVuSW50djsKKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIE1MTUUgbWVzc2FnZSBzYW5pdHkgY2hlY2sKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBQZWVyRGlzYXNzb2NTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBBZGRyMiwKKyAgICBPVVQgVVNIT1JUICpwUmVhc29uKQoreworICAgIFBGUkFNRV84MDJfMTEgcEZyYW1lID0gKFBGUkFNRV84MDJfMTEpTXNnOworCisgICAgQ09QWV9NQUNfQUREUihwQWRkcjIsIHBGcmFtZS0+SGRyLkFkZHIyKTsKKyAgICBOZGlzTW92ZU1lbW9yeShwUmVhc29uLCAmcEZyYW1lLT5PY3RldFswXSwgMik7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlTYW5pdHkgY2hlY2sgTmV0d29ya1R5cGUgKDExYiwgMTFnIG9yIDExYSkKKworCUFyZ3VtZW50czoKKwkJcEJzcyAtIFBvaW50ZXIgdG8gQlNTIHRhYmxlLgorCisJUmV0dXJuIFZhbHVlOgorICAgICAgICBOZGlzODAyXzExRFMgLi4uLi4uLigxMWIpCisgICAgICAgIE5kaXM4MDJfMTFPRkRNMjQuLi4uKDExZykKKyAgICAgICAgTmRpczgwMl8xMU9GRE01Li4uLi4oMTFhKQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUgTmV0d29ya1R5cGVJblVzZVNhbml0eSgKKyAgICBJTiBQQlNTX0VOVFJZIHBCc3MpCit7CisJTkRJU184MDJfMTFfTkVUV09SS19UWVBFCU5ldFdvcmtUeXBlOworCVVDSEFSCQkJCQkJcmF0ZSwgaTsKKworCU5ldFdvcmtUeXBlID0gTmRpczgwMl8xMURTOworCisJaWYgKHBCc3MtPkNoYW5uZWwgPD0gMTQpCisJeworCQkvLworCQkvLyBGaXJzdCBjaGVjayBzdXBwb3J0IFJhdGUuCisJCS8vCisJCWZvciAoaSA9IDA7IGkgPCBwQnNzLT5TdXBSYXRlTGVuOyBpKyspCisJCXsKKwkJCXJhdGUgPSBwQnNzLT5TdXBSYXRlW2ldICYgMHg3ZjsgLy8gTWFzayBvdXQgYmFzaWMgcmF0ZSBzZXQgYml0CisJCQlpZiAoKHJhdGUgPT0gMikgfHwgKHJhdGUgPT0gNCkgfHwgKHJhdGUgPT0gMTEpIHx8IChyYXRlID09IDIyKSkKKwkJCXsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLworCQkJCS8vIE90aGVyd2lzZSAoZXZlbiByYXRlID4gMTA4KSBtZWFucyBOZGlzODAyXzExT0ZETTI0CisJCQkJLy8KKwkJCQlOZXRXb3JrVHlwZSA9IE5kaXM4MDJfMTFPRkRNMjQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvLworCQkvLyBTZWNvbmQgY2hlY2sgRXh0ZW5kIFJhdGUuCisJCS8vCisJCWlmIChOZXRXb3JrVHlwZSAhPSBOZGlzODAyXzExT0ZETTI0KQorCQl7CisJCQlmb3IgKGkgPSAwOyBpIDwgcEJzcy0+RXh0UmF0ZUxlbjsgaSsrKQorCQkJeworCQkJCXJhdGUgPSBwQnNzLT5TdXBSYXRlW2ldICYgMHg3ZjsgLy8gTWFzayBvdXQgYmFzaWMgcmF0ZSBzZXQgYml0CisJCQkJaWYgKChyYXRlID09IDIpIHx8IChyYXRlID09IDQpIHx8IChyYXRlID09IDExKSB8fCAocmF0ZSA9PSAyMikpCisJCQkJeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy8KKwkJCQkJLy8gT3RoZXJ3aXNlIChldmVuIHJhdGUgPiAxMDgpIG1lYW5zIE5kaXM4MDJfMTFPRkRNMjQKKwkJCQkJLy8KKwkJCQkJTmV0V29ya1R5cGUgPSBOZGlzODAyXzExT0ZETTI0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJTmV0V29ya1R5cGUgPSBOZGlzODAyXzExT0ZETTU7CisJfQorCisgICAgaWYgKHBCc3MtPkh0Q2FwYWJpbGl0eUxlbiAhPSAwKQorICAgIHsKKyAgICAgICAgaWYgKE5ldFdvcmtUeXBlID09IE5kaXM4MDJfMTFPRkRNNSkKKyAgICAgICAgICAgIE5ldFdvcmtUeXBlID0gTmRpczgwMl8xMU9GRE01X047CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIE5ldFdvcmtUeXBlID0gTmRpczgwMl8xMU9GRE0yNF9OOworICAgIH0KKworCXJldHVybiBOZXRXb3JrVHlwZTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBXUEEgbWVzc2FnZSBzYW5pdHkgY2hlY2sKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFBlZXJXcGFNZXNzYWdlU2FuaXR5KAorICAgIElOIAlQUlRNUF9BREFQVEVSIAkJcEFkLAorICAgIElOIAlQRUFQT0xfUEFDS0VUIAkJcE1zZywKKyAgICBJTiAJVUxPTkcgCQkJCU1zZ0xlbiwKKyAgICBJTiAJVUNIQVIJCQkJTXNnVHlwZSwKKyAgICBJTiAJTUFDX1RBQkxFX0VOVFJZICAJKnBFbnRyeSkKK3sKKwlVQ0hBUgkJCW1pY1tMRU5fS0VZX0RFU0NfTUlDXSwgZGlnZXN0WzgwXSwgS0VZREFUQVtNQVhfTEVOX09GX1JTTklFXTsKKwlCT09MRUFOCQkJYlJlcGxheURpZmYgPSBGQUxTRTsKKwlCT09MRUFOCQkJYldQQTIgPSBGQUxTRTsKKwlLRVlfSU5GTwkJRWFwb2xLZXlJbmZvOworCVVDSEFSCQkJR3JvdXBLZXlJbmRleCA9IDA7CisKKworCU5kaXNaZXJvTWVtb3J5KG1pYywgc2l6ZW9mKG1pYykpOworCU5kaXNaZXJvTWVtb3J5KGRpZ2VzdCwgc2l6ZW9mKGRpZ2VzdCkpOworCU5kaXNaZXJvTWVtb3J5KEtFWURBVEEsIHNpemVvZihLRVlEQVRBKSk7CisJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUikmRWFwb2xLZXlJbmZvLCBzaXplb2YoRWFwb2xLZXlJbmZvKSk7CisKKwlOZGlzTW92ZU1lbW9yeSgoUFVDSEFSKSZFYXBvbEtleUluZm8sIChQVUNIQVIpJnBNc2ctPktleURlc2MuS2V5SW5mbywgc2l6ZW9mKEtFWV9JTkZPKSk7CisKKwkqKChVU0hPUlQgKikmRWFwb2xLZXlJbmZvKSA9IGNwdTJsZTE2KCooKFVTSE9SVCAqKSZFYXBvbEtleUluZm8pKTsKKworCS8vIENob29zZSBXUEEyIG9yIG5vdAorCWlmICgocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSkKKwkJYldQQTIgPSBUUlVFOworCisJLy8gMC4gQ2hlY2sgTXNnVHlwZQorCWlmICgoTXNnVHlwZSA+IEVBUE9MX0dST1VQX01TR18yKSB8fCAoTXNnVHlwZSA8IEVBUE9MX1BBSVJfTVNHXzEpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiVGhlIG1lc3NhZ2UgdHlwZSBpcyBpbnZhbGlkKCVkKSEgXG4iLCBNc2dUeXBlKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwkvLyAxLiBSZXBsYXkgY291bnRlciBjaGVjaworIAlpZiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18xIHx8IE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMyB8fCBNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKQkvLyBGb3Igc3VwcGxpY2FudAorICAgIHsKKyAgICAJLy8gRmlyc3QgdmFsaWRhdGUgcmVwbGF5IGNvdW50ZXIsIG9ubHkgYWNjZXB0IG1lc3NhZ2Ugd2l0aCBsYXJnZXIgcmVwbGF5IGNvdW50ZXIuCisJCS8vIExldCBlcXVhbCBwYXNzLCBzb21lIEFQIHN0YXJ0IHdpdGggYWxsIHplcm8gcmVwbGF5IGNvdW50ZXIKKwkJVUNIQVIJWmVyb1JlcGxheVtMRU5fS0VZX0RFU0NfUkVQTEFZXTsKKworICAgICAgICBOZGlzWmVyb01lbW9yeShaZXJvUmVwbGF5LCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKwkJaWYgKChSVE1QQ29tcGFyZU1lbW9yeShwTXNnLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBFbnRyeS0+Ul9Db3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKSAhPSAxKSAmJgorCQkJKFJUTVBDb21wYXJlTWVtb3J5KHBNc2ctPktleURlc2MuUmVwbGF5Q291bnRlciwgWmVyb1JlcGxheSwgTEVOX0tFWV9ERVNDX1JFUExBWSkgIT0gMCkpCisgICAgCXsKKwkJCWJSZXBsYXlEaWZmID0gVFJVRTsKKyAgICAJfQorIAl9CisJZWxzZSBpZiAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18yIHx8IE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfNCB8fCBNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18yKQkvLyBGb3IgYXV0aGVudGljYXRvcgorCXsKKwkJLy8gY2hlY2sgUmVwbGF5IENvdW50ZXIgY29yZXNwb25kcyB0byBNU0cgZnJvbSBhdXRoZW50aWNhdG9yLCBvdGhlcndpc2UgZGlzY2FyZAorICAgIAlpZiAoIU5kaXNFcXVhbE1lbW9yeShwTXNnLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBFbnRyeS0+Ul9Db3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKSkKKyAgICAJeworCQkJYlJlcGxheURpZmYgPSBUUlVFOworICAgIAl9CisJfQorCisJLy8gUmVwbGF5IENvdW50ZXIgZGlmZmVyZW50IGNvbmRpdGlvbgorCWlmIChiUmVwbGF5RGlmZikKKwl7CisJCS8vIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3IgcmVwbGF5IGNvdW50ZXIgZGlmZmVyZW50CisJCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1JFUExBWV9DT1VOVEVSX0RJRkZfRVZFTlRfRkxBRywgcEVudHJ5LT5BZGRyLCBwRW50cnktPmFwaWR4LCAwKTsKKworCQlpZiAoTXNnVHlwZSA8IEVBUE9MX0dST1VQX01TR18xKQorCQl7CisgICAgICAgICAgIAlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSZXBsYXkgQ291bnRlciBEaWZmZXJlbnQgaW4gcGFpcndpc2UgbXNnICVkIG9mIDQtd2F5IGhhbmRzaGFrZSFcbiIsIE1zZ1R5cGUpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJlcGxheSBDb3VudGVyIERpZmZlcmVudCBpbiBncm91cCBtc2cgJWQgb2YgMi13YXkgaGFuZHNoYWtlIVxuIiwgKE1zZ1R5cGUgLSBFQVBPTF9QQUlSX01TR180KSkpOworCQl9CisKKwkJaGV4X2R1bXAoIlJlY2VpdmUgcmVwbGF5IGNvdW50ZXIgIiwgcE1zZy0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKwkJaGV4X2R1bXAoIkN1cnJlbnQgcmVwbGF5IGNvdW50ZXIgIiwgcEVudHJ5LT5SX0NvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworICAgICAgICByZXR1cm4gRkFMU0U7CisJfQorCisJLy8gMi4gVmVyaWZ5IE1JQyBleGNlcHQgUGFpcndpc2UgTXNnMQorCWlmIChNc2dUeXBlICE9IEVBUE9MX1BBSVJfTVNHXzEpCisJeworCQlVQ0hBUgkJCXJjdmRfbWljW0xFTl9LRVlfREVTQ19NSUNdOworCisJCS8vIFJlY29yZCB0aGUgcmVjZWl2ZWQgTUlDIGZvciBjaGVjayBsYXRlcgorCQlOZGlzTW92ZU1lbW9yeShyY3ZkX21pYywgcE1zZy0+S2V5RGVzYy5LZXlNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCQlOZGlzWmVyb01lbW9yeShwTXNnLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisKKyAgICAgICAgaWYgKHBFbnRyeS0+V2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCS8vIFRLSVAKKyAgICAgICAgeworICAgICAgICAgICAgaG1hY19tZDUocEVudHJ5LT5QVEssIExFTl9FQVBfTUlDSywgKFBVQ0hBUilwTXNnLCBNc2dMZW4sIG1pYyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocEVudHJ5LT5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkJLy8gQUVTCisgICAgICAgIHsKKyAgICAgICAgICAgIEhNQUNfU0hBMSgoUFVDSEFSKXBNc2csIE1zZ0xlbiwgcEVudHJ5LT5QVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KG1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghTmRpc0VxdWFsTWVtb3J5KHJjdmRfbWljLCBtaWMsIExFTl9LRVlfREVTQ19NSUMpKQorICAgICAgICB7CisJCQkvLyBzZW5kIHdpcmVsZXNzIGV2ZW50IC0gZm9yIE1JQyBkaWZmZXJlbnQKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwkJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19NSUNfRElGRl9FVkVOVF9GTEFHLCBwRW50cnktPkFkZHIsIHBFbnRyeS0+YXBpZHgsIDApOworCisJCQlpZiAoTXNnVHlwZSA8IEVBUE9MX0dST1VQX01TR18xKQorCQkJeworICAgICAgICAgICAgCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIk1JQyBEaWZmZXJlbnQgaW4gcGFpcndpc2UgbXNnICVkIG9mIDQtd2F5IGhhbmRzaGFrZSFcbiIsIE1zZ1R5cGUpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJNSUMgRGlmZmVyZW50IGluIGdyb3VwIG1zZyAlZCBvZiAyLXdheSBoYW5kc2hha2UhXG4iLCAoTXNnVHlwZSAtIEVBUE9MX1BBSVJfTVNHXzQpKSk7CisJCQl9CisKKwkJCWhleF9kdW1wKCJSZWNlaXZlZCBNSUMiLCByY3ZkX21pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJCQloZXhfZHVtcCgiRGVzaXJlZCAgTUlDIiwgbWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworCQkJcmV0dXJuIEZBTFNFOworICAgICAgICB9CisJfQorCisJLy8gRXh0cmFjdCB0aGUgY29udGV4dCBvZiB0aGUgS2V5IERhdGEgZmllbGQgaWYgaXQgZXhpc3QKKwkvLyBUaGUgZmllbGQgaW4gcGFpcndpc2VfbXNnXzJfV1BBMShXUEEyKSAmIHBhaXJ3aXNlX21zZ18zX1dQQTEgaXMgdW4tZW5jcnlwdGVkLgorCS8vIFRoZSBmaWVsZCBpbiBncm91cF9tc2dfMV9XUEExKFdQQTIpICYgcGFpcndpc2VfbXNnXzNfV1BBMiBpcyBlbmNyeXB0ZWQuCisJaWYgKHBNc2ctPktleURlc2MuS2V5RGF0YUxlblsxXSA+IDApCisJeworCQkvLyBEZWNyeXB0IHRoaXMgZmllbGQKKwkJaWYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMgJiYgYldQQTIpIHx8IChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkKKwkJeworCQkJaWYocEVudHJ5LT5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJCXsKKwkJCQkvLyBBRVMKKwkJCQlBRVNfR1RLX0tFWV9VTldSQVAoJnBFbnRyeS0+UFRLWzE2XSwgS0VZREFUQSwgcE1zZy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdLHBNc2ctPktleURlc2MuS2V5RGF0YSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJSU5UIAlpOworCQkJCVVDSEFSICAgS2V5WzMyXTsKKwkJCQkvLyBEZWNyeXB0IFRLSVAgR1RLCisJCQkJLy8gQ29uc3RydWN0IDMyIGJ5dGVzIFJDNCBLZXkKKwkJCQlOZGlzTW92ZU1lbW9yeShLZXksIHBNc2ctPktleURlc2MuS2V5SXYsIDE2KTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmS2V5WzE2XSwgJnBFbnRyeS0+UFRLWzE2XSwgMTYpOworCQkJCUFSQ0ZPVVJfSU5JVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBLZXksIDMyKTsKKwkJCQkvL2Rpc2NhcmQgZmlyc3QgMjU2IGJ5dGVzCisJCQkJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCQkJCUFSQ0ZPVVJfQllURSgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhUKTsKKwkJCQkvLyBEZWNyeXB0IEdUSy4gQmVjYXJlZnVsLCB0aGVyZSBpcyBubyBJQ1YgdG8gY2hlY2sgdGhlIHJlc3VsdCBpcyBjb3JyZWN0IG9yIG5vdAorCQkJCUFSQ0ZPVVJfREVDUllQVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBLRVlEQVRBLCBwTXNnLT5LZXlEZXNjLktleURhdGEsIHBNc2ctPktleURlc2MuS2V5RGF0YUxlblsxXSk7CisJCQl9CisKKwkJCWlmICghYldQQTIgJiYgKE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKQorCQkJCUdyb3VwS2V5SW5kZXggPSBFYXBvbEtleUluZm8uS2V5SW5kZXg7CisKKwkJfQorCQllbHNlIGlmICgoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18yKSB8fCAoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zICYmICFiV1BBMikpCisJCXsKKwkJCU5kaXNNb3ZlTWVtb3J5KEtFWURBVEEsIHBNc2ctPktleURlc2MuS2V5RGF0YSwgcE1zZy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdKTsKKwkJfQorCQllbHNlCisJCXsKKworCQkJcmV0dXJuIFRSVUU7CisJCX0KKworCQkvLyBQYXJzZSBLZXkgRGF0YSBmaWVsZCB0bworCQkvLyAxLiB2ZXJpZnkgUlNOIElFIGZvciBwYWlyd2lzZV9tc2dfMl9XUEExKFdQQTIpICxwYWlyd2lzZV9tc2dfM19XUEExKFdQQTIpCisJCS8vIDIuIHZlcmlmeSBLREUgZm9ybWF0IGZvciBwYWlyd2lzZV9tc2dfM19XUEEyLCBncm91cF9tc2dfMV9XUEEyCisJCS8vIDMuIHVwZGF0ZSBzaGFyZWQga2V5IGZvciBwYWlyd2lzZV9tc2dfM19XUEEyLCBncm91cF9tc2dfMV9XUEExKFdQQTIpCisJCWlmICghUlRNUFBhcnNlRWFwb2xLZXlEYXRhKHBBZCwgS0VZREFUQSwgcE1zZy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdLCBHcm91cEtleUluZGV4LCBNc2dUeXBlLCBiV1BBMiwgcEVudHJ5KSkKKwkJeworCQkJcmV0dXJuIEZBTFNFOworCQl9CisJfQorCisJcmV0dXJuIFRSVUU7CisKK30KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorQk9PTEVBTiBNbG1lRGxzUmVxU2FuaXR5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBSVF84MDJfMTFfRExTICpwRExTLAorICAgIE9VVCBQVVNIT1JUIHBSZWFzb24pCit7CisJTUxNRV9ETFNfUkVRX1NUUlVDVCAqcEluZm87CisKKyAgICBwSW5mbyA9IChNTE1FX0RMU19SRVFfU1RSVUNUICopTXNnOworCisJKnBETFMgPSBwSW5mby0+cERMUzsKKwkqcFJlYXNvbiA9IHBJbmZvLT5SZWFzb247CisKKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorQk9PTEVBTiBQZWVyRGxzUmVxU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwREEsCisgICAgT1VUIFBVQ0hBUiBwU0EsCisgICAgT1VUIFVTSE9SVCAqcENhcGFiaWxpdHlJbmZvLAorICAgIE9VVCBVU0hPUlQgKnBEbHNUaW1lb3V0LAorICAgIE9VVCBVQ0hBUiAqcFJhdGVzTGVuLAorICAgIE9VVCBVQ0hBUiBSYXRlc1tdLAorCU9VVCBVQ0hBUiAqcEh0Q2FwYWJpbGl0eUxlbiwKKyAgICBPVVQgSFRfQ0FQQUJJTElUWV9JRSAqcEh0Q2FwYWJpbGl0eSkKK3sKKwlDSEFSICAgICAgICAgICAgKlB0cjsKKyAgICBQRlJBTUVfODAyXzExCUZyID0gKFBGUkFNRV84MDJfMTEpTXNnOworCVBFSURfU1RSVUNUICBlaWRfcHRyOworCisgICAgLy8gdG8gcHJldmVudCBjYWxsZXIgZnJvbSB1c2luZyBnYXJiYWdlIG91dHB1dCB2YWx1ZQorICAgICpwQ2FwYWJpbGl0eUluZm8JPSAwOworICAgICpwRGxzVGltZW91dAk9IDA7CisJKnBIdENhcGFiaWxpdHlMZW4gPSAwOworCisgICAgUHRyID0gRnItPk9jdGV0OworCisJLy8gb2Zmc2V0IHRvIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzIChDYXRlZ29yeSBhbmQgQWN0aW9uIGZpZWxkKQorICAgIFB0ciArPSAyOworCisgICAgLy8gZ2V0IERBIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIE5kaXNNb3ZlTWVtb3J5KHBEQSwgUHRyLCBNQUNfQUREUl9MRU4pOworICAgIFB0ciArPSBNQUNfQUREUl9MRU47CisKKyAgICAvLyBnZXQgU0EgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocFNBLCBQdHIsIE1BQ19BRERSX0xFTik7CisgICAgUHRyICs9IE1BQ19BRERSX0xFTjsKKworICAgIC8vIGdldCBjYXBhYmlsaXR5IGluZm8gZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocENhcGFiaWxpdHlJbmZvLCBQdHIsIDIpOworICAgIFB0ciArPSAyOworCisgICAgLy8gZ2V0IGNhcGFiaWxpdHkgaW5mbyBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwRGxzVGltZW91dCwgUHRyLCAyKTsKKyAgICBQdHIgKz0gMjsKKworCS8vIENhdGVnb3J5IGFuZCBBY3Rpb24gZmllbGQgKyBEQSArIFNBICsgY2FwYWJpbGl0eSArIFRpbWVvdXQKKwllaWRfcHRyID0gKFBFSURfU1RSVUNUKSAmRnItPk9jdGV0WzE4XTsKKworCXdoaWxlICgoKFVDSEFSKillaWRfcHRyICsgZWlkX3B0ci0+TGVuICsgMSkgPCAoKFVDSEFSKilGciArIE1zZ0xlbikpCisJeworCQlzd2l0Y2goZWlkX3B0ci0+RWlkKQorCQl7CisJCQljYXNlIElFX1NVUFBfUkFURVM6CisgICAgICAgICAgICAgICAgaWYgKChlaWRfcHRyLT5MZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpICYmIChlaWRfcHRyLT5MZW4gPiAwKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KFJhdGVzLCBlaWRfcHRyLT5PY3RldCwgZWlkX3B0ci0+TGVuKTsKKyAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckRsc1JlcVNhbml0eSAtIElFX1NVUFBfUkFURVMuLCBMZW49JWQuIFJhdGVzWzBdPSV4XG4iLGVpZF9wdHItPkxlbiwgUmF0ZXNbMF0pKTsKKyAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmF0ZXNbMV09JXggJXggJXggJXggJXggJXggJXhcbiIsIFJhdGVzWzFdLCBSYXRlc1syXSwgUmF0ZXNbM10sIFJhdGVzWzRdLCBSYXRlc1s1XSwgUmF0ZXNbNl0sIFJhdGVzWzddKSk7CisgICAgICAgICAgICAgICAgICAgICpwUmF0ZXNMZW4gPSBlaWRfcHRyLT5MZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICpwUmF0ZXNMZW4gPSA4OworCQkJCQlSYXRlc1swXSA9IDB4ODI7CisJCQkJCVJhdGVzWzFdID0gMHg4NDsKKwkJCQkJUmF0ZXNbMl0gPSAweDhiOworCQkJCQlSYXRlc1szXSA9IDB4OTY7CisJCQkJCVJhdGVzWzRdID0gMHgxMjsKKwkJCQkJUmF0ZXNbNV0gPSAweDI0OworCQkJCQlSYXRlc1s2XSA9IDB4NDg7CisJCQkJCVJhdGVzWzddID0gMHg2YzsKKyAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckRsc1JlcVNhbml0eSAtIHdyb25nIElFX1NVUFBfUkFURVMuLCBMZW49JWRcbiIsZWlkX3B0ci0+TGVuKSk7CisgICAgICAgICAgICAgICAgfQorCQkJCWJyZWFrOworCisJCQljYXNlIElFX0VYVF9TVVBQX1JBVEVTOgorICAgICAgICAgICAgICAgIGlmIChlaWRfcHRyLT5MZW4gKyAqcFJhdGVzTGVuIDw9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoJlJhdGVzWypwUmF0ZXNMZW5dLCBlaWRfcHRyLT5PY3RldCwgZWlkX3B0ci0+TGVuKTsKKyAgICAgICAgICAgICAgICAgICAgKnBSYXRlc0xlbiA9ICgqcFJhdGVzTGVuKSArIGVpZF9wdHItPkxlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoJlJhdGVzWypwUmF0ZXNMZW5dLCBlaWRfcHRyLT5PY3RldCwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMgLSAoKnBSYXRlc0xlbikpOworICAgICAgICAgICAgICAgICAgICAqcFJhdGVzTGVuID0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVM7CisgICAgICAgICAgICAgICAgfQorCQkJCWJyZWFrOworCisJCQljYXNlIElFX0hUX0NBUDoKKwkJCQlpZiAoZWlkX3B0ci0+TGVuID49IHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSkKKwkJCQl7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBIdENhcGFiaWxpdHksIGVpZF9wdHItPk9jdGV0LCBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSkpOworCisJCQkJCSooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkh0Q2FwSW5mbykpOworCQkJCQkqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvKSA9IGNwdTJsZTE2KCooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8pKTsKKwkJCQkJKnBIdENhcGFiaWxpdHlMZW4gPSBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSk7CisKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckRsc1JlcVNhbml0eSAtIElFX0hUX0NBUFxuIikpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyRGxzUmVxU2FuaXR5IC0gd3JvbmcgSUVfSFRfQ0FQLmVpZF9wdHItPkxlbiA9ICVkXG4iLCBlaWRfcHRyLT5MZW4pKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKworCQllaWRfcHRyID0gKFBFSURfU1RSVUNUKSgoVUNIQVIqKWVpZF9wdHIgKyAyICsgZWlkX3B0ci0+TGVuKTsKKwl9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworQk9PTEVBTiBQZWVyRGxzUnNwU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwREEsCisgICAgT1VUIFBVQ0hBUiBwU0EsCisgICAgT1VUIFVTSE9SVCAqcENhcGFiaWxpdHlJbmZvLAorICAgIE9VVCBVU0hPUlQgKnBTdGF0dXMsCisgICAgT1VUIFVDSEFSICpwUmF0ZXNMZW4sCisgICAgT1VUIFVDSEFSIFJhdGVzW10sCisgICAgT1VUIFVDSEFSICpwSHRDYXBhYmlsaXR5TGVuLAorICAgIE9VVCBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5KQoreworICAgIENIQVIgICAgICAgICAgICAqUHRyOworICAgIFBGUkFNRV84MDJfMTEJRnIgPSAoUEZSQU1FXzgwMl8xMSlNc2c7CisJUEVJRF9TVFJVQ1QgIGVpZF9wdHI7CisKKyAgICAvLyB0byBwcmV2ZW50IGNhbGxlciBmcm9tIHVzaW5nIGdhcmJhZ2Ugb3V0cHV0IHZhbHVlCisgICAgKnBTdGF0dXMJCT0gMDsKKyAgICAqcENhcGFiaWxpdHlJbmZvCT0gMDsKKwkqcEh0Q2FwYWJpbGl0eUxlbiA9IDA7CisKKyAgICBQdHIgPSBGci0+T2N0ZXQ7CisKKwkvLyBvZmZzZXQgdG8gZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgKENhdGVnb3J5IGFuZCBBY3Rpb24gZmllbGQpCisgICAgUHRyICs9IDI7CisKKwkvLyBnZXQgc3RhdHVzIGNvZGUgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocFN0YXR1cywgUHRyLCAyKTsKKyAgICBQdHIgKz0gMjsKKworICAgIC8vIGdldCBEQSBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwREEsIFB0ciwgTUFDX0FERFJfTEVOKTsKKyAgICBQdHIgKz0gTUFDX0FERFJfTEVOOworCisgICAgLy8gZ2V0IFNBIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIE5kaXNNb3ZlTWVtb3J5KHBTQSwgUHRyLCBNQUNfQUREUl9MRU4pOworICAgIFB0ciArPSBNQUNfQUREUl9MRU47CisKKwlpZiAocFN0YXR1cyA9PSAwKQorCXsKKwkgICAgLy8gZ2V0IGNhcGFiaWxpdHkgaW5mbyBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKwkgICAgTmRpc01vdmVNZW1vcnkocENhcGFiaWxpdHlJbmZvLCBQdHIsIDIpOworCSAgICBQdHIgKz0gMjsKKwl9CisKKwkvLyBDYXRlZ29yeSBhbmQgQWN0aW9uIGZpZWxkICsgc3RhdHVzIGNvZGUgKyBEQSArIFNBICsgY2FwYWJpbGl0eQorCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpICZGci0+T2N0ZXRbMThdOworCisJd2hpbGUgKCgoVUNIQVIqKWVpZF9wdHIgKyBlaWRfcHRyLT5MZW4gKyAxKSA8ICgoVUNIQVIqKUZyICsgTXNnTGVuKSkKKwl7CisJCXN3aXRjaChlaWRfcHRyLT5FaWQpCisJCXsKKwkJCWNhc2UgSUVfU1VQUF9SQVRFUzoKKyAgICAgICAgICAgICAgICBpZiAoKGVpZF9wdHItPkxlbiA8PSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUykgJiYgKGVpZF9wdHItPkxlbiA+IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoUmF0ZXMsIGVpZF9wdHItPk9jdGV0LCBlaWRfcHRyLT5MZW4pOworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyRGxzUnNwU2FuaXR5IC0gSUVfU1VQUF9SQVRFUy4sIExlbj0lZC4gUmF0ZXNbMF09JXhcbiIsZWlkX3B0ci0+TGVuLCBSYXRlc1swXSkpOworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYXRlc1sxXT0leCAleCAleCAleCAleCAleCAleFxuIiwgUmF0ZXNbMV0sIFJhdGVzWzJdLCBSYXRlc1szXSwgUmF0ZXNbNF0sIFJhdGVzWzVdLCBSYXRlc1s2XSwgUmF0ZXNbN10pKTsKKyAgICAgICAgICAgICAgICAgICAgKnBSYXRlc0xlbiA9IGVpZF9wdHItPkxlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBSYXRlc0xlbiA9IDg7CisJCQkJCVJhdGVzWzBdID0gMHg4MjsKKwkJCQkJUmF0ZXNbMV0gPSAweDg0OworCQkJCQlSYXRlc1syXSA9IDB4OGI7CisJCQkJCVJhdGVzWzNdID0gMHg5NjsKKwkJCQkJUmF0ZXNbNF0gPSAweDEyOworCQkJCQlSYXRlc1s1XSA9IDB4MjQ7CisJCQkJCVJhdGVzWzZdID0gMHg0ODsKKwkJCQkJUmF0ZXNbN10gPSAweDZjOworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyRGxzUnNwU2FuaXR5IC0gd3JvbmcgSUVfU1VQUF9SQVRFUy4sIExlbj0lZFxuIixlaWRfcHRyLT5MZW4pKTsKKyAgICAgICAgICAgICAgICB9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSUVfRVhUX1NVUFBfUkFURVM6CisgICAgICAgICAgICAgICAgaWYgKGVpZF9wdHItPkxlbiArICpwUmF0ZXNMZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgmUmF0ZXNbKnBSYXRlc0xlbl0sIGVpZF9wdHItPk9jdGV0LCBlaWRfcHRyLT5MZW4pOworICAgICAgICAgICAgICAgICAgICAqcFJhdGVzTGVuID0gKCpwUmF0ZXNMZW4pICsgZWlkX3B0ci0+TGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeSgmUmF0ZXNbKnBSYXRlc0xlbl0sIGVpZF9wdHItPk9jdGV0LCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyAtICgqcFJhdGVzTGVuKSk7CisgICAgICAgICAgICAgICAgICAgICpwUmF0ZXNMZW4gPSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUzsKKyAgICAgICAgICAgICAgICB9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgSUVfSFRfQ0FQOgorCQkJCWlmIChlaWRfcHRyLT5MZW4gPj0gc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKQorCQkJCXsKKwkJCQkJTmRpc01vdmVNZW1vcnkocEh0Q2FwYWJpbGl0eSwgZWlkX3B0ci0+T2N0ZXQsIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisKKwkJCQkJKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkh0Q2FwSW5mbykgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvKSk7CisJCQkJCSooVVNIT1JUICopKCZwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mbykpOworCQkJCQkqcEh0Q2FwYWJpbGl0eUxlbiA9IHNpemVvZihIVF9DQVBBQklMSVRZX0lFKTsKKworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyRGxzUnNwU2FuaXR5IC0gSUVfSFRfQ0FQXG4iKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJEbHNSc3BTYW5pdHkgLSB3cm9uZyBJRV9IVF9DQVAuZWlkX3B0ci0+TGVuID0gJWRcbiIsIGVpZF9wdHItPkxlbikpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCisJCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpKChVQ0hBUiopZWlkX3B0ciArIDIgKyBlaWRfcHRyLT5MZW4pOworCX0KKworICAgIHJldHVybiBUUlVFOworfQorCitCT09MRUFOIFBlZXJEbHNUZWFyRG93blNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcERBLAorICAgIE9VVCBQVUNIQVIgcFNBLAorICAgIE9VVCBVU0hPUlQgKnBSZWFzb24pCit7CisgICAgQ0hBUiAgICAgICAgICAgICpQdHI7CisgICAgUEZSQU1FXzgwMl8xMQlGciA9IChQRlJBTUVfODAyXzExKU1zZzsKKworICAgIC8vIHRvIHByZXZlbnQgY2FsbGVyIGZyb20gdXNpbmcgZ2FyYmFnZSBvdXRwdXQgdmFsdWUKKyAgICAqcFJlYXNvbgk9IDA7CisKKyAgICBQdHIgPSBGci0+T2N0ZXQ7CisKKwkvLyBvZmZzZXQgdG8gZGVzdGluYXRpb24gTUFDIGFkZHJlc3MgKENhdGVnb3J5IGFuZCBBY3Rpb24gZmllbGQpCisgICAgUHRyICs9IDI7CisKKyAgICAvLyBnZXQgREEgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgTmRpc01vdmVNZW1vcnkocERBLCBQdHIsIE1BQ19BRERSX0xFTik7CisgICAgUHRyICs9IE1BQ19BRERSX0xFTjsKKworICAgIC8vIGdldCBTQSBmcm9tIHBheWxvYWQgYW5kIGFkdmFuY2UgdGhlIHBvaW50ZXIKKyAgICBOZGlzTW92ZU1lbW9yeShwU0EsIFB0ciwgTUFDX0FERFJfTEVOKTsKKyAgICBQdHIgKz0gTUFDX0FERFJfTEVOOworCisJLy8gZ2V0IHJlYXNvbiBjb2RlIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIE5kaXNNb3ZlTWVtb3J5KHBSZWFzb24sIFB0ciwgMik7CisgICAgUHRyICs9IDI7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX3N5bmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2NtbV9zeW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJlN2M3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2NtbV9zeW5jLmMKQEAgLTAsMCArMSw3MTEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJc3luYy5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSm9obiBDaGFuZwkyMDA0LTA5LTAxICAgICAgbW9kaWZpZWQgZm9yIHJ0MjU2MS8yNjYxCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisvLyAyLjQgR2h6IGNoYW5uZWwgcGxhbiBpbmRleCBpbiB0aGUgVHhQb3dlciBhcnJheXMuCisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzBfU1RBUlQJMAkJCS8vIDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExCisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzBfU0laRQkxMQorI2RlZmluZQlCR19CQU5EX1JFR0lPTl8xX1NUQVJUCTAJCQkvLyAxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMworI2RlZmluZQlCR19CQU5EX1JFR0lPTl8xX1NJWkUJMTMKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fMl9TVEFSVAk5CQkJLy8gMTAsMTEKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fMl9TSVpFCTIKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fM19TVEFSVAk5CQkJLy8gMTAsMTEsMTIsMTMKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fM19TSVpFCTQKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fNF9TVEFSVAkxMwkJCS8vIDE0CisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzRfU0laRQkxCisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzVfU1RBUlQJMAkJCS8vIDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0CisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzVfU0laRQkxNAorI2RlZmluZQlCR19CQU5EX1JFR0lPTl82X1NUQVJUCTIJCQkvLyAzLDQsNSw2LDcsOCw5CisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzZfU0laRQk3CisjZGVmaW5lCUJHX0JBTkRfUkVHSU9OXzdfU1RBUlQJNAkJCS8vIDUsNiw3LDgsOSwxMCwxMSwxMiwxMworI2RlZmluZQlCR19CQU5EX1JFR0lPTl83X1NJWkUJOQorI2RlZmluZQlCR19CQU5EX1JFR0lPTl8zMV9TVEFSVAkwCQkJLy8gMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQKKyNkZWZpbmUJQkdfQkFORF9SRUdJT05fMzFfU0laRQkxNAorCisvLyA1IEdoeiBjaGFubmVsIHBsYW4gaW5kZXggaW4gdGhlIFR4UG93ZXIgYXJyYXlzLgorVUNIQVIgQV9CQU5EX1JFR0lPTl8wX0NIQU5ORUxfTElTVFtdPXszNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1fTsKK1VDSEFSIEFfQkFORF9SRUdJT05fMV9DSEFOTkVMX0xJU1RbXT17MzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MH07CitVQ0hBUiBBX0JBTkRfUkVHSU9OXzJfQ0hBTk5FTF9MSVNUW109ezM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NH07CitVQ0hBUiBBX0JBTkRfUkVHSU9OXzNfQ0hBTk5FTF9MSVNUW109ezUyLCA1NiwgNjAsIDY0LCAxNDksIDE1MywgMTU3LCAxNjF9OworVUNIQVIgQV9CQU5EX1JFR0lPTl80X0NIQU5ORUxfTElTVFtdPXsxNDksIDE1MywgMTU3LCAxNjEsIDE2NX07CitVQ0hBUiBBX0JBTkRfUkVHSU9OXzVfQ0hBTk5FTF9MSVNUW109ezE0OSwgMTUzLCAxNTcsIDE2MX07CitVQ0hBUiBBX0JBTkRfUkVHSU9OXzZfQ0hBTk5FTF9MSVNUW109ezM2LCA0MCwgNDQsIDQ4fTsKK1VDSEFSIEFfQkFORF9SRUdJT05fN19DSEFOTkVMX0xJU1RbXT17MzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MCwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjV9OworVUNIQVIgQV9CQU5EX1JFR0lPTl84X0NIQU5ORUxfTElTVFtdPXs1MiwgNTYsIDYwLCA2NH07CitVQ0hBUiBBX0JBTkRfUkVHSU9OXzlfQ0hBTk5FTF9MSVNUW109ezM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEzMiwgMTM2LCAxNDAsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1fTsKK1VDSEFSIEFfQkFORF9SRUdJT05fMTBfQ0hBTk5FTF9MSVNUW109ezM2LCA0MCwgNDQsIDQ4LCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NX07CitVQ0hBUiBBX0JBTkRfUkVHSU9OXzExX0NIQU5ORUxfTElTVFtdPXszNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDE0OSwgMTUzLCAxNTcsIDE2MX07CisKKy8vQmFTaXplQXJyYXkgZm9sbG93cyB0aGUgODAyLjExbiBkZWZpbml0aW9uIGFzIE1heFJ4RmFjdG9yLiAgMl4oMTMrZmFjdG9yKSBieXRlcy4gV2hlbiBmYWN0b3IgPTAsIGl0J3MgYWJvdXQgQmEgYnVmZmVyIHNpemUgPTguCitVQ0hBUiBCYVNpemVBcnJheVs0XSA9IHs4LDE2LDMyLDY0fTsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlVcGRhdGUgU3RhQ2ZnLT5DaGFubmVsTGlzdFtdIGFjY29yZGluZyB0byAxKSBDb3VudHJ5IFJlZ2lvbiAyKSBSRiBJQyB0eXBlLAorCQlhbmQgMykgUEhZLW1vZGUgdXNlciBzZWxlY3RlZC4KKwkJVGhlIG91dGNvbWUgaXMgdXNlZCBieSBkcml2ZXIgd2hlbiBkb2luZyBzaXRlIHN1cnZleS4KKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEJ1aWxkQ2hhbm5lbExpc3QoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUNIQVIgaSwgaiwgaW5kZXg9MCwgbnVtPTA7CisJUFVDSEFSCXBDaGFubmVsTGlzdCA9IE5VTEw7CisKKwlOZGlzWmVyb01lbW9yeShwQWQtPkNoYW5uZWxMaXN0LCBNQVhfTlVNX09GX0NIQU5ORUxTICogc2l6ZW9mKENIQU5ORUxfVFhfUE9XRVIpKTsKKworCS8vIGlmIG5vdCAxMWEtb25seSBtb2RlLCBjaGFubmVsIGxpc3Qgc3RhcnRzIGZyb20gMi40R2h6IGJhbmQKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgIT0gUEhZXzExQSkKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJJiYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgIT0gUEhZXzExQU5fTUlYRUQpICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlICE9IFBIWV8xMU5fNUcpCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJKQorCXsKKwkJc3dpdGNoIChwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uICAmIDB4N2YpCisJCXsKKwkJCWNhc2UgUkVHSU9OXzBfQkdfQkFORDoJLy8gMSAtMTEKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fMF9TVEFSVF0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSAqIEJHX0JBTkRfUkVHSU9OXzBfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fMF9TSVpFOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fMV9CR19CQU5EOgkvLyAxIC0gMTMKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fMV9TVEFSVF0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSAqIEJHX0JBTkRfUkVHSU9OXzFfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fMV9TSVpFOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fMl9CR19CQU5EOgkvLyAxMCAtIDExCisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLCAmcEFkLT5UeFBvd2VyW0JHX0JBTkRfUkVHSU9OXzJfU1RBUlRdLCBzaXplb2YoQ0hBTk5FTF9UWF9QT1dFUikgKiBCR19CQU5EX1JFR0lPTl8yX1NJWkUpOworCQkJCWluZGV4ICs9IEJHX0JBTkRfUkVHSU9OXzJfU0laRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzNfQkdfQkFORDoJLy8gMTAgLSAxMworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNoYW5uZWxMaXN0W2luZGV4XSwgJnBBZC0+VHhQb3dlcltCR19CQU5EX1JFR0lPTl8zX1NUQVJUXSwgc2l6ZW9mKENIQU5ORUxfVFhfUE9XRVIpICogQkdfQkFORF9SRUdJT05fM19TSVpFKTsKKwkJCQlpbmRleCArPSBCR19CQU5EX1JFR0lPTl8zX1NJWkU7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl80X0JHX0JBTkQ6CS8vIDE0CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLCAmcEFkLT5UeFBvd2VyW0JHX0JBTkRfUkVHSU9OXzRfU1RBUlRdLCBzaXplb2YoQ0hBTk5FTF9UWF9QT1dFUikgKiBCR19CQU5EX1JFR0lPTl80X1NJWkUpOworCQkJCWluZGV4ICs9IEJHX0JBTkRfUkVHSU9OXzRfU0laRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzVfQkdfQkFORDoJLy8gMSAtIDE0CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLCAmcEFkLT5UeFBvd2VyW0JHX0JBTkRfUkVHSU9OXzVfU1RBUlRdLCBzaXplb2YoQ0hBTk5FTF9UWF9QT1dFUikgKiBCR19CQU5EX1JFR0lPTl81X1NJWkUpOworCQkJCWluZGV4ICs9IEJHX0JBTkRfUkVHSU9OXzVfU0laRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzZfQkdfQkFORDoJLy8gMyAtIDkKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5DaGFubmVsTGlzdFtpbmRleF0sICZwQWQtPlR4UG93ZXJbQkdfQkFORF9SRUdJT05fNl9TVEFSVF0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSAqIEJHX0JBTkRfUkVHSU9OXzZfU0laRSk7CisJCQkJaW5kZXggKz0gQkdfQkFORF9SRUdJT05fNl9TSVpFOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fN19CR19CQU5EOiAgLy8gNSAtIDEzCisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLCAmcEFkLT5UeFBvd2VyW0JHX0JBTkRfUkVHSU9OXzdfU1RBUlRdLCBzaXplb2YoQ0hBTk5FTF9UWF9QT1dFUikgKiBCR19CQU5EX1JFR0lPTl83X1NJWkUpOworCQkJCWluZGV4ICs9IEJHX0JBTkRfUkVHSU9OXzdfU0laRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzMxX0JHX0JBTkQ6CS8vIDEgLSAxNAorCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNoYW5uZWxMaXN0W2luZGV4XSwgJnBBZC0+VHhQb3dlcltCR19CQU5EX1JFR0lPTl8zMV9TVEFSVF0sIHNpemVvZihDSEFOTkVMX1RYX1BPV0VSKSAqIEJHX0JBTkRfUkVHSU9OXzMxX1NJWkUpOworCQkJCWluZGV4ICs9IEJHX0JBTkRfUkVHSU9OXzMxX1NJWkU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OiAgICAgICAgICAgIC8vIEVycm9yLiBzaG91bGQgbmV2ZXIgaGFwcGVuCisJCQkJYnJlYWs7CisJCX0KKwkJZm9yIChpPTA7IGk8aW5kZXg7IGkrKykKKwkJCXBBZC0+Q2hhbm5lbExpc3RbaV0uTWF4VHhQd3IgPSAyMDsKKwl9CisKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQSkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUJHX01JWEVEKQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQl8fCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBQkdOX01JWEVEKSB8fCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBTl9NSVhFRCkKKwkJfHwgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQUdOX01JWEVEKSB8fCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFOXzVHKQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCSkKKwl7CisJCXN3aXRjaCAocEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kICYgMHg3ZikKKwkJeworCQkJY2FzZSBSRUdJT05fMF9BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fMF9DSEFOTkVMX0xJU1QpL3NpemVvZihVQ0hBUik7CisJCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8wX0NIQU5ORUxfTElTVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzFfQV9CQU5EOgorCQkJCW51bSA9IHNpemVvZihBX0JBTkRfUkVHSU9OXzFfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fMV9DSEFOTkVMX0xJU1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl8yX0FfQkFORDoKKwkJCQludW0gPSBzaXplb2YoQV9CQU5EX1JFR0lPTl8yX0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzJfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fM19BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fM19DSEFOTkVMX0xJU1QpL3NpemVvZihVQ0hBUik7CisJCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl8zX0NIQU5ORUxfTElTVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzRfQV9CQU5EOgorCQkJCW51bSA9IHNpemVvZihBX0JBTkRfUkVHSU9OXzRfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fNF9DSEFOTkVMX0xJU1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl81X0FfQkFORDoKKwkJCQludW0gPSBzaXplb2YoQV9CQU5EX1JFR0lPTl81X0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzVfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fNl9BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fNl9DSEFOTkVMX0xJU1QpL3NpemVvZihVQ0hBUik7CisJCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl82X0NIQU5ORUxfTElTVDsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkVHSU9OXzdfQV9CQU5EOgorCQkJCW51bSA9IHNpemVvZihBX0JBTkRfUkVHSU9OXzdfQ0hBTk5FTF9MSVNUKS9zaXplb2YoVUNIQVIpOworCQkJCXBDaGFubmVsTGlzdCA9IEFfQkFORF9SRUdJT05fN19DSEFOTkVMX0xJU1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIFJFR0lPTl84X0FfQkFORDoKKwkJCQludW0gPSBzaXplb2YoQV9CQU5EX1JFR0lPTl84X0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzhfQ0hBTk5FTF9MSVNUOworCQkJCWJyZWFrOworCQkJY2FzZSBSRUdJT05fOV9BX0JBTkQ6CisJCQkJbnVtID0gc2l6ZW9mKEFfQkFORF9SRUdJT05fOV9DSEFOTkVMX0xJU1QpL3NpemVvZihVQ0hBUik7CisJCQkJcENoYW5uZWxMaXN0ID0gQV9CQU5EX1JFR0lPTl85X0NIQU5ORUxfTElTVDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUdJT05fMTBfQV9CQU5EOgorCQkJCW51bSA9IHNpemVvZihBX0JBTkRfUkVHSU9OXzEwX0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzEwX0NIQU5ORUxfTElTVDsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSRUdJT05fMTFfQV9CQU5EOgorCQkJCW51bSA9IHNpemVvZihBX0JBTkRfUkVHSU9OXzExX0NIQU5ORUxfTElTVCkvc2l6ZW9mKFVDSEFSKTsKKwkJCQlwQ2hhbm5lbExpc3QgPSBBX0JBTkRfUkVHSU9OXzExX0NIQU5ORUxfTElTVDsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDogICAgICAgICAgICAvLyBFcnJvci4gc2hvdWxkIG5ldmVyIGhhcHBlbgorCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sKCJjb3VudHJ5cmVnaW9uPSVkIG5vdCBzdXBwb3J0IiwgcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kKSk7CisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAobnVtICE9IDApCisJCXsKKwkJCVVDSEFSIFJhZGFyQ2hbMTVdPXs1MiwgNTYsIDYwLCA2NCwgMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDB9OworCQkJZm9yIChpPTA7IGk8bnVtOyBpKyspCisJCQl7CisJCQkJZm9yIChqPTA7IGo8TUFYX05VTV9PRl9DSEFOTkVMUzsgaisrKQorCQkJCXsKKwkJCQkJaWYgKHBDaGFubmVsTGlzdFtpXSA9PSBwQWQtPlR4UG93ZXJbal0uQ2hhbm5lbCkKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNoYW5uZWxMaXN0W2luZGV4K2ldLCAmcEFkLT5UeFBvd2VyW2pdLCBzaXplb2YoQ0hBTk5FTF9UWF9QT1dFUikpOworCQkJCQl9CisJCQkJZm9yIChqPTA7IGo8MTU7IGorKykKKwkJCQl7CisJCQkJCWlmIChwQ2hhbm5lbExpc3RbaV0gPT0gUmFkYXJDaFtqXSkKKwkJCQkJCXBBZC0+Q2hhbm5lbExpc3RbaW5kZXgraV0uRGZzUmVxID0gVFJVRTsKKwkJCQl9CisJCQkJcEFkLT5DaGFubmVsTGlzdFtpbmRleCtpXS5NYXhUeFB3ciA9IDIwOworCQkJfQorCQkJaW5kZXggKz0gbnVtOworCQl9CisJfQorCisJcEFkLT5DaGFubmVsTGlzdE51bSA9IGluZGV4OworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiY291bnRyeSBjb2RlPSVkLyVkLCBSRklDPSVkLCBQSFkgbW9kZT0lZCwgc3VwcG9ydCAlZCBjaGFubmVsc1xuIiwKKwkJcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbiwgcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kLCBwQWQtPlJmSWNUeXBlLCBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlLCBwQWQtPkNoYW5uZWxMaXN0TnVtKSk7CisjaWZkZWYgREJHCisJZm9yIChpPTA7aTxwQWQtPkNoYW5uZWxMaXN0TnVtO2krKykKKwl7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIkJ1aWxkQ2hhbm5lbCAjICVkIDo6IFB3cjAgPSAlZCwgUHdyMSA9JWQsIFxuICIsIHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCwgcEFkLT5DaGFubmVsTGlzdFtpXS5Qb3dlciwgcEFkLT5DaGFubmVsTGlzdFtpXS5Qb3dlcjIpKTsKKwl9CisjZW5kaWYKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIHJvdXRpbmUgcmV0dXJuIHRoZSBmaXJzdCBjaGFubmVsIG51bWJlciBhY2NvcmRpbmcgdG8gdGhlIGNvdW50cnkKKwkJY29kZSBzZWxlY3Rpb24gYW5kIFJGIElDIHNlbGVjdGlvbiAoc2lnbmFsIGJhbmQgb3IgZHVhbCBiYW5kKS4gSXQgaXMgY2FsbGVkCisJCXdoZW5ldmVyIGRyaXZlciBuZWVkIHRvIHN0YXJ0IGEgc2l0ZSBzdXJ2ZXkgb2YgYWxsIHN1cHBvcnRlZCBjaGFubmVscy4KKwlSZXR1cm46CisJCWNoIC0gdGhlIGZpcnN0IGNoYW5uZWwgbnVtYmVyIG9mIGN1cnJlbnQgY291bnRyeSBjb2RlIHNldHRpbmcKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitVQ0hBUiBGaXJzdENoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJcmV0dXJuIHBBZC0+Q2hhbm5lbExpc3RbMF0uQ2hhbm5lbDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgbmV4dCBjaGFubmVsIG51bWJlci4gVGhpcyByb3V0aW5lIGlzIGNhbGxlZAorCQlkdXJpbmcgZHJpdmVyIG5lZWQgdG8gc3RhcnQgYSBzaXRlIHN1cnZleSBvZiBhbGwgc3VwcG9ydGVkIGNoYW5uZWxzLgorCVJldHVybjoKKwkJbmV4dF9jaGFubmVsIC0gdGhlIG5leHQgY2hhbm5lbCBudW1iZXIgdmFsaWQgaW4gY3VycmVudCBjb3VudHJ5IGNvZGUgc2V0dGluZy4KKwlOb3RlOgorCQlyZXR1cm4gMCBpZiBubyBtb3JlIG5leHQgY2hhbm5lbAorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1VDSEFSIE5leHRDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIGNoYW5uZWwpCit7CisJaW50IGk7CisJVUNIQVIgbmV4dF9jaGFubmVsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAocEFkLT5DaGFubmVsTGlzdE51bSAtIDEpOyBpKyspCisJCWlmIChjaGFubmVsID09IHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCkKKwkJeworCQkJbmV4dF9jaGFubmVsID0gcEFkLT5DaGFubmVsTGlzdFtpKzFdLkNoYW5uZWw7CisJCQlicmVhazsKKwl9CisJcmV0dXJuIG5leHRfY2hhbm5lbDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIHJvdXRpbmUgaXMgZm9yIENpc2NvIENvbXBhdGlibGUgRXh0ZW5zaW9ucyAyLlgKKwkJU3BlYzMxLiBBUCBDb250cm9sIG9mIENsaWVudCBUcmFuc21pdCBQb3dlcgorCVJldHVybjoKKwkJTm9uZQorCU5vdGU6CisJICAgUmVxdWlyZWQgYnkgQWlyb25ldCBkQm0obVcpCisJCSAgIDBkQm0oMW1XKSwgICAxZEJtKDVtVyksIDEzZEJtKDIwbVcpLCAxNWRCbSgzMG1XKSwKKwkJICAxN2RCbSg1MG13KSwgMjBkQm0oMTAwbVcpCisKKwkgICBXZSBzdXBwb3J0ZWQKKwkJICAgM2RCbShMb3dlc3QpLCA2ZEJtKDEwJSksIDlkQm0oMjUlKSwgMTJkQm0oNTAlKSwKKwkJICAxNGRCbSg3NSUpLCAgIDE1ZEJtKDEwMCUpCisKKwkJVGhlIGNsaWVudCBzdGF0aW9uJ3MgYWN0dWFsIHRyYW5zbWl0IHBvd2VyIHNoYWxsIGJlIHdpdGhpbiArLy0gNWRCIG9mCisJCXRoZSBtaW5pbXVtIHZhbHVlIG9yIG5leHQgbG93ZXIgdmFsdWUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBDaGFuZ2VUb0NlbGxQb3dlckxpbWl0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSICAgICAgICAgQWlyb25ldENlbGxQb3dlckxpbWl0KQoreworCS8vdmFsdWQgMHhGRiBtZWFucyB0aGF0IGhhc24ndCBmb3VuZCBwb3dlciBsaW1pdCBpbmZvcm1hdGlvbgorCS8vZnJvbSB0aGUgQVAncyBCZWFjb24vUHJvYmUgcmVzcG9uc2UuCisJaWYgKEFpcm9uZXRDZWxsUG93ZXJMaW1pdCA9PSAweEZGKQorCQlyZXR1cm47CisKKwlpZiAoQWlyb25ldENlbGxQb3dlckxpbWl0IDwgNikgLy9Vc2VkIExvd2VzdCBQb3dlciBQZXJjZW50YWdlLgorCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IDY7CisJZWxzZSBpZiAoQWlyb25ldENlbGxQb3dlckxpbWl0IDwgOSkKKwkJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSAxMDsKKwllbHNlIGlmIChBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPCAxMikKKwkJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSAyNTsKKwllbHNlIGlmIChBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPCAxNCkKKwkJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSA1MDsKKwllbHNlIGlmIChBaXJvbmV0Q2VsbFBvd2VyTGltaXQgPCAxNSkKKwkJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSA3NTsKKwllbHNlCisJCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gMTAwOyAvL2Vsc2UgdXNlZCBtYXhpbXVtCisKKwlpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyRGVmYXVsdCkKKwkJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSBwQWQtPkNvbW1vbkNmZy5UeFBvd2VyRGVmYXVsdDsKKworfQorCitDSEFSCUNvbnZlcnRUb1Jzc2koCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JQ0hBUgkJCVJzc2ksCisJSU4gIFVDSEFSICAgUnNzaU51bWJlcikKK3sKKwlVQ0hBUglSc3NpT2Zmc2V0LCBMTkFHYWluOworCisJLy8gUnNzaSBlcXVhbHMgdG8gemVybyBzaG91bGQgYmUgYW4gaW52YWxpZCB2YWx1ZQorCWlmIChSc3NpID09IDApCisJCXJldHVybiAtOTk7CisKKwlMTkFHYWluID0gR0VUX0xOQV9HQUlOKHBBZCk7CisgICAgaWYgKHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA+IDE0KQorICAgIHsKKyAgICAgICAgaWYgKFJzc2lOdW1iZXIgPT0gMCkKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkFSc3NpT2Zmc2V0MDsKKwkJZWxzZSBpZiAoUnNzaU51bWJlciA9PSAxKQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QVJzc2lPZmZzZXQxOworCQllbHNlCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5BUnNzaU9mZnNldDI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChSc3NpTnVtYmVyID09IDApCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQwOworCQllbHNlIGlmIChSc3NpTnVtYmVyID09IDEpCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQxOworCQllbHNlCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5CR1Jzc2lPZmZzZXQyOworICAgIH0KKworICAgIHJldHVybiAoLTEyIC0gUnNzaU9mZnNldCAtIExOQUdhaW4gLSBSc3NpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlTY2FuIG5leHQgY2hhbm5lbAorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgU2Nhbk5leHRDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUhFQURFUl84MDJfMTEgICBIZHI4MDIxMTsKKwlQVUNIQVIgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgICAgIE5TdGF0dXM7CisJVUxPTkcgICAgICAgICAgIEZyYW1lTGVuID0gMDsKKwlVQ0hBUiAgICAgICAgICAgU3NpZExlbiA9IDAsIFNjYW5UeXBlID0gcEFkLT5NbG1lQXV4LlNjYW5UeXBlLCBCQlBWYWx1ZSA9IDA7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJVVNIT1JUICAgICAgICAgIFN0YXR1czsKKwlQSEVBREVSXzgwMl8xMSAgcEhkcjgwMjExOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCVVJTlQJCQlTY2FuVGltZUluNWdDaGFubmVsID0gU0hPUlRfQ0hBTk5FTF9USU1FOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWlmIChNT05JVE9SX09OKHBBZCkpCisJCQlyZXR1cm47CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgUkFMSU5LX0FURQorCS8vIE5vdGhpbmcgdG8gZG8gaW4gQVRFIG1vZGUuCisJaWYgKEFURV9PTihwQWQpKQorCQlyZXR1cm47CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJaWYgKHBBZC0+TWxtZUF1eC5DaGFubmVsID09IDApCisJeworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9PSBCV180MCkKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCSYmIChJTkZSQV9PTihwQWQpCisJCQkJfHwgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9BUCkpCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQkpCisJCXsKKwkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKTsKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwkJCUJCUFZhbHVlICY9ICh+MHgxOCk7CisJCQlCQlBWYWx1ZSB8PSAweDEwOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEVuZCBvZiBTQ0FOLCByZXN0b3JlIHRvIDQwTUh6IGNoYW5uZWwgJWQsIFRvdGFsIEJTU1slMDJkXVxuIixwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgcEFkLT5TY2FuVGFiLkJzc05yKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEVuZCBvZiBTQ0FOLCByZXN0b3JlIHRvIGNoYW5uZWwgJWQsIFRvdGFsIEJTU1slMDJkXVxuIixwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBwQWQtPlNjYW5UYWIuQnNzTnIpKTsKKwkJfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCS8vCisJCQkvLyBUbyBwcmV2ZW50IGRhdGEgbG9zdC4KKwkJCS8vIFNlbmQgYW4gTlVMTCBkYXRhIHdpdGggdHVybmVkIFBTTSBiaXQgb24gdG8gY3VycmVudCBhc3NvY2lhdGVkIEFQIGJlZm9yZSBTQ0FOIHByb2dyZXNzLgorCQkJLy8gTm93LCB3ZSBuZWVkIHRvIHNlbmQgYW4gTlVMTCBkYXRhIHdpdGggdHVybmVkIFBTTSBiaXQgb2ZmIHRvIEFQLCB3aGVuIHNjYW4gcHJvZ3Jlc3MgZG9uZQorCQkJLy8KKwkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkgJiYgKElORlJBX09OKHBBZCkpKQorCQkJeworCQkJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFZPSUQpJnBPdXRCdWZmZXIpOworCQkJCWlmIChOU3RhdHVzCT09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQkJeworCQkJCQlwSGRyODAyMTEgPSAoUEhFQURFUl84MDJfMTEpIHBPdXRCdWZmZXI7CisJCQkJCU1ndE1hY0hlYWRlckluaXQocEFkLCBwSGRyODAyMTEsIFNVQlRZUEVfTlVMTF9GVU5DLCAxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQkJCQlwSGRyODAyMTEtPkR1cmF0aW9uID0gMDsKKwkJCQkJcEhkcjgwMjExLT5GQy5UeXBlID0gQlRZUEVfREFUQTsKKwkJCQkJcEhkcjgwMjExLT5GQy5Qd3JNZ210ID0gKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSk7CisKKwkJCQkJLy8gU2VuZCB1c2luZyBwcmlvcml0eSBxdWV1ZQorCQkJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVTY2FuUmVxQWN0aW9uIC0tIFNlbmQgUFNNIERhdGEgZnJhbWVcbiIpKTsKKwkJCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwkJCQl9CisJCQl9CisKKwkJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7CisJCQlTdGF0dXMgPSBNTE1FX1NVQ0NFU1M7CisJCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfU0NBTl9DT05GLCAyLCAmU3RhdHVzKTsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKwkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyk7CisJfQorI2lmZGVmIFJUMjg3MAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCWVsc2UgaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSAmJiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkpCisJeworCQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOworCQlNbG1lQ250bENvbmZpcm0ocEFkLCBNVDJfU0NBTl9DT05GLCBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0UpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwllbHNlCisJeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCS8vIEJCUCBhbmQgUkYgYXJlIG5vdCBhY2Nlc3NpYmxlIGluIFBTIG1vZGUsIHdlIGhhcyB0byB3YWtlIHRoZW0gdXAgZmlyc3QKKwkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCisJCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKKworCQkJLy8gbGVhdmUgUFNNIGR1cmluZyBzY2FubmluZy4gb3RoZXJ3aXNlIHdlIG1heSBsb3N0IFByb2JlUnNwICYgQkVBQ09OCisJCQlpZiAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKQorCQkJCU1sbWVTZXRQc21CaXQocEFkLCBQV1JfQUNUSVZFKTsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwsIFRSVUUpOworCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJaWYgKHBBZC0+TWxtZUF1eC5DaGFubmVsID4gMTQpCisJCQl7CisJCQkJaWYgKChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKSAmJiBSYWRhckNoYW5uZWxDaGVjayhwQWQsIHBBZC0+TWxtZUF1eC5DaGFubmVsKSkKKwkJCQl7CisJCQkJCVNjYW5UeXBlID0gU0NBTl9QQVNTSVZFOworCQkJCQlTY2FuVGltZUluNWdDaGFubmVsID0gTUlOX0NIQU5ORUxfVElNRTsKKwkJCQl9CisJCQl9CisKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vIFJvZ2VyIHN5bmMgQ2FycmllcgorCQkJLy8gY2FycmllciBkZXRlY3Rpb24KKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9PSBUUlVFKQorCQkJeworCQkJCVNjYW5UeXBlID0gU0NBTl9QQVNTSVZFOworCQkJCVNjYW5UaW1lSW41Z0NoYW5uZWwgPSBNSU5fQ0hBTk5FTF9USU1FOworCQkJfQorI2VuZGlmIC8vIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8KKwkJfQorCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJLy9HbG9iYWwgY291bnRyeSBkb21haW4oY2gxLTExOmFjdGl2ZSBzY2FuLCBjaDEyLTE0IHBhc3NpdmUgc2NhbikKKwkJaWYgKChwQWQtPk1sbWVBdXguQ2hhbm5lbCA8PSAxNCkgJiYgKHBBZC0+TWxtZUF1eC5DaGFubmVsID49IDEyKSAmJiAoKHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24gJiAweDdmKSA9PSBSRUdJT05fMzFfQkdfQkFORCkpCisJCXsKKwkJCVNjYW5UeXBlID0gU0NBTl9QQVNTSVZFOworCQl9CisKKwkJLy8gV2UgbmVlZCB0byBzaG9ydGVuIGFjdGl2ZSBzY2FuIHRpbWUgaW4gb3JkZXIgZm9yIFdaQyBjb25uZWN0IGlzc3VlCisJCS8vIENobmFnZSB0aGUgY2hhbm5lbCBzY2FuIHRpbWUgZm9yIENJU0NPIHN0dWZmIGJhc2VkIG9uIGl0cyBJQVBQIGFubm91bmNlbWVudAorCQlpZiAoU2NhblR5cGUgPT0gRkFTVF9TQ0FOX0FDVElWRSkKKwkJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgRkFTVF9BQ1RJVkVfU0NBTl9USU1FKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJZWxzZSBpZiAoKChTY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX0FDVElWRSkgfHwKKwkJCQkoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19QQVNTSVZFKSB8fAorCQkJCShTY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX0NIQU5ORUxfTE9BRCkgfHwKKwkJCQkoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19OT0lTRSkpICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkKKwkJeworCQkJaWYgKHBBZC0+U3RhQ2ZnLkNDWFNjYW5UaW1lIDwgMjUpCisJCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCBwQWQtPlN0YUNmZy5DQ1hTY2FuVGltZSAqIDIpOworCQkJZWxzZQorCQkJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgcEFkLT5TdGFDZmcuQ0NYU2NhblRpbWUpOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCWVsc2UgLy8gbXVzdCBiZSBTQ0FOX1BBU1NJVkUgb3IgU0NBTl9BQ1RJVkUKKwkJeworCQkJaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFCR19NSVhFRCkKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQl8fCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBQkdOX01JWEVEKSB8fCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBR05fTUlYRUQpCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkpCisJCQl7CisJCQkJaWYgKHBBZC0+TWxtZUF1eC5DaGFubmVsID4gMTQpCisJCQkJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgU2NhblRpbWVJbjVnQ2hhbm5lbCk7CisJCQkJZWxzZQorCQkJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgTUlOX0NIQU5ORUxfVElNRSk7CisJCQl9CisJCQllbHNlCisJCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLCBNQVhfQ0hBTk5FTF9USU1FKTsKKwkJfQorCisJCWlmICgoU2NhblR5cGUgPT0gU0NBTl9BQ1RJVkUpIHx8IChTY2FuVHlwZSA9PSBGQVNUX1NDQU5fQUNUSVZFKSB8fAorCQkJKFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQUNUSVZFKSkKKwkJeworCQkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwkJCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIFNjYW5OZXh0Q2hhbm5lbCgpIGFsbG9jYXRlIG1lbW9yeSBmYWlsXG4iKSk7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQl7CisJCQkJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7CisJCQkJCVN0YXR1cyA9IE1MTUVfRkFJTF9OT19SRVNPVVJDRTsKKwkJCQkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1NDQU5fQ09ORiwgMiwgJlN0YXR1cyk7CisJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHNlbmQgYnJvYWRjYXN0IHByb2JlIHJlcXVlc3QgaWYgYWN0aXZlIHNjYW4gaXMgaW4gZWZmZWN0LgorCQkJaWYgKChTY2FuVHlwZSA9PSBTQ0FOX0FDVElWRSkgfHwgKFNjYW5UeXBlID09IEZBU1RfU0NBTl9BQ1RJVkUpCisJCQkJKQorCQkJCVNzaWRMZW4gPSBwQWQtPk1sbWVBdXguU3NpZExlbjsKKwkJCWVsc2UKKwkJCQlTc2lkTGVuID0gMDsKKworCQkJTWd0TWFjSGVhZGVySW5pdChwQWQsICZIZHI4MDIxMSwgU1VCVFlQRV9QUk9CRV9SRVEsIDAsIEJST0FEQ0FTVF9BRERSLCBCUk9BRENBU1RfQUREUik7CisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgICAgICZGcmFtZUxlbiwKKwkJCQkJCQkgIHNpemVvZihIRUFERVJfODAyXzExKSwgICAgJkhkcjgwMjExLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmU3NpZEllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmU3NpZExlbiwKKwkJCQkJCQkgIFNzaWRMZW4sCQkJICAgICAgICBwQWQtPk1sbWVBdXguU3NpZCwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgJlN1cFJhdGVJZSwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVMZW4sCisJCQkJCQkJICBwQWQtPkNvbW1vbkNmZy5TdXBSYXRlTGVuLCAgcEFkLT5Db21tb25DZmcuU3VwUmF0ZSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKworCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkV4dFJhdGVMZW4pCisJCQl7CisJCQkJVUxPTkcgVG1wOworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgICAmVG1wLAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRXh0UmF0ZUllLAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Db21tb25DZmcuRXh0UmF0ZUxlbiwKKwkJCQkJCQkJICBwQWQtPkNvbW1vbkNmZy5FeHRSYXRlTGVuLCAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5FeHRSYXRlLAorCQkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCQlGcmFtZUxlbiArPSBUbXA7CisJCQl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpCisJCQl7CisJCQkJVUxPTkcJVG1wOworCQkJCVVDSEFSCUh0TGVuOworCQkJCVVDSEFSCUJST0FEQ09NWzRdID0gezB4MCwgMHg5MCwgMHg0YywgMHgzM307CisjaWZkZWYgUlRfQklHX0VORElBTgorCQkJCUhUX0NBUEFCSUxJVFlfSUUgSHRDYXBhYmlsaXR5VG1wOworI2VuZGlmCisJCQkJaWYgKHBBZC0+YkJyb2FkQ29tSFQgPT0gVFJVRSkKKwkJCQl7CisJCQkJCUh0TGVuID0gcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiArIDQ7CisjaWZkZWYgUlRfQklHX0VORElBTgorCQkJCQlOZGlzTW92ZU1lbW9yeSgmSHRDYXBhYmlsaXR5VG1wLCAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwgU0laRV9IVF9DQVBfSUUpOworCQkJCQkqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkh0Q2FwSW5mbykgPSBTV0FQMTYoKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5IdENhcEluZm8pKTsKKwkJCQkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5FeHRIdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuRXh0SHRDYXBJbmZvKSk7CisKKwkJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICAmVG1wLAorCQkJCQkJCQkJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZXcGFJZSwKKwkJCQkJCQkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRMZW4sCisJCQkJCQkJCQk0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJST0FEQ09NWzBdLAorCQkJCQkJCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwgICAgICZIdENhcGFiaWxpdHlUbXAsCisJCQkJCQkJCQlFTkRfT0ZfQVJHUyk7CisjZWxzZQorCQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICZUbXAsCisJCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJldwYUllLAorCQkJCQkJCQkJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdExlbiwKKwkJCQkJCQkJCTQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQlJPQURDT01bMF0sCisJCQkJCQkJCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLCAgICAgJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksCisJCQkJCQkJCQlFTkRfT0ZfQVJHUyk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlIdExlbiA9IHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW47CisjaWZkZWYgUlRfQklHX0VORElBTgorCQkJCQlOZGlzTW92ZU1lbW9yeSgmSHRDYXBhYmlsaXR5VG1wLCAmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LCBTSVpFX0hUX0NBUF9JRSk7CisJCQkJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkh0Q2FwSW5mbykpOworCQkJCQkqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkV4dEh0Q2FwSW5mbykgPSBTV0FQMTYoKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5FeHRIdENhcEluZm8pKTsKKworCQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICZUbXAsCisJCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0Q2FwSWUsCisJCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0TGVuLAorCQkJCQkJCQkJSHRMZW4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdENhcGFiaWxpdHlUbXAsCisJCQkJCQkJCQlFTkRfT0ZfQVJHUyk7CisjZWxzZQorCQkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICZUbXAsCisJCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0Q2FwSWUsCisJCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0TGVuLAorCQkJCQkJCQkJSHRMZW4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksCisJCQkJCQkJCQlFTkRfT0ZfQVJHUyk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCQkJCX0KKwkJCQlGcmFtZUxlbiArPSBUbXA7CisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5iMjA0MENvZXhpc3RTY2FuU3VwID09IDEpCisJCQkJeworCQkJCQlVTE9ORwkJVG1wOworCQkJCQlIdExlbiA9IDE7CisJCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgICAmVG1wLAorCQkJCQkJCQkJICAxLAkJCQkJJkV4dEh0Q2FwSWUsCisJCQkJCQkJCQkgIDEsCQkJCQkmSHRMZW4sCisJCQkJCQkJCQkgIDEsICAgICAgICAgIAkJCSZwQWQtPkNvbW1vbkNmZy5CU1NDb2V4aXN0MjA0MC53b3JkLAorCQkJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisKKwkJCQkJRnJhbWVMZW4gKz0gVG1wOworCQkJCX0KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKworCQkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQl9CisKKwkJLy8gRm9yIFNDQU5fQ0lTQ09fUEFTU0lWRSwgZG8gbm90aGluZyBhbmQgc2lsZW50bHkgd2FpdCBmb3IgYmVhY29uIG9yIG90aGVyIHByb2JlIHJlcG9uc2UKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNDQU5fTElTVEVOOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJfQorfQorCitWT0lEIE1ndFByb2JSZXFNYWNIZWFkZXJJbml0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIE9VVCBQSEVBREVSXzgwMl8xMSBwSGRyODAyMTEsCisJSU4gVUNIQVIgU3ViVHlwZSwKKwlJTiBVQ0hBUiBUb0RzLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gUFVDSEFSIHBCc3NpZCkKK3sKKwlOZGlzWmVyb01lbW9yeShwSGRyODAyMTEsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisKKwlwSGRyODAyMTEtPkZDLlR5cGUgPSBCVFlQRV9NR01UOworCXBIZHI4MDIxMS0+RkMuU3ViVHlwZSA9IFN1YlR5cGU7CisJaWYgKFN1YlR5cGUgPT0gU1VCVFlQRV9BQ0spCisJCXBIZHI4MDIxMS0+RkMuVHlwZSA9IEJUWVBFX0NOVEw7CisJcEhkcjgwMjExLT5GQy5Ub0RzID0gVG9EczsKKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjEsIHBEQSk7CisJQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKwlDT1BZX01BQ19BRERSKHBIZHI4MDIxMS0+QWRkcjMsIHBCc3NpZCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX3dwYS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vY21tX3dwYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYzMzMmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9jbW1fd3BhLmMKQEAgLTAsMCArMSwxNjA2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXdwYS5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSmFuCUxlZQkJMDMtMDctMjIJCUluaXRpYWwKKwlQYXVsIExpbgkwMy0xMS0yOAkJTW9kaWZ5IGZvciBzdXBwbGljYW50CisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorLy8gV1BBIE9VSQorVUNIQVIJCU9VSV9XUEFfTk9ORV9BS01bNF0JCT0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDB9OworVUNIQVIgICAgICAgT1VJX1dQQV9WRVJTSU9OWzRdICAgICAgPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMX07CitVQ0hBUiAgICAgICBPVUlfV1BBX1RLSVBbNF0gICAgID0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDJ9OworVUNIQVIgICAgICAgT1VJX1dQQV9DQ01QWzRdICAgICA9IHsweDAwLCAweDUwLCAweEYyLCAweDA0fTsKK1VDSEFSICAgICAgIE9VSV9XUEFfODAyMVhfQUtNWzRdCT0gezB4MDAsIDB4NTAsIDB4RjIsIDB4MDF9OworVUNIQVIgICAgICAgT1VJX1dQQV9QU0tfQUtNWzRdICAgICAgPSB7MHgwMCwgMHg1MCwgMHhGMiwgMHgwMn07CisvLyBXUEEyIE9VSQorVUNIQVIgICAgICAgT1VJX1dQQTJfV0VQNDBbNF0gICA9IHsweDAwLCAweDBGLCAweEFDLCAweDAxfTsKK1VDSEFSICAgICAgIE9VSV9XUEEyX1RLSVBbNF0gICAgICAgID0gezB4MDAsIDB4MEYsIDB4QUMsIDB4MDJ9OworVUNIQVIgICAgICAgT1VJX1dQQTJfQ0NNUFs0XSAgICAgICAgPSB7MHgwMCwgMHgwRiwgMHhBQywgMHgwNH07CitVQ0hBUiAgICAgICBPVUlfV1BBMl84MDIxWF9BS01bNF0gICA9IHsweDAwLCAweDBGLCAweEFDLCAweDAxfTsKK1VDSEFSICAgICAgIE9VSV9XUEEyX1BTS19BS01bNF0gICAJPSB7MHgwMCwgMHgwRiwgMHhBQywgMHgwMn07CisvLyBNU0EgT1VJCitVQ0hBUiAgIAlPVUlfTVNBXzgwMjFYX0FLTVs0XSAgICA9IHsweDAwLCAweDBGLCAweEFDLCAweDA1fTsJCS8vIE5vdCB5ZXQgZmluYWwgLSBJRUVFIDgwMi4xMXMtRDEuMDYKK1VDSEFSICAgCU9VSV9NU0FfUFNLX0FLTVs0XSAgIAk9IHsweDAwLCAweDBGLCAweEFDLCAweDA2fTsJCS8vIE5vdCB5ZXQgZmluYWwgLSBJRUVFIDgwMi4xMXMtRDEuMDYKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVRoZSBwc2V1ZG8tcmFuZG9tIGZ1bmN0aW9uKFBSRikgdGhhdCBoYXNoZXMgdmFyaW91cyBpbnB1dHMgdG8KKwkJZGVyaXZlIGEgcHNldWRvLXJhbmRvbSB2YWx1ZS4gVG8gYWRkIGxpdmVuZXNzIHRvIHRoZSBwc2V1ZG8tcmFuZG9tCisJCXZhbHVlLCBhIG5vbmNlIHNob3VsZCBiZSBvbmUgb2YgdGhlIGlucHV0cy4KKworCQlJdCBpcyB1c2VkIHRvIGdlbmVyYXRlIFBUSywgR1RLIG9yIHNvbWUgc3BlY2lmaWMgcmFuZG9tIHZhbHVlLgorCisJQXJndW1lbnRzOgorCQlVQ0hBUgkqa2V5LAkJLQl0aGUga2V5IG1hdGVyaWFsIGZvciBITUFDX1NIQTEgdXNlCisJCUlOVAkJa2V5X2xlbgkJLQl0aGUgbGVuZ3RoIG9mIGtleQorCQlVQ0hBUgkqcHJlZml4CQktCWEgcHJlZml4IGxhYmVsCisJCUlOVAkJcHJlZml4X2xlbgktCXRoZSBsZW5ndGggb2YgdGhlIGxhYmVsCisJCVVDSEFSCSpkYXRhCQktCWEgc3BlY2lmaWMgZGF0YSB3aXRoIHZhcmlhYmxlIGxlbmd0aAorCQlJTlQJCWRhdGFfbGVuCS0JdGhlIGxlbmd0aCBvZiBhIHNwZWNpZmljIGRhdGEKKwkJSU5UCQlsZW4JCQktCXRoZSBvdXRwdXQgbGVuZ2h0CisKKwlSZXR1cm4gVmFsdWU6CisJCVVDSEFSCSpvdXRwdXQJCS0JdGhlIGNhbGN1bGF0ZWQgcmVzdWx0CisKKwlOb3RlOgorCQk4MDIuMTFpLTIwMDQJQW5uZXggSC4zCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVBSRigKKwlJTglVQ0hBUgkqa2V5LAorCUlOCUlOVAkJa2V5X2xlbiwKKwlJTglVQ0hBUgkqcHJlZml4LAorCUlOCUlOVAkJcHJlZml4X2xlbiwKKwlJTglVQ0hBUgkqZGF0YSwKKwlJTglJTlQJCWRhdGFfbGVuLAorCU9VVAlVQ0hBUgkqb3V0cHV0LAorCUlOCUlOVAkJbGVuKQoreworCUlOVAkJaTsKKyAgICBVQ0hBUiAgICppbnB1dDsKKwlJTlQJCWN1cnJlbnRpbmRleCA9IDA7CisJSU5UCQl0b3RhbF9sZW47CisKKwkvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIGlucHV0CisJb3NfYWxsb2NfbWVtKE5VTEwsIChQVUNIQVIgKikmaW5wdXQsIDEwMjQpOworCisgICAgaWYgKGlucHV0ID09IE5VTEwpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIhISFQUkY6IG5vIG1lbW9yeSEhIVxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisJLy8gR2VuZXJhdGUgY29uY2F0ZW5hdGlvbiBpbnB1dAorCU5kaXNNb3ZlTWVtb3J5KGlucHV0LCBwcmVmaXgsIHByZWZpeF9sZW4pOworCisJLy8gQ29uY2F0ZW5hdGUgYSBzaW5nbGUgb2N0ZXQgY29udGFpbmluZyAwCisJaW5wdXRbcHJlZml4X2xlbl0gPQkwOworCisJLy8gQ29uY2F0ZW5hdGUgc3BlY2lmaWMgZGF0YQorCU5kaXNNb3ZlTWVtb3J5KCZpbnB1dFtwcmVmaXhfbGVuICsgMV0sIGRhdGEsIGRhdGFfbGVuKTsKKwl0b3RhbF9sZW4gPQlwcmVmaXhfbGVuICsgMSArIGRhdGFfbGVuOworCisJLy8gQ29uY2F0ZW5hdGUgYSBzaW5nbGUgb2N0ZXQgY29udGFpbmluZyAwCisJLy8gVGhpcyBvY3RldCBzaGFsbCBiZSB1cGRhdGUgbGF0ZXIKKwlpbnB1dFt0b3RhbF9sZW5dID0gMDsKKwl0b3RhbF9sZW4rKzsKKworCS8vIEl0ZXJhdGUgdG8gY2FsY3VsYXRlIHRoZSByZXN1bHQgYnkgaG1hYy1zaGEtMQorCS8vIFRoZW4gY29uY2F0ZW5hdGUgdG8gbGFzdCByZXN1bHQKKwlmb3IJKGkgPSAwOwlpIDwJKGxlbiArIDE5KSAvIDIwOyBpKyspCisJeworCQlITUFDX1NIQTEoaW5wdXQsIHRvdGFsX2xlbiwJa2V5LCBrZXlfbGVuLCAmb3V0cHV0W2N1cnJlbnRpbmRleF0pOworCQljdXJyZW50aW5kZXggKz0JMjA7CisKKwkJLy8gdXBkYXRlIHRoZSBsYXN0IG9jdGV0CisJCWlucHV0W3RvdGFsX2xlbiAtIDFdKys7CisJfQorICAgIG9zX2ZyZWVfbWVtKE5VTEwsIGlucHV0KTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUl0IHV0aWxpemVzIFBSRi0zODQgb3IgUFJGLTUxMiB0byBkZXJpdmUgc2Vzc2lvbi1zcGVjaWZpYyBrZXlzIGZyb20gYSBQTUsuCisJCUl0IHNoYWxsIGJlIGNhbGxlZCBieSA0LXdheSBoYW5kc2hha2UgcHJvY2Vzc2luZy4KKworCUFyZ3VtZW50czoKKwkJcEFkIAktCXBvaW50ZXIgdG8gb3VyIHBBZGFwdGVyIGNvbnRleHQKKwkJUE1LCQktCXBvaW50ZXIgdG8gUE1LCisJCUFOb25jZQktCXBvaW50ZXIgdG8gQU5vbmNlCisJCUFBCQktCXBvaW50ZXIgdG8gQXV0aGVudGljYXRvciBBZGRyZXNzCisJCVNOb25jZQktCXBvaW50ZXIgdG8gU05vbmNlCisJCVNBCQktCXBvaW50ZXIgdG8gU3VwcGxpY2FudCBBZGRyZXNzCisJCWxlbgkJLQlpbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIFBUSyAob2N0ZXQpCisKKwlSZXR1cm4gVmFsdWU6CisJCU91dHB1dAkJcG9pbnRlciB0byB0aGUgUFRLCisKKwlOb3RlOgorCQlSZWZlciB0byBJRUVFIDgwMi4xMWktMjAwNCA4LjUuMS4yCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFdwYUNvdW50UFRLKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCSpQTUssCisJSU4JVUNIQVIJKkFOb25jZSwKKwlJTglVQ0hBUgkqQUEsCisJSU4JVUNIQVIJKlNOb25jZSwKKwlJTglVQ0hBUgkqU0EsCisJT1VUCVVDSEFSCSpvdXRwdXQsCisJSU4JVUlOVAlsZW4pCit7CisJVUNIQVIJY29uY2F0ZW5hdGlvbls3Nl07CisJVUlOVAlDdXJyUG9zID0gMDsKKwlVQ0hBUgl0ZW1wWzMyXTsKKwlVQ0hBUglQcmVmaXhbXSA9IHsnUCcsICdhJywgJ2knLCAncicsICd3JywgJ2knLCAncycsICdlJywgJyAnLCAnaycsICdlJywgJ3knLCAnICcsCisJCQkJCQknZScsICd4JywgJ3AnLCAnYScsICduJywgJ3MnLCAnaScsICdvJywgJ24nfTsKKworCS8vIGluaXRpYXRlIHRoZSBjb25jYXRlbmF0aW9uIGlucHV0CisJTmRpc1plcm9NZW1vcnkodGVtcCwgc2l6ZW9mKHRlbXApKTsKKwlOZGlzWmVyb01lbW9yeShjb25jYXRlbmF0aW9uLCA3Nik7CisKKwkvLyBHZXQgc21hbGxlciBhZGRyZXNzCisJaWYgKFJUTVBDb21wYXJlTWVtb3J5KFNBLCBBQSwgNikgPT0gMSkKKwkJTmRpc01vdmVNZW1vcnkoY29uY2F0ZW5hdGlvbiwgQUEsIDYpOworCWVsc2UKKwkJTmRpc01vdmVNZW1vcnkoY29uY2F0ZW5hdGlvbiwgU0EsIDYpOworCUN1cnJQb3MgKz0gNjsKKworCS8vIEdldCBsYXJnZXIgYWRkcmVzcworCWlmIChSVE1QQ29tcGFyZU1lbW9yeShTQSwgQUEsIDYpID09IDEpCisJCU5kaXNNb3ZlTWVtb3J5KCZjb25jYXRlbmF0aW9uW0N1cnJQb3NdLCBTQSwgNik7CisJZWxzZQorCQlOZGlzTW92ZU1lbW9yeSgmY29uY2F0ZW5hdGlvbltDdXJyUG9zXSwgQUEsIDYpOworCisJLy8gc3RvcmUgdGhlIGxhcmdlciBtYWMgYWRkcmVzcyBmb3IgYmFja3dhcmQgY29tcGF0aWJsZSBvZgorCS8vIHJhbGluayBwcm9wcmlldGFyeSBTVEEta2V5IGlzc3VlCisJTmRpc01vdmVNZW1vcnkodGVtcCwgJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIE1BQ19BRERSX0xFTik7CisJQ3VyclBvcyArPSA2OworCisJLy8gR2V0IHNtYWxsZXIgTm9uY2UKKwlpZiAoUlRNUENvbXBhcmVNZW1vcnkoQU5vbmNlLCBTTm9uY2UsIDMyKSA9PSAwKQorCQlOZGlzTW92ZU1lbW9yeSgmY29uY2F0ZW5hdGlvbltDdXJyUG9zXSwgdGVtcCwgMzIpOwkvLyBwYXRjaCBmb3IgcmFsaW5rIHByb3ByaWV0YXJ5IFNUQS1rZXkgaXNzdWUKKwllbHNlIGlmIChSVE1QQ29tcGFyZU1lbW9yeShBTm9uY2UsIFNOb25jZSwgMzIpID09IDEpCisJCU5kaXNNb3ZlTWVtb3J5KCZjb25jYXRlbmF0aW9uW0N1cnJQb3NdLCBTTm9uY2UsIDMyKTsKKwllbHNlCisJCU5kaXNNb3ZlTWVtb3J5KCZjb25jYXRlbmF0aW9uW0N1cnJQb3NdLCBBTm9uY2UsIDMyKTsKKwlDdXJyUG9zICs9IDMyOworCisJLy8gR2V0IGxhcmdlciBOb25jZQorCWlmIChSVE1QQ29tcGFyZU1lbW9yeShBTm9uY2UsIFNOb25jZSwgMzIpID09IDApCisJCU5kaXNNb3ZlTWVtb3J5KCZjb25jYXRlbmF0aW9uW0N1cnJQb3NdLCB0ZW1wLCAzMik7CS8vIHBhdGNoIGZvciByYWxpbmsgcHJvcHJpZXRhcnkgU1RBLWtleSBpc3N1ZQorCWVsc2UgaWYgKFJUTVBDb21wYXJlTWVtb3J5KEFOb25jZSwgU05vbmNlLCAzMikgPT0gMSkKKwkJTmRpc01vdmVNZW1vcnkoJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIEFOb25jZSwgMzIpOworCWVsc2UKKwkJTmRpc01vdmVNZW1vcnkoJmNvbmNhdGVuYXRpb25bQ3VyclBvc10sIFNOb25jZSwgMzIpOworCUN1cnJQb3MgKz0gMzI7CisKKwloZXhfZHVtcCgiY29uY2F0ZW5hdGlvbj0iLCBjb25jYXRlbmF0aW9uLCA3Nik7CisKKwkvLyBVc2UgUFJGIHRvIGdlbmVyYXRlIFBUSworCVBSRihQTUssIExFTl9NQVNURVJfS0VZLCBQcmVmaXgsIDIyLCBjb25jYXRlbmF0aW9uLCA3Niwgb3V0cHV0LCBsZW4pOworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlHZW5lcmF0ZSByYW5kb20gbnVtYmVyIGJ5IHNvZnR3YXJlLgorCisJQXJndW1lbnRzOgorCQlwQWQJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAorCQltYWNBZGRyCS0JcG9pbnRlciB0byBsb2NhbCBNQUMgYWRkcmVzcworCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKwkJODAyLjFpaS0yMDA0ICBBbm5leCBILjUKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJR2VuUmFuZG9tKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJKm1hY0FkZHIsCisJT1VUCVVDSEFSCQkJKnJhbmRvbSkKK3sKKwlJTlQJCWksIGN1cnI7CisJVUNIQVIJbG9jYWxbODBdLCBLZXlDb3VudGVyWzMyXTsKKwlVQ0hBUglyZXN1bHRbODBdOworCVVMT05HCUN1cnJlbnRUaW1lOworCVVDSEFSCXByZWZpeFtdID0geydJJywgJ24nLCAnaScsICd0JywgJyAnLCAnQycsICdvJywgJ3UnLCAnbicsICd0JywgJ2UnLCAncid9OworCisJLy8gWmVybyB0aGUgcmVsYXRlZCBpbmZvcm1hdGlvbgorCU5kaXNaZXJvTWVtb3J5KHJlc3VsdCwgODApOworCU5kaXNaZXJvTWVtb3J5KGxvY2FsLCA4MCk7CisJTmRpc1plcm9NZW1vcnkoS2V5Q291bnRlciwgMzIpOworCisJZm9yCShpID0gMDsJaSA8CTMyOwlpKyspCisJeworCQkvLyBjb3B5IHRoZSBsb2NhbCBNQUMgYWRkcmVzcworCQlDT1BZX01BQ19BRERSKGxvY2FsLCBtYWNBZGRyKTsKKwkJY3VyciA9CU1BQ19BRERSX0xFTjsKKworCQkvLyBjb25jYXRlbmF0ZSB0aGUgY3VycmVudCB0aW1lCisJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJkN1cnJlbnRUaW1lKTsKKwkJTmRpc01vdmVNZW1vcnkoJmxvY2FsW2N1cnJdLCAgJkN1cnJlbnRUaW1lLAlzaXplb2YoQ3VycmVudFRpbWUpKTsKKwkJY3VyciArPQlzaXplb2YoQ3VycmVudFRpbWUpOworCisJCS8vIGNvbmNhdGVuYXRlIHRoZSBsYXN0IHJlc3VsdAorCQlOZGlzTW92ZU1lbW9yeSgmbG9jYWxbY3Vycl0sICByZXN1bHQsIDMyKTsKKwkJY3VyciArPQkzMjsKKworCQkvLyBjb25jYXRlbmF0ZSBhIHZhcmlhYmxlCisJCU5kaXNNb3ZlTWVtb3J5KCZsb2NhbFtjdXJyXSwgICZpLCAgMik7CisJCWN1cnIgKz0JMjsKKworCQkvLyBjYWxjdWxhdGUgdGhlIHJlc3VsdAorCQlQUkYoS2V5Q291bnRlciwgMzIsIHByZWZpeCwxMiwgbG9jYWwsIGN1cnIsIHJlc3VsdCwgMzIpOworCX0KKworCU5kaXNNb3ZlTWVtb3J5KHJhbmRvbSwgcmVzdWx0LAkzMik7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlCdWlsZCBjaXBoZXIgc3VpdGUgaW4gUlNOLUlFLgorCQlJdCBvbmx5IHNoYWxsIGJlIGNhbGxlZCBieSBSVE1QTWFrZVJTTklFLgorCisJQXJndW1lbnRzOgorCQlwQWQJCQktCXBvaW50ZXIgdG8gb3VyIHBBZGFwdGVyIGNvbnRleHQKKyAgICAJRWxlbWVudElECS0JaW5kaWNhdGUgdGhlIFdQQTEgb3IgV1BBMgorICAgIAlXZXBTdGF0dXMJLQlpbmRpY2F0ZSB0aGUgZW5jcnlwdGlvbiB0eXBlCisJCWJNaXhDaXBoZXIJLQlhIGJvb2xlYW4gdG8gaW5kaWNhdGUgdGhlIHBhaXJ3aXNlIGNpcGhlciBhbmQgZ3JvdXAKKwkJCQkJCWNpcGhlciBhcmUgdGhlIHNhbWUgb3Igbm90CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RhdGljIFZPSUQgUlRNUEluc2VydFJzbkllQ2lwaGVyKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOCVVDSEFSCQkJRWxlbWVudElELAorCUlOCVVJTlQJCQlXZXBTdGF0dXMsCisJSU4JQk9PTEVBTgkJCWJNaXhDaXBoZXIsCisJSU4JVUNIQVIJCQlGbGV4aWJsZUNpcGhlciwKKwlPVVQJUFVDSEFSCQkJcFJzbkllLAorCU9VVAlVQ0hBUgkJCSpyc25fbGVuKQoreworCVVDSEFSCVBhaXJ3aXNlQ250OworCisJKnJzbl9sZW4gPSAwOworCisJLy8gZGVjaWRlIFdQQTIgb3IgV1BBMQorCWlmIChFbGVtZW50SUQgPT0gV3BhMkllKQorCXsKKwkJUlNOSUUyCSpwUnNuaWVfY2lwaGVyID0gKFJTTklFMiopcFJzbkllOworCisJCS8vIEFzc2lnbiB0aGUgdmVyc29uIGFzIDEKKwkJcFJzbmllX2NpcGhlci0+dmVyc2lvbiA9IDE7CisKKyAgICAgICAgc3dpdGNoIChXZXBTdGF0dXMpCisgICAgICAgIHsKKyAgICAgICAgCS8vIFRLSVAgbW9kZQorICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOgorICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm1jYXN0LCBPVUlfV1BBMl9US0lQLCA0KTsKKyAgICAgICAgICAgICAgICBwUnNuaWVfY2lwaGVyLT51Y291bnQgPSAxOworICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPnVjYXN0WzBdLm91aSwgT1VJX1dQQTJfVEtJUCwgNCk7CisgICAgICAgICAgICAgICAgKnJzbl9sZW4gPSBzaXplb2YoUlNOSUUyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJLy8gQUVTIG1vZGUKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDoKKwkJCQlpZiAoYk1peENpcGhlcikKKwkJCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEEyX1RLSVAsIDQpOworCQkJCWVsc2UKKwkJCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEEyX0NDTVAsIDQpOworICAgICAgICAgICAgICAgIHBSc25pZV9jaXBoZXItPnVjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLCBPVUlfV1BBMl9DQ01QLCA0KTsKKyAgICAgICAgICAgICAgICAqcnNuX2xlbiA9IHNpemVvZihSU05JRTIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQkvLyBUS0lQLUFFUyBtaXggbW9kZQorICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjRFbmFibGVkOgorICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm1jYXN0LCBPVUlfV1BBMl9US0lQLCA0KTsKKworCQkJCVBhaXJ3aXNlQ250ID0gMTsKKwkJCQkvLyBJbnNlcnQgV1BBMiBUS0lQIGFzIHRoZSBmaXJzdCBwYWlyd2lzZSBjaXBoZXIKKwkJCQlpZiAoTUlYX0NJUEhFUl9XUEEyX1RLSVBfT04oRmxleGlibGVDaXBoZXIpKQorCQkJCXsKKyAgICAgICAgICAgICAgICAJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLCBPVUlfV1BBMl9US0lQLCA0KTsKKwkJCQkJLy8gSW5zZXJ0IFdQQTIgQUVTIGFzIHRoZSBzZWNvbmRhcnkgcGFpcndpc2UgY2lwaGVyCisJCQkJCWlmIChNSVhfQ0lQSEVSX1dQQTJfQUVTX09OKEZsZXhpYmxlQ2lwaGVyKSkKKwkJCQkJeworICAgICAgICAgICAgICAgIAkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpICsgNCwgT1VJX1dQQTJfQ0NNUCwgNCk7CisJCQkJCQlQYWlyd2lzZUNudCA9IDI7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy8gSW5zZXJ0IFdQQTIgQUVTIGFzIHRoZSBmaXJzdCBwYWlyd2lzZSBjaXBoZXIKKwkJCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLCBPVUlfV1BBMl9DQ01QLCA0KTsKKwkJCQl9CisKKyAgICAgICAgICAgICAgICBwUnNuaWVfY2lwaGVyLT51Y291bnQgPSBQYWlyd2lzZUNudDsKKyAgICAgICAgICAgICAgICAqcnNuX2xlbiA9IHNpemVvZihSU05JRTIpICsgKDQgKiAoUGFpcndpc2VDbnQgLSAxKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworCQkvLyBzd2FwIGZvciBiaWctZW5kaWFuIHBsYXRmb3JtCisJCXBSc25pZV9jaXBoZXItPnZlcnNpb24gPSBjcHUybGUxNihwUnNuaWVfY2lwaGVyLT52ZXJzaW9uKTsKKwkgICAgcFJzbmllX2NpcGhlci0+dWNvdW50ID0gY3B1MmxlMTYocFJzbmllX2NpcGhlci0+dWNvdW50KTsKKwl9CisJZWxzZQorCXsKKwkJUlNOSUUJKnBSc25pZV9jaXBoZXIgPSAoUlNOSUUqKXBSc25JZTsKKworCQkvLyBBc3NpZ24gT1VJIGFuZCB2ZXJzaW9uCisJCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm91aSwgT1VJX1dQQV9WRVJTSU9OLCA0KTsKKyAgICAgICAgcFJzbmllX2NpcGhlci0+dmVyc2lvbiA9IDE7CisKKwkJc3dpdGNoIChXZXBTdGF0dXMpCisJCXsKKwkJCS8vIFRLSVAgbW9kZQorICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOgorICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPm1jYXN0LCBPVUlfV1BBX1RLSVAsIDQpOworICAgICAgICAgICAgICAgIHBSc25pZV9jaXBoZXItPnVjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLCBPVUlfV1BBX1RLSVAsIDQpOworICAgICAgICAgICAgICAgICpyc25fbGVuID0gc2l6ZW9mKFJTTklFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJLy8gQUVTIG1vZGUKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDoKKwkJCQlpZiAoYk1peENpcGhlcikKKwkJCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEFfVEtJUCwgNCk7CisJCQkJZWxzZQorCQkJCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT5tY2FzdCwgT1VJX1dQQV9DQ01QLCA0KTsKKyAgICAgICAgICAgICAgICBwUnNuaWVfY2lwaGVyLT51Y291bnQgPSAxOworICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBSc25pZV9jaXBoZXItPnVjYXN0WzBdLm91aSwgT1VJX1dQQV9DQ01QLCA0KTsKKyAgICAgICAgICAgICAgICAqcnNuX2xlbiA9IHNpemVvZihSU05JRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCS8vIFRLSVAtQUVTIG1peCBtb2RlCisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFFbmNyeXB0aW9uNEVuYWJsZWQ6CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+bWNhc3QsIE9VSV9XUEFfVEtJUCwgNCk7CisKKwkJCQlQYWlyd2lzZUNudCA9IDE7CisJCQkJLy8gSW5zZXJ0IFdQQSBUS0lQIGFzIHRoZSBmaXJzdCBwYWlyd2lzZSBjaXBoZXIKKwkJCQlpZiAoTUlYX0NJUEhFUl9XUEFfVEtJUF9PTihGbGV4aWJsZUNpcGhlcikpCisJCQkJeworICAgICAgICAgICAgICAgIAlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWksIE9VSV9XUEFfVEtJUCwgNCk7CisJCQkJCS8vIEluc2VydCBXUEEgQUVTIGFzIHRoZSBzZWNvbmRhcnkgcGFpcndpc2UgY2lwaGVyCisJCQkJCWlmIChNSVhfQ0lQSEVSX1dQQV9BRVNfT04oRmxleGlibGVDaXBoZXIpKQorCQkJCQl7CisgICAgICAgICAgICAgICAgCQlOZGlzTW92ZU1lbW9yeShwUnNuaWVfY2lwaGVyLT51Y2FzdFswXS5vdWkgKyA0LCBPVUlfV1BBX0NDTVAsIDQpOworCQkJCQkJUGFpcndpc2VDbnQgPSAyOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vIEluc2VydCBXUEEgQUVTIGFzIHRoZSBmaXJzdCBwYWlyd2lzZSBjaXBoZXIKKwkJCQkJTmRpc01vdmVNZW1vcnkocFJzbmllX2NpcGhlci0+dWNhc3RbMF0ub3VpLCBPVUlfV1BBX0NDTVAsIDQpOworCQkJCX0KKworICAgICAgICAgICAgICAgIHBSc25pZV9jaXBoZXItPnVjb3VudCA9IFBhaXJ3aXNlQ250OworICAgICAgICAgICAgICAgICpyc25fbGVuID0gc2l6ZW9mKFJTTklFKSArICg0ICogKFBhaXJ3aXNlQ250IC0gMSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKwkJLy8gc3dhcCBmb3IgYmlnLWVuZGlhbiBwbGF0Zm9ybQorCQlwUnNuaWVfY2lwaGVyLT52ZXJzaW9uID0gY3B1MmxlMTYocFJzbmllX2NpcGhlci0+dmVyc2lvbik7CisJICAgIHBSc25pZV9jaXBoZXItPnVjb3VudCA9IGNwdTJsZTE2KHBSc25pZV9jaXBoZXItPnVjb3VudCk7CisJfQorCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlCdWlsZCBBS00gc3VpdGUgaW4gUlNOLUlFLgorCQlJdCBvbmx5IHNoYWxsIGJlIGNhbGxlZCBieSBSVE1QTWFrZVJTTklFLgorCisJQXJndW1lbnRzOgorCQlwQWQJCQktCXBvaW50ZXIgdG8gb3VyIHBBZGFwdGVyIGNvbnRleHQKKyAgICAJRWxlbWVudElECS0JaW5kaWNhdGUgdGhlIFdQQTEgb3IgV1BBMgorICAgIAlBdXRoTW9kZQktCWluZGljYXRlIHRoZSBhdXRoZW50aWNhdGlvbiBtb2RlCisJCWFwaWR4CQktCWluZGljYXRlIHRoZSBpbnRlcmZhY2UgaW5kZXgKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgVk9JRCBSVE1QSW5zZXJ0UnNuSWVBS00oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JVUNIQVIJCQlFbGVtZW50SUQsCisJSU4JVUlOVAkJCUF1dGhNb2RlLAorCUlOCVVDSEFSCQkJYXBpZHgsCisJT1VUCVBVQ0hBUgkJCXBSc25JZSwKKwlPVVQJVUNIQVIJCQkqcnNuX2xlbikKK3sKKwlSU05JRV9BVVRICQkqcFJzbmllX2F1dGg7CisKKwlwUnNuaWVfYXV0aCA9IChSU05JRV9BVVRIKikocFJzbkllICsgKCpyc25fbGVuKSk7CisKKwkvLyBkZWNpZGUgV1BBMiBvciBXUEExCisJaWYgKEVsZW1lbnRJRCA9PSBXcGEySWUpCisJeworCQlzd2l0Y2ggKEF1dGhNb2RlKQorICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTI6CisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTFXUEEyOgorICAgICAgICAgICAgICAgIHBSc25pZV9hdXRoLT5hY291bnQgPSAxOworICAgICAgICAgICAgICAgIAlOZGlzTW92ZU1lbW9yeShwUnNuaWVfYXV0aC0+YXV0aFswXS5vdWksIE9VSV9XUEEyXzgwMjFYX0FLTSwgNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSzoKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMVBTS1dQQTJQU0s6CisgICAgICAgICAgICAgICAgcFJzbmllX2F1dGgtPmFjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgCU5kaXNNb3ZlTWVtb3J5KHBSc25pZV9hdXRoLT5hdXRoWzBdLm91aSwgT1VJX1dQQTJfUFNLX0FLTSwgNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwl9CisJZWxzZQorCXsKKwkJc3dpdGNoIChBdXRoTW9kZSkKKyAgICAgICAgeworICAgICAgICAgICAgY2FzZSBOZGlzODAyXzExQXV0aE1vZGVXUEE6CisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTFXUEEyOgorICAgICAgICAgICAgICAgIHBSc25pZV9hdXRoLT5hY291bnQgPSAxOworICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBSc25pZV9hdXRoLT5hdXRoWzBdLm91aSwgT1VJX1dQQV84MDIxWF9BS00sIDQpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSzoKKyAgICAgICAgICAgIGNhc2UgTmRpczgwMl8xMUF1dGhNb2RlV1BBMVBTS1dQQTJQU0s6CisgICAgICAgICAgICAgICAgcFJzbmllX2F1dGgtPmFjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2F1dGgtPmF1dGhbMF0ub3VpLCBPVUlfV1BBX1BTS19BS00sIDQpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQljYXNlIE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmU6CisgICAgICAgICAgICAgICAgcFJzbmllX2F1dGgtPmFjb3VudCA9IDE7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocFJzbmllX2F1dGgtPmF1dGhbMF0ub3VpLCBPVUlfV1BBX05PTkVfQUtNLCA0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCX0KKworCXBSc25pZV9hdXRoLT5hY291bnQgPSBjcHUybGUxNihwUnNuaWVfYXV0aC0+YWNvdW50KTsKKworCSgqcnNuX2xlbikgKz0gc2l6ZW9mKFJTTklFX0FVVEgpOwkvLyB1cGRhdGUgY3VycmVudCBSU05JRSBsZW5ndGgKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQnVpbGQgY2FwYWJpbGl0eSBpbiBSU04tSUUuCisJCUl0IG9ubHkgc2hhbGwgYmUgY2FsbGVkIGJ5IFJUTVBNYWtlUlNOSUUuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCS0JcG9pbnRlciB0byBvdXIgcEFkYXB0ZXIgY29udGV4dAorICAgIAlFbGVtZW50SUQJLQlpbmRpY2F0ZSB0aGUgV1BBMSBvciBXUEEyCisJCWFwaWR4CQktCWluZGljYXRlIHRoZSBpbnRlcmZhY2UgaW5kZXgKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgVk9JRCBSVE1QSW5zZXJ0UnNuSWVDYXAoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JVUNIQVIJCQlFbGVtZW50SUQsCisJSU4JVUNIQVIJCQlhcGlkeCwKKwlPVVQJUFVDSEFSCQkJcFJzbkllLAorCU9VVAlVQ0hBUgkJCSpyc25fbGVuKQoreworCVJTTl9DQVBBQklMSVRJRVMgICAgKnBSU05fQ2FwOworCisJLy8gaXQgY291bGQgYmUgaWdub3JlZCBpbiBXUEExIG1vZGUKKwlpZiAoRWxlbWVudElEID09IFdwYUllKQorCQlyZXR1cm47CisKKwlwUlNOX0NhcCA9IChSU05fQ0FQQUJJTElUSUVTKikocFJzbkllICsgKCpyc25fbGVuKSk7CisKKworCXBSU05fQ2FwLT53b3JkID0gY3B1MmxlMTYocFJTTl9DYXAtPndvcmQpOworCisJKCpyc25fbGVuKSArPSBzaXplb2YoUlNOX0NBUEFCSUxJVElFUyk7CS8vIHVwZGF0ZSBjdXJyZW50IFJTTklFIGxlbmd0aAorCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUJ1aWxkIFJTTiBJRSBjb250ZXh0LiBJdCBpcyBub3QgaW5jbHVkZWQgZWxlbWVudC1JRCBhbmQgbGVuZ3RoLgorCisJQXJndW1lbnRzOgorCQlwQWQJCQktCXBvaW50ZXIgdG8gb3VyIHBBZGFwdGVyIGNvbnRleHQKKyAgICAJQXV0aE1vZGUJLQlpbmRpY2F0ZSB0aGUgYXV0aGVudGljYXRpb24gbW9kZQorICAgIAlXZXBTdGF0dXMJLQlpbmRpY2F0ZSB0aGUgZW5jcnlwdGlvbiB0eXBlCisJCWFwaWR4CQktCWluZGljYXRlIHRoZSBpbnRlcmZhY2UgaW5kZXgKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBNYWtlUlNOSUUoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBBdXRoTW9kZSwKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIFdlcFN0YXR1cywKKwlJTglVQ0hBUgkJCWFwaWR4KQoreworCVBVQ0hBUgkJcFJzbkllID0gTlVMTDsJCQkvLyBwcmltYXJ5IFJTTklFCisJVUNIQVIgCQkqcnNuaWVsZW5fY3VyX3AgPSAwOwkvLyB0aGUgbGVuZ3RoIG9mIHRoZSBwcmltYXJ5IFJTTklFCisJVUNIQVIJCSpyc25pZWxlbl9leF9jdXJfcCA9IDA7CS8vIHRoZSBsZW5ndGggb2YgdGhlIHNlY29uZGFyeSBSU05JRQorCVVDSEFSCQlQcmltYXJ5UnNuaWU7CisJQk9PTEVBTgkJYk1peENpcGhlciA9IEZBTFNFOwkvLyBpbmRpY2F0ZSB0aGUgcGFpcndpc2UgYW5kIGdyb3VwIGNpcGhlciBhcmUgZGlmZmVyZW50CisJVUNIQVIJCXBfb2Zmc2V0OworCVdQQV9NSVhfUEFJUl9DSVBIRVIJCUZsZXhpYmxlQ2lwaGVyID0gTUlYX0NJUEhFUl9OT1RVU0U7CS8vIGl0IHByb3ZpZGUgdGhlIG1vcmUgZmxleGlibGUgY2lwaGVyIGNvbWJpbmF0aW9uIGluIFdQQS1XUEEyIGFuZCBUS0lQQUVTIG1vZGUKKworCXJzbmllbGVuX2N1cl9wID0gTlVMTDsKKwlyc25pZWxlbl9leF9jdXJfcCA9IE5VTEw7CisKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJCQlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQICE9IFdQQV9TVVBQTElDQU5UX0RJU0FCTEUpCisJCQl7CisJCQkJaWYgKEF1dGhNb2RlIDwgTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorCQkJCQlyZXR1cm47CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCQkJeworCQkJCS8vIFN1cHBvcnQgV1BBUFNLIG9yIFdQQTJQU0sgaW4gU1RBLUluZnJhIG1vZGUKKwkJCQkvLyBTdXBwb3J0IFdQQU5vbmUgaW4gU1RBLUFkaG9jIG1vZGUKKwkJCQlpZiAoKEF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgJiYKKwkJCQkJKEF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spICYmCisJCQkJCShBdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorCQkJCQkpCisJCQkJCXJldHVybjsKKwkJCX0KKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCI9PT4gUlRNUE1ha2VSU05JRShTVEEpXG4iKSk7CisKKwkJCS8vIFplcm8gUlNOSUUgY29udGV4dAorCQkJcEFkLT5TdGFDZmcuUlNOSUVfTGVuID0gMDsKKwkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlJTTl9JRSwgTUFYX0xFTl9PRl9SU05JRSk7CisKKwkJCS8vIFBvaW50ZXIgdG8gUlNOSUUKKwkJCXJzbmllbGVuX2N1cl9wID0gJnBBZC0+U3RhQ2ZnLlJTTklFX0xlbjsKKwkJCXBSc25JZSA9IHBBZC0+U3RhQ2ZnLlJTTl9JRTsKKworCQkJYk1peENpcGhlciA9IHBBZC0+U3RhQ2ZnLmJNaXhDaXBoZXI7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9CisKKwkvLyBpbmRpY2F0ZSBwcmltYXJ5IFJTTklFIGFzIFdQQSBvciBXUEEyCisJaWYgKChBdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8CisJCShBdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHx8CisJCShBdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKSB8fAorCQkoQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMVdQQTIpIHx8CisJCShBdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEExUFNLV1BBMlBTSykpCisJCVByaW1hcnlSc25pZSA9IFdwYUllOworCWVsc2UKKwkJUHJpbWFyeVJzbmllID0gV3BhMkllOworCisJeworCQkvLyBCdWlsZCB0aGUgcHJpbWFyeSBSU05JRQorCQkvLyAxLiBpbnNlcnQgY2lwaGVyIHN1aXRlCisJCVJUTVBJbnNlcnRSc25JZUNpcGhlcihwQWQsIFByaW1hcnlSc25pZSwgV2VwU3RhdHVzLCBiTWl4Q2lwaGVyLCBGbGV4aWJsZUNpcGhlciwgcFJzbkllLCAmcF9vZmZzZXQpOworCisJCS8vIDIuIGluc2VydCBBS00KKwkJUlRNUEluc2VydFJzbkllQUtNKHBBZCwgUHJpbWFyeVJzbmllLCBBdXRoTW9kZSwgYXBpZHgsIHBSc25JZSwgJnBfb2Zmc2V0KTsKKworCQkvLyAzLiBpbnNlcnQgY2FwYWJpbGl0eQorCQlSVE1QSW5zZXJ0UnNuSWVDYXAocEFkLCBQcmltYXJ5UnNuaWUsIGFwaWR4LCBwUnNuSWUsICZwX29mZnNldCk7CisJfQorCisJLy8gNC4gdXBkYXRlIHRoZSBSU05JRSBsZW5ndGgKKwkqcnNuaWVsZW5fY3VyX3AgPSBwX29mZnNldDsKKworCWhleF9kdW1wKCJUaGUgcHJpbWFyeSBSU05JRSIsIHBSc25JZSwgKCpyc25pZWxlbl9jdXJfcCkpOworCisKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCQlDaGVjayB3aGV0aGVyIHRoZSByZWNlaXZlZCBmcmFtZSBpcyBFQVAgZnJhbWUuCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCQktCXBvaW50ZXIgdG8gb3VyIHBBZGFwdGVyIGNvbnRleHQKKwkJcEVudHJ5CQkJLQlwb2ludGVyIHRvIGFjdGl2ZSBlbnRyeQorCQlwRGF0YQkJCS0JdGhlIHJlY2VpdmVkIGZyYW1lCisJCURhdGFCeXRlQ291bnQgCS0JdGhlIHJlY2VpdmVkIGZyYW1lJ3MgbGVuZ3RoCisJCUZyb21XaGljaEJTU0lECS0JaW5kaWNhdGUgdGhlIGludGVyZmFjZSBpbmRleAorCisgICAgUmV0dXJuOgorICAgICAgICAgVFJVRSAJCQktCVRoaXMgZnJhbWUgaXMgRUFQIGZyYW1lCisgICAgICAgICBGQUxTRSAJCQktCW90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTiBSVE1QQ2hlY2tXUEFmcmFtZSgKKyAgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiBQTUFDX1RBQkxFX0VOVFJZCXBFbnRyeSwKKyAgICBJTiBQVUNIQVIgICAgICAgICAgIHBEYXRhLAorICAgIElOIFVMT05HICAgICAgICAgICAgRGF0YUJ5dGVDb3VudCwKKwlJTiBVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCVVMT05HCUJvZHlfbGVuOworCUJPT0xFQU4gQ2FuY2VsbGVkOworCisKKyAgICBpZihEYXRhQnl0ZUNvdW50IDwgKExFTkdUSF84MDJfMV9IICsgTEVOR1RIX0VBUE9MX0gpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKworCS8vIFNraXAgTExDIGhlYWRlcgorICAgIGlmIChOZGlzRXF1YWxNZW1vcnkoU05BUF84MDJfMUgsIHBEYXRhLCA2KSB8fAorICAgICAgICAvLyBDaXNjbyAxMjAwIEFQIG1heSBzZW5kIHBhY2tldCB3aXRoIFNOQVBfQlJJREdFX1RVTk5FTAorICAgICAgICBOZGlzRXF1YWxNZW1vcnkoU05BUF9CUklER0VfVFVOTkVMLCBwRGF0YSwgNikpCisgICAgeworICAgICAgICBwRGF0YSArPSA2OworICAgIH0KKwkvLyBTa2lwIDItYnl0ZXMgRUFQb0wgdHlwZQorICAgIGlmIChOZGlzRXF1YWxNZW1vcnkoRUFQT0wsIHBEYXRhLCAyKSkKKyAgICB7CisgICAgICAgIHBEYXRhICs9IDI7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgc3dpdGNoICgqKHBEYXRhKzEpKQorICAgIHsKKyAgICAgICAgY2FzZSBFQVBQYWNrZXQ6CisJCQlCb2R5X2xlbiA9ICgqKHBEYXRhKzIpPDw4KSB8ICgqKHBEYXRhKzMpKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQLVBhY2tldCBmcmFtZSwgVFlQRSA9IDAsIExlbmd0aCA9ICVsZFxuIiwgQm9keV9sZW4pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVBUE9MU3RhcnQ6CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZWNlaXZlIEVBUE9MLVN0YXJ0IGZyYW1lLCBUWVBFID0gMSBcbiIpKTsKKwkJCWlmIChwRW50cnktPkVucXVldWVFYXBvbFN0YXJ0VGltZXJSdW5uaW5nICE9IEVBUE9MX1NUQVJUX0RJU0FCTEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2FuY2VsIHRoZSBFbnF1ZXVlRWFwb2xTdGFydFRpbWVyUnVubmluZyBcbiIpKTsKKyAgICAgICAgICAgICAgICBSVE1QQ2FuY2VsVGltZXIoJnBFbnRyeS0+RW5xdWV1ZVN0YXJ0Rm9yUFNLVGltZXIsICZDYW5jZWxsZWQpOworICAgICAgICAgICAgICAgIHBFbnRyeS0+RW5xdWV1ZUVhcG9sU3RhcnRUaW1lclJ1bm5pbmcgPSBFQVBPTF9TVEFSVF9ESVNBQkxFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRUFQT0xMb2dvZmY6CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZWNlaXZlIEVBUE9MTG9nb2ZmIGZyYW1lLCBUWVBFID0gMiBcbiIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVBUE9MS2V5OgorCQkJQm9keV9sZW4gPSAoKihwRGF0YSsyKTw8OCkgfCAoKihwRGF0YSszKSk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZWNlaXZlIEVBUE9MLUtleSBmcmFtZSwgVFlQRSA9IDMsIExlbmd0aCA9ICVsZFxuIiwgQm9keV9sZW4pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVBUE9MQVNGQWxlcnQ6CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZWNlaXZlIEVBUE9MQVNGQWxlcnQgZnJhbWUsIFRZUEUgPSA0IFxuIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBFTkNSWVBUIEFFUyBHVEsgYmVmb3JlIHNlbmRpbmcgaW4gRUFQT0wgZnJhbWUuCisgICAgICAgIEFFUyBHVEsgbGVuZ3RoID0gMTI4IGJpdCwgIHNvIGZpeCBibG9ja3MgZm9yIGFlcy1rZXktd3JhcCBhcyAyIGluIHRoaXMgZnVuY3Rpb24uCisgICAgICAgIFRoaXMgZnVuY3Rpb24gcmVmZXJlbmNlcyB0byBSRkMgMzM5NCBmb3IgYWVzIGtleSB3cmFwIGFsZ29yaXRobS4KKyAgICBSZXR1cm46CisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEFFU19HVEtfS0VZX1dSQVAoCisgICAgSU4gVUNIQVIgICAgKmtleSwKKyAgICBJTiBVQ0hBUiAgICAqcGxhaW50ZXh0LAorICAgIElOIFVDSEFSICAgIHBfbGVuLAorICAgIE9VVCBVQ0hBUiAgICpjaXBoZXJ0ZXh0KQoreworICAgIFVDSEFSICAgICAgIEFbOF0sIEJJTlsxNl0sIEJPVVRbMTZdOworICAgIFVDSEFSICAgICAgIFJbNTEyXTsKKyAgICBJTlQgICAgICAgICBudW1fYmxvY2tzID0gcF9sZW4vODsgICAvLyB1bml0OjY0Yml0cworICAgIElOVCAgICAgICAgIGksIGo7CisgICAgYWVzX2NvbnRleHQgYWVzY3R4OworICAgIFVDSEFSICAgICAgIHhvcjsKKworICAgIHJ0bXBfYWVzX3NldF9rZXkoJmFlc2N0eCwga2V5LCAxMjgpOworCisgICAgLy8gSW5pdCBJQQorICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisgICAgICAgIEFbaV0gPSAweGE2OworCisgICAgLy9JbnB1dCBwbGFpbnRleHQKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2Jsb2NrczsgaSsrKQorICAgIHsKKyAgICAgICAgZm9yIChqID0gMCA7IGogPCA4OyBqKyspCisgICAgICAgICAgICBSWzggKiAoaSArIDEpICsgal0gPSBwbGFpbnRleHRbOCAqIGkgKyBqXTsKKyAgICB9CisKKyAgICAvLyBLZXkgTWl4CisgICAgZm9yIChqID0gMDsgaiA8IDY7IGorKykKKyAgICB7CisgICAgICAgIGZvcihpID0gMTsgaSA8PSBudW1fYmxvY2tzOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vcGhhc2UgMQorICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoQklOLCBBLCA4KTsKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZCSU5bOF0sICZSWzggKiBpXSwgOCk7CisgICAgICAgICAgICBydG1wX2Flc19lbmNyeXB0KCZhZXNjdHgsIEJJTiwgQk9VVCk7CisKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KEEsICZCT1VUWzBdLCA4KTsKKyAgICAgICAgICAgIHhvciA9IG51bV9ibG9ja3MgKiBqICsgaTsKKyAgICAgICAgICAgIEFbN10gPSBCT1VUWzddIF4geG9yOworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoJlJbOCAqIGldLCAmQk9VVFs4XSwgOCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBPdXRwdXQgY2lwaGVydGV4dAorICAgIE5kaXNNb3ZlTWVtb3J5KGNpcGhlcnRleHQsIEEsIDgpOworCisgICAgZm9yIChpID0gMTsgaSA8PSBudW1fYmxvY2tzOyBpKyspCisgICAgeworICAgICAgICBmb3IgKGogPSAwIDsgaiA8IDg7IGorKykKKyAgICAgICAgICAgIGNpcGhlcnRleHRbOCAqIGkgKyBqXSA9IFJbOCAqIGkgKyBqXTsKKyAgICB9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCU1pc2MgZnVuY3Rpb24gdG8gZGVjcnlwdCBBRVMgYm9keQorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKwkJVGhpcyBmdW5jdGlvbiByZWZlcmVuY2VzIHRvCVJGQwkzMzk0IGZvciBhZXMga2V5IHVud3JhcCBhbGdvcml0aG0uCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFFU19HVEtfS0VZX1VOV1JBUCgKKwlJTglVQ0hBUgkqa2V5LAorCU9VVAlVQ0hBUgkqcGxhaW50ZXh0LAorCUlOCVVDSEFSICAgIGNfbGVuLAorCUlOCVVDSEFSCSpjaXBoZXJ0ZXh0KQorCit7CisJVUNIQVIgICAgICAgQVs4XSwgQklOWzE2XSwgQk9VVFsxNl07CisJVUNIQVIgICAgICAgeG9yOworCUlOVCAgICAgICAgIGksIGo7CisJYWVzX2NvbnRleHQgYWVzY3R4OworCVVDSEFSICAgICAgICpSOworCUlOVCAgICAgICAgIG51bV9ibG9ja3MgPSBjX2xlbi84OwkvLyB1bml0OjY0Yml0cworCisKKwlvc19hbGxvY19tZW0oTlVMTCwgKFBVQ0hBUiAqKSZSLCA1MTIpOworCisJaWYgKFIgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiEhIUFFU19HVEtfS0VZX1VOV1JBUDogbm8gbWVtb3J5ISEhXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9IC8qIEVuZCBvZiBpZiAqLworCisJLy8gSW5pdGlhbGl6ZQorCU5kaXNNb3ZlTWVtb3J5KEEsIGNpcGhlcnRleHQsIDgpOworCS8vSW5wdXQgcGxhaW50ZXh0CisJZm9yKGkgPSAwOyBpIDwgKGNfbGVuLTgpOyBpKyspCisJeworCQlSWyBpXSA9IGNpcGhlcnRleHRbaSArIDhdOworCX0KKworCXJ0bXBfYWVzX3NldF9rZXkoJmFlc2N0eCwga2V5LCAxMjgpOworCisJZm9yKGogPSA1OyBqID49IDA7IGotLSkKKwl7CisJCWZvcihpID0gKG51bV9ibG9ja3MtMSk7IGkgPiAwOyBpLS0pCisJCXsKKwkJCXhvciA9IChudW1fYmxvY2tzIC0xICkqIGogKyBpOworCQkJTmRpc01vdmVNZW1vcnkoQklOLCBBLCA4KTsKKwkJCUJJTls3XSA9IEFbN10gXiB4b3I7CisJCQlOZGlzTW92ZU1lbW9yeSgmQklOWzhdLCAmUlsoaS0xKSo4XSwgOCk7CisJCQlydG1wX2Flc19kZWNyeXB0KCZhZXNjdHgsIEJJTiwgQk9VVCk7CisJCQlOZGlzTW92ZU1lbW9yeShBLCAmQk9VVFswXSwgOCk7CisJCQlOZGlzTW92ZU1lbW9yeSgmUlsoaS0xKSo4XSwgJkJPVVRbOF0sIDgpOworCQl9CisJfQorCisJLy8gT1VUUFVUCisJZm9yKGkgPSAwOyBpIDwgY19sZW47IGkrKykKKwl7CisJCXBsYWludGV4dFtpXSA9IFJbaV07CisJfQorCisKKwlvc19mcmVlX21lbShOVUxMLCBSKTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCQlSZXBvcnQgdGhlIEVBUCBtZXNzYWdlIHR5cGUKKworCUFyZ3VtZW50czoKKwkJbXNnCQktCUVBUE9MX1BBSVJfTVNHXzEKKwkJCQkJRUFQT0xfUEFJUl9NU0dfMgorCQkJCQlFQVBPTF9QQUlSX01TR18zCisJCQkJCUVBUE9MX1BBSVJfTVNHXzQKKwkJCQkJRUFQT0xfR1JPVVBfTVNHXzEKKwkJCQkJRUFQT0xfR1JPVVBfTVNHXzIKKworICAgIFJldHVybjoKKyAgICAgICAgIG1lc3NhZ2UgdHlwZSBzdHJpbmcKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQ0hBUiAqR2V0RWFwb2xNc2dUeXBlKENIQVIgbXNnKQoreworICAgIGlmKG1zZyA9PSBFQVBPTF9QQUlSX01TR18xKQorICAgICAgICByZXR1cm4gIlBhaXJ3aXNlIE1lc3NhZ2UgMSI7CisgICAgZWxzZSBpZihtc2cgPT0gRUFQT0xfUEFJUl9NU0dfMikKKyAgICAgICAgcmV0dXJuICJQYWlyd2lzZSBNZXNzYWdlIDIiOworCWVsc2UgaWYobXNnID09IEVBUE9MX1BBSVJfTVNHXzMpCisgICAgICAgIHJldHVybiAiUGFpcndpc2UgTWVzc2FnZSAzIjsKKwllbHNlIGlmKG1zZyA9PSBFQVBPTF9QQUlSX01TR180KQorICAgICAgICByZXR1cm4gIlBhaXJ3aXNlIE1lc3NhZ2UgNCI7CisJZWxzZSBpZihtc2cgPT0gRUFQT0xfR1JPVVBfTVNHXzEpCisgICAgICAgIHJldHVybiAiR3JvdXAgTWVzc2FnZSAxIjsKKwllbHNlIGlmKG1zZyA9PSBFQVBPTF9HUk9VUF9NU0dfMikKKyAgICAgICAgcmV0dXJuICJHcm91cCBNZXNzYWdlIDIiOworICAgIGVsc2UKKyAgICAJcmV0dXJuICJJbnZhbGlkIE1lc3NhZ2UiOworfQorCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIENoZWNrIFNhbml0eSBSU04gSUUgb2YgRUFQb0wgbWVzc2FnZQorCisgICAgQXJndW1lbnRzOgorCisgICAgUmV0dXJuIFZhbHVlOgorCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFJUTVBDaGVja1JTTklFKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisJSU4gIFVDSEFSICAgICAgICAgICBEYXRhTGVuLAorCUlOICBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSwKKwlPVVQJVUNIQVIJCQkqT2Zmc2V0KQoreworCVBVQ0hBUiAgICAgICAgICAgICAgcFZJRTsKKwlVQ0hBUiAgICAgICAgICAgICAgIGxlbjsKKwlQRUlEX1NUUlVDVCAgICAgICAgIHBFaWQ7CisJQk9PTEVBTgkJCQlyZXN1bHQgPSBGQUxTRTsKKworCXBWSUUgPSBwRGF0YTsKKwlsZW4JID0gRGF0YUxlbjsKKwkqT2Zmc2V0ID0gMDsKKworCXdoaWxlIChsZW4gPiBzaXplb2YoUlNOSUUyKSkKKwl7CisJCXBFaWQgPSAoUEVJRF9TVFJVQ1QpIHBWSUU7CisJCS8vIFdQQSBSU04gSUUKKwkJaWYgKChwRWlkLT5FaWQgPT0gSUVfV1BBKSAmJiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBXUEFfT1VJLCA0KSkpCisJCXsKKwkJCWlmICgocEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEgfHwgcEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spICYmCisJCQkJKE5kaXNFcXVhbE1lbW9yeShwVklFLCBwRW50cnktPlJTTl9JRSwgcEVudHJ5LT5SU05JRV9MZW4pKSAmJgorCQkJCShwRW50cnktPlJTTklFX0xlbiA9PSAocEVpZC0+TGVuICsgMikpKQorCQkJeworCQkJCQlyZXN1bHQgPSBUUlVFOworCQkJfQorCisJCQkqT2Zmc2V0ICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJfQorCQkvLyBXUEEyIFJTTiBJRQorCQllbHNlIGlmICgocEVpZC0+RWlkID09IElFX1JTTikgJiYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCArIDIsIFJTTl9PVUksIDMpKSkKKwkJeworCQkJaWYgKChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIgfHwgcEVudHJ5LT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSAmJgorCQkJCShOZGlzRXF1YWxNZW1vcnkocFZJRSwgcEVudHJ5LT5SU05fSUUsIHBFbnRyeS0+UlNOSUVfTGVuKSkgJiYKKwkJCQkocEVudHJ5LT5SU05JRV9MZW4gPT0gKHBFaWQtPkxlbiArIDIpKS8qIFRvRG8tQWxiZXJ0WSBmb3IgbWVzaCovKQorCQkJeworCQkJCQlyZXN1bHQgPSBUUlVFOworCQkJfQorCisJCQkqT2Zmc2V0ICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWJyZWFrOworCQl9CisKKwkJcFZJRSArPSAocEVpZC0+TGVuICsgMik7CisJCWxlbiAgLT0gKHBFaWQtPkxlbiArIDIpOworCX0KKworCisJcmV0dXJuIHJlc3VsdDsKKworfQorCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIFBhcnNlIEtFWURBVEEgZmllbGQuICBLRVlEQVRBW10gTWF5IGNvbnRhaW4gMiBSU04gSUUgYW5kIG9wdGlvbmFsbHkgR1RLLgorICAgIEdUSyAgaXMgZW5jYXB0dWxhdGVkIGluIEtERSBmb3JtYXQgYXQgIHAuODMgODAyLjExaSBEMTAKKworICAgIEFyZ3VtZW50czoKKworICAgIFJldHVybiBWYWx1ZToKKworICAgIE5vdGU6CisgICAgICAgIDgwMi4xMWkgRDEwCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIFJUTVBQYXJzZUVhcG9sS2V5RGF0YSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBLZXlEYXRhLAorCUlOICBVQ0hBUiAgICAgICAgICAgS2V5RGF0YUxlbiwKKwlJTglVQ0hBUgkJCUdyb3VwS2V5SW5kZXgsCisJSU4JVUNIQVIJCQlNc2dUeXBlLAorCUlOCUJPT0xFQU4JCQliV1BBMiwKKwlJTiAgTUFDX1RBQkxFX0VOVFJZICpwRW50cnkpCit7CisgICAgUEtERV9FTkNBUCAgICAgICAgICBwS0RFID0gTlVMTDsKKyAgICBQVUNIQVIgICAgICAgICAgICAgIHBNeUtleURhdGEgPSBwS2V5RGF0YTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIEtleURhdGFMZW5ndGggPSBLZXlEYXRhTGVuOworICAgIFVDSEFSICAgICAgICAgICAgICAgR1RLTEVOID0gMDsKKwlVQ0hBUgkJCQlEZWZhdWx0SWR4ID0gMDsKKwlVQ0hBUgkJCQlza2lwX29mZnNldDsKKworCS8vIFZlcmlmeSBUaGUgUlNOIElFIGNvbnRhaW5lZCBpbiBwYWlyZXdpc2VfbXNnXzIgJiYgcGFpcmV3aXNlX21zZ18zIGFuZCBza2lwIGl0CisJaWYgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMiB8fCBNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMpCisgICAgeworCQkvLyBDaGVjayBSU04gSUUgd2hldGhlciBpdCBpcyBXUEEyL1dQQTJQU0sKKwkJaWYgKCFSVE1QQ2hlY2tSU05JRShwQWQsIHBLZXlEYXRhLCBLZXlEYXRhTGVuLCBwRW50cnksICZza2lwX29mZnNldCkpCisJCXsKKwkJCS8vIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3IgUlNOIElFIGRpZmZlcmVudAorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1JTTklFX0RJRkZfRVZFTlRfRkxBRywgcEVudHJ5LT5BZGRyLCBwRW50cnktPmFwaWR4LCAwKTsKKworICAgICAgICAJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlNOX0lFIERpZmZlcmVudCBpbiBtc2cgJWQgb2YgNC13YXkgaGFuZHNoYWtlIVxuIiwgTXNnVHlwZSkpOworCQkJaGV4X2R1bXAoIlJlY2VpdmUgUlNOX0lFICIsIHBLZXlEYXRhLCBLZXlEYXRhTGVuKTsKKwkJCWhleF9kdW1wKCJEZXNpcmVkIFJTTl9JRSAiLCBwRW50cnktPlJTTl9JRSwgcEVudHJ5LT5SU05JRV9MZW4pOworCisJCQlyZXR1cm4gRkFMU0U7CisgICAgCX0KKyAgICAJZWxzZQorCQl7CisJCQlpZiAoYldQQTIgJiYgTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zKQorCQkJeworCQkJCS8vIHNraXAgUlNOIElFCisJCQkJcE15S2V5RGF0YSArPSBza2lwX29mZnNldDsKKwkJCQlLZXlEYXRhTGVuZ3RoIC09IHNraXBfb2Zmc2V0OworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBQYXJzZUVhcG9sS2V5RGF0YSA9PT4gV1BBMi9XUEEyUFNLIFJTTiBJRSBtYXRjaGVkIGluIE1zZyAzLCBMZW5ndGgoJWQpIFxuIiwgc2tpcF9vZmZzZXQpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlyZXR1cm4gVFJVRTsKKwkJfQorCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUlRNUFBhcnNlRWFwb2xLZXlEYXRhID09PiBLZXlEYXRhTGVuZ3RoICVkIHdpdGhvdXQgUlNOX0lFIFxuIiwgS2V5RGF0YUxlbmd0aCkpOworCisJLy8gUGFyc2UgRUtEIGZvcm1hdCBpbiBwYWlyd2lzZV9tc2dfM19XUEEyICYmIGdyb3VwX21zZ18xX1dQQTIKKwlpZiAoYldQQTIgJiYgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMyB8fCBNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkKKwl7CisJCWlmIChLZXlEYXRhTGVuZ3RoID49IDgpCS8vIEtERSBmb3JtYXQgZXhjbHVkZSBHVEsgbGVuZ3RoCisgICAgCXsKKyAgICAgICAgCXBLREUgPSAoUEtERV9FTkNBUCkgcE15S2V5RGF0YTsKKworCisJCQlEZWZhdWx0SWR4ID0gcEtERS0+R1RLRW5jYXAuS2lkOworCisJCQkvLyBTYW5pdHkgY2hlY2sgLSBLRUQgbGVuZ3RoCisJCQlpZiAoS2V5RGF0YUxlbmd0aCA8IChwS0RFLT5MZW4gKyAyKSkKKyAgICAJCXsKKyAgICAgICAgCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUjogVGhlIGxlbiBmcm9tIEtERSBpcyB0b28gc2hvcnQgXG4iKSk7CisgICAgICAgIAkJcmV0dXJuIEZBTFNFOworICAgIAkJfQorCisJCQkvLyBHZXQgR1RLIGxlbmd0aCAtIHJlZmVyIHRvIElFRUUgODAyLjExaS0yMDA0IHAuODIKKwkJCUdUS0xFTiA9IHBLREUtPkxlbiAtNjsKKwkJCWlmIChHVEtMRU4gPCBMRU5fQUVTX0tFWSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUjogR1RLIEtleSBsZW5ndGggaXMgdG9vIHNob3J0ICglZCkgXG4iLCBHVEtMRU4pKTsKKyAgICAgICAgCQlyZXR1cm4gRkFMU0U7CisJCQl9CisKKyAgICAJfQorCQllbHNlCisgICAgCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBLREUgZm9ybWF0IGxlbmd0aCBpcyB0b28gc2hvcnQgXG4iKSk7CisJICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgCX0KKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJHVEsgaW4gS0RFIGZvcm1hdCAsRGVmYXVsdEtleUlEPSVkLCBLZXlMZW49JWQgXG4iLCBEZWZhdWx0SWR4LCBHVEtMRU4pKTsKKwkJLy8gc2tpcCBpdAorCQlwTXlLZXlEYXRhICs9IDg7CisJCUtleURhdGFMZW5ndGggLT0gODsKKworCX0KKwllbHNlIGlmICghYldQQTIgJiYgTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkKKwl7CisJCURlZmF1bHRJZHggPSBHcm91cEtleUluZGV4OworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJHVEsgRGVmYXVsdEtleUlEPSVkIFxuIiwgRGVmYXVsdElkeCkpOworCX0KKworCS8vIFNhbml0eSBjaGVjayAtIHNoYXJlZCBrZXkgaW5kZXggbXVzdCBiZSAxIH4gMworCWlmIChEZWZhdWx0SWR4IDwgMSB8fCBEZWZhdWx0SWR4ID4gMykKKyAgICB7CisgICAgIAlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUjogR1RLIEtleSBpbmRleCglZCkgaXMgaW52YWxpZCBpbiAlcyAlcyBcbiIsIERlZmF1bHRJZHgsICgoYldQQTIpID8gIldQQTIiIDogIldQQSIpLCBHZXRFYXBvbE1zZ1R5cGUoTXNnVHlwZSkpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJLy8gVG9kbworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcmV0dXJuIFRSVUU7CisKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ29uc3RydWN0IEVBUG9MIG1lc3NhZ2UgZm9yIFdQQSBoYW5kc2hha2luZworCQlJdHMgZm9ybWF0IGlzIGJlbG93LAorCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBQcm90b2NvbCBWZXJzaW9uCSB8ICAxIG9jdGV0CisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBQcm90b2NvbCBUeXBlCQkgfAkxIG9jdGV0CisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBCb2R5IExlbmd0aAkJIHwgIDIgb2N0ZXRzCisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBEZXNjcmlwdG9yIFR5cGUJIHwJMSBvY3RldAorCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXwgS2V5IEluZm9ybWF0aW9uICAgIHwJMiBvY3RldHMKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IEtleSBMZW5ndGgJICAgICB8ICAxIG9jdGV0CisJCSstLS0tLS0tLS0tLS0tLS0tLS0tLSsKKwkJfCBLZXkgUmVwYWx5IENvdW50ZXIgfAk4IG9jdGV0cworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXwgS2V5IE5vbmNlCQkgICAgIHwgIDMyIG9jdGV0cworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXwgS2V5IElWCQkJIHwgIDE2IG9jdGV0cworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXwgS2V5IFJTQwkJCSB8ICA4IG9jdGV0cworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXwgS2V5IElEIG9yIFJlc2VydmVkIHwJOCBvY3RldHMKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IEtleSBNSUMJCQkgfAkxNiBvY3RldHMKKwkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tKworCQl8IEtleSBEYXRhIExlbmd0aAkgfAkyIG9jdGV0cworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJCXwgS2V5IERhdGEJCQkgfAluIG9jdGV0cworCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworCUFyZ3VtZW50czoKKwkJcEFkCQkJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlDb25zdHJ1Y3RFYXBvbE1zZygKKwlJTiAJUFJUTVBfQURBUFRFUiAgICAJcEFkLAorICAgIElOIAlVQ0hBUgkJCQlBdXRoTW9kZSwKKyAgICBJTiAJVUNIQVIJCQkJV2VwU3RhdHVzLAorICAgIElOIAlVQ0hBUgkJCQlHcm91cEtleVdlcFN0YXR1cywKKyAgICBJTiAJVUNIQVIJCQkJTXNnVHlwZSwKKyAgICBJTglVQ0hBUgkJCQlEZWZhdWx0S2V5SWR4LAorICAgIElOIAlVQ0hBUgkJCQkqUmVwbGF5Q291bnRlciwKKwlJTiAJVUNIQVIJCQkJKktleU5vbmNlLAorCUlOCVVDSEFSCQkJCSpUeFJTQywKKwlJTglVQ0hBUgkJCQkqUFRLLAorCUlOCVVDSEFSCQkJCSpHVEssCisJSU4JVUNIQVIJCQkJKlJTTklFLAorCUlOCVVDSEFSCQkJCVJTTklFX0xlbiwKKyAgICBPVVQgUEVBUE9MX1BBQ0tFVCAgICAgICBwTXNnKQoreworCUJPT0xFQU4JYldQQTIgPSBGQUxTRTsKKworCS8vIENob29zZSBXUEEyIG9yIG5vdAorCWlmICgoQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwgKEF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKQorCQliV1BBMiA9IFRSVUU7CisKKyAgICAvLyBJbml0IFBhY2tldCBhbmQgRmlsbCBoZWFkZXIKKyAgICBwTXNnLT5Qcm9WZXIgPSBFQVBPTF9WRVI7CisgICAgcE1zZy0+UHJvVHlwZSA9IEVBUE9MS2V5OworCisJLy8gRGVmYXVsdCA5NSBieXRlcywgdGhlIEVBUG9MLUtleSBkZXNjcmlwdG9yIGV4Y2x1ZGUgS2V5LWRhdGEgZmllbGQKKwlwTXNnLT5Cb2R5X0xlblsxXSA9IExFTl9FQVBPTF9LRVlfTVNHOworCisJLy8gRmlsbCBpbiBFQVBvTCBkZXNjcmlwdG9yCisJaWYgKGJXUEEyKQorCQlwTXNnLT5LZXlEZXNjLlR5cGUgPSBXUEEyX0tFWV9ERVNDOworCWVsc2UKKwkJcE1zZy0+S2V5RGVzYy5UeXBlID0gV1BBMV9LRVlfREVTQzsKKworCS8vIEZpbGwgaW4gS2V5IGluZm9ybWF0aW9uLCByZWZlciB0byBJRUVFIFN0ZCA4MDIuMTFpLTIwMDQgcGFnZSA3OAorCS8vIFdoZW4gZWl0aGVyIHRoZSBwYWlyd2lzZSBvciB0aGUgZ3JvdXAgY2lwaGVyIGlzIEFFUywgdGhlIERFU0NfVFlQRV9BRVMoMikgc2hhbGwgYmUgdXNlZC4KKwlwTXNnLT5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9CisgICAgICAgIAkoKChXZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkgfHwgKEdyb3VwS2V5V2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpKSA/IChERVNDX1RZUEVfQUVTKSA6IChERVNDX1RZUEVfVEtJUCkpOworCisJLy8gU3BlY2lmeSBLZXkgVHlwZSBhcyBHcm91cCgwKSBvciBQYWlyd2lzZSgxKQorCWlmIChNc2dUeXBlID49IEVBUE9MX0dST1VQX01TR18xKQorCQlwTXNnLT5LZXlEZXNjLktleUluZm8uS2V5VHlwZSA9IEdST1VQS0VZOworCWVsc2UKKwkJcE1zZy0+S2V5RGVzYy5LZXlJbmZvLktleVR5cGUgPSBQQUlSV0lTRUtFWTsKKworCS8vIFNwZWNpZnkgS2V5IEluZGV4LCBvbmx5IGdyb3VwX21zZzFfV1BBMQorCWlmICghYldQQTIgJiYgKE1zZ1R5cGUgPj0gRUFQT0xfR1JPVVBfTVNHXzEpKQorCQlwTXNnLT5LZXlEZXNjLktleUluZm8uS2V5SW5kZXggPSBEZWZhdWx0S2V5SWR4OworCisJaWYgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykKKwkJcE1zZy0+S2V5RGVzYy5LZXlJbmZvLkluc3RhbGwgPSAxOworCisJaWYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzEpIHx8IChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMpIHx8IChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkKKwkJcE1zZy0+S2V5RGVzYy5LZXlJbmZvLktleUFjayA9IDE7CisKKwlpZiAoTXNnVHlwZSAhPSBFQVBPTF9QQUlSX01TR18xKQorCQlwTXNnLT5LZXlEZXNjLktleUluZm8uS2V5TWljID0gMTsKKworCWlmICgoYldQQTIgJiYgKE1zZ1R5cGUgPj0gRUFQT0xfUEFJUl9NU0dfMykpIHx8ICghYldQQTIgJiYgKE1zZ1R5cGUgPj0gRUFQT0xfR1JPVVBfTVNHXzEpKSkKKyAgICB7CisgICAgICAgCXBNc2ctPktleURlc2MuS2V5SW5mby5TZWN1cmUgPSAxOworICAgIH0KKworCWlmIChiV1BBMiAmJiAoKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykgfHwgKE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpKSkKKyAgICB7CisgICAgICAgIHBNc2ctPktleURlc2MuS2V5SW5mby5FS0RfREwgPSAxOworICAgIH0KKworCS8vIGtleSBJbmZvcm1hdGlvbiBlbGVtZW50IGhhcyBkb25lLgorCSooVVNIT1JUICopKCZwTXNnLT5LZXlEZXNjLktleUluZm8pID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBNc2ctPktleURlc2MuS2V5SW5mbykpOworCisJLy8gRmlsbCBpbiBLZXkgTGVuZ3RoCisJeworCQlpZiAoTXNnVHlwZSA+PSBFQVBPTF9HUk9VUF9NU0dfMSkKKwkJeworCQkJLy8gdGhlIGxlbmd0aCBvZiBncm91cCBrZXkgY2lwaGVyCisJCQlwTXNnLT5LZXlEZXNjLktleUxlbmd0aFsxXSA9ICgoR3JvdXBLZXlXZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgPyBUS0lQX0dUS19MRU5HVEggOiBMRU5fQUVTX0tFWSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyB0aGUgbGVuZ3RoIG9mIHBhaXJ3aXNlIGtleSBjaXBoZXIKKwkJCXBNc2ctPktleURlc2MuS2V5TGVuZ3RoWzFdID0gKChXZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgPyBMRU5fVEtJUF9LRVkgOiBMRU5fQUVTX0tFWSk7CisJCX0KKwl9CisKKyAJLy8gRmlsbCBpbiByZXBsYXkgY291bnRlcgorICAgIE5kaXNNb3ZlTWVtb3J5KHBNc2ctPktleURlc2MuUmVwbGF5Q291bnRlciwgUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisKKwkvLyBGaWxsIEtleSBOb25jZSBmaWVsZAorCS8vIEFOb25jZSA6IHBhaXJ3aXNlX21zZzEgJiBwYWlyd2lzZV9tc2czCisJLy8gU05vbmNlIDogcGFpcndpc2VfbXNnMgorCS8vIEdOb25jZSA6IGdyb3VwX21zZzFfd3BhMQorCWlmICgoTXNnVHlwZSA8PSBFQVBPTF9QQUlSX01TR18zKSB8fCAoKCFiV1BBMiAmJiAoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkpKSkKKyAgICAJTmRpc01vdmVNZW1vcnkocE1zZy0+S2V5RGVzYy5LZXlOb25jZSwgS2V5Tm9uY2UsIExFTl9LRVlfREVTQ19OT05DRSk7CisKKwkvLyBGaWxsIGtleSBJViAtIFdQQTIgYXMgMCwgV1BBMSBhcyByYW5kb20KKwlpZiAoIWJXUEEyICYmIChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkKKwl7CisJCS8vIFN1Z2dlc3QgSVYgYmUgcmFuZG9tIG51bWJlciBwbHVzIHNvbWUgbnVtYmVyLAorCQlOZGlzTW92ZU1lbW9yeShwTXNnLT5LZXlEZXNjLktleUl2LCAmS2V5Tm9uY2VbMTZdLCBMRU5fS0VZX0RFU0NfSVYpOworICAgICAgICBwTXNnLT5LZXlEZXNjLktleUl2WzE1XSArPSAyOworCX0KKworICAgIC8vIEZpbGwgS2V5IFJTQyBmaWVsZAorICAgIC8vIEl0IGNvbnRhaW5zIHRoZSBSU0MgZm9yIHRoZSBHVEsgYmVpbmcgaW5zdGFsbGVkLgorCWlmICgoTXNnVHlwZSA9PSBFQVBPTF9QQUlSX01TR18zICYmIGJXUEEyKSB8fCAoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkpCisJeworICAgICAgICBOZGlzTW92ZU1lbW9yeShwTXNnLT5LZXlEZXNjLktleVJzYywgVHhSU0MsIDYpOworCX0KKworCS8vIENsZWFyIEtleSBNSUMgZmllbGQgZm9yIE1JQyBjYWxjdWxhdGlvbiBsYXRlcgorICAgIE5kaXNaZXJvTWVtb3J5KHBNc2ctPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworCUNvbnN0cnVjdEVhcG9sS2V5RGF0YShwQWQsCisJCQkJCQkgIEF1dGhNb2RlLAorCQkJCQkJICBXZXBTdGF0dXMsCisJCQkJCQkgIEdyb3VwS2V5V2VwU3RhdHVzLAorCQkJCQkJICBNc2dUeXBlLAorCQkJCQkJICBEZWZhdWx0S2V5SWR4LAorCQkJCQkJICBiV1BBMiwKKwkJCQkJCSAgUFRLLAorCQkJCQkJICBHVEssCisJCQkJCQkgIFJTTklFLAorCQkJCQkJICBSU05JRV9MZW4sCisJCQkJCQkgIHBNc2cpOworCisJLy8gQ2FsY3VsYXRlIE1JQyBhbmQgZmlsbCBpbiBLZXlNaWMgRmllbGQgZXhjZXB0IFBhaXJ3aXNlIE1zZyAxLgorCWlmIChNc2dUeXBlICE9IEVBUE9MX1BBSVJfTVNHXzEpCisJeworCQlDYWxjdWxhdGVNSUMocEFkLCBXZXBTdGF0dXMsIFBUSywgcE1zZyk7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PiBDb25zdHJ1Y3RFYXBvbE1zZyBmb3IgJXMgJXNcbiIsICgoYldQQTIpID8gIldQQTIiIDogIldQQSIpLCBHZXRFYXBvbE1zZ1R5cGUoTXNnVHlwZSkpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIJICAgICBCb2R5IGxlbmd0aCA9ICVkIFxuIiwgcE1zZy0+Qm9keV9MZW5bMV0pKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIJICAgICBLZXkgbGVuZ3RoICA9ICVkIFxuIiwgcE1zZy0+S2V5RGVzYy5LZXlMZW5ndGhbMV0pKTsKKworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDb25zdHJ1Y3QgdGhlIEtleSBEYXRhIGZpZWxkIG9mIEVBUG9MIG1lc3NhZ2UKKworCUFyZ3VtZW50czoKKwkJcEFkCQkJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgorCQlFbGVtCQlNZXNzYWdlIGJvZHkKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQ29uc3RydWN0RWFwb2xLZXlEYXRhKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJQXV0aE1vZGUsCisJSU4JVUNIQVIJCQlXZXBTdGF0dXMsCisJSU4JVUNIQVIJCQlHcm91cEtleVdlcFN0YXR1cywKKwlJTiAJVUNIQVIJCQlNc2dUeXBlLAorCUlOCVVDSEFSCQkJRGVmYXVsdEtleUlkeCwKKwlJTglCT09MRUFOCQkJYldQQTJDYXBhYmxlLAorCUlOCVVDSEFSCQkJKlBUSywKKwlJTglVQ0hBUgkJCSpHVEssCisJSU4JVUNIQVIJCQkqUlNOSUUsCisJSU4JVUNIQVIJCQlSU05JRV9MRU4sCisJT1VUIFBFQVBPTF9QQUNLRVQgICBwTXNnKQoreworCVVDSEFSCQkqbXBvb2wsICpLZXlfRGF0YSwgKlJjNEdUSzsKKwlVQ0hBUiAgICAgICBla2V5WyhMRU5fS0VZX0RFU0NfSVYrTEVOX0VBUF9FSyldOworCVVDSEFSCQlkYXRhX29mZnNldDsKKworCisJaWYgKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSB8fCBNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzQgfHwgTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMikKKwkJcmV0dXJuOworCisJLy8gYWxsb2NhdGUgbWVtb3J5IHBvb2wKKwlvc19hbGxvY19tZW0ocEFkLCAoUFVDSEFSICopJm1wb29sLCAxNTAwKTsKKworICAgIGlmIChtcG9vbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBSYzRHVEsgTGVuID0gNTEyICovCisJUmM0R1RLID0gKFVDSEFSICopIFJPVU5EX1VQKG1wb29sLCA0KTsKKwkvKiBLZXlfRGF0YSBMZW4gPSA1MTIgKi8KKwlLZXlfRGF0YSA9IChVQ0hBUiAqKSBST1VORF9VUChSYzRHVEsgKyA1MTIsIDQpOworCisJTmRpc1plcm9NZW1vcnkoS2V5X0RhdGEsIDUxMik7CisJcE1zZy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdID0gMDsKKwlkYXRhX29mZnNldCA9IDA7CisKKwkvLyBFbmNhcHN1bGF0ZSBSU05JRSBpbiBwYWlyd2lzZV9tc2cyICYgcGFpcndpc2VfbXNnMworCWlmIChSU05JRV9MRU4gJiYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzIpIHx8IChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMpKSkKKwl7CisJCWlmIChiV1BBMkNhcGFibGUpCisJCQlLZXlfRGF0YVtkYXRhX29mZnNldCArIDBdID0gSUVfV1BBMjsKKwkJZWxzZQorCQkJS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAwXSA9IElFX1dQQTsKKworICAgICAgICBLZXlfRGF0YVtkYXRhX29mZnNldCArIDFdID0gUlNOSUVfTEVOOworCQlOZGlzTW92ZU1lbW9yeSgmS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAyXSwgUlNOSUUsIFJTTklFX0xFTik7CisJCWRhdGFfb2Zmc2V0ICs9ICgyICsgUlNOSUVfTEVOKTsKKwl9CisKKwkvLyBFbmNhcHN1bGF0ZSBLREUgZm9ybWF0IGluIHBhaXJ3aXNlX21zZzNfV1BBMiAmIGdyb3VwX21zZzFfV1BBMgorCWlmIChiV1BBMkNhcGFibGUgJiYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMpIHx8IChNc2dUeXBlID09IEVBUE9MX0dST1VQX01TR18xKSkpCisJeworCQkvLyBLZXkgRGF0YSBFbmNhcHN1bGF0aW9uIChLREUpIGZvcm1hdCAtIDgwMi4xMWktMjAwNCAgRmlndXJlLTQzdyBhbmQgVGFibGUtMjBoCisgICAgICAgIEtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMF0gPSAweEREOworCisJCWlmIChHcm91cEtleVdlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQl7CisJCQlLZXlfRGF0YVtkYXRhX29mZnNldCArIDFdID0gMHgxNjsvLyA0KzIrMTYoT1VJK0RhdGFUeXBlK0RhdGFGaWVsZCkKKwkJfQorCQllbHNlCisJCXsKKwkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMV0gPSAweDI2Oy8vIDQrMiszMihPVUkrRGF0YVR5cGUrRGF0YUZpZWxkKQorCQl9CisKKyAgICAgICAgS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyAyXSA9IDB4MDA7CisgICAgICAgIEtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgM10gPSAweDBGOworICAgICAgICBLZXlfRGF0YVtkYXRhX29mZnNldCArIDRdID0gMHhBQzsKKyAgICAgICAgS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyA1XSA9IDB4MDE7CisKKwkJLy8gR1RLIEtERSBmb3JtYXQgLSA4MDIuMTFpLTIwMDQgIEZpZ3VyZS00M3gKKyAgICAgICAgS2V5X0RhdGFbZGF0YV9vZmZzZXQgKyA2XSA9IChEZWZhdWx0S2V5SWR4ICYgMHgwMyk7CisgICAgICAgIEtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgN10gPSAweDAwOwkvLyBSZXNlcnZlZCBCeXRlCisKKwkJZGF0YV9vZmZzZXQgKz0gODsKKwl9CisKKworCS8vIEVuY2Fwc3VsYXRlIEdUSyBhbmQgZW5jcnlwdCB0aGUga2V5LWRhdGEgZmllbGQgd2l0aCBLRUsuCisJLy8gT25seSBmb3IgcGFpcndpc2VfbXNnM19XUEEyIGFuZCBncm91cF9tc2cxCisJaWYgKChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMgJiYgYldQQTJDYXBhYmxlKSB8fCAoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkpCisJeworCQkvLyBGaWxsIGluIEdUSworCQlpZiAoR3JvdXBLZXlXZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJeworCQkJTmRpc01vdmVNZW1vcnkoJktleV9EYXRhW2RhdGFfb2Zmc2V0XSwgR1RLLCBMRU5fQUVTX0tFWSk7CisJCQlkYXRhX29mZnNldCArPSBMRU5fQUVTX0tFWTsKKwkJfQorCQllbHNlCisJCXsKKwkJCU5kaXNNb3ZlTWVtb3J5KCZLZXlfRGF0YVtkYXRhX29mZnNldF0sIEdUSywgVEtJUF9HVEtfTEVOR1RIKTsKKwkJCWRhdGFfb2Zmc2V0ICs9IFRLSVBfR1RLX0xFTkdUSDsKKwkJfQorCisJCS8vIFN0aWxsIGRvbnQga25vdyB3aHksIGJ1dCBpZiBub3QgYXBwZW5kIHdpbGwgb2NjdXIgIkdUSyBub3QgaW5jbHVkZSBpbiBNU0czIgorCQkvLyBQYXRjaCBmb3IgY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHplcm8gY29uZmlnIGFuZCBmdW5rCisJCWlmIChNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMgJiYgYldQQTJDYXBhYmxlKQorCQl7CisJCQlpZiAoR3JvdXBLZXlXZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJCXsKKwkJCQlLZXlfRGF0YVtkYXRhX29mZnNldCArIDBdID0gMHhERDsKKwkJCQlLZXlfRGF0YVtkYXRhX29mZnNldCArIDFdID0gMDsKKwkJCQlkYXRhX29mZnNldCArPSAyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMF0gPSAweEREOworCQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMV0gPSAwOworCQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgMl0gPSAwOworCQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgM10gPSAwOworCQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgNF0gPSAwOworCQkJCUtleV9EYXRhW2RhdGFfb2Zmc2V0ICsgNV0gPSAwOworCQkJCWRhdGFfb2Zmc2V0ICs9IDY7CisJCQl9CisJCX0KKworCQkvLyBFbmNyeXB0IHRoZSBkYXRhIG1hdGVyaWFsIGluIGtleSBkYXRhIGZpZWxkCisJCWlmIChXZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJeworCQkJQUVTX0dUS19LRVlfV1JBUCgmUFRLWzE2XSwgS2V5X0RhdGEsIGRhdGFfb2Zmc2V0LCBSYzRHVEspOworICAgICAgICAgICAgLy8gQUVTIHdyYXAgZnVuY3Rpb24gd2lsbCBncm93IDggYnl0ZXMgaW4gbGVuZ3RoCisgICAgICAgICAgICBkYXRhX29mZnNldCArPSA4OworCQl9CisJCWVsc2UKKwkJeworCQkJLy8gUFJFUEFSRSBFbmNyeXB0ZWQgICJLZXkgREFUQSIgZmllbGQuICAoRW5jcnlwdCBHVEsgd2l0aCBSQzQsIHVzaW5mIFBUS1sxNl0tPlszMV0gYXMgS2V5LCBJVi1maWVsZCBhcyBJVikKKwkJCS8vIHB1dCBUeFRzYyBpbiBLZXkgUlNDIGZpZWxkCisJCQlwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyID0gUFBQSU5JVEZDUzMyOyAgIC8vSW5pdCBjcmMzMi4KKworCQkJLy8gZWtleSBpcyB0aGUgY29udGFuZXRpb24gb2YgSVYtZmllbGQsIGFuZCBQVEtbMTZdLT5QVEtbMzFdCisJCQlOZGlzTW92ZU1lbW9yeShla2V5LCBwTXNnLT5LZXlEZXNjLktleUl2LCBMRU5fS0VZX0RFU0NfSVYpOworCQkJTmRpc01vdmVNZW1vcnkoJmVrZXlbTEVOX0tFWV9ERVNDX0lWXSwgJlBUS1sxNl0sIExFTl9FQVBfRUspOworCQkJQVJDRk9VUl9JTklUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIGVrZXksIHNpemVvZihla2V5KSk7ICAvL0lOSVQgU0JPWCwgS0VZTEVOKzMoSVYpCisJCQlwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyID0gUlRNUF9DQUxDX0ZDUzMyKHBBZC0+UHJpdmF0ZUluZm8uRkNTQ1JDMzIsIEtleV9EYXRhLCBkYXRhX29mZnNldCk7CisJCQlXUEFBUkNGT1VSX0VOQ1JZUFQoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCwgUmM0R1RLLCBLZXlfRGF0YSwgZGF0YV9vZmZzZXQpOworCQl9CisKKwkJTmRpc01vdmVNZW1vcnkocE1zZy0+S2V5RGVzYy5LZXlEYXRhLCBSYzRHVEssIGRhdGFfb2Zmc2V0KTsKKwl9CisJZWxzZQorCXsKKwkJTmRpc01vdmVNZW1vcnkocE1zZy0+S2V5RGVzYy5LZXlEYXRhLCBLZXlfRGF0YSwgZGF0YV9vZmZzZXQpOworCX0KKworCS8vIHNldCBrZXkgZGF0YSBsZW5ndGggZmllbGQgYW5kIHRvdGFsIGxlbmd0aAorCXBNc2ctPktleURlc2MuS2V5RGF0YUxlblsxXSA9IGRhdGFfb2Zmc2V0OworICAgIHBNc2ctPkJvZHlfTGVuWzFdICs9IGRhdGFfb2Zmc2V0OworCisJb3NfZnJlZV9tZW0ocEFkLCBtcG9vbCk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNhbGNhdWxhdGUgTUlDLiBJdCBpcyB1c2VkIGR1cmluZyA0LXdheXMgaGFuZHNoYXJraW5nLgorCisJQXJndW1lbnRzOgorCQlwQWQJCQkJLQlwb2ludGVyIHRvIG91ciBwQWRhcHRlciBjb250ZXh0CisgICAgCVBlZXJXZXBTdGF0dXMJLQlpbmRpY2F0ZSB0aGUgZW5jcnlwdGlvbiB0eXBlCisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlDYWxjdWxhdGVNSUMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlQZWVyV2VwU3RhdHVzLAorCUlOCVVDSEFSCQkJKlBUSywKKwlPVVQgUEVBUE9MX1BBQ0tFVCAgIHBNc2cpCit7CisgICAgVUNIQVIgICAqT3V0QnVmZmVyOworCVVMT05HCUZyYW1lTGVuID0gMDsKKwlVQ0hBUgltaWNbTEVOX0tFWV9ERVNDX01JQ107CisJVUNIQVIJZGlnZXN0WzgwXTsKKworCS8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgTUlDIGNhbGN1bGF0aW9uCisJb3NfYWxsb2NfbWVtKHBBZCwgKFBVQ0hBUiAqKSZPdXRCdWZmZXIsIDUxMik7CisKKyAgICBpZiAoT3V0QnVmZmVyID09IE5VTEwpCisgICAgeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIhISFDYWxjdWxhdGVNSUM6IG5vIG1lbW9yeSEhIVxuIikpOworCQlyZXR1cm47CisgICAgfQorCisJLy8gbWFrZSBhIGZyYW1lIGZvciBjYWxjdWxhdGluZyBNSUMuCisgICAgTWFrZU91dGdvaW5nRnJhbWUoT3V0QnVmZmVyLCAgICAgICAgICAgIAkmRnJhbWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgcE1zZy0+Qm9keV9MZW5bMV0gKyA0LCAgCXBNc2csCisgICAgICAgICAgICAgICAgICAgICAgRU5EX09GX0FSR1MpOworCisJTmRpc1plcm9NZW1vcnkobWljLCBzaXplb2YobWljKSk7CisKKwkvLyBDYWxjdWxhdGUgTUlDCisgICAgaWYgKFBlZXJXZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKyAJeworCQlITUFDX1NIQTEoT3V0QnVmZmVyLCAgRnJhbWVMZW4sIFBUSywgTEVOX0VBUF9NSUNLLCBkaWdlc3QpOworCQlOZGlzTW92ZU1lbW9yeShtaWMsIGRpZ2VzdCwgTEVOX0tFWV9ERVNDX01JQyk7CisJfQorCWVsc2UKKwl7CisJCWhtYWNfbWQ1KFBUSywgIExFTl9FQVBfTUlDSywgT3V0QnVmZmVyLCBGcmFtZUxlbiwgbWljKTsKKwl9CisKKwkvLyBzdG9yZSB0aGUgY2FsY3VsYXRlZCBNSUMKKwlOZGlzTW92ZU1lbW9yeShwTXNnLT5LZXlEZXNjLktleU1pYywgbWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworCW9zX2ZyZWVfbWVtKHBBZCwgT3V0QnVmZmVyKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVNvbWUgcmVjZWl2ZWQgZnJhbWVzIGNhbid0IGRlY3J5cHQgYnkgQXNpYywgc28gZGVjcnlwdCB0aGVtIGJ5IHNvZnR3YXJlLgorCisJQXJndW1lbnRzOgorCQlwQWQJCQkJLQlwb2ludGVyIHRvIG91ciBwQWRhcHRlciBjb250ZXh0CisgICAgCVBlZXJXZXBTdGF0dXMJLQlpbmRpY2F0ZSB0aGUgZW5jcnlwdGlvbiB0eXBlCisKKwlSZXR1cm4gVmFsdWU6CisJCU5ESVNfU1RBVFVTX1NVQ0NFU1MJCS0JZGVjcnlwdGlvbiBzdWNjZXNzZnVsCisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUJCS0JZGVjcnlwdGlvbiBmYWlsdXJlCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUwlSVE1QU29mdERlY3J5cHRCcm9hZENhc3REYXRhKAorCUlOCVBSVE1QX0FEQVBURVIJCQkJCXBBZCwKKwlJTglSWF9CTEsJCQkJCQkJKnBSeEJsaywKKwlJTiAgTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMgCUdyb3VwQ2lwaGVyLAorCUlOICBQQ0lQSEVSX0tFWQkJCQkJCXBTaGFyZF9rZXkpCit7CisJUFJYV0lfU1RSVUMJCQlwUnhXSSA9IHBSeEJsay0+cFJ4V0k7CisKKworCisJLy8gaGFuZGxlIFdFUCBkZWNyeXB0aW9uCisJaWYgKEdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpCisgICAgeworCQlpZiAoUlRNUFNvZnREZWNyeXB0V0VQKHBBZCwgcFJ4QmxrLT5wRGF0YSwgcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCwgcFNoYXJkX2tleSkpCisJCXsKKworCQkJLy9NaW51cyBJVls0XSAmIElDVls0XQorCQkJcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCAtPSA4OworCQl9CisJCWVsc2UKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRVJST1IgOiBTb2Z0d2FyZSBkZWNyeXB0IFdFUCBkYXRhIGZhaWxzLlxuIikpOworCQkJLy8gZ2l2ZSB1cCB0aGlzIGZyYW1lCisJCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwkJfQorCX0KKwkvLyBoYW5kbGUgVEtJUCBkZWNyeXB0aW9uCisJZWxzZSBpZiAoR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKwl7CisJCWlmIChSVE1QU29mdERlY3J5cHRUS0lQKHBBZCwgcFJ4QmxrLT5wRGF0YSwgcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCwgMCwgcFNoYXJkX2tleSkpCisJCXsKKworCQkJLy9NaW51cyA4IGJ5dGVzIE1JQywgOCBieXRlcyBJVi9FSVYsIDQgYnl0ZXMgSUNWCisJCQlwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50IC09IDIwOworCQl9CisgICAgICAgIGVsc2UKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRVJST1IgOiBSVE1QU29mdERlY3J5cHRUS0lQIEZhaWxlZFxuIikpOworCQkJLy8gZ2l2ZSB1cCB0aGlzIGZyYW1lCisJCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKyAgICAgICAgfQorCX0KKwkvLyBoYW5kbGUgQUVTIGRlY3J5cHRpb24KKwllbHNlIGlmIChHcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsKKwkJaWYgKFJUTVBTb2Z0RGVjcnlwdEFFUyhwQWQsIHBSeEJsay0+cERhdGEsIHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQgLCBwU2hhcmRfa2V5KSkKKwkJeworCisJCQkvLzggYnl0ZXMgTUlDLCA4IGJ5dGVzIElWL0VJViAoQ0NNUCBIZWFkZXIpCisJCQlwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50IC09IDE2OworCQl9CisJCWVsc2UKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRVJST1IgOiBSVE1QU29mdERlY3J5cHRBRVMgRmFpbGVkXG4iKSk7CisJCQkvLyBnaXZlIHVwIHRoaXMgZnJhbWUKKwkJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCQl9CisJfQorCWVsc2UKKwl7CisJCS8vIGdpdmUgdXAgdGhpcyBmcmFtZQorCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKwlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9kZnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2Rmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZDYwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9kZnMuYwpAQCAtMCwwICsxLDQ0MSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKyAgICBhcF9kZnMuYworCisgICAgQWJzdHJhY3Q6CisgICAgU3VwcG9ydCBERlMgZnVuY3Rpb24uCisKKyAgICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIFdobyAgICAgICBXaGVuICAgICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tICAtLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEZvbmNoaSAgICAwMy0xMi0yMDA3ICAgICAgY3JlYXRlZAorKi8KKworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCit0eXBlZGVmIHN0cnVjdCBfUkFEQVJfRFVSQVRJT05fVEFCTEUKK3sKKwlVTE9ORyBSRER1clJlZ2lvbjsKKwlVTE9ORyBSYWRhclNpZ25hbER1cmF0aW9uOworCVVMT05HIFRvbGVyYW5jZTsKK30gUkFEQVJfRFVSQVRJT05fVEFCTEUsICpQUkFEQVJfRFVSQVRJT05fVEFCTEU7CisKKworc3RhdGljIFVDSEFSIFJkSWRsZVRpbWVUYWJsZVtNQVhfUkRfUkVHSU9OXVs0XSA9Cit7CisJezksIDI1MCwgMjUwLCAyNTB9LAkJLy8gQ0UKKwl7NCwgMjUwLCAyNTAsIDI1MH0sCQkvLyBGQ0MKKwl7NCwgMjUwLCAyNTAsIDI1MH0sCQkvLyBKQVAKKwl7MTUsIDI1MCwgMjUwLCAyNTB9LAkvLyBKQVBfVzUzCisJezQsIDI1MCwgMjUwLCAyNTB9CQkvLyBKQVBfVzU2Cit9OworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQmJwIFJhZGFyIGRldGVjdGlvbiByb3V0aW5lCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBCYnBSYWRhckRldGVjdGlvblN0YXJ0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVJTlQ4IFJhZGFyUGVyaW9kOworCisJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIDExNCwgMHgwMik7CisJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIDEyMSwgMHgyMCk7CisJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIDEyMiwgMHgwMCk7CisJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIDEyMywgMHgwOC8qMHg4MCovKTsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgMTI0LCAweDI4KTsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgMTI1LCAweGZmKTsKKworCVJhZGFyUGVyaW9kID0gKChVSU5UKVJkSWRsZVRpbWVUYWJsZVtwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbl1bMF0gKyAoVUlOVClwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5EZnNTZXNzaW9uVGltZSkgPCAyNTAgPworCQkJKFJkSWRsZVRpbWVUYWJsZVtwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbl1bMF0gKyBwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5EZnNTZXNzaW9uVGltZSkgOiAyNTA7CisKKwlSVE1QX0lPX1dSSVRFOChwQWQsIDB4NzAyMCwgMHgxZCk7CisJUlRNUF9JT19XUklURTgocEFkLCAweDcwMjEsIDB4NDApOworCisJUmFkYXJEZXRlY3Rpb25TdGFydChwQWQsIDAsIFJhZGFyUGVyaW9kKTsKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlCYnAgUmFkYXIgZGV0ZWN0aW9uIHJvdXRpbmUKKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEJicFJhZGFyRGV0ZWN0aW9uU3RvcCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlSVE1QX0lPX1dSSVRFOChwQWQsIDB4NzAyMCwgMHgxZCk7CisJUlRNUF9JT19XUklURTgocEFkLCAweDcwMjEsIDB4NjApOworCisJUmFkYXJEZXRlY3Rpb25TdG9wKHBBZCk7CisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmFkYXIgZGV0ZWN0aW9uIHJvdXRpbmUKKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJhZGFyRGV0ZWN0aW9uU3RhcnQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gQk9PTEVBTiBDVFNQcm90ZWN0LAorCUlOIFVJTlQ4IENUU1BlcmlvZCkKK3sKKwlVSU5UOCBEZnNBY3RpdmVUaW1lID0gKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lICYgMHgxZik7CisJVUlOVDggQ3RzUHJvdGVjdCA9IChDVFNQcm90ZWN0ID09IDEpID8gMHgwMiA6IDB4MDE7IC8vIENUUyBwcm90ZWN0LgorCisJaWYgKENUU1Byb3RlY3QgIT0gMCkKKwl7CisJCXN3aXRjaChwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbikKKwkJeworCQljYXNlIEZDQzoKKwkJY2FzZSBKQVBfVzU2OgorCQkJQ3RzUHJvdGVjdCA9IDB4MDM7CisJCQlicmVhazsKKworCQljYXNlIENFOgorCQljYXNlIEpBUF9XNTM6CisJCWRlZmF1bHQ6CisJCQlDdHNQcm90ZWN0ID0gMHgwMjsKKwkJCWJyZWFrOworCQl9CisJfQorCWVsc2UKKwkJQ3RzUHJvdGVjdCA9IDB4MDE7CisKKworCS8vIHNlbmQgc3RhcnQtUkQgd2l0aCBDVFMgcHJvdGVjdGlvbiBjb21tYW5kIHRvIE1DVQorCS8vIGhpZ2hieXRlIFs3XQkJcmVzZXJ2ZQorCS8vIGhpZ2hieXRlIFs2OjVdCTB4OiBzdG9wIENhcnJpZXIvUmFkYXIgZGV0ZWN0aW9uCisJLy8gaGlnaGJ5dGUgWzEwXToJU3RhcnQgQ2Fycmllci9SYWRhciBkZXRlY3Rpb24gd2l0aG91dCBDVFMgcHJvdGVjdGlvbiwgMTE6IFN0YXJ0IENhcnJpZXIvUmFkYXIgZGV0ZWN0aW9uIHdpdGggQ1RTIHByb3RlY3Rpb24KKwkvLyBoaWdoYnl0ZSBbNDowXQlSYWRhci9jYXJyaWVyIGRldGVjdGlvbiBkdXJhdGlvbi4gSW4gMW1zLgorCisJLy8gbG93Ynl0ZSBbNzowXQlSYWRhci9jYXJyaWVyIGRldGVjdGlvbiBwZXJpb2QsIGluIDFtcy4KKwlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NjAsIDB4ZmYsIENUU1BlcmlvZCwgRGZzQWN0aXZlVGltZSB8IChDdHNQcm90ZWN0IDw8IDUpKTsKKwkvL0FzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg2MywgMHhmZiwgMTAsIDApOworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmFkYXIgZGV0ZWN0aW9uIHJvdXRpbmUKKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCVRSVUUJRm91bmQgcmFkYXIgc2lnbmFsCisJCUZBTFNFCU5vdCBmb3VuZCByYWRhciBzaWduYWwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUmFkYXJEZXRlY3Rpb25TdG9wKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKQoreworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUmFkYXJEZXRlY3Rpb25TdG9wLlxuIikpOworCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg2MCwgMHhmZiwgMHgwMCwgMHgwMCk7CS8vIHNlbmQgc3RhcnQtUkQgd2l0aCBDVFMgcHJvdGVjdGlvbiBjb21tYW5kIHRvIE1DVQorCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmFkYXIgY2hhbm5lbCBjaGVjayByb3V0aW5lCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlUUlVFCW5lZWQgdG8gZG8gcmFkYXIgZGV0ZWN0CisJCUZBTFNFCW5lZWQgbm90IHRvIGRvIHJhZGFyIGRldGVjdAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTiBSYWRhckNoYW5uZWxDaGVjaygKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVQ0hBUgkJCUNoKQoreworI2lmIDEKKwlJTlQJCWk7CisJQk9PTEVBTiByZXN1bHQgPSBGQUxTRTsKKworCWZvciAoaT0wOyBpPHBBZC0+Q2hhbm5lbExpc3ROdW07IGkrKykKKwl7CisJCWlmIChDaCA9PSBwQWQtPkNoYW5uZWxMaXN0W2ldLkNoYW5uZWwpCisJCXsKKwkJCXJlc3VsdCA9IHBBZC0+Q2hhbm5lbExpc3RbaV0uRGZzUmVxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworI2Vsc2UKKwlJTlQJCWk7CisJVUNIQVIJQ2hhbm5lbFsxNV09ezUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxMjQsIDEyOCwgMTMyLCAxMzYsIDE0MH07CisKKwlmb3IgKGk9MDsgaTwxNTsgaSsrKQorCXsKKwkJaWYgKENoID09IENoYW5uZWxbaV0pCisJCXsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgIT0gMTUpCisJCXJldHVybiBUUlVFOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworI2VuZGlmCit9CisKK1VMT05HIEphcFJhZGFyVHlwZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVTE9ORwkJaTsKKwljb25zdCBVQ0hBUglDaGFubmVsWzE1XT17NTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwfTsKKworCWlmIChwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbiAhPSBKQVApCisJeworCQlyZXR1cm4gcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkREdXJSZWdpb247CisJfQorCisJZm9yIChpPTA7IGk8MTU7IGkrKykKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID09IENoYW5uZWxbaV0pCisJCXsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPCA0KQorCQlyZXR1cm4gSkFQX1c1MzsKKwllbHNlIGlmIChpIDwgMTUpCisJCXJldHVybiBKQVBfVzU2OworCWVsc2UKKwkJcmV0dXJuIEpBUDsgLy8gVzUyCisKK30KKworVUxPTkcgUlRNUEJicFJlYWRSYWRhckR1cmF0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKQoreworCVVJTlQ4IGJ5dGVWYWx1ZSA9IDA7CisJVUxPTkcgcmVzdWx0OworCisJQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMTE1LCAmYnl0ZVZhbHVlKTsKKworCXJlc3VsdCA9IDA7CisJc3dpdGNoIChieXRlVmFsdWUpCisJeworCWNhc2UgMTogLy8gcmFkYXIgc2lnbmFsIGRldGVjdGVkIGJ5IHB1bHNlIG1vZGUuCisJY2FzZSAyOiAvLyByYWRhciBzaWduYWwgZGV0ZWN0ZWQgYnkgd2lkdGggbW9kZS4KKwkJcmVzdWx0ID0gUlRNUFJlYWRSYWRhckR1cmF0aW9uKHBBZCk7CisJCWJyZWFrOworCisJY2FzZSAwOiAvLyBObyByYWRhciBzaWduYWwuCisJZGVmYXVsdDoKKworCQlyZXN1bHQgPSAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitVTE9ORyBSVE1QUmVhZFJhZGFyRHVyYXRpb24oCisJSU4gUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUxPTkcgcmVzdWx0ID0gMDsKKworI2lmZGVmIERGU19TVVBQT1JUCisJVUlOVDggZHVyYXRpb24xID0gMCwgZHVyYXRpb24yID0gMCwgZHVyYXRpb24zID0gMDsKKworCUJCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjExNiwgJmR1cmF0aW9uMSk7CisJQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMTE3LCAmZHVyYXRpb24yKTsKKwlCQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxMTgsICZkdXJhdGlvbjMpOworCXJlc3VsdCA9IChkdXJhdGlvbjEgPDwgMTYpICsgKGR1cmF0aW9uMiA8PCA4KSArIGR1cmF0aW9uMzsKKyNlbmRpZiAvLyBERlNfU1VQUE9SVCAvLworCisJcmV0dXJuIHJlc3VsdDsKKworfQorCitWT0lEIFJUTVBDbGVhblJhZGFyRHVyYXRpb24oCisJSU4gUFJUTVBfQURBUFRFUglwQWQpCit7CisJcmV0dXJuOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgICAgIFJhZGFyIHdhdmUgZGV0ZWN0aW9uLiBUaGUgQVBJIHNob3VsZCBiZSBpbnZva2UgZWFjaCBzZWNvbmQuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZCAgICAgICAgIC0gQWRhcHRlciBwb2ludGVyCisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQXBSYWRhckRldGVjdFBlcmlvZGljKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUlOVAlpOworCisJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuSW5TZXJ2aWNlTW9uaXRvckNvdW50Kys7CisKKwlmb3IgKGk9MDsgaTxwQWQtPkNoYW5uZWxMaXN0TnVtOyBpKyspCisJeworCQlpZiAocEFkLT5DaGFubmVsTGlzdFtpXS5SZW1haW5pbmdUaW1lRm9yVXNlID4gMCkKKwkJeworCQkJcEFkLT5DaGFubmVsTGlzdFtpXS5SZW1haW5pbmdUaW1lRm9yVXNlIC0tOworCQkJaWYgKChwQWQtPk1sbWUuUGVyaW9kaWNSb3VuZCU1KSA9PSAwKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhZGFyRGV0ZWN0UGVyaW9kaWMgLSBjaD0lZCwgUmVtYWluaW5nVGltZUZvclVzZT0lZFxuIiwgcEFkLT5DaGFubmVsTGlzdFtpXS5DaGFubmVsLCBwQWQtPkNoYW5uZWxMaXN0W2ldLlJlbWFpbmluZ1RpbWVGb3JVc2UpKTsKKwkJCX0KKwkJfQorCX0KKworCS8vcmFkYXIgZGV0ZWN0CisJaWYgKChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMTQpCisJCSYmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQorCQkmJiBSYWRhckNoYW5uZWxDaGVjayhwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKQorCXsKKwkJUmFkYXJEZXRlY3RQZXJpb2RpYyhwQWQpOworCX0KKworCXJldHVybjsKK30KKworLy8gUGVyaW9kaWMgUmFkYXIgZGV0ZWN0aW9uLCBzd2l0Y2ggY2hhbm5lbCB3aWxsIG9jY3VyIGluIFJUTVBIYW5kbGVUQlRUSW50ZXJydXB0KCkKKy8vIEJlZm9yZSBzd2l0Y2ggY2hhbm5lbCwgZHJpdmVyIG5lZWRzIGRvaW5nIGNoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudC4KK1ZPSUQgUmFkYXJEZXRlY3RQZXJpb2RpYygKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwkvLyBuZWVkIHRvIGNoZWNrIGNoYW5uZWwgYXZhaWxhYmlsaXR5LCBhZnRlciBzd2l0Y2ggY2hhbm5lbAorCWlmIChwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRE1vZGUgIT0gUkRfU0lMRU5DRV9NT0RFKQorCQkJcmV0dXJuOworCisJLy8gY2hhbm5lbCBhdmFpbGFiaWxpdHkgY2hlY2sgdGltZSBpcyA2MHNlYywgdXNlIDY1IGZvciBhc3N1cmFuY2UKKwlpZiAocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRDb3VudCsrID4gcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuQ2hNb3ZpbmdUaW1lKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTm90IGZvdW5kIHJhZGFyIHNpZ25hbCwgc3RhcnQgc2VuZCBiZWFjb24gYW5kIHJhZGFyIGRldGVjdGlvbiBpbiBzZXJ2aWNlIG1vbml0b3JcblxuIikpOworCQkJQmJwUmFkYXJEZXRlY3Rpb25TdG9wKHBBZCk7CisJCUFzaWNFbmFibGVCc3NTeW5jKHBBZCk7CisJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSA9IFJEX05PUk1BTF9NT0RFOworCisKKwkJcmV0dXJuOworCX0KKworCXJldHVybjsKK30KKworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisJCWNoYW5nZSBjaGFubmVsIG1vdmluZyB0aW1lIGZvciBERlMgdGVzdGluZy4KKworCUFyZ3VtZW50czoKKwkgICAgcEFkYXB0ZXIgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkgICAgd3JxICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlvY3RsIGFyZ3VtZW50CisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgIE5vdGU6CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgICAgMS4pIGl3cHJpdiByYTAgc2V0IENoTW92VGltZT1bdmFsdWVdCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X0NoTW92aW5nVGltZV9Qcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBhcmcpCit7CisJVUlOVDggVmFsdWU7CisKKwlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DaE1vdmluZ1RpbWUgPSBWYWx1ZTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjogJWRcbiIsIF9fRlVOQ1RJT05fXywKKwkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuQ2hNb3ZpbmdUaW1lKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UIFNldF9Mb25nUHVsc2VSYWRhclRoX1Byb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIGFyZykKK3sKKwlVSU5UOCBWYWx1ZTsKKworCVZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKSA+IDEwID8gMTAgOiBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuTG9uZ1B1bHNlUmFkYXJUaCA9IFZhbHVlOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OiAlZFxuIiwgX19GVU5DVElPTl9fLAorCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5Mb25nUHVsc2VSYWRhclRoKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9lZXByb20uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL2VlcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZTFkYzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9lZXByb20uYwpAQCAtMCwwICsxLDE0OTggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJZWVwcm9tLmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlOYW1lCQlEYXRlCQkJTW9kaWZpY2F0aW9uIGxvZ3MKKyovCisjaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCitWT0lEIFJhaXNlQ2xvY2soCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisgICAgSU4gIFVJTlQzMiAqeCkKK3sKKyAgICAqeCA9ICp4IHwgRUVTSzsKKyAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCAqeCk7CisgICAgUlRNUHVzZWNEZWxheSgxKTsJCQkJLy8gTWF4IGZyZXF1ZW5jeSA9IDFNSHogaW4gU3BlYy4gZGVmaW5pdGlvbgorfQorCisvLyBJUlFMID0gUEFTU0lWRV9MRVZFTAorVk9JRCBMb3dlckNsb2NrKAorICAgIElOCVBSVE1QX0FEQVBURVIJcEFkLAorICAgIElOICBVSU5UMzIgKngpCit7CisgICAgKnggPSAqeCAmIH5FRVNLOworICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIEUyUFJPTV9DU1IsICp4KTsKKyAgICBSVE1QdXNlY0RlbGF5KDEpOworfQorCisvLyBJUlFMID0gUEFTU0lWRV9MRVZFTAorVVNIT1JUIFNoaWZ0SW5CaXRzKAorICAgIElOCVBSVE1QX0FEQVBURVIJcEFkKQoreworICAgIFVJTlQzMgkJeCxpOworCVVTSE9SVCAgICAgIGRhdGE9MDsKKworICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworCisgICAgeCAmPSB+KCBFRURPIHwgRUVESSk7CisKKyAgICBmb3IoaT0wOyBpPDE2OyBpKyspCisgICAgeworICAgICAgICBkYXRhID0gZGF0YSA8PCAxOworICAgICAgICBSYWlzZUNsb2NrKHBBZCwgJngpOworCisgICAgICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworCQlMb3dlckNsb2NrKHBBZCwgJngpOyAvL3ByZXZlbnQgcmVhZCBmYWlsZWQKKworICAgICAgICB4ICY9IH4oRUVESSk7CisgICAgICAgIGlmKHggJiBFRURPKQorICAgICAgICAgICAgZGF0YSB8PSAxOworICAgIH0KKworICAgIHJldHVybiBkYXRhOworfQorCisvLyBJUlFMID0gUEFTU0lWRV9MRVZFTAorVk9JRCBTaGlmdE91dEJpdHMoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisgICAgSU4gIFVTSE9SVCBkYXRhLAorICAgIElOICBVU0hPUlQgY291bnQpCit7CisgICAgVUlOVDMyICAgICAgIHgsbWFzazsKKworICAgIG1hc2sgPSAweDAxIDw8IChjb3VudCAtIDEpOworICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworCisgICAgeCAmPSB+KEVFRE8gfCBFRURJKTsKKworICAgIGRvCisgICAgeworICAgICAgICB4ICY9IH5FRURJOworICAgICAgICBpZihkYXRhICYgbWFzaykJCXggfD0gRUVESTsKKworICAgICAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKKworICAgICAgICBSYWlzZUNsb2NrKHBBZCwgJngpOworICAgICAgICBMb3dlckNsb2NrKHBBZCwgJngpOworCisgICAgICAgIG1hc2sgPSBtYXNrID4+IDE7CisgICAgfSB3aGlsZShtYXNrKTsKKworICAgIHggJj0gfkVFREk7CisgICAgUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7Cit9CisKKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCitWT0lEIEVFcHJvbUNsZWFudXAoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisgICAgVUlOVDMyIHg7CisKKyAgICBSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZ4KTsKKworICAgIHggJj0gfihFRUNTIHwgRUVESSk7CisgICAgUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7CisKKyAgICBSYWlzZUNsb2NrKHBBZCwgJngpOworICAgIExvd2VyQ2xvY2socEFkLCAmeCk7Cit9CisKK1ZPSUQgRVdFTigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKyAgICBVSU5UMzIJeDsKKworICAgIC8vIHJlc2V0IGJpdHMgYW5kIHNldCBFRUNTCisgICAgUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7CisgICAgeCAmPSB+KEVFREkgfCBFRURPIHwgRUVTSyk7CisgICAgeCB8PSBFRUNTOworICAgIFJUTVBfSU9fV1JJVEUzMihwQWQsIEUyUFJPTV9DU1IsIHgpOworCisJLy8ga2ljayBhIHB1bHNlCisJUmFpc2VDbG9jayhwQWQsICZ4KTsKKwlMb3dlckNsb2NrKHBBZCwgJngpOworCisgICAgLy8gb3V0cHV0IHRoZSByZWFkX29wY29kZSBhbmQgc2l4IHB1bHNlIGluIHRoYXQgb3JkZXIKKyAgICBTaGlmdE91dEJpdHMocEFkLCBFRVBST01fRVdFTl9PUENPREUsIDUpOworICAgIFNoaWZ0T3V0Qml0cyhwQWQsIDAsIDYpOworCisgICAgRUVwcm9tQ2xlYW51cChwQWQpOworfQorCitWT0lEIEVXRFMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisgICAgVUlOVDMyCXg7CisKKyAgICAvLyByZXNldCBiaXRzIGFuZCBzZXQgRUVDUworICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgRTJQUk9NX0NTUiwgJngpOworICAgIHggJj0gfihFRURJIHwgRUVETyB8IEVFU0spOworICAgIHggfD0gRUVDUzsKKyAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBFMlBST01fQ1NSLCB4KTsKKworCS8vIGtpY2sgYSBwdWxzZQorCVJhaXNlQ2xvY2socEFkLCAmeCk7CisJTG93ZXJDbG9jayhwQWQsICZ4KTsKKworICAgIC8vIG91dHB1dCB0aGUgcmVhZF9vcGNvZGUgYW5kIHNpeCBwdWxzZSBpbiB0aGF0IG9yZGVyCisgICAgU2hpZnRPdXRCaXRzKHBBZCwgRUVQUk9NX0VXRFNfT1BDT0RFLCA1KTsKKyAgICBTaGlmdE91dEJpdHMocEFkLCAwLCA2KTsKKworICAgIEVFcHJvbUNsZWFudXAocEFkKTsKK30KKworLy8gSVJRTCA9IFBBU1NJVkVfTEVWRUwKK1VTSE9SVCBSVE1QX0VFUFJPTV9SRUFEMTYoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisgICAgSU4gIFVTSE9SVCBPZmZzZXQpCit7CisgICAgVUlOVDMyCQl4OworICAgIFVTSE9SVAkJZGF0YTsKKworCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuQW50RGl2ZXJzaXR5KQorICAgIHsKKyAgICAJcEFkLT5FZXByb21BY2Nlc3MgPSBUUlVFOworICAgIH0KKy8vMjAwOC8wOS8xMTpLSCBhZGQgdG8gc3VwcG9ydCBlZnVzZTwtLQorLy8yMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlLS0+Cit7CisgICAgT2Zmc2V0IC89IDI7CisgICAgLy8gcmVzZXQgYml0cyBhbmQgc2V0IEVFQ1MKKyAgICBSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZ4KTsKKyAgICB4ICY9IH4oRUVESSB8IEVFRE8gfCBFRVNLKTsKKyAgICB4IHw9IEVFQ1M7CisgICAgUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7CisKKwkvLyBwYXRjaCBjYW4gbm90IGFjY2VzcyBlLUZ1c2UgaXNzdWUKKyAgICBpZiAoIUlTX1JUMzA5MChwQWQpKQorICAgIHsKKwkvLyBraWNrIGEgcHVsc2UKKwlSYWlzZUNsb2NrKHBBZCwgJngpOworCUxvd2VyQ2xvY2socEFkLCAmeCk7CisgICAgfQorCisgICAgLy8gb3V0cHV0IHRoZSByZWFkX29wY29kZSBhbmQgcmVnaXN0ZXIgbnVtYmVyIGluIHRoYXQgb3JkZXIKKyAgICBTaGlmdE91dEJpdHMocEFkLCBFRVBST01fUkVBRF9PUENPREUsIDMpOworICAgIFNoaWZ0T3V0Qml0cyhwQWQsIE9mZnNldCwgcEFkLT5FRVBST01BZGRyZXNzTnVtKTsKKworICAgIC8vIE5vdyByZWFkIHRoZSBkYXRhICgxNiBiaXRzKSBpbiBmcm9tIHRoZSBzZWxlY3RlZCBFRVBST00gd29yZAorICAgIGRhdGEgPSBTaGlmdEluQml0cyhwQWQpOworCisgICAgRUVwcm9tQ2xlYW51cChwQWQpOworCisJLy8gQW50ZW5uYSBhbmQgRUVQUk9NIGFjY2VzcyBhcmUgYm90aCB1c2luZyBFRVNLIHBpbiwKKyAgICAvLyBUaGVyZWZvciB3ZSBzaG91bGQgYXZvaWQgYWNjZXNzaW5nIEVFU0sgYXQgdGhlIHNhbWUgdGltZQorICAgIC8vIFRoZW4gcmVzdG9yZSBhbnRlbm5hIGFmdGVyIEVFUFJPTSBhY2Nlc3MKKwlpZiAoKHBBZC0+TmljQ29uZmlnMi5maWVsZC5BbnREaXZlcnNpdHkpIHx8IChwQWQtPlJmSWNUeXBlID09IFJGSUNfMzAyMCkpCisgICAgeworCSAgICBwQWQtPkVlcHJvbUFjY2VzcyA9IEZBTFNFOworCSAgICBBc2ljU2V0UnhBbnQocEFkLCBwQWQtPlJ4QW50LlBhaXIxUHJpbWFyeVJ4QW50KTsKKyAgICB9Cit9CisgICAgcmV0dXJuIGRhdGE7Cit9CS8vUmVhZEVFcHJvbQorCitWT0lEIFJUTVBfRUVQUk9NX1dSSVRFMTYoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisgICAgSU4gIFVTSE9SVCBPZmZzZXQsCisgICAgSU4gIFVTSE9SVCBEYXRhKQoreworICAgIFVJTlQzMiB4OworCisJaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5BbnREaXZlcnNpdHkpCisgICAgeworICAgIAlwQWQtPkVlcHJvbUFjY2VzcyA9IFRSVUU7CisgICAgfQorCS8vMjAwOC8wOS8xMTpLSCBhZGQgdG8gc3VwcG9ydCBlZnVzZTwtLQorLy8yMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlLS0+CisJeworCU9mZnNldCAvPSAyOworCisJRVdFTihwQWQpOworCisgICAgLy8gcmVzZXQgYml0cyBhbmQgc2V0IEVFQ1MKKyAgICBSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZ4KTsKKyAgICB4ICY9IH4oRUVESSB8IEVFRE8gfCBFRVNLKTsKKyAgICB4IHw9IEVFQ1M7CisgICAgUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7CisKKwkvLyBwYXRjaCBjYW4gbm90IGFjY2VzcyBlLUZ1c2UgaXNzdWUKKyAgICBpZiAoIUlTX1JUMzA5MChwQWQpKQorICAgIHsKKwkvLyBraWNrIGEgcHVsc2UKKwlSYWlzZUNsb2NrKHBBZCwgJngpOworCUxvd2VyQ2xvY2socEFkLCAmeCk7CisgICAgfQorCisgICAgLy8gb3V0cHV0IHRoZSByZWFkX29wY29kZSAscmVnaXN0ZXIgbnVtYmVyIGFuZCBkYXRhIGluIHRoYXQgb3JkZXIKKyAgICBTaGlmdE91dEJpdHMocEFkLCBFRVBST01fV1JJVEVfT1BDT0RFLCAzKTsKKyAgICBTaGlmdE91dEJpdHMocEFkLCBPZmZzZXQsIHBBZC0+RUVQUk9NQWRkcmVzc051bSk7CisJU2hpZnRPdXRCaXRzKHBBZCwgRGF0YSwgMTYpOwkJLy8gMTYtYml0IGFjY2VzcworCisgICAgLy8gcmVhZCBETyBzdGF0dXMKKyAgICBSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZ4KTsKKworCUVFcHJvbUNsZWFudXAocEFkKTsKKworCVJUTVB1c2VjRGVsYXkoMTAwMDApOwkvL2RlbGF5IGZvciB0d3AoTUFYKT0xMG1zCisKKwlFV0RTKHBBZCk7CisKKyAgICBFRXByb21DbGVhbnVwKHBBZCk7CisKKwkvLyBBbnRlbm5hIGFuZCBFRVBST00gYWNjZXNzIGFyZSBib3RoIHVzaW5nIEVFU0sgcGluLAorICAgIC8vIFRoZXJlZm9yIHdlIHNob3VsZCBhdm9pZCBhY2Nlc3NpbmcgRUVTSyBhdCB0aGUgc2FtZSB0aW1lCisgICAgLy8gVGhlbiByZXN0b3JlIGFudGVubmEgYWZ0ZXIgRUVQUk9NIGFjY2VzcworCWlmICgocEFkLT5OaWNDb25maWcyLmZpZWxkLkFudERpdmVyc2l0eSkgfHwgKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIwKSkKKyAgICB7CisJICAgIHBBZC0+RWVwcm9tQWNjZXNzID0gRkFMU0U7CisJICAgIEFzaWNTZXRSeEFudChwQWQsIHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQpOworICAgIH0KK30KK30KKworLy8yMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlPC0tCisjaWZkZWYgUlQzMHh4CisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1VDSEFSIGVGdXNlUmVhZFJlZ2lzdGVycygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQgT2Zmc2V0LAorCUlOCVVTSE9SVCBMZW5ndGgsCisJT1VUCVVTSE9SVCogcERhdGEpCit7CisJRUZVU0VfQ1RSTF9TVFJVQwkJZUZ1c2VDdHJsU3RydWM7CisJaW50CWk7CisJVVNIT1JUCWVmdXNlRGF0YU9mZnNldDsKKwlVSU5UMzIJZGF0YTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgRUZVU0VfQ1RSTCwgKFBVSU5UMzIpICZlRnVzZUN0cmxTdHJ1Yyk7CisKKwkvL1N0ZXAwLiBXcml0ZSAxMC1iaXQgb2YgYWRkcmVzcyB0byBFRlNST01fQUlOICgweDU4MCwgYml0MjU6Yml0MTYpLiBUaGUgYWRkcmVzcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25tZW50LgorCS8vVXNlIHRoZSBlZXByb20gbG9naWNhbCBhZGRyZXNzIGFuZCBjb3ZlcnQgdG8gYWRkcmVzcyB0byBibG9jayBudW1iZXIKKwllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fQUlOID0gT2Zmc2V0ICYgMHhmZmYwOworCisJLy9TdGVwMS4gV3JpdGUgRUZTUk9NX01PREUgKDB4NTgwLCBiaXQ3OmJpdDYpIHRvIDAuCisJZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX01PREUgPSAwOworCisJLy9TdGVwMi4gV3JpdGUgRUZTUk9NX0tJQ0sgKDB4NTgwLCBiaXQzMCkgdG8gMSB0byBraWNrLW9mZiBwaHlzaWNhbCByZWFkIHByb2NlZHVyZS4KKwllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9IDE7CisKKwlOZGlzTW92ZU1lbW9yeSgmZGF0YSwgJmVGdXNlQ3RybFN0cnVjLCA0KTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRlVTRV9DVFJMLCBkYXRhKTsKKworCS8vU3RlcDMuIFBvbGxpbmcgRUZTUk9NX0tJQ0soMHg1ODAsIGJpdDMwKSB1bnRpbCBpdCBiZWNvbWUgMCBhZ2Fpbi4KKwlpID0gMDsKKwl3aGlsZShpIDwgMTAwKQorCXsKKwkJLy9ydG1wLkh3TWVtb3J5UmVhZER3b3JkKEVGVVNFX0NUUkwsIChEV09SRCAqKSAmZUZ1c2VDdHJsU3RydWMsIDQpOworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsIChQVUlOVDMyKSAmZUZ1c2VDdHJsU3RydWMpOworCQlpZihlRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9PSAwKQorCQl7CisJCQlicmVhazsKKwkJfQorCQlSVE1QdXNlY0RlbGF5KDIpOworCQlpKys7CisJfQorCisJLy9pZiBFRlNST01fQU9VVCBpcyBub3QgZm91bmQgaW4gcGh5c2ljYWwgYWRkcmVzcywgd3JpdGUgMHhmZmZmCisJaWYgKGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9BT1VUID09IDB4M2YpCisJeworCQlmb3IoaT0wOyBpPExlbmd0aC8yOyBpKyspCisJCQkqKHBEYXRhKzIqaSkgPSAweGZmZmY7CisJfQorCWVsc2UKKwl7CisJCS8vU3RlcDQuIFJlYWQgMTYtYnl0ZSBvZiBkYXRhIGZyb20gRUZVU0VfREFUQTAtMyAoMHg1OTAtMHg1OUMpCisJCWVmdXNlRGF0YU9mZnNldCA9ICBFRlVTRV9EQVRBMyAtIChPZmZzZXQgJiAweEMpICA7CisJCS8vZGF0YSBob2xkIDQgYnl0ZXMgZGF0YS4KKwkJLy9JbiBSVE1QX0lPX1JFQUQzMiB3aWxsIGF1dG9tYXRpY2FsbHkgZXhlY3V0ZSAzMi1ieXRlcyBzd2FwcGluZworCQlSVE1QX0lPX1JFQUQzMihwQWQsIGVmdXNlRGF0YU9mZnNldCwgJmRhdGEpOworCQkvL0RlY2lkZSB0aGUgdXBwZXIgMiBieXRlcyBvciB0aGUgYm90dG9tIDIgYnl0ZXMuCisJCS8vIExpdHRsZS1lbmRpYW4JCVMJfAlTCUJpZy1lbmRpYW4KKwkJLy8gYWRkcgkzCTIJMQkwCXwJMAkxCTIJMworCQkvLyBPcmktVglECUMJQglBCXwJQQlCCUMJRAorCQkvL0FmdGVyIHN3YXBwaW5nCisJCS8vCQlECUMJQglBCXwJRAlDCUIJQQorCQkvL1JldHVybiAyLWJ5dGVzCisJCS8vVGhlIHJldHVybiBieXRlIHN0YXRycyBmcm9tIFMuIFRoZXJlZm9yZSwgdGhlIGxpdHRsZS1lbmRpYW4gd2lsbCByZXR1cm4gQkEsIHRoZSBCaWctZW5kaWFuIHdpbGwgcmV0dXJuIERDLgorCQkvL0ZvciByZXR1cm5pbmcgdGhlIGJvdHRvbSAyIGJ5dGVzLCB0aGUgQmlnLWVuZGlhbiBzaG91bGQgc2hpZnQgcmlnaHQgMi1ieXRlcy4KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCWRhdGEgPSBkYXRhIDw8ICg4KigoT2Zmc2V0ICYgMHgzKV4weDIpKTsKKyNlbHNlCisJCWRhdGEgPSBkYXRhID4+ICg4KihPZmZzZXQgJiAweDMpKTsKKyNlbmRpZgorCisJCU5kaXNNb3ZlTWVtb3J5KHBEYXRhLCAmZGF0YSwgTGVuZ3RoKTsKKwl9CisKKwlyZXR1cm4gKFVDSEFSKSBlRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fQU9VVDsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgZUZ1c2VQaHlzaWNhbFJlYWRSZWdpc3RlcnMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUIE9mZnNldCwKKwlJTglVU0hPUlQgTGVuZ3RoLAorCU9VVAlVU0hPUlQqIHBEYXRhKQoreworCUVGVVNFX0NUUkxfU1RSVUMJCWVGdXNlQ3RybFN0cnVjOworCWludAlpOworCVVTSE9SVAllZnVzZURhdGFPZmZzZXQ7CisJVUlOVDMyCWRhdGE7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsIChQVUlOVDMyKSAmZUZ1c2VDdHJsU3RydWMpOworCisJLy9TdGVwMC4gV3JpdGUgMTAtYml0IG9mIGFkZHJlc3MgdG8gRUZTUk9NX0FJTiAoMHg1ODAsIGJpdDI1OmJpdDE2KS4gVGhlIGFkZHJlc3MgbXVzdCBiZSAxNi1ieXRlIGFsaWdubWVudC4KKwllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fQUlOID0gT2Zmc2V0ICYgMHhmZmYwOworCisJLy9TdGVwMS4gV3JpdGUgRUZTUk9NX01PREUgKDB4NTgwLCBiaXQ3OmJpdDYpIHRvIDEuCisJLy9SZWFkIGluIHBoeXNpY2FsIHZpZXcKKwllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fTU9ERSA9IDE7CisKKwkvL1N0ZXAyLiBXcml0ZSBFRlNST01fS0lDSyAoMHg1ODAsIGJpdDMwKSB0byAxIHRvIGtpY2stb2ZmIHBoeXNpY2FsIHJlYWQgcHJvY2VkdXJlLgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID0gMTsKKworCU5kaXNNb3ZlTWVtb3J5KCZkYXRhLCAmZUZ1c2VDdHJsU3RydWMsIDQpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVGVVNFX0NUUkwsIGRhdGEpOworCisJLy9TdGVwMy4gUG9sbGluZyBFRlNST01fS0lDSygweDU4MCwgYml0MzApIHVudGlsIGl0IGJlY29tZSAwIGFnYWluLgorCWkgPSAwOworCXdoaWxlKGkgPCAxMDApCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsIChQVUlOVDMyKSAmZUZ1c2VDdHJsU3RydWMpOworCQlpZihlRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9PSAwKQorCQkJYnJlYWs7CisJCVJUTVB1c2VjRGVsYXkoMik7CisJCWkrKzsKKwl9CisKKwkvL1N0ZXA0LiBSZWFkIDE2LWJ5dGUgb2YgZGF0YSBmcm9tIEVGVVNFX0RBVEEwLTMgKDB4NTlDLTB4NTkwKQorCS8vQmVjYXVzZSB0aGUgc2l6ZSBvZiBlYWNoIEVGVVNFX0RBVEEgaXMgNCBCeXRlcywgdGhlIHNpemUgb2YgYWRkcmVzcyBvZiBlYWNoIGlzIDIgYml0cy4KKwkvL1RoZSBwcmV2aW91cyAyIGJpdHMgaXMgdGhlIEVGVVNFX0RBVEEgbnVtYmVyLCB0aGUgbGFzdCAyIGJpdHMgaXMgdXNlZCB0byBkZWNpZGUgd2hpY2ggYnl0ZXMKKwkvL0RlY2lkZSB3aGljaCBFRlVTRV9EQVRBIHRvIHJlYWQKKwkvLzU5MDpGIEUgRCBDCisJLy81OTQ6QiBBIDkgOAorCS8vNTk4OjcgNiA1IDQKKwkvLzU5QzozIDIgMSAwCisJZWZ1c2VEYXRhT2Zmc2V0ID0gIEVGVVNFX0RBVEEzIC0gKE9mZnNldCAmIDB4QykgIDsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgZWZ1c2VEYXRhT2Zmc2V0LCAmZGF0YSk7CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCWRhdGEgPSBkYXRhIDw8ICg4KigoT2Zmc2V0ICYgMHgzKV4weDIpKTsKKyNlbHNlCisJZGF0YSA9IGRhdGEgPj4gKDgqKE9mZnNldCAmIDB4MykpOworI2VuZGlmCisKKwlOZGlzTW92ZU1lbW9yeShwRGF0YSwgJmRhdGEsIExlbmd0aCk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIGVGdXNlUmVhZFBoeXNpY2FsKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorICAJSU4JUFVTSE9SVCBscEluQnVmZmVyLAorICAJSU4JVUxPTkcgbkluQnVmZmVyU2l6ZSwKKyAgCU9VVAlQVVNIT1JUIGxwT3V0QnVmZmVyLAorICAJSU4JVUxPTkcgbk91dEJ1ZmZlclNpemUKKykKK3sKKwlVU0hPUlQqIHBJbkJ1ZiA9IChVU0hPUlQqKWxwSW5CdWZmZXI7CisJVVNIT1JUKiBwT3V0QnVmID0gKFVTSE9SVCopbHBPdXRCdWZmZXI7CisKKwlVU0hPUlQgT2Zmc2V0ID0gcEluQnVmWzBdOwkJCQkJLy9hZGRyCisJVVNIT1JUIExlbmd0aCA9IHBJbkJ1ZlsxXTsJCQkJCS8vbGVuZ3RoCisJaW50IAkJaTsKKworCWZvcihpPTA7IGk8TGVuZ3RoOyBpKz0yKQorCXsKKwkJZUZ1c2VQaHlzaWNhbFJlYWRSZWdpc3RlcnMocEFkLE9mZnNldCtpLCAyLCAmcE91dEJ1ZltpLzJdKTsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMgZUZ1c2VSZWFkKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJTGVuZ3RoKQoreworCVVTSE9SVCogcE91dEJ1ZiA9IChVU0hPUlQqKXBEYXRhOworCU5UU1RBVFVTCVN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCVVDSEFSCUVGU1JPTV9BT1VUOworCWludAlpOworCisJZm9yKGk9MDsgaTxMZW5ndGg7IGkrPTIpCisJeworCQlFRlNST01fQU9VVCA9IGVGdXNlUmVhZFJlZ2lzdGVycyhwQWQsIE9mZnNldCtpLCAyLCAmcE91dEJ1ZltpLzJdKTsKKwl9CisJcmV0dXJuIFN0YXR1czsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIGVGdXNlUGh5c2ljYWxXcml0ZVJlZ2lzdGVycygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQgT2Zmc2V0LAorCUlOCVVTSE9SVCBMZW5ndGgsCisJT1VUCVVTSE9SVCogcERhdGEpCit7CisJRUZVU0VfQ1RSTF9TVFJVQwkJZUZ1c2VDdHJsU3RydWM7CisJaW50CWk7CisJVVNIT1JUCWVmdXNlRGF0YU9mZnNldDsKKwlVSU5UMzIJZGF0YSwgZUZ1c2VEYXRhQnVmZmVyWzRdOworCisJLy9TdGVwMC4gV3JpdGUgMTYtYnl0ZSBvZiBkYXRhIHRvIEVGVVNFX0RBVEEwLTMgKDB4NTkwLTB4NTlDKSwgd2hlcmUgRUZVU0VfREFUQTAgaXMgdGhlIExTQiBEVywgRUZVU0VfREFUQTMgaXMgdGhlIE1TQiBEVy4KKworCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJLy9yZWFkIGN1cnJlbnQgdmFsdWVzIG9mIDE2LWJ5dGUgYmxvY2sKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEVGVVNFX0NUUkwsIChQVUlOVDMyKSAmZUZ1c2VDdHJsU3RydWMpOworCisJLy9TdGVwMC4gV3JpdGUgMTAtYml0IG9mIGFkZHJlc3MgdG8gRUZTUk9NX0FJTiAoMHg1ODAsIGJpdDI1OmJpdDE2KS4gVGhlIGFkZHJlc3MgbXVzdCBiZSAxNi1ieXRlIGFsaWdubWVudC4KKwllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fQUlOID0gT2Zmc2V0ICYgMHhmZmYwOworCisJLy9TdGVwMS4gV3JpdGUgRUZTUk9NX01PREUgKDB4NTgwLCBiaXQ3OmJpdDYpIHRvIDEuCisJZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX01PREUgPSAxOworCisJLy9TdGVwMi4gV3JpdGUgRUZTUk9NX0tJQ0sgKDB4NTgwLCBiaXQzMCkgdG8gMSB0byBraWNrLW9mZiBwaHlzaWNhbCByZWFkIHByb2NlZHVyZS4KKwllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9IDE7CisKKwlOZGlzTW92ZU1lbW9yeSgmZGF0YSwgJmVGdXNlQ3RybFN0cnVjLCA0KTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRlVTRV9DVFJMLCBkYXRhKTsKKworCS8vU3RlcDMuIFBvbGxpbmcgRUZTUk9NX0tJQ0soMHg1ODAsIGJpdDMwKSB1bnRpbCBpdCBiZWNvbWUgMCBhZ2Fpbi4KKwlpID0gMDsKKwl3aGlsZShpIDwgMTAwKQorCXsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBFRlVTRV9DVFJMLCAoUFVJTlQzMikgJmVGdXNlQ3RybFN0cnVjKTsKKworCQlpZihlRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9PSAwKQorCQkJYnJlYWs7CisJCVJUTVB1c2VjRGVsYXkoMik7CisJCWkrKzsKKwl9CisKKwkvL1N0ZXA0LiBSZWFkIDE2LWJ5dGUgb2YgZGF0YSBmcm9tIEVGVVNFX0RBVEEwLTMgKDB4NTlDLTB4NTkwKQorCWVmdXNlRGF0YU9mZnNldCA9ICBFRlVTRV9EQVRBMzsKKwlmb3IoaT0wOyBpPCA0OyBpKyspCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIGVmdXNlRGF0YU9mZnNldCwgKFBVSU5UMzIpICZlRnVzZURhdGFCdWZmZXJbaV0pOworCQllZnVzZURhdGFPZmZzZXQgLT0gIDQ7CisJfQorCisJLy9VcGRhdGUgdGhlIHZhbHVlLCB0aGUgb2Zmc2V0IGlzIG11bHRpcGxlIG9mIDIsIGxlbmd0aCBpcyAyCisJZWZ1c2VEYXRhT2Zmc2V0ID0gKE9mZnNldCAmIDB4YykgPj4gMjsKKwlkYXRhID0gcERhdGFbMF0gJiAweGZmZmY7CisJLy9UaGUgb2Zmc2V0IHNob3VsZCBiZSAweCoqKjEwIG9yIDB4KioqMDAKKwlpZigoT2Zmc2V0ICUgNCkgIT0gMCkKKwl7CisJCWVGdXNlRGF0YUJ1ZmZlcltlZnVzZURhdGFPZmZzZXRdID0gKGVGdXNlRGF0YUJ1ZmZlcltlZnVzZURhdGFPZmZzZXRdICYgMHhmZmZmKSB8IChkYXRhIDw8IDE2KTsKKwl9CisJZWxzZQorCXsKKwkJZUZ1c2VEYXRhQnVmZmVyW2VmdXNlRGF0YU9mZnNldF0gPSAoZUZ1c2VEYXRhQnVmZmVyW2VmdXNlRGF0YU9mZnNldF0gJiAweGZmZmYwMDAwKSB8IGRhdGE7CisJfQorCisJZWZ1c2VEYXRhT2Zmc2V0ID0gIEVGVVNFX0RBVEEzOworCWZvcihpPTA7IGk8IDQ7IGkrKykKKwl7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIGVmdXNlRGF0YU9mZnNldCwgZUZ1c2VEYXRhQnVmZmVyW2ldKTsKKwkJZWZ1c2VEYXRhT2Zmc2V0IC09IDQ7CisJfQorCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkvL1N0ZXAxLiBXcml0ZSAxMC1iaXQgb2YgYWRkcmVzcyB0byBFRlNST01fQUlOICgweDU4MCwgYml0MjU6Yml0MTYpLiBUaGUgYWRkcmVzcyBtdXN0IGJlIDE2LWJ5dGUgYWxpZ25tZW50LgorCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9BSU4gPSBPZmZzZXQgJiAweGZmZjA7CisKKwkvL1N0ZXAyLiBXcml0ZSBFRlNST01fTU9ERSAoMHg1ODAsIGJpdDc6Yml0NikgdG8gMy4KKwllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fTU9ERSA9IDM7CisKKwkvL1N0ZXAzLiBXcml0ZSBFRlNST01fS0lDSyAoMHg1ODAsIGJpdDMwKSB0byAxIHRvIGtpY2stb2ZmIHBoeXNpY2FsIHdyaXRlIHByb2NlZHVyZS4KKwllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9IDE7CisKKwlOZGlzTW92ZU1lbW9yeSgmZGF0YSwgJmVGdXNlQ3RybFN0cnVjLCA0KTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRlVTRV9DVFJMLCBkYXRhKTsKKworCS8vU3RlcDQuIFBvbGxpbmcgRUZTUk9NX0tJQ0soMHg1ODAsIGJpdDMwKSB1bnRpbCBpdCBiZWNvbWUgMCBhZ2Fpbi4gSXShpnMgZG9uZS4KKwlpID0gMDsKKwl3aGlsZShpIDwgMTAwKQorCXsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBFRlVTRV9DVFJMLCAoUFVJTlQzMikgJmVGdXNlQ3RybFN0cnVjKTsKKworCQlpZihlRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9PSAwKQorCQkJYnJlYWs7CisKKwkJUlRNUHVzZWNEZWxheSgyKTsKKwkJaSsrOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUyBlRnVzZVdyaXRlUmVnaXN0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVCBPZmZzZXQsCisJSU4JVVNIT1JUIExlbmd0aCwKKwlJTglVU0hPUlQqIHBEYXRhKQoreworCVVTSE9SVAlpOworCVVTSE9SVAllRnVzZURhdGE7CisJVVNIT1JUCUxvZ2ljYWxBZGRyZXNzLCBCbGtOdW0gPSAweGZmZmY7CisJVUNIQVIJRUZTUk9NX0FPVVQ7CisKKwlVU0hPUlQgYWRkcix0bXBhZGRyLCBJbkJ1ZlszXSwgdG1wT2Zmc2V0OworCVVTSE9SVCBidWZmZXJbOF07CisJQk9PTEVBTgkJYldyaXRlU3VjY2VzcyA9IFRSVUU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJlRnVzZVdyaXRlUmVnaXN0ZXJzIE9mZnNldD0leCwgcERhdGE9JXhcbiIsIE9mZnNldCwgKnBEYXRhKSk7CisKKwkvL1N0ZXAgMC4gZmluZCB0aGUgZW50cnkgaW4gdGhlIG1hcHBpbmcgdGFibGUKKwkvL1RoZSBhZGRyZXNzIG9mIEVFUFJPTSBpcyAyLWJ5dGVzIGFsaWdubWVudC4KKwkvL1RoZSBsYXN0IGJpdCBpcyB1c2VkIGZvciBhbGlnbm1lbnQsIHNvIGl0IG11c3QgYmUgMC4KKwl0bXBPZmZzZXQgPSBPZmZzZXQgJiAweGZmZmU7CisJRUZTUk9NX0FPVVQgPSBlRnVzZVJlYWRSZWdpc3RlcnMocEFkLCB0bXBPZmZzZXQsIDIsICZlRnVzZURhdGEpOworCisJaWYoIEVGU1JPTV9BT1VUID09IDB4M2YpCisJewkvL2ZpbmQgYXZhaWxhYmxlIGxvZ2ljYWwgYWRkcmVzcyBwb2ludGVyCisJCS8vdGhlIGxvZ2ljYWwgYWRkcmVzcyBkb2VzIG5vdCBleGlzdCwgZmluZCBhbiBlbXB0eSBvbmUKKwkJLy9mcm9tIHRoZSBmaXJzdCBhZGRyZXNzIG9mIGJsb2NrIDQ1PTE2KjQ1PTB4MmQwIHRvIHRoZSBsYXN0IGFkZHJlc3Mgb2YgYmxvY2sgNDcKKwkJLy89PT40OCoxNi0zKHJlc2VydmVkKT0yRkMKKwkJZm9yIChpPUVGVVNFX1VTQUdFX01BUF9TVEFSVDsgaTw9RUZVU0VfVVNBR0VfTUFQX0VORDsgaSs9MikKKwkJeworCQkJLy9SZXRyaXZlIHRoZSBsb2dpY2FsIGJsb2NrIG51Ym1lciBmb3JtIGVhY2ggbG9naWNhbCBhZGRyZXNzIHBvaW50ZXIKKwkJCS8vSXQgd2lsbCBhY2Nlc3MgdHdvIGxvZ2ljYWwgYWRkcmVzcyBwb2ludGVyIGVhY2ggdGltZS4KKwkJCWVGdXNlUGh5c2ljYWxSZWFkUmVnaXN0ZXJzKHBBZCwgaSwgMiwgJkxvZ2ljYWxBZGRyZXNzKTsKKwkJCWlmKCAoTG9naWNhbEFkZHJlc3MgJiAweGZmKSA9PSAwKQorCQkJey8vTm90IHVzZWQgbG9naWNhbCBhZGRyZXNzIHBvaW50ZXIKKwkJCQlCbGtOdW0gPSBpLUVGVVNFX1VTQUdFX01BUF9TVEFSVDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UgaWYoKCAoTG9naWNhbEFkZHJlc3MgPj4gOCkgJiAweGZmKSA9PSAwKQorCQkJey8vTm90IHVzZWQgbG9naWNhbCBhZGRyZXNzIHBvaW50ZXIKKwkJCQlpZiAoaSAhPSBFRlVTRV9VU0FHRV9NQVBfRU5EKQorCQkJCXsKKwkJCQkJQmxrTnVtID0gaS1FRlVTRV9VU0FHRV9NQVBfU1RBUlQrMTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJQmxrTnVtID0gRUZTUk9NX0FPVVQ7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiZUZ1c2VXcml0ZVJlZ2lzdGVycyBCbGtOdW0gPSAlZCBcbiIsIEJsa051bSkpOworCisJaWYoQmxrTnVtID09IDB4ZmZmZikKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImVGdXNlV3JpdGVSZWdpc3RlcnM6IG91dCBvZiBmcmVlIEUtZnVzZSBzcGFjZSEhIVxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJLy9TdGVwIDEuIFNhdmUgZGF0YSBvZiB0aGlzIGJsb2NrCXdoaWNoIGlzIHBvaW50ZWQgYnkgdGhlIGF2YWlibGUgbG9naWNhbCBhZGRyZXNzIHBvaW50ZXIKKwkvLyByZWFkIGFuZCBzYXZlIHRoZSBvcmlnaW5hbCBibG9jayBkYXRhCisJZm9yKGkgPTA7IGk8ODsgaSsrKQorCXsKKwkJYWRkciA9IEJsa051bSAqIDB4MTAgOworCisJCUluQnVmWzBdID0gYWRkcisyKmk7CisJCUluQnVmWzFdID0gMjsKKwkJSW5CdWZbMl0gPSAweDA7CisKKwkJZUZ1c2VSZWFkUGh5c2ljYWwocEFkLCAmSW5CdWZbMF0sIDQsICZJbkJ1ZlsyXSwgMik7CisKKwkJYnVmZmVyW2ldID0gSW5CdWZbMl07CisJfQorCisJLy9TdGVwIDIuIFVwZGF0ZSB0aGUgZGF0YSBpbiBidWZmZXIsIGFuZCB3cml0ZSB0aGUgZGF0YSB0byBFZnVzZQorCWJ1ZmZlclsgKE9mZnNldCA+PiAxKSAlIDhdID0gcERhdGFbMF07CisKKwlkbworCXsKKwkJLy9TdGVwIDMuIFdyaXRlIHRoZSBkYXRhIHRvIEVmdXNlCisJCWlmKCFiV3JpdGVTdWNjZXNzKQorCQl7CisJCQlmb3IoaSA9MDsgaTw4OyBpKyspCisJCQl7CisJCQkJYWRkciA9IEJsa051bSAqIDB4MTAgOworCisJCQkJSW5CdWZbMF0gPSBhZGRyKzIqaTsKKwkJCQlJbkJ1ZlsxXSA9IDI7CisJCQkJSW5CdWZbMl0gPSBidWZmZXJbaV07CisKKwkJCQllRnVzZVdyaXRlUGh5c2ljYWwocEFkLCAmSW5CdWZbMF0sIDYsIE5VTEwsIDIpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJCWFkZHIgPSBCbGtOdW0gKiAweDEwIDsKKworCQkJCUluQnVmWzBdID0gYWRkcisoT2Zmc2V0ICUgMTYpOworCQkJCUluQnVmWzFdID0gMjsKKwkJCQlJbkJ1ZlsyXSA9IHBEYXRhWzBdOworCisJCQkJZUZ1c2VXcml0ZVBoeXNpY2FsKHBBZCwgJkluQnVmWzBdLCA2LCBOVUxMLCAyKTsKKwkJfQorCisJCS8vU3RlcCA0LiBXcml0ZSBtYXBwaW5nIHRhYmxlCisJCWFkZHIgPSBFRlVTRV9VU0FHRV9NQVBfU1RBUlQrQmxrTnVtOworCisJCXRtcGFkZHIgPSBhZGRyOworCisJCWlmKGFkZHIgJSAyICE9IDApCisJCQlhZGRyID0gYWRkciAtMTsKKwkJSW5CdWZbMF0gPSBhZGRyOworCQlJbkJ1ZlsxXSA9IDI7CisKKwkJLy9jb252ZXJ0IHRoZSBhZGRyZXNzIGZyb20gMTAgdG8gOCBiaXQgKCBiaXQ3LCA2ID0gcGFyaXR5IGFuZCBiaXQ1IH4gMCA9IGJpdDl+NCksIGFuZCB3cml0ZSB0byBsb2dpY2FsIG1hcCBlbnRyeQorCQl0bXBPZmZzZXQgPSBPZmZzZXQ7CisJCXRtcE9mZnNldCA+Pj0gNDsKKwkJdG1wT2Zmc2V0IHw9ICgofigodG1wT2Zmc2V0ICYgMHgwMSkgXiAoIHRtcE9mZnNldCA+PiAxICYgMHgwMSkgXiAgKHRtcE9mZnNldCA+PiAyICYgMHgwMSkgXiAgKHRtcE9mZnNldCA+PiAzICYgMHgwMSkpKSA8PCA2KSAmIDB4NDA7CisJCXRtcE9mZnNldCB8PSAoKH4oICh0bXBPZmZzZXQgPj4gMiAmIDB4MDEpIF4gKHRtcE9mZnNldCA+PiAzICYgMHgwMSkgXiAodG1wT2Zmc2V0ID4+IDQgJiAweDAxKSBeICggdG1wT2Zmc2V0ID4+IDUgJiAweDAxKSkpIDw8IDcpICYgMHg4MDsKKworCQkvLyB3cml0ZSB0aGUgbG9naWNhbCBhZGRyZXNzCisJCWlmKHRtcGFkZHIlMiAhPSAwKQorCQkJSW5CdWZbMl0gPSB0bXBPZmZzZXQ8PDg7CisJCWVsc2UKKwkJCUluQnVmWzJdID0gdG1wT2Zmc2V0OworCisJCWVGdXNlV3JpdGVQaHlzaWNhbChwQWQsJkluQnVmWzBdLCA2LCBOVUxMLCAwKTsKKworCQkvL1N0ZXAgNS4gQ29tcGFyZSBkYXRhIGlmIG5vdCB0aGUgc2FtZSwgaW52YWxpZGF0ZSB0aGUgbWFwcGluZyBlbnRyeSwgdGhlbiByZS13cml0ZSB0aGUgZGF0YSB1bnRpbCBFLWZ1c2UgaXMgZXhoYXVzdGVkCisJCWJXcml0ZVN1Y2Nlc3MgPSBUUlVFOworCQlmb3IoaSA9MDsgaTw4OyBpKyspCisJCXsKKwkJCWFkZHIgPSBCbGtOdW0gKiAweDEwIDsKKworCQkJSW5CdWZbMF0gPSBhZGRyKzIqaTsKKwkJCUluQnVmWzFdID0gMjsKKwkJCUluQnVmWzJdID0gMHgwOworCisJCQllRnVzZVJlYWRQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNCwgJkluQnVmWzJdLCAyKTsKKworCQkJaWYoYnVmZmVyW2ldICE9IEluQnVmWzJdKQorCQkJeworCQkJCWJXcml0ZVN1Y2Nlc3MgPSBGQUxTRTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8vU3RlcCA2LiBpbnZsaWRhdGUgbWFwcGluZyBlbnRyeSBhbmQgZmluZCBhIGZyZWUgbWFwcGluZyBlbnRyeSBpZiBub3Qgc3VjY2VlZAorCQlpZiAoIWJXcml0ZVN1Y2Nlc3MpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5vdCBiV3JpdGVTdWNjZXNzIEJsa051bSA9ICVkXG4iLCBCbGtOdW0pKTsKKworCQkJLy8gdGhlIG9mZnNldCBvZiBjdXJyZW50IG1hcHBpbmcgZW50cnkKKwkJCWFkZHIgPSBFRlVTRV9VU0FHRV9NQVBfU1RBUlQrQmxrTnVtOworCisJCQkvL2ZpbmQgYSBuZXcgbWFwcGluZyBlbnRyeQorCQkJQmxrTnVtID0gMHhmZmZmOworCQkJZm9yIChpPUVGVVNFX1VTQUdFX01BUF9TVEFSVDsgaTw9RUZVU0VfVVNBR0VfTUFQX0VORDsgaSs9MikKKwkJCXsKKwkJCQllRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycyhwQWQsIGksIDIsICZMb2dpY2FsQWRkcmVzcyk7CisJCQkJaWYoIChMb2dpY2FsQWRkcmVzcyAmIDB4ZmYpID09IDApCisJCQkJeworCQkJCQlCbGtOdW0gPSBpLUVGVVNFX1VTQUdFX01BUF9TVEFSVDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UgaWYoKCAoTG9naWNhbEFkZHJlc3MgPj4gOCkgJiAweGZmKSA9PSAwKQorCQkJCXsKKwkJCQkJaWYgKGkgIT0gRUZVU0VfVVNBR0VfTUFQX0VORCkKKwkJCQkJeworCQkJCQkJQmxrTnVtID0gaSsxLUVGVVNFX1VTQUdFX01BUF9TVEFSVDsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOb3QgYldyaXRlU3VjY2VzcyBuZXcgQmxrTnVtID0gJWRcbiIsIEJsa051bSkpOworCQkJaWYoQmxrTnVtID09IDB4ZmZmZikKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJlRnVzZVdyaXRlUmVnaXN0ZXJzOiBvdXQgb2YgZnJlZSBFLWZ1c2Ugc3BhY2UhISFcbiIpKTsKKwkJCQlyZXR1cm4gRkFMU0U7CisJCQl9CisKKwkJCS8vaW52YWxpZGF0ZSB0aGUgb3JpZ2luYWwgbWFwcGluZyBlbnRyeSBpZiBuZXcgZW50cnkgaXMgbm90IGZvdW5kCisJCQl0bXBhZGRyID0gYWRkcjsKKworCQkJaWYoYWRkciAlIDIgIT0gMCkKKwkJCQlhZGRyID0gYWRkciAtMTsKKwkJCUluQnVmWzBdID0gYWRkcjsKKwkJCUluQnVmWzFdID0gMjsKKworCQkJZUZ1c2VSZWFkUGh5c2ljYWwocEFkLCAmSW5CdWZbMF0sIDQsICZJbkJ1ZlsyXSwgMik7CisKKwkJCS8vIHdyaXRlIHRoZSBsb2dpY2FsIGFkZHJlc3MKKwkJCWlmKHRtcGFkZHIlMiAhPSAwKQorCQkJeworCQkJCS8vIEludmFsaWRhdGUgdGhlIGhpZ2ggYnl0ZQorCQkJCWZvciAoaT04OyBpPDE1OyBpKyspCisJCQkJeworCQkJCQlpZiggKCAoSW5CdWZbMl0gPj4gaSkgJiAweDAxKSA9PSAwKQorCQkJCQl7CisJCQkJCQlJbkJ1ZlsyXSB8PSAoMHgxIDw8aSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBpbnZhbGlkYXRlIHRoZSBsb3cgYnl0ZQorCQkJCWZvciAoaT0wOyBpPDg7IGkrKykKKwkJCQl7CisJCQkJCWlmKCAoIChJbkJ1ZlsyXSA+PiBpKSAmIDB4MDEpID09IDApCisJCQkJCXsKKwkJCQkJCUluQnVmWzJdIHw9ICgweDEgPDxpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZUZ1c2VXcml0ZVBoeXNpY2FsKHBBZCwgJkluQnVmWzBdLCA2LCBOVUxMLCAwKTsKKwkJfQorCX0KKwl3aGlsZSghYldyaXRlU3VjY2Vzcyk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIGVGdXNlV3JpdGVQaHlzaWNhbCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgCVBVU0hPUlQgbHBJbkJ1ZmZlciwKKwlVTE9ORyBuSW5CdWZmZXJTaXplLAorICAJUFVDSEFSIGxwT3V0QnVmZmVyLAorICAJVUxPTkcgbk91dEJ1ZmZlclNpemUKKykKK3sKKwlVU0hPUlQqIHBJbkJ1ZiA9IChVU0hPUlQqKWxwSW5CdWZmZXI7CisJaW50IAkJaTsKKwkvL1VTSE9SVCogcE91dEJ1ZiA9IChVU0hPUlQqKWlvQnVmZmVyOworCisJVVNIT1JUIE9mZnNldCA9IHBJbkJ1ZlswXTsJCQkJCS8vYWRkcgorCVVTSE9SVCBMZW5ndGggPSBwSW5CdWZbMV07CQkJCQkvL2xlbmd0aAorCVVTSE9SVCogcFZhbHVlWCA9ICZwSW5CdWZbMl07CQkJCS8vdmFsdWUgLi4uCisJCS8vIExpdHRsZS1lbmRpYW4JCVMJfAlTCUJpZy1lbmRpYW4KKwkJLy8gYWRkcgkzCTIJMQkwCXwJMAkxCTIJMworCQkvLyBPcmktVglECUMJQglBCXwJQQlCCUMJRAorCQkvL0FmdGVyIHN3YXBwaW5nCisJCS8vCQlECUMJQglBCXwJRAlDCUIJQQorCQkvL0JvdGggdGhlIGxpdHRsZSBhbmQgYmlnLWVuZGlhbiB1c2UgdGhlIHNhbWUgc2VxdWVuY2UgdG8gd3JpdGUgIGRhdGEuCisJCS8vVGhlcmVmb3JlLCB3ZSBvbmx5IG5lZWQgc3dhcCBkYXRhIHdoZW4gcmVhZCB0aGUgZGF0YS4KKwlmb3IoaT0wOyBpPExlbmd0aDsgaSs9MikKKwl7CisJCWVGdXNlUGh5c2ljYWxXcml0ZVJlZ2lzdGVycyhwQWQsIE9mZnNldCtpLCAyLCAmcFZhbHVlWFtpLzJdKTsKKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUyBlRnVzZVdyaXRlKAorICAgCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVU0hPUlQJCQlsZW5ndGgpCit7CisJaW50IGk7CisKKwlVU0hPUlQqIHBWYWx1ZVggPSAoUFVTSE9SVCkgcERhdGE7CQkJCS8vdmFsdWUgLi4uCisJCS8vVGhlIGlucHV0IHZhbHVlPTMwNzAgd2lsbCBiZSBzdG9yZWQgYXMgZm9sbG93aW5nCisgCQkvLyBMaXR0bGUtZW5kaWFuCQlTCXwJUwlCaWctZW5kaWFuCisJCS8vIGFkZHIJCQkxCTAJfAkwCTEKKwkJLy8gT3JpLVYJCQkzMAk3MAl8CTMwCTcwCisJCS8vQWZ0ZXIgc3dhcHBpbmcKKwkJLy8JCQkJMzAJNzAJfAk3MAkzMAorCQkvL0Nhc3RpbmcKKwkJLy8JCQkJMzA3MAl8CTcwMzAgKHgpCisJCS8vVGhlIHN3YXBwaW5nIHNob3VsZCBiZSByZW1vdmVkIGZvciBiaWctZW5kaWFuCisJZm9yKGk9MDsgaTxsZW5ndGg7IGkrPTIpCisJeworCQllRnVzZVdyaXRlUmVnaXN0ZXJzKHBBZCwgT2Zmc2V0K2ksIDIsICZwVmFsdWVYW2kvMl0pOworCX0KKworCXJldHVybiBUUlVFOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBzZXRfZUZ1c2VHZXRGcmVlQmxvY2tDb3VudF9Qcm9jKAorICAgCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVU0hPUlQgaTsKKwlVU0hPUlQJTG9naWNhbEFkZHJlc3M7CisJVVNIT1JUIGVmdXNlZnJlZW51bT0wOworCWlmKCFwQWQtPmJVc2VFZnVzZSkKKwkJcmV0dXJuIEZBTFNFOworCWZvciAoaSA9IEVGVVNFX1VTQUdFX01BUF9TVEFSVDsgaSA8PSBFRlVTRV9VU0FHRV9NQVBfRU5EOyBpKz0yKQorCXsKKwkJZUZ1c2VQaHlzaWNhbFJlYWRSZWdpc3RlcnMocEFkLCBpLCAyLCAmTG9naWNhbEFkZHJlc3MpOworCQlpZiggKExvZ2ljYWxBZGRyZXNzICYgMHhmZikgPT0gMCkKKwkJeworCQkJZWZ1c2VmcmVlbnVtPSAoVUNIQVIpIChFRlVTRV9VU0FHRV9NQVBfRU5ELWkrMSk7CisJCQlicmVhazsKKwkJfQorCQllbHNlIGlmKCggKExvZ2ljYWxBZGRyZXNzID4+IDgpICYgMHhmZikgPT0gMCkKKwkJeworCQkJZWZ1c2VmcmVlbnVtID0gKFVDSEFSKSAoRUZVU0VfVVNBR0VfTUFQX0VORC1pKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYoaSA9PSBFRlVTRV9VU0FHRV9NQVBfRU5EKQorCQkJZWZ1c2VmcmVlbnVtID0gMDsKKwl9CisJcHJpbnRrKCJlZnVzZUZyZWVOdW1iZXIgaXMgJWRcbiIsZWZ1c2VmcmVlbnVtKTsKKwlyZXR1cm4gVFJVRTsKK30KK0lOVCBzZXRfZUZ1c2VkdW1wX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworVVNIT1JUIEluQnVmWzNdOworCUlOVCBpPTA7CisJaWYoIXBBZC0+YlVzZUVmdXNlKQorCQlyZXR1cm4gRkFMU0U7CisJZm9yKGkgPTA7IGk8RUZVU0VfVVNBR0VfTUFQX0VORC8yOyBpKyspCisJeworCQlJbkJ1ZlswXSA9IDIqaTsKKwkJSW5CdWZbMV0gPSAyOworCQlJbkJ1ZlsyXSA9IDB4MDsKKworCQllRnVzZVJlYWRQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNCwgJkluQnVmWzJdLCAyKTsKKwkJaWYoaSU0PT0wKQorCQlwcmludGsoIlxuQmxvY2sgJXg6IixpLzgpOworCQlwcmludGsoIiUwNHggIixJbkJ1ZlsyXSk7CisJfQorCXJldHVybiBUUlVFOworfQorSU5UCXNldF9lRnVzZUxvYWRGcm9tQmluX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUNIQVIJCQkJCSpzcmM7CisJc3RydWN0IGZpbGUJCQkJKnNyY2Y7CisJSU5UIAkJCQkJcmV0dmFsLCBvcmdmc3VpZCwgb3JnZnNnaWQ7CisgICAJbW1fc2VnbWVudF90CQkJb3JnZnM7CisJVUNIQVIJCQkJCSpidWZmZXI7CisJVUNIQVIJCQkJCUJpbkZpbGVTaXplPTA7CisJSU5UCQkJCQkJaSA9IDAsaj0wLGs9MTsKKwlVU0hPUlQJCQkJCSpQREFUQTsKKwlVU0hPUlQJCQkJCURBVEE7CisJQmluRmlsZVNpemU9c3RybGVuKCJSVDMweHhFRVBST00uYmluIik7CisJc3JjID0ga21hbGxvYygxMjgsIE1FTV9BTExPQ19GTEFHKTsKKwlOZGlzWmVyb01lbW9yeShzcmMsIDEyOCk7CisKKyAJaWYoc3RybGVuKGFyZyk+MCkKKwl7CisKKwkJTmRpc01vdmVNZW1vcnkoc3JjLCBhcmcsIHN0cmxlbihhcmcpKTsKKyAJfQorCisJZWxzZQorCXsKKworCQlOZGlzTW92ZU1lbW9yeShzcmMsICJSVDMweHhFRVBST00uYmluIiwgQmluRmlsZVNpemUpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkZpbGVOYW1lPSVzXG4iLHNyYykpOworCWJ1ZmZlciA9IGttYWxsb2MoTUFYX0VFUFJPTV9CSU5fRklMRV9TSVpFLCBNRU1fQUxMT0NfRkxBRyk7CisKKwlpZihidWZmZXIgPT0gTlVMTCkKKwl7CisJCWtmcmVlKHNyYyk7CisJCSByZXR1cm4gRkFMU0U7Cit9CisJUERBVEE9a21hbGxvYyhzaXplb2YoVVNIT1JUKSo4LE1FTV9BTExPQ19GTEFHKTsKKworCWlmKFBEQVRBPT1OVUxMKQorCXsKKwkJa2ZyZWUoc3JjKTsKKworCQlrZnJlZShidWZmZXIpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCS8qIERvbid0IGNoYW5nZSB0byB1aWQgMCwgbGV0IHRoZSBmaWxlIGJlIG9wZW5lZCBhcyB0aGUgIm5vcm1hbCIgdXNlciAqLworI2lmIDAKKwlvcmdmc3VpZCA9IGN1cnJlbnQtPmZzdWlkOworCW9yZ2ZzZ2lkID0gY3VycmVudC0+ZnNnaWQ7CisJY3VycmVudC0+ZnN1aWQ9Y3VycmVudC0+ZnNnaWQgPSAwOworI2VuZGlmCisgICAgCW9yZ2ZzID0gZ2V0X2ZzKCk7CisgICAJIHNldF9mcyhLRVJORUxfRFMpOworCisJaWYgKHNyYyAmJiAqc3JjKQorCXsKKwkJc3JjZiA9IGZpbHBfb3BlbihzcmMsIE9fUkRPTkxZLCAwKTsKKwkJaWYgKElTX0VSUihzcmNmKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiLS0+IEVycm9yICVsZCBvcGVuaW5nICVzXG4iLCAtUFRSX0VSUihzcmNmKSxzcmMpKTsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIFRoZSBvYmplY3QgbXVzdCBoYXZlIGEgcmVhZCBtZXRob2QKKwkJCWlmIChzcmNmLT5mX29wICYmIHNyY2YtPmZfb3AtPnJlYWQpCisJCQl7CisJCQkJbWVtc2V0KGJ1ZmZlciwgMHgwMCwgTUFYX0VFUFJPTV9CSU5fRklMRV9TSVpFKTsKKwkJCQl3aGlsZShzcmNmLT5mX29wLT5yZWFkKHNyY2YsICZidWZmZXJbaV0sIDEsICZzcmNmLT5mX3Bvcyk9PTEpCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlMDJYICIsYnVmZmVyW2ldKSk7CisJCQkJCWlmKChpKzEpJTg9PTApCisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJcbiIpKTsKKyAgICAgICAgICAgICAgCQkJaSsrOworCQkJCQkJaWYoaT49TUFYX0VFUFJPTV9CSU5fRklMRV9TSVpFKQorCQkJCQkJCXsKKwkJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiLS0+IEVycm9yICVsZCByZWFkaW5nICVzLCBUaGUgZmlsZSBpcyB0b28gbGFyZ2VbMTAyNF1cbiIsIC1QVFJfRVJSKHNyY2YpLHNyYykpOworCQkJCQkJCQlrZnJlZShQREFUQSk7CisJCQkJCQkJCWtmcmVlKGJ1ZmZlcik7CisJCQkJCQkJCWtmcmVlKHNyYyk7CisJCQkJCQkJCXJldHVybiBGQUxTRTsKKwkJCQkJCQl9CisJCQkgICAgICAgfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiLS0+IEVycm9yISEgU3lzdGVtIGRvZXN0IG5vdCBzdXBwb3J0IHJlYWQgZnVuY3Rpb25cbiIpKTsKKwkJCQkJCWtmcmVlKFBEQVRBKTsKKwkJCQkJCWtmcmVlKGJ1ZmZlcik7CisJCQkJCQlrZnJlZShzcmMpOworCQkJCQkJcmV0dXJuIEZBTFNFOworCQkJfQorICAgICAgCQl9CisKKworCX0KKwllbHNlCisJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiLS0+IEVycm9yIHNyYyAgb3Igc3JjZiBpcyBudWxsXG4iKSk7CisJCQkJCWtmcmVlKFBEQVRBKTsKKwkJCQkJa2ZyZWUoYnVmZmVyKTsKKwkJCQkJcmV0dXJuIEZBTFNFOworCisJCX0KKworCisJcmV0dmFsPWZpbHBfY2xvc2Uoc3JjZixOVUxMKTsKKworCWlmIChyZXR2YWwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gRXJyb3IgJWQgY2xvc2luZyAlc1xuIiwgLXJldHZhbCwgc3JjKSk7CisJfQorCXNldF9mcyhvcmdmcyk7CisjaWYgMAorCWN1cnJlbnQtPmZzdWlkID0gb3JnZnN1aWQ7CisJY3VycmVudC0+ZnNnaWQgPSBvcmdmc2dpZDsKKyNlbmRpZgorCWZvcihqPTA7ajxpO2orKykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiUwMlggIixidWZmZXJbal0pKTsKKwkJaWYoKGorMSklMj09MCkKKwkJCVBEQVRBW2ovMiU4XT0oKGJ1ZmZlcltqXTw8OCkmMHhmZjAwKXwoYnVmZmVyW2otMV0mMHhmZik7CisJCWlmKGolMTY9PTApCisJCXsKKwkJCWs9YnVmZmVyW2pdOworCQl9CisJCWVsc2UKKwkJeworCQkJayY9YnVmZmVyW2pdOworCQkJaWYoKGorMSklMTY9PTApCisJCQl7CisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgcmVzdWx0PSUwMlgsYmxrPSUwMnhcbiIsayxqLzE2KSk7CisKKwkJCQlpZihrIT0weGZmKQorCQkJCQllRnVzZVdyaXRlUmVnaXN0ZXJzRnJvbUJpbihwQWQsKFVTSE9SVClqLTE1LCAxNiwgUERBVEEpOworCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJaWYoZUZ1c2VSZWFkUmVnaXN0ZXJzKHBBZCxqLCAyLChQVVNIT1JUKSZEQVRBKSE9MHgzZikKKwkJCQkJCQllRnVzZVdyaXRlUmVnaXN0ZXJzRnJvbUJpbihwQWQsKFVTSE9SVClqLTE1LCAxNiwgUERBVEEpOworCQkJCQl9CisJCQkJLyoKKwkJCQlmb3IobD0wO2w8ODtsKyspCisJCQkJCXByaW50aygiJTA0eCAiLFBEQVRBW2xdKTsKKwkJCQlwcmludGsoIlxuIik7CisJCQkJKi8KKwkJCQlOZGlzWmVyb01lbW9yeShQREFUQSwxNik7CisKKworCQkJfQorCQl9CisKKworCX0KKworCisJa2ZyZWUoUERBVEEpOworCWtmcmVlKGJ1ZmZlcik7CisJa2ZyZWUoc3JjKTsKKwlyZXR1cm4gVFJVRTsKK30KK05UU1RBVFVTIGVGdXNlV3JpdGVSZWdpc3RlcnNGcm9tQmluKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVCBPZmZzZXQsCisJSU4JVVNIT1JUIExlbmd0aCwKKwlJTglVU0hPUlQqIHBEYXRhKQoreworCVVTSE9SVAlpOworCVVTSE9SVAllRnVzZURhdGE7CisJVVNIT1JUCUxvZ2ljYWxBZGRyZXNzLCBCbGtOdW0gPSAweGZmZmY7CisJVUNIQVIJRUZTUk9NX0FPVVQsTG9vcD0wOworCUVGVVNFX0NUUkxfU1RSVUMJCWVGdXNlQ3RybFN0cnVjOworCVVTSE9SVAllZnVzZURhdGFPZmZzZXQ7CisJVUlOVDMyCWRhdGEsdGVtcGJ1ZmZlcjsKKwlVU0hPUlQgYWRkcix0bXBhZGRyLCBJbkJ1ZlszXSwgdG1wT2Zmc2V0OworCVVJTlQzMiBidWZmZXJbNF07CisJQk9PTEVBTgkJYldyaXRlU3VjY2VzcyA9IFRSVUU7CisJQk9PTEVBTgkJYk5vdFdyaXRlPVRSVUU7CisJQk9PTEVBTgkJYkFsbG9jYXRlTmV3QmxrPVRSVUU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJlRnVzZVdyaXRlUmVnaXN0ZXJzRnJvbUJpbiBPZmZzZXQ9JXgsIHBEYXRhPSUwNHg6JTA0eDolMDR4OiUwNHhcbiIsIE9mZnNldCwgKnBEYXRhLCoocERhdGErMSksKihwRGF0YSsyKSwqKHBEYXRhKzMpKSk7CisKKwlkbworCXsKKwkvL1N0ZXAgMC4gZmluZCB0aGUgZW50cnkgaW4gdGhlIG1hcHBpbmcgdGFibGUKKwkvL1RoZSBhZGRyZXNzIG9mIEVFUFJPTSBpcyAyLWJ5dGVzIGFsaWdubWVudC4KKwkvL1RoZSBsYXN0IGJpdCBpcyB1c2VkIGZvciBhbGlnbm1lbnQsIHNvIGl0IG11c3QgYmUgMC4KKwlMb29wKys7CisJdG1wT2Zmc2V0ID0gT2Zmc2V0ICYgMHhmZmZlOworCUVGU1JPTV9BT1VUID0gZUZ1c2VSZWFkUmVnaXN0ZXJzKHBBZCwgdG1wT2Zmc2V0LCAyLCAmZUZ1c2VEYXRhKTsKKworCWlmKCBFRlNST01fQU9VVCA9PSAweDNmKQorCXsJLy9maW5kIGF2YWlsYWJsZSBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlcgorCQkvL3RoZSBsb2dpY2FsIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QsIGZpbmQgYW4gZW1wdHkgb25lCisJCS8vZnJvbSB0aGUgZmlyc3QgYWRkcmVzcyBvZiBibG9jayA0NT0xNio0NT0weDJkMCB0byB0aGUgbGFzdCBhZGRyZXNzIG9mIGJsb2NrIDQ3CisJCS8vPT0+NDgqMTYtMyhyZXNlcnZlZCk9MkZDCisJCWJBbGxvY2F0ZU5ld0Jsaz1UUlVFOworCQlmb3IgKGk9RUZVU0VfVVNBR0VfTUFQX1NUQVJUOyBpPD1FRlVTRV9VU0FHRV9NQVBfRU5EOyBpKz0yKQorCQl7CisJCQkvL1JldHJpdmUgdGhlIGxvZ2ljYWwgYmxvY2sgbnVibWVyIGZvcm0gZWFjaCBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlcgorCQkJLy9JdCB3aWxsIGFjY2VzcyB0d28gbG9naWNhbCBhZGRyZXNzIHBvaW50ZXIgZWFjaCB0aW1lLgorCQkJZUZ1c2VQaHlzaWNhbFJlYWRSZWdpc3RlcnMocEFkLCBpLCAyLCAmTG9naWNhbEFkZHJlc3MpOworCQkJaWYoIChMb2dpY2FsQWRkcmVzcyAmIDB4ZmYpID09IDApCisJCQl7Ly9Ob3QgdXNlZCBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlcgorCQkJCUJsa051bSA9IGktRUZVU0VfVVNBR0VfTUFQX1NUQVJUOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZSBpZigoIChMb2dpY2FsQWRkcmVzcyA+PiA4KSAmIDB4ZmYpID09IDApCisJCQl7Ly9Ob3QgdXNlZCBsb2dpY2FsIGFkZHJlc3MgcG9pbnRlcgorCQkJCWlmIChpICE9IEVGVVNFX1VTQUdFX01BUF9FTkQpCisJCQkJeworCQkJCQlCbGtOdW0gPSBpLUVGVVNFX1VTQUdFX01BUF9TVEFSVCsxOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQliQWxsb2NhdGVOZXdCbGs9RkFMU0U7CisJCUJsa051bSA9IEVGU1JPTV9BT1VUOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImVGdXNlV3JpdGVSZWdpc3RlcnMgQmxrTnVtID0gJWQgXG4iLCBCbGtOdW0pKTsKKworCWlmKEJsa051bSA9PSAweGZmZmYpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJlRnVzZVdyaXRlUmVnaXN0ZXJzOiBvdXQgb2YgZnJlZSBFLWZ1c2Ugc3BhY2UhISFcbiIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwkvL1N0ZXAgMS4xLjAKKwkvL0lmIHRoZSBibG9jayBpcyBub3QgZXhpc3RpbmcgaW4gbWFwcGluZyB0YWJsZSwgY3JlYXRlIG9uZQorCS8vYW5kIHdyaXRlIGRvd24gdGhlIDE2LWJ5dGVzIGRhdGEgdG8gdGhlIG5ldyBibG9jaworCWlmKGJBbGxvY2F0ZU5ld0JsaykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFsbG9jYXRlIE5ldyBCbGtcbiIpKTsKKwkJZWZ1c2VEYXRhT2Zmc2V0ID0gIEVGVVNFX0RBVEEzOworCQlmb3IoaT0wOyBpPCA0OyBpKyspCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFsbG9jYXRlIE5ldyBCbGssIERhdGElZD0lMDR4JTA0eFxuIiwzLWkscERhdGFbMippKzFdLHBEYXRhWzIqaV0pKTsKKwkJCXRlbXBidWZmZXI9KChwRGF0YVsyKmkrMV08PDE2KSYweGZmZmYwMDAwKXxwRGF0YVsyKmldOworCisKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIGVmdXNlRGF0YU9mZnNldCx0ZW1wYnVmZmVyKTsKKwkJCWVmdXNlRGF0YU9mZnNldCAtPSA0OworCisJCX0KKwkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCQkvL1N0ZXAxLjEuMS4gV3JpdGUgMTAtYml0IG9mIGFkZHJlc3MgdG8gRUZTUk9NX0FJTiAoMHg1ODAsIGJpdDI1OmJpdDE2KS4gVGhlIGFkZHJlc3MgbXVzdCBiZSAxNi1ieXRlIGFsaWdubWVudC4KKwkJZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0FJTiA9IEJsa051bSogMHgxMCA7CisKKwkJLy9TdGVwMS4xLjIuIFdyaXRlIEVGU1JPTV9NT0RFICgweDU4MCwgYml0NzpiaXQ2KSB0byAzLgorCQllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fTU9ERSA9IDM7CisKKwkJLy9TdGVwMS4xLjMuIFdyaXRlIEVGU1JPTV9LSUNLICgweDU4MCwgYml0MzApIHRvIDEgdG8ga2ljay1vZmYgcGh5c2ljYWwgd3JpdGUgcHJvY2VkdXJlLgorCQllRnVzZUN0cmxTdHJ1Yy5maWVsZC5FRlNST01fS0lDSyA9IDE7CisKKwkJTmRpc01vdmVNZW1vcnkoJmRhdGEsICZlRnVzZUN0cmxTdHJ1YywgNCk7CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRUZVU0VfQ1RSTCwgZGF0YSk7CisKKwkJLy9TdGVwMS4xLjQuIFBvbGxpbmcgRUZTUk9NX0tJQ0soMHg1ODAsIGJpdDMwKSB1bnRpbCBpdCBiZWNvbWUgMCBhZ2Fpbi4gSXShpnMgZG9uZS4KKwkJaSA9IDA7CisJCXdoaWxlKGkgPCAxMDApCisJCXsKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgRUZVU0VfQ1RSTCwgKFBVSU5UMzIpICZlRnVzZUN0cmxTdHJ1Yyk7CisKKwkJCWlmKGVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9LSUNLID09IDApCisJCQkJYnJlYWs7CisKKwkJCVJUTVB1c2VjRGVsYXkoMik7CisJCQlpKys7CisJCX0KKworCX0KKwllbHNlCisJewkvL1N0ZXAxLjIuCisJCS8vSWYgdGhlIHNhbWUgbG9naWNhbCBudW1iZXIgaXMgZXhpc3RpbmcsIGNoZWNrIGlmIHRoZSB3cml0dGluZyBkYXRhIGFuZCB0aGUgZGF0YQorCQkvL3NhdmluZyBpbiB0aGlzIGJsb2NrIGFyZSB0aGUgc2FtZS4KKwkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJLy9yZWFkIGN1cnJlbnQgdmFsdWVzIG9mIDE2LWJ5dGUgYmxvY2sKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBFRlVTRV9DVFJMLCAoUFVJTlQzMikgJmVGdXNlQ3RybFN0cnVjKTsKKworCQkvL1N0ZXAxLjIuMC4gV3JpdGUgMTAtYml0IG9mIGFkZHJlc3MgdG8gRUZTUk9NX0FJTiAoMHg1ODAsIGJpdDI1OmJpdDE2KS4gVGhlIGFkZHJlc3MgbXVzdCBiZSAxNi1ieXRlIGFsaWdubWVudC4KKwkJZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0FJTiA9IE9mZnNldCAmIDB4ZmZmMDsKKworCQkvL1N0ZXAxLjIuMS4gV3JpdGUgRUZTUk9NX01PREUgKDB4NTgwLCBiaXQ3OmJpdDYpIHRvIDEuCisJCWVGdXNlQ3RybFN0cnVjLmZpZWxkLkVGU1JPTV9NT0RFID0gMDsKKworCQkvL1N0ZXAxLjIuMi4gV3JpdGUgRUZTUk9NX0tJQ0sgKDB4NTgwLCBiaXQzMCkgdG8gMSB0byBraWNrLW9mZiBwaHlzaWNhbCByZWFkIHByb2NlZHVyZS4KKwkJZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0tJQ0sgPSAxOworCisJCU5kaXNNb3ZlTWVtb3J5KCZkYXRhLCAmZUZ1c2VDdHJsU3RydWMsIDQpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRlVTRV9DVFJMLCBkYXRhKTsKKworCQkvL1N0ZXAxLjIuMy4gUG9sbGluZyBFRlNST01fS0lDSygweDU4MCwgYml0MzApIHVudGlsIGl0IGJlY29tZSAwIGFnYWluLgorCQlpID0gMDsKKwkJd2hpbGUoaSA8IDEwMCkKKwkJeworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBFRlVTRV9DVFJMLCAoUFVJTlQzMikgJmVGdXNlQ3RybFN0cnVjKTsKKworCQkJaWYoZUZ1c2VDdHJsU3RydWMuZmllbGQuRUZTUk9NX0tJQ0sgPT0gMCkKKwkJCQlicmVhazsKKwkJCVJUTVB1c2VjRGVsYXkoMik7CisJCQlpKys7CisJCX0KKworCQkvL1N0ZXAxLjIuNC4gUmVhZCAxNi1ieXRlIG9mIGRhdGEgZnJvbSBFRlVTRV9EQVRBMC0zICgweDU5Qy0weDU5MCkKKwkJZWZ1c2VEYXRhT2Zmc2V0ID0gIEVGVVNFX0RBVEEzOworCQlmb3IoaT0wOyBpPCA0OyBpKyspCisJCXsKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgZWZ1c2VEYXRhT2Zmc2V0LCAoUFVJTlQzMikgJmJ1ZmZlcltpXSk7CisJCQllZnVzZURhdGFPZmZzZXQgLT0gIDQ7CisJCX0KKwkJLy9TdGVwMS4yLjUuIENoZWNrIGlmIHRoZSBkYXRhIG9mIGVmdXNlIGFuZCB0aGUgd3JpdGluZyBkYXRhIGFyZSB0aGUgc2FtZS4KKwkJZm9yKGkgPTA7IGk8NDsgaSsrKQorCQl7CisJCQl0ZW1wYnVmZmVyPSgocERhdGFbMippKzFdPDwxNikmMHhmZmZmMDAwMCl8cERhdGFbMippXTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImJ1ZmZlclslZF09JXgscERhdGFbJWRdPSV4LHBEYXRhWyVkXT0leCx0ZW1wYnVmZmVyPSV4XG4iLGksYnVmZmVyW2ldLDIqaSxwRGF0YVsyKmldLDIqaSsxLHBEYXRhWzIqaSsxXSx0ZW1wYnVmZmVyKSk7CisKKwkJCWlmKCgoYnVmZmVyW2ldJjB4ZmZmZjAwMDApPT0ocERhdGFbMippKzFdPDwxNikpJiYoKGJ1ZmZlcltpXSYweGZmZmYpPT1wRGF0YVsyKmldKSkKKwkJCQliTm90V3JpdGUmPVRSVUU7CisJCQllbHNlCisJCQl7CisJCQkJYk5vdFdyaXRlJj1GQUxTRTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZighYk5vdFdyaXRlKQorCQl7CisJCXByaW50aygiVGhlIGRhdGEgaXMgbm90IHRoZSBzYW1lXG4iKTsKKworCQkJZm9yKGkgPTA7IGk8ODsgaSsrKQorCQkJeworCQkJCWFkZHIgPSBCbGtOdW0gKiAweDEwIDsKKworCQkJCUluQnVmWzBdID0gYWRkcisyKmk7CisJCQkJSW5CdWZbMV0gPSAyOworCQkJCUluQnVmWzJdID0gcERhdGFbaV07CisKKwkJCQllRnVzZVdyaXRlUGh5c2ljYWwocEFkLCAmSW5CdWZbMF0sIDYsIE5VTEwsIDIpOworCQkJfQorCisJCX0KKwkJZWxzZQorCQkJcmV0dXJuIFRSVUU7CisJICAgICB9CisKKworCisJCS8vU3RlcCAyLiBXcml0ZSBtYXBwaW5nIHRhYmxlCisJCWFkZHIgPSBFRlVTRV9VU0FHRV9NQVBfU1RBUlQrQmxrTnVtOworCisJCXRtcGFkZHIgPSBhZGRyOworCisJCWlmKGFkZHIgJSAyICE9IDApCisJCQlhZGRyID0gYWRkciAtMTsKKwkJSW5CdWZbMF0gPSBhZGRyOworCQlJbkJ1ZlsxXSA9IDI7CisKKwkJLy9jb252ZXJ0IHRoZSBhZGRyZXNzIGZyb20gMTAgdG8gOCBiaXQgKCBiaXQ3LCA2ID0gcGFyaXR5IGFuZCBiaXQ1IH4gMCA9IGJpdDl+NCksIGFuZCB3cml0ZSB0byBsb2dpY2FsIG1hcCBlbnRyeQorCQl0bXBPZmZzZXQgPSBPZmZzZXQ7CisJCXRtcE9mZnNldCA+Pj0gNDsKKwkJdG1wT2Zmc2V0IHw9ICgofigodG1wT2Zmc2V0ICYgMHgwMSkgXiAoIHRtcE9mZnNldCA+PiAxICYgMHgwMSkgXiAgKHRtcE9mZnNldCA+PiAyICYgMHgwMSkgXiAgKHRtcE9mZnNldCA+PiAzICYgMHgwMSkpKSA8PCA2KSAmIDB4NDA7CisJCXRtcE9mZnNldCB8PSAoKH4oICh0bXBPZmZzZXQgPj4gMiAmIDB4MDEpIF4gKHRtcE9mZnNldCA+PiAzICYgMHgwMSkgXiAodG1wT2Zmc2V0ID4+IDQgJiAweDAxKSBeICggdG1wT2Zmc2V0ID4+IDUgJiAweDAxKSkpIDw8IDcpICYgMHg4MDsKKworCQkvLyB3cml0ZSB0aGUgbG9naWNhbCBhZGRyZXNzCisJCWlmKHRtcGFkZHIlMiAhPSAwKQorCQkJSW5CdWZbMl0gPSB0bXBPZmZzZXQ8PDg7CisJCWVsc2UKKwkJCUluQnVmWzJdID0gdG1wT2Zmc2V0OworCisJCWVGdXNlV3JpdGVQaHlzaWNhbChwQWQsJkluQnVmWzBdLCA2LCBOVUxMLCAwKTsKKworCQkvL1N0ZXAgMy4gQ29tcGFyZSBkYXRhIGlmIG5vdCB0aGUgc2FtZSwgaW52YWxpZGF0ZSB0aGUgbWFwcGluZyBlbnRyeSwgdGhlbiByZS13cml0ZSB0aGUgZGF0YSB1bnRpbCBFLWZ1c2UgaXMgZXhoYXVzdGVkCisJCWJXcml0ZVN1Y2Nlc3MgPSBUUlVFOworCQlmb3IoaSA9MDsgaTw4OyBpKyspCisJCXsKKwkJCWFkZHIgPSBCbGtOdW0gKiAweDEwIDsKKworCQkJSW5CdWZbMF0gPSBhZGRyKzIqaTsKKwkJCUluQnVmWzFdID0gMjsKKwkJCUluQnVmWzJdID0gMHgwOworCisJCQllRnVzZVJlYWRQaHlzaWNhbChwQWQsICZJbkJ1ZlswXSwgNCwgJkluQnVmWzJdLCAyKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImFkZHI9JXgsIGJ1ZmZlcltpXT0leCxJbkJ1ZlsyXT0leFxuIixJbkJ1ZlswXSxwRGF0YVtpXSxJbkJ1ZlsyXSkpOworCQkJaWYocERhdGFbaV0gIT0gSW5CdWZbMl0pCisJCQl7CisJCQkJYldyaXRlU3VjY2VzcyA9IEZBTFNFOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLy9TdGVwIDQuIGludmxpZGF0ZSBtYXBwaW5nIGVudHJ5IGFuZCBmaW5kIGEgZnJlZSBtYXBwaW5nIGVudHJ5IGlmIG5vdCBzdWNjZWVkCisKKwkJaWYgKCFiV3JpdGVTdWNjZXNzJiZMb29wPDIpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImVGdXNlV3JpdGVSZWdpc3RlcnNGcm9tQmluOjpOb3QgYldyaXRlU3VjY2VzcyBCbGtOdW0gPSAlZFxuIiwgQmxrTnVtKSk7CisKKwkJCS8vIHRoZSBvZmZzZXQgb2YgY3VycmVudCBtYXBwaW5nIGVudHJ5CisJCQlhZGRyID0gRUZVU0VfVVNBR0VfTUFQX1NUQVJUK0Jsa051bTsKKworCQkJLy9maW5kIGEgbmV3IG1hcHBpbmcgZW50cnkKKwkJCUJsa051bSA9IDB4ZmZmZjsKKwkJCWZvciAoaT1FRlVTRV9VU0FHRV9NQVBfU1RBUlQ7IGk8PUVGVVNFX1VTQUdFX01BUF9FTkQ7IGkrPTIpCisJCQl7CisJCQkJZUZ1c2VQaHlzaWNhbFJlYWRSZWdpc3RlcnMocEFkLCBpLCAyLCAmTG9naWNhbEFkZHJlc3MpOworCQkJCWlmKCAoTG9naWNhbEFkZHJlc3MgJiAweGZmKSA9PSAwKQorCQkJCXsKKwkJCQkJQmxrTnVtID0gaS1FRlVTRV9VU0FHRV9NQVBfU1RBUlQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlIGlmKCggKExvZ2ljYWxBZGRyZXNzID4+IDgpICYgMHhmZikgPT0gMCkKKwkJCQl7CisJCQkJCWlmIChpICE9IEVGVVNFX1VTQUdFX01BUF9FTkQpCisJCQkJCXsKKwkJCQkJCUJsa051bSA9IGkrMS1FRlVTRV9VU0FHRV9NQVBfU1RBUlQ7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiZUZ1c2VXcml0ZVJlZ2lzdGVyc0Zyb21CaW46Ok5vdCBiV3JpdGVTdWNjZXNzIG5ldyBCbGtOdW0gPSAlZFxuIiwgQmxrTnVtKSk7CisJCQlpZihCbGtOdW0gPT0gMHhmZmZmKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImVGdXNlV3JpdGVSZWdpc3RlcnNGcm9tQmluOiBvdXQgb2YgZnJlZSBFLWZ1c2Ugc3BhY2UhISFcbiIpKTsKKwkJCQlyZXR1cm4gRkFMU0U7CisJCQl9CisKKwkJCS8vaW52YWxpZGF0ZSB0aGUgb3JpZ2luYWwgbWFwcGluZyBlbnRyeSBpZiBuZXcgZW50cnkgaXMgbm90IGZvdW5kCisJCQl0bXBhZGRyID0gYWRkcjsKKworCQkJaWYoYWRkciAlIDIgIT0gMCkKKwkJCQlhZGRyID0gYWRkciAtMTsKKwkJCUluQnVmWzBdID0gYWRkcjsKKwkJCUluQnVmWzFdID0gMjsKKworCQkJZUZ1c2VSZWFkUGh5c2ljYWwocEFkLCAmSW5CdWZbMF0sIDQsICZJbkJ1ZlsyXSwgMik7CisKKwkJCS8vIHdyaXRlIHRoZSBsb2dpY2FsIGFkZHJlc3MKKwkJCWlmKHRtcGFkZHIlMiAhPSAwKQorCQkJeworCQkJCS8vIEludmFsaWRhdGUgdGhlIGhpZ2ggYnl0ZQorCQkJCWZvciAoaT04OyBpPDE1OyBpKyspCisJCQkJeworCQkJCQlpZiggKCAoSW5CdWZbMl0gPj4gaSkgJiAweDAxKSA9PSAwKQorCQkJCQl7CisJCQkJCQlJbkJ1ZlsyXSB8PSAoMHgxIDw8aSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBpbnZhbGlkYXRlIHRoZSBsb3cgYnl0ZQorCQkJCWZvciAoaT0wOyBpPDg7IGkrKykKKwkJCQl7CisJCQkJCWlmKCAoIChJbkJ1ZlsyXSA+PiBpKSAmIDB4MDEpID09IDApCisJCQkJCXsKKwkJCQkJCUluQnVmWzJdIHw9ICgweDEgPDxpKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZUZ1c2VXcml0ZVBoeXNpY2FsKHBBZCwgJkluQnVmWzBdLCA2LCBOVUxMLCAwKTsKKwkJfQorCisJfQorCXdoaWxlKCFiV3JpdGVTdWNjZXNzJiZMb29wPDIpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKyNlbmRpZiAvLyBSVDMweHggLy8KKy8vMjAwOC8wOS8xMTpLSCBhZGQgdG8gc3VwcG9ydCBlZnVzZS0tPgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9tZDUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL21kNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NDc3NmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9tZDUuYwpAQCAtMCwwICsxLDE0MjcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisgICAgbWQ1LmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlOYW1lCQlEYXRlCQkJTW9kaWZpY2F0aW9uIGxvZ3MKKwlqYW4JCQkxMC0yOC0wMwkJSW5pdGlhbAorCVJpdGEgICAgCTExLTIzLTA0CQlNb2RpZnkgTUQ1IGFuZCBTSEEtMQorCVJpdGEJCTEwLTE0LTA1CQlNb2RpZnkgU0hBLTEgaW4gYmlnLWVuZGlhbiBwbGF0Zm9ybQorICovCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisKKy8qKgorICogbWQ1X21hYzoKKyAqIEBrZXk6IHBvaW50ZXIgdG8JdGhlCWtleQl1c2VkIGZvciBNQUMgZ2VuZXJhdGlvbgorICogQGtleV9sZW46IGxlbmd0aAlvZiB0aGUga2V5IGluIGJ5dGVzCisgKiBAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSBhcmVhIGZvciB3aGljaCB0aGUgTUFDIGlzCWdlbmVyYXRlZAorICogQGRhdGFfbGVuOiBsZW5ndGggb2YJdGhlCWRhdGEgaW4JYnl0ZXMKKyAqIEBtYWM6IHBvaW50ZXIgdG8JdGhlCWJ1ZmZlciBob2xkaW5nIHNwYWNlIGZvciB0aGUgTUFDOyB0aGUgYnVmZmVyIHNob3VsZAorICogaGF2ZQlzcGFjZSBmb3IgMTI4LWJpdCAoMTYgYnl0ZXMpIE1ENSBoYXNoIHZhbHVlCisgKgorICogbWQ1X21hYygpIGRldGVybWluZXMJdGhlCW1lc3NhZ2UJYXV0aGVudGljYXRpb24gY29kZQlieSB1c2luZyBzZWN1cmUJaGFzaAorICogTUQ1KGtleSB8IGRhdGEgfAlrZXkpLgorICovCit2b2lkIG1kNV9tYWModTggKmtleSwgc2l6ZV90IGtleV9sZW4sIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptYWMpCit7CisJTUQ1X0NUWAljb250ZXh0OworCisJTUQ1SW5pdCgmY29udGV4dCk7CisJTUQ1VXBkYXRlKCZjb250ZXh0LAlrZXksIGtleV9sZW4pOworCU1ENVVwZGF0ZSgmY29udGV4dCwJZGF0YSwgZGF0YV9sZW4pOworCU1ENVVwZGF0ZSgmY29udGV4dCwJa2V5LCBrZXlfbGVuKTsKKwlNRDVGaW5hbChtYWMsICZjb250ZXh0KTsKK30KKworLyoqCisgKiBobWFjX21kNToKKyAqIEBrZXk6IHBvaW50ZXIgdG8JdGhlCWtleQl1c2VkIGZvciBNQUMgZ2VuZXJhdGlvbgorICogQGtleV9sZW46IGxlbmd0aAlvZiB0aGUga2V5IGluIGJ5dGVzCisgKiBAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSBhcmVhIGZvciB3aGljaCB0aGUgTUFDIGlzCWdlbmVyYXRlZAorICogQGRhdGFfbGVuOiBsZW5ndGggb2YJdGhlCWRhdGEgaW4JYnl0ZXMKKyAqIEBtYWM6IHBvaW50ZXIgdG8JdGhlCWJ1ZmZlciBob2xkaW5nIHNwYWNlIGZvciB0aGUgTUFDOyB0aGUgYnVmZmVyIHNob3VsZAorICogaGF2ZQlzcGFjZSBmb3IgMTI4LWJpdCAoMTYgYnl0ZXMpIE1ENSBoYXNoIHZhbHVlCisgKgorICogaG1hY19tZDUoKSBkZXRlcm1pbmVzIHRoZSBtZXNzYWdlIGF1dGhlbnRpY2F0aW9uCWNvZGUgdXNpbmcgSE1BQy1NRDUuCisgKiBUaGlzCWltcGxlbWVudGF0aW9uIGlzIGJhc2VkCW9uIHRoZSBzYW1wbGUgY29kZSBwcmVzZW50ZWQgaW4JUkZDCTIxMDQuCisgKi8KK3ZvaWQgaG1hY19tZDUodTggKmtleSwgc2l6ZV90IGtleV9sZW4sIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptYWMpCit7CisJTUQ1X0NUWAljb250ZXh0OworICAgIHU4IGtfaXBhZFs2NV07IC8qIGlubmVyIHBhZGRpbmcgLSBrZXkgWE9SZCB3aXRoIGlwYWQgKi8KKyAgICB1OCBrX29wYWRbNjVdOyAvKiBvdXRlciBwYWRkaW5nIC0ga2V5IFhPUmQgd2l0aCBvcGFkICovCisgICAgdTggdGtbMTZdOworCWludAlpOworCisJLy9hc3NlcnQoa2V5ICE9IE5VTEwgJiYgZGF0YSAhPSBOVUxMICYmIG1hYyAhPSBOVUxMKTsKKworCS8qIGlmIGtleSBpcyBsb25nZXIJdGhhbiA2NAlieXRlcyByZXNldAlpdCB0byBrZXkgPQlNRDUoa2V5KSAqLworCWlmIChrZXlfbGVuCT4gNjQpIHsKKwkJTUQ1X0NUWAl0dGNvbnRleHQ7CisKKwkJTUQ1SW5pdCgmdHRjb250ZXh0KTsKKwkJTUQ1VXBkYXRlKCZ0dGNvbnRleHQsIGtleSwga2V5X2xlbik7CisJCU1ENUZpbmFsKHRrLCAmdHRjb250ZXh0KTsKKwkJLy9rZXk9KFBVQ0hBUil0dGNvbnRleHQuYnVmOworCQlrZXkJPSB0azsKKwkJa2V5X2xlbgk9IDE2OworCX0KKworCS8qIHRoZSBITUFDX01ENQl0cmFuc2Zvcm0gbG9va3MJbGlrZToKKwkgKgorCSAqIE1ENShLIFhPUiBvcGFkLCBNRDUoSyBYT1IgaXBhZCwgdGV4dCkpCisJICoKKwkgKiB3aGVyZSBLIGlzIGFuIG4gYnl0ZQlrZXkKKwkgKiBpcGFkCWlzIHRoZSBieXRlCTB4MzYgcmVwZWF0ZWQgNjQgdGltZXMKKwkgKiBvcGFkCWlzIHRoZSBieXRlCTB4NWMgcmVwZWF0ZWQgNjQgdGltZXMKKwkgKiBhbmQgdGV4dAlpcyB0aGUgZGF0YQliZWluZyBwcm90ZWN0ZWQJKi8KKworCS8qIHN0YXJ0IG91dCBieQlzdG9yaW5nCWtleQlpbiBwYWRzCSovCisJTmRpc1plcm9NZW1vcnkoa19pcGFkLCBzaXplb2Yoa19pcGFkKSk7CisJTmRpc1plcm9NZW1vcnkoa19vcGFkLAlzaXplb2Yoa19vcGFkKSk7CisJLy9hc3NlcnQoa2V5X2xlbiA8IHNpemVvZihrX2lwYWQpKTsKKwlOZGlzTW92ZU1lbW9yeShrX2lwYWQsIGtleSwJa2V5X2xlbik7CisJTmRpc01vdmVNZW1vcnkoa19vcGFkLCBrZXksCWtleV9sZW4pOworCisJLyogWE9SIGtleSB3aXRoCWlwYWQgYW5kIG9wYWQgdmFsdWVzICovCisJZm9yCShpID0gMDsJaSA8CTY0OwlpKyspIHsKKwkJa19pcGFkW2ldIF49IDB4MzY7CisJCWtfb3BhZFtpXSBePSAweDVjOworCX0KKworCS8qIHBlcmZvcm0gaW5uZXIgTUQ1ICovCisJTUQ1SW5pdCgmY29udGV4dCk7CQkJCQkgLyoJaW5pdCBjb250ZXh0IGZvciAxc3QgcGFzcyAqLworCU1ENVVwZGF0ZSgmY29udGV4dCwJa19pcGFkLAk2NCk7CSAvKglzdGFydCB3aXRoIGlubmVyIHBhZCAqLworCU1ENVVwZGF0ZSgmY29udGV4dCwJZGF0YSwgZGF0YV9sZW4pOyAvKgl0aGVuIHRleHQgb2YgZGF0YWdyYW0gKi8KKwlNRDVGaW5hbChtYWMsICZjb250ZXh0KTsJCQkgLyoJZmluaXNoIHVwIDFzdCBwYXNzICovCisKKwkvKiBwZXJmb3JtIG91dGVyIE1ENSAqLworCU1ENUluaXQoJmNvbnRleHQpOwkJCQkJIC8qCWluaXQgY29udGV4dCBmb3IgMm5kIHBhc3MgKi8KKwlNRDVVcGRhdGUoJmNvbnRleHQsCWtfb3BhZCwJNjQpOwkgLyoJc3RhcnQgd2l0aCBvdXRlciBwYWQgKi8KKwlNRDVVcGRhdGUoJmNvbnRleHQsCW1hYywgMTYpOwkJIC8qCXRoZW4gcmVzdWx0cyBvZgkxc3QJaGFzaCAqLworCU1ENUZpbmFsKG1hYywgJmNvbnRleHQpOwkJCSAvKglmaW5pc2ggdXAgMm5kIHBhc3MgKi8KK30KKworI2lmbmRlZiBSVF9CSUdfRU5ESUFOCisjZGVmaW5lIGJ5dGVSZXZlcnNlKGJ1ZiwgbGVuKSAgIC8qIE5vdGhpbmcgKi8KKyNlbHNlCit2b2lkIGJ5dGVSZXZlcnNlKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZ3MpOwordm9pZCBieXRlUmV2ZXJzZSh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmdzKQoreworICAgIGRvIHsKKyAgICAgICAgKihVSU5UMzIgKilidWYgPSBTV0FQMzIoKihVSU5UMzIgKilidWYpOworICAgICAgICBidWYgKz0gNDsKKyAgICB9IHdoaWxlICgtLWxvbmdzKTsKK30KKyNlbmRpZgorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09ICBNRDUgaW1wbGVtZW50YXRpb24gPT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvLyBmb3VyIGJhc2UgZnVuY3Rpb25zIGZvciBNRDUKKyNkZWZpbmUgTUQ1X0YxKHgsIHksIHopICgoKHgpICYgKHkpKSB8ICgofngpICYgKHopKSkKKyNkZWZpbmUgTUQ1X0YyKHgsIHksIHopICgoKHgpICYgKHopKSB8ICgoeSkgJiAofnopKSkKKyNkZWZpbmUgTUQ1X0YzKHgsIHksIHopICgoeCkgXiAoeSkgXiAoeikpCisjZGVmaW5lIE1ENV9GNCh4LCB5LCB6KSAoKHkpIF4gKCh4KSB8ICh+eikpKQorI2RlZmluZSBDWUNMSUNfTEVGVF9TSElGVCh3LCBzKSAoKCh3KSA8PCAocykpIHwgKCh3KSA+PiAoMzItKHMpKSkpCisKKyNkZWZpbmUJTUQ1U3RlcChmLCB3LCB4LCB5LAl6LCBkYXRhLCB0LCBzKQlcCisJKCB3CSs9IGYoeCwJeSwgeikgKwlkYXRhICsgdCwgIHcgPSAoQ1lDTElDX0xFRlRfU0hJRlQodywgcykpICYgMHhmZmZmZmZmZiwgdyArPQl4ICkKKworCisvKgorICogIEZ1bmN0aW9uIERlc2NyaXB0aW9uOgorICogICAgICBJbml0aWF0ZSBNRDUgQ29udGV4dCBzYXRpc2ZpZWQgaW4gUkZDIDEzMjEKKyAqCisgKiAgQXJndW1lbnRzOgorICogICAgICBwQ3R4ICAgICAgICBQb2ludGVyCXRvIE1ENSBjb250ZXh0CisgKgorICogIFJldHVybiBWYWx1ZToKKyAqICAgICAgTm9uZQorICovCitWT0lEIE1ENUluaXQoTUQ1X0NUWCAqcEN0eCkKK3sKKyAgICBwQ3R4LT5CdWZbMF09MHg2NzQ1MjMwMTsKKyAgICBwQ3R4LT5CdWZbMV09MHhlZmNkYWI4OTsKKyAgICBwQ3R4LT5CdWZbMl09MHg5OGJhZGNmZTsKKyAgICBwQ3R4LT5CdWZbM109MHgxMDMyNTQ3NjsKKworICAgIHBDdHgtPkxlbkluQml0Q291bnRbMF09MDsKKyAgICBwQ3R4LT5MZW5JbkJpdENvdW50WzFdPTA7Cit9CisKKworLyoKKyAqICBGdW5jdGlvbiBEZXNjcmlwdGlvbjoKKyAqICAgICAgVXBkYXRlIE1ENSBDb250ZXh0LCBhbGxvdyBvZiBhbiBhcnJhcnkgb2Ygb2N0ZXRzIGFzIHRoZSBuZXh0IHBvcnRpb24KKyAqICAgICAgb2YgdGhlIG1lc3NhZ2UKKyAqCisgKiAgQXJndW1lbnRzOgorICogICAgICBwQ3R4CQlQb2ludGVyCXRvIE1ENSBjb250ZXh0CisgKiAJICAgIHBEYXRhICAgICAgIFBvaW50ZXIgdG8gaW5wdXQgZGF0YQorICogICAgICBMZW5JbkJ5dGVzICBUaGUgbGVuZ3RoIG9mIGlucHV0IGRhdGEgKHVuaXQ6IGJ5dGUpCisgKgorICogIFJldHVybiBWYWx1ZToKKyAqICAgICAgTm9uZQorICoKKyAqICBOb3RlOgorICogICAgICBDYWxsZWQgYWZ0ZXIgTUQ1SW5pdCBvciBNRDVVcGRhdGUoaXRzZWxmKQorICovCitWT0lEIE1ENVVwZGF0ZShNRDVfQ1RYICpwQ3R4LCBVQ0hBUiAqcERhdGEsIFVJTlQzMiBMZW5JbkJ5dGVzKQoreworCisgICAgVUlOVDMyIFRmVGltZXM7CisgICAgVUlOVDMyIHRlbXA7CisJdW5zaWduZWQgaW50IGk7CisKKyAgICB0ZW1wID0gcEN0eC0+TGVuSW5CaXRDb3VudFswXTsKKworICAgIHBDdHgtPkxlbkluQml0Q291bnRbMF0gPSAoVUlOVDMyKSAocEN0eC0+TGVuSW5CaXRDb3VudFswXSArIChMZW5JbkJ5dGVzIDw8IDMpKTsKKworICAgIGlmIChwQ3R4LT5MZW5JbkJpdENvdW50WzBdIDwgdGVtcCkKKyAgICAgICAgcEN0eC0+TGVuSW5CaXRDb3VudFsxXSsrOyAgIC8vY2FycnkgaW4KKworICAgIHBDdHgtPkxlbkluQml0Q291bnRbMV0gKz0gTGVuSW5CeXRlcyA+PiAyOTsKKworICAgIC8vIG1vZCA2NCBieXRlcworICAgIHRlbXAgPSAodGVtcCA+PiAzKSAmIDB4M2Y7CisKKyAgICAvLyBwcm9jZXNzIGxhY2tzIG9mIDY0LWJ5dGUgZGF0YQorICAgIGlmICh0ZW1wKQorICAgIHsKKyAgICAgICAgVUNIQVIgKnBBZHMgPSAoVUNIQVIgKikgcEN0eC0+SW5wdXQgKyB0ZW1wOworCisgICAgICAgIGlmICgodGVtcCtMZW5JbkJ5dGVzKSA8IDY0KQorICAgICAgICB7CisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWRzLCAoVUNIQVIgKilwRGF0YSwgTGVuSW5CeXRlcyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWRzLCAoVUNIQVIgKilwRGF0YSwgNjQtdGVtcCk7CisgICAgICAgIGJ5dGVSZXZlcnNlKHBDdHgtPklucHV0LCAxNik7CisgICAgICAgIE1ENVRyYW5zZm9ybShwQ3R4LT5CdWYsIChVSU5UMzIgKilwQ3R4LT5JbnB1dCk7CisKKyAgICAgICAgcERhdGEgKz0gNjQtdGVtcDsKKyAgICAgICAgTGVuSW5CeXRlcyAtPSA2NC10ZW1wOworICAgIH0gLy8gZW5kIG9mIGlmICh0ZW1wKQorCisKKyAgICBUZlRpbWVzID0gKExlbkluQnl0ZXMgPj4gNik7CisKKyAgICBmb3IgKGk9VGZUaW1lczsgaT4wOyBpLS0pCisgICAgeworICAgICAgICBOZGlzTW92ZU1lbW9yeShwQ3R4LT5JbnB1dCwgKFVDSEFSICopcERhdGEsIDY0KTsKKyAgICAgICAgYnl0ZVJldmVyc2UocEN0eC0+SW5wdXQsIDE2KTsKKyAgICAgICAgTUQ1VHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVJTlQzMiAqKXBDdHgtPklucHV0KTsKKyAgICAgICAgcERhdGEgKz0gNjQ7CisgICAgICAgIExlbkluQnl0ZXMgLT0gNjQ7CisgICAgfSAvLyBlbmQgb2YgZm9yCisKKyAgICAvLyBidWZmZXJpbmcgbGFja3Mgb2YgNjQtYnl0ZSBkYXRhCisgICAgaWYoTGVuSW5CeXRlcykKKyAgICAgICAgTmRpc01vdmVNZW1vcnkocEN0eC0+SW5wdXQsIChVQ0hBUiAqKXBEYXRhLCBMZW5JbkJ5dGVzKTsKKworfQorCisKKy8qCisgKiAgRnVuY3Rpb24gRGVzY3JpcHRpb246CisgKiAgICAgIEFwcGVuZCBwYWRkaW5nIGJpdHMgYW5kIGxlbmd0aCBvZiBvcmlnaW5hbCBtZXNzYWdlIGluIHRoZSB0YWlsCisgKiAgICAgIFRoZSBtZXNzYWdlIGRpZ2VzdCBoYXMgdG8gYmUgY29tcGxldGVkIGluIHRoZSBlbmQKKyAqCisgKiAgQXJndW1lbnRzOgorICogICAgICBEaWdlc3QJCU91dHB1dCBvZiBEaWdlc3QtTWVzc2FnZSBmb3IgTUQ1CisgKiAgCXBDdHggICAgICAgIFBvaW50ZXIJdG8gTUQ1IGNvbnRleHQKKyAqCisgKiAgUmV0dXJuIFZhbHVlOgorICogICAgICBOb25lCisgKgorICogIE5vdGU6CisgKiAgICAgIENhbGxlZCBhZnRlciBNRDVVcGRhdGUKKyAqLworVk9JRCBNRDVGaW5hbChVQ0hBUiBEaWdlc3RbMTZdLCBNRDVfQ1RYICpwQ3R4KQoreworICAgIFVDSEFSIFJlbWFpbmRlcjsKKyAgICBVQ0hBUiBQYWRMZW5JbkJ5dGVzOworICAgIFVDSEFSICpwQXBwZW5kPTA7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBSZW1haW5kZXIgPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzBdID4+IDMpICYgMHgzZik7CisKKyAgICBQYWRMZW5JbkJ5dGVzID0gKFJlbWFpbmRlciA8IDU2KSA/ICg1Ni1SZW1haW5kZXIpIDogKDEyMC1SZW1haW5kZXIpOworCisgICAgcEFwcGVuZCA9IChVQ0hBUiAqKXBDdHgtPklucHV0ICsgUmVtYWluZGVyOworCisgICAgLy8gcGFkZGluZyBiaXRzIHdpdGhvdXQgY3Jvc3NpbmcgYmxvY2soNjQtYnl0ZSBiYXNlZCkgYm91bmRhcnkKKyAgICBpZiAoUmVtYWluZGVyIDwgNTYpCisgICAgeworICAgICAgICAqcEFwcGVuZCA9IDB4ODA7CisgICAgICAgIFBhZExlbkluQnl0ZXMgLS07CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQgKyBSZW1haW5kZXIrMSwgUGFkTGVuSW5CeXRlcyk7CisKKwkJLy8gYWRkIGRhdGEtbGVuZ3RoIGZpZWxkLCBmcm9tIGxvdyB0byBoaWdoCisgICAgICAgCWZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAJcEN0eC0+SW5wdXRbNTYraV0gPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzBdID4+IChpIDw8IDMpKSAmIDB4ZmYpOworICAgICAgICAJcEN0eC0+SW5wdXRbNjAraV0gPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzFdID4+IChpIDw8IDMpKSAmIDB4ZmYpOworICAgICAgCX0KKworICAgICAgICBieXRlUmV2ZXJzZShwQ3R4LT5JbnB1dCwgMTYpOworICAgICAgICBNRDVUcmFuc2Zvcm0ocEN0eC0+QnVmLCAoVUlOVDMyICopcEN0eC0+SW5wdXQpOworICAgIH0gLy8gZW5kIG9mIGlmCisKKyAgICAvLyBwYWRkaW5nIGJpdHMgd2l0aCBjcm9zc2luZyBibG9jayg2NC1ieXRlIGJhc2VkKSBib3VuZGFyeQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIHRoZSBmaXJzdCBibG9jayA9PT0KKyAgICAgICAgKnBBcHBlbmQgPSAweDgwOworICAgICAgICBQYWRMZW5JbkJ5dGVzIC0tOworCisgICAgICAgIE5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKXBDdHgtPklucHV0ICsgUmVtYWluZGVyKzEsICg2NC1SZW1haW5kZXItMSkpOworICAgICAgICBQYWRMZW5JbkJ5dGVzIC09ICg2NCAtIFJlbWFpbmRlciAtIDEpOworCisgICAgICAgIGJ5dGVSZXZlcnNlKHBDdHgtPklucHV0LCAxNik7CisgICAgICAgIE1ENVRyYW5zZm9ybShwQ3R4LT5CdWYsIChVSU5UMzIgKilwQ3R4LT5JbnB1dCk7CisKKworICAgICAgICAvLyB0aGUgc2Vjb25kIGJsb2NrID09PQorICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCwgUGFkTGVuSW5CeXRlcyk7CisKKyAgICAgICAgLy8gYWRkIGRhdGEtbGVuZ3RoIGZpZWxkCisgICAgICAgIGZvciAoaT0wOyBpPDQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAJcEN0eC0+SW5wdXRbNTYraV0gPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzBdID4+IChpIDw8IDMpKSAmIDB4ZmYpOworICAgICAgICAJcEN0eC0+SW5wdXRbNjAraV0gPSAoVUNIQVIpKChwQ3R4LT5MZW5JbkJpdENvdW50WzFdID4+IChpIDw8IDMpKSAmIDB4ZmYpOworICAgICAgCX0KKworICAgICAgICBieXRlUmV2ZXJzZShwQ3R4LT5JbnB1dCwgMTYpOworICAgICAgICBNRDVUcmFuc2Zvcm0ocEN0eC0+QnVmLCAoVUlOVDMyICopcEN0eC0+SW5wdXQpOworICAgIH0gLy8gZW5kIG9mIGVsc2UKKworCisgICAgTmRpc01vdmVNZW1vcnkoKFVDSEFSICopRGlnZXN0LCAoVUlOVDMyICopcEN0eC0+QnVmLCAxNik7IC8vIG91dHB1dAorICAgIGJ5dGVSZXZlcnNlKChVQ0hBUiAqKURpZ2VzdCwgNCk7CisgICAgTmRpc1plcm9NZW1vcnkocEN0eCwgc2l6ZW9mKHBDdHgpKTsgLy8gbWVtb3J5IGZyZWUKK30KKworCisvKgorICogIEZ1bmN0aW9uIERlc2NyaXB0aW9uOgorICogICAgICBUaGUgY2VudHJhbCBhbGdvcml0aG0gb2YgTUQ1LCBjb25zaXN0cyBvZiBmb3VyIHJvdW5kcyBhbmQgc2l4dGVlbgorICogIAlzdGVwcyBwZXIgcm91bmQKKyAqCisgKiAgQXJndW1lbnRzOgorICogICAgICBCdWYgICAgIEJ1ZmZlcnMgb2YgZm91ciBzdGF0ZXMgKG91dHB1dDogMTYgYnl0ZXMpCisgKiAJICAgIE1lcyAgICAgSW5wdXQgZGF0YSAoaW5wdXQ6IDY0IGJ5dGVzKQorICoKKyAqICBSZXR1cm4gVmFsdWU6CisgKiAgICAgIE5vbmUKKyAqCisgKiAgTm90ZToKKyAqICAgICAgQ2FsbGVkIGJ5IE1ENVVwZGF0ZSBvciBNRDVGaW5hbAorICovCitWT0lEIE1ENVRyYW5zZm9ybShVSU5UMzIgQnVmWzRdLCBVSU5UMzIgTWVzWzE2XSkKK3sKKyAgICBVSU5UMzIgUmVnWzRdLCBUZW1wOworCXVuc2lnbmVkIGludCBpOworCisgICAgc3RhdGljIFVDSEFSIExTaGlmdFZhbFsxNl0gPQorICAgIHsKKyAgICAgICAgNywgMTIsIDE3LCAyMiwKKwkJNSwgOSAsIDE0LCAyMCwKKwkJNCwgMTEsIDE2LCAyMywKKyAJCTYsIDEwLCAxNSwgMjEsCisgCX07CisKKworCS8vIFtlcXVhbCB0byA0Mjk0OTY3Mjk2KmFicyhzaW4oaW5kZXgpKV0KKyAgICBzdGF0aWMgVUlOVDMyIE1ENVRhYmxlWzY0XSA9CisJeworCQkweGQ3NmFhNDc4LAkweGU4YzdiNzU2LAkweDI0MjA3MGRiLAkweGMxYmRjZWVlLAorCQkweGY1N2MwZmFmLAkweDQ3ODdjNjJhLAkweGE4MzA0NjEzLCAweGZkNDY5NTAxLAorCQkweDY5ODA5OGQ4LAkweDhiNDRmN2FmLAkweGZmZmY1YmIxLAkweDg5NWNkN2JlLAorICAgIAkweDZiOTAxMTIyLAkweGZkOTg3MTkzLAkweGE2Nzk0MzhlLAkweDQ5YjQwODIxLAorCisgICAgCTB4ZjYxZTI1NjIsCTB4YzA0MGIzNDAsCTB4MjY1ZTVhNTEsCTB4ZTliNmM3YWEsCisgICAgCTB4ZDYyZjEwNWQsCTB4MDI0NDE0NTMsCTB4ZDhhMWU2ODEsCTB4ZTdkM2ZiYzgsCisgICAgCTB4MjFlMWNkZTYsCTB4YzMzNzA3ZDYsCTB4ZjRkNTBkODcsCTB4NDU1YTE0ZWQsCisgICAgCTB4YTllM2U5MDUsCTB4ZmNlZmEzZjgsCTB4Njc2ZjAyZDksCTB4OGQyYTRjOGEsCisKKyAgICAJMHhmZmZhMzk0MiwJMHg4NzcxZjY4MSwJMHg2ZDlkNjEyMiwJMHhmZGU1MzgwYywKKyAgICAJMHhhNGJlZWE0NCwJMHg0YmRlY2ZhOSwJMHhmNmJiNGI2MCwJMHhiZWJmYmM3MCwKKyAgICAJMHgyODliN2VjNiwJMHhlYWExMjdmYSwJMHhkNGVmMzA4NSwJMHgwNDg4MWQwNSwKKyAgICAJMHhkOWQ0ZDAzOSwJMHhlNmRiOTllNSwJMHgxZmEyN2NmOCwJMHhjNGFjNTY2NSwKKworICAgIAkweGY0MjkyMjQ0LAkweDQzMmFmZjk3LAkweGFiOTQyM2E3LAkweGZjOTNhMDM5LAorICAgCQkweDY1NWI1OWMzLAkweDhmMGNjYzkyLAkweGZmZWZmNDdkLAkweDg1ODQ1ZGQxLAorICAgIAkweDZmYTg3ZTRmLAkweGZlMmNlNmUwLAkweGEzMDE0MzE0LAkweDRlMDgxMWExLAorICAgIAkweGY3NTM3ZTgyLAkweGJkM2FmMjM1LAkweDJhZDdkMmJiLAkweGViODZkMzkxCisJfTsKKworCisgICAgZm9yIChpPTA7IGk8NDsgaSsrKQorICAgICAgICBSZWdbaV09QnVmW2ldOworCisKKyAgICAvLyA2NCBzdGVwcyBpbiBNRDUgYWxnb3JpdGhtCisgICAgZm9yIChpPTA7IGk8MTY7IGkrKykKKyAgICB7CisgICAgICAgIE1ENVN0ZXAoTUQ1X0YxLCBSZWdbMF0sIFJlZ1sxXSwgUmVnWzJdLCBSZWdbM10sIE1lc1tpXSwKKyAgICAgICAgICAgICAgICBNRDVUYWJsZVtpXSwgTFNoaWZ0VmFsW2kgJiAweDNdKTsKKworICAgICAgICAvLyBvbmUtd29yZCByaWdodCBzaGlmdAorICAgICAgICBUZW1wICAgPSBSZWdbM107CisgICAgICAgIFJlZ1szXSA9IFJlZ1syXTsKKyAgICAgICAgUmVnWzJdID0gUmVnWzFdOworICAgICAgICBSZWdbMV0gPSBSZWdbMF07CisgICAgICAgIFJlZ1swXSA9IFRlbXA7CisgICAgfQorICAgIGZvciAoaT0xNjsgaTwzMjsgaSsrKQorICAgIHsKKyAgICAgICAgTUQ1U3RlcChNRDVfRjIsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgTWVzWyg1KihpICYgMHhmKSsxKSAmIDB4Zl0sCisgICAgICAgICAgICAgICAgTUQ1VGFibGVbaV0sIExTaGlmdFZhbFsoMHgxIDw8IDIpKyhpICYgMHgzKV0pOworCisgICAgICAgIC8vIG9uZS13b3JkIHJpZ2h0IHNoaWZ0CisgICAgICAgIFRlbXAgICA9IFJlZ1szXTsKKyAgICAgICAgUmVnWzNdID0gUmVnWzJdOworICAgICAgICBSZWdbMl0gPSBSZWdbMV07CisgICAgICAgIFJlZ1sxXSA9IFJlZ1swXTsKKyAgICAgICAgUmVnWzBdID0gVGVtcDsKKyAgICB9CisgICAgZm9yIChpPTMyOyBpPDQ4OyBpKyspCisgICAgeworICAgICAgICBNRDVTdGVwKE1ENV9GMywgUmVnWzBdLCBSZWdbMV0sIFJlZ1syXSwgUmVnWzNdLCBNZXNbKDMqKGkgJiAweGYpKzUpICYgMHhmXSwKKyAgICAgICAgICAgICAgICBNRDVUYWJsZVtpXSwgTFNoaWZ0VmFsWygweDEgPDwgMykrKGkgJiAweDMpXSk7CisKKyAgICAgICAgLy8gb25lLXdvcmQgcmlnaHQgc2hpZnQKKyAgICAgICAgVGVtcCAgID0gUmVnWzNdOworICAgICAgICBSZWdbM10gPSBSZWdbMl07CisgICAgICAgIFJlZ1syXSA9IFJlZ1sxXTsKKyAgICAgICAgUmVnWzFdID0gUmVnWzBdOworICAgICAgICBSZWdbMF0gPSBUZW1wOworICAgIH0KKyAgICBmb3IgKGk9NDg7IGk8NjQ7IGkrKykKKyAgICB7CisgICAgICAgIE1ENVN0ZXAoTUQ1X0Y0LCBSZWdbMF0sIFJlZ1sxXSwgUmVnWzJdLCBSZWdbM10sIE1lc1soNyooaSAmIDB4ZikpICYgMHhmXSwKKyAgICAgICAgICAgICAgICBNRDVUYWJsZVtpXSwgTFNoaWZ0VmFsWygweDMgPDwgMikrKGkgJiAweDMpXSk7CisKKyAgICAgICAgLy8gb25lLXdvcmQgcmlnaHQgc2hpZnQKKyAgICAgICAgVGVtcCAgID0gUmVnWzNdOworICAgICAgICBSZWdbM10gPSBSZWdbMl07CisgICAgICAgIFJlZ1syXSA9IFJlZ1sxXTsKKyAgICAgICAgUmVnWzFdID0gUmVnWzBdOworICAgICAgICBSZWdbMF0gPSBUZW1wOworICAgIH0KKworCisgICAgLy8gKHRlbXBvcmFyeSlvdXRwdXQKKyAgICBmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgICAgIEJ1ZltpXSArPSBSZWdbaV07CisKK30KKworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT0gIFNIQS0xIGltcGxlbWVudGF0aW9uID09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvLyBmb3VyIGJhc2UgZnVuY3Rpb25zIGZvciBTSEEtMQorI2RlZmluZSBTSEExX0YxKGIsIGMsIGQpICAgICgoKGIpICYgKGMpKSB8ICgofmIpICYgKGQpKSkKKyNkZWZpbmUgU0hBMV9GMihiLCBjLCBkKSAgICAoKGIpIF4gKGMpIF4gKGQpKQorI2RlZmluZSBTSEExX0YzKGIsIGMsIGQpICAgICgoKGIpICYgKGMpKSB8ICgoYikgJiAoZCkpIHwgKChjKSAmIChkKSkpCisKKworI2RlZmluZSBTSEExU3RlcChmLCBhLCBiLCBjLCBkLCBlLCB3LCBrKSAgICBcCisgICAgKCBlCSs9ICggZihiLCBjLCBkKSArIHcgKyBrICsgQ1lDTElDX0xFRlRfU0hJRlQoYSwgNSkpICYgMHhmZmZmZmZmZiwgXAorICAgICAgYiA9IENZQ0xJQ19MRUZUX1NISUZUKGIsIDMwKSApCisKKy8vSW5pdGlhdGUgU0hBLTEgQ29udGV4dCBzYXRpc2ZpZWQgaW4gUkZDIDMxNzQKK1ZPSUQgU0hBSW5pdChTSEFfQ1RYICpwQ3R4KQoreworICAgIHBDdHgtPkJ1ZlswXT0weDY3NDUyMzAxOworICAgIHBDdHgtPkJ1ZlsxXT0weGVmY2RhYjg5OworICAgIHBDdHgtPkJ1ZlsyXT0weDk4YmFkY2ZlOworICAgIHBDdHgtPkJ1ZlszXT0weDEwMzI1NDc2OworICAgIHBDdHgtPkJ1Zls0XT0weGMzZDJlMWYwOworCisgICAgcEN0eC0+TGVuSW5CaXRDb3VudFswXT0wOworICAgIHBDdHgtPkxlbkluQml0Q291bnRbMV09MDsKK30KKworLyoKKyAqICBGdW5jdGlvbiBEZXNjcmlwdGlvbjoKKyAqICAgICAgVXBkYXRlIFNIQS0xIENvbnRleHQsIGFsbG93IG9mIGFuIGFycmFyeSBvZiBvY3RldHMgYXMgdGhlIG5leHQKKyAqICAgICAgcG9ydGlvbiBvZiB0aGUgbWVzc2FnZQorICoKKyAqICBBcmd1bWVudHM6CisgKiAgICAgIHBDdHgJCVBvaW50ZXIJdG8gU0hBLTEgY29udGV4dAorICogCSAgICBwRGF0YSAgICAgICBQb2ludGVyIHRvIGlucHV0IGRhdGEKKyAqICAgICAgTGVuSW5CeXRlcyAgVGhlIGxlbmd0aCBvZiBpbnB1dCBkYXRhICh1bml0OiBieXRlKQorICoKKyAqICBSZXR1cm4gVmFsdWU6CisgKiAgICAgIGVycm9yICAgICAgIGluZGljYXRlIG1vcmUgdGhhbiBwb3coMiw2NCkgYml0cyBvZiBkYXRhCisgKgorICogIE5vdGU6CisgKiAgICAgIENhbGxlZCBhZnRlciBTSEFJbml0IG9yIFNIQVVwZGF0ZShpdHNlbGYpCisgKi8KK1VDSEFSIFNIQVVwZGF0ZShTSEFfQ1RYICpwQ3R4LCBVQ0hBUiAqcERhdGEsIFVJTlQzMiBMZW5JbkJ5dGVzKQoreworICAgIFVJTlQzMiBUZlRpbWVzOworICAgIFVJTlQzMiB0ZW1wMSx0ZW1wMjsKKwl1bnNpZ25lZCBpbnQgaTsKKwlVQ0hBUiBlcnI9MTsKKworICAgIHRlbXAxID0gcEN0eC0+TGVuSW5CaXRDb3VudFswXTsKKyAgICB0ZW1wMiA9IHBDdHgtPkxlbkluQml0Q291bnRbMV07CisKKyAgICBwQ3R4LT5MZW5JbkJpdENvdW50WzBdID0gKFVJTlQzMikgKHBDdHgtPkxlbkluQml0Q291bnRbMF0gKyAoTGVuSW5CeXRlcyA8PCAzKSk7CisgICAgaWYgKHBDdHgtPkxlbkluQml0Q291bnRbMF0gPCB0ZW1wMSkKKyAgICAgICAgcEN0eC0+TGVuSW5CaXRDb3VudFsxXSsrOyAgIC8vY2FycnkgaW4KKworCisgICAgcEN0eC0+TGVuSW5CaXRDb3VudFsxXSA9IChVSU5UMzIpIChwQ3R4LT5MZW5JbkJpdENvdW50WzFdICsoTGVuSW5CeXRlcyA+PiAyOSkpOworICAgIGlmIChwQ3R4LT5MZW5JbkJpdENvdW50WzFdIDwgdGVtcDIpCisgICAgICAgIHJldHVybiAoZXJyKTsgICAvL2NoZWNrIHRvdGFsIGxlbmd0aCBvZiBvcmlnaW5hbCBkYXRhCisKKworICAgIC8vIG1vZCA2NCBieXRlcworICAgIHRlbXAxID0gKHRlbXAxID4+IDMpICYgMHgzZjsKKworICAgIC8vIHByb2Nlc3MgbGFja3Mgb2YgNjQtYnl0ZSBkYXRhCisgICAgaWYgKHRlbXAxKQorICAgIHsKKyAgICAgICAgVUNIQVIgKnBBZHMgPSAoVUNIQVIgKikgcEN0eC0+SW5wdXQgKyB0ZW1wMTsKKworICAgICAgICBpZiAoKHRlbXAxK0xlbkluQnl0ZXMpIDwgNjQpCisgICAgICAgIHsKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZHMsIChVQ0hBUiAqKXBEYXRhLCBMZW5JbkJ5dGVzKTsKKyAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIH0KKworICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWRzLCAoVUNIQVIgKilwRGF0YSwgNjQtdGVtcDEpOworICAgICAgICBieXRlUmV2ZXJzZSgoVUNIQVIgKilwQ3R4LT5JbnB1dCwgMTYpOworCisgICAgICAgIE5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKXBDdHgtPklucHV0ICsgNjQsIDE2KTsKKyAgICAgICAgU0hBVHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVJTlQzMiAqKXBDdHgtPklucHV0KTsKKworICAgICAgICBwRGF0YSArPSA2NC10ZW1wMTsKKyAgICAgICAgTGVuSW5CeXRlcyAtPSA2NC10ZW1wMTsKKyAgICB9IC8vIGVuZCBvZiBpZiAodGVtcDEpCisKKworICAgIFRmVGltZXMgPSAoTGVuSW5CeXRlcyA+PiA2KTsKKworICAgIGZvciAoaT1UZlRpbWVzOyBpPjA7IGktLSkKKyAgICB7CisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBDdHgtPklucHV0LCAoVUNIQVIgKilwRGF0YSwgNjQpOworICAgICAgICBieXRlUmV2ZXJzZSgoVUNIQVIgKilwQ3R4LT5JbnB1dCwgMTYpOworCisgICAgICAgIE5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKXBDdHgtPklucHV0ICsgNjQsIDE2KTsKKyAgICAgICAgU0hBVHJhbnNmb3JtKHBDdHgtPkJ1ZiwgKFVJTlQzMiAqKXBDdHgtPklucHV0KTsKKyAgICAgICAgcERhdGEgKz0gNjQ7CisgICAgICAgIExlbkluQnl0ZXMgLT0gNjQ7CisgICAgfSAvLyBlbmQgb2YgZm9yCisKKyAgICAvLyBidWZmZXJpbmcgbGFja3Mgb2YgNjQtYnl0ZSBkYXRhCisgICAgaWYoTGVuSW5CeXRlcykKKyAgICAgICAgTmRpc01vdmVNZW1vcnkocEN0eC0+SW5wdXQsIChVQ0hBUiAqKXBEYXRhLCBMZW5JbkJ5dGVzKTsKKworCXJldHVybiAoMCk7CisKK30KKworLy8gQXBwZW5kIHBhZGRpbmcgYml0cyBhbmQgbGVuZ3RoIG9mIG9yaWdpbmFsIG1lc3NhZ2UgaW4gdGhlIHRhaWwKKy8vIFRoZSBtZXNzYWdlIGRpZ2VzdCBoYXMgdG8gYmUgY29tcGxldGVkIGluIHRoZSBlbmQKK1ZPSUQgU0hBRmluYWwoU0hBX0NUWCAqcEN0eCwgVUNIQVIgRGlnZXN0WzIwXSkKK3sKKyAgICBVQ0hBUiBSZW1haW5kZXI7CisgICAgVUNIQVIgUGFkTGVuSW5CeXRlczsKKyAgICBVQ0hBUiAqcEFwcGVuZD0wOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgUmVtYWluZGVyID0gKFVDSEFSKSgocEN0eC0+TGVuSW5CaXRDb3VudFswXSA+PiAzKSAmIDB4M2YpOworCisgICAgcEFwcGVuZCA9IChVQ0hBUiAqKXBDdHgtPklucHV0ICsgUmVtYWluZGVyOworCisgICAgUGFkTGVuSW5CeXRlcyA9IChSZW1haW5kZXIgPCA1NikgPyAoNTYtUmVtYWluZGVyKSA6ICgxMjAtUmVtYWluZGVyKTsKKworICAgIC8vIHBhZGRpbmcgYml0cyB3aXRob3V0IGNyb3NzaW5nIGJsb2NrKDY0LWJ5dGUgYmFzZWQpIGJvdW5kYXJ5CisgICAgaWYgKFJlbWFpbmRlciA8IDU2KQorICAgIHsKKyAgICAgICAgKnBBcHBlbmQgPSAweDgwOworICAgICAgICBQYWRMZW5JbkJ5dGVzIC0tOworCisgICAgICAgIE5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKXBDdHgtPklucHV0ICsgUmVtYWluZGVyKzEsIFBhZExlbkluQnl0ZXMpOworCisJCS8vIGFkZCBkYXRhLWxlbmd0aCBmaWVsZCwgZnJvbSBoaWdoIHRvIGxvdworICAgICAgICBmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgCXBDdHgtPklucHV0WzU2K2ldID0gKFVDSEFSKSgocEN0eC0+TGVuSW5CaXRDb3VudFsxXSA+PiAoKDMtaSkgPDwgMykpICYgMHhmZik7CisgICAgICAgIAlwQ3R4LT5JbnB1dFs2MCtpXSA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291bnRbMF0gPj4gKCgzLWkpIDw8IDMpKSAmIDB4ZmYpOworICAgICAgCX0KKworICAgICAgICBieXRlUmV2ZXJzZSgoVUNIQVIgKilwQ3R4LT5JbnB1dCwgMTYpOworICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCArIDY0LCAxNCk7CisgICAgICAgIFNIQVRyYW5zZm9ybShwQ3R4LT5CdWYsIChVSU5UMzIgKilwQ3R4LT5JbnB1dCk7CisgICAgfSAvLyBlbmQgb2YgaWYKKworICAgIC8vIHBhZGRpbmcgYml0cyB3aXRoIGNyb3NzaW5nIGJsb2NrKDY0LWJ5dGUgYmFzZWQpIGJvdW5kYXJ5CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gdGhlIGZpcnN0IGJsb2NrID09PQorICAgICAgICAqcEFwcGVuZCA9IDB4ODA7CisgICAgICAgIFBhZExlbkluQnl0ZXMgLS07CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQgKyBSZW1haW5kZXIrMSwgKDY0LVJlbWFpbmRlci0xKSk7CisgICAgICAgIFBhZExlbkluQnl0ZXMgLT0gKDY0IC0gUmVtYWluZGVyIC0gMSk7CisKKyAgICAgICAgYnl0ZVJldmVyc2UoKFVDSEFSICopcEN0eC0+SW5wdXQsIDE2KTsKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQgKyA2NCwgMTYpOworICAgICAgICBTSEFUcmFuc2Zvcm0ocEN0eC0+QnVmLCAoVUlOVDMyICopcEN0eC0+SW5wdXQpOworCisKKyAgICAgICAgLy8gdGhlIHNlY29uZCBibG9jayA9PT0KKyAgICAgICAgTmRpc1plcm9NZW1vcnkoKFVDSEFSICopcEN0eC0+SW5wdXQsIFBhZExlbkluQnl0ZXMpOworCisJCS8vIGFkZCBkYXRhLWxlbmd0aCBmaWVsZAorCQlmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgCXBDdHgtPklucHV0WzU2K2ldID0gKFVDSEFSKSgocEN0eC0+TGVuSW5CaXRDb3VudFsxXSA+PiAoKDMtaSkgPDwgMykpICYgMHhmZik7CisgICAgICAgIAlwQ3R4LT5JbnB1dFs2MCtpXSA9IChVQ0hBUikoKHBDdHgtPkxlbkluQml0Q291bnRbMF0gPj4gKCgzLWkpIDw8IDMpKSAmIDB4ZmYpOworICAgICAgCX0KKworICAgICAgICBieXRlUmV2ZXJzZSgoVUNIQVIgKilwQ3R4LT5JbnB1dCwgMTYpOworICAgICAgICBOZGlzWmVyb01lbW9yeSgoVUNIQVIgKilwQ3R4LT5JbnB1dCArIDY0LCAxNik7CisgICAgICAgIFNIQVRyYW5zZm9ybShwQ3R4LT5CdWYsIChVSU5UMzIgKilwQ3R4LT5JbnB1dCk7CisgICAgfSAvLyBlbmQgb2YgZWxzZQorCisKKyAgICAvL091dHB1dCwgYnl0ZXJldmVyc2UKKyAgICBmb3IgKGk9MDsgaTwyMDsgaSsrKQorICAgIHsKKyAgICAgICAgRGlnZXN0IFtpXSA9IChVQ0hBUikocEN0eC0+QnVmW2k+PjJdID4+IDgqKDMtKGkgJiAweDMpKSk7CisgICAgfQorCisgICAgTmRpc1plcm9NZW1vcnkocEN0eCwgc2l6ZW9mKHBDdHgpKTsgLy8gbWVtb3J5IGZyZWUKK30KKworCisvLyBUaGUgY2VudHJhbCBhbGdvcml0aG0gb2YgU0hBLTEsIGNvbnNpc3RzIG9mIGZvdXIgcm91bmRzIGFuZAorLy8gdHdlbnR5IHN0ZXBzIHBlciByb3VuZAorVk9JRCBTSEFUcmFuc2Zvcm0oVUlOVDMyIEJ1Zls1XSwgVUlOVDMyIE1lc1syMF0pCit7CisgICAgVUlOVDMyIFJlZ1s1XSxUZW1wOworCXVuc2lnbmVkIGludCBpOworICAgIFVJTlQzMiBXWzgwXTsKKworICAgIHN0YXRpYyBVSU5UMzIgU0hBMVRhYmxlWzRdID0geyAweDVhODI3OTk5LCAweDZlZDllYmExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGYxYmJjZGMsIDB4Y2E2MmMxZDYgfTsKKworICAgIFJlZ1swXT1CdWZbMF07CisJUmVnWzFdPUJ1ZlsxXTsKKwlSZWdbMl09QnVmWzJdOworCVJlZ1szXT1CdWZbM107CisJUmVnWzRdPUJ1Zls0XTsKKworICAgIC8vdGhlIGZpcnN0IG9jdGV0IG9mIGEgd29yZCBpcyBzdG9yZWQgaW4gdGhlIDB0aCBlbGVtZW50LCBieXRlcmV2ZXJzZQorCWZvcihpID0gMDsgaSA8IDE2OyBpKyspCisgICAgeworICAgIAlXW2ldICA9IChNZXNbaV0gPj4gMjQpICYgMHhmZjsKKyAgICAgICAgV1tpXSB8PSAoTWVzW2ldID4+IDggKSAmIDB4ZmYwMDsKKyAgICAgICAgV1tpXSB8PSAoTWVzW2ldIDw8IDggKSAmIDB4ZmYwMDAwOworICAgICAgICBXW2ldIHw9IChNZXNbaV0gPDwgMjQpICYgMHhmZjAwMDAwMDsKKyAgICB9CisKKworICAgIGZvcgkoaSA9IDA7IGkgPCA2NDsgaSsrKQorCSAgICBXWzE2K2ldID0gQ1lDTElDX0xFRlRfU0hJRlQoV1tpXSBeIFdbMitpXSBeIFdbOCtpXSBeIFdbMTMraV0sIDEpOworCisKKyAgICAvLyA4MCBzdGVwcyBpbiBTSEEtMSBhbGdvcml0aG0KKyAgICBmb3IgKGk9MDsgaTw4MDsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGk8MjApCisgICAgICAgICAgICBTSEExU3RlcChTSEExX0YxLCBSZWdbMF0sIFJlZ1sxXSwgUmVnWzJdLCBSZWdbM10sIFJlZ1s0XSwKKyAgICAgICAgICAgICAgICAgICAgIFdbaV0sIFNIQTFUYWJsZVswXSk7CisKKyAgICAgICAgZWxzZSBpZiAoaT49MjAgJiYgaTw0MCkKKyAgICAgICAgICAgIFNIQTFTdGVwKFNIQTFfRjIsIFJlZ1swXSwgUmVnWzFdLCBSZWdbMl0sIFJlZ1szXSwgUmVnWzRdLAorICAgICAgICAgICAgICAgICAgICAgV1tpXSwgU0hBMVRhYmxlWzFdKTsKKworCQllbHNlIGlmIChpPj00MCAmJiBpPDYwKQorICAgICAgICAgICAgU0hBMVN0ZXAoU0hBMV9GMywgUmVnWzBdLCBSZWdbMV0sIFJlZ1syXSwgUmVnWzNdLCBSZWdbNF0sCisgICAgICAgICAgICAgICAgICAgICAgV1tpXSwgU0hBMVRhYmxlWzJdKTsKKworICAgICAgICBlbHNlCisgICAgICAgICAgICBTSEExU3RlcChTSEExX0YyLCBSZWdbMF0sIFJlZ1sxXSwgUmVnWzJdLCBSZWdbM10sIFJlZ1s0XSwKKyAgICAgICAgICAgICAgICAgICAgIFdbaV0sIFNIQTFUYWJsZVszXSk7CisKKworICAgICAgIC8vIG9uZS13b3JkIHJpZ2h0IHNoaWZ0CisJCVRlbXAgICA9IFJlZ1s0XTsKKyAgICAgICAgUmVnWzRdID0gUmVnWzNdOworICAgICAgICBSZWdbM10gPSBSZWdbMl07CisgICAgICAgIFJlZ1syXSA9IFJlZ1sxXTsKKyAgICAgICAgUmVnWzFdID0gUmVnWzBdOworICAgICAgICBSZWdbMF0gPSBUZW1wOworCisgICAgfSAvLyBlbmQgb2YgZm9yLWxvb3AKKworCisgICAgLy8gKHRlbXBvcmFyeSlvdXRwdXQKKyAgICBmb3IgKGk9MDsgaTw1OyBpKyspCisgICAgICAgIEJ1ZltpXSArPSBSZWdbaV07CisKK30KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09ICBBRVMgRW4vRGVjcnlwdGlvbiA9PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiBmb3J3YXJkIFMtYm94ICovCitzdGF0aWMgdWludDMyIEZTYlsyNTZdID0KK3sKKwkweDYzLCAweDdDLAkweDc3LCAweDdCLAkweEYyLCAweDZCLAkweDZGLCAweEM1LAorCTB4MzAsIDB4MDEsCTB4NjcsIDB4MkIsCTB4RkUsIDB4RDcsCTB4QUIsIDB4NzYsCisJMHhDQSwgMHg4MiwJMHhDOSwgMHg3RCwJMHhGQSwgMHg1OSwJMHg0NywgMHhGMCwKKwkweEFELCAweEQ0LAkweEEyLCAweEFGLAkweDlDLCAweEE0LAkweDcyLCAweEMwLAorCTB4QjcsIDB4RkQsCTB4OTMsIDB4MjYsCTB4MzYsIDB4M0YsCTB4RjcsIDB4Q0MsCisJMHgzNCwgMHhBNSwJMHhFNSwgMHhGMSwJMHg3MSwgMHhEOCwJMHgzMSwgMHgxNSwKKwkweDA0LCAweEM3LAkweDIzLCAweEMzLAkweDE4LCAweDk2LAkweDA1LCAweDlBLAorCTB4MDcsIDB4MTIsCTB4ODAsIDB4RTIsCTB4RUIsIDB4MjcsCTB4QjIsIDB4NzUsCisJMHgwOSwgMHg4MywJMHgyQywgMHgxQSwJMHgxQiwgMHg2RSwJMHg1QSwgMHhBMCwKKwkweDUyLCAweDNCLAkweEQ2LCAweEIzLAkweDI5LCAweEUzLAkweDJGLCAweDg0LAorCTB4NTMsIDB4RDEsCTB4MDAsIDB4RUQsCTB4MjAsIDB4RkMsCTB4QjEsIDB4NUIsCisJMHg2QSwgMHhDQiwJMHhCRSwgMHgzOSwJMHg0QSwgMHg0QywJMHg1OCwgMHhDRiwKKwkweEQwLCAweEVGLAkweEFBLCAweEZCLAkweDQzLCAweDRELAkweDMzLCAweDg1LAorCTB4NDUsIDB4RjksCTB4MDIsIDB4N0YsCTB4NTAsIDB4M0MsCTB4OUYsIDB4QTgsCisJMHg1MSwgMHhBMywJMHg0MCwgMHg4RiwJMHg5MiwgMHg5RCwJMHgzOCwgMHhGNSwKKwkweEJDLCAweEI2LAkweERBLCAweDIxLAkweDEwLCAweEZGLAkweEYzLCAweEQyLAorCTB4Q0QsIDB4MEMsCTB4MTMsIDB4RUMsCTB4NUYsIDB4OTcsCTB4NDQsIDB4MTcsCisJMHhDNCwgMHhBNywJMHg3RSwgMHgzRCwJMHg2NCwgMHg1RCwJMHgxOSwgMHg3MywKKwkweDYwLCAweDgxLAkweDRGLCAweERDLAkweDIyLCAweDJBLAkweDkwLCAweDg4LAorCTB4NDYsIDB4RUUsCTB4QjgsIDB4MTQsCTB4REUsIDB4NUUsCTB4MEIsIDB4REIsCisJMHhFMCwgMHgzMiwJMHgzQSwgMHgwQSwJMHg0OSwgMHgwNiwJMHgyNCwgMHg1QywKKwkweEMyLCAweEQzLAkweEFDLCAweDYyLAkweDkxLCAweDk1LAkweEU0LCAweDc5LAorCTB4RTcsIDB4QzgsCTB4MzcsIDB4NkQsCTB4OEQsIDB4RDUsCTB4NEUsIDB4QTksCisJMHg2QywgMHg1NiwJMHhGNCwgMHhFQSwJMHg2NSwgMHg3QSwJMHhBRSwgMHgwOCwKKwkweEJBLCAweDc4LAkweDI1LCAweDJFLAkweDFDLCAweEE2LAkweEI0LCAweEM2LAorCTB4RTgsIDB4REQsCTB4NzQsIDB4MUYsCTB4NEIsIDB4QkQsCTB4OEIsIDB4OEEsCisJMHg3MCwgMHgzRSwJMHhCNSwgMHg2NiwJMHg0OCwgMHgwMywJMHhGNiwgMHgwRSwKKwkweDYxLCAweDM1LAkweDU3LCAweEI5LAkweDg2LCAweEMxLAkweDFELCAweDlFLAorCTB4RTEsIDB4RjgsCTB4OTgsIDB4MTEsCTB4NjksIDB4RDksCTB4OEUsIDB4OTQsCisJMHg5QiwgMHgxRSwJMHg4NywgMHhFOSwJMHhDRSwgMHg1NSwJMHgyOCwgMHhERiwKKwkweDhDLCAweEExLAkweDg5LCAweDBELAkweEJGLCAweEU2LAkweDQyLCAweDY4LAorCTB4NDEsIDB4OTksCTB4MkQsIDB4MEYsCTB4QjAsIDB4NTQsCTB4QkIsIDB4MTYKK307CisKKy8qIGZvcndhcmQgdGFibGUgKi8KKyNkZWZpbmUJRlQgXAorXAorCVYoQzYsNjMsNjMsQTUpLAlWKEY4LDdDLDdDLDg0KSwJVihFRSw3Nyw3Nyw5OSksCVYoRjYsN0IsN0IsOEQpLAlcCisJVihGRixGMixGMiwwRCksCVYoRDYsNkIsNkIsQkQpLAlWKERFLDZGLDZGLEIxKSwJVig5MSxDNSxDNSw1NCksCVwKKwlWKDYwLDMwLDMwLDUwKSwJVigwMiwwMSwwMSwwMyksCVYoQ0UsNjcsNjcsQTkpLAlWKDU2LDJCLDJCLDdEKSwJXAorCVYoRTcsRkUsRkUsMTkpLAlWKEI1LEQ3LEQ3LDYyKSwJVig0RCxBQixBQixFNiksCVYoRUMsNzYsNzYsOUEpLAlcCisJVig4RixDQSxDQSw0NSksCVYoMUYsODIsODIsOUQpLAlWKDg5LEM5LEM5LDQwKSwJVihGQSw3RCw3RCw4NyksCVwKKwlWKEVGLEZBLEZBLDE1KSwJVihCMiw1OSw1OSxFQiksCVYoOEUsNDcsNDcsQzkpLAlWKEZCLEYwLEYwLDBCKSwJXAorCVYoNDEsQUQsQUQsRUMpLAlWKEIzLEQ0LEQ0LDY3KSwJVig1RixBMixBMixGRCksCVYoNDUsQUYsQUYsRUEpLAlcCisJVigyMyw5Qyw5QyxCRiksCVYoNTMsQTQsQTQsRjcpLAlWKEU0LDcyLDcyLDk2KSwJVig5QixDMCxDMCw1QiksCVwKKwlWKDc1LEI3LEI3LEMyKSwJVihFMSxGRCxGRCwxQyksCVYoM0QsOTMsOTMsQUUpLAlWKDRDLDI2LDI2LDZBKSwJXAorCVYoNkMsMzYsMzYsNUEpLAlWKDdFLDNGLDNGLDQxKSwJVihGNSxGNyxGNywwMiksCVYoODMsQ0MsQ0MsNEYpLAlcCisJVig2OCwzNCwzNCw1QyksCVYoNTEsQTUsQTUsRjQpLAlWKEQxLEU1LEU1LDM0KSwJVihGOSxGMSxGMSwwOCksCVwKKwlWKEUyLDcxLDcxLDkzKSwJVihBQixEOCxEOCw3MyksCVYoNjIsMzEsMzEsNTMpLAlWKDJBLDE1LDE1LDNGKSwJXAorCVYoMDgsMDQsMDQsMEMpLAlWKDk1LEM3LEM3LDUyKSwJVig0NiwyMywyMyw2NSksCVYoOUQsQzMsQzMsNUUpLAlcCisJVigzMCwxOCwxOCwyOCksCVYoMzcsOTYsOTYsQTEpLAlWKDBBLDA1LDA1LDBGKSwJVigyRiw5QSw5QSxCNSksCVwKKwlWKDBFLDA3LDA3LDA5KSwJVigyNCwxMiwxMiwzNiksCVYoMUIsODAsODAsOUIpLAlWKERGLEUyLEUyLDNEKSwJXAorCVYoQ0QsRUIsRUIsMjYpLAlWKDRFLDI3LDI3LDY5KSwJVig3RixCMixCMixDRCksCVYoRUEsNzUsNzUsOUYpLAlcCisJVigxMiwwOSwwOSwxQiksCVYoMUQsODMsODMsOUUpLAlWKDU4LDJDLDJDLDc0KSwJVigzNCwxQSwxQSwyRSksCVwKKwlWKDM2LDFCLDFCLDJEKSwJVihEQyw2RSw2RSxCMiksCVYoQjQsNUEsNUEsRUUpLAlWKDVCLEEwLEEwLEZCKSwJXAorCVYoQTQsNTIsNTIsRjYpLAlWKDc2LDNCLDNCLDREKSwJVihCNyxENixENiw2MSksCVYoN0QsQjMsQjMsQ0UpLAlcCisJVig1MiwyOSwyOSw3QiksCVYoREQsRTMsRTMsM0UpLAlWKDVFLDJGLDJGLDcxKSwJVigxMyw4NCw4NCw5NyksCVwKKwlWKEE2LDUzLDUzLEY1KSwJVihCOSxEMSxEMSw2OCksCVYoMDAsMDAsMDAsMDApLAlWKEMxLEVELEVELDJDKSwJXAorCVYoNDAsMjAsMjAsNjApLAlWKEUzLEZDLEZDLDFGKSwJVig3OSxCMSxCMSxDOCksCVYoQjYsNUIsNUIsRUQpLAlcCisJVihENCw2QSw2QSxCRSksCVYoOEQsQ0IsQ0IsNDYpLAlWKDY3LEJFLEJFLEQ5KSwJVig3MiwzOSwzOSw0QiksCVwKKwlWKDk0LDRBLDRBLERFKSwJVig5OCw0Qyw0QyxENCksCVYoQjAsNTgsNTgsRTgpLAlWKDg1LENGLENGLDRBKSwJXAorCVYoQkIsRDAsRDAsNkIpLAlWKEM1LEVGLEVGLDJBKSwJVig0RixBQSxBQSxFNSksCVYoRUQsRkIsRkIsMTYpLAlcCisJVig4Niw0Myw0MyxDNSksCVYoOUEsNEQsNEQsRDcpLAlWKDY2LDMzLDMzLDU1KSwJVigxMSw4NSw4NSw5NCksCVwKKwlWKDhBLDQ1LDQ1LENGKSwJVihFOSxGOSxGOSwxMCksCVYoMDQsMDIsMDIsMDYpLAlWKEZFLDdGLDdGLDgxKSwJXAorCVYoQTAsNTAsNTAsRjApLAlWKDc4LDNDLDNDLDQ0KSwJVigyNSw5Riw5RixCQSksCVYoNEIsQTgsQTgsRTMpLAlcCisJVihBMiw1MSw1MSxGMyksCVYoNUQsQTMsQTMsRkUpLAlWKDgwLDQwLDQwLEMwKSwJVigwNSw4Riw4Riw4QSksCVwKKwlWKDNGLDkyLDkyLEFEKSwJVigyMSw5RCw5RCxCQyksCVYoNzAsMzgsMzgsNDgpLAlWKEYxLEY1LEY1LDA0KSwJXAorCVYoNjMsQkMsQkMsREYpLAlWKDc3LEI2LEI2LEMxKSwJVihBRixEQSxEQSw3NSksCVYoNDIsMjEsMjEsNjMpLAlcCisJVigyMCwxMCwxMCwzMCksCVYoRTUsRkYsRkYsMUEpLAlWKEZELEYzLEYzLDBFKSwJVihCRixEMixEMiw2RCksCVwKKwlWKDgxLENELENELDRDKSwJVigxOCwwQywwQywxNCksCVYoMjYsMTMsMTMsMzUpLAlWKEMzLEVDLEVDLDJGKSwJXAorCVYoQkUsNUYsNUYsRTEpLAlWKDM1LDk3LDk3LEEyKSwJVig4OCw0NCw0NCxDQyksCVYoMkUsMTcsMTcsMzkpLAlcCisJVig5MyxDNCxDNCw1NyksCVYoNTUsQTcsQTcsRjIpLAlWKEZDLDdFLDdFLDgyKSwJVig3QSwzRCwzRCw0NyksCVwKKwlWKEM4LDY0LDY0LEFDKSwJVihCQSw1RCw1RCxFNyksCVYoMzIsMTksMTksMkIpLAlWKEU2LDczLDczLDk1KSwJXAorCVYoQzAsNjAsNjAsQTApLAlWKDE5LDgxLDgxLDk4KSwJVig5RSw0Riw0RixEMSksCVYoQTMsREMsREMsN0YpLAlcCisJVig0NCwyMiwyMiw2NiksCVYoNTQsMkEsMkEsN0UpLAlWKDNCLDkwLDkwLEFCKSwJVigwQiw4OCw4OCw4MyksCVwKKwlWKDhDLDQ2LDQ2LENBKSwJVihDNyxFRSxFRSwyOSksCVYoNkIsQjgsQjgsRDMpLAlWKDI4LDE0LDE0LDNDKSwJXAorCVYoQTcsREUsREUsNzkpLAlWKEJDLDVFLDVFLEUyKSwJVigxNiwwQiwwQiwxRCksCVYoQUQsREIsREIsNzYpLAlcCisJVihEQixFMCxFMCwzQiksCVYoNjQsMzIsMzIsNTYpLAlWKDc0LDNBLDNBLDRFKSwJVigxNCwwQSwwQSwxRSksCVwKKwlWKDkyLDQ5LDQ5LERCKSwJVigwQywwNiwwNiwwQSksCVYoNDgsMjQsMjQsNkMpLAlWKEI4LDVDLDVDLEU0KSwJXAorCVYoOUYsQzIsQzIsNUQpLAlWKEJELEQzLEQzLDZFKSwJVig0MyxBQyxBQyxFRiksCVYoQzQsNjIsNjIsQTYpLAlcCisJVigzOSw5MSw5MSxBOCksCVYoMzEsOTUsOTUsQTQpLAlWKEQzLEU0LEU0LDM3KSwJVihGMiw3OSw3OSw4QiksCVwKKwlWKEQ1LEU3LEU3LDMyKSwJVig4QixDOCxDOCw0MyksCVYoNkUsMzcsMzcsNTkpLAlWKERBLDZELDZELEI3KSwJXAorCVYoMDEsOEQsOEQsOEMpLAlWKEIxLEQ1LEQ1LDY0KSwJVig5Qyw0RSw0RSxEMiksCVYoNDksQTksQTksRTApLAlcCisJVihEOCw2Qyw2QyxCNCksCVYoQUMsNTYsNTYsRkEpLAlWKEYzLEY0LEY0LDA3KSwJVihDRixFQSxFQSwyNSksCVwKKwlWKENBLDY1LDY1LEFGKSwJVihGNCw3QSw3QSw4RSksCVYoNDcsQUUsQUUsRTkpLAlWKDEwLDA4LDA4LDE4KSwJXAorCVYoNkYsQkEsQkEsRDUpLAlWKEYwLDc4LDc4LDg4KSwJVig0QSwyNSwyNSw2RiksCVYoNUMsMkUsMkUsNzIpLAlcCisJVigzOCwxQywxQywyNCksCVYoNTcsQTYsQTYsRjEpLAlWKDczLEI0LEI0LEM3KSwJVig5NyxDNixDNiw1MSksCVwKKwlWKENCLEU4LEU4LDIzKSwJVihBMSxERCxERCw3QyksCVYoRTgsNzQsNzQsOUMpLAlWKDNFLDFGLDFGLDIxKSwJXAorCVYoOTYsNEIsNEIsREQpLAlWKDYxLEJELEJELERDKSwJVigwRCw4Qiw4Qiw4NiksCVYoMEYsOEEsOEEsODUpLAlcCisJVihFMCw3MCw3MCw5MCksCVYoN0MsM0UsM0UsNDIpLAlWKDcxLEI1LEI1LEM0KSwJVihDQyw2Niw2NixBQSksCVwKKwlWKDkwLDQ4LDQ4LEQ4KSwJVigwNiwwMywwMywwNSksCVYoRjcsRjYsRjYsMDEpLAlWKDFDLDBFLDBFLDEyKSwJXAorCVYoQzIsNjEsNjEsQTMpLAlWKDZBLDM1LDM1LDVGKSwJVihBRSw1Nyw1NyxGOSksCVYoNjksQjksQjksRDApLAlcCisJVigxNyw4Niw4Niw5MSksCVYoOTksQzEsQzEsNTgpLAlWKDNBLDFELDFELDI3KSwJVigyNyw5RSw5RSxCOSksCVwKKwlWKEQ5LEUxLEUxLDM4KSwJVihFQixGOCxGOCwxMyksCVYoMkIsOTgsOTgsQjMpLAlWKDIyLDExLDExLDMzKSwJXAorCVYoRDIsNjksNjksQkIpLAlWKEE5LEQ5LEQ5LDcwKSwJVigwNyw4RSw4RSw4OSksCVYoMzMsOTQsOTQsQTcpLAlcCisJVigyRCw5Qiw5QixCNiksCVYoM0MsMUUsMUUsMjIpLAlWKDE1LDg3LDg3LDkyKSwJVihDOSxFOSxFOSwyMCksCVwKKwlWKDg3LENFLENFLDQ5KSwJVihBQSw1NSw1NSxGRiksCVYoNTAsMjgsMjgsNzgpLAlWKEE1LERGLERGLDdBKSwJXAorCVYoMDMsOEMsOEMsOEYpLAlWKDU5LEExLEExLEY4KSwJVigwOSw4OSw4OSw4MCksCVYoMUEsMEQsMEQsMTcpLAlcCisJVig2NSxCRixCRixEQSksCVYoRDcsRTYsRTYsMzEpLAlWKDg0LDQyLDQyLEM2KSwJVihEMCw2OCw2OCxCOCksCVwKKwlWKDgyLDQxLDQxLEMzKSwJVigyOSw5OSw5OSxCMCksCVYoNUEsMkQsMkQsNzcpLAlWKDFFLDBGLDBGLDExKSwJXAorCVYoN0IsQjAsQjAsQ0IpLAlWKEE4LDU0LDU0LEZDKSwJVig2RCxCQixCQixENiksCVYoMkMsMTYsMTYsM0EpCisKKyNkZWZpbmUJVihhLGIsYyxkKSAweCMjYSMjYiMjYyMjZAorc3RhdGljIHVpbnQzMiBGVDBbMjU2XSA9IHsgRlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUJVihhLGIsYyxkKSAweCMjZCMjYSMjYiMjYworc3RhdGljIHVpbnQzMiBGVDFbMjU2XSA9IHsgRlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUJVihhLGIsYyxkKSAweCMjYyMjZCMjYSMjYgorc3RhdGljIHVpbnQzMiBGVDJbMjU2XSA9IHsgRlQgfTsKKyN1bmRlZiBWCisKKyNkZWZpbmUJVihhLGIsYyxkKSAweCMjYiMjYyMjZCMjYQorc3RhdGljIHVpbnQzMiBGVDNbMjU2XSA9IHsgRlQgfTsKKyN1bmRlZiBWCisKKyN1bmRlZiBGVAorCisvKiByZXZlcnNlIFMtYm94ICovCisKK3N0YXRpYyB1aW50MzIgUlNiWzI1Nl0gPQoreworCTB4NTIsIDB4MDksCTB4NkEsIDB4RDUsCTB4MzAsIDB4MzYsCTB4QTUsIDB4MzgsCisJMHhCRiwgMHg0MCwJMHhBMywgMHg5RSwJMHg4MSwgMHhGMywJMHhENywgMHhGQiwKKwkweDdDLCAweEUzLAkweDM5LCAweDgyLAkweDlCLCAweDJGLAkweEZGLCAweDg3LAorCTB4MzQsIDB4OEUsCTB4NDMsIDB4NDQsCTB4QzQsIDB4REUsCTB4RTksIDB4Q0IsCisJMHg1NCwgMHg3QiwJMHg5NCwgMHgzMiwJMHhBNiwgMHhDMiwJMHgyMywgMHgzRCwKKwkweEVFLCAweDRDLAkweDk1LCAweDBCLAkweDQyLCAweEZBLAkweEMzLCAweDRFLAorCTB4MDgsIDB4MkUsCTB4QTEsIDB4NjYsCTB4MjgsIDB4RDksCTB4MjQsIDB4QjIsCisJMHg3NiwgMHg1QiwJMHhBMiwgMHg0OSwJMHg2RCwgMHg4QiwJMHhEMSwgMHgyNSwKKwkweDcyLCAweEY4LAkweEY2LCAweDY0LAkweDg2LCAweDY4LAkweDk4LCAweDE2LAorCTB4RDQsIDB4QTQsCTB4NUMsIDB4Q0MsCTB4NUQsIDB4NjUsCTB4QjYsIDB4OTIsCisJMHg2QywgMHg3MCwJMHg0OCwgMHg1MCwJMHhGRCwgMHhFRCwJMHhCOSwgMHhEQSwKKwkweDVFLCAweDE1LAkweDQ2LCAweDU3LAkweEE3LCAweDhELAkweDlELCAweDg0LAorCTB4OTAsIDB4RDgsCTB4QUIsIDB4MDAsCTB4OEMsIDB4QkMsCTB4RDMsIDB4MEEsCisJMHhGNywgMHhFNCwJMHg1OCwgMHgwNSwJMHhCOCwgMHhCMywJMHg0NSwgMHgwNiwKKwkweEQwLCAweDJDLAkweDFFLCAweDhGLAkweENBLCAweDNGLAkweDBGLCAweDAyLAorCTB4QzEsIDB4QUYsCTB4QkQsIDB4MDMsCTB4MDEsIDB4MTMsCTB4OEEsIDB4NkIsCisJMHgzQSwgMHg5MSwJMHgxMSwgMHg0MSwJMHg0RiwgMHg2NywJMHhEQywgMHhFQSwKKwkweDk3LCAweEYyLAkweENGLCAweENFLAkweEYwLCAweEI0LAkweEU2LCAweDczLAorCTB4OTYsIDB4QUMsCTB4NzQsIDB4MjIsCTB4RTcsIDB4QUQsCTB4MzUsIDB4ODUsCisJMHhFMiwgMHhGOSwJMHgzNywgMHhFOCwJMHgxQywgMHg3NSwJMHhERiwgMHg2RSwKKwkweDQ3LCAweEYxLAkweDFBLCAweDcxLAkweDFELCAweDI5LAkweEM1LCAweDg5LAorCTB4NkYsIDB4QjcsCTB4NjIsIDB4MEUsCTB4QUEsIDB4MTgsCTB4QkUsIDB4MUIsCisJMHhGQywgMHg1NiwJMHgzRSwgMHg0QiwJMHhDNiwgMHhEMiwJMHg3OSwgMHgyMCwKKwkweDlBLCAweERCLAkweEMwLCAweEZFLAkweDc4LCAweENELAkweDVBLCAweEY0LAorCTB4MUYsIDB4REQsCTB4QTgsIDB4MzMsCTB4ODgsIDB4MDcsCTB4QzcsIDB4MzEsCisJMHhCMSwgMHgxMiwJMHgxMCwgMHg1OSwJMHgyNywgMHg4MCwJMHhFQywgMHg1RiwKKwkweDYwLCAweDUxLAkweDdGLCAweEE5LAkweDE5LCAweEI1LAkweDRBLCAweDBELAorCTB4MkQsIDB4RTUsCTB4N0EsIDB4OUYsCTB4OTMsIDB4QzksCTB4OUMsIDB4RUYsCisJMHhBMCwgMHhFMCwJMHgzQiwgMHg0RCwJMHhBRSwgMHgyQSwJMHhGNSwgMHhCMCwKKwkweEM4LCAweEVCLAkweEJCLCAweDNDLAkweDgzLCAweDUzLAkweDk5LCAweDYxLAorCTB4MTcsIDB4MkIsCTB4MDQsIDB4N0UsCTB4QkEsIDB4NzcsCTB4RDYsIDB4MjYsCisJMHhFMSwgMHg2OSwJMHgxNCwgMHg2MywJMHg1NSwgMHgyMSwJMHgwQywgMHg3RAorfTsKKworLyogcmV2ZXJzZSB0YWJsZSAqLworCisjZGVmaW5lCVJUIFwKK1wKKwlWKDUxLEY0LEE3LDUwKSwJVig3RSw0MSw2NSw1MyksCVYoMUEsMTcsQTQsQzMpLAlWKDNBLDI3LDVFLDk2KSwJXAorCVYoM0IsQUIsNkIsQ0IpLAlWKDFGLDlELDQ1LEYxKSwJVihBQyxGQSw1OCxBQiksCVYoNEIsRTMsMDMsOTMpLAlcCisJVigyMCwzMCxGQSw1NSksCVYoQUQsNzYsNkQsRjYpLAlWKDg4LENDLDc2LDkxKSwJVihGNSwwMiw0QywyNSksCVwKKwlWKDRGLEU1LEQ3LEZDKSwJVihDNSwyQSxDQixENyksCVYoMjYsMzUsNDQsODApLAlWKEI1LDYyLEEzLDhGKSwJXAorCVYoREUsQjEsNUEsNDkpLAlWKDI1LEJBLDFCLDY3KSwJVig0NSxFQSwwRSw5OCksCVYoNUQsRkUsQzAsRTEpLAlcCisJVihDMywyRiw3NSwwMiksCVYoODEsNEMsRjAsMTIpLAlWKDhELDQ2LDk3LEEzKSwJVig2QixEMyxGOSxDNiksCVwKKwlWKDAzLDhGLDVGLEU3KSwJVigxNSw5Miw5Qyw5NSksCVYoQkYsNkQsN0EsRUIpLAlWKDk1LDUyLDU5LERBKSwJXAorCVYoRDQsQkUsODMsMkQpLAlWKDU4LDc0LDIxLEQzKSwJVig0OSxFMCw2OSwyOSksCVYoOEUsQzksQzgsNDQpLAlcCisJVig3NSxDMiw4OSw2QSksCVYoRjQsOEUsNzksNzgpLAlWKDk5LDU4LDNFLDZCKSwJVigyNyxCOSw3MSxERCksCVwKKwlWKEJFLEUxLDRGLEI2KSwJVihGMCw4OCxBRCwxNyksCVYoQzksMjAsQUMsNjYpLAlWKDdELENFLDNBLEI0KSwJXAorCVYoNjMsREYsNEEsMTgpLAlWKEU1LDFBLDMxLDgyKSwJVig5Nyw1MSwzMyw2MCksCVYoNjIsNTMsN0YsNDUpLAlcCisJVihCMSw2NCw3NyxFMCksCVYoQkIsNkIsQUUsODQpLAlWKEZFLDgxLEEwLDFDKSwJVihGOSwwOCwyQiw5NCksCVwKKwlWKDcwLDQ4LDY4LDU4KSwJVig4Riw0NSxGRCwxOSksCVYoOTQsREUsNkMsODcpLAlWKDUyLDdCLEY4LEI3KSwJXAorCVYoQUIsNzMsRDMsMjMpLAlWKDcyLDRCLDAyLEUyKSwJVihFMywxRiw4Riw1NyksCVYoNjYsNTUsQUIsMkEpLAlcCisJVihCMixFQiwyOCwwNyksCVYoMkYsQjUsQzIsMDMpLAlWKDg2LEM1LDdCLDlBKSwJVihEMywzNywwOCxBNSksCVwKKwlWKDMwLDI4LDg3LEYyKSwJVigyMyxCRixBNSxCMiksCVYoMDIsMDMsNkEsQkEpLAlWKEVELDE2LDgyLDVDKSwJXAorCVYoOEEsQ0YsMUMsMkIpLAlWKEE3LDc5LEI0LDkyKSwJVihGMywwNyxGMixGMCksCVYoNEUsNjksRTIsQTEpLAlcCisJVig2NSxEQSxGNCxDRCksCVYoMDYsMDUsQkUsRDUpLAlWKEQxLDM0LDYyLDFGKSwJVihDNCxBNixGRSw4QSksCVwKKwlWKDM0LDJFLDUzLDlEKSwJVihBMixGMyw1NSxBMCksCVYoMDUsOEEsRTEsMzIpLAlWKEE0LEY2LEVCLDc1KSwJXAorCVYoMEIsODMsRUMsMzkpLAlWKDQwLDYwLEVGLEFBKSwJVig1RSw3MSw5RiwwNiksCVYoQkQsNkUsMTAsNTEpLAlcCisJVigzRSwyMSw4QSxGOSksCVYoOTYsREQsMDYsM0QpLAlWKERELDNFLDA1LEFFKSwJVig0RCxFNixCRCw0NiksCVwKKwlWKDkxLDU0LDhELEI1KSwJVig3MSxDNCw1RCwwNSksCVYoMDQsMDYsRDQsNkYpLAlWKDYwLDUwLDE1LEZGKSwJXAorCVYoMTksOTgsRkIsMjQpLAlWKEQ2LEJELEU5LDk3KSwJVig4OSw0MCw0MyxDQyksCVYoNjcsRDksOUUsNzcpLAlcCisJVihCMCxFOCw0MixCRCksCVYoMDcsODksOEIsODgpLAlWKEU3LDE5LDVCLDM4KSwJVig3OSxDOCxFRSxEQiksCVwKKwlWKEExLDdDLDBBLDQ3KSwJVig3Qyw0MiwwRixFOSksCVYoRjgsODQsMUUsQzkpLAlWKDAwLDAwLDAwLDAwKSwJXAorCVYoMDksODAsODYsODMpLAlWKDMyLDJCLEVELDQ4KSwJVigxRSwxMSw3MCxBQyksCVYoNkMsNUEsNzIsNEUpLAlcCisJVihGRCwwRSxGRixGQiksCVYoMEYsODUsMzgsNTYpLAlWKDNELEFFLEQ1LDFFKSwJVigzNiwyRCwzOSwyNyksCVwKKwlWKDBBLDBGLEQ5LDY0KSwJVig2OCw1QyxBNiwyMSksCVYoOUIsNUIsNTQsRDEpLAlWKDI0LDM2LDJFLDNBKSwJXAorCVYoMEMsMEEsNjcsQjEpLAlWKDkzLDU3LEU3LDBGKSwJVihCNCxFRSw5NixEMiksCVYoMUIsOUIsOTEsOUUpLAlcCisJVig4MCxDMCxDNSw0RiksCVYoNjEsREMsMjAsQTIpLAlWKDVBLDc3LDRCLDY5KSwJVigxQywxMiwxQSwxNiksCVwKKwlWKEUyLDkzLEJBLDBBKSwJVihDMCxBMCwyQSxFNSksCVYoM0MsMjIsRTAsNDMpLAlWKDEyLDFCLDE3LDFEKSwJXAorCVYoMEUsMDksMEQsMEIpLAlWKEYyLDhCLEM3LEFEKSwJVigyRCxCNixBOCxCOSksCVYoMTQsMUUsQTksQzgpLAlcCisJVig1NyxGMSwxOSw4NSksCVYoQUYsNzUsMDcsNEMpLAlWKEVFLDk5LERELEJCKSwJVihBMyw3Riw2MCxGRCksCVwKKwlWKEY3LDAxLDI2LDlGKSwJVig1Qyw3MixGNSxCQyksCVYoNDQsNjYsM0IsQzUpLAlWKDVCLEZCLDdFLDM0KSwJXAorCVYoOEIsNDMsMjksNzYpLAlWKENCLDIzLEM2LERDKSwJVihCNixFRCxGQyw2OCksCVYoQjgsRTQsRjEsNjMpLAlcCisJVihENywzMSxEQyxDQSksCVYoNDIsNjMsODUsMTApLAlWKDEzLDk3LDIyLDQwKSwJVig4NCxDNiwxMSwyMCksCVwKKwlWKDg1LDRBLDI0LDdEKSwJVihEMixCQiwzRCxGOCksCVYoQUUsRjksMzIsMTEpLAlWKEM3LDI5LEExLDZEKSwJXAorCVYoMUQsOUUsMkYsNEIpLAlWKERDLEIyLDMwLEYzKSwJVigwRCw4Niw1MixFQyksCVYoNzcsQzEsRTMsRDApLAlcCisJVigyQixCMywxNiw2QyksCVYoQTksNzAsQjksOTkpLAlWKDExLDk0LDQ4LEZBKSwJVig0NyxFOSw2NCwyMiksCVwKKwlWKEE4LEZDLDhDLEM0KSwJVihBMCxGMCwzRiwxQSksCVYoNTYsN0QsMkMsRDgpLAlWKDIyLDMzLDkwLEVGKSwJXAorCVYoODcsNDksNEUsQzcpLAlWKEQ5LDM4LEQxLEMxKSwJVig4QyxDQSxBMixGRSksCVYoOTgsRDQsMEIsMzYpLAlcCisJVihBNixGNSw4MSxDRiksCVYoQTUsN0EsREUsMjgpLAlWKERBLEI3LDhFLDI2KSwJVigzRixBRCxCRixBNCksCVwKKwlWKDJDLDNBLDlELEU0KSwJVig1MCw3OCw5MiwwRCksCVYoNkEsNUYsQ0MsOUIpLAlWKDU0LDdFLDQ2LDYyKSwJXAorCVYoRjYsOEQsMTMsQzIpLAlWKDkwLEQ4LEI4LEU4KSwJVigyRSwzOSxGNyw1RSksCVYoODIsQzMsQUYsRjUpLAlcCisJVig5Riw1RCw4MCxCRSksCVYoNjksRDAsOTMsN0MpLAlWKDZGLEQ1LDJELEE5KSwJVihDRiwyNSwxMixCMyksCVwKKwlWKEM4LEFDLDk5LDNCKSwJVigxMCwxOCw3RCxBNyksCVYoRTgsOUMsNjMsNkUpLAlWKERCLDNCLEJCLDdCKSwJXAorCVYoQ0QsMjYsNzgsMDkpLAlWKDZFLDU5LDE4LEY0KSwJVihFQyw5QSxCNywwMSksCVYoODMsNEYsOUEsQTgpLAlcCisJVihFNiw5NSw2RSw2NSksCVYoQUEsRkYsRTYsN0UpLAlWKDIxLEJDLENGLDA4KSwJVihFRiwxNSxFOCxFNiksCVwKKwlWKEJBLEU3LDlCLEQ5KSwJVig0QSw2RiwzNixDRSksCVYoRUEsOUYsMDksRDQpLAlWKDI5LEIwLDdDLEQ2KSwJXAorCVYoMzEsQTQsQjIsQUYpLAlWKDJBLDNGLDIzLDMxKSwJVihDNixBNSw5NCwzMCksCVYoMzUsQTIsNjYsQzApLAlcCisJVig3NCw0RSxCQywzNyksCVYoRkMsODIsQ0EsQTYpLAlWKEUwLDkwLEQwLEIwKSwJVigzMyxBNyxEOCwxNSksCVwKKwlWKEYxLDA0LDk4LDRBKSwJVig0MSxFQyxEQSxGNyksCVYoN0YsQ0QsNTAsMEUpLAlWKDE3LDkxLEY2LDJGKSwJXAorCVYoNzYsNEQsRDYsOEQpLAlWKDQzLEVGLEIwLDREKSwJVihDQyxBQSw0RCw1NCksCVYoRTQsOTYsMDQsREYpLAlcCisJVig5RSxEMSxCNSxFMyksCVYoNEMsNkEsODgsMUIpLAlWKEMxLDJDLDFGLEI4KSwJVig0Niw2NSw1MSw3RiksCVwKKwlWKDlELDVFLEVBLDA0KSwJVigwMSw4QywzNSw1RCksCVYoRkEsODcsNzQsNzMpLAlWKEZCLDBCLDQxLDJFKSwJXAorCVYoQjMsNjcsMUQsNUEpLAlWKDkyLERCLEQyLDUyKSwJVihFOSwxMCw1NiwzMyksCVYoNkQsRDYsNDcsMTMpLAlcCisJVig5QSxENyw2MSw4QyksCVYoMzcsQTEsMEMsN0EpLAlWKDU5LEY4LDE0LDhFKSwJVihFQiwxMywzQyw4OSksCVwKKwlWKENFLEE5LDI3LEVFKSwJVihCNyw2MSxDOSwzNSksCVYoRTEsMUMsRTUsRUQpLAlWKDdBLDQ3LEIxLDNDKSwJXAorCVYoOUMsRDIsREYsNTkpLAlWKDU1LEYyLDczLDNGKSwJVigxOCwxNCxDRSw3OSksCVYoNzMsQzcsMzcsQkYpLAlcCisJVig1MyxGNyxDRCxFQSksCVYoNUYsRkQsQUEsNUIpLAlWKERGLDNELDZGLDE0KSwJVig3OCw0NCxEQiw4NiksCVwKKwlWKENBLEFGLEYzLDgxKSwJVihCOSw2OCxDNCwzRSksCVYoMzgsMjQsMzQsMkMpLAlWKEMyLEEzLDQwLDVGKSwJXAorCVYoMTYsMUQsQzMsNzIpLAlWKEJDLEUyLDI1LDBDKSwJVigyOCwzQyw0OSw4QiksCVYoRkYsMEQsOTUsNDEpLAlcCisJVigzOSxBOCwwMSw3MSksCVYoMDgsMEMsQjMsREUpLAlWKEQ4LEI0LEU0LDlDKSwJVig2NCw1NixDMSw5MCksCVwKKwlWKDdCLENCLDg0LDYxKSwJVihENSwzMixCNiw3MCksCVYoNDgsNkMsNUMsNzQpLAlWKEQwLEI4LDU3LDQyKQorCisjZGVmaW5lCVYoYSxiLGMsZCkgMHgjI2EjI2IjI2MjI2QKK3N0YXRpYyB1aW50MzIgUlQwWzI1Nl0gPSB7IFJUIH07CisjdW5kZWYgVgorCisjZGVmaW5lCVYoYSxiLGMsZCkgMHgjI2QjI2EjI2IjI2MKK3N0YXRpYyB1aW50MzIgUlQxWzI1Nl0gPSB7IFJUIH07CisjdW5kZWYgVgorCisjZGVmaW5lCVYoYSxiLGMsZCkgMHgjI2MjI2QjI2EjI2IKK3N0YXRpYyB1aW50MzIgUlQyWzI1Nl0gPSB7IFJUIH07CisjdW5kZWYgVgorCisjZGVmaW5lCVYoYSxiLGMsZCkgMHgjI2IjI2MjI2QjI2EKK3N0YXRpYyB1aW50MzIgUlQzWzI1Nl0gPSB7IFJUIH07CisjdW5kZWYgVgorCisjdW5kZWYgUlQKKworLyogcm91bmQgY29uc3RhbnRzICovCisKK3N0YXRpYyB1aW50MzIgUkNPTlsxMF0gPQoreworCTB4MDEwMDAwMDAsCTB4MDIwMDAwMDAsCTB4MDQwMDAwMDAsCTB4MDgwMDAwMDAsCisJMHgxMDAwMDAwMCwJMHgyMDAwMDAwMCwJMHg0MDAwMDAwMCwJMHg4MDAwMDAwMCwKKwkweDFCMDAwMDAwLAkweDM2MDAwMDAwCit9OworCisvKiBrZXkgc2NoZWR1bGUJdGFibGVzICovCisKK3N0YXRpYyBpbnQgS1RfaW5pdCA9IDE7CisKK3N0YXRpYyB1aW50MzIgS1QwWzI1Nl07CitzdGF0aWMgdWludDMyIEtUMVsyNTZdOworc3RhdGljIHVpbnQzMiBLVDJbMjU2XTsKK3N0YXRpYyB1aW50MzIgS1QzWzI1Nl07CisKKy8qIHBsYXRmb3JtLWluZGVwZW5kYW50CTMyLWJpdCBpbnRlZ2VyIG1hbmlwdWxhdGlvbgltYWNyb3MgKi8KKworI2RlZmluZQlHRVRfVUlOVDMyKG4sYixpKQkJCQkJCVwKK3sJCQkJCQkJCQkJCQlcCisJKG4pCT0gKAkodWludDMyKSAoYilbKGkpCV0gPDwgMjQJKQkJXAorCQl8ICgJKHVpbnQzMikgKGIpWyhpKSArIDFdIDw8IDE2CSkJCVwKKwkJfCAoCSh1aW50MzIpIChiKVsoaSkgKyAyXSA8PCAgOAkpCQlcCisJCXwgKAkodWludDMyKSAoYilbKGkpICsgM10JCSk7CQlcCit9CisKKyNkZWZpbmUJUFVUX1VJTlQzMihuLGIsaSkJCQkJCQlcCit7CQkJCQkJCQkJCQkJXAorCShiKVsoaSkJICAgXSA9ICh1aW50OCkgKCAobikgPj4JMjQgKTsJCVwKKwkoYilbKGkpCSsgMV0gPSAodWludDgpICggKG4pID4+CTE2ICk7CQlcCisJKGIpWyhpKQkrIDJdID0gKHVpbnQ4KSAoIChuKSA+PgkgOCApOwkJXAorCShiKVsoaSkJKyAzXSA9ICh1aW50OCkgKCAobikJICAgKTsJCVwKK30KKworLyogQUVTIGtleSBzY2hlZHVsaW5nIHJvdXRpbmUgKi8KKworaW50CXJ0bXBfYWVzX3NldF9rZXkoIGFlc19jb250ZXh0ICpjdHgsIHVpbnQ4ICprZXksIGludCBuYml0cyApCit7CisJaW50CWk7CisJdWludDMyICpSSywJKlNLOworCisJc3dpdGNoKAluYml0cyApCisJeworCQljYXNlIDEyODogY3R4LT5uciA9CTEwOwlicmVhazsKKwkJY2FzZSAxOTI6IGN0eC0+bnIgPQkxMjsJYnJlYWs7CisJCWNhc2UgMjU2OiBjdHgtPm5yID0JMTQ7CWJyZWFrOworCQlkZWZhdWx0CTogcmV0dXJuKCAxCSk7CisJfQorCisJUksgPSBjdHgtPmVyazsKKworCWZvciggaSA9IDA7CWkgPAkobmJpdHMgPj4gNSk7IGkrKyApCisJeworCQlHRVRfVUlOVDMyKAlSS1tpXSwga2V5LAlpICoJNCApOworCX0KKworCS8qIHNldHVwIGVuY3J5cHRpb24Jcm91bmQga2V5cyAqLworCisJc3dpdGNoKAluYml0cyApCisJeworCWNhc2UgMTI4OgorCisJCWZvciggaSA9IDA7CWkgPAkxMDsJaSsrLCBSSwkrPSA0ICkKKwkJeworCQkJUktbNF0gID0gUktbMF0gXiBSQ09OW2ldIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbM10gPj4gMTYgKSBdIDw8CTI0ICkgXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1szXSA+PiAgOCApIF0gPDwJMTYgKSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzNdCQkgKSBdIDw8CSA4ICkgXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1szXSA+PiAyNCApIF0JICAgKTsKKworCQkJUktbNV0gID0gUktbMV0gXiBSS1s0XTsKKwkJCVJLWzZdICA9IFJLWzJdIF4gUktbNV07CisJCQlSS1s3XSAgPSBSS1szXSBeIFJLWzZdOworCQl9CisJCWJyZWFrOworCisJY2FzZSAxOTI6CisKKwkJZm9yKCBpID0gMDsJaSA8CTg7IGkrKywJUksgKz0gNgkpCisJCXsKKwkJCVJLWzZdICA9IFJLWzBdIF4gUkNPTltpXSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzVdID4+IDE2ICkgXSA8PAkyNCApIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbNV0gPj4gIDggKSBdIDw8CTE2ICkgXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1s1XQkJICkgXSA8PAkgOCApIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbNV0gPj4gMjQgKSBdCSAgICk7CisKKwkJCVJLWzddICA9IFJLWzFdIF4gUktbNl07CisJCQlSS1s4XSAgPSBSS1syXSBeIFJLWzddOworCQkJUktbOV0gID0gUktbM10gXiBSS1s4XTsKKwkJCVJLWzEwXSA9IFJLWzRdIF4gUktbOV07CisJCQlSS1sxMV0gPSBSS1s1XSBeIFJLWzEwXTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMjU2OgorCisJCWZvciggaSA9IDA7CWkgPAk3OyBpKyssCVJLICs9IDgJKQorCQl7CisJCQlSS1s4XSAgPSBSS1swXSBeIFJDT05baV0gXgorCQkJCQkJKCBGU2JbICh1aW50OCkgKCBSS1s3XSA+PiAxNiApIF0gPDwJMjQgKSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzddID4+ICA4ICkgXSA8PAkxNiApIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbN10JCSApIF0gPDwJIDggKSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzddID4+IDI0ICkgXQkgICApOworCisJCQlSS1s5XSAgPSBSS1sxXSBeIFJLWzhdOworCQkJUktbMTBdID0gUktbMl0gXiBSS1s5XTsKKwkJCVJLWzExXSA9IFJLWzNdIF4gUktbMTBdOworCisJCQlSS1sxMl0gPSBSS1s0XSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzExXQk+PiAyNCApCV0gPDwgMjQJKSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzExXQk+PiAxNiApCV0gPDwgMTYJKSBeCisJCQkJCQkoIEZTYlsgKHVpbnQ4KSAoIFJLWzExXQk+Pgk4ICkJXSA8PCAgOAkpIF4KKwkJCQkJCSggRlNiWyAodWludDgpICggUktbMTFdCQkgICkJXQkJKTsKKworCQkJUktbMTNdID0gUktbNV0gXiBSS1sxMl07CisJCQlSS1sxNF0gPSBSS1s2XSBeIFJLWzEzXTsKKwkJCVJLWzE1XSA9IFJLWzddIF4gUktbMTRdOworCQl9CisJCWJyZWFrOworCX0KKworCS8qIHNldHVwIGRlY3J5cHRpb24Jcm91bmQga2V5cyAqLworCisJaWYoCUtUX2luaXQJKQorCXsKKwkJZm9yKCBpID0gMDsJaSA8CTI1NjsgaSsrICkKKwkJeworCQkJS1QwW2ldID0gUlQwWyBGU2JbaV0gXTsKKwkJCUtUMVtpXSA9IFJUMVsgRlNiW2ldIF07CisJCQlLVDJbaV0gPSBSVDJbIEZTYltpXSBdOworCQkJS1QzW2ldID0gUlQzWyBGU2JbaV0gXTsKKwkJfQorCisJCUtUX2luaXQJPSAwOworCX0KKworCVNLID0gY3R4LT5kcms7CisKKwkqU0srKyA9CSpSSysrOworCSpTSysrID0JKlJLKys7CisJKlNLKysgPQkqUksrKzsKKwkqU0srKyA9CSpSSysrOworCisJZm9yKCBpID0gMTsJaSA8CWN0eC0+bnI7IGkrKyApCisJeworCQlSSyAtPSA4OworCisJCSpTSysrID0JS1QwWyAodWludDgpICggKlJLID4+IDI0ICkgXSBeCisJCQkJS1QxWyAodWludDgpICggKlJLID4+IDE2ICkgXSBeCisJCQkJS1QyWyAodWludDgpICggKlJLID4+ICA4ICkgXSBeCisJCQkJS1QzWyAodWludDgpICggKlJLCQkgKSBdOyBSSysrOworCisJCSpTSysrID0JS1QwWyAodWludDgpICggKlJLID4+IDI0ICkgXSBeCisJCQkJS1QxWyAodWludDgpICggKlJLID4+IDE2ICkgXSBeCisJCQkJS1QyWyAodWludDgpICggKlJLID4+ICA4ICkgXSBeCisJCQkJS1QzWyAodWludDgpICggKlJLCQkgKSBdOyBSSysrOworCisJCSpTSysrID0JS1QwWyAodWludDgpICggKlJLID4+IDI0ICkgXSBeCisJCQkJS1QxWyAodWludDgpICggKlJLID4+IDE2ICkgXSBeCisJCQkJS1QyWyAodWludDgpICggKlJLID4+ICA4ICkgXSBeCisJCQkJS1QzWyAodWludDgpICggKlJLCQkgKSBdOyBSSysrOworCisJCSpTSysrID0JS1QwWyAodWludDgpICggKlJLID4+IDI0ICkgXSBeCisJCQkJS1QxWyAodWludDgpICggKlJLID4+IDE2ICkgXSBeCisJCQkJS1QyWyAodWludDgpICggKlJLID4+ICA4ICkgXSBeCisJCQkJS1QzWyAodWludDgpICggKlJLCQkgKSBdOyBSSysrOworCX0KKworCVJLIC09IDg7CisKKwkqU0srKyA9CSpSSysrOworCSpTSysrID0JKlJLKys7CisJKlNLKysgPQkqUksrKzsKKwkqU0srKyA9CSpSSysrOworCisJcmV0dXJuKAkwICk7Cit9CisKKy8qIEFFUyAxMjgtYml0IGJsb2NrIGVuY3J5cHRpb24Jcm91dGluZQkqLworCit2b2lkIHJ0bXBfYWVzX2VuY3J5cHQoYWVzX2NvbnRleHQgKmN0eCwgdWludDggaW5wdXRbMTZdLAl1aW50OCBvdXRwdXRbMTZdICkKK3sKKwl1aW50MzIgKlJLLAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTM7CisKKwlSSyA9IGN0eC0+ZXJrOworCUdFVF9VSU5UMzIoCVgwLAlpbnB1dCwJMCApOyBYMAlePSBSS1swXTsKKwlHRVRfVUlOVDMyKAlYMSwJaW5wdXQsCTQgKTsgWDEJXj0gUktbMV07CisJR0VUX1VJTlQzMigJWDIsCWlucHV0LAk4ICk7IFgyCV49IFJLWzJdOworCUdFVF9VSU5UMzIoCVgzLAlpbnB1dCwgMTIgKTsgWDMJXj0gUktbM107CisKKyNkZWZpbmUJQUVTX0ZST1VORChYMCxYMSxYMixYMyxZMCxZMSxZMixZMykJCVwKK3sJCQkJCQkJCQkJCQlcCisJUksgKz0gNDsJCQkJCQkJCQlcCisJCQkJCQkJCQkJCQlcCisJWDAgPSBSS1swXSBeIEZUMFsgKHVpbnQ4KSAoCVkwID4+IDI0ICkgXSBeCVwKKwkJCQkgRlQxWyAodWludDgpICgJWTEgPj4gMTYgKSBdIF4JXAorCQkJCSBGVDJbICh1aW50OCkgKAlZMiA+PiAgOCApIF0gXglcCisJCQkJIEZUM1sgKHVpbnQ4KSAoCVkzCQkgKSBdOwlcCisJCQkJCQkJCQkJCQlcCisJWDEgPSBSS1sxXSBeIEZUMFsgKHVpbnQ4KSAoCVkxID4+IDI0ICkgXSBeCVwKKwkJCQkgRlQxWyAodWludDgpICgJWTIgPj4gMTYgKSBdIF4JXAorCQkJCSBGVDJbICh1aW50OCkgKAlZMyA+PiAgOCApIF0gXglcCisJCQkJIEZUM1sgKHVpbnQ4KSAoCVkwCQkgKSBdOwlcCisJCQkJCQkJCQkJCQlcCisJWDIgPSBSS1syXSBeIEZUMFsgKHVpbnQ4KSAoCVkyID4+IDI0ICkgXSBeCVwKKwkJCQkgRlQxWyAodWludDgpICgJWTMgPj4gMTYgKSBdIF4JXAorCQkJCSBGVDJbICh1aW50OCkgKAlZMCA+PiAgOCApIF0gXglcCisJCQkJIEZUM1sgKHVpbnQ4KSAoCVkxCQkgKSBdOwlcCisJCQkJCQkJCQkJCQlcCisJWDMgPSBSS1szXSBeIEZUMFsgKHVpbnQ4KSAoCVkzID4+IDI0ICkgXSBeCVwKKwkJCQkgRlQxWyAodWludDgpICgJWTAgPj4gMTYgKSBdIF4JXAorCQkJCSBGVDJbICh1aW50OCkgKAlZMSA+PiAgOCApIF0gXglcCisJCQkJIEZUM1sgKHVpbnQ4KSAoCVkyCQkgKSBdOwlcCit9CisKKwlBRVNfRlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAsCVgxLAlYMiwJWDMgKTsJCS8qIHJvdW5kIDEgKi8KKwlBRVNfRlJPVU5EKAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTMgKTsJCS8qIHJvdW5kIDIgKi8KKwlBRVNfRlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAsCVgxLAlYMiwJWDMgKTsJCS8qIHJvdW5kIDMgKi8KKwlBRVNfRlJPVU5EKAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTMgKTsJCS8qIHJvdW5kIDQgKi8KKwlBRVNfRlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAsCVgxLAlYMiwJWDMgKTsJCS8qIHJvdW5kIDUgKi8KKwlBRVNfRlJPVU5EKAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTMgKTsJCS8qIHJvdW5kIDYgKi8KKwlBRVNfRlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAsCVgxLAlYMiwJWDMgKTsJCS8qIHJvdW5kIDcgKi8KKwlBRVNfRlJPVU5EKAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTMgKTsJCS8qIHJvdW5kIDggKi8KKwlBRVNfRlJPVU5EKAlZMCwJWTEsCVkyLAlZMywJWDAsCVgxLAlYMiwJWDMgKTsJCS8qIHJvdW5kIDkgKi8KKworCWlmKAljdHgtPm5yCT4gMTAgKQorCXsKKwkJQUVTX0ZST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CS8qIHJvdW5kIDEwCSovCisJCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkvKiByb3VuZCAxMQkqLworCX0KKworCWlmKAljdHgtPm5yCT4gMTIgKQorCXsKKwkJQUVTX0ZST1VORCgJWDAsCVgxLAlYMiwJWDMsCVkwLAlZMSwJWTIsCVkzICk7CS8qIHJvdW5kIDEyCSovCisJCUFFU19GUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkvKiByb3VuZCAxMwkqLworCX0KKworCS8qIGxhc3QJcm91bmQgKi8KKworCVJLICs9IDQ7CisKKwlYMCA9IFJLWzBdIF4gKCBGU2JbCSh1aW50OCkJKCBZMCA+PgkyNCApIF0gPDwgMjQgKSBeCisJCQkJICggRlNiWwkodWludDgpCSggWTEgPj4JMTYgKSBdIDw8IDE2ICkgXgorCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkyID4+CSA4ICkgXSA8PCAgOCApIF4KKwkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMwkgICApIF0JCSApOworCisJWDEgPSBSS1sxXSBeICggRlNiWwkodWludDgpCSggWTEgPj4JMjQgKSBdIDw8IDI0ICkgXgorCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkyID4+CTE2ICkgXSA8PCAxNiApIF4KKwkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMyA+PgkgOCApIF0gPDwgIDggKSBeCisJCQkJICggRlNiWwkodWludDgpCSggWTAJICAgKSBdCQkgKTsKKworCVgyID0gUktbMl0gXiAoIEZTYlsJKHVpbnQ4KQkoIFkyID4+CTI0ICkgXSA8PCAyNCApIF4KKwkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMyA+PgkxNiApIF0gPDwgMTYgKSBeCisJCQkJICggRlNiWwkodWludDgpCSggWTAgPj4JIDggKSBdIDw8ICA4ICkgXgorCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkxCSAgICkgXQkJICk7CisKKwlYMyA9IFJLWzNdIF4gKCBGU2JbCSh1aW50OCkJKCBZMyA+PgkyNCApIF0gPDwgMjQgKSBeCisJCQkJICggRlNiWwkodWludDgpCSggWTAgPj4JMTYgKSBdIDw8IDE2ICkgXgorCQkJCSAoIEZTYlsJKHVpbnQ4KQkoIFkxID4+CSA4ICkgXSA8PCAgOCApIF4KKwkJCQkgKCBGU2JbCSh1aW50OCkJKCBZMgkgICApIF0JCSApOworCisJUFVUX1VJTlQzMigJWDAsCW91dHB1dCwJIDAgKTsKKwlQVVRfVUlOVDMyKAlYMSwJb3V0cHV0LAkgNCApOworCVBVVF9VSU5UMzIoCVgyLAlvdXRwdXQsCSA4ICk7CisJUFVUX1VJTlQzMigJWDMsCW91dHB1dCwJMTIgKTsKK30KKworLyogQUVTIDEyOC1iaXQgYmxvY2sgZGVjcnlwdGlvbglyb3V0aW5lCSovCisKK3ZvaWQgcnRtcF9hZXNfZGVjcnlwdCggYWVzX2NvbnRleHQgKmN0eCwJdWludDggaW5wdXRbMTZdLCB1aW50OCBvdXRwdXRbMTZdICkKK3sKKwl1aW50MzIgKlJLLAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTM7CisKKwlSSyA9IGN0eC0+ZHJrOworCisJR0VUX1VJTlQzMigJWDAsCWlucHV0LAkwICk7IFgwCV49IFJLWzBdOworCUdFVF9VSU5UMzIoCVgxLAlpbnB1dCwJNCApOyBYMQlePSBSS1sxXTsKKwlHRVRfVUlOVDMyKAlYMiwJaW5wdXQsCTggKTsgWDIJXj0gUktbMl07CisJR0VUX1VJTlQzMigJWDMsCWlucHV0LCAxMiApOyBYMwlePSBSS1szXTsKKworI2RlZmluZQlBRVNfUlJPVU5EKFgwLFgxLFgyLFgzLFkwLFkxLFkyLFkzKQkJXAorewkJCQkJCQkJCQkJCVwKKwlSSyArPSA0OwkJCQkJCQkJCVwKKwkJCQkJCQkJCQkJCVwKKwlYMCA9IFJLWzBdIF4gUlQwWyAodWludDgpICgJWTAgPj4gMjQgKSBdIF4JXAorCQkJCSBSVDFbICh1aW50OCkgKAlZMyA+PiAxNiApIF0gXglcCisJCQkJIFJUMlsgKHVpbnQ4KSAoCVkyID4+ICA4ICkgXSBeCVwKKwkJCQkgUlQzWyAodWludDgpICgJWTEJCSApIF07CVwKKwkJCQkJCQkJCQkJCVwKKwlYMSA9IFJLWzFdIF4gUlQwWyAodWludDgpICgJWTEgPj4gMjQgKSBdIF4JXAorCQkJCSBSVDFbICh1aW50OCkgKAlZMCA+PiAxNiApIF0gXglcCisJCQkJIFJUMlsgKHVpbnQ4KSAoCVkzID4+ICA4ICkgXSBeCVwKKwkJCQkgUlQzWyAodWludDgpICgJWTIJCSApIF07CVwKKwkJCQkJCQkJCQkJCVwKKwlYMiA9IFJLWzJdIF4gUlQwWyAodWludDgpICgJWTIgPj4gMjQgKSBdIF4JXAorCQkJCSBSVDFbICh1aW50OCkgKAlZMSA+PiAxNiApIF0gXglcCisJCQkJIFJUMlsgKHVpbnQ4KSAoCVkwID4+ICA4ICkgXSBeCVwKKwkJCQkgUlQzWyAodWludDgpICgJWTMJCSApIF07CVwKKwkJCQkJCQkJCQkJCVwKKwlYMyA9IFJLWzNdIF4gUlQwWyAodWludDgpICgJWTMgPj4gMjQgKSBdIF4JXAorCQkJCSBSVDFbICh1aW50OCkgKAlZMiA+PiAxNiApIF0gXglcCisJCQkJIFJUMlsgKHVpbnQ4KSAoCVkxID4+ICA4ICkgXSBeCVwKKwkJCQkgUlQzWyAodWludDgpICgJWTAJCSApIF07CVwKK30KKworCUFFU19SUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgMSAqLworCUFFU19SUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkJLyogcm91bmQgMiAqLworCUFFU19SUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgMyAqLworCUFFU19SUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkJLyogcm91bmQgNCAqLworCUFFU19SUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgNSAqLworCUFFU19SUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkJLyogcm91bmQgNiAqLworCUFFU19SUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgNyAqLworCUFFU19SUk9VTkQoCVgwLAlYMSwJWDIsCVgzLAlZMCwJWTEsCVkyLAlZMyApOwkJLyogcm91bmQgOCAqLworCUFFU19SUk9VTkQoCVkwLAlZMSwJWTIsCVkzLAlYMCwJWDEsCVgyLAlYMyApOwkJLyogcm91bmQgOSAqLworCisJaWYoCWN0eC0+bnIJPiAxMCApCisJeworCQlBRVNfUlJPVU5EKAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTMgKTsJLyogcm91bmQgMTAJKi8KKwkJQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CS8qIHJvdW5kIDExCSovCisJfQorCisJaWYoCWN0eC0+bnIJPiAxMiApCisJeworCQlBRVNfUlJPVU5EKAlYMCwJWDEsCVgyLAlYMywJWTAsCVkxLAlZMiwJWTMgKTsJLyogcm91bmQgMTIJKi8KKwkJQUVTX1JST1VORCgJWTAsCVkxLAlZMiwJWTMsCVgwLAlYMSwJWDIsCVgzICk7CS8qIHJvdW5kIDEzCSovCisJfQorCisJLyogbGFzdAlyb3VuZCAqLworCisJUksgKz0gNDsKKworCVgwID0gUktbMF0gXiAoIFJTYlsJKHVpbnQ4KQkoIFkwID4+CTI0ICkgXSA8PCAyNCApIF4KKwkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMyA+PgkxNiApIF0gPDwgMTYgKSBeCisJCQkJICggUlNiWwkodWludDgpCSggWTIgPj4JIDggKSBdIDw8ICA4ICkgXgorCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkxCSAgICkgXQkJICk7CisKKwlYMSA9IFJLWzFdIF4gKCBSU2JbCSh1aW50OCkJKCBZMSA+PgkyNCApIF0gPDwgMjQgKSBeCisJCQkJICggUlNiWwkodWludDgpCSggWTAgPj4JMTYgKSBdIDw8IDE2ICkgXgorCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkzID4+CSA4ICkgXSA8PCAgOCApIF4KKwkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMgkgICApIF0JCSApOworCisJWDIgPSBSS1syXSBeICggUlNiWwkodWludDgpCSggWTIgPj4JMjQgKSBdIDw8IDI0ICkgXgorCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkxID4+CTE2ICkgXSA8PCAxNiApIF4KKwkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMCA+PgkgOCApIF0gPDwgIDggKSBeCisJCQkJICggUlNiWwkodWludDgpCSggWTMJICAgKSBdCQkgKTsKKworCVgzID0gUktbM10gXiAoIFJTYlsJKHVpbnQ4KQkoIFkzID4+CTI0ICkgXSA8PCAyNCApIF4KKwkJCQkgKCBSU2JbCSh1aW50OCkJKCBZMiA+PgkxNiApIF0gPDwgMTYgKSBeCisJCQkJICggUlNiWwkodWludDgpCSggWTEgPj4JIDggKSBdIDw8ICA4ICkgXgorCQkJCSAoIFJTYlsJKHVpbnQ4KQkoIFkwCSAgICkgXQkJICk7CisKKwlQVVRfVUlOVDMyKAlYMCwJb3V0cHV0LAkgMCApOworCVBVVF9VSU5UMzIoCVgxLAlvdXRwdXQsCSA0ICk7CisJUFVUX1VJTlQzMigJWDIsCW91dHB1dCwJIDggKTsKKwlQVVRfVUlOVDMyKAlYMywJb3V0cHV0LAkxMiApOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJU0hBMSBmdW5jdGlvbgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJSE1BQ19TSEExKAorCUlOCVVDSEFSCSp0ZXh0LAorCUlOCVVJTlQJdGV4dF9sZW4sCisJSU4JVUNIQVIJKmtleSwKKwlJTglVSU5UCWtleV9sZW4sCisJSU4JVUNIQVIJKmRpZ2VzdCkKK3sKKwlTSEFfQ1RYCWNvbnRleHQ7CisJVUNIQVIJa19pcGFkWzY1XTsgLyogaW5uZXIgcGFkZGluZyAtIGtleSBYT1JkIHdpdGggaXBhZAkqLworCVVDSEFSCWtfb3BhZFs2NV07IC8qIG91dGVyIHBhZGRpbmcgLSBrZXkgWE9SZCB3aXRoIG9wYWQJKi8KKwlJTlQJCWk7CisKKwkvLyBpZiBrZXkgaXMgbG9uZ2VyCXRoYW4gNjQJYnl0ZXMgcmVzZXQJaXQgdG8ga2V5PVNIQTEoa2V5KQorCWlmIChrZXlfbGVuCT4gNjQpCisJeworCQlTSEFfQ1RYCQkgdGN0eDsKKwkJU0hBSW5pdCgmdGN0eCk7CisJCVNIQVVwZGF0ZSgmdGN0eCwga2V5LCBrZXlfbGVuKTsKKwkJU0hBRmluYWwoJnRjdHgsCWtleSk7CisJCWtleV9sZW4JPSAyMDsKKwl9CisJTmRpc1plcm9NZW1vcnkoa19pcGFkLCBzaXplb2Yoa19pcGFkKSk7CisJTmRpc1plcm9NZW1vcnkoa19vcGFkLCBzaXplb2Yoa19vcGFkKSk7CisJTmRpc01vdmVNZW1vcnkoa19pcGFkLCBrZXksCWtleV9sZW4pOworCU5kaXNNb3ZlTWVtb3J5KGtfb3BhZCwga2V5LAlrZXlfbGVuKTsKKworCS8vIFhPUiBrZXkgd2l0aAlpcGFkIGFuZCBvcGFkIHZhbHVlcworCWZvcgkoaSA9IDA7CWkgPAk2NDsJaSsrKQorCXsKKwkJa19pcGFkW2ldIF49IDB4MzY7CisJCWtfb3BhZFtpXSBePSAweDVjOworCX0KKworCS8vIHBlcmZvcm0gaW5uZXIgU0hBMQorCVNIQUluaXQoJmNvbnRleHQpOyAJCQkJCQkvKiBpbml0IGNvbnRleHQgZm9yIDFzdCBwYXNzICovCisJU0hBVXBkYXRlKCZjb250ZXh0LAlrX2lwYWQsCTY0KTsJCS8qCXN0YXJ0IHdpdGggaW5uZXIgcGFkICovCisJU0hBVXBkYXRlKCZjb250ZXh0LAl0ZXh0LCB0ZXh0X2xlbik7CS8qCXRoZW4gdGV4dCBvZiBkYXRhZ3JhbSAqLworCVNIQUZpbmFsKCZjb250ZXh0LCBkaWdlc3QpOwkJCQkvKiBmaW5pc2ggdXAgMXN0IHBhc3MgKi8KKworCS8vcGVyZm9ybSBvdXRlcglTSEExCisJU0hBSW5pdCgmY29udGV4dCk7CQkJCQkvKiBpbml0IGNvbnRleHQgZm9yIDJuZCBwYXNzICovCisJU0hBVXBkYXRlKCZjb250ZXh0LAlrX29wYWQsCTY0KTsJLyoJc3RhcnQgd2l0aCBvdXRlciBwYWQgKi8KKwlTSEFVcGRhdGUoJmNvbnRleHQsCWRpZ2VzdCwJMjApOwkvKgl0aGVuIHJlc3VsdHMgb2YJMXN0CWhhc2ggKi8KKwlTSEFGaW5hbCgmY29udGV4dCwgZGlnZXN0KTsJCQkvKiBmaW5pc2ggdXAgMm5kIHBhc3MgKi8KKworfQorCisvKgorKiBGKFAsIFMsIGMsIGkpID0gVTEgeG9yIFUyIHhvciAuLi4gVWMKKyogVTEgPSBQUkYoUCwgUyB8fCBJbnQoaSkpCisqIFUyID0gUFJGKFAsIFUxKQorKiBVYyA9IFBSRihQLCBVYy0xKQorKi8KKwordm9pZCBGKGNoYXIgKnBhc3N3b3JkLCB1bnNpZ25lZCBjaGFyICpzc2lkLCBpbnQgc3NpZGxlbmd0aCwgaW50IGl0ZXJhdGlvbnMsIGludCBjb3VudCwgdW5zaWduZWQgY2hhciAqb3V0cHV0KQoreworICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0WzM2XSwgZGlnZXN0MVtTSEFfRElHRVNUX0xFTl07CisgICAgaW50IGksIGo7CisKKyAgICAvKiBVMSA9IFBSRihQLCBTIHx8IGludChpKSkgKi8KKyAgICBtZW1jcHkoZGlnZXN0LCBzc2lkLCBzc2lkbGVuZ3RoKTsKKyAgICBkaWdlc3Rbc3NpZGxlbmd0aF0gPSAodW5zaWduZWQgY2hhcikoKGNvdW50Pj4yNCkgJiAweGZmKTsKKyAgICBkaWdlc3Rbc3NpZGxlbmd0aCsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoY291bnQ+PjE2KSAmIDB4ZmYpOworICAgIGRpZ2VzdFtzc2lkbGVuZ3RoKzJdID0gKHVuc2lnbmVkIGNoYXIpKChjb3VudD4+OCkgJiAweGZmKTsKKyAgICBkaWdlc3Rbc3NpZGxlbmd0aCszXSA9ICh1bnNpZ25lZCBjaGFyKShjb3VudCAmIDB4ZmYpOworICAgIEhNQUNfU0hBMShkaWdlc3QsIHNzaWRsZW5ndGgrNCwgKHVuc2lnbmVkIGNoYXIqKSBwYXNzd29yZCwgKGludCkgc3RybGVuKHBhc3N3b3JkKSwgZGlnZXN0MSk7IC8vIGZvciBXUEEgdXBkYXRlCisKKyAgICAvKiBvdXRwdXQgPSBVMSAqLworICAgIG1lbWNweShvdXRwdXQsIGRpZ2VzdDEsIFNIQV9ESUdFU1RfTEVOKTsKKworICAgIGZvciAoaSA9IDE7IGkgPCBpdGVyYXRpb25zOyBpKyspCisgICAgeworICAgICAgICAvKiBVbiA9IFBSRihQLCBVbi0xKSAqLworICAgICAgICBITUFDX1NIQTEoZGlnZXN0MSwgU0hBX0RJR0VTVF9MRU4sICh1bnNpZ25lZCBjaGFyKikgcGFzc3dvcmQsIChpbnQpIHN0cmxlbihwYXNzd29yZCksIGRpZ2VzdCk7IC8vIGZvciBXUEEgdXBkYXRlCisgICAgICAgIG1lbWNweShkaWdlc3QxLCBkaWdlc3QsIFNIQV9ESUdFU1RfTEVOKTsKKworICAgICAgICAvKiBvdXRwdXQgPSBvdXRwdXQgeG9yIFVuICovCisgICAgICAgIGZvciAoaiA9IDA7IGogPCBTSEFfRElHRVNUX0xFTjsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRwdXRbal0gXj0gZGlnZXN0W2pdOworICAgICAgICB9CisgICAgfQorfQorLyoKKyogcGFzc3dvcmQgLSBhc2NpaSBzdHJpbmcgdXAgdG8gNjMgY2hhcmFjdGVycyBpbiBsZW5ndGgKKyogc3NpZCAtIG9jdGV0IHN0cmluZyB1cCB0byAzMiBvY3RldHMKKyogc3NpZGxlbmd0aCAtIGxlbmd0aCBvZiBzc2lkIGluIG9jdGV0cworKiBvdXRwdXQgbXVzdCBiZSA0MCBvY3RldHMgaW4gbGVuZ3RoIGFuZCBvdXRwdXRzIDI1NiBiaXRzIG9mIGtleQorKi8KK2ludCBQYXNzd29yZEhhc2goY2hhciAqcGFzc3dvcmQsIHVuc2lnbmVkIGNoYXIgKnNzaWQsIGludCBzc2lkbGVuZ3RoLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQpCit7CisgICAgaWYgKChzdHJsZW4ocGFzc3dvcmQpID4gNjMpIHx8IChzc2lkbGVuZ3RoID4gMzIpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEYocGFzc3dvcmQsIHNzaWQsIHNzaWRsZW5ndGgsIDQwOTYsIDEsIG91dHB1dCk7CisgICAgRihwYXNzd29yZCwgc3NpZCwgc3NpZGxlbmd0aCwgNDA5NiwgMiwgJm91dHB1dFtTSEFfRElHRVNUX0xFTl0pOworICAgIHJldHVybiAxOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL21sbWUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL21sbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmZiZmEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vbWxtZS5jCkBAIC0wLDAgKzEsOTEzNiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwltbG1lLmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKb2huIENoYW5nCTIwMDQtMDgtMjUJCU1vZGlmeSBmcm9tIFJUMjUwMCBjb2RlIGJhc2UKKwlKb2huIENoYW5nCTIwMDQtMDktMDYJCW1vZGlmaWVkIGZvciBSVDI2MDAKKyovCisKKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworVUNIQVIJQ0lTQ09fT1VJW10gPSB7MHgwMCwgMHg0MCwgMHg5Nn07CisKK1VDSEFSCVdQQV9PVUlbXSA9IHsweDAwLCAweDUwLCAweGYyLCAweDAxfTsKK1VDSEFSCVJTTl9PVUlbXSA9IHsweDAwLCAweDBmLCAweGFjfTsKK1VDSEFSCVdBUElfT1VJW10gPSB7MHgwMCwgMHgxNCwgMHg3Mn07CitVQ0hBUiAgIFdNRV9JTkZPX0VMRU1bXSAgPSB7MHgwMCwgMHg1MCwgMHhmMiwgMHgwMiwgMHgwMCwgMHgwMX07CitVQ0hBUiAgIFdNRV9QQVJNX0VMRU1bXSA9IHsweDAwLCAweDUwLCAweGYyLCAweDAyLCAweDAxLCAweDAxfTsKK1VDSEFSCUNjeDJRb3NJbmZvW10gPSB7MHgwMCwgMHg0MCwgMHg5NiwgMHgwNH07CitVQ0hBUiAgIFJBTElOS19PVUlbXSAgPSB7MHgwMCwgMHgwYywgMHg0M307CitVQ0hBUiAgIEJST0FEQ09NX09VSVtdICA9IHsweDAwLCAweDkwLCAweDRjfTsKK1VDSEFSICAgV1BTX09VSVtdID0gezB4MDAsIDB4NTAsIDB4ZjIsIDB4MDR9OworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorVUNIQVIJUFJFX05fSFRfT1VJW10JPSB7MHgwMCwgMHg5MCwgMHg0Y307CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZVtdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MTEsIDB4MDAsICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDAwLCAgMCwgNDAsIDEwMSwKKyAgICAweDAxLCAweDAwLCAgMSwgNDAsIDUwLAorICAgIDB4MDIsIDB4MDAsICAyLCAzNSwgNDUsCisgICAgMHgwMywgMHgwMCwgIDMsIDIwLCA0NSwKKyAgICAweDA0LCAweDIxLCAgMCwgMzAsIDUwLAorICAgIDB4MDUsIDB4MjEsICAxLCAyMCwgNTAsCisgICAgMHgwNiwgMHgyMSwgIDIsIDIwLCA1MCwKKyAgICAweDA3LCAweDIxLCAgMywgMTUsIDUwLAorICAgIDB4MDgsIDB4MjEsICA0LCAxNSwgMzAsCisgICAgMHgwOSwgMHgyMSwgIDUsIDEwLCAyNSwKKyAgICAweDBhLCAweDIxLCAgNiwgIDgsIDI1LAorICAgIDB4MGIsIDB4MjEsICA3LCAgOCwgMjUsCisgICAgMHgwYywgMHgyMCwgMTIsICAxNSwgMzAsCisgICAgMHgwZCwgMHgyMCwgMTMsICA4LCAyMCwKKyAgICAweDBlLCAweDIwLCAxNCwgIDgsIDIwLAorICAgIDB4MGYsIDB4MjAsIDE1LCAgOCwgMjUsCisgICAgMHgxMCwgMHgyMiwgMTUsICA4LCAyNSwKKyAgICAweDExLCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MTIsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxMywgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDE0LCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MTUsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxNiwgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDE3LCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MTgsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxOSwgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDFhLCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MWIsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxYywgMHgwMCwgIDAsICAwLCAgMCwKKyAgICAweDFkLCAweDAwLCAgMCwgIDAsICAwLAorICAgIDB4MWUsIDB4MDAsICAwLCAgMCwgIDAsCisgICAgMHgxZiwgMHgwMCwgIDAsICAwLCAgMCwKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExQltdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MDQsIDB4MDMsICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDAwLCAgMCwgNDAsIDEwMSwKKyAgICAweDAxLCAweDAwLCAgMSwgNDAsIDUwLAorICAgIDB4MDIsIDB4MDAsICAyLCAzNSwgNDUsCisgICAgMHgwMywgMHgwMCwgIDMsIDIwLCA0NSwKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExQkdbXSA9IHsKKy8vIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93bgkJLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDBhLCAweDAwLCAgMCwgIDAsICAwLAkJCQkJCS8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgwMCwgIDAsIDQwLCAxMDEsCisgICAgMHgwMSwgMHgwMCwgIDEsIDQwLCA1MCwKKyAgICAweDAyLCAweDAwLCAgMiwgMzUsIDQ1LAorICAgIDB4MDMsIDB4MDAsICAzLCAyMCwgNDUsCisgICAgMHgwNCwgMHgxMCwgIDIsIDIwLCAzNSwKKyAgICAweDA1LCAweDEwLCAgMywgMTYsIDM1LAorICAgIDB4MDYsIDB4MTAsICA0LCAxMCwgMjUsCisgICAgMHgwNywgMHgxMCwgIDUsIDE2LCAyNSwKKyAgICAweDA4LCAweDEwLCAgNiwgMTAsIDI1LAorICAgIDB4MDksIDB4MTAsICA3LCAxMCwgMTMsCit9OworCitVQ0hBUiBSYXRlU3dpdGNoVGFibGUxMUdbXSA9IHsKKy8vIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93bgkJLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDA4LCAweDAwLCAgMCwgIDAsICAwLAkJCQkJCS8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgxMCwgIDAsIDIwLCAxMDEsCisgICAgMHgwMSwgMHgxMCwgIDEsIDIwLCAzNSwKKyAgICAweDAyLCAweDEwLCAgMiwgMjAsIDM1LAorICAgIDB4MDMsIDB4MTAsICAzLCAxNiwgMzUsCisgICAgMHgwNCwgMHgxMCwgIDQsIDEwLCAyNSwKKyAgICAweDA1LCAweDEwLCAgNSwgMTYsIDI1LAorICAgIDB4MDYsIDB4MTAsICA2LCAxMCwgMjUsCisgICAgMHgwNywgMHgxMCwgIDcsIDEwLCAxMywKK307CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExTjFTW10gPSB7CisvLyBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24JCS8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpCisgICAgMHgwOSwgMHgwMCwgIDAsICAwLCAgMCwJCQkJCQkvLyBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbgorICAgIDB4MDAsIDB4MjEsICAwLCAzMCwgMTAxLAorICAgIDB4MDEsIDB4MjEsICAxLCAyMCwgNTAsCisgICAgMHgwMiwgMHgyMSwgIDIsIDIwLCA1MCwKKyAgICAweDAzLCAweDIxLCAgMywgMTUsIDUwLAorICAgIDB4MDQsIDB4MjEsICA0LCAxNSwgMzAsCisgICAgMHgwNSwgMHgyMSwgIDUsIDEwLCAyNSwKKyAgICAweDA2LCAweDIxLCAgNiwgIDgsIDE0LAorICAgIDB4MDcsIDB4MjEsICA3LCAgOCwgMTQsCisgICAgMHgwOCwgMHgyMywgIDcsICA4LCAxNCwKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExTjJTW10gPSB7CisvLyBJdGVtIE5vLiAgIE1vZGUgICBDdXJyLU1DUyAgIFRyYWluVXAgICBUcmFpbkRvd24JCS8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpCisgICAgMHgwYSwgMHgwMCwgIDAsICAwLCAgMCwgICAgICAvLyBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbgorICAgIDB4MDAsIDB4MjEsICAwLCAzMCwgMTAxLAorICAgIDB4MDEsIDB4MjEsICAxLCAyMCwgNTAsCisgICAgMHgwMiwgMHgyMSwgIDIsIDIwLCA1MCwKKyAgICAweDAzLCAweDIxLCAgMywgMTUsIDUwLAorICAgIDB4MDQsIDB4MjEsICA0LCAxNSwgMzAsCisgICAgMHgwNSwgMHgyMCwgMTIsICAxNSwgMzAsCisgICAgMHgwNiwgMHgyMCwgMTMsICA4LCAyMCwKKyAgICAweDA3LCAweDIwLCAxNCwgIDgsIDIwLAorICAgIDB4MDgsIDB4MjAsIDE1LCAgOCwgMjUsCisgICAgMHgwOSwgMHgyMiwgMTUsICA4LCAyNSwKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExTjNTW10gPSB7CisvLyBJdGVtIE5vLglNb2RlCUN1cnItTUNTCVRyYWluVXAJVHJhaW5Eb3duCS8vIE1vZGUtIEJpdDA6IFNUQkMsIEJpdDE6IFNob3J0IEdJLCBCaXQ0LDU6IE1vZGUoMDpDQ0ssIDE6T0ZETSwgMjpIVCBNaXgsIDM6SFQgR0YpCisgICAgMHgwYSwgMHgwMCwgIDAsICAwLCAgMCwgICAgICAvLyBJbml0aWFsIHVzZWQgaXRlbSBhZnRlciBhc3NvY2lhdGlvbgorICAgIDB4MDAsIDB4MjEsICAwLCAzMCwgMTAxLAorICAgIDB4MDEsIDB4MjEsICAxLCAyMCwgNTAsCisgICAgMHgwMiwgMHgyMSwgIDIsIDIwLCA1MCwKKyAgICAweDAzLCAweDIxLCAgMywgMTUsIDUwLAorICAgIDB4MDQsIDB4MjEsICA0LCAxNSwgMzAsCisgICAgMHgwNSwgMHgyMCwgMTIsICAxNSwgMzAsCisgICAgMHgwNiwgMHgyMCwgMTMsICA4LCAyMCwKKyAgICAweDA3LCAweDIwLCAxNCwgIDgsIDIwLAorICAgIDB4MDgsIDB4MjAsIDE1LCAgOCwgMjUsCisgICAgMHgwOSwgMHgyMiwgMTUsICA4LCAyNSwKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbXSA9IHsKKy8vIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93bgkJLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDBiLCAweDA5LCAgMCwgIDAsICAwLAkJCQkJCS8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgyMSwgIDAsIDMwLCAxMDEsCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA1LCAweDIxLCAgNSwgMTUsIDMwLAorICAgIDB4MDYsIDB4MjAsIDEyLCAgMTUsIDMwLAorICAgIDB4MDcsIDB4MjAsIDEzLCAgOCwgMjAsCisgICAgMHgwOCwgMHgyMCwgMTQsICA4LCAyMCwKKyAgICAweDA5LCAweDIwLCAxNSwgIDgsIDI1LAorICAgIDB4MGEsIDB4MjIsIDE1LCAgOCwgMjUsCit9OworCitVQ0hBUiBSYXRlU3dpdGNoVGFibGUxMU4zU0ZvckFCYW5kW10gPSB7IC8vIDMqMworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGIsIDB4MDksICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDIxLCAgMCwgMzAsIDEwMSwKKyAgICAweDAxLCAweDIxLCAgMSwgMjAsIDUwLAorICAgIDB4MDIsIDB4MjEsICAyLCAyMCwgNTAsCisgICAgMHgwMywgMHgyMSwgIDMsIDE1LCA1MCwKKyAgICAweDA0LCAweDIxLCAgNCwgMTUsIDMwLAorICAgIDB4MDUsIDB4MjEsICA1LCAxNSwgMzAsCisgICAgMHgwNiwgMHgyMCwgMTIsICAxNSwgMzAsCisgICAgMHgwNywgMHgyMCwgMTMsICA4LCAyMCwKKyAgICAweDA4LCAweDIwLCAxNCwgIDgsIDIwLAorICAgIDB4MDksIDB4MjAsIDE1LCAgOCwgMjUsCisgICAgMHgwYSwgMHgyMiwgMTUsICA4LCAyNSwKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExQkdOMVNbXSA9IHsKKy8vIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93bgkJLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDBkLCAweDAwLCAgMCwgIDAsICAwLAkJCQkJCS8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgwMCwgIDAsIDQwLCAxMDEsCisgICAgMHgwMSwgMHgwMCwgIDEsIDQwLCA1MCwKKyAgICAweDAyLCAweDAwLCAgMiwgMzUsIDQ1LAorICAgIDB4MDMsIDB4MDAsICAzLCAyMCwgNDUsCisgICAgMHgwNCwgMHgyMSwgIDAsIDMwLDEwMSwJLy81MAorICAgIDB4MDUsIDB4MjEsICAxLCAyMCwgNTAsCisgICAgMHgwNiwgMHgyMSwgIDIsIDIwLCA1MCwKKyAgICAweDA3LCAweDIxLCAgMywgMTUsIDUwLAorICAgIDB4MDgsIDB4MjEsICA0LCAxNSwgMzAsCisgICAgMHgwOSwgMHgyMSwgIDUsIDEwLCAyNSwKKyAgICAweDBhLCAweDIxLCAgNiwgIDgsIDE0LAorICAgIDB4MGIsIDB4MjEsICA3LCAgOCwgMTQsCisJMHgwYywgMHgyMywgIDcsICA4LCAxNCwKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNbXSA9IHsKKy8vIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93bgkJLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDBhLCAweDAwLCAgMCwgIDAsICAwLAkJCQkJCS8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgyMSwgIDAsIDMwLDEwMSwJLy81MAorICAgIDB4MDEsIDB4MjEsICAxLCAyMCwgNTAsCisgICAgMHgwMiwgMHgyMSwgIDIsIDIwLCA1MCwKKyAgICAweDAzLCAweDIxLCAgMywgMTUsIDUwLAorICAgIDB4MDQsIDB4MjEsICA0LCAxNSwgMzAsCisgICAgMHgwNSwgMHgyMCwgMTIsIDE1LCAzMCwKKyAgICAweDA2LCAweDIwLCAxMywgIDgsIDIwLAorICAgIDB4MDcsIDB4MjAsIDE0LCAgOCwgMjAsCisgICAgMHgwOCwgMHgyMCwgMTUsICA4LCAyNSwKKyAgICAweDA5LCAweDIyLCAxNSwgIDgsIDI1LAorfTsKKworVUNIQVIgUmF0ZVN3aXRjaFRhYmxlMTFCR04zU1tdID0geyAvLyAzKjMKKy8vIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93bgkJLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDBhLCAweDAwLCAgMCwgIDAsICAwLAkJCQkJCS8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgyMSwgIDAsIDMwLDEwMSwJLy81MAorICAgIDB4MDEsIDB4MjEsICAxLCAyMCwgNTAsCisgICAgMHgwMiwgMHgyMSwgIDIsIDIwLCA1MCwKKyAgICAweDAzLCAweDIxLCAgMywgMjAsIDUwLAorICAgIDB4MDQsIDB4MjEsICA0LCAxNSwgNTAsCisjaWYgMQorICAgIDB4MDUsIDB4MjAsIDIwLCAxNSwgMzAsCisgICAgMHgwNiwgMHgyMCwgMjEsICA4LCAyMCwKKyAgICAweDA3LCAweDIwLCAyMiwgIDgsIDIwLAorICAgIDB4MDgsIDB4MjAsIDIzLCAgOCwgMjUsCisgICAgMHgwOSwgMHgyMiwgMjMsICA4LCAyNSwKKyNlbHNlIC8vIGZvciBSVDI4NjAgMiozIHRlc3QKKyAgICAweDA1LCAweDIwLCAxMiwgMTUsIDMwLAorICAgIDB4MDYsIDB4MjAsIDEzLCAgOCwgMjAsCisgICAgMHgwNywgMHgyMCwgMTQsICA4LCAyMCwKKyAgICAweDA4LCAweDIwLCAxNSwgIDgsIDI1LAorICAgIDB4MDksIDB4MjIsIDE1LCAgOCwgMjUsCisjZW5kaWYKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNGb3JBQmFuZFtdID0geworLy8gSXRlbSBOby4gICBNb2RlICAgQ3Vyci1NQ1MgICBUcmFpblVwICAgVHJhaW5Eb3duCQkvLyBNb2RlLSBCaXQwOiBTVEJDLCBCaXQxOiBTaG9ydCBHSSwgQml0NCw1OiBNb2RlKDA6Q0NLLCAxOk9GRE0sIDI6SFQgTWl4LCAzOkhUIEdGKQorICAgIDB4MGIsIDB4MDksICAwLCAgMCwgIDAsCQkJCQkJLy8gSW5pdGlhbCB1c2VkIGl0ZW0gYWZ0ZXIgYXNzb2NpYXRpb24KKyAgICAweDAwLCAweDIxLCAgMCwgMzAsMTAxLAkvLzUwCisgICAgMHgwMSwgMHgyMSwgIDEsIDIwLCA1MCwKKyAgICAweDAyLCAweDIxLCAgMiwgMjAsIDUwLAorICAgIDB4MDMsIDB4MjEsICAzLCAxNSwgNTAsCisgICAgMHgwNCwgMHgyMSwgIDQsIDE1LCAzMCwKKyAgICAweDA1LCAweDIxLCAgNSwgMTUsIDMwLAorICAgIDB4MDYsIDB4MjAsIDEyLCAxNSwgMzAsCisgICAgMHgwNywgMHgyMCwgMTMsICA4LCAyMCwKKyAgICAweDA4LCAweDIwLCAxNCwgIDgsIDIwLAorICAgIDB4MDksIDB4MjAsIDE1LCAgOCwgMjUsCisgICAgMHgwYSwgMHgyMiwgMTUsICA4LCAyNSwKK307CisKK1VDSEFSIFJhdGVTd2l0Y2hUYWJsZTExQkdOM1NGb3JBQmFuZFtdID0geyAvLyAzKjMKKy8vIEl0ZW0gTm8uICAgTW9kZSAgIEN1cnItTUNTICAgVHJhaW5VcCAgIFRyYWluRG93bgkJLy8gTW9kZS0gQml0MDogU1RCQywgQml0MTogU2hvcnQgR0ksIEJpdDQsNTogTW9kZSgwOkNDSywgMTpPRkRNLCAyOkhUIE1peCwgMzpIVCBHRikKKyAgICAweDBjLCAweDA5LCAgMCwgIDAsICAwLAkJCQkJCS8vIEluaXRpYWwgdXNlZCBpdGVtIGFmdGVyIGFzc29jaWF0aW9uCisgICAgMHgwMCwgMHgyMSwgIDAsIDMwLDEwMSwJLy81MAorICAgIDB4MDEsIDB4MjEsICAxLCAyMCwgNTAsCisgICAgMHgwMiwgMHgyMSwgIDIsIDIwLCA1MCwKKyAgICAweDAzLCAweDIxLCAgMywgMTUsIDUwLAorICAgIDB4MDQsIDB4MjEsICA0LCAxNSwgMzAsCisgICAgMHgwNSwgMHgyMSwgIDUsIDE1LCAzMCwKKyAgICAweDA2LCAweDIxLCAxMiwgMTUsIDMwLAorICAgIDB4MDcsIDB4MjAsIDIwLCAxNSwgMzAsCisgICAgMHgwOCwgMHgyMCwgMjEsICA4LCAyMCwKKyAgICAweDA5LCAweDIwLCAyMiwgIDgsIDIwLAorICAgIDB4MGEsIDB4MjAsIDIzLCAgOCwgMjUsCisgICAgMHgwYiwgMHgyMiwgMjMsICA4LCAyNSwKK307CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1BVQ0hBUiBSZWFzb25TdHJpbmdbXSA9IHsKKwkvKiAwICAqLwkgIlJlc2VydmVkIiwKKwkvKiAxICAqLwkgIlVuc3BlY2lmaWVkIFJlYXNvbiIsCisJLyogMiAgKi8JICJQcmV2aW91cyBBdXRoIG5vIGxvbmdlciB2YWxpZCIsCisJLyogMyAgKi8JICJTVEEgaXMgbGVhdmluZyAvIGhhcyBsZWZ0IiwKKwkvKiA0ICAqLwkgIkRJUy1BU1NPQyBkdWUgdG8gaW5hY3Rpdml0eSIsCisJLyogNSAgKi8JICJBUCB1bmFibGUgdG8gaGFubGUgYWxsIGFzc29jaWF0aW9ucyIsCisJLyogNiAgKi8JICJjbGFzcyAyIGVycm9yIiwKKwkvKiA3ICAqLwkgImNsYXNzIDMgZXJyb3IiLAorCS8qIDggICovCSAiU1RBIGlzIGxlYXZpbmcgLyBoYXMgbGVmdCIsCisJLyogOSAgKi8JICJyZXF1aXJlIGF1dGggYmVmb3JlIGFzc29jL3JlLWFzc29jIiwKKwkvKiAxMCAqLwkgIlJlc2VydmVkIiwKKwkvKiAxMSAqLwkgIlJlc2VydmVkIiwKKwkvKiAxMiAqLwkgIlJlc2VydmVkIiwKKwkvKiAxMyAqLwkgImludmFsaWQgSUUiLAorCS8qIDE0ICovCSAiTUlDIGVycm9yIiwKKwkvKiAxNSAqLwkgIjQtd2F5IGhhbmRzaGFrZSB0aW1lb3V0IiwKKwkvKiAxNiAqLwkgIjItd2F5IChncm91cCBrZXkpIGhhbmRzaGFrZSB0aW1lb3V0IiwKKwkvKiAxNyAqLwkgIjQtd2F5IGhhbmRzaGFrZSBJRSBkaWZmIGFtb25nIEFzc29zUmVxL1JzcC9CZWFjb24iLAorCS8qIDE4ICovCit9OworCitleHRlcm4gVUNIQVIJIE9mZG1SYXRlVG9SeHdpTUNTW107CisvLyBzaW5jZSBSVDYxIGhhcyBiZXR0ZXIgUlggc2Vuc2liaWxpdHksIHdlIGhhdmUgdG8gbGltaXQgVFggQUNLIHJhdGUgbm90IHRvIGV4Y2VlZCBvdXIgbm9ybWFsIGRhdGEgVFggcmF0ZS4KKy8vIG90aGVyd2lzZSB0aGUgV0xBTiBwZWVyIG1heSBub3QgYmUgYWJsZSB0byByZWNlaXZlIHRoZSBBQ0sgdGh1cyBkb3duZ3JhZGUgaXRzIGRhdGEgVFggcmF0ZQorVUxPTkcgQmFzaWNSYXRlTWFza1sxMl0JCQkJPSB7MHhmZmZmZjAwMSAvKiAxLU1icHMgKi8sIDB4ZmZmZmYwMDMgLyogMiBNYnBzICovLCAweGZmZmZmMDA3IC8qIDUuNSAqLywgMHhmZmZmZjAwZiAvKiAxMSAqLywKKwkJCQkJCQkJCSAgMHhmZmZmZjAxZiAvKiA2ICovCSAsIDB4ZmZmZmYwM2YgLyogOSAqLwkgICwgMHhmZmZmZjA3ZiAvKiAxMiAqLyAsIDB4ZmZmZmYwZmYgLyogMTggKi8sCisJCQkJCQkJCQkgIDB4ZmZmZmYxZmYgLyogMjQgKi8JICwgMHhmZmZmZjNmZiAvKiAzNiAqLwkgICwgMHhmZmZmZjdmZiAvKiA0OCAqLyAsIDB4ZmZmZmZmZmYgLyogNTQgKi99OworCitVQ0hBUiBNVUxUSUNBU1RfQUREUltNQUNfQUREUl9MRU5dID0gezB4MSwgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OworVUNIQVIgQlJPQURDQVNUX0FERFJbTUFDX0FERFJfTEVOXSA9IHsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKK1VDSEFSIFpFUk9fTUFDX0FERFJbTUFDX0FERFJfTEVOXSAgPSB7MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CisKKy8vIGUuZy4gUnNzaVNhZmVMZXZlbEZvclR4UmF0ZVtSQVRFXzM2XSIgbWVhbnMgaWYgdGhlIGN1cnJlbnQgUlNTSSBpcyBncmVhdGVyIHRoYW4KKy8vCQl0aGlzIHZhbHVlLCB0aGVuIGl0J3MgcXVhcmFudGVlZCBjYXBhYmxlIG9mIG9wZXJhdGluZyBpbiAzNiBtYnBzIFRYIHJhdGUgaW4KKy8vCQljbGVhbiBlbnZpcm9ubWVudC4KKy8vCQkJCQkJCQkgIFR4UmF0ZTogMSAgIDIgICA1LjUJMTEJIDYJICA5ICAgIDEyCTE4CSAyNCAgIDM2ICAgNDgJNTQJIDcyICAxMDAKK0NIQVIgUnNzaVNhZmVMZXZlbEZvclR4UmF0ZVtdID17ICAtOTIsIC05MSwgLTkwLCAtODcsIC04OCwgLTg2LCAtODUsIC04MywgLTgxLCAtNzgsIC03MiwgLTcxLCAtNDAsIC00MCB9OworCitVQ0hBUiAgUmF0ZUlkVG9NYnBzW10JID0geyAxLCAyLCA1LCAxMSwgNiwgOSwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA1NCwgNzIsIDEwMH07CitVU0hPUlQgUmF0ZUlkVG81MDBLYnBzW10gPSB7IDIsIDQsIDExLCAyMiwgMTIsIDE4LCAyNCwgMzYsIDQ4LCA3MiwgOTYsIDEwOCwgMTQ0LCAyMDB9OworCitVQ0hBUiAgU3NpZEllCSA9IElFX1NTSUQ7CitVQ0hBUiAgU3VwUmF0ZUllID0gSUVfU1VQUF9SQVRFUzsKK1VDSEFSICBFeHRSYXRlSWUgPSBJRV9FWFRfU1VQUF9SQVRFUzsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1VDSEFSICBIdENhcEllID0gSUVfSFRfQ0FQOworVUNIQVIgIEFkZEh0SW5mb0llID0gSUVfQUREX0hUOworVUNIQVIgIE5ld0V4dENoYW5JZSA9IElFX1NFQ09OREFSWV9DSF9PRkZTRVQ7CisjaWZkZWYgRE9UMTFOX0RSQUZUMworVUNIQVIgIEV4dEh0Q2FwSWUgPSBJRV9FWFRfQ0FQQUJJTElUWTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCitVQ0hBUiAgRXJwSWUJID0gSUVfRVJQOworVUNIQVIgIERzSWUgCSA9IElFX0RTX1BBUk07CitVQ0hBUiAgVGltSWUJID0gSUVfVElNOworVUNIQVIgIFdwYUllCSA9IElFX1dQQTsKK1VDSEFSICBXcGEySWUJID0gSUVfV1BBMjsKK1VDSEFSICBJYnNzSWUJID0gSUVfSUJTU19QQVJNOworVUNIQVIgIENjeDJJZQkgPSBJRV9DQ1hfVjI7CitVQ0hBUiAgV2FwaUllCSA9IElFX1dBUEk7CisKK2V4dGVybiBVQ0hBUglXUEFfT1VJW107CisKK1VDSEFSCVNFU19PVUlbXSA9IHsweDAwLCAweDkwLCAweDRjfTsKKworVUNIQVIJWmVyb1NzaWRbMzJdID0gezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH07CisKKy8vIFJlc2V0IHRoZSBSRklDIHNldHRpbmcgdG8gbmV3IHNlcmllcworUlRNUF9SRl9SRUdTIFJGMjg1MFJlZ1RhYmxlW10gPSB7CisvLwkJY2gJIFIxIAkJIFIyIAkJIFIzKFRYMH40PTApIFI0CisJCXsxLCAgMHg5ODQwMmVjYywgMHg5ODRjMDc4NiwgMHg5ODE2YjQ1NSwgMHg5ODAwNTEwYn0sCisJCXsyLCAgMHg5ODQwMmVjYywgMHg5ODRjMDc4NiwgMHg5ODE2OGE1NSwgMHg5ODAwNTE5Zn0sCisJCXszLCAgMHg5ODQwMmVjYywgMHg5ODRjMDc4YSwgMHg5ODE2OGE1NSwgMHg5ODAwNTE4Yn0sCisJCXs0LCAgMHg5ODQwMmVjYywgMHg5ODRjMDc4YSwgMHg5ODE2OGE1NSwgMHg5ODAwNTE5Zn0sCisJCXs1LCAgMHg5ODQwMmVjYywgMHg5ODRjMDc4ZSwgMHg5ODE2OGE1NSwgMHg5ODAwNTE4Yn0sCisJCXs2LCAgMHg5ODQwMmVjYywgMHg5ODRjMDc4ZSwgMHg5ODE2OGE1NSwgMHg5ODAwNTE5Zn0sCisJCXs3LCAgMHg5ODQwMmVjYywgMHg5ODRjMDc5MiwgMHg5ODE2OGE1NSwgMHg5ODAwNTE4Yn0sCisJCXs4LCAgMHg5ODQwMmVjYywgMHg5ODRjMDc5MiwgMHg5ODE2OGE1NSwgMHg5ODAwNTE5Zn0sCisJCXs5LCAgMHg5ODQwMmVjYywgMHg5ODRjMDc5NiwgMHg5ODE2OGE1NSwgMHg5ODAwNTE4Yn0sCisJCXsxMCwgMHg5ODQwMmVjYywgMHg5ODRjMDc5NiwgMHg5ODE2OGE1NSwgMHg5ODAwNTE5Zn0sCisJCXsxMSwgMHg5ODQwMmVjYywgMHg5ODRjMDc5YSwgMHg5ODE2OGE1NSwgMHg5ODAwNTE4Yn0sCisJCXsxMiwgMHg5ODQwMmVjYywgMHg5ODRjMDc5YSwgMHg5ODE2OGE1NSwgMHg5ODAwNTE5Zn0sCisJCXsxMywgMHg5ODQwMmVjYywgMHg5ODRjMDc5ZSwgMHg5ODE2OGE1NSwgMHg5ODAwNTE4Yn0sCisJCXsxNCwgMHg5ODQwMmVjYywgMHg5ODRjMDdhMiwgMHg5ODE2OGE1NSwgMHg5ODAwNTE5M30sCisKKwkJLy8gODAyLjExIFVOSSAvIEh5cGVyTGFuIDIKKwkJezM2LCAweDk4NDAyZWNjLCAweDk4NGMwOTlhLCAweDk4MTU4YTU1LCAweDk4MGVkMWEzfSwKKwkJezM4LCAweDk4NDAyZWNjLCAweDk4NGMwOTllLCAweDk4MTU4YTU1LCAweDk4MGVkMTkzfSwKKwkJezQwLCAweDk4NDAyZWM4LCAweDk4NGMwNjgyLCAweDk4MTU4YTU1LCAweDk4MGVkMTgzfSwKKwkJezQ0LCAweDk4NDAyZWM4LCAweDk4NGMwNjgyLCAweDk4MTU4YTU1LCAweDk4MGVkMWEzfSwKKwkJezQ2LCAweDk4NDAyZWM4LCAweDk4NGMwNjg2LCAweDk4MTU4YTU1LCAweDk4MGVkMThifSwKKwkJezQ4LCAweDk4NDAyZWM4LCAweDk4NGMwNjg2LCAweDk4MTU4YTU1LCAweDk4MGVkMTlifSwKKwkJezUyLCAweDk4NDAyZWM4LCAweDk4NGMwNjhhLCAweDk4MTU4YTU1LCAweDk4MGVkMTkzfSwKKwkJezU0LCAweDk4NDAyZWM4LCAweDk4NGMwNjhhLCAweDk4MTU4YTU1LCAweDk4MGVkMWEzfSwKKwkJezU2LCAweDk4NDAyZWM4LCAweDk4NGMwNjhlLCAweDk4MTU4YTU1LCAweDk4MGVkMThifSwKKwkJezYwLCAweDk4NDAyZWM4LCAweDk4NGMwNjkyLCAweDk4MTU4YTU1LCAweDk4MGVkMTgzfSwKKwkJezYyLCAweDk4NDAyZWM4LCAweDk4NGMwNjkyLCAweDk4MTU4YTU1LCAweDk4MGVkMTkzfSwKKwkJezY0LCAweDk4NDAyZWM4LCAweDk4NGMwNjkyLCAweDk4MTU4YTU1LCAweDk4MGVkMWEzfSwgLy8gUGx1Z2Zlc3QjNCwgRGF5NCwgY2hhbmdlIFJGUjMgbGVmdDR0aCA5LT41LgorCisJCS8vIDgwMi4xMSBIeXBlckxhbiAyCisJCXsxMDAsIDB4OTg0MDJlYzgsIDB4OTg0YzA2YjIsIDB4OTgxNzhhNTUsIDB4OTgwZWQ3ODN9LAorCisJCS8vIDIwMDguMDQuMzAgbW9kaWZpZWQKKwkJLy8gVGhlIHN5c3RlbSB0ZWFtIGhhcyBBTiB0byBpbXByb3ZlIHRoZSBFVk0gdmFsdWUKKwkJLy8gZm9yIGNoYW5uZWwgMTAyIHRvIDEwOCBmb3IgdGhlIFJUMjg1MC9SVDI3NTAgZHVhbCBiYW5kIHNvbHV0aW9uLgorCQl7MTAyLCAweDk4NDAyZWM4LCAweDk4NWMwNmIyLCAweDk4NTc4YTU1LCAweDk4MGVkNzkzfSwKKwkJezEwNCwgMHg5ODQwMmVjOCwgMHg5ODVjMDZiMiwgMHg5ODU3OGE1NSwgMHg5ODBlZDFhM30sCisJCXsxMDgsIDB4OTg0MDJlY2MsIDB4OTg1YzBhMzIsIDB4OTg1NzhhNTUsIDB4OTgwZWQxOTN9LAorCisJCXsxMTAsIDB4OTg0MDJlY2MsIDB4OTg0YzBhMzYsIDB4OTgxNzhhNTUsIDB4OTgwZWQxODN9LAorCQl7MTEyLCAweDk4NDAyZWNjLCAweDk4NGMwYTM2LCAweDk4MTc4YTU1LCAweDk4MGVkMTlifSwKKwkJezExNiwgMHg5ODQwMmVjYywgMHg5ODRjMGEzYSwgMHg5ODE3OGE1NSwgMHg5ODBlZDFhM30sCisJCXsxMTgsIDB4OTg0MDJlY2MsIDB4OTg0YzBhM2UsIDB4OTgxNzhhNTUsIDB4OTgwZWQxOTN9LAorCQl7MTIwLCAweDk4NDAyZWM0LCAweDk4NGMwMzgyLCAweDk4MTc4YTU1LCAweDk4MGVkMTgzfSwKKwkJezEyNCwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4MiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5M30sCisJCXsxMjYsIDB4OTg0MDJlYzQsIDB4OTg0YzAzODIsIDB4OTgxNzhhNTUsIDB4OTgwZWQxNWJ9LCAvLyAweDk4MGVkMWJiLT4weDk4MGVkMTViIHJlcXVpcmVkIGJ5IFJvcnkgMjAwNzA5MjcKKwkJezEyOCwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4MiwgMHg5ODE3OGE1NSwgMHg5ODBlZDFhM30sCisJCXsxMzIsIDB4OTg0MDJlYzQsIDB4OTg0YzAzODYsIDB4OTgxNzhhNTUsIDB4OTgwZWQxOGJ9LAorCQl7MTM0LCAweDk4NDAyZWM0LCAweDk4NGMwMzg2LCAweDk4MTc4YTU1LCAweDk4MGVkMTkzfSwKKwkJezEzNiwgMHg5ODQwMmVjNCwgMHg5ODRjMDM4NiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE5Yn0sCisJCXsxNDAsIDB4OTg0MDJlYzQsIDB4OTg0YzAzOGEsIDB4OTgxNzhhNTUsIDB4OTgwZWQxODN9LAorCisJCS8vIDgwMi4xMSBVTklJCisJCXsxNDksIDB4OTg0MDJlYzQsIDB4OTg0YzAzOGEsIDB4OTgxNzhhNTUsIDB4OTgwZWQxYTd9LAorCQl7MTUxLCAweDk4NDAyZWM0LCAweDk4NGMwMzhlLCAweDk4MTc4YTU1LCAweDk4MGVkMTg3fSwKKwkJezE1MywgMHg5ODQwMmVjNCwgMHg5ODRjMDM4ZSwgMHg5ODE3OGE1NSwgMHg5ODBlZDE4Zn0sCisJCXsxNTcsIDB4OTg0MDJlYzQsIDB4OTg0YzAzOGUsIDB4OTgxNzhhNTUsIDB4OTgwZWQxOWZ9LAorCQl7MTU5LCAweDk4NDAyZWM0LCAweDk4NGMwMzhlLCAweDk4MTc4YTU1LCAweDk4MGVkMWE3fSwKKwkJezE2MSwgMHg5ODQwMmVjNCwgMHg5ODRjMDM5MiwgMHg5ODE3OGE1NSwgMHg5ODBlZDE4N30sCisJCXsxNjUsIDB4OTg0MDJlYzQsIDB4OTg0YzAzOTIsIDB4OTgxNzhhNTUsIDB4OTgwZWQxOTd9LAorCisJCS8vIEphcGFuCisJCXsxODQsIDB4OTUwMDJjY2MsIDB4OTUwMDQ5MWUsIDB4OTUwOWJlNTUsIDB4OTUwYzBhMGJ9LAorCQl7MTg4LCAweDk1MDAyY2NjLCAweDk1MDA0OTIyLCAweDk1MDliZTU1LCAweDk1MGMwYTEzfSwKKwkJezE5MiwgMHg5NTAwMmNjYywgMHg5NTAwNDkyNiwgMHg5NTA5YmU1NSwgMHg5NTBjMGExYn0sCisJCXsxOTYsIDB4OTUwMDJjY2MsIDB4OTUwMDQ5MmEsIDB4OTUwOWJlNTUsIDB4OTUwYzBhMjN9LAorCQl7MjA4LCAweDk1MDAyY2NjLCAweDk1MDA0OTNhLCAweDk1MDliZTU1LCAweDk1MGMwYTEzfSwKKwkJezIxMiwgMHg5NTAwMmNjYywgMHg5NTAwNDkzZSwgMHg5NTA5YmU1NSwgMHg5NTBjMGExYn0sCisJCXsyMTYsIDB4OTUwMDJjY2MsIDB4OTUwMDQ5ODIsIDB4OTUwOWJlNTUsIDB4OTUwYzBhMjN9LAorCisJCS8vIHN0aWxsIGxhY2sgb2YgTU1BQyhKYXBhbikgY2ggMzQsMzgsNDIsNDYKK307CitVQ0hBUglOVU1fT0ZfMjg1MF9DSE5MID0gKHNpemVvZihSRjI4NTBSZWdUYWJsZSkgLyBzaXplb2YoUlRNUF9SRl9SRUdTKSk7CisKK0ZSRVFVRU5DWV9JVEVNIEZyZXFJdGVtczMwMjBbXSA9Cit7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vIElTTSA6IDIuNCB0byAyLjQ4MyBHSHogICAgICAgICAgICAgICAgICAgICAgICAgLy8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy8gMTFnCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8vLUNILS0tTi0tLS0tLS1SLS0tSy0tLS0tLS0tLS0tCisJezEsICAgIDI0MSwgIDIsICAyfSwKKwl7MiwgICAgMjQxLAkgMiwgIDd9LAorCXszLCAgICAyNDIsCSAyLCAgMn0sCisJezQsICAgIDI0MiwJIDIsICA3fSwKKwl7NSwgICAgMjQzLAkgMiwgIDJ9LAorCXs2LCAgICAyNDMsCSAyLCAgN30sCisJezcsICAgIDI0NCwJIDIsICAyfSwKKwl7OCwgICAgMjQ0LAkgMiwgIDd9LAorCXs5LCAgICAyNDUsCSAyLCAgMn0sCisJezEwLCAgIDI0NSwJIDIsICA3fSwKKwl7MTEsICAgMjQ2LAkgMiwgIDJ9LAorCXsxMiwgICAyNDYsCSAyLCAgN30sCisJezEzLCAgIDI0NywJIDIsICAyfSwKKwl7MTQsICAgMjQ4LAkgMiwgIDR9LAorfTsKKy8vMjAwOC8wNy8xMDpLSCBNb2RpZmllZCB0byBzaGFyZSB0aGlzIHZhcmlhYmxlCitVQ0hBUglOVU1fT0ZfMzAyMF9DSE5MPShzaXplb2YoRnJlcUl0ZW1zMzAyMCkgLyBzaXplb2YoRlJFUVVFTkNZX0lURU0pKTsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlpbml0aWFsaXplIHRoZSBNTE1FIHRhc2sgYW5kIGl0cyBkYXRhIHN0cnVjdHVyZSAocXVldWUsIHNwaW5sb2NrLAorCQl0aW1lciwgc3RhdGUgbWFjaGluZXMpLgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCVJldHVybjoKKwkJYWx3YXlzIHJldHVybiBORElTX1NUQVRVU19TVUNDRVNTCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIE1sbWVJbml0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU5ESVNfU1RBVFVTIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gTUxNRSBJbml0aWFsaXplXG4iKSk7CisKKwlkbworCXsKKwkJU3RhdHVzID0gTWxtZVF1ZXVlSW5pdCgmcEFkLT5NbG1lLlF1ZXVlKTsKKwkJaWYoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQlicmVhazsKKworCQlwQWQtPk1sbWUuYlJ1bm5pbmcgPSBGQUxTRTsKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJQnNzVGFibGVJbml0KCZwQWQtPlNjYW5UYWIpOworCisJCQkvLyBpbml0IFNUQSBzdGF0ZSBtYWNoaW5lcworCQkJQXNzb2NTdGF0ZU1hY2hpbmVJbml0KHBBZCwgJnBBZC0+TWxtZS5Bc3NvY01hY2hpbmUsIHBBZC0+TWxtZS5Bc3NvY0Z1bmMpOworCQkJQXV0aFN0YXRlTWFjaGluZUluaXQocEFkLCAmcEFkLT5NbG1lLkF1dGhNYWNoaW5lLCBwQWQtPk1sbWUuQXV0aEZ1bmMpOworCQkJQXV0aFJzcFN0YXRlTWFjaGluZUluaXQocEFkLCAmcEFkLT5NbG1lLkF1dGhSc3BNYWNoaW5lLCBwQWQtPk1sbWUuQXV0aFJzcEZ1bmMpOworCQkJU3luY1N0YXRlTWFjaGluZUluaXQocEFkLCAmcEFkLT5NbG1lLlN5bmNNYWNoaW5lLCBwQWQtPk1sbWUuU3luY0Z1bmMpOworCQkJV3BhUHNrU3RhdGVNYWNoaW5lSW5pdChwQWQsICZwQWQtPk1sbWUuV3BhUHNrTWFjaGluZSwgcEFkLT5NbG1lLldwYVBza0Z1bmMpOworCQkJQWlyb25ldFN0YXRlTWFjaGluZUluaXQocEFkLCAmcEFkLT5NbG1lLkFpcm9uZXRNYWNoaW5lLCBwQWQtPk1sbWUuQWlyb25ldEZ1bmMpOworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQlEbHNTdGF0ZU1hY2hpbmVJbml0KHBBZCwgJnBBZC0+TWxtZS5EbHNNYWNoaW5lLCBwQWQtPk1sbWUuRGxzRnVuYyk7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKworCQkJLy8gU2luY2Ugd2UgYXJlIHVzaW5nIHN3aXRjaC9jYXNlIHRvIGltcGxlbWVudCBpdCwgdGhlIGluaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGFib3ZlCisJCQkvLyBzdGF0ZSBtYWNoaW5lIGluaXQKKwkJCU1sbWVDbnRsSW5pdChwQWQsICZwQWQtPk1sbWUuQ250bE1hY2hpbmUsIE5VTEwpOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCisJCUFjdGlvblN0YXRlTWFjaGluZUluaXQocEFkLCAmcEFkLT5NbG1lLkFjdE1hY2hpbmUsIHBBZC0+TWxtZS5BY3RGdW5jKTsKKworCQkvLyBJbml0IG1sbWUgcGVyaW9kaWMgdGltZXIKKwkJUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPk1sbWUuUGVyaW9kaWNUaW1lciwgR0VUX1RJTUVSX0ZVTkNUSU9OKE1sbWVQZXJpb2RpY0V4ZWMpLCBwQWQsIFRSVUUpOworCisJCS8vIFNldCBtbG1lIHBlcmlvZGljIHRpbWVyCisJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lLlBlcmlvZGljVGltZXIsIE1MTUVfVEFTS19FWEVDX0lOVFYpOworCisJCS8vIHNvZnR3YXJlLWJhc2VkIFJYIEFudGVubmEgZGl2ZXJzaXR5CisJCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lLlJ4QW50RXZhbFRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oQXNpY1J4QW50RXZhbFRpbWVvdXQpLCBwQWQsIEZBTFNFKTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwl9IHdoaWxlIChGQUxTRSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0gTUxNRSBJbml0aWFsaXplXG4iKSk7CisKKwlyZXR1cm4gU3RhdHVzOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCW1haW4gbG9vcCBvZiB0aGUgTUxNRQorCVByZToKKwkJTWxtZSBoYXMgdG8gYmUgaW5pdGlhbGl6ZWQsIGFuZCB0aGVyZSBhcmUgc29tZXRoaW5nIGluc2lkZSB0aGUgcXVldWUKKwlOb3RlOgorCQlUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSBNUFNldEluZm9ybWF0aW9uIGFuZCBNUFJlY2VpdmU7CisJCVRoaXMgdGFzayBndWFyYW50ZWUgb25seSBvbmUgTWxtZUhhbmRsZXIgd2lsbCBydW4uCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZUhhbmRsZXIoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJTUxNRV9RVUVVRV9FTEVNIAkgICAqRWxlbSA9IE5VTEw7CisKKwkvLyBPbmx5IGFjY2VwdCBNTE1FIGFuZCBGcmFtZSBmcm9tIHBlZXIgc2lkZSwgbm8gb3RoZXIgKGNvbnRyb2wvZGF0YSkgZnJhbWUgc2hvdWxkCisJLy8gZ2V0IGludG8gdGhpcyBzdGF0ZSBtYWNoaW5lCisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOworCWlmKHBBZC0+TWxtZS5iUnVubmluZykKKwl7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7CisJCXJldHVybjsKKwl9CisJZWxzZQorCXsKKwkJcEFkLT5NbG1lLmJSdW5uaW5nID0gVFJVRTsKKwl9CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NbG1lLlRhc2tMb2NrKTsKKworCXdoaWxlICghTWxtZVF1ZXVlRW1wdHkoJnBBZC0+TWxtZS5RdWV1ZSkpCisJeworCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX01MTUVfUkVTRVRfSU5fUFJPR1JFU1MpIHx8CisJCQlSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykgfHwKKwkJCVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRGV2aWNlIEhhbHRlZCBvciBSZW1vdmVkIG9yIE1sbWVSZXN0LCBleGl0IE1sbWVIYW5kbGVyISAocXVldWUgbnVtID0gJWxkKVxuIiwgcEFkLT5NbG1lLlF1ZXVlLk51bSkpOworCQkJYnJlYWs7CisJCX0KKworI2lmZGVmIFJBTElOS19BVEUKKwkJaWYoQVRFX09OKHBBZCkpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlRoZSBkcml2ZXIgaXMgaW4gQVRFIG1vZGUgbm93IGluIE1sbWVIYW5kbGVyXG4iKSk7CisJCQlicmVhazsKKwkJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCQkvL0Zyb20gbWVzc2FnZSB0eXBlLCBkZXRlcm1pbmUgd2hpY2ggc3RhdGUgbWFjaGluZSBJIHNob3VsZCBkcml2ZQorCQlpZiAoTWxtZURlcXVldWUoJnBBZC0+TWxtZS5RdWV1ZSwgJkVsZW0pKQorCQl7CisjaWZkZWYgUlQyODcwCisJCQlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfUkVTRVRfQ09ORikKKwkJCXsKKwkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiISEhIHJlc2V0IE1MTUUgc3RhdGUgbWFjaGluZSAhISFcbiIpKTsKKwkJCQlNbG1lUmVzdGFydFN0YXRlTWFjaGluZShwQWQpOworCQkJCUVsZW0tPk9jY3VwaWVkID0gRkFMU0U7CisJCQkJRWxlbS0+TXNnTGVuID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCQkJLy8gaWYgZGVxdWV1ZSBzdWNjZXNzCisJCQlzd2l0Y2ggKEVsZW0tPk1hY2hpbmUpCisJCQl7CisJCQkJLy8gU1RBIHN0YXRlIG1hY2hpbmVzCisjaWZkZWYJQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJY2FzZSBBU1NPQ19TVEFURV9NQUNISU5FOgorCQkJCQlTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKHBBZCwgJnBBZC0+TWxtZS5Bc3NvY01hY2hpbmUsIEVsZW0pOworCQkJCQlicmVhazsKKwkJCQljYXNlIEFVVEhfU1RBVEVfTUFDSElORToKKwkJCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuQXV0aE1hY2hpbmUsIEVsZW0pOworCQkJCQlicmVhazsKKwkJCQljYXNlIEFVVEhfUlNQX1NUQVRFX01BQ0hJTkU6CisJCQkJCVN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24ocEFkLCAmcEFkLT5NbG1lLkF1dGhSc3BNYWNoaW5lLCBFbGVtKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTWU5DX1NUQVRFX01BQ0hJTkU6CisJCQkJCVN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24ocEFkLCAmcEFkLT5NbG1lLlN5bmNNYWNoaW5lLCBFbGVtKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBNTE1FX0NOVExfU1RBVEVfTUFDSElORToKKwkJCQkJTWxtZUNudGxNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuQ250bE1hY2hpbmUsIEVsZW0pOworCQkJCQlicmVhazsKKwkJCQljYXNlIFdQQV9QU0tfU1RBVEVfTUFDSElORToKKwkJCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuV3BhUHNrTWFjaGluZSwgRWxlbSk7CisJCQkJCWJyZWFrOworI2lmZGVmIExFQVBfU1VQUE9SVAorCQkJCWNhc2UgTEVBUF9TVEFURV9NQUNISU5FOgorCQkJCQlMZWFwTWFjaGluZVBlcmZvcm1BY3Rpb24ocEFkLCAmcEFkLT5NbG1lLkxlYXBNYWNoaW5lLCBFbGVtKTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQljYXNlIEFJUk9ORVRfU1RBVEVfTUFDSElORToKKwkJCQkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbihwQWQsICZwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUsIEVsZW0pOworCQkJCQlicmVhazsKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkJCWNhc2UgRExTX1NUQVRFX01BQ0hJTkU6CisJCQkJCVN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24ocEFkLCAmcEFkLT5NbG1lLkRsc01hY2hpbmUsIEVsZW0pOworCQkJCQlicmVhazsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkJCWNhc2UgQUNUSU9OX1NUQVRFX01BQ0hJTkU6CisJCQkJCVN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24ocEFkLCAmcEFkLT5NbG1lLkFjdE1hY2hpbmUsIEVsZW0pOworCQkJCQlicmVhazsKKworCisKKworCQkJCWRlZmF1bHQ6CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkVSUk9SOiBJbGxlZ2FsIG1hY2hpbmUgJWxkIGluIE1sbWVIYW5kbGVyKClcbiIsIEVsZW0tPk1hY2hpbmUpKTsKKwkJCQkJYnJlYWs7CisJCQl9IC8vIGVuZCBvZiBzd2l0Y2gKKworCQkJLy8gZnJlZSBNTE1FIGVsZW1lbnQKKwkJCUVsZW0tPk9jY3VwaWVkID0gRkFMU0U7CisJCQlFbGVtLT5Nc2dMZW4gPSAwOworCisJCX0KKwkJZWxzZSB7CisJCQlEQkdQUklOVF9FUlIoKCJNbG1lSGFuZGxlcjogTWxtZVF1ZXVlIGVtcHR5XG4iKSk7CisJCX0KKwl9CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOworCXBBZC0+TWxtZS5iUnVubmluZyA9IEZBTFNFOworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWxtZS5UYXNrTG9jayk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJRGVzdHJ1Y3RvciBvZiBNTE1FIChEZXN0cm95IHF1ZXVlLCBzdGF0ZSBtYWNoaW5lLCBzcGluIGxvY2sgYW5kIHRpbWVyKQorCVBhcmFtZXRlcnM6CisJCUFkYXB0ZXIgLSBOSUMgQWRhcHRlciBwb2ludGVyCisJUG9zdDoKKwkJVGhlIE1MTUUgdGFzayB3aWxsIG5vIGxvbmdlciB3b3JrIHByb3Blcmx5CisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lSGFsdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlCT09MRUFOCQlDYW5jZWxsZWQ7CisjaWZkZWYgUlQzMDcwCisJVUlOVDMyCQlUeFBpbkNmZyA9IDB4MDAwNTBGMEY7CisjZW5kaWYgLy8gUlQzMDcwIC8vCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gTWxtZUhhbHRcbiIpKTsKKworCWlmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCXsKKwkJLy8gZGlzYWJsZSBCRUFDT04gZ2VuZXJhdGlvbiBhbmQgb3RoZXIgQkVBQ09OIHJlbGF0ZWQgaGFyZHdhcmUgdGltZXJzCisJCUFzaWNEaXNhYmxlU3luYyhwQWQpOworCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQlVQ0hBUgkJaTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJLy8gQ2FuY2VsIHBlbmRpbmcgdGltZXJzCisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkFzc29jVGltZXIsCQkmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguUmVhc3NvY1RpbWVyLAkJJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkRpc2Fzc29jVGltZXIsCSZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5BdXRoVGltZXIsCQkmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQmVhY29uVGltZXIsCQkmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguU2NhblRpbWVyLAkJJkNhbmNlbGxlZCk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJZm9yIChpPTA7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwkJeworCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lciwgJkNhbmNlbGxlZCk7CisJCX0KKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZS5QZXJpb2RpY1RpbWVyLAkJJkNhbmNlbGxlZCk7CisJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWUuUnhBbnRFdmFsVGltZXIsCQkmQ2FuY2VsbGVkKTsKKworCisKKwlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKKwl7CisJCS8vIFNldCBMRUQKKwkJUlRNUFNldExFRChwQWQsIExFRF9IQUxUKTsKKyAgICAgICAgUlRNUFNldFNpZ25hbExFRChwQWQsIC0xMDApOwkvLyBGb3JjZSBzaWduYWwgc3RyZW5ndGggTGVkIHRvIGJlIHR1cm5lZCBvZmYsIGZpcm13YXJlIGlzIG5vdCBkb25lIGl0LgorI2lmZGVmIFJUMjg3MAorICAgICAgICB7CisgICAgICAgICAgICBMRURfQ0ZHX1NUUlVDIExlZENmZzsKKyAgICAgICAgICAgIFJUTVBfSU9fUkVBRDMyKHBBZCwgTEVEX0NGRywgJkxlZENmZy53b3JkKTsKKyAgICAgICAgICAgIExlZENmZy5maWVsZC5MZWRQb2xhciA9IDA7CisgICAgICAgICAgICBMZWRDZmcuZmllbGQuUkxlZE1vZGUgPSAwOworICAgICAgICAgICAgTGVkQ2ZnLmZpZWxkLkdMZWRNb2RlID0gMDsKKyAgICAgICAgICAgIExlZENmZy5maWVsZC5ZTGVkTW9kZSA9IDA7CisgICAgICAgICAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBMRURfQ0ZHLCBMZWRDZmcud29yZCk7CisgICAgICAgIH0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKyNpZmRlZiBSVDMwNzAKKwkJLy8KKwkJLy8gVHVybiBvZmYgTE5BX1BFCisJCS8vCisJCWlmIChJU19SVDMwNzAocEFkKSB8fCBJU19SVDMwNzEocEFkKSkKKwkJeworCQkJVHhQaW5DZmcgJj0gMHhGRkZGRjBGMDsKKwkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFRYX1BJTl9DRkcsIFR4UGluQ2ZnKTsKKwkJfQorI2VuZGlmIC8vIFJUMzA3MCAvLworCX0KKworCVJUTVB1c2VjRGVsYXkoNTAwMCk7ICAgIC8vICA1IG1zZWMgdG8gZ3VyYW50ZWUgQW50IERpdmVyc2l0eSB0aW1lciBjYW5jZWxlZAorCisJTWxtZVF1ZXVlRGVzdHJveSgmcEFkLT5NbG1lLlF1ZXVlKTsKKwlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPk1sbWUuVGFza0xvY2spOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IE1sbWVIYWx0XG4iKSk7Cit9CisKK1ZPSUQgTWxtZVJlc2V0UmFsaW5rQ291bnRlcnMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpCit7CisJcEFkLT5SYWxpbmtDb3VudGVycy5MYXN0T25lU2VjUnhPa0RhdGFDbnQgPSBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4T2tEYXRhQ250OworCS8vIGNsZWFyIGFsbCBPbmVTZWN4eHggY291bnRlcnMuCisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNCZWFjb25TZW50Q250ID0gMDsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY0ZhbHNlQ0NBQ250ID0gMDsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4RmNzRXJyQ250ID0gMDsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4T2tDbnQgPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQgPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeE9rRGF0YUNudCA9IDA7CisKKwkvLyBUT0RPOiBmb3IgZGVidWcgb25seS4gdG8gYmUgcmVtb3ZlZAorCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjT3NUeENvdW50W1FJRF9BQ19CRV0gPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjT3NUeENvdW50W1FJRF9BQ19CS10gPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjT3NUeENvdW50W1FJRF9BQ19WSV0gPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjT3NUeENvdW50W1FJRF9BQ19WT10gPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjRG1hRG9uZUNvdW50W1FJRF9BQ19CRV0gPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjRG1hRG9uZUNvdW50W1FJRF9BQ19CS10gPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjRG1hRG9uZUNvdW50W1FJRF9BQ19WSV0gPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjRG1hRG9uZUNvdW50W1FJRF9BQ19WT10gPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhEb25lQ291bnQgPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhDb3VudCA9IDA7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEFnZ3JlZ2F0aW9uQ291bnQgPSAwOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhBZ2dyZWdhdGlvbkNvdW50ID0gMDsKKworCXJldHVybjsKK30KKwordW5zaWduZWQgbG9uZyByeF9BTVNEVTsKK3Vuc2lnbmVkIGxvbmcgcnhfVG90YWw7CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVGhpcyByb3V0aW5lIGlzIGV4ZWN1dGVkIHBlcmlvZGljYWxseSB0byAtCisJCTEuIERlY2lkZSBpZiBpdCdzIGEgcmlnaHQgdGltZSB0byB0dXJuIG9uIFB3ck1nbXQgYml0IG9mIGFsbAorCQkgICBvdXRnb2lpbmcgZnJhbWVzCisJCTIuIENhbGN1bGF0ZSBDaGFubmVsUXVhbGl0eSBiYXNlZCBvbiBzdGF0aXN0aWNzIG9mIHRoZSBsYXN0CisJCSAgIHBlcmlvZCwgc28gdGhhdCBUWCByYXRlIHdvbid0IHRvZ2dsaW5nIHZlcnkgZnJlcXVlbnRseSBiZXR3ZWVuIGEKKwkJICAgc3VjY2Vzc2Z1bCBUWCBhbmQgYSBmYWlsZWQgVFguCisJCTMuIElmIHRoZSBjYWxjdWxhdGVkIENoYW5uZWxRdWFsaXR5IGluZGljYXRlZCBjdXJyZW50IGNvbm5lY3Rpb24gbm90CisJCSAgIGhlYWx0aHksIHRoZW4gYSBST0FNaW5nIGF0dGVtcHQgaXMgdHJpZWQgaGVyZS4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworI2RlZmluZSBBREhPQ19CRUFDT05fTE9TVF9USU1FCQkoOCpPU19IWikgIC8vIDggc2VjCitWT0lEIE1sbWVQZXJpb2RpY0V4ZWMoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCVVMT05HCQkJVHhUb3RhbENudDsKKwlQUlRNUF9BREFQVEVSCXBBZCA9IChSVE1QX0FEQVBURVIgKilGdW5jdGlvbkNvbnRleHQ7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLgorCS8vIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdAorCWlmICgoUlRNUF9URVNUX0ZMQUcocEFkLCAoZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfAorCQkJCQkJCQlmUlRNUF9BREFQVEVSX1JBRElPX01FQVNVUkVNRU5UIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpKSkKKwkJcmV0dXJuOworCisJUlQyOFhYX01MTUVfUFJFX1NBTklUWV9DSEVDSyhwQWQpOworCisjaWZkZWYgUkFMSU5LX0FURQorCS8qIERvIG5vdCBzaG93IFJTU0kgdW50aWwgIk5vcm1hbCAxIHNlY29uZCBNbG1lIFBlcmlvZGljRXhlYyIuICovCisJaWYgKEFURV9PTihwQWQpKQorCXsKKwkJaWYgKHBBZC0+TWxtZS5QZXJpb2RpY1JvdW5kICUgTUxNRV9UQVNLX0VYRUNfTVVMVElQTEUgIT0gKE1MTUVfVEFTS19FWEVDX01VTFRJUExFIC0gMSkpCisJeworCQkJcEFkLT5NbG1lLlBlcmlvZGljUm91bmQgKys7CisJCQlyZXR1cm47CisJCX0KKwl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCS8vIERvIG5vdGhpbmcgaWYgbW9uaXRvciBtb2RlIGlzIG9uCisJCWlmIChNT05JVE9SX09OKHBBZCkpCisJCQlyZXR1cm47CisKKwkJaWYgKHBBZC0+TWxtZS5QZXJpb2RpY1JvdW5kICYgMHgxKQorCQl7CisJCQkvLyBUaGlzIGlzIHRoZSBmaXggZm9yIHdpZmkgMTFuIGV4dGVuc2lvbiBjaGFubmVsIG92ZXJsYXBwaW5nIHRlc3QgY2FzZS4gIGZvciAyODYwRAorCQkJaWYgKCgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA9PSAweDAxMDEpICYmCisJCQkJKFNUQV9UR05fV0lGSV9PTihwQWQpKSAmJgorCQkJCShwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJUb2dnbGUgPT0gRkFMU0UpKQorCisJCQkJeworCQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWE9QX0NUUkxfQ0ZHLCAweDI0QmYpOworCQkJCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJUb2dnbGUgPSBUUlVFOworCQkJCX0KKwkJCQllbHNlIGlmICgoU1RBX1RHTl9XSUZJX09OKHBBZCkpICYmCisJCQkJCQkoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPT0gMHgwMTAxKSkKKwkJCQl7CisJCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYT1BfQ1RSTF9DRkcsIDB4MjQzZik7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlRvZ2dsZSA9IEZBTFNFOworCQkJCX0KKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCXBBZC0+YlVwZGF0ZUJjbkNudERvbmUgPSBGQUxTRTsKKworLy8JUkVDQkFUaW1lclRpbWVvdXQoU3lzdGVtU3BlY2lmaWMxLEZ1bmN0aW9uQ29udGV4dCxTeXN0ZW1TcGVjaWZpYzIsU3lzdGVtU3BlY2lmaWMzKTsKKwlwQWQtPk1sbWUuUGVyaW9kaWNSb3VuZCArKzsKKworI2lmZGVmIFJUMjg3MAorCS8vIGV4ZWN1dGUgZXZlcnkgMTAwbXMsIHVwZGF0ZSB0aGUgVHggRklGTyBDbnQgZm9yIHVwZGF0ZSBUeCBSYXRlLgorCU5JQ1VwZGF0ZUZpZm9TdGFDb3VudGVycyhwQWQpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCS8vIGV4ZWN1dGUgZXZlcnkgNTAwbXMKKwlpZiAoKHBBZC0+TWxtZS5QZXJpb2RpY1JvdW5kICUgNSA9PSAwKSAmJiBSVE1QQXV0b1JhdGVTd2l0Y2hDaGVjayhwQWQpLyooT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKSkqLykKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCS8vIHBlcmZvcm0gZHluYW1pYyB0eCByYXRlIHN3aXRjaGluZyBiYXNlZCBvbiBwYXN0IFRYIGhpc3RvcnkKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJeworCQkJaWYgKChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkKKwkJCQkJKQorCQkJCSYmICghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkpCisJCQkJTWxtZUR5bmFtaWNUeFJhdGVTd2l0Y2hpbmcocEFkKTsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCS8vIE5vcm1hbCAxIHNlY29uZCBNbG1lIFBlcmlvZGljRXhlYy4KKwlpZiAocEFkLT5NbG1lLlBlcmlvZGljUm91bmQgJU1MTUVfVEFTS19FWEVDX01VTFRJUExFID09IDApCisJeworICAgICAgICAgICAgICAgIHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICsrOworCisjaWZkZWYgUkFMSU5LX0FURQorICAgIAlpZiAoQVRFX09OKHBBZCkpCisgICAgCXsKKwkJCS8qIHJlcXVlc3QgZnJvbSBCYXJvbiA6IG1vdmUgdGhpcyByb3V0aW5lIGZyb20gbGF0ZXIgdG8gaGVyZSAqLworCQkJLyogZm9yIHNob3dpbmcgUnggZXJyb3IgY291bnQgaW4gQVRFIFJYRlJBTUUgKi8KKyAgICAgICAgICAgIE5JQ1VwZGF0ZVJhd0NvdW50ZXJzKHBBZCk7CisJCQlpZiAocEFkLT5hdGUuYlJ4RmVyID09IDEpCisJCQl7CisJCQkJcEFkLT5hdGUuUnhUb3RhbENudCArPSBwQWQtPmF0ZS5SeENudFBlclNlYzsKKwkJCSAgICBhdGVfcHJpbnQoS0VSTl9FTUVSRyAiTWxtZVBlcmlvZGljRXhlYzogUnggcGFja2V0IGNudCA9ICVkLyVkXG4iLCBwQWQtPmF0ZS5SeENudFBlclNlYywgcEFkLT5hdGUuUnhUb3RhbENudCk7CisJCQkJcEFkLT5hdGUuUnhDbnRQZXJTZWMgPSAwOworCisJCQkJaWYgKHBBZC0+YXRlLlJ4QW50ZW5uYVNlbCA9PSAwKQorCQkJCQlhdGVfcHJpbnQoS0VSTl9FTUVSRyAiTWxtZVBlcmlvZGljRXhlYzogUnggQXZnUnNzaTA9JWQsIEF2Z1Jzc2kxPSVkLCBBdmdSc3NpMj0lZFxuXG4iLAorCQkJCQkJcEFkLT5hdGUuQXZnUnNzaTAsIHBBZC0+YXRlLkF2Z1Jzc2kxLCBwQWQtPmF0ZS5BdmdSc3NpMik7CisJCQkJZWxzZQorCQkJCQlhdGVfcHJpbnQoS0VSTl9FTUVSRyAiTWxtZVBlcmlvZGljRXhlYzogUnggQXZnUnNzaT0lZFxuXG4iLCBwQWQtPmF0ZS5BdmdSc3NpMCk7CisJCQl9CisJCQlNbG1lUmVzZXRSYWxpbmtDb3VudGVycyhwQWQpOworCQkJcmV0dXJuOworICAgIAl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisKKwkJaWYgKHJ4X1RvdGFsKQorCQl7CisKKwkJCS8vIHJlc2V0IGNvdW50ZXJzCisJCQlyeF9BTVNEVSA9IDA7CisJCQlyeF9Ub3RhbCA9IDA7CisJCX0KKworCQkvL09SSUJBVGltZXJUaW1lb3V0KHBBZCk7CisKKwkJLy8gTWVkaWEgc3RhdHVzIGNoYW5nZWQsIHJlcG9ydCB0byBORElTCisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTUVESUFfU1RBVEVfQ0hBTkdFKSkKKwkJeworCQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9NRURJQV9TVEFURV9DSEFOR0UpOworCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCXsKKwkJCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOworCQkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOworCQkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisJCQl9CisJCX0KKworCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZwQWQtPk1sbWUuTm93MzIpOworCisJCS8vIGFkZCB0aGUgbW9zdCB1cC10by1kYXRlIGgvdyByYXcgY291bnRlcnMgaW50byBzb2Z0d2FyZSB2YXJpYWJsZSwgc28gdGhhdAorCQkvLyB0aGUgZHluYW1pYyB0dW5pbmcgbWVjaGFuaXNtIGJlbG93IGFyZSBiYXNlZCBvbiBtb3N0IHVwLXRvLWRhdGUgaW5mb3JtYXRpb24KKwkJTklDVXBkYXRlUmF3Q291bnRlcnMocEFkKTsKKworI2lmZGVmIFJUMjg3MAorCQlSVDI4NzBfV2F0Y2hEb2cocEFkKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgCQkvLyBOZWVkIHN0YXRpc3RpY3MgYWZ0ZXIgcmVhZCBjb3VudGVyLiBTbyBwdXQgYWZ0ZXIgTklDVXBkYXRlUmF3Q291bnRlcnMKKwkJT1JJQkFUaW1lclRpbWVvdXQocEFkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkvLyBUaGUgdGltZSBwZXJpb2QgZm9yIGNoZWNraW5nIGFudGVubmEgaXMgYWNjb3JkaW5nIHRvIHRyYWZmaWMKKwkJeworCQkJaWYgKHBBZC0+TWxtZS5iRW5hYmxlQXV0b0FudGVubmFDaGVjaykKKwkJCXsKKwkJCQlUeFRvdGFsQ250ID0gcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsKKwkJCQkJCQkJIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhSZXRyeU9rQ291bnQgKworCQkJCQkJCQkgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudDsKKworCQkJCQkvLyBkeW5hbWljIGFkanVzdCBhbnRlbm5hIGV2YWx1YXRpb24gcGVyaW9kIGFjY29yZGluZyB0byB0aGUgdHJhZmZpYworCQkJCWlmIChUeFRvdGFsQ250ID4gNTApCisJCQkJeworCQkJCQlpZiAocEFkLT5NbG1lLk9uZVNlY1BlcmlvZGljUm91bmQgJSAxMCA9PSAwKQorCQkJCQl7CisJCQkJCQlBc2ljRXZhbHVhdGVSeEFudChwQWQpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmIChwQWQtPk1sbWUuT25lU2VjUGVyaW9kaWNSb3VuZCAlIDMgPT0gMCkKKwkJCQkJeworCQkJCQkJQXNpY0V2YWx1YXRlUnhBbnQocEFkKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQlTVEFNbG1lUGVyaW9kaWNFeGVjKHBBZCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJTWxtZVJlc2V0UmFsaW5rQ291bnRlcnMocEFkKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQl7CisJCQkJLy8gV2hlbiBBZGhvYyBiZWFjb24gaXMgZW5hYmxlZCBhbmQgUlRTL0NUUyBpcyBlbmFibGVkLCB0aGVyZSBpcyBhIGNoYW5jZSB0aGF0IGhhcmR3YXJlIE1BQyBGU00gd2lsbCBydW4gaW50byBhIGRlYWRsb2NrCisJCQkJLy8gYW5kIHNlbmRpbmcgQ1RTLXRvLXNlbGYgb3ZlciBhbmQgb3Zlci4KKwkJCQkvLyBTb2Z0d2FyZSBQYXRjaCBTb2x1dGlvbjoKKwkJCQkvLyAxLiBQb2xsaW5nIGRlYnVnIHN0YXRlIHJlZ2lzdGVyIDB4MTBGNCBldmVyeSBvbmUgc2Vjb25kLgorCQkJCS8vIDIuIElmIGluIDB4MTBGNCB0aGUgKChiaXQyOT09MSkgJiYgKGJpdDc9PTEpKSBPUiAoKGJpdDI5PT0xKSAmJiAoYml0NT09MSkpLCBpdCBtZWFucyB0aGUgZGVhZGxvY2sgaGFzIG9jY3VycmVkLgorCQkJCS8vIDMuIElmIHRoZSBkZWFkbG9jayBvY2N1cnJlZCwgcmVzZXQgTUFDL0JCUCBieSBzZXR0aW5nIDB4MTAwNCB0byAweDAwMDEgZm9yIGEgd2hpbGUgdGhlbiBzZXR0aW5nIGl0IGJhY2sgdG8gMHgwMDBDIGFnYWluLgorCisJCQkJVUlOVDMyCU1hY1JlZyA9IDA7CisKKwkJCQlSVE1QX0lPX1JFQUQzMihwQWQsIDB4MTBGNCwgJk1hY1JlZyk7CisJCQkJaWYgKCgoTWFjUmVnICYgMHgyMDAwMDAwMCkgJiYgKE1hY1JlZyAmIDB4ODApKSB8fCAoKE1hY1JlZyAmIDB4MjAwMDAwMDApICYmIChNYWNSZWcgJiAweDIwKSkpCisJCQkJeworCQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4MSk7CisJCQkJCVJUTVB1c2VjRGVsYXkoMSk7CisJCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHhDKTsKKworCQkJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCgiV2FybmluZywgTUFDIHNwZWNpZmljIGNvbmRpdGlvbiBvY2N1cnMgXG4iKSk7CisJCQkJfQorCQkJfQorCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCX0KKworCisJcEFkLT5iVXBkYXRlQmNuQ250RG9uZSA9IEZBTFNFOworfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitWT0lEIFNUQU1sbWVQZXJpb2RpY0V4ZWMoCisJUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUxPTkcJCQkgICAgVHhUb3RhbENudDsKKwlpbnQgCWk7CisKKy8vCisvLyBXZSByZXR1cm4gaGVyZSBpbiBBVEUgbW9kZSwgYmVjYXVzZSB0aGUgc3RhdGlzdGljcworLy8gdGhhdCBBVEUgbmVlZHMgYXJlIG5vdCBjb2xsZWN0ZWQgdmlhIHRoaXMgcm91dGluZS4KKy8vCisjaWZkZWYgUkFMSU5LX0FURQorCS8vIEl0IGlzIHN1cHBvc2VkIHRoYXQgd2Ugd2lsbCBuZXZlciByZWFjaCBoZXJlIGluIEFURSBtb2RlLgorCUFTU0VSVCghKEFURV9PTihwQWQpKSk7CisJaWYgKEFURV9PTihwQWQpKQorCQlyZXR1cm47CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIGlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gV1BBX1NVUFBMSUNBTlRfRElTQUJMRSkKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgeworICAgIAkvLyBXUEEgTUlDIGVycm9yIHNob3VsZCBibG9jayBhc3NvY2lhdGlvbiBhdHRlbXB0IGZvciA2MCBzZWNvbmRzCisgICAgCWlmIChwQWQtPlN0YUNmZy5iQmxvY2tBc3NvYyAmJiAocEFkLT5TdGFDZmcuTGFzdE1pY0Vycm9yVGltZSArICg2MCAqIE9TX0haKSA8IHBBZC0+TWxtZS5Ob3czMikpCisgICAgCQlwQWQtPlN0YUNmZy5iQmxvY2tBc3NvYyA9IEZBTFNFOworICAgIH0KKworICAgIGlmICgocEFkLT5QcmVNZWRpYVN0YXRlICE9IHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlKSAmJiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpKQorCXsKKwkJaWYgKHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID09IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkKQorCQl7CisJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19TVEFfTElOS1VQX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisJCX0KKwkJcEFkLT5QcmVNZWRpYVN0YXRlID0gcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGU7CisJfQorCisKKworCisgICAJQXNpY1N0YUJicFR1bmluZyhwQWQpOworCisJVHhUb3RhbENudCA9IHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCArCisJCQkJCSBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ICsKKwkJCQkJIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQ7CisKKwlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQorCXsKKwkJLy8gdXBkYXRlIGNoYW5uZWwgcXVhbGl0eSBmb3IgUm9hbWluZyBhbmQgVUkgTGlua1F1YWxpdHkgZGlzcGxheQorCQlNbG1lQ2FsY3VsYXRlQ2hhbm5lbFF1YWxpdHkocEFkLCBwQWQtPk1sbWUuTm93MzIpOworCX0KKworCS8vIG11c3QgYmUgQUZURVIgTWxtZUR5bmFtaWNUeFJhdGVTd2l0Y2hpbmcoKSBiZWNhdXNlIGl0IG5lZWRzIHRvIGtub3cgaWYKKwkvLyBSYWRpbyBpcyBjdXJyZW50bHkgaW4gbm9pc3kgZW52aXJvbm1lbnQKKwlpZiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCisJCUFzaWNBZGp1c3RUeFBvd2VyKHBBZCk7CisKKwlpZiAoSU5GUkFfT04ocEFkKSkKKwl7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCS8vIENoZWNrIERMUyB0aW1lIG91dCwgdGhlbiB0ZWFyIGRvd24gdGhvc2Ugc2Vzc2lvbgorCQlSVE1QQ2hlY2tETFNUaW1lT3V0KHBBZCk7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKwkJLy8gSXMgUFNNIGJpdCBjb25zaXN0ZW50IHdpdGggdXNlciBwb3dlciBtYW5hZ2VtZW50IHBvbGljeT8KKwkJLy8gVGhpcyBpcyB0aGUgb25seSBwbGFjZSB0aGF0IHdpbGwgc2V0IFBTTSBiaXQgT04uCisJCWlmICghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKSkKKwkJTWxtZUNoZWNrUHNtQ2hhbmdlKHBBZCwgcEFkLT5NbG1lLk5vdzMyKTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLkxhc3RPbmVTZWNUb3RhbFR4Q291bnQgPSBUeFRvdGFsQ250OworCisJCWlmICgocEFkLT5TdGFDZmcuTGFzdEJlYWNvblJ4VGltZSArIDEqT1NfSFogPCBwQWQtPk1sbWUuTm93MzIpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpICYmCisJCQkoKFR4VG90YWxDbnQgKyBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4T2tDbnQgPCA2MDApKSkKKwkJeworCQkJUlRNUFNldEFHQ0luaXRWYWx1ZShwQWQsIEJXXzIwKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1NQ0hLIC0gTm8gQkVBQ09OLiByZXN0b3JlIFI2NiB0byB0aGUgbG93IGJvdW5kKCVkKSBcbiIsICgweDJFICsgR0VUX0xOQV9HQUlOKHBBZCkpKSk7CisJCX0KKworICAgICAgICAvL2lmICgocEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ID09IDApICYmCisgICAgICAgIC8vICAgIChwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ID09IDApKQorICAgICAgICB7CisgICAgCQlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlICYmIHBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYkFQU0RDYXBhYmxlKQorICAgIAkJeworICAgIAkJICAgIC8vIFdoZW4gQVBTRCBpcyBlbmFibGVkLCB0aGUgcGVyaW9kIGNoYW5nZXMgYXMgMjAgc2VjCisgICAgCQkJaWYgKChwQWQtPk1sbWUuT25lU2VjUGVyaW9kaWNSb3VuZCAlIDIwKSA9PSA4KQorICAgIAkJCQlSVE1QU2VuZE51bGxGcmFtZShwQWQsIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSwgVFJVRSk7CisgICAgCQl9CisgICAgCQllbHNlCisgICAgCQl7CisgICAgCQkgICAgLy8gU2VuZCBvdXQgYSBOVUxMIGZyYW1lIGV2ZXJ5IDEwIHNlYyB0byBpbmZvcm0gQVAgdGhhdCBTVEEgaXMgc3RpbGwgYWxpdmUgKEF2b2lkIGJlaW5nIGFnZSBvdXQpCisgICAgCQkJaWYgKChwQWQtPk1sbWUuT25lU2VjUGVyaW9kaWNSb3VuZCAlIDEwKSA9PSA4KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlKQorICAgIAkJCQkJUlRNUFNlbmROdWxsRnJhbWUocEFkLCBwQWQtPkNvbW1vbkNmZy5UeFJhdGUsIFRSVUUpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisJCQkJCQlSVE1QU2VuZE51bGxGcmFtZShwQWQsIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSwgRkFMU0UpOworICAgICAgICAgICAgICAgIH0KKyAgICAJCX0KKyAgICAgICAgfQorCisJCWlmIChDUUlfSVNfREVBRChwQWQtPk1sbWUuQ2hhbm5lbFF1YWxpdHkpKQorCQkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTU1DSEsgLSBObyBCRUFDT04uIERlYWQgQ1FJLiBBdXRvIFJlY292ZXJ5IGF0dGVtcHQgIyVsZFxuIiwgcEFkLT5SYWxpbmtDb3VudGVycy5CYWRDUUlBdXRvUmVjb3ZlcnlDb3VudCkpOworCQkJcEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUFJlcG9ydEZsYWcgPSBUUlVFOworCQkJcEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUExpbmtEb3duVGltZSA9IHBBZC0+U3RhQ2ZnLkxhc3RCZWFjb25SeFRpbWU7CisKKwkJCS8vIExvc3QgQVAsIHNlbmQgZGlzY29ubmVjdCAmIGxpbmsgZG93biBldmVudAorCQkJTGlua0Rvd24ocEFkLCBGQUxTRSk7CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZuZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQKQorCQkJeworICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKyAgICAgICAgICAgICAgICAvL3NlbmQgZGlzYXNzb2NpYXRlIGV2ZW50IHRvIHdwYV9zdXBwbGljYW50CisgICAgICAgICAgICAgICAgbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworICAgICAgICAgICAgICAgIHdycXUuZGF0YS5mbGFncyA9IFJUX0RJU0FTU09DX0VWRU5UX0ZMQUc7CisgICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgICAgICAgICAgICAgIG1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgMCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisgICAgICAgICAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworCQkJLy8gUlRNUFBhdGNoTWFjQmJwQnVnKHBBZCk7CisJCQlNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKHBBZCk7CisJCX0KKwkJZWxzZSBpZiAoQ1FJX0lTX0JBRChwQWQtPk1sbWUuQ2hhbm5lbFF1YWxpdHkpKQorCQl7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLkJhZENRSUF1dG9SZWNvdmVyeUNvdW50ICsrOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTU1DSEsgLSBCYWQgQ1FJLiBBdXRvIFJlY292ZXJ5IGF0dGVtcHQgIyVsZFxuIiwgcEFkLT5SYWxpbmtDb3VudGVycy5CYWRDUUlBdXRvUmVjb3ZlcnlDb3VudCkpOworCQkJTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRChwQWQpOworCQl9CisKKwkJLy8gQWRkIGF1dG8gc2VhbWxlc3Mgcm9hbWluZworCQlpZiAocEFkLT5TdGFDZmcuYkZhc3RSb2FtaW5nKQorCQl7CisJCQlTSE9SVAlkQm1Ub1JvYW0gPSAoU0hPUlQpcEFkLT5TdGFDZmcuZEJtVG9Sb2FtOworCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSc3NpPSVkLCBkQm1Ub1JvYW09JWRcbiIsIFJUTVBNYXhSc3NpKHBBZCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMiksIChDSEFSKWRCbVRvUm9hbSkpOworCisJCQlpZiAoUlRNUE1heFJzc2kocEFkLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyKSA8PSAoQ0hBUilkQm1Ub1JvYW0pCisJCQl7CisJCQkJTWxtZUNoZWNrRm9yRmFzdFJvYW1pbmcocEFkLCBwQWQtPk1sbWUuTm93MzIpOworCQkJfQorCQl9CisJfQorCWVsc2UgaWYgKEFESE9DX09OKHBBZCkpCisJeworCQkvL3JhZGFyIGRldGVjdAorCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKwkJCSYmIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKQorCQkJJiYgUmFkYXJDaGFubmVsQ2hlY2socEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSkKKwkJeworCQkJUmFkYXJEZXRlY3RQZXJpb2RpYyhwQWQpOworCQl9CisKKwkJLy8gSWYgYWxsIHBlZXJzIGxlYXZlLCBhbmQgdGhpcyBTVEEgYmVjb21lcyB0aGUgbGFzdCBvbmUgaW4gdGhpcyBJQlNTLCB0aGVuIGNoYW5nZSBNZWRpYVN0YXRlCisJCS8vIHRvIERJU0NPTk5FQ1RFRC4gQnV0IHN0aWxsIGhvbGRpbmcgdGhpcyBJQlNTIChpLmUuIHNlbmRpbmcgQkVBQ09OKSBzbyB0aGF0IG90aGVyIFNUQXMgY2FuCisJCS8vIGpvaW4gbGF0ZXIuCisJCWlmICgocEFkLT5TdGFDZmcuTGFzdEJlYWNvblJ4VGltZSArIEFESE9DX0JFQUNPTl9MT1NUX1RJTUUgPCBwQWQtPk1sbWUuTm93MzIpICYmCisJCQlPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJCXsKKwkJCU1MTUVfU1RBUlRfUkVRX1NUUlVDVCAgICAgU3RhcnRSZXE7CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1NQ0hLIC0gZXhjZXNzaXZlIEJFQUNPTiBsb3N0LCBsYXN0IFNUQSBpbiB0aGlzIElCU1MsIE1lZGlhU3RhdGU9RGlzY29ubmVjdGVkXG4iKSk7CisJCQlMaW5rRG93bihwQWQsIEZBTFNFKTsKKworCQkJU3RhcnRQYXJtRmlsbChwQWQsICZTdGFydFJlcSwgcEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9TVEFSVF9SRVEsIHNpemVvZihNTE1FX1NUQVJUX1JFUV9TVFJVQ1QpLCAmU3RhcnRSZXEpOworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9TVEFSVDsKKwkJfQorCisJCWZvciAoaSA9IDE7IGkgPCBNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKQorCQl7CisJCQlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W2ldOworCisJCQlpZiAocEVudHJ5LT5WYWxpZEFzQ0xJID09IEZBTFNFKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocEVudHJ5LT5MYXN0QmVhY29uUnhUaW1lICsgQURIT0NfQkVBQ09OX0xPU1RfVElNRSA8IHBBZC0+TWxtZS5Ob3czMikKKwkJCQlNYWNUYWJsZURlbGV0ZUVudHJ5KHBBZCwgcEVudHJ5LT5BaWQsIHBFbnRyeS0+QWRkcik7CisJCX0KKwl9CisJZWxzZSAvLyBubyBJTkZSQSBub3IgQURIT0MgY29ubmVjdGlvbgorCXsKKworCQlpZiAocEFkLT5TdGFDZmcuYlNjYW5SZXFJc0Zyb21XZWJVSSAmJgorICAgICAgICAgICAgKChwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgKyAzMCAqIE9TX0haKSA+IHBBZC0+TWxtZS5Ob3czMikpCisJCQlnb3RvIFNLSVBfQVVUT19TQ0FOX0NPTk47CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBGQUxTRTsKKworCQlpZiAoKHBBZC0+U3RhQ2ZnLmJBdXRvUmVjb25uZWN0ID09IFRSVUUpCisJCQkmJiBSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfU1RBUlRfVVApCisJCQkmJiAoTWxtZVZhbGlkYXRlU1NJRChwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbikgPT0gVFJVRSkpCisJCXsKKwkJCWlmICgocEFkLT5TY2FuVGFiLkJzc05yPT0wKSAmJiAocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpKQorCQkJeworCQkJCU1MTUVfU0NBTl9SRVFfU1RSVUNUCSAgIFNjYW5SZXE7CisKKwkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSArIDEwICogT1NfSFopIDwgcEFkLT5NbG1lLk5vdzMyKQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1RBTWxtZVBlcmlvZGljRXhlYygpOkNOVEwgLSBTY2FuVGFiLkJzc05yPT0wLCBzdGFydCBhIG5ldyBBQ1RJVkUgc2NhbiBTU0lEWyVzXVxuIiwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkKSk7CisJCQkJCVNjYW5QYXJtRmlsbChwQWQsICZTY2FuUmVxLCBwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbiwgQlNTX0FOWSwgU0NBTl9BQ1RJVkUpOworCQkJCQlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU0NBTl9SRVEsIHNpemVvZihNTE1FX1NDQU5fUkVRX1NUUlVDVCksICZTY2FuUmVxKTsKKwkJCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfTElTVF9TQ0FOOworCQkJCQkvLyBSZXNldCBNaXNzZWQgc2NhbiBudW1iZXIKKwkJCQkJcEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lID0gcEFkLT5NbG1lLk5vdzMyOworCQkJCX0KKwkJCQllbHNlIGlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykJLy8gUXVpdCB0aGUgZm9yZXZlciBzY2FuIHdoZW4gaW4gYSB2ZXJ5IGNsZWFuIHJvb20KKwkJCQkJTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRChwQWQpOworCQkJfQorCQkJZWxzZSBpZiAocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpCisJCQl7CisJCQkJaWYgKChwQWQtPk1sbWUuT25lU2VjUGVyaW9kaWNSb3VuZCAlIDcpID09IDApCisJCQkJeworCQkJCQlNbG1lQXV0b1NjYW4ocEFkKTsKKwkJCQkJcEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lID0gcEFkLT5NbG1lLk5vdzMyOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8gUm9nZXIgc3luYyBDYXJyaWVyCisJCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9PSBUUlVFKQorCQkJCQl7CisJCQkJCQlpZiAoKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgNSkgPT0gMSkKKwkJCQkJCQlNbG1lQXV0b1JlY29ubmVjdExhc3RTU0lEKHBBZCk7CisJCQkJCX0KKwkJCQkJZWxzZQorI2VuZGlmIC8vIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8KKwkJCQkJCU1sbWVBdXRvUmVjb25uZWN0TGFzdFNTSUQocEFkKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKK1NLSVBfQVVUT19TQ0FOX0NPTk46CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyAgICBpZiAoKHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uVFhCQWJpdG1hcCAhPTApICYmIChwQWQtPk1hY1RhYi5mQW55QkFTZXNzaW9uID09IEZBTFNFKSkKKwl7CisJCXBBZC0+TWFjVGFiLmZBbnlCQVNlc3Npb24gPSBUUlVFOworCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIEhUX0ZPUkNFUlRTQ1RTLCAgQUxMTl9TRVRQUk9URUNULCBGQUxTRSwgRkFMU0UpOworCX0KKwllbHNlIGlmICgocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5UWEJBYml0bWFwID09MCkgJiYgKHBBZC0+TWFjVGFiLmZBbnlCQVNlc3Npb24gPT0gVFJVRSkpCisJeworCQlwQWQtPk1hY1RhYi5mQW55QkFTZXNzaW9uID0gRkFMU0U7CisJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSwgIEFMTE5fU0VUUFJPVEVDVCwgRkFMU0UsIEZBTFNFKTsKKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2lmZGVmIERPVDExTl9EUkFGVDMKKwlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19TQ0FOXzIwNDApKQorCQlUcmlFdmVudENvdW50ZXJNYWludGVuYW5jZShwQWQpOworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCXJldHVybjsKK30KKworLy8gTGluayBkb3duIHJlcG9ydAorVk9JRCBMaW5rRG93bkV4ZWMoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCisJUlRNUF9BREFQVEVSICpwQWQgPSAoUlRNUF9BREFQVEVSICopRnVuY3Rpb25Db250ZXh0OworCisJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsKKwlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOworICAgIHBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX0RPV047Cit9CisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBNbG1lQXV0b1NjYW4oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJLy8gY2hlY2sgQ250bE1hY2hpbmUuQ3VyclN0YXRlIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIE5ESVMgU2V0T0lEIHJlcXVlc3QKKwlpZiAocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNTUNISyAtIERyaXZlciBhdXRvIHNjYW5cbiIpKTsKKwkJTWxtZUVucXVldWUocEFkLAorCQkJCQlNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKKwkJCQkJT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4sCisJCQkJCTAsCisJCQkJCU5VTEwpOworCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisJfQorfQorCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKworCisJLy8gY2hlY2sgQ250bE1hY2hpbmUuQ3VyclN0YXRlIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIE5ESVMgU2V0T0lEIHJlcXVlc3QKKwlpZiAoKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPT0gQ05UTF9JRExFKSAmJgorCQkoTWxtZVZhbGlkYXRlU1NJRChwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbikgPT0gVFJVRSkpCisJeworCQlORElTXzgwMl8xMV9TU0lEIE9pZFNzaWQ7CisJCU9pZFNzaWQuU3NpZExlbmd0aCA9IHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbjsKKwkJTmRpc01vdmVNZW1vcnkoT2lkU3NpZC5Tc2lkLCBwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbik7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRHJpdmVyIGF1dG8gcmVjb25uZWN0IHRvIGxhc3QgT0lEXzgwMl8xMV9TU0lEIHNldHRpbmcgLSAlcywgbGVuIC0gJWRcbiIsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKSk7CisJCU1sbWVFbnF1ZXVlKHBBZCwKKwkJCQkJTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisJCQkJCU9JRF84MDJfMTFfU1NJRCwKKwkJCQkJc2l6ZW9mKE5ESVNfODAyXzExX1NTSUQpLAorCQkJCQkmT2lkU3NpZCk7CisJCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKwl9Cit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlWYWxpZGF0ZSBTU0lEIGZvciBjb25uZWN0aW9uIHRyeSBhbmQgcmVzY2FuIHB1cnBvc2UKKwlWYWxpZCBTU0lEIHdpbGwgaGF2ZSB2aXNpYmxlIGNoYXJzIG9ubHkuCisJVGhlIHZhbGlkIGxlbmd0aCBpcyBmcm9tIDAgdG8gMzIuCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBNbG1lVmFsaWRhdGVTU0lEKAorCUlOIFBVQ0hBUglwU3NpZCwKKwlJTiBVQ0hBUglTc2lkTGVuKQoreworCWludAlpbmRleDsKKworCWlmIChTc2lkTGVuID4gTUFYX0xFTl9PRl9TU0lEKQorCQlyZXR1cm4gKEZBTFNFKTsKKworCS8vIENoZWNrIGVhY2ggY2hhcmFjdGVyIHZhbHVlCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgU3NpZExlbjsgaW5kZXgrKykKKwl7CisJCWlmIChwU3NpZFtpbmRleF0gPCAweDIwKQorCQkJcmV0dXJuIChGQUxTRSk7CisJfQorCisJLy8gQWxsIGNoZWNrZWQKKwlyZXR1cm4gKFRSVUUpOworfQorCitWT0lEIE1sbWVTZWxlY3RUeFJhdGVUYWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4gUE1BQ19UQUJMRV9FTlRSWQkJcEVudHJ5LAorCUlOIFBVQ0hBUgkJCQkqcHBUYWJsZSwKKwlJTiBQVUNIQVIJCQkJcFRhYmxlU2l6ZSwKKwlJTiBQVUNIQVIJCQkJcEluaXRUeFJhdGVJZHgpCit7CisJZG8KKwl7CisJCS8vIGRlY2lkZSB0aGUgcmF0ZSB0YWJsZSBmb3IgdHVuaW5nCisJCWlmIChwQWQtPkNvbW1vbkNmZy5UeFJhdGVUYWJsZVNpemUgPiAwKQorCQl7CisJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTsKKwkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlWzBdOworCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlWzFdOworCisJCQlicmVhazsKKwkJfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCWlmICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkgJiYgQURIT0NfT04ocEFkKSkKKwkJeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpICYmCisJCQkJKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAweGZmKSAmJgorCQkJCSgocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDB4MDApIHx8IChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpKSkKKwkJCXsvLyAxMU4gMVMgQWRob2MKKwkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjFTOworCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMF07CisJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMV07CisKKwkJCX0KKwkJCWVsc2UgaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpICYmCisJCQkJCShwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMHhmZikgJiYKKwkJCQkJKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9PSAweGZmKSAmJgorCQkJCQkocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAyKSkKKwkJCXsvLyAxMU4gMlMgQWRob2MKKwkJCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4yUzsKKwkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4yU1swXTsKKwkJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNbMV07CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZDsKKwkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kWzBdOworCQkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kWzFdOworCQkJCX0KKworCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJCWlmICgocEVudHJ5LT5SYXRlTGVuID09IDQpCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCSYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMCkgJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9PSAwKQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJCQkpCisJCQl7CisJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUI7CisJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUJbMF07CisJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFCWzFdOworCisJCQl9CisJCQllbHNlIGlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTQpCisJCQl7CisJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUJHOworCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCR1swXTsKKwkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJHWzFdOworCisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUc7CisJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUdbMF07CisJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFHWzFdOworCisJCQl9CisJCQlicmVhazsKKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCS8vaWYgKChwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuICsgcEFkLT5TdGFBY3RpdmUuRXh0UmF0ZUxlbiA9PSAxMikgJiYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdID09IDB4ZmYpICYmCisJCS8vCSgocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMV0gPT0gMHgwMCkgfHwgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkpKQorCQlpZiAoKHBFbnRyeS0+UmF0ZUxlbiA9PSAxMikgJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAweGZmKSAmJgorCQkJKChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMHgwMCkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID09IDEpKSkKKwkJey8vIDExQkdOIDFTIEFQCisJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMVM7CisJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMVNbMF07CisJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJHTjFTWzFdOworCisJCQlicmVhazsKKwkJfQorCisJCS8vZWxzZSBpZiAoKHBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gKyBwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuID09IDEyKSAmJiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0gPT0gMHhmZikgJiYKKwkJLy8JKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzFdID09IDB4ZmYpICYmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpKQorCQlpZiAoKHBFbnRyeS0+UmF0ZUxlbiA9PSAxMikgJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAweGZmKSAmJgorCQkJKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9PSAweGZmKSAmJiAocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPT0gMikpCisJCXsvLyAxMUJHTiAyUyBBUAorCQkJaWYgKHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA8PSAxNCkKKwkJCXsKKwkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlM7CisJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMUJHTjJTWzBdOworCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNbMV07CisKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNGb3JBQmFuZDsKKwkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNGb3JBQmFuZFswXTsKKwkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJHTjJTRm9yQUJhbmRbMV07CisKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJLy9lbHNlIGlmICgocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0gPT0gMHhmZikgJiYgKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAweDAwKSB8fCAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKSkpCisJCWlmICgocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDB4ZmYpICYmICgocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDB4MDApIHx8IChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9PSAxKSkpCisJCXsvLyAxMU4gMVMgQVAKKwkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVM7CisJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjFTWzBdOworCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMV07CisKKwkJCWJyZWFrOworCQl9CisKKwkJLy9lbHNlIGlmICgocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0gPT0gMHhmZikgJiYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzFdID09IDB4ZmYpICYmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpKQorCQlpZiAoKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAweGZmKSAmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDB4ZmYpICYmIChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9PSAyKSkKKwkJey8vIDExTiAyUyBBUAorCQkJaWYgKHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA8PSAxNCkKKwkJCXsKKwkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlM7CisJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTWzBdOworCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNbMV07CisgICAgICAgICAgICB9CisJCQllbHNlCisJCQl7CisJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kOworCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZFswXTsKKwkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kWzFdOworCQkJfQorCisJCQlicmVhazsKKwkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkvL2Vsc2UgaWYgKChwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuID09IDQpICYmIChwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuID09IDApICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSA9PSAwKSAmJiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMV0gPT0gMCkpCisJCWlmICgocEVudHJ5LT5SYXRlTGVuID09IDQpCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisvL0l2ZXJzb24gbWFyayBmb3IgQWRob2MgYiBtb2RlLHN0YSB3aWxsIHVzZSByYXRlIDU0ICBNYnBzIHdoZW4gY29ubmVjdCB3aXRoIHN0YSBiL2cvbiBtb2RlCisvLwkJCSYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPT0gMCkgJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9PSAwKQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJKQorCQl7Ly8gQiBvbmx5IEFQCisJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQjsKKwkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFCWzBdOworCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFCWzFdOworCisJCQlicmVhazsKKwkJfQorCisJCS8vZWxzZSBpZiAoKHBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gKyBwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuID4gOCkgJiYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdID09IDApICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFsxXSA9PSAwKSkKKwkJaWYgKChwRW50cnktPlJhdGVMZW4gPiA4KQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJJiYgKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAwKSAmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDApCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkpCisJCXsvLyBCL0cgIG1peGVkIEFQCisJCQkqcHBUYWJsZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkc7CisJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkdbMF07CisJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUJHWzFdOworCisJCQlicmVhazsKKwkJfQorCisJCS8vZWxzZSBpZiAoKHBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gKyBwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuID09IDgpICYmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSA9PSAwKSAmJiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMV0gPT0gMCkpCisJCWlmICgocEVudHJ5LT5SYXRlTGVuID09IDgpCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzBdID09IDApICYmIChwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPT0gMCkKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCSkKKwkJey8vIEcgb25seSBBUAorCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUc7CisJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExR1swXTsKKwkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExR1sxXTsKKworCQkJYnJlYWs7CisJCX0KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkvL2Vsc2UgaWYgKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldFswXSA9PSAwKSAmJiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMV0gPT0gMCkpCisJCQlpZiAoKHBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFswXSA9PSAwKSAmJiAocEVudHJ5LT5IVENhcGFiaWxpdHkuTUNTU2V0WzFdID09IDApKQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJewkvLyBMZWdhY3kgbW9kZQorCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUgPD0gUkFURV8xMSkKKwkJCQl7CisJCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFCOworCQkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExQlswXTsKKwkJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFCWzFdOworCQkJCX0KKwkJCQllbHNlIGlmICgocEFkLT5Db21tb25DZmcuTWF4VHhSYXRlID4gUkFURV8xMSkgJiYgKHBBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZSA+IFJBVEVfMTEpKQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUc7CisJCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFHWzBdOworCQkJCQkqcEluaXRUeFJhdGVJZHggPSBSYXRlU3dpdGNoVGFibGUxMUdbMV07CisKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMUJHOworCQkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExQkdbMF07CisJCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExQkdbMV07CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJaWYgKHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA8PSAxNCkKKwkJCXsKKwkJCQlpZiAocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPT0gMSkKKwkJCQl7CisJCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVM7CisJCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMF07CisJCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExTjFTWzFdOworCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsKCJEUlM6IHVua293biBtb2RlLGRlZmF1bHQgdXNlIDExTiAxUyBBUCBcbiIpKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4yUzsKKwkJCQkJKnBUYWJsZVNpemUgPSBSYXRlU3dpdGNoVGFibGUxMU4yU1swXTsKKwkJCQkJKnBJbml0VHhSYXRlSWR4ID0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNbMV07CisJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoIkRSUzogdW5rb3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDJTIEFQIFxuIikpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAocEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPT0gMSkKKwkJCQl7CisJCQkJCSpwcFRhYmxlID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVM7CisJCQkJCSpwVGFibGVTaXplID0gUmF0ZVN3aXRjaFRhYmxlMTFOMVNbMF07CisJCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExTjFTWzFdOworCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsKCJEUlM6IHVua293biBtb2RlLGRlZmF1bHQgdXNlIDExTiAxUyBBUCBcbiIpKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJKnBwVGFibGUgPSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kOworCQkJCQkqcFRhYmxlU2l6ZSA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbMF07CisJCQkJCSpwSW5pdFR4UmF0ZUlkeCA9IFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbMV07CisJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoIkRSUzogdW5rb3duIG1vZGUsZGVmYXVsdCB1c2UgMTFOIDJTIEFQIFxuIikpOworCQkJCX0KKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoIkRSUzogdW5rb3duIG1vZGUgKFN1cFJhdGVMZW49JWQsIEV4dFJhdGVMZW49JWQsIE1DU1NldFswXT0weCV4LCBNQ1NTZXRbMV09MHgleClcbiIsCisJCQkJcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiwgcEFkLT5TdGFBY3RpdmUuRXh0UmF0ZUxlbiwgcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXRbMF0sIHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzFdKSk7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9IHdoaWxlKEZBTFNFKTsKK30KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIHJvdXRpbmUgY2hlY2tzIGlmIHRoZXJlJ3JlIG90aGVyIEFQcyBvdXQgdGhlcmUgY2FwYWJsZSBmb3IKKwkJcm9hbWluZy4gQ2FsbGVyIHNob3VsZCBjYWxsIHRoaXMgcm91dGluZSBvbmx5IHdoZW4gTGluayB1cCBpbiBJTkZSQSBtb2RlCisJCWFuZCBjaGFubmVsIHF1YWxpdHkgaXMgYmVsb3cgQ1FJX0dPT0RfVEhSRVNIT0xELgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlPdXRwdXQ6CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lQ2hlY2tGb3JSb2FtaW5nKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVMT05HCU5vdzMyKQoreworCVVTSE9SVAkgICBpOworCUJTU19UQUJMRSAgKnBSb2FtVGFiID0gJnBBZC0+TWxtZUF1eC5Sb2FtVGFiOworCUJTU19FTlRSWSAgKnBCc3M7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gTWxtZUNoZWNrRm9yUm9hbWluZ1xuIikpOworCS8vIHB1dCBhbGwgcm9hbWluZyBjYW5kaWRhdGVzIGludG8gUm9hbVRhYiwgYW5kIHNvcnQgaW4gUlNTSSBvcmRlcgorCUJzc1RhYmxlSW5pdChwUm9hbVRhYik7CisJZm9yIChpID0gMDsgaSA8IHBBZC0+U2NhblRhYi5Cc3NOcjsgaSsrKQorCXsKKwkJcEJzcyA9ICZwQWQtPlNjYW5UYWIuQnNzRW50cnlbaV07CisKKwkJaWYgKChwQnNzLT5MYXN0QmVhY29uUnhUaW1lICsgQkVBQ09OX0xPU1RfVElNRSkgPCBOb3czMikKKwkJCWNvbnRpbnVlOwkgLy8gQVAgZGlzYXBwZWFyCisJCWlmIChwQnNzLT5Sc3NpIDw9IFJTU0lfVEhSRVNIT0xEX0ZPUl9ST0FNSU5HKQorCQkJY29udGludWU7CSAvLyBSU1NJIHRvbyB3ZWFrLiBmb3JnZXQgaXQuCisJCWlmIChNQUNfQUREUl9FUVVBTChwQnNzLT5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpKQorCQkJY29udGludWU7CSAvLyBza2lwIGN1cnJlbnQgQVAKKwkJaWYgKHBCc3MtPlJzc2kgPCAocEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAgKyBSU1NJX0RFTFRBKSkKKwkJCWNvbnRpbnVlOwkgLy8gb25seSBBUCB3aXRoIHN0cm9uZ2VyIFJTU0kgaXMgZWxpZ2libGUgZm9yIHJvYW1pbmcKKworCQkvLyBBUCBwYXNzaW5nIGFsbCBhYm92ZSBydWxlcyBpcyBwdXQgaW50byByb2FtaW5nIGNhbmRpZGF0ZSB0YWJsZQorCQlOZGlzTW92ZU1lbW9yeSgmcFJvYW1UYWItPkJzc0VudHJ5W3BSb2FtVGFiLT5Cc3NOcl0sIHBCc3MsIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJcFJvYW1UYWItPkJzc05yICs9IDE7CisJfQorCisJaWYgKHBSb2FtVGFiLT5Cc3NOciA+IDApCisJeworCQkvLyBjaGVjayBDbnRsTWFjaGluZS5DdXJyU3RhdGUgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggTkRJUyBTZXRPSUQgcmVxdWVzdAorCQlpZiAocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9PSBDTlRMX0lETEUpCisJCXsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuUG9vckNRSVJvYW1pbmdDb3VudCArKzsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1NQ0hLIC0gUm9hbWluZyBhdHRlbXB0ICMlbGRcbiIsIHBBZC0+UmFsaW5rQ291bnRlcnMuUG9vckNRSVJvYW1pbmdDb3VudCkpOworCQkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfUk9BTUlOR19SRVEsIDAsIE5VTEwpOworCQkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCQl9CisJfQorCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBNbG1lQ2hlY2tGb3JSb2FtaW5nKCMgb2YgY2FuZGlkYXRlPSAlZClcbiIscFJvYW1UYWItPkJzc05yKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVGhpcyByb3V0aW5lIGNoZWNrcyBpZiB0aGVyZSdyZSBvdGhlciBBUHMgb3V0IHRoZXJlIGNhcGFibGUgZm9yCisJCXJvYW1pbmcuIENhbGxlciBzaG91bGQgY2FsbCB0aGlzIHJvdXRpbmUgb25seSB3aGVuIGxpbmsgdXAgaW4gSU5GUkEgbW9kZQorCQlhbmQgY2hhbm5lbCBxdWFsaXR5IGlzIGJlbG93IENRSV9HT09EX1RIUkVTSE9MRC4KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJT3V0cHV0OgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZUNoZWNrRm9yRmFzdFJvYW1pbmcoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUxPTkcJCQlOb3cpCit7CisJVVNIT1JUCQlpOworCUJTU19UQUJMRQkqcFJvYW1UYWIgPSAmcEFkLT5NbG1lQXV4LlJvYW1UYWI7CisJQlNTX0VOVFJZCSpwQnNzOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT0+IE1sbWVDaGVja0ZvckZhc3RSb2FtaW5nXG4iKSk7CisJLy8gcHV0IGFsbCByb2FtaW5nIGNhbmRpZGF0ZXMgaW50byBSb2FtVGFiLCBhbmQgc29ydCBpbiBSU1NJIG9yZGVyCisJQnNzVGFibGVJbml0KHBSb2FtVGFiKTsKKwlmb3IgKGkgPSAwOyBpIDwgcEFkLT5TY2FuVGFiLkJzc05yOyBpKyspCisJeworCQlwQnNzID0gJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtpXTsKKworICAgICAgICBpZiAoKHBCc3MtPlJzc2kgPD0gLTUwKSAmJiAocEJzcy0+Q2hhbm5lbCA9PSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSkKKwkJCWNvbnRpbnVlOwkgLy8gUlNTSSB0b28gd2Vhay4gZm9yZ2V0IGl0LgorCQlpZiAoTUFDX0FERFJfRVFVQUwocEJzcy0+QnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKSkKKwkJCWNvbnRpbnVlOwkgLy8gc2tpcCBjdXJyZW50IEFQCisJCWlmICghU1NJRF9FUVVBTChwQnNzLT5Tc2lkLCBwQnNzLT5Tc2lkTGVuLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuKSkKKwkJCWNvbnRpbnVlOwkgLy8gc2tpcCBkaWZmZXJlbnQgU1NJRAorICAgICAgICBpZiAocEJzcy0+UnNzaSA8IChSVE1QTWF4UnNzaShwQWQsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMSwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTIpICsgUlNTSV9ERUxUQSkpCisJCQljb250aW51ZTsJIC8vIHNraXAgQVAgd2l0aG91dCBiZXR0ZXIgUlNTSQorCisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkxhc3RSc3NpMCA9ICVkLCBwQnNzLT5Sc3NpID0gJWRcbiIsIFJUTVBNYXhSc3NpKHBBZCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMiksIHBCc3MtPlJzc2kpKTsKKwkJLy8gQVAgcGFzc2luZyBhbGwgYWJvdmUgcnVsZXMgaXMgcHV0IGludG8gcm9hbWluZyBjYW5kaWRhdGUgdGFibGUKKwkJTmRpc01vdmVNZW1vcnkoJnBSb2FtVGFiLT5Cc3NFbnRyeVtwUm9hbVRhYi0+QnNzTnJdLCBwQnNzLCBzaXplb2YoQlNTX0VOVFJZKSk7CisJCXBSb2FtVGFiLT5Cc3NOciArPSAxOworCX0KKworCWlmIChwUm9hbVRhYi0+QnNzTnIgPiAwKQorCXsKKwkJLy8gY2hlY2sgQ250bE1hY2hpbmUuQ3VyclN0YXRlIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIE5ESVMgU2V0T0lEIHJlcXVlc3QKKwkJaWYgKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPT0gQ05UTF9JRExFKQorCQl7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLlBvb3JDUUlSb2FtaW5nQ291bnQgKys7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNTUNISyAtIFJvYW1pbmcgYXR0ZW1wdCAjJWxkXG4iLCBwQWQtPlJhbGlua0NvdW50ZXJzLlBvb3JDUUlSb2FtaW5nQ291bnQpKTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1JPQU1JTkdfUkVRLCAwLCBOVUxMKTsKKwkJCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKwkJfQorCX0KKwkvLyBNYXliZSBzaXRlIHN1cnZleSByZXF1aXJlZAorCWVsc2UKKwl7CisJCWlmICgocEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lICsgMTAgKiAxMDAwKSA8IE5vdykKKwkJeworCQkJLy8gY2hlY2sgQ250bE1hY2hpbmUuQ3VyclN0YXRlIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIE5ESVMgU2V0T0lEIHJlcXVlc3QKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1NQ0hLIC0gUm9hbWluZywgTm8gZWxpZ2FibGUgZW50cnksIHRyeSBuZXcgc2NhbiFcbiIpKTsKKwkJCXBBZC0+U3RhQ2ZnLlNjYW5DbnQgPSAyOworCQkJcEFkLT5TdGFDZmcuTGFzdFNjYW5UaW1lID0gTm93OworCQkJTWxtZUF1dG9TY2FuKHBBZCk7CisJCX0KKwl9CisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT0gTWxtZUNoZWNrRm9yRmFzdFJvYW1pbmcgKEJzc05yPSVkKVxuIiwgcFJvYW1UYWItPkJzc05yKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVGhpcyByb3V0aW5lIGNhbGN1bGF0ZXMgVHhQRVIsIFJ4UEVSIG9mIHRoZSBwYXN0IE4tc2VjIHBlcmlvZC4gQW5kCisJCWFjY29yZGluZyB0byB0aGUgY2FsY3VsYXRpb24gcmVzdWx0LCBDaGFubmVsUXVhbGl0eSBpcyBjYWxjdWxhdGVkIGhlcmUKKwkJdG8gZGVjaWRlIGlmIGN1cnJlbnQgQVAgaXMgc3RpbGwgZG9pbmcgdGhlIGpvYi4KKworCQlJZiBDaGFubmVsUXVhbGl0eSBpcyBub3QgZ29vZCwgYSBST0FNaW5nIGF0dGVtcHQgbWF5IGJlIHRyaWVkIGxhdGVyLgorCU91dHB1dDoKKwkJU3RhQ2ZnLkNoYW5uZWxRdWFsaXR5IC0gMC4uMTAwCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5PVEU6IFRoaXMgcm91dGluZSBkZWNpZGUgY2hhbm5sZSBxdWFsaXR5IGJhc2VkIG9uIFJYIENSQyBlcnJvciByYXRpby4KKwkJQ2FsbGVyIHNob3VsZCBtYWtlIHN1cmUgYSBmdW5jdGlvbiBjYWxsIHRvIE5JQ1VwZGF0ZVJhd0NvdW50ZXJzKHBBZCkKKwkJaXMgcGVyZm9ybWVkIHJpZ2h0IGJlZm9yZSB0aGlzIHJvdXRpbmUsIHNvIHRoYXQgdGhpcyByb3V0aW5lIGNhbiBkZWNpZGUKKwkJY2hhbm5lbCBxdWFsaXR5IGJhc2VkIG9uIHRoZSBtb3N0IHVwLXRvLWRhdGUgaW5mb3JtYXRpb24KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVDYWxjdWxhdGVDaGFubmVsUXVhbGl0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVTE9ORyBOb3czMikKK3sKKwlVTE9ORyBUeE9rQ250LCBUeENudCwgVHhQRVIsIFR4UFJSOworCVVMT05HIFJ4Q250LCBSeFBFUjsKKwlVQ0hBUiBOb3JSc3NpOworCUNIQVIgIE1heFJzc2k7CisJVUxPTkcgQmVhY29uTG9zdFRpbWUgPSBCRUFDT05fTE9TVF9USU1FOworCisjaWZkZWYgQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLyBSb2dlciBzeW5jIENhcnJpZXIKKwkvLyBsb25nZXIgYmVhY29uIGxvc3QgdGltZSB3aGVuIGNhcnJpZXIgZGV0ZWN0aW9uIGVuYWJsZWQKKwlpZiAocEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUgPT0gVFJVRSkKKwl7CisJCUJlYWNvbkxvc3RUaW1lID0gQkVBQ09OX0xPU1RfVElNRSArIEJFQUNPTl9MT1NUX1RJTUUvMjsKKwl9CisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCisJTWF4UnNzaSA9IFJUTVBNYXhSc3NpKHBBZCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMik7CisKKwkvLworCS8vIGNhbGN1bGF0ZSBUWCBwYWNrZXQgZXJyb3IgcmF0aW8gYW5kIFRYIHJldHJ5IHJhdGlvIC0gaWYgdG9vIGZldyBUWCBzYW1wbGVzLCBza2lwIFRYIHJlbGF0ZWQgc3RhdGlzdGljcworCS8vCisJVHhPa0NudCA9IHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCArIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhSZXRyeU9rQ291bnQ7CisJVHhDbnQgPSBUeE9rQ250ICsgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEZhaWxDb3VudDsKKwlpZiAoVHhDbnQgPCA1KQorCXsKKwkJVHhQRVIgPSAwOworCQlUeFBSUiA9IDA7CisJfQorCWVsc2UKKwl7CisJCVR4UEVSID0gKHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQgKiAxMDApIC8gVHhDbnQ7CisJCVR4UFJSID0gKChUeENudCAtIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhOb1JldHJ5T2tDb3VudCkgKiAxMDApIC8gVHhDbnQ7CisJfQorCisJLy8KKwkvLyBjYWxjdWxhdGUgUlggUEVSIC0gZG9uJ3QgdGFrZSBSeFBFUiBpbnRvIGNvbnNpZGVyYXRpb24gaWYgdG9vIGZldyBzYW1wbGUKKwkvLworCVJ4Q250ID0gcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeE9rQ250ICsgcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeEZjc0VyckNudDsKKwlpZiAoUnhDbnQgPCA1KQorCQlSeFBFUiA9IDA7CisJZWxzZQorCQlSeFBFUiA9IChwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4RmNzRXJyQ250ICogMTAwKSAvIFJ4Q250OworCisJLy8KKwkvLyBkZWNpZGUgQ2hhbm5lbFF1YWxpdHkgYmFzZWQgb246IDEpbGFzdCBCRUFDT04gcmVjZWl2ZWQgdGltZSwgMilsYXN0IFJTU0ksIDMpVHhQRVIsIGFuZCA0KVJ4UEVSCisJLy8KKwlpZiAoSU5GUkFfT04ocEFkKSAmJgorCQkocEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50IDwgMikgJiYgLy8gbm8gaGVhdnkgdHJhZmZpYworCQkocEFkLT5TdGFDZmcuTGFzdEJlYWNvblJ4VGltZSArIEJlYWNvbkxvc3RUaW1lIDwgTm93MzIpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQkVBQ09OIGxvc3QgPiAlbGQgbXNlYyB3aXRoIFR4T2tDbnQ9JWxkIC0+IENRST0wXG4iLCBCZWFjb25Mb3N0VGltZSwgVHhPa0NudCkpOworCQlwQWQtPk1sbWUuQ2hhbm5lbFF1YWxpdHkgPSAwOworCX0KKwllbHNlCisJeworCQkvLyBOb3JtYWxpemUgUnNzaQorCQlpZiAoTWF4UnNzaSA+IC00MCkKKwkJCU5vclJzc2kgPSAxMDA7CisJCWVsc2UgaWYgKE1heFJzc2kgPCAtOTApCisJCQlOb3JSc3NpID0gMDsKKwkJZWxzZQorCQkJTm9yUnNzaSA9IChNYXhSc3NpICsgOTApICogMjsKKworCQkvLyBDaGFubmVsUXVhbGl0eSA9IFcxKlJTU0kgKyBXMipUeFBSUiArIFczKlJ4UEVSCSAoUlNTSSAwLi4xMDApLCAoVHhQRVIgMTAwLi4wKSwgKFJ4UEVSIDEwMC4uMCkKKwkJcEFkLT5NbG1lLkNoYW5uZWxRdWFsaXR5ID0gKFJTU0lfV0VJR0hUSU5HICogTm9yUnNzaSArCisJCQkJCQkJCSAgIFRYX1dFSUdIVElORyAqICgxMDAgLSBUeFBSUikgKworCQkJCQkJCQkgICBSWF9XRUlHSFRJTkcqICgxMDAgLSBSeFBFUikpIC8gMTAwOworCQlpZiAocEFkLT5NbG1lLkNoYW5uZWxRdWFsaXR5ID49IDEwMCkKKwkJCXBBZC0+TWxtZS5DaGFubmVsUXVhbGl0eSA9IDEwMDsKKwl9CisKK30KKworVk9JRCBNbG1lU2V0VHhSYXRlKAorCUlOIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCQlwRW50cnksCisJSU4gUFJUTVBfVFhfUkFURV9TV0lUQ0gJcFR4UmF0ZSkKK3sKKwlVQ0hBUglNYXhNb2RlID0gTU9ERV9PRkRNOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJTWF4TW9kZSA9IE1PREVfSFRHUkVFTkZJRUxEOworCisJaWYgKHBUeFJhdGUtPlNUQkMgJiYgKHBBZC0+U3RhQ2ZnLk1heEhUUGh5TW9kZS5maWVsZC5TVEJDKSAmJiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAyKSkKKwkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNUQkMgPSBTVEJDX1VTRTsKKwllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCXBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TVEJDID0gU1RCQ19OT05FOworCisJaWYgKHBUeFJhdGUtPkN1cnJNQ1MgPCBNQ1NfQVVUTykKKwkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBUeFJhdGUtPkN1cnJNQ1M7CisKKwlpZiAocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUyA+IDcpCisJCXBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TVEJDID0gU1RCQ19OT05FOworCisgICAJaWYgKEFESE9DX09OKHBBZCkpCisJeworCQkvLyBJZiBwZWVyIGFkaG9jIGlzIGItb25seSBtb2RlLCB3ZSBjYW4ndCBzZW5kIDExZyByYXRlLgorCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsKKwkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuU1RCQwk9IFNUQkNfTk9ORTsKKworCQkvLworCQkvLyBGb3IgQWRob2MgTU9ERV9DQ0ssIGRyaXZlciB3aWxsIHVzZSBBZGhvY0JPbmx5Sm9pbmVkIGZsYWcgdG8gcm9sbCBiYWNrIHRvIEIgb25seSBpZiBuZWNlc3NhcnkKKwkJLy8KKwkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERQk9IHBUeFJhdGUtPk1vZGU7CisJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSTsKKwkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTCQk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisKKwkJLy8gUGF0Y2ggc3BlZWQgZXJyb3IgaW4gc3RhdHVzIHBhZ2UKKwkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFOworCX0KKwllbHNlCisJeworCQlpZiAocFR4UmF0ZS0+TW9kZSA8PSBNYXhNb2RlKQorCQkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBwVHhSYXRlLT5Nb2RlOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmIChwVHhSYXRlLT5TaG9ydEdJICYmIChwQWQtPlN0YUNmZy5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSkpCisJCQlwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzQwMDsKKwkJZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSBHSV84MDA7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJLy8gUmVleGFtIGVhY2ggYmFuZHdpZHRoJ3MgU0dJIHN1cHBvcnQuCisJCWlmIChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9PSBHSV80MDApCisJCXsKKwkJCWlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuQlcgPT0gQldfMjApICYmICghQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19TR0kyMF9DQVBBQkxFKSkpCisJCQkJcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSBHSV84MDA7CisJCQlpZiAoKHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLkJXID09IEJXXzQwKSAmJiAoIUNMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfU0dJNDBfQ0FQQUJMRSkpKQorCQkJCXBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gR0lfODAwOworCQl9CisKKwkJLy8gVHVybiBSVFMvQ1RTIHJhdGUgdG8gNk1icHMuCisJCWlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID09IDApICYmIChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTICE9IDApKQorCQl7CisJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MJCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUzsKKwkJCWlmIChwQWQtPk1hY1RhYi5mQW55QkFTZXNzaW9uKQorCQkJeworCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgSFRfRk9SQ0VSVFNDVFMsIEFMTE5fU0VUUFJPVEVDVCwgVFJVRSwgKEJPT0xFQU4pcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlLCBBTExOX1NFVFBST1RFQ1QsIFRSVUUsIChCT09MRUFOKXBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKChwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPT0gOCkgJiYgKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MgIT0gOCkpCisJCXsKKwkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUwkJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQkJaWYgKHBBZC0+TWFjVGFiLmZBbnlCQVNlc3Npb24pCisJCQl7CisJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBIVF9GT1JDRVJUU0NUUywgQUxMTl9TRVRQUk9URUNULCBUUlVFLCAoQk9PTEVBTilwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUsIEFMTE5fU0VUUFJPVEVDVCwgVFJVRSwgKEJPT0xFQU4pcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoKHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyAhPSAwKSAmJiAocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUyA9PSAwKSkKKwkJeworCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBIVF9SVFNDVFNfNk0sIEFMTE5fU0VUUFJPVEVDVCwgVFJVRSwgKEJPT0xFQU4pcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCk7CisKKwkJfQorCQllbHNlIGlmICgocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTICE9IDgpICYmIChwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTID09IDgpKQorCQl7CisJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIEhUX1JUU0NUU182TSwgQUxMTl9TRVRQUk9URUNULCBUUlVFLCAoQk9PTEVBTilwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50KTsKKwkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLlNUQkMJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuU1RCQzsKKwkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSQk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJOworCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MJCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUzsKKwkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERQk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NT0RFOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlpZiAoKHBBZC0+U3RhQ2ZnLk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID09IE1PREVfSFRHUkVFTkZJRUxEKSAmJgorCQkgICAgcEFkLT5XSUZJdGVzdGJlZC5iR3JlZW5GaWVsZCkKKwkJICAgIHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUR1JFRU5GSUVMRDsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwl9CisKKwlwQWQtPkxhc3RUeFJhdGUgPSAoVVNIT1JUKShwRW50cnktPkhUUGh5TW9kZS53b3JkKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIHJvdXRpbmUgY2FsY3VsYXRlcyB0aGUgYWN1bXVsYXRlZCBUeFBFUiBvZiBlYXhoIFR4UmF0ZS4gQW5kCisJCWFjY29yZGluZyB0byB0aGUgY2FsY3VsYXRpb24gcmVzdWx0LCBjaGFuZ2UgQ29tbW9uQ2ZnLlR4UmF0ZSB3aGljaAorCQlpcyB0aGUgc3RhYmxlIFRYIFJhdGUgd2UgZXhwZWN0IHRoZSBSYWRpbyBzaXR1YXRpb24gY291bGQgc3VzdGFpbmVkLgorCisJCUNvbW1vbkNmZy5UeFJhdGUgd2lsbCBjaGFuZ2UgZHluYW1pY2FsbHkgd2l0aGluIHtSQVRFXzEvUkFURV82LCBNYXhUeFJhdGV9CisJT3V0cHV0OgorCQlDb21tb25DZmcuVHhSYXRlIC0KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTk9URToKKwkJY2FsbCB0aGlzIHJvdXRpbmUgZXZlcnkgc2Vjb25kCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lRHluYW1pY1R4UmF0ZVN3aXRjaGluZygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVQ0hBUgkJCQkJVXBSYXRlSWR4ID0gMCwgRG93blJhdGVJZHggPSAwLCBDdXJyUmF0ZUlkeDsKKwlVTE9ORwkJCQkJaSwgQWNjdVR4VG90YWxDbnQgPSAwLCBUeFRvdGFsQ250OworCVVMT05HCQkJCQlUeEVycm9yUmF0aW8gPSAwOworCUJPT0xFQU4JCQkJCWJUeFJhdGVDaGFuZ2VkLCBiVXBncmFkZVF1YWxpdHkgPSBGQUxTRTsKKwlQUlRNUF9UWF9SQVRFX1NXSVRDSAlwQ3VyclR4UmF0ZSwgcE5leHRUeFJhdGUgPSBOVUxMOworCVBVQ0hBUgkJCQkJcFRhYmxlOworCVVDSEFSCQkJCQlUYWJsZVNpemUgPSAwOworCVVDSEFSCQkJCQlJbml0VHhSYXRlSWR4ID0gMCwgVHJhaW5VcCwgVHJhaW5Eb3duOworCUNIQVIJCQkJCVJzc2ksIFJzc2lPZmZzZXQgPSAwOworCVRYX1NUQV9DTlQxX1NUUlVDCQlTdGFUeDE7CisJVFhfU1RBX0NOVDBfU1RSVUMJCVR4U3RhQ250MDsKKwlVTE9ORwkJCQkJVHhSZXRyYW5zbWl0ID0gMCwgVHhTdWNjZXNzID0gMCwgVHhGYWlsQ291bnQgPSAwOworCU1BQ19UQUJMRV9FTlRSWQkJCSpwRW50cnk7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJaWYgKEFURV9PTihwQWQpKQorCXsKKwkJcmV0dXJuOworCX0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwkvLworCS8vIHdhbGsgdGhyb3VnaCBNQUMgdGFibGUsIHNlZSBpZiBuZWVkIHRvIGNoYW5nZSBBUCdzIFRYIHJhdGUgdG93YXJkIGVhY2ggZW50cnkKKwkvLworICAgCWZvciAoaSA9IDE7IGkgPCBNQVhfTEVOX09GX01BQ19UQUJMRTsgaSsrKQorCXsKKwkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbaV07CisKKwkJLy8gY2hlY2sgaWYgdGhpcyBlbnRyeSBuZWVkIHRvIHN3aXRjaCByYXRlIGF1dG9tYXRpY2FsbHkKKwkJaWYgKFJUTVBDaGVja0VudHJ5RW5hYmxlQXV0b1JhdGVTd2l0Y2gocEFkLCBwRW50cnkpID09IEZBTFNFKQorCQkJY29udGludWU7CisKKwkJaWYgKChwQWQtPk1hY1RhYi5TaXplID09IDEpIHx8IChwRW50cnktPlZhbGlkQXNEbHMpKQorCQl7CisJCQlSc3NpID0gUlRNUE1heFJzc2kocEFkLAorCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTAsCisJCQkJCQkJICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMSwKKwkJCQkJCQkgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kyKTsKKworCQkJLy8gVXBkYXRlIHN0YXRpc3RpYyBjb3VudGVyCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQwLCAmVHhTdGFDbnQwLndvcmQpOworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMSwgJlN0YVR4MS53b3JkKTsKKwkJCXBBZC0+YlVwZGF0ZUJjbkNudERvbmUgPSBUUlVFOworCQkJVHhSZXRyYW5zbWl0ID0gU3RhVHgxLmZpZWxkLlR4UmV0cmFuc21pdDsKKwkJCVR4U3VjY2VzcyA9IFN0YVR4MS5maWVsZC5UeFN1Y2Nlc3M7CisJCQlUeEZhaWxDb3VudCA9IFR4U3RhQ250MC5maWVsZC5UeEZhaWxDb3VudDsKKwkJCVR4VG90YWxDbnQgPSBUeFJldHJhbnNtaXQgKyBUeFN1Y2Nlc3MgKyBUeEZhaWxDb3VudDsKKworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCArPSBTdGFUeDEuZmllbGQuVHhSZXRyYW5zbWl0OworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ICs9IFN0YVR4MS5maWVsZC5UeFN1Y2Nlc3M7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RmFpbENvdW50ICs9IFR4U3RhQ250MC5maWVsZC5UeEZhaWxDb3VudDsKKwkJCXBBZC0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC51Lkxvd1BhcnQgKz0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwkJCXBBZC0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQudS5Mb3dQYXJ0ICs9IFN0YVR4MS5maWVsZC5UeFJldHJhbnNtaXQ7CisJCQlwQWQtPldsYW5Db3VudGVycy5GYWlsZWRDb3VudC51Lkxvd1BhcnQgKz0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCisJCQkvLyBpZiBubyB0cmFmZmljIGluIHRoZSBwYXN0IDEtc2VjIHBlcmlvZCwgZG9uJ3QgY2hhbmdlIFRYIHJhdGUsCisJCQkvLyBidXQgY2xlYXIgYWxsIGJhZCBoaXN0b3J5LiBiZWNhdXNlIHRoZSBiYWQgaGlzdG9yeSBtYXkgYWZmZWN0IHRoZSBuZXh0CisJCQkvLyBDaGFyaW90IHRocm91Z2hwdXQgdGVzdAorCQkJQWNjdVR4VG90YWxDbnQgPSBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKworCQkJCQkJIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhSZXRyeU9rQ291bnQgKworCQkJCQkJIHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhGYWlsQ291bnQ7CisKKwkJCWlmIChUeFRvdGFsQ250KQorCQkJCVR4RXJyb3JSYXRpbyA9ICgoVHhSZXRyYW5zbWl0ICsgVHhGYWlsQ291bnQpICogMTAwKSAvIFR4VG90YWxDbnQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoSU5GUkFfT04ocEFkKSAmJiAoaSA9PSAxKSkKKwkJCQlSc3NpID0gUlRNUE1heFJzc2kocEFkLAorCQkJCQkJCQkgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kwLAorCQkJCQkJCQkgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxLAorCQkJCQkJCQkgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kyKTsKKwkJCWVsc2UKKwkJCQlSc3NpID0gUlRNUE1heFJzc2kocEFkLAorCQkJCQkJCQkgICBwRW50cnktPlJzc2lTYW1wbGUuQXZnUnNzaTAsCisJCQkJCQkJCSAgIHBFbnRyeS0+UnNzaVNhbXBsZS5BdmdSc3NpMSwKKwkJCQkJCQkJICAgcEVudHJ5LT5Sc3NpU2FtcGxlLkF2Z1Jzc2kyKTsKKworCQkJVHhUb3RhbENudCA9IHBFbnRyeS0+T25lU2VjVHhOb1JldHJ5T2tDb3VudCArCisJCQkJIHBFbnRyeS0+T25lU2VjVHhSZXRyeU9rQ291bnQgKworCQkJCSBwRW50cnktPk9uZVNlY1R4RmFpbENvdW50OworCisJCQlpZiAoVHhUb3RhbENudCkKKwkJCQlUeEVycm9yUmF0aW8gPSAoKHBFbnRyeS0+T25lU2VjVHhSZXRyeU9rQ291bnQgKyBwRW50cnktPk9uZVNlY1R4RmFpbENvdW50KSAqIDEwMCkgLyBUeFRvdGFsQ250OworCQl9CisKKwkJQ3VyclJhdGVJZHggPSBwRW50cnktPkN1cnJUeFJhdGVJbmRleDsKKworCQlNbG1lU2VsZWN0VHhSYXRlVGFibGUocEFkLCBwRW50cnksICZwVGFibGUsICZUYWJsZVNpemUsICZJbml0VHhSYXRlSWR4KTsKKworCQlpZiAoQ3VyclJhdGVJZHggPj0gVGFibGVTaXplKQorCQl7CisJCQlDdXJyUmF0ZUlkeCA9IFRhYmxlU2l6ZSAtIDE7CisJCX0KKworCQkvLyBXaGVuIHN3aXRjaCBmcm9tIEZpeGVkIHJhdGUgLT4gYXV0byByYXRlLCB0aGUgUkVBTCBUWCByYXRlIG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4LgorCQkvLyBTbyBuZWVkIHRvIHN5bmMgaGVyZS4KKwkJcEN1cnJUeFJhdGUgPSAoUFJUTVBfVFhfUkFURV9TV0lUQ0gpICZwVGFibGVbKEN1cnJSYXRlSWR4KzEpKjVdOworCQlpZiAoKHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyAhPSBwQ3VyclR4UmF0ZS0+Q3Vyck1DUykKKwkJCS8vJiYgKHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID09IFRSVUUpCisJCQkpCisJCXsKKworCQkJLy8gTmVlZCB0byBzeW5jIFJlYWwgVHggcmF0ZSBhbmQgb3VyIHJlY29yZC4KKwkJCS8vIFRoZW4gcmV0dXJuIGZvciBuZXh0IERSUy4KKwkJCXBDdXJyVHhSYXRlID0gKFBSVE1QX1RYX1JBVEVfU1dJVENIKSAmcFRhYmxlWyhJbml0VHhSYXRlSWR4KzEpKjVdOworCQkJcEVudHJ5LT5DdXJyVHhSYXRlSW5kZXggPSBJbml0VHhSYXRlSWR4OworCQkJTWxtZVNldFR4UmF0ZShwQWQsIHBFbnRyeSwgcEN1cnJUeFJhdGUpOworCisJCQkvLyByZXNldCBhbGwgT25lU2VjVHggY291bnRlcnMKKwkJCVJFU0VUX09ORV9TRUNfVFhfQ05UKHBFbnRyeSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8vIGRlY2lkZSB0aGUgbmV4dCB1cGdyYWRlIHJhdGUgYW5kIGRvd25ncmFkZSByYXRlLCBpZiBhbnkKKwkJaWYgKChDdXJyUmF0ZUlkeCA+IDApICYmIChDdXJyUmF0ZUlkeCA8IChUYWJsZVNpemUgLSAxKSkpCisJCXsKKwkJCVVwUmF0ZUlkeCA9IEN1cnJSYXRlSWR4ICsgMTsKKwkJCURvd25SYXRlSWR4ID0gQ3VyclJhdGVJZHggLTE7CisJCX0KKwkJZWxzZSBpZiAoQ3VyclJhdGVJZHggPT0gMCkKKwkJeworCQkJVXBSYXRlSWR4ID0gQ3VyclJhdGVJZHggKyAxOworCQkJRG93blJhdGVJZHggPSBDdXJyUmF0ZUlkeDsKKwkJfQorCQllbHNlIGlmIChDdXJyUmF0ZUlkeCA9PSAoVGFibGVTaXplIC0gMSkpCisJCXsKKwkJCVVwUmF0ZUlkeCA9IEN1cnJSYXRlSWR4OworCQkJRG93blJhdGVJZHggPSBDdXJyUmF0ZUlkeCAtIDE7CisJCX0KKworCQlwQ3VyclR4UmF0ZSA9IChQUlRNUF9UWF9SQVRFX1NXSVRDSCkgJnBUYWJsZVsoQ3VyclJhdGVJZHgrMSkqNV07CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJaWYgKChSc3NpID4gLTY1KSAmJiAocEN1cnJUeFJhdGUtPk1vZGUgPj0gTU9ERV9IVE1JWCkpCisJCXsKKwkJCVRyYWluVXAJCT0gKHBDdXJyVHhSYXRlLT5UcmFpblVwICsgKHBDdXJyVHhSYXRlLT5UcmFpblVwID4+IDEpKTsKKwkJCVRyYWluRG93bgk9IChwQ3VyclR4UmF0ZS0+VHJhaW5Eb3duICsgKHBDdXJyVHhSYXRlLT5UcmFpbkRvd24gPj4gMSkpOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJeworCQkJVHJhaW5VcAkJPSBwQ3VyclR4UmF0ZS0+VHJhaW5VcDsKKwkJCVRyYWluRG93bgk9IHBDdXJyVHhSYXRlLT5UcmFpbkRvd247CisJCX0KKworCQkvL3BBZC0+RHJzQ291bnRlcnMuTGFzdFRpbWVUeFJhdGVDaGFuZ2VBY3Rpb24gPSBwQWQtPkRyc0NvdW50ZXJzLkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb247CisKKwkJLy8KKwkJLy8gS2VlcCB0aGUgbGFzdCB0aW1lIFR4UmF0ZUNoYW5nZUFjdGlvbiBzdGF0dXMuCisJCS8vCisJCXBFbnRyeS0+TGFzdFRpbWVUeFJhdGVDaGFuZ2VBY3Rpb24gPSBwRW50cnktPkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb247CisKKworCisJCS8vCisJCS8vIENBU0UgMS4gd2hlbiBUWCBzYW1wbGVzIGFyZSBmZXdlciB0aGFuIDE1LCB0aGVuIGRlY2lkZSBUWCByYXRlIHNvbGVseSBvbiBSU1NJCisJCS8vICAgICAgICAgKGNyaXRlcmlhIGNvcGllZCBmcm9tIFJUMjUwMCBmb3IgTmV0b3BpYSBjYXNlKQorCQkvLworCQlpZiAoVHhUb3RhbENudCA8PSAxNSkKKwkJeworCQkJQ0hBUglpZHggPSAwOworCQkJVUNIQVIJVHhSYXRlSWR4OworCQkJLy9VQ0hBUglNQ1MwID0gMCwgTUNTMSA9IDAsIE1DUzIgPSAwLCBNQ1MzID0gMCwgTUNTNCA9IDAsIE1DUzcgPSAwLCBNQ1MxMiA9IDAsIE1DUzEzID0gMCwgTUNTMTQgPSAwLCBNQ1MxNSA9IDA7CisJCQlVQ0hBUglNQ1MwID0gMCwgTUNTMSA9IDAsIE1DUzIgPSAwLCBNQ1MzID0gMCwgTUNTNCA9IDAsICBNQ1M1ID0wLCBNQ1M2ID0gMCwgTUNTNyA9IDA7CisJICAgICAgICBVQ0hBUglNQ1MxMiA9IDAsIE1DUzEzID0gMCwgTUNTMTQgPSAwLCBNQ1MxNSA9IDA7CisJCQlVQ0hBUglNQ1MyMCA9IDAsIE1DUzIxID0gMCwgTUNTMjIgPSAwLCBNQ1MyMyA9IDA7IC8vIDMqMworCisJCQkvLyBjaGVjayB0aGUgZXhpc3RlbmNlIGFuZCBpbmRleCBvZiBlYWNoIG5lZWRlZCBNQ1MKKwkJCXdoaWxlIChpZHggPCBwVGFibGVbMF0pCisJCQl7CisJCQkJcEN1cnJUeFJhdGUgPSAoUFJUTVBfVFhfUkFURV9TV0lUQ0gpICZwVGFibGVbKGlkeCsxKSo1XTsKKworCQkJCWlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMCkKKwkJCQl7CisJCQkJCU1DUzAgPSBpZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18xKQorCQkJCXsKKwkJCQkJTUNTMSA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzIpCisJCQkJeworCQkJCQlNQ1MyID0gaWR4OworCQkJCX0KKwkJCQllbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMykKKwkJCQl7CisJCQkJCU1DUzMgPSBpZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU180KQorCQkJCXsKKwkJCQkJTUNTNCA9IGlkeDsKKwkJCQl9CisJICAgICAgICAgICAgZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzUpCisJICAgICAgICAgICAgeworCSAgICAgICAgICAgICAgICBNQ1M1ID0gaWR4OworCSAgICAgICAgICAgIH0KKwkgICAgICAgICAgICBlbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfNikKKwkgICAgICAgICAgICB7CisJICAgICAgICAgICAgICAgIE1DUzYgPSBpZHg7CisJICAgICAgICAgICAgfQorCQkJCS8vZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzcpCisJCQkJZWxzZSBpZiAoKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU183KSAmJiAocEN1cnJUeFJhdGUtPlNob3J0R0kgPT0gR0lfODAwKSkJLy8gcHJldmVudCB0aGUgaGlnaGVzdCBNQ1MgdXNpbmcgc2hvcnQgR0kgd2hlbiAxVCBhbmQgbG93IHRocm91Z2hwdXQKKwkJCQl7CisJCQkJCU1DUzcgPSBpZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18xMikKKwkJCQl7CisJCQkJCU1DUzEyID0gaWR4OworCQkJCX0KKwkJCQllbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMTMpCisJCQkJeworCQkJCQlNQ1MxMyA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzE0KQorCQkJCXsKKwkJCQkJTUNTMTQgPSBpZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMTUpICYmIChwQ3VyclR4UmF0ZS0+U2hvcnRHSSA9PSBHSV84MDApKQorCQkJCXsKKwkJCQkJTUNTMTUgPSBpZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18yMCkgLy8gMyozCisJCQkJeworCQkJCQlNQ1MyMCA9IGlkeDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEN1cnJUeFJhdGUtPkN1cnJNQ1MgPT0gTUNTXzIxKQorCQkJCXsKKwkJCQkJTUNTMjEgPSBpZHg7CisJCQkJfQorCQkJCWVsc2UgaWYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTID09IE1DU18yMikKKwkJCQl7CisJCQkJCU1DUzIyID0gaWR4OworCQkJCX0KKwkJCQllbHNlIGlmIChwQ3VyclR4UmF0ZS0+Q3Vyck1DUyA9PSBNQ1NfMjMpCisJCQkJeworCQkJCQlNQ1MyMyA9IGlkeDsKKwkJCQl9CisJCQkJaWR4ICsrOworCQkJfQorCisJCQlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KQorCQkJeworCQkJCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuRXh0ZXJuYWxMTkFGb3JHKQorCQkJCXsKKwkJCQkJUnNzaU9mZnNldCA9IDI7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVJzc2lPZmZzZXQgPSA1OworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAocEFkLT5OaWNDb25maWcyLmZpZWxkLkV4dGVybmFsTE5BRm9yQSkKKwkJCQl7CisJCQkJCVJzc2lPZmZzZXQgPSA1OworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSc3NpT2Zmc2V0ID0gODsKKwkJCQl9CisJCQl9CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkvKmlmIChNQ1MxNSkqLworCQkJaWYgKChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFCR04zUykgfHwKKwkJCQkocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExTjNTKSB8fAorCQkJCShwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlKSkKKwkJCXsvLyBOIG1vZGUgd2l0aCAzIHN0cmVhbSAvLyAzKjMKKwkJCQlpZiAoTUNTMjMgJiYgKFJzc2kgPj0gLTcwKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTU7CisJCQkJZWxzZSBpZiAoTUNTMjIgJiYgKFJzc2kgPj0gLTcyKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTQ7CisgICAgICAgIAkgICAgZWxzZSBpZiAoTUNTMjEgJiYgKFJzc2kgPj0gLTc2KSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTM7CisJCQkJZWxzZSBpZiAoTUNTMjAgJiYgKFJzc2kgPj0gLTc4KSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTI7CisJCQllbHNlIGlmIChNQ1M0ICYmIChSc3NpID49IC04MikpCisJCQkJVHhSYXRlSWR4ID0gTUNTNDsKKwkJCWVsc2UgaWYgKE1DUzMgJiYgKFJzc2kgPj0gLTg0KSkKKwkJCQlUeFJhdGVJZHggPSBNQ1MzOworCQkJZWxzZSBpZiAoTUNTMiAmJiAoUnNzaSA+PSAtODYpKQorCQkJCVR4UmF0ZUlkeCA9IE1DUzI7CisJCQllbHNlIGlmIChNQ1MxICYmIChSc3NpID49IC04OCkpCisJCQkJVHhSYXRlSWR4ID0gTUNTMTsKKwkJCWVsc2UKKwkJCQlUeFJhdGVJZHggPSBNQ1MwOworCQl9CisvLwkJZWxzZSBpZiAoKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMUJHTjJTKSB8fCAocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNGb3JBQmFuZCkgfHwocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExTjJTKSB8fChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFOMlNGb3JBQmFuZCkgfHwgKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUpKQorCQllbHNlIGlmICgocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExQkdOMlMpIHx8IChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFCR04yU0ZvckFCYW5kKSB8fChwVGFibGUgPT0gUmF0ZVN3aXRjaFRhYmxlMTFOMlMpIHx8KHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMU4yU0ZvckFCYW5kKSkgLy8gMyozCisJCQl7Ly8gTiBtb2RlIHdpdGggMiBzdHJlYW0KKwkJCQlpZiAoTUNTMTUgJiYgKFJzc2kgPj0gKC03MCtSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzE1OworCQkJCWVsc2UgaWYgKE1DUzE0ICYmIChSc3NpID49ICgtNzIrUnNzaU9mZnNldCkpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MxNDsKKwkJCQllbHNlIGlmIChNQ1MxMyAmJiAoUnNzaSA+PSAoLTc2K1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMTM7CisJCQkJZWxzZSBpZiAoTUNTMTIgJiYgKFJzc2kgPj0gKC03OCtSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzEyOworCQkJCWVsc2UgaWYgKE1DUzQgJiYgKFJzc2kgPj0gKC04MitSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzQ7CisJCQkJZWxzZSBpZiAoTUNTMyAmJiAoUnNzaSA+PSAoLTg0K1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMzsKKwkJCQllbHNlIGlmIChNQ1MyICYmIChSc3NpID49ICgtODYrUnNzaU9mZnNldCkpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MyOworCQkJCWVsc2UgaWYgKE1DUzEgJiYgKFJzc2kgPj0gKC04OCtSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzE7CisJCQkJZWxzZQorCQkJCQlUeFJhdGVJZHggPSBNQ1MwOworCQkJfQorCQkJZWxzZSBpZiAoKHBUYWJsZSA9PSBSYXRlU3dpdGNoVGFibGUxMUJHTjFTKSB8fCAocFRhYmxlID09IFJhdGVTd2l0Y2hUYWJsZTExTjFTKSkKKwkJCXsvLyBOIG1vZGUgd2l0aCAxIHN0cmVhbQorCQkJCWlmIChNQ1M3ICYmIChSc3NpID4gKC03MitSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzc7CisJCQkJZWxzZSBpZiAoTUNTNiAmJiAoUnNzaSA+ICgtNzQrUnNzaU9mZnNldCkpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1M2OworCQkJCWVsc2UgaWYgKE1DUzUgJiYgKFJzc2kgPiAoLTc3K1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTNTsKKwkJCQllbHNlIGlmIChNQ1M0ICYmIChSc3NpID4gKC03OStSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzQ7CisJCQkJZWxzZSBpZiAoTUNTMyAmJiAoUnNzaSA+ICgtODErUnNzaU9mZnNldCkpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1MzOworCQkJCWVsc2UgaWYgKE1DUzIgJiYgKFJzc2kgPiAoLTgzK1Jzc2lPZmZzZXQpKSkKKwkJCQkJVHhSYXRlSWR4ID0gTUNTMjsKKwkJCQllbHNlIGlmIChNQ1MxICYmIChSc3NpID4gKC04NitSc3NpT2Zmc2V0KSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzE7CisJCQkJZWxzZQorCQkJCQlUeFJhdGVJZHggPSBNQ1MwOworCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJey8vIExlZ2FjeSBtb2RlCisJCQkJaWYgKE1DUzcgJiYgKFJzc2kgPiAtNzApKQorCQkJCQlUeFJhdGVJZHggPSBNQ1M3OworCQkJCWVsc2UgaWYgKE1DUzYgJiYgKFJzc2kgPiAtNzQpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1M2OworCQkJCWVsc2UgaWYgKE1DUzUgJiYgKFJzc2kgPiAtNzgpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1M1OworCQkJCWVsc2UgaWYgKE1DUzQgJiYgKFJzc2kgPiAtODIpKQorCQkJCQlUeFJhdGVJZHggPSBNQ1M0OworCQkJCWVsc2UgaWYgKE1DUzQgPT0gMCkJLy8gZm9yIEItb25seSBtb2RlCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzM7CisJCQkJZWxzZSBpZiAoTUNTMyAmJiAoUnNzaSA+IC04NSkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzM7CisJCQkJZWxzZSBpZiAoTUNTMiAmJiAoUnNzaSA+IC04NykpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzI7CisJCQkJZWxzZSBpZiAoTUNTMSAmJiAoUnNzaSA+IC05MCkpCisJCQkJCVR4UmF0ZUlkeCA9IE1DUzE7CisJCQkJZWxzZQorCQkJCQlUeFJhdGVJZHggPSBNQ1MwOworCQkJfQorCisJLy8JCWlmIChUeFJhdGVJZHggIT0gcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXgpCisJCQl7CisJCQkJcEVudHJ5LT5DdXJyVHhSYXRlSW5kZXggPSBUeFJhdGVJZHg7CisJCQkJcE5leHRUeFJhdGUgPSAoUFJUTVBfVFhfUkFURV9TV0lUQ0gpICZwVGFibGVbKHBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4KzEpKjVdOworCQkJCU1sbWVTZXRUeFJhdGUocEFkLCBwRW50cnksIHBOZXh0VHhSYXRlKTsKKwkJCX0KKworCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LT5UeFF1YWxpdHksIHNpemVvZihVU0hPUlQpICogTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gpOworCQkJTmRpc1plcm9NZW1vcnkocEVudHJ5LT5QRVIsIHNpemVvZihVQ0hBUikgKiBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7CisJCQlwRW50cnktPmZMYXN0U2VjQWNjb3JkaW5nUlNTSSA9IFRSVUU7CisJCQkvLyByZXNldCBhbGwgT25lU2VjVHggY291bnRlcnMKKwkJCVJFU0VUX09ORV9TRUNfVFhfQ05UKHBFbnRyeSk7CisKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHBFbnRyeS0+Zkxhc3RTZWNBY2NvcmRpbmdSU1NJID09IFRSVUUpCisJCXsKKwkJCXBFbnRyeS0+Zkxhc3RTZWNBY2NvcmRpbmdSU1NJID0gRkFMU0U7CisJCQlwRW50cnktPkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPSAwOworCQkJLy8gcmVzZXQgYWxsIE9uZVNlY1R4IGNvdW50ZXJzCisJCQlSRVNFVF9PTkVfU0VDX1RYX0NOVChwRW50cnkpOworCisJCQljb250aW51ZTsKKwkJfQorCisJCWRvCisJCXsKKwkJCUJPT0xFQU4JYlRyYWluVXBEb3duID0gRkFMU0U7CisKKwkJCXBFbnRyeS0+Q3VyclR4UmF0ZVN0YWJsZVRpbWUgKys7CisKKwkJCS8vIGRvd25ncmFkZSBUWCBxdWFsaXR5IGlmIFBFUiA+PSBSYXRlLURvd24gdGhyZXNob2xkCisJCQlpZiAoVHhFcnJvclJhdGlvID49IFRyYWluRG93bikKKwkJCXsKKwkJCQliVHJhaW5VcERvd24gPSBUUlVFOworCQkJCXBFbnRyeS0+VHhRdWFsaXR5W0N1cnJSYXRlSWR4XSA9IERSU19UWF9RVUFMSVRZX1dPUlNUX0JPVU5EOworCQkJfQorCQkJLy8gdXBncmFkZSBUWCBxdWFsaXR5IGlmIFBFUiA8PSBSYXRlLVVwIHRocmVzaG9sZAorCQkJZWxzZSBpZiAoVHhFcnJvclJhdGlvIDw9IFRyYWluVXApCisJCQl7CisJCQkJYlRyYWluVXBEb3duID0gVFJVRTsKKwkJCQliVXBncmFkZVF1YWxpdHkgPSBUUlVFOworCQkJCWlmIChwRW50cnktPlR4UXVhbGl0eVtDdXJyUmF0ZUlkeF0pCisJCQkJCXBFbnRyeS0+VHhRdWFsaXR5W0N1cnJSYXRlSWR4XSAtLTsgIC8vIHF1YWxpdHkgdmVyeSBnb29kIGluIEN1cnJSYXRlCisKKwkJCQlpZiAocEVudHJ5LT5UeFJhdGVVcFBlbmFsdHkpCisJCQkJCXBFbnRyeS0+VHhSYXRlVXBQZW5hbHR5IC0tOworCQkJCWVsc2UgaWYgKHBFbnRyeS0+VHhRdWFsaXR5W1VwUmF0ZUlkeF0pCisJCQkJCXBFbnRyeS0+VHhRdWFsaXR5W1VwUmF0ZUlkeF0gLS07ICAgIC8vIG1heSBpbXByb3ZlIG5leHQgVVAgcmF0ZSdzIHF1YWxpdHkKKwkJCX0KKworCQkJcEVudHJ5LT5QRVJbQ3VyclJhdGVJZHhdID0gKFVDSEFSKVR4RXJyb3JSYXRpbzsKKworCQkJaWYgKGJUcmFpblVwRG93bikKKwkJCXsKKwkJCQkvLyBwZXJmb3JtIERSUyAtIGNvbnNpZGVyIFR4UmF0ZSBEb3duIGZpcnN0LCB0aGVuIHJhdGUgdXAuCisJCQkJaWYgKChDdXJyUmF0ZUlkeCAhPSBEb3duUmF0ZUlkeCkgJiYgKHBFbnRyeS0+VHhRdWFsaXR5W0N1cnJSYXRlSWR4XSA+PSBEUlNfVFhfUVVBTElUWV9XT1JTVF9CT1VORCkpCisJCQkJeworCQkJCQlwRW50cnktPkN1cnJUeFJhdGVJbmRleCA9IERvd25SYXRlSWR4OworCQkJCX0KKwkJCQllbHNlIGlmICgoQ3VyclJhdGVJZHggIT0gVXBSYXRlSWR4KSAmJiAocEVudHJ5LT5UeFF1YWxpdHlbVXBSYXRlSWR4XSA8PSAwKSkKKwkJCQl7CisJCQkJCXBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4ID0gVXBSYXRlSWR4OworCQkJCX0KKwkJCX0KKwkJfSB3aGlsZSAoRkFMU0UpOworCisJCS8vIGlmIHJhdGUtdXAgaGFwcGVuLCBjbGVhciBhbGwgYmFkIGhpc3Rvcnkgb2YgYWxsIFRYIHJhdGVzCisJCWlmIChwRW50cnktPkN1cnJUeFJhdGVJbmRleCA+IEN1cnJSYXRlSWR4KQorCQl7CisJCQlwRW50cnktPkN1cnJUeFJhdGVTdGFibGVUaW1lID0gMDsKKwkJCXBFbnRyeS0+VHhSYXRlVXBQZW5hbHR5ID0gMDsKKwkJCXBFbnRyeS0+TGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbiA9IDE7IC8vIHJhdGUgVVAKKwkJCU5kaXNaZXJvTWVtb3J5KHBFbnRyeS0+VHhRdWFsaXR5LCBzaXplb2YoVVNIT1JUKSAqIE1BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIKTsKKwkJCU5kaXNaZXJvTWVtb3J5KHBFbnRyeS0+UEVSLCBzaXplb2YoVUNIQVIpICogTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gpOworCisJCQkvLworCQkJLy8gRm9yIFR4UmF0ZSBmYXN0IHRyYWluIHVwCisJCQkvLworCQkJaWYgKCFwQWQtPlN0YUNmZy5TdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBUaW1lclJ1bm5pbmcpCisJCQl7CisJCQkJUlRNUFNldFRpbWVyKCZwQWQtPlN0YUNmZy5TdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBUaW1lciwgMTAwKTsKKworCQkJCXBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZyA9IFRSVUU7CisJCQl9CisJCQliVHhSYXRlQ2hhbmdlZCA9IFRSVUU7CisJCX0KKwkJLy8gaWYgcmF0ZS1kb3duIGhhcHBlbiwgb25seSBjbGVhciBEb3duUmF0ZSdzIGJhZCBoaXN0b3J5CisJCWVsc2UgaWYgKHBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4IDwgQ3VyclJhdGVJZHgpCisJCXsKKwkJCXBFbnRyeS0+Q3VyclR4UmF0ZVN0YWJsZVRpbWUgPSAwOworCQkJcEVudHJ5LT5UeFJhdGVVcFBlbmFsdHkgPSAwOyAgICAgICAgICAgLy8gbm8gcGVuYWx0eQorCQkJcEVudHJ5LT5MYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uID0gMjsgLy8gcmF0ZSBET1dOCisJCQlwRW50cnktPlR4UXVhbGl0eVtwRW50cnktPkN1cnJUeFJhdGVJbmRleF0gPSAwOworCQkJcEVudHJ5LT5QRVJbcEVudHJ5LT5DdXJyVHhSYXRlSW5kZXhdID0gMDsKKworCQkJLy8KKwkJCS8vIEZvciBUeFJhdGUgZmFzdCB0cmFpbiBkb3duCisJCQkvLworCQkJaWYgKCFwQWQtPlN0YUNmZy5TdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBUaW1lclJ1bm5pbmcpCisJCQl7CisJCQkJUlRNUFNldFRpbWVyKCZwQWQtPlN0YUNmZy5TdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBUaW1lciwgMTAwKTsKKworCQkJCXBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZyA9IFRSVUU7CisJCQl9CisJCQliVHhSYXRlQ2hhbmdlZCA9IFRSVUU7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwRW50cnktPkxhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24gPSAwOyAvLyByYXRlIG5vIGNoYW5nZQorCQkJYlR4UmF0ZUNoYW5nZWQgPSBGQUxTRTsKKwkJfQorCisJCXBFbnRyeS0+TGFzdFR4T2tDb3VudCA9IFR4U3VjY2VzczsKKworCQkvLyByZXNldCBhbGwgT25lU2VjVHggY291bnRlcnMKKwkJUkVTRVRfT05FX1NFQ19UWF9DTlQocEVudHJ5KTsKKworCQlwTmV4dFR4UmF0ZSA9IChQUlRNUF9UWF9SQVRFX1NXSVRDSCkgJnBUYWJsZVsocEVudHJ5LT5DdXJyVHhSYXRlSW5kZXgrMSkqNV07CisJCWlmIChiVHhSYXRlQ2hhbmdlZCAmJiBwTmV4dFR4UmF0ZSkKKwkJeworCQkJTWxtZVNldFR4UmF0ZShwQWQsIHBFbnRyeSwgcE5leHRUeFJhdGUpOworCQl9CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVN0YXRpb24gc2lkZSwgQXV0byBUeFJhdGUgZmFzdGVyIHRyYWluIHVwIHRpbWVyIGNhbGwgYmFjayBmdW5jdGlvbi4KKworCUFyZ3VtZW50czoKKwkJU3lzdGVtU3BlY2lmaWMxCQkJLSBOb3QgdXNlZC4KKwkJRnVuY3Rpb25Db250ZXh0CQkJLSBQb2ludGVyIHRvIG91ciBBZGFwdGVyIGNvbnRleHQuCisJCVN5c3RlbVNwZWNpZmljMgkJCS0gTm90IHVzZWQuCisJCVN5c3RlbVNwZWNpZmljMwkJCS0gTm90IHVzZWQuCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisJUFJUTVBfQURBUFRFUgkJCXBBZCA9IChQUlRNUF9BREFQVEVSKUZ1bmN0aW9uQ29udGV4dDsKKwlVQ0hBUgkJCQkJVXBSYXRlSWR4ID0gMCwgRG93blJhdGVJZHggPSAwLCBDdXJyUmF0ZUlkeCA9IDA7CisJVUxPTkcJCQkJCVR4VG90YWxDbnQ7CisJVUxPTkcJCQkJCVR4RXJyb3JSYXRpbyA9IDA7CisJQk9PTEVBTgkJCQkJYlR4UmF0ZUNoYW5nZWQ7IC8vLCBiVXBncmFkZVF1YWxpdHkgPSBGQUxTRTsKKwlQUlRNUF9UWF9SQVRFX1NXSVRDSAlwQ3VyclR4UmF0ZSwgcE5leHRUeFJhdGUgPSBOVUxMOworCVBVQ0hBUgkJCQkJcFRhYmxlOworCVVDSEFSCQkJCQlUYWJsZVNpemUgPSAwOworCVVDSEFSCQkJCQlJbml0VHhSYXRlSWR4ID0gMCwgVHJhaW5VcCwgVHJhaW5Eb3duOworCVRYX1NUQV9DTlQxX1NUUlVDCQlTdGFUeDE7CisJVFhfU1RBX0NOVDBfU1RSVUMJCVR4U3RhQ250MDsKKwlDSEFSCQkJCQlSc3NpLCByYXRpbzsKKwlVTE9ORwkJCQkJVHhSZXRyYW5zbWl0ID0gMCwgVHhTdWNjZXNzID0gMCwgVHhGYWlsQ291bnQgPSAwOworCU1BQ19UQUJMRV9FTlRSWQkJCSpwRW50cnk7CisJVUxPTkcJCQkJCWk7CisKKwlwQWQtPlN0YUNmZy5TdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBUaW1lclJ1bm5pbmcgPSBGQUxTRTsKKworICAgIC8vCisgICAgLy8gd2FsayB0aHJvdWdoIE1BQyB0YWJsZSwgc2VlIGlmIG5lZWQgdG8gY2hhbmdlIEFQJ3MgVFggcmF0ZSB0b3dhcmQgZWFjaCBlbnRyeQorICAgIC8vCisJZm9yIChpID0gMTsgaSA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFOyBpKyspCisJeworCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtpXTsKKworCQkvLyBjaGVjayBpZiB0aGlzIGVudHJ5IG5lZWQgdG8gc3dpdGNoIHJhdGUgYXV0b21hdGljYWxseQorCQlpZiAoUlRNUENoZWNrRW50cnlFbmFibGVBdXRvUmF0ZVN3aXRjaChwQWQsIHBFbnRyeSkgPT0gRkFMU0UpCisJCQljb250aW51ZTsKKworCQlpZiAoSU5GUkFfT04ocEFkKSAmJiAoaSA9PSAxKSkKKwkJCVJzc2kgPSBSVE1QTWF4UnNzaShwQWQsCisJCQkJCQkJICAgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCwKKwkJCQkJCQkgICBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxLAorCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTIpOworCQllbHNlCisJCQlSc3NpID0gUlRNUE1heFJzc2kocEFkLAorCQkJCQkJCSAgIHBFbnRyeS0+UnNzaVNhbXBsZS5BdmdSc3NpMCwKKwkJCQkJCQkgICBwRW50cnktPlJzc2lTYW1wbGUuQXZnUnNzaTEsCisJCQkJCQkJICAgcEVudHJ5LT5Sc3NpU2FtcGxlLkF2Z1Jzc2kyKTsKKworCQlDdXJyUmF0ZUlkeCA9IHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4OworCisJCQlNbG1lU2VsZWN0VHhSYXRlVGFibGUocEFkLCBwRW50cnksICZwVGFibGUsICZUYWJsZVNpemUsICZJbml0VHhSYXRlSWR4KTsKKworCQkvLyBkZWNpZGUgdGhlIG5leHQgdXBncmFkZSByYXRlIGFuZCBkb3duZ3JhZGUgcmF0ZSwgaWYgYW55CisJCWlmICgoQ3VyclJhdGVJZHggPiAwKSAmJiAoQ3VyclJhdGVJZHggPCAoVGFibGVTaXplIC0gMSkpKQorCQl7CisJCQlVcFJhdGVJZHggPSBDdXJyUmF0ZUlkeCArIDE7CisJCQlEb3duUmF0ZUlkeCA9IEN1cnJSYXRlSWR4IC0xOworCQl9CisJCWVsc2UgaWYgKEN1cnJSYXRlSWR4ID09IDApCisJCXsKKwkJCVVwUmF0ZUlkeCA9IEN1cnJSYXRlSWR4ICsgMTsKKwkJCURvd25SYXRlSWR4ID0gQ3VyclJhdGVJZHg7CisJCX0KKwkJZWxzZSBpZiAoQ3VyclJhdGVJZHggPT0gKFRhYmxlU2l6ZSAtIDEpKQorCQl7CisJCQlVcFJhdGVJZHggPSBDdXJyUmF0ZUlkeDsKKwkJCURvd25SYXRlSWR4ID0gQ3VyclJhdGVJZHggLSAxOworCQl9CisKKwkJcEN1cnJUeFJhdGUgPSAoUFJUTVBfVFhfUkFURV9TV0lUQ0gpICZwVGFibGVbKEN1cnJSYXRlSWR4KzEpKjVdOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmICgoUnNzaSA+IC02NSkgJiYgKHBDdXJyVHhSYXRlLT5Nb2RlID49IE1PREVfSFRNSVgpKQorCQl7CisJCQlUcmFpblVwCQk9IChwQ3VyclR4UmF0ZS0+VHJhaW5VcCArIChwQ3VyclR4UmF0ZS0+VHJhaW5VcCA+PiAxKSk7CisJCQlUcmFpbkRvd24JPSAocEN1cnJUeFJhdGUtPlRyYWluRG93biArIChwQ3VyclR4UmF0ZS0+VHJhaW5Eb3duID4+IDEpKTsKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCXsKKwkJCVRyYWluVXAJCT0gcEN1cnJUeFJhdGUtPlRyYWluVXA7CisJCQlUcmFpbkRvd24JPSBwQ3VyclR4UmF0ZS0+VHJhaW5Eb3duOworCQl9CisKKwkJaWYgKHBBZC0+TWFjVGFiLlNpemUgPT0gMSkKKwkJeworCQkJLy8gVXBkYXRlIHN0YXRpc3RpYyBjb3VudGVyCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQwLCAmVHhTdGFDbnQwLndvcmQpOworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMSwgJlN0YVR4MS53b3JkKTsKKworCQkJVHhSZXRyYW5zbWl0ID0gU3RhVHgxLmZpZWxkLlR4UmV0cmFuc21pdDsKKwkJCVR4U3VjY2VzcyA9IFN0YVR4MS5maWVsZC5UeFN1Y2Nlc3M7CisJCQlUeEZhaWxDb3VudCA9IFR4U3RhQ250MC5maWVsZC5UeEZhaWxDb3VudDsKKwkJCVR4VG90YWxDbnQgPSBUeFJldHJhbnNtaXQgKyBUeFN1Y2Nlc3MgKyBUeEZhaWxDb3VudDsKKworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCArPSBTdGFUeDEuZmllbGQuVHhSZXRyYW5zbWl0OworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ICs9IFN0YVR4MS5maWVsZC5UeFN1Y2Nlc3M7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RmFpbENvdW50ICs9IFR4U3RhQ250MC5maWVsZC5UeEZhaWxDb3VudDsKKwkJCXBBZC0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC51Lkxvd1BhcnQgKz0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwkJCXBBZC0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQudS5Mb3dQYXJ0ICs9IFN0YVR4MS5maWVsZC5UeFJldHJhbnNtaXQ7CisJCQlwQWQtPldsYW5Db3VudGVycy5GYWlsZWRDb3VudC51Lkxvd1BhcnQgKz0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCisJCQlpZiAoVHhUb3RhbENudCkKKwkJCQlUeEVycm9yUmF0aW8gPSAoKFR4UmV0cmFuc21pdCArIFR4RmFpbENvdW50KSAqIDEwMCkgLyBUeFRvdGFsQ250OworCQl9CisJCWVsc2UKKwkJeworCQkJVHhUb3RhbENudCA9IHBFbnRyeS0+T25lU2VjVHhOb1JldHJ5T2tDb3VudCArCisJCQkJIHBFbnRyeS0+T25lU2VjVHhSZXRyeU9rQ291bnQgKworCQkJCSBwRW50cnktPk9uZVNlY1R4RmFpbENvdW50OworCisJCQlpZiAoVHhUb3RhbENudCkKKwkJCQlUeEVycm9yUmF0aW8gPSAoKHBFbnRyeS0+T25lU2VjVHhSZXRyeU9rQ291bnQgKyBwRW50cnktPk9uZVNlY1R4RmFpbENvdW50KSAqIDEwMCkgLyBUeFRvdGFsQ250OworCQl9CisKKworCQkvLworCQkvLyBDQVNFIDEuIHdoZW4gVFggc2FtcGxlcyBhcmUgZmV3ZXIgdGhhbiAxNSwgdGhlbiBkZWNpZGUgVFggcmF0ZSBzb2xlbHkgb24gUlNTSQorCQkvLyAgICAgICAgIChjcml0ZXJpYSBjb3BpZWQgZnJvbSBSVDI1MDAgZm9yIE5ldG9waWEgY2FzZSkKKwkJLy8KKwkJaWYgKFR4VG90YWxDbnQgPD0gMTIpCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+RHJzQ291bnRlcnMuVHhRdWFsaXR5LCBzaXplb2YoVVNIT1JUKSAqIE1BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIKTsKKwkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+RHJzQ291bnRlcnMuUEVSLCBzaXplb2YoVUNIQVIpICogTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gpOworCisJCQlpZiAoKHBBZC0+RHJzQ291bnRlcnMuTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbiA9PSAxKSAmJiAoQ3VyclJhdGVJZHggIT0gRG93blJhdGVJZHgpKQorCQkJeworCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4ID0gRG93blJhdGVJZHg7CisJCQkJcEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHlbQ3VyclJhdGVJZHhdID0gRFJTX1RYX1FVQUxJVFlfV09SU1RfQk9VTkQ7CisJCQl9CisJCQllbHNlIGlmICgocEFkLT5EcnNDb3VudGVycy5MYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uID09IDIpICYmIChDdXJyUmF0ZUlkeCAhPSBVcFJhdGVJZHgpKQorCQkJeworCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4ID0gVXBSYXRlSWR4OworCQkJfQorCisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCJRdWlja0RSUzogVHhUb3RhbENudCA8PSAxNSwgdHJhaW4gYmFjayB0byBvcmlnaW5hbCByYXRlIFxuIikpOworCQkJcmV0dXJuOworCQl9CisKKwkJZG8KKwkJeworCQkJVUxPTkcgT25lU2VjVHhOb1JldHJ5T0tSYXRpb25Db3VudDsKKworCQkJaWYgKHBBZC0+RHJzQ291bnRlcnMuTGFzdFRpbWVUeFJhdGVDaGFuZ2VBY3Rpb24gPT0gMCkKKwkJCQlyYXRpbyA9IDU7CisJCQllbHNlCisJCQkJcmF0aW8gPSA0OworCisJCQkvLyBkb3duZ3JhZGUgVFggcXVhbGl0eSBpZiBQRVIgPj0gUmF0ZS1Eb3duIHRocmVzaG9sZAorCQkJaWYgKFR4RXJyb3JSYXRpbyA+PSBUcmFpbkRvd24pCisJCQl7CisJCQkJcEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHlbQ3VyclJhdGVJZHhdID0gRFJTX1RYX1FVQUxJVFlfV09SU1RfQk9VTkQ7CisJCQl9CisKKwkJCXBBZC0+RHJzQ291bnRlcnMuUEVSW0N1cnJSYXRlSWR4XSA9IChVQ0hBUilUeEVycm9yUmF0aW87CisKKwkJCU9uZVNlY1R4Tm9SZXRyeU9LUmF0aW9uQ291bnQgPSAoVHhTdWNjZXNzICogcmF0aW8pOworCisJCQkvLyBwZXJmb3JtIERSUyAtIGNvbnNpZGVyIFR4UmF0ZSBEb3duIGZpcnN0LCB0aGVuIHJhdGUgdXAuCisJCQlpZiAoKHBBZC0+RHJzQ291bnRlcnMuTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbiA9PSAxKSAmJiAoQ3VyclJhdGVJZHggIT0gRG93blJhdGVJZHgpKQorCQkJeworCQkJCWlmICgocEFkLT5EcnNDb3VudGVycy5MYXN0VHhPa0NvdW50ICsgMikgPj0gT25lU2VjVHhOb1JldHJ5T0tSYXRpb25Db3VudCkKKwkJCQl7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4ID0gRG93blJhdGVJZHg7CisJCQkJCXBBZC0+RHJzQ291bnRlcnMuVHhRdWFsaXR5W0N1cnJSYXRlSWR4XSA9IERSU19UWF9RVUFMSVRZX1dPUlNUX0JPVU5EOworCisJCQkJfQorCisJCQl9CisJCQllbHNlIGlmICgocEFkLT5EcnNDb3VudGVycy5MYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uID09IDIpICYmIChDdXJyUmF0ZUlkeCAhPSBVcFJhdGVJZHgpKQorCQkJeworCQkJCWlmICgoVHhFcnJvclJhdGlvID49IDUwKSB8fCAoVHhFcnJvclJhdGlvID49IFRyYWluRG93bikpCisJCQkJeworCisJCQkJfQorCQkJCWVsc2UgaWYgKChwQWQtPkRyc0NvdW50ZXJzLkxhc3RUeE9rQ291bnQgKyAyKSA+PSBPbmVTZWNUeE5vUmV0cnlPS1JhdGlvbkNvdW50KQorCQkJCXsKKwkJCQkJcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPSBVcFJhdGVJZHg7CisJCQkJfQorCQkJfQorCQl9d2hpbGUgKEZBTFNFKTsKKworCQkvLyBpZiByYXRlLXVwIGhhcHBlbiwgY2xlYXIgYWxsIGJhZCBoaXN0b3J5IG9mIGFsbCBUWCByYXRlcworCQlpZiAocEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPiBDdXJyUmF0ZUlkeCkKKwkJeworCQkJcEFkLT5EcnNDb3VudGVycy5UeFJhdGVVcFBlbmFsdHkgPSAwOworCQkJTmRpc1plcm9NZW1vcnkocEFkLT5EcnNDb3VudGVycy5UeFF1YWxpdHksIHNpemVvZihVU0hPUlQpICogTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0gpOworCQkJTmRpc1plcm9NZW1vcnkocEFkLT5EcnNDb3VudGVycy5QRVIsIHNpemVvZihVQ0hBUikgKiBNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSCk7CisJCQliVHhSYXRlQ2hhbmdlZCA9IFRSVUU7CisJCX0KKwkJLy8gaWYgcmF0ZS1kb3duIGhhcHBlbiwgb25seSBjbGVhciBEb3duUmF0ZSdzIGJhZCBoaXN0b3J5CisJCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4IDwgQ3VyclJhdGVJZHgpCisJCXsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIlF1aWNrRFJTOiAtLVRYIHJhdGUgZnJvbSAlZCB0byAlZCBcbiIsIEN1cnJSYXRlSWR4LCBwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleCkpOworCisJCQlwQWQtPkRyc0NvdW50ZXJzLlR4UmF0ZVVwUGVuYWx0eSA9IDA7ICAgICAgICAgICAvLyBubyBwZW5hbHR5CisJCQlwQWQtPkRyc0NvdW50ZXJzLlR4UXVhbGl0eVtwQWQtPkNvbW1vbkNmZy5UeFJhdGVJbmRleF0gPSAwOworCQkJcEFkLT5EcnNDb3VudGVycy5QRVJbcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXhdID0gMDsKKwkJCWJUeFJhdGVDaGFuZ2VkID0gVFJVRTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWJUeFJhdGVDaGFuZ2VkID0gRkFMU0U7CisJCX0KKworCQlwTmV4dFR4UmF0ZSA9IChQUlRNUF9UWF9SQVRFX1NXSVRDSCkgJnBUYWJsZVsocEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXgrMSkqNV07CisJCWlmIChiVHhSYXRlQ2hhbmdlZCAmJiBwTmV4dFR4UmF0ZSkKKwkJeworCQkJTWxtZVNldFR4UmF0ZShwQWQsIHBFbnRyeSwgcE5leHRUeFJhdGUpOworCQl9CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRoaXMgcm91dGluZSBpcyBleGVjdXRlZCBwZXJpb2RpY2FsbHkgaW5zaWRlIE1sbWVQZXJpb2RpY0V4ZWMoKSBhZnRlcgorCQlhc3NvY2lhdGlvbiB3aXRoIGFuIEFQLgorCQlJdCBjaGVja3MgaWYgU3RhQ2ZnLlBzbSBpcyBjb25zaXN0ZW50IHdpdGggdXNlciBwb2xpY3kgKHJlY29yZGVkIGluCisJCVN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlKS4gSWYgbm90LCBlbmZvcmNlIHVzZXIgcG9saWN5LiBIb3dldmVyLAorCQl0aGVyZSdyZSBzb21lIGNvbmRpdGlvbnMgdG8gY29uc2lkZXI6CisJCTEuIHdlIGRvbid0IHN1cHBvcnQgcG93ZXItc2F2aW5nIGluIEFESE9DIG1vZGUsIHNvIFBzbT1QV1JfQUNUSVZFIGFsbAorCQkgICB0aGUgdGltZSB3aGVuIE1pYnNzPT1UUlVFCisJCTIuIFdoZW4gbGluayB1cCBpbiBJTkZSQSBtb2RlLCBQc20gc2hvdWxkIG5vdCBiZSBzd2l0Y2ggdG8gUFdSX1NBVkUKKwkJICAgaWYgb3V0Z29pbmcgdHJhZmZpYyBhdmFpbGFibGUgaW4gVHhSaW5nIG9yIE1nbXRSaW5nLgorCU91dHB1dDoKKwkJMS4gY2hhbmdlIHBBZC0+U3RhQ2ZnLlBzbSB0byBQV1JfU0FWRSBvciBsZWF2ZSBpdCB1bnRvdWNoZWQKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lQ2hlY2tQc21DaGFuZ2UoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUxPTkcJTm93MzIpCit7CisJVUxPTkcJUG93ZXJNb2RlOworCisJLy8gY29uZGl0aW9uIC0KKwkvLyAxLiBQc20gbWF5YmUgT04gb25seSBoYXBwZW4gaW4gSU5GUkFTVFJVQ1RVUkUgbW9kZQorCS8vIDIuIHVzZXIgd2FudHMgZWl0aGVyIE1BWF9QU1Agb3IgRkFTVF9QU1AKKwkvLyAzLiBidXQgY3VycmVudCBwc20gaXMgbm90IGluIFBXUl9TQVZFCisJLy8gNC4gQ05UTCBzdGF0ZSBtYWNoaW5lIGlzIG5vdCBkb2luZyBTQ0FObmluZworCS8vIDUuIG5vIFRYIFNVQ0NFU1MgZXZlbnQgZm9yIHRoZSBwYXN0IDEtc2VjIHBlcmlvZAorI2lmZGVmIE5ESVM1MV9NSU5JUE9SVAorCWlmIChwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJQcm9maWxlID09IE5kaXNQb3dlclByb2ZpbGVCYXR0ZXJ5KQorCQlQb3dlck1vZGUgPSBwQWQtPlN0YUNmZy5XaW5kb3dzQmF0dGVyeVBvd2VyTW9kZTsKKwllbHNlCisjZW5kaWYKKwkJUG93ZXJNb2RlID0gcEFkLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZTsKKworCWlmIChJTkZSQV9PTihwQWQpICYmCisJCShQb3dlck1vZGUgIT0gTmRpczgwMl8xMVBvd2VyTW9kZUNBTSkgJiYKKwkJKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfQUNUSVZFKSAmJgorLy8JCSghIFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCisJCShwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfSURMRSkgLyomJgorCQkocEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeE5vUmV0cnlPa0NvdW50ID09IDApICYmCisJCShwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4UmV0cnlPa0NvdW50ID09IDApKi8pCisJeworCQkvLyBhZGQgYnkgam9obmxpLCB1c2UgUnggT0sgZGF0YSBjb3VudCBwZXIgc2Vjb25kIHRvIGNhbGN1bGF0ZSB0aHJvdWdocHV0CisJCS8vIElmIFR0cmFmZmljIGlzIHRvbyBoaWdoICggPiA0MDAgUnggcGVyIHNlY29uZCksIGRvbid0IGdvIHRvIHNsZWVwIG1vZGUuIElmIHR4IHJhdGUgaXMgbG93LCB1c2UgbG93IGNyaXRlcmlhCisJCS8vIE1vZGU9Q0NLL01DUz0zID0+IDExIE1icHMsIE1vZGU9T0ZETS9NQ1M9MyA9PiAxOCBNYnBzCisJCWlmICgoKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MgPD0gMykgJiYKKy8qIEl2ZXJzb24gbWFyaworCQkJCShwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERSA8PSBNT0RFX09GRE0pICYmCisqLworCQkJCShwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1J4T2tEYXRhQ250IDwgKFVMT05HKTEwMCkpIHx8CisJCQkoKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MgPiAzKSAmJgorLyogSXZlcnNvbiBtYXJrCisJCQkocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREUgPiBNT0RFX09GRE0pICYmCisqLworCQkJKHBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhPa0RhdGFDbnQgPCAoVUxPTkcpNDAwKSkpCisJCXsKKwkJCQkvLyBHZXQgdGhpcyB0aW1lCisJCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZwQWQtPk1sbWUuTGFzdFNlbmROVUxMcHNtVGltZSk7CisJCQlwQWQtPlJhbGlua0NvdW50ZXJzLlJ4Q291bnRTaW5jZUxhc3ROVUxMID0gMDsKKwkJCU1sbWVTZXRQc21CaXQocEFkLCBQV1JfU0FWRSk7CisJCQlpZiAoIShwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQVBTRENhcGFibGUpKQorCQkJeworCQkJCVJUTVBTZW5kTnVsbEZyYW1lKHBBZCwgcEFkLT5Db21tb25DZmcuVHhSYXRlLCBGQUxTRSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJUlRNUFNlbmROdWxsRnJhbWUocEFkLCBwQWQtPkNvbW1vbkNmZy5UeFJhdGUsIFRSVUUpOworCQkJfQorCQl9CisJfQorfQorCisvLyBJUlFMID0gUEFTU0lWRV9MRVZFTAorLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lEIE1sbWVTZXRQc21CaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIHBzbSkKK3sKKwlBVVRPX1JTUF9DRkdfU1RSVUMgY3NyNDsKKworCXBBZC0+U3RhQ2ZnLlBzbSA9IHBzbTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEFVVE9fUlNQX0NGRywgJmNzcjQud29yZCk7CisJY3NyNC5maWVsZC5BY2tDdHNQc21CaXQgPSAocHNtID09IFBXUl9TQVZFKT8gMTowOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEFVVE9fUlNQX0NGRywgY3NyNC53b3JkKTsKK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgTWxtZVNldFR4UHJlYW1ibGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIFR4UHJlYW1ibGUpCit7CisJQVVUT19SU1BfQ0ZHX1NUUlVDIGNzcjQ7CisKKwkvLworCS8vIEFsd2F5cyB1c2UgTG9uZyBwcmVhbWJsZSBiZWZvcmUgdmVyaWZpYXRpb24gc2hvcnQgcHJlYW1ibGUgZnVuY3Rpb25hbGl0eSB3b3JrcyB3ZWxsLgorCS8vIFRvZG86IHJlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgaWYgc2hvcnQgcHJlYW1ibGUgZnVuY3Rpb25hbGl0eSB3b3JrcworCS8vCisJLy9UeFByZWFtYmxlID0gUnQ4MDJfMTFQcmVhbWJsZUxvbmc7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEFVVE9fUlNQX0NGRywgJmNzcjQud29yZCk7CisJaWYgKFR4UHJlYW1ibGUgPT0gUnQ4MDJfMTFQcmVhbWJsZUxvbmcpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lU2V0VHhQcmVhbWJsZSAoPSBMT05HIFBSRUFNQkxFKVxuIikpOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpOworCQljc3I0LmZpZWxkLkF1dG9SZXNwb25kZXJQcmVhbWJsZSA9IDA7CisJfQorCWVsc2UKKwl7CisJCS8vIE5PVEU6IDFNYnBzIHNob3VsZCBhbHdheXMgdXNlIGxvbmcgcHJlYW1ibGUKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVNldFR4UHJlYW1ibGUgKD0gU0hPUlQgUFJFQU1CTEUpXG4iKSk7CisJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpOworCQljc3I0LmZpZWxkLkF1dG9SZXNwb25kZXJQcmVhbWJsZSA9IDE7CisJfQorCisJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19SU1BfQ0ZHLCBjc3I0LndvcmQpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFVwZGF0ZSBiYXNpYyByYXRlIGJpdG1hcAorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworVk9JRCBVcGRhdGVCYXNpY1JhdGVCaXRtYXAoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlcikKK3sKKyAgICBJTlQgIGksIGo7CisgICAgICAgICAgICAgICAgICAvKiAxICAyICA1LjUsIDExLCAgNiwgIDksIDEyLCAxOCwgMjQsIDM2LCA0OCwgIDU0ICovCisgICAgVUNIQVIgcmF0ZVtdID0geyAyLCA0LCAgMTEsIDIyLCAxMiwgMTgsIDI0LCAzNiwgNDgsIDcyLCA5NiwgMTA4IH07CisgICAgVUNIQVIgKnN1cF9wID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5TdXBSYXRlOworICAgIFVDSEFSICpleHRfcCA9IHBBZGFwdGVyLT5Db21tb25DZmcuRXh0UmF0ZTsKKyAgICBVTE9ORyBiaXRtYXAgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLkJhc2ljUmF0ZUJpdG1hcDsKKworCisgICAgLyogaWYgQSBtb2RlLCBhbHdheXMgdXNlIGZpeCBCYXNpY1JhdGVCaXRNYXAgKi8KKyAgICAvL2lmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwgPT0gUEhZXzExQSkKKwlpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsID4gMTQpCisgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQmFzaWNSYXRlQml0bWFwID0gMHgxNTA7IC8qIDYsIDEyLCAyNE0gKi8KKyAgICAvKiBFbmQgb2YgaWYgKi8KKworICAgIGlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLkJhc2ljUmF0ZUJpdG1hcCA+IDQwOTUpCisgICAgeworICAgICAgICAvKiAoMiBeIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKSAtMSAqLworICAgICAgICByZXR1cm47CisgICAgfSAvKiBFbmQgb2YgaWYgKi8KKworICAgIGZvcihpPTA7IGk8TUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVM7IGkrKykKKyAgICB7CisgICAgICAgIHN1cF9wW2ldICY9IDB4N2Y7CisgICAgICAgIGV4dF9wW2ldICY9IDB4N2Y7CisgICAgfSAvKiBFbmQgb2YgZm9yICovCisKKyAgICBmb3IoaT0wOyBpPE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTOyBpKyspCisgICAgeworICAgICAgICBpZiAoYml0bWFwICYgKDEgPDwgaSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvcihqPTA7IGo8TUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVM7IGorKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoc3VwX3Bbal0gPT0gcmF0ZVtpXSkKKyAgICAgICAgICAgICAgICAgICAgc3VwX3Bbal0gfD0gMHg4MDsKKyAgICAgICAgICAgICAgICAvKiBFbmQgb2YgaWYgKi8KKyAgICAgICAgICAgIH0gLyogRW5kIG9mIGZvciAqLworCisgICAgICAgICAgICBmb3Ioaj0wOyBqPE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTOyBqKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGV4dF9wW2pdID09IHJhdGVbaV0pCisgICAgICAgICAgICAgICAgICAgIGV4dF9wW2pdIHw9IDB4ODA7CisgICAgICAgICAgICAgICAgLyogRW5kIG9mIGlmICovCisgICAgICAgICAgICB9IC8qIEVuZCBvZiBmb3IgKi8KKyAgICAgICAgfSAvKiBFbmQgb2YgaWYgKi8KKyAgICB9IC8qIEVuZCBvZiBmb3IgKi8KK30gLyogRW5kIG9mIFVwZGF0ZUJhc2ljUmF0ZUJpdG1hcCAqLworCisvLyBJUlFMID0gUEFTU0lWRV9MRVZFTAorLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCisvLyBiTGlua1VwIGlzIHRvIGlkZW50aWZ5IHRoZSBpbml0YWwgbGluayBzcGVlZC4KKy8vIFRSVUUgaW5kaWNhdGVzIHRoZSByYXRlIHVwZGF0ZSBhdCBsaW5rdXAsIHdlIHNob3VsZCBub3QgdHJ5IHRvIHNldCB0aGUgcmF0ZSBhdCA1NE1icHMuCitWT0lEIE1sbWVVcGRhdGVUeFJhdGVzKAorCUlOIFBSVE1QX0FEQVBURVIgCQlwQWQsCisJSU4gCUJPT0xFQU4JCSAJCWJMaW5rVXAsCisJSU4JVUNIQVIJCQkJYXBpZHgpCit7CisJaW50IGksIG51bTsKKwlVQ0hBUiBSYXRlID0gUkFURV82LCBNYXhEZXNpcmUgPSBSQVRFXzEsIE1heFN1cHBvcnQgPSBSQVRFXzE7CisJVUNIQVIgTWluU3VwcG9ydCA9IFJBVEVfNTQ7CisJVUxPTkcgQmFzaWNSYXRlQml0bWFwID0gMDsKKwlVQ0hBUiBDdXJyQmFzaWNSYXRlID0gUkFURV8xOworCVVDSEFSICpwU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgKnBFeHRSYXRlLCBFeHRSYXRlTGVuOworCVBIVFRSQU5TTUlUX1NFVFRJTkcJCXBIdFBoeSA9IE5VTEw7CisJUEhUVFJBTlNNSVRfU0VUVElORwkJcE1heEh0UGh5ID0gTlVMTDsKKwlQSFRUUkFOU01JVF9TRVRUSU5HCQlwTWluSHRQaHkgPSBOVUxMOworCUJPT0xFQU4gCQkJCSphdXRvX3JhdGVfY3VyX3A7CisJVUNIQVIJCQkJCUh0TWNzID0gTUNTX0FVVE87CisKKwkvLyBmaW5kIG1heCBkZXNpcmVkIHJhdGUKKwlVcGRhdGVCYXNpY1JhdGVCaXRtYXAocEFkKTsKKworCW51bSA9IDA7CisJYXV0b19yYXRlX2N1cl9wID0gTlVMTDsKKwlmb3IgKGk9MDsgaTxNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUzsgaSsrKQorCXsKKwkJc3dpdGNoIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVSYXRlW2ldICYgMHg3ZikKKwkJeworCQkJY2FzZSAyOiAgUmF0ZSA9IFJBVEVfMTsgICBudW0rKzsgICBicmVhazsKKwkJCWNhc2UgNDogIFJhdGUgPSBSQVRFXzI7ICAgbnVtKys7ICAgYnJlYWs7CisJCQljYXNlIDExOiBSYXRlID0gUkFURV81XzU7IG51bSsrOyAgIGJyZWFrOworCQkJY2FzZSAyMjogUmF0ZSA9IFJBVEVfMTE7ICBudW0rKzsgICBicmVhazsKKwkJCWNhc2UgMTI6IFJhdGUgPSBSQVRFXzY7ICAgbnVtKys7ICAgYnJlYWs7CisJCQljYXNlIDE4OiBSYXRlID0gUkFURV85OyAgIG51bSsrOyAgIGJyZWFrOworCQkJY2FzZSAyNDogUmF0ZSA9IFJBVEVfMTI7ICBudW0rKzsgICBicmVhazsKKwkJCWNhc2UgMzY6IFJhdGUgPSBSQVRFXzE4OyAgbnVtKys7ICAgYnJlYWs7CisJCQljYXNlIDQ4OiBSYXRlID0gUkFURV8yNDsgIG51bSsrOyAgIGJyZWFrOworCQkJY2FzZSA3MjogUmF0ZSA9IFJBVEVfMzY7ICBudW0rKzsgICBicmVhazsKKwkJCWNhc2UgOTY6IFJhdGUgPSBSQVRFXzQ4OyAgbnVtKys7ICAgYnJlYWs7CisJCQljYXNlIDEwODogUmF0ZSA9IFJBVEVfNTQ7IG51bSsrOyAgIGJyZWFrOworCQkJLy9kZWZhdWx0OiBSYXRlID0gUkFURV8xOyAgIGJyZWFrOworCQl9CisJCWlmIChNYXhEZXNpcmUgPCBSYXRlKSAgTWF4RGVzaXJlID0gUmF0ZTsKKwl9CisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCXBIdFBoeSAJCT0gJnBBZC0+U3RhQ2ZnLkhUUGh5TW9kZTsKKwkJcE1heEh0UGh5CT0gJnBBZC0+U3RhQ2ZnLk1heEhUUGh5TW9kZTsKKwkJcE1pbkh0UGh5CT0gJnBBZC0+U3RhQ2ZnLk1pbkhUUGh5TW9kZTsKKworCQlhdXRvX3JhdGVfY3VyX3AgPSAmcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2g7CisJCUh0TWNzIAkJPSBwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUzsKKworCQlpZiAoKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DKSAmJgorCQkJKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQikgJiYKKwkJCShNYXhEZXNpcmUgPiBSQVRFXzExKSkKKwkJeworCQkJTWF4RGVzaXJlID0gUkFURV8xMTsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCXBBZC0+Q29tbW9uQ2ZnLk1heERlc2lyZWRSYXRlID0gTWF4RGVzaXJlOworCXBNaW5IdFBoeS0+d29yZCA9IDA7CisJcE1heEh0UGh5LT53b3JkID0gMDsKKwlwSHRQaHktPndvcmQgPSAwOworCisJLy8gQXV0byByYXRlIHN3aXRjaGluZyBpcyBlbmFibGVkIG9ubHkgaWYgbW9yZSB0aGFuIG9uZSBERVNJUkVEIFJBVEVTIGFyZQorCS8vIHNwZWNpZmllZDsgb3RoZXJ3aXNlIGRpc2FibGVkCisJaWYgKG51bSA8PSAxKQorCXsKKwkJLy9PUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKTsKKwkJLy9wQWQtPkNvbW1vbkNmZy5iQXV0b1R4UmF0ZVN3aXRjaAk9IEZBTFNFOworCQkqYXV0b19yYXRlX2N1cl9wID0gRkFMU0U7CisJfQorCWVsc2UKKwl7CisJCS8vT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpOworCQkvL3BBZC0+Q29tbW9uQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoCT0gVFJVRTsKKwkJKmF1dG9fcmF0ZV9jdXJfcCA9IFRSVUU7CisJfQorCisjaWYgMQorCWlmIChIdE1jcyAhPSBNQ1NfQVVUTykKKwl7CisJCS8vT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfVFhfUkFURV9TV0lUQ0hfRU5BQkxFRCk7CisJCS8vcEFkLT5Db21tb25DZmcuYkF1dG9UeFJhdGVTd2l0Y2gJPSBGQUxTRTsKKwkJKmF1dG9fcmF0ZV9jdXJfcCA9IEZBTFNFOworCX0KKwllbHNlCisJeworCQkvL09QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKTsKKwkJLy9wQWQtPkNvbW1vbkNmZy5iQXV0b1R4UmF0ZVN3aXRjaAk9IFRSVUU7CisJCSphdXRvX3JhdGVfY3VyX3AgPSBUUlVFOworCX0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJaWYgKChBREhPQ19PTihwQWQpIHx8IElORlJBX09OKHBBZCkpICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkKKwl7CisJCXBTdXBSYXRlID0gJnBBZC0+U3RhQWN0aXZlLlN1cFJhdGVbMF07CisJCXBFeHRSYXRlID0gJnBBZC0+U3RhQWN0aXZlLkV4dFJhdGVbMF07CisJCVN1cFJhdGVMZW4gPSBwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuOworCQlFeHRSYXRlTGVuID0gcEFkLT5TdGFBY3RpdmUuRXh0UmF0ZUxlbjsKKwl9CisJZWxzZQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCXsKKwkJcFN1cFJhdGUgPSAmcEFkLT5Db21tb25DZmcuU3VwUmF0ZVswXTsKKwkJcEV4dFJhdGUgPSAmcEFkLT5Db21tb25DZmcuRXh0UmF0ZVswXTsKKwkJU3VwUmF0ZUxlbiA9IHBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVMZW47CisJCUV4dFJhdGVMZW4gPSBwQWQtPkNvbW1vbkNmZy5FeHRSYXRlTGVuOworCX0KKworCS8vIGZpbmQgbWF4IHN1cHBvcnRlZCByYXRlCisJZm9yIChpPTA7IGk8U3VwUmF0ZUxlbjsgaSsrKQorCXsKKwkJc3dpdGNoIChwU3VwUmF0ZVtpXSAmIDB4N2YpCisJCXsKKwkJCWNhc2UgMjogICBSYXRlID0gUkFURV8xOwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDAxOwkgYnJlYWs7CisJCQljYXNlIDQ6ICAgUmF0ZSA9IFJBVEVfMjsJaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDAwMjsJIGJyZWFrOworCQkJY2FzZSAxMTogIFJhdGUgPSBSQVRFXzVfNTsJaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDAwNDsJIGJyZWFrOworCQkJY2FzZSAyMjogIFJhdGUgPSBSQVRFXzExOwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDA4OwkgYnJlYWs7CisJCQljYXNlIDEyOiAgUmF0ZSA9IFJBVEVfNjsJLyppZiAocFN1cFJhdGVbaV0gJiAweDgwKSovICBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDEwOyAgYnJlYWs7CisJCQljYXNlIDE4OiAgUmF0ZSA9IFJBVEVfOTsJaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDAyMDsJIGJyZWFrOworCQkJY2FzZSAyNDogIFJhdGUgPSBSQVRFXzEyOwkvKmlmIChwU3VwUmF0ZVtpXSAmIDB4ODApKi8gIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwNDA7ICBicmVhazsKKwkJCWNhc2UgMzY6ICBSYXRlID0gUkFURV8xODsJaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDA4MDsJIGJyZWFrOworCQkJY2FzZSA0ODogIFJhdGUgPSBSQVRFXzI0OwkvKmlmIChwU3VwUmF0ZVtpXSAmIDB4ODApKi8gIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAxMDA7ICBicmVhazsKKwkJCWNhc2UgNzI6ICBSYXRlID0gUkFURV8zNjsJaWYgKHBTdXBSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDIwMDsJIGJyZWFrOworCQkJY2FzZSA5NjogIFJhdGUgPSBSQVRFXzQ4OwlpZiAocFN1cFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwNDAwOwkgYnJlYWs7CisJCQljYXNlIDEwODogUmF0ZSA9IFJBVEVfNTQ7CWlmIChwU3VwUmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDA4MDA7CSBicmVhazsKKwkJCWRlZmF1bHQ6ICBSYXRlID0gUkFURV8xOwlicmVhazsKKwkJfQorCQlpZiAoTWF4U3VwcG9ydCA8IFJhdGUpCU1heFN1cHBvcnQgPSBSYXRlOworCisJCWlmIChNaW5TdXBwb3J0ID4gUmF0ZSkgTWluU3VwcG9ydCA9IFJhdGU7CisJfQorCisJZm9yIChpPTA7IGk8RXh0UmF0ZUxlbjsgaSsrKQorCXsKKwkJc3dpdGNoIChwRXh0UmF0ZVtpXSAmIDB4N2YpCisJCXsKKwkJCWNhc2UgMjogICBSYXRlID0gUkFURV8xOwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDAxOwkgYnJlYWs7CisJCQljYXNlIDQ6ICAgUmF0ZSA9IFJBVEVfMjsJaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDAwMjsJIGJyZWFrOworCQkJY2FzZSAxMTogIFJhdGUgPSBSQVRFXzVfNTsJaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDAwNDsJIGJyZWFrOworCQkJY2FzZSAyMjogIFJhdGUgPSBSQVRFXzExOwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDA4OwkgYnJlYWs7CisJCQljYXNlIDEyOiAgUmF0ZSA9IFJBVEVfNjsJLyppZiAocEV4dFJhdGVbaV0gJiAweDgwKSovICBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwMDEwOyAgYnJlYWs7CisJCQljYXNlIDE4OiAgUmF0ZSA9IFJBVEVfOTsJaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDAyMDsJIGJyZWFrOworCQkJY2FzZSAyNDogIFJhdGUgPSBSQVRFXzEyOwkvKmlmIChwRXh0UmF0ZVtpXSAmIDB4ODApKi8gIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAwNDA7ICBicmVhazsKKwkJCWNhc2UgMzY6ICBSYXRlID0gUkFURV8xODsJaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDA4MDsJIGJyZWFrOworCQkJY2FzZSA0ODogIFJhdGUgPSBSQVRFXzI0OwkvKmlmIChwRXh0UmF0ZVtpXSAmIDB4ODApKi8gIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDAxMDA7ICBicmVhazsKKwkJCWNhc2UgNzI6ICBSYXRlID0gUkFURV8zNjsJaWYgKHBFeHRSYXRlW2ldICYgMHg4MCkgQmFzaWNSYXRlQml0bWFwIHw9IDB4MDIwMDsJIGJyZWFrOworCQkJY2FzZSA5NjogIFJhdGUgPSBSQVRFXzQ4OwlpZiAocEV4dFJhdGVbaV0gJiAweDgwKSBCYXNpY1JhdGVCaXRtYXAgfD0gMHgwNDAwOwkgYnJlYWs7CisJCQljYXNlIDEwODogUmF0ZSA9IFJBVEVfNTQ7CWlmIChwRXh0UmF0ZVtpXSAmIDB4ODApIEJhc2ljUmF0ZUJpdG1hcCB8PSAweDA4MDA7CSBicmVhazsKKwkJCWRlZmF1bHQ6ICBSYXRlID0gUkFURV8xOwlicmVhazsKKwkJfQorCQlpZiAoTWF4U3VwcG9ydCA8IFJhdGUpCU1heFN1cHBvcnQgPSBSYXRlOworCisJCWlmIChNaW5TdXBwb3J0ID4gUmF0ZSkgTWluU3VwcG9ydCA9IFJhdGU7CisJfQorCisJUlRNUF9JT19XUklURTMyKHBBZCwgTEVHQUNZX0JBU0lDX1JBVEUsIEJhc2ljUmF0ZUJpdG1hcCk7CisKKwkvLyBjYWxjdWxhdGUgdGhlIGV4cHRlY3RlZCBBQ0sgcmF0ZSBmb3IgZWFjaCBUWCByYXRlLiBUaGlzIGluZm8gaXMgdXNlZCB0byBjYWN1bGF0ZQorCS8vIHRoZSBEVVJBVElPTiBmaWVsZCBvZiBvdXRnb2luZyB1bmlpY2FzdCBEQVRBL01HTVQgZnJhbWUKKwlmb3IgKGk9MDsgaTxNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUzsgaSsrKQorCXsKKwkJaWYgKEJhc2ljUmF0ZUJpdG1hcCAmICgweDAxIDw8IGkpKQorCQkJQ3VyckJhc2ljUmF0ZSA9IChVQ0hBUilpOworCQlwQWQtPkNvbW1vbkNmZy5FeHBlY3RlZEFDS1JhdGVbaV0gPSBDdXJyQmFzaWNSYXRlOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiTWxtZVVwZGF0ZVR4UmF0ZXNbTWF4U3VwcG9ydCA9ICVkXSA9IE1heERlc2lyZSAlZCBNYnBzXG4iLCBSYXRlSWRUb01icHNbTWF4U3VwcG9ydF0sIFJhdGVJZFRvTWJwc1tNYXhEZXNpcmVdKSk7CisJLy8gbWF4IHR4IHJhdGUgPSBtaW4ge21heCBkZXNpcmUgcmF0ZSwgbWF4IHN1cHBvcnRlZCByYXRlfQorCWlmIChNYXhTdXBwb3J0IDwgTWF4RGVzaXJlKQorCQlwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUgPSBNYXhTdXBwb3J0OworCWVsc2UKKwkJcEFkLT5Db21tb25DZmcuTWF4VHhSYXRlID0gTWF4RGVzaXJlOworCisJcEFkLT5Db21tb25DZmcuTWluVHhSYXRlID0gTWluU3VwcG9ydDsKKwkvLyAyMDAzLTA3LTMxIGpvaG4gLSAyNTAwIGRvZXNuJ3QgaGF2ZSBnb29kIHNlbnNpdGl2aXR5IGF0IGhpZ2ggT0ZETSByYXRlcy4gdG8gaW5jcmVhc2UgdGhlIHN1Y2Nlc3MKKwkvLyByYXRpbyBvZiBpbml0aWFsIERIQ1AgcGFja2V0IGV4Y2hhbmdlLCBUWCByYXRlIHN0YXJ0cyBmcm9tIGEgbG93ZXIgcmF0ZSBkZXBlbmRpbmcKKwkvLyBvbiBhdmVyYWdlIFJTU0kKKwkvLwkgMS4gUlNTSSA+PSAtNzBkYiwgc3RhcnQgYXQgNTQgTWJwcyAoc2hvcnQgZGlzdGFuY2UpCisJLy8JIDIuIC03MCA+IFJTU0kgPj0gLTc1LCBzdGFydCBhdCAyNCBNYnBzIChtaWQgZGlzdGFuY2UpCisJLy8JIDMuIC03NSA+IFJTU0ksIHN0YXJ0IGF0IDExIE1icHMgKGxvbmcgZGlzdGFuY2UpCisJLy9pZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEKS8qICYmCisJLy8JT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKi8pCisJaWYgKCphdXRvX3JhdGVfY3VyX3ApCisJeworCQlzaG9ydCBkYm0gPSAwOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJZGJtID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMCAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGE7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCWlmIChiTGlua1VwID09IFRSVUUpCisJCQlwQWQtPkNvbW1vbkNmZy5UeFJhdGUgPSBSQVRFXzI0OworCQllbHNlCisJCQlwQWQtPkNvbW1vbkNmZy5UeFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGU7CisKKwkJaWYgKGRibSA8IC03NSkKKwkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IFJBVEVfMTE7CisJCWVsc2UgaWYgKGRibSA8IC03MCkKKwkJCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IFJBVEVfMjQ7CisKKwkJLy8gc2hvdWxkIG5ldmVyIGV4Y2VlZCBNYXhUeFJhdGUgKGNvbnNpZGVyIDExQi1vbmx5IG1vZGUpCisJCWlmIChwQWQtPkNvbW1vbkNmZy5UeFJhdGUgPiBwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUpCisJCQlwQWQtPkNvbW1vbkNmZy5UeFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGU7CisKKwkJcEFkLT5Db21tb25DZmcuVHhSYXRlSW5kZXggPSAwOworCX0KKwllbHNlCisJeworCQlwQWQtPkNvbW1vbkNmZy5UeFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGU7CisJCXBIdFBoeS0+ZmllbGQuTUNTCT0gKHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSA+IDMpID8gKHBBZC0+Q29tbW9uQ2ZnLk1heFR4UmF0ZSAtIDQpIDogcEFkLT5Db21tb25DZmcuTWF4VHhSYXRlOworCQlwSHRQaHktPmZpZWxkLk1PREUJPSAocEFkLT5Db21tb25DZmcuTWF4VHhSYXRlID4gMykgPyBNT0RFX09GRE0gOiBNT0RFX0NDSzsKKworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5TVEJDCT0gcEh0UGh5LT5maWVsZC5TVEJDOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJCT0gcEh0UGh5LT5maWVsZC5TaG9ydEdJOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NQ1MJCT0gcEh0UGh5LT5maWVsZC5NQ1M7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1PREUJPSBwSHRQaHktPmZpZWxkLk1PREU7CisJfQorCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA8PSBSQVRFXzExKQorCXsKKwkJcE1heEh0UGh5LT5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCXBNYXhIdFBoeS0+ZmllbGQuTUNTID0gcEFkLT5Db21tb25DZmcuVHhSYXRlOworCQlwTWluSHRQaHktPmZpZWxkLk1DUyA9IHBBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZTsKKwl9CisJZWxzZQorCXsKKwkJcE1heEh0UGh5LT5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQlwTWF4SHRQaHktPmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLlR4UmF0ZV07CisJCWlmIChwQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGUgPj0gUkFURV82ICYmIChwQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGUgPD0gUkFURV81NCkpCisJCQl7cE1pbkh0UGh5LT5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGVdO30KKwkJZWxzZQorCQkJe3BNaW5IdFBoeS0+ZmllbGQuTUNTID0gcEFkLT5Db21tb25DZmcuTWluVHhSYXRlO30KKwl9CisKKwlwSHRQaHktPndvcmQgPSAocE1heEh0UGh5LT53b3JkKTsKKwlpZiAoYkxpbmtVcCAmJiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkpCisJeworCQkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUud29yZCA9IHBIdFBoeS0+d29yZDsKKwkJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uTWF4SFRQaHlNb2RlLndvcmQgPSBwTWF4SHRQaHktPndvcmQ7CisJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLk1pbkhUUGh5TW9kZS53b3JkID0gcE1pbkh0UGh5LT53b3JkOworCX0KKwllbHNlCisJeworCQlzd2l0Y2ggKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUpCisJCXsKKwkJCWNhc2UgUEhZXzExQkdfTUlYRUQ6CisJCQljYXNlIFBIWV8xMUI6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQljYXNlIFBIWV8xMUJHTl9NSVhFRDoKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfMTsKKwkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MgPSBSQVRFXzE7CisKKy8vI2lmZGVmCVdJRklfVEVTVAorCQkJCXBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGUgPSBSQVRFXzExOworLy8jZWxzZQorLy8JCQkJcEFkLT5Db21tb25DZmcuUnRzUmF0ZSA9IFJBVEVfMTsKKy8vI2VuZGlmCisJCQkJYnJlYWs7CisJCQljYXNlIFBIWV8xMUc6CisJCQljYXNlIFBIWV8xMUE6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQljYXNlIFBIWV8xMUFHTl9NSVhFRDoKKwkJCWNhc2UgUEhZXzExR05fTUlYRUQ6CisJCQljYXNlIFBIWV8xMU5fMl80RzoKKwkJCWNhc2UgUEhZXzExQU5fTUlYRUQ6CisJCQljYXNlIFBIWV8xMU5fNUc6CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkJcEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPSBSQVRFXzY7CisJCQkJcEFkLT5Db21tb25DZmcuUnRzUmF0ZSA9IFJBVEVfNjsKKwkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEFkLT5Db21tb25DZmcuTWxtZVJhdGVdOworCQkJCWJyZWFrOworCQkJY2FzZSBQSFlfMTFBQkdfTUlYRUQ6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQljYXNlIFBIWV8xMUFCR05fTUlYRUQ6CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTQpCisJCQkJeworCQkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IFJBVEVfMTsKKwkJCQkJcEFkLT5Db21tb25DZmcuUnRzUmF0ZSA9IFJBVEVfMTsKKwkJCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUyA9IFJBVEVfMTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJcEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPSBSQVRFXzY7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGUgPSBSQVRFXzY7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEFkLT5Db21tb25DZmcuTWxtZVJhdGVdOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6IC8vIGVycm9yCisJCQkJcEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPSBSQVRFXzY7CisgICAgICAgICAgICAgICAgICAgICAgICAJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCQkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlXTsKKwkJCQlwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gUkFURV8xOworCQkJCWJyZWFrOworCQl9CisJCS8vCisJCS8vIEtlZXAgQmFzaWMgTWxtZSBSYXRlLgorCQkvLworCQlwQWQtPk1hY1RhYi5Db250ZW50W01DQVNUX1dDSURdLkhUUGh5TW9kZS53b3JkID0gcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LndvcmQ7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9PSBNT0RFX09GRE0pCisJCQlwQWQtPk1hY1RhYi5Db250ZW50W01DQVNUX1dDSURdLkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1tSQVRFXzI0XTsKKwkJZWxzZQorCQkJcEFkLT5NYWNUYWIuQ29udGVudFtNQ0FTVF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTUNTID0gUkFURV8xOworCQlwQWQtPkNvbW1vbkNmZy5CYXNpY01sbWVSYXRlID0gcEFkLT5Db21tb25DZmcuTWxtZVJhdGU7CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIE1sbWVVcGRhdGVUeFJhdGVzIChNYXhEZXNpcmU9JWQsIE1heFN1cHBvcnQ9JWQsIE1heFR4UmF0ZT0lZCwgTWluUmF0ZT0lZCwgUmF0ZSBTd2l0Y2hpbmcgPSVkKVxuIiwKKwkJCSBSYXRlSWRUb01icHNbTWF4RGVzaXJlXSwgUmF0ZUlkVG9NYnBzW01heFN1cHBvcnRdLCBSYXRlSWRUb01icHNbcEFkLT5Db21tb25DZmcuTWF4VHhSYXRlXSwgUmF0ZUlkVG9NYnBzW3BBZC0+Q29tbW9uQ2ZnLk1pblR4UmF0ZV0sCisJCQkgLypPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpKi8qYXV0b19yYXRlX2N1cl9wKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiIE1sbWVVcGRhdGVUeFJhdGVzIChUeFJhdGU9JWQsIFJ0c1JhdGU9JWQsIEJhc2ljUmF0ZUJpdG1hcD0weCUwNGx4KVxuIiwKKwkJCSBSYXRlSWRUb01icHNbcEFkLT5Db21tb25DZmcuVHhSYXRlXSwgUmF0ZUlkVG9NYnBzW3BBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGVdLCBCYXNpY1JhdGVCaXRtYXApKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lVXBkYXRlVHhSYXRlcyAoTWxtZVRyYW5zbWl0PTB4JXgsIE1pbkhUUGh5TW9kZT0leCwgTWF4SFRQaHlNb2RlPTB4JXgsIEhUUGh5TW9kZT0weCV4KVxuIiwKKwkJCSBwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQud29yZCwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5NaW5IVFBoeU1vZGUud29yZCAscEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5NYXhIVFBoeU1vZGUud29yZCAscEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUud29yZCApKTsKK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIGZ1bmN0aW9uIHVwZGF0ZSBIVCBSYXRlIHNldHRpbmcuCisJCUlucHV0IFdjaWQgdmFsdWUgaXMgdmFsaWQgZm9yIDIgY2FzZSA6CisJCTEuIGl0J3MgdXNlZCBmb3IgU3RhdGlvbiBpbiBpbmZyYSBtb2RlIHRoYXQgY29weSBBUCByYXRlIHRvIE1hY3RhYmxlLgorCQkyLiBPUiBTdGF0aW9uIAlpbiBhZGhvYyBtb2RlIHRvIGNvcHkgcGVlcidzIEhUIHJhdGUgdG8gTWFjdGFibGUuCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZVVwZGF0ZUh0VHhSYXRlcygKKwlJTiBQUlRNUF9BREFQVEVSIAkJcEFkLAorCUlOCVVDSEFSCQkJCWFwaWR4KQoreworCVVDSEFSCVN0YmNNY3M7IC8vaiwgU3RiY01jcywgYml0bWFzazsKKwlDSEFSIAlpOyAvLyAzKjMKKwlSVF9IVF9DQVBBQklMSVRZIAkqcFJ0SHRDYXAgPSBOVUxMOworCVJUX0hUX1BIWV9JTkZPCQkqcEFjdGl2ZUh0UGh5ID0gTlVMTDsKKwlVTE9ORwkJQmFzaWNNQ1M7CisJVUNIQVIgaiwgYml0bWFzazsKKwlQUlRfSFRfUEhZX0lORk8JCQlwRGVzaXJlSHRQaHkgPSBOVUxMOworCVBIVFRSQU5TTUlUX1NFVFRJTkcJCXBIdFBoeSA9IE5VTEw7CisJUEhUVFJBTlNNSVRfU0VUVElORwkJcE1heEh0UGh5ID0gTlVMTDsKKwlQSFRUUkFOU01JVF9TRVRUSU5HCQlwTWluSHRQaHkgPSBOVUxMOworCUJPT0xFQU4gCQkJCSphdXRvX3JhdGVfY3VyX3A7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIk1sbWVVcGRhdGVIdFR4UmF0ZXM9PT0+IFxuIikpOworCisJYXV0b19yYXRlX2N1cl9wID0gTlVMTDsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlwRGVzaXJlSHRQaHkJPSAmcEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mbzsKKwkJcEFjdGl2ZUh0UGh5CT0gJnBBZC0+U3RhQ2ZnLkRlc2lyZWRIdFBoeUluZm87CisJCXBIdFBoeSAJCT0gJnBBZC0+U3RhQ2ZnLkhUUGh5TW9kZTsKKwkJcE1heEh0UGh5CT0gJnBBZC0+U3RhQ2ZnLk1heEhUUGh5TW9kZTsKKwkJcE1pbkh0UGh5CT0gJnBBZC0+U3RhQ2ZnLk1pbkhUUGh5TW9kZTsKKworCQlhdXRvX3JhdGVfY3VyX3AgPSAmcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2g7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJaWYgKChBREhPQ19PTihwQWQpIHx8IElORlJBX09OKHBBZCkpICYmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKSkKKwl7CisJCWlmIChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9PSBGQUxTRSkKKwkJCXJldHVybjsKKworCQlwUnRIdENhcCA9ICZwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeTsKKwkJcEFjdGl2ZUh0UGh5ID0gJnBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm87CisJCVN0YmNNY3MgPSAoVUNIQVIpcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8zLlN0YmNNY3M7CisJCUJhc2ljTUNTID1wQWQtPk1sbWVBdXguQWRkSHRJbmZvLk1DU1NldFswXSsocEFkLT5NbG1lQXV4LkFkZEh0SW5mby5NQ1NTZXRbMV08PDgpKyhTdGJjTWNzPDwxNik7CisJCWlmICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlR4U1RCQykgJiYgKHBSdEh0Q2FwLT5SeFNUQkMpICYmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpKQorCQkJcE1heEh0UGh5LT5maWVsZC5TVEJDID0gU1RCQ19VU0U7CisJCWVsc2UKKwkJCXBNYXhIdFBoeS0+ZmllbGQuU1RCQyA9IFNUQkNfTk9ORTsKKwl9CisJZWxzZQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCXsKKwkJaWYgKHBEZXNpcmVIdFBoeS0+Ykh0RW5hYmxlID09IEZBTFNFKQorCQkJcmV0dXJuOworCisJCXBSdEh0Q2FwID0gJnBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeTsKKwkJU3RiY01jcyA9IChVQ0hBUilwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvMy5TdGJjTWNzOworCQlCYXNpY01DUyA9IHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5NQ1NTZXRbMF0rKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5NQ1NTZXRbMV08PDgpKyhTdGJjTWNzPDwxNik7CisJCWlmICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlR4U1RCQykgJiYgKHBSdEh0Q2FwLT5SeFNUQkMpICYmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpKQorCQkJcE1heEh0UGh5LT5maWVsZC5TVEJDID0gU1RCQ19VU0U7CisJCWVsc2UKKwkJCXBNYXhIdFBoeS0+ZmllbGQuU1RCQyA9IFNUQkNfTk9ORTsKKwl9CisKKwkvLyBEZWNpZGUgTUFYIGh0IHJhdGUuCisJaWYgKChwUnRIdENhcC0+R0YpICYmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuR0YpKQorCQlwTWF4SHRQaHktPmZpZWxkLk1PREUgPSBNT0RFX0hUR1JFRU5GSUVMRDsKKwllbHNlCisJCXBNYXhIdFBoeS0+ZmllbGQuTU9ERSA9IE1PREVfSFRNSVg7CisKKyAgICBpZiAoKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5DaGFubmVsV2lkdGgpICYmIChwUnRIdENhcC0+Q2hhbm5lbFdpZHRoKSkKKwkJcE1heEh0UGh5LT5maWVsZC5CVyA9IEJXXzQwOworCWVsc2UKKwkJcE1heEh0UGh5LT5maWVsZC5CVyA9IEJXXzIwOworCisgICAgaWYgKHBNYXhIdFBoeS0+ZmllbGQuQlcgPT0gQldfMjApCisJCXBNYXhIdFBoeS0+ZmllbGQuU2hvcnRHSSA9IChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjIwICYgcFJ0SHRDYXAtPlNob3J0R0lmb3IyMCk7CisJZWxzZQorCQlwTWF4SHRQaHktPmZpZWxkLlNob3J0R0kgPSAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3I0MCAmIHBSdEh0Q2FwLT5TaG9ydEdJZm9yNDApOworCisJZm9yIChpPTIzOyBpPj0wOyBpLS0pIC8vIDMqMworCXsKKwkJaiA9IGkvODsKKwkJYml0bWFzayA9ICgxPDwoaS0oaio4KSkpOworCisJCWlmICgocEFjdGl2ZUh0UGh5LT5NQ1NTZXRbal0gJiBiaXRtYXNrKSAmJiAocERlc2lyZUh0UGh5LT5NQ1NTZXRbal0gJiBiaXRtYXNrKSkKKwkJeworCQkJcE1heEh0UGh5LT5maWVsZC5NQ1MgPSBpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaT09MCkKKwkJCWJyZWFrOworCX0KKworCS8vIENvcHkgTUlOIGh0IHJhdGUuICBydDI4NjA/Pz8KKwlwTWluSHRQaHktPmZpZWxkLkJXID0gQldfMjA7CisJcE1pbkh0UGh5LT5maWVsZC5NQ1MgPSAwOworCXBNaW5IdFBoeS0+ZmllbGQuU1RCQyA9IDA7CisJcE1pbkh0UGh5LT5maWVsZC5TaG9ydEdJID0gMDsKKwkvL0lmIFNUQSBhc3NpZ25zIGZpeGVkIHJhdGUuIHVwZGF0ZSB0byBmaXhlZCBoZXJlLgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCWlmICggKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpICYmIChwRGVzaXJlSHRQaHktPk1DU1NldFswXSAhPSAweGZmKSkKKwl7CisJCWlmIChwRGVzaXJlSHRQaHktPk1DU1NldFs0XSAhPSAwKQorCQl7CisJCQlwTWF4SHRQaHktPmZpZWxkLk1DUyA9IDMyOworCQkJcE1pbkh0UGh5LT5maWVsZC5NQ1MgPSAzMjsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiTWxtZVVwZGF0ZUh0VHhSYXRlczw9PT0gVXNlIEZpeGVkIE1DUyA9ICVkXG4iLHBNaW5IdFBoeS0+ZmllbGQuTUNTKSk7CisJCX0KKworCQlmb3IgKGk9MjM7IChDSEFSKWkgPj0gMDsgaS0tKSAvLyAzKjMKKwkJeworCQkJaiA9IGkvODsKKwkJCWJpdG1hc2sgPSAoMTw8KGktKGoqOCkpKTsKKwkJCWlmICggKHBEZXNpcmVIdFBoeS0+TUNTU2V0W2pdICYgYml0bWFzaykgJiYgKHBBY3RpdmVIdFBoeS0+TUNTU2V0W2pdICYgYml0bWFzaykpCisJCQl7CisJCQkJcE1heEh0UGh5LT5maWVsZC5NQ1MgPSBpOworCQkJCXBNaW5IdFBoeS0+ZmllbGQuTUNTID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpPT0wKQorCQkJCWJyZWFrOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKwkvLyBEZWNpZGUgaHQgcmF0ZQorCXBIdFBoeS0+ZmllbGQuU1RCQyA9IHBNYXhIdFBoeS0+ZmllbGQuU1RCQzsKKwlwSHRQaHktPmZpZWxkLkJXID0gcE1heEh0UGh5LT5maWVsZC5CVzsKKwlwSHRQaHktPmZpZWxkLk1PREUgPSBwTWF4SHRQaHktPmZpZWxkLk1PREU7CisJcEh0UGh5LT5maWVsZC5NQ1MgPSBwTWF4SHRQaHktPmZpZWxkLk1DUzsKKwlwSHRQaHktPmZpZWxkLlNob3J0R0kgPSBwTWF4SHRQaHktPmZpZWxkLlNob3J0R0k7CisKKwkvLyB1c2UgZGVmYXVsdCBub3cuIHJ0Mjg2MAorCWlmIChwRGVzaXJlSHRQaHktPk1DU1NldFswXSAhPSAweGZmKQorCQkqYXV0b19yYXRlX2N1cl9wID0gRkFMU0U7CisJZWxzZQorCQkqYXV0b19yYXRlX2N1cl9wID0gVFJVRTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBNbG1lVXBkYXRlSHRUeFJhdGVzPC0tLS5BTXNkdVNpemUgPSAlZCAgXG4iLCBwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVTaXplICkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiVFg6IE1DU1swXSA9ICV4IChjaG9vc2UgJWQpLCBCVyA9ICVkLCBTaG9ydEdJID0gJWQsIE1PREUgPSAlZCwgIFxuIiwgcEFjdGl2ZUh0UGh5LT5NQ1NTZXRbMF0scEh0UGh5LT5maWVsZC5NQ1MsCisJCXBIdFBoeS0+ZmllbGQuQlcsIHBIdFBoeS0+ZmllbGQuU2hvcnRHSSwgcEh0UGh5LT5maWVsZC5NT0RFKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJNbG1lVXBkYXRlSHRUeFJhdGVzPD09PSBcbiIpKTsKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lEIE1sbWVSYWRpb09mZigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlSVDI4WFhfTUxNRV9SQURJT19PRkYocEFkKTsKK30KKworLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lEIE1sbWVSYWRpb09uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVJUMjhYWF9NTE1FX1JBRElPX09OKHBBZCk7Cit9CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIGJzc190YWJsZS5jCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworLyohIFxicmllZiBpbml0aWFsaXplIEJTUyB0YWJsZQorICoJXHBhcmFtIHBfdGFiIHBvaW50ZXIgdG8gdGhlIHRhYmxlCisgKglccmV0dXJuIG5vbmUKKyAqCVxwcmUKKyAqCVxwb3N0CisKKyBJUlFMID0gUEFTU0lWRV9MRVZFTAorIElSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgKi8KK1ZPSUQgQnNzVGFibGVJbml0KAorCUlOIEJTU19UQUJMRSAqVGFiKQoreworCWludCBpOworCisJVGFiLT5Cc3NOciA9IDA7CisgICAgVGFiLT5Cc3NPdmVybGFwTnIgPSAwOworCWZvciAoaSA9IDA7IGkgPCBNQVhfTEVOX09GX0JTU19UQUJMRTsgaSsrKQorCXsKKwkJTmRpc1plcm9NZW1vcnkoJlRhYi0+QnNzRW50cnlbaV0sIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJVGFiLT5Cc3NFbnRyeVtpXS5Sc3NpID0gLTEyNzsJLy8gaW5pdGlhbCB0aGUgcnNzaSBhcyBhIG1pbmltdW0gdmFsdWUKKwl9Cit9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgQkFUYWJsZUluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gQkFfVEFCTEUgKlRhYikKK3sKKwlpbnQgaTsKKworCVRhYi0+bnVtQXNPcmlnaW5hdG9yID0gMDsKKwlUYWItPm51bUFzUmVjaXBpZW50ID0gMDsKKwlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCWZvciAoaSA9IDA7IGkgPCBNQVhfTEVOX09GX0JBX1JFQ19UQUJMRTsgaSsrKQorCXsKKwkJVGFiLT5CQVJlY0VudHJ5W2ldLlJFQ19CQV9TdGF0dXMgPSBSZWNpcGllbnRfTk9ORTsKKwkJTmRpc0FsbG9jYXRlU3BpbkxvY2soJihUYWItPkJBUmVjRW50cnlbaV0uUnhSZVJpbmdMb2NrKSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBNQVhfTEVOX09GX0JBX09SSV9UQUJMRTsgaSsrKQorCXsKKwkJVGFiLT5CQU9yaUVudHJ5W2ldLk9SSV9CQV9TdGF0dXMgPSBPcmlnaW5hdG9yX05PTkU7CisJfQorfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvKiEgXGJyaWVmIHNlYXJjaCB0aGUgQlNTIHRhYmxlIGJ5IFNTSUQKKyAqCVxwYXJhbSBwX3RhYiBwb2ludGVyIHRvIHRoZSBic3MgdGFibGUKKyAqCVxwYXJhbSBzc2lkIFNTSUQgc3RyaW5nCisgKglccmV0dXJuIGluZGV4IG9mIHRoZSB0YWJsZSwgQlNTX05PVF9GT1VORCBpZiBub3QgaW4gdGhlIHRhYmxlCisgKglccHJlCisgKglccG9zdAorICoJXG5vdGUgc2VhcmNoIGJ5IHNlcXVlbnRpYWwgc2VhcmNoCisKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitVTE9ORyBCc3NUYWJsZVNlYXJjaCgKKwlJTiBCU1NfVEFCTEUgKlRhYiwKKwlJTiBQVUNIQVIJIHBCc3NpZCwKKwlJTiBVQ0hBUgkgQ2hhbm5lbCkKK3sKKwlVQ0hBUiBpOworCisJZm9yIChpID0gMDsgaSA8IFRhYi0+QnNzTnI7IGkrKykKKwl7CisJCS8vCisJCS8vIFNvbWUgQVAgdGhhdCBzdXBwb3J0IEEvQi9HIG1vZGUgdGhhdCBtYXkgdXNlZCB0aGUgc2FtZSBCU1NJRCBvbiAxMUEgYW5kIDExQi9HLgorCQkvLyBXZSBzaG91bGQgZGlzdGluZ3Vpc2ggdGhpcyBjYXNlLgorCQkvLworCQlpZiAoKCgoVGFiLT5Cc3NFbnRyeVtpXS5DaGFubmVsIDw9IDE0KSAmJiAoQ2hhbm5lbCA8PSAxNCkpIHx8CisJCQkgKChUYWItPkJzc0VudHJ5W2ldLkNoYW5uZWwgPiAxNCkgJiYgKENoYW5uZWwgPiAxNCkpKSAmJgorCQkJTUFDX0FERFJfRVFVQUwoVGFiLT5Cc3NFbnRyeVtpXS5Cc3NpZCwgcEJzc2lkKSkKKwkJeworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisJcmV0dXJuIChVTE9ORylCU1NfTk9UX0ZPVU5EOworfQorCitVTE9ORyBCc3NTc2lkVGFibGVTZWFyY2goCisJSU4gQlNTX1RBQkxFICpUYWIsCisJSU4gUFVDSEFSCSBwQnNzaWQsCisJSU4gUFVDSEFSCSBwU3NpZCwKKwlJTiBVQ0hBUgkgU3NpZExlbiwKKwlJTiBVQ0hBUgkgQ2hhbm5lbCkKK3sKKwlVQ0hBUiBpOworCisJZm9yIChpID0gMDsgaSA8IFRhYi0+QnNzTnI7IGkrKykKKwl7CisJCS8vCisJCS8vIFNvbWUgQVAgdGhhdCBzdXBwb3J0IEEvQi9HIG1vZGUgdGhhdCBtYXkgdXNlZCB0aGUgc2FtZSBCU1NJRCBvbiAxMUEgYW5kIDExQi9HLgorCQkvLyBXZSBzaG91bGQgZGlzdGluZ3Vpc2ggdGhpcyBjYXNlLgorCQkvLworCQlpZiAoKCgoVGFiLT5Cc3NFbnRyeVtpXS5DaGFubmVsIDw9IDE0KSAmJiAoQ2hhbm5lbCA8PSAxNCkpIHx8CisJCQkgKChUYWItPkJzc0VudHJ5W2ldLkNoYW5uZWwgPiAxNCkgJiYgKENoYW5uZWwgPiAxNCkpKSAmJgorCQkJTUFDX0FERFJfRVFVQUwoVGFiLT5Cc3NFbnRyeVtpXS5Cc3NpZCwgcEJzc2lkKSAmJgorCQkJU1NJRF9FUVVBTChwU3NpZCwgU3NpZExlbiwgVGFiLT5Cc3NFbnRyeVtpXS5Tc2lkLCBUYWItPkJzc0VudHJ5W2ldLlNzaWRMZW4pKQorCQl7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlyZXR1cm4gKFVMT05HKUJTU19OT1RfRk9VTkQ7Cit9CisKK1VMT05HIEJzc1RhYmxlU2VhcmNoV2l0aFNTSUQoCisJSU4gQlNTX1RBQkxFICpUYWIsCisJSU4gUFVDSEFSCSBCc3NpZCwKKwlJTiBQVUNIQVIJIHBTc2lkLAorCUlOIFVDSEFSCSBTc2lkTGVuLAorCUlOIFVDSEFSCSBDaGFubmVsKQoreworCVVDSEFSIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVGFiLT5Cc3NOcjsgaSsrKQorCXsKKwkJaWYgKCgoKFRhYi0+QnNzRW50cnlbaV0uQ2hhbm5lbCA8PSAxNCkgJiYgKENoYW5uZWwgPD0gMTQpKSB8fAorCQkJKChUYWItPkJzc0VudHJ5W2ldLkNoYW5uZWwgPiAxNCkgJiYgKENoYW5uZWwgPiAxNCkpKSAmJgorCQkJTUFDX0FERFJfRVFVQUwoJihUYWItPkJzc0VudHJ5W2ldLkJzc2lkKSwgQnNzaWQpICYmCisJCQkoU1NJRF9FUVVBTChwU3NpZCwgU3NpZExlbiwgVGFiLT5Cc3NFbnRyeVtpXS5Tc2lkLCBUYWItPkJzc0VudHJ5W2ldLlNzaWRMZW4pIHx8CisJCQkoTmRpc0VxdWFsTWVtb3J5KHBTc2lkLCBaZXJvU3NpZCwgU3NpZExlbikpIHx8CisJCQkoTmRpc0VxdWFsTWVtb3J5KFRhYi0+QnNzRW50cnlbaV0uU3NpZCwgWmVyb1NzaWQsIFRhYi0+QnNzRW50cnlbaV0uU3NpZExlbikpKSkKKwkJeworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisJcmV0dXJuIChVTE9ORylCU1NfTk9UX0ZPVU5EOworfQorCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgQnNzVGFibGVEZWxldGVFbnRyeSgKKwlJTiBPVVQJQlNTX1RBQkxFICpUYWIsCisJSU4JCVBVQ0hBUgkgIHBCc3NpZCwKKwlJTgkJVUNIQVIJICBDaGFubmVsKQoreworCVVDSEFSIGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgVGFiLT5Cc3NOcjsgaSsrKQorCXsKKwkJaWYgKChUYWItPkJzc0VudHJ5W2ldLkNoYW5uZWwgPT0gQ2hhbm5lbCkgJiYKKwkJCShNQUNfQUREUl9FUVVBTChUYWItPkJzc0VudHJ5W2ldLkJzc2lkLCBwQnNzaWQpKSkKKwkJeworCQkJZm9yIChqID0gaTsgaiA8IFRhYi0+QnNzTnIgLSAxOyBqKyspCisJCQl7CisJCQkJTmRpc01vdmVNZW1vcnkoJihUYWItPkJzc0VudHJ5W2pdKSwgJihUYWItPkJzc0VudHJ5W2ogKyAxXSksIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJCX0KKwkJCU5kaXNaZXJvTWVtb3J5KCYoVGFiLT5Cc3NFbnRyeVtUYWItPkJzc05yIC0gMV0pLCBzaXplb2YoQlNTX0VOVFJZKSk7CisJCQlUYWItPkJzc05yIC09IDE7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJRGVsZXRlIHRoZSBPcmlnaW5hdG9yIEVudHJ5IGluIEJBdGFibGUuIE9yIGRlY3JlYXNlIG51bUFzIE9yaWdpbmF0b3IgYnkgMSBpZiBuZWVkZWQuCisKKwlBcmd1bWVudHM6CisJLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBCQVRhYmxlRGVsZXRlT1JJRW50cnkoCisJSU4gT1VUCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCQlCQV9PUklfRU5UUlkJKnBCQU9SSUVudHJ5KQoreworCisJaWYgKHBCQU9SSUVudHJ5LT5PUklfQkFfU3RhdHVzICE9IE9yaWdpbmF0b3JfTk9ORSkKKwl7CisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QkFUYWJMb2NrKTsKKwkJaWYgKHBCQU9SSUVudHJ5LT5PUklfQkFfU3RhdHVzID09IE9yaWdpbmF0b3JfRG9uZSkKKwkJeworCQkJcEFkLT5CQVRhYmxlLm51bUFzT3JpZ2luYXRvciAtPSAxOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQkFUYWJsZURlbGV0ZU9SSUVudHJ5IG51bUFzT3JpZ2luYXRvcj0gJWxkXG4iLCBwQWQtPkJBVGFibGUubnVtQXNSZWNpcGllbnQpKTsKKwkJCS8vIEVyYXNlIEJpdG1hcCBmbGFnLgorCQl9CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbcEJBT1JJRW50cnktPldjaWRdLlRYQkFiaXRtYXAgJj0gKH4oMTw8KHBCQU9SSUVudHJ5LT5USUQpICkpOwkvLyBJZiBTVEEgbW9kZSwgIGVyYXNlIGZsYWcgaGVyZQorCQlwQWQtPk1hY1RhYi5Db250ZW50W3BCQU9SSUVudHJ5LT5XY2lkXS5CQU9yaVdjaWRBcnJheVtwQkFPUklFbnRyeS0+VElEXSA9IDA7CS8vIElmIFNUQSBtb2RlLCAgZXJhc2UgZmxhZyBoZXJlCisJCXBCQU9SSUVudHJ5LT5PUklfQkFfU3RhdHVzID0gT3JpZ2luYXRvcl9OT05FOworCQlwQkFPUklFbnRyeS0+VG9rZW4gPSAxOworCQkvLyBOb3QgY2xlYXIgU2VxdWVuY2UgaGVyZS4KKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5CQVRhYkxvY2spOworCX0KK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworLyohIFxicmllZgorICoJXHBhcmFtCisgKglccmV0dXJuCisgKglccHJlCisgKglccG9zdAorCisgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAqLworVk9JRCBCc3NFbnRyeVNldCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQgQlNTX0VOVFJZICpwQnNzLAorCUlOIFBVQ0hBUiBwQnNzaWQsCisJSU4gQ0hBUiBTc2lkW10sCisJSU4gVUNIQVIgU3NpZExlbiwKKwlJTiBVQ0hBUiBCc3NUeXBlLAorCUlOIFVTSE9SVCBCZWFjb25QZXJpb2QsCisJSU4gUENGX1BBUk0gcENmUGFybSwKKwlJTiBVU0hPUlQgQXRpbVdpbiwKKwlJTiBVU0hPUlQgQ2FwYWJpbGl0eUluZm8sCisJSU4gVUNIQVIgU3VwUmF0ZVtdLAorCUlOIFVDSEFSIFN1cFJhdGVMZW4sCisJSU4gVUNIQVIgRXh0UmF0ZVtdLAorCUlOIFVDSEFSIEV4dFJhdGVMZW4sCisJSU4gSFRfQ0FQQUJJTElUWV9JRSAqcEh0Q2FwYWJpbGl0eSwKKwlJTiBBRERfSFRfSU5GT19JRSAqcEFkZEh0SW5mbywJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJSU4gVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4sCisJSU4gVUNIQVIJCQlBZGRIdEluZm9MZW4sCisJSU4gVUNIQVIJCQlOZXdFeHRDaGFuT2Zmc2V0LAorCUlOIFVDSEFSIENoYW5uZWwsCisJSU4gQ0hBUiBSc3NpLAorCUlOIExBUkdFX0lOVEVHRVIgVGltZVN0YW1wLAorCUlOIFVDSEFSIENraXBGbGFnLAorCUlOIFBFRENBX1BBUk0gcEVkY2FQYXJtLAorCUlOIFBRT1NfQ0FQQUJJTElUWV9QQVJNIHBRb3NDYXBhYmlsaXR5LAorCUlOIFBRQlNTX0xPQURfUEFSTSBwUWJzc0xvYWQsCisJSU4gVVNIT1JUIExlbmd0aFZJRSwKKwlJTiBQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzIHBWSUUpCit7CisJQ09QWV9NQUNfQUREUihwQnNzLT5Cc3NpZCwgcEJzc2lkKTsKKwkvLyBEZWZhdWx0IEhpZGRlbiBTU0lEIHRvIGJlIFRSVUUsIGl0IHdpbGwgYmUgdHVybmVkIHRvIEZBTFNFIGFmdGVyIGNvcGluZyBTU0lECisJcEJzcy0+SGlkZGVuID0gMTsKKwlpZiAoU3NpZExlbiA+IDApCisJeworCQkvLyBGb3IgaGlkZGVuIFNTSUQgQVAsIGl0IG1pZ2h0IHNlbmQgYmVhY29uIHdpdGggU1NJRCBsZW4gZXF1YWwgdG8gMAorCQkvLyBPciBzZW5kIGJlYWNvbiAvcHJvYmUgcmVzcG9uc2Ugd2l0aCBTU0lEIGxlbiBtYXRjaGluZyByZWFsIFNTSUQgbGVuZ3RoLAorCQkvLyBidXQgU1NJRCBpcyBhbGwgemVyby4gc3VjaCBhcyAiMDAtMDAtMDAtMDAiIHdpdGggbGVuZ3RoIDQuCisJCS8vIFdlIGhhdmUgdG8gcHJldmVudCB0aGlzIGNhc2Ugb3ZlcndyaXRlIGNvcnJlY3QgdGFibGUKKwkJaWYgKE5kaXNFcXVhbE1lbW9yeShTc2lkLCBaZXJvU3NpZCwgU3NpZExlbikgPT0gMCkKKwkJeworCQkgICAgTmRpc1plcm9NZW1vcnkocEJzcy0+U3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBCc3MtPlNzaWQsIFNzaWQsIFNzaWRMZW4pOworCQkJcEJzcy0+U3NpZExlbiA9IFNzaWRMZW47CisJCQlwQnNzLT5IaWRkZW4gPSAwOworCQl9CisJfQorCWVsc2UKKwkJcEJzcy0+U3NpZExlbiA9IDA7CisJcEJzcy0+QnNzVHlwZSA9IEJzc1R5cGU7CisJcEJzcy0+QmVhY29uUGVyaW9kID0gQmVhY29uUGVyaW9kOworCWlmIChCc3NUeXBlID09IEJTU19JTkZSQSkKKwl7CisJCWlmIChwQ2ZQYXJtLT5iVmFsaWQpCisJCXsKKwkJCXBCc3MtPkNmcENvdW50ID0gcENmUGFybS0+Q2ZwQ291bnQ7CisJCQlwQnNzLT5DZnBQZXJpb2QgPSBwQ2ZQYXJtLT5DZnBQZXJpb2Q7CisJCQlwQnNzLT5DZnBNYXhEdXJhdGlvbiA9IHBDZlBhcm0tPkNmcE1heER1cmF0aW9uOworCQkJcEJzcy0+Q2ZwRHVyUmVtYWluaW5nID0gcENmUGFybS0+Q2ZwRHVyUmVtYWluaW5nOworCQl9CisJfQorCWVsc2UKKwl7CisJCXBCc3MtPkF0aW1XaW4gPSBBdGltV2luOworCX0KKworCXBCc3MtPkNhcGFiaWxpdHlJbmZvID0gQ2FwYWJpbGl0eUluZm87CisJLy8gVGhlIHByaXZhY3kgYml0IGluZGljYXRlIHNlY3VyaXR5IGlzIE9OLCBpdCBtYWlnaHQgYmUgV0VQLCBUS0lQIG9yIEFFUworCS8vIENvbWJpbmUgd2l0aCBBdXRoTW9kZSwgdGhleSB3aWxsIGRlY2lkZSB0aGUgY29ubmVjdGlvbiBtZXRob2RzLgorCXBCc3MtPlByaXZhY3kgPSBDQVBfSVNfUFJJVkFDWV9PTihwQnNzLT5DYXBhYmlsaXR5SW5mbyk7CisJQVNTRVJUKFN1cFJhdGVMZW4gPD0gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOworCWlmIChTdXBSYXRlTGVuIDw9IE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKQorCQlOZGlzTW92ZU1lbW9yeShwQnNzLT5TdXBSYXRlLCBTdXBSYXRlLCBTdXBSYXRlTGVuKTsKKwllbHNlCisJCU5kaXNNb3ZlTWVtb3J5KHBCc3MtPlN1cFJhdGUsIFN1cFJhdGUsIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKKwlwQnNzLT5TdXBSYXRlTGVuID0gU3VwUmF0ZUxlbjsKKwlBU1NFUlQoRXh0UmF0ZUxlbiA8PSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7CisJTmRpc01vdmVNZW1vcnkocEJzcy0+RXh0UmF0ZSwgRXh0UmF0ZSwgRXh0UmF0ZUxlbik7CisJTmRpc01vdmVNZW1vcnkoJnBCc3MtPkh0Q2FwYWJpbGl0eSwgcEh0Q2FwYWJpbGl0eSwgSHRDYXBhYmlsaXR5TGVuKTsKKwlOZGlzTW92ZU1lbW9yeSgmcEJzcy0+QWRkSHRJbmZvLCBwQWRkSHRJbmZvLCBBZGRIdEluZm9MZW4pOworCXBCc3MtPk5ld0V4dENoYW5PZmZzZXQgPSBOZXdFeHRDaGFuT2Zmc2V0OworCXBCc3MtPkV4dFJhdGVMZW4gPSBFeHRSYXRlTGVuOworCXBCc3MtPkNoYW5uZWwgPSBDaGFubmVsOworCXBCc3MtPkNlbnRyYWxDaGFubmVsID0gQ2hhbm5lbDsKKwlwQnNzLT5Sc3NpID0gUnNzaTsKKwkvLyBVcGRhdGUgQ2tpcEZsYWcuIGlmIG5vdCBleGlzdHMsIHRoZSB2YWx1ZSBpcyAweDAKKwlwQnNzLT5Da2lwRmxhZyA9IENraXBGbGFnOworCisJLy8gTmV3IGZvciBtaWNyb3NvZnQgRml4ZWQgSUVzCisJTmRpc01vdmVNZW1vcnkocEJzcy0+Rml4SUVzLlRpbWVzdGFtcCwgJlRpbWVTdGFtcCwgOCk7CisJcEJzcy0+Rml4SUVzLkJlYWNvbkludGVydmFsID0gQmVhY29uUGVyaW9kOworCXBCc3MtPkZpeElFcy5DYXBhYmlsaXRpZXMgPSBDYXBhYmlsaXR5SW5mbzsKKworCS8vIE5ldyBmb3IgbWljcm9zb2Z0IFZhcmlhYmxlIElFcworCWlmIChMZW5ndGhWSUUgIT0gMCkKKwl7CisJCXBCc3MtPlZhcklFTGVuID0gTGVuZ3RoVklFOworCQlOZGlzTW92ZU1lbW9yeShwQnNzLT5WYXJJRXMsIHBWSUUsIHBCc3MtPlZhcklFTGVuKTsKKwl9CisJZWxzZQorCXsKKwkJcEJzcy0+VmFySUVMZW4gPSAwOworCX0KKworCXBCc3MtPkFkZEh0SW5mb0xlbiA9IDA7CisJcEJzcy0+SHRDYXBhYmlsaXR5TGVuID0gMDsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAoSHRDYXBhYmlsaXR5TGVuPiAwKQorCXsKKwkJcEJzcy0+SHRDYXBhYmlsaXR5TGVuID0gSHRDYXBhYmlsaXR5TGVuOworCQlOZGlzTW92ZU1lbW9yeSgmcEJzcy0+SHRDYXBhYmlsaXR5LCBwSHRDYXBhYmlsaXR5LCBIdENhcGFiaWxpdHlMZW4pOworCQlpZiAoQWRkSHRJbmZvTGVuID4gMCkKKwkJeworCQkJcEJzcy0+QWRkSHRJbmZvTGVuID0gQWRkSHRJbmZvTGVuOworCQkJTmRpc01vdmVNZW1vcnkoJnBCc3MtPkFkZEh0SW5mbywgcEFkZEh0SW5mbywgQWRkSHRJbmZvTGVuKTsKKworCSAJCQlpZiAoKHBBZGRIdEluZm8tPkNvbnRyb2xDaGFuID4gMikmJiAocEFkZEh0SW5mby0+QWRkSHRJbmZvLkV4dENoYW5PZmZzZXQgPT0gRVhUQ0hBX0JFTE9XKSAmJiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9PSBCV180MCkpCisJIAkJCXsKKwkgCQkJCXBCc3MtPkNlbnRyYWxDaGFubmVsID0gcEFkZEh0SW5mby0+Q29udHJvbENoYW4gLSAyOworCSAJCQl9CisJIAkJCWVsc2UgaWYgKChwQWRkSHRJbmZvLT5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9PSBFWFRDSEFfQUJPVkUpICYmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID09IEJXXzQwKSkKKwkJCQl7CisJCSAJCQkJcEJzcy0+Q2VudHJhbENoYW5uZWwgPSBwQWRkSHRJbmZvLT5Db250cm9sQ2hhbiArIDI7CisJCQkJfQorCQl9CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJQnNzQ2lwaGVyUGFyc2UocEJzcyk7CisKKwkvLyBuZXcgZm9yIFFPUworCWlmIChwRWRjYVBhcm0pCisJCU5kaXNNb3ZlTWVtb3J5KCZwQnNzLT5FZGNhUGFybSwgcEVkY2FQYXJtLCBzaXplb2YoRURDQV9QQVJNKSk7CisJZWxzZQorCQlwQnNzLT5FZGNhUGFybS5iVmFsaWQgPSBGQUxTRTsKKwlpZiAocFFvc0NhcGFiaWxpdHkpCisJCU5kaXNNb3ZlTWVtb3J5KCZwQnNzLT5Rb3NDYXBhYmlsaXR5LCBwUW9zQ2FwYWJpbGl0eSwgc2l6ZW9mKFFPU19DQVBBQklMSVRZX1BBUk0pKTsKKwllbHNlCisJCXBCc3MtPlFvc0NhcGFiaWxpdHkuYlZhbGlkID0gRkFMU0U7CisJaWYgKHBRYnNzTG9hZCkKKwkJTmRpc01vdmVNZW1vcnkoJnBCc3MtPlFic3NMb2FkLCBwUWJzc0xvYWQsIHNpemVvZihRQlNTX0xPQURfUEFSTSkpOworCWVsc2UKKwkJcEJzcy0+UWJzc0xvYWQuYlZhbGlkID0gRkFMU0U7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJUEVJRF9TVFJVQ1QgICAgIHBFaWQ7CisJCVVTSE9SVCAgICAgICAgICBMZW5ndGggPSAwOworCisKKwkJTmRpc1plcm9NZW1vcnkoJnBCc3MtPldwYUlFLklFWzBdLCBNQVhfQ1VTVE9NX0xFTik7CisJCU5kaXNaZXJvTWVtb3J5KCZwQnNzLT5Sc25JRS5JRVswXSwgTUFYX0NVU1RPTV9MRU4pOworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwkJTmRpc1plcm9NZW1vcnkoJnBCc3MtPkNvdW50cnlTdHJpbmdbMF0sIDMpOworCQlwQnNzLT5iSGFzQ291bnRyeUlFID0gRkFMU0U7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworCQlwRWlkID0gKFBFSURfU1RSVUNUKSBwVklFOworCQl3aGlsZSAoKExlbmd0aCArIDIgKyAoVVNIT1JUKXBFaWQtPkxlbikgPD0gTGVuZ3RoVklFKQorCQl7CisJCQlzd2l0Y2gocEVpZC0+RWlkKQorCQkJeworCQkJCWNhc2UgSUVfV1BBOgorCQkJCQlpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBXUEFfT1VJLCA0KSkKKwkJCQkJeworCQkJCQkJaWYgKChwRWlkLT5MZW4gKyAyKSA+IE1BWF9DVVNUT01fTEVOKQorCQkJCQkJeworCQkJCQkJCXBCc3MtPldwYUlFLklFTGVuID0gMDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCXBCc3MtPldwYUlFLklFTGVuID0gcEVpZC0+TGVuICsgMjsKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBCc3MtPldwYUlFLklFLCBwRWlkLCBwQnNzLT5XcGFJRS5JRUxlbik7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJRV9SU046CisgICAgICAgICAgICAgICAgICAgIGlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQgKyAyLCBSU05fT1VJLCAzKSkKKwkJCQkJeworCQkJCQkJaWYgKChwRWlkLT5MZW4gKyAyKSA+IE1BWF9DVVNUT01fTEVOKQorCQkJCQkJeworCQkJCQkJCXBCc3MtPlJzbklFLklFTGVuID0gMDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCXBCc3MtPlJzbklFLklFTGVuID0gcEVpZC0+TGVuICsgMjsKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBCc3MtPlJzbklFLklFLCBwRWlkLCBwQnNzLT5Sc25JRS5JRUxlbik7CisJCQl9CisJCQkJYnJlYWs7CisjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAorCQkJCWNhc2UgSUVfQ09VTlRSWToKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBCc3MtPkNvdW50cnlTdHJpbmdbMF0sIHBFaWQtPk9jdGV0LCAzKTsKKwkJCQkJcEJzcy0+Ykhhc0NvdW50cnlJRSA9IFRSVUU7CisJCQkJCWJyZWFrOworI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKyAgICAgICAgICAgIH0KKwkJCUxlbmd0aCA9IExlbmd0aCArIDIgKyAoVVNIT1JUKXBFaWQtPkxlbjsgIC8vIEVpZFsxXSArIExlblsxXSsgY29udGVudFtMZW5dCisJCQlwRWlkID0gKFBFSURfU1RSVUNUKSgoVUNIQVIqKXBFaWQgKyAyICsgcEVpZC0+TGVuKTsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KK30KKworLyohCisgKglcYnJpZWYgaW5zZXJ0IGFuIGVudHJ5IGludG8gdGhlIGJzcyB0YWJsZQorICoJXHBhcmFtIHBfdGFiIFRoZSBCU1MgdGFibGUKKyAqCVxwYXJhbSBCc3NpZCBCU1NJRAorICoJXHBhcmFtIHNzaWQgU1NJRAorICoJXHBhcmFtIHNzaWRfbGVuIExlbmd0aCBvZiBTU0lECisgKglccGFyYW0gYnNzX3R5cGUKKyAqCVxwYXJhbSBiZWFjb25fcGVyaW9kCisgKglccGFyYW0gdGltZXN0YW1wCisgKglccGFyYW0gcF9jZgorICoJXHBhcmFtIGF0aW1fd2luCisgKglccGFyYW0gY2FwCisgKglccGFyYW0gcmF0ZXMKKyAqCVxwYXJhbSByYXRlc19sZW4KKyAqCVxwYXJhbSBjaGFubmVsX2lkeAorICoJXHJldHVybiBub25lCisgKglccHJlCisgKglccG9zdAorICoJXG5vdGUgSWYgU1NJRCBpcyBpZGVudGljYWwsIHRoZSBvbGQgZW50cnkgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgbmV3IG9uZQorCisgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAqLworVUxPTkcgQnNzVGFibGVTZXRFbnRyeSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQgQlNTX1RBQkxFICpUYWIsCisJSU4gUFVDSEFSIHBCc3NpZCwKKwlJTiBDSEFSIFNzaWRbXSwKKwlJTiBVQ0hBUiBTc2lkTGVuLAorCUlOIFVDSEFSIEJzc1R5cGUsCisJSU4gVVNIT1JUIEJlYWNvblBlcmlvZCwKKwlJTiBDRl9QQVJNICpDZlBhcm0sCisJSU4gVVNIT1JUIEF0aW1XaW4sCisJSU4gVVNIT1JUIENhcGFiaWxpdHlJbmZvLAorCUlOIFVDSEFSIFN1cFJhdGVbXSwKKwlJTiBVQ0hBUiBTdXBSYXRlTGVuLAorCUlOIFVDSEFSIEV4dFJhdGVbXSwKKwlJTiBVQ0hBUiBFeHRSYXRlTGVuLAorCUlOIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHksCisJSU4gQUREX0hUX0lORk9fSUUgKnBBZGRIdEluZm8sCS8vIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRQorCUlOIFVDSEFSCQkJSHRDYXBhYmlsaXR5TGVuLAorCUlOIFVDSEFSCQkJQWRkSHRJbmZvTGVuLAorCUlOIFVDSEFSCQkJTmV3RXh0Q2hhbk9mZnNldCwKKwlJTiBVQ0hBUiBDaGFubmVsTm8sCisJSU4gQ0hBUiBSc3NpLAorCUlOIExBUkdFX0lOVEVHRVIgVGltZVN0YW1wLAorCUlOIFVDSEFSIENraXBGbGFnLAorCUlOIFBFRENBX1BBUk0gcEVkY2FQYXJtLAorCUlOIFBRT1NfQ0FQQUJJTElUWV9QQVJNIHBRb3NDYXBhYmlsaXR5LAorCUlOIFBRQlNTX0xPQURfUEFSTSBwUWJzc0xvYWQsCisJSU4gVVNIT1JUIExlbmd0aFZJRSwKKwlJTiBQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzIHBWSUUpCit7CisJVUxPTkcJSWR4OworCisJSWR4ID0gQnNzVGFibGVTZWFyY2hXaXRoU1NJRChUYWIsIHBCc3NpZCwgIFNzaWQsIFNzaWRMZW4sIENoYW5uZWxObyk7CisJaWYgKElkeCA9PSBCU1NfTk9UX0ZPVU5EKQorCXsKKwkJaWYgKFRhYi0+QnNzTnIgPj0gTUFYX0xFTl9PRl9CU1NfVEFCTEUpCisJICAgIHsKKwkJCS8vCisJCQkvLyBJdCBtYXkgaGFwcGVuIHdoZW4gQlNTIFRhYmxlIHdhcyBmdWxsLgorCQkJLy8gVGhlIGRlc2lyZWQgQVAgd2lsbCBub3QgYmUgYWRkZWQgaW50byBCU1MgVGFibGUKKwkJCS8vIEluIHRoaXMgY2FzZSwgaWYgd2UgZm91bmQgdGhlIGRlc2lyZWQgQVAgdGhlbiBvdmVyd3JpdGUgQlNTIFRhYmxlLgorCQkJLy8KKwkJCWlmKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJCQl7CisJCQkJaWYgKE1BQ19BRERSX0VRVUFMKHBBZC0+TWxtZUF1eC5Cc3NpZCwgcEJzc2lkKSB8fAorCQkJCQlTU0lEX0VRVUFMKHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbiwgU3NpZCwgU3NpZExlbikpCisJCQkJeworCQkJCQlJZHggPSBUYWItPkJzc092ZXJsYXBOcjsKKwkJCQkJQnNzRW50cnlTZXQocEFkLCAmVGFiLT5Cc3NFbnRyeVtJZHhdLCBwQnNzaWQsIFNzaWQsIFNzaWRMZW4sIEJzc1R5cGUsIEJlYWNvblBlcmlvZCwgQ2ZQYXJtLCBBdGltV2luLAorCQkJCQkJQ2FwYWJpbGl0eUluZm8sIFN1cFJhdGUsIFN1cFJhdGVMZW4sIEV4dFJhdGUsIEV4dFJhdGVMZW4scEh0Q2FwYWJpbGl0eSwgcEFkZEh0SW5mbyxIdENhcGFiaWxpdHlMZW4sIEFkZEh0SW5mb0xlbiwKKwkJCQkJCU5ld0V4dENoYW5PZmZzZXQsIENoYW5uZWxObywgUnNzaSwgVGltZVN0YW1wLCBDa2lwRmxhZywgcEVkY2FQYXJtLCBwUW9zQ2FwYWJpbGl0eSwgcFFic3NMb2FkLCBMZW5ndGhWSUUsIHBWSUUpOworICAgICAgICAgICAgICAgICAgICBUYWItPkJzc092ZXJsYXBOciA9IChUYWItPkJzc092ZXJsYXBOcisrKSAlIE1BWF9MRU5fT0ZfQlNTX1RBQkxFOworCQkJCX0KKwkJCQlyZXR1cm4gSWR4OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJcmV0dXJuIEJTU19OT1RfRk9VTkQ7CisJCQl9CisJCX0KKwkJSWR4ID0gVGFiLT5Cc3NOcjsKKwkJQnNzRW50cnlTZXQocEFkLCAmVGFiLT5Cc3NFbnRyeVtJZHhdLCBwQnNzaWQsIFNzaWQsIFNzaWRMZW4sIEJzc1R5cGUsIEJlYWNvblBlcmlvZCwgQ2ZQYXJtLCBBdGltV2luLAorCQkJCQlDYXBhYmlsaXR5SW5mbywgU3VwUmF0ZSwgU3VwUmF0ZUxlbiwgRXh0UmF0ZSwgRXh0UmF0ZUxlbixwSHRDYXBhYmlsaXR5LCBwQWRkSHRJbmZvLEh0Q2FwYWJpbGl0eUxlbiwgQWRkSHRJbmZvTGVuLAorCQkJCQlOZXdFeHRDaGFuT2Zmc2V0LCBDaGFubmVsTm8sIFJzc2ksIFRpbWVTdGFtcCwgQ2tpcEZsYWcsIHBFZGNhUGFybSwgcFFvc0NhcGFiaWxpdHksIHBRYnNzTG9hZCwgTGVuZ3RoVklFLCBwVklFKTsKKwkJVGFiLT5Cc3NOcisrOworCX0KKwllbHNlCisJeworCQkvKiBhdm9pZCAgSGlkZGVuIFNTSUQgZm9ybSBiZWFjb24gdG8gb3Zlcndpcml0ZSBjb3JyZWN0IFNTSUQgZnJvbSBwcm9iZSByZXNwb25zZSAqLworCQlpZiAoKFNTSURfRVFVQUwoU3NpZCwgU3NpZExlbiwgVGFiLT5Cc3NFbnRyeVtJZHhdLlNzaWQsIFRhYi0+QnNzRW50cnlbSWR4XS5Tc2lkTGVuKSkgfHwKKwkJCShOZGlzRXF1YWxNZW1vcnkoVGFiLT5Cc3NFbnRyeVtJZHhdLlNzaWQsIFplcm9Tc2lkLCBUYWItPkJzc0VudHJ5W0lkeF0uU3NpZExlbikpKQorCQl7CisJCQlCc3NFbnRyeVNldChwQWQsICZUYWItPkJzc0VudHJ5W0lkeF0sIHBCc3NpZCwgU3NpZCwgU3NpZExlbiwgQnNzVHlwZSwgQmVhY29uUGVyaW9kLENmUGFybSwgQXRpbVdpbiwKKwkJCQkJCUNhcGFiaWxpdHlJbmZvLCBTdXBSYXRlLCBTdXBSYXRlTGVuLCBFeHRSYXRlLCBFeHRSYXRlTGVuLHBIdENhcGFiaWxpdHksIHBBZGRIdEluZm8sSHRDYXBhYmlsaXR5TGVuLCBBZGRIdEluZm9MZW4sCisJCQkJCQlOZXdFeHRDaGFuT2Zmc2V0LCBDaGFubmVsTm8sIFJzc2ksIFRpbWVTdGFtcCwgQ2tpcEZsYWcsIHBFZGNhUGFybSwgcFFvc0NhcGFiaWxpdHksIHBRYnNzTG9hZCwgTGVuZ3RoVklFLCBwVklFKTsKKwkJfQorCX0KKworCXJldHVybiBJZHg7Cit9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyNpZmRlZiBET1QxMU5fRFJBRlQzCitWT0lEICBUcmlFdmVudEluaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUNIQVIJCWk7CisKKwlmb3IgKGkgPSAwO2kgPCBNQVhfVFJJR0dFUl9FVkVOVDtpKyspCisJCXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEFbaV0uYlZhbGlkID0gRkFMU0U7CisKKwlwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBTm8gPSAwOworCXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEJDb3VudERvd24gPSAwOworfQorCitVTE9ORyBUcmlFdmVudFRhYmxlU2V0RW50cnkoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUIFRSSUdHRVJfRVZFTlRfVEFCICpUYWIsCisJSU4gUFVDSEFSIHBCc3NpZCwKKwlJTiBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5LAorCUlOIFVDSEFSCQkJSHRDYXBhYmlsaXR5TGVuLAorCUlOIFVDSEFSCQkJUmVnQ2xhc3MsCisJSU4gVUNIQVIgQ2hhbm5lbE5vKQoreworCS8vIEV2ZW50IEEKKwlpZiAoSHRDYXBhYmlsaXR5TGVuID09IDApCisJeworCQlpZiAoVGFiLT5FdmVudEFObyA8IE1BWF9UUklHR0VSX0VWRU5UKQorCQl7CisJCQlSVE1QTW92ZU1lbW9yeShUYWItPkV2ZW50QVtUYWItPkV2ZW50QU5vXS5CU1NJRCwgcEJzc2lkLCA2KTsKKwkJCVRhYi0+RXZlbnRBW1RhYi0+RXZlbnRBTm9dLmJWYWxpZCA9IFRSVUU7CisJCQlUYWItPkV2ZW50QVtUYWItPkV2ZW50QU5vXS5DaGFubmVsID0gQ2hhbm5lbE5vOworCQkJVGFiLT5FdmVudEFbVGFiLT5FdmVudEFOb10uQ0RDb3VudGVyID0gcEFkLT5Db21tb25DZmcuRG90MTFCc3NXaWR0aENoYW5UcmFuRGVsYXk7CisJCQlpZiAoUmVnQ2xhc3MgIT0gMCkKKwkJCXsKKwkJCQkvLyBCZWFjb24gaGFzIFJlZ3VsYXRvcnkgY2xhc3MgSUUuIFNvIHVzZSBiZWFjb24ncworCQkJCVRhYi0+RXZlbnRBW1RhYi0+RXZlbnRBTm9dLlJlZ0NsYXNzID0gUmVnQ2xhc3M7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8gVXNlIFN0YXRpb24ncyBSZWd1bGF0b3J5IGNsYXNzIGluc3RlYWQuCisJCQkJaWYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5LmJIdEVuYWJsZSA9PSBUUlVFKQorCQkJCXsKKwkJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID4gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwkJCQkJeworCQkJCQkJVGFiLT5FdmVudEFbVGFiLT5FdmVudEFOb10uUmVnQ2xhc3MgPSAzMjsKKwkJCQkJfQorCQkJCQllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA8IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCisJCQkJCQlUYWItPkV2ZW50QVtUYWItPkV2ZW50QU5vXS5SZWdDbGFzcyA9IDMzOworCQkJCX0KKwkJCQllbHNlCisJCQkJCVRhYi0+RXZlbnRBW1RhYi0+RXZlbnRBTm9dLlJlZ0NsYXNzID0gPz87CisKKwkJCX0KKworCQkJVGFiLT5FdmVudEFObyArKzsKKwkJfQorCX0KKwllbHNlIGlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uSW50b2xlcmFudDQwKQorCXsKKwkJVGFiLT5FdmVudEJDb3VudERvd24gPSBwQWQtPkNvbW1vbkNmZy5Eb3QxMUJzc1dpZHRoQ2hhblRyYW5EZWxheTsKKwl9CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlUcmlnZ2VyIEV2ZW50IHRhYmxlIE1haW50YWluZW5jZSBjYWxsZWQgb25jZSBldmVyeSBzZWNvbmQuCisKKwlBcmd1bWVudHM6CisJLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBUcmlFdmVudENvdW50ZXJNYWludGVuYW5jZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVQ0hBUgkJaTsKKwlCT09MRUFOCQkJYk5vdGlmeSA9IEZBTFNFOworCWZvciAoaSA9IDA7aSA8IE1BWF9UUklHR0VSX0VWRU5UO2krKykKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLmJWYWxpZCAmJiAocEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QVtpXS5DRENvdW50ZXIgPiAwKSkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QVtpXS5DRENvdW50ZXItLTsKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyRXZlbnRUYWIuRXZlbnRBW2ldLkNEQ291bnRlciA9PSAwKQorCQkJeworCQkJCXBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEFbaV0uYlZhbGlkID0gRkFMU0U7CisJCQkJcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QU5vIC0tOworCQkJCS8vIE5lZWQgdG8gc2VuZCAyMC80MCBDb2V4aXN0ZW5jZSBOb3RpZnkgZnJhbWUgaWYgaGFzIHN0YXR1cyBjaGFuZ2UuCisJCQkJYk5vdGlmeSA9IFRSVUU7CisJCQl9CisJCX0KKwl9CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYi5FdmVudEJDb3VudERvd24gPiAwKQorCXsKKwkJcEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QkNvdW50RG93bi0tOworCQlpZiAocEFkLT5Db21tb25DZmcuVHJpZ2dlckV2ZW50VGFiLkV2ZW50QkNvdW50RG93biA9PSAwKQorCQkJYk5vdGlmeSA9IFRSVUU7CisJfQorCisJaWYgKGJOb3RpZnkgPT0gVFJVRSkKKwkJVXBkYXRlMjA0MENvZXhpc3RGcmFtZUFuZE5vdGlmeShwQWQsIEJTU0lEX1dDSUQsIFRSVUUpOworfQorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lEIEJzc1RhYmxlU3NpZFNvcnQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUIEJTU19UQUJMRSAqT3V0VGFiLAorCUlOCUNIQVIgU3NpZFtdLAorCUlOCVVDSEFSIFNzaWRMZW4pCit7CisJSU5UIGk7CisJQnNzVGFibGVJbml0KE91dFRhYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcEFkLT5TY2FuVGFiLkJzc05yOyBpKyspCisJeworCQlCU1NfRU5UUlkgKnBJbkJzcyA9ICZwQWQtPlNjYW5UYWIuQnNzRW50cnlbaV07CisJCUJPT0xFQU4JYklzSGlkZGVuQXBJbmNsdWRlZCA9IEZBTFNFOworCisJCWlmICgoKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpICYmCisgICAgICAgICAgICAocEFkLT5NbG1lQXV4LkNoYW5uZWwgPiAxNCkgJiYKKyAgICAgICAgICAgICBSYWRhckNoYW5uZWxDaGVjayhwQWQsIHBJbkJzcy0+Q2hhbm5lbCkpCisjaWZkZWYgQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLyBSb2dlciBzeW5jIENhcnJpZXIKKyAgICAgICAgICAgICB8fCAocEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUgPT0gVFJVRSkKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisgICAgICAgICAgICApCisJCXsKKwkJCWlmIChwSW5Cc3MtPkhpZGRlbikKKwkJCQliSXNIaWRkZW5BcEluY2x1ZGVkID0gVFJVRTsKKwkJfQorCisJCWlmICgocEluQnNzLT5Cc3NUeXBlID09IHBBZC0+U3RhQ2ZnLkJzc1R5cGUpICYmCisJCQkoU1NJRF9FUVVBTChTc2lkLCBTc2lkTGVuLCBwSW5Cc3MtPlNzaWQsIHBJbkJzcy0+U3NpZExlbikgfHwgYklzSGlkZGVuQXBJbmNsdWRlZCkpCisJCXsKKwkJCUJTU19FTlRSWSAqcE91dEJzcyA9ICZPdXRUYWItPkJzc0VudHJ5W091dFRhYi0+QnNzTnJdOworCisKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJCQkvLyBJZiBubyBDb3VudHJ5IElFIGV4aXN0cyBubyBDb25uZWN0aW9uIHdpbGwgYmUgZXN0YWJsaXNoZWQgd2hlbiBJRUVFODAyMTFkQ2xpZW50TW9kZSBpcyBzdHJpY3QuCisJCQlpZiAoKHBBZC0+U3RhQ2ZnLklFRUU4MDIxMWRDbGllbnRNb2RlID09IFJ0ODAyXzExX0RfU3RyaWN0KSAmJgorCQkJCShwSW5Cc3MtPmJIYXNDb3VudHJ5SUUgPT0gRkFMU0UpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU3RhQ2ZnLklFRUU4MDIxMWRDbGllbnRNb2RlID09IFJ0ODAyXzExX0RfU3RyaWN0LCBidXQgdGhpcyBBUCBkb2Vzbid0IGhhdmUgY291bnRyeSBJRS5cbiIpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8vIDIuNEcvNUcgTiBvbmx5IG1vZGUKKwkJCWlmICgocEluQnNzLT5IdENhcGFiaWxpdHlMZW4gPT0gMCkgJiYKKwkJCQkoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExTl8yXzRHKSB8fCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFOXzVHKSkpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTVEEgaXMgaW4gTi1vbmx5IE1vZGUsIHRoaXMgQVAgZG9uJ3QgaGF2ZSBIdCBjYXBhYmlsaXR5IGluIEJlYWNvbi5cbiIpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkJLy8gTmV3IGZvciBXUEEyCisJCQkvLyBDaGVjayB0aGUgQXV0aG1vZGUgZmlyc3QKKwkJCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisJCQl7CisJCQkJLy8gQ2hlY2sgQXV0aE1vZGUgYW5kIEF1dGhNb2RlQXV4IGZvciBtYXRjaGluZywgaW4gY2FzZSBBUCBzdXBwb3J0IGR1YWwtbW9kZQorCQkJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgIT0gcEluQnNzLT5BdXRoTW9kZSkgJiYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlICE9IHBJbkJzcy0+QXV0aE1vZGVBdXgpKQorCQkJCQkvLyBOb25lIG1hdGNoZWQKKwkJCQkJY29udGludWU7CisKKwkJCQkvLyBDaGVjayBjaXBoZXIgc3VpdGUsIEFQIG11c3QgaGF2ZSBtb3JlIHNlY3VyZWQgY2lwaGVyIHRoYW4gc3RhdGlvbiBzZXR0aW5nCisJCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8IChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spKQorCQkJCXsKKwkJCQkJLy8gSWYgaXQncyBub3QgbWl4ZWQgbW9kZSwgd2Ugc2hvdWxkIG9ubHkgbGV0IEJTUyBwYXNzIHdpdGggdGhlIHNhbWUgZW5jcnlwdGlvbgorCQkJCQlpZiAocEluQnNzLT5XUEEuYk1peE1vZGUgPT0gRkFMU0UpCisJCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBLkdyb3VwQ2lwaGVyKQorCQkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8vIGNoZWNrIGdyb3VwIGNpcGhlcgorCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzIDwgcEluQnNzLT5XUEEuR3JvdXBDaXBoZXIpCisJCQkJCQljb250aW51ZTsKKworCQkJCQkvLyBjaGVjayBwYWlyd2lzZSBjaXBoZXIsIHNraXAgaWYgbm9uZSBtYXRjaGVkCisJCQkJCS8vIElmIHByb2ZpbGUgc2V0IHRvIEFFUywgbGV0IGl0IHBhc3Mgd2l0aG91dCBxdWVzdGlvbi4KKwkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gVEtJUCwgd2UgbXVzdCBmaW5kIG9uZSBtYXRlY2hlZAorCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSAmJgorCQkJCQkJKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQS5QYWlyQ2lwaGVyKSAmJgorCQkJCQkJKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQS5QYWlyQ2lwaGVyQXV4KSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQllbHNlIGlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKQorCQkJCXsKKwkJCQkJLy8gSWYgaXQncyBub3QgbWl4ZWQgbW9kZSwgd2Ugc2hvdWxkIG9ubHkgbGV0IEJTUyBwYXNzIHdpdGggdGhlIHNhbWUgZW5jcnlwdGlvbgorCQkJCQlpZiAocEluQnNzLT5XUEEyLmJNaXhNb2RlID09IEZBTFNFKQorCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQTIuR3JvdXBDaXBoZXIpCisJCQkJCQkJY29udGludWU7CisKKwkJCQkJLy8gY2hlY2sgZ3JvdXAgY2lwaGVyCisJCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPCBwSW5Cc3MtPldQQTIuR3JvdXBDaXBoZXIpCisJCQkJCQljb250aW51ZTsKKworCQkJCQkvLyBjaGVjayBwYWlyd2lzZSBjaXBoZXIsIHNraXAgaWYgbm9uZSBtYXRjaGVkCisJCQkJCS8vIElmIHByb2ZpbGUgc2V0IHRvIEFFUywgbGV0IGl0IHBhc3Mgd2l0aG91dCBxdWVzdGlvbi4KKwkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gVEtJUCwgd2UgbXVzdCBmaW5kIG9uZSBtYXRlY2hlZAorCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSAmJgorCQkJCQkJKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQTIuUGFpckNpcGhlcikgJiYKKwkJCQkJCShwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0gcEluQnNzLT5XUEEyLlBhaXJDaXBoZXJBdXgpKQorCQkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJLy8gQnNzIFR5cGUgbWF0Y2hlZCwgU1NJRCBtYXRjaGVkLgorCQkJLy8gV2Ugd2lsbCBjaGVjayB3ZXBzdGF0dXMgZm9yIHF1YWxpZmljYXRpb24gQnNzCisJCQllbHNlIGlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0gcEluQnNzLT5XZXBTdGF0dXMpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTdGFDZmcuV2VwU3RhdHVzPSVkLCB3aGlsZSBwSW5Cc3MtPldlcFN0YXR1cz0lZFxuIiwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzLCBwSW5Cc3MtPldlcFN0YXR1cykpOworCQkJCS8vCisJCQkJLy8gRm9yIHRoZSBTRVN2MiBjYXNlLCB3ZSB3aWxsIG5vdCBxdWFsaWZ5IFdlcFN0YXR1cy4KKwkJCQkvLworCQkJCWlmICghcEluQnNzLT5iU0VTKQorCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLy8gU2luY2UgdGhlIEFQIGlzIHVzaW5nIGhpZGRlbiBTU0lELCBhbmQgd2UgYXJlIHRyeWluZyB0byBjb25uZWN0IHRvIEFOWQorCQkJLy8gSXQgZGVmaW5pdGVseSB3aWxsIGZhaWwuIFNvLCBza2lwIGl0LgorCQkJLy8gQ0NYIGFsc28gcmVxdWlyZSBub3QgZXZlbiB0cnkgdG8gY29ubmVjdCBpdCEhCisJCQlpZiAoU3NpZExlbiA9PSAwKQorCQkJCWNvbnRpbnVlOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkvLyBJZiBib3RoIHN0YXRpb24gYW5kIEFQIHVzZSA0ME1Ieiwgc3RpbGwgbmVlZCB0byBjaGVjayBpZiB0aGUgNDBNSFogYmFuZCdzIGxlZ2FsaXR5IGluIG15IGNvdW50cnkgcmVnaW9uCisJCQkvLyBJZiB0aGlzIDQwTUh6IHdpZGViYW5kIGlzIG5vdCBhbGxvd2VkIGluIG15IGNvdW50cnkgbGlzdCwgdXNlIGJhbmR3aWR0aCAyME1IWiBpbnN0ZWFkLAorCQkJaWYgKChwSW5Cc3MtPkNlbnRyYWxDaGFubmVsICE9IHBJbkJzcy0+Q2hhbm5lbCkgJiYKKwkJCQkocEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXID09IEJXXzQwKSkKKwkJCXsKKwkJCQlpZiAoUlRNUENoZWNrQ2hhbm5lbChwQWQsIHBJbkJzcy0+Q2VudHJhbENoYW5uZWwsIHBJbkJzcy0+Q2hhbm5lbCkgPT0gRkFMU0UpCisJCQkJeworCQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPSBCV18yMDsKKwkJCQkJU2V0Q29tbW9uSFQocEFkKTsKKwkJCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXID0gQldfNDA7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQ2hhbm5lbFdpZHRoID09IEJBTkRfV0lEVEhfMjApCisJCQkJCXsKKwkJCQkJCVNldENvbW1vbkhUKHBBZCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJCS8vIGNvcHkgbWF0Y2hpbmcgQlNTIGZyb20gSW5UYWIgdG8gT3V0VGFiCisJCQlOZGlzTW92ZU1lbW9yeShwT3V0QnNzLCBwSW5Cc3MsIHNpemVvZihCU1NfRU5UUlkpKTsKKworCQkJT3V0VGFiLT5Cc3NOcisrOworCQl9CisJCWVsc2UgaWYgKChwSW5Cc3MtPkJzc1R5cGUgPT0gcEFkLT5TdGFDZmcuQnNzVHlwZSkgJiYgKFNzaWRMZW4gPT0gMCkpCisJCXsKKwkJCUJTU19FTlRSWSAqcE91dEJzcyA9ICZPdXRUYWItPkJzc0VudHJ5W091dFRhYi0+QnNzTnJdOworCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCS8vIDIuNEcvNUcgTiBvbmx5IG1vZGUKKwkJCWlmICgocEluQnNzLT5IdENhcGFiaWxpdHlMZW4gPT0gMCkgJiYKKwkJCQkoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExTl8yXzRHKSB8fCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFOXzVHKSkpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTVEEgaXMgaW4gTi1vbmx5IE1vZGUsIHRoaXMgQVAgZG9uJ3QgaGF2ZSBIdCBjYXBhYmlsaXR5IGluIEJlYWNvbi5cbiIpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkJLy8gTmV3IGZvciBXUEEyCisJCQkvLyBDaGVjayB0aGUgQXV0aG1vZGUgZmlyc3QKKwkJCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisJCQl7CisJCQkJLy8gQ2hlY2sgQXV0aE1vZGUgYW5kIEF1dGhNb2RlQXV4IGZvciBtYXRjaGluZywgaW4gY2FzZSBBUCBzdXBwb3J0IGR1YWwtbW9kZQorCQkJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgIT0gcEluQnNzLT5BdXRoTW9kZSkgJiYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlICE9IHBJbkJzcy0+QXV0aE1vZGVBdXgpKQorCQkJCQkvLyBOb25lIG1hdGNoZWQKKwkJCQkJY29udGludWU7CisKKwkJCQkvLyBDaGVjayBjaXBoZXIgc3VpdGUsIEFQIG11c3QgaGF2ZSBtb3JlIHNlY3VyZWQgY2lwaGVyIHRoYW4gc3RhdGlvbiBzZXR0aW5nCisJCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8IChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spKQorCQkJCXsKKwkJCQkJLy8gSWYgaXQncyBub3QgbWl4ZWQgbW9kZSwgd2Ugc2hvdWxkIG9ubHkgbGV0IEJTUyBwYXNzIHdpdGggdGhlIHNhbWUgZW5jcnlwdGlvbgorCQkJCQlpZiAocEluQnNzLT5XUEEuYk1peE1vZGUgPT0gRkFMU0UpCisJCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzICE9IHBJbkJzcy0+V1BBLkdyb3VwQ2lwaGVyKQorCQkJCQkJCWNvbnRpbnVlOworCisJCQkJCS8vIGNoZWNrIGdyb3VwIGNpcGhlcgorCQkJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzIDwgcEluQnNzLT5XUEEuR3JvdXBDaXBoZXIpCisJCQkJCQljb250aW51ZTsKKworCQkJCQkvLyBjaGVjayBwYWlyd2lzZSBjaXBoZXIsIHNraXAgaWYgbm9uZSBtYXRjaGVkCisJCQkJCS8vIElmIHByb2ZpbGUgc2V0IHRvIEFFUywgbGV0IGl0IHBhc3Mgd2l0aG91dCBxdWVzdGlvbi4KKwkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gVEtJUCwgd2UgbXVzdCBmaW5kIG9uZSBtYXRlY2hlZAorCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSAmJgorCQkJCQkJKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQS5QYWlyQ2lwaGVyKSAmJgorCQkJCQkJKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQS5QYWlyQ2lwaGVyQXV4KSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQllbHNlIGlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKQorCQkJCXsKKwkJCQkJLy8gSWYgaXQncyBub3QgbWl4ZWQgbW9kZSwgd2Ugc2hvdWxkIG9ubHkgbGV0IEJTUyBwYXNzIHdpdGggdGhlIHNhbWUgZW5jcnlwdGlvbgorCQkJCQlpZiAocEluQnNzLT5XUEEyLmJNaXhNb2RlID09IEZBTFNFKQorCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQTIuR3JvdXBDaXBoZXIpCisJCQkJCQkJY29udGludWU7CisKKwkJCQkJLy8gY2hlY2sgZ3JvdXAgY2lwaGVyCisJCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPCBwSW5Cc3MtPldQQTIuR3JvdXBDaXBoZXIpCisJCQkJCQljb250aW51ZTsKKworCQkJCQkvLyBjaGVjayBwYWlyd2lzZSBjaXBoZXIsIHNraXAgaWYgbm9uZSBtYXRjaGVkCisJCQkJCS8vIElmIHByb2ZpbGUgc2V0IHRvIEFFUywgbGV0IGl0IHBhc3Mgd2l0aG91dCBxdWVzdGlvbi4KKwkJCQkJLy8gSWYgcHJvZmlsZSBzZXQgdG8gVEtJUCwgd2UgbXVzdCBmaW5kIG9uZSBtYXRlY2hlZAorCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSAmJgorCQkJCQkJKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAhPSBwSW5Cc3MtPldQQTIuUGFpckNpcGhlcikgJiYKKwkJCQkJCShwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0gcEluQnNzLT5XUEEyLlBhaXJDaXBoZXJBdXgpKQorCQkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJLy8gQnNzIFR5cGUgbWF0Y2hlZCwgU1NJRCBtYXRjaGVkLgorCQkJLy8gV2Ugd2lsbCBjaGVjayB3ZXBzdGF0dXMgZm9yIHF1YWxpZmljYXRpb24gQnNzCisJCQllbHNlIGlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0gcEluQnNzLT5XZXBTdGF0dXMpCisJCQkJCWNvbnRpbnVlOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkvLyBJZiBib3RoIHN0YXRpb24gYW5kIEFQIHVzZSA0ME1Ieiwgc3RpbGwgbmVlZCB0byBjaGVjayBpZiB0aGUgNDBNSFogYmFuZCdzIGxlZ2FsaXR5IGluIG15IGNvdW50cnkgcmVnaW9uCisJCQkvLyBJZiB0aGlzIDQwTUh6IHdpZGViYW5kIGlzIG5vdCBhbGxvd2VkIGluIG15IGNvdW50cnkgbGlzdCwgdXNlIGJhbmR3aWR0aCAyME1IWiBpbnN0ZWFkLAorCQkJaWYgKChwSW5Cc3MtPkNlbnRyYWxDaGFubmVsICE9IHBJbkJzcy0+Q2hhbm5lbCkgJiYKKwkJCQkocEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXID09IEJXXzQwKSkKKwkJCXsKKwkJCQlpZiAoUlRNUENoZWNrQ2hhbm5lbChwQWQsIHBJbkJzcy0+Q2VudHJhbENoYW5uZWwsIHBJbkJzcy0+Q2hhbm5lbCkgPT0gRkFMU0UpCisJCQkJeworCQkJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPSBCV18yMDsKKwkJCQkJU2V0Q29tbW9uSFQocEFkKTsKKwkJCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXID0gQldfNDA7CisJCQkJfQorCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkvLyBjb3B5IG1hdGNoaW5nIEJTUyBmcm9tIEluVGFiIHRvIE91dFRhYgorCQkJTmRpc01vdmVNZW1vcnkocE91dEJzcywgcEluQnNzLCBzaXplb2YoQlNTX0VOVFJZKSk7CisKKwkJCU91dFRhYi0+QnNzTnIrKzsKKwkJfQorCisJCWlmIChPdXRUYWItPkJzc05yID49IE1BWF9MRU5fT0ZfQlNTX1RBQkxFKQorCQkJYnJlYWs7CisJfQorCisJQnNzVGFibGVTb3J0QnlSc3NpKE91dFRhYik7Cit9CisKKworLy8gSVJRTCA9IERJU1BBVENIX0xFVkVMCitWT0lEIEJzc1RhYmxlU29ydEJ5UnNzaSgKKwlJTiBPVVQgQlNTX1RBQkxFICpPdXRUYWIpCit7CisJSU5UIAkgIGksIGo7CisJQlNTX0VOVFJZIFRtcEJzczsKKworCWZvciAoaSA9IDA7IGkgPCBPdXRUYWItPkJzc05yIC0gMTsgaSsrKQorCXsKKwkJZm9yIChqID0gaSsxOyBqIDwgT3V0VGFiLT5Cc3NOcjsgaisrKQorCQl7CisJCQlpZiAoT3V0VGFiLT5Cc3NFbnRyeVtqXS5Sc3NpID4gT3V0VGFiLT5Cc3NFbnRyeVtpXS5Sc3NpKQorCQkJeworCQkJCU5kaXNNb3ZlTWVtb3J5KCZUbXBCc3MsICZPdXRUYWItPkJzc0VudHJ5W2pdLCBzaXplb2YoQlNTX0VOVFJZKSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJk91dFRhYi0+QnNzRW50cnlbal0sICZPdXRUYWItPkJzc0VudHJ5W2ldLCBzaXplb2YoQlNTX0VOVFJZKSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJk91dFRhYi0+QnNzRW50cnlbaV0sICZUbXBCc3MsIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJCX0KKwkJfQorCX0KK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCitWT0lEIEJzc0NpcGhlclBhcnNlKAorCUlOIE9VVAlQQlNTX0VOVFJZCXBCc3MpCit7CisJUEVJRF9TVFJVQ1QgCQkgcEVpZDsKKwlQVUNIQVIJCQkJcFRtcDsKKwlQUlNOX0lFX0hFQURFUl9TVFJVQ1QJCQlwUnNuSGVhZGVyOworCVBDSVBIRVJfU1VJVEVfU1RSVUNUCQkJcENpcGhlcjsKKwlQQUtNX1NVSVRFX1NUUlVDVAkJCQlwQUtNOworCVVTSE9SVAkJCQkJCQlDb3VudDsKKwlJTlQJCQkJCQkJCUxlbmd0aDsKKwlORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwlUbXBDaXBoZXI7CisKKwkvLworCS8vIFdlcFN0YXR1cyB3aWxsIGJlIHJlc2V0IGxhdGVyLCBpZiBBUCBhbm5vdW5jZSBUS0lQIG9yIEFFUyBvbiB0aGUgYmVhY29uIGZyYW1lLgorCS8vCisJaWYgKHBCc3MtPlByaXZhY3kpCisJeworCQlwQnNzLT5XZXBTdGF0dXMgCT0gTmRpczgwMl8xMVdFUEVuYWJsZWQ7CisJfQorCWVsc2UKKwl7CisJCXBCc3MtPldlcFN0YXR1cyAJPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJfQorCS8vIFNldCBkZWZhdWx0IHRvIGRpc2FibGUgJiBvcGVuIGF1dGhlbnRpY2F0aW9uIGJlZm9yZSBwYXJzaW5nIHZhcmlhYmxlIElFCisJcEJzcy0+QXV0aE1vZGUJCT0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKKwlwQnNzLT5BdXRoTW9kZUF1eAk9IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW47CisKKwkvLyBJbml0IFdQQSBzZXR0aW5nCisJcEJzcy0+V1BBLlBhaXJDaXBoZXIJPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJcEJzcy0+V1BBLlBhaXJDaXBoZXJBdXggPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyCT0gTmRpczgwMl8xMVdFUERpc2FibGVkOworCXBCc3MtPldQQS5Sc25DYXBhYmlsaXR5ID0gMDsKKwlwQnNzLT5XUEEuYk1peE1vZGUJCT0gRkFMU0U7CisKKwkvLyBJbml0IFdQQTIgc2V0dGluZworCXBCc3MtPldQQTIuUGFpckNpcGhlcgkgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJcEJzcy0+V1BBMi5QYWlyQ2lwaGVyQXV4ID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworCXBCc3MtPldQQTIuR3JvdXBDaXBoZXIJID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworCXBCc3MtPldQQTIuUnNuQ2FwYWJpbGl0eSA9IDA7CisJcEJzcy0+V1BBMi5iTWl4TW9kZSAJID0gRkFMU0U7CisKKworCUxlbmd0aCA9IChJTlQpIHBCc3MtPlZhcklFTGVuOworCisJd2hpbGUgKExlbmd0aCA+IDApCisJeworCQkvLyBQYXJzZSBjaXBoZXIgc3VpdGUgYmFzZSBvbiBXUEExICYgV1BBMiwgdGhleSBzaG91bGQgYmUgcGFyc2VkIGRpZmZlcmVudGx5CisJCXBUbXAgPSAoKFBVQ0hBUikgcEJzcy0+VmFySUVzKSArIHBCc3MtPlZhcklFTGVuIC0gTGVuZ3RoOworCQlwRWlkID0gKFBFSURfU1RSVUNUKSBwVG1wOworCQlzd2l0Y2ggKHBFaWQtPkVpZCkKKwkJeworCQkJY2FzZSBJRV9XUEE6CisJCQkJLy9QYXJzZSBDaXNjbyBJRV9XUEEgKExFQVAsIENDS00sIGV0Yy4pCisJCQkJaWYgKCBOZGlzRXF1YWxNZW1vcnkoKHBUbXArOCksIENJU0NPX09VSSwgMykpCisJCQkJeworCQkJCQlwVG1wICAgKz0gMTE7CisJCQkJCXN3aXRjaCAoKnBUbXApCisJCQkJCXsKKwkJCQkJCWNhc2UgMToKKwkJCQkJCWNhc2UgNToJLy8gQWx0aG91Z2ggV0VQIGlzIG5vdCBhbGxvd2VkIGluIFdQQSByZWxhdGVkIGF1dGggbW9kZSwgd2UgcGFyc2UgaXQgYW55d2F5CisJCQkJCQkJcEJzcy0+V2VwU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCQlwQnNzLT5XUEEuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CisJCQkJCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMjoKKwkJCQkJCQlwQnNzLT5XZXBTdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCQkJCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSA0OgorCQkJCQkJCXBCc3MtPldlcFN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7CisJCQkJCQkJcEJzcy0+V1BBLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkOworCQkJCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CisJCQkJCQkJYnJlYWs7CisJCQkJCQlkZWZhdWx0OgorCQkJCQkJCWJyZWFrOworCQkJCQl9CisKKwkJCQkJLy8gaWYgQ2lzY28gSUVfV1BBLCBicmVhaworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZSBpZiAoTmRpc0VxdWFsTWVtb3J5KHBFaWQtPk9jdGV0LCBTRVNfT1VJLCAzKSAmJiAocEVpZC0+TGVuID09IDcpKQorCQkJCXsKKwkJCQkJcEJzcy0+YlNFUyA9IFRSVUU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlIGlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdQQV9PVUksIDQpICE9IDEpCisJCQkJeworCQkJCQkvLyBpZiB1bnN1cHBvcnRlZCB2ZW5kb3Igc3BlY2lmaWMgSUUKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8vIFNraXAgT1VJLCB2ZXJzaW9uLCBhbmQgbXVsdGljYXN0IHN1aXRlCisJCQkJLy8gVGhpcyBwYXJ0IHNob3VsZCBiZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlIHdoZW4gQVAgc3VwcG9ydGVkIG11bHRpcGxlIGNpcGhlciBzdWl0ZS4KKwkJCQkvLyBGb3Igbm93LCBpdCdzIE9LIHNpbmNlIGFsbW9zdCBhbGwgQVBzIGhhdmUgZml4ZWQgY2lwaGVyIHN1aXRlIHN1cHBvcnRlZC4KKwkJCQkvLyBwVG1wID0gKFBVQ0hBUikgcEVpZC0+T2N0ZXQ7CisJCQkJcFRtcCAgICs9IDExOworCisJCQkJLy8gQ2lwaGVyIFN1aXRlIFNlbGVjdG9ycyBmcm9tIFNwZWMgUDgwMi4xMWkvRDMuMiBQMjYuCisJCQkJLy8JVmFsdWUJICAgTWVhbmluZworCQkJCS8vCTAJCQlOb25lCisJCQkJLy8JMQkJCVdFUC00MAorCQkJCS8vCTIJCQlUa2lwCisJCQkJLy8JMwkJCVdSQVAKKwkJCQkvLwk0CQkJQUVTCisJCQkJLy8JNQkJCVdFUC0xMDQKKwkJCQkvLyBQYXJzZSBncm91cCBjaXBoZXIKKwkJCQlzd2l0Y2ggKCpwVG1wKQorCQkJCXsKKwkJCQkJY2FzZSAxOgorCQkJCQljYXNlIDU6CS8vIEFsdGhvdWdoIFdFUCBpcyBub3QgYWxsb3dlZCBpbiBXUEEgcmVsYXRlZCBhdXRoIG1vZGUsIHdlIHBhcnNlIGl0IGFueXdheQorCQkJCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDI6CisJCQkJCQlwQnNzLT5XUEEuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgNDoKKwkJCQkJCXBCc3MtPldQQS5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvLyBudW1iZXIgb2YgdW5pY2FzdCBzdWl0ZQorCQkJCXBUbXAgICArPSAxOworCisJCQkJLy8gc2tpcCBhbGwgdW5pY2FzdCBjaXBoZXIgc3VpdGVzCisJCQkJLy9Db3VudCA9ICooUFVTSE9SVCkgcFRtcDsKKwkJCQlDb3VudCA9IChwVG1wWzFdPDw4KSArIHBUbXBbMF07CisJCQkJcFRtcCAgICs9IHNpemVvZihVU0hPUlQpOworCisJCQkJLy8gUGFyc2luZyBhbGwgdW5pY2FzdCBjaXBoZXIgc3VpdGUKKwkJCQl3aGlsZSAoQ291bnQgPiAwKQorCQkJCXsKKwkJCQkJLy8gU2tpcCBPVUkKKwkJCQkJcFRtcCArPSAzOworCQkJCQlUbXBDaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJCQkJCXN3aXRjaCAoKnBUbXApCisJCQkJCXsKKwkJCQkJCWNhc2UgMToKKwkJCQkJCWNhc2UgNTogLy8gQWx0aG91Z2ggV0VQIGlzIG5vdCBhbGxvd2VkIGluIFdQQSByZWxhdGVkIGF1dGggbW9kZSwgd2UgcGFyc2UgaXQgYW55d2F5CisJCQkJCQkJVG1wQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMjoKKwkJCQkJCQlUbXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSA0OgorCQkJCQkJCVRtcENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7CisJCQkJCQkJYnJlYWs7CisJCQkJCQlkZWZhdWx0OgorCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmIChUbXBDaXBoZXIgPiBwQnNzLT5XUEEuUGFpckNpcGhlcikKKwkJCQkJeworCQkJCQkJLy8gTW92ZSB0aGUgbG93ZXIgY2lwaGVyIHN1aXRlIHRvIFBhaXJDaXBoZXJBdXgKKwkJCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID0gcEJzcy0+V1BBLlBhaXJDaXBoZXI7CisJCQkJCQlwQnNzLT5XUEEuUGFpckNpcGhlcgk9IFRtcENpcGhlcjsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID0gVG1wQ2lwaGVyOworCQkJCQl9CisJCQkJCXBUbXArKzsKKwkJCQkJQ291bnQtLTsKKwkJCQl9CisKKwkJCQkvLyA0LiBnZXQgQUtNIHN1aXRlIGNvdW50cworCQkJCS8vQ291bnQJPSAqKFBVU0hPUlQpIHBUbXA7CisJCQkJQ291bnQgPSAocFRtcFsxXTw8OCkgKyBwVG1wWzBdOworCQkJCXBUbXAgICArPSBzaXplb2YoVVNIT1JUKTsKKwkJCQlwVG1wICAgKz0gMzsKKworCQkJCXN3aXRjaCAoKnBUbXApCisJCQkJeworCQkJCQljYXNlIDE6CisJCQkJCQkvLyBTZXQgQVAgc3VwcG9ydCBXUEEgbW9kZQorCQkJCQkJaWYgKHBCc3MtPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pCisJCQkJCQkJcEJzcy0+QXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEE7CisJCQkJCQllbHNlCisJCQkJCQkJcEJzcy0+QXV0aE1vZGVBdXggPSBOZGlzODAyXzExQXV0aE1vZGVXUEE7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAyOgorCQkJCQkJLy8gU2V0IEFQIHN1cHBvcnQgV1BBIG1vZGUKKwkJCQkJCWlmIChwQnNzLT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQorCQkJCQkJCXBCc3MtPkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLOworCQkJCQkJZWxzZQorCQkJCQkJCXBCc3MtPkF1dGhNb2RlQXV4ID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLOworCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJcFRtcCAgICs9IDE7CisKKwkJCQkvLyBGaXhlZCBmb3IgV1BBLU5vbmUKKwkJCQlpZiAocEJzcy0+QnNzVHlwZSA9PSBCU1NfQURIT0MpCisJCQkJeworCQkJCQlwQnNzLT5BdXRoTW9kZQkgID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZTsKKwkJCQkJcEJzcy0+QXV0aE1vZGVBdXggPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lOworCQkJCQlwQnNzLT5XZXBTdGF0dXMgICA9IHBCc3MtPldQQS5Hcm91cENpcGhlcjsKKwkJCQkJaWYgKHBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID09IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKKwkJCQkJCXBCc3MtPldQQS5QYWlyQ2lwaGVyQXV4ID0gcEJzcy0+V1BBLkdyb3VwQ2lwaGVyOworCQkJCX0KKwkJCQllbHNlCisJCQkJCXBCc3MtPldlcFN0YXR1cyAgID0gcEJzcy0+V1BBLlBhaXJDaXBoZXI7CisKKwkJCQkvLyBDaGVjayB0aGUgUGFpciAmIEdyb3VwLCBpZiBkaWZmZXJlbnQsIHR1cm4gb24gbWl4ZWQgbW9kZSBmbGFnCisJCQkJaWYgKHBCc3MtPldQQS5Hcm91cENpcGhlciAhPSBwQnNzLT5XUEEuUGFpckNpcGhlcikKKwkJCQkJcEJzcy0+V1BBLmJNaXhNb2RlID0gVFJVRTsKKworCQkJCWJyZWFrOworCisJCQljYXNlIElFX1JTTjoKKwkJCQlwUnNuSGVhZGVyID0gKFBSU05fSUVfSEVBREVSX1NUUlVDVCkgcFRtcDsKKworCQkJCS8vIDAuIFZlcnNpb24gbXVzdCBiZSAxCisJCQkJaWYgKGxlMmNwdTE2KHBSc25IZWFkZXItPlZlcnNpb24pICE9IDEpCisJCQkJCWJyZWFrOworCQkJCXBUbXAgICArPSBzaXplb2YoUlNOX0lFX0hFQURFUl9TVFJVQ1QpOworCisJCQkJLy8gMS4gQ2hlY2sgZ3JvdXAgY2lwaGVyCisJCQkJcENpcGhlciA9IChQQ0lQSEVSX1NVSVRFX1NUUlVDVCkgcFRtcDsKKwkJCQlpZiAoIVJUTVBFcXVhbE1lbW9yeShwVG1wLCBSU05fT1VJLCAzKSkKKwkJCQkJYnJlYWs7CisKKwkJCQkvLyBQYXJzZSBncm91cCBjaXBoZXIKKwkJCQlzd2l0Y2ggKHBDaXBoZXItPlR5cGUpCisJCQkJeworCQkJCQljYXNlIDE6CisJCQkJCWNhc2UgNToJLy8gQWx0aG91Z2ggV0VQIGlzIG5vdCBhbGxvd2VkIGluIFdQQSByZWxhdGVkIGF1dGggbW9kZSwgd2UgcGFyc2UgaXQgYW55d2F5CisJCQkJCQlwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDI6CisJCQkJCQlwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDQ6CisJCQkJCQlwQnNzLT5XUEEyLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8vIHNldCB0byBjb3JyZWN0IG9mZnNldCBmb3IgbmV4dCBwYXJzaW5nCisJCQkJcFRtcCAgICs9IHNpemVvZihDSVBIRVJfU1VJVEVfU1RSVUNUKTsKKworCQkJCS8vIDIuIEdldCBwYWlyd2lzZSBjaXBoZXIgY291bnRzCisJCQkJLy9Db3VudCA9ICooUFVTSE9SVCkgcFRtcDsKKwkJCQlDb3VudCA9IChwVG1wWzFdPDw4KSArIHBUbXBbMF07CisJCQkJcFRtcCAgICs9IHNpemVvZihVU0hPUlQpOworCisJCQkJLy8gMy4gR2V0IHBhaXJ3aXNlIGNpcGhlcgorCQkJCS8vIFBhcnNpbmcgYWxsIHVuaWNhc3QgY2lwaGVyIHN1aXRlCisJCQkJd2hpbGUgKENvdW50ID4gMCkKKwkJCQl7CisJCQkJCS8vIFNraXAgT1VJCisJCQkJCXBDaXBoZXIgPSAoUENJUEhFUl9TVUlURV9TVFJVQ1QpIHBUbXA7CisJCQkJCVRtcENpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKwkJCQkJc3dpdGNoIChwQ2lwaGVyLT5UeXBlKQorCQkJCQl7CisJCQkJCQljYXNlIDE6CisJCQkJCQljYXNlIDU6IC8vIEFsdGhvdWdoIFdFUCBpcyBub3QgYWxsb3dlZCBpbiBXUEEgcmVsYXRlZCBhdXRoIG1vZGUsIHdlIHBhcnNlIGl0IGFueXdheQorCQkJCQkJCVRtcENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQ7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDI6CisJCQkJCQkJVG1wQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgNDoKKwkJCQkJCQlUbXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOworCQkJCQkJCWJyZWFrOworCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpZiAoVG1wQ2lwaGVyID4gcEJzcy0+V1BBMi5QYWlyQ2lwaGVyKQorCQkJCQl7CisJCQkJCQkvLyBNb3ZlIHRoZSBsb3dlciBjaXBoZXIgc3VpdGUgdG8gUGFpckNpcGhlckF1eAorCQkJCQkJcEJzcy0+V1BBMi5QYWlyQ2lwaGVyQXV4ID0gcEJzcy0+V1BBMi5QYWlyQ2lwaGVyOworCQkJCQkJcEJzcy0+V1BBMi5QYWlyQ2lwaGVyCSA9IFRtcENpcGhlcjsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBCc3MtPldQQTIuUGFpckNpcGhlckF1eCA9IFRtcENpcGhlcjsKKwkJCQkJfQorCQkJCQlwVG1wICs9IHNpemVvZihDSVBIRVJfU1VJVEVfU1RSVUNUKTsKKwkJCQkJQ291bnQtLTsKKwkJCQl9CisKKwkJCQkvLyA0LiBnZXQgQUtNIHN1aXRlIGNvdW50cworCQkJCS8vQ291bnQJPSAqKFBVU0hPUlQpIHBUbXA7CisJCQkJQ291bnQgPSAocFRtcFsxXTw8OCkgKyBwVG1wWzBdOworCQkJCXBUbXAgICArPSBzaXplb2YoVVNIT1JUKTsKKworCQkJCS8vIDUuIEdldCBBS00gY2lwaGVycworCQkJCXBBS00gPSAoUEFLTV9TVUlURV9TVFJVQ1QpIHBUbXA7CisJCQkJaWYgKCFSVE1QRXF1YWxNZW1vcnkocFRtcCwgUlNOX09VSSwgMykpCisJCQkJCWJyZWFrOworCisJCQkJc3dpdGNoIChwQUtNLT5UeXBlKQorCQkJCXsKKwkJCQkJY2FzZSAxOgorCQkJCQkJLy8gU2V0IEFQIHN1cHBvcnQgV1BBIG1vZGUKKwkJCQkJCWlmIChwQnNzLT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQorCQkJCQkJCXBCc3MtPkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMjsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwQnNzLT5BdXRoTW9kZUF1eCA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTI7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAyOgorCQkJCQkJLy8gU2V0IEFQIHN1cHBvcnQgV1BBIG1vZGUKKwkJCQkJCWlmIChwQnNzLT5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQorCQkJCQkJCXBCc3MtPkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSzsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwQnNzLT5BdXRoTW9kZUF1eCA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0s7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlwVG1wICAgKz0gKENvdW50ICogc2l6ZW9mKEFLTV9TVUlURV9TVFJVQ1QpKTsKKworCQkJCS8vIEZpeGVkIGZvciBXUEEtTm9uZQorCQkJCWlmIChwQnNzLT5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJCQl7CisJCQkJCXBCc3MtPkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZTsKKwkJCQkJcEJzcy0+QXV0aE1vZGVBdXggPSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lOworCQkJCQlwQnNzLT5XUEEuUGFpckNpcGhlckF1eCA9IHBCc3MtPldQQTIuUGFpckNpcGhlckF1eDsKKwkJCQkJcEJzcy0+V1BBLkdyb3VwQ2lwaGVyCT0gcEJzcy0+V1BBMi5Hcm91cENpcGhlcjsKKwkJCQkJcEJzcy0+V2VwU3RhdHVzIAkJPSBwQnNzLT5XUEEuR3JvdXBDaXBoZXI7CisJCQkJCWlmIChwQnNzLT5XUEEuUGFpckNpcGhlckF1eCA9PSBOZGlzODAyXzExV0VQRGlzYWJsZWQpCisJCQkJCQlwQnNzLT5XUEEuUGFpckNpcGhlckF1eCA9IHBCc3MtPldQQS5Hcm91cENpcGhlcjsKKwkJCQl9CisJCQkJcEJzcy0+V2VwU3RhdHVzICAgPSBwQnNzLT5XUEEyLlBhaXJDaXBoZXI7CisKKwkJCQkvLyA2LiBHZXQgUlNOIGNhcGFiaWxpdHkKKwkJCQkvL3BCc3MtPldQQTIuUnNuQ2FwYWJpbGl0eSA9ICooUFVTSE9SVCkgcFRtcDsKKwkJCQlwQnNzLT5XUEEyLlJzbkNhcGFiaWxpdHkgPSAocFRtcFsxXTw8OCkgKyBwVG1wWzBdOworCQkJCXBUbXAgKz0gc2l6ZW9mKFVTSE9SVCk7CisKKwkJCQkvLyBDaGVjayB0aGUgUGFpciAmIEdyb3VwLCBpZiBkaWZmZXJlbnQsIHR1cm4gb24gbWl4ZWQgbW9kZSBmbGFnCisJCQkJaWYgKHBCc3MtPldQQTIuR3JvdXBDaXBoZXIgIT0gcEJzcy0+V1BBMi5QYWlyQ2lwaGVyKQorCQkJCQlwQnNzLT5XUEEyLmJNaXhNb2RlID0gVFJVRTsKKworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCQlMZW5ndGggLT0gKHBFaWQtPkxlbiArIDIpOworCX0KK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gbWFjX3RhYmxlLmMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyohIFxicmllZiBnZW5lcmF0ZXMgYSByYW5kb20gbWFjIGFkZHJlc3MgdmFsdWUgZm9yIElCU1MgQlNTSUQKKyAqCVxwYXJhbSBBZGRyIHRoZSBic3NpZCBsb2NhdGlvbgorICoJXHJldHVybiBub25lCisgKglccHJlCisgKglccG9zdAorICovCitWT0lEIE1hY0FkZHJSYW5kb21Cc3NpZCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBBZGRyKQoreworCUlOVCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BQ19BRERSX0xFTjsgaSsrKQorCXsKKwkJcEFkZHJbaV0gPSBSYW5kb21CeXRlKHBBZCk7CisJfQorCisJcEFkZHJbMF0gPSAocEFkZHJbMF0gJiAweGZlKSB8IDB4MDI7ICAvLyB0aGUgZmlyc3QgMiBiaXRzIG11c3QgYmUgMDF4eHh4eHh4eAorfQorCisvKiEgXGJyaWVmIGluaXQgdGhlIG1hbmFnZW1lbnQgbWFjIGZyYW1lIGhlYWRlcgorICoJXHBhcmFtIHBfaGRyIG1hYyBoZWFkZXIKKyAqCVxwYXJhbSBzdWJ0eXBlIHN1YnR5cGUgb2YgdGhlIGZyYW1lCisgKglccGFyYW0gcF9kcyBkZXN0aW5hdGlvbiBhZGRyZXNzLCBkb24ndCBjYXJlIGlmIGl0IGlzIGEgYnJvYWRjYXN0IGFkZHJlc3MKKyAqCVxyZXR1cm4gbm9uZQorICoJXHByZSB0aGUgc3RhdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgcEFkLT5TdGFDZmcKKyAqCSAtIGJzc2lkCisgKgkgLSBzdGF0aW9uIGFkZHJlc3MKKyAqCVxwb3N0CisgKglcbm90ZSB0aGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBmb2xsb3dpbmcgZmllbGQKKworIElSUUwgPSBQQVNTSVZFX0xFVkVMCisgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAqLworVk9JRCBNZ3RNYWNIZWFkZXJJbml0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIE9VVCBQSEVBREVSXzgwMl8xMSBwSGRyODAyMTEsCisJSU4gVUNIQVIgU3ViVHlwZSwKKwlJTiBVQ0hBUiBUb0RzLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gUFVDSEFSIHBCc3NpZCkKK3sKKwlOZGlzWmVyb01lbW9yeShwSGRyODAyMTEsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisKKwlwSGRyODAyMTEtPkZDLlR5cGUgPSBCVFlQRV9NR01UOworCXBIZHI4MDIxMS0+RkMuU3ViVHlwZSA9IFN1YlR5cGU7CisvLwlpZiAoU3ViVHlwZSA9PSBTVUJUWVBFX0FDSykJLy8gc2FtcGxlLCBubyB1c2UsIGl0IHdpbGwgY29uZmxpY3Qgd2l0aCBBQ1RJT04gZnJhbWUgc3ViIHR5cGUKKy8vCQlwSGRyODAyMTEtPkZDLlR5cGUgPSBCVFlQRV9DTlRMOworCXBIZHI4MDIxMS0+RkMuVG9EcyA9IFRvRHM7CisJQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIxLCBwREEpOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCUNPUFlfTUFDX0FERFIocEhkcjgwMjExLT5BZGRyMiwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIzLCBwQnNzaWQpOworfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBtZW1fbWdtdC5jCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyByb3V0aW5lIGJ1aWxkIGFuIG91dGdvaW5nIGZyYW1lLCBhbmQgZmlsbCBhbGwgaW5mb3JtYXRpb24gc3BlY2lmaWVkCisgKiBpbiBhcmd1bWVudCBsaXN0IHRvIHRoZSBmcmFtZSBib2R5LiBUaGUgYWN0dWFsIGZyYW1lIHNpemUgaXMgdGhlIHN1bW1hdGlvbgorICogb2YgYWxsIGFyZ3VtZW50cy4KKyAqIGlucHV0IHBhcmFtczoKKyAqCQlCdWZmZXIgLSBwb2ludGVyIHRvIGEgcHJlLWFsbG9jYXRlZCBtZW1vcnkgc2VnbWVudAorICoJCWFyZ3MgLSBhIGxpc3Qgb2YgPGludCBhcmdfc2l6ZSwgYXJnPiBwYWlycy4KKyAqCQlOT1RFIE5PVEUgTk9URSEhISEgdGhlIGxhc3QgYXJndW1lbnQgbXVzdCBiZSBOVUxMLCBvdGhlcndpc2UgdGhpcworICoJCQkJCQkgICBmdW5jdGlvbiB3aWxsIEZBSUwhISEKKyAqIHJldHVybjoKKyAqCQlTaXplIG9mIHRoZSBidWZmZXIKKyAqIHVzYWdlOgorICoJCU1ha2VPdXRnb2luZ0ZyYW1lKEJ1ZmZlciwgb3V0cHV0X2xlbmd0aCwgMiwgJmZjLCAyLCAmZHVyLCA2LCBwX2FkZHIxLCA2LHBfYWRkcjIsIEVORF9PRl9BUkdTKTsKKworIElSUUwgPSBQQVNTSVZFX0xFVkVMCisgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworVUxPTkcgTWFrZU91dGdvaW5nRnJhbWUoCisJT1VUIENIQVIgKkJ1ZmZlciwKKwlPVVQgVUxPTkcgKkZyYW1lTGVuLCAuLi4pCit7CisJQ0hBUiAgICpwOworCWludCAJbGVuZzsKKwlVTE9ORwlUb3RMZW5nOworCXZhX2xpc3QgQXJnczsKKworCS8vIGNhbGN1bGF0ZXMgdGhlIHRvdGFsIGxlbmd0aAorCVRvdExlbmcgPSAwOworCXZhX3N0YXJ0KEFyZ3MsIEZyYW1lTGVuKTsKKwlkbworCXsKKwkJbGVuZyA9IHZhX2FyZyhBcmdzLCBpbnQpOworCQlpZiAobGVuZyA9PSBFTkRfT0ZfQVJHUykKKwkJeworCQkJYnJlYWs7CisJCX0KKwkJcCA9IHZhX2FyZyhBcmdzLCBQVk9JRCk7CisJCU5kaXNNb3ZlTWVtb3J5KCZCdWZmZXJbVG90TGVuZ10sIHAsIGxlbmcpOworCQlUb3RMZW5nID0gVG90TGVuZyArIGxlbmc7CisJfSB3aGlsZShUUlVFKTsKKworCXZhX2VuZChBcmdzKTsgLyogY2xlYW4gdXAgKi8KKwkqRnJhbWVMZW4gPSBUb3RMZW5nOworCXJldHVybiBUb3RMZW5nOworfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBtbG1lX3F1ZXVlLmMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyohIFxicmllZglJbml0aWFsaXplIFRoZSBNTE1FIFF1ZXVlLCB1c2VkIGJ5IE1MTUUgRnVuY3Rpb25zCisgKglccGFyYW0JKlF1ZXVlCSAgIFRoZSBNTE1FIFF1ZXVlCisgKglccmV0dXJuIEFsd2F5cwkgICBSZXR1cm4gTkRJU19TVEFURV9TVUNDRVNTIGluIHRoaXMgaW1wbGVtZW50YXRpb24KKyAqCVxwcmUKKyAqCVxwb3N0CisgKglcbm90ZQlCZWNhdXNlIHRoaXMgaXMgZG9uZSBvbmx5IG9uY2UgKGF0IHRoZSBpbml0IHN0YWdlKSwgbm8gbmVlZCB0byBiZSBsb2NrZWQKKworIElSUUwgPSBQQVNTSVZFX0xFVkVMCisKKyAqLworTkRJU19TVEFUVVMgTWxtZVF1ZXVlSW5pdCgKKwlJTiBNTE1FX1FVRVVFICpRdWV1ZSkKK3sKKwlJTlQgaTsKKworCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZRdWV1ZS0+TG9jayk7CisKKwlRdWV1ZS0+TnVtCT0gMDsKKwlRdWV1ZS0+SGVhZCA9IDA7CisJUXVldWUtPlRhaWwgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9MRU5fT0ZfTUxNRV9RVUVVRTsgaSsrKQorCXsKKwkJUXVldWUtPkVudHJ5W2ldLk9jY3VwaWVkID0gRkFMU0U7CisJCVF1ZXVlLT5FbnRyeVtpXS5Nc2dMZW4gPSAwOworCQlOZGlzWmVyb01lbW9yeShRdWV1ZS0+RW50cnlbaV0uTXNnLCBNR01UX0RNQV9CVUZGRVJfU0laRSk7CisJfQorCisJcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKy8qISBcYnJpZWYJIEVucXVldWUgYSBtZXNzYWdlIGZvciBvdGhlciB0aHJlYWRzLCBpZiB0aGV5IHdhbnQgdG8gc2VuZCBtZXNzYWdlcyB0byBNTE1FIHRocmVhZAorICoJXHBhcmFtCSpRdWV1ZQkgIFRoZSBNTE1FIFF1ZXVlCisgKglccGFyYW0JIE1hY2hpbmUgIFRoZSBTdGF0ZSBNYWNoaW5lIElkCisgKglccGFyYW0JIE1zZ1R5cGUgIFRoZSBNZXNzYWdlIFR5cGUKKyAqCVxwYXJhbQkgTXNnTGVuICAgVGhlIE1lc3NhZ2UgbGVuZ3RoCisgKglccGFyYW0JKk1zZwkgIFRoZSBtZXNzYWdlIHBvaW50ZXIKKyAqCVxyZXR1cm4gIFRSVUUgaWYgZW5xdWV1ZSBpcyBzdWNjZXNzZnVsLCBGQUxTRSBpZiB0aGUgcXVldWUgaXMgZnVsbAorICoJXHByZQorICoJXHBvc3QKKyAqCVxub3RlCSBUaGUgbWVzc2FnZSBoYXMgdG8gYmUgaW5pdGlhbGl6ZWQKKworIElSUUwgPSBQQVNTSVZFX0xFVkVMCisgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAqLworQk9PTEVBTiBNbG1lRW5xdWV1ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVTE9ORyBNYWNoaW5lLAorCUlOIFVMT05HIE1zZ1R5cGUsCisJSU4gVUxPTkcgTXNnTGVuLAorCUlOIFZPSUQgKk1zZykKK3sKKwlJTlQgVGFpbDsKKwlNTE1FX1FVRVVFCSpRdWV1ZSA9IChNTE1FX1FVRVVFICopJnBBZC0+TWxtZS5RdWV1ZTsKKworCS8vIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLgorCS8vIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdAorCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCisJCXJldHVybiBGQUxTRTsKKworCS8vIEZpcnN0IGNoZWNrIHRoZSBzaXplLCBpdCBNVVNUIG5vdCBleGNlZWQgdGhlIG1sbWUgcXVldWUgc2l6ZQorCWlmIChNc2dMZW4gPiBNR01UX0RNQV9CVUZGRVJfU0laRSkKKwl7CisJCURCR1BSSU5UX0VSUigoIk1sbWVFbnF1ZXVlOiBtc2cgdG9vIGxhcmdlLCBzaXplID0gJWxkIFxuIiwgTXNnTGVuKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAoTWxtZVF1ZXVlRnVsbChRdWV1ZSkpCisJeworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJTmRpc0FjcXVpcmVTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7CisJVGFpbCA9IFF1ZXVlLT5UYWlsOworCVF1ZXVlLT5UYWlsKys7CisJUXVldWUtPk51bSsrOworCWlmIChRdWV1ZS0+VGFpbCA9PSBNQVhfTEVOX09GX01MTUVfUVVFVUUpCisJeworCQlRdWV1ZS0+VGFpbCA9IDA7CisJfQorCisJUXVldWUtPkVudHJ5W1RhaWxdLldjaWQgPSBSRVNFUlZFRF9XQ0lEOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5PY2N1cGllZCA9IFRSVUU7CisJUXVldWUtPkVudHJ5W1RhaWxdLk1hY2hpbmUgPSBNYWNoaW5lOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5Nc2dUeXBlID0gTXNnVHlwZTsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uTXNnTGVuICA9IE1zZ0xlbjsKKworCWlmIChNc2cgIT0gTlVMTCkKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KFF1ZXVlLT5FbnRyeVtUYWlsXS5Nc2csIE1zZywgTXNnTGVuKTsKKwl9CisKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKKwlyZXR1cm4gVFJVRTsKK30KKworLyohIFxicmllZgkgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gUmVjdiBnZXRzIGEgTUxNRSBtZXNzYWdlCisgKglccGFyYW0JKlF1ZXVlCQkJIFRoZSBNTE1FIFF1ZXVlCisgKglccGFyYW0JIFRpbWVTdGFtcEhpZ2gJIFRoZSB1cHBlciAzMiBiaXQgb2YgdGltZXN0YW1wCisgKglccGFyYW0JIFRpbWVTdGFtcExvdwkgVGhlIGxvd2VyIDMyIGJpdCBvZiB0aW1lc3RhbXAKKyAqCVxwYXJhbQkgUnNzaQkJCSBUaGUgcmVjZWl2aW5nIFJTU0kgc3RyZW5ndGgKKyAqCVxwYXJhbQkgTXNnTGVuIAkJIFRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UKKyAqCVxwYXJhbQkqTXNnCQkJIFRoZSBtZXNzYWdlIHBvaW50ZXIKKyAqCVxyZXR1cm4gIFRSVUUgaWYgZXZlcnl0aGluZyBvaywgRkFMU0Ugb3RoZXJ3aXNlIChsaWtlIFF1ZXVlIEZ1bGwpCisgKglccHJlCisgKglccG9zdAorCisgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAqLworQk9PTEVBTiBNbG1lRW5xdWV1ZUZvclJlY3YoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUxPTkcgV2NpZCwKKwlJTiBVTE9ORyBUaW1lU3RhbXBIaWdoLAorCUlOIFVMT05HIFRpbWVTdGFtcExvdywKKwlJTiBVQ0hBUiBSc3NpMCwKKwlJTiBVQ0hBUiBSc3NpMSwKKwlJTiBVQ0hBUiBSc3NpMiwKKwlJTiBVTE9ORyBNc2dMZW4sCisJSU4gVk9JRCAqTXNnLAorCUlOIFVDSEFSIFNpZ25hbCkKK3sKKwlJTlQgCQkgVGFpbCwgTWFjaGluZTsKKwlQRlJBTUVfODAyXzExIHBGcmFtZSA9IChQRlJBTUVfODAyXzExKU1zZzsKKwlJTlQJCSBNc2dUeXBlOworCU1MTUVfUVVFVUUJKlF1ZXVlID0gKE1MTUVfUVVFVUUgKikmcEFkLT5NbG1lLlF1ZXVlOworCisjaWZkZWYgUkFMSU5LX0FURQorCS8qIE5vdGhpbmcgdG8gZG8gaW4gQVRFIG1vZGUgKi8KKwlpZihBVEVfT04ocEFkKSkKKwkJcmV0dXJuIEZBTFNFOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCS8vIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLgorCS8vIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdAorCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpCisJeworCQlEQkdQUklOVF9FUlIoKCJNbG1lRW5xdWV1ZUZvclJlY3Y6IGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTU1xuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJLy8gRmlyc3QgY2hlY2sgdGhlIHNpemUsIGl0IE1VU1Qgbm90IGV4Y2VlZCB0aGUgbWxtZSBxdWV1ZSBzaXplCisJaWYgKE1zZ0xlbiA+IE1HTVRfRE1BX0JVRkZFUl9TSVpFKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiTWxtZUVucXVldWVGb3JSZWN2OiBmcmFtZSB0b28gbGFyZ2UsIHNpemUgPSAlbGQgXG4iLCBNc2dMZW4pKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCWlmIChNbG1lUXVldWVGdWxsKFF1ZXVlKSkKKwl7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJaWYgKCFNc2dUeXBlU3Vic3QocEFkLCBwRnJhbWUsICZNYWNoaW5lLCAmTXNnVHlwZSkpCisJCXsKKwkJCURCR1BSSU5UX0VSUigoIk1sbWVFbnF1ZXVlRm9yUmVjdjogdW4tcmVjb25nbml6ZWQgbWdtdC0+c3VidHlwZT0lZFxuIixwRnJhbWUtPkhkci5GQy5TdWJUeXBlKSk7CisJCQlyZXR1cm4gRkFMU0U7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBPSywgd2UgZ290IGFsbCB0aGUgaW5mb3JtYXRpb25zLCBpdCBpcyB0aW1lIHRvIHB1dCB0aGluZ3MgaW50byBxdWV1ZQorCU5kaXNBY3F1aXJlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOworCVRhaWwgPSBRdWV1ZS0+VGFpbDsKKwlRdWV1ZS0+VGFpbCsrOworCVF1ZXVlLT5OdW0rKzsKKwlpZiAoUXVldWUtPlRhaWwgPT0gTUFYX0xFTl9PRl9NTE1FX1FVRVVFKQorCXsKKwkJUXVldWUtPlRhaWwgPSAwOworCX0KKwlRdWV1ZS0+RW50cnlbVGFpbF0uT2NjdXBpZWQgPSBUUlVFOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5NYWNoaW5lID0gTWFjaGluZTsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uTXNnVHlwZSA9IE1zZ1R5cGU7CisJUXVldWUtPkVudHJ5W1RhaWxdLk1zZ0xlbiAgPSBNc2dMZW47CisJUXVldWUtPkVudHJ5W1RhaWxdLlRpbWVTdGFtcC51Lkxvd1BhcnQgPSBUaW1lU3RhbXBMb3c7CisJUXVldWUtPkVudHJ5W1RhaWxdLlRpbWVTdGFtcC51LkhpZ2hQYXJ0ID0gVGltZVN0YW1wSGlnaDsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uUnNzaTAgPSBSc3NpMDsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uUnNzaTEgPSBSc3NpMTsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uUnNzaTIgPSBSc3NpMjsKKwlRdWV1ZS0+RW50cnlbVGFpbF0uU2lnbmFsID0gU2lnbmFsOworCVF1ZXVlLT5FbnRyeVtUYWlsXS5XY2lkID0gKFVDSEFSKVdjaWQ7CisKKwlRdWV1ZS0+RW50cnlbVGFpbF0uQ2hhbm5lbCA9IHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbDsKKworCWlmIChNc2cgIT0gTlVMTCkKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KFF1ZXVlLT5FbnRyeVtUYWlsXS5Nc2csIE1zZywgTXNnTGVuKTsKKwl9CisKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKKworCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKworCXJldHVybiBUUlVFOworfQorCisKKy8qISBcYnJpZWYJIERlcXVldWUgYSBtZXNzYWdlIGZyb20gdGhlIE1MTUUgUXVldWUKKyAqCVxwYXJhbQkqUXVldWUJICBUaGUgTUxNRSBRdWV1ZQorICoJXHBhcmFtCSpFbGVtCSAgVGhlIG1lc3NhZ2UgZGVxdWV1ZWQgZnJvbSBNTE1FIFF1ZXVlCisgKglccmV0dXJuICBUUlVFIGlmIHRoZSBFbGVtIGNvbnRhaW5zIHNvbWV0aGluZywgRkFMU0Ugb3RoZXJ3aXNlCisgKglccHJlCisgKglccG9zdAorCisgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAqLworQk9PTEVBTiBNbG1lRGVxdWV1ZSgKKwlJTiBNTE1FX1FVRVVFICpRdWV1ZSwKKwlPVVQgTUxNRV9RVUVVRV9FTEVNICoqRWxlbSkKK3sKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKKwkqRWxlbSA9ICYoUXVldWUtPkVudHJ5W1F1ZXVlLT5IZWFkXSk7CisJUXVldWUtPk51bS0tOworCVF1ZXVlLT5IZWFkKys7CisJaWYgKFF1ZXVlLT5IZWFkID09IE1BWF9MRU5fT0ZfTUxNRV9RVUVVRSkKKwl7CisJCVF1ZXVlLT5IZWFkID0gMDsKKwl9CisJTmRpc1JlbGVhc2VTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7CisJcmV0dXJuIFRSVUU7Cit9CisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRAlNbG1lUmVzdGFydFN0YXRlTWFjaGluZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlCT09MRUFOCQkJCUNhbmNlbGxlZDsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVSZXN0YXJ0U3RhdGVNYWNoaW5lIFxuIikpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJVUNIQVIgaTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJLy8gQ2FuY2VsIGFsbCB0aW1lciBldmVudHMKKwkJLy8gQmUgY2FyZWZ1bCB0byBjYW5jZWwgbmV3IGFkZGVkIHRpbWVyCisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkFzc29jVGltZXIsCSAgJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlJlYXNzb2NUaW1lciwgICAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguRGlzYXNzb2NUaW1lciwgICZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5BdXRoVGltZXIsCSAgICZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5CZWFjb25UaW1lciwJICAgJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwJICAgJkNhbmNlbGxlZCk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJZm9yIChpPTA7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwkJeworCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lciwgJkNhbmNlbGxlZCk7CisJCX0KKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBDaGFuZ2UgYmFjayB0byBvcmlnaW5hbCBjaGFubmVsIGluIGNhc2Ugb2YgZG9pbmcgc2NhbgorCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOworCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCisJLy8gUmVzdW1lIE1TRFUgd2hpY2ggaXMgdHVybmVkIG9mZiBkdXJuaW5nIHNjYW4KKwlSVE1QUmVzdW1lTXNkdVRyYW5zbWlzc2lvbihwQWQpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCS8vIFNldCBhbGwgc3RhdGUgbWFjaGluZXMgYmFjayBJRExFCisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgICAgPSBDTlRMX0lETEU7CisJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlICAgPSBBU1NPQ19JRExFOworCQlwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlICAgID0gQVVUSF9SRVFfSURMRTsKKwkJcEFkLT5NbG1lLkF1dGhSc3BNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUlNQX0lETEU7CisJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgICAgPSBTWU5DX0lETEU7CisJCXBBZC0+TWxtZS5BY3RNYWNoaW5lLkN1cnJTdGF0ZSAgICA9IEFDVF9JRExFOworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQlwQWQtPk1sbWUuRGxzTWFjaGluZS5DdXJyU3RhdGUgICAgPSBETFNfSURMRTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK30KKworLyohIFxicmllZgl0ZXN0IGlmIHRoZSBNTE1FIFF1ZXVlIGlzIGVtcHR5CisgKglccGFyYW0JKlF1ZXVlCSAgVGhlIE1MTUUgUXVldWUKKyAqCVxyZXR1cm4gVFJVRSBpZiB0aGUgUXVldWUgaXMgZW1wdHksIEZBTFNFIG90aGVyd2lzZQorICoJXHByZQorICoJXHBvc3QKKworIElSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgKi8KK0JPT0xFQU4gTWxtZVF1ZXVlRW1wdHkoCisJSU4gTUxNRV9RVUVVRSAqUXVldWUpCit7CisJQk9PTEVBTiBBbnM7CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKKwlBbnMgPSAoUXVldWUtPk51bSA9PSAwKTsKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCYoUXVldWUtPkxvY2spKTsKKworCXJldHVybiBBbnM7Cit9CisKKy8qISBcYnJpZWYJIHRlc3QgaWYgdGhlIE1MTUUgUXVldWUgaXMgZnVsbAorICoJXHBhcmFtCSAqUXVldWUgCSBUaGUgTUxNRSBRdWV1ZQorICoJXHJldHVybiAgVFJVRSBpZiB0aGUgUXVldWUgaXMgZW1wdHksIEZBTFNFIG90aGVyd2lzZQorICoJXHByZQorICoJXHBvc3QKKworIElSUUwgPSBQQVNTSVZFX0xFVkVMCisgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAqLworQk9PTEVBTiBNbG1lUXVldWVGdWxsKAorCUlOIE1MTUVfUVVFVUUgKlF1ZXVlKQoreworCUJPT0xFQU4gQW5zOworCisJTmRpc0FjcXVpcmVTcGluTG9jaygmKFF1ZXVlLT5Mb2NrKSk7CisJQW5zID0gKFF1ZXVlLT5OdW0gPT0gTUFYX0xFTl9PRl9NTE1FX1FVRVVFIHx8IFF1ZXVlLT5FbnRyeVtRdWV1ZS0+VGFpbF0uT2NjdXBpZWQpOworCU5kaXNSZWxlYXNlU3BpbkxvY2soJihRdWV1ZS0+TG9jaykpOworCisJcmV0dXJuIEFuczsKK30KKworLyohIFxicmllZgkgVGhlIGRlc3RydWN0b3Igb2YgTUxNRSBRdWV1ZQorICoJXHBhcmFtCisgKglccmV0dXJuCisgKglccHJlCisgKglccG9zdAorICoJXG5vdGUJQ2xlYXIgTWxtZSBRdWV1ZSwgU2V0IFF1ZXVlLT5OdW0gdG8gWmVyby4KKworIElSUUwgPSBQQVNTSVZFX0xFVkVMCisKKyAqLworVk9JRCBNbG1lUXVldWVEZXN0cm95KAorCUlOIE1MTUVfUVVFVUUgKnBRdWV1ZSkKK3sKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCYocFF1ZXVlLT5Mb2NrKSk7CisJcFF1ZXVlLT5OdW0gID0gMDsKKwlwUXVldWUtPkhlYWQgPSAwOworCXBRdWV1ZS0+VGFpbCA9IDA7CisJTmRpc1JlbGVhc2VTcGluTG9jaygmKHBRdWV1ZS0+TG9jaykpOworCU5kaXNGcmVlU3BpbkxvY2soJihwUXVldWUtPkxvY2spKTsKK30KKworLyohIFxicmllZgkgVG8gc3Vic3RpdHV0ZSB0aGUgbWVzc2FnZSB0eXBlIGlmIHRoZSBtZXNzYWdlIGlzIGNvbWluZyBmcm9tIGV4dGVybmFsCisgKglccGFyYW0JcEZyYW1lCQkgICBUaGUgZnJhbWUgcmVjZWl2ZWQKKyAqCVxwYXJhbQkqTWFjaGluZQkgICBUaGUgc3RhdGUgbWFjaGluZQorICoJXHBhcmFtCSpNc2dUeXBlCSAgIHRoZSBtZXNzYWdlIHR5cGUgZm9yIHRoZSBzdGF0ZSBtYWNoaW5lCisgKglccmV0dXJuIFRSVUUgaWYgdGhlIHN1YnN0aXR1dGlvbiBpcyBzdWNjZXNzZnVsLCBGQUxTRSBvdGhlcndpc2UKKyAqCVxwcmUKKyAqCVxwb3N0CisKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitCT09MRUFOIE1zZ1R5cGVTdWJzdCgKKwlJTiBQUlRNUF9BREFQVEVSICBwQWQsCisJSU4gUEZSQU1FXzgwMl8xMSBwRnJhbWUsCisJT1VUIElOVCAqTWFjaGluZSwKKwlPVVQgSU5UICpNc2dUeXBlKQoreworCVVTSE9SVAlTZXE7CisJVUNIQVIJRUFQVHlwZTsKKwlQVUNIQVIJcERhdGE7CisKKwkvLyBQb2ludGVyIHRvIHN0YXJ0IG9mIGRhdGEgZnJhbWVzIGluY2x1ZGluZyBTTkFQIGhlYWRlcgorCXBEYXRhID0gKFBVQ0hBUikgcEZyYW1lICsgTEVOR1RIXzgwMl8xMTsKKworCS8vIFRoZSBvbmx5IGRhdGEgdHlwZSB3aWxsIHBhc3MgdG8gdGhpcyBmdW5jdGlvbiBpcyBFQVBPTCBmcmFtZQorCWlmIChwRnJhbWUtPkhkci5GQy5UeXBlID09IEJUWVBFX0RBVEEpCisJeworCQlpZiAoTmRpc0VxdWFsTWVtb3J5KFNOQVBfQUlST05FVCwgcERhdGEsIExFTkdUSF84MDJfMV9IKSkKKwkJeworCQkJLy8gQ2lzY28gQWlyb25ldCBTTkFQIGhlYWRlcgorCQkJKk1hY2hpbmUgPSBBSVJPTkVUX1NUQVRFX01BQ0hJTkU7CisJCQkqTXNnVHlwZSA9IE1UMl9BSVJPTkVUX01TRzsKKwkJCXJldHVybiAoVFJVRSk7CisJCX0KKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJaWYgKCBwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQICkgLy9MRUFQCisJCXsKKwkJCS8vIExFQVAgZnJhbWVzCisJCQkqTWFjaGluZSA9IExFQVBfU1RBVEVfTUFDSElORTsKKwkJCUVBUFR5cGUgPSAqKChVQ0hBUiopcEZyYW1lICsgTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IICsgMSk7CisJCQlyZXR1cm4gKExlYXBNc2dUeXBlU3Vic3QoRUFQVHlwZSwgTXNnVHlwZSkpOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKwkJeworCQkJKk1hY2hpbmUgPSBXUEFfUFNLX1NUQVRFX01BQ0hJTkU7CisJCQlFQVBUeXBlID0gKigoVUNIQVIqKXBGcmFtZSArIExFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSCArIDEpOworCQkJcmV0dXJuKFdwYU1zZ1R5cGVTdWJzdChFQVBUeXBlLCBNc2dUeXBlKSk7CisJCX0KKwl9CisKKwlzd2l0Y2ggKHBGcmFtZS0+SGRyLkZDLlN1YlR5cGUpCisJeworCQljYXNlIFNVQlRZUEVfQVNTT0NfUkVROgorCQkJKk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOworCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9BU1NPQ19SRVE7CisJCQlicmVhazsKKwkJY2FzZSBTVUJUWVBFX0FTU09DX1JTUDoKKwkJCSpNYWNoaW5lID0gQVNTT0NfU1RBVEVfTUFDSElORTsKKwkJCSpNc2dUeXBlID0gTVQyX1BFRVJfQVNTT0NfUlNQOworCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9SRUFTU09DX1JFUToKKwkJCSpNYWNoaW5lID0gQVNTT0NfU1RBVEVfTUFDSElORTsKKwkJCSpNc2dUeXBlID0gTVQyX1BFRVJfUkVBU1NPQ19SRVE7CisJCQlicmVhazsKKwkJY2FzZSBTVUJUWVBFX1JFQVNTT0NfUlNQOgorCQkJKk1hY2hpbmUgPSBBU1NPQ19TVEFURV9NQUNISU5FOworCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9SRUFTU09DX1JTUDsKKwkJCWJyZWFrOworCQljYXNlIFNVQlRZUEVfUFJPQkVfUkVROgorCQkJKk1hY2hpbmUgPSBTWU5DX1NUQVRFX01BQ0hJTkU7CisJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX1BST0JFX1JFUTsKKwkJCWJyZWFrOworCQljYXNlIFNVQlRZUEVfUFJPQkVfUlNQOgorCQkJKk1hY2hpbmUgPSBTWU5DX1NUQVRFX01BQ0hJTkU7CisJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX1BST0JFX1JTUDsKKwkJCWJyZWFrOworCQljYXNlIFNVQlRZUEVfQkVBQ09OOgorCQkJKk1hY2hpbmUgPSBTWU5DX1NUQVRFX01BQ0hJTkU7CisJCQkqTXNnVHlwZSA9IE1UMl9QRUVSX0JFQUNPTjsKKwkJCWJyZWFrOworCQljYXNlIFNVQlRZUEVfQVRJTToKKwkJCSpNYWNoaW5lID0gU1lOQ19TVEFURV9NQUNISU5FOworCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9BVElNOworCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9ESVNBU1NPQzoKKwkJCSpNYWNoaW5lID0gQVNTT0NfU1RBVEVfTUFDSElORTsKKwkJCSpNc2dUeXBlID0gTVQyX1BFRVJfRElTQVNTT0NfUkVROworCQkJYnJlYWs7CisJCWNhc2UgU1VCVFlQRV9BVVRIOgorCQkJLy8gZ2V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgZnJvbSBwYXlsb2FkIDI0IE1hYyBIZWFkZXIgKyAyIGJ5dGVzIGFsZ29yaXRobQorCQkJTmRpc01vdmVNZW1vcnkoJlNlcSwgJnBGcmFtZS0+T2N0ZXRbMl0sIHNpemVvZihVU0hPUlQpKTsKKwkJCWlmIChTZXEgPT0gMSB8fCBTZXEgPT0gMykKKwkJCXsKKwkJCQkqTWFjaGluZSA9IEFVVEhfUlNQX1NUQVRFX01BQ0hJTkU7CisJCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9BVVRIX09ERDsKKwkJCX0KKwkJCWVsc2UgaWYgKFNlcSA9PSAyIHx8IFNlcSA9PSA0KQorCQkJeworCQkJCSpNYWNoaW5lID0gQVVUSF9TVEFURV9NQUNISU5FOworCQkJCSpNc2dUeXBlID0gTVQyX1BFRVJfQVVUSF9FVkVOOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXJldHVybiBGQUxTRTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNVQlRZUEVfREVBVVRIOgorCQkJKk1hY2hpbmUgPSBBVVRIX1JTUF9TVEFURV9NQUNISU5FOworCQkJKk1zZ1R5cGUgPSBNVDJfUEVFUl9ERUFVVEg7CisJCQlicmVhazsKKwkJY2FzZSBTVUJUWVBFX0FDVElPTjoKKwkJCSpNYWNoaW5lID0gQUNUSU9OX1NUQVRFX01BQ0hJTkU7CisJCQkvLyAgU29tZXRpbWVzIFN0YSB3aWxsIHJldHVybiB3aXRoIGNhdGVnb3J5IGJ5dGVzIHdpdGggTVNCID0gMSwgaWYgdGhleSByZWNlaXZlIGNhdG9nb3J5IG91dCBvZiB0aGVpciBzdXBwb3J0CisJCQlpZiAoKHBGcmFtZS0+T2N0ZXRbMF0mMHg3RikgPiBNQVhfUEVFUl9DQVRFX01TRykKKwkJCXsKKwkJCQkqTXNnVHlwZSA9IE1UMl9BQ1RfSU5WQUxJRDsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkqTXNnVHlwZSA9IChwRnJhbWUtPk9jdGV0WzBdJjB4N0YpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gRkFMU0U7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gc3RhdGVfbWFjaGluZS5jCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qISBcYnJpZWYgSW5pdGlhbGl6ZSB0aGUgc3RhdGUgbWFjaGluZS4KKyAqCVxwYXJhbSAqUwkJCXBvaW50ZXIgdG8gdGhlIHN0YXRlIG1hY2hpbmUKKyAqCVxwYXJhbQlUcmFucwkJU3RhdGUgbWFjaGluZSB0cmFuc2l0aW9uIGZ1bmN0aW9uCisgKglccGFyYW0JU3ROcgkJbnVtYmVyIG9mIHN0YXRlcworICoJXHBhcmFtCU1zZ05yCQludW1iZXIgb2YgbWVzc2FnZXMKKyAqCVxwYXJhbQlEZWZGdW5jIAlkZWZhdWx0IGZ1bmN0aW9uLCB3aGVuIHRoZXJlIGlzIGludmFsaWQgc3RhdGUvbWVzc2FnZSBjb21iaW5hdGlvbgorICoJXHBhcmFtCUluaXRTdGF0ZQlpbml0aWFsIHN0YXRlIG9mIHRoZSBzdGF0ZSBtYWNoaW5lCisgKglccGFyYW0JQmFzZQkJU3RhdGVNYWNoaW5lIGJhc2UsIGludGVybmFsIHVzZSBvbmx5CisgKglccHJlIHBfc20gc2hvdWxkIGJlIGEgbGVnYWwgcG9pbnRlcgorICoJXHBvc3QKKworIElSUUwgPSBQQVNTSVZFX0xFVkVMCisKKyAqLworVk9JRCBTdGF0ZU1hY2hpbmVJbml0KAorCUlOIFNUQVRFX01BQ0hJTkUgKlMsCisJSU4gU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10sCisJSU4gVUxPTkcgU3ROciwKKwlJTiBVTE9ORyBNc2dOciwKKwlJTiBTVEFURV9NQUNISU5FX0ZVTkMgRGVmRnVuYywKKwlJTiBVTE9ORyBJbml0U3RhdGUsCisJSU4gVUxPTkcgQmFzZSkKK3sKKwlVTE9ORyBpLCBqOworCisJLy8gc2V0IG51bWJlciBvZiBzdGF0ZXMgYW5kIG1lc3NhZ2VzCisJUy0+TnJTdGF0ZSA9IFN0TnI7CisJUy0+TnJNc2cgICA9IE1zZ05yOworCVMtPkJhc2UgICAgPSBCYXNlOworCisJUy0+VHJhbnNGdW5jICA9IFRyYW5zOworCisJLy8gaW5pdCBhbGwgc3RhdGUgdHJhbnNpdGlvbiB0byBkZWZhdWx0IGZ1bmN0aW9uCisJZm9yIChpID0gMDsgaSA8IFN0TnI7IGkrKykKKwl7CisJCWZvciAoaiA9IDA7IGogPCBNc2dOcjsgaisrKQorCQl7CisJCQlTLT5UcmFuc0Z1bmNbaSAqIE1zZ05yICsgal0gPSBEZWZGdW5jOworCQl9CisJfQorCisJLy8gc2V0IHRoZSBzdGFydGluZyBzdGF0ZQorCVMtPkN1cnJTdGF0ZSA9IEluaXRTdGF0ZTsKK30KKworLyohIFxicmllZiBUaGlzIGZ1bmN0aW9uIGZpbGxzIGluIHRoZSBmdW5jdGlvbiBwb2ludGVyIGludG8gdGhlIGNlbGwgaW4gdGhlIHN0YXRlIG1hY2hpbmUKKyAqCVxwYXJhbSAqUwlwb2ludGVyIHRvIHRoZSBzdGF0ZSBtYWNoaW5lCisgKglccGFyYW0gU3QJc3RhdGUKKyAqCVxwYXJhbSBNc2cJaW5jb21pbmcgbWVzc2FnZQorICoJXHBhcmFtIGYJdGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gKHN0YXRlLCBtZXNzYWdlKSBjb21iaW5hdGlvbiBvY2N1cnMgYXQgdGhlIHN0YXRlIG1hY2hpbmUKKyAqCVxwcmUgKlMgc2hvdWxkIGJlIGEgbGVnYWwgcG9pbnRlciB0byB0aGUgc3RhdGUgbWFjaGluZSwgc3QsIG1zZywgc2hvdWxkIGJlIGFsbCB3aXRoaW4gdGhlIHJhbmdlLCBCYXNlIHNob3VsZCBiZSBzZXQgaW4gdGhlIGluaXRpYWwgc3RhdGUKKyAqCVxwb3N0CisKKyBJUlFMID0gUEFTU0lWRV9MRVZFTAorCisgKi8KK1ZPSUQgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKAorCUlOIFNUQVRFX01BQ0hJTkUgKlMsCisJSU4gVUxPTkcgU3QsCisJSU4gVUxPTkcgTXNnLAorCUlOIFNUQVRFX01BQ0hJTkVfRlVOQyBGdW5jKQoreworCVVMT05HIE1zZ0lkeDsKKworCU1zZ0lkeCA9IE1zZyAtIFMtPkJhc2U7CisKKwlpZiAoU3QgPCBTLT5OclN0YXRlICYmIE1zZ0lkeCA8IFMtPk5yTXNnKQorCXsKKwkJLy8gYm91bmRhcnkgY2hlY2tpbmcgYmVmb3JlIHNldHRpbmcgdGhlIGFjdGlvbgorCQlTLT5UcmFuc0Z1bmNbU3QgKiBTLT5Ock1zZyArIE1zZ0lkeF0gPSBGdW5jOworCX0KK30KKworLyohIFxicmllZgkgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBzdGF0ZSB0cmFuc2l0aW9uCisgKglccGFyYW0JICpBZGFwdGVyIHRoZSBOSUMgYWRhcHRlciBwb2ludGVyCisgKglccGFyYW0JICpTIAkgIHRoZSBzdGF0ZSBtYWNoaW5lCisgKglccGFyYW0JICpFbGVtCSAgdGhlIG1lc3NhZ2UgdG8gYmUgZXhlY3V0ZWQKKyAqCVxyZXR1cm4gICBOb25lCisKKyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICovCitWT0lEIFN0YXRlTWFjaGluZVBlcmZvcm1BY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gU1RBVEVfTUFDSElORSAqUywKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJKCooUy0+VHJhbnNGdW5jW1MtPkN1cnJTdGF0ZSAqIFMtPk5yTXNnICsgRWxlbS0+TXNnVHlwZSAtIFMtPkJhc2VdKSkocEFkLCBFbGVtKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGUgZHJvcCBmdW5jdGlvbiwgd2hlbiBtYWNoaW5lIGV4ZWN1dGVzIHRoaXMsIHRoZSBtZXNzYWdlIGlzIHNpbXBseQorCQlpZ25vcmVkLiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZywgdGhlIG1lc3NhZ2UgaXMgZnJlZWQgaW4KKwkJU3RhdGVNYWNoaW5lUGVyZm9ybUFjdGlvbigpCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBEcm9wKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gbGZzci5jCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIExmc3JJbml0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVMT05HIFNlZWQpCit7CisJaWYgKFNlZWQgPT0gMCkKKwkJcEFkLT5NbG1lLlNoaWZ0UmVnID0gMTsKKwllbHNlCisJCXBBZC0+TWxtZS5TaGlmdFJlZyA9IFNlZWQ7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitVQ0hBUiBSYW5kb21CeXRlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVMT05HIGk7CisJVUNIQVIgUiwgUmVzdWx0OworCisJUiA9IDA7CisKKwlpZiAocEFkLT5NbG1lLlNoaWZ0UmVnID09IDApCisJTmRpc0dldFN5c3RlbVVwVGltZSgoVUxPTkcgKikmcEFkLT5NbG1lLlNoaWZ0UmVnKTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJeworCQlpZiAocEFkLT5NbG1lLlNoaWZ0UmVnICYgMHgwMDAwMDAwMSkKKwkJeworCQkJcEFkLT5NbG1lLlNoaWZ0UmVnID0gKChwQWQtPk1sbWUuU2hpZnRSZWcgXiBMRlNSX01BU0spID4+IDEpIHwgMHg4MDAwMDAwMDsKKwkJCVJlc3VsdCA9IDE7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwQWQtPk1sbWUuU2hpZnRSZWcgPSBwQWQtPk1sbWUuU2hpZnRSZWcgPj4gMTsKKwkJCVJlc3VsdCA9IDA7CisJCX0KKwkJUiA9IChSIDw8IDEpIHwgUmVzdWx0OworCX0KKworCXJldHVybiBSOworfQorCitWT0lEIEFzaWNVcGRhdGVBdXRvRmFsbEJhY2tUYWJsZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwUmF0ZVRhYmxlKQoreworCVVDSEFSCQkJCQlpOworCUhUX0ZCS19DRkcwX1NUUlVDCQlIdENmZzA7CisJSFRfRkJLX0NGRzFfU1RSVUMJCUh0Q2ZnMTsKKwlMR19GQktfQ0ZHMF9TVFJVQwkJTGdDZmcwOworCUxHX0ZCS19DRkcxX1NUUlVDCQlMZ0NmZzE7CisJUFJUTVBfVFhfUkFURV9TV0lUQ0gJcEN1cnJUeFJhdGUsIHBOZXh0VHhSYXRlOworCisJLy8gc2V0IHRvIGluaXRpYWwgdmFsdWUKKwlIdENmZzAud29yZCA9IDB4NjU0MzIxMDA7CisJSHRDZmcxLndvcmQgPSAweGVkY2JhOTg4OworCUxnQ2ZnMC53b3JkID0gMHhlZGNiYTk4ODsKKwlMZ0NmZzEud29yZCA9IDB4MDAwMDIxMDA7CisKKwlwTmV4dFR4UmF0ZSA9IChQUlRNUF9UWF9SQVRFX1NXSVRDSClwUmF0ZVRhYmxlKzE7CisJZm9yIChpID0gMTsgaSA8ICooKFBVQ0hBUikgcFJhdGVUYWJsZSk7IGkrKykKKwl7CisJCXBDdXJyVHhSYXRlID0gKFBSVE1QX1RYX1JBVEVfU1dJVENIKXBSYXRlVGFibGUrMStpOworCQlzd2l0Y2ggKHBDdXJyVHhSYXRlLT5Nb2RlKQorCQl7CisJCQljYXNlIDA6CQkvL0NDSworCQkJCWJyZWFrOworCQkJY2FzZSAxOgkJLy9PRkRNCisJCQkJeworCQkJCQlzd2l0Y2gocEN1cnJUeFJhdGUtPkN1cnJNQ1MpCisJCQkJCXsKKwkJCQkJCWNhc2UgMDoKKwkJCQkJCQlMZ0NmZzAuZmllbGQuT0ZETU1DUzBGQksgPSAocE5leHRUeFJhdGUtPk1vZGUgPT0gTU9ERV9PRkRNKSA/IChwTmV4dFR4UmF0ZS0+Q3Vyck1DUys4KTogcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDE6CisJCQkJCQkJTGdDZmcwLmZpZWxkLk9GRE1NQ1MxRkJLID0gKHBOZXh0VHhSYXRlLT5Nb2RlID09IE1PREVfT0ZETSkgPyAocE5leHRUeFJhdGUtPkN1cnJNQ1MrOCk6IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAyOgorCQkJCQkJCUxnQ2ZnMC5maWVsZC5PRkRNTUNTMkZCSyA9IChwTmV4dFR4UmF0ZS0+TW9kZSA9PSBNT0RFX09GRE0pID8gKHBOZXh0VHhSYXRlLT5DdXJyTUNTKzgpOiBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMzoKKwkJCQkJCQlMZ0NmZzAuZmllbGQuT0ZETU1DUzNGQksgPSAocE5leHRUeFJhdGUtPk1vZGUgPT0gTU9ERV9PRkRNKSA/IChwTmV4dFR4UmF0ZS0+Q3Vyck1DUys4KTogcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDQ6CisJCQkJCQkJTGdDZmcwLmZpZWxkLk9GRE1NQ1M0RkJLID0gKHBOZXh0VHhSYXRlLT5Nb2RlID09IE1PREVfT0ZETSkgPyAocE5leHRUeFJhdGUtPkN1cnJNQ1MrOCk6IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSA1OgorCQkJCQkJCUxnQ2ZnMC5maWVsZC5PRkRNTUNTNUZCSyA9IChwTmV4dFR4UmF0ZS0+TW9kZSA9PSBNT0RFX09GRE0pID8gKHBOZXh0VHhSYXRlLT5DdXJyTUNTKzgpOiBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgNjoKKwkJCQkJCQlMZ0NmZzAuZmllbGQuT0ZETU1DUzZGQksgPSAocE5leHRUeFJhdGUtPk1vZGUgPT0gTU9ERV9PRkRNKSA/IChwTmV4dFR4UmF0ZS0+Q3Vyck1DUys4KTogcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIDc6CisJCQkJCQkJTGdDZmcwLmZpZWxkLk9GRE1NQ1M3RkJLID0gKHBOZXh0VHhSYXRlLT5Nb2RlID09IE1PREVfT0ZETSkgPyAocE5leHRUeFJhdGUtPkN1cnJNQ1MrOCk6IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJY2FzZSAyOgkJLy9IVC1NSVgKKwkJCWNhc2UgMzoJCS8vSFQtR0YKKwkJCQl7CisJCQkJCWlmICgocE5leHRUeFJhdGUtPk1vZGUgPj0gTU9ERV9IVE1JWCkgJiYgKHBDdXJyVHhSYXRlLT5DdXJyTUNTICE9IHBOZXh0VHhSYXRlLT5DdXJyTUNTKSkKKwkJCQkJeworCQkJCQkJc3dpdGNoKHBDdXJyVHhSYXRlLT5DdXJyTUNTKQorCQkJCQkJeworCQkJCQkJCWNhc2UgMDoKKwkJCQkJCQkJSHRDZmcwLmZpZWxkLkhUTUNTMEZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDE6CisJCQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzFGQksgPSBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAyOgorCQkJCQkJCQlIdENmZzAuZmllbGQuSFRNQ1MyRkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMzoKKwkJCQkJCQkJSHRDZmcwLmZpZWxkLkhUTUNTM0ZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDQ6CisJCQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzRGQksgPSBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSA1OgorCQkJCQkJCQlIdENmZzAuZmllbGQuSFRNQ1M1RkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgNjoKKwkJCQkJCQkJSHRDZmcwLmZpZWxkLkhUTUNTNkZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDc6CisJCQkJCQkJCUh0Q2ZnMC5maWVsZC5IVE1DUzdGQksgPSBwTmV4dFR4UmF0ZS0+Q3Vyck1DUzsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSA4OgorCQkJCQkJCQlIdENmZzEuZmllbGQuSFRNQ1M4RkJLID0gcE5leHRUeFJhdGUtPkN1cnJNQ1M7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgOToKKwkJCQkJCQkJSHRDZmcxLmZpZWxkLkhUTUNTOUZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDEwOgorCQkJCQkJCQlIdENmZzEuZmllbGQuSFRNQ1MxMEZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDExOgorCQkJCQkJCQlIdENmZzEuZmllbGQuSFRNQ1MxMUZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDEyOgorCQkJCQkJCQlIdENmZzEuZmllbGQuSFRNQ1MxMkZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDEzOgorCQkJCQkJCQlIdENmZzEuZmllbGQuSFRNQ1MxM0ZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDE0OgorCQkJCQkJCQlIdENmZzEuZmllbGQuSFRNQ1MxNEZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDE1OgorCQkJCQkJCQlIdENmZzEuZmllbGQuSFRNQ1MxNUZCSyA9IHBOZXh0VHhSYXRlLT5DdXJyTUNTOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJBc2ljVXBkYXRlQXV0b0ZhbGxCYWNrVGFibGU6IG5vdCBzdXBwb3J0IEN1cnJNQ1M9JWRcbiIsIHBDdXJyVHhSYXRlLT5DdXJyTUNTKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCX0KKworCQlwTmV4dFR4UmF0ZSA9IHBDdXJyVHhSYXRlOworCX0KKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEhUX0ZCS19DRkcwLCBIdENmZzAud29yZCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgSFRfRkJLX0NGRzEsIEh0Q2ZnMS53b3JkKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBMR19GQktfQ0ZHMCwgTGdDZmcwLndvcmQpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIExHX0ZCS19DRkcxLCBMZ0NmZzEud29yZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlTZXQgTUFDIHJlZ2lzdGVyIHZhbHVlIGFjY29yZGluZyBvcGVyYXRpb24gbW9kZS4KKwkJT3BlcmF0aW9uTW9kZSBBTkQgYk5vbkdGRXhpc3QgYXJlIGZvciBNTSBhbmQgR0YgUHJvdGVjaXRvbi4KKwkJSWYgTU0gb3IgR0YgbWFzayBpcyBub3Qgc2V0LCB0aG9zZSBwYXNzaW5nIGFyZ3VtZW50IGRvZXNuJ3Qgbm90IHRha2UgZWZmZWN0LgorCisJCU9wZXJhdGlvbiBtb2RlIG1lYW5pbmc6CisJCT0gMCA6IFB1cmUgSFQsIG5vIHByZW90ZWN0aW9uLgorCQk9IDB4MDE7IHRoZXJlIG1heSBiZSBub24tSFQgZGV2aWNlcyBpbiBib3RoIHRoZSBjb250cm9sIGFuZCBleHRlbnNpb24gY2hhbm5lbCwgcHJvdGVjdGlvbiBpcyBvcHRpb25hbCBpbiBCU1MuCisJCT0gMHgxMDogTm8gVHJhbnNtaXNzaW9uIGluIDQwTSBpcyBwcm90ZWN0ZWQuCisJCT0gMHgxMTogVHJhbnNtaXNzaW9uIGluIGJvdGggNDBNIGFuZCAyME0gc2hhbGwgYmUgcHJvdGVjdGVkCisJCWlmIChiTm9uR0ZFeGlzdCkKKwkJCXdlIHNob3VsZCBjaG9vc2Ugbm90IHRvIHVzZSBHRi4gQnV0IHN0aWxsIHNldCBjb3JyZWN0IEFTSUMgcmVnaXN0ZXJzLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgCUFzaWNVcGRhdGVQcm90ZWN0KAorCUlOCQlQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAJCVVTSE9SVAkJCU9wZXJhdGlvbk1vZGUsCisJSU4gCQlVQ0hBUgkJCVNldE1hc2ssCisJSU4JCUJPT0xFQU4JCQliRGlzYWJsZUJHUHJvdGVjdCwKKwlJTgkJQk9PTEVBTgkJCWJOb25HRkV4aXN0KQoreworCVBST1RfQ0ZHX1NUUlVDCVByb3RDZmcsIFByb3RDZmc0OworCVVJTlQzMiBQcm90ZWN0WzZdOworCVVTSE9SVAkJCW9mZnNldDsKKwlVQ0hBUgkJCWk7CisJVUlOVDMyIE1hY1JlZyA9IDA7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJaWYgKEFURV9PTihwQWQpKQorCQlyZXR1cm47CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJaWYgKCEocEFkLT5Db21tb25DZmcuYkhUUHJvdGVjdCkgJiYgKE9wZXJhdGlvbk1vZGUgIT0gOCkpCisJeworCQlyZXR1cm47CisJfQorCisJaWYgKHBBZC0+QkFUYWJsZS5udW1Bc09yaWdpbmF0b3IpCisJeworCQkvLworCQkvLyBlbmFibGUgdGhlIFJUUy9DVFMgdG8gYXZvaWQgY2hhbm5lbCBjb2xsaXNpb24KKwkJLy8KKwkJU2V0TWFzayA9IEFMTE5fU0VUUFJPVEVDVDsKKwkJT3BlcmF0aW9uTW9kZSA9IDg7CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJLy8gQ29uZmlnIEFTSUMgUlRTIHRocmVzaG9sZCByZWdpc3RlcgorCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfUlRTX0NGRywgJk1hY1JlZyk7CisJTWFjUmVnICY9IDB4RkYwMDAwRkY7CisKKwkvLyBJZiB0aGUgdXNlciB3YW50IGRpc2FibGUgUnRzVGhyZXNob2xkIGFuZCBlbmJhbGUgQW1zZHUvUmFsaW5rLUFnZ3JlZ2F0aW9uLCBzZXQgdGhlIFJ0c1RocmVzaG9sZCBhcyA0MDk2CisgICAgaWYgKCgKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJKHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZSkgfHwKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJKHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUgPT0gVFJVRSkpCisgICAgICAgICYmIHBBZC0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCA9PSBNQVhfUlRTX1RIUkVTSE9MRCkKKyAgICB7CisJCU1hY1JlZyB8PSAoMHgxMDAwIDw8IDgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworCQlNYWNSZWcgfD0gKHBBZC0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCA8PCA4KTsKKyAgICB9CisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9SVFNfQ0ZHLCBNYWNSZWcpOworCisJLy8gSW5pdGlhbCBjb21tb24gcHJvdGVjdGlvbiBzZXR0aW5ncworCVJUTVBaZXJvTWVtb3J5KFByb3RlY3QsIHNpemVvZihQcm90ZWN0KSk7CisJUHJvdENmZzQud29yZCA9IDA7CisJUHJvdENmZy53b3JkID0gMDsKKwlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd0dGNDAgPSAxOworCVByb3RDZmcuZmllbGQuVHhvcEFsbG93R0YyMCA9IDE7CisJUHJvdENmZy5maWVsZC5UeG9wQWxsb3dNTTQwID0gMTsKKwlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd01NMjAgPSAxOworCVByb3RDZmcuZmllbGQuVHhvcEFsbG93T2ZkbSA9IDE7CisJUHJvdENmZy5maWVsZC5UeG9wQWxsb3dDY2sgPSAxOworCVByb3RDZmcuZmllbGQuUlRTVGhFbiA9IDE7CisJUHJvdENmZy5maWVsZC5Qcm90ZWN0TmF2ID0gQVNJQ19TSE9SVE5BVjsKKworCS8vIHVwZGF0ZSBQSFkgbW9kZSBhbmQgcmF0ZQorCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMTQpCisJCVByb3RDZmcuZmllbGQuUHJvdGVjdFJhdGUgPSAweDQwMDA7CisJUHJvdENmZy5maWVsZC5Qcm90ZWN0UmF0ZSB8PSBwQWQtPkNvbW1vbkNmZy5SdHNSYXRlOworCisJLy8gSGFuZGxlIGxlZ2FjeShCL0cpIHByb3RlY3Rpb24KKwlpZiAoYkRpc2FibGVCR1Byb3RlY3QpCisJeworCQkvL1Byb3RDZmcuZmllbGQuUHJvdGVjdFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5SdHNSYXRlOworCQlQcm90Q2ZnLmZpZWxkLlByb3RlY3RDdHJsID0gMDsKKwkJUHJvdGVjdFswXSA9IFByb3RDZmcud29yZDsKKwkJUHJvdGVjdFsxXSA9IFByb3RDZmcud29yZDsKKwl9CisJZWxzZQorCXsKKwkJLy9Qcm90Q2ZnLmZpZWxkLlByb3RlY3RSYXRlID0gcEFkLT5Db21tb25DZmcuUnRzUmF0ZTsKKwkJUHJvdENmZy5maWVsZC5Qcm90ZWN0Q3RybCA9IDA7CQkJLy8gQ0NLIGRvIG5vdCBuZWVkIHRvIGJlIHByb3RlY3RlZAorCQlQcm90ZWN0WzBdID0gUHJvdENmZy53b3JkOworCQlQcm90Q2ZnLmZpZWxkLlByb3RlY3RDdHJsID0gQVNJQ19DVFM7CS8vIE9GRE0gbmVlZHMgdXNpbmcgQ0NLIHRvIHByb3RlY3QKKwkJUHJvdGVjdFsxXSA9IFByb3RDZmcud29yZDsKKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkvLyBEZWNpZGUgSFQgZnJhbWUgcHJvdGVjdGlvbi4KKwlpZiAoKFNldE1hc2sgJiBBTExOX1NFVFBST1RFQ1QpICE9IDApCisJeworCQlzd2l0Y2goT3BlcmF0aW9uTW9kZSkKKwkJeworCQkJY2FzZSAweDA6CisJCQkJLy8gTk8gUFJPVEVDVAorCQkJCS8vIDEuQWxsIFNUQXMgaW4gdGhlIEJTUyBhcmUgMjAvNDAgTUh6IEhUCisJCQkJLy8gMi4gaW4gYWkgMjAvNDBNSHogQlNTCisJCQkJLy8gMy4gYWxsIFNUQXMgYXJlIDIwTUh6IGluIGEgMjBNSHogQlNTCisJCQkJLy8gUHVyZSBIVC4gbm8gcHJvdGVjdGlvbi4KKworCQkJCS8vIE1NMjBfUFJPVF9DRkcKKwkJCQkvLwlSZXNlcnZlZCAoMzE6MjcpCisJCQkJLy8gCVBST1RfVFhPUCgyNToyMCkgLS0gMDEwMTExCisJCQkJLy8JUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3Rpb24pCisJCQkJLy8gIFBST1RfQ1RSTCgxNzoxNikgLS0gMDAgKE5vbmUpCisJCQkJLy8gCVBST1RfUkFURSgxNTowKSAgLS0gMHg0MDA0IChPRkRNIDI0TSkKKwkJCQlQcm90ZWN0WzJdID0gMHgwMTc0NDAwNDsKKworCQkJCS8vIE1NNDBfUFJPVF9DRkcKKwkJCQkvLwlSZXNlcnZlZCAoMzE6MjcpCisJCQkJLy8gCVBST1RfVFhPUCgyNToyMCkgLS0gMTExMTExCisJCQkJLy8JUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3Rpb24pCisJCQkJLy8gIFBST1RfQ1RSTCgxNzoxNikgLS0gMDAgKE5vbmUpCisJCQkJLy8gCVBST1RfUkFURSgxNTowKSAgLS0gMHg0MDg0IChkdXBsaWNhdGUgT0ZETSAyNE0pCisJCQkJUHJvdGVjdFszXSA9IDB4MDNmNDQwODQ7CisKKwkJCQkvLyBDRjIwX1BST1RfQ0ZHCisJCQkJLy8JUmVzZXJ2ZWQgKDMxOjI3KQorCQkJCS8vIAlQUk9UX1RYT1AoMjU6MjApIC0tIDAxMDExMQorCQkJCS8vCVBST1RfTkFWKDE5OjE4KSAgLS0gMDEgKFNob3J0IE5BViBwcm90ZWN0aW9uKQorCQkJCS8vICBQUk9UX0NUUkwoMTc6MTYpIC0tIDAwIChOb25lKQorCQkJCS8vIAlQUk9UX1JBVEUoMTU6MCkgIC0tIDB4NDAwNCAoT0ZETSAyNE0pCisJCQkJUHJvdGVjdFs0XSA9IDB4MDE3NDQwMDQ7CisKKwkJCQkvLyBDRjQwX1BST1RfQ0ZHCisJCQkJLy8JUmVzZXJ2ZWQgKDMxOjI3KQorCQkJCS8vIAlQUk9UX1RYT1AoMjU6MjApIC0tIDExMTExMQorCQkJCS8vCVBST1RfTkFWKDE5OjE4KSAgLS0gMDEgKFNob3J0IE5BViBwcm90ZWN0aW9uKQorCQkJCS8vICBQUk9UX0NUUkwoMTc6MTYpIC0tIDAwIChOb25lKQorCQkJCS8vIAlQUk9UX1JBVEUoMTU6MCkgIC0tIDB4NDA4NCAoZHVwbGljYXRlIE9GRE0gMjRNKQorCQkJCVByb3RlY3RbNV0gPSAweDAzZjQ0MDg0OworCisJCQkJaWYgKGJOb25HRkV4aXN0KQorCQkJCXsKKwkJCQkJLy8gUFJPVF9OQVYoMTk6MTgpICAtLSAwMSAoU2hvcnQgTkFWIHByb3RlY3RpaW9uKQorCQkJCQkvLyBQUk9UX0NUUkwoMTc6MTYpIC0tIDAxIChSVFMvQ1RTKQorCQkJCQlQcm90ZWN0WzRdID0gMHgwMTc1NDAwNDsKKwkJCQkJUHJvdGVjdFs1XSA9IDB4MDNmNTQwODQ7CisJCQkJfQorCQkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlJUU0xvbmdQcm90T24gPSBGQUxTRTsKKwkJCQlicmVhazsKKworIAkJCWNhc2UgMToKKwkJCQkvLyBUaGlzIGlzICJIVCBub24tbWVtYmVyIHByb3RlY3Rpb24gbW9kZS4iCisJCQkJLy8gSWYgdGhlcmUgbWF5IGJlIG5vbi1IVCBTVEFzIG15IEJTUworCQkJCVByb3RDZmcud29yZCA9IDB4MDE3NDQwMDQ7CS8vIFBST1RfQ1RSTCgxNzoxNikgOiAwIChOb25lKQorCQkJCVByb3RDZmc0LndvcmQgPSAweDAzZjQ0MDg0OyAvLyBkdXBsaWNhZXQgbGVnYWN5IDI0TS4gQlcgc2V0IDEuCisJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQkdfUFJPVEVDVElPTl9JTlVTRUQpKQorCQkJCXsKKwkJCQkJUHJvdENmZy53b3JkID0gMHgwMTc0MDAwMzsJLy9FUlAgdXNlIFByb3RlY3Rpb24gYml0IGlzIHNldCwgdXNlIHByb3RlY3Rpb24gcmF0ZSBhdCBDbGF1c2UgMTguLgorCQkJCQlQcm90Q2ZnNC53b3JkID0gMHgwM2Y0MDAwMzsgLy8gRG9uJ3QgZHVwbGljYXRlIFJUUy9DVFMgaW4gQ0NLIG1vZGUuIDB4MDNmNDAwODM7CisJCQkJfQorCQkJCS8vQXNzaWduIFByb3RlY3Rpb24gbWV0aG9kIGZvciAyMCY0MCBNSHogcGFja2V0cworCQkJCVByb3RDZmcuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX1JUUzsKKwkJCQlQcm90Q2ZnLmZpZWxkLlByb3RlY3ROYXYgPSBBU0lDX1NIT1JUTkFWOworCQkJCVByb3RDZmc0LmZpZWxkLlByb3RlY3RDdHJsID0gQVNJQ19SVFM7CisJCQkJUHJvdENmZzQuZmllbGQuUHJvdGVjdE5hdiA9IEFTSUNfU0hPUlROQVY7CisJCQkJUHJvdGVjdFsyXSA9IFByb3RDZmcud29yZDsKKwkJCQlQcm90ZWN0WzNdID0gUHJvdENmZzQud29yZDsKKwkJCQlQcm90ZWN0WzRdID0gUHJvdENmZy53b3JkOworCQkJCVByb3RlY3RbNV0gPSBQcm90Q2ZnNC53b3JkOworCQkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlJUU0xvbmdQcm90T24gPSBUUlVFOworCQkJCWJyZWFrOworCisJCQljYXNlIDI6CisJCQkJLy8gSWYgb25seSBIVCBTVEFzIGFyZSBpbiBCU1MuIGF0IGxlYXN0IG9uZSBpcyAyME1Iei4gT25seSBwcm90ZWN0IDQwTUh6IHBhY2tldHMKKwkJCQlQcm90Q2ZnLndvcmQgPSAweDAxNzQ0MDA0OyAgLy8gUFJPVF9DVFJMKDE3OjE2KSA6IDAgKE5vbmUpCisJCQkJUHJvdENmZzQud29yZCA9IDB4MDNmNDQwODQ7IC8vIGR1cGxpY2FldCBsZWdhY3kgMjRNLiBCVyBzZXQgMS4KKworCQkJCS8vQXNzaWduIFByb3RlY3Rpb24gbWV0aG9kIGZvciA0ME1IeiBwYWNrZXRzCisJCQkJUHJvdENmZzQuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX1JUUzsKKwkJCQlQcm90Q2ZnNC5maWVsZC5Qcm90ZWN0TmF2ID0gQVNJQ19TSE9SVE5BVjsKKwkJCQlQcm90ZWN0WzJdID0gUHJvdENmZy53b3JkOworCQkJCVByb3RlY3RbM10gPSBQcm90Q2ZnNC53b3JkOworCQkJCWlmIChiTm9uR0ZFeGlzdCkKKwkJCQl7CisJCQkJCVByb3RDZmcuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX1JUUzsKKwkJCQkJUHJvdENmZy5maWVsZC5Qcm90ZWN0TmF2ID0gQVNJQ19TSE9SVE5BVjsKKwkJCQl9CisJCQkJUHJvdGVjdFs0XSA9IFByb3RDZmcud29yZDsKKwkJCQlQcm90ZWN0WzVdID0gUHJvdENmZzQud29yZDsKKworCQkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlJUU0xvbmdQcm90T24gPSBGQUxTRTsKKwkJCQlicmVhazsKKworCQkJY2FzZSAzOgorCQkJCS8vIEhUIG1peGVkIG1vZGUuCSBQUk9URUNUIEFMTCEKKwkJCQkvLyBBc3NpZ24gUmF0ZQorCQkJCVByb3RDZmcud29yZCA9IDB4MDE3NDQwMDQ7CS8vZHVwbGljYWV0IGxlZ2FjeSAyNE0uIEJXIHNldCAxLgorCQkJCVByb3RDZmc0LndvcmQgPSAweDAzZjQ0MDg0OworCQkJCS8vIGJvdGggMjBNSHogYW5kIDQwTUh6IGFyZSBwcm90ZWN0ZWQuIFdoZXRoZXIgdXNlIFJUUyBvciBDVFMtdG8tc2VsZiBkZXBlbmRzIG9uIHRoZQorCQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0JHX1BST1RFQ1RJT05fSU5VU0VEKSkKKwkJCQl7CisJCQkJCVByb3RDZmcud29yZCA9IDB4MDE3NDAwMDM7CS8vRVJQIHVzZSBQcm90ZWN0aW9uIGJpdCBpcyBzZXQsIHVzZSBwcm90ZWN0aW9uIHJhdGUgYXQgQ2xhdXNlIDE4Li4KKwkJCQkJUHJvdENmZzQud29yZCA9IDB4MDNmNDAwMDM7IC8vIERvbid0IGR1cGxpY2F0ZSBSVFMvQ1RTIGluIENDSyBtb2RlLiAweDAzZjQwMDgzCisJCQkJfQorCQkJCS8vQXNzaWduIFByb3RlY3Rpb24gbWV0aG9kIGZvciAyMCY0MCBNSHogcGFja2V0cworCQkJCVByb3RDZmcuZmllbGQuUHJvdGVjdEN0cmwgPSBBU0lDX1JUUzsKKwkJCQlQcm90Q2ZnLmZpZWxkLlByb3RlY3ROYXYgPSBBU0lDX1NIT1JUTkFWOworCQkJCVByb3RDZmc0LmZpZWxkLlByb3RlY3RDdHJsID0gQVNJQ19SVFM7CisJCQkJUHJvdENmZzQuZmllbGQuUHJvdGVjdE5hdiA9IEFTSUNfU0hPUlROQVY7CisJCQkJUHJvdGVjdFsyXSA9IFByb3RDZmcud29yZDsKKwkJCQlQcm90ZWN0WzNdID0gUHJvdENmZzQud29yZDsKKwkJCQlQcm90ZWN0WzRdID0gUHJvdENmZy53b3JkOworCQkJCVByb3RlY3RbNV0gPSBQcm90Q2ZnNC53b3JkOworCQkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlJUU0xvbmdQcm90T24gPSBUUlVFOworCQkJCWJyZWFrOworCisJCQljYXNlIDg6CisJCQkJUHJvdGVjdFsyXSA9IDB4MDE3NTQwMDQ7CisJCQkJUHJvdGVjdFszXSA9IDB4MDNmNTQwODQ7CisJCQkJUHJvdGVjdFs0XSA9IDB4MDE3NTQwMDQ7CisJCQkJUHJvdGVjdFs1XSA9IDB4MDNmNTQwODQ7CisJCQkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iUlRTTG9uZ1Byb3RPbiA9IFRSVUU7CisJCQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlvZmZzZXQgPSBDQ0tfUFJPVF9DRkc7CisJZm9yIChpID0gMDtpIDwgNjtpKyspCisJeworCQlpZiAoKFNldE1hc2sgJiAoMTw8IGkpKSkKKwkJeworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0ICsgaSo0LCBQcm90ZWN0W2ldKTsKKwkJfQorCX0KK30KKworCisjaWZkZWYgUlQzMHh4CisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjogV3JpdGUgUlQzMHh4IFJGIHJlZ2lzdGVyIHRocm91Z2ggTUFDCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUyBSVDMweHhXcml0ZVJGUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlSZWdJRCwKKwlJTglVQ0hBUgkJCVZhbHVlKQoreworCVJGX0NTUl9DRkdfU1RSVUMJcmZjc3I7CisJVUlOVAkJCQlpID0gMDsKKworCWRvCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFJGX0NTUl9DRkcsICZyZmNzci53b3JkKTsKKworCQlpZiAoIXJmY3NyLmZpZWxkLlJGX0NTUl9LSUNLKQorCQkJYnJlYWs7CisJCWkrKzsKKwl9CisJd2hpbGUgKChpIDwgUkVUUllfTElNSVQpICYmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSk7CisKKwlpZiAoKGkgPT0gUkVUUllfTElNSVQpIHx8IChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIlJldHJ5IGNvdW50IGV4aGF1c3RlZCBvciBkZXZpY2UgcmVtb3ZlZCEhIVxuIikpOworCQlyZXR1cm4gU1RBVFVTX1VOU1VDQ0VTU0ZVTDsKKwl9CisKKwlyZmNzci5maWVsZC5SRl9DU1JfV1IgPSAxOworCXJmY3NyLmZpZWxkLlJGX0NTUl9LSUNLID0gMTsKKwlyZmNzci5maWVsZC5URVNUQ1NSX1JGQUNDX1JFR05VTSA9IFJlZ0lEOworCXJmY3NyLmZpZWxkLlJGX0NTUl9EQVRBID0gVmFsdWU7CisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBSRl9DU1JfQ0ZHLCByZmNzci53b3JkKTsKKworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjogUmVhZCBSVDMweHggUkYgcmVnaXN0ZXIgdGhyb3VnaCBNQUMKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTIFJUMzB4eFJlYWRSRlJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJUmVnSUQsCisJSU4JUFVDSEFSCQkJcFZhbHVlKQoreworCVJGX0NTUl9DRkdfU1RSVUMJcmZjc3I7CisJVUlOVAkJCQlpPTAsIGs9MDsKKworCWZvciAoaT0wOyBpPE1BWF9CVVNZX0NPVU5UOyBpKyspCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFJGX0NTUl9DRkcsICZyZmNzci53b3JkKTsKKworCQlpZiAocmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0sgPT0gQlVTWSkKKwkJeworCQkJY29udGludWU7CisJCX0KKwkJcmZjc3Iud29yZCA9IDA7CisJCXJmY3NyLmZpZWxkLlJGX0NTUl9XUiA9IDA7CisJCXJmY3NyLmZpZWxkLlJGX0NTUl9LSUNLID0gMTsKKwkJcmZjc3IuZmllbGQuVEVTVENTUl9SRkFDQ19SRUdOVU0gPSBSZWdJRDsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUkZfQ1NSX0NGRywgcmZjc3Iud29yZCk7CisJCWZvciAoaz0wOyBrPE1BWF9CVVNZX0NPVU5UOyBrKyspCisJCXsKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgUkZfQ1NSX0NGRywgJnJmY3NyLndvcmQpOworCisJCQlpZiAocmZjc3IuZmllbGQuUkZfQ1NSX0tJQ0sgPT0gSURMRSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoKHJmY3NyLmZpZWxkLlJGX0NTUl9LSUNLID09IElETEUpICYmCisJCQkocmZjc3IuZmllbGQuVEVTVENTUl9SRkFDQ19SRUdOVU0gPT0gUmVnSUQpKQorCQl7CisJCQkqcFZhbHVlID0gKFVDSEFSKXJmY3NyLmZpZWxkLlJGX0NTUl9EQVRBOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHJmY3NyLmZpZWxkLlJGX0NTUl9LSUNLID09IEJVU1kpCisJeworCQlEQkdQUklOVF9FUlIoKCJSRiByZWFkIFIlZD0weCV4IGZhaWwsIGlbJWRdLCBrWyVkXVxuIiwgUmVnSUQsIHJmY3NyLndvcmQsaSxrKSk7CisJCXJldHVybiBTVEFUVVNfVU5TVUNDRVNTRlVMOworCX0KKworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKyNlbmRpZiAvLyBSVDMweHggLy8KKworI2lmZGVmIFJUMzB4eAorLy8gYWRkIGJ5IGpvaG5saSwgUkYgcG93ZXIgc2VxdWVuY2Ugc2V0dXAKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUxvYWQgUkYgbm9ybWFsIG9wZXJhdGlvbi1tb2RlIHNldHVwCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFJUMzB4eExvYWRSRk5vcm1hbE1vZGVTZXR1cCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQpCit7CisJVUNIQVIgUkZWYWx1ZTsKKworCS8vIFJYMF9QRCAmIFRYMF9QRCwgUkYgUjEgcmVnaXN0ZXIgQml0IDIgJiBCaXQgMyB0byAwIGFuZCBSRl9CTE9DS19lbixSWDFfUEQgJiBUWDFfUEQsIEJpdDAsIEJpdCA0ICYgQml0NSB0byAxCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsICZSRlZhbHVlKTsKKwlSRlZhbHVlID0gKFJGVmFsdWUgJiAofjB4MEMpKSB8IDB4MzE7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjAxLCBSRlZhbHVlKTsKKworCS8vIFRYX0xPMl9lbiwgUkYgUjE1IHJlZ2lzdGVyIEJpdCAzIHRvIDAKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IxNSwgJlJGVmFsdWUpOworCVJGVmFsdWUgJj0gKH4weDA4KTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMTUsIFJGVmFsdWUpOworCisJLy8gVFhfTE8xX2VuLCBSRiBSMTcgcmVnaXN0ZXIgQml0IDMgdG8gMAorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjE3LCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSAmPSAofjB4MDgpOworCS8vIHRvIGZpeCByeCBsb25nIHJhbmdlIGlzc3VlCisJaWYgKCgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA+PSAweDAyMTEpICYmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuRXh0ZXJuYWxMTkFGb3JHID09IDApKQorCXsKKwkJUkZWYWx1ZSB8PSAweDIwOworCX0KKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMTcsIFJGVmFsdWUpOworCisJLy8gUlhfTE8xX2VuLCBSRiBSMjAgcmVnaXN0ZXIgQml0IDMgdG8gMAorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjIwLCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSAmPSAofjB4MDgpOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyMCwgUkZWYWx1ZSk7CisKKwkvLyBSWF9MTzJfZW4sIFJGIFIyMSByZWdpc3RlciBCaXQgMyB0byAwCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjEsICZSRlZhbHVlKTsKKwlSRlZhbHVlICY9ICh+MHgwOCk7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjIxLCBSRlZhbHVlKTsKKworCS8vIExET1JGX1ZDLCBSRiBSMjcgcmVnaXN0ZXIgQml0IDIgdG8gMAorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCAmUkZWYWx1ZSk7CisJaWYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpIDwgMHgwMjExKQorCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAofjB4NzcpKSB8IDB4MzsKKwllbHNlCisJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmICh+MHg3NykpOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNywgUkZWYWx1ZSk7CisJLyogZW5kIGpvaG5saSAqLworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlMb2FkIFJGIHNsZWVwLW1vZGUgc2V0dXAKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUlQzMHh4TG9hZFJGU2xlZXBNb2RlU2V0dXAoCisJSU4gUFJUTVBfQURBUFRFUiAJcEFkKQoreworCVVDSEFSIFJGVmFsdWU7CisJVUlOVDMyIE1BQ1ZhbHVlOworCisJLy8gUkZfQkxPQ0tfZW4uIFJGIFIxIHJlZ2lzdGVyIEJpdCAwIHRvIDAKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwMSwgJlJGVmFsdWUpOworCVJGVmFsdWUgJj0gKH4weDAxKTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsIFJGVmFsdWUpOworCisJLy8gVkNPX0lDLCBSRiBSNyByZWdpc3RlciBCaXQgNCAmIEJpdCA1IHRvIDAKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwNywgJlJGVmFsdWUpOworCVJGVmFsdWUgJj0gKH4weDMwKTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDcsIFJGVmFsdWUpOworCisJLy8gSWRvaCwgUkYgUjkgcmVnaXN0ZXIgQml0IDEsIEJpdCAyICYgQml0IDMgdG8gMAorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA5LCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSAmPSAofjB4MEUpOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwOSwgUkZWYWx1ZSk7CisKKwkvLyBSWF9DVEJfZW4sIFJGIFIyMSByZWdpc3RlciBCaXQgNyB0byAwCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjEsICZSRlZhbHVlKTsKKwlSRlZhbHVlICY9ICh+MHg4MCk7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjIxLCBSRlZhbHVlKTsKKworCS8vIExET1JGX1ZDLCBSRiBSMjcgcmVnaXN0ZXIgQml0IDAsIEJpdCAxICYgQml0IDIgdG8gMQorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjI3LCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSB8PSAweDc3OworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNywgUkZWYWx1ZSk7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIExET19DRkcwLCAmTUFDVmFsdWUpOworCU1BQ1ZhbHVlIHw9IDB4MUQwMDAwMDA7CisJUlRNUF9JT19XUklURTMyKHBBZCwgTERPX0NGRzAsIE1BQ1ZhbHVlKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJUmV2ZXJzZSBSRiBzbGVlcC1tb2RlIHNldHVwCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFJUMzB4eFJldmVyc2VSRlNsZWVwTW9kZVNldHVwKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCkKK3sKKwlVQ0hBUiBSRlZhbHVlOworCVVJTlQzMiBNQUNWYWx1ZTsKKworCS8vIFJGX0JMT0NLX2VuLCBSRiBSMSByZWdpc3RlciBCaXQgMCB0byAxCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsICZSRlZhbHVlKTsKKwlSRlZhbHVlIHw9IDB4MDE7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjAxLCBSRlZhbHVlKTsKKworCS8vIFZDT19JQywgUkYgUjcgcmVnaXN0ZXIgQml0IDQgJiBCaXQgNSB0byAxCisJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMDcsICZSRlZhbHVlKTsKKwlSRlZhbHVlIHw9IDB4MzA7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA3LCBSRlZhbHVlKTsKKworCS8vIElkb2gsIFJGIFI5IHJlZ2lzdGVyIEJpdCAxLCBCaXQgMiAmIEJpdCAzIHRvIDEKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwOSwgJlJGVmFsdWUpOworCVJGVmFsdWUgfD0gMHgwRTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDksIFJGVmFsdWUpOworCisJLy8gUlhfQ1RCX2VuLCBSRiBSMjEgcmVnaXN0ZXIgQml0IDcgdG8gMQorCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjIxLCAmUkZWYWx1ZSk7CisJUkZWYWx1ZSB8PSAweDgwOworCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyMSwgUkZWYWx1ZSk7CisKKwkvLyBMRE9SRl9WQywgUkYgUjI3IHJlZ2lzdGVyIEJpdCAyIHRvIDAKKwlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IyNywgJlJGVmFsdWUpOworCWlmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA8IDB4MDIxMSkKKwkJUkZWYWx1ZSA9IChSRlZhbHVlICYgKH4weDc3KSkgfCAweDM7CisJZWxzZQorCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAofjB4NzcpKTsKKwlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjcsIFJGVmFsdWUpOworCisJLy8gUlQzMDcxIHZlcnNpb24gRSBoYXMgZml4ZWQgdGhpcyBpc3N1ZQorCWlmICgocEFkLT5OaWNDb25maWcyLmZpZWxkLkRBQ1Rlc3RCaXQgPT0gMSkgJiYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpIDwgMHgwMjExKSkKKwl7CisJCS8vIHBhdGNoIHR4IEVWTSBpc3N1ZSB0ZW1wb3JhcmlseQorCQlSVE1QX0lPX1JFQUQzMihwQWQsIExET19DRkcwLCAmTUFDVmFsdWUpOworCQlNQUNWYWx1ZSA9ICgoTUFDVmFsdWUgJiAweEUwRkZGRkZGKSB8IDB4MEQwMDAwMDApOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBMRE9fQ0ZHMCwgTUFDVmFsdWUpOworCX0KKwllbHNlCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIExET19DRkcwLCAmTUFDVmFsdWUpOworCQlNQUNWYWx1ZSA9ICgoTUFDVmFsdWUgJiAweEUwRkZGRkZGKSB8IDB4MDEwMDAwMDApOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBMRE9fQ0ZHMCwgTUFDVmFsdWUpOworCX0KK30KKy8vIGVuZCBqb2hubGkKKyNlbmRpZiAvLyBSVDMweHggLy8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNpY1N3aXRjaENoYW5uZWwoCisJCQkJCSAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JVUNIQVIJCQlDaGFubmVsLAorCUlOCUJPT0xFQU4JCQliU2NhbikKK3sKKwlVTE9ORwkJCVIyID0gMCwgUjMgPSBERUZBVUxUX1JGX1RYX1BPV0VSLCBSNCA9IDA7CisJQ0hBUiAgICBUeFB3ZXIgPSAwLCBUeFB3ZXIyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsgLy9CYnA5NCA9IEJCUFI5NF9ERUZBVUxULCBUeFB3ZXIyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwlVQ0hBUglpbmRleDsKKwlVSU5UMzIgCVZhbHVlID0gMDsgLy9CYnBSZWcsIFZhbHVlOworCVJUTVBfUkZfUkVHUyAqUkZSZWdUYWJsZTsKKworCS8vIFNlYXJjaCBUeCBwb3dlciB2YWx1ZQorI2lmIDEKKwkvLyBXZSBjYW4ndCB1c2UgQ2hhbm5lbExpc3QgdG8gc2VhcmNoIGNoYW5uZWwsIHNpbmNlIHNvbWUgY2VudHJhbCBjaGFubmwncyB0eHBvd3IgZG9lc24ndCBsaXN0CisJLy8gaW4gQ2hhbm5lbExpc3QsIHNvIHVzZSBUeFBvd2VyIGFycmF5IGluc3RlYWQuCisJLy8KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNQVhfTlVNX09GX0NIQU5ORUxTOyBpbmRleCsrKQorCXsKKwkJaWYgKENoYW5uZWwgPT0gcEFkLT5UeFBvd2VyW2luZGV4XS5DaGFubmVsKQorCQl7CisJCQlUeFB3ZXIgPSBwQWQtPlR4UG93ZXJbaW5kZXhdLlBvd2VyOworCQkJVHhQd2VyMiA9IHBBZC0+VHhQb3dlcltpbmRleF0uUG93ZXIyOworCQkJYnJlYWs7CisJCX0KKwl9CisjZWxzZQorCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBBZC0+Q2hhbm5lbExpc3ROdW07IGluZGV4KyspCisJeworCQlpZiAoQ2hhbm5lbCA9PSBwQWQtPkNoYW5uZWxMaXN0W2luZGV4XS5DaGFubmVsKQorCQl7CisJCQlUeFB3ZXIgPSBwQWQtPkNoYW5uZWxMaXN0W2luZGV4XS5Qb3dlcjsKKwkJCVR4UHdlcjIgPSBwQWQtPkNoYW5uZWxMaXN0W2luZGV4XS5Qb3dlcjI7CisJCQlicmVhazsKKwkJfQorCX0KKyNlbmRpZgorCisJaWYgKGluZGV4ID09IE1BWF9OVU1fT0ZfQ0hBTk5FTFMpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJBc2ljU3dpdGNoQ2hhbm5lbDogQ2FuJ3QgZmluZCB0aGUgQ2hhbm5lbCMlZCBcbiIsIENoYW5uZWwpKTsKKwl9CisKKyNpZmRlZiBSVDMweHgKKwkvLyBUaGUgUkYgcHJvZ3JhbW1pbmcgc2VxdWVuY2UgaXMgZGlmZmVyZW5jZSBiZXR3ZWVuIDN4eHggYW5kIDJ4eHgKKwlpZiAoKElTX1JUMzA3MChwQWQpIHx8IElTX1JUMzA5MChwQWQpKSAmJiAoKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIwKSB8fCAocEFkLT5SZkljVHlwZSA9PSBSRklDXzIwMjApIHx8CisJCShwQWQtPlJmSWNUeXBlID09IFJGSUNfMzAyMSkgfHwgKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIyKSkpCisJeworCQkvKiBtb2RpZnkgYnkgV1kgZm9yIFJlYWQgUkYgUmVnLiBlcnJvciAqLworCQlVQ0hBUiBSRlZhbHVlOworCisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE5VTV9PRl8zMDIwX0NITkw7IGluZGV4KyspCisJCXsKKwkJCWlmIChDaGFubmVsID09IEZyZXFJdGVtczMwMjBbaW5kZXhdLkNoYW5uZWwpCisJCQl7CisJCQkJLy8gUHJvZ3JhbW1pbmcgY2hhbm5lbCBwYXJhbWV0ZXJzCisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjAyLCBGcmVxSXRlbXMzMDIwW2luZGV4XS5OKTsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDMsIEZyZXFJdGVtczMwMjBbaW5kZXhdLkspOworCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA2LCAmUkZWYWx1ZSk7CisJCQkJUkZWYWx1ZSA9IChSRlZhbHVlICYgMHhGQykgfCBGcmVxSXRlbXMzMDIwW2luZGV4XS5SOworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwNiwgUkZWYWx1ZSk7CisKKwkJCQkvLyBTZXQgVHgwIFBvd2VyCisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMTIsICZSRlZhbHVlKTsKKwkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweEUwKSB8IFR4UHdlcjsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMTIsIFJGVmFsdWUpOworCisJCQkJLy8gU2V0IFR4MSBQb3dlcgorCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjEzLCAmUkZWYWx1ZSk7CisJCQkJUkZWYWx1ZSA9IChSRlZhbHVlICYgMHhFMCkgfCBUeFB3ZXIyOworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IxMywgUkZWYWx1ZSk7CisKKwkJCQkvLyBUeC9SeCBTdHJlYW0gc2V0dGluZworCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjAxLCAmUkZWYWx1ZSk7CisJCQkJLy9pZiAoSVNfUlQzMDkwKHBBZCkpCisJCQkJLy8JUkZWYWx1ZSB8PSAweDAxOyAvLyBFbmFibGUgUkYgYmxvY2suCisJCQkJUkZWYWx1ZSAmPSAweDAzOwkvL2NsZWFyIGJpdFs3fjJdCisJCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkKKwkJCQkJUkZWYWx1ZSB8PSAweEEwOworCQkJCWVsc2UgaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMikKKwkJCQkJUkZWYWx1ZSB8PSAweDgwOworCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpCisJCQkJCVJGVmFsdWUgfD0gMHg1MDsKKwkJCQllbHNlIGlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDIpCisJCQkJCVJGVmFsdWUgfD0gMHg0MDsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMDEsIFJGVmFsdWUpOworCisJCQkJLy8gU2V0IFJGIG9mZnNldAorCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjIzLCAmUkZWYWx1ZSk7CisJCQkJUkZWYWx1ZSA9IChSRlZhbHVlICYgMHg4MCkgfCBwQWQtPlJmRnJlcU9mZnNldDsKKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjMsIFJGVmFsdWUpOworCisJCQkJLy8gU2V0IEJXCisJCQkJaWYgKCFiU2NhbiAmJiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKSkKKwkJCQl7CisJCQkJCVJGVmFsdWUgPSBwQWQtPk1sbWUuQ2FsaUJXNDBSZlIyNDsKKwkJCQkJLy9ESVNBQkxFXzExTl9DSEVDSyhwQWQpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSRlZhbHVlID0gcEFkLT5NbG1lLkNhbGlCVzIwUmZSMjQ7CisJCQkJfQorCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNCwgUkZWYWx1ZSk7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjMxLCBSRlZhbHVlKTsKKworCQkJCS8vIEVuYWJsZSBSRiB0dW5pbmcKKwkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwNywgJlJGVmFsdWUpOworCQkJCVJGVmFsdWUgPSBSRlZhbHVlIHwgMHgxOworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwNywgUkZWYWx1ZSk7CisKKwkJCQkvLyBsYXRjaCBjaGFubmVsIGZvciBmdXR1cmUgdXNhZ2UuCisJCQkJcEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID0gQ2hhbm5lbDsKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlN3aXRjaENoYW5uZWwjJWQoUkY9JWQsIFB3cjA9JWQsIFB3cjE9JWQsICVkVCksIE49MHglMDJYLCBLPTB4JTAyWCwgUj0weCUwMlhcbiIsCisJCQkJCUNoYW5uZWwsCisJCQkJCXBBZC0+UmZJY1R5cGUsCisJCQkJCVR4UHdlciwKKwkJCQkJVHhQd2VyMiwKKwkJCQkJcEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCwKKwkJCQkJRnJlcUl0ZW1zMzAyMFtpbmRleF0uTiwKKwkJCQkJRnJlcUl0ZW1zMzAyMFtpbmRleF0uSywKKwkJCQkJRnJlcUl0ZW1zMzAyMFtpbmRleF0uUikpOworCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJZWxzZQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisJeworCQlSRlJlZ1RhYmxlID0gUkYyODUwUmVnVGFibGU7CisKKwkJc3dpdGNoIChwQWQtPlJmSWNUeXBlKQorCQl7CisJCQljYXNlIFJGSUNfMjgyMDoKKwkJCWNhc2UgUkZJQ18yODUwOgorCQkJY2FzZSBSRklDXzI3MjA6CisJCQljYXNlIFJGSUNfMjc1MDoKKworCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTlVNX09GXzI4NTBfQ0hOTDsgaW5kZXgrKykKKwkJCXsKKwkJCQlpZiAoQ2hhbm5lbCA9PSBSRlJlZ1RhYmxlW2luZGV4XS5DaGFubmVsKQorCQkJCXsKKwkJCQkJUjIgPSBSRlJlZ1RhYmxlW2luZGV4XS5SMjsKKwkJCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkKKwkJCQkJeworCQkJCQkJUjIgfD0gMHg0MDAwOwkvLyBJZiBUWHBhdGggaXMgMSwgYml0IDE0ID0gMTsKKwkJCQkJfQorCisJCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDIpCisJCQkJCXsKKwkJCQkJCVIyIHw9IDB4NDA7CS8vIHdyaXRlIDEgdG8gb2ZmIFJ4cGF0aC4KKwkJCQkJfQorCQkJCQllbHNlIGlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpCisJCQkJCXsKKwkJCQkJCVIyIHw9IDB4MjAwNDA7CS8vIHdyaXRlIDEgdG8gb2ZmIFJ4UGF0aAorCQkJCQl9CisKKwkJCQkJaWYgKENoYW5uZWwgPiAxNCkKKwkJCQkJeworCQkJCQkJLy8gaW5pdGlhbGl6ZSBSMywgUjQKKwkJCQkJCVIzID0gKFJGUmVnVGFibGVbaW5kZXhdLlIzICYgMHhmZmZmYzFmZik7CisJCQkJCQlSNCA9IChSRlJlZ1RhYmxlW2luZGV4XS5SNCAmICh+MHgwMDFmODdjMCkpIHwgKHBBZC0+UmZGcmVxT2Zmc2V0IDw8IDE1KTsKKworCQkJCQkJLy8gNUcgYmFuZCBwb3dlciByYW5nZTogMHhGOX4wWDBGLCBUWDAgUmVnMyBiaXQ5L1RYMSBSZWc0IGJpdDY9IjAiIG1lYW5zIHRoZSBUWCBwb3dlciByZWR1Y2UgN2RCCisJCQkJCQkvLyBSMworCQkJCQkJaWYgKChUeFB3ZXIgPj0gLTcpICYmIChUeFB3ZXIgPCAwKSkKKwkJCQkJCXsKKwkJCQkJCQlUeFB3ZXIgPSAoNytUeFB3ZXIpOworCQkJCQkJCVR4UHdlciA9IChUeFB3ZXIgPiAweEYpID8gKDB4RikgOiAoVHhQd2VyKTsKKwkJCQkJCQlSMyB8PSAoVHhQd2VyIDw8IDEwKTsKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJBc2ljU3dpdGNoQ2hhbm5lbDogVHhQd2VyPSVkIFxuIiwgVHhQd2VyKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJVHhQd2VyID0gKFR4UHdlciA+IDB4RikgPyAoMHhGKSA6IChUeFB3ZXIpOworCQkJCQkJCVIzIHw9IChUeFB3ZXIgPDwgMTApIHwgKDEgPDwgOSk7CisJCQkJCQl9CisKKwkJCQkJCS8vIFI0CisJCQkJCQlpZiAoKFR4UHdlcjIgPj0gLTcpICYmIChUeFB3ZXIyIDwgMCkpCisJCQkJCQl7CisJCQkJCQkJVHhQd2VyMiA9ICg3K1R4UHdlcjIpOworCQkJCQkJCVR4UHdlcjIgPSAoVHhQd2VyMiA+IDB4RikgPyAoMHhGKSA6IChUeFB3ZXIyKTsKKwkJCQkJCQlSNCB8PSAoVHhQd2VyMiA8PCA3KTsKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJBc2ljU3dpdGNoQ2hhbm5lbDogVHhQd2VyMj0lZCBcbiIsIFR4UHdlcjIpKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlUeFB3ZXIyID0gKFR4UHdlcjIgPiAweEYpID8gKDB4RikgOiAoVHhQd2VyMik7CisJCQkJCQkJUjQgfD0gKFR4UHdlcjIgPDwgNykgfCAoMSA8PCA2KTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCVIzID0gKFJGUmVnVGFibGVbaW5kZXhdLlIzICYgMHhmZmZmYzFmZikgfCAoVHhQd2VyIDw8IDkpOyAvLyBzZXQgVFggcG93ZXIwCisJCQkJCVI0ID0gKFJGUmVnVGFibGVbaW5kZXhdLlI0ICYgKH4weDAwMWY4N2MwKSkgfCAocEFkLT5SZkZyZXFPZmZzZXQgPDwgMTUpIHwgKFR4UHdlcjIgPDw2KTsvLyBTZXQgZnJlcSBPZmZzZXQgJiBUeFB3cjEKKwkJCQkJfQorCisJCQkJCS8vIEJhc2VkIG9uIEJCUCBjdXJyZW50IG1vZGUgYmVmb3JlIGNoYW5naW5nIFJGIGNoYW5uZWwuCisJCQkJCWlmICghYlNjYW4gJiYgKHBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9PSBCV180MCkpCisJCQkJCXsKKwkJCQkJCVI0IHw9MHgyMDAwMDA7CisJCQkJCX0KKworCQkJCQkvLyBVcGRhdGUgdmFyaWFibGVzCisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA9IENoYW5uZWw7CisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjEgPSBSRlJlZ1RhYmxlW2luZGV4XS5SMTsKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5SMiA9IFIyOworCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlIzID0gUjM7CisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgPSBSNDsKKworCQkJCQkvLyBTZXQgUkYgdmFsdWUgMSdzIHNldCBSM1tiaXQyXSA9IFswXQorCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlIxKTsKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SMik7CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIChwQWQtPkxhdGNoUmZSZWdzLlIzICYgKH4weDA0KSkpOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlI0KTsKKworCQkJCQlSVE1QdXNlY0RlbGF5KDIwMCk7CisKKwkJCQkJLy8gU2V0IFJGIHZhbHVlIDIncyBzZXQgUjNbYml0Ml0gPSBbMV0KKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SMSk7CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjIpOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCAocEFkLT5MYXRjaFJmUmVncy5SMyB8IDB4MDQpKTsKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SNCk7CisKKwkJCQkJUlRNUHVzZWNEZWxheSgyMDApOworCisJCQkJCS8vIFNldCBSRiB2YWx1ZSAzJ3Mgc2V0IFIzW2JpdDJdID0gWzBdCisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjEpOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlIyKTsKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgKHBBZC0+TGF0Y2hSZlJlZ3MuUjMgJiAofjB4MDQpKSk7CisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjQpOworCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvLyBDaGFuZ2UgQkJQIHNldHRpbmcgZHVyaW5nIHNpd3RjaCBmcm9tIGEtPmcsIGctPmEKKwlpZiAoQ2hhbm5lbCA8PSAxNCkKKwl7CisJICAgIFVMT05HCVR4UGluQ2ZnID0gMHgwMDA1MEYwQTsvL0dhcnkgMjAwNy8wOC8wOSAweDA1MEEwQQorCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjYyLCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjYzLCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY0LCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjg2LCAwKTsvLygweDQ0IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsJLy8gQWNjb3JkaW5nIHRoZSBSb3J5J3Mgc3VnZ2VzdGlvbiB0byBzb2x2ZSB0aGUgbWlkZGxlIHJhbmdlIGlzc3VlLgorCQkvL1JUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjgyLCAweDYyKTsKKworCQkvLyBSeCBIaWdoIHBvd2VyIFZHQSBvZmZzZXQgZm9yIExOQSBzZWxlY3QKKwkgICAgaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5FeHRlcm5hbExOQUZvckcpCisJICAgIHsKKwkgICAgICAgIFJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjgyLCAweDYyKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjc1LCAweDQ2KTsKKwkgICAgfQorCSAgICBlbHNlCisJICAgIHsKKwkgICAgICAgIFJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjgyLCAweDg0KTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjc1LCAweDUwKTsKKwkgICAgfQorCisJCS8vIDVHIGJhbmQgc2VsZWN0aW9uIFBJTiwgYml0MSBhbmQgYml0MiBhcmUgY29tcGxlbWVudAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOworCQlWYWx1ZSAmPSAofjB4Nik7CisJCVZhbHVlIHw9ICgweDA0KTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIFZhbHVlKTsKKworICAgICAgICAvLyBUdXJuIG9mZiB1bnVzZWQgUEEgb3IgTE5BIHdoZW4gb25seSAxVCBvciAxUgorCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQl7CisJCQlUeFBpbkNmZyAmPSAweEZGRkZGRkYzOworCQl9CisJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpCisJCXsKKwkJCVR4UGluQ2ZnICY9IDB4RkZGRkYzRkY7CisJCX0KKworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9QSU5fQ0ZHLCBUeFBpbkNmZyk7CisJfQorCWVsc2UKKwl7CisJICAgIFVMT05HCVR4UGluQ2ZnID0gMHgwMDA1MEYwNTsvL0dhcnkgMjAwNy84LzkgMHgwNTA1MDUKKworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2MiwgKDB4MzcgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2MywgKDB4MzcgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NCwgKDB4MzcgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4NiwgMCk7Ly8oMHg0NCAtIEdFVF9MTkFfR0FJTihwQWQpKSk7ICAgLy8gQWNjb3JkaW5nIHRoZSBSb3J5J3Mgc3VnZ2VzdGlvbiB0byBzb2x2ZSB0aGUgbWlkZGxlIHJhbmdlIGlzc3VlLgorCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4MiwgMHhGMik7CisKKwkJLy8gUnggSGlnaCBwb3dlciBWR0Egb2Zmc2V0IGZvciBMTkEgc2VsZWN0CisJCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuRXh0ZXJuYWxMTkFGb3JBKQorCQl7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3NSwgMHg0Nik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3NSwgMHg1MCk7CisJCX0KKworCQkvLyA1RyBiYW5kIHNlbGVjdGlvbiBQSU4sIGJpdDEgYW5kIGJpdDIgYXJlIGNvbXBsZW1lbnQKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJlZhbHVlKTsKKwkJVmFsdWUgJj0gKH4weDYpOworCQlWYWx1ZSB8PSAoMHgwMik7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBWYWx1ZSk7CisKKyAgICAgICAgLy8gVHVybiBvZmYgdW51c2VkIFBBIG9yIExOQSB3aGVuIG9ubHkgMVQgb3IgMVIKKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkKKwkJeworCQkJVHhQaW5DZmcgJj0gMHhGRkZGRkZGMzsKKwl9CisJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpCisJCXsKKwkJCVR4UGluQ2ZnICY9IDB4RkZGRkYzRkY7CisJfQorCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BJTl9DRkcsIFR4UGluQ2ZnKTsKKwl9CisKKyAgICAvLyBSNjYgc2hvdWxkIGJlIHNldCBhY2NvcmRpbmcgdG8gQ2hhbm5lbCBhbmQgdXNlIDIwTUh6IHdoZW4gc2Nhbm5pbmcKKwkvL1JUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCAoMHgyRSArIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJaWYgKGJTY2FuKQorCQlSVE1QU2V0QUdDSW5pdFZhbHVlKHBBZCwgQldfMjApOworCWVsc2UKKwkJUlRNUFNldEFHQ0luaXRWYWx1ZShwQWQsIHBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyk7CisKKwkvLworCS8vIE9uIDExQSwgV2Ugc2hvdWxkIGRlbGF5IGFuZCB3YWl0IFJGL0JCUCB0byBiZSBzdGFibGUKKwkvLyBhbmQgdGhlIGFwcHJvcHJpYXRlIHRpbWUgc2hvdWxkIGJlIDEwMDAgbWljcm8gc2Vjb25kcworCS8vIDIwMDUvMDYvMDUgLSBPbiAxMUcsIFdlIGFsc28gbmVlZCB0aGlzIGRlbGF5IHRpbWUuIE90aGVyd2lzZSBpdCdzIGRpZmZpY3VsdCB0byBwYXNzIHRoZSBXSFFMLgorCS8vCisJUlRNUHVzZWNEZWxheSgxMDAwKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlN3aXRjaENoYW5uZWwjJWQoUkY9JWQsIFB3cjA9JWx1LCBQd3IxPSVsdSwgJWRUKSB0byAsIFIxPTB4JTA4bHgsIFIyPTB4JTA4bHgsIFIzPTB4JTA4bHgsIFI0PTB4JTA4bHhcbiIsCisJCQkJCQkJICBDaGFubmVsLAorCQkJCQkJCSAgcEFkLT5SZkljVHlwZSwKKwkJCQkJCQkgIChSMyAmIDB4MDAwMDNlMDApID4+IDksCisJCQkJCQkJICAoUjQgJiAweDAwMDAwN2MwKSA+PiA2LAorCQkJCQkJCSAgcEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCwKKwkJCQkJCQkgIHBBZC0+TGF0Y2hSZlJlZ3MuUjEsCisJCQkJCQkJICBwQWQtPkxhdGNoUmZSZWdzLlIyLAorCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SMywKKwkJCQkJCQkgIHBBZC0+TGF0Y2hSZlJlZ3MuUjQpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUaGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGZvciAyNDIxIG9ubHksIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgZHVyaW5nCisJCXNpdGUgc3VydmV5LiBJdCdzIG9ubHkgcmVxdWlyZWQgYWZ0ZXIgTklDIGRlY2lkZWQgdG8gc3RheSBhdCBhIGNoYW5uZWwKKwkJZm9yIGEgbG9uZ2VyIHBlcmlvZC4KKwkJV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgaXQncyBhbHdheXMgYWZ0ZXIgQXNpY1N3aXRjaENoYW5uZWwoKS4KKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNMb2NrQ2hhbm5lbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiBDaGFubmVsKQoreworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRAlBc2ljQW50ZW5uYVNlbGVjdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUNoYW5uZWwpCit7CisJCQlpZiAocEFkLT5NbG1lLk9uZVNlY1BlcmlvZGljUm91bmQgJSAyID09IDEpCisJCQl7CisJCQkJLy8gcGF0Y2ggZm9yIEFzaWNTZXRSeEFudCBmYWlsZWQKKwkJCQlwQWQtPlJ4QW50LkV2YWx1YXRlUGVyaW9kID0gMDsKKworCQkJCS8vIGNoZWNrIGV2ZXJ5IDIgc2Vjb25kLiBJZiByY3YtYmVhY29uIGxlc3MgdGhhbiA1IGluIHRoZSBwYXN0IDIgc2Vjb25kLCB0aGVuIEF2Z1JTU0kgaXMgbm8gbG9uZ2VyIGEKKwkJCQkvLyB2YWxpZCBpbmRpY2F0aW9uIG9mIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoaXMgQVAgYW5kIGl0cyBjbGllbnRzLgorCQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJCQkJeworCQkJCQlTSE9SVAlyZWFsYXZncnNzaTE7CisKKwkJCQkJLy8gaWYgbm8gdHJhZmZpYyB0aGVuIHJlc2V0IGF2ZXJhZ2UgcnNzaSB0byB0cmlnZ2VyIGV2YWx1YXRpb24KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLk51bU9mQXZnUnNzaVNhbXBsZSA8IDUpCisJCQkJCXsKKwkJCQkJCXBBZC0+UnhBbnQuUGFpcjFMYXN0QXZnUnNzaSA9ICgtOTkpOworCQkJCQkJcEFkLT5SeEFudC5QYWlyMkxhc3RBdmdSc3NpID0gKC05OSk7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNbG1lUGVyaW9kaWNFeGVjOiBubyB0cmFmZmljL2JlYWNvbiwgcmVzZXQgUlNTSVxuIikpOworCQkJCQl9CisKKwkJCQkJcEFkLT5TdGFDZmcuTnVtT2ZBdmdSc3NpU2FtcGxlID0gMDsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCQkJcmVhbGF2Z3Jzc2kxID0gKHBBZC0+UnhBbnQuUGFpcjFBdmdSc3NpW3BBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnRdID4+IDMpOworCisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQW50LXJlYWxyc3NpMCglZCksIExhc3Ryc3NpMCglZCksIEV2YWx1YXRlU3RhYmxlQ250PSVkXG4iLCByZWFsYXZncnNzaTEsIHBBZC0+UnhBbnQuUGFpcjFMYXN0QXZnUnNzaSwgcEFkLT5SeEFudC5FdmFsdWF0ZVN0YWJsZUNudCkpOworCisJCQkJCS8vIGlmIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHJzc2kgaXMgbGFyZ2VyIG9yIGxlc3MgdGhhbiA1LCB0aGVuIGV2YWx1YXRlIHRoZSBvdGhlciBhbnRlbm5hCisJCQkJCWlmICgocEFkLT5SeEFudC5FdmFsdWF0ZVN0YWJsZUNudCA8IDIpIHx8IChyZWFsYXZncnNzaTEgPiAocEFkLT5SeEFudC5QYWlyMUxhc3RBdmdSc3NpICsgNSkpIHx8IChyZWFsYXZncnNzaTEgPCAocEFkLT5SeEFudC5QYWlyMUxhc3RBdmdSc3NpIC0gNSkpKQorCQkJCQl7CisJCQkJCQlwQWQtPlJ4QW50LlBhaXIxTGFzdEF2Z1Jzc2kgPSByZWFsYXZncnNzaTE7CisJCQkJCQlBc2ljRXZhbHVhdGVSeEFudChwQWQpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vIGlmIG5vdCBjb25uZWN0ZWQsIGFsd2F5cyBzd2l0Y2ggYW50ZW5uYSB0byB0cnkgdG8gY29ubmVjdAorCQkJCQlVQ0hBUgl0ZW1wOworCisJCQkJCXRlbXAgPSBwQWQtPlJ4QW50LlBhaXIxUHJpbWFyeVJ4QW50OworCQkJCQlwQWQtPlJ4QW50LlBhaXIxUHJpbWFyeVJ4QW50ID0gcEFkLT5SeEFudC5QYWlyMVNlY29uZGFyeVJ4QW50OworCQkJCQlwQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnQgPSB0ZW1wOworCisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVQZXJpb2RpY0V4ZWM6IG5vIGNvbm5lY3QsIHN3aXRjaCB0byBhbm90aGVyIG9uZSB0byB0cnkgY29ubmVjdGlvblxuIikpOworCisJCQkJCUFzaWNTZXRSeEFudChwQWQsIHBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQpOworCQkJCX0KKwkJCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUFudGVubmEgbWlzY2VsbGFuZW91cyBzZXR0aW5nLgorCisJQXJndW1lbnRzOgorCQlwQWQJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCUJhbmRTdGF0ZQkJCQlJbmRpY2F0ZSBjdXJyZW50IEJhbmQgU3RhdGUuCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPD0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisJCTEuKSBGcmFtZSBFbmQgdHlwZSBjb250cm9sCisJCQlvbmx5IHZhbGlkIGZvciBHIG9ubHkgKFJGXzI1MjcgJiBSRl8yNTI5KQorCQkJMDogbWVhbnMgRFBEVCwgc2V0IEJCUCBSNCBiaXQgNSB0byAxCisJCQkxOiBtZWFucyBTUERULCBzZXQgQkJQIFI0IGJpdCA1IHRvIDAKKworCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBc2ljQW50ZW5uYVNldHRpbmcoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JQUJHQkFORF9TVEFURQlCYW5kU3RhdGUpCit7Cit9CisKK1ZPSUQgQXNpY1JmVHVuaW5nRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJR2l2ZXMgQ0NLIFRYIHJhdGUgMiBtb3JlIGRCIFRYIHBvd2VyLgorCQlUaGlzIHJvdXRpbmUgd29ya3Mgb25seSBpbiBMSU5LIFVQIGluIElORlJBU1RSVUNUVVJFIG1vZGUuCisKKwkJY2FsY3VsYXRlIGRlc2lyZWQgVHggcG93ZXIgaW4gUkYgUjMuVHgwfjUsCXNob3VsZCBjb25zaWRlciAtCisJCTAuIGlmIGN1cnJlbnQgcmFkaW8gaXMgYSBub2lzeSBlbnZpcm9ubWVudCAocEFkLT5EcnNDb3VudGVycy5mTm9pc3lFbnZpcm9ubWVudCkKKwkJMS4gVHhQb3dlclBlcmNlbnRhZ2UKKwkJMi4gYXV0byBjYWxpYnJhdGlvbiBiYXNlZCBvbiBUU1NJIGZlZWRiYWNrCisJCTMuIGV4dHJhIDIgZGIgZm9yIENDSworCQk0LiAtMTAgZGIgdXBvbiB2ZXJ5LXNob3J0IGRpc3RhbmNlIChBdmdSU1NJID49IC00MGRiKSB0byBBUAorCisJTk9URTogU2luY2UgdGhpcyByb3V0aW5lIHJlcXVpcmVzIHRoZSB2YWx1ZSBvZiAocEFkLT5EcnNDb3VudGVycy5mTm9pc3lFbnZpcm9ubWVudCksCisJCWl0IHNob3VsZCBiZSBjYWxsZWQgQUZURVIgTWxtZUR5bmFtaWNUeFJhdFN3aXRjaGluZygpCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljQWRqdXN0VHhQb3dlcigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlJTlQJCQlpLCBqOworCUNIQVIJCURlbHRhUHdyID0gMDsKKwlCT09MRUFOCQliQXV0b1R4QWdjID0gRkFMU0U7CisJVUNIQVIJCVRzc2lSZWYsICpwVHNzaU1pbnVzQm91bmRhcnksICpwVHNzaVBsdXNCb3VuZGFyeSwgVHhBZ2NTdGVwOworCVVDSEFSCQlCYnBSMSA9IDAsIEJicFI0OSA9IDAsIGlkeDsKKwlQQ0hBUgkJcFR4QWdjQ29tcGVuc2F0ZTsKKwlVTE9ORwkJVHhQd3JbNV07CisJQ0hBUgkJVmFsdWU7CisKKworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9PSBCV180MCkKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA+IDE0KQorCQl7CisJCQlUeFB3clswXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFswXTsKKwkJCVR4UHdyWzFdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzFdOworCQkJVHhQd3JbMl0gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbMl07CisJCQlUeFB3clszXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFszXTsKKwkJCVR4UHdyWzRdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzRdOworCQl9CisJCWVsc2UKKwkJeworCQkJVHhQd3JbMF0gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbMF07CisJCQlUeFB3clsxXSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFsxXTsKKwkJCVR4UHdyWzJdID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kWzJdOworCQkJVHhQd3JbM10gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbM107CisJCQlUeFB3cls0XSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFs0XTsKKwkJfQorCX0KKwllbHNlCisJeworCQlpZiAocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0KQorCQl7CisJCQlUeFB3clswXSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFswXTsKKwkJCVR4UHdyWzFdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzFdOworCQkJVHhQd3JbMl0gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbMl07CisJCQlUeFB3clszXSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFszXTsKKwkJCVR4UHdyWzRdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzRdOworCQl9CisJCWVsc2UKKwkJeworCQkJVHhQd3JbMF0gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbMF07CisJCQlUeFB3clsxXSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFsxXTsKKwkJCVR4UHdyWzJdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzJdOworCQkJVHhQd3JbM10gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbM107CisJCQlUeFB3cls0XSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFs0XTsKKwkJfQorCX0KKworCS8vIFRYIHBvd2VyIGNvbXBlbnNhdGlvbiBmb3IgdGVtcGVyYXR1cmUgdmFyaWF0aW9uIGJhc2VkIG9uIFRTU0kuIHRyeSBldmVyeSA0IHNlY29uZAorCWlmIChwQWQtPk1sbWUuT25lU2VjUGVyaW9kaWNSb3VuZCAlIDQgPT0gMCkKKwl7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsIDw9IDE0KQorCQl7CisJCQkvKiBiZyBjaGFubmVsICovCisJCQliQXV0b1R4QWdjICAgICAgICAgPSBwQWQtPmJBdXRvVHhBZ2NHOworCQkJVHNzaVJlZiAgICAgICAgICAgID0gcEFkLT5Uc3NpUmVmRzsKKwkJCXBUc3NpTWludXNCb3VuZGFyeSA9ICZwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1swXTsKKwkJCXBUc3NpUGx1c0JvdW5kYXJ5ICA9ICZwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzBdOworCQkJVHhBZ2NTdGVwICAgICAgICAgID0gcEFkLT5UeEFnY1N0ZXBHOworCQkJcFR4QWdjQ29tcGVuc2F0ZSAgID0gJnBBZC0+VHhBZ2NDb21wZW5zYXRlRzsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGEgY2hhbm5lbCAqLworCQkJYkF1dG9UeEFnYyAgICAgICAgID0gcEFkLT5iQXV0b1R4QWdjQTsKKwkJCVRzc2lSZWYgICAgICAgICAgICA9IHBBZC0+VHNzaVJlZkE7CisJCQlwVHNzaU1pbnVzQm91bmRhcnkgPSAmcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbMF07CisJCQlwVHNzaVBsdXNCb3VuZGFyeSAgPSAmcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5QVswXTsKKwkJCVR4QWdjU3RlcCAgICAgICAgICA9IHBBZC0+VHhBZ2NTdGVwQTsKKwkJCXBUeEFnY0NvbXBlbnNhdGUgICA9ICZwQWQtPlR4QWdjQ29tcGVuc2F0ZUE7CisJCX0KKworCQlpZiAoYkF1dG9UeEFnYykKKwkJeworCQkJLyogQmJwUjEgaXMgdW5zaWduZWQgY2hhciAqLworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0OSwgJkJicFI0OSk7CisKKwkJCS8qIChwKSBUc3NpUGx1c0JvdW5kYXJ5R1swXSA9IDAgPSAobSkgVHNzaU1pbnVzQm91bmRhcnlHWzBdICovCisJCQkvKiBjb21wZW5zYXRlOiArNCAgICAgKzMgICArMiAgICsxICAgIDAgICAtMSAgIC0yICAgLTMgICAtNCAqIHN0ZXBzICovCisJCQkvKiBzdGVwIHZhbHVlIGlzIGRlZmluZWQgaW4gcEFkLT5UeEFnY1N0ZXBHIGZvciB0eCBwb3dlciB2YWx1ZSAqLworCisJCQkvKiBbNF0rMStbNF0gICBwNCAgICAgcDMgICBwMiAgIHAxICAgbzEgICBtMSAgIG0yICAgbTMgICBtNCAqLworCQkJLyogZXg6ICAgICAgICAgMHgwMCAweDE1IDB4MjUgMHg0NSAweDg4IDB4QTAgMHhCNSAweEQwIDB4RjAKKwkJCSAgIGFib3ZlIHZhbHVlIGFyZSBleGFtaW5lZCBpbiBtYXNzIGZhY3RvcnkgcHJvZHVjdGlvbiAqLworCQkJLyogICAgICAgICAgICAgWzRdICAgIFszXSAgWzJdICBbMV0gIFswXSAgWzFdICBbMl0gIFszXSAgWzRdICovCisKKwkJCS8qIHBsdXMgKCspIGlzIDB4MDAgfiAweDQ1LCBtaW51cyAoLSkgaXMgMHhhMCB+IDB4ZjAgKi8KKwkJCS8qIGlmIHZhbHVlIGlzIGJldHdlZW4gcDEgfiBvMSBvciBvMSB+IHMxLCBubyBuZWVkIHRvIGFkanVzdCB0eCBwb3dlciAqLworCQkJLyogaWYgdmFsdWUgaXMgMHhhNSwgdHggcG93ZXIgd2lsbCBiZSAtPSBUeEFnY1N0ZXAqKDItMSkgKi8KKworCQkJaWYgKEJicFI0OSA+IHBUc3NpTWludXNCb3VuZGFyeVsxXSkKKwkJCXsKKwkJCQkvLyBSZWFkaW5nIGlzIGxhcmdlciB0aGFuIHRoZSByZWZlcmVuY2UgdmFsdWUKKwkJCQkvLyBjaGVjayBmb3IgaG93IGxhcmdlIHdlIG5lZWQgdG8gZGVjcmVhc2UgdGhlIFR4IHBvd2VyCisJCQkJZm9yIChpZHggPSAxOyBpZHggPCA1OyBpZHgrKykKKwkJCQl7CisJCQkJCWlmIChCYnBSNDkgPD0gcFRzc2lNaW51c0JvdW5kYXJ5W2lkeF0pICAvLyBGb3VuZCB0aGUgcmFuZ2UKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvLyBUaGUgaW5kZXggaXMgdGhlIHN0ZXAgd2Ugc2hvdWxkIGRlY3JlYXNlLCBpZHggPSAwIG1lYW5zIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tcGVuc2F0ZQorLy8JCQkJaWYgKFIzID4gKFVMT05HKSAoVHhBZ2NTdGVwICogKGlkeC0xKSkpCisJCQkJCSpwVHhBZ2NDb21wZW5zYXRlID0gLShUeEFnY1N0ZXAgKiAoaWR4LTEpKTsKKy8vCQkJCWVsc2UKKy8vCQkJCQkqcFR4QWdjQ29tcGVuc2F0ZSA9IC0oKFVDSEFSKVIzKTsKKworCQkJCURlbHRhUHdyICs9ICgqcFR4QWdjQ29tcGVuc2F0ZSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0gVHggUG93ZXIsIEJCUCBSMT0leCwgVHNzaVJlZj0leCwgVHhBZ2NTdGVwPSV4LCBzdGVwID0gLSVkXG4iLAorCQkJCQlCYnBSNDksIFRzc2lSZWYsIFR4QWdjU3RlcCwgaWR4LTEpKTsKKwkJCX0KKwkJCWVsc2UgaWYgKEJicFI0OSA8IHBUc3NpUGx1c0JvdW5kYXJ5WzFdKQorCQkJeworCQkJCS8vIFJlYWRpbmcgaXMgc21hbGxlciB0aGFuIHRoZSByZWZlcmVuY2UgdmFsdWUKKwkJCQkvLyBjaGVjayBmb3IgaG93IGxhcmdlIHdlIG5lZWQgdG8gaW5jcmVhc2UgdGhlIFR4IHBvd2VyCisJCQkJZm9yIChpZHggPSAxOyBpZHggPCA1OyBpZHgrKykKKwkJCQl7CisJCQkJCWlmIChCYnBSNDkgPj0gcFRzc2lQbHVzQm91bmRhcnlbaWR4XSkgICAvLyBGb3VuZCB0aGUgcmFuZ2UKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvLyBUaGUgaW5kZXggaXMgdGhlIHN0ZXAgd2Ugc2hvdWxkIGluY3JlYXNlLCBpZHggPSAwIG1lYW5zIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tcGVuc2F0ZQorCQkJCSpwVHhBZ2NDb21wZW5zYXRlID0gVHhBZ2NTdGVwICogKGlkeC0xKTsKKwkJCQlEZWx0YVB3ciArPSAoKnBUeEFnY0NvbXBlbnNhdGUpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIisrIFR4IFBvd2VyLCBCQlAgUjE9JXgsIFRzc2lSZWY9JXgsIFR4QWdjU3RlcD0leCwgc3RlcCA9ICslZFxuIiwKKwkJCQkJQmJwUjQ5LCBUc3NpUmVmLCBUeEFnY1N0ZXAsIGlkeC0xKSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJKnBUeEFnY0NvbXBlbnNhdGUgPSAwOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiAgIFR4IFBvd2VyLCBCQlAgUjQ5PSV4LCBUc3NpUmVmPSV4LCBUeEFnY1N0ZXA9JXgsIHN0ZXAgPSArJWRcbiIsCisJCQkJCUJicFI0OSwgVHNzaVJlZiwgVHhBZ2NTdGVwLCAwKSk7CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPD0gMTQpCisJCXsKKwkJCWJBdXRvVHhBZ2MgICAgICAgICA9IHBBZC0+YkF1dG9UeEFnY0c7CisJCQlwVHhBZ2NDb21wZW5zYXRlICAgPSAmcEFkLT5UeEFnY0NvbXBlbnNhdGVHOworCQl9CisJCWVsc2UKKwkJeworCQkJYkF1dG9UeEFnYyAgICAgICAgID0gcEFkLT5iQXV0b1R4QWdjQTsKKwkJCXBUeEFnY0NvbXBlbnNhdGUgICA9ICZwQWQtPlR4QWdjQ29tcGVuc2F0ZUE7CisJCX0KKworCQlpZiAoYkF1dG9UeEFnYykKKwkJCURlbHRhUHdyICs9ICgqcFR4QWdjQ29tcGVuc2F0ZSk7CisJfQorCisJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCAmQmJwUjEpOworCUJicFIxICY9IDB4RkM7CisKKyNpZmRlZiBTSU5HTEVfU0tVCisJLy8gSGFuZGxlIHJlZ3VsYXRvcnkgbWF4IHR4IHBvd2VyIGNvbnN0cmFpbgorCWRvCisJeworCQlVQ0hBUiAgICBUeFB3ckluRUVQUk9NID0gMHhGRiwgQ291bnRyeVR4UHdyID0gMHhGRiwgY3JpdGVyaW9uOworCQlVQ0hBUiAgICBBZGp1c3RNYXhUeFB3cls0MF07CisKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkgLy8gNUcgYmFuZAorCQkJVHhQd3JJbkVFUFJPTSA9ICgocEFkLT5Db21tb25DZmcuRGVmaW5lTWF4VHhQd3IgJiAweEZGMDApID4+IDgpOworCQllbHNlIC8vIDIuNEcgYmFuZAorCQkJVHhQd3JJbkVFUFJPTSA9IChwQWQtPkNvbW1vbkNmZy5EZWZpbmVNYXhUeFB3ciAmIDB4MDBGRik7CisJCUNvdW50cnlUeFB3ciA9IEdldEN1bnRyeU1heFR4UHdyKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisKKwkJLy8gZXJyb3IgaGFuZGxpbmcsIHJhbmdlIGNoZWNrCisJCWlmICgoVHhQd3JJbkVFUFJPTSA+IDB4NTApIHx8IChDb3VudHJ5VHhQd3IgPiAweDUwKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJBc2ljQWRqdXN0VHhQb3dlciAtIEludmFsaWQgbWF4IHR4IHBvd2VyICg9MHglMDJ4KSwgQ291bnRyeVR4UHdyPSVkXG4iLCBUeFB3ckluRUVQUk9NLCBDb3VudHJ5VHhQd3IpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY3JpdGVyaW9uID0gKigoUFVDSEFSKVR4UHdyICsgMikgJiAweEY7ICAgICAgICAvLyBGQUUgdXNlIE9GRE0gNk0gYXMgY3JpdGVyaW9uCisKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiQXNpY0FkanVzdFR4UG93ZXIgKGNyaXRlcmlvbj0lZCwgVHhQd3JJbkVFUFJPTT0lZCwgQ291bnRyeVR4UHdyPSVkKVxuIiwgY3JpdGVyaW9uLCBUeFB3ckluRUVQUk9NLCBDb3VudHJ5VHhQd3IpKTsKKworCQkvLyBBZGp1c3QgbWF4IHR4IHBvd2VyIGFjY29yZGluZyB0byB0aGUgcmVsYXRpb25zaGlwIG9mIHR4IHBvd2VyIGluIEUyUFJPTQorCQlmb3IgKGk9MDsgaTw1OyBpKyspCisJCXsKKwkJCS8vIENDSyB3aWxsIGhhdmUgNGRCbSBsYXJnZXIgdGhhbiBPRkRNCisJCQkvLyBUaGVyZWZvcmUsIHdlIHNob3VsZCBzZXBhcmF0ZSB0byBwYXJzZSB0aGUgdHggcG93ZXIgZmllbGQKKwkJCWlmIChpID09IDApCisJCQl7CisJCQkJZm9yIChqPTA7IGo8ODsgaisrKQorCQkJCXsKKwkJCQkJVmFsdWUgPSAoQ0hBUikoKFR4UHdyW2ldID4+IGoqNCkgJiAweDBGKTsKKworCQkJCQlpZiAoaiA8IDQpCisJCQkJCXsKKwkJCQkJCS8vIENDSyB3aWxsIGhhdmUgNGRCbSBsYXJnZXIgdGhhbiBPRkRNCisJCQkJCQlBZGp1c3RNYXhUeFB3cltpKjgral0gPSBUeFB3ckluRUVQUk9NICsgKFZhbHVlIC0gY3JpdGVyaW9uKSArIDQ7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlBZGp1c3RNYXhUeFB3cltpKjgral0gPSBUeFB3ckluRUVQUk9NICsgKFZhbHVlIC0gY3JpdGVyaW9uKTsKKwkJCQkJfQorCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCJBc2ljQWRqdXN0VHhQb3dlciAoaS9qPSVkLyVkLCBWYWx1ZT0lZCwgJWQpXG4iLCBpLCBqLCBWYWx1ZSwgQWRqdXN0TWF4VHhQd3JbaSo4K2pdKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWZvciAoaj0wOyBqPDg7IGorKykKKwkJCQl7CisJCQkJCVZhbHVlID0gKENIQVIpKChUeFB3cltpXSA+PiBqKjQpICYgMHgwRik7CisKKwkJCQkJQWRqdXN0TWF4VHhQd3JbaSo4K2pdID0gVHhQd3JJbkVFUFJPTSArIChWYWx1ZSAtIGNyaXRlcmlvbik7CisJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIkFzaWNBZGp1c3RUeFBvd2VyIChpL2o9JWQvJWQsIFZhbHVlPSVkLCAlZClcbiIsIGksIGosIFZhbHVlLCBBZGp1c3RNYXhUeFB3cltpKjgral0pKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvLyBBZGp1c3QgdHggcG93ZXIgYWNjb3JkaW5nIHRvIHRoZSByZWxhdGlvbnNoaXAKKwkJZm9yIChpPTA7IGk8NTsgaSsrKQorCQl7CisJCQlpZiAoVHhQd3JbaV0gIT0gMHhmZmZmZmZmZikKKwkJCXsKKwkJCQlmb3IgKGo9MDsgajw4OyBqKyspCisJCQkJeworCQkJCQlWYWx1ZSA9IChDSEFSKSgoVHhQd3JbaV0gPj4gaio0KSAmIDB4MEYpOworCisJCQkJCS8vIFRoZSBzeXN0ZW0gdHggcG93ZXIgaXMgbGFyZ2VyIHRoYW4gdGhlIHJlZ3VsYXRvcnksIHRoZSBwb3dlciBzaG91bGQgYmUgcmVzdHJhaW4KKwkJCQkJaWYgKEFkanVzdE1heFR4UHdyW2kqOCtqXSA+IENvdW50cnlUeFB3cikKKwkJCQkJeworCQkJCQkJLy8gZGVjcmVhc2UgdG8gemVybyBhbmQgZG9uJ3QgbmVlZCB0byB0YWtlIGNhcmUgQkJQUjEKKwkJCQkJCWlmICgoVmFsdWUgLSAoQWRqdXN0TWF4VHhQd3JbaSo4K2pdIC0gQ291bnRyeVR4UHdyKSkgPiAwKQorCQkJCQkJCVZhbHVlIC09IChBZGp1c3RNYXhUeFB3cltpKjgral0gLSBDb3VudHJ5VHhQd3IpOworCQkJCQkJZWxzZQorCQkJCQkJCVZhbHVlID0gMDsKKworCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiQXNpY0FkanVzdFR4UG93ZXIgKGkvaj0lZC8lZCwgVmFsdWU9JWQsICVkKVxuIiwgaSwgaiwgVmFsdWUsIEFkanVzdE1heFR4UHdyW2kqOCtqXSkpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIkFzaWNBZGp1c3RUeFBvd2VyIChpL2o9JWQvJWQsIFZhbHVlPSVkLCAlZCwgbm8gY2hhbmdlKVxuIiwgaSwgaiwgVmFsdWUsIEFkanVzdE1heFR4UHdyW2kqOCtqXSkpOworCisJCQkJCQlUeFB3cltpXSA9IChUeFB3cltpXSAmIH4oMHgwMDAwMDAwRiA8PCBqKjQpKSB8IChWYWx1ZSA8PCBqKjQpOworCQkJCX0KKwkJCX0KKwkJfQorCX0gd2hpbGUgKEZBTFNFKTsKKyNlbmRpZiAvLyBTSU5HTEVfU0tVIC8vCisKKwkvKiBjYWxjdWxhdGUgZGVsdGEgcG93ZXIgYmFzZWQgb24gdGhlIHBlcmNlbnRhZ2Ugc3BlY2lmaWVkIGZyb20gVUkgKi8KKwkvLyBFMlBST00gc2V0dGluZyBpcyBjYWxpYnJhdGVkIGZvciBtYXhpbXVtIFRYIHBvd2VyIChpLmUuIDEwMCUpCisJLy8gV2UgbG93ZXIgVFggcG93ZXIgaGVyZSBhY2NvcmRpbmcgdG8gdGhlIHBlcmNlbnRhZ2Ugc3BlY2lmaWVkIGZyb20gVUkKKwlpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPT0gMHhmZmZmZmZmZikgICAgICAgLy8gQVVUTyBUWCBQT1dFUiBjb250cm9sCisJCTsKKwllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDkwKSAgLy8gOTEgfiAxMDAlICYgQVVUTywgdHJlYXQgYXMgMTAwJSBpbiB0ZXJtcyBvZiBtVworCQk7CisJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiA2MCkgIC8vIDYxIH4gOTAlLCB0cmVhdCBhcyA3NSUgaW4gdGVybXMgb2YgbVcJCS8vIERlbHRhUHdyIC09IDE7CisJeworCQlEZWx0YVB3ciAtPSAxOworCX0KKwllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDMwKSAgLy8gMzEgfiA2MCUsIHRyZWF0IGFzIDUwJSBpbiB0ZXJtcyBvZiBtVwkJLy8gRGVsdGFQd3IgLT0gMzsKKwl7CisJCURlbHRhUHdyIC09IDM7CisJfQorCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gMTUpICAvLyAxNiB+IDMwJSwgdHJlYXQgYXMgMjUlIGluIHRlcm1zIG9mIG1XCQkvLyBEZWx0YVB3ciAtPSA2OworCXsKKwkJQmJwUjEgfD0gMHgwMTsKKwl9CisJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiA5KSAgIC8vIDEwIH4gMTUlLCB0cmVhdCBhcyAxMi41JSBpbiB0ZXJtcyBvZiBtVwkJLy8gRGVsdGFQd3IgLT0gOTsKKwl7CisJCUJicFIxIHw9IDB4MDE7CisJCURlbHRhUHdyIC09IDM7CisJfQorCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB+IDkgJSwgdHJlYXQgYXMgTUlOKH4zJSkgaW4gdGVybXMgb2YgbVcJCS8vIERlbHRhUHdyIC09IDEyOworCXsKKwkJQmJwUjEgfD0gMHgwMjsKKwl9CisKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBCYnBSMSk7CisKKwkvKiByZXNldCBkaWZmZXJlbnQgbmV3IHR4IHBvd2VyIGZvciBkaWZmZXJlbnQgVFggcmF0ZSAqLworCWZvcihpPTA7IGk8NTsgaSsrKQorCXsKKwkJaWYgKFR4UHdyW2ldICE9IDB4ZmZmZmZmZmYpCisJCXsKKwkJCWZvciAoaj0wOyBqPDg7IGorKykKKwkJCXsKKwkJCQlWYWx1ZSA9IChDSEFSKSgoVHhQd3JbaV0gPj4gaio0KSAmIDB4MEYpOyAvKiAwIH4gMTUgKi8KKworCQkJCWlmICgoVmFsdWUgKyBEZWx0YVB3cikgPCAwKQorCQkJCXsKKwkJCQkJVmFsdWUgPSAwOyAvKiBtaW4gKi8KKwkJCQl9CisJCQkJZWxzZSBpZiAoKFZhbHVlICsgRGVsdGFQd3IpID4gMHhGKQorCQkJCXsKKwkJCQkJVmFsdWUgPSAweEY7IC8qIG1heCAqLworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlWYWx1ZSArPSBEZWx0YVB3cjsgLyogdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uICovCisJCQkJfQorCisJCQkJLyogZmlsbCBuZXcgdmFsdWUgdG8gQ1NSIG9mZnNldCAqLworCQkJCVR4UHdyW2ldID0gKFR4UHdyW2ldICYgfigweDAwMDAwMDBGIDw8IGoqNCkpIHwgKFZhbHVlIDw8IGoqNCk7CisJCQl9CisKKwkJCS8qIHdyaXRlIHR4IHBvd2VyIHZhbHVlIHRvIENTUiAqLworCQkJLyogVFhfUFdSX0NGR18wICg4IHR4IHJhdGUpIGZvcglUWCBwb3dlciBmb3IgT0ZETSAxMk0vMThNCisJCQkJCQkJCQkJCVRYIHBvd2VyIGZvciBPRkRNIDZNLzlNCisJCQkJCQkJCQkJCVRYIHBvd2VyIGZvciBDQ0s1LjVNLzExTQorCQkJCQkJCQkJCQlUWCBwb3dlciBmb3IgQ0NLMU0vMk0gKi8KKwkJCS8qIFRYX1BXUl9DRkdfMSB+IFRYX1BXUl9DRkdfNCAqLworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUFdSX0NGR18wICsgaSo0LCBUeFB3cltpXSk7CisJCX0KKwl9CisKKworfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXB1dCBQSFkgdG8gc2xlZXAgaGVyZSwgYW5kIHNldCBuZXh0IHdha2V1cCB0aW1lci4gUEhZIGRvZXNuJ3Qgbm90IHdha2V1cAorCQlhdXRvbWF0aWNhbGx5LiBJbnN0ZWFkLCBNQ1Ugd2lsbCBpc3N1ZSBhIFR3YWtlVXBJbnRlcnJ1cHQgdG8gaG9zdCBhZnRlcgorCQl0aGUgd2FrZXVwIHRpbWVyIHRpbWVvdXQuIERyaXZlciBoYXMgdG8gaXNzdWUgYSBzZXBhcmF0ZSBjb21tYW5kIHRvIHdha2UKKwkJUEhZIHVwLgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVCBUYnR0TnVtVG9OZXh0V2FrZVVwKQoreworICAgIFJUMjhYWF9TVEFfU0xFRVBfVEhFTl9BVVRPX1dBS0VVUChwQWQsIFRidHROdW1Ub05leHRXYWtlVXApOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUFzaWNGb3JjZVdha2V1cCgpIGlzIHVzZWQgd2hlbmV2ZXIgbWFudWFsIHdha2V1cCBpcyByZXF1aXJlZAorCQlBc2ljRm9yY2VTbGVlcCgpIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBub3QgaW4gSU5GUkEgQlNTLiBXaGVuCisJCWluIElORlJBIEJTUywgd2Ugc2hvdWxkIHVzZSBBc2ljU2xlZXBUaGVuQXV0b1dha2V1cCgpIGluc3RlYWQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljRm9yY2VTbGVlcCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUFzaWNGb3JjZVdha2V1cCgpIGlzIHVzZWQgd2hlbmV2ZXIgVHdha2V1cCB0aW1lciAoc2V0IHZpYSBBc2ljU2xlZXBUaGVuQXV0b1dha2V1cCkKKwkJZXhwaXJlZC4KKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljRm9yY2VXYWtldXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gQk9PTEVBTiAgICBiRnJvbVR4KQoreworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBBc2ljRm9yY2VXYWtldXAgXG4iKSk7CisgICAgUlQyOFhYX1NUQV9GT1JDRV9XQUtFVVAocEFkLCBiRnJvbVR4KTsKK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJU2V0IE15IEJTU0lECisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNpY1NldEJzc2lkKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwQnNzaWQpCit7CisJVUxPTkcJCSAgQWRkcjQ7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT09PT09PT09PT0+IEFzaWNTZXRCc3NpZCAleDoleDoleDoleDoleDoleFxuIiwKKwkJcEJzc2lkWzBdLHBCc3NpZFsxXSxwQnNzaWRbMl0scEJzc2lkWzNdLCBwQnNzaWRbNF0scEJzc2lkWzVdKSk7CisKKwlBZGRyNCA9IChVTE9ORykocEJzc2lkWzBdKQkJIHwKKwkJCShVTE9ORykocEJzc2lkWzFdIDw8IDgpICB8CisJCQkoVUxPTkcpKHBCc3NpZFsyXSA8PCAxNikgfAorCQkJKFVMT05HKShwQnNzaWRbM10gPDwgMjQpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19CU1NJRF9EVzAsIEFkZHI0KTsKKworCUFkZHI0ID0gMDsKKwkvLyBhbHdheXMgb25lIEJTU0lEIGluIFNUQSBtb2RlCisJQWRkcjQgPSAoVUxPTkcpKHBCc3NpZFs0XSkgfCAoVUxPTkcpKHBCc3NpZFs1XSA8PCA4KTsKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19CU1NJRF9EVzEsIEFkZHI0KTsKK30KKworVk9JRCBBc2ljU2V0TWNhc3RXQygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W01DQVNUX1dDSURdOworCVVTSE9SVAkJb2Zmc2V0OworCisJcEVudHJ5LT5Tc3QgICAgICAgID0gU1NUX0FTU09DOworCXBFbnRyeS0+QWlkICAgICAgICA9IE1DQVNUX1dDSUQ7CS8vIFNvZnRhcCBzdXBwb3J0cyAxIEJTU0lEIGFuZCB1c2UgV0NJRD0wIGFzIG11bHRpY2FzdCBXY2lkIGluZGV4CisJcEVudHJ5LT5Qc01vZGUgICAgID0gUFdSX0FDVElWRTsKKwlwRW50cnktPkN1cnJUeFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZTsKKwlvZmZzZXQgPSBNQUNfV0NJRF9CQVNFICsgQlNTME1jYXN0X1dDSUQgKiBIV19XQ0lEX0VOVFJZX1NJWkU7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljRGVsV2NpZFRhYigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUglXY2lkKQoreworCVVMT05HCQkgIEFkZHIwID0gMHgwLCBBZGRyMSA9IDB4MDsKKwlVTE9ORyAJCW9mZnNldDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFzaWNEZWxXY2lkVGFiPT0+V2NpZCA9IDB4JXhcbiIsV2NpZCkpOworCW9mZnNldCA9IE1BQ19XQ0lEX0JBU0UgKyBXY2lkICogSFdfV0NJRF9FTlRSWV9TSVpFOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIG9mZnNldCwgQWRkcjApOworCW9mZnNldCArPSA0OworCVJUTVBfSU9fV1JJVEUzMihwQWQsIG9mZnNldCwgQWRkcjEpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNpY0VuYWJsZVJERygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlUWF9MSU5LX0NGR19TVFJVQwlUeExpbmtDZmc7CisJVUlOVDMyCQkJCURhdGEgPSAwOworCisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9MSU5LX0NGRywgJlR4TGlua0NmZy53b3JkKTsKKwlUeExpbmtDZmcuZmllbGQuVHhSREdFbiA9IDE7CisJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfTElOS19DRkcsIFR4TGlua0NmZy53b3JkKTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgRURDQV9BQzBfQ0ZHLCAmRGF0YSk7CisJRGF0YSAgJj0gMHhGRkZGRkYwMDsKKwlEYXRhICB8PSAweDgwOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMwX0NGRywgRGF0YSk7CisKKwkvL09QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FHR1JFR0FUSU9OX0lOVVNFRCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljRGlzYWJsZVJERygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlUWF9MSU5LX0NGR19TVFJVQwlUeExpbmtDZmc7CisJVUlOVDMyCQkJCURhdGEgPSAwOworCisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0xJTktfQ0ZHLCAmVHhMaW5rQ2ZnLndvcmQpOworCVR4TGlua0NmZy5maWVsZC5UeFJER0VuID0gMDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9MSU5LX0NGRywgVHhMaW5rQ2ZnLndvcmQpOworCisJUlRNUF9JT19SRUFEMzIocEFkLCBFRENBX0FDMF9DRkcsICZEYXRhKTsKKworCURhdGEgICY9IDB4RkZGRkZGMDA7CisJLy9EYXRhICB8PSAweDIwOworI2lmbmRlZiBXSUZJX1RFU1QKKwkvL2lmICggcEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QgKQorCS8vCURhdGEgfD0gMHg2MDsgLy8gZm9yIHBlcmZvcm1hbmNlIGlzc3VlIG5vdCBzZXQgdGhlIFRYT1AgdG8gMAorI2VuZGlmCisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9EWU5BTUlDX0JFX1RYT1BfQUNUSVZFKQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkmJiAocEFkLT5NYWNUYWIuZkFueVN0YXRpb25NSU1PUFNEeW5hbWljID09IEZBTFNFKQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCSkKKwl7CisJCS8vIEZvciBDV0MgdGVzdCwgY2hhbmdlIHR4b3AgZnJvbSAweDMwIHRvIDB4MjAgaW4gVHhCdXJzdCBtb2RlCisJCWlmIChwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCkKKwkJCURhdGEgfD0gMHgyMDsKKwl9CisJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzBfQ0ZHLCBEYXRhKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNpY0Rpc2FibGVTeW5jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUJDTl9USU1FX0NGR19TVFJVQyBjc3I7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+RGlzYWJsZSBUU0Ygc3luY2hyb25pemF0aW9uXG4iKSk7CisKKwkvLyAyMDAzLTEyLTIwIGRpc2FibGUgVFNGIGFuZCBUQlRUIHdoaWxlIE5JQyBpbiBwb3dlci1zYXZpbmcgaGF2ZSBzaWRlIGVmZmVjdAorCS8vCQkJICB0aGF0IE5JQyB3aWxsIG5ldmVyIHdha2VzIHVwIGJlY2F1c2UgVFNGIHN0b3BzIGFuZCBubyBtb3JlCisJLy8JCQkgIFRCVFQgaW50ZXJydXB0cworCXBBZC0+VGJ0dFRpY2tDb3VudCA9IDA7CisJUlRNUF9JT19SRUFEMzIocEFkLCBCQ05fVElNRV9DRkcsICZjc3Iud29yZCk7CisJY3NyLmZpZWxkLmJCZWFjb25HZW4gPSAwOworCWNzci5maWVsZC5iVEJUVEVuYWJsZSA9IDA7CisJY3NyLmZpZWxkLlRzZlN5bmNNb2RlID0gMDsKKwljc3IuZmllbGQuYlRzZlRpY2tpbmcgPSAwOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEJDTl9USU1FX0NGRywgY3NyLndvcmQpOworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljRW5hYmxlQnNzU3luYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlCQ05fVElNRV9DRkdfU1RSVUMgY3NyOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPkFzaWNFbmFibGVCc3NTeW5jKElORlJBIG1vZGUpXG4iKSk7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEJDTl9USU1FX0NGRywgJmNzci53b3JkKTsKKy8vCVJUTVBfSU9fV1JJVEUzMihwQWQsIEJDTl9USU1FX0NGRywgMHgwMDAwMDAwMCk7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWNzci5maWVsZC5CZWFjb25JbnRlcnZhbCA9IHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA8PCA0OyAvLyBBU0lDIHJlZ2lzdGVyIGluIHVuaXRzIG9mIDEvMTYgVFUKKwkJY3NyLmZpZWxkLmJUc2ZUaWNraW5nID0gMTsKKwkJY3NyLmZpZWxkLlRzZlN5bmNNb2RlID0gMTsgLy8gc3luYyBUU0YgaW4gSU5GUkFTVFJVQ1RVUkUgbW9kZQorCQljc3IuZmllbGQuYkJlYWNvbkdlbiAgPSAwOyAvLyBkbyBOT1QgZ2VuZXJhdGUgQkVBQ09OCisJCWNzci5maWVsZC5iVEJUVEVuYWJsZSA9IDE7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEJDTl9USU1FX0NGRywgY3NyLndvcmQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJTm90ZToKKwkJQkVBQ09OIGZyYW1lIGluIHNoYXJlZCBtZW1vcnkgc2hvdWxkIGJlIGJ1aWx0IG9rIGJlZm9yZSB0aGlzIHJvdXRpbmUKKwkJY2FuIGJlIGNhbGxlZC4gT3RoZXJ3aXNlLCBhIGdhcmJhZ2UgZnJhbWUgbWF5YmUgdHJhbnNtaXR0ZWQgb3V0IGV2ZXJ5CisJCUJlYWNvbiBwZXJpb2QuCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNpY0VuYWJsZUlic3NTeW5jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUJDTl9USU1FX0NGR19TVFJVQyBjc3I5OworCVBVQ0hBUgkJCXB0cjsKKwlVSU5UIGk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0+QXNpY0VuYWJsZUlic3NTeW5jKEFESE9DIG1vZGUuIE1QRFV0b3RhbEJ5dGVDb3VudCA9ICVkKVxuIiwgcEFkLT5CZWFjb25UeFdJLk1QRFV0b3RhbEJ5dGVDb3VudCkpOworCisJUlRNUF9JT19SRUFEMzIocEFkLCBCQ05fVElNRV9DRkcsICZjc3I5LndvcmQpOworCWNzcjkuZmllbGQuYkJlYWNvbkdlbiA9IDA7CisJY3NyOS5maWVsZC5iVEJUVEVuYWJsZSA9IDA7CisJY3NyOS5maWVsZC5iVHNmVGlja2luZyA9IDA7CisJUlRNUF9JT19XUklURTMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCBjc3I5LndvcmQpOworCisKKyNpZmRlZiBSVDI4NzAKKwkvLyBtb3ZlIEJFQUNPTiBUWEQgYW5kIGZyYW1lIGNvbnRlbnQgdG8gb24tY2hpcCBtZW1vcnkKKwlwdHIgPSAoUFVDSEFSKSZwQWQtPkJlYWNvblR4V0k7CisJZm9yIChpPTA7IGk8VFhXSV9TSVpFOyBpKz0yKSAgLy8gMTYtYnl0ZSBUWFdJIGZpZWxkCisJeworCQkvL1VJTlQzMiBsb25ncHRyID0gICpwdHIgKyAoKihwdHIrMSk8PDgpICsgKCoocHRyKzIpPDwxNikgKyAoKihwdHIrMyk8PDI0KTsKKwkJLy9SVE1QX0lPX1dSSVRFMzIocEFkLCBIV19CRUFDT05fQkFTRTAgKyBpLCBsb25ncHRyKTsKKwkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgSFdfQkVBQ09OX0JBU0UwICsgaSwgcHRyLCAyKTsKKwkJcHRyICs9IDI7CisJfQorCisJLy8gc3RhcnQgcmlnaHQgYWZ0ZXIgdGhlIDE2LWJ5dGUgVFhXSSBmaWVsZAorCXB0ciA9IHBBZC0+QmVhY29uQnVmOworCWZvciAoaT0wOyBpPCBwQWQtPkJlYWNvblR4V0kuTVBEVXRvdGFsQnl0ZUNvdW50OyBpKz0yKQorCXsKKwkJLy9VSU5UMzIgbG9uZ3B0ciA9ICAqcHRyICsgKCoocHRyKzEpPDw4KSArICgqKHB0cisyKTw8MTYpICsgKCoocHRyKzMpPDwyNCk7CisJCS8vUlRNUF9JT19XUklURTMyKHBBZCwgSFdfQkVBQ09OX0JBU0UwICsgVFhXSV9TSVpFICsgaSwgbG9uZ3B0cik7CisJCVJUVVNCTXVsdGlXcml0ZShwQWQsIEhXX0JFQUNPTl9CQVNFMCArIFRYV0lfU0laRSArIGksIHB0ciwgMik7CisJCXB0ciArPTI7CisJfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisJLy8KKwkvLyBGb3IgV2ktRmkgZmFpbHkgZ2VuZXJhdGVkIGJlYWNvbnMgYmV0d2VlbiBwYXJ0aWNpcGF0aW5nIHN0YXRpb25zLgorCS8vIFNldCBUQlRUIHBoYXNlIGFkYXB0aXZlIGFkanVzdG1lbnQgc3RlcCB0byA4dXMgKGRlZmF1bHQgMTZ1cykKKwkvLyBkb24ndCBjaGFuZ2Ugc2V0dGluZ3MgMjAwNi01LSBieSBKZXJyeQorCS8vUlRNUF9JT19XUklURTMyKHBBZCwgVEJUVF9TWU5DX0NGRywgMHgwMDAwMTAxMCk7CisKKwkvLyBzdGFydCBzZW5kaW5nIEJFQUNPTgorCWNzcjkuZmllbGQuQmVhY29uSW50ZXJ2YWwgPSBwQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QgPDwgNDsgLy8gQVNJQyByZWdpc3RlciBpbiB1bml0cyBvZiAxLzE2IFRVCisJY3NyOS5maWVsZC5iVHNmVGlja2luZyA9IDE7CisJY3NyOS5maWVsZC5Uc2ZTeW5jTW9kZSA9IDI7IC8vIHN5bmMgVFNGIGluIElCU1MgbW9kZQorCWNzcjkuZmllbGQuYlRCVFRFbmFibGUgPSAxOworCWNzcjkuZmllbGQuYkJlYWNvbkdlbiA9IDE7CisJUlRNUF9JT19XUklURTMyKHBBZCwgQkNOX1RJTUVfQ0ZHLCBjc3I5LndvcmQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljU2V0RWRjYVBhcm0oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUEVEQ0FfUEFSTQkgcEVkY2FQYXJtKQoreworCUVEQ0FfQUNfQ0ZHX1NUUlVDICAgQWMwQ2ZnLCBBYzFDZmcsIEFjMkNmZywgQWMzQ2ZnOworCUFDX1RYT1BfQ1NSMF9TVFJVQyBjc3IwOworCUFDX1RYT1BfQ1NSMV9TVFJVQyBjc3IxOworCUFJRlNOX0NTUl9TVFJVQyAgICBBaWZzbkNzcjsKKwlDV01JTl9DU1JfU1RSVUMgICAgQ3dtaW5Dc3I7CisJQ1dNQVhfQ1NSX1NUUlVDICAgIEN3bWF4Q3NyOworCWludCBpOworCisJQWMwQ2ZnLndvcmQgPSAwOworCUFjMUNmZy53b3JkID0gMDsKKwlBYzJDZmcud29yZCA9IDA7CisJQWMzQ2ZnLndvcmQgPSAwOworCWlmICgocEVkY2FQYXJtID09IE5VTEwpIHx8IChwRWRjYVBhcm0tPmJWYWxpZCA9PSBGQUxTRSkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFzaWNTZXRFZGNhUGFybVxuIikpOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19XTU1fSU5VU0VEKTsKKwkJZm9yIChpPTA7IGk8TUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykKKwkJeworCQkJaWYgKHBBZC0+TWFjVGFiLkNvbnRlbnRbaV0uVmFsaWRBc0NMSSB8fCBwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNBcENsaSkKKwkJCQlDTElFTlRfU1RBVFVTX0NMRUFSX0ZMQUcoJnBBZC0+TWFjVGFiLkNvbnRlbnRbaV0sIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKTsKKwkJfQorCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gICAgICBNQUMgUmVnaXN0ZXIgaGFzIGEgY29weSAuCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vI2lmbmRlZiBXSUZJX1RFU1QKKwkJaWYoIHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0ICkKKwkJeworCQkJLy8gRm9yIENXQyB0ZXN0LCBjaGFuZ2UgdHhvcCBmcm9tIDB4MzAgdG8gMHgyMCBpbiBUeEJ1cnN0IG1vZGUKKwkJCUFjMENmZy5maWVsZC5BY1R4b3AgPSAweDIwOyAvLyBTdWdnZXN0IGJ5IEpvaG4gZm9yIFR4QnVyc3QgaW4gSFQgTW9kZQorCQl9CisJCWVsc2UKKwkJCUFjMENmZy5maWVsZC5BY1R4b3AgPSAwOwkvLyBRSURfQUNfQkUKKy8vI2Vsc2UKKy8vCQlBYzBDZmcuZmllbGQuQWNUeG9wID0gMDsJLy8gUUlEX0FDX0JFCisvLyNlbmRpZgorCQlBYzBDZmcuZmllbGQuQ3dtaW4gPSBDV19NSU5fSU5fQklUUzsKKwkJQWMwQ2ZnLmZpZWxkLkN3bWF4ID0gQ1dfTUFYX0lOX0JJVFM7CisJCUFjMENmZy5maWVsZC5BaWZzbiA9IDI7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMwX0NGRywgQWMwQ2ZnLndvcmQpOworCisJCUFjMUNmZy5maWVsZC5BY1R4b3AgPSAwOwkvLyBRSURfQUNfQksKKwkJQWMxQ2ZnLmZpZWxkLkN3bWluID0gQ1dfTUlOX0lOX0JJVFM7CisJCUFjMUNmZy5maWVsZC5Dd21heCA9IENXX01BWF9JTl9CSVRTOworCQlBYzFDZmcuZmllbGQuQWlmc24gPSAyOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMV9DRkcsIEFjMUNmZy53b3JkKTsKKworCQlpZiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFCKQorCQl7CisJCQlBYzJDZmcuZmllbGQuQWNUeG9wID0gMTkyOwkvLyBBQ19WSTogMTkyKjMydXMgfj0gNm1zCisJCQlBYzNDZmcuZmllbGQuQWNUeG9wID0gOTY7CS8vIEFDX1ZPOiA5NiozMnVzICB+PSAzbXMKKwkJfQorCQllbHNlCisJCXsKKwkJCUFjMkNmZy5maWVsZC5BY1R4b3AgPSA5NjsJLy8gQUNfVkk6IDk2KjMydXMgfj0gM21zCisJCQlBYzNDZmcuZmllbGQuQWNUeG9wID0gNDg7CS8vIEFDX1ZPOiA0OCozMnVzIH49IDEuNW1zCisJCX0KKwkJQWMyQ2ZnLmZpZWxkLkN3bWluID0gQ1dfTUlOX0lOX0JJVFM7CisJCUFjMkNmZy5maWVsZC5Dd21heCA9IENXX01BWF9JTl9CSVRTOworCQlBYzJDZmcuZmllbGQuQWlmc24gPSAyOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMl9DRkcsIEFjMkNmZy53b3JkKTsKKwkJQWMzQ2ZnLmZpZWxkLkN3bWluID0gQ1dfTUlOX0lOX0JJVFM7CisJCUFjM0NmZy5maWVsZC5Dd21heCA9IENXX01BWF9JTl9CSVRTOworCQlBYzNDZmcuZmllbGQuQWlmc24gPSAyOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDM19DRkcsIEFjM0NmZy53b3JkKTsKKworCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vICAgICAgRE1BIFJlZ2lzdGVyIGhhcyBhIGNvcHkgdG9vLgorCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCWNzcjAuZmllbGQuQWMwVHhvcCA9IDA7CQkvLyBRSURfQUNfQkUKKwkJY3NyMC5maWVsZC5BYzFUeG9wID0gMDsJCS8vIFFJRF9BQ19CSworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fVFhPUDBfQ0ZHLCBjc3IwLndvcmQpOworCQlpZiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFCKQorCQl7CisJCQljc3IxLmZpZWxkLkFjMlR4b3AgPSAxOTI7CQkvLyBBQ19WSTogMTkyKjMydXMgfj0gNm1zCisJCQljc3IxLmZpZWxkLkFjM1R4b3AgPSA5NjsJCS8vIEFDX1ZPOiA5NiozMnVzICB+PSAzbXMKKwkJfQorCQllbHNlCisJCXsKKwkJCWNzcjEuZmllbGQuQWMyVHhvcCA9IDk2OwkJLy8gQUNfVkk6IDk2KjMydXMgfj0gM21zCisJCQljc3IxLmZpZWxkLkFjM1R4b3AgPSA0ODsJCS8vIEFDX1ZPOiA0OCozMnVzIH49IDEuNW1zCisJCX0KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX1RYT1AxX0NGRywgY3NyMS53b3JkKTsKKworCQlDd21pbkNzci53b3JkID0gMDsKKwkJQ3dtaW5Dc3IuZmllbGQuQ3dtaW4wID0gQ1dfTUlOX0lOX0JJVFM7CisJCUN3bWluQ3NyLmZpZWxkLkN3bWluMSA9IENXX01JTl9JTl9CSVRTOworCQlDd21pbkNzci5maWVsZC5Dd21pbjIgPSBDV19NSU5fSU5fQklUUzsKKwkJQ3dtaW5Dc3IuZmllbGQuQ3dtaW4zID0gQ1dfTUlOX0lOX0JJVFM7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdNTV9DV01JTl9DRkcsIEN3bWluQ3NyLndvcmQpOworCisJCUN3bWF4Q3NyLndvcmQgPSAwOworCQlDd21heENzci5maWVsZC5Dd21heDAgPSBDV19NQVhfSU5fQklUUzsKKwkJQ3dtYXhDc3IuZmllbGQuQ3dtYXgxID0gQ1dfTUFYX0lOX0JJVFM7CisJCUN3bWF4Q3NyLmZpZWxkLkN3bWF4MiA9IENXX01BWF9JTl9CSVRTOworCQlDd21heENzci5maWVsZC5Dd21heDMgPSBDV19NQVhfSU5fQklUUzsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX0NXTUFYX0NGRywgQ3dtYXhDc3Iud29yZCk7CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX0FJRlNOX0NGRywgMHgwMDAwMjIyMik7CisKKwkJTmRpc1plcm9NZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0sIHNpemVvZihFRENBX1BBUk0pKTsKKwl9CisJZWxzZQorCXsKKwkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpOworCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vICAgICAgTUFDIFJlZ2lzdGVyIGhhcyBhIGNvcHkuCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8KKwkJLy8gTW9kaWZ5IEN3bWluL0N3bWF4L1R4b3Agb24gcXVldWVbUUlEX0FDX1ZJXSwgUmVjb21tZW5kIGJ5IEplcnJ5IDIwMDUvMDcvMjcKKwkJLy8gVG8gZGVncmFkZSBvdXIgVklETyBRdWV1ZSdzIHRocm91Z2hwdXQgZm9yIFdpRmkgV01NIFMzVDA3IElzc3VlLgorCQkvLworCQkvL3BFZGNhUGFybS0+VHhvcFtRSURfQUNfVkldID0gcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19WSV0gKiA3IC8gMTA7IC8vIHJ0Mjg2MGMgbmVlZCB0aGlzCisKKwkJQWMwQ2ZnLmZpZWxkLkFjVHhvcCA9ICBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX0JFXTsKKwkJQWMwQ2ZnLmZpZWxkLkN3bWluPSBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19CRV07CisJCUFjMENmZy5maWVsZC5Dd21heCA9IHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX0JFXTsKKwkJQWMwQ2ZnLmZpZWxkLkFpZnNuID0gcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfQkVdOyAvLysxOworCisJCUFjMUNmZy5maWVsZC5BY1R4b3AgPSAgcEVkY2FQYXJtLT5UeG9wW1FJRF9BQ19CS107CisJCUFjMUNmZy5maWVsZC5Dd21pbiA9IHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX0JLXTsgLy8rMjsKKwkJQWMxQ2ZnLmZpZWxkLkN3bWF4ID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfQktdOworCQlBYzFDZmcuZmllbGQuQWlmc24gPSBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19CS107IC8vKzE7CisKKwkJQWMyQ2ZnLmZpZWxkLkFjVHhvcCA9IChwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX1ZJXSAqIDYpIC8gMTA7CisJCUFjMkNmZy5maWVsZC5Dd21pbiA9IHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX1ZJXTsKKwkJQWMyQ2ZnLmZpZWxkLkN3bWF4ID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfVkldOworCQlBYzJDZmcuZmllbGQuQWlmc24gPSBwRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WSV07CisjaWZkZWYgSU5GX0FNQVpPTl9TRQorI2VuZGlmIC8vIElORl9BTUFaT05fU0UgLy8KKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCS8vIFR1bmluZyBmb3IgV2ktRmkgV01NIFMwNgorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaUZpVGVzdCAmJgorCQkJCXBFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZJXSA9PSAxMCkKKwkJCQlBYzJDZmcuZmllbGQuQWlmc24gLT0gMTsKKworCQkJLy8gVHVuaW5nIGZvciBUR24gV2ktRmkgNS4yLjMyCisJCQkvLyBTVEEgVGVzdEJlZCBjaGFuZ2VzIGluIHRoaXMgaXRlbTogY29uZXhhbnQgbGVnYWN5IHN0YSA9PT4gYnJvYWRjb20gMTFuIHN0YQorCQkJaWYgKFNUQV9UR05fV0lGSV9PTihwQWQpICYmCisJCQkJcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVkldID09IDEwKQorCQkJeworCQkJCUFjMENmZy5maWVsZC5BaWZzbiA9IDM7CisJCQkJQWMyQ2ZnLmZpZWxkLkFjVHhvcCA9IDU7CisJCQl9CisKKyNpZmRlZiBSVDMweHgKKwkJCWlmIChwQWQtPlJmSWNUeXBlID09IFJGSUNfMzAyMCB8fCBwQWQtPlJmSWNUeXBlID09IFJGSUNfMjAyMCkKKwkJCXsKKwkJCQkvLyBUdW5pbmcgZm9yIFdpRmkgV01NIFMzLVQwNzogY29ubmV4YW50IGxlZ2FjeSBzdGEgPT0+IGJyb2FkY29tIDExbiBzdGEuCisJCQkJQWMyQ2ZnLmZpZWxkLkFpZnNuID0gNTsKKwkJCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCUFjM0NmZy5maWVsZC5BY1R4b3AgPSBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX1ZPXTsKKwkJQWMzQ2ZnLmZpZWxkLkN3bWluID0gcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfVk9dOworCQlBYzNDZmcuZmllbGQuQ3dtYXggPSBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19WT107CisJCUFjM0NmZy5maWVsZC5BaWZzbiA9IHBFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZPXTsKKworLy8jaWZkZWYgV0lGSV9URVNUCisJCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lGaVRlc3QpCisJCXsKKwkJCWlmIChBYzNDZmcuZmllbGQuQWNUeG9wID09IDEwMikKKwkJCXsKKwkJCUFjMENmZy5maWVsZC5BY1R4b3AgPSBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX0JFXSA/IHBFZGNhUGFybS0+VHhvcFtRSURfQUNfQkVdIDogMTA7CisJCQkJQWMwQ2ZnLmZpZWxkLkFpZnNuICA9IHBFZGNhUGFybS0+QWlmc25bUUlEX0FDX0JFXS0xOyAvKiBBSUZTTiBtdXN0ID49IDEgKi8KKwkJCUFjMUNmZy5maWVsZC5BY1R4b3AgPSBwRWRjYVBhcm0tPlR4b3BbUUlEX0FDX0JLXTsKKwkJCQlBYzFDZmcuZmllbGQuQWlmc24gID0gcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfQktdOworCQkJQWMyQ2ZnLmZpZWxkLkFjVHhvcCA9IHBFZGNhUGFybS0+VHhvcFtRSURfQUNfVkldOworCQkJfSAvKiBFbmQgb2YgaWYgKi8KKwkJfQorLy8jZW5kaWYgLy8gV0lGSV9URVNUIC8vCisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzBfQ0ZHLCBBYzBDZmcud29yZCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEVEQ0FfQUMxX0NGRywgQWMxQ2ZnLndvcmQpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMl9DRkcsIEFjMkNmZy53b3JkKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzNfQ0ZHLCBBYzNDZmcud29yZCk7CisKKworCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCS8vICAgICAgRE1BIFJlZ2lzdGVyIGhhcyBhIGNvcHkgdG9vLgorCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCWNzcjAuZmllbGQuQWMwVHhvcCA9IEFjMENmZy5maWVsZC5BY1R4b3A7CisJCWNzcjAuZmllbGQuQWMxVHhvcCA9IEFjMUNmZy5maWVsZC5BY1R4b3A7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdNTV9UWE9QMF9DRkcsIGNzcjAud29yZCk7CisKKwkJY3NyMS5maWVsZC5BYzJUeG9wID0gQWMyQ2ZnLmZpZWxkLkFjVHhvcDsKKwkJY3NyMS5maWVsZC5BYzNUeG9wID0gQWMzQ2ZnLmZpZWxkLkFjVHhvcDsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX1RYT1AxX0NGRywgY3NyMS53b3JkKTsKKworCQlDd21pbkNzci53b3JkID0gMDsKKwkJQ3dtaW5Dc3IuZmllbGQuQ3dtaW4wID0gcEVkY2FQYXJtLT5Dd21pbltRSURfQUNfQkVdOworCQlDd21pbkNzci5maWVsZC5Dd21pbjEgPSBwRWRjYVBhcm0tPkN3bWluW1FJRF9BQ19CS107CisJCUN3bWluQ3NyLmZpZWxkLkN3bWluMiA9IHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX1ZJXTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCUN3bWluQ3NyLmZpZWxkLkN3bWluMyA9IHBFZGNhUGFybS0+Q3dtaW5bUUlEX0FDX1ZPXSAtIDE7IC8vZm9yIFRHbiB3aWZpIHRlc3QKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX0NXTUlOX0NGRywgQ3dtaW5Dc3Iud29yZCk7CisKKwkJQ3dtYXhDc3Iud29yZCA9IDA7CisJCUN3bWF4Q3NyLmZpZWxkLkN3bWF4MCA9IHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX0JFXTsKKwkJQ3dtYXhDc3IuZmllbGQuQ3dtYXgxID0gcEVkY2FQYXJtLT5Dd21heFtRSURfQUNfQktdOworCQlDd21heENzci5maWVsZC5Dd21heDIgPSBwRWRjYVBhcm0tPkN3bWF4W1FJRF9BQ19WSV07CisJCUN3bWF4Q3NyLmZpZWxkLkN3bWF4MyA9IHBFZGNhUGFybS0+Q3dtYXhbUUlEX0FDX1ZPXTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX0NXTUFYX0NGRywgQ3dtYXhDc3Iud29yZCk7CisKKwkJQWlmc25Dc3Iud29yZCA9IDA7CisJCUFpZnNuQ3NyLmZpZWxkLkFpZnNuMCA9IEFjMENmZy5maWVsZC5BaWZzbjsgLy9wRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19CRV07CisJCUFpZnNuQ3NyLmZpZWxkLkFpZnNuMSA9IEFjMUNmZy5maWVsZC5BaWZzbjsgLy9wRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19CS107CisJCUFpZnNuQ3NyLmZpZWxkLkFpZnNuMiA9IEFjMkNmZy5maWVsZC5BaWZzbjsgLy9wRWRjYVBhcm0tPkFpZnNuW1FJRF9BQ19WSV07CisjaWZkZWYgSU5GX0FNQVpPTl9TRQorI2VuZGlmIC8vIElORl9BTUFaT05fU0UgLy8KKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXsKKwkJCS8vIFR1bmluZyBmb3IgV2ktRmkgV01NIFMwNgorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaUZpVGVzdCAmJgorCQkJCXBFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZJXSA9PSAxMCkKKwkJCQlBaWZzbkNzci5maWVsZC5BaWZzbjIgPSBBYzJDZmcuZmllbGQuQWlmc24gLSA0OworCisJCQkvLyBUdW5pbmcgZm9yIFRHbiBXaS1GaSA1LjIuMzIKKwkJCS8vIFNUQSBUZXN0QmVkIGNoYW5nZXMgaW4gdGhpcyBpdGVtOiBjb25uZXhhbnQgbGVnYWN5IHN0YSA9PT4gYnJvYWRjb20gMTFuIHN0YQorCQkJaWYgKFNUQV9UR05fV0lGSV9PTihwQWQpICYmCisJCQkJcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVkldID09IDEwKQorCQkJeworCQkJCUFpZnNuQ3NyLmZpZWxkLkFpZnNuMCA9IDM7CisJCQkJQWlmc25Dc3IuZmllbGQuQWlmc24yID0gNzsKKwkJCX0KKworCQkJaWYgKElORlJBX09OKHBBZCkpCisJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRygmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpOworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCUFpZnNuQ3NyLmZpZWxkLkFpZnNuMyA9IEFjM0NmZy5maWVsZC5BaWZzbiAtIDE7IC8vcEVkY2FQYXJtLT5BaWZzbltRSURfQUNfVk9dOyAvL2ZvciBUR24gd2lmaSB0ZXN0CisjaWZkZWYgUlQzMHh4CisJCWlmIChwQWQtPlJmSWNUeXBlID09IFJGSUNfMzAyMCB8fCBwQWQtPlJmSWNUeXBlID09IFJGSUNfMjAyMCkKKwkJeworCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJQWlmc25Dc3IuZmllbGQuQWlmc24yID0gMHgyOyAvL3BFZGNhUGFybS0+QWlmc25bUUlEX0FDX1ZJXTsgLy9mb3IgV2lGaSBXTU0gUzQtVDA0LgorCQl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdNTV9BSUZTTl9DRkcsIEFpZnNuQ3NyLndvcmQpOworCisJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLCBwRWRjYVBhcm0sIHNpemVvZihFRENBX1BBUk0pKTsKKwkJaWYgKCFBREhPQ19PTihwQWQpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkVEQ0EgWyMlZF06IEFJRlNOIENXbWluIENXbWF4ICBUWE9QKHVzKSAgQUNNXG4iLCBwRWRjYVBhcm0tPkVkY2FVcGRhdGVDb3VudCkpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIgICAgIEFDX0JFICAgICAgJTJkICAgICAlMmQgICAgICUyZCAgICAgICU0ZCAgICAgJWRcbiIsCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5BaWZzblswXSwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPkN3bWluWzBdLAorCQkJCQkJCQkJIHBFZGNhUGFybS0+Q3dtYXhbMF0sCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5UeG9wWzBdPDw1LAorCQkJCQkJCQkJIHBFZGNhUGFybS0+YkFDTVswXSkpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIgICAgIEFDX0JLICAgICAgJTJkICAgICAlMmQgICAgICUyZCAgICAgICU0ZCAgICAgJWRcbiIsCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5BaWZzblsxXSwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPkN3bWluWzFdLAorCQkJCQkJCQkJIHBFZGNhUGFybS0+Q3dtYXhbMV0sCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5UeG9wWzFdPDw1LAorCQkJCQkJCQkJIHBFZGNhUGFybS0+YkFDTVsxXSkpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIgICAgIEFDX1ZJICAgICAgJTJkICAgICAlMmQgICAgICUyZCAgICAgICU0ZCAgICAgJWRcbiIsCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5BaWZzblsyXSwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPkN3bWluWzJdLAorCQkJCQkJCQkJIHBFZGNhUGFybS0+Q3dtYXhbMl0sCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5UeG9wWzJdPDw1LAorCQkJCQkJCQkJIHBFZGNhUGFybS0+YkFDTVsyXSkpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIgICAgIEFDX1ZPICAgICAgJTJkICAgICAlMmQgICAgICUyZCAgICAgICU0ZCAgICAgJWRcbiIsCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5BaWZzblszXSwKKwkJCQkJCQkJCSBwRWRjYVBhcm0tPkN3bWluWzNdLAorCQkJCQkJCQkJIHBFZGNhUGFybS0+Q3dtYXhbM10sCisJCQkJCQkJCQkgcEVkY2FQYXJtLT5UeG9wWzNdPDw1LAorCQkJCQkJCQkJIHBFZGNhUGFybS0+YkFDTVszXSkpOworCQl9CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCAJQXNpY1NldFNsb3RUaW1lKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIEJPT0xFQU4gYlVzZVNob3J0U2xvdFRpbWUpCit7CisJVUxPTkcJU2xvdFRpbWU7CisJVUlOVDMyCVJlZ1ZhbHVlID0gMDsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCWlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMTQpCisJCWJVc2VTaG9ydFNsb3RUaW1lID0gVFJVRTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCWlmIChiVXNlU2hvcnRTbG90VGltZSkKKwkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1NMT1RfSU5VU0VEKTsKKwllbHNlCisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NIT1JUX1NMT1RfSU5VU0VEKTsKKworCVNsb3RUaW1lID0gKGJVc2VTaG9ydFNsb3RUaW1lKT8gOSA6IDIwOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCS8vIGZvcmNlIHVzaW5nIHNob3J0IFNMT1QgdGltZSBmb3IgRkFFIHRvIGRlbW8gcGVyZm9ybWFuY2Ugd2hlbiBUeEJ1cnN0IGlzIE9OCisJCWlmIChwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCkKKwkJCVNsb3RUaW1lID0gOTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLworCS8vIEZvciBzb21lIHJlYXNvbnMsIGFsd2F5cyBzZXQgaXQgdG8gc2hvcnQgc2xvdCB0aW1lLgorCS8vCisJLy8gVG9EbzogU2hvdWxkIGNvbnNpZGVyIGNhcGFiaWxpdHkgd2l0aCAxMUIKKwkvLworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfQURIT0MpCisJCQlTbG90VGltZSA9IDIwOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgQktPRkZfU0xPVF9DRkcsICZSZWdWYWx1ZSk7CisJUmVnVmFsdWUgPSBSZWdWYWx1ZSAmIDB4RkZGRkZGMDA7CisKKwlSZWdWYWx1ZSB8PSBTbG90VGltZTsKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEJLT0ZGX1NMT1RfQ0ZHLCBSZWdWYWx1ZSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUFkZCBTaGFyZWQga2V5IGluZm9ybWF0aW9uIGludG8gQVNJQy4KKwkJVXBkYXRlIHNoYXJlZCBrZXksIFR4TWljIGFuZCBSeE1pYyB0byBBc2ljIFNoYXJlZCBrZXkgdGFibGUKKwkJVXBkYXRlIGl0cyBjaXBoZXJBbGcgdG8gQXNpYyBTaGFyZWQga2V5IE1vZGUuCisKKyAgICBSZXR1cm46CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBBc2ljQWRkU2hhcmVkS2V5RW50cnkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIJCSBCc3NJbmRleCwKKwlJTiBVQ0hBUgkJIEtleUlkeCwKKwlJTiBVQ0hBUgkJIENpcGhlckFsZywKKwlJTiBQVUNIQVIJCSBwS2V5LAorCUlOIFBVQ0hBUgkJIHBUeE1pYywKKwlJTiBQVUNIQVIJCSBwUnhNaWMpCit7CisJVUxPTkcgb2Zmc2V0OyAvLywgY3NyMDsKKwlTSEFSRURLRVlfTU9ERV9TVFJVQyBjc3IxOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNpY0FkZFNoYXJlZEtleUVudHJ5IEJzc0luZGV4PSVkLCBLZXlJZHg9JWRcbiIsIEJzc0luZGV4LEtleUlkeCkpOworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBc2ljQWRkU2hhcmVkS2V5RW50cnk6ICVzIGtleSAjJWRcbiIsIENpcGhlck5hbWVbQ2lwaGVyQWxnXSwgQnNzSW5kZXgqNCArIEtleUlkeCkpOworCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCIgCUtleSA9ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCXBLZXlbMF0scEtleVsxXSxwS2V5WzJdLHBLZXlbM10scEtleVs0XSxwS2V5WzVdLHBLZXlbNl0scEtleVs3XSxwS2V5WzhdLHBLZXlbOV0scEtleVsxMF0scEtleVsxMV0scEtleVsxMl0scEtleVsxM10scEtleVsxNF0scEtleVsxNV0pKTsKKwlpZiAocFJ4TWljKQorCXsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIiAJUnggTUlDIEtleSA9ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCXBSeE1pY1swXSxwUnhNaWNbMV0scFJ4TWljWzJdLHBSeE1pY1szXSxwUnhNaWNbNF0scFJ4TWljWzVdLHBSeE1pY1s2XSxwUnhNaWNbN10pKTsKKwl9CisJaWYgKHBUeE1pYykKKwl7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCIgCVR4IE1JQyBLZXkgPSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQlwVHhNaWNbMF0scFR4TWljWzFdLHBUeE1pY1syXSxwVHhNaWNbM10scFR4TWljWzRdLHBUeE1pY1s1XSxwVHhNaWNbNl0scFR4TWljWzddKSk7CisJfQorLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCS8vCisJLy8gZmlsbCBrZXkgbWF0ZXJpYWwgLSBrZXkgKyBUWCBNSUMgKyBSWCBNSUMKKwkvLworCisjaWZkZWYgUlQyODcwCit7CisJb2Zmc2V0ID0gU0hBUkVEX0tFWV9UQUJMRV9CQVNFICsgKDQqQnNzSW5kZXggKyBLZXlJZHgpKkhXX0tFWV9FTlRSWV9TSVpFOworCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgcEtleSwgTUFYX0xFTl9PRl9TSEFSRV9LRVkpOworCisJb2Zmc2V0ICs9IE1BWF9MRU5fT0ZfU0hBUkVfS0VZOworCWlmIChwVHhNaWMpCisJeworCQlSVFVTQk11bHRpV3JpdGUocEFkLCBvZmZzZXQsIHBUeE1pYywgOCk7CisJfQorCisJb2Zmc2V0ICs9IDg7CisJaWYgKHBSeE1pYykKKwl7CisJCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgcFJ4TWljLCA4KTsKKwl9Cit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwkvLworCS8vIFVwZGF0ZSBjaXBoZXIgYWxnb3JpdGhtLiBXU1RBIGFsd2F5cyB1c2UgQlNTMAorCS8vCisJUlRNUF9JT19SRUFEMzIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSs0KihCc3NJbmRleC8yKSwgJmNzcjEud29yZCk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSZWFkOiBTSEFSRURfS0VZX01PREVfQkFTRSBhdCB0aGlzIEJzc1slZF0gS2V5SWR4WyVkXT0gMHgleCBcbiIsIEJzc0luZGV4LEtleUlkeCwgY3NyMS53b3JkKSk7CisJaWYgKChCc3NJbmRleCUyKSA9PSAwKQorCXsKKwkJaWYgKEtleUlkeCA9PSAwKQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJZWxzZSBpZiAoS2V5SWR4ID09IDEpCisJCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQllbHNlIGlmIChLZXlJZHggPT0gMikKKwkJCWNzcjEuZmllbGQuQnNzMEtleTJDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCWVsc2UKKwkJCWNzcjEuZmllbGQuQnNzMEtleTNDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJfQorCWVsc2UKKwl7CisJCWlmIChLZXlJZHggPT0gMCkKKwkJCWNzcjEuZmllbGQuQnNzMUtleTBDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCWVsc2UgaWYgKEtleUlkeCA9PSAxKQorCQkJY3NyMS5maWVsZC5Cc3MxS2V5MUNpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJZWxzZSBpZiAoS2V5SWR4ID09IDIpCisJCQljc3IxLmZpZWxkLkJzczFLZXkyQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQllbHNlCisJCQljc3IxLmZpZWxkLkJzczFLZXkzQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCX0KKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIldyaXRlOiBTSEFSRURfS0VZX01PREVfQkFTRSBhdCB0aGlzIEJzc1slZF0gPSAweCV4IFxuIiwgQnNzSW5kZXgsIGNzcjEud29yZCkpOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFKzQqKEJzc0luZGV4LzIpLCBjc3IxLndvcmQpOworCit9CisKKy8vCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRCBBc2ljUmVtb3ZlU2hhcmVkS2V5RW50cnkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIJCSBCc3NJbmRleCwKKwlJTiBVQ0hBUgkJIEtleUlkeCkKK3sKKwkvL1VMT05HIFNlY0NzcjA7CisJU0hBUkVES0VZX01PREVfU1RSVUMgY3NyMTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQXNpY1JlbW92ZVNoYXJlZEtleUVudHJ5OiAjJWQgXG4iLCBCc3NJbmRleCo0ICsgS2V5SWR4KSk7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFKzQqKEJzc0luZGV4LzIpLCAmY3NyMS53b3JkKTsKKwlpZiAoKEJzc0luZGV4JTIpID09IDApCisJeworCQlpZiAoS2V5SWR4ID09IDApCisJCQljc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID0gMDsKKwkJZWxzZSBpZiAoS2V5SWR4ID09IDEpCisJCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gMDsKKwkJZWxzZSBpZiAoS2V5SWR4ID09IDIpCisJCQljc3IxLmZpZWxkLkJzczBLZXkyQ2lwaGVyQWxnID0gMDsKKwkJZWxzZQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IDA7CisJfQorCWVsc2UKKwl7CisJCWlmIChLZXlJZHggPT0gMCkKKwkJCWNzcjEuZmllbGQuQnNzMUtleTBDaXBoZXJBbGcgPSAwOworCQllbHNlIGlmIChLZXlJZHggPT0gMSkKKwkJCWNzcjEuZmllbGQuQnNzMUtleTFDaXBoZXJBbGcgPSAwOworCQllbHNlIGlmIChLZXlJZHggPT0gMikKKwkJCWNzcjEuZmllbGQuQnNzMUtleTJDaXBoZXJBbGcgPSAwOworCQllbHNlCisJCQljc3IxLmZpZWxkLkJzczFLZXkzQ2lwaGVyQWxnID0gMDsKKwl9CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJXcml0ZTogU0hBUkVEX0tFWV9NT0RFX0JBU0UgYXQgdGhpcyBCc3NbJWRdID0gMHgleCBcbiIsIEJzc0luZGV4LCBjc3IxLndvcmQpKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSs0KihCc3NJbmRleC8yKSwgY3NyMS53b3JkKTsKKwlBU1NFUlQoQnNzSW5kZXggPCA0KTsKKwlBU1NFUlQoS2V5SWR4IDwgNCk7CisKK30KKworCitWT0lEIEFzaWNVcGRhdGVXQ0lEQXR0cmlidXRlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVAkJV0NJRCwKKwlJTiBVQ0hBUgkJQnNzSW5kZXgsCisJSU4gVUNIQVIgICAgICAgIENpcGhlckFsZywKKwlJTiBCT09MRUFOCQliVXNlUGFpcmV3aXNlS2V5VGFibGUpCit7CisJVUxPTkcgICBXQ0lEQXR0cmkgPSAwLCBvZmZzZXQ7CisKKwkvLworCS8vIFVwZGF0ZSBXQ0lEIGF0dHJpYnV0ZS4KKwkvLyBPbmx5IFR4S2V5IGNvdWxkIHVwZGF0ZSBXQ0lEIGF0dHJpYnV0ZS4KKwkvLworCW9mZnNldCA9IE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKFdDSUQgKiBIV19XQ0lEX0FUVFJJX1NJWkUpOworCVdDSURBdHRyaSA9IChCc3NJbmRleCA8PCA0KSB8IChDaXBoZXJBbGcgPDwgMSkgfCAoYlVzZVBhaXJld2lzZUtleVRhYmxlKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIFdDSURBdHRyaSk7Cit9CisKK1ZPSUQgQXNpY1VwZGF0ZVdDSURJVkVJVigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQJCVdDSUQsCisJSU4gVUxPTkcgICAgICAgIHVJViwKKwlJTiBVTE9ORyAgICAgICAgdUVJVikKK3sKKwlVTE9ORwlvZmZzZXQ7CisKKwlvZmZzZXQgPSBNQUNfSVZFSVZfVEFCTEVfQkFTRSArIChXQ0lEICogSFdfSVZFSVZfRU5UUllfU0laRSk7CisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBvZmZzZXQsIHVJVik7CisJUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0ICsgNCwgdUVJVik7Cit9CisKK1ZPSUQgQXNpY1VwZGF0ZVJ4V0NJRFRhYmxlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVAkJV0NJRCwKKwlJTiBQVUNIQVIgICAgICAgIHBBZGRyKQoreworCVVMT05HIG9mZnNldDsKKwlVTE9ORyBBZGRyOworCisJb2Zmc2V0ID0gTUFDX1dDSURfQkFTRSArIChXQ0lEICogSFdfV0NJRF9FTlRSWV9TSVpFKTsKKwlBZGRyID0gcEFkZHJbMF0gKyAocEFkZHJbMV0gPDwgOCkgKyhwQWRkclsyXSA8PCAxNikgKyhwQWRkclszXSA8PCAyNCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0LCBBZGRyKTsKKwlBZGRyID0gcEFkZHJbNF0gKyAocEFkZHJbNV0gPDwgOCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0ICsgNCwgQWRkcik7Cit9CisKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBDaXBoZXIgS2V5LCBDaXBoZXIgYWxnb3JpdGhtLCBJVi9FSVYgdG8gQXNpYworCisgICAgQXJndW1lbnRzOgorICAgICAgICBwQWQgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgICAgIFdDSUQgICAgICAgICAgICAgICAgICAgIFdDSUQgRW50cnkgbnVtYmVyLgorICAgICAgICBCc3NJbmRleCAgICAgICAgICAgICAgICBCU1NJRCBpbmRleCwgc3RhdGlvbiBvciBub25lIG11bHRpcGxlIEJTU0lEIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB2YWx1ZSBzaG91bGQgYmUgMC4KKyAgICAgICAgS2V5SWR4ICAgICAgICAgICAgICAgICAgVGhpcyBLZXlJZHggd2lsbCBzZXQgdG8gSVYncyBLZXlJRCBpZiBiVHhLZXkgZW5hYmxlZAorICAgICAgICBwQ2lwaGVyS2V5ICAgICAgICAgICAgICBQb2ludGVyIHRvIENpcGhlciBLZXkuCisgICAgICAgIGJVc2VQYWlyZXdpc2VLZXlUYWJsZSAgIFRSVUUgbWVhbnMgc2F2ZWQgdGhlIGtleSBpbiBTaGFyZWRLZXkgdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBQYWlyZXdpc2VLZXkgdGFibGUKKyAgICAgICAgYlR4S2V5ICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgdHJhbnNtaXQga2V5IGlmIGVuYWJsZWQuCisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgIE5vdGU6CisgICAgICAgIFRoaXMgcm91dGluZSB3aWxsIHNldCB0aGUgcmVsYXRpdmUga2V5IHN0dWZmIHRvIEFzaWMgaW5jbHVkaW5nIFdDSUQgYXR0cmlidXRlLAorICAgICAgICBDaXBoZXIgS2V5LCBDaXBoZXIgYWxnb3JpdGhtIGFuZCBJVi9FSVYuCisKKyAgICAgICAgSVYvRUlWIHdpbGwgYmUgdXBkYXRlIGlmIHRoaXMgQ2lwaGVyS2V5IGlzIHRoZSB0cmFuc21pc3Npb24ga2V5IGJlY2F1c2UKKyAgICAgICAgQVNJQyB3aWxsIGJhc2Ugb24gSVYncyBLZXlJRCB2YWx1ZSB0byBzZWxlY3QgQ2lwaGVyIEtleS4KKworICAgICAgICBJZiBiVHhLZXkgc2V0cyB0byBGQUxTRSwgdGhpcyBpcyBub3QgdGhlIFRYIGtleSwgYnV0IGl0IGNvdWxkIGJlCisgICAgICAgIFJYIGtleQorCisgICAgCUZvciBBUCBtb2RlIGJUeEtleSBtdXN0IGJlIGFsd2F5cyBzZXQgdG8gVFJVRS4KKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEFzaWNBZGRLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQJCVdDSUQsCisJSU4gVUNIQVIJCUJzc0luZGV4LAorCUlOIFVDSEFSCQlLZXlJZHgsCisJSU4gUENJUEhFUl9LRVkJcENpcGhlcktleSwKKwlJTiBCT09MRUFOCQliVXNlUGFpcmV3aXNlS2V5VGFibGUsCisJSU4gQk9PTEVBTgkJYlR4S2V5KQoreworCVVMT05HCW9mZnNldDsKKy8vCVVMT05HICAgV0NJREF0dHJpID0gMDsKKwlVQ0hBUglJVjQgPSAwOworCVBVQ0hBUgkJcEtleSA9IHBDaXBoZXJLZXktPktleTsKKy8vCVVMT05HCQlLZXlMZW4gPSBwQ2lwaGVyS2V5LT5LZXlMZW47CisJUFVDSEFSCQlwVHhNaWMgPSBwQ2lwaGVyS2V5LT5UeE1pYzsKKwlQVUNIQVIJCXBSeE1pYyA9IHBDaXBoZXJLZXktPlJ4TWljOworCVBVQ0hBUgkJcFR4dHNjID0gcENpcGhlcktleS0+VHhUc2M7CisJVUNIQVIJCUNpcGhlckFsZyA9IHBDaXBoZXJLZXktPkNpcGhlckFsZzsKKwlTSEFSRURLRVlfTU9ERV9TVFJVQyBjc3IxOworCisvLwlBU1NFUlQoS2V5TGVuIDw9IE1BWF9MRU5fT0ZfUEVFUl9LRVkpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT0+IEFzaWNBZGRLZXlFbnRyeVxuIikpOworCS8vCisJLy8gMS4pIGRlY2lkZSBrZXkgdGFibGUgb2Zmc2V0CisJLy8KKwlpZiAoYlVzZVBhaXJld2lzZUtleVRhYmxlKQorCQlvZmZzZXQgPSBQQUlSV0lTRV9LRVlfVEFCTEVfQkFTRSArIChXQ0lEICogSFdfS0VZX0VOVFJZX1NJWkUpOworCWVsc2UKKwkJb2Zmc2V0ID0gU0hBUkVEX0tFWV9UQUJMRV9CQVNFICsgKDQgKiBCc3NJbmRleCArIEtleUlkeCkgKiBIV19LRVlfRU5UUllfU0laRTsKKworCS8vCisJLy8gMi4pIFNldCBLZXkgdG8gQXNpYworCS8vCisJLy9mb3IgKGkgPSAwOyBpIDwgS2V5TGVuOyBpKyspCisKKyNpZmRlZiBSVDI4NzAKKwlSVFVTQk11bHRpV3JpdGUocEFkLCBvZmZzZXQsIHBLZXksIE1BWF9MRU5fT0ZfUEVFUl9LRVkpOworCW9mZnNldCArPSBNQVhfTEVOX09GX1BFRVJfS0VZOworCisJLy8KKwkvLyAzLikgU2V0IE1JQyBrZXkgaWYgYXZhaWxhYmxlCisJLy8KKwlpZiAocFR4TWljKQorCXsKKwkJUlRVU0JNdWx0aVdyaXRlKHBBZCwgb2Zmc2V0LCBwVHhNaWMsIDgpOworCX0KKwlvZmZzZXQgKz0gTEVOX1RLSVBfVFhNSUNLOworCisJaWYgKHBSeE1pYykKKwl7CisJCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgcFJ4TWljLCA4KTsKKwl9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwkvLworCS8vIDQuKSBNb2RpZnkgSVYvRUlWIGlmIG5lZWRzCisJLy8gICAgIFRoaXMgd2lsbCBmb3JjZSBBc2ljIHRvIHVzZSB0aGlzIGtleSBJRCBieSBzZXR0aW5nIElWLgorCS8vCisJaWYgKGJUeEtleSkKKwl7CisKKyNpZmRlZiBSVDI4NzAKKwkJVUlOVDMyIHRtcFZhbDsKKworCQkvLworCQkvLyBXcml0ZSBJVgorCQkvLworCQlJVjQgPSAoS2V5SWR4IDw8IDYpOworCQlpZiAoKENpcGhlckFsZyA9PSBDSVBIRVJfVEtJUCkgfHwgKENpcGhlckFsZyA9PSBDSVBIRVJfVEtJUF9OT19NSUMpIHx8KENpcGhlckFsZyA9PSBDSVBIRVJfQUVTKSkKKwkJCUlWNCB8PSAweDIwOyAgLy8gdHVybiBvbiBleHRlbnNpb24gYml0IG1lYW5zIEVJViBleGlzdGVuY2UKKworCQl0bXBWYWwgPSBwVHh0c2NbMV0gKyAoKChwVHh0c2NbMV0gfCAweDIwKSAmIDB4N2YpIDw8IDgpICsgKHBUeHRzY1swXSA8PCAxNikgKyAoSVY0IDw8IDI0KTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0LCB0bXBWYWwpOworCisJCS8vCisJCS8vIFdyaXRlIEVJVgorCQkvLworCQlvZmZzZXQgKz0gNDsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0LCAqKFBVSU5UMzIpJnBDaXBoZXJLZXktPlR4VHNjWzJdKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwkJQXNpY1VwZGF0ZVdDSURBdHRyaWJ1dGUocEFkLCBXQ0lELCBCc3NJbmRleCwgQ2lwaGVyQWxnLCBiVXNlUGFpcmV3aXNlS2V5VGFibGUpOworCX0KKworCWlmICghYlVzZVBhaXJld2lzZUtleVRhYmxlKQorCXsKKwkJLy8KKwkJLy8gT25seSB1cGRhdGUgdGhlIHNoYXJlZCBrZXkgc2VjdXJpdHkgbW9kZQorCQkvLworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFICsgNCAqIChCc3NJbmRleCAvIDIpLCAmY3NyMS53b3JkKTsKKwkJaWYgKChCc3NJbmRleCAlIDIpID09IDApCisJCXsKKwkJCWlmIChLZXlJZHggPT0gMCkKKwkJCQljc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQkJZWxzZSBpZiAoS2V5SWR4ID09IDEpCisJCQkJY3NyMS5maWVsZC5Cc3MwS2V5MUNpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJCWVsc2UgaWYgKEtleUlkeCA9PSAyKQorCQkJCWNzcjEuZmllbGQuQnNzMEtleTJDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCQllbHNlCisJCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChLZXlJZHggPT0gMCkKKwkJCQljc3IxLmZpZWxkLkJzczFLZXkwQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQkJZWxzZSBpZiAoS2V5SWR4ID09IDEpCisJCQkJY3NyMS5maWVsZC5Cc3MxS2V5MUNpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJCWVsc2UgaWYgKEtleUlkeCA9PSAyKQorCQkJCWNzcjEuZmllbGQuQnNzMUtleTJDaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisJCQllbHNlCisJCQkJY3NyMS5maWVsZC5Cc3MxS2V5M0NpcGhlckFsZyA9IENpcGhlckFsZzsKKwkJfQorCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSArIDQgKiAoQnNzSW5kZXggLyAyKSwgY3NyMS53b3JkKTsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT0gQXNpY0FkZEtleUVudHJ5XG4iKSk7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQWRkIFBhaXItd2lzZSBrZXkgbWF0ZXJpYWwgaW50byBBU0lDLgorCQlVcGRhdGUgcGFpcndpc2Uga2V5LCBUeE1pYyBhbmQgUnhNaWMgdG8gQXNpYyBQYWlyLXdpc2Uga2V5IHRhYmxlCisKKyAgICBSZXR1cm46CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBBc2ljQWRkUGFpcndpc2VLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgICAgICAgIHBBZGRyLAorCUlOIFVDSEFSCQlXQ0lELAorCUlOIENJUEhFUl9LRVkJCSAqcENpcGhlcktleSkKK3sKKwlJTlQgaTsKKwlVTE9ORyAJCW9mZnNldDsKKwlQVUNIQVIJCSBwS2V5ID0gcENpcGhlcktleS0+S2V5OworCVBVQ0hBUgkJIHBUeE1pYyA9IHBDaXBoZXJLZXktPlR4TWljOworCVBVQ0hBUgkJIHBSeE1pYyA9IHBDaXBoZXJLZXktPlJ4TWljOworI2lmZGVmIERCRworCVVDSEFSCQlDaXBoZXJBbGcgPSBwQ2lwaGVyS2V5LT5DaXBoZXJBbGc7CisjZW5kaWYgLy8gREJHIC8vCisKKwkvLyBFS0VZCisJb2Zmc2V0ID0gUEFJUldJU0VfS0VZX1RBQkxFX0JBU0UgKyAoV0NJRCAqIEhXX0tFWV9FTlRSWV9TSVpFKTsKKyNpZmRlZiBSVDI4NzAKKwlSVFVTQk11bHRpV3JpdGUocEFkLCBvZmZzZXQsICZwQ2lwaGVyS2V5LT5LZXlbMF0sIE1BWF9MRU5fT0ZfUEVFUl9LRVkpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCWZvciAoaT0wOyBpPE1BWF9MRU5fT0ZfUEVFUl9LRVk7IGkrPTQpCisJeworCQlVSU5UMzIgVmFsdWU7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgb2Zmc2V0ICsgaSwgJlZhbHVlKTsKKwl9CisKKwlvZmZzZXQgKz0gTUFYX0xFTl9PRl9QRUVSX0tFWTsKKworCS8vICBNSUMgS0VZCisJaWYgKHBUeE1pYykKKwl7CisjaWZkZWYgUlQyODcwCisJCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgJnBDaXBoZXJLZXktPlR4TWljWzBdLCA4KTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwl9CisJb2Zmc2V0ICs9IDg7CisJaWYgKHBSeE1pYykKKwl7CisjaWZkZWYgUlQyODcwCisJCVJUVVNCTXVsdGlXcml0ZShwQWQsIG9mZnNldCwgJnBDaXBoZXJLZXktPlJ4TWljWzBdLCA4KTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFzaWNBZGRQYWlyd2lzZUtleUVudHJ5OiBXQ0lEICMlZCBBbGc9JXNcbiIsV0NJRCwgQ2lwaGVyTmFtZVtDaXBoZXJBbGddKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCIJS2V5ID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJcEtleVswXSxwS2V5WzFdLHBLZXlbMl0scEtleVszXSxwS2V5WzRdLHBLZXlbNV0scEtleVs2XSxwS2V5WzddLHBLZXlbOF0scEtleVs5XSxwS2V5WzEwXSxwS2V5WzExXSxwS2V5WzEyXSxwS2V5WzEzXSxwS2V5WzE0XSxwS2V5WzE1XSkpOworCWlmIChwUnhNaWMpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIJUnggTUlDIEtleSA9ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCXBSeE1pY1swXSxwUnhNaWNbMV0scFJ4TWljWzJdLHBSeE1pY1szXSxwUnhNaWNbNF0scFJ4TWljWzVdLHBSeE1pY1s2XSxwUnhNaWNbN10pKTsKKwl9CisJaWYgKHBUeE1pYykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIglUeCBNSUMgS2V5ID0gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJcFR4TWljWzBdLHBUeE1pY1sxXSxwVHhNaWNbMl0scFR4TWljWzNdLHBUeE1pY1s0XSxwVHhNaWNbNV0scFR4TWljWzZdLHBUeE1pY1s3XSkpOworCX0KK30KKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVJlbW92ZSBQYWlyLXdpc2Uga2V5IG1hdGVyaWFsIGZyb20gQVNJQy4KKworICAgIFJldHVybjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEFzaWNSZW1vdmVQYWlyd2lzZUtleUVudHJ5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSCQkgQnNzSWR4LAorCUlOIFVDSEFSCQkgV2NpZCkKK3sKKwlVTE9ORwkJV0NJREF0dHJpOworCVVTSE9SVAkJb2Zmc2V0OworCisJLy8gcmUtc2V0IHRoZSBlbnRyeSdzIFdDSUQgYXR0cmlidXRlIGFzIE9QRU4tTk9ORS4KKwlvZmZzZXQgPSBNQUNfV0NJRF9BVFRSSUJVVEVfQkFTRSArIChXY2lkICogSFdfV0NJRF9BVFRSSV9TSVpFKTsKKwlXQ0lEQXR0cmkgPSAoQnNzSWR4PDw0KSB8IFBBSVJXSVNFS0VZVEFCTEU7CisJUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0LCBXQ0lEQXR0cmkpOworfQorCitCT09MRUFOIEFzaWNTZW5kQ29tbWFuZFRvTWN1KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSCQkgQ29tbWFuZCwKKwlJTiBVQ0hBUgkJIFRva2VuLAorCUlOIFVDSEFSCQkgQXJnMCwKKwlJTiBVQ0hBUgkJIEFyZzEpCit7CisJSE9TVF9DTURfQ1NSX1NUUlVDCUgyTUNtZDsKKwlIMk1fTUFJTEJPWF9TVFJVQwlIMk1NYWlsYm94OworCVVMT05HCQkJCWkgPSAwOworCWRvCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEgyTV9NQUlMQk9YX0NTUiwgJkgyTU1haWxib3gud29yZCk7CisJCWlmIChIMk1NYWlsYm94LmZpZWxkLk93bmVyID09IDApCisJCQlicmVhazsKKworCQlSVE1QdXNlY0RlbGF5KDIpOworCX0gd2hpbGUoaSsrIDwgMTAwKTsKKworCWlmIChpID49IDEwMCkKKwl7CisJCXsKKwkJREJHUFJJTlRfRVJSKCgiSDJNX01BSUxCT1ggc3RpbGwgaG9sZCBieSBNQ1UuIGNvbW1hbmQgZmFpbFxuIikpOworCQl9CisJCXJldHVybiBGQUxTRTsKKwl9CisKKworCUgyTU1haWxib3guZmllbGQuT3duZXIJICA9IDE7CSAgIC8vIHBhc3Mgb3duZXJzaGlwIHRvIE1DVQorCUgyTU1haWxib3guZmllbGQuQ21kVG9rZW4gPSBUb2tlbjsKKwlIMk1NYWlsYm94LmZpZWxkLkhpZ2hCeXRlID0gQXJnMTsKKwlIMk1NYWlsYm94LmZpZWxkLkxvd0J5dGUgID0gQXJnMDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBIMk1fTUFJTEJPWF9DU1IsIEgyTU1haWxib3gud29yZCk7CisKKwlIMk1DbWQud29yZCAJCQkgID0gMDsKKwlIMk1DbWQuZmllbGQuSG9zdENvbW1hbmQgID0gQ29tbWFuZDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBIT1NUX0NNRF9DU1IsIEgyTUNtZC53b3JkKTsKKworCWlmIChDb21tYW5kICE9IDB4ODApCisJeworCX0KKworCXJldHVybiBUUlVFOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlWZXJpZnkgdGhlIHN1cHBvcnQgcmF0ZSBmb3IgZGlmZmVyZW50IFBIWSB0eXBlCisKKwlBcmd1bWVudHM6CisJCXBBZCAJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QQ2hlY2tSYXRlcygKKwlJTgkJUFJUTVBfQURBUFRFUglwQWQsCisJSU4gT1VUCVVDSEFSCQkJU3VwUmF0ZVtdLAorCUlOIE9VVAlVQ0hBUgkJCSpTdXBSYXRlTGVuKQoreworCVVDSEFSCVJhdGVJZHgsIGksIGo7CisJVUNIQVIJTmV3UmF0ZVsxMl0sIE5ld1JhdGVMZW47CisKKwlOZXdSYXRlTGVuID0gMDsKKworCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUIpCisJCVJhdGVJZHggPSA0OworCWVsc2UKKwkJUmF0ZUlkeCA9IDEyOworCisJLy8gQ2hlY2sgZm9yIHN1cHBvcnQgcmF0ZXMgZXhjbHVkZSBiYXNpYyByYXRlIGJpdAorCWZvciAoaSA9IDA7IGkgPCAqU3VwUmF0ZUxlbjsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgUmF0ZUlkeDsgaisrKQorCQkJaWYgKChTdXBSYXRlW2ldICYgMHg3ZikgPT0gUmF0ZUlkVG81MDBLYnBzW2pdKQorCQkJCU5ld1JhdGVbTmV3UmF0ZUxlbisrXSA9IFN1cFJhdGVbaV07CisKKwkqU3VwUmF0ZUxlbiA9IE5ld1JhdGVMZW47CisJTmRpc01vdmVNZW1vcnkoU3VwUmF0ZSwgTmV3UmF0ZSwgTmV3UmF0ZUxlbik7Cit9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK0JPT0xFQU4gUlRNUENoZWNrQ2hhbm5lbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUgkJQ2VudHJhbENoYW5uZWwsCisJSU4gVUNIQVIJCUNoYW5uZWwpCit7CisJVUNIQVIJCWs7CisJVUNIQVIJCVVwcGVyQ2hhbm5lbCA9IDAsIExvd2VyQ2hhbm5lbCA9IDA7CisJVUNIQVIJCU5vRWZmZWN0Q2hhbm5lbGluTGlzdCA9IDA7CisKKwkvLyBGaW5kIHVwcGVyIGFuZCBsb3dlciBjaGFubmVsIGFjY29yZGluZyB0byA0ME1IeiBjdXJyZW50IG9wZXJhdGlvbi4KKwlpZiAoQ2VudHJhbENoYW5uZWwgPCBDaGFubmVsKQorCXsKKwkJVXBwZXJDaGFubmVsID0gQ2hhbm5lbDsKKwkJaWYgKENlbnRyYWxDaGFubmVsID4gMikKKwkJCUxvd2VyQ2hhbm5lbCA9IENlbnRyYWxDaGFubmVsIC0gMjsKKwkJZWxzZQorCQkJcmV0dXJuIEZBTFNFOworCX0KKwllbHNlIGlmIChDZW50cmFsQ2hhbm5lbCA+IENoYW5uZWwpCisJeworCQlVcHBlckNoYW5uZWwgPSBDZW50cmFsQ2hhbm5lbCArIDI7CisJCUxvd2VyQ2hhbm5lbCA9IENoYW5uZWw7CisJfQorCisJZm9yIChrID0gMDtrIDwgcEFkLT5DaGFubmVsTGlzdE51bTtrKyspCisJeworCQlpZiAocEFkLT5DaGFubmVsTGlzdFtrXS5DaGFubmVsID09IFVwcGVyQ2hhbm5lbCkKKwkJeworCQkJTm9FZmZlY3RDaGFubmVsaW5MaXN0ICsrOworCQl9CisJCWlmIChwQWQtPkNoYW5uZWxMaXN0W2tdLkNoYW5uZWwgPT0gTG93ZXJDaGFubmVsKQorCQl7CisJCQlOb0VmZmVjdENoYW5uZWxpbkxpc3QgKys7CisJCX0KKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlRvdGFsIENoYW5uZWwgaW4gQ2hhbm5lbCBMaXN0ID0gWyVkXVxuIiwgTm9FZmZlY3RDaGFubmVsaW5MaXN0KSk7CisJaWYgKE5vRWZmZWN0Q2hhbm5lbGluTGlzdCA9PSAyKQorCQlyZXR1cm4gVFJVRTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVZlcmlmeSB0aGUgc3VwcG9ydCByYXRlIGZvciBIVCBwaHkgdHlwZQorCisJQXJndW1lbnRzOgorCQlwQWQgCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJRkFMU0UgaWYgcEFkLT5Db21tb25DZmcuU3VwcG9ydGVkSHRQaHkgZG9lc24ndCBhY2NlcHQgdGhlIHBIdENhcGFiaWxpdHkuICAoQVAgTW9kZSkKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOIAlSVE1QQ2hlY2tIdCgKKwlJTglQUlRNUF9BREFQVEVSCQkJcEFkLAorCUlOCVVDSEFSCQkJCQlXY2lkLAorCUlOIAlIVF9DQVBBQklMSVRZX0lFCQkqcEh0Q2FwYWJpbGl0eSwKKwlJTiAJQUREX0hUX0lORk9fSUUJCQkqcEFkZEh0SW5mbykKK3sKKwlpZiAoV2NpZCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuIEZBTFNFOworCisJLy8gSWYgdXNlIEFNU0RVLCBzZXQgZmxhZy4KKwlpZiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1RW5hYmxlKQorCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLCBmQ0xJRU5UX1NUQVRVU19BTVNEVV9JTlVTRUQpOworCS8vIFNhdmUgUGVlciBDYXBhYmlsaXR5CisJaWYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApCisJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcoJnBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0sIGZDTElFTlRfU1RBVFVTX1NHSTIwX0NBUEFCTEUpOworCWlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjQwKQorCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLCBmQ0xJRU5UX1NUQVRVU19TR0k0MF9DQVBBQkxFKTsKKwlpZiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlR4U1RCQykKKwkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRygmcEFkLT5NYWNUYWIuQ29udGVudFtXY2lkXSwgZkNMSUVOVF9TVEFUVVNfVHhTVEJDX0NBUEFCTEUpOworCWlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uUnhTVEJDKQorCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLCBmQ0xJRU5UX1NUQVRVU19SeFNUQkNfQ0FQQUJMRSk7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJSZGcgJiYgcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvLlJER1N1cHBvcnQpCisJeworCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKCZwQWQtPk1hY1RhYi5Db250ZW50W1djaWRdLCBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRSk7CisJfQorCisJaWYgKFdjaWQgPCBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwl7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uTXBkdURlbnNpdHkgPSBwSHRDYXBhYmlsaXR5LT5IdENhcFBhcm0uTXBkdURlbnNpdHk7CisJfQorCisJLy8gV2lsbCBjaGVjayBDaGFubmVsV2lkdGggZm9yIE1DU1NldFs0XSBiZWxvdworCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzRdID0gMHgxOworICAgIHN3aXRjaCAocEFkLT5Db21tb25DZmcuUnhTdHJlYW0pCisJeworCQljYXNlIDE6CisJCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFswXSA9IDB4ZmY7CisJCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9IDB4MDA7CisgICAgICAgICAgICBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFsyXSA9IDB4MDA7CisgICAgICAgICAgICBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lk1DU1NldFszXSA9IDB4MDA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMF0gPSAweGZmOworCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMV0gPSAweGZmOworICAgICAgICAgICAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMl0gPSAweDAwOworICAgICAgICAgICAgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5NQ1NTZXRbM10gPSAweDAwOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzBdID0gMHhmZjsKKwkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzFdID0gMHhmZjsKKyAgICAgICAgICAgIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzJdID0gMHhmZjsKKyAgICAgICAgICAgIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzNdID0gMHgwMDsKKwkJCWJyZWFrOworCX0KKworCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCA9IHBBZGRIdEluZm8tPkFkZEh0SW5mby5SZWNvbVdpZHRoICYgcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aDsKKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBDaGVja0h0OjogSHRDYXBJbmZvLkNoYW5uZWxXaWR0aD0lZCwgUmVjb21XaWR0aD0lZCwgRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aD0lZCwgQlc0ME1BdmFpbEZvckEvRz0lZC8lZCwgUGh5TW9kZT0lZCBcbiIsCisJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCwgcEFkZEh0SW5mby0+QWRkSHRJbmZvLlJlY29tV2lkdGgsIHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5DaGFubmVsV2lkdGgsCisJCXBBZC0+TmljQ29uZmlnMi5maWVsZC5CVzQwTUF2YWlsRm9yQSwgcEFkLT5OaWNDb25maWcyLmZpZWxkLkJXNDBNQXZhaWxGb3JHLCBwQWQtPkNvbW1vbkNmZy5QaHlNb2RlKSk7CisKKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5HRiA9ICBwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uR0YgJnBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5HRjsKKworCS8vIFNlbmQgQXNzb2MgUmVxIHdpdGggbXkgSFQgY2FwYWJpbGl0eS4KKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5BTXNkdVNpemUgPSAgcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1U2l6ZTsKKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5NaW1vUHMgPSAgcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1pbW9QczsKKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjAgPSAgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yMjApICYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApOworCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3I0MCA9ICAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3I0MCkgJiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlNob3J0R0lmb3I0MCk7CisJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uVHhTVEJDID0gIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuVHhTVEJDKSYocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlJ4U1RCQyk7CisJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uUnhTVEJDID0gIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuUnhTVEJDKSYocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlR4U1RCQyk7CisJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTWF4UkFtcGR1RmFjdG9yID0gcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1heFJBbXBkdUZhY3RvcjsKKyAgICBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NcGR1RGVuc2l0eSA9IHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTXBkdURlbnNpdHk7CisJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUGx1c0hUQyA9IHBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mby5QbHVzSFRDOworCXBBZC0+TWFjVGFiLkNvbnRlbnRbV2NpZF0uSFRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5QbHVzSFRDID0gcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvLlBsdXNIVEM7CisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJSZGcpCisJeworCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5SREdTdXBwb3J0ID0gcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvLlJER1N1cHBvcnQ7CisgICAgICAgIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlBsdXNIVEMgPSAxOworCX0KKworICAgIGlmIChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfMjApCisgICAgICAgIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuTUNTU2V0WzRdID0gMHgwOyAgLy8gQlcyMCBjYW4ndCB0cmFuc21pdCBNQ1MzMgorCisJQ09QWV9BUF9IVFNFVFRJTkdTX0ZST01fQkVBQ09OKHBBZCwgcEh0Q2FwYWJpbGl0eSk7CisJcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlWZXJpZnkgdGhlIHN1cHBvcnQgcmF0ZSBmb3IgZGlmZmVyZW50IFBIWSB0eXBlCisKKwlBcmd1bWVudHM6CisJCXBBZCAJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QVXBkYXRlTWxtZVJhdGUoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUNIQVIJTWluaW11bVJhdGU7CisJVUNIQVIJUHJvcGVyTWxtZVJhdGU7IC8vPSBSQVRFXzU0OworCVVDSEFSCWksIGosIFJhdGVJZHggPSAxMjsgLy8xLCAyLCA1LjUsIDExLCA2LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0CisJQk9PTEVBTgliTWF0Y2ggPSBGQUxTRTsKKworCXN3aXRjaCAocEFkLT5Db21tb25DZmcuUGh5TW9kZSkKKwl7CisJCWNhc2UgUEhZXzExQjoKKwkJCVByb3Blck1sbWVSYXRlID0gUkFURV8xMTsKKwkJCU1pbmltdW1SYXRlID0gUkFURV8xOworCQkJYnJlYWs7CisJCWNhc2UgUEhZXzExQkdfTUlYRUQ6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUEhZXzExQUJHTl9NSVhFRDoKKwkJY2FzZSBQSFlfMTFCR05fTUlYRUQ6CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQlpZiAoKHBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuID09IDQpICYmCisJCQkJKHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuID09IDApKQorCQkJCS8vIEIgb25seSBBUAorCQkJCVByb3Blck1sbWVSYXRlID0gUkFURV8xMTsKKwkJCWVsc2UKKwkJCQlQcm9wZXJNbG1lUmF0ZSA9IFJBVEVfMjQ7CisKKwkJCWlmIChwQWQtPk1sbWVBdXguQ2hhbm5lbCA8PSAxNCkKKwkJCQlNaW5pbXVtUmF0ZSA9IFJBVEVfMTsKKwkJCWVsc2UKKwkJCQlNaW5pbXVtUmF0ZSA9IFJBVEVfNjsKKwkJCWJyZWFrOworCQljYXNlIFBIWV8xMUE6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUEhZXzExTl8yXzRHOgkvLyBydDI4NjAgbmVlZCB0byBjaGVjayBtbG1lcmF0ZSBmb3IgODAyLjExbgorCQljYXNlIFBIWV8xMUdOX01JWEVEOgorCQljYXNlIFBIWV8xMUFHTl9NSVhFRDoKKwkJY2FzZSBQSFlfMTFBTl9NSVhFRDoKKwkJY2FzZSBQSFlfMTFOXzVHOgorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJUHJvcGVyTWxtZVJhdGUgPSBSQVRFXzI0OworCQkJTWluaW11bVJhdGUgPSBSQVRFXzY7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfMTFBQkdfTUlYRUQ6CisJCQlQcm9wZXJNbG1lUmF0ZSA9IFJBVEVfMjQ7CisJCQlpZiAocEFkLT5NbG1lQXV4LkNoYW5uZWwgPD0gMTQpCisJCQkgICBNaW5pbXVtUmF0ZSA9IFJBVEVfMTsKKwkJCWVsc2UKKwkJCQlNaW5pbXVtUmF0ZSA9IFJBVEVfNjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OiAvLyBlcnJvcgorCQkJUHJvcGVyTWxtZVJhdGUgPSBSQVRFXzE7CisJCQlNaW5pbXVtUmF0ZSA9IFJBVEVfMTsKKwkJCWJyZWFrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbjsgaSsrKQorCXsKKwkJZm9yIChqID0gMDsgaiA8IFJhdGVJZHg7IGorKykKKwkJeworCQkJaWYgKChwQWQtPk1sbWVBdXguU3VwUmF0ZVtpXSAmIDB4N2YpID09IFJhdGVJZFRvNTAwS2Jwc1tqXSkKKwkJCXsKKwkJCQlpZiAoaiA9PSBQcm9wZXJNbG1lUmF0ZSkKKwkJCQl7CisJCQkJCWJNYXRjaCA9IFRSVUU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChiTWF0Y2gpCisJCQlicmVhazsKKwl9CisKKwlpZiAoYk1hdGNoID09IEZBTFNFKQorCXsKKwkJZm9yIChpID0gMDsgaSA8IHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuOyBpKyspCisJCXsKKwkJCWZvciAoaiA9IDA7IGogPCBSYXRlSWR4OyBqKyspCisJCQl7CisJCQkJaWYgKChwQWQtPk1sbWVBdXguRXh0UmF0ZVtpXSAmIDB4N2YpID09IFJhdGVJZFRvNTAwS2Jwc1tqXSkKKwkJCQl7CisJCQkJCWlmIChqID09IFByb3Blck1sbWVSYXRlKQorCQkJCQl7CisJCQkJCQliTWF0Y2ggPSBUUlVFOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChiTWF0Y2gpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoYk1hdGNoID09IEZBTFNFKQorCXsKKwkJUHJvcGVyTWxtZVJhdGUgPSBNaW5pbXVtUmF0ZTsKKwl9CisKKwlwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZSA9IE1pbmltdW1SYXRlOworCXBBZC0+Q29tbW9uQ2ZnLlJ0c1JhdGUgPSBQcm9wZXJNbG1lUmF0ZTsKKwlpZiAocEFkLT5Db21tb25DZmcuTWxtZVJhdGUgPj0gUkFURV82KQorCXsKKwkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZV07CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTME1jYXN0X1dDSURdLkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTUzBNY2FzdF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEFkLT5Db21tb25DZmcuTWxtZVJhdGVdOworCX0KKwllbHNlCisJeworCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTID0gcEFkLT5Db21tb25DZmcuTWxtZVJhdGU7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTME1jYXN0X1dDSURdLkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTME1jYXN0X1dDSURdLkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZTsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QVXBkYXRlTWxtZVJhdGUgPT0+ICAgTWxtZVRyYW5zbWl0ID0gMHgleCAgXG4iICwgcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LndvcmQpKTsKK30KKworQ0hBUiBSVE1QTWF4UnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBDSEFSCQkJCVJzc2kwLAorCUlOIENIQVIJCQkJUnNzaTEsCisJSU4gQ0hBUgkJCQlSc3NpMikKK3sKKwlDSEFSCWxhcmdlciA9IC0xMjc7CisKKwlpZiAoKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkgJiYgKFJzc2kwICE9IDApKQorCXsKKwkJbGFyZ2VyID0gUnNzaTA7CisJfQorCisJaWYgKChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID49IDIpICYmIChSc3NpMSAhPSAwKSkKKwl7CisJCWxhcmdlciA9IG1heChSc3NpMCwgUnNzaTEpOworCX0KKworCWlmICgocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAzKSAmJiAoUnNzaTIgIT0gMCkpCisJeworCQlsYXJnZXIgPSBtYXgobGFyZ2VyLCBSc3NpMik7CisJfQorCisJaWYgKGxhcmdlciA9PSAtMTI3KQorCQlsYXJnZXIgPSAwOworCisJcmV0dXJuIGxhcmdlcjsKK30KKworCisvLyBBbnRlbm5hIGRpdmVzaXR5IHVzZSBHUElPMyBhbmQgRUVTSyBwaW4gZm9yIGNvbnRyb2wKKy8vIEFudGVubmEgYW5kIEVFUFJPTSBhY2Nlc3MgYXJlIGJvdGggdXNpbmcgRUVTSyBwaW4sCisvLyBUaGVyZWZvciB3ZSBzaG91bGQgYXZvaWQgYWNjZXNzaW5nIEVFU0sgYXQgdGhlIHNhbWUgdGltZQorLy8gVGhlbiByZXN0b3JlIGFudGVubmEgYWZ0ZXIgRUVQUk9NIGFjY2VzcworVk9JRCBBc2ljU2V0UnhBbnQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUNIQVIJCQlBbnQpCit7CisjaWZkZWYgUlQzMHh4CisJVUlOVDMyCVZhbHVlOworCVVJTlQzMgl4OworCisJaWYgKChwQWQtPkVlcHJvbUFjY2VzcykJCQkJCQkJCQkJfHwKKwkJKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpCXx8CisJCShSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpCXx8CisJCShSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGKSkJCQl8fAorCQkoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkKKwl7CisJCXJldHVybjsKKwl9CisKKwkvLyB0aGUgYW50ZW5uYSBzZWxlY3Rpb24gaXMgdGhyb3VnaCBmaXJtd2FyZSBhbmQgTUFDIHJlZ2lzdGVyKEdQSU8zKQorCWlmIChBbnQgPT0gMCkKKwl7CisJCS8vIE1haW4gYW50ZW5uYQorCQlSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZ4KTsKKwkJeCB8PSAoRUVTSyk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEUyUFJPTV9DU1IsIHgpOworCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgR1BJT19DVFJMX0NGRywgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigweDA4MDgpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBHUElPX0NUUkxfQ0ZHLCBWYWx1ZSk7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJBc2ljU2V0UnhBbnQsIHN3aXRjaCB0byBtYWluIGFudGVubmFcbiIpKTsKKwl9CisJZWxzZQorCXsKKwkJLy8gQXV4IGFudGVubmEKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmeCk7CisJCXggJj0gfihFRVNLKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRTJQUk9NX0NTUiwgeCk7CisKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBHUElPX0NUUkxfQ0ZHLCAmVmFsdWUpOworCQlWYWx1ZSAmPSB+KDB4MDgwOCk7CisJCVZhbHVlIHw9IDB4MDg7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEdQSU9fQ1RSTF9DRkcsIFZhbHVlKTsKKwkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIkFzaWNTZXRSeEFudCwgc3dpdGNoIHRvIGF1eCBhbnRlbm5hXG4iKSk7CisJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworfQorCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgUGVyaW9kaWMgZXZhbHVhdGUgYW50ZW5uYSBsaW5rIHN0YXR1cworCisgICAgQXJndW1lbnRzOgorICAgICAgICBwQWQgICAgICAgICAtIEFkYXB0ZXIgcG9pbnRlcgorCisgICAgUmV0dXJuIFZhbHVlOgorICAgICAgICBOb25lCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEFzaWNFdmFsdWF0ZVJ4QW50KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKQoreworCVVDSEFSCUJCUFIzID0gMDsKKworI2lmZGVmIFJBTElOS19BVEUKKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTCXwKKwkJCQkJCQlmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MJfAorCQkJCQkJCWZSVE1QX0FEQVBURVJfUkFESU9fT0ZGCQkJfAorCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVAkJfAorCQkJCQkJCWZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpIHx8CisJCQkJCQkJT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKQorI2lmZGVmIFJUMzB4eAorCQkJCQkJCXx8IChwQWQtPkVlcHJvbUFjY2VzcykKKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJCQkJCQkpCisJCXJldHVybjsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCS8vaWYgKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkKKwkJLy8JcmV0dXJuOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIHR3byBhbnRlbm5hIHNlbGVjdGlvbiBtZWNoYW5pc20tIG9uZSBpcyBhbnRlbm5hIGRpdmVyc2l0eSwgdGhlIG90aGVyIGlzIGZhaWxlZCBhbnRlbm5hIHJlbW92ZQorCS8vIG9uZSBpcyBhbnRlbm5hIGRpdmVyc2l0eTp0aGVyZSBpcyBvbmx5IG9uZSBhbnRlbm5hIGNhbiByeCBhbmQgdHgKKwkvLyB0aGUgb3RoZXIgaXMgZmFpbGVkIGFudGVubmEgcmVtb3ZlOnR3byBwaHlzaWNhbCBhbnRlbm5hIGNhbiByeCBhbmQgdHgKKwlpZiAocEFkLT5OaWNDb25maWcyLmZpZWxkLkFudERpdmVyc2l0eSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQW50RGl2IC0gYmVmb3JlIGV2YWx1YXRlIFBhaXIxLUFudCAoJWQsJWQpXG4iLAorCQkJcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudCwgcEFkLT5SeEFudC5QYWlyMVNlY29uZGFyeVJ4QW50KSk7CisKKwkJQXNpY1NldFJ4QW50KHBBZCwgcEFkLT5SeEFudC5QYWlyMVNlY29uZGFyeVJ4QW50KTsKKworCQlwQWQtPlJ4QW50LkV2YWx1YXRlUGVyaW9kID0gMTsgLy8gMTpNZWFucyBzd2l0Y2ggdG8gU2Vjb25kYXJ5UnhBbnQsIDA6TWVhbnMgc3dpdGNoIHRvIFBhaXIxUHJpbWFyeVJ4QW50CisJCXBBZC0+UnhBbnQuRmlyc3RQa3RBcnJpdmVkV2hlbkV2YWx1YXRlID0gRkFMU0U7CisJCXBBZC0+UnhBbnQuUmN2UGt0TnVtV2hlbkV2YWx1YXRlID0gMDsKKworCQkvLyBhIG9uZS1zaG90IHRpbWVyIHRvIGVuZCB0aGUgZXZhbHV0aW9uCisJCS8vIGR5bmFtaWMgYWRqdXN0IGFudGVubmEgZXZhbHVhdGlvbiBwZXJpb2QgYWNjb3JkaW5nIHRvIHRoZSB0cmFmZmljCisJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5SeEFudEV2YWxUaW1lciwgMTAwKTsKKwkJZWxzZQorCQkJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWUuUnhBbnRFdmFsVGltZXIsIDMwMCk7CisJfQorCWVsc2UKKwl7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJaWYgKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkKKwkJCXJldHVybjsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZCQlBSMyk7CisJCUJCUFIzICY9ICh+MHgxOCk7CisJCWlmKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMykKKwkJeworCQkJQkJQUjMgfD0gKDB4MTApOworCQl9CisJCWVsc2UgaWYocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAyKQorCQl7CisJCQlCQlBSMyB8PSAoMHg4KTsKKwkJfQorCQllbHNlIGlmKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJeworCQkJQkJQUjMgfD0gKDB4MCk7CisJCX0KKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQkJQUjMpOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpCisJCQkpCisJCXsKKwkJCVVMT05HCVR4VG90YWxDbnQgPSBwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKworCQkJCQkJCQkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeFJldHJ5T2tDb3VudCArCisJCQkJCQkJCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RmFpbENvdW50OworCisJCQkvLyBkeW5hbWljIGFkanVzdCBhbnRlbm5hIGV2YWx1YXRpb24gcGVyaW9kIGFjY29yZGluZyB0byB0aGUgdHJhZmZpYworCQkJaWYgKFR4VG90YWxDbnQgPiA1MCkKKwkJCXsKKwkJCQlSVE1QU2V0VGltZXIoJnBBZC0+TWxtZS5SeEFudEV2YWxUaW1lciwgMjApOworCQkJCXBBZC0+TWxtZS5iTG93VGhyb3VnaHB1dCA9IEZBTFNFOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lLlJ4QW50RXZhbFRpbWVyLCAzMDApOworCQkJCXBBZC0+TWxtZS5iTG93VGhyb3VnaHB1dCA9IFRSVUU7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgQWZ0ZXIgZXZhbHVhdGlvbiwgY2hlY2sgYW50ZW5uYSBsaW5rIHN0YXR1cworCisgICAgQXJndW1lbnRzOgorICAgICAgICBwQWQgICAgICAgICAtIEFkYXB0ZXIgcG9pbnRlcgorCisgICAgUmV0dXJuIFZhbHVlOgorICAgICAgICBOb25lCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIEFzaWNSeEFudEV2YWxUaW1lb3V0KAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKwlSVE1QX0FEQVBURVIJKnBBZCA9IChSVE1QX0FEQVBURVIgKilGdW5jdGlvbkNvbnRleHQ7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJVUNIQVIJCQlCQlBSMyA9IDA7CisJQ0hBUgkJCWxhcmdlciA9IC0xMjcsIHJzc2kwLCByc3NpMSwgcnNzaTI7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBSQUxJTktfQVRFCisJaWYgKEFURV9PTihwQWQpKQorCQlyZXR1cm47CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUwl8CisJCQkJCQkJZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTCXwKKwkJCQkJCQlmUlRNUF9BREFQVEVSX1JBRElPX09GRgkJCXwKKwkJCQkJCQlmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpIHx8CisJCQkJCQkJT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19ET1pFKQorI2lmZGVmIFJUMzB4eAorCQkJCQkJCXx8IChwQWQtPkVlcHJvbUFjY2VzcykKKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJCQkJCQkpCisJCXJldHVybjsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCS8vaWYgKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkKKwkJLy8JcmV0dXJuOworCisJCWlmIChwQWQtPk5pY0NvbmZpZzIuZmllbGQuQW50RGl2ZXJzaXR5KQorCQl7CisJCQlpZiAoKHBBZC0+UnhBbnQuUmN2UGt0TnVtV2hlbkV2YWx1YXRlICE9IDApICYmIChwQWQtPlJ4QW50LlBhaXIxQXZnUnNzaVtwQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnRdID49IHBBZC0+UnhBbnQuUGFpcjFBdmdSc3NpW3BBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnRdKSkKKwkJCXsKKwkJCQlVQ0hBUgkJCXRlbXA7CisKKwkJCQkvLworCQkJCS8vIHNlbGVjdCBQcmltYXJ5UnhBbnRQYWlyCisJCQkJLy8gICAgUm9sZSBjaGFuZ2UsIFVzZWQgUGFpcjFTZWNvbmRhcnlSeEFudCBhcyBQcmltYXJ5UnhBbnRQYWlyLgorCQkJCS8vICAgIFNpbmNlIFBhaXIxU2Vjb25kYXJ5UnhBbnQgUXVhbGl0eSBnb29kIHRoYW4gUGFpcjFQcmltYXJ5UnhBbnQKKwkJCQkvLworCQkJCXRlbXAgPSBwQWQtPlJ4QW50LlBhaXIxUHJpbWFyeVJ4QW50OworCQkJCXBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQgPSBwQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnQ7CisJCQkJcEFkLT5SeEFudC5QYWlyMVNlY29uZGFyeVJ4QW50ID0gdGVtcDsKKworCQkJCXBBZC0+UnhBbnQuUGFpcjFMYXN0QXZnUnNzaSA9IChwQWQtPlJ4QW50LlBhaXIxQXZnUnNzaVtwQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnRdID4+IDMpOworCQkJCXBBZC0+UnhBbnQuRXZhbHVhdGVTdGFibGVDbnQgPSAwOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIGlmIHRoZSBldmFsdWF0ZWQgYW50ZW5uYSBpcyBub3QgYmV0dGVyIHRoYW4gb3JpZ2luYWwsIHN3aXRjaCBiYWNrIHRvIG9yaWdpbmFsIGFudGVubmEKKwkJCQlBc2ljU2V0UnhBbnQocEFkLCBwQWQtPlJ4QW50LlBhaXIxUHJpbWFyeVJ4QW50KTsKKwkJCQlwQWQtPlJ4QW50LkV2YWx1YXRlU3RhYmxlQ250ICsrOworCQkJfQorCisJCQlwQWQtPlJ4QW50LkV2YWx1YXRlUGVyaW9kID0gMDsgLy8gMTpNZWFucyBzd2l0Y2ggdG8gU2Vjb25kYXJ5UnhBbnQsIDA6TWVhbnMgc3dpdGNoIHRvIFBhaXIxUHJpbWFyeVJ4QW50CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQXNpY1J4QW50RXZhbEFjdGlvbjo6QWZ0ZXIgRXZhbChmaXggaW4gIyVkKSwgPCVkLCAlZD4sIFJjdlBrdE51bVdoZW5FdmFsdWF0ZT0lbGRcbiIsCisJCQkJCXBBZC0+UnhBbnQuUGFpcjFQcmltYXJ5UnhBbnQsIChwQWQtPlJ4QW50LlBhaXIxQXZnUnNzaVswXSA+PiAzKSwgKHBBZC0+UnhBbnQuUGFpcjFBdmdSc3NpWzFdID4+IDMpLCBwQWQtPlJ4QW50LlJjdlBrdE51bVdoZW5FdmFsdWF0ZSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkKKwkJCQlyZXR1cm47CisKKwkJCS8vIGlmIHRoZSB0cmFmZmljIGlzIGxvdywgdXNlIGF2ZXJhZ2UgcnNzaSBhcyB0aGUgY3JpdGVyaWEKKwkJCWlmIChwQWQtPk1sbWUuYkxvd1Rocm91Z2hwdXQgPT0gVFJVRSkKKwkJCXsKKwkJCQlyc3NpMCA9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwOworCQkJCXJzc2kxID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTE7CisJCQkJcnNzaTIgPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlyc3NpMCA9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTA7CisJCQkJcnNzaTEgPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kxOworCQkJCXJzc2kyID0gcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMjsKKwkJCX0KKworCQkJaWYocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAzKQorCQkJeworCQkJCWxhcmdlciA9IG1heChyc3NpMCwgcnNzaTEpOworCisJCQkJaWYgKGxhcmdlciA+IChyc3NpMiArIDIwKSkKKwkJCQkJcEFkLT5NbG1lLlJlYWxSeFBhdGggPSAyOworCQkJCWVsc2UKKwkJCQkJcEFkLT5NbG1lLlJlYWxSeFBhdGggPSAzOworCQkJfQorCQkJZWxzZSBpZihwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDIpCisJCQl7CisJCQkJaWYgKHJzc2kwID4gKHJzc2kxICsgMjApKQorCQkJCQlwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9IDE7CisJCQkJZWxzZQorCQkJCQlwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9IDI7CisJCQl9CisKKwkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJCUFIzKTsKKwkJCUJCUFIzICY9ICh+MHgxOCk7CisJCQlpZihwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9PSAzKQorCQkJeworCQkJCUJCUFIzIHw9ICgweDEwKTsKKwkJCX0KKwkJCWVsc2UgaWYocEFkLT5NbG1lLlJlYWxSeFBhdGggPT0gMikKKwkJCXsKKwkJCQlCQlBSMyB8PSAoMHg4KTsKKwkJCX0KKwkJCWVsc2UgaWYocEFkLT5NbG1lLlJlYWxSeFBhdGggPT0gMSkKKwkJCXsKKwkJCQlCQlBSMyB8PSAoMHgwKTsKKwkJCX0KKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIEJCUFIzKTsKKwkJfQorCX0KKworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCit9CisKKworCitWT0lEIEFQU0RQZXJpb2RpY0V4ZWMoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCVJUTVBfQURBUFRFUiAqcEFkID0gKFJUTVBfQURBUFRFUiAqKUZ1bmN0aW9uQ29udGV4dDsKKworCWlmICghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQorCQlyZXR1cm47CisKKwlwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyVGltZXJDb3VudCsrOworCisvLyBEcml2ZXIgc2hvdWxkIG5vdCBzZW5kIHRyaWdnZXIgZnJhbWUsIGl0IHNob3VsZCBiZSBzZW5kIGJ5IGFwcGxpY2F0aW9uIGxheWVyCisvKgorCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQVBTRENhcGFibGUKKwkJJiYgKHBBZC0+Q29tbW9uQ2ZnLmJOZWVkU2VuZFRyaWdnZXJGcmFtZSB8fAorCQkoKChwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyVGltZXJDb3VudCUyMCkgPT0gMTkpICYmICghcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CRSB8fCAhcEFkLT5Db21tb25DZmcuYkFQU0RBQ19CSyB8fCAhcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WSSB8fCAhcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WTykpKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU2VuZGluZyB0cmlnZ2VyIGZyYW1lIGFuZCBlbnRlciBzZXJ2aWNlIHBlcmlvZCB3aGVuIHN1cHBvcnQgQVBTRFxuIikpOworCQlSVE1QU2VuZE51bGxGcmFtZShwQWQsIHBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSwgVFJVRSk7CisJCXBBZC0+Q29tbW9uQ2ZnLmJOZWVkU2VuZFRyaWdnZXJGcmFtZSA9IEZBTFNFOworCQlwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyVGltZXJDb3VudCA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLmJJblNlcnZpY2VQZXJpb2QgPSBUUlVFOworCX0qLworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgICAgIFNldC9yZXNldCBNQUMgcmVnaXN0ZXJzIGFjY29yZGluZyB0byBiUGlnZ3lCYWNrIHBhcmFtZXRlcgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBwQWQgICAgICAgICAtIEFkYXB0ZXIgcG9pbnRlcgorICAgICAgICBiUGlnZ3lCYWNrICAtIEVuYWJsZSAvIERpc2FibGUgUGlnZ3ktQmFjaworCisgICAgUmV0dXJuIFZhbHVlOgorICAgICAgICBOb25lCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBTZXRQaWdneUJhY2soCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gQk9PTEVBTiAgICAgICAgICBiUGlnZ3lCYWNrKQoreworCVRYX0xJTktfQ0ZHX1NUUlVDICBUeExpbmtDZmc7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0xJTktfQ0ZHLCAmVHhMaW5rQ2ZnLndvcmQpOworCisJVHhMaW5rQ2ZnLmZpZWxkLlR4Q0ZBY2tFbiA9IGJQaWdneUJhY2s7CisJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfTElOS19DRkcsIFR4TGlua0NmZy53b3JkKTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgICAgICBjaGVjayBpZiB0aGlzIGVudHJ5IG5lZWQgdG8gc3dpdGNoIHJhdGUgYXV0b21hdGljYWxseQorCisgICAgQXJndW1lbnRzOgorICAgICAgICBwQWQKKyAgICAgICAgcEVudHJ5CisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIFRVUkUKKyAgICAgICAgRkFMU0UKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4gUlRNUENoZWNrRW50cnlFbmFibGVBdXRvUmF0ZVN3aXRjaCgKKwlJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCXBFbnRyeSkKK3sKKwlCT09MRUFOCQlyZXN1bHQgPSBUUlVFOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gb25seSBhc3NvY2lhdGVkIFNUQSBjb3VudHMKKwkJaWYgKHBFbnRyeSAmJiAocEVudHJ5LT5WYWxpZEFzQ0xJKSAmJiAocEVudHJ5LT5Tc3QgPT0gU1NUX0FTU09DKSkKKwkJeworCQkJcmVzdWx0ID0gcEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2g7CisJCX0KKwkJZWxzZQorCQkJcmVzdWx0ID0gRkFMU0U7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKworCXJldHVybiByZXN1bHQ7Cit9CisKKworQk9PTEVBTiBSVE1QQXV0b1JhdGVTd2l0Y2hDaGVjaygKKwlJTiBQUlRNUF9BREFQVEVSICAgIHBBZCkKK3sKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAocEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2gpCisJCQlyZXR1cm4gVFJVRTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJcmV0dXJuIEZBTFNFOworfQorCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgY2hlY2sgaWYgdGhpcyBlbnRyeSBuZWVkIHRvIGZpeCB0eCBsZWdhY3kgcmF0ZQorCisgICAgQXJndW1lbnRzOgorICAgICAgICBwQWQKKyAgICAgICAgcEVudHJ5CisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIFRVUkUKKyAgICAgICAgRkFMU0UKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1VDSEFSIFJUTVBTdGFGaXhlZFR4TW9kZSgKKwlJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTiBQTUFDX1RBQkxFX0VOVFJZCXBFbnRyeSkKK3sKKwlVQ0hBUgl0eF9tb2RlID0gRklYRURfVFhNT0RFX0hUOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJdHhfbW9kZSA9IChVQ0hBUilwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCXJldHVybiB0eF9tb2RlOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgICAgIE92ZXJ3cml0ZSBIVCBUeCBNb2RlIGJ5IEZpeGVkIExlZ2VuY3kgVHggTW9kZSwgaWYgc3BlY2lmaWVkLgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBwQWQKKyAgICAgICAgcEVudHJ5CisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIFRVUkUKKyAgICAgICAgRkFMU0UKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUFVwZGF0ZUxlZ2FjeVR4U2V0dGluZygKKwkJVUNIQVIJCQkJZml4ZWRfdHhfbW9kZSwKKwkJUE1BQ19UQUJMRV9FTlRSWQlwRW50cnkpCit7CisJSFRUUkFOU01JVF9TRVRUSU5HIFRyYW5zbWl0U2V0dGluZzsKKworCWlmIChmaXhlZF90eF9tb2RlID09IEZJWEVEX1RYTU9ERV9IVCkKKwkJcmV0dXJuOworCisJVHJhbnNtaXRTZXR0aW5nLndvcmQgPSAwOworCisJVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1PREUgPSBwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFOworCVRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1M7CisKKwlpZiAoZml4ZWRfdHhfbW9kZSA9PSBGSVhFRF9UWE1PREVfQ0NLKQorCXsKKwkJVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJLy8gQ0NLIG1vZGUgYWxsb3cgTUNTIDB+MworCQlpZiAoVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA+IE1DU18zKQorCQkJVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU18zOworCX0KKwllbHNlCisJeworCQlUcmFuc21pdFNldHRpbmcuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJLy8gT0ZETSBtb2RlIGFsbG93IE1DUyAwfjcKKwkJaWYgKFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPiBNQ1NfNykKKwkJCVRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfNzsKKwl9CisKKwlpZiAocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA+PSBUcmFuc21pdFNldHRpbmcuZmllbGQuTU9ERSkKKwl7CisJCXBFbnRyeS0+SFRQaHlNb2RlLndvcmQgPSBUcmFuc21pdFNldHRpbmcud29yZDsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFVwZGF0ZUxlZ2FjeVR4U2V0dGluZyA6IHdjaWQtJWQsIE1PREU9JXMsIE1DUz0lZCBcbiIsCisJCQkJcEVudHJ5LT5BaWQsIEdldFBoeU1vZGUocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSksIHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUykpOworCX0KK30KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlkeW5hbWljIHR1bmUgQkJQIFI2NiB0byBmaW5kIGEgYmFsYW5jZSBiZXR3ZWVuIHNlbnNpYmlsaXR5IGFuZAorCQlub2lzZSBpc29sYXRpb24KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc2ljU3RhQmJwVHVuaW5nKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVDSEFSCU9yaWdSNjZWYWx1ZSA9IDAsIFI2NjsvLywgUjY2VXBwZXJCb3VuZCA9IDB4MzAsIFI2Nkxvd2VyQm91bmQgPSAweDMwOworCUNIQVIJUnNzaTsKKworCS8vIDI4NjBDIGRpZCBub3Qgc3VwcG9ydCBGYXNlIENDQSwgdGhlcmVmb3JlIGNhbid0IHR1bmUKKwlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCisJCXJldHVybjsKKworCS8vCisJLy8gd29yayBhcyBhIFNUQQorCS8vCisJaWYgKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0gQ05UTF9JRExFKSAgLy8gbm8gUjY2IHR1bmluZyB3aGVuIFNDQU5OSU5HCisJCXJldHVybjsKKworCWlmICgocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKwkJJiYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKQorCQkJKQorCQkmJiAhKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCisJCSkKKwl7CisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsICZPcmlnUjY2VmFsdWUpOworCQlSNjYgPSBPcmlnUjY2VmFsdWU7CisKKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPiAxKQorCQkJUnNzaSA9IChwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kwICsgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMSkgPj4gMTsKKwkJZWxzZQorCQkJUnNzaSA9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTA7CisKKwkJaWYgKHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCA8PSAxNCkKKwkJewkvL0JHIGJhbmQKKyNpZmRlZiBSVDMweHgKKwkJCS8vIFJUMzA3MCBpcyBhIG5vIExOQSBzb2x1dGlvbiwgaXQgc2hvdWxkIGhhdmUgZGlmZmVyZW50IGNvbnRyb2wgcmVnYXJkaW5nIHRvIEFHQyBnYWluIGNvbnRyb2wKKwkJCS8vIE90aGVyd2lzZSwgaXQgd2lsbCBoYXZlIHNvbWUgdGhyb3VnaHB1dCBzaWRlIGVmZmVjdCB3aGVuIGxvdyBSU1NJCisJCQlpZiAoSVNfUlQzMHh4KHBBZCkpCisJCQl7CisJCQkJaWYgKFJzc2kgPiBSU1NJX0ZPUl9NSURfTE9XX1NFTlNJQklMSVRZKQorCQkJCXsKKwkJCQkJUjY2ID0gMHgxQyArIDIqR0VUX0xOQV9HQUlOKHBBZCkgKyAweDIwOworCQkJCQlpZiAoT3JpZ1I2NlZhbHVlICE9IFI2NikKKwkJCQkJeworCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJUjY2ID0gMHgxQyArIDIqR0VUX0xOQV9HQUlOKHBBZCk7CisJCQkJCWlmIChPcmlnUjY2VmFsdWUgIT0gUjY2KQorCQkJCQl7CisJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJCXsKKwkJCQlpZiAoUnNzaSA+IFJTU0lfRk9SX01JRF9MT1dfU0VOU0lCSUxJVFkpCisJCQkJeworCQkJCQlSNjYgPSAoMHgyRSArIEdFVF9MTkFfR0FJTihwQWQpKSArIDB4MTA7CisJCQkJCWlmIChPcmlnUjY2VmFsdWUgIT0gUjY2KQorCQkJCQl7CisJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSNjYgPSAweDJFICsgR0VUX0xOQV9HQUlOKHBBZCk7CisJCQkJCWlmIChPcmlnUjY2VmFsdWUgIT0gUjY2KQorCQkJCQl7CisJCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQl9CisJCWVsc2UKKwkJewkvL0EgYmFuZAorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9PSBCV18yMCkKKwkJCXsKKwkJCQlpZiAoUnNzaSA+IFJTU0lfRk9SX01JRF9MT1dfU0VOU0lCSUxJVFkpCisJCQkJeworCQkJCQlSNjYgPSAweDMyICsgKEdFVF9MTkFfR0FJTihwQWQpKjUpLzMgKyAweDEwOworCQkJCQlpZiAoT3JpZ1I2NlZhbHVlICE9IFI2NikKKwkJCQkJeworCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJUjY2ID0gMHgzMiArIChHRVRfTE5BX0dBSU4ocEFkKSo1KS8zOworCQkJCQlpZiAoT3JpZ1I2NlZhbHVlICE9IFI2NikKKwkJCQkJeworCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKFJzc2kgPiBSU1NJX0ZPUl9NSURfTE9XX1NFTlNJQklMSVRZKQorCQkJCXsKKwkJCQkJUjY2ID0gMHgzQSArIChHRVRfTE5BX0dBSU4ocEFkKSo1KS8zICsgMHgxMDsKKwkJCQkJaWYgKE9yaWdSNjZWYWx1ZSAhPSBSNjYpCisJCQkJCXsKKwkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVI2NiA9IDB4M0EgKyAoR0VUX0xOQV9HQUlOKHBBZCkqNSkvMzsKKwkJCQkJaWYgKE9yaWdSNjZWYWx1ZSAhPSBSNjYpCisJCQkJCXsKKwkJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKworCX0KK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworVk9JRCBSVE1QU2V0QUdDSW5pdFZhbHVlKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVDSEFSCQkJQmFuZFdpZHRoKQoreworCVVDSEFSCVI2NiA9IDB4MzA7CisKKwlpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KQorCXsJLy8gQkcgYmFuZAorCQlSNjYgPSAweDJFICsgR0VUX0xOQV9HQUlOKHBBZCk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCX0KKwllbHNlCisJewkvL0EgYmFuZAorCQlpZiAoQmFuZFdpZHRoID09IEJXXzIwKQorCQl7CisJCQlSNjYgPSAoVUNIQVIpKDB4MzIgKyAoR0VUX0xOQV9HQUlOKHBBZCkqNSkvMyk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgUjY2KTsKKwkJfQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQllbHNlCisJCXsKKwkJCVI2NiA9IChVQ0hBUikoMHgzQSArIChHRVRfTE5BX0dBSU4ocEFkKSo1KS8zKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJfQorCit9CisKK1ZPSUQgQXNpY1R1cm5PZmZSRkNsaygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVQ0hBUgkJQ2hhbm5lbCkKK3sKKwkvLyBSRiBSMiBiaXQgMTggPSAwCisJVUlOVDMyCQkJUjEgPSAwLCBSMiA9IDAsIFIzID0gMDsKKwlVQ0hBUgkJCWluZGV4OworCVJUTVBfUkZfUkVHUwkqUkZSZWdUYWJsZTsKKworI2lmZGVmIFJUMzB4eAorCS8vIFRoZSBSRiBwcm9ncmFtbWluZyBzZXF1ZW5jZSBpcyBkaWZmZXJlbmNlIGJldHdlZW4gM3h4eCBhbmQgMnh4eAorCWlmIChJU19SVDMwOTAocEFkKSkKKwl7CisJCVJUMzB4eExvYWRSRlNsZWVwTW9kZVNldHVwKHBBZCk7ICAvLyBhZGQgYnkgam9obmxpLCAgUkYgcG93ZXIgc2VxdWVuY2Ugc2V0dXAsIGxvYWQgUkYgc2xlZXAtbW9kZSBzZXR1cAorCX0KKwllbHNlCisJeworI2VuZGlmIC8vIFJUMzB4eCAvLworCVJGUmVnVGFibGUgPSBSRjI4NTBSZWdUYWJsZTsKKworCXN3aXRjaCAocEFkLT5SZkljVHlwZSkKKwl7CisJCWNhc2UgUkZJQ18yODIwOgorCQljYXNlIFJGSUNfMjg1MDoKKwkJY2FzZSBSRklDXzI3MjA6CisJCWNhc2UgUkZJQ18yNzUwOgorCisJCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fT0ZfMjg1MF9DSE5MOyBpbmRleCsrKQorCQkJeworCQkJCWlmIChDaGFubmVsID09IFJGUmVnVGFibGVbaW5kZXhdLkNoYW5uZWwpCisJCQkJeworCQkJCQlSMSA9IFJGUmVnVGFibGVbaW5kZXhdLlIxICYgMHhmZmZmZGZmZjsKKwkJCQkJUjIgPSBSRlJlZ1RhYmxlW2luZGV4XS5SMiAmIDB4ZmZmYmZmZmY7CisJCQkJCVIzID0gUkZSZWdUYWJsZVtpbmRleF0uUjMgJiAweGZmZjNmZmZmOworCisJCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIFIxKTsKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgUjIpOworCisJCQkJCS8vIFByb2dyYW0gUjFiMTMgdG8gMSwgUjMvYjE4LDE5IHRvIDAsIFIyYjE4IHRvIDAuCisJCQkJCS8vIFNldCBSRiBSMiBiaXQxOD0wLCBSMyBiaXRbMTg6MTldPTAKKwkJCQkJLy9pZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IEZBTFNFKQorCQkJCQlpZiAoMSkKKwkJCQkJeworCQkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgUjMpOworCisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBc2ljVHVybk9mZlJGQ2xrIyVkKFJGPSVkLCApICwgUjI9MHglMDh4LCAgUjMgPSAweCUwOHggXG4iLAorCQkJCQkJCUNoYW5uZWwsIHBBZC0+UmZJY1R5cGUsIFIyLCBSMykpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFzaWNUdXJuT2ZmUkZDbGsjJWQoUkY9JWQsICkgLCBSMj0weCUwOHggXG4iLAorCQkJCQkJCUNoYW5uZWwsIHBBZC0+UmZJY1R5cGUsIFIyKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisjaWZkZWYgUlQzMHh4CisJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCit9CisKKworVk9JRCBBc2ljVHVybk9uUkZDbGsoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JVUNIQVIJCQlDaGFubmVsKQoreworCS8vIFJGIFIyIGJpdCAxOCA9IDAKKwlVSU5UMzIJCQlSMSA9IDAsIFIyID0gMCwgUjMgPSAwOworCVVDSEFSCQkJaW5kZXg7CisJUlRNUF9SRl9SRUdTCSpSRlJlZ1RhYmxlOworCisjaWZkZWYgUlQzMHh4CisJLy8gVGhlIFJGIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGRpZmZlcmVuY2UgYmV0d2VlbiAzeHh4IGFuZCAyeHh4CisJaWYgKElTX1JUMzA5MChwQWQpKQorCXsKKwl9CisJZWxzZQorCXsKKyNlbmRpZiAvLyBSVDMweHggLy8KKwlSRlJlZ1RhYmxlID0gUkYyODUwUmVnVGFibGU7CisKKwlzd2l0Y2ggKHBBZC0+UmZJY1R5cGUpCisJeworCQljYXNlIFJGSUNfMjgyMDoKKwkJY2FzZSBSRklDXzI4NTA6CisJCWNhc2UgUkZJQ18yNzIwOgorCQljYXNlIFJGSUNfMjc1MDoKKworCQkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTlVNX09GXzI4NTBfQ0hOTDsgaW5kZXgrKykKKwkJCXsKKwkJCQlpZiAoQ2hhbm5lbCA9PSBSRlJlZ1RhYmxlW2luZGV4XS5DaGFubmVsKQorCQkJCXsKKwkJCQkJUjMgPSBwQWQtPkxhdGNoUmZSZWdzLlIzOworCQkJCQlSMyAmPSAweGZmZjNmZmZmOworCQkJCQlSMyB8PSAweDAwMDgwMDAwOworCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBSMyk7CisKKwkJCQkJUjEgPSBSRlJlZ1RhYmxlW2luZGV4XS5SMTsKKwkJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgUjEpOworCisJCQkJCVIyID0gUkZSZWdUYWJsZVtpbmRleF0uUjI7CisJCQkJCWlmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpCisJCQkJCXsKKwkJCQkJCVIyIHw9IDB4NDAwMDsJLy8gSWYgVFhwYXRoIGlzIDEsIGJpdCAxNCA9IDE7CisJCQkJCX0KKworCQkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAyKQorCQkJCQl7CisJCQkJCQlSMiB8PSAweDQwOwkvLyB3cml0ZSAxIHRvIG9mZiBSeHBhdGguCisJCQkJCX0KKwkJCQkJZWxzZSBpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAxKQorCQkJCQl7CisJCQkJCQlSMiB8PSAweDIwMDQwOwkvLyB3cml0ZSAxIHRvIG9mZiBSeFBhdGgKKwkJCQkJfQorCQkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBSMik7CisKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworI2lmZGVmIFJUMzB4eAorCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9uZXRpZl9ibG9jay5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vbmV0aWZfYmxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzczYzExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vbmV0aWZfYmxvY2suYwpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorI2luY2x1ZGUgIm5ldGlmX2Jsb2NrLmgiCisKK3N0YXRpYyBORVRJRl9FTlRSWSBmcmVlTmV0SWZFbnRyeVBvb2xbRlJFRV9ORVRJRl9QT09MX1NJWkVdOworc3RhdGljIExJU1RfSEVBREVSIGZyZWVOZXRJZkVudHJ5TGlzdDsKKwordm9pZCBpbml0YmxvY2tRdWV1ZVRhYigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlpbnQgaTsKKworCWluaXRMaXN0KCZmcmVlTmV0SWZFbnRyeUxpc3QpOworCWZvciAoaSA9IDA7IGkgPCBGUkVFX05FVElGX1BPT0xfU0laRTsgaSsrKQorCQlpbnNlcnRUYWlsTGlzdCgmZnJlZU5ldElmRW50cnlMaXN0LCAoUExJU1RfRU5UUlkpJmZyZWVOZXRJZkVudHJ5UG9vbFtpXSk7CisKKwlmb3IgKGk9MDsgaSA8IE5VTV9PRl9UWF9SSU5HOyBpKyspCisJCWluaXRMaXN0KCZwQWQtPmJsb2NrUXVldWVUYWJbaV0uTmV0SWZMaXN0KTsKKworCXJldHVybjsKK30KKworQk9PTEVBTiBibG9ja05ldElmKAorCUlOIFBCTE9DS19RVUVVRV9FTlRSWSBwQmxvY2tRdWV1ZUVudHJ5LAorCUlOIFBORVRfREVWIHBOZXREZXYpCit7CisJUE5FVElGX0VOVFJZIHBOZXRJZkVudHJ5ID0gTlVMTDsKKworCWlmICgocE5ldElmRW50cnkgPSAoUE5FVElGX0VOVFJZKXJlbW92ZUhlYWRMaXN0KCZmcmVlTmV0SWZFbnRyeUxpc3QpKSAhPSBOVUxMKQorCXsKKwkJbmV0aWZfc3RvcF9xdWV1ZShwTmV0RGV2KTsKKwkJcE5ldElmRW50cnktPnBOZXREZXYgPSBwTmV0RGV2OworCQlpbnNlcnRUYWlsTGlzdCgmcEJsb2NrUXVldWVFbnRyeS0+TmV0SWZMaXN0LCAoUExJU1RfRU5UUlkpcE5ldElmRW50cnkpOworCisJCXBCbG9ja1F1ZXVlRW50cnktPlN3VHhRdWV1ZUJsb2NrRmxhZyA9IFRSVUU7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIm5ldGlmX3N0b3BfcXVldWUoJXMpXG4iLCBwTmV0RGV2LT5uYW1lKSk7CisJfQorCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworCisJcmV0dXJuIFRSVUU7Cit9CisKK1ZPSUQgcmVsZWFzZU5ldElmKAorCUlOIFBCTE9DS19RVUVVRV9FTlRSWSBwQmxvY2tRdWV1ZUVudHJ5KQoreworCVBORVRJRl9FTlRSWSBwTmV0SWZFbnRyeSA9IE5VTEw7CisJUExJU1RfSEVBREVSIHBOZXRJZkxpc3QgPSAmcEJsb2NrUXVldWVFbnRyeS0+TmV0SWZMaXN0OworCisJd2hpbGUoKHBOZXRJZkVudHJ5ID0gKFBORVRJRl9FTlRSWSlyZW1vdmVIZWFkTGlzdChwTmV0SWZMaXN0KSkgIT0gIE5VTEwpCisJeworCQlQTkVUX0RFViBwTmV0RGV2ID0gcE5ldElmRW50cnktPnBOZXREZXY7CisJCW5ldGlmX3dha2VfcXVldWUocE5ldERldik7CisJCWluc2VydFRhaWxMaXN0KCZmcmVlTmV0SWZFbnRyeUxpc3QsIChQTElTVF9FTlRSWSlwTmV0SWZFbnRyeSk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgibmV0aWZfd2FrZV9xdWV1ZSglcylcbiIsIHBOZXREZXYtPm5hbWUpKTsKKwl9CisJcEJsb2NrUXVldWVFbnRyeS0+U3dUeFF1ZXVlQmxvY2tGbGFnID0gRkFMU0U7CisJcmV0dXJuOworfQorCisKK1ZPSUQgU3RvcE5ldElmUXVldWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgUXVlSWR4LAorCUlOIFBORElTX1BBQ0tFVCBwUGFja2V0KQoreworCVBORVRfREVWIE5ldERldiA9IE5VTEw7CisJVUNIQVIgSWZJZHggPSAwOworCUJPT0xFQU4gdmFsaWQgPSBGQUxTRTsKKworI2lmZGVmIFdEU19TVVBQT1JUCisJaWYgKFJUTVBfR0VUX1BBQ0tFVF9ORVRfREVWSUNFKHBQYWNrZXQpID49IE1JTl9ORVRfREVWSUNFX0ZPUl9XRFMpCisJeworCQlJZklkeCA9IChSVE1QX0dFVF9QQUNLRVRfTkVUX0RFVklDRShwUGFja2V0KSAtIE1JTl9ORVRfREVWSUNFX0ZPUl9XRFMpICUgTUFYX1dEU19FTlRSWTsKKwkJTmV0RGV2ID0gcEFkLT5XZHNUYWIuV2RzRW50cnlbSWZJZHhdLmRldjsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFdEU19TVVBQT1JUIC8vCisJeworI2lmZGVmIE1CU1NfU1VQUE9SVAorCQlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKQorCQl7CisJCQlJZklkeCA9IChSVE1QX0dFVF9QQUNLRVRfTkVUX0RFVklDRShwUGFja2V0KSAtIE1JTl9ORVRfREVWSUNFX0ZPUl9NQlNTSUQpICUgTUFYX01CU1NJRF9OVU07CisJCQlOZXREZXYgPSBwQWQtPkFwQ2ZnLk1CU1NJRFtJZklkeF0uTVNTSUREZXY7CisJCX0KKwkJZWxzZQorCQl7CisJCQlJZklkeCA9IE1BSU5fTUJTU0lEOworCQkJTmV0RGV2ID0gcEFkLT5uZXRfZGV2OworCQl9CisjZWxzZQorCQlJZklkeCA9IE1BSU5fTUJTU0lEOworCQlOZXREZXYgPSBwQWQtPm5ldF9kZXY7CisjZW5kaWYKKwl9CisKKwkvLyBXTU0gc3VwcG9ydCA0IHNvZnR3YXJlIHF1ZXVlcy4KKwkvLyBPbmUgc29mdHdhcmUgcXVldWUgZnVsbCBkb2Vzbid0IG1lYW4gZGV2aWNlIGhhdmUgbm8gY2FwYmlsaXR5IHRvIHRyYW5zbWl0IHBhY2tldC4KKwkvLyBTbyBkaXNhYmxlIGJsb2NrIE5ldC1JZiBxdWV1ZSBmdW5jdGlvbiB3aGlsZSBXTU0gZW5hYmxlLgorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXZhbGlkID0gKHBBZC0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlID09IFRSVUUpID8gRkFMU0UgOiBUUlVFOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJaWYgKHZhbGlkKQorCQlibG9ja05ldElmKCZwQWQtPmJsb2NrUXVldWVUYWJbUXVlSWR4XSwgTmV0RGV2KTsKKwlyZXR1cm47Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0bXBfaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnRtcF9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUwM2Y2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0bXBfaW5pdC5jCkBAIC0wLDAgKzEsNDE5NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlydG1wX2luaXQuYworCisJQWJzdHJhY3Q6CisJTWluaXBvcnQgZ2VuZXJpYyBwb3J0aW9uIGhlYWRlciBmaWxlCisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorCS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVBhdWwgTGluICAgIDIwMDItMDgtMDEgICAgY3JlYXRlZAorICAgIEpvaG4gQ2hhbmcgIDIwMDQtMDgtMjAgICAgUlQyNTYxLzI2NjEgdXNlIHNjYXR0ZXItZ2F0aGVyIHNjaGVtZQorICAgIEphbiBMZWUgIDIwMDYtMDktMTUgICAgUlQyODYwLiBDaGFuZ2UgZm9yIDgwMi4xMW4gLCBFRVBST00sIExlZCwgQkEsIEhULgorKi8KKyNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKKyNpbmNsdWRlIAkiLi4vZmlybXdhcmUuaCIKKworLy8jZGVmaW5lIEJJTl9JTl9GSUxFIC8qIHVzZSAqLmJpbiBmaXJtd2FyZSAqLworCitVQ0hBUiAgICBCSVQ4W10gPSB7MHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MH07CitVTE9ORyAgICBCSVQzMltdID0gezB4MDAwMDAwMDEsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDgsCisJCQkJCTB4MDAwMDAwMTAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwNDAsIDB4MDAwMDAwODAsCisJCQkJCTB4MDAwMDAxMDAsIDB4MDAwMDAyMDAsIDB4MDAwMDA0MDAsIDB4MDAwMDA4MDAsCisJCQkJCTB4MDAwMDEwMDAsIDB4MDAwMDIwMDAsIDB4MDAwMDQwMDAsIDB4MDAwMDgwMDAsCisJCQkJCTB4MDAwMTAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwNDAwMDAsIDB4MDAwODAwMDAsCisJCQkJCTB4MDAxMDAwMDAsIDB4MDAyMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDA4MDAwMDAsCisJCQkJCTB4MDEwMDAwMDAsIDB4MDIwMDAwMDAsIDB4MDQwMDAwMDAsIDB4MDgwMDAwMDAsCisJCQkJCTB4MTAwMDAwMDAsIDB4MjAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4ODAwMDAwMDB9OworCitjaGFyKiAgIENpcGhlck5hbWVbXSA9IHsibm9uZSIsIndlcDY0Iiwid2VwMTI4IiwiVEtJUCIsIkFFUyIsIkNLSVA2NCIsIkNLSVAxMjgifTsKKworY29uc3QgdW5zaWduZWQgc2hvcnQgY2NpdHRfMTZUYWJsZVtdID0geworCTB4MDAwMCwgMHgxMDIxLCAweDIwNDIsIDB4MzA2MywgMHg0MDg0LCAweDUwQTUsIDB4NjBDNiwgMHg3MEU3LAorCTB4ODEwOCwgMHg5MTI5LCAweEExNEEsIDB4QjE2QiwgMHhDMThDLCAweEQxQUQsIDB4RTFDRSwgMHhGMUVGLAorCTB4MTIzMSwgMHgwMjEwLCAweDMyNzMsIDB4MjI1MiwgMHg1MkI1LCAweDQyOTQsIDB4NzJGNywgMHg2MkQ2LAorCTB4OTMzOSwgMHg4MzE4LCAweEIzN0IsIDB4QTM1QSwgMHhEM0JELCAweEMzOUMsIDB4RjNGRiwgMHhFM0RFLAorCTB4MjQ2MiwgMHgzNDQzLCAweDA0MjAsIDB4MTQwMSwgMHg2NEU2LCAweDc0QzcsIDB4NDRBNCwgMHg1NDg1LAorCTB4QTU2QSwgMHhCNTRCLCAweDg1MjgsIDB4OTUwOSwgMHhFNUVFLCAweEY1Q0YsIDB4QzVBQywgMHhENThELAorCTB4MzY1MywgMHgyNjcyLCAweDE2MTEsIDB4MDYzMCwgMHg3NkQ3LCAweDY2RjYsIDB4NTY5NSwgMHg0NkI0LAorCTB4Qjc1QiwgMHhBNzdBLCAweDk3MTksIDB4ODczOCwgMHhGN0RGLCAweEU3RkUsIDB4RDc5RCwgMHhDN0JDLAorCTB4NDhDNCwgMHg1OEU1LCAweDY4ODYsIDB4NzhBNywgMHgwODQwLCAweDE4NjEsIDB4MjgwMiwgMHgzODIzLAorCTB4QzlDQywgMHhEOUVELCAweEU5OEUsIDB4RjlBRiwgMHg4OTQ4LCAweDk5NjksIDB4QTkwQSwgMHhCOTJCLAorCTB4NUFGNSwgMHg0QUQ0LCAweDdBQjcsIDB4NkE5NiwgMHgxQTcxLCAweDBBNTAsIDB4M0EzMywgMHgyQTEyLAorCTB4REJGRCwgMHhDQkRDLCAweEZCQkYsIDB4RUI5RSwgMHg5Qjc5LCAweDhCNTgsIDB4QkIzQiwgMHhBQjFBLAorCTB4NkNBNiwgMHg3Qzg3LCAweDRDRTQsIDB4NUNDNSwgMHgyQzIyLCAweDNDMDMsIDB4MEM2MCwgMHgxQzQxLAorCTB4RURBRSwgMHhGRDhGLCAweENERUMsIDB4RERDRCwgMHhBRDJBLCAweEJEMEIsIDB4OEQ2OCwgMHg5RDQ5LAorCTB4N0U5NywgMHg2RUI2LCAweDVFRDUsIDB4NEVGNCwgMHgzRTEzLCAweDJFMzIsIDB4MUU1MSwgMHgwRTcwLAorCTB4RkY5RiwgMHhFRkJFLCAweERGREQsIDB4Q0ZGQywgMHhCRjFCLCAweEFGM0EsIDB4OUY1OSwgMHg4Rjc4LAorCTB4OTE4OCwgMHg4MUE5LCAweEIxQ0EsIDB4QTFFQiwgMHhEMTBDLCAweEMxMkQsIDB4RjE0RSwgMHhFMTZGLAorCTB4MTA4MCwgMHgwMEExLCAweDMwQzIsIDB4MjBFMywgMHg1MDA0LCAweDQwMjUsIDB4NzA0NiwgMHg2MDY3LAorCTB4ODNCOSwgMHg5Mzk4LCAweEEzRkIsIDB4QjNEQSwgMHhDMzNELCAweEQzMUMsIDB4RTM3RiwgMHhGMzVFLAorCTB4MDJCMSwgMHgxMjkwLCAweDIyRjMsIDB4MzJEMiwgMHg0MjM1LCAweDUyMTQsIDB4NjI3NywgMHg3MjU2LAorCTB4QjVFQSwgMHhBNUNCLCAweDk1QTgsIDB4ODU4OSwgMHhGNTZFLCAweEU1NEYsIDB4RDUyQywgMHhDNTBELAorCTB4MzRFMiwgMHgyNEMzLCAweDE0QTAsIDB4MDQ4MSwgMHg3NDY2LCAweDY0NDcsIDB4NTQyNCwgMHg0NDA1LAorCTB4QTdEQiwgMHhCN0ZBLCAweDg3OTksIDB4OTdCOCwgMHhFNzVGLCAweEY3N0UsIDB4QzcxRCwgMHhENzNDLAorCTB4MjZEMywgMHgzNkYyLCAweDA2OTEsIDB4MTZCMCwgMHg2NjU3LCAweDc2NzYsIDB4NDYxNSwgMHg1NjM0LAorCTB4RDk0QywgMHhDOTZELCAweEY5MEUsIDB4RTkyRiwgMHg5OUM4LCAweDg5RTksIDB4Qjk4QSwgMHhBOUFCLAorCTB4NTg0NCwgMHg0ODY1LCAweDc4MDYsIDB4NjgyNywgMHgxOEMwLCAweDA4RTEsIDB4Mzg4MiwgMHgyOEEzLAorCTB4Q0I3RCwgMHhEQjVDLCAweEVCM0YsIDB4RkIxRSwgMHg4QkY5LCAweDlCRDgsIDB4QUJCQiwgMHhCQjlBLAorCTB4NEE3NSwgMHg1QTU0LCAweDZBMzcsIDB4N0ExNiwgMHgwQUYxLCAweDFBRDAsIDB4MkFCMywgMHgzQTkyLAorCTB4RkQyRSwgMHhFRDBGLCAweERENkMsIDB4Q0Q0RCwgMHhCREFBLCAweEFEOEIsIDB4OURFOCwgMHg4REM5LAorCTB4N0MyNiwgMHg2QzA3LCAweDVDNjQsIDB4NEM0NSwgMHgzQ0EyLCAweDJDODMsIDB4MUNFMCwgMHgwQ0MxLAorCTB4RUYxRiwgMHhGRjNFLCAweENGNUQsIDB4REY3QywgMHhBRjlCLCAweEJGQkEsIDB4OEZEOSwgMHg5RkY4LAorCTB4NkUxNywgMHg3RTM2LCAweDRFNTUsIDB4NUU3NCwgMHgyRTkzLCAweDNFQjIsIDB4MEVEMSwgMHgxRUYwCit9OworI2RlZmluZSBCeXRlQ1JDMTYodiwgY3JjKSBcCisJKHVuc2lnbmVkIHNob3J0KSgoY3JjIDw8IDgpIF4gIGNjaXR0XzE2VGFibGVbKChjcmMgPj4gOCkgXiAodikpICYgMjU1XSkKKwordW5zaWduZWQgY2hhciBCaXRSZXZlcnNlKHVuc2lnbmVkIGNoYXIgeCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBjaGFyIFRlbXA9MDsKKwlmb3IoaT0wOyA7IGkrKykKKwl7CisJCWlmKHggJiAweDgwKQlUZW1wIHw9IDB4ODA7CisJCWlmKGk9PTcpCQlicmVhazsKKwkJeAk8PD0gMTsKKwkJVGVtcCA+Pj0gMTsKKwl9CisJcmV0dXJuIFRlbXA7Cit9CisKKy8vCisvLyBCQlAgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gc2V0CisvLworUkVHX1BBSVIgICBCQlBSZWdUYWJsZVtdID0geworCXtCQlBfUjY1LAkJMHgyQ30sCQkvLyBmaXggcnNzaSBpc3N1ZQorCXtCQlBfUjY2LAkJMHgzOH0sCS8vIEFsc28gc2V0IHRoaXMgZGVmYXVsdCB2YWx1ZSB0byBwQWQtPkJicFR1bmluZy5SNjZDdXJyZW50VmFsdWUgYXQgaW5pdGlhbAorCXtCQlBfUjY5LAkJMHgxMn0sCisJe0JCUF9SNzAsCQkweGF9LAkvLyBCQlBfUjcwIHdpbGwgY2hhbmdlIHRvIDB4OCBpbiBBcFN0YXJ0VXAgYW5kIExpbmtVcCBmb3IgcnQyODYwQywgb3RoZXJ3aXNlIHZhbHVlIGlzIDB4YQorCXtCQlBfUjczLAkJMHgxMH0sCisJe0JCUF9SODEsCQkweDM3fSwKKwl7QkJQX1I4MiwJCTB4NjJ9LAorCXtCQlBfUjgzLAkJMHg2QX0sCisJe0JCUF9SODQsCQkweDk5fSwJLy8gMHgxOSBpcyBmb3IgcnQyODYwRSBhbmQgYWZ0ZXIuIFRoaXMgaXMgZm9yIGV4dGVuc2lvbiBjaGFubmVsIG92ZXJsYXBwaW5nIElPVC4gMHg5OSBpcyBmb3IgcnQyODYwRCBhbmQgYmVmb3JlCisJe0JCUF9SODYsCQkweDAwfSwJLy8gbWlkZGxlIHJhbmdlIGlzc3VlLCBSb3J5IEAyMDA4LTAxLTI4CisJe0JCUF9SOTEsCQkweDA0fSwJLy8gbWlkZGxlIHJhbmdlIGlzc3VlLCBSb3J5IEAyMDA4LTAxLTI4CisJe0JCUF9SOTIsCQkweDAwfSwJLy8gbWlkZGxlIHJhbmdlIGlzc3VlLCBSb3J5IEAyMDA4LTAxLTI4CisJe0JCUF9SMTAzLCAgCTB4MDB9LCAJLy8gbmVhciByYW5nZSBoaWdoLXBvd2VyIGlzc3VlLCByZXF1ZXN0ZWQgZnJvbSBHYXJ5IEAyMDA4LTA1MjgKKwl7QkJQX1IxMDUsCQkweDA1fSwJLy8gMHgwNSBpcyBmb3IgcnQyODYwRSB0byB0dXJuIG9uIEZFUSBjb250cm9sLiBJdCBpcyBzYWZlIGZvciBydDI4NjBEIGFuZCBiZWZvcmUsIGJlY2F1c2UgQml0IDc6MiBhcmUgcmVzZXJ2ZWQgaW4gcnQyODYwRCBhbmQgYmVmb3JlLgorfTsKKyNkZWZpbmUJTlVNX0JCUF9SRUdfUEFSTVMJKHNpemVvZihCQlBSZWdUYWJsZSkgLyBzaXplb2YoUkVHX1BBSVIpKQorCisvLworLy8gUkYgcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24gc2V0CisvLworI2lmZGVmIFJUMzB4eAorUkVHX1BBSVIgICBSVDMweHhfUkZSZWdUYWJsZVtdID0geworICAgICAgICB7UkZfUjA0LCAgICAgICAgICAweDQwfSwKKyAgICAgICAge1JGX1IwNSwgICAgICAgICAgMHgwM30sCisgICAgICAgIHtSRl9SMDYsICAgICAgICAgIDB4MDJ9LAorICAgICAgICB7UkZfUjA3LCAgICAgICAgICAweDcwfSwKKyAgICAgICAge1JGX1IwOSwgICAgICAgICAgMHgwRn0sCisgICAgICAgIHtSRl9SMTAsICAgICAgICAgIDB4NDF9LAorICAgICAgICB7UkZfUjExLCAgICAgICAgICAweDIxfSwKKyAgICAgICAge1JGX1IxMiwgICAgICAgICAgMHg3Qn0sCisgICAgICAgIHtSRl9SMTQsICAgICAgICAgIDB4OTB9LAorICAgICAgICB7UkZfUjE1LCAgICAgICAgICAweDU4fSwKKyAgICAgICAge1JGX1IxNiwgICAgICAgICAgMHhCM30sCisgICAgICAgIHtSRl9SMTcsICAgICAgICAgIDB4OTJ9LAorICAgICAgICB7UkZfUjE4LCAgICAgICAgICAweDJDfSwKKyAgICAgICAge1JGX1IxOSwgICAgICAgICAgMHgwMn0sCisgICAgICAgIHtSRl9SMjAsICAgICAgICAgIDB4QkF9LAorICAgICAgICB7UkZfUjIxLCAgICAgICAgICAweERCfSwKKyAgICAgICAge1JGX1IyNCwgICAgICAgICAgMHgxNn0sCisgICAgICAgIHtSRl9SMjUsICAgICAgICAgIDB4MDF9LAorICAgICAgICB7UkZfUjI5LCAgICAgICAgICAweDFGfSwKK307CisjZGVmaW5lCU5VTV9SRl9SRUdfUEFSTVMJKHNpemVvZihSVDMweHhfUkZSZWdUYWJsZSkgLyBzaXplb2YoUkVHX1BBSVIpKQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisvLworLy8gQVNJQyByZWdpc3RlciBpbml0aWFsaXphdGlvbiBzZXRzCisvLworCitSVE1QX1JFR19QQUlSCU1BQ1JlZ1RhYmxlW10gPQl7CisjaWYgZGVmaW5lZChIV19CRUFDT05fT0ZGU0VUKSAmJiAoSFdfQkVBQ09OX09GRlNFVCA9PSAweDIwMCkKKwl7QkNOX09GRlNFVDAsCQkJMHhmOGYwZThlMH0sIC8qIDB4MzgwMChlMCksIDB4M0EwMChlOCksIDB4M0MwMChmMCksIDB4M0UwMChmOCksIDUxMkIgZm9yIGVhY2ggYmVhY29uICovCisJe0JDTl9PRkZTRVQxLAkJCTB4NmY3N2QwYzh9LCAvKiAweDMyMDAoYzgpLCAweDM0MDAoZDApLCAweDFEQzAoNzcpLCAweDFCQzAoNmYpLCA1MTJCIGZvciBlYWNoIGJlYWNvbiAqLworI2VsaWYgZGVmaW5lZChIV19CRUFDT05fT0ZGU0VUKSAmJiAoSFdfQkVBQ09OX09GRlNFVCA9PSAweDEwMCkKKwl7QkNOX09GRlNFVDAsCQkJMHhlY2U4ZTRlMH0sIC8qIDB4MzgwMCwgMHgzQTAwLCAweDNDMDAsIDB4M0UwMCwgNTEyQiBmb3IgZWFjaCBiZWFjb24gKi8KKwl7QkNOX09GRlNFVDEsCQkJMHhmY2Y4ZjRmMH0sIC8qIDB4MzgwMCwgMHgzQTAwLCAweDNDMDAsIDB4M0UwMCwgNTEyQiBmb3IgZWFjaCBiZWFjb24gKi8KKyNlbHNlCisgICAgI2Vycm9yIFlvdSBtdXN0IHJlLWNhbGN1bGF0ZSBuZXcgdmFsdWUgZm9yIEJDTl9PRkZTRVQwICYgQkNOX09GRlNFVDEgaW4gTUFDUmVnVGFibGVbXSEhIQorI2VuZGlmIC8vIEhXX0JFQUNPTl9PRkZTRVQgLy8KKworCXtMRUdBQ1lfQkFTSUNfUkFURSwJCTB4MDAwMDAxM2Z9LCAvLyAgQmFzaWMgcmF0ZSBzZXQgYml0bWFwCisJe0hUX0JBU0lDX1JBVEUsCQkweDAwMDA4MDAzfSwgLy8gQmFzaWMgSFQgcmF0ZSBzZXQgLCAyME0sIE1DUz0zLCBNTS4gRm9ybWF0IGlzIHRoZSBzYW1lIGFzIGluIFRYV0kuCisJe01BQ19TWVNfQ1RSTCwJCTB4MDB9LCAvLyAweDEwMDQsICwgZGVmYXVsdCBEaXNhYmxlIFJYCisJe1JYX0ZJTFRSX0NGRywJCTB4MTdmOTd9LCAvLzB4MTQwMCAgLCBSWCBmaWx0ZXIgY29udHJvbCwKKwl7QktPRkZfU0xPVF9DRkcsCTB4MjA5fSwgLy8gZGVmYXVsdCBzZXQgc2hvcnQgc2xvdCB0aW1lLCBDQ19ERUxBWV9USU1FIHNob3VsZCBiZSAyCisJLy97VFhfU1dfQ0ZHMCwJCTB4NDBhMDZ9LCAvLyBHYXJ5LDIwMDYtMDgtMjMKKwl7VFhfU1dfQ0ZHMCwJCTB4MH0sIAkJLy8gR2FyeSwyMDA4LTA1LTIxIGZvciBDV0MgdGVzdAorCXtUWF9TV19DRkcxLAkJMHg4MDYwNn0sIC8vIEdhcnksMjAwNi0wOC0yMworCXtUWF9MSU5LX0NGRywJCTB4MTAyMH0sCQkvLyBHYXJ5LDIwMDYtMDgtMjMKKwl7VFhfVElNRU9VVF9DRkcsCTB4MDAwYTIwOTB9LAorCXtNQVhfTEVOX0NGRywJCU1BWF9BR0dSRUdBVElPTl9TSVpFIHwgMHgwMDAwMTAwMH0sCS8vIDB4MzAxOCwgTUFYIGZyYW1lIGxlbmd0aC4gTWF4IFBTRFUgPSAxNmtieXRlcy4KKwl7TEVEX0NGRywJCTB4N2YwMzFlNDZ9LCAvLyBHYXJ5LCAyMDA2LTA4LTIzCisKKy8vI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorLy8Je1dNTV9BSUZTTl9DRkcsCQkweDAwMDAyMjczfSwKKy8vCXtXTU1fQ1dNSU5fQ0ZHLAkJMHgwMDAwMjM0NH0sCisvLwl7V01NX0NXTUFYX0NGRywJCTB4MDAwMDM0YWF9LAorLy8jZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisjaWZkZWYgSU5GX0FNQVpPTl9TRQorCXtQQkZfTUFYX1BDTlQsCQkJMHgxRjNGNkY2Rn0sIAkvL2l2ZXJzb24gbW9kaWZ5IGZvciB1c2IgaXNzdWUsIDIwMDgvMDkvMTkKKwkJCQkJCQkJCQkJLy8gNkYgKyA2RiA8IHRvdGFsIHBhZ2UgY291bnQgRkUKKwkJCQkJCQkJCQkJLy8gc28gdGhhdCBSWCBkb2Vzbid0IG9jY3VweSBUWCdzIGJ1ZmZlciBzcGFjZSB3aGVuIFdNTSBjb25nZXN0aW9uLgorI2Vsc2UKKwl7UEJGX01BWF9QQ05ULAkJCTB4MUYzRkJGOUZ9LCAJLy8weDFGM2Y3ZjlmfSwJCS8vSmFuLCAyMDA2LzA0LzIwCisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworCS8ve1RYX1JUWV9DRkcsCQkJMHg2YmI4MDQwOH0sCS8vIEphbiwgMjAwNi8xMS8xNgorCXtUWF9SVFlfQ0ZHLAkJCTB4NDdkMDFmMGZ9LAkvLyBKYW4sIDIwMDYvMTEvMTYsIFNldCBUeFdJLT5BQ0sgPTAgaW4gUHJvYmUgUnNwIE1vZGlmeSBmb3IgMjg2MEUgLDIwMDctMDgtMDMKKwl7QVVUT19SU1BfQ0ZHLAkJCTB4MDAwMDAwMTN9LAkvLyBJbml0aWFsIEF1dG9fUmVzcG9uZGVyLCBiZWNhdXNlIFFBIHdpbGwgdHVybiBvZmYgQXV0by1SZXNwb25kZXIKKwl7Q0NLX1BST1RfQ0ZHLAkJCTB4MDU3NDAwMDMgLyoweDAxNzQwMDAzKi99LAkvLyBJbml0aWFsIEF1dG9fUmVzcG9uZGVyLCBiZWNhdXNlIFFBIHdpbGwgdHVybiBvZmYgQXV0by1SZXNwb25kZXIuIEFuZCBSVFMgdGhyZXNob2xkIGlzIGVuYWJsZWQuCisJe09GRE1fUFJPVF9DRkcsCQkJMHgwNTc0MDAwMyAvKjB4MDE3NDAwMDMqL30sCS8vIEluaXRpYWwgQXV0b19SZXNwb25kZXIsIGJlY2F1c2UgUUEgd2lsbCB0dXJuIG9mZiBBdXRvLVJlc3BvbmRlci4gQW5kIFJUUyB0aHJlc2hvbGQgaXMgZW5hYmxlZC4KKy8vUFMgcGFja2V0cyB1c2UgVHgxUSAoZm9yIEhDQ0EpIHdoZW4gZGVxdWV1ZSBmcm9tIFBTIHVuaWNhc3QgcXVldWUgKFdpRmkgV1BBMiBNQTlfRFQxIGZvciBNYXJ2ZWxsIEIgU1RBKQorI2lmZGVmIFJUMjg3MAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCXtQQkZfQ0ZHLCAJCQkJMHhmNDAwMDZ9LCAJCS8vIE9ubHkgZW5hYmxlIFF1ZXVlIDIKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl7TU00MF9QUk9UX0NGRywJCQkweDNGNDQwODR9LAkJLy8gSW5pdGlhbCBBdXRvX1Jlc3BvbmRlciwgYmVjYXVzZSBRQSB3aWxsIHR1cm4gb2ZmIEF1dG8tUmVzcG9uZGVyCisJe1dQRE1BX0dMT19DRkcsCQkJMHgwMDAwMDAzMH0sCisjZW5kaWYgLy8gUlQyODcwIC8vCisJe0dGMjBfUFJPVF9DRkcsCQkJMHgwMTc0NDAwNH0sICAgIC8vIHNldCAxOToxOCAtLT4gU2hvcnQgTkFWIGZvciBNSU1PIFBTCisJe0dGNDBfUFJPVF9DRkcsCQkJMHgwM0Y0NDA4NH0sCisJe01NMjBfUFJPVF9DRkcsCQkJMHgwMTc0NDAwNH0sCisJe1RYT1BfQ1RSTF9DRkcsCQkJMHgwMDAwNTgzZiwgLyoweDAwMDAyNDNmKi8gLyoweDAwMDAyNGJmKi99LAkvL0V4dGVuc2lvbiBjaGFubmVsIGJhY2tvZmYuCisJe1RYX1JUU19DRkcsCQkJMHgwMDA5MmIyMH0sCisvLyNpZmRlZiBXSUZJX1RFU1QKKwl7RVhQX0FDS19USU1FLAkJCTB4MDAyNDAwY2F9LAkvLyBkZWZhdWx0IHZhbHVlCisvLyNlbHNlCisvLwl7RVhQX0FDS19USU1FLAkJCTB4MDA1NDAwY2F9LAkvLyBzdWdnZXN0ZWQgYnkgR3JheSBAIDIwMDcwMzIzIGZvciAxMW4gaW50ZWwtc3RhIHRocm91Z2hwdXQKKy8vI2VuZGlmIC8vIGVuZCAtIFdJRklfVEVTVCAvLworCXtUWE9QX0hMRFJfRVQsIAkJCTB4MDAwMDAwMDJ9LAorCisJLyogSmVycnkgY29tbWVudHMgMjAwOC8wMS8xNjogd2UgdXNlIFNJRlMgPSAxMHVzIGluIENDSyBkZWZhdWx0bHksIGJ1dCBpdCBzZWVtcyB0aGF0IDEwdXMKKwkJaXMgdG9vIHNtYWxsIGZvciBJTlRFTCAyMjAwYmcgY2FyZCwgc28gaW4gTUJTUyBtb2RlLCB0aGUgZGVsdGEgdGltZSBiZXR3ZWVuIGJlYWNvbjAKKwkJYW5kIGJlYWNvbjEgaXMgU0lGUyAoMTB1cyksIHNvIGlmIElOVEVMIDIyMDBiZyBjYXJkIGNvbm5lY3RzIHRvIEJTUzAsIHRoZSBwaW5nCisJCXdpbGwgYWx3YXlzIGxvc3QuIFNvIHdlIGNoYW5nZSB0aGUgU0lGUyBvZiBDQ0sgZnJvbSAxMHVzIHRvIDE2dXMuICovCisJe1hJRlNfVElNRV9DRkcsCQkJMHgzM2E0MTAxMH0sCisJe1BXUl9QSU5fQ0ZHLAkJCTB4MDAwMDAwMDN9LAkvLyBwYXRjaCBmb3IgMjg4MC1FCit9OworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK1JUTVBfUkVHX1BBSVIJU1RBTUFDUmVnVGFibGVbXSA9CXsKKwl7V01NX0FJRlNOX0NGRywJCTB4MDAwMDIyNzN9LAorCXtXTU1fQ1dNSU5fQ0ZHLAkweDAwMDAyMzQ0fSwKKwl7V01NX0NXTUFYX0NGRywJMHgwMDAwMzRhYX0sCit9OworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjZGVmaW5lCU5VTV9NQUNfUkVHX1BBUk1TCQkoc2l6ZW9mKE1BQ1JlZ1RhYmxlKSAvIHNpemVvZihSVE1QX1JFR19QQUlSKSkKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNkZWZpbmUJTlVNX1NUQV9NQUNfUkVHX1BBUk1TCShzaXplb2YoU1RBTUFDUmVnVGFibGUpIC8gc2l6ZW9mKFJUTVBfUkVHX1BBSVIpKQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgUlQyODcwCisvLworLy8gUlQyODcwIEZpcm13YXJlIFNwZWMgb25seSB1c2VkIDEgb2N0IGZvciB2ZXJzaW9uIGV4cHJlc3Npb24KKy8vCisjZGVmaW5lIEZJUk1XQVJFX01JTk9SX1ZFUlNJT04JNworCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKy8vIE5ldyA4ayBieXRlIGZpcm13YXJlIHNpemUgZm9yIFJUMzA3MS9SVDMwNzIKKyNkZWZpbmUgRklSTVdBUkVJTUFHRV9NQVhfTEVOR1RICTB4MjAwMAorI2RlZmluZSBGSVJNV0FSRUlNQUdFX0xFTkdUSAkJKHNpemVvZiAoRmlybXdhcmVJbWFnZSkgLyBzaXplb2YoVUNIQVIpKQorI2RlZmluZSBGSVJNV0FSRV9NQUpPUl9WRVJTSU9OCTAKKworI2RlZmluZSBGSVJNV0FSRUlNQUdFVjFfTEVOR1RICTB4MTAwMAorI2RlZmluZSBGSVJNV0FSRUlNQUdFVjJfTEVOR1RICTB4MTAwMAorCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUFsbG9jYXRlIFJUTVBfQURBUFRFUiBkYXRhIGJsb2NrIGFuZCBkbyBzb21lIGluaXRpYWxpemF0aW9uCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVEFUVVNfU1VDQ0VTUworCQlORElTX1NUQVRVU19GQUlMVVJFCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCVJUTVBBbGxvY0FkYXB0ZXJCbG9jaygKKwlJTiAgUFZPSUQJaGFuZGxlLAorCU9VVAlQUlRNUF9BREFQVEVSCSpwcEFkYXB0ZXIpCit7CisJUFJUTVBfQURBUFRFUglwQWQ7CisJTkRJU19TVEFUVVMJCVN0YXR1czsKKwlJTlQgCQkJaW5kZXg7CisJVUNIQVIJCQkqcEJlYWNvbkJ1ZiA9IE5VTEw7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gUlRNUEFsbG9jQWRhcHRlckJsb2NrXG4iKSk7CisKKwkqcHBBZGFwdGVyID0gTlVMTDsKKworCWRvCisJeworCQkvLyBBbGxvY2F0ZSBSVE1QX0FEQVBURVIgbWVtb3J5IGJsb2NrCisJCXBCZWFjb25CdWYgPSBrbWFsbG9jKE1BWF9CRUFDT05fU0laRSwgTUVNX0FMTE9DX0ZMQUcpOworCQlpZiAocEJlYWNvbkJ1ZiA9PSBOVUxMKQorCQl7CisJCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCQkJREJHUFJJTlRfRVJSKCgiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSAtIEJlYWNvbkJ1ZiFcbiIpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJU3RhdHVzID0gQWRhcHRlckJsb2NrQWxsb2NhdGVNZW1vcnkoaGFuZGxlLCAoUFZPSUQgKikmcEFkKTsKKwkJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlEQkdQUklOVF9FUlIoKCJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IC0gQURBUFRFUlxuIikpOworCQkJYnJlYWs7CisJCX0KKwkJcEFkLT5CZWFjb25CdWYgPSBwQmVhY29uQnVmOworCQlwcmludGsoIlxuXG49PT0gcEFkID0gJXAsIHNpemUgPSAlZCA9PT1cblxuIiwgcEFkLCAoVUlOVDMyKXNpemVvZihSVE1QX0FEQVBURVIpKTsKKworCisJCS8vIEluaXQgc3BpbiBsb2NrcworCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5NZ210UmluZ0xvY2spOworCisJCWZvciAoaW5kZXggPTAgOyBpbmRleCA8IE5VTV9PRl9UWF9SSU5HOyBpbmRleCsrKQorCQl7CisJCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5UeFN3UXVldWVMb2NrW2luZGV4XSk7CisJCQlOZGlzQWxsb2NhdGVTcGluTG9jaygmcEFkLT5EZVF1ZXVlTG9ja1tpbmRleF0pOworCQkJcEFkLT5EZVF1ZXVlUnVubmluZ1tpbmRleF0gPSBGQUxTRTsKKwkJfQorCisJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPmlycV9sb2NrKTsKKworCX0gd2hpbGUgKEZBTFNFKTsKKworCWlmICgoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpICYmIChwQmVhY29uQnVmKSkKKwkJa2ZyZWUocEJlYWNvbkJ1Zik7CisKKwkqcHBBZGFwdGVyID0gcEFkOworCisJREJHUFJJTlRfUyhTdGF0dXMsICgiPC0tIFJUTVBBbGxvY0FkYXB0ZXJCbG9jaywgU3RhdHVzPSV4XG4iLCBTdGF0dXMpKTsKKwlyZXR1cm4gU3RhdHVzOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUmVhZCBpbml0aWFsIFR4IHBvd2VyIHBlciBNQ1MgYW5kIEJXIGZyb20gRUVQUk9NCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QUmVhZFR4UHdyUGVyUmF0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVTE9ORwkJZGF0YSwgQWRhdGEsIEdkYXRhOworCVVTSE9SVAkJaSwgdmFsdWUsIHZhbHVlMjsKKwlJTlQJCQlBcHdyZGVsdGEsIEdwd3JkZWx0YTsKKwlVQ0hBUgkJdDEsdDIsdDMsdDQ7CisJQk9PTEVBTgkJYlZhbGlkLCBiQXB3cmRlbHRhTWludXMgPSBUUlVFLCBiR3B3cmRlbHRhTWludXMgPSBUUlVFOworCisJLy8KKwkvLyBHZXQgcG93ZXIgZGVsdGEgZm9yIDIwTUh6IGFuZCA0ME1Iei4KKwkvLworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlR4cG93ZXIgcGVyIFJhdGVcbiIpKTsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0RFTFRBLCB2YWx1ZTIpOworCUFwd3JkZWx0YSA9IDA7CisJR3B3cmRlbHRhID0gMDsKKworCWlmICgodmFsdWUyICYgMHhmZikgIT0gMHhmZikKKwl7CisJCWlmICgodmFsdWUyICYgMHg4MCkpCisJCQlHcHdyZGVsdGEgPSAodmFsdWUyJjB4Zik7CisKKwkJaWYgKCh2YWx1ZTIgJiAweDQwKSkKKwkJCWJHcHdyZGVsdGFNaW51cyA9IEZBTFNFOworCQllbHNlCisJCQliR3B3cmRlbHRhTWludXMgPSBUUlVFOworCX0KKwlpZiAoKHZhbHVlMiAmIDB4ZmYwMCkgIT0gMHhmZjAwKQorCXsKKwkJaWYgKCh2YWx1ZTIgJiAweDgwMDApKQorCQkJQXB3cmRlbHRhID0gKCh2YWx1ZTImMHhmMDApPj44KTsKKworCQlpZiAoKHZhbHVlMiAmIDB4NDAwMCkpCisJCQliQXB3cmRlbHRhTWludXMgPSBGQUxTRTsKKwkJZWxzZQorCQkJYkFwd3JkZWx0YU1pbnVzID0gVFJVRTsKKwl9CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiR3B3cmRlbHRhID0gJXgsIEFwd3JkZWx0YSA9ICV4IC5cbiIsIEdwd3JkZWx0YSwgQXB3cmRlbHRhKSk7CisKKwkvLworCS8vIEdldCBUeHBvd2VyIHBlciBNQ1MgZm9yIDIwTUh6IGluIDIuNEcuCisJLy8KKwlmb3IgKGk9MDsgaTw1OyBpKyspCisJeworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0JZUkFURV8yME1IWl8yXzRHICsgaSo0LCB2YWx1ZSk7CisJCWRhdGEgPSB2YWx1ZTsKKwkJaWYgKGJBcHdyZGVsdGFNaW51cyA9PSBGQUxTRSkKKwkJeworCQkJdDEgPSAodmFsdWUmMHhmKSsoQXB3cmRlbHRhKTsKKwkJCWlmICh0MSA+IDB4ZikKKwkJCQl0MSA9IDB4ZjsKKwkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCkrKEFwd3JkZWx0YSk7CisJCQlpZiAodDIgPiAweGYpCisJCQkJdDIgPSAweGY7CisJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KSsoQXB3cmRlbHRhKTsKKwkJCWlmICh0MyA+IDB4ZikKKwkJCQl0MyA9IDB4ZjsKKwkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMikrKEFwd3JkZWx0YSk7CisJCQlpZiAodDQgPiAweGYpCisJCQkJdDQgPSAweGY7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoKHZhbHVlJjB4ZikgPiBBcHdyZGVsdGEpCisJCQkJdDEgPSAodmFsdWUmMHhmKS0oQXB3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0MSA9IDA7CisJCQlpZiAoKCh2YWx1ZSYweGYwKT4+NCkgPiBBcHdyZGVsdGEpCisJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KS0oQXB3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0MiA9IDA7CisJCQlpZiAoKCh2YWx1ZSYweGYwMCk+PjgpID4gQXB3cmRlbHRhKQorCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpLShBcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQzID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjAwMCk+PjEyKSA+IEFwd3JkZWx0YSkKKwkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpLShBcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQ0ID0gMDsKKwkJfQorCQlBZGF0YSA9IHQxICsgKHQyPDw0KSArICh0Mzw8OCkgKyAodDQ8PDEyKTsKKwkJaWYgKGJHcHdyZGVsdGFNaW51cyA9PSBGQUxTRSkKKwkJeworCQkJdDEgPSAodmFsdWUmMHhmKSsoR3B3cmRlbHRhKTsKKwkJCWlmICh0MSA+IDB4ZikKKwkJCQl0MSA9IDB4ZjsKKwkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCkrKEdwd3JkZWx0YSk7CisJCQlpZiAodDIgPiAweGYpCisJCQkJdDIgPSAweGY7CisJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KSsoR3B3cmRlbHRhKTsKKwkJCWlmICh0MyA+IDB4ZikKKwkJCQl0MyA9IDB4ZjsKKwkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMikrKEdwd3JkZWx0YSk7CisJCQlpZiAodDQgPiAweGYpCisJCQkJdDQgPSAweGY7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoKHZhbHVlJjB4ZikgPiBHcHdyZGVsdGEpCisJCQkJdDEgPSAodmFsdWUmMHhmKS0oR3B3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0MSA9IDA7CisJCQlpZiAoKCh2YWx1ZSYweGYwKT4+NCkgPiBHcHdyZGVsdGEpCisJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KS0oR3B3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0MiA9IDA7CisJCQlpZiAoKCh2YWx1ZSYweGYwMCk+PjgpID4gR3B3cmRlbHRhKQorCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpLShHcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQzID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjAwMCk+PjEyKSA+IEdwd3JkZWx0YSkKKwkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpLShHcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQ0ID0gMDsKKwkJfQorCQlHZGF0YSA9IHQxICsgKHQyPDw0KSArICh0Mzw8OCkgKyAodDQ8PDEyKTsKKworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0JZUkFURV8yME1IWl8yXzRHICsgaSo0ICsgMiwgdmFsdWUpOworCQlpZiAoYkFwd3JkZWx0YU1pbnVzID09IEZBTFNFKQorCQl7CisJCQl0MSA9ICh2YWx1ZSYweGYpKyhBcHdyZGVsdGEpOworCQkJaWYgKHQxID4gMHhmKQorCQkJCXQxID0gMHhmOworCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KSsoQXB3cmRlbHRhKTsKKwkJCWlmICh0MiA+IDB4ZikKKwkJCQl0MiA9IDB4ZjsKKwkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpKyhBcHdyZGVsdGEpOworCQkJaWYgKHQzID4gMHhmKQorCQkJCXQzID0gMHhmOworCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKSsoQXB3cmRlbHRhKTsKKwkJCWlmICh0NCA+IDB4ZikKKwkJCQl0NCA9IDB4ZjsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmICgodmFsdWUmMHhmKSA+IEFwd3JkZWx0YSkKKwkJCQl0MSA9ICh2YWx1ZSYweGYpLShBcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQxID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjApPj40KSA+IEFwd3JkZWx0YSkKKwkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpLShBcHdyZGVsdGEpOworCQkJZWxzZQorCQkJCXQyID0gMDsKKwkJCWlmICgoKHZhbHVlJjB4ZjAwKT4+OCkgPiBBcHdyZGVsdGEpCisJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCktKEFwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDMgPSAwOworCQkJaWYgKCgodmFsdWUmMHhmMDAwKT4+MTIpID4gQXB3cmRlbHRhKQorCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMiktKEFwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDQgPSAwOworCQl9CisJCUFkYXRhIHw9ICgodDE8PDE2KSArICh0Mjw8MjApICsgKHQzPDwyNCkgKyAodDQ8PDI4KSk7CisJCWlmIChiR3B3cmRlbHRhTWludXMgPT0gRkFMU0UpCisJCXsKKwkJCXQxID0gKHZhbHVlJjB4ZikrKEdwd3JkZWx0YSk7CisJCQlpZiAodDEgPiAweGYpCisJCQkJdDEgPSAweGY7CisJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpKyhHcHdyZGVsdGEpOworCQkJaWYgKHQyID4gMHhmKQorCQkJCXQyID0gMHhmOworCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCkrKEdwd3JkZWx0YSk7CisJCQlpZiAodDMgPiAweGYpCisJCQkJdDMgPSAweGY7CisJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpKyhHcHdyZGVsdGEpOworCQkJaWYgKHQ0ID4gMHhmKQorCQkJCXQ0ID0gMHhmOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKCh2YWx1ZSYweGYpID4gR3B3cmRlbHRhKQorCQkJCXQxID0gKHZhbHVlJjB4ZiktKEdwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDEgPSAwOworCQkJaWYgKCgodmFsdWUmMHhmMCk+PjQpID4gR3B3cmRlbHRhKQorCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCktKEdwd3JkZWx0YSk7CisJCQllbHNlCisJCQkJdDIgPSAwOworCQkJaWYgKCgodmFsdWUmMHhmMDApPj44KSA+IEdwd3JkZWx0YSkKKwkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KS0oR3B3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0MyA9IDA7CisJCQlpZiAoKCh2YWx1ZSYweGYwMDApPj4xMikgPiBHcHdyZGVsdGEpCisJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKS0oR3B3cmRlbHRhKTsKKwkJCWVsc2UKKwkJCQl0NCA9IDA7CisJCX0KKwkJR2RhdGEgfD0gKCh0MTw8MTYpICsgKHQyPDwyMCkgKyAodDM8PDI0KSArICh0NDw8MjgpKTsKKwkJZGF0YSB8PSAodmFsdWU8PDE2KTsKKworCQlwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbaV0gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbaV0gPSBBZGF0YTsKKwkJcEFkLT5UeDIwTVB3ckNmZ0dCYW5kW2ldID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kW2ldID0gR2RhdGE7CisKKwkJaWYgKGRhdGEgIT0gMHhmZmZmZmZmZikKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BXUl9DRkdfMCArIGkqNCwgZGF0YSk7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCIyME1IeiBCVywgMi40RyBiYW5kLSVseCwgIEFkYXRhID0gJWx4LCAgR2RhdGEgPSAlbHggXG4iLCBkYXRhLCBBZGF0YSwgR2RhdGEpKTsKKwl9CisKKwkvLworCS8vIENoZWNrIHRoaXMgYmxvY2sgaXMgdmFsaWQgZm9yIDQwTUh6IGluIDIuNEcuIElmIGludmFsaWQsIHVzZSBwYXJhbWV0ZXIgZm9yIDIwTUh6IGluIDIuNEcKKwkvLworCWJWYWxpZCA9IFRSVUU7CisJZm9yIChpPTA7IGk8NjsgaSsrKQorCXsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fVFhQT1dFUl9CWVJBVEVfNDBNSFpfMl80RyArIDIgKyBpKjIsIHZhbHVlKTsKKwkJaWYgKCgodmFsdWUgJiAweDAwRkYpID09IDB4MDBGRikgfHwgKCh2YWx1ZSAmIDB4RkYwMCkgPT0gMHhGRjAwKSkKKwkJeworCQkJYlZhbGlkID0gRkFMU0U7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8vCisJLy8gR2V0IFR4cG93ZXIgcGVyIE1DUyBmb3IgNDBNSHogaW4gMi40Ry4KKwkvLworCWlmIChiVmFsaWQpCisJeworCQlmb3IgKGk9MDsgaTw0OyBpKyspCisJCXsKKwkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzQwTUhaXzJfNEcgKyBpKjQsIHZhbHVlKTsKKwkJCWlmIChiR3B3cmRlbHRhTWludXMgPT0gRkFMU0UpCisJCQl7CisJCQkJdDEgPSAodmFsdWUmMHhmKSsoR3B3cmRlbHRhKTsKKwkJCQlpZiAodDEgPiAweGYpCisJCQkJCXQxID0gMHhmOworCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCkrKEdwd3JkZWx0YSk7CisJCQkJaWYgKHQyID4gMHhmKQorCQkJCQl0MiA9IDB4ZjsKKwkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KSsoR3B3cmRlbHRhKTsKKwkJCQlpZiAodDMgPiAweGYpCisJCQkJCXQzID0gMHhmOworCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMikrKEdwd3JkZWx0YSk7CisJCQkJaWYgKHQ0ID4gMHhmKQorCQkJCQl0NCA9IDB4ZjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoKHZhbHVlJjB4ZikgPiBHcHdyZGVsdGEpCisJCQkJCXQxID0gKHZhbHVlJjB4ZiktKEdwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MSA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMCk+PjQpID4gR3B3cmRlbHRhKQorCQkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpLShHcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDIgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwKT4+OCkgPiBHcHdyZGVsdGEpCisJCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpLShHcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDMgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwMCk+PjEyKSA+IEdwd3JkZWx0YSkKKwkJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKS0oR3B3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQ0ID0gMDsKKwkJCX0KKwkJCUdkYXRhID0gdDEgKyAodDI8PDQpICsgKHQzPDw4KSArICh0NDw8MTIpOworCisJCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0JZUkFURV80ME1IWl8yXzRHICsgaSo0ICsgMiwgdmFsdWUpOworCQkJaWYgKGJHcHdyZGVsdGFNaW51cyA9PSBGQUxTRSkKKwkJCXsKKwkJCQl0MSA9ICh2YWx1ZSYweGYpKyhHcHdyZGVsdGEpOworCQkJCWlmICh0MSA+IDB4ZikKKwkJCQkJdDEgPSAweGY7CisJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KSsoR3B3cmRlbHRhKTsKKwkJCQlpZiAodDIgPiAweGYpCisJCQkJCXQyID0gMHhmOworCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpKyhHcHdyZGVsdGEpOworCQkJCWlmICh0MyA+IDB4ZikKKwkJCQkJdDMgPSAweGY7CisJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKSsoR3B3cmRlbHRhKTsKKwkJCQlpZiAodDQgPiAweGYpCisJCQkJCXQ0ID0gMHhmOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICgodmFsdWUmMHhmKSA+IEdwd3JkZWx0YSkKKwkJCQkJdDEgPSAodmFsdWUmMHhmKS0oR3B3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQxID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwKT4+NCkgPiBHcHdyZGVsdGEpCisJCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCktKEdwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MiA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDApPj44KSA+IEdwd3JkZWx0YSkKKwkJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCktKEdwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MyA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMDAwKT4+MTIpID4gR3B3cmRlbHRhKQorCQkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpLShHcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDQgPSAwOworCQkJfQorCQkJR2RhdGEgfD0gKCh0MTw8MTYpICsgKHQyPDwyMCkgKyAodDM8PDI0KSArICh0NDw8MjgpKTsKKworCQkJaWYgKGkgPT0gMCkKKwkJCQlwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbaSsxXSA9IChwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbaSsxXSAmIDB4MDAwMEZGRkYpIHwgKEdkYXRhICYgMHhGRkZGMDAwMCk7CisJCQllbHNlCisJCQkJcEFkLT5UeDQwTVB3ckNmZ0dCYW5kW2krMV0gPSBHZGF0YTsKKworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIjQwTUh6IEJXLCAyLjRHIGJhbmQsIEdkYXRhID0gJWx4IFxuIiwgR2RhdGEpKTsKKwkJfQorCX0KKworCS8vCisJLy8gQ2hlY2sgdGhpcyBibG9jayBpcyB2YWxpZCBmb3IgMjBNSHogaW4gNUcuIElmIGludmFsaWQsIHVzZSBwYXJhbWV0ZXIgZm9yIDIwTUh6IGluIDIuNEcKKwkvLworCWJWYWxpZCA9IFRSVUU7CisJZm9yIChpPTA7IGk8ODsgaSsrKQorCXsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fVFhQT1dFUl9CWVJBVEVfMjBNSFpfNUcgKyAyICsgaSoyLCB2YWx1ZSk7CisJCWlmICgoKHZhbHVlICYgMHgwMEZGKSA9PSAweDAwRkYpIHx8ICgodmFsdWUgJiAweEZGMDApID09IDB4RkYwMCkpCisJCXsKKwkJCWJWYWxpZCA9IEZBTFNFOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvLworCS8vIEdldCBUeHBvd2VyIHBlciBNQ1MgZm9yIDIwTUh6IGluIDVHLgorCS8vCisJaWYgKGJWYWxpZCkKKwl7CisJCWZvciAoaT0wOyBpPDU7IGkrKykKKwkJeworCQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fVFhQT1dFUl9CWVJBVEVfMjBNSFpfNUcgKyBpKjQsIHZhbHVlKTsKKwkJCWlmIChiQXB3cmRlbHRhTWludXMgPT0gRkFMU0UpCisJCQl7CisJCQkJdDEgPSAodmFsdWUmMHhmKSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDEgPiAweGYpCisJCQkJCXQxID0gMHhmOworCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCkrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQyID4gMHhmKQorCQkJCQl0MiA9IDB4ZjsKKwkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDMgPiAweGYpCisJCQkJCXQzID0gMHhmOworCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMikrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQ0ID4gMHhmKQorCQkJCQl0NCA9IDB4ZjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoKHZhbHVlJjB4ZikgPiBBcHdyZGVsdGEpCisJCQkJCXQxID0gKHZhbHVlJjB4ZiktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MSA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMCk+PjQpID4gQXB3cmRlbHRhKQorCQkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDIgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwKT4+OCkgPiBBcHdyZGVsdGEpCisJCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDMgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwMCk+PjEyKSA+IEFwd3JkZWx0YSkKKwkJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQ0ID0gMDsKKwkJCX0KKwkJCUFkYXRhID0gdDEgKyAodDI8PDQpICsgKHQzPDw4KSArICh0NDw8MTIpOworCisJCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9UWFBPV0VSX0JZUkFURV8yME1IWl81RyArIGkqNCArIDIsIHZhbHVlKTsKKwkJCWlmIChiQXB3cmRlbHRhTWludXMgPT0gRkFMU0UpCisJCQl7CisJCQkJdDEgPSAodmFsdWUmMHhmKSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDEgPiAweGYpCisJCQkJCXQxID0gMHhmOworCQkJCXQyID0gKCh2YWx1ZSYweGYwKT4+NCkrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQyID4gMHhmKQorCQkJCQl0MiA9IDB4ZjsKKwkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KSsoQXB3cmRlbHRhKTsKKwkJCQlpZiAodDMgPiAweGYpCisJCQkJCXQzID0gMHhmOworCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMikrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQ0ID4gMHhmKQorCQkJCQl0NCA9IDB4ZjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoKHZhbHVlJjB4ZikgPiBBcHdyZGVsdGEpCisJCQkJCXQxID0gKHZhbHVlJjB4ZiktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0MSA9IDA7CisJCQkJaWYgKCgodmFsdWUmMHhmMCk+PjQpID4gQXB3cmRlbHRhKQorCQkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDIgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwKT4+OCkgPiBBcHdyZGVsdGEpCisJCQkJCXQzID0gKCh2YWx1ZSYweGYwMCk+PjgpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDMgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjAwMCk+PjEyKSA+IEFwd3JkZWx0YSkKKwkJCQkJdDQgPSAoKHZhbHVlJjB4ZjAwMCk+PjEyKS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQ0ID0gMDsKKwkJCX0KKwkJCUFkYXRhIHw9ICgodDE8PDE2KSArICh0Mjw8MjApICsgKHQzPDwyNCkgKyAodDQ8PDI4KSk7CisKKwkJCWlmIChpID09IDApCisJCQkJcEFkLT5UeDIwTVB3ckNmZ0FCYW5kW2ldID0gKHBBZC0+VHgyME1Qd3JDZmdBQmFuZFtpXSAmIDB4MDAwMEZGRkYpIHwgKEFkYXRhICYgMHhGRkZGMDAwMCk7CisJCQllbHNlCisJCQkJcEFkLT5UeDIwTVB3ckNmZ0FCYW5kW2ldID0gQWRhdGE7CisKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCIyME1IeiBCVywgNUdIeiBiYW5kLCBBZGF0YSA9ICVseCBcbiIsIEFkYXRhKSk7CisJCX0KKwl9CisKKwkvLworCS8vIENoZWNrIHRoaXMgYmxvY2sgaXMgdmFsaWQgZm9yIDQwTUh6IGluIDVHLiBJZiBpbnZhbGlkLCB1c2UgcGFyYW1ldGVyIGZvciAyME1IeiBpbiAyLjRHCisJLy8KKwliVmFsaWQgPSBUUlVFOworCWZvciAoaT0wOyBpPDY7IGkrKykKKwl7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzQwTUhaXzVHICsgMiArIGkqMiwgdmFsdWUpOworCQlpZiAoKCh2YWx1ZSAmIDB4MDBGRikgPT0gMHgwMEZGKSB8fCAoKHZhbHVlICYgMHhGRjAwKSA9PSAweEZGMDApKQorCQl7CisJCQliVmFsaWQgPSBGQUxTRTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLy8KKwkvLyBHZXQgVHhwb3dlciBwZXIgTUNTIGZvciA0ME1IeiBpbiA1Ry4KKwkvLworCWlmIChiVmFsaWQpCisJeworCQlmb3IgKGk9MDsgaTw0OyBpKyspCisJCXsKKwkJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzQwTUhaXzVHICsgaSo0LCB2YWx1ZSk7CisJCQlpZiAoYkFwd3JkZWx0YU1pbnVzID09IEZBTFNFKQorCQkJeworCQkJCXQxID0gKHZhbHVlJjB4ZikrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQxID4gMHhmKQorCQkJCQl0MSA9IDB4ZjsKKwkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpKyhBcHdyZGVsdGEpOworCQkJCWlmICh0MiA+IDB4ZikKKwkJCQkJdDIgPSAweGY7CisJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCkrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQzID4gMHhmKQorCQkJCQl0MyA9IDB4ZjsKKwkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpKyhBcHdyZGVsdGEpOworCQkJCWlmICh0NCA+IDB4ZikKKwkJCQkJdDQgPSAweGY7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKCh2YWx1ZSYweGYpID4gQXB3cmRlbHRhKQorCQkJCQl0MSA9ICh2YWx1ZSYweGYpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDEgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjApPj40KSA+IEFwd3JkZWx0YSkKKwkJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQyID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwMCk+PjgpID4gQXB3cmRlbHRhKQorCQkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQzID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwMDApPj4xMikgPiBBcHdyZGVsdGEpCisJCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMiktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0NCA9IDA7CisJCQl9CisJCQlBZGF0YSA9IHQxICsgKHQyPDw0KSArICh0Mzw8OCkgKyAodDQ8PDEyKTsKKworCQkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fVFhQT1dFUl9CWVJBVEVfNDBNSFpfNUcgKyBpKjQgKyAyLCB2YWx1ZSk7CisJCQlpZiAoYkFwd3JkZWx0YU1pbnVzID09IEZBTFNFKQorCQkJeworCQkJCXQxID0gKHZhbHVlJjB4ZikrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQxID4gMHhmKQorCQkJCQl0MSA9IDB4ZjsKKwkJCQl0MiA9ICgodmFsdWUmMHhmMCk+PjQpKyhBcHdyZGVsdGEpOworCQkJCWlmICh0MiA+IDB4ZikKKwkJCQkJdDIgPSAweGY7CisJCQkJdDMgPSAoKHZhbHVlJjB4ZjAwKT4+OCkrKEFwd3JkZWx0YSk7CisJCQkJaWYgKHQzID4gMHhmKQorCQkJCQl0MyA9IDB4ZjsKKwkJCQl0NCA9ICgodmFsdWUmMHhmMDAwKT4+MTIpKyhBcHdyZGVsdGEpOworCQkJCWlmICh0NCA+IDB4ZikKKwkJCQkJdDQgPSAweGY7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKCh2YWx1ZSYweGYpID4gQXB3cmRlbHRhKQorCQkJCQl0MSA9ICh2YWx1ZSYweGYpLShBcHdyZGVsdGEpOworCQkJCWVsc2UKKwkJCQkJdDEgPSAwOworCQkJCWlmICgoKHZhbHVlJjB4ZjApPj40KSA+IEFwd3JkZWx0YSkKKwkJCQkJdDIgPSAoKHZhbHVlJjB4ZjApPj40KS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQyID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwMCk+PjgpID4gQXB3cmRlbHRhKQorCQkJCQl0MyA9ICgodmFsdWUmMHhmMDApPj44KS0oQXB3cmRlbHRhKTsKKwkJCQllbHNlCisJCQkJCXQzID0gMDsKKwkJCQlpZiAoKCh2YWx1ZSYweGYwMDApPj4xMikgPiBBcHdyZGVsdGEpCisJCQkJCXQ0ID0gKCh2YWx1ZSYweGYwMDApPj4xMiktKEFwd3JkZWx0YSk7CisJCQkJZWxzZQorCQkJCQl0NCA9IDA7CisJCQl9CisJCQlBZGF0YSB8PSAoKHQxPDwxNikgKyAodDI8PDIwKSArICh0Mzw8MjQpICsgKHQ0PDwyOCkpOworCisJCQlpZiAoaSA9PSAwKQorCQkJCXBBZC0+VHg0ME1Qd3JDZmdBQmFuZFtpKzFdID0gKHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFtpKzFdICYgMHgwMDAwRkZGRikgfCAoQWRhdGEgJiAweEZGRkYwMDAwKTsKKwkJCWVsc2UKKwkJCQlwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbaSsxXSA9IEFkYXRhOworCisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiNDBNSHogQlcsIDVHSHogYmFuZCwgQWRhdGEgPSAlbHggXG4iLCBBZGF0YSkpOworCQl9CisJfQorfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlSZWFkIGluaXRpYWwgY2hhbm5lbCBwb3dlciBwYXJhbWV0ZXJzIGZyb20gRUVQUk9NCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QUmVhZENoYW5uZWxQd3IoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUNIQVIJCQkJaSwgY2hvZmZzZXQ7CisJRUVQUk9NX1RYX1BXUl9TVFJVQwkgICAgUG93ZXI7CisJRUVQUk9NX1RYX1BXUl9TVFJVQwkgICAgUG93ZXIyOworCisJLy8gUmVhZCBUeCBwb3dlciB2YWx1ZSBmb3IgYWxsIGNoYW5uZWxzCisJLy8gVmFsdWUgZnJvbSAxIC0gMHg3Zi4gRGVmYXVsdCB2YWx1ZSBpcyAyNC4KKwkvLyBQb3dlciB2YWx1ZSA6IDIuNEcgMHgwMCAoMCkgfiAweDFGICgzMSkKKwkvLyAgICAgICAgICAgICA6IDUuNUcgMHhGOSAoLTcpIH4gMHgwRiAoMTUpCisKKwkvLyAwLiAxMWIvZywgY2gxIC0gY2ggMTQKKwlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQorCXsKKy8vCQlQb3dlci53b3JkID0gUlRNUF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0dfVFhfUFdSX09GRlNFVCArIGkgKiAyKTsKKy8vCQlQb3dlcjIud29yZCA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9HX1RYMl9QV1JfT0ZGU0VUICsgaSAqIDIpOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9HX1RYX1BXUl9PRkZTRVQgKyBpICogMiwgUG93ZXIud29yZCk7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0dfVFgyX1BXUl9PRkZTRVQgKyBpICogMiwgUG93ZXIyLndvcmQpOworCQlwQWQtPlR4UG93ZXJbaSAqIDJdLkNoYW5uZWwgPSBpICogMiArIDE7CisJCXBBZC0+VHhQb3dlcltpICogMiArIDFdLkNoYW5uZWwgPSBpICogMiArIDI7CisKKwkJaWYgKChQb3dlci5maWVsZC5CeXRlMCA+IDMxKSB8fCAoUG93ZXIuZmllbGQuQnl0ZTAgPCAwKSkKKwkJCXBBZC0+VHhQb3dlcltpICogMl0uUG93ZXIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCQllbHNlCisJCQlwQWQtPlR4UG93ZXJbaSAqIDJdLlBvd2VyID0gUG93ZXIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlci5maWVsZC5CeXRlMSA+IDMxKSB8fCAoUG93ZXIuZmllbGQuQnl0ZTEgPCAwKSkKKwkJCXBBZC0+VHhQb3dlcltpICogMiArIDFdLlBvd2VyID0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJZWxzZQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgMV0uUG93ZXIgPSBQb3dlci5maWVsZC5CeXRlMTsKKworCQlpZiAoKFBvd2VyMi5maWVsZC5CeXRlMCA+IDMxKSB8fCAoUG93ZXIyLmZpZWxkLkJ5dGUwIDwgMCkpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDJdLlBvd2VyMiA9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCWVsc2UKKwkJCXBBZC0+VHhQb3dlcltpICogMl0uUG93ZXIyID0gUG93ZXIyLmZpZWxkLkJ5dGUwOworCisJCWlmICgoUG93ZXIyLmZpZWxkLkJ5dGUxID4gMzEpIHx8IChQb3dlcjIuZmllbGQuQnl0ZTEgPCAwKSkKKwkJCXBBZC0+VHhQb3dlcltpICogMiArIDFdLlBvd2VyMiA9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCWVsc2UKKwkJCXBBZC0+VHhQb3dlcltpICogMiArIDFdLlBvd2VyMiA9IFBvd2VyMi5maWVsZC5CeXRlMTsKKwl9CisKKwkvLyAxLiBVLU5JSSBsb3dlci9taWRkbGUgYmFuZDogMzYsIDM4LCA0MDsgNDQsIDQ2LCA0ODsgNTIsIDU0LCA1NjsgNjAsIDYyLCA2NCAoaW5jbHVkaW5nIGNlbnRyYWwgZnJlcXVlbmN5IGluIEJXIDQwTUh6KQorCS8vIDEuMSBGaWxsIHVwIGNoYW5uZWwKKwljaG9mZnNldCA9IDE0OworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJeworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLkNoYW5uZWwJPSAzNiArIGkgKiA4ICsgMDsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAwXS5Qb3dlcgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uUG93ZXIyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLkNoYW5uZWwJPSAzNiArIGkgKiA4ICsgMjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5Qb3dlcgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMV0uUG93ZXIyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDJdLkNoYW5uZWwJPSAzNiArIGkgKiA4ICsgNDsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5Qb3dlcgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uUG93ZXIyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwl9CisKKwkvLyAxLjIgRmlsbCB1cCBwb3dlcgorCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJeworLy8JCVBvd2VyLndvcmQgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWF9QV1JfT0ZGU0VUICsgaSAqIDIpOworLy8JCVBvd2VyMi53b3JkID0gUlRNUF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0FfVFgyX1BXUl9PRkZTRVQgKyBpICogMik7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0FfVFhfUFdSX09GRlNFVCArIGkgKiAyLCBQb3dlci53b3JkKTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWDJfUFdSX09GRlNFVCArIGkgKiAyLCBQb3dlcjIud29yZCk7CisKKwkJaWYgKChQb3dlci5maWVsZC5CeXRlMCA8IDE2KSAmJiAoUG93ZXIuZmllbGQuQnl0ZTAgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAwXS5Qb3dlciA9IFBvd2VyLmZpZWxkLkJ5dGUwOworCisJCWlmICgoUG93ZXIuZmllbGQuQnl0ZTEgPCAxNikgJiYgKFBvd2VyLmZpZWxkLkJ5dGUxID49IC03KSkKKwkJCXBBZC0+VHhQb3dlcltpICogMiArIGNob2Zmc2V0ICsgMV0uUG93ZXIgPSBQb3dlci5maWVsZC5CeXRlMTsKKworCQlpZiAoKFBvd2VyMi5maWVsZC5CeXRlMCA8IDE2KSAmJiAoUG93ZXIyLmZpZWxkLkJ5dGUwID49IC03KSkKKwkJCXBBZC0+VHhQb3dlcltpICogMiArIGNob2Zmc2V0ICsgMF0uUG93ZXIyID0gUG93ZXIyLmZpZWxkLkJ5dGUwOworCisJCWlmICgoUG93ZXIyLmZpZWxkLkJ5dGUxIDwgMTYpICYmIChQb3dlcjIuZmllbGQuQnl0ZTEgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAxXS5Qb3dlcjIgPSBQb3dlcjIuZmllbGQuQnl0ZTE7CisJfQorCisJLy8gMi4gSGlwcGVyTEFOIDIgMTAwLCAxMDIgLDEwNDsgMTA4LCAxMTAsIDExMjsgMTE2LCAxMTgsIDEyMDsgMTI0LCAxMjYsIDEyODsgMTMyLCAxMzQsIDEzNjsgMTQwIChpbmNsdWRpbmcgY2VudHJhbCBmcmVxdWVuY3kgaW4gQlcgNDBNSHopCisJLy8gMi4xIEZpbGwgdXAgY2hhbm5lbAorCWNob2Zmc2V0ID0gMTQgKyAxMjsKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQorCXsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAwXS5DaGFubmVsCT0gMTAwICsgaSAqIDggKyAwOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLlBvd2VyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAwXS5Qb3dlcjIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMV0uQ2hhbm5lbAk9IDEwMCArIGkgKiA4ICsgMjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5Qb3dlcgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMV0uUG93ZXIyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDJdLkNoYW5uZWwJPSAxMDAgKyBpICogOCArIDQ7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uUG93ZXIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDJdLlBvd2VyMgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJfQorCXBBZC0+VHhQb3dlclszICogNSArIGNob2Zmc2V0ICsgMF0uQ2hhbm5lbAkJPSAxNDA7CisJcEFkLT5UeFBvd2VyWzMgKiA1ICsgY2hvZmZzZXQgKyAwXS5Qb3dlcgkJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCXBBZC0+VHhQb3dlclszICogNSArIGNob2Zmc2V0ICsgMF0uUG93ZXIyCQk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisKKwkvLyAyLjIgRmlsbCB1cCBwb3dlcgorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJeworLy8JCVBvd2VyLndvcmQgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWF9QV1JfT0ZGU0VUICsgKGNob2Zmc2V0IC0gMTQpICsgaSAqIDIpOworLy8JCVBvd2VyMi53b3JkID0gUlRNUF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0FfVFgyX1BXUl9PRkZTRVQgKyAoY2hvZmZzZXQgLSAxNCkgKyBpICogMik7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0FfVFhfUFdSX09GRlNFVCArIChjaG9mZnNldCAtIDE0KSArIGkgKiAyLCBQb3dlci53b3JkKTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWDJfUFdSX09GRlNFVCArIChjaG9mZnNldCAtIDE0KSArIGkgKiAyLCBQb3dlcjIud29yZCk7CisKKwkJaWYgKChQb3dlci5maWVsZC5CeXRlMCA8IDE2KSAmJiAoUG93ZXIuZmllbGQuQnl0ZTAgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAwXS5Qb3dlciA9IFBvd2VyLmZpZWxkLkJ5dGUwOworCisJCWlmICgoUG93ZXIuZmllbGQuQnl0ZTEgPCAxNikgJiYgKFBvd2VyLmZpZWxkLkJ5dGUxID49IC03KSkKKwkJCXBBZC0+VHhQb3dlcltpICogMiArIGNob2Zmc2V0ICsgMV0uUG93ZXIgPSBQb3dlci5maWVsZC5CeXRlMTsKKworCQlpZiAoKFBvd2VyMi5maWVsZC5CeXRlMCA8IDE2KSAmJiAoUG93ZXIyLmZpZWxkLkJ5dGUwID49IC03KSkKKwkJCXBBZC0+VHhQb3dlcltpICogMiArIGNob2Zmc2V0ICsgMF0uUG93ZXIyID0gUG93ZXIyLmZpZWxkLkJ5dGUwOworCisJCWlmICgoUG93ZXIyLmZpZWxkLkJ5dGUxIDwgMTYpICYmIChQb3dlcjIuZmllbGQuQnl0ZTEgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAxXS5Qb3dlcjIgPSBQb3dlcjIuZmllbGQuQnl0ZTE7CisJfQorCisJLy8gMy4gVS1OSUkgdXBwZXIgYmFuZDogMTQ5LCAxNTEsIDE1MzsgMTU3LCAxNTksIDE2MTsgMTY1IChpbmNsdWRpbmcgY2VudHJhbCBmcmVxdWVuY3kgaW4gQlcgNDBNSHopCisJLy8gMy4xIEZpbGwgdXAgY2hhbm5lbAorCWNob2Zmc2V0ID0gMTQgKyAxMiArIDE2OworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJeworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLkNoYW5uZWwJPSAxNDkgKyBpICogOCArIDA7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMF0uUG93ZXIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDBdLlBvd2VyMgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5DaGFubmVsCT0gMTQ5ICsgaSAqIDggKyAyOworCQlwQWQtPlR4UG93ZXJbMyAqIGkgKyBjaG9mZnNldCArIDFdLlBvd2VyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAxXS5Qb3dlcjIJPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uQ2hhbm5lbAk9IDE0OSArIGkgKiA4ICsgNDsKKwkJcEFkLT5UeFBvd2VyWzMgKiBpICsgY2hvZmZzZXQgKyAyXS5Qb3dlcgk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJCXBBZC0+VHhQb3dlclszICogaSArIGNob2Zmc2V0ICsgMl0uUG93ZXIyCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKwl9CisJcEFkLT5UeFBvd2VyWzMgKiAyICsgY2hvZmZzZXQgKyAwXS5DaGFubmVsCQk9IDE2NTsKKwlwQWQtPlR4UG93ZXJbMyAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyCQk9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisJcEFkLT5UeFBvd2VyWzMgKiAyICsgY2hvZmZzZXQgKyAwXS5Qb3dlcjIJCT0gREVGQVVMVF9SRl9UWF9QT1dFUjsKKworCS8vIDMuMiBGaWxsIHVwIHBvd2VyCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwl7CisvLwkJUG93ZXIud29yZCA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYX1BXUl9PRkZTRVQgKyAoY2hvZmZzZXQgLSAxNCkgKyBpICogMik7CisvLwkJUG93ZXIyLndvcmQgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWDJfUFdSX09GRlNFVCArIChjaG9mZnNldCAtIDE0KSArIGkgKiAyKTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fQV9UWF9QV1JfT0ZGU0VUICsgKGNob2Zmc2V0IC0gMTQpICsgaSAqIDIsIFBvd2VyLndvcmQpOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9BX1RYMl9QV1JfT0ZGU0VUICsgKGNob2Zmc2V0IC0gMTQpICsgaSAqIDIsIFBvd2VyMi53b3JkKTsKKworCQlpZiAoKFBvd2VyLmZpZWxkLkJ5dGUwIDwgMTYpICYmIChQb3dlci5maWVsZC5CeXRlMCA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDBdLlBvd2VyID0gUG93ZXIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlci5maWVsZC5CeXRlMSA8IDE2KSAmJiAoUG93ZXIuZmllbGQuQnl0ZTEgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAxXS5Qb3dlciA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCisJCWlmICgoUG93ZXIyLmZpZWxkLkJ5dGUwIDwgMTYpICYmIChQb3dlcjIuZmllbGQuQnl0ZTAgPj0gLTcpKQorCQkJcEFkLT5UeFBvd2VyW2kgKiAyICsgY2hvZmZzZXQgKyAwXS5Qb3dlcjIgPSBQb3dlcjIuZmllbGQuQnl0ZTA7CisKKwkJaWYgKChQb3dlcjIuZmllbGQuQnl0ZTEgPCAxNikgJiYgKFBvd2VyMi5maWVsZC5CeXRlMSA+PSAtNykpCisJCQlwQWQtPlR4UG93ZXJbaSAqIDIgKyBjaG9mZnNldCArIDFdLlBvd2VyMiA9IFBvd2VyMi5maWVsZC5CeXRlMTsKKwl9CisKKwkvLyA0LiBQcmludCBhbmQgRGVidWcKKwljaG9mZnNldCA9IDE0ICsgMTIgKyAxNiArIDc7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVJlYWQgdGhlIGZvbGxvd2luZyBmcm9tIHRoZSByZWdpc3RyeQorCQkxLiBBbGwgdGhlIHBhcmFtZXRlcnMKKwkJMi4gTmV0d29ya0FkZHJlcworCisJQXJndW1lbnRzOgorCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlXcmFwcGVyQ29uZmlndXJhdGlvbkNvbnRleHQJRm9yIHVzZSBieSBOZGlzT3BlbkNvbmZpZ3VyYXRpb24KKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVEFUVVNfU1VDQ0VTUworCQlORElTX1NUQVRVU19GQUlMVVJFCisJCU5ESVNfU1RBVFVTX1JFU09VUkNFUworCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUwlOSUNSZWFkUmVnUGFyYW1ldGVycygKKwlJTglQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4JTkRJU19IQU5ETEUJCQlXcmFwcGVyQ29uZmlndXJhdGlvbkNvbnRleHQKKwkpCit7CisJTkRJU19TVEFUVVMJCQkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCURCR1BSSU5UX1MoU3RhdHVzLCAoIjwtLSBOSUNSZWFkUmVnUGFyYW1ldGVycywgU3RhdHVzPSV4XG4iLCBTdGF0dXMpKTsKKwlyZXR1cm4gU3RhdHVzOworfQorCisKKyNpZmRlZiBSVDMweHgKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlGb3IgUkYgZmlsdGVyIGNhbGlicmF0aW9uIHB1cnBvc2UKKworCUFyZ3VtZW50czoKKwkJcEFkICAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBGaWx0ZXJDYWxpYnJhdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVQ0hBUglSNTV4ID0gMCwgdmFsdWUsIEZpbHRlclRhcmdldCA9IDB4MUUsIEJCUFZhbHVlPTA7CisJVUlOVAlsb29wID0gMCwgY291bnQgPSAwLCBsb29wY250ID0gMCwgUmVUcnkgPSAwOworCVVDSEFSCVJGX1IyNF9WYWx1ZSA9IDA7CisKKwkvLyBHaXZlIGJicCBmaWx0ZXIgaW5pdGlhbCB2YWx1ZQorCXBBZC0+TWxtZS5DYWxpQlcyMFJmUjI0ID0gMHgxRjsKKwlwQWQtPk1sbWUuQ2FsaUJXNDBSZlIyNCA9IDB4MkY7IC8vQml0WzVdIG11c3QgYmUgMSBmb3IgQlcgNDAKKworCWRvCisJeworCQlpZiAobG9vcCA9PSAxKQkvL0JhbmRXaWR0aCA9IDQwIE1IegorCQl7CisJCQkvLyBXcml0ZSAweDI3IHRvIFJGX1IyNCB0byBwcm9ncmFtIGZpbHRlcgorCQkJUkZfUjI0X1ZhbHVlID0gMHgyNzsKKwkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNCwgUkZfUjI0X1ZhbHVlKTsKKwkJCWlmIChJU19SVDMwOTAocEFkKSkKKwkJCQlGaWx0ZXJUYXJnZXQgPSAweDE1OworCQkJZWxzZQorCQkJCUZpbHRlclRhcmdldCA9IDB4MTk7CisKKwkJCS8vIHdoZW4gY2FsaWJyYXRlIEJXNDAsIEJCUCBtYXNrIG11c3Qgc2V0IHRvIEJXNDAuCisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7CisJCQlCQlBWYWx1ZSY9ICh+MHgxOCk7CisJCQlCQlBWYWx1ZXw9ICgweDEwKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJCUFZhbHVlKTsKKworCQkJLy8gc2V0IHRvIEJXNDAKKwkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjMxLCAmdmFsdWUpOworCQkJdmFsdWUgfD0gMHgyMDsKKwkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IzMSwgdmFsdWUpOworCQl9CisJCWVsc2UJCQkvL0JhbmRXaWR0aCA9IDIwIE1IegorCQl7CisJCQkvLyBXcml0ZSAweDA3IHRvIFJGX1IyNCB0byBwcm9ncmFtIGZpbHRlcgorCQkJUkZfUjI0X1ZhbHVlID0gMHgwNzsKKwkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNCwgUkZfUjI0X1ZhbHVlKTsKKwkJCWlmIChJU19SVDMwOTAocEFkKSkKKwkJCQlGaWx0ZXJUYXJnZXQgPSAweDEzOworCQkJZWxzZQorCQkJCUZpbHRlclRhcmdldCA9IDB4MTY7CisKKwkJCS8vIHNldCB0byBCVzIwCisJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IzMSwgJnZhbHVlKTsKKwkJCXZhbHVlICY9ICh+MHgyMCk7CisJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMzEsIHZhbHVlKTsKKwkJfQorCisJCS8vIFdyaXRlIDB4MDEgdG8gUkZfUjIyIHRvIGVuYWJsZSBiYXNlYmFuZCBsb29wYmFjayBtb2RlCisJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjIyLCAmdmFsdWUpOworCQl2YWx1ZSB8PSAweDAxOworCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjIsIHZhbHVlKTsKKworCQkvLyBXcml0ZSAweDAwIHRvIEJCUF9SMjQgdG8gc2V0IHBvd2VyICYgZnJlcXVlbmN5IG9mIHBhc3NiYW5kIHRlc3QgdG9uZQorCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyNCwgMCk7CisKKwkJZG8KKwkJeworCQkJLy8gV3JpdGUgMHg5MCB0byBCQlBfUjI1IHRvIHRyYW5zbWl0IHRlc3QgdG9uZQorCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjUsIDB4OTApOworCisJCQlSVE1QdXNlY0RlbGF5KDEwMDApOworCQkJLy8gUmVhZCBCQlBfUjU1WzY6MF0gZm9yIHJlY2VpdmVkIHBvd2VyLCBzZXQgUjU1eCA9IEJCUF9SNTVbNjowXQorCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I1NSwgJnZhbHVlKTsKKwkJCVI1NXggPSB2YWx1ZSAmIDB4RkY7CisKKwkJfSB3aGlsZSAoKFJlVHJ5KysgPCAxMDApICYmIChSNTV4ID09IDApKTsKKworCQkvLyBXcml0ZSAweDA2IHRvIEJCUF9SMjQgdG8gc2V0IHBvd2VyICYgZnJlcXVlbmN5IG9mIHN0b3BiYW5kIHRlc3QgdG9uZQorCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyNCwgMHgwNik7CisKKwkJd2hpbGUoVFJVRSkKKwkJeworCQkJLy8gV3JpdGUgMHg5MCB0byBCQlBfUjI1IHRvIHRyYW5zbWl0IHRlc3QgdG9uZQorCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjUsIDB4OTApOworCisJCQkvL1dlIG5lZWQgdG8gd2FpdCBmb3IgY2FsaWJyYXRpb24KKwkJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjU1LCAmdmFsdWUpOworCQkJdmFsdWUgJj0gMHhGRjsKKwkJCWlmICgoUjU1eCAtIHZhbHVlKSA8IEZpbHRlclRhcmdldCkKKwkJCXsKKwkJCQlSRl9SMjRfVmFsdWUgKys7CisJCQl9CisJCQllbHNlIGlmICgoUjU1eCAtIHZhbHVlKSA9PSBGaWx0ZXJUYXJnZXQpCisJCQl7CisJCQkJUkZfUjI0X1ZhbHVlICsrOworCQkJCWNvdW50ICsrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWJyZWFrOworCQkJfQorCisJCQkvLyBwcmV2ZW50IGluZmluaXRlIGxvb3AgY2F1c2UgZHJpdmVyIGhhbmcuCisJCQlpZiAobG9vcGNudCsrID4gMTAwKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUTVBGaWx0ZXJDYWxpYnJhdGlvbiAtIGNhbid0IGZpbmQgYSB2YWxpZCB2YWx1ZSwgbG9vcGNudD0lZCBzdG9wIGNhbGlicmF0aW5nIiwgbG9vcGNudCkpOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvLyBXcml0ZSBSRl9SMjQgdG8gcHJvZ3JhbSBmaWx0ZXIKKwkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNCwgUkZfUjI0X1ZhbHVlKTsKKwkJfQorCisJCWlmIChjb3VudCA+IDApCisJCXsKKwkJCVJGX1IyNF9WYWx1ZSA9IFJGX1IyNF9WYWx1ZSAtICgoY291bnQpID8gKDEpIDogKDApKTsKKwkJfQorCisJCS8vIFN0b3JlIGZvciBmdXR1cmUgdXNhZ2UKKwkJaWYgKGxvb3BjbnQgPCAxMDApCisJCXsKKwkJCWlmIChsb29wKysgPT0gMCkKKwkJCXsKKwkJCQkvL0JhbmRXaWR0aCA9IDIwIE1IegorCQkJCXBBZC0+TWxtZS5DYWxpQlcyMFJmUjI0ID0gKFVDSEFSKVJGX1IyNF9WYWx1ZTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvL0JhbmRXaWR0aCA9IDQwIE1IegorCQkJCXBBZC0+TWxtZS5DYWxpQlc0MFJmUjI0ID0gKFVDSEFSKVJGX1IyNF9WYWx1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQllbHNlCisJCQlicmVhazsKKworCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjQsIFJGX1IyNF9WYWx1ZSk7CisKKwkJLy8gcmVzZXQgY291bnQKKwkJY291bnQgPSAwOworCX0gd2hpbGUoVFJVRSk7CisKKwkvLworCS8vIFNldCBiYWNrIHRvIGluaXRpYWwgc3RhdGUKKwkvLworCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjI0LCAwKTsKKworCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjIyLCAmdmFsdWUpOworCXZhbHVlICY9IH4oMHgwMSk7CisJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjIyLCB2YWx1ZSk7CisKKwkvLyBzZXQgQkJQIGJhY2sgdG8gQlcyMAorCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJCUFZhbHVlKTsKKwlCQlBWYWx1ZSY9ICh+MHgxOCk7CisJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUEZpbHRlckNhbGlicmF0aW9uIC0gQ2FsaUJXMjBSZlIyND0weCV4LCBDYWxpQlc0MFJmUjI0PTB4JXhcbiIsIHBBZC0+TWxtZS5DYWxpQlcyMFJmUjI0LCBwQWQtPk1sbWUuQ2FsaUJXNDBSZlIyNCkpOworfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisKKyNpZmRlZiBSVDMwNzAKK1ZPSUQgTklDSW5pdFJUMzB4eFJGUmVnaXN0ZXJzKElOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUlOVCBpOworCS8vIERyaXZlciBtdXN0IHJlYWQgRUVQUk9NIHRvIGdldCBSZkljVHlwZSBiZWZvcmUgaW5pdGlhbCBSRiByZWdpc3RlcnMKKwkvLyBJbml0aWFsaXplIFJGIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWUKKwlpZiAoSVNfUlQzMDcwKHBBZCkgfHwgSVNfUlQzMDcxKHBBZCkpCisJeworCQkvLyBJbml0IFJGIGNhbGlicmF0aW9uCisJCS8vIERyaXZlciBzaG91bGQgdG9nZ2xlIFJGIFIzMCBiaXQ3IGJlZm9yZSBpbml0IFJGIHJlZ2lzdGVycworCQlVSU5UMzIgUmZSZWcgPSAwOworCQlVSU5UMzIgZGF0YTsKKworCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IzMCwgKFBVQ0hBUikmUmZSZWcpOworCQlSZlJlZyB8PSAweDgwOworCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMzAsIChVQ0hBUilSZlJlZyk7CisJCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisJCVJmUmVnICY9IDB4N0Y7CisJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IzMCwgKFVDSEFSKVJmUmVnKTsKKworCQkvLyBJbml0aWFsaXplIFJGIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWUKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9SRl9SRUdfUEFSTVM7IGkrKykKKwkJeworCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUlQzMHh4X1JGUmVnVGFibGVbaV0uUmVnaXN0ZXIsIFJUMzB4eF9SRlJlZ1RhYmxlW2ldLlZhbHVlKTsKKwkJfQorCisJCS8vIGFkZCBieSBqb2hubGkKKwkJaWYgKElTX1JUMzA3MChwQWQpKQorCQl7CisJCQkvLyAgVXBkYXRlIE1BQyAweDA1RDQgZnJvbSAwMXh4eHh4eCB0byAwRHh4eHh4eCAodm9sdGFnZSAxLjJWIHRvIDEuMzVWKSBmb3IgUlQzMDcwIHRvIGltcHJvdmUgeWllbGQgcmF0ZQorCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBMRE9fQ0ZHMCwgJmRhdGEpOworCQkJZGF0YSA9ICgoZGF0YSAmIDB4RjBGRkZGRkYpIHwgMHgwRDAwMDAwMCk7CisJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBMRE9fQ0ZHMCwgZGF0YSk7CisJCX0KKwkJZWxzZSBpZiAoSVNfUlQzMDcxKHBBZCkpCisJCXsKKwkJCS8vIERyaXZlciBzaG91bGQgc2V0IFJGIFI2IGJpdDYgb24gYmVmb3JlIGluaXQgUkYgcmVnaXN0ZXJzCisJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwNiwgKFBVQ0hBUikmUmZSZWcpOworCQkJUmZSZWcgfD0gMHg0MDsKKwkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwNiwgKFVDSEFSKVJmUmVnKTsKKworCQkJLy8gaW5pdCBSMzEKKwkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IzMSwgMHgxNCk7CisKKwkJCS8vIFJUMzA3MSB2ZXJzaW9uIEUgaGFzIGZpeGVkIHRoaXMgaXNzdWUKKwkJCWlmICgocEFkLT5OaWNDb25maWcyLmZpZWxkLkRBQ1Rlc3RCaXQgPT0gMSkgJiYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpIDwgMHgwMjExKSkKKwkJCXsKKwkJCQkvLyBwYXRjaCB0eCBFVk0gaXNzdWUgdGVtcG9yYXJpbHkKKwkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIExET19DRkcwLCAmZGF0YSk7CisJCQkJZGF0YSA9ICgoZGF0YSAmIDB4RTBGRkZGRkYpIHwgMHgwRDAwMDAwMCk7CisJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgTERPX0NGRzAsIGRhdGEpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTERPX0NGRzAsICZkYXRhKTsKKwkJCQlkYXRhID0gKChkYXRhICYgMHhFMEZGRkZGRikgfCAweDAxMDAwMDAwKTsKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBMRE9fQ0ZHMCwgZGF0YSk7CisJCQl9CisKKwkJCS8vIHBhdGNoIExOQV9QRV9HMSBmYWlsZWQgaXNzdWUKKwkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgR1BJT19TV0lUQ0gsICZkYXRhKTsKKwkJCWRhdGEgJj0gfigweDIwKTsKKwkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIEdQSU9fU1dJVENILCBkYXRhKTsKKwkJfQorCisJCS8vRm9yIFJGIGZpbHRlciBDYWxpYnJhdGlvbgorCQlSVE1QRmlsdGVyQ2FsaWJyYXRpb24ocEFkKTsKKworCQkvLyBJbml0aWFsaXplIFJGIFIyNyByZWdpc3Rlciwgc2V0IFJGIFIyNyBtdXN0IGJlIGJlaGluZCBSVE1QRmlsdGVyQ2FsaWJyYXRpb24oKQorCQlpZiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPCAweDAyMTEpCisJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjcsIDB4Myk7CisKKwkJLy8gc2V0IGxlZCBvcGVuIGRyYWluIGVuYWJsZQorCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIE9QVF8xNCwgJmRhdGEpOworCQlkYXRhIHw9IDB4MDE7CisJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIE9QVF8xNCwgZGF0YSk7CisKKwkJaWYgKElTX1JUMzA3MShwQWQpKQorCQl7CisJCQkvLyBhZGQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cCwgbG9hZCBSRiBub3JtYWwgb3BlcmF0aW9uLW1vZGUgc2V0dXAKKwkJCVJUMzB4eExvYWRSRk5vcm1hbE1vZGVTZXR1cChwQWQpOworCQl9CisJfQorCit9CisjZW5kaWYgLy8gUlQzMDcwIC8vCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVJlYWQgaW5pdGlhbCBwYXJhbWV0ZXJzIGZyb20gRUVQUk9NCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlOSUNSZWFkRUVQUk9NUGFyYW1ldGVycygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQltYWNfYWRkcikKK3sKKwlVSU5UMzIJCQlkYXRhID0gMDsKKwlVU0hPUlQJCQlpLCB2YWx1ZSwgdmFsdWUyOworCVVDSEFSCQkJVG1wUGh5OworCUVFUFJPTV9UWF9QV1JfU1RSVUMJICAgIFBvd2VyOworCUVFUFJPTV9WRVJTSU9OX1NUUlVDICAgIFZlcnNpb247CisJRUVQUk9NX0FOVEVOTkFfU1RSVUMJQW50ZW5uYTsKKwlFRVBST01fTklDX0NPTkZJRzJfU1RSVUMgICAgTmljQ29uZmlnMjsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBOSUNSZWFkRUVQUk9NUGFyYW1ldGVyc1xuIikpOworCisJLy8gSW5pdCBFRVBST00gQWRkcmVzcyBOdW1iZXIsIGJlZm9yZSBhY2Nlc3MgRUVQUk9NOyBpZiA5M2M0NiwgRUVQUk9NQWRkcmVzc051bT02LCBlbHNlIGlmIDkzYzY2LCBFRVBST01BZGRyZXNzTnVtPTgKKwlSVE1QX0lPX1JFQUQzMihwQWQsIEUyUFJPTV9DU1IsICZkYXRhKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gRTJQUk9NX0NTUiA9IDB4JXhcbiIsIGRhdGEpKTsKKworCWlmKChkYXRhICYgMHgzMCkgPT0gMCkKKwkJcEFkLT5FRVBST01BZGRyZXNzTnVtID0gNjsJCS8vIDkzQzQ2CisJZWxzZSBpZigoZGF0YSAmIDB4MzApID09IDB4MTApCisJCXBBZC0+RUVQUk9NQWRkcmVzc051bSA9IDg7ICAgICAvLyA5M0M2NgorCWVsc2UKKwkJcEFkLT5FRVBST01BZGRyZXNzTnVtID0gODsgICAgIC8vIDkzQzg2CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IEVFUFJPTUFkZHJlc3NOdW0gPSAlZFxuIiwgcEFkLT5FRVBST01BZGRyZXNzTnVtICkpOworCisJLy8gUlQyODYwIE1BQyBubyBsb25nZXIgYXV0byBsb2FkIE1BQyBhZGRyZXNzIGZyb20gRTJQUk9NLiBEcml2ZXIgaGFzIHRvIGludGlhbGl6ZQorCS8vIE1BQyBhZGRyZXNzIHJlZ2lzdGVycyBhY2NvcmRpbmcgdG8gRTJQUk9NIHNldHRpbmcKKwlpZiAobWFjX2FkZHIgPT0gTlVMTCB8fAorCQlzdHJsZW4obWFjX2FkZHIpICE9IDE3IHx8CisJCW1hY19hZGRyWzJdICE9ICc6JyAgfHwgbWFjX2FkZHJbNV0gIT0gJzonICB8fCBtYWNfYWRkcls4XSAhPSAnOicgfHwKKwkJbWFjX2FkZHJbMTFdICE9ICc6JyB8fCBtYWNfYWRkclsxNF0gIT0gJzonKQorCXsKKwkJVVNIT1JUICBBZGRyMDEsQWRkcjIzLEFkZHI0NSA7CisKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDA0LCBBZGRyMDEpOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4MDYsIEFkZHIyMyk7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHgwOCwgQWRkcjQ1KTsKKworCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbMF0gPSAoVUNIQVIpKEFkZHIwMSAmIDB4ZmYpOworCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbMV0gPSAoVUNIQVIpKEFkZHIwMSA+PiA4KTsKKwkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzJdID0gKFVDSEFSKShBZGRyMjMgJiAweGZmKTsKKwkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzNdID0gKFVDSEFSKShBZGRyMjMgPj4gOCk7CisJCXBBZC0+UGVybWFuZW50QWRkcmVzc1s0XSA9IChVQ0hBUikoQWRkcjQ1ICYgMHhmZik7CisJCXBBZC0+UGVybWFuZW50QWRkcmVzc1s1XSA9IChVQ0hBUikoQWRkcjQ1ID4+IDgpOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkluaXRpYWxpemUgTUFDIEFkZHJlc3MgZnJvbSBFMlBST00gXG4iKSk7CisJfQorCWVsc2UKKwl7CisJCUlOVAkJajsKKwkJUFVDSEFSCW1hY3B0cjsKKworCQltYWNwdHIgPSBtYWNfYWRkcjsKKworCQlmb3IgKGo9MDsgajxNQUNfQUREUl9MRU47IGorKykKKwkJeworCQkJQXRvSChtYWNwdHIsICZwQWQtPlBlcm1hbmVudEFkZHJlc3Nbal0sIDEpOworCQkJbWFjcHRyPW1hY3B0ciszOworCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSW5pdGlhbGl6ZSBNQUMgQWRkcmVzcyBmcm9tIG1vZHVsZSBwYXJhbWV0ZXIgXG4iKSk7CisJfQorCisKKwl7CisJCS8vbW9yZSBjb252ZW5pbmV0IHRvIHRlc3QgbWJzc2lkLCBzbyBhcCdzIGJzc2lkICYweGYxCisJCWlmIChwQWQtPlBlcm1hbmVudEFkZHJlc3NbMF0gPT0gMHhmZikKKwkJCXBBZC0+UGVybWFuZW50QWRkcmVzc1swXSA9IFJhbmRvbUJ5dGUocEFkKSYweGY4OworCisJCS8vaWYgKHBBZC0+UGVybWFuZW50QWRkcmVzc1s1XSA9PSAweGZmKQorCQkvLwlwQWQtPlBlcm1hbmVudEFkZHJlc3NbNV0gPSBSYW5kb21CeXRlKHBBZCkmMHhmODsKKworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCJFMlBST00gTUFDOiA9JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbMF0sIHBBZC0+UGVybWFuZW50QWRkcmVzc1sxXSwKKwkJCXBBZC0+UGVybWFuZW50QWRkcmVzc1syXSwgcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzNdLAorCQkJcEFkLT5QZXJtYW5lbnRBZGRyZXNzWzRdLCBwQWQtPlBlcm1hbmVudEFkZHJlc3NbNV0pKTsKKwkJaWYgKHBBZC0+YkxvY2FsQWRtaW5NQUMgPT0gRkFMU0UpCisJCXsKKwkJCU1BQ19EVzBfU1RSVUMgY3NyMjsKKwkJCU1BQ19EVzFfU1RSVUMgY3NyMzsKKwkJCUNPUFlfTUFDX0FERFIocEFkLT5DdXJyZW50QWRkcmVzcywgcEFkLT5QZXJtYW5lbnRBZGRyZXNzKTsKKwkJCWNzcjIuZmllbGQuQnl0ZTAgPSBwQWQtPkN1cnJlbnRBZGRyZXNzWzBdOworCQkJY3NyMi5maWVsZC5CeXRlMSA9IHBBZC0+Q3VycmVudEFkZHJlc3NbMV07CisJCQljc3IyLmZpZWxkLkJ5dGUyID0gcEFkLT5DdXJyZW50QWRkcmVzc1syXTsKKwkJCWNzcjIuZmllbGQuQnl0ZTMgPSBwQWQtPkN1cnJlbnRBZGRyZXNzWzNdOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX0FERFJfRFcwLCBjc3IyLndvcmQpOworCQkJY3NyMy53b3JkID0gMDsKKwkJCWNzcjMuZmllbGQuQnl0ZTQgPSBwQWQtPkN1cnJlbnRBZGRyZXNzWzRdOworCQkJY3NyMy5maWVsZC5CeXRlNSA9IHBBZC0+Q3VycmVudEFkZHJlc3NbNV07CisJCQljc3IzLmZpZWxkLlUyTWVNYXNrID0gMHhmZjsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19BRERSX0RXMSwgY3NyMy53b3JkKTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwoIkUyUFJPTSBNQUM6ID0lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbMF0sIHBBZC0+UGVybWFuZW50QWRkcmVzc1sxXSwKKwkJCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbMl0sIHBBZC0+UGVybWFuZW50QWRkcmVzc1szXSwKKwkJCQlwQWQtPlBlcm1hbmVudEFkZHJlc3NbNF0sIHBBZC0+UGVybWFuZW50QWRkcmVzc1s1XSkpOworCQl9CisJfQorCisJLy8gaWYgbm90IHJldHVybiBlYXJseS4gY2F1c2UgZmFpbCBhdCBlbXVsYXRpb24uCisJLy8gSW5pdCB0aGUgY2hhbm5lbCBudW1iZXIgZm9yIFRYIGNoYW5uZWwgcG93ZXIKKwlSVE1QUmVhZENoYW5uZWxQd3IocEFkKTsKKworCS8vIGlmIEUyUFJPTSB2ZXJzaW9uIG1pc21hdGNoIHdpdGggZHJpdmVyJ3MgZXhwZWN0YXRpb24sIHRoZW4gc2tpcAorCS8vIGFsbCBzdWJzZXF1ZW50IEUyUlBPTSByZXRpZXZhbCBhbmQgc2V0IGEgc3lzdGVtIGVycm9yIGJpdCB0byBub3RpZnkgR1VJCisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fVkVSU0lPTl9PRkZTRVQsIFZlcnNpb24ud29yZCk7CisJcEFkLT5FZXByb21WZXJzaW9uID0gVmVyc2lvbi5maWVsZC5WZXJzaW9uICsgVmVyc2lvbi5maWVsZC5GYWVSZWxlYXNlTnVtYmVyICogMjU2OworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkUyUFJPTTogVmVyc2lvbiA9ICVkLCBGQUUgcmVsZWFzZSAjJWRcbiIsIFZlcnNpb24uZmllbGQuVmVyc2lvbiwgVmVyc2lvbi5maWVsZC5GYWVSZWxlYXNlTnVtYmVyKSk7CisKKwlpZiAoVmVyc2lvbi5maWVsZC5WZXJzaW9uID4gVkFMSURfRUVQUk9NX1ZFUlNJT04pCisJeworCQlEQkdQUklOVF9FUlIoKCJFMlBST006IFdST05HIFZFUlNJT04gMHgleCwgc2hvdWxkIGJlICVkXG4iLFZlcnNpb24uZmllbGQuVmVyc2lvbiwgVkFMSURfRUVQUk9NX1ZFUlNJT04pKTsKKwkJLypwQWQtPlN5c3RlbUVycm9yQml0bWFwIHw9IDB4MDAwMDAwMDE7CisKKwkJLy8gaGFyZC1jb2RlIGRlZmF1bHQgdmFsdWUgd2hlbiBubyBwcm9wZXIgRTJQUk9NIGluc3RhbGxlZAorCQlwQWQtPmJBdXRvVHhBZ2NBID0gRkFMU0U7CisJCXBBZC0+YkF1dG9UeEFnY0cgPSBGQUxTRTsKKworCQkvLyBEZWZhdWx0IHRoZSBjaGFubmVsIHBvd2VyCisJCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX09GX0NIQU5ORUxTOyBpKyspCisJCQlwQWQtPlR4UG93ZXJbaV0uUG93ZXIgPSBERUZBVUxUX1JGX1RYX1BPV0VSOworCisJCS8vIERlZmF1bHQgdGhlIGNoYW5uZWwgcG93ZXIKKwkJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfMTFKQ0hBTk5FTFM7IGkrKykKKwkJCXBBZC0+VHhQb3dlcjExSltpXS5Qb3dlciA9IERFRkFVTFRfUkZfVFhfUE9XRVI7CisKKwkJZm9yKGkgPSAwOyBpIDwgTlVNX0VFUFJPTV9CQlBfUEFSTVM7IGkrKykKKwkJCXBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlW2ldID0gMHhmZmZmOworCQlyZXR1cm47ICAqLworCX0KKworCS8vIFJlYWQgQkJQIGRlZmF1bHQgdmFsdWUgZnJvbSBFRVBST00gYW5kIHN0b3JlIHRvIGFycmF5KEVFUFJPTURlZmF1bHRWYWx1ZSkgaW4gcEFkCisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fTklDMV9PRkZTRVQsIHZhbHVlKTsKKwlwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVswXSA9IHZhbHVlOworCisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fTklDMl9PRkZTRVQsIHZhbHVlKTsKKwlwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVsxXSA9IHZhbHVlOworCisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDM4LCB2YWx1ZSk7CS8vIENvdW50cnkgUmVnaW9uCisJcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMl0gPSB2YWx1ZTsKKworCWZvcihpID0gMDsgaSA8IDg7IGkrKykKKwl7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0JCUF9CQVNFX09GRlNFVCArIGkqMiwgdmFsdWUpOworCQlwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVtpKzNdID0gdmFsdWU7CisJfQorCisJLy8gV2UgaGF2ZSB0byBwYXJzZSBOSUMgY29uZmlndXJhdGlvbiAwIGF0IGhlcmUuCisJLy8gSWYgVFNTSSBkaWQgbm90IGhhdmUgcHJlbG9hZGVkIHZhbHVlLCBpdCBzaG91bGQgcmVzZXQgdGhlIFR4QXV0b0FnYyB0byBmYWxzZQorCS8vIFRoZXJlZm9yZSwgd2UgaGF2ZSB0byByZWFkIFR4QXV0b0FnYyBjb250cm9sIGJlZm9yZWhhbmQuCisJLy8gUmVhZCBUeCBBR0MgY29udHJvbCBiaXQKKwlBbnRlbm5hLndvcmQgPSBwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVswXTsKKwlpZiAoQW50ZW5uYS53b3JkID09IDB4RkZGRikKKwl7CisjaWZkZWYgUlQzMHh4CisJCWlmKElTX1JUMzA5MChwQWQpKQorCQl7CisJCQlBbnRlbm5hLndvcmQgPSAwOworCQkJQW50ZW5uYS5maWVsZC5SZkljVHlwZSA9IFJGSUNfMzAyMDsKKwkJCUFudGVubmEuZmllbGQuVHhQYXRoID0gMTsKKwkJCUFudGVubmEuZmllbGQuUnhQYXRoID0gMTsKKwkJfQorCQllbHNlCisJCXsKKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJCUFudGVubmEud29yZCA9IDA7CisJCQlBbnRlbm5hLmZpZWxkLlJmSWNUeXBlID0gUkZJQ18yODIwOworCQkJQW50ZW5uYS5maWVsZC5UeFBhdGggPSAxOworCQkJQW50ZW5uYS5maWVsZC5SeFBhdGggPSAyOworCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJFMlBST00gZXJyb3IsIGhhcmQgY29kZSBhcyAweCUwNHhcbiIsIEFudGVubmEud29yZCkpOworI2lmZGVmIFJUMzB4eAorCQl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJfQorCisJLy8gQ2hvb3NlIHRoZSBkZXNpcmVkIFR4JlJ4IHN0cmVhbS4KKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID09IDApIHx8IChwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA+IEFudGVubmEuZmllbGQuVHhQYXRoKSkKKwkJcEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPSBBbnRlbm5hLmZpZWxkLlR4UGF0aDsKKworCWlmICgocEFkLT5Db21tb25DZmcuUnhTdHJlYW0gPT0gMCkgfHwgKHBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtID4gQW50ZW5uYS5maWVsZC5SeFBhdGgpKQorCXsKKwkJcEFkLT5Db21tb25DZmcuUnhTdHJlYW0gPSBBbnRlbm5hLmZpZWxkLlJ4UGF0aDsKKworCQlpZiAoKHBBZC0+TUFDVmVyc2lvbiA8IFJBTElOS18yODgzX1ZFUlNJT04pICYmCisJCQkocEFkLT5Db21tb25DZmcuUnhTdHJlYW0gPiAyKSkKKwkJeworCQkJLy8gb25seSAyIFJ4IHN0cmVhbXMgZm9yIFJUMjg2MCBzZXJpZXMKKwkJCXBBZC0+Q29tbW9uQ2ZnLlJ4U3RyZWFtID0gMjsKKwkJfQorCX0KKworCS8vIDMqMworCS8vIHJlYWQgdmFsdWUgZnJvbSBFRVBST00gYW5kIHNldCB0aGVtIHRvIENTUjE3NCB+IDE3NyBpbiBjaGFpbjAgfiBjaGFpbjIKKwkvLyB5ZXQgaW1wbGVtZW50CisJZm9yKGk9MDsgaTwzOyBpKyspCisJeworCX0KKworCU5pY0NvbmZpZzIud29yZCA9IHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlWzFdOworCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlpZiAoKE5pY0NvbmZpZzIud29yZCAmIDB4MDBmZikgPT0gMHhmZikKKwkJeworCQkJTmljQ29uZmlnMi53b3JkICY9IDB4ZmYwMDsKKwkJfQorCisJCWlmICgoTmljQ29uZmlnMi53b3JkID4+IDgpID09IDB4ZmYpCisJCXsKKwkJCU5pY0NvbmZpZzIud29yZCAmPSAweDAwZmY7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlpZiAoTmljQ29uZmlnMi5maWVsZC5EeW5hbWljVHhBZ2NDb250cm9sID09IDEpCisJCXBBZC0+YkF1dG9UeEFnY0EgPSBwQWQtPmJBdXRvVHhBZ2NHID0gVFJVRTsKKwllbHNlCisJCXBBZC0+YkF1dG9UeEFnY0EgPSBwQWQtPmJBdXRvVHhBZ2NHID0gRkFMU0U7CisKKwlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiTklDUmVhZEVFUFJPTVBhcmFtZXRlcnM6IFJ4UGF0aCA9ICVkLCBUeFBhdGggPSAlZFxuIiwgQW50ZW5uYS5maWVsZC5SeFBhdGgsIEFudGVubmEuZmllbGQuVHhQYXRoKSk7CisKKwkvLyBTYXZlIHRoZSBhbnRlbm5hIGZvciBmdXR1cmUgdXNlCisJcEFkLT5BbnRlbm5hLndvcmQgPSBBbnRlbm5hLndvcmQ7CisKKwkvLworCS8vIFJlc2V0IFBoeU1vZGUgaWYgd2UgZG9uJ3Qgc3VwcG9ydCA4MDIuMTFhCisJLy8gT25seSBSRklDXzI4NTAgJiBSRklDXzI3NTAgc3VwcG9ydCA4MDIuMTFhCisJLy8KKwlpZiAoKEFudGVubmEuZmllbGQuUmZJY1R5cGUgIT0gUkZJQ18yODUwKSAmJiAoQW50ZW5uYS5maWVsZC5SZkljVHlwZSAhPSBSRklDXzI3NTApKQorCXsKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFCR19NSVhFRCkgfHwKKwkJCShwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUEpKQorCQkJcEFkLT5Db21tb25DZmcuUGh5TW9kZSA9IFBIWV8xMUJHX01JWEVEOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQllbHNlIGlmICgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBQkdOX01JWEVEKQl8fAorCQkJCSAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBTl9NSVhFRCkgCXx8CisJCQkJIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUFHTl9NSVhFRCkgCXx8CisJCQkJIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMU5fNUcpKQorCQkJcEFkLT5Db21tb25DZmcuUGh5TW9kZSA9IFBIWV8xMUJHTl9NSVhFRDsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwl9CisKKwkvLyBSZWFkIFRTU0kgcmVmZXJlbmNlIGFuZCBUU1NJIGJvdW5kYXJ5IGZvciB0ZW1wZXJhdHVyZSBjb21wZW5zYXRpb24uIFRoaXMgaXMgdWdseQorCS8vIDAuIDExYi9nCisJeworCQkvKiB0aGVzZSBhcmUgdGVtcGF0dXJlIHJlZmVyZW5jZSB2YWx1ZSAoMHgwMCB+IDB4RkUpCisJCSAgIGV4OiAweDAwIDB4MTUgMHgyNSAweDQ1IDB4ODggMHhBMCAweEI1IDB4RDAgMHhGMAorCQkgICBUc3NpUGx1c0JvdW5kYXJ5RyBbNF0gWzNdIFsyXSBbMV0gWzBdIChzbWFsbGVyKSArCisJCSAgIFRzc2lNaW51c0JvdW5kYXJ5R1swXSBbMV0gWzJdIFszXSBbNF0gKGxhcmdlcikgKi8KKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDZFLCBQb3dlci53b3JkKTsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbNF0gPSBQb3dlci5maWVsZC5CeXRlMDsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbM10gPSBQb3dlci5maWVsZC5CeXRlMTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDcwLCBQb3dlci53b3JkKTsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbMl0gPSBQb3dlci5maWVsZC5CeXRlMDsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbMV0gPSBQb3dlci5maWVsZC5CeXRlMTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDcyLCBQb3dlci53b3JkKTsKKwkJcEFkLT5Uc3NpUmVmRyAgID0gUG93ZXIuZmllbGQuQnl0ZTA7IC8qIHJlZmVyZW5jZSB2YWx1ZSBbMF0gKi8KKwkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1sxXSA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4NzQsIFBvd2VyLndvcmQpOworCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzJdID0gUG93ZXIuZmllbGQuQnl0ZTA7CisJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUdbM10gPSBQb3dlci5maWVsZC5CeXRlMTsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDc2LCBQb3dlci53b3JkKTsKKwkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1s0XSA9IFBvd2VyLmZpZWxkLkJ5dGUwOworCQlwQWQtPlR4QWdjU3RlcEcgPSBQb3dlci5maWVsZC5CeXRlMTsKKwkJcEFkLT5UeEFnY0NvbXBlbnNhdGVHID0gMDsKKwkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbMF0gPSBwQWQtPlRzc2lSZWZHOworCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlHWzBdICA9IHBBZC0+VHNzaVJlZkc7CisKKwkJLy8gRGlzYWJsZSBUeEFnYyBpZiB0aGUgYmFzZWQgdmFsdWUgaXMgbm90IHJpZ2h0CisJCWlmIChwQWQtPlRzc2lSZWZHID09IDB4ZmYpCisJCQlwQWQtPmJBdXRvVHhBZ2NHID0gRkFMU0U7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJFMlBST006IEcgVHNzaVstNCAuLiArNF0gPSAlZCAlZCAlZCAlZCAtICVkIC0lZCAlZCAlZCAlZCwgc3RlcD0lZCwgdHVuaW5nPSVkXG4iLAorCQkJcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbNF0sIHBBZC0+VHNzaU1pbnVzQm91bmRhcnlHWzNdLCBwQWQtPlRzc2lNaW51c0JvdW5kYXJ5R1syXSwgcEFkLT5Uc3NpTWludXNCb3VuZGFyeUdbMV0sCisJCQlwQWQtPlRzc2lSZWZHLAorCQkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1sxXSwgcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1syXSwgcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1szXSwgcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5R1s0XSwKKwkJCXBBZC0+VHhBZ2NTdGVwRywgcEFkLT5iQXV0b1R4QWdjRykpOworCX0KKwkvLyAxLiAxMWEKKwl7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHhENCwgUG93ZXIud29yZCk7CisJCXBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzRdID0gUG93ZXIuZmllbGQuQnl0ZTA7CisJCXBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzNdID0gUG93ZXIuZmllbGQuQnl0ZTE7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHhENiwgUG93ZXIud29yZCk7CisJCXBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzJdID0gUG93ZXIuZmllbGQuQnl0ZTA7CisJCXBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzFdID0gUG93ZXIuZmllbGQuQnl0ZTE7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHhEOCwgUG93ZXIud29yZCk7CisJCXBBZC0+VHNzaVJlZkEgICA9IFBvd2VyLmZpZWxkLkJ5dGUwOworCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzFdID0gUG93ZXIuZmllbGQuQnl0ZTE7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHhEQSwgUG93ZXIud29yZCk7CisJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMl0gPSBQb3dlci5maWVsZC5CeXRlMDsKKwkJcEFkLT5Uc3NpUGx1c0JvdW5kYXJ5QVszXSA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4REMsIFBvd2VyLndvcmQpOworCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzRdID0gUG93ZXIuZmllbGQuQnl0ZTA7CisJCXBBZC0+VHhBZ2NTdGVwQSA9IFBvd2VyLmZpZWxkLkJ5dGUxOworCQlwQWQtPlR4QWdjQ29tcGVuc2F0ZUEgPSAwOworCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5QVswXSA9IHBBZC0+VHNzaVJlZkE7CisJCXBBZC0+VHNzaVBsdXNCb3VuZGFyeUFbMF0gID0gcEFkLT5Uc3NpUmVmQTsKKworCQkvLyBEaXNhYmxlIFR4QWdjIGlmIHRoZSBiYXNlZCB2YWx1ZSBpcyBub3QgcmlnaHQKKwkJaWYgKHBBZC0+VHNzaVJlZkEgPT0gMHhmZikKKwkJCXBBZC0+YkF1dG9UeEFnY0EgPSBGQUxTRTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkUyUFJPTTogQSBUc3NpWy00IC4uICs0XSA9ICVkICVkICVkICVkIC0gJWQgLSVkICVkICVkICVkLCBzdGVwPSVkLCB0dW5pbmc9JWRcbiIsCisJCQlwQWQtPlRzc2lNaW51c0JvdW5kYXJ5QVs0XSwgcEFkLT5Uc3NpTWludXNCb3VuZGFyeUFbM10sIHBBZC0+VHNzaU1pbnVzQm91bmRhcnlBWzJdLCBwQWQtPlRzc2lNaW51c0JvdW5kYXJ5QVsxXSwKKwkJCXBBZC0+VHNzaVJlZkEsCisJCQlwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzFdLCBwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzJdLCBwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzNdLCBwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzRdLAorCQkJcEFkLT5UeEFnY1N0ZXBBLCBwQWQtPmJBdXRvVHhBZ2NBKSk7CisJfQorCXBBZC0+QmJwUnNzaVRvRGJtRGVsdGEgPSAweDA7CisKKwkvLyBSZWFkIGZyZXF1ZW5jeSBvZmZzZXQgc2V0dGluZyBmb3IgUkYKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9GUkVRX09GRlNFVCwgdmFsdWUpOworCWlmICgodmFsdWUgJiAweDAwRkYpICE9IDB4MDBGRikKKwkJcEFkLT5SZkZyZXFPZmZzZXQgPSAoVUxPTkcpICh2YWx1ZSAmIDB4MDBGRik7CisJZWxzZQorCQlwQWQtPlJmRnJlcU9mZnNldCA9IDA7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRTJQUk9NOiBSRiBGcmVxT2Zmc2V0PTB4JWx4IFxuIiwgcEFkLT5SZkZyZXFPZmZzZXQpKTsKKworCS8vQ291bnRyeVJlZ2lvbiBieXRlIG9mZnNldCAoMzhoKQorCXZhbHVlID0gcEFkLT5FRVBST01EZWZhdWx0VmFsdWVbMl0gPj4gODsJCS8vIDIuNEcgYmFuZAorCXZhbHVlMiA9IHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlWzJdICYgMHgwMEZGOwkvLyA1RyBiYW5kCisKKwlpZiAoKHZhbHVlIDw9IFJFR0lPTl9NQVhJTVVNX0JHX0JBTkQpICYmICh2YWx1ZTIgPD0gUkVHSU9OX01BWElNVU1fQV9CQU5EKSkKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24gPSAoKFVDSEFSKSB2YWx1ZSkgfCAweDgwOworCQlwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQgPSAoKFVDSEFSKSB2YWx1ZTIpIHwgMHg4MDsKKwkJVG1wUGh5ID0gcEFkLT5Db21tb25DZmcuUGh5TW9kZTsKKwkJcEFkLT5Db21tb25DZmcuUGh5TW9kZSA9IDB4ZmY7CisJCVJUTVBTZXRQaHlNb2RlKHBBZCwgVG1wUGh5KTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJU2V0Q29tbW9uSFQocEFkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwl9CisKKwkvLworCS8vIEdldCBSU1NJIE9mZnNldCBvbiBFRVBST00gMHg5QWggJiAweDlDaC4KKwkvLyBUaGUgdmFsaWQgdmFsdWUgYXJlICgtMTAgfiAxMCkKKwkvLworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1JTU0lfQkdfT0ZGU0VULCB2YWx1ZSk7CisJcEFkLT5CR1Jzc2lPZmZzZXQwID0gdmFsdWUgJiAweDAwZmY7CisJcEFkLT5CR1Jzc2lPZmZzZXQxID0gKHZhbHVlID4+IDgpOworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX1JTU0lfQkdfT0ZGU0VUKzIsIHZhbHVlKTsKKwlwQWQtPkJHUnNzaU9mZnNldDIgPSB2YWx1ZSAmIDB4MDBmZjsKKwlwQWQtPkFMTkFHYWluMSA9ICh2YWx1ZSA+PiA4KTsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9MTkFfT0ZGU0VULCB2YWx1ZSk7CisJcEFkLT5CTE5BR2FpbiA9IHZhbHVlICYgMHgwMGZmOworCXBBZC0+QUxOQUdhaW4wID0gKHZhbHVlID4+IDgpOworCisJLy8gVmFsaWRhdGUgMTFiL2cgUlNTSV8wIG9mZnNldC4KKwlpZiAoKHBBZC0+QkdSc3NpT2Zmc2V0MCA8IC0xMCkgfHwgKHBBZC0+QkdSc3NpT2Zmc2V0MCA+IDEwKSkKKwkJcEFkLT5CR1Jzc2lPZmZzZXQwID0gMDsKKworCS8vIFZhbGlkYXRlIDExYi9nIFJTU0lfMSBvZmZzZXQuCisJaWYgKChwQWQtPkJHUnNzaU9mZnNldDEgPCAtMTApIHx8IChwQWQtPkJHUnNzaU9mZnNldDEgPiAxMCkpCisJCXBBZC0+QkdSc3NpT2Zmc2V0MSA9IDA7CisKKwkvLyBWYWxpZGF0ZSAxMWIvZyBSU1NJXzIgb2Zmc2V0LgorCWlmICgocEFkLT5CR1Jzc2lPZmZzZXQyIDwgLTEwKSB8fCAocEFkLT5CR1Jzc2lPZmZzZXQyID4gMTApKQorCQlwQWQtPkJHUnNzaU9mZnNldDIgPSAwOworCisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fUlNTSV9BX09GRlNFVCwgdmFsdWUpOworCXBBZC0+QVJzc2lPZmZzZXQwID0gdmFsdWUgJiAweDAwZmY7CisJcEFkLT5BUnNzaU9mZnNldDEgPSAodmFsdWUgPj4gOCk7CisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAoRUVQUk9NX1JTU0lfQV9PRkZTRVQrMiksIHZhbHVlKTsKKwlwQWQtPkFSc3NpT2Zmc2V0MiA9IHZhbHVlICYgMHgwMGZmOworCXBBZC0+QUxOQUdhaW4yID0gKHZhbHVlID4+IDgpOworCisJaWYgKCgoVUNIQVIpcEFkLT5BTE5BR2FpbjEgPT0gMHhGRikgfHwgKHBBZC0+QUxOQUdhaW4xID09IDB4MDApKQorCQlwQWQtPkFMTkFHYWluMSA9IHBBZC0+QUxOQUdhaW4wOworCWlmICgoKFVDSEFSKXBBZC0+QUxOQUdhaW4yID09IDB4RkYpIHx8IChwQWQtPkFMTkFHYWluMiA9PSAweDAwKSkKKwkJcEFkLT5BTE5BR2FpbjIgPSBwQWQtPkFMTkFHYWluMDsKKworCS8vIFZhbGlkYXRlIDExYSBSU1NJXzAgb2Zmc2V0LgorCWlmICgocEFkLT5BUnNzaU9mZnNldDAgPCAtMTApIHx8IChwQWQtPkFSc3NpT2Zmc2V0MCA+IDEwKSkKKwkJcEFkLT5BUnNzaU9mZnNldDAgPSAwOworCisJLy8gVmFsaWRhdGUgMTFhIFJTU0lfMSBvZmZzZXQuCisJaWYgKChwQWQtPkFSc3NpT2Zmc2V0MSA8IC0xMCkgfHwgKHBBZC0+QVJzc2lPZmZzZXQxID4gMTApKQorCQlwQWQtPkFSc3NpT2Zmc2V0MSA9IDA7CisKKwkvL1ZhbGlkYXRlIDExYSBSU1NJXzIgb2Zmc2V0LgorCWlmICgocEFkLT5BUnNzaU9mZnNldDIgPCAtMTApIHx8IChwQWQtPkFSc3NpT2Zmc2V0MiA+IDEwKSkKKwkJcEFkLT5BUnNzaU9mZnNldDIgPSAwOworCisJLy8KKwkvLyBHZXQgTEVEIFNldHRpbmcuCisJLy8KKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4M2EsIHZhbHVlKTsKKwlwQWQtPkxlZENudGwud29yZCA9ICh2YWx1ZSYweGZmMDApID4+IDg7CisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fTEVEMV9PRkZTRVQsIHZhbHVlKTsKKwlwQWQtPkxlZDEgPSB2YWx1ZTsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9MRUQyX09GRlNFVCwgdmFsdWUpOworCXBBZC0+TGVkMiA9IHZhbHVlOworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgRUVQUk9NX0xFRDNfT0ZGU0VULCB2YWx1ZSk7CisJcEFkLT5MZWQzID0gdmFsdWU7CisKKwlSVE1QUmVhZFR4UHdyUGVyUmF0ZShwQWQpOworCisjaWZkZWYgU0lOR0xFX1NLVQorCS8vcEFkLT5Db21tb25DZmcuRGVmaW5lTWF4VHhQd3IgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fREVGSU5FX01BWF9UWFBXUik7CisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fREVGSU5FX01BWF9UWFBXUiwgcEFkLT5Db21tb25DZmcuRGVmaW5lTWF4VHhQd3IpOworI2VuZGlmIC8vIFNJTkdMRV9TS1UgLy8KKyNpZmRlZiBSVDMweHgKKwlpZiAoSVNfUlQzMHh4KHBBZCkpCisJeworCQllRnVzZVBoeXNpY2FsUmVhZFJlZ2lzdGVycyhwQWQsIEVGVVNFX1RBRywgMiwgJnZhbHVlKTsKKwkJcEFkLT5FRnVzZVRhZyA9ICh2YWx1ZSAmIDB4ZmYpOworCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBOSUNSZWFkRUVQUk9NUGFyYW1ldGVyc1xuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJU2V0IGRlZmF1bHQgdmFsdWUgZnJvbSBFRVBST00KKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECU5JQ0luaXRBc2ljRnJvbUVFUFJPTSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlVSU5UMzIJCQkJCWRhdGEgPSAwOworCVVDSEFSCUJCUFIxID0gMDsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwlVU0hPUlQJCQkJCWk7CisJRUVQUk9NX0FOVEVOTkFfU1RSVUMJQW50ZW5uYTsKKwlFRVBST01fTklDX0NPTkZJRzJfU1RSVUMgICAgTmljQ29uZmlnMjsKKwlVQ0hBUglCQlBSMyA9IDA7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gTklDSW5pdEFzaWNGcm9tRUVQUk9NXG4iKSk7CisJZm9yKGkgPSAzOyBpIDwgTlVNX0VFUFJPTV9CQlBfUEFSTVM7IGkrKykKKwl7CisJCVVDSEFSIEJicFJlZ0lkeCwgQmJwVmFsdWU7CisKKwkJaWYgKChwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVtpXSAhPSAweEZGRkYpICYmIChwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVtpXSAhPSAwKSkKKwkJeworCQkJQmJwUmVnSWR4ID0gKFVDSEFSKShwQWQtPkVFUFJPTURlZmF1bHRWYWx1ZVtpXSA+PiA4KTsKKwkJCUJicFZhbHVlICA9IChVQ0hBUikocEFkLT5FRVBST01EZWZhdWx0VmFsdWVbaV0gJiAweGZmKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCYnBSZWdJZHgsIEJicFZhbHVlKTsKKwkJfQorCX0KKworCUFudGVubmEud29yZCA9IHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlWzBdOworCWlmIChBbnRlbm5hLndvcmQgPT0gMHhGRkZGKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRTJQUk9NIGVycm9yLCBoYXJkIGNvZGUgYXMgMHglMDR4XG4iLCBBbnRlbm5hLndvcmQpKTsKKwkJQlVHX09OKEFudGVubmEud29yZCA9PSAweEZGRkYpOworCX0KKwlwQWQtPk1sbWUuUmVhbFJ4UGF0aCA9IChVQ0hBUikgQW50ZW5uYS5maWVsZC5SeFBhdGg7CisJcEFkLT5SZkljVHlwZSA9IChVQ0hBUikgQW50ZW5uYS5maWVsZC5SZkljVHlwZTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgicEFkLT5SZkljVHlwZSA9ICVkLCBSZWFsUnhQYXRoPSVkLCBUeFBhdGggPSAlZFxuIiwgcEFkLT5SZkljVHlwZSwgcEFkLT5NbG1lLlJlYWxSeFBhdGgsQW50ZW5uYS5maWVsZC5UeFBhdGgpKTsKKworCS8vIFNhdmUgdGhlIGFudGVubmEgZm9yIGZ1dHVyZSB1c2UKKwlwQWQtPkFudGVubmEud29yZCA9IEFudGVubmEud29yZDsKKworCU5pY0NvbmZpZzIud29yZCA9IHBBZC0+RUVQUk9NRGVmYXVsdFZhbHVlWzFdOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJaWYgKChOaWNDb25maWcyLndvcmQgJiAweDAwZmYpID09IDB4ZmYpCisJCXsKKwkJCU5pY0NvbmZpZzIud29yZCAmPSAweGZmMDA7CisJCX0KKworCQlpZiAoKE5pY0NvbmZpZzIud29yZCA+PiA4KSA9PSAweGZmKQorCQl7CisJCQlOaWNDb25maWcyLndvcmQgJj0gMHgwMGZmOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gU2F2ZSB0aGUgYW50ZW5uYSBmb3IgZnV0dXJlIHVzZQorCXBBZC0+TmljQ29uZmlnMi53b3JkID0gTmljQ29uZmlnMi53b3JkOworCisJLy8gc2V0IGRlZmF1bHQgYW50ZW5uYSBhcyBtYWluCisJaWYgKHBBZC0+UmZJY1R5cGUgPT0gUkZJQ18zMDIwKQorCQlBc2ljU2V0UnhBbnQocEFkLCBwQWQtPlJ4QW50LlBhaXIxUHJpbWFyeVJ4QW50KTsKKworCS8vCisJLy8gU2VuZCBMRUQgU2V0dGluZyB0byBNQ1UuCisJLy8KKwlpZiAocEFkLT5MZWRDbnRsLndvcmQgPT0gMHhGRikKKwl7CisJCXBBZC0+TGVkQ250bC53b3JkID0gMHgwMTsKKwkJcEFkLT5MZWQxID0gMHg1NTU1OworCQlwQWQtPkxlZDIgPSAweDIyMjE7CisKKyNpZmRlZiBSVDI4NzAKKwkJcEFkLT5MZWQzID0gMHg1NjI3OworI2VuZGlmIC8vIFJUMjg3MCAvLworCX0KKworCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MiwgMHhmZiwgKFVDSEFSKXBBZC0+TGVkMSwgKFVDSEFSKShwQWQtPkxlZDEgPj4gOCkpOworCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MywgMHhmZiwgKFVDSEFSKXBBZC0+TGVkMiwgKFVDSEFSKShwQWQtPkxlZDIgPj4gOCkpOworCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1NCwgMHhmZiwgKFVDSEFSKXBBZC0+TGVkMywgKFVDSEFSKShwQWQtPkxlZDMgPj4gOCkpOworICAgIHBBZC0+TGVkSW5kaWNhdG9yU3RyZWd0aCA9IDB4RkY7CisgICAgUlRNUFNldFNpZ25hbExFRChwQWQsIC0xMDApOwkvLyBGb3JjZSBzaWduYWwgc3RyZW5ndGggTGVkIHRvIGJlIHR1cm5lZCBvZmYsIGJlZm9yZSBsaW5rIHVwCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gUmVhZCBIYXJkd2FyZSBjb250cm9sbGVkIFJhZGlvIHN0YXRlIGVuYWJsZSBiaXQKKwkJaWYgKE5pY0NvbmZpZzIuZmllbGQuSGFyZHdhcmVSYWRpb0NvbnRyb2wgPT0gMSkKKwkJeworCQkJcEFkLT5TdGFDZmcuYkhhcmR3YXJlUmFkaW8gPSBUUlVFOworCisJCQkvLyBSZWFkIEdQSU8gcGluMiBhcyBIYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvIHN0YXRlCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIEdQSU9fQ1RSTF9DRkcsICZkYXRhKTsKKwkJCWlmICgoZGF0YSAmIDB4MDQpID09IDApCisJCQl7CisJCQkJcEFkLT5TdGFDZmcuYkh3UmFkaW8gPSBGQUxTRTsKKwkJCQlwQWQtPlN0YUNmZy5iUmFkaW8gPSBGQUxTRTsKKy8vCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBXUl9QSU5fQ0ZHLCAweDAwMDAxODE4KTsKKwkJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpOworCQkJfQorCQl9CisJCWVsc2UKKwkJCXBBZC0+U3RhQ2ZnLmJIYXJkd2FyZVJhZGlvID0gRkFMU0U7CisKKwkJaWYgKHBBZC0+U3RhQ2ZnLmJSYWRpbyA9PSBGQUxTRSkKKwkJeworCQkJUlRNUFNldExFRChwQWQsIExFRF9SQURJT19PRkYpOworCQl9CisJCWVsc2UKKwkJeworCQkJUlRNUFNldExFRChwQWQsIExFRF9SQURJT19PTik7CisJCX0KKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkvLyBUdXJuIG9mZiBwYXRjaGluZyBmb3IgY2FyZGJ1cyBjb250cm9sbGVyCisJaWYgKE5pY0NvbmZpZzIuZmllbGQuQ2FyZGJ1c0FjY2VsZXJhdGlvbiA9PSAxKQorCXsKKy8vCQlwQWQtPmJUZXN0MSA9IFRSVUU7CisJfQorCisJaWYgKE5pY0NvbmZpZzIuZmllbGQuRHluYW1pY1R4QWdjQ29udHJvbCA9PSAxKQorCQlwQWQtPmJBdXRvVHhBZ2NBID0gcEFkLT5iQXV0b1R4QWdjRyA9IFRSVUU7CisJZWxzZQorCQlwQWQtPmJBdXRvVHhBZ2NBID0gcEFkLT5iQXV0b1R4QWdjRyA9IEZBTFNFOworCS8vCisJLy8gU2luY2UgQkJQIGhhcyBiZWVuIHByb2dhbWVkLCB0byBtYWtlIHN1cmUgQkJQIHNldHRpbmcgd2lsbCBiZQorCS8vIHVwYXRlIGluc2lkZSBvZiBBc2ljQW50ZW5uYVNlbGVjdCwgc28gcmVzZXQgdG8gVU5LTk9XTl9CQU5EISEKKwkvLworCXBBZC0+Q29tbW9uQ2ZnLkJhbmRTdGF0ZSA9IFVOS05PV05fQkFORDsKKworCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJCUFIzKTsKKwlCQlBSMyAmPSAofjB4MTgpOworCWlmKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMykKKwl7CisJCUJCUFIzIHw9ICgweDEwKTsKKwl9CisJZWxzZSBpZihwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDIpCisJeworCQlCQlBSMyB8PSAoMHg4KTsKKwl9CisJZWxzZSBpZihwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpCisJeworCQlCQlBSMyB8PSAoMHgwKTsKKwl9CisJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQkJQUjMpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCS8vIEhhbmRsZSB0aGUgZGlmZmVyZW5jZSB3aGVuIDFUCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgJkJCUFIxKTsKKwkJaWYocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQl7CisJCUJCUFIxICY9ICh+MHgxOCk7CisJCX0KKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgQkJQUjEpOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlVzZSBIdyBSYWRpbyBDb250cm9sIFBpbj0lZDsgaWYgdXNlZCBQaW49JWQ7XG4iLCBwQWQtPkNvbW1vbkNmZy5iSGFyZHdhcmVSYWRpbywgcEFkLT5Db21tb25DZmcuYkhhcmR3YXJlUmFkaW8pKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVHhQYXRoID0gJWQsIFJ4UGF0aCA9ICVkLCBSRklDPSVkLCBQb2xhcitMRUQgbW9kZT0leFxuIiwgcEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCwgcEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCwgcEFkLT5SZkljVHlwZSwgcEFkLT5MZWRDbnRsLndvcmQpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0gTklDSW5pdEFzaWNGcm9tRUVQUk9NXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlJbml0aWFsaXplIE5JQyBoYXJkd2FyZQorCisJQXJndW1lbnRzOgorCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCU5JQ0luaXRpYWxpemVBZGFwdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgQk9PTEVBTiAgICBiSGFyZFJlc2V0KQoreworCU5ESVNfU1RBVFVTICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCVdQRE1BX0dMT19DRkdfU1RSVUMJR2xvQ2ZnOworLy8JSU5UX01BU0tfQ1NSX1NUUlVDCQlJbnRNYXNrOworCVVMT05HCWkgPTAsIGo9MDsKKwlBQ19UWE9QX0NTUjBfU1RSVUMJY3NyMDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBOSUNJbml0aWFsaXplQWRhcHRlclxuIikpOworCisJLy8gMy4gU2V0IERNQSBnbG9iYWwgY29uZmlndXJhdGlvbiBleGNlcHQgVFhfRE1BX0VOIGFuZCBSWF9ETUFfRU4gYml0czoKK3JldHJ5OgorCWkgPSAwOworCWRvCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFdQRE1BX0dMT19DRkcsICZHbG9DZmcud29yZCk7CisJCWlmICgoR2xvQ2ZnLmZpZWxkLlR4RE1BQnVzeSA9PSAwKSAgJiYgKEdsb0NmZy5maWVsZC5SeERNQUJ1c3kgPT0gMCkpCisJCQlicmVhazsKKworCQlSVE1QdXNlY0RlbGF5KDEwMDApOworCQlpKys7CisJfXdoaWxlICggaTwxMDApOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBETUEgb2Zmc2V0IDB4MjA4ID0gMHgleFxuIiwgR2xvQ2ZnLndvcmQpKTsKKwlHbG9DZmcud29yZCAmPSAweGZmMDsKKwlHbG9DZmcuZmllbGQuRW5UWFdyaXRlQmFja0RET05FID0xOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFdQRE1BX0dMT19DRkcsIEdsb0NmZy53b3JkKTsKKworCS8vIFJlY29yZCBIVyBCZWFjb24gb2Zmc2V0CisJcEFkLT5CZWFjb25PZmZzZXRbMF0gPSBIV19CRUFDT05fQkFTRTA7CisJcEFkLT5CZWFjb25PZmZzZXRbMV0gPSBIV19CRUFDT05fQkFTRTE7CisJcEFkLT5CZWFjb25PZmZzZXRbMl0gPSBIV19CRUFDT05fQkFTRTI7CisJcEFkLT5CZWFjb25PZmZzZXRbM10gPSBIV19CRUFDT05fQkFTRTM7CisJcEFkLT5CZWFjb25PZmZzZXRbNF0gPSBIV19CRUFDT05fQkFTRTQ7CisJcEFkLT5CZWFjb25PZmZzZXRbNV0gPSBIV19CRUFDT05fQkFTRTU7CisJcEFkLT5CZWFjb25PZmZzZXRbNl0gPSBIV19CRUFDT05fQkFTRTY7CisJcEFkLT5CZWFjb25PZmZzZXRbN10gPSBIV19CRUFDT05fQkFTRTc7CisKKwkvLworCS8vIHdyaXRlIGFsbCBzaGFyZWQgUmluZydzIGJhc2UgYWRkcmVzcyBpbnRvIEFTSUMKKwkvLworCisJLy8gYXNpYyBzaW11bGF0aW9uIHNlcXVlbmNlIHB1dCB0aGlzIGFoZWFkIGJlZm9yZSBsb2FkaW5nIGZpcm13YXJlLgorCS8vIHBiZiBoYXJkd2FyZSByZXNldAorCisJLy8gSW5pdGlhbHplIEFTSUMgZm9yIFRYICYgUnggb3BlcmF0aW9uCisJaWYgKE5JQ0luaXRpYWxpemVBc2ljKHBBZCAsIGJIYXJkUmVzZXQpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlpZiAoaisrID09IDApCisJCXsKKwkJCU5JQ0xvYWRGaXJtd2FyZShwQWQpOworCQkJZ290byByZXRyeTsKKwkJfQorCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKworCisKKwkvLyBXTU0gcGFyYW1ldGVyCisJY3NyMC53b3JkID0gMDsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBXTU1fVFhPUDBfQ0ZHLCBjc3IwLndvcmQpOworCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUIpCisJeworCQljc3IwLmZpZWxkLkFjMFR4b3AgPSAxOTI7CS8vIEFDX1ZJOiAxOTIqMzJ1cyB+PSA2bXMKKwkJY3NyMC5maWVsZC5BYzFUeG9wID0gOTY7CS8vIEFDX1ZPOiA5NiozMnVzICB+PSAzbXMKKwl9CisJZWxzZQorCXsKKwkJY3NyMC5maWVsZC5BYzBUeG9wID0gOTY7CS8vIEFDX1ZJOiA5NiozMnVzIH49IDNtcworCQljc3IwLmZpZWxkLkFjMVR4b3AgPSA0ODsJLy8gQUNfVk86IDQ4KjMydXMgfj0gMS41bXMKKwl9CisJUlRNUF9JT19XUklURTMyKHBBZCwgV01NX1RYT1AxX0NGRywgY3NyMC53b3JkKTsKKworCisKKworCS8vIHJlc2V0IGFjdGlvbgorCS8vIExvYWQgZmlybXdhcmUKKwkvLyAgU3RhdHVzID0gTklDTG9hZEZpcm13YXJlKHBBZCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0gTklDSW5pdGlhbGl6ZUFkYXB0ZXJcbiIpKTsKKwlyZXR1cm4gU3RhdHVzOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJSW5pdGlhbGl6ZSBBU0lDCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTkRJU19TVEFUVVMJTklDSW5pdGlhbGl6ZUFzaWMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gIEJPT0xFQU4JCWJIYXJkUmVzZXQpCit7CisJVUxPTkcJCQlJbmRleCA9IDA7CisJVUNIQVIJCQlSMCA9IDB4ZmY7CisJVUlOVDMyCQkJTWFjQ3NyMTIgPSAwLCBDb3VudGVyID0gMDsKKyNpZmRlZiBSVDI4NzAKKwlVSU5UMzIJCQlNYWNDc3IwID0gMDsKKwlOVFNUQVRVUwkJU3RhdHVzOworCVVDSEFSCQkJVmFsdWUgPSAweGZmOworI2VuZGlmIC8vIFJUMjg3MCAvLworI2lmZGVmIFJUMzB4eAorCVVJTlQzMgkJCWVGdXNlQ3RybDsKKyNlbmRpZiAvLyBSVDMweHggLy8KKwlVU0hPUlQJCQlLZXlJZHg7CisJSU5UCQkJCWksYXBpZHg7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gTklDSW5pdGlhbGl6ZUFzaWNcbiIpKTsKKworCisjaWZkZWYgUlQyODcwCisJLy8KKwkvLyBNYWtlIHN1cmUgTUFDIGdldHMgcmVhZHkgYWZ0ZXIgTklDTG9hZEZpcm13YXJlKCkuCisJLy8KKwlJbmRleCA9IDA7CisKKwkvL1RvIGF2b2lkIGhhbmctb24gaXNzdWUgd2hlbiBpbnRlcmZhY2UgdXAgaW4ga2VybmVsIDIuNCwKKwkvL3dlIHVzZSBhIGxvY2FsIHZhcmlhYmxlICJNYWNDc3IwIiBpbnN0ZWFkIG9mIHVzaW5nICJwQWQtPk1BQ1ZlcnNpb24iIGRpcmVjdGx5LgorCWRvCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19DU1IwLCAmTWFjQ3NyMCk7CisKKwkJaWYgKChNYWNDc3IwICE9IDB4MDApICYmIChNYWNDc3IwICE9IDB4RkZGRkZGRkYpKQorCQkJYnJlYWs7CisKKwkJUlRNUHVzZWNEZWxheSgxMCk7CisJfSB3aGlsZSAoSW5kZXgrKyA8IDEwMCk7CisKKwlwQWQtPk1BQ1ZlcnNpb24gPSBNYWNDc3IwOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1BQ19DU1IwICBbIFZlcjpSZXY9MHglMDh4XVxuIiwgcEFkLT5NQUNWZXJzaW9uKSk7CisJLy8gdHVybiBvbiBiaXQxMyAoc2V0IHRvIHplcm8pIGFmdGVyIHJ0Mjg2MEQuIFRoaXMgaXMgdG8gc29sdmUgaGlnaC1jdXJyZW50IGlzc3VlLgorCVJUTVBfSU9fUkVBRDMyKHBBZCwgUEJGX1NZU19DVFJMLCAmTWFjQ3NyMTIpOworCU1hY0NzcjEyICY9ICh+MHgyMDAwKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIE1hY0NzcjEyKTsKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgzKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBVU0JfRE1BX0NGRywgMHgwKTsKKwlTdGF0dXMgPSBSVFVTQlZlbmRlclJlc2V0KHBBZCk7CisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIDB4MCk7CisKKwkvLyBJbml0aWFsaXplIE1BQyByZWdpc3RlciB0byBkZWZhdWx0IHZhbHVlCisJZm9yKEluZGV4PTA7IEluZGV4PE5VTV9NQUNfUkVHX1BBUk1TOyBJbmRleCsrKQorCXsKKyNpZmRlZiBSVDMwNzAKKwkJaWYgKChNQUNSZWdUYWJsZVtJbmRleF0uUmVnaXN0ZXIgPT0gVFhfU1dfQ0ZHMCkgJiYgKElTX1JUMzA3MChwQWQpIHx8IElTX1JUMzA3MShwQWQpKSkKKwkJeworCQkJTUFDUmVnVGFibGVbSW5kZXhdLlZhbHVlID0gMHgwMDAwMDQwMDsKKwkJfQorI2VuZGlmIC8vIFJUMzA3MCAvLworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCAoVVNIT1JUKU1BQ1JlZ1RhYmxlW0luZGV4XS5SZWdpc3RlciwgTUFDUmVnVGFibGVbSW5kZXhdLlZhbHVlKTsKKwl9CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOVU1fU1RBX01BQ19SRUdfUEFSTVM7IEluZGV4KyspCisJCXsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIChVU0hPUlQpU1RBTUFDUmVnVGFibGVbSW5kZXhdLlJlZ2lzdGVyLCBTVEFNQUNSZWdUYWJsZVtJbmRleF0uVmFsdWUpOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgUlQzMHh4CisJLy8gSW5pdGlhbGl6ZSBSVDMwNzAgc2VyaWFsIE1BYyByZWdpc3RlcnMgd2hpY2ggaXMgZGlmZmVyZW50IGZyb20gUlQyODcwIHNlcmlhbAorCWlmIChJU19SVDMwOTAocEFkKSkKKwl7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1NXX0NGRzEsIDApOworCisJCS8vIFJUMzA3MSB2ZXJzaW9uIEUgaGFzIGZpeGVkIHRoaXMgaXNzdWUKKwkJaWYgKChwQWQtPk1BQ1ZlcnNpb24gJiAweGZmZmYpIDwgMHgwMjExKQorCQl7CisJCQlpZiAocEFkLT5OaWNDb25maWcyLmZpZWxkLkRBQ1Rlc3RCaXQgPT0gMSkKKwkJCXsKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9TV19DRkcyLCAweDFGKTsJLy8gVG8gZml4IHRocm91Z2hwdXQgZHJvcCBkcmFzdGljYWxseQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1NXX0NGRzIsIDB4MEYpOwkvLyBUbyBmaXggdGhyb3VnaHB1dCBkcm9wIGRyYXN0aWNhbGx5CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9TV19DRkcyLCAweDApOworCQl9CisJfQorCWVsc2UgaWYgKElTX1JUMzA3MChwQWQpKQorCXsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfU1dfQ0ZHMSwgMCk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1NXX0NGRzIsIDB4MUYpOwkvLyBUbyBmaXggdGhyb3VnaHB1dCBkcm9wIGRyYXN0aWNhbGx5CisJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisJLy8KKwkvLyBCZWZvcmUgcHJvZ3JhbSBCQlAsIHdlIG5lZWQgdG8gd2FpdCBCQlAvUkYgZ2V0IHdha2UgdXAuCisJLy8KKwlJbmRleCA9IDA7CisJZG8KKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NUQVRVU19DRkcsICZNYWNDc3IxMik7CisKKwkJaWYgKChNYWNDc3IxMiAmIDB4MDMpID09IDApCS8vIGlmIEJCLlJGIGlzIHN0YWJsZQorCQkJYnJlYWs7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2hlY2sgTUFDX1NUQVRVU19DRkcgID0gQnVzeSA9ICV4XG4iLCBNYWNDc3IxMikpOworCQlSVE1QdXNlY0RlbGF5KDEwMDApOworCX0gd2hpbGUgKEluZGV4KysgPCAxMDApOworCisgICAgLy8gVGhlIGNvbW1hbmRzIHRvIGZpcm13YXJlIHNob3VsZCBiZSBhZnRlciB0aGVzZSBjb21tYW5kcywgdGhlc2UgY29tbWFuZHMgd2lsbCBpbml0IGZpcm13YXJlCisJLy8gUENJIGFuZCBVU0IgYXJlIG5vdCB0aGUgc2FtZSBiZWNhdXNlIFBDSSBkcml2ZXIgbmVlZHMgdG8gd2FpdCBmb3IgUENJIGJ1cyByZWFkeQorCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9CQlBfQUdFTlQsIDApOwkvLyBpbml0aWFsaXplIEJCUCBSL1cgYWNjZXNzIGFnZW50CisJUlRNUF9JT19XUklURTMyKHBBZCwgSDJNX01BSUxCT1hfQ1NSLCAwKTsKKwlSVE1QdXNlY0RlbGF5KDEwMDApOworCisJLy8gUmVhZCBCQlAgcmVnaXN0ZXIsIG1ha2Ugc3VyZSBCQlAgaXMgdXAgYW5kIHJ1bm5pbmcgYmVmb3JlIHdyaXRlIG5ldyBkYXRhCisJSW5kZXggPSAwOworCWRvCisJeworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjAsICZSMCk7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJCUCB2ZXJzaW9uID0gJXhcbiIsIFIwKSk7CisJfSB3aGlsZSAoKCsrSW5kZXggPCAyMCkgJiYgKChSMCA9PSAweGZmKSB8fCAoUjAgPT0gMHgwMCkpKTsKKwkvL0FTU0VSVChJbmRleCA8IDIwKTsgLy90aGlzIHdpbGwgY2F1c2UgQlNPRCBvbiBDaGVjay1idWlsZCBkcml2ZXIKKworCWlmICgoUjAgPT0gMHhmZikgfHwgKFIwID09IDB4MDApKQorCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKworCS8vIEluaXRpYWxpemUgQkJQIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWUKKwlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOVU1fQkJQX1JFR19QQVJNUzsgSW5kZXgrKykKKwl7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBSZWdUYWJsZVtJbmRleF0uUmVnaXN0ZXIsIEJCUFJlZ1RhYmxlW0luZGV4XS5WYWx1ZSk7CisJfQorCisJLy8gZm9yIHJ0Mjg2MEUgYW5kIGFmdGVyLCBpbml0IEJCUF9SODQgd2l0aCAweDE5LiBUaGlzIGlzIGZvciBleHRlbnNpb24gY2hhbm5lbCBvdmVybGFwcGluZyBJT1QuCisJLy8gUlQzMDkwIHNob3VsZCBub3QgcHJvZ3JhbSBCQlAgUjg0IHRvIDB4MTksIG90aGVyd2lzZSBUWCB3aWxsIGJsb2NrLgorCWlmICgoKHBBZC0+TUFDVmVyc2lvbiYweGZmZmYpICE9IDB4MDEwMSkgJiYgKCFJU19SVDMweHgocEFkKSkpCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjg0LCAweDE5KTsKKworLy8gYWRkIGJ5IGpvaG5saSwgUkYgcG93ZXIgc2VxdWVuY2Ugc2V0dXAKKyNpZmRlZiBSVDMweHgKKwlpZiAoSVNfUlQzMHh4KHBBZCkpCisJewkvL3VwZGF0ZSBmb3IgUlQzMDcwLzcxLzcyLzkwLzkxLzkyLgorCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3OSwgMHgxMyk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjgwLCAweDA1KTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODEsIDB4MzMpOworCX0KKworCWlmIChJU19SVDMwOTAocEFkKSkKKwl7CisJCVVDSEFSCQliYnByZWc9MDsKKworCQkvLyBlbmFibGUgREMgZmlsdGVyCisJCWlmICgocEFkLT5NQUNWZXJzaW9uICYgMHhmZmZmKSA+PSAweDAyMTEpCisJCXsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEwMywgMHhjMCk7CisJCX0KKworCQkvLyBpbXByb3ZlIHBvd2VyIGNvbnN1bXB0aW9uCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMTM4LCAmYmJwcmVnKTsKKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkKKwkJeworCQkJLy8gdHVybiBvZmYgdHggREFDXzEKKwkJCWJicHJlZyA9IChiYnByZWcgfCAweDIwKTsKKwkJfQorCisJCWlmIChwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID09IDEpCisJCXsKKwkJCS8vIHR1cm4gb2ZmIHR4IEFEQ18xCisJCQliYnByZWcgJj0gKH4weDIpOworCQl9CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEzOCwgYmJwcmVnKTsKKworCQkvLyBpbXByb3ZlIHBvd2VyIGNvbnN1bXB0aW9uIGluIFJUMzA3MSBWZXIuRQorCQlpZiAoKHBBZC0+TUFDVmVyc2lvbiAmIDB4ZmZmZikgPj0gMHgwMjExKQorCQl7CisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMxLCAmYmJwcmVnKTsKKwkJCWJicHJlZyAmPSAofjB4Myk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzMSwgYmJwcmVnKTsKKwkJfQorCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKy8vIGVuZCBqb2hubGkKKworCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKKwl7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY5LCAweDE2KTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzMsIDB4MTIpOworICAgIH0KKworCWlmIChwQWQtPk1BQ1ZlcnNpb24gPj0gUkFMSU5LXzI4ODBFX1ZFUlNJT04gJiYgcEFkLT5NQUNWZXJzaW9uIDwgUkFMSU5LXzMwNzBfVkVSU0lPTikgLy8gMyozCisJeworCQkvLyBlbmxhcmdlIE1BWF9MRU5fQ0ZHCisJCVVJTlQzMiBjc3I7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFYX0xFTl9DRkcsICZjc3IpOworCQljc3IgJj0gMHhGRkY7CisJCWNzciB8PSAweDIwMDA7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BWF9MRU5fQ0ZHLCBjc3IpOworCX0KKworI2lmZGVmIFJUMjg3MAoreworCVVDSEFSCU1BQ19WYWx1ZVtdPXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDAsMH07CisKKwkvL0luaXRpYWxpemUgV0NJRCB0YWJsZQorCVZhbHVlID0gMHhmZjsKKwlmb3IoSW5kZXggPTAgO0luZGV4IDwgMjU0O0luZGV4KyspCisJeworCQlSVFVTQk11bHRpV3JpdGUocEFkLCAoVVNIT1JUKShNQUNfV0NJRF9CQVNFICsgSW5kZXggKiA4KSwgTUFDX1ZhbHVlLCA4KTsKKwl9Cit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwkvLyBBZGQgcmFkaW8gb2ZmIGNvbnRyb2wKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJaWYgKHBBZC0+U3RhQ2ZnLmJSYWRpbyA9PSBGQUxTRSkKKwkJeworLy8JCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBQV1JfUElOX0NGRywgMHgwMDAwMTgxOCk7CisJCQlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0IFJhZGlvIE9mZlxuIikpOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gQ2xlYXIgcmF3IGNvdW50ZXJzCisJUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMCwgJkNvdW50ZXIpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgUlhfU1RBX0NOVDEsICZDb3VudGVyKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQyLCAmQ291bnRlcik7CisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMCwgJkNvdW50ZXIpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDEsICZDb3VudGVyKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQyLCAmQ291bnRlcik7CisKKwkvLyBBU0lDIHdpbGwga2VlcCBnYXJiYWdlIHZhbHVlIGFmdGVyIGJvb3QKKwkvLyBDbGVhciBhbGwgc2VhcmVkIGtleSB0YWJsZSB3aGVuIGluaXRpYWwKKwkvLyBUaGlzIHJvdXRpbmUgY2FuIGJlIGlnbm9yZWQgaW4gcmFkaW8tT04vT0ZGIG9wZXJhdGlvbi4KKwlpZiAoYkhhcmRSZXNldCkKKwl7CisJCWZvciAoS2V5SWR4ID0gMDsgS2V5SWR4IDwgNDsgS2V5SWR4KyspCisJCXsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFICsgNCpLZXlJZHgsIDApOworCQl9CisKKwkvLyBDbGVhciBhbGwgcGFpcndpc2Uga2V5IHRhYmxlIHdoZW4gaW5pdGlhbAorCWZvciAoS2V5SWR4ID0gMDsgS2V5SWR4IDwgMjU2OyBLZXlJZHgrKykKKwl7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKEtleUlkeCAqIEhXX1dDSURfQVRUUklfU0laRSksIDEpOworCX0KKwl9CisKKwkvLyBhc3NlcnQgSE9TVCByZWFkeSBiaXQKKy8vICBSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfQ1NSMSwgMHgwKTsgLy8gMjAwNC0wOS0xNCBhc2tlZCBieSBNYXJrCisvLyAgUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX0NTUjEsIDB4NCk7CisKKwkvLyBJdCBpc24ndCBuZWNlc3NhcnkgdG8gY2xlYXIgdGhpcyBzcGFjZSB3aGVuIG5vdCBoYXJkIHJlc2V0LgorCWlmIChiSGFyZFJlc2V0ID09IFRSVUUpCisJeworCQkvLyBjbGVhciBhbGwgb24tY2hpcCBCRUFDT04gZnJhbWUgc3BhY2UKKwkJZm9yIChhcGlkeCA9IDA7IGFwaWR4IDwgSFdfQkVBQ09OX01BWF9DT1VOVDsgYXBpZHgrKykKKwkJeworCQkJZm9yIChpID0gMDsgaSA8IEhXX0JFQUNPTl9PRkZTRVQ+PjI7IGkrPTQpCisJCQkJUlRNUF9JT19XUklURTMyKHBBZCwgcEFkLT5CZWFjb25PZmZzZXRbYXBpZHhdICsgaSwgMHgwMCk7CisJCX0KKwl9CisjaWZkZWYgUlQyODcwCisJQXNpY0Rpc2FibGVTeW5jKHBBZCk7CisJLy8gQ2xlYXIgcmF3IGNvdW50ZXJzCisJUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMCwgJkNvdW50ZXIpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgUlhfU1RBX0NOVDEsICZDb3VudGVyKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFJYX1NUQV9DTlQyLCAmQ291bnRlcik7CisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMCwgJkNvdW50ZXIpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDEsICZDb3VudGVyKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQyLCAmQ291bnRlcik7CisJLy8gRGVmYXVsdCBQQ0kgY2xvY2sgY3ljbGUgcGVyIG1zIGlzIGRpZmZlcmVudCBhcyBkZWZhdWx0IHNldHRpbmcsIHdoaWNoIGlzIGJhc2VkIG9uIFBDSS4KKwlSVE1QX0lPX1JFQUQzMihwQWQsIFVTQl9DWUNfQ0ZHLCAmQ291bnRlcik7CisJQ291bnRlciY9MHhmZmZmZmYwMDsKKwlDb3VudGVyfD0weDAwMDAwMWU7CisJUlRNUF9JT19XUklURTMyKHBBZCwgVVNCX0NZQ19DRkcsIENvdW50ZXIpOworI2VuZGlmIC8vIFJUMjg3MCAvLworI2lmZGVmIFJUMzB4eAorCXBBZC0+YlVzZUVmdXNlPUZBTFNFOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgRUZVU0VfQ1RSTCwgJmVGdXNlQ3RybCk7CisJcEFkLT5iVXNlRWZ1c2UgPSAoIChlRnVzZUN0cmwgJiAweDgwMDAwMDAwKSA9PSAweDgwMDAwMDAwKSA/IDEgOiAwOworCWlmKHBBZC0+YlVzZUVmdXNlKQorCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5WTSBpcyBFZnVzZVxuIikpOworCX0KKwllbHNlCisJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTlZNIGlzIEVFUFJPTVxuIikpOworCisJfQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCS8vIGZvciBydDI4NjBFIGFuZCBhZnRlciwgaW5pdCBUWE9QX0NUUkxfQ0ZHIHdpdGggMHg1ODNmLiBUaGlzIGlzIGZvciBleHRlbnNpb24gY2hhbm5lbCBvdmVybGFwcGluZyBJT1QuCisJCWlmICgocEFkLT5NQUNWZXJzaW9uJjB4ZmZmZikgIT0gMHgwMTAxKQorCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhPUF9DVFJMX0NGRywgMHg1ODNmKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0gTklDSW5pdGlhbGl6ZUFzaWNcbiIpKTsKKwlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVJlc2V0IE5JQyBBc2ljcworCisJQXJndW1lbnRzOgorCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJTm90ZToKKwkJUmVzZXQgTklDIHRvIGluaXRpYWwgc3RhdGUgQVMgSVMgc3lzdGVtIGJvb3QgdXAgdGltZS4KKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJTklDSXNzdWVSZXNldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVSU5UMzIJVmFsdWUgPSAwOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPiBOSUNJc3N1ZVJlc2V0XG4iKSk7CisKKwkvLyBBYm9ydCBUeCwgcHJldmVudCBBU0lDIGZyb20gd3JpdGluZyB0byBIb3N0IG1lbW9yeQorCS8vUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQ05UTF9DU1IsIDB4MDAxZjAwMDApOworCisJLy8gRGlzYWJsZSBSeCwgcmVnaXN0ZXIgdmFsdWUgc3VwcG9zZWQgd2lsbCByZW1haW4gYWZ0ZXIgcmVzZXQKKwlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwlWYWx1ZSAmPSAoMHhmZmZmZmZmMyk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkvLyBJc3N1ZSByZXNldCBhbmQgY2xlYXIgZnJvbSByZXNldCBzdGF0ZQorCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgwMyk7IC8vIDIwMDQtMDktMTcgY2hhbmdlIGZyb20gMHgwMQorCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgwMCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0gTklDSXNzdWVSZXNldFxuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2hlY2sgQVNJQyByZWdpc3RlcnMgYW5kIGZpbmQgYW55IHJlYXNvbiB0aGUgc3lzdGVtIG1pZ2h0IGhhbmcKKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOCU5JQ0NoZWNrRm9ySGFuZygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlyZXR1cm4gKEZBTFNFKTsKK30KKworVk9JRCBOSUNVcGRhdGVGaWZvU3RhQ291bnRlcnMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVFhfU1RBX0ZJRk9fU1RSVUMJU3RhRmlmbzsKKwlNQUNfVEFCTEVfRU5UUlkJCSpwRW50cnk7CisJVUNIQVIJCQkJaSA9IDA7CisJVUNIQVIJCQlwaWQgPSAwLCB3Y2lkID0gMDsKKwlDSEFSCQkJCXJlVHJ5OworCVVDSEFSCQkJCXN1Y2NNQ1M7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJLyogTm90aGluZyB0byBkbyBpbiBBVEUgbW9kZSAqLworCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCQlkbworCQl7CisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9GSUZPLCAmU3RhRmlmby53b3JkKTsKKworCQkJaWYgKFN0YUZpZm8uZmllbGQuYlZhbGlkID09IDApCisJCQkJYnJlYWs7CisKKwkJCXdjaWQgPSAoVUNIQVIpU3RhRmlmby5maWVsZC53Y2lkOworCisKKwkJLyogaWdub3JlIE5vQUNLIGFuZCBNR01UIGZyYW1lIHVzZSAweEZGIGFzIFdDSUQgKi8KKwkJCWlmICgoU3RhRmlmby5maWVsZC5UeEFja1JlcXVpcmVkID09IDApIHx8ICh3Y2lkID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKSkKKwkJCXsKKwkJCQlpKys7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIFBJRCBzdG9yZSBUeCBNQ1MgUmF0ZSAqLworCQkJcGlkID0gKFVDSEFSKVN0YUZpZm8uZmllbGQuUGlkVHlwZTsKKworCQkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbd2NpZF07CisKKwkJCXBFbnRyeS0+RGVidWdGSUZPQ291bnQrKzsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJaWYgKFN0YUZpZm8uZmllbGQuVHhCRikgLy8gMyozCisJCQkJcEVudHJ5LT5UeEJGQ291bnQrKzsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworI2lmZGVmIFVBUFNEX0FQX1NVUFBPUlQKKwkJCVVBUFNEX1NQX0FVRV9IYW5kbGUocEFkLCBwRW50cnksIFN0YUZpZm8uZmllbGQuVHhTdWNjZXNzKTsKKyNlbmRpZiAvLyBVQVBTRF9BUF9TVVBQT1JUIC8vCisKKwkJCWlmICghU3RhRmlmby5maWVsZC5UeFN1Y2Nlc3MpCisJCQl7CisJCQkJcEVudHJ5LT5GSUZPQ291bnQrKzsKKwkJCQlwRW50cnktPk9uZVNlY1R4RmFpbENvdW50Kys7CisKKwkJCQlpZiAocEVudHJ5LT5GSUZPQ291bnQgPj0gMSkKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiMiKSk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCXBFbnRyeS0+Tm9CQURhdGFDb3VudERvd24gPSA2NDsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkJCQlpZihwRW50cnktPlBzTW9kZSA9PSBQV1JfQUNUSVZFKQorCQkJCQl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJCQlpbnQgdGlkOworCQkJCQkJZm9yICh0aWQ9MDsgdGlkPE5VTV9PRl9USUQ7IHRpZCsrKQorCQkJCQkJeworCQkJCQkJCUJBT3JpU2Vzc2lvblRlYXJEb3duKHBBZCwgcEVudHJ5LT5BaWQsICB0aWQsIEZBTFNFLCBGQUxTRSk7CisJCQkJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJCQkJCS8vIFVwZGF0ZSB0aGUgY29udGludW91cyB0cmFuc21pc3Npb24gY291bnRlciBleGNlcHQgUFMgbW9kZQorCQkJCQkJcEVudHJ5LT5Db250aW51ZVR4RmFpbENudCsrOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLy8gQ2xlYXIgdGhlIEZJRk9Db3VudCB3aGVuIHN0YSBpbiBQb3dlciBTYXZlIG1vZGUuIEJhc2ljYWxseSB3ZSBhc3N1bWUKKwkJCQkJCS8vICAgICB0aGlzIHR4IGVycm9yIGhhcHBlbmVkIGR1ZSB0byBzdGEganVzdCBnbyB0byBzbGVlcC4KKwkJCQkJCXBFbnRyeS0+RklGT0NvdW50ID0gMDsKKwkJCQkJCXBFbnRyeS0+Q29udGludWVUeEZhaWxDbnQgPSAwOworCQkJCQl9CisJCQkJCS8vcEVudHJ5LT5GSUZPQ291bnQgPSAwOworCQkJCX0KKwkJCQkvL3BFbnRyeS0+YlNlbmRCQVIgPSBUUlVFOworCQkJfQorCQkJZWxzZQorCQkJeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCWlmICgocEVudHJ5LT5Qc01vZGUgIT0gUFdSX1NBVkUpICYmIChwRW50cnktPk5vQkFEYXRhQ291bnREb3duID4gMCkpCisJCQkJeworCQkJCQlwRW50cnktPk5vQkFEYXRhQ291bnREb3duLS07CisJCQkJCWlmIChwRW50cnktPk5vQkFEYXRhQ291bnREb3duPT0wKQorCQkJCQl7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJAXG4iKSk7CisJCQkJCX0KKwkJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkJcEVudHJ5LT5GSUZPQ291bnQgPSAwOworCQkJCXBFbnRyeS0+T25lU2VjVHhOb1JldHJ5T2tDb3VudCsrOworCQkJCS8vIHVwZGF0ZSBOb0RhdGFJZGxlQ291bnQgd2hlbiBzdWNlc3NmdWwgc2VuZCBwYWNrZXQgdG8gU1RBLgorCQkJCXBFbnRyeS0+Tm9EYXRhSWRsZUNvdW50ID0gMDsKKwkJCQlwRW50cnktPkNvbnRpbnVlVHhGYWlsQ250ID0gMDsKKwkJCX0KKworCQkJc3VjY01DUyA9IFN0YUZpZm8uZmllbGQuU3VjY2Vzc1JhdGUgJiAweDdGOworCisJCQlyZVRyeSA9IHBpZCAtIHN1Y2NNQ1M7CisKKwkJCWlmIChTdGFGaWZvLmZpZWxkLlR4U3VjY2VzcykKKwkJCXsKKwkJCQlwRW50cnktPlRYTUNTRXhwZWN0ZWRbcGlkXSsrOworCQkJCWlmIChwaWQgPT0gc3VjY01DUykKKwkJCQl7CisJCQkJCXBFbnRyeS0+VFhNQ1NTdWNjZXNzZnVsW3BpZF0rKzsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJcEVudHJ5LT5UWE1DU0F1dG9GYWxsQmFja1twaWRdW3N1Y2NNQ1NdKys7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXBFbnRyeS0+VFhNQ1NGYWlsZWRbcGlkXSsrOworCQkJfQorCisJCQlpZiAocmVUcnkgPiAwKQorCQkJeworCQkJCWlmICgocGlkID49IDEyKSAmJiBzdWNjTUNTIDw9NykKKwkJCQl7CisJCQkJCXJlVHJ5IC09IDQ7CisJCQkJfQorCQkJCXBFbnRyeS0+T25lU2VjVHhSZXRyeU9rQ291bnQgKz0gcmVUcnk7CisJCQl9CisKKwkJCWkrKzsKKwkJCS8vIEFTSUMgc3RvcmUgMTYgc3RhY2sKKwkJfSB3aGlsZSAoIGkgPCAoMipUWF9SSU5HX1NJWkUpICk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVJlYWQgc3RhdGlzdGljYWwgY291bnRlcnMgZnJvbSBoYXJkd2FyZSByZWdpc3RlcnMgYW5kIHJlY29yZCB0aGVtCisJCWluIHNvZnR3YXJlIHZhcmlhYmxlcyBmb3IgbGF0ZXIgb24gcXVlcnkKKworCUFyZ3VtZW50czoKKwkJcEFkCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBOSUNVcGRhdGVSYXdDb3VudGVycygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVSU5UMzIJT2xkVmFsdWU7Ly8sIFZhbHVlMjsKKwkvL1VMT05HCVBhZ2VTdW0sIE9uZVNlY1RyYW5zbWl0Q291bnQ7CisJLy9VTE9ORwlUeEVycm9yUmF0aW8sIFJldHJ5LCBGYWlsOworCVJYX1NUQV9DTlQwX1NUUlVDCSBSeFN0YUNudDA7CisJUlhfU1RBX0NOVDFfU1RSVUMgICBSeFN0YUNudDE7CisJUlhfU1RBX0NOVDJfU1RSVUMgICBSeFN0YUNudDI7CisJVFhfU1RBX0NOVDBfU1RSVUMgCSBUeFN0YUNudDA7CisJVFhfU1RBX0NOVDFfU1RSVUMJIFN0YVR4MTsKKwlUWF9TVEFfQ05UMl9TVFJVQwkgU3RhVHgyOworCVRYX0FHR19DTlRfU1RSVUMJVHhBZ2dDbnQ7CisJVFhfQUdHX0NOVDBfU1RSVUMJVHhBZ2dDbnQwOworCVRYX0FHR19DTlQxX1NUUlVDCVR4QWdnQ250MTsKKwlUWF9BR0dfQ05UMl9TVFJVQwlUeEFnZ0NudDI7CisJVFhfQUdHX0NOVDNfU1RSVUMJVHhBZ2dDbnQzOworCVRYX0FHR19DTlQ0X1NUUlVDCVR4QWdnQ250NDsKKwlUWF9BR0dfQ05UNV9TVFJVQwlUeEFnZ0NudDU7CisJVFhfQUdHX0NOVDZfU1RSVUMJVHhBZ2dDbnQ2OworCVRYX0FHR19DTlQ3X1NUUlVDCVR4QWdnQ250NzsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgUlhfU1RBX0NOVDAsICZSeFN0YUNudDAud29yZCk7CisJUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMiwgJlJ4U3RhQ250Mi53b3JkKTsKKworCXsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBSWF9TVEFfQ05UMSwgJlJ4U3RhQ250MS53b3JkKTsKKwkgICAgLy8gVXBkYXRlIFJYIFBMQ1AgZXJyb3IgY291bnRlcgorCSAgICBwQWQtPlByaXZhdGVJbmZvLlBoeVJ4RXJyQ250ICs9IFJ4U3RhQ250MS5maWVsZC5QbGNwRXJyOworCQkvLyBVcGRhdGUgRmFsc2UgQ0NBIGNvdW50ZXIKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNGYWxzZUNDQUNudCArPSBSeFN0YUNudDEuZmllbGQuRmFsc2VDY2E7CisJfQorCisJLy8gVXBkYXRlIEZDUyBjb3VudGVycworCU9sZFZhbHVlPSBwQWQtPldsYW5Db3VudGVycy5GQ1NFcnJvckNvdW50LnUuTG93UGFydDsKKwlwQWQtPldsYW5Db3VudGVycy5GQ1NFcnJvckNvdW50LnUuTG93UGFydCArPSAoUnhTdGFDbnQwLmZpZWxkLkNyY0Vycik7IC8vID4+IDcpOworCWlmIChwQWQtPldsYW5Db3VudGVycy5GQ1NFcnJvckNvdW50LnUuTG93UGFydCA8IE9sZFZhbHVlKQorCQlwQWQtPldsYW5Db3VudGVycy5GQ1NFcnJvckNvdW50LnUuSGlnaFBhcnQrKzsKKworCS8vIEFkZCBGQ1MgZXJyb3IgY291bnQgdG8gcHJpdmF0ZSBjb3VudGVycworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjUnhGY3NFcnJDbnQgKz0gUnhTdGFDbnQwLmZpZWxkLkNyY0VycjsKKwlPbGRWYWx1ZSA9IHBBZC0+UmFsaW5rQ291bnRlcnMuUmVhbEZjc0VyckNvdW50LnUuTG93UGFydDsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLlJlYWxGY3NFcnJDb3VudC51Lkxvd1BhcnQgKz0gUnhTdGFDbnQwLmZpZWxkLkNyY0VycjsKKwlpZiAocEFkLT5SYWxpbmtDb3VudGVycy5SZWFsRmNzRXJyQ291bnQudS5Mb3dQYXJ0IDwgT2xkVmFsdWUpCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuUmVhbEZjc0VyckNvdW50LnUuSGlnaFBhcnQrKzsKKworCS8vIFVwZGF0ZSBEdXBsaWNhdGUgUmN2IGNoZWNrCisJcEFkLT5SYWxpbmtDb3VudGVycy5EdXBsaWNhdGVSY3YgKz0gUnhTdGFDbnQyLmZpZWxkLlJ4RHVwbGlDb3VudDsKKwlwQWQtPldsYW5Db3VudGVycy5GcmFtZUR1cGxpY2F0ZUNvdW50LnUuTG93UGFydCArPSBSeFN0YUNudDIuZmllbGQuUnhEdXBsaUNvdW50OworCS8vIFVwZGF0ZSBSWCBPdmVyZmxvdyBjb3VudGVyCisJcEFkLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlciArPSAoUnhTdGFDbnQyLmZpZWxkLlJ4Rmlmb092ZXJmbG93Q291bnQpOworCisJLy9wQWQtPlJhbGlua0NvdW50ZXJzLlJ4Q291bnQgPSAwOworI2lmZGVmIFJUMjg3MAorCWlmIChwQWQtPlJhbGlua0NvdW50ZXJzLlJ4Q291bnQgIT0gcEFkLT53YXRjaERvZ1J4Q250KQorCXsKKwkJcEFkLT53YXRjaERvZ1J4Q250ID0gcEFkLT5SYWxpbmtDb3VudGVycy5SeENvdW50OworCQlwQWQtPndhdGNoRG9nUnhPdmVyRmxvd0NudCA9IDA7CisJfQorCWVsc2UKKwl7CisJCWlmIChSeFN0YUNudDIuZmllbGQuUnhGaWZvT3ZlcmZsb3dDb3VudCkKKwkJCXBBZC0+d2F0Y2hEb2dSeE92ZXJGbG93Q250Kys7CisJCWVsc2UKKwkJCXBBZC0+d2F0Y2hEb2dSeE92ZXJGbG93Q250ID0gMDsKKwl9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworCS8vaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1RYX1JBVEVfU1dJVENIX0VOQUJMRUQpIHx8CisJLy8JKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfVFhfUkFURV9TV0lUQ0hfRU5BQkxFRCkgJiYgKHBBZC0+TWFjVGFiLlNpemUgIT0gMSkpKQorCWlmICghcEFkLT5iVXBkYXRlQmNuQ250RG9uZSkKKwl7CisJLy8gVXBkYXRlIEJFQUNPTiBzZW50IGNvdW50CisJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9TVEFfQ05UMCwgJlR4U3RhQ250MC53b3JkKTsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX1NUQV9DTlQxLCAmU3RhVHgxLndvcmQpOworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfU1RBX0NOVDIsICZTdGFUeDIud29yZCk7CisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNCZWFjb25TZW50Q250ICs9IFR4U3RhQ250MC5maWVsZC5UeEJlYWNvbkNvdW50OworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhSZXRyeU9rQ291bnQgKz0gU3RhVHgxLmZpZWxkLlR4UmV0cmFuc21pdDsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4Tm9SZXRyeU9rQ291bnQgKz0gU3RhVHgxLmZpZWxkLlR4U3VjY2VzczsKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RmFpbENvdW50ICs9IFR4U3RhQ250MC5maWVsZC5UeEZhaWxDb3VudDsKKwlwQWQtPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQudS5Mb3dQYXJ0ICs9IFN0YVR4MS5maWVsZC5UeFN1Y2Nlc3M7CisJcEFkLT5XbGFuQ291bnRlcnMuUmV0cnlDb3VudC51Lkxvd1BhcnQgKz0gU3RhVHgxLmZpZWxkLlR4UmV0cmFuc21pdDsKKwlwQWQtPldsYW5Db3VudGVycy5GYWlsZWRDb3VudC51Lkxvd1BhcnQgKz0gVHhTdGFDbnQwLmZpZWxkLlR4RmFpbENvdW50OworCX0KKworCS8vaWYgKHBBZC0+YlN0YUZpZm9UZXN0ID09IFRSVUUpCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0FHR19DTlQsICZUeEFnZ0NudC53b3JkKTsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9BR0dfQ05UMCwgJlR4QWdnQ250MC53b3JkKTsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9BR0dfQ05UMSwgJlR4QWdnQ250MS53b3JkKTsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9BR0dfQ05UMiwgJlR4QWdnQ250Mi53b3JkKTsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9BR0dfQ05UMywgJlR4QWdnQ250My53b3JkKTsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9BR0dfQ05UNCwgJlR4QWdnQ250NC53b3JkKTsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9BR0dfQ05UNSwgJlR4QWdnQ250NS53b3JkKTsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9BR0dfQ05UNiwgJlR4QWdnQ250Ni53b3JkKTsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9BR0dfQ05UNywgJlR4QWdnQ250Ny53b3JkKTsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZ0NvdW50ICs9IFR4QWdnQ250LmZpZWxkLkFnZ1R4Q291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhOb25BZ2dDb3VudCArPSBUeEFnZ0NudC5maWVsZC5Ob25BZ2dUeENvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnMU1QRFVDb3VudCArPSBUeEFnZ0NudDAuZmllbGQuQWdnU2l6ZTFDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzJNUERVQ291bnQgKz0gVHhBZ2dDbnQwLmZpZWxkLkFnZ1NpemUyQ291bnQ7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzNNUERVQ291bnQgKz0gVHhBZ2dDbnQxLmZpZWxkLkFnZ1NpemUzQ291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2c0TVBEVUNvdW50ICs9IFR4QWdnQ250MS5maWVsZC5BZ2dTaXplNENvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnNU1QRFVDb3VudCArPSBUeEFnZ0NudDIuZmllbGQuQWdnU2l6ZTVDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzZNUERVQ291bnQgKz0gVHhBZ2dDbnQyLmZpZWxkLkFnZ1NpemU2Q291bnQ7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzdNUERVQ291bnQgKz0gVHhBZ2dDbnQzLmZpZWxkLkFnZ1NpemU3Q291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2c4TVBEVUNvdW50ICs9IFR4QWdnQ250My5maWVsZC5BZ2dTaXplOENvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnOU1QRFVDb3VudCArPSBUeEFnZ0NudDQuZmllbGQuQWdnU2l6ZTlDb3VudDsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UeEFnZzEwTVBEVUNvdW50ICs9IFR4QWdnQ250NC5maWVsZC5BZ2dTaXplMTBDb3VudDsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnMTFNUERVQ291bnQgKz0gVHhBZ2dDbnQ1LmZpZWxkLkFnZ1NpemUxMUNvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnMTJNUERVQ291bnQgKz0gVHhBZ2dDbnQ1LmZpZWxkLkFnZ1NpemUxMkNvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnMTNNUERVQ291bnQgKz0gVHhBZ2dDbnQ2LmZpZWxkLkFnZ1NpemUxM0NvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlR4QWdnMTRNUERVQ291bnQgKz0gVHhBZ2dDbnQ2LmZpZWxkLkFnZ1NpemUxNENvdW50OworCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2cxNU1QRFVDb3VudCArPSBUeEFnZ0NudDcuZmllbGQuQWdnU2l6ZTE1Q291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHhBZ2cxNk1QRFVDb3VudCArPSBUeEFnZ0NudDcuZmllbGQuQWdnU2l6ZTE2Q291bnQ7CisKKwkJLy8gQ2FsY3VsYXRlIHRoZSB0cmFuc21pdHRlZCBBLU1QRFUgY291bnQKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9IFR4QWdnQ250MC5maWVsZC5BZ2dTaXplMUNvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250MC5maWVsZC5BZ2dTaXplMkNvdW50IC8gMik7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9IChUeEFnZ0NudDEuZmllbGQuQWdnU2l6ZTNDb3VudCAvIDMpOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250MS5maWVsZC5BZ2dTaXplNENvdW50IC8gNCk7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9IChUeEFnZ0NudDIuZmllbGQuQWdnU2l6ZTVDb3VudCAvIDUpOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250Mi5maWVsZC5BZ2dTaXplNkNvdW50IC8gNik7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9IChUeEFnZ0NudDMuZmllbGQuQWdnU2l6ZTdDb3VudCAvIDcpOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250My5maWVsZC5BZ2dTaXplOENvdW50IC8gOCk7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9IChUeEFnZ0NudDQuZmllbGQuQWdnU2l6ZTlDb3VudCAvIDkpOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250NC5maWVsZC5BZ2dTaXplMTBDb3VudCAvIDEwKTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250NS5maWVsZC5BZ2dTaXplMTFDb3VudCAvIDExKTsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9IChUeEFnZ0NudDUuZmllbGQuQWdnU2l6ZTEyQ291bnQgLyAxMik7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEFNUERVQ291bnQudS5Mb3dQYXJ0ICs9IChUeEFnZ0NudDYuZmllbGQuQWdnU2l6ZTEzQ291bnQgLyAxMyk7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQ2LmZpZWxkLkFnZ1NpemUxNENvdW50IC8gMTQpOworCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVBEVUNvdW50LnUuTG93UGFydCArPSAoVHhBZ2dDbnQ3LmZpZWxkLkFnZ1NpemUxNUNvdW50IC8gMTUpOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQU1QRFVDb3VudC51Lkxvd1BhcnQgKz0gKFR4QWdnQ250Ny5maWVsZC5BZ2dTaXplMTZDb3VudCAvIDE2KTsKKwl9CisKKyNpZmRlZiBEQkdfRElBR05PU0UKKwl7CisJCVJ0bXBEaWFnU3RydWN0CSpwRGlhZzsKKwkJQ09VTlRFUl9SQUxJTksJKnBSYWxpbmtDb3VudGVyczsKKwkJVUNIQVIJCQlBcnJheUN1cklkeCwgaTsKKworCQlwRGlhZyA9ICZwQWQtPkRpYWdTdHJ1Y3Q7CisJCXBSYWxpbmtDb3VudGVycyA9ICZwQWQtPlJhbGlua0NvdW50ZXJzOworCQlBcnJheUN1cklkeCA9IHBEaWFnLT5BcnJheUN1cklkeDsKKworCQlpZiAocERpYWctPmluaXRlZCA9PSAwKQorCQl7CisJCQlOZGlzWmVyb01lbW9yeShwRGlhZywgc2l6ZW9mKHN0cnVjdCBfUnRtcERpYWdTdHJjdXRfKSk7CisJCQlwRGlhZy0+QXJyYXlTdGFydElkeCA9IHBEaWFnLT5BcnJheUN1cklkeCA9IDA7CisJCQlwRGlhZy0+aW5pdGVkID0gMTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIFR4CisJCQlwRGlhZy0+VHhGYWlsQ250W0FycmF5Q3VySWR4XSA9IFR4U3RhQ250MC5maWVsZC5UeEZhaWxDb3VudDsKKwkJCXBEaWFnLT5UeEFnZ0NudFtBcnJheUN1cklkeF0gPSBUeEFnZ0NudC5maWVsZC5BZ2dUeENvdW50OworCQkJcERpYWctPlR4Tm9uQWdnQ250W0FycmF5Q3VySWR4XSA9IFR4QWdnQ250LmZpZWxkLk5vbkFnZ1R4Q291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bMF0gPSBUeEFnZ0NudDAuZmllbGQuQWdnU2l6ZTFDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVsxXSA9IFR4QWdnQ250MC5maWVsZC5BZ2dTaXplMkNvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzJdID0gVHhBZ2dDbnQxLmZpZWxkLkFnZ1NpemUzQ291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bM10gPSBUeEFnZ0NudDEuZmllbGQuQWdnU2l6ZTRDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVs0XSA9IFR4QWdnQ250Mi5maWVsZC5BZ2dTaXplNUNvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzVdID0gVHhBZ2dDbnQyLmZpZWxkLkFnZ1NpemU2Q291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bNl0gPSBUeEFnZ0NudDMuZmllbGQuQWdnU2l6ZTdDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVs3XSA9IFR4QWdnQ250My5maWVsZC5BZ2dTaXplOENvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzhdID0gVHhBZ2dDbnQ0LmZpZWxkLkFnZ1NpemU5Q291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bOV0gPSBUeEFnZ0NudDQuZmllbGQuQWdnU2l6ZTEwQ291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bMTBdID0gVHhBZ2dDbnQ1LmZpZWxkLkFnZ1NpemUxMUNvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzExXSA9IFR4QWdnQ250NS5maWVsZC5BZ2dTaXplMTJDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVsxMl0gPSBUeEFnZ0NudDYuZmllbGQuQWdnU2l6ZTEzQ291bnQ7CisJCQlwRGlhZy0+VHhBTVBEVUNudFtBcnJheUN1cklkeF1bMTNdID0gVHhBZ2dDbnQ2LmZpZWxkLkFnZ1NpemUxNENvdW50OworCQkJcERpYWctPlR4QU1QRFVDbnRbQXJyYXlDdXJJZHhdWzE0XSA9IFR4QWdnQ250Ny5maWVsZC5BZ2dTaXplMTVDb3VudDsKKwkJCXBEaWFnLT5UeEFNUERVQ250W0FycmF5Q3VySWR4XVsxNV0gPSBUeEFnZ0NudDcuZmllbGQuQWdnU2l6ZTE2Q291bnQ7CisKKwkJCXBEaWFnLT5SeENyY0VyckNudFtBcnJheUN1cklkeF0gPSBSeFN0YUNudDAuZmllbGQuQ3JjRXJyOworCisJCQlJTkNfUklOR19JTkRFWChwRGlhZy0+QXJyYXlDdXJJZHgsICBESUFHTk9TRV9USU1FKTsKKwkJCUFycmF5Q3VySWR4ID0gcERpYWctPkFycmF5Q3VySWR4OworCQkJZm9yIChpID0wOyBpIDwgOTsgaSsrKQorCQkJeworCQkJCXBEaWFnLT5UeERlc2NDbnRbQXJyYXlDdXJJZHhdW2ldPSAwOworCQkJCXBEaWFnLT5UeFNXUXVlQ250W0FycmF5Q3VySWR4XVtpXSA9MDsKKwkJCQlwRGlhZy0+VHhNY3NDbnRbQXJyYXlDdXJJZHhdW2ldID0gMDsKKwkJCQlwRGlhZy0+UnhNY3NDbnRbQXJyYXlDdXJJZHhdW2ldID0gMDsKKwkJCX0KKwkJCXBEaWFnLT5UeERhdGFDbnRbQXJyYXlDdXJJZHhdID0gMDsKKwkJCXBEaWFnLT5UeEZhaWxDbnRbQXJyYXlDdXJJZHhdID0gMDsKKwkJCXBEaWFnLT5SeERhdGFDbnRbQXJyYXlDdXJJZHhdID0gMDsKKwkJCXBEaWFnLT5SeENyY0VyckNudFtBcnJheUN1cklkeF0gID0gMDsKKy8vCQkJZm9yIChpID0gOTsgaSA8IDE2OyBpKyspCisJCQlmb3IgKGkgPSA5OyBpIDwgMjQ7IGkrKykgLy8gMyozCisJCQl7CisJCQkJcERpYWctPlR4RGVzY0NudFtBcnJheUN1cklkeF1baV0gPSAwOworCQkJCXBEaWFnLT5UeE1jc0NudFtBcnJheUN1cklkeF1baV0gPSAwOworCQkJCXBEaWFnLT5SeE1jc0NudFtBcnJheUN1cklkeF1baV0gPSAwOworfQorCisJCQlpZiAocERpYWctPkFycmF5Q3VySWR4ID09IHBEaWFnLT5BcnJheVN0YXJ0SWR4KQorCQkJCUlOQ19SSU5HX0lOREVYKHBEaWFnLT5BcnJheVN0YXJ0SWR4LCAgRElBR05PU0VfVElNRSk7CisJCX0KKworCX0KKyNlbmRpZiAvLyBEQkdfRElBR05PU0UgLy8KKworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVJlc2V0IE5JQyBmcm9tIGVycm9yCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlOb3RlOgorCQlSZXNldCBOSUMgZnJvbSBlcnJvciBzdGF0ZQorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlOSUNSZXNldEZyb21FcnJvcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwkvLyBSZXNldCBCQlAgKGFjY29yZGluZyB0byBhbGV4LCByZXNldCBBU0lDIHdpbGwgZm9yY2UgcmVzZXQgQkJQCisJLy8gVGhlcmVmb3JlLCBza2lwIHRoZSByZXNldCBCQlAKKwkvLyBSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfQ1NSMSwgMHgyKTsKKworCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgMHgxKTsKKwkvLyBSZW1vdmUgQVNJQyBmcm9tIHJlc2V0IHN0YXRlCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweDApOworCisJTklDSW5pdGlhbGl6ZUFkYXB0ZXIocEFkLCBGQUxTRSk7CisJTklDSW5pdEFzaWNGcm9tRUVQUk9NKHBBZCk7CisKKwkvLyBTd2l0Y2ggdG8gY3VycmVudCBjaGFubmVsLCBzaW5jZSBkdXJpbmcgcmVzZXQgcHJvY2VzcywgdGhlIGNvbm5lY3Rpb24gc2hvdWxkIHJlbWFpbnMgb24uCisJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCwgRkFMU0UpOworCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCWVyYXNlIDgwNTEgZmlybXdhcmUgaW1hZ2UgaW4gTUFDIEFTSUMKKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIE5JQ0VyYXNlRmlybXdhcmUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUxPTkcgaTsKKworCWZvcihpPTA7IGk8TUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkU7IGkrPTQpCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEZJUk1XQVJFX0lNQUdFX0JBU0UgKyBpLCAwKTsKKworfS8qIEVuZCBvZiBOSUNFcmFzZUZpcm13YXJlICovCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlMb2FkIDgwNTEgZmlybXdhcmUgUlQyNTYxLkJJTiBmaWxlIGludG8gTUFDIEFTSUMKKworCUFyZ3VtZW50czoKKwkJQWRhcHRlcgkJCQkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTkRJU19TVEFUVVNfU1VDQ0VTUyAgICAgICAgIGZpcm13YXJlIGltYWdlIGxvYWQgb2sKKwkJTkRJU19TVEFUVVNfRkFJTFVSRSAgICAgICAgIGltYWdlIG5vdCBmb3VuZAorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIE5JQ0xvYWRGaXJtd2FyZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKyNpZmRlZiBCSU5fSU5fRklMRQorI2RlZmluZSBOSUNMRl9ERUZBVUxUX1VTRSgpCVwKKwlmbGdfZGVmYXVsdF9maXJtX3VzZSA9IFRSVUU7IFwKKwlwcmludGsoIiVzIC0gVXNlIGRlZmF1bHQgZmlybXdhcmUhXG4iLCBfX0ZVTkNUSU9OX18pOworCisJTkRJU19TVEFUVVMJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJUFVDSEFSCQkJc3JjOworCXN0cnVjdCBmaWxlCQkqc3JjZjsKKwlJTlQgCQkJcmV0dmFsLCBvcmdmc3VpZCwgb3JnZnNnaWQsIGk7CisgICAJbW1fc2VnbWVudF90CW9yZ2ZzOworCVBVQ0hBUgkJCXBGaXJtd2FyZUltYWdlOworCVVJTlQJCQlGaWxlTGVuZ3RoID0gMDsKKwlVSU5UMzIJCQlNYWNSZWc7CisJVUxPTkcJCQlJbmRleDsKKwlVTE9ORwkJCWZpcm07CisJQk9PTEVBTgkJCWZsZ19kZWZhdWx0X2Zpcm1fdXNlID0gRkFMU0U7CisKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT4gJXNcbiIsIF9fRlVOQ1RJT05fXykpOworCisJLyogaW5pdCAqLworCXBGaXJtd2FyZUltYWdlID0gTlVMTDsKKwlzcmMgPSBSVE1QX0ZJUk1XQVJFX0ZJTEVfTkFNRTsKKworCS8qIHNhdmUgdWlkIGFuZCBnaWQgdXNlZCBmb3IgZmlsZXN5c3RlbSBhY2Nlc3MuCisJICAgc2V0IHVzZXIgYW5kIGdyb3VwIHRvIDAgKHJvb3QpICovCisJb3JnZnN1aWQgPSBjdXJyZW50LT5mc3VpZDsKKwlvcmdmc2dpZCA9IGN1cnJlbnQtPmZzZ2lkOworCWN1cnJlbnQtPmZzdWlkID0gY3VycmVudC0+ZnNnaWQgPSAwOworICAgIG9yZ2ZzID0gZ2V0X2ZzKCk7CisgICAgc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwlwQWQtPkZpcm13YXJlVmVyc2lvbiA9IChGSVJNV0FSRV9NQUpPUl9WRVJTSU9OIDw8IDgpICsgXAorCQkJCQkJICAgRklSTVdBUkVfTUlOT1JfVkVSU0lPTjsKKworCisJLyogYWxsb2NhdGUgZmlybXdhcmUgYnVmZmVyICovCisgICAgcEZpcm13YXJlSW1hZ2UgPSBrbWFsbG9jKE1BWF9GSVJNV0FSRV9JTUFHRV9TSVpFLCBNRU1fQUxMT0NfRkxBRyk7CisgICAgaWYgKHBGaXJtd2FyZUltYWdlID09IE5VTEwpCisJeworCQkvKiBhbGxvY2F0ZSBmYWlsLCB1c2UgZGVmYXVsdCBmaXJtd2FyZSBhcnJheSBpbiBmaXJtd2FyZS5oICovCisJCXByaW50aygiJXMgLSBBbGxvY2F0ZSBtZW1vcnkgZmFpbCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCU5JQ0xGX0RFRkFVTFRfVVNFKCk7CisgICAgfQorCWVsc2UKKwl7CisJCS8qIGFsbG9jYXRlIG9rISB6ZXJvIHRoZSBmaXJtd2FyZSBidWZmZXIgKi8KKwkJbWVtc2V0KHBGaXJtd2FyZUltYWdlLCAweDAwLCBNQVhfRklSTVdBUkVfSU1BR0VfU0laRSk7CisJfSAvKiBFbmQgb2YgaWYgKi8KKworCisJLyogaWYgb2ssIHJlYWQgZmlybXdhcmUgZmlsZSBmcm9tICouYmluIGZpbGUgKi8KKwlpZiAoZmxnX2RlZmF1bHRfZmlybV91c2UgPT0gRkFMU0UpCisJeworCQlkbworCQl7CisJCQkvKiBvcGVuIHRoZSBiaW4gZmlsZSAqLworCQkJc3JjZiA9IGZpbHBfb3BlbihzcmMsIE9fUkRPTkxZLCAwKTsKKworCQkJaWYgKElTX0VSUihzcmNmKSkKKwkJCXsKKwkJCQlwcmludGsoIiVzIC0gRXJyb3IgJWxkIG9wZW5pbmcgJXNcbiIsCisJCQkJCSAgIF9fRlVOQ1RJT05fXywgLVBUUl9FUlIoc3JjZiksIHNyYyk7CisJCQkJTklDTEZfREVGQVVMVF9VU0UoKTsKKwkJCQlicmVhazsKKwkJCX0gLyogRW5kIG9mIGlmICovCisKKwkJCS8qIHRoZSBvYmplY3QgbXVzdCBoYXZlIGEgcmVhZCBtZXRob2QgKi8KKwkJCWlmICgoc3JjZi0+Zl9vcCA9PSBOVUxMKSB8fCAoc3JjZi0+Zl9vcC0+cmVhZCA9PSBOVUxMKSkKKwkJCXsKKwkJCQlwcmludGsoIiVzIC0gJXMgZG9lcyBub3QgaGF2ZSBhIHdyaXRlIG1ldGhvZFxuIiwgX19GVU5DVElPTl9fLCBzcmMpOworCQkJCU5JQ0xGX0RFRkFVTFRfVVNFKCk7CisJCQkJYnJlYWs7CisJCQl9IC8qIEVuZCBvZiBpZiAqLworCisJCQkvKiByZWFkIHRoZSBmaXJtd2FyZSBmcm9tIHRoZSBmaWxlICouYmluICovCisJCQlGaWxlTGVuZ3RoID0gc3JjZi0+Zl9vcC0+cmVhZChzcmNmLAorCQkJCQkJCQkJCSAgcEZpcm13YXJlSW1hZ2UsCisJCQkJCQkJCQkJICBNQVhfRklSTVdBUkVfSU1BR0VfU0laRSwKKwkJCQkJCQkJCQkgICZzcmNmLT5mX3Bvcyk7CisKKwkJCWlmIChGaWxlTGVuZ3RoICE9IE1BWF9GSVJNV0FSRV9JTUFHRV9TSVpFKQorCQkJeworCQkJCXByaW50aygiJXM6IGVycm9yIGZpbGUgbGVuZ3RoICg9JWQpIGluIFJUMjg2MEFQLkJJTlxuIiwKKwkJCQkJICAgX19GVU5DVElPTl9fLCBGaWxlTGVuZ3RoKTsKKwkJCQlOSUNMRl9ERUZBVUxUX1VTRSgpOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCVBVQ0hBUiBwdHIgPSBwRmlybXdhcmVJbWFnZTsKKwkJCQlVU0hPUlQgY3JjID0gMHhmZmZmOworCisKKwkJCQkvKiBjYWxjdWxhdGUgZmlybXdhcmUgQ1JDICovCisJCQkJZm9yKGk9MDsgaTwoTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUtMik7IGkrKywgcHRyKyspCisJCQkJCWNyYyA9IEJ5dGVDUkMxNihCaXRSZXZlcnNlKCpwdHIpLCBjcmMpOworCQkJCS8qIEVuZCBvZiBmb3IgKi8KKworCQkJCWlmICgocEZpcm13YXJlSW1hZ2VbTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUtMl0gIT0gXAorCQkJCQkJCQkoVUNIQVIpQml0UmV2ZXJzZSgoVUNIQVIpKGNyYz4+OCkpKSB8fAorCQkJCQkocEZpcm13YXJlSW1hZ2VbTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUtMV0gIT0gXAorCQkJCQkJCQkoVUNIQVIpQml0UmV2ZXJzZSgoVUNIQVIpY3JjKSkpCisJCQkJeworCQkJCQkvKiBDUkMgZmFpbCAqLworCQkJCQlwcmludGsoIiVzOiBDUkMgPSAweCUwMnggMHglMDJ4ICIKKwkJCQkJCSAgICJlcnJvciwgc2hvdWxkIGJlIDB4JTAyeCAweCUwMnhcbiIsCisJCQkJCQkgICBfX0ZVTkNUSU9OX18sCisJCQkJCQkgICBwRmlybXdhcmVJbWFnZVtNQVhfRklSTVdBUkVfSU1BR0VfU0laRS0yXSwKKwkJCQkJCSAgIHBGaXJtd2FyZUltYWdlW01BWF9GSVJNV0FSRV9JTUFHRV9TSVpFLTFdLAorCQkJCQkJICAgKFVDSEFSKShjcmM+PjgpLCAoVUNIQVIpKGNyYykpOworCQkJCQlOSUNMRl9ERUZBVUxUX1VTRSgpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLyogZmlybXdhcmUgaXMgb2sgKi8KKwkJCQkJcEFkLT5GaXJtd2FyZVZlcnNpb24gPSBcCisJCQkJCQkocEZpcm13YXJlSW1hZ2VbTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUtNF0gPDwgOCkgKworCQkJCQkJcEZpcm13YXJlSW1hZ2VbTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUtM107CisKKwkJCQkJLyogY2hlY2sgaWYgZmlybXdhcmUgdmVyc2lvbiBvZiB0aGUgZmlsZSBpcyB0b28gb2xkICovCisJCQkJCWlmICgocEFkLT5GaXJtd2FyZVZlcnNpb24pIDwgXAorCQkJCQkJCQkJCQkoKEZJUk1XQVJFX01BSk9SX1ZFUlNJT04gPDwgOCkgKworCQkJCQkJCQkJICAJIAkgRklSTVdBUkVfTUlOT1JfVkVSU0lPTikpCisJCQkJCXsKKwkJCQkJCXByaW50aygiJXM6IGZpcm13YXJlIHZlcnNpb24gdG9vIG9sZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCQlOSUNMRl9ERUZBVUxUX1VTRSgpOworCQkJCQkJYnJlYWs7CisJCQkJCX0gLyogRW5kIG9mIGlmICovCisJCQkJfSAvKiBFbmQgb2YgaWYgKi8KKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAorCQkJCQkJICgiTklDTG9hZEZpcm13YXJlOiBDUkMgb2ssIHZlcj0lZC4lZFxuIiwKKwkJCQkJCSAgcEZpcm13YXJlSW1hZ2VbTUFYX0ZJUk1XQVJFX0lNQUdFX1NJWkUtNF0sCisJCQkJCQkgIHBGaXJtd2FyZUltYWdlW01BWF9GSVJNV0FSRV9JTUFHRV9TSVpFLTNdKSk7CisJCQl9IC8qIEVuZCBvZiBpZiAoRmlsZUxlbmd0aCA9PSBNQVhfRklSTVdBUkVfSU1BR0VfU0laRSkgKi8KKwkJCWJyZWFrOworCQl9IHdoaWxlKFRSVUUpOworCisJCS8qIGNsb3NlIGZpcm13YXJlIGZpbGUgKi8KKwkJaWYgKElTX0VSUihzcmNmKSkKKwkJCTsKKwkJZWxzZQorCQl7CisJCQlyZXR2YWwgPSBmaWxwX2Nsb3NlKHNyY2YsIE5VTEwpOworCQkJaWYgKHJldHZhbCkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKKwkJCQkJCSAoIi0tPiBFcnJvciAlZCBjbG9zaW5nICVzXG4iLCAtcmV0dmFsLCBzcmMpKTsKKwkJCX0gLyogRW5kIG9mIGlmICovCisJCX0gLyogRW5kIG9mIGlmICovCisJfSAvKiBFbmQgb2YgaWYgKi8KKworCisJLyogd3JpdGUgZmlybXdhcmUgdG8gQVNJQyAqLworCWlmIChmbGdfZGVmYXVsdF9maXJtX3VzZSA9PSBUUlVFKQorCXsKKwkJLyogdXNlIGRlZmF1bHQgZmltZXdhcmUsIGZyZWUgYWxsb2NhdGVkIGJ1ZmZlciAqLworCQlpZiAocEZpcm13YXJlSW1hZ2UgIT0gTlVMTCkKKwkJCWtmcmVlKHBGaXJtd2FyZUltYWdlKTsKKwkJLyogRW5kIG9mIGlmICovCisKKwkJLyogdXNlIGRlZmF1bHQgKi5iaW4gYXJyYXkgKi8KKwkJcEZpcm13YXJlSW1hZ2UgPSBGaXJtd2FyZUltYWdlOworCQlGaWxlTGVuZ3RoID0gc2l6ZW9mKEZpcm13YXJlSW1hZ2UpOworCX0gLyogRW5kIG9mIGlmICovCisKKwkvKiBlbmFibGUgSG9zdCBwcm9ncmFtIHJhbSB3cml0ZSBzZWxlY3Rpb24gKi8KKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIDB4MTAwMDApOworCisJZm9yKGk9MDsgaTxGaWxlTGVuZ3RoOyBpKz00KQorCXsKKwkJZmlybSA9IHBGaXJtd2FyZUltYWdlW2ldICsKKwkJCSAgIChwRmlybXdhcmVJbWFnZVtpKzNdIDw8IDI0KSArCisJCQkgICAocEZpcm13YXJlSW1hZ2VbaSsyXSA8PCAxNikgKworCQkJICAgKHBGaXJtd2FyZUltYWdlW2krMV0gPDwgOCk7CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRklSTVdBUkVfSU1BR0VfQkFTRSArIGksIGZpcm0pOworCX0gLyogRW5kIG9mIGZvciAqLworCisJUlRNUF9JT19XUklURTMyKHBBZCwgUEJGX1NZU19DVFJMLCAweDAwMDAwKTsKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBQQkZfU1lTX0NUUkwsIDB4MDAwMDEpOworCisJLyogaW5pdGlhbGl6ZSBCQlAgUi9XIGFjY2VzcyBhZ2VudCAqLworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9CQlBfQUdFTlQsIDApOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIEgyTV9NQUlMQk9YX0NTUiwgMCk7CisKKwlpZiAoZmxnX2RlZmF1bHRfZmlybV91c2UgPT0gRkFMU0UpCisJeworCQkvKiB1c2UgZmlsZSBmaXJtd2FyZSwgZnJlZSBhbGxvY2F0ZWQgYnVmZmVyICovCisJCWlmIChwRmlybXdhcmVJbWFnZSAhPSBOVUxMKQorCQkJa2ZyZWUocEZpcm13YXJlSW1hZ2UpOworCQkvKiBFbmQgb2YgaWYgKi8KKwl9IC8qIEVuZCBvZiBpZiAqLworCisJc2V0X2ZzKG9yZ2ZzKTsKKwljdXJyZW50LT5mc3VpZCA9IG9yZ2ZzdWlkOworCWN1cnJlbnQtPmZzZ2lkID0gb3JnZnNnaWQ7CisjZWxzZQorCisJTkRJU19TVEFUVVMJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJUFVDSEFSCQkJcEZpcm13YXJlSW1hZ2U7CisJVUxPTkcJCQlGaWxlTGVuZ3RoLCBJbmRleDsKKwkvL1VMT05HCQkJZmlybTsKKwlVSU5UMzIJCQlNYWNSZWcgPSAwOworCVVJTlQzMgkJCVZlcnNpb24gPSAocEFkLT5NQUNWZXJzaW9uID4+IDE2KTsKKworCXBGaXJtd2FyZUltYWdlID0gRmlybXdhcmVJbWFnZTsKKwlGaWxlTGVuZ3RoID0gc2l6ZW9mKEZpcm13YXJlSW1hZ2UpOworCisJLy8gTmV3IDhrIGJ5dGUgZmlybXdhcmUgc2l6ZSBmb3IgUlQzMDcxL1JUMzA3MgorCS8vcHJpbnRrKCJVc2IgQ2hpcFxuIik7CisJaWYgKEZJUk1XQVJFSU1BR0VfTEVOR1RIID09IEZJUk1XQVJFSU1BR0VfTUFYX0xFTkdUSCkKKwkvL1RoZSBmaXJtd2FyZSBpbWFnZSBjb25zaXN0cyBvZiB0d28gcGFydHMuIE9uZSBpcyB0aGUgb3JpZ2lhbmwgYW5kIHRoZSBvdGhlciBpcyB0aGUgbmV3LgorCS8vVXNlIFNlY29uZCBQYXJ0CisJeworI2lmZGVmIFJUMjg3MAorCQlpZiAoKFZlcnNpb24gIT0gMHgyODYwKSAmJiAoVmVyc2lvbiAhPSAweDI4NzIpICYmIChWZXJzaW9uICE9IDB4MzA3MCkpCisJCXsJLy8gVXNlIEZpcm13YXJlIFYyLgorCQkJLy9wcmludGsoIktIOlVzZSBOZXcgVmVyc2lvbixwYXJ0MlxuIik7CisJCQlwRmlybXdhcmVJbWFnZSA9IChQVUNIQVIpJkZpcm13YXJlSW1hZ2VbRklSTVdBUkVJTUFHRVYxX0xFTkdUSF07CisJCQlGaWxlTGVuZ3RoID0gRklSTVdBUkVJTUFHRVYyX0xFTkdUSDsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vcHJpbnRrKCJLSDpVc2UgTmV3IFZlcnNpb24scGFydDFcbiIpOworCQkJcEZpcm13YXJlSW1hZ2UgPSBGaXJtd2FyZUltYWdlOworCQkJRmlsZUxlbmd0aCA9IEZJUk1XQVJFSU1BR0VWMV9MRU5HVEg7CisJCX0KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwl9CisJZWxzZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiS0g6IGJpbiBmaWxlIHNob3VsZCBiZSA4S0IuXG4iKSk7CisJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCisJUlQyOFhYX1dSSVRFX0ZJUk1XQVJFKHBBZCwgcEZpcm13YXJlSW1hZ2UsIEZpbGVMZW5ndGgpOworCisjZW5kaWYKKworCS8qIGNoZWNrIGlmIE1DVSBpcyByZWFkeSAqLworCUluZGV4ID0gMDsKKwlkbworCXsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBQQkZfU1lTX0NUUkwsICZNYWNSZWcpOworCisJCWlmIChNYWNSZWcgJiAweDgwKQorCQkJYnJlYWs7CisKKwkJUlRNUHVzZWNEZWxheSgxMDAwKTsKKwl9IHdoaWxlIChJbmRleCsrIDwgMTAwMCk7CisKKyAgICBpZiAoSW5kZXggPj0gMTAwMCkKKwl7CisJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIk5JQ0xvYWRGaXJtd2FyZTogTUNVIGlzIG5vdCByZWFkeVxuXG5cbiIpKTsKKwl9IC8qIEVuZCBvZiBpZiAqLworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCisJCQkgKCI8PT09ICVzIChzdGF0dXM9JWQpXG4iLCBfX0ZVTkNUSU9OX18sIFN0YXR1cykpOworICAgIHJldHVybiBTdGF0dXM7Cit9IC8qIEVuZCBvZiBOSUNMb2FkRmlybXdhcmUgKi8KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJTG9hZCBUeCByYXRlIHN3aXRjaGluZyBwYXJhbWV0ZXJzCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5ESVNfU1RBVFVTX1NVQ0NFU1MgICAgICAgICBmaXJtd2FyZSBpbWFnZSBsb2FkIG9rCisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUgICAgICAgICBpbWFnZSBub3QgZm91bmQKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKwlSYXRlIFRhYmxlIEZvcm1hdDoKKwkJMS4gKEIwOiBWYWxpZCBJdGVtIG51bWJlcikgKEIxOkluaXRpYWwgaXRlbSBmcm9tIHplcm8pCisJCTIuIEl0ZW0gTnVtYmVyKERlYykgICAgICBNb2RlKEhleCkgICAgIEN1cnJlbnQgTUNTKERlYykgICAgVHJhaW5VcChEZWMpICAgIFRyYWluRG93bihEZWMpCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUyBOSUNMb2FkUmF0ZVN3aXRjaGluZ1BhcmFtcygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCWlmICBwU3JjMSBhbGwgemVybyB3aXRoIGxlbmd0aCBMZW5ndGgsIHJldHVybiAwLgorCQlJZiBub3QgYWxsIHplcm8sIHJldHVybiAxCisKKwlBcmd1bWVudHM6CisJCXBTcmMxCisKKwlSZXR1cm4gVmFsdWU6CisJCTE6CQkJbm90IGFsbCB6ZXJvCisJCTA6CQkJYWxsIHplcm8KKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1VMT05HCVJUTVBOb3RBbGxaZXJvKAorCUlOCVBWT0lECXBTcmMxLAorCUlOCVVMT05HCUxlbmd0aCkKK3sKKwlQVUNIQVIJcE1lbTE7CisJVUxPTkcJSW5kZXggPSAwOworCisJcE1lbTEgPSAoUFVDSEFSKSBwU3JjMTsKKworCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IExlbmd0aDsgSW5kZXgrKykKKwl7CisJCWlmIChwTWVtMVtJbmRleF0gIT0gMHgwKQorCQl7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChJbmRleCA9PSBMZW5ndGgpCisJeworCQlyZXR1cm4gKDApOworCX0KKwllbHNlCisJeworCQlyZXR1cm4gKDEpOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNvbXBhcmUgdHdvIG1lbW9yeSBibG9jaworCisJQXJndW1lbnRzOgorCQlwU3JjMQkJUG9pbnRlciB0byBmaXJzdCBtZW1vcnkgYWRkcmVzcworCQlwU3JjMgkJUG9pbnRlciB0byBzZWNvbmQgbWVtb3J5IGFkZHJlc3MKKworCVJldHVybiBWYWx1ZToKKwkJMDoJCQltZW1vcnkgaXMgZXF1YWwKKwkJMToJCQlwU3JjMSBtZW1vcnkgaXMgbGFyZ2VyCisJCTI6CQkJcFNyYzIgbWVtb3J5IGlzIGxhcmdlcgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVUxPTkcJUlRNUENvbXBhcmVNZW1vcnkoCisJSU4JUFZPSUQJcFNyYzEsCisJSU4JUFZPSUQJcFNyYzIsCisJSU4JVUxPTkcJTGVuZ3RoKQoreworCVBVQ0hBUglwTWVtMTsKKwlQVUNIQVIJcE1lbTI7CisJVUxPTkcJSW5kZXggPSAwOworCisJcE1lbTEgPSAoUFVDSEFSKSBwU3JjMTsKKwlwTWVtMiA9IChQVUNIQVIpIHBTcmMyOworCisJZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTGVuZ3RoOyBJbmRleCsrKQorCXsKKwkJaWYgKHBNZW0xW0luZGV4XSA+IHBNZW0yW0luZGV4XSkKKwkJCXJldHVybiAoMSk7CisJCWVsc2UgaWYgKHBNZW0xW0luZGV4XSA8IHBNZW0yW0luZGV4XSkKKwkJCXJldHVybiAoMik7CisJfQorCisJLy8gRXF1YWwKKwlyZXR1cm4gKDApOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJWmVybyBvdXQgbWVtb3J5IGJsb2NrCisKKwlBcmd1bWVudHM6CisJCXBTcmMxCQlQb2ludGVyIHRvIG1lbW9yeSBhZGRyZXNzCisJCUxlbmd0aAkJU2l6ZQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUFplcm9NZW1vcnkoCisJSU4JUFZPSUQJcFNyYywKKwlJTglVTE9ORwlMZW5ndGgpCit7CisJUFVDSEFSCXBNZW07CisJVUxPTkcJSW5kZXggPSAwOworCisJcE1lbSA9IChQVUNIQVIpIHBTcmM7CisKKwlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBMZW5ndGg7IEluZGV4KyspCisJeworCQlwTWVtW0luZGV4XSA9IDB4MDA7CisJfQorfQorCitWT0lECVJUTVBGaWxsTWVtb3J5KAorCUlOCVBWT0lECXBTcmMsCisJSU4JVUxPTkcJTGVuZ3RoLAorCUlOCVVDSEFSCUZpbGwpCit7CisJUFVDSEFSCXBNZW07CisJVUxPTkcJSW5kZXggPSAwOworCisJcE1lbSA9IChQVUNIQVIpIHBTcmM7CisKKwlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBMZW5ndGg7IEluZGV4KyspCisJeworCQlwTWVtW0luZGV4XSA9IEZpbGw7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ29weSBkYXRhIGZyb20gbWVtb3J5IGJsb2NrIDEgdG8gbWVtb3J5IGJsb2NrIDIKKworCUFyZ3VtZW50czoKKwkJcERlc3QJCVBvaW50ZXIgdG8gZGVzdGluYXRpb24gbWVtb3J5IGFkZHJlc3MKKwkJcFNyYwkJUG9pbnRlciB0byBzb3VyY2UgbWVtb3J5IGFkZHJlc3MKKwkJTGVuZ3RoCQlDb3B5IHNpemUKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBNb3ZlTWVtb3J5KAorCU9VVAlQVk9JRAlwRGVzdCwKKwlJTglQVk9JRAlwU3JjLAorCUlOCVVMT05HCUxlbmd0aCkKK3sKKwlQVUNIQVIJcE1lbTE7CisJUFVDSEFSCXBNZW0yOworCVVJTlQJSW5kZXg7CisKKwlBU1NFUlQoKExlbmd0aD09MCkgfHwgKHBEZXN0ICYmIHBTcmMpKTsKKworCXBNZW0xID0gKFBVQ0hBUikgcERlc3Q7CisJcE1lbTIgPSAoUFVDSEFSKSBwU3JjOworCisJZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTGVuZ3RoOyBJbmRleCsrKQorCXsKKwkJcE1lbTFbSW5kZXhdID0gcE1lbTJbSW5kZXhdOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUluaXRpYWxpemUgcG9ydCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQorCisJQXJndW1lbnRzOgorCQlBZGFwdGVyCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJVXNlckNmZ0luaXQoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQpCit7CisvLwlFRENBX1BBUk0gRGVmYXVsdEVkY2FQYXJtOworICAgIFVJTlQga2V5X2luZGV4LCBic3NfaW5kZXg7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gVXNlckNmZ0luaXRcbiIpKTsKKworCS8vCisJLy8gIHBhcnQgSS4gaW50aWFsaXplIGNvbW1vbiBjb25maWd1cmF0aW9uCisJLy8KKyNpZmRlZiBSVDI4NzAKKwlwQWQtPkJ1bGtPdXRSZXEgPSAwOworCisJcEFkLT5CdWxrT3V0Q29tcGxldGUgPSAwOworCXBBZC0+QnVsa091dENvbXBsZXRlT3RoZXIgPSAwOworCXBBZC0+QnVsa091dENvbXBsZXRlQ2FuY2VsID0gMDsKKwlwQWQtPkJ1bGtJblJlcSA9IDA7CisJcEFkLT5CdWxrSW5Db21wbGV0ZSA9IDA7CisJcEFkLT5CdWxrSW5Db21wbGV0ZUZhaWwgPSAwOworCisJLy9wQWQtPlF1aWNrVGltZXJQID0gMTAwOworCS8vcEFkLT5UdXJuQWdnckJ1bGtJbkNvdW50ID0gMDsKKwlwQWQtPmJVc2JUeEJ1bGtBZ2dyZSA9IDA7CisKKwkvLyBpbml0IGFzIHVuc2VkIHZhbHVlIHRvIGVuc3VyZSBkcml2ZXIgd2lsbCBzZXQgdG8gTUNVIG9uY2UuCisJcEFkLT5MZWRJbmRpY2F0b3JTdHJlZ3RoID0gMHhGRjsKKworCXBBZC0+Q29tbW9uQ2ZnLk1heFBrdE9uZVR4QnVsayA9IDI7CisJcEFkLT5Db21tb25DZmcuVHhCdWxrRmFjdG9yID0gMTsKKwlwQWQtPkNvbW1vbkNmZy5SeEJ1bGtGYWN0b3IgPTE7CisKKwlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyID0gMTAwOyAvL21XCisKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybSwgc2l6ZW9mKHBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0pKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCWZvcihrZXlfaW5kZXg9MDsga2V5X2luZGV4PFNIQVJFX0tFWV9OVU07IGtleV9pbmRleCsrKQorCXsKKwkJZm9yKGJzc19pbmRleCA9IDA7IGJzc19pbmRleCA8IE1BWF9NQlNTSURfTlVNOyBic3NfaW5kZXgrKykKKwkJeworCQkJcEFkLT5TaGFyZWRLZXlbYnNzX2luZGV4XVtrZXlfaW5kZXhdLktleUxlbiA9IDA7CisJCQlwQWQtPlNoYXJlZEtleVtic3NfaW5kZXhdW2tleV9pbmRleF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisgICAgICAgIH0gLyogRW5kIG9mIGZvciAqLworICAgIH0gLyogRW5kIG9mIGZvciAqLworCisJcEFkLT5FZXByb21BY2Nlc3MgPSBGQUxTRTsKKworCXBBZC0+QW50ZW5uYS53b3JkID0gMDsKKwlwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV18yMDsKKworCXBBZC0+TGVkQ250bC53b3JkID0gMDsKKworCXBBZC0+YkF1dG9UeEFnY0EgPSBGQUxTRTsJCQkvLyBEZWZhdWx0IGlzIE9GRgorCXBBZC0+YkF1dG9UeEFnY0cgPSBGQUxTRTsJCQkvLyBEZWZhdWx0IGlzIE9GRgorCXBBZC0+UmZJY1R5cGUgPSBSRklDXzI4MjA7CisKKwkvLyBJbml0IHRpbWVyIGZvciByZXNldCBjb21wbGV0ZSBldmVudAorCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gMTsKKwlwQWQtPmJGb3JjZVByaW50VFggPSBGQUxTRTsKKwlwQWQtPmJGb3JjZVByaW50UlggPSBGQUxTRTsKKwlwQWQtPmJTdGFGaWZvVGVzdCA9IEZBTFNFOworCXBBZC0+YlByb3RlY3Rpb25UZXN0ID0gRkFMU0U7CisJcEFkLT5iSENDQVRlc3QgPSBGQUxTRTsKKwlwQWQtPmJHZW5PbmVIQ0NBID0gRkFMU0U7CisJcEFkLT5Db21tb25DZmcuRHNpZnMgPSAxMDsgICAgICAvLyBpbiB1bml0cyBvZiB1c2VjCisJcEFkLT5Db21tb25DZmcuVHhQb3dlciA9IDEwMDsgLy9tVworCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gMHhmZmZmZmZmZjsgLy8gQVVUTworCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0ID0gMHhmZmZmZmZmZjsgLy8gQVVUTworCXBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUgPSBSdDgwMl8xMVByZWFtYmxlQXV0bzsgLy8gdXNlIExvbmcgcHJlYW1ibGUgb24gVFggYnkgZGVmYXV0CisJcEFkLT5Db21tb25DZmcuYlVzZVplcm9Ub0Rpc2FibGVGcmFnbWVudCA9IEZBTFNFOworCXBBZC0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCA9IDIzNDc7CisJcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSAyMzQ2OworCXBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9IDA7ICAgIC8vIDA6IEFVVE8KKwlwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCA9IFRSVUU7IC8vMDsKKwlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gMHhmZjsgICAgIC8vIHVua25vd24KKwlwQWQtPkNvbW1vbkNmZy5CYW5kU3RhdGUgPSBVTktOT1dOX0JBTkQ7CisJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuQ1NQZXJpb2QgPSAxMDsKKwlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DU0NvdW50ID0gMDsKKwlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRE1vZGUgPSBSRF9OT1JNQUxfTU9ERTsKKwlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DaE1vdmluZ1RpbWUgPSA2NTsKKwlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5Mb25nUHVsc2VSYWRhclRoID0gMzsKKwlwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgPSBGQUxTRTsKKwlwQWQtPkNvbW1vbkNmZy5iTmVlZFNlbmRUcmlnZ2VyRnJhbWUgPSBGQUxTRTsKKwlwQWQtPkNvbW1vbkNmZy5UcmlnZ2VyVGltZXJDb3VudCA9IDA7CisJcEFkLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZSA9IEZBTFNFOworCXBBZC0+Q29tbW9uQ2ZnLmJDb3VudHJ5RmxhZyA9IEZBTFNFOworCXBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID0gMDsKKwlwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9IDA7CisKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5CZWFjb25UeFdJLCBzaXplb2YocEFkLT5CZWFjb25UeFdJKSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LCBzaXplb2YocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5KSk7CisJcEFkLT5IVENFbmFibGUgPSBGQUxTRTsKKwlwQWQtPmJCcm9hZENvbUhUID0gRkFMU0U7CisJcEFkLT5Db21tb25DZmcuYlJkZyA9IEZBTFNFOworCisjaWZkZWYgRE9UMTFOX0RSQUZUMworCXBBZC0+Q29tbW9uQ2ZnLkRvdDExT0Jzc1NjYW5QYXNzaXZlRHdlbGwgPSBkb3QxMU9CU1NTY2FuUGFzc2l2ZUR3ZWxsOwkvLyBVbml0IDogVFUuIDV+MTAwMAorCXBBZC0+Q29tbW9uQ2ZnLkRvdDExT0Jzc1NjYW5BY3RpdmVEd2VsbCA9IGRvdDExT0JTU1NjYW5BY3RpdmVEd2VsbDsJLy8gVW5pdCA6IFRVLiAxMH4xMDAwCisJcEFkLT5Db21tb25DZmcuRG90MTFCc3NXaWR0aFRyaWdnZXJTY2FuSW50ID0gZG90MTFCU1NXaWR0aFRyaWdnZXJTY2FuSW50ZXJ2YWw7CS8vIFVuaXQgOiBTZWNvbmQKKwlwQWQtPkNvbW1vbkNmZy5Eb3QxMU9Cc3NTY2FuUGFzc2l2ZVRvdGFsUGVyQ2hhbm5lbCA9IGRvdDExT0JTU1NjYW5QYXNzaXZlVG90YWxQZXJDaGFubmVsOwkvLyBVbml0IDogVFUuIDIwMH4xMDAwMAorCXBBZC0+Q29tbW9uQ2ZnLkRvdDExT0Jzc1NjYW5BY3RpdmVUb3RhbFBlckNoYW5uZWwgPSBkb3QxMU9CU1NTY2FuQWN0aXZlVG90YWxQZXJDaGFubmVsOwkvLyBVbml0IDogVFUuIDIwfjEwMDAwCisJcEFkLT5Db21tb25DZmcuRG90MTFCc3NXaWR0aENoYW5UcmFuRGVsYXlGYWN0b3IgPSBkb3QxMUJTU1dpZHRoQ2hhbm5lbFRyYW5zYWN0aW9uRGVsYXlGYWN0b3I7CisJcEFkLT5Db21tb25DZmcuRG90MTFPQnNzU2NhbkFjdGl2aXR5VGhyZSA9IGRvdDExQlNTU2NhbkFjdGl2aXR5VGhyZXNob2xkOwkvLyBVbml0IDogcGVyY2VudGFnZQorCXBBZC0+Q29tbW9uQ2ZnLkRvdDExQnNzV2lkdGhDaGFuVHJhbkRlbGF5ID0gKHBBZC0+Q29tbW9uQ2ZnLkRvdDExQnNzV2lkdGhUcmlnZ2VyU2NhbkludCAqIHBBZC0+Q29tbW9uQ2ZnLkRvdDExQnNzV2lkdGhDaGFuVHJhbkRlbGF5RmFjdG9yKTsKKyNlbmRpZiAgLy8gRE9UMTFOX0RSQUZUMyAvLworCisJTmRpc1plcm9NZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbywgc2l6ZW9mKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbykpOworCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NTVBTbW9kZSA9IE1NUFNfRU5BQkxFOworCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NcGR1RGVuc2l0eSA9IDA7CisJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlBvbGljeSA9IElNTUVEX0JBOworCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQgPSA2NDsgLy8zMjsKKwlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuVHhCQVdpbkxpbWl0ID0gNjQ7IC8vMzI7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IFVzZXJDZmdJbml0LiBCQUNhcGFiaWxpdHkgPSAweCV4XG4iLCBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkud29yZCkpOworCisJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IEZBTFNFOworCUJBVGFibGVJbml0KHBBZCwgJnBBZC0+QkFUYWJsZSk7CisKKwlwQWQtPkNvbW1vbkNmZy5iRXh0Q2hhbm5lbFN3aXRjaEFubm91bmNlbWVudCA9IDE7CisJcEFkLT5Db21tb25DZmcuYkhUUHJvdGVjdCA9IDE7CisJcEFkLT5Db21tb25DZmcuYk1JTU9QU0VuYWJsZSA9IFRSVUU7CisJcEFkLT5Db21tb25DZmcuYkJBRGVjbGluZSA9IEZBTFNFOworCXBBZC0+Q29tbW9uQ2ZnLmJEaXNhYmxlUmVvcmRlcmluZyA9IEZBTFNFOworCisJcEFkLT5Db21tb25DZmcuVHhCQVNpemUgPSA3OworCisJcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LndvcmQgPSBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkud29yZDsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vcEFkLT5Db21tb25DZmcuSFRQaHlNb2RlLmZpZWxkLkJXID0gQldfMjA7CisJLy9wQWQtPkNvbW1vbkNmZy5IVFBoeU1vZGUuZmllbGQuTUNTID0gTUNTX0FVVE87CisJLy9wQWQtPkNvbW1vbkNmZy5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsKKwkvL3BBZC0+Q29tbW9uQ2ZnLkhUUGh5TW9kZS5maWVsZC5TVEJDID0gU1RCQ19OT05FOworCXBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZSA9IFJBVEVfNjsKKworCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NQ1MgPSBNQ1NfUkFURV82OworCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5CVyA9IEJXXzIwOworCXBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdC5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCisJcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kID0gMTAwOyAgICAgLy8gaW4gbVNlYworCisJLy8KKwkvLyBwYXJ0IElJLiBpbnRpYWxpemUgU1RBIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24KKwkvLworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQlSWF9GSUxURVJfU0VUX0ZMQUcocEFkLCBmUlhfRklMVEVSX0FDQ0VQVF9ESVJFQ1QpOworCQlSWF9GSUxURVJfQ0xFQVJfRkxBRyhwQWQsIGZSWF9GSUxURVJfQUNDRVBUX01VTFRJQ0FTVCk7CisJCVJYX0ZJTFRFUl9TRVRfRkxBRyhwQWQsIGZSWF9GSUxURVJfQUNDRVBUX0JST0FEQ0FTVCk7CisJCVJYX0ZJTFRFUl9TRVRfRkxBRyhwQWQsIGZSWF9GSUxURVJfQUNDRVBUX0FMTF9NVUxUSUNBU1QpOworCisJCXBBZC0+U3RhQ2ZnLlBzbSA9IFBXUl9BQ1RJVkU7CisKKwkJcEFkLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7CisJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkOworCQlwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQ7CisJCXBBZC0+U3RhQ2ZnLmJNaXhDaXBoZXIgPSBGQUxTRTsKKwkJcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkID0gMDsKKworCQkvLyA4MDIuMXggcG9ydCBjb250cm9sCisJCXBBZC0+U3RhQ2ZnLlByaXZhY3lGaWx0ZXIgPSBOZGlzODAyXzExUHJpdkZpbHRlcjgwMjF4V0VQOworCQlwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwkJcEFkLT5TdGFDZmcuTGFzdE1pY0Vycm9yVGltZSA9IDA7CisJCXBBZC0+U3RhQ2ZnLk1pY0VyckNudCAgICAgICAgPSAwOworCQlwQWQtPlN0YUNmZy5iQmxvY2tBc3NvYyAgICAgID0gRkFMU0U7CisJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlICAgICAgICAgPSBTU19OT1RVU0U7CisKKwkJcEFkLT5Db21tb25DZmcuTmRpc1JhZGlvU3RhdGVPZmYgPSBGQUxTRTsJCS8vIE5ldyB0byBzdXBwb3J0IG1pY3Jvc29mdCBkaXNhYmxlIHJhZGlvIHdpdGggT0lEIGNvbW1hbmQKKworCQlwQWQtPlN0YUNmZy5Sc3NpVHJpZ2dlciA9IDA7CisJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLCBzaXplb2YoUlNTSV9TQU1QTEUpKTsKKwkJcEFkLT5TdGFDZmcuUnNzaVRyaWdnZXJNb2RlID0gUlNTSV9UUklHR0VSRURfVVBPTl9CRUxPV19USFJFU0hPTEQ7CisJCXBBZC0+U3RhQ2ZnLkF0aW1XaW4gPSAwOworCQlwQWQtPlN0YUNmZy5EZWZhdWx0TGlzdGVuQ291bnQgPSAzOy8vZGVmYXVsdCBsaXN0ZW4gY291bnQ7CisJCXBBZC0+U3RhQ2ZnLkJzc1R5cGUgPSBCU1NfSU5GUkE7ICAvLyBCU1NfSU5GUkEgb3IgQlNTX0FESE9DIG9yIEJTU19NT05JVE9SCisJCXBBZC0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBGQUxTRTsKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSk7CisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dBS0VVUF9OT1cpOworCisJCXBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID0gVFJVRTsKKwkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSBNQ1NfQVVUTzsKKwl9CisKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJcEFkLT5TdGFDZmcuSUVFRTgwMjExZENsaWVudE1vZGUgPSBSdDgwMl8xMV9EX05vbmU7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gZ2xvYmFsIHZhcmlhYmxlcyBtWFhYWCB1c2VkIGluIE1BQyBwcm90b2NvbCBzdGF0ZSBtYWNoaW5lcworCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19SRUNFSVZFX0RUSU0pOworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FESE9DX09OKTsKKwlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19JTkZSQV9PTik7CisKKwkvLyBQSFkgc3BlY2lmaWNhdGlvbgorCXBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPSBQSFlfMTFCR19NSVhFRDsJCS8vIGRlZmF1bHQgUEhZIG1vZGUKKwlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpOyAgLy8gQ0NLIHVzZSBMT05HIHByZWFtYmxlCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJLy8gdXNlciBkZXNpcmVkIHBvd2VyIG1vZGUKKwkJcEFkLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVDQU07CisJCXBBZC0+U3RhQ2ZnLldpbmRvd3NCYXR0ZXJ5UG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZUNBTTsKKwkJcEFkLT5TdGFDZmcuYldpbmRvd3NBQ0NBTUVuYWJsZSA9IEZBTFNFOworCisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCS8vIENDWCB2MS4wIHJlbGVhdGVkIGluaXQgdmFsdWUKKwkJUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPlN0YUNmZy5MZWFwQXV0aFRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oTGVhcEF1dGhUaW1lb3V0KSwgcEFkLCBGQUxTRSk7CisJCXBBZC0+U3RhQ2ZnLkxlYXBBdXRoTW9kZSA9IENJU0NPX0F1dGhNb2RlTEVBUE5vbmU7CisJCXBBZC0+U3RhQ2ZnLmJDa2lwT24gPSBGQUxTRTsKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKworCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYyksIHBBZCwgRkFMU0UpOworCQlwQWQtPlN0YUNmZy5TdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBUaW1lclJ1bm5pbmcgPSBGQUxTRTsKKworCQkvLyBQYXRjaCBmb3IgTmR0ZXN0CisJCXBBZC0+U3RhQ2ZnLlNjYW5DbnQgPSAwOworCisJCS8vIENDWCAyLjAgY29udHJvbCBmbGFnIGluaXQKKwkJcEFkLT5TdGFDZmcuQ0NYRW5hYmxlID0gRkFMU0U7CisJCXBBZC0+U3RhQ2ZnLkNDWFJlcVR5cGUgPSBNU1JOX1RZUEVfVU5VU0VEOworCQlwQWQtPlN0YUNmZy5DQ1hRb3NFQ1dNaW4JPSA0OworCQlwQWQtPlN0YUNmZy5DQ1hRb3NFQ1dNYXgJPSAxMDsKKworCQlwQWQtPlN0YUNmZy5iSHdSYWRpbyAgPSBUUlVFOyAvLyBEZWZhdWx0IEhhcmR3YXJlIFJhZGlvIHN0YXR1cyBpcyBPbgorCQlwQWQtPlN0YUNmZy5iU3dSYWRpbyAgPSBUUlVFOyAvLyBEZWZhdWx0IFNvZnR3YXJlIFJhZGlvIHN0YXR1cyBpcyBPbgorCQlwQWQtPlN0YUNmZy5iUmFkaW8gICAgPSBUUlVFOyAvLyBiSHdSYWRpbyAmJiBiU3dSYWRpbworCQlwQWQtPlN0YUNmZy5iSGFyZHdhcmVSYWRpbyA9IEZBTFNFOwkJLy8gRGVmYXVsdCBpcyBPRkYKKwkJcEFkLT5TdGFDZmcuYlNob3dIaWRkZW5TU0lEID0gRkFMU0U7CQkvLyBEZWZhdWx0IG5vIHNob3cKKworCQkvLyBOaXRybyBtb2RlIGNvbnRyb2wKKwkJcEFkLT5TdGFDZmcuYkF1dG9SZWNvbm5lY3QgPSBUUlVFOworCisJCS8vIFNhdmUgdGhlIGluaXQgdGltZSBhcyBsYXN0IHNjYW4gdGltZSwgdGhlIHN5c3RlbSBzaG91bGQgZG8gc2NhbiBhZnRlciAyIHNlY29uZHMuCisJCS8vIFRoaXMgcGF0Y2ggaXMgZm9yIGRyaXZlciB3YWtlIHVwIGZyb20gc3RhbmRieSBtb2RlLCBzeXN0ZW0gd2lsbCBkbyBzY2FuIHJpZ2h0IGF3YXkuCisJCXBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSA9IDA7CisJCU5kaXNaZXJvTWVtb3J5KHBBZC0+bmlja25hbWUsIElXX0VTU0lEX01BWF9TSVpFKzEpOworCQlzcHJpbnRmKHBBZC0+bmlja25hbWUsICIlcyIsIFNUQV9OSUNfREVWSUNFX05BTUUpOworCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+U3RhQ2ZnLldwYURpc2Fzc29jQW5kQmxvY2tBc3NvY1RpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oV3BhRGlzYXNzb2NBcEFuZEJsb2NrQXNzb2MpLCBwQWQsIEZBTFNFKTsKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJCXBBZC0+U3RhQ2ZnLklFRUU4MDIxWCA9IEZBTFNFOworCQlwQWQtPlN0YUNmZy5JRUVFODAyMXhfcmVxdWlyZWRfa2V5cyA9IEZBTFNFOworCQlwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFOworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJCXBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IFdQQV9TVVBQTElDQU5UX0VOQUJMRTsKKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIERlZmF1bHQgZm9yIGV4dHJhIGluZm9ybWF0aW9uIGlzIG5vdCB2YWxpZAorCXBBZC0+RXh0cmFJbmZvID0gRVhUUkFfSU5GT19DTEVBUjsKKworCS8vIERlZmF1bHQgQ29uZmlnIGNoYW5nZSBmbGFnCisJcEFkLT5iQ29uZmlnQ2hhbmdlZCA9IEZBTFNFOworCisJLy8KKwkvLyBwYXJ0IElJSS4gQVAgY29uZmlndXJhdGlvbnMKKwkvLworCisKKwkvLworCS8vIHBhcnQgSVYuIG90aGVycworCS8vCisJLy8gZHluYW1pYyBCQlAgUjY2OnNlbnNpYml0eSB0dW5pbmcgdG8gb3ZlcmNvbWUgYmFja2dyb3VuZCBub2lzZQorCXBBZC0+QmJwVHVuaW5nLmJFbmFibGUgICAgICAgICAgICAgICAgPSBUUlVFOworCXBBZC0+QmJwVHVuaW5nLkZhbHNlQ2NhTG93ZXJUaHJlc2hvbGQgPSAxMDA7CisJcEFkLT5CYnBUdW5pbmcuRmFsc2VDY2FVcHBlclRocmVzaG9sZCA9IDUxMjsKKwlwQWQtPkJicFR1bmluZy5SNjZEZWx0YSAgICAgICAgICAgICAgID0gNDsKKwlwQWQtPk1sbWUuYkVuYWJsZUF1dG9BbnRlbm5hQ2hlY2sgPSBUUlVFOworCisJLy8KKwkvLyBBbHNvIGluaXRpYWwgUjY2Q3VycmVudFZhbHVlLCBSVFVTQlJlc3VtZU1zZHVUcmFuc21pc3Npb24gbWlnaHQgdXNlIHRoaXMgdmFsdWUuCisJLy8gaWYgbm90IGluaXRpYWwgdGhpcyB2YWx1ZSwgdGhlIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSAwLgorCS8vCisJcEFkLT5CYnBUdW5pbmcuUjY2Q3VycmVudFZhbHVlID0gMHgzODsKKworCXBBZC0+QmJwOTQgPSBCQlBSOTRfREVGQVVMVDsKKwlwQWQtPkJicEZvckNDSyA9IEZBTFNFOworCisJLy8gRGVmYXVsdCBpcyBGQUxTRSBmb3IgdGVzdCBiaXQgMQorCS8vcEFkLT5iVGVzdDEgPSBGQUxTRTsKKworCS8vIGluaXRpYWxpemUgTUFDIHRhYmxlIGFuZCBhbGxvY2F0ZSBzcGluIGxvY2sKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5NYWNUYWIsIHNpemVvZihNQUNfVEFCTEUpKTsKKwlJbml0aWFsaXplUXVldWVIZWFkZXIoJnBBZC0+TWFjVGFiLk1jYXN0UHNRdWV1ZSk7CisJTmRpc0FsbG9jYXRlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisKKwkvL1JUTVBJbml0VGltZXIocEFkLCAmcEFkLT5SRUNCQVRpbWVyLCBSRUNCQVRpbWVyVGltZW91dCwgcEFkLCBUUlVFKTsKKwkvL1JUTVBTZXRUaW1lcigmcEFkLT5SRUNCQVRpbWVyLCBSRU9SREVSX0VYRUNfSU5UVik7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJTmRpc1plcm9NZW1vcnkoJnBBZC0+YXRlLCBzaXplb2YoQVRFX0lORk8pKTsKKwlwQWQtPmF0ZS5Nb2RlID0gQVRFX1NUT1A7CisJcEFkLT5hdGUuVHhDb3VudCA9IDIwMDsvKiB0byBleGNlZWQgVFhfUklOR19TSVpFIC4uLiAqLworCXBBZC0+YXRlLlR4TGVuZ3RoID0gMTAyNDsKKwlwQWQtPmF0ZS5UeFdJLlNob3J0R0kgPSAwOy8vIExPTkcgR0kgOiA4MDAgbnMKKwlwQWQtPmF0ZS5UeFdJLlBIWU1PREUgPSBNT0RFX0NDSzsKKwlwQWQtPmF0ZS5UeFdJLk1DUyA9IDM7CisJcEFkLT5hdGUuVHhXSS5CVyA9IEJXXzIwOworCXBBZC0+YXRlLkNoYW5uZWwgPSAxOworCXBBZC0+YXRlLlFJRCA9IFFJRF9BQ19CRTsKKwlwQWQtPmF0ZS5BZGRyMVswXSA9IDB4MDA7CisJcEFkLT5hdGUuQWRkcjFbMV0gPSAweDExOworCXBBZC0+YXRlLkFkZHIxWzJdID0gMHgyMjsKKwlwQWQtPmF0ZS5BZGRyMVszXSA9IDB4QUE7CisJcEFkLT5hdGUuQWRkcjFbNF0gPSAweEJCOworCXBBZC0+YXRlLkFkZHIxWzVdID0gMHhDQzsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPmF0ZS5BZGRyMiwgcEFkLT5hdGUuQWRkcjEsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7CisJTmRpc01vdmVNZW1vcnkocEFkLT5hdGUuQWRkcjMsIHBBZC0+YXRlLkFkZHIxLCBFVEhfTEVOR1RIX09GX0FERFJFU1MpOworCXBBZC0+YXRlLmJSeEZlciA9IDA7CisJcEFkLT5hdGUuYlFBVHhTdGFydCA9IEZBTFNFOworCXBBZC0+YXRlLmJRQVJ4U3RhcnQgPSBGQUxTRTsKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCS8vcEFkLT5hdGUuUmVwZWF0ID0gMDsKKwlwQWQtPmF0ZS5UeFN0YXR1cyA9IDA7CisJcEFkLT5hdGUuQXRlUGlkID0gMDsKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCisJcEFkLT5Db21tb25DZmcuYldpRmlUZXN0ID0gRkFMU0U7CisKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLSBVc2VyQ2ZnSW5pdFxuIikpOworfQorCisvLyBJUlFMID0gUEFTU0lWRV9MRVZFTAorVUNIQVIgQnRvSChjaGFyIGNoKQoreworCWlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSByZXR1cm4gKGNoIC0gJzAnKTsgICAgICAgIC8vIEhhbmRsZSBudW1lcmFscworCWlmIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSByZXR1cm4gKGNoIC0gJ0EnICsgMHhBKTsgIC8vIEhhbmRsZSBjYXBpdG9sIGhleCBkaWdpdHMKKwlpZiAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykgcmV0dXJuIChjaCAtICdhJyArIDB4QSk7ICAvLyBIYW5kbGUgc21hbGwgaGV4IGRpZ2l0cworCXJldHVybigyNTUpOworfQorCisvLworLy8gIEZVTkNUSU9OOiBBdG9IKGNoYXIgKiwgVUNIQVIgKiwgaW50KQorLy8KKy8vICBQVVJQT1NFOiAgQ29udmVydHMgYXNjaWkgc3RyaW5nIHRvIG5ldHdvcmsgb3JkZXIgaGV4CisvLworLy8gIFBBUkFNRVRFUlM6CisvLyAgICBzcmMgICAgLSBwb2ludGVyIHRvIGlucHV0IGFzY2lpIHN0cmluZworLy8gICAgZGVzdCAgIC0gcG9pbnRlciB0byBvdXRwdXQgaGV4CisvLyAgICBkZXN0bGVuIC0gc2l6ZSBvZiBkZXN0CisvLworLy8gIENPTU1FTlRTOgorLy8KKy8vICAgIDIgYXNjaWkgYnl0ZXMgbWFrZSBhIGhleCBieXRlIHNvIG11c3QgcHV0IDFzdCBhc2NpaSBieXRlIG9mIHBhaXIKKy8vICAgIGludG8gdXBwZXIgbmliYmxlIGFuZCAybmQgYXNjaWkgYnl0ZSBvZiBwYWlyIGludG8gbG93ZXIgbmliYmxlLgorLy8KKy8vIElSUUwgPSBQQVNTSVZFX0xFVkVMCisKK3ZvaWQgQXRvSChjaGFyICogc3JjLCBVQ0hBUiAqIGRlc3QsIGludCBkZXN0bGVuKQoreworCWNoYXIgKiBzcmNwdHI7CisJUFVDSEFSIGRlc3RUZW1wOworCisJc3JjcHRyID0gc3JjOworCWRlc3RUZW1wID0gKFBVQ0hBUikgZGVzdDsKKworCXdoaWxlKGRlc3RsZW4tLSkKKwl7CisJCSpkZXN0VGVtcCA9IEJ0b0goKnNyY3B0cisrKSA8PCA0OyAgICAvLyBQdXQgMXN0IGFzY2lpIGJ5dGUgaW4gdXBwZXIgbmliYmxlLgorCQkqZGVzdFRlbXAgKz0gQnRvSCgqc3JjcHRyKyspOyAgICAgIC8vIEFkZCAybmQgYXNjaWkgYnl0ZSB0byBhYm92ZS4KKwkJZGVzdFRlbXArKzsKKwl9Cit9CisKK1ZPSUQJUlRNUFBhdGNoTWFjQmJwQnVnKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVVMT05HCUluZGV4OworCisJLy8gSW5pdGlhbGl6ZSBCQlAgcmVnaXN0ZXIgdG8gZGVmYXVsdCB2YWx1ZQorCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IE5VTV9CQlBfUkVHX1BBUk1TOyBJbmRleCsrKQorCXsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUFJlZ1RhYmxlW0luZGV4XS5SZWdpc3RlciwgKFVDSEFSKUJCUFJlZ1RhYmxlW0luZGV4XS5WYWx1ZSk7CisJfQorCisJLy8gSW5pdGlhbGl6ZSBSRiByZWdpc3RlciB0byBkZWZhdWx0IHZhbHVlCisJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisKKwkvLyBSZS1pbml0IEJCUCByZWdpc3RlciBmcm9tIEVFUFJPTSB2YWx1ZQorCU5JQ0luaXRBc2ljRnJvbUVFUFJPTShwQWQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJSW5pdCB0aW1lciBvYmplY3RzCisKKwlBcmd1bWVudHM6CisJCXBBZAkJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcFRpbWVyCQkJCVRpbWVyIHN0cnVjdHVyZQorCQlwVGltZXJGdW5jCQkJRnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIHRpbWVyIGV4cGlyZWQKKwkJUmVwZWF0CQkJCVR1cmUgZm9yIHBlcmlvZCB0aW1lcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QSW5pdFRpbWVyKAorCUlOCVBSVE1QX0FEQVBURVIJCQlwQWQsCisJSU4JUFJBTElOS19USU1FUl9TVFJVQ1QJcFRpbWVyLAorCUlOCVBWT0lECQkJCQlwVGltZXJGdW5jLAorCUlOCVBWT0lECQkJCQlwRGF0YSwKKwlJTglCT09MRUFOCQkJCQlSZXBlYXQpCit7CisJLy8KKwkvLyBTZXQgVmFsaWQgdG8gVFJVRSBmb3IgbGF0ZXIgdXNlZC4KKwkvLyBJdCB3aWxsIGNyYXNoIGlmIHdlIGNhbmNlbCBhIHRpbWVyIG9yIHNldCBhIHRpbWVyCisJLy8gdGhhdCB3ZSBoYXZlbid0IGluaXRpYWxpemUgYmVmb3JlLgorCS8vCisJcFRpbWVyLT5WYWxpZCAgICAgID0gVFJVRTsKKworCXBUaW1lci0+UGVyaW9kaWNUeXBlID0gUmVwZWF0OworCXBUaW1lci0+U3RhdGUgICAgICA9IEZBTFNFOworCXBUaW1lci0+Y29va2llID0gKFVMT05HKSBwRGF0YTsKKworI2lmZGVmIFJUMjg3MAorCXBUaW1lci0+cEFkID0gcEFkOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJUlRNUF9PU19Jbml0X1RpbWVyKHBBZCwJJnBUaW1lci0+VGltZXJPYmosCXBUaW1lckZ1bmMsIChQVk9JRCkgcFRpbWVyKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUluaXQgdGltZXIgb2JqZWN0cworCisJQXJndW1lbnRzOgorCQlwVGltZXIJCQkJVGltZXIgc3RydWN0dXJlCisJCVZhbHVlCQkJCVRpbWVyIHZhbHVlIGluIG1pbGxpc2Vjb25kcworCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCQlUbyB1c2UgdGhpcyByb3V0aW5lLCBtdXN0IGNhbGwgUlRNUEluaXRUaW1lciBiZWZvcmUuCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBTZXRUaW1lcigKKwlJTglQUkFMSU5LX1RJTUVSX1NUUlVDVAlwVGltZXIsCisJSU4JVUxPTkcJCQkJCVZhbHVlKQoreworCWlmIChwVGltZXItPlZhbGlkKQorCXsKKwkJcFRpbWVyLT5UaW1lclZhbHVlID0gVmFsdWU7CisJCXBUaW1lci0+U3RhdGUgICAgICA9IEZBTFNFOworCQlpZiAocFRpbWVyLT5QZXJpb2RpY1R5cGUgPT0gVFJVRSkKKwkJeworCQkJcFRpbWVyLT5SZXBlYXQgPSBUUlVFOworCQkJUlRNUF9TZXRQZXJpb2RpY1RpbWVyKCZwVGltZXItPlRpbWVyT2JqLCBWYWx1ZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwVGltZXItPlJlcGVhdCA9IEZBTFNFOworCQkJUlRNUF9PU19BZGRfVGltZXIoJnBUaW1lci0+VGltZXJPYmosIFZhbHVlKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlEQkdQUklOVF9FUlIoKCJSVE1QU2V0VGltZXIgZmFpbGVkLCBUaW1lciBoYXNuJ3QgYmVlbiBpbml0aWFsaXplIVxuIikpOworCX0KK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJSW5pdCB0aW1lciBvYmplY3RzCisKKwlBcmd1bWVudHM6CisJCXBUaW1lcgkJCQlUaW1lciBzdHJ1Y3R1cmUKKwkJVmFsdWUJCQkJVGltZXIgdmFsdWUgaW4gbWlsbGlzZWNvbmRzCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisJCVRvIHVzZSB0aGlzIHJvdXRpbmUsIG11c3QgY2FsbCBSVE1QSW5pdFRpbWVyIGJlZm9yZS4KKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUE1vZFRpbWVyKAorCUlOCVBSQUxJTktfVElNRVJfU1RSVUNUCXBUaW1lciwKKwlJTglVTE9ORwkJCQkJVmFsdWUpCit7CisJQk9PTEVBTglDYW5jZWw7CisKKwlpZiAocFRpbWVyLT5WYWxpZCkKKwl7CisJCXBUaW1lci0+VGltZXJWYWx1ZSA9IFZhbHVlOworCQlwVGltZXItPlN0YXRlICAgICAgPSBGQUxTRTsKKwkJaWYgKHBUaW1lci0+UGVyaW9kaWNUeXBlID09IFRSVUUpCisJCXsKKwkJCVJUTVBDYW5jZWxUaW1lcihwVGltZXIsICZDYW5jZWwpOworCQkJUlRNUFNldFRpbWVyKHBUaW1lciwgVmFsdWUpOworCQl9CisJCWVsc2UKKwkJeworCQkJUlRNUF9PU19Nb2RfVGltZXIoJnBUaW1lci0+VGltZXJPYmosIFZhbHVlKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlEQkdQUklOVF9FUlIoKCJSVE1QTW9kVGltZXIgZmFpbGVkLCBUaW1lciBoYXNuJ3QgYmVlbiBpbml0aWFsaXplIVxuIikpOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNhbmNlbCB0aW1lciBvYmplY3RzCisKKwlBcmd1bWVudHM6CisJCUFkYXB0ZXIJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCQkxLikgVG8gdXNlIHRoaXMgcm91dGluZSwgbXVzdCBjYWxsIFJUTVBJbml0VGltZXIgYmVmb3JlLgorCQkyLikgUmVzZXQgTklDIHRvIGluaXRpYWwgc3RhdGUgQVMgSVMgc3lzdGVtIGJvb3QgdXAgdGltZS4KKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUENhbmNlbFRpbWVyKAorCUlOCVBSQUxJTktfVElNRVJfU1RSVUNUCXBUaW1lciwKKwlPVVQJQk9PTEVBTgkJCQkJKnBDYW5jZWxsZWQpCit7CisJaWYgKHBUaW1lci0+VmFsaWQpCisJeworCQlpZiAocFRpbWVyLT5TdGF0ZSA9PSBGQUxTRSkKKwkJCXBUaW1lci0+UmVwZWF0ID0gRkFMU0U7CisJCQlSVE1QX09TX0RlbF9UaW1lcigmcFRpbWVyLT5UaW1lck9iaiwgcENhbmNlbGxlZCk7CisKKwkJaWYgKCpwQ2FuY2VsbGVkID09IFRSVUUpCisJCQlwVGltZXItPlN0YXRlID0gVFJVRTsKKworI2lmZGVmIFJUMjg3MAorCQkvLyBXZSBuZWVkIHRvIGdvLXRocm91Z2ggdGhlIFRpbWVyUSB0byBmaW5kb3V0IHRoaXMgdGltZXIgaGFuZGxlciBhbmQgcmVtb3ZlIGl0IGlmCisJCS8vCQlpdCdzIHN0aWxsIHdhaXRpbmcgZm9yIGV4ZWN1dGlvbi4KKworCQlSVDI4NzBfVGltZXJRX1JlbW92ZShwVGltZXItPnBBZCwgcFRpbWVyKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwl9CisJZWxzZQorCXsKKwkJLy8KKwkJLy8gTmRpc01DYW5jZWxUaW1lciBqdXN0IGNhbmNlZCB0aGUgdGltZXIgYW5kIG5vdCBtZWFuIHJlbGVhc2UgdGhlIHRpbWVyLgorCQkvLyBBbmQgZG9uJ3Qgc2V0IHRoZSAiVmFsaWQiIHRvIEZhbHNlLiBTbyB0aGF0IHdlIGNhbiB1c2UgdGhpcyB0aW1lciBhZ2Fpbi4KKwkJLy8KKwkJREJHUFJJTlRfRVJSKCgiUlRNUENhbmNlbFRpbWVyIGZhaWxlZCwgVGltZXIgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZSFcbiIpKTsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlTZXQgTEVEIFN0YXR1cworCisJQXJndW1lbnRzOgorCQlwQWQJCQkJCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCVN0YXR1cwkJCQkJTEVEIFN0YXR1cworCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUFNldExFRCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQsCisJSU4gVUNIQVIJCQlTdGF0dXMpCit7CisJLy9VTE9ORwkJCWRhdGE7CisJVUNIQVIJCQlIaWdoQnl0ZSA9IDA7CisJVUNIQVIJCQlMb3dCeXRlOworCisvLyBJbiBBVEUgbW9kZSBvZiBSVDI4NjAgQVAvU1RBLCB3ZSBoYXZlIGVyYXNlZCA4MDUxIGZpcm13YXJlLgorLy8gU28gTEVEIG1vZGUgaXMgbm90IHN1cHBvcnRlZCB3aGVuIEFURSBpcyBydW5uaW5nLgorI2lmZGVmIFJBTElOS19BVEUKKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwlMb3dCeXRlID0gcEFkLT5MZWRDbnRsLmZpZWxkLkxlZE1vZGUmMHg3ZjsKKwlzd2l0Y2ggKFN0YXR1cykKKwl7CisJCWNhc2UgTEVEX0xJTktfRE9XTjoKKwkJCUhpZ2hCeXRlID0gMHgyMDsKKwkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MCwgMHhmZiwgTG93Qnl0ZSwgSGlnaEJ5dGUpOworCQkJcEFkLT5MZWRJbmRpY2F0b3JTdHJlZ3RoID0gMDsKKwkJCWJyZWFrOworCQljYXNlIExFRF9MSU5LX1VQOgorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKwkJCQlIaWdoQnl0ZSA9IDB4YTA7CisJCQllbHNlCisJCQkJSGlnaEJ5dGUgPSAweDYwOworCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUwLCAweGZmLCBMb3dCeXRlLCBIaWdoQnl0ZSk7CisJCQlicmVhazsKKwkJY2FzZSBMRURfUkFESU9fT046CisJCQlIaWdoQnl0ZSA9IDB4MjA7CisJCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NTAsIDB4ZmYsIExvd0J5dGUsIEhpZ2hCeXRlKTsKKwkJCWJyZWFrOworCQljYXNlIExFRF9IQUxUOgorCQkJTG93Qnl0ZSA9IDA7IC8vIERyaXZlciBzZXRzIE1BQyByZWdpc3RlciBhbmQgTUFDIGNvbnRyb2xzIExFRAorCQljYXNlIExFRF9SQURJT19PRkY6CisJCQlIaWdoQnl0ZSA9IDA7CisJCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NTAsIDB4ZmYsIExvd0J5dGUsIEhpZ2hCeXRlKTsKKwkJCWJyZWFrOworICAgICAgICBjYXNlIExFRF9XUFM6CisJCQlIaWdoQnl0ZSA9IDB4MTA7CisJCQlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NTAsIDB4ZmYsIExvd0J5dGUsIEhpZ2hCeXRlKTsKKwkJCWJyZWFrOworCQljYXNlIExFRF9PTl9TSVRFX1NVUlZFWToKKwkJCUhpZ2hCeXRlID0gMHgwODsKKwkJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MCwgMHhmZiwgTG93Qnl0ZSwgSGlnaEJ5dGUpOworCQkJYnJlYWs7CisJCWNhc2UgTEVEX1BPV0VSX1VQOgorCQkJSGlnaEJ5dGUgPSAweDA0OworCQkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDUwLCAweGZmLCBMb3dCeXRlLCBIaWdoQnl0ZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUlRNUFNldExFRDo6VW5rbm93biBTdGF0dXMgJWRcbiIsIFN0YXR1cykpOworCQkJYnJlYWs7CisJfQorCisgICAgLy8KKwkvLyBLZWVwIExFRCBzdGF0dXMgZm9yIExFRCBTaXRlU3VydmV5IG1vZGUuCisJLy8gQWZ0ZXIgU2l0ZVN1cnZleSwgd2Ugd2lsbCBzZXQgdGhlIExFRCBtb2RlIHRvIHByZXZpb3VzIHN0YXR1cy4KKwkvLworCWlmICgoU3RhdHVzICE9IExFRF9PTl9TSVRFX1NVUlZFWSkgJiYgKFN0YXR1cyAhPSBMRURfUE9XRVJfVVApKQorCQlwQWQtPkxlZFN0YXR1cyA9IFN0YXR1czsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBTZXRMRUQ6Ok1vZGU9JWQsSGlnaEJ5dGU9MHglMDJ4LExvd0J5dGU9MHglMDJ4XG4iLCBwQWQtPkxlZENudGwuZmllbGQuTGVkTW9kZSwgSGlnaEJ5dGUsIExvd0J5dGUpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVNldCBMRUQgU2lnbmFsIFN0cmVndGgKKworCUFyZ3VtZW50czoKKwkJcEFkCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlEYm0JCQkJCQlTaWduYWwgU3RyZWd0aAorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJTm90ZToKKwkJQ2FuIGJlIHJ1biBvbiBhbnkgSVJRTCBsZXZlbC4KKworCQlBY2NvcmRpbmcgdG8gTWljcm9zb2Z0IFplcm8gQ29uZmlnIFdpcmVsZXNzIFNpZ25hbCBTdHJlZ3RoIGRlZmluaXRpb24gYXMgYmVsb3dzLgorCQk8PSAtOTAgIE5vIFNpZ25hbAorCQk8PSAtODEgIFZlcnkgTG93CisJCTw9IC03MSAgTG93CisJCTw9IC02NyAgR29vZAorCQk8PSAtNTcgIFZlcnkgR29vZAorCQkgPiAtNTcgIEV4Y2VsbGVudAorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUFNldFNpZ25hbExFRCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQsCisJSU4gTkRJU184MDJfMTFfUlNTSSBEYm0pCit7CisJVUNIQVIJCW5MZWQgPSAwOworCisJLy8KKwkvLyBpZiBub3QgU2lnbmFsIFN0cmVndGgsIHRoZW4gZG8gbm90aGluZy4KKwkvLworCWlmIChwQWQtPkxlZENudGwuZmllbGQuTGVkTW9kZSAhPSBMRURfTU9ERV9TSUdOQUxfU1RSRUdUSCkKKwl7CisJCXJldHVybjsKKwl9CisKKwlpZiAoRGJtIDw9IC05MCkKKwkJbkxlZCA9IDA7CisJZWxzZSBpZiAoRGJtIDw9IC04MSkKKwkJbkxlZCA9IDE7CisJZWxzZSBpZiAoRGJtIDw9IC03MSkKKwkJbkxlZCA9IDM7CisJZWxzZSBpZiAoRGJtIDw9IC02NykKKwkJbkxlZCA9IDc7CisJZWxzZSBpZiAoRGJtIDw9IC01NykKKwkJbkxlZCA9IDE1OworCWVsc2UKKwkJbkxlZCA9IDMxOworCisJLy8KKwkvLyBVcGRhdGUgU2lnbmFsIFN0cmVndGggdG8gZmlybXdhcmUgaWYgY2hhbmdlZC4KKwkvLworCWlmIChwQWQtPkxlZEluZGljYXRvclN0cmVndGggIT0gbkxlZCkKKwl7CisJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg1MSwgMHhmZiwgbkxlZCwgcEFkLT5MZWRDbnRsLmZpZWxkLlBvbGFyaXR5KTsKKwkJcEFkLT5MZWRJbmRpY2F0b3JTdHJlZ3RoID0gbkxlZDsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlFbmFibGUgUlgKKworCUFyZ3VtZW50czoKKwkJcEFkCQkJCQkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMIDw9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCQlCZWZvcmUgRW5hYmxlIFJYLCBtYWtlIHN1cmUgeW91IGhhdmUgZW5hYmxlZCBJbnRlcnJ1cHQuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QRW5hYmxlUnhUeCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCkKK3sKKy8vCVdQRE1BX0dMT19DRkdfU1RSVUMJR2xvQ2ZnOworLy8JVUxPTkcJaSA9IDA7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gUlRNUEVuYWJsZVJ4VHhcbiIpKTsKKworCS8vIEVuYWJsZSBSeCBETUEuCisJUlQyOFhYRE1BRW5hYmxlKHBBZCk7CisKKwkvLyBlbmFibGUgUlggb2YgTUFDIGJsb2NrCisJaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9BUCkKKwl7CisJCVVJTlQzMiByeF9maWx0ZXJfZmxhZyA9IEFQTk9STUFMOworCisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfRklMVFJfQ0ZHLCByeF9maWx0ZXJfZmxhZyk7ICAgICAvLyBlbmFibGUgUlggb2YgRE1BIGJsb2NrCisJfQorCWVsc2UKKwl7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX0ZJTFRSX0NGRywgU1RBTk9STUFMKTsgICAgIC8vIFN0YWlvbiBub3QgZHJvcCBjb250cm9sIGZyYW1lIHdpbGwgZmFpbCBXaUZpIENlcnRpZmljYXRpb24uCisJfQorCisJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCAweGMpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBSVE1QRW5hYmxlUnhUeFxuIikpOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0bXBfdGtpcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnRtcF90a2lwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4OTg2ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0bXBfdGtpcC5jCkBAIC0wLDAgKzEsMTYxMyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlydG1wX3RraXAuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVBhdWwgV3UJCTAyLTI1LTAyCQlJbml0aWFsCisqLworCisjaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCisKKy8vIFJvdGF0aW9uIGZ1bmN0aW9ucyBvbiAzMiBiaXQgdmFsdWVzCisjZGVmaW5lIFJPTDMyKCBBLCBuICkgXAorCSggKChBKSA8PCAobikpIHwgKCAoKEEpPj4oMzItKG4pKSkgJiAoICgxVUwgPDwgKG4pKSAtIDEgKSApICkKKyNkZWZpbmUgUk9SMzIoIEEsIG4gKSBST0wzMiggKEEpLCAzMi0obikgKQorCitVSU5UIFRraXBfU2JveF9Mb3dlclsyNTZdID0KK3sKKwkweEE1LDB4ODQsMHg5OSwweDhELDB4MEQsMHhCRCwweEIxLDB4NTQsCisJMHg1MCwweDAzLDB4QTksMHg3RCwweDE5LDB4NjIsMHhFNiwweDlBLAorCTB4NDUsMHg5RCwweDQwLDB4ODcsMHgxNSwweEVCLDB4QzksMHgwQiwKKwkweEVDLDB4NjcsMHhGRCwweEVBLDB4QkYsMHhGNywweDk2LDB4NUIsCisJMHhDMiwweDFDLDB4QUUsMHg2QSwweDVBLDB4NDEsMHgwMiwweDRGLAorCTB4NUMsMHhGNCwweDM0LDB4MDgsMHg5MywweDczLDB4NTMsMHgzRiwKKwkweDBDLDB4NTIsMHg2NSwweDVFLDB4MjgsMHhBMSwweDBGLDB4QjUsCisJMHgwOSwweDM2LDB4OUIsMHgzRCwweDI2LDB4NjksMHhDRCwweDlGLAorCTB4MUIsMHg5RSwweDc0LDB4MkUsMHgyRCwweEIyLDB4RUUsMHhGQiwKKwkweEY2LDB4NEQsMHg2MSwweENFLDB4N0IsMHgzRSwweDcxLDB4OTcsCisJMHhGNSwweDY4LDB4MDAsMHgyQywweDYwLDB4MUYsMHhDOCwweEVELAorCTB4QkUsMHg0NiwweEQ5LDB4NEIsMHhERSwweEQ0LDB4RTgsMHg0QSwKKwkweDZCLDB4MkEsMHhFNSwweDE2LDB4QzUsMHhENywweDU1LDB4OTQsCisJMHhDRiwweDEwLDB4MDYsMHg4MSwweEYwLDB4NDQsMHhCQSwweEUzLAorCTB4RjMsMHhGRSwweEMwLDB4OEEsMHhBRCwweEJDLDB4NDgsMHgwNCwKKwkweERGLDB4QzEsMHg3NSwweDYzLDB4MzAsMHgxQSwweDBFLDB4NkQsCisJMHg0QywweDE0LDB4MzUsMHgyRiwweEUxLDB4QTIsMHhDQywweDM5LAorCTB4NTcsMHhGMiwweDgyLDB4NDcsMHhBQywweEU3LDB4MkIsMHg5NSwKKwkweEEwLDB4OTgsMHhEMSwweDdGLDB4NjYsMHg3RSwweEFCLDB4ODMsCisJMHhDQSwweDI5LDB4RDMsMHgzQywweDc5LDB4RTIsMHgxRCwweDc2LAorCTB4M0IsMHg1NiwweDRFLDB4MUUsMHhEQiwweDBBLDB4NkMsMHhFNCwKKwkweDVELDB4NkUsMHhFRiwweEE2LDB4QTgsMHhBNCwweDM3LDB4OEIsCisJMHgzMiwweDQzLDB4NTksMHhCNywweDhDLDB4NjQsMHhEMiwweEUwLAorCTB4QjQsMHhGQSwweDA3LDB4MjUsMHhBRiwweDhFLDB4RTksMHgxOCwKKwkweEQ1LDB4ODgsMHg2RiwweDcyLDB4MjQsMHhGMSwweEM3LDB4NTEsCisJMHgyMywweDdDLDB4OUMsMHgyMSwweERELDB4REMsMHg4NiwweDg1LAorCTB4OTAsMHg0MiwweEM0LDB4QUEsMHhEOCwweDA1LDB4MDEsMHgxMiwKKwkweEEzLDB4NUYsMHhGOSwweEQwLDB4OTEsMHg1OCwweDI3LDB4QjksCisJMHgzOCwweDEzLDB4QjMsMHgzMywweEJCLDB4NzAsMHg4OSwweEE3LAorCTB4QjYsMHgyMiwweDkyLDB4MjAsMHg0OSwweEZGLDB4NzgsMHg3QSwKKwkweDhGLDB4RjgsMHg4MCwweDE3LDB4REEsMHgzMSwweEM2LDB4QjgsCisJMHhDMywweEIwLDB4NzcsMHgxMSwweENCLDB4RkMsMHhENiwweDNBCit9OworCitVSU5UIFRraXBfU2JveF9VcHBlclsyNTZdID0KK3sKKwkweEM2LDB4RjgsMHhFRSwweEY2LDB4RkYsMHhENiwweERFLDB4OTEsCisJMHg2MCwweDAyLDB4Q0UsMHg1NiwweEU3LDB4QjUsMHg0RCwweEVDLAorCTB4OEYsMHgxRiwweDg5LDB4RkEsMHhFRiwweEIyLDB4OEUsMHhGQiwKKwkweDQxLDB4QjMsMHg1RiwweDQ1LDB4MjMsMHg1MywweEU0LDB4OUIsCisJMHg3NSwweEUxLDB4M0QsMHg0QywweDZDLDB4N0UsMHhGNSwweDgzLAorCTB4NjgsMHg1MSwweEQxLDB4RjksMHhFMiwweEFCLDB4NjIsMHgyQSwKKwkweDA4LDB4OTUsMHg0NiwweDlELDB4MzAsMHgzNywweDBBLDB4MkYsCisJMHgwRSwweDI0LDB4MUIsMHhERiwweENELDB4NEUsMHg3RiwweEVBLAorCTB4MTIsMHgxRCwweDU4LDB4MzQsMHgzNiwweERDLDB4QjQsMHg1QiwKKwkweEE0LDB4NzYsMHhCNywweDdELDB4NTIsMHhERCwweDVFLDB4MTMsCisJMHhBNiwweEI5LDB4MDAsMHhDMSwweDQwLDB4RTMsMHg3OSwweEI2LAorCTB4RDQsMHg4RCwweDY3LDB4NzIsMHg5NCwweDk4LDB4QjAsMHg4NSwKKwkweEJCLDB4QzUsMHg0RiwweEVELDB4ODYsMHg5QSwweDY2LDB4MTEsCisJMHg4QSwweEU5LDB4MDQsMHhGRSwweEEwLDB4NzgsMHgyNSwweDRCLAorCTB4QTIsMHg1RCwweDgwLDB4MDUsMHgzRiwweDIxLDB4NzAsMHhGMSwKKwkweDYzLDB4NzcsMHhBRiwweDQyLDB4MjAsMHhFNSwweEZELDB4QkYsCisJMHg4MSwweDE4LDB4MjYsMHhDMywweEJFLDB4MzUsMHg4OCwweDJFLAorCTB4OTMsMHg1NSwweEZDLDB4N0EsMHhDOCwweEJBLDB4MzIsMHhFNiwKKwkweEMwLDB4MTksMHg5RSwweEEzLDB4NDQsMHg1NCwweDNCLDB4MEIsCisJMHg4QywweEM3LDB4NkIsMHgyOCwweEE3LDB4QkMsMHgxNiwweEFELAorCTB4REIsMHg2NCwweDc0LDB4MTQsMHg5MiwweDBDLDB4NDgsMHhCOCwKKwkweDlGLDB4QkQsMHg0MywweEM0LDB4MzksMHgzMSwweEQzLDB4RjIsCisJMHhENSwweDhCLDB4NkUsMHhEQSwweDAxLDB4QjEsMHg5QywweDQ5LAorCTB4RDgsMHhBQywweEYzLDB4Q0YsMHhDQSwweEY0LDB4NDcsMHgxMCwKKwkweDZGLDB4RjAsMHg0QSwweDVDLDB4MzgsMHg1NywweDczLDB4OTcsCisJMHhDQiwweEExLDB4RTgsMHgzRSwweDk2LDB4NjEsMHgwRCwweDBGLAorCTB4RTAsMHg3QywweDcxLDB4Q0MsMHg5MCwweDA2LDB4RjcsMHgxQywKKwkweEMyLDB4NkEsMHhBRSwweDY5LDB4MTcsMHg5OSwweDNBLDB4MjcsCisJMHhEOSwweEVCLDB4MkIsMHgyMiwweEQyLDB4QTksMHgwNywweDMzLAorCTB4MkQsMHgzQywweDE1LDB4QzksMHg4NywweEFBLDB4NTAsMHhBNSwKKwkweDAzLDB4NTksMHgwOSwweDFBLDB4NjUsMHhENywweDg0LDB4RDAsCisJMHg4MiwweDI5LDB4NUEsMHgxRSwweDdCLDB4QTgsMHg2RCwweDJDCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKiogU0JPWCBUYWJsZSAqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK1VDSEFSIFNib3hUYWJsZVsyNTZdID0KK3sKKwkweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1LAorCTB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYsCisJMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMCwKKwkweGFkLCAweGQ0LCAweGEyLCAweGFmLCAweDljLCAweGE0LCAweDcyLCAweGMwLAorCTB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MsCisJMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSwKKwkweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhLAorCTB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUsCisJMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMCwKKwkweDUyLCAweDNiLCAweGQ2LCAweGIzLCAweDI5LCAweGUzLCAweDJmLCAweDg0LAorCTB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIsCisJMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZiwKKwkweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1LAorCTB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgsCisJMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNSwKKwkweGJjLCAweGI2LCAweGRhLCAweDIxLCAweDEwLCAweGZmLCAweGYzLCAweGQyLAorCTB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcsCisJMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3MywKKwkweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4LAorCTB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIsCisJMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1YywKKwkweGMyLCAweGQzLCAweGFjLCAweDYyLCAweDkxLCAweDk1LCAweGU0LCAweDc5LAorCTB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTksCisJMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCwKKwkweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2LAorCTB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEsCisJMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZSwKKwkweDYxLCAweDM1LCAweDU3LCAweGI5LCAweDg2LCAweGMxLCAweDFkLCAweDllLAorCTB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQsCisJMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZiwKKwkweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4LAorCTB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYKK307CisKK1ZPSUQgeG9yXzMyKAorCUlOICBQVUNIQVIgICAgICAgICAgICAgIGEsCisJSU4gIFBVQ0hBUiAgICAgICAgICAgICAgYiwKKwlPVVQgUFVDSEFSICAgICAgICAgICAgICBvdXQpOworCitWT0lEIHhvcl8xMjgoCisJSU4gIFBVQ0hBUiAgICAgICAgICAgICAgYSwKKwlJTiAgUFVDSEFSICAgICAgICAgICAgICBiLAorCU9VVCBQVUNIQVIgICAgICAgICAgICAgIG91dCk7CisKK1ZPSUQgbmV4dF9rZXkoCisJSU4gIFBVQ0hBUiAgICAgICAgICAgICAga2V5LAorCUlOICBJTlQgICAgICAgICAgICAgICAgIHJvdW5kKTsKKworVk9JRCBieXRlX3N1YigKKwlJTiAgUFVDSEFSICAgICAgICAgICAgICBpbiwKKwlPVVQgUFVDSEFSICAgICAgICAgICAgICBvdXQpOworCitWT0lEIHNoaWZ0X3JvdygKKwlJTiAgUFVDSEFSICAgICAgICAgICAgICBpbiwKKwlPVVQgUFVDSEFSICAgICAgICAgICAgICBvdXQpOworCitWT0lEIG1peF9jb2x1bW4oCisJSU4gIFBVQ0hBUiAgICAgICAgICAgICAgaW4sCisJT1VUIFBVQ0hBUiAgICAgICAgICAgICAgb3V0KTsKKworVUNIQVIgUlRNUENraXBTYm94KAorCUlOICBVQ0hBUiAgICAgICAgICAgICAgIGEpOworLy8KKy8vIEV4cGFuZGVkIElWIGZvciBUS0lQIGZ1bmN0aW9uLgorLy8KK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCBfSVZfQ09OVFJPTF8KK3sKKwl1bmlvbiBQQUNLRUQKKwl7CisJCXN0cnVjdCBQQUNLRUQKKwkJeworCQkJVUNIQVIJCXJjMDsKKwkJCVVDSEFSCQlyYzE7CisJCQlVQ0hBUgkJcmMyOworCisJCQl1bmlvbiBQQUNLRUQKKwkJCXsKKwkJCQlzdHJ1Y3QgUEFDS0VECisJCQkJeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJCQkJVUNIQVIJS2V5SUQ6MjsKKwkJCQkJVUNIQVIJRXh0SVY6MTsKKwkJCQkJVUNIQVIJUnN2ZDo1OworI2Vsc2UKKwkJCQkJVUNIQVIJUnN2ZDo1OworCQkJCQlVQ0hBUglFeHRJVjoxOworCQkJCQlVQ0hBUglLZXlJRDoyOworI2VuZGlmCisJCQkJfQlmaWVsZDsKKwkJCQlVQ0hBUgkJQnl0ZTsKKwkJCX0JQ09OVFJPTDsKKwkJfQlmaWVsZDsKKworCQlVTE9ORwl3b3JkOworCX0JSVYxNjsKKworCVVMT05HCUlWMzI7Cit9CVRLSVBfSVYsICpQVEtJUF9JVjsKKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJQ29udmVydCBmcm9tIFVDSEFSW10gdG8gVUxPTkcgaW4gYSBwb3J0YWJsZSB3YXkKKworCUFyZ3VtZW50czoKKyAgICAgIHBNSUNLZXkJCXBvaW50ZXIgdG8gTUlDIEtleQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVUxPTkcJUlRNUFRraXBHZXRVSW50MzIoCisJSU4JUFVDSEFSCXBNSUNLZXkpCit7CisJVUxPTkcJcmVzID0gMDsKKwlJTlQJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCXsKKwkJcmVzIHw9ICgqcE1JQ0tleSsrKSA8PCAoOCAqIGkpOworCX0KKworCXJldHVybiByZXM7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlDb252ZXJ0IGZyb20gVUxPTkcgdG8gVUNIQVJbXSBpbiBhIHBvcnRhYmxlIHdheQorCisJQXJndW1lbnRzOgorICAgICAgcERzdAkJCXBvaW50ZXIgdG8gZGVzdGluYXRpb24gZm9yIGNvbnZlcnQgVUxPTkcgdG8gVUNIQVJbXQorICAgICAgdmFsCQkJdGhlIHZhbHVlIGZvciBjb252ZXJ0CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUFRraXBQdXRVSW50MzIoCisJSU4gT1VUCVBVQ0hBUgkJcERzdCwKKwlJTgkJVUxPTkcJCXZhbCkKK3sKKwlJTlQgaTsKKworCWZvcihpID0gMDsgaSA8IDQ7IGkrKykKKwl7CisJCSpwRHN0KysgPSAoVUNIQVIpICh2YWwgJiAweGZmKTsKKwkJdmFsID4+PSA4OworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCVNldCB0aGUgTUlDIEtleS4KKworCUFyZ3VtZW50czoKKyAgICAgIHBBZAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorICAgICAgcE1JQ0tleQkJcG9pbnRlciB0byBNSUMgS2V5CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUFRraXBTZXRNSUNLZXkoCisJSU4JUFRLSVBfS0VZX0lORk8JcFRraXAsCisJSU4JUFVDSEFSCQkJcE1JQ0tleSkKK3sKKwkvLyBTZXQgdGhlIGtleQorCXBUa2lwLT5LMCA9IFJUTVBUa2lwR2V0VUludDMyKHBNSUNLZXkpOworCXBUa2lwLT5LMSA9IFJUTVBUa2lwR2V0VUludDMyKHBNSUNLZXkgKyA0KTsKKwkvLyBhbmQgcmVzZXQgdGhlIG1lc3NhZ2UKKwlwVGtpcC0+TCA9IHBUa2lwLT5LMDsKKwlwVGtpcC0+UiA9IHBUa2lwLT5LMTsKKwlwVGtpcC0+bkJ5dGVzSW5NID0gMDsKKwlwVGtpcC0+TSA9IDA7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlDYWxjdWxhdGUgdGhlIE1JQyBWYWx1ZS4KKworCUFyZ3VtZW50czoKKyAgICAgIHBBZAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorICAgICAgdUNoYXIJCQlBcHBlbmQgdGhpcyB1Q2hhcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBUa2lwQXBwZW5kQnl0ZSgKKwlJTglQVEtJUF9LRVlfSU5GTwlwVGtpcCwKKwlJTglVQ0hBUiAJCQl1Q2hhcikKK3sKKwkvLyBBcHBlbmQgdGhlIGJ5dGUgdG8gb3VyIHdvcmQtc2l6ZWQgYnVmZmVyCisJcFRraXAtPk0gfD0gKHVDaGFyIDw8ICg4KiBwVGtpcC0+bkJ5dGVzSW5NKSk7CisJcFRraXAtPm5CeXRlc0luTSsrOworCS8vIFByb2Nlc3MgdGhlIHdvcmQgaWYgaXQgaXMgZnVsbC4KKwlpZiggcFRraXAtPm5CeXRlc0luTSA+PSA0ICkKKwl7CisJCXBUa2lwLT5MIF49IHBUa2lwLT5NOworCQlwVGtpcC0+UiBePSBST0wzMiggcFRraXAtPkwsIDE3ICk7CisJCXBUa2lwLT5MICs9IHBUa2lwLT5SOworCQlwVGtpcC0+UiBePSAoKHBUa2lwLT5MICYgMHhmZjAwZmYwMCkgPj4gOCkgfCAoKHBUa2lwLT5MICYgMHgwMGZmMDBmZikgPDwgOCk7CisJCXBUa2lwLT5MICs9IHBUa2lwLT5SOworCQlwVGtpcC0+UiBePSBST0wzMiggcFRraXAtPkwsIDMgKTsKKwkJcFRraXAtPkwgKz0gcFRraXAtPlI7CisJCXBUa2lwLT5SIF49IFJPUjMyKCBwVGtpcC0+TCwgMiApOworCQlwVGtpcC0+TCArPSBwVGtpcC0+UjsKKwkJLy8gQ2xlYXIgdGhlIGJ1ZmZlcgorCQlwVGtpcC0+TSA9IDA7CisJCXBUa2lwLT5uQnl0ZXNJbk0gPSAwOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNhbGN1bGF0ZSB0aGUgTUlDIFZhbHVlLgorCisJQXJndW1lbnRzOgorICAgICAgcEFkCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgICBwU3JjCQkJUG9pbnRlciB0byBzb3VyY2UgZGF0YSBmb3IgQ2FsY3VsYXRlIE1JQyBWYWx1ZQorICAgICAgTGVuCQkJSW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGRhdGEKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QVGtpcEFwcGVuZCgKKwlJTglQVEtJUF9LRVlfSU5GTwlwVGtpcCwKKwlJTglQVUNIQVIJCQlwU3JjLAorCUlOCVVJTlQJCQluQnl0ZXMpCit7CisJLy8gVGhpcyBpcyBzaW1wbGUKKwl3aGlsZShuQnl0ZXMgPiAwKQorCXsKKwkJUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAqcFNyYysrKTsKKwkJbkJ5dGVzLS07CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJR2V0IHRoZSBNSUMgVmFsdWUuCisKKwlBcmd1bWVudHM6CisgICAgICBwQWQJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCQl0aGUgTUlDIFZhbHVlIGlzIHN0b3JlIGluIHBBZC0+UHJpdmF0ZUluZm8uTUlDCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QVGtpcEdldE1JQygKKwlJTglQVEtJUF9LRVlfSU5GTwlwVGtpcCkKK3sKKwkvLyBBcHBlbmQgdGhlIG1pbmltdW0gcGFkZGluZworCVJUTVBUa2lwQXBwZW5kQnl0ZShwVGtpcCwgMHg1YSApOworCVJUTVBUa2lwQXBwZW5kQnl0ZShwVGtpcCwgMCApOworCVJUTVBUa2lwQXBwZW5kQnl0ZShwVGtpcCwgMCApOworCVJUTVBUa2lwQXBwZW5kQnl0ZShwVGtpcCwgMCApOworCVJUTVBUa2lwQXBwZW5kQnl0ZShwVGtpcCwgMCApOworCS8vIGFuZCB0aGVuIHplcm9lcyB1bnRpbCB0aGUgbGVuZ3RoIGlzIGEgbXVsdGlwbGUgb2YgNAorCXdoaWxlKCBwVGtpcC0+bkJ5dGVzSW5NICE9IDAgKQorCXsKKwkJUlRNUFRraXBBcHBlbmRCeXRlKHBUa2lwLCAwICk7CisJfQorCS8vIFRoZSBhcHBlbmRCeXRlIGZ1bmN0aW9uIGhhcyBhbHJlYWR5IGNvbXB1dGVkIHRoZSByZXN1bHQuCisJUlRNUFRraXBQdXRVSW50MzIocFRraXAtPk1JQywgcFRraXAtPkwpOworCVJUTVBUa2lwUHV0VUludDMyKHBUa2lwLT5NSUMgKyA0LCBwVGtpcC0+Uik7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlJbml0IFRraXAgZnVuY3Rpb24uCisKKwlBcmd1bWVudHM6CisgICAgICBwQWQJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcFRLZXkgICAgICAgUG9pbnRlciB0byB0aGUgVGVtcG9yYWwgS2V5IChUSyksIFRLIHNoYWxsIGJlIDEyOGJpdHMuCisJCUtleUlkCQlUSyBLZXkgSUQKKwkJcFRBCQkJUG9pbnRlciB0byB0cmFuc21pdHRlciBhZGRyZXNzCisJCXBNSUNLZXkJCXBvaW50ZXIgdG8gTUlDIEtleQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBJbml0VGtpcEVuZ2luZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwS2V5LAorCUlOCVVDSEFSCQkJS2V5SWQsCisJSU4JUFVDSEFSCQkJcFRBLAorCUlOCVBVQ0hBUgkJCXBNSUNLZXksCisJSU4JUFVDSEFSCQkJcFRTQywKKwlPVVQJUFVMT05HCQkJcElWMTYsCisJT1VUCVBVTE9ORwkJCXBJVjMyKQoreworCVRLSVBfSVYJdGtpcEl2OworCisJLy8gUHJlcGFyZSA4IGJ5dGVzIFRLSVAgZW5jYXBzdWxhdGlvbiBmb3IgTVBEVQorCU5kaXNaZXJvTWVtb3J5KCZ0a2lwSXYsIHNpemVvZihUS0lQX0lWKSk7CisJdGtpcEl2LklWMTYuZmllbGQucmMwID0gKihwVFNDICsgMSk7CisJdGtpcEl2LklWMTYuZmllbGQucmMxID0gKHRraXBJdi5JVjE2LmZpZWxkLnJjMCB8IDB4MjApICYgMHg3ZjsKKwl0a2lwSXYuSVYxNi5maWVsZC5yYzIgPSAqcFRTQzsKKwl0a2lwSXYuSVYxNi5maWVsZC5DT05UUk9MLmZpZWxkLkV4dElWID0gMTsgIC8vIDA6IG5vbi1leHRlbmRlZCBJViwgMTogYW4gZXh0ZW5kZWQgSVYKKwl0a2lwSXYuSVYxNi5maWVsZC5DT05UUk9MLmZpZWxkLktleUlEID0gS2V5SWQ7CisvLwl0a2lwSXYuSVYzMiA9ICooUFVMT05HKShwVFNDICsgMik7CisJTmRpc01vdmVNZW1vcnkoJnRraXBJdi5JVjMyLCAocFRTQyArIDIpLCA0KTsgICAvLyBDb3B5IElWCisKKwkqcElWMTYgPSB0a2lwSXYuSVYxNi53b3JkOworCSpwSVYzMiA9IHRraXBJdi5JVjMyOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJSW5pdCBNSUMgVmFsdWUgY2FsY3VsYXRpb24gZnVuY3Rpb24gd2hpY2ggaW5jbHVkZSBzZXQgTUlDIGtleSAmCisJCWNhbGN1bGF0ZSBmaXJzdCAxNiBieXRlcyAoREEgKyBTQSArIHByaW9yaXR5ICsgIDApCisKKwlBcmd1bWVudHM6CisgICAgICBwQWQJCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcFRLZXkgICAgICAgUG9pbnRlciB0byB0aGUgVGVtcG9yYWwgS2V5IChUSyksIFRLIHNoYWxsIGJlIDEyOGJpdHMuCisJCXBEQQkJCVBvaW50ZXIgdG8gREEgYWRkcmVzcworCQlwU0EJCQlQb2ludGVyIHRvIFNBIGFkZHJlc3MKKwkJcE1JQ0tleQkJcG9pbnRlciB0byBNSUMgS2V5CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBJbml0TUlDRW5naW5lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBLZXksCisJSU4JUFVDSEFSCQkJcERBLAorCUlOCVBVQ0hBUgkJCXBTQSwKKwlJTiAgVUNIQVIgICAgICAgICAgIFVzZXJQcmlvcml0eSwKKwlJTglQVUNIQVIJCQlwTUlDS2V5KQoreworCVVMT05HIFByaW9yaXR5ID0gVXNlclByaW9yaXR5OworCisJLy8gSW5pdCBNSUMgdmFsdWUgY2FsY3VsYXRpb24KKwlSVE1QVGtpcFNldE1JQ0tleSgmcEFkLT5Qcml2YXRlSW5mby5UeCwgcE1JQ0tleSk7CisJLy8gREEKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5UeCwgcERBLCBNQUNfQUREUl9MRU4pOworCS8vIFNBCisJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uVHgsIHBTQSwgTUFDX0FERFJfTEVOKTsKKwkvLyBQcmlvcml0eSArIDMgYnl0ZXMgb2YgMAorCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlR4LCAoUFVDSEFSKSZQcmlvcml0eSwgNCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlDb21wYXJlIE1JQyB2YWx1ZSBvZiByZWNlaXZlZCBNU0RVCisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBTcmMgICAgICAgIFBvaW50ZXIgdG8gdGhlIHJlY2VpdmVkIFBsYWluIHRleHQgZGF0YQorCQlwREEJCQlQb2ludGVyIHRvIERBIGFkZHJlc3MKKwkJcFNBCQkJUG9pbnRlciB0byBTQSBhZGRyZXNzCisJCXBNSUNLZXkJCXBvaW50ZXIgdG8gTUlDIEtleQorCQlMZW4gICAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSByZWNlaXZlZCBwbGFpbiB0ZXh0IGRhdGEgZXhjbHVkZSBNSUMgdmFsdWUKKworCVJldHVybiBWYWx1ZToKKwkJVFJVRSAgICAgICAgTUlDIHZhbHVlIG1hdGNoZWQKKwkJRkFMU0UgICAgICAgTUlDIHZhbHVlIG1pc21hdGNoZWQKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4JUlRNUFRraXBDb21wYXJlTUlDVmFsdWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcFNyYywKKwlJTglQVUNIQVIJCQlwREEsCisJSU4JUFVDSEFSCQkJcFNBLAorCUlOCVBVQ0hBUgkJCXBNSUNLZXksCisJSU4JVUNIQVIJCQlVc2VyUHJpb3JpdHksCisJSU4JVUlOVAkJCUxlbikKK3sKKwlVQ0hBUglPbGRNaWNbOF07CisJVUxPTkcJUHJpb3JpdHkgPSBVc2VyUHJpb3JpdHk7CisKKwkvLyBJbml0IE1JQyB2YWx1ZSBjYWxjdWxhdGlvbgorCVJUTVBUa2lwU2V0TUlDS2V5KCZwQWQtPlByaXZhdGVJbmZvLlJ4LCBwTUlDS2V5KTsKKwkvLyBEQQorCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlJ4LCBwREEsIE1BQ19BRERSX0xFTik7CisJLy8gU0EKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5SeCwgcFNBLCBNQUNfQUREUl9MRU4pOworCS8vIFByaW9yaXR5ICsgMyBieXRlcyBvZiAwCisJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uUngsIChQVUNIQVIpJlByaW9yaXR5LCA0KTsKKworCS8vIENhbGN1bGF0ZSBNSUMgdmFsdWUgZnJvbSBwbGFpbiB0ZXh0IGRhdGEKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5SeCwgcFNyYywgTGVuKTsKKworCS8vIEdldCBNSUMgdmFsdWRlIGZyb20gcmVjZWl2ZWQgZnJhbWUKKwlOZGlzTW92ZU1lbW9yeShPbGRNaWMsIHBTcmMgKyBMZW4sIDgpOworCisJLy8gR2V0IE1JQyB2YWx1ZSBmcm9tIGRlY3J5cHRlZCBwbGFpbiBkYXRhCisJUlRNUFRraXBHZXRNSUMoJnBBZC0+UHJpdmF0ZUluZm8uUngpOworCisJLy8gTW92ZSBNSUMgdmFsdWUgZnJvbSBNU0RVLCB0aGlzIHN0ZXBzIHNob3VsZCBtb3ZlIHRvIGRhdGEgcGF0aC4KKwkvLyBTaW5jZSB0aGUgTUlDIHZhbHVlIG1pZ2h0IGNyb3NzIE1QRFVzLgorCWlmKCFOZGlzRXF1YWxNZW1vcnkocEFkLT5Qcml2YXRlSW5mby5SeC5NSUMsIE9sZE1pYywgOCkpCisJeworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiUlRNUFRraXBDb21wYXJlTUlDVmFsdWUoKTogVEtJUCBNSUMgRXJyb3IgIVxuIikpOyAgLy9NSUMgZXJyb3IuCisKKworCQlyZXR1cm4gKEZBTFNFKTsKKwl9CisJcmV0dXJuIChUUlVFKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUNvbXBhcmUgTUlDIHZhbHVlIG9mIHJlY2VpdmVkIE1TRFUKKworCUFyZ3VtZW50czoKKwkJcEFkCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcExMQwkJTExDIGhlYWRlcgorCQlwU3JjICAgICAgICBQb2ludGVyIHRvIHRoZSByZWNlaXZlZCBQbGFpbiB0ZXh0IGRhdGEKKwkJcERBCQkJUG9pbnRlciB0byBEQSBhZGRyZXNzCisJCXBTQQkJCVBvaW50ZXIgdG8gU0EgYWRkcmVzcworCQlwTUlDS2V5CQlwb2ludGVyIHRvIE1JQyBLZXkKKwkJTGVuICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgcmVjZWl2ZWQgcGxhaW4gdGV4dCBkYXRhIGV4Y2x1ZGUgTUlDIHZhbHVlCisKKwlSZXR1cm4gVmFsdWU6CisJCVRSVUUgICAgICAgIE1JQyB2YWx1ZSBtYXRjaGVkCisJCUZBTFNFICAgICAgIE1JQyB2YWx1ZSBtaXNtYXRjaGVkCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitCT09MRUFOCVJUTVBUa2lwQ29tcGFyZU1JQ1ZhbHVlV2l0aExMQygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwTExDLAorCUlOCVBVQ0hBUgkJCXBTcmMsCisJSU4JUFVDSEFSCQkJcERBLAorCUlOCVBVQ0hBUgkJCXBTQSwKKwlJTglQVUNIQVIJCQlwTUlDS2V5LAorCUlOCVVJTlQJCQlMZW4pCit7CisJVUNIQVIJT2xkTWljWzhdOworCVVMT05HCVByaW9yaXR5ID0gMDsKKworCS8vIEluaXQgTUlDIHZhbHVlIGNhbGN1bGF0aW9uCisJUlRNUFRraXBTZXRNSUNLZXkoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBNSUNLZXkpOworCS8vIERBCisJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBEQSwgTUFDX0FERFJfTEVOKTsKKwkvLyBTQQorCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlJ4LCBwU0EsIE1BQ19BRERSX0xFTik7CisJLy8gUHJpb3JpdHkgKyAzIGJ5dGVzIG9mIDAKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5SeCwgKFBVQ0hBUikmUHJpb3JpdHksIDQpOworCisJLy8gU3RhcnQgd2l0aCBMTEMgaGVhZGVyCisJUlRNUFRraXBBcHBlbmQoJnBBZC0+UHJpdmF0ZUluZm8uUngsIHBMTEMsIDgpOworCisJLy8gQ2FsY3VsYXRlIE1JQyB2YWx1ZSBmcm9tIHBsYWluIHRleHQgZGF0YQorCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlJ4LCBwU3JjLCBMZW4pOworCisJLy8gR2V0IE1JQyB2YWx1ZGUgZnJvbSByZWNlaXZlZCBmcmFtZQorCU5kaXNNb3ZlTWVtb3J5KE9sZE1pYywgcFNyYyArIExlbiwgOCk7CisKKwkvLyBHZXQgTUlDIHZhbHVlIGZyb20gZGVjcnlwdGVkIHBsYWluIGRhdGEKKwlSVE1QVGtpcEdldE1JQygmcEFkLT5Qcml2YXRlSW5mby5SeCk7CisKKwkvLyBNb3ZlIE1JQyB2YWx1ZSBmcm9tIE1TRFUsIHRoaXMgc3RlcHMgc2hvdWxkIG1vdmUgdG8gZGF0YSBwYXRoLgorCS8vIFNpbmNlIHRoZSBNSUMgdmFsdWUgbWlnaHQgY3Jvc3MgTVBEVXMuCisJaWYoIU5kaXNFcXVhbE1lbW9yeShwQWQtPlByaXZhdGVJbmZvLlJ4Lk1JQywgT2xkTWljLCA4KSkKKwl7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJSVE1QVGtpcENvbXBhcmVNSUNWYWx1ZVdpdGhMTEMoKTogVEtJUCBNSUMgRXJyb3IgIVxuIikpOyAgLy9NSUMgZXJyb3IuCisKKworCQlyZXR1cm4gKEZBTFNFKTsKKwl9CisJcmV0dXJuIChUUlVFKTsKK30KKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlDb3B5IGZyYW1lIGZyb20gd2FpdGluZyBxdWV1ZSBpbnRvIHJlbGF0aXZlIHJpbmcgYnVmZmVyIGFuZCBzZXQKKwlhcHByb3ByaWF0ZSBBU0lDIHJlZ2lzdGVyIHRvIGtpY2sgaGFyZHdhcmUgdHJhbnNtaXQgZnVuY3Rpb24KKworCUFyZ3VtZW50czoKKwkJcEFkCQlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisJCVBORElTX1BBQ0tFVAlQb2ludGVyIHRvIE5kaXMgUGFja2V0IGZvciBNSUMgY2FsY3VsYXRpb24KKwkJcEVuY2FwCQkJUG9pbnRlciB0byBMTEMgZW5jYXAgZGF0YQorCQlMZW5FbmNhcAkJVG90YWwgZW5jYXAgbGVuZ3RoLCBtaWdodCBiZSAwIHdoaWNoIGluZGljYXRlcyBubyBlbmNhcAorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBDYWxjdWxhdGVNSUNWYWx1ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCwKKwlJTglQVUNIQVIJCQlwRW5jYXAsCisJSU4JUENJUEhFUl9LRVkJCXBLZXksCisJSU4JVUNIQVIJCQlhcGlkeCkKK3sKKwlQQUNLRVRfSU5GTwkJUGFja2V0SW5mbzsKKwlQVUNIQVIJCQlwU3JjQnVmVkE7CisJVUlOVAkJCVNyY0J1ZkxlbjsKKwlQVUNIQVIJCQlwU3JjOworICAgIFVDSEFSICAgICAgICAgICBVc2VyUHJpb3JpdHk7CisJVUNIQVIJCQl2bGFuX29mZnNldCA9IDA7CisKKwlSVE1QX1F1ZXJ5UGFja2V0SW5mbyhwUGFja2V0LCAmUGFja2V0SW5mbywgJnBTcmNCdWZWQSwgJlNyY0J1Zkxlbik7CisKKwlVc2VyUHJpb3JpdHkgPSBSVE1QX0dFVF9QQUNLRVRfVVAocFBhY2tldCk7CisJcFNyYyA9IHBTcmNCdWZWQTsKKworCS8vIGRldGVybWluZSBpZiB0aGlzIGlzIGEgdmxhbiBwYWNrZXQKKwlpZiAoKCgqKHBTcmMgKyAxMikgPDwgOCkgKyAqKHBTcmMgKyAxMykpID09IDB4ODEwMCkKKwkJdmxhbl9vZmZzZXQgPSA0OworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJeworCQlSVE1QSW5pdE1JQ0VuZ2luZSgKKwkJCXBBZCwKKwkJCXBLZXktPktleSwKKwkJCXBTcmMsCisJCQlwU3JjICsgNiwKKwkJCVVzZXJQcmlvcml0eSwKKwkJCXBLZXktPlR4TWljKTsKKwl9CisKKworCWlmIChwRW5jYXAgIT0gTlVMTCkKKwl7CisJCS8vIExMQyBlbmNhcHN1bGF0aW9uCisJCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlR4LCBwRW5jYXAsIDYpOworCQkvLyBQcm90b2NvbCBUeXBlCisJCVJUTVBUa2lwQXBwZW5kKCZwQWQtPlByaXZhdGVJbmZvLlR4LCBwU3JjICsgMTIgKyB2bGFuX29mZnNldCwgMik7CisJfQorCVNyY0J1ZkxlbiAtPSAoMTQgKyB2bGFuX29mZnNldCk7CisJcFNyYyArPSAoMTQgKyB2bGFuX29mZnNldCk7CisJZG8KKwl7CisJCWlmIChTcmNCdWZMZW4gPiAwKQorCQl7CisJCQlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5UeCwgcFNyYywgU3JjQnVmTGVuKTsKKwkJfQorCisJCWJyZWFrOwkvLyBObyBuZWVkIGhhbmRsZSBuZXh0IHBhY2tldAorCisJfQl3aGlsZSAoVFJVRSk7CQkvLyBFbmQgb2YgY29weWluZyBwYXlsb2FkCisKKwkvLyBDb21wdXRlIHRoZSBmaW5hbCBNSUMgVmFsdWUKKwlSVE1QVGtpcEdldE1JQygmcEFkLT5Qcml2YXRlSW5mby5UeCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHRraXBfc2JveCgpCQkJCQkJCQkJCQkJCQkJCSovCisvKiBSZXR1cm5zIGEgMTYgYml0IHZhbHVlIGZyb20gYSA2NEsgZW50cnkgdGFibGUuIFRoZSBUYWJsZSAqLworLyogaXMgc3ludGhlc2l6ZWQgZnJvbSB0d28gMjU2IGVudHJ5IGJ5dGUgd2lkZSB0YWJsZXMuCQkqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworVUlOVCB0a2lwX3Nib3goVUlOVCBpbmRleCkKK3sKKwlVSU5UIGluZGV4X2xvdzsKKwlVSU5UIGluZGV4X2hpZ2g7CisJVUlOVCBsZWZ0LCByaWdodDsKKworCWluZGV4X2xvdyA9IChpbmRleCAlIDI1Nik7CisJaW5kZXhfaGlnaCA9ICgoaW5kZXggPj4gOCkgJSAyNTYpOworCisJbGVmdCA9IFRraXBfU2JveF9Mb3dlcltpbmRleF9sb3ddICsgKFRraXBfU2JveF9VcHBlcltpbmRleF9sb3ddICogMjU2KTsKKwlyaWdodCA9IFRraXBfU2JveF9VcHBlcltpbmRleF9oaWdoXSArIChUa2lwX1Nib3hfTG93ZXJbaW5kZXhfaGlnaF0gKiAyNTYpOworCisJcmV0dXJuIChsZWZ0IF4gcmlnaHQpOworfQorCitVSU5UIHJvdHIxKFVJTlQgYSkKK3sKKwl1bnNpZ25lZCBpbnQgYjsKKworCWlmICgoYSAmIDB4MDEpID09IDB4MDEpCisJeworCQliID0gKGEgPj4gMSkgfCAweDgwMDA7CisJfQorCWVsc2UKKwl7CisJCWIgPSAoYSA+PiAxKSAmIDB4N2ZmZjsKKwl9CisJYiA9IGIgJSA2NTUzNjsKKwlyZXR1cm4gYjsKK30KKworVk9JRCBSVE1QVGtpcE1peEtleSgKKwlVQ0hBUiAqa2V5LAorCVVDSEFSICp0YSwKKwlVTE9ORyBwbmwsIC8qIExlYXN0IHNpZ25pZmljYW50IDE2IGJpdHMgb2YgUE4gKi8KKwlVTE9ORyBwbmgsIC8qIE1vc3Qgc2lnbmlmaWNhbnQgMzIgYml0cyBvZiBQTiAqLworCVVDSEFSICpyYzRrZXksCisJVUlOVCAqcDFrKQoreworCisJVUlOVCB0c2MwOworCVVJTlQgdHNjMTsKKwlVSU5UIHRzYzI7CisKKwlVSU5UIHBwazA7CisJVUlOVCBwcGsxOworCVVJTlQgcHBrMjsKKwlVSU5UIHBwazM7CisJVUlOVCBwcGs0OworCVVJTlQgcHBrNTsKKworCUlOVCBpOworCUlOVCBqOworCisJdHNjMCA9ICh1bnNpZ25lZCBpbnQpKChwbmggPj4gMTYpICUgNjU1MzYpOyAvKiBtc2IgKi8KKwl0c2MxID0gKHVuc2lnbmVkIGludCkocG5oICUgNjU1MzYpOworCXRzYzIgPSAodW5zaWduZWQgaW50KShwbmwgJSA2NTUzNik7IC8qIGxzYiAqLworCisJLyogUGhhc2UgMSwgc3RlcCAxICovCisJcDFrWzBdID0gdHNjMTsKKwlwMWtbMV0gPSB0c2MwOworCXAxa1syXSA9IChVSU5UKSh0YVswXSArICh0YVsxXSoyNTYpKTsKKwlwMWtbM10gPSAoVUlOVCkodGFbMl0gKyAodGFbM10qMjU2KSk7CisJcDFrWzRdID0gKFVJTlQpKHRhWzRdICsgKHRhWzVdKjI1NikpOworCisJLyogUGhhc2UgMSwgc3RlcCAyICovCisJZm9yIChpPTA7IGk8ODsgaSsrKQorCXsKKwkJaiA9IDIqKGkgJiAxKTsKKwkJcDFrWzBdID0gKHAxa1swXSArIHRraXBfc2JveCggKHAxa1s0XSBeICgoMjU2KmtleVsxK2pdKSArIGtleVtqXSkpICUgNjU1MzYgKSkgJSA2NTUzNjsKKwkJcDFrWzFdID0gKHAxa1sxXSArIHRraXBfc2JveCggKHAxa1swXSBeICgoMjU2KmtleVs1K2pdKSArIGtleVs0K2pdKSkgJSA2NTUzNiApKSAlIDY1NTM2OworCQlwMWtbMl0gPSAocDFrWzJdICsgdGtpcF9zYm94KCAocDFrWzFdIF4gKCgyNTYqa2V5Wzkral0pICsga2V5Wzgral0pKSAlIDY1NTM2ICkpICUgNjU1MzY7CisJCXAxa1szXSA9IChwMWtbM10gKyB0a2lwX3Nib3goIChwMWtbMl0gXiAoKDI1NiprZXlbMTMral0pICsga2V5WzEyK2pdKSkgJSA2NTUzNiApKSAlIDY1NTM2OworCQlwMWtbNF0gPSAocDFrWzRdICsgdGtpcF9zYm94KCAocDFrWzNdIF4gKCgoMjU2KmtleVsxK2pdKSArIGtleVtqXSkpKSAlIDY1NTM2ICkpICUgNjU1MzY7CisJCXAxa1s0XSA9IChwMWtbNF0gKyBpKSAlIDY1NTM2OworCX0KKworCS8qIFBoYXNlIDIsIFN0ZXAgMSAqLworCXBwazAgPSBwMWtbMF07CisJcHBrMSA9IHAxa1sxXTsKKwlwcGsyID0gcDFrWzJdOworCXBwazMgPSBwMWtbM107CisJcHBrNCA9IHAxa1s0XTsKKwlwcGs1ID0gKHAxa1s0XSArIHRzYzIpICUgNjU1MzY7CisKKwkvKiBQaGFzZTIsIFN0ZXAgMiAqLworCXBwazAgPSBwcGswICsgdGtpcF9zYm94KCAocHBrNSBeICgoMjU2KmtleVsxXSkgKyBrZXlbMF0pKSAlIDY1NTM2KTsKKwlwcGsxID0gcHBrMSArIHRraXBfc2JveCggKHBwazAgXiAoKDI1NiprZXlbM10pICsga2V5WzJdKSkgJSA2NTUzNik7CisJcHBrMiA9IHBwazIgKyB0a2lwX3Nib3goIChwcGsxIF4gKCgyNTYqa2V5WzVdKSArIGtleVs0XSkpICUgNjU1MzYpOworCXBwazMgPSBwcGszICsgdGtpcF9zYm94KCAocHBrMiBeICgoMjU2KmtleVs3XSkgKyBrZXlbNl0pKSAlIDY1NTM2KTsKKwlwcGs0ID0gcHBrNCArIHRraXBfc2JveCggKHBwazMgXiAoKDI1NiprZXlbOV0pICsga2V5WzhdKSkgJSA2NTUzNik7CisJcHBrNSA9IHBwazUgKyB0a2lwX3Nib3goIChwcGs0IF4gKCgyNTYqa2V5WzExXSkgKyBrZXlbMTBdKSkgJSA2NTUzNik7CisKKwlwcGswID0gcHBrMCArIHJvdHIxKHBwazUgXiAoKDI1NiprZXlbMTNdKSArIGtleVsxMl0pKTsKKwlwcGsxID0gcHBrMSArIHJvdHIxKHBwazAgXiAoKDI1NiprZXlbMTVdKSArIGtleVsxNF0pKTsKKwlwcGsyID0gcHBrMiArIHJvdHIxKHBwazEpOworCXBwazMgPSBwcGszICsgcm90cjEocHBrMik7CisJcHBrNCA9IHBwazQgKyByb3RyMShwcGszKTsKKwlwcGs1ID0gcHBrNSArIHJvdHIxKHBwazQpOworCisJLyogUGhhc2UgMiwgU3RlcCAzICovCisgICAgLyogUGhhc2UgMiwgU3RlcCAzICovCisKKwl0c2MwID0gKHVuc2lnbmVkIGludCkoKHBuaCA+PiAxNikgJSA2NTUzNik7IC8qIG1zYiAqLworCXRzYzEgPSAodW5zaWduZWQgaW50KShwbmggJSA2NTUzNik7CisJdHNjMiA9ICh1bnNpZ25lZCBpbnQpKHBubCAlIDY1NTM2KTsgLyogbHNiICovCisKKwlyYzRrZXlbMF0gPSAodHNjMiA+PiA4KSAlIDI1NjsKKwlyYzRrZXlbMV0gPSAoKCh0c2MyID4+IDgpICUgMjU2KSB8IDB4MjApICYgMHg3ZjsKKwlyYzRrZXlbMl0gPSB0c2MyICUgMjU2OworCXJjNGtleVszXSA9ICgocHBrNSBeICgoMjU2KmtleVsxXSkgKyBrZXlbMF0pKSA+PiAxKSAlIDI1NjsKKworCXJjNGtleVs0XSA9IHBwazAgJSAyNTY7CisJcmM0a2V5WzVdID0gKHBwazAgPj4gOCkgJSAyNTY7CisKKwlyYzRrZXlbNl0gPSBwcGsxICUgMjU2OworCXJjNGtleVs3XSA9IChwcGsxID4+IDgpICUgMjU2OworCisJcmM0a2V5WzhdID0gcHBrMiAlIDI1NjsKKwlyYzRrZXlbOV0gPSAocHBrMiA+PiA4KSAlIDI1NjsKKworCXJjNGtleVsxMF0gPSBwcGszICUgMjU2OworCXJjNGtleVsxMV0gPSAocHBrMyA+PiA4KSAlIDI1NjsKKworCXJjNGtleVsxMl0gPSBwcGs0ICUgMjU2OworCXJjNGtleVsxM10gPSAocHBrNCA+PiA4KSAlIDI1NjsKKworCXJjNGtleVsxNF0gPSBwcGs1ICUgMjU2OworCXJjNGtleVsxNV0gPSAocHBrNSA+PiA4KSAlIDI1NjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogY29uc3RydWN0X21pY19oZWFkZXIxKCkgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEJ1aWxkcyB0aGUgZmlyc3QgTUlDIGhlYWRlciBibG9jayBmcm9tICAgICAgICovCisvKiBoZWFkZXIgZmllbGRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBjb25zdHJ1Y3RfbWljX2hlYWRlcjEoCisJdW5zaWduZWQgY2hhciAqbWljX2hlYWRlcjEsCisJaW50IGhlYWRlcl9sZW5ndGgsCisJdW5zaWduZWQgY2hhciAqbXBkdSkKK3sKKwltaWNfaGVhZGVyMVswXSA9ICh1bnNpZ25lZCBjaGFyKSgoaGVhZGVyX2xlbmd0aCAtIDIpIC8gMjU2KTsKKwltaWNfaGVhZGVyMVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoaGVhZGVyX2xlbmd0aCAtIDIpICUgMjU2KTsKKwltaWNfaGVhZGVyMVsyXSA9IG1wZHVbMF0gJiAweGNmOyAgICAvKiBNdXRlIENGIHBvbGwgJiBDRiBhY2sgYml0cyAqLworCW1pY19oZWFkZXIxWzNdID0gbXBkdVsxXSAmIDB4Yzc7ICAgIC8qIE11dGUgcmV0cnksIG1vcmUgZGF0YSBhbmQgcHdyIG1ndCBiaXRzICovCisJbWljX2hlYWRlcjFbNF0gPSBtcGR1WzRdOyAgICAgICAvKiBBMSAqLworCW1pY19oZWFkZXIxWzVdID0gbXBkdVs1XTsKKwltaWNfaGVhZGVyMVs2XSA9IG1wZHVbNl07CisJbWljX2hlYWRlcjFbN10gPSBtcGR1WzddOworCW1pY19oZWFkZXIxWzhdID0gbXBkdVs4XTsKKwltaWNfaGVhZGVyMVs5XSA9IG1wZHVbOV07CisJbWljX2hlYWRlcjFbMTBdID0gbXBkdVsxMF07ICAgICAvKiBBMiAqLworCW1pY19oZWFkZXIxWzExXSA9IG1wZHVbMTFdOworCW1pY19oZWFkZXIxWzEyXSA9IG1wZHVbMTJdOworCW1pY19oZWFkZXIxWzEzXSA9IG1wZHVbMTNdOworCW1pY19oZWFkZXIxWzE0XSA9IG1wZHVbMTRdOworCW1pY19oZWFkZXIxWzE1XSA9IG1wZHVbMTVdOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogY29uc3RydWN0X21pY19oZWFkZXIyKCkgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEJ1aWxkcyB0aGUgbGFzdCBNSUMgaGVhZGVyIGJsb2NrIGZyb20gICAgICAgICovCisvKiBoZWFkZXIgZmllbGRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBjb25zdHJ1Y3RfbWljX2hlYWRlcjIoCisJdW5zaWduZWQgY2hhciAqbWljX2hlYWRlcjIsCisJdW5zaWduZWQgY2hhciAqbXBkdSwKKwlpbnQgYTRfZXhpc3RzLAorCWludCBxY19leGlzdHMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpPDE2OyBpKyspIG1pY19oZWFkZXIyW2ldPTB4MDA7CisKKwltaWNfaGVhZGVyMlswXSA9IG1wZHVbMTZdOyAgICAvKiBBMyAqLworCW1pY19oZWFkZXIyWzFdID0gbXBkdVsxN107CisJbWljX2hlYWRlcjJbMl0gPSBtcGR1WzE4XTsKKwltaWNfaGVhZGVyMlszXSA9IG1wZHVbMTldOworCW1pY19oZWFkZXIyWzRdID0gbXBkdVsyMF07CisJbWljX2hlYWRlcjJbNV0gPSBtcGR1WzIxXTsKKworCS8vIEluIFNlcXVlbmNlIENvbnRyb2wgZmllbGQsIG11dGUgc2VxdWVuY2UgbnVtZXIgYml0cyAoMTItYml0KQorCW1pY19oZWFkZXIyWzZdID0gbXBkdVsyMl0gJiAweDBmOyAgIC8qIFNDICovCisJbWljX2hlYWRlcjJbN10gPSAweDAwOyAvKiBtcGR1WzIzXTsgKi8KKworCWlmICgoIXFjX2V4aXN0cykgJiBhNF9leGlzdHMpCisJeworCQlmb3IgKGk9MDtpPDY7aSsrKSBtaWNfaGVhZGVyMls4K2ldID0gbXBkdVsyNCtpXTsgICAvKiBBNCAqLworCisJfQorCisJaWYgKHFjX2V4aXN0cyAmJiAoIWE0X2V4aXN0cykpCisJeworCQltaWNfaGVhZGVyMls4XSA9IG1wZHVbMjRdICYgMHgwZjsgLyogbXV0ZSBiaXRzIDE1IC0gNCAqLworCQltaWNfaGVhZGVyMls5XSA9IG1wZHVbMjVdICYgMHgwMDsKKwl9CisKKwlpZiAocWNfZXhpc3RzICYmIGE0X2V4aXN0cykKKwl7CisJCWZvciAoaT0wO2k8NjtpKyspIG1pY19oZWFkZXIyWzgraV0gPSBtcGR1WzI0K2ldOyAgIC8qIEE0ICovCisKKwkJbWljX2hlYWRlcjJbMTRdID0gbXBkdVszMF0gJiAweDBmOworCQltaWNfaGVhZGVyMlsxNV0gPSBtcGR1WzMxXSAmIDB4MDA7CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBjb25zdHJ1Y3RfbWljX2l2KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogQnVpbGRzIHRoZSBNSUMgSVYgZnJvbSBoZWFkZXIgZmllbGRzIGFuZCBQTiAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgY29uc3RydWN0X21pY19pdigKKwl1bnNpZ25lZCBjaGFyICptaWNfaXYsCisJaW50IHFjX2V4aXN0cywKKwlpbnQgYTRfZXhpc3RzLAorCXVuc2lnbmVkIGNoYXIgKm1wZHUsCisJdW5zaWduZWQgaW50IHBheWxvYWRfbGVuZ3RoLAorCXVuc2lnbmVkIGNoYXIgKnBuX3ZlY3RvcikKK3sKKwlpbnQgaTsKKworCW1pY19pdlswXSA9IDB4NTk7CisJaWYgKHFjX2V4aXN0cyAmJiBhNF9leGlzdHMpCisJCW1pY19pdlsxXSA9IG1wZHVbMzBdICYgMHgwZjsgICAgLyogUW9TX1RDICAgICAgICAgICAqLworCWlmIChxY19leGlzdHMgJiYgIWE0X2V4aXN0cykKKwkJbWljX2l2WzFdID0gbXBkdVsyNF0gJiAweDBmOyAgIC8qIG11dGUgYml0cyA3LTQgICAgKi8KKwlpZiAoIXFjX2V4aXN0cykKKwkJbWljX2l2WzFdID0gMHgwMDsKKwlmb3IgKGkgPSAyOyBpIDwgODsgaSsrKQorCQltaWNfaXZbaV0gPSBtcGR1W2kgKyA4XTsgICAgICAgICAgICAgICAgICAgIC8qIG1pY19pdlsyOjddID0gQTJbMDo1XSA9IG1wZHVbMTA6MTVdICovCisjaWZkZWYgQ09OU0lTVEVOVF9QTl9PUkRFUgorCQlmb3IgKGkgPSA4OyBpIDwgMTQ7IGkrKykKKwkJCW1pY19pdltpXSA9IHBuX3ZlY3RvcltpIC0gOF07ICAgICAgICAgICAvKiBtaWNfaXZbODoxM10gPSBQTlswOjVdICovCisjZWxzZQorCQlmb3IgKGkgPSA4OyBpIDwgMTQ7IGkrKykKKwkJCW1pY19pdltpXSA9IHBuX3ZlY3RvclsxMyAtIGldOyAgICAgICAgICAvKiBtaWNfaXZbODoxM10gPSBQTls1OjBdICovCisjZW5kaWYKKwlpID0gKHBheWxvYWRfbGVuZ3RoIC8gMjU2KTsKKwlpID0gKHBheWxvYWRfbGVuZ3RoICUgMjU2KTsKKwltaWNfaXZbMTRdID0gKHVuc2lnbmVkIGNoYXIpIChwYXlsb2FkX2xlbmd0aCAvIDI1Nik7CisJbWljX2l2WzE1XSA9ICh1bnNpZ25lZCBjaGFyKSAocGF5bG9hZF9sZW5ndGggJSAyNTYpOworCit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogYml0d2lzZV94b3IoKSAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEEgMTI4IGJpdCwgYml0d2lzZSBleGNsdXNpdmUgb3IgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIGJpdHdpc2VfeG9yKHVuc2lnbmVkIGNoYXIgKmluYSwgdW5zaWduZWQgY2hhciAqaW5iLCB1bnNpZ25lZCBjaGFyICpvdXQpCit7CisJaW50IGk7CisJZm9yIChpPTA7IGk8MTY7IGkrKykKKwl7CisJCW91dFtpXSA9IGluYVtpXSBeIGluYltpXTsKKwl9Cit9CisKKwordm9pZCBhZXMxMjhrMTI4ZCh1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQpCit7CisJaW50IHJvdW5kOworCWludCBpOworCXVuc2lnbmVkIGNoYXIgaW50ZXJtZWRpYXRlYVsxNl07CisJdW5zaWduZWQgY2hhciBpbnRlcm1lZGlhdGViWzE2XTsKKwl1bnNpZ25lZCBjaGFyIHJvdW5kX2tleVsxNl07CisKKwlmb3IoaT0wOyBpPDE2OyBpKyspIHJvdW5kX2tleVtpXSA9IGtleVtpXTsKKworCWZvciAocm91bmQgPSAwOyByb3VuZCA8IDExOyByb3VuZCsrKQorCXsKKwkJaWYgKHJvdW5kID09IDApCisJCXsKKwkJCXhvcl8xMjgocm91bmRfa2V5LCBkYXRhLCBjaXBoZXJ0ZXh0KTsKKwkJCW5leHRfa2V5KHJvdW5kX2tleSwgcm91bmQpOworCQl9CisJCWVsc2UgaWYgKHJvdW5kID09IDEwKQorCQl7CisJCQlieXRlX3N1YihjaXBoZXJ0ZXh0LCBpbnRlcm1lZGlhdGVhKTsKKwkJCXNoaWZ0X3JvdyhpbnRlcm1lZGlhdGVhLCBpbnRlcm1lZGlhdGViKTsKKwkJCXhvcl8xMjgoaW50ZXJtZWRpYXRlYiwgcm91bmRfa2V5LCBjaXBoZXJ0ZXh0KTsKKwkJfQorCQllbHNlICAgIC8qIDEgLSA5ICovCisJCXsKKwkJCWJ5dGVfc3ViKGNpcGhlcnRleHQsIGludGVybWVkaWF0ZWEpOworCQkJc2hpZnRfcm93KGludGVybWVkaWF0ZWEsIGludGVybWVkaWF0ZWIpOworCQkJbWl4X2NvbHVtbigmaW50ZXJtZWRpYXRlYlswXSwgJmludGVybWVkaWF0ZWFbMF0pOworCQkJbWl4X2NvbHVtbigmaW50ZXJtZWRpYXRlYls0XSwgJmludGVybWVkaWF0ZWFbNF0pOworCQkJbWl4X2NvbHVtbigmaW50ZXJtZWRpYXRlYls4XSwgJmludGVybWVkaWF0ZWFbOF0pOworCQkJbWl4X2NvbHVtbigmaW50ZXJtZWRpYXRlYlsxMl0sICZpbnRlcm1lZGlhdGVhWzEyXSk7CisJCQl4b3JfMTI4KGludGVybWVkaWF0ZWEsIHJvdW5kX2tleSwgY2lwaGVydGV4dCk7CisJCQluZXh0X2tleShyb3VuZF9rZXksIHJvdW5kKTsKKwkJfQorCX0KKworfQorCit2b2lkIGNvbnN0cnVjdF9jdHJfcHJlbG9hZCgKKwl1bnNpZ25lZCBjaGFyICpjdHJfcHJlbG9hZCwKKwlpbnQgYTRfZXhpc3RzLAorCWludCBxY19leGlzdHMsCisJdW5zaWduZWQgY2hhciAqbXBkdSwKKwl1bnNpZ25lZCBjaGFyICpwbl92ZWN0b3IsCisJaW50IGMpCit7CisKKwlpbnQgaSA9IDA7CisJZm9yIChpPTA7IGk8MTY7IGkrKykgY3RyX3ByZWxvYWRbaV0gPSAweDAwOworCWkgPSAwOworCisJY3RyX3ByZWxvYWRbMF0gPSAweDAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFnICovCisJaWYgKHFjX2V4aXN0cyAmJiBhNF9leGlzdHMpIGN0cl9wcmVsb2FkWzFdID0gbXBkdVszMF0gJiAweDBmOyAgIC8qIFFvQ19Db250cm9sICAqLworCWlmIChxY19leGlzdHMgJiYgIWE0X2V4aXN0cykgY3RyX3ByZWxvYWRbMV0gPSBtcGR1WzI0XSAmIDB4MGY7CisKKwlmb3IgKGkgPSAyOyBpIDwgODsgaSsrKQorCQljdHJfcHJlbG9hZFtpXSA9IG1wZHVbaSArIDhdOyAgICAgICAgICAgICAgICAgICAgICAgLyogY3RyX3ByZWxvYWRbMjo3XSA9IEEyWzA6NV0gPSBtcGR1WzEwOjE1XSAqLworI2lmZGVmIENPTlNJU1RFTlRfUE5fT1JERVIKKwkgIGZvciAoaSA9IDg7IGkgPCAxNDsgaSsrKQorCQkJY3RyX3ByZWxvYWRbaV0gPSAgICBwbl92ZWN0b3JbaSAtIDhdOyAgICAgICAgICAgLyogY3RyX3ByZWxvYWRbODoxM10gPSBQTlswOjVdICovCisjZWxzZQorCSAgZm9yIChpID0gODsgaSA8IDE0OyBpKyspCisJCQljdHJfcHJlbG9hZFtpXSA9ICAgIHBuX3ZlY3RvclsxMyAtIGldOyAgICAgICAgICAvKiBjdHJfcHJlbG9hZFs4OjEzXSA9IFBOWzU6MF0gKi8KKyNlbmRpZgorCWN0cl9wcmVsb2FkWzE0XSA9ICAodW5zaWduZWQgY2hhcikgKGMgLyAyNTYpOyAvLyBDdHIKKwljdHJfcHJlbG9hZFsxNV0gPSAgKHVuc2lnbmVkIGNoYXIpIChjICUgMjU2KTsKKworfQorCisKKy8vCisvLyBUUlVFOiBTdWNjZXNzIQorLy8gRkFMU0U6IERlY3J5cHQgRXJyb3IhCisvLworQk9PTEVBTiBSVE1QU29mdERlY3J5cHRUS0lQKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUglwRGF0YSwKKwlJTiBVTE9ORwlEYXRhQnl0ZUNudCwKKwlJTiBVQ0hBUiAgICBVc2VyUHJpb3JpdHksCisJSU4gUENJUEhFUl9LRVkJcFdwYUtleSkKK3sKKwlVQ0hBUgkJCUtleUlEOworCVVJTlQJCQlIZWFkZXJMZW47CisgICAgVUNIQVIJCQlmYzA7CisJVUNIQVIJCQlmYzE7CisJVVNIT1JUCQkJZmM7CisJVUlOVAkJCWZyYW1lX3R5cGU7CisJVUlOVAkJCWZyYW1lX3N1YnR5cGU7CisgICAgVUlOVAkJCWZyb21fZHM7CisgICAgVUlOVAkJCXRvX2RzOworCUlOVAkJCQlhNF9leGlzdHM7CisJSU5UCQkJCXFjX2V4aXN0czsKKwlVU0hPUlQJCQlkdXJhdGlvbjsKKwlVU0hPUlQJCQlzZXFfY29udHJvbDsKKwlVU0hPUlQJCQlxb3NfY29udHJvbDsKKwlVQ0hBUgkJCVRBW01BQ19BRERSX0xFTl07CisJVUNIQVIJCQlEQVtNQUNfQUREUl9MRU5dOworCVVDSEFSCQkJU0FbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUgkJCVJDNEtleVsxNl07CisJVUlOVAkJCXAxa1s1XTsgLy9mb3IgbWl4X2tleTsKKwlVTE9ORwkJCXBubDsvKiBMZWFzdCBzaWduaWZpY2FudCAxNiBiaXRzIG9mIFBOICovCisJVUxPTkcJCQlwbmg7LyogTW9zdCBzaWduaWZpY2FudCAzMiBiaXRzIG9mIFBOICovCisJVUlOVAkJCW51bV9ibG9ja3M7CisJVUlOVAkJCXBheWxvYWRfcmVtYWluZGVyOworCUFSQ0ZPVVJDT05URVhUIAlBcmNGb3VyQ29udGV4dDsKKwlVSU5UCQkJY3JjMzIgPSAwOworCVVJTlQJCQl0cmFpbGZjcyA9IDA7CisJVUNIQVIJCQlNSUNbOF07CisJVUNIQVIJCQlUcmFpbE1JQ1s4XTsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRnJhbWVFbmRpYW5DaGFuZ2UocEFkLCAoUFVDSEFSKXBEYXRhLCBESVJfUkVBRCwgRkFMU0UpOworI2VuZGlmCisKKwlmYzAgPSAqcERhdGE7CisJZmMxID0gKihwRGF0YSArIDEpOworCisJZmMgPSAqKChQVVNIT1JUKXBEYXRhKTsKKworCWZyYW1lX3R5cGUgPSAoKGZjMCA+PiAyKSAmIDB4MDMpOworCWZyYW1lX3N1YnR5cGUgPSAoKGZjMCA+PiA0KSAmIDB4MGYpOworCisgICAgZnJvbV9kcyA9IChmYzEgJiAweDIpID4+IDE7CisgICAgdG9fZHMgPSAoZmMxICYgMHgxKTsKKworICAgIGE0X2V4aXN0cyA9IChmcm9tX2RzICYgdG9fZHMpOworICAgIHFjX2V4aXN0cyA9ICgoZnJhbWVfc3VidHlwZSA9PSAweDA4KSB8fCAgICAvKiBBc3N1bWVkIFFvUyBzdWJ0eXBlcyAqLworICAgICAgICAgICAgICAgICAgKGZyYW1lX3N1YnR5cGUgPT0gMHgwOSkgfHwgICAvKiBMaWtlbHkgdG8gY2hhbmdlLiAgICAqLworICAgICAgICAgICAgICAgICAgKGZyYW1lX3N1YnR5cGUgPT0gMHgwYSkgfHwKKyAgICAgICAgICAgICAgICAgIChmcmFtZV9zdWJ0eXBlID09IDB4MGIpCisgICAgICAgICAgICAgICAgICk7CisKKwlIZWFkZXJMZW4gPSAyNDsKKwlpZiAoYTRfZXhpc3RzKQorCQlIZWFkZXJMZW4gKz0gNjsKKworCUtleUlEID0gKigoUFVDSEFSKShwRGF0YSsgSGVhZGVyTGVuICsgMykpOworCUtleUlEID0gS2V5SUQgPj4gNjsKKworCWlmIChwV3BhS2V5W0tleUlEXS5LZXlMZW4gPT0gMCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBTb2Z0RGVjcnlwdFRLSVAgZmFpbGVkIShLZXlJRFslZF0gTGVuZ3RoIGNhbiBub3QgYmUgMClcbiIsIEtleUlEKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlkdXJhdGlvbiA9ICooKFBVU0hPUlQpKHBEYXRhKzIpKTsKKworCXNlcV9jb250cm9sID0gKigoUFVTSE9SVCkocERhdGErMjIpKTsKKworCWlmIChxY19leGlzdHMpCisJeworCQlpZiAoYTRfZXhpc3RzKQorCQl7CisJCQlxb3NfY29udHJvbCA9ICooKFBVU0hPUlQpKHBEYXRhKzMwKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlxb3NfY29udHJvbCA9ICooKFBVU0hPUlQpKHBEYXRhKzI0KSk7CisJCX0KKwl9CisKKwlpZiAodG9fZHMgPT0gMCAmJiBmcm9tX2RzID09IDEpCisJeworCQlOZGlzTW92ZU1lbW9yeShEQSwgcERhdGErNCwgTUFDX0FERFJfTEVOKTsKKwkJTmRpc01vdmVNZW1vcnkoU0EsIHBEYXRhKzE2LCBNQUNfQUREUl9MRU4pOworCQlOZGlzTW92ZU1lbW9yeShUQSwgcERhdGErMTAsIE1BQ19BRERSX0xFTik7ICAvL0JTU0lECisJfQorCWVsc2UgaWYgKHRvX2RzID09IDAgJiYgZnJvbV9kcyA9PSAwICkKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KFRBLCBwRGF0YSsxMCwgTUFDX0FERFJfTEVOKTsKKwkJTmRpc01vdmVNZW1vcnkoREEsIHBEYXRhKzQsIE1BQ19BRERSX0xFTik7CisJCU5kaXNNb3ZlTWVtb3J5KFNBLCBwRGF0YSsxMCwgTUFDX0FERFJfTEVOKTsKKwl9CisJZWxzZSBpZiAodG9fZHMgPT0gMSAmJiBmcm9tX2RzID09IDApCisJeworCQlOZGlzTW92ZU1lbW9yeShTQSwgcERhdGErMTAsIE1BQ19BRERSX0xFTik7CisJCU5kaXNNb3ZlTWVtb3J5KFRBLCBwRGF0YSsxMCwgTUFDX0FERFJfTEVOKTsKKwkJTmRpc01vdmVNZW1vcnkoREEsIHBEYXRhKzE2LCBNQUNfQUREUl9MRU4pOworCX0KKwllbHNlIGlmICh0b19kcyA9PSAxICYmIGZyb21fZHMgPT0gMSkKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KFRBLCBwRGF0YSsxMCwgTUFDX0FERFJfTEVOKTsKKwkJTmRpc01vdmVNZW1vcnkoREEsIHBEYXRhKzE2LCBNQUNfQUREUl9MRU4pOworCQlOZGlzTW92ZU1lbW9yeShTQSwgcERhdGErMjIsIE1BQ19BRERSX0xFTik7CisJfQorCisJbnVtX2Jsb2NrcyA9IChEYXRhQnl0ZUNudCAtIDE2KSAvIDE2OworCXBheWxvYWRfcmVtYWluZGVyID0gKERhdGFCeXRlQ250IC0gMTYpICUgMTY7CisKKwlwbmwgPSAoKihwRGF0YSArIEhlYWRlckxlbikpICogMjU2ICsgKihwRGF0YSArIEhlYWRlckxlbiArIDIpOworCXBuaCA9ICooKFBVTE9ORykocERhdGEgKyBIZWFkZXJMZW4gKyA0KSk7CisJcG5oID0gY3B1MmxlMzIocG5oKTsKKwlSVE1QVGtpcE1peEtleShwV3BhS2V5W0tleUlEXS5LZXksIFRBLCBwbmwsIHBuaCwgUkM0S2V5LCBwMWspOworCisJQVJDRk9VUl9JTklUKCZBcmNGb3VyQ29udGV4dCwgUkM0S2V5LCAxNik7CisKKwlBUkNGT1VSX0RFQ1JZUFQoJkFyY0ZvdXJDb250ZXh0LCBwRGF0YSArIEhlYWRlckxlbiwgcERhdGEgKyBIZWFkZXJMZW4gKyA4LCBEYXRhQnl0ZUNudCAtIEhlYWRlckxlbiAtIDgpOworCU5kaXNNb3ZlTWVtb3J5KCZ0cmFpbGZjcywgcERhdGEgKyBEYXRhQnl0ZUNudCAtIDggLSA0LCA0KTsKKwljcmMzMiA9IFJUTVBfQ0FMQ19GQ1MzMihQUFBJTklURkNTMzIsIHBEYXRhICsgSGVhZGVyTGVuLCBEYXRhQnl0ZUNudCAtIEhlYWRlckxlbiAtIDggLSA0KTsgIC8vU2tpcCBJVitFSVYgOCBieXRlcyAmIFNraXAgbGFzdCA0IGJ5dGVzKEZDUykuCisJY3JjMzIgXj0gMHhmZmZmZmZmZjsgICAgICAgICAgICAgLyogY29tcGxlbWVudCAqLworCisgICAgaWYoY3JjMzIgIT0gY3B1MmxlMzIodHJhaWxmY3MpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUFNvZnREZWNyeXB0VEtJUCwgV0VQIERhdGEgSUNWIEVycm9yICFcbiIpKTsJIC8vSUNWIGVycm9yLgorCisJCXJldHVybiAoRkFMU0UpOworCX0KKworCU5kaXNNb3ZlTWVtb3J5KFRyYWlsTUlDLCBwRGF0YSArIERhdGFCeXRlQ250IC0gOCAtIDggLSA0LCA4KTsKKwlSVE1QSW5pdE1JQ0VuZ2luZShwQWQsIHBXcGFLZXlbS2V5SURdLktleSwgREEsIFNBLCBVc2VyUHJpb3JpdHksIHBXcGFLZXlbS2V5SURdLlJ4TWljKTsKKwlSVE1QVGtpcEFwcGVuZCgmcEFkLT5Qcml2YXRlSW5mby5UeCwgcERhdGEgKyBIZWFkZXJMZW4sIERhdGFCeXRlQ250IC0gSGVhZGVyTGVuIC0gOCAtIDEyKTsKKwlSVE1QVGtpcEdldE1JQygmcEFkLT5Qcml2YXRlSW5mby5UeCk7CisJTmRpc01vdmVNZW1vcnkoTUlDLCBwQWQtPlByaXZhdGVJbmZvLlR4Lk1JQywgOCk7CisKKwlpZiAoIU5kaXNFcXVhbE1lbW9yeShNSUMsIFRyYWlsTUlDLCA4KSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUTVBTb2Z0RGVjcnlwdFRLSVAsIFdFUCBEYXRhIE1JQyBFcnJvciAhXG4iKSk7CSAvL01JQyBlcnJvci4KKwkJLy9SVE1QUmVwb3J0TWljRXJyb3IocEFkLCAmcFdwYUtleVtLZXlJRF0pOwkvLyBtYXJrZWQgYnkgQWxiZXJ0WSBAIDIwMDYwNjMwCisJCXJldHVybiAoRkFMU0UpOworCX0KKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRnJhbWVFbmRpYW5DaGFuZ2UocEFkLCAoUFVDSEFSKXBEYXRhLCBESVJfUkVBRCwgRkFMU0UpOworI2VuZGlmCisJLy9EQkdQUklOVChSVF9ERUJVR19UUkFDRSwgIlJUTVBTb2Z0RGVjcnlwdFRLSVAgRGVjcmlwdCBkb25lISFcbiIpOworCXJldHVybiBUUlVFOworfQorCisKKworCitCT09MRUFOIFJUTVBTb2Z0RGVjcnlwdEFFUygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIJcERhdGEsCisJSU4gVUxPTkcJRGF0YUJ5dGVDbnQsCisJSU4gUENJUEhFUl9LRVkJcFdwYUtleSkKK3sKKwlVQ0hBUgkJCUtleUlEOworCVVJTlQJCQlIZWFkZXJMZW47CisJVUNIQVIJCQlQTls2XTsKKwlVSU5UCQkJcGF5bG9hZF9sZW47CisJVUlOVAkJCW51bV9ibG9ja3M7CisJVUlOVAkJCXBheWxvYWRfcmVtYWluZGVyOworCVVTSE9SVAkJCWZjOworCVVDSEFSCQkJZmMwOworCVVDSEFSCQkJZmMxOworCVVJTlQJCQlmcmFtZV90eXBlOworCVVJTlQJCQlmcmFtZV9zdWJ0eXBlOworCVVJTlQJCQlmcm9tX2RzOworCVVJTlQJCQl0b19kczsKKwlJTlQJCQkJYTRfZXhpc3RzOworCUlOVAkJCQlxY19leGlzdHM7CisJVUNIQVIJCQlhZXNfb3V0WzE2XTsKKwlpbnQgCQkJcGF5bG9hZF9pbmRleDsKKwlVSU5UIAkJCWk7CisJVUNIQVIgCQkJY3RyX3ByZWxvYWRbMTZdOworCVVDSEFSIAkJCWNoYWluX2J1ZmZlclsxNl07CisJVUNIQVIgCQkJcGFkZGVkX2J1ZmZlclsxNl07CisJVUNIQVIgCQkJbWljX2l2WzE2XTsKKwlVQ0hBUiAJCQltaWNfaGVhZGVyMVsxNl07CisJVUNIQVIgCQkJbWljX2hlYWRlcjJbMTZdOworCVVDSEFSCQkJTUlDWzhdOworCVVDSEFSCQkJVHJhaWxNSUNbOF07CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKHBBZCwgKFBVQ0hBUilwRGF0YSwgRElSX1JFQUQsIEZBTFNFKTsKKyNlbmRpZgorCisJZmMwID0gKnBEYXRhOworCWZjMSA9ICoocERhdGEgKyAxKTsKKworCWZjID0gKigoUFVTSE9SVClwRGF0YSk7CisKKwlmcmFtZV90eXBlID0gKChmYzAgPj4gMikgJiAweDAzKTsKKwlmcmFtZV9zdWJ0eXBlID0gKChmYzAgPj4gNCkgJiAweDBmKTsKKworCWZyb21fZHMgPSAoZmMxICYgMHgyKSA+PiAxOworCXRvX2RzID0gKGZjMSAmIDB4MSk7CisKKwlhNF9leGlzdHMgPSAoZnJvbV9kcyAmIHRvX2RzKTsKKwlxY19leGlzdHMgPSAoKGZyYW1lX3N1YnR5cGUgPT0gMHgwOCkgfHwgICAgLyogQXNzdW1lZCBRb1Mgc3VidHlwZXMgKi8KKwkJCQkgIChmcmFtZV9zdWJ0eXBlID09IDB4MDkpIHx8ICAgLyogTGlrZWx5IHRvIGNoYW5nZS4gICAgKi8KKwkJCQkgIChmcmFtZV9zdWJ0eXBlID09IDB4MGEpIHx8CisJCQkJICAoZnJhbWVfc3VidHlwZSA9PSAweDBiKQorCQkJCSApOworCisJSGVhZGVyTGVuID0gMjQ7CisJaWYgKGE0X2V4aXN0cykKKwkJSGVhZGVyTGVuICs9IDY7CisKKwlLZXlJRCA9ICooKFBVQ0hBUikocERhdGErIEhlYWRlckxlbiArIDMpKTsKKwlLZXlJRCA9IEtleUlEID4+IDY7CisKKwlpZiAocFdwYUtleVtLZXlJRF0uS2V5TGVuID09IDApCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVE1QU29mdERlY3J5cHRBRVMgZmFpbGVkIShLZXlJRFslZF0gTGVuZ3RoIGNhbiBub3QgYmUgMClcbiIsIEtleUlEKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlQTlswXSA9ICoocERhdGErIEhlYWRlckxlbik7CisJUE5bMV0gPSAqKHBEYXRhKyBIZWFkZXJMZW4gKyAxKTsKKwlQTlsyXSA9ICoocERhdGErIEhlYWRlckxlbiArIDQpOworCVBOWzNdID0gKihwRGF0YSsgSGVhZGVyTGVuICsgNSk7CisJUE5bNF0gPSAqKHBEYXRhKyBIZWFkZXJMZW4gKyA2KTsKKwlQTls1XSA9ICoocERhdGErIEhlYWRlckxlbiArIDcpOworCisJcGF5bG9hZF9sZW4gPSBEYXRhQnl0ZUNudCAtIEhlYWRlckxlbiAtIDggLSA4OwkvLyA4IGJ5dGVzIGZvciBDQ01QIGhlYWRlciAsIDggYnl0ZXMgZm9yIE1JQworCXBheWxvYWRfcmVtYWluZGVyID0gKHBheWxvYWRfbGVuKSAlIDE2OworCW51bV9ibG9ja3MgPSAocGF5bG9hZF9sZW4pIC8gMTY7CisKKworCisJLy8gRmluZCBzdGFydCBvZiBwYXlsb2FkCisJcGF5bG9hZF9pbmRleCA9IEhlYWRlckxlbiArIDg7IC8vSVYrRUlWCisKKwlmb3IgKGk9MDsgaTwgbnVtX2Jsb2NrczsgaSsrKQorCXsKKwkJY29uc3RydWN0X2N0cl9wcmVsb2FkKGN0cl9wcmVsb2FkLAorCQkJCQkJCQlhNF9leGlzdHMsCisJCQkJCQkJCXFjX2V4aXN0cywKKwkJCQkJCQkJcERhdGEsCisJCQkJCQkJCVBOLAorCQkJCQkJCQlpKzEgKTsKKworCQlhZXMxMjhrMTI4ZChwV3BhS2V5W0tleUlEXS5LZXksIGN0cl9wcmVsb2FkLCBhZXNfb3V0KTsKKworCQliaXR3aXNlX3hvcihhZXNfb3V0LCBwRGF0YSArIHBheWxvYWRfaW5kZXgsIGNoYWluX2J1ZmZlcik7CisJCU5kaXNNb3ZlTWVtb3J5KHBEYXRhICsgcGF5bG9hZF9pbmRleCAtIDgsIGNoYWluX2J1ZmZlciwgMTYpOworCQlwYXlsb2FkX2luZGV4ICs9IDE2OworCX0KKworCS8vCisJLy8gSWYgdGhlcmUgaXMgYSBzaG9ydCBmaW5hbCBibG9jaywgdGhlbiBwYWQgaXQKKwkvLyBlbmNyeXB0IGl0IGFuZCBjb3B5IHRoZSB1bnBhZGRlZCBwYXJ0IGJhY2sKKwkvLworCWlmIChwYXlsb2FkX3JlbWFpbmRlciA+IDApCisJeworCQljb25zdHJ1Y3RfY3RyX3ByZWxvYWQoY3RyX3ByZWxvYWQsCisJCQkJCQkJCWE0X2V4aXN0cywKKwkJCQkJCQkJcWNfZXhpc3RzLAorCQkJCQkJCQlwRGF0YSwKKwkJCQkJCQkJUE4sCisJCQkJCQkJCW51bV9ibG9ja3MgKyAxKTsKKworCQlOZGlzWmVyb01lbW9yeShwYWRkZWRfYnVmZmVyLCAxNik7CisJCU5kaXNNb3ZlTWVtb3J5KHBhZGRlZF9idWZmZXIsIHBEYXRhICsgcGF5bG9hZF9pbmRleCwgcGF5bG9hZF9yZW1haW5kZXIpOworCisJCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY3RyX3ByZWxvYWQsIGFlc19vdXQpOworCisJCWJpdHdpc2VfeG9yKGFlc19vdXQsIHBhZGRlZF9idWZmZXIsIGNoYWluX2J1ZmZlcik7CisJCU5kaXNNb3ZlTWVtb3J5KHBEYXRhICsgcGF5bG9hZF9pbmRleCAtIDgsIGNoYWluX2J1ZmZlciwgcGF5bG9hZF9yZW1haW5kZXIpOworCQlwYXlsb2FkX2luZGV4ICs9IHBheWxvYWRfcmVtYWluZGVyOworCX0KKworCS8vCisJLy8gRGVzY3J5cHQgdGhlIE1JQworCS8vCisJY29uc3RydWN0X2N0cl9wcmVsb2FkKGN0cl9wcmVsb2FkLAorCQkJCQkJCWE0X2V4aXN0cywKKwkJCQkJCQlxY19leGlzdHMsCisJCQkJCQkJcERhdGEsCisJCQkJCQkJUE4sCisJCQkJCQkJMCk7CisJTmRpc1plcm9NZW1vcnkocGFkZGVkX2J1ZmZlciwgMTYpOworCU5kaXNNb3ZlTWVtb3J5KHBhZGRlZF9idWZmZXIsIHBEYXRhICsgcGF5bG9hZF9pbmRleCwgOCk7CisKKwlhZXMxMjhrMTI4ZChwV3BhS2V5W0tleUlEXS5LZXksIGN0cl9wcmVsb2FkLCBhZXNfb3V0KTsKKworCWJpdHdpc2VfeG9yKGFlc19vdXQsIHBhZGRlZF9idWZmZXIsIGNoYWluX2J1ZmZlcik7CisKKwlOZGlzTW92ZU1lbW9yeShUcmFpbE1JQywgY2hhaW5fYnVmZmVyLCA4KTsKKworCS8vCisJLy8gQ2FsY3VsYXRlIE1JQworCS8vCisKKwkvL0ZvcmNlIHRoZSBwcm90ZWN0ZWQgZnJhbWUgYml0IG9uCisJKihwRGF0YSArIDEpID0gKihwRGF0YSArIDEpIHwgMHg0MDsKKworCS8vIEZpbmQgc3RhcnQgb2YgcGF5bG9hZAorCS8vIEJlY2F1c2UgdGhlIENDTVAgaGVhZGVyIGhhcyBiZWVuIHJlbW92ZWQKKwlwYXlsb2FkX2luZGV4ID0gSGVhZGVyTGVuOworCisJY29uc3RydWN0X21pY19pdigKKwkJCQkJbWljX2l2LAorCQkJCQlxY19leGlzdHMsCisJCQkJCWE0X2V4aXN0cywKKwkJCQkJcERhdGEsCisJCQkJCXBheWxvYWRfbGVuLAorCQkJCQlQTik7CisKKwljb25zdHJ1Y3RfbWljX2hlYWRlcjEoCisJCQkJCQltaWNfaGVhZGVyMSwKKwkJCQkJCUhlYWRlckxlbiwKKwkJCQkJCXBEYXRhKTsKKworCWNvbnN0cnVjdF9taWNfaGVhZGVyMigKKwkJCQkJCW1pY19oZWFkZXIyLAorCQkJCQkJcERhdGEsCisJCQkJCQlhNF9leGlzdHMsCisJCQkJCQlxY19leGlzdHMpOworCisJYWVzMTI4azEyOGQocFdwYUtleVtLZXlJRF0uS2V5LCBtaWNfaXYsIGFlc19vdXQpOworCWJpdHdpc2VfeG9yKGFlc19vdXQsIG1pY19oZWFkZXIxLCBjaGFpbl9idWZmZXIpOworCWFlczEyOGsxMjhkKHBXcGFLZXlbS2V5SURdLktleSwgY2hhaW5fYnVmZmVyLCBhZXNfb3V0KTsKKwliaXR3aXNlX3hvcihhZXNfb3V0LCBtaWNfaGVhZGVyMiwgY2hhaW5fYnVmZmVyKTsKKwlhZXMxMjhrMTI4ZChwV3BhS2V5W0tleUlEXS5LZXksIGNoYWluX2J1ZmZlciwgYWVzX291dCk7CisKKwkvLyBpdGVyYXRlIHRocm91Z2ggZWFjaCAxNiBieXRlIHBheWxvYWQgYmxvY2sKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Jsb2NrczsgaSsrKQorCXsKKwkJYml0d2lzZV94b3IoYWVzX291dCwgcERhdGEgKyBwYXlsb2FkX2luZGV4LCBjaGFpbl9idWZmZXIpOworCQlwYXlsb2FkX2luZGV4ICs9IDE2OworCQlhZXMxMjhrMTI4ZChwV3BhS2V5W0tleUlEXS5LZXksIGNoYWluX2J1ZmZlciwgYWVzX291dCk7CisJfQorCisJLy8gQWRkIG9uIHRoZSBmaW5hbCBwYXlsb2FkIGJsb2NrIGlmIGl0IG5lZWRzIHBhZGRpbmcKKwlpZiAocGF5bG9hZF9yZW1haW5kZXIgPiAwKQorCXsKKwkJTmRpc1plcm9NZW1vcnkocGFkZGVkX2J1ZmZlciwgMTYpOworCQlOZGlzTW92ZU1lbW9yeShwYWRkZWRfYnVmZmVyLCBwRGF0YSArIHBheWxvYWRfaW5kZXgsIHBheWxvYWRfcmVtYWluZGVyKTsKKworCQliaXR3aXNlX3hvcihhZXNfb3V0LCBwYWRkZWRfYnVmZmVyLCBjaGFpbl9idWZmZXIpOworCQlhZXMxMjhrMTI4ZChwV3BhS2V5W0tleUlEXS5LZXksIGNoYWluX2J1ZmZlciwgYWVzX291dCk7CisJfQorCisJLy8gYWVzX291dCBjb250YWlucyBwYWRkZWQgbWljLCBkaXNjYXJkIG1vc3Qgc2lnbmlmaWNhbnQKKwkvLyA4IGJ5dGVzIHRvIGdlbmVyYXRlIDY0IGJpdCBNSUMKKwlmb3IgKGkgPSAwIDsgaSA8IDg7IGkrKykgTUlDW2ldID0gYWVzX291dFtpXTsKKworCWlmICghTmRpc0VxdWFsTWVtb3J5KE1JQywgVHJhaWxNSUMsIDgpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRNUFNvZnREZWNyeXB0QUVTLCBNSUMgRXJyb3IgIVxuIikpOwkgLy9NSUMgZXJyb3IuCisJCXJldHVybiBGQUxTRTsKKwl9CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKHBBZCwgKFBVQ0hBUilwRGF0YSwgRElSX1JFQUQsIEZBTFNFKTsKKyNlbmRpZgorCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogYWVzMTI4azEyOGQoKSAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBQZXJmb3JtcyBhIDEyOCBiaXQgQUVTIGVuY3J5cHQgd2l0aCAgKi8KKy8qIDEyOCBiaXQgZGF0YS4gICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitWT0lEIHhvcl8xMjgoCisJSU4gIFBVQ0hBUiAgYSwKKwlJTiAgUFVDSEFSICBiLAorCU9VVCBQVUNIQVIgIG91dCkKK3sKKwlJTlQgaTsKKworCWZvciAoaT0wO2k8MTY7IGkrKykKKwl7CisJCW91dFtpXSA9IGFbaV0gXiBiW2ldOworCX0KK30KKworVk9JRCBuZXh0X2tleSgKKwlJTiAgUFVDSEFSICBrZXksCisJSU4gIElOVCAgICAgcm91bmQpCit7CisJVUNIQVIgICAgICAgcmNvbjsKKwlVQ0hBUiAgICAgICBzYm94X2tleVs0XTsKKwlVQ0hBUiAgICAgICByY29uX3RhYmxlWzEyXSA9CisJeworCQkweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLAorCQkweDFiLCAweDM2LCAweDM2LCAweDM2CisJfTsKKworCXNib3hfa2V5WzBdID0gUlRNUENraXBTYm94KGtleVsxM10pOworCXNib3hfa2V5WzFdID0gUlRNUENraXBTYm94KGtleVsxNF0pOworCXNib3hfa2V5WzJdID0gUlRNUENraXBTYm94KGtleVsxNV0pOworCXNib3hfa2V5WzNdID0gUlRNUENraXBTYm94KGtleVsxMl0pOworCisJcmNvbiA9IHJjb25fdGFibGVbcm91bmRdOworCisJeG9yXzMyKCZrZXlbMF0sIHNib3hfa2V5LCAma2V5WzBdKTsKKwlrZXlbMF0gPSBrZXlbMF0gXiByY29uOworCisJeG9yXzMyKCZrZXlbNF0sICZrZXlbMF0sICZrZXlbNF0pOworCXhvcl8zMigma2V5WzhdLCAma2V5WzRdLCAma2V5WzhdKTsKKwl4b3JfMzIoJmtleVsxMl0sICZrZXlbOF0sICZrZXlbMTJdKTsKK30KKworVk9JRCB4b3JfMzIoCisJSU4gIFBVQ0hBUiAgYSwKKwlJTiAgUFVDSEFSICBiLAorCU9VVCBQVUNIQVIgIG91dCkKK3sKKwlJTlQgaTsKKworCWZvciAoaT0wO2k8NDsgaSsrKQorCXsKKwkJb3V0W2ldID0gYVtpXSBeIGJbaV07CisJfQorfQorCitWT0lEIGJ5dGVfc3ViKAorCUlOICBQVUNIQVIgIGluLAorCU9VVCBQVUNIQVIgIG91dCkKK3sKKwlJTlQgaTsKKworCWZvciAoaT0wOyBpPCAxNjsgaSsrKQorCXsKKwkJb3V0W2ldID0gUlRNUENraXBTYm94KGluW2ldKTsKKwl9Cit9CisKK1VDSEFSIFJUTVBDa2lwU2JveCgKKwlJTiAgVUNIQVIgICBhKQoreworCXJldHVybiBTYm94VGFibGVbKGludClhXTsKK30KKworVk9JRCBzaGlmdF9yb3coCisJSU4gIFBVQ0hBUiAgaW4sCisJT1VUIFBVQ0hBUiAgb3V0KQoreworCW91dFswXSA9ICBpblswXTsKKwlvdXRbMV0gPSAgaW5bNV07CisJb3V0WzJdID0gIGluWzEwXTsKKwlvdXRbM10gPSAgaW5bMTVdOworCW91dFs0XSA9ICBpbls0XTsKKwlvdXRbNV0gPSAgaW5bOV07CisJb3V0WzZdID0gIGluWzE0XTsKKwlvdXRbN10gPSAgaW5bM107CisJb3V0WzhdID0gIGluWzhdOworCW91dFs5XSA9ICBpblsxM107CisJb3V0WzEwXSA9IGluWzJdOworCW91dFsxMV0gPSBpbls3XTsKKwlvdXRbMTJdID0gaW5bMTJdOworCW91dFsxM10gPSBpblsxXTsKKwlvdXRbMTRdID0gaW5bNl07CisJb3V0WzE1XSA9IGluWzExXTsKK30KKworVk9JRCBtaXhfY29sdW1uKAorCUlOICBQVUNIQVIgIGluLAorCU9VVCBQVUNIQVIgIG91dCkKK3sKKwlJTlQgICAgICAgICBpOworCVVDSEFSICAgICAgIGFkZDFiWzRdOworCVVDSEFSICAgICAgIGFkZDFiZjdbNF07CisJVUNIQVIgICAgICAgcm90bFs0XTsKKwlVQ0hBUiAgICAgICBzd2FwX2hhbGZzWzRdOworCVVDSEFSICAgICAgIGFuZGY3WzRdOworCVVDSEFSICAgICAgIHJvdHJbNF07CisJVUNIQVIgICAgICAgdGVtcFs0XTsKKwlVQ0hBUiAgICAgICB0ZW1wYls0XTsKKworCWZvciAoaT0wIDsgaTw0OyBpKyspCisJeworCQlpZiAoKGluW2ldICYgMHg4MCk9PSAweDgwKQorCQkJYWRkMWJbaV0gPSAweDFiOworCQllbHNlCisJCQlhZGQxYltpXSA9IDB4MDA7CisJfQorCisJc3dhcF9oYWxmc1swXSA9IGluWzJdOyAgICAvKiBTd2FwIGhhbGZzICovCisJc3dhcF9oYWxmc1sxXSA9IGluWzNdOworCXN3YXBfaGFsZnNbMl0gPSBpblswXTsKKwlzd2FwX2hhbGZzWzNdID0gaW5bMV07CisKKwlyb3RsWzBdID0gaW5bM107ICAgICAgICAvKiBSb3RhdGUgbGVmdCA4IGJpdHMgKi8KKwlyb3RsWzFdID0gaW5bMF07CisJcm90bFsyXSA9IGluWzFdOworCXJvdGxbM10gPSBpblsyXTsKKworCWFuZGY3WzBdID0gaW5bMF0gJiAweDdmOworCWFuZGY3WzFdID0gaW5bMV0gJiAweDdmOworCWFuZGY3WzJdID0gaW5bMl0gJiAweDdmOworCWFuZGY3WzNdID0gaW5bM10gJiAweDdmOworCisJZm9yIChpID0gMzsgaT4wOyBpLS0pICAgIC8qIGxvZ2ljYWwgc2hpZnQgbGVmdCAxIGJpdCAqLworCXsKKwkJYW5kZjdbaV0gPSBhbmRmN1tpXSA8PCAxOworCQlpZiAoKGFuZGY3W2ktMV0gJiAweDgwKSA9PSAweDgwKQorCQl7CisJCQlhbmRmN1tpXSA9IChhbmRmN1tpXSB8IDB4MDEpOworCQl9CisJfQorCWFuZGY3WzBdID0gYW5kZjdbMF0gPDwgMTsKKwlhbmRmN1swXSA9IGFuZGY3WzBdICYgMHhmZTsKKworCXhvcl8zMihhZGQxYiwgYW5kZjcsIGFkZDFiZjcpOworCisJeG9yXzMyKGluLCBhZGQxYmY3LCByb3RyKTsKKworCXRlbXBbMF0gPSByb3RyWzBdOyAgICAgICAgIC8qIFJvdGF0ZSByaWdodCA4IGJpdHMgKi8KKwlyb3RyWzBdID0gcm90clsxXTsKKwlyb3RyWzFdID0gcm90clsyXTsKKwlyb3RyWzJdID0gcm90clszXTsKKwlyb3RyWzNdID0gdGVtcFswXTsKKworCXhvcl8zMihhZGQxYmY3LCByb3RyLCB0ZW1wKTsKKwl4b3JfMzIoc3dhcF9oYWxmcywgcm90bCx0ZW1wYik7CisJeG9yXzMyKHRlbXAsIHRlbXBiLCBvdXQpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydG1wX3dlcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnRtcF93ZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWYwYTNiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnRtcF93ZXAuYwpAQCAtMCwwICsxLDUwOCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlydG1wX3dlcC5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJUGF1bCBXdQkJMTAtMjgtMDIJCUluaXRpYWwKKyovCisKKyNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKKworVUlOVCBGQ1NUQUJfMzJbMjU2XSA9Cit7CisJMHgwMDAwMDAwMCwgMHg3NzA3MzA5NiwgMHhlZTBlNjEyYywgMHg5OTA5NTFiYSwKKwkweDA3NmRjNDE5LCAweDcwNmFmNDhmLCAweGU5NjNhNTM1LCAweDllNjQ5NWEzLAorCTB4MGVkYjg4MzIsIDB4NzlkY2I4YTQsIDB4ZTBkNWU5MWUsIDB4OTdkMmQ5ODgsCisJMHgwOWI2NGMyYiwgMHg3ZWIxN2NiZCwgMHhlN2I4MmQwNywgMHg5MGJmMWQ5MSwKKwkweDFkYjcxMDY0LCAweDZhYjAyMGYyLCAweGYzYjk3MTQ4LCAweDg0YmU0MWRlLAorCTB4MWFkYWQ0N2QsIDB4NmRkZGU0ZWIsIDB4ZjRkNGI1NTEsIDB4ODNkMzg1YzcsCisJMHgxMzZjOTg1NiwgMHg2NDZiYThjMCwgMHhmZDYyZjk3YSwgMHg4YTY1YzllYywKKwkweDE0MDE1YzRmLCAweDYzMDY2Y2Q5LCAweGZhMGYzZDYzLCAweDhkMDgwZGY1LAorCTB4M2I2ZTIwYzgsIDB4NGM2OTEwNWUsIDB4ZDU2MDQxZTQsIDB4YTI2NzcxNzIsCisJMHgzYzAzZTRkMSwgMHg0YjA0ZDQ0NywgMHhkMjBkODVmZCwgMHhhNTBhYjU2YiwKKwkweDM1YjVhOGZhLCAweDQyYjI5ODZjLCAweGRiYmJjOWQ2LCAweGFjYmNmOTQwLAorCTB4MzJkODZjZTMsIDB4NDVkZjVjNzUsIDB4ZGNkNjBkY2YsIDB4YWJkMTNkNTksCisJMHgyNmQ5MzBhYywgMHg1MWRlMDAzYSwgMHhjOGQ3NTE4MCwgMHhiZmQwNjExNiwKKwkweDIxYjRmNGI1LCAweDU2YjNjNDIzLCAweGNmYmE5NTk5LCAweGI4YmRhNTBmLAorCTB4MjgwMmI4OWUsIDB4NWYwNTg4MDgsIDB4YzYwY2Q5YjIsIDB4YjEwYmU5MjQsCisJMHgyZjZmN2M4NywgMHg1ODY4NGMxMSwgMHhjMTYxMWRhYiwgMHhiNjY2MmQzZCwKKwkweDc2ZGM0MTkwLCAweDAxZGI3MTA2LCAweDk4ZDIyMGJjLCAweGVmZDUxMDJhLAorCTB4NzFiMTg1ODksIDB4MDZiNmI1MWYsIDB4OWZiZmU0YTUsIDB4ZThiOGQ0MzMsCisJMHg3ODA3YzlhMiwgMHgwZjAwZjkzNCwgMHg5NjA5YTg4ZSwgMHhlMTBlOTgxOCwKKwkweDdmNmEwZGJiLCAweDA4NmQzZDJkLCAweDkxNjQ2Yzk3LCAweGU2NjM1YzAxLAorCTB4NmI2YjUxZjQsIDB4MWM2YzYxNjIsIDB4ODU2NTMwZDgsIDB4ZjI2MjAwNGUsCisJMHg2YzA2OTVlZCwgMHgxYjAxYTU3YiwgMHg4MjA4ZjRjMSwgMHhmNTBmYzQ1NywKKwkweDY1YjBkOWM2LCAweDEyYjdlOTUwLCAweDhiYmViOGVhLCAweGZjYjk4ODdjLAorCTB4NjJkZDFkZGYsIDB4MTVkYTJkNDksIDB4OGNkMzdjZjMsIDB4ZmJkNDRjNjUsCisJMHg0ZGIyNjE1OCwgMHgzYWI1NTFjZSwgMHhhM2JjMDA3NCwgMHhkNGJiMzBlMiwKKwkweDRhZGZhNTQxLCAweDNkZDg5NWQ3LCAweGE0ZDFjNDZkLCAweGQzZDZmNGZiLAorCTB4NDM2OWU5NmEsIDB4MzQ2ZWQ5ZmMsIDB4YWQ2Nzg4NDYsIDB4ZGE2MGI4ZDAsCisJMHg0NDA0MmQ3MywgMHgzMzAzMWRlNSwgMHhhYTBhNGM1ZiwgMHhkZDBkN2NjOSwKKwkweDUwMDU3MTNjLCAweDI3MDI0MWFhLCAweGJlMGIxMDEwLCAweGM5MGMyMDg2LAorCTB4NTc2OGI1MjUsIDB4MjA2Zjg1YjMsIDB4Yjk2NmQ0MDksIDB4Y2U2MWU0OWYsCisJMHg1ZWRlZjkwZSwgMHgyOWQ5Yzk5OCwgMHhiMGQwOTgyMiwgMHhjN2Q3YThiNCwKKwkweDU5YjMzZDE3LCAweDJlYjQwZDgxLCAweGI3YmQ1YzNiLCAweGMwYmE2Y2FkLAorCTB4ZWRiODgzMjAsIDB4OWFiZmIzYjYsIDB4MDNiNmUyMGMsIDB4NzRiMWQyOWEsCisJMHhlYWQ1NDczOSwgMHg5ZGQyNzdhZiwgMHgwNGRiMjYxNSwgMHg3M2RjMTY4MywKKwkweGUzNjMwYjEyLCAweDk0NjQzYjg0LCAweDBkNmQ2YTNlLCAweDdhNmE1YWE4LAorCTB4ZTQwZWNmMGIsIDB4OTMwOWZmOWQsIDB4MGEwMGFlMjcsIDB4N2QwNzllYjEsCisJMHhmMDBmOTM0NCwgMHg4NzA4YTNkMiwgMHgxZTAxZjI2OCwgMHg2OTA2YzJmZSwKKwkweGY3NjI1NzVkLCAweDgwNjU2N2NiLCAweDE5NmMzNjcxLCAweDZlNmIwNmU3LAorCTB4ZmVkNDFiNzYsIDB4ODlkMzJiZTAsIDB4MTBkYTdhNWEsIDB4NjdkZDRhY2MsCisJMHhmOWI5ZGY2ZiwgMHg4ZWJlZWZmOSwgMHgxN2I3YmU0MywgMHg2MGIwOGVkNSwKKwkweGQ2ZDZhM2U4LCAweGExZDE5MzdlLCAweDM4ZDhjMmM0LCAweDRmZGZmMjUyLAorCTB4ZDFiYjY3ZjEsIDB4YTZiYzU3NjcsIDB4M2ZiNTA2ZGQsIDB4NDhiMjM2NGIsCisJMHhkODBkMmJkYSwgMHhhZjBhMWI0YywgMHgzNjAzNGFmNiwgMHg0MTA0N2E2MCwKKwkweGRmNjBlZmMzLCAweGE4NjdkZjU1LCAweDMxNmU4ZWVmLCAweDQ2NjliZTc5LAorCTB4Y2I2MWIzOGMsIDB4YmM2NjgzMWEsIDB4MjU2ZmQyYTAsIDB4NTI2OGUyMzYsCisJMHhjYzBjNzc5NSwgMHhiYjBiNDcwMywgMHgyMjAyMTZiOSwgMHg1NTA1MjYyZiwKKwkweGM1YmEzYmJlLCAweGIyYmQwYjI4LCAweDJiYjQ1YTkyLCAweDVjYjM2YTA0LAorCTB4YzJkN2ZmYTcsIDB4YjVkMGNmMzEsIDB4MmNkOTllOGIsIDB4NWJkZWFlMWQsCisJMHg5YjY0YzJiMCwgMHhlYzYzZjIyNiwgMHg3NTZhYTM5YywgMHgwMjZkOTMwYSwKKwkweDljMDkwNmE5LCAweGViMGUzNjNmLCAweDcyMDc2Nzg1LCAweDA1MDA1NzEzLAorCTB4OTViZjRhODIsIDB4ZTJiODdhMTQsIDB4N2JiMTJiYWUsIDB4MGNiNjFiMzgsCisJMHg5MmQyOGU5YiwgMHhlNWQ1YmUwZCwgMHg3Y2RjZWZiNywgMHgwYmRiZGYyMSwKKwkweDg2ZDNkMmQ0LCAweGYxZDRlMjQyLCAweDY4ZGRiM2Y4LCAweDFmZGE4MzZlLAorCTB4ODFiZTE2Y2QsIDB4ZjZiOTI2NWIsIDB4NmZiMDc3ZTEsIDB4MThiNzQ3NzcsCisJMHg4ODA4NWFlNiwgMHhmZjBmNmE3MCwgMHg2NjA2M2JjYSwgMHgxMTAxMGI1YywKKwkweDhmNjU5ZWZmLCAweGY4NjJhZTY5LCAweDYxNmJmZmQzLCAweDE2NmNjZjQ1LAorCTB4YTAwYWUyNzgsIDB4ZDcwZGQyZWUsIDB4NGUwNDgzNTQsIDB4MzkwM2IzYzIsCisJMHhhNzY3MjY2MSwgMHhkMDYwMTZmNywgMHg0OTY5NDc0ZCwgMHgzZTZlNzdkYiwKKwkweGFlZDE2YTRhLCAweGQ5ZDY1YWRjLCAweDQwZGYwYjY2LCAweDM3ZDgzYmYwLAorCTB4YTliY2FlNTMsIDB4ZGViYjllYzUsIDB4NDdiMmNmN2YsIDB4MzBiNWZmZTksCisJMHhiZGJkZjIxYywgMHhjYWJhYzI4YSwgMHg1M2IzOTMzMCwgMHgyNGI0YTNhNiwKKwkweGJhZDAzNjA1LCAweGNkZDcwNjkzLCAweDU0ZGU1NzI5LCAweDIzZDk2N2JmLAorCTB4YjM2NjdhMmUsIDB4YzQ2MTRhYjgsIDB4NWQ2ODFiMDIsIDB4MmE2ZjJiOTQsCisJMHhiNDBiYmUzNywgMHhjMzBjOGVhMSwgMHg1YTA1ZGYxYiwgMHgyZDAyZWY4ZAorfTsKKworLyoKK1VDSEFSICAgV0VQS0VZW10gPSB7CisJCS8vSVYKKwkJMHgwMCwgMHgxMSwgMHgyMiwKKwkJLy9XRVAgS0VZCisJCTB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsIDB4ODgsIDB4OTksIDB4QUEsIDB4QkIsIDB4Q0MKKwl9OworICovCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlJbml0IFdFUCBmdW5jdGlvbi4KKworCUFyZ3VtZW50czoKKyAgICAgIHBBZAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwS2V5ICAgICAgICBQb2ludGVyIHRvIHRoZSBXRVAgS0VZCisJCUtleUlkCQkgICBXRVAgS2V5IElECisJCUtleUxlbiAgICAgIHRoZSBsZW5ndGggb2YgV0VQIEtFWQorCQlwRGVzdCAgICAgICBQb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiB3aGljaCBFbmNyeXB0aW9uIGRhdGEgd2lsbCBzdG9yZSBpbi4KKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QSW5pdFdlcEVuZ2luZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwS2V5LAorCUlOCVVDSEFSCQkJS2V5SWQsCisJSU4JVUNIQVIJCQlLZXlMZW4sCisJSU4gT1VUCVBVQ0hBUgkJcERlc3QpCit7CisJVUlOVCBpOworCVVDSEFSICAgV0VQS0VZW10gPSB7CisJCS8vSVYKKwkJMHgwMCwgMHgxMSwgMHgyMiwKKwkJLy9XRVAgS0VZCisJCTB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsIDB4ODgsIDB4OTksIDB4QUEsIDB4QkIsIDB4Q0MKKwl9OworCisJcEFkLT5Qcml2YXRlSW5mby5GQ1NDUkMzMiA9IFBQUElOSVRGQ1MzMjsgICAvL0luaXQgY3JjMzIuCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyAgICBpZiAocEFkLT5TdGFDZmcuYkNraXBPbiAmJiAocEFkLT5TdGFDZmcuQ2tpcEZsYWcgJiAweDEwKSAmJiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkpCisgICAgeworICAgICAgICBBUkNGT1VSX0lOSVQoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCwgcEtleSwgS2V5TGVuKTsgIC8vSU5JVCBTQk9YLCBLRVlMRU4rMyhJVikKKyAgICAgICAgTmRpc01vdmVNZW1vcnkocERlc3QsIHBLZXksIDMpOyAgLy9BcHBlbmQgSW5pdCBWZWN0b3IKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworICAgIHsKKwkJTmRpc01vdmVNZW1vcnkoV0VQS0VZICsgMywgcEtleSwgS2V5TGVuKTsKKworICAgICAgICBmb3IoaSA9IDA7IGkgPCAzOyBpKyspCisJCQlXRVBLRVlbaV0gPSBSYW5kb21CeXRlKHBBZCk7ICAgLy9DYWxsIG1sbWUgUmFuZG9tQnl0ZSgpIGZ1bmN0aW9uLgorCQlBUkNGT1VSX0lOSVQoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCwgV0VQS0VZLCBLZXlMZW4gKyAzKTsgIC8vSU5JVCBTQk9YLCBLRVlMRU4rMyhJVikKKworCQlOZGlzTW92ZU1lbW9yeShwRGVzdCwgV0VQS0VZLCAzKTsgIC8vQXBwZW5kIEluaXQgVmVjdG9yCisgICAgfQorCSoocERlc3QrMykgPSAoS2V5SWQgPDwgNik7ICAgICAgIC8vQXBwZW5kIEtFWUlECisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUVuY3J5cHQgdHJhbnNpbWl0dGVkIGRhdGEKKworCUFyZ3VtZW50czoKKyAgICAgIHBBZAkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorICAgICAgcFNyYyAgICAgICAgUG9pbnRlciB0byB0aGUgdHJhbnNpbWl0dGVkIHNvdXJjZSBkYXRhIHRoYXQgd2lsbCBiZSBlbmNyeXB0CisgICAgICBwRGVzdCAgICAgICBQb2ludGVyIHRvIHRoZSBkZXN0aW5hdGlvbiB3aGVyZSBlbnRyeXB0aW9uIGRhdGEgd2lsbCBiZSBzdG9yZSBpbi4KKyAgICAgIExlbgkJCUluZGljYXRlIHRoZSBsZW5ndGggb2YgdGhlIHNvdXJjZSBkYXRhCisKKwlSZXR1cm4gVmFsdWU6CisgICAgICBOb25lCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBFbmNyeXB0RGF0YSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwU3JjLAorCUlOCVBVQ0hBUgkJCXBEZXN0LAorCUlOCVVJTlQJCQlMZW4pCit7CisJcEFkLT5Qcml2YXRlSW5mby5GQ1NDUkMzMiA9IFJUTVBfQ0FMQ19GQ1MzMihwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyLCBwU3JjLCBMZW4pOworCUFSQ0ZPVVJfRU5DUllQVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBwRGVzdCwgcFNyYywgTGVuKTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJRGVjcnlwdCByZWNlaXZlZCBXRVAgZGF0YQorCisJQXJndW1lbnRzOgorCQlwQWRhcHRlcgkJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwU3JjICAgICAgICBQb2ludGVyIHRvIHRoZSByZWNlaXZlZCBkYXRhCisJCUxlbiAgICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIHJlY2VpdmVkIGRhdGEKKworCVJldHVybiBWYWx1ZToKKwkJVFJVRSAgICAgICAgRGVjcnlwdCBXRVAgZGF0YSBzdWNjZXNzCisJCUZBTFNFICAgICAgIERlY3J5cHQgV0VQIGRhdGEgZmFpbGVkCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTglSVE1QU29mdERlY3J5cHRXRVAoCisJSU4gUFJUTVBfQURBUFRFUiAJcEFkLAorCUlOIFBVQ0hBUgkJCXBEYXRhLAorCUlOIFVMT05HCQkJRGF0YUJ5dGVDbnQsCisJSU4gUENJUEhFUl9LRVkJCXBHcm91cEtleSkKK3sKKwlVSU5UCXRyYWlsZmNzOworCVVJTlQgICAgY3JjMzI7CisJVUNIQVIJS2V5SWR4OworCVVDSEFSICAgV0VQS0VZW10gPSB7CisJCS8vSVYKKwkJMHgwMCwgMHgxMSwgMHgyMiwKKwkJLy9XRVAgS0VZCisJCTB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsIDB4ODgsIDB4OTksIDB4QUEsIDB4QkIsIDB4Q0MKKwl9OworCVVDSEFSIAkqcFBheWxvYWQgPSAoVUNIQVIgKilwRGF0YSArIExFTkdUSF84MDJfMTE7CisJVUxPTkcJcGF5bG9hZF9sZW4gPSBEYXRhQnl0ZUNudCAtIExFTkdUSF84MDJfMTE7CisKKwlOZGlzTW92ZU1lbW9yeShXRVBLRVksIHBQYXlsb2FkLCAzKTsgICAgLy9HZXQgV0VQIElWCisKKwlLZXlJZHggPSAoKihwUGF5bG9hZCArIDMpICYgMHhjMCkgPj4gNjsKKwlpZiAocEdyb3VwS2V5W0tleUlkeF0uS2V5TGVuID09IDApCisJCXJldHVybiAoRkFMU0UpOworCisJTmRpc01vdmVNZW1vcnkoV0VQS0VZICsgMywgcEdyb3VwS2V5W0tleUlkeF0uS2V5LCBwR3JvdXBLZXlbS2V5SWR4XS5LZXlMZW4pOworCUFSQ0ZPVVJfSU5JVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBXRVBLRVksIHBHcm91cEtleVtLZXlJZHhdLktleUxlbiArIDMpOworCUFSQ0ZPVVJfREVDUllQVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBwUGF5bG9hZCwgcFBheWxvYWQgKyA0LCBwYXlsb2FkX2xlbiAtIDQpOworCU5kaXNNb3ZlTWVtb3J5KCZ0cmFpbGZjcywgcFBheWxvYWQgKyBwYXlsb2FkX2xlbiAtIDgsIDQpOworCWNyYzMyID0gUlRNUF9DQUxDX0ZDUzMyKFBQUElOSVRGQ1MzMiwgcFBheWxvYWQsIHBheWxvYWRfbGVuIC0gOCk7ICAvL1NraXAgbGFzdCA0IGJ5dGVzKEZDUykuCisJY3JjMzIgXj0gMHhmZmZmZmZmZjsgICAgICAgICAgICAgLyogY29tcGxlbWVudCAqLworCisgICAgaWYoY3JjMzIgIT0gY3B1MmxlMzIodHJhaWxmY3MpKQorICAgIHsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISBXRVAgRGF0YSBDUkMgRXJyb3IgIVxuIikpOwkgLy9DUkMgZXJyb3IuCisJCXJldHVybiAoRkFMU0UpOworCX0KKwlyZXR1cm4gKFRSVUUpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJVGhlIFN0cmVhbSBDaXBoZXIgRW5jcnlwdGlvbiBBbGdvcml0aG0gIkFSQ0ZPVVIiIGluaXRpYWxpemUKKworCUFyZ3VtZW50czoKKwkgICBDdHggICAgICAgICBQb2ludGVyIHRvIEFSQ0ZPVVIgQ09OVEVYVCAoU0JPWCkKKwkJcEtleSAgICAgICAgUG9pbnRlciB0byB0aGUgV0VQIEtFWQorCQlLZXlMZW4gICAgICBJbmRpY2F0ZSB0aGUgbGVuZ3RoIGZvIHRoZSBXRVAgS0VZCisKKwlSZXR1cm4gVmFsdWU6CisJICAgTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBUkNGT1VSX0lOSVQoCisJSU4JUEFSQ0ZPVVJDT05URVhUCUN0eCwKKwlJTglQVUNIQVIJCQlwS2V5LAorCUlOCVVJTlQJCQlLZXlMZW4pCit7CisJVUNIQVIJdCwgdTsKKwlVSU5UCWtleWluZGV4OworCVVJTlQJc3RhdGVpbmRleDsKKwlQVUNIQVIJc3RhdGU7CisJVUlOVAljb3VudGVyOworCisJc3RhdGUgPSBDdHgtPlNUQVRFOworCUN0eC0+WCA9IDA7CisJQ3R4LT5ZID0gMDsKKwlmb3IgKGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgMjU2OyBjb3VudGVyKyspCisJCXN0YXRlW2NvdW50ZXJdID0gKFVDSEFSKWNvdW50ZXI7CisJa2V5aW5kZXggPSAwOworCXN0YXRlaW5kZXggPSAwOworCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCAyNTY7IGNvdW50ZXIrKykKKwl7CisJCXQgPSBzdGF0ZVtjb3VudGVyXTsKKwkJc3RhdGVpbmRleCA9IChzdGF0ZWluZGV4ICsgcEtleVtrZXlpbmRleF0gKyB0KSAmIDB4ZmY7CisJCXUgPSBzdGF0ZVtzdGF0ZWluZGV4XTsKKwkJc3RhdGVbc3RhdGVpbmRleF0gPSB0OworCQlzdGF0ZVtjb3VudGVyXSA9IHU7CisJCWlmICgrK2tleWluZGV4ID49IEtleUxlbikKKwkJCWtleWluZGV4ID0gMDsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlHZXQgYnl0ZXMgZnJvbSBBUkNGT1VSIENPTlRFWFQgKFMtQk9YKQorCisJQXJndW1lbnRzOgorCSAgIEN0eCAgICAgICAgIFBvaW50ZXIgdG8gQVJDRk9VUiBDT05URVhUIChTQk9YKQorCisJUmV0dXJuIFZhbHVlOgorCSAgIFVDSEFSICAtIHRoZSB2YWx1ZSBvZiB0aGUgQVJDRk9VUiBDT05URVhUIChTLUJPWCkKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitVQ0hBUglBUkNGT1VSX0JZVEUoCisJSU4JUEFSQ0ZPVVJDT05URVhUCQlDdHgpCit7CisgIFVJTlQgeDsKKyAgVUlOVCB5OworICBVQ0hBUiBzeCwgc3k7CisgIFBVQ0hBUiBzdGF0ZTsKKworICBzdGF0ZSA9IEN0eC0+U1RBVEU7CisgIHggPSAoQ3R4LT5YICsgMSkgJiAweGZmOworICBzeCA9IHN0YXRlW3hdOworICB5ID0gKHN4ICsgQ3R4LT5ZKSAmIDB4ZmY7CisgIHN5ID0gc3RhdGVbeV07CisgIEN0eC0+WCA9IHg7CisgIEN0eC0+WSA9IHk7CisgIHN0YXRlW3ldID0gc3g7CisgIHN0YXRlW3hdID0gc3k7CisKKyAgcmV0dXJuKHN0YXRlWyhzeCArIHN5KSAmIDB4ZmZdKTsKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJVGhlIFN0cmVhbSBDaXBoZXIgRGVjcnlwdGlvbiBBbGdvcml0aG0KKworCUFyZ3VtZW50czoKKwkJQ3R4ICAgICAgICAgUG9pbnRlciB0byBBUkNGT1VSIENPTlRFWFQgKFNCT1gpCisJCXBEZXN0CQkJUG9pbnRlciB0byB0aGUgRGVzdGluYXRpb24KKwkJcFNyYyAgICAgICAgUG9pbnRlciB0byB0aGUgU291cmNlIGRhdGEKKwkJTGVuICAgICAgICAgSW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgU291cmNlIGRhdGEKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQVJDRk9VUl9ERUNSWVBUKAorCUlOCVBBUkNGT1VSQ09OVEVYVAlDdHgsCisJSU4JUFVDSEFSCQkJcERlc3QsCisJSU4JUFVDSEFSCQkJcFNyYywKKwlJTglVSU5UCQkJTGVuKQoreworCVVJTlQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBMZW47IGkrKykKKwkJcERlc3RbaV0gPSBwU3JjW2ldIF4gQVJDRk9VUl9CWVRFKEN0eCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlUaGUgU3RyZWFtIENpcGhlciBFbmNyeXB0aW9uIEFsZ29yaXRobQorCisJQXJndW1lbnRzOgorCQlDdHggICAgICAgICBQb2ludGVyIHRvIEFSQ0ZPVVIgQ09OVEVYVCAoU0JPWCkKKwkJcERlc3QJCQlQb2ludGVyIHRvIHRoZSBEZXN0aW5hdGlvbgorCQlwU3JjICAgICAgICBQb2ludGVyIHRvIHRoZSBTb3VyY2UgZGF0YQorCQlMZW4gICAgICAgICBJbmRpY2F0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBTb3VyY2UgZHRhCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQVJDRk9VUl9FTkNSWVBUKAorCUlOCVBBUkNGT1VSQ09OVEVYVAlDdHgsCisJSU4JUFVDSEFSCQkJcERlc3QsCisJSU4JUFVDSEFSCQkJcFNyYywKKwlJTglVSU5UCQkJTGVuKQoreworCVVJTlQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBMZW47IGkrKykKKwkJcERlc3RbaV0gPSBwU3JjW2ldIF4gQVJDRk9VUl9CWVRFKEN0eCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlUaGUgU3RyZWFtIENpcGhlciBFbmNyeXB0aW9uIEFsZ29yaXRobSB3aGljaCBjb25mb3JtIHRvIHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50IHRvIGVuY3J5cHQgIEdUSy4KKworCUFyZ3VtZW50czoKKwkJQ3R4ICAgICAgICAgUG9pbnRlciB0byBBUkNGT1VSIENPTlRFWFQgKFNCT1gpCisJCXBEZXN0CQkJUG9pbnRlciB0byB0aGUgRGVzdGluYXRpb24KKwkJcFNyYyAgICAgICAgUG9pbnRlciB0byB0aGUgU291cmNlIGRhdGEKKwkJTGVuICAgICAgICAgSW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgU291cmNlIGR0YQorCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKK1ZPSUQJV1BBQVJDRk9VUl9FTkNSWVBUKAorCUlOCVBBUkNGT1VSQ09OVEVYVAlDdHgsCisJSU4JUFVDSEFSCQkJcERlc3QsCisJSU4JUFVDSEFSCQkJcFNyYywKKwlJTglVSU5UCQkJTGVuKQoreworCVVJTlQgaTsKKyAgICAgICAgLy9kaXNjYXJkIGZpcnN0IDI1NiBieXRlcworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgICAgICAgIEFSQ0ZPVVJfQllURShDdHgpOworCisJZm9yIChpID0gMDsgaSA8IExlbjsgaSsrKQorCQlwRGVzdFtpXSA9IHBTcmNbaV0gXiBBUkNGT1VSX0JZVEUoQ3R4KTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJQ2FsY3VsYXRlIGEgbmV3IEZDUyBnaXZlbiB0aGUgY3VycmVudCBGQ1MgYW5kIHRoZSBuZXcgZGF0YS4KKworCUFyZ3VtZW50czoKKwkJRmNzCSAgICAgIHRoZSBvcmlnaW5hbCBGQ1MgdmFsdWUKKwkJQ3AgICAgICAgICAgcG9pbnRlciB0byB0aGUgZGF0YSB3aGljaCB3aWxsIGJlIGNhbGN1bGF0ZSB0aGUgRkNTCisJCUxlbiAgICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIGRhdGEKKworCVJldHVybiBWYWx1ZToKKwkJVUlOVCAtIEZDUyAzMiBiaXRzCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitVSU5UCVJUTVBfQ0FMQ19GQ1MzMigKKwlJTglVSU5UCUZjcywKKwlJTglQVUNIQVIJQ3AsCisJSU4JSU5UCQlMZW4pCit7CisJd2hpbGUgKExlbi0tKQorCSAgIEZjcyA9ICgoKEZjcykgPj4gOCkgXiBGQ1NUQUJfMzJbKChGY3MpIF4gKCpDcCsrKSkgJiAweGZmXSk7CisKKwlyZXR1cm4gKEZjcyk7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCUdldCBsYXN0IEZDUyBhbmQgZW5jcnlwdCBpdCB0byB0aGUgZGVzdGluYXRpb24KKworCUFyZ3VtZW50czoKKwkJcERlc3QJCQlQb2ludGVyIHRvIHRoZSBEZXN0aW5hdGlvbgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVE1QU2V0SUNWKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUglwRGVzdCkKK3sKKwlwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyIF49IDB4ZmZmZmZmZmY7ICAgICAgICAgICAgIC8qIGNvbXBsZW1lbnQgKi8KKwlwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyID0gY3B1MmxlMzIocEFkLT5Qcml2YXRlSW5mby5GQ1NDUkMzMik7CisKKwlBUkNGT1VSX0VOQ1JZUFQoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCwgcERlc3QsIChQVUNIQVIpICZwQWQtPlByaXZhdGVJbmZvLkZDU0NSQzMyLCA0KTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnR1c2JfYnVsay5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnR1c2JfYnVsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMDU3MDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydHVzYl9idWxrLmMKQEAgLTAsMCArMSwxMzgyIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0dXNiX2J1bGsuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlOYW1lCQlEYXRlCQlNb2RpZmljYXRpb24gbG9ncworCVBhdWwgTGluCTA2LTI1LTIwMDQJY3JlYXRlZAorCisqLworCisjaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCisvLyBNYXRjaCB0b3RhbCA2IGJ1bGtvdXQgZW5kcG9pbnQgdG8gY29ycmVzcG9uZGluZyBxdWV1ZS4KK1VDSEFSCUVwVG9RdWV1ZVs2XT17RklGT19FRENBLCBGSUZPX0VEQ0EsIEZJRk9fRURDQSwgRklGT19FRENBLCBGSUZPX0VEQ0EsIEZJRk9fTUdNVH07CisKKy8vc3RhdGljIEJPT0xFQU4gU2luZ2xlQnVsa091dCA9IEZBTFNFOworCit2b2lkIFJUVVNCX0ZJTExfQlVMS19VUkIgKHN0cnVjdCB1cmIgKnBVcmIsCisJc3RydWN0IHVzYl9kZXZpY2UgKnBVc2JfRGV2LAorCXVuc2lnbmVkIGludCBidWxrcGlwZSwKKwl2b2lkICpwVHJhbnNmZXJCdWYsCisJaW50IEJ1ZlNpemUsCisJdXNiX2NvbXBsZXRlX3QgQ29tcGxldGUsCisJdm9pZCAqcENvbnRleHQpCit7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCisJdXNiX2ZpbGxfYnVsa191cmIocFVyYiwgcFVzYl9EZXYsIGJ1bGtwaXBlLCBwVHJhbnNmZXJCdWYsIEJ1ZlNpemUsICh1c2JfY29tcGxldGVfdClDb21wbGV0ZSwgcENvbnRleHQpOworI2Vsc2UKKwlGSUxMX0JVTEtfVVJCKHBVcmIsIHBVc2JfRGV2LCBidWxrcGlwZSwgcFRyYW5zZmVyQnVmLCBCdWZTaXplLCBDb21wbGV0ZSwgcENvbnRleHQpOworI2VuZGlmCisKK30KKworVk9JRAlSVFVTQkluaXRUeERlc2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFRYX0NPTlRFWFQJCXBUeENvbnRleHQsCisJSU4JVUNIQVIJCQlCdWxrT3V0UGlwZUlkLAorCUlOCXVzYl9jb21wbGV0ZV90CUZ1bmMpCit7CisJUFVSQgkJCQlwVXJiOworCVBVQ0hBUgkJCQlwU3JjID0gTlVMTDsKKwlQT1NfQ09PS0lFCQkJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKworCXBVcmIgPSBwVHhDb250ZXh0LT5wVXJiOworCUFTU0VSVChwVXJiKTsKKworCS8vIFN0b3JlIEJ1bGtPdXQgUGlwZUlkCisJcFR4Q29udGV4dC0+QnVsa091dFBpcGVJZCA9IEJ1bGtPdXRQaXBlSWQ7CisKKwlpZiAocFR4Q29udGV4dC0+YkFnZ3JlZ2F0aWJsZSkKKwl7CisJCXBTcmMgPSAmcFR4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXItPkFnZ3JlZ2F0aW9uWzJdOworCX0KKwllbHNlCisJeworCQlwU3JjID0gKFBVQ0hBUikgcFR4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0OworCX0KKworCisJLy9Jbml0aWFsaXplIGEgdHggYnVsayB1cmIKKwlSVFVTQl9GSUxMX0JVTEtfVVJCKHBVcmIsCisJCQkJCQlwT2JqLT5wVXNiX0RldiwKKwkJCQkJCXVzYl9zbmRidWxrcGlwZShwT2JqLT5wVXNiX0RldiwgcEFkLT5CdWxrT3V0RXBBZGRyW0J1bGtPdXRQaXBlSWRdKSwKKwkJCQkJCXBTcmMsCisJCQkJCQlwVHhDb250ZXh0LT5CdWxrT3V0U2l6ZSwKKwkJCQkJCUZ1bmMsCisJCQkJCQlwVHhDb250ZXh0KTsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKwlpZiAocFR4Q29udGV4dC0+YkFnZ3JlZ2F0aWJsZSkKKwkJcFVyYi0+dHJhbnNmZXJfZG1hCT0gKHBUeENvbnRleHQtPmRhdGFfZG1hICsgVFhfQlVGRkVSX05PUk1TSVpFICsgMik7CisJZWxzZQorCQlwVXJiLT50cmFuc2Zlcl9kbWEJPSBwVHhDb250ZXh0LT5kYXRhX2RtYTsKKworCXBVcmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworI2VuZGlmCisKK30KKworVk9JRAlSVFVTQkluaXRIVFR4RGVzYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQSFRfVFhfQ09OVEVYVAlwVHhDb250ZXh0LAorCUlOCVVDSEFSCQkJQnVsa091dFBpcGVJZCwKKwlJTglVTE9ORwkJCUJ1bGtPdXRTaXplLAorCUlOCXVzYl9jb21wbGV0ZV90CUZ1bmMpCit7CisJUFVSQgkJCQlwVXJiOworCVBVQ0hBUgkJCQlwU3JjID0gTlVMTDsKKwlQT1NfQ09PS0lFCQkJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKworCXBVcmIgPSBwVHhDb250ZXh0LT5wVXJiOworCUFTU0VSVChwVXJiKTsKKworCS8vIFN0b3JlIEJ1bGtPdXQgUGlwZUlkCisJcFR4Q29udGV4dC0+QnVsa091dFBpcGVJZCA9IEJ1bGtPdXRQaXBlSWQ7CisKKwlwU3JjID0gJnBUeENvbnRleHQtPlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtwVHhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uXTsKKworCisJLy9Jbml0aWFsaXplIGEgdHggYnVsayB1cmIKKwlSVFVTQl9GSUxMX0JVTEtfVVJCKHBVcmIsCisJCQkJCQlwT2JqLT5wVXNiX0RldiwKKwkJCQkJCXVzYl9zbmRidWxrcGlwZShwT2JqLT5wVXNiX0RldiwgcEFkLT5CdWxrT3V0RXBBZGRyW0J1bGtPdXRQaXBlSWRdKSwKKwkJCQkJCXBTcmMsCisJCQkJCQlCdWxrT3V0U2l6ZSwKKwkJCQkJCUZ1bmMsCisJCQkJCQlwVHhDb250ZXh0KTsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKwlwVXJiLT50cmFuc2Zlcl9kbWEJPSAocFR4Q29udGV4dC0+ZGF0YV9kbWEgKyBwVHhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uKTsKKwlwVXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKyNlbmRpZgorCit9CisKK1ZPSUQJUlRVU0JJbml0UnhEZXNjKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBSWF9DT05URVhUCQlwUnhDb250ZXh0KQoreworCVBVUkIJCQkJcFVyYjsKKwlQT1NfQ09PS0lFCQkJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKwlVTE9ORwkJCQlSWF9idWxrX3NpemU7CisKKworCXBVcmIgPSBwUnhDb250ZXh0LT5wVXJiOworCUFTU0VSVChwVXJiKTsKKworCWlmICggcEFkLT5CdWxrSW5NYXhQYWNrZXRTaXplID09IDY0KQorCQlSWF9idWxrX3NpemUgPSA0MDk2OworCWVsc2UKKwkJUlhfYnVsa19zaXplID0gTUFYX1JYQlVMS19TSVpFOworCisJLy9Jbml0aWFsaXplIGEgcnggYnVsayB1cmIKKwlSVFVTQl9GSUxMX0JVTEtfVVJCKHBVcmIsCisJCQkJCQlwT2JqLT5wVXNiX0RldiwKKwkJCQkJCXVzYl9yY3ZidWxrcGlwZShwT2JqLT5wVXNiX0RldiwgcEFkLT5CdWxrSW5FcEFkZHIpLAorCQkJCQkJJihwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlcltwQWQtPk5leHRSeEJ1bGtJblBvc2l0aW9uXSksCisJCQkJCQlSWF9idWxrX3NpemUgLSAocEFkLT5OZXh0UnhCdWxrSW5Qb3NpdGlvbiksCisJCQkJCQkodXNiX2NvbXBsZXRlX3QpUlRVU0JCdWxrUnhDb21wbGV0ZSwKKwkJCQkJCSh2b2lkICopcFJ4Q29udGV4dCk7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCisJcFVyYi0+dHJhbnNmZXJfZG1hCT0gcFJ4Q29udGV4dC0+ZGF0YV9kbWEgKyBwQWQtPk5leHRSeEJ1bGtJblBvc2l0aW9uOworCXBVcmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworI2VuZGlmCisKKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKKyNkZWZpbmUgQlVMS19PVVRfTE9DSyhwTG9jaywgSXJxRmxhZ3MpCVwKKwkJaWYoMSAvKiEoaW5faW50ZXJydXB0KCkgJiAweGZmZmYwMDAwKSovKQlcCisJCQlSVE1QX0lSUV9MT0NLKChwTG9jayksIElycUZsYWdzKTsKKworI2RlZmluZSBCVUxLX09VVF9VTkxPQ0socExvY2ssIElycUZsYWdzKQlcCisJCWlmKDEgLyohKGluX2ludGVycnVwdCgpICYgMHhmZmZmMDAwMCkqLykJXAorCQkJUlRNUF9JUlFfVU5MT0NLKChwTG9jayksIElycUZsYWdzKTsKKworCitWT0lECVJUVVNCQnVsa091dERhdGFQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlCdWxrT3V0UGlwZUlkLAorCUlOCVVDSEFSCQkJSW5kZXgpCit7CisKKwlQSFRfVFhfQ09OVEVYVAlwSFRUWENvbnRleHQ7CisJUFVSQgkJCXBVcmI7CisJaW50CQkJCXJldCA9IDA7CisJUFRYSU5GT19TVFJVQwlwVHhJbmZvLCBwTGFzdFR4SW5mbyA9IE5VTEw7CisJUFRYV0lfU1RSVUMgICAgICAgICAgICAgcFR4V0k7CisJVUxPTkcJCQlUbXBCdWxrRW5kUG9zLCBUaGlzQnVsa1NpemU7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFncyA9IDAsIElycUZsYWdzMiA9IDA7CisJUFVDSEFSCQkJcFdpcmVsZXNzUGt0LCBwQXBwZW5kYW50OworCUJPT0xFQU4JCQliVHhRTGFzdFJvdW5kID0gRkFMU0U7CisJVUNIQVIJCQlhbGx6ZXJvWzRdPSB7MHgwLDB4MCwweDAsMHgwfTsKKworCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwlpZiAoKHBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPT0gVFJVRSkgfHwgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9UWCkpCisJeworCQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlwQWQtPkJ1bGtPdXRQZW5kaW5nW0J1bGtPdXRQaXBlSWRdID0gVFJVRTsKKworCWlmICghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpCisJCSkKKwl7CisJCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBGQUxTRTsKKwkJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJCXJldHVybjsKKwl9CisJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisKKworCXBIVFRYQ29udGV4dCA9ICYocEFkLT5UeENvbnRleHRbQnVsa091dFBpcGVJZF0pOworCisJQlVMS19PVVRfTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzMik7CisJaWYgKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID09IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikKKwkJfHwgKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLTgpID09IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikpCisJeworCQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFnczIpOworCisJCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJcEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9IEZBTFNFOworCisJCS8vIENsZWFyIERhdGEgZmxhZworCQlSVFVTQl9DTEVBUl9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfRlJBRyA8PCBCdWxrT3V0UGlwZUlkKSk7CisJCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwgQnVsa091dFBpcGVJZCkpOworCisJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLy8gQ2xlYXIgRGF0YSBmbGFnCisJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgKGZSVFVTQl9CVUxLX09VVF9EQVRBX0ZSQUcgPDwgQnVsa091dFBpcGVJZCkpOworCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwgQnVsa091dFBpcGVJZCkpOworCisJLy9EQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkJ1bGtPdXQtQjpJPTB4JWx4LCBDV1Bvcz0lbGQsIENXUlBvcz0lbGQsIE5CUG9zPSVsZCwgRU5CUG9zPSVsZCwgYkNvcHk9JWQhXG4iLCBpbl9pbnRlcnJ1cHQoKSwKKwkvLwkJCQkJCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zLCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24sCisJLy8JCQkJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQpKTsKKwlwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24gPSBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uOworCVRoaXNCdWxrU2l6ZSA9IDA7CisJVG1wQnVsa0VuZFBvcyA9IHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbjsKKwlwV2lyZWxlc3NQa3QgPSAmcEhUVFhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbMF07CisKKwlpZiAoKHBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkID09IFRSVUUpKQorCXsKKwkJaWYgKFJUTVBFcXVhbE1lbW9yeShwSFRUWENvbnRleHQtPlNhdmVkUGFkLCBhbGx6ZXJvLDQpKQorCQl7CisJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsKCJlMSwgYWxsemVybyA6ICV4ICAleCAgJXggICV4ICAleCAgJXggICV4ICAleCBcbiIsCisJCQkJcEhUVFhDb250ZXh0LT5TYXZlZFBhZFswXSwgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFsxXSwgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFsyXSxwSFRUWENvbnRleHQtPlNhdmVkUGFkWzNdCisJCQkJLHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbNF0sIHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbNV0sIHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbNl0scEhUVFhDb250ZXh0LT5TYXZlZFBhZFs3XSkpOworCQl9CisJCU5kaXNNb3ZlTWVtb3J5KCZwV2lyZWxlc3NQa3RbVG1wQnVsa0VuZFBvc10sIHBIVFRYQ29udGV4dC0+U2F2ZWRQYWQsIDgpOworCQlwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCA9IEZBTFNFOworCQlpZiAocEFkLT5iRm9yY2VQcmludFRYID09IFRSVUUpCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJUVVNCQnVsa091dERhdGFQYWNrZXQgLS0+IENPUFkgUEFELiBDdXJXcml0ZSA9ICVsZCwgTmV4dEJ1bGsgPSAlbGQuICAgRU5leHRCdWxrID0gJWxkLlxuIiwgICBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbikpOworCX0KKworCWRvCisJeworCQlwVHhJbmZvID0gKFBUWElORk9fU1RSVUMpJnBXaXJlbGVzc1BrdFtUbXBCdWxrRW5kUG9zXTsKKwkJcFR4V0kgPSAoUFRYV0lfU1RSVUMpJnBXaXJlbGVzc1BrdFtUbXBCdWxrRW5kUG9zICsgVFhJTkZPX1NJWkVdOworCisJCWlmIChwQWQtPmJGb3JjZVByaW50VFggPT0gVFJVRSkKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUVVNCQnVsa091dERhdGFQYWNrZXQgQU1QRFUgPSAlZC5cbiIsICAgcFR4V0ktPkFNUERVKSk7CisKKwkJLy8gYWRkIGJ5IEl2ZXJzb24sIGxpbWl0IEJ1bGtPdXQgc2l6ZSB0byA0ayB0byBwYXNzIFdNTSBiIG1vZGUgMlQxUiB0ZXN0IGl0ZW1zCisJCS8vaWYgKChUaGlzQnVsa1NpemUgIT0gMCkgICYmIChwVHhXSS0+QU1QRFUgPT0gMCkpCisJCWlmICgoVGhpc0J1bGtTaXplICE9IDApICYmIChwVHhXSS0+UEhZTU9ERSA9PSBNT0RFX0NDSykpCisJCXsKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisJCQkvKkl2ZXJzb24gQWRkIGZvciBBTUFaT04gVVNCIChSVDIwNzAgJiYgIFJUMzA3MCkgdG8gcGFzcyBXTU0gQTItVDQgfiBBMi1UMTAqLworCQkJaWYoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XTU1fSU5VU0VEKSkKKwkJCXsKKwkJCQkvKkl2ZXJzb24gcGF0Y2ggZm9yIFdNTSBBNS1UMDcgLFdpcmVsZXNzU3RhVG9XaXJlbGVzc1N0YSBkbyBub3QgYnVsayBvdXQgYWdncmVnYXRlKi8KKwkJCQlpZihwVHhXSS0+UGFja2V0SWQgPT0gNikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworICAgICAgICAgICAgICAgIAlicmVhazsKKyAgICAgICAgICAgICAgICB9CisJCQkJZWxzZSBpZiAoQnVsa091dFBpcGVJZCA9PSAxKQorCQkJCXsKKwkJCQkJLypCSyAgTm8gTGltaXQgQnVsa091dCBzaXplIC4qLworCQkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gVG1wQnVsa0VuZFBvczsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UgaWYgKCgoVGhpc0J1bGtTaXplJjB4ZmZmZjgwMDApICE9IDApIHx8ICgoKFRoaXNCdWxrU2l6ZSYweDEwMDApID09IDB4MTAwMCkgJiYgIChCdWxrT3V0UGlwZUlkID09IDApICApKQorCQkJCXsKKwkJCQkJLypCRSAgTGltaXQgQnVsa091dCBzaXplIHRvIGFib3V0IDRrIGJ5dGVzLiovCisJCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKCgoVGhpc0J1bGtTaXplJjB4MWMwMCkgPT0gMHgxYzAwKSAmJiAgKEJ1bGtPdXRQaXBlSWQgPT0gMikgICkpCisJCQkJeworCQkJCQkvKlZJIExpbWl0IEJ1bGtPdXQgc2l6ZSB0byBhYm91dCA3ayBieXRlcy4qLworCQkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gVG1wQnVsa0VuZFBvczsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UgaWYgKCgoVGhpc0J1bGtTaXplJjB4ZmZmZjgwMDApICE9IDApIHx8ICgoKFRoaXNCdWxrU2l6ZSYweDI1MDApID09IDB4MjUwMCkgJiYgIChCdWxrT3V0UGlwZUlkID09IDMpICApKQorCQkJCXsKKwkJCQkJLypWTyBMaW1pdCBCdWxrT3V0IHNpemUgdG8gYWJvdXQgOWsgYnl0ZXMuKi8KKwkJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKCgoVGhpc0J1bGtTaXplJjB4ZmZmZjgwMDApICE9IDApIHx8ICgoVGhpc0J1bGtTaXplJjB4MTAwMCkgPT0gMHgxMDAwKSkKKwkJCXsKKwkJCQkvKiBMaW1pdCBCdWxrT3V0IHNpemUgdG8gYWJvdXQgNGsgYnl0ZXMuKi8KKwkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gVG1wQnVsa0VuZFBvczsKKwkJCQlicmVhazsKKwkJCX0KKyNlbHNlCisJCQlpZiAoKChUaGlzQnVsa1NpemUmMHhmZmZmODAwMCkgIT0gMCkgfHwgKChUaGlzQnVsa1NpemUmMHgxMDAwKSA9PSAweDEwMDApKQorCQkJeworCQkJCS8vIExpbWl0IEJ1bGtPdXQgc2l6ZSB0byBhYm91dCA0ayBieXRlcy4KKwkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gVG1wQnVsa0VuZFBvczsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZiAvLyBJTkZfQU1BWk9OX1NFIC8vCisKKwkJCWVsc2UgaWYgKCgocEFkLT5CdWxrT3V0TWF4UGFja2V0U2l6ZSA8IDUxMikgJiYgKChUaGlzQnVsa1NpemUmMHhmZmZmZjgwMCkgIT0gMCkgKSAvKnx8ICggKFRoaXNCdWxrU2l6ZSAhPSAwKSAgJiYgKHBUeFdJLT5BTVBEVSA9PSAwKSkqLykKKwkJCXsKKwkJCQkvLyBGb3IgVVNCIDEuMSBvciBwZWVyIHdoaWNoIGRpZG4ndCBzdXBwb3J0IEFNUERVLCBsaW1pdCB0aGUgQnVsa091dCBzaXplLgorCQkJCS8vIEZvciBwZXJmb3JtZW5jZSBpbiBiL2cgbW9kZSwgbm93IGp1c3QgY2hlY2sgZm9yIFVTQiAxLjEgYW5kIGRpZG4ndCBjYXJlIGFib3V0IHRoZSBBUE1EVSBvciBub3QhIDIwMDgvMDYvMDQuCisJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLy8gZW5kIEl2ZXJzb24KKwkJZWxzZQorCQl7CisjaWZkZWYgSU5GX0FNQVpPTl9TRQorLy8jaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisvLwkJCWlmKCgoVGhpc0J1bGtTaXplJjB4ZmZmZjgwMDApICE9IDApIHx8ICgoVGhpc0J1bGtTaXplJjB4NjAwMCkgPT0gMHg2MDAwKSB8fCAoIChUaGlzQnVsa1NpemUgIT0gMCkgICYmIChwVHhXSS0+QU1QRFUgPT0gMCkpKQorLy8JCQl7CisvLwkJCQkvKiBBTUFaT05fU0U6IEJHIG1vZGUgRGlzYWJsZSBCdWxrT3V0IEFnZ3JlZ2F0ZSwgTiBtb2RlIEJ1bGtPdXQgQWdncmVnYWV0IHNpemUgMjRLICovCisvLwkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gVG1wQnVsa0VuZFBvczsKKy8vICAgICAgICAgICAgICAgYnJlYWs7CisvLwkJCX0KKy8vCQkJZWxzZQorLy8jZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisvLwkJCXsKKwkJCQlpZihPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1dNTV9JTlVTRUQpICYmIChwVHhXSS0+QU1QRFUgPT0gMCkpCisJCQkJeworCQkJCQlpZiAoKChwQWQtPkJ1bGtPdXRNYXhQYWNrZXRTaXplIDwgNTEyKSAmJiAoKFRoaXNCdWxrU2l6ZSYweGZmZmZmODAwKSAhPSAwKSkgfHwKKwkJCQkJCShUaGlzQnVsa1NpemUgIT0gMCkpCisJCQkJCXsKKwkJCQkJCS8qIEFNQVpPTl9TRTogUlQyMDcwICBEaXNhYmxlIEJ1bGtPdXQgQWdncmVnYXRlIHdoZW4gV01NIGZvciBVU0IgaXNzdWUgKi8KKwkJCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisvKgorCQkJCWVsc2UgaWYgKCgoVGhpc0J1bGtTaXplJjB4ZmZmZjgwMDApICE9IDApIHx8ICgoVGhpc0J1bGtTaXplJjB4NjAwMCkgPT0gMHg2MDAwKSkKKwkJCQl7CisJCQkJCS8vIExpbWl0IEJ1bGtPdXQgc2l6ZSB0byBhYm91dCAyNGsgYnl0ZXMuCisJCQkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisqLworI2VuZGlmIC8vIElORl9BTUFaT05fU0UgLy8KKworCQkJaWYgKCgoVGhpc0J1bGtTaXplJjB4ZmZmZjgwMDApICE9IDApIHx8ICgoVGhpc0J1bGtTaXplJjB4NjAwMCkgPT0gMHg2MDAwKSkKKwkJCXsJLy8gTGltaXQgQnVsa091dCBzaXplIHRvIGFib3V0IDI0ayBieXRlcy4KKwkJCQlwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uID0gVG1wQnVsa0VuZFBvczsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJZWxzZSBpZiAoKChwQWQtPkJ1bGtPdXRNYXhQYWNrZXRTaXplIDwgNTEyKSAmJiAoKFRoaXNCdWxrU2l6ZSYweGZmZmZmODAwKSAhPSAwKSApIC8qfHwgKCAoVGhpc0J1bGtTaXplICE9IDApICAmJiAocFR4V0ktPkFNUERVID09IDApKSovKQorCQkJewkvLyBGb3IgVVNCIDEuMSBvciBwZWVyIHdoaWNoIGRpZG4ndCBzdXBwb3J0IEFNUERVLCBsaW1pdCB0aGUgQnVsa091dCBzaXplLgorCQkJCS8vIEZvciBwZXJmb3JtZW5jZSBpbiBiL2cgbW9kZSwgbm93IGp1c3QgY2hlY2sgZm9yIFVTQiAxLjEgYW5kIGRpZG4ndCBjYXJlIGFib3V0IHRoZSBBUE1EVSBvciBub3QhIDIwMDgvMDYvMDQuCisJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IFRtcEJ1bGtFbmRQb3M7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoVG1wQnVsa0VuZFBvcyA9PSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pCisJCXsKKwkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSBUbXBCdWxrRW5kUG9zOworCQkJYnJlYWs7CisJCX0KKwkJLy9QUyBwYWNrZXRzIHVzZSBIQ0NBIHF1ZXVlIHdoZW4gZGVxdWV1ZSBmcm9tIFBTIHVuaWNhc3QgcXVldWUgKFdpRmkgV1BBMiBNQTlfRFQxIGZvciBNYXJ2ZWxsIEIgU1RBKQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCWlmIChwVHhJbmZvLT5RU0VMICE9IEZJRk9fRURDQSkKKwkJeworCQkJcHJpbnRrKCIlcygpOiA9PT09PiBwVHhJbmZvLT5RdWV1ZVNlbCglZCkhPSBGSUZPX0VEQ0EhISEhXG4iLCBfX0ZVTkNUSU9OX18sIHBUeEluZm8tPlFTRUwpOworCQkJcHJpbnRrKCJcdENXUG9zPSVsZCwgTkJQb3M9JWxkLCBFTkJQb3M9JWxkLCBiQ29weT0lZCFcbiIsIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uLCBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCk7CisJCQloZXhfZHVtcCgiV3JvbmcgUVNlbCBQa3Q6IiwgKFBVQ0hBUikmcFdpcmVsZXNzUGt0W1RtcEJ1bGtFbmRQb3NdLCAocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uIC0gcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uKSk7CisJCX0KKwkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCWlmIChwVHhJbmZvLT5VU0JETUFUeFBrdExlbiA8PSA4KQorCQl7CisJCQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFnczIpOworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IgLypSVF9ERUJVR19UUkFDRSovLCgiZTIsIFVTQkRNQVR4UGt0TGVuPT0wLCBTaXplPSVsZCwgYkNTUGFkPSVkLCBDV1Bvcz0lbGQsIE5CUG9zPSVsZCwgQ1dSUG9zPSVsZCFcbiIsCisJCQkJCXBIVFRYQ29udGV4dC0+QnVsa091dFNpemUsIHBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MpKTsKKwkJCXsKKwkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IgLypSVF9ERUJVR19UUkFDRSovLCgiJXggICV4ICAleCAgJXggICV4ICAleCAgJXggICV4IFxuIiwKKwkJCQkJcEhUVFhDb250ZXh0LT5TYXZlZFBhZFswXSwgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFsxXSwgcEhUVFhDb250ZXh0LT5TYXZlZFBhZFsyXSxwSFRUWENvbnRleHQtPlNhdmVkUGFkWzNdCisJCQkJCSxwSFRUWENvbnRleHQtPlNhdmVkUGFkWzRdLCBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzVdLCBwSFRUWENvbnRleHQtPlNhdmVkUGFkWzZdLHBIVFRYQ29udGV4dC0+U2F2ZWRQYWRbN10pKTsKKwkJCX0KKwkJCXBBZC0+YkZvcmNlUHJpbnRUWCA9IFRSVUU7CisJCQlCVUxLX09VVF9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW0J1bGtPdXRQaXBlSWRdID0gRkFMU0U7CisJCQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJCS8vREJHUFJJTlQoUlRfREVCVUdfTE9VRCwoIk91dDpwVHhJbmZvLT5VU0JETUFUeFBrdExlbj0lZCFcbiIsIHBUeEluZm8tPlVTQkRNQVR4UGt0TGVuKSk7CisJCQlyZXR1cm47CisJCX0KKworCQkJLy8gSW5jcmVhc2UgVG90YWwgdHJhbnNtaXQgYnl0ZSBjb3VudGVyCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHJhbnNtaXR0ZWRCeXRlQ291bnQgKz0gIHBUeFdJLT5NUERVdG90YWxCeXRlQ291bnQ7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRCeXRlQ291bnQgKz0gIHBUeFdJLT5NUERVdG90YWxCeXRlQ291bnQ7CisKKwkJcExhc3RUeEluZm8gPSBwVHhJbmZvOworCisJCS8vIE1ha2Ugc3VyZSB3ZSB1c2UgRURDQSBRVUVVRS4KKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJcFR4SW5mby0+UVNFTCA9IEZJRk9fRURDQTsgLy9QUyBwYWNrZXRzIHVzZSBIQ0NBIHF1ZXVlIHdoZW4gZGVxdWV1ZSBmcm9tIFBTIHVuaWNhc3QgcXVldWUgKFdpRmkgV1BBMiBNQTlfRFQxIGZvciBNYXJ2ZWxsIEIgU1RBKQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQlUaGlzQnVsa1NpemUgKz0gKHBUeEluZm8tPlVTQkRNQVR4UGt0TGVuKzQpOworCQlUbXBCdWxrRW5kUG9zICs9IChwVHhJbmZvLT5VU0JETUFUeFBrdExlbis0KTsKKworCQlpZiAoVG1wQnVsa0VuZFBvcyAhPSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pCisJCQlwVHhJbmZvLT5VU0JETUFOZXh0VkxEID0gMTsKKworCQlpZiAocFR4SW5mby0+U3dVc2VMYXN0Um91bmQgPT0gMSkKKwkJeworCQkJaWYgKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA9PSA4KQorCQkJCXBUeEluZm8tPlVTQkRNQU5leHRWTEQgPSAwOworCQkJcFR4SW5mby0+U3dVc2VMYXN0Um91bmQgPSAwOworCisJCQliVHhRTGFzdFJvdW5kID0gVFJVRTsKKwkJCXBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gPSA4OworCisJI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJCVJUTVBEZXNjcmlwdG9yRW5kaWFuQ2hhbmdlKChQVUNIQVIpcFR4SW5mbywgVFlQRV9UWElORk8pOworCQkJUlRNUFdJRW5kaWFuQ2hhbmdlKChQVUNIQVIpcFR4V0ksIFRZUEVfVFhXSSk7CisJI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworCQkJYnJlYWs7CisJCX0KKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJUlRNUERlc2NyaXB0b3JFbmRpYW5DaGFuZ2UoKFBVQ0hBUilwVHhJbmZvLCBUWVBFX1RYSU5GTyk7CisJCVJUTVBXSUVuZGlhbkNoYW5nZSgoUFVDSEFSKXBUeFdJLCBUWVBFX1RYV0kpOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworCX13aGlsZSAoVFJVRSk7CisKKwkvLyBhZGp1c3QgdGhlIHBUeEluZm8tPlVTQkRNQU5leHRWTEQgdmFsdWUgb2YgbGFzdCBwVHhJbmZvLgorCWlmIChwTGFzdFR4SW5mbykKKwl7CisjaWZkZWYgUlRfQklHX0VORElBTgorCQlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKXBMYXN0VHhJbmZvLCBUWVBFX1RYSU5GTyk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCQlwTGFzdFR4SW5mby0+VVNCRE1BTmV4dFZMRCA9IDA7CisjaWZkZWYgUlRfQklHX0VORElBTgorCQlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKXBMYXN0VHhJbmZvLCBUWVBFX1RYSU5GTyk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCX0KKworCS8qCisJCVdlIG5lZWQgdG8gY29weSBTYXZlZFBhZCB3aGVuIGZvbGxvd2luZyBjb25kaXRpb24gbWF0Y2hlZCEKKwkJCTEuIE5vdCB0aGUgbGFzdCByb3VuZCBvZiB0aGUgVHhRdWV1ZSBhbmQKKwkJCTIuIGFueSBtYXRjaCBvZiBmb2xsb3dpbmcgY2FzZXM6CisJCQkJKDEpLiBUaGUgRW5kIFBvc2l0aW9uIG9mIHRoaXMgYnVsayBvdXQgaXMgcmVhY2ggdG8gdGhlIEN1cnJlbmN0IFdyaXRlIHBvc2l0aW9uIGFuZAorCQkJCQkJdGhlIFR4SW5mbyBhbmQgcmVsYXRlZCBoZWFkZXIgYWxyZWFkeSB3cml0ZSB0byB0aGUgQ3VyV3JpdGVQb3NpdGlvbi4KKwkJCSAgIAkJPT4oRU5leHRCdWxrT3V0UG9zaXRpb24gPT0gQ3VyV3JpdGVQb3NpdGlvbikgJiYgKEN1cldyaXRlUmVhbFBvcyA+IEN1cldyaXRlUG9zaXRpb24pCisKKwkJCQkoMikuIFRoZSBFbmRQb3NpdGlvbiBvZiB0aGUgYnVsayBvdXQgaXMgbm90IHJlYWNoIHRvIHRoZSBDdXJyZW50IFdyaXRlIFBvc2l0aW9uLgorCQkJCQk9PihFTmV4dEJ1bGtPdXRQb3NpdGlvbiAhPSBDdXJXcml0ZVBvc2l0aW9uKQorCSovCisJaWYgKChiVHhRTGFzdFJvdW5kID09IEZBTFNFKSAmJgorCQkgKCgocEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9PSBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24pICYmIChwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyA+IHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbikpIHx8CisJCSAgKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24gIT0gcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkKKwkJKQorCXsKKwkJTmRpc01vdmVNZW1vcnkocEhUVFhDb250ZXh0LT5TYXZlZFBhZCwgJnBXaXJlbGVzc1BrdFtwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uXSwgOCk7CisJCXBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkID0gVFJVRTsKKwkJaWYgKFJUTVBFcXVhbE1lbW9yeShwSFRUWENvbnRleHQtPlNhdmVkUGFkLCBhbGx6ZXJvLDQpKQorCQl7CisJCQlQVUNIQVIJcEJ1ZiA9ICZwSFRUWENvbnRleHQtPlNhdmVkUGFkWzBdOworCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCgiV0FSTklORy1aZXJvLTM6JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngsQ1dQb3M9JWxkLCBDV1JQb3M9JWxkLCBiQ1c9JWQsIE5CUG9zPSVsZCwgVEJQb3M9JWxkLCBUQlNpemU9JWxkXG4iLAorCQkJCXBCdWZbMF0sIHBCdWZbMV0sIHBCdWZbMl0scEJ1ZlszXSxwQnVmWzRdLCBwQnVmWzVdLCBwQnVmWzZdLHBCdWZbN10sIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MsCisJCQkJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZywgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLCBUbXBCdWxrRW5kUG9zLCBUaGlzQnVsa1NpemUpKTsKKworCQkJcEJ1ZiA9ICZwV2lyZWxlc3NQa3RbcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uXTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwoIlx0Q1dQb3M9JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsIHBCdWZbMF0sIHBCdWZbMV0sIHBCdWZbMl0scEJ1ZlszXSxwQnVmWzRdLCBwQnVmWzVdLCBwQnVmWzZdLHBCdWZbN10pKTsKKwkJfQorCQkvL0RCR1BSSU5UKFJUX0RFQlVHX0xPVUQsKCJFTlBvcz09Q1dQb3M9JWxkLCBDV1JQb3M9JWxkLCBiQ1NQYWQ9JWQhXG4iLCBwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24sIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVSZWFsUG9zLCBwSFRUWENvbnRleHQtPmJDb3B5U2F2ZVBhZCkpOworCX0KKworCWlmIChwQWQtPmJGb3JjZVByaW50VFggPT0gVFJVRSkKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJCdWxrT3V0LUE6U2l6ZT0lbGQsIENXUG9zPSVsZCwgTkJQb3M9JWxkLCBFTkJQb3M9JWxkLCBiQ29weT0lZCFcbiIsIFRoaXNCdWxrU2l6ZSwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24sIHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24sIHBIVFRYQ29udGV4dC0+YkNvcHlTYXZlUGFkKSk7CisJLy9EQkdQUklOVChSVF9ERUJVR19MT1VELCgiQnVsa091dC1BOlNpemU9JWxkLCBDV1Bvcz0lbGQsIENXUlBvcz0lbGQsIE5CUG9zPSVsZCwgRU5CUG9zPSVsZCwgYkNvcHk9JWQsIGJMUm91bmQ9JWQhXG4iLCBUaGlzQnVsa1NpemUsIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVJlYWxQb3MsIHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQsIGJUeFFMYXN0Um91bmQpKTsKKworCQkvLyBVU0IgRE1BIGVuZ2luZSByZXF1aXJlcyB0byBwYWQgZXh0cmEgNCBieXRlcy4gVGhpcyBwYWQgZG9lc24ndCBjb3VudCBpbnRvIHJlYWwgYnVsa291dHNpemUuCisJcEFwcGVuZGFudCA9ICZwV2lyZWxlc3NQa3RbVG1wQnVsa0VuZFBvc107CisJTmRpc1plcm9NZW1vcnkocEFwcGVuZGFudCwgOCk7CisJCVRoaXNCdWxrU2l6ZSArPSA0OworCQlwSFRUWENvbnRleHQtPkxhc3RPbmUgPSBUUlVFOworCQlpZiAoKFRoaXNCdWxrU2l6ZSAlIHBBZC0+QnVsa091dE1heFBhY2tldFNpemUpID09IDApCisJCQlUaGlzQnVsa1NpemUgKz0gNDsKKwlwSFRUWENvbnRleHQtPkJ1bGtPdXRTaXplID0gVGhpc0J1bGtTaXplOworCisJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFtCdWxrT3V0UGlwZUlkXSA9IDE7CisJQlVMS19PVVRfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MyKTsKKworCS8vIEluaXQgVHggY29udGV4dCBkZXNjcmlwdG9yCisJUlRVU0JJbml0SFRUeERlc2MocEFkLCBwSFRUWENvbnRleHQsIEJ1bGtPdXRQaXBlSWQsIFRoaXNCdWxrU2l6ZSwgKHVzYl9jb21wbGV0ZV90KVJUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZSk7CisKKwlwVXJiID0gcEhUVFhDb250ZXh0LT5wVXJiOworCWlmKChyZXQgPSBSVFVTQl9TVUJNSVRfVVJCKHBVcmIpKSE9MCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUVVNCQnVsa091dERhdGFQYWNrZXQ6IFN1Ym1pdCBUeCBVUkIgZmFpbGVkICVkXG4iLCByZXQpKTsKKworCQlCVUxLX09VVF9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJCXBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPSBGQUxTRTsKKwkJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFtCdWxrT3V0UGlwZUlkXSA9IDA7CisJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCisJCXJldHVybjsKKwl9CisKKwlCVUxLX09VVF9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJcEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nID0gVFJVRTsKKwlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwlwQWQtPkJ1bGtPdXRSZXErKzsKKworfQorCisKK1ZPSUQgUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKHB1cmJiX3QgcFVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJUEhUX1RYX0NPTlRFWFQJcEhUVFhDb250ZXh0OworCVBSVE1QX0FEQVBURVIJcEFkOworCVBPU19DT09LSUUgCQlwT2JqOworCVVDSEFSCQkJQnVsa091dFBpcGVJZDsKKworCisJcEhUVFhDb250ZXh0CT0gKFBIVF9UWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkIAkJCT0gcEhUVFhDb250ZXh0LT5wQWQ7CisJcE9iaiAJCQk9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKworCS8vIFN0b3JlIEJ1bGtPdXQgUGlwZUlkCisJQnVsa091dFBpcGVJZAk9IHBIVFRYQ29udGV4dC0+QnVsa091dFBpcGVJZDsKKwlwQWQtPkJ1bGtPdXREYXRhT25lU2VjQ291bnQrKzsKKworCXN3aXRjaCAoQnVsa091dFBpcGVJZCkKKwl7CisJCWNhc2UgMDoKKwkJCQlwT2JqLT5hYzBfZG1hX2RvbmVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKKwkJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5hYzBfZG1hX2RvbmVfdGFzayk7CisJCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCQlwT2JqLT5hYzFfZG1hX2RvbmVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKKwkJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5hYzFfZG1hX2RvbmVfdGFzayk7CisJCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCQlwT2JqLT5hYzJfZG1hX2RvbmVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKKwkJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5hYzJfZG1hX2RvbmVfdGFzayk7CisJCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCQlwT2JqLT5hYzNfZG1hX2RvbmVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKKwkJCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5hYzNfZG1hX2RvbmVfdGFzayk7CisJCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCQlwT2JqLT5oY2NhX2RtYV9kb25lX3Rhc2suZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBVcmI7CisJCQkJdGFza2xldF9oaV9zY2hlZHVsZSgmcE9iai0+aGNjYV9kbWFfZG9uZV90YXNrKTsKKwkJCQlicmVhazsKKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOiBOVUxMIGZyYW1lIHVzZSBCdWxrT3V0UGlwZUlkID0gMAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVFVTQkJ1bGtPdXROdWxsRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJUFRYX0NPTlRFWFQJCXBOdWxsQ29udGV4dCA9ICYocEFkLT5OdWxsQ29udGV4dCk7CisJUFVSQgkJCXBVcmI7CisJaW50CQkJCXJldCA9IDA7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKwlpZiAoKHBBZC0+QnVsa091dFBlbmRpbmdbMF0gPT0gVFJVRSkgfHwgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9UWCkpCisJeworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID0gVFJVRTsKKwlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250WzBdID0gMTsKKwlwTnVsbENvbnRleHQtPklSUFBlbmRpbmcgPSBUUlVFOworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCisJLy8gSW5jcmVhc2UgVG90YWwgdHJhbnNtaXQgYnl0ZSBjb3VudGVyCisJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZEJ5dGVDb3VudCArPSAgcE51bGxDb250ZXh0LT5CdWxrT3V0U2l6ZTsKKworCisJLy8gQ2xlYXIgTnVsbCBmcmFtZSBidWxrIGZsYWcKKwlSVFVTQl9DTEVBUl9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OVUxMKTsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKXBOdWxsQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIsIFRZUEVfVFhJTkZPKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisKKwkvLyBJbml0IFR4IGNvbnRleHQgZGVzY3JpcHRvcgorCVJUVVNCSW5pdFR4RGVzYyhwQWQsIHBOdWxsQ29udGV4dCwgMCwgKHVzYl9jb21wbGV0ZV90KVJUVVNCQnVsa091dE51bGxGcmFtZUNvbXBsZXRlKTsKKworCXBVcmIgPSBwTnVsbENvbnRleHQtPnBVcmI7CisJaWYoKHJldCA9IFJUVVNCX1NVQk1JVF9VUkIocFVyYikpIT0wKQorCXsKKwkJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCQlwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID0gRkFMU0U7CisJCXBBZC0+d2F0Y2hEb2dUeFBlbmRpbmdDbnRbMF0gPSAwOworCQlwTnVsbENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRVU0JCdWxrT3V0TnVsbEZyYW1lOiBTdWJtaXQgVHggVVJCIGZhaWxlZCAlZFxuIiwgcmV0KSk7CisJCXJldHVybjsKKwl9CisKK30KKworLy8gTlVMTCBmcmFtZSB1c2UgQnVsa091dFBpcGVJZCA9IDAKK1ZPSUQgUlRVU0JCdWxrT3V0TnVsbEZyYW1lQ29tcGxldGUocHVyYmJfdCBwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlQUlRNUF9BREFQVEVSCQlwQWQ7CisJUFRYX0NPTlRFWFQJCQlwTnVsbENvbnRleHQ7CisJTlRTVEFUVVMJCQlTdGF0dXM7CisJUE9TX0NPT0tJRQkJCXBPYmo7CisKKworCXBOdWxsQ29udGV4dAk9IChQVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZCAJCQk9IHBOdWxsQ29udGV4dC0+cEFkOworCVN0YXR1cyAJCQk9IHBVcmItPnN0YXR1czsKKworCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CisJcE9iai0+bnVsbF9mcmFtZV9jb21wbGV0ZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOworCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPm51bGxfZnJhbWVfY29tcGxldGVfdGFzayk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOiBNTE1FIHVzZSBCdWxrT3V0UGlwZUlkID0gMAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVFVTQkJ1bGtPdXRNTE1FUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSW5kZXgpCit7CisJUFRYX0NPTlRFWFQJCXBNTE1FQ29udGV4dDsKKwlQVVJCCQkJcFVyYjsKKwlpbnQJCQkJcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nCUlycUZsYWdzOworCisJcE1MTUVDb250ZXh0ID0gKFBUWF9DT05URVhUKXBBZC0+TWdtdFJpbmcuQ2VsbFtwQWQtPk1nbXRSaW5nLlR4RG1hSWR4XS5BbGxvY1ZhOworCXBVcmIgPSBwTUxNRUNvbnRleHQtPnBVcmI7CisKKwlpZiAoKHBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHggPj0gTUdNVF9SSU5HX1NJWkUpIHx8CisJCShwTUxNRUNvbnRleHQtPkluVXNlID09IEZBTFNFKSB8fAorCQkocE1MTUVDb250ZXh0LT5iV2FpdGluZ0J1bGtPdXQgPT0gRkFMU0UpKQorCXsKKworCisJCS8vIENsZWFyIE1MTUUgYnVsayBmbGFnCisJCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9NTE1FKTsKKworCQlyZXR1cm47CisJfQorCisKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW01HTVRQSVBFSURYXSwgSXJxRmxhZ3MpOworCWlmICgocEFkLT5CdWxrT3V0UGVuZGluZ1tNR01UUElQRUlEWF0gPT0gVFJVRSkgfHwgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9UWCkpCisJeworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbTUdNVFBJUEVJRFhdLCBJcnFGbGFncyk7CisJCXJldHVybjsKKwl9CisKKwlwQWQtPkJ1bGtPdXRQZW5kaW5nW01HTVRQSVBFSURYXSA9IFRSVUU7CisJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFtNR01UUElQRUlEWF0gPSAxOworCXBNTE1FQ29udGV4dC0+SVJQUGVuZGluZyA9IFRSVUU7CisJcE1MTUVDb250ZXh0LT5iV2FpdGluZ0J1bGtPdXQgPSBGQUxTRTsKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbTUdNVFBJUEVJRFhdLCBJcnFGbGFncyk7CisKKwkvLyBJbmNyZWFzZSBUb3RhbCB0cmFuc21pdCBieXRlIGNvdW50ZXIKKwlwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQnl0ZUNvdW50ICs9ICBwTUxNRUNvbnRleHQtPkJ1bGtPdXRTaXplOworCisJLy8gQ2xlYXIgTUxNRSBidWxrIGZsYWcKKwlSVFVTQl9DTEVBUl9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfTUxNRSk7CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUERlc2NyaXB0b3JFbmRpYW5DaGFuZ2UoKFBVQ0hBUilwTUxNRUNvbnRleHQtPlRyYW5zZmVyQnVmZmVyLCBUWVBFX1RYSU5GTyk7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCisJLy8gSW5pdCBUeCBjb250ZXh0IGRlc2NyaXB0b3IKKwlSVFVTQkluaXRUeERlc2MocEFkLCBwTUxNRUNvbnRleHQsIE1HTVRQSVBFSURYLCAodXNiX2NvbXBsZXRlX3QpUlRVU0JCdWxrT3V0TUxNRVBhY2tldENvbXBsZXRlKTsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKwkvL0ZvciBtZ210IHVyYiBidWZmZXIsIGJlY2F1c2Ugd2UgdXNlIHNrX2J1ZmYsIHNvIHdlIG5lZWQgdG8gbm90aWZ5IHRoZSBVU0IgY29udHJvbGxlciBkbyBkbWEgbWFwcGluZy4KKwlwVXJiLT50cmFuc2Zlcl9kbWEJPSAwOworCXBVcmItPnRyYW5zZmVyX2ZsYWdzICY9ICh+VVJCX05PX1RSQU5TRkVSX0RNQV9NQVApOworI2VuZGlmCisKKwlwVXJiID0gcE1MTUVDb250ZXh0LT5wVXJiOworCWlmKChyZXQgPSBSVFVTQl9TVUJNSVRfVVJCKHBVcmIpKSE9MCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUVVNCQnVsa091dE1MTUVQYWNrZXQ6IFN1Ym1pdCBNTE1FIFVSQiBmYWlsZWQgJWRcbiIsIHJldCkpOworCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW01HTVRQSVBFSURYXSwgSXJxRmxhZ3MpOworCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW01HTVRQSVBFSURYXSA9IEZBTFNFOworCQlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250W01HTVRQSVBFSURYXSA9IDA7CisJCXBNTE1FQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCQlwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9IFRSVUU7CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tNR01UUElQRUlEWF0sIElycUZsYWdzKTsKKworCQlyZXR1cm47CisJfQorCisJLy9EQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywgKCI8LS0tUlRVU0JCdWxrT3V0TUxNRVBhY2tldCBcbiIpKTsKKy8vCXByaW50aygiPC0tLVJUVVNCQnVsa091dE1MTUVQYWNrZXQsQ3B1PSVkISwgRG1hPSVkLCBTd0lkeD0lZCFcbiIsIHBBZC0+TWdtdFJpbmcuVHhDcHVJZHgsIHBBZC0+TWdtdFJpbmcuVHhEbWFJZHgsIHBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHgpOworfQorCisKK1ZPSUQgUlRVU0JCdWxrT3V0TUxNRVBhY2tldENvbXBsZXRlKHB1cmJiX3QgcFVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpCit7CisJUFRYX0NPTlRFWFQJCQlwTUxNRUNvbnRleHQ7CisJUFJUTVBfQURBUFRFUgkJcEFkOworCU5UU1RBVFVTCQkJU3RhdHVzOworCVBPU19DT09LSUUgCQkJcE9iajsKKwlpbnQJCQkJCWluZGV4OworCisJLy9EQkdQUklOVF9SQVcoUlRfREVCVUdfSU5GTywgKCItLS0+UlRVU0JCdWxrT3V0TUxNRVBhY2tldENvbXBsZXRlXG4iKSk7CisJcE1MTUVDb250ZXh0CT0gKFBUWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkIAkJCT0gcE1MTUVDb250ZXh0LT5wQWQ7CisJcE9iaiAJCQk9IChQT1NfQ09PS0lFKXBBZC0+T1NfQ29va2llOworCVN0YXR1cwkJCT0gcFVyYi0+c3RhdHVzOworCWluZGV4IAkJCT0gcE1MTUVDb250ZXh0LT5TZWxmSWR4OworCisJcE9iai0+bWdtdF9kbWFfZG9uZV90YXNrLmRhdGEgPSAodW5zaWduZWQgbG9uZylwVXJiOworCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnBPYmotPm1nbXRfZG1hX2RvbmVfdGFzayk7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOiBQc1BvbGwgdXNlIEJ1bGtPdXRQaXBlSWQgPSAwCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQnVsa091dFBzUG9sbCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlQVFhfQ09OVEVYVAkJcFBzUG9sbENvbnRleHQgPSAmKHBBZC0+UHNQb2xsQ29udGV4dCk7CisJUFVSQgkJCXBVcmI7CisJaW50CQkJCXJldCA9IDA7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKwlpZiAoKHBBZC0+QnVsa091dFBlbmRpbmdbMF0gPT0gVFJVRSkgfHwgUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05FRURfU1RPUF9UWCkpCisJeworCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID0gVFJVRTsKKwlwQWQtPndhdGNoRG9nVHhQZW5kaW5nQ250WzBdID0gMTsKKwlwUHNQb2xsQ29udGV4dC0+SVJQUGVuZGluZyA9IFRSVUU7CisJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7CisKKworCS8vIENsZWFyIFBTLVBvbGwgYnVsayBmbGFnCisJUlRVU0JfQ0xFQVJfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX1BTUE9MTCk7CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJUlRNUERlc2NyaXB0b3JFbmRpYW5DaGFuZ2UoKFBVQ0hBUilwUHNQb2xsQ29udGV4dC0+VHJhbnNmZXJCdWZmZXIsIFRZUEVfVFhJTkZPKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisKKwkvLyBJbml0IFR4IGNvbnRleHQgZGVzY3JpcHRvcgorCVJUVVNCSW5pdFR4RGVzYyhwQWQsIHBQc1BvbGxDb250ZXh0LCBNR01UUElQRUlEWCwgKHVzYl9jb21wbGV0ZV90KVJUVVNCQnVsa091dFBzUG9sbENvbXBsZXRlKTsKKworCXBVcmIgPSBwUHNQb2xsQ29udGV4dC0+cFVyYjsKKwlpZigocmV0ID0gUlRVU0JfU1VCTUlUX1VSQihwVXJiKSkhPTApCisJeworCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7CisJCXBBZC0+QnVsa091dFBlbmRpbmdbMF0gPSBGQUxTRTsKKwkJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFswXSA9IDA7CisJCXBQc1BvbGxDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOworCisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlJUVVNCQnVsa091dFBzUG9sbDogU3VibWl0IFR4IFVSQiBmYWlsZWQgJWRcbiIsIHJldCkpOworCQlyZXR1cm47CisJfQorCit9CisKKy8vIFBTLVBvbGwgZnJhbWUgdXNlIEJ1bGtPdXRQaXBlSWQgPSAwCitWT0lEIFJUVVNCQnVsa091dFBzUG9sbENvbXBsZXRlKHB1cmJiX3QgcFVyYixzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncykKK3sKKwlQUlRNUF9BREFQVEVSCQlwQWQ7CisJUFRYX0NPTlRFWFQJCQlwUHNQb2xsQ29udGV4dDsKKwlOVFNUQVRVUwkJCVN0YXR1czsKKwlQT1NfQ09PS0lFCQkJcE9iajsKKworCisJcFBzUG9sbENvbnRleHQ9IChQVFhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZCA9IHBQc1BvbGxDb250ZXh0LT5wQWQ7CisJU3RhdHVzID0gcFVyYi0+c3RhdHVzOworCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CisJcE9iai0+cHNwb2xsX2ZyYW1lX2NvbXBsZXRlX3Rhc2suZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBVcmI7CisJdGFza2xldF9oaV9zY2hlZHVsZSgmcE9iai0+cHNwb2xsX2ZyYW1lX2NvbXBsZXRlX3Rhc2spOworCit9CisKK1ZPSUQgRG9CdWxrSW4oSU4gUlRNUF9BREFQVEVSICpwQWQpCit7CisJUFJYX0NPTlRFWFQJCXBSeENvbnRleHQ7CisJUFVSQgkJCXBVcmI7CisJaW50CQkJCXJldCA9IDA7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCXBSeENvbnRleHQgPSAmKHBBZC0+UnhDb250ZXh0W3BBZC0+TmV4dFJ4QnVsa0luSW5kZXhdKTsKKwlpZiAoKHBBZC0+UGVuZGluZ1J4ID4gMCkgfHwgKHBSeENvbnRleHQtPlJlYWRhYmxlID09IFRSVUUpIHx8IChwUnhDb250ZXh0LT5JblVzZSA9PSBUUlVFKSkKKwl7CisJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJCXJldHVybjsKKwl9CisJcFJ4Q29udGV4dC0+SW5Vc2UgPSBUUlVFOworCXBSeENvbnRleHQtPklSUFBlbmRpbmcgPSBUUlVFOworCXBBZC0+UGVuZGluZ1J4Kys7CisJcEFkLT5CdWxrSW5SZXErKzsKKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCisJLy8gSW5pdCBSeCBjb250ZXh0IGRlc2NyaXB0b3IKKwlOZGlzWmVyb01lbW9yeShwUnhDb250ZXh0LT5UcmFuc2ZlckJ1ZmZlciwgcFJ4Q29udGV4dC0+QnVsa0luT2Zmc2V0KTsKKwlSVFVTQkluaXRSeERlc2MocEFkLCBwUnhDb250ZXh0KTsKKworCXBVcmIgPSBwUnhDb250ZXh0LT5wVXJiOworCWlmICgocmV0ID0gUlRVU0JfU1VCTUlUX1VSQihwVXJiKSkhPTApCisJewkvLyBmYWlsCisKKwkJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJCXBSeENvbnRleHQtPkluVXNlID0gRkFMU0U7CisJCXBSeENvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKwkJcEFkLT5QZW5kaW5nUngtLTsKKwkJcEFkLT5CdWxrSW5SZXEtLTsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUlRVU0JCdWxrUmVjZWl2ZTogU3VibWl0IFJ4IFVSQiBmYWlsZWQgJWRcbiIsIHJldCkpOworCX0KKwllbHNlCisJewkvLyBzdWNjZXNzCisJCUFTU0VSVCgocFJ4Q29udGV4dC0+SW5Vc2UgPT0gcFJ4Q29udGV4dC0+SVJQUGVuZGluZykpOworCQkvL3ByaW50aygiQklEb25lLCBQZW5kPSVkLEJJSWR4PSVkLEJJUklkeD0lZCFcbiIsIHBBZC0+UGVuZGluZ1J4LCBwQWQtPk5leHRSeEJ1bGtJbkluZGV4LCBwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCk7CisJfQorfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCVVTQl9SeFBhY2tldCBpbml0aWFsaXplcyBhIFVSQiBhbmQgdXNlcyB0aGUgUnggSVJQIHRvIHN1Ym1pdCBpdAorCXRvIFVTQi4gSXQgY2hlY2tzIGlmIGFuIFJ4IERlc2NyaXB0b3IgaXMgYXZhaWxhYmxlIGFuZCBwYXNzZXMgdGhlCisJdGhlIGNvcmVzcG9uZGluZyBidWZmZXIgdG8gYmUgZmlsbGVkLiBJZiBubyBkZXNjcmlwdG9yIGlzIGF2YWlsYWJsZQorCWZhaWxzIHRoZSByZXF1ZXN0LiBXaGVuIHNldHRpbmcgdGhlIGNvbXBsZXRpb24gcm91dGluZSB3ZSBwYXNzIG91cgorCUFkYXB0ZXIgT2JqZWN0IGFzIENvbnRleHQuCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisJCVRSVUUJCQlmb3VuZCBtYXRjaGVkIHR1cGxlIGNhY2hlCisJCUZBTFNFCQkJbm8gbWF0Y2hlZCBmb3VuZAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9ORUVEX1NUT1BfUlgJCVwKKwkJKGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCB8IGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CVwKKwkJIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGIHwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8IFwKKwkJIGZSVE1QX0FEQVBURVJfUkVNT1ZFX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9CVUxLSU5fUkVTRVQpCisKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9ORUVEX1NUT1BfSEFORExFX1JYCVwKKwkJKGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCB8IGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CVwKKwkJIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGIHwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8IFwKKwkJIGZSVE1QX0FEQVBURVJfUkVNT1ZFX0lOX1BST0dSRVNTKQorCitWT0lECVJUVVNCQnVsa1JlY2VpdmUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJUFJYX0NPTlRFWFQJCXBSeENvbnRleHQ7CisJdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKworCisJLyogc2FuaXR5IGNoZWNrICovCisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9ORUVEX1NUT1BfSEFORExFX1JYKSkKKwkJcmV0dXJuOworCisJd2hpbGUoMSkKKwl7CisKKwkJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJCXBSeENvbnRleHQgPSAmKHBBZC0+UnhDb250ZXh0W3BBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4XSk7CisJCWlmICgoKHBSeENvbnRleHQtPkluVXNlID09IEZBTFNFKSAmJiAocFJ4Q29udGV4dC0+UmVhZGFibGUgPT0gVFJVRSkpICYmCisJCQkocFJ4Q29udGV4dC0+YlJ4SGFuZGxpbmcgPT0gRkFMU0UpKQorCQl7CisJCQlwUnhDb250ZXh0LT5iUnhIYW5kbGluZyA9IFRSVUU7CisJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCisJCQkvLyByZWFkIFJ4Q29udGV4dCwgU2luY2Ugbm90CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCVNUQVJ4RG9uZUludGVycnVwdEhhbmRsZShwQWQsIFRSVUUpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCQkvLyBGaW5pc2ggdG8gaGFuZGxlIHRoaXMgYnVsa0luIGJ1ZmZlci4KKwkJCVJUTVBfSVJRX0xPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCQkJcFJ4Q29udGV4dC0+QnVsa0luT2Zmc2V0ID0gMDsKKwkJCXBSeENvbnRleHQtPlJlYWRhYmxlID0gRkFMU0U7CisJCQlwUnhDb250ZXh0LT5iUnhIYW5kbGluZyA9IEZBTFNFOworCQkJcEFkLT5SZWFkUG9zaXRpb24gPSAwOworCQkJcEFkLT5UcmFuc2ZlckJ1ZmZlckxlbmd0aCA9IDA7CisJCQlJTkNfUklOR19JTkRFWChwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCwgUlhfUklOR19TSVpFKTsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisKKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9ORUVEX1NUT1BfUlgpKSkKKwkJRG9CdWxrSW4ocEFkKTsKKworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlUaGlzIHJvdXRpbmUgcHJvY2VzcyBSeCBJcnAgYW5kIGNhbGwgcnggY29tcGxldGUgZnVuY3Rpb24uCisKKwlBcmd1bWVudHM6CisJCURldmljZU9iamVjdAlQb2ludGVyIHRvIHRoZSBkZXZpY2Ugb2JqZWN0IGZvciBuZXh0IGxvd2VyCisJCQkJCQlkZXZpY2UuIERldmljZU9iamVjdCBwYXNzZWQgaW4gaGVyZSBiZWxvbmdzIHRvCisJCQkJCQl0aGUgbmV4dCBsb3dlciBkcml2ZXIgaW4gdGhlIHN0YWNrIGJlY2F1c2Ugd2UKKwkJCQkJCXdlcmUgaW52b2tlZCB2aWEgSW9DYWxsRHJpdmVyIGluIFVTQl9SeFBhY2tldAorCQkJCQkJQU5EIGl0IGlzIG5vdCBPVVIgZGV2aWNlIG9iamVjdAorCSAgSXJwCQkJCVB0ciB0byBjb21wbGV0ZWQgSVJQCisJICBDb250ZXh0CQkJUHRyIHRvIG91ciBBZGFwdGVyIG9iamVjdCAoY29udGV4dCBzcGVjaWZpZWQKKwkJCQkJCWluIElvU2V0Q29tcGxldGlvblJvdXRpbmUKKworCVJldHVybiBWYWx1ZToKKwkJQWx3YXlzIHJldHVybnMgU1RBVFVTX01PUkVfUFJPQ0VTU0lOR19SRVFVSVJFRAorCisJTm90ZToKKwkJQWx3YXlzIHJldHVybnMgU1RBVFVTX01PUkVfUFJPQ0VTU0lOR19SRVFVSVJFRAorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRVU0JCdWxrUnhDb21wbGV0ZShwdXJiYl90IHBVcmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCS8vIHVzZSBhIHJlY2VpdmUgdGFza2xldCB0byBoYW5kbGUgcmVjZWl2ZWQgcGFja2V0czsKKwkvLyBvciBzb21ldGltZXMgaGFyZHdhcmUgSVJRIHdpbGwgYmUgZGlzYWJsZWQgaGVyZSwgc28gd2UgY2FuIG5vdAorCS8vIHVzZSBzcGluX2xvY2tfYmgoKS9zcGluX3VubG9ja19iaCgpIGFmdGVyIElSUSBpcyBkaXNhYmxlZC4gOjwKKwlQUlhfQ09OVEVYVAkJcFJ4Q29udGV4dDsKKwlQUlRNUF9BREFQVEVSCXBBZDsKKwlQT1NfQ09PS0lFIAkJcE9iajsKKworCisJcFJ4Q29udGV4dAk9IChQUlhfQ09OVEVYVClwVXJiLT5jb250ZXh0OworCXBBZCAJCT0gcFJ4Q29udGV4dC0+cEFkOworCXBPYmogCQk9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKworCXBPYmotPnJ4X2RvbmVfdGFzay5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcFVyYjsKKwl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwT2JqLT5yeF9kb25lX3Rhc2spOworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRVU0JLaWNrQnVsa091dCgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwkvLyBCdWxrSW4gUmVzZXQgd2lsbCByZXNldCB3aG9sZSBVU0IgUEhZLiBTbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBmUlRNUF9BREFQVEVSX0JVTEtJTl9SRVNFVCBub3QgZmxhZ2VkLgorCWlmICghUlRNUF9URVNUX0ZMQUcocEFkICxmUlRNUF9BREFQVEVSX05FRURfU1RPUF9UWCkKKyNpZmRlZiBSQUxJTktfQVRFCisJCSYmICEoQVRFX09OKHBBZCkpCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQkpCisJeworCQkvLyAyLiBQUy1Qb2xsIGZyYW1lIGlzIG5leHQKKwkJaWYgKFJUVVNCX1RFU1RfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX1BTUE9MTCkpCisJCXsKKwkJCVJUVVNCQnVsa091dFBzUG9sbChwQWQpOworCQl9CisKKwkJLy8gNS4gTWxtZSBmcmFtZSBpcyBuZXh0CisJCWVsc2UgaWYgKChSVFVTQl9URVNUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9NTE1FKSkgJiYKKwkJCQkgKHBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHggPCBNR01UX1JJTkdfU0laRSkpCisJCXsKKwkJCVJUVVNCQnVsa091dE1MTUVQYWNrZXQocEFkLCBwQWQtPk1nbXRSaW5nLlR4RG1hSWR4KTsKKwkJfQorCisJCS8vIDYuIERhdGEgZnJhbWUgbm9ybWFsIGlzIG5leHQKKwkJaWYgKFJUVVNCX1RFU1RfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMKSkKKwkJeworCQkJaWYgKCgoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpIHx8CisJCQkJKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJCQkJKSkKKwkJCXsKKwkJCQlSVFVTQkJ1bGtPdXREYXRhUGFja2V0KHBBZCwgMCwgcEFkLT5OZXh0QnVsa091dEluZGV4WzBdKTsKKwkJCX0KKwkJfQorCQlpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUxfMikpCisJCXsKKwkJCWlmICgoKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKSB8fAorCQkJCSghT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQorCQkJCSkpCisJCQl7CisJCQkJUlRVU0JCdWxrT3V0RGF0YVBhY2tldChwQWQsIDEsIHBBZC0+TmV4dEJ1bGtPdXRJbmRleFsxXSk7CisJCQl9CisJCX0KKwkJaWYgKFJUVVNCX1RFU1RfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMXzMpKQorCQl7CisJCQlpZiAoKCghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkgfHwKKwkJCQkoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJCQkpKQorCQkJeworCQkJCVJUVVNCQnVsa091dERhdGFQYWNrZXQocEFkLCAyLCBwQWQtPk5leHRCdWxrT3V0SW5kZXhbMl0pOworCQkJfQorCQl9CisJCWlmIChSVFVTQl9URVNUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTF80KSkKKwkJeworCQkJaWYgKCgoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpIHx8CisJCQkJKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJCQkJKSkKKwkJCXsKKwkJCQlSVFVTQkJ1bGtPdXREYXRhUGFja2V0KHBBZCwgMywgcEFkLT5OZXh0QnVsa091dEluZGV4WzNdKTsKKwkJCX0KKwkJfQorCQkvL1BTIHBhY2tldHMgdXNlIEhDQ0EgcXVldWUgd2hlbiBkZXF1ZXVlIGZyb20gUFMgdW5pY2FzdCBxdWV1ZSAoV2lGaSBXUEEyIE1BOV9EVDEgZm9yIE1hcnZlbGwgQiBTVEEpCisJCWlmIChSVFVTQl9URVNUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTF81KSkKKwkJeworCQkJaWYgKCgoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpIHx8CisJCQkJKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJCQkJKSkKKwkJCXsKKwkJCX0KKwkJfQorCisJCS8vIDcuIE51bGwgZnJhbWUgaXMgdGhlIGxhc3QKKwkJZWxzZSBpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9OVUxMKSkKKwkJeworCQkJaWYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQorCQkJeworCQkJCVJUVVNCQnVsa091dE51bGxGcmFtZShwQWQpOworCQkJfQorCQl9CisKKwkJLy8gOC4gTm8gZGF0YSBhdmFsaWFibGUKKwkJZWxzZQorCQl7CisKKwkJfQorCX0KKyNpZmRlZiBSQUxJTktfQVRFCisJLyogSWYgdGhlIG1vZGUgaXMgaW4gQVRFIG1vZGUuICovCisJZWxzZSBpZigoQVRFX09OKHBBZCkpICYmCisJCSFSVE1QX1RFU1RfRkxBRyhwQWQgLGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYKSkvLyBQRVRFUiA6IHdhdGNoIG91dCAhCisJeworCQlpZiAoUlRVU0JfVEVTVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9BVEUpKQorCQl7CisJCQlBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldChwQWQsIDApOworCQl9CisJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwlDYWxsIGZyb20gUmVzZXQgYWN0aW9uIGFmdGVyIEJ1bGtPdXQgZmFpbGVkLgorCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQ2xlYW5VcERhdGFCdWxrT3V0UXVldWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUNIQVIJCQlJZHg7CisJUEhUX1RYX0NPTlRFWFQJcFR4Q29udGV4dDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT5DbGVhblVwRGF0YUJ1bGtPdXRRdWV1ZVxuIikpOworCisJZm9yIChJZHggPSAwOyBJZHggPCA0OyBJZHgrKykKKwl7CisJCXBUeENvbnRleHQgPSAmcEFkLT5UeENvbnRleHRbSWR4XTsKKworCQlwVHhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID0gcFR4Q29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbjsKKwkJcFR4Q29udGV4dC0+TGFzdE9uZSA9IEZBTFNFOworCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW0lkeF0pOworCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW0lkeF0gPSBGQUxTRTsKKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1tJZHhdKTsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0tQ2xlYW5VcERhdGFCdWxrT3V0UXVldWVcbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVFVTQkNsZWFuVXBNTE1FQnVsa091dFF1ZXVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT5DbGVhblVwTUxNRUJ1bGtPdXRRdWV1ZVxuIikpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS1DbGVhblVwTUxNRUJ1bGtPdXRRdWV1ZVxuIikpOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVFVTQkNhbmNlbFBlbmRpbmdJUlBzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUChwQWQpOworCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJUFJYX0NPTlRFWFQJCXBSeENvbnRleHQ7CisJVUlOVAkJCWk7CisKKwlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiLS0tPlJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUFxuIikpOworCWZvciAoIGkgPSAwOyBpIDwgKFJYX1JJTkdfU0laRSk7IGkrKykKKwl7CisJCXBSeENvbnRleHQgPSAmKHBBZC0+UnhDb250ZXh0W2ldKTsKKwkJaWYocFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9PSBUUlVFKQorCQl7CisJCQlSVFVTQl9VTkxJTktfVVJCKHBSeENvbnRleHQtPnBVcmIpOworCQkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCQkJcFJ4Q29udGV4dC0+SW5Vc2UgPSBGQUxTRTsKKwkJCS8vTmRpc0ludGVybG9ja2VkRGVjcmVtZW50KCZwQWQtPlBlbmRpbmdSeCk7CisJCQkvL3BBZC0+UGVuZGluZ1J4LS07CisJCX0KKwl9CisJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS1SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlBcbiIpKTsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJUEhUX1RYX0NPTlRFWFQJCXBIVFRYQ29udGV4dDsKKwlQVFhfQ09OVEVYVAkJCXBNTE1FQ29udGV4dDsKKwlQVFhfQ09OVEVYVAkJCXBCZWFjb25Db250ZXh0OworCVBUWF9DT05URVhUCQkJcE51bGxDb250ZXh0OworCVBUWF9DT05URVhUCQkJcFBzUG9sbENvbnRleHQ7CisJUFRYX0NPTlRFWFQJCQlwUlRTQ29udGV4dDsKKwlVSU5UCQkJCWksIElkeDsKKy8vCXVuc2lnbmVkIGludCAJCUlycUZsYWdzOworLy8JTkRJU19TUElOX0xPQ0sJCSpwTG9jazsKKy8vCUJPT0xFQU4JCQkJKnBQZW5kaW5nOworCisKKy8vCXBMb2NrID0gJnBBZC0+QnVsa091dExvY2tbTUdNVFBJUEVJRFhdOworLy8JcFBlbmRpbmcgPSAmcEFkLT5CdWxrT3V0UGVuZGluZ1tNR01UUElQRUlEWF07CisKKwlmb3IgKElkeCA9IDA7IElkeCA8IDQ7IElkeCsrKQorCXsKKwkJcEhUVFhDb250ZXh0ID0gJihwQWQtPlR4Q29udGV4dFtJZHhdKTsKKworCQlpZiAocEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nID09IFRSVUUpCisJCXsKKworCQkJLy8gR2V0IHRoZSBVU0JfQ09OVEVYVCBhbmQgY2FuY2VsIGl0J3MgSVJQOyB0aGUgY29tcGxldGlvbiByb3V0aW5lIHdpbGwgaXRzZWxmCisJCQkvLyByZW1vdmUgaXQgZnJvbSB0aGUgSGVhZFBlbmRpbmdTZW5kTGlzdCBhbmQgTlVMTCBvdXQgSGVhZFBlbmRpbmdTZW5kTGlzdAorCQkJLy8Jd2hlbiB0aGUgbGFzdCBJUlAgb24gdGhlIGxpc3QgaGFzIGJlZW4JY2FuY2VsbGVkOyB0aGF0J3MgaG93IHdlIGV4aXQgdGhpcyBsb29wCisJCQkvLworCisJCQlSVFVTQl9VTkxJTktfVVJCKHBIVFRYQ29udGV4dC0+cFVyYik7CisKKwkJCS8vIFNsZWVwIDIwMCBtaWNyb3NlY29uZHMgdG8gZ2l2ZSBjYW5jZWxsYXRpb24gdGltZSB0byB3b3JrCisJCQlSVE1QdXNlY0RlbGF5KDIwMCk7CisJCX0KKworI2lmZGVmIFJBTElOS19BVEUKKwkJcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQgPSAwOworCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPSAwOworCQlwSFRUWENvbnRleHQtPkN1cldyaXRlUmVhbFBvcyA9IDA7CisJCXBIVFRYQ29udGV4dC0+YkN1cldyaXRpbmcgPSBGQUxTRTsKKwkJcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uID0gMDsKKwkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiA9IDA7CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW0lkeF0gPSBGQUxTRTsKKwl9CisKKwkvL1JUTVBfSVJRX0xPQ0socExvY2ssIElycUZsYWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUdNVF9SSU5HX1NJWkU7IGkrKykKKwl7CisJCXBNTE1FQ29udGV4dCA9IChQVFhfQ09OVEVYVClwQWQtPk1nbXRSaW5nLkNlbGxbaV0uQWxsb2NWYTsKKwkJaWYocE1MTUVDb250ZXh0ICYmIChwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkpCisJCXsKKworCQkJLy8gR2V0IHRoZSBVU0JfQ09OVEVYVCBhbmQgY2FuY2VsIGl0J3MgSVJQOyB0aGUgY29tcGxldGlvbiByb3V0aW5lIHdpbGwgaXRzZWxmCisJCQkvLyByZW1vdmUgaXQgZnJvbSB0aGUgSGVhZFBlbmRpbmdTZW5kTGlzdCBhbmQgTlVMTCBvdXQgSGVhZFBlbmRpbmdTZW5kTGlzdAorCQkJLy8Jd2hlbiB0aGUgbGFzdCBJUlAgb24gdGhlIGxpc3QgaGFzIGJlZW4JY2FuY2VsbGVkOyB0aGF0J3MgaG93IHdlIGV4aXQgdGhpcyBsb29wCisJCQkvLworCisJCQlSVFVTQl9VTkxJTktfVVJCKHBNTE1FQ29udGV4dC0+cFVyYik7CisJCQlwTUxNRUNvbnRleHQtPklSUFBlbmRpbmcgPSBGQUxTRTsKKworCQkJLy8gU2xlZXAgMjAwIG1pY3Jvc2VjcyB0byBnaXZlIGNhbmNlbGxhdGlvbiB0aW1lIHRvIHdvcmsKKwkJCVJUTVB1c2VjRGVsYXkoMjAwKTsKKwkJfQorCX0KKwlwQWQtPkJ1bGtPdXRQZW5kaW5nW01HTVRQSVBFSURYXSA9IEZBTFNFOworCS8vUlRNUF9JUlFfVU5MT0NLKHBMb2NrLCBJcnFGbGFncyk7CisKKworCWZvciAoaSA9IDA7IGkgPCBCRUFDT05fUklOR19TSVpFOyBpKyspCisJeworCQlwQmVhY29uQ29udGV4dCA9ICYocEFkLT5CZWFjb25Db250ZXh0W2ldKTsKKworCQlpZihwQmVhY29uQ29udGV4dC0+SVJQUGVuZGluZyA9PSBUUlVFKQorCQl7CisKKwkJCS8vIEdldCB0aGUgVVNCX0NPTlRFWFQgYW5kIGNhbmNlbCBpdCdzIElSUDsgdGhlIGNvbXBsZXRpb24gcm91dGluZSB3aWxsIGl0c2VsZgorCQkJLy8gcmVtb3ZlIGl0IGZyb20gdGhlIEhlYWRQZW5kaW5nU2VuZExpc3QgYW5kIE5VTEwgb3V0IEhlYWRQZW5kaW5nU2VuZExpc3QKKwkJCS8vCXdoZW4gdGhlIGxhc3QgSVJQIG9uIHRoZSBsaXN0IGhhcyBiZWVuCWNhbmNlbGxlZDsgdGhhdCdzIGhvdyB3ZSBleGl0IHRoaXMgbG9vcAorCQkJLy8KKworCQkJUlRVU0JfVU5MSU5LX1VSQihwQmVhY29uQ29udGV4dC0+cFVyYik7CisKKwkJCS8vIFNsZWVwIDIwMCBtaWNyb3NlY3MgdG8gZ2l2ZSBjYW5jZWxsYXRpb24gdGltZSB0byB3b3JrCisJCQlSVE1QdXNlY0RlbGF5KDIwMCk7CisJCX0KKwl9CisKKwlwTnVsbENvbnRleHQgPSAmKHBBZC0+TnVsbENvbnRleHQpOworCWlmIChwTnVsbENvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkKKwkJUlRVU0JfVU5MSU5LX1VSQihwTnVsbENvbnRleHQtPnBVcmIpOworCisJcFJUU0NvbnRleHQgPSAmKHBBZC0+UlRTQ29udGV4dCk7CisJaWYgKHBSVFNDb250ZXh0LT5JUlBQZW5kaW5nID09IFRSVUUpCisJCVJUVVNCX1VOTElOS19VUkIocFJUU0NvbnRleHQtPnBVcmIpOworCisJcFBzUG9sbENvbnRleHQgPSAmKHBBZC0+UHNQb2xsQ29udGV4dCk7CisJaWYgKHBQc1BvbGxDb250ZXh0LT5JUlBQZW5kaW5nID09IFRSVUUpCisJCVJUVVNCX1VOTElOS19VUkIocFBzUG9sbENvbnRleHQtPnBVcmIpOworCisJZm9yIChJZHggPSAwOyBJZHggPCA0OyBJZHgrKykKKwl7CisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+QnVsa091dExvY2tbSWR4XSk7CisJCXBBZC0+QnVsa091dFBlbmRpbmdbSWR4XSA9IEZBTFNFOworCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW0lkeF0pOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnR1c2JfZGF0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9jb21tb24vcnR1c2JfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMTMwOWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydHVzYl9kYXRhLmMKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJcnR1c2JfZGF0YS5jCisKKwlBYnN0cmFjdDoKKwlSYWxpbmsgVVNCIGRyaXZlciBUeC9SeCBmdW5jdGlvbnMuCisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorCS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUphbiAgICAgICAgICAgIDAzLTI1LTIwMDYgICAgY3JlYXRlZAorCisqLworI2luY2x1ZGUJIi4uL3J0X2NvbmZpZy5oIgorCitleHRlcm4gIFVDSEFSIFBoeTExQkdOZXh0UmF0ZVVwd2FyZFtdOyAvLyBkZWZpbmVkIGluIG1sbWUuYworZXh0ZXJuIFVDSEFSCUVwVG9RdWV1ZVtdOworCisKK1ZPSUQgUkVQT1JUX0FNU0RVX0ZSQU1FU19UT19MTEMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEYXRhU2l6ZSkKK3sKKwlQTkRJU19QQUNLRVQJcFBhY2tldDsKKwlVSU5UCQkJbk1TRFU7CisJc3RydWN0CQkJc2tfYnVmZiAqcFNrYjsKKworCW5NU0RVID0gMDsKKwkvKiBhbGxvY2F0ZSBhIHJ4IHBhY2tldCAqLworCXBTa2IgPSBkZXZfYWxsb2Nfc2tiKFJYX0JVRkZFUl9BR0dSRVNJWkUpOworCXBQYWNrZXQgPSAoUE5ESVNfUEFDS0VUKU9TUEtUX1RPX1JUUEtUKHBTa2IpOworCWlmIChwU2tiKQorCXsKKworCQkvKiBjb252ZXJ0IDgwMi4xMSB0byA4MDIuMyBwYWNrZXQgKi8KKwkJcFNrYi0+ZGV2ID0gZ2V0X25ldGRldl9mcm9tX2Jzc2lkKHBBZCwgQlNTMCk7CisJCVJUTVBfU0VUX1BBQ0tFVF9TT1VSQ0UocFBhY2tldCwgUEtUU1JDX05ESVMpOworCQlkZWFnZ3JlZ2F0ZV9BTVNEVV9hbm5vdW5jZShwQWQsIHBQYWNrZXQsIHBEYXRhLCBEYXRhU2l6ZSk7CisJfQorCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiQ2FuJ3QgYWxsb2NhdGUgc2tiXG4iKSk7CisJfQorfQorCitORElTX1NUQVRVUwlSVFVTQkZyZWVEZXNjcmlwdG9yUmVxdWVzdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUJ1bGtPdXRQaXBlSWQsCisJSU4JVUlOVDMyCQkJTnVtYmVyUmVxdWlyZWQpCit7CisvLwlVQ0hBUgkJCUZyZWVOdW1iZXIgPSAwOworLy8JVUlOVAkJCUluZGV4OworCU5ESVNfU1RBVFVTCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCXVuc2lnbmVkIGxvbmcgICBJcnFGbGFnczsKKwlIVF9UWF9DT05URVhUCSpwSFRUWENvbnRleHQ7CisKKworCXBIVFRYQ29udGV4dCA9ICZwQWQtPlR4Q29udGV4dFtCdWxrT3V0UGlwZUlkXTsKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCWlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uIDwgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uKSAmJiAoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiArIE51bWJlclJlcXVpcmVkICsgTE9DQUxfVFhCVUZfU0laRSkgPiBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pKQorCXsKKworCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgKGZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTCA8PCBCdWxrT3V0UGlwZUlkKSk7CisJfQorCWVsc2UgaWYgKChwSFRUWENvbnRleHQtPkN1cldyaXRlUG9zaXRpb24gPT0gOCkgJiYgKHBIVFRYQ29udGV4dC0+TmV4dEJ1bGtPdXRQb3NpdGlvbiA8IChOdW1iZXJSZXF1aXJlZCArIExPQ0FMX1RYQlVGX1NJWkUpKSkKKwl7CisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IEJ1bGtPdXRQaXBlSWQpKTsKKwl9CisJZWxzZSBpZiAocEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9PSBUUlVFKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSVFVTQkZyZWVEIGMzIC0tPiBRdWVJZHg9JWQsIENXUG9zPSVsZCwgTkJPdXRQb3M9JWxkIVxuIiwgQnVsa091dFBpcGVJZCwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uLCBwSFRUWENvbnRleHQtPk5leHRCdWxrT3V0UG9zaXRpb24pKTsKKwkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIChmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUwgPDwgQnVsa091dFBpcGVJZCkpOworCX0KKwllbHNlCisJeworCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCX0KKwlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisKKworCXJldHVybiAoU3RhdHVzKTsKK30KKworCitORElTX1NUQVRVUyBSVFVTQkZyZWVEZXNjcmlwdG9yUmVsZWFzZSgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBVQ0hBUgkJQnVsa091dFBpcGVJZCkKK3sKKwl1bnNpZ25lZCBsb25nICAgSXJxRmxhZ3M7CisJSFRfVFhfQ09OVEVYVAkqcEhUVFhDb250ZXh0OworCisJcEhUVFhDb250ZXh0ID0gJnBBZC0+VHhDb250ZXh0W0J1bGtPdXRQaXBlSWRdOworCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJcEhUVFhDb250ZXh0LT5iQ3VyV3JpdGluZyA9IEZBTFNFOworCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKworCXJldHVybiAoTkRJU19TVEFUVVNfU1VDQ0VTUyk7Cit9CisKKworQk9PTEVBTglSVFVTQk5lZWRRdWV1ZUJhY2tGb3JBZ2coCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gVUNIQVIJCUJ1bGtPdXRQaXBlSWQpCit7CisJdW5zaWduZWQgbG9uZyAgIElycUZsYWdzOworCUhUX1RYX0NPTlRFWFQJKnBIVFRYQ29udGV4dDsKKwlCT09MRUFOCQkJbmVlZFF1ZUJhY2sgPSBGQUxTRTsKKworCXBIVFRYQ29udGV4dCA9ICZwQWQtPlR4Q29udGV4dFtCdWxrT3V0UGlwZUlkXTsKKworCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJaWYgKChwSFRUWENvbnRleHQtPklSUFBlbmRpbmcgPT0gVFJVRSkgIC8qJiYgKHBBZC0+VHhTd1F1ZXVlW0J1bGtPdXRQaXBlSWRdLk51bWJlciA9PSAwKSAqLykKKwl7CisJCWlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uIDwgcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbikgJiYKKwkJCSgoKHBIVFRYQ29udGV4dC0+RU5leHRCdWxrT3V0UG9zaXRpb24rTUFYX0FHR1JFR0FUSU9OX1NJWkUpIDwgTUFYX1RYQlVMS19MSU1JVCkgfHwgKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiA+IE1BWF9BR0dSRUdBVElPTl9TSVpFKSkpCisJCXsKKwkJCW5lZWRRdWVCYWNrID0gVFJVRTsKKwkJfQorCQllbHNlIGlmICgocEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uID4gcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbikgJiYKKwkJCQkgKChwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uICsgTUFYX0FHR1JFR0FUSU9OX1NJWkUpIDwgcEhUVFhDb250ZXh0LT5DdXJXcml0ZVBvc2l0aW9uKSkKKwkJeworCQkJbmVlZFF1ZUJhY2sgPSBUUlVFOworCQl9CisJfQorCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5UeENvbnRleHRRdWV1ZUxvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKworCXJldHVybiBuZWVkUXVlQmFjazsKKworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlSVFVTQlJlamVjdFBlbmRpbmdQYWNrZXRzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVVDSEFSCQkJSW5kZXg7CisJUFFVRVVFX0VOVFJZCXBFbnRyeTsKKwlQTkRJU19QQUNLRVQJcFBhY2tldDsKKwlQUVVFVUVfSEVBREVSCXBRdWV1ZTsKKworCisJZm9yIChJbmRleCA9IDA7IEluZGV4IDwgNDsgSW5kZXgrKykKKwl7CisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+VHhTd1F1ZXVlTG9ja1tJbmRleF0pOworCQl3aGlsZSAocEFkLT5UeFN3UXVldWVbSW5kZXhdLkhlYWQgIT0gTlVMTCkKKwkJeworCQkJcFF1ZXVlID0gKFBRVUVVRV9IRUFERVIpICYocEFkLT5UeFN3UXVldWVbSW5kZXhdKTsKKwkJCXBFbnRyeSA9IFJlbW92ZUhlYWRRdWV1ZShwUXVldWUpOworCQkJcFBhY2tldCA9IFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwRW50cnkpOworCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQl9CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+VHhTd1F1ZXVlTG9ja1tJbmRleF0pOworCisJfQorCit9CisKK1ZPSUQgUlRNUFdyaXRlVHhJbmZvKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWElORk9fU1RSVUMgCXBUeEluZm8sCisJSU4JICBVU0hPUlQJCVVTQkRNQXBrdExlbiwKKwlJTgkgIEJPT0xFQU4JCWJXaXYsCisJSU4JICBVQ0hBUgkJCVF1ZXVlU2VsLAorCUlOCSAgVUNIQVIJCQlOZXh0VmFsaWQsCisJSU4JICBVQ0hBUgkJCVR4QnVyc3QpCit7CisJcFR4SW5mby0+VVNCRE1BVHhQa3RMZW4gPSBVU0JETUFwa3RMZW47CisJcFR4SW5mby0+UVNFTCA9IFF1ZXVlU2VsOworCWlmIChRdWV1ZVNlbCAhPSBGSUZPX0VEQ0EpCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT0+IFF1ZXVlU2VsICE9IEZJRk9fRURDQTw9PT09PT09PT09PT1cbiIpKTsKKwlwVHhJbmZvLT5VU0JETUFOZXh0VkxEID0gRkFMU0U7IC8vTmV4dFZhbGlkOyAgLy8gTmVlZCB0byBjaGVjayB3aXRoIEphbiBhYm91dCB0aGlzLgorCXBUeEluZm8tPlVTQkRNQVR4YnVyc3QgPSBUeEJ1cnN0OworCXBUeEluZm8tPldJViA9IGJXaXY7CisJcFR4SW5mby0+U3dVc2VMYXN0Um91bmQgPSAwOworCXBUeEluZm8tPnJzdiA9IDA7CisJcFR4SW5mby0+cnN2MiA9IDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3J0dXNiX2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydHVzYl9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YTUyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9ydHVzYl9pby5jCkBAIC0wLDAgKzEsMTkwOCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAJTW9kdWxlIE5hbWU6CisJcnR1c2JfaW8uYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JICAgIFdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTmFtZQkJRGF0ZQkgICAgTW9kaWZpY2F0aW9uIGxvZ3MKKwlQYXVsIExpbiAgICAwNi0yNS0yMDA0ICBjcmVhdGVkCisqLworCisjaW5jbHVkZQkiLi4vcnRfY29uZmlnLmgiCisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IE5JQyBpbml0aWFsaXphdGlvbiBjb21wbGV0ZQorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCitOVFNUQVRVUwlSVFVTQkZpcm13YXJlUnVuKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCU5UU1RBVFVTCVN0YXR1czsKKworCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJCXBBZCwKKwkJVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VULAorCQlERVZJQ0VfVkVORE9SX1JFUVVFU1RfT1VULAorCQkweDAxLAorCQkweDgsCisJCTAsCisJCU5VTEwsCisJCTApOworCisJcmV0dXJuIFN0YXR1czsKK30KKworCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBXcml0ZSBGaXJtd2FyZSB0byBOSUMuCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUyBSVFVTQkZpcm13YXJlV3JpdGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSCQlwRndJbWFnZSwKKwlJTiBVTE9ORwkJRndMZW4pCit7CisJVUlOVDMyCQlNYWNSZWc7CisJTlRTVEFUVVMgCVN0YXR1czsKKy8vCVVMT05HIAkJaTsKKwlVU0hPUlQJCXdyaXRlTGVuOworCisJU3RhdHVzID0gUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBNQUNfQ1NSMCwgJk1hY1JlZyk7CisKKworCXdyaXRlTGVuID0gRndMZW47CisJUlRVU0JNdWx0aVdyaXRlKHBBZCwgRklSTVdBUkVfSU1BR0VfQkFTRSwgcEZ3SW1hZ2UsIHdyaXRlTGVuKTsKKworCVN0YXR1cyA9IFJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIDB4NzAxNCwgMHhmZmZmZmZmZik7CisJU3RhdHVzID0gUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgMHg3MDFjLCAweGZmZmZmZmZmKTsKKwlTdGF0dXMgPSBSVFVTQkZpcm13YXJlUnVuKHBBZCk7CisKKwlSVE1QdXNlY0RlbGF5KDEwMDAwKTsKKwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLEgyTV9NQUlMQk9YX0NTUiwwKTsKKwlBc2ljU2VuZENvbW1hbmRUb01jdShwQWQsIDB4NzIsIDB4MDAsIDB4MDAsIDB4MDApOy8vcmVzZXQgcmYgYnkgTUNVIHN1cHBvcnRlZCBieSBuZXcgZmlybXdhcmUKKworCXJldHVybiBTdGF0dXM7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IEdldCBjdXJyZW50IGZpcm13YXJlIG9wZXJhdGlvbiBtb2RlIChSZXR1cm4gVmFsdWUpCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisJCTAgb3IgMSA9IERvd25sb2FkZWQgYnkgaG9zdCBkcml2ZXIKKwkJb3RoZXJzID0gRHJpdmVyIGRvZXNuJ3QgZG93bmxvYWQgZmlybXdhcmUKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTCVJUVVNCRmlybXdhcmVPcG1vZGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVSU5UMzIJCQlwVmFsdWUpCit7CisJTlRTVEFUVVMJU3RhdHVzOworCisJU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwkJcEFkLAorCQkoVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fSU4gfCBVU0JEX1NIT1JUX1RSQU5TRkVSX09LKSwKKwkJREVWSUNFX1ZFTkRPUl9SRVFVRVNUX0lOLAorCQkweDEsCisJCTB4MTEsCisJCTAsCisJCXBWYWx1ZSwKKwkJNCk7CisJcmV0dXJuIFN0YXR1czsKK30KK05UU1RBVFVTCVJUVVNCVmVuZGVyUmVzZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJTlRTVEFUVVMJU3RhdHVzOworCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCItLT5SVFVTQlZlbmRlclJlc2V0XG4iKSk7CisJU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwkJcEFkLAorCQlVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9PVVQsCisJCURFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQsCisJCTB4MDEsCisJCTB4MSwKKwkJMCwKKwkJTlVMTCwKKwkJMCk7CisKKwlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiPC0tUlRVU0JWZW5kZXJSZXNldFxuIikpOworCXJldHVybiBTdGF0dXM7Cit9CisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjogUmVhZCB2YXJpb3VzIGxlbmd0aCBkYXRhIGZyb20gUlQyNTczCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUwlSVFVTQk11bHRpUmVhZCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJT1VUCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVTSE9SVAkJCWxlbmd0aCkKK3sKKwlOVFNUQVRVUwlTdGF0dXM7CisKKwlTdGF0dXMgPSBSVFVTQl9WZW5kb3JSZXF1ZXN0KAorCQlwQWQsCisJCShVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9JTiB8IFVTQkRfU0hPUlRfVFJBTlNGRVJfT0spLAorCQlERVZJQ0VfVkVORE9SX1JFUVVFU1RfSU4sCisJCTB4NywKKwkJMCwKKwkJT2Zmc2V0LAorCQlwRGF0YSwKKwkJbGVuZ3RoKTsKKworCXJldHVybiBTdGF0dXM7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBXcml0ZSB2YXJpb3VzIGxlbmd0aCBkYXRhIHRvIFJUMjU3MworCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JNdWx0aVdyaXRlX09uZUJ5dGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhKQoreworCU5UU1RBVFVTCVN0YXR1czsKKworCS8vIFRPRE86IEluIDI4NzAsIHVzZSB0aGlzIGZ1bmNpdG9uIGNhcmVmdWxseSBjYXVzZSBpdCdzIG5vdCBzdGFibGUuCisJU3RhdHVzID0gUlRVU0JfVmVuZG9yUmVxdWVzdCgKKwkJcEFkLAorCQlVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9PVVQsCisJCURFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQsCisJCTB4NiwKKwkJMCwKKwkJT2Zmc2V0LAorCQlwRGF0YSwKKwkJMSk7CisKKwlyZXR1cm4gU3RhdHVzOworfQorCitOVFNUQVRVUwlSVFVTQk11bHRpV3JpdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVTSE9SVAkJCWxlbmd0aCkKK3sKKwlOVFNUQVRVUwlTdGF0dXM7CisKKworICAgICAgICBVU0hPUlQgICAgICAgICAgaW5kZXggPSAwLFZhbHVlOworICAgICAgICBQVUNIQVIgICAgICAgICAgcFNyYyA9IHBEYXRhOworICAgICAgICBVU0hPUlQgICAgICAgICAgcmVzdWRlID0gMDsKKworICAgICAgICByZXN1ZGUgPSBsZW5ndGggJSAyOworCQlsZW5ndGggICs9IHJlc3VkZTsKKwkJZG8KKwkJeworCQkJVmFsdWUgPShVU0hPUlQpKCAqcFNyYyAgfCAoKihwU3JjICsgMSkgPDwgOCkpOworCQlTdGF0dXMgPSBSVFVTQlNpbmdsZVdyaXRlKHBBZCxPZmZzZXQgKyBpbmRleCxWYWx1ZSk7CisgICAgICAgICAgICBpbmRleCArPTI7CisgICAgICAgICAgICBsZW5ndGggLT0gMjsKKyAgICAgICAgICAgIHBTcmMgPSBwU3JjICsgMjsKKyAgICAgICAgfXdoaWxlKGxlbmd0aCA+IDApOworCisJcmV0dXJuIFN0YXR1czsKK30KKworCitOVFNUQVRVUyBSVFVTQlNpbmdsZVdyaXRlKAorCUlOIAlSVE1QX0FEQVBURVIgCSpwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCUlOCVVTSE9SVAkJCVZhbHVlKQoreworCU5UU1RBVFVTCVN0YXR1czsKKworCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJCXBBZCwKKwkJVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VULAorCQlERVZJQ0VfVkVORE9SX1JFUVVFU1RfT1VULAorCQkweDIsCisJCVZhbHVlLAorCQlPZmZzZXQsCisJCU5VTEwsCisJCTApOworCisJcmV0dXJuIFN0YXR1czsKKworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBSZWFkIDMyLWJpdCBNQUMgcmVnaXN0ZXIKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVJTlQzMgkJCXBWYWx1ZSkKK3sKKwlOVFNUQVRVUwlTdGF0dXM7CisJVUlOVDMyCQlsb2NhbFZhbDsKKworCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJCXBBZCwKKwkJKFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX0lOIHwgVVNCRF9TSE9SVF9UUkFOU0ZFUl9PSyksCisJCURFVklDRV9WRU5ET1JfUkVRVUVTVF9JTiwKKwkJMHg3LAorCQkwLAorCQlPZmZzZXQsCisJCSZsb2NhbFZhbCwKKwkJNCk7CisKKwkqcFZhbHVlID0gbGUyY3B1MzIobG9jYWxWYWwpOworCisKKwlpZiAoU3RhdHVzIDwgMCkKKwkJKnBWYWx1ZSA9IDB4ZmZmZmZmZmY7CisKKwlyZXR1cm4gU3RhdHVzOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBXcml0ZSAzMi1iaXQgTUFDIHJlZ2lzdGVyCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCUlOCVVJTlQzMgkJCVZhbHVlKQoreworCU5UU1RBVFVTCVN0YXR1czsKKwlVSU5UMzIJCWxvY2FsVmFsOworCisJbG9jYWxWYWwgPSBWYWx1ZTsKKworCVN0YXR1cyA9IFJUVVNCU2luZ2xlV3JpdGUocEFkLCBPZmZzZXQsIChVU0hPUlQpKGxvY2FsVmFsICYgMHhmZmZmKSk7CisJU3RhdHVzID0gUlRVU0JTaW5nbGVXcml0ZShwQWQsIE9mZnNldCArIDIsIChVU0hPUlQpKChsb2NhbFZhbCAmIDB4ZmZmZjAwMDApID4+IDE2KSk7CisKKwlyZXR1cm4gU3RhdHVzOworfQorCisKKworI2lmIDEKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBSZWFkIDgtYml0IEJCUCByZWdpc3RlcgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JSZWFkQkJQUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJZCwKKwlJTglQVUNIQVIJCQlwVmFsdWUpCit7CisJQkJQX0NTUl9DRkdfU1RSVUMJQmJwQ3NyOworCVVJTlQJCQlpID0gMDsKKwlOVFNUQVRVUwkJc3RhdHVzOworCisJLy8gVmVyaWZ5IHRoZSBidXN5IGNvbmRpdGlvbgorCWRvCisJeworCQlzdGF0dXMgPSBSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIEJCUF9DU1JfQ0ZHLCAmQmJwQ3NyLndvcmQpOworCQlpZihzdGF0dXMgPj0gMCkKKwkJeworCQlpZiAoIShCYnBDc3IuZmllbGQuQnVzeSA9PSBCVVNZKSkKKwkJCWJyZWFrOworCQl9CisJCXByaW50aygiUlRVU0JSZWFkQkJQUmVnaXN0ZXIoQkJQX0NTUl9DRkdfMSk6cmV0cnkgY291bnQ9JWQhXG4iLCBpKTsKKwkJaSsrOworCX0KKwl3aGlsZSAoKGkgPCBSRVRSWV9MSU1JVCkgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKTsKKworCWlmICgoaSA9PSBSRVRSWV9MSU1JVCkgfHwgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJeworCQkvLworCQkvLyBSZWFkIGZhaWxlZCB0aGVuIFJldHVybiBEZWZhdWx0IHZhbHVlLgorCQkvLworCQkqcFZhbHVlID0gcEFkLT5CYnBXcml0ZUxhdGNoW0lkXTsKKworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiUmV0cnkgY291bnQgZXhoYXVzdGVkIG9yIGRldmljZSByZW1vdmVkISEhXG4iKSk7CisJCXJldHVybiBTVEFUVVNfVU5TVUNDRVNTRlVMOworCX0KKworCS8vIFByZXBhcmUgZm9yIHdyaXRlIG1hdGVyaWFsCisJQmJwQ3NyLndvcmQgCQkJCT0gMDsKKwlCYnBDc3IuZmllbGQuZlJlYWQJCQk9IDE7CisJQmJwQ3NyLmZpZWxkLkJ1c3kJCQk9IDE7CisJQmJwQ3NyLmZpZWxkLlJlZ051bSAJCT0gSWQ7CisJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgQkJQX0NTUl9DRkcsIEJicENzci53b3JkKTsKKworCWkgPSAwOworCS8vIFZlcmlmeSB0aGUgYnVzeSBjb25kaXRpb24KKwlkbworCXsKKwkJc3RhdHVzID0gUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBCQlBfQ1NSX0NGRywgJkJicENzci53b3JkKTsKKwkJaWYgKHN0YXR1cyA+PSAwKQorCQl7CisJCWlmICghKEJicENzci5maWVsZC5CdXN5ID09IEJVU1kpKQorCQl7CisJCQkqcFZhbHVlID0gKFVDSEFSKUJicENzci5maWVsZC5WYWx1ZTsKKwkJCWJyZWFrOworCQl9CisJCX0KKwkJcHJpbnRrKCJSVFVTQlJlYWRCQlBSZWdpc3RlcihCQlBfQ1NSX0NGR18yKTpyZXRyeSBjb3VudD0lZCFcbiIsIGkpOworCQlpKys7CisJfQorCXdoaWxlICgoaSA8IFJFVFJZX0xJTUlUKSAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpOworCisJaWYgKChpID09IFJFVFJZX0xJTUlUKSB8fCAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkKKwl7CisJCS8vCisJCS8vIFJlYWQgZmFpbGVkIHRoZW4gUmV0dXJuIERlZmF1bHQgdmFsdWUuCisJCS8vCisJCSpwVmFsdWUgPSBwQWQtPkJicFdyaXRlTGF0Y2hbSWRdOworCisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJSZXRyeSBjb3VudCBleGhhdXN0ZWQgb3IgZGV2aWNlIHJlbW92ZWQhISFcbiIpKTsKKwkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7CisJfQorCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorI2Vsc2UKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBSZWFkIDgtYml0IEJCUCByZWdpc3RlciB2aWEgZmlybXdhcmUKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTCVJUVVNCUmVhZEJCUFJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSWQsCisJSU4JUFVDSEFSCQkJcFZhbHVlKQoreworCUJCUF9DU1JfQ0ZHX1NUUlVDCUJicENzcjsKKwlpbnQJCQkJCWksIGs7CisJZm9yIChpPTA7IGk8TUFYX0JVU1lfQ09VTlQ7IGkrKykKKwl7CisJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgSDJNX0JCUF9BR0VOVCwgJkJicENzci53b3JkKTsKKwkJaWYgKEJicENzci5maWVsZC5CdXN5ID09IEJVU1kpCisJCXsKKwkJCWNvbnRpbnVlOworCQl9CisJCUJicENzci53b3JkID0gMDsKKwkJQmJwQ3NyLmZpZWxkLmZSZWFkID0gMTsKKwkJQmJwQ3NyLmZpZWxkLkJCUF9SV19NT0RFID0gMTsKKwkJQmJwQ3NyLmZpZWxkLkJ1c3kgPSAxOworCQlCYnBDc3IuZmllbGQuUmVnTnVtID0gSWQ7CisJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIEgyTV9CQlBfQUdFTlQsIEJicENzci53b3JkKTsKKwkJQXNpY1NlbmRDb21tYW5kVG9NY3UocEFkLCAweDgwLCAweGZmLCAweDAsIDB4MCk7CisJCWZvciAoaz0wOyBrPE1BWF9CVVNZX0NPVU5UOyBrKyspCisJCXsKKwkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgSDJNX0JCUF9BR0VOVCwgJkJicENzci53b3JkKTsKKwkJCWlmIChCYnBDc3IuZmllbGQuQnVzeSA9PSBJRExFKQorCQkJCWJyZWFrOworCQl9CisJCWlmICgoQmJwQ3NyLmZpZWxkLkJ1c3kgPT0gSURMRSkgJiYKKwkJCShCYnBDc3IuZmllbGQuUmVnTnVtID09IElkKSkKKwkJeworCQkJKnBWYWx1ZSA9IChVQ0hBUilCYnBDc3IuZmllbGQuVmFsdWU7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoQmJwQ3NyLmZpZWxkLkJ1c3kgPT0gQlVTWSkKKwl7CisJCURCR1BSSU5UX0VSUigoIkJCUCByZWFkIFIlZD0weCV4IGZhaWxcbiIsIElkLCBCYnBDc3Iud29yZCkpOworCQkqcFZhbHVlID0gcEFkLT5CYnBXcml0ZUxhdGNoW0lkXTsKKwkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7CisJfQorCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKyNlbmRpZgorCisjaWYgMQorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIDgtYml0IEJCUCByZWdpc3RlcgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JXcml0ZUJCUFJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSWQsCisJSU4JVUNIQVIJCQlWYWx1ZSkKK3sKKwlCQlBfQ1NSX0NGR19TVFJVQwlCYnBDc3I7CisJVUlOVAkJCWkgPSAwOworCU5UU1RBVFVTCQlzdGF0dXM7CisJLy8gVmVyaWZ5IHRoZSBidXN5IGNvbmRpdGlvbgorCWRvCisJeworCQlzdGF0dXMgPSBSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIEJCUF9DU1JfQ0ZHLCAmQmJwQ3NyLndvcmQpOworCQlpZiAoc3RhdHVzID49IDApCisJCXsKKwkJaWYgKCEoQmJwQ3NyLmZpZWxkLkJ1c3kgPT0gQlVTWSkpCisJCQlicmVhazsKKwkJfQorCQlwcmludGsoIlJUVVNCV3JpdGVCQlBSZWdpc3RlcihCQlBfQ1NSX0NGRyk6cmV0cnkgY291bnQ9JWQhXG4iLCBpKTsKKwkJaSsrOworCX0KKwl3aGlsZSAoKGkgPCBSRVRSWV9MSU1JVCkgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKTsKKworCWlmICgoaSA9PSBSRVRSWV9MSU1JVCkgfHwgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpCisJeworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiUmV0cnkgY291bnQgZXhoYXVzdGVkIG9yIGRldmljZSByZW1vdmVkISEhXG4iKSk7CisJCXJldHVybiBTVEFUVVNfVU5TVUNDRVNTRlVMOworCX0KKworCS8vIFByZXBhcmUgZm9yIHdyaXRlIG1hdGVyaWFsCisJQmJwQ3NyLndvcmQgCQkJCT0gMDsKKwlCYnBDc3IuZmllbGQuZlJlYWQJCQk9IDA7CisJQmJwQ3NyLmZpZWxkLlZhbHVlCQkJPSBWYWx1ZTsKKwlCYnBDc3IuZmllbGQuQnVzeQkJCT0gMTsKKwlCYnBDc3IuZmllbGQuUmVnTnVtIAkJPSBJZDsKKwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBCQlBfQ1NSX0NGRywgQmJwQ3NyLndvcmQpOworCisJcEFkLT5CYnBXcml0ZUxhdGNoW0lkXSA9IFZhbHVlOworCisJcmV0dXJuIFNUQVRVU19TVUNDRVNTOworfQorI2Vsc2UKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOiBXcml0ZSA4LWJpdCBCQlAgcmVnaXN0ZXIgdmlhIGZpcm13YXJlCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKK05UU1RBVFVTCVJUVVNCV3JpdGVCQlBSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUlkLAorCUlOCVVDSEFSCQkJVmFsdWUpCisKK3sKKwlCQlBfQ1NSX0NGR19TVFJVQwlCYnBDc3I7CisJaW50CQkJCQlCdXN5Q250OworCWZvciAoQnVzeUNudD0wOyBCdXN5Q250PE1BWF9CVVNZX0NPVU5UOyBCdXN5Q250KyspCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEgyTV9CQlBfQUdFTlQsICZCYnBDc3Iud29yZCk7CisJCWlmIChCYnBDc3IuZmllbGQuQnVzeSA9PSBCVVNZKQorCQkJY29udGludWU7CisJCUJicENzci53b3JkID0gMDsKKwkJQmJwQ3NyLmZpZWxkLmZSZWFkID0gMDsKKwkJQmJwQ3NyLmZpZWxkLkJCUF9SV19NT0RFID0gMTsKKwkJQmJwQ3NyLmZpZWxkLkJ1c3kgPSAxOworCQlCYnBDc3IuZmllbGQuVmFsdWUgPSBWYWx1ZTsKKwkJQmJwQ3NyLmZpZWxkLlJlZ051bSA9IElkOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBIMk1fQkJQX0FHRU5ULCBCYnBDc3Iud29yZCk7CisJCUFzaWNTZW5kQ29tbWFuZFRvTWN1KHBBZCwgMHg4MCwgMHhmZiwgMHgwLCAweDApOworCQlwQWQtPkJicFdyaXRlTGF0Y2hbSWRdID0gVmFsdWU7CisJCWJyZWFrOworCX0KKwlpZiAoQnVzeUNudCA9PSBNQVhfQlVTWV9DT1VOVCkKKwl7CisJCURCR1BSSU5UX0VSUigoIkJCUCB3cml0ZSBSJWQ9MHgleCBmYWlsXG4iLCBJZCwgQmJwQ3NyLndvcmQpKTsKKwkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7CisJfQorCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKyNlbmRpZgorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246IFdyaXRlIFJGIHJlZ2lzdGVyIHRocm91Z2ggTUFDCisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUwlSVFVTQldyaXRlUkZSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVSU5UMzIJCQlWYWx1ZSkKK3sKKwlQSFlfQ1NSNF9TVFJVQwlQaHlDc3I0OworCVVJTlQJCQlpID0gMDsKKwlOVFNUQVRVUwkJc3RhdHVzOworCisJTmRpc1plcm9NZW1vcnkoJlBoeUNzcjQsIHNpemVvZihQSFlfQ1NSNF9TVFJVQykpOworCWRvCisJeworCQlzdGF0dXMgPSBSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFJGX0NTUl9DRkcwLCAmUGh5Q3NyNC53b3JkKTsKKwkJaWYgKHN0YXR1cyA+PSAwKQorCQl7CisJCWlmICghKFBoeUNzcjQuZmllbGQuQnVzeSkpCisJCQlicmVhazsKKwkJfQorCQlwcmludGsoIlJUVVNCV3JpdGVSRlJlZ2lzdGVyKFJGX0NTUl9DRkcwKTpyZXRyeSBjb3VudD0lZCFcbiIsIGkpOworCQlpKys7CisJfQorCXdoaWxlICgoaSA8IFJFVFJZX0xJTUlUKSAmJiAoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpOworCisJaWYgKChpID09IFJFVFJZX0xJTUlUKSB8fCAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKSkKKwl7CisJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJSZXRyeSBjb3VudCBleGhhdXN0ZWQgb3IgZGV2aWNlIHJlbW92ZWQhISFcbiIpKTsKKwkJcmV0dXJuIFNUQVRVU19VTlNVQ0NFU1NGVUw7CisJfQorCisJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgUkZfQ1NSX0NGRzAsIFZhbHVlKTsKKworCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKK30KKworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTCVJUVVNCUmVhZEVFUFJPTSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJT1VUCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVTSE9SVAkJCWxlbmd0aCkKK3sKKwlOVFNUQVRVUwlTdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKworI2lmZGVmIFJUMzB4eAorCWlmKHBBZC0+YlVzZUVmdXNlKQorCXsKKwkJU3RhdHVzID1lRnVzZVJlYWQocEFkLCBPZmZzZXQsIHBEYXRhLCBsZW5ndGgpOworCX0KKwllbHNlCisjZW5kaWYgLy8gUlQzMHh4IC8vCisJeworCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJCXBBZCwKKwkJKFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX0lOIHwgVVNCRF9TSE9SVF9UUkFOU0ZFUl9PSyksCisJCURFVklDRV9WRU5ET1JfUkVRVUVTVF9JTiwKKwkJMHg5LAorCQkwLAorCQlPZmZzZXQsCisJCXBEYXRhLAorCQlsZW5ndGgpOworCX0KKworCXJldHVybiBTdGF0dXM7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworTlRTVEFUVVMJUlRVU0JXcml0ZUVFUFJPTSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKQoreworCU5UU1RBVFVTCVN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisjaWZkZWYgUlQzMHh4CisJaWYocEFkLT5iVXNlRWZ1c2UpCisJeworCQlTdGF0dXMgPSBlRnVzZVdyaXRlKHBBZCwgT2Zmc2V0LCBwRGF0YSwgbGVuZ3RoKTsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFJUMzB4eCAvLworCXsKKwlTdGF0dXMgPSBSVFVTQl9WZW5kb3JSZXF1ZXN0KAorCQlwQWQsCisJCVVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX09VVCwKKwkJREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCwKKwkJMHg4LAorCQkwLAorCQlPZmZzZXQsCisJCXBEYXRhLAorCQlsZW5ndGgpOworCX0KKworCXJldHVybiBTdGF0dXM7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJSVJRTCA9CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVFVTQlB1dFRvU2xlZXAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpCit7CisJVUlOVDMyCQl2YWx1ZTsKKworCS8vIFRpbWVvdXQgMHg0MCB4IDUwdXMKKwl2YWx1ZSA9IChTTEVFUENJRDw8MTYpKyhPV05FUk1DVTw8MjQpKyAoMHg0MDw8OCkrMTsKKwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCAweDcwMTAsIHZhbHVlKTsKKwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCAweDQwNCwgMHgzMCk7CisJLy9SVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKTsKKwlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiU2xlZXAgTWFpbGJveCB0ZXN0dmFsdWUgJXhcbiIsIHZhbHVlKSk7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUyBSVFVTQldha2VVcCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlOVFNUQVRVUwlTdGF0dXM7CisKKwlTdGF0dXMgPSBSVFVTQl9WZW5kb3JSZXF1ZXN0KAorCQlwQWQsCisJCVVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX09VVCwKKwkJREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCwKKwkJMHgwMSwKKwkJMHgwOSwKKwkJMCwKKwkJTlVMTCwKKwkJMCk7CisKKwlyZXR1cm4gU3RhdHVzOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRVU0JJbml0aWFsaXplQ21kUSgKKwlJTglQQ21kUQljbWRxKQoreworCWNtZHEtPmhlYWQgPSBOVUxMOworCWNtZHEtPnRhaWwgPSBOVUxMOworCWNtZHEtPnNpemUgPSAwOworCWNtZHEtPkNtZFFTdGF0ZSA9IFJUMjg3MF9USFJFQURfSU5JVEVEOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCUlSUUwgPQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTCVJUVVNCRW5xdWV1ZUNtZEZyb21OZGlzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU5ESVNfT0lECQlPaWQsCisJSU4JQk9PTEVBTgkJCVNldEluZm9ybWF0aW9uLAorCUlOCVBWT0lECQkJcEluZm9ybWF0aW9uQnVmZmVyLAorCUlOCVVJTlQzMgkJCUluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKQoreworCU5ESVNfU1RBVFVTCXN0YXR1czsKKwlQQ21kUUVsbXQJY21kcWVsbXQgPSBOVUxMOworCVBPU19DT09LSUUgcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKworCisJaWYgKHBPYmotPlJUVVNCQ21kVGhyX3BpZCA8IDApCisJCXJldHVybiAoTkRJU19TVEFUVVNfUkVTT1VSQ0VTKTsKKworCXN0YXR1cyA9IFJUTVBBbGxvY2F0ZU1lbW9yeSgoUFZPSUQgKikmY21kcWVsbXQsIHNpemVvZihDbWRRRWxtdCkpOworCWlmICgoc3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHx8IChjbWRxZWxtdCA9PSBOVUxMKSkKKwkJcmV0dXJuIChORElTX1NUQVRVU19SRVNPVVJDRVMpOworCisJCWNtZHFlbG10LT5idWZmZXIgPSBOVUxMOworCQlpZiAocEluZm9ybWF0aW9uQnVmZmVyICE9IE5VTEwpCisJCXsKKwkJCXN0YXR1cyA9IFJUTVBBbGxvY2F0ZU1lbW9yeSgoUFZPSUQgKikmY21kcWVsbXQtPmJ1ZmZlciwgSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpOworCQkJaWYgKChzdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgfHwgKGNtZHFlbG10LT5idWZmZXIgPT0gTlVMTCkpCisJCQl7CisJCQkJa2ZyZWUoY21kcWVsbXQpOworCQkJCXJldHVybiAoTkRJU19TVEFUVVNfUkVTT1VSQ0VTKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShjbWRxZWxtdC0+YnVmZmVyLCBwSW5mb3JtYXRpb25CdWZmZXIsIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKTsKKwkJCQljbWRxZWxtdC0+YnVmZmVybGVuZ3RoID0gSW5mb3JtYXRpb25CdWZmZXJMZW5ndGg7CisJCQl9CisJCX0KKwkJZWxzZQorCQkJY21kcWVsbXQtPmJ1ZmZlcmxlbmd0aCA9IDA7CisKKwljbWRxZWxtdC0+Y29tbWFuZCA9IE9pZDsKKwljbWRxZWxtdC0+Q21kRnJvbU5kaXMgPSBUUlVFOworCWlmIChTZXRJbmZvcm1hdGlvbiA9PSBUUlVFKQorCQljbWRxZWxtdC0+U2V0T3BlcmF0aW9uID0gVFJVRTsKKwllbHNlCisJCWNtZHFlbG10LT5TZXRPcGVyYXRpb24gPSBGQUxTRTsKKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworCWlmIChwQWQtPkNtZFEuQ21kUVN0YXRlICYgUlQyODcwX1RIUkVBRF9DQU5fRE9fSU5TRVJUKQorCXsKKwkJRW5xdWV1ZUNtZCgoJnBBZC0+Q21kUSksIGNtZHFlbG10KTsKKwkJc3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwl9CisJZWxzZQorCXsKKwkJc3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5DbWRRTG9jayk7CisKKwlpZiAoc3RhdHVzID09IE5ESVNfU1RBVFVTX0ZBSUxVUkUpCisJeworCQlpZiAoY21kcWVsbXQtPmJ1ZmZlcikKKwkJCU5kaXNGcmVlTWVtb3J5KGNtZHFlbG10LT5idWZmZXIsIGNtZHFlbG10LT5idWZmZXJsZW5ndGgsIDApOworCQlOZGlzRnJlZU1lbW9yeShjbWRxZWxtdCwgc2l6ZW9mKENtZFFFbG10KSwgMCk7CisJfQorCWVsc2UKKwlSVFVTQkNNRFVwKHBBZCk7CisKKworICAgIHJldHVybihORElTX1NUQVRVU19TVUNDRVNTKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUyBSVFVTQkVucXVldWVJbnRlcm5hbENtZCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBORElTX09JRAkJCU9pZCwKKwlJTiBQVk9JRAkJCXBJbmZvcm1hdGlvbkJ1ZmZlciwKKwlJTiBVSU5UMzIJCQlJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCkKK3sKKwlORElTX1NUQVRVUwlzdGF0dXM7CisJUENtZFFFbG10CWNtZHFlbG10ID0gTlVMTDsKKworCisJc3RhdHVzID0gUlRNUEFsbG9jYXRlTWVtb3J5KChQVk9JRCAqKSZjbWRxZWxtdCwgc2l6ZW9mKENtZFFFbG10KSk7CisJaWYgKChzdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykgfHwgKGNtZHFlbG10ID09IE5VTEwpKQorCQlyZXR1cm4gKE5ESVNfU1RBVFVTX1JFU09VUkNFUyk7CisJTmRpc1plcm9NZW1vcnkoY21kcWVsbXQsIHNpemVvZihDbWRRRWxtdCkpOworCisJaWYoSW5mb3JtYXRpb25CdWZmZXJMZW5ndGggPiAwKQorCXsKKwkJc3RhdHVzID0gUlRNUEFsbG9jYXRlTWVtb3J5KChQVk9JRCAqKSZjbWRxZWxtdC0+YnVmZmVyLCBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCk7CisJCWlmICgoc3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpIHx8IChjbWRxZWxtdC0+YnVmZmVyID09IE5VTEwpKQorCQl7CisJCQlOZGlzRnJlZU1lbW9yeShjbWRxZWxtdCwgc2l6ZW9mKENtZFFFbG10KSwgMCk7CisJCQlyZXR1cm4gKE5ESVNfU1RBVFVTX1JFU09VUkNFUyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlOZGlzTW92ZU1lbW9yeShjbWRxZWxtdC0+YnVmZmVyLCBwSW5mb3JtYXRpb25CdWZmZXIsIEluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKTsKKwkJCWNtZHFlbG10LT5idWZmZXJsZW5ndGggPSBJbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aDsKKwkJfQorCX0KKwllbHNlCisJeworCQljbWRxZWxtdC0+YnVmZmVyID0gTlVMTDsKKwkJY21kcWVsbXQtPmJ1ZmZlcmxlbmd0aCA9IDA7CisJfQorCisJY21kcWVsbXQtPmNvbW1hbmQgPSBPaWQ7CisJY21kcWVsbXQtPkNtZEZyb21OZGlzID0gRkFMU0U7CisKKwlpZiAoY21kcWVsbXQgIT0gTlVMTCkKKwl7CisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworCQlpZiAocEFkLT5DbWRRLkNtZFFTdGF0ZSAmIFJUMjg3MF9USFJFQURfQ0FOX0RPX0lOU0VSVCkKKwkJeworCQkJRW5xdWV1ZUNtZCgoJnBBZC0+Q21kUSksIGNtZHFlbG10KTsKKwkJCXN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJCX0KKwkJZWxzZQorCQl7CisJCQlzdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCQl9CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworCisJCWlmIChzdGF0dXMgPT0gTkRJU19TVEFUVVNfRkFJTFVSRSkKKwkJeworCQkJaWYgKGNtZHFlbG10LT5idWZmZXIpCisJCQkJTmRpc0ZyZWVNZW1vcnkoY21kcWVsbXQtPmJ1ZmZlciwgY21kcWVsbXQtPmJ1ZmZlcmxlbmd0aCwgMCk7CisJCQlOZGlzRnJlZU1lbW9yeShjbWRxZWxtdCwgc2l6ZW9mKENtZFFFbG10KSwgMCk7CisJCX0KKwkJZWxzZQorCQlSVFVTQkNNRFVwKHBBZCk7CisJfQorCXJldHVybihORElTX1NUQVRVU19TVUNDRVNTKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlJUlFMID0KKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUVVNCRGVxdWV1ZUNtZCgKKwlJTglQQ21kUQkJY21kcSwKKwlPVVQJUENtZFFFbG10CSpwY21kcWVsbXQpCit7CisJKnBjbWRxZWxtdCA9IGNtZHEtPmhlYWQ7CisKKwlpZiAoKnBjbWRxZWxtdCAhPSBOVUxMKQorCXsKKwkJY21kcS0+aGVhZCA9IGNtZHEtPmhlYWQtPm5leHQ7CisJCWNtZHEtPnNpemUtLTsKKwkJaWYgKGNtZHEtPnNpemUgPT0gMCkKKwkJCWNtZHEtPnRhaWwgPSBOVUxMOworCX0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgIHVzYl9jb250cm9sX21zZyAtIEJ1aWxkcyBhIGNvbnRyb2wgdXJiLCBzZW5kcyBpdCBvZmYgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uCisJICBAZGV2OiBwb2ludGVyIHRvIHRoZSB1c2IgZGV2aWNlIHRvIHNlbmQgdGhlIG1lc3NhZ2UgdG8KKwkgIEBwaXBlOiBlbmRwb2ludCAicGlwZSIgdG8gc2VuZCB0aGUgbWVzc2FnZSB0bworCSAgQHJlcXVlc3Q6IFVTQiBtZXNzYWdlIHJlcXVlc3QgdmFsdWUKKwkgIEByZXF1ZXN0dHlwZTogVVNCIG1lc3NhZ2UgcmVxdWVzdCB0eXBlIHZhbHVlCisJICBAdmFsdWU6IFVTQiBtZXNzYWdlIHZhbHVlCisJICBAaW5kZXg6IFVTQiBtZXNzYWdlIGluZGV4IHZhbHVlCisJICBAZGF0YTogcG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kCisJICBAc2l6ZTogbGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBkYXRhIHRvIHNlbmQKKwkgIEB0aW1lb3V0OiB0aW1lIGluIGppZmZpZXMgdG8gd2FpdCBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUgYmVmb3JlCisJCQkgIHRpbWluZyBvdXQgKGlmIDAgdGhlIHdhaXQgaXMgZm9yZXZlcikKKwkgIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQgKCkKKworCSAgVGhpcyBmdW5jdGlvbiBzZW5kcyBhIHNpbXBsZSBjb250cm9sIG1lc3NhZ2UgdG8gYSBzcGVjaWZpZWQgZW5kcG9pbnQKKwkgIGFuZCB3YWl0cyBmb3IgdGhlIG1lc3NhZ2UgdG8gY29tcGxldGUsIG9yIHRpbWVvdXQuCisJICBJZiBzdWNjZXNzZnVsLCBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdHJhbnNmZXJyZWQsIG90aGVyd2lzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKworCSBEb24ndCB1c2UgdGhpcyBmdW5jdGlvbiBmcm9tIHdpdGhpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCwgbGlrZSBhCisJICBib3R0b20gaGFsZiBoYW5kbGVyLglJZiB5b3UgbmVlZCBhbiBhc3luY2hyb25vdXMgbWVzc2FnZSwgb3IgbmVlZCB0byBzZW5kCisJICBhIG1lc3NhZ2UgZnJvbSB3aXRoaW4gaW50ZXJydXB0IGNvbnRleHQsIHVzZSB1c2Jfc3VibWl0X3VyYigpCisJICBJZiBhIHRocmVhZCBpbiB5b3VyIGRyaXZlciB1c2VzIHRoaXMgY2FsbCwgbWFrZSBzdXJlIHlvdXIgZGlzY29ubmVjdCgpCisJICBtZXRob2QgY2FuIHdhaXQgZm9yIGl0IHRvIGNvbXBsZXRlLiAgU2luY2UgeW91IGRvbid0IGhhdmUgYSBoYW5kbGUgb24KKwkgIHRoZSBVUkIgdXNlZCwgeW91IGNhbid0IGNhbmNlbCB0aGUgcmVxdWVzdC4KKworCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitOVFNUQVRVUyAgICBSVFVTQl9WZW5kb3JSZXF1ZXN0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVJTlQzMgkJCVRyYW5zZmVyRmxhZ3MsCisJSU4JVUNIQVIJCQlSZXF1ZXN0VHlwZSwKKwlJTglVQ0hBUgkJCVJlcXVlc3QsCisJSU4JVVNIT1JUCQkJVmFsdWUsCisJSU4JVVNIT1JUCQkJSW5kZXgsCisJSU4JUFZPSUQJCQlUcmFuc2ZlckJ1ZmZlciwKKwlJTglVSU5UMzIJCQlUcmFuc2ZlckJ1ZmZlckxlbmd0aCkKK3sKKwlpbnQJCQkJcmV0OworCVBPU19DT09LSUUJCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CisKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiZGV2aWNlIGRpc2Nvbm5lY3RlZFxuIikpOworCQlyZXR1cm4gLTE7CisJfQorCWVsc2UgaWYgKGluX2ludGVycnVwdCgpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiaW5faW50ZXJydXB0LCBSVFVTQl9WZW5kb3JSZXF1ZXN0IFJlcXVlc3QlMDJ4IFZhbHVlJTA0eCBPZmZzZXQlMDR4XG4iLFJlcXVlc3QsVmFsdWUsSW5kZXgpKTsKKworCQlyZXR1cm4gLTE7CisJfQorCWVsc2UKKwl7CisjZGVmaW5lIE1BWF9SRVRSWV9DT1VOVCAgMTAKKworCQlpbnQgcmV0cnlDb3VudCA9IDA7CisJCXZvaWQJKnRtcEJ1ZiA9IFRyYW5zZmVyQnVmZmVyOworCisJCS8vIEFjcXVpcmUgQ29udHJvbCB0b2tlbgorI2lmZGVmIElORl9BTUFaT05fU0UKKwkJcmV0ID0gZG93bl9pbnRlcnJ1cHRpYmxlKCYocEFkLT5Vc2JWZW5kb3JSZXFfc2VtYXBob3JlKSk7CisJCWlmIChwQWQtPlVzYlZlbmRvclJlcUJ1ZikKKwkJeworCQkJQVNTRVJUKFRyYW5zZmVyQnVmZmVyTGVuZ3RoIDxNQVhfUEFSQU1fQlVGRkVSX1NJWkUpOworCisJCSAgIAl0bXBCdWYgPSAodm9pZCAqKXBBZC0+VXNiVmVuZG9yUmVxQnVmOworCQkgICAJTmRpc1plcm9NZW1vcnkocEFkLT5Vc2JWZW5kb3JSZXFCdWYsIFRyYW5zZmVyQnVmZmVyTGVuZ3RoKTsKKworCQkgICAJaWYgKFJlcXVlc3RUeXBlID09IERFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQpCisJCSAgIAkgTmRpc01vdmVNZW1vcnkodG1wQnVmLCBUcmFuc2ZlckJ1ZmZlciwgVHJhbnNmZXJCdWZmZXJMZW5ndGgpOworCQl9CisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworCQlkbyB7CisJCWlmKCBSZXF1ZXN0VHlwZSA9PSBERVZJQ0VfVkVORE9SX1JFUVVFU1RfT1VUKQorCQkJcmV0PXVzYl9jb250cm9sX21zZyhwT2JqLT5wVXNiX0RldiwgdXNiX3NuZGN0cmxwaXBlKCBwT2JqLT5wVXNiX0RldiwgMCApLCBSZXF1ZXN0LCBSZXF1ZXN0VHlwZSwgVmFsdWUsSW5kZXgsIHRtcEJ1ZiwgVHJhbnNmZXJCdWZmZXJMZW5ndGgsIENPTlRST0xfVElNRU9VVF9KSUZGSUVTKTsKKwkJZWxzZSBpZihSZXF1ZXN0VHlwZSA9PSBERVZJQ0VfVkVORE9SX1JFUVVFU1RfSU4pCisJCQlyZXQ9dXNiX2NvbnRyb2xfbXNnKHBPYmotPnBVc2JfRGV2LCB1c2JfcmN2Y3RybHBpcGUoIHBPYmotPnBVc2JfRGV2LCAwICksIFJlcXVlc3QsIFJlcXVlc3RUeXBlLCBWYWx1ZSxJbmRleCwgdG1wQnVmLCBUcmFuc2ZlckJ1ZmZlckxlbmd0aCwgQ09OVFJPTF9USU1FT1VUX0pJRkZJRVMpOworCQllbHNlCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoInZlbmRvciByZXF1ZXN0IGRpcmVjdGlvbiBpcyBmYWlsZWRcbiIpKTsKKwkJCXJldCA9IC0xOworCQl9CisKKwkJCXJldHJ5Q291bnQrKzsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJcHJpbnRrKCIjXG4iKTsKKwkJCQlSVE1QdXNlY0RlbGF5KDUwMDApOworCQkJfQorCQl9IHdoaWxlKChyZXQgPCAwKSAmJiAocmV0cnlDb3VudCA8IE1BWF9SRVRSWV9DT1VOVCkpOworCisjaWZkZWYgSU5GX0FNQVpPTl9TRQorCSAgCWlmICgocEFkLT5Vc2JWZW5kb3JSZXFCdWYpICYmIChSZXF1ZXN0VHlwZSA9PSBERVZJQ0VfVkVORE9SX1JFUVVFU1RfSU4pKQorCQkJTmRpc01vdmVNZW1vcnkoVHJhbnNmZXJCdWZmZXIsIHRtcEJ1ZiwgVHJhbnNmZXJCdWZmZXJMZW5ndGgpOworCSAgCXVwKCYocEFkLT5Vc2JWZW5kb3JSZXFfc2VtYXBob3JlKSk7CisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworCisgICAgICAgIGlmIChyZXQgPCAwKSB7CisvLwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlVTQlZlbmRvclJlcXVlc3QgZmFpbGVkIHJldD0lZCBcbiIscmV0KSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSVFVTQl9WZW5kb3JSZXF1ZXN0IGZhaWxlZCglZCksVHhGbGFncz0weCV4LCBSZXFUeXBlPSVzLCBSZXE9MHgleCwgSW5kZXg9MHgleFxuIiwKKwkJCQkJCXJldCwgVHJhbnNmZXJGbGFncywgKFJlcXVlc3RUeXBlID09IERFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQgPyAiT1VUIiA6ICJJTiIpLCBSZXF1ZXN0LCBJbmRleCkpOworCQkJaWYgKFJlcXVlc3QgPT0gMHgyKQorCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlx0UmVxdWVzdCBWYWx1ZT0weCUwNHghXG4iLCBWYWx1ZSkpOworCisJCQlpZiAoKFRyYW5zZmVyQnVmZmVyIT0gTlVMTCkgJiYgKFRyYW5zZmVyQnVmZmVyTGVuZ3RoID4gMCkpCisJCQkJaGV4X2R1bXAoIkZhaWxlZCBUcmFuc2ZlckJ1ZmZlciB2YWx1ZSIsIFRyYW5zZmVyQnVmZmVyLCBUcmFuc2ZlckJ1ZmZlckxlbmd0aCk7CisgICAgICAgIH0KKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJICBDcmVhdGVzIGFuIElSUCB0byBzdWJtaXRlIGFuIElPQ1RMX0lOVEVSTkFMX1VTQl9SRVNFVF9QT1JUCisJICBzeW5jaHJvbm91c2x5LiBDYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBydW5uaW5nIGF0CisJICBQQVNTSVZFIExFVkVMLgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05UU1RBVFVTCVJUVVNCX1Jlc2V0RGV2aWNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCU5UU1RBVFVTCQlTdGF0dXMgPSBUUlVFOworCisJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIi0tLT5VU0JfUmVzZXREZXZpY2VcbiIpKTsKKwkvL1JUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKTsKKwlyZXR1cm4gU3RhdHVzOworfQorCitWT0lEIENNREhhbmRsZXIoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJUENtZFFFbG10CQljbWRxZWxtdDsKKwlQVUNIQVIJCQlwRGF0YTsKKwlORElTX1NUQVRVUwkJTmRpc1N0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisvLwlVTE9ORwkJCU5vdyA9IDA7CisJTlRTVEFUVVMJCW50U3RhdHVzOworLy8JdW5zaWduZWQgbG9uZwlJcnFGbGFnczsKKworCXdoaWxlIChwQWQtPkNtZFEuc2l6ZSA+IDApCisJeworCQlOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKworCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkNtZFFMb2NrKTsKKwkJUlRVU0JEZXF1ZXVlQ21kKCZwQWQtPkNtZFEsICZjbWRxZWxtdCk7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+Q21kUUxvY2spOworCisJCWlmIChjbWRxZWxtdCA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJcERhdGEgPSBjbWRxZWxtdC0+YnVmZmVyOworCisJCWlmKCEoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpIHx8IFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkpCisJCXsKKwkJCXN3aXRjaCAoY21kcWVsbXQtPmNvbW1hbmQpCisJCQl7CisJCQkJY2FzZSBDTURUSFJFQURfQ0hFQ0tfR1BJTzoKKwkJCQkJeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQkJVUlOVDMyIGRhdGE7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisjaWZkZWYgUkFMSU5LX0FURQorICAgICAgIAkJCQkJaWYoQVRFX09OKHBBZCkpCisJCQkJCQl7CisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVGhlIGRyaXZlciBpcyBpbiBBVEUgbW9kZSBub3dcbiIpKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKworCisJCQkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCQkJeworCQkJCQkJCS8vIFJlYWQgR1BJTyBwaW4yIGFzIEhhcmR3YXJlIGNvbnRyb2xsZWQgcmFkaW8gc3RhdGUKKworCQkJCQkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKCBwQWQsIEdQSU9fQ1RSTF9DRkcsICZkYXRhKTsKKworCQkJCQkJCWlmIChkYXRhICYgMHgwNCkKKwkJCQkJCQl7CisJCQkJCQkJCXBBZC0+U3RhQ2ZnLmJId1JhZGlvID0gVFJVRTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJCQkJCQkJcEFkLT5TdGFDZmcuYkh3UmFkaW8gPSBGQUxTRTsKKwkJCQkJCQl9CisKKwkJCQkJCQlpZihwQWQtPlN0YUNmZy5iUmFkaW8gIT0gKHBBZC0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvKSkKKwkJCQkJCQl7CisJCQkJCQkJCXBBZC0+U3RhQ2ZnLmJSYWRpbyA9IChwQWQtPlN0YUNmZy5iSHdSYWRpbyAmJiBwQWQtPlN0YUNmZy5iU3dSYWRpbyk7CisJCQkJCQkJCWlmKHBBZC0+U3RhQ2ZnLmJSYWRpbyA9PSBUUlVFKQorCQkJCQkJCQl7CisJCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiISEhIFJhZGlvIE9uICEhIVxuIikpOworCisJCQkJCQkJCQlNbG1lUmFkaW9PbihwQWQpOworCQkJCQkJCQkJLy8gVXBkYXRlIGV4dHJhIGluZm9ybWF0aW9uCisJCQkJCQkJCQlwQWQtPkV4dHJhSW5mbyA9IEVYVFJBX0lORk9fQ0xFQVI7CisJCQkJCQkJCX0KKwkJCQkJCQkJZWxzZQorCQkJCQkJCQl7CisJCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiISEhIFJhZGlvIE9mZiAhISFcbiIpKTsKKworCQkJCQkJCQkJTWxtZVJhZGlvT2ZmKHBBZCk7CisJCQkJCQkJCQkvLyBVcGRhdGUgZXh0cmEgaW5mb3JtYXRpb24KKwkJCQkJCQkJCXBBZC0+RXh0cmFJbmZvID0gSFdfUkFESU9fT0ZGOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJCQl9CisJCQkJCWJyZWFrOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJY2FzZSBDTURUSFJFQURfUUtFUklPRElDX0VYRUNVVDoKKwkJCQkJeworCQkJCQkJU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYyhOVUxMLCBwQWQsIE5VTEwsIE5VTEwpOworCQkJCQl9CisJCQkJCWJyZWFrOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCQkJY2FzZSBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQ6CisJCQkJCXsKKwkJCQkJCVVJTlQzMgkJTUFDVmFsdWU7CisJCQkJCQlVQ0hBUgkJSW5kZXg7CisJCQkJCQlpbnQJCQlyZXQ9MDsKKwkJCQkJCVBIVF9UWF9DT05URVhUCXBIVFRYQ29udGV4dDsKKy8vCQkJCQkJUlRNUF9UWF9SSU5HICpwVHhSaW5nOworCQkJCQkJdW5zaWduZWQgbG9uZyBJcnFGbGFnczsKKyNpZmRlZiBSQUxJTktfQVRFCisJCQkJCQlQVFhfQ09OVEVYVAkJcE51bGxDb250ZXh0ID0gJihwQWQtPk51bGxDb250ZXh0KTsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQ21kVGhyZWFkIDogQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VUKFJlc2V0UGlwZWlkPTB4JTB4KT09PT5cbiIsIHBBZC0+YnVsa1Jlc2V0UGlwZWlkKSk7CisJCQkJCQkvLyBBbGwgdHJhbnNmZXJzIG11c3QgYmUgYWJvcnRlZCBvciBjYW5jZWxsZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVzZXQgdGhlIHBpcGUuCisJCQkJCQkvL1JUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKTsKKwkJCQkJCS8vIFdhaXQgMTBtcyB0byBsZXQgcHJldmlvdXMgcGFja2V0IHRoYXQgYXJlIGFscmVhZHkgaW4gSFcgRklGTyB0byBjbGVhci4gYnkgTUFYTEVFIDEyLTI1LTIwMDcKKwkJCQkJCUluZGV4ID0gMDsKKwkJCQkJCWRvCisJCQkJCQl7CisJCQkJCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBUWFJYUV9QQ05ULCAmTUFDVmFsdWUpOworCQkJCQkJCWlmICgoTUFDVmFsdWUgJiAweGYwMDAwMC8qMHg4MDAwMDAqLykgPT0gMCkKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJSW5kZXgrKzsKKwkJCQkJCQlSVE1QdXNlY0RlbGF5KDEwMDAwKTsKKwkJCQkJCX13aGlsZShJbmRleCA8IDEwMCk7CisJCQkJCQlNQUNWYWx1ZSA9IDA7CisJCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIFVTQl9ETUFfQ0ZHLCAmTUFDVmFsdWUpOworCQkJCQkJLy8gVG8gcHJldmVudCBSZWFkIFJlZ2lzdGVyIGVycm9yLCB3ZSAybmQgY2hlY2sgdGhlIHZhbGlkaXR5LgorCQkJCQkJaWYgKChNQUNWYWx1ZSAmIDB4YzAwMDAwKSA9PSAwKQorCQkJCQkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgVVNCX0RNQV9DRkcsICZNQUNWYWx1ZSk7CisJCQkJCQkvLyBUbyBwcmV2ZW50IFJlYWQgUmVnaXN0ZXIgZXJyb3IsIHdlIDNyZCBjaGVjayB0aGUgdmFsaWRpdHkuCisJCQkJCQlpZiAoKE1BQ1ZhbHVlICYgMHhjMDAwMDApID09IDApCisJCQkJCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBVU0JfRE1BX0NGRywgJk1BQ1ZhbHVlKTsKKwkJCQkJCU1BQ1ZhbHVlIHw9IDB4ODAwMDA7CisJCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBVU0JfRE1BX0NGRywgTUFDVmFsdWUpOworCisJCQkJCQkvLyBXYWl0IDFtcyB0byBwcmV2ZW50IG5leHQgVVJCIHRvIGJ1bGtvdXQgYmVmb3JlIEhXIHJlc2V0LiBieSBNQVhMRUUgMTItMjUtMjAwNworCQkJCQkJUlRNUHVzZWNEZWxheSgxMDAwKTsKKworCQkJCQkJTUFDVmFsdWUgJj0gKH4weDgwMDAwKTsKKwkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIFVTQl9ETUFfQ0ZHLCBNQUNWYWx1ZSk7CisJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiXHRTZXQgMHgyYTAgYml0MTkuIENsZWFyIFVTQiBETUEgVFggcGF0aFxuIikpOworCisJCQkJCQkvLyBXYWl0IDVtcyB0byBwcmV2ZW50IG5leHQgVVJCIHRvIGJ1bGtvdXQgYmVmb3JlIEhXIHJlc2V0LiBieSBNQVhMRUUgMTItMjUtMjAwNworCQkJCQkJLy9SVE1QdXNlY0RlbGF5KDUwMDApOworCisJCQkJCQlpZiAoKHBBZC0+YnVsa1Jlc2V0UGlwZWlkICYgQlVMS09VVF9NR01UX1JFU0VUX0ZMQUcpID09IEJVTEtPVVRfTUdNVF9SRVNFVF9GTEFHKQorCQkJCQkJeworCQkJCQkJCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7CisJCQkJCQkJaWYgKHBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHggPCBNR01UX1JJTkdfU0laRSAvKiBwTUxNRUNvbnRleHQtPmJXYWl0aW5nQnVsa091dCA9PSBUUlVFICovKQorCQkJCQkJCXsKKwkJCQkJCQkJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9NTE1FKTsKKwkJCQkJCQl9CisJCQkJCQkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCisJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIlx0VFggTUdNVCBSRUNPVkVSIERvbmUhXG4iKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcEhUVFhDb250ZXh0ID0gJihwQWQtPlR4Q29udGV4dFtwQWQtPmJ1bGtSZXNldFBpcGVpZF0pOworCQkJCQkJCS8vTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1twQWQtPmJ1bGtSZXNldFBpcGVpZF0pOworCQkJCQkJCVJUTVBfSU5UX0xPQ0soJnBBZC0+QnVsa091dExvY2tbcEFkLT5idWxrUmVzZXRQaXBlaWRdLCBJcnFGbGFncyk7CisJCQkJCQkJaWYgKCBwQWQtPkJ1bGtPdXRQZW5kaW5nW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSA9PSBGQUxTRSkKKwkJCQkJCQl7CisJCQkJCQkJCXBBZC0+QnVsa091dFBlbmRpbmdbcEFkLT5idWxrUmVzZXRQaXBlaWRdID0gVFJVRTsKKwkJCQkJCQkJcEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nID0gVFJVRTsKKwkJCQkJCQkJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFtwQWQtPmJ1bGtSZXNldFBpcGVpZF0gPSAxOworCisJCQkJCQkJCS8vIG5vIG1hdHRlciB3aGF0LCBjbGVhbiB0aGUgZmxhZworCQkJCQkJCQlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpOworCisJCQkJCQkJCS8vTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5CdWxrT3V0TG9ja1twQWQtPmJ1bGtSZXNldFBpcGVpZF0pOworCQkJCQkJCQlSVE1QX0lOVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbcEFkLT5idWxrUmVzZXRQaXBlaWRdLCBJcnFGbGFncyk7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZmRlZiBSQUxJTktfQVRFCisJCQkJCQkJCWlmKEFURV9PTihwQWQpKQorCQkJCQkJCSAgICB7CisJCQkJCQkJCQlwTnVsbENvbnRleHQtPklSUFBlbmRpbmcgPSBUUlVFOworCQkJCQkJCQkJLy8KKwkJCQkJCQkJCS8vIElmIGRyaXZlciBpcyBzdGlsbCBpbiBBVEUgVFhGUkFNRSBtb2RlLAorCQkJCQkJCQkJLy8ga2VlcCBvbiB0cmFuc21pdHRpbmcgQVRFIGZyYW1lcy4KKwkJCQkJCQkJCS8vCisJCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgicEFkLT5hdGUuTW9kZSA9PSAlZFxucEFkLT5Db250aW5CdWxrT3V0ID09ICVkXG5wQWQtPkJ1bGtPdXRSZW1haW5lZCA9PSAlZFxuIiwgcEFkLT5hdGUuTW9kZSwgcEFkLT5Db250aW5CdWxrT3V0LCBhdG9taWNfcmVhZCgmcEFkLT5CdWxrT3V0UmVtYWluZWQpKSk7CisJCQkJCQkJCQlpZigocEFkLT5hdGUuTW9kZSA9PSBBVEVfVFhGUkFNRSkgJiYgKChwQWQtPkNvbnRpbkJ1bGtPdXQgPT0gVFJVRSkgfHwgKGF0b21pY19yZWFkKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCkgPiAwKSkpCisJCQkJCQkJCSAgICB7CisJCQkJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIkFmdGVyIENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVCwgY29udGludWUgdG8gYnVsayBvdXQgZnJhbWVzICFcbiIpKTsKKworCQkJCQkJCQkJCS8vIEluaXQgVHggY29udGV4dCBkZXNjcmlwdG9yCisJCQkJCQkJCQkJUlRVU0JJbml0VHhEZXNjKHBBZCwgcE51bGxDb250ZXh0LCAwLyogcEFkLT5idWxrUmVzZXRQaXBlaWQgKi8sICh1c2JfY29tcGxldGVfdClBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKTsKKworCQkJCQkJCQkJCWlmKChyZXQgPSBSVFVTQl9TVUJNSVRfVVJCKHBOdWxsQ29udGV4dC0+cFVyYikpIT0wKQorCQkJCQkJCQkJCXsKKwkJCQkJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQVRFX1JUVVNCQnVsa091dERhdGFQYWNrZXQ6IFN1Ym1pdCBUeCBVUkIgZmFpbGVkICVkXG4iLCByZXQpKTsKKwkJCQkJCQkJCQl9CisKKwkJCQkJCQkJCQlwQWQtPkJ1bGtPdXRSZXErKzsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQkJCQkJCXsKKwkJCQkJCQkJUlRVU0JJbml0SFRUeERlc2MocEFkLCBwSFRUWENvbnRleHQsIHBBZC0+YnVsa1Jlc2V0UGlwZWlkLCBwSFRUWENvbnRleHQtPkJ1bGtPdXRTaXplLCAodXNiX2NvbXBsZXRlX3QpUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKTsKKworCQkJCQkJCQlpZigocmV0ID0gUlRVU0JfU1VCTUlUX1VSQihwSFRUWENvbnRleHQtPnBVcmIpKSE9MCkKKwkJCQkJCQkJeworCQkJCQkJCQkJCVJUTVBfSU5UX0xPQ0soJnBBZC0+QnVsa091dExvY2tbcEFkLT5idWxrUmVzZXRQaXBlaWRdLCBJcnFGbGFncyk7CisJCQkJCQkJCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSA9IEZBTFNFOworCQkJCQkJCQkJcEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCQkJCQkJCQkJcEFkLT53YXRjaERvZ1R4UGVuZGluZ0NudFtwQWQtPmJ1bGtSZXNldFBpcGVpZF0gPSAwOworCQkJCQkJCQkJCVJUTVBfSU5UX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1twQWQtPmJ1bGtSZXNldFBpcGVpZF0sIElycUZsYWdzKTsKKworCQkJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkNtZFRocmVhZCA6IENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVDogU3VibWl0IFR4IFVSQiBmYWlsZWQgJWRcbiIsIHJldCkpOworCQkJCQkJCQl9CisJCQkJCQkJCQllbHNlCisJCQkJCQkJCQl7CisJCQkJCQkJCQkJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1twQWQtPmJ1bGtSZXNldFBpcGVpZF0sIElycUZsYWdzKTsKKwkJCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsKCJcdENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVDogVHhDb250ZXh0WyVkXTpDV1Bvcz0lbGQsIE5CUG9zPSVsZCwgRU5CUG9zPSVsZCwgYkNvcHk9JWQsIHBlbmRpbmc9JWQhXG4iLAorCQkJCQkJCQkJCQkJcEFkLT5idWxrUmVzZXRQaXBlaWQsIHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5OZXh0QnVsa091dFBvc2l0aW9uLAorCQkJCQkJCQkJCQkJCQkJcEhUVFhDb250ZXh0LT5FTmV4dEJ1bGtPdXRQb3NpdGlvbiwgcEhUVFhDb250ZXh0LT5iQ29weVNhdmVQYWQsIHBBZC0+QnVsa091dFBlbmRpbmdbcEFkLT5idWxrUmVzZXRQaXBlaWRdKSk7CisJCQkJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCgiXHRcdEJ1bGtPdXQgUmVxPTB4JWx4LCBDb21wbGV0ZT0weCVseCwgT3RoZXI9MHglbHhcbiIsCisJCQkJCQkJCQkJCQkJCQlwQWQtPkJ1bGtPdXRSZXEsIHBBZC0+QnVsa091dENvbXBsZXRlLCBwQWQtPkJ1bGtPdXRDb21wbGV0ZU90aGVyKSk7CisJCQkJCQkJCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSwgSXJxRmxhZ3MpOworCQkJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJcdENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVDogU3VibWl0IFR4IERBVEEgVVJCIGZvciBmYWlsZWQgQnVsa1JlcSgweCVseCkgRG9uZSwgc3RhdHVzPSVkIVxuIiwgcEFkLT5idWxrUmVzZXRSZXFbcEFkLT5idWxrUmVzZXRQaXBlaWRdLCBwSFRUWENvbnRleHQtPnBVcmItPnN0YXR1cykpOworCisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJCQkJCQkJLy9OZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSk7CisJCQkJCQkJCS8vUlRNUF9JTlRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSwgSXJxRmxhZ3MpOworCisJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJDbWRUaHJlYWQgOiBUWCBEQVRBIFJFQ09WRVIgRkFJTCBmb3IgQnVsa1JlcSgweCVseCkgYmVjYXVzZSBCdWxrT3V0UGVuZGluZ1slZF0gaXMgVFJVRSFcbiIsIHBBZC0+YnVsa1Jlc2V0UmVxW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSwgcEFkLT5idWxrUmVzZXRQaXBlaWQpKTsKKwkJCQkJCQkJaWYgKHBBZC0+YnVsa1Jlc2V0UGlwZWlkID09IDApCisJCQkJCQkJCXsKKwkJCQkJCQkJCVVDSEFSCXBlbmRpbmdDb250ZXh0ID0gMDsKKwkJCQkJCQkJCVBIVF9UWF9DT05URVhUIHBIVFRYQ29udGV4dCA9IChQSFRfVFhfQ09OVEVYVCkoJnBBZC0+VHhDb250ZXh0W3BBZC0+YnVsa1Jlc2V0UGlwZWlkIF0pOworCQkJCQkJCQkJUFRYX0NPTlRFWFQgcE1MTUVDb250ZXh0ID0gKFBUWF9DT05URVhUKShwQWQtPk1nbXRSaW5nLkNlbGxbcEFkLT5NZ210UmluZy5UeERtYUlkeF0uQWxsb2NWYSk7CisJCQkJCQkJCQlQVFhfQ09OVEVYVCBwTlVMTENvbnRleHQgPSAoUFRYX0NPTlRFWFQpKCZwQWQtPlBzUG9sbENvbnRleHQpOworCQkJCQkJCQkJUFRYX0NPTlRFWFQgcFBzUG9sbENvbnRleHQgPSAoUFRYX0NPTlRFWFQpKCZwQWQtPk51bGxDb250ZXh0KTsKKworCQkJCQkJCQkJaWYgKHBIVFRYQ29udGV4dC0+SVJQUGVuZGluZykKKwkJCQkJCQkJCQlwZW5kaW5nQ29udGV4dCB8PSAxOworCQkJCQkJCQkJZWxzZSBpZiAocE1MTUVDb250ZXh0LT5JUlBQZW5kaW5nKQorCQkJCQkJCQkJCXBlbmRpbmdDb250ZXh0IHw9IDI7CisJCQkJCQkJCQllbHNlIGlmIChwTlVMTENvbnRleHQtPklSUFBlbmRpbmcpCisJCQkJCQkJCQkJcGVuZGluZ0NvbnRleHQgfD0gNDsKKwkJCQkJCQkJCWVsc2UgaWYgKHBQc1BvbGxDb250ZXh0LT5JUlBQZW5kaW5nKQorCQkJCQkJCQkJCXBlbmRpbmdDb250ZXh0IHw9IDg7CisJCQkJCQkJCQllbHNlCisJCQkJCQkJCQkJcGVuZGluZ0NvbnRleHQgPSAwOworCisJCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiXHRUWCBPY2N1cGllZCBieSAlZCFcbiIsIHBlbmRpbmdDb250ZXh0KSk7CisJCQkJCQkJCX0KKworCQkJCQkJCS8vIG5vIG1hdHRlciB3aGF0LCBjbGVhbiB0aGUgZmxhZworCQkJCQkJCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7CisKKwkJCQkJCQkJUlRNUF9JTlRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW3BBZC0+YnVsa1Jlc2V0UGlwZWlkXSwgSXJxRmxhZ3MpOworCisJCQkJCQkJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCAoZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMIDw8IHBBZC0+YnVsa1Jlc2V0UGlwZWlkKSk7CisJCQkJCQkJfQorCisJCQkJCQkJUlRNUERlUXVldWVQYWNrZXQocEFkLCBGQUxTRSwgTlVNX09GX1RYX1JJTkcsIE1BWF9UWF9QUk9DRVNTKTsKKwkJCQkJCQkvL1JUVVNCS2lja0J1bGtPdXQocEFkKTsKKwkJCQkJCX0KKworCQkJCQl9CisJCQkJCS8qCisJCQkJCQkvLyBEb24ndCBjYW5jZWwgQlVMS0lOLgorCQkJCQkJd2hpbGUgKChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID4gMCkgJiYKKwkJCQkJCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCQkJCQkJeworCQkJCQkJCWlmIChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID4gMCkKKwkJCQkJCQl7CisJCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJCdWxrSW4gSVJQIFBlbmRpbmchIWNhbmNlbCBpdCFcbiIpKTsKKwkJCQkJCQkJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHBBZCk7CisJCQkJCQkJfQorCQkJCQkJCVJUTVB1c2VjRGVsYXkoMTAwMDAwKTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID09IDApICYmICghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpKSkKKwkJCQkJCXsKKwkJCQkJCQlVQ0hBUglpOworCQkJCQkJCVJUVVNCUnhQYWNrZXQocEFkKTsKKwkJCQkJCQlwQWQtPk5leHRSeEJ1bGtJblJlYWRJbmRleCA9IDA7CS8vIE5leHQgUnggUmVhZCBpbmRleAorCQkJCQkJCXBBZC0+TmV4dFJ4QnVsa0luSW5kZXgJCT0gMDsJLy8gUnggQnVsayBwb2ludGVyCisJCQkJCQkJZm9yIChpID0gMDsgaSA8IChSWF9SSU5HX1NJWkUpOyBpKyspCisJCQkJCQkJeworCQkJCQkJCQlQUlhfQ09OVEVYVCAgcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCisJCQkJCQkJCXBSeENvbnRleHQtPnBBZAk9IHBBZDsKKwkJCQkJCQkJcFJ4Q29udGV4dC0+SW5Vc2UJCT0gRkFMU0U7CisJCQkJCQkJCXBSeENvbnRleHQtPklSUFBlbmRpbmcJPSBGQUxTRTsKKwkJCQkJCQkJcFJ4Q29udGV4dC0+UmVhZGFibGUJPSBGQUxTRTsKKwkJCQkJCQkJcFJ4Q29udGV4dC0+UmVvcmRlckluVXNlID0gRkFMU0U7CisKKwkJCQkJCQl9CisJCQkJCQkJUlRVU0JCdWxrUmVjZWl2ZShwQWQpOworCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJSVFVTQkJ1bGtSZWNlaXZlXG4iKSk7CisJCQkJCQl9Ki8KKwkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIkNtZFRocmVhZCA6IENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVDw9PT1cbiIpKTsKKyAgICAJICAgCQkJYnJlYWs7CisKKwkJCQljYXNlIENNRFRIUkVBRF9SRVNFVF9CVUxLX0lOOgorCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQ21kVGhyZWFkIDogQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU4gPT09ID5cbiIpKTsKKworCQkJCQkvLyBBbGwgdHJhbnNmZXJzIG11c3QgYmUgYWJvcnRlZCBvciBjYW5jZWxsZWQgYmVmb3JlIGF0dGVtcHRpbmcgdG8gcmVzZXQgdGhlIHBpcGUuCisJCQkJCXsKKwkJCQkJCVVJTlQzMgkJTUFDVmFsdWU7CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpZmRlZiBSQUxJTktfQVRFCisJCQkJCQlpZiAoQVRFX09OKHBBZCkpCisJCQkJCQl7CisJCQkJCQkJaWYoKHBBZC0+UGVuZGluZ1J4ID4gMCkgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCQkJCQkJCXsKKwkJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIkFURSA6IEJ1bGtJbiBJUlAgUGVuZGluZyEhIVxuIikpOworCQkJCQkJCQlBVEVfUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHBBZCk7CisJCQkJCQkJCVJUTVB1c2VjRGVsYXkoMTAwMDAwKTsKKwkJCQkJCQkJcEFkLT5QZW5kaW5nUnggPSAwOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkJCQkJCXsKKwkJCQkJCS8vd2hpbGUgKChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID4gMCkgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCQkJCQkJaWYoKHBBZC0+UGVuZGluZ1J4ID4gMCkgJiYgKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCQkJCQkJeworCQkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19FUlJPUiwgKCJCdWxrSW4gSVJQIFBlbmRpbmchISFcbiIpKTsKKwkJCQkJCQlSVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAocEFkKTsKKwkJCQkJCQlSVE1QdXNlY0RlbGF5KDEwMDAwMCk7CisJCQkJCQkJcEFkLT5QZW5kaW5nUnggPSAwOworCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQkvLyBXYWl0IDEwbXMgYmVmb3JlIHJlYWRpbmcgcmVnaXN0ZXIuCisJCQkJCQlSVE1QdXNlY0RlbGF5KDEwMDAwKTsKKwkJCQkJCW50U3RhdHVzID0gUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBNQUNfQ1NSMCwgJk1BQ1ZhbHVlKTsKKworCQkJCQkJaWYgKChOVF9TVUNDRVNTKG50U3RhdHVzKSA9PSBUUlVFKSAmJgorCQkJCQkJCSghKFJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX1JBRElPX09GRiB8CisJCQkJCQkJCQkJCQkJZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkpKSkKKwkJCQkJCXsKKwkJCQkJCQlVQ0hBUglpOworCisJCQkJCQkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgKGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX1JBRElPX09GRiB8CisJCQkJCQkJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8IGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQlwQWQtPk5leHRSeEJ1bGtJblBvc2l0aW9uID0gcEFkLT5SeENvbnRleHRbcEFkLT5OZXh0UnhCdWxrSW5JbmRleF0uQnVsa0luT2Zmc2V0OworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJVTEtfSU5fUkVTRVQ6IE5CSUlkeD0weCV4LE5CSVJJZHg9MHgleCwgQklSUG9zPTB4JWx4LiBCSVJlcT14JWx4LCBCSUNvbXBsZXRlPTB4JWx4LCBCSUNGYWlsMHglbHhcbiIsCisJCQkJCQkJCQlwQWQtPk5leHRSeEJ1bGtJbkluZGV4LCAgcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXgsIHBBZC0+TmV4dFJ4QnVsa0luUG9zaXRpb24sIHBBZC0+QnVsa0luUmVxLCBwQWQtPkJ1bGtJbkNvbXBsZXRlLCBwQWQtPkJ1bGtJbkNvbXBsZXRlRmFpbCkpOworCQkJCQkJCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykKKwkJCQkJCQl7CisgCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJcdFJ4Q29udGV4dFslZF06IElSUFBlbmRpbmc9JWQsIEluVXNlPSVkLCBSZWFkYWJsZT0lZCFcbiIKKwkJCQkJCQkJCSwgaSwgcEFkLT5SeENvbnRleHRbaV0uSVJQUGVuZGluZywgcEFkLT5SeENvbnRleHRbaV0uSW5Vc2UsIHBBZC0+UnhDb250ZXh0W2ldLlJlYWRhYmxlKSk7CisJCQkJCQkJfQorIAkJCQkJCQkvKgorCisJCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIikpOworCisJCQkJCQkJcEFkLT5OZXh0UnhCdWxrSW5SZWFkSW5kZXggPSAwOwkvLyBOZXh0IFJ4IFJlYWQgaW5kZXgKKwkJCQkJCQlwQWQtPk5leHRSeEJ1bGtJbkluZGV4CQk9IDA7CS8vIFJ4IEJ1bGsgcG9pbnRlcgorCQkJCQkJCWZvciAoaSA9IDA7IGkgPCAoUlhfUklOR19TSVpFKTsgaSsrKQorCQkJCQkJCXsKKwkJCQkJCQkJUFJYX0NPTlRFWFQgIHBSeENvbnRleHQgPSAmKHBBZC0+UnhDb250ZXh0W2ldKTsKKworCQkJCQkJCQlwUnhDb250ZXh0LT5wQWQJPSBwQWQ7CisJCQkJCQkJCXBSeENvbnRleHQtPkluVXNlCQk9IEZBTFNFOworCQkJCQkJCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nCT0gRkFMU0U7CisJCQkJCQkJCXBSeENvbnRleHQtPlJlYWRhYmxlCT0gRkFMU0U7CisJCQkJCQkJCXBSeENvbnRleHQtPlJlb3JkZXJJblVzZSA9IEZBTFNFOworCisJCQkJCQkJfSovCisJCQkJCQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CVUxLSU5fUkVTRVQpOworCQkJCQkJCWZvciAoaSA9IDA7IGkgPCBwQWQtPkNvbW1vbkNmZy5OdW1PZkJ1bGtJbklSUDsgaSsrKQorCQkJCQkJCXsKKwkJCQkJCQkJLy9SVFVTQkJ1bGtSZWNlaXZlKHBBZCk7CisJCQkJCQkJCVBSWF9DT05URVhUCQlwUnhDb250ZXh0OworCQkJCQkJCQlQVVJCCQkJcFVyYjsKKwkJCQkJCQkJaW50CQkJCXJldCA9IDA7CisJCQkJCQkJCXVuc2lnbmVkIGxvbmcJSXJxRmxhZ3M7CisKKworCQkJCQkJCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJCQkJCQkJcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbcEFkLT5OZXh0UnhCdWxrSW5JbmRleF0pOworCQkJCQkJCQlpZiAoKHBBZC0+UGVuZGluZ1J4ID4gMCkgfHwgKHBSeENvbnRleHQtPlJlYWRhYmxlID09IFRSVUUpIHx8IChwUnhDb250ZXh0LT5JblVzZSA9PSBUUlVFKSkKKwkJCQkJCQkJeworCQkJCQkJCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKwkJCQkJCQkJCWJyZWFrOworCQkJCQkJCQl9CisJCQkJCQkJCXBSeENvbnRleHQtPkluVXNlID0gVFJVRTsKKwkJCQkJCQkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IFRSVUU7CisJCQkJCQkJCXBBZC0+UGVuZGluZ1J4Kys7CisJCQkJCQkJCXBBZC0+QnVsa0luUmVxKys7CisJCQkJCQkJCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisKKwkJCQkJCQkJLy8gSW5pdCBSeCBjb250ZXh0IGRlc2NyaXB0b3IKKwkJCQkJCQkJUlRVU0JJbml0UnhEZXNjKHBBZCwgcFJ4Q29udGV4dCk7CisJCQkJCQkJCXBVcmIgPSBwUnhDb250ZXh0LT5wVXJiOworCQkJCQkJCQlpZiAoKHJldCA9IFJUVVNCX1NVQk1JVF9VUkIocFVyYikpIT0wKQorCQkJCQkJCQl7CS8vIGZhaWwKKworCQkJCQkJCQkJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJCQkJCQkJCQlwUnhDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCQkJCQkJCQkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCQkJCQkJCQkJcEFkLT5QZW5kaW5nUngtLTsKKwkJCQkJCQkJCXBBZC0+QnVsa0luUmVxLS07CisJCQkJCQkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCQkJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU46IFN1Ym1pdCBSeCBVUkIgZmFpbGVkKCVkKSwgc3RhdHVzPSVkXG4iLCByZXQsIHBVcmItPnN0YXR1cykpOworCQkJCQkJCQl9CisJCQkJCQkJCWVsc2UKKwkJCQkJCQkJewkvLyBzdWNjZXNzCisJCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU46IFN1Ym1pdCBSeCBVUkIgRG9uZSwgc3RhdHVzPSVkIVxuIiwgcFVyYi0+c3RhdHVzKSk7CisJCQkJCQkJCQlBU1NFUlQoKHBSeENvbnRleHQtPkluVXNlID09IHBSeENvbnRleHQtPklSUFBlbmRpbmcpKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCS8vIENhcmQgbXVzdCBiZSByZW1vdmVkCisJCQkJCQkJaWYgKE5UX1NVQ0NFU1MobnRTdGF0dXMpICE9IFRSVUUpCisJCQkJCQkJeworCQkJCQkJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpOworCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU46IFJlYWQgUmVnaXN0ZXIgRmFpbGVkIUNhcmQgbXVzdCBiZSByZW1vdmVkISFcblxuIikpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsICgiQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU46IENhbm5vdCBkbyBidWxrIGluIGJlY2F1c2UgZmxhZ3MoMHglbHgpIG9uICFcbiIsIHBBZC0+RmxhZ3MpKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQl9CisJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJDbWRUaHJlYWQgOiBDTURUSFJFQURfUkVTRVRfQlVMS19JTiA8PT09XG4iKSk7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBDTURUSFJFQURfU0VUX0FTSUNfV0NJRDoKKwkJCQkJeworCQkJCQkJUlRfU0VUX0FTSUNfV0NJRAlTZXRBc2ljV2NpZDsKKwkJCQkJCVVTSE9SVAkJb2Zmc2V0OworCQkJCQkJVUlOVDMyCQlNQUNWYWx1ZSwgTUFDUlZhbHVlID0gMDsKKwkJCQkJCVNldEFzaWNXY2lkID0gKigoUFJUX1NFVF9BU0lDX1dDSUQpKHBEYXRhKSk7CisKKwkJCQkJCWlmIChTZXRBc2ljV2NpZC5XQ0lEID49IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCQkJCQkJCXJldHVybjsKKworCQkJCQkJb2Zmc2V0ID0gTUFDX1dDSURfQkFTRSArICgoVUNIQVIpU2V0QXNpY1djaWQuV0NJRCkqSFdfV0NJRF9FTlRSWV9TSVpFOworCisJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQ21kVGhyZWFkIDogQ01EVEhSRUFEX1NFVF9BU0lDX1dDSUQgOiBXQ0lEID0gJWxkLCBTZXRUaWQgID0gJWx4LCBEZWxldGVUaWQgPSAlbHguXG4iLCBTZXRBc2ljV2NpZC5XQ0lELCBTZXRBc2ljV2NpZC5TZXRUaWQsIFNldEFzaWNXY2lkLkRlbGV0ZVRpZCkpOworCQkJCQkJTUFDVmFsdWUgPSAocEFkLT5NYWNUYWIuQ29udGVudFtTZXRBc2ljV2NpZC5XQ0lEXS5BZGRyWzNdPDwyNCkrKHBBZC0+TWFjVGFiLkNvbnRlbnRbU2V0QXNpY1djaWQuV0NJRF0uQWRkclsyXTw8MTYpKyhwQWQtPk1hY1RhYi5Db250ZW50W1NldEFzaWNXY2lkLldDSURdLkFkZHJbMV08PDgpKyhwQWQtPk1hY1RhYi5Db250ZW50W1NldEFzaWNXY2lkLldDSURdLkFkZHJbMF0pOworCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIjEtTUFDVmFsdWU9ICV4LFxuIiwgTUFDVmFsdWUpKTsKKwkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldCwgTUFDVmFsdWUpOworCQkJCQkJLy8gUmVhZCBiaXRtYXNrCisJCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIG9mZnNldCs0LCAmTUFDUlZhbHVlKTsKKwkJCQkJCWlmICggU2V0QXNpY1djaWQuRGVsZXRlVGlkICE9IDB4ZmZmZmZmZmYpCisJCQkJCQkJTUFDUlZhbHVlICY9ICh+U2V0QXNpY1djaWQuRGVsZXRlVGlkKTsKKwkJCQkJCWlmIChTZXRBc2ljV2NpZC5TZXRUaWQgIT0gMHhmZmZmZmZmZikKKwkJCQkJCQlNQUNSVmFsdWUgfD0gKFNldEFzaWNXY2lkLlNldFRpZCk7CisJCQkJCQlNQUNSVmFsdWUgJj0gMHhmZmZmMDAwMDsKKworCQkJCQkJTUFDVmFsdWUgPSAocEFkLT5NYWNUYWIuQ29udGVudFtTZXRBc2ljV2NpZC5XQ0lEXS5BZGRyWzVdPDw4KStwQWQtPk1hY1RhYi5Db250ZW50W1NldEFzaWNXY2lkLldDSURdLkFkZHJbNF07CisJCQkJCQlNQUNWYWx1ZSB8PSBNQUNSVmFsdWU7CisJCQkJCQlSVFVTQldyaXRlTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQrNCwgTUFDVmFsdWUpOworCisJCQkJCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiMi1NQUNWYWx1ZT0gJXgsXG4iLCBNQUNWYWx1ZSkpOworCQkJCQl9CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSBDTURUSFJFQURfU0VUX0FTSUNfV0NJRF9DSVBIRVI6CisJCQkJCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJCVJUX1NFVF9BU0lDX1dDSURfQVRUUkkJU2V0QXNpY1djaWRBdHRyaTsKKwkJCQkJCVVTSE9SVAkJb2Zmc2V0OworCQkJCQkJVUlOVDMyCQlNQUNSVmFsdWUgPSAwOworCQkJCQkJU0hBUkVES0VZX01PREVfU1RSVUMgY3NyMTsKKwkJCQkJCVNldEFzaWNXY2lkQXR0cmkgPSAqKChQUlRfU0VUX0FTSUNfV0NJRF9BVFRSSSkocERhdGEpKTsKKworCQkJCQkJaWYgKFNldEFzaWNXY2lkQXR0cmkuV0NJRCA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJCQkJCQlyZXR1cm47CisKKwkJCQkJCW9mZnNldCA9IE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKChVQ0hBUilTZXRBc2ljV2NpZEF0dHJpLldDSUQpKkhXX1dDSURfQVRUUklfU0laRTsKKworCQkJCQkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX1RSQUNFLCAoIkNtZCA6IENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lEX0NJUEhFUiA6IFdDSUQgPSAlbGQsIENpcGhlciA9ICVseC5cbiIsIFNldEFzaWNXY2lkQXR0cmkuV0NJRCwgU2V0QXNpY1djaWRBdHRyaS5DaXBoZXIpKTsKKwkJCQkJCS8vIFJlYWQgYml0bWFzaworCQkJCQkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBvZmZzZXQsICZNQUNSVmFsdWUpOworCQkJCQkJTUFDUlZhbHVlID0gMDsKKwkJCQkJCU1BQ1JWYWx1ZSB8PSAoKChVQ0hBUilTZXRBc2ljV2NpZEF0dHJpLkNpcGhlcikgPDwgMSk7CisKKwkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldCwgTUFDUlZhbHVlKTsKKwkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCIyLW9mZnNldCA9ICV4ICwgTUFDVmFsdWU9ICV4LFxuIiwgb2Zmc2V0LCBNQUNSVmFsdWUpKTsKKworCQkJCQkJb2Zmc2V0ID0gUEFJUldJU0VfSVZFSVZfVEFCTEVfQkFTRSArICgoVUNIQVIpU2V0QXNpY1djaWRBdHRyaS5XQ0lEKSpIV19JVkVJVl9FTlRSWV9TSVpFOworCQkJCQkJTUFDUlZhbHVlID0gMDsKKwkJCQkJCWlmICggKFNldEFzaWNXY2lkQXR0cmkuQ2lwaGVyIDw9IENJUEhFUl9XRVAxMjgpKQorCQkJCQkJCU1BQ1JWYWx1ZSB8PSAoIHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA8PCAzMCk7CisJCQkJCQllbHNlCisJCQkJCQkJTUFDUlZhbHVlIHw9ICgweDIwMDAwMDAwKTsKKwkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldCwgTUFDUlZhbHVlKTsKKwkJCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCIyLW9mZnNldCA9ICV4ICwgTUFDVmFsdWU9ICV4LFxuIiwgb2Zmc2V0LCBNQUNSVmFsdWUpKTsKKworCQkJCQkJLy8KKwkJCQkJCS8vIFVwZGF0ZSBjaXBoZXIgYWxnb3JpdGhtLiBXU1RBIGFsd2F5cyB1c2UgQlNTMAorCQkJCQkJLy8KKwkJCQkJCS8vIGZvciBhZGhvYyBtb2RlIG9ubHkgLGJlY2F1c2Ugd2VwIHN0YXR1cyBzbG93IHRoYW4gYWRkIGtleSwgd2hlbiB1c2UgemVybyBjb25maWcKKwkJCQkJCWlmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQyApCisJCQkJCQl7CisJCQkJCQkJb2Zmc2V0ID0gTUFDX1dDSURfQVRUUklCVVRFX0JBU0U7CisKKwkJCQkJCQlSVFVTQlJlYWRNQUNSZWdpc3RlcihwQWQsIG9mZnNldCwgJk1BQ1JWYWx1ZSk7CisJCQkJCQkJTUFDUlZhbHVlICY9ICh+MHhlKTsKKwkJCQkJCQlNQUNSVmFsdWUgfD0gKCgoVUNIQVIpU2V0QXNpY1djaWRBdHRyaS5DaXBoZXIpIDw8IDEpOworCisJCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCBNQUNSVmFsdWUpOworCisJCQkJCQkJLy9VcGRhdGUgZ3JvdXAga2V5IGNpcGhlciwsYmVjYXVzZSB3ZXAgc3RhdHVzIHNsb3cgdGhhbiBhZGQga2V5LCB3aGVuIHVzZSB6ZXJvIGNvbmZpZworCQkJCQkJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UrNCooMC8yKSwgJmNzcjEud29yZCk7CisKKwkJCQkJCQljc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID0gU2V0QXNpY1djaWRBdHRyaS5DaXBoZXI7CisJCQkJCQkJY3NyMS5maWVsZC5Cc3MwS2V5MUNpcGhlckFsZyA9IFNldEFzaWNXY2lkQXR0cmkuQ2lwaGVyOworCisJCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UrNCooMC8yKSwgY3NyMS53b3JkKTsKKwkJCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCQkJfQorCQkJCQlicmVhazsKKworLy9CZW5zb24gbW9kaWZpZWQgZm9yIFVTQiBpbnRlcmZhY2UsIGF2b2lkIGluIGludGVycnVwdCB3aGVuIHdyaXRlIGtleSwgMjAwODA3MjQgLS0+CisJCQkJY2FzZSBSVF9DTURfU0VUX0tFWV9UQUJMRTogLy9HZW5lcmFsIGNhbGwgZm9yIEFzaWNBZGRQYWlyd2lzZUtleUVudHJ5KCkKKwkJCQl7CisJCQkJCVJUX0FERF9QQUlSV0lTRV9LRVlfRU5UUlkgS2V5SW5mbzsKKwkJCQkJS2V5SW5mbyA9ICooKFBSVF9BRERfUEFJUldJU0VfS0VZX0VOVFJZKShwRGF0YSkpOworCQkJCQlBc2ljQWRkUGFpcndpc2VLZXlFbnRyeShwQWQsCisJCQkJCQkJCQkJCUtleUluZm8uTWFjQWRkciwKKwkJCQkJCQkJCQkJKFVDSEFSKUtleUluZm8uTWFjVGFiTWF0Y2hXQ0lELAorCQkJCQkJCQkJCQkmS2V5SW5mby5DaXBoZXJLZXkpOworCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBSVF9DTURfU0VUX1JYX1dDSURfVEFCTEU6IC8vR2VuZXJhbCBjYWxsIGZvciBSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KCkKKwkJCQl7CisJCQkJCVBNQUNfVEFCTEVfRU5UUlkgcEVudHJ5OworCQkJCQlVQ0hBUiBLZXlJZHg7CisJCQkJCVVDSEFSIENpcGhlckFsZzsKKwkJCQkJVUNIQVIgQXBJZHg7CisKKwkJCQkJcEVudHJ5ID0gKFBNQUNfVEFCTEVfRU5UUlkpKHBEYXRhKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkJCQlLZXlJZHggPSAwOworCQkJCQlDaXBoZXJBbGcgPSBwRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZzsKKwkJCQkJQXBJZHggPSBCU1MwOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKwkJCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkoCisJCQkJCQkJCQkJICBwQWQsCisJCQkJCQkJCQkJICBBcElkeCwKKwkJCQkJCQkJCQkgIEtleUlkeCwKKwkJCQkJCQkJCQkgIENpcGhlckFsZywKKwkJCQkJCQkJCQkgIHBFbnRyeSk7CisJCQkJCX0KKwkJCQkJCWJyZWFrOworLy9CZW5zb24gbW9kaWZpZWQgZm9yIFVTQiBpbnRlcmZhY2UsIGF2b2lkIGluIGludGVycnVwdCB3aGVuIHdyaXRlIGtleSwgMjAwODA3MjQgPC0tCisKKwkJCQljYXNlIENNRFRIUkVBRF9TRVRfQ0xJRU5UX01BQ19FTlRSWToKKwkJCQkJeworCQkJCQkJTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisJCQkJCQlwRW50cnkgPSAoTUFDX1RBQkxFX0VOVFJZICopcERhdGE7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJCXsKKwkJCQkJCQlBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShwQWQsIHBFbnRyeS0+YXBpZHgsIChVQ0hBUilwRW50cnktPkFpZCk7CisJCQkJCQkJaWYgKChwRW50cnktPkF1dGhNb2RlIDw9IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gpICYmIChwRW50cnktPldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKSkKKwkJCQkJCQl7CisJCQkJCQkJCVVJTlQzMiB1SVYgPSAwOworCQkJCQkJCQlQVUNIQVIgIHB0cjsKKworCQkJCQkJCQlwdHIgPSAoUFVDSEFSKSAmdUlWOworCQkJCQkJCQkqKHB0ciArIDMpID0gKHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA8PCA2KTsKKwkJCQkJCQkJQXNpY1VwZGF0ZVdDSURJVkVJVihwQWQsIHBFbnRyeS0+QWlkLCB1SVYsIDApOworCQkJCQkJCQlBc2ljVXBkYXRlV0NJREF0dHJpYnV0ZShwQWQsIHBFbnRyeS0+QWlkLCBCU1MwLCBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZywgRkFMU0UpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlIGlmIChwRW50cnktPkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisJCQkJCQkJeworCQkJCQkJCQlVSU5UMzIgdUlWID0gMDsKKwkJCQkJCQkJUFVDSEFSICBwdHI7CisKKwkJCQkJCQkJcHRyID0gKFBVQ0hBUikgJnVJVjsKKwkJCQkJCQkJKihwdHIgKyAzKSA9IChwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPDwgNik7CisJCQkJCQkJCUFzaWNVcGRhdGVXQ0lESVZFSVYocEFkLCBwRW50cnktPkFpZCwgdUlWLCAwKTsKKwkJCQkJCQkJQXNpY1VwZGF0ZVdDSURBdHRyaWJ1dGUocEFkLCBwRW50cnktPkFpZCwgQlNTMCwgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcsIEZBTFNFKTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJCQkJCQkJLy8KKwkJCQkJCQkJLy8gT3RoZXIgY2FzZSwgZGlzYWJsZSBlbmdpbmUuCisJCQkJCQkJCS8vIERvbid0IHdvcnJ5IFdQQSBrZXksIHdlIHdpbGwgYWRkIFdQQSBLZXkgYWZ0ZXIgNC1XYXkgaGFuZHNoYWtpbmcuCisJCQkJCQkJCS8vCisJCQkJCQkJCVVTSE9SVCAgIG9mZnNldDsKKwkJCQkJCQkJb2Zmc2V0ID0gTUFDX1dDSURfQVRUUklCVVRFX0JBU0UgKyAocEVudHJ5LT5BaWQgKiBIV19XQ0lEX0FUVFJJX1NJWkUpOworCQkJCQkJCQkvLyBSWF9QS0VZX01PREU6MCBmb3Igbm8gc2VjdXJpdHk7IFJYX0tFWV9UQUI6MCBmb3Igc2hhcmVkIGtleSB0YWJsZTsgQlNTX0lEWDowCisJCQkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldCwgMCk7CisJCQkJCQkJfQorCQkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJCQkJCQlBc2ljVXBkYXRlUnhXQ0lEVGFibGUocEFkLCBwRW50cnktPkFpZCwgcEVudHJ5LT5BZGRyKTsKKwkJCQkJCXByaW50aygiVXBkYXRlUnhXQ0lEVGFibGUoKTogQWlkPSVkLCBBZGRyPSUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IVxuIiwgcEVudHJ5LT5BaWQsCisJCQkJCQkJCXBFbnRyeS0+QWRkclswXSwgcEVudHJ5LT5BZGRyWzFdLCBwRW50cnktPkFkZHJbMl0sIHBFbnRyeS0+QWRkclszXSwgcEVudHJ5LT5BZGRyWzRdLCBwRW50cnktPkFkZHJbNV0pOworCQkJCQl9CisJCQkJCWJyZWFrOworCisvLyBhZGQgYnkgam9obmxpLCBmaXggImluX2ludGVycnVwdCIgZXJyb3Igd2hlbiBjYWxsICJNYWNUYWJsZURlbGV0ZUVudHJ5IiBpbiBSeCB0YXNrbGV0CisJCQkJY2FzZSBDTURUSFJFQURfVVBEQVRFX1BST1RFQ1Q6CisJCQkJCXsKKwkJCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgMCwgKEFMTE5fU0VUUFJPVEVDVCksIFRSVUUsIDApOworCQkJCQl9CisJCQkJCWJyZWFrOworLy8gZW5kIGpvaG5saQorCisJCQkJY2FzZSBPSURfODAyXzExX0FERF9XRVA6CisJCQkJCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJCVVJTlQJaTsKKwkJCQkJCVVJTlQzMglLZXlJZHg7CisJCQkJCQlQTkRJU184MDJfMTFfV0VQCXBXZXBLZXk7CisKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNtZFRocmVhZDo6T0lEXzgwMl8xMV9BRERfV0VQICBcbiIpKTsKKworCQkJCQkJcFdlcEtleSA9IChQTkRJU184MDJfMTFfV0VQKXBEYXRhOworCQkJCQkJS2V5SWR4ID0gcFdlcEtleS0+S2V5SW5kZXggJiAweDBmZmZmZmZmOworCisJCQkJCQkvLyBpdCBpcyBhIHNoYXJlZCBrZXkKKwkJCQkJCWlmICgoS2V5SWR4ID49IDQpIHx8ICgocFdlcEtleS0+S2V5TGVuZ3RoICE9IDUpICYmIChwV2VwS2V5LT5LZXlMZW5ndGggIT0gMTMpKSkKKwkJCQkJCXsKKwkJCQkJCQlOZGlzU3RhdHVzID0gTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkNtZFRocmVhZDo6T0lEXzgwMl8xMV9BRERfV0VQLCBJTlZBTElEX0RBVEEhIVxuIikpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCVVDSEFSIENpcGhlckFsZzsKKwkJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleUxlbiA9IChVQ0hBUikgcFdlcEtleS0+S2V5TGVuZ3RoOworCQkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5LCAmcFdlcEtleS0+S2V5TWF0ZXJpYWwsIHBXZXBLZXktPktleUxlbmd0aCk7CisJCQkJCQkJQ2lwaGVyQWxnID0gKHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID09IDUpPyBDSVBIRVJfV0VQNjQgOiBDSVBIRVJfV0VQMTI4OworCisJCQkJCQkJLy8KKwkJCQkJCQkvLyBDaGFuZ2UgdGhlIFdFUCBjaXBoZXIgdG8gQ0tJUCBjaXBoZXIgaWYgQ0tJUCBLUCBvbi4KKwkJCQkJCQkvLyBGdW5rIFVJIG9yIE1lZXRpbmdob3VzZSBVSSB3aWxsIGFkZCBja2lwIGtleSBmcm9tIHRoaXMgcGF0aC4KKwkJCQkJCQkvLworCisJCQkJCQkJaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCisJCQkJCQkgCXsKKwkJCQkJCQkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZzsKKwkJCQkJCQkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5QYWlyd2lzZUtleS5LZXlMZW4gPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleUxlbjsKKwkJCQkJCSAJfQorCQkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQkJCQkJCWlmIChwV2VwS2V5LT5LZXlJbmRleCAmIDB4ODAwMDAwMDApCisJCQkJCQkJeworCQkJCQkJCQkvLyBEZWZhdWx0IGtleSBmb3IgdHggKHNoYXJlZCBrZXkpCisJCQkJCQkJCVVDSEFSCUlWRUlWWzhdOworCQkJCQkJCQlVSU5UMzIJV0NJREF0dHJpLCBWYWx1ZTsKKwkJCQkJCQkJVVNIT1JUCW9mZnNldCwgb2Zmc2V0MjsKKwkJCQkJCQkJTmRpc1plcm9NZW1vcnkoSVZFSVYsIDgpOworCQkJCQkJCQlwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSAoVUNIQVIpIEtleUlkeDsKKwkJCQkJCQkJLy8gQWRkIEJTU0lEIHRvIFdDVGFibGUuIGJlY2F1c2UgdGhpcyBpcyBUeCB3ZXAga2V5LgorCQkJCQkJCQkvLyBXQ0lEIEF0dHJpYnV0ZSBVREY6MywgQlNTSWR4OjMsIEFsZzozLCBLZXl0YWJsZToxPVBBSVJXSVNFIEtFWSwgQlNTSWR4IGlzIDAKKwkJCQkJCQkJV0NJREF0dHJpID0gKENpcGhlckFsZzw8MSl8U0hBUkVES0VZVEFCTEU7CisKKwkJCQkJCQkJb2Zmc2V0ID0gTUFDX1dDSURfQVRUUklCVVRFX0JBU0UgKyAoQlNTSURfV0NJRCogSFdfV0NJRF9BVFRSSV9TSVpFKTsKKwkJCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0LCBXQ0lEQXR0cmkpOworCQkJCQkJCQkvLyAxLiBJVi9FSVYKKwkJCQkJCQkJLy8gU3BlY2lmeSBrZXkgaW5kZXggdG8gZmluZCBzaGFyZWQga2V5LgorCQkJCQkJCQlJVkVJVlszXSA9IChVQ0hBUikoS2V5SWR4PDwgNik7CS8vV0VQIEVpdiBiaXQgb2ZmLiBncm91cGtleSBpbmRleCBpcyBub3QgMAorCQkJCQkJCQlvZmZzZXQgPSBQQUlSV0lTRV9JVkVJVl9UQUJMRV9CQVNFICsgKEJTUzBNY2FzdF9XQ0lEICogSFdfSVZFSVZfRU5UUllfU0laRSk7CisJCQkJCQkJCW9mZnNldDIgPSBQQUlSV0lTRV9JVkVJVl9UQUJMRV9CQVNFICsgKEJTU0lEX1dDSUQqIEhXX0lWRUlWX0VOVFJZX1NJWkUpOworCQkJCQkJCQlmb3IgKGk9MDsgaTw4OykKKwkJCQkJCQkJeworCQkJCQkJCQkJVmFsdWUgPSBJVkVJVltpXTsKKwkJCQkJCQkJCVZhbHVlICs9IChJVkVJVltpKzFdPDw4KTsKKwkJCQkJCQkJCVZhbHVlICs9IChJVkVJVltpKzJdPDwxNik7CisJCQkJCQkJCQlWYWx1ZSArPSAoSVZFSVZbaSszXTw8MjQpOworCQkJCQkJCQkJUlRVU0JXcml0ZU1BQ1JlZ2lzdGVyKHBBZCwgb2Zmc2V0K2ksIFZhbHVlKTsKKwkJCQkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldDIraSwgVmFsdWUpOworCQkJCQkJCQkJaSs9NDsKKwkJCQkJCQkJfQorCisJCQkJCQkJCS8vIDIuIFdDSUQgQXR0cmlidXRlIFVERjozLCBCU1NJZHg6MywgQWxnOjMsIEtleXRhYmxlOnVzZSBzaGFyZSBrZXksIEJTU0lkeCBpcyAwCisJCQkJCQkJCVdDSURBdHRyaSA9IChwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZzw8MSl8U0hBUkVES0VZVEFCTEU7CisJCQkJCQkJCW9mZnNldCA9IE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICsgKEJTUzBNY2FzdF9XQ0lEKiBIV19XQ0lEX0FUVFJJX1NJWkUpOworCQkJCQkJCSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQlNTME1jYXN0X1dDSUQgOiBvZmZzZXQgPSAleCwgV0NJREF0dHJpID0gJXhcbiIsIG9mZnNldCwgV0NJREF0dHJpKSk7CisJCQkJCQkJCVJUVVNCV3JpdGVNQUNSZWdpc3RlcihwQWQsIG9mZnNldCwgV0NJREF0dHJpKTsKKworCQkJCQkJCX0KKwkJCQkJCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLCBCU1MwLCAoVUNIQVIpS2V5SWR4LCBDaXBoZXJBbGcsIHBXZXBLZXktPktleU1hdGVyaWFsLCBOVUxMLCBOVUxMKTsKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDbWRUaHJlYWQ6Ok9JRF84MDJfMTFfQUREX1dFUCAoS2V5SWR4PSVkLCBMZW49JWQtYnl0ZSlcbiIsIEtleUlkeCwgcFdlcEtleS0+S2V5TGVuZ3RoKSk7CisJCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQkJCX0KKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIENNRFRIUkVBRF84MDJfMTFfQ09VTlRFUl9NRUFTVVJFOgorCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIi0tPiBDb250cm9sIFRocmVhZCAhISBFUlJPUiAhISBVbmtub3duKGNtZHFlbG10LT5jb21tYW5kPTB4JXgpICEhIFxuIiwgY21kcWVsbXQtPmNvbW1hbmQpKTsKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoY21kcWVsbXQtPkNtZEZyb21OZGlzID09IFRSVUUpCisJCXsKKwkJCQlpZiAoY21kcWVsbXQtPmJ1ZmZlciAhPSBOVUxMKQorCQkJCQlOZGlzRnJlZU1lbW9yeShjbWRxZWxtdC0+YnVmZmVyLCBjbWRxZWxtdC0+YnVmZmVybGVuZ3RoLCAwKTsKKworCQkJTmRpc0ZyZWVNZW1vcnkoY21kcWVsbXQsIHNpemVvZihDbWRRRWxtdCksIDApOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKChjbWRxZWxtdC0+YnVmZmVyICE9IE5VTEwpICYmIChjbWRxZWxtdC0+YnVmZmVybGVuZ3RoICE9IDApKQorCQkJCU5kaXNGcmVlTWVtb3J5KGNtZHFlbG10LT5idWZmZXIsIGNtZHFlbG10LT5idWZmZXJsZW5ndGgsIDApOworICAgICAgICAgICAgeworCQkJCU5kaXNGcmVlTWVtb3J5KGNtZHFlbG10LCBzaXplb2YoQ21kUUVsbXQpLCAwKTsKKwkJCX0KKwkJfQorCX0JLyogZW5kIG9mIHdoaWxlICovCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvY29tbW9uL3NwZWN0cnVtLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9zcGVjdHJ1bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNTdiMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2NvbW1vbi9zcGVjdHJ1bS5jCkBAIC0wLDAgKzEsMTg3NiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKwlhY3Rpb24uYworCisgICAgQWJzdHJhY3Q6CisgICAgSGFuZGxlIGFzc29jaWF0aW9uIHJlbGF0ZWQgcmVxdWVzdHMgZWl0aGVyIGZyb20gV1NUQSBvciBmcm9tIGxvY2FsIE1MTUUKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlGb25jaGkgV3UgICAgMjAwOAkgIAkgICBjcmVhdGVkIGZvciA4MDIuMTFoCisgKi8KKworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorI2luY2x1ZGUgIi4uL2FjdGlvbi5oIgorCitWT0lEIE1lYXN1cmVSZXFUYWJJbml0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkNvbW1vbkNmZy5NZWFzdXJlUmVxVGFiTG9jayk7CisKKwlwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYiA9IGttYWxsb2Moc2l6ZW9mKE1FQVNVUkVfUkVRX1RBQiksIEdGUF9BVE9NSUMpOworCWlmIChwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYikKKwkJTmRpc1plcm9NZW1vcnkocEFkLT5Db21tb25DZmcucE1lYXN1cmVSZXFUYWIsIHNpemVvZihNRUFTVVJFX1JFUV9UQUIpKTsKKwllbHNlCisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIEZhaWwgdG8gYWxsb2MgbWVtb3J5IGZvciBwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYi5cbiIsIF9fRlVOQ1RJT05fXykpOworCisJcmV0dXJuOworfQorCitWT0lEIE1lYXN1cmVSZXFUYWJFeGl0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU5kaXNGcmVlU3BpbkxvY2socEFkLT5Db21tb25DZmcuTWVhc3VyZVJlcVRhYkxvY2spOworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLnBNZWFzdXJlUmVxVGFiKQorCQlrZnJlZShwQWQtPkNvbW1vbkNmZy5wTWVhc3VyZVJlcVRhYik7CisJcEFkLT5Db21tb25DZmcucE1lYXN1cmVSZXFUYWIgPSBOVUxMOworCisJcmV0dXJuOworfQorCitzdGF0aWMgUE1FQVNVUkVfUkVRX0VOVFJZIE1lYXN1cmVSZXFMb29rVXAoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUlOVDgJCQlEaWFsb2dUb2tlbikKK3sKKwlVSU5UIEhhc2hJZHg7CisJUE1FQVNVUkVfUkVRX1RBQiBwVGFiID0gcEFkLT5Db21tb25DZmcucE1lYXN1cmVSZXFUYWI7CisJUE1FQVNVUkVfUkVRX0VOVFJZIHBFbnRyeSA9IE5VTEw7CisJUE1FQVNVUkVfUkVRX0VOVFJZIHBQcmV2RW50cnkgPSBOVUxMOworCisJaWYgKHBUYWIgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiBwTWVhc3VyZVJlcVRhYiBkb2Vzbid0IGV4aXN0LlxuIiwgX19GVU5DVElPTl9fKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCVJUTVBfU0VNX0xPQ0soJnBBZC0+Q29tbW9uQ2ZnLk1lYXN1cmVSZXFUYWJMb2NrKTsKKworCUhhc2hJZHggPSBNUV9ESUFMT0dUT0tFTl9IQVNIX0lOREVYKERpYWxvZ1Rva2VuKTsKKwlwRW50cnkgPSBwVGFiLT5IYXNoW0hhc2hJZHhdOworCisJd2hpbGUgKHBFbnRyeSkKKwl7CisJCWlmIChwRW50cnktPkRpYWxvZ1Rva2VuID09IERpYWxvZ1Rva2VuKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJeworCQkJcFByZXZFbnRyeSA9IHBFbnRyeTsKKwkJCXBFbnRyeSA9IHBFbnRyeS0+cE5leHQ7CisJCX0KKwl9CisKKwlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+Q29tbW9uQ2ZnLk1lYXN1cmVSZXFUYWJMb2NrKTsKKworCXJldHVybiBwRW50cnk7Cit9CisKK3N0YXRpYyBQTUVBU1VSRV9SRVFfRU5UUlkgTWVhc3VyZVJlcUluc2VydCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVSU5UOAkJCURpYWxvZ1Rva2VuKQoreworCUlOVCBpOworCVVMT05HIEhhc2hJZHg7CisJUE1FQVNVUkVfUkVRX1RBQiBwVGFiID0gcEFkLT5Db21tb25DZmcucE1lYXN1cmVSZXFUYWI7CisJUE1FQVNVUkVfUkVRX0VOVFJZIHBFbnRyeSA9IE5VTEwsIHBDdXJyRW50cnk7CisJVUxPTkcgTm93OworCisJaWYocFRhYiA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHBNZWFzdXJlUmVxVGFiIGRvZXNuJ3QgZXhpc3QuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcEVudHJ5ID0gTWVhc3VyZVJlcUxvb2tVcChwQWQsIERpYWxvZ1Rva2VuKTsKKwlpZiAocEVudHJ5ID09IE5VTEwpCisJeworCQlSVE1QX1NFTV9MT0NLKCZwQWQtPkNvbW1vbkNmZy5NZWFzdXJlUmVxVGFiTG9jayk7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfTUVBU1VSRV9SRVFfVEFCX1NJWkU7IGkrKykKKwkJeworCQkJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93KTsKKwkJCXBFbnRyeSA9ICZwVGFiLT5Db250ZW50W2ldOworCisJCQlpZiAoKHBFbnRyeS0+VmFsaWQgPT0gVFJVRSkKKwkJCQkmJiBSVE1QX1RJTUVfQUZURVIoKHVuc2lnbmVkIGxvbmcpTm93LCAodW5zaWduZWQgbG9uZykocEVudHJ5LT5sYXN0VGltZSArIE1RX1JFUV9BR0VfT1VUKSkpCisJCQl7CisJCQkJUE1FQVNVUkVfUkVRX0VOVFJZIHBQcmV2RW50cnkgPSBOVUxMOworCQkJCVVMT05HIEhhc2hJZHggPSBNUV9ESUFMT0dUT0tFTl9IQVNIX0lOREVYKHBFbnRyeS0+RGlhbG9nVG9rZW4pOworCQkJCVBNRUFTVVJFX1JFUV9FTlRSWSBwUHJvYmVFbnRyeSA9IHBUYWItPkhhc2hbSGFzaElkeF07CisKKwkJCQkvLyB1cGRhdGUgSGFzaCBsaXN0CisJCQkJZG8KKwkJCQl7CisJCQkJCWlmIChwUHJvYmVFbnRyeSA9PSBwRW50cnkpCisJCQkJCXsKKwkJCQkJCWlmIChwUHJldkVudHJ5ID09IE5VTEwpCisJCQkJCQl7CisJCQkJCQkJcFRhYi0+SGFzaFtIYXNoSWR4XSA9IHBFbnRyeS0+cE5leHQ7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcFByZXZFbnRyeS0+cE5leHQgPSBwRW50cnktPnBOZXh0OworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQlwUHJldkVudHJ5ID0gcFByb2JlRW50cnk7CisJCQkJCXBQcm9iZUVudHJ5ID0gcFByb2JlRW50cnktPnBOZXh0OworCQkJCX0gd2hpbGUgKHBQcm9iZUVudHJ5KTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHBFbnRyeSwgc2l6ZW9mKE1FQVNVUkVfUkVRX0VOVFJZKSk7CisJCQkJcFRhYi0+U2l6ZS0tOworCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChwRW50cnktPlZhbGlkID09IEZBTFNFKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKGkgPCBNQVhfTUVBU1VSRV9SRVFfVEFCX1NJWkUpCisJCXsKKwkJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJk5vdyk7CisJCQlwRW50cnktPmxhc3RUaW1lID0gTm93OworCQkJcEVudHJ5LT5WYWxpZCA9IFRSVUU7CisJCQlwRW50cnktPkRpYWxvZ1Rva2VuID0gRGlhbG9nVG9rZW47CisJCQlwVGFiLT5TaXplKys7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwRW50cnkgPSBOVUxMOworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHBNZWFzdXJlUmVxVGFiIHRhYiBmdWxsLlxuIiwgX19GVU5DVElPTl9fKSk7CisJCX0KKworCQkvLyBhZGQgdGhpcyBOZWlnaGJvciBlbnRyeSBpbnRvIEhBU0ggdGFibGUKKwkJaWYgKHBFbnRyeSkKKwkJeworCQkJSGFzaElkeCA9IE1RX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgoRGlhbG9nVG9rZW4pOworCQkJaWYgKHBUYWItPkhhc2hbSGFzaElkeF0gPT0gTlVMTCkKKwkJCXsKKwkJCQlwVGFiLT5IYXNoW0hhc2hJZHhdID0gcEVudHJ5OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXBDdXJyRW50cnkgPSBwVGFiLT5IYXNoW0hhc2hJZHhdOworCQkJCXdoaWxlIChwQ3VyckVudHJ5LT5wTmV4dCAhPSBOVUxMKQorCQkJCQlwQ3VyckVudHJ5ID0gcEN1cnJFbnRyeS0+cE5leHQ7CisJCQkJcEN1cnJFbnRyeS0+cE5leHQgPSBwRW50cnk7CisJCQl9CisJCX0KKworCQlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+Q29tbW9uQ2ZnLk1lYXN1cmVSZXFUYWJMb2NrKTsKKwl9CisKKwlyZXR1cm4gcEVudHJ5OworfQorCitzdGF0aWMgVk9JRCBNZWFzdXJlUmVxRGVsZXRlKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVJTlQ4CQkJRGlhbG9nVG9rZW4pCit7CisJUE1FQVNVUkVfUkVRX1RBQiBwVGFiID0gcEFkLT5Db21tb25DZmcucE1lYXN1cmVSZXFUYWI7CisJUE1FQVNVUkVfUkVRX0VOVFJZIHBFbnRyeSA9IE5VTEw7CisKKwlpZihwVGFiID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczogcE1lYXN1cmVSZXFUYWIgZG9lc24ndCBleGlzdC5cbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm47CisJfQorCisJLy8gaWYgZW1wdHksIHJldHVybgorCWlmIChwVGFiLT5TaXplID09IDApCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJwTWVhc3VyZVJlcVRhYiBlbXB0eS5cbiIpKTsKKwkJcmV0dXJuOworCX0KKworCXBFbnRyeSA9IE1lYXN1cmVSZXFMb29rVXAocEFkLCBEaWFsb2dUb2tlbik7CisJaWYgKHBFbnRyeSAhPSBOVUxMKQorCXsKKwkJUE1FQVNVUkVfUkVRX0VOVFJZIHBQcmV2RW50cnkgPSBOVUxMOworCQlVTE9ORyBIYXNoSWR4ID0gTVFfRElBTE9HVE9LRU5fSEFTSF9JTkRFWChwRW50cnktPkRpYWxvZ1Rva2VuKTsKKwkJUE1FQVNVUkVfUkVRX0VOVFJZIHBQcm9iZUVudHJ5ID0gcFRhYi0+SGFzaFtIYXNoSWR4XTsKKworCQlSVE1QX1NFTV9MT0NLKCZwQWQtPkNvbW1vbkNmZy5NZWFzdXJlUmVxVGFiTG9jayk7CisJCS8vIHVwZGF0ZSBIYXNoIGxpc3QKKwkJZG8KKwkJeworCQkJaWYgKHBQcm9iZUVudHJ5ID09IHBFbnRyeSkKKwkJCXsKKwkJCQlpZiAocFByZXZFbnRyeSA9PSBOVUxMKQorCQkJCXsKKwkJCQkJcFRhYi0+SGFzaFtIYXNoSWR4XSA9IHBFbnRyeS0+cE5leHQ7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCXBQcmV2RW50cnktPnBOZXh0ID0gcEVudHJ5LT5wTmV4dDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXBQcmV2RW50cnkgPSBwUHJvYmVFbnRyeTsKKwkJCXBQcm9iZUVudHJ5ID0gcFByb2JlRW50cnktPnBOZXh0OworCQl9IHdoaWxlIChwUHJvYmVFbnRyeSk7CisKKwkJTmRpc1plcm9NZW1vcnkocEVudHJ5LCBzaXplb2YoTUVBU1VSRV9SRVFfRU5UUlkpKTsKKwkJcFRhYi0+U2l6ZS0tOworCisJCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5Db21tb25DZmcuTWVhc3VyZVJlcVRhYkxvY2spOworCX0KKworCXJldHVybjsKK30KKworVk9JRCBUcGNSZXFUYWJJbml0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPkNvbW1vbkNmZy5UcGNSZXFUYWJMb2NrKTsKKworCXBBZC0+Q29tbW9uQ2ZnLnBUcGNSZXFUYWIgPSBrbWFsbG9jKHNpemVvZihUUENfUkVRX1RBQiksIEdGUF9BVE9NSUMpOworCWlmIChwQWQtPkNvbW1vbkNmZy5wVHBjUmVxVGFiKQorCQlOZGlzWmVyb01lbW9yeShwQWQtPkNvbW1vbkNmZy5wVHBjUmVxVGFiLCBzaXplb2YoVFBDX1JFUV9UQUIpKTsKKwllbHNlCisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIEZhaWwgdG8gYWxsb2MgbWVtb3J5IGZvciBwQWQtPkNvbW1vbkNmZy5wVHBjUmVxVGFiLlxuIiwgX19GVU5DVElPTl9fKSk7CisKKwlyZXR1cm47Cit9CisKK1ZPSUQgVHBjUmVxVGFiRXhpdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlOZGlzRnJlZVNwaW5Mb2NrKHBBZC0+Q29tbW9uQ2ZnLlRwY1JlcVRhYkxvY2spOworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLnBUcGNSZXFUYWIpCisJCWtmcmVlKHBBZC0+Q29tbW9uQ2ZnLnBUcGNSZXFUYWIpOworCXBBZC0+Q29tbW9uQ2ZnLnBUcGNSZXFUYWIgPSBOVUxMOworCisJcmV0dXJuOworfQorCitzdGF0aWMgUFRQQ19SRVFfRU5UUlkgVHBjUmVxTG9va1VwKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVJTlQ4CQkJRGlhbG9nVG9rZW4pCit7CisJVUlOVCBIYXNoSWR4OworCVBUUENfUkVRX1RBQiBwVGFiID0gcEFkLT5Db21tb25DZmcucFRwY1JlcVRhYjsKKwlQVFBDX1JFUV9FTlRSWSBwRW50cnkgPSBOVUxMOworCVBUUENfUkVRX0VOVFJZIHBQcmV2RW50cnkgPSBOVUxMOworCisJaWYgKHBUYWIgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiBwVHBjUmVxVGFiIGRvZXNuJ3QgZXhpc3QuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJUlRNUF9TRU1fTE9DSygmcEFkLT5Db21tb25DZmcuVHBjUmVxVGFiTG9jayk7CisKKwlIYXNoSWR4ID0gVFBDX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgoRGlhbG9nVG9rZW4pOworCXBFbnRyeSA9IHBUYWItPkhhc2hbSGFzaElkeF07CisKKwl3aGlsZSAocEVudHJ5KQorCXsKKwkJaWYgKHBFbnRyeS0+RGlhbG9nVG9rZW4gPT0gRGlhbG9nVG9rZW4pCisJCQlicmVhazsKKwkJZWxzZQorCQl7CisJCQlwUHJldkVudHJ5ID0gcEVudHJ5OworCQkJcEVudHJ5ID0gcEVudHJ5LT5wTmV4dDsKKwkJfQorCX0KKworCVJUTVBfU0VNX1VOTE9DSygmcEFkLT5Db21tb25DZmcuVHBjUmVxVGFiTG9jayk7CisKKwlyZXR1cm4gcEVudHJ5OworfQorCisKK3N0YXRpYyBQVFBDX1JFUV9FTlRSWSBUcGNSZXFJbnNlcnQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUlOVDgJCQlEaWFsb2dUb2tlbikKK3sKKwlJTlQgaTsKKwlVTE9ORyBIYXNoSWR4OworCVBUUENfUkVRX1RBQiBwVGFiID0gcEFkLT5Db21tb25DZmcucFRwY1JlcVRhYjsKKwlQVFBDX1JFUV9FTlRSWSBwRW50cnkgPSBOVUxMLCBwQ3VyckVudHJ5OworCVVMT05HIE5vdzsKKworCWlmKHBUYWIgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiBwVHBjUmVxVGFiIGRvZXNuJ3QgZXhpc3QuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcEVudHJ5ID0gVHBjUmVxTG9va1VwKHBBZCwgRGlhbG9nVG9rZW4pOworCWlmIChwRW50cnkgPT0gTlVMTCkKKwl7CisJCVJUTVBfU0VNX0xPQ0soJnBBZC0+Q29tbW9uQ2ZnLlRwY1JlcVRhYkxvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RQQ19SRVFfVEFCX1NJWkU7IGkrKykKKwkJeworCQkJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93KTsKKwkJCXBFbnRyeSA9ICZwVGFiLT5Db250ZW50W2ldOworCisJCQlpZiAoKHBFbnRyeS0+VmFsaWQgPT0gVFJVRSkKKwkJCQkmJiBSVE1QX1RJTUVfQUZURVIoKHVuc2lnbmVkIGxvbmcpTm93LCAodW5zaWduZWQgbG9uZykocEVudHJ5LT5sYXN0VGltZSArIFRQQ19SRVFfQUdFX09VVCkpKQorCQkJeworCQkJCVBUUENfUkVRX0VOVFJZIHBQcmV2RW50cnkgPSBOVUxMOworCQkJCVVMT05HIEhhc2hJZHggPSBUUENfRElBTE9HVE9LRU5fSEFTSF9JTkRFWChwRW50cnktPkRpYWxvZ1Rva2VuKTsKKwkJCQlQVFBDX1JFUV9FTlRSWSBwUHJvYmVFbnRyeSA9IHBUYWItPkhhc2hbSGFzaElkeF07CisKKwkJCQkvLyB1cGRhdGUgSGFzaCBsaXN0CisJCQkJZG8KKwkJCQl7CisJCQkJCWlmIChwUHJvYmVFbnRyeSA9PSBwRW50cnkpCisJCQkJCXsKKwkJCQkJCWlmIChwUHJldkVudHJ5ID09IE5VTEwpCisJCQkJCQl7CisJCQkJCQkJcFRhYi0+SGFzaFtIYXNoSWR4XSA9IHBFbnRyeS0+cE5leHQ7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcFByZXZFbnRyeS0+cE5leHQgPSBwRW50cnktPnBOZXh0OworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQlwUHJldkVudHJ5ID0gcFByb2JlRW50cnk7CisJCQkJCXBQcm9iZUVudHJ5ID0gcFByb2JlRW50cnktPnBOZXh0OworCQkJCX0gd2hpbGUgKHBQcm9iZUVudHJ5KTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHBFbnRyeSwgc2l6ZW9mKFRQQ19SRVFfRU5UUlkpKTsKKwkJCQlwVGFiLT5TaXplLS07CisKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHBFbnRyeS0+VmFsaWQgPT0gRkFMU0UpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA8IE1BWF9UUENfUkVRX1RBQl9TSVpFKQorCQl7CisJCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCQkJcEVudHJ5LT5sYXN0VGltZSA9IE5vdzsKKwkJCXBFbnRyeS0+VmFsaWQgPSBUUlVFOworCQkJcEVudHJ5LT5EaWFsb2dUb2tlbiA9IERpYWxvZ1Rva2VuOworCQkJcFRhYi0+U2l6ZSsrOworCQl9CisJCWVsc2UKKwkJeworCQkJcEVudHJ5ID0gTlVMTDsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiBwVHBjUmVxVGFiIHRhYiBmdWxsLlxuIiwgX19GVU5DVElPTl9fKSk7CisJCX0KKworCQkvLyBhZGQgdGhpcyBOZWlnaGJvciBlbnRyeSBpbnRvIEhBU0ggdGFibGUKKwkJaWYgKHBFbnRyeSkKKwkJeworCQkJSGFzaElkeCA9IFRQQ19ESUFMT0dUT0tFTl9IQVNIX0lOREVYKERpYWxvZ1Rva2VuKTsKKwkJCWlmIChwVGFiLT5IYXNoW0hhc2hJZHhdID09IE5VTEwpCisJCQl7CisJCQkJcFRhYi0+SGFzaFtIYXNoSWR4XSA9IHBFbnRyeTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlwQ3VyckVudHJ5ID0gcFRhYi0+SGFzaFtIYXNoSWR4XTsKKwkJCQl3aGlsZSAocEN1cnJFbnRyeS0+cE5leHQgIT0gTlVMTCkKKwkJCQkJcEN1cnJFbnRyeSA9IHBDdXJyRW50cnktPnBOZXh0OworCQkJCXBDdXJyRW50cnktPnBOZXh0ID0gcEVudHJ5OworCQkJfQorCQl9CisKKwkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPkNvbW1vbkNmZy5UcGNSZXFUYWJMb2NrKTsKKwl9CisKKwlyZXR1cm4gcEVudHJ5OworfQorCitzdGF0aWMgVk9JRCBUcGNSZXFEZWxldGUoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUlOVDgJCQlEaWFsb2dUb2tlbikKK3sKKwlQVFBDX1JFUV9UQUIgcFRhYiA9IHBBZC0+Q29tbW9uQ2ZnLnBUcGNSZXFUYWI7CisJUFRQQ19SRVFfRU5UUlkgcEVudHJ5ID0gTlVMTDsKKworCWlmKHBUYWIgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiBwVHBjUmVxVGFiIGRvZXNuJ3QgZXhpc3QuXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJcmV0dXJuOworCX0KKworCS8vIGlmIGVtcHR5LCByZXR1cm4KKwlpZiAocFRhYi0+U2l6ZSA9PSAwKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgicFRwY1JlcVRhYiBlbXB0eS5cbiIpKTsKKwkJcmV0dXJuOworCX0KKworCXBFbnRyeSA9IFRwY1JlcUxvb2tVcChwQWQsIERpYWxvZ1Rva2VuKTsKKwlpZiAocEVudHJ5ICE9IE5VTEwpCisJeworCQlQVFBDX1JFUV9FTlRSWSBwUHJldkVudHJ5ID0gTlVMTDsKKwkJVUxPTkcgSGFzaElkeCA9IFRQQ19ESUFMT0dUT0tFTl9IQVNIX0lOREVYKHBFbnRyeS0+RGlhbG9nVG9rZW4pOworCQlQVFBDX1JFUV9FTlRSWSBwUHJvYmVFbnRyeSA9IHBUYWItPkhhc2hbSGFzaElkeF07CisKKwkJUlRNUF9TRU1fTE9DSygmcEFkLT5Db21tb25DZmcuVHBjUmVxVGFiTG9jayk7CisJCS8vIHVwZGF0ZSBIYXNoIGxpc3QKKwkJZG8KKwkJeworCQkJaWYgKHBQcm9iZUVudHJ5ID09IHBFbnRyeSkKKwkJCXsKKwkJCQlpZiAocFByZXZFbnRyeSA9PSBOVUxMKQorCQkJCXsKKwkJCQkJcFRhYi0+SGFzaFtIYXNoSWR4XSA9IHBFbnRyeS0+cE5leHQ7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCXBQcmV2RW50cnktPnBOZXh0ID0gcEVudHJ5LT5wTmV4dDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXBQcmV2RW50cnkgPSBwUHJvYmVFbnRyeTsKKwkJCXBQcm9iZUVudHJ5ID0gcFByb2JlRW50cnktPnBOZXh0OworCQl9IHdoaWxlIChwUHJvYmVFbnRyeSk7CisKKwkJTmRpc1plcm9NZW1vcnkocEVudHJ5LCBzaXplb2YoVFBDX1JFUV9FTlRSWSkpOworCQlwVGFiLT5TaXplLS07CisKKwkJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPkNvbW1vbkNmZy5UcGNSZXFUYWJMb2NrKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJR2V0IEN1cnJlbnQgVGltZVMgdGFtcC4KKworCVBhcmFtZXRyczoKKworCVJldHVybgk6IEN1cnJlbnQgVGltZSBTdGFtcC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgVUlOVDY0IEdldEN1cnJlbnRUaW1lU3RhbXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJLy8gZ2V0IGN1cnJlbnQgdGltZSBzdGFtcC4KKwlyZXR1cm4gMDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlHZXQgQ3VycmVudCBUcmFuc21pdCBQb3dlci4KKworCVBhcmFtZXRyczoKKworCVJldHVybgk6IEN1cnJlbnQgVGltZSBTdGFtcC4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgVUlOVDggR2V0Q3VyVHhQd3IoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUlOVDggV2NpZCkKK3sKKwlyZXR1cm4gMTY7IC8qIDE2IGRCbSAqLworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUluc2VydCBEaWFsb2cgVG9rZW4gaW50byBmcmFtZS4KKworCVBhcmFtZXRyczoKKwkJMS4gZnJhbWUgYnVmZmVyIHBvaW50ZXIuCisJCTIuIGZyYW1lIGxlbmd0aC4KKwkJMy4gRGlhbG9nIHRva2VuLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgVk9JRCBJbnNlcnREaWFsb2dUb2tlbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBGcmFtZUJ1ZiwKKwlPVVQgUFVMT05HIHBGcmFtZUxlbiwKKwlJTiBVSU5UOCBEaWFsb2dUb2tlbikKK3sKKwlVTE9ORyBUZW1wTGVuOworCU1ha2VPdXRnb2luZ0ZyYW1lKHBGcmFtZUJ1ZiwJJlRlbXBMZW4sCisJCQkJCTEsCQkJCSZEaWFsb2dUb2tlbiwKKwkJCQkJRU5EX09GX0FSR1MpOworCisJKnBGcmFtZUxlbiA9ICpwRnJhbWVMZW4gKyBUZW1wTGVuOworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUluc2VydCBUUEMgUmVxdWVzdCBJRSBpbnRvIGZyYW1lLgorCisJUGFyYW1ldHJzOgorCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KKwkJMi4gZnJhbWUgbGVuZ3RoLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisgc3RhdGljIFZPSUQgSW5zZXJ0VHBjUmVxSUUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJT1VUIFBVQ0hBUiBwRnJhbWVCdWYsCisJT1VUIFBVTE9ORyBwRnJhbWVMZW4pCit7CisJVUxPTkcgVGVtcExlbjsKKwlVTE9ORyBMZW4gPSAwOworCVVJTlQ4IEVsZW1lbnRJRCA9IElFX1RQQ19SRVFVRVNUOworCisJTWFrZU91dGdvaW5nRnJhbWUocEZyYW1lQnVmLAkJCQkJJlRlbXBMZW4sCisJCQkJCQkxLAkJCQkJCQkmRWxlbWVudElELAorCQkJCQkJMSwJCQkJCQkJJkxlbiwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKworCSpwRnJhbWVMZW4gPSAqcEZyYW1lTGVuICsgVGVtcExlbjsKKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlJbnNlcnQgVFBDIFJlcG9ydCBJRSBpbnRvIGZyYW1lLgorCisJUGFyYW1ldHJzOgorCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KKwkJMi4gZnJhbWUgbGVuZ3RoLgorCQkzLiBUcmFuc21pdCBQb3dlci4KKwkJNC4gTGluayBNYXJnaW4uCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKyBzdGF0aWMgVk9JRCBJbnNlcnRUcGNSZXBvcnRJRSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBGcmFtZUJ1ZiwKKwlPVVQgUFVMT05HIHBGcmFtZUxlbiwKKwlJTiBVSU5UOCBUeFB3ciwKKwlJTiBVSU5UOCBMaW5rTWFyZ2luKQoreworCVVMT05HIFRlbXBMZW47CisJVUxPTkcgTGVuID0gc2l6ZW9mKFRQQ19SRVBPUlRfSU5GTyk7CisJVUlOVDggRWxlbWVudElEID0gSUVfVFBDX1JFUE9SVDsKKwlUUENfUkVQT1JUX0lORk8gVHBjUmVwb3J0SUU7CisKKwlUcGNSZXBvcnRJRS5UeFB3ciA9IFR4UHdyOworCVRwY1JlcG9ydElFLkxpbmtNYXJnaW4gPSBMaW5rTWFyZ2luOworCisJTWFrZU91dGdvaW5nRnJhbWUocEZyYW1lQnVmLAkJCQkJJlRlbXBMZW4sCisJCQkJCQkxLAkJCQkJCQkmRWxlbWVudElELAorCQkJCQkJMSwJCQkJCQkJJkxlbiwKKwkJCQkJCUxlbiwJCQkJCQkmVHBjUmVwb3J0SUUsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKwkqcEZyYW1lTGVuID0gKnBGcmFtZUxlbiArIFRlbXBMZW47CisKKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlJbnNlcnQgQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IElFIGludG8gZnJhbWUuCisKKwlQYXJhbWV0cnM6CisJCTEuIGZyYW1lIGJ1ZmZlciBwb2ludGVyLgorCQkyLiBmcmFtZSBsZW5ndGguCisJCTMuIGNoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudCBtb2RlLgorCQk0LiBuZXcgc2VsZWN0ZWQgY2hhbm5lbC4KKwkJNS4gY2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IGNvdW50LgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgVk9JRCBJbnNlcnRDaFN3QW5uSUUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJT1VUIFBVQ0hBUiBwRnJhbWVCdWYsCisJT1VUIFBVTE9ORyBwRnJhbWVMZW4sCisJSU4gVUlOVDggQ2hTd01vZGUsCisJSU4gVUlOVDggTmV3Q2hhbm5lbCwKKwlJTiBVSU5UOCBDaFN3Q250KQoreworCVVMT05HIFRlbXBMZW47CisJVUxPTkcgTGVuID0gc2l6ZW9mKENIX1NXX0FOTl9JTkZPKTsKKwlVSU5UOCBFbGVtZW50SUQgPSBJRV9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRU1FTlQ7CisJQ0hfU1dfQU5OX0lORk8gQ2hTd0FubklFOworCisJQ2hTd0FubklFLkNoU3dNb2RlID0gQ2hTd01vZGU7CisJQ2hTd0FubklFLkNoYW5uZWwgPSBOZXdDaGFubmVsOworCUNoU3dBbm5JRS5DaFN3Q250ID0gQ2hTd0NudDsKKworCU1ha2VPdXRnb2luZ0ZyYW1lKHBGcmFtZUJ1ZiwJCQkJJlRlbXBMZW4sCisJCQkJCQkxLAkJCQkJCSZFbGVtZW50SUQsCisJCQkJCQkxLAkJCQkJCSZMZW4sCisJCQkJCQlMZW4sCQkJCQkmQ2hTd0FubklFLAorCQkJCQkJRU5EX09GX0FSR1MpOworCisJKnBGcmFtZUxlbiA9ICpwRnJhbWVMZW4gKyBUZW1wTGVuOworCisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJSW5zZXJ0IE1lYXN1cmUgUmVxdWVzdCBJRSBpbnRvIGZyYW1lLgorCisJUGFyYW1ldHJzOgorCQkxLiBmcmFtZSBidWZmZXIgcG9pbnRlci4KKwkJMi4gZnJhbWUgbGVuZ3RoLgorCQkzLiBNZWFzdXJlIFRva2VuLgorCQk0LiBNZWFzdXJlIFJlcXVlc3QgTW9kZS4KKwkJNS4gTWVhc3VyZSBSZXF1ZXN0IFR5cGUuCisJCTYuIE1lYXN1cmUgQ2hhbm5lbC4KKwkJNy4gTWVhc3VyZSBTdGFydCB0aW1lLgorCQk4LiBNZWFzdXJlIER1cmF0aW9uLgorCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIEluc2VydE1lYXN1cmVSZXFJRSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQgUFVDSEFSIHBGcmFtZUJ1ZiwKKwlPVVQgUFVMT05HIHBGcmFtZUxlbiwKKwlJTiBQTUVBU1VSRV9SRVFfSU5GTyBwTWVhc3VyZVJlcUlFKQoreworCVVMT05HIFRlbXBMZW47CisJVUlOVDggTGVuID0gc2l6ZW9mKE1FQVNVUkVfUkVRX0lORk8pOworCVVJTlQ4IEVsZW1lbnRJRCA9IElFX01FQVNVUkVNRU5UX1JFUVVFU1Q7CisKKwlNYWtlT3V0Z29pbmdGcmFtZShwRnJhbWVCdWYsCQkJCQkmVGVtcExlbiwKKwkJCQkJCTEsCQkJCQkJCSZFbGVtZW50SUQsCisJCQkJCQkxLAkJCQkJCQkmTGVuLAorCQkJCQkJTGVuLAkJCQkJCXBNZWFzdXJlUmVxSUUsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKwkqcEZyYW1lTGVuID0gKnBGcmFtZUxlbiArIFRlbXBMZW47CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJSW5zZXJ0IE1lYXN1cmUgUmVwb3J0IElFIGludG8gZnJhbWUuCisKKwlQYXJhbWV0cnM6CisJCTEuIGZyYW1lIGJ1ZmZlciBwb2ludGVyLgorCQkyLiBmcmFtZSBsZW5ndGguCisJCTMuIE1lYXN1cmUgVG9rZW4uCisJCTQuIE1lYXN1cmUgUmVxdWVzdCBNb2RlLgorCQk1LiBNZWFzdXJlIFJlcXVlc3QgVHlwZS4KKwkJNi4gTGVuZ3RoIG9mIFJlcG9ydCBJbmZvbWF0aW9uCisJCTcuIFBvaW50ZXIgb2YgUmVwb3J0IEluZm9tYXRpb24gQnVmZmVyLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgVk9JRCBJbnNlcnRNZWFzdXJlUmVwb3J0SUUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJT1VUIFBVQ0hBUiBwRnJhbWVCdWYsCisJT1VUIFBVTE9ORyBwRnJhbWVMZW4sCisJSU4gUE1FQVNVUkVfUkVQT1JUX0lORk8gcE1lYXN1cmVSZXBvcnRJRSwKKwlJTiBVSU5UOCBSZXBvcnRMbmZvTGVuLAorCUlOIFBVSU5UOCBwUmVwb3J0SW5mbykKK3sKKwlVTE9ORyBUZW1wTGVuOworCVVMT05HIExlbjsKKwlVSU5UOCBFbGVtZW50SUQgPSBJRV9NRUFTVVJFTUVOVF9SRVBPUlQ7CisKKwlMZW4gPSBzaXplb2YoTUVBU1VSRV9SRVBPUlRfSU5GTykgKyBSZXBvcnRMbmZvTGVuOworCisJTWFrZU91dGdvaW5nRnJhbWUocEZyYW1lQnVmLAkJCQkJJlRlbXBMZW4sCisJCQkJCQkxLAkJCQkJCQkmRWxlbWVudElELAorCQkJCQkJMSwJCQkJCQkJJkxlbiwKKwkJCQkJCUxlbiwJCQkJCQlwTWVhc3VyZVJlcG9ydElFLAorCQkJCQkJRU5EX09GX0FSR1MpOworCisJKnBGcmFtZUxlbiA9ICpwRnJhbWVMZW4gKyBUZW1wTGVuOworCisJaWYgKChSZXBvcnRMbmZvTGVuID4gMCkgJiYgKHBSZXBvcnRJbmZvICE9IE5VTEwpKQorCXsKKwkJTWFrZU91dGdvaW5nRnJhbWUocEZyYW1lQnVmICsgKnBGcmFtZUxlbiwJCSZUZW1wTGVuLAorCQkJCQkJCVJlcG9ydExuZm9MZW4sCQkJCXBSZXBvcnRJbmZvLAorCQkJCQkJCUVORF9PRl9BUkdTKTsKKworCQkqcEZyYW1lTGVuID0gKnBGcmFtZUxlbiArIFRlbXBMZW47CisJfQorCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlQcmVwYXJlIE1lYXN1cmVtZW50IHJlcXVlc3QgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlTWVhc3VyZW1lbnRSZXEoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBVSU5UOCBNZWFzdXJlVG9rZW4sCisJSU4gVUlOVDggTWVhc3VyZVJlcU1vZGUsCisJSU4gVUlOVDggTWVhc3VyZVJlcVR5cGUsCisJSU4gVUlOVDggTWVhc3VyZUNoLAorCUlOIFVJTlQxNiBNZWFzdXJlRHVyYXRpb24pCit7CisJUFVDSEFSIHBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTIE5TdGF0dXM7CisJVUxPTkcgRnJhbWVMZW47CisJSEVBREVSXzgwMl8xMSBBY3RIZHI7CisJTUVBU1VSRV9SRVFfSU5GTyBNZWFzdXJlUmVxSUU7CisJVUlOVDggUm1SZXFEYWlsb2dUb2tlbiA9IFJhbmRvbUJ5dGUocEFkKTsKKwlVSU5UNjQgTWVhc3VyZVN0YXJ0VGltZSA9IEdldEN1cnJlbnRUaW1lU3RhbXAocEFkKTsKKworCS8vIGJ1aWxkIGFjdGlvbiBmcmFtZSBoZWFkZXIuCisJTWd0TWFjSGVhZGVySW5pdChwQWQsICZBY3RIZHIsIFNVQlRZUEVfQUNUSU9OLCAwLCBwREEsCisJCQkJCQlwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKworCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFZPSUQpJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm47CisJfQorCU5kaXNNb3ZlTWVtb3J5KHBPdXRCdWZmZXIsIChQQ0hBUikmQWN0SGRyLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCUZyYW1lTGVuID0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJSW5zZXJ0QWN0RmllbGQocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBDQVRFR09SWV9TUEVDVFJVTSwgU1BFQ19NUlEpOworCisJLy8gZmlsbCBEaWFsb2cgVG9rZW4KKwlJbnNlcnREaWFsb2dUb2tlbihwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIE1lYXN1cmVUb2tlbik7CisKKwkvLyBwcmVwYXJlIE1lYXN1cmVtZW50IElFLgorCU5kaXNaZXJvTWVtb3J5KCZNZWFzdXJlUmVxSUUsIHNpemVvZihNRUFTVVJFX1JFUV9JTkZPKSk7CisJTWVhc3VyZVJlcUlFLlRva2VuID0gUm1SZXFEYWlsb2dUb2tlbjsKKwlNZWFzdXJlUmVxSUUuUmVxTW9kZS53b3JkID0gTWVhc3VyZVJlcU1vZGU7CisJTWVhc3VyZVJlcUlFLlJlcVR5cGUgPSBNZWFzdXJlUmVxVHlwZTsKKwlNZWFzdXJlUmVxSUUuTWVhc3VyZVJlcS5DaE51bSA9IE1lYXN1cmVDaDsKKwlNZWFzdXJlUmVxSUUuTWVhc3VyZVJlcS5NZWFzdXJlU3RhcnRUaW1lID0gY3B1MmxlNjQoTWVhc3VyZVN0YXJ0VGltZSk7CisJTWVhc3VyZVJlcUlFLk1lYXN1cmVSZXEuTWVhc3VyZUR1cmF0aW9uID0gY3B1MmxlMTYoTWVhc3VyZUR1cmF0aW9uKTsKKwlJbnNlcnRNZWFzdXJlUmVxSUUocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCAmTWVhc3VyZVJlcUlFKTsKKworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlQcmVwYXJlIE1lYXN1cmVtZW50IHJlcG9ydCBhY3Rpb24gZnJhbWUgYW5kIGVucXVldWUgaXQgaW50bworCQltYW5hZ2VtZW50IHF1ZXVlIHdhaXRpbmcgZm9yIHRyYW5zbWl0aW9uLgorCisJUGFyYW1ldHJzOgorCQkxLiB0aGUgZGVzdGluYXRpb24gbWFjIGFkZHJlc3Mgb2YgdGhlIGZyYW1lLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEVucXVldWVNZWFzdXJlbWVudFJlcCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcERBLAorCUlOIFVJTlQ4IERpYWxvZ1Rva2VuLAorCUlOIFVJTlQ4IE1lYXN1cmVUb2tlbiwKKwlJTiBVSU5UOCBNZWFzdXJlUmVxTW9kZSwKKwlJTiBVSU5UOCBNZWFzdXJlUmVxVHlwZSwKKwlJTiBVSU5UOCBSZXBvcnRJbmZvTGVuLAorCUlOIFBVSU5UOCBwUmVwb3J0SW5mbykKK3sKKwlQVUNIQVIgcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMgTlN0YXR1czsKKwlVTE9ORyBGcmFtZUxlbjsKKwlIRUFERVJfODAyXzExIEFjdEhkcjsKKwlNRUFTVVJFX1JFUE9SVF9JTkZPIE1lYXN1cmVSZXBJRTsKKworCS8vIGJ1aWxkIGFjdGlvbiBmcmFtZSBoZWFkZXIuCisJTWd0TWFjSGVhZGVySW5pdChwQWQsICZBY3RIZHIsIFNVQlRZUEVfQUNUSU9OLCAwLCBwREEsCisJCQkJCQlwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKworCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFZPSUQpJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm47CisJfQorCU5kaXNNb3ZlTWVtb3J5KHBPdXRCdWZmZXIsIChQQ0hBUikmQWN0SGRyLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCUZyYW1lTGVuID0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJSW5zZXJ0QWN0RmllbGQocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBDQVRFR09SWV9TUEVDVFJVTSwgU1BFQ19NUlApOworCisJLy8gZmlsbCBEaWFsb2cgVG9rZW4KKwlJbnNlcnREaWFsb2dUb2tlbihwQWQsIChwT3V0QnVmZmVyICsgRnJhbWVMZW4pLCAmRnJhbWVMZW4sIERpYWxvZ1Rva2VuKTsKKworCS8vIHByZXBhcmUgTWVhc3VyZW1lbnQgSUUuCisJTmRpc1plcm9NZW1vcnkoJk1lYXN1cmVSZXBJRSwgc2l6ZW9mKE1FQVNVUkVfUkVQT1JUX0lORk8pKTsKKwlNZWFzdXJlUmVwSUUuVG9rZW4gPSBNZWFzdXJlVG9rZW47CisJTWVhc3VyZVJlcElFLlJlcG9ydE1vZGUud29yZCA9IE1lYXN1cmVSZXFNb2RlOworCU1lYXN1cmVSZXBJRS5SZXBvcnRUeXBlID0gTWVhc3VyZVJlcVR5cGU7CisJSW5zZXJ0TWVhc3VyZVJlcG9ydElFKHBBZCwgKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiksICZGcmFtZUxlbiwgJk1lYXN1cmVSZXBJRSwgUmVwb3J0SW5mb0xlbiwgcFJlcG9ydEluZm8pOworCisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgVFBDIFJlcXVlc3QgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlVFBDUmVxKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gVUNIQVIgRGlhbG9nVG9rZW4pCit7CisJUFVDSEFSIHBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTIE5TdGF0dXM7CisJVUxPTkcgRnJhbWVMZW47CisKKwlIRUFERVJfODAyXzExIEFjdEhkcjsKKworCS8vIGJ1aWxkIGFjdGlvbiBmcmFtZSBoZWFkZXIuCisJTWd0TWFjSGVhZGVySW5pdChwQWQsICZBY3RIZHIsIFNVQlRZUEVfQUNUSU9OLCAwLCBwREEsCisJCQkJCQlwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKworCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFZPSUQpJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm47CisJfQorCU5kaXNNb3ZlTWVtb3J5KHBPdXRCdWZmZXIsIChQQ0hBUikmQWN0SGRyLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCUZyYW1lTGVuID0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJSW5zZXJ0QWN0RmllbGQocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBDQVRFR09SWV9TUEVDVFJVTSwgU1BFQ19UUENSUSk7CisKKwkvLyBmaWxsIERpYWxvZyBUb2tlbgorCUluc2VydERpYWxvZ1Rva2VuKHBBZCwgKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiksICZGcmFtZUxlbiwgRGlhbG9nVG9rZW4pOworCisJLy8gSW5zZXJ0IFRQQyBSZXF1ZXN0IElFLgorCUluc2VydFRwY1JlcUlFKHBBZCwgKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiksICZGcmFtZUxlbik7CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwlyZXR1cm47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBUUEMgUmVwb3J0IGFjdGlvbiBmcmFtZSBhbmQgZW5xdWV1ZSBpdCBpbnRvCisJCW1hbmFnZW1lbnQgcXVldWUgd2FpdGluZyBmb3IgdHJhbnNtaXRpb24uCisKKwlQYXJhbWV0cnM6CisJCTEuIHRoZSBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcyBvZiB0aGUgZnJhbWUuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRW5xdWV1ZVRQQ1JlcCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcERBLAorCUlOIFVJTlQ4IERpYWxvZ1Rva2VuLAorCUlOIFVJTlQ4IFR4UHdyLAorCUlOIFVJTlQ4IExpbmtNYXJnaW4pCit7CisJUFVDSEFSIHBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTIE5TdGF0dXM7CisJVUxPTkcgRnJhbWVMZW47CisKKwlIRUFERVJfODAyXzExIEFjdEhkcjsKKworCS8vIGJ1aWxkIGFjdGlvbiBmcmFtZSBoZWFkZXIuCisJTWd0TWFjSGVhZGVySW5pdChwQWQsICZBY3RIZHIsIFNVQlRZUEVfQUNUSU9OLCAwLCBwREEsCisJCQkJCQlwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKworCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFZPSUQpJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm47CisJfQorCU5kaXNNb3ZlTWVtb3J5KHBPdXRCdWZmZXIsIChQQ0hBUikmQWN0SGRyLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCUZyYW1lTGVuID0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJSW5zZXJ0QWN0RmllbGQocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBDQVRFR09SWV9TUEVDVFJVTSwgU1BFQ19UUENSUCk7CisKKwkvLyBmaWxsIERpYWxvZyBUb2tlbgorCUluc2VydERpYWxvZ1Rva2VuKHBBZCwgKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiksICZGcmFtZUxlbiwgRGlhbG9nVG9rZW4pOworCisJLy8gSW5zZXJ0IFRQQyBSZXF1ZXN0IElFLgorCUluc2VydFRwY1JlcG9ydElFKHBBZCwgKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiksICZGcmFtZUxlbiwgVHhQd3IsIExpbmtNYXJnaW4pOworCisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IGFjdGlvbiBmcmFtZSBhbmQgZW5xdWV1ZSBpdCBpbnRvCisJCW1hbmFnZW1lbnQgcXVldWUgd2FpdGluZyBmb3IgdHJhbnNtaXRpb24uCisKKwlQYXJhbWV0cnM6CisJCTEuIHRoZSBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcyBvZiB0aGUgZnJhbWUuCisJCTIuIENoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudCBtb2RlLgorCQkyLiBhIE5ldyBzZWxlY3RlZCBjaGFubmVsLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEVucXVldWVDaFN3QW5uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gVUlOVDggQ2hTd01vZGUsCisJSU4gVUlOVDggTmV3Q2gpCit7CisJUFVDSEFSIHBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTIE5TdGF0dXM7CisJVUxPTkcgRnJhbWVMZW47CisKKwlIRUFERVJfODAyXzExIEFjdEhkcjsKKworCS8vIGJ1aWxkIGFjdGlvbiBmcmFtZSBoZWFkZXIuCisJTWd0TWFjSGVhZGVySW5pdChwQWQsICZBY3RIZHIsIFNVQlRZUEVfQUNUSU9OLCAwLCBwREEsCisJCQkJCQlwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKworCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFZPSUQpJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIsIF9fRlVOQ1RJT05fXykpOworCQlyZXR1cm47CisJfQorCU5kaXNNb3ZlTWVtb3J5KHBPdXRCdWZmZXIsIChQQ0hBUikmQWN0SGRyLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCUZyYW1lTGVuID0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJSW5zZXJ0QWN0RmllbGQocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBDQVRFR09SWV9TUEVDVFJVTSwgU1BFQ19DSEFOTkVMX1NXSVRDSCk7CisKKwlJbnNlcnRDaFN3QW5uSUUocEFkLCAocE91dEJ1ZmZlciArIEZyYW1lTGVuKSwgJkZyYW1lTGVuLCBDaFN3TW9kZSwgTmV3Q2gsIDApOworCisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgQk9PTEVBTiBEZnNSZXF1aXJlbWVudENoZWNrKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVJTlQ4IENoYW5uZWwpCit7CisJQk9PTEVBTiBSZXN1bHQgPSBGQUxTRTsKKwlJTlQgaTsKKworCWRvCisJeworCQkvLyBjaGVjayBERlMgcHJvY2VkdXJlIGlzIHJ1bm5pbmcuCisJCS8vIG1ha2Ugc3VyZSBERlMgcHJvY2VkdXJlIHdvbid0IHN0YXJ0IHR3aWNlLgorCQlpZiAocEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkRNb2RlICE9IFJEX05PUk1BTF9NT0RFKQorCQl7CisJCQlSZXN1bHQgPSBGQUxTRTsKKwkJCWJyZWFrOworCQl9CisKKwkJLy8gY2hlY2sgdGhlIG5ldyBjaGFubmVsIGNhcnJpZWQgZnJvbSBDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1uZXQgaXMgdmFsaWQuCisJCWZvciAoaT0wOyBpPHBBZC0+Q2hhbm5lbExpc3ROdW07IGkrKykKKwkJeworCQkJaWYgKChDaGFubmVsID09IHBBZC0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbCkKKwkJCQkmJihwQWQtPkNoYW5uZWxMaXN0W2ldLlJlbWFpbmluZ1RpbWVGb3JVc2UgPT0gMCkpCisJCQl7CisJCQkJLy8gZm91bmQgcmFkYXIgc2lnbmFsIGluIHRoZSBjaGFubmVsLiB0aGUgY2hhbm5lbCBjYW4ndCB1c2UgYXQgbGVhc3QgZm9yIDMwIG1pbnV0ZXMuCisJCQkJcEFkLT5DaGFubmVsTGlzdFtpXS5SZW1haW5pbmdUaW1lRm9yVXNlID0gMTgwMDsvLzMwIG1pbiA9IDE4MDAgc2VjCisJCQkJUmVzdWx0ID0gVFJVRTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gd2hpbGUoRkFMU0UpOworCisJcmV0dXJuIFJlc3VsdDsKK30KKworVk9JRCBOb3RpZnlDaFN3QW5uVG9QZWVyQVBzKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwUkEsCisJSU4gUFVDSEFSIHBUQSwKKwlJTiBVSU5UOCBDaFN3TW9kZSwKKwlJTiBVSU5UOCBDaGFubmVsKQoreworI2lmZGVmIFdEU19TVVBQT1JUCisJaWYgKCEoKHBSQVswXSAmIDB4ZmYpID09IDB4ZmYpKSAvLyBpcyBwUkEgYSBicm9hZGNhc2UgYWRkcmVzcy4KKwl7CisJCUlOVCBpOworCQkvLyBpbmZvIG5laWdoYm9yIEFQcyB0aGF0IFJhZGFyIHNpZ25hbCBmb3VuZCB0aHJvZ2ggV0RTIGxpbmsuCisJCWZvciAoaSA9IDA7IGkgPCBNQVhfV0RTX0VOVFJZOyBpKyspCisJCXsKKwkJCWlmIChWYWxpZFdkc0VudHJ5KHBBZCwgaSkpCisJCQl7CisJCQkJUFVDSEFSIHBEQSA9IHBBZC0+V2RzVGFiLldkc0VudHJ5W2ldLlBlZXJXZHNBZGRyOworCisJCQkJLy8gREEgZXF1YWwgdG8gU0EuIGhhdmUgbm8gbmVjZXNzYXJ5IG9yaWduYWwgQVAgd2hpY2ggZm91bmQgUmFkYXIgc2lnbmFsLgorCQkJCWlmIChNQUNfQUREUl9FUVVBTChwVEEsIHBEQSkpCisJCQkJCWNvbnRpbnVlOworCisJCQkJLy8gc2VuZCBDaGFubmVsIFN3aXRjaCBBY3Rpb24gZnJhbWUgdG8gaW5mbyBOZWlnaGJybyBBUHMuCisJCQkJRW5xdWV1ZUNoU3dBbm4ocEFkLCBwREEsIENoU3dNb2RlLCBDaGFubmVsKTsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZiAvLyBXRFNfU1VQUE9SVCAvLworfQorCitzdGF0aWMgVk9JRCBTdGFydERGU1Byb2NlZHVyZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiBDaGFubmVsLAorCUlOIFVJTlQ4IENoU3dNb2RlKQoreworCS8vIHN0YXJ0IERGUyBwcm9jZWR1cmUKKwlwQWQtPkNvbW1vbkNmZy5DaGFubmVsID0gQ2hhbm5lbDsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlOX0NoYW5uZWxDaGVjayhwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSA9IFJEX1NXSVRDSElOR19NT0RFOworCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkNTQ291bnQgPSAwOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUNoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBhY3Rpb24gZnJhbWUgc2FuaXR5IGNoZWNrLgorCisJUGFyYW1ldHJzOgorCQkxLiBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKKwkJMi4gbWVzc2FnZSBsZW5ndGguCisJCTMuIENoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudCBpbmZvbWF0aW9uIGJ1ZmZlci4KKworCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKy8qCisgIENoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBJRS4KKyAgKy0tLS0rLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKworICB8IElEIHwgTGVuIHxDaCBTdyBNb2RlIHwgTmV3IENoIE51bSB8IENoIFN3IENudCB8CisgICstLS0tKy0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsKKyAgICAxICAgIDEgICAgICAgIDEgICAgICAgICAgIDEgICAgICAgICAgICAxCisqLworc3RhdGljIEJPT0xFQU4gUGVlckNoU3dBbm5TYW5pdHkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVk9JRCAqcE1zZywKKwlJTiBVTE9ORyBNc2dMZW4sCisJT1VUIFBDSF9TV19BTk5fSU5GTyBwQ2hTd0FubkluZm8pCit7CisJUEZSQU1FXzgwMl8xMSBGciA9IChQRlJBTUVfODAyXzExKXBNc2c7CisJUFVDSEFSIHBGcmFtZVB0ciA9IEZyLT5PY3RldDsKKwlCT09MRUFOIHJlc3VsdCA9IEZBTFNFOworCVBFSURfU1RSVUNUIGVpZF9wdHI7CisKKwkvLyBza2lwIDgwMi4xMSBoZWFkZXIuCisJTXNnTGVuIC09IHNpemVvZihIRUFERVJfODAyXzExKTsKKworCS8vIHNraXAgY2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLgorCXBGcmFtZVB0ciArPSAyOworCU1zZ0xlbiAtPSAyOworCisJaWYgKHBDaFN3QW5uSW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gcmVzdWx0OworCisJZWlkX3B0ciA9IChQRUlEX1NUUlVDVClwRnJhbWVQdHI7CisJd2hpbGUgKCgoVUNIQVIqKWVpZF9wdHIgKyBlaWRfcHRyLT5MZW4gKyAxKSA8ICgoUFVDSEFSKXBGcmFtZVB0ciArIE1zZ0xlbikpCisJeworCQlzd2l0Y2goZWlkX3B0ci0+RWlkKQorCQl7CisJCQljYXNlIElFX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVDoKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcENoU3dBbm5JbmZvLT5DaFN3TW9kZSwgZWlkX3B0ci0+T2N0ZXQsIDEpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQ2hTd0FubkluZm8tPkNoYW5uZWwsIGVpZF9wdHItPk9jdGV0ICsgMSwgMSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBDaFN3QW5uSW5mby0+Q2hTd0NudCwgZWlkX3B0ci0+T2N0ZXQgKyAyLCAxKTsKKworCQkJCXJlc3VsdCA9IFRSVUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKwkJZWlkX3B0ciA9IChQRUlEX1NUUlVDVCkoKFVDSEFSKillaWRfcHRyICsgMiArIGVpZF9wdHItPkxlbik7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlNZWFzdXJlbWVudCByZXF1ZXN0IGFjdGlvbiBmcmFtZSBzYW5pdHkgY2hlY2suCisKKwlQYXJhbWV0cnM6CisJCTEuIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCQkyLiBtZXNzYWdlIGxlbmd0aC4KKwkJMy4gTWVhc3VyZW1lbnQgcmVxdWVzdCBpbmZvbWF0aW9uIGJ1ZmZlci4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworc3RhdGljIEJPT0xFQU4gUGVlck1lYXN1cmVSZXFTYW5pdHkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVk9JRCAqcE1zZywKKwlJTiBVTE9ORyBNc2dMZW4sCisJT1VUIFBVSU5UOCBwRGlhbG9nVG9rZW4sCisJT1VUIFBNRUFTVVJFX1JFUV9JTkZPIHBNZWFzdXJlUmVxSW5mbykKK3sKKwlQRlJBTUVfODAyXzExIEZyID0gKFBGUkFNRV84MDJfMTEpcE1zZzsKKwlQVUNIQVIgcEZyYW1lUHRyID0gRnItPk9jdGV0OworCUJPT0xFQU4gcmVzdWx0ID0gRkFMU0U7CisJUEVJRF9TVFJVQ1QgZWlkX3B0cjsKKwlQVUNIQVIgcHRyOworCVVJTlQ2NCBNZWFzdXJlU3RhcnRUaW1lOworCVVJTlQxNiBNZWFzdXJlRHVyYXRpb247CisKKwkvLyBza2lwIDgwMi4xMSBoZWFkZXIuCisJTXNnTGVuIC09IHNpemVvZihIRUFERVJfODAyXzExKTsKKworCS8vIHNraXAgY2F0ZWdvcnkgYW5kIGFjdGlvbiBjb2RlLgorCXBGcmFtZVB0ciArPSAyOworCU1zZ0xlbiAtPSAyOworCisJaWYgKHBNZWFzdXJlUmVxSW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gcmVzdWx0OworCisJTmRpc01vdmVNZW1vcnkocERpYWxvZ1Rva2VuLCBwRnJhbWVQdHIsIDEpOworCXBGcmFtZVB0ciArPSAxOworCU1zZ0xlbiAtPSAxOworCisJZWlkX3B0ciA9IChQRUlEX1NUUlVDVClwRnJhbWVQdHI7CisJd2hpbGUgKCgoVUNIQVIqKWVpZF9wdHIgKyBlaWRfcHRyLT5MZW4gKyAxKSA8ICgoUFVDSEFSKXBGcmFtZVB0ciArIE1zZ0xlbikpCisJeworCQlzd2l0Y2goZWlkX3B0ci0+RWlkKQorCQl7CisJCQljYXNlIElFX01FQVNVUkVNRU5UX1JFUVVFU1Q6CisJCQkJTmRpc01vdmVNZW1vcnkoJnBNZWFzdXJlUmVxSW5mby0+VG9rZW4sIGVpZF9wdHItPk9jdGV0LCAxKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXFJbmZvLT5SZXFNb2RlLndvcmQsIGVpZF9wdHItPk9jdGV0ICsgMSwgMSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBNZWFzdXJlUmVxSW5mby0+UmVxVHlwZSwgZWlkX3B0ci0+T2N0ZXQgKyAyLCAxKTsKKwkJCQlwdHIgPSBlaWRfcHRyLT5PY3RldCArIDM7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBNZWFzdXJlUmVxSW5mby0+TWVhc3VyZVJlcS5DaE51bSwgcHRyLCAxKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmTWVhc3VyZVN0YXJ0VGltZSwgcHRyICsgMSwgOCk7CisJCQkJcE1lYXN1cmVSZXFJbmZvLT5NZWFzdXJlUmVxLk1lYXN1cmVTdGFydFRpbWUgPSBTV0FQNjQoTWVhc3VyZVN0YXJ0VGltZSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJk1lYXN1cmVEdXJhdGlvbiwgcHRyICsgOSwgMik7CisJCQkJcE1lYXN1cmVSZXFJbmZvLT5NZWFzdXJlUmVxLk1lYXN1cmVEdXJhdGlvbiA9IFNXQVAxNihNZWFzdXJlRHVyYXRpb24pOworCisJCQkJcmVzdWx0ID0gVFJVRTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCQllaWRfcHRyID0gKFBFSURfU1RSVUNUKSgoVUNIQVIqKWVpZF9wdHIgKyAyICsgZWlkX3B0ci0+TGVuKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCU1lYXN1cmVtZW50IHJlcG9ydCBhY3Rpb24gZnJhbWUgc2FuaXR5IGNoZWNrLgorCisJUGFyYW1ldHJzOgorCQkxLiBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKKwkJMi4gbWVzc2FnZSBsZW5ndGguCisJCTMuIE1lYXN1cmVtZW50IHJlcG9ydCBpbmZvbWF0aW9uIGJ1ZmZlci4KKwkJNC4gYmFzaWMgcmVwb3J0IGluZm9tYXRpb24gYnVmZmVyLgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKy8qCisgIE1lYXN1cmVtZW50IFJlcG9ydCBJRS4KKyAgKy0tLS0rLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCisgIHwgSUQgfCBMZW4gfCBUb2tlbiB8IFJlcG9ydCBNb2RlIHwgTWVhc3VyZSBUeXBlIHwgTWVhc3VyZSBSZXBvcnQgfAorICArLS0tLSstLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAxICAgICAxICAgICAgMSAgICAgICAgICAxICAgICAgICAgICAgIDEgICAgICAgICAgICB2YXJpYWJsZQorCisgIEJhc2ljIFJlcG9ydC4KKyAgKy0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tKworICB8IENoIE51bSB8IFN0YXJ0IFRpbWUgfCBEdXJhdGlvbiB8IE1hcCB8CisgICstLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLSsKKyAgICAgIDEgICAgICAgICAgOCAgICAgICAgICAgMiAgICAgICAgMQorCisgIE1hcCBGaWVsZCBCaXQgRm9ybWF0LgorICArLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworICB8IEJzcyB8IE9GRE0gUHJlYW1ibGUgfCBVbmlkZW50aWZpZWQgc2lnbmFsIHwgUmFkYXIgfCBVbm1lYXN1cmVkIHwgUmVzZXJ2ZWQgfAorICArLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworICAgICAwICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAzICAgICAgICAgNCAgICAgICAgICA1LTcKKyovCitzdGF0aWMgQk9PTEVBTiBQZWVyTWVhc3VyZVJlcG9ydFNhbml0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBWT0lEICpwTXNnLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVJTlQ4IHBEaWFsb2dUb2tlbiwKKwlPVVQgUE1FQVNVUkVfUkVQT1JUX0lORk8gcE1lYXN1cmVSZXBvcnRJbmZvLAorCU9VVCBQVUlOVDggcFJlcG9ydEJ1ZikKK3sKKwlQRlJBTUVfODAyXzExIEZyID0gKFBGUkFNRV84MDJfMTEpcE1zZzsKKwlQVUNIQVIgcEZyYW1lUHRyID0gRnItPk9jdGV0OworCUJPT0xFQU4gcmVzdWx0ID0gRkFMU0U7CisJUEVJRF9TVFJVQ1QgZWlkX3B0cjsKKwlQVUNIQVIgcHRyOworCisJLy8gc2tpcCA4MDIuMTEgaGVhZGVyLgorCU1zZ0xlbiAtPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwkvLyBza2lwIGNhdGVnb3J5IGFuZCBhY3Rpb24gY29kZS4KKwlwRnJhbWVQdHIgKz0gMjsKKwlNc2dMZW4gLT0gMjsKKworCWlmIChwTWVhc3VyZVJlcG9ydEluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCU5kaXNNb3ZlTWVtb3J5KHBEaWFsb2dUb2tlbiwgcEZyYW1lUHRyLCAxKTsKKwlwRnJhbWVQdHIgKz0gMTsKKwlNc2dMZW4gLT0gMTsKKworCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpcEZyYW1lUHRyOworCXdoaWxlICgoKFVDSEFSKillaWRfcHRyICsgZWlkX3B0ci0+TGVuICsgMSkgPCAoKFBVQ0hBUilwRnJhbWVQdHIgKyBNc2dMZW4pKQorCXsKKwkJc3dpdGNoKGVpZF9wdHItPkVpZCkKKwkJeworCQkJY2FzZSBJRV9NRUFTVVJFTUVOVF9SRVBPUlQ6CisJCQkJTmRpc01vdmVNZW1vcnkoJnBNZWFzdXJlUmVwb3J0SW5mby0+VG9rZW4sIGVpZF9wdHItPk9jdGV0LCAxKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcE1lYXN1cmVSZXBvcnRJbmZvLT5SZXBvcnRNb2RlLCBlaWRfcHRyLT5PY3RldCArIDEsIDEpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwTWVhc3VyZVJlcG9ydEluZm8tPlJlcG9ydFR5cGUsIGVpZF9wdHItPk9jdGV0ICsgMiwgMSk7CisJCQkJaWYgKHBNZWFzdXJlUmVwb3J0SW5mby0+UmVwb3J0VHlwZSA9PSBSTV9CQVNJQykKKwkJCQl7CisJCQkJCVBNRUFTVVJFX0JBU0lDX1JFUE9SVCBwUmVwb3J0ID0gKFBNRUFTVVJFX0JBU0lDX1JFUE9SVClwUmVwb3J0QnVmOworCQkJCQlwdHIgPSBlaWRfcHRyLT5PY3RldCArIDM7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5DaE51bSwgcHRyLCAxKTsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPk1lYXN1cmVTdGFydFRpbWUsIHB0ciArIDEsIDgpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWVhc3VyZUR1cmF0aW9uLCBwdHIgKyA5LCAyKTsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPk1hcCwgcHRyICsgMTEsIDEpOworCisJCQkJfQorCQkJCWVsc2UgaWYgKHBNZWFzdXJlUmVwb3J0SW5mby0+UmVwb3J0VHlwZSA9PSBSTV9DQ0EpCisJCQkJeworCQkJCQlQTUVBU1VSRV9DQ0FfUkVQT1JUIHBSZXBvcnQgPSAoUE1FQVNVUkVfQ0NBX1JFUE9SVClwUmVwb3J0QnVmOworCQkJCQlwdHIgPSBlaWRfcHRyLT5PY3RldCArIDM7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5DaE51bSwgcHRyLCAxKTsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPk1lYXN1cmVTdGFydFRpbWUsIHB0ciArIDEsIDgpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWVhc3VyZUR1cmF0aW9uLCBwdHIgKyA5LCAyKTsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPkNDQV9CdXN5X0ZyYWN0aW9uLCBwdHIgKyAxMSwgMSk7CisKKwkJCQl9CisJCQkJZWxzZSBpZiAocE1lYXN1cmVSZXBvcnRJbmZvLT5SZXBvcnRUeXBlID09IFJNX1JQSV9ISVNUT0dSQU0pCisJCQkJeworCQkJCQlQTUVBU1VSRV9SUElfUkVQT1JUIHBSZXBvcnQgPSAoUE1FQVNVUkVfUlBJX1JFUE9SVClwUmVwb3J0QnVmOworCQkJCQlwdHIgPSBlaWRfcHRyLT5PY3RldCArIDM7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwUmVwb3J0LT5DaE51bSwgcHRyLCAxKTsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPk1lYXN1cmVTdGFydFRpbWUsIHB0ciArIDEsIDgpOworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcFJlcG9ydC0+TWVhc3VyZUR1cmF0aW9uLCBwdHIgKyA5LCAyKTsKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBSZXBvcnQtPlJQSV9EZW5zaXR5LCBwdHIgKyAxMSwgOCk7CisJCQkJfQorCQkJCXJlc3VsdCA9IFRSVUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKwkJZWlkX3B0ciA9IChQRUlEX1NUUlVDVCkoKFVDSEFSKillaWRfcHRyICsgMiArIGVpZF9wdHItPkxlbik7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUUEMgUmVxdWVzdCBhY3Rpb24gZnJhbWUgc2FuaXR5IGNoZWNrLgorCisJUGFyYW1ldHJzOgorCQkxLiBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKKwkJMi4gbWVzc2FnZSBsZW5ndGguCisJCTMuIERpYWxvZyBUb2tlbi4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworc3RhdGljIEJPT0xFQU4gUGVlclRwY1JlcVNhbml0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBWT0lEICpwTXNnLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVJTlQ4IHBEaWFsb2dUb2tlbikKK3sKKwlQRlJBTUVfODAyXzExIEZyID0gKFBGUkFNRV84MDJfMTEpcE1zZzsKKwlQVUNIQVIgcEZyYW1lUHRyID0gRnItPk9jdGV0OworCUJPT0xFQU4gcmVzdWx0ID0gRkFMU0U7CisJUEVJRF9TVFJVQ1QgZWlkX3B0cjsKKworCU1zZ0xlbiAtPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwkvLyBza2lwIGNhdGVnb3J5IGFuZCBhY3Rpb24gY29kZS4KKwlwRnJhbWVQdHIgKz0gMjsKKwlNc2dMZW4gLT0gMjsKKworCWlmIChwRGlhbG9nVG9rZW4gPT0gTlVMTCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCU5kaXNNb3ZlTWVtb3J5KHBEaWFsb2dUb2tlbiwgcEZyYW1lUHRyLCAxKTsKKwlwRnJhbWVQdHIgKz0gMTsKKwlNc2dMZW4gLT0gMTsKKworCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpcEZyYW1lUHRyOworCXdoaWxlICgoKFVDSEFSKillaWRfcHRyICsgZWlkX3B0ci0+TGVuICsgMSkgPCAoKFBVQ0hBUilwRnJhbWVQdHIgKyBNc2dMZW4pKQorCXsKKwkJc3dpdGNoKGVpZF9wdHItPkVpZCkKKwkJeworCQkJY2FzZSBJRV9UUENfUkVRVUVTVDoKKwkJCQlyZXN1bHQgPSBUUlVFOworICAgICAgICAgICAgICAgIGJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQl9CisJCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpKChVQ0hBUiopZWlkX3B0ciArIDIgKyBlaWRfcHRyLT5MZW4pOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVFBDIFJlcG9ydCBhY3Rpb24gZnJhbWUgc2FuaXR5IGNoZWNrLgorCisJUGFyYW1ldHJzOgorCQkxLiBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKKwkJMi4gbWVzc2FnZSBsZW5ndGguCisJCTMuIERpYWxvZyBUb2tlbi4KKwkJNC4gVFBDIFJlcG9ydCBJRS4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworc3RhdGljIEJPT0xFQU4gUGVlclRwY1JlcFNhbml0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBWT0lEICpwTXNnLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVJTlQ4IHBEaWFsb2dUb2tlbiwKKwlPVVQgUFRQQ19SRVBPUlRfSU5GTyBwVHBjUmVwSW5mbykKK3sKKwlQRlJBTUVfODAyXzExIEZyID0gKFBGUkFNRV84MDJfMTEpcE1zZzsKKwlQVUNIQVIgcEZyYW1lUHRyID0gRnItPk9jdGV0OworCUJPT0xFQU4gcmVzdWx0ID0gRkFMU0U7CisJUEVJRF9TVFJVQ1QgZWlkX3B0cjsKKworCU1zZ0xlbiAtPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisKKwkvLyBza2lwIGNhdGVnb3J5IGFuZCBhY3Rpb24gY29kZS4KKwlwRnJhbWVQdHIgKz0gMjsKKwlNc2dMZW4gLT0gMjsKKworCWlmIChwRGlhbG9nVG9rZW4gPT0gTlVMTCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCU5kaXNNb3ZlTWVtb3J5KHBEaWFsb2dUb2tlbiwgcEZyYW1lUHRyLCAxKTsKKwlwRnJhbWVQdHIgKz0gMTsKKwlNc2dMZW4gLT0gMTsKKworCWVpZF9wdHIgPSAoUEVJRF9TVFJVQ1QpcEZyYW1lUHRyOworCXdoaWxlICgoKFVDSEFSKillaWRfcHRyICsgZWlkX3B0ci0+TGVuICsgMSkgPCAoKFBVQ0hBUilwRnJhbWVQdHIgKyBNc2dMZW4pKQorCXsKKwkJc3dpdGNoKGVpZF9wdHItPkVpZCkKKwkJeworCQkJY2FzZSBJRV9UUENfUkVQT1JUOgorCQkJCU5kaXNNb3ZlTWVtb3J5KCZwVHBjUmVwSW5mby0+VHhQd3IsIGVpZF9wdHItPk9jdGV0LCAxKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcFRwY1JlcEluZm8tPkxpbmtNYXJnaW4sIGVpZF9wdHItPk9jdGV0ICsgMSwgMSk7CisJCQkJcmVzdWx0ID0gVFJVRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJfQorCQllaWRfcHRyID0gKFBFSURfU1RSVUNUKSgoVUNIQVIqKWVpZF9wdHIgKyAyICsgZWlkX3B0ci0+TGVuKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUNoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCBhY3Rpb24gZnJhbWUgaGFuZGxlci4KKworCVBhcmFtZXRyczoKKwkJRWxtZSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgVk9JRCBQZWVyQ2hTd0FubkFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJQ0hfU1dfQU5OX0lORk8gQ2hTd0FubkluZm87CisJUEZSQU1FXzgwMl8xMSBwRnIgPSAoUEZSQU1FXzgwMl8xMSlFbGVtLT5Nc2c7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJVUNIQVIgaW5kZXggPSAwLCBDaGFubmVsID0gMCwgTmV3Q2hhbm5lbCA9IDA7CisJVUxPTkcgQnNzaWR4ID0gMDsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCU5kaXNaZXJvTWVtb3J5KCZDaFN3QW5uSW5mbywgc2l6ZW9mKENIX1NXX0FOTl9JTkZPKSk7CisJaWYgKCEgUGVlckNoU3dBbm5TYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgJkNoU3dBbm5JbmZvKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkludmFsaWQgQ2hhbm5lbCBTd2l0Y2ggQWN0aW9uIEZyYW1lLlxuIikpOworCQlyZXR1cm47CisJfQorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKwl7CisJCUJzc2lkeCA9IEJzc1RhYmxlU2VhcmNoKCZwQWQtPlNjYW5UYWIsIHBGci0+SGRyLkFkZHIzLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJaWYgKEJzc2lkeCA9PSBCU1NfTk9UX0ZPVU5EKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQ2hTd0FubkFjdGlvbiAtIEJzc2lkeCBpcyBub3QgZm91bmRcbiIpKTsKKwkJCXJldHVybjsKKwkJfQorCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlxuKioqKkJzc2lkeCBpcyAlZCwgQ2hhbm5lbCA9ICVkXG4iLCBpbmRleCwgcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uQ2hhbm5lbCkpOworCQloZXhfZHVtcCgiU1NJRCIscEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uQnNzaWQgLDYpOworCisJCUNoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCQlOZXdDaGFubmVsID0gQ2hTd0FubkluZm8uQ2hhbm5lbDsKKworCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIID09IDEpICYmIChOZXdDaGFubmVsICE9IDApICYmIChDaGFubmVsICE9IE5ld0NoYW5uZWwpKQorCQl7CisJCQkvLyBTd2l0Y2hpbmcgdG8gY2hhbm5lbCAxIGNhbiBwcmV2ZW50IGZyb20gcmVzY2FubmluZyB0aGUgY3VycmVudCBjaGFubmVsIGltbWVkaWF0ZWx5IChieSBhdXRvIHJlY29ubmVjdGlvbikuCisJCQkvLyBJbiBhZGRpdGlvbiwgY2xlYXIgdGhlIE1MTUUgcXVldWUgYW5kIHRoZSBzY2FuIHRhYmxlIHRvIGRpc2NhcmQgdGhlIFJYIHBhY2tldHMgYW5kIHByZXZpb3VzIHNjYW5uaW5nIHJlc3VsdHMuCisJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIDEsIEZBTFNFKTsKKwkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIDEpOworCQkgICAgTGlua0Rvd24ocEFkLCBGQUxTRSk7CisJCQlNbG1lUXVldWVJbml0KCZwQWQtPk1sbWUuUXVldWUpOworCQkJQnNzVGFibGVJbml0KCZwQWQtPlNjYW5UYWIpOworCQkgICAgUlRNUHVzZWNEZWxheSgxMDAwMDAwKTsJCS8vIHVzZSBkZWxheSB0byBwcmV2ZW50IFNUQSBkbyByZWFzc29jCisKKwkJCS8vIGNoYW5uZWwgc2FuaXR5IGNoZWNrCisJCQlmb3IgKGluZGV4ID0gMCA7IGluZGV4IDwgcEFkLT5DaGFubmVsTGlzdE51bTsgaW5kZXgrKykKKwkJCXsKKwkJCQlpZiAocEFkLT5DaGFubmVsTGlzdFtpbmRleF0uQ2hhbm5lbCA9PSBOZXdDaGFubmVsKQorCQkJCXsKKwkJCQkJcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uQ2hhbm5lbCA9IE5ld0NoYW5uZWw7CisJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSBOZXdDaGFubmVsOworCQkJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiYmJiYmJiYmJiYmJiYmJiZQZWVyQ2hTd0FubkFjdGlvbiAtIFNUQSByZWNlaXZlIGNoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudCBJRSAoTmV3IENoYW5uZWwgPSVkKVxuIiwgTmV3Q2hhbm5lbCkpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChpbmRleCA+PSBwQWQtPkNoYW5uZWxMaXN0TnVtKQorCQkJeworCQkJCURCR1BSSU5UX0VSUigoIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmUGVlckNoU3dBbm5BY3Rpb24oY2FuIG5vdCBmaW5kIE5ldyBDaGFubmVsPSVkIGluIENoYW5uZWxMaXN0WyVkXVxuIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgcEFkLT5DaGFubmVsTGlzdE51bSkpOworCQkJfQorCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJcmV0dXJuOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJTWVhc3VyZW1lbnQgUmVxdWVzdCBhY3Rpb24gZnJhbWUgaGFuZGxlci4KKworCVBhcmFtZXRyczoKKwkJRWxtZSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgVk9JRCBQZWVyTWVhc3VyZVJlcUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJUEZSQU1FXzgwMl8xMSBwRnIgPSAoUEZSQU1FXzgwMl8xMSlFbGVtLT5Nc2c7CisJVUlOVDggRGlhbG9nVG9rZW47CisJTUVBU1VSRV9SRVFfSU5GTyBNZWFzdXJlUmVxSW5mbzsKKwlNRUFTVVJFX1JFUE9SVF9NT0RFIFJlcG9ydE1vZGU7CisKKwlpZihQZWVyTWVhc3VyZVJlcVNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCAmRGlhbG9nVG9rZW4sICZNZWFzdXJlUmVxSW5mbykpCisJeworCQlSZXBvcnRNb2RlLndvcmQgPSAwOworCQlSZXBvcnRNb2RlLmZpZWxkLkluY2FwYWJsZSA9IDE7CisJCUVucXVldWVNZWFzdXJlbWVudFJlcChwQWQsIHBGci0+SGRyLkFkZHIyLCBEaWFsb2dUb2tlbiwgTWVhc3VyZVJlcUluZm8uVG9rZW4sIFJlcG9ydE1vZGUud29yZCwgTWVhc3VyZVJlcUluZm8uUmVxVHlwZSwgMCwgTlVMTCk7CisJfQorCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCU1lYXN1cmVtZW50IFJlcG9ydCBhY3Rpb24gZnJhbWUgaGFuZGxlci4KKworCVBhcmFtZXRyczoKKwkJRWxtZSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitzdGF0aWMgVk9JRCBQZWVyTWVhc3VyZVJlcG9ydEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJTUVBU1VSRV9SRVBPUlRfSU5GTyBNZWFzdXJlUmVwb3J0SW5mbzsKKwlQRlJBTUVfODAyXzExIHBGciA9IChQRlJBTUVfODAyXzExKUVsZW0tPk1zZzsKKwlVSU5UOCBEaWFsb2dUb2tlbjsKKwlQVUlOVDggcE1lYXN1cmVSZXBvcnRJbmZvOworCisvLwlpZiAocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggIT0gVFJVRSkKKy8vCQlyZXR1cm47CisKKwlpZiAoKHBNZWFzdXJlUmVwb3J0SW5mbyA9IGttYWxsb2Moc2l6ZW9mKE1FQVNVUkVfUlBJX1JFUE9SVCksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgdW5hYmxlIHRvIGFsbG9jIG1lbW9yeSBmb3IgbWVhc3VyZSByZXBvcnQgYnVmZmVyIChzaXplPSVkKS5cbiIsIF9fRlVOQ1RJT05fXywgc2l6ZW9mKE1FQVNVUkVfUlBJX1JFUE9SVCkpKTsKKwkJcmV0dXJuOworCX0KKworCU5kaXNaZXJvTWVtb3J5KCZNZWFzdXJlUmVwb3J0SW5mbywgc2l6ZW9mKE1FQVNVUkVfUkVQT1JUX0lORk8pKTsKKwlOZGlzWmVyb01lbW9yeShwTWVhc3VyZVJlcG9ydEluZm8sIHNpemVvZihNRUFTVVJFX1JQSV9SRVBPUlQpKTsKKwlpZiAoUGVlck1lYXN1cmVSZXBvcnRTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgJkRpYWxvZ1Rva2VuLCAmTWVhc3VyZVJlcG9ydEluZm8sIHBNZWFzdXJlUmVwb3J0SW5mbykpCisJeworCQlkbyB7CisJCQlQTUVBU1VSRV9SRVFfRU5UUlkgcEVudHJ5ID0gTlVMTDsKKworCQkJLy8gTm90IGEgYXV0b25vbW91cyBtZWFzdXJlIHJlcG9ydC4KKwkJCS8vIGNoZWNrIHRoZSBkaWFsb2cgdG9rZW4gZmllbGQuIGRyb3AgaXQgaWYgdGhlIGRpYWxvZyB0b2tlbiBkb2Vzbid0IG1hdGNoLgorCQkJaWYgKChEaWFsb2dUb2tlbiAhPSAwKQorCQkJCSYmICgocEVudHJ5ID0gTWVhc3VyZVJlcUxvb2tVcChwQWQsIERpYWxvZ1Rva2VuKSkgPT0gTlVMTCkpCisJCQkJYnJlYWs7CisKKwkJCWlmIChwRW50cnkgIT0gTlVMTCkKKwkJCQlNZWFzdXJlUmVxRGVsZXRlKHBBZCwgcEVudHJ5LT5EaWFsb2dUb2tlbik7CisKKwkJCWlmIChNZWFzdXJlUmVwb3J0SW5mby5SZXBvcnRUeXBlID09IFJNX0JBU0lDKQorCQkJeworCQkJCVBNRUFTVVJFX0JBU0lDX1JFUE9SVCBwQmFzaWNSZXBvcnQgPSAoUE1FQVNVUkVfQkFTSUNfUkVQT1JUKXBNZWFzdXJlUmVwb3J0SW5mbzsKKwkJCQlpZiAoKHBCYXNpY1JlcG9ydC0+TWFwLmZpZWxkLlJhZGFyKQorCQkJCQkmJiAoRGZzUmVxdWlyZW1lbnRDaGVjayhwQWQsIHBCYXNpY1JlcG9ydC0+Q2hOdW0pID09IFRSVUUpKQorCQkJCXsKKwkJCQkJTm90aWZ5Q2hTd0FublRvUGVlckFQcyhwQWQsIHBGci0+SGRyLkFkZHIxLCBwRnItPkhkci5BZGRyMiwgMSwgcEJhc2ljUmVwb3J0LT5DaE51bSk7CisJCQkJCVN0YXJ0REZTUHJvY2VkdXJlKHBBZCwgcEJhc2ljUmVwb3J0LT5DaE51bSwgMSk7CisJCQkJfQorCQkJfQorCQl9IHdoaWxlIChGQUxTRSk7CisJfQorCWVsc2UKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSW52YWxpZCBNZWFzdXJlbWVudCBSZXBvcnQgRnJhbWUuXG4iKSk7CisKKwlrZnJlZShwTWVhc3VyZVJlcG9ydEluZm8pOworCisJcmV0dXJuOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVRQQyBSZXF1ZXN0IGFjdGlvbiBmcmFtZSBoYW5kbGVyLgorCisJUGFyYW1ldHJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIFBlZXJUcGNSZXFBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBGUkFNRV84MDJfMTEgcEZyID0gKFBGUkFNRV84MDJfMTEpRWxlbS0+TXNnOworCVBVQ0hBUiBwRnJhbWVQdHIgPSBwRnItPk9jdGV0OworCVVJTlQ4IERpYWxvZ1Rva2VuOworCVVJTlQ4IFR4UHdyID0gR2V0Q3VyVHhQd3IocEFkLCBFbGVtLT5XY2lkKTsKKwlVSU5UOCBMaW5rTWFyZ2luID0gMDsKKwlDSEFSIFJlYWxSc3NpOworCisJLy8gbGluayBtYXJnaW46IFJhdGlvIG9mIHRoZSByZWNlaXZlZCBzaWduYWwgcG93ZXIgdG8gdGhlIG1pbmltdW0gZGVzaXJlZCBieSB0aGUgc3RhdGlvbiAoU1RBKS4gVGhlCisJLy8JCQkJU1RBIG1heSBpbmNvcnBvcmF0ZSByYXRlIGluZm9ybWF0aW9uIGFuZCBjaGFubmVsIGNvbmRpdGlvbnMsIGluY2x1ZGluZyBpbnRlcmZlcmVuY2UsIGludG8gaXRzIGNvbXB1dGF0aW9uCisJLy8JCQkJb2YgbGluayBtYXJnaW4uCisKKwlSZWFsUnNzaSA9IFJUTVBNYXhSc3NpKHBBZCwgQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kwLCBSU1NJXzApLAorCQkJCQkJCQlDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTEsIFJTU0lfMSksCisJCQkJCQkJCUNvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMiwgUlNTSV8yKSk7CisKKwkvLyBza2lwIENhdGVnb3J5IGFuZCBhY3Rpb24gY29kZS4KKwlwRnJhbWVQdHIgKz0gMjsKKworCS8vIERpYWxvZyB0b2tlbi4KKwlOZGlzTW92ZU1lbW9yeSgmRGlhbG9nVG9rZW4sIHBGcmFtZVB0ciwgMSk7CisKKwlMaW5rTWFyZ2luID0gKFJlYWxSc3NpIC8gTUlOX1JDVl9QV1IpOworCWlmIChQZWVyVHBjUmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sICZEaWFsb2dUb2tlbikpCisJCUVucXVldWVUUENSZXAocEFkLCBwRnItPkhkci5BZGRyMiwgRGlhbG9nVG9rZW4sIFR4UHdyLCBMaW5rTWFyZ2luKTsKKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlUUEMgUmVwb3J0IGFjdGlvbiBmcmFtZSBoYW5kbGVyLgorCisJUGFyYW1ldHJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK3N0YXRpYyBWT0lEIFBlZXJUcGNSZXBBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVJTlQ4IERpYWxvZ1Rva2VuOworCVRQQ19SRVBPUlRfSU5GTyBUcGNSZXBJbmZvOworCVBUUENfUkVRX0VOVFJZIHBFbnRyeSA9IE5VTEw7CisKKwlOZGlzWmVyb01lbW9yeSgmVHBjUmVwSW5mbywgc2l6ZW9mKFRQQ19SRVBPUlRfSU5GTykpOworCWlmIChQZWVyVHBjUmVwU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sICZEaWFsb2dUb2tlbiwgJlRwY1JlcEluZm8pKQorCXsKKwkJaWYgKChwRW50cnkgPSBUcGNSZXFMb29rVXAocEFkLCBEaWFsb2dUb2tlbikpICE9IE5VTEwpCisJCXsKKwkJCVRwY1JlcURlbGV0ZShwQWQsIHBFbnRyeS0+RGlhbG9nVG9rZW4pOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6IERpYWxvZ1Rva2VuPSV4LCBUeFB3cj0lZCwgTGlua01hcmdpbj0lZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIERpYWxvZ1Rva2VuLCBUcGNSZXBJbmZvLlR4UHdyLCBUcGNSZXBJbmZvLkxpbmtNYXJnaW4pKTsKKwkJfQorCX0KKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlTcGVjdHJ1biBhY3Rpb24gZnJhbWVzIEhhbmRsZXIgc3VjaCBhcyBjaGFubmVsIHN3aXRjaCBhbm5vdWNlbWVudCwKKwkJbWVhc3VyZW1lbnQgcmVwb3J0LCBtZWFzdXJlbWVudCByZXF1ZXN0IGFjdGlvbnMgZnJhbWVzLgorCisJUGFyYW1ldHJzOgorCQlFbG1lIC0gTUxNRSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJlY2VpdmVkIGZyYW1lCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlclNwZWN0cnVtQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKworCVVDSEFSCUFjdGlvbiA9IEVsZW0tPk1zZ1tMRU5HVEhfODAyXzExKzFdOworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIICE9IFRSVUUpCisJCXJldHVybjsKKworCXN3aXRjaChBY3Rpb24pCisJeworCQljYXNlIFNQRUNfTVJROgorCQkJLy8gY3VycmVudCBydDI4NjAgdW5hYmxlIGRvIHN1Y2ggbWVhc3VyZSBzcGVjaWZpZWQgaW4gTWVhc3VyZW1lbnQgUmVxdWVzdC4KKwkJCS8vIHJlamVjdCBhbGwgbWVhc3VyZW1lbnQgcmVxdWVzdC4KKwkJCVBlZXJNZWFzdXJlUmVxQWN0aW9uKHBBZCwgRWxlbSk7CisJCQlicmVhazsKKworCQljYXNlIFNQRUNfTVJQOgorCQkJUGVlck1lYXN1cmVSZXBvcnRBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFQ19UUENSUToKKwkJCVBlZXJUcGNSZXFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFQ19UUENSUDoKKwkJCVBlZXJUcGNSZXBBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1BFQ19DSEFOTkVMX1NXSVRDSDoKK3sKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJCQkJU0VDX0NIQV9PRkZTRVRfSUUJU2Vjb25kYXJ5OworCQkJCUNIQV9TV0lUQ0hfQU5OT1VOQ0VfSUUJQ2hhbm5lbFN3aXRjaDsKKworCQkJCS8vIDgwMi4xMWggb25seSBoYXMgQ2hhbm5lbCBTd2l0Y2ggQW5ub3VuY2VtZW50IElFLgorCQkJCVJUTVBNb3ZlTWVtb3J5KCZDaGFubmVsU3dpdGNoLCAmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErNF0sIHNpemVvZiAoQ0hBX1NXSVRDSF9BTk5PVU5DRV9JRSkpOworCisJCQkJLy8gODAyLjExbiBEMy4wMyBhZGRzIHNlY29uZGFyeSBjaGFubmVsIG9mZnNldCBlbGVtZW50IGluIHRoZSBlbmQuCisJCQkJaWYgKEVsZW0tPk1zZ0xlbiA9PSAgKExFTkdUSF84MDJfMTEgKyAyICsgc2l6ZW9mIChDSEFfU1dJVENIX0FOTk9VTkNFX0lFKSArIHNpemVvZiAoU0VDX0NIQV9PRkZTRVRfSUUpKSkKKwkJCQl7CisJCQkJCVJUTVBNb3ZlTWVtb3J5KCZTZWNvbmRhcnksICZFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSs5XSwgc2l6ZW9mIChTRUNfQ0hBX09GRlNFVF9JRSkpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlTZWNvbmRhcnkuU2Vjb25kYXJ5Q2hhbm5lbE9mZnNldCA9IDA7CisJCQkJfQorCisJCQkJaWYgKChFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSsyXSA9PSBJRV9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRU1FTlQpICYmIChFbGVtLT5Nc2dbTEVOR1RIXzgwMl8xMSszXSA9PSAzKSkKKwkJCQl7CisJCQkJCUNoYW5uZWxTd2l0Y2hBY3Rpb24ocEFkLCBFbGVtLT5XY2lkLCBDaGFubmVsU3dpdGNoLk5ld0NoYW5uZWwsIFNlY29uZGFyeS5TZWNvbmRhcnlDaGFubmVsT2Zmc2V0KTsKKwkJCQl9CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworfQorCQkJUGVlckNoU3dBbm5BY3Rpb24ocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJUGFyYW1ldHJzOgorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitJTlQgU2V0X01lYXN1cmVSZXFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUlOVCBBaWQgPSAxOworCVVJTlQgQXJnSWR4OworCVBVQ0hBUiB0aGlzQ2hhcjsKKworCU1FQVNVUkVfUkVRX01PREUgTWVhc3VyZVJlcU1vZGU7CisJVUlOVDggTWVhc3VyZVJlcVRva2VuID0gUmFuZG9tQnl0ZShwQWQpOworCVVJTlQ4IE1lYXN1cmVSZXFUeXBlID0gUk1fQkFTSUM7CisJVUlOVDggTWVhc3VyZUNoID0gMTsKKworCUFyZ0lkeCA9IDE7CisJd2hpbGUgKCh0aGlzQ2hhciA9IHN0cnNlcCgoY2hhciAqKikmYXJnLCAiLSIpKSAhPSBOVUxMKQorCXsKKwkJc3dpdGNoKEFyZ0lkeCkKKwkJeworCQkJY2FzZSAxOgkvLyBBaWQuCisJCQkJQWlkID0gc2ltcGxlX3N0cnRvbCh0aGlzQ2hhciwgMCwgMTYpOworCQkJCWJyZWFrOworCisJCQljYXNlIDI6IC8vIE1lYXN1cmVtZW50IFJlcXVlc3QgVHlwZS4KKwkJCQlNZWFzdXJlUmVxVHlwZSA9IHNpbXBsZV9zdHJ0b2wodGhpc0NoYXIsIDAsIDE2KTsKKwkJCQlpZiAoTWVhc3VyZVJlcVR5cGUgPiAzKQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHVua25vdyBNZWFzdXJlUmVxVHlwZSglZClcbiIsIF9fRlVOQ1RJT05fXywgTWVhc3VyZVJlcVR5cGUpKTsKKwkJCQkJcmV0dXJuIFRSVUU7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIDM6IC8vIE1lYXN1cmVtZW50IGNoYW5uZWwuCisJCQkJTWVhc3VyZUNoID0gc2ltcGxlX3N0cnRvbCh0aGlzQ2hhciwgMCwgMTYpOworCQkJCWJyZWFrOworCQl9CisJCUFyZ0lkeCsrOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpBaWQgPSAlZCwgTWVhc3VyZVJlcVR5cGU9JWQgTWVhc3VyZUNoPSVkXG4iLCBfX0ZVTkNUSU9OX18sIEFpZCwgTWVhc3VyZVJlcVR5cGUsIE1lYXN1cmVDaCkpOworCWlmICghVkFMSURfV0NJRChBaWQpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXM6IHVua25vdyBzdGEgb2YgQWlkKCVkKVxuIiwgX19GVU5DVElPTl9fLCBBaWQpKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJTWVhc3VyZVJlcU1vZGUud29yZCA9IDA7CisJTWVhc3VyZVJlcU1vZGUuZmllbGQuRW5hYmxlID0gMTsKKworCU1lYXN1cmVSZXFJbnNlcnQocEFkLCBNZWFzdXJlUmVxVG9rZW4pOworCisJRW5xdWV1ZU1lYXN1cmVtZW50UmVxKHBBZCwgcEFkLT5NYWNUYWIuQ29udGVudFtBaWRdLkFkZHIsCisJCU1lYXN1cmVSZXFUb2tlbiwgTWVhc3VyZVJlcU1vZGUud29yZCwgTWVhc3VyZVJlcVR5cGUsIE1lYXN1cmVDaCwgMjAwMCk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworSU5UIFNldF9UcGNSZXFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUlOVCBBaWQ7CisKKwlVSU5UOCBUcGNSZXFUb2tlbiA9IFJhbmRvbUJ5dGUocEFkKTsKKworCUFpZCA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxNik7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6QWlkID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgQWlkKSk7CisJaWYgKCFWQUxJRF9XQ0lEKEFpZCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczogdW5rbm93IHN0YSBvZiBBaWQoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIEFpZCkpOworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlUcGNSZXFJbnNlcnQocEFkLCBUcGNSZXFUb2tlbik7CisKKwlFbnF1ZXVlVFBDUmVxKHBBZCwgcEFkLT5NYWNUYWIuQ29udGVudFtBaWRdLkFkZHIsIFRwY1JlcVRva2VuKTsKKworCXJldHVybiBUUlVFOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2Rmcy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9kZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTJhNjM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9kZnMuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKyAgICBkZnMuaAorCisgICAgQWJzdHJhY3Q6CisgICAgU3VwcG9ydCBERlMgZnVuY3Rpb24uCisKKyAgICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIFdobyAgICAgICBXaGVuICAgICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tICAtLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEZvbmNoaSAgICAwMy0xMi0yMDA3ICAgICAgY3JlYXRlZAorKi8KKworI2RlZmluZSBSQURBUl9QVUxTRSAxCisjZGVmaW5lIFJBREFSX1dJRFRIIDIKKworI2RlZmluZSBXSURUSF9SRF9JRExFIDAKKyNkZWZpbmUgV0lEVEhfUkRfQ0hFQ0sgMQorCisKK1ZPSUQgQmJwUmFkYXJEZXRlY3Rpb25TdGFydCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgQmJwUmFkYXJEZXRlY3Rpb25TdG9wKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBSYWRhckRldGVjdGlvblN0YXJ0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIEJPT0xFQU4gQ1RTX1Byb3RlY3QsCisJSU4gVUlOVDggQ1RTUGVyaW9kKTsKKworVk9JRCBSYWRhckRldGVjdGlvblN0b3AoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIFJhZGFyRGV0ZWN0UGVyaW9kaWMoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpOworCisKK0JPT0xFQU4gUmFkYXJDaGFubmVsQ2hlY2soCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUNIQVIJCQlDaCk7CisKK1VMT05HIEphcFJhZGFyVHlwZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1VMT05HIFJUTVBCYnBSZWFkUmFkYXJEdXJhdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKK1VMT05HIFJUTVBSZWFkUmFkYXJEdXJhdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUlRNUENsZWFuUmFkYXJEdXJhdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUlRNUFByZXBhcmVSRENUU0ZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBEQSwKKwlJTglVTE9ORwkJCUR1cmF0aW9uLAorCUlOICBVQ0hBUiAgICAgICAgICAgUlRTUmF0ZSwKKwlJTiAgVUxPTkcgICAgICAgICAgIENUU0Jhc2VBZGRyLAorCUlOICBVQ0hBUgkJCUZyYW1lR2FwKTsKKworVk9JRCBSVE1QUHJlcGFyZVJhZGFyRGV0ZWN0UGFyYW1zKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworCitJTlQgU2V0X0NoTW92aW5nVGltZV9Qcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBhcmcpOworCitJTlQgU2V0X0xvbmdQdWxzZVJhZGFyVGhfUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgYXJnKTsKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2Zpcm13YXJlLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2Zpcm13YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA3NzgzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvZmlybXdhcmUuaApAQCAtMCwwICsxLDU1OCBAQAorLyoKKyBDb3B5cmlnaHQgKGMpIDIwMDcsIFJhbGluayBUZWNobm9sb2d5IENvcnBvcmF0aW9uCisgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworIFJlZGlzdHJpYnV0aW9uLiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBiaW5hcnkgZm9ybSwgd2l0aG91dAorIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyBtZXQ6CisKKyAJKiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZQorIAlmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgCXByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAJKiBOZWl0aGVyIHRoZSBuYW1lIG9mIFJhbGluayBUZWNobm9sb2d5IENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgCXN1cHBsaWVycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAJc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgCSogTm8gcmV2ZXJzZSBlbmdpbmVlcmluZywgZGVjb21waWxhdGlvbiwgb3IgZGlzYXNzZW1ibHkgb2YgdGhpcyBzb2Z0d2FyZQorIAlpcyBwZXJtaXR0ZWQuCisKKyBMaW1pdGVkIHBhdGVudCBsaWNlbnNlLiBSYWxpbmsgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBncmFudHMgYSB3b3JsZC13aWRlLAorIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlIHVuZGVyIHBhdGVudHMgaXQgbm93IG9yIGhlcmVhZnRlcgorIG93bnMgb3IgY29udHJvbHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIGltcG9ydCwgb2ZmZXIgdG8gc2VsbCBhbmQKKyBzZWxsICgiVXRpbGl6ZSIpIHRoaXMgc29mdHdhcmUsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueQorIHN1Y2ggcGF0ZW50IGlzIG5lY2Vzc2FyeSB0byBVdGlsaXplIHRoZSBzb2Z0d2FyZSBhbG9uZSwgb3IgaW4KKyBjb21iaW5hdGlvbiB3aXRoIGFuIG9wZXJhdGluZyBzeXN0ZW0gbGljZW5zZWQgdW5kZXIgYW4gYXBwcm92ZWQgT3BlbgorIFNvdXJjZSBsaWNlbnNlIGFzIGxpc3RlZCBieSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZSBhdAorIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy4gIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KKyBhbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhpcyBzb2Z0d2FyZS4gIE5vIGhhcmR3YXJlIHBlcgorIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKworIERJU0NMQUlNRVIuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsCisgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKKyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKKyBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgREFNQUdFLgorKi8KKy8qIEFVVE8gR0VOIFBMRUFTRSBETyBOT1QgTU9ESUZZIElUICovCisvKiBBVVRPIEdFTiBQTEVBU0UgRE8gTk9UIE1PRElGWSBJVCAqLworCisKK1VDSEFSIEZpcm13YXJlSW1hZ2UgW10gPSB7CisweGZmLCAweGZmLCAweGZmLCAweDAyLCAweDEwLCAweDI4LCAweDAyLCAweDEwLCAweDMyLCAweDAyLCAweDEwLCAweDc4LCAweDAyLCAweDEyLCAweDY3LCAweDAyLAorMHgxMiwgMHg2OCwgMHgwMiwgMHgxMiwgMHg4NywgMHgwMiwgMHgxMiwgMHg4YywgMHgxMiwgMHgxMiwgMHg4OCwgMHgyMiwgMHgwMiwgMHgxNiwgMHg0OSwgMHgwMiwKKzB4MTcsIDB4MWYsIDB4MDIsIDB4MTMsIDB4NzcsIDB4MDIsIDB4MTIsIDB4OGQsIDB4MzAsIDB4MDUsIDB4MDYsIDB4MjAsIDB4MGQsIDB4MDMsIDB4MTIsIDB4MTcsCisweGMxLCAweDIyLCAweDkwLCAweDAxLCAweDhjLCAweGUwLCAweDMwLCAweGUzLCAweDFiLCAweGU1LCAweDRjLCAweDMwLCAweGUwLCAweDA0LCAweDdmLCAweDQwLAorMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHgxMCwgMHgyZiwgMHhlZiwgMHhmMCwgMHg5MCwgMHgwMSwgMHg4YywgMHg3NCwgMHgwOCwgMHhmMCwgMHhlNCwKKzB4OTAsIDB4MDEsIDB4YTcsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OGMsIDB4ZTAsIDB4MzAsIDB4ZTAsIDB4MWMsIDB4OTAsIDB4MDEsIDB4ODAsIDB4ZTAsIDB4YjQsCisweDAyLCAweDE1LCAweGEzLCAweGUwLCAweGI0LCAweDAxLCAweDEwLCAweDkwLCAweDAxLCAweDg0LCAweGUwLCAweGI0LCAweDgxLCAweDA5LCAweDkwLCAweDAxLAorMHg4YywgMHg3NCwgMHgwMSwgMHhmMCwgMHgxMiwgMHgwZCwgMHhjOCwgMHgyMiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHgyMCwgMHhlNywgMHgwMywgMHgwMiwKKzB4MTIsIDB4NjYsIDB4OTAsIDB4NzAsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4NTYsIDB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsIDB4MTIsIDB4MGEsIDB4OWQsIDB4MTAsCisweGI3LCAweDMxLCAweDEwLCAweGUwLCAweDUwLCAweDExLCAweDA0LCAweDUxLCAweDExLCAweDBkLCAweDUyLCAweDExLCAweDBkLCAweDUzLCAweDExLCAweDBkLAorMHg1NCwgMHgxMSwgMHg0ZSwgMHg1NSwgMHgxMSwgMHg3ZSwgMHg3MCwgMHgxMSwgMHhhOSwgMHg3MSwgMHgxMSwgMHhkNywgMHg3MiwgMHgxMiwgMHgxZCwgMHg3MywKKzB4MTIsIDB4M2UsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4NjYsIDB4MjAsIDB4MDIsIDB4MDMsIDB4MzAsIDB4MDMsIDB4MWQsIDB4N2QsIDB4MDIsIDB4YWYsCisweDU2LCAweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LAorMHg1NiwgMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHg4NSwgMHg1NiwgMHg0MSwgMHhkMiwgMHgwMiwgMHgyMiwKKzB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4NjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4OTAsIDB4NzAsIDB4MTEsCisweGUwLCAweDY0LCAweDA4LCAweDYwLCAweDA4LCAweGUwLCAweDY0LCAweDIwLCAweDYwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDc1LCAweDRlLCAweDAzLAorMHg3NSwgMHg0ZiwgMHgyMCwgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHg0NywgMHgyMiwgMHg5MCwgMHgwNCwgMHgwNCwKKzB4ZTAsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4NWQsIDB4ZjUsIDB4NTcsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDcsIDB4MjUsIDB4NTcsCisweGY4LCAweGM2LCAweGVmLCAweGM2LCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGZmLCAweDc0LCAweDQ4LCAweDI1LCAweDU3LCAweGY4LCAweGM2LCAweGVmLAorMHhjNiwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwKKzB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4MDIsIDB4MTIsIDB4NWYsIDB4ZTUsIDB4NDcsCisweDY0LCAweDA3LCAweDYwLCAweDBiLCAweGU1LCAweDQ3LCAweDY0LCAweDA4LCAweDYwLCAweDA1LCAweGU1LCAweDQ3LCAweGI0LCAweDA5LCAweDA4LCAweDkwLAorMHg3MCwgMHgxMSwgMHhlMCwgMHg1NCwgMHgwZiwgMHhmNSwgMHgzYSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwOSwgMHgwOCwgMHhlNSwgMHgzYSwgMHhiNCwgMHgwMywKKzB4MDMsIDB4ZTQsIDB4ZjUsIDB4NDYsIDB4ZTQsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4OTEsIDB4ZDIsIDB4MDQsIDB4MjIsIDB4OTAsIDB4NzAsCisweDEwLCAweGUwLCAweGZlLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGZkLCAweGVkLCAweGY4LCAweGU2LCAweGY1LCAweDU3LCAweGZkLCAweGFmLCAweDU2LAorMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwKKzB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4MDIsIDB4MTIsIDB4NWYsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4NzAsCisweDExLCAweGUwLCAweGZkLCAweGVkLCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGUwLCAweGY1LCAweDU3LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLAorMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg3MCwKKzB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4MDIsIDB4MTIsIDB4NWYsIDB4OTAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YjQsIDB4NzAsIDB4MWUsIDB4YTMsIDB4ZTAsCisweGI0LCAweDMwLCAweDE5LCAweDkwLCAweDA1LCAweDA4LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweGZkLCAweDkwLCAweDA1LCAweDA1LCAweGUwLCAweDU0LAorMHhmYiwgMHhmMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHhlZCwgMHg1NCwgMHhmZSwgMHg5MCwgMHgwNSwgMHgwOCwgMHhmMCwgMHhlNCwgMHhmNSwgMHg0ZSwgMHhmNSwKKzB4NGYsIDB4NzUsIDB4M2EsIDB4ZmYsIDB4YWQsIDB4NTcsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsCisweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDYwLCAweDRiLCAweDgwLCAweDQyLCAweDkwLCAweDcwLCAweDEwLAorMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHg5MywgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwKKzB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NjAsIDB4MmEsIDB4ODAsIDB4MjEsIDB4OTAsIDB4NzAsCisweDEwLCAweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDRhLCAweGQyLCAweDA1LCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweDkwLAorMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgwNywgMHg5MCwKKzB4NzAsIDB4MjUsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4MjIsIDB4MjIsIDB4ZTUsIDB4NTMsIDB4NzAsIDB4MWEsIDB4MzAsIDB4NjAsIDB4MDksIDB4YjIsCisweDRkLCAweDMwLCAweDRkLCAweDA0LCAweDA1LCAweDQ2LCAweGMyLCAweDA0LCAweGU1LCAweDRmLCAweDQ1LCAweDRlLCAweDYwLCAweDA4LCAweGU1LCAweDRmLAorMHgxNSwgMHg0ZiwgMHg3MCwgMHgwMiwgMHgxNSwgMHg0ZSwgMHgyMiwgMHgyMiwgMHhjMiwgMHg0MiwgMHhkMywgMHgyMiwgMHgyMiwgMHhjMiwgMHg0YiwgMHhjMiwKKzB4NGMsIDB4ZTUsIDB4NDQsIDB4MTIsIDB4MGEsIDB4OWQsIDB4MTIsIDB4YWYsIDB4MDAsIDB4MTMsIDB4NDIsIDB4MDQsIDB4MTMsIDB4M2UsIDB4MDgsIDB4MTMsCisweDE5LCAweDEwLCAweDEyLCAweGMzLCAweDIwLCAweDEyLCAweGUzLCAweDYwLCAweDEyLCAweGY0LCAweGEwLCAweDAwLCAweDAwLCAweDEzLCAweDQ0LCAweDg1LAorMHg0OCwgMHg0MywgMHg4NSwgMHg0YSwgMHg0MiwgMHg4NSwgMHg0YywgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMywKKzB4NDQsIDB4ODAsIDB4MWIsIDB4ZTUsIDB4NDgsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGEsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsCisweDQyLCAweGU1LCAweDRjLCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDY2LCAweDUzLCAweDQzLAorMHgwZiwgMHg4MCwgMHg2MSwgMHg4NSwgMHg0OSwgMHg0MywgMHg4NSwgMHg0YiwgMHg0MiwgMHg4NSwgMHg0ZCwgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwKKzB4NzAsIDB4NTIsIDB4ODAsIDB4MWIsIDB4ZTUsIDB4NDksIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGIsIDB4YzQsIDB4NTQsIDB4MGYsCisweGY1LCAweDQyLCAweGU1LCAweDRkLCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDM1LCAweGU1LAorMHg0MywgMHg1NCwgMHgwZiwgMHg0NCwgMHgxMCwgMHhmNSwgMHg0MywgMHg4MCwgMHgyYiwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNCwgMHgwNiwgMHg1MywgMHg1ZSwKKzB4ZmIsIDB4NzUsIDB4NDIsIDB4MDksIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDUsIDB4MDYsIDB4NDMsIDB4NWUsIDB4MDQsIDB4NzUsIDB4NDIsIDB4MDksIDB4ZTUsCisweDQ3LCAweGI0LCAweDA2LCAweDEwLCAweGU1LCAweDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDMwLCAweGY1LCAweDQzLCAweDgwLCAweDA2LCAweGQyLCAweDRiLAorMHg4MCwgMHgwMiwgMHhkMiwgMHg0YywgMHhlNCwgMHhmNSwgMHgyNSwgMHhlNSwgMHg0MiwgMHhjNCwgMHg1NCwgMHhmMCwgMHhmZiwgMHhlNSwgMHg0MywgMHg1NCwKKzB4MGYsIDB4NGYsIDB4ZjUsIDB4NWYsIDB4OTAsIDB4NzAsIDB4NDQsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NWUsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NGEsIDB4ZjAsCisweGEzLCAweGU1LCAweDQ4LCAweGYwLCAweGEzLCAweGU1LCAweDRjLCAweGYwLCAweGEzLCAweGU1LCAweDQ0LCAweGYwLCAweGEzLCAweGU1LCAweDQyLCAweGYwLAorMHhhMywgMHhlNSwgMHg0MywgMHhmMCwgMHhkMiwgMHg2MCwgMHgyMiwgMHhlNSwgMHg0NywgMHg2MCwgMHgxMCwgMHgyNCwgMHhjMCwgMHg3MCwgMHgwMywgMHgxMiwKKzB4MTYsIDB4MjksIDB4MTIsIDB4MTMsIDB4OGMsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MDQsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsIDB4YWYsIDB4OTAsIDB4MDQsCisweDE0LCAweGUwLCAweDU0LCAweDBlLCAweDYwLCAweDA0LCAweGQyLCAweDE4LCAweDgwLCAweDA4LCAweGU1LCAweDRlLCAweDQ1LCAweDRmLCAweDI0LCAweGZmLAorMHg5MiwgMHgxOCwgMHhkMiwgMHhhZiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHhhMiwgMHhlNCwgMHg5MiwgMHgxOSwgMHg3NCwgMHgxZSwgMHhmMCwgMHhlNSwKKzB4NWYsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4MmQsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MTMsIDB4MzAsIDB4MTgsIDB4MDUsIDB4ZTUsIDB4NWYsIDB4MjAsIDB4ZTUsCisweDBiLCAweDMwLCAweDE5LCAweDE5LCAweGU1LCAweDVmLCAweDU0LCAweDMwLCAweGZmLCAweGJmLCAweDMwLCAweDExLCAweGU1LCAweDI1LCAweDcwLCAweDA1LAorMHg3NSwgMHgyNSwgMHgwYywgMHg4MCwgMHgwMiwgMHgxNSwgMHgyNSwgMHhkMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwZiwgMHhlNSwgMHg1ZiwgMHgzMCwKKzB4ZTYsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MDQsIDB4ZDIsIDB4NmMsIDB4YzIsIDB4NmQsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDMsCisweDcwLCAweDIxLCAweDMwLCAweDRiLCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDE4LCAweGU1LCAweDI1LCAweDcwLCAweDAzLCAweDMwLAorMHg0YywgMHgxMSwgMHhjMiwgMHg0YywgMHhlNSwgMHgyNSwgMHg3MCwgMHgwNSwgMHg3NSwgMHgyNSwgMHgwNywgMHg4MCwgMHgwMiwgMHgxNSwgMHgyNSwgMHhkMiwKKzB4NmMsIDB4ZDIsIDB4NmQsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MTQsIDB4ZTUsIDB4NDQsIDB4MjAsIDB4ZTMsIDB4MGIsIDB4ZTUsIDB4M2EsIDB4NjQsCisweDAyLCAweDYwLCAweDA1LCAweGU1LCAweDNhLCAweGI0LCAweDAzLCAweDA0LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDkwLCAweDcwLCAweDQ2LCAweGU1LAorMHgyZCwgMHhmMCwgMHgyMCwgMHg2OSwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMCwgMHgwMiwgMHhiMiwgMHg2OCwgMHgyMCwgMHg2YiwgMHgwNywgMHhlNSwKKzB4NWUsIDB4MjAsIDB4ZTEsIDB4MDIsIDB4YjIsIDB4NmEsIDB4MjAsIDB4NmQsIDB4MDcsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTIsIDB4MDIsIDB4YjIsIDB4NmMsCisweDkwLCAweDcwLCAweDQ3LCAweGU1LCAweDJkLCAweGYwLCAweDc1LCAweDJlLCAweDQwLCAweDIwLCAweDY5LCAweDA0LCAweGEyLCAweDY4LCAweDgwLCAweDI2LAorMHgzMCwgMHg2OCwgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMiwgMHg4MCwgMHgxZCwgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMiwgMHgwNCwgMHg3ZiwgMHgwMSwKKzB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsIDB4ZmUsIDB4YmUsIDB4ZjAsIDB4MDQsIDB4N2UsIDB4MDEsIDB4ODAsIDB4MDIsCisweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLCAweDczLCAweDkyLCAweDcyLCAweDIwLCAweDZiLCAweDA0LCAweGEyLCAweDZhLCAweDgwLAorMHgyNiwgMHgzMCwgMHg2YSwgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMiwgMHg4MCwgMHgxZCwgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMCwgMHgwNCwgMHg3ZiwKKzB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsIDB4ZmUsIDB4YmUsIDB4ZjAsIDB4MDQsIDB4N2UsIDB4MDEsIDB4ODAsCisweDAyLCAweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLCAweDc1LCAweDkyLCAweDc0LCAweDIwLCAweDZkLCAweDA0LCAweGEyLCAweDZjLAorMHg4MCwgMHgyNiwgMHgzMCwgMHg2YywgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMiwgMHg4MCwgMHgxZCwgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMSwgMHgwNCwKKzB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsIDB4ZmUsIDB4YmUsIDB4ZjAsIDB4MDQsIDB4N2UsIDB4MDEsCisweDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLCAweDcxLCAweDkyLCAweDcwLCAweDkwLCAweDEwLCAweDAwLCAweGUwLAorMHg5MCwgMHgxMCwgMHgyZiwgMHhmMCwgMHg5MCwgMHgxMCwgMHgwMywgMHhlMCwgMHhjMywgMHg5NCwgMHgzMCwgMHg0MCwgMHgxNCwgMHhhMiwgMHg3MSwgMHg5MiwKKzB4NzcsIDB4YTIsIDB4NzAsIDB4OTIsIDB4NzYsIDB4ZTUsIDB4MmUsIDB4MTMsIDB4MTMsIDB4NTQsIDB4M2YsIDB4ZjUsIDB4MmUsIDB4YzIsIDB4NzcsIDB4ZDIsCisweDc2LCAweDkwLCAweDEwLCAweDJmLCAweGU1LCAweDJlLCAweGYwLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDRjLCAweDkwLCAweDAyLCAweDI5LAorMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNSwgMHg0MywgMHhjNCwgMHg1NCwgMHgwZiwgMHgxNCwgMHg2MCwgMHgxNCwgMHgyNCwgMHhmZSwgMHg2MCwgMHgyMywKKzB4MjQsIDB4MDMsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTYsIDB4MTgsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZTAsIDB4MzAsIDB4NDcsIDB4MGYsIDB4ODAsIDB4MDcsCisweDkwLCAweDAyLCAweDI4LCAweGUwLCAweDIwLCAweDQ3LCAweDA2LCAweDU0LCAweGZlLCAweGYwLCAweDAyLCAweDE2LCAweDE4LCAweDQ0LCAweDAxLCAweGYwLAorMHgwMiwgMHgxNiwgMHgxOCwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwNCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHgwMiwKKzB4MjgsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4NGYsIDB4ZjAsIDB4MDIsIDB4MTYsIDB4MTgsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDcsIDB4NjAsIDB4MGYsIDB4ZTUsCisweDQ3LCAweDY0LCAweDA4LCAweDYwLCAweDA5LCAweGU1LCAweDQ3LCAweDY0LCAweDA5LCAweDYwLCAweDAzLCAweDAyLCAweDE2LCAweDE4LCAweGU0LCAweGY1LAorMHgyNywgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHg1NCwgMHhmYywgMHhmMCwgMHhlNSwgMHgzYSwgMHgxNCwgMHg2MCwgMHgyZCwgMHgxNCwgMHg2MCwgMHgyZSwKKzB4MTQsIDB4NjAsIDB4MzYsIDB4MjQsIDB4ZmMsIDB4NjAsIDB4NWYsIDB4MjQsIDB4ZjksIDB4NjAsIDB4MWYsIDB4MjQsIDB4MGUsIDB4NzAsIDB4NjksIDB4ZTUsCisweDQ2LCAweDEzLCAweDEzLCAweDU0LCAweDNmLCAweDc1LCAweGYwLCAweDAzLCAweDg0LCAweGFmLCAweGYwLCAweDIwLCAweDQ3LCAweDA0LCAweDdlLCAweDAxLAorMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZiwgMHg2ZSwgMHgyNCwgMHhmZiwgMHg4MCwgMHg0NSwgMHhhMiwgMHg0NywgMHg4MCwgMHg0MSwgMHhlNSwgMHg0NiwKKzB4MzAsIDB4ZTIsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MjcsIDB4YzMsIDB4ODAsIDB4MjQsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MGQsIDB4NTQsIDB4MzgsCisweGMzLCAweDk0LCAweDMwLCAweDUwLCAweDA2LCAweDdlLCAweDAwLCAweDdmLCAweDAxLCAweDgwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLCAweDAwLCAweDIwLAorMHg0NywgMHgwNCwgMHg3ZCwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZCwgMHgwMCwgMHhlZiwgMHg2ZCwgMHg0ZSwgMHgyNCwgMHhmZiwgMHg5MiwgMHgzOCwgMHhhMiwKKzB4NDcsIDB4YjMsIDB4OTIsIDB4MzksIDB4ODAsIDB4MTksIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsCisweDM5LCAweGEyLCAweDQ3LCAweGIzLCAweDkyLCAweDM4LCAweDgwLCAweDA3LCAweGEyLCAweDQ3LCAweGIzLCAweDkyLCAweDM4LCAweDkyLCAweDM5LCAweDkwLAorMHgwMiwgMHgyOCwgMHhlMCwgMHg1NCwgMHhmYywgMHg0NSwgMHgyNywgMHhmMCwgMHg5MCwgMHg3MCwgMHg5YywgMHhlNSwgMHgzYSwgMHhmMCwgMHhhMywgMHhlNSwKKzB4NDcsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4NDEsIDB4ZTUsIDB4M2EsIDB4ZjAsIDB4MjIsIDB4ZTQsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZjAsIDB4MzAsIDB4NDcsCisweDA0LCAweGFmLCAweDQ1LCAweDgwLCAweDA0LCAweGU1LCAweDQ1LCAweGY0LCAweGZmLCAweDkwLCAweDAyLCAweDI4LCAweGVmLCAweGYwLCAweDIyLCAweDhmLAorMHg1MCwgMHhkMiwgMHg1OSwgMHgyMiwgMHg4ZiwgMHg1NCwgMHhkMiwgMHg1OCwgMHgyMiwgMHhlNCwgMHhmNSwgMHg2MiwgMHhjMiwgMHhhZiwgMHhlNSwgMHg1MSwKKzB4MTQsIDB4NjAsIDB4NDYsIDB4MTQsIDB4NjAsIDB4NjIsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTcsIDB4MDMsIDB4ZDIsIDB4NTksIDB4NzUsCisweDU1LCAweDAxLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweGEzLCAweGUwLCAweDIwLCAweGU3LCAweDIyLCAweDkwLCAweDA0LAorMHgzNCwgMHhlMCwgMHhiNCwgMHgwMiwgMHgxYiwgMHhhMywgMHhlMCwgMHhiNCwgMHgwMiwgMHgxNiwgMHhhMywgMHhlMCwgMHhiNCwgMHgwMiwgMHgxMSwgMHg3ZiwKKzB4MjAsIDB4MTIsIDB4MTYsIDB4M2YsIDB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZjMsIDB4ZjAsIDB4NzUsIDB4NTEsIDB4MDEsIDB4ODAsIDB4NzMsCisweGU1LCAweDUwLCAweDcwLCAweDA1LCAweDc1LCAweDYyLCAweDAzLCAweDgwLCAweDZhLCAweDkwLCAweDEyLCAweDAwLCAweGUwLCAweDU0LCAweDAzLCAweDcwLAorMHgxMSwgMHg3ZiwgMHgyMCwgMHgxMiwgMHgxNiwgMHgzZiwgMHg5MCwgMHgwMiwgMHhhMiwgMHhlMCwgMHg1NCwgMHhiZiwgMHhmMCwgMHg3NSwgMHg1MSwgMHgwMiwKKzB4ODAsIDB4NTEsIDB4ZTUsIDB4NTAsIDB4NzAsIDB4MDIsIDB4ODAsIDB4NDYsIDB4OTAsIDB4MDIsIDB4YTMsIDB4ZTAsIDB4MjAsIDB4ZTYsIDB4M2IsIDB4OTAsCisweDA0LCAweDM3LCAweGUwLCAweDY0LCAweDIyLCAweDcwLCAweDMzLCAweDkwLCAweDAxLCAweDhhLCAweDc0LCAweDdlLCAweGYwLCAweDkwLCAweDAxLCAweDk2LAorMHhmMCwgMHg5MCwgMHgxMiwgMHgwNCwgMHg3NCwgMHgwYSwgMHhmMCwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwKKzB4NTQsIDB4ZjAsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZmEsIDB4ZjAsIDB4OTAsIDB4MDQsIDB4MDEsIDB4ZTAsIDB4NTQsIDB4ZjksIDB4ZjAsIDB4NzUsCisweDYyLCAweDAxLCAweDc1LCAweDU1LCAweDAyLCAweGU0LCAweGY1LCAweDUxLCAweDgwLCAweDA5LCAweGU1LCAweDUwLCAweDcwLCAweDA1LCAweDc1LCAweDYyLAorMHgwMywgMHhmNSwgMHg1MSwgMHhlNSwgMHg2MiwgMHg2MCwgMHgxNSwgMHhjMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg1MSwgMHhjMiwgMHg1OSwgMHhhZCwgMHg2MiwKKzB4YWYsIDB4NDAsIDB4MTIsIDB4MTcsIDB4OGQsIDB4ZTUsIDB4NjIsIDB4YjQsIDB4MDMsIDB4MDIsIDB4ZDIsIDB4MDMsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsCisweGFmLCAweDMwLCAweDAxLCAweDEyLCAweGU0LCAweDkwLCAweDAxLCAweDk2LCAweGYwLCAweGY1LCAweDUxLCAweGMyLCAweDU5LCAweGMyLCAweDAxLCAweDdkLAorMHgwMiwgMHhhZiwgMHg0MCwgMHgxMiwgMHgxNywgMHg4ZCwgMHhlNSwgMHg1MiwgMHgxNCwgMHg2MCwgMHgwOSwgMHgwNCwgMHg3MCwgMHg0YywgMHg3NSwgMHg1MiwKKzB4MDEsIDB4NzUsIDB4NTUsIDB4MDMsIDB4OTAsIDB4MDQsIDB4MDEsIDB4ZTAsIDB4NDQsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4MTMsIDB4MjgsIDB4ZTAsIDB4NDQsCisweDBmLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDBmLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDA1LCAweGYwLCAweDkwLCAweDEyLCAweDA0LCAweDc0LAorMHgwMywgMHhmMCwgMHg5MCwgMHgwMiwgMHhhMiwgMHhlMCwgMHg0NCwgMHhjMCwgMHhmMCwgMHg5MCwgMHgxMCwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwYywgMHhmMCwKKzB4ZTQsIDB4ZjUsIDB4NTIsIDB4ZjUsIDB4NTUsIDB4MzAsIDB4MDIsIDB4MGIsIDB4YzIsIDB4MDIsIDB4N2QsIDB4MDEsIDB4YWYsIDB4NDEsIDB4MTIsIDB4MTcsCisweDhkLCAweDgwLCAweDAyLCAweGMyLCAweDAzLCAweGU0LCAweDkwLCAweDAxLCAweDk2LCAweGYwLCAweGQyLCAweGFmLCAweDIyLCAweGVmLCAweGY0LCAweDYwLAorMHgyZCwgMHhlNCwgMHhmZSwgMHg3NCwgMHgxNCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlMCwgMHhiNCwgMHhmZiwKKzB4MTksIDB4NzQsIDB4MTQsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWYsIDB4ZjAsIDB4NzQsIDB4MWMsIDB4MmUsCisweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGVkLCAweGYwLCAweDIyLCAweDBlLCAweGJlLCAweDA0LCAweGQ1LCAweDIyLCAweDIyLAorMHgyMiwgMHg5MCwgMHg3MCwgMHgyYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHg0ZCwgMHhjMiwgMHhhZiwgMHg5MCwgMHg3MCwgMHgyOCwgMHhlMCwgMHg5MCwgMHgxMCwKKzB4MWMsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4MjksIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MWQsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZTAsIDB4OTAsIDB4MTAsCisweDFlLCAweGYwLCAweDkwLCAweDEwLCAweDFjLCAweGUwLCAweGY1LCAweDYyLCAweDkwLCAweDEwLCAweDFlLCAweGUwLCAweDIwLCAweGUxLCAweGYzLCAweDkwLAorMHgxMCwgMHgxYywgMHhlMCwgMHg5MCwgMHg3MCwgMHgyOCwgMHhmMCwgMHg5MCwgMHgxMCwgMHgxZCwgMHhlMCwgMHg5MCwgMHg3MCwgMHgyOSwgMHhmMCwgMHg5MCwKKzB4MTAsIDB4MWUsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZjAsIDB4MzAsIDB4NGEsIDB4MDcsIDB4OTAsIDB4NzAsIDB4MjQsIDB4ZTAsIDB4NDQsIDB4MDEsCisweGYwLCAweGMyLCAweDA1LCAweGQyLCAweGFmLCAweDIyLCAweDIyLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDk0LCAweDNmLAorMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgxMCwgMHgyOCwgMHgwMiwgMHgxMCwgMHgzMiwgMHgwMiwgMHgxMCwgMHg3OCwgMHgwMiwgMHgxMiwgMHg2NywgMHgwMiwKKzB4MTIsIDB4NjgsIDB4MDIsIDB4MTIsIDB4ODcsIDB4MDIsIDB4MTIsIDB4OGMsIDB4MTIsIDB4MTIsIDB4ODgsIDB4MjIsIDB4MDIsIDB4MTYsIDB4NDksIDB4MDIsCisweDE3LCAweDFmLCAweDAyLCAweDEzLCAweDc3LCAweDAyLCAweDEyLCAweDhkLCAweDMwLCAweDA1LCAweDA2LCAweDIwLCAweDBkLCAweDAzLCAweDEyLCAweDE3LAorMHhjMSwgMHgyMiwgMHg5MCwgMHgwMSwgMHg4YywgMHhlMCwgMHgzMCwgMHhlMywgMHgxYiwgMHhlNSwgMHg0YywgMHgzMCwgMHhlMCwgMHgwNCwgMHg3ZiwgMHg0MCwKKzB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OTAsIDB4MTAsIDB4MmYsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OGMsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZTQsCisweDkwLCAweDAxLCAweGE3LCAweGYwLCAweDkwLCAweDAxLCAweDhjLCAweGUwLCAweDMwLCAweGUwLCAweDFjLCAweDkwLCAweDAxLCAweDgwLCAweGUwLCAweGI0LAorMHgwMiwgMHgxNSwgMHhhMywgMHhlMCwgMHhiNCwgMHgwMSwgMHgxMCwgMHg5MCwgMHgwMSwgMHg4NCwgMHhlMCwgMHhiNCwgMHg4MSwgMHgwOSwgMHg5MCwgMHgwMSwKKzB4OGMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MTIsIDB4MGQsIDB4ZGQsIDB4MjIsIDB4OTAsIDB4MDQsIDB4MTQsIDB4ZTAsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MDIsCisweDEyLCAweDY2LCAweDkwLCAweDcwLCAweDEyLCAweGUwLCAweGY1LCAweDU2LCAweDkwLCAweDA0LCAweDA0LCAweGUwLCAweDEyLCAweDBhLCAweGI2LCAweDEwLAorMHhiNywgMHgzMSwgMHgxMCwgMHhlMCwgMHg1MCwgMHgxMSwgMHgwNCwgMHg1MSwgMHgxMSwgMHgwZCwgMHg1MiwgMHgxMSwgMHgwZCwgMHg1MywgMHgxMSwgMHgwZCwKKzB4NTQsIDB4MTEsIDB4NGUsIDB4NTUsIDB4MTEsIDB4N2UsIDB4NzAsIDB4MTEsIDB4YTksIDB4NzEsIDB4MTEsIDB4ZDcsIDB4NzIsIDB4MTIsIDB4MWQsIDB4NzMsCisweDEyLCAweDNlLCAweDgwLCAweDAwLCAweDAwLCAweDEyLCAweDY2LCAweDIwLCAweDAyLCAweDAzLCAweDMwLCAweDAzLCAweDFkLCAweDdkLCAweDAyLCAweGFmLAorMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwKKzB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4MDIsIDB4MTIsIDB4NWYsIDB4ODUsIDB4NTYsIDB4NDEsIDB4ZDIsIDB4MDIsIDB4MjIsCisweDkwLCAweDcwLCAweDEwLCAweGUwLCAweDU0LCAweDdmLCAweDY0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDkwLCAweDcwLCAweDExLAorMHhlMCwgMHg2NCwgMHgwOCwgMHg2MCwgMHgwOCwgMHhlMCwgMHg2NCwgMHgyMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHg3NSwgMHg0ZSwgMHgwMywKKzB4NzUsIDB4NGYsIDB4MjAsIDB4MjIsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NDcsIDB4MjIsIDB4OTAsIDB4MDQsIDB4MDQsCisweGUwLCAweDI1LCAweGUwLCAweDI0LCAweDVkLCAweGY1LCAweDU3LCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweGZmLCAweDc0LCAweDQ3LCAweDI1LCAweDU3LAorMHhmOCwgMHhjNiwgMHhlZiwgMHhjNiwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmZiwgMHg3NCwgMHg0OCwgMHgyNSwgMHg1NywgMHhmOCwgMHhjNiwgMHhlZiwKKzB4YzYsIDB4ZTQsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsCisweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweGU1LCAweDQ3LAorMHg2NCwgMHgwNywgMHg2MCwgMHgwYiwgMHhlNSwgMHg0NywgMHg2NCwgMHgwOCwgMHg2MCwgMHgwNSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwOSwgMHgwOCwgMHg5MCwKKzB4NzAsIDB4MTEsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4M2EsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MDgsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsCisweDAzLCAweGU0LCAweGY1LCAweDQ2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweGFhLCAweGQyLCAweDA0LCAweDIyLCAweDkwLCAweDcwLAorMHgxMCwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmZCwgMHhlZCwgMHhmOCwgMHhlNiwgMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwKKzB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsCisweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweGZlLCAweDkwLCAweDcwLAorMHgxMSwgMHhlMCwgMHhmZCwgMHhlZCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwKKzB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsCisweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweDkwLCAweDEwLCAweDAyLCAweGUwLCAweGI0LCAweDcwLCAweDFlLCAweGEzLCAweGUwLAorMHhiNCwgMHgzMCwgMHgxOSwgMHg5MCwgMHgwNSwgMHgwOCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHhmZCwgMHg5MCwgMHgwNSwgMHgwNSwgMHhlMCwgMHg1NCwKKzB4ZmIsIDB4ZjAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZWQsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4MDUsIDB4MDgsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4NGUsIDB4ZjUsCisweDRmLCAweDc1LCAweDNhLCAweGZmLCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLAorMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHg0YiwgMHg4MCwgMHg0MiwgMHg5MCwgMHg3MCwgMHgxMCwKKzB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4OTMsIDB4ZTQsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsCisweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDYwLCAweDJhLCAweDgwLCAweDIxLCAweDkwLCAweDcwLAorMHgxMCwgMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHg0YSwgMHhkMiwgMHgwNSwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwKKzB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NjAsIDB4MDcsIDB4OTAsCisweDcwLCAweDI1LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDIyLCAweDIyLCAweGU1LCAweDUzLCAweDcwLCAweDFhLCAweDMwLCAweDYwLCAweDA5LCAweGIyLAorMHg0ZCwgMHgzMCwgMHg0ZCwgMHgwNCwgMHgwNSwgMHg0NiwgMHhjMiwgMHgwNCwgMHhlNSwgMHg0ZiwgMHg0NSwgMHg0ZSwgMHg2MCwgMHgwOCwgMHhlNSwgMHg0ZiwKKzB4MTUsIDB4NGYsIDB4NzAsIDB4MDIsIDB4MTUsIDB4NGUsIDB4MjIsIDB4MjIsIDB4YzIsIDB4NDIsIDB4ZDMsIDB4MjIsIDB4MjIsIDB4YzIsIDB4NGIsIDB4YzIsCisweDRjLCAweGU1LCAweDQ0LCAweDEyLCAweDBhLCAweGI2LCAweDEyLCAweGFmLCAweDAwLCAweDEzLCAweDQyLCAweDA0LCAweDEzLCAweDNlLCAweDA4LCAweDEzLAorMHgxOSwgMHgxMCwgMHgxMiwgMHhjMywgMHgyMCwgMHgxMiwgMHhlMywgMHg2MCwgMHgxMiwgMHhmNCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0NCwgMHg4NSwKKzB4NDgsIDB4NDMsIDB4ODUsIDB4NGEsIDB4NDIsIDB4ODUsIDB4NGMsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTMsCisweDQ0LCAweDgwLCAweDFiLCAweGU1LCAweDQ4LCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDQzLCAweGU1LCAweDRhLCAweGM0LCAweDU0LCAweDBmLCAweGY1LAorMHg0MiwgMHhlNSwgMHg0YywgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHg2NiwgMHg1MywgMHg0MywKKzB4MGYsIDB4ODAsIDB4NjEsIDB4ODUsIDB4NDksIDB4NDMsIDB4ODUsIDB4NGIsIDB4NDIsIDB4ODUsIDB4NGQsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsCisweDcwLCAweDUyLCAweDgwLCAweDFiLCAweGU1LCAweDQ5LCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDQzLCAweGU1LCAweDRiLCAweGM0LCAweDU0LCAweDBmLAorMHhmNSwgMHg0MiwgMHhlNSwgMHg0ZCwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHgzNSwgMHhlNSwKKzB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MTAsIDB4ZjUsIDB4NDMsIDB4ODAsIDB4MmIsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDQsIDB4MDYsIDB4NTMsIDB4NWUsCisweGZiLCAweDc1LCAweDQyLCAweDA5LCAweGU1LCAweDQ3LCAweGI0LCAweDA1LCAweDA2LCAweDQzLCAweDVlLCAweDA0LCAweDc1LCAweDQyLCAweDA5LCAweGU1LAorMHg0NywgMHhiNCwgMHgwNiwgMHgxMCwgMHhlNSwgMHg0MywgMHg1NCwgMHgwZiwgMHg0NCwgMHgzMCwgMHhmNSwgMHg0MywgMHg4MCwgMHgwNiwgMHhkMiwgMHg0YiwKKzB4ODAsIDB4MDIsIDB4ZDIsIDB4NGMsIDB4ZTQsIDB4ZjUsIDB4MjUsIDB4ZTUsIDB4NDIsIDB4YzQsIDB4NTQsIDB4ZjAsIDB4ZmYsIDB4ZTUsIDB4NDMsIDB4NTQsCisweDBmLCAweDRmLCAweGY1LCAweDVmLCAweDkwLCAweDcwLCAweDQ0LCAweGYwLCAweGEzLCAweGU1LCAweDVlLCAweGYwLCAweGEzLCAweGU1LCAweDRhLCAweGYwLAorMHhhMywgMHhlNSwgMHg0OCwgMHhmMCwgMHhhMywgMHhlNSwgMHg0YywgMHhmMCwgMHhhMywgMHhlNSwgMHg0NCwgMHhmMCwgMHhhMywgMHhlNSwgMHg0MiwgMHhmMCwKKzB4YTMsIDB4ZTUsIDB4NDMsIDB4ZjAsIDB4ZDIsIDB4NjAsIDB4MjIsIDB4ZTUsIDB4NDcsIDB4NjAsIDB4MTAsIDB4MjQsIDB4YzAsIDB4NzAsIDB4MDMsIDB4MTIsCisweDE2LCAweDI5LCAweDEyLCAweDEzLCAweDhjLCAweGMyLCAweGFmLCAweGMyLCAweDA0LCAweGQyLCAweGFmLCAweDIyLCAweGMyLCAweGFmLCAweDkwLCAweDA0LAorMHgxNCwgMHhlMCwgMHg1NCwgMHgwZSwgMHg2MCwgMHgwNCwgMHhkMiwgMHgxOCwgMHg4MCwgMHgwOCwgMHhlNSwgMHg0ZSwgMHg0NSwgMHg0ZiwgMHgyNCwgMHhmZiwKKzB4OTIsIDB4MTgsIDB4ZDIsIDB4YWYsIDB4OTAsIDB4MDQsIDB4MTQsIDB4ZTAsIDB4YTIsIDB4ZTQsIDB4OTIsIDB4MTksIDB4NzQsIDB4MWUsIDB4ZjAsIDB4ZTUsCisweDVmLCAweDU0LCAweDBmLCAweGY1LCAweDJkLCAweGU1LCAweDI1LCAweDcwLCAweDEzLCAweDMwLCAweDE4LCAweDA1LCAweGU1LCAweDVmLCAweDIwLCAweGU1LAorMHgwYiwgMHgzMCwgMHgxOSwgMHgxOSwgMHhlNSwgMHg1ZiwgMHg1NCwgMHgzMCwgMHhmZiwgMHhiZiwgMHgzMCwgMHgxMSwgMHhlNSwgMHgyNSwgMHg3MCwgMHgwNSwKKzB4NzUsIDB4MjUsIDB4MGMsIDB4ODAsIDB4MDIsIDB4MTUsIDB4MjUsIDB4ZDIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4NWYsIDB4MzAsCisweGU2LCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDA0LCAweGQyLCAweDZjLCAweGMyLCAweDZkLCAweGU1LCAweDQ3LCAweDY0LCAweDAzLAorMHg3MCwgMHgyMSwgMHgzMCwgMHg0YiwgMHgwNiwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgxOCwgMHhlNSwgMHgyNSwgMHg3MCwgMHgwMywgMHgzMCwKKzB4NGMsIDB4MTEsIDB4YzIsIDB4NGMsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDUsIDB4NzUsIDB4MjUsIDB4MDcsIDB4ODAsIDB4MDIsIDB4MTUsIDB4MjUsIDB4ZDIsCisweDZjLCAweGQyLCAweDZkLCAweGU1LCAweDQ3LCAweGI0LCAweDA5LCAweDE0LCAweGU1LCAweDQ0LCAweDIwLCAweGUzLCAweDBiLCAweGU1LCAweDNhLCAweDY0LAorMHgwMiwgMHg2MCwgMHgwNSwgMHhlNSwgMHgzYSwgMHhiNCwgMHgwMywgMHgwNCwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg5MCwgMHg3MCwgMHg0NiwgMHhlNSwKKzB4MmQsIDB4ZjAsIDB4MjAsIDB4NjksIDB4MDcsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTAsIDB4MDIsIDB4YjIsIDB4NjgsIDB4MjAsIDB4NmIsIDB4MDcsIDB4ZTUsCisweDVlLCAweDIwLCAweGUxLCAweDAyLCAweGIyLCAweDZhLCAweDIwLCAweDZkLCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUyLCAweDAyLCAweGIyLCAweDZjLAorMHg5MCwgMHg3MCwgMHg0NywgMHhlNSwgMHgyZCwgMHhmMCwgMHg3NSwgMHgyZSwgMHg0MCwgMHgyMCwgMHg2OSwgMHgwNCwgMHhhMiwgMHg2OCwgMHg4MCwgMHgyNiwKKzB4MzAsIDB4NjgsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDEsCisweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLAorMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3MywgMHg5MiwgMHg3MiwgMHgyMCwgMHg2YiwgMHgwNCwgMHhhMiwgMHg2YSwgMHg4MCwKKzB4MjYsIDB4MzAsIDB4NmEsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTAsIDB4MDQsIDB4N2YsCisweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLAorMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3NSwgMHg5MiwgMHg3NCwgMHgyMCwgMHg2ZCwgMHgwNCwgMHhhMiwgMHg2YywKKzB4ODAsIDB4MjYsIDB4MzAsIDB4NmMsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTEsIDB4MDQsCisweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLAorMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3MSwgMHg5MiwgMHg3MCwgMHg5MCwgMHgxMCwgMHgwMCwgMHhlMCwKKzB4OTAsIDB4MTAsIDB4MmYsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDMsIDB4ZTAsIDB4YzMsIDB4OTQsIDB4MzAsIDB4NDAsIDB4MTQsIDB4YTIsIDB4NzEsIDB4OTIsCisweDc3LCAweGEyLCAweDcwLCAweDkyLCAweDc2LCAweGU1LCAweDJlLCAweDEzLCAweDEzLCAweDU0LCAweDNmLCAweGY1LCAweDJlLCAweGMyLCAweDc3LCAweGQyLAorMHg3NiwgMHg5MCwgMHgxMCwgMHgyZiwgMHhlNSwgMHgyZSwgMHhmMCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHg0YywgMHg5MCwgMHgwMiwgMHgyOSwKKzB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTUsIDB4NDMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4MTQsIDB4NjAsIDB4MTQsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MjMsCisweDI0LCAweDAzLCAweDYwLCAweDAzLCAweDAyLCAweDE2LCAweDE4LCAweDkwLCAweDAyLCAweDI4LCAweGUwLCAweDMwLCAweDQ3LCAweDBmLCAweDgwLCAweDA3LAorMHg5MCwgMHgwMiwgMHgyOCwgMHhlMCwgMHgyMCwgMHg0NywgMHgwNiwgMHg1NCwgMHhmZSwgMHhmMCwgMHgwMiwgMHgxNiwgMHgxOCwgMHg0NCwgMHgwMSwgMHhmMCwKKzB4MDIsIDB4MTYsIDB4MTgsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OTAsIDB4MDIsCisweDI4LCAweGUwLCAweDU0LCAweGZlLCAweDRmLCAweGYwLCAweDAyLCAweDE2LCAweDE4LCAweGU1LCAweDQ3LCAweDY0LCAweDA3LCAweDYwLCAweDBmLCAweGU1LAorMHg0NywgMHg2NCwgMHgwOCwgMHg2MCwgMHgwOSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwOSwgMHg2MCwgMHgwMywgMHgwMiwgMHgxNiwgMHgxOCwgMHhlNCwgMHhmNSwKKzB4MjcsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4ZTUsIDB4M2EsIDB4MTQsIDB4NjAsIDB4MmQsIDB4MTQsIDB4NjAsIDB4MmUsCisweDE0LCAweDYwLCAweDM2LCAweDI0LCAweGZjLCAweDYwLCAweDVmLCAweDI0LCAweGY5LCAweDYwLCAweDFmLCAweDI0LCAweDBlLCAweDcwLCAweDY5LCAweGU1LAorMHg0NiwgMHgxMywgMHgxMywgMHg1NCwgMHgzZiwgMHg3NSwgMHhmMCwgMHgwMywgMHg4NCwgMHhhZiwgMHhmMCwgMHgyMCwgMHg0NywgMHgwNCwgMHg3ZSwgMHgwMSwKKzB4ODAsIDB4MDIsIDB4N2UsIDB4MDAsIDB4ZWYsIDB4NmUsIDB4MjQsIDB4ZmYsIDB4ODAsIDB4NDUsIDB4YTIsIDB4NDcsIDB4ODAsIDB4NDEsIDB4ZTUsIDB4NDYsCisweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDI3LCAweGMzLCAweDgwLCAweDI0LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDBkLCAweDU0LCAweDM4LAorMHhjMywgMHg5NCwgMHgzMCwgMHg1MCwgMHgwNiwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwNCwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgyMCwKKzB4NDcsIDB4MDQsIDB4N2QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2QsIDB4MDAsIDB4ZWYsIDB4NmQsIDB4NGUsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MzgsIDB4YTIsCisweDQ3LCAweGIzLCAweDkyLCAweDM5LCAweDgwLCAweDE5LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLAorMHgzOSwgMHhhMiwgMHg0NywgMHhiMywgMHg5MiwgMHgzOCwgMHg4MCwgMHgwNywgMHhhMiwgMHg0NywgMHhiMywgMHg5MiwgMHgzOCwgMHg5MiwgMHgzOSwgMHg5MCwKKzB4MDIsIDB4MjgsIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4NDUsIDB4MjcsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4OWMsIDB4ZTUsIDB4M2EsIDB4ZjAsIDB4YTMsIDB4ZTUsCisweDQ3LCAweGYwLCAweDkwLCAweDcwLCAweDQxLCAweGU1LCAweDNhLCAweGYwLCAweDIyLCAweGU0LCAweDkwLCAweDAyLCAweDI5LCAweGYwLCAweDMwLCAweDQ3LAorMHgwNCwgMHhhZiwgMHg0NSwgMHg4MCwgMHgwNCwgMHhlNSwgMHg0NSwgMHhmNCwgMHhmZiwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlZiwgMHhmMCwgMHgyMiwgMHg4ZiwKKzB4NTAsIDB4ZDIsIDB4NTksIDB4MjIsIDB4OGYsIDB4NTQsIDB4ZDIsIDB4NTgsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4NjIsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4NTEsCisweDE0LCAweDYwLCAweDQ2LCAweDE0LCAweDYwLCAweDYyLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDE3LCAweDAzLCAweGQyLCAweDU5LCAweDc1LAorMHg1NSwgMHgwMSwgMHg5MCwgMHgwMiwgMHhhMiwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHhhMywgMHhlMCwgMHgyMCwgMHhlNywgMHgyMiwgMHg5MCwgMHgwNCwKKzB4MzQsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MWIsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MTYsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MTEsIDB4N2YsCisweDIwLCAweDEyLCAweDE2LCAweDNmLCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDU0LCAweGYzLCAweGYwLCAweDc1LCAweDUxLCAweDAxLCAweDgwLCAweDczLAorMHhlNSwgMHg1MCwgMHg3MCwgMHgwNSwgMHg3NSwgMHg2MiwgMHgwMywgMHg4MCwgMHg2YSwgMHg5MCwgMHgxMiwgMHgwMCwgMHhlMCwgMHg1NCwgMHgwMywgMHg3MCwKKzB4MTEsIDB4N2YsIDB4MjAsIDB4MTIsIDB4MTYsIDB4M2YsIDB4OTAsIDB4MDIsIDB4YTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4NzUsIDB4NTEsIDB4MDIsCisweDgwLCAweDUxLCAweGU1LCAweDUwLCAweDcwLCAweDAyLCAweDgwLCAweDQ2LCAweDkwLCAweDAyLCAweGEzLCAweGUwLCAweDIwLCAweGU2LCAweDNiLCAweDkwLAorMHgwNCwgMHgzNywgMHhlMCwgMHg2NCwgMHgyMiwgMHg3MCwgMHgzMywgMHg5MCwgMHgwMSwgMHg4YSwgMHg3NCwgMHg3ZSwgMHhmMCwgMHg5MCwgMHgwMSwgMHg5NiwKKzB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTAsIDB4MTMsIDB4MjgsIDB4ZTAsIDB4NTQsIDB4ZjAsIDB4ZjAsIDB4YTMsIDB4ZTAsCisweDU0LCAweGYwLCAweGYwLCAweGEzLCAweGUwLCAweDU0LCAweGZhLCAweGYwLCAweDkwLCAweDA0LCAweDAxLCAweGUwLCAweDU0LCAweGY5LCAweGYwLCAweDc1LAorMHg2MiwgMHgwMSwgMHg3NSwgMHg1NSwgMHgwMiwgMHhlNCwgMHhmNSwgMHg1MSwgMHg4MCwgMHgwOSwgMHhlNSwgMHg1MCwgMHg3MCwgMHgwNSwgMHg3NSwgMHg2MiwKKzB4MDMsIDB4ZjUsIDB4NTEsIDB4ZTUsIDB4NjIsIDB4NjAsIDB4MTUsIDB4YzIsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4NTEsIDB4YzIsIDB4NTksIDB4YWQsIDB4NjIsCisweGFmLCAweDQwLCAweDEyLCAweDE3LCAweDhkLCAweGU1LCAweDYyLCAweGI0LCAweDAzLCAweDAyLCAweGQyLCAweDAzLCAweGQyLCAweGFmLCAweDIyLCAweGMyLAorMHhhZiwgMHgzMCwgMHgwMSwgMHgxMiwgMHhlNCwgMHg5MCwgMHgwMSwgMHg5NiwgMHhmMCwgMHhmNSwgMHg1MSwgMHhjMiwgMHg1OSwgMHhjMiwgMHgwMSwgMHg3ZCwKKzB4MDIsIDB4YWYsIDB4NDAsIDB4MTIsIDB4MTcsIDB4OGQsIDB4ZTUsIDB4NTIsIDB4MTQsIDB4NjAsIDB4MDksIDB4MDQsIDB4NzAsIDB4NGMsIDB4NzUsIDB4NTIsCisweDAxLCAweDc1LCAweDU1LCAweDAzLCAweDkwLCAweDA0LCAweDAxLCAweGUwLCAweDQ0LCAweDBlLCAweGYwLCAweDkwLCAweDEzLCAweDI4LCAweGUwLCAweDQ0LAorMHgwZiwgMHhmMCwgMHhhMywgMHhlMCwgMHg0NCwgMHgwZiwgMHhmMCwgMHhhMywgMHhlMCwgMHg0NCwgMHgwNSwgMHhmMCwgMHg5MCwgMHgxMiwgMHgwNCwgMHg3NCwKKzB4MDMsIDB4ZjAsIDB4OTAsIDB4MDIsIDB4YTIsIDB4ZTAsIDB4NDQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MGMsIDB4ZjAsCisweGU0LCAweGY1LCAweDUyLCAweGY1LCAweDU1LCAweDMwLCAweDAyLCAweDBiLCAweGMyLCAweDAyLCAweDdkLCAweDAxLCAweGFmLCAweDQxLCAweDEyLCAweDE3LAorMHg4ZCwgMHg4MCwgMHgwMiwgMHhjMiwgMHgwMywgMHhlNCwgMHg5MCwgMHgwMSwgMHg5NiwgMHhmMCwgMHhkMiwgMHhhZiwgMHgyMiwgMHhlZiwgMHhmNCwgMHg2MCwKKzB4MmQsIDB4ZTQsIDB4ZmUsIDB4NzQsIDB4MTQsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4YjQsIDB4ZmYsCisweDE5LCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDc0LCAweDFjLCAweDJlLAorMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZCwgMHhmMCwgMHgyMiwgMHgwZSwgMHhiZSwgMHgwNCwgMHhkNSwgMHgyMiwgMHgyMiwKKzB4MjIsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4NGQsIDB4YzIsIDB4YWYsIDB4OTAsIDB4NzAsIDB4MjgsIDB4ZTAsIDB4OTAsIDB4MTAsCisweDFjLCAweGYwLCAweDkwLCAweDcwLCAweDI5LCAweGUwLCAweDkwLCAweDEwLCAweDFkLCAweGYwLCAweDkwLCAweDcwLCAweDJhLCAweGUwLCAweDkwLCAweDEwLAorMHgxZSwgMHhmMCwgMHg5MCwgMHgxMCwgMHgxYywgMHhlMCwgMHhmNSwgMHg2MiwgMHg5MCwgMHgxMCwgMHgxZSwgMHhlMCwgMHgyMCwgMHhlMSwgMHhmMywgMHg5MCwKKzB4MTAsIDB4MWMsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MjgsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWQsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MjksIDB4ZjAsIDB4OTAsCisweDEwLCAweDFlLCAweGUwLCAweDkwLCAweDcwLCAweDJhLCAweGYwLCAweDMwLCAweDRhLCAweDA3LCAweDkwLCAweDcwLCAweDI0LCAweGUwLCAweDQ0LCAweDAxLAorMHhmMCwgMHhjMiwgMHgwNSwgMHhkMiwgMHhhZiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg5YiwgMHhjMCwgfSA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2xlYXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbGVhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MThjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2xlYXAuaApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlsZWFwLmgKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlOYW1lCQlEYXRlCQkJTW9kaWZpY2F0aW9uIGxvZ3MKKyovCisjaWZuZGVmIF9fTEVBUF9IX18KKyNkZWZpbmUgX19MRUFQX0hfXworCisvLyBNZXNzYWdlcyBmb3IgQXNzb2NpYXRlIHN0YXRlIG1hY2hpbmUKKyNkZWZpbmUgTEVBUF9NQUNISU5FX0JBU0UgICAgICAgICAgICAgICAgICAgMzAKKworI2RlZmluZSBMRUFQX01TR19SRVFVRVNUX0lERU5USVRZICAgICAgICAgICAzMQorI2RlZmluZSBMRUFQX01TR19SRVFVRVNUX0xFQVAgICAgICAgICAgICAgICAzMgorI2RlZmluZSBMRUFQX01TR19TVUNDRVNTICAgICAgICAgICAgICAgICAgICAzMworI2RlZmluZSBMRUFQX01TR19GQUlMRUQgICAgICAgICAgICAgICAgICAgICAzNAorI2RlZmluZSBMRUFQX01TR19SRVNQT05TRV9MRUFQICAgICAgICAgICAgICAzNQorI2RlZmluZSBMRUFQX01TR19FQVBPTEtFWSAgICAgICAgICAgICAgICAgICAzNgorI2RlZmluZSBMRUFQX01TR19VTktOT1dOICAgICAgICAgICAgICAgICAgICAzNworI2RlZmluZSBMRUFQX01TRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAzOAorLy8hIGFzc29jIHN0YXRlLW1hY2hpbmUgc3RhdGVzCisjZGVmaW5lIExFQVBfSURMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTEVBUF9XQUlUX0lERU5USVRZX1JFUVVFU1QgICAgICAgICAgMQorI2RlZmluZSBMRUFQX1dBSVRfQ0hBTkxMRU5HRV9SRVFVRVNUICAgICAgICAyCisjZGVmaW5lIExFQVBfV0FJVF9TVUNDRVNTICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTEVBUF9XQUlUX0NIQU5MTEVOR0VfUkVTUE9OU0UgICAgICAgNAorI2RlZmluZSBMRUFQX1dBSVRfRUFQT0xLRVkgICAgICAgICAgICAgICAgICA1CisKKyNkZWZpbmUgTEVBUF9SRUFTT05fSU5WQUxJRF9BVVRIICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIExFQVBfUkVBU09OX0FVVEhfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBMRUFQX1JFQVNPTl9DSEFMTEVOR0VfRlJPTV9BUF9GQUlMRUQgICAgICAgIDB4MDMKKyNkZWZpbmUgTEVBUF9SRUFTT05fQ0hBTExFTkdFX1RPX0FQX0ZBSUxFRCAgICAgICAgICAweDA0CisKKyNkZWZpbmUgQ0lTQ09fQXV0aE1vZGVMRUFQICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIENJU0NPX0F1dGhNb2RlTEVBUE5vbmUgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBMRUFQX0FVVEhfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwMDAwCisjZGVmaW5lIExFQVBfQ0hBTExFTkdFX1JFU1BPTlNFX0xFTkdUSCAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgTEVBUF9DSEFMTEVOR0VfUkVRVUVTVF9MRU5HVEggICAgICAgICAgICAgICA4CisKK3R5cGVkZWYgc3RydWN0IF9MRUFQX0VBUE9MX0hFQURFUl8geworICAgIFVDSEFSICAgICAgIFZlcnNpb247CisgICAgVUNIQVIgICAgICAgVHlwZTsKKyAgICBVQ0hBUiAgICAgICBMZW5ndGhbMl07Cit9IExFQVBfRUFQT0xfSEVBREVSLCAqUExFQVBfRUFQT0xfSEVBREVSOworCit0eXBlZGVmIHN0cnVjdCBfTEVBUF9FQVBPTF9QQUNLRVRfIHsKKyAgICBVQ0hBUiAgICAgICBDb2RlOworICAgIFVDSEFSICAgICAgIElkZW50aWZpZXI7CisgICAgVUNIQVIgICAgICAgTGVuZ3RoWzJdOworICAgIFVDSEFSICAgICAgIFR5cGU7Cit9IExFQVBfRUFQT0xfUEFDS0VULCAqUExFQVBfRUFQT0xfUEFDS0VUOworCit0eXBlZGVmIHN0cnVjdCBfTEVBUF9FQVBfQ09OVEVOVFNfIHsKKyAgICBVQ0hBUiAgICAgICBWZXJzaW9uOworICAgIFVDSEFSICAgICAgIFJlc2VydmVkOworICAgIFVDSEFSICAgICAgIExlbmd0aDsKK30gTEVBUF9FQVBfQ09OVEVOVFMsICpQTEVBUF9FQVBfQ09OVEVOVFM7CisKKy8qKiogRUFQT0wga2V5ICoqKi8KK3R5cGVkZWYgc3RydWN0IF9FQVBPTF9LRVlfSEVBREVSXyB7CisgICAgVUNIQVIgICAgICAgVHlwZTsKKyAgICBVQ0hBUiAgICAgICBMZW5ndGhbMl07CisgICAgVUNIQVIgICAgICAgQ291bnRlcls4XTsKKyAgICBVQ0hBUiAgICAgICBJVlsxNl07CisgICAgVUNIQVIgICAgICAgSW5kZXg7CisgICAgVUNIQVIgICAgICAgU2lnbmF0dXJlWzE2XTsKK30gRUFQT0xfS0VZX0hFQURFUiwgKlBFQVBPTF9LRVlfSEVBREVSOworCitCT09MRUFOIExlYXBNc2dUeXBlU3Vic3QoCisgICAgSU4gIFVDSEFSICAgRUFQVHlwZSwKKyAgICBPVVQgVUxPTkcgICAqTXNnVHlwZSk7CisKK1ZPSUQgTGVhcE1hY2hpbmVQZXJmb3JtQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorICAgIElOIFNUQVRFX01BQ0hJTkUgICAgKlMsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICAqRWxlbSk7CisKK1ZPSUQgTGVhcE1hY0hlYWRlckluaXQoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICAgICAgcEFkLAorICAgIElOICBPVVQgUEhFQURFUl84MDJfMTEgIHBIZHI4MDIxMSwKKyAgICBJTiAgVUNIQVIgICAgICAgICAgICAgICB3ZXAsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICAgICAgcEFkZHIzKTsKKworVk9JRCBMZWFwU3RhcnRBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICAqRWxlbSk7CisKK1ZPSUQgTGVhcElkZW50aXR5QWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAgKkVsZW0pOworCitWT0lEIExlYXBQZWVyQ2hhbGxlbmdlQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAgKkVsZW0pOworCitWT0lEIEhhc2hQd2QoCisgICAgSU4gIFBVQ0hBUiAgcHdkLAorICAgIElOICBJTlQgICAgIHB3ZGxlbiwKKyAgICBPVVQgUFVDSEFSICBoYXNoKTsKKworVk9JRCBQZWVyQ2hhbGxlbmdlUmVzcG9uc2UoCisgICAgSU4gIFBVQ0hBUiAgc3pDaGFsbGVuZ2UsCisgICAgSU4gIFBVQ0hBUiAgc21iUGFzc3dkLAorICAgIE9VVCBQVUNIQVIgIHN6UmVzcG9uc2UpOworCitWT0lEIFBhcml0eUtleSgKKyAgICBPVVQgUFVDSEFSICBzek91dCwKKyAgICBJTiAgUFVDSEFSICBzekluKTsKKworVk9JRCBEZXNLZXkoCisgICAgT1VUIFVMT05HICAga1sxNl1bMl0sCisgICAgSU4gIFBVQ0hBUiAga2V5LAorICAgIElOICBJTlQgICAgIGRlY3J5cHQpOworCitWT0lEIERlcygKKyAgICBJTiAgVUxPTkcgICBrc1sxNl1bMl0sCisgICAgT1VUIFVDSEFSICAgYmxvY2tbOF0pOworCitWT0lEIERlc0VuY3J5cHQoCisgICAgSU4gIFBVQ0hBUiAgc3pDbGVhciwKKyAgICBJTiAgUFVDSEFSICBzektleSwKKyAgICBPVVQgUFVDSEFSICBzek91dCk7CisKK1ZPSUQgTGVhcE5ldHdvcmtDaGFsbGVuZ2VBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICAqRWxlbSk7CisKK1ZPSUQgTGVhcE5ldHdvcmtDaGFsbGVuZ2VSZXNwb25zZSgKKyAgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gICpFbGVtKTsKKworVk9JRCBIYXNocHdkSGFzaCgKKyAgICBJTiAgUFVDSEFSICBoYXNoLAorICAgIElOICBQVUNIQVIgIGhhc2hoYXNoKTsKKworVk9JRCBQcm9jZXNzU2Vzc2lvbktleSgKKyAgICBPVVQgUFVDSEFSICBTZXNzaW9uS2V5LAorICAgIElOICBQVUNIQVIgIGhhc2gyLAorICAgIElOICBQVUNIQVIgIENoYWxsZW5nZVRvUmFkaXVzLAorICAgIElOICBQVUNIQVIgIENoYWxsZW5nZVJlc3BvbnNlRnJvbVJhZGl1cywKKyAgICBJTiAgUFVDSEFSICBDaGFsbGVuZ2VGcm9tUmFkaXVzLAorICAgIElOICBQVUNIQVIgIENoYWxsZW5nZVJlc3BvbnNlVG9SYWRpdXMpOworCitWT0lEIExlYXBFYXBvbEtleUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gICpFbGVtKTsKKworVk9JRCBSb2d1ZUFwVGFibGVJbml0KAorICAgIElOIFJPR1VFQVBfVEFCTEUgICAgKlRhYik7CisKK1VMT05HIFJvZ3VlQXBUYWJsZVNlYXJjaCgKKyAgICBJTiBST0dVRUFQX1RBQkxFICAgICpUYWIsCisgICAgSU4gUFVDSEFSICAgICAgICAgICBwQWRkcik7CisKK1ZPSUQgUm9ndWVBcEVudHJ5U2V0KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIE9VVCBST0dVRUFQX0VOVFJZICAgKnBSb2d1ZUFwLAorICAgIElOIFBVQ0hBUiAgICAgICAgICAgcEFkZHIsCisgICAgSU4gVUNIQVIgICAgICAgICAgICBGYWlsZUNvZGUpOworCitVTE9ORyBSb2d1ZUFwVGFibGVTZXRFbnRyeSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBPVVQgUk9HVUVBUF9UQUJMRSAgKlRhYiwKKyAgICBJTiBQVUNIQVIgICAgICAgICAgIHBBZGRyLAorICAgIElOIFVDSEFSICAgICAgICAgICAgRmFpbGVDb2RlKTsKKworVk9JRCBSb2d1ZUFwVGFibGVEZWxldGVFbnRyeSgKKyAgICBJTiBPVVQgUk9HVUVBUF9UQUJMRSAqVGFiLAorICAgIElOIFBVQ0hBUiAgICAgICAgICBwQWRkcik7CisKK1ZPSUQgTGVhcEF1dGhUaW1lb3V0KAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgTGVhcFNlbmRSb2d1ZUFQUmVwb3J0KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworQk9PTEVBTiBDQ0tNQXNzb2NSc3BTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gVk9JRCAgICAgICAgICAgICAqTXNnLAorICAgIElOIFVMT05HICAgICAgICAgICAgTXNnTGVuKTsKKworI2VuZGlmICAvLyBfX0xFQVBfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL2xpbmtfbGlzdC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9saW5rX2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjUyMTEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9saW5rX2xpc3QuaApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBfX0xJTktfTElTVF9IX18KKyNkZWZpbmUgX19MSU5LX0xJU1RfSF9fCisKK3R5cGVkZWYgc3RydWN0IF9MSVNUX0VOVFJZCit7CisJc3RydWN0IF9MSVNUX0VOVFJZICpwTmV4dDsKK30gTElTVF9FTlRSWSwgKlBMSVNUX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfTElTVF9IRUFEUgoreworCVBMSVNUX0VOVFJZIHBIZWFkOworCVBMSVNUX0VOVFJZIHBUYWlsOworCVVDSEFSIHNpemU7Cit9IExJU1RfSEVBREVSLCAqUExJU1RfSEVBREVSOworCitzdGF0aWMgaW5saW5lIFZPSUQgaW5pdExpc3QoCisJSU4gUExJU1RfSEVBREVSIHBMaXN0KQoreworCXBMaXN0LT5wSGVhZCA9IHBMaXN0LT5wVGFpbCA9IE5VTEw7CisJcExpc3QtPnNpemUgPSAwOworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBWT0lEIGluc2VydFRhaWxMaXN0KAorCUlOIFBMSVNUX0hFQURFUiBwTGlzdCwKKwlJTiBQTElTVF9FTlRSWSBwRW50cnkpCit7CisJcEVudHJ5LT5wTmV4dCA9IE5VTEw7CisJaWYgKHBMaXN0LT5wVGFpbCkKKwkJcExpc3QtPnBUYWlsLT5wTmV4dCA9IHBFbnRyeTsKKwllbHNlCisJCXBMaXN0LT5wSGVhZCA9IHBFbnRyeTsKKwlwTGlzdC0+cFRhaWwgPSBwRW50cnk7CisJcExpc3QtPnNpemUrKzsKKworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBQTElTVF9FTlRSWSByZW1vdmVIZWFkTGlzdCgKKwlJTiBQTElTVF9IRUFERVIgcExpc3QpCit7CisJUExJU1RfRU5UUlkgcE5leHQ7CisJUExJU1RfRU5UUlkgcEVudHJ5OworCisJcEVudHJ5ID0gcExpc3QtPnBIZWFkOworCWlmIChwTGlzdC0+cEhlYWQgIT0gTlVMTCkKKwl7CisJCXBOZXh0ID0gcExpc3QtPnBIZWFkLT5wTmV4dDsKKwkJcExpc3QtPnBIZWFkID0gcE5leHQ7CisJCWlmIChwTmV4dCA9PSBOVUxMKQorCQkJcExpc3QtPnBUYWlsID0gTlVMTDsKKwkJcExpc3QtPnNpemUtLTsKKwl9CisJcmV0dXJuIHBFbnRyeTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0TGlzdFNpemUoCisJSU4gUExJU1RfSEVBREVSIHBMaXN0KQoreworCXJldHVybiBwTGlzdC0+c2l6ZTsKK30KKworc3RhdGljIGlubGluZSBQTElTVF9FTlRSWSBkZWxFbnRyeUxpc3QoCisJSU4gUExJU1RfSEVBREVSIHBMaXN0LAorCUlOIFBMSVNUX0VOVFJZIHBFbnRyeSkKK3sKKwlQTElTVF9FTlRSWSBwQ3VyRW50cnk7CisJUExJU1RfRU5UUlkgcFBydkVudHJ5OworCisJaWYocExpc3QtPnBIZWFkID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJaWYocEVudHJ5ID09IHBMaXN0LT5wSGVhZCkKKwl7CisJCXBDdXJFbnRyeSA9IHBMaXN0LT5wSGVhZDsKKwkJcExpc3QtPnBIZWFkID0gcEN1ckVudHJ5LT5wTmV4dDsKKworCQlpZihwTGlzdC0+cEhlYWQgPT0gTlVMTCkKKwkJCXBMaXN0LT5wVGFpbCA9IE5VTEw7CisKKwkJcExpc3QtPnNpemUtLTsKKwkJcmV0dXJuIHBDdXJFbnRyeTsKKwl9CisKKwlwUHJ2RW50cnkgPSBwTGlzdC0+cEhlYWQ7CisJcEN1ckVudHJ5ID0gcFBydkVudHJ5LT5wTmV4dDsKKwl3aGlsZShwQ3VyRW50cnkgIT0gTlVMTCkKKwl7CisJCWlmIChwRW50cnkgPT0gcEN1ckVudHJ5KQorCQl7CisJCQlwUHJ2RW50cnktPnBOZXh0ID0gcEN1ckVudHJ5LT5wTmV4dDsKKworCQkJaWYocEVudHJ5ID09IHBMaXN0LT5wVGFpbCkKKwkJCQlwTGlzdC0+cFRhaWwgPSBwUHJ2RW50cnk7CisKKwkJCXBMaXN0LT5zaXplLS07CisJCQlicmVhazsKKwkJfQorCQlwUHJ2RW50cnkgPSBwQ3VyRW50cnk7CisJCXBDdXJFbnRyeSA9IHBQcnZFbnRyeS0+cE5leHQ7CisJfQorCisJcmV0dXJuIHBDdXJFbnRyeTsKK30KKworI2VuZGlmIC8vIF9fX0xJTktfTElTVF9IX18gLy8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbWQ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlNWI1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbWQ0LmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBfX01ENF9IX18KKyNkZWZpbmUgX19NRDRfSF9fCisKKy8qIE1ENCBjb250ZXh0LiAqLwordHlwZWRlZglzdHJ1Y3QJX01ENF9DVFhfCXsKKwlVTE9ORwlzdGF0ZVs0XTsgICAgICAgIC8qIHN0YXRlIChBQkNEKSAqLworCVVMT05HCWNvdW50WzJdOyAgICAgICAgLyogbnVtYmVyIG9mIGJpdHMsIG1vZHVsbyAyXjY0IChsc2IgZmlyc3QpICovCisJVUNIQVIJYnVmZmVyWzY0XTsgICAgICAvKiBpbnB1dCBidWZmZXIgKi8KK30JTUQ0X0NUWDsKKworVk9JRCBNRDRJbml0IChNRDRfQ1RYICopOworVk9JRCBNRDRVcGRhdGUgKE1ENF9DVFggKiwgUFVDSEFSLCBVSU5UKTsKK1ZPSUQgTUQ0RmluYWwgKFVDSEFSIFsxNl0sIE1ENF9DVFggKik7CisKKyNlbmRpZiAvL19fTUQ0X0hfXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbWQ1LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NWRiMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21kNS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCW1kNS5oCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTmFtZQkJRGF0ZQkJCU1vZGlmaWNhdGlvbiBsb2dzCisJamFuCQkJMTAtMjgtMDMJCUluaXRpYWwKKwlSaXRhICAgIAkxMS0yMy0wNAkJTW9kaWZ5IE1ENSBhbmQgU0hBLTEKKyovCisKKyNpZm5kZWYJdWludDgKKyNkZWZpbmUJdWludDggIHVuc2lnbmVkCWNoYXIKKyNlbmRpZgorCisjaWZuZGVmCXVpbnQzMgorI2RlZmluZQl1aW50MzIgdW5zaWduZWQJbG9uZyBpbnQKKyNlbmRpZgorCisKKyNpZm5kZWYJX19NRDVfSF9fCisjZGVmaW5lCV9fTUQ1X0hfXworCisjZGVmaW5lIE1ENV9NQUNfTEVOIDE2CisKK3R5cGVkZWYgc3RydWN0IF9NRDVfQ1RYIHsKKyAgICBVSU5UMzIgICBCdWZbNF07ICAgICAgICAgICAgIC8vIGJ1ZmZlcnMgb2YgZm91ciBzdGF0ZXMKKwlVQ0hBUiAgIElucHV0WzY0XTsgICAgICAgICAgLy8gaW5wdXQgbWVzc2FnZQorCVVJTlQzMiAgIExlbkluQml0Q291bnRbMl07ICAgLy8gbGVuZ3RoIGNvdW50ZXIgZm9yIGlucHV0IG1lc3NhZ2UsIDAgdXAgdG8gNjQgYml0cworfSAgIE1ENV9DVFg7CisKK1ZPSUQgTUQ1SW5pdChNRDVfQ1RYICpwQ3R4KTsKK1ZPSUQgTUQ1VXBkYXRlKE1ENV9DVFggKnBDdHgsIFVDSEFSICpwRGF0YSwgVUlOVDMyIExlbkluQnl0ZXMpOworVk9JRCBNRDVGaW5hbChVQ0hBUiBEaWdlc3RbMTZdLCBNRDVfQ1RYICpwQ3R4KTsKK1ZPSUQgTUQ1VHJhbnNmb3JtKFVJTlQzMiBCdWZbNF0sIFVJTlQzMiBNZXNbMTZdKTsKKwordm9pZCBtZDVfbWFjKHU4ICprZXksIHNpemVfdCBrZXlfbGVuLCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWFjKTsKK3ZvaWQgaG1hY19tZDUodTggKmtleSwgc2l6ZV90IGtleV9sZW4sIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptYWMpOworCisvLworLy8gU0hBIGNvbnRleHQKKy8vCit0eXBlZGVmCXN0cnVjdCBfU0hBX0NUWAoreworCVVJTlQzMiAgIEJ1Zls1XTsgICAgICAgICAgICAgLy8gYnVmZmVycyBvZiBmaXZlIHN0YXRlcworCVVDSEFSICAgSW5wdXRbODBdOyAgICAgICAgICAvLyBpbnB1dCBtZXNzYWdlCisJVUlOVDMyICAgTGVuSW5CaXRDb3VudFsyXTsgICAvLyBsZW5ndGggY291bnRlciBmb3IgaW5wdXQgbWVzc2FnZSwgMCB1cCB0byA2NCBiaXRzCisKK30JU0hBX0NUWDsKKworVk9JRCBTSEFJbml0KFNIQV9DVFggKnBDdHgpOworVUNIQVIgU0hBVXBkYXRlKFNIQV9DVFggKnBDdHgsIFVDSEFSICpwRGF0YSwgVUlOVDMyIExlbkluQnl0ZXMpOworVk9JRCBTSEFGaW5hbChTSEFfQ1RYICpwQ3R4LCBVQ0hBUiBEaWdlc3RbMjBdKTsKK1ZPSUQgU0hBVHJhbnNmb3JtKFVJTlQzMiBCdWZbNV0sIFVJTlQzMiBNZXNbMjBdKTsKKworI2RlZmluZSBTSEFfRElHRVNUX0xFTiAyMAorI2VuZGlmIC8vIF9fTUQ1X0hfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZglfQUVTX0gKKyNkZWZpbmUJX0FFU19ICisKK3R5cGVkZWYJc3RydWN0Cit7CisJdWludDMyIGVya1s2NF07CQkvKiBlbmNyeXB0aW9uIHJvdW5kCWtleXMgKi8KKwl1aW50MzIgZHJrWzY0XTsJCS8qIGRlY3J5cHRpb24gcm91bmQJa2V5cyAqLworCWludAlucjsJCQkJLyogbnVtYmVyIG9mIHJvdW5kcwkqLworfQorYWVzX2NvbnRleHQ7CisKK2ludAkgcnRtcF9hZXNfc2V0X2tleSggYWVzX2NvbnRleHQgKmN0eCwJdWludDggKmtleSwJaW50CW5iaXRzICk7Cit2b2lkIHJ0bXBfYWVzX2VuY3J5cHQoIGFlc19jb250ZXh0ICpjdHgsCXVpbnQ4IGlucHV0WzE2XSwgdWludDggb3V0cHV0WzE2XSApOwordm9pZCBydG1wX2Flc19kZWNyeXB0KCBhZXNfY29udGV4dCAqY3R4LAl1aW50OCBpbnB1dFsxNl0sIHVpbnQ4IG91dHB1dFsxNl0gKTsKKwordm9pZCBGKGNoYXIgKnBhc3N3b3JkLCB1bnNpZ25lZCBjaGFyICpzc2lkLCBpbnQgc3NpZGxlbmd0aCwgaW50IGl0ZXJhdGlvbnMsIGludCBjb3VudCwgdW5zaWduZWQgY2hhciAqb3V0cHV0KTsKK2ludCBQYXNzd29yZEhhc2goY2hhciAqcGFzc3dvcmQsIHVuc2lnbmVkIGNoYXIgKnNzaWQsIGludCBzc2lkbGVuZ3RoLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQpOworCisjZW5kaWYgLyogYWVzLmgJKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tbG1lLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21sbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDAzNWUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tbG1lLmgKQEAgLTAsMCArMSwxNDY4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCW1sbWUuaAorCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUpvaG4gQ2hhbmcJMjAwMy0wOC0yOAkJQ3JlYXRlZAorCUpvaG4gQ2hhbmcgIDIwMDQtMDktMDYgICAgICBtb2RpZmllZCBmb3IgUlQyNjAwCisKKyovCisjaWZuZGVmIF9fTUxNRV9IX18KKyNkZWZpbmUgX19NTE1FX0hfXworCisvL2V4dGVybiBVQ0hBUiBCUk9BRENBU1RfQUREUltdOworCisvLyBtYXhpbXVtIHN1cHBvcnRlZCBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIC0KKy8vIEVTUywgSUJTUywgUHJpdmFjeSwgU2hvcnQgUHJlYW1ibGUsIFNwZWN0cnVtIG1nbXQsIFNob3J0IFNsb3QKKyNkZWZpbmUgU1VQUE9SVEVEX0NBUEFCSUxJVFlfSU5GTyAgIDB4MDUzMworCisjZGVmaW5lIEVORF9PRl9BUkdTICAgICAgICAgICAgICAgICAtMQorI2RlZmluZSBMRlNSX01BU0sgICAgICAgICAgICAgICAgICAgMHg4MDAwMDA1NworI2RlZmluZSBNTE1FX1RBU0tfRVhFQ19JTlRWICAgICAgICAgMTAwLyoyMDAqLyAgICAgICAvLworI2RlZmluZSBMRUFEX1RJTUUgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBNTE1FX1RBU0tfRVhFQ19NVUxUSVBMRSAgICAgICAxMCAgLyo1Ki8gICAgICAgLy8gTUxNRV9UQVNLX0VYRUNfTVVMVElQTEUgKiBNTE1FX1RBU0tfRVhFQ19JTlRWID0gMSBzZWMKKyNkZWZpbmUgUkVPUkRFUl9FWEVDX0lOVFYgICAgICAgICAJMTAwICAgICAgIC8vIDAuMSBzZWMKKy8vI2RlZmluZSBUQlRUX1BSRUxPQURfVElNRSAgICAgICAgIDM4NCAgICAgICAgLy8gdXNlYy4gTG9tZ1ByZWFtYmxlICsgMjQtYnl0ZSBhdCAxTWJwcworCisvLyBUaGUgZGVmaW5pdGlvbiBvZiBSYWRhciBkZXRlY3Rpb24gZHVyYXRpb24gcmVnaW9uCisjZGVmaW5lIENFCQkwCisjZGVmaW5lIEZDQwkJMQorI2RlZmluZSBKQVAJCTIKKyNkZWZpbmUgSkFQX1c1MwkzCisjZGVmaW5lIEpBUF9XNTYJNAorI2RlZmluZSBNQVhfUkRfUkVHSU9OIDUKKworI2lmZGVmCU5ESVM1MV9NSU5JUE9SVAorI2RlZmluZSBCRUFDT05fTE9TVF9USU1FICAgICAgICAgICAgNDAwMCAgICAgICAvLyAyMDQ4IG1zZWMgPSAyIHNlYworI2Vsc2UKKyNkZWZpbmUgQkVBQ09OX0xPU1RfVElNRSAgICAgICAgICAgIDQgKiBPU19IWiAgICAvLyAyMDQ4IG1zZWMgPSAyIHNlYworI2VuZGlmCisKKyNkZWZpbmUgRExTX1RJTUVPVVQgICAgICAgICAgICAgICAgIDEyMDAgICAgICAvLyB1bml0OiBtc2VjCisjZGVmaW5lIEFVVEhfVElNRU9VVCAgICAgICAgICAgICAgICAzMDAgICAgICAgLy8gdW5pdDogbXNlYworI2RlZmluZSBBU1NPQ19USU1FT1VUICAgICAgICAgICAgICAgMzAwICAgICAgIC8vIHVuaXQ6IG1zZWMKKyNkZWZpbmUgSk9JTl9USU1FT1VUICAgICAgICAgICAgICAgIDIgKiBPU19IWiAgICAgIC8vIHVuaXQ6IG1zZWMKKyNkZWZpbmUgU0hPUlRfQ0hBTk5FTF9USU1FICAgICAgICAgIDkwICAgICAgICAvLyB1bml0OiBtc2VjCisjZGVmaW5lIE1JTl9DSEFOTkVMX1RJTUUgICAgICAgICAgICAxMTAgICAgICAgIC8vIHVuaXQ6IG1zZWMsIGZvciBkdWFsIGJhbmQgc2NhbgorI2RlZmluZSBNQVhfQ0hBTk5FTF9USU1FICAgICAgICAgICAgMTQwICAgICAgIC8vIHVuaXQ6IG1zZWMsIGZvciBzaW5nbGUgYmFuZCBzY2FuCisjZGVmaW5lCUZBU1RfQUNUSVZFX1NDQU5fVElNRQkgICAgMzAgCQkgIC8vIEFjdGl2ZSBzY2FuIHdhaXRpbmcgZm9yIHByb2JlIHJlc3BvbnNlIHRpbWUKKyNkZWZpbmUgQ1dfTUlOX0lOX0JJVFMgICAgICAgICAgICAgIDQgICAgICAgICAvLyBhY3R1YWwgQ3dNaW4gPSAyXkNXX01JTl9JTl9CSVRTIC0gMQorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZm5kZWYgQ09ORklHX0FQX1NVUFBPUlQKKyNkZWZpbmUgQ1dfTUFYX0lOX0JJVFMgICAgICAgICAgICAgIDEwICAgICAgICAvLyBhY3R1YWwgQ3dNYXggPSAyXkNXX01BWF9JTl9CSVRTIC0gMQorI2VuZGlmCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVAorZXh0ZXJuIFVJTlQzMiBDV19NQVhfSU5fQklUUzsKKyNlbmRpZiAvLyBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVCAvLworCisvLyBOb3RlOiBSU1NJX1RPX0RCTV9PRkZTRVQgaGFzIGJlZW4gY2hhbmdlZCB0byB2YXJpYWJsZSBmb3IgbmV3IFJGICgyMDA0LTA3MjApLgorLy8gU0hvdWxkIG5vdCByZWZlciB0byB0aGlzIGNvbnN0YW50IGFueW1vcmUKKy8vI2RlZmluZSBSU1NJX1RPX0RCTV9PRkZTRVQgICAgICAgICAgMTIwIC8vIGZvciBSVDI1MzAgUlNTSS0xMTUgPSBkQm0KKyNkZWZpbmUgUlNTSV9GT1JfTUlEX1RYX1BPV0VSICAgICAgIC01NSAgLy8gLTU1IGRiIGlzIGNvbnNpZGVyZWQgbWlkLWRpc3RhbmNlCisjZGVmaW5lIFJTU0lfRk9SX0xPV19UWF9QT1dFUiAgICAgICAtNDUgIC8vIC00NSBkYiBpcyBjb25zaWRlcmVkIHZlcnkgc2hvcnQgZGlzdGFuY2UgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWxpZ2libGUgdG8gdXNlIGEgbG93ZXIgVFggcG93ZXIKKyNkZWZpbmUgUlNTSV9GT1JfTE9XRVNUX1RYX1BPV0VSICAgIC0zMAorLy8jZGVmaW5lIE1JRF9UWF9QT1dFUl9ERUxUQSAgICAgICAgICAwICAgLy8gMCBkYiBmcm9tIGZ1bGwgVFggcG93ZXIgdXBvbiBtaWQtZGlzdGFuY2UgdG8gQVAKKyNkZWZpbmUgTE9XX1RYX1BPV0VSX0RFTFRBICAgICAgICAgIDYgICAgLy8gLTMgZGIgZnJvbSBmdWxsIFRYIHBvd2VyIHVwb24gdmVyeSBzaG9ydCBkaXN0YW5jZS4gMSBncmFkZSBpcyAwLjUgZGIKKyNkZWZpbmUgTE9XRVNUX1RYX1BPV0VSX0RFTFRBICAgICAgIDE2ICAgLy8gLTggZGIgZnJvbSBmdWxsIFRYIHBvd2VyIHVwb24gc2hvcnRlc3QgZGlzdGFuY2UuIDEgZ3JhZGUgaXMgMC41IGRiCisKKyNkZWZpbmUgUlNTSV9UUklHR0VSRURfVVBPTl9CRUxPV19USFJFU0hPTEQgICAgIDAKKyNkZWZpbmUgUlNTSV9UUklHR0VSRURfVVBPTl9FWENDRUVEX1RIUkVTSE9MRCAgIDEKKyNkZWZpbmUgUlNTSV9USFJFU0hPTERfRk9SX1JPQU1JTkcgICAgICAgICAgICAgIDI1CisjZGVmaW5lIFJTU0lfREVMVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1CisKKy8vIENoYW5uZWwgUXVhbGl0eSBJbmRpY2F0aW9uCisjZGVmaW5lIENRSV9JU19HT09EKGNxaSkgICAgICAgICAgICAoKGNxaSkgPj0gNTApCisvLyNkZWZpbmUgQ1FJX0lTX0ZBSVIoY3FpKSAgICAgICAgICAoKChjcWkpID49IDIwKSAmJiAoKGNxaSkgPCA1MCkpCisjZGVmaW5lIENRSV9JU19QT09SKGNxaSkgICAgICAgICAgICAoY3FpIDwgNTApICAvLygoKGNxaSkgPj0gNSkgJiYgKChjcWkpIDwgMjApKQorI2RlZmluZSBDUUlfSVNfQkFEKGNxaSkgICAgICAgICAgICAgKGNxaSA8IDUpCisjZGVmaW5lIENRSV9JU19ERUFEKGNxaSkgICAgICAgICAgICAoY3FpID09IDApCisKKy8vIHdlaWdodGluZyBmYWN0b3IgdG8gY2FsY3VsYXRlIENoYW5uZWwgcXVhbGl0eSwgdG90YWwgc2hvdWxkIGJlIDEwMCUKKyNkZWZpbmUgUlNTSV9XRUlHSFRJTkcgICAgICAgICAgICAgICAgICAgNTAKKyNkZWZpbmUgVFhfV0VJR0hUSU5HICAgICAgICAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgUlhfV0VJR0hUSU5HICAgICAgICAgICAgICAgICAgICAgMjAKKworLy8jZGVmaW5lIFBFRVJfS0VZX05PVF9VU0VEICAgICAgICAgICAgICAgIDAKKy8vI2RlZmluZSBQRUVSX0tFWV82NF9CSVQgICAgICAgICAgICAgICAgICA2NAorLy8jZGVmaW5lIFBFRVJfS0VZXzEyOF9CSVQgICAgICAgICAgICAgICAgIDEyOAorCisvLyNkZWZpbmUgUEVFUl9LRVlfNjRCSVRfTEVOICAgICAgICAgICAgICAgOAorLy8jZGVmaW5lIFBFRVJfS0VZXzEyOEJJVF9MRU4gICAgICAgICAgICAgIDE2CisKKyNkZWZpbmUgQlNTX05PVF9GT1VORCAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRgorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNkZWZpbmUgTUFYX0xFTl9PRl9NTE1FX1FVRVVFICAgICAgICAgICAgNDAgLy8xMAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjZGVmaW5lIFNDQU5fUEFTU0lWRSAgICAgICAgICAgICAgICAgICAgIDE4CQkvLyBzY2FuIHdpdGggbm8gcHJvYmUgcmVxdWVzdCwgb25seSB3YWl0IGJlYWNvbiBhbmQgcHJvYmUgcmVzcG9uc2UKKyNkZWZpbmUgU0NBTl9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgMTkJCS8vIHNjYW4gd2l0aCBwcm9iZSByZXF1ZXN0LCBhbmQgd2FpdCBiZWFjb24gYW5kIHByb2JlIHJlc3BvbnNlCisjZGVmaW5lCVNDQU5fQ0lTQ09fUEFTU0lWRQkJCQkgMjAJCS8vIFNpbmdsZSBjaGFubmVsIHBhc3NpdmUgc2NhbgorI2RlZmluZQlTQ0FOX0NJU0NPX0FDVElWRQkJCQkgMjEJCS8vIFNpbmdsZSBjaGFubmVsIGFjdGl2ZSBzY2FuCisjZGVmaW5lCVNDQU5fQ0lTQ09fTk9JU0UJCQkJIDIyCQkvLyBTaW5nbGUgY2hhbm5lbCBwYXNzaXZlIHNjYW4gZm9yIG5vaXNlIGhpc3RvZ3JhbSBjb2xsZWN0aW9uCisjZGVmaW5lCVNDQU5fQ0lTQ09fQ0hBTk5FTF9MT0FECQkJIDIzCQkvLyBTaW5nbGUgY2hhbm5lbCBwYXNzaXZlIHNjYW4gZm9yIGNoYW5uZWwgbG9hZCBjb2xsZWN0aW9uCisjZGVmaW5lIEZBU1RfU0NBTl9BQ1RJVkUgICAgICAgICAgICAgICAgIDI0CQkvLyBzY2FuIHdpdGggcHJvYmUgcmVxdWVzdCwgYW5kIHdhaXQgYmVhY29uIGFuZCBwcm9iZSByZXNwb25zZQorCisjaWZkZWYgRE9UMTFOX0RSQUZUMworI2RlZmluZSBTQ0FOXzIwNDBfQlNTX0NPRVhJU1QgICAgICAgICAgICAgICAgICAyNgorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKworLy8jZGVmaW5lIEJTU19UQUJMRV9FTVBUWSh4KSAgICAgICAgICAgICAoKHgpLkJzc05yID09IDApCisjZGVmaW5lIE1BQ19BRERSX0lTX0dST1VQKEFkZHIpICAgICAgICgoKEFkZHJbMF0pICYgMHgwMSkpCisjZGVmaW5lIE1BQ19BRERSX0hBU0goQWRkcikgICAgICAgICAgICAoQWRkclswXSBeIEFkZHJbMV0gXiBBZGRyWzJdIF4gQWRkclszXSBeIEFkZHJbNF0gXiBBZGRyWzVdKQorI2RlZmluZSBNQUNfQUREUl9IQVNIX0lOREVYKEFkZHIpICAgICAgKE1BQ19BRERSX0hBU0goQWRkcikgJSBIQVNIX1RBQkxFX1NJWkUpCisjZGVmaW5lIFRJRF9NQUNfSEFTSChBZGRyLFRJRCkgICAgICAgICAgICAoVElEXkFkZHJbMF0gXiBBZGRyWzFdIF4gQWRkclsyXSBeIEFkZHJbM10gXiBBZGRyWzRdIF4gQWRkcls1XSkKKyNkZWZpbmUgVElEX01BQ19IQVNIX0lOREVYKEFkZHIsVElEKSAgICAgIChUSURfTUFDX0hBU0goQWRkcixUSUQpICUgSEFTSF9UQUJMRV9TSVpFKQorCisvLyBMRUQgQ29udHJvbAorLy8gYXNzb2lhdGlvbiBPTi4gb25lIExFRCBPTi4gYW5vdGhlciBibGlua2luZyB3aGVuIFRYLCBPRkYgd2hlbiBpZGxlCisvLyBubyBhc3NvY2lhdGlvbiwgYm90aCBMRUQgb2ZmCisjZGVmaW5lIEFTSUNfTEVEX0FDVF9PTihwQWQpICAgICAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfQ1NSMTQsIDB4MDAwMzFlNDYpCisjZGVmaW5lIEFTSUNfTEVEX0FDVF9PRkYocEFkKSAgICAgICBSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfQ1NSMTQsIDB4MDAwMDFlNDYpCisKKy8vIGJpdCBkZWZpbml0aW9uIG9mIHRoZSAyLWJ5dGUgcEJFQUNPTi0+Q2FwYWJpbGl0eSBmaWVsZAorI2RlZmluZSBDQVBfSVNfRVNTX09OKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDAwMSkgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX0lCU1NfT04oeCkgICAgICAgICAgICAgICAgKCgoeCkgJiAweDAwMDIpICE9IDApCisjZGVmaW5lIENBUF9JU19DRl9QT0xMQUJMRV9PTih4KSAgICAgICAgICgoKHgpICYgMHgwMDA0KSAhPSAwKQorI2RlZmluZSBDQVBfSVNfQ0ZfUE9MTF9SRVFfT04oeCkgICAgICAgICAoKCh4KSAmIDB4MDAwOCkgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX1BSSVZBQ1lfT04oeCkgICAgICAgICAgICAgKCgoeCkgJiAweDAwMTApICE9IDApCisjZGVmaW5lIENBUF9JU19TSE9SVF9QUkVBTUJMRV9PTih4KSAgICAgICgoKHgpICYgMHgwMDIwKSAhPSAwKQorI2RlZmluZSBDQVBfSVNfUEJDQ19PTih4KSAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDA0MCkgIT0gMCkKKyNkZWZpbmUgQ0FQX0lTX0FHSUxJVFlfT04oeCkgICAgICAgICAgICAgKCgoeCkgJiAweDAwODApICE9IDApCisjZGVmaW5lIENBUF9JU19TUEVDVFJVTV9NR01UKHgpICAgICAgICAgICgoKHgpICYgMHgwMTAwKSAhPSAwKSAgLy8gODAyLjExZSBkOQorI2RlZmluZSBDQVBfSVNfUU9TKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MDIwMCkgIT0gMCkgIC8vIDgwMi4xMWUgZDkKKyNkZWZpbmUgQ0FQX0lTX1NIT1JUX1NMT1QoeCkgICAgICAgICAgICAgKCgoeCkgJiAweDA0MDApICE9IDApCisjZGVmaW5lIENBUF9JU19BUFNEKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgwODAwKSAhPSAwKSAgLy8gODAyLjExZSBkOQorI2RlZmluZSBDQVBfSVNfSU1NRURfQkEoeCkgICAgICAgICAgICAgICAoKCh4KSAmIDB4MTAwMCkgIT0gMCkgIC8vIDgwMi4xMWUgZDkKKyNkZWZpbmUgQ0FQX0lTX0RTU1NfT0ZETSh4KSAgICAgICAgICAgICAgKCgoeCkgJiAweDIwMDApICE9IDApCisjZGVmaW5lIENBUF9JU19ERUxBWV9CQSh4KSAgICAgICAgICAgICAgICgoKHgpICYgMHg0MDAwKSAhPSAwKSAgLy8gODAyLjExZSBkOQorCisjZGVmaW5lIENBUF9HRU5FUkFURShlc3MsaWJzcyxwcml2LHNfcHJlLHNfc2xvdCxzcGVjdHJ1bSkgICgoKGVzcykgPyAweDAwMDEgOiAweDAwMDApIHwgKChpYnNzKSA/IDB4MDAwMiA6IDB4MDAwMCkgfCAoKHByaXYpID8gMHgwMDEwIDogMHgwMDAwKSB8ICgoc19wcmUpID8gMHgwMDIwIDogMHgwMDAwKSB8ICgoc19zbG90KSA/IDB4MDQwMCA6IDB4MDAwMCkgfCAoKHNwZWN0cnVtKSA/IDB4MDEwMCA6IDB4MDAwMCkpCisKKy8vI2RlZmluZSBTVEFfUU9TX0NBUEFCSUxJVFkgICAgICAgICAgICAgICAwIC8vIDEtYnl0ZS4gc2VlIDgwMi4xMWUgZDkuMCBmb3IgYml0IGRlZmluaXRpb24KKworI2RlZmluZSBFUlBfSVNfTk9OX0VSUF9QUkVTRU5UKHgpICAgICAgICAoKCh4KSAmIDB4MDEpICE9IDApICAgIC8vIDgwMi4xMWcKKyNkZWZpbmUgRVJQX0lTX1VTRV9QUk9URUNUSU9OKHgpICAgICAgICAgKCgoeCkgJiAweDAyKSAhPSAwKSAgICAvLyA4MDIuMTFnCisjZGVmaW5lIEVSUF9JU19VU0VfQkFSS0VSX1BSRUFNQkxFKHgpICAgICgoKHgpICYgMHgwNCkgIT0gMCkgICAgLy8gODAyLjExZworCisjZGVmaW5lIERSU19UWF9RVUFMSVRZX1dPUlNUX0JPVU5EICAgICAgIDgvLyAzICAvLyBqdXN0IHRlc3QgYnkgZ2FyeQorI2RlZmluZSBEUlNfUEVOQUxUWSAgICAgICAgICAgICAgICAgICAgICA4CisKKyNkZWZpbmUgQkFfTk9UVVNFIAkyCisvL0JBIFBvbGljeSBzdWJmaWxlZCB2YWx1ZSBpbiBBRERCQSBmcmFtZQorI2RlZmluZSBJTU1FRF9CQSAJMQorI2RlZmluZSBERUxBWV9CQQkwCisKKy8vIEJBIEluaXRpYXRvciBzdWJmaWVsZCBpbiBERUxCQSBmcmFtZQorI2RlZmluZSBPUklHSU5BVE9SCTEKKyNkZWZpbmUgUkVDSVBJRU5UCTAKKworLy8gQUREQkEgU3RhdHVzIENvZGUKKyNkZWZpbmUgQUREQkFfUkVTVUxUQ09ERV9TVUNDRVNTCQkJCQkwCisjZGVmaW5lIEFEREJBX1JFU1VMVENPREVfUkVGVVNFRAkJCQkJMzcKKyNkZWZpbmUgQUREQkFfUkVTVUxUQ09ERV9JTlZBTElEX1BBUkFNRVRFUlMJCQkzOAorCisvLyBERUxCQSBSZWFzb24gQ29kZQorI2RlZmluZSBERUxCQV9SRUFTT05DT0RFX1FTVEFfTEVBVklORwkJCQkzNgorI2RlZmluZSBERUxCQV9SRUFTT05DT0RFX0VORF9CQQkJCQkJCTM3CisjZGVmaW5lIERFTEJBX1JFQVNPTkNPREVfVU5LTk9XTl9CQQkJCQkJMzgKKyNkZWZpbmUgREVMQkFfUkVBU09OQ09ERV9USU1FT1VUCQkJCQkzOQorCisvLyByZXNldCBhbGwgT25lU2VjVHggY291bnRlcnMKKyNkZWZpbmUgUkVTRVRfT05FX1NFQ19UWF9DTlQoX19wRW50cnkpIFwKK2lmICgoKF9fcEVudHJ5KSkgIT0gTlVMTCkgXAoreyBcCisJKF9fcEVudHJ5KS0+T25lU2VjVHhSZXRyeU9rQ291bnQgPSAwOyBcCisJKF9fcEVudHJ5KS0+T25lU2VjVHhGYWlsQ291bnQgPSAwOyBcCisJKF9fcEVudHJ5KS0+T25lU2VjVHhOb1JldHJ5T2tDb3VudCA9IDA7IFwKK30KKworLy8KKy8vIDgwMi4xMSBmcmFtZSBmb3JtYXRzCisvLworLy8gIEhUIENhcGFiaWxpdHkgSU5GTyBmaWVsZCBpbiBIVCBDYXAgSUUgLgordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVVNIT1JUCUxTSUdUeG9wUHJvU3VwOjE7CisJVVNIT1JUCUZvcnR5X01oel9JbnRvbGVyYW50OjE7CisJVVNIT1JUCVBTTVA6MTsKKwlVU0hPUlQJQ0NLbW9kZWluNDA6MTsKKwlVU0hPUlQJQU1zZHVTaXplOjE7CisJVVNIT1JUCURlbGF5ZWRCQToxOwkvL3J0Mjg2MGMgbm90IHN1cHBvcnQKKwlVU0hPUlQJUnhTVEJDOjI7CisJVVNIT1JUCVR4U1RCQzoxOworCVVTSE9SVAlTaG9ydEdJZm9yNDA6MTsJLy9mb3I0ME1IegorCVVTSE9SVAlTaG9ydEdJZm9yMjA6MTsKKwlVU0hPUlQJR0Y6MTsJLy9ncmVlbiBmaWVsZAorCVVTSE9SVAlNaW1vUHM6MjsvL21vbWkgcG93ZXIgc2FmZQorCVVTSE9SVAlDaGFubmVsV2lkdGg6MTsKKwlVU0hPUlQJQWR2Q29kaW5nOjE7CisjZWxzZQorCVVTSE9SVAlBZHZDb2Rpbmc6MTsKKwlVU0hPUlQJQ2hhbm5lbFdpZHRoOjE7CisJVVNIT1JUCU1pbW9QczoyOy8vbW9taSBwb3dlciBzYWZlCisJVVNIT1JUCUdGOjE7CS8vZ3JlZW4gZmllbGQKKwlVU0hPUlQJU2hvcnRHSWZvcjIwOjE7CisJVVNIT1JUCVNob3J0R0lmb3I0MDoxOwkvL2ZvcjQwTUh6CisJVVNIT1JUCVR4U1RCQzoxOworCVVTSE9SVAlSeFNUQkM6MjsKKwlVU0hPUlQJRGVsYXllZEJBOjE7CS8vcnQyODYwYyBub3Qgc3VwcG9ydAorCVVTSE9SVAlBTXNkdVNpemU6MTsJLy8gb25seSBzdXBwb3J0IGFzIHplcm8KKwlVU0hPUlQJQ0NLbW9kZWluNDA6MTsKKwlVU0hPUlQJUFNNUDoxOworCVVTSE9SVAlGb3J0eV9NaHpfSW50b2xlcmFudDoxOworCVVTSE9SVAlMU0lHVHhvcFByb1N1cDoxOworI2VuZGlmCS8qICFSVF9CSUdfRU5ESUFOICovCit9IEhUX0NBUF9JTkZPLCAqUEhUX0NBUF9JTkZPOworCisvLyAgSFQgQ2FwYWJpbGl0eSBJTkZPIGZpZWxkIGluIEhUIENhcCBJRSAuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUglyc3Y6MzsvL21vbWkgcG93ZXIgc2FmZQorCVVDSEFSCU1wZHVEZW5zaXR5OjM7CisJVUNIQVIJTWF4UkFtcGR1RmFjdG9yOjI7CisjZWxzZQorCVVDSEFSCU1heFJBbXBkdUZhY3RvcjoyOworCVVDSEFSCU1wZHVEZW5zaXR5OjM7CisJVUNIQVIJcnN2OjM7Ly9tb21pIHBvd2VyIHNhZmUKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworfSBIVF9DQVBfUEFSTSwgKlBIVF9DQVBfUEFSTTsKKworLy8gIEhUIENhcGFiaWxpdHkgSU5GTyBmaWVsZCBpbiBIVCBDYXAgSUUgLgordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKwlVQ0hBUglNQ1NTZXRbMTBdOworCVVDSEFSCVN1cFJhdGVbMl07ICAvLyB1bml0IDogMU1icHMKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVUNIQVIJcnN2OjM7CisJVUNIQVIJTXBkdURlbnNpdHk6MTsKKwlVQ0hBUglUeFN0cmVhbToyOworCVVDSEFSCVR4UnhOb3RFcXVhbDoxOworCVVDSEFSCVR4TUNTU2V0RGVmaW5lZDoxOworI2Vsc2UKKwlVQ0hBUglUeE1DU1NldERlZmluZWQ6MTsKKwlVQ0hBUglUeFJ4Tm90RXF1YWw6MTsKKwlVQ0hBUglUeFN0cmVhbToyOworCVVDSEFSCU1wZHVEZW5zaXR5OjE7CisJVUNIQVIJcnN2OjM7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCVVDSEFSCXJzdjNbM107Cit9IEhUX01DU19TRVQsICpQSFRfTUNTX1NFVDsKKworLy8gIEhUIENhcGFiaWxpdHkgSU5GTyBmaWVsZCBpbiBIVCBDYXAgSUUgLgordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVVNIT1JUCXJzdjI6NDsKKwlVU0hPUlQJUkRHU3VwcG9ydDoxOwkvL3JldmVyc2UgRGlyZWN0aW9uIEdyYW50ICBzdXBwb3J0CisJVVNIT1JUCVBsdXNIVEM6MTsJLy8rSFRDIGNvbnRyb2wgZmllbGQgc3VwcG9ydAorCVVTSE9SVAlNQ1NGZWVkYmFjazoyOwkvLzA6bm8gTUNTIGZlZWRiYWNrLCAyOnVuc29saWNpdGVkIE1DUyBmZWVkYmFjaywgMzpGdWxsIE1DUyBmZWVkYmFjaywgIDE6cnN2LgorCVVTSE9SVAlyc3Y6NTsvL21vbWkgcG93ZXIgc2FmZQorCVVTSE9SVAlUcmFuVGltZToyOworCVVTSE9SVAlQY286MTsKKyNlbHNlCisJVVNIT1JUCVBjbzoxOworCVVTSE9SVAlUcmFuVGltZToyOworCVVTSE9SVAlyc3Y6NTsvL21vbWkgcG93ZXIgc2FmZQorCVVTSE9SVAlNQ1NGZWVkYmFjazoyOwkvLzA6bm8gTUNTIGZlZWRiYWNrLCAyOnVuc29saWNpdGVkIE1DUyBmZWVkYmFjaywgMzpGdWxsIE1DUyBmZWVkYmFjaywgIDE6cnN2LgorCVVTSE9SVAlQbHVzSFRDOjE7CS8vK0hUQyBjb250cm9sIGZpZWxkIHN1cHBvcnQKKwlVU0hPUlQJUkRHU3VwcG9ydDoxOwkvL3JldmVyc2UgRGlyZWN0aW9uIEdyYW50ICBzdXBwb3J0CisJVVNIT1JUCXJzdjI6NDsKKyNlbmRpZiAvKiBSVF9CSUdfRU5ESUFOICovCit9IEVYVF9IVF9DQVBfSU5GTywgKlBFWFRfSFRfQ0FQX0lORk87CisKKy8vICBIVCBCZWFtZm9ybWluZyBmaWVsZCBpbiBIVCBDYXAgSUUgLgordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9IVF9CRl9DQVB7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVMT05HCXJzdjozOworCVVMT05HCUNoYW5Fc3RpbWF0aW9uOjI7CisJVUxPTkcJQ1NJUm93QkZTdXA6MjsKKwlVTE9ORwlDb21TdGVlckJGQW50U3VwOjI7CisJVUxPTkcJTm9Db21TdGVlckJGQW50U3VwOjI7CisJVUxPTkcJQ1NJQkZBbnRTdXA6MjsKKwlVTE9ORwlNaW5Hcm91cGluZzoyOworCVVMT05HCUV4cENvbUJGOjI7CisJVUxPTkcJRXhwTm9Db21CRjoyOworCVVMT05HCUV4cENTSUZiazoyOworCVVMT05HCUV4cENvbVN0ZWVyQ2FwYWJsZToxOworCVVMT05HCUV4cE5vQ29tU3RlZXJDYXBhYmxlOjE7CisJVUxPTkcJRXhwQ1NJQ2FwYWJsZToxOworCVVMT05HCUNhbGlicmF0aW9uOjI7CisJVUxPTkcJSW1wVHhCRkNhcGFibGU6MTsKKwlVTE9ORwlUeE5EUENhcGFibGU6MTsKKwlVTE9ORwlSeE5EUENhcGFibGU6MTsKKwlVTE9ORwlUeFNvdW5kQ2FwYWJsZToxOworCVVMT05HCVJ4U291bmRDYXBhYmxlOjE7CisJVUxPTkcJVHhCRlJlY0NhcGFibGU6MTsKKyNlbHNlCisJVUxPTkcJVHhCRlJlY0NhcGFibGU6MTsKKwlVTE9ORwlSeFNvdW5kQ2FwYWJsZToxOworCVVMT05HCVR4U291bmRDYXBhYmxlOjE7CisJVUxPTkcJUnhORFBDYXBhYmxlOjE7CisJVUxPTkcJVHhORFBDYXBhYmxlOjE7CisJVUxPTkcJSW1wVHhCRkNhcGFibGU6MTsKKwlVTE9ORwlDYWxpYnJhdGlvbjoyOworCVVMT05HCUV4cENTSUNhcGFibGU6MTsKKwlVTE9ORwlFeHBOb0NvbVN0ZWVyQ2FwYWJsZToxOworCVVMT05HCUV4cENvbVN0ZWVyQ2FwYWJsZToxOworCVVMT05HCUV4cENTSUZiazoyOworCVVMT05HCUV4cE5vQ29tQkY6MjsKKwlVTE9ORwlFeHBDb21CRjoyOworCVVMT05HCU1pbkdyb3VwaW5nOjI7CisJVUxPTkcJQ1NJQkZBbnRTdXA6MjsKKwlVTE9ORwlOb0NvbVN0ZWVyQkZBbnRTdXA6MjsKKwlVTE9ORwlDb21TdGVlckJGQW50U3VwOjI7CisJVUxPTkcJQ1NJUm93QkZTdXA6MjsKKwlVTE9ORwlDaGFuRXN0aW1hdGlvbjoyOworCVVMT05HCXJzdjozOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KK30gSFRfQkZfQ0FQLCAqUEhUX0JGX0NBUDsKKworLy8gIEhUIGFudGVubmEgc2VsZWN0aW9uIGZpZWxkIGluIEhUIENhcCBJRSAuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0hUX0FTX0NBUHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVUNIQVIJcnN2OjE7CisJVUNIQVIJVHhTb3VuZFBQRFU6MTsKKwlVQ0hBUglSeEFTZWw6MTsKKwlVQ0hBUglBbnRJbmRGYms6MTsKKwlVQ0hBUglFeHBDU0lGYms6MTsKKwlVQ0hBUglBbnRJbmRGYmtUeEFTRUw6MTsKKwlVQ0hBUglFeHBDU0lGYmtUeEFTRUw6MTsKKwlVQ0hBUglBbnRTZWxlY3Q6MTsKKyNlbHNlCisJVUNIQVIJQW50U2VsZWN0OjE7CisJVUNIQVIJRXhwQ1NJRmJrVHhBU0VMOjE7CisJVUNIQVIJQW50SW5kRmJrVHhBU0VMOjE7CisJVUNIQVIJRXhwQ1NJRmJrOjE7CisJVUNIQVIJQW50SW5kRmJrOjE7CisJVUNIQVIJUnhBU2VsOjE7CisJVUNIQVIJVHhTb3VuZFBQRFU6MTsKKwlVQ0hBUglyc3Y6MTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCit9IEhUX0FTX0NBUCwgKlBIVF9BU19DQVA7CisKKy8vIERyYWZ0IDEuMCBzZXQgSUUgbGVuZ3RoIDI2LCBidXQgaXMgZXh0ZW5zaWJsZS4uCisjZGVmaW5lIFNJWkVfSFRfQ0FQX0lFCQkyNgorLy8gVGhlIHN0cnVjdHVyZSBmb3IgSFQgQ2FwYWJpbGl0eSBJRS4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfSFRfQ0FQQUJJTElUWV9JRXsKKwlIVF9DQVBfSU5GTwkJSHRDYXBJbmZvOworCUhUX0NBUF9QQVJNCQlIdENhcFBhcm07CisvLwlIVF9NQ1NfU0VUCQlIdE1DU1NldDsKKwlVQ0hBUgkJCU1DU1NldFsxNl07CisJRVhUX0hUX0NBUF9JTkZPCUV4dEh0Q2FwSW5mbzsKKwlIVF9CRl9DQVAJCVR4QkZDYXA7CS8vIGJlYW1mb3JtaW5nIGNhcC4gcnQyODYwYyBub3Qgc3VwcG9ydCBiZWFtZm9ybWluZy4KKwlIVF9BU19DQVAJCUFTQ2FwOwkvL2FudGVubmEgc2VsZWN0aW9uLgorfSBIVF9DQVBBQklMSVRZX0lFLCAqUEhUX0NBUEFCSUxJVFlfSUU7CisKKworLy8gODAyLjExbiBkcmFmdDMgcmVsYXRlZCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuCisvLyA3LjMuMi42MAorI2RlZmluZSBkb3QxMU9CU1NTY2FuUGFzc2l2ZUR3ZWxsCQkJCQkJCTIwCS8vIGluIFRVLiBtaW4gYW1vdW50IG9mIHRpbWUgdGhhdCB0aGUgU1RBIGNvbnRpbm91c2x5IHNjYW5zIGVhY2ggY2hhbm5lbCB3aGVuIHBlcmZvcm1pbmcgYW4gYWN0aXZlIE9CU1Mgc2Nhbi4KKyNkZWZpbmUgZG90MTFPQlNTU2NhbkFjdGl2ZUR3ZWxsCQkJCQkJCTEwCS8vIGluIFRVLm1pbiBhbW91bnQgb2YgdGltZSB0aGF0IHRoZSBTVEEgY29udGlub3VzbHkgc2NhbnMgZWFjaCBjaGFubmVsIHdoZW4gcGVyZm9ybWluZyBhbiBwYXNzaXZlIE9CU1Mgc2Nhbi4KKyNkZWZpbmUgZG90MTFCU1NXaWR0aFRyaWdnZXJTY2FuSW50ZXJ2YWwJCQkJCTMwMCAgLy8gaW4gc2VjLiBtYXggaW50ZXJ2YWwgYmV0d2VlbiBzY2FuIG9wZXJhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIHRvIGRldGVjdCBCU1MgY2hhbm5lbCB3aWR0aCB0cmlnZ2VyIGV2ZW50cy4KKyNkZWZpbmUgZG90MTFPQlNTU2NhblBhc3NpdmVUb3RhbFBlckNoYW5uZWwJCQkJCTIwMAkvLyBpbiBUVS4gbWluIHRvdGFsIGFtb3VudCBvZiB0aW1lIHRoYXQgdGhlIFNUQSBzY2FucyBlYWNoIGNoYW5uZWwgd2hlbiBwZXJmb3JtaW5nIGEgcGFzc2l2ZSBPQlNTIHNjYW4uCisjZGVmaW5lIGRvdDExT0JTU1NjYW5BY3RpdmVUb3RhbFBlckNoYW5uZWwJCQkJCTIwCS8vaW4gVFUuIG1pbiB0b3RhbCBhbW91bnQgb2YgdGltZSB0aGF0IHRoZSBTVEEgc2NhbnMgZWFjaCBjaGFubmVsIHdoZW4gcGVyZm9ybWluZyBhIGFjdGl2ZSBPQlNTIHNjYW4KKyNkZWZpbmUgZG90MTFCU1NXaWR0aENoYW5uZWxUcmFuc2FjdGlvbkRlbGF5RmFjdG9yCQkJNQkvLyBtaW4gcmF0aW8gYmV0d2VlbiB0aGUgZGVsYXkgdGltZSBpbiBwZXJmb3JtaW5nIGEgc3dpdGNoIGZyb20gMjBNSHogQlNTIHRvIDIwLzQwIEJTUyBvcGVyYXRpb24gYW5kIHRoZSBtYXhpbWEKKwkJCQkJCQkJCQkJCQkJCQkvLwlpbnRlcnZhbCBiZXR3ZWVuIG92ZXJsYXBwaW5nIEJTUyBzY2FuIG9wZXJhdGlvbnMuCisjZGVmaW5lIGRvdDExQlNTU2NhbkFjdGl2aXR5VGhyZXNob2xkCQkJCQkJMjUJLy8gaW4gJSUsIG1heCB0b3RhbCB0aW1lIHRoYXQgYSBTVEEgbWF5IGJlIGFjdGl2ZSBvbiB0aGUgbWVkaXVtIGR1cmluZyBhIHBlcmlvZCBvZgorCQkJCQkJCQkJCQkJCQkJCS8vCShkb3QxMUJTU1dpZHRoQ2hhbm5lbFRyYW5zYWN0aW9uRGVsYXlGYWN0b3IgKiBkb3QxMUJTU1dpZHRoVHJpZ2dlclNjYW5JbnRlcnZhbCkgc2Vjb25kcyB3aXRob3V0CisJCQkJCQkJCQkJCQkJCQkJLy8JYmVpbmcgb2JsaWdhdGVkIHRvIHBlcmZvcm0gT0JTUyBTY2FuIG9wZXJhdGlvbnMuIGRlZmF1bHQgaXMgMjUoPT0gMC4yNSUpCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfT1ZFUkxBUF9CU1NfU0NBTl9JRXsKKwlVU0hPUlQJCVNjYW5QYXNzaXZlRHdlbGw7CisJVVNIT1JUCQlTY2FuQWN0aXZlRHdlbGw7CisJVVNIT1JUCQlUcmlnZ2VyU2NhbkludDsJCQkJLy8gVHJpZ2dlciBzY2FuIGludGVydmFsCisJVVNIT1JUCQlQYXNzaXZlVGFsUGVyQ2hhbm5lbDsJCS8vIHBhc3NpdmUgdG90YWwgcGVyIGNoYW5uZWwKKwlVU0hPUlQJCUFjdGl2ZVRhbFBlckNoYW5uZWw7CQkvLyBhY3RpdmUgdG90YWwgcGVyIGNoYW5uZWwKKwlVU0hPUlQJCURlbGF5RmFjdG9yOwkJCQkvLyBCU1Mgd2lkdGggY2hhbm5lbCB0cmFuc2l0aW9uIGRlbGF5IGZhY3RvcgorCVVTSE9SVAkJU2NhbkFjdFRocmU7CQkJCS8vIFNjYW4gQWN0aXZpdHkgdGhyZXNob2xkCit9T1ZFUkxBUF9CU1NfU0NBTl9JRSwgKlBPVkVSTEFQX0JTU19TQ0FOX0lFOworCisKKy8vICA3LjMuMi41Ni4gMjAvNDAgQ29leGlzdGVuY2UgZWxlbWVudCB1c2VkIGluICBFbGVtZW50IElEID0gNzIgPSBJRV8yMDQwX0JTU19DT0VYSVNUCit0eXBlZGVmIHVuaW9uIFBBQ0tFRCBfQlNTXzIwNDBfQ09FWElTVF9JRXsKKyBzdHJ1Y3QgUEFDS0VEIHsKKyAjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCXJzdjo1OworCVVDSEFSCUJTUzIwV2lkdGhSZXE6MTsKKwlVQ0hBUglJbnRvbGVyYW50NDA6MTsKKwlVQ0hBUglJbmZvUmVxOjE7CisgI2Vsc2UKKwlVQ0hBUglJbmZvUmVxOjE7CisJVUNIQVIJSW50b2xlcmFudDQwOjE7CQkJLy8gSW50ZXItQlNTLiBzZXQgMSB3aGVuIHByb2hpYml0cyBhIHJlY2VpdmluZyBCU1MgZnJvbSBvcGVyYXRpbmcgYXMgYSAyMC80MCBNaHogQlNTLgorCVVDSEFSCUJTUzIwV2lkdGhSZXE6MTsJCS8vIEludHJhLUJTUyBzZXQgMSB3aGVuIHByb2hpYml0cyBhIHJlY2VpdmluZyBBUCBmcm9tIG9wZXJhdGluZyBpdHMgQlNTIGFzIGEgMjAvNDBNSHogQlNTLgorCVVDSEFSCXJzdjo1OworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKyAgICB9IGZpZWxkOworIFVDSEFSICAgd29yZDsKK30gQlNTXzIwNDBfQ09FWElTVF9JRSwgKlBCU1NfMjA0MF9DT0VYSVNUX0lFOworCisKK3R5cGVkZWYgc3RydWN0ICBfVFJJR0dFUl9FVkVOVEF7CisJQk9PTEVBTgkJCWJWYWxpZDsKKwlVQ0hBUglCU1NJRFs2XTsKKwlVQ0hBUglSZWdDbGFzczsJLy8gUmVndWxhdG9yeSBDbGFzcworCVVTSE9SVAlDaGFubmVsOworCVVMT05HCUNEQ291bnRlcjsgICAvLyBNYWludGFpbiBhIHNlcGVyYXRlIGNvdW50IGRvd24gY291bnRlciBmb3IgZWFjaCBFdmVudCBBLgorfSBUUklHR0VSX0VWRU5UQSwgKlBUUklHR0VSX0VWRU5UQTsKKworLy8gMjAvNDAgdHJpZ2dlciBldmVudCB0YWJsZQorLy8gSWYgb25lIEV2ZW50IEEgZGVsZXRlIG9yIGNyZWF0ZWQsIG9yIGlmIEV2ZW50IEIgaXMgZGV0ZWN0ZWQgb3Igbm90IGRldGVjdGVkLCBTVEEgc2hvdWxkIHNlbmQgMjA0MEJTU0NvZXhpc3RlbmNlIHRvIEFQLgorI2RlZmluZSBNQVhfVFJJR0dFUl9FVkVOVAkJNjQKK3R5cGVkZWYgc3RydWN0ICBfVFJJR0dFUl9FVkVOVF9UQUJ7CisJVUNIQVIJRXZlbnRBTm87CisJVFJJR0dFUl9FVkVOVEEJRXZlbnRBW01BWF9UUklHR0VSX0VWRU5UXTsKKwlVTE9ORwkJCUV2ZW50QkNvdW50RG93bjsJLy8gQ291bnQgZG93biBjb3VudGVyIGZvciBFdmVudCBCLgorfSBUUklHR0VSX0VWRU5UX1RBQiwgKlBUUklHR0VSX0VWRU5UX1RBQjsKKworLy8gNy4zLjI3IDIwLzQwIEJzcyBDb2V4aXN0ZW5jZSBNZ210IGNhcGFiaWxpdHkgdXNlZCBpbiBleHRlbmRlZCBjYXBhYmlsaXRpZXMgaW5mb3JtYXRpb24gSUUoIElEID0gMTI3ID0gSUVfRVhUX0NBUEFCSUxJVFkpLgorLy8JVGhpcyBpcyB0aGUgZmlyc3Qgb2N0ZXQgYW5kIHdhcyBkZWZpbmVkIGluIDgwMi4xMW4gRDMuMDMgYW5kIDgwMi4xMXlEOS4wCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0VYVF9DQVBfSU5GT19FTEVNRU5UeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUglyc3YyOjU7CisJVUNIQVIJRXh0ZW5kQ2hhbm5lbFN3aXRjaDoxOworCVVDSEFSCXJzdjoxOworCVVDSEFSCUJzc0NvZXhpc3RNZ210U3VwcG9ydDoxOworI2Vsc2UKKwlVQ0hBUglCc3NDb2V4aXN0TWdtdFN1cHBvcnQ6MTsKKwlVQ0hBUglyc3Y6MTsKKwlVQ0hBUglFeHRlbmRDaGFubmVsU3dpdGNoOjE7CisJVUNIQVIJcnN2Mjo1OworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KK31FWFRfQ0FQX0lORk9fRUxFTUVOVCwgKlBFWFRfQ0FQX0lORk9fRUxFTUVOVDsKKworCisvLyA4MDIuMTFuIDcuMy4yLjYxCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0JTU18yMDQwX0NPRVhJU1RfRUxFTUVOVHsKKwlVQ0hBUgkJCQkJRWxlbWVudElEOwkJLy8gSUQgPSBJRV8yMDQwX0JTU19DT0VYSVNUID0gNzIKKwlVQ0hBUgkJCQkJTGVuOworCUJTU18yMDQwX0NPRVhJU1RfSUUJCUJzc0NvZXhpc3RJZTsKK31CU1NfMjA0MF9DT0VYSVNUX0VMRU1FTlQsICpQQlNTXzIwNDBfQ09FWElTVF9FTEVNRU5UOworCisKKy8vODAyLjExbiA3LjMuMi41OQordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9CU1NfMjA0MF9JTlRPTEVSQU5UX0NIX1JFUE9SVHsKKwlVQ0hBUgkJCQlFbGVtZW50SUQ7CQkvLyBJRCA9IElFXzIwNDBfQlNTX0lOVE9MRVJBTlRfUkVQT1JUID0gNzMKKwlVQ0hBUgkJCQlMZW47CisJVUNIQVIJCQkJUmVndWxhdG9yeUNsYXNzOworCVVDSEFSCQkJCUNoTGlzdFswXTsKK31CU1NfMjA0MF9JTlRPTEVSQU5UX0NIX1JFUE9SVCwgKlBCU1NfMjA0MF9JTlRPTEVSQU5UX0NIX1JFUE9SVDsKKworCisvLyBUaGUgc3RydWN0dXJlIGZvciBjaGFubmVsIHN3aXRjaCBhbm5vdWNlbWVudCBJRS4gVGhpcyBpcyBpbiA4MDIuMTFuIEQzLjAzCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0NIQV9TV0lUQ0hfQU5OT1VOQ0VfSUV7CisJVUNIQVIJCQlTd2l0Y2hNb2RlOwkvL2NoYW5uZWwgc3dpdGNoIG1vZGUKKwlVQ0hBUgkJCU5ld0NoYW5uZWw7CS8vCisJVUNIQVIJCQlTd2l0Y2hDb3VudDsJLy8KK30gQ0hBX1NXSVRDSF9BTk5PVU5DRV9JRSwgKlBDSEFfU1dJVENIX0FOTk9VTkNFX0lFOworCisKKy8vIFRoZSBzdHJ1Y3R1cmUgZm9yIGNoYW5uZWwgc3dpdGNoIGFubm91Y2VtZW50IElFLiBUaGlzIGlzIGluIDgwMi4xMW4gRDMuMDMKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfU0VDX0NIQV9PRkZTRVRfSUV7CisJVUNIQVIJCQlTZWNvbmRhcnlDaGFubmVsT2Zmc2V0OwkgLy8gMTogU2Vjb25kYXJ5IGFib3ZlLCAzOiBTZWNvbmRhcnkgYmVsb3csIDA6IG5vIFNlY29uZGFyeQorfSBTRUNfQ0hBX09GRlNFVF9JRSwgKlBTRUNfQ0hBX09GRlNFVF9JRTsKKworCisvLyBUaGlzIHN0cnVjdHVyZSBpcyBleHRyYWN0ZWQgZnJvbSBzdHJ1Y3QgUlRfSFRfQ0FQQUJJTElUWQordHlwZWRlZiBzdHJ1Y3QgeworCUJPT0xFQU4JCQliSHRFbmFibGU7CSAvLyBJZiB3ZSBzaG91bGQgdXNlIGh0IHJhdGUuCisJQk9PTEVBTgkJCWJQcmVOSHQ7CSAvLyBJZiB3ZSBzaG91bGQgdXNlIGh0IHJhdGUuCisJLy9TdWJzdHJhY3QgZnJvbSBIVCBDYXBhYmlsaXR5IElFCisJVUNIQVIJCQlNQ1NTZXRbMTZdOwkvL29ubHkgc3Vwb29ydCBNQ1M9MC0xNSwzMiAsCit9IFJUX0hUX1BIWV9JTkZPLCAqUFJUX0hUX1BIWV9JTkZPOworCisvL1RoaXMgc3RydWN0dXJlIHN1YnN0cmFjdHMgcmFsaW5rIHN1cHBvcnRzIGZyb20gYWxsIDgwMi4xMW4tcmVsYXRlZCBmZWF0dXJlcy4KKy8vRmVhdHVyZXMgbm90IGxpc3RlZCBoZXJlIGJ1dCBjb250YWluZWQgaW4gODAyLjExbiBzcGVjIGFyZSBub3Qgc3VwcG9ydGVkIGluIHJ0Mjg2MC4KK3R5cGVkZWYgc3RydWN0IHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVVNIT1JUCXJzdjo1OworCVVTSE9SVAlBbXNkdVNpemU6MTsJLy8gTWF4IHJlY2VpdmluZyBBLU1TRFUgc2l6ZQorCVVTSE9SVAlBbXNkdUVuYWJsZToxOwkvLyBFbmFibGUgdG8gdHJhbnNtaXQgQS1NU0RVLiBTdWdnZXN0IGRpc2FibGUuIFdlIHNob3VsZCB1c2UgQS1NUERVIHRvIGdhaW4gYmVzdCBiZW5pZml0IG9mIDgwMi4xMW4KKwlVU0hPUlQJUnhTVEJDOjI7CS8vIDIgYml0cworCVVTSE9SVAlUeFNUQkM6MTsKKwlVU0hPUlQJU2hvcnRHSWZvcjQwOjE7CS8vZm9yNDBNSHoKKwlVU0hPUlQJU2hvcnRHSWZvcjIwOjE7CisJVVNIT1JUCUdGOjE7CS8vZ3JlZW4gZmllbGQKKwlVU0hPUlQJTWltb1BzOjI7Ly9taW1vIHBvd2VyIHNhZmUgTU1QU18KKwlVU0hPUlQJQ2hhbm5lbFdpZHRoOjE7CisjZWxzZQorCVVTSE9SVAlDaGFubmVsV2lkdGg6MTsKKwlVU0hPUlQJTWltb1BzOjI7Ly9taW1vIHBvd2VyIHNhZmUgTU1QU18KKwlVU0hPUlQJR0Y6MTsJLy9ncmVlbiBmaWVsZAorCVVTSE9SVAlTaG9ydEdJZm9yMjA6MTsKKwlVU0hPUlQJU2hvcnRHSWZvcjQwOjE7CS8vZm9yNDBNSHoKKwlVU0hPUlQJVHhTVEJDOjE7CisJVVNIT1JUCVJ4U1RCQzoyOwkvLyAyIGJpdHMKKwlVU0hPUlQJQW1zZHVFbmFibGU6MTsJLy8gRW5hYmxlIHRvIHRyYW5zbWl0IEEtTVNEVS4gU3VnZ2VzdCBkaXNhYmxlLiBXZSBzaG91bGQgdXNlIEEtTVBEVSB0byBnYWluIGJlc3QgYmVuaWZpdCBvZiA4MDIuMTFuCisJVVNIT1JUCUFtc2R1U2l6ZToxOwkvLyBNYXggcmVjZWl2aW5nIEEtTVNEVSBzaXplCisJVVNIT1JUCXJzdjo1OworI2VuZGlmCisKKwkvL1N1YnN0cmFjdCBmcm9tIEFkZGlvbnQgSFQgSU5GTyBJRQorI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUglSZWNvbVdpZHRoOjE7CisJVUNIQVIJRXh0Q2hhbk9mZnNldDoyOwkvLyBQbGVhc2Ugbm90IHRoZSBkaWZmZXJlbmNlIHdpdGggZm9sbG93aW5nIAlVQ0hBUglOZXdFeHRDaGFubmVsT2Zmc2V0OyBmcm9tIDgwMi4xMW4KKwlVQ0hBUglNcGR1RGVuc2l0eTozOworCVVDSEFSCU1heFJBbXBkdUZhY3RvcjoyOworI2Vsc2UKKwlVQ0hBUglNYXhSQW1wZHVGYWN0b3I6MjsKKwlVQ0hBUglNcGR1RGVuc2l0eTozOworCVVDSEFSCUV4dENoYW5PZmZzZXQ6MjsJLy8gUGxlYXNlIG5vdCB0aGUgZGlmZmVyZW5jZSB3aXRoIGZvbGxvd2luZyAJVUNIQVIJTmV3RXh0Q2hhbm5lbE9mZnNldDsgZnJvbSA4MDIuMTFuCisJVUNIQVIJUmVjb21XaWR0aDoxOworI2VuZGlmCisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVVNIT1JUCXJzdjI6MTE7CisJVVNIT1JUCU9CU1NfTm9uSFRFeGlzdDoxOworCVVTSE9SVAlyc3YzOjE7CisJVVNIT1JUCU5vbkdmUHJlc2VudDoxOworCVVTSE9SVAlPcGVyYWlvbk1vZGU6MjsKKyNlbHNlCisJVVNIT1JUCU9wZXJhaW9uTW9kZToyOworCVVTSE9SVAlOb25HZlByZXNlbnQ6MTsKKwlVU0hPUlQJcnN2MzoxOworCVVTSE9SVAlPQlNTX05vbkhURXhpc3Q6MTsKKwlVU0hPUlQJcnN2MjoxMTsKKyNlbmRpZgorCisJLy8gTmV3IEV4dGVuc2lvbiBDaGFubmVsIE9mZnNldCBJRQorCVVDSEFSCU5ld0V4dENoYW5uZWxPZmZzZXQ7CisJLy8gRXh0ZW5zaW9uIENhcGFiaWxpdHkgSUUgPSAxMjcKKwlVQ0hBUglCU1NDb2V4aXN0MjA0MDsKK30gUlRfSFRfQ0FQQUJJTElUWSwgKlBSVF9IVF9DQVBBQklMSVRZOworCisvLyAgIGZpZWxkIGluIEFkZHRpb25hbCBIVCBJbmZvcm1hdGlvbiBJRSAuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUglTZXJJbnRlckdyYW51OjM7CisJVUNIQVIJU19QU01QU3VwOjE7CisJVUNIQVIJUmlmc01vZGU6MTsKKwlVQ0hBUglSZWNvbVdpZHRoOjE7CisJVUNIQVIJRXh0Q2hhbk9mZnNldDoyOworI2Vsc2UKKwlVQ0hBUglFeHRDaGFuT2Zmc2V0OjI7CisJVUNIQVIJUmVjb21XaWR0aDoxOworCVVDSEFSCVJpZnNNb2RlOjE7CisJVUNIQVIJU19QU01QU3VwOjE7CSAvL0luZGljYXRlIHN1cHBvcnQgZm9yIHNjaGVkdWxlZCBQU01QCisJVUNIQVIJU2VySW50ZXJHcmFudTozOwkgLy9zZXJ2aWNlIGludGVydmFsIGdyYW51bGFyaXR5CisjZW5kaWYKK30gQUREX0hUSU5GTywgKlBBRERfSFRJTkZPOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUR7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVTSE9SVAlyc3YyOjExOworCVVTSE9SVAlPQlNTX05vbkhURXhpc3Q6MTsKKwlVU0hPUlQJcnN2OjE7CisJVVNIT1JUCU5vbkdmUHJlc2VudDoxOworCVVTSE9SVAlPcGVyYWlvbk1vZGU6MjsKKyNlbHNlCisJVVNIT1JUCU9wZXJhaW9uTW9kZToyOworCVVTSE9SVAlOb25HZlByZXNlbnQ6MTsKKwlVU0hPUlQJcnN2OjE7CisJVVNIT1JUCU9CU1NfTm9uSFRFeGlzdDoxOworCVVTSE9SVAlyc3YyOjExOworI2VuZGlmCit9IEFERF9IVElORk8yLCAqUEFERF9IVElORk8yOworCisKKy8vIFRPRE86IE5lZWQgc3luYyB3aXRoIHNwZWMgYWJvdXQgdGhlIGRlZmluaXRpb24gb2YgU3RiY01jcy4gSW4gRHJhZnQgMy4wMywgaXQncyByZXNlcnZlZC4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVVNIT1JUCXJzdjo0OworCVVTSE9SVAlQY29QaGFzZToxOworCVVTSE9SVAlQY29BY3RpdmU6MTsKKwlVU0hPUlQJTHNpZ1R4b3BQcm90OjE7CisJVVNIT1JUCVNUQkNCZWFjb246MTsKKwlVU0hPUlQJRHVhbENUU1Byb3RlY3Q6MTsKKwlVU0hPUlQJRHVhbEJlYWNvbjoxOworCVVTSE9SVAlTdGJjTWNzOjY7CisjZWxzZQorCVVTSE9SVAlTdGJjTWNzOjY7CisJVVNIT1JUCUR1YWxCZWFjb246MTsKKwlVU0hPUlQJRHVhbENUU1Byb3RlY3Q6MTsKKwlVU0hPUlQJU1RCQ0JlYWNvbjoxOworCVVTSE9SVAlMc2lnVHhvcFByb3Q6MTsJLy8gTC1TSUcgVFhPUCBwcm90ZWN0aW9uIGZ1bGwgc3VwcG9ydAorCVVTSE9SVAlQY29BY3RpdmU6MTsKKwlVU0hPUlQJUGNvUGhhc2U6MTsKKwlVU0hPUlQJcnN2OjQ7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworfSBBRERfSFRJTkZPMywgKlBBRERfSFRJTkZPMzsKKworI2RlZmluZSBTSVpFX0FERF9IVF9JTkZPX0lFCQkyMgordHlwZWRlZiBzdHJ1Y3QgIFBBQ0tFRHsKKwlVQ0hBUgkJCQlDb250cm9sQ2hhbjsKKwlBRERfSFRJTkZPCQkJQWRkSHRJbmZvOworCUFERF9IVElORk8yCQkJQWRkSHRJbmZvMjsKKwlBRERfSFRJTkZPMwkJCUFkZEh0SW5mbzM7CisJVUNIQVIJCQkJTUNTU2V0WzE2XTsJCS8vIEJhc2ljIE1DUyBzZXQKK30gQUREX0hUX0lORk9fSUUsICpQQUREX0hUX0lORk9fSUU7CisKK3R5cGVkZWYgc3RydWN0ICBQQUNLRUR7CisJVUNIQVIJCQkJTmV3RXh0Q2hhbk9mZnNldDsKK30gTkVXX0VYVF9DSEFOX0lFLCAqUE5FV19FWFRfQ0hBTl9JRTsKKworCisvLyA0LWJ5dGUgSFRDIGZpZWxkLiAgbWF5YmUgaW5jbHVkZWQgaW4gYW55IGZyYW1lIGV4Y2VwdCBub24tUU9TIGRhdGEgZnJhbWUuICBUaGUgT3JkZXIgYml0IG11c3Qgc2V0IDEuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyAgICBVSU5UMzIJCVJERzoxOwkvL1JERyAvIE1vcmUgUFBEVQorICAgIFVJTlQzMgkJQUNDb25zdHJhaW50OjE7CS8vZmVlZGJhY2sgcmVxdWVzdAorICAgIFVJTlQzMgkJcnN2OjU7ICAvL2NhbGlicmF0aW9uIHNlcXVlbmNlCisgICAgVUlOVDMyCQlaTEZBbm5vdWNlOjE7CS8vIFpMRiBhbm5vdW5jZW1lbnQKKyAgICBVSU5UMzIJCUNTSVNURUVSSU5HOjI7CS8vQ1NJLyBTVEVFUklORworICAgIFVJTlQzMgkJRkJLUmVxOjI7CS8vZmVlZGJhY2sgcmVxdWVzdAorICAgIFVJTlQzMgkJQ2FsU2VxOjI7ICAvL2NhbGlicmF0aW9uIHNlcXVlbmNlCisgICAgVUlOVDMyCQlDYWxQb3M6MjsJLy8gY2FsaWJyYXRpb24gcG9zaXRpb24KKyAgICBVSU5UMzIJCU1GQm9yQVNDOjc7CS8vTGluayBhZGFwdGF0aW9uIGZlZWRiYWNrIGNvbnRhaW5pbmcgcmVjb21tZW5kZWQgTUNTLiAweDdmIGZvciBubyBmZWVkYmFjayBvciBub3QgYXZhaWxhYmxlCisgICAgVUlOVDMyCQlNRlM6MzsJLy9TRVQgdG8gdGhlIHJlY2VpdmVkIHZhbHVlIG9mIE1SUy4gMHgxMTEgZm9yIHVuc29saWNpdGVkIE1GQi4KKyAgICBVSU5UMzIJCU1SU29yQVNJOjM7CS8vIE1SUSBTZXF1ZW5jZSBpZGVudGlmaWVyLiB1bmNoYW5nZWQgZHVyaW5nIGVudGlyZSBwcm9jZWR1cmUuIDB4MDAwLTB4MTEwLgorICAgIFVJTlQzMgkJTVJROjE7CS8vTUNTIGZlZWRiYWNrLiBSZXF1ZXN0IGZvciBhIE1DUyBmZWVkYmFjaworICAgIFVJTlQzMgkJVFJROjE7CS8vc291bmRpbmcgcmVxdWVzdAorICAgIFVJTlQzMgkJTUE6MTsJLy9tYW5hZ2VtZW50IGFjdGlvbiBwYXlsb2FkIGV4aXN0IGluIChRb1MgTnVsbCtIVEMpCisjZWxzZQorICAgIFVJTlQzMgkJTUE6MTsJLy9tYW5hZ2VtZW50IGFjdGlvbiBwYXlsb2FkIGV4aXN0IGluIChRb1MgTnVsbCtIVEMpCisgICAgVUlOVDMyCQlUUlE6MTsJLy9zb3VuZGluZyByZXF1ZXN0CisgICAgVUlOVDMyCQlNUlE6MTsJLy9NQ1MgZmVlZGJhY2suIFJlcXVlc3QgZm9yIGEgTUNTIGZlZWRiYWNrCisgICAgVUlOVDMyCQlNUlNvckFTSTozOwkvLyBNUlEgU2VxdWVuY2UgaWRlbnRpZmllci4gdW5jaGFuZ2VkIGR1cmluZyBlbnRpcmUgcHJvY2VkdXJlLiAweDAwMC0weDExMC4KKyAgICBVSU5UMzIJCU1GUzozOwkvL1NFVCB0byB0aGUgcmVjZWl2ZWQgdmFsdWUgb2YgTVJTLiAweDExMSBmb3IgdW5zb2xpY2l0ZWQgTUZCLgorICAgIFVJTlQzMgkJTUZCb3JBU0M6NzsJLy9MaW5rIGFkYXB0YXRpb24gZmVlZGJhY2sgY29udGFpbmluZyByZWNvbW1lbmRlZCBNQ1MuIDB4N2YgZm9yIG5vIGZlZWRiYWNrIG9yIG5vdCBhdmFpbGFibGUKKyAgICBVSU5UMzIJCUNhbFBvczoyOwkvLyBjYWxpYnJhdGlvbiBwb3NpdGlvbgorICAgIFVJTlQzMgkJQ2FsU2VxOjI7ICAvL2NhbGlicmF0aW9uIHNlcXVlbmNlCisgICAgVUlOVDMyCQlGQktSZXE6MjsJLy9mZWVkYmFjayByZXF1ZXN0CisgICAgVUlOVDMyCQlDU0lTVEVFUklORzoyOwkvL0NTSS8gU1RFRVJJTkcKKyAgICBVSU5UMzIJCVpMRkFubm91Y2U6MTsJLy8gWkxGIGFubm91bmNlbWVudAorICAgIFVJTlQzMgkJcnN2OjU7ICAvL2NhbGlicmF0aW9uIHNlcXVlbmNlCisgICAgVUlOVDMyCQlBQ0NvbnN0cmFpbnQ6MTsJLy9mZWVkYmFjayByZXF1ZXN0CisgICAgVUlOVDMyCQlSREc6MTsJLy9SREcgLyBNb3JlIFBQRFUKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworfSBIVF9DT05UUk9MLCAqUEhUX0NPTlRST0w7CisKKy8vIDItYnl0ZSBRT1MgQ09OVFJPTCBmaWVsZAordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisgICAgVVNIT1JUICAgICAgVHhvcF9RdWV1ZVNpemU6ODsKKyAgICBVU0hPUlQgICAgICBBTXNkdVByZXNlbnQ6MTsKKyAgICBVU0hPUlQgICAgICBBY2tQb2xpY3k6MjsgIC8vMDogbm9ybWFsIEFDSyAxOk5vIEFDSyAyOnNjaGVkdWxlZCB1bmRlciBNVEJBL1BTTVAgIDM6IEJBCisgICAgVVNIT1JUICAgICAgRU9TUDoxOworICAgIFVTSE9SVCAgICAgIFRJRDo0OworI2Vsc2UKKyAgICBVU0hPUlQgICAgICBUSUQ6NDsKKyAgICBVU0hPUlQgICAgICBFT1NQOjE7CisgICAgVVNIT1JUICAgICAgQWNrUG9saWN5OjI7ICAvLzA6IG5vcm1hbCBBQ0sgMTpObyBBQ0sgMjpzY2hlZHVsZWQgdW5kZXIgTVRCQS9QU01QICAzOiBCQQorICAgIFVTSE9SVCAgICAgIEFNc2R1UHJlc2VudDoxOworICAgIFVTSE9SVCAgICAgIFR4b3BfUXVldWVTaXplOjg7CisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KK30gUU9TX0NPTlRST0wsICpQUU9TX0NPTlRST0w7CisKKy8vIDItYnl0ZSBGcmFtZSBjb250cm9sIGZpZWxkCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJCU9yZGVyOjE7CQkJLy8gU3RyaWN0IG9yZGVyIGV4cGVjdGVkCisJVVNIT1JUCQlXZXA6MTsJCQkJLy8gV2VwIGRhdGEKKwlVU0hPUlQJCU1vcmVEYXRhOjE7CQkJLy8gTW9yZSBkYXRhIGJpdAorCVVTSE9SVAkJUHdyTWdtdDoxOwkJCS8vIFBvd2VyIG1hbmFnZW1lbnQgYml0CisJVVNIT1JUCQlSZXRyeToxOwkJCS8vIFJldHJ5IHN0YXR1cyBiaXQKKwlVU0hPUlQJCU1vcmVGcmFnOjE7CQkJLy8gTW9yZSBmcmFnbWVudCBiaXQKKwlVU0hPUlQJCUZyRHM6MTsJCQkJLy8gRnJvbSBEUyBpbmRpY2F0aW9uCisJVVNIT1JUCQlUb0RzOjE7CQkJCS8vIFRvIERTIGluZGljYXRpb24KKwlVU0hPUlQJCVN1YlR5cGU6NDsJCQkvLyBNU0RVIHN1YnR5cGUKKwlVU0hPUlQJCVR5cGU6MjsJCQkJLy8gTVNEVSB0eXBlCisJVVNIT1JUCQlWZXI6MjsJCQkJLy8gUHJvdG9jb2wgdmVyc2lvbgorI2Vsc2UKKwlVU0hPUlQJCVZlcjoyOwkJCQkvLyBQcm90b2NvbCB2ZXJzaW9uCisJVVNIT1JUCQlUeXBlOjI7CQkJCS8vIE1TRFUgdHlwZQorCVVTSE9SVAkJU3ViVHlwZTo0OwkJCS8vIE1TRFUgc3VidHlwZQorCVVTSE9SVAkJVG9EczoxOwkJCQkvLyBUbyBEUyBpbmRpY2F0aW9uCisJVVNIT1JUCQlGckRzOjE7CQkJCS8vIEZyb20gRFMgaW5kaWNhdGlvbgorCVVTSE9SVAkJTW9yZUZyYWc6MTsJCQkvLyBNb3JlIGZyYWdtZW50IGJpdAorCVVTSE9SVAkJUmV0cnk6MTsJCQkvLyBSZXRyeSBzdGF0dXMgYml0CisJVVNIT1JUCQlQd3JNZ210OjE7CQkJLy8gUG93ZXIgbWFuYWdlbWVudCBiaXQKKwlVU0hPUlQJCU1vcmVEYXRhOjE7CQkJLy8gTW9yZSBkYXRhIGJpdAorCVVTSE9SVAkJV2VwOjE7CQkJCS8vIFdlcCBkYXRhCisJVVNIT1JUCQlPcmRlcjoxOwkJCS8vIFN0cmljdCBvcmRlciBleHBlY3RlZAorI2VuZGlmIC8qICFSVF9CSUdfRU5ESUFOICovCit9IEZSQU1FX0NPTlRST0wsICpQRlJBTUVfQ09OVFJPTDsKKwordHlwZWRlZglzdHJ1Y3QJUEFDS0VEIF9IRUFERVJfODAyXzExCXsKKyAgICBGUkFNRV9DT05UUk9MICAgRkM7CisgICAgVVNIT1JUICAgICAgICAgIER1cmF0aW9uOworICAgIFVDSEFSICAgICAgICAgICBBZGRyMVtNQUNfQUREUl9MRU5dOworICAgIFVDSEFSICAgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCVVDSEFSCQkJQWRkcjNbTUFDX0FERFJfTEVOXTsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVVNIT1JUCQkJU2VxdWVuY2U6MTI7CisJVVNIT1JUCQkJRnJhZzo0OworI2Vsc2UKKwlVU0hPUlQJCQlGcmFnOjQ7CisJVVNIT1JUCQkJU2VxdWVuY2U6MTI7CisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KKwlVQ0hBUgkJCU9jdGV0WzBdOworfQlIRUFERVJfODAyXzExLCAqUEhFQURFUl84MDJfMTE7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfODAyXzExIHsKKyAgICBIRUFERVJfODAyXzExICAgSGRyOworICAgIFVDSEFSICAgICAgICAgICAgT2N0ZXRbMV07Cit9ICAgRlJBTUVfODAyXzExLCAqUEZSQU1FXzgwMl8xMTsKKworLy8gUW9TTnVsbCBlbWJlZGRpbmcgb2YgbWFuYWdlbWVudCBhY3Rpb24uIFdoZW4gSFQgQ29udHJvbCBNQSBmaWVsZCBzZXQgdG8gMS4KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTUFfQk9EWSB7CisgICAgVUNIQVIgICAgICAgICAgICBDYXRlZ29yeTsKKyAgICBVQ0hBUiAgICAgICAgICAgIEFjdGlvbjsKKyAgICBVQ0hBUiAgICAgICAgICAgIE9jdGV0WzFdOworfSAgIE1BX0JPRFksICpQTUFfQk9EWTsKKwordHlwZWRlZglzdHJ1Y3QJUEFDS0VEIF9IRUFERVJfODAyXzMJeworICAgIFVDSEFSICAgICAgICAgICBEQUFkZHIxW01BQ19BRERSX0xFTl07CisgICAgVUNIQVIgICAgICAgICAgIFNBQWRkcjJbTUFDX0FERFJfTEVOXTsKKyAgICBVQ0hBUiAgICAgICAgICAgT2N0ZXRbMl07Cit9CUhFQURFUl84MDJfMywgKlBIRUFERVJfODAyXzM7CisvLy8vQmxvY2sgQUNLIHJlbGF0ZWQgZm9ybWF0CisvLyAyLWJ5dGUgQkEgUGFyYW1ldGVyICBmaWVsZCAgaW4gCURFTEJBIGZyYW1lcyB0byB0ZXJtaW5hdGUgYW4gYWxyZWFkeSBzZXQgdXAgYkEKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisgICAgVVNIT1JUICAgICAgVElEOjQ7CS8vIHZhbHVlIG9mIFRDIG9zIFRTCisgICAgVVNIT1JUICAgICAgSW5pdGlhdG9yOjE7CS8vIDE6IG9yaWdpbmF0b3IgICAgMDpyZWNpcGllbnQKKyAgICBVU0hPUlQgICAgICBSc3Y6MTE7CS8vIGFsd2F5cyBzZXQgdG8gMAorI2Vsc2UKKyAgICBVU0hPUlQgICAgICBSc3Y6MTE7CS8vIGFsd2F5cyBzZXQgdG8gMAorICAgIFVTSE9SVCAgICAgIEluaXRpYXRvcjoxOwkvLyAxOiBvcmlnaW5hdG9yICAgIDA6cmVjaXBpZW50CisgICAgVVNIT1JUICAgICAgVElEOjQ7CS8vIHZhbHVlIG9mIFRDIG9zIFRTCisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KK30gREVMQkFfUEFSTSwgKlBERUxCQV9QQVJNOworCisvLyAyLWJ5dGUgQkEgUGFyYW1ldGVyIFNldCBmaWVsZCAgaW4gQUREQkEgZnJhbWVzIHRvIHNpZ25hbCBwYXJtIGZvciBzZXR0aW5nIHVwIGEgQkEKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorICAgIFVTSE9SVCAgICAgIEJ1ZlNpemU6MTA7CS8vIG51bWJlciBvZiBidWZmZSBvZiBzaXplIDIzMDQgb2N0ZXRzcgorICAgIFVTSE9SVCAgICAgIFRJRDo0OwkvLyB2YWx1ZSBvZiBUQyBvcyBUUworICAgIFVTSE9SVCAgICAgIEJBUG9saWN5OjE7CS8vIDE6IGltbWVkaWF0ZWx5IEJBICAgIDA6ZGVsYXllZCBCQQorICAgIFVTSE9SVCAgICAgIEFNU0RVU3VwcG9ydGVkOjE7CS8vIDA6IG5vdCBwZXJtaXR0ZWQJCTE6IHBlcm1pdHRlZAorI2Vsc2UKKyAgICBVU0hPUlQgICAgICBBTVNEVVN1cHBvcnRlZDoxOwkvLyAwOiBub3QgcGVybWl0dGVkCQkxOiBwZXJtaXR0ZWQKKyAgICBVU0hPUlQgICAgICBCQVBvbGljeToxOwkvLyAxOiBpbW1lZGlhdGVseSBCQSAgICAwOmRlbGF5ZWQgQkEKKyAgICBVU0hPUlQgICAgICBUSUQ6NDsJLy8gdmFsdWUgb2YgVEMgb3MgVFMKKyAgICBVU0hPUlQgICAgICBCdWZTaXplOjEwOwkvLyBudW1iZXIgb2YgYnVmZmUgb2Ygc2l6ZSAyMzA0IG9jdGV0c3IKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworfSBCQV9QQVJNLCAqUEJBX1BBUk07CisKKy8vIDItYnl0ZSBCQSBTdGFydGluZyBTZXEgQ09OVFJPTCBmaWVsZAordHlwZWRlZiB1bmlvbiBQQUNLRUQgeworICAgIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyAgICBVU0hPUlQgICAgICBTdGFydFNlcToxMjsgICAvLyBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIDFzdCBNU0RVIGZvciB3aGljaCB0aGlzIEJBUiBpcyBzZW50CisJVVNIT1JUICAgICAgRnJhZ051bTo0OwkvLyBhbHdheXMgc2V0IHRvIDAKKyNlbHNlCisgICAgVVNIT1JUICAgICAgRnJhZ051bTo0OwkvLyBhbHdheXMgc2V0IHRvIDAKKwlVU0hPUlQgICAgICBTdGFydFNlcToxMjsgICAvLyBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIDFzdCBNU0RVIGZvciB3aGljaCB0aGlzIEJBUiBpcyBzZW50CisjZW5kaWYgLyogUlRfQklHX0VORElBTiAqLworICAgIH0gICBmaWVsZDsKKyAgICBVU0hPUlQgICAgICAgICAgIHdvcmQ7Cit9IEJBU0VRX0NPTlRST0wsICpQQkFTRVFfQ09OVFJPTDsKKworLy9CQUNvbnRyb2wgYW5kIEJBUkNvbnRyb2wgYXJlIHRoZSBzYW1lCisvLyAyLWJ5dGUgQkEgQ09OVFJPTCBmaWVsZCBpbiBCQSBmcmFtZQordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisgICAgVVNIT1JUICAgICAgVElEOjQ7CisgICAgVVNIT1JUICAgICAgUnN2Ojk7CisgICAgVVNIT1JUICAgICAgQ29tcHJlc3NlZDoxOworICAgIFVTSE9SVCAgICAgIE1USUQ6MTsJCS8vRVdDIFYxLjI0CisgICAgVVNIT1JUICAgICAgQUNLUG9saWN5OjE7IC8vIG9ubHkgcmVsYXRlZCB0byBOLURlbGF5ZWQgQkEuIEJ1dCBub3Qgc3VwcG9ydCBpbiBSVDI4NjBiLiAwOk5vcm1hbEFDSyAgMTpObyBBQ0sKKyNlbHNlCisgICAgVVNIT1JUICAgICAgQUNLUG9saWN5OjE7IC8vIG9ubHkgcmVsYXRlZCB0byBOLURlbGF5ZWQgQkEuIEJ1dCBub3Qgc3VwcG9ydCBpbiBSVDI4NjBiLiAwOk5vcm1hbEFDSyAgMTpObyBBQ0sKKyAgICBVU0hPUlQgICAgICBNVElEOjE7CQkvL0VXQyBWMS4yNAorICAgIFVTSE9SVCAgICAgIENvbXByZXNzZWQ6MTsKKyAgICBVU0hPUlQgICAgICBSc3Y6OTsKKyAgICBVU0hPUlQgICAgICBUSUQ6NDsKKyNlbmRpZiAvKiAhUlRfQklHX0VORElBTiAqLworfSBCQV9DT05UUk9MLCAqUEJBX0NPTlRST0w7CisKKy8vIDItYnl0ZSBCQVIgQ09OVFJPTCBmaWVsZCBpbiBCQVIgZnJhbWUKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorICAgIFVTSE9SVCAgICAgIFRJRDo0OworICAgIFVTSE9SVCAgICAgIFJzdjE6OTsKKyAgICBVU0hPUlQgICAgICBDb21wcmVzc2VkOjE7CisgICAgVVNIT1JUICAgICAgTVRJRDoxOwkJLy9pZiB0aGlzIGJpdDEsIHVzZSAgRlJBTUVfTVRCQV9SRVEsICBpZiAwLCB1c2UgRlJBTUVfQkFfUkVRCisgICAgVVNIT1JUICAgICAgQUNLUG9saWN5OjE7CisjZWxzZQorICAgIFVTSE9SVCAgICAgIEFDS1BvbGljeToxOyAvLyAwOm5vcm1hbCBhY2ssICAxOm5vIGFjay4KKyAgICBVU0hPUlQgICAgICBNVElEOjE7CQkvL2lmIHRoaXMgYml0MSwgdXNlICBGUkFNRV9NVEJBX1JFUSwgIGlmIDAsIHVzZSBGUkFNRV9CQV9SRVEKKyAgICBVU0hPUlQgICAgICBDb21wcmVzc2VkOjE7CisgICAgVVNIT1JUICAgICAgUnN2MTo5OworICAgIFVTSE9SVCAgICAgIFRJRDo0OworI2VuZGlmIC8qICFSVF9CSUdfRU5ESUFOICovCit9IEJBUl9DT05UUk9MLCAqUEJBUl9DT05UUk9MOworCisvLyBCQVJDb250cm9sIGluIE1UQkFSIGZyYW1lCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyAgICBVU0hPUlQgICAgICBOdW1USUQ6NDsKKyAgICBVU0hPUlQgICAgICBSc3YxOjk7CisgICAgVVNIT1JUICAgICAgQ29tcHJlc3NlZDoxOworICAgIFVTSE9SVCAgICAgIE1USUQ6MTsKKyAgICBVU0hPUlQgICAgICBBQ0tQb2xpY3k6MTsKKyNlbHNlCisgICAgVVNIT1JUICAgICAgQUNLUG9saWN5OjE7CisgICAgVVNIT1JUICAgICAgTVRJRDoxOworICAgIFVTSE9SVCAgICAgIENvbXByZXNzZWQ6MTsKKyAgICBVU0hPUlQgICAgICBSc3YxOjk7CisgICAgVVNIT1JUICAgICAgTnVtVElEOjQ7CisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KK30gTVRCQVJfQ09OVFJPTCwgKlBNVEJBUl9DT05UUk9MOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKyAgICBVU0hPUlQgICAgICBUSUQ6NDsKKyAgICBVU0hPUlQgICAgICBSc3YxOjEyOworI2Vsc2UKKyAgICBVU0hPUlQgICAgICBSc3YxOjEyOworICAgIFVTSE9SVCAgICAgIFRJRDo0OworI2VuZGlmIC8qICFSVF9CSUdfRU5ESUFOICovCit9IFBFUl9USURfSU5GTywgKlBQRVJfVElEX0lORk87CisKK3R5cGVkZWYgc3RydWN0IHsKKwlQRVJfVElEX0lORk8gICAgICBQZXJUSUQ7CisJQkFTRVFfQ09OVFJPTCAJIEJBU3RhcnRpbmdTZXE7Cit9IEVBQ0hfVElELCAqUEVBQ0hfVElEOworCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfUFNQT0xMX0ZSQU1FIHsKKyAgICBGUkFNRV9DT05UUk9MICAgRkM7CisgICAgVVNIT1JUICAgICAgICAgIEFpZDsKKyAgICBVQ0hBUiAgICAgICAgICAgQnNzaWRbTUFDX0FERFJfTEVOXTsKKyAgICBVQ0hBUiAgICAgICAgICAgVGFbTUFDX0FERFJfTEVOXTsKK30gICBQU1BPTExfRlJBTUUsICpQUFNQT0xMX0ZSQU1FOworCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX1JUU19GUkFNRQl7CisgICAgRlJBTUVfQ09OVFJPTCAgIEZDOworICAgIFVTSE9SVCAgICAgICAgICBEdXJhdGlvbjsKKyAgICBVQ0hBUiAgICAgICAgICAgQWRkcjFbTUFDX0FERFJfTEVOXTsKKyAgICBVQ0hBUiAgICAgICAgICAgQWRkcjJbTUFDX0FERFJfTEVOXTsKK31SVFNfRlJBTUUsICpQUlRTX0ZSQU1FOworCisvLyBCQVJFUSBBTkQgTVRCQVJFUSBoYXZlIHRoZSBzYW1lIHN1YnR5cGUgQkFSLCA4MDIuMTFuIEJBUiB1c2UgY29tcHJlc3NlZCBiaXRtYXAuCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0ZSQU1FX0JBX1JFUSB7CisJRlJBTUVfQ09OVFJPTCAgIEZDOworCVVTSE9SVCAgICAgICAgICBEdXJhdGlvbjsKKwlVQ0hBUiAgICAgICAgICAgQWRkcjFbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUiAgICAgICAgICAgQWRkcjJbTUFDX0FERFJfTEVOXTsKKwlCQVJfQ09OVFJPTCAgQkFSQ29udHJvbDsKKwlCQVNFUV9DT05UUk9MIAkgQkFTdGFydGluZ1NlcTsKK30gICBGUkFNRV9CQV9SRVEsICpQRlJBTUVfQkFfUkVROworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0ZSQU1FX01UQkFfUkVRIHsKKwlGUkFNRV9DT05UUk9MICAgRkM7CisJVVNIT1JUICAgICAgICAgIER1cmF0aW9uOworCVVDSEFSICAgICAgICAgICBBZGRyMVtNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCU1UQkFSX0NPTlRST0wgIE1UQkFSQ29udHJvbDsKKwlQRVJfVElEX0lORk8JUGVyVElESW5mbzsKKwlCQVNFUV9DT05UUk9MIAkgQkFTdGFydGluZ1NlcTsKK30gICBGUkFNRV9NVEJBX1JFUSwgKlBGUkFNRV9NVEJBX1JFUTsKKworLy8gQ29tcHJlc3NlZCBmb3JtYXQgaXMgbWFuZGFudG9yeSBpbiBIVCBTVEEKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfTVRCQSB7CisJRlJBTUVfQ09OVFJPTCAgIEZDOworCVVTSE9SVCAgICAgICAgICBEdXJhdGlvbjsKKwlVQ0hBUiAgICAgICAgICAgQWRkcjFbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUiAgICAgICAgICAgQWRkcjJbTUFDX0FERFJfTEVOXTsKKwlCQV9DT05UUk9MICBCQUNvbnRyb2w7CisJQkFTRVFfQ09OVFJPTCAJIEJBU3RhcnRpbmdTZXE7CisJVUNIQVIJCUJpdE1hcFs4XTsKK30gICBGUkFNRV9NVEJBLCAqUEZSQU1FX01UQkE7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfUFNNUF9BQ1RJT04geworCUhFQURFUl84MDJfMTEgICBIZHI7CisJVUNIQVIJQ2F0ZWdvcnk7CisJVUNIQVIJQWN0aW9uOworCVVDSEFSCVBzbXA7CS8vIDcuMy4xLjI1Cit9ICAgRlJBTUVfUFNNUF9BQ1RJT04sICpQRlJBTUVfUFNNUF9BQ1RJT047CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfQUNUSU9OX0hEUiB7CisJSEVBREVSXzgwMl8xMSAgIEhkcjsKKwlVQ0hBUglDYXRlZ29yeTsKKwlVQ0hBUglBY3Rpb247Cit9ICAgRlJBTUVfQUNUSU9OX0hEUiwgKlBGUkFNRV9BQ1RJT05fSERSOworCisvL0FjdGlvbiBGcmFtZQorLy9BY3Rpb24gRnJhbWUgIENhdGVnb3J5OlNwZWN0cnVtLCAgQWN0aW9uOkNoYW5uZWwgU3dpdGNoLiA3LjMuMi4yMAordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9DSEFOX1NXSVRDSF9BTk5PVU5DRSB7CisJVUNIQVIJCQkJCUVsZW1lbnRJRDsJLy8gSUQgPSBJRV9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRU1FTlQgPSAzNworCVVDSEFSCQkJCQlMZW47CisJQ0hBX1NXSVRDSF9BTk5PVU5DRV9JRQlDU0Fubm91bmNlSWU7Cit9ICAgQ0hBTl9TV0lUQ0hfQU5OT1VOQ0UsICpQQ0hBTl9TV0lUQ0hfQU5OT1VOQ0U7CisKKworLy84MDIuMTFuIDogNy4zLjIuMjBhCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1NFQ09ORF9DSEFOX09GRlNFVCB7CisJVUNIQVIJCQkJRWxlbWVudElEOwkJLy8gSUQgPSBJRV9TRUNPTkRBUllfQ0hfT0ZGU0VUID0gNjIKKwlVQ0hBUgkJCQlMZW47CisJU0VDX0NIQV9PRkZTRVRfSUUJU2VjQ2hPZmZzZXRJZTsKK30gICBTRUNPTkRfQ0hBTl9PRkZTRVQsICpQU0VDT05EX0NIQU5fT0ZGU0VUOworCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfU1BFVFJVTV9DUyB7CisJSEVBREVSXzgwMl8xMSAgIEhkcjsKKwlVQ0hBUglDYXRlZ29yeTsKKwlVQ0hBUglBY3Rpb247CisJQ0hBTl9TV0lUQ0hfQU5OT1VOQ0UJQ1NBbm5vdW5jZTsKKwlTRUNPTkRfQ0hBTl9PRkZTRVQJCVNlY29uZENoYW5uZWw7Cit9ICAgRlJBTUVfU1BFVFJVTV9DUywgKlBGUkFNRV9TUEVUUlVNX0NTOworCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfQUREQkFfUkVRIHsKKwlIRUFERVJfODAyXzExICAgSGRyOworCVVDSEFSCUNhdGVnb3J5OworCVVDSEFSCUFjdGlvbjsKKwlVQ0hBUglUb2tlbjsJLy8gMQorCUJBX1BBUk0JCUJhUGFybTsJICAgICAgLy8gIDIgLSAxMAorCVVTSE9SVAkJVGltZU91dFZhbHVlOwkvLyAwIC0gMAorCUJBU0VRX0NPTlRST0wJQmFTdGFydFNlcTsgLy8gMC0wCit9ICAgRlJBTUVfQUREQkFfUkVRLCAqUEZSQU1FX0FEREJBX1JFUTsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9BRERCQV9SU1AgeworCUhFQURFUl84MDJfMTEgICBIZHI7CisJVUNIQVIJQ2F0ZWdvcnk7CisJVUNIQVIJQWN0aW9uOworCVVDSEFSCVRva2VuOworCVVTSE9SVAlTdGF0dXNDb2RlOworCUJBX1BBUk0JCUJhUGFybTsgLy8wIC0gMgorCVVTSE9SVAkJVGltZU91dFZhbHVlOworfSAgIEZSQU1FX0FEREJBX1JTUCwgKlBGUkFNRV9BRERCQV9SU1A7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfREVMQkFfUkVRIHsKKwlIRUFERVJfODAyXzExICAgSGRyOworCVVDSEFSCUNhdGVnb3J5OworCVVDSEFSCUFjdGlvbjsKKwlERUxCQV9QQVJNCQlEZWxiYVBhcm07CisJVVNIT1JUCVJlYXNvbkNvZGU7Cit9ICAgRlJBTUVfREVMQkFfUkVRLCAqUEZSQU1FX0RFTEJBX1JFUTsKKworCisvLzcuMi4xLjcKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfRlJBTUVfQkFSIHsKKwlGUkFNRV9DT05UUk9MICAgRkM7CisJVVNIT1JUICAgICAgICAgIER1cmF0aW9uOworCVVDSEFSICAgICAgICAgICBBZGRyMVtNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCUJBUl9DT05UUk9MCQlCYXJDb250cm9sOworCUJBU0VRX0NPTlRST0wJU3RhcnRpbmdTZXE7Cit9ICAgRlJBTUVfQkFSLCAqUEZSQU1FX0JBUjsKKworLy83LjIuMS43Cit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0ZSQU1FX0JBIHsKKwlGUkFNRV9DT05UUk9MICAgRkM7CisJVVNIT1JUICAgICAgICAgIER1cmF0aW9uOworCVVDSEFSICAgICAgICAgICBBZGRyMVtNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCUJBUl9DT05UUk9MCQlCYXJDb250cm9sOworCUJBU0VRX0NPTlRST0wJU3RhcnRpbmdTZXE7CisJVUNIQVIJCWJpdG1hc2tbOF07Cit9ICAgRlJBTUVfQkEsICpQRlJBTUVfQkE7CisKKworLy8gUmFkaW8gTWVhc3VlbWVudCBSZXF1ZXN0IEZyYW1lIEZvcm1hdAordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9GUkFNRV9STV9SRVFfQUNUSU9OIHsKKwlIRUFERVJfODAyXzExICAgSGRyOworCVVDSEFSCUNhdGVnb3J5OworCVVDSEFSCUFjdGlvbjsKKwlVQ0hBUglUb2tlbjsKKwlVU0hPUlQJUmVwZXRpdGlvbjsKKwlVQ0hBUiAgIGRhdGFbMF07Cit9ICAgRlJBTUVfUk1fUkVRX0FDVElPTiwgKlBGUkFNRV9STV9SRVFfQUNUSU9OOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgeworCVVDSEFSCQlJRDsKKwlVQ0hBUgkJTGVuZ3RoOworCVVDSEFSCQlDaGFubmVsU3dpdGNoTW9kZTsKKwlVQ0hBUgkJTmV3UmVnQ2xhc3M7CisJVUNIQVIJCU5ld0NoYW5uZWxOdW07CisJVUNIQVIJCUNoYW5uZWxTd2l0Y2hDb3VudDsKK30gSFRfRVhUX0NIQU5ORUxfU1dJVENIX0FOTk9VTkNFTUVOVF9JRSwgKlBIVF9FWFRfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0VNRU5UX0lFOworCisKKy8vCisvLyBfTGltaXQgbXVzdCBiZSB0aGUgMioqbiAtIDEKKy8vIF9TRVExICwgX1NFUTIgbXVzdCBiZSB3aXRoaW4gMCB+IF9MaW1pdAorLy8KKyNkZWZpbmUgU0VRX1NURVBPTkUoX1NFUTEsIF9TRVEyLCBfTGltaXQpCSgoX1NFUTEgPT0gKChfU0VRMisxKSAmIF9MaW1pdCkpKQorI2RlZmluZSBTRVFfU01BTExFUihfU0VRMSwgX1NFUTIsIF9MaW1pdCkJKCgoX1NFUTEtX1NFUTIpICYgKChfTGltaXQrMSk+PjEpKSkKKyNkZWZpbmUgU0VRX0xBUkdFUihfU0VRMSwgX1NFUTIsIF9MaW1pdCkJKChfU0VRMSAhPSBfU0VRMikgJiYgISgoKF9TRVExLV9TRVEyKSAmICgoX0xpbWl0KzEpPj4xKSkpKQorI2RlZmluZSBTRVFfV0lUSElOX1dJTihfU0VRMSwgX1NFUTIsIF9XSU4sIF9MaW1pdCkgKFNFUV9MQVJHRVIoX1NFUTEsIF9TRVEyLCBfTGltaXQpICYmICBcCisJCQkJCQkJCQkJCQlTRVFfU01BTExFUihfU0VRMSwgKChfU0VRMitfV0lOKzEpJl9MaW1pdCksIF9MaW1pdCkpCisKKy8vCisvLyBDb250ZW50aW9uLWZyZWUgcGFyYW1ldGVyICh3aXRob3V0IElEIGFuZCBMZW5ndGgpCisvLwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyAgICBCT09MRUFOICAgICBiVmFsaWQ7ICAgICAgICAgLy8gMTogdmFyaWFibGUgY29udGFpbnMgdmFsaWQgdmFsdWUKKyAgICBVQ0hBUiAgICAgICBDZnBDb3VudDsKKyAgICBVQ0hBUiAgICAgICBDZnBQZXJpb2Q7CisgICAgVVNIT1JUICAgICAgQ2ZwTWF4RHVyYXRpb247CisgICAgVVNIT1JUICAgICAgQ2ZwRHVyUmVtYWluaW5nOworfSBDRl9QQVJNLCAqUENGX1BBUk07CisKK3R5cGVkZWYJc3RydWN0CV9DSVBIRVJfU1VJVEUJeworCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCVBhaXJDaXBoZXI7CQkvLyBVbmljYXN0IGNpcGhlciAxLCB0aGlzIG9uZSBoYXMgbW9yZSBzZWN1cmVkIGNpcGhlciBzdWl0ZQorCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCVBhaXJDaXBoZXJBdXg7CS8vIFVuaWNhc3QgY2lwaGVyIDIgaWYgQVAgYW5ub3VuY2UgdHdvIHVuaWNhc3QgY2lwaGVyIHN1aXRlCisJTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJR3JvdXBDaXBoZXI7CS8vIEdyb3VwIGNpcGhlcgorCVVTSE9SVAkJCQkJCQlSc25DYXBhYmlsaXR5OwkvLyBSU04gY2FwYWJpbGl0eSBmcm9tIGJlYWNvbgorCUJPT0xFQU4JCQkJCQkJYk1peE1vZGU7CQkvLyBJbmRpY2F0ZSBQYWlyICYgR3JvdXAgY2lwaGVyIG1pZ2h0IGJlIGRpZmZlcmVudAorfQlDSVBIRVJfU1VJVEUsICpQQ0lQSEVSX1NVSVRFOworCisvLyBFRENBIGNvbmZpZ3VyYXRpb24gZnJvbSBBUCdzIEJFQUNPTi9Qcm9iZVJzcAordHlwZWRlZiBzdHJ1Y3QgeworICAgIEJPT0xFQU4gICAgIGJWYWxpZDsgICAgICAgICAvLyAxOiB2YXJpYWJsZSBjb250YWlucyB2YWxpZCB2YWx1ZQorICAgIEJPT0xFQU4gICAgIGJBZGQ7ICAgICAgICAgLy8gMTogdmFyaWFibGUgY29udGFpbnMgdmFsaWQgdmFsdWUKKyAgICBCT09MRUFOICAgICBiUUFjazsKKyAgICBCT09MRUFOICAgICBiUXVldWVSZXF1ZXN0OworICAgIEJPT0xFQU4gICAgIGJUeG9wUmVxdWVzdDsKKyAgICBCT09MRUFOICAgICBiQVBTRENhcGFibGU7CisvLyAgQk9PTEVBTiAgICAgYk1vcmVEYXRhQWNrOworICAgIFVDSEFSICAgICAgIEVkY2FVcGRhdGVDb3VudDsKKyAgICBVQ0hBUiAgICAgICBBaWZzbls0XTsgICAgICAgLy8gMDpBQ19CSywgMTpBQ19CRSwgMjpBQ19WSSwgMzpBQ19WTworICAgIFVDSEFSICAgICAgIEN3bWluWzRdOworICAgIFVDSEFSICAgICAgIEN3bWF4WzRdOworICAgIFVTSE9SVCAgICAgIFR4b3BbNF07ICAgICAgLy8gaW4gdW5pdCBvZiAzMi11cworICAgIEJPT0xFQU4gICAgIGJBQ01bNF07ICAgICAgLy8gMTogQWRtaXNzaW9uIENvbnRyb2wgb2YgQUNfQksgaXMgbWFuZGF0dG9yeQorfSBFRENBX1BBUk0sICpQRURDQV9QQVJNOworCisvLyBRQlNTIExPQUQgaW5mb3JtYXRpb24gZnJvbSBRQVAncyBCRUFDT04vUHJvYmVSc3AKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBCT09MRUFOICAgICBiVmFsaWQ7ICAgICAgICAgICAgICAgICAgICAgLy8gMTogdmFyaWFibGUgY29udGFpbnMgdmFsaWQgdmFsdWUKKyAgICBVU0hPUlQgICAgICBTdGFOdW07CisgICAgVUNIQVIgICAgICAgQ2hhbm5lbFV0aWxpemF0aW9uOworICAgIFVTSE9SVCAgICAgIFJlbWFpbmluZ0FkbWlzc2lvbkNvbnRyb2w7ICAvLyBpbiB1bml0IG9mIDMyLXVzCit9IFFCU1NfTE9BRF9QQVJNLCAqUFFCU1NfTE9BRF9QQVJNOworCisvLyBRQlNTIEluZm8gZmllbGQgaW4gUVNUQSdzIGFzc29jIHJlcQordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVUNIQVIJCVJzdjI6MTsKKwlVQ0hBUgkJTWF4U1BMZW5ndGg6MjsKKwlVQ0hBUgkJUnN2MToxOworCVVDSEFSCQlVQVBTRF9BQ19CRToxOworCVVDSEFSCQlVQVBTRF9BQ19CSzoxOworCVVDSEFSCQlVQVBTRF9BQ19WSToxOworCVVDSEFSCQlVQVBTRF9BQ19WTzoxOworI2Vsc2UKKyAgICBVQ0hBUgkJVUFQU0RfQUNfVk86MTsKKwlVQ0hBUgkJVUFQU0RfQUNfVkk6MTsKKwlVQ0hBUgkJVUFQU0RfQUNfQks6MTsKKwlVQ0hBUgkJVUFQU0RfQUNfQkU6MTsKKwlVQ0hBUgkJUnN2MToxOworCVVDSEFSCQlNYXhTUExlbmd0aDoyOworCVVDSEFSCQlSc3YyOjE7CisjZW5kaWYgLyogIVJUX0JJR19FTkRJQU4gKi8KK30gUUJTU19TVEFfSU5GT19QQVJNLCAqUFFCU1NfU1RBX0lORk9fUEFSTTsKKworLy8gUUJTUyBJbmZvIGZpZWxkIGluIFFBUCdzIEJlYWNvbi9Qcm9iZVJzcAordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJVUNIQVIJCVVBUFNEOjE7CisJVUNIQVIJCVJzdjozOworICAgIFVDSEFSCQlQYXJhbVNldENvdW50OjQ7CisjZWxzZQorICAgIFVDSEFSCQlQYXJhbVNldENvdW50OjQ7CisJVUNIQVIJCVJzdjozOworCVVDSEFSCQlVQVBTRDoxOworI2VuZGlmIC8qICFSVF9CSUdfRU5ESUFOICovCit9IFFCU1NfQVBfSU5GT19QQVJNLCAqUFFCU1NfQVBfSU5GT19QQVJNOworCisvLyBRT1MgQ2FwYWJpbGl0eSByZXBvcnRlZCBpbiBRQVAncyBCRUFDT04vUHJvYmVSc3AKKy8vIFFPUyBDYXBhYmlsaXR5IHNlbnQgb3V0IGluIFFTVEEncyBBc3NvY2lhdGVSZXEvUmVBc3NvY2lhdGVSZXEKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBCT09MRUFOICAgICBiVmFsaWQ7ICAgICAgICAgICAgICAgICAgICAgLy8gMTogdmFyaWFibGUgY29udGFpbnMgdmFsaWQgdmFsdWUKKyAgICBCT09MRUFOICAgICBiUUFjazsKKyAgICBCT09MRUFOICAgICBiUXVldWVSZXF1ZXN0OworICAgIEJPT0xFQU4gICAgIGJUeG9wUmVxdWVzdDsKKy8vICBCT09MRUFOICAgICBiTW9yZURhdGFBY2s7CisgICAgVUNIQVIgICAgICAgRWRjYVVwZGF0ZUNvdW50OworfSBRT1NfQ0FQQUJJTElUWV9QQVJNLCAqUFFPU19DQVBBQklMSVRZX1BBUk07CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBVQ0hBUiAgICAgICBJRUxlbjsKKyAgICBVQ0hBUiAgICAgICBJRVtNQVhfQ1VTVE9NX0xFTl07Cit9IFdQQV9JRV87CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFVDSEFSICAgQnNzaWRbTUFDX0FERFJfTEVOXTsKKyAgICBVQ0hBUiAgIENoYW5uZWw7CisJVUNIQVIgICBDZW50cmFsQ2hhbm5lbDsJLy9TdG9yZSB0aGUgd2lkZS1iYW5kIGNlbnRyYWwgY2hhbm5lbCBmb3IgNDBNSHouICAudXNlZCBpbiA0ME1IeiBBUC4gT3IgdGhpcyBpcyB0aGUgc2FtZSBhcyBDaGFubmVsLgorICAgIFVDSEFSICAgQnNzVHlwZTsKKyAgICBVU0hPUlQgIEF0aW1XaW47CisgICAgVVNIT1JUICBCZWFjb25QZXJpb2Q7CisKKyAgICBVQ0hBUiAgIFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworICAgIFVDSEFSICAgU3VwUmF0ZUxlbjsKKyAgICBVQ0hBUiAgIEV4dFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworICAgIFVDSEFSICAgRXh0UmF0ZUxlbjsKKwlIVF9DQVBBQklMSVRZX0lFIEh0Q2FwYWJpbGl0eTsKKwlVQ0hBUgkJCUh0Q2FwYWJpbGl0eUxlbjsKKwlBRERfSFRfSU5GT19JRSBBZGRIdEluZm87CS8vIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRQorCVVDSEFSCQkJQWRkSHRJbmZvTGVuOworCVVDSEFSCQkJTmV3RXh0Q2hhbk9mZnNldDsKKwlDSEFSICAgIFJzc2k7CisgICAgVUNIQVIgICBQcml2YWN5OwkJCS8vIEluZGljYXRlIHNlY3VyaXR5IGZ1bmN0aW9uIE9OL09GRi4gRG9uJ3QgbWVzcyB1cCB3aXRoIGF1dGggbW9kZS4KKwlVQ0hBUglIaWRkZW47CisKKyAgICBVU0hPUlQgIER0aW1QZXJpb2Q7CisgICAgVVNIT1JUICBDYXBhYmlsaXR5SW5mbzsKKworICAgIFVTSE9SVCAgQ2ZwQ291bnQ7CisgICAgVVNIT1JUICBDZnBQZXJpb2Q7CisgICAgVVNIT1JUICBDZnBNYXhEdXJhdGlvbjsKKyAgICBVU0hPUlQgIENmcER1clJlbWFpbmluZzsKKyAgICBVQ0hBUiAgIFNzaWRMZW47CisgICAgQ0hBUiAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF07CisKKyAgICBVTE9ORyAgIExhc3RCZWFjb25SeFRpbWU7IC8vIE9TJ3MgdGltZXN0YW1wCisKKwlCT09MRUFOCWJTRVM7CisKKwkvLyBOZXcgZm9yIFdQQTIKKwlDSVBIRVJfU1VJVEUJCQkJCVdQQTsJCQkvLyBBUCBhbm5vdW5jZWQgV1BBIGNpcGhlciBzdWl0ZQorCUNJUEhFUl9TVUlURQkJCQkJV1BBMjsJCQkvLyBBUCBhbm5vdW5jZWQgV1BBMiBjaXBoZXIgc3VpdGUKKworCS8vIE5ldyBmb3IgbWljcm9zb2Z0IFdQQSBzdXBwb3J0CisJTkRJU184MDJfMTFfRklYRURfSUVzCUZpeElFczsKKwlORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCUF1dGhNb2RlQXV4OwkvLyBBZGRpdGlvbiBtb2RlIGZvciBXUEEyIC8gV1BBIGNhcGFibGUgQVAKKwlORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCUF1dGhNb2RlOworCU5ESVNfODAyXzExX1dFUF9TVEFUVVMJV2VwU3RhdHVzOwkJCQkvLyBVbmljYXN0IEVuY3J5cHRpb24gQWxnb3JpdGhtIGV4dHJhY3QgZnJvbSBWQVJfSUUKKwlVU0hPUlQJCQkJCVZhcklFTGVuOwkJCQkvLyBMZW5ndGggb2YgbmV4dCBWSUUgaW5jbHVkZSBFSUQgJiBMZW5ndGgKKwlVQ0hBUgkJCQkJVmFySUVzW01BWF9WSUVfTEVOXTsKKworCS8vIENDWCBDa2lwIGluZm9ybWF0aW9uCisgICAgVUNIQVIgICBDa2lwRmxhZzsKKworCS8vIENDWCAyIFRTRgorCVVDSEFSCVBUU0ZbNF07CQkvLyBQYXJlbnQgVFNGCisJVUNIQVIJVFRTRls4XTsJCS8vIFRhcmdldCBUU0YKKworICAgIC8vIDgwMi4xMWUgZDksIGFuZCBXTU0KKwlFRENBX1BBUk0gICAgICAgICAgIEVkY2FQYXJtOworCVFPU19DQVBBQklMSVRZX1BBUk0gUW9zQ2FwYWJpbGl0eTsKKwlRQlNTX0xPQURfUEFSTSAgICAgIFFic3NMb2FkOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgIFdQQV9JRV8gICAgIFdwYUlFOworICAgIFdQQV9JRV8gICAgIFJzbklFOworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwlVQ0hBUgkJQ291bnRyeVN0cmluZ1szXTsKKwlCT09MRUFOCQliSGFzQ291bnRyeUlFOworI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KK30gQlNTX0VOVFJZLCAqUEJTU19FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFVDSEFSICAgICAgICAgICBCc3NOcjsKKyAgICBVQ0hBUiAgICAgICAgICAgQnNzT3ZlcmxhcE5yOworICAgIEJTU19FTlRSWSAgICAgICBCc3NFbnRyeVtNQVhfTEVOX09GX0JTU19UQUJMRV07Cit9IEJTU19UQUJMRSwgKlBCU1NfVEFCTEU7CisKKwordHlwZWRlZiBzdHJ1Y3QgX01MTUVfUVVFVUVfRUxFTSB7CisgICAgVUxPTkcgICAgICAgICAgICAgTWFjaGluZTsKKyAgICBVTE9ORyAgICAgICAgICAgICBNc2dUeXBlOworICAgIFVMT05HICAgICAgICAgICAgIE1zZ0xlbjsKKyAgICBVQ0hBUiAgICAgICAgICAgICBNc2dbTUdNVF9ETUFfQlVGRkVSX1NJWkVdOworICAgIExBUkdFX0lOVEVHRVIgICAgIFRpbWVTdGFtcDsKKyAgICBVQ0hBUiAgICAgICAgICAgICBSc3NpMDsKKyAgICBVQ0hBUiAgICAgICAgICAgICBSc3NpMTsKKyAgICBVQ0hBUiAgICAgICAgICAgICBSc3NpMjsKKyAgICBVQ0hBUiAgICAgICAgICAgICBTaWduYWw7CisgICAgVUNIQVIgICAgICAgICAgICAgQ2hhbm5lbDsKKyAgICBVQ0hBUiAgICAgICAgICAgICBXY2lkOworICAgIEJPT0xFQU4gICAgICAgICAgIE9jY3VwaWVkOworI2lmZGVmIE1MTUVfRVgKKwlVU0hPUlQgICAgICAgICAgICBJZHg7CisjZW5kaWYgLy8gTUxNRV9FWCAvLworfSBNTE1FX1FVRVVFX0VMRU0sICpQTUxNRV9RVUVVRV9FTEVNOworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9RVUVVRSB7CisgICAgVUxPTkcgICAgICAgICAgICAgTnVtOworICAgIFVMT05HICAgICAgICAgICAgIEhlYWQ7CisgICAgVUxPTkcgICAgICAgICAgICAgVGFpbDsKKyAgICBORElTX1NQSU5fTE9DSyAgIExvY2s7CisgICAgTUxNRV9RVUVVRV9FTEVNICBFbnRyeVtNQVhfTEVOX09GX01MTUVfUVVFVUVdOworfSBNTE1FX1FVRVVFLCAqUE1MTUVfUVVFVUU7CisKK3R5cGVkZWYgVk9JRCAoKlNUQVRFX01BQ0hJTkVfRlVOQykoVk9JRCAqQWRhcHRvciwgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKwordHlwZWRlZiBzdHJ1Y3QgX1NUQVRFX01BQ0hJTkUgeworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZTsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5yU3RhdGU7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICBOck1zZzsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJTdGF0ZTsKKyAgICBTVEFURV9NQUNISU5FX0ZVTkMgICAgICAgICAgICAgKlRyYW5zRnVuYzsKK30gU1RBVEVfTUFDSElORSwgKlBTVEFURV9NQUNISU5FOworCisKKy8vIE1MTUUgQVVYIGRhdGEgc3RydWN0dXJlIHRoYXQgaG9sZCB0ZW1wb3JhcmxpeSBzZXR0aW5ncyBkdXJpbmcgYSBjb25uZWN0aW9uIGF0dGVtcHQuCisvLyBPbmNlIHRoaXMgYXR0ZW1wIHN1Y2NlZWRzLCBhbGwgc2V0dGluZ3Mgd2lsbCBiZSBjb3B5IHRvIHBBZC0+U3RhQWN0aXZlLgorLy8gQSBjb25uZWN0aW9uIGF0dGVtcHQgKHVzZXIgc2V0IE9JRCwgcm9hbWluZywgQ0NYIGZhc3Qgcm9hbWluZywuLikgY29uc2lzdHMgb2YKKy8vIHNldmVyYWwgc3RlcHMgKEpPSU4sIEFVVEgsIEFTU09DIG9yIFJFQVNTT0MpIGFuZCBtYXkgZmFpbCBhdCBhbnkgc3RlcC4gV2UgcHVycG9zZWx5CisvLyBzZXBhcmF0ZSB0aGlzIHVuZGVyLXRyaWFsIHNldHRpbmdzIGF3YXkgZnJvbSBwQWQtPlN0YUFjdGl2ZSBzbyB0aGF0IG9uY2UKKy8vIHRoaXMgbmV3IGF0dGVtcHQgZmFpbGVkLCBkcml2ZXIgY2FuIGF1dG8tcmVjb3ZlciBiYWNrIHRvIHRoZSBhY3RpdmUgc2V0dGluZ3MuCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9BVVggeworICAgIFVDSEFSICAgICAgICAgICAgICAgQnNzVHlwZTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIFNzaWRMZW47CisgICAgVUNIQVIgICAgICAgICAgICAgICBCc3NpZFtNQUNfQUREUl9MRU5dOworCVVDSEFSCQkJCUF1dG9SZWNvbm5lY3RTc2lkW01BWF9MRU5fT0ZfU1NJRF07CisJVUNIQVIJCQkJQXV0b1JlY29ubmVjdFNzaWRMZW47CisgICAgVVNIT1JUICAgICAgICAgICAgICBBbGc7CisgICAgVUNIQVIgICAgICAgICAgICAgICBTY2FuVHlwZTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIENoYW5uZWw7CisJVUNIQVIgICAgICAgICAgICAgICBDZW50cmFsQ2hhbm5lbDsKKyAgICBVU0hPUlQgICAgICAgICAgICAgIEFpZDsKKyAgICBVU0hPUlQgICAgICAgICAgICAgIENhcGFiaWxpdHlJbmZvOworICAgIFVTSE9SVCAgICAgICAgICAgICAgQmVhY29uUGVyaW9kOworICAgIFVTSE9SVCAgICAgICAgICAgICAgQ2ZwTWF4RHVyYXRpb247CisgICAgVVNIT1JUICAgICAgICAgICAgICBDZnBQZXJpb2Q7CisgICAgVVNIT1JUICAgICAgICAgICAgICBBdGltV2luOworCisJLy8gQ29weSBzdXBwb3J0ZWQgcmF0ZSBmcm9tIGRlc2lyZWQgQVAncyBiZWFjb24uIFdlIGFyZSB0cnlpbmcgdG8gbWF0Y2gKKwkvLyBBUCdzIHN1cHBvcnRlZCBhbmQgZXh0ZW5kZWQgcmF0ZSBzZXR0aW5ncy4KKwlVQ0hBUgkJICAgICAgICBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKKwlVQ0hBUgkJICAgICAgICBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKKwlVQ0hBUgkJICAgICAgICBTdXBSYXRlTGVuOworCVVDSEFSCQkgICAgICAgIEV4dFJhdGVMZW47CisJSFRfQ0FQQUJJTElUWV9JRQkJSHRDYXBhYmlsaXR5OworCVVDSEFSCQkgICAgICAgIAlIdENhcGFiaWxpdHlMZW47CisJQUREX0hUX0lORk9fSUUJCUFkZEh0SW5mbzsJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJVUNIQVIJCQlOZXdFeHRDaGFubmVsT2Zmc2V0OworCS8vUlRfSFRfQ0FQQUJJTElUWQlTdXBwb3J0ZWRIdFBoeTsKKworICAgIC8vIG5ldyBmb3IgUU9TCisgICAgUU9TX0NBUEFCSUxJVFlfUEFSTSBBUFFvc0NhcGFiaWxpdHk7ICAgIC8vIFFPUyBjYXBhYmlsaXR5IG9mIHRoZSBjdXJyZW50IGFzc29jaWF0ZWQgQVAKKyAgICBFRENBX1BBUk0gICAgICAgICAgIEFQRWRjYVBhcm07ICAgICAgICAgLy8gRURDQSBwYXJhbWV0ZXJzIG9mIHRoZSBjdXJyZW50IGFzc29jaWF0ZWQgQVAKKyAgICBRQlNTX0xPQURfUEFSTSAgICAgIEFQUWJzc0xvYWQ7ICAgICAgICAgLy8gUUJTUyBsb2FkIG9mIHRoZSBjdXJyZW50IGFzc29jaWF0ZWQgQVAKKworICAgIC8vIG5ldyB0byBrZWVwIFJhbGluayBzcGVjaWZpYyBmZWF0dXJlCisgICAgVUxPTkcgICAgICAgICAgICAgICBBUFJhbGlua0llOworCisgICAgQlNTX1RBQkxFICAgICAgICAgICBTc2lkQnNzVGFiOyAgICAgLy8gQVAgbGlzdCBmb3IgdGhlIHNhbWUgU1NJRAorICAgIEJTU19UQUJMRSAgICAgICAgICAgUm9hbVRhYjsgICAgICAgIC8vIEFQIGxpc3QgZWxpZ2libGUgZm9yIHJvYW1pbmcKKyAgICBVTE9ORyAgICAgICAgICAgICAgIEJzc0lkeDsKKyAgICBVTE9ORyAgICAgICAgICAgICAgIFJvYW1JZHg7CisKKwlCT09MRUFOCQkJCUN1cnJSZXFJc0Zyb21OZGlzOworCisgICAgUkFMSU5LX1RJTUVSX1NUUlVDVCBCZWFjb25UaW1lciwgU2NhblRpbWVyOworICAgIFJBTElOS19USU1FUl9TVFJVQ1QgQXV0aFRpbWVyOworICAgIFJBTElOS19USU1FUl9TVFJVQ1QgQXNzb2NUaW1lciwgUmVhc3NvY1RpbWVyLCBEaXNhc3NvY1RpbWVyOworfSBNTE1FX0FVWCwgKlBNTE1FX0FVWDsKKwordHlwZWRlZiBzdHJ1Y3QgX01MTUVfQUREQkFfUkVRX1NUUlVDVHsKKwlVQ0hBUiAgIFdjaWQ7CS8vCisJVUNIQVIgICBwQWRkcltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgQmFCdWZTaXplOworCVVTSE9SVAlUaW1lT3V0VmFsdWU7CisJVUNIQVIgICBUSUQ7CisJVUNIQVIgICBUb2tlbjsKKwlVU0hPUlQJQmFTdGFydFNlcTsKK30gTUxNRV9BRERCQV9SRVFfU1RSVUNULCAqUE1MTUVfQUREQkFfUkVRX1NUUlVDVDsKKworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9ERUxCQV9SRVFfU1RSVUNUeworCVVDSEFSICAgV2NpZDsJLy8KKwlVQ0hBUiAgICAgQWRkcltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgVElEOworCVVDSEFSCUluaXRpYXRvcjsKK30gTUxNRV9ERUxCQV9SRVFfU1RSVUNULCAqUE1MTUVfREVMQkFfUkVRX1NUUlVDVDsKKworLy8gYXNzb2Mgc3RydWN0IGlzIGVxdWFsIHRvIHJlYXNzb2MKK3R5cGVkZWYgc3RydWN0IF9NTE1FX0FTU09DX1JFUV9TVFJVQ1R7CisgICAgVUNIQVIgICAgIEFkZHJbTUFDX0FERFJfTEVOXTsKKyAgICBVU0hPUlQgICAgQ2FwYWJpbGl0eUluZm87CisgICAgVVNIT1JUICAgIExpc3RlbkludHY7CisgICAgVUxPTkcgICAgIFRpbWVvdXQ7Cit9IE1MTUVfQVNTT0NfUkVRX1NUUlVDVCwgKlBNTE1FX0FTU09DX1JFUV9TVFJVQ1QsIE1MTUVfUkVBU1NPQ19SRVFfU1RSVUNULCAqUE1MTUVfUkVBU1NPQ19SRVFfU1RSVUNUOworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUeworICAgIFVDSEFSICAgICBBZGRyW01BQ19BRERSX0xFTl07CisgICAgVVNIT1JUICAgIFJlYXNvbjsKK30gTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNULCAqUE1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVDsKKwordHlwZWRlZiBzdHJ1Y3QgX01MTUVfQVVUSF9SRVFfU1RSVUNUIHsKKyAgICBVQ0hBUiAgICAgICAgQWRkcltNQUNfQUREUl9MRU5dOworICAgIFVTSE9SVCAgICAgICBBbGc7CisgICAgVUxPTkcgICAgICAgIFRpbWVvdXQ7Cit9IE1MTUVfQVVUSF9SRVFfU1RSVUNULCAqUE1MTUVfQVVUSF9SRVFfU1RSVUNUOworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9ERUFVVEhfUkVRX1NUUlVDVCB7CisgICAgVUNIQVIgICAgICAgIEFkZHJbTUFDX0FERFJfTEVOXTsKKyAgICBVU0hPUlQgICAgICAgUmVhc29uOworfSBNTE1FX0RFQVVUSF9SRVFfU1RSVUNULCAqUE1MTUVfREVBVVRIX1JFUV9TVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBVTE9ORyAgICAgIEJzc0lkeDsKK30gTUxNRV9KT0lOX1JFUV9TVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX1NDQU5fUkVRX1NUUlVDVCB7CisgICAgVUNIQVIgICAgICBCc3NpZFtNQUNfQUREUl9MRU5dOworICAgIFVDSEFSICAgICAgQnNzVHlwZTsKKyAgICBVQ0hBUiAgICAgIFNjYW5UeXBlOworICAgIFVDSEFSICAgICAgU3NpZExlbjsKKyAgICBDSEFSICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKK30gTUxNRV9TQ0FOX1JFUV9TVFJVQ1QsICpQTUxNRV9TQ0FOX1JFUV9TVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX1NUQVJUX1JFUV9TVFJVQ1QgeworICAgIENIQVIgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKyAgICBVQ0hBUiAgICAgICBTc2lkTGVuOworfSBNTE1FX1NUQVJUX1JFUV9TVFJVQ1QsICpQTUxNRV9TVEFSVF9SRVFfU1RSVUNUOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisvLyBzdHJ1Y3R1cmUgZm9yIERMUwordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9ETFMgeworCVVTSE9SVAkJCQkJCVRpbWVPdXQ7CQkvLyBVc2UgdG8gdGltZSBvdXQgd2hpbGUgc2xpZW5jZSwgdW5pdDogc2Vjb25kICwgc2V0IGJ5IFVJCisJVVNIT1JUCQkJCQkJQ291bnREb3duVGltZXI7CS8vIFVzZSB0byB0aW1lIG91dCB3aGlsZSBzbGllbmNlLHVuaXQ6IHNlY29uZCAsIHVzZWQgYnkgZHJpdmVyIG9ubHkKKwlORElTXzgwMl8xMV9NQUNfQUREUkVTUwkJTWFjQWRkcjsJCS8vIHNldCBieSBVSQorCVVDSEFSCQkJCQkJU3RhdHVzOwkJCS8vIDA6IG5vbmUgLCAxOiB3YWl0IFNUQWtleSwgMjogZmluaXNoIERMUyBzZXR1cCAsIHNldCBieSBkcml2ZXIgb25seQorCUJPT0xFQU4JCQkJCQlWYWxpZDsJCQkvLyAxOiB2YWxpZCAsIDA6IGludmFsaWQgLCBzZXQgYnkgVUksIHVzZSB0byBzZXR1cCBvciB0ZWFyIGRvd24gRExTIGxpbmsKKwlSQUxJTktfVElNRVJfU1RSVUNUCQkJVGltZXI7CQkJLy8gVXNlIHRvIHRpbWUgb3V0IHdoaWxlIGhhbmRzaGFrZQorCVVTSE9SVAkJCQkJCVNlcXVlbmNlOworCVVTSE9SVAkJCQkJCU1hY1RhYk1hdGNoV0NJRDsJLy8gQVNJQworCUJPT0xFQU4JCQkJCQliSFRDYXA7CisJUFZPSUQJCQkJCQlwQWQ7Cit9IFJUXzgwMl8xMV9ETFMsICpQUlRfODAyXzExX0RMUzsKKwordHlwZWRlZiBzdHJ1Y3QgX01MTUVfRExTX1JFUV9TVFJVQ1QgeworICAgIFBSVF84MDJfMTFfRExTCXBETFM7CisgICAgVVNIT1JUCQkJUmVhc29uOworfSBNTE1FX0RMU19SRVFfU1RSVUNULCAqUE1MTUVfRExTX1JFUV9TVFJVQ1Q7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCB7CisgICAgVUNIQVIgICBFaWQ7CisgICAgVUNIQVIgICBMZW47CisgICAgQ0hBUiAgIE9jdGV0WzFdOworfSBFSURfU1RSVUNULCpQRUlEX1NUUlVDVCwgQkVBQ09OX0VJRF9TVFJVQ1QsICpQQkVBQ09OX0VJRF9TVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfUlRNUF9UWF9SQVRFX1NXSVRDSAoreworCVVDSEFSICAgSXRlbU5vOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVQ0hBUglSc3YyOjI7CisJVUNIQVIJTW9kZToyOworCVVDSEFSCVJzdjE6MTsKKwlVQ0hBUglCVzoxOworCVVDSEFSCVNob3J0R0k6MTsKKwlVQ0hBUglTVEJDOjE7CisjZWxzZQorCVVDSEFSCVNUQkM6MTsKKwlVQ0hBUglTaG9ydEdJOjE7CisJVUNIQVIJQlc6MTsKKwlVQ0hBUglSc3YxOjE7CisJVUNIQVIJTW9kZToyOworCVVDSEFSCVJzdjI6MjsKKyNlbmRpZgorCVVDSEFSICAgQ3Vyck1DUzsKKwlVQ0hBUiAgIFRyYWluVXA7CisJVUNIQVIgICBUcmFpbkRvd247Cit9IFJSVE1QX1RYX1JBVEVfU1dJVENILCAqUFJUTVBfVFhfUkFURV9TV0lUQ0g7CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09IEFQIG1sbWUuaCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIFRCVFRfUFJFTE9BRF9USU1FICAgICAgIDM4NCAgICAgICAgLy8gdXNlYy4gTG9tZ1ByZWFtYmxlICsgMjQtYnl0ZSBhdCAxTWJwcworI2RlZmluZSBERUZBVUxUX0RUSU1fUEVSSU9EICAgICAxCisKKy8vIHdlaWdodGluZyBmYWN0b3IgdG8gY2FsY3VsYXRlIENoYW5uZWwgcXVhbGl0eSwgdG90YWwgc2hvdWxkIGJlIDEwMCUKKy8vI2RlZmluZSBSU1NJX1dFSUdIVElORyAgICAgICAgICAgICAgICAgICAwCisvLyNkZWZpbmUgVFhfV0VJR0hUSU5HICAgICAgICAgICAgICAgICAgICAgNDAKKy8vI2RlZmluZSBSWF9XRUlHSFRJTkcgICAgICAgICAgICAgICAgICAgICA2MAorCisjZGVmaW5lIE1BQ19UQUJMRV9BR0VPVVRfVElNRQkJCTMwMAkJCS8vIHVuaXQ6IHNlYworI2RlZmluZSBNQUNfVEFCTEVfQVNTT0NfVElNRU9VVAkJCTUJCQkvLyB1bml0OiBzZWMKKyNkZWZpbmUgTUFDX1RBQkxFX0ZVTEwoVGFiKQkJCQkoKFRhYikuc2l6ZSA9PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKworLy8gQVAgc2hhbGwgZHJvcCB0aGUgc3RhIGlmIGNvbnRpbmUgVHggZmFpbCBjb3VudCByZWFjaCBpdC4KKyNkZWZpbmUgTUFDX0VOVFJZX0xJRkVfQ0hFQ0tfQ05UCQkyMAkJCS8vIHBhY2tldCBjbnQuCisKKy8vIFZhbHVlIGRvbWFpbiBvZiBwTWFjRW50cnktPlNzdAordHlwZWRlZiBlbnVtIF9Tc3QgeworICAgIFNTVF9OT1RfQVVUSCwgICAvLyAwOiBlcXVpdmFsZW50IHRvIElFRUUgODAyLjExLzE5OTkgc3RhdGUgMQorICAgIFNTVF9BVVRILCAgICAgICAvLyAxOiBlcXVpdmFsZW50IHRvIElFRUUgODAyLjExLzE5OTkgc3RhdGUgMgorICAgIFNTVF9BU1NPQyAgICAgICAvLyAyOiBlcXVpdmFsZW50IHRvIElFRUUgODAyLjExLzE5OTkgc3RhdGUgMworfSBTU1Q7CisKKy8vIHZhbHVlIGRvbWFpbiBvZiBwTWFjRW50cnktPkF1dGhTdGF0ZQordHlwZWRlZiBlbnVtIF9BdXRoU3RhdGUgeworICAgIEFTX05PVF9BVVRILAorICAgIEFTX0FVVEhfT1BFTiwgICAgICAgLy8gU1RBIGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQgdXNpbmcgT1BFTiBTWVNURU0KKyAgICBBU19BVVRIX0tFWSwgICAgICAgIC8vIFNUQSBoYXMgYmVlbiBhdXRoZW50aWNhdGVkIHVzaW5nIFNIQVJFRCBLRVkKKyAgICBBU19BVVRIRU5USUNBVElORyAgIC8vIFNUQSBpcyB3YWl0aW5nIGZvciBBVVRIIHNlcSMzIHVzaW5nIFNIQVJFRCBLRVkKK30gQVVUSF9TVEFURTsKKworLy9mb3Itd3BhIHZhbHVlIGRvbWFpbiBvZiBwTWFjRW50cnktPldwYVN0YXRlICA4MDIuMWkgRDMgICBwLjExNAordHlwZWRlZiBlbnVtIF9BcFdwYVN0YXRlIHsKKyAgICBBU19OT1RVU0UsICAgICAgICAgICAgICAvLyAwCisgICAgQVNfRElTQ09OTkVDVCwgICAgICAgICAgLy8gMQorICAgIEFTX0RJU0NPTk5FQ1RFRCwgICAgICAgIC8vIDIKKyAgICBBU19JTklUSUFMSVpFLCAgICAgICAgICAvLyAzCisgICAgQVNfQVVUSEVOVElDQVRJT04sICAgICAgLy8gNAorICAgIEFTX0FVVEhFTlRJQ0FUSU9OMiwgICAgIC8vIDUKKyAgICBBU19JTklUUE1LLCAgICAgICAgICAgICAvLyA2CisgICAgQVNfSU5JVFBTSywgICAgICAgICAgICAgLy8gNworICAgIEFTX1BUS1NUQVJULCAgICAgICAgICAgIC8vIDgKKyAgICBBU19QVEtJTklUX05FR09USUFUSU5HLCAvLyA5CisgICAgQVNfUFRLSU5JVERPTkUsICAgICAgICAgLy8gMTAKKyAgICBBU19VUERBVEVLRVlTLCAgICAgICAgICAvLyAxMQorICAgIEFTX0lOVEVHUklUWV9GQUlMVVJFLCAgIC8vIDEyCisgICAgQVNfS0VZVVBEQVRFLCAgICAgICAgICAgLy8gMTMKK30gQVBfV1BBX1NUQVRFOworCisvLyBmb3Itd3BhIHZhbHVlIGRvbWFpbiBvZiBwTWFjRW50cnktPldwYVN0YXRlICA4MDIuMWkgRDMgICBwLjExNAordHlwZWRlZiBlbnVtIF9HVEtTdGF0ZSB7CisgICAgUkVLRVlfTkVHT1RJQVRJTkcsCisgICAgUkVLRVlfRVNUQUJMSVNIRUQsCisgICAgS0VZRVJST1IsCit9IEdUS19TVEFURTsKKworLy8gIGZvci13cGEgIHZhbHVlIGRvbWFpbiBvZiBwTWFjRW50cnktPldwYVN0YXRlICA4MDIuMWkgRDMgICBwLjExNAordHlwZWRlZiBlbnVtIF9XcGFHVEtTdGF0ZSB7CisgICAgU0VUS0VZUywKKyAgICBTRVRLRVlTX0RPTkUsCit9IFdQQV9HVEtfU1RBVEU7CisvLyA9PT09PT09PT09PT09PT09PT09PT09IGVuZCBvZiBBUCBtbG1lLmggPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKyNlbmRpZgkvLyBNTE1FX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9uZXRpZl9ibG9jay5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9uZXRpZl9ibG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNTE1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL25ldGlmX2Jsb2NrLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBfX05FVF9JRl9CTE9DS19IX18KKyNkZWZpbmUgX19ORVRfSUZfQkxPQ0tfSF9fCisKKy8vI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgImxpbmtfbGlzdC5oIgorI2luY2x1ZGUgInJ0bXAuaCIKKworI2RlZmluZSBGUkVFX05FVElGX1BPT0xfU0laRSAzMgorCit0eXBlZGVmIHN0cnVjdCBfTkVUSUZfRU5UUlkKK3sKKwlzdHJ1Y3QgX05FVElGX0VOVFJZICpwTmV4dDsKKwlQTkVUX0RFViBwTmV0RGV2OworfSBORVRJRl9FTlRSWSwgKlBORVRJRl9FTlRSWTsKKwordm9pZCBpbml0YmxvY2tRdWV1ZVRhYigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK0JPT0xFQU4gYmxvY2tOZXRJZigKKwlJTiBQQkxPQ0tfUVVFVUVfRU5UUlkgcEJsb2NrUXVldWVFbnRyeSwKKwlJTiBQTkVUX0RFViBwTmV0RGV2KTsKKworVk9JRCByZWxlYXNlTmV0SWYoCisJSU4gUEJMT0NLX1FVRVVFX0VOVFJZIHBCbG9ja1F1ZXVlRW50cnkpOworCitWT0lEIFN0b3BOZXRJZlF1ZXVlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIFF1ZUlkeCwKKwlJTiBQTkRJU19QQUNLRVQgcFBhY2tldCk7CisjZW5kaWYgLy8gX19ORVRfSUZfQkxPQ0tfSF9fCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvb2lkLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL29pZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OGJmMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL29pZC5oCkBAIC0wLDAgKzEsMTE0MiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlvaWQuaAorCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncworKi8KKyNpZm5kZWYgX09JRF9IXworI2RlZmluZSBfT0lEX0hfCisKKy8vI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisKKworI2RlZmluZSBUUlVFCQkJCTEKKyNkZWZpbmUgRkFMU0UJCQkJMAorLy8KKy8vIElFRUUgODAyLjExIFN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zCisvLworI2RlZmluZSBNQVhfVFhfUE9XRVJfTEVWRUwgICAgICAgICAgICAgIDEwMCAgIC8qIG1XICovCisjZGVmaW5lIE1BWF9SU1NJX1RSSUdHRVIgICAgICAgICAgICAgICAgLTEwICAgIC8qIGRCbSAqLworI2RlZmluZSBNSU5fUlNTSV9UUklHR0VSICAgICAgICAgICAgICAgIC0yMDAgICAvKiBkQm0gKi8KKyNkZWZpbmUgTUFYX0ZSQUdfVEhSRVNIT0xEICAgICAgICAgICAgICAyMzQ2ICAvKiBieXRlIGNvdW50ICovCisjZGVmaW5lIE1JTl9GUkFHX1RIUkVTSE9MRCAgICAgICAgICAgICAgMjU2ICAgLyogYnl0ZSBjb3VudCAqLworI2RlZmluZSBNQVhfUlRTX1RIUkVTSE9MRCAgICAgICAgICAgICAgIDIzNDcgIC8qIGJ5dGUgY291bnQgKi8KKworLy8gbmV3IHR5cGVzIGZvciBNZWRpYSBTcGVjaWZpYyBJbmRpY2F0aW9ucworLy8gRXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0CisjZGVmaW5lIEVYVENIQV9OT05FCQkJMAorI2RlZmluZSBFWFRDSEFfQUJPVkUJCTB4MQorI2RlZmluZSBFWFRDSEFfQkVMT1cJCTB4MworCisvLyBCVworI2RlZmluZSBCQU5EX1dJRFRIXzIwCQkwCisjZGVmaW5lIEJBTkRfV0lEVEhfNDAJCTEKKyNkZWZpbmUgQkFORF9XSURUSF9CT1RICQkyCisjZGVmaW5lIEJBTkRfV0lEVEhfMTAJCTMJLy8gODAyLjExaiBoYXMgMTBNSHouIFRoaXMgZGVmaW5pdGlvbiBpcyBmb3IgaW50ZXJuYWwgdXNhZ2UuIGRvZXNuJ3QgZmlsbCBpbiB0aGUgSUUgb3Igb3RoZXIgZmllbGQuCisvLyBTSE9SVEdJCisjZGVmaW5lIEdBUF9JTlRFUlZBTF80MDAJMQkvLyBvbmx5IHN1cHBvcnQgaW4gSFQgbW9kZQorI2RlZmluZSBHQVBfSU5URVJWQUxfODAwCTAKKyNkZWZpbmUgR0FQX0lOVEVSVkFMX0JPVEgJMgorCisjZGVmaW5lIE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkCQkJMQorI2RlZmluZSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZAkJMAorCisjZGVmaW5lIE5ESVNfODAyXzExX0xFTkdUSF9TU0lEICAgICAgICAgMzIKKyNkZWZpbmUgTkRJU184MDJfMTFfTEVOR1RIX1JBVEVTICAgICAgICA4CisjZGVmaW5lIE5ESVNfODAyXzExX0xFTkdUSF9SQVRFU19FWCAgICAgMTYKKyNkZWZpbmUgTUFDX0FERFJfTEVOR1RIICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIE1BWF9OVU1fT0ZfQ0hTCQkJCQk0OSAvLyAxNCBjaGFubmVscyBAMi40RyArICAxMkBVTklJICsgNCBATU1BQyArIDExIEBIaXBlckxBTjIgKyA3IEBKYXBhbiArIDEgYXMgTlVMTCB0ZXJtaW5hdGlvbmMKKyNkZWZpbmUgTUFYX05VTUJFUl9PRl9FVkVOVAkJCQkxMCAgLy8gZW50cnkgIyBpbiBFVkVOVCB0YWJsZQorI2RlZmluZSBNQVhfTlVNQkVSX09GX01BQwkJCQkzMiAvLyBpZiBNQVhfTUJTU0lEX05VTSBpcyA4LCB0aGlzIHZhbHVlIGNhbid0IGJlIGxhcmdlciB0aGFuIDIxMQorI2RlZmluZSBNQVhfTlVNQkVSX09GX0FDTAkJCQk2NAorI2RlZmluZSBNQVhfTEVOR1RIX09GX1NVUFBPUlRfUkFURVMJCTEyICAgIC8vIDEsIDIsIDUuNSwgMTEsIDYsIDksIDEyLCAxOCwgMjQsIDM2LCA0OCwgNTQKKyNkZWZpbmUgTUFYX05VTUJFUl9PRl9ETFNfRU5UUlkJCQk0CisKKworCisjaWZuZGVmIFVOREVSX0NFCisvLyBPSUQgZGVmaW5pdGlvbiwgc2luY2UgTkRJUyA1LjAgZGlkbid0IGRlZmluZSB0aGVzZSwgd2UgbmVlZCB0byBkZWZpbmUgZm9yIG91ciBvd24KKy8vI2lmIF9XSU4zMl9XSU5OVDw9MHgwNTAwCisKKyNkZWZpbmUgT0lEX0dFTl9NQUNISU5FX05BTUUgICAgICAgICAgICAgICAweDAwMDEwMjFBCisKKyNpZmRlZiBSQUxJTktfQVRFCisjZGVmaW5lIFJUX1FVRVJZX0FURV9UWERPTkVfQ09VTlQJCQkweDA0MDEKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisjZGVmaW5lIFJUX1FVRVJZX1NJR05BTF9DT05URVhUCQkJCTB4MDQwMgorI2RlZmluZSBSVF9TRVRfSUFQUF9QSUQgICAgICAgICAgICAgICAgIAkweDA0MDQKKyNkZWZpbmUgUlRfU0VUX0FQRF9QSUQJCQkJCQkweDA0MDUKKyNkZWZpbmUgUlRfU0VUX0RFTF9NQUNfRU5UUlkJCQkJMHgwNDA2CisKKy8vCisvLyBJRUVFIDgwMi4xMSBPSURzCisvLworI2RlZmluZQlPSURfR0VUX1NFVF9UT0dHTEUJCQkweDgwMDAKKworI2RlZmluZQlPSURfODAyXzExX05FVFdPUktfVFlQRVNfU1VQUE9SVEVECQkJMHgwMTAzCisjZGVmaW5lCU9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRQkJCQkweDAxMDQKKyNkZWZpbmUJT0lEXzgwMl8xMV9SU1NJX1RSSUdHRVIJCQkJCQkweDAxMDcKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9SU1NJCQkJCQkJCTB4MDEwOCAvL3J0Mjg2MAlvbmx5ICwga2F0aHkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9SU1NJXzEJCQkJCQkweDAxMDkgLy9ydDI4NjAJb25seSAsIGthdGh5CisjZGVmaW5lCVJUX09JRF84MDJfMTFfUlNTSV8yCQkJCQkJMHgwMTBBIC8vcnQyODYwCW9ubHkgLCBrYXRoeQorI2RlZmluZQlPSURfODAyXzExX05VTUJFUl9PRl9BTlRFTk5BUwkJCQkweDAxMEIKKyNkZWZpbmUJT0lEXzgwMl8xMV9SWF9BTlRFTk5BX1NFTEVDVEVECQkJCTB4MDEwQworI2RlZmluZQlPSURfODAyXzExX1RYX0FOVEVOTkFfU0VMRUNURUQJCQkJMHgwMTBECisjZGVmaW5lCU9JRF84MDJfMTFfU1VQUE9SVEVEX1JBVEVTCQkJCQkweDAxMEUKKyNkZWZpbmUJT0lEXzgwMl8xMV9BRERfV0VQCQkJCQkJCTB4MDExMgorI2RlZmluZQlPSURfODAyXzExX1JFTU9WRV9XRVAJCQkJCQkweDAxMTMKKyNkZWZpbmUJT0lEXzgwMl8xMV9ESVNBU1NPQ0lBVEUJCQkJCQkweDAxMTQKKyNkZWZpbmUJT0lEXzgwMl8xMV9QUklWQUNZX0ZJTFRFUgkJCQkJMHgwMTE4CisjZGVmaW5lCU9JRF84MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04JCQkweDAxMUUKKyNkZWZpbmUJT0lEXzgwMl8xMV9URVNUCQkJCQkJCQkweDAxMUYKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9DT1VOVFJZX1JFR0lPTgkJCQkweDA1MDcKKyNkZWZpbmUJT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4JCQkJCTB4MDUwOAorI2RlZmluZQlPSURfODAyXzExX1NTSUQJCQkJCQkJCTB4MDUwOQorI2RlZmluZQlPSURfODAyXzExX0JTU0lECQkJCQkJCTB4MDUwQQorI2RlZmluZQlSVF9PSURfODAyXzExX1JBRElPCQkJCQkJCTB4MDUwQgorI2RlZmluZQlSVF9PSURfODAyXzExX1BIWV9NT0RFCQkJCQkJMHgwNTBDCisjZGVmaW5lCVJUX09JRF84MDJfMTFfU1RBX0NPTkZJRwkJCQkJMHgwNTBECisjZGVmaW5lCU9JRF84MDJfMTFfREVTSVJFRF9SQVRFUwkJCQkJMHgwNTBFCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUFJFQU1CTEUJCQkJCQkweDA1MEYKKyNkZWZpbmUJT0lEXzgwMl8xMV9XRVBfU1RBVFVTCQkJCQkJMHgwNTEwCisjZGVmaW5lCU9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERQkJCQkweDA1MTEKKyNkZWZpbmUJT0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFCQkJCTB4MDUxMgorI2RlZmluZQlSVF9PSURfODAyXzExX1JFU0VUX0NPVU5URVJTCQkJCTB4MDUxMworI2RlZmluZQlPSURfODAyXzExX1JUU19USFJFU0hPTEQJCQkJCTB4MDUxNAorI2RlZmluZQlPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xECQkJMHgwNTE1CisjZGVmaW5lCU9JRF84MDJfMTFfUE9XRVJfTU9ERQkJCQkJCTB4MDUxNgorI2RlZmluZQlPSURfODAyXzExX1RYX1BPV0VSX0xFVkVMCQkJCQkweDA1MTcKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9BRERfV1BBCQkJCQkJMHgwNTE4CisjZGVmaW5lCU9JRF84MDJfMTFfUkVNT1ZFX0tFWQkJCQkJCTB4MDUxOQorI2RlZmluZQlPSURfODAyXzExX0FERF9LRVkJCQkJCQkJMHgwNTIwCisjZGVmaW5lCU9JRF84MDJfMTFfQ09ORklHVVJBVElPTgkJCQkJMHgwNTIxCisjZGVmaW5lCU9JRF84MDJfMTFfVFhfUEFDS0VUX0JVUlNUCQkJCQkweDA1MjIKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9OT0lTRV9MRVZFTAkJCQkweDA1MjMKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9FWFRSQV9JTkZPCQkJCQkweDA1MjQKKyNpZmRlZglEQkcKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9IQVJEV0FSRV9SRUdJU1RFUgkJCQkweDA1MjUKKyNlbmRpZgorI2RlZmluZSBPSURfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTICAgICAgICAgICAgT0lEXzgwMl8xMV9XRVBfU1RBVFVTCisjZGVmaW5lIE9JRF84MDJfMTFfREVBVVRIRU5USUNBVElPTiAgICAgICAgICAgICAgICAgMHgwNTI2CisjZGVmaW5lIE9JRF84MDJfMTFfRFJPUF9VTkVOQ1JZUFRFRCAgICAgICAgICAgICAgICAgMHgwNTI3CisjZGVmaW5lIE9JRF84MDJfMTFfTUlDX0ZBSUxVUkVfUkVQT1JUX0ZSQU1FICAgICAgICAgMHgwNTI4CisKKy8vIEZvciA4MDIuMXggZGFlbWluIHVzaW5nIHRvIHJlcXVpcmUgY3VycmVudCBkcml2ZXIgY29uZmlndXJhdGlvbgorI2RlZmluZSBPSURfODAyXzExX1JBRElVU19RVUVSWV9TRVRUSU5HCQkJCTB4MDU0MAorCisjZGVmaW5lCVJUX09JRF9ERVZJQ0VfTkFNRQkJCQkJCQkweDA2MDcKKyNkZWZpbmUJUlRfT0lEX1ZFUlNJT05fSU5GTwkJCQkJCQkweDA2MDgKKyNkZWZpbmUJT0lEXzgwMl8xMV9CU1NJRF9MSVNUCQkJCQkJMHgwNjA5CisjZGVmaW5lCU9JRF84MDJfM19DVVJSRU5UX0FERFJFU1MJCQkJCTB4MDYwQQorI2RlZmluZQlPSURfR0VOX01FRElBX0NPTk5FQ1RfU1RBVFVTCQkJCTB4MDYwQgorI2RlZmluZQlSVF9PSURfODAyXzExX1FVRVJZX0xJTktfU1RBVFVTCQkJCTB4MDYwQworI2RlZmluZQlPSURfODAyXzExX1JTU0kJCQkJCQkJCTB4MDYwRAorI2RlZmluZQlPSURfODAyXzExX1NUQVRJU1RJQ1MJCQkJCQkweDA2MEUKKyNkZWZpbmUJT0lEX0dFTl9SQ1ZfT0sJCQkJCQkJCTB4MDYwRgorI2RlZmluZQlPSURfR0VOX1JDVl9OT19CVUZGRVIJCQkJCQkweDA2MTAKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9FRVBST01fVkVSU0lPTgkJCTB4MDYxMQorI2RlZmluZQlSVF9PSURfODAyXzExX1FVRVJZX0ZJUk1XQVJFX1ZFUlNJT04JCTB4MDYxMgorI2RlZmluZQlSVF9PSURfODAyXzExX1FVRVJZX0xBU1RfUlhfUkFURQkJCTB4MDYxMworI2RlZmluZQlSVF9PSURfODAyXzExX1RYX1BPV0VSX0xFVkVMXzEJCQkJMHgwNjE0CisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfUElEVklECQkJCQkweDA2MTUKKy8vZm9yIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNkZWZpbmUgT0lEX1NFVF9DT1VOVEVSTUVBU1VSRVMgICAgICAgICAgICAgICAgICAgICAweDA2MTYKKyNkZWZpbmUgT0lEXzgwMl8xMV9TRVRfSUVFRTgwMjFYICAgICAgICAgICAgICAgICAgICAweDA2MTcKKyNkZWZpbmUgT0lEXzgwMl8xMV9TRVRfSUVFRTgwMjFYX1JFUVVJUkVfS0VZICAgICAgICAweDA2MTgKKyNkZWZpbmUgT0lEXzgwMl8xMV9QTUtJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MjAKKyNkZWZpbmUgUlRfT0lEX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgICAgICAgICAgICAgICAweDA2MjEKKyNkZWZpbmUgUlRfT0lEX1dFX1ZFUlNJT05fQ09NUElMRUQgICAgICAgICAgICAgICAgICAweDA2MjIKKyNkZWZpbmUgUlRfT0lEX05FV19EUklWRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2MjMKKworCisvL3J0Mjg2MCAsIGthdGh5CisjZGVmaW5lCVJUX09JRF84MDJfMTFfU05SXzAJCQkJCQkJMHgwNjMwCisjZGVmaW5lCVJUX09JRF84MDJfMTFfU05SXzEJCQkJCQkJMHgwNjMxCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfTEFTVF9UWF9SQVRFCQkJMHgwNjMyCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfSFRfUEhZTU9ERQkJCQkweDA2MzMKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9TRVRfSFRfUEhZTU9ERQkJCQkweDA2MzQKKyNkZWZpbmUJT0lEXzgwMl8xMV9SRUxPQURfREVGQVVMVFMJCQkJCTB4MDYzNQorI2RlZmluZQlSVF9PSURfODAyXzExX1FVRVJZX0FQU0RfU0VUVElORwkJCTB4MDYzNgorI2RlZmluZQlSVF9PSURfODAyXzExX1NFVF9BUFNEX1NFVFRJTkcJCQkJMHgwNjM3CisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfQVBTRF9QU00JCQkJMHgwNjM4CisjZGVmaW5lCVJUX09JRF84MDJfMTFfU0VUX0FQU0RfUFNNCQkJCQkweDA2MzkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9RVUVSWV9ETFMJCQkJCQkweDA2M0EKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9TRVRfRExTCQkJCQkJMHgwNjNCCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUVVFUllfRExTX1BBUkFNCQkJCTB4MDYzQworI2RlZmluZQlSVF9PSURfODAyXzExX1NFVF9ETFNfUEFSQU0JCQkJCTB4MDYzRAorI2RlZmluZSBSVF9PSURfODAyXzExX1FVRVJZX1dNTSAgICAgICAgICAgICAgCQkweDA2M0UKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9TRVRfV01NICAgICAgCQkJCQkweDA2M0YKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9RVUVSWV9JTU1FX0JBX0NBUAkJCQkweDA2NDAKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9TRVRfSU1NRV9CQV9DQVAJCQkJMHgwNjQxCisjZGVmaW5lIFJUX09JRF84MDJfMTFfUVVFUllfQkFUQUJMRQkJCQkJMHgwNjQyCisjZGVmaW5lIFJUX09JRF84MDJfMTFfQUREX0lNTUVfQkEJCQkJCTB4MDY0MworI2RlZmluZSBSVF9PSURfODAyXzExX1RFQVJfSU1NRV9CQQkJCQkJMHgwNjQ0CisjZGVmaW5lIFJUX09JRF9EUklWRVJfREVWSUNFX05BTUUgICAgICAgICAgICAgICAgICAgMHgwNjQ1CisjZGVmaW5lIFJUX09JRF84MDJfMTFfUVVFUllfREFUX0hUX1BIWU1PREUgICAgICAgICAgMHgwNjQ2CisjZGVmaW5lIFJUX09JRF9RVUVSWV9NVUxUSVBMRV9DQVJEX1NVUFBPUlQgICAgICAgICAgMHgwNjQ3CisKKy8vIFJhbGluayBkZWZpbmVkIE9JRHMKKy8vIERlbm5pcyBMZWUgbW92ZSB0byBwbGF0Zm9ybSBzcGVjaWZpYworCisjZGVmaW5lCVJUX09JRF84MDJfMTFfQlNTSUQJCQkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfQlNTSUQpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfU1NJRAkJCQkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9TU0lEKQorI2RlZmluZQlSVF9PSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREUJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFKQorI2RlZmluZQlSVF9PSURfODAyXzExX0FERF9XRVAJCQkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9BRERfV0VQKQorI2RlZmluZQlSVF9PSURfODAyXzExX0FERF9LRVkJCQkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9BRERfS0VZKQorI2RlZmluZQlSVF9PSURfODAyXzExX1JFTU9WRV9XRVAJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1JFTU9WRV9XRVApCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUkVNT1ZFX0tFWQkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfUkVNT1ZFX0tFWSkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9ESVNBU1NPQ0lBVEUJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX0RJU0FTU09DSUFURSkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9QUklWQUNZX0ZJTFRFUgkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9QUklWQUNZX0ZJTFRFUikKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4JCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOKQorI2RlZmluZQlSVF9PSURfODAyXzExX1dFUF9TVEFUVVMJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1dFUF9TVEFUVVMpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfUkVMT0FEX0RFRkFVTFRTCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1JFTE9BRF9ERUZBVUxUUykKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVfSU5fVVNFCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRSkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTAkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTCkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9SU1NJX1RSSUdHRVIJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1JTU0lfVFJJR0dFUikKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCkKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xECQkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9SVFNfVEhSRVNIT0xEKQorI2RlZmluZQlSVF9PSURfODAyXzExX1JYX0FOVEVOTkFfU0VMRUNURUQJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9SWF9BTlRFTk5BX1NFTEVDVEVEKQorI2RlZmluZQlSVF9PSURfODAyXzExX1RYX0FOVEVOTkFfU0VMRUNURUQJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9UWF9BTlRFTk5BX1NFTEVDVEVEKQorI2RlZmluZQlSVF9PSURfODAyXzExX1NVUFBPUlRFRF9SQVRFUwkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9TVVBQT1JURURfUkFURVMpCisjZGVmaW5lCVJUX09JRF84MDJfMTFfREVTSVJFRF9SQVRFUwkJCSAgKE9JRF9HRVRfU0VUX1RPR0dMRSB8CU9JRF84MDJfMTFfREVTSVJFRF9SQVRFUykKKyNkZWZpbmUJUlRfT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OCQkJICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwJT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OKQorI2RlZmluZQlSVF9PSURfODAyXzExX1BPV0VSX01PREUJCQkgIChPSURfR0VUX1NFVF9UT0dHTEUgfAlPSURfODAyXzExX1BPV0VSX01PREUpCisKKworCit0eXBlZGVmIGVudW0gX05ESVNfODAyXzExX1NUQVRVU19UWVBFCit7CisgICAgTmRpczgwMl8xMVN0YXR1c1R5cGVfQXV0aGVudGljYXRpb24sCisgICAgTmRpczgwMl8xMVN0YXR1c1R5cGVfTWVkaWFTdHJlYW1Nb2RlLAorICAgIE5kaXM4MDJfMTFTdGF0dXNUeXBlX1BNS0lEX0NhbmRpZGF0ZUxpc3QsCisgICAgTmRpczgwMl8xMVN0YXR1c1R5cGVNYXggICAgLy8gbm90IGEgcmVhbCB0eXBlLCBkZWZpbmVkIGFzIGFuIHVwcGVyIGJvdW5kCit9IE5ESVNfODAyXzExX1NUQVRVU19UWVBFLCAqUE5ESVNfODAyXzExX1NUQVRVU19UWVBFOworCit0eXBlZGVmIFVDSEFSICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1NbNl07CisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9TVEFUVVNfSU5ESUNBVElPTgoreworICAgIE5ESVNfODAyXzExX1NUQVRVU19UWVBFIFN0YXR1c1R5cGU7Cit9IE5ESVNfODAyXzExX1NUQVRVU19JTkRJQ0FUSU9OLCAqUE5ESVNfODAyXzExX1NUQVRVU19JTkRJQ0FUSU9OOworCisvLyBtYXNrIGZvciBhdXRoZW50aWNhdGlvbi9pbnRlZ3JpdHkgZmllbGRzCisjZGVmaW5lIE5ESVNfODAyXzExX0FVVEhfUkVRVUVTVF9BVVRIX0ZJRUxEUyAgICAgICAgMHgwZgorCisjZGVmaW5lIE5ESVNfODAyXzExX0FVVEhfUkVRVUVTVF9SRUFVVEggICAgICAgICAgICAgMHgwMQorI2RlZmluZSBORElTXzgwMl8xMV9BVVRIX1JFUVVFU1RfS0VZVVBEQVRFICAgICAgICAgIDB4MDIKKyNkZWZpbmUgTkRJU184MDJfMTFfQVVUSF9SRVFVRVNUX1BBSVJXSVNFX0VSUk9SICAgICAweDA2CisjZGVmaW5lIE5ESVNfODAyXzExX0FVVEhfUkVRVUVTVF9HUk9VUF9FUlJPUiAgICAgICAgMHgwRQorCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fUkVRVUVTVAoreworICAgIFVMT05HIExlbmd0aDsgICAgICAgICAgICAvLyBMZW5ndGggb2Ygc3RydWN0dXJlCisgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgQnNzaWQ7CisgICAgVUxPTkcgRmxhZ3M7Cit9IE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QsICpQTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fUkVRVUVTVDsKKworLy9BZGRlZCBuZXcgdHlwZXMgZm9yIFBNS0lEIENhbmRpZGF0ZSBsaXN0cy4KK3R5cGVkZWYgc3RydWN0IF9QTUtJRF9DQU5ESURBVEUgeworICAgIE5ESVNfODAyXzExX01BQ19BRERSRVNTIEJTU0lEOworICAgIFVMT05HIEZsYWdzOworfSBQTUtJRF9DQU5ESURBVEUsICpQUE1LSURfQ0FORElEQVRFOworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfUE1LSURfQ0FORElEQVRFX0xJU1QKK3sKKyAgICBVTE9ORyBWZXJzaW9uOyAgICAgICAvLyBWZXJzaW9uIG9mIHRoZSBzdHJ1Y3R1cmUKKyAgICBVTE9ORyBOdW1DYW5kaWRhdGVzOyAvLyBOby4gb2YgcG1raWQgY2FuZGlkYXRlcworICAgIFBNS0lEX0NBTkRJREFURSBDYW5kaWRhdGVMaXN0WzFdOworfSBORElTXzgwMl8xMV9QTUtJRF9DQU5ESURBVEVfTElTVCwgKlBORElTXzgwMl8xMV9QTUtJRF9DQU5ESURBVEVfTElTVDsKKworLy9GbGFncyBmb3IgUE1LSUQgQ2FuZGlkYXRlIGxpc3Qgc3RydWN0dXJlCisjZGVmaW5lIE5ESVNfODAyXzExX1BNS0lEX0NBTkRJREFURV9QUkVBVVRIX0VOQUJMRUQJMHgwMQorCisvLyBBZGRlZCBuZXcgdHlwZXMgZm9yIE9GRE0gNUcgYW5kIDIuNEcKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfTkVUV09SS19UWVBFCit7CisgICBOZGlzODAyXzExRkgsCisgICBOZGlzODAyXzExRFMsCisgICAgTmRpczgwMl8xMU9GRE01LAorICAgIE5kaXM4MDJfMTFPRkRNNV9OLAorICAgIE5kaXM4MDJfMTFPRkRNMjQsCisgICAgTmRpczgwMl8xMU9GRE0yNF9OLAorICAgTmRpczgwMl8xMUF1dG9tb2RlLAorICAgIE5kaXM4MDJfMTFOZXR3b3JrVHlwZU1heCAgICAvLyBub3QgYSByZWFsIHR5cGUsIGRlZmluZWQgYXMgYW4gdXBwZXIgYm91bmQKK30gTkRJU184MDJfMTFfTkVUV09SS19UWVBFLCAqUE5ESVNfODAyXzExX05FVFdPUktfVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX05FVFdPUktfVFlQRV9MSVNUCit7CisgICAgVUlOVCAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyT2ZJdGVtczsgIC8vIGluIGxpc3QgYmVsb3csIGF0IGxlYXN0IDEKKyAgIE5ESVNfODAyXzExX05FVFdPUktfVFlQRSAgICBOZXR3b3JrVHlwZSBbMV07Cit9IE5ESVNfODAyXzExX05FVFdPUktfVFlQRV9MSVNULCAqUE5ESVNfODAyXzExX05FVFdPUktfVFlQRV9MSVNUOworCit0eXBlZGVmIGVudW0gX05ESVNfODAyXzExX1BPV0VSX01PREUKK3sKKyAgICBOZGlzODAyXzExUG93ZXJNb2RlQ0FNLAorICAgIE5kaXM4MDJfMTFQb3dlck1vZGVNQVhfUFNQLAorICAgIE5kaXM4MDJfMTFQb3dlck1vZGVGYXN0X1BTUCwKKyAgICBOZGlzODAyXzExUG93ZXJNb2RlTGVnYWN5X1BTUCwKKyAgICBOZGlzODAyXzExUG93ZXJNb2RlTWF4ICAgICAgLy8gbm90IGEgcmVhbCBtb2RlLCBkZWZpbmVkIGFzIGFuIHVwcGVyIGJvdW5kCit9IE5ESVNfODAyXzExX1BPV0VSX01PREUsICpQTkRJU184MDJfMTFfUE9XRVJfTU9ERTsKKwordHlwZWRlZiBVTE9ORyAgIE5ESVNfODAyXzExX1RYX1BPV0VSX0xFVkVMOyAvLyBpbiBtaWxsaXdhdHRzCisKKy8vCisvLyBSZWNlaXZlZCBTaWduYWwgU3RyZW5ndGggSW5kaWNhdGlvbgorLy8KK3R5cGVkZWYgTE9ORyAgICBORElTXzgwMl8xMV9SU1NJOyAgICAgICAgICAgLy8gaW4gZEJtCisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OX0ZICit7CisgICBVTE9ORyAgICAgICAgICAgTGVuZ3RoOyAgICAgICAgICAgIC8vIExlbmd0aCBvZiBzdHJ1Y3R1cmUKKyAgIFVMT05HICAgICAgICAgICBIb3BQYXR0ZXJuOyAgICAgICAgLy8gQXMgZGVmaW5lZCBieSA4MDIuMTEsIE1TQiBzZXQKKyAgIFVMT05HICAgICAgICAgICBIb3BTZXQ7ICAgICAgICAgICAgLy8gdG8gb25lIGlmIG5vbi04MDIuMTEKKyAgIFVMT05HICAgICAgICAgICBEd2VsbFRpbWU7ICAgICAgICAgLy8gdW5pdHMgYXJlIEt1c2VjCit9IE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT05fRkgsICpQTkRJU184MDJfMTFfQ09ORklHVVJBVElPTl9GSDsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0NPTkZJR1VSQVRJT04KK3sKKyAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoOyAgICAgICAgICAgICAvLyBMZW5ndGggb2Ygc3RydWN0dXJlCisgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlYWNvblBlcmlvZDsgICAgICAgLy8gdW5pdHMgYXJlIEt1c2VjCisgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUSU1XaW5kb3c7ICAgICAgICAgLy8gdW5pdHMgYXJlIEt1c2VjCisgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIERTQ29uZmlnOyAgICAgICAgICAgLy8gRnJlcXVlbmN5LCB1bml0cyBhcmUga0h6CisgICBORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OX0ZIICAgIEZIQ29uZmlnOworfSBORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OLCAqUE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT047CisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9TVEFUSVNUSUNTCit7CisgICBVTE9ORyAgICAgICAgICAgTGVuZ3RoOyAgICAgICAgICAgICAvLyBMZW5ndGggb2Ygc3RydWN0dXJlCisgICBMQVJHRV9JTlRFR0VSICAgVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50OworICAgTEFSR0VfSU5URUdFUiAgIE11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudDsKKyAgIExBUkdFX0lOVEVHRVIgICBGYWlsZWRDb3VudDsKKyAgIExBUkdFX0lOVEVHRVIgICBSZXRyeUNvdW50OworICAgTEFSR0VfSU5URUdFUiAgIE11bHRpcGxlUmV0cnlDb3VudDsKKyAgIExBUkdFX0lOVEVHRVIgICBSVFNTdWNjZXNzQ291bnQ7CisgICBMQVJHRV9JTlRFR0VSICAgUlRTRmFpbHVyZUNvdW50OworICAgTEFSR0VfSU5URUdFUiAgIEFDS0ZhaWx1cmVDb3VudDsKKyAgIExBUkdFX0lOVEVHRVIgICBGcmFtZUR1cGxpY2F0ZUNvdW50OworICAgTEFSR0VfSU5URUdFUiAgIFJlY2VpdmVkRnJhZ21lbnRDb3VudDsKKyAgIExBUkdFX0lOVEVHRVIgICBNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQ7CisgICBMQVJHRV9JTlRFR0VSICAgRkNTRXJyb3JDb3VudDsKKyAgIExBUkdFX0lOVEVHRVIgICBUS0lQTG9jYWxNSUNGYWlsdXJlczsKKyAgIExBUkdFX0lOVEVHRVIgICBUS0lQUmVtb3RlTUlDRXJyb3JzOworICAgTEFSR0VfSU5URUdFUiAgIFRLSVBJQ1ZFcnJvcnM7CisgICBMQVJHRV9JTlRFR0VSICAgVEtJUENvdW50ZXJNZWFzdXJlc0ludm9rZWQ7CisgICBMQVJHRV9JTlRFR0VSICAgVEtJUFJlcGxheXM7CisgICBMQVJHRV9JTlRFR0VSICAgQ0NNUEZvcm1hdEVycm9yczsKKyAgIExBUkdFX0lOVEVHRVIgICBDQ01QUmVwbGF5czsKKyAgIExBUkdFX0lOVEVHRVIgICBDQ01QRGVjcnlwdEVycm9yczsKKyAgIExBUkdFX0lOVEVHRVIgICBGb3VyV2F5SGFuZHNoYWtlRmFpbHVyZXM7Cit9IE5ESVNfODAyXzExX1NUQVRJU1RJQ1MsICpQTkRJU184MDJfMTFfU1RBVElTVElDUzsKKwordHlwZWRlZiAgVUxPTkcgIE5ESVNfODAyXzExX0tFWV9JTkRFWDsKK3R5cGVkZWYgVUxPTkdMT05HICAgTkRJU184MDJfMTFfS0VZX1JTQzsKKworI2RlZmluZSBNQVhfUkFESVVTX1NSVl9OVU0JCQkyCSAgLy8gODAyLjF4IGZhaWxvdmVyIG51bWJlcgorCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JBRElVU19TUlZfSU5GTyB7CisJVUlOVDMyCQkJcmFkaXVzX2lwOworCVVJTlQzMgkJCXJhZGl1c19wb3J0OworCVVDSEFSCQkJcmFkaXVzX2tleVs2NF07CisJVUNIQVIJCQlyYWRpdXNfa2V5X2xlbjsKK30gUkFESVVTX1NSVl9JTkZPLCAqUFJBRElVU19TUlZfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9SQURJVVNfS0VZX0lORk8KK3sKKwlVQ0hBUgkJCXJhZGl1c19zcnZfbnVtOworCVJBRElVU19TUlZfSU5GTwlyYWRpdXNfc3J2X2luZm9bTUFYX1JBRElVU19TUlZfTlVNXTsKKwlVQ0hBUgkJCWllZWU4MDIxeFdFUDsJCSAvLyBkeW5hbWljIFdFUAorICAgIFVDSEFSICAgICAgICAgICBrZXlfaW5kZXg7CisgICAgVUNIQVIgICAgICAgICAgIGtleV9sZW5ndGg7ICAgICAgICAgIC8vIGxlbmd0aCBvZiBrZXkgaW4gYnl0ZXMKKyAgICBVQ0hBUiAgICAgICAgICAga2V5X21hdGVyaWFsWzEzXTsKK30gUkFESVVTX0tFWV9JTkZPLCAqUFJBRElVU19LRVlfSU5GTzsKKworLy8gSXQncyB1c2VkIGJ5IDgwMi4xeCBkYWVtb24gdG8gcmVxdWlyZSByZWxhdGl2ZSBjb25maWd1cmF0aW9uCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JBRElVU19DT05GCit7CisgICAgVUlOVDMyICAgICAgICAgIExlbmd0aDsgICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIHRoaXMgc3RydWN0dXJlCisgICAgVUNIQVIJCQltYnNzX251bTsJCQkvLyBpbmRpY2F0ZSBtdWx0aXBsZSBCU1MgbnVtYmVyCisJVUlOVDMyCQkJb3duX2lwX2FkZHI7CisJVUlOVDMyCQkJcmV0cnlfaW50ZXJ2YWw7CisJVUlOVDMyCQkJc2Vzc2lvbl90aW1lb3V0X2ludGVydmFsOworCVVDSEFSCQkJRUFQaWZuYW1lW0lGTkFNU0laXTsKKwlVQ0hBUgkJCUVBUGlmbmFtZV9sZW47CisJVUNIQVIgCQkJUHJlQXV0aGlmbmFtZVtJRk5BTVNJWl07CisJVUNIQVIJCQlQcmVBdXRoaWZuYW1lX2xlbjsKKwlSQURJVVNfS0VZX0lORk8JUmFkaXVzSW5mb1s4LypNQVhfTUJTU0lEX05VTSovXTsKK30gUkFESVVTX0NPTkYsICpQUkFESVVTX0NPTkY7CisKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvLyBLZXkgbWFwcGluZyBrZXlzIHJlcXVpcmUgYSBCU1NJRAordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0tFWQoreworICAgIFVJTlQgICAgICAgICAgIExlbmd0aDsgICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIHRoaXMgc3RydWN0dXJlCisgICAgVUlOVCAgICAgICAgICAgS2V5SW5kZXg7CisgICAgVUlOVCAgICAgICAgICAgS2V5TGVuZ3RoOyAgICAgICAgICAvLyBsZW5ndGggb2Yga2V5IGluIGJ5dGVzCisgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgQlNTSUQ7CisgICAgTkRJU184MDJfMTFfS0VZX1JTQyBLZXlSU0M7CisgICAgVUNIQVIgICAgICAgICAgIEtleU1hdGVyaWFsWzFdOyAgICAgLy8gdmFyaWFibGUgbGVuZ3RoIGRlcGVuZGluZyBvbiBhYm92ZSBmaWVsZAorfSBORElTXzgwMl8xMV9LRVksICpQTkRJU184MDJfMTFfS0VZOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCit0eXBlZGVmIHN0cnVjdCBfTkRJU184MDJfMTFfUkVNT1ZFX0tFWQoreworICAgIFVJTlQgICAgICAgICAgIExlbmd0aDsgICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIHRoaXMgc3RydWN0dXJlCisgICAgVUlOVCAgICAgICAgICAgS2V5SW5kZXg7CisgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgQlNTSUQ7Cit9IE5ESVNfODAyXzExX1JFTU9WRV9LRVksICpQTkRJU184MDJfMTFfUkVNT1ZFX0tFWTsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX1dFUAoreworICAgVUlOVCAgICAgTGVuZ3RoOyAgICAgICAgLy8gTGVuZ3RoIG9mIHRoaXMgc3RydWN0dXJlCisgICBVSU5UICAgICBLZXlJbmRleDsgICAgICAgICAgIC8vIDAgaXMgdGhlIHBlci1jbGllbnQga2V5LCAxLU4gYXJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdsb2JhbCBrZXlzCisgICBVSU5UICAgICBLZXlMZW5ndGg7ICAgICAvLyBsZW5ndGggb2Yga2V5IGluIGJ5dGVzCisgICBVQ0hBUiAgICAgS2V5TWF0ZXJpYWxbMV07Ly8gdmFyaWFibGUgbGVuZ3RoIGRlcGVuZGluZyBvbiBhYm92ZSBmaWVsZAorfSBORElTXzgwMl8xMV9XRVAsICpQTkRJU184MDJfMTFfV0VQOworCisKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRQoreworICAgTmRpczgwMl8xMUlCU1MsCisgICBOZGlzODAyXzExSW5mcmFzdHJ1Y3R1cmUsCisgICBOZGlzODAyXzExQXV0b1Vua25vd24sCisgICBOZGlzODAyXzExTW9uaXRvciwKKyAgIE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZU1heCAgICAgLy8gTm90IGEgcmVhbCB2YWx1ZSwgZGVmaW5lZCBhcyB1cHBlciBib3VuZAorfSBORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFLCAqUE5ESVNfODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkU7CisKKy8vIEFkZCBuZXcgYXV0aGVudGljYXRpb24gbW9kZXMKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERQoreworICAgTmRpczgwMl8xMUF1dGhNb2RlT3BlbiwKKyAgIE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCwKKyAgIE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gsCisgICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBLAorICAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSywKKyAgICBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lLAorICAgTmRpczgwMl8xMUF1dGhNb2RlV1BBMiwKKyAgIE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0ssCisgICAJTmRpczgwMl8xMUF1dGhNb2RlV1BBMVdQQTIsCisJTmRpczgwMl8xMUF1dGhNb2RlV1BBMVBTS1dQQTJQU0ssCisgICBOZGlzODAyXzExQXV0aE1vZGVNYXggICAgICAgICAgIC8vIE5vdCBhIHJlYWwgbW9kZSwgZGVmaW5lZCBhcyB1cHBlciBib3VuZAorfSBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFLCAqUE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREU7CisKK3R5cGVkZWYgVUNIQVIgICBORElTXzgwMl8xMV9SQVRFU1tORElTXzgwMl8xMV9MRU5HVEhfUkFURVNdOyAgICAgICAgLy8gU2V0IG9mIDggZGF0YSByYXRlcwordHlwZWRlZiBVQ0hBUiAgIE5ESVNfODAyXzExX1JBVEVTX0VYW05ESVNfODAyXzExX0xFTkdUSF9SQVRFU19FWF07ICAvLyBTZXQgb2YgMTYgZGF0YSByYXRlcworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX05ESVNfODAyXzExX1NTSUQKK3sKKyAgICBVSU5UICAgU3NpZExlbmd0aDsgICAgICAgICAvLyBsZW5ndGggb2YgU1NJRCBmaWVsZCBiZWxvdywgaW4gYnl0ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgY2FuIGJlIHplcm8uCisgICAgVUNIQVIgICBTc2lkW05ESVNfODAyXzExX0xFTkdUSF9TU0lEXTsgICAgICAgICAgIC8vIFNTSUQgaW5mb3JtYXRpb24gZmllbGQKK30gTkRJU184MDJfMTFfU1NJRCwgKlBORElTXzgwMl8xMV9TU0lEOworCisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTkRJU19XTEFOX0JTU0lECit7CisgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGg7ICAgICAvLyBMZW5ndGggb2YgdGhpcyBzdHJ1Y3R1cmUKKyAgIE5ESVNfODAyXzExX01BQ19BRERSRVNTICAgICAgICAgICAgIE1hY0FkZHJlc3M7IC8vIEJTU0lECisgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZFsyXTsKKyAgIE5ESVNfODAyXzExX1NTSUQgICAgICAgICAgICAgICAgICAgIFNzaWQ7ICAgICAgIC8vIFNTSUQKKyAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaXZhY3k7ICAgIC8vIFdFUCBlbmNyeXB0aW9uIHJlcXVpcmVtZW50CisgICBORElTXzgwMl8xMV9SU1NJICAgICAgICAgICAgICAgICAgICBSc3NpOyAgICAgICAvLyByZWNlaXZlIHNpZ25hbCBzdHJlbmd0aCBpbiBkQm0KKyAgIE5ESVNfODAyXzExX05FVFdPUktfVFlQRSAgICAgICAgICAgIE5ldHdvcmtUeXBlSW5Vc2U7CisgICBORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OICAgICAgICAgICBDb25maWd1cmF0aW9uOworICAgTkRJU184MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRSAgSW5mcmFzdHJ1Y3R1cmVNb2RlOworICAgTkRJU184MDJfMTFfUkFURVMgICAgICAgICAgICAgICAgICAgU3VwcG9ydGVkUmF0ZXM7Cit9IE5ESVNfV0xBTl9CU1NJRCwgKlBORElTX1dMQU5fQlNTSUQ7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfTkRJU184MDJfMTFfQlNTSURfTElTVAoreworICAgVUlOVCAgICAgICAgICAgTnVtYmVyT2ZJdGVtczsgICAgICAvLyBpbiBsaXN0IGJlbG93LCBhdCBsZWFzdCAxCisgICBORElTX1dMQU5fQlNTSUQgQnNzaWRbMV07Cit9IE5ESVNfODAyXzExX0JTU0lEX0xJU1QsICpQTkRJU184MDJfMTFfQlNTSURfTElTVDsKKworLy8gQWRkZWQgQ2FwYWJpbGl0aWVzLCBJRUxlbmd0aCBhbmQgSUVzIGZvciBlYWNoIEJTU0lECit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX05ESVNfV0xBTl9CU1NJRF9FWAoreworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aDsgICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIHRoaXMgc3RydWN0dXJlCisgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgICAgICAgICAgICAgTWFjQWRkcmVzczsgICAgICAgICAvLyBCU1NJRAorICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkWzJdOworICAgIE5ESVNfODAyXzExX1NTSUQgICAgICAgICAgICAgICAgICAgIFNzaWQ7ICAgICAgICAgICAgICAgLy8gU1NJRAorICAgIFVJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaXZhY3k7ICAgICAgICAgICAgLy8gV0VQIGVuY3J5cHRpb24gcmVxdWlyZW1lbnQKKyAgICBORElTXzgwMl8xMV9SU1NJICAgICAgICAgICAgICAgICAgICBSc3NpOyAgICAgICAgICAgICAgIC8vIHJlY2VpdmUgc2lnbmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJlbmd0aCBpbiBkQm0KKyAgICBORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUgICAgICAgICAgICBOZXR3b3JrVHlwZUluVXNlOworICAgIE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04gICAgICAgICAgIENvbmZpZ3VyYXRpb247CisgICAgTkRJU184MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRSAgSW5mcmFzdHJ1Y3R1cmVNb2RlOworICAgIE5ESVNfODAyXzExX1JBVEVTX0VYICAgICAgICAgICAgICAgIFN1cHBvcnRlZFJhdGVzOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElFTGVuZ3RoOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElFc1sxXTsKK30gTkRJU19XTEFOX0JTU0lEX0VYLCAqUE5ESVNfV0xBTl9CU1NJRF9FWDsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9ORElTXzgwMl8xMV9CU1NJRF9MSVNUX0VYCit7CisgICAgVUlOVCAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkl0ZW1zOyAgICAgIC8vIGluIGxpc3QgYmVsb3csIGF0IGxlYXN0IDEKKyAgICBORElTX1dMQU5fQlNTSURfRVggICAgICBCc3NpZFsxXTsKK30gTkRJU184MDJfMTFfQlNTSURfTElTVF9FWCwgKlBORElTXzgwMl8xMV9CU1NJRF9MSVNUX0VYOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX05ESVNfODAyXzExX0ZJWEVEX0lFcworeworICAgIFVDSEFSIFRpbWVzdGFtcFs4XTsKKyAgICBVU0hPUlQgQmVhY29uSW50ZXJ2YWw7CisgICAgVVNIT1JUIENhcGFiaWxpdGllczsKK30gTkRJU184MDJfMTFfRklYRURfSUVzLCAqUE5ESVNfODAyXzExX0ZJWEVEX0lFczsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX1ZBUklBQkxFX0lFcworeworICAgIFVDSEFSIEVsZW1lbnRJRDsKKyAgICBVQ0hBUiBMZW5ndGg7ICAgIC8vIE51bWJlciBvZiBieXRlcyBpbiBkYXRhIGZpZWxkCisgICAgVUNIQVIgZGF0YVsxXTsKK30gTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzLCAqUE5ESVNfODAyXzExX1ZBUklBQkxFX0lFczsKKwordHlwZWRlZiAgVUxPTkcgICBORElTXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRDsKKwordHlwZWRlZiAgVUxPTkcgICBORElTXzgwMl8xMV9SVFNfVEhSRVNIT0xEOworCit0eXBlZGVmICBVTE9ORyAgIE5ESVNfODAyXzExX0FOVEVOTkE7CisKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfUFJJVkFDWV9GSUxURVIKK3sKKyAgIE5kaXM4MDJfMTFQcml2RmlsdGVyQWNjZXB0QWxsLAorICAgTmRpczgwMl8xMVByaXZGaWx0ZXI4MDIxeFdFUAorfSBORElTXzgwMl8xMV9QUklWQUNZX0ZJTFRFUiwgKlBORElTXzgwMl8xMV9QUklWQUNZX0ZJTFRFUjsKKworLy8gQWRkZWQgbmV3IGVuY3J5cHRpb24gdHlwZXMKKy8vIEFsc28gYWxpYXNlZCB0eXBlZGVmIHRvIG5ldyBuYW1lCit0eXBlZGVmIGVudW0gX05ESVNfODAyXzExX1dFUF9TVEFUVVMKK3sKKyAgIE5kaXM4MDJfMTFXRVBFbmFibGVkLAorICAgIE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQgPSBOZGlzODAyXzExV0VQRW5hYmxlZCwKKyAgIE5kaXM4MDJfMTFXRVBEaXNhYmxlZCwKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkID0gTmRpczgwMl8xMVdFUERpc2FibGVkLAorICAgTmRpczgwMl8xMVdFUEtleUFic2VudCwKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbjFLZXlBYnNlbnQgPSBOZGlzODAyXzExV0VQS2V5QWJzZW50LAorICAgTmRpczgwMl8xMVdFUE5vdFN1cHBvcnRlZCwKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbk5vdFN1cHBvcnRlZCA9IE5kaXM4MDJfMTFXRVBOb3RTdXBwb3J0ZWQsCisgICAgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCwKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbjJLZXlBYnNlbnQsCisgICAgTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCwKKyAgICBOZGlzODAyXzExRW5jcnlwdGlvbjNLZXlBYnNlbnQsCisgICAgTmRpczgwMl8xMUVuY3J5cHRpb240RW5hYmxlZCwJLy8gVEtJUCBvciBBRVMgbWl4CisgICAgTmRpczgwMl8xMUVuY3J5cHRpb240S2V5QWJzZW50LAorfSBORElTXzgwMl8xMV9XRVBfU1RBVFVTLCAqUE5ESVNfODAyXzExX1dFUF9TVEFUVVMsCisgIE5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTLCAqUE5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTOworCit0eXBlZGVmIGVudW0gX05ESVNfODAyXzExX1JFTE9BRF9ERUZBVUxUUworeworICAgTmRpczgwMl8xMVJlbG9hZFdFUEtleXMKK30gTkRJU184MDJfMTFfUkVMT0FEX0RFRkFVTFRTLCAqUE5ESVNfODAyXzExX1JFTE9BRF9ERUZBVUxUUzsKKworI2RlZmluZSBORElTXzgwMl8xMV9BSV9SRVFGSV9DQVBBQklMSVRJRVMgICAgICAxCisjZGVmaW5lIE5ESVNfODAyXzExX0FJX1JFUUZJX0xJU1RFTklOVEVSVkFMICAgIDIKKyNkZWZpbmUgTkRJU184MDJfMTFfQUlfUkVRRklfQ1VSUkVOVEFQQUREUkVTUyAgNAorCisjZGVmaW5lIE5ESVNfODAyXzExX0FJX1JFU0ZJX0NBUEFCSUxJVElFUyAgICAgIDEKKyNkZWZpbmUgTkRJU184MDJfMTFfQUlfUkVTRklfU1RBVFVTQ09ERSAgICAgICAgMgorI2RlZmluZSBORElTXzgwMl8xMV9BSV9SRVNGSV9BU1NPQ0lBVElPTklEICAgICA0CisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9BSV9SRVFGSQoreworICAgIFVTSE9SVCBDYXBhYmlsaXRpZXM7CisgICAgVVNIT1JUIExpc3RlbkludGVydmFsOworICAgIE5ESVNfODAyXzExX01BQ19BRERSRVNTICBDdXJyZW50QVBBZGRyZXNzOworfSBORElTXzgwMl8xMV9BSV9SRVFGSSwgKlBORElTXzgwMl8xMV9BSV9SRVFGSTsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0FJX1JFU0ZJCit7CisgICAgVVNIT1JUIENhcGFiaWxpdGllczsKKyAgICBVU0hPUlQgU3RhdHVzQ29kZTsKKyAgICBVU0hPUlQgQXNzb2NpYXRpb25JZDsKK30gTkRJU184MDJfMTFfQUlfUkVTRkksICpQTkRJU184MDJfMTFfQUlfUkVTRkk7CisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTgoreworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIExlbmd0aDsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICBBdmFpbGFibGVSZXF1ZXN0Rml4ZWRJRXM7CisgICAgTkRJU184MDJfMTFfQUlfUkVRRkkgICAgUmVxdWVzdEZpeGVkSUVzOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIFJlcXVlc3RJRUxlbmd0aDsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBPZmZzZXRSZXF1ZXN0SUVzOworICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgIEF2YWlsYWJsZVJlc3BvbnNlRml4ZWRJRXM7CisgICAgTkRJU184MDJfMTFfQUlfUkVTRkkgICAgUmVzcG9uc2VGaXhlZElFczsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICBSZXNwb25zZUlFTGVuZ3RoOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgIE9mZnNldFJlc3BvbnNlSUVzOworfSBORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTiwgKlBORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTjsKKwordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX0VWRU5UCit7CisgICAgTkRJU184MDJfMTFfU1RBVFVTX0lORElDQVRJT04gICAgICAgU3RhdHVzOworICAgIE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QgIFJlcXVlc3RbMV07Cit9IE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX0VWRU5ULCAqUE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX0VWRU5UOworCisvKgordHlwZWRlZiBzdHJ1Y3QgX05ESVNfODAyXzExX1RFU1QKK3sKKyAgICBVTE9ORyBMZW5ndGg7CisgICAgVUxPTkcgVHlwZTsKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fRVZFTlQgQXV0aGVudGljYXRpb25FdmVudDsKKyAgICAgICAgTkRJU184MDJfMTFfUlNTSSBSc3NpVHJpZ2dlcjsKKyAgICB9OworfSBORElTXzgwMl8xMV9URVNULCAqUE5ESVNfODAyXzExX1RFU1Q7CisgKi8KKworLy8gODAyLjExIE1lZGlhIHN0cmVhbSBjb25zdHJhaW50cywgYXNzb2NpYXRlZCB3aXRoIE9JRF84MDJfMTFfTUVESUFfU1RSRUFNX01PREUKK3R5cGVkZWYgZW51bSBfTkRJU184MDJfMTFfTUVESUFfU1RSRUFNX01PREUKK3sKKyAgICBOZGlzODAyXzExTWVkaWFTdHJlYW1PZmYsCisgICAgTmRpczgwMl8xMU1lZGlhU3RyZWFtT24sCit9IE5ESVNfODAyXzExX01FRElBX1NUUkVBTV9NT0RFLCAqUE5ESVNfODAyXzExX01FRElBX1NUUkVBTV9NT0RFOworCisvLyBQTUtJRCBTdHJ1Y3R1cmVzCit0eXBlZGVmIFVDSEFSICAgTkRJU184MDJfMTFfUE1LSURfVkFMVUVbMTZdOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCit0eXBlZGVmIHN0cnVjdCBfQlNTSURfSU5GTworeworICAgIE5ESVNfODAyXzExX01BQ19BRERSRVNTIEJTU0lEOworICAgIE5ESVNfODAyXzExX1BNS0lEX1ZBTFVFIFBNS0lEOworfSBCU1NJRF9JTkZPLCAqUEJTU0lEX0lORk87CisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9QTUtJRAoreworICAgIFVJTlQgICAgTGVuZ3RoOworICAgIFVJTlQgICAgQlNTSURJbmZvQ291bnQ7CisgICAgQlNTSURfSU5GTyBCU1NJREluZm9bMV07Cit9IE5ESVNfODAyXzExX1BNS0lELCAqUE5ESVNfODAyXzExX1BNS0lEOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9FTkNSWVBUSU9OCit7CisgICAgTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSBBdXRoTW9kZVN1cHBvcnRlZDsKKyAgICBORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUyBFbmNyeXB0U3RhdHVzU3VwcG9ydGVkOworfSBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9FTkNSWVBUSU9OLCAqUE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX0VOQ1JZUFRJT047CisKK3R5cGVkZWYgc3RydWN0IF9ORElTXzgwMl8xMV9DQVBBQklMSVRZCit7CisgICAgIFVMT05HIExlbmd0aDsKKyAgICAgVUxPTkcgVmVyc2lvbjsKKyAgICAgVUxPTkcgTm9PZlBNS0lEczsKKyAgICAgVUxPTkcgTm9PZkF1dGhFbmNyeXB0UGFpcnNTdXBwb3J0ZWQ7CisgICAgIE5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX0VOQ1JZUFRJT04gQXV0aGVudGljYXRpb25FbmNyeXB0aW9uU3VwcG9ydGVkWzFdOworfSBORElTXzgwMl8xMV9DQVBBQklMSVRZLCAqUE5ESVNfODAyXzExX0NBUEFCSUxJVFk7CisKKy8vI2VuZGlmIC8vb2YgV0lOIDJrCisjZW5kaWYgLy9VTkRFUl9DRQorCisjaWYgV0lSRUxFU1NfRVhUIDw9IDExCisjaWZuZGVmIFNJT0NERVZQUklWQVRFCisjZGVmaW5lIFNJT0NERVZQUklWQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QkUwCisjZW5kaWYKKyNkZWZpbmUgU0lPQ0lXRklSU1RQUklWCQkJCQkJCQlTSU9DREVWUFJJVkFURQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNkZWZpbmUgUlRfUFJJVl9JT0NUTF9FWFQJCQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MDEpIC8vIFN5bmMuIHdpdGggQVAgZm9yIHdzYyB1cG5wIGRhZW1vbgorI2RlZmluZSBSVFBSSVZfSU9DVExfU0VUCQkJCQkJCShTSU9DSVdGSVJTVFBSSVYgKyAweDAyKQorCisjaWZkZWYgREJHCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9CQlAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNJT0NJV0ZJUlNUUFJJViArIDB4MDMpCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9NQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNJT0NJV0ZJUlNUUFJJViArIDB4MDUpCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9SRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNJT0NJV0ZJUlNUUFJJViArIDB4MTMpCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9FMlAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNJT0NJV0ZJUlNUUFJJViArIDB4MDcpCisjZW5kaWYKKworI2lmZGVmIFJBTElOS19BVEUKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorI2RlZmluZSBSVFBSSVZfSU9DVExfQVRFCQkJCQkJCShTSU9DSVdGSVJTVFBSSVYgKyAweDA4KQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9TVEFUSVNUSUNTICAgICAgICAgICAgICAgICAgICAgKFNJT0NJV0ZJUlNUUFJJViArIDB4MDkpCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9BRERfUE1LSURfQ0FDSEUgICAgICAgICAgICAgICAgKFNJT0NJV0ZJUlNUUFJJViArIDB4MEEpCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9SQURJVVNfREFUQSAgICAgICAgICAgICAgICAgICAgKFNJT0NJV0ZJUlNUUFJJViArIDB4MEMpCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9HU0lURVNVUlZFWQkJCQkJKFNJT0NJV0ZJUlNUUFJJViArIDB4MEQpCisjZGVmaW5lIFJUX1BSSVZfSU9DVEwJCQkJCQkJCShTSU9DSVdGSVJTVFBSSVYgKyAweDBFKSAvLyBTeW5jLiB3aXRoIFJUNjEgKGZvciB3cGFfc3VwcGxpY2FudCkKKyNkZWZpbmUgUlRQUklWX0lPQ1RMX0dFVF9NQUNfVEFCTEUJCQkJCShTSU9DSVdGSVJTVFBSSVYgKyAweDBGKQorCisjZGVmaW5lIFJUUFJJVl9JT0NUTF9TSE9XCQkJCQkJCShTSU9DSVdGSVJTVFBSSVYgKyAweDExKQorZW51bSB7CisgICAgU0hPV19DT05OX1NUQVRVUyA9IDQsCisgICAgU0hPV19EUlZJRVJfVkVSSU9OID0gNSwKKyAgICBTSE9XX0JBX0lORk8gPSA2LAorCVNIT1dfREVTQ19JTkZPID0gNywKKyNpZmRlZiBSVDI4NzAKKwlTSE9XX1JYQlVMS19JTkZPID0gOCwKKwlTSE9XX1RYQlVMS19JTkZPID0gOSwKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKyAgICBSQUlPX09GRiA9IDEwLAorICAgIFJBSU9fT04gPSAxMSwKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwlTSE9XX0RMU19FTlRSWV9JTkZPID0gMTksCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJU0hPV19DRkdfVkFMVUUgPSAyMCwKK307CisKKworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKworI2lmZGVmIFNOTVBfU1VQUE9SVAorLy9TTk1QIGllZWUgODAyZG90MTEsIGthdGh5ICwgMjAwOF8wMjIwCisvLyBkb3QxMXJlcygzKQorI2RlZmluZSBSVF9PSURfODAyXzExX01BTlVGQUNUVVJFUk9VSQkJCTB4MDcwMAorI2RlZmluZSBSVF9PSURfODAyXzExX01BTlVGQUNUVVJFUk5BTUUJCQkweDA3MDEKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9SRVNPVVJDRVRZUEVJRE5BTUUJCTB4MDcwMgorCisvLyBkb3QxMXNtdCgxKQorI2RlZmluZSBSVF9PSURfODAyXzExX1BSSVZBQ1lPUFRJT05JTVBMRU1FTlRFRAkweDA3MDMKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9QT1dFUk1BTkFHRU1FTlRNT0RFCQkweDA3MDQKKyNkZWZpbmUgT0lEXzgwMl8xMV9XRVBERUZBVUxUS0VZVkFMVUUJCQkweDA3MDUgLy8gcmVhZCAsIHdyaXRlCisjZGVmaW5lIE9JRF84MDJfMTFfV0VQREVGQVVMVEtFWUlECQkJCTB4MDcwNgorI2RlZmluZSBSVF9PSURfODAyXzExX1dFUEtFWU1BUFBJTkdMRU5HVEgJCTB4MDcwNworI2RlZmluZSBPSURfODAyXzExX1NIT1JUUkVUUllMSU1JVAkJCQkweDA3MDgKKyNkZWZpbmUgT0lEXzgwMl8xMV9MT05HUkVUUllMSU1JVAkJCQkweDA3MDkKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9QUk9EVUNUSUQJCQkJCTB4MDcxMAorI2RlZmluZSBSVF9PSURfODAyXzExX01BTlVGQUNUVVJFSUQJCQkJMHgwNzExCisKKy8vIC8vZG90MTFQaHkoNCkKKyNkZWZpbmUgT0lEXzgwMl8xMV9DVVJSRU5UQ0hBTk5FTAkJCQkweDA3MTIKKworLy9kb3QxMW1hYworI2RlZmluZSBSVF9PSURfODAyXzExX01BQ19BRERSRVNTCQkJCTB4MDcxMworI2VuZGlmIC8vIFNOTVBfU1VQUE9SVCAvLworCisjZGVmaW5lIE9JRF84MDJfMTFfQlVJTERfQ0hBTk5FTF9FWAkJCQkweDA3MTQKKyNkZWZpbmUgT0lEXzgwMl8xMV9HRVRfQ0hfTElTVAkJCQkJMHgwNzE1CisjZGVmaW5lIE9JRF84MDJfMTFfR0VUX0NPVU5UUllfQ09ERQkJCQkweDA3MTYKKyNkZWZpbmUgT0lEXzgwMl8xMV9HRVRfQ0hBTk5FTF9HRU9HUkFQSFkJCTB4MDcxNworCisvLyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9TVEFUSVNUSUNTICAgICAgICAgICAgICAoT0lEX0dFVF9TRVRfVE9HR0xFIHwgT0lEXzgwMl8xMV9TVEFUSVNUSUNTKQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZGVmaW5lIFJUX09JRF9XU0NfU0VUX1BBU1NQSFJBU0UgICAgICAgICAgICAgICAgICAgMHgwNzQwIC8vIHBhc3NwaHJhc2UgZm9yIHdwYSgyKS1wc2sKKyNkZWZpbmUgUlRfT0lEX1dTQ19EUklWRVJfQVVUT19DT05ORUNUICAgICAgICAgICAgICAweDA3NDEKKyNkZWZpbmUgUlRfT0lEX1dTQ19RVUVSWV9ERUZBVUxUX1BST0ZJTEUgICAgICAgICAgICAweDA3NDIKKyNkZWZpbmUgUlRfT0lEX1dTQ19TRVRfQ09OTl9CWV9QUk9GSUxFX0lOREVYICAgICAgICAweDA3NDMKKyNkZWZpbmUgUlRfT0lEX1dTQ19TRVRfQUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAweDA3NDQKKyNkZWZpbmUgUlRfT0lEX1dTQ19TRVRfU1NJRCAgICAgICAgICAgICAgICAgICAgICAgICAweDA3NDUKKyNkZWZpbmUgUlRfT0lEX1dTQ19TRVRfUElOX0NPREUgICAgICAgICAgICAgICAgICAgICAweDA3NDYKKyNkZWZpbmUgUlRfT0lEX1dTQ19TRVRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAweDA3NDcgLy8gUElOIG9yIFBCQworI2RlZmluZSBSVF9PSURfV1NDX1NFVF9DT05GX01PREUgICAgICAgICAgICAgICAgICAgIDB4MDc0OCAvLyBFbnJvbGxlZSBvciBSZWdpc3RyYXIKKyNkZWZpbmUgUlRfT0lEX1dTQ19TRVRfUFJPRklMRSAgICAgICAgICAgICAgICAgICAgICAweDA3NDkKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9XU0NfUVVFUllfUFJPRklMRQkJCQkweDA3NTAKKy8vIGZvciBjb25zaXN0ZW5jeSB3aXRoIFJUNjEKKyNkZWZpbmUgUlRfT0lEX1dTQ19RVUVSWV9TVEFUVVMJCQkJCQkweDA3NTEKKyNkZWZpbmUgUlRfT0lEX1dTQ19QSU5fQ09ERQkJCQkJCQkweDA3NTIKKyNkZWZpbmUgUlRfT0lEX1dTQ19VVUlECQkJCQkJCQkweDA3NTMKKyNkZWZpbmUgUlRfT0lEX1dTQ19TRVRfU0VMRUNURURfUkVHSVNUUkFSCQkJMHgwNzU0CisjZGVmaW5lIFJUX09JRF9XU0NfRUFQTVNHCQkJCQkJCTB4MDc1NQorI2RlZmluZSBSVF9PSURfV1NDX01BTlVGQUNUVVJFUgkJCQkJCTB4MDc1NgorI2RlZmluZSBSVF9PSURfV1NDX01PREVMX05BTUUJCQkJCQkweDA3NTcKKyNkZWZpbmUgUlRfT0lEX1dTQ19NT0RFTF9OTwkJCQkJCQkweDA3NTgKKyNkZWZpbmUgUlRfT0lEX1dTQ19TRVJJQUxfTk8JCQkJCQkweDA3NTkKKyNkZWZpbmUgUlRfT0lEX1dTQ19NQUNfQUREUkVTUwkJCQkJCTB4MDc2MAorCisjaWZkZWYgTExURF9TVVBQT1JUCisvLyBmb3IgY29uc2lzdGVuY3kgd2l0aCBSVDYxCisjZGVmaW5lIFJUX09JRF9HRVRfUEhZX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgMHg3NjEKKyNlbmRpZiAvLyBMTFREX1NVUFBPUlQgLy8KKworI2lmZGVmIE5JTlRFTkRPX0FQCisvLyNkZWZpbmUgUlRfT0lEX05JTlRFTkRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMDEwNzcwCisjZGVmaW5lIFJUX09JRF84MDJfMTFfTklOVEVORE9fR0VUX1RBQkxFCQkJMHgwNzcxIC8vKChSVF9PSURfTklOVEVORE8gKyAweDAxKSAmIDB4ZmZmZikKKyNkZWZpbmUgUlRfT0lEXzgwMl8xMV9OSU5URU5ET19TRVRfVEFCTEUJCQkweDA3NzIgLy8oKFJUX09JRF9OSU5URU5ETyArIDB4MDIpICYgMHhmZmZmKQorI2RlZmluZSBSVF9PSURfODAyXzExX05JTlRFTkRPX0NBUEFCTEUJCQkJMHgwNzczIC8vKChSVF9PSURfTklOVEVORE8gKyAweDAzKSAmIDB4ZmZmZikKKyNlbmRpZiAvLyBOSU5URU5ET19BUCAvLworCisvL0FkZCBQYXVsIENoZW4gZm9yIEFjY3RvbgorLy8jZGVmaW5lIFJUX09JRF9UWF9QT1dFUl9MRVZFTCAgICAgICAgICAgICAgICAgMHhGRjAyMDAxMAorLy8jZGVmaW5lIFJUX09JRF9TRVRfVFhfUE9XRVJfTEVWRUwJICAgICAgICAgIChPSURfR0VUX1NFVF9UT0dHTEUgfCBSVF9PSURfVFhfUE9XRVJfTEVWRUwpCisKKy8vIE5ldyBmb3IgTWVldGluZ0hvdXNlIEFwaSBzdXBwb3J0CisjZGVmaW5lIE9JRF9NSF84MDJfMVhfU1VQUE9SVEVEICAgICAgICAgICAgICAgMHhGRkVEQzEwMAorCisvLyBNSU1PIFR4IHBhcmFtZXRlciwgU2hvcnRHSSwgTUNTLCBTVEJDLCBldGMuICB0aGVzZSBhcmUgZmllbGRzIGluIFRYV0kuIERvbid0IGNoYW5nZSB0aGlzIGRlZmluaXRpb24hISEKK3R5cGVkZWYgdW5pb24gIF9IVFRSQU5TTUlUX1NFVFRJTkcgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlzdHJ1Y3QJeworCVVTSE9SVAkJTU9ERToyOwkvLyBVc2UgZGVmaW5pdGlvbiBNT0RFX3h4eC4KKy8vCVVTSE9SVAkJcnN2OjM7CisJVVNIT1JUCQlUeEJGOjE7CisJVVNIT1JUCQlyc3Y6MjsKKwlVU0hPUlQJCVNUQkM6MjsJLy9TUEFDRQorCVVTSE9SVAkJU2hvcnRHSToxOworCVVTSE9SVAkJQlc6MTsJLy9jaGFubmVsIGJhbmR3aWR0aCAyME1IeiBvciA0MCBNSHoKKwlVU0hPUlQgICAJTUNTOjc7ICAgICAgICAgICAgICAgICAvLyBNQ1MKKwl9CWZpZWxkOworI2Vsc2UKKwlzdHJ1Y3QJeworCVVTSE9SVCAgIAlNQ1M6NzsgICAgICAgICAgICAgICAgIC8vIE1DUworCVVTSE9SVAkJQlc6MTsJLy9jaGFubmVsIGJhbmR3aWR0aCAyME1IeiBvciA0MCBNSHoKKwlVU0hPUlQJCVNob3J0R0k6MTsKKwlVU0hPUlQJCVNUQkM6MjsJLy9TUEFDRQorLy8JVVNIT1JUCQlyc3Y6MzsKKwlVU0hPUlQJCXJzdjoyOworCVVTSE9SVAkJVHhCRjoxOworCVVTSE9SVAkJTU9ERToyOwkvLyBVc2UgZGVmaW5pdGlvbiBNT0RFX3h4eC4KKwl9CWZpZWxkOworI2VuZGlmCisJVVNIT1JUCQl3b3JkOworIH0gSFRUUkFOU01JVF9TRVRUSU5HLCAqUEhUVFJBTlNNSVRfU0VUVElORzsKKwordHlwZWRlZiBlbnVtIF9SVF84MDJfMTFfUFJFQU1CTEUgeworICAgIFJ0ODAyXzExUHJlYW1ibGVMb25nLAorICAgIFJ0ODAyXzExUHJlYW1ibGVTaG9ydCwKKyAgICBSdDgwMl8xMVByZWFtYmxlQXV0bworfSBSVF84MDJfMTFfUFJFQU1CTEUsICpQUlRfODAyXzExX1BSRUFNQkxFOworCisvLyBPbmx5IGZvciBTVEEsIG5lZWQgdG8gc3luYyB3aXRoIEFQCisvLyAyMDA1LTAzLTA4IG1hdGNoIGN1cnJlbnQgUmFDb25maWcuCit0eXBlZGVmIGVudW0gX1JUXzgwMl8xMV9QSFlfTU9ERSB7CisJUEhZXzExQkdfTUlYRUQgPSAwLAorCVBIWV8xMUIsCisJUEhZXzExQSwKKwlQSFlfMTFBQkdfTUlYRUQsCisJUEhZXzExRywKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlQSFlfMTFBQkdOX01JWEVELAkvLyBib3RoIGJhbmQgICA1CisJUEhZXzExTl8yXzRHLAkJLy8gMTFuLW9ubHkgd2l0aCAyLjRHIGJhbmQgICAJNgorCVBIWV8xMUdOX01JWEVELAkvLyAyLjRHIGJhbmQgICAgICA3CisJUEhZXzExQU5fTUlYRUQsCS8vIDVHICBiYW5kICAgICAgIDgKKwlQSFlfMTFCR05fTUlYRUQsCS8vIGlmIGNoZWNrIDgwMi4xMWIuICAgICAgOQorCVBIWV8xMUFHTl9NSVhFRCwJLy8gaWYgY2hlY2sgODAyLjExYi4gICAgICAxMAorCVBIWV8xMU5fNUcsCQkJLy8gMTFuLW9ubHkgd2l0aCA1RyBiYW5kCQkxMQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworfSBSVF84MDJfMTFfUEhZX01PREU7CisKKy8vIHB1dCBhbGwgcHJvcHJpZXRlcnkgZm9yLXF1ZXJ5IG9iamVjdHMgaGVyZSB0byByZWR1Y2UgIyBvZiBRdWVyeV9PSUQKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfTElOS19TVEFUVVMgeworICAgIFVMT05HICAgQ3VyclR4UmF0ZTsgICAgICAgICAvLyBpbiB1bml0cyBvZiAwLjVNYnBzCisgICAgVUxPTkcgICBDaGFubmVsUXVhbGl0eTsgICAgIC8vIDAuLjEwMCAlCisgICAgVUxPTkcgICBUeEJ5dGVDb3VudDsgICAgICAgIC8vIGJvdGggb2sgYW5kIGZhaWwKKyAgICBVTE9ORyAgIFJ4Qnl0ZUNvdW50OyAgICAgICAgLy8gYm90aCBvayBhbmQgZmFpbAorICAgIFVMT05HCUNlbnRyYWxDaGFubmVsOwkJLy8gNDBNSHogY2VudHJhbCBjaGFubmVsIG51bWJlcgorfSBSVF84MDJfMTFfTElOS19TVEFUVVMsICpQUlRfODAyXzExX0xJTktfU1RBVFVTOworCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX0VWRU5UX0xPRyB7CisgICAgTEFSR0VfSU5URUdFUiAgIFN5c3RlbVRpbWU7ICAvLyB0aW1lc3RhbW1wIHZpYSBOZGlzR2V0Q3VycmVudFN5c3RlbVRpbWUoKQorICAgIFVDSEFSICAgICAgICAgICBBZGRyW01BQ19BRERSX0xFTkdUSF07CisgICAgVVNIT1JUICAgICAgICAgIEV2ZW50OyAgICAgICAvLyBFVkVOVF94eHgKK30gUlRfODAyXzExX0VWRU5UX0xPRywgKlBSVF84MDJfMTFfRVZFTlRfTE9HOworCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX0VWRU5UX1RBQkxFIHsKKyAgICBVTE9ORyAgICAgICBOdW07CisgICAgVUxPTkcgICAgICAgUnN2OyAgICAgLy8gdG8gYWxpZ24gTG9nW10gYXQgTEFSR0VfSU5FR0VSIGJvdW5kYXJ5CisgICAgUlRfODAyXzExX0VWRU5UX0xPRyAgIExvZ1tNQVhfTlVNQkVSX09GX0VWRU5UXTsKK30gUlRfODAyXzExX0VWRU5UX1RBQkxFLCBQUlRfODAyXzExX0VWRU5UX1RBQkxFOworCisvLyBNSU1PIFR4IHBhcmFtZXRlciwgU2hvcnRHSSwgTUNTLCBTVEJDLCBldGMuICB0aGVzZSBhcmUgZmllbGRzIGluIFRYV0kuIERvbid0IGNoYW5nZSB0aGlzIGRlZmluaXRpb24hISEKK3R5cGVkZWYgdW5pb24gIF9NQUNIVFRSQU5TTUlUX1NFVFRJTkcgeworCXN0cnVjdAl7CisJVVNIT1JUICAgCU1DUzo3OyAgICAgICAgICAgICAgICAgLy8gTUNTCisJVVNIT1JUCQlCVzoxOwkvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCVVTSE9SVAkJU2hvcnRHSToxOworCVVTSE9SVAkJU1RCQzoyOwkvL1NQQUNFCisJVVNIT1JUCQlyc3Y6MzsKKwlVU0hPUlQJCU1PREU6MjsJLy8gVXNlIGRlZmluaXRpb24gTU9ERV94eHguCisJfQlmaWVsZDsKKwlVU0hPUlQJCXdvcmQ7CisgfSBNQUNIVFRSQU5TTUlUX1NFVFRJTkcsICpQTUFDSFRUUkFOU01JVF9TRVRUSU5HOworCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX01BQ19FTlRSWSB7CisgICAgVUNIQVIgICAgICAgQWRkcltNQUNfQUREUl9MRU5HVEhdOworICAgIFVDSEFSICAgICAgIEFpZDsKKyAgICBVQ0hBUiAgICAgICBQc207ICAgICAvLyAwOlBXUl9BQ1RJVkUsIDE6UFdSX1NBVkUKKyAgICBVQ0hBUgkJTWltb1BzOyAgLy8gMDpNTVBTX1NUQVRJQywgMTpNTVBTX0RZTkFNSUMsIDM6TU1QU19FbmFibGVkCisgICAgQ0hBUgkJQXZnUnNzaTA7CisJQ0hBUgkJQXZnUnNzaTE7CisJQ0hBUgkJQXZnUnNzaTI7CisJVUlOVDMyCQlDb25uZWN0ZWRUaW1lOworICAgIE1BQ0hUVFJBTlNNSVRfU0VUVElORwlUeFJhdGU7Cit9IFJUXzgwMl8xMV9NQUNfRU5UUlksICpQUlRfODAyXzExX01BQ19FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9NQUNfVEFCTEUgeworICAgIFVMT05HICAgICAgIE51bTsKKyAgICBSVF84MDJfMTFfTUFDX0VOVFJZIEVudHJ5W01BWF9OVU1CRVJfT0ZfTUFDXTsKK30gUlRfODAyXzExX01BQ19UQUJMRSwgKlBSVF84MDJfMTFfTUFDX1RBQkxFOworCisvLyBzdHJ1Y3R1cmUgZm9yIHF1ZXJ5L3NldCBoYXJkd2FyZSByZWdpc3RlciAtIE1BQywgQkJQLCBSRiByZWdpc3RlcgordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9IQVJEV0FSRV9SRUdJU1RFUiB7CisgICAgVUxPTkcgICBIYXJkd2FyZVR5cGU7ICAgICAgIC8vIDA6TUFDLCAxOkJCUCwgMjpSRiByZWdpc3RlciwgMzpFRVBST00KKyAgICBVTE9ORyAgIE9mZnNldDsgICAgICAgICAgICAgLy8gUS9TIHJlZ2lzdGVyIG9mZnNldCBhZGRyCisgICAgVUxPTkcgICBEYXRhOyAgICAgICAgICAgICAgIC8vIFIvVyBkYXRhIGJ1ZmZlcgorfSBSVF84MDJfMTFfSEFSRFdBUkVfUkVHSVNURVIsICpQUlRfODAyXzExX0hBUkRXQVJFX1JFR0lTVEVSOworCisvLyBzdHJ1Y3R1cmUgdG8gdHVuZSBCQlAgUjE3ICJSWCBBR0MgVkdDIGluaXQiCisvL3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfUlhfQUdDX1ZHQ19UVU5JTkcgeworLy8gICAgVUNIQVIgICBGYWxzZUNjYUxvd2VyVGhyZXNob2xkOyAgLy8gMC0yNTUsIGRlZiAxMAorLy8gICAgVUNIQVIgICBGYWxzZUNjYVVwcGVyVGhyZXNob2xkOyAgLy8gMC0yNTUsIGRlZiAxMDAKKy8vICAgIFVDSEFSICAgVmdjRGVsdGE7ICAgICAgICAgICAgICAgIC8vIFIxNyArLT0gVmdjRGVsdGEgd2hlbmV2ZXIgZmxhc2UgQ0NBIG92ZXIgVXBwclRocmVzaG9sZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3IgbG93ZXIgdGhhbiBMb3dlclRocmVzaG9sZHVwcGVyIHRocmVzaG9sZAorLy8gICAgVUNIQVIgICBWZ2NVcHBlckJvdW5kOyAgICAgICAgICAgLy8gbWF4IHZhbHVlIG9mIFIxNworLy99IFJUXzgwMl8xMV9SWF9BR0NfVkdDX1RVTklORywgKlBSVF84MDJfMTFfUlhfQUdDX1ZHQ19UVU5JTkc7CisKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfQVBfQ09ORklHIHsKKyAgICBVTE9ORyAgIEVuYWJsZVR4QnVyc3Q7ICAgICAgLy8gMC1kaXNhYmxlLCAxLWVuYWJsZQorICAgIFVMT05HICAgRW5hYmxlVHVyYm9SYXRlOyAgICAvLyAwLWRpc2FibGUsIDEtZW5hYmxlIDcyLzEwMG1icHMgdHVyYm8gcmF0ZQorICAgIFVMT05HICAgSXNvbGF0ZUludGVyU3RhVHJhZmZpYzsgICAgIC8vIDAtZGlzYWJsZSwgMS1lbmFibGUgaXNvbGF0aW9uCisgICAgVUxPTkcgICBIaWRlU3NpZDsgICAgICAgICAgIC8vIDAtZGlzYWJsZSwgMS1lbmFibGUgaGlkaW5nCisgICAgVUxPTkcgICBVc2VCR1Byb3RlY3Rpb247ICAgIC8vIDAtQVVUTywgMS1hbHdheXMgT04sIDItYWx3YXlzIE9GRgorICAgIFVMT05HICAgVXNlU2hvcnRTbG90VGltZTsgICAvLyAwLW5vIHVzZSwgMS11c2UgOS11cyBzaG9ydCBzbG90IHRpbWUKKyAgICBVTE9ORyAgIFJzdjE7ICAgICAgICAgICAgICAgLy8gbXVzdCBiZSAwCisgICAgVUxPTkcgICBTeXN0ZW1FcnJvckJpdG1hcDsgIC8vIGlnbm9yZSB1cG9uIFNFVCwgcmV0dXJuIHN5c3RlbSBlcnJvciB1cG9uIFFVRVJZCit9IFJUXzgwMl8xMV9BUF9DT05GSUcsICpQUlRfODAyXzExX0FQX0NPTkZJRzsKKworLy8gc3RydWN0dXJlIHRvIHF1ZXJ5L3NldCBTVEFfQ09ORklHCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX1NUQV9DT05GSUcgeworICAgIFVMT05HICAgRW5hYmxlVHhCdXJzdDsgICAgICAvLyAwLWRpc2FibGUsIDEtZW5hYmxlCisgICAgVUxPTkcgICBFbmFibGVUdXJib1JhdGU7ICAgIC8vIDAtZGlzYWJsZSwgMS1lbmFibGUgNzIvMTAwbWJwcyB0dXJibyByYXRlCisgICAgVUxPTkcgICBVc2VCR1Byb3RlY3Rpb247ICAgIC8vIDAtQVVUTywgMS1hbHdheXMgT04sIDItYWx3YXlzIE9GRgorICAgIFVMT05HICAgVXNlU2hvcnRTbG90VGltZTsgICAvLyAwLW5vIHVzZSwgMS11c2UgOS11cyBzaG9ydCBzbG90IHRpbWUgd2hlbiBhcHBsaWNhYmxlCisgICAgVUxPTkcgICBBZGhvY01vZGU7IAkJCS8vIDAtMTFiIHJhdGVzIG9ubHkgKFdJRkkgc3BlYyksIDEgLSBiL2cgbWl4ZWQsIDIgLSBnIG9ubHkKKyAgICBVTE9ORyAgIEh3UmFkaW9TdGF0dXM7ICAgICAgLy8gMC1PRkYsIDEtT04sIGRlZmF1bHQgaXMgMSwgUmVhZC1Pbmx5CisgICAgVUxPTkcgICBSc3YxOyAgICAgICAgICAgICAgIC8vIG11c3QgYmUgMAorICAgIFVMT05HICAgU3lzdGVtRXJyb3JCaXRtYXA7ICAvLyBpZ25vcmUgdXBvbiBTRVQsIHJldHVybiBzeXN0ZW0gZXJyb3IgdXBvbiBRVUVSWQorfSBSVF84MDJfMTFfU1RBX0NPTkZJRywgKlBSVF84MDJfMTFfU1RBX0NPTkZJRzsKKworLy8KKy8vICBGb3IgT0lEIFF1ZXJ5IG9yIFNldCBhYm91dCBCQSBzdHJ1Y3R1cmUKKy8vCit0eXBlZGVmCXN0cnVjdAlfT0lEX0JBQ0FQX1NUUlVDCXsKKwkJVUNIQVIJCVJ4QkFXaW5MaW1pdDsKKwkJVUNIQVIJCVR4QkFXaW5MaW1pdDsKKwkJVUNIQVIJCVBvbGljeTsJLy8gMDogREVMQVlfQkEgMTpJTU1FRF9CQSAgKC8vQkEgUG9saWN5IHN1YmZpbGVkIHZhbHVlIGluIEFEREJBIGZyYW1lKSAgIDI6QkEtbm90IHVzZS4gb3RoZXIgdmFsdWUgaW52YWxpZAorCQlVQ0hBUgkJTXBkdURlbnNpdHk7CS8vIDA6IERFTEFZX0JBIDE6SU1NRURfQkEgICgvL0JBIFBvbGljeSBzdWJmaWxlZCB2YWx1ZSBpbiBBRERCQSBmcmFtZSkgICAyOkJBLW5vdCB1c2UuIG90aGVyIHZhbHVlIGludmFsaWQKKwkJVUNIQVIgICAgICAgCUFtc2R1RW5hYmxlOwkvL0VuYWJsZSBBTVNEVSB0cmFuc21pc3N0aW9uCisJCVVDSEFSICAgICAgIAlBbXNkdVNpemU7CS8vIDA6MzgzOSwgMTo3OTM1IGJ5dGVzLiBVSU5UICBNU0RVU2l6ZVRvQnl0ZXNbXQk9IHsgMzgzOSwgNzkzNX07CisJCVVDSEFSICAgICAgIAlNTVBTbW9kZTsJLy8gTUlNTyBwb3dlciBzYXZlIG1vcmUsIDA6c3RhdGljLCAxOmR5bmFtaWMsIDI6cnN2LCAzOm1pbW8gZW5hYmxlCisJCUJPT0xFQU4JCUF1dG9CQTsJLy8gQXV0byBCQSB3aWxsIGF1dG9tYXRpY2FsbHkKK30gT0lEX0JBQ0FQX1NUUlVDLCAqUE9JRF9CQUNBUF9TVFJVQzsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9BQ0xfRU5UUlkgeworICAgIFVDSEFSICAgQWRkcltNQUNfQUREUl9MRU5HVEhdOworICAgIFVTSE9SVCAgUnN2OworfSBSVF84MDJfMTFfQUNMX0VOVFJZLCAqUFJUXzgwMl8xMV9BQ0xfRU5UUlk7CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfUlRfODAyXzExX0FDTCB7CisgICAgVUxPTkcgICBQb2xpY3k7ICAgICAgICAgICAgIC8vIDAtZGlzYWJsZSwgMS1wb3NpdGl2ZSBsaXN0LCAyLW5lZ2F0aXZlIGxpc3QKKyAgICBVTE9ORyAgIE51bTsKKyAgICBSVF84MDJfMTFfQUNMX0VOVFJZIEVudHJ5W01BWF9OVU1CRVJfT0ZfQUNMXTsKK30gUlRfODAyXzExX0FDTCwgKlBSVF84MDJfMTFfQUNMOworCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX1dEUyB7CisgICAgVUxPTkcJCQkJCQlOdW07CisgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MJCUVudHJ5WzI0LypNQVhfTlVNX09GX1dEU19MSU5LKi9dOworCVVMT05HCQkJCQkJS2V5TGVuZ3RoOworCVVDSEFSCQkJCQkJS2V5TWF0ZXJpYWxbMzJdOworfSBSVF84MDJfMTFfV0RTLCAqUFJUXzgwMl8xMV9XRFM7CisKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfVFhfUkFURVNfIHsKKyAgICBVQ0hBUiAgICAgICBTdXBSYXRlTGVuOworICAgIFVDSEFSICAgICAgIFN1cFJhdGVbTUFYX0xFTkdUSF9PRl9TVVBQT1JUX1JBVEVTXTsKKyAgICBVQ0hBUiAgICAgICBFeHRSYXRlTGVuOworICAgIFVDSEFSICAgICAgIEV4dFJhdGVbTUFYX0xFTkdUSF9PRl9TVVBQT1JUX1JBVEVTXTsKK30gUlRfODAyXzExX1RYX1JBVEVTLCAqUFJUXzgwMl8xMV9UWF9SQVRFUzsKKworCisvLyBEZWZpbml0aW9uIG9mIGV4dHJhIGluZm9ybWF0aW9uIGNvZGUKKyNkZWZpbmUJR0VORVJBTF9MSU5LX1VQCQkJMHgwCQkJLy8gTGluayBpcyBVcAorI2RlZmluZQlHRU5FUkFMX0xJTktfRE9XTgkJMHgxCQkJLy8gTGluayBpcyBEb3duCisjZGVmaW5lCUhXX1JBRElPX09GRgkJCTB4MgkJCS8vIEhhcmR3YXJlIHJhZGlvIG9mZgorI2RlZmluZQlTV19SQURJT19PRkYJCQkweDMJCQkvLyBTb2Z0d2FyZSByYWRpbyBvZmYKKyNkZWZpbmUJQVVUSF9GQUlMCQkJCTB4NAkJCS8vIE9wZW4gYXV0aGVudGljYXRpb24gZmFpbAorI2RlZmluZQlBVVRIX0ZBSUxfS0VZUwkJCTB4NQkJCS8vIFNoYXJlZCBhdXRoZW50aWNhdGlvbiBmYWlsCisjZGVmaW5lCUFTU09DX0ZBSUwJCQkJMHg2CQkJLy8gQXNzb2NpYXRpb24gZmFpbGVkCisjZGVmaW5lCUVBUF9NSUNfRkFJTFVSRQkJCTB4NwkJCS8vIERlYXV0aGVuY2F0aW9uIGJlY2F1c2UgTUlDIGZhaWx1cmUKKyNkZWZpbmUJRUFQXzRXQVlfVElNRU9VVAkJMHg4CQkJLy8gRGVhdXRoZW5jYXRpb24gb24gNC13YXkgaGFuZHNoYWtlIHRpbWVvdXQKKyNkZWZpbmUJRUFQX0dST1VQX0tFWV9USU1FT1VUCTB4OQkJCS8vIERlYXV0aGVuY2F0aW9uIG9uIGdyb3VwIGtleSBoYW5kc2hha2UgdGltZW91dAorI2RlZmluZQlFQVBfU1VDQ0VTUwkJCQkweGEJCQkvLyBFQVAgc3VjY2VlZAorI2RlZmluZQlERVRFQ1RfUkFEQVJfU0lHTkFMCQkweGIgICAgICAgICAvLyBSYWRhciBzaWduYWwgb2NjdXIgaW4gY3VycmVudCBjaGFubmVsCisjZGVmaW5lIEVYVFJBX0lORk9fTUFYCQkJMHhiCQkJLy8gSW5kaWNhdGUgTGFzdCBPSUQKKworI2RlZmluZSBFWFRSQV9JTkZPX0NMRUFSCQkweGZmZmZmZmZmCisKKy8vIFRoaXMgaXMgT0lEIHNldHRpbmcgc3RydWN0dXJlLiBTbyBvbmx5IEdGIG9yIE1NIGFzIE1vZGUuIFRoaXMgaXMgdmFsaWQgd2hlbiBvdXIgd2lyZWxzcyBtb2RlIGhhcyA4MDIuMTFuIGluIHVzZS4KK3R5cGVkZWYgc3RydWN0IHsKKwlSVF84MDJfMTFfUEhZX01PREUJCVBoeU1vZGU7IAkvLworCVVDSEFSCQlUcmFuc21pdE5vOworCVVDSEFSCQlIdE1vZGU7IAkvL0hUTU9ERV9HRiBvciBIVE1PREVfTU0KKwlVQ0hBUgkJRXh0T2Zmc2V0OwkvL2V4dGVuc2lvbiBjaGFubmVsIGFib3ZlIG9yIGJlbG93CisJVUNIQVIJCU1DUzsKKwlVQ0hBUiAgIAlCVzsKKwlVQ0hBUgkJU1RCQzsKKwlVQ0hBUgkJU0hPUlRHSTsKKwlVQ0hBUgkJcnN2OworfSBPSURfU0VUX0hUX1BIWU1PREUsICpQT0lEX1NFVF9IVF9QSFlNT0RFOworCisjaWZkZWYgTklOVEVORE9fQVAKKyNkZWZpbmUgTklOVEVORE9fTUFYX0VOVFJZIDE2CisjZGVmaW5lIE5JTlRFTkRPX1NTSURfTkFNRV9MTiA4CisjZGVmaW5lIE5JTlRFTkRPX1NTSURfTkFNRSAiTldDVVNCQVAiCisjZGVmaW5lIE5JTlRFTkRPX1BST0JFX1JFUV9GTEFHX01BU0sgMHgwMworI2RlZmluZSBOSU5URU5ET19QUk9CRV9SRVFfT04gMHgwMQorI2RlZmluZSBOSU5URU5ET19QUk9CRV9SRVFfU0lHTkFMIDB4MDIKKyNkZWZpbmUgTklOVEVORE9fUFJPQkVfUlNQX09OIDB4MDEKKyNkZWZpbmUgTklOVEVORE9fU1NJRF9OSUNLTkFNRV9MTiAyMAorCisjZGVmaW5lIE5JTlRFTkRPX1dFUEtFWV9MTiAxMworCit0eXBlZGVmIHN0cnVjdCBfTklOVEVORE9fU1NJRAoreworCVVDSEFSCU5JTlRFTkRPRml4Q2hhcltOSU5URU5ET19TU0lEX05BTUVfTE5dOworCVVDSEFSCXplcm8xOworCVVDSEFSCXJlZ2lzdGU7CisJVUNIQVIJSUQ7CisJVUNIQVIJemVybzI7CisJVUNIQVIJTklDS25hbWVbTklOVEVORE9fU1NJRF9OSUNLTkFNRV9MTl07Cit9IFJUX05JTlRFTkRPX1NTSUQsICpQUlRfTklOVEVORE9fU1NJRDsKKwordHlwZWRlZiBzdHJ1Y3QgX05JTlRFTkRPX0VOVFJZCit7CisJVUNIQVIJTklDS25hbWVbTklOVEVORE9fU1NJRF9OSUNLTkFNRV9MTl07CisgICAgVUNIQVIgICBEU19BZGRyW0VUSF9MRU5HVEhfT0ZfQUREUkVTU107CisJVUNIQVIJcmVnaXN0ZTsKKwlVQ0hBUglVc2VyU3BhY2VBY2s7Cit9IFJUX05JTlRFTkRPX0VOVFJZLCAqUFJUX05JTlRFTkRPX0VOVFJZOworCisvL1JUUFJJVl9JT0NUTF9OSU5URU5ET19HRVRfVEFCTEUKKy8vUlRQUklWX0lPQ1RMX05JTlRFTkRPX1NFVF9UQUJMRQordHlwZWRlZiBzdHJ1Y3QgX05JTlRFTkRPX1RBQkxFCit7CisJVUlOVAkJCQludW1iZXI7CisJUlRfTklOVEVORE9fRU5UUlkJZW50cnlbTklOVEVORE9fTUFYX0VOVFJZXTsKK30gUlRfTklOVEVORE9fVEFCTEUsICpQUlRfTklOVEVORE9fVEFCTEU7CisKKy8vUlRQUklWX0lPQ1RMX05JTlRFTkRPX1NFRURfV0VQS0VZCit0eXBlZGVmIHN0cnVjdCBfTklOVEVORE9fU0VFRF9XRVBLRVkKK3sKKwlVQ0hBUglzZWVkW05JTlRFTkRPX1NTSURfTklDS05BTUVfTE5dOworCVVDSEFSCXdlcGtleVsxNl07Ly91c2UgMTMgZm9yIDEwNCBiaXRzIHdlcCBrZXkKK30gUlRfTklOVEVORE9fU0VFRF9XRVBLRVksICpQUlRfTklOVEVORE9fU0VFRF9XRVBLRVk7CisjZW5kaWYgLy8gTklOVEVORE9fQVAgLy8KKworI2lmZGVmIExMVERfU1VQUE9SVAordHlwZWRlZiBzdHJ1Y3QgX1JUX0xMVERfQVNTT0lDQVRJT05fRU5UUlkgeworICAgIFVDSEFSICAgICAgICAgICBBZGRyW0VUSF9MRU5HVEhfT0ZfQUREUkVTU107CisgICAgdW5zaWduZWQgc2hvcnQgIE1PUjsgICAgICAgIC8vIG1heGltdW0gb3BlcmF0aW9uYWwgcmF0ZQorICAgIFVDSEFSICAgICAgICAgICBwaHlNb2RlOworfSBSVF9MTFREX0FTU09JQ0FUSU9OX0VOVFJZLCAqUFJUX0xMVERfQVNTT0lDQVRJT05fRU5UUlk7CisKK3R5cGVkZWYgc3RydWN0IF9SVF9MTFREX0FTU09JQ0FUSU9OX1RBQkxFIHsKKyAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgTnVtOworICAgIFJUX0xMVERfQVNTT0lDQVRJT05fRU5UUlkgICBFbnRyeVtNQVhfTlVNQkVSX09GX01BQ107Cit9IFJUX0xMVERfQVNTT0lDQVRJT05fVEFCTEUsICpQUlRfTExURF9BU1NPSUNBVElPTl9UQUJMRTsKKyNlbmRpZiAvLyBMTFREX1NVUFBPUlQgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorLy9ydDI4NjAsIGthdGh5IDIwMDctMDExOAorLy8gc3RydWN0dXJlIGZvciBETFMKK3R5cGVkZWYgc3RydWN0IF9SVF84MDJfMTFfRExTX1VJIHsKKwlVU0hPUlQJCQkJCQlUaW1lT3V0OwkJLy8gdW5pdDogc2Vjb25kICwgc2V0IGJ5IFVJCisJVVNIT1JUCQkJCQkJQ291bnREb3duVGltZXI7CS8vIHVuaXQ6IHNlY29uZCAsIHVzZWQgYnkgZHJpdmVyIG9ubHkKKwlORElTXzgwMl8xMV9NQUNfQUREUkVTUwkJTWFjQWRkcjsJCS8vIHNldCBieSBVSQorCVVDSEFSCQkJCQkJU3RhdHVzOwkJCS8vIDA6IG5vbmUgLCAxOiB3YWl0IFNUQWtleSwgMjogZmluaXNoIERMUyBzZXR1cCAsIHNldCBieSBkcml2ZXIgb25seQorCUJPT0xFQU4JCQkJCQlWYWxpZDsJCQkvLyAxOiB2YWxpZCAsIDA6IGludmFsaWQgLCBzZXQgYnkgVUksIHVzZSB0byBzZXR1cCBvciB0ZWFyIGRvd24gRExTIGxpbmsKK30gUlRfODAyXzExX0RMU19VSSwgKlBSVF84MDJfMTFfRExTX1VJOworCit0eXBlZGVmIHN0cnVjdCBfUlRfODAyXzExX0RMU19JTkZPIHsKKwlSVF84MDJfMTFfRExTX1VJCUVudHJ5W01BWF9OVU1CRVJfT0ZfRExTX0VOVFJZXTsKKwlVQ0hBUgkJCQludW07Cit9IFJUXzgwMl8xMV9ETFNfSU5GTywgKlBSVF84MDJfMTFfRExTX0lORk87CisKK3R5cGVkZWYgZW51bSBfUlRfODAyXzExX0RMU19NT0RFIHsKKyAgICBETFNfTk9ORSwKKyAgICBETFNfV0FJVF9LRVksCisgICAgRExTX0ZJTklTSAorfSBSVF84MDJfMTFfRExTX01PREU7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZuZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjZGVmaW5lCVJUX0FTU09DX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAxCisjZGVmaW5lCVJUX0RJU0FTU09DX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgMHgwMTAyCisjZGVmaW5lCVJUX1JFUUlFX0VWRU5UX0ZMQUcgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAzCisjZGVmaW5lCVJUX1JFU1BJRV9FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTA0CisjZGVmaW5lCVJUX0FTU09DSU5GT19FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgMHgwMTA1CisjZGVmaW5lIFJUX1BNS0lEQ0FORF9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTA2CisjZGVmaW5lIFJUX0lOVEVSRkFDRV9ET1dOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTA3CisjZGVmaW5lIFJUX0lOVEVSRkFDRV9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTA4CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworI2RlZmluZSBNQVhfQ1VTVE9NX0xFTiAxMjgKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAordHlwZWRlZiBlbnVtIF9SVF84MDJfMTFfRF9DTElFTlRfTU9ERQoreworICAgUnQ4MDJfMTFfRF9Ob25lLAorICAgUnQ4MDJfMTFfRF9GbGV4aWJsZSwKKyAgIFJ0ODAyXzExX0RfU3RyaWN0LAorfSBSVF84MDJfMTFfRF9DTElFTlRfTU9ERSwgKlBSVF84MDJfMTFfRF9DTElFTlRfTU9ERTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwordHlwZWRlZiBzdHJ1Y3QgX1JUX0NIQU5ORUxfTElTVF9JTkZPCit7CisJVUNIQVIgQ2hhbm5lbExpc3RbTUFYX05VTV9PRl9DSFNdOyAgIC8vIGxpc3QgYWxsIHN1cHBvcnRlZCBjaGFubmVscyBmb3Igc2l0ZSBzdXJ2ZXkKKwlVQ0hBUiBDaGFubmVsTGlzdE51bTsgLy8gbnVtYmVyIG9mIGNoYW5uZWwgaW4gQ2hhbm5lbExpc3RbXQorfSBSVF9DSEFOTkVMX0xJU1RfSU5GTywgKlBSVF9DSEFOTkVMX0xJU1RfSU5GTzsKKworLy8gV1NDIGNvbmZpZ3VyZWQgY3JlZGVudGlhbAordHlwZWRlZglzdHJ1Y3QJX1dTQ19DUkVERU5USUFMCit7CisJTkRJU184MDJfMTFfU1NJRAlTU0lEOwkJCQkvLyBtYW5kYXRvcnkKKwlVU0hPUlQJCQkJQXV0aFR5cGU7CQkJLy8gbWFuZGF0b3J5LCAxOiBvcGVuLCAyOiB3cGEtcHNrLCA0OiBzaGFyZWQsIDg6d3BhLCAweDEwOiB3cGEyLCAweDIwOiB3cGEyLXBzaworCVVTSE9SVAkJCQlFbmNyVHlwZTsJCQkvLyBtYW5kYXRvcnksIDE6IG5vbmUsIDI6IHdlcCwgNDogdGtpcCwgODogYWVzCisJVUNIQVIJCQkJS2V5WzY0XTsJCQkvLyBtYW5kYXRvcnksIE1heGltdW0gNjQgYnl0ZQorCVVTSE9SVAkJCQlLZXlMZW5ndGg7CisJVUNIQVIJCQkJTWFjQWRkcls2XTsJCQkvLyBtYW5kYXRvcnksIEFQIE1BQyBhZGRyZXNzCisJVUNIQVIJCQkJS2V5SW5kZXg7CQkJLy8gb3B0aW9uYWwsIGRlZmF1bHQgaXMgMQorCVVDSEFSCQkJCVJzdmRbM107CQkJLy8gTWFrZSBhbGlnbm1lbnQKK30JV1NDX0NSRURFTlRJQUwsICpQV1NDX0NSRURFTlRJQUw7CisKKy8vIFdTQyBjb25maWd1cmVkIHByb2ZpbGVzCit0eXBlZGVmCXN0cnVjdAlfV1NDX1BST0ZJTEUKK3sKKwlVSU5UCQkJUHJvZmlsZUNudDsKKwlXU0NfQ1JFREVOVElBTAlQcm9maWxlWzhdOwkJCQkvLyBTdXBwb3J0IHVwIHRvIDggcHJvZmlsZXMKK30JV1NDX1BST0ZJTEUsICpQV1NDX1BST0ZJTEU7CisKKworCisjZW5kaWYgLy8gX09JRF9IXworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0Mjg3MC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydDI4NzAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzJhMmJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydDI4NzAuaApAQCAtMCwwICsxLDc1NiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworI2lmbmRlZiBfX1JUMjg3MF9IX18KKyNkZWZpbmUgX19SVDI4NzBfSF9fCisKKy8vdXNiIGhlYWRlciBmaWxlcworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisvKiBydG1wX2RlZi5oICovCisvLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKyNkZWZpbmUgQlVMS0FHR1JFX1pJU0UgICAgICAgICAgMTAwCisjZGVmaW5lIFJUMjhYWF9EUlZEQVRBX1NFVChfYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Jfc2V0X2ludGZkYXRhKF9hLCBwQWQpOworI2RlZmluZSBSVDI4WFhfUFVUX0RFVklDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3B1dF9kZXYKKyNkZWZpbmUgUlRVU0JfQUxMT0NfVVJCKGlzbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9hbGxvY191cmIoaXNvLCBHRlBfQVRPTUlDKQorI2RlZmluZSBSVFVTQl9TVUJNSVRfVVJCKHBVcmIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3N1Ym1pdF91cmIocFVyYiwgR0ZQX0FUT01JQykKKyNkZWZpbmUJUlRVU0JfVVJCX0FMTE9DX0JVRkZFUihwVXNiX0RldiwgQnVmU2l6ZSwgcERtYV9hZGRyKSAgICAgICAgICAgICAgIHVzYl9idWZmZXJfYWxsb2MocFVzYl9EZXYsIEJ1ZlNpemUsIEdGUF9BVE9NSUMsIHBEbWFfYWRkcikKKyNkZWZpbmUJUlRVU0JfVVJCX0ZSRUVfQlVGRkVSKHBVc2JfRGV2LCBCdWZTaXplLCBwVHJhbnNmZXJCdWYsIERtYV9hZGRyKSAgIHVzYl9idWZmZXJfZnJlZShwVXNiX0RldiwgQnVmU2l6ZSwgcFRyYW5zZmVyQnVmLCBEbWFfYWRkcikKKyNlbHNlCisjZGVmaW5lIEJVTEtBR0dSRV9aSVNFICAgICAgICAgIDYwCisjZGVmaW5lIFJUMjhYWF9EUlZEQVRBX1NFVChfYSkKKyNkZWZpbmUgUlQyOFhYX1BVVF9ERVZJQ0UoZGV2X3ApCisjZGVmaW5lIFJUVVNCX0FMTE9DX1VSQihpc28pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfYWxsb2NfdXJiKGlzbykKKyNkZWZpbmUgUlRVU0JfU1VCTUlUX1VSQihwVXJiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9zdWJtaXRfdXJiKHBVcmIpCisjZGVmaW5lIFJUVVNCX1VSQl9BTExPQ19CVUZGRVIocFVzYl9EZXYsIEJ1ZlNpemUsIHBEbWFfYWRkcikgICAgICAgICAgICAgICBrbWFsbG9jKEJ1ZlNpemUsIEdGUF9BVE9NSUMpCisjZGVmaW5lCVJUVVNCX1VSQl9GUkVFX0JVRkZFUihwVXNiX0RldiwgQnVmU2l6ZSwgcFRyYW5zZmVyQnVmLCBEbWFfYWRkcikgICBrZnJlZShwVHJhbnNmZXJCdWYpCisjZW5kaWYKKworI2RlZmluZSBSWEJVTEtBR0dSRV9aSVNFICAgICAgICAxMgorI2RlZmluZSBNQVhfVFhCVUxLX0xJTUlUICAgICAgICAoTE9DQUxfVFhCVUZfU0laRSooQlVMS0FHR1JFX1pJU0UtMSkpCisjZGVmaW5lIE1BWF9UWEJVTEtfU0laRSAgICAgICAgIChMT0NBTF9UWEJVRl9TSVpFKkJVTEtBR0dSRV9aSVNFKQorI2RlZmluZSBNQVhfUlhCVUxLX1NJWkUgICAgICAgICAoTE9DQUxfVFhCVUZfU0laRSpSWEJVTEtBR0dSRV9aSVNFKQorI2RlZmluZSBNQVhfTUxNRV9IQU5ETEVSX01FTU9SWSAyMAorI2RlZmluZSBCVUZGRVJfU0laRQkJCQkyNDAwCS8vMjA0OAorI2RlZmluZQlUWF9SSU5HCQkJCQkweGEKKyNkZWZpbmUJUFJJT19SSU5HCQkJCTB4YworCisKKy8vIEZsYWdzIGZvciBCdWxrZmxhZ3MgY29udHJvbCBmb3IgYnVsayBvdXQgZGF0YQorLy8KKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfTlVMTAkJCQkweDAwMDAwMDAxCisjZGVmaW5lIGZSVFVTQl9CVUxLX09VVF9SVFMJCQkJCQkweDAwMDAwMDAyCisjZGVmaW5lCWZSVFVTQl9CVUxLX09VVF9NTE1FCQkJCQkweDAwMDAwMDA0CisKKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMCQkJCTB4MDAwMTAwMDAKKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMXzIJCQkweDAwMDIwMDAwCisjZGVmaW5lCWZSVFVTQl9CVUxLX09VVF9EQVRBX05PUk1BTF8zCQkJMHgwMDA0MDAwMAorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9OT1JNQUxfNAkJCTB4MDAwODAwMDAKKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfTk9STUFMXzUJCQkweDAwMTAwMDAwCisKKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX1BTUE9MTAkJCQkJMHgwMDAwMDAyMAorI2RlZmluZQlmUlRVU0JfQlVMS19PVVRfREFUQV9GUkFHCQkJCTB4MDAwMDAwNDAKKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfRlJBR18yCQkJCTB4MDAwMDAwODAKKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfRlJBR18zCQkJCTB4MDAwMDAxMDAKKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfRlJBR180CQkJCTB4MDAwMDAyMDAKKworI2lmZGVmIFJBTElOS19BVEUKKyNkZWZpbmUJZlJUVVNCX0JVTEtfT1VUX0RBVEFfQVRFCQkJCTB4MDAxMDAwMDAKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyNkZWZpbmUgUlQyODcwX1VTQl9ERVZJQ0VTCVwKK3sJXAorCXtVU0JfREVWSUNFKDB4MTQ4RiwweDI3NzApfSwgLyogUmFsaW5rICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxNDhGLDB4Mjg3MCl9LCAvKiBSYWxpbmsgKi8JCVwKKwl7VVNCX0RFVklDRSgweDE0OEYsMHgzMDcwKX0sIC8qIFJhbGluayAzMDcwICovCVwKKwl7VVNCX0RFVklDRSgweDE0OEYsMHgzMDcxKX0sIC8qIFJhbGluayAzMDcxICovCVwKKwl7VVNCX0RFVklDRSgweDE0OEYsMHgzMDcyKX0sIC8qIFJhbGluayAzMDcyICovCVwKKwl7VVNCX0RFVklDRSgweDBCMDUsMHgxNzMxKX0sIC8qIEFzdXMgKi8JCQlcCisJe1VTQl9ERVZJQ0UoMHgwQjA1LDB4MTczMil9LCAvKiBBc3VzICovCQkJXAorCXtVU0JfREVWSUNFKDB4MEIwNSwweDE3NDIpfSwgLyogQXN1cyAqLwkJCVwKKwl7VVNCX0RFVklDRSgweDBERjYsMHgwMDE3KX0sIC8qIFNpdGVjb20gKi8JCVwKKwl7VVNCX0RFVklDRSgweDBERjYsMHgwMDJCKX0sIC8qIFNpdGVjb20gKi8JCVwKKwl7VVNCX0RFVklDRSgweDBERjYsMHgwMDJDKX0sIC8qIFNpdGVjb20gKi8JCVwKKwl7VVNCX0RFVklDRSgweDBERjYsMHgwMDNFKX0sIC8qIFNpdGVjb20gMzA3MCAqLwlcCisJe1VTQl9ERVZJQ0UoMHgwREY2LDB4MDAyRCl9LCAvKiBTaXRlY29tICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwREY2LDB4MDAzOSl9LCAvKiBTaXRlY29tIDI3NzAgKi8JXAorCXtVU0JfREVWSUNFKDB4MTRCMiwweDNDMDYpfSwgLyogQ29uY2VwdHJvbmljICovCVwKKwl7VVNCX0RFVklDRSgweDE0QjIsMHgzQzI4KX0sIC8qIENvbmNlcHRyb25pYyAqLwlcCisJe1VTQl9ERVZJQ0UoMHgyMDE5LDB4RUQwNil9LCAvKiBQbGFuZXggQ29tbXVuaWNhdGlvbnMsIEluYy4gKi8JCVwKKwl7VVNCX0RFVklDRSgweDIwMTksMHhBQjI1KX0sIC8qIFBsYW5leCBDb21tdW5pY2F0aW9ucywgSW5jLiBSVDMwNzAgKi8JCVwKKwl7VVNCX0RFVklDRSgweDA3RDEsMHgzQzA5KX0sIC8qIEQtTGluayAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDdEMSwweDNDMTEpfSwgLyogRC1MaW5rICovCQlcCisJe1VTQl9ERVZJQ0UoMHgyMDAxLDB4M0MwOSl9LCAvKiBELUxpbmsgKi8JCVwKKwl7VVNCX0RFVklDRSgweDIwMDEsMHgzQzBBKX0sIC8qIEQtTGluayAzMDcyKi8JXAorCXtVU0JfREVWSUNFKDB4MTRCMiwweDNDMDcpfSwgLyogQUwgKi8JCQlcCisJe1VTQl9ERVZJQ0UoMHgxNEIyLDB4M0MxMil9LCAvKiBBTCAzMDcwICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwNTBELDB4ODA1Myl9LCAvKiBCZWxraW4gKi8JCVwKKwl7VVNCX0RFVklDRSgweDE0QjIsMHgzQzIzKX0sIC8qIEFpcmxpbmsgKi8JCVwKKwl7VVNCX0RFVklDRSgweDE0QjIsMHgzQzI3KX0sIC8qIEFpcmxpbmsgKi8JCVwKKwl7VVNCX0RFVklDRSgweDA3QUEsMHgwMDJGKX0sIC8qIENvcmVnYSAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDdBQSwweDAwM0MpfSwgLyogQ29yZWdhICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwN0FBLDB4MDAzRil9LCAvKiBDb3JlZ2EgKi8JCVwKKwl7VVNCX0RFVklDRSgweDE4QzUsMHgwMDEyKX0sIC8qIENvcmVnYSAzMDcwICovCVwKKwl7VVNCX0RFVklDRSgweDEwNDQsMHg4MDBCKX0sIC8qIEdpZ2FieXRlICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxMDQ0LDB4ODAwRCl9LCAvKiBHaWdhYnl0ZSBHTi1XQjMyTCAzMDcwICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxNUE5LDB4MDAwNil9LCAvKiBTcGFya2xhbiAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDgzQSwweEI1MjIpfSwgLyogU01DICovCQkJXAorCXtVU0JfREVWSUNFKDB4MDgzQSwweEE2MTgpfSwgLyogU01DICovCQkJXAorCXtVU0JfREVWSUNFKDB4MDgzQSwweDg1MjIpfSwgLyogQXJjYWR5YW4gKi8JCVwKKwl7VVNCX0RFVklDRSgweDA4M0EsMHg3NTEyKX0sIC8qIEFyY2FkeWFuIDI3NzAgKi8JCVwKKwl7VVNCX0RFVklDRSgweDA4M0EsMHg3NTIyKX0sIC8qIEFyY2FkeWFuICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwODNBLDB4NzUxMSl9LCAvKiBBcmNhZHlhbiAzMDcwICovIFwKKwl7VVNCX0RFVklDRSgweDBDREUsMHgwMDIyKX0sIC8qIFpDT00gKi8JCQlcCisJe1VTQl9ERVZJQ0UoMHgwNTg2LDB4MzQxNil9LCAvKiBaeXhlbCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MENERSwweDAwMjUpfSwgLyogWnl4ZWwgKi8JCVwKKwl7VVNCX0RFVklDRSgweDE3NDAsMHg5NzAxKX0sIC8qIEVuR2VuaXVzICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxNzQwLDB4OTcwMil9LCAvKiBFbkdlbml1cyAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTc0MCwweDk3MDMpfSwgLyogRW5HZW5pdXMgMzA3MCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDQ3MSwweDIwMGYpfSwgLyogUGhpbGlwcyAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTRCMiwweDNDMjUpfSwgLyogRHJheXRlayAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTNEMywweDMyNDcpfSwgLyogQXp1cmVXYXZlICovCVwKKwl7VVNCX0RFVklDRSgweDEzRDMsMHgzMjczKX0sIC8qIEF6dXJlV2F2ZSAzMDcwKi8JXAorCXtVU0JfREVWSUNFKDB4MDgzQSwweDY2MTgpfSwgLyogQWNjdG9uICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxNWM1LDB4MDAwOCl9LCAvKiBBbWl0ICovCQkJXAorCXtVU0JfREVWSUNFKDB4MEU2NiwweDAwMDEpfSwgLyogSGF3a2luZyAqLwkJXAorCXtVU0JfREVWSUNFKDB4MEU2NiwweDAwMDMpfSwgLyogSGF3a2luZyAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTI5QiwweDE4MjgpfSwgLyogU2llbWVucyAqLwkJXAorCXtVU0JfREVWSUNFKDB4MTU3RSwweDMwMEUpfSwgLyogVS1NZWRpYSAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDUwZCwweDgwNWMpfSwJCQkJCVwKKwl7VVNCX0RFVklDRSgweDE0ODIsMHgzQzA5KX0sIC8qIEFib2NvbSovCQlcCisJe1VTQl9ERVZJQ0UoMHgxNEIyLDB4M0MwOSl9LCAvKiBBbHBoYSAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDRFOCwweDIwMTgpfSwgLyogc2Ftc3VuZyAqLyAgCVwKKwl7VVNCX0RFVklDRSgweDA3QjgsMHgzMDcwKX0sIC8qIEFib0NvbSAzMDcwICovCVwKKwl7VVNCX0RFVklDRSgweDA3QjgsMHgzMDcxKX0sIC8qIEFib0NvbSAzMDcxICovCVwKKwl7VVNCX0RFVklDRSgweDA3QjgsMHgzMDcyKX0sIC8qIEFib2NvbSAzMDcyICovCVwKKwl7VVNCX0RFVklDRSgweDczOTIsMHg3NzExKX0sIC8qIEVkaW1heCAzMDcwICovCVwKKwl7VVNCX0RFVklDRSgweDVBNTcsMHgwMjgwKX0sIC8qIFppbndlbGwgKi8JCVwKKwl7VVNCX0RFVklDRSgweDVBNTcsMHgwMjgyKX0sIC8qIFppbndlbGwgKi8JCVwKKwl7VVNCX0RFVklDRSgweDFBMzIsMHgwMzA0KX0sIC8qIFF1YW50YSAzMDcwICovCQlcCisJe1VTQl9ERVZJQ0UoMHgwNzg5LDB4MDE2Mil9LCAvKiBMb2dpdGVjIDI4NzAgKi8JCVwKKwl7VVNCX0RFVklDRSgweDA3ODksMHgwMTYzKX0sIC8qIExvZ2l0ZWMgMjg3MCAqLwkJXAorCXtVU0JfREVWSUNFKDB4MDc4OSwweDAxNjQpfSwgLyogTG9naXRlYyAyODcwICovCQlcCisJe1VTQl9ERVZJQ0UoMHgxRURBLDB4MjMxMCl9LCAvKiBBaXJUaWVzIDMwNzAgKi8JCVwKKwl7IH0vKiBUZXJtaW5hdGluZyBlbnRyeSAqLyAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUJRlJFRV9IVFRYX1JJTkcoX3AsIF9iLCBfdCkJCQlcCit7CQkJCQkJCQkJCVwKKwlpZiAoKF90KS0+RU5leHRCdWxrT3V0UG9zaXRpb24gPT0gKF90KS0+Q3VyV3JpdGVQb3NpdGlvbikJCQkJXAorCXsJCQkJCQkJCQkJCQkJCQkJCVwKKwkJKF90KS0+YlJpbmdFbXB0eSA9IFRSVUU7CQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwkvKk5kaXNJbnRlcmxvY2tlZERlY3JlbWVudCgmKF9wKS0+VHhDb3VudCk7ICovXAorfQorCisvLworLy8gUlhJTkZPIGFwcGVuZHMgYXQgdGhlIGVuZCBvZiBlYWNoIHJ4IHBhY2tldC4KKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZglzdHJ1Y3QJUEFDS0VEIF9SWElORk9fU1RSVUMgeworCVVJTlQzMgkJUGxjcFNpZ25hbDoxMjsKKwlVSU5UMzIJCUxhc3RBTVNEVToxOworCVVJTlQzMgkJQ2lwaGVyQWxnOjE7CisJVUlOVDMyCQlQbGNwUnNzaWw6MTsKKwlVSU5UMzIJCURlY3J5cHRlZDoxOworCVVJTlQzMgkJQU1QRFU6MTsJCS8vIFRvIGJlIG1vdmVkCisJVUlOVDMyCQlMMlBBRDoxOworCVVJTlQzMgkJUlNTSToxOworCVVJTlQzMgkJSFRDOjE7CisJVUlOVDMyCQlBTVNEVToxOwkJLy8gcnggd2l0aCA4MDIuMyBoZWFkZXIsIG5vdCA4MDIuMTEgaGVhZGVyLgorCVVJTlQzMgkJQ2lwaGVyRXJyOjI7ICAgICAgICAvLyAwOiBkZWNyeXB0aW9uIG9rYXksIDE6SUNWIGVycm9yLCAyOk1JQyBlcnJvciwgMzpLRVkgbm90IHZhbGlkCisJVUlOVDMyCQlDcmM6MTsgICAgICAgICAgICAgIC8vIDE6IENSQyBlcnJvcgorCVVJTlQzMgkJTXlCc3M6MTsgIAkvLyAxOiB0aGlzIGZyYW1lIGJlbG9uZ3MgdG8gdGhlIHNhbWUgQlNTSUQKKwlVSU5UMzIJCUJjYXN0OjE7ICAgICAgICAgICAgLy8gMTogdGhpcyBpcyBhIGJyb2FkY2FzdCBmcmFtZQorCVVJTlQzMgkJTWNhc3Q6MTsgICAgICAgICAgICAvLyAxOiB0aGlzIGlzIGEgbXVsdGljYXN0IGZyYW1lCisJVUlOVDMyCQlVMk06MTsgICAgICAgICAgICAgIC8vIDE6IHRoaXMgUlggZnJhbWUgaXMgdW5pY2FzdCB0byBtZQorCVVJTlQzMgkJRlJBRzoxOworCVVJTlQzMgkJTlVMTERBVEE6MTsKKwlVSU5UMzIJCURBVEE6MTsKKwlVSU5UMzIJCUJBOjE7Cit9CVJYSU5GT19TVFJVQywgKlBSWElORk9fU1RSVUMsIFJUMjhYWF9SWERfU1RSVUMsICpQUlQyOFhYX1JYRF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX1JYSU5GT19TVFJVQyB7CisJVUlOVDMyCQlCQToxOworCVVJTlQzMgkJREFUQToxOworCVVJTlQzMgkJTlVMTERBVEE6MTsKKwlVSU5UMzIJCUZSQUc6MTsKKwlVSU5UMzIJCVUyTToxOyAgICAgICAgICAgICAgLy8gMTogdGhpcyBSWCBmcmFtZSBpcyB1bmljYXN0IHRvIG1lCisJVUlOVDMyCQlNY2FzdDoxOyAgICAgICAgICAgIC8vIDE6IHRoaXMgaXMgYSBtdWx0aWNhc3QgZnJhbWUKKwlVSU5UMzIJCUJjYXN0OjE7ICAgICAgICAgICAgLy8gMTogdGhpcyBpcyBhIGJyb2FkY2FzdCBmcmFtZQorCVVJTlQzMgkJTXlCc3M6MTsgIAkvLyAxOiB0aGlzIGZyYW1lIGJlbG9uZ3MgdG8gdGhlIHNhbWUgQlNTSUQKKwlVSU5UMzIJCUNyYzoxOyAgICAgICAgICAgICAgLy8gMTogQ1JDIGVycm9yCisJVUlOVDMyCQlDaXBoZXJFcnI6MjsgICAgICAgIC8vIDA6IGRlY3J5cHRpb24gb2theSwgMTpJQ1YgZXJyb3IsIDI6TUlDIGVycm9yLCAzOktFWSBub3QgdmFsaWQKKwlVSU5UMzIJCUFNU0RVOjE7CQkvLyByeCB3aXRoIDgwMi4zIGhlYWRlciwgbm90IDgwMi4xMSBoZWFkZXIuCisJVUlOVDMyCQlIVEM6MTsKKwlVSU5UMzIJCVJTU0k6MTsKKwlVSU5UMzIJCUwyUEFEOjE7CisJVUlOVDMyCQlBTVBEVToxOwkJLy8gVG8gYmUgbW92ZWQKKwlVSU5UMzIJCURlY3J5cHRlZDoxOworCVVJTlQzMgkJUGxjcFJzc2lsOjE7CisJVUlOVDMyCQlDaXBoZXJBbGc6MTsKKwlVSU5UMzIJCUxhc3RBTVNEVToxOworCVVJTlQzMgkJUGxjcFNpZ25hbDoxMjsKK30JUlhJTkZPX1NUUlVDLCAqUFJYSU5GT19TVFJVQywgUlQyOFhYX1JYRF9TVFJVQywgKlBSVDI4WFhfUlhEX1NUUlVDOworI2VuZGlmCisKKworLy8KKy8vIFRYSU5GTworLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXN0cnVjdAlfVFhJTkZPX1NUUlVDIHsKKwkvLyBXb3JkCTAKKwlVSU5UMzIJCVVTQkRNQVR4YnVyc3Q6MTsvL3VzZWQgT05MWSBpbiBVU0IgYnVsayBBZ2dyZS4gRm9yY2UgVVNCIERNQSB0cmFuc21pdCBmcmFtZSBmcm9tIGN1cnJlbnQgc2VsZWN0ZWQgZW5kcG9pbnQKKwlVSU5UMzIJCVVTQkRNQU5leHRWTEQ6MTsJLy91c2VkIE9OTFkgaW4gVVNCIGJ1bGsgQWdncmVnYXRpb24sIE5leHRWYWxpZAorCVVJTlQzMgkJcnN2MjoyOyAgLy8gU29mdHdhcmUgdXNlLgorCVVJTlQzMgkJU3dVc2VMYXN0Um91bmQ6MTsgLy8gU29mdHdhcmUgdXNlLgorCVVJTlQzMgkJUVNFTDoyOwkvLyBzZWxlY3Qgb24tY2hpcCBGSUZPIElEIGZvciAybmQtc3RhZ2Ugb3V0cHV0IHNjaGVkdWxlci4wOk1HTVQsIDE6SENDQSAyOkVEQ0EKKwlVSU5UMzIJCVdJVjoxOwkvLyBXaXJlbGVzcyBJbmZvIFZhbGlkLiAxIGlmIERyaXZlciBhbHJlYWR5IGZpbGwgV0ksICBvIGlmIERNQSBuZWVkcyB0byBjb3B5IFdJIHRvIGNvcnJlY3Rwb3NpdGlvbgorCVVJTlQzMgkJcnN2Ojg7CisJVUlOVDMyCQlVU0JETUFUeFBrdExlbjoxNjsJLy91c2VkIE9OTFkgaW4gVVNCIGJ1bGsgQWdncmVnYXRpb24sICBUb3RhbCBieXRlIGNvdW50cyBvZiBhbGwgc3ViLWZyYW1lLgorfQlUWElORk9fU1RSVUMsICpQVFhJTkZPX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJc3RydWN0CV9UWElORk9fU1RSVUMgeworCS8vIFdvcmQJMAorCVVJTlQzMgkJVVNCRE1BVHhQa3RMZW46MTY7CS8vdXNlZCBPTkxZIGluIFVTQiBidWxrIEFnZ3JlZ2F0aW9uLCAgVG90YWwgYnl0ZSBjb3VudHMgb2YgYWxsIHN1Yi1mcmFtZS4KKwlVSU5UMzIJCXJzdjo4OworCVVJTlQzMgkJV0lWOjE7CS8vIFdpcmVsZXNzIEluZm8gVmFsaWQuIDEgaWYgRHJpdmVyIGFscmVhZHkgZmlsbCBXSSwgIG8gaWYgRE1BIG5lZWRzIHRvIGNvcHkgV0kgdG8gY29ycmVjdHBvc2l0aW9uCisJVUlOVDMyCQlRU0VMOjI7CS8vIHNlbGVjdCBvbi1jaGlwIEZJRk8gSUQgZm9yIDJuZC1zdGFnZSBvdXRwdXQgc2NoZWR1bGVyLjA6TUdNVCwgMTpIQ0NBIDI6RURDQQorCVVJTlQzMgkJU3dVc2VMYXN0Um91bmQ6MTsgLy8gU29mdHdhcmUgdXNlLgorCVVJTlQzMgkJcnN2MjoyOyAgLy8gU29mdHdhcmUgdXNlLgorCVVJTlQzMgkJVVNCRE1BTmV4dFZMRDoxOwkvL3VzZWQgT05MWSBpbiBVU0IgYnVsayBBZ2dyZWdhdGlvbiwgTmV4dFZhbGlkCisJVUlOVDMyCQlVU0JETUFUeGJ1cnN0OjE7Ly91c2VkIE9OTFkgaW4gVVNCIGJ1bGsgQWdncmUuIEZvcmNlIFVTQiBETUEgdHJhbnNtaXQgZnJhbWUgZnJvbSBjdXJyZW50IHNlbGVjdGVkIGVuZHBvaW50Cit9CVRYSU5GT19TVFJVQywgKlBUWElORk9fU1RSVUM7CisjZW5kaWYKKworI2RlZmluZSBUWElORk9fU0laRQkJCQk0CisjZGVmaW5lIFJYSU5GT19TSVpFCQkJCTQKKyNkZWZpbmUgVFhQQURESU5HX1NJWkUJCQkxMQorCisvLworLy8gTWFuYWdlbWVudCByaW5nIGJ1ZmZlciBmb3JtYXQKKy8vCit0eXBlZGVmCXN0cnVjdAlfTUdNVF9TVFJVQwl7CisJQk9PTEVBTgkJVmFsaWQ7CisJUFVDSEFSCQlwQnVmZmVyOworCVVMT05HCQlMZW5ndGg7Cit9CU1HTVRfU1RSVUMsICpQTUdNVF9TVFJVQzsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBFRVBST00gUmVsYXRlZCBNQUNSTyAtLS0tLS0tLS0tLS0tLS0tLSAqLworI2lmZGVmIFJUMzB4eAorI2RlZmluZSBSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIG9mZnNldCwgdmFyKQkJCQkJXAorCWRvIHsJCQkJCQkJCQkJCQkJCVwKKwkJUlRVU0JSZWFkRUVQUk9NKHBBZCwgb2Zmc2V0LCAoUFVDSEFSKSYodmFyKSwgMik7CQlcCisJCWlmKCFwQWQtPmJVc2VFZnVzZSkJCQkJCQkJCQkJXAorCQkJdmFyID0gbGUyY3B1MTYodmFyKTsJCQkJCQkJCVwKKwl9d2hpbGUoMCkKKworI2RlZmluZSBSVDI4eHhfRUVQUk9NX1dSSVRFMTYocEFkLCBvZmZzZXQsIHZhcikJCQkJCVwKKwlkb3sJCQkJCQkJCQkJCQkJCQlcCisJCVVTSE9SVCBfdG1wVmFyPXZhcjsJCQkJCQkJCQkJXAorCQlpZighcEFkLT5iVXNlRWZ1c2UpCQkJCQkJCQkJXAorCQlfdG1wVmFyID0gY3B1MmxlMTYodmFyKTsJCQkJCQkJCVwKKwkJUlRVU0JXcml0ZUVFUFJPTShwQWQsIG9mZnNldCwgKFBVQ0hBUikmKF90bXBWYXIpLCAyKTsJXAorCX13aGlsZSgwKQorI2VuZGlmIC8vIFJUMzB4eCAvLworI2lmbmRlZiBSVDMweHgKKyNkZWZpbmUgUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBvZmZzZXQsIHZhcikJCQkJCVwKKwlkbyB7CQkJCQkJCQkJCQkJCQlcCisJCVJUVVNCUmVhZEVFUFJPTShwQWQsIG9mZnNldCwgKFBVQ0hBUikmKHZhciksIDIpOwkJXAorCQkJdmFyID0gbGUyY3B1MTYodmFyKTsJCQkJCQkJCVwKKwl9d2hpbGUoMCkKKworI2RlZmluZSBSVDI4eHhfRUVQUk9NX1dSSVRFMTYocEFkLCBvZmZzZXQsIHZhcikJCQkJCVwKKwlkb3sJCQkJCQkJCQkJCQkJCQlcCisJCVVTSE9SVCBfdG1wVmFyPXZhcjsJCQkJCQkJCQkJXAorCQlfdG1wVmFyID0gY3B1MmxlMTYodmFyKTsJCQkJCQkJCVwKKwkJUlRVU0JXcml0ZUVFUFJPTShwQWQsIG9mZnNldCwgKFBVQ0hBUikmKF90bXBWYXIpLCAyKTsJXAorCX13aGlsZSgwKQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBUQVNLL1RIUkVBRCBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJUMjhYWF9UQVNLX1RIUkVBRF9JTklUKHBBZCwgU3RhdHVzKQkJXAorCVN0YXR1cyA9IENyZWF0ZVRocmVhZHMobmV0X2Rldik7CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0gRnJpbXdhcmUgUmVsYXRlZCBNQUNSTyAtLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSVDI4WFhfV1JJVEVfRklSTVdBUkUoX3BBZCwgX3BGd0ltYWdlLCBfRndMZW4pCQlcCisJUlRVU0JGaXJtd2FyZVdyaXRlKF9wQWQsIF9wRndJbWFnZSwgX0Z3TGVuKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBUWCBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJUMjhYWF9TVEFSVF9ERVFVRVVFKHBBZCwgUXVlSWR4LCBpcnFGbGFncykJCQkJXAorCQkJewkJCQkJCQkJCQkJCQlcCisJCQkJUlRNUF9JUlFfTE9DSygmcEFkLT5EZVF1ZXVlTG9ja1tRdWVJZHhdLCBpcnFGbGFncyk7CQlcCisJCQkJaWYgKHBBZC0+RGVRdWV1ZVJ1bm5pbmdbUXVlSWR4XSkJCQkJCQlcCisJCQkJewkJCQkJCQkJCQkJCQkJXAorCQkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+RGVRdWV1ZUxvY2tbUXVlSWR4XSwgaXJxRmxhZ3MpO1wKKwkJCQkJcHJpbnRrKCJEZVF1ZXVlUnVubmluZ1slZF09IFRSVUUhXG4iLCBRdWVJZHgpOwkJXAorCQkJCQljb250aW51ZTsJCQkJCQkJCQkJCVwKKwkJCQl9CQkJCQkJCQkJCQkJCQlcCisJCQkJZWxzZQkJCQkJCQkJCQkJCQlcCisJCQkJewkJCQkJCQkJCQkJCQkJXAorCQkJCQlwQWQtPkRlUXVldWVSdW5uaW5nW1F1ZUlkeF0gPSBUUlVFOwkJCQkJXAorCQkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+RGVRdWV1ZUxvY2tbUXVlSWR4XSwgaXJxRmxhZ3MpO1wKKwkJCQl9CQkJCQkJCQkJCQkJCQlcCisJCQl9CisjZGVmaW5lIFJUMjhYWF9TVE9QX0RFUVVFVUUocEFkLCBRdWVJZHgsIGlycUZsYWdzKQkJCQkJCVwKKwkJCWRvewkJCQkJCQkJCQkJCQkJCVwKKwkJCQlSVE1QX0lSUV9MT0NLKCZwQWQtPkRlUXVldWVMb2NrW1F1ZUlkeF0sIGlycUZsYWdzKTsJCVwKKwkJCQlwQWQtPkRlUXVldWVSdW5uaW5nW1F1ZUlkeF0gPSBGQUxTRTsJCQkJCVwKKwkJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+RGVRdWV1ZUxvY2tbUXVlSWR4XSwgaXJxRmxhZ3MpOwlcCisJCQl9d2hpbGUoMCkKKworCisjZGVmaW5lCVJUMjhYWF9IQVNfRU5PVUdIX0ZSRUVfREVTQyhwQWQsIHBUeEJsaywgZnJlZU51bSwgcFBhY2tldCkgXAorCQkoUlRVU0JGcmVlRGVzY3JpcHRvclJlcXVlc3QocEFkLCBwVHhCbGstPlF1ZUlkeCwgKHBUeEJsay0+VG90YWxGcmFtZUxlbiArIEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpKSkgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKworI2RlZmluZSBSVDI4WFhfUkVMRUFTRV9ERVNDX1JFU09VUkNFKHBBZCwgUXVlSWR4KQkJCVwKKwkJZG97fXdoaWxlKDApCisKKyNkZWZpbmUgTkVFRF9RVUVVRV9CQUNLX0ZPUl9BR0coX3BBZCwgX1F1ZUlkeCwgX2ZyZWVOdW0sIF9UeEZyYW1lVHlwZSkgCQlcCisJCSgoX1R4RnJhbWVUeXBlID09IFRYX1JBTElOS19GUkFNRSkgJiYgKFJUVVNCTmVlZFF1ZXVlQmFja0ZvckFnZyhfcEFkLCBfUXVlSWR4KSkpCisKKworCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfTkVFRF9TVE9QX1RYCQlcCisJCShmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QgfCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfAlcCisJCSBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9CVUxLT1VUX1JFU0VUIHwgXAorCQkgZlJUTVBfQURBUFRFUl9SQURJT19PRkYgfCBmUlRNUF9BREFQVEVSX1JFTU9WRV9JTl9QUk9HUkVTUykKKworCisjZGVmaW5lIEhBTF9Xcml0ZVN1YlR4UmVzb3VyY2UocEFkLCBwVHhCbGssIGJJc0xhc3QsIHBGcmVlTnVtYmVyKQlcCisJCQlSdG1wVVNCX1dyaXRlU3ViVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgYklzTGFzdCwgcEZyZWVOdW1iZXIpCisKKyNkZWZpbmUgSEFMX1dyaXRlVHhSZXNvdXJjZShwQWQsIHBUeEJsayxiSXNMYXN0LCBwRnJlZU51bWJlcikJXAorCQkJUnRtcFVTQl9Xcml0ZVNpbmdsZVR4UmVzb3VyY2UocEFkLCBwVHhCbGssYklzTGFzdCwgcEZyZWVOdW1iZXIpCisKKyNkZWZpbmUgSEFMX1dyaXRlRnJhZ1R4UmVzb3VyY2UocEFkLCBwVHhCbGssIGZyYWdOdW0sIHBGcmVlTnVtYmVyKSBcCisJCQlSdG1wVVNCX1dyaXRlRnJhZ1R4UmVzb3VyY2UocEFkLCBwVHhCbGssIGZyYWdOdW0sIHBGcmVlTnVtYmVyKQorCisjZGVmaW5lIEhBTF9Xcml0ZU11bHRpVHhSZXNvdXJjZShwQWQsIHBUeEJsayxmcmFtZU51bSwgcEZyZWVOdW1iZXIpCVwKKwkJCVJ0bXBVU0JfV3JpdGVNdWx0aVR4UmVzb3VyY2UocEFkLCBwVHhCbGssZnJhbWVOdW0sIHBGcmVlTnVtYmVyKQorCisjZGVmaW5lIEhBTF9GaW5hbFdyaXRlVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgdG90YWxNUERVU2l6ZSwgVHhJZHgpCVwKKwkJCVJ0bXBVU0JfRmluYWxXcml0ZVR4UmVzb3VyY2UocEFkLCBwVHhCbGssIHRvdGFsTVBEVVNpemUsIFR4SWR4KQorCisjZGVmaW5lIEhBTF9MYXN0VHhJZHgocEFkLCBRdWVJZHgsVHhJZHgpIFwKKwkJCS8qUnRtcFVTQkRhdGFMYXN0VHhJZHgocEFkLCBRdWVJZHgsVHhJZHgpKi8KKworI2RlZmluZSBIQUxfS2lja091dFR4KHBBZCwgcFR4QmxrLCBRdWVJZHgpCVwKKwkJCVJ0bXBVU0JEYXRhS2lja091dChwQWQsIHBUeEJsaywgUXVlSWR4KQorCisKKyNkZWZpbmUgSEFMX0tpY2tPdXRNZ210VHgocEFkLCBRdWVJZHgsIHBQYWNrZXQsIHBTcmNCdWZWQSwgU3JjQnVmTGVuKQlcCisJCQlSdG1wVVNCTWdtdEtpY2tPdXQocEFkLCBRdWVJZHgsIHBQYWNrZXQsIHBTcmNCdWZWQSwgU3JjQnVmTGVuKQorCisjZGVmaW5lIEhBTF9LaWNrT3V0TnVsbEZyYW1lVHgoX3BBZCwgX1F1ZUlkeCwgX3BOdWxsRnJhbWUsIF9mcmFtZUxlbikJXAorCQkJUnRtcFVTQk51bGxGcmFtZUtpY2tPdXQoX3BBZCwgX1F1ZUlkeCwgX3BOdWxsRnJhbWUsIF9mcmFtZUxlbikKKworI2RlZmluZSBSVE1QX1BLVF9UQUlMX1BBRERJTkcgCTExIC8vIDMobWF4IDQgYnl0ZSBwYWRkaW5nKSArIDQgKGxhc3QgcGFja2V0IHBhZGRpbmcpICsgNCAoTWF4QnVsa091dHNpemUgYWxpZ24gcGFkZGluZykKKworZXh0ZXJuIFVDSEFSIEVwVG9RdWV1ZVs2XTsKKworCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIEdFVF9UWFJJTkdfRlJFRU5PKF9wQWQsIF9RdWVJZHgpIAkoX1F1ZUlkeCkgLy8oX3BBZC0+VHhSaW5nW19RdWVJZHhdLlR4U3dGcmVlSWR4KQorI2RlZmluZSBHRVRfTUdNVFJJTkdfRlJFRU5PKF9wQWQpIAkJCShfcEFkLT5NZ210UmluZy5UeFN3RnJlZUlkeCkKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBSWCBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCisvLyNkZWZpbmUgUlQyOFhYX1JYX0VSUk9SX0NIRUNLCQkJCVJUTVBDaGVja1J4V0kKKworI2RlZmluZSBSVDI4WFhfUlZfQUxMX0JVRl9FTkQoYkJ1bGtSZWNlaXZlKQkJXAorCS8qIFdlIHJldHVybiBTVEFUVVNfTU9SRV9QUk9DRVNTSU5HX1JFUVVJUkVEIHNvIHRoYXQgdGhlIGNvbXBsZXRpb24gKi8JXAorCS8qIHJvdXRpbmUgKElvZkNvbXBsZXRlUmVxdWVzdCkgd2lsbCBzdG9wIHdvcmtpbmcgb24gdGhlIGlycC4gKi8JCVwKKwlpZiAoYkJ1bGtSZWNlaXZlID09IFRSVUUpCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBBU0lDIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8vIHJlc2V0IE1BQyBvZiBhIHN0YXRpb24gZW50cnkgdG8gMHhGRkZGRkZGRkZGRkYKKyNkZWZpbmUgUlQyOFhYX1NUQV9FTlRSWV9NQUNfUkVTRVQocEFkLCBXY2lkKQkJCQkJXAorCXsJUlRfU0VUX0FTSUNfV0NJRAlTZXRBc2ljV2NpZDsJCQkJCQlcCisJCVNldEFzaWNXY2lkLldDSUQgPSBXY2lkOwkJCQkJCQkJXAorCQlTZXRBc2ljV2NpZC5TZXRUaWQgPSAweGZmZmZmZmZmOwkJCQkJCVwKKwkJU2V0QXNpY1djaWQuRGVsZXRlVGlkID0gMHhmZmZmZmZmZjsJCQkJCQlcCisJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1NFVF9BU0lDX1dDSUQsIAlcCisJCQkJJlNldEFzaWNXY2lkLCBzaXplb2YoUlRfU0VUX0FTSUNfV0NJRCkpOwl9CisKKy8vIGFkZCB0aGlzIGVudHJ5IGludG8gQVNJQyBSWCBXQ0lEIHNlYXJjaCB0YWJsZQorI2RlZmluZSBSVDI4WFhfU1RBX0VOVFJZX0FERChwQWQsIHBFbnRyeSkJCQkJCQkJXAorCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1NFVF9DTElFTlRfTUFDX0VOVFJZLCAJXAorCQkJCQkJCXBFbnRyeSwgc2l6ZW9mKE1BQ19UQUJMRV9FTlRSWSkpOworCisvLyBhZGQgYnkgam9obmxpLCBmaXggImluX2ludGVycnVwdCIgZXJyb3Igd2hlbiBjYWxsICJNYWNUYWJsZURlbGV0ZUVudHJ5IiBpbiBSeCB0YXNrbGV0CisvLyBTZXQgTUFDIHJlZ2lzdGVyIHZhbHVlIGFjY29yZGluZyBvcGVyYXRpb24gbW9kZQorI2RlZmluZSBSVDI4WFhfVVBEQVRFX1BST1RFQ1QocEFkKQlcCisgCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1VQREFURV9QUk9URUNULCBOVUxMLCAwKTsKKy8vIGVuZCBqb2hubGkKKworLy8gcmVtb3ZlIFBhaXItd2lzZSBrZXkgbWF0ZXJpYWwgZnJvbSBBU0lDCisvLyB5ZXQgaW1wbGVtZW50CisjZGVmaW5lIFJUMjhYWF9TVEFfRU5UUllfS0VZX0RFTChwQWQsIEJzc0lkeCwgV2NpZCkKKworLy8gYWRkIENsaWVudCBzZWN1cml0eSBpbmZvcm1hdGlvbiBpbnRvIEFTSUMgV0NJRCB0YWJsZSBhbmQgSVZFSVYgdGFibGUKKyNkZWZpbmUgUlQyOFhYX1NUQV9TRUNVUklUWV9JTkZPX0FERChwQWQsIGFwaWR4LCBLZXlJRCwgcEVudHJ5KQkJCQkJCVwKKwl7CVJUMjhYWF9TVEFfRU5UUllfTUFDX1JFU0VUKHBBZCwgcEVudHJ5LT5BaWQpOwkJCQkJCQkJXAorCQlpZiAocEVudHJ5LT5BaWQgPj0gMSkgewkJCQkJCQkJCQkJCQkJXAorCQkJUlRfU0VUX0FTSUNfV0NJRF9BVFRSSQlTZXRBc2ljV2NpZEF0dHJpOwkJCQkJCQkJXAorCQkJU2V0QXNpY1djaWRBdHRyaS5XQ0lEID0gcEVudHJ5LT5BaWQ7CQkJCQkJCQkJXAorCQkJaWYgKChwRW50cnktPkF1dGhNb2RlIDw9IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gpICYmCQkJCVwKKwkJCQkocEVudHJ5LT5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkpCQkJCVwKKwkJCXsJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJU2V0QXNpY1djaWRBdHRyaS5DaXBoZXIgPSBwQWQtPlNoYXJlZEtleVthcGlkeF1bS2V5SURdLkNpcGhlckFsZzsJXAorCQkJfQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCWVsc2UgaWYgKHBFbnRyeS0+QXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkJCQkJCVwKKwkJCXsJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJU2V0QXNpY1djaWRBdHRyaS5DaXBoZXIgPSBwQWQtPlNoYXJlZEtleVthcGlkeF1bS2V5SURdLkNpcGhlckFsZzsJXAorCQkJfQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCWVsc2UgU2V0QXNpY1djaWRBdHRyaS5DaXBoZXIgPSAwOwkJCQkJCQkJCQlcCisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJhaWQgY2lwaGVyID0gJWxkXG4iLFNldEFzaWNXY2lkQXR0cmkuQ2lwaGVyKSk7ICAgICAgIFwKKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1NFVF9BU0lDX1dDSURfQ0lQSEVSLCAJCQlcCisJCQkJCQkJJlNldEFzaWNXY2lkQXR0cmksIHNpemVvZihSVF9TRVRfQVNJQ19XQ0lEX0FUVFJJKSk7IH0gfQorCisvLyBJbnNlcnQgdGhlIEJBIGJpdG1hcCB0byBBU0lDIGZvciB0aGUgV2NpZCBlbnRyeQorI2RlZmluZSBSVDI4WFhfQUREX0JBX1NFU1NJT05fVE9fQVNJQyhfcEFkLCBfQWlkLCBfVElEKQkJCQkJXAorCQlkb3sJCQkJCQkJCQkJCQkJCQkJXAorCQkJUlRfU0VUX0FTSUNfV0NJRAlTZXRBc2ljV2NpZDsJCQkJCQkJXAorCQkJU2V0QXNpY1djaWQuV0NJRCA9IChfQWlkKTsJCQkJCQkJCQlcCisJCQlTZXRBc2ljV2NpZC5TZXRUaWQgPSAoMHgxMDAwMDw8KF9USUQpKTsJCQkJCQlcCisJCQlTZXRBc2ljV2NpZC5EZWxldGVUaWQgPSAweGZmZmZmZmZmOwkJCQkJCQlcCisJCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZCgoX3BBZCksIENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lELCAmU2V0QXNpY1djaWQsIHNpemVvZihSVF9TRVRfQVNJQ19XQ0lEKSk7CVwKKwkJfXdoaWxlKDApCisKKy8vIFJlbW92ZSB0aGUgQkEgYml0bWFwIGZyb20gQVNJQyBmb3IgdGhlIFdjaWQgZW50cnkKKyNkZWZpbmUgUlQyOFhYX0RFTF9CQV9TRVNTSU9OX0ZST01fQVNJQyhfcEFkLCBfV2NpZCwgX1RJRCkJCQkJXAorCQlkb3sJCQkJCQkJCQkJCQkJCQkJXAorCQkJUlRfU0VUX0FTSUNfV0NJRAlTZXRBc2ljV2NpZDsJCQkJCQkJXAorCQkJU2V0QXNpY1djaWQuV0NJRCA9IChfV2NpZCk7CQkJCQkJCQkJXAorCQkJU2V0QXNpY1djaWQuU2V0VGlkID0gKDB4ZmZmZmZmZmYpOwkJCQkJCQlcCisJCQlTZXRBc2ljV2NpZC5EZWxldGVUaWQgPSAoMHgxMDAwMDw8KF9USUQpICk7CQkJCQlcCisJCQlSVFVTQkVucXVldWVJbnRlcm5hbENtZCgoX3BBZCksIENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lELCAmU2V0QXNpY1djaWQsIHNpemVvZihSVF9TRVRfQVNJQ19XQ0lEKSk7CVwKKwkJfXdoaWxlKDApCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0gUENJL1VTQiBSZWxhdGVkIE1BQ1JPIC0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFJUMjhYWF9IQU5ETEVfREVWX0FTU0lHTihoYW5kbGUsIGRldl9wKQkJCVwKKwkoKFBPU19DT09LSUUpaGFuZGxlKS0+cFVzYl9EZXYgPSBkZXZfcDsKKworLy8gbm8gdXNlCisjZGVmaW5lIFJUMjhYWF9VTk1BUCgpCisjZGVmaW5lIFJUMjhYWF9JUlFfUkVRVUVTVChuZXRfZGV2KQorI2RlZmluZSBSVDI4WFhfSVJRX1JFTEVBU0UobmV0X2RldikKKyNkZWZpbmUgUlQyOFhYX0lSUV9JTklUKHBBZCkKKyNkZWZpbmUgUlQyOFhYX0lSUV9FTkFCTEUocEFkKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIE1MTUUgUmVsYXRlZCBNQUNSTyAtLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCkJCQlSVFVTQk1sbWVVcChwQWQpCisKKyNkZWZpbmUgUlQyOFhYX01MTUVfUFJFX1NBTklUWV9DSEVDSyhwQWQpCQkJCQkJCQlcCisJewlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJIYXJkd2FyZVJhZGlvID09IFRSVUUpICYmIAkJCQkJXAorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpICYmCQlcCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkpIHsJXAorCQkJUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQocEFkLCBDTURUSFJFQURfQ0hFQ0tfR1BJTywgTlVMTCwgMCk7IH0gfQorCisjZGVmaW5lIFJUMjhYWF9NTE1FX1NUQV9RVUlDS19SU1BfV0FLRV9VUChwQWQpCVwKKwl7CVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1FLRVJJT0RJQ19FWEVDVVQsIE5VTEwsIDApOwlcCisJCVJUVVNCTWxtZVVwKHBBZCk7IH0KKworI2RlZmluZSBSVDI4WFhfTUxNRV9SRVNFVF9TVEFURV9NQUNISU5FKHBBZCkJXAorCQkgICAgICAgIE1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9SRVNFVF9DT05GLCAwLCBOVUxMKTsJXAorCQkgICAgICAgIFJUVVNCTWxtZVVwKHBBZCk7CisKKyNkZWZpbmUgUlQyOFhYX0hBTkRMRV9DT1VOVEVSX01FQVNVUkUoX3BBZCwgX3BFbnRyeSkJCVwKKwl7CVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKF9wQWQsIENNRFRIUkVBRF84MDJfMTFfQ09VTlRFUl9NRUFTVVJFLCBfcEVudHJ5LCBzaXplb2YoTUFDX1RBQkxFX0VOVFJZKSk7CVwKKwkJUlRVU0JNbG1lVXAoX3BBZCk7CQkJCQkJCQkJXAorCX0KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBQb3dlciBTYXZlIFJlbGF0ZWQgTUFDUk8gLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgUlQyOFhYX1BTX1BPTExfRU5RVUVVRShwQWQpCQkJCQkJXAorCXsJUlRVU0JfU0VUX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9QU1BPTEwpOwlcCisJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsgfQorCisjZGVmaW5lIFJUMjh4eF9DSElQX05BTUUgICAgICAgICAgICAiUlQyODcwIgorI2RlZmluZSBVU0JfQ1lDX0NGRyAgICAgICAgICAgICAgICAgMHgwMmE0CisjZGVmaW5lIE5UX1NVQ0NFU1Moc3RhdHVzKQkJCSgoKHN0YXR1cykgPiAwKSA/ICgxKTooMCkpCisjZGVmaW5lIEludGVybG9ja2VkSW5jcmVtZW50IAkgCWF0b21pY19pbmMKKyNkZWZpbmUgTmRpc0ludGVybG9ja2VkSW5jcmVtZW50IAlhdG9taWNfaW5jCisjZGVmaW5lIEludGVybG9ja2VkRGVjcmVtZW50CQlhdG9taWNfZGVjCisjZGVmaW5lIE5kaXNJbnRlcmxvY2tlZERlY3JlbWVudCAJYXRvbWljX2RlYworI2RlZmluZSBJbnRlcmxvY2tlZEV4Y2hhbmdlCQkJYXRvbWljX3NldAorLy8jZGVmaW5lIE5kaXNNU2VuZENvbXBsZXRlCQkJUlRNUF9TZW5kQ29tcGxldGUKKyNkZWZpbmUgTmRpc01DYW5jZWxUaW1lcgkJCVJUTVBDYW5jZWxUaW1lcgorI2RlZmluZSBOZGlzQWxsb2NNZW1vcnkoX3B0ciwgX3NpemUsIF9mbGFnKQlcCisJCQkJCQkJCQlkb3tfcHRyID0ga21hbGxvYygoX3NpemUpLChfZmxhZykpO313aGlsZSgwKQorI2RlZmluZSBOZGlzRnJlZU1lbW9yeShhLCBiLCBjKSAJa2ZyZWUoKGEpKQorI2RlZmluZSBOZGlzTVNsZWVwCQkJCQlSVE1QdXNlY0RlbGF5CQkvKiB1bml0OiBtaWNyb3NlY29uZCAqLworCisKKyNkZWZpbmUgVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VUCQkwCisjZGVmaW5lIFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX0lOCQkwCisjZGVmaW5lIFVTQkRfU0hPUlRfVFJBTlNGRVJfT0sJCQkwCisjZGVmaW5lIFBVUkIJCQlwdXJiYl90CisKKyNkZWZpbmUgUlRVU0JfRlJFRV9VUkIocFVyYikJdXNiX2ZyZWVfdXJiKHBVcmIpCisKKy8vI3VuZGVmIE1sbWVBbGxvY2F0ZU1lbW9yeQorLy8jdW5kZWYgTWxtZUZyZWVNZW1vcnkKKwordHlwZWRlZiBzdHJ1Y3QgdXNiX2RldmljZQkqIFBVU0JfREVWOworCisvKiBNQUNSTyBmb3IgbGludXggdXNiICovCit0eXBlZGVmIHN0cnVjdCB1cmIgKnB1cmJiX3Q7Cit0eXBlZGVmIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgZGV2Y3RybHJlcXVlc3Q7CisjZGVmaW5lIFBJUlAJCVBWT0lECisjZGVmaW5lIFBNREwJCVBWT0lECisjZGVmaW5lIE5ESVNfT0lECVVJTlQKKyNpZm5kZWYgVVNCX1NUX05PRVJST1IKKyNkZWZpbmUgVVNCX1NUX05PRVJST1IgICAgIDAKKyNlbmRpZgorCisvLyB2ZW5kb3Itc3BlY2lmaWMgY29udHJvbCBvcGVyYXRpb25zCisjZGVmaW5lIENPTlRST0xfVElNRU9VVF9KSUZGSUVTICggKDEwMCAqIEhaKSAvIDEwMDApCisjZGVmaW5lIFVOTElOS19USU1FT1VUX01TCQkzCisKKy8qIHVubGluayB1cmIJKi8KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDcpCisjZGVmaW5lIFJUVVNCX1VOTElOS19VUkIocFVyYikJCXVzYl9raWxsX3VyYihwVXJiKQorI2Vsc2UKKyNkZWZpbmUgUlRVU0JfVU5MSU5LX1VSQihwVXJiKQkJdXNiX3VubGlua191cmIocFVyYikKKyNlbmRpZgorCisvLyBQcm90b3R5cGVzIG9mIGNvbXBsZXRpb24gZnVudWMuCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCisjZGVmaW5lIFJUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZShwdXJiLCBwdF9yZWdzKSAgICBSVFVTQkJ1bGtPdXREYXRhUGFja2V0Q29tcGxldGUocHVyYikKKyNkZWZpbmUgUlRVU0JCdWxrT3V0TUxNRVBhY2tldENvbXBsZXRlKHBVcmIsIHB0X3JlZ3MpICAgIFJUVVNCQnVsa091dE1MTUVQYWNrZXRDb21wbGV0ZShwVXJiKQorI2RlZmluZSBSVFVTQkJ1bGtPdXROdWxsRnJhbWVDb21wbGV0ZShwVXJiLCBwdF9yZWdzKSAgICAgUlRVU0JCdWxrT3V0TnVsbEZyYW1lQ29tcGxldGUocFVyYikKKyNkZWZpbmUgUlRVU0JCdWxrT3V0UlRTRnJhbWVDb21wbGV0ZShwVXJiLCBwdF9yZWdzKSAgICAgIFJUVVNCQnVsa091dFJUU0ZyYW1lQ29tcGxldGUocFVyYikKKyNkZWZpbmUgUlRVU0JCdWxrT3V0UHNQb2xsQ29tcGxldGUocFVyYiwgcHRfcmVncykgICAgICAgIFJUVVNCQnVsa091dFBzUG9sbENvbXBsZXRlKHBVcmIpCisjZGVmaW5lIFJUVVNCQnVsa1J4Q29tcGxldGUocFVyYiwgcHRfcmVncykgICAgICAgICAgICAgICBSVFVTQkJ1bGtSeENvbXBsZXRlKHBVcmIpCisjZW5kaWYKKworCitWT0lEIFJUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZShwdXJiYl90IHB1cmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKTsKK1ZPSUQgUlRVU0JCdWxrT3V0TUxNRVBhY2tldENvbXBsZXRlKHB1cmJiX3QgcFVyYiwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MpOworVk9JRCBSVFVTQkJ1bGtPdXROdWxsRnJhbWVDb21wbGV0ZShwdXJiYl90IHBVcmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKTsKK1ZPSUQgUlRVU0JCdWxrT3V0UlRTRnJhbWVDb21wbGV0ZShwdXJiYl90IHBVcmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKTsKK1ZPSUQgUlRVU0JCdWxrT3V0UHNQb2xsQ29tcGxldGUocHVyYmJfdCBwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncyk7CitWT0lEIFJUVVNCQnVsa1J4Q29tcGxldGUocHVyYmJfdCBwVXJiLCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncyk7CisKKworI2RlZmluZSBSVFVTQk1sbWVVcChwQWQpCSAgICAgICAgXAorewkJCQkJCQkJICAgIFwKKwlQT1NfQ09PS0lFIHBPYmogPSAoUE9TX0NPT0tJRSkgcEFkLT5PU19Db29raWU7CVwKKwlpZihwT2JqLT5NTE1FVGhyX3BpZD4wKQkJICAgIFwKKyAgICAgICAgdXAoJihwQWQtPm1sbWVfc2VtYXBob3JlKSk7IFwKK30KKworI2RlZmluZSBSVFVTQkNNRFVwKHBBZCkJICAgICAgICAgICAgICAgIFwKK3sJCQkJCQkJCQkgICAgXAorCVBPU19DT09LSUUgcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsJXAorCWlmKHBPYmotPlJUVVNCQ21kVGhyX3BpZD4wKQkJICAgIFwKKwkgICAgdXAoJihwQWQtPlJUVVNCQ21kX3NlbWFwaG9yZSkpOyBcCit9CisKKworc3RhdGljIGlubGluZSBORElTX1NUQVRVUyBSVE1QQWxsb2NhdGVNZW1vcnkoCisJT1VUIFBWT0lEICpwdHIsCisJSU4gc2l6ZV90IHNpemUpCit7CisJKnB0ciA9IGttYWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYoKnB0cikKKwkJcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJZWxzZQorCQlyZXR1cm4gTkRJU19TVEFUVVNfUkVTT1VSQ0VTOworfQorCisvKiBydG1wLmggKi8KKyNkZWZpbmUJQkVBQ09OX1JJTkdfU0laRSAgICAgICAgICAgICAgICAyCisjZGVmaW5lIERFVklDRV9WRU5ET1JfUkVRVUVTVF9PVVQgICAgICAgMHg0MAorI2RlZmluZSBERVZJQ0VfVkVORE9SX1JFUVVFU1RfSU4gICAgICAgIDB4YzAKKyNkZWZpbmUgSU5URVJGQUNFX1ZFTkRPUl9SRVFVRVNUX09VVCAgICAweDQxCisjZGVmaW5lIElOVEVSRkFDRV9WRU5ET1JfUkVRVUVTVF9JTiAgICAgMHhjMQorI2RlZmluZSBNR01UUElQRUlEWAkJCQkJCTAJLy8gRVA2IGlzIGhpZ2hlc3QgcHJpb3JpdHkKKworI2RlZmluZSBCVUxLT1VUX01HTVRfUkVTRVRfRkxBRwkJCQkweDgwCisKKyNkZWZpbmUgUlRVU0JfU0VUX0JVTEtfRkxBRyhfTSwgX0YpCQkJCSgoX00pLT5CdWxrRmxhZ3MgfD0gKF9GKSkKKyNkZWZpbmUgUlRVU0JfQ0xFQVJfQlVMS19GTEFHKF9NLCBfRikJCQkoKF9NKS0+QnVsa0ZsYWdzICY9IH4oX0YpKQorI2RlZmluZSBSVFVTQl9URVNUX0JVTEtfRkxBRyhfTSwgX0YpCQkJKCgoX00pLT5CdWxrRmxhZ3MgJiAoX0YpKSAhPSAwKQorCisjZGVmaW5lIEVucXVldWVDbWQoY21kcSwgY21kcWVsbXQpCQlcCit7CQkJCQkJCQkJCVwKKwlpZiAoY21kcS0+c2l6ZSA9PSAwKQkJCQlcCisJCWNtZHEtPmhlYWQgPSBjbWRxZWxtdDsJCQlcCisJZWxzZQkJCQkJCQkJXAorCQljbWRxLT50YWlsLT5uZXh0ID0gY21kcWVsbXQ7CVwKKwljbWRxLT50YWlsID0gY21kcWVsbXQ7CQkJCVwKKwljbWRxZWxtdC0+bmV4dCA9IE5VTEw7CQkJCVwKKwljbWRxLT5zaXplKys7CQkJCQkJXAorfQorCit0eXBlZGVmIHN0cnVjdCAgIF9SVF9TRVRfQVNJQ19XQ0lEIHsKKwlVTE9ORyBXQ0lEOyAgICAgICAgICAvLyBtZWNoYW5pc20gZm9yIHJla2V5aW5nOiAwOmRpc2FibGUsIDE6IHRpbWUtYmFzZWQsIDI6IHBhY2tldC1iYXNlZAorCVVMT05HIFNldFRpZDsgICAgICAgIC8vIHRpbWUtYmFzZWQ6IHNlY29uZHMsIHBhY2tldC1iYXNlZDoga2lsby1wYWNrZXRzCisJVUxPTkcgRGVsZXRlVGlkOyAgICAgICAgLy8gdGltZS1iYXNlZDogc2Vjb25kcywgcGFja2V0LWJhc2VkOiBraWxvLXBhY2tldHMKK30gUlRfU0VUX0FTSUNfV0NJRCwqUFJUX1NFVF9BU0lDX1dDSUQ7CisKK3R5cGVkZWYgc3RydWN0ICAgX1JUX1NFVF9BU0lDX1dDSURfQVRUUkkgeworCVVMT05HCVdDSUQ7ICAgICAgICAgIC8vIG1lY2hhbmlzbSBmb3IgcmVrZXlpbmc6IDA6ZGlzYWJsZSwgMTogdGltZS1iYXNlZCwgMjogcGFja2V0LWJhc2VkCisJVUxPTkcJQ2lwaGVyOyAgICAgICAgLy8gQVNJQyBDaXBoZXIgZGVmaW5pdGlvbgorCVVDSEFSCUFkZHJbRVRIX0xFTkdUSF9PRl9BRERSRVNTXTsKK30gUlRfU0VUX0FTSUNfV0NJRF9BVFRSSSwqUFJUX1NFVF9BU0lDX1dDSURfQVRUUkk7CisKK3R5cGVkZWYgc3RydWN0IF9NTE1FX01FTU9SWV9TVFJVQ1QgeworCVBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb2NWYTsgICAgLy9Qb2ludGVyIHRvIHRoZSBiYXNlIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeQorCXN0cnVjdCBfTUxNRV9NRU1PUllfU1RSVUNUICAgICAgKk5leHQ7ICAgICAgLy9Qb2ludGVyIHRvIHRoZSBuZXh0IHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgYWxsb2NhdGVkIG1lbW9yeQorfSAgIE1MTUVfTUVNT1JZX1NUUlVDVCwgKlBNTE1FX01FTU9SWV9TVFJVQ1Q7CisKK3R5cGVkZWYgc3RydWN0ICBfTUxNRV9NRU1PUllfSEFORExFUiB7CisJQk9PTEVBTiAgICAgICAgICAgICAgICAgTWVtUnVubmluZzsgICAgICAgICAvL1RoZSBmbGFnIG9mIHRoZSBNbG1lIG1lbW9yeSBoYW5kbGVyJ3Mgc3RhdHVzCisJVUlOVCAgICAgICAgICAgICAgICAgICAgTWVtb3J5Q291bnQ7ICAgICAgICAvL1RvdGFsIG5vbnBhZ2VkIHN5c3RlbS1zcGFjZSBtZW1vcnkgbm90IHNpemUKKwlVSU5UICAgICAgICAgICAgICAgICAgICBJblVzZUNvdW50OyAgICAgICAgIC8vTm9ucGFnZWQgc3lzdGVtLXNwYWNlIG1lbW9yeSBpbiB1c2VkIGNvdW50cworCVVJTlQgICAgICAgICAgICAgICAgICAgIFVuVXNlQ291bnQ7ICAgICAgICAgLy9Ob25wYWdlZCBzeXN0ZW0tc3BhY2UgbWVtb3J5IGF2YWlsYWJsZSBjb3VudHMKKwlJTlQgICAgICAgICAgICAgICAgICAgIFBlbmRpbmdDb3VudDsgICAgICAgLy9Ob25wYWdlZCBzeXN0ZW0tc3BhY2UgbWVtb3J5IGZvciBmcmVlIGNvdW50cworCVBNTE1FX01FTU9SWV9TVFJVQ1QgICAgIHBJblVzZUhlYWQ7ICAgICAgICAgLy9Qb2ludGVyIHRvIHRoZSBmaXJzdCBub25wYWVkIG1lbW9yeSBub3QgdXNlZAorCVBNTE1FX01FTU9SWV9TVFJVQ1QgICAgIHBJblVzZVRhaWw7ICAgICAgICAgLy9Qb2ludGVyIHRvIHRoZSBsYXN0IG5vbnBhZ2VkIG1lbW9yeSBub3QgdXNlZAorCVBNTE1FX01FTU9SWV9TVFJVQ1QgICAgIHBVblVzZUhlYWQ7ICAgICAgICAgLy9Qb2ludGVyIHRvIHRoZSBmaXJzdCBub25wYWdlZCBtZW1vcnkgaW4gdXNlZAorCVBNTE1FX01FTU9SWV9TVFJVQ1QgICAgIHBVblVzZVRhaWw7ICAgICAgICAgLy9Qb2ludGVyIHRvIHRoZSBsYXN0IG5vbnBhZ2VkIG1lbW9yeSBpbiB1c2VkCisJUFVMT05HICAgICAgICAgICAgICAgICAgTWVtRnJlZVBlbmRpbmdbTUFYX01MTUVfSEFORExFUl9NRU1PUlldOyAgIC8vYW4gYXJyYXkgdG8ga2VlcCBwZW5kaW5nIGZyZWUtbWVtb3J5J3MgcG9pbnRlciAoMzJiaXRzKQorfSAgIE1MTUVfTUVNT1JZX0hBTkRMRVIsICpQTUxNRV9NRU1PUllfSEFORExFUjsKKwordHlwZWRlZglzdHJ1Y3QgX0NtZFFFbG10CXsKKwlVSU5UCQkJCWNvbW1hbmQ7CisJUFZPSUQJCQkJYnVmZmVyOworCVVMT05HCQkJCWJ1ZmZlcmxlbmd0aDsKKwlCT09MRUFOCQkJCUNtZEZyb21OZGlzOworCUJPT0xFQU4JCQkJU2V0T3BlcmF0aW9uOworCXN0cnVjdCBfQ21kUUVsbXQJKm5leHQ7Cit9CUNtZFFFbG10LCAqUENtZFFFbG10OworCit0eXBlZGVmCXN0cnVjdAlfQ21kUQl7CisJVUlOVAkJc2l6ZTsKKwlDbWRRRWxtdAkqaGVhZDsKKwlDbWRRRWxtdAkqdGFpbDsKKwlVSU5UMzIJCUNtZFFTdGF0ZTsKK31DbWRRLCAqUENtZFE7CisKKy8vCisvLyBGb3IgV1BBIFNVUFBMSUNBTlQ6IFdJUkVMRVNTIEVYVCBzdXBwb3J0IHdpcmVsZXNzIGV2ZW50czogdjE0IG9yIG5ld2VyCisvLworI2lmIFdJUkVMRVNTX0VYVCA+PSAxNAorLy8jZGVmaW5lIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgIDEKKyNlbmRpZgorCisvKiBvaWQuaCAqLworLy8gQ2lwaGVyIHN1aXRlIHR5cGUgZm9yIG1peGVkIG1vZGUgZ3JvdXAgY2lwaGVyLCBQODAyLjExaS0yMDA0Cit0eXBlZGVmIGVudW0gX1JUXzgwMl8xMV9DSVBIRVJfU1VJVEVfVFlQRSB7CisJQ2lwaGVyX1R5cGVfTk9ORSwKKwlDaXBoZXJfVHlwZV9XRVA0MCwKKwlDaXBoZXJfVHlwZV9US0lQLAorCUNpcGhlcl9UeXBlX1JTVkQsCisJQ2lwaGVyX1R5cGVfQ0NNUCwKKwlDaXBoZXJfVHlwZV9XRVAxMDQKK30gUlRfODAyXzExX0NJUEhFUl9TVUlURV9UWVBFLCAqUFJUXzgwMl8xMV9DSVBIRVJfU1VJVEVfVFlQRTsKKworLy9DTURUSFJFQURfTVVMVElfUkVBRF9NQUMKKy8vQ01EVEhSRUFEX01VTFRJX1dSSVRFX01BQworLy9DTURUSFJFQURfVkVORE9SX0VFUFJPTV9SRUFECisvL0NNRFRIUkVBRF9WRU5ET1JfRUVQUk9NX1dSSVRFCit0eXBlZGVmCXN0cnVjdAlfQ01ESGFuZGxlcl9UTFYJeworCVVTSE9SVAkJT2Zmc2V0OworCVVTSE9SVAkJTGVuZ3RoOworCVVDSEFSCQlEYXRhRmlyc3Q7Cit9CUNNREhhbmRsZXJfVExWLCAqUENNREhhbmRsZXJfVExWOworCisvLyBOZXcgZm9yIE1lZXRpbmdIb3VzZSBBcGkgc3VwcG9ydAorI2RlZmluZSBDTURUSFJFQURfVkVORE9SX1JFU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAxMDEJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfVU5QTFVHICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDEwMgkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9TV0lUQ0hfRlVOQ1RJT04gICAgICAgICAgICAweDBENzMwMTAzCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfTVVMVElfV1JJVEVfTUFDICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAxMDcJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9NVUxUSV9SRUFEX01BQyAgICAgICAgICAgICAgICAgICAgMHgwRDczMDEwOAkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9FRVBST01fV1JJVEUgICAgICAgICAgICAgICAweDBENzMwMTBBCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVkVORE9SX0VFUFJPTV9SRUFEICAgICAgICAgICAgICAgIDB4MEQ3MzAxMEIJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfRU5URVJfVEVTVE1PREUgICAgICAgICAgICAgMHgwRDczMDEwQwkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9FWElUX1RFU1RNT0RFICAgICAgICAgICAgICAweDBENzMwMTBECS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVkVORE9SX1dSSVRFX0JCUCAgICAgICAgICAgICAgICAgIDB4MEQ3MzAxMTkJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9WRU5ET1JfUkVBRF9CQlAgICAgICAgICAgICAgICAgICAgMHgwRDczMDExOAkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1ZFTkRPUl9XUklURV9SRiAgICAgICAgICAgICAgICAgICAweDBENzMwMTFBCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfVkVORE9SX0ZMSVBfSVEgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAxMUQJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9SRVNFVF9CVUxLX09VVCAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIxMAkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1JFU0VUX0JVTEtfSU4gICAgICAgICAgICAgICAgICAgICAweDBENzMwMjExCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfU0VUX1BTTV9CSVRfU0FWRSAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMTIJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9TRVRfUkFESU8gICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIxNAkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1VQREFURV9UWF9SQVRFICAgICAgICAgICAgICAgICAgICAweDBENzMwMjE2CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfODAyXzExX0FERF9LRVlfV0VQICAgICAgICAgICAgICAgIDB4MEQ3MzAyMTgJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9SRVNFVF9GUk9NX0VSUk9SICAgICAgICAgICAgICAgICAgMHgwRDczMDIxQQkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX0xJTktfRE9XTiAgICAgICAgICAgICAgICAgICAgICAgICAweDBENzMwMjFCCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfUkVTRVRfRlJPTV9ORElTICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMUMJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9DSEVDS19HUElPICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIxNQkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX0ZPUkNFX1dBS0VfVVAgICAgICAgICAgICAgICAgICAgICAweDBENzMwMjIyCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfU0VUX0JXICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyMjUJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9TRVRfQVNJQ19XQ0lEICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIyNgkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEX1NFVF9BU0lDX1dDSURfQ0lQSEVSICAgICAgICAgICAgICAweDBENzMwMjI3CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfUUtFUklPRElDX0VYRUNVVCAgICAgICAgICAgICAgICAgIDB4MEQ3MzAyM0QJLy8gY21kCisjZGVmaW5lIFJUX0NNRF9TRVRfS0VZX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIyOCAgLy8gY21kCisjZGVmaW5lIFJUX0NNRF9TRVRfUlhfV0NJRF9UQUJMRSAgICAgICAgICAgICAgICAgICAgMHgwRDczMDIyOSAgLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF9TRVRfQ0xJRU5UX01BQ19FTlRSWSAgICAgICAgICAgICAgMHgwRDczMDIzRQkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEXzgwMl8xMV9RVUVSWV9IQVJEV0FSRV9SRUdJU1RFUiAgICAweDBENzEwMTA1CS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfODAyXzExX1NFVF9QSFlfTU9ERSAgICAgICAgICAgICAgIDB4MEQ3OTAxMEMJLy8gY21kCisjZGVmaW5lIENNRFRIUkVBRF84MDJfMTFfU0VUX1NUQV9DT05GSUcgICAgICAgICAgICAgMHgwRDc5MDExMQkvLyBjbWQKKyNkZWZpbmUgQ01EVEhSRUFEXzgwMl8xMV9TRVRfUFJFQU1CTEUgICAgICAgICAgICAgICAweDBENzkwMTAxCS8vIGNtZAorI2RlZmluZSBDTURUSFJFQURfODAyXzExX0NPVU5URVJfTUVBU1VSRQkJCTB4MEQ3OTAxMDIJLy8gY21kCisvLyBhZGQgYnkgam9obmxpLCBmaXggImluX2ludGVycnVwdCIgZXJyb3Igd2hlbiBjYWxsICJNYWNUYWJsZURlbGV0ZUVudHJ5IiBpbiBSeCB0YXNrbGV0CisjZGVmaW5lIENNRFRIUkVBRF9VUERBVEVfUFJPVEVDVAkJCQkJMHgwRDc5MDEwMwkvLyBjbWQKKy8vIGVuZCBqb2hubGkKKworI2RlZmluZSBXUEExQUtNQklUCSAgICAweDAxCisjZGVmaW5lIFdQQTJBS01CSVQJICAgIDB4MDIKKyNkZWZpbmUgV1BBMVBTS0FLTUJJVCAgIDB4MDQKKyNkZWZpbmUgV1BBMlBTS0FLTUJJVCAgIDB4MDgKKyNkZWZpbmUgVEtJUEJJVCAgICAgICAgIDB4MDEKKyNkZWZpbmUgQ0NNUEJJVCAgICAgICAgIDB4MDIKKworCisjZGVmaW5lIFJUMjhYWF9TVEFfRk9SQ0VfV0FLRVVQKHBBZCwgYkZyb21UeCkgXAorICAgIFJUMjh4eFVzYlN0YUFzaWNGb3JjZVdha2V1cChwQWQsIGJGcm9tVHgpOworCisjZGVmaW5lIFJUMjhYWF9TVEFfU0xFRVBfVEhFTl9BVVRPX1dBS0VVUChwQWQsIFRidHROdW1Ub05leHRXYWtlVXApIFwKKyAgICBSVDI4eHhVc2JTdGFBc2ljU2xlZXBUaGVuQXV0b1dha2V1cChwQWQsIFRidHROdW1Ub05leHRXYWtlVXApOworCisjZGVmaW5lIFJUMjhYWF9NTE1FX1JBRElPX09OKHBBZCkgXAorICAgIFJUMjh4eFVzYk1sbWVSYWRpb09uKHBBZCk7CisKKyNkZWZpbmUgUlQyOFhYX01MTUVfUkFESU9fT0ZGKHBBZCkgXAorICAgIFJUMjh4eFVzYk1sbWVSYWRpb09GRihwQWQpOworCisjZW5kaWYgLy9fX1JUMjg3MF9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnQyOHh4LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0Mjh4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MzdjNGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0Mjh4eC5oCkBAIC0wLDAgKzEsMjcyNSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlydDI4eHguaAorCisJQWJzdHJhY3Q6CisJUlQyOHh4IEFTSUMgcmVsYXRlZCBkZWZpbml0aW9uICYgc3RydWN0dXJlcworCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkgIFdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEphbiBMZWUgICAgICAgICAgIEphbi0zLTIwMDYgICAgIGNyZWF0ZWQgZm9yIFJUMjg2MGMKKyovCisKKyNpZm5kZWYJX19SVDI4WFhfSF9fCisjZGVmaW5lCV9fUlQyOFhYX0hfXworCisKKy8vCisvLyBQQ0kgcmVnaXN0ZXJzIC0gYmFzZSBhZGRyZXNzIDB4MDAwMAorLy8KKyNkZWZpbmUgUENJX0NGRwkJCTB4MDAwMAorI2RlZmluZSBQQ0lfRUVDVFJMCQkJMHgwMDA0CisjZGVmaW5lIFBDSV9NQ1VDVFJMCQkJMHgwMDA4CisKKyNkZWZpbmUJT1BUXzE0CQkJMHgxMTQKKwordHlwZWRlZiBpbnQJCQkJTlRTVEFUVVM7CisjZGVmaW5lCVJFVFJZX0xJTUlUICAgICAgICAgICAgIDEwCisjZGVmaW5lIFNUQVRVU19TVUNDRVNTCQkJCTB4MDAKKyNkZWZpbmUgU1RBVFVTX1VOU1VDQ0VTU0ZVTCAJCTB4MDEKKworLy8KKy8vIFNDSC9ETUEgcmVnaXN0ZXJzIC0gYmFzZSBhZGRyZXNzIDB4MDIwMAorLy8KKy8vIElOVF9TT1VSQ0VfQ1NSOiBJbnRlcnJ1cHQgc291cmNlIHJlZ2lzdGVyLiBXcml0ZSBvbmUgdG8gY2xlYXIgY29ycmVzcG9uZGluZyBiaXQKKy8vCisjZGVmaW5lIERNQV9DU1IwICAgICAgMHgyMDAKKyNkZWZpbmUgSU5UX1NPVVJDRV9DU1IgICAgICAweDIwMAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0lOVF9TT1VSQ0VfQ1NSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIgICAgICAgCToxNDsKKwkJVUlOVDMyICAgICAgIAlUeENvaGVyZW50OjE7CisJCVVJTlQzMiAgICAgICAJUnhDb2hlcmVudDoxOworCQlVSU5UMzIgICAgICAgCUdQVGltZXI6MTsKKwkJVUlOVDMyICAgICAgIAlBdXRvV2FrZXVwOjE7Ly9iaXQxNAorCQlVSU5UMzIgICAgICAgCVRYRmlmb1N0YXR1c0ludDoxOy8vRklGTyBTdGF0aXN0aWNzIGlzIGZ1bGwsIHN3IHNob3VsZCByZWFkIDB4MTcxYworCQlVSU5UMzIgICAgICAgCVByZVRCVFQ6MTsKKwkJVUlOVDMyICAgICAgIAlUQlRUSW50OjE7CisJCVVJTlQzMiAgICAgICAJUnhUeENvaGVyZW50OjE7CisJCVVJTlQzMiAgICAgICAJTUNVQ29tbWFuZElOVDoxOworCQlVSU5UMzIgICAgICAgCU1nbXREbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJSGNjYURtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlBYzNEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJQWMyRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUFjMURtYURvbmU6MTsKKwkJVUlOVDMyCQlBYzBEbWFEb25lOjE7CisJCVVJTlQzMgkJUnhEb25lOjE7CisJCVVJTlQzMgkJVHhEZWxheUlOVDoxOwkvL2RlbGF5ZWQgaW50ZXJydXB0LCBub3QgaW50ZXJydXB0IHVudGlsIHNldmVyYWwgaW50IG9yIHRpbWUgbGltaXQgaGl0CisJCVVJTlQzMgkJUnhEZWxheUlOVDoxOyAvL2RlYWx5ZWQgaW50ZXJydXB0CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlJTlRfU09VUkNFX0NTUl9TVFJVQywgKlBJTlRfU09VUkNFX0NTUl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9JTlRfU09VUkNFX0NTUl9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSeERlbGF5SU5UOjE7CisJCVVJTlQzMgkJVHhEZWxheUlOVDoxOworCQlVSU5UMzIJCVJ4RG9uZToxOworCQlVSU5UMzIJCUFjMERtYURvbmU6MTsvLzQKKwkJVUlOVDMyICAgICAgIAlBYzFEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJQWMyRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUFjM0RtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlIY2NhRG1hRG9uZToxOyAvLyBiaXQ3CisJCVVJTlQzMiAgICAgICAJTWdtdERtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlNQ1VDb21tYW5kSU5UOjE7Ly9iaXQgOQorCQlVSU5UMzIgICAgICAgCVJ4VHhDb2hlcmVudDoxOworCQlVSU5UMzIgICAgICAgCVRCVFRJbnQ6MTsKKwkJVUlOVDMyICAgICAgIAlQcmVUQlRUOjE7CisJCVVJTlQzMiAgICAgICAJVFhGaWZvU3RhdHVzSW50OjE7Ly9GSUZPIFN0YXRpc3RpY3MgaXMgZnVsbCwgc3cgc2hvdWxkIHJlYWQgMHgxNzFjCisJCVVJTlQzMiAgICAgICAJQXV0b1dha2V1cDoxOy8vYml0MTQKKwkJVUlOVDMyICAgICAgIAlHUFRpbWVyOjE7CisJCVVJTlQzMiAgICAgICAJUnhDb2hlcmVudDoxOy8vYml0MTYKKwkJVUlOVDMyICAgICAgIAlUeENvaGVyZW50OjE7CisJCVVJTlQzMiAgICAgICAJOjE0OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30gSU5UX1NPVVJDRV9DU1JfU1RSVUMsICpQSU5UX1NPVVJDRV9DU1JfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIElOVF9NQVNLX0NTUjogICBJbnRlcnJ1cHQgTUFTSyByZWdpc3Rlci4gICAxOiB0aGUgaW50ZXJydXB0IGlzIG1hc2sgT0ZGCisvLworI2RlZmluZSBJTlRfTUFTS19DU1IgICAgICAgIDB4MjA0CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfSU5UX01BU0tfQ1NSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIgICAgICAgCVR4Q29oZXJlbnQ6MTsKKwkJVUlOVDMyICAgICAgIAlSeENvaGVyZW50OjE7CisJCVVJTlQzMiAgICAgICAJOjIwOworCQlVSU5UMzIgICAgICAgCU1DVUNvbW1hbmRJTlQ6MTsKKwkJVUlOVDMyICAgICAgIAlNZ210RG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUhjY2FEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJQWMzRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUFjMkRtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlBYzFEbWFEb25lOjE7CisJCVVJTlQzMgkJQWMwRG1hRG9uZToxOworCQlVSU5UMzIJCVJ4RG9uZToxOworCQlVSU5UMzIJCVR4RGVsYXk6MTsKKwkJVUlOVDMyCQlSWERlbGF5X0lOVF9NU0s6MTsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9SU5UX01BU0tfQ1NSX1NUUlVDLCAqUElOVF9NQVNLX0NTUl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9JTlRfTUFTS19DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJUlhEZWxheV9JTlRfTVNLOjE7CisJCVVJTlQzMgkJVHhEZWxheToxOworCQlVSU5UMzIJCVJ4RG9uZToxOworCQlVSU5UMzIJCUFjMERtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlBYzFEbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJQWMyRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCUFjM0RtYURvbmU6MTsKKwkJVUlOVDMyICAgICAgIAlIY2NhRG1hRG9uZToxOworCQlVSU5UMzIgICAgICAgCU1nbXREbWFEb25lOjE7CisJCVVJTlQzMiAgICAgICAJTUNVQ29tbWFuZElOVDoxOworCQlVSU5UMzIgICAgICAgCToyMDsKKwkJVUlOVDMyICAgICAgIAlSeENvaGVyZW50OjE7CisJCVVJTlQzMiAgICAgICAJVHhDb2hlcmVudDoxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30gSU5UX01BU0tfQ1NSX1NUUlVDLCAqUElOVF9NQVNLX0NTUl9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBXUERNQV9HTE9fQ0ZHIAkweDIwOAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1dQRE1BX0dMT19DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICAJSERSX1NFR19MRU46MTY7CisJCVVJTlQzMiAgICAgICAJUlhIZHJTY2F0ZXI6ODsKKwkJVUlOVDMyICAgICAgIAlCaWdFbmRpYW46MTsKKwkJVUlOVDMyICAgICAgIAlFblRYV3JpdGVCYWNrRERPTkU6MTsKKwkJVUlOVDMyICAgICAgIAlXUERNQUJ1cnN0U0laRToyOworCQlVSU5UMzIJCVJ4RE1BQnVzeToxOworCQlVSU5UMzIJCUVuYWJsZVJ4RE1BOjE7CisJCVVJTlQzMgkJVHhETUFCdXN5OjE7CisJCVVJTlQzMgkJRW5hYmxlVHhETUE6MTsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9V1BETUFfR0xPX0NGR19TVFJVQywgKlBXUERNQV9HTE9fQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1dQRE1BX0dMT19DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJRW5hYmxlVHhETUE6MTsKKwkJVUlOVDMyCQlUeERNQUJ1c3k6MTsKKwkJVUlOVDMyCQlFbmFibGVSeERNQToxOworCQlVSU5UMzIJCVJ4RE1BQnVzeToxOworCQlVSU5UMzIgICAgICAgCVdQRE1BQnVyc3RTSVpFOjI7CisJCVVJTlQzMiAgICAgICAJRW5UWFdyaXRlQmFja0RET05FOjE7CisJCVVJTlQzMiAgICAgICAJQmlnRW5kaWFuOjE7CisJCVVJTlQzMiAgICAgICAJUlhIZHJTY2F0ZXI6ODsKKwkJVUlOVDMyICAgICAgIAlIRFJfU0VHX0xFTjoxNjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9IFdQRE1BX0dMT19DRkdfU1RSVUMsICpQV1BETUFfR0xPX0NGR19TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBXUERNQV9SU1RfSURYIAkweDIwYworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1dQRE1BX1JTVF9JRFhfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICAJOjE1OworCQlVSU5UMzIgICAgICAgCVJTVF9EUlhfSURYMDoxOworCQlVSU5UMzIgICAgICAgCXJzdjoxMDsKKwkJVUlOVDMyICAgICAgIAlSU1RfRFRYX0lEWDU6MTsKKwkJVUlOVDMyICAgICAgIAlSU1RfRFRYX0lEWDQ6MTsKKwkJVUlOVDMyCQlSU1RfRFRYX0lEWDM6MTsKKwkJVUlOVDMyCQlSU1RfRFRYX0lEWDI6MTsKKwkJVUlOVDMyCQlSU1RfRFRYX0lEWDE6MTsKKwkJVUlOVDMyCQlSU1RfRFRYX0lEWDA6MTsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9V1BETUFfUlNUX0lEWF9TVFJVQywgKlBXUERNQV9SU1RfSURYX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1dQRE1BX1JTVF9JRFhfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJUlNUX0RUWF9JRFgwOjE7CisJCVVJTlQzMgkJUlNUX0RUWF9JRFgxOjE7CisJCVVJTlQzMgkJUlNUX0RUWF9JRFgyOjE7CisJCVVJTlQzMgkJUlNUX0RUWF9JRFgzOjE7CisJCVVJTlQzMiAgICAgICAJUlNUX0RUWF9JRFg0OjE7CisJCVVJTlQzMiAgICAgICAJUlNUX0RUWF9JRFg1OjE7CisJCVVJTlQzMiAgICAgICAJcnN2OjEwOworCQlVSU5UMzIgICAgICAgCVJTVF9EUlhfSURYMDoxOworCQlVSU5UMzIgICAgICAgCToxNTsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9IFdQRE1BX1JTVF9JRFhfU1RSVUMsICpQV1BETUFfUlNUX0lEWF9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBERUxBWV9JTlRfQ0ZHICAweDAyMTAKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9ERUxBWV9JTlRfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIgICAgICAgCVRYRExZX0lOVF9FTjoxOworCQlVSU5UMzIgICAgICAgCVRYTUFYX1BJTlQ6NzsKKwkJVUlOVDMyICAgICAgIAlUWE1BWF9QVElNRTo4OworCQlVSU5UMzIgICAgICAgCVJYRExZX0lOVF9FTjoxOworCQlVSU5UMzIgICAgICAgCVJYTUFYX1BJTlQ6NzsKKwkJVUlOVDMyCQlSWE1BWF9QVElNRTo4OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK31ERUxBWV9JTlRfQ0ZHX1NUUlVDLCAqUERFTEFZX0lOVF9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfREVMQVlfSU5UX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSWE1BWF9QVElNRTo4OworCQlVSU5UMzIgICAgICAgCVJYTUFYX1BJTlQ6NzsKKwkJVUlOVDMyICAgICAgIAlSWERMWV9JTlRfRU46MTsKKwkJVUlOVDMyICAgICAgIAlUWE1BWF9QVElNRTo4OworCQlVSU5UMzIgICAgICAgCVRYTUFYX1BJTlQ6NzsKKwkJVUlOVDMyICAgICAgIAlUWERMWV9JTlRfRU46MTsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9IERFTEFZX0lOVF9DRkdfU1RSVUMsICpQREVMQVlfSU5UX0NGR19TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBXTU1fQUlGU05fQ0ZHICAgMHgwMjE0CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfQUlGU05fQ1NSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICBSc3Y6MTY7CisJICAgIFVJTlQzMiAgIEFpZnNuMzo0OyAgICAgICAvLyBmb3IgQUNfVk8KKwkgICAgVUlOVDMyICAgQWlmc24yOjQ7ICAgICAgIC8vIGZvciBBQ19WSQorCSAgICBVSU5UMzIgICBBaWZzbjE6NDsgICAgICAgLy8gZm9yIEFDX0JLCisJICAgIFVJTlQzMiAgIEFpZnNuMDo0OyAgICAgICAvLyBmb3IgQUNfQkUKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUFJRlNOX0NTUl9TVFJVQywgKlBBSUZTTl9DU1JfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfQUlGU05fQ1NSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICBBaWZzbjA6NDsgICAgICAgLy8gZm9yIEFDX0JFCisJICAgIFVJTlQzMiAgIEFpZnNuMTo0OyAgICAgICAvLyBmb3IgQUNfQksKKwkgICAgVUlOVDMyICAgQWlmc24yOjQ7ICAgICAgIC8vIGZvciBBQ19WSQorCSAgICBVSU5UMzIgICBBaWZzbjM6NDsgICAgICAgLy8gZm9yIEFDX1ZPCisJICAgIFVJTlQzMiAgIFJzdjoxNjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUFJRlNOX0NTUl9TVFJVQywgKlBBSUZTTl9DU1JfU1RSVUM7CisjZW5kaWYKKy8vCisvLyBDV01JTl9DU1I6IENXbWluIGZvciBlYWNoIEVEQ0EgQUMKKy8vCisjZGVmaW5lIFdNTV9DV01JTl9DRkcgICAweDAyMTgKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9DV01JTl9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgIFJzdjoxNjsKKwkgICAgVUlOVDMyICAgQ3dtaW4zOjQ7ICAgICAgIC8vIGZvciBBQ19WTworCSAgICBVSU5UMzIgICBDd21pbjI6NDsgICAgICAgLy8gZm9yIEFDX1ZJCisJICAgIFVJTlQzMiAgIEN3bWluMTo0OyAgICAgICAvLyBmb3IgQUNfQksKKwkgICAgVUlOVDMyICAgQ3dtaW4wOjQ7ICAgICAgIC8vIGZvciBBQ19CRQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQ1dNSU5fQ1NSX1NUUlVDLCAqUENXTUlOX0NTUl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9DV01JTl9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgIEN3bWluMDo0OyAgICAgICAvLyBmb3IgQUNfQkUKKwkgICAgVUlOVDMyICAgQ3dtaW4xOjQ7ICAgICAgIC8vIGZvciBBQ19CSworCSAgICBVSU5UMzIgICBDd21pbjI6NDsgICAgICAgLy8gZm9yIEFDX1ZJCisJICAgIFVJTlQzMiAgIEN3bWluMzo0OyAgICAgICAvLyBmb3IgQUNfVk8KKwkgICAgVUlOVDMyICAgUnN2OjE2OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQ1dNSU5fQ1NSX1NUUlVDLCAqUENXTUlOX0NTUl9TVFJVQzsKKyNlbmRpZgorCisvLworLy8gQ1dNQVhfQ1NSOiBDV21pbiBmb3IgZWFjaCBFRENBIEFDCisvLworI2RlZmluZSBXTU1fQ1dNQVhfQ0ZHICAgMHgwMjFjCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfQ1dNQVhfQ1NSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICBSc3Y6MTY7CisJICAgIFVJTlQzMiAgIEN3bWF4Mzo0OyAgICAgICAvLyBmb3IgQUNfVk8KKwkgICAgVUlOVDMyICAgQ3dtYXgyOjQ7ICAgICAgIC8vIGZvciBBQ19WSQorCSAgICBVSU5UMzIgICBDd21heDE6NDsgICAgICAgLy8gZm9yIEFDX0JLCisJICAgIFVJTlQzMiAgIEN3bWF4MDo0OyAgICAgICAvLyBmb3IgQUNfQkUKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUNXTUFYX0NTUl9TVFJVQywgKlBDV01BWF9DU1JfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfQ1dNQVhfQ1NSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICBDd21heDA6NDsgICAgICAgLy8gZm9yIEFDX0JFCisJICAgIFVJTlQzMiAgIEN3bWF4MTo0OyAgICAgICAvLyBmb3IgQUNfQksKKwkgICAgVUlOVDMyICAgQ3dtYXgyOjQ7ICAgICAgIC8vIGZvciBBQ19WSQorCSAgICBVSU5UMzIgICBDd21heDM6NDsgICAgICAgLy8gZm9yIEFDX1ZPCisJICAgIFVJTlQzMiAgIFJzdjoxNjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUNXTUFYX0NTUl9TVFJVQywgKlBDV01BWF9DU1JfU1RSVUM7CisjZW5kaWYKKworCisvLworLy8gQUNfVFhPUF9DU1IwOiBBQ19CSy9BQ19CRSBUWE9QIHJlZ2lzdGVyCisvLworI2RlZmluZSBXTU1fVFhPUDBfQ0ZHICAgIDB4MDIyMAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0FDX1RYT1BfQ1NSMF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBYzFUeG9wOyAgICAgICAgLy8gZm9yIEFDX0JFLCBpbiB1bml0IG9mIDMydXMKKwkgICAgVVNIT1JUICBBYzBUeG9wOyAgICAgICAgLy8gZm9yIEFDX0JLLCBpbiB1bml0IG9mIDMydXMKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUFDX1RYT1BfQ1NSMF9TVFJVQywgKlBBQ19UWE9QX0NTUjBfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfQUNfVFhPUF9DU1IwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFjMFR4b3A7ICAgICAgICAvLyBmb3IgQUNfQkssIGluIHVuaXQgb2YgMzJ1cworCSAgICBVU0hPUlQgIEFjMVR4b3A7ICAgICAgICAvLyBmb3IgQUNfQkUsIGluIHVuaXQgb2YgMzJ1cworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQUNfVFhPUF9DU1IwX1NUUlVDLCAqUEFDX1RYT1BfQ1NSMF9TVFJVQzsKKyNlbmRpZgorCisvLworLy8gQUNfVFhPUF9DU1IxOiBBQ19WTy9BQ19WSSBUWE9QIHJlZ2lzdGVyCisvLworI2RlZmluZSBXTU1fVFhPUDFfQ0ZHICAgIDB4MDIyNAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0FDX1RYT1BfQ1NSMV9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBYzNUeG9wOyAgICAgICAgLy8gZm9yIEFDX1ZPLCBpbiB1bml0IG9mIDMydXMKKwkgICAgVVNIT1JUICBBYzJUeG9wOyAgICAgICAgLy8gZm9yIEFDX1ZJLCBpbiB1bml0IG9mIDMydXMKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUFDX1RYT1BfQ1NSMV9TVFJVQywgKlBBQ19UWE9QX0NTUjFfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfQUNfVFhPUF9DU1IxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFjMlR4b3A7ICAgICAgICAvLyBmb3IgQUNfVkksIGluIHVuaXQgb2YgMzJ1cworCSAgICBVU0hPUlQgIEFjM1R4b3A7ICAgICAgICAvLyBmb3IgQUNfVk8sIGluIHVuaXQgb2YgMzJ1cworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQUNfVFhPUF9DU1IxX1NUUlVDLCAqUEFDX1RYT1BfQ1NSMV9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBSSU5HUkVHX0RJRkYJCQkweDEwCisjZGVmaW5lIEdQSU9fQ1RSTF9DRkcgICAgMHgwMjI4CS8vTUFDX0NTUjEzCisjZGVmaW5lIE1DVV9DTURfQ0ZHICAgIDB4MDIyYworI2RlZmluZSBUWF9CQVNFX1BUUjAgICAgIDB4MDIzMAkvL0FDX0JLIGJhc2UgYWRkcmVzcworI2RlZmluZSBUWF9NQVhfQ05UMCAgICAgIDB4MDIzNAorI2RlZmluZSBUWF9DVFhfSURYMCAgICAgICAweDAyMzgKKyNkZWZpbmUgVFhfRFRYX0lEWDAgICAgICAweDAyM2MKKyNkZWZpbmUgVFhfQkFTRV9QVFIxICAgICAweDAyNDAgCS8vQUNfQkUgYmFzZSBhZGRyZXNzCisjZGVmaW5lIFRYX01BWF9DTlQxICAgICAgMHgwMjQ0CisjZGVmaW5lIFRYX0NUWF9JRFgxICAgICAgIDB4MDI0OAorI2RlZmluZSBUWF9EVFhfSURYMSAgICAgIDB4MDI0YworI2RlZmluZSBUWF9CQVNFX1BUUjIgICAgIDB4MDI1MCAJLy9BQ19WSSBiYXNlIGFkZHJlc3MKKyNkZWZpbmUgVFhfTUFYX0NOVDIgICAgICAweDAyNTQKKyNkZWZpbmUgVFhfQ1RYX0lEWDIgICAgICAgMHgwMjU4CisjZGVmaW5lIFRYX0RUWF9JRFgyICAgICAgMHgwMjVjCisjZGVmaW5lIFRYX0JBU0VfUFRSMyAgICAgMHgwMjYwIAkvL0FDX1ZPIGJhc2UgYWRkcmVzcworI2RlZmluZSBUWF9NQVhfQ05UMyAgICAgIDB4MDI2NAorI2RlZmluZSBUWF9DVFhfSURYMyAgICAgICAweDAyNjgKKyNkZWZpbmUgVFhfRFRYX0lEWDMgICAgICAweDAyNmMKKyNkZWZpbmUgVFhfQkFTRV9QVFI0ICAgICAweDAyNzAgCS8vSENDQSBiYXNlIGFkZHJlc3MKKyNkZWZpbmUgVFhfTUFYX0NOVDQgICAgICAweDAyNzQKKyNkZWZpbmUgVFhfQ1RYX0lEWDQgICAgICAgMHgwMjc4CisjZGVmaW5lIFRYX0RUWF9JRFg0ICAgICAgMHgwMjdjCisjZGVmaW5lIFRYX0JBU0VfUFRSNSAgICAgMHgwMjgwIAkvL01HTVQgYmFzZSBhZGRyZXNzCisjZGVmaW5lICBUWF9NQVhfQ05UNSAgICAgMHgwMjg0CisjZGVmaW5lIFRYX0NUWF9JRFg1ICAgICAgIDB4MDI4OAorI2RlZmluZSBUWF9EVFhfSURYNSAgICAgIDB4MDI4YworI2RlZmluZSBUWF9NR01UTUFYX0NOVCAgICAgIFRYX01BWF9DTlQ1CisjZGVmaW5lIFRYX01HTVRDVFhfSURYICAgICAgIFRYX0NUWF9JRFg1CisjZGVmaW5lIFRYX01HTVREVFhfSURYICAgICAgVFhfRFRYX0lEWDUKKyNkZWZpbmUgUlhfQkFTRV9QVFIgICAgIDB4MDI5MCAJLy9SWCBiYXNlIGFkZHJlc3MKKyNkZWZpbmUgUlhfTUFYX0NOVCAgICAgIDB4MDI5NAorI2RlZmluZSBSWF9DUlhfSURYICAgICAgIDB4MDI5OAorI2RlZmluZSBSWF9EUlhfSURYICAgICAgMHgwMjljCisjZGVmaW5lIFVTQl9ETUFfQ0ZHICAgICAgMHgwMmEwCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfVVNCX0RNQV9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgVHhCdXN5OjE7ICAgCS8vVVNCIERNQSBUWCBGU00gYnVzeSAuIGRlYnVnIG9ubHkKKwkgICAgVUlOVDMyICBSeEJ1c3k6MTsgICAgICAgIC8vVVNCIERNQSBSWCBGU00gYnVzeSAuIGRlYnVnIG9ubHkKKwkgICAgVUlOVDMyICBFcG91dFZhbGlkOjY7ICAgICAgICAvL09VVCBlbmRwb2ludCBkYXRhIHZhbGlkLiBkZWJ1ZyBvbmx5CisJICAgIFVJTlQzMiAgVHhCdWxrRW46MTsgICAgICAgIC8vRW5hYmxlIFVTQiBETUEgVHgKKwkgICAgVUlOVDMyICBSeEJ1bGtFbjoxOyAgICAgICAgLy9FbmFibGUgVVNCIERNQSBSeAorCSAgICBVSU5UMzIgIFJ4QnVsa0FnZ0VuOjE7ICAgICAgICAvL0VuYWJsZSBSeCBCdWxrIEFnZ3JlZ2F0aW9uCisJICAgIFVJTlQzMiAgVHhvcEhhbHQ6MTsgICAgICAgIC8vSGFsdCBUWE9QIGNvdW50IGRvd24gd2hlbiBUWCBidWZmZXIgaXMgZnVsbC4KKwkgICAgVUlOVDMyICBUeENsZWFyOjE7ICAgICAgICAvL0NsZWFyIFVTQiBETUEgVFggcGF0aAorCSAgICBVSU5UMzIgIHJzdjoyOworCSAgICBVSU5UMzIgIHBoeWNsZWFyOjE7ICAgICAgICAJCS8vcGh5IHdhdGNoIGRvZyBlbmFibGUuIHdyaXRlIDEKKwkgICAgVUlOVDMyICBSeEJ1bGtBZ2dMbXQ6ODsgICAgICAgIC8vUnggQnVsayBBZ2dyZWdhdGlvbiBMaW1pdCAgaW4gdW5pdCBvZiAxMDI0IGJ5dGVzCisJICAgIFVJTlQzMiAgUnhCdWxrQWdnVE91dDo4OyAgICAgICAgLy9SeCBCdWxrIEFnZ3JlZ2F0aW9uIFRpbWVPdXQgIGluIHVuaXQgb2YgMzNucworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVVNCX0RNQV9DRkdfU1RSVUMsICpQVVNCX0RNQV9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfVVNCX0RNQV9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgUnhCdWxrQWdnVE91dDo4OyAgICAgICAgLy9SeCBCdWxrIEFnZ3JlZ2F0aW9uIFRpbWVPdXQgIGluIHVuaXQgb2YgMzNucworCSAgICBVSU5UMzIgIFJ4QnVsa0FnZ0xtdDo4OyAgICAgICAgLy9SeCBCdWxrIEFnZ3JlZ2F0aW9uIExpbWl0ICBpbiB1bml0IG9mIDI1NiBieXRlcworCSAgICBVSU5UMzIgIHBoeWNsZWFyOjE7ICAgICAgICAJCS8vcGh5IHdhdGNoIGRvZyBlbmFibGUuIHdyaXRlIDEKKwkgICAgVUlOVDMyICByc3Y6MjsKKwkgICAgVUlOVDMyICBUeENsZWFyOjE7ICAgICAgICAvL0NsZWFyIFVTQiBETUEgVFggcGF0aAorCSAgICBVSU5UMzIgIFR4b3BIYWx0OjE7ICAgICAgICAvL0hhbHQgVFhPUCBjb3VudCBkb3duIHdoZW4gVFggYnVmZmVyIGlzIGZ1bGwuCisJICAgIFVJTlQzMiAgUnhCdWxrQWdnRW46MTsgICAgICAgIC8vRW5hYmxlIFJ4IEJ1bGsgQWdncmVnYXRpb24KKwkgICAgVUlOVDMyICBSeEJ1bGtFbjoxOyAgICAgICAgLy9FbmFibGUgVVNCIERNQSBSeAorCSAgICBVSU5UMzIgIFR4QnVsa0VuOjE7ICAgICAgICAvL0VuYWJsZSBVU0IgRE1BIFR4CisJICAgIFVJTlQzMiAgRXBvdXRWYWxpZDo2OyAgICAgICAgLy9PVVQgZW5kcG9pbnQgZGF0YSB2YWxpZAorCSAgICBVSU5UMzIgIFJ4QnVzeToxOyAgICAgICAgLy9VU0IgRE1BIFJYIEZTTSBidXN5CisJICAgIFVJTlQzMiAgVHhCdXN5OjE7ICAgCS8vVVNCIERNQSBUWCBGU00gYnVzeQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVVNCX0RNQV9DRkdfU1RSVUMsICpQVVNCX0RNQV9DRkdfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vICAzICBQQkYgIHJlZ2lzdGVycworLy8KKy8vCisvLyBNb3N0IGFyZSBmb3IgZGVidWcuIERyaXZlciBkb2Vzbid0IHRvdWNoIFBCRiByZWdpc3Rlci4KKyNkZWZpbmUgCVBCRl9TWVNfQ1RSTCAJIDB4MDQwMAorI2RlZmluZSAgICAgUEJGX0NGRyAgICAgICAgICAgICAgICAgMHgwNDA4CisjZGVmaW5lIAlQQkZfTUFYX1BDTlQgCSAweDA0MEMKKyNkZWZpbmUgCVBCRl9DVFJMCSAJMHgwNDEwCisjZGVmaW5lIAlQQkZfSU5UX1NUQQkgMHgwNDE0CisjZGVmaW5lIAlQQkZfSU5UX0VOQQkgMHgwNDE4CisjZGVmaW5lIAlUWFJYUV9QQ05UICAJIDB4MDQzOAorI2RlZmluZSAJUEJGX0RCRyAJIAkgMHgwNDNjCisjZGVmaW5lICAgICBQQkZfQ0FQX0NUUkwgICAgIDB4MDQ0MAorCisKKy8vIGVGdXNlIHJlZ2lzdGVycworI2RlZmluZSBFRlVTRV9DVFJMICAgICAgICAgICAgICAweDA1ODAKKyNkZWZpbmUgRUZVU0VfREFUQTAgICAgICAgICAgICAgMHgwNTkwCisjZGVmaW5lIEVGVVNFX0RBVEExICAgICAgICAgICAgIDB4MDU5NAorI2RlZmluZSBFRlVTRV9EQVRBMiAgICAgICAgICAgICAweDA1OTgKKyNkZWZpbmUgRUZVU0VfREFUQTMgICAgICAgICAgICAgMHgwNTljCisjZGVmaW5lIEVGVVNFX1VTQUdFX01BUF9TVEFSVCAgIDB4MmQwCisjZGVmaW5lIEVGVVNFX1VTQUdFX01BUF9FTkQgICAgIDB4MmZjCisjZGVmaW5lIEVGVVNFX1RBRyAgICAgICAgICAgICAgIDB4MmZlCisjZGVmaW5lIEVGVVNFX1VTQUdFX01BUF9TSVpFICAgIDQ1CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9FRlVTRV9DVFJMX1NUUlVDIHsKKwlzdHJ1Y3QJeworCQlVSU5UMzIgICAgICAgICAgICBTRUxfRUZVU0U6MTsKKwkJVUlOVDMyICAgICAgICAgICAgRUZTUk9NX0tJQ0s6MTsKKwkJVUlOVDMyICAgICAgICAgICAgUkVTRVJWRUQ6NDsKKwkJVUlOVDMyICAgICAgICAgICAgRUZTUk9NX0FJTjoxMDsKKwkJVUlOVDMyICAgICAgICAgICAgRUZTUk9NX0xET19PTl9USU1FOjI7CisJCVVJTlQzMiAgICAgICAgICAgIEVGU1JPTV9MRE9fT0ZGX1RJTUU6NjsKKwkJVUlOVDMyICAgICAgICAgICAgRUZTUk9NX01PREU6MjsKKwkJVUlOVDMyICAgICAgICAgICAgRUZTUk9NX0FPVVQ6NjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUVGVVNFX0NUUkxfU1RSVUMsICpQRUZVU0VfQ1RSTF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9FRlVTRV9DVFJMX1NUUlVDIHsKKwlzdHJ1Y3QJeworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fQU9VVDo2OworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fTU9ERToyOworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fTERPX09GRl9USU1FOjY7CisJCVVJTlQzMiAgICAgICAgICAgIEVGU1JPTV9MRE9fT05fVElNRToyOworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fQUlOOjEwOworCQlVSU5UMzIgICAgICAgICAgICBSRVNFUlZFRDo0OworCQlVSU5UMzIgICAgICAgICAgICBFRlNST01fS0lDSzoxOworCQlVSU5UMzIgICAgICAgICAgICBTRUxfRUZVU0U6MTsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUVGVVNFX0NUUkxfU1RSVUMsICpQRUZVU0VfQ1RSTF9TVFJVQzsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisKKyNkZWZpbmUgTERPX0NGRzAgCQkJCTB4MDVkNAorI2RlZmluZSBHUElPX1NXSVRDSAkJCQkweDA1ZGMKKworLy8KKy8vICA0ICBNQUMgIHJlZ2lzdGVycworLy8KKy8vCisvLyAgNC4xIE1BQyBTWVNURU0gIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzIChvZmZzZXQ6MHgxMDAwKQorLy8KKyNkZWZpbmUgTUFDX0NTUjAgICAgICAgICAgICAweDEwMDAKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9BU0lDX1ZFUl9JRF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBU0lDVmVyOyAgICAgICAgLy8gdmVyc2lvbiA6IDI4NjAKKwkgICAgVVNIT1JUICBBU0lDUmV2OyAgICAgICAgLy8gcmV2ZXJzaW9uICA6IDAKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUFTSUNfVkVSX0lEX1NUUlVDLCAqUEFTSUNfVkVSX0lEX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0FTSUNfVkVSX0lEX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFTSUNSZXY7ICAgICAgICAvLyByZXZlcnNpb24gIDogMAorCSAgICBVU0hPUlQgIEFTSUNWZXI7ICAgICAgICAvLyB2ZXJzaW9uIDogMjg2MAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQVNJQ19WRVJfSURfU1RSVUMsICpQQVNJQ19WRVJfSURfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgTUFDX1NZU19DVFJMICAgICAgICAgICAgMHgxMDA0CQkvL01BQ19DU1IxCisjZGVmaW5lIE1BQ19BRERSX0RXMCAgICAgICAgICAgIAkJMHgxMDA4CQkvLyBNQUMgQUREUiBEVzAKKyNkZWZpbmUgTUFDX0FERFJfRFcxICAgICAgICAgICAJCSAweDEwMGMJCS8vIE1BQyBBRERSIERXMQorLy8KKy8vIE1BQ19DU1IyOiBTVEEgTUFDIHJlZ2lzdGVyIDAKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfTUFDX0RXMF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJCUJ5dGUzOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAzCisJCVVDSEFSCQlCeXRlMjsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMgorCQlVQ0hBUgkJQnl0ZTE7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDEKKwkJVUNIQVIJCUJ5dGUwOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAwCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlNQUNfRFcwX1NUUlVDLCAqUE1BQ19EVzBfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfTUFDX0RXMF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJCUJ5dGUwOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAwCisJCVVDSEFSCQlCeXRlMTsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMQorCQlVQ0hBUgkJQnl0ZTI7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDIKKwkJVUNIQVIJCUJ5dGUzOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAzCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlNQUNfRFcwX1NUUlVDLCAqUE1BQ19EVzBfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIE1BQ19DU1IzOiBTVEEgTUFDIHJlZ2lzdGVyIDEKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfTUFDX0RXMV9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJCVJzdmQxOworCQlVQ0hBUgkJVTJNZU1hc2s7CisJCVVDSEFSCQlCeXRlNTsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgNQorCQlVQ0hBUgkJQnl0ZTQ7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDQKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CU1BQ19EVzFfU1RSVUMsICpQTUFDX0RXMV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9NQUNfRFcxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJQnl0ZTQ7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDQKKwkJVUNIQVIJCUJ5dGU1OwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSA1CisJCVVDSEFSCQlVMk1lTWFzazsKKwkJVUNIQVIJCVJzdmQxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JTUFDX0RXMV9TVFJVQywgKlBNQUNfRFcxX1NUUlVDOworI2VuZGlmCisKKyNkZWZpbmUgTUFDX0JTU0lEX0RXMCAgICAgICAgICAgIAkJMHgxMDEwCQkvLyBNQUMgQlNTSUQgRFcwCisjZGVmaW5lIE1BQ19CU1NJRF9EVzEgICAgICAgICAgICAJCTB4MTAxNAkJLy8gTUFDIEJTU0lEIERXMQorCisvLworLy8gTUFDX0NTUjU6IEJTU0lEIHJlZ2lzdGVyIDEKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfTUFDX0NTUjVfU1RSVUMJeworCXN0cnVjdAl7CisJCVVTSE9SVAkJUnN2ZDoxMTsKKwkJVVNIT1JUCQlNQnNzQmNuTnVtOjM7CisJCVVTSE9SVAkJQnNzSWRNb2RlOjI7IC8vIDA6IG9uZSBCU1NJRCwgMTA6IDQgQlNTSUQsICAwMTogMiBCU1NJRCAsIDExOiA4QlNTSUQKKwkJVUNIQVIJCUJ5dGU1OwkJIC8vIEJTU0lEIGJ5dGUgNQorCQlVQ0hBUgkJQnl0ZTQ7CQkgLy8gQlNTSUQgYnl0ZSA0CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlNQUNfQ1NSNV9TVFJVQywgKlBNQUNfQ1NSNV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9NQUNfQ1NSNV9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJCUJ5dGU0OwkJIC8vIEJTU0lEIGJ5dGUgNAorCQlVQ0hBUgkJQnl0ZTU7CQkgLy8gQlNTSUQgYnl0ZSA1CisJCVVTSE9SVCAgICAgIAlCc3NJZE1hc2s6MjsgLy8gMDogb25lIEJTU0lELCAxMDogNCBCU1NJRCwgIDAxOiAyIEJTU0lEICwgMTE6IDhCU1NJRAorCQlVU0hPUlQJCU1Cc3NCY25OdW06MzsKKwkJVVNIT1JUCQlSc3ZkOjExOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JTUFDX0NTUjVfU1RSVUMsICpQTUFDX0NTUjVfU1RSVUM7CisjZW5kaWYKKworI2RlZmluZSBNQVhfTEVOX0NGRyAgICAgICAgICAgICAgMHgxMDE4CQkvLyBydDI4NjBiIG1heCAxNmsgYnl0ZXMuIGJpdDEyOjEzIE1heGltdW0gUFNEVSBsZW5ndGggKHBvd2VyIGZhY3RvcikgMDoyXjEzLCAxOjJeMTQsIDI6Ml4xNSwgMzoyXjE2CisjZGVmaW5lIEJCUF9DU1JfQ0ZHICAgICAgICAgICAgCQkweDEwMWMJCS8vCisvLworLy8gQkJQX0NTUl9DRkc6IEJCUCBzZXJpYWwgY29udHJvbCByZWdpc3RlcgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9CQlBfQ1NSX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQk6MTI7CisJCVVJTlQzMgkJQkJQX1JXX01PREU6MTsJCS8vIDA6IHVzZSBzZXJpYWwgbW9kZSAgMTpwYXJhbGxlbAorCQlVSU5UMzIJCUJCUF9QQVJfRFVSOjE7CQkgICAgLy8gMDogNCBNQUMgY2xvY2sgY3ljbGVzICAxOiA4IE1BQyBjbG9jayBjeWNsZXMKKwkJVUlOVDMyCQlCdXN5OjE7CQkJCS8vIDE6IEFTSUMgaXMgYnVzeSBleGVjdXRlIEJCUCBwcm9ncmFtbWluZy4KKwkJVUlOVDMyCQlmUmVhZDoxOwkJICAgIC8vIDA6IFdyaXRlCUJCUCwgMToJUmVhZCBCQlAKKwkJVUlOVDMyCQlSZWdOdW06ODsJCQkvLyBTZWxlY3RlZAlCQlAJcmVnaXN0ZXIKKwkJVUlOVDMyCQlWYWx1ZTo4OwkJCS8vIFJlZ2lzdGVyCXZhbHVlIHRvIHByb2dyYW0gaW50byBCQlAKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUJCUF9DU1JfQ0ZHX1NUUlVDLCAqUEJCUF9DU1JfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0JCUF9DU1JfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVZhbHVlOjg7CQkJLy8gUmVnaXN0ZXIJdmFsdWUgdG8gcHJvZ3JhbSBpbnRvIEJCUAorCQlVSU5UMzIJCVJlZ051bTo4OwkJCS8vIFNlbGVjdGVkCUJCUAlyZWdpc3RlcgorCQlVSU5UMzIJCWZSZWFkOjE7CQkgICAgLy8gMDogV3JpdGUJQkJQLCAxOglSZWFkIEJCUAorCQlVSU5UMzIJCUJ1c3k6MTsJCQkJLy8gMTogQVNJQyBpcyBidXN5IGV4ZWN1dGUgQkJQIHByb2dyYW1taW5nLgorCQlVSU5UMzIJCUJCUF9QQVJfRFVSOjE7CQkgICAgIC8vIDA6IDQgTUFDIGNsb2NrIGN5Y2xlcyAgMTogOCBNQUMgY2xvY2sgY3ljbGVzCisJCVVJTlQzMgkJQkJQX1JXX01PREU6MTsJCS8vIDA6IHVzZSBzZXJpYWwgbW9kZSAgMTpwYXJhbGxlbAorCQlVSU5UMzIJCToxMjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUJCUF9DU1JfQ0ZHX1NUUlVDLCAqUEJCUF9DU1JfQ0ZHX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFJGX0NTUl9DRkcwICAgICAgICAgICAgCQkweDEwMjAKKy8vCisvLyBSRl9DU1JfQ0ZHOiBSRiBjb250cm9sIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1JGX0NTUl9DRkcwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCUJ1c3k6MTsJCSAgICAvLyAwOiBpZGxlIDE6IDhidXN5CisJCVVJTlQzMgkJU2VsOjE7CQkJCS8vIDA6UkZfTEUwIGFjdGl2YXRlICAxOlJGX0xFMSBhY3RpdmF0ZQorCQlVSU5UMzIJCVN0YW5kYnlNb2RlOjE7CQkgICAgLy8gMDogaGlnaCB3aGVuIHN0YW5kIGJ5IDE6CWxvdyB3aGVuIHN0YW5kYnkKKwkJVUlOVDMyCQliaXR3aWR0aDo1OwkJCS8vIFNlbGVjdGVkCUJCUAlyZWdpc3RlcgorCQlVSU5UMzIJCVJlZ0lkQW5kQ29udGVudDoyNDsJCQkvLyBSZWdpc3Rlcgl2YWx1ZSB0byBwcm9ncmFtIGludG8gQkJQCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSRl9DU1JfQ0ZHMF9TVFJVQywgKlBSRl9DU1JfQ0ZHMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9SRl9DU1JfQ0ZHMF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSZWdJZEFuZENvbnRlbnQ6MjQ7CQkJLy8gUmVnaXN0ZXIJdmFsdWUgdG8gcHJvZ3JhbSBpbnRvIEJCUAorCQlVSU5UMzIJCWJpdHdpZHRoOjU7CQkJLy8gU2VsZWN0ZWQJQkJQCXJlZ2lzdGVyCisJCVVJTlQzMgkJU3RhbmRieU1vZGU6MTsJCSAgICAvLyAwOiBoaWdoIHdoZW4gc3RhbmQgYnkgMToJbG93IHdoZW4gc3RhbmRieQorCQlVSU5UMzIJCVNlbDoxOwkJCQkvLyAwOlJGX0xFMCBhY3RpdmF0ZSAgMTpSRl9MRTEgYWN0aXZhdGUKKwkJVUlOVDMyCQlCdXN5OjE7CQkgICAgLy8gMDogaWRsZSAxOiA4YnVzeQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUkZfQ1NSX0NGRzBfU1RSVUMsICpQUkZfQ1NSX0NGRzBfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgUkZfQ1NSX0NGRzEgICAgICAgICAgIAkJMHgxMDI0CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfUkZfQ1NSX0NGRzFfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJcnN2Ojc7CQkgICAgLy8gMDogaWRsZSAxOiA4YnVzeQorCQlVSU5UMzIJCVJGR2FwOjU7CQkJLy8gR2FwIGJldHdlZW4gQkJfQ09OVFJPTF9SRiBhbmQgUkZfTEUuIDA6IDMgc3lzdGVtIGNsb2NrIGN5Y2xlICgzNy41dXNlYykgMTogNSBzeXN0ZW0gY2xvY2sgY3ljbGUgKDYyLjV1c2VjKQorCQlVSU5UMzIJCVJlZ0lkQW5kQ29udGVudDoyNDsJCQkvLyBSZWdpc3Rlcgl2YWx1ZSB0byBwcm9ncmFtIGludG8gQkJQCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSRl9DU1JfQ0ZHMV9TVFJVQywgKlBSRl9DU1JfQ0ZHMV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9SRl9DU1JfQ0ZHMV9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSZWdJZEFuZENvbnRlbnQ6MjQ7CQkJLy8gUmVnaXN0ZXIJdmFsdWUgdG8gcHJvZ3JhbSBpbnRvIEJCUAorCQlVSU5UMzIJCVJGR2FwOjU7CQkJLy8gR2FwIGJldHdlZW4gQkJfQ09OVFJPTF9SRiBhbmQgUkZfTEUuIDA6IDMgc3lzdGVtIGNsb2NrIGN5Y2xlICgzNy41dXNlYykgMTogNSBzeXN0ZW0gY2xvY2sgY3ljbGUgKDYyLjV1c2VjKQorCQlVSU5UMzIJCXJzdjo3OwkJICAgIC8vIDA6IGlkbGUgMTogOGJ1c3kKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVJGX0NTUl9DRkcxX1NUUlVDLCAqUFJGX0NTUl9DRkcxX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFJGX0NTUl9DRkcyICAgICAgICAgICAJCTB4MTAyOAkJLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9SRl9DU1JfQ0ZHMl9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlyc3Y6ODsJCSAgICAvLyAwOiBpZGxlIDE6IDhidXN5CisJCVVJTlQzMgkJUmVnSWRBbmRDb250ZW50OjI0OwkJCS8vIFJlZ2lzdGVyCXZhbHVlIHRvIHByb2dyYW0gaW50byBCQlAKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVJGX0NTUl9DRkcyX1NUUlVDLCAqUFJGX0NTUl9DRkcyX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1JGX0NTUl9DRkcyX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVJlZ0lkQW5kQ29udGVudDoyNDsJCQkvLyBSZWdpc3Rlcgl2YWx1ZSB0byBwcm9ncmFtIGludG8gQkJQCisJCVVJTlQzMgkJcnN2Ojg7CQkgICAgLy8gMDogaWRsZSAxOiA4YnVzeQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUkZfQ1NSX0NGRzJfU1RSVUMsICpQUkZfQ1NSX0NGRzJfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgTEVEX0NGRyAgICAgICAgICAgCQkweDEwMmMJCS8vICBNQUNfQ1NSMTQKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9MRURfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCToxOworCQlVSU5UMzIJCUxlZFBvbGFyOjE7CQkJLy8gTGVkIFBvbGFyaXR5LiAgMDogYWN0aXZlIGxvdzE6IGFjdGl2ZSBoaWdoCisJCVVJTlQzMgkJWUxlZE1vZGU6MjsJCQkvLyB5ZWxsb3cgTGVkIE1vZGUKKwkJVUlOVDMyCQlHTGVkTW9kZToyOwkJCS8vIGdyZWVuIExlZCBNb2RlCisJCVVJTlQzMgkJUkxlZE1vZGU6MjsJCQkvLyByZWQgTGVkIE1vZGUgICAgMDogb2ZmMTogYmxpbmtpbmcgdXBvbiBUWDI6IHBlcmlvZGljIHNsb3cgYmxpbmtpbmczOiBhbHdheXMgb24KKwkJVUlOVDMyCQlyc3Y6MjsKKwkJVUlOVDMyCQlTbG93QmxpbmtQZXJpb2Q6NjsJCQkvLyBzbG93IGJsaW5raW5nIHBlcmlvZC4gdW5pdDoxbXMKKwkJVUlOVDMyCQlPZmZQZXJpb2Q6ODsJCQkvLyBibGlua2luZyBvZmYgcGVyaW9kIHVuaXQgMW1zCisJCVVJTlQzMgkJT25QZXJpb2Q6ODsJCQkvLyBibGlua2luZyBvbiBwZXJpb2QgdW5pdCAxbXMKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUxFRF9DRkdfU1RSVUMsICpQTEVEX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9MRURfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCU9uUGVyaW9kOjg7CQkJLy8gYmxpbmtpbmcgb24gcGVyaW9kIHVuaXQgMW1zCisJCVVJTlQzMgkJT2ZmUGVyaW9kOjg7CQkJLy8gYmxpbmtpbmcgb2ZmIHBlcmlvZCB1bml0IDFtcworCQlVSU5UMzIJCVNsb3dCbGlua1BlcmlvZDo2OwkJCS8vIHNsb3cgYmxpbmtpbmcgcGVyaW9kLiB1bml0OjFtcworCQlVSU5UMzIJCXJzdjoyOworCQlVSU5UMzIJCVJMZWRNb2RlOjI7CQkJLy8gcmVkIExlZCBNb2RlICAgIDA6IG9mZjE6IGJsaW5raW5nIHVwb24gVFgyOiBwZXJpb2RpYyBzbG93IGJsaW5raW5nMzogYWx3YXlzIG9uCisJCVVJTlQzMgkJR0xlZE1vZGU6MjsJCQkvLyBncmVlbiBMZWQgTW9kZQorCQlVSU5UMzIJCVlMZWRNb2RlOjI7CQkJLy8geWVsbG93IExlZCBNb2RlCisJCVVJTlQzMgkJTGVkUG9sYXI6MTsJCQkvLyBMZWQgUG9sYXJpdHkuICAwOiBhY3RpdmUgbG93MTogYWN0aXZlIGhpZ2gKKwkJVUlOVDMyCQk6MTsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUxFRF9DRkdfU1RSVUMsICpQTEVEX0NGR19TVFJVQzsKKyNlbmRpZgorLy8KKy8vICA0LjIgTUFDIFRJTUlORyAgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKG9mZnNldDoweDExMDApCisvLworI2RlZmluZSBYSUZTX1RJTUVfQ0ZHICAgICAgICAgICAgIDB4MTEwMAkJIC8vIE1BQ19DU1I4ICBNQUNfQ1NSOQorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0lGU19TTE9UX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICByc3Y6MjsKKwkgICAgVUlOVDMyICBCQlJ4ZW5kRW5hYmxlOjE7ICAgICAgICAvLyAgcmVmZXJlbmNlIFJYRU5EIHNpZ25hbCB0byBiZWdpbiBYSUZTIGRlZmVyCisJICAgIFVJTlQzMiAgRUlGUzo5OyAgICAgICAgLy8gIHVuaXQgMXVzCisJICAgIFVJTlQzMiAgT2ZkbVhpZnNUaW1lOjQ7ICAgICAgICAvL09GRE0gU0lGUy4gdW5pdCAxdXMuIEFwcGxpZWQgYWZ0ZXIgT0ZETSBSWCB3aGVuIE1BQyBkb2Vzbid0IHJlZmVyZW5jZSBCQlAgc2lnbmFsIEJCUlhFTkQKKwkgICAgVUlOVDMyICBPZmRtU2lmc1RpbWU6ODsgICAgICAgIC8vICB1bml0IDF1cy4gQXBwbGllZCBhZnRlciBPRkRNIFJYL1RYCisJICAgIFVJTlQzMiAgQ2NrbVNpZnNUaW1lOjg7ICAgICAgICAvLyAgdW5pdCAxdXMuIEFwcGxpZWQgYWZ0ZXIgQ0NLIFJYL1RYCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlJRlNfU0xPVF9DRkdfU1RSVUMsICpQSUZTX1NMT1RfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0lGU19TTE9UX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICBDY2ttU2lmc1RpbWU6ODsgICAgICAgIC8vICB1bml0IDF1cy4gQXBwbGllZCBhZnRlciBDQ0sgUlgvVFgKKwkgICAgVUlOVDMyICBPZmRtU2lmc1RpbWU6ODsgICAgICAgIC8vICB1bml0IDF1cy4gQXBwbGllZCBhZnRlciBPRkRNIFJYL1RYCisJICAgIFVJTlQzMiAgT2ZkbVhpZnNUaW1lOjQ7ICAgICAgICAvL09GRE0gU0lGUy4gdW5pdCAxdXMuIEFwcGxpZWQgYWZ0ZXIgT0ZETSBSWCB3aGVuIE1BQyBkb2Vzbid0IHJlZmVyZW5jZSBCQlAgc2lnbmFsIEJCUlhFTkQKKwkgICAgVUlOVDMyICBFSUZTOjk7ICAgICAgICAvLyAgdW5pdCAxdXMKKwkgICAgVUlOVDMyICBCQlJ4ZW5kRW5hYmxlOjE7ICAgICAgICAvLyAgcmVmZXJlbmNlIFJYRU5EIHNpZ25hbCB0byBiZWdpbiBYSUZTIGRlZmVyCisJICAgIFVJTlQzMiAgcnN2OjI7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlJRlNfU0xPVF9DRkdfU1RSVUMsICpQSUZTX1NMT1RfQ0ZHX1NUUlVDOworI2VuZGlmCisKKyNkZWZpbmUgQktPRkZfU0xPVF9DRkcgICAgICAgICAgICAgMHgxMTA0CQkgLy8gIG1hY19jc3I5IGxhc3QgOCBiaXRzCisjZGVmaW5lIE5BVl9USU1FX0NGRyAgICAgICAgICAgICAweDExMDgJCSAvLyBOQVYgIChNQUNfQ1NSMTUpCisjZGVmaW5lIENIX1RJTUVfQ0ZHICAgICAgICAgICAgIDB4MTEwQwkJIAkvLyBDb3VudCBhcyBjaGFubmVsIGJ1c3kKKyNkZWZpbmUgUEJGX0xJRkVfVElNRVIgICAgICAgICAgICAgMHgxMTEwCQkgLy9UWC9SWCBNUERVIHRpbWVzdGFtcCB0aW1lciAoZnJlZSBydW4pVW5pdDogMXVzCisjZGVmaW5lIEJDTl9USU1FX0NGRyAgICAgICAgICAgICAweDExMTQJCSAvLyBUWFJYX0NTUjkKKworI2RlZmluZSBCQ05fT0ZGU0VUMAkJCQkweDA0MkMKKyNkZWZpbmUgQkNOX09GRlNFVDEJCQkJMHgwNDMwCisKKy8vCisvLyBCQ05fVElNRV9DRkcgOiBTeW5jaHJvbml6YXRpb24gY29udHJvbCByZWdpc3RlcgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9CQ05fVElNRV9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJVHhUaW1lc3RhbXBDb21wZW5zYXRlOjg7CisgICAgICAgIFVJTlQzMiAgICAgICA6MzsKKwkJVUlOVDMyCQliQmVhY29uR2VuOjE7CQkvLyBFbmFibGUgYmVhY29uIGdlbmVyYXRvcgorICAgICAgICBVSU5UMzIgICAgICAgYlRCVFRFbmFibGU6MTsKKwkJVUlOVDMyCQlUc2ZTeW5jTW9kZToyOwkJLy8gRW5hYmxlIFRTRiBzeW5jLCAwMDogZGlzYWJsZSwgMDE6IGluZnJhIG1vZGUsIDEwOiBhZC1ob2MgbW9kZQorCQlVSU5UMzIJCWJUc2ZUaWNraW5nOjE7CQkvLyBFbmFibGUgVFNGIGF1dG8gY291bnRpbmcKKwkJVUlOVDMyICAgICAgIEJlYWNvbkludGVydmFsOjE2OyAgLy8gaW4gdW5pdCBvZiAxLzE2IFRVCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlCQ05fVElNRV9DRkdfU1RSVUMsICpQQkNOX1RJTUVfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0JDTl9USU1FX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyICAgICAgIEJlYWNvbkludGVydmFsOjE2OyAgLy8gaW4gdW5pdCBvZiAxLzE2IFRVCisJCVVJTlQzMgkJYlRzZlRpY2tpbmc6MTsJCS8vIEVuYWJsZSBUU0YgYXV0byBjb3VudGluZworCQlVSU5UMzIJCVRzZlN5bmNNb2RlOjI7CQkvLyBFbmFibGUgVFNGIHN5bmMsIDAwOiBkaXNhYmxlLCAwMTogaW5mcmEgbW9kZSwgMTA6IGFkLWhvYyBtb2RlCisgICAgICAgIFVJTlQzMiAgICAgICBiVEJUVEVuYWJsZToxOworCQlVSU5UMzIJCWJCZWFjb25HZW46MTsJCS8vIEVuYWJsZSBiZWFjb24gZ2VuZXJhdG9yCisgICAgICAgIFVJTlQzMiAgICAgICA6MzsKKwkJVUlOVDMyCQlUeFRpbWVzdGFtcENvbXBlbnNhdGU6ODsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUJDTl9USU1FX0NGR19TVFJVQywgKlBCQ05fVElNRV9DRkdfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVEJUVF9TWU5DX0NGRyAgICAgICAgICAgIDB4MTExOCAgCQkvLyB0eHJ4X2NzcjEwCisjZGVmaW5lIFRTRl9USU1FUl9EVzAgICAgICAgICAgICAgMHgxMTFDICAJCS8vIExvY2FsIFRTRiB0aW1lciBsc2IgMzIgYml0cy4gUmVhZC1vbmx5CisjZGVmaW5lIFRTRl9USU1FUl9EVzEgICAgICAgICAgICAgMHgxMTIwICAJCS8vIG1zYiAzMiBiaXRzLiBSZWFkLW9ubHkuCisjZGVmaW5lIFRCVFRfVElNRVIgICAgICAgICAgICAgCTB4MTEyNCAgCQkvLyBUSW1lciByZW1haW5zIHRpbGwgbmV4dCBUQlRULiBSZWFkLW9ubHkuICBUWFJYX0NTUjE0CisjZGVmaW5lIElOVF9USU1FUl9DRkcgICAgICAgICAgICAgIAkweDExMjggIAkJLy8KKyNkZWZpbmUgSU5UX1RJTUVSX0VOICAgICAgICAgICAgIAkweDExMmMgIAkJLy8gIEdQLXRpbWVyIGFuZCBwcmUtdGJ0dCBJbnQgZW5hYmxlCisjZGVmaW5lIENIX0lETEVfU1RBICAgICAgICAgICAgICAJMHgxMTMwICAJCS8vICBjaGFubmVsIGlkbGUgdGltZQorI2RlZmluZSBDSF9CVVNZX1NUQSAgICAgICAgICAgICAgCTB4MTEzNCAgCQkvLyAgY2hhbm5sZSBidXN5IHRpbWUKKy8vCisvLyAgNC4yIE1BQyBQT1dFUiAgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKG9mZnNldDoweDEyMDApCisvLworI2RlZmluZSBNQUNfU1RBVFVTX0NGRyAgICAgICAgICAgICAweDEyMDAJCSAvLyBvbGQgTUFDX0NTUjEyCisjZGVmaW5lIFBXUl9QSU5fQ0ZHICAgICAgICAgICAgIDB4MTIwNAkJIC8vIG9sZCBNQUNfQ1NSMTIKKyNkZWZpbmUgQVVUT19XQUtFVVBfQ0ZHICAgICAgICAgICAgIDB4MTIwOAkJIC8vIG9sZCBNQUNfQ1NSMTAKKy8vCisvLyBBVVRPX1dBS0VVUF9DRkc6IE1hbnVhbCBwb3dlciBjb250cm9sIC8gc3RhdHVzIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0FVVE9fV0FLRVVQX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCToxNjsKKwkJVUlOVDMyCQlFbmFibGVBdXRvV2FrZXVwOjE7CS8vIDA6c2xlZXAsIDE6YXdha2UKKwkJVUlOVDMyICAgICAgIE51bW9mU2xlZXBpbmdUYnR0Ojc7ICAgICAgICAgIC8vIEZvcmNlV2FrZSBoYXMgaGlnaCBwcml2aWxlZ2UgdGhhbiBQdXRUb1NsZWVwIHdoZW4gYm90aCBzZXQKKwkJVUlOVDMyICAgICAgIEF1dG9MZWFkVGltZTo4OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JQVVUT19XQUtFVVBfU1RSVUMsICpQQVVUT19XQUtFVVBfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfQVVUT19XQUtFVVBfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICBBdXRvTGVhZFRpbWU6ODsKKwkJVUlOVDMyICAgICAgIE51bW9mU2xlZXBpbmdUYnR0Ojc7ICAgICAgICAgIC8vIEZvcmNlV2FrZSBoYXMgaGlnaCBwcml2aWxlZ2UgdGhhbiBQdXRUb1NsZWVwIHdoZW4gYm90aCBzZXQKKwkJVUlOVDMyCQlFbmFibGVBdXRvV2FrZXVwOjE7CS8vIDA6c2xlZXAsIDE6YXdha2UKKwkJVUlOVDMyCQk6MTY7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlBVVRPX1dBS0VVUF9TVFJVQywgKlBBVVRPX1dBS0VVUF9TVFJVQzsKKyNlbmRpZgorLy8KKy8vICA0LjMgTUFDIFRYICBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAob2Zmc2V0OjB4MTMwMCkKKy8vCisKKyNkZWZpbmUgRURDQV9BQzBfQ0ZHCTB4MTMwMAkJLy9BQ19UWE9QX0NTUjAgMHgzNDc0CisjZGVmaW5lIEVEQ0FfQUMxX0NGRwkweDEzMDQKKyNkZWZpbmUgRURDQV9BQzJfQ0ZHCTB4MTMwOAorI2RlZmluZSBFRENBX0FDM19DRkcJMHgxMzBjCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfRURDQV9BQ19DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgOjEyOyAgICAgICAgLy8KKwkgICAgVUlOVDMyICBDd21heDo0OyAgICAgICAgLy91bml0IHBvd2VyIG9mIDIKKwkgICAgVUlOVDMyICBDd21pbjo0OyAgICAgICAgLy8KKwkgICAgVUlOVDMyICBBaWZzbjo0OyAgICAgICAgLy8gIyBvZiBzbG90IHRpbWUKKwkgICAgVUlOVDMyICBBY1R4b3A6ODsgICAgICAgIC8vICBpbiB1bml0IG9mIDMydXMKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUVEQ0FfQUNfQ0ZHX1NUUlVDLCAqUEVEQ0FfQUNfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0VEQ0FfQUNfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgIEFjVHhvcDo4OyAgICAgICAgLy8gIGluIHVuaXQgb2YgMzJ1cworCSAgICBVSU5UMzIgIEFpZnNuOjQ7ICAgICAgICAvLyAjIG9mIHNsb3QgdGltZQorCSAgICBVSU5UMzIgIEN3bWluOjQ7ICAgICAgICAvLworCSAgICBVSU5UMzIgIEN3bWF4OjQ7ICAgICAgICAvL3VuaXQgcG93ZXIgb2YgMgorCSAgICBVSU5UMzIgIDoxMjsgICAgICAgLy8KKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUVEQ0FfQUNfQ0ZHX1NUUlVDLCAqUEVEQ0FfQUNfQ0ZHX1NUUlVDOworI2VuZGlmCisKKyNkZWZpbmUgRURDQV9USURfQUNfTUFQCTB4MTMxMAorI2RlZmluZSBUWF9QV1JfQ0ZHXzAJMHgxMzE0CisjZGVmaW5lIFRYX1BXUl9DRkdfMQkweDEzMTgKKyNkZWZpbmUgVFhfUFdSX0NGR18yCTB4MTMxQworI2RlZmluZSBUWF9QV1JfQ0ZHXzMJMHgxMzIwCisjZGVmaW5lIFRYX1BXUl9DRkdfNAkweDEzMjQKKyNkZWZpbmUgVFhfUElOX0NGRwkJMHgxMzI4CisjZGVmaW5lIFRYX0JBTkRfQ0ZHCTB4MTMyYwkJLy8gMHgxIHVzZSB1cHBlciAyME1Iei4gMCBqdXNlIGxvd2VyIDIwTUh6CisjZGVmaW5lIFRYX1NXX0NGRzAJCTB4MTMzMAorI2RlZmluZSBUWF9TV19DRkcxCQkweDEzMzQKKyNkZWZpbmUgVFhfU1dfQ0ZHMgkJMHgxMzM4CisjZGVmaW5lIFRYT1BfVEhSRVNfQ0ZHCQkweDEzM2MKKyNkZWZpbmUgVFhPUF9DVFJMX0NGRwkJMHgxMzQwCisjZGVmaW5lIFRYX1JUU19DRkcJCTB4MTM0NAorCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfVFhfUlRTX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIHJzdjo3OworCSAgICBVSU5UMzIgICAgICAgUnRzRmJrRW46MTsgICAgLy8gZW5hYmxlIHJ0cyByYXRlIGZhbGxiYWNrCisJICAgIFVJTlQzMiAgICAgICBSdHNUaHJlczoxNjsgICAgLy8gdW5pdDpieXRlCisJICAgIFVJTlQzMiAgICAgICBBdXRvUnRzUmV0cnlMaW1pdDo4OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfUlRTX0NGR19TVFJVQywgKlBUWF9SVFNfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX1JUU19DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBBdXRvUnRzUmV0cnlMaW1pdDo4OworCSAgICBVSU5UMzIgICAgICAgUnRzVGhyZXM6MTY7ICAgIC8vIHVuaXQ6Ynl0ZQorCSAgICBVSU5UMzIgICAgICAgUnRzRmJrRW46MTsgICAgLy8gZW5hYmxlIHJ0cyByYXRlIGZhbGxiYWNrCisJICAgIFVJTlQzMiAgICAgICByc3Y6NzsgICAgIC8vIDE6IEhUIG5vbi1TVEJDIGNvbnRyb2wgZnJhbWUgZW5hYmxlCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9SVFNfQ0ZHX1NUUlVDLCAqUFRYX1JUU19DRkdfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfVElNRU9VVF9DRkcJMHgxMzQ4CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfVFhfVElNRU9VVF9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICByc3YyOjg7CisJICAgIFVJTlQzMiAgICAgICBUeG9wVGltZW91dDo4OwkvL1RYT1AgdGltZW91dCB2YWx1ZSBmb3IgVFhPUCB0cnVuY2F0aW9uLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCAoU0xPVF9USU1FKSA+IChUWF9PUF9USU1FT1VUKSA+IChSWF9BQ0tfVElNRU9VVCkKKwkgICAgVUlOVDMyICAgICAgIFJ4QWNrVGltZW91dDo4OwkvLyB1bml0OnNsb3QuIFVzZWQgZm9yIFRYIHByZWNlZHVyZQorCSAgICBVSU5UMzIgICAgICAgTXBkdUxpZmVUaW1lOjQ7ICAgIC8vICBleHBpcmF0aW9uIHRpbWUgPSAyXig5K01QRFUgTElGRSBUSU1FKSAgdXMKKwkgICAgVUlOVDMyICAgICAgIHJzdjo0OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfVElNRU9VVF9DRkdfU1RSVUMsICpQVFhfVElNRU9VVF9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfVFhfVElNRU9VVF9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICByc3Y6NDsKKwkgICAgVUlOVDMyICAgICAgIE1wZHVMaWZlVGltZTo0OyAgICAvLyAgZXhwaXJhdGlvbiB0aW1lID0gMl4oOStNUERVIExJRkUgVElNRSkgIHVzCisJICAgIFVJTlQzMiAgICAgICBSeEFja1RpbWVvdXQ6ODsJLy8gdW5pdDpzbG90LiBVc2VkIGZvciBUWCBwcmVjZWR1cmUKKwkgICAgVUlOVDMyICAgICAgIFR4b3BUaW1lb3V0Ojg7CS8vVFhPUCB0aW1lb3V0IHZhbHVlIGZvciBUWE9QIHRydW5jYXRpb24uICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IChTTE9UX1RJTUUpID4gKFRYX09QX1RJTUVPVVQpID4gKFJYX0FDS19USU1FT1VUKQorCSAgICBVSU5UMzIgICAgICAgcnN2Mjo4OyAgICAgLy8gMTogSFQgbm9uLVNUQkMgY29udHJvbCBmcmFtZSBlbmFibGUKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX1RJTUVPVVRfQ0ZHX1NUUlVDLCAqUFRYX1RJTUVPVVRfQ0ZHX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFRYX1JUWV9DRkcJMHgxMzRjCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbiBQQUNLRUQgX1RYX1JUWV9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICByc3Y6MTsKKwkgICAgVUlOVDMyICAgICAgIFR4YXV0b0ZCRW5hYmxlOjE7ICAgIC8vIFR4IHJldHJ5IFBIWSByYXRlIGF1dG8gZmFsbGJhY2sgZW5hYmxlCisJICAgIFVJTlQzMiAgICAgICBBZ2dSdHlNb2RlOjE7CS8vIEFnZ3JlZ2F0ZSBNUERVIHJldHJ5IG1vZGUuICAwOmV4cGlyZWQgYnkgcmV0cnkgbGltaXQsIDE6IGV4cGlyZWQgYnkgbXBkdSBsaWZlIHRpbWVyCisJICAgIFVJTlQzMiAgICAgICBOb25BZ2dSdHlNb2RlOjE7CS8vIE5vbi1BZ2dyZWdhdGUgTVBEVSByZXRyeSBtb2RlLiAgMDpleHBpcmVkIGJ5IHJldHJ5IGxpbWl0LCAxOiBleHBpcmVkIGJ5IG1wZHUgbGlmZSB0aW1lcgorCSAgICBVSU5UMzIgICAgICAgTG9uZ1J0eVRocmU6MTI7CS8vIExvbmcgcmV0cnkgdGhyZXNob29sZAorCSAgICBVSU5UMzIgICAgICAgTG9uZ1J0eUxpbWl0Ojg7CS8vbG9uZyByZXRyeSBsaW1pdAorCSAgICBVSU5UMzIgICAgICAgU2hvcnRSdHlMaW1pdDo4OwkvLyAgc2hvcnQgcmV0cnkgbGltaXQKKworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfUlRZX0NGR19TVFJVQywgKlBUWF9SVFlfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24gUEFDS0VEIF9UWF9SVFlfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICAgICAgU2hvcnRSdHlMaW1pdDo4OwkvLyAgc2hvcnQgcmV0cnkgbGltaXQKKwkgICAgVUlOVDMyICAgICAgIExvbmdSdHlMaW1pdDo4OwkvL2xvbmcgcmV0cnkgbGltaXQKKwkgICAgVUlOVDMyICAgICAgIExvbmdSdHlUaHJlOjEyOwkvLyBMb25nIHJldHJ5IHRocmVzaG9vbGQKKwkgICAgVUlOVDMyICAgICAgIE5vbkFnZ1J0eU1vZGU6MTsJLy8gTm9uLUFnZ3JlZ2F0ZSBNUERVIHJldHJ5IG1vZGUuICAwOmV4cGlyZWQgYnkgcmV0cnkgbGltaXQsIDE6IGV4cGlyZWQgYnkgbXBkdSBsaWZlIHRpbWVyCisJICAgIFVJTlQzMiAgICAgICBBZ2dSdHlNb2RlOjE7CS8vIEFnZ3JlZ2F0ZSBNUERVIHJldHJ5IG1vZGUuICAwOmV4cGlyZWQgYnkgcmV0cnkgbGltaXQsIDE6IGV4cGlyZWQgYnkgbXBkdSBsaWZlIHRpbWVyCisJICAgIFVJTlQzMiAgICAgICBUeGF1dG9GQkVuYWJsZToxOyAgICAvLyBUeCByZXRyeSBQSFkgcmF0ZSBhdXRvIGZhbGxiYWNrIGVuYWJsZQorCSAgICBVSU5UMzIgICAgICAgcnN2OjE7ICAgICAvLyAxOiBIVCBub24tU1RCQyBjb250cm9sIGZyYW1lIGVuYWJsZQorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfUlRZX0NGR19TVFJVQywgKlBUWF9SVFlfQ0ZHX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFRYX0xJTktfQ0ZHCTB4MTM1MAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JUEFDS0VEIF9UWF9MSU5LX0NGR19TVFJVQwl7CisJc3RydWN0IFBBQ0tFRCB7CisJICAgIFVJTlQzMiAgICAgICBSZW1vdE1GUzo4OwkvL3JlbW90ZSBNQ1MgZmVlZGJhY2sgc2VxdWVuY2UgbnVtYmVyCisJICAgIFVJTlQzMiAgICAgICBSZW1vdE1GQjo4OyAgICAvLyAgcmVtb3RlIE1DUyBmZWVkYmFjaworCSAgICBVSU5UMzIgICAgICAgcnN2OjM7CS8vCisJICAgIFVJTlQzMiAgICAgICBUeENGQWNrRW46MTsJLy8gICBQaWdneWJhY2sgQ0YtQUNLIGVuYWJsZQorCSAgICBVSU5UMzIgICAgICAgVHhSREdFbjoxOwkvLyBSREcgVFggZW5hYmxlCisJICAgIFVJTlQzMiAgICAgICBUeE1SUUVuOjE7CS8vICBNQ1MgcmVxdWVzdCBUWCBlbmFibGUKKwkgICAgVUlOVDMyICAgICAgIFJlbW90ZVVNRlNFbmFibGU6MTsJLy8gIHJlbW90ZSB1bnNvbGljaXQgIE1GQiBlbmFibGUuICAwOiBub3QgYXBwbHkgcmVtb3RlIHJlbW90ZSB1bnNvbGljaXQgKE1GUz03KQorCSAgICBVSU5UMzIgICAgICAgTUZCRW5hYmxlOjE7CS8vICBUWCBhcHBseSByZW1vdGUgTUZCIDE6ZW5hYmxlCisJICAgIFVJTlQzMiAgICAgICBSZW1vdGVNRkJMaWZlVGltZTo4OwkvL3JlbW90ZSBNRkIgbGlmZSB0aW1lLiB1bml0IDogMzJ1cworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfTElOS19DRkdfU1RSVUMsICpQVFhfTElOS19DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglQQUNLRUQgX1RYX0xJTktfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QgUEFDS0VEIHsKKwkgICAgVUlOVDMyICAgICAgIFJlbW90ZU1GQkxpZmVUaW1lOjg7CS8vcmVtb3RlIE1GQiBsaWZlIHRpbWUuIHVuaXQgOiAzMnVzCisJICAgIFVJTlQzMiAgICAgICBNRkJFbmFibGU6MTsJLy8gIFRYIGFwcGx5IHJlbW90ZSBNRkIgMTplbmFibGUKKwkgICAgVUlOVDMyICAgICAgIFJlbW90ZVVNRlNFbmFibGU6MTsJLy8gIHJlbW90ZSB1bnNvbGljaXQgIE1GQiBlbmFibGUuICAwOiBub3QgYXBwbHkgcmVtb3RlIHJlbW90ZSB1bnNvbGljaXQgKE1GUz03KQorCSAgICBVSU5UMzIgICAgICAgVHhNUlFFbjoxOwkvLyAgTUNTIHJlcXVlc3QgVFggZW5hYmxlCisJICAgIFVJTlQzMiAgICAgICBUeFJER0VuOjE7CS8vIFJERyBUWCBlbmFibGUKKwkgICAgVUlOVDMyICAgICAgIFR4Q0ZBY2tFbjoxOwkvLyAgIFBpZ2d5YmFjayBDRi1BQ0sgZW5hYmxlCisJICAgIFVJTlQzMiAgICAgICByc3Y6MzsJLy8KKwkgICAgVUlOVDMyICAgICAgIFJlbW90TUZCOjg7ICAgIC8vICByZW1vdGUgTUNTIGZlZWRiYWNrCisJICAgIFVJTlQzMiAgICAgICBSZW1vdE1GUzo4OwkvL3JlbW90ZSBNQ1MgZmVlZGJhY2sgc2VxdWVuY2UgbnVtYmVyCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9MSU5LX0NGR19TVFJVQywgKlBUWF9MSU5LX0NGR19TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBIVF9GQktfQ0ZHMAkweDEzNTQKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uIFBBQ0tFRCBfSFRfRkJLX0NGRzBfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzdGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTNkZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1M1RkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzRGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTM0ZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MyRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzFGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTMEZCSzo0OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JSFRfRkJLX0NGRzBfU1RSVUMsICpQSFRfRkJLX0NGRzBfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbiBQQUNLRUQgX0hUX0ZCS19DRkcwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MwRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzFGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTMkZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MzRkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzRGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTNUZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1M2RkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzdGQks6NDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUhUX0ZCS19DRkcwX1NUUlVDLCAqUEhUX0ZCS19DRkcwX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIEhUX0ZCS19DRkcxCTB4MTM1OAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0hUX0ZCS19DRkcxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxNUZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxNEZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxM0ZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxMkZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxMUZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1MxMEZCSzo0OworCSAgICBVSU5UMzIgICAgICAgSFRNQ1M5RkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzhGQks6NDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUhUX0ZCS19DRkcxX1NUUlVDLCAqUEhUX0ZCS19DRkcxX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0hUX0ZCS19DRkcxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICAgICAgSFRNQ1M4RkJLOjQ7CisJICAgIFVJTlQzMiAgICAgICBIVE1DUzlGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTMTBGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTMTFGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTMTJGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTMTNGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTMTRGQks6NDsKKwkgICAgVUlOVDMyICAgICAgIEhUTUNTMTVGQks6NDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUhUX0ZCS19DRkcxX1NUUlVDLCAqUEhUX0ZCS19DRkcxX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIExHX0ZCS19DRkcwCTB4MTM1YworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0xHX0ZCS19DRkcwX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzdGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDYKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1M2RkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyA1CisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTNUZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgNAorCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzRGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDMKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1MzRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAyCisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTMkZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMQorCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzFGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDAKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1MwRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAwCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlMR19GQktfQ0ZHMF9TVFJVQywgKlBMR19GQktfQ0ZHMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9MR19GQktfQ0ZHMF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1MwRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAwCisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTMUZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMAorCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzJGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDEKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1MzRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAyCisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTNEZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMworCSAgICBVSU5UMzIgICAgICAgT0ZETU1DUzVGQks6NDsJLy9pbml0aWFsIHZhbHVlIGlzIDQKKwkgICAgVUlOVDMyICAgICAgIE9GRE1NQ1M2RkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyA1CisJICAgIFVJTlQzMiAgICAgICBPRkRNTUNTN0ZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgNgorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JTEdfRkJLX0NGRzBfU1RSVUMsICpQTEdfRkJLX0NGRzBfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgTEdfRkJLX0NGRzEJCTB4MTM2MAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0xHX0ZCS19DRkcxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICAgICAgcnN2OjE2OworCSAgICBVSU5UMzIgICAgICAgQ0NLTUNTM0ZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMgorCSAgICBVSU5UMzIgICAgICAgQ0NLTUNTMkZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMQorCSAgICBVSU5UMzIgICAgICAgQ0NLTUNTMUZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMAorCSAgICBVSU5UMzIgICAgICAgQ0NLTUNTMEZCSzo0OwkvL2luaXRpYWwgdmFsdWUgaXMgMAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JTEdfRkJLX0NGRzFfU1RSVUMsICpQTEdfRkJLX0NGRzFfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfTEdfRkJLX0NGRzFfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgICAgICBDQ0tNQ1MwRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAwCisJICAgIFVJTlQzMiAgICAgICBDQ0tNQ1MxRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAwCisJICAgIFVJTlQzMiAgICAgICBDQ0tNQ1MyRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAxCisJICAgIFVJTlQzMiAgICAgICBDQ0tNQ1MzRkJLOjQ7CS8vaW5pdGlhbCB2YWx1ZSBpcyAyCisJICAgIFVJTlQzMiAgICAgICByc3Y6MTY7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlMR19GQktfQ0ZHMV9TVFJVQywgKlBMR19GQktfQ0ZHMV9TVFJVQzsKKyNlbmRpZgorCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vPT09PT09PT09PT09PT09PSBQcm90ZWN0aW9uIFBhcmFtYXRlcj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyNkZWZpbmUgQ0NLX1BST1RfQ0ZHCTB4MTM2NAkJLy9DQ0sgUHJvdGVjdGlvbgorI2RlZmluZSBBU0lDX1NIT1JUTkFWCQkxCisjZGVmaW5lIEFTSUNfTE9OR05BVgkJMgorI2RlZmluZSBBU0lDX1JUUwkJMQorI2RlZmluZSBBU0lDX0NUUwkJMgorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1BST1RfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICAgICAgcnN2OjU7CisJICAgIFVJTlQzMiAgICAgICBSVFNUaEVuOjE7CS8vUlRTIHRocmVzaG9sZCBlbmFibGUgb24gQ0NLIFRYCisJICAgIFVJTlQzMiAgICAgICBUeG9wQWxsb3dHRjQwOjE7CS8vQ0NLIFRYT1AgYWxsb3dhbmNlLjA6ZGlzYWxsb3cuCisJICAgIFVJTlQzMiAgICAgICBUeG9wQWxsb3dHRjIwOjE7CS8vQ0NLIFRYT1AgYWxsb3dhbmNlLjA6ZGlzYWxsb3cuCisJICAgIFVJTlQzMiAgICAgICBUeG9wQWxsb3dNTTQwOjE7CS8vQ0NLIFRYT1AgYWxsb3dhbmNlLjA6ZGlzYWxsb3cuCisJICAgIFVJTlQzMiAgICAgICBUeG9wQWxsb3dNTTIwOjE7CS8vQ0NLIFRYT1AgYWxsb3dhbmNlLiAwOmRpc2FsbG93LgorCSAgICBVSU5UMzIgICAgICAgVHhvcEFsbG93T2ZkbToxOwkvL0NDSyBUWE9QIGFsbG93YW5jZS4wOmRpc2FsbG93LgorCSAgICBVSU5UMzIgICAgICAgVHhvcEFsbG93Q2NrOjE7CS8vQ0NLIFRYT1AgYWxsb3dhbmNlLjA6ZGlzYWxsb3cuCisJICAgIFVJTlQzMiAgICAgICBQcm90ZWN0TmF2OjI7CS8vVFhPUCBwcm90ZWN0aW9uIHR5cGUgZm9yIENDSyBUWC4gMDpOb25lLCAxOlNob3J0TkFWcHJvdGVjdCwgIDI6TG9uZ05BVlByb3RlY3QsIDM6cnN2CisJICAgIFVJTlQzMiAgICAgICBQcm90ZWN0Q3RybDoyOwkvL1Byb3RlY3Rpb24gY29udHJvbCBmcmFtZSB0eXBlIGZvciBDQ0sgVFguIDE6UlRTL0NUUywgMjpDVFMtdG8tc2VsZiwgMDpOb25lLCAzOnJzdgorCSAgICBVSU5UMzIgICAgICAgUHJvdGVjdFJhdGU6MTY7CS8vUHJvdGVjdGlvbiBjb250cm9sIGZyYW1lIHJhdGUgZm9yIENDSyBUWChSVFMvQ1RTL0NGRW5kKS4KKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVBST1RfQ0ZHX1NUUlVDLCAqUFBST1RfQ0ZHX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1BST1RfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVSU5UMzIgICAgICAgUHJvdGVjdFJhdGU6MTY7CS8vUHJvdGVjdGlvbiBjb250cm9sIGZyYW1lIHJhdGUgZm9yIENDSyBUWChSVFMvQ1RTL0NGRW5kKS4KKwkgICAgVUlOVDMyICAgICAgIFByb3RlY3RDdHJsOjI7CS8vUHJvdGVjdGlvbiBjb250cm9sIGZyYW1lIHR5cGUgZm9yIENDSyBUWC4gMTpSVFMvQ1RTLCAyOkNUUy10by1zZWxmLCAwOk5vbmUsIDM6cnN2CisJICAgIFVJTlQzMiAgICAgICBQcm90ZWN0TmF2OjI7CS8vVFhPUCBwcm90ZWN0aW9uIHR5cGUgZm9yIENDSyBUWC4gMDpOb25lLCAxOlNob3J0TkFWcHJvdGVjdCwgIDI6TG9uZ05BVlByb3RlY3QsIDM6cnN2CisJICAgIFVJTlQzMiAgICAgICBUeG9wQWxsb3dDY2s6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd09mZG06MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuMDpkaXNhbGxvdy4KKwkgICAgVUlOVDMyICAgICAgIFR4b3BBbGxvd01NMjA6MTsJLy9DQ0sgVFhPUCBhbGxvd2FuY2UuIDA6ZGlzYWxsb3cuCisJICAgIFVJTlQzMiAgICAgICBUeG9wQWxsb3dNTTQwOjE7CS8vQ0NLIFRYT1AgYWxsb3dhbmNlLjA6ZGlzYWxsb3cuCisJICAgIFVJTlQzMiAgICAgICBUeG9wQWxsb3dHRjIwOjE7CS8vQ0NLIFRYT1AgYWxsb3dhbmNlLjA6ZGlzYWxsb3cuCisJICAgIFVJTlQzMiAgICAgICBUeG9wQWxsb3dHRjQwOjE7CS8vQ0NLIFRYT1AgYWxsb3dhbmNlLjA6ZGlzYWxsb3cuCisJICAgIFVJTlQzMiAgICAgICBSVFNUaEVuOjE7CS8vUlRTIHRocmVzaG9sZCBlbmFibGUgb24gQ0NLIFRYCisJICAgIFVJTlQzMiAgICAgICByc3Y6NTsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVBST1RfQ0ZHX1NUUlVDLCAqUFBST1RfQ0ZHX1NUUlVDOworI2VuZGlmCisKKyNkZWZpbmUgT0ZETV9QUk9UX0NGRwkweDEzNjgJCS8vT0ZETSBQcm90ZWN0aW9uCisjZGVmaW5lIE1NMjBfUFJPVF9DRkcJMHgxMzZDCQkvL01NMjAgUHJvdGVjdGlvbgorI2RlZmluZSBNTTQwX1BST1RfQ0ZHCTB4MTM3MAkJLy9NTTQwIFByb3RlY3Rpb24KKyNkZWZpbmUgR0YyMF9QUk9UX0NGRwkweDEzNzQJCS8vR0YyMCBQcm90ZWN0aW9uCisjZGVmaW5lIEdGNDBfUFJPVF9DRkcJMHgxMzc4CQkvL0dSNDAgUHJvdGVjdGlvbgorI2RlZmluZSBFWFBfQ1RTX1RJTUUJMHgxMzdDCQkvLworI2RlZmluZSBFWFBfQUNLX1RJTUUJMHgxMzgwCQkvLworCisvLworLy8gIDQuNCBNQUMgUlggY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKG9mZnNldDoweDE0MDApCisvLworI2RlZmluZSBSWF9GSUxUUl9DRkcJMHgxNDAwCQkJLy9UWFJYX0NTUjAKKyNkZWZpbmUgQVVUT19SU1BfQ0ZHCTB4MTQwNAkJCS8vVFhSWF9DU1I0CisvLworLy8gVFhSWF9DU1I0OiBBdXRvLVJlc3BvbmRlci8KKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZiB1bmlvbiBfQVVUT19SU1BfQ0ZHX1NUUlVDIHsKKyBzdHJ1Y3QgeworICAgICBVSU5UMzIgICAgICAgIDoyNDsKKyAgICAgVUlOVDMyICAgICAgIEFja0N0c1BzbUJpdDoxOyAgIC8vIFBvd2VyIGJpdCB2YWx1ZSBpbiBjb25ydHJvbCBmcmFtZQorICAgICBVSU5UMzIgICAgICAgRHVhbENUU0VuOjE7ICAgLy8gUG93ZXIgYml0IHZhbHVlIGluIGNvbnJ0cm9sIGZyYW1lCisgICAgIFVJTlQzMiAgICAgICByc3Y6MTsgICAvLyBQb3dlciBiaXQgdmFsdWUgaW4gY29ucnRyb2wgZnJhbWUKKyAgICAgVUlOVDMyICAgICAgIEF1dG9SZXNwb25kZXJQcmVhbWJsZToxOyAgICAvLyAwOmxvbmcsIDE6c2hvcnQgcHJlYW1ibGUKKyAgICAgVUlOVDMyICAgICAgIENUUzQwTVJlZjoxOyAgLy8gUmVzcG9uc2UgQ1RTIDQwTUh6IGR1cGxpY2F0ZSBtb2RlCisgICAgIFVJTlQzMiAgICAgICBDVFM0ME1Nb2RlOjE7ICAvLyBSZXNwb25zZSBDVFMgNDBNSHogZHVwbGljYXRlIG1vZGUKKyAgICAgVUlOVDMyICAgICAgIEJBQ0Fja1BvbGljeUVuYWJsZToxOyAgICAvLyAwOmxvbmcsIDE6c2hvcnQgcHJlYW1ibGUKKyAgICAgVUlOVDMyICAgICAgIEF1dG9SZXNwb25kZXJFbmFibGU6MTsKKyB9IGZpZWxkOworIFVJTlQzMiAgIHdvcmQ7Cit9IEFVVE9fUlNQX0NGR19TVFJVQywgKlBBVVRPX1JTUF9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZiB1bmlvbiBfQVVUT19SU1BfQ0ZHX1NUUlVDIHsKKyBzdHJ1Y3QgeworICAgICBVSU5UMzIgICAgICAgQXV0b1Jlc3BvbmRlckVuYWJsZToxOworICAgICBVSU5UMzIgICAgICAgQkFDQWNrUG9saWN5RW5hYmxlOjE7ICAgIC8vIDA6bG9uZywgMTpzaG9ydCBwcmVhbWJsZQorICAgICBVSU5UMzIgICAgICAgQ1RTNDBNTW9kZToxOyAgLy8gUmVzcG9uc2UgQ1RTIDQwTUh6IGR1cGxpY2F0ZSBtb2RlCisgICAgIFVJTlQzMiAgICAgICBDVFM0ME1SZWY6MTsgIC8vIFJlc3BvbnNlIENUUyA0ME1IeiBkdXBsaWNhdGUgbW9kZQorICAgICBVSU5UMzIgICAgICAgQXV0b1Jlc3BvbmRlclByZWFtYmxlOjE7ICAgIC8vIDA6bG9uZywgMTpzaG9ydCBwcmVhbWJsZQorICAgICBVSU5UMzIgICAgICAgcnN2OjE7ICAgLy8gUG93ZXIgYml0IHZhbHVlIGluIGNvbnJ0cm9sIGZyYW1lCisgICAgIFVJTlQzMiAgICAgICBEdWFsQ1RTRW46MTsgICAvLyBQb3dlciBiaXQgdmFsdWUgaW4gY29ucnRyb2wgZnJhbWUKKyAgICAgVUlOVDMyICAgICAgIEFja0N0c1BzbUJpdDoxOyAgIC8vIFBvd2VyIGJpdCB2YWx1ZSBpbiBjb25ydHJvbCBmcmFtZQorICAgICBVSU5UMzIgICAgICAgIDoyNDsKKyB9IGZpZWxkOworIFVJTlQzMiAgIHdvcmQ7Cit9IEFVVE9fUlNQX0NGR19TVFJVQywgKlBBVVRPX1JTUF9DRkdfU1RSVUM7CisjZW5kaWYKKworI2RlZmluZSBMRUdBQ1lfQkFTSUNfUkFURQkweDE0MDgJLy8gIFRYUlhfQ1NSNSAgICAgICAgICAgMHgzMDU0CisjZGVmaW5lIEhUX0JBU0lDX1JBVEUJCTB4MTQwYworI2RlZmluZSBIVF9DVFJMX0NGRwkJMHgxNDEwCisjZGVmaW5lIFNJRlNfQ09TVF9DRkcJCTB4MTQxNAorI2RlZmluZSBSWF9QQVJTRVJfQ0ZHCQkweDE0MTgJLy9TZXQgTkFWIGZvciBhbGwgcmVjZWl2ZWQgZnJhbWVzCisKKy8vCisvLyAgNC41IE1BQyBTZWN1cml0eSBjb25maWd1cmF0aW9uIChvZmZzZXQ6MHgxNTAwKQorLy8KKyNkZWZpbmUgVFhfU0VDX0NOVDAJCTB4MTUwMAkJLy8KKyNkZWZpbmUgUlhfU0VDX0NOVDAJCTB4MTUwNAkJLy8KKyNkZWZpbmUgQ0NNUF9GQ19NVVRFCQkweDE1MDgJCS8vCisvLworLy8gIDQuNiBIQ0NBL1BTTVAgKG9mZnNldDoweDE2MDApCisvLworI2RlZmluZSBUWE9QX0hMRFJfQUREUjAJCTB4MTYwMAorI2RlZmluZSBUWE9QX0hMRFJfQUREUjEJCTB4MTYwNAorI2RlZmluZSBUWE9QX0hMRFJfRVQJCTB4MTYwOAorI2RlZmluZSBRT1NfQ0ZQT0xMX1JBX0RXMAkJMHgxNjBjCisjZGVmaW5lIFFPU19DRlBPTExfQTFfRFcxCQkweDE2MTAKKyNkZWZpbmUgUU9TX0NGUE9MTF9RQwkJMHgxNjE0CisvLworLy8gIDQuNyBNQUMgU3RhdGlzdGlzIHJlZ2lzdGVycyAob2Zmc2V0OjB4MTcwMCkKKy8vCisjZGVmaW5lIFJYX1NUQV9DTlQwCQkweDE3MDAJCS8vCisjZGVmaW5lIFJYX1NUQV9DTlQxCQkweDE3MDQJCS8vCisjZGVmaW5lIFJYX1NUQV9DTlQyCQkweDE3MDgJCS8vCisKKy8vCisvLyBSWF9TVEFfQ05UMF9TVFJVQzogUlggUExDUCBlcnJvciBjb3VudCAmIFJYIENSQyBlcnJvciBjb3VudAorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9SWF9TVEFfQ05UMF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBQaHlFcnI7CisJICAgIFVTSE9SVCAgQ3JjRXJyOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUlhfU1RBX0NOVDBfU1RSVUMsICpQUlhfU1RBX0NOVDBfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfUlhfU1RBX0NOVDBfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQ3JjRXJyOworCSAgICBVU0hPUlQgIFBoeUVycjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVJYX1NUQV9DTlQwX1NUUlVDLCAqUFJYX1NUQV9DTlQwX1NUUlVDOworI2VuZGlmCisKKy8vCisvLyBSWF9TVEFfQ05UMV9TVFJVQzogUlggRmFsc2UgQ0NBIGNvdW50ICYgUlggTE9ORyBmcmFtZSBjb3VudAorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9SWF9TVEFfQ05UMV9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBQbGNwRXJyOworCSAgICBVU0hPUlQgIEZhbHNlQ2NhOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUlhfU1RBX0NOVDFfU1RSVUMsICpQUlhfU1RBX0NOVDFfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfUlhfU1RBX0NOVDFfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgRmFsc2VDY2E7CisJICAgIFVTSE9SVCAgUGxjcEVycjsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVJYX1NUQV9DTlQxX1NUUlVDLCAqUFJYX1NUQV9DTlQxX1NUUlVDOworI2VuZGlmCisKKy8vCisvLyBSWF9TVEFfQ05UMl9TVFJVQzoKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfUlhfU1RBX0NOVDJfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgUnhGaWZvT3ZlcmZsb3dDb3VudDsKKwkgICAgVVNIT1JUICBSeER1cGxpQ291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlSWF9TVEFfQ05UMl9TVFJVQywgKlBSWF9TVEFfQ05UMl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9SWF9TVEFfQ05UMl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBSeER1cGxpQ291bnQ7CisJICAgIFVTSE9SVCAgUnhGaWZvT3ZlcmZsb3dDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVJYX1NUQV9DTlQyX1NUUlVDLCAqUFJYX1NUQV9DTlQyX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFRYX1NUQV9DTlQwCQkweDE3MEMJCS8vCisvLworLy8gU1RBX0NTUjM6IFRYIEJlYWNvbiBjb3VudAorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9TVEFfQ05UMF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBUeEJlYWNvbkNvdW50OworCSAgICBVU0hPUlQgIFR4RmFpbENvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfU1RBX0NOVDBfU1RSVUMsICpQVFhfU1RBX0NOVDBfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfVFhfU1RBX0NOVDBfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgVHhGYWlsQ291bnQ7CisJICAgIFVTSE9SVCAgVHhCZWFjb25Db3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX1NUQV9DTlQwX1NUUlVDLCAqUFRYX1NUQV9DTlQwX1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFRYX1NUQV9DTlQxCQkweDE3MTAJCS8vCisvLworLy8gVFhfU1RBX0NOVDE6IFRYIHR4IGNvdW50CisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX1NUQV9DTlQxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFR4UmV0cmFuc21pdDsKKwkgICAgVVNIT1JUICBUeFN1Y2Nlc3M7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9TVEFfQ05UMV9TVFJVQywgKlBUWF9TVEFfQ05UMV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9TVEFfQ05UMV9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBUeFN1Y2Nlc3M7CisJICAgIFVTSE9SVCAgVHhSZXRyYW5zbWl0OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfU1RBX0NOVDFfU1RSVUMsICpQVFhfU1RBX0NOVDFfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgVFhfU1RBX0NOVDIJCTB4MTcxNAkJLy8KKy8vCisvLyBUWF9TVEFfQ05UMjogVFggdHggY291bnQKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfVFhfU1RBX0NOVDJfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgVHhVbmRlckZsb3dDb3VudDsKKwkgICAgVVNIT1JUICBUeFplcm9MZW5Db3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX1NUQV9DTlQyX1NUUlVDLCAqUFRYX1NUQV9DTlQyX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX1NUQV9DTlQyX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFR4WmVyb0xlbkNvdW50OworCSAgICBVU0hPUlQgIFR4VW5kZXJGbG93Q291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9TVEFfQ05UMl9TVFJVQywgKlBUWF9TVEFfQ05UMl9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBUWF9TVEFfRklGTwkJMHgxNzE4CQkvLworLy8KKy8vIFRYX1NUQV9GSUZPX1NUUlVDOiBUWCBSZXN1bHQgZm9yIHNwZWNpZmljIFBJRCBzdGF0dXMgZmlmbyByZWdpc3RlcgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uIFBBQ0tFRCBfVFhfU1RBX0ZJRk9fU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJUmVzZXJ2ZToyOworCQlVSU5UMzIJCVR4QkY6MTsgLy8gMyozCisJCVVJTlQzMgkJU3VjY2Vzc1JhdGU6MTM7CS8vaW5jbHVkZSBNQ1MsIG1vZGUgLHNob3J0R0ksIEJXIHNldHRpbmdTYW1lIGZvcm1hdCBhcyBUWFdJIFdvcmQgMCBCaXQgMzEtMTYuCisvLwkJVUlOVDMyCQlTdWNjZXNzUmF0ZToxNjsJLy9pbmNsdWRlIE1DUywgbW9kZSAsc2hvcnRHSSwgQlcgc2V0dGluZ1NhbWUgZm9ybWF0IGFzIFRYV0kgV29yZCAwIEJpdCAzMS0xNi4KKwkJVUlOVDMyCQl3Y2lkOjg7CQkvL3dpcmVsZXNzIGNsaWVudCBpbmRleAorCQlVSU5UMzIgICAgICAgCVR4QWNrUmVxdWlyZWQ6MTsgICAgLy8gYWNrIHJlcXVpcmVkCisJCVVJTlQzMiAgICAgICAJVHhBZ2dyZToxOyAgICAvLyBUeCBpcyBhZ2dyZWdhdGVkCisJCVVJTlQzMiAgICAgICAJVHhTdWNjZXNzOjE7ICAgLy8gVHggc3VjY2Vzcy4gd2hldGhlciBzdWNjZXNzIG9yIG5vdAorCQlVSU5UMzIgICAgICAgCVBpZFR5cGU6NDsKKwkJVUlOVDMyICAgICAgIAliVmFsaWQ6MTsgICAvLyAxOlRoaXMgcmVnaXN0ZXIgY29udGFpbnMgYSB2YWxpZCBUWCByZXN1bHQKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX1NUQV9GSUZPX1NUUlVDLCAqUFRYX1NUQV9GSUZPX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24gUEFDS0VEIF9UWF9TVEFfRklGT19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyICAgICAgIAliVmFsaWQ6MTsgICAvLyAxOlRoaXMgcmVnaXN0ZXIgY29udGFpbnMgYSB2YWxpZCBUWCByZXN1bHQKKwkJVUlOVDMyICAgICAgIAlQaWRUeXBlOjQ7CisJCVVJTlQzMiAgICAgICAJVHhTdWNjZXNzOjE7ICAgLy8gVHggTm8gcmV0cnkgc3VjY2VzcworCQlVSU5UMzIgICAgICAgCVR4QWdncmU6MTsgICAgLy8gVHggUmV0cnkgU3VjY2VzcworCQlVSU5UMzIgICAgICAgCVR4QWNrUmVxdWlyZWQ6MTsgICAgLy8gVHggZmFpbAorCQlVSU5UMzIJCXdjaWQ6ODsJCS8vd2lyZWxlc3MgY2xpZW50IGluZGV4CisvLwkJVUlOVDMyCQlTdWNjZXNzUmF0ZToxNjsJLy9pbmNsdWRlIE1DUywgbW9kZSAsc2hvcnRHSSwgQlcgc2V0dGluZ1NhbWUgZm9ybWF0IGFzIFRYV0kgV29yZCAwIEJpdCAzMS0xNi4KKwkJVUlOVDMyCQlTdWNjZXNzUmF0ZToxMzsJLy9pbmNsdWRlIE1DUywgbW9kZSAsc2hvcnRHSSwgQlcgc2V0dGluZ1NhbWUgZm9ybWF0IGFzIFRYV0kgV29yZCAwIEJpdCAzMS0xNi4KKwkJVUlOVDMyCQlUeEJGOjE7CisJCVVJTlQzMgkJUmVzZXJ2ZToyOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfU1RBX0ZJRk9fU1RSVUMsICpQVFhfU1RBX0ZJRk9fU1RSVUM7CisjZW5kaWYKKy8vIERlYnVnIGNvdW50ZXIKKyNkZWZpbmUgVFhfQUdHX0NOVAkweDE3MWMKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1R4Q291bnQ7CisJICAgIFVTSE9SVCAgTm9uQWdnVHhDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlRfU1RSVUMsICpQVFhfQUdHX0NOVF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIE5vbkFnZ1R4Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnVHhDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlRfU1RSVUMsICpQVFhfQUdHX0NOVF9TVFJVQzsKKyNlbmRpZgorLy8gRGVidWcgY291bnRlcgorI2RlZmluZSBUWF9BR0dfQ05UMAkweDE3MjAKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UMF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplMkNvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemUxQ291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UMF9TVFJVQywgKlBUWF9BR0dfQ05UMF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UMF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplMUNvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemUyQ291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UMF9TVFJVQywgKlBUWF9BR0dfQ05UMF9TVFJVQzsKKyNlbmRpZgorLy8gRGVidWcgY291bnRlcgorI2RlZmluZSBUWF9BR0dfQ05UMQkweDE3MjQKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UMV9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplNENvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemUzQ291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UMV9TVFJVQywgKlBUWF9BR0dfQ05UMV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UMV9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplM0NvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemU0Q291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UMV9TVFJVQywgKlBUWF9BR0dfQ05UMV9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBUWF9BR0dfQ05UMgkweDE3MjgKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UMl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplNkNvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemU1Q291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UMl9TVFJVQywgKlBUWF9BR0dfQ05UMl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UMl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplNUNvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemU2Q291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UMl9TVFJVQywgKlBUWF9BR0dfQ05UMl9TVFJVQzsKKyNlbmRpZgorLy8gRGVidWcgY291bnRlcgorI2RlZmluZSBUWF9BR0dfQ05UMwkweDE3MmMKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UM19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplOENvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemU3Q291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UM19TVFJVQywgKlBUWF9BR0dfQ05UM19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UM19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplN0NvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemU4Q291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UM19TVFJVQywgKlBUWF9BR0dfQ05UM19TVFJVQzsKKyNlbmRpZgorLy8gRGVidWcgY291bnRlcgorI2RlZmluZSBUWF9BR0dfQ05UNAkweDE3MzAKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UNF9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTBDb3VudDsKKwkgICAgVVNIT1JUICBBZ2dTaXplOUNvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVDRfU1RSVUMsICpQVFhfQUdHX0NOVDRfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfVFhfQUdHX0NOVDRfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTlDb3VudDsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTBDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQ0X1NUUlVDLCAqUFRYX0FHR19DTlQ0X1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFRYX0FHR19DTlQ1CTB4MTczNAorI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQ1X1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUxMkNvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemUxMUNvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVDVfU1RSVUMsICpQVFhfQUdHX0NOVDVfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfVFhfQUdHX0NOVDVfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTExQ291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTEyQ291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UNV9TVFJVQywgKlBUWF9BR0dfQ05UNV9TVFJVQzsKKyNlbmRpZgorI2RlZmluZSBUWF9BR0dfQ05UNgkJMHgxNzM4CisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfVFhfQUdHX0NOVDZfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTE0Q291bnQ7CisJICAgIFVTSE9SVCAgQWdnU2l6ZTEzQ291bnQ7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlUWF9BR0dfQ05UNl9TVFJVQywgKlBUWF9BR0dfQ05UNl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UNl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTNDb3VudDsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTRDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQ2X1NUUlVDLCAqUFRYX0FHR19DTlQ2X1NUUlVDOworI2VuZGlmCisjZGVmaW5lIFRYX0FHR19DTlQ3CQkweDE3M2MKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9UWF9BR0dfQ05UN19TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTZDb3VudDsKKwkgICAgVVNIT1JUICBBZ2dTaXplMTVDb3VudDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVRYX0FHR19DTlQ3X1NUUlVDLCAqUFRYX0FHR19DTlQ3X1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1RYX0FHR19DTlQ3X1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIEFnZ1NpemUxNUNvdW50OworCSAgICBVU0hPUlQgIEFnZ1NpemUxNkNvdW50OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JVFhfQUdHX0NOVDdfU1RSVUMsICpQVFhfQUdHX0NOVDdfU1RSVUM7CisjZW5kaWYKKyNkZWZpbmUgTVBEVV9ERU5TSVRZX0NOVAkJMHgxNzQwCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfTVBEVV9ERU5fQ05UX1NUUlVDCXsKKwlzdHJ1Y3QJeworCSAgICBVU0hPUlQgIFJYWmVyb0RlbENvdW50OwkvL1JYIHplcm8gbGVuZ3RoIGRlbGltaXRlciBjb3VudAorCSAgICBVU0hPUlQgIFRYWmVyb0RlbENvdW50OwkvL1RYIHplcm8gbGVuZ3RoIGRlbGltaXRlciBjb3VudAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JTVBEVV9ERU5fQ05UX1NUUlVDLCAqUE1QRFVfREVOX0NOVF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9NUERVX0RFTl9DTlRfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVTSE9SVCAgVFhaZXJvRGVsQ291bnQ7CS8vVFggemVybyBsZW5ndGggZGVsaW1pdGVyIGNvdW50CisJICAgIFVTSE9SVCAgUlhaZXJvRGVsQ291bnQ7CS8vUlggemVybyBsZW5ndGggZGVsaW1pdGVyIGNvdW50CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlNUERVX0RFTl9DTlRfU1RSVUMsICpQTVBEVV9ERU5fQ05UX1NUUlVDOworI2VuZGlmCisvLworLy8gVFhSWCBjb250cm9sIHJlZ2lzdGVycyAtIGJhc2UgYWRkcmVzcyAweDMwMDAKKy8vCisvLyBydDI4NjBiICBVTktOT1dOIHJlZyB1c2UgUi9PIFJlZyBBZGRyIDB4NzdkMCBmaXJzdC4uCisjZGVmaW5lIFRYUlhfQ1NSMSAgICAgICAgICAgMHg3N2QwCisKKy8vCisvLyBTZWN1cml0eSBrZXkgdGFibGUgbWVtb3J5LCBiYXNlIGFkZHJlc3MgPSAweDEwMDAKKy8vCisjZGVmaW5lIE1BQ19XQ0lEX0JBU0UJCTB4MTgwMCAvLzgtYnl0ZXModXNlIG9ubHkgNi1ieXRlcykgKiAyNTYgZW50cnkgPQorI2RlZmluZSBIV19XQ0lEX0VOVFJZX1NJWkUgICA4CisjZGVmaW5lIFBBSVJXSVNFX0tFWV9UQUJMRV9CQVNFICAgICAweDQwMDAgICAgICAvLyAzMi1ieXRlICogMjU2LWVudHJ5ID0gIC1ieXRlCisjZGVmaW5lIEhXX0tFWV9FTlRSWV9TSVpFICAgICAgICAgICAweDIwCisjZGVmaW5lIFBBSVJXSVNFX0lWRUlWX1RBQkxFX0JBU0UgICAgIDB4NjAwMCAgICAgIC8vIDgtYnl0ZSAqIDI1Ni1lbnRyeSA9ICAtYnl0ZQorI2RlZmluZSBNQUNfSVZFSVZfVEFCTEVfQkFTRSAgICAgMHg2MDAwICAgICAgLy8gOC1ieXRlICogMjU2LWVudHJ5ID0gIC1ieXRlCisjZGVmaW5lIEhXX0lWRUlWX0VOVFJZX1NJWkUgICA4CisjZGVmaW5lIE1BQ19XQ0lEX0FUVFJJQlVURV9CQVNFICAgICAweDY4MDAgICAgICAvLyA0LWJ5dGUgKiAyNTYtZW50cnkgPSAgLWJ5dGUKKyNkZWZpbmUgSFdfV0NJRF9BVFRSSV9TSVpFICAgNAorI2RlZmluZSBXQ0lEX1JFU0VSVkVEICAgICAgICAgIAkJMHg2YmZjCisjZGVmaW5lIFNIQVJFRF9LRVlfVEFCTEVfQkFTRSAgICAgICAweDZjMDAgICAgICAvLyAzMi1ieXRlICogMTYtZW50cnkgPSA1MTItYnl0ZQorI2RlZmluZSBTSEFSRURfS0VZX01PREVfQkFTRSAgICAgICAweDcwMDAgICAgICAvLyAzMi1ieXRlICogMTYtZW50cnkgPSA1MTItYnl0ZQorI2RlZmluZSBIV19TSEFSRURfS0VZX01PREVfU0laRSAgIDQKKyNkZWZpbmUgU0hBUkVES0VZVEFCTEUJCQkwCisjZGVmaW5lIFBBSVJXSVNFS0VZVEFCTEUJCQkxCisKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1NIQVJFREtFWV9NT0RFX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MxS2V5M0NpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MxS2V5MkNpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MxS2V5MUNpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MxS2V5MENpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MwS2V5M0NpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MwS2V5MkNpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MwS2V5MUNpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MwS2V5MENpcGhlckFsZzozOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JU0hBUkVES0VZX01PREVfU1RSVUMsICpQU0hBUkVES0VZX01PREVfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfU0hBUkVES0VZX01PREVfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgICBCc3MwS2V5MENpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MwS2V5MUNpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MwS2V5MkNpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MwS2V5M0NpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MxS2V5MENpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MxS2V5MUNpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MxS2V5MkNpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJCVVJTlQzMiAgICAgICBCc3MxS2V5M0NpcGhlckFsZzozOworCQlVSU5UMzIgICAgICAgOjE7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlTSEFSRURLRVlfTU9ERV9TVFJVQywgKlBTSEFSRURLRVlfTU9ERV9TVFJVQzsKKyNlbmRpZgorLy8gNjQtZW50cnkgZm9yIHBhaXJ3aXNlIGtleSB0YWJsZQordHlwZWRlZiBzdHJ1Y3QgX0hXX1dDSURfRU5UUlkgeyAgLy8gOC1ieXRlIHBlciBlbnRyeQorICAgIFVDSEFSICAgQWRkcmVzc1s2XTsKKyAgICBVQ0hBUiAgIFJzdlsyXTsKK30gSFdfV0NJRF9FTlRSWSwgUEhXX1dDSURfRU5UUlk7CisKKworCisvLworLy8gT3RoZXIgb24tY2hpcCBzaGFyZWQgbWVtb3J5IHNwYWNlLCBiYXNlID0gMHgyMDAwCisvLworCisvLyBDSVMgc3BhY2UgLSBiYXNlIGFkZHJlc3MgPSAweDIwMDAKKyNkZWZpbmUgSFdfQ0lTX0JBU0UgICAgICAgICAgICAgMHgyMDAwCisKKy8vIENhcnJpZXItc2Vuc2UgQ1RTIGZyYW1lIGJhc2UgYWRkcmVzcy4gSXQncyB3aGVyZSBtYWMgc3RvcmVzIGNhcnJpZXItc2Vuc2UgZnJhbWUgZm9yIGNhcnJpZXItc2Vuc2UgZnVuY3Rpb24uCisjZGVmaW5lIEhXX0NTX0NUU19CQVNFCQkJMHg3NzAwCisvLyBERlMgQ1RTIGZyYW1lIGJhc2UgYWRkcmVzcy4gSXQncyB3aGVyZSBtYWMgc3RvcmVzIENUUyBmcmFtZSBmb3IgREZTLgorI2RlZmluZSBIV19ERlNfQ1RTX0JBU0UJCQkweDc3ODAKKyNkZWZpbmUgSFdfQ1RTX0ZSQU1FX1NJWkUJCTB4ODAKKworLy8gMjAwNC0xMS0wOCBqb2huIC0gc2luY2UgTlVMTCBmcmFtZSB3b24ndCBiZSB0aGF0IGxvbmcgKDI1NiBieXRlKS4gV2Ugc3RlYWwgMTYgdGFpbCBieXRlcworLy8gdG8gc2F2ZSBkZWJ1Z2dpbmcgc2V0dGluZ3MKKyNkZWZpbmUgSFdfREVCVUdfU0VUVElOR19CQVNFICAgMHg3N2YwICAvLyAweDc3ZjB+MHg3N2ZmIHRvdGFsIDE2IGJ5dGVzCisjZGVmaW5lIEhXX0RFQlVHX1NFVFRJTkdfQkFTRTIgICAweDc3NzAgIC8vIDB4NzdmMH4weDc3ZmYgdG90YWwgMTYgYnl0ZXMKKworLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBtYXhpbXVtIDggTUJTUyBhbmQgaXRzIG1heGltdW0gbGVuZ3RoIGlzIDUxMiBmb3IgZWFjaCBiZWFjb24KKy8vIFRocmVlIHNlY3Rpb24gZGlzY29udGludWUgbWVtb3J5IHNlZ21lbnRzIHdpbGwgYmUgdXNlZC4KKy8vIDEuIFRoZSBvcmlnaW5hbCByZWdpb24gZm9yIEJDTiAwfjMKKy8vIDIuIEV4dHJhY3QgbWVtb3J5IGZyb20gRkNFIHRhYmxlIGZvciBCQ04gNH41CisvLyAzLiBFeHRyYWN0IG1lbW9yeSBmcm9tIFBhaXItd2lzZSBrZXkgdGFibGUgZm9yIEJDTiA2fjcKKy8vCSAgSXQgb2NjdXBpZWQgdGhvc2UgbWVtb3J5IG9mIHdjaWQgMjM4fjI1MyBmb3IgQkNOIDYKKy8vCQkJCQkJICAgICAgYW5kIHdjaWQgMjIyfjIzNyBmb3IgQkNOIDcKKyNkZWZpbmUgSFdfQkVBQ09OX01BWF9TSVpFICAgICAgMHgxMDAwIC8qIHVuaXQ6IGJ5dGUgKi8KKyNkZWZpbmUgSFdfQkVBQ09OX0JBU0UwICAgICAgICAgMHg3ODAwCisjZGVmaW5lIEhXX0JFQUNPTl9CQVNFMSAgICAgICAgIDB4N0EwMAorI2RlZmluZSBIV19CRUFDT05fQkFTRTIgICAgICAgICAweDdDMDAKKyNkZWZpbmUgSFdfQkVBQ09OX0JBU0UzICAgICAgICAgMHg3RTAwCisjZGVmaW5lIEhXX0JFQUNPTl9CQVNFNCAgICAgICAgIDB4NzIwMAorI2RlZmluZSBIV19CRUFDT05fQkFTRTUgICAgICAgICAweDc0MDAKKyNkZWZpbmUgSFdfQkVBQ09OX0JBU0U2ICAgICAgICAgMHg1REMwCisjZGVmaW5lIEhXX0JFQUNPTl9CQVNFNyAgICAgICAgIDB4NUJDMAorCisjZGVmaW5lIEhXX0JFQUNPTl9NQVhfQ09VTlQgICAgIDgKKyNkZWZpbmUgSFdfQkVBQ09OX09GRlNFVAkJMHgwMjAwCisjZGVmaW5lIEhXX0JFQUNPTl9DT05URU5UX0xFTgkoSFdfQkVBQ09OX09GRlNFVCAtIFRYV0lfU0laRSkKKworLy8gSE9TVC1NQ1Ugc2hhcmVkIG1lbW9yeSAtIGJhc2UgYWRkcmVzcyA9IDB4MjEwMAorI2RlZmluZSBIT1NUX0NNRF9DU1IJCTB4NDA0CisjZGVmaW5lIEgyTV9NQUlMQk9YX0NTUiAgICAgICAgIDB4NzAxMAorI2RlZmluZSBIMk1fTUFJTEJPWF9DSUQgICAgICAgICAweDcwMTQKKyNkZWZpbmUgSDJNX01BSUxCT1hfU1RBVFVTICAgICAgMHg3MDFjCisjZGVmaW5lIEgyTV9JTlRfU1JDICAgICAgICAgICAgIDB4NzAyNAorI2RlZmluZSBIMk1fQkJQX0FHRU5UICAgICAgICAgICAweDcwMjgKKyNkZWZpbmUgTTJIX0NNRF9ET05FX0NTUiAgICAgICAgMHgwMDBjCisjZGVmaW5lIE1DVV9UWE9QX0FSUkFZX0JBU0UgICAgIDB4MDAwYyAgIC8vIFRPRE86IHRvIGJlIHByb3ZpZGVkIGJ5IEFsYmVydAorI2RlZmluZSBNQ1VfVFhPUF9FTlRSWV9TSVpFICAgICAzMiAgICAgICAvLyBUT0RPOiB0byBiZSBwcm92aWRlZCBieSBBbGJlcnQKKyNkZWZpbmUgTUFYX05VTV9PRl9UWE9QX0VOVFJZICAgMTYgICAgICAgLy8gVE9ETzogbXVzdCBiZSBzYW1lIHdpdGggODA1MSBmaXJtd2FyZQorI2RlZmluZSBNQ1VfTUJPWF9WRVJTSU9OICAgICAgICAweDAxICAgICAvLyBUT0RPOiB0byBiZSBjb25maXJtZWQgYnkgQWxiZXJ0CisjZGVmaW5lIE1DVV9NQk9YX1ZFUlNJT05fT0ZGU0VUIDUgICAgICAgIC8vIFRPRE86IHRvIGJlIHByb3ZpZGVkIGJ5IEFsYmVydAorCisvLworLy8gSG9zdCBETUEgcmVnaXN0ZXJzIC0gYmFzZSBhZGRyZXNzIDB4MjAwIC4gIFRYMC0zPUVEQ0FRaWQwLTMsIFRYND1IQ0NBLCBUWDU9TUdNVCwKKy8vCisvLworLy8gIERNQSBSSU5HIERFU0NSSVBUT1IKKy8vCisjZGVmaW5lIEUyUFJPTV9DU1IgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIElPX0NOVExfQ1NSICAgICAgICAgMHg3N2QwCisKKyNpZmRlZiBSVDI4NzAKKy8vIDgwNTEgZmlybXdhcmUgaW1hZ2UgZm9yIHVzYiAtIHVzZSBsYXN0LWhhbGYgYmFzZSBhZGRyZXNzID0gMHgzMDAwCisjZGVmaW5lIEZJUk1XQVJFX0lNQUdFX0JBU0UgICAgIDB4MzAwMAorI2RlZmluZSBNQVhfRklSTVdBUkVfSU1BR0VfU0laRSAweDEwMDAgICAgLy8gNGtieXRlCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKy8vIFRPRE86ID8/Pz8/IG9sZCBSVDI1NjAgcmVnaXN0ZXJzLiB0byBrZWVwIHRoZW0gb3IgcmVtb3ZlIHRoZW0/CisvLyNkZWZpbmUgTUNBU1QwICAgICAgICAgICAgICAgICAgMHgwMTc4ICAvLyBtdWx0aWNhc3QgZmlsdGVyIHJlZ2lzdGVyIDAKKy8vI2RlZmluZSBNQ0FTVDEgICAgICAgICAgICAgICAgICAweDAxN2MgIC8vIG11bHRpY2FzdCBmaWx0ZXIgcmVnaXN0ZXIgMQorCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFR4IC8JUnggLyBNZ210IHJpbmcgZGVzY3JpcHRvciBkZWZpbml0aW9uCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vIHRoZSBmb2xsb3dpbmcgUElEIHZhbHVlcyBhcmUgdXNlZCB0byBtYXJrIG91dGdvaW5nIGZyYW1lIHR5cGUgaW4gVFhELT5QSUQgc28gdGhhdAorLy8gcHJvcGVyIFRYIHN0YXRpc3RpY3MgY2FuIGJlIGNvbGxlY3RlZCBiYXNlZCBvbiB0aGVzZSBjYXRlZ29yaWVzCisvLyBiMy0yIG9mIFBJRCBmaWVsZCAtCisjZGVmaW5lIFBJRF9NR01UCQkJMHgwNQorI2RlZmluZSBQSURfQkVBQ09OCQkJMHgwYworI2RlZmluZSBQSURfREFUQV9OT1JNQUxVQ0FTVAkgCTB4MDIKKyNkZWZpbmUgUElEX0RBVEFfQU1QRFUJIAkweDA0CisjZGVmaW5lIFBJRF9EQVRBX05PX0FDSyAgICAJMHgwOAorI2RlZmluZSBQSURfREFUQV9OT1RfTk9STV9BQ0sJIAkweDAzCisvLyB2YWx1ZSBkb21haW4gb2YgcFR4RC0+SG9zdFFJZCAoNC1iaXQ6IDB+MTUpCisjZGVmaW5lIFFJRF9BQ19CSyAgICAgICAgICAgICAgIDEgICAvLyBtZWV0IEFDSSBkZWZpbml0aW9uIGluIDgwMi4xMWUKKyNkZWZpbmUgUUlEX0FDX0JFICAgICAgICAgICAgICAgMCAgIC8vIG1lZXQgQUNJIGRlZmluaXRpb24gaW4gODAyLjExZQorI2RlZmluZSBRSURfQUNfVkkgICAgICAgICAgICAgICAyCisjZGVmaW5lIFFJRF9BQ19WTyAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUUlEX0hDQ0EgICAgICAgICAgICAgICAgNAorI2RlZmluZSBOVU1fT0ZfVFhfUklORyAgICAgICAgICA1CisjZGVmaW5lIFFJRF9NR01UICAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFFJRF9SWCAgICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFFJRF9PVEhFUiAgICAgICAgICAgICAgIDE1CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBCQlAgJiBSRglkZWZpbml0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNkZWZpbmUJQlVTWQkJICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUJSURMRQkJICAgICAgICAgICAgICAgIDAKKworI2RlZmluZQlSRl9SMDAJCQkJCSAgICAwCisjZGVmaW5lCVJGX1IwMQkJCQkJICAgIDEKKyNkZWZpbmUJUkZfUjAyCQkJCQkgICAgMgorI2RlZmluZQlSRl9SMDMJCQkJCSAgICAzCisjZGVmaW5lCVJGX1IwNAkJCQkJICAgIDQKKyNkZWZpbmUJUkZfUjA1CQkJCQkgICAgNQorI2RlZmluZQlSRl9SMDYJCQkJCSAgICA2CisjZGVmaW5lCVJGX1IwNwkJCQkJICAgIDcKKyNkZWZpbmUJUkZfUjA4CQkJCQkgICAgOAorI2RlZmluZQlSRl9SMDkJCQkJCSAgICA5CisjZGVmaW5lCVJGX1IxMAkJCQkJICAgIDEwCisjZGVmaW5lCVJGX1IxMQkJCQkJICAgIDExCisjZGVmaW5lCVJGX1IxMgkJCQkJICAgIDEyCisjZGVmaW5lCVJGX1IxMwkJCQkJICAgIDEzCisjZGVmaW5lCVJGX1IxNAkJCQkJICAgIDE0CisjZGVmaW5lCVJGX1IxNQkJCQkJICAgIDE1CisjZGVmaW5lCVJGX1IxNgkJCQkJICAgIDE2CisjZGVmaW5lCVJGX1IxNwkJCQkJICAgIDE3CisjZGVmaW5lCVJGX1IxOAkJCQkJICAgIDE4CisjZGVmaW5lCVJGX1IxOQkJCQkJICAgIDE5CisjZGVmaW5lCVJGX1IyMAkJCQkJICAgIDIwCisjZGVmaW5lCVJGX1IyMQkJCQkJICAgIDIxCisjZGVmaW5lCVJGX1IyMgkJCQkJICAgIDIyCisjZGVmaW5lCVJGX1IyMwkJCQkJICAgIDIzCisjZGVmaW5lCVJGX1IyNAkJCQkJICAgIDI0CisjZGVmaW5lCVJGX1IyNQkJCQkJICAgIDI1CisjZGVmaW5lCVJGX1IyNgkJCQkJICAgIDI2CisjZGVmaW5lCVJGX1IyNwkJCQkJICAgIDI3CisjZGVmaW5lCVJGX1IyOAkJCQkJICAgIDI4CisjZGVmaW5lCVJGX1IyOQkJCQkJICAgIDI5CisjZGVmaW5lCVJGX1IzMAkJCQkJICAgIDMwCisjZGVmaW5lCVJGX1IzMQkJCQkJICAgIDMxCisKKyNkZWZpbmUJQkJQX1IwCQkJCQkgICAgMCAgLy8gdmVyc2lvbgorI2RlZmluZQlCQlBfUjEJCQkJICAgICAgICAxICAvLyBUU1NJCisjZGVmaW5lCUJCUF9SMiAgICAgICAgICAJCQkyICAvLyBUWCBjb25maWd1cmUKKyNkZWZpbmUgQkJQX1IzICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQkJQX1I0ICAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQkJQX1I1ICAgICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQkJQX1I2ICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUJQkJQX1IxNAkJCSAgICAgICAgICAgIDE0IC8vIFJYIGNvbmZpZ3VyZQorI2RlZmluZSBCQlBfUjE2ICAgICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQkJQX1IxNyAgICAgICAgICAgICAgICAgICAgIDE3IC8vIFJYIHNlbnNpYmlsaXR5CisjZGVmaW5lIEJCUF9SMTggICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBCQlBfUjIxICAgICAgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgQkJQX1IyMiAgICAgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIEJCUF9SMjQgICAgICAgICAgICAgICAgICAgICAyNAorI2RlZmluZSBCQlBfUjI1ICAgICAgICAgICAgICAgICAgICAgMjUKKyNkZWZpbmUgQkJQX1IzMSAgICAgICAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIEJCUF9SNDkgICAgICAgICAgICAgICAgICAgICA0OSAvL1RTU0kKKyNkZWZpbmUgQkJQX1I1MCAgICAgICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lIEJCUF9SNTEgICAgICAgICAgICAgICAgICAgICA1MQorI2RlZmluZSBCQlBfUjUyICAgICAgICAgICAgICAgICAgICAgNTIKKyNkZWZpbmUgQkJQX1I1NSAgICAgICAgICAgICAgICAgICAgIDU1CisjZGVmaW5lIEJCUF9SNjIgICAgICAgICAgICAgICAgICAgICA2MiAvLyBSeCBTUTAgVGhyZXNob2xkIEhJR0gKKyNkZWZpbmUgQkJQX1I2MyAgICAgICAgICAgICAgICAgICAgIDYzCisjZGVmaW5lIEJCUF9SNjQgICAgICAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBCQlBfUjY1ICAgICAgICAgICAgICAgICAgICAgNjUKKyNkZWZpbmUgQkJQX1I2NiAgICAgICAgICAgICAgICAgICAgIDY2CisjZGVmaW5lIEJCUF9SNjcgICAgICAgICAgICAgICAgICAgICA2NworI2RlZmluZSBCQlBfUjY4ICAgICAgICAgICAgICAgICAgICAgNjgKKyNkZWZpbmUgQkJQX1I2OSAgICAgICAgICAgICAgICAgICAgIDY5CisjZGVmaW5lIEJCUF9SNzAgICAgICAgICAgICAgICAgICAgICA3MCAvLyBSeCBBR0MgU1EgQ0NLIFhjb3JyIHRocmVzaG9sZAorI2RlZmluZSBCQlBfUjczICAgICAgICAgICAgICAgICAgICAgNzMKKyNkZWZpbmUgQkJQX1I3NQkJCQkJCTc1CisjZGVmaW5lIEJCUF9SNzcgICAgICAgICAgICAgICAgICAgICA3NworI2RlZmluZSBCQlBfUjc5ICAgICAgICAgICAgICAgICAgICAgNzkKKyNkZWZpbmUgQkJQX1I4MCAgICAgICAgICAgICAgICAgICAgIDgwCisjZGVmaW5lIEJCUF9SODEgICAgICAgICAgICAgICAgICAgICA4MQorI2RlZmluZSBCQlBfUjgyICAgICAgICAgICAgICAgICAgICAgODIKKyNkZWZpbmUgQkJQX1I4MyAgICAgICAgICAgICAgICAgICAgIDgzCisjZGVmaW5lIEJCUF9SODQgICAgICAgICAgICAgICAgICAgICA4NAorI2RlZmluZSBCQlBfUjg2CQkJCQkJODYKKyNkZWZpbmUgQkJQX1I5MQkJCQkJCTkxCisjZGVmaW5lIEJCUF9SOTIJCQkJCQk5MgorI2RlZmluZSBCQlBfUjk0ICAgICAgICAgICAgICAgICAgICAgOTQgLy8gVHggR2FpbiBDb250cm9sCisjZGVmaW5lIEJCUF9SMTAzICAgICAgICAgICAgICAgICAgICAxMDMKKyNkZWZpbmUgQkJQX1IxMDUgICAgICAgICAgICAgICAgICAgIDEwNQorI2RlZmluZSBCQlBfUjExMyAgICAgICAgICAgICAgICAgICAgMTEzCisjZGVmaW5lIEJCUF9SMTE0ICAgICAgICAgICAgICAgICAgICAxMTQKKyNkZWZpbmUgQkJQX1IxMTUgICAgICAgICAgICAgICAgICAgIDExNQorI2RlZmluZSBCQlBfUjExNiAgICAgICAgICAgICAgICAgICAgMTE2CisjZGVmaW5lIEJCUF9SMTE3ICAgICAgICAgICAgICAgICAgICAxMTcKKyNkZWZpbmUgQkJQX1IxMTggICAgICAgICAgICAgICAgICAgIDExOAorI2RlZmluZSBCQlBfUjExOSAgICAgICAgICAgICAgICAgICAgMTE5CisjZGVmaW5lIEJCUF9SMTIwICAgICAgICAgICAgICAgICAgICAxMjAKKyNkZWZpbmUgQkJQX1IxMjEgICAgICAgICAgICAgICAgICAgIDEyMQorI2RlZmluZSBCQlBfUjEyMiAgICAgICAgICAgICAgICAgICAgMTIyCisjZGVmaW5lIEJCUF9SMTIzICAgICAgICAgICAgICAgICAgICAxMjMKKyNpZmRlZiBSVDMweHgKKyNkZWZpbmUgQkJQX1IxMzggICAgICAgICAgICAgICAgICAgIDEzOCAvLyBhZGQgYnkgam9obmxpLCBSRiBwb3dlciBzZXF1ZW5jZSBzZXR1cCwgQURDIGR5bmFtaWMgb24vb2ZmIGNvbnRyb2wKKyNlbmRpZiAvLyBSVDMweHggLy8KKworCisjZGVmaW5lIEJCUFI5NF9ERUZBVUxUICAgICAgICAgICAgICAweDA2IC8vIEFkZCAxIHZhbHVlIHdpbGwgZ2FpbiAxZGIKKworLy8jZGVmaW5lIFBIWV9UUl9TV0lUQ0hfVElNRSAgICAgICAgICA1ICAvLyB1c2VjCisKKy8vI2RlZmluZSBCQlBfUjE3X0xPV19TRU5TSUJJTElUWSAgICAgMHg1MAorLy8jZGVmaW5lIEJCUF9SMTdfTUlEX1NFTlNJQklMSVRZICAgICAweDQxCisvLyNkZWZpbmUgQkJQX1IxN19EWU5BTUlDX1VQX0JPVU5EICAgIDB4NDAKKyNkZWZpbmUgUlNTSV9GT1JfVkVSWV9MT1dfU0VOU0lCSUxJVFkgLTM1CisjZGVmaW5lIFJTU0lfRk9SX0xPV19TRU5TSUJJTElUWSAgICAgIC01OAorI2RlZmluZSBSU1NJX0ZPUl9NSURfTE9XX1NFTlNJQklMSVRZICAtODAKKyNkZWZpbmUgUlNTSV9GT1JfTUlEX1NFTlNJQklMSVRZICAgICAgLTkwCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRUVQUk9NIGRlZmluaXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2RlZmluZSBFRURPICAgICAgICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBFRURJICAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBFRUNTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBFRVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBFRVJMICAgICAgICAgICAgICAgICAgICAgICAgMHg4MAorCisjZGVmaW5lIEVFUFJPTV9XUklURV9PUENPREUgICAgICAgICAweDA1CisjZGVmaW5lIEVFUFJPTV9SRUFEX09QQ09ERSAgICAgICAgICAweDA2CisjZGVmaW5lIEVFUFJPTV9FV0RTX09QQ09ERSAgICAgICAgICAweDEwCisjZGVmaW5lIEVFUFJPTV9FV0VOX09QQ09ERSAgICAgICAgICAweDEzCisKKyNkZWZpbmUJTlVNX0VFUFJPTV9CQlBfUEFSTVMJCTE5CQkJLy8gSW5jbHVkZSBOSUMgQ29uZmlnIDAsIDEsIENSLCBUWCBBTEMgc3RlcCwgQkJQcworI2RlZmluZQlOVU1fRUVQUk9NX1RYX0dfUEFSTVMJCTcKKyNkZWZpbmUJRUVQUk9NX05JQzFfT0ZGU0VUICAgICAgICAgIDB4MzQJCS8vIFRoZSBhZGRyZXNzIGlzIGZyb20gTklDIGNvbmZpZyAwLCBub3QgQkJQIHJlZ2lzdGVyIElECisjZGVmaW5lCUVFUFJPTV9OSUMyX09GRlNFVCAgICAgICAgICAweDM2CQkvLyBUaGUgYWRkcmVzcyBpcyBmcm9tIE5JQyBjb25maWcgMCwgbm90IEJCUCByZWdpc3RlciBJRAorI2RlZmluZQlFRVBST01fQkJQX0JBU0VfT0ZGU0VUCQkweGYwCQkvLyBUaGUgYWRkcmVzcyBpcyBmcm9tIE5JQyBjb25maWcgMCwgbm90IEJCUCByZWdpc3RlciBJRAorI2RlZmluZQlFRVBST01fR19UWF9QV1JfT0ZGU0VUCQkweDUyCisjZGVmaW5lCUVFUFJPTV9HX1RYMl9QV1JfT0ZGU0VUCQkweDYwCisjZGVmaW5lIEVFUFJPTV9MRUQxX09GRlNFVAkJCTB4M2MKKyNkZWZpbmUgRUVQUk9NX0xFRDJfT0ZGU0VUCQkJMHgzZQorI2RlZmluZSBFRVBST01fTEVEM19PRkZTRVQJCQkweDQwCisjZGVmaW5lIEVFUFJPTV9MTkFfT0ZGU0VUCQkJMHg0NAorI2RlZmluZSBFRVBST01fUlNTSV9CR19PRkZTRVQJCTB4NDYKKyNkZWZpbmUgRUVQUk9NX1JTU0lfQV9PRkZTRVQJCTB4NGEKKyNkZWZpbmUgRUVQUk9NX0RFRklORV9NQVhfVFhQV1IJCTB4NGUKKyNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzIwTUhaXzJfNEcJMHhkZQkvLyAyME1IWiAyLjRHIHR4IHBvd2VyLgorI2RlZmluZSBFRVBST01fVFhQT1dFUl9CWVJBVEVfNDBNSFpfMl80RwkweGVlCS8vIDQwTUhaIDIuNEcgdHggcG93ZXIuCisjZGVmaW5lIEVFUFJPTV9UWFBPV0VSX0JZUkFURV8yME1IWl81RwkJMHhmYQkvLyAyME1IWiA1RyB0eCBwb3dlci4KKyNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQllSQVRFXzQwTUhaXzVHCQkweDEwYQkvLyA0ME1IWiA1RyB0eCBwb3dlci4KKyNkZWZpbmUgRUVQUk9NX0FfVFhfUFdSX09GRlNFVCAgICAgIDB4NzgKKyNkZWZpbmUgRUVQUk9NX0FfVFgyX1BXUl9PRkZTRVQgICAgICAweGE2CisvLyNkZWZpbmUgRUVQUk9NX0phcGFuX1RYX1BXUl9PRkZTRVQgICAgICAweDkwIC8vIDgwMi4xMWoKKy8vI2RlZmluZSBFRVBST01fSmFwYW5fVFgyX1BXUl9PRkZTRVQgICAgICAweGJlCisvLyNkZWZpbmUgRUVQUk9NX1RTU0lfUkVGX09GRlNFVAkweDU0CisvLyNkZWZpbmUgRUVQUk9NX1RTU0lfREVMVEFfT0ZGU0VUCTB4MjQKKy8vI2RlZmluZSBFRVBST01fQ0NLX1RYX1BXUl9PRkZTRVQgIDB4NjIKKy8vI2RlZmluZSBFRVBST01fQ0FMSUJSQVRFX09GRlNFVAkweDdjCisjZGVmaW5lIEVFUFJPTV9WRVJTSU9OX09GRlNFVCAgICAgICAweDAyCisjZGVmaW5lCUVFUFJPTV9GUkVRX09GRlNFVAkJCTB4M2EKKyNkZWZpbmUgRUVQUk9NX1RYUE9XRVJfQllSQVRFIAkweGRlCS8vIDIwTUhaIHBvd2VyLgorI2RlZmluZSBFRVBST01fVFhQT1dFUl9ERUxUQQkJMHg1MAkvLyAyME1IWiBBTkQgNDAgTUhaIHVzZSBkaWZmZXJlbnQgcG93ZXIuIFRoaXMgaXMgZGVsdGEgaW4gNDBNSFouCisjZGVmaW5lIFZBTElEX0VFUFJPTV9WRVJTSU9OICAgICAgICAxCisKKy8vIFBhaXJLZXlNb2RlIGRlZmluaXRpb24KKyNkZWZpbmUgUEtNT0RFX05PTkUgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUEtNT0RFX1dFUDY0ICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUEtNT0RFX1dFUDEyOCAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUEtNT0RFX1RLSVAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUEtNT0RFX0FFUyAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUEtNT0RFX0NLSVA2NCAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgUEtNT0RFX0NLSVAxMjggICAgICAgICAgICAgIDYKKyNkZWZpbmUgUEtNT0RFX1RLSVBfTk9fTUlDICAgICAgICAgIDcgICAgICAgLy8gTUlDIGFwcGVuZGVkIGJ5IGRyaXZlcjogbm90IGEgdmFsaWQgdmFsdWUgaW4gaGFyZHdhcmUga2V5IHRhYmxlCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gV0NJRCAgZm9ybWF0CisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vNy4xCVdDSUQgIEVOVFJZICBmb3JtYXQgIDogOGJ5dGVzCit0eXBlZGVmCXN0cnVjdAlfV0NJRF9FTlRSWV9TVFJVQyB7CisJVUNIQVIJCVJYQkFCaXRtYXA3OyAgICAvLyBiaXQwIGZvciBUSUQ4LCBiaXQ3IGZvciBUSUQgMTUKKwlVQ0hBUgkJUlhCQUJpdG1hcDA7ICAgIC8vIGJpdDAgZm9yIFRJRDAsIGJpdDcgZm9yIFRJRCA3CisJVUNIQVIJCU1BQ1s2XTsJLy8gMCBmb3Igc2hhcmVkIGtleSB0YWJsZS4gIDEgZm9yIHBhaXJ3aXNlIGtleSB0YWJsZQorfQlXQ0lEX0VOVFJZX1NUUlVDLCAqUFdDSURfRU5UUllfU1RSVUM7CisKKy8vOC4xLjEJU0VDVVJJVFkgIEtFWSAgZm9ybWF0ICA6IDhEVworLy8gMzItYnl0ZSBwZXIgZW50cnksIHRvdGFsIDE2LWVudHJ5IGZvciBzaGFyZWQga2V5IHRhYmxlLCA2NC1lbnRyeSBmb3IgcGFpcndpc2Uga2V5IHRhYmxlCit0eXBlZGVmIHN0cnVjdCBfSFdfS0VZX0VOVFJZIHsgICAgICAgICAgLy8gMzItYnl0ZSBwZXIgZW50cnkKKyAgICBVQ0hBUiAgIEtleVsxNl07CisgICAgVUNIQVIgICBUeE1pY1s4XTsKKyAgICBVQ0hBUiAgIFJ4TWljWzhdOworfSBIV19LRVlfRU5UUlksICpQSFdfS0VZX0VOVFJZOworCisvLzguMS4yCUlWL0VJViAgZm9ybWF0ICA6IDJEVworCisvLzguMS4zCVJYIGF0dHJpYnV0ZSBlbnRyeSBmb3JtYXQgIDogMURXCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZglzdHJ1Y3QJX01BQ19BVFRSSUJVVEVfU1RSVUMgeworCVVJTlQzMgkJcnN2OjIyOworCVVJTlQzMgkJUlhXSVVERjozOworCVVJTlQzMgkJQlNTSURJZHg6MzsgLy9tdWx0aXBsZUJTUyBpbmRleCBmb3IgdGhlIFdDSUQKKwlVSU5UMzIJCVBhaXJLZXlNb2RlOjM7CisJVUlOVDMyCQlLZXlUYWI6MTsJLy8gMCBmb3Igc2hhcmVkIGtleSB0YWJsZS4gIDEgZm9yIHBhaXJ3aXNlIGtleSB0YWJsZQorfQlNQUNfQVRUUklCVVRFX1NUUlVDLCAqUE1BQ19BVFRSSUJVVEVfU1RSVUM7CisjZWxzZQordHlwZWRlZglzdHJ1Y3QJX01BQ19BVFRSSUJVVEVfU1RSVUMgeworCVVJTlQzMgkJS2V5VGFiOjE7CS8vIDAgZm9yIHNoYXJlZCBrZXkgdGFibGUuICAxIGZvciBwYWlyd2lzZSBrZXkgdGFibGUKKwlVSU5UMzIJCVBhaXJLZXlNb2RlOjM7CisJVUlOVDMyCQlCU1NJRElkeDozOyAvL211bHRpcGxlQlNTIGluZGV4IGZvciB0aGUgV0NJRAorCVVJTlQzMgkJUlhXSVVERjozOworCVVJTlQzMgkJcnN2OjIyOworfQlNQUNfQVRUUklCVVRFX1NUUlVDLCAqUE1BQ19BVFRSSUJVVEVfU1RSVUM7CisjZW5kaWYKKworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFRYIC8gUlggcmluZyBkZXNjcmlwdG9yIGZvcm1hdAorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vIHRoZSBmaXJzdCAyNC1ieXRlIGluIFRYRCBpcyBjYWxsZWQgVFhJTkZPIGFuZCB3aWxsIGJlIERNQWVkIHRvIE1BQyBibG9jayB0aHJvdWdoIFRYRklGTy4KKy8vIE1BQyBibG9jayB1c2UgdGhpcyBUWElORk8gdG8gY29udHJvbCB0aGUgdHJhbnNtaXNzaW9uIGJlaGF2aW9yIG9mIHRoaXMgZnJhbWUuCisjZGVmaW5lIEZJRk9fTUdNVCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGSUZPX0hDQ0EgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRklGT19FRENBICAgICAgICAgICAgICAgICAyCisKKy8vCisvLyBUWCBkZXNjcmlwdG9yIGZvcm1hdCwgVHgJcmluZywgTWdtdCBSaW5nCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJc3RydWN0CVBBQ0tFRCBfVFhEX1NUUlVDIHsKKwkvLyBXb3JkIDAKKwlVSU5UMzIJCVNEUHRyMDsKKwkvLyBXb3JkIDEKKwlVSU5UMzIJCURNQURPTkU6MTsKKwlVSU5UMzIJCUxhc3RTZWMwOjE7CisJVUlOVDMyCQlTRExlbjA6MTQ7CisJVUlOVDMyCQlCdXJzdDoxOworCVVJTlQzMgkJTGFzdFNlYzE6MTsKKwlVSU5UMzIJCVNETGVuMToxNDsKKwkvLyBXb3JkIDIKKwlVSU5UMzIJCVNEUHRyMTsKKwkvLyBXb3JkIDMKKwlVSU5UMzIJCUlDTzoxOworCVVJTlQzMgkJVUNPOjE7CisJVUlOVDMyCQlUQ086MTsKKwlVSU5UMzIJCXJzdjoyOworCVVJTlQzMgkJUVNFTDoyOwkvLyBzZWxlY3Qgb24tY2hpcCBGSUZPIElEIGZvciAybmQtc3RhZ2Ugb3V0cHV0IHNjaGVkdWxlci4wOk1HTVQsIDE6SENDQSAyOkVEQ0EKKwlVSU5UMzIJCVdJVjoxOwkvLyBXaXJlbGVzcyBJbmZvIFZhbGlkLiAxIGlmIERyaXZlciBhbHJlYWR5IGZpbGwgV0ksICBvIGlmIERNQSBuZWVkcyB0byBjb3B5IFdJIHRvIGNvcnJlY3Rwb3NpdGlvbgorCVVJTlQzMgkJcnN2MjoyNDsKK30JVFhEX1NUUlVDLCAqUFRYRF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX1RYRF9TVFJVQyB7CisJLy8gV29yZAkwCisJVUlOVDMyCQlTRFB0cjA7CisJLy8gV29yZAkxCisJVUlOVDMyCQlTRExlbjE6MTQ7CisJVUlOVDMyCQlMYXN0U2VjMToxOworCVVJTlQzMgkJQnVyc3Q6MTsKKwlVSU5UMzIJCVNETGVuMDoxNDsKKwlVSU5UMzIJCUxhc3RTZWMwOjE7CisJVUlOVDMyCQlETUFET05FOjE7CisJLy9Xb3JkMgorCVVJTlQzMgkJU0RQdHIxOworCS8vV29yZDMKKwlVSU5UMzIJCXJzdjI6MjQ7CisJVUlOVDMyCQlXSVY6MTsJLy8gV2lyZWxlc3MgSW5mbyBWYWxpZC4gMSBpZiBEcml2ZXIgYWxyZWFkeSBmaWxsIFdJLCAgbyBpZiBETUEgbmVlZHMgdG8gY29weSBXSSB0byBjb3JyZWN0cG9zaXRpb24KKwlVSU5UMzIJCVFTRUw6MjsJLy8gc2VsZWN0IG9uLWNoaXAgRklGTyBJRCBmb3IgMm5kLXN0YWdlIG91dHB1dCBzY2hlZHVsZXIuMDpNR01ULCAxOkhDQ0EgMjpFRENBCisJVUlOVDMyCQlyc3Y6MjsKKwlVSU5UMzIJCVRDTzoxOwkvLworCVVJTlQzMgkJVUNPOjE7CS8vCisJVUlOVDMyCQlJQ086MTsJLy8KK30JVFhEX1NUUlVDLCAqUFRYRF9TVFJVQzsKKyNlbmRpZgorCisKKy8vCisvLyBUWEQgV2lyZWxlc3MgSW5mb3JtYXRpb24gZm9ybWF0IGZvciBUeCByaW5nIGFuZCBNZ210IFJpbmcKKy8vCisvL3R4b3AgOiBmb3IgdHhvcCBtb2RlCisvLyAwOnR4b3AgZm9yIHRoZSBNUERVIGZyYW1lIHdpbGwgYmUgaGFuZGxlcyBieSBBU0lDIGJ5IHJlZ2lzdGVyCisvLyAxLzIvMzp0aGUgTVBEVSBmcmFtZSBpcyBzZW5kIGFmdGVyIFBJRlMvYmFja29mZi9TSUZTCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZglzdHJ1Y3QJUEFDS0VEIF9UWFdJX1NUUlVDIHsKKwkvLyBXb3JkIDAKKwlVSU5UMzIJCVBIWU1PREU6MjsKKwlVSU5UMzIJCVR4QkY6MTsJLy8gMyozCisJVUlOVDMyCQlyc3YyOjE7CisvLwlVSU5UMzIJCXJzdjI6MjsKKwlVSU5UMzIJCUlmczoxOwkvLworCVVJTlQzMgkJU1RCQzoyOwkvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCVVJTlQzMgkJU2hvcnRHSToxOworCVVJTlQzMgkJQlc6MTsJLy9jaGFubmVsIGJhbmR3aWR0aCAyME1IeiBvciA0MCBNSHoKKwlVSU5UMzIJCU1DUzo3OworCisJVUlOVDMyCQlyc3Y6NjsKKwlVSU5UMzIJCXR4b3A6MjsJLy90eCBiYWNrIG9mZiBtb2RlIDA6SFQgVFhPUCBydWxlICwgMTpQSUZTIFRYICwyOkJhY2tvZmYsIDM6c2lmcyBvbmx5IHdoZW4gcHJldmlvdXMgZnJhbWUgZXhjaGFuZ2UgaXMgc3VjY2Vzc2Z1bC4KKwlVSU5UMzIJCU1wZHVEZW5zaXR5OjM7CisJVUlOVDMyCQlBTVBEVToxOworCisJVUlOVDMyCQlUUzoxOworCVVJTlQzMgkJQ0ZBQ0s6MTsKKwlVSU5UMzIJCU1JTU9wczoxOwkvLyB0aGUgcmVtb3RlIHBlZXIgaXMgaW4gZHluYW1pYyBNSU1PLVBTIG1vZGUKKwlVSU5UMzIJCUZSQUc6MTsJCS8vIDEgdG8gaW5mb3JtIFRLSVAgZW5naW5lIHRoaXMgaXMgYSBmcmFnbWVudC4KKwkvLyBXb3JkIDEKKwlVSU5UMzIJCVBhY2tldElkOjQ7CisJVUlOVDMyCQlNUERVdG90YWxCeXRlQ291bnQ6MTI7CisJVUlOVDMyCQlXaXJlbGVzc0NsaUlEOjg7CisJVUlOVDMyCQlCQVdpblNpemU6NjsKKwlVSU5UMzIJCU5TRVE6MTsKKwlVSU5UMzIJCUFDSzoxOworCS8vIFdvcmQgMgorCVVJTlQzMgkJSVY7CisJLy8gV29yZCAzCisJVUlOVDMyCQlFSVY7Cit9CVRYV0lfU1RSVUMsICpQVFhXSV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX1RYV0lfU1RSVUMgeworCS8vIFdvcmQJMAorCVVJTlQzMgkJRlJBRzoxOwkJLy8gMSB0byBpbmZvcm0gVEtJUCBlbmdpbmUgdGhpcyBpcyBhIGZyYWdtZW50LgorCVVJTlQzMgkJTUlNT3BzOjE7CS8vIHRoZSByZW1vdGUgcGVlciBpcyBpbiBkeW5hbWljIE1JTU8tUFMgbW9kZQorCVVJTlQzMgkJQ0ZBQ0s6MTsKKwlVSU5UMzIJCVRTOjE7CisKKwlVSU5UMzIJCUFNUERVOjE7CisJVUlOVDMyCQlNcGR1RGVuc2l0eTozOworCVVJTlQzMgkJdHhvcDoyOwkvL0ZPUiAiVEhJUyIgZnJhbWUuIDA6SFQgVFhPUCBydWxlICwgMTpQSUZTIFRYICwyOkJhY2tvZmYsIDM6c2lmcyBvbmx5IHdoZW4gcHJldmlvdXMgZnJhbWUgZXhjaGFuZ2UgaXMgc3VjY2Vzc2Z1bC4KKwlVSU5UMzIJCXJzdjo2OworCisJVUlOVDMyCQlNQ1M6NzsKKwlVSU5UMzIJCUJXOjE7CS8vY2hhbm5lbCBiYW5kd2lkdGggMjBNSHogb3IgNDAgTUh6CisJVUlOVDMyCQlTaG9ydEdJOjE7CisJVUlOVDMyCQlTVEJDOjI7CS8vIDE6IFNUQkMgc3VwcG9ydCBNQ1MgPTAtNywgICAyLDMgOiBSRVNFUlZFCisJVUlOVDMyCQlJZnM6MTsJLy8KKy8vCVVJTlQzMgkJcnN2MjoyOwkvL2NoYW5uZWwgYmFuZHdpZHRoIDIwTUh6IG9yIDQwIE1IegorCVVJTlQzMgkJcnN2MjoxOworCVVJTlQzMgkJVHhCRjoxOwkvLyAzKjMKKwlVSU5UMzIJCVBIWU1PREU6MjsKKwkvLyBXb3JkCTEKKwlVSU5UMzIJCUFDSzoxOworCVVJTlQzMgkJTlNFUToxOworCVVJTlQzMgkJQkFXaW5TaXplOjY7CisJVUlOVDMyCQlXaXJlbGVzc0NsaUlEOjg7CisJVUlOVDMyCQlNUERVdG90YWxCeXRlQ291bnQ6MTI7CisJVUlOVDMyCQlQYWNrZXRJZDo0OworCS8vV29yZDIKKwlVSU5UMzIJCUlWOworCS8vV29yZDMKKwlVSU5UMzIJCUVJVjsKK30JVFhXSV9TVFJVQywgKlBUWFdJX1NUUlVDOworI2VuZGlmCisvLworLy8gUnggZGVzY3JpcHRvciBmb3JtYXQsIFJ4CVJpbmcKKy8vCisvLworLy8gUlhXSSB3aXJlbGVzcyBpbmZvcm1hdGlvbiBmb3JtYXQsIGluIFBCRi4gaW52aXNpYmxlIGluIGRyaXZlci4KKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZglzdHJ1Y3QJUEFDS0VEIF9SWFdJX1NUUlVDIHsKKwkvLyBXb3JkIDAKKwlVSU5UMzIJCVRJRDo0OworCVVJTlQzMgkJTVBEVXRvdGFsQnl0ZUNvdW50OjEyOworCVVJTlQzMgkJVURGOjM7CisJVUlOVDMyCQlCU1NJRDozOworCVVJTlQzMgkJS2V5SW5kZXg6MjsKKwlVSU5UMzIJCVdpcmVsZXNzQ2xpSUQ6ODsKKwkvLyBXb3JkIDEKKwlVSU5UMzIJCVBIWU1PREU6MjsgICAgICAgICAgICAgIC8vIDE6IHRoaXMgUlggZnJhbWUgaXMgdW5pY2FzdCB0byBtZQorCVVJTlQzMgkJcnN2OjM7CisJVUlOVDMyCQlTVEJDOjI7CisJVUlOVDMyCQlTaG9ydEdJOjE7CisJVUlOVDMyCQlCVzoxOworCVVJTlQzMgkJTUNTOjc7CisJVUlOVDMyCQlTRVFVRU5DRToxMjsKKwlVSU5UMzIJCUZSQUc6NDsKKwkvLyBXb3JkIDIKKwlVSU5UMzIJCXJzdjE6ODsKKwlVSU5UMzIJCVJTU0kyOjg7CisJVUlOVDMyCQlSU1NJMTo4OworCVVJTlQzMgkJUlNTSTA6ODsKKwkvLyBXb3JkIDMKKwlVSU5UMzIJCXJzdjI6MTY7CisJVUlOVDMyCQlTTlIxOjg7CisJVUlOVDMyCQlTTlIwOjg7Cit9CVJYV0lfU1RSVUMsICpQUlhXSV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXN0cnVjdAlQQUNLRUQgX1JYV0lfU1RSVUMgeworCS8vIFdvcmQJMAorCVVJTlQzMgkJV2lyZWxlc3NDbGlJRDo4OworCVVJTlQzMgkJS2V5SW5kZXg6MjsKKwlVSU5UMzIJCUJTU0lEOjM7CisJVUlOVDMyCQlVREY6MzsKKwlVSU5UMzIJCU1QRFV0b3RhbEJ5dGVDb3VudDoxMjsKKwlVSU5UMzIJCVRJRDo0OworCS8vIFdvcmQJMQorCVVJTlQzMgkJRlJBRzo0OworCVVJTlQzMgkJU0VRVUVOQ0U6MTI7CisJVUlOVDMyCQlNQ1M6NzsKKwlVSU5UMzIJCUJXOjE7CisJVUlOVDMyCQlTaG9ydEdJOjE7CisJVUlOVDMyCQlTVEJDOjI7CisJVUlOVDMyCQlyc3Y6MzsKKwlVSU5UMzIJCVBIWU1PREU6MjsgICAgICAgICAgICAgIC8vIDE6IHRoaXMgUlggZnJhbWUgaXMgdW5pY2FzdCB0byBtZQorCS8vV29yZDIKKwlVSU5UMzIJCVJTU0kwOjg7CisJVUlOVDMyCQlSU1NJMTo4OworCVVJTlQzMgkJUlNTSTI6ODsKKwlVSU5UMzIJCXJzdjE6ODsKKwkvL1dvcmQzCisJVUlOVDMyCQlTTlIwOjg7CisJVUlOVDMyCQlTTlIxOjg7CisJVUlOVDMyCQlyc3YyOjE2OworfQlSWFdJX1NUUlVDLCAqUFJYV0lfU1RSVUM7CisjZW5kaWYKKworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIEhPU1QtTUNVIGNvbW11bmljYXRpb24gZGF0YSBzdHJ1Y3R1cmUKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvLworLy8gSDJNX01BSUxCT1hfQ1NSOiBIb3N0LXRvLU1DVSBNYWlsYm94CisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYgdW5pb24gIF9IMk1fTUFJTEJPWF9TVFJVQyB7CisgICAgc3RydWN0IHsKKyAgICAgICAgVUlOVDMyICAgICAgIE93bmVyOjg7CisgICAgICAgIFVJTlQzMiAgICAgICBDbWRUb2tlbjo4OyAgICAvLyAweGZmIHRlbGxzIE1DVSBub3QgdG8gcmVwb3J0IENtZERvbmVJbnQgYWZ0ZXIgZXhjdXRpbmcgdGhlIGNvbW1hbmQKKyAgICAgICAgVUlOVDMyICAgICAgIEhpZ2hCeXRlOjg7CisgICAgICAgIFVJTlQzMiAgICAgICBMb3dCeXRlOjg7CisgICAgfSAgIGZpZWxkOworICAgIFVJTlQzMiAgICAgICAgICAgd29yZDsKK30gSDJNX01BSUxCT1hfU1RSVUMsICpQSDJNX01BSUxCT1hfU1RSVUM7CisjZWxzZQordHlwZWRlZiB1bmlvbiAgX0gyTV9NQUlMQk9YX1NUUlVDIHsKKyAgICBzdHJ1Y3QgeworICAgICAgICBVSU5UMzIgICAgICAgTG93Qnl0ZTo4OworICAgICAgICBVSU5UMzIgICAgICAgSGlnaEJ5dGU6ODsKKyAgICAgICAgVUlOVDMyICAgICAgIENtZFRva2VuOjg7CisgICAgICAgIFVJTlQzMiAgICAgICBPd25lcjo4OworICAgIH0gICBmaWVsZDsKKyAgICBVSU5UMzIgICAgICAgICAgIHdvcmQ7Cit9IEgyTV9NQUlMQk9YX1NUUlVDLCAqUEgyTV9NQUlMQk9YX1NUUlVDOworI2VuZGlmCisKKy8vCisvLyBNMkhfQ01EX0RPTkVfQ1NSOiBNQ1UtdG8tSG9zdCBjb21tYW5kIGNvbXBsZXRlIGluZGljYXRpb24KKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZiB1bmlvbiBfTTJIX0NNRF9ET05FX1NUUlVDIHsKKyAgICBzdHJ1Y3QgIHsKKyAgICAgICAgVUlOVDMyICAgICAgIENtZFRva2VuMzsKKyAgICAgICAgVUlOVDMyICAgICAgIENtZFRva2VuMjsKKyAgICAgICAgVUlOVDMyICAgICAgIENtZFRva2VuMTsKKyAgICAgICAgVUlOVDMyICAgICAgIENtZFRva2VuMDsKKyAgICB9IGZpZWxkOworICAgIFVJTlQzMiAgICAgICAgICAgd29yZDsKK30gTTJIX0NNRF9ET05FX1NUUlVDLCAqUE0ySF9DTURfRE9ORV9TVFJVQzsKKyNlbHNlCit0eXBlZGVmIHVuaW9uIF9NMkhfQ01EX0RPTkVfU1RSVUMgeworICAgIHN0cnVjdCAgeworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW4wOworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW4xOworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW4yOworICAgICAgICBVSU5UMzIgICAgICAgQ21kVG9rZW4zOworICAgIH0gZmllbGQ7CisgICAgVUlOVDMyICAgICAgICAgICB3b3JkOworfSBNMkhfQ01EX0RPTkVfU1RSVUMsICpQTTJIX0NNRF9ET05FX1NUUlVDOworI2VuZGlmCisKKworCisvLworLy8gTUNVX0xFRENTOiBNQ1UgTEVEIENvbnRyb2wgU2V0dGluZy4KKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZiB1bmlvbiAgX01DVV9MRURDU19TVFJVQyB7CisJc3RydWN0CXsKKwkJVUNIQVIJCVBvbGFyaXR5OjE7CisJCVVDSEFSCQlMZWRNb2RlOjc7CisJfSBmaWVsZDsKKwlVQ0hBUgkJCQl3b3JkOworfSBNQ1VfTEVEQ1NfU1RSVUMsICpQTUNVX0xFRENTX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYgdW5pb24gIF9NQ1VfTEVEQ1NfU1RSVUMgeworCXN0cnVjdAl7CisJCVVDSEFSCQlMZWRNb2RlOjc7CisJCVVDSEFSCQlQb2xhcml0eToxOworCX0gZmllbGQ7CisJVUNIQVIJCQl3b3JkOworfSBNQ1VfTEVEQ1NfU1RSVUMsICpQTUNVX0xFRENTX1NUUlVDOworI2VuZGlmCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFJlZ2lzdGVyIGZvcm1hdAorLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworCisvL05BVl9USU1FX0NGRyA6TkFWCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfTkFWX1RJTUVfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVU0hPUlQJCXJzdjo2OworCQlVU0hPUlQJCVplcm9TaWZzOjE7ICAgICAgICAgICAgICAgLy8gQXBwbGllZCB6ZXJvIFNJRlMgdGltZXIgYWZ0ZXIgT0ZETSBSWCAwOiBkaXNhYmxlCisJCVVTSE9SVAkJRWlmczo5OyAgICAgICAgICAgICAgIC8vIGluIHVuaXQgb2YgMS11cworCQlVQ0hBUiAgICAgICBTbG90VGltZTsgICAgLy8gaW4gdW5pdCBvZiAxLXVzCisJCVVDSEFSCQlTaWZzOyAgICAgICAgICAgICAgIC8vIGluIHVuaXQgb2YgMS11cworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JTkFWX1RJTUVfQ0ZHX1NUUlVDLCAqUE5BVl9USU1FX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9OQVZfVElNRV9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVDSEFSCQlTaWZzOyAgICAgICAgICAgICAgIC8vIGluIHVuaXQgb2YgMS11cworCQlVQ0hBUiAgICAgICBTbG90VGltZTsgICAgLy8gaW4gdW5pdCBvZiAxLXVzCisJCVVTSE9SVAkJRWlmczo5OyAgICAgICAgICAgICAgIC8vIGluIHVuaXQgb2YgMS11cworCQlVU0hPUlQJCVplcm9TaWZzOjE7ICAgICAgICAgICAgICAgLy8gQXBwbGllZCB6ZXJvIFNJRlMgdGltZXIgYWZ0ZXIgT0ZETSBSWCAwOiBkaXNhYmxlCisJCVVTSE9SVAkJcnN2OjY7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlOQVZfVElNRV9DRkdfU1RSVUMsICpQTkFWX1RJTUVfQ0ZHX1NUUlVDOworI2VuZGlmCisKKworCisKKworLy8KKy8vIFJYX0ZJTFRSX0NGRzogIC9SWCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JUlhfRklMVFJfQ0ZHX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCToxNTsKKwkJVUlOVDMyICAgICAgIERyb3BSc3ZDbnRsVHlwZToxOworCisgICAgICAgIAlVSU5UMzIgICAgICAgCURyb3BCQVI6MTsgICAgICAgLy8KKwkJVUlOVDMyCQlEcm9wQkE6MTsJCS8vCisJCVVJTlQzMgkJRHJvcFBzUG9sbDoxOwkJLy8gRHJvcCBQcy1Qb2xsCisJCVVJTlQzMgkJRHJvcFJ0czoxOwkJLy8gRHJvcCBQcy1Qb2xsCisKKwkJVUlOVDMyCQlEcm9wQ3RzOjE7CQkvLyBEcm9wIFBzLVBvbGwKKwkJVUlOVDMyCQlEcm9wQWNrOjE7CQkvLyBEcm9wIFBzLVBvbGwKKwkJVUlOVDMyCQlEcm9wQ0ZFbmQ6MTsJCS8vIERyb3AgUHMtUG9sbAorCQlVSU5UMzIJCURyb3BDRkVuZEFjazoxOwkJLy8gRHJvcCBQcy1Qb2xsCisKKwkJVUlOVDMyCQlEcm9wRHVwbGljYXRlOjE7CQkvLyBEcm9wIGR1cGxpY2F0ZSBmcmFtZQorCQlVSU5UMzIJCURyb3BCY2FzdDoxOwkJLy8gRHJvcCBicm9hZGNhc3QgZnJhbWVzCisJCVVJTlQzMgkJRHJvcE1jYXN0OjE7CQkvLyBEcm9wIG11bHRpY2FzdCBmcmFtZXMKKwkJVUlOVDMyCQlEcm9wVmVyRXJyOjE7CSAgICAvLyBEcm9wIHZlcnNpb24gZXJyb3IgZnJhbWUKKworCQlVSU5UMzIJCURyb3BOb3RNeUJTU0lEOjE7CQkJLy8gRHJvcCBmcmFtIFRvRHMgYml0IGlzIHRydWUKKwkJVUlOVDMyCQlEcm9wTm90VG9NZToxOwkJLy8gRHJvcCBub3QgdG8gbWUgdW5pY2FzdCBmcmFtZQorCQlVSU5UMzIJCURyb3BQaHlFcnI6MTsJCS8vIERyb3AgcGh5c2ljYWwgZXJyb3IKKwkJVUlOVDMyCQlEcm9wQ1JDRXJyOjE7CQkvLyBEcm9wIENSQyBlcnJvcgorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUlhfRklMVFJfQ0ZHX1NUUlVDLCAqUFJYX0ZJTFRSX0NGR19TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9SWF9GSUxUUl9DRkdfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJRHJvcENSQ0VycjoxOwkJLy8gRHJvcCBDUkMgZXJyb3IKKwkJVUlOVDMyCQlEcm9wUGh5RXJyOjE7CQkvLyBEcm9wIHBoeXNpY2FsIGVycm9yCisJCVVJTlQzMgkJRHJvcE5vdFRvTWU6MTsJCS8vIERyb3Agbm90IHRvIG1lIHVuaWNhc3QgZnJhbWUKKwkJVUlOVDMyCQlEcm9wTm90TXlCU1NJRDoxOwkJCS8vIERyb3AgZnJhbSBUb0RzIGJpdCBpcyB0cnVlCisKKwkJVUlOVDMyCQlEcm9wVmVyRXJyOjE7CSAgICAvLyBEcm9wIHZlcnNpb24gZXJyb3IgZnJhbWUKKwkJVUlOVDMyCQlEcm9wTWNhc3Q6MTsJCS8vIERyb3AgbXVsdGljYXN0IGZyYW1lcworCQlVSU5UMzIJCURyb3BCY2FzdDoxOwkJLy8gRHJvcCBicm9hZGNhc3QgZnJhbWVzCisJCVVJTlQzMgkJRHJvcER1cGxpY2F0ZToxOwkJLy8gRHJvcCBkdXBsaWNhdGUgZnJhbWUKKworCQlVSU5UMzIJCURyb3BDRkVuZEFjazoxOwkJLy8gRHJvcCBQcy1Qb2xsCisJCVVJTlQzMgkJRHJvcENGRW5kOjE7CQkvLyBEcm9wIFBzLVBvbGwKKwkJVUlOVDMyCQlEcm9wQWNrOjE7CQkvLyBEcm9wIFBzLVBvbGwKKwkJVUlOVDMyCQlEcm9wQ3RzOjE7CQkvLyBEcm9wIFBzLVBvbGwKKworCQlVSU5UMzIJCURyb3BSdHM6MTsJCS8vIERyb3AgUHMtUG9sbAorCQlVSU5UMzIJCURyb3BQc1BvbGw6MTsJCS8vIERyb3AgUHMtUG9sbAorCQlVSU5UMzIJCURyb3BCQToxOwkJLy8KKyAgICAgICAgCVVJTlQzMiAgICAgICAJRHJvcEJBUjoxOyAgICAgICAvLworCisJCVVJTlQzMiAgICAgICAJRHJvcFJzdkNudGxUeXBlOjE7CisJCVVJTlQzMgkJOjE1OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUlhfRklMVFJfQ0ZHX1NUUlVDLCAqUFJYX0ZJTFRSX0NGR19TVFJVQzsKKyNlbmRpZgorCisKKworCisvLworLy8gUEhZX0NTUjQ6IFJGIHNlcmlhbCBjb250cm9sIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX1BIWV9DU1I0X1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCUJ1c3k6MTsJCQkJLy8gMTogQVNJQyBpcyBidXN5IGV4ZWN1dGUgUkYgcHJvZ3JhbW1pbmcuCisJCVVJTlQzMgkJUExMX0xEOjE7CQkJLy8gUkYgUExMX0xEIHN0YXR1cworCQlVSU5UMzIJCUlGU2VsZWN0OjE7CQkJLy8gMTogc2VsZWN0IElGCXRvIHByb2dyYW0sCTA6IHNlbGVjdCBSRiB0bwlwcm9ncmFtCisJCVVJTlQzMgkJTnVtYmVyT2ZCaXRzOjU7CQkvLyBOdW1iZXIgb2YgYml0cyB1c2VkIGluIFJGUmVnVmFsdWUgKEk6MjAsCVJGTUQ6MjIpCisJCVVJTlQzMgkJUkZSZWdWYWx1ZToyNDsJCS8vIFJlZ2lzdGVyCXZhbHVlIChpbmNsdWRlIHJlZ2lzdGVyCWlkKQlzZXJpYWwgb3V0IHRvIFJGL0lGCWNoaXAuCisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlQSFlfQ1NSNF9TVFJVQywgKlBQSFlfQ1NSNF9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9QSFlfQ1NSNF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVDMyCQlSRlJlZ1ZhbHVlOjI0OwkJLy8gUmVnaXN0ZXIJdmFsdWUgKGluY2x1ZGUgcmVnaXN0ZXIJaWQpCXNlcmlhbCBvdXQgdG8gUkYvSUYJY2hpcC4KKwkJVUlOVDMyCQlOdW1iZXJPZkJpdHM6NTsJCS8vIE51bWJlciBvZiBiaXRzIHVzZWQgaW4gUkZSZWdWYWx1ZSAoSToyMCwJUkZNRDoyMikKKwkJVUlOVDMyCQlJRlNlbGVjdDoxOwkJCS8vIDE6IHNlbGVjdCBJRgl0byBwcm9ncmFtLAkwOiBzZWxlY3QgUkYgdG8JcHJvZ3JhbQorCQlVSU5UMzIJCVBMTF9MRDoxOwkJCS8vIFJGIFBMTF9MRCBzdGF0dXMKKwkJVUlOVDMyCQlCdXN5OjE7CQkJCS8vIDE6IEFTSUMgaXMgYnVzeSBleGVjdXRlIFJGIHByb2dyYW1taW5nLgorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUEhZX0NTUjRfU1RSVUMsICpQUEhZX0NTUjRfU1RSVUM7CisjZW5kaWYKKworCisvLworLy8gU0VDX0NTUjU6IHNoYXJlZCBrZXkgdGFibGUgc2VjdXJpdHkgbW9kZSByZWdpc3RlcgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9TRUNfQ1NSNV9TVFJVQwl7CisJc3RydWN0CXsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzM0tleTNDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzM0tleTJDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzM0tleTFDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzM0tleTBDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzMktleTNDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzMktleTJDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzMktleTFDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzMktleTBDaXBoZXJBbGc6MzsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVNFQ19DU1I1X1NUUlVDLCAqUFNFQ19DU1I1X1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1NFQ19DU1I1X1NUUlVDCXsKKwlzdHJ1Y3QJeworICAgICAgICBVSU5UMzIgICAgICAgQnNzMktleTBDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzMktleTFDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzMktleTJDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzMktleTNDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzM0tleTBDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzM0tleTFDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzM0tleTJDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworICAgICAgICBVSU5UMzIgICAgICAgQnNzM0tleTNDaXBoZXJBbGc6MzsKKyAgICAgICAgVUlOVDMyICAgICAgIDoxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JU0VDX0NTUjVfU1RSVUMsICpQU0VDX0NTUjVfU1RSVUM7CisjZW5kaWYKKworCisvLworLy8gSE9TVF9DTURfQ1NSOiBGb3IgSE9TVCB0byBpbnRlcnJ1cHQgZW1iZWRkZWQgcHJvY2Vzc29yCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0hPU1RfQ01EX0NTUl9TVFJVQwl7CisJc3RydWN0CXsKKwkgICAgVUlOVDMyICAgUnN2OjI0OworCSAgICBVSU5UMzIgICBIb3N0Q29tbWFuZDo4OworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JSE9TVF9DTURfQ1NSX1NUUlVDLCAqUEhPU1RfQ01EX0NTUl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9IT1NUX0NNRF9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJICAgIFVJTlQzMiAgIEhvc3RDb21tYW5kOjg7CisJICAgIFVJTlQzMiAgIFJzdjoyNDsKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUhPU1RfQ01EX0NTUl9TVFJVQywgKlBIT1NUX0NNRF9DU1JfU1RSVUM7CisjZW5kaWYKKworCisvLworLy8gQUlGU05fQ1NSOiBBSUZTTiBmb3IgZWFjaCBFRENBIEFDCisvLworCisKKworLy8KKy8vIEUyUFJPTV9DU1I6IEVFUFJPTSBjb250cm9sIHJlZ2lzdGVyCisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0UyUFJPTV9DU1JfU1RSVUMJeworCXN0cnVjdAl7CisJCVVJTlQzMgkJUnN2ZDoyNTsKKwkJVUlOVDMyICAgICAgIExvYWRTdGF0dXM6MTsgICAvLyAxOmxvYWRpbmcsIDA6ZG9uZQorCQlVSU5UMzIJCVR5cGU6MTsJCQkvLyAxOiA5M0M0NiwgMDo5M0M2NgorCQlVSU5UMzIJCUVlcHJvbURPOjE7CisJCVVJTlQzMgkJRWVwcm9tREk6MTsKKwkJVUlOVDMyCQlFZXByb21DUzoxOworCQlVSU5UMzIJCUVlcHJvbVNLOjE7CisJCVVJTlQzMgkJUmVsb2FkOjE7CQkvLyBSZWxvYWQgRUVQUk9NIGNvbnRlbnQsIHdyaXRlIG9uZSB0byByZWxvYWQsIHNlbGYtY2xlYXJlZC4KKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CUUyUFJPTV9DU1JfU1RSVUMsICpQRTJQUk9NX0NTUl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9FMlBST01fQ1NSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVSU5UMzIJCVJlbG9hZDoxOwkJLy8gUmVsb2FkIEVFUFJPTSBjb250ZW50LCB3cml0ZSBvbmUgdG8gcmVsb2FkLCBzZWxmLWNsZWFyZWQuCisJCVVJTlQzMgkJRWVwcm9tU0s6MTsKKwkJVUlOVDMyCQlFZXByb21DUzoxOworCQlVSU5UMzIJCUVlcHJvbURJOjE7CisJCVVJTlQzMgkJRWVwcm9tRE86MTsKKwkJVUlOVDMyCQlUeXBlOjE7CQkJLy8gMTogOTNDNDYsIDA6OTNDNjYKKwkJVUlOVDMyICAgICAgIExvYWRTdGF0dXM6MTsgICAvLyAxOmxvYWRpbmcsIDA6ZG9uZQorCQlVSU5UMzIJCVJzdmQ6MjU7CisJfQlmaWVsZDsKKwlVSU5UMzIJCQl3b3JkOworfQlFMlBST01fQ1NSX1NUUlVDLCAqUEUyUFJPTV9DU1JfU1RSVUM7CisjZW5kaWYKKworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgRTJQUk9NIGRhdGEgbGF5b3V0CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vCisvLyBFRVBST00gYW50ZW5uYSBzZWxlY3QgZm9ybWF0CisvLworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0VFUFJPTV9BTlRFTk5BX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVU0hPUlQgICAgICBSc3Y6NDsKKwkJVVNIT1JUICAgICAgUmZJY1R5cGU6NDsgICAgICAgICAgICAgLy8gc2VlIEUyUFJPTSBkb2N1bWVudAorCQlVU0hPUlQJCVR4UGF0aDo0OwkvLyAxOiAxVCwgMjogMlQKKwkJVVNIT1JUCQlSeFBhdGg6NDsJLy8gMTogMVIsIDI6IDJSLCAzOiAzUgorCX0JZmllbGQ7CisJVVNIT1JUCQkJd29yZDsKK30JRUVQUk9NX0FOVEVOTkFfU1RSVUMsICpQRUVQUk9NX0FOVEVOTkFfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfRUVQUk9NX0FOVEVOTkFfU1RSVUMJeworCXN0cnVjdAl7CisJCVVTSE9SVAkJUnhQYXRoOjQ7CS8vIDE6IDFSLCAyOiAyUiwgMzogM1IKKwkJVVNIT1JUCQlUeFBhdGg6NDsJLy8gMTogMVQsIDI6IDJUCisJCVVTSE9SVCAgICAgIFJmSWNUeXBlOjQ7ICAgICAgICAgICAgIC8vIHNlZSBFMlBST00gZG9jdW1lbnQKKwkJVVNIT1JUICAgICAgUnN2OjQ7CisJfQlmaWVsZDsKKwlVU0hPUlQJCQl3b3JkOworfQlFRVBST01fQU5URU5OQV9TVFJVQywgKlBFRVBST01fQU5URU5OQV9TVFJVQzsKKyNlbmRpZgorCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbiBfRUVQUk9NX05JQ19DSU5GSUcyX1NUUlVDCXsKKwlzdHJ1Y3QJeworICAgICAgICBVU0hPUlQJCURBQ1Rlc3RCaXQ6MTsJCQkvLyBjb250cm9sIGlmIGRyaXZlciBzaG91bGQgcGF0Y2ggdGhlIERBQyBpc3N1ZQorCQlVU0hPUlQJCVJzdjI6MzsJCQkJCS8vIG11c3QgYmUgMAorICAgICAgICBVU0hPUlQJCUFudERpdmVyc2l0eToxOwkJCS8vIEFudGVubmEgZGl2ZXJzaXR5CisJCVVTSE9SVAkJUnN2MToxOwkJCQkJLy8gbXVzdCBiZSAwCisJCVVTSE9SVAkJQlc0ME1BdmFpbEZvckE6MTsJCQkvLyAwOmVuYWJsZSwgMTpkaXNhYmxlCisJCVVTSE9SVAkJQlc0ME1BdmFpbEZvckc6MTsJCQkvLyAwOmVuYWJsZSwgMTpkaXNhYmxlCisJCVVTSE9SVAkJRW5hYmxlV1BTUEJDOjE7ICAgICAgICAgICAgICAgICAvLyBXUFMgUEJDIENvbnRyb2wgYml0CisJCVVTSE9SVAkJQlc0ME1TaWRlYmFuZEZvckE6MTsKKwkJVVNIT1JUCQlCVzQwTVNpZGViYW5kRm9yRzoxOworCQlVU0hPUlQJCUNhcmRidXNBY2NlbGVyYXRpb246MTsJLy8gISEhIE5PVEU6IDAgLSBlbmFibGUsIDEgLSBkaXNhYmxlCisJCVVTSE9SVAkJRXh0ZXJuYWxMTkFGb3JBOjE7CQkJLy8gZXh0ZXJuYWwgTE5BIGVuYWJsZSBmb3IgNUcKKwkJVVNIT1JUCQlFeHRlcm5hbExOQUZvckc6MTsJCQkvLyBleHRlcm5hbCBMTkEgZW5hYmxlIGZvciAyLjRHCisJCVVTSE9SVAkJRHluYW1pY1R4QWdjQ29udHJvbDoxOwkJCS8vCisJCVVTSE9SVAkJSGFyZHdhcmVSYWRpb0NvbnRyb2w6MTsJLy8gV2hldGhlciBSRiBpcyBjb250cm9sbGVkIGJ5IGRyaXZlciBvciBIVy4gMTplbmFibGUgaHcgY29udHJvbCwgMDpkaXNhYmxlCisJfQlmaWVsZDsKKwlVU0hPUlQJCQl3b3JkOworfQlFRVBST01fTklDX0NPTkZJRzJfU1RSVUMsICpQRUVQUk9NX05JQ19DT05GSUcyX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24gX0VFUFJPTV9OSUNfQ0lORklHMl9TVFJVQwl7CisJc3RydWN0IHsKKwkJVVNIT1JUCQlIYXJkd2FyZVJhZGlvQ29udHJvbDoxOwkvLyAxOmVuYWJsZSwgMDpkaXNhYmxlCisJCVVTSE9SVAkJRHluYW1pY1R4QWdjQ29udHJvbDoxOwkJCS8vCisJCVVTSE9SVAkJRXh0ZXJuYWxMTkFGb3JHOjE7CQkJCS8vCisJCVVTSE9SVAkJRXh0ZXJuYWxMTkFGb3JBOjE7CQkJLy8gZXh0ZXJuYWwgTE5BIGVuYWJsZSBmb3IgMi40RworCQlVU0hPUlQJCUNhcmRidXNBY2NlbGVyYXRpb246MTsJLy8gISEhIE5PVEU6IDAgLSBlbmFibGUsIDEgLSBkaXNhYmxlCisJCVVTSE9SVAkJQlc0ME1TaWRlYmFuZEZvckc6MTsKKwkJVVNIT1JUCQlCVzQwTVNpZGViYW5kRm9yQToxOworCQlVU0hPUlQJCUVuYWJsZVdQU1BCQzoxOyAgICAgICAgICAgICAgICAgLy8gV1BTIFBCQyBDb250cm9sIGJpdAorCQlVU0hPUlQJCUJXNDBNQXZhaWxGb3JHOjE7CQkJLy8gMDplbmFibGUsIDE6ZGlzYWJsZQorCQlVU0hPUlQJCUJXNDBNQXZhaWxGb3JBOjE7CQkJLy8gMDplbmFibGUsIDE6ZGlzYWJsZQorCQlVU0hPUlQJCVJzdjE6MTsJCQkJCS8vIG11c3QgYmUgMAorCQlVU0hPUlQJCUFudERpdmVyc2l0eToxOwkJCS8vIEFudGVubmEgZGl2ZXJzaXR5CisJCVVTSE9SVAkJUnN2MjozOwkJCQkJLy8gbXVzdCBiZSAwCisJCVVTSE9SVAkJREFDVGVzdEJpdDoxOwkJCS8vIGNvbnRyb2wgaWYgZHJpdmVyIHNob3VsZCBwYXRjaCB0aGUgREFDIGlzc3VlCisJfQlmaWVsZDsKKwlVU0hPUlQJCQl3b3JkOworfQlFRVBST01fTklDX0NPTkZJRzJfU1RSVUMsICpQRUVQUk9NX05JQ19DT05GSUcyX1NUUlVDOworI2VuZGlmCisKKy8vCisvLyBUWF9QV1IgVmFsdWUgdmFsaWQgcmFuZ2UgMHhGQSgtNikgfiAweDI0KDM2KQorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9FRVBST01fVFhfUFdSX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlDSEFSCUJ5dGUxOwkJCQkvLyBIaWdoIEJ5dGUKKwkJQ0hBUglCeXRlMDsJCQkJLy8gTG93IEJ5dGUKKwl9CWZpZWxkOworCVVTSE9SVAl3b3JkOworfQlFRVBST01fVFhfUFdSX1NUUlVDLCAqUEVFUFJPTV9UWF9QV1JfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfRUVQUk9NX1RYX1BXUl9TVFJVQwl7CisJc3RydWN0CXsKKwkJQ0hBUglCeXRlMDsJCQkJLy8gTG93IEJ5dGUKKwkJQ0hBUglCeXRlMTsJCQkJLy8gSGlnaCBCeXRlCisJfQlmaWVsZDsKKwlVU0hPUlQJd29yZDsKK30JRUVQUk9NX1RYX1BXUl9TVFJVQywgKlBFRVBST01fVFhfUFdSX1NUUlVDOworI2VuZGlmCisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9FRVBST01fVkVSU0lPTl9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJVmVyc2lvbjsJCQkvLyBIaWdoIEJ5dGUKKwkJVUNIQVIJRmFlUmVsZWFzZU51bWJlcjsJLy8gTG93IEJ5dGUKKwl9CWZpZWxkOworCVVTSE9SVAl3b3JkOworfQlFRVBST01fVkVSU0lPTl9TVFJVQywgKlBFRVBST01fVkVSU0lPTl9TVFJVQzsKKyNlbHNlCit0eXBlZGVmCXVuaW9uCV9FRVBST01fVkVSU0lPTl9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJRmFlUmVsZWFzZU51bWJlcjsJLy8gTG93IEJ5dGUKKwkJVUNIQVIJVmVyc2lvbjsJCQkvLyBIaWdoIEJ5dGUKKwl9CWZpZWxkOworCVVTSE9SVAl3b3JkOworfQlFRVBST01fVkVSU0lPTl9TVFJVQywgKlBFRVBST01fVkVSU0lPTl9TVFJVQzsKKyNlbmRpZgorCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfRUVQUk9NX0xFRF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVVNIT1JUCVJzdmQ6MzsJCQkJLy8gUmVzZXJ2ZWQKKwkJVVNIT1JUCUxlZE1vZGU6NTsJCQkvLyBMZWQgbW9kZS4KKwkJVVNIT1JUCVBvbGFyaXR5R1BJT180OjE7CS8vIFBvbGFyaXR5IEdQSU8jNCBzZXR0aW5nLgorCQlVU0hPUlQJUG9sYXJpdHlHUElPXzM6MTsJLy8gUG9sYXJpdHkgR1BJTyMzIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUdQSU9fMjoxOwkvLyBQb2xhcml0eSBHUElPIzIgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5R1BJT18xOjE7CS8vIFBvbGFyaXR5IEdQSU8jMSBzZXR0aW5nLgorCQlVU0hPUlQJUG9sYXJpdHlHUElPXzA6MTsJLy8gUG9sYXJpdHkgR1BJTyMwIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUFDVDoxOwkJLy8gUG9sYXJpdHkgQUNUIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eVJEWV9BOjE7CQkvLyBQb2xhcml0eSBSRFlfQSBzZXR0aW5nLgorCQlVU0hPUlQJUG9sYXJpdHlSRFlfRzoxOwkJLy8gUG9sYXJpdHkgUkRZX0cgc2V0dGluZy4KKwl9CWZpZWxkOworCVVTSE9SVAl3b3JkOworfQlFRVBST01fTEVEX1NUUlVDLCAqUEVFUFJPTV9MRURfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfRUVQUk9NX0xFRF9TVFJVQwl7CisJc3RydWN0CXsKKwkJVVNIT1JUCVBvbGFyaXR5UkRZX0c6MTsJCS8vIFBvbGFyaXR5IFJEWV9HIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eVJEWV9BOjE7CQkvLyBQb2xhcml0eSBSRFlfQSBzZXR0aW5nLgorCQlVU0hPUlQJUG9sYXJpdHlBQ1Q6MTsJCS8vIFBvbGFyaXR5IEFDVCBzZXR0aW5nLgorCQlVU0hPUlQJUG9sYXJpdHlHUElPXzA6MTsJLy8gUG9sYXJpdHkgR1BJTyMwIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUdQSU9fMToxOwkvLyBQb2xhcml0eSBHUElPIzEgc2V0dGluZy4KKwkJVVNIT1JUCVBvbGFyaXR5R1BJT18yOjE7CS8vIFBvbGFyaXR5IEdQSU8jMiBzZXR0aW5nLgorCQlVU0hPUlQJUG9sYXJpdHlHUElPXzM6MTsJLy8gUG9sYXJpdHkgR1BJTyMzIHNldHRpbmcuCisJCVVTSE9SVAlQb2xhcml0eUdQSU9fNDoxOwkvLyBQb2xhcml0eSBHUElPIzQgc2V0dGluZy4KKwkJVVNIT1JUCUxlZE1vZGU6NTsJCQkvLyBMZWQgbW9kZS4KKwkJVVNIT1JUCVJzdmQ6MzsJCQkJLy8gUmVzZXJ2ZWQKKwl9CWZpZWxkOworCVVTSE9SVAl3b3JkOworfQlFRVBST01fTEVEX1NUUlVDLCAqUEVFUFJPTV9MRURfU1RSVUM7CisjZW5kaWYKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KK3R5cGVkZWYJdW5pb24JX0VFUFJPTV9UWFBPV0VSX0RFTFRBX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUglUeFBvd2VyRW5hYmxlOjE7Ly8gRW5hYmxlCisJCVVDSEFSCVR5cGU6MTsJCQkvLyAxOiBwbHVzIHRoZSBkZWx0YSB2YWx1ZSwgMDogbWludXMgdGhlIGRlbHRhIHZhbHVlCisJCVVDSEFSCURlbHRhVmFsdWU6NjsJLy8gVHggUG93ZXIgZGFsdGEgdmFsdWUgKE1BWD00KQorCX0JZmllbGQ7CisJVUNIQVIJdmFsdWU7Cit9CUVFUFJPTV9UWFBPV0VSX0RFTFRBX1NUUlVDLCAqUEVFUFJPTV9UWFBPV0VSX0RFTFRBX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX0VFUFJPTV9UWFBPV0VSX0RFTFRBX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUglEZWx0YVZhbHVlOjY7CS8vIFR4IFBvd2VyIGRhbHRhIHZhbHVlIChNQVg9NCkKKwkJVUNIQVIJVHlwZToxOwkJCS8vIDE6IHBsdXMgdGhlIGRlbHRhIHZhbHVlLCAwOiBtaW51cyB0aGUgZGVsdGEgdmFsdWUKKwkJVUNIQVIJVHhQb3dlckVuYWJsZToxOy8vIEVuYWJsZQorCX0JZmllbGQ7CisJVUNIQVIJdmFsdWU7Cit9CUVFUFJPTV9UWFBPV0VSX0RFTFRBX1NUUlVDLCAqUEVFUFJPTV9UWFBPV0VSX0RFTFRBX1NUUlVDOworI2VuZGlmCisKKy8vCisvLyBRT1NfQ1NSMDogVFhPUCBob2xkZXIgYWRkcmVzczAgcmVnaXN0ZXIKKy8vCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfUU9TX0NTUjBfU1RSVUMJeworCXN0cnVjdAl7CisJCVVDSEFSCQlCeXRlMzsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMworCQlVQ0hBUgkJQnl0ZTI7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDIKKwkJVUNIQVIJCUJ5dGUxOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAxCisJCVVDSEFSCQlCeXRlMDsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMAorCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUU9TX0NTUjBfU1RSVUMsICpQUU9TX0NTUjBfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfUU9TX0NTUjBfU1RSVUMJeworCXN0cnVjdAl7CisJCVVDSEFSCQlCeXRlMDsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMAorCQlVQ0hBUgkJQnl0ZTE7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDEKKwkJVUNIQVIJCUJ5dGUyOwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSAyCisJCVVDSEFSCQlCeXRlMzsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgMworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUU9TX0NTUjBfU1RSVUMsICpQUU9TX0NTUjBfU1RSVUM7CisjZW5kaWYKKworLy8KKy8vIFFPU19DU1IxOiBUWE9QIGhvbGRlciBhZGRyZXNzMSByZWdpc3RlcgorLy8KKyNpZmRlZiBSVF9CSUdfRU5ESUFOCit0eXBlZGVmCXVuaW9uCV9RT1NfQ1NSMV9TVFJVQwl7CisJc3RydWN0CXsKKwkJVUNIQVIJCVJzdmQxOworCQlVQ0hBUgkJUnN2ZDA7CisJCVVDSEFSCQlCeXRlNTsJCS8vIE1BQyBhZGRyZXNzIGJ5dGUgNQorCQlVQ0hBUgkJQnl0ZTQ7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDQKKwl9CWZpZWxkOworCVVJTlQzMgkJCXdvcmQ7Cit9CVFPU19DU1IxX1NUUlVDLCAqUFFPU19DU1IxX1NUUlVDOworI2Vsc2UKK3R5cGVkZWYJdW5pb24JX1FPU19DU1IxX1NUUlVDCXsKKwlzdHJ1Y3QJeworCQlVQ0hBUgkJQnl0ZTQ7CQkvLyBNQUMgYWRkcmVzcyBieXRlIDQKKwkJVUNIQVIJCUJ5dGU1OwkJLy8gTUFDIGFkZHJlc3MgYnl0ZSA1CisJCVVDSEFSCQlSc3ZkMDsKKwkJVUNIQVIJCVJzdmQxOworCX0JZmllbGQ7CisJVUlOVDMyCQkJd29yZDsKK30JUU9TX0NTUjFfU1RSVUMsICpQUU9TX0NTUjFfU1RSVUM7CisjZW5kaWYKKworI2RlZmluZQlSRl9DU1JfQ0ZHCTB4NTAwCisjaWZkZWYgUlRfQklHX0VORElBTgordHlwZWRlZgl1bmlvbglfUkZfQ1NSX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVAlSc3ZkMToxNDsJCQkJLy8gUmVzZXJ2ZWQKKwkJVUlOVAlSRl9DU1JfS0lDSzoxOwkJCS8vIGtpY2sgUkYgcmVnaXN0ZXIgcmVhZC93cml0ZQorCQlVSU5UCVJGX0NTUl9XUjoxOwkJCS8vIDA6IHJlYWQgIDE6IHdyaXRlCisJCVVJTlQJUnN2ZDI6MzsJCQkJLy8gUmVzZXJ2ZWQKKwkJVUlOVAlURVNUQ1NSX1JGQUNDX1JFR05VTTo1OwkvLyBSRiByZWdpc3RlciBJRAorCQlVSU5UCVJGX0NTUl9EQVRBOjg7CQkJLy8gREFUQQorCX0JZmllbGQ7CisJVUlOVAl3b3JkOworfQlSRl9DU1JfQ0ZHX1NUUlVDLCAqUFJGX0NTUl9DRkdfU1RSVUM7CisjZWxzZQordHlwZWRlZgl1bmlvbglfUkZfQ1NSX0NGR19TVFJVQwl7CisJc3RydWN0CXsKKwkJVUlOVAlSRl9DU1JfREFUQTo4OwkJCS8vIERBVEEKKwkJVUlOVAlURVNUQ1NSX1JGQUNDX1JFR05VTTo1OwkvLyBSRiByZWdpc3RlciBJRAorCQlVSU5UCVJzdmQyOjM7CQkJCS8vIFJlc2VydmVkCisJCVVJTlQJUkZfQ1NSX1dSOjE7CQkJLy8gMDogcmVhZCAgMTogd3JpdGUKKwkJVUlOVAlSRl9DU1JfS0lDSzoxOwkJCS8vIGtpY2sgUkYgcmVnaXN0ZXIgcmVhZC93cml0ZQorCQlVSU5UCVJzdmQxOjE0OwkJCQkvLyBSZXNlcnZlZAorCX0JZmllbGQ7CisJVUlOVAl3b3JkOworfQlSRl9DU1JfQ0ZHX1NUUlVDLCAqUFJGX0NTUl9DRkdfU1RSVUM7CisjZW5kaWYKKworI2VuZGlmCS8vIF9fUlQyOFhYX0hfXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9hdGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzOGQ5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfYXRlLmMKQEAgLTAsMCArMSw2NTA2IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisjaW5jbHVkZSAicnRfY29uZmlnLmgiCisKKyNpZmRlZiBVQ09TCitJTlQgSW9jdGxSZXNwb25zZShQVUNIQVIgcGF5bG9hZCwgUFVDSEFSIG1zZywgSU5UIGxlbik7CisjZW5kaWYgLy8gVUNPUyAvLworCisjZGVmaW5lIEFURV9CQlBfUkVHX05VTQkxNjgKK1VDSEFSIHJlc3RvcmVfQkJQW0FURV9CQlBfUkVHX05VTV09ezB9OworCisjaWZkZWYgUkFMSU5LX0FURQorVUNIQVIgVGVtcGxhdGVGcmFtZVsyNF0gPSB7MHgwOC8qIERhdGEgdHlwZSAqLywweDAwLDB4MDAsMHgwMCwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkYsMHhGRiwweDAwLDB4QUEsMHhCQiwweDEyLDB4MzQsMHg1NiwweDAwLDB4MTEsMHgyMiwweEFBLDB4QkIsMHhDQywweDAwLDB4MDB9OwkvLyA4MDIuMTEgTUFDIEhlYWRlciwgVHlwZTpEYXRhLCBMZW5ndGg6MjRieXRlcworZXh0ZXJuIFJUTVBfUkZfUkVHUyBSRjI4NTBSZWdUYWJsZVtdOworZXh0ZXJuIFVDSEFSIE5VTV9PRl8yODUwX0NITkw7CisKKyNpZmRlZiBSVDI4NzAKK2V4dGVybiBVQ0hBUiBFcFRvUXVldWVbXTsKK2V4dGVybiBWT0lECVJUVVNCUmVqZWN0UGVuZGluZ1BhY2tldHMoCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2lmZGVmIFJUMzB4eAorLy8yMDA4LzA3LzEwOktIIGFkZHMgdG8gc3VwcG9ydCAzMDcwIEFURTwtLQorZXh0ZXJuIEZSRVFVRU5DWV9JVEVNIEZyZXFJdGVtczMwMjBbXTsKK2V4dGVybiBVQ0hBUiBOVU1fT0ZfMzAyMF9DSE5MOworLy8yMDA4LzA3LzEwOktIIGFkZHMgdG8gc3VwcG9ydCAzMDcwIEFURS0tPgorI2VuZGlmIC8vIFJUMzB4eCAvLworCisjaWZkZWYgVUNPUworZXh0ZXJuIElOVCBDb25zb2xlUmVzcG9uc2UoSU4gUFVDSEFSIGJ1ZmYpOworZXh0ZXJuIGludCAoKnJlbW90ZV9kaXNwbGF5KShjaGFyICopOworI2VuZGlmIC8vIFVDT1MgLy8KKworc3RhdGljIENIQVIgQ0NLUmF0ZVRhYmxlW10gPSB7MCwgMSwgMiwgMywgOCwgOSwgMTAsIDExLCAtMX07IC8qIENDSyBNb2RlLiAqLworc3RhdGljIENIQVIgT0ZETVJhdGVUYWJsZVtdID0gezAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIC0xfTsgLyogT0ZETSBNb2RlLiAqLworc3RhdGljIENIQVIgSFRNSVhSYXRlVGFibGVbXSA9IHswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMX07IC8qIEhUIE1peCBNb2RlLiAqLworCitzdGF0aWMgSU5UIFR4RG1hQnVzeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK3N0YXRpYyBJTlQgUnhEbWFCdXN5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworc3RhdGljIFZPSUQgUnRtcERtYUVuYWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBJTlQgRW5hYmxlKTsKKworc3RhdGljIFZPSUQgQmJwU29mdFJlc2V0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworc3RhdGljIFZPSUQgUnRtcFJmSW9Xcml0ZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK3N0YXRpYyBJTlQgQVRFU2V0VXBGcmFtZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVSU5UMzIgVHhJZHgpOworCitzdGF0aWMgSU5UIEFURVR4UHdySGFuZGxlcigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBjaGFyIGluZGV4KTsKKworc3RhdGljIElOVCBBVEVDbWRIYW5kbGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK3N0YXRpYyBpbnQgQ2hlY2tNQ1NWYWxpZCgKKwlJTiBVQ0hBUiBNb2RlLAorCUlOIFVDSEFSIE1jcyk7CisKKworI2lmZGVmIFJUMjg3MAorc3RhdGljIFZPSUQgQVRFV3JpdGVUeEluZm8oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFRYSU5GT19TVFJVQyAJcFR4SW5mbywKKwlJTgkgIFVTSE9SVAkJVVNCRE1BcGt0TGVuLAorCUlOCSAgQk9PTEVBTgkJYldpdiwKKwlJTgkgIFVDSEFSCQkJUXVldWVTZWwsCisJSU4JICBVQ0hBUgkJCU5leHRWYWxpZCwKKwlJTgkgIFVDSEFSCQkJVHhCdXJzdCk7CisKK3N0YXRpYyBWT0lEIEFURVdyaXRlVHhXSSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVFhXSV9TVFJVQyAJcFR4V0ksCisJSU4JQk9PTEVBTgkJCUZSQUcsCisJSU4JQk9PTEVBTgkJCUluc1RpbWVzdGFtcCwKKwlJTglCT09MRUFOIAkJQU1QRFUsCisJSU4JQk9PTEVBTiAJCUFjaywKKwlJTglCT09MRUFOIAkJTlNlcSwJCS8vIEhXIG5ldyBhIHNlcXVlbmNlLgorCUlOCVVDSEFSCQkJQkFTaXplLAorCUlOCVVDSEFSCQkJV0NJRCwKKwlJTglVTE9ORwkJCUxlbmd0aCwKKwlJTglVQ0hBUiAJCQlQSUQsCisJSU4JVUNIQVIJCQlNSU1PcHMsCisJSU4JVUNIQVIJCQlUeG9wbW9kZSwKKwlJTglCT09MRUFOCQkJQ2ZBY2ssCisJSU4JSFRUUkFOU01JVF9TRVRUSU5HCVRyYW5zbWl0KTsKKworI2VuZGlmIC8vIFJUMjg3MCAvLworCitzdGF0aWMgVk9JRCBTZXRKYXBhbkZpbHRlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PWVuZCBvZiBwcm90b3R5cGU9PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCisjaWZkZWYgUlQyODcwCitzdGF0aWMgSU5UIFR4RG1hQnVzeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlJTlQgcmVzdWx0OworCVVTQl9ETUFfQ0ZHX1NUUlVDIFVzYkNmZzsKKworCVJUTVBfSU9fUkVBRDMyKHBBZCwgVVNCX0RNQV9DRkcsICZVc2JDZmcud29yZCk7CS8vIGRpc2FibGUgRE1BCisJaWYgKFVzYkNmZy5maWVsZC5UeEJ1c3kpCisJCXJlc3VsdCA9IDE7CisJZWxzZQorCQlyZXN1bHQgPSAwOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIElOVCBSeERtYUJ1c3koCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJSU5UIHJlc3VsdDsKKwlVU0JfRE1BX0NGR19TVFJVQyBVc2JDZmc7CisKKwlSVE1QX0lPX1JFQUQzMihwQWQsIFVTQl9ETUFfQ0ZHLCAmVXNiQ2ZnLndvcmQpOwkvLyBkaXNhYmxlIERNQQorCWlmIChVc2JDZmcuZmllbGQuUnhCdXN5KQorCQlyZXN1bHQgPSAxOworCWVsc2UKKwkJcmVzdWx0ID0gMDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBWT0lEIFJ0bXBEbWFFbmFibGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gSU5UIEVuYWJsZSkKK3sKKwlCT09MRUFOIHZhbHVlOworCVVMT05HIFdhaXRDbnQ7CisJVVNCX0RNQV9DRkdfU1RSVUMgVXNiQ2ZnOworCisJdmFsdWUgPSBFbmFibGUgPiAwID8gMSA6IDA7CisKKwkvLyBjaGVjayBETUEgaXMgaW4gYnVzeSBtb2RlLgorCVdhaXRDbnQgPSAwOworCXdoaWxlIChUeERtYUJ1c3kocEFkKSB8fCBSeERtYUJ1c3kocEFkKSkKKwl7CisJCVJUTVB1c2VjRGVsYXkoMTApOworCQlpZiAoV2FpdENudCsrID4gMTAwKQorCQkJYnJlYWs7CisJfQorCisJLy9XaHkgbm90IHRvIGNsZWFyIFVTQiBETUEgVFggcGF0aCBmaXJzdCA/Pz8KKwlSVE1QX0lPX1JFQUQzMihwQWQsIFVTQl9ETUFfQ0ZHLCAmVXNiQ2ZnLndvcmQpOwkvLyBkaXNhYmxlIERNQQorCVVzYkNmZy5maWVsZC5UeEJ1bGtFbiA9IHZhbHVlOworCVVzYkNmZy5maWVsZC5SeEJ1bGtFbiA9IHZhbHVlOworCVJUTVBfSU9fV1JJVEUzMihwQWQsIFVTQl9ETUFfQ0ZHLCBVc2JDZmcud29yZCk7CS8vIGFib3J0IGFsbCBUWCByaW5ncworCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisKKwlyZXR1cm47Cit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKK3N0YXRpYyBWT0lEIEJicFNvZnRSZXNldCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVQ0hBUiBCYnBEYXRhID0gMDsKKworCS8vIFNvZnQgcmVzZXQsIHNldCBCQlAgUjIxIGJpdDA9MS0+MAorCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyMSwgJkJicERhdGEpOworCUJicERhdGEgfD0gMHgwMDAwMDAwMTsgLy9zZXQgYml0MD0xCisJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMSwgQmJwRGF0YSk7CisKKwlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMjEsICZCYnBEYXRhKTsKKwlCYnBEYXRhICY9IH4oMHgwMDAwMDAwMSk7IC8vc2V0IGJpdDA9MAorCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjEsIEJicERhdGEpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgVk9JRCBSdG1wUmZJb1dyaXRlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCS8vIFNldCBSRiB2YWx1ZSAxJ3Mgc2V0IFIzW2JpdDJdID0gWzBdCisJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SMSk7CisJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SMik7CisJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgKHBBZC0+TGF0Y2hSZlJlZ3MuUjMgJiAofjB4MDQpKSk7CisJUlRNUF9SRl9JT19XUklURTMyKHBBZCwgcEFkLT5MYXRjaFJmUmVncy5SNCk7CisKKwlSVE1QdXNlY0RlbGF5KDIwMCk7CisKKwkvLyBTZXQgUkYgdmFsdWUgMidzIHNldCBSM1tiaXQyXSA9IFsxXQorCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjEpOworCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjIpOworCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIChwQWQtPkxhdGNoUmZSZWdzLlIzIHwgMHgwNCkpOworCVJUTVBfUkZfSU9fV1JJVEUzMihwQWQsIHBBZC0+TGF0Y2hSZlJlZ3MuUjQpOworCisJUlRNUHVzZWNEZWxheSgyMDApOworCisJLy8gU2V0IFJGIHZhbHVlIDMncyBzZXQgUjNbYml0Ml0gPSBbMF0KKwlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlIxKTsKKwlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlIyKTsKKwlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCAocEFkLT5MYXRjaFJmUmVncy5SMyAmICh+MHgwNCkpKTsKKwlSVE1QX1JGX0lPX1dSSVRFMzIocEFkLCBwQWQtPkxhdGNoUmZSZWdzLlI0KTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBDaGVja01DU1ZhbGlkKAorCVVDSEFSIE1vZGUsCisJVUNIQVIgTWNzKQoreworCWludCBpOworCVBDSEFSIHBSYXRlVGFiOworCisJc3dpdGNoKE1vZGUpCisJeworCQljYXNlIDA6CisJCQlwUmF0ZVRhYiA9IENDS1JhdGVUYWJsZTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwUmF0ZVRhYiA9IE9GRE1SYXRlVGFibGU7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQljYXNlIDM6CisJCQlwUmF0ZVRhYiA9IEhUTUlYUmF0ZVRhYmxlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJ1bnJlY29nbml6YWJsZSBUeCBNb2RlICVkXG4iLCBNb2RlKSk7CisJCQlyZXR1cm4gLTE7CisJCQlicmVhazsKKwl9CisKKwlpID0gMDsKKwl3aGlsZShwUmF0ZVRhYltpXSAhPSAtMSkKKwl7CisJCWlmIChwUmF0ZVRhYltpXSA9PSBNY3MpCisJCQlyZXR1cm4gMDsKKwkJaSsrOworCX0KKworCXJldHVybiAtMTsKK30KKworI2lmIDEKK3N0YXRpYyBJTlQgQVRFVHhQd3JIYW5kbGVyKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIGNoYXIgaW5kZXgpCit7CisJVUxPTkcgUjsKKwlDSEFSIFR4UG93ZXI7CisJVUNIQVIgQmJwOTQgPSAwOworCUJPT0xFQU4gYlBvd2VyUmVkdWNlID0gRkFMU0U7CisjaWZkZWYgUlQzMHh4CisJVUNIQVIgUkZWYWx1ZTsKKyNlbmRpZiAvLyBSVDMweHggLy8KKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCWlmICgocEFkLT5hdGUuYlFBVHhTdGFydCA9PSBUUlVFKSB8fCAocEFkLT5hdGUuYlFBUnhTdGFydCA9PSBUUlVFKSkKKwl7CisJCS8qIFdoZW4gUUEgaXMgdXNlZCBmb3IgVHgsIHBBZC0+YXRlLlR4UG93ZXIwLzEgYW5kIHJlYWwgdHggcG93ZXIKKwkJKiogYXJlIG5vdCBzeW5jaHJvbml6ZWQuCisJCSovCisvKgorCQlwQWQtPmF0ZS5UeFBvd2VyMCA9IHBBZC0+TGF0Y2hSZlJlZ3MueHh4OworCQlwQWQtPmF0ZS5UeFBvd2VyMSA9IHBBZC0+TGF0Y2hSZlJlZ3MueHh4OworKi8KKwkJcmV0dXJuIDA7CisJfQorCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworCXsKKwkJVHhQb3dlciA9IGluZGV4ID09IDAgPyBwQWQtPmF0ZS5UeFBvd2VyMCA6IHBBZC0+YXRlLlR4UG93ZXIxOworCisJCWlmIChwQWQtPmF0ZS5DaGFubmVsIDw9IDE0KQorCQl7CisJCQlpZiAoVHhQb3dlciA+IDMxKQorCQkJeworCQkJCS8vCisJCQkJLy8gUjMsIFI0IGNhbid0IGxhcmdlIHRoYW4gMzEgKDB4MjQpLCAzMSB+IDM2IHVzZWQgYnkgQkJQIDk0CisJCQkJLy8KKwkJCQlSID0gMzE7CisJCQkJaWYgKFR4UG93ZXIgPD0gMzYpCisJCQkJCUJicDk0ID0gQkJQUjk0X0RFRkFVTFQgKyAoVUNIQVIpKFR4UG93ZXIgLSAzMSk7CisJCQl9CisJCQllbHNlIGlmIChUeFBvd2VyIDwgMCkKKwkJCXsKKwkJCQkvLworCQkJCS8vIFIzLCBSNCBjYW4ndCBsZXNzIHRoYW4gMCwgLTEgfiAtNiB1c2VkIGJ5IEJCUCA5NAorCQkJCS8vCisJCQkJUiA9IDA7CisJCQkJaWYgKFR4UG93ZXIgPj0gLTYpCisJCQkJCUJicDk0ID0gQkJQUjk0X0RFRkFVTFQgKyBUeFBvd2VyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIDAgfiAzMQorCQkJCVIgPSAoVUxPTkcpIFR4UG93ZXI7CisJCQkJQmJwOTQgPSBCQlBSOTRfREVGQVVMVDsKKwkJCX0KKworCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMgKFR4UG93ZXI9JWQsIFI9JWxkLCBCQlBfUjk0PSVkKVxuIiwgX19GVU5DVElPTl9fLCBUeFBvd2VyLCBSLCBCYnA5NCkpOworCQl9CisJCWVsc2UvLyA1LjUgR0h6CisJCXsKKwkJCWlmIChUeFBvd2VyID4gMTUpCisJCQl7CisJCQkJLy8KKwkJCQkvLyBSMywgUjQgY2FuJ3QgbGFyZ2UgdGhhbiAxNSAoMHgwRikKKwkJCQkvLworCQkJCVIgPSAxNTsKKwkJCX0KKwkJCWVsc2UgaWYgKFR4UG93ZXIgPCAwKQorCQkJeworCQkJCS8vCisJCQkJLy8gUjMsIFI0IGNhbid0IGxlc3MgdGhhbiAwCisJCQkJLy8KKwkJCQkvLyAtMSB+IC03CisJCQkJQVNTRVJUKChUeFBvd2VyID49IC03KSk7CisJCQkJUiA9IChVTE9ORykoVHhQb3dlciArIDcpOworCQkJCWJQb3dlclJlZHVjZSA9IFRSVUU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8gMCB+IDE1CisJCQkJUiA9IChVTE9ORykgVHhQb3dlcjsKKwkJCX0KKworCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMgKFR4UG93ZXI9JWQsIFI9JWx1KVxuIiwgX19GVU5DVElPTl9fLCBUeFBvd2VyLCBSKSk7CisJCX0KKy8vMjAwOC8wOS8xMDpLSCBhZGRzIHRvIHN1cHBvcnQgMzA3MCBBVEUgVFggUG93ZXIgdHVubmluZyByZWFsIHRpbWU8LS0KKyNpZmRlZiBSVDMweHgKKwkJaWYoSVNfUlQzMHh4KHBBZCkpCisJCXsKKwkJCS8vIFNldCBUeCBQb3dlcgorCisJCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjEyLCAoUFVDSEFSKSZSRlZhbHVlKTsKKwkJCQkJUkZWYWx1ZSA9IChSRlZhbHVlICYgMHhFMCkgfCBUeFBvd2VyOworCQkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMTIsIChVQ0hBUilSRlZhbHVlKTsKKwkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiMzA3MCBvciAyMDcwOiVzIChUeFBvd2VyPSVkLCBSRlZhbHVlPSV4KVxuIiwgX19GVU5DVElPTl9fLCBUeFBvd2VyLCBSRlZhbHVlKSk7CisKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gUlQzMHh4IC8vCisJICAgICAgeworCQlpZiAocEFkLT5hdGUuQ2hhbm5lbCA8PSAxNCkKKwkJeworCQkJaWYgKGluZGV4ID09IDApCisJCQl7CisJCQkJUiA9IFIgPDwgOTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSMykgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCQkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SMyAmIDB4ZmZmZmMxZmYpOworCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjMgPSBSOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCVIgPSBSIDw8IDY7CQkvLyBzaGlmdCBUWCBwb3dlciBjb250cm9sIHRvIGNvcnJlY3QgUkYoUjQpIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbgorCQkJCVIgfD0gKHBBZC0+TGF0Y2hSZlJlZ3MuUjQgJiAweGZmZmZmODNmKTsKKwkJCQlwQWQtPkxhdGNoUmZSZWdzLlI0ID0gUjsKKwkJCX0KKwkJfQorCQllbHNlLy8gNS41R0h6CisJCXsKKwkJCWlmIChiUG93ZXJSZWR1Y2UgPT0gRkFMU0UpCisJCQl7CisJCQkJaWYgKGluZGV4ID09IDApCisJCQkJeworCQkJCQlSID0gKFIgPDwgMTApIHwgKDEgPDwgOSk7CQkvLyBzaGlmdCBUWCBwb3dlciBjb250cm9sIHRvIGNvcnJlY3QgUkYoUjMpIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbgorCQkJCQlSIHw9IChwQWQtPkxhdGNoUmZSZWdzLlIzICYgMHhmZmZmYzFmZik7CisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjMgPSBSOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSID0gKFIgPDwgNykgfCAoMSA8PCA2KTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSNCkgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCQkJCVIgfD0gKHBBZC0+TGF0Y2hSZlJlZ3MuUjQgJiAweGZmZmZmODNmKTsKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5SNCA9IFI7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChpbmRleCA9PSAwKQorCQkJCXsKKwkJCQkJUiA9IChSIDw8IDEwKTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSMykgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCQkJCVIgfD0gKHBBZC0+TGF0Y2hSZlJlZ3MuUjMgJiAweGZmZmZjMWZmKTsKKworCQkJCQkvKiBDbGVhciBiaXQgOSBvZiBSMyB0byByZWR1Y2UgN2RCLiAqLworCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlIzID0gKFIgJiAofigxIDw8IDkpKSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVIgPSAoUiA8PCA3KTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSNCkgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCQkJCVIgfD0gKHBBZC0+TGF0Y2hSZlJlZ3MuUjQgJiAweGZmZmZmODNmKTsKKworCQkJCQkvKiBDbGVhciBiaXQgNiBvZiBSNCB0byByZWR1Y2UgN2RCLiAqLworCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlI0ID0gKFIgJiAofigxIDw8IDYpKSk7CisJCQkJfQorCQkJfQorCQl9CisJCVJ0bXBSZklvV3JpdGUocEFkKTsKKyAgICAgICAgICAgfQorLy8yMDA4LzA5LzEwOktIIGFkZHMgdG8gc3VwcG9ydCAzMDcwIEFURSBUWCBQb3dlciB0dW5uaW5nIHJlYWwgdGltZS0tPgorCisJCXJldHVybiAwOworCX0KK30KKyNlbHNlLy8gMSAvLworc3RhdGljIElOVCBBVEVUeFB3ckhhbmRsZXIoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gY2hhciBpbmRleCkKK3sKKwlVTE9ORyBSOworCUNIQVIgVHhQb3dlcjsKKwlVQ0hBUiBCYnA5NCA9IDA7CisKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCWlmICgocEFkLT5hdGUuYlFBVHhTdGFydCA9PSBUUlVFKSB8fCAocEFkLT5hdGUuYlFBUnhTdGFydCA9PSBUUlVFKSkKKwl7CisJCS8vIFRPRE86IGhvdyB0byBnZXQgY3VycmVudCBUeFBvd2VyMC8xIGZyb20gcEFkLT5MYXRjaFJmUmVncyA/CisJCS8qIFdoZW4gUUEgaXMgdXNlZCBmb3IgVHgsIHBBZC0+YXRlLlR4UG93ZXIwLzEgYW5kIHJlYWwgdHggcG93ZXIKKwkJKiogYXJlIG5vdCBzeW5jaHJvbml6ZWQuCisJCSovCisvKgorCQlwQWQtPmF0ZS5UeFBvd2VyMCA9IHBBZC0+TGF0Y2hSZlJlZ3MueHh4OworCQlwQWQtPmF0ZS5UeFBvd2VyMSA9IHBBZC0+TGF0Y2hSZlJlZ3MueHh4OworKi8KKwkJcmV0dXJuIDA7CisJfQorCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworCXsKKwkJVHhQb3dlciA9IGluZGV4ID09IDAgPyBwQWQtPmF0ZS5UeFBvd2VyMCA6IHBBZC0+YXRlLlR4UG93ZXIxOworCisJaWYgKFR4UG93ZXIgPiAzMSkKKwl7CisJCS8vCisJCS8vIFIzLCBSNCBjYW4ndCBsYXJnZSB0aGFuIDM2ICgweDI0KSwgMzEgfiAzNiB1c2VkIGJ5IEJCUCA5NAorCQkvLworCQlSID0gMzE7CisJCWlmIChUeFBvd2VyIDw9IDM2KQorCQkJQmJwOTQgPSBCQlBSOTRfREVGQVVMVCArIChVQ0hBUikoVHhQb3dlciAtIDMxKTsKKwl9CisJZWxzZSBpZiAoVHhQb3dlciA8IDApCisJeworCQkvLworCQkvLyBSMywgUjQgY2FuJ3QgbGVzcyB0aGFuIDAsIC0xIH4gLTYgdXNlZCBieSBCQlAgOTQKKwkJLy8KKwkJUiA9IDA7CisJCWlmIChUeFBvd2VyID49IC02KQorCQkJQmJwOTQgPSBCQlBSOTRfREVGQVVMVCArIFR4UG93ZXI7CisJfQorCWVsc2UKKwl7CisJCS8vIDAgfiAzMQorCQlSID0gKFVMT05HKSBUeFBvd2VyOworCQlCYnA5NCA9IEJCUFI5NF9ERUZBVUxUOworCX0KKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzIChUeFBvd2VyPSVkLCBSMz0lbGQsIEJCUF9SOTQ9JWQpXG4iLCBfX0ZVTkNUSU9OX18sIFR4UG93ZXIsIFIsIEJicDk0KSk7CisKKwkJaWYgKHBBZC0+YXRlLkNoYW5uZWwgPD0gMTQpCisJCXsKKwlpZiAoaW5kZXggPT0gMCkKKwl7CisJCVIgPSBSIDw8IDk7CQkvLyBzaGlmdCBUWCBwb3dlciBjb250cm9sIHRvIGNvcnJlY3QgUkYoUjMpIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbgorCQlSIHw9IChwQWQtPkxhdGNoUmZSZWdzLlIzICYgMHhmZmZmYzFmZik7CisJCXBBZC0+TGF0Y2hSZlJlZ3MuUjMgPSBSOworCX0KKwllbHNlCisJeworCQlSID0gUiA8PCA2OwkJLy8gc2hpZnQgVFggcG93ZXIgY29udHJvbCB0byBjb3JyZWN0IFJGKFI0KSByZWdpc3RlciBiaXQgcG9zaXRpb24KKwkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SNCAmIDB4ZmZmZmY4M2YpOworCQlwQWQtPkxhdGNoUmZSZWdzLlI0ID0gUjsKKwl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoaW5kZXggPT0gMCkKKwkJCXsKKwkJCQlSID0gKFIgPDwgMTApIHwgKDEgPDwgOSk7CQkvLyBzaGlmdCBUWCBwb3dlciBjb250cm9sIHRvIGNvcnJlY3QgUkYoUjMpIHJlZ2lzdGVyIGJpdCBwb3NpdGlvbgorCQkJCVIgfD0gKHBBZC0+TGF0Y2hSZlJlZ3MuUjMgJiAweGZmZmZjMWZmKTsKKwkJCQlwQWQtPkxhdGNoUmZSZWdzLlIzID0gUjsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlSID0gKFIgPDwgNykgfCAoMSA8PCA2KTsJCS8vIHNoaWZ0IFRYIHBvd2VyIGNvbnRyb2wgdG8gY29ycmVjdCBSRihSNCkgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCQkJUiB8PSAocEFkLT5MYXRjaFJmUmVncy5SNCAmIDB4ZmZmZmY4M2YpOworCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgPSBSOworCQkJfQorCQl9CisKKwlSdG1wUmZJb1dyaXRlKHBBZCk7CisKKwlyZXR1cm4gMDsKKwl9Cit9CisjZW5kaWYgLy8gMSAvLworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIG9wZXJhdGlvbiBtb2RlIHRvCisgICAgICAgIDAuIEFURVNUQVJUICA9IFN0YXJ0IEFURSBNb2RlCisgICAgICAgIDEuIEFURVNUT1AgICA9IFN0b3AgQVRFIE1vZGUKKyAgICAgICAgMi4gVFhDT05UICAgID0gQ29udGludW91cyBUcmFuc21pdAorICAgICAgICAzLiBUWENBUlIgICAgPSBUcmFuc21pdCBDYXJyaWVyCisgICAgICAgIDQuIFRYRlJBTUUgICA9IFRyYW5zbWl0IEZyYW1lcworICAgICAgICA1LiBSWEZSQU1FICAgPSBSZWNlaXZlIEZyYW1lcworI2lmZGVmIFJBTElOS18yOHh4X1FBCisgICAgICAgIDYuIFRYU1RPUCAgICA9IFN0b3AgQW55IFR5cGUgb2YgVHJhbnNtaXRpb24KKyAgICAgICAgNy4gUlhTVE9QICAgID0gU3RvcCBSZWNlaXZpbmcgRnJhbWVzCisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKj09PT09PT09PT09PT09PT09PT09PT09RW5kIG9mIFJUMjg2MD09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCisvKj09PT09PT09PT09PT09PT09PT09PT1TdGFydCBvZiBSVDI4NzA9PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZmRlZiBSVDI4NzAKK3N0YXRpYyBJTlQJQVRFQ21kSGFuZGxlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUlOVDMyCQkJVmFsdWU7CisJVUNIQVIJCQlCYnBEYXRhOworCVVJTlQzMiAgICAgICAgICBNYWNEYXRhOworCVVJTlQJCQlpPTAsIGF0ZW1vZGU7CisJLy9ORElTX1NUQVRVUwkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwkvL1BVQ0hBUgkJCXBEZXN0OworCVVJTlQzMiAJCQl0ZW1wOworCVVMT05HCQkJSXJxRmxhZ3M7CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+IEFURUNtZEhhbmRsZXIoKVxuIikpOworCUFURUFzaWNTd2l0Y2hDaGFubmVsKHBBZCk7CisJLyogQXNpY0xvY2tDaGFubmVsKCkgaXMgZW1wdHkgZnVuY3Rpb24gc28gZmFyIGluIGZhY3QgKi8KKwlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPmF0ZS5DaGFubmVsKTsKKworCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisKKwkvLyBEZWZhdWx0IHZhbHVlIGluIEJCUCBSMjIgaXMgMHgwLgorCUJicERhdGEgPSAwOworCisJLyogRW50ZXIgQVRFIG1vZGUgYW5kIHNldCBUeC9SeCBJZGxlICovCisJaWYgKCFzdHJjbXAoYXJnLCAiQVRFU1RBUlQiKSkKKwl7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUJPT0xFQU4gICAgICAgQ2FuY2VsbGVkOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVEU6IEFURVNUQVJUXG4iKSk7CisKKwkJbmV0aWZfc3RvcF9xdWV1ZShwQWQtPm5ldF9kZXYpOworCisJCWF0ZW1vZGUgPSBwQWQtPmF0ZS5Nb2RlOworCQlwQWQtPmF0ZS5Nb2RlID0gQVRFX1NUQVJUOworLy8JCXBBZC0+YXRlLlR4RG9uZUNvdW50ID0gcEFkLT5hdGUuVHhDb3VudDsKKwkJLy8gRGlzYWJsZSBSeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvLyBEaXNhYmxlIGF1dG8gcmVzcG9uZGVyCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgQVVUT19SU1BfQ0ZHLCAmdGVtcCk7CisJCXRlbXAgPSB0ZW1wICYgMHhGRkZGRkZGRTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgQVVUT19SU1BfQ0ZHLCB0ZW1wKTsKKworCQkvLyByZWFkIE1BQ19TWVNfQ1RSTCBhbmQgYmFja3VwIE1BQ19TWVNfQ1RSTCB2YWx1ZS4KKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZNYWNEYXRhKTsKKwkJLy8gY2xlYW4gYml0NCB0byBzdG9wIGNvbnRpbnVvdXMgVHggcHJvZHVjdGlvbiB0ZXN0LgorCQlNYWNEYXRhICY9IDB4RkZGRkZGRUY7CisJCS8vIFN0b3AgY29udGludW91cyBUWCBwcm9kdWN0aW9uIHRlc3QuCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgTWFjRGF0YSk7Ly9kaXNhYmxlIG9yIGNhbmNlbCBwZW5kaW5nIGlycCBmaXJzdCA/Pz8KKworICAgICAgICBpZiAoYXRlbW9kZSAmIEFURV9UWENBUlIKKyNpZmRlZiBSVDMweHgKKyB8fCBhdGVtb2RlICYgQVRFX1RYQ09OVAorI2VuZGlmIC8vIFJUMzB4eCAvLworKQorCQl7CisjaWZkZWYgUlQzMHh4CisJCQkvL0hhcmR3YXJlIFJlc2V0IEJCUAorCQkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZ0ZW1wKTsKKwkJCXRlbXAgPSB0ZW1wIHwweDAwMDAwMDAyOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCB0ZW1wKTsKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmdGVtcCk7CisJCQl0ZW1wID0gdGVtcCAmIH4oMHgwMDAwMDAwMik7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIHRlbXApOworCQkJLy9SZXN0b3JlIEFsbCBCQlAgVmFsdWUKKwkJCWZvcihpPTA7aTxBVEVfQkJQX1JFR19OVU07aSsrKQorCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCxpLHJlc3RvcmVfQkJQW2ldKTsKKyNlbmRpZiAvLyBSVDMweHggLy8KKworCQkJLy8gTm8gQ2FycmllciBUZXN0IHNldCBCQlAgUjIyIGJpdDc9MCwgYml0Nj0wLCBiaXRbNX4wXT0weDAKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgJkJicERhdGEpOworCQkJQmJwRGF0YSAmPSAweEZGRkZGRjAwOyAvL2NsZWFyIGJpdDcsIGJpdDYsIGJpdFs1fjBdCisJCSAgICBBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKwkJfQorCQllbHNlIGlmIChhdGVtb2RlICYgQVRFX1RYQ0FSUlNVUFApCisJCXsKKyNpZmRlZiBSVDMweHgKKwkJCS8vSGFyZHdhcmUgUmVzZXQgQkJQCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJnRlbXApOworCQkJdGVtcCA9IHRlbXAgfDB4MDAwMDAwMDI7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIHRlbXApOworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZ0ZW1wKTsKKwkJCXRlbXAgPSB0ZW1wICYgfigweDAwMDAwMDAyKTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgdGVtcCk7CisJCQkvL1Jlc3RvcmUgQWxsIEJCUCBWYWx1ZQorCQkJZm9yKGk9MDtpPEFURV9CQlBfUkVHX05VTTtpKyspCisJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLGkscmVzdG9yZV9CQlBbaV0pOworI2VuZGlmIC8vIFJUMzB4eCAvLworCisJCQkvLyBObyBDb250LiBUWCBzZXQgQkJQIFIyMiBiaXQ3PTAKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgJkJicERhdGEpOworCQkJQmJwRGF0YSAmPSB+KDEgPDwgNyk7IC8vc2V0IGJpdDc9MAorCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgQmJwRGF0YSk7CisKKwkJCS8vIE5vIENhcnJpZXIgU3VwcHJlc3Npb24gc2V0IEJCUCBSMjQgYml0MD0wCisJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMjQsICZCYnBEYXRhKTsKKwkJCUJicERhdGEgJj0gMHhGRkZGRkZGRTsgLy9jbGVhciBiaXQwCisJCSAgICBBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjI0LCBCYnBEYXRhKTsKKwkJfQorCQkvLyBXZSBzaG91bGQgZnJlZSBzb21lIHJlc291cmNlIHdoaWNoIGFsbG9jYXRlIHdoZW4gQVRFX1RYRlJBTUUgLCBBVEVfU1RPUCwgYW5kIEFURV9UWENPTlQuCisJCS8vIFRPRE86U2hvdWxkIHdlIGZyZWUgc29tZSByZXNvdXJjZSB3aGljaCB3YXMgYWxsb2NhdGVkIHdoZW4gTG9vcEJhY2sgYW5kIEFURV9TVE9QID8KKwkJZWxzZSBpZiAoKGF0ZW1vZGUgJiBBVEVfVFhGUkFNRSkgfHwgKGF0ZW1vZGUgPT0gQVRFX1NUT1ApKQorCQl7CisJCQlpZiAoYXRlbW9kZSAmIEFURV9UWENPTlQpCisJCQl7CisJCQkJLy8gTm90IENvbnQuIFRYIGFueW1vcmUsIHNvIHNldCBCQlAgUjIyIGJpdDc9MAorCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgJkJicERhdGEpOworCQkJCUJicERhdGEgJj0gfigxIDw8IDcpOyAvL3NldCBiaXQ3PTAKKwkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKwkJCX0KKwkJCS8vIEFib3J0IFR4LCBSeCBETUEuCisJCQlSdG1wRG1hRW5hYmxlKHBBZCwgMCk7CisKKwkJCXsKKwkJCQkvLyBJdCBzZWVtcyBub3RoaW5nIHRvIGZyZWUsCisJCQkJLy8gYmVjYXVzZSB3ZSBkaWRuJ3QgYWxsb2NhdGUgYW55IHJlc291cmNlIHdoZW4gd2UgZW50ZXJlZCBBVEVfVFhGUkFNRSBtb2RlIGxhdGVzdGx5LgorCQkJfQorCisJCQkvLyBTdGFydCBUeCwgUlggRE1BCisJCQlSdG1wRG1hRW5hYmxlKHBBZCwgMSk7CisJCX0KKworCQlSVFVTQlJlamVjdFBlbmRpbmdQYWNrZXRzKHBBZCk7CisJCVJUVVNCQ2xlYW5VcERhdGFCdWxrT3V0UXVldWUocEFkKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkvLworCQkvLyBJdCB3aWxsIGJlIGNhbGxlZCBpbiBNbG1lU3VzcGVuZCgpLgorCQkvLworCQkvLyBDYW5jZWwgcGVuZGluZyB0aW1lcnMKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQXNzb2NUaW1lciwgICAgICZDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5SZWFzc29jVGltZXIsICAgJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkRpc2Fzc29jVGltZXIsICAgJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwgICAgICAgJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLCAgICAgJkNhbmNlbGxlZCk7CisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgICAgICAgJkNhbmNlbGxlZCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJLy9SVFVTQkNsZWFuVXBNTE1FV2FpdFF1ZXVlKHBBZCk7CS8qIG5vdCB1c2VkIGluIFJUMjh4eCAqLworCQlSVFVTQkNsZWFuVXBNTE1FQnVsa091dFF1ZXVlKHBBZCk7CisKKwkJLy8gU29tZXRpbWVzIGtlcm5lbCB3aWxsIGhhbmcgb24sIHNvIHdlIGF2b2lkIGNhbGxpbmcgTWxtZVN1c3BlbmQoKS4KKy8vCQlNbG1lU3VzcGVuZChwQWQsIFRSVUUpOworCQkvL1JUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBlcmlvZGljVGltZXIsICZDYW5jZWxsZWQpOworCisJCS8vIERpc2FibGUgUngKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCVZhbHVlICY9IH4oMSA8PCAzKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLy8gQWJvcnQgVHgsIFJYIERNQS4KKwkJUnRtcERtYUVuYWJsZShwQWQsIDApOworCisJCS8vIERpc2FibGUgVHgKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCVZhbHVlICY9IH4oMSA8PCAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGJ1bGsgaW4vb3V0IElSUHMgYmVmb3JlIHdlIGdvIG9uLgorLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJLyogcEFkLT5QZW5kaW5nUnggaXMgbm90IG9mIHR5cGUgYXRvbWljX3QgYW55bW9yZSBpbiAyOHh4ICovCisvLwkJd2hpbGUgKChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID4gMCkpCS8vcEFkLT5CdWxrRmxhZ3MgIT0gMCB3YWl0IGJ1bGsgb3V0IGZpbmlzaAorCQl3aGlsZSAoKHBBZC0+UGVuZGluZ1J4ID4gMCkpCS8vcEFkLT5CdWxrRmxhZ3MgIT0gMCB3YWl0IGJ1bGsgb3V0IGZpbmlzaAorCQl7CisjaWYgMQorCQkJQVRFX1JUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUChwQWQpOworI2Vsc2UKKwkJCU5kaXNJbnRlcmxvY2tlZERlY3JlbWVudCgmcEFkLT5QZW5kaW5nUngpOworI2VuZGlmCisJCQkvKiBkZWxheSAwLjUgc2Vjb25kcyAqLworCQkJUlRNUHVzZWNEZWxheSg1MDAwMDApOworCQkJcEFkLT5QZW5kaW5nUnggPSAwOworCQl9CisJCS8qIHBldGVyIDogd2h5IGRvbid0IHdlIGhhdmUgdG8gZ2V0IEJ1bGtPdXRMb2NrIGZpcnN0ID8gKi8KKwkJd2hpbGUgKCgocEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9PSBUUlVFKSB8fAorCQkJCShwQWQtPkJ1bGtPdXRQZW5kaW5nWzFdID09IFRSVUUpIHx8CisJCQkJKHBBZC0+QnVsa091dFBlbmRpbmdbMl0gPT0gVFJVRSkgfHwKKwkJCQkocEFkLT5CdWxrT3V0UGVuZGluZ1szXSA9PSBUUlVFKSkgJiYgKHBBZC0+QnVsa0ZsYWdzICE9IDApKQkvL3BBZC0+QnVsa0ZsYWdzICE9IDAgd2FpdCBidWxrIG91dCBmaW5pc2gKKwkJeworCQkJZG8KKwkJCXsKKwkJCQkvKiBwQWQtPkJ1bGtPdXRQZW5kaW5nW3ldIHdpbGwgYmUgc2V0IHRvIEZBTFNFIGluIFJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKSAqLworCQkJCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKTsKKwkJCX0gd2hpbGUgKEZBTFNFKTsKKworCQkJLyogd2UgaGF2ZSBlbm91Z2ggdGltZSBkZWxheSBpbiBSVFVTQkNhbmNlbFBlbmRpbmdCdWxrT3V0SVJQKHBBZCkKKwkJCSoqIHNvIHRoaXMgaXMgbm90IG5lY2Vzc2FyeQorCQkJKi8KKy8vCQkJUlRNUHVzZWNEZWxheSg1MDAwMDApOworCQl9CisKKwkJLyogcEFkLT5QZW5kaW5nUnggaXMgbm90IG9mIHR5cGUgYXRvbWljX3QgYW55bW9yZSBpbiAyOHh4ICovCisvLwkJQVNTRVJUKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPT0gMCk7CisJCUFTU0VSVChwQWQtPlBlbmRpbmdSeCA9PSAwKTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKwkJLy8gcmVzZXQgUnggc3RhdGlzdGljcy4KKwkJcEFkLT5hdGUuTGFzdFNOUjAgPSAwOworCQlwQWQtPmF0ZS5MYXN0U05SMSA9IDA7CisJCXBBZC0+YXRlLkxhc3RSc3NpMCA9IDA7CisJCXBBZC0+YXRlLkxhc3RSc3NpMSA9IDA7CisJCXBBZC0+YXRlLkxhc3RSc3NpMiA9IDA7CisJCXBBZC0+YXRlLkF2Z1Jzc2kwID0gMDsKKwkJcEFkLT5hdGUuQXZnUnNzaTEgPSAwOworCQlwQWQtPmF0ZS5BdmdSc3NpMiA9IDA7CisJCXBBZC0+YXRlLkF2Z1Jzc2kwWDggPSAwOworCQlwQWQtPmF0ZS5BdmdSc3NpMVg4ID0gMDsKKwkJcEFkLT5hdGUuQXZnUnNzaTJYOCA9IDA7CisJCXBBZC0+YXRlLk51bU9mQXZnUnNzaVNhbXBsZSA9IDA7CisKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCQkvLyBUeCBmcmFtZQorCQlwQWQtPmF0ZS5iUUFUeFN0YXJ0ID0gRkFMU0U7CisJCXBBZC0+YXRlLmJRQVJ4U3RhcnQgPSBGQUxTRTsKKwkJcEFkLT5hdGUuc2VxID0gMDsKKworCQkvLyBjb3VudGVycworCQlwQWQtPmF0ZS5VMk0gPSAwOworCQlwQWQtPmF0ZS5PdGhlckRhdGEgPSAwOworCQlwQWQtPmF0ZS5CZWFjb24gPSAwOworCQlwQWQtPmF0ZS5PdGhlckNvdW50ID0gMDsKKwkJcEFkLT5hdGUuVHhBYzAgPSAwOworCQlwQWQtPmF0ZS5UeEFjMSA9IDA7CisJCXBBZC0+YXRlLlR4QWMyID0gMDsKKwkJcEFkLT5hdGUuVHhBYzMgPSAwOworCQlwQWQtPmF0ZS5UeEhDQ0EgPSAwOworCQlwQWQtPmF0ZS5UeE1nbXQgPSAwOworCQlwQWQtPmF0ZS5SU1NJMCA9IDA7CisJCXBBZC0+YXRlLlJTU0kxID0gMDsKKwkJcEFkLT5hdGUuUlNTSTIgPSAwOworCQlwQWQtPmF0ZS5TTlIwID0gMDsKKwkJcEFkLT5hdGUuU05SMSA9IDA7CisKKwkJLy8gY29udHJvbAorCQlwQWQtPmF0ZS5UeERvbmVDb3VudCA9IDA7CisJCXBBZC0+YXRlLlR4U3RhdHVzID0gMDsgLy8gdGFzayBUeCBzdGF0dXMgLy8gMCAtLT4gdGFzayBpcyBpZGxlLCAxIC0tPiB0YXNrIGlzIHJ1bm5pbmcKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworCisJCS8vIFNvZnQgcmVzZXQgQkJQLgorCQlCYnBTb2Z0UmVzZXQocEFkKTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUFzaWNEaXNhYmxlU3luYyhwQWQpOworCisJCS8qCisJCSoqIElmIHdlIHNraXAgIkxpbmtEb3duKCkiLCB3ZSBzaG91bGQgZGlzYWJsZSBwcm90ZWN0aW9uCisJCSoqIHRvIHByZXZlbnQgZnJvbSBzZW5kaW5nIG91dCBSVFMgb3IgQ1RTLXRvLXNlbGYuCisJCSovCisJCUFURURpc2FibGVBc2ljUHJvdGVjdChwQWQpOworCQlSVE1QU3RhdGlvblN0b3AocEFkKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkvLyBEZWZhdWx0IHZhbHVlIGluIEJCUCBSMjIgaXMgMHgwLgorCQlCYnBEYXRhID0gMDsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZNYWNEYXRhKTsKKworCQkvLyBDbGVhbiBiaXQ0IHRvIHN0b3AgY29udGludW91cyBUeCBwcm9kdWN0aW9uIHRlc3QuCisJCU1hY0RhdGEgJj0gMHhGRkZGRkZFRjsKKwkgICAJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgQmJwRGF0YSk7CisJICAgIAlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIE1hY0RhdGEpOworCQkvL0NsZWFuIEFURSBCdWxrIGluL291dCBjb3VudGVyIGFuZCBjb250aW51ZSBzZXR1cAorCQlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCwgMCk7CisKKwkJLyogTmRpc0FjcXVpcmVTcGluTG9jaygpL05kaXNSZWxlYXNlU3BpbkxvY2soKSBuZWVkIG9ubHkgb25lIGFyZ3VtZW50IGluIFJUMjh4eCAqLworCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkdlbmVyaWNMb2NrKTsKKwkJcEFkLT5Db250aW5CdWxrT3V0ID0gRkFMU0U7CisJCXBBZC0+Q29udGluQnVsa0luID0gRkFMU0U7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworCisJCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX0FURSk7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiQVRFU1RPUCIpKQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFIDogQVRFU1RPUCA9PT0+XG4iKSk7CisKKwkJLy8gRGVmYXVsdCB2YWx1ZSBpbiBCQlAgUjIyIGlzIDB4MC4KKwkJQmJwRGF0YSA9IDA7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmTWFjRGF0YSk7Ly8wODIwCisJCS8vIENsZWFuIGJpdDQgdG8gc3RvcCBjb250aW51b3VzIFR4IHByb2R1Y3Rpb24gdGVzdC4KKwkJTWFjRGF0YSAmPSAweEZGRkZGRkVGOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBNYWNEYXRhKTsgLy8gcmVjb3ZlciB0aGUgTUFDX1NZU19DVFJMIHJlZ2lzdGVyIGJhY2suCisKKwkJLy8gRGlzYWJsZSBSeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQkvKgorCQkqKiBBYm9ydCBUeCwgUlggRE1BLgorCQkqKiBRICAgOiBIb3cgdG8gZG8gdGhlIGZvbGxvd2luZyBJL08gaWYgVHgsIFJ4IERNQSBpcyBhYm9ydGVkID8KKwkJKiogQW5zIDogQnVsayBlbmRwb2ludHMgYXJlIGFib3J0ZWQsIHdoaWxlIHRoZSBjb250cm9sIGVuZHBvaW50IGlzIG5vdC4KKwkJKi8KKwkJUnRtcERtYUVuYWJsZShwQWQsIDApOworCisJCS8vIERpc2FibGUgVHgKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCVZhbHVlICY9IH4oMSA8PCAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLyogTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBwZW5kaW5nIGJ1bGsgaW4vb3V0IElSUHMgYmVmb3JlIHdlIGdvIG9uLiAqLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8vCQl3aGlsZSAoKGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPiAwKSkJLy9wQWQtPkJ1bGtGbGFncyAhPSAwIHdhaXQgYnVsayBvdXQgZmluaXNoCisJCXdoaWxlIChwQWQtPlBlbmRpbmdSeCA+IDApCisJCXsKKyNpZiAxCisJCQlBVEVfUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKHBBZCk7CisjZWxzZQorLy8JCQlOZGlzSW50ZXJsb2NrZWREZWNyZW1lbnQoJnBBZC0+UGVuZGluZ1J4KTsKKwkJCXBBZC0+UGVuZGluZ1J4LS07CisjZW5kaWYKKwkJCVJUTVB1c2VjRGVsYXkoNTAwMDAwKTsKKwkJfQorCisJCXdoaWxlICgoKHBBZC0+QnVsa091dFBlbmRpbmdbMF0gPT0gVFJVRSkgfHwKKwkJCQkocEFkLT5CdWxrT3V0UGVuZGluZ1sxXSA9PSBUUlVFKSB8fAorCQkJCShwQWQtPkJ1bGtPdXRQZW5kaW5nWzJdID09IFRSVUUpIHx8CisJCQkJKHBBZC0+QnVsa091dFBlbmRpbmdbM10gPT0gVFJVRSkpICYmIChwQWQtPkJ1bGtGbGFncyAhPSAwKSkJLy9wQWQtPkJ1bGtGbGFncyAhPSAwIHdhaXQgYnVsayBvdXQgZmluaXNoCisJCXsKKwkJCWRvCisJCQl7CisJCQkJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUChwQWQpOworCQkJfSB3aGlsZSAoRkFMU0UpOworCisJCQlSVE1QdXNlY0RlbGF5KDUwMDAwMCk7CisJCX0KKworLy8JCUFTU0VSVChhdG9taWNfcmVhZCgmcEFkLT5QZW5kaW5nUngpID09IDApOworCQlBU1NFUlQocEFkLT5QZW5kaW5nUnggPT0gMCk7CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogICAgICBSZXNldCBSeCBSSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvLwkJSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5QZW5kaW5nUngsIDApOworCQlwQWQtPlBlbmRpbmdSeCA9IDA7CisJCXBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4ID0gMDsJLy8gTmV4dCBSeCBSZWFkIGluZGV4CisJCXBBZC0+TmV4dFJ4QnVsa0luSW5kZXggPSBSWF9SSU5HX1NJWkUgLSAxOwkvLyBSeCBCdWxrIHBvaW50ZXIKKwkJcEFkLT5OZXh0UnhCdWxrSW5Qb3NpdGlvbiA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCAoUlhfUklOR19TSVpFKTsgaSsrKQorCQl7CisJCQlQUlhfQ09OVEVYVCAgcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCQkJTmRpc1plcm9NZW1vcnkocFJ4Q29udGV4dC0+VHJhbnNmZXJCdWZmZXIsIE1BWF9SWEJVTEtfU0laRSk7CisJCQkvKiBwZXRlciA6IHdoeSBkb24ndCB3ZSBoYXZlIHRvIGdldCBCdWxrSW5Mb2NrIGZpcnN0ID8gKi8KKwkJCXBSeENvbnRleHQtPnBBZAk9IHBBZDsKKwkJCXBSeENvbnRleHQtPnBJcnAgPSBOVUxMOworICAgICAgICAgICAgLyogcGV0ZXIgZGVidWcgKysgKi8KKwkJCXBSeENvbnRleHQtPkJ1bGtJbk9mZnNldCA9IDA7CisJCQlwUnhDb250ZXh0LT5iUnhIYW5kbGluZyA9IEZBTFNFOworICAgICAgICAgICAgLyogcGV0ZXIgZGVidWcgLS0gKi8KKwkJCXBSeENvbnRleHQtPkluVXNlCQk9IEZBTFNFOworCQkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZwk9IEZBTFNFOworCQkJcFJ4Q29udGV4dC0+UmVhZGFibGUJPSBGQUxTRTsKKy8vCQkJcFJ4Q29udGV4dC0+UmVvcmRlckluVXNlID0gRkFMU0U7CisvLwkJCXBSeENvbnRleHQtPlJlYWRQb3NPZmZzZXQgPSAwOworCQl9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiAgICAgIFJlc2V0IFR4IFJJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJZG8KKwkJeworCQkJUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUChwQWQpOworCQl9IHdoaWxlIChGQUxTRSk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJCS8vIEVuYWJsZSBhdXRvIHJlc3BvbmRlci4KKwkJUlRNUF9JT19SRUFEMzIocEFkLCBBVVRPX1JTUF9DRkcsICZ0ZW1wKTsKKwkJdGVtcCA9IHRlbXAgfCAoMHgwMSk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIEFVVE9fUlNQX0NGRywgdGVtcCk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJQXNpY0VuYWJsZUJzc1N5bmMocEFkKTsKKworCQkvKiBTb2Z0IHJlc2V0IEJCUC4qLworCQkvKiBJbiAyODcwIGNoaXBzZXQsIEFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKCkgPT0gUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKCkgKi8KKwkJLyogQm90aCBydDI4NzBhcCBhbmQgcnQyODcwc3RhIHVzZSBCYnBTb2Z0UmVzZXQocEFkKSB0byBkbyBCQlAgc29mdCByZXNldCAqLworCQlCYnBTb2Z0UmVzZXQocEFkKTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJLy8gU2V0IGFsbCBzdGF0ZSBtYWNoaW5lcyBiYWNrIElETEUKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgICAgPSBDTlRMX0lETEU7CisJCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSAgID0gQVNTT0NfSURMRTsKKwkJCXBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgICAgPSBBVVRIX1JFUV9JRExFOworCQkJcEFkLT5NbG1lLkF1dGhSc3BNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUlNQX0lETEU7CisJCQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlICAgID0gU1lOQ19JRExFOworCQkJcEFkLT5NbG1lLkFjdE1hY2hpbmUuQ3VyclN0YXRlICAgID0gQUNUX0lETEU7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCS8vCisJCQkvLyA9PT0+IHJlZmVyIHRvIE1sbWVSZXN0YXJ0U3RhdGVNYWNoaW5lKCkuCisJCQkvLyBXaGVuIHdlIGVudGVyZWQgQVRFX1NUQVJUIG1vZGUsIFBlcmlvZGljVGltZXIgd2FzIG5vdCBjYW5jZWxsZWQuCisJCQkvLyBTbyB3ZSBkb24ndCBoYXZlIHRvIHNldCBpdCBoZXJlLgorCQkJLy8KKwkJCS8vUlRNUFNldFRpbWVyKHBBZCwgJnBBZC0+TWxtZS5QZXJpb2RpY1RpbWVyLCBNTE1FX1RBU0tfRVhFQ19JTlRWKTsKKworCQkJQVNTRVJUKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgIT0gMCk7CisKKwkJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOworCQkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkgICAgUlRNUFN0YXRpb25TdGFydChwQWQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQl9CisvLworLy8gVGhlc2UgdHdvIHN0ZXBzIGhhdmUgYmVlbiBkb25lIHdoZW4gZW50ZXJpbmcgQVRFX1NUT1AgbW9kZS4KKy8vCisJCS8vIENsZWFuIEFURSBCdWxrIGluL291dCBjb3VudGVyIGFuZCBjb250aW51ZSBzZXR1cC4KKwkJSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5CdWxrT3V0UmVtYWluZWQsIDApOworCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkdlbmVyaWNMb2NrKTsKKwkJcEFkLT5Db250aW5CdWxrT3V0ID0gRkFMU0U7CisJCXBBZC0+Q29udGluQnVsa0luID0gRkFMU0U7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworCisJCS8qIFdhaXQgNTBtcyB0byBwcmV2ZW50IG5leHQgVVJCIHRvIGJ1bGtvdXQgZHVyaW5nIEhXIHJlc2V0LiAqLworCQkvKiB0b2RvIDogcmVtb3ZlIHRoaXMgaWYgbm90IG5lY2Vzc2FyeSAqLworCQlOZGlzTVNsZWVwKDUwMDAwKTsKKworCQlwQWQtPmF0ZS5Nb2RlID0gQVRFX1NUT1A7CisKKwkJLy8gRW5hYmxlIFR4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSB8PSAoMSA8PCAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJCS8qIHJlc3RvcmUgUlhfRklMVFJfQ0ZHICovCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCS8qIHJlc3RvcmUgUlhfRklMVFJfQ0ZHIGluIG9yZGVyIHRoYXQgUUEgbWF5YmUgc2V0IGl0IHRvIDB4MyAqLworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9GSUxUUl9DRkcsIFNUQU5PUk1BTCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisJCS8vIEVuYWJsZSBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMSk7CisKKwkJLy8gRW5hYmxlIFJ4CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmVmFsdWUpOworCQlWYWx1ZSB8PSAoMSA8PCAzKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLy8gV2FpdCAxMG1zIHRvIHdhaXQgYWxsIG9mIHRoZSBidWxrLWluIFVSQnMgdG8gY29tcGxldGUuCisJCS8qIHRvZG8gOiByZW1vdmUgdGhpcyBpZiBub3QgbmVjZXNzYXJ5ICovCisJCU5kaXNNU2xlZXAoMTAwMDApOworCisJCS8vIEV2ZXJ5dGhpbmcgaXMgcmVhZHkgdG8gc3RhcnQgbm9ybWFsIFR4L1J4LgorCQlSVFVTQkJ1bGtSZWNlaXZlKHBBZCk7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKHBBZC0+bmV0X2Rldik7CisKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09PSBBVEUgOiBBVEVTVE9QIFxuIikpOworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIlRYQ0FSUiIpKQkvLyBUeCBDYXJyaWVyCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVEU6IFRYQ0FSUlxuIikpOworCQlwQWQtPmF0ZS5Nb2RlIHw9IEFURV9UWENBUlI7CisKKyNpZmRlZiBSVDMweHgKKwkJCWZvcihpPTA7aTxBVEVfQkJQX1JFR19OVU07aSsrKQorCQkJCXJlc3RvcmVfQkJQW2ldPTA7CisJCQkvL1JlY29yZCBBbGwgQkJQIFZhbHVlCisJCQlmb3IoaT0wO2k8QVRFX0JCUF9SRUdfTlVNO2krKykKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCxpLCZyZXN0b3JlX0JCUFtpXSk7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKwkJLy8gRGlzYWJsZSBSeAorCQkvLyBNYXkgYmUgd2UgbmVlZCBub3QgdG8gZG8gdGhpcywgYmVjYXVzZSB0aGVzZSBoYXZlIGJlZW4gZG9uZSBpbiBBVEVfU1RBUlQgbW9kZSA/Pz8KKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCVZhbHVlICY9IH4oMSA8PCAzKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLy8gUUEgaGFzIGRvbmUgdGhlIGZvbGxvd2luZyBzdGVwcyBpZiBpdCBpcyB1c2VkLgorCQlpZiAocEFkLT5hdGUuYlFBVHhTdGFydCA9PSBGQUxTRSkKKwkJeworCQkJLy8gU29mdCByZXNldCBCQlAuCisJCQlCYnBTb2Z0UmVzZXQocEFkKTsKKworCQkJLy8gQ2FycmllciBUZXN0IHNldCBCQlAgUjIyIGJpdDc9MSwgYml0Nj0xLCBiaXRbNX4wXT0weDAxCisJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsICZCYnBEYXRhKTsKKwkJCUJicERhdGEgJj0gMHhGRkZGRkYwMDsgLy9jbGVhciBiaXQ3LCBiaXQ2LCBiaXRbNX4wXQorCQkJQmJwRGF0YSB8PSAweDAwMDAwMEMxOyAvL3NldCBiaXQ3PTEsIGJpdDY9MSwgYml0WzV+MF09MHgwMQorCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgQmJwRGF0YSk7CisKKwkJCS8vIHNldCBNQUNfU1lTX0NUUkwoMHgxMDA0KSBDb250aW51b3VzIFR4IFByb2R1Y3Rpb24gVGVzdCAoYml0NCkgPSAxCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJCVZhbHVlID0gVmFsdWUgfCAweDAwMDAwMDEwOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisJCX0KKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJUWENPTlQiKSkJLy8gVHggQ29udGludWUKKwl7CisJCWlmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpCisJCXsKKwkJCS8qIHNldCBNQUNfU1lTX0NUUkwoMHgxMDA0KSBiaXQ0KENvbnRpbnVvdXMgVHggUHJvZHVjdGlvbiBUZXN0KQorCQkJICAgYW5kIGJpdDIoTUFDIFRYIGVuYWJsZSkgYmFjayB0byB6ZXJvLiAqLworCQkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZNYWNEYXRhKTsKKwkJCU1hY0RhdGEgJj0gMHhGRkZGRkZFQjsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgTWFjRGF0YSk7CisKKwkJCS8vIHNldCBCQlAgUjIyIGJpdDc9MAorCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCAmQmJwRGF0YSk7CisJCQlCYnBEYXRhICY9IDB4RkZGRkZGN0Y7IC8vc2V0IGJpdDc9MAorCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgQmJwRGF0YSk7CisJCX0KKworCQkvKiBmb3IgVHhDb250IG1vZGUuCisJCSoqIFN0ZXAgMTogU2VuZCA1MCBwYWNrZXRzIGZpcnN0IHRoZW4gd2FpdCBmb3IgYSBtb21lbnQuCisJCSoqIFN0ZXAgMjogU2VuZCBtb3JlIDUwIHBhY2tldCB0aGVuIHN0YXJ0IGNvbnRpbnVlIG1vZGUuCisJCSovCisJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFURTogVFhDT05UXG4iKSk7CisKKyNpZmRlZiBSVDMweHgKKwkJCQlmb3IoaT0wO2k8QVRFX0JCUF9SRUdfTlVNO2krKykKKwkJCQlyZXN0b3JlX0JCUFtpXT0wOworCQkJLy9SZWNvcmQgQWxsIEJCUCBWYWx1ZQorCQkJZm9yKGk9MDtpPEFURV9CQlBfUkVHX05VTTtpKyspCisJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsaSwmcmVzdG9yZV9CQlBbaV0pOworI2VuZGlmIC8vIFJUMzB4eCAvLworCisJCS8vIFN0ZXAgMTogc2VuZCA1MCBwYWNrZXRzIGZpcnN0LgorCQlwQWQtPmF0ZS5Nb2RlIHw9IEFURV9UWENPTlQ7CisJCXBBZC0+YXRlLlR4Q291bnQgPSA1MDsKKwkJcEFkLT5hdGUuVHhEb25lQ291bnQgPSAwOworCisJCS8vIFNvZnQgcmVzZXQgQkJQLgorCQlCYnBTb2Z0UmVzZXQocEFkKTsKKworCQkvLyBBYm9ydCBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMCk7CisKKworCQkvKiBPbmx5IG5lZWRlZCBpZiB3ZSBoYXZlIHRvIHNlbmQgc29tZSBub3JtYWwgZnJhbWVzLiAqLworCQlTZXRKYXBhbkZpbHRlcihwQWQpOworCisJCS8vIFNldHVwIGZyYW1lIGZvcm1hdC4KKwkJQVRFU2V0VXBGcmFtZShwQWQsIDApOworCisJCS8vIEVuYWJsZSBUeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgfD0gKDEgPDwgMik7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworCisJCS8vIERpc2FibGUgUngKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCVZhbHVlICY9IH4oMSA8PCAzKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLy8gU3RhcnQgVHgsIFJYIERNQS4KKwkJUnRtcERtYUVuYWJsZShwQWQsIDEpOworCisJCUludGVybG9ja2VkRXhjaGFuZ2UoJnBBZC0+QnVsa091dFJlbWFpbmVkLCBwQWQtPmF0ZS5UeENvdW50KTsKKworI2lmZGVmCVJBTElOS18yOHh4X1FBCisJCWlmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpCisJCXsKKwkJCXBBZC0+YXRlLlR4U3RhdHVzID0gMTsKKwkJCS8vcEFkLT5hdGUuUmVwZWF0ID0gMDsKKwkJfQorI2VuZGlmCS8vIFJBTElOS18yOHh4X1FBIC8vCisKKwkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7Ly8wODIwCisJCXBBZC0+Q29udGluQnVsa091dCA9IEZBTFNFOworCQlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPkdlbmVyaWNMb2NrKTsKKworCQlSVFVTQl9TRVRfQlVMS19GTEFHKHBBZCwgZlJUVVNCX0JVTEtfT1VUX0RBVEFfQVRFKTsKKworCQkvLyBLaWNrIGJ1bGsgb3V0CisJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKworCQkvKiBUbyBtYWtlIHN1cmUgYWxsIHRoZSA1MCBmcmFtZXMgaGF2ZSBiZWVuIGJ1bGsgb3V0IGJlZm9yZSBleGVjdXRpbmcgc3RlcCAyICovCisJCXdoaWxlIChhdG9taWNfcmVhZCgmcEFkLT5CdWxrT3V0UmVtYWluZWQpID4gMCkKKwkJeworCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwkJfQorCisJCS8vIFN0ZXAgMjogc2VuZCBtb3JlIDUwIHBhY2tldHMgdGhlbiBzdGFydCBjb250aW51ZSBtb2RlLgorCQkvLyBBYm9ydCBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMCk7CisKKwkJLy8gQ29udC4gVFggc2V0IEJCUCBSMjIgYml0Nz0xCisJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgJkJicERhdGEpOworCQlCYnBEYXRhIHw9IDB4MDAwMDAwODA7IC8vc2V0IGJpdDc9MQorCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCBCYnBEYXRhKTsKKworCQlwQWQtPmF0ZS5UeENvdW50ID0gNTA7CisJCXBBZC0+YXRlLlR4RG9uZUNvdW50ID0gMDsKKworCQlTZXRKYXBhbkZpbHRlcihwQWQpOworCisJCS8vIFNldHVwIGZyYW1lIGZvcm1hdC4KKwkJQVRFU2V0VXBGcmFtZShwQWQsIDApOworCisJCS8vIEVuYWJsZSBUeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgfD0gKDEgPDwgMik7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworCisJCS8vIERpc2FibGUgUngKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCVZhbHVlICY9IH4oMSA8PCAzKTsKKworCQkvLyBTdGFydCBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMSk7CisKKwkJSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5CdWxrT3V0UmVtYWluZWQsIHBBZC0+YXRlLlR4Q291bnQpOworCisjaWZkZWYJUkFMSU5LXzI4eHhfUUEKKwkJaWYgKHBBZC0+YXRlLmJRQVR4U3RhcnQgPT0gVFJVRSkKKwkJeworCQkJcEFkLT5hdGUuVHhTdGF0dXMgPSAxOworCQkJLy9wQWQtPmF0ZS5SZXBlYXQgPSAwOworCQl9CisjZW5kaWYJLy8gUkFMSU5LXzI4eHhfUUEgLy8KKworCQlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPkdlbmVyaWNMb2NrKTsvLzA4MjAKKwkJcEFkLT5Db250aW5CdWxrT3V0ID0gRkFMU0U7CisJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworCisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9BVEUpOworCQkvLyBLaWNrIGJ1bGsgb3V0CisJCVJUVVNCS2lja0J1bGtPdXQocEFkKTsKKworI2lmIDEKKwkJUlRNUHVzZWNEZWxheSg1MDApOworI2Vsc2UKKwkJd2hpbGUgKGF0b21pY19yZWFkKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCkgPiAwKQorCQl7CisJCQlSVE1QdXNlY0RlbGF5KDUwMDApOworCQl9CisjZW5kaWYgLy8gMSAvLworCisJCS8vIFNldCBNQUNfU1lTX0NUUkwoMHgxMDA0KSBDb250aW51b3VzIFR4IFByb2R1Y3Rpb24gVGVzdCAoYml0NCkgPSAxLgorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJk1hY0RhdGEpOworCQlNYWNEYXRhIHw9IDB4MDAwMDAwMTA7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgTWFjRGF0YSk7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiVFhGUkFNRSIpKQkvLyBUeCBGcmFtZXMKKwl7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFURTogVFhGUkFNRShDb3VudD0weCUwOHgpXG4iLCBwQWQtPmF0ZS5UeENvdW50KSk7CisJCXBBZC0+YXRlLk1vZGUgfD0gQVRFX1RYRlJBTUU7CisKKwkJLy8gU29mdCByZXNldCBCQlAuCisJCUJicFNvZnRSZXNldChwQWQpOworCisJCS8vIERlZmF1bHQgdmFsdWUgaW4gQkJQIFIyMiBpcyAweDAuCisJCUJicERhdGEgPSAwOworCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgTUFDX1NZU19DVFJMLCAmTWFjRGF0YSk7CisKKwkJLy8gQ2xlYW4gYml0NCB0byBzdG9wIGNvbnRpbnVvdXMgVHggcHJvZHVjdGlvbiB0ZXN0LgorCQlNYWNEYXRhICY9IDB4RkZGRkZGRUY7CisKKwkgICAJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgQmJwRGF0YSk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgTWFjRGF0YSk7CisKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCQkvLyBhZGQgdGhpcyBmb3IgTG9vcEJhY2sgbW9kZQorCQlpZiAocEFkLT5hdGUuYlFBUnhTdGFydCA9PSBGQUxTRSkKKwkJeworCQkJLy8gRGlzYWJsZSBSeAorCQkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCQlWYWx1ZSAmPSB+KDEgPDwgMyk7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKwkJfQorCisJCWlmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpCisJCXsKKwkJCXBBZC0+YXRlLlR4U3RhdHVzID0gMTsKKwkJCS8vcEFkLT5hdGUuUmVwZWF0ID0gMDsKKwkJfQorI2Vsc2UKKwkJLy8gRGlzYWJsZSBSeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworCisJCS8vIEVuYWJsZSBUeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgfD0gKDEgPDwgMik7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworCisgICAgICAgIFNldEphcGFuRmlsdGVyKHBBZCk7CisKKwkJLy8gQWJvcnQgVHgsIFJYIERNQS4KKwkJUnRtcERtYUVuYWJsZShwQWQsIDApOworCisJCXBBZC0+YXRlLlR4RG9uZUNvdW50ID0gMDsKKworICAgICAgICAvLyBTZXR1cCBmcmFtZSBmb3JtYXQKKwkJQVRFU2V0VXBGcmFtZShwQWQsIDApOworCisJCS8vIFN0YXJ0IFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAxKTsKKworCQkvLyBDaGVjayBjb3VudCBpcyBjb250aW51b3VzIG9yIG5vdCB5ZXQuCisJCS8vCisJCS8vIER1ZSB0byB0aGUgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICJwQWQtPkJ1bGtPdXRSZW1haW5lZCIoYXRvbWljX3QpIGFuZCAicEFkLT5hdGUuVHhDb3VudCIoVUlOVDMyKQorCQkvLworCQlpZiAocEFkLT5hdGUuVHhDb3VudCA9PSAwKQorCQl7CisJCQlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCwgMCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCwgcEFkLT5hdGUuVHhDb3VudCk7CisJCX0KKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiYnVsayBvdXQgY291bnQgPSAlZFxuIiwgYXRvbWljX3JlYWQoJnBBZC0+QnVsa091dFJlbWFpbmVkKSkpOworCQlBU1NFUlQoKGF0b21pY19yZWFkKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCkgPj0gMCkpOworCisJCWlmIChhdG9taWNfcmVhZCgmcEFkLT5CdWxrT3V0UmVtYWluZWQpID09IDApCisJCXsKKwkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNlbmQgcGFja2V0IGNvdW50aW51b3VzbHlcbiIpKTsKKworCQkJLyogSW4gMjh4eCwgTmRpc0FjcXVpcmVTcGluTG9jaygpID09IHNwaW5fbG9ja19iaCgpICovCisJCQkvKiBOZGlzQWNxdWlyZVNwaW5Mb2NrIG9ubHkgbmVlZCBvbmUgYXJndW1lbnQgaW4gMjh4eC4gKi8KKwkJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworCQkJcEFkLT5Db250aW5CdWxrT3V0ID0gVFJVRTsKKwkJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworCisJCQkvKiBJbiAyOHh4LCBCVUxLX09VVF9MT0NLKCkgPT0gc3Bpbl9sb2NrX2lycXNhdmUoKSAqLworCQkJQlVMS19PVVRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1swXSwgSXJxRmxhZ3MpOy8vIHBldGVyIDogTmRpc0FjcXVpcmVTcGluTG9jayA9PT4gQlVMS19PVVRfTE9DSworCQkJcEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9IEZBTFNFOworCQkJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7Ly8gcGV0ZXIgOiBOZGlzQWNxdWlyZVNwaW5Mb2NrID09PiBCVUxLX09VVF9MT0NLCisJCX0KKwkJZWxzZQorCQl7CisJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZW5kIHBhY2tldHMgZGVwZW5kIG9uIGNvdW50ZXJcbiIpKTsKKworCQkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5HZW5lcmljTG9jayk7CisJCQlwQWQtPkNvbnRpbkJ1bGtPdXQgPSBGQUxTRTsKKwkJCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+R2VuZXJpY0xvY2spOworCisJCQlCVUxLX09VVF9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrWzBdLCBJcnFGbGFncyk7CisJCQlwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID0gRkFMU0U7CisJCQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbMF0sIElycUZsYWdzKTsKKwkJfQorCisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9BVEUpOworCisJCS8vIEtpY2sgYnVsayBvdXQKKwkJUlRVU0JLaWNrQnVsa091dChwQWQpOworCX0KKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiVFhTVE9QIikpIAkJLy9FbnRlciBBVEUgbW9kZSBhbmQgc2V0IFR4L1J4IElkbGUKKwl7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFURTogVFhTVE9QXG4iKSk7CisKKwkJYXRlbW9kZSA9IHBBZC0+YXRlLk1vZGU7CisJCXBBZC0+YXRlLk1vZGUgJj0gQVRFX1RYU1RPUDsKKwkJcEFkLT5hdGUuYlFBVHhTdGFydCA9IEZBTFNFOworLy8JCXBBZC0+YXRlLlR4RG9uZUNvdW50ID0gcEFkLT5hdGUuVHhDb3VudDsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJaWYgKGF0ZW1vZGUgJiBBVEVfVFhDQVJSKQorCQl7CisJCQkvLyBObyBDYXJyaWVyIFRlc3Qgc2V0IEJCUCBSMjIgYml0Nz0wLCBiaXQ2PTAsIGJpdFs1fjBdPTB4MAorCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCAmQmJwRGF0YSk7CisJCQlCYnBEYXRhICY9IDB4RkZGRkZGMDA7IC8vY2xlYXIgYml0NywgYml0NiwgYml0WzV+MF0KKwkJICAgIEFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsIEJicERhdGEpOworCQl9CisJCWVsc2UgaWYgKGF0ZW1vZGUgJiBBVEVfVFhDQVJSU1VQUCkKKwkJeworCQkJLy8gTm8gQ29udC4gVFggc2V0IEJCUCBSMjIgYml0Nz0wCisJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsICZCYnBEYXRhKTsKKwkJCUJicERhdGEgJj0gfigxIDw8IDcpOyAvL3NldCBiaXQ3PTAKKwkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsIEJicERhdGEpOworCisJCQkvLyBObyBDYXJyaWVyIFN1cHByZXNzaW9uIHNldCBCQlAgUjI0IGJpdDA9MAorCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjI0LCAmQmJwRGF0YSk7CisJCQlCYnBEYXRhICY9IDB4RkZGRkZGRkU7IC8vY2xlYXIgYml0MAorCQkgICAgQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyNCwgQmJwRGF0YSk7CisJCX0KKwkJZWxzZSBpZiAoKGF0ZW1vZGUgJiBBVEVfVFhGUkFNRSkgfHwgKGF0ZW1vZGUgPT0gQVRFX1NUT1ApKQorCQl7CisJCQlpZiAoYXRlbW9kZSAmIEFURV9UWENPTlQpCisJCQl7CisJCQkJLy8gTm8gQ29udC4gVFggc2V0IEJCUCBSMjIgYml0Nz0wCisJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjIyLCAmQmJwRGF0YSk7CisJCQkJQmJwRGF0YSAmPSB+KDEgPDwgNyk7IC8vc2V0IGJpdDc9MAorCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMjIsIEJicERhdGEpOworCQkJfQorCQl9CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJCVJUVVNCUmVqZWN0UGVuZGluZ1BhY2tldHMocEFkKTsKKwkJUlRVU0JDbGVhblVwRGF0YUJ1bGtPdXRRdWV1ZShwQWQpOworCisJCS8qIG5vdCB1c2VkIGluIFJUMjh4eCAqLworCQkvL1JUVVNCQ2xlYW5VcE1MTUVXYWl0UXVldWUocEFkKTsKKwkJLyogZW1wdHkgZnVuY3Rpb24gc28gZmFyICovCisJCVJUVVNCQ2xlYW5VcE1MTUVCdWxrT3V0UXVldWUocEFkKTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJCS8vIEFib3J0IFR4LCBSWCBETUEuCisJCVJ0bXBEbWFFbmFibGUocEFkLCAwKTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKwkJLyogSW4gMjh4eCwgcEFkLT5QZW5kaW5nUnggaXMgbm90IG9mIHR5cGUgYXRvbWljX3QgYW55bW9yZSAqLworLy8JCXdoaWxlICgoYXRvbWljX3JlYWQoJnBBZC0+UGVuZGluZ1J4KSA+IDApKQkvL3BBZC0+QnVsa0ZsYWdzICE9IDAgd2FpdCBidWxrIG91dCBmaW5pc2gKKwkJLyogcGV0ZXIgdG9kbyA6IEJ1bGtJbkxvY2sgKi8KKwkJd2hpbGUgKHBBZC0+UGVuZGluZ1J4ID4gMCkKKwkJeworI2lmIDEKKwkJCUFURV9SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlAocEFkKTsKKyNlbHNlCisvLwkJCU5kaXNJbnRlcmxvY2tlZERlY3JlbWVudCgmcEFkLT5QZW5kaW5nUngpOworCQkJcEFkLT5QZW5kaW5nUngtLTsKKyNlbmRpZgorCQkJUlRNUHVzZWNEZWxheSg1MDAwMDApOworCQl9CisKKwkJd2hpbGUgKCgocEFkLT5CdWxrT3V0UGVuZGluZ1swXSA9PSBUUlVFKSB8fAorCQkJCShwQWQtPkJ1bGtPdXRQZW5kaW5nWzFdID09IFRSVUUpIHx8CisJCQkJKHBBZC0+QnVsa091dFBlbmRpbmdbMl0gPT0gVFJVRSkgfHwKKwkJCQkocEFkLT5CdWxrT3V0UGVuZGluZ1szXSA9PSBUUlVFKSkgJiYgKHBBZC0+QnVsa0ZsYWdzICE9IDApKQkvL3BBZC0+QnVsa0ZsYWdzICE9IDAgd2FpdCBidWxrIG91dCBmaW5pc2gKKwkJeworCQkJZG8KKwkJCXsKKwkJCQlSVFVTQkNhbmNlbFBlbmRpbmdCdWxrT3V0SVJQKHBBZCk7CisJCQl9IHdoaWxlIChGQUxTRSk7CisKKwkJCVJUTVB1c2VjRGVsYXkoNTAwMDAwKTsKKwkJfQorCisJCUFTU0VSVChwQWQtPlBlbmRpbmdSeCA9PSAwKTsKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJCS8vIEVuYWJsZSBUeCwgUnggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMSk7CisKKwkJLyogdGFzayBUeCBzdGF0dXMgOiAwIC0tPiB0YXNrIGlzIGlkbGUsIDEgLS0+IHRhc2sgaXMgcnVubmluZyAqLworCQlwQWQtPmF0ZS5UeFN0YXR1cyA9IDA7CisKKwkJLy8gU29mdCByZXNldCBCQlAuCisJCUJicFNvZnRSZXNldChwQWQpOworCisJCS8vIERpc2FibGUgVHgKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZNYWNEYXRhKTsKKwkJTWFjRGF0YSAmPSAoMHhmZmZmZmZmYik7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgTWFjRGF0YSk7CisKKwkJLy9DbGVhbiBBVEUgQnVsayBpbi9vdXQgY291bnRlciBhbmQgY29udGludWUgc2V0dXAKKwkJSW50ZXJsb2NrZWRFeGNoYW5nZSgmcEFkLT5CdWxrT3V0UmVtYWluZWQsIDApOworCisJCXBBZC0+Q29udGluQnVsa091dCA9IEZBTFNFOworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIlJYU1RPUCIpKQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFOiBSWFNUT1BcbiIpKTsKKwkJYXRlbW9kZSA9IHBBZC0+YXRlLk1vZGU7CisKKwkJLy8gRGlzYWJsZSBSeAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gfigxIDw8IDMpOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQUNfU1lTX0NUUkwsIFZhbHVlKTsKKworCQlwQWQtPmF0ZS5Nb2RlICY9IEFURV9SWFNUT1A7CisJCXBBZC0+YXRlLmJRQVJ4U3RhcnQgPSBGQUxTRTsKKy8vCQlwQWQtPmF0ZS5UeERvbmVDb3VudCA9IHBBZC0+YXRlLlR4Q291bnQ7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisJCVJUVVNCUmVqZWN0UGVuZGluZ1BhY2tldHMocEFkKTsKKwkJUlRVU0JDbGVhblVwRGF0YUJ1bGtPdXRRdWV1ZShwQWQpOworCisJCS8qIG5vdCB1c2VkIGluIFJUMjh4eCAqLworCQkvL1JUVVNCQ2xlYW5VcE1MTUVXYWl0UXVldWUocEFkKTsKKwkJUlRVU0JDbGVhblVwTUxNRUJ1bGtPdXRRdWV1ZShwQWQpOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCQkvLyBBYm9ydCBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMCk7CisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLy8JCXdoaWxlICgoYXRvbWljX3JlYWQoJnBBZC0+UGVuZGluZ1J4KSA+IDApKQorCQl3aGlsZSAocEFkLT5QZW5kaW5nUnggPiAwKQorCQl7CisjaWYgMQorCQkJQVRFX1JUVVNCQ2FuY2VsUGVuZGluZ0J1bGtJbklSUChwQWQpOworI2Vsc2UKKy8vCQkJTmRpc0ludGVybG9ja2VkRGVjcmVtZW50KCZwQWQtPlBlbmRpbmdSeCk7CisJCQlwQWQtPlBlbmRpbmdSeC0tOworI2VuZGlmCisJCQlSVE1QdXNlY0RlbGF5KDUwMDAwMCk7CisJCX0KKworCQl3aGlsZSAoKChwQWQtPkJ1bGtPdXRQZW5kaW5nWzBdID09IFRSVUUpIHx8CisJCQkJKHBBZC0+QnVsa091dFBlbmRpbmdbMV0gPT0gVFJVRSkgfHwKKwkJCQkocEFkLT5CdWxrT3V0UGVuZGluZ1syXSA9PSBUUlVFKSB8fAorCQkJCShwQWQtPkJ1bGtPdXRQZW5kaW5nWzNdID09IFRSVUUpKSAmJiAocEFkLT5CdWxrRmxhZ3MgIT0gMCkpCS8vcEFkLT5CdWxrRmxhZ3MgIT0gMCB3YWl0IGJ1bGsgb3V0IGZpbmlzaAorCQl7CisJCQlkbworCQkJeworCQkJCVJUVVNCQ2FuY2VsUGVuZGluZ0J1bGtPdXRJUlAocEFkKTsKKwkJCX0gd2hpbGUgKEZBTFNFKTsKKworCQkJUlRNUHVzZWNEZWxheSg1MDAwMDApOworCQl9CisKKwkJQVNTRVJUKHBBZC0+UGVuZGluZ1J4ID09IDApOworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCQkvLyBTb2Z0IHJlc2V0IEJCUC4KKwkJQmJwU29mdFJlc2V0KHBBZCk7CisJCXBBZC0+Q29udGluQnVsa0luID0gRkFMU0U7CisJfQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJSWEZSQU1FIikpIC8vIFJ4IEZyYW1lcworCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFOiBSWEZSQU1FXG4iKSk7CisKKwkJLy8gRGlzYWJsZSBSeCBvZiBNQUMgYmxvY2sKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCVZhbHVlICY9IH4oMSA8PCAzKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKwkJLy8gRGVmYXVsdCB2YWx1ZSBpbiBCQlAgUjIyIGlzIDB4MC4KKwkJQmJwRGF0YSA9IDA7CisKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZNYWNEYXRhKTsKKwkJLy8gQ2xlYW4gYml0NCB0byBzdG9wIGNvbnRpbnVvdXMgVHggcHJvZHVjdGlvbiB0ZXN0LgorCQlNYWNEYXRhICY9IDB4RkZGRkZGRUY7CisKKwkgICAJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IyMiwgQmJwRGF0YSk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgTWFjRGF0YSk7CisKKwkJcEFkLT5hdGUuTW9kZSB8PSBBVEVfUlhGUkFNRTsKKworCQkvLyBBYm9ydCBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMCk7CisKKwkJLy8gRGlzYWJsZSBUWCBvZiBNQUMgYmxvY2sKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCVZhbHVlICY9IH4oMSA8PCAyKTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisKKyAgICAgICAgLy8gUmVzZXQgUnggUklORy4KKwkJZm9yICggaSA9IDA7IGkgPCAoUlhfUklOR19TSVpFKTsgaSsrKQorCQl7CisJCQlQUlhfQ09OVEVYVCAgcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCisJCQlwUnhDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCQkJcFJ4Q29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCQkJcFJ4Q29udGV4dC0+UmVhZGFibGUgPSBGQUxTRTsKKworCQkJLy8KKwkJCS8vIEdldCB0aGUgdXJiIGZyb20ga2VybmVsIGJhY2sgdG8gZHJpdmVyLgorCQkJLy8KKwkJCVJUVVNCX1VOTElOS19VUkIocFJ4Q29udGV4dC0+cFVyYik7CisKKwkJCS8qIFNsZWVwIDIwMCBtaWNyb3NlY3MgdG8gZ2l2ZSBjYW5jZWxsYXRpb24gdGltZSB0byB3b3JrLiAqLworCQkJTmRpc01TbGVlcCgyMDApOworCQkJcEFkLT5CdWxrSW5SZXEgPSAwOworCisvLwkJCUludGVybG9ja2VkRXhjaGFuZ2UoJnBBZC0+UGVuZGluZ1J4LCAwKTsKKwkJCXBBZC0+UGVuZGluZ1J4ID0gMDsKKwkJCXBBZC0+TmV4dFJ4QnVsa0luUmVhZEluZGV4ID0gMDsJLy8gTmV4dCBSeCBSZWFkIGluZGV4CisJCQlwQWQtPk5leHRSeEJ1bGtJbkluZGV4CQk9IFJYX1JJTkdfU0laRSAtIDE7CS8vIFJ4IEJ1bGsgcG9pbnRlcgorCQkJcEFkLT5OZXh0UnhCdWxrSW5Qb3NpdGlvbiA9IDA7CisJCX0KKworCQkvLyByZWFkIHRvIGNsZWFyIGNvdW50ZXJzCisJCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKHBBZCwgUlhfU1RBX0NOVDAsICZ0ZW1wKTsgLy9SWCBQSFkgJiBSWCBDUkMgY291bnQKKwkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBSWF9TVEFfQ05UMSwgJnRlbXApOyAvL1JYIFBMQ1AgZXJyb3IgY291bnQgJiBDQ0EgZmFsc2UgYWxhcm0gY291bnQKKwkJUlRVU0JSZWFkTUFDUmVnaXN0ZXIocEFkLCBSWF9TVEFfQ05UMiwgJnRlbXApOyAvL1JYIEZJRk8gb3ZlcmZsb3cgZnJhbWUgY291bnQgJiBSWCBkdXBsaWNhdGVkIGZpbHRlcmVkIGZyYW1lIGNvdW50CisKKwkJcEFkLT5Db250aW5CdWxrSW4gPSBUUlVFOworCisJCS8vIEVuYWJsZSBUeCwgUlggRE1BLgorCQlSdG1wRG1hRW5hYmxlKHBBZCwgMSk7CisKKwkJLy8gRW5hYmxlIFJYIG9mIE1BQyBibG9jaworCQlSVE1QX0lPX1JFQUQzMihwQWQsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJVmFsdWUgfD0gKDEgPDwgMyk7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19TWVNfQ1RSTCwgVmFsdWUpOworCisJCS8vIEtpY2sgYnVsayBpbgorCQlSVFVTQkJ1bGtSZWNlaXZlKHBBZCk7CisJfQorCWVsc2UKKwl7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFURTogSW52YWxpZCBhcmchXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJUlRNUHVzZWNEZWxheSg1MDAwKTsKKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PT0gQVRFQ21kSGFuZGxlcigpXG4iKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworSU5UCVNldF9BVEVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJaWYgKEFURUNtZEhhbmRsZXIocEFkLCBhcmcpKQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1Byb2MgU3VjY2Vzc1xuIikpOworCisKKwkJcmV0dXJuIFRSVUU7CisJfQorCWVsc2UKKwl7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9Qcm9jIEZhaWxlZFxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgQUREUjE9REEgZm9yIFR4RnJhbWUoQVAgIDogVG8gRFMgPSAwIDsgRnJvbSBEUyA9IDEpCisgICAgICAgIG9yCisgICAgICAgIFNldCBBVEUgQUREUjM9REEgZm9yIFR4RnJhbWUoU1RBIDogVG8gRFMgPSAxIDsgRnJvbSBEUyA9IDApCisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX0RBX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUNIQVIJCQkJKnZhbHVlOworCUlOVAkJCQkJaTsKKworCWlmKHN0cmxlbihhcmcpICE9IDE3KSAgLy9NYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAwMTowMjowMzowNDowNTowNiBsZW5ndGggMTcKKwkJcmV0dXJuIEZBTFNFOworCisgICAgZm9yIChpPTAsIHZhbHVlID0gcnN0cnRvayhhcmcsICI6Iik7IHZhbHVlOyB2YWx1ZSA9IHJzdHJ0b2soTlVMTCwgIjoiKSkKKwl7CisJCWlmKChzdHJsZW4odmFsdWUpICE9IDIpIHx8ICghaXN4ZGlnaXQoKnZhbHVlKSkgfHwgKCFpc3hkaWdpdCgqKHZhbHVlKzEpKSkgKQorCQkJcmV0dXJuIEZBTFNFOyAgLy9JbnZhbGlkCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlBdG9IKHZhbHVlLCAmcEFkLT5hdGUuQWRkcjNbaSsrXSwgMSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCisJaWYoaSAhPSA2KQorCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9EQV9Qcm9jIChEQSA9ICUyWDolMlg6JTJYOiUyWDolMlg6JTJYKVxuIiwgcEFkLT5hdGUuQWRkcjNbMF0sCisJCXBBZC0+YXRlLkFkZHIzWzFdLCBwQWQtPmF0ZS5BZGRyM1syXSwgcEFkLT5hdGUuQWRkcjNbM10sIHBBZC0+YXRlLkFkZHIzWzRdLCBwQWQtPmF0ZS5BZGRyM1s1XSkpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX0RBX1Byb2MgU3VjY2Vzc1xuIikpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBBRERSMz1TQSBmb3IgVHhGcmFtZShBUCAgOiBUbyBEUyA9IDAgOyBGcm9tIERTID0gMSkKKyAgICAgICAgb3IKKyAgICAgICAgU2V0IEFURSBBRERSMj1TQSBmb3IgVHhGcmFtZShTVEEgOiBUbyBEUyA9IDEgOyBGcm9tIERTID0gMCkKKworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9BVEVfU0FfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJQ0hBUgkJCQkqdmFsdWU7CisJSU5UCQkJCQlpOworCisJaWYoc3RybGVuKGFyZykgIT0gMTcpICAvL01hYyBhZGRyZXNzIGFjY2VwdGFibGUgZm9ybWF0IDAxOjAyOjAzOjA0OjA1OjA2IGxlbmd0aCAxNworCQlyZXR1cm4gRkFMU0U7CisKKyAgICBmb3IgKGk9MCwgdmFsdWUgPSByc3RydG9rKGFyZywgIjoiKTsgdmFsdWU7IHZhbHVlID0gcnN0cnRvayhOVUxMLCAiOiIpKQorCXsKKwkJaWYoKHN0cmxlbih2YWx1ZSkgIT0gMikgfHwgKCFpc3hkaWdpdCgqdmFsdWUpKSB8fCAoIWlzeGRpZ2l0KCoodmFsdWUrMSkpKSApCisJCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCUF0b0godmFsdWUsICZwQWQtPmF0ZS5BZGRyMltpKytdLCAxKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9CisKKwlpZihpICE9IDYpCisJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZAorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1NBX1Byb2MgKFNBID0gJTJYOiUyWDolMlg6JTJYOiUyWDolMlgpXG4iLCBwQWQtPmF0ZS5BZGRyMlswXSwKKwkJcEFkLT5hdGUuQWRkcjJbMV0sIHBBZC0+YXRlLkFkZHIyWzJdLCBwQWQtPmF0ZS5BZGRyMlszXSwgcEFkLT5hdGUuQWRkcjJbNF0sIHBBZC0+YXRlLkFkZHIyWzVdKSk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfU0FfUHJvYyBTdWNjZXNzXG4iKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIEFERFIyPUJTU0lEIGZvciBUeEZyYW1lKEFQICA6IFRvIERTID0gMCA7IEZyb20gRFMgPSAxKQorICAgICAgICBvcgorICAgICAgICBTZXQgQVRFIEFERFIxPUJTU0lEIGZvciBUeEZyYW1lKFNUQSA6IFRvIERTID0gMSA7IEZyb20gRFMgPSAwKQorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9CU1NJRF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlDSEFSCQkJCSp2YWx1ZTsKKwlJTlQJCQkJCWk7CisKKwlpZihzdHJsZW4oYXJnKSAhPSAxNykgIC8vTWFjIGFkZHJlc3MgYWNjZXB0YWJsZSBmb3JtYXQgMDE6MDI6MDM6MDQ6MDU6MDYgbGVuZ3RoIDE3CisJCXJldHVybiBGQUxTRTsKKworICAgIGZvciAoaT0wLCB2YWx1ZSA9IHJzdHJ0b2soYXJnLCAiOiIpOyB2YWx1ZTsgdmFsdWUgPSByc3RydG9rKE5VTEwsICI6IikpCisJeworCQlpZigoc3RybGVuKHZhbHVlKSAhPSAyKSB8fCAoIWlzeGRpZ2l0KCp2YWx1ZSkpIHx8ICghaXN4ZGlnaXQoKih2YWx1ZSsxKSkpICkKKwkJCXJldHVybiBGQUxTRTsgIC8vSW52YWxpZAorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJQXRvSCh2YWx1ZSwgJnBBZC0+YXRlLkFkZHIxW2krK10sIDEpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCWlmKGkgIT0gNikKKwkJcmV0dXJuIEZBTFNFOyAgLy9JbnZhbGlkCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BVEVfQlNTSURfUHJvYyAoQlNTSUQgPSAlMlg6JTJYOiUyWDolMlg6JTJYOiUyWClcbiIsCXBBZC0+YXRlLkFkZHIxWzBdLAorCQlwQWQtPmF0ZS5BZGRyMVsxXSwgcEFkLT5hdGUuQWRkcjFbMl0sIHBBZC0+YXRlLkFkZHIxWzNdLCBwQWQtPmF0ZS5BZGRyMVs0XSwgcEFkLT5hdGUuQWRkcjFbNV0pKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9CU1NJRF9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgVHggQ2hhbm5lbAorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9DSEFOTkVMX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVDSEFSIGNoYW5uZWw7CisKKwljaGFubmVsID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmICgoY2hhbm5lbCA8IDEpIHx8IChjaGFubmVsID4gMjE2KSkvLyB0byBhbGxvdyBBIGJhbmQgY2hhbm5lbCA6ICgoY2hhbm5lbCA8IDEpIHx8IChjaGFubmVsID4gMTQpKQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0FURV9DSEFOTkVMX1Byb2M6Ok91dCBvZiByYW5nZSwgaXQgc2hvdWxkIGJlIGluIHJhbmdlIG9mIDF+MTQuXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJcEFkLT5hdGUuQ2hhbm5lbCA9IGNoYW5uZWw7CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX0NIQU5ORUxfUHJvYyAoQVRFIENoYW5uZWwgPSAlZClcbiIsIHBBZC0+YXRlLkNoYW5uZWwpKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfQ0hBTk5FTF9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBUeCBQb3dlcjAKKworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9BVEVfVFhfUE9XRVIwX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUNIQVIgVHhQb3dlcjsKKworCVR4UG93ZXIgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKHBBZC0+YXRlLkNoYW5uZWwgPD0gMTQpCisJeworCQlpZiAoKFR4UG93ZXIgPiAzMSkgfHwgKFR4UG93ZXIgPCAwKSkKKwkJeworCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0FURV9UWF9QT1dFUjBfUHJvYzo6T3V0IG9mIHJhbmdlIChWYWx1ZT0lZClcbiIsIFR4UG93ZXIpKTsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCX0KKwllbHNlLy8gNS41R0h6CisJeworCQlpZiAoKFR4UG93ZXIgPiAxNSkgfHwgKFR4UG93ZXIgPCAtNykpCisJCXsKKwkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9BVEVfVFhfUE9XRVIwX1Byb2M6Ok91dCBvZiByYW5nZSAoVmFsdWU9JWQpXG4iLCBUeFBvd2VyKSk7CisJCQlyZXR1cm4gRkFMU0U7CisJCX0KKwl9CisKKwlwQWQtPmF0ZS5UeFBvd2VyMCA9IFR4UG93ZXI7CisJQVRFVHhQd3JIYW5kbGVyKHBBZCwgMCk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1RYX1BPV0VSMF9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBUeCBQb3dlcjEKKworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9BVEVfVFhfUE9XRVIxX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUNIQVIgVHhQb3dlcjsKKworCVR4UG93ZXIgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKHBBZC0+YXRlLkNoYW5uZWwgPD0gMTQpCisJeworCWlmICgoVHhQb3dlciA+IDMxKSB8fCAoVHhQb3dlciA8IDApKQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0FURV9UWF9QT1dFUjFfUHJvYzo6T3V0IG9mIHJhbmdlIChWYWx1ZT0lZClcbiIsIFR4UG93ZXIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwl9CisJZWxzZQorCXsKKwkJaWYgKChUeFBvd2VyID4gMTUpIHx8IChUeFBvd2VyIDwgLTcpKQorCQl7CisJCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1RYX1BPV0VSMV9Qcm9jOjpPdXQgb2YgcmFuZ2UgKFZhbHVlPSVkKVxuIiwgVHhQb3dlcikpOworCQkJcmV0dXJuIEZBTFNFOworCQl9CisJfQorCisJcEFkLT5hdGUuVHhQb3dlcjEgPSBUeFBvd2VyOworCUFURVR4UHdySGFuZGxlcihwQWQsIDEpOworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9UWF9QT1dFUjFfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgVHggQW50ZW5uYQorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9UWF9BbnRlbm5hX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUNIQVIgdmFsdWU7CisKKwl2YWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZiAoKHZhbHVlID4gMikgfHwgKHZhbHVlIDwgMCkpCisJeworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1RYX0FudGVubmFfUHJvYzo6T3V0IG9mIHJhbmdlIChWYWx1ZT0lZClcbiIsIHZhbHVlKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlwQWQtPmF0ZS5UeEFudGVubmFTZWwgPSB2YWx1ZTsKKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BVEVfVFhfQW50ZW5uYV9Qcm9jIChBbnRlbm5hID0gJWQpXG4iLCBwQWQtPmF0ZS5UeEFudGVubmFTZWwpKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJhbGluazogU2V0X0FURV9UWF9BbnRlbm5hX1Byb2MgU3VjY2Vzc1xuIikpOworCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIFJ4IEFudGVubmEKKworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9BVEVfUlhfQW50ZW5uYV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlDSEFSIHZhbHVlOworCisJdmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKCh2YWx1ZSA+IDMpIHx8ICh2YWx1ZSA8IDApKQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0FURV9SWF9BbnRlbm5hX1Byb2M6Ok91dCBvZiByYW5nZSAoVmFsdWU9JWQpXG4iLCB2YWx1ZSkpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJcEFkLT5hdGUuUnhBbnRlbm5hU2VsID0gdmFsdWU7CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1JYX0FudGVubmFfUHJvYyAoQW50ZW5uYSA9ICVkKVxuIiwgcEFkLT5hdGUuUnhBbnRlbm5hU2VsKSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1JYX0FudGVubmFfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgUkYgZnJlcXVlbmNlIG9mZnNldAorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9UWF9GUkVRT0ZGU0VUX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVVDSEFSIFJGRnJlcU9mZnNldDsKKwlVTE9ORyBSNDsKKworCVJGRnJlcU9mZnNldCA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisjaWZuZGVmIFJUMzB4eAorCWlmKFJGRnJlcU9mZnNldCA+PSA2NCkKKyNlbmRpZiAvLyBSVDMweHggLy8KKyNpZmRlZiBSVDMweHgKKy8vMjAwOC8wOC8wNjogS0ggbW9kaWZpZWQgdGhlIGxpbWl0IG9mIG9mZnNldCB2YWx1ZSBmcm9tIDY1IHRvIDk1KDB4NUYpCisJaWYoUkZGcmVxT2Zmc2V0ID49IDk1KQorI2VuZGlmIC8vIFJUMzB4eCAvLworCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0FURV9UWF9GUkVRT0ZGU0VUX1Byb2M6Ok91dCBvZiByYW5nZSwgaXQgc2hvdWxkIGJlIGluIHJhbmdlIG9mIDB+NjMuXG4iKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlwQWQtPmF0ZS5SRkZyZXFPZmZzZXQgPSBSRkZyZXFPZmZzZXQ7CisjaWZkZWYgUlQzMHh4CisJaWYoSVNfUlQzMHh4KHBBZCkpCisJeworCQkvLyBTZXQgUkYgb2Zmc2V0CisJCVVDSEFSIFJGVmFsdWU7CisJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjIzLCAoUFVDSEFSKSZSRlZhbHVlKTsKKwkJCQkvLzIwMDgvMDgvMDY6IEtIIG1vZGlmaWVkICJwQWQtPlJGRnJlcU9mZnNldCIgdG8gInBBZC0+YXRlLlJGRnJlcU9mZnNldCIKKwkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweDgwKSB8IHBBZC0+YXRlLlJGRnJlcU9mZnNldDsKKwkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjIzLCAoVUNIQVIpUkZWYWx1ZSk7CisJfQorCWVsc2UKKyNlbmRpZiAvLyBSVDMweHggLy8KKwl7CisKKwkJUjQgPSBwQWQtPmF0ZS5SRkZyZXFPZmZzZXQgPDwgMTU7CQkvLyBzaGlmdCBUWCBwb3dlciBjb250cm9sIHRvIGNvcnJlY3QgUkYgcmVnaXN0ZXIgYml0IHBvc2l0aW9uCisJCVI0IHw9IChwQWQtPkxhdGNoUmZSZWdzLlI0ICYgKCh+MHgwMDFmODAwMCkpKTsKKwkJcEFkLT5MYXRjaFJmUmVncy5SNCA9IFI0OworCisJCVJ0bXBSZklvV3JpdGUocEFkKTsKKwl9CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9UWF9GUkVRT0ZGU0VUX1Byb2MgKFJGRnJlcU9mZnNldCA9ICVkKVxuIiwgcEFkLT5hdGUuUkZGcmVxT2Zmc2V0KSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1RYX0ZSRVFPRkZTRVRfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgUkYgQlcKKworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9BVEVfVFhfQldfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJaW50IGk7CisJVUNIQVIgdmFsdWUgPSAwOworCVVDSEFSIEJCUEN1cnJlbnRCVzsKKworCUJCUEN1cnJlbnRCVyA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZihCQlBDdXJyZW50QlcgPT0gMCkKKwkJcEFkLT5hdGUuVHhXSS5CVyA9IEJXXzIwOworCWVsc2UKKwkJcEFkLT5hdGUuVHhXSS5CVyA9IEJXXzQwOworCisJaWYocEFkLT5hdGUuVHhXSS5CVyA9PSBCV18yMCkKKwl7CisJCWlmKHBBZC0+YXRlLkNoYW5uZWwgPD0gMTQpCisJCXsKKyAJCWZvciAoaT0wOyBpPDU7IGkrKykKKyAJCXsKKwkJCQlpZiAocEFkLT5UeDIwTVB3ckNmZ0dCYW5kW2ldICE9IDB4ZmZmZmZmZmYpCisJCQkJeworCQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9QV1JfQ0ZHXzAgKyBpKjQsIHBBZC0+VHgyME1Qd3JDZmdHQmFuZFtpXSk7CisJCQkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJZm9yIChpPTA7IGk8NTsgaSsrKQorCQkJeworCQkJCWlmIChwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbaV0gIT0gMHhmZmZmZmZmZikKKyAJCQl7CisJCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BXUl9DRkdfMCArIGkqNCwgcEFkLT5UeDIwTVB3ckNmZ0FCYW5kW2ldKTsKKyAJCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKyAJCQl9CisgCQl9CisJCX0KKworCQkvL1NldCBCQlAgUjQgYml0WzQ6M109MDowCisgCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJnZhbHVlKTsKKyAJCXZhbHVlICY9ICh+MHgxOCk7CisgCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIHZhbHVlKTsKKworICAJCS8vU2V0IEJCUCBSNjY9MHgzQworIAkJdmFsdWUgPSAweDNDOworIAkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgdmFsdWUpOworCQkvL1NldCBCQlAgUjY4PTB4MEIKKwkJLy90byBpbXByb3ZlIFJ4IHNlbnNpdGl2aXR5LgorCQl2YWx1ZSA9IDB4MEI7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjgsIHZhbHVlKTsKKwkJLy9TZXQgQkJQIFI2OT0weDE2CisJCXZhbHVlID0gMHgxNjsKKyAJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIHZhbHVlKTsKKwkJLy9TZXQgQkJQIFI3MD0weDA4CisJCXZhbHVlID0gMHgwODsKKyAJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsIHZhbHVlKTsKKwkJLy9TZXQgQkJQIFI3Mz0weDExCisJCXZhbHVlID0gMHgxMTsKKyAJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzMsIHZhbHVlKTsKKworCSAgICAvLyBJZiBDaGFubmVsPTE0LCBCYW5kd2lkdGg9MjBNIGFuZCBNb2RlPUNDSywgU2V0IEJCUCBSNCBiaXQ1PTEKKwkgICAgLy8gKEphcGFuIGZpbHRlciBjb2VmZmljaWVudHMpCisJICAgIC8vIFRoaXMgc2VnbWVudCBvZiBjb2RlIHdpbGwgb25seSB3b3JrcyB3aGVuIEFURVRYTU9ERSBhbmQgQVRFQ0hBTk5FTAorCSAgICAvLyB3ZXJlIHNldCB0byBNT0RFX0NDSyBhbmQgMTQgcmVzcGVjdGl2ZWx5IGJlZm9yZSBBVEVUWEJXIGlzIHNldCB0byAwLgorCSAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQlpZiAocEFkLT5hdGUuQ2hhbm5lbCA9PSAxNCkKKwkJeworCQkJaW50IFR4TW9kZSA9IHBBZC0+YXRlLlR4V0kuUEhZTU9ERTsKKwkJCWlmIChUeE1vZGUgPT0gTU9ERV9DQ0spCisJCQl7CisJCQkJLy8gd2hlbiBDaGFubmVsPT0xNCAmJiBNb2RlPT1DQ0sgJiYgQmFuZFdpZHRoPT0yME0sIEJCUCBSNCBiaXQ1PTEKKyAJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZ2YWx1ZSk7CisJCQkJdmFsdWUgfD0gMHgyMDsgLy9zZXQgYml0NT0xCisgCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgdmFsdWUpOworCQkJfQorCQl9CisKKwkgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJLy8gSWYgYmFuZHdpZHRoICE9IDQwTSwgUkYgUmVnNCBiaXQgMjEgPSAwLgorI2lmZGVmIFJUMzB4eAorCS8vIFNldCBCVworCQlpZihJU19SVDMweHgocEFkKSkKKwkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNCwgKFVDSEFSKSBwQWQtPk1sbWUuQ2FsaUJXMjBSZlIyNCk7CisJCWVsc2UKKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJeworCQlwQWQtPkxhdGNoUmZSZWdzLlI0ICY9IH4weDAwMjAwMDAwOworCQlSdG1wUmZJb1dyaXRlKHBBZCk7CisJfQorCisJfQorCWVsc2UgaWYocEFkLT5hdGUuVHhXSS5CVyA9PSBCV180MCkKKwl7CisJCWlmKHBBZC0+YXRlLkNoYW5uZWwgPD0gMTQpCisJCXsKKwkJCWZvciAoaT0wOyBpPDU7IGkrKykKKwkJCXsKKwkJCQlpZiAocEFkLT5UeDQwTVB3ckNmZ0dCYW5kW2ldICE9IDB4ZmZmZmZmZmYpCisJCQkJeworCQkJCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9QV1JfQ0ZHXzAgKyBpKjQsIHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFtpXSk7CisJCQkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJZm9yIChpPTA7IGk8NTsgaSsrKQorCQkJeworCQkJCWlmIChwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbaV0gIT0gMHhmZmZmZmZmZikKKwkJCQl7CisJCQkJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BXUl9DRkdfMCArIGkqNCwgcEFkLT5UeDQwTVB3ckNmZ0FCYW5kW2ldKTsKKwkJCQkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwkJCQl9CisJCQl9CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlpZiAoKHBBZC0+YXRlLlR4V0kuUEhZTU9ERSA+PSBNT0RFX0hUTUlYKSAmJiAocEFkLT5hdGUuVHhXSS5NQ1MgPT0gNykpCisJCQl7CisgICAgCQkJdmFsdWUgPSAweDI4OworICAgIAkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjcsIHZhbHVlKTsKKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJfQorCisJCS8vU2V0IEJCUCBSNCBiaXRbNDozXT0xOjAKKwkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZ2YWx1ZSk7CisJCXZhbHVlICY9ICh+MHgxOCk7CisJCXZhbHVlIHw9IDB4MTA7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgdmFsdWUpOworCisJCS8vU2V0IEJCUCBSNjY9MHgzQworCQl2YWx1ZSA9IDB4M0M7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIHZhbHVlKTsKKwkJLy9TZXQgQkJQIFI2OD0weDBDCisJCS8vdG8gaW1wcm92ZSBSeCBzZW5zaXRpdml0eS4KKwkJdmFsdWUgPSAweDBDOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY4LCB2YWx1ZSk7CisJCS8vU2V0IEJCUCBSNjk9MHgxQQorCQl2YWx1ZSA9IDB4MUE7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIHZhbHVlKTsKKwkJLy9TZXQgQkJQIFI3MD0weDBBCisJCXZhbHVlID0gMHgwQTsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MCwgdmFsdWUpOworCQkvL1NldCBCQlAgUjczPTB4MTYKKwkJdmFsdWUgPSAweDE2OworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjczLCB2YWx1ZSk7CisKKwkJLy8gSWYgYmFuZHdpZHRoID0gNDBNLCBzZXQgUkYgUmVnNCBiaXQgMjEgPSAxLgorI2lmZGVmIFJUMzB4eAorCS8vIFNldCBCVworCQlpZihJU19SVDMweHgocEFkKSkKKwkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyNCwgKFVDSEFSKSBwQWQtPk1sbWUuQ2FsaUJXNDBSZlIyNCk7CisJCWVsc2UKKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJeworCQkJcEFkLT5MYXRjaFJmUmVncy5SNCB8PSAweDAwMjAwMDAwOworCQkJUnRtcFJmSW9Xcml0ZShwQWQpOworCQl9CisJfQorCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9UWF9CV19Qcm9jIChCQlBDdXJyZW50QlcgPSAlZClcbiIsIHBBZC0+YXRlLlR4V0kuQlcpKTsKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSYWxpbms6IFNldF9BVEVfVFhfQldfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgVHggZnJhbWUgbGVuZ3RoCisKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX1RYX0xFTkdUSF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlwQWQtPmF0ZS5UeExlbmd0aCA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisKKwlpZigocEFkLT5hdGUuVHhMZW5ndGggPCAyNCkgfHwgKHBBZC0+YXRlLlR4TGVuZ3RoID4gKE1BWF9GUkFNRV9TSVpFIC0gMzQvKiA9PSAyMzEyICovKSkpCisJeworCQlwQWQtPmF0ZS5UeExlbmd0aCA9IChNQVhfRlJBTUVfU0laRSAtIDM0LyogPT0gMjMxMiAqLyk7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlNldF9BVEVfVFhfTEVOR1RIX1Byb2M6Ok91dCBvZiByYW5nZSwgaXQgc2hvdWxkIGJlIGluIHJhbmdlIG9mIDI0fiVkLlxuIiwgKE1BWF9GUkFNRV9TSVpFIC0gMzQvKiA9PSAyMzEyICovKSkpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9UWF9MRU5HVEhfUHJvYyAoVHhMZW5ndGggPSAlZClcbiIsIHBBZC0+YXRlLlR4TGVuZ3RoKSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1RYX0xFTkdUSF9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBUeCBmcmFtZSBjb3VudAorCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9UWF9DT1VOVF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlwQWQtPmF0ZS5UeENvdW50ID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BVEVfVFhfQ09VTlRfUHJvYyAoVHhDb3VudCA9ICVkKVxuIiwgcEFkLT5hdGUuVHhDb3VudCkpOworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9UWF9DT1VOVF9Qcm9jIFN1Y2Nlc3NcbiIpKTsKKworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IEFURSBUeCBmcmFtZSBNQ1MKKworICAgICAgICBSZXR1cm46CisgICAgICAgIAlUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJU2V0X0FURV9UWF9NQ1NfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJVUNIQVIgTUNTOworCWludCByZXN1bHQ7CisKKwlNQ1MgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCXJlc3VsdCA9IENoZWNrTUNTVmFsaWQocEFkLT5hdGUuVHhXSS5QSFlNT0RFLCBNQ1MpOworCisJaWYgKHJlc3VsdCAhPSAtMSkKKwl7CisJCXBBZC0+YXRlLlR4V0kuTUNTID0gKFVDSEFSKU1DUzsKKwl9CisJZWxzZQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2V0X0FURV9UWF9NQ1NfUHJvYzo6T3V0IG9mIHJhbmdlLCByZWZlciB0byByYXRlIHRhYmxlLlxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9UWF9NQ1NfUHJvYyAoTUNTID0gJWQpXG4iLCBwQWQtPmF0ZS5UeFdJLk1DUykpOworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9UWF9NQ1NfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCXJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBVEUgVHggZnJhbWUgTW9kZQorICAgICAgICAwOiBNT0RFX0NDSworICAgICAgICAxOiBNT0RFX09GRE0KKyAgICAgICAgMjogTU9ERV9IVE1JWAorICAgICAgICAzOiBNT0RFX0hUR1JFRU5GSUVMRAorCisgICAgICAgIFJldHVybjoKKyAgICAgICAgCVRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfQVRFX1RYX01PREVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJcEFkLT5hdGUuVHhXSS5QSFlNT0RFID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmKHBBZC0+YXRlLlR4V0kuUEhZTU9ERSA+IDMpCisJeworCQlwQWQtPmF0ZS5UeFdJLlBIWU1PREUgPSAwOworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1RYX01PREVfUHJvYzo6T3V0IG9mIHJhbmdlLiBpdCBzaG91bGQgYmUgaW4gcmFuZ2Ugb2YgMH4zXG4iKSk7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIjA6IENDSywgMTogT0ZETSwgMjogSFRfTUlYLCAzOiBIVF9HUkVFTl9GSUVMRC5cbiIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BVEVfVFhfTU9ERV9Qcm9jIChUeE1vZGUgPSAlZClcbiIsIHBBZC0+YXRlLlR4V0kuUEhZTU9ERSkpOworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9UWF9NT0RFX1Byb2MgU3VjY2Vzc1xuIikpOworCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgQVRFIFR4IGZyYW1lIEdJCisKKyAgICAgICAgUmV0dXJuOgorICAgICAgICAJVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UCVNldF9BVEVfVFhfR0lfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisJcEFkLT5hdGUuVHhXSS5TaG9ydEdJID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCWlmKHBBZC0+YXRlLlR4V0kuU2hvcnRHSSA+IDEpCisJeworCQlwQWQtPmF0ZS5UeFdJLlNob3J0R0kgPSAwOworCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJTZXRfQVRFX1RYX0dJX1Byb2M6Ok91dCBvZiByYW5nZVxuIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0FURV9UWF9HSV9Qcm9jIChHSSA9ICVkKVxuIiwgcEFkLT5hdGUuVHhXSS5TaG9ydEdJKSk7CisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmFsaW5rOiBTZXRfQVRFX1RYX0dJX1Byb2MgU3VjY2Vzc1xuIikpOworCisKKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0lOVAlTZXRfQVRFX1JYX0ZFUl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlwQWQtPmF0ZS5iUnhGZXIgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKHBBZC0+YXRlLmJSeEZlciA9PSAxKQorCXsKKwkJcEFkLT5hdGUuUnhDbnRQZXJTZWMgPSAwOworCQlwQWQtPmF0ZS5SeFRvdGFsQ250ID0gMDsKKwl9CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfQVRFX1JYX0ZFUl9Qcm9jIChiUnhGZXIgPSAlZClcbiIsIHBBZC0+YXRlLmJSeEZlcikpOworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJhbGluazogU2V0X0FURV9SWF9GRVJfUHJvYyBTdWNjZXNzXG4iKSk7CisKKworCXJldHVybiBUUlVFOworfQorCitJTlQgU2V0X0FURV9SZWFkX1JGX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworI2lmZGVmIFJUMzB4eAorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IFJUMzB4eCBBVEU8LS0KKwlpZihJU19SVDMweHgocEFkKSkKKwl7CisJCQkvKiBtb2RpZnkgYnkgV1kgZm9yIFJlYWQgUkYgUmVnLiBlcnJvciAqLworCQlVQ0hBUiBSRlZhbHVlOworCQlJTlQgaW5kZXg9MDsKKwkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgMzI7IGluZGV4KyspCisJCXsKKwkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgaW5kZXgsIChQVUNIQVIpJlJGVmFsdWUpOworCQkJcHJpbnRrKCJSJWQ9JWRcbiIsaW5kZXgsUkZWYWx1ZSk7CisJCX0KKwl9CisJZWxzZQorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IFJUMzB4eCBBVEUtLT4KKyNlbmRpZiAvLyBSVDMweHggLy8KKwl7CisJCWF0ZV9wcmludChLRVJOX0VNRVJHICJSMSA9ICVseFxuIiwgcEFkLT5MYXRjaFJmUmVncy5SMSk7CisJCWF0ZV9wcmludChLRVJOX0VNRVJHICJSMiA9ICVseFxuIiwgcEFkLT5MYXRjaFJmUmVncy5SMik7CisJCWF0ZV9wcmludChLRVJOX0VNRVJHICJSMyA9ICVseFxuIiwgcEFkLT5MYXRjaFJmUmVncy5SMyk7CisJCWF0ZV9wcmludChLRVJOX0VNRVJHICJSNCA9ICVseFxuIiwgcEFkLT5MYXRjaFJmUmVncy5SNCk7CisJfQorCXJldHVybiBUUlVFOworfQorCitJTlQgU2V0X0FURV9Xcml0ZV9SRjFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisjaWZkZWYgUlQzMHh4CisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgMzA3MCBBVEU8LS0KKwlpZihJU19SVDMweHgocEFkKSkKKwl7CisJCXByaW50aygiV2FybmluZyEhIFJUMzB4eCBEb24ndCBTdXBwb3J0XG4iKTsKKwkJcmV0dXJuIEZBTFNFOworCisJfQorCWVsc2UKKy8vMjAwOC8wNy8xMDpLSCBhZGQgdG8gc3VwcG9ydCAzMDcwIEFURS0tPgorI2VuZGlmIC8vIFJUMzB4eCAvLworCXsKKwkJVUlOVDMyIHZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDE2KTsKKworCQlwQWQtPkxhdGNoUmZSZWdzLlIxID0gdmFsdWU7CisJCVJ0bXBSZklvV3JpdGUocEFkKTsKKwl9CisJcmV0dXJuIFRSVUU7CisKK30KKworSU5UIFNldF9BVEVfV3JpdGVfUkYyX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworI2lmZGVmIFJUMzB4eAorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFPC0tCisJaWYoSVNfUlQzMHh4KHBBZCkpCisJeworCQlwcmludGsoIldhcm5pbmchISBSVDMweHggRG9uJ3QgU3VwcG9ydFxuIik7CisJCXJldHVybiBGQUxTRTsKKworCX0KKwllbHNlCisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgMzA3MCBBVEUtLT4KKyNlbmRpZiAvLyBSVDMweHggLy8KKwl7CisJCVVJTlQzMiB2YWx1ZSA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxNik7CisKKwkJcEFkLT5MYXRjaFJmUmVncy5SMiA9IHZhbHVlOworCQlSdG1wUmZJb1dyaXRlKHBBZCk7CisJfQorCXJldHVybiBUUlVFOworfQorCitJTlQgU2V0X0FURV9Xcml0ZV9SRjNfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisjaWZkZWYgUlQzMHh4CisvLzIwMDgvMDcvMTA6S0ggYWRkIHRvIHN1cHBvcnQgMzA3MCBBVEU8LS0KKwlpZihJU19SVDMweHgocEFkKSkKKwl7CisJCXByaW50aygiV2FybmluZyEhIFJUMzB4eCBEb24ndCBTdXBwb3J0XG4iKTsKKwkJcmV0dXJuIEZBTFNFOworCisJfQorCWVsc2UKKy8vMjAwOC8wNy8xMDpLSCBhZGQgdG8gc3VwcG9ydCAzMDcwIEFURS0tPgorI2VuZGlmIC8vIFJUMzB4eCAvLworCXsKKwkJVUlOVDMyIHZhbHVlID0gc2ltcGxlX3N0cnRvbChhcmcsIDAsIDE2KTsKKworCQlwQWQtPkxhdGNoUmZSZWdzLlIzID0gdmFsdWU7CisJCVJ0bXBSZklvV3JpdGUocEFkKTsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVCBTZXRfQVRFX1dyaXRlX1JGNF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKyNpZmRlZiBSVDMweHgKKy8vMjAwOC8wNy8xMDpLSCBhZGQgdG8gc3VwcG9ydCAzMDcwIEFURTwtLQorCWlmKElTX1JUMzB4eChwQWQpKQorCXsKKwkJcHJpbnRrKCJXYXJuaW5nISEgUlQzMHh4IERvbid0IFN1cHBvcnRcbiIpOworCQlyZXR1cm4gRkFMU0U7CisKKwl9CisJZWxzZQorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFLS0+CisjZW5kaWYgLy8gUlQzMHh4IC8vCisJeworCQlVSU5UMzIgdmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTYpOworCisJCXBBZC0+TGF0Y2hSZlJlZ3MuUjQgPSB2YWx1ZTsKKwkJUnRtcFJmSW9Xcml0ZShwQWQpOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKyNpZmRlZiBSVDMweHgKKy8vMjAwOC8wNy8xMDpLSCBhZGQgdG8gc3VwcG9ydCAzMDcwIEFURTwtLQorSU5UCVNFVF9BVEVfMzA3MFJGX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUNIQVIgKnRoaXNfY2hhcjsKKwlDSEFSICp2YWx1ZTsKKwlVSU5UMzIgUmVnLFJGVmFsdWU7CisJaWYoSVNfUlQzMHh4KHBBZCkpCisJeworCQlwcmludGsoIlNFVF9BVEVfMzA3MFJGX1Byb2M9JXNcbiIsYXJnKTsKKwkJdGhpc19jaGFyID1hcmc7CisJCWlmICgodmFsdWUgPSBzdHJjaHIodGhpc19jaGFyLCAnOicpKSAhPSBOVUxMKQorCQkJKnZhbHVlKysgPSAwOworCQlSZWc9IHNpbXBsZV9zdHJ0b2wodGhpc19jaGFyLCAwLCAxNik7CisJCVJGVmFsdWU9IHNpbXBsZV9zdHJ0b2wodmFsdWUsIDAsIDE2KTsKKwkJcHJpbnRrKCJSRiBSZWdbJWRdPSVkXG4iLFJlZyxSRlZhbHVlKTsKKwkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUmVnLFJGVmFsdWUpOworCX0KKwllbHNlCisJCXByaW50aygiV2FybmluZyEhIE9ubHkgMzA3MCBTdXBwb3J0XG4iKTsKKwlyZXR1cm4gVFJVRTsKK30KKy8vMjAwOC8wNy8xMDpLSCBhZGQgdG8gc3VwcG9ydCAzMDcwIEFURS0tPgorI2VuZGlmIC8vIFJUMzB4eCAvLworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBMb2FkIGFuZCBXcml0ZSBFRVBST00gZnJvbSBhIGJpbmFyeSBmaWxlIHByZXBhcmVkIGluIGFkdmFuY2UuCisKKyAgICAgICAgUmV0dXJuOgorICAgICAgICAJVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworI2lmbmRlZiBVQ09TCitJTlQgU2V0X0FURV9Mb2FkX0UyUF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlCT09MRUFOCQkgICAgcmV0ID0gRkFMU0U7CisJUFVDSEFSCQkJc3JjID0gRUVQUk9NX0JJTl9GSUxFX05BTUU7CisJc3RydWN0IGZpbGUJCSpzcmNmOworCUlOVDMyIAkJCXJldHZhbCwgb3JnZnN1aWQsIG9yZ2ZzZ2lkOworICAgCW1tX3NlZ21lbnRfdAlvcmdmczsKKwlVU0hPUlQgCQkJV3JpdGVFRVBST01bKEVFUFJPTV9TSVpFLzIpXTsKKwlVSU5UMzIJCQlGaWxlTGVuZ3RoID0gMDsKKwlVSU5UMzIgCQkJdmFsdWUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiPT09PiAlcyAodmFsdWU9JWQpXG5cbiIsIF9fRlVOQ1RJT05fXywgdmFsdWUpKTsKKworCWlmICh2YWx1ZSA+IDApCisJeworCQkvKiB6ZXJvIHRoZSBlMnAgYnVmZmVyICovCisJCU5kaXNaZXJvTWVtb3J5KChQVUNIQVIpV3JpdGVFRVBST00sIEVFUFJPTV9TSVpFKTsKKworCQkvKiBzYXZlIHVpZCBhbmQgZ2lkIHVzZWQgZm9yIGZpbGVzeXN0ZW0gYWNjZXNzLgorCSAgICAqKiBzZXQgdXNlciBhbmQgZ3JvdXAgdG8gMCAocm9vdCkKKwkgICAgKi8KKwkJb3JnZnN1aWQgPSBjdXJyZW50LT5mc3VpZDsKKwkJb3JnZnNnaWQgPSBjdXJyZW50LT5mc2dpZDsKKwkJLyogYXMgcm9vdCAqLworCQljdXJyZW50LT5mc3VpZCA9IGN1cnJlbnQtPmZzZ2lkID0gMDsKKyAgICAJb3JnZnMgPSBnZXRfZnMoKTsKKyAgICAJc2V0X2ZzKEtFUk5FTF9EUyk7CisKKwkJZG8KKwkJeworCQkJLyogb3BlbiB0aGUgYmluIGZpbGUgKi8KKwkJCXNyY2YgPSBmaWxwX29wZW4oc3JjLCBPX1JET05MWSwgMCk7CisKKwkJCWlmIChJU19FUlIoc3JjZikpCisJCQl7CisJCQkJYXRlX3ByaW50KCIlcyAtIEVycm9yICVsZCBvcGVuaW5nICVzXG4iLCBfX0ZVTkNUSU9OX18sIC1QVFJfRVJSKHNyY2YpLCBzcmMpOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiB0aGUgb2JqZWN0IG11c3QgaGF2ZSBhIHJlYWQgbWV0aG9kICovCisJCQlpZiAoKHNyY2YtPmZfb3AgPT0gTlVMTCkgfHwgKHNyY2YtPmZfb3AtPnJlYWQgPT0gTlVMTCkpCisJCQl7CisJCQkJYXRlX3ByaW50KCIlcyAtICVzIGRvZXMgbm90IGhhdmUgYSByZWFkIG1ldGhvZFxuIiwgX19GVU5DVElPTl9fLCBzcmMpOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiByZWFkIHRoZSBmaXJtd2FyZSBmcm9tIHRoZSBmaWxlICouYmluICovCisJCQlGaWxlTGVuZ3RoID0gc3JjZi0+Zl9vcC0+cmVhZChzcmNmLAorCQkJCQkJCQkJCSAgKFBVQ0hBUilXcml0ZUVFUFJPTSwKKwkJCQkJCQkJCQkgIEVFUFJPTV9TSVpFLAorCQkJCQkJCQkJCSAgJnNyY2YtPmZfcG9zKTsKKworCQkJaWYgKEZpbGVMZW5ndGggIT0gRUVQUk9NX1NJWkUpCisJCQl7CisJCQkJYXRlX3ByaW50KCIlczogZXJyb3IgZmlsZSBsZW5ndGggKD0lZCkgaW4gZTJwLmJpblxuIiwKKwkJCQkJICAgX19GVU5DVElPTl9fLCBGaWxlTGVuZ3RoKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvKiB3cml0ZSB0aGUgY29udGVudCBvZiAuYmluIGZpbGUgdG8gRUVQUk9NICovCisJCQkJcnRfZWVfd3JpdGVfYWxsKHBBZCwgV3JpdGVFRVBST00pOworCQkJCXJldCA9IFRSVUU7CisJCQl9CisJCQlicmVhazsKKwkJfSB3aGlsZShUUlVFKTsKKworCQkvKiBjbG9zZSBmaXJtd2FyZSBmaWxlICovCisJCWlmIChJU19FUlIoc3JjZikpCisJCXsKKwkJCQk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlyZXR2YWwgPSBmaWxwX2Nsb3NlKHNyY2YsIE5VTEwpOworCQkJaWYgKHJldHZhbCkKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCItLT4gRXJyb3IgJWQgY2xvc2luZyAlc1xuIiwgLXJldHZhbCwgc3JjKSk7CisKKwkJCX0KKwkJfQorCisJCS8qIHJlc3RvcmUgKi8KKwkJc2V0X2ZzKG9yZ2ZzKTsKKwkJY3VycmVudC0+ZnN1aWQgPSBvcmdmc3VpZDsKKwkJY3VycmVudC0+ZnNnaWQgPSBvcmdmc2dpZDsKKwl9CisgICAgQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiPD09PSAlcyAocmV0PSVkKVxuIiwgX19GVU5DVElPTl9fLCByZXQpKTsKKworICAgIHJldHVybiByZXQ7CisKK30KKyNlbHNlCitJTlQgU2V0X0FURV9Mb2FkX0UyUF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVU0hPUlQgCQkJV3JpdGVFRVBST01bKEVFUFJPTV9TSVpFLzIpXTsKKwlzdHJ1Y3QgaXdyZXEJKndycSA9IChzdHJ1Y3QgaXdyZXEgKilhcmc7CisKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+ICVzICh3cnEtPnUuZGF0YS5sZW5ndGggPSAlZClcblxuIiwgX19GVU5DVElPTl9fLCB3cnEtPnUuZGF0YS5sZW5ndGgpKTsKKworCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gRUVQUk9NX1NJWkUpCisJeworCQlhdGVfcHJpbnQoIiVzOiBlcnJvciBsZW5ndGggKD0lZCkgZnJvbSBob3N0XG4iLAorCQkJICAgX19GVU5DVElPTl9fLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCWVsc2UvKiAod3JxLT51LmRhdGEubGVuZ3RoID09IEVFUFJPTV9TSVpFKSAqLworCXsKKwkJLyogemVybyB0aGUgZTJwIGJ1ZmZlciAqLworCQlOZGlzWmVyb01lbW9yeSgoUFVDSEFSKVdyaXRlRUVQUk9NLCBFRVBST01fU0laRSk7CisKKwkJLyogZmlsbCB0aGUgbG9jYWwgYnVmZmVyICovCisJCU5kaXNNb3ZlTWVtb3J5KChQVUNIQVIpV3JpdGVFRVBST00sIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisKKwkJZG8KKwkJeworCQkJCS8qIHdyaXRlIHRoZSBjb250ZW50IG9mIC5iaW4gZmlsZSB0byBFRVBST00gKi8KKwkJCQlydF9lZV93cml0ZV9hbGwocEFkLCBXcml0ZUVFUFJPTSk7CisKKwkJfSB3aGlsZShGQUxTRSk7CisJCX0KKworICAgIEFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PT0gJXNcbiIsIF9fRlVOQ1RJT05fXykpOworCisgICAgcmV0dXJuIFRSVUU7CisKK30KKyNlbmRpZiAvLyAhVUNPUyAvLworCitJTlQgU2V0X0FURV9SZWFkX0UyUF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVU0hPUlQgYnVmZmVyW0VFUFJPTV9TSVpFLzJdOworCVVTSE9SVCAqcDsKKwlpbnQgaTsKKworCXJ0X2VlX3JlYWRfYWxsKHBBZCwgKFVTSE9SVCAqKWJ1ZmZlcik7CisJcCA9IGJ1ZmZlcjsKKwlmb3IgKGkgPSAwOyBpIDwgKEVFUFJPTV9TSVpFLzIpOyBpKyspCisJeworCQlhdGVfcHJpbnQoIiU0LjR4ICIsICpwKTsKKwkJaWYgKCgoaSsxKSAlIDE2KSA9PSAwKQorCQkJYXRlX3ByaW50KCJcbiIpOworCQlwKys7CisJfQorCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0FURV9TaG93X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCWF0ZV9wcmludCgiTW9kZT0lZFxuIiwgcEFkLT5hdGUuTW9kZSk7CisJYXRlX3ByaW50KCJUeFBvd2VyMD0lZFxuIiwgcEFkLT5hdGUuVHhQb3dlcjApOworCWF0ZV9wcmludCgiVHhQb3dlcjE9JWRcbiIsIHBBZC0+YXRlLlR4UG93ZXIxKTsKKwlhdGVfcHJpbnQoIlR4QW50ZW5uYVNlbD0lZFxuIiwgcEFkLT5hdGUuVHhBbnRlbm5hU2VsKTsKKwlhdGVfcHJpbnQoIlJ4QW50ZW5uYVNlbD0lZFxuIiwgcEFkLT5hdGUuUnhBbnRlbm5hU2VsKTsKKwlhdGVfcHJpbnQoIkJCUEN1cnJlbnRCVz0lZFxuIiwgcEFkLT5hdGUuVHhXSS5CVyk7CisJYXRlX3ByaW50KCJHST0lZFxuIiwgcEFkLT5hdGUuVHhXSS5TaG9ydEdJKTsKKwlhdGVfcHJpbnQoIk1DUz0lZFxuIiwgcEFkLT5hdGUuVHhXSS5NQ1MpOworCWF0ZV9wcmludCgiVHhNb2RlPSVkXG4iLCBwQWQtPmF0ZS5UeFdJLlBIWU1PREUpOworCWF0ZV9wcmludCgiQWRkcjE9JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCXBBZC0+YXRlLkFkZHIxWzBdLCBwQWQtPmF0ZS5BZGRyMVsxXSwgcEFkLT5hdGUuQWRkcjFbMl0sIHBBZC0+YXRlLkFkZHIxWzNdLCBwQWQtPmF0ZS5BZGRyMVs0XSwgcEFkLT5hdGUuQWRkcjFbNV0pOworCWF0ZV9wcmludCgiQWRkcjI9JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCXBBZC0+YXRlLkFkZHIyWzBdLCBwQWQtPmF0ZS5BZGRyMlsxXSwgcEFkLT5hdGUuQWRkcjJbMl0sIHBBZC0+YXRlLkFkZHIyWzNdLCBwQWQtPmF0ZS5BZGRyMls0XSwgcEFkLT5hdGUuQWRkcjJbNV0pOworCWF0ZV9wcmludCgiQWRkcjM9JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCXBBZC0+YXRlLkFkZHIzWzBdLCBwQWQtPmF0ZS5BZGRyM1sxXSwgcEFkLT5hdGUuQWRkcjNbMl0sIHBBZC0+YXRlLkFkZHIzWzNdLCBwQWQtPmF0ZS5BZGRyM1s0XSwgcEFkLT5hdGUuQWRkcjNbNV0pOworCWF0ZV9wcmludCgiQ2hhbm5lbD0lZFxuIiwgcEFkLT5hdGUuQ2hhbm5lbCk7CisJYXRlX3ByaW50KCJUeExlbmd0aD0lZFxuIiwgcEFkLT5hdGUuVHhMZW5ndGgpOworCWF0ZV9wcmludCgiVHhDb3VudD0ldVxuIiwgcEFkLT5hdGUuVHhDb3VudCk7CisJYXRlX3ByaW50KCJSRkZyZXFPZmZzZXQ9JWRcbiIsIHBBZC0+YXRlLlJGRnJlcU9mZnNldCk7CisJYXRlX3ByaW50KEtFUk5fRU1FUkcgIlNldF9BVEVfU2hvd19Qcm9jIFN1Y2Nlc3NcbiIpOworCXJldHVybiBUUlVFOworfQorCitJTlQJU2V0X0FURV9IZWxwX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCWF0ZV9wcmludCgiQVRFPUFURVNUQVJULCBBVEVTVE9QLCBUWENPTlQsIFRYQ0FSUiwgVFhGUkFNRSwgUlhGUkFNRVxuIik7CisJYXRlX3ByaW50KCJBVEVEQVxuIik7CisJYXRlX3ByaW50KCJBVEVTQVxuIik7CisJYXRlX3ByaW50KCJBVEVCU1NJRFxuIik7CisJYXRlX3ByaW50KCJBVEVDSEFOTkVMLCByYW5nZTowfjE0KHVubGVzcyBBIGJhbmQgISlcbiIpOworCWF0ZV9wcmludCgiQVRFVFhQT1cwLCBzZXQgcG93ZXIgbGV2ZWwgb2YgYW50ZW5uYSAxLlxuIik7CisJYXRlX3ByaW50KCJBVEVUWFBPVzEsIHNldCBwb3dlciBsZXZlbCBvZiBhbnRlbm5hIDIuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVRYQU5ULCBzZXQgVFggYW50ZW5uYS4gMDphbGwsIDE6YW50ZW5uYSBvbmUsIDI6YW50ZW5uYSB0d28uXG4iKTsKKwlhdGVfcHJpbnQoIkFURVJYQU5ULCBzZXQgUlggYW50ZW5uYS4wOmFsbCwgMTphbnRlbm5hIG9uZSwgMjphbnRlbm5hIHR3bywgMzphbnRlbm5hIHRocmVlLlxuIik7CisJYXRlX3ByaW50KCJBVEVUWEZSRVFPRkZTRVQsIHNldCBmcmVxdWVuY3kgb2Zmc2V0LCByYW5nZSAwfjYzXG4iKTsKKwlhdGVfcHJpbnQoIkFURVRYQlcsIHNldCBCYW5kV2lkdGgsIDA6MjBNSHosIDE6NDBNSHouXG4iKTsKKwlhdGVfcHJpbnQoIkFURVRYTEVOLCBzZXQgRnJhbWUgbGVuZ3RoLCByYW5nZSAyNH4lZFxuIiwgKE1BWF9GUkFNRV9TSVpFIC0gMzQvKiA9PSAyMzEyICovKSk7CisJYXRlX3ByaW50KCJBVEVUWENOVCwgc2V0IGhvdyBtYW55IGZyYW1lIGdvaW5nIHRvIHRyYW5zbWl0LlxuIik7CisJYXRlX3ByaW50KCJBVEVUWE1DUywgc2V0IE1DUywgcmVmZXJlbmNlIHRvIHJhdGUgdGFibGUuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVRYTU9ERSwgc2V0IE1vZGUgMDpDQ0ssIDE6T0ZETSwgMjpIVC1NaXgsIDM6R3JlZW5GaWVsZCwgcmVmZXJlbmNlIHRvIHJhdGUgdGFibGUuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVRYR0ksIHNldCBHSSBpbnRlcnZhbCwgMDpMb25nLCAxOlNob3J0XG4iKTsKKwlhdGVfcHJpbnQoIkFURVJYRkVSLCAwOmRpc2FibGUgUnggRnJhbWUgZXJyb3IgcmF0ZS4gMTplbmFibGUgUnggRnJhbWUgZXJyb3IgcmF0ZS5cbiIpOworCWF0ZV9wcmludCgiQVRFUlJGLCBzaG93IGFsbCBSRiByZWdpc3RlcnMuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVdSRjEsIHNldCBSRjEgcmVnaXN0ZXIuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVdSRjIsIHNldCBSRjIgcmVnaXN0ZXIuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVdSRjMsIHNldCBSRjMgcmVnaXN0ZXIuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVdSRjQsIHNldCBSRjQgcmVnaXN0ZXIuXG4iKTsKKwlhdGVfcHJpbnQoIkFURUxERTJQLCBsb2FkIEVFUFJPTSBmcm9tIC5iaW4gZmlsZS5cbiIpOworCWF0ZV9wcmludCgiQVRFUkUyUCwgZGlzcGxheSBhbGwgRUVQUk9NIGNvbnRlbnQuXG4iKTsKKwlhdGVfcHJpbnQoIkFURVNIT1csIGRpc3BsYXkgYWxsIHBhcmFtZXRlcnMgb2YgQVRFLlxuIik7CisJYXRlX3ByaW50KCJBVEVIRUxQLCBvbmxpbmUgaGVscC5cbiIpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUFzaWNTd2l0Y2hDaGFubmVsKCkgZGVkaWNhdGVkIGZvciBBVEUuCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQVRFQXNpY1N3aXRjaENoYW5uZWwoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJVUlOVDMyIFIyID0gMCwgUjMgPSBERUZBVUxUX1JGX1RYX1BPV0VSLCBSNCA9IDAsIFZhbHVlID0gMDsKKwlDSEFSIFR4UHdlciA9IDAsIFR4UHdlcjIgPSAwOworCVVDSEFSIGluZGV4LCBCYnBWYWx1ZSA9IDAsIFI2NiA9IDB4MzA7CisJUlRNUF9SRl9SRUdTICpSRlJlZ1RhYmxlOworCVVDSEFSIENoYW5uZWw7CisKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCWlmICgocEFkLT5hdGUuYlFBVHhTdGFydCA9PSBUUlVFKSB8fCAocEFkLT5hdGUuYlFBUnhTdGFydCA9PSBUUlVFKSkKKwl7CisJCWlmIChwQWQtPmF0ZS5DaGFubmVsICE9IHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbCkKKwkJeworCQkJcEFkLT5hdGUuQ2hhbm5lbCA9IHBBZC0+TGF0Y2hSZlJlZ3MuQ2hhbm5lbDsKKwkJfQorCQlyZXR1cm47CisJfQorCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworCUNoYW5uZWwgPSBwQWQtPmF0ZS5DaGFubmVsOworCisJLy8gU2VsZWN0IGFudGVubmEKKwlBc2ljQW50ZW5uYVNlbGVjdChwQWQsIENoYW5uZWwpOworCisJLy8gZmlsbCBUeCBwb3dlciB2YWx1ZQorCVR4UHdlciA9IHBBZC0+YXRlLlR4UG93ZXIwOworCVR4UHdlcjIgPSBwQWQtPmF0ZS5UeFBvd2VyMTsKKyNpZmRlZiBSVDMweHgKKy8vMjAwOC8wNy8xMDpLSCBhZGQgdG8gc3VwcG9ydCAzMDcwIEFURTwtLQorCisJLy8gVGhlIFJGIHByb2dyYW1taW5nIHNlcXVlbmNlIGlzIGRpZmZlcmVuY2UgYmV0d2VlbiAzeHh4IGFuZCAyeHh4CisJLy8gVGhlIDMwNzAgaXMgMVQxUi4gVGhlcmVmb3JlLCB3ZSBkb24ndCBuZWVkIHRvIHNldCB0aGUgbnVtYmVyIG9mIFR4L1J4IHBhdGggYW5kIHRoZSBvbmx5IGpvYiBpcyB0byBzZXQgdGhlIHBhcmFtZXRlcnMgb2YgY2hhbm5lbHMuCisJaWYgKElTX1JUMzB4eChwQWQpICYmICgocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjApIHx8CisocEFkLT5SZkljVHlwZSA9PSBSRklDXzMwMjEpIHx8IChwQWQtPlJmSWNUeXBlID09IFJGSUNfMzAyMikgfHwKKyhwQWQtPlJmSWNUeXBlID09IFJGSUNfMjAyMCkpKQorCXsKKwkJLyogbW9kaWZ5IGJ5IFdZIGZvciBSZWFkIFJGIFJlZy4gZXJyb3IgKi8KKwkJVUNIQVIgUkZWYWx1ZTsKKworCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fT0ZfMzAyMF9DSE5MOyBpbmRleCsrKQorCQl7CisJCQlpZiAoQ2hhbm5lbCA9PSBGcmVxSXRlbXMzMDIwW2luZGV4XS5DaGFubmVsKQorCQkJeworCQkJCS8vIFByb2dyYW1taW5nIGNoYW5uZWwgcGFyYW1ldGVycworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IwMiwgRnJlcUl0ZW1zMzAyMFtpbmRleF0uTik7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjAzLCBGcmVxSXRlbXMzMDIwW2luZGV4XS5LKTsKKworCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZCwgUkZfUjA2LCAoUFVDSEFSKSZSRlZhbHVlKTsKKwkJCQlSRlZhbHVlID0gKFJGVmFsdWUgJiAweEZDKSB8IEZyZXFJdGVtczMwMjBbaW5kZXhdLlI7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA2LCAoVUNIQVIpUkZWYWx1ZSk7CisKKwkJCQkvLyBTZXQgVHggUG93ZXIKKwkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IxMiwgKFBVQ0hBUikmUkZWYWx1ZSk7CisJCQkJUkZWYWx1ZSA9IChSRlZhbHVlICYgMHhFMCkgfCBUeFB3ZXI7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjEyLCAoVUNIQVIpUkZWYWx1ZSk7CisKKwkJCQkvLyBTZXQgUkYgb2Zmc2V0CisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkLCBSRl9SMjMsIChQVUNIQVIpJlJGVmFsdWUpOworCQkJCS8vMjAwOC8wOC8wNjogS0ggbW9kaWZpZWQgInBBZC0+UkZGcmVxT2Zmc2V0IiB0byAicEFkLT5hdGUuUkZGcmVxT2Zmc2V0IgorCQkJCVJGVmFsdWUgPSAoUkZWYWx1ZSAmIDB4ODApIHwgcEFkLT5hdGUuUkZGcmVxT2Zmc2V0OworCQkJCVJUMzB4eFdyaXRlUkZSZWdpc3RlcihwQWQsIFJGX1IyMywgKFVDSEFSKVJGVmFsdWUpOworCisJCQkJLy8gU2V0IEJXCisJCQkJaWYgKHBBZC0+YXRlLlR4V0kuQlcgPT0gQldfNDApCisJCQkJeworCQkJCQlSRlZhbHVlID0gcEFkLT5NbG1lLkNhbGlCVzQwUmZSMjQ7CisJCQkJCS8vRElTQUJMRV8xMU5fQ0hFQ0socEFkKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJUkZWYWx1ZSA9IHBBZC0+TWxtZS5DYWxpQlcyMFJmUjI0OworCQkJCX0KKwkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkLCBSRl9SMjQsIChVQ0hBUilSRlZhbHVlKTsKKworCQkJCS8vIEVuYWJsZSBSRiB0dW5pbmcKKwkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWQsIFJGX1IwNywgKFBVQ0hBUikmUkZWYWx1ZSk7CisJCQkJUkZWYWx1ZSA9IFJGVmFsdWUgfCAweDE7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZCwgUkZfUjA3LCAoVUNIQVIpUkZWYWx1ZSk7CisKKwkJCQkvLyBsYXRjaCBjaGFubmVsIGZvciBmdXR1cmUgdXNhZ2UuCisJCQkJcEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID0gQ2hhbm5lbDsKKworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3dpdGNoQ2hhbm5lbCMlZChSRj0lZCwgUHdyMD0lZCwgUHdyMT0lZCwgJWRUKSwgTj0weCUwMlgsIEs9MHglMDJYLCBSPTB4JTAyWFxuIiwKKwkJCUNoYW5uZWwsCisJCQlwQWQtPlJmSWNUeXBlLAorCQkJVHhQd2VyLAorCQkJVHhQd2VyMiwKKwkJCXBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGgsCisJCQlGcmVxSXRlbXMzMDIwW2luZGV4XS5OLAorCQkJRnJlcUl0ZW1zMzAyMFtpbmRleF0uSywKKwkJCUZyZXFJdGVtczMwMjBbaW5kZXhdLlIpKTsKKwl9CisJZWxzZQorLy8yMDA4LzA3LzEwOktIIGFkZCB0byBzdXBwb3J0IDMwNzAgQVRFLS0+CisjZW5kaWYgLy8gUlQzMHh4IC8vCit7CisJUkZSZWdUYWJsZSA9IFJGMjg1MFJlZ1RhYmxlOworCisJc3dpdGNoIChwQWQtPlJmSWNUeXBlKQorCXsKKwkJLyogQnV0IG9ubHkgMjg1MCBhbmQgMjc1MCBzdXBwb3J0IDUuNUdIeiBiYW5kLi4uICovCisJCWNhc2UgUkZJQ18yODIwOgorCQljYXNlIFJGSUNfMjg1MDoKKwkJY2FzZSBSRklDXzI3MjA6CisJCWNhc2UgUkZJQ18yNzUwOgorCisJCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBOVU1fT0ZfMjg1MF9DSE5MOyBpbmRleCsrKQorCQkJeworCQkJCWlmIChDaGFubmVsID09IFJGUmVnVGFibGVbaW5kZXhdLkNoYW5uZWwpCisJCQkJeworCQkJCQlSMiA9IFJGUmVnVGFibGVbaW5kZXhdLlIyOworCQkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAxKQorCQkJCQl7CisJCQkJCQlSMiB8PSAweDQwMDA7CS8vIElmIFRYcGF0aCBpcyAxLCBiaXQgMTQgPSAxOworCQkJCQl9CisKKwkJCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMikKKwkJCQkJeworCQkJCQkJc3dpdGNoIChwQWQtPmF0ZS5SeEFudGVubmFTZWwpCisJCQkJCQl7CisJCQkJCQkJY2FzZSAxOgorCQkJCQkJCQlSMiB8PSAweDIwMDQwOworCQkJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJicFZhbHVlKTsKKwkJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNDsKKwkJCQkJCQkJQmJwVmFsdWUgfD0gMHgwMDsKKwkJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCYnBWYWx1ZSk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMjoKKwkJCQkJCQkJUjIgfD0gMHgxMDA0MDsKKwkJCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZCYnBWYWx1ZSk7CisJCQkJCQkJCUJicFZhbHVlICY9IDB4RTQ7CisJCQkJCQkJCUJicFZhbHVlIHw9IDB4MDE7CisJCQkJCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQmJwVmFsdWUpOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQlSMiB8PSAweDQwOworCQkJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJicFZhbHVlKTsKKwkJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNDsKKwkJCQkJCQkJLyogT25seSBlbmFibGUgdHdvIEFudGVubmEgdG8gcmVjZWl2ZS4gKi8KKwkJCQkJCQkJQmJwVmFsdWUgfD0gMHgwODsKKwkJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCYnBWYWx1ZSk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UgaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJCQkJeworCQkJCQkJUjIgfD0gMHgyMDA0MDsJLy8gd3JpdGUgMSB0byBvZmYgUnhQYXRoCisJCQkJCX0KKworCQkJCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlR4UGF0aCA9PSAyKQorCQkJCQl7CisJCQkJCQlpZiAocEFkLT5hdGUuVHhBbnRlbm5hU2VsID09IDEpCisJCQkJCQl7CisJCQkJCQkJUjIgfD0gMHg0MDAwOwkvLyBJZiBUWCBBbnRlbm5hIHNlbGVjdCBpcyAxICwgYml0IDE0ID0gMTsgRGlzYWJsZSBBbnQgMgorCQkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCAmQmJwVmFsdWUpOworCQkJCQkJCUJicFZhbHVlICY9IDB4RTc7CQkvLzExMTAwMTExQgorCQkJCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgQmJwVmFsdWUpOworCQkJCQkJfQorCQkJCQkJZWxzZSBpZiAocEFkLT5hdGUuVHhBbnRlbm5hU2VsID09IDIpCisJCQkJCQl7CisJCQkJCQkJUjIgfD0gMHg4MDAwOwkvLyBJZiBUWCBBbnRlbm5hIHNlbGVjdCBpcyAyICwgYml0IDE1ID0gMTsgRGlzYWJsZSBBbnQgMQorCQkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCAmQmJwVmFsdWUpOworCQkJCQkJCUJicFZhbHVlICY9IDB4RTc7CisJCQkJCQkJQmJwVmFsdWUgfD0gMHgwODsKKwkJCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsIEJicFZhbHVlKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgJkJicFZhbHVlKTsKKwkJCQkJCQlCYnBWYWx1ZSAmPSAweEU3OworCQkJCQkJCUJicFZhbHVlIHw9IDB4MTA7CisJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IxLCBCYnBWYWx1ZSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMykKKwkJCQkJeworCQkJCQkJc3dpdGNoIChwQWQtPmF0ZS5SeEFudGVubmFTZWwpCisJCQkJCQl7CisJCQkJCQkJY2FzZSAxOgorCQkJCQkJCQlSMiB8PSAweDIwMDQwOworCQkJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJicFZhbHVlKTsKKwkJCQkJCQkJQmJwVmFsdWUgJj0gMHhFNDsKKwkJCQkJCQkJQmJwVmFsdWUgfD0gMHgwMDsKKwkJCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBCYnBWYWx1ZSk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgMjoKKwkJCQkJCQkJUjIgfD0gMHgxMDA0MDsKKwkJCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZCYnBWYWx1ZSk7CisJCQkJCQkJCUJicFZhbHVlICY9IDB4RTQ7CisJCQkJCQkJCUJicFZhbHVlIHw9IDB4MDE7CisJCQkJCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQmJwVmFsdWUpOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDM6CisJCQkJCQkJCVIyIHw9IDB4MzAwMDA7CisJCQkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmQmJwVmFsdWUpOworCQkJCQkJCQlCYnBWYWx1ZSAmPSAweEU0OworCQkJCQkJCQlCYnBWYWx1ZSB8PSAweDAyOworCQkJCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIEJicFZhbHVlKTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZCYnBWYWx1ZSk7CisJCQkJCQkJCUJicFZhbHVlICY9IDB4RTQ7CisJCQkJCQkJCUJicFZhbHVlIHw9IDB4MTA7CisJCQkJCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgQmJwVmFsdWUpOworCQkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCWlmIChDaGFubmVsID4gMTQpCisJCQkJCXsKKwkJCQkJCS8vIGluaXRpYWxpemUgUjMsIFI0CisJCQkJCQlSMyA9IChSRlJlZ1RhYmxlW2luZGV4XS5SMyAmIDB4ZmZmZmMxZmYpOworCQkJCQkJUjQgPSAoUkZSZWdUYWJsZVtpbmRleF0uUjQgJiAofjB4MDAxZjg3YzApKSB8IChwQWQtPmF0ZS5SRkZyZXFPZmZzZXQgPDwgMTUpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdGhlIFJvcnkncyBzdWdnZXN0aW9uIHRvIHNvbHZlIHRoZSBtaWRkbGUgcmFuZ2UgaXNzdWUuCisJCQkJCQkvLyA1LjVHIGJhbmQgcG93ZXIgcmFuZ2U6IDB4Rjl+MFgwRiwgVFgwIFJlZzMgYml0OS9UWDEgUmVnNCBiaXQ2PSIwIiBtZWFucyB0aGUgVFggcG93ZXIgcmVkdWNlIDdkQgorCQkJCQkJLy8gUjMKKwkJCQkJCWlmICgoVHhQd2VyID49IC03KSAmJiAoVHhQd2VyIDwgMCkpCisJCQkJCQl7CisJCQkJCQkJVHhQd2VyID0gKDcrVHhQd2VyKTsKKwkJCQkJCQlUeFB3ZXIgPSAoVHhQd2VyID4gMHhGKSA/ICgweEYpIDogKFR4UHdlcik7CisJCQkJCQkJUjMgfD0gKFR4UHdlciA8PCAxMCk7CisJCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFQXNpY1N3aXRjaENoYW5uZWw6IFR4UHdlcj0lZCBcbiIsIFR4UHdlcikpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCVR4UHdlciA9IChUeFB3ZXIgPiAweEYpID8gKDB4RikgOiAoVHhQd2VyKTsKKwkJCQkJCQlSMyB8PSAoVHhQd2VyIDw8IDEwKSB8ICgxIDw8IDkpOworCQkJCQkJfQorCisJCQkJCQkvLyBSNAorCQkJCQkJaWYgKChUeFB3ZXIyID49IC03KSAmJiAoVHhQd2VyMiA8IDApKQorCQkJCQkJeworCQkJCQkJCVR4UHdlcjIgPSAoNytUeFB3ZXIyKTsKKwkJCQkJCQlUeFB3ZXIyID0gKFR4UHdlcjIgPiAweEYpID8gKDB4RikgOiAoVHhQd2VyMik7CisJCQkJCQkJUjQgfD0gKFR4UHdlcjIgPDwgNyk7CisJCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVRFQXNpY1N3aXRjaENoYW5uZWw6IFR4UHdlcjI9JWQgXG4iLCBUeFB3ZXIyKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJVHhQd2VyMiA9IChUeFB3ZXIyID4gMHhGKSA/ICgweEYpIDogKFR4UHdlcjIpOworCQkJCQkJCVI0IHw9IChUeFB3ZXIyIDw8IDcpIHwgKDEgPDwgNik7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlSMyA9IChSRlJlZ1RhYmxlW2luZGV4XS5SMyAmIDB4ZmZmZmMxZmYpIHwgKFR4UHdlciA8PCA5KTsgLy8gc2V0IFRYIHBvd2VyMAorCQkJCQkJUjQgPSAoUkZSZWdUYWJsZVtpbmRleF0uUjQgJiAofjB4MDAxZjg3YzApKSB8IChwQWQtPmF0ZS5SRkZyZXFPZmZzZXQgPDwgMTUpIHwgKFR4UHdlcjIgPDw2KTsvLyBTZXQgZnJlcSBvZmZzZXQgJiBUeFB3cjEKKwkJCQkJfQorCisJCQkJCS8vIEJhc2VkIG9uIEJCUCBjdXJyZW50IG1vZGUgYmVmb3JlIGNoYW5naW5nIFJGIGNoYW5uZWwuCisJCQkJCWlmIChwQWQtPmF0ZS5UeFdJLkJXID09IEJXXzQwKQorCQkJCQl7CisJCQkJCQlSNCB8PTB4MjAwMDAwOworCQkJCQl9CisKKwkJCQkJLy8gVXBkYXRlIHZhcmlhYmxlcworCQkJCQlwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPSBDaGFubmVsOworCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlIxID0gUkZSZWdUYWJsZVtpbmRleF0uUjE7CisJCQkJCXBBZC0+TGF0Y2hSZlJlZ3MuUjIgPSBSMjsKKwkJCQkJcEFkLT5MYXRjaFJmUmVncy5SMyA9IFIzOworCQkJCQlwQWQtPkxhdGNoUmZSZWdzLlI0ID0gUjQ7CisKKwkJCQkJUnRtcFJmSW9Xcml0ZShwQWQpOworCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9Cit9CisJLy8gQ2hhbmdlIEJCUCBzZXR0aW5nIGR1cmluZyBzd2l0Y2ggZnJvbSBhLT5nLCBnLT5hCisJaWYgKENoYW5uZWwgPD0gMTQpCisJeworCSAgICBVTE9ORwlUeFBpbkNmZyA9IDB4MDAwNTBGMEE7Ly8gMjAwNy4xMC4wOSBieSBCcmlhbiA6IDB4MDAwNTA1MEEgPT0+IDB4MDAwNTBGMEEKKworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjYyLCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjMsICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NCwgKDB4MzcgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOworCisJCS8qIEZvciAxVC8yUiBjaGlwIG9ubHkuLi4gKi8KKwkgICAgaWYgKHBBZC0+TmljQ29uZmlnMi5maWVsZC5FeHRlcm5hbExOQUZvckcpCisJICAgIHsKKwkgICAgICAgIEFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODIsIDB4NjIpOworCSAgICB9CisJICAgIGVsc2UKKwkgICAgeworCSAgICAgICAgQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4MiwgMHg4NCk7CisJICAgIH0KKworICAgICAgICAvLyBBY2NvcmRpbmcgdGhlIFJvcnkncyBzdWdnZXN0aW9uIHRvIHNvbHZlIHRoZSBtaWRkbGUgcmFuZ2UgaXNzdWUuCisJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I4NiwgJkJicFZhbHVlKTsKKwkJQVNTRVJUKChCYnBWYWx1ZSA9PSAweDAwKSk7CisJCWlmICgoQmJwVmFsdWUgIT0gMHgwMCkpCisJCXsKKwkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODYsIDB4MDApOworCQl9CisKKwkJLy8gNS41R0h6IGJhbmQgc2VsZWN0aW9uIFBJTiwgYml0MSBhbmQgYml0MiBhcmUgY29tcGxlbWVudAorCQlSVE1QX0lPX1JFQUQzMihwQWQsIFRYX0JBTkRfQ0ZHLCAmVmFsdWUpOworCQlWYWx1ZSAmPSAofjB4Nik7CisJCVZhbHVlIHw9ICgweDA0KTsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfQkFORF9DRkcsIFZhbHVlKTsKKworICAgICAgICAvLyBUdXJuIG9mZiB1bnVzZWQgUEEgb3IgTE5BIHdoZW4gb25seSAxVCBvciAxUi4KKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5UeFBhdGggPT0gMSkKKwkJeworCQkJVHhQaW5DZmcgJj0gMHhGRkZGRkZGMzsKKwkJfQorCQlpZiAocEFkLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aCA9PSAxKQorCQl7CisJCQlUeFBpbkNmZyAmPSAweEZGRkZGM0ZGOworCQl9CisKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUElOX0NGRywgVHhQaW5DZmcpOworCX0KKwllbHNlCisJeworCSAgICBVTE9ORwlUeFBpbkNmZyA9IDB4MDAwNTBGMDU7Ly8yMDA3LjEwLjA5IGJ5IEJyaWFuIDogMHgwMDA1MDUwNSA9PT4gMHgwMDA1MEYwNQorCisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjIsICgweDM3IC0gR0VUX0xOQV9HQUlOKHBBZCkpKTsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2MywgKDB4MzcgLSBHRVRfTE5BX0dBSU4ocEFkKSkpOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY0LCAoMHgzNyAtIEdFVF9MTkFfR0FJTihwQWQpKSk7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SODIsIDB4RjIpOworCisgICAgICAgIC8vIEFjY29yZGluZyB0aGUgUm9yeSdzIHN1Z2dlc3Rpb24gdG8gc29sdmUgdGhlIG1pZGRsZSByYW5nZSBpc3N1ZS4KKwkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjg2LCAmQmJwVmFsdWUpOworCQlBU1NFUlQoKEJicFZhbHVlID09IDB4MDApKTsKKwkJaWYgKChCYnBWYWx1ZSAhPSAweDAwKSkKKwkJeworCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I4NiwgMHgwMCk7CisJCX0KKwkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjkxLCAmQmJwVmFsdWUpOworCQlBU1NFUlQoKEJicFZhbHVlID09IDB4MDQpKTsKKworCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SOTIsICZCYnBWYWx1ZSk7CisJCUFTU0VSVCgoQmJwVmFsdWUgPT0gMHgwMCkpOworCisJCS8vIDUuNUdIeiBiYW5kIHNlbGVjdGlvbiBQSU4sIGJpdDEgYW5kIGJpdDIgYXJlIGNvbXBsZW1lbnQKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJlZhbHVlKTsKKwkJVmFsdWUgJj0gKH4weDYpOworCQlWYWx1ZSB8PSAoMHgwMik7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBWYWx1ZSk7CisKKyAgICAgICAgLy8gVHVybiBvZmYgdW51c2VkIFBBIG9yIExOQSB3aGVuIG9ubHkgMVQgb3IgMVIuCisJCWlmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDEpCisJCXsKKwkJCVR4UGluQ2ZnICY9IDB4RkZGRkZGRjM7CisJICAgIH0KKwkJaWYgKHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPT0gMSkKKwkJeworCQkJVHhQaW5DZmcgJj0gMHhGRkZGRjNGRjsKKwkJfQorCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX1BJTl9DRkcsIFR4UGluQ2ZnKTsKKwl9CisKKyAgICAvLyBSNjYgc2hvdWxkIGJlIHNldCBhY2NvcmRpbmcgdG8gQ2hhbm5lbCBhbmQgdXNlIDIwTUh6IHdoZW4gc2Nhbm5pbmcKKwlpZiAoQ2hhbm5lbCA8PSAxNCkKKwl7CisJCS8vIEJHIGJhbmQKKwkJUjY2ID0gMHgyRSArIEdFVF9MTkFfR0FJTihwQWQpOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCX0KKwllbHNlCisJeworCQkvLyA1LjUgR0h6IGJhbmQKKwkJaWYgKHBBZC0+YXRlLlR4V0kuQlcgPT0gQldfMjApCisJCXsKKwkJCVI2NiA9IChVQ0hBUikoMHgzMiArIChHRVRfTE5BX0dBSU4ocEFkKSo1KS8zKTsKKyAgICAJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjYsIFI2Nik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlSNjYgPSAoVUNIQVIpKDB4M0EgKyAoR0VUX0xOQV9HQUlOKHBBZCkqNSkvMyk7CisJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBSNjYpOworCQl9CisJfQorCisJLy8KKwkvLyBPbiAxMUEsIFdlIHNob3VsZCBkZWxheSBhbmQgd2FpdCBSRi9CQlAgdG8gYmUgc3RhYmxlCisJLy8gYW5kIHRoZSBhcHByb3ByaWF0ZSB0aW1lIHNob3VsZCBiZSAxMDAwIG1pY3JvIHNlY29uZHMKKwkvLyAyMDA1LzA2LzA1IC0gT24gMTFHLCBXZSBhbHNvIG5lZWQgdGhpcyBkZWxheSB0aW1lLiBPdGhlcndpc2UgaXQncyBkaWZmaWN1bHQgdG8gcGFzcyB0aGUgV0hRTC4KKwkvLworCVJUTVB1c2VjRGVsYXkoMTAwMCk7CisKKwlpZiAoQ2hhbm5lbCA+IDE0KQorCXsKKwkJLy8gV2hlbiA1LjVHSHogYmFuZCB0aGUgTFNCIG9mIFR4UHdyIHdpbGwgYmUgdXNlZCB0byByZWR1Y2VkIDdkQiBvciBub3QuCisJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlN3aXRjaENoYW5uZWwjJWQoUkY9JWQsICVkVCkgdG8gLCBSMT0weCUwOGx4LCBSMj0weCUwOGx4LCBSMz0weCUwOGx4LCBSND0weCUwOGx4XG4iLAorCQkJCQkJCQkgIENoYW5uZWwsCisJCQkJCQkJCSAgcEFkLT5SZkljVHlwZSwKKwkJCQkJCQkJICBwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoLAorCQkJCQkJCQkgIHBBZC0+TGF0Y2hSZlJlZ3MuUjEsCisJCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SMiwKKwkJCQkJCQkJICBwQWQtPkxhdGNoUmZSZWdzLlIzLAorCQkJCQkJCQkgIHBBZC0+TGF0Y2hSZlJlZ3MuUjQpKTsKKwl9CisJZWxzZQorCXsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3dpdGNoQ2hhbm5lbCMlZChSRj0lZCwgUHdyMD0ldSwgUHdyMT0ldSwgJWRUKSB0byAsIFIxPTB4JTA4bHgsIFIyPTB4JTA4bHgsIFIzPTB4JTA4bHgsIFI0PTB4JTA4bHhcbiIsCisJCQkJCQkJCSAgQ2hhbm5lbCwKKwkJCQkJCQkJICBwQWQtPlJmSWNUeXBlLAorCQkJCQkJCQkgIChSMyAmIDB4MDAwMDNlMDApID4+IDksCisJCQkJCQkJCSAgKFI0ICYgMHgwMDAwMDdjMCkgPj4gNiwKKwkJCQkJCQkJICBwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoLAorCQkJCQkJCQkgIHBBZC0+TGF0Y2hSZlJlZ3MuUjEsCisJCQkJCQkJCSAgcEFkLT5MYXRjaFJmUmVncy5SMiwKKwkJCQkJCQkJICBwQWQtPkxhdGNoUmZSZWdzLlIzLAorCQkJCQkJCQkgIHBBZC0+TGF0Y2hSZlJlZ3MuUjQpKTsKKyAgICB9Cit9CisKKy8vCisvLyBJbiBmYWN0LCBubyBvbmUgd2lsbCBjYWxsIHRoaXMgcm91dGluZSBzbyBmYXIgIQorLy8KKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJR2l2ZXMgQ0NLIFRYIHJhdGUgMiBtb3JlIGRCIFRYIHBvd2VyLgorCQlUaGlzIHJvdXRpbmUgd29ya3Mgb25seSBpbiBBVEUgbW9kZS4KKworCQljYWxjdWxhdGUgZGVzaXJlZCBUeCBwb3dlciBpbiBSRiBSMy5UeDB+NSwJc2hvdWxkIGNvbnNpZGVyIC0KKwkJMC4gaWYgY3VycmVudCByYWRpbyBpcyBhIG5vaXN5IGVudmlyb25tZW50IChwQWQtPkRyc0NvdW50ZXJzLmZOb2lzeUVudmlyb25tZW50KQorCQkxLiBUeFBvd2VyUGVyY2VudGFnZQorCQkyLiBhdXRvIGNhbGlicmF0aW9uIGJhc2VkIG9uIFRTU0kgZmVlZGJhY2sKKwkJMy4gZXh0cmEgMiBkYiBmb3IgQ0NLCisJCTQuIC0xMCBkYiB1cG9uIHZlcnktc2hvcnQgZGlzdGFuY2UgKEF2Z1JTU0kgPj0gLTQwZGIpIHRvIEFQCisKKwlOT1RFOiBTaW5jZSB0aGlzIHJvdXRpbmUgcmVxdWlyZXMgdGhlIHZhbHVlIG9mIChwQWQtPkRyc0NvdW50ZXJzLmZOb2lzeUVudmlyb25tZW50KSwKKwkJaXQgc2hvdWxkIGJlIGNhbGxlZCBBRlRFUiBNbG1lRHluYW1pY1R4UmF0ZVN3aXRjaGluZygpCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBVEVBc2ljQWRqdXN0VHhQb3dlcigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlJTlQJCQlpLCBqOworCUNIQVIJCURlbHRhUHdyID0gMDsKKwlCT09MRUFOCQliQXV0b1R4QWdjID0gRkFMU0U7CisJVUNIQVIJCVRzc2lSZWYsICpwVHNzaU1pbnVzQm91bmRhcnksICpwVHNzaVBsdXNCb3VuZGFyeSwgVHhBZ2NTdGVwOworCVVDSEFSCQlCYnBSNDkgPSAwLCBpZHg7CisJUENIQVIJCXBUeEFnY0NvbXBlbnNhdGU7CisJVUxPTkcJCVR4UHdyWzVdOworCUNIQVIJCVZhbHVlOworCisJLyogbm8gb25lIGNhbGxzIHRoaXMgcHJvY2VkdXJlIHNvIGZhciAqLworCWlmIChwQWQtPmF0ZS5UeFdJLkJXID09IEJXXzQwKQorCXsKKwkJaWYgKHBBZC0+YXRlLkNoYW5uZWwgPiAxNCkKKwkJeworCQkJVHhQd3JbMF0gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbMF07CisJCQlUeFB3clsxXSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFsxXTsKKwkJCVR4UHdyWzJdID0gcEFkLT5UeDQwTVB3ckNmZ0FCYW5kWzJdOworCQkJVHhQd3JbM10gPSBwQWQtPlR4NDBNUHdyQ2ZnQUJhbmRbM107CisJCQlUeFB3cls0XSA9IHBBZC0+VHg0ME1Qd3JDZmdBQmFuZFs0XTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVR4UHdyWzBdID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kWzBdOworCQkJVHhQd3JbMV0gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbMV07CisJCQlUeFB3clsyXSA9IHBBZC0+VHg0ME1Qd3JDZmdHQmFuZFsyXTsKKwkJCVR4UHdyWzNdID0gcEFkLT5UeDQwTVB3ckNmZ0dCYW5kWzNdOworCQkJVHhQd3JbNF0gPSBwQWQtPlR4NDBNUHdyQ2ZnR0JhbmRbNF07CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYgKHBBZC0+YXRlLkNoYW5uZWwgPiAxNCkKKwkJeworCQkJVHhQd3JbMF0gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbMF07CisJCQlUeFB3clsxXSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFsxXTsKKwkJCVR4UHdyWzJdID0gcEFkLT5UeDIwTVB3ckNmZ0FCYW5kWzJdOworCQkJVHhQd3JbM10gPSBwQWQtPlR4MjBNUHdyQ2ZnQUJhbmRbM107CisJCQlUeFB3cls0XSA9IHBBZC0+VHgyME1Qd3JDZmdBQmFuZFs0XTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVR4UHdyWzBdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzBdOworCQkJVHhQd3JbMV0gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbMV07CisJCQlUeFB3clsyXSA9IHBBZC0+VHgyME1Qd3JDZmdHQmFuZFsyXTsKKwkJCVR4UHdyWzNdID0gcEFkLT5UeDIwTVB3ckNmZ0dCYW5kWzNdOworCQkJVHhQd3JbNF0gPSBwQWQtPlR4MjBNUHdyQ2ZnR0JhbmRbNF07CisJCX0KKwl9CisKKwkvLyBUWCBwb3dlciBjb21wZW5zYXRpb24gZm9yIHRlbXBlcmF0dXJlIHZhcmlhdGlvbiBiYXNlZCBvbiBUU1NJLgorCS8vIERvIGl0IHBlciA0IHNlY29uZHMuCisJaWYgKHBBZC0+TWxtZS5PbmVTZWNQZXJpb2RpY1JvdW5kICUgNCA9PSAwKQorCXsKKwkJaWYgKHBBZC0+YXRlLkNoYW5uZWwgPD0gMTQpCisJCXsKKwkJCS8qIGJnIGNoYW5uZWwgKi8KKwkJCWJBdXRvVHhBZ2MgICAgICAgICA9IHBBZC0+YkF1dG9UeEFnY0c7CisJCQlUc3NpUmVmICAgICAgICAgICAgPSBwQWQtPlRzc2lSZWZHOworCQkJcFRzc2lNaW51c0JvdW5kYXJ5ID0gJnBBZC0+VHNzaU1pbnVzQm91bmRhcnlHWzBdOworCQkJcFRzc2lQbHVzQm91bmRhcnkgID0gJnBBZC0+VHNzaVBsdXNCb3VuZGFyeUdbMF07CisJCQlUeEFnY1N0ZXAgICAgICAgICAgPSBwQWQtPlR4QWdjU3RlcEc7CisJCQlwVHhBZ2NDb21wZW5zYXRlICAgPSAmcEFkLT5UeEFnY0NvbXBlbnNhdGVHOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogYSBjaGFubmVsICovCisJCQliQXV0b1R4QWdjICAgICAgICAgPSBwQWQtPmJBdXRvVHhBZ2NBOworCQkJVHNzaVJlZiAgICAgICAgICAgID0gcEFkLT5Uc3NpUmVmQTsKKwkJCXBUc3NpTWludXNCb3VuZGFyeSA9ICZwQWQtPlRzc2lNaW51c0JvdW5kYXJ5QVswXTsKKwkJCXBUc3NpUGx1c0JvdW5kYXJ5ICA9ICZwQWQtPlRzc2lQbHVzQm91bmRhcnlBWzBdOworCQkJVHhBZ2NTdGVwICAgICAgICAgID0gcEFkLT5UeEFnY1N0ZXBBOworCQkJcFR4QWdjQ29tcGVuc2F0ZSAgID0gJnBBZC0+VHhBZ2NDb21wZW5zYXRlQTsKKwkJfQorCisJCWlmIChiQXV0b1R4QWdjKQorCQl7CisJCQkvKiBCYnBSNDkgaXMgdW5zaWduZWQgY2hhciAqLworCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQ5LCAmQmJwUjQ5KTsKKworCQkJLyogKHApIFRzc2lQbHVzQm91bmRhcnlHWzBdID0gMCA9IChtKSBUc3NpTWludXNCb3VuZGFyeUdbMF0gKi8KKwkJCS8qIGNvbXBlbnNhdGU6ICs0ICAgICArMyAgICsyICAgKzEgICAgMCAgIC0xICAgLTIgICAtMyAgIC00ICogc3RlcHMgKi8KKwkJCS8qIHN0ZXAgdmFsdWUgaXMgZGVmaW5lZCBpbiBwQWQtPlR4QWdjU3RlcEcgZm9yIHR4IHBvd2VyIHZhbHVlICovCisKKwkJCS8qIFs0XSsxK1s0XSAgIHA0ICAgICBwMyAgIHAyICAgcDEgICBvMSAgIG0xICAgbTIgICBtMyAgIG00ICovCisJCQkvKiBleDogICAgICAgICAweDAwIDB4MTUgMHgyNSAweDQ1IDB4ODggMHhBMCAweEI1IDB4RDAgMHhGMAorCQkJICAgYWJvdmUgdmFsdWUgYXJlIGV4YW1pbmVkIGluIG1hc3MgZmFjdG9yeSBwcm9kdWN0aW9uICovCisJCQkvKiAgICAgICAgICAgICBbNF0gICAgWzNdICBbMl0gIFsxXSAgWzBdICBbMV0gIFsyXSAgWzNdICBbNF0gKi8KKworCQkJLyogcGx1cyBpcyAweDEwIH4gMHg0MCwgbWludXMgaXMgMHg2MCB+IDB4OTAgKi8KKwkJCS8qIGlmIHZhbHVlIGlzIGJldHdlZW4gcDEgfiBvMSBvciBvMSB+IHMxLCBubyBuZWVkIHRvIGFkanVzdCB0eCBwb3dlciAqLworCQkJLyogaWYgdmFsdWUgaXMgMHg2NSwgdHggcG93ZXIgd2lsbCBiZSAtPSBUeEFnY1N0ZXAqKDItMSkgKi8KKworCQkJaWYgKEJicFI0OSA+IHBUc3NpTWludXNCb3VuZGFyeVsxXSkKKwkJCXsKKwkJCQkvLyBSZWFkaW5nIGlzIGxhcmdlciB0aGFuIHRoZSByZWZlcmVuY2UgdmFsdWUuCisJCQkJLy8gQ2hlY2sgZm9yIGhvdyBsYXJnZSB3ZSBuZWVkIHRvIGRlY3JlYXNlIHRoZSBUeCBwb3dlci4KKwkJCQlmb3IgKGlkeCA9IDE7IGlkeCA8IDU7IGlkeCsrKQorCQkJCXsKKwkJCQkJaWYgKEJicFI0OSA8PSBwVHNzaU1pbnVzQm91bmRhcnlbaWR4XSkgIC8vIEZvdW5kIHRoZSByYW5nZQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8vIFRoZSBpbmRleCBpcyB0aGUgc3RlcCB3ZSBzaG91bGQgZGVjcmVhc2UsIGlkeCA9IDAgbWVhbnMgdGhlcmUgaXMgbm90aGluZyB0byBjb21wZW5zYXRlCisvLwkJCQlpZiAoUjMgPiAoVUxPTkcpIChUeEFnY1N0ZXAgKiAoaWR4LTEpKSkKKwkJCQkJKnBUeEFnY0NvbXBlbnNhdGUgPSAtKFR4QWdjU3RlcCAqIChpZHgtMSkpOworLy8JCQkJZWxzZQorLy8JCQkJCSpwVHhBZ2NDb21wZW5zYXRlID0gLSgoVUNIQVIpUjMpOworCisJCQkJRGVsdGFQd3IgKz0gKCpwVHhBZ2NDb21wZW5zYXRlKTsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLSBUeCBQb3dlciwgQkJQIFIxPSV4LCBUc3NpUmVmPSV4LCBUeEFnY1N0ZXA9JXgsIHN0ZXAgPSAtJWRcbiIsCisJCQkJCUJicFI0OSwgVHNzaVJlZiwgVHhBZ2NTdGVwLCBpZHgtMSkpOworCQkJfQorCQkJZWxzZSBpZiAoQmJwUjQ5IDwgcFRzc2lQbHVzQm91bmRhcnlbMV0pCisJCQl7CisJCQkJLy8gUmVhZGluZyBpcyBzbWFsbGVyIHRoYW4gdGhlIHJlZmVyZW5jZSB2YWx1ZQorCQkJCS8vIGNoZWNrIGZvciBob3cgbGFyZ2Ugd2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgVHggcG93ZXIKKwkJCQlmb3IgKGlkeCA9IDE7IGlkeCA8IDU7IGlkeCsrKQorCQkJCXsKKwkJCQkJaWYgKEJicFI0OSA+PSBwVHNzaVBsdXNCb3VuZGFyeVtpZHhdKSAgIC8vIEZvdW5kIHRoZSByYW5nZQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8vIFRoZSBpbmRleCBpcyB0aGUgc3RlcCB3ZSBzaG91bGQgaW5jcmVhc2UsIGlkeCA9IDAgbWVhbnMgdGhlcmUgaXMgbm90aGluZyB0byBjb21wZW5zYXRlCisJCQkJKnBUeEFnY0NvbXBlbnNhdGUgPSBUeEFnY1N0ZXAgKiAoaWR4LTEpOworCQkJCURlbHRhUHdyICs9ICgqcFR4QWdjQ29tcGVuc2F0ZSk7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiKysgVHggUG93ZXIsIEJCUCBSMT0leCwgVHNzaVJlZj0leCwgVHhBZ2NTdGVwPSV4LCBzdGVwID0gKyVkXG4iLAorCQkJCQlCYnBSNDksIFRzc2lSZWYsIFR4QWdjU3RlcCwgaWR4LTEpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkqcFR4QWdjQ29tcGVuc2F0ZSA9IDA7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiICAgVHggUG93ZXIsIEJCUCBSMT0leCwgVHNzaVJlZj0leCwgVHhBZ2NTdGVwPSV4LCBzdGVwID0gKyVkXG4iLAorCQkJCQlCYnBSNDksIFRzc2lSZWYsIFR4QWdjU3RlcCwgMCkpOworCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCWlmIChwQWQtPmF0ZS5DaGFubmVsIDw9IDE0KQorCQl7CisJCQliQXV0b1R4QWdjICAgICAgICAgPSBwQWQtPmJBdXRvVHhBZ2NHOworCQkJcFR4QWdjQ29tcGVuc2F0ZSAgID0gJnBBZC0+VHhBZ2NDb21wZW5zYXRlRzsKKwkJfQorCQllbHNlCisJCXsKKwkJCWJBdXRvVHhBZ2MgICAgICAgICA9IHBBZC0+YkF1dG9UeEFnY0E7CisJCQlwVHhBZ2NDb21wZW5zYXRlICAgPSAmcEFkLT5UeEFnY0NvbXBlbnNhdGVBOworCQl9CisKKwkJaWYgKGJBdXRvVHhBZ2MpCisJCQlEZWx0YVB3ciArPSAoKnBUeEFnY0NvbXBlbnNhdGUpOworCX0KKworCS8qIGNhbGN1bGF0ZSBkZWx0YSBwb3dlciBiYXNlZCBvbiB0aGUgcGVyY2VudGFnZSBzcGVjaWZpZWQgZnJvbSBVSSAqLworCS8vIEUyUFJPTSBzZXR0aW5nIGlzIGNhbGlicmF0ZWQgZm9yIG1heGltdW0gVFggcG93ZXIgKGkuZS4gMTAwJSkKKwkvLyBXZSBsb3dlciBUWCBwb3dlciBoZXJlIGFjY29yZGluZyB0byB0aGUgcGVyY2VudGFnZSBzcGVjaWZpZWQgZnJvbSBVSQorCWlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9PSAweGZmZmZmZmZmKSAgICAgICAvLyBBVVRPIFRYIFBPV0VSIGNvbnRyb2wKKwkJOworCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gOTApICAvLyA5MSB+IDEwMCUgJiBBVVRPLCB0cmVhdCBhcyAxMDAlIGluIHRlcm1zIG9mIG1XCisJCTsKKwllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDYwKSAgLy8gNjEgfiA5MCUsIHRyZWF0IGFzIDc1JSBpbiB0ZXJtcyBvZiBtVworCXsKKwkJRGVsdGFQd3IgLT0gMTsKKwl9CisJZWxzZSBpZiAocEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPiAzMCkgIC8vIDMxIH4gNjAlLCB0cmVhdCBhcyA1MCUgaW4gdGVybXMgb2YgbVcKKwl7CisJCURlbHRhUHdyIC09IDM7CisJfQorCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID4gMTUpICAvLyAxNiB+IDMwJSwgdHJlYXQgYXMgMjUlIGluIHRlcm1zIG9mIG1XCisJeworCQlEZWx0YVB3ciAtPSA2OworCX0KKwllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA+IDkpICAgLy8gMTAgfiAxNSUsIHRyZWF0IGFzIDEyLjUlIGluIHRlcm1zIG9mIG1XCisJeworCQlEZWx0YVB3ciAtPSA5OworCX0KKwllbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgfiA5ICUsIHRyZWF0IGFzIE1JTih+MyUpIGluIHRlcm1zIG9mIG1XCisJeworCQlEZWx0YVB3ciAtPSAxMjsKKwl9CisKKwkvKiByZXNldCBkaWZmZXJlbnQgbmV3IHR4IHBvd2VyIGZvciBkaWZmZXJlbnQgVFggcmF0ZSAqLworCWZvcihpPTA7IGk8NTsgaSsrKQorCXsKKwkJaWYgKFR4UHdyW2ldICE9IDB4ZmZmZmZmZmYpCisJCXsKKwkJCWZvciAoaj0wOyBqPDg7IGorKykKKwkJCXsKKwkJCQlWYWx1ZSA9IChDSEFSKSgoVHhQd3JbaV0gPj4gaio0KSAmIDB4MEYpOyAvKiAwIH4gMTUgKi8KKworCQkJCWlmICgoVmFsdWUgKyBEZWx0YVB3cikgPCAwKQorCQkJCXsKKwkJCQkJVmFsdWUgPSAwOyAvKiBtaW4gKi8KKwkJCQl9CisJCQkJZWxzZSBpZiAoKFZhbHVlICsgRGVsdGFQd3IpID4gMHhGKQorCQkJCXsKKwkJCQkJVmFsdWUgPSAweEY7IC8qIG1heCAqLworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlWYWx1ZSArPSBEZWx0YVB3cjsgLyogdGVtcGVyYXR1cmUgY29tcGVuc2F0aW9uICovCisJCQkJfQorCisJCQkJLyogZmlsbCBuZXcgdmFsdWUgdG8gQ1NSIG9mZnNldCAqLworCQkJCVR4UHdyW2ldID0gKFR4UHdyW2ldICYgfigweDAwMDAwMDBGIDw8IGoqNCkpIHwgKFZhbHVlIDw8IGoqNCk7CisJCQl9CisKKwkJCS8qIHdyaXRlIHR4IHBvd2VyIHZhbHVlIHRvIENTUiAqLworCQkJLyogVFhfUFdSX0NGR18wICg4IHR4IHJhdGUpIGZvcglUWCBwb3dlciBmb3IgT0ZETSAxMk0vMThNCisJCQkJCQkJCQkJCVRYIHBvd2VyIGZvciBPRkRNIDZNLzlNCisJCQkJCQkJCQkJCVRYIHBvd2VyIGZvciBDQ0s1LjVNLzExTQorCQkJCQkJCQkJCQlUWCBwb3dlciBmb3IgQ0NLMU0vMk0gKi8KKwkJCS8qIFRYX1BXUl9DRkdfMSB+IFRYX1BXUl9DRkdfNCAqLworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUFdSX0NGR18wICsgaSo0LCBUeFB3cltpXSk7CisKKworCQl9CisJfQorCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJV3JpdGUgVHhXSSBmb3IgQVRFIG1vZGUuCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKKyNpZmRlZiBSVDI4NzAKK3N0YXRpYyBWT0lEIEFURVdyaXRlVHhXSSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVFhXSV9TVFJVQyAJcFR4V0ksCisJSU4JQk9PTEVBTgkJCUZSQUcsCisJSU4JQk9PTEVBTgkJCUluc1RpbWVzdGFtcCwKKwlJTglCT09MRUFOIAkJQU1QRFUsCisJSU4JQk9PTEVBTiAJCUFjaywKKwlJTglCT09MRUFOIAkJTlNlcSwJCS8vIEhXIG5ldyBhIHNlcXVlbmNlLgorCUlOCVVDSEFSCQkJQkFTaXplLAorCUlOCVVDSEFSCQkJV0NJRCwKKwlJTglVTE9ORwkJCUxlbmd0aCwKKwlJTglVQ0hBUiAJCQlQSUQsCisJSU4JVUNIQVIJCQlNSU1PcHMsCisJSU4JVUNIQVIJCQlUeG9wbW9kZSwKKwlJTglCT09MRUFOCQkJQ2ZBY2ssCisJSU4JSFRUUkFOU01JVF9TRVRUSU5HCVRyYW5zbWl0KQoreworCS8vCisJLy8gQWx3YXlzIHVzZSBMb25nIHByZWFtYmxlIGJlZm9yZSB2ZXJpZmlhdGlvbiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzIHdlbGwuCisJLy8gVG9kbzogcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBpZiBzaG9ydCBwcmVhbWJsZSBmdW5jdGlvbmFsaXR5IHdvcmtzCisJLy8KKwlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQpOworCXBUeFdJLT5GUkFHPSBGUkFHOworCXBUeFdJLT5UUz0gSW5zVGltZXN0YW1wOworCXBUeFdJLT5BTVBEVSA9IEFNUERVOworCisJcFR4V0ktPk1JTU9wcyA9IFBXUl9BQ1RJVkU7CisJcFR4V0ktPk1wZHVEZW5zaXR5ID0gNDsKKwlwVHhXSS0+QUNLID0gQWNrOworCXBUeFdJLT50eG9wID0gVHhvcG1vZGU7CisJcFR4V0ktPk5TRVEgPSBOU2VxOworCXBUeFdJLT5CQVdpblNpemUgPSBCQVNpemU7CisKKwlwVHhXSS0+V2lyZWxlc3NDbGlJRCA9IFdDSUQ7CisJcFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCA9IExlbmd0aDsKKwlwVHhXSS0+UGFja2V0SWQgPSBQSUQ7CisKKwlwVHhXSS0+QlcgPSBUcmFuc21pdC5maWVsZC5CVzsKKwlwVHhXSS0+U2hvcnRHSSA9IFRyYW5zbWl0LmZpZWxkLlNob3J0R0k7CisJcFR4V0ktPlNUQkM9IFRyYW5zbWl0LmZpZWxkLlNUQkM7CisKKwlwVHhXSS0+TUNTID0gVHJhbnNtaXQuZmllbGQuTUNTOworCXBUeFdJLT5QSFlNT0RFPSBUcmFuc21pdC5maWVsZC5NT0RFOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8KKwkvLyBNTVBTIGlzIDgwMi4xMW4gZmVhdHVyZXMuIEJlY2F1c2UgVHhXSS0+TUNTID4gNyBtdXN0IGJlIEhUIG1vZGUsCisJLy8gc28gbmVlZCBub3QgY2hlY2sgaWYgaXQncyBIVCByYXRlLgorCS8vCisJaWYgKChNSU1PcHMgPT0gTU1QU19TVEFUSUMpICYmIChwVHhXSS0+TUNTID4gNykpCisJCXBUeFdJLT5NQ1MgPSA3OworCisJaWYgKChNSU1PcHMgPT0gTU1QU19EWU5BTUlDKSAmJiAocFR4V0ktPk1DUyA+IDcpKSAvLyBTTVBTIHByb3RlY3QgMiBzcGF0aWFsLgorCQlwVHhXSS0+TUlNT3BzID0gMTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCXBUeFdJLT5DRkFDSyA9IENmQWNrOworCisJcmV0dXJuOworfQorI2VuZGlmIC8vIFJUMjg3MCAvLworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCURpc2FibGUgcHJvdGVjdGlvbiBmb3IgQVRFLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQVRFRGlzYWJsZUFzaWNQcm90ZWN0KAorCUlOCQlQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlQUk9UX0NGR19TVFJVQwlQcm90Q2ZnLCBQcm90Q2ZnNDsKKwlVSU5UMzIgUHJvdGVjdFs2XTsKKwlVU0hPUlQJCQlvZmZzZXQ7CisJVUNIQVIJCQlpOworCVVJTlQzMiBNYWNSZWcgPSAwOworCisJLy8gQ29uZmlnIEFTSUMgUlRTIHRocmVzaG9sZCByZWdpc3RlcgorCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfUlRTX0NGRywgJk1hY1JlZyk7CisJTWFjUmVnICY9IDB4RkYwMDAwRkY7CisJTWFjUmVnIHw9IChwQWQtPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQgPDwgOCk7CisJUlRNUF9JT19XUklURTMyKHBBZCwgVFhfUlRTX0NGRywgTWFjUmVnKTsKKworCS8vIEluaXRpYWwgY29tbW9uIHByb3RlY3Rpb24gc2V0dGluZ3MKKwlSVE1QWmVyb01lbW9yeShQcm90ZWN0LCBzaXplb2YoUHJvdGVjdCkpOworCVByb3RDZmc0LndvcmQgPSAwOworCVByb3RDZmcud29yZCA9IDA7CisJUHJvdENmZy5maWVsZC5UeG9wQWxsb3dHRjQwID0gMTsKKwlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd0dGMjAgPSAxOworCVByb3RDZmcuZmllbGQuVHhvcEFsbG93TU00MCA9IDE7CisJUHJvdENmZy5maWVsZC5UeG9wQWxsb3dNTTIwID0gMTsKKwlQcm90Q2ZnLmZpZWxkLlR4b3BBbGxvd09mZG0gPSAxOworCVByb3RDZmcuZmllbGQuVHhvcEFsbG93Q2NrID0gMTsKKwlQcm90Q2ZnLmZpZWxkLlJUU1RoRW4gPSAxOworCVByb3RDZmcuZmllbGQuUHJvdGVjdE5hdiA9IEFTSUNfU0hPUlROQVY7CisKKwkvLyBIYW5kbGUgbGVnYWN5KEIvRykgcHJvdGVjdGlvbgorCVByb3RDZmcuZmllbGQuUHJvdGVjdFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5SdHNSYXRlOworCVByb3RDZmcuZmllbGQuUHJvdGVjdEN0cmwgPSAwOworCVByb3RlY3RbMF0gPSBQcm90Q2ZnLndvcmQ7CisJUHJvdGVjdFsxXSA9IFByb3RDZmcud29yZDsKKworCS8vIE5PIFBST1RFQ1QKKwkvLyAxLkFsbCBTVEFzIGluIHRoZSBCU1MgYXJlIDIwLzQwIE1IeiBIVAorCS8vIDIuIGluIGFpIDIwLzQwTUh6IEJTUworCS8vIDMuIGFsbCBTVEFzIGFyZSAyME1IeiBpbiBhIDIwTUh6IEJTUworCS8vIFB1cmUgSFQuIG5vIHByb3RlY3Rpb24uCisKKwkvLyBNTTIwX1BST1RfQ0ZHCisJLy8JUmVzZXJ2ZWQgKDMxOjI3KQorCS8vIAlQUk9UX1RYT1AoMjU6MjApIC0tIDAxMDExMQorCS8vCVBST1RfTkFWKDE5OjE4KSAgLS0gMDEgKFNob3J0IE5BViBwcm90ZWN0aW9uKQorCS8vICBQUk9UX0NUUkwoMTc6MTYpIC0tIDAwIChOb25lKQorCS8vIAlQUk9UX1JBVEUoMTU6MCkgIC0tIDB4NDAwNCAoT0ZETSAyNE0pCisJUHJvdGVjdFsyXSA9IDB4MDE3NDQwMDQ7CisKKwkvLyBNTTQwX1BST1RfQ0ZHCisJLy8JUmVzZXJ2ZWQgKDMxOjI3KQorCS8vIAlQUk9UX1RYT1AoMjU6MjApIC0tIDExMTExMQorCS8vCVBST1RfTkFWKDE5OjE4KSAgLS0gMDEgKFNob3J0IE5BViBwcm90ZWN0aW9uKQorCS8vICBQUk9UX0NUUkwoMTc6MTYpIC0tIDAwIChOb25lKQorCS8vIAlQUk9UX1JBVEUoMTU6MCkgIC0tIDB4NDA4NCAoZHVwbGljYXRlIE9GRE0gMjRNKQorCVByb3RlY3RbM10gPSAweDAzZjQ0MDg0OworCisJLy8gQ0YyMF9QUk9UX0NGRworCS8vCVJlc2VydmVkICgzMToyNykKKwkvLyAJUFJPVF9UWE9QKDI1OjIwKSAtLSAwMTAxMTEKKwkvLwlQUk9UX05BVigxOToxOCkgIC0tIDAxIChTaG9ydCBOQVYgcHJvdGVjdGlvbikKKwkvLyAgUFJPVF9DVFJMKDE3OjE2KSAtLSAwMCAoTm9uZSkKKwkvLyAJUFJPVF9SQVRFKDE1OjApICAtLSAweDQwMDQgKE9GRE0gMjRNKQorCVByb3RlY3RbNF0gPSAweDAxNzQ0MDA0OworCisJLy8gQ0Y0MF9QUk9UX0NGRworCS8vCVJlc2VydmVkICgzMToyNykKKwkvLyAJUFJPVF9UWE9QKDI1OjIwKSAtLSAxMTExMTEKKwkvLwlQUk9UX05BVigxOToxOCkgIC0tIDAxIChTaG9ydCBOQVYgcHJvdGVjdGlvbikKKwkvLyAgUFJPVF9DVFJMKDE3OjE2KSAtLSAwMCAoTm9uZSkKKwkvLyAJUFJPVF9SQVRFKDE1OjApICAtLSAweDQwODQgKGR1cGxpY2F0ZSBPRkRNIDI0TSkKKwlQcm90ZWN0WzVdID0gMHgwM2Y0NDA4NDsKKworCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYlJUU0xvbmdQcm90T24gPSBGQUxTRTsKKworCW9mZnNldCA9IENDS19QUk9UX0NGRzsKKwlmb3IgKGkgPSAwO2kgPCA2O2krKykKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgb2Zmc2V0ICsgaSo0LCBQcm90ZWN0W2ldKTsKKworfQorCisjaWZkZWYgUlQyODcwCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCVJvdXRpbmUJRGVzY3JpcHRpb246CisJCVdyaXRlIFR4SW5mbyBmb3IgQVRFIG1vZGUuCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgVk9JRCBBVEVXcml0ZVR4SW5mbygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVFhJTkZPX1NUUlVDIAlwVHhJbmZvLAorCUlOCVVTSE9SVAkJVVNCRE1BcGt0TGVuLAorCUlOCUJPT0xFQU4JCWJXaXYsCisJSU4JVUNIQVIJCQlRdWV1ZVNlbCwKKwlJTglVQ0hBUgkJCU5leHRWYWxpZCwKKwlJTglVQ0hBUgkJCVR4QnVyc3QpCit7CisJcFR4SW5mby0+VVNCRE1BVHhQa3RMZW4gPSBVU0JETUFwa3RMZW47CisJcFR4SW5mby0+UVNFTCA9IFF1ZXVlU2VsOworCisJaWYgKFF1ZXVlU2VsICE9IEZJRk9fRURDQSkKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT09PT4gUXVldWVTZWwgIT0gRklGT19FRENBPD09PT09PT1cbiIpKTsKKworCXBUeEluZm8tPlVTQkRNQU5leHRWTEQgPSBOZXh0VmFsaWQ7CisJcFR4SW5mby0+VVNCRE1BVHhidXJzdCA9IFR4QnVyc3Q7CisJcFR4SW5mby0+V0lWID0gYldpdjsKKwlwVHhJbmZvLT5Td1VzZUxhc3RSb3VuZCA9IDA7CisJcFR4SW5mby0+cnN2ID0gMDsKKwlwVHhJbmZvLT5yc3YyID0gMDsKKworCXJldHVybjsKK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworLyogVGhlcmUgYXJlIHR3byB3YXlzIHRvIGNvbnZlcnQgUnNzaSAqLworI2lmIDEKKy8vCisvLyBUaGUgd2F5IHVzZWQgd2l0aCBHRVRfTE5BX0dBSU4oKS4KKy8vCitDSEFSIEFURUNvbnZlcnRUb1Jzc2koCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JQ0hBUglSc3NpLAorCUlOICBVQ0hBUiAgIFJzc2lOdW1iZXIpCit7CisJVUNIQVIJUnNzaU9mZnNldCwgTE5BR2FpbjsKKworCS8vIFJzc2kgZXF1YWxzIHRvIHplcm8gc2hvdWxkIGJlIGFuIGludmFsaWQgdmFsdWUKKwlpZiAoUnNzaSA9PSAwKQorCQlyZXR1cm4gLTk5OworCisJTE5BR2FpbiA9IEdFVF9MTkFfR0FJTihwQWQpOworCWlmIChwQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPiAxNCkKKwl7CisJCWlmIChSc3NpTnVtYmVyID09IDApCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5BUnNzaU9mZnNldDA7CisJCWVsc2UgaWYgKFJzc2lOdW1iZXIgPT0gMSkKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkFSc3NpT2Zmc2V0MTsKKwkJZWxzZQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QVJzc2lPZmZzZXQyOworCX0KKwllbHNlCisJeworCQlpZiAoUnNzaU51bWJlciA9PSAwKQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QkdSc3NpT2Zmc2V0MDsKKwkJZWxzZSBpZiAoUnNzaU51bWJlciA9PSAxKQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QkdSc3NpT2Zmc2V0MTsKKwkJZWxzZQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QkdSc3NpT2Zmc2V0MjsKKwl9CisKKwlyZXR1cm4gKC0xMiAtIFJzc2lPZmZzZXQgLSBMTkFHYWluIC0gUnNzaSk7Cit9CisjZWxzZQorLy8KKy8vIFRoZSB3YXkgb3JpZ2luYWxseSB1c2VkIGluIEFURSBvZiBydDI4NjBhcC4KKy8vCitDSEFSIEFURUNvbnZlcnRUb1Jzc2koCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JQ0hBUgkJCVJzc2ksCisJSU4gIFVDSEFSICAgUnNzaU51bWJlcikKK3sKKwlVQ0hBUglSc3NpT2Zmc2V0LCBMTkFHYWluOworCisJLy8gUnNzaSBlcXVhbHMgdG8gemVybyBzaG91bGQgYmUgYW4gaW52YWxpZCB2YWx1ZQorCWlmIChSc3NpID09IDApCisJCXJldHVybiAtOTk7CisKKyAgICBpZiAocEFkLT5MYXRjaFJmUmVncy5DaGFubmVsID4gMTQpCisgICAgeworICAgICAgICBMTkFHYWluID0gcEFkLT5BTE5BR2FpbjsKKyAgICAgICAgaWYgKFJzc2lOdW1iZXIgPT0gMCkKKwkJCVJzc2lPZmZzZXQgPSBwQWQtPkFSc3NpT2Zmc2V0MDsKKwkJZWxzZSBpZiAoUnNzaU51bWJlciA9PSAxKQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QVJzc2lPZmZzZXQxOworCQllbHNlCisJCQlSc3NpT2Zmc2V0ID0gcEFkLT5BUnNzaU9mZnNldDI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIExOQUdhaW4gPSBwQWQtPkJMTkFHYWluOworICAgICAgICBpZiAoUnNzaU51bWJlciA9PSAwKQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QkdSc3NpT2Zmc2V0MDsKKwkJZWxzZSBpZiAoUnNzaU51bWJlciA9PSAxKQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QkdSc3NpT2Zmc2V0MTsKKwkJZWxzZQorCQkJUnNzaU9mZnNldCA9IHBBZC0+QkdSc3NpT2Zmc2V0MjsKKyAgICB9CisKKyAgICByZXR1cm4gKC0zMiAtIFJzc2lPZmZzZXQgKyBMTkFHYWluIC0gUnNzaSk7Cit9CisjZW5kaWYgLyogZW5kIG9mICNpZiAxICovCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlTZXQgSmFwYW4gZmlsdGVyIGNvZWZmaWNpZW50cyBpZiBuZWVkZWQuCisJTm90ZToKKwkJVGhpcyByb3V0aW5lIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuCisJCWVudGVyaW5nIFRYRlJBTUUgbW9kZSBvciBUWENPTlQgbW9kZS4KKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBWT0lEIFNldEphcGFuRmlsdGVyKAorCUlOCQlQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVQ0hBUgkJCUJicERhdGEgPSAwOworCisJLy8KKwkvLyBJZiBDaGFubmVsPTE0IGFuZCBCYW5kd2lkdGg9MjBNIGFuZCBNb2RlPUNDSywgc2V0IEJCUCBSNCBiaXQ1PTEKKwkvLyAoSmFwYW4gVHggZmlsdGVyIGNvZWZmaWNpZW50cyl3aGVuIChUWEZSQU1FIG9yIFRYQ09OVCkuCisJLy8KKwlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJicERhdGEpOworCisgICAgaWYgKChwQWQtPmF0ZS5UeFdJLlBIWU1PREUgPT0gTU9ERV9DQ0spICYmIChwQWQtPmF0ZS5DaGFubmVsID09IDE0KSAmJiAocEFkLT5hdGUuVHhXSS5CVyA9PSBCV18yMCkpCisgICAgeworICAgICAgICBCYnBEYXRhIHw9IDB4MjA7ICAgIC8vIHR1cm4gb24KKyAgICAgICAgQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0SmFwYW5GaWx0ZXIhISFcbiIpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKwkJQmJwRGF0YSAmPSAweGRmOyAgICAvLyB0dXJuIG9mZgorCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDbGVhckphcGFuRmlsdGVyISEhXG4iKSk7CisgICAgfQorCisJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCYnBEYXRhKTsKK30KKworVk9JRCBBVEVTYW1wbGVSc3NpKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFBSWFdJX1NUUlVDCQlwUnhXSSkKK3sKKwkvKiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gY29sbGVjdCBSU1NJLiAqLworI2lmIDEKKwkvL3BBZC0+TGFzdFJ4UmF0ZSA9IChVU0hPUlQpKChwUnhXSS0+TUNTKSArIChwUnhXSS0+QlcgPDw3KSArIChwUnhXSS0+U2hvcnRHSSA8PDgpKyAocFJ4V0ktPlBIWU1PREUgPDwxNCkpIDsKKwlpZiAocFJ4V0ktPlJTU0kwICE9IDApCisJeworCQlwQWQtPmF0ZS5MYXN0UnNzaTAJPSBBVEVDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpIHBSeFdJLT5SU1NJMCwgUlNTSV8wKTsKKwkJcEFkLT5hdGUuQXZnUnNzaTBYOAk9IChwQWQtPmF0ZS5BdmdSc3NpMFg4IC0gcEFkLT5hdGUuQXZnUnNzaTApICsgcEFkLT5hdGUuTGFzdFJzc2kwOworCQlwQWQtPmF0ZS5BdmdSc3NpMCAgCT0gcEFkLT5hdGUuQXZnUnNzaTBYOCA+PiAzOworCX0KKwlpZiAocFJ4V0ktPlJTU0kxICE9IDApCisJeworCQlwQWQtPmF0ZS5MYXN0UnNzaTEJPSBBVEVDb252ZXJ0VG9Sc3NpKHBBZCwgKENIQVIpIHBSeFdJLT5SU1NJMSwgUlNTSV8xKTsKKwkJcEFkLT5hdGUuQXZnUnNzaTFYOAk9IChwQWQtPmF0ZS5BdmdSc3NpMVg4IC0gcEFkLT5hdGUuQXZnUnNzaTEpICsgcEFkLT5hdGUuTGFzdFJzc2kxOworCQlwQWQtPmF0ZS5BdmdSc3NpMQk9IHBBZC0+YXRlLkF2Z1Jzc2kxWDggPj4gMzsKKwl9CisJaWYgKHBSeFdJLT5SU1NJMiAhPSAwKQorCXsKKwkJcEFkLT5hdGUuTGFzdFJzc2kyCT0gQVRFQ29udmVydFRvUnNzaShwQWQsIChDSEFSKSBwUnhXSS0+UlNTSTIsIFJTU0lfMik7CisJCXBBZC0+YXRlLkF2Z1Jzc2kyWDgJPSAocEFkLT5hdGUuQXZnUnNzaTJYOCAtIHBBZC0+YXRlLkF2Z1Jzc2kyKSArIHBBZC0+YXRlLkxhc3RSc3NpMjsKKwkJcEFkLT5hdGUuQXZnUnNzaTIJPSBwQWQtPmF0ZS5BdmdSc3NpMlg4ID4+IDM7CisJfQorCisJcEFkLT5hdGUuTGFzdFNOUjAgPSAoQ0hBUikocFJ4V0ktPlNOUjApOy8vIENIQVIgPT0+IFVDSEFSID8KKwlwQWQtPmF0ZS5MYXN0U05SMSA9IChDSEFSKShwUnhXSS0+U05SMSk7Ly8gQ0hBUiA9PT4gVUNIQVIgPworCisJcEFkLT5hdGUuTnVtT2ZBdmdSc3NpU2FtcGxlICsrOworI2Vsc2UKKwlwQWQtPmF0ZS5MYXN0U05SMCA9IChDSEFSKShwUnhXSS0+U05SMCk7CisJcEFkLT5hdGUuTGFzdFNOUjEgPSAoQ0hBUikocFJ4V0ktPlNOUjEpOworCXBBZC0+YXRlLlJ4Q250UGVyU2VjKys7CisJcEFkLT5hdGUuTGFzdFJzc2kwID0gQVRFQ29udmVydFRvUnNzaShwQWQsIChDSEFSKSBwUnhXSS0+UlNTSTAsIFJTU0lfMCk7CisJcEFkLT5hdGUuTGFzdFJzc2kxID0gQVRFQ29udmVydFRvUnNzaShwQWQsIChDSEFSKSBwUnhXSS0+UlNTSTEsIFJTU0lfMSk7CisJcEFkLT5hdGUuTGFzdFJzc2kyID0gQVRFQ29udmVydFRvUnNzaShwQWQsIChDSEFSKSBwUnhXSS0+UlNTSTIsIFJTU0lfMik7CisJcEFkLT5hdGUuQXZnUnNzaTBYOCA9IChwQWQtPmF0ZS5BdmdSc3NpMFg4IC0gcEFkLT5hdGUuQXZnUnNzaTApICsgcEFkLT5hdGUuTGFzdFJzc2kwOworCXBBZC0+YXRlLkF2Z1Jzc2kwID0gcEFkLT5hdGUuQXZnUnNzaTBYOCA+PiAzOworCXBBZC0+YXRlLkF2Z1Jzc2kxWDggPSAocEFkLT5hdGUuQXZnUnNzaTFYOCAtIHBBZC0+YXRlLkF2Z1Jzc2kxKSArIHBBZC0+YXRlLkxhc3RSc3NpMTsKKwlwQWQtPmF0ZS5BdmdSc3NpMSA9IHBBZC0+YXRlLkF2Z1Jzc2kxWDggPj4gMzsKKwlwQWQtPmF0ZS5BdmdSc3NpMlg4ID0gKHBBZC0+YXRlLkF2Z1Jzc2kyWDggLSBwQWQtPmF0ZS5BdmdSc3NpMikgKyBwQWQtPmF0ZS5MYXN0UnNzaTI7CisJcEFkLT5hdGUuQXZnUnNzaTIgPSBwQWQtPmF0ZS5BdmdSc3NpMlg4ID4+IDM7CisJcEFkLT5hdGUuTnVtT2ZBdmdSc3NpU2FtcGxlICsrOworI2VuZGlmCit9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK1ZPSUQgUlRNUFN0YXRpb25TdG9wKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkKQoreworLy8JQk9PTEVBTiAgICAgICBDYW5jZWxsZWQ7CisKKyAgICBBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gUlRNUFN0YXRpb25TdG9wXG4iKSk7CisKKwkvLyBGb3Igcnggc3RhdGlzdGljcywgd2UgbmVlZCB0byBrZWVwIHRoaXMgdGltZXIgcnVubmluZy4KKy8vCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lLlBlcmlvZGljVGltZXIsICAgICAgJkNhbmNlbGxlZCk7CisKKyAgICBBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT0gUlRNUFN0YXRpb25TdG9wXG4iKSk7Cit9CisKK1ZPSUQgUlRNUFN0YXRpb25TdGFydCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCkKK3sKKyAgICBBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT4gUlRNUFN0YXRpb25TdGFydFxuIikpOworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PSBSVE1QU3RhdGlvblN0YXJ0XG4iKSk7Cit9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJU2V0dXAgRnJhbWUgZm9ybWF0LgorCU5PVEU6CisJCVRoaXMgcm91dGluZSBzaG91bGQgb25seSBiZSB1c2VkIGluIEFURSBtb2RlLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2lmZGVmIFJUMjg3MAorLyo9PT09PT09PT09PT09PT09PT09PT09U3RhcnQgb2YgUlQyODcwPT09PT09PT09PT09PT09PT09PT09PSovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworc3RhdGljIElOVCBBVEVTZXRVcEZyYW1lKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVJTlQzMiBUeElkeCkKK3sKKwlVSU5UIGo7CisJUFRYX0NPTlRFWFQJcE51bGxDb250ZXh0OworCVBVQ0hBUgkJCXBEZXN0OworCUhUVFJBTlNNSVRfU0VUVElORwlUeEhUUGh5TW9kZTsKKwlQVFhXSV9TVFJVQwkJcFR4V0k7CisJUFRYSU5GT19TVFJVQwkJcFR4SW5mbzsKKwlVSU5UMzIJCQlUcmFuc2ZlckJ1ZmZlckxlbmd0aCwgT3JnQnVmZmVyTGVuZ3RoID0gMDsKKwlVQ0hBUgkJCXBhZExlbiA9IDA7CisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwlQSEVBREVSXzgwMl8xMQlwSGVhZGVyODAyMTEgPSBOVUxMOworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisKKwlpZiAoKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUykpIHx8CisJCShSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCkpIHx8CisJCShSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpIHx8CisJCShSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCXsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFdlIGFsd2F5cyB1c2UgUUlEX0FDX0JFIGFuZCBGSUZPX0VEQ0EgaW4gQVRFIG1vZGUuICovCisKKwlwTnVsbENvbnRleHQgPSAmKHBBZC0+TnVsbENvbnRleHQpOworCUFTU0VSVChwTnVsbENvbnRleHQgIT0gTlVMTCk7CisKKwlpZiAocE51bGxDb250ZXh0LT5JblVzZSA9PSBGQUxTRSkKKwl7CisJCS8vIFNldCB0aGUgaW4gdXNlIGJpdAorCQlwTnVsbENvbnRleHQtPkluVXNlID0gVFJVRTsKKwkJTmRpc1plcm9NZW1vcnkoJihwQWQtPk51bGxGcmFtZSksIHNpemVvZihIRUFERVJfODAyXzExKSk7CisKKwkJLy8gRmlsbCA4MDIuMTEgaGVhZGVyLgorI2lmZGVmIFJBTElOS18yOHh4X1FBCisJCWlmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpCisJCXsKKwkJCXBIZWFkZXI4MDIxMSA9IE5kaXNNb3ZlTWVtb3J5KCYocEFkLT5OdWxsRnJhbWUpLCBwQWQtPmF0ZS5IZWFkZXIsIHBBZC0+YXRlLkhMZW4pOworLy8JCQlwRGVzdCA9IE5kaXNNb3ZlTWVtb3J5KCYocEFkLT5OdWxsRnJhbWUpLCBwQWQtPmF0ZS5IZWFkZXIsIHBBZC0+YXRlLkhMZW4pOworLy8JCQlwSGVhZGVyODAyMTEgPSAoUEhFQURFUl84MDJfMTEpcERlc3Q7CisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJCXsKKwkJCS8vIEZpbGwgODAyLjExIGhlYWRlci4KKwkJCU5kaXNNb3ZlTWVtb3J5KCYocEFkLT5OdWxsRnJhbWUpLCBUZW1wbGF0ZUZyYW1lLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCQl9CisjaWZkZWYgUlRfQklHX0VORElBTgorCQlSVE1QRnJhbWVFbmRpYW5DaGFuZ2UocEFkLCAoUFVDSEFSKSYocEFkLT5OdWxsRnJhbWUpLCBESVJfUkVBRCwgRkFMU0UpOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJCWlmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpCisJCXsKKwkJCS8qIG1vZGlmeSBzZXF1ZW5jZSBudW1iZXIuLi4uICovCisJCQlpZiAocEFkLT5hdGUuVHhEb25lQ291bnQgPT0gMCkKKwkJCXsKKwkJCQlwQWQtPmF0ZS5zZXEgPSBwSGVhZGVyODAyMTEtPlNlcXVlbmNlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXBIZWFkZXI4MDIxMS0+U2VxdWVuY2UgPSArK3BBZC0+YXRlLnNlcTsKKwkJCX0KKwkJCS8qIFdlIGFscmVhZHkgZ290IGFsbCB0aGUgYWRkci4gZmllbGRzIGZyb20gUUEgR1VJLiAqLworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworCQl7CisJCQlDT1BZX01BQ19BRERSKHBBZC0+TnVsbEZyYW1lLkFkZHIxLCBwQWQtPmF0ZS5BZGRyMSk7CisJCQlDT1BZX01BQ19BRERSKHBBZC0+TnVsbEZyYW1lLkFkZHIyLCBwQWQtPmF0ZS5BZGRyMik7CisJCQlDT1BZX01BQ19BRERSKHBBZC0+TnVsbEZyYW1lLkFkZHIzLCBwQWQtPmF0ZS5BZGRyMyk7CisJCX0KKworCQlSVE1QWmVyb01lbW9yeSgmcEFkLT5OdWxsQ29udGV4dC5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbMF0sIFRYX0JVRkZFUl9OT1JNU0laRSk7Ly8/Pz8KKwkJcFR4SW5mbyA9IChQVFhJTkZPX1NUUlVDKSZwQWQtPk51bGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFswXTsKKworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJCWlmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpCisJCXsKKwkJCS8vIEF2b2lkIHRvIGV4Y2VlZCB0aGUgcmFuZ2Ugb2YgV2lyZWxlc3NQYWNrZXRbXS4KKwkJCUFTU0VSVChwQWQtPmF0ZS5UeEluZm8uVVNCRE1BVHhQa3RMZW4gPD0gKE1BWF9GUkFNRV9TSVpFIC0gMzQvKiA9PSAyMzEyICovKSk7CisJCQlOZGlzTW92ZU1lbW9yeShwVHhJbmZvLCAmKHBBZC0+YXRlLlR4SW5mbyksIHNpemVvZihwQWQtPmF0ZS5UeEluZm8pKTsKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKwkJeworCQkJLy8gQXZvaWQgdG8gZXhjZWVkIHRoZSByYW5nZSBvZiBXaXJlbGVzc1BhY2tldFtdLgorCQkJQVNTRVJUKHBBZC0+YXRlLlR4TGVuZ3RoIDw9IChNQVhfRlJBTUVfU0laRSAtIDM0LyogPT0gMjMxMiAqLykpOworCisJCQkvLyBwVHhJbmZvLT5VU0JETUFUeFBrdExlbiB3aWxsIGJlIHVwZGF0ZWQgdG8gaW5jbHVkZSBwYWRkaW5nIGxhdGVyLgorCQkJQVRFV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAoVVNIT1JUKShUWFdJX1NJWkUgKyBwQWQtPmF0ZS5UeExlbmd0aCksIFRSVUUsIEVwVG9RdWV1ZVtNR01UUElQRUlEWF0sIEZBTFNFLCAgRkFMU0UpOworCQkJcFR4SW5mby0+UVNFTCA9IEZJRk9fRURDQTsKKwkJfQorCisJCXBUeFdJID0gKFBUWFdJX1NUUlVDKSZwQWQtPk51bGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtUWElORk9fU0laRV07CisKKwkJLy8gRmlsbCBUeFdJLgorCQlpZiAocEFkLT5hdGUuYlFBVHhTdGFydCA9PSBUUlVFKQorCQl7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5CVyA9IHBBZC0+YXRlLlR4V0kuQlc7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gcEFkLT5hdGUuVHhXSS5TaG9ydEdJOworCQkJVHhIVFBoeU1vZGUuZmllbGQuU1RCQyA9IHBBZC0+YXRlLlR4V0kuU1RCQzsKKwkJCVR4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBBZC0+YXRlLlR4V0kuTUNTOworCQkJVHhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IHBBZC0+YXRlLlR4V0kuUEhZTU9ERTsKKwkJCUFURVdyaXRlVHhXSShwQWQsIHBUeFdJLCBwQWQtPmF0ZS5UeFdJLkZSQUcsIHBBZC0+YXRlLlR4V0kuVFMsIHBBZC0+YXRlLlR4V0kuQU1QRFUsIHBBZC0+YXRlLlR4V0kuQUNLLCBwQWQtPmF0ZS5UeFdJLk5TRVEsCisJCQkJcEFkLT5hdGUuVHhXSS5CQVdpblNpemUsIEJTU0lEX1dDSUQsIHBBZC0+YXRlLlR4V0kuTVBEVXRvdGFsQnl0ZUNvdW50LyogaW5jbHVkZSA4MDIuMTEgaGVhZGVyICovLCBwQWQtPmF0ZS5UeFdJLlBhY2tldElkLCAwLCBwQWQtPmF0ZS5UeFdJLnR4b3AvKklGU19IVFRYT1AqLywgcEFkLT5hdGUuVHhXSS5DRkFDSy8qRkFMU0UqLywgVHhIVFBoeU1vZGUpOworCQl9CisJCWVsc2UKKwkJeworCQkJVHhIVFBoeU1vZGUuZmllbGQuQlcgPSBwQWQtPmF0ZS5UeFdJLkJXOworCQkJVHhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IHBBZC0+YXRlLlR4V0kuU2hvcnRHSTsKKwkJCVR4SFRQaHlNb2RlLmZpZWxkLlNUQkMgPSAwOworCQkJVHhIVFBoeU1vZGUuZmllbGQuTUNTID0gcEFkLT5hdGUuVHhXSS5NQ1M7CisJCQlUeEhUUGh5TW9kZS5maWVsZC5NT0RFID0gcEFkLT5hdGUuVHhXSS5QSFlNT0RFOworCisJCQlBVEVXcml0ZVR4V0kocEFkLCBwVHhXSSwgIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLyogTm8gYWNrIHJlcXVpcmVkLiAqLywgRkFMU0UsIDAsIEJTU0lEX1dDSUQsIHBBZC0+YXRlLlR4TGVuZ3RoLAorCQkJCTAsIDAsIElGU19IVFRYT1AsIEZBTFNFLCBUeEhUUGh5TW9kZSk7Ly8gIk1NUFNfU1RBVElDIiBpbnN0ZWFkIG9mICJNTVBTX0RZTkFNSUMiID8/PworCQl9CisKKwkJUlRNUE1vdmVNZW1vcnkoJnBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W1RYSU5GT19TSVpFK1RYV0lfU0laRV0sICZwQWQtPk51bGxGcmFtZSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKworCQlwRGVzdCA9ICYocEFkLT5OdWxsQ29udGV4dC5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbVFhJTkZPX1NJWkUrVFhXSV9TSVpFK3NpemVvZihIRUFERVJfODAyXzExKV0pOworCisJCS8vIFByZXBhcmUgZnJhbWUgcGF5bG9hZAorI2lmZGVmIFJBTElOS18yOHh4X1FBCisJCWlmIChwQWQtPmF0ZS5iUUFUeFN0YXJ0ID09IFRSVUUpCisJCXsKKwkJCS8vIGNvcHkgcGF0dGVybgorCQkJaWYgKChwQWQtPmF0ZS5QTGVuICE9IDApKQorCQkJeworCQkJCWZvciAoaiA9IDA7IGogPCBwQWQtPmF0ZS5ETGVuOyBqKz1wQWQtPmF0ZS5QTGVuKQorCQkJCXsKKwkJCQkJUlRNUE1vdmVNZW1vcnkocERlc3QsIHBBZC0+YXRlLlBhdHRlcm4sIHBBZC0+YXRlLlBMZW4pOworCQkJCQlwRGVzdCArPSBwQWQtPmF0ZS5QTGVuOworCQkJCX0KKwkJCX0KKwkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoID0gVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyBwQWQtPmF0ZS5UeFdJLk1QRFV0b3RhbEJ5dGVDb3VudDsKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKwkJeworCQkgICAgZm9yIChqID0gMDsgaiA8IChwQWQtPmF0ZS5UeExlbmd0aCAtIHNpemVvZihIRUFERVJfODAyXzExKSk7IGorKykKKwkJICAgIHsKKwkJCQkqcERlc3QgPSAweEE1OworCQkJCXBEZXN0ICs9IDE7CisJCSAgICB9CisJCQlUcmFuc2ZlckJ1ZmZlckxlbmd0aCA9IFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgcEFkLT5hdGUuVHhMZW5ndGg7CisJCX0KKworI2lmIDEKKwkJT3JnQnVmZmVyTGVuZ3RoID0gVHJhbnNmZXJCdWZmZXJMZW5ndGg7CisJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoID0gKFRyYW5zZmVyQnVmZmVyTGVuZ3RoICsgMykgJiAofjMpOworCisJCS8vIEFsd2F5cyBhZGQgNCBleHRyYSBieXRlcyBhdCBldmVyeSBwYWNrZXQuCisJCXBhZExlbiA9IFRyYW5zZmVyQnVmZmVyTGVuZ3RoIC0gT3JnQnVmZmVyTGVuZ3RoICsgNDsvKiA0ID09IGxhc3QgcGFja2V0IHBhZGRpbmcgKi8KKwkJQVNTRVJUKChwYWRMZW4gPD0gKFJUTVBfUEtUX1RBSUxfUEFERElORyAtIDQvKiA0ID09IE1heEJ1bGtPdXRzaXplIGFsaWdubWVudCBwYWRkaW5nICovKSkpOworCisJCS8qIE5vdyBtZW16ZXJvIGFsbCBleHRyYSBwYWRkaW5nIGJ5dGVzLiAqLworCQlOZGlzWmVyb01lbW9yeShwRGVzdCwgcGFkTGVuKTsKKwkJcERlc3QgKz0gcGFkTGVuOworI2Vsc2UKKwkJaWYgKChUcmFuc2ZlckJ1ZmZlckxlbmd0aCAlIDQpID09IDEpCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBEZXN0LCA3KTsKKwkJCXBEZXN0ICs9IDc7CisJCQlUcmFuc2ZlckJ1ZmZlckxlbmd0aCAgKz0gMzsKKwkJfQorCQllbHNlIGlmICgoVHJhbnNmZXJCdWZmZXJMZW5ndGggJSA0KSA9PSAyKQorCQl7CisJCQlOZGlzWmVyb01lbW9yeShwRGVzdCwgNik7CisJCQlwRGVzdCArPSA2OworCQkJVHJhbnNmZXJCdWZmZXJMZW5ndGggICs9IDI7CisJCX0KKwkJZWxzZSBpZiAoKFRyYW5zZmVyQnVmZmVyTGVuZ3RoICUgNCkgPT0gMykKKwkJeworCQkJTmRpc1plcm9NZW1vcnkocERlc3QsIDUpOworCQkJcERlc3QgKz0gNTsKKwkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoICArPSAxOworCQl9CisjZW5kaWYgLy8gMSAvLworCisJCS8vIFVwZGF0ZSBwVHhJbmZvLT5VU0JETUFUeFBrdExlbiB0byBpbmNsdWRlIHBhZGRpbmcuCisJCXBUeEluZm8tPlVTQkRNQVR4UGt0TGVuID0gVHJhbnNmZXJCdWZmZXJMZW5ndGggLSBUWElORk9fU0laRTsKKworCQlUcmFuc2ZlckJ1ZmZlckxlbmd0aCArPSA0OworCisJCS8vIElmIFRyYW5zZmVyQnVmZmVyTGVuZ3RoIGlzIG11bHRpcGxlIG9mIDY0LCBhZGQgZXh0cmEgNCBieXRlcyBhZ2Fpbi4KKwkJaWYgKChUcmFuc2ZlckJ1ZmZlckxlbmd0aCAlIHBBZC0+QnVsa091dE1heFBhY2tldFNpemUpID09IDApCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBEZXN0LCA0KTsKKwkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoICs9IDQ7CisJCX0KKworCQkvLyBGaWxsIG91dCBmcmFtZSBsZW5ndGggaW5mb3JtYXRpb24gZm9yIGdsb2JhbCBCdWxrIG91dCBhcmJpdG9yCisJCXBBZC0+TnVsbENvbnRleHQuQnVsa091dFNpemUgPSBUcmFuc2ZlckJ1ZmZlckxlbmd0aDsKKwl9CisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBXSUVuZGlhbkNoYW5nZSgoUFVDSEFSKXBUeFdJLCBUWVBFX1RYV0kpOworCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsICgoKFBVQ0hBUilwVHhJbmZvKStUWFdJX1NJWkUrVFhJTkZPX1NJWkUpLCBESVJfV1JJVEUsIEZBTFNFKTsKKyAgICBSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKXBUeEluZm8sIFRZUEVfVFhJTkZPKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisJcmV0dXJuIDA7Cit9CisKK1ZPSUQgQVRFX1JUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZShwdXJiYl90IHBVcmIsIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzKQoreworCVBSVE1QX0FEQVBURVIJCXBBZDsKKwlQVFhfQ09OVEVYVAkJICAgIHBOdWxsQ29udGV4dDsKKwlVQ0hBUgkJCQlCdWxrT3V0UGlwZUlkOworCU5UU1RBVFVTCQkJU3RhdHVzOworCXVuc2lnbmVkIGxvbmcJCUlycUZsYWdzOworCVVMT05HCQkJICAgIE9sZFZhbHVlOworCisJcE51bGxDb250ZXh0ID0gKFBUWF9DT05URVhUKXBVcmItPmNvbnRleHQ7CisJcEFkID0gcE51bGxDb250ZXh0LT5wQWQ7CisKKworCS8vIFJlc2V0IE51bGwgZnJhbWUgY29udGV4dCBmbGFncworCXBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyA9IEZBTFNFOworCXBOdWxsQ29udGV4dC0+SW5Vc2UgPSBGQUxTRTsKKwlTdGF0dXMgPSBwVXJiLT5zdGF0dXM7CisKKwkvLyBTdG9yZSBCdWxrT3V0IFBpcGVJZAorCUJ1bGtPdXRQaXBlSWQgPSBwTnVsbENvbnRleHQtPkJ1bGtPdXRQaXBlSWQ7CisJcEFkLT5CdWxrT3V0RGF0YU9uZVNlY0NvdW50Kys7CisKKwlpZiAoU3RhdHVzID09IFVTQl9TVF9OT0VSUk9SKQorCXsKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorCQlpZiAoKEFURV9PTihwQWQpKSAmJiAocEFkLT5hdGUuYlFBVHhTdGFydCA9PSBUUlVFKSkKKwkJeworCQkJaWYgKHBBZC0+YXRlLlFJRCA9PSBCdWxrT3V0UGlwZUlkKQorCQkJeworCQkJCS8vIExldCBSeCBjYW4gaGF2ZSBhIGNoYW5jZSB0byBicmVhayBpbiBkdXJpbmcgVHggcHJvY2VzcywKKwkJCQkvLyBlc3BlY2lhbGx5IGZvciBsb29wYmFjayBtb2RlIGluIFFBIEFURS4KKwkJCQkvLyBUbyB0cmFkZSBvZmYgYmV0d2VlbiB0eCBwZXJmb3JtYW5jZSBhbmQgbG9vcGJhY2sgbW9kZSBpbnRlZ3JpdHkuCisJCQkJLyogUSAgIDogTm93IFJ4IGlzIGhhbmRsZWQgYnkgdGFza2xldCwgZG8gd2Ugc3RpbGwgbmVlZCB0aGlzIGRlbGF5ID8gKi8KKwkJCQkvKiBBbnMgOiBFdmVuIHRhc2tsZXQgaXMgdXNlZCwgUngvVHggPCAxIGlmIHdlIGRvIG5vdCBkZWxheSBmb3IgYSB3aGlsZSByaWdodCBoZXJlLiAqLworCQkJCVJUTVB1c2VjRGVsYXkoNTAwKTsKKwkJCQlwQWQtPmF0ZS5UeERvbmVDb3VudCsrOworCQkJCXBBZC0+UmFsaW5rQ291bnRlcnMuS2lja1R4Q291bnQrKzsKKwkJCQlBU1NFUlQocEFkLT5hdGUuUUlEID09IDApOworCQkJCXBBZC0+YXRlLlR4QWMwKys7CisJCQl9CisJCX0KKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworCQlwQWQtPkJ1bGtPdXRDb21wbGV0ZSsrOworCisJCXBBZC0+Q291bnRlcnM4MDIzLkdvb2RUcmFuc21pdHMrKzsKKworCQkvKiBEb24ndCB3b3JyeSBhYm91dCB0aGUgcXVldWUgaXMgZW1wdHkgb3Igbm90LiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgaXRzZWxmLiAqLworCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIFRSVUUsIEJ1bGtPdXRQaXBlSWQsIE1BWF9UWF9QUk9DRVNTKTsKKworCQkvKiBJbiAyOHh4LCBTZW5kVHhXYWl0UXVldWUgPT0+IFR4U3dRdWV1ZSAgKi8KKy8qCisJCWlmIChwQWQtPlNlbmRUeFdhaXRRdWV1ZVtCdWxrT3V0UGlwZUlkXS5OdW1iZXIgPiAwKQorCQl7CisJCQlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEJ1bGtPdXRQaXBlSWQpOworCQl9CisqLworCX0KKwllbHNlCS8vIFNUQVRVU19PVEhFUgorCXsKKwkJcEFkLT5CdWxrT3V0Q29tcGxldGVPdGhlcisrOworCisJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkJ1bGtPdXREYXRhUGFja2V0IEZhaWxlZCBTVEFUVVNfT1RIRVIgPSAweCV4IC4gXG4iLCBTdGF0dXMpKTsKKwkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiPj5CdWxrT3V0UmVxPTB4JWx4LCBCdWxrT3V0Q29tcGxldGU9MHglbHhcbiIsIHBBZC0+QnVsa091dFJlcSwgcEFkLT5CdWxrT3V0Q29tcGxldGUpKTsKKworCQlpZiAoKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpICYmCisJCQkoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkgJiYKKwkJCSghUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JVTEtPVVRfUkVTRVQpKSkKKwkJeworCQkJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVCk7CisJCQkvKiBJbiAyOHh4LCBSVF9PSURfVVNCX1JFU0VUX0JVTEtfT1VUID09PiBDTURUSFJFQURfUkVTRVRfQlVMS19PVVQgKi8KKwkJCVJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgQ01EVEhSRUFEX1JFU0VUX0JVTEtfT1VULCBOVUxMLCAwKTsKKwkJCS8vIENoZWNrCisJCQlCVUxLX09VVF9MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisJCQlwQWQtPkJ1bGtPdXRQZW5kaW5nW0J1bGtPdXRQaXBlSWRdID0gRkFMU0U7CisJCQlwQWQtPmJ1bGtSZXNldFBpcGVpZCA9IEJ1bGtPdXRQaXBlSWQ7CisJCQlCVUxLX09VVF9VTkxPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCisKKwlpZiAoYXRvbWljX3JlYWQoJnBBZC0+QnVsa091dFJlbWFpbmVkKSA+IDApCisJeworCQlhdG9taWNfZGVjKCZwQWQtPkJ1bGtPdXRSZW1haW5lZCk7CisJfQorCisJLy8gMXN0IC0gVHJhbnNtaXQgU3VjY2VzcworCU9sZFZhbHVlID0gcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LnUuTG93UGFydDsKKwlwQWQtPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQudS5Mb3dQYXJ0Kys7CisKKwlpZiAocEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LnUuTG93UGFydCA8IE9sZFZhbHVlKQorCXsKKwkJcEFkLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LnUuSGlnaFBhcnQrKzsKKwl9CisKKwlpZigoKHBBZC0+Q29udGluQnVsa091dCA9PSBUUlVFICkgfHwoYXRvbWljX3JlYWQoJnBBZC0+QnVsa091dFJlbWFpbmVkKSA+IDApKSAmJiAocEFkLT5hdGUuTW9kZSAmIEFURV9UWEZSQU1FKSkKKwl7CisJCVJUVVNCX1NFVF9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9BVEUpOworCX0KKwllbHNlCisJeworCQlSVFVTQl9DTEVBUl9CVUxLX0ZMQUcocEFkLCBmUlRVU0JfQlVMS19PVVRfREFUQV9BVEUpOworI2lmZGVmIFJBTElOS18yOHh4X1FBCisJCXBBZC0+YXRlLlR4U3RhdHVzID0gMDsKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworCX0KKworCUJVTEtfT1VUX0xPQ0soJnBBZC0+QnVsa091dExvY2tbQnVsa091dFBpcGVJZF0sIElycUZsYWdzKTsKKwlwQWQtPkJ1bGtPdXRQZW5kaW5nW0J1bGtPdXRQaXBlSWRdID0gRkFMU0U7CisJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisKKwkvLyBBbHdheXMgY2FsbCBCdWxrIHJvdXRpbmUsIGV2ZW4gcmVzZXQgYnVsay4KKwkvLyBUaGUgcHJvdGVjdGlvbiBvZiByZXN0IGJ1bGsgc2hvdWxkIGJlIGluIEJ1bGtPdXQgcm91dGluZS4KKwlSVFVTQktpY2tCdWxrT3V0KHBBZCk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQVRFX1JUVVNCQnVsa091dERhdGFQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlCdWxrT3V0UGlwZUlkKQoreworCVBUWF9DT05URVhUCQlwTnVsbENvbnRleHQgPSAmKHBBZC0+TnVsbENvbnRleHQpOworCVBVUkIJCQlwVXJiOworCWludAkJCQlyZXQgPSAwOworCXVuc2lnbmVkIGxvbmcJSXJxRmxhZ3M7CisKKworCUFTU0VSVChCdWxrT3V0UGlwZUlkID09IDApOworCisJLyogQnVpbGQgdXAgdGhlIGZyYW1lIGZpcnN0LiAqLworLy8JQVRFU2V0VXBGcmFtZShwQWQsIDApOworCisJQlVMS19PVVRfTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCisJaWYgKHBBZC0+QnVsa091dFBlbmRpbmdbQnVsa091dFBpcGVJZF0gPT0gVFJVRSkKKwl7CisJCUJVTEtfT1VUX1VOTE9DSygmcEFkLT5CdWxrT3V0TG9ja1tCdWxrT3V0UGlwZUlkXSwgSXJxRmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJcEFkLT5CdWxrT3V0UGVuZGluZ1tCdWxrT3V0UGlwZUlkXSA9IFRSVUU7CisJQlVMS19PVVRfVU5MT0NLKCZwQWQtPkJ1bGtPdXRMb2NrW0J1bGtPdXRQaXBlSWRdLCBJcnFGbGFncyk7CisKKwkvLyBJbmNyZWFzZSBUb3RhbCB0cmFuc21pdCBieXRlIGNvdW50ZXIKKwlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1RyYW5zbWl0dGVkQnl0ZUNvdW50ICs9ICBwTnVsbENvbnRleHQtPkJ1bGtPdXRTaXplOworCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRCeXRlQ291bnQgKz0gIHBOdWxsQ29udGV4dC0+QnVsa091dFNpemU7CisKKwkvLyBDbGVhciBBVEUgZnJhbWUgYnVsayBvdXQgZmxhZworCVJUVVNCX0NMRUFSX0JVTEtfRkxBRyhwQWQsIGZSVFVTQl9CVUxLX09VVF9EQVRBX0FURSk7CisKKwkvLyBJbml0IFR4IGNvbnRleHQgZGVzY3JpcHRvcgorCXBOdWxsQ29udGV4dC0+SVJQUGVuZGluZyA9IFRSVUU7CisJUlRVU0JJbml0VHhEZXNjKHBBZCwgcE51bGxDb250ZXh0LCBCdWxrT3V0UGlwZUlkLCAodXNiX2NvbXBsZXRlX3QpQVRFX1JUVVNCQnVsa091dERhdGFQYWNrZXRDb21wbGV0ZSk7CisJcFVyYiA9IHBOdWxsQ29udGV4dC0+cFVyYjsKKworCWlmKChyZXQgPSBSVFVTQl9TVUJNSVRfVVJCKHBVcmIpKSE9MCkKKwl7CisJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkFURV9SVFVTQkJ1bGtPdXREYXRhUGFja2V0OiBTdWJtaXQgVHggVVJCIGZhaWxlZCAlZFxuIiwgcmV0KSk7CisJCXJldHVybjsKKwl9CisKKwlwQWQtPkJ1bGtPdXRSZXErKzsKKwlyZXR1cm47CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBVEVfUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVBSWF9DT05URVhUCQlwUnhDb250ZXh0OworCVVJTlQJCQlpOworCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tPkFURV9SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlBcbiIpKTsKKyNpZiAxCisJZm9yICggaSA9IDA7IGkgPCAoUlhfUklOR19TSVpFKTsgaSsrKQorCXsKKwkJcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCQlpZihwUnhDb250ZXh0LT5JUlBQZW5kaW5nID09IFRSVUUpCisJCXsKKwkJCVJUVVNCX1VOTElOS19VUkIocFJ4Q29udGV4dC0+cFVyYik7CisJCQlwUnhDb250ZXh0LT5JUlBQZW5kaW5nID0gRkFMU0U7CisJCQlwUnhDb250ZXh0LT5JblVzZSA9IEZBTFNFOworCQkJLy9OZGlzSW50ZXJsb2NrZWREZWNyZW1lbnQoJnBBZC0+UGVuZGluZ1J4KTsKKwkJCS8vcEFkLT5QZW5kaW5nUngtLTsKKwkJfQorCX0KKyNlbHNlCisJZm9yICggaSA9IDA7IGkgPCAoUlhfUklOR19TSVpFKTsgaSsrKQorCXsKKwkJcFJ4Q29udGV4dCA9ICYocEFkLT5SeENvbnRleHRbaV0pOworCQlpZihhdG9taWNfcmVhZCgmcFJ4Q29udGV4dC0+SXJwTG9jaykgPT0gSVJQTE9DS19DQU5DRUxBQkxFKQorCQl7CisJCQlSVFVTQl9VTkxJTktfVVJCKHBSeENvbnRleHQtPnBVcmIpOworCQl9CisJCUludGVybG9ja2VkRXhjaGFuZ2UoJnBSeENvbnRleHQtPklycExvY2ssIElSUExPQ0tfQ0FOQ0VfU1RBUlQpOworCX0KKyNlbmRpZiAvLyAxIC8vCisJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPC0tLUFURV9SVFVTQkNhbmNlbFBlbmRpbmdCdWxrSW5JUlBcbiIpKTsKKwlyZXR1cm47Cit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisKK1ZPSUQgcnRfZWVfcmVhZF9hbGwoUFJUTVBfQURBUFRFUiBwQWQsIFVTSE9SVCAqRGF0YSkKK3sKKwlVU0hPUlQgaTsKKwlVU0hPUlQgdmFsdWU7CisKKwlmb3IgKGkgPSAwIDsgaSA8IEVFUFJPTV9TSVpFLzIgOyApCisJeworCQkvKiAidmFsdWUiIGlzIGV4cGVjaWFsbHkgZm9yIHNvbWUgY29tcGlsZXJzLi4uICovCisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgaSoyLCB2YWx1ZSk7CisJCURhdGFbaV0gPSB2YWx1ZTsKKwkJaSsrOworCX0KK30KKworVk9JRCBydF9lZV93cml0ZV9hbGwoUFJUTVBfQURBUFRFUiBwQWQsIFVTSE9SVCAqRGF0YSkKK3sKKwlVU0hPUlQgaTsKKwlVU0hPUlQgdmFsdWU7CisKKwlmb3IgKGkgPSAwIDsgaSA8IEVFUFJPTV9TSVpFLzIgOyApCisJeworCQkvKiAidmFsdWUiIGlzIGV4cGVjaWFsbHkgZm9yIHNvbWUgY29tcGlsZXJzLi4uICovCisJCXZhbHVlID0gRGF0YVtpXTsKKwkJUlQyOHh4X0VFUFJPTV9XUklURTE2KHBBZCwgaSoyLCB2YWx1ZSk7CisJCWkgKys7CisJfQorfQorI2lmZGVmIFJBTElOS18yOHh4X1FBCitWT0lEIEFURV9RQV9TdGF0aXN0aWNzKAorCUlOIFBSVE1QX0FEQVBURVIJCQlwQWQsCisJSU4gUFJYV0lfU1RSVUMJCQkJcFJ4V0ksCisJSU4gUFJUMjhYWF9SWERfU1RSVUMJCXBSeEQsCisJSU4gUEhFQURFUl84MDJfMTEJCQlwSGVhZGVyKQoreworCS8vIHVwZGF0ZSBjb3VudGVyIGZpcnN0CisJaWYgKHBIZWFkZXIgIT0gTlVMTCkKKwl7CisJCWlmIChwSGVhZGVyLT5GQy5UeXBlID09IEJUWVBFX0RBVEEpCisJCXsKKwkJCWlmIChwUnhELT5VMk0pCisJCQkJcEFkLT5hdGUuVTJNKys7CisJCQllbHNlCisJCQkJcEFkLT5hdGUuT3RoZXJEYXRhKys7CisJCX0KKwkJZWxzZSBpZiAocEhlYWRlci0+RkMuVHlwZSA9PSBCVFlQRV9NR01UKQorCQl7CisJCQlpZiAocEhlYWRlci0+RkMuU3ViVHlwZSA9PSBTVUJUWVBFX0JFQUNPTikKKwkJCQlwQWQtPmF0ZS5CZWFjb24rKzsKKwkJCWVsc2UKKwkJCQlwQWQtPmF0ZS5PdGhlckNvdW50Kys7CisJCX0KKwkJZWxzZSBpZiAocEhlYWRlci0+RkMuVHlwZSA9PSBCVFlQRV9DTlRMKQorCQl7CisJCQlwQWQtPmF0ZS5PdGhlckNvdW50Kys7CisJCX0KKwl9CisJcEFkLT5hdGUuUlNTSTAgPSBwUnhXSS0+UlNTSTA7CisJcEFkLT5hdGUuUlNTSTEgPSBwUnhXSS0+UlNTSTE7CisJcEFkLT5hdGUuUlNTSTIgPSBwUnhXSS0+UlNTSTI7CisJcEFkLT5hdGUuU05SMCA9IHBSeFdJLT5TTlIwOworCXBBZC0+YXRlLlNOUjEgPSBwUnhXSS0+U05SMTsKK30KKworLyogY29tbWFuZCBpZCB3aXRoIENtZCBUeXBlID09IDB4MDAwOChmb3IgMjh4eCkvMHgwMDA1KGZvciBpTklDKSAqLworI2RlZmluZSBSQUNGR19DTURfUkZfV1JJVEVfQUxMCQkweDAwMDAKKyNkZWZpbmUgUkFDRkdfQ01EX0UyUFJPTV9SRUFEMTYJCTB4MDAwMQorI2RlZmluZSBSQUNGR19DTURfRTJQUk9NX1dSSVRFMTYJMHgwMDAyCisjZGVmaW5lIFJBQ0ZHX0NNRF9FMlBST01fUkVBRF9BTEwJMHgwMDAzCisjZGVmaW5lIFJBQ0ZHX0NNRF9FMlBST01fV1JJVEVfQUxMCTB4MDAwNAorI2RlZmluZSBSQUNGR19DTURfSU9fUkVBRAkJCTB4MDAwNQorI2RlZmluZSBSQUNGR19DTURfSU9fV1JJVEUJCQkweDAwMDYKKyNkZWZpbmUgUkFDRkdfQ01EX0lPX1JFQURfQlVMSwkJMHgwMDA3CisjZGVmaW5lIFJBQ0ZHX0NNRF9CQlBfUkVBRDgJCQkweDAwMDgKKyNkZWZpbmUgUkFDRkdfQ01EX0JCUF9XUklURTgJCTB4MDAwOQorI2RlZmluZSBSQUNGR19DTURfQkJQX1JFQURfQUxMCQkweDAwMGEKKyNkZWZpbmUgUkFDRkdfQ01EX0dFVF9DT1VOVEVSCQkweDAwMGIKKyNkZWZpbmUgUkFDRkdfQ01EX0NMRUFSX0NPVU5URVIJCTB4MDAwYworCisjZGVmaW5lIFJBQ0ZHX0NNRF9SU1YxCQkJCTB4MDAwZAorI2RlZmluZSBSQUNGR19DTURfUlNWMgkJCQkweDAwMGUKKyNkZWZpbmUgUkFDRkdfQ01EX1JTVjMJCQkJMHgwMDBmCisKKyNkZWZpbmUgUkFDRkdfQ01EX1RYX1NUQVJUCQkJMHgwMDEwCisjZGVmaW5lIFJBQ0ZHX0NNRF9HRVRfVFhfU1RBVFVTCQkweDAwMTEKKyNkZWZpbmUgUkFDRkdfQ01EX1RYX1NUT1AJCQkweDAwMTIKKyNkZWZpbmUgUkFDRkdfQ01EX1JYX1NUQVJUCQkJMHgwMDEzCisjZGVmaW5lIFJBQ0ZHX0NNRF9SWF9TVE9QCQkJMHgwMDE0CisjZGVmaW5lIFJBQ0ZHX0NNRF9HRVRfTk9JU0VfTEVWRUwJMHgwMDE1CisKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TVEFSVAkJCTB4MDA4MAorI2RlZmluZSBSQUNGR19DTURfQVRFX1NUT1AJCQkweDAwODEKKworI2RlZmluZSBSQUNGR19DTURfQVRFX1NUQVJUX1RYX0NBUlJJRVIJCTB4MDEwMAorI2RlZmluZSBSQUNGR19DTURfQVRFX1NUQVJUX1RYX0NPTlQJCQkweDAxMDEKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9GUkFNRQkJMHgwMTAyCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU0VUX0JXCSAgICAgICAgICAgIDB4MDEwMworI2RlZmluZSBSQUNGR19DTURfQVRFX1NFVF9UWF9QT1dFUjAJICAgICAgICAweDAxMDQKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfVFhfUE9XRVIxCQkJMHgwMTA1CisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU0VUX0ZSRVFfT0ZGU0VUCQkweDAxMDYKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9HRVRfU1RBVElTVElDUwkJMHgwMTA3CisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfUkVTRVRfQ09VTlRFUgkJCTB4MDEwOAorI2RlZmluZSBSQUNGR19DTURfQVRFX1NFTF9UWF9BTlRFTk5BCQkweDAxMDkKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRUxfUlhfQU5URU5OQQkJMHgwMTBhCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU0VUX1BSRUFNQkxFCQkJMHgwMTBiCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU0VUX0NIQU5ORUwJCQkweDAxMGMKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfQUREUjEJCQkJMHgwMTBkCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIyCQkJCTB4MDEwZQorI2RlZmluZSBSQUNGR19DTURfQVRFX1NFVF9BRERSMwkJCQkweDAxMGYKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfUkFURQkJCQkweDAxMTAKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfVFhfRlJBTUVfTEVOCQkweDAxMTEKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9TRVRfVFhfRlJBTUVfQ09VTlQJMHgwMTEyCisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfU1RBUlRfUlhfRlJBTUUJCTB4MDExMworI2RlZmluZSBSQUNGR19DTURfQVRFX0UyUFJPTV9SRUFEX0JVTEsJMHgwMTE0CisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfRTJQUk9NX1dSSVRFX0JVTEsJMHgwMTE1CisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfSU9fV1JJVEVfQlVMSwkJMHgwMTE2CisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfQkJQX1JFQURfQlVMSwkJMHgwMTE3CisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfQkJQX1dSSVRFX0JVTEsJMHgwMTE4CisjZGVmaW5lIFJBQ0ZHX0NNRF9BVEVfUkZfUkVBRF9CVUxLCQkweDAxMTkKKyNkZWZpbmUgUkFDRkdfQ01EX0FURV9SRl9XUklURV9CVUxLCQkweDAxMWEKKworCisKKyNkZWZpbmUgQTJIZXgoX1gsIF9wKSAJCQkJXAorewkJCQkJCQkJCVwKKwlVQ0hBUiAqcDsJCQkJCQlcCisJX1ggPSAwOwkJCQkJCQlcCisJcCA9IF9wOwkJCQkJCQlcCisJd2hpbGUgKCgoKnAgPj0gJ2EnKSAmJiAoKnAgPD0gJ2YnKSkgfHwgKCgqcCA+PSAnQScpICYmICgqcCA8PSAnRicpKSB8fCAoKCpwID49ICcwJykgJiYgKCpwIDw9ICc5JykpKQkJXAorCXsJCQkJCQkJCQkJCQlcCisJCWlmICgoKnAgPj0gJ2EnKSAmJiAoKnAgPD0gJ2YnKSkJCQkJXAorCQkJX1ggPSBfWCAqIDE2ICsgKnAgLSA4NzsJCQkJCVwKKwkJZWxzZSBpZiAoKCpwID49ICdBJykgJiYgKCpwIDw9ICdGJykpCQlcCisJCQlfWCA9IF9YICogMTYgKyAqcCAtIDU1OwkJCQkJXAorCQllbHNlIGlmICgoKnAgPj0gJzAnKSAmJiAoKnAgPD0gJzknKSkJCVwKKwkJCV9YID0gX1ggKiAxNiArICpwIC0gNDg7CQkJCQlcCisJCXArKzsJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQlcCit9CisKKworc3RhdGljIFZPSUQgbWVtY3B5X2V4bChQUlRNUF9BREFQVEVSIHBBZCwgVUNIQVIgKmRzdCwgVUNIQVIgKnNyYywgVUxPTkcgbGVuKTsKK3N0YXRpYyBWT0lEIG1lbWNweV9leHMoUFJUTVBfQURBUFRFUiBwQWQsIFVDSEFSICpkc3QsIFVDSEFSICpzcmMsIFVMT05HIGxlbik7CitzdGF0aWMgVk9JRCBSVE1QX0lPX1JFQURfQlVMSyhQUlRNUF9BREFQVEVSIHBBZCwgVUNIQVIgKmRzdCwgVUNIQVIgKnNyYywgVUlOVDMyIGxlbik7CisKKyNpZmRlZiBVQ09TCitpbnQgYXRlX2NvcHlfdG9fdXNlcigKKwlJTiBQVUNIQVIgcGF5bG9hZCwKKwlJTiBQVUNIQVIgbXNnLAorCUlOIElOVCAgICBsZW4pCit7CisJbWVtbW92ZShwYXlsb2FkLCBtc2csIGxlbik7CisJcmV0dXJuIDA7Cit9CisKKyN1bmRlZgljb3B5X3RvX3VzZXIKKyNkZWZpbmUgY29weV90b191c2VyKHgseSx6KSBhdGVfY29weV90b191c2VyKChQVUNIQVIpeCwgKFBVQ0hBUil5LCB6KQorI2VuZGlmIC8vIFVDT1MgLy8KKworI2RlZmluZQlMRU5fT0ZfQVJHIDE2CisKK1ZPSUQgUnRtcERvQXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4Jc3RydWN0IGl3cmVxCSp3cnEpCit7CisJdW5zaWduZWQgc2hvcnQgQ29tbWFuZF9JZDsKKwlzdHJ1Y3QgYXRlX3JhY2ZnaGRyICpwUmFDZmc7CisJSU5UCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisKKworCisJaWYoKHBSYUNmZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdGVfcmFjZmdoZHIpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKKwl7CisJCVN0YXR1cyA9IC1FSU5WQUw7CisJCXJldHVybjsKKwl9CisKKwlOZGlzWmVyb01lbW9yeShwUmFDZmcsIHNpemVvZihzdHJ1Y3QgYXRlX3JhY2ZnaGRyKSk7CisKKyAgICBpZiAoY29weV9mcm9tX3VzZXIoKFBVQ0hBUilwUmFDZmcsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisJeworCQlTdGF0dXMgPSAtRUZBVUxUOworCQlrZnJlZShwUmFDZmcpOworCQlyZXR1cm47CisJfQorCisKKwlDb21tYW5kX0lkID0gbnRvaHMocFJhQ2ZnLT5jb21tYW5kX2lkKTsKKworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiXG4lczogQ29tbWFuZF9JZCA9IDB4JTA0eCAhXG4iLCBfX0ZVTkNUSU9OX18sIENvbW1hbmRfSWQpKTsKKworCXN3aXRjaCAoQ29tbWFuZF9JZCkKKwl7CisgCQkvLyBXZSB3aWxsIGdldCB0aGlzIGNvbW1hbmQgd2hlbiBRQSBzdGFydHMuCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TVEFSVDoKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU1RBUlRcbiIpKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sgYXMgc29vbiBhcyB3ZSBjYW4gdG8gYXZvaWQgUUEgdGltZW91dC4KKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJ3cnEtPnUuZGF0YS5sZW5ndGggPSAlZFxuIiwgd3JxLT51LmRhdGEubGVuZ3RoKSk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NUQVJUXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU1RBUlQgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJCVNldF9BVEVfUHJvYyhwQWRhcHRlciwgIkFURVNUQVJUIik7CisJCQl9CisJCQlicmVhazsKKworIAkJLy8gV2Ugd2lsbCBnZXQgdGhpcyBjb21tYW5kIGVpdGhlciBRQSBpcyBjbG9zZWQgb3IgYXRlZCBpcyBraWxsZWQgYnkgdXNlci4KKwkJY2FzZSBSQUNGR19DTURfQVRFX1NUT1A6CisJCQl7CisjaWZuZGVmIFVDT1MKKwkJCQlJTlQzMiByZXQ7CisjZW5kaWYgLy8gIVVDT1MgLy8KKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TVE9QXG4iKSk7CisKKwkJCQkvLyBEaXN0aW5ndWlzaCB0aGlzIGNvbW1hbmQgY2FtZSBmcm9tIFFBKHZpYSBhdGVkKQorCQkJCS8vIG9yIGF0ZSBkYWVtb24gYWNjb3JkaW5nIHRvIHRoZSBleGlzdGVuY2Ugb2YgcGlkIGluIHBheWxvYWQuCisJCQkJLy8gTm8gbmVlZCB0byBwcmVwYXJlIGZlZWRiYWNrIGlmIHRoaXMgY21kIGNhbWUgZGlyZWN0bHkgZnJvbSBhdGUgZGFlbW9uLgorCQkJCXBSYUNmZy0+bGVuZ3RoID0gbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisJCQkJaWYgKHBSYUNmZy0+bGVuZ3RoID09IHNpemVvZihwQWRhcHRlci0+YXRlLkF0ZVBpZCkpCisJCQkJeworCQkJCQkvLyBUaGlzIGNvbW1hbmQgY2FtZSBmcm9tIFFBLgorCQkJCQkvLyBHZXQgdGhlIHBpZCBvZiBBVEUgZGFlbW9uLgorCQkJCQltZW1jcHkoKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuQXRlUGlkLAorCQkJCQkJKCZwUmFDZmctPmRhdGFbMF0pIC0gMi8qID09ICYocFJhQ2ZnLT5zdGF0dXMpICovLAorCQkJCQkJc2l6ZW9mKHBBZGFwdGVyLT5hdGUuQXRlUGlkKSk7CisKKwkJCQkJLy8gcHJlcGFyZSBmZWVkYmFjayBhcyBzb29uIGFzIHdlIGNhbiB0byBhdm9pZCBRQSB0aW1lb3V0LgorCQkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCisJCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIndycS0+dS5kYXRhLmxlbmd0aCA9ICVkXG4iLCB3cnEtPnUuZGF0YS5sZW5ndGgpKTsKKworCSAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKwkgICAgICAgICAgICAJeworCSAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU1RPUFxuIikpOworCSAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKwkgICAgICAgICAgICAJfQorCisJCQkJCS8vCisJCQkJCS8vIGtpbGwgQVRFIGRhZW1vbiB3aGVuIGxlYXZpbmcgQVRFIG1vZGUuCisJCQkJCS8vIFdlIG11c3Qga2lsbCBBVEUgZGFlbW9uIGZpcnN0IGJlZm9yZSBzZXR0aW5nIEFURVNUT1AsCisJCQkJCS8vIG9yIE1pY3Jvc29mdCB3aWxsIHJlcG9ydCBzdGguIHdyb25nLgorI2lmbmRlZiBVQ09TCisJCQkJCXJldCA9IGtpbGxfcHJvYyhwQWRhcHRlci0+YXRlLkF0ZVBpZCwgU0lHVEVSTSwgMSk7CisJCQkJCWlmIChyZXQpCisJCQkJCXsKKwkJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzOiB1bmFibGUgdG8gc2lnbmFsIHRocmVhZFxuIiwgcEFkYXB0ZXItPm5ldF9kZXYtPm5hbWUpKTsKKwkJCQkJfQorI2VuZGlmIC8vICFVQ09TIC8vCisJCQkJfQorCisjaWZkZWYgVUNPUworCQkJCS8vIFJvZ2VyIGFkZCB0byBhdm9pZCBlcnJvciBtZXNzYWdlIGFmdGVyIGNsb3NlIFFBCisJCQkJaWYgKHBBZGFwdGVyLT5DU1JCYXNlQWRkcmVzcyA9PSBSVDI4NjBfQ1NSX0FERFIpCisJCQkJeworCisJCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sgYXMgc29vbiBhcyB3ZSBjYW4gdG8gYXZvaWQgUUEgdGltZW91dC4KKwkJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKworCQkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJ3cnEtPnUuZGF0YS5sZW5ndGggPSAlZFxuIiwgd3JxLT51LmRhdGEubGVuZ3RoKSk7CisJICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorCSAgICAgICAgICAgIAl7CisJICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FQX1NUQVJUXG4iKSk7CisJICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworCSAgICAgICAgICAgIAl9CisJCQkJfQorI2VuZGlmIC8vIFVDT1MgLy8KKworCQkJCS8vIEFQIG1pZ2h0IGhhdmUgaW4gQVRFX1NUT1AgbW9kZSBkdWUgdG8gY21kIGZyb20gUUEuCisJCQkJaWYgKEFURV9PTihwQWRhcHRlcikpCisJCQkJeworCQkJCQkvLyBTb21lb25lIGhhcyBraWxsZWQgYXRlIGRhZW1vbiB3aGlsZSBRQSBHVUkgaXMgc3RpbGwgb3Blbi4KKwkJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiQVRFU1RPUCIpOworCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVBfU1RBUlQgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfUkZfV1JJVEVfQUxMOgorCQkJeworCQkJCVVJTlQzMiBSMSwgUjIsIFIzLCBSNDsKKwkJCQlVU0hPUlQgY2hhbm5lbDsKKworCQkJCW1lbWNweSgmUjEsIHBSYUNmZy0+ZGF0YS0yLCA0KTsKKwkJCQltZW1jcHkoJlIyLCBwUmFDZmctPmRhdGErMiwgNCk7CisJCQkJbWVtY3B5KCZSMywgcFJhQ2ZnLT5kYXRhKzYsIDQpOworCQkJCW1lbWNweSgmUjQsIHBSYUNmZy0+ZGF0YSsxMCwgNCk7CisJCQkJbWVtY3B5KCZjaGFubmVsLCBwUmFDZmctPmRhdGErMTQsIDIpOworCisJCQkJcEFkYXB0ZXItPkxhdGNoUmZSZWdzLlIxID0gbnRvaGwoUjEpOworCQkJCXBBZGFwdGVyLT5MYXRjaFJmUmVncy5SMiA9IG50b2hsKFIyKTsKKwkJCQlwQWRhcHRlci0+TGF0Y2hSZlJlZ3MuUjMgPSBudG9obChSMyk7CisJCQkJcEFkYXB0ZXItPkxhdGNoUmZSZWdzLlI0ID0gbnRvaGwoUjQpOworCQkJCXBBZGFwdGVyLT5MYXRjaFJmUmVncy5DaGFubmVsID0gbnRvaHMoY2hhbm5lbCk7CisKKwkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkYXB0ZXIsIHBBZGFwdGVyLT5MYXRjaFJmUmVncy5SMSk7CisJCQkJUlRNUF9SRl9JT19XUklURTMyKHBBZGFwdGVyLCBwQWRhcHRlci0+TGF0Y2hSZlJlZ3MuUjIpOworCQkJCVJUTVBfUkZfSU9fV1JJVEUzMihwQWRhcHRlciwgcEFkYXB0ZXItPkxhdGNoUmZSZWdzLlIzKTsKKwkJCQlSVE1QX1JGX0lPX1dSSVRFMzIocEFkYXB0ZXIsIHBBZGFwdGVyLT5MYXRjaFJmUmVncy5SNCk7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgid3JxLT51LmRhdGEubGVuZ3RoID0gJWRcbiIsIHdycS0+dS5kYXRhLmxlbmd0aCkpOworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9SRl9XUklURV9BTExcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX1JGX1dSSVRFX0FMTCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisgICAgICAgICAgICBicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9FMlBST01fUkVBRDE2OgorCQkJeworCQkJCVVTSE9SVAlvZmZzZXQsIHZhbHVlLCB0bXA7CisKKwkJCQlvZmZzZXQgPSBudG9ocyhwUmFDZmctPnN0YXR1cyk7CisJCQkJLyogInRtcCIgaXMgZXhwZWNpYWxseSBmb3Igc29tZSBjb21waWxlcnMuLi4gKi8KKwkJCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWRhcHRlciwgb2Zmc2V0LCB0bXApOworCQkJCXZhbHVlID0gdG1wOworCQkJCXZhbHVlID0gaHRvbnModmFsdWUpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJFRVBST00gUmVhZCBvZmZzZXQgPSAweCUwNHgsIHZhbHVlID0gMHglMDR4XG4iLCBvZmZzZXQsIHZhbHVlKSk7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucyg0KTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCW1lbWNweShwUmFDZmctPmRhdGEsICZ2YWx1ZSwgMik7CisKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJzaXplb2Yoc3RydWN0IGF0ZV9yYWNmZ2hkcikgPSAlZFxuIiwgc2l6ZW9mKHN0cnVjdCBhdGVfcmFjZmdoZHIpKSk7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgid3JxLT51LmRhdGEubGVuZ3RoID0gJWRcbiIsIHdycS0+dS5kYXRhLmxlbmd0aCkpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0UyUFJPTV9SRUFEMTZcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0UyUFJPTV9SRUFEMTYgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorICAgICAgICAgICAJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfRTJQUk9NX1dSSVRFMTY6CisJCQl7CisJCQkJVVNIT1JUCW9mZnNldCwgdmFsdWU7CisKKwkJCQlvZmZzZXQgPSBudG9ocyhwUmFDZmctPnN0YXR1cyk7CisJCQkJbWVtY3B5KCZ2YWx1ZSwgcFJhQ2ZnLT5kYXRhLCAyKTsKKwkJCQl2YWx1ZSA9IG50b2hzKHZhbHVlKTsKKwkJCQlSVDI4eHhfRUVQUk9NX1dSSVRFMTYocEFkYXB0ZXIsIG9mZnNldCwgdmFsdWUpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfRTJQUk9NX1dSSVRFMTZcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0UyUFJPTV9XUklURTE2IGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0UyUFJPTV9SRUFEX0FMTDoKKwkJCXsKKwkJCQlVU0hPUlQgYnVmZmVyW0VFUFJPTV9TSVpFLzJdOworCisJCQkJcnRfZWVfcmVhZF9hbGwocEFkYXB0ZXIsKFVTSE9SVCAqKWJ1ZmZlcik7CisJCQkJbWVtY3B5X2V4cyhwQWRhcHRlciwgcFJhQ2ZnLT5kYXRhLCAoVUNIQVIgKilidWZmZXIsIEVFUFJPTV9TSVpFKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIrRUVQUk9NX1NJWkUpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0UyUFJPTV9SRUFEX0FMTFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfRTJQUk9NX1JFQURfQUxMIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0UyUFJPTV9XUklURV9BTEw6CisJCQl7CisJCQkJVVNIT1JUIGJ1ZmZlcltFRVBST01fU0laRS8yXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KChVQ0hBUiAqKWJ1ZmZlciwgRUVQUk9NX1NJWkUpOworCQkJCW1lbWNweV9leHMocEFkYXB0ZXIsIChVQ0hBUiAqKWJ1ZmZlciwgKFVDSEFSICopJnBSYUNmZy0+c3RhdHVzLCBFRVBST01fU0laRSk7CisJCQkJcnRfZWVfd3JpdGVfYWxsKHBBZGFwdGVyLChVU0hPUlQgKilidWZmZXIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfRTJQUk9NX1dSSVRFX0FMTFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSQUNGR19DTURfRTJQUk9NX1dSSVRFX0FMTCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0lPX1JFQUQ6CisJCQl7CisJCQkJVUlOVDMyCW9mZnNldDsKKwkJCQlVSU5UMzIJdmFsdWU7CisKKwkJCQltZW1jcHkoJm9mZnNldCwgJnBSYUNmZy0+c3RhdHVzLCA0KTsKKwkJCQlvZmZzZXQgPSBudG9obChvZmZzZXQpOworCisJCQkJLy8gV2UgZG8gbm90IG5lZWQgdGhlIGJhc2UgYWRkcmVzcy4KKwkJCQkvLyBTbyBqdXN0IGV4dHJhY3QgdGhlIG9mZnNldCBvdXQuCisJCQkJb2Zmc2V0ICY9IDB4MDAwMEZGRkY7CisJCQkJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIG9mZnNldCwgJnZhbHVlKTsKKwkJCQl2YWx1ZSA9IGh0b25sKHZhbHVlKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDYpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJbWVtY3B5KHBSYUNmZy0+ZGF0YSwgJnZhbHVlLCA0KTsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9JT19SRUFEXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9JT19SRUFEIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0lPX1dSSVRFOgorCQkJeworCQkJCVVJTlQzMglvZmZzZXQsIHZhbHVlOworCisJCQkJbWVtY3B5KCZvZmZzZXQsIHBSYUNmZy0+ZGF0YS0yLCA0KTsKKwkJCQltZW1jcHkoJnZhbHVlLCBwUmFDZmctPmRhdGErMiwgNCk7CisKKwkJCQlvZmZzZXQgPSBudG9obChvZmZzZXQpOworCisJCQkJLy8gV2UgZG8gbm90IG5lZWQgdGhlIGJhc2UgYWRkcmVzcy4KKwkJCQkvLyBTbyBqdXN0IGV4dHJhY3Qgb3V0IHRoZSBvZmZzZXQuCisJCQkJb2Zmc2V0ICY9IDB4MDAwMEZGRkY7CisJCQkJdmFsdWUgPSBudG9obCh2YWx1ZSk7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfSU9fV1JJVEU6IG9mZnNldCA9ICV4LCB2YWx1ZSA9ICV4XG4iLCBvZmZzZXQsIHZhbHVlKSk7CisJCQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBvZmZzZXQsIHZhbHVlKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0lPX1dSSVRFXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9JT19XUklURSBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9JT19SRUFEX0JVTEs6CisJCQl7CisJCQkJVUlOVDMyCW9mZnNldDsKKwkJCQlVU0hPUlQJbGVuOworCisJCQkJbWVtY3B5KCZvZmZzZXQsICZwUmFDZmctPnN0YXR1cywgNCk7CisJCQkJb2Zmc2V0ID0gbnRvaGwob2Zmc2V0KTsKKworCQkJCS8vIFdlIGRvIG5vdCBuZWVkIHRoZSBiYXNlIGFkZHJlc3MuCisJCQkJLy8gU28ganVzdCBleHRyYWN0IHRoZSBvZmZzZXQuCisJCQkJb2Zmc2V0ICY9IDB4MDAwMEZGRkY7CisJCQkJbWVtY3B5KCZsZW4sIHBSYUNmZy0+ZGF0YSsyLCAyKTsKKwkJCQlsZW4gPSBudG9ocyhsZW4pOworCisJCQkJaWYgKGxlbiA+IDM3MSkKKwkJCQl7CisJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgibGVuIGlzIHRvbyBsYXJnZSwgbWFrZSBpdCBzbWFsbGVyXG4iKSk7CisJCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMSk7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCVJUTVBfSU9fUkVBRF9CVUxLKHBBZGFwdGVyLCBwUmFDZmctPmRhdGEsIChVQ0hBUiAqKW9mZnNldCwgbGVuKjQpOy8vIHVuaXQgaW4gZm91ciBieXRlcworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMitsZW4qNCk7Ly8gdW5pdCBpbiBmb3VyIGJ5dGVzCisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfSU9fUkVBRF9CVUxLXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9JT19SRUFEX0JVTEsgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQkJQX1JFQUQ4OgorCQkJeworCQkJCVVTSE9SVAlvZmZzZXQ7CisJCQkJVUNIQVIJdmFsdWU7CisKKwkJCQl2YWx1ZSA9IDA7CisJCQkJb2Zmc2V0ID0gbnRvaHMocFJhQ2ZnLT5zdGF0dXMpOworCisJCQkJaWYgKEFURV9PTihwQWRhcHRlcikpCisJCQkJeworCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgb2Zmc2V0LCAgJnZhbHVlKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBvZmZzZXQsICAmdmFsdWUpOworCQkJCX0KKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygzKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXBSYUNmZy0+ZGF0YVswXSA9IHZhbHVlOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJCQlAgdmFsdWUgPSAleFxuIiwgdmFsdWUpKTsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9CQlBfUkVBRDhcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0JCUF9SRUFEOCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBSQUNGR19DTURfQkJQX1dSSVRFODoKKwkJCXsKKwkJCQlVU0hPUlQJb2Zmc2V0OworCQkJCVVDSEFSCXZhbHVlOworCisJCQkJb2Zmc2V0ID0gbnRvaHMocFJhQ2ZnLT5zdGF0dXMpOworCQkJCW1lbWNweSgmdmFsdWUsIHBSYUNmZy0+ZGF0YSwgMSk7CisKKwkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQl7CisJCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgb2Zmc2V0LCAgdmFsdWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBvZmZzZXQsICB2YWx1ZSk7CisJCQkJfQorCisJCQkJaWYgKChvZmZzZXQgPT0gQkJQX1IxKSB8fCAob2Zmc2V0ID09IEJCUF9SMykpCisJCQkJeworCQkJCQlTeW5jVHhSeENvbmZpZyhwQWRhcHRlciwgb2Zmc2V0LCB2YWx1ZSk7CisJCQkJfQorCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQkJQX1dSSVRFOFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQkJQX1dSSVRFOCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9CQlBfUkVBRF9BTEw6CisJCQl7CisJCQkJVVNIT1JUIGo7CisKKwkJCQlmb3IgKGogPSAwOyBqIDwgMTM3OyBqKyspCisJCQkJeworCQkJCQlwUmFDZmctPmRhdGFbal0gPSAwOworCisJCQkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJCQl7CisJCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgaiwgICZwUmFDZmctPmRhdGFbal0pOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBqLCAgJnBSYUNmZy0+ZGF0YVtqXSk7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKzEzNyk7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9CQlBfUkVBRF9BTExcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0JCUF9SRUFEX0FMTCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisKKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9FMlBST01fUkVBRF9CVUxLOgorCQl7CisJCQlVU0hPUlQgb2Zmc2V0OworCQkJVVNIT1JUIGxlbjsKKwkJCVVTSE9SVCBidWZmZXJbRUVQUk9NX1NJWkUvMl07CisKKwkJCW9mZnNldCA9IG50b2hzKHBSYUNmZy0+c3RhdHVzKTsKKwkJCW1lbWNweSgmbGVuLCBwUmFDZmctPmRhdGEsIDIpOworCQkJbGVuID0gbnRvaHMobGVuKTsKKworCQkJcnRfZWVfcmVhZF9hbGwocEFkYXB0ZXIsKFVTSE9SVCAqKWJ1ZmZlcik7CisJCQlpZiAob2Zmc2V0ICsgbGVuIDw9IEVFUFJPTV9TSVpFKQorCQkJCW1lbWNweV9leHMocEFkYXB0ZXIsIHBSYUNmZy0+ZGF0YSwgKFVDSEFSICopYnVmZmVyK29mZnNldCwgbGVuKTsKKwkJCWVsc2UKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJleGNlZWQgRUVQUk9NIHNpemVcbiIpKTsKKworCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyK2xlbik7CisJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9FMlBST01fUkVBRF9CVUxLXG4iKSk7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKwkJCWVsc2UKKwkJCXsKKyAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX0UyUFJPTV9SRUFEX0JVTEsgaXMgZG9uZSAhXG4iKSk7CisJCQl9CisKKwkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX0UyUFJPTV9XUklURV9CVUxLOgorCQl7CisJCQlVU0hPUlQgb2Zmc2V0OworCQkJVVNIT1JUIGxlbjsKKwkJCVVTSE9SVCBidWZmZXJbRUVQUk9NX1NJWkUvMl07CisKKwkJCW9mZnNldCA9IG50b2hzKHBSYUNmZy0+c3RhdHVzKTsKKwkJCW1lbWNweSgmbGVuLCBwUmFDZmctPmRhdGEsIDIpOworCQkJbGVuID0gbnRvaHMobGVuKTsKKworCQkJcnRfZWVfcmVhZF9hbGwocEFkYXB0ZXIsKFVTSE9SVCAqKWJ1ZmZlcik7CisJCQltZW1jcHlfZXhzKHBBZGFwdGVyLCAoVUNIQVIgKilidWZmZXIgKyBvZmZzZXQsIChVQ0hBUiAqKXBSYUNmZy0+ZGF0YSArIDIsIGxlbik7CisJCQlydF9lZV93cml0ZV9hbGwocEFkYXB0ZXIsKFVTSE9SVCAqKWJ1ZmZlcik7CisKKwkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX0UyUFJPTV9XUklURV9CVUxLXG4iKSk7CisgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKwkJCWVsc2UKKwkJCXsKKyAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSQUNGR19DTURfQVRFX0UyUFJPTV9XUklURV9CVUxLIGlzIGRvbmUgIVxuIikpOworCQkJfQorCisJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9JT19XUklURV9CVUxLOgorCQl7CisJCQlVSU5UMzIgb2Zmc2V0LCBpLCB2YWx1ZTsKKwkJCVVTSE9SVCBsZW47CisKKwkJCW1lbWNweSgmb2Zmc2V0LCAmcFJhQ2ZnLT5zdGF0dXMsIDQpOworCQkJb2Zmc2V0ID0gbnRvaGwob2Zmc2V0KTsKKwkJCW1lbWNweSgmbGVuLCBwUmFDZmctPmRhdGErMiwgMik7CisJCQlsZW4gPSBudG9ocyhsZW4pOworCisJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpCisJCQl7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgKFVDSEFSICopJnZhbHVlLCBwUmFDZmctPmRhdGErNCtpLCA0KTsKKwkJCQlwcmludGsoIldyaXRlICV4ICV4XG4iLCBvZmZzZXQgKyBpLCB2YWx1ZSk7CisJCQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCAob2Zmc2V0ICtpKSAmIDB4ZmZmZiwgdmFsdWUpOworCQkJfQorCisJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9JT19XUklURV9CVUxLXG4iKSk7CisgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKwkJCWVsc2UKKwkJCXsKKyAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSQUNGR19DTURfQVRFX0lPX1dSSVRFX0JVTEsgaXMgZG9uZSAhXG4iKSk7CisJCQl9CisKKwkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX0JCUF9SRUFEX0JVTEs6CisJCXsKKwkJCVVTSE9SVCBvZmZzZXQ7CisJCQlVU0hPUlQgbGVuOworCQkJVVNIT1JUIGo7CisKKwkJCW9mZnNldCA9IG50b2hzKHBSYUNmZy0+c3RhdHVzKTsKKwkJCW1lbWNweSgmbGVuLCBwUmFDZmctPmRhdGEsIDIpOworCQkJbGVuID0gbnRvaHMobGVuKTsKKworCisJCQlmb3IgKGogPSBvZmZzZXQ7IGogPCAob2Zmc2V0K2xlbik7IGorKykKKwkJCXsKKwkJCQlwUmFDZmctPmRhdGFbaiAtIG9mZnNldF0gPSAwOworCisJCQkJaWYgKHBBZGFwdGVyLT5hdGUuTW9kZSA9PSBBVEVfU1RPUCkKKwkJCQl7CisJCQkJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgaiwgICZwUmFDZmctPmRhdGFbaiAtIG9mZnNldF0pOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgaiwgICZwUmFDZmctPmRhdGFbaiAtIG9mZnNldF0pOworCQkJCX0KKwkJCX0KKworCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyK2xlbik7CisJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfQkJQX1JFQURfQlVMS1xuIikpOworICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICB9CisJCQllbHNlCisJCQl7CisgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9CQlBfUkVBRF9CVUxLIGlzIGRvbmUgIVxuIikpOworCQkJfQorCisJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9CQlBfV1JJVEVfQlVMSzoKKwkJeworCQkJVVNIT1JUIG9mZnNldDsKKwkJCVVTSE9SVCBsZW47CisJCQlVU0hPUlQgajsKKwkJCVVDSEFSICp2YWx1ZTsKKworCQkJb2Zmc2V0ID0gbnRvaHMocFJhQ2ZnLT5zdGF0dXMpOworCQkJbWVtY3B5KCZsZW4sIHBSYUNmZy0+ZGF0YSwgMik7CisJCQlsZW4gPSBudG9ocyhsZW4pOworCisJCQlmb3IgKGogPSBvZmZzZXQ7IGogPCAob2Zmc2V0K2xlbik7IGorKykKKwkJCXsKKwkJCQl2YWx1ZSA9IHBSYUNmZy0+ZGF0YSArIDIgKyAoaiAtIG9mZnNldCk7CisJCQkJaWYgKHBBZGFwdGVyLT5hdGUuTW9kZSA9PSBBVEVfU1RPUCkKKwkJCQl7CisJCQkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGosICAqdmFsdWUpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGosICAqdmFsdWUpOworCQkJCX0KKwkJCX0KKworCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9CQlBfV1JJVEVfQlVMS1xuIikpOworICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICB9CisJCQllbHNlCisJCQl7CisgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9CQlBfV1JJVEVfQlVMSyBpcyBkb25lICFcbiIpKTsKKwkJCX0KKwkJfQorCQkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfUkFMSU5LX1JUMzA1MgorCQljYXNlIFJBQ0ZHX0NNRF9BVEVfUkZfUkVBRF9CVUxLOgorCQl7CisJCQlVU0hPUlQgb2Zmc2V0OworCQkJVVNIT1JUIGxlbjsKKwkJCVVTSE9SVCBqOworCisJCQlvZmZzZXQgPSBudG9ocyhwUmFDZmctPnN0YXR1cyk7CisJCQltZW1jcHkoJmxlbiwgcFJhQ2ZnLT5kYXRhLCAyKTsKKwkJCWxlbiA9IG50b2hzKGxlbik7CisKKwkJCWZvciAoaiA9IG9mZnNldDsgaiA8IChvZmZzZXQrbGVuKTsgaisrKQorCQkJeworCQkJCXBSYUNmZy0+ZGF0YVtqIC0gb2Zmc2V0XSA9IDA7CisJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkYXB0ZXIsIGosICAmcFJhQ2ZnLT5kYXRhW2ogLSBvZmZzZXRdKTsKKwkJCX0KKworCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyK2xlbik7CisJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfUkZfUkVBRF9CVUxLXG4iKSk7CisgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKwkJCWVsc2UKKwkJCXsKKyAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1JGX1JFQURfQlVMSyBpcyBkb25lICFcbiIpKTsKKwkJCX0KKworCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfUkZfV1JJVEVfQlVMSzoKKwkJeworCQkJVVNIT1JUIG9mZnNldDsKKwkJCVVTSE9SVCBsZW47CisJCQlVU0hPUlQgajsKKwkJCVVDSEFSICp2YWx1ZTsKKworCQkJb2Zmc2V0ID0gbnRvaHMocFJhQ2ZnLT5zdGF0dXMpOworCQkJbWVtY3B5KCZsZW4sIHBSYUNmZy0+ZGF0YSwgMik7CisJCQlsZW4gPSBudG9ocyhsZW4pOworCisJCQlmb3IgKGogPSBvZmZzZXQ7IGogPCAob2Zmc2V0K2xlbik7IGorKykKKwkJCXsKKwkJCQl2YWx1ZSA9IHBSYUNmZy0+ZGF0YSArIDIgKyAoaiAtIG9mZnNldCk7CisJCQkJUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKHBBZGFwdGVyLCBqLCAgKnZhbHVlKTsKKwkJCX0KKworCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9SRl9XUklURV9CVUxLXG4iKSk7CisgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKwkJCWVsc2UKKwkJCXsKKyAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1JGX1dSSVRFX0JVTEsgaXMgZG9uZSAhXG4iKSk7CisJCQl9CisKKwkJfQorCQkJYnJlYWs7CisjZW5kaWYKKworCisJCWNhc2UgUkFDRkdfQ01EX0dFVF9OT0lTRV9MRVZFTDoKKwkJCXsKKwkJCQlVQ0hBUgljaGFubmVsOworCQkJCUlOVDMyICAgYnVmZmVyWzNdWzEwXTsvKiAzIDogUnhQYXRoIDsgMTAgOiBuby4gb2YgcGVyIHJzc2kgc2FtcGxlcyAqLworCisJCQkJY2hhbm5lbCA9IChudG9ocyhwUmFDZmctPnN0YXR1cykgJiAweDAwRkYpOworCQkJCUNhbE5vaXNlTGV2ZWwocEFkYXB0ZXIsIGNoYW5uZWwsIGJ1ZmZlcik7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgKFVDSEFSICopcFJhQ2ZnLT5kYXRhLCAoVUNIQVIgKikmKGJ1ZmZlclswXVswXSksIChzaXplb2YoSU5UMzIpKjMqMTApKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIgKyAoc2l6ZW9mKElOVDMyKSozKjEwKSk7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfR0VUX05PSVNFX0xFVkVMXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9HRVRfTk9JU0VfTEVWRUwgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfR0VUX0NPVU5URVI6CisJCQl7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVswXSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuVTJNLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzRdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5PdGhlckRhdGEsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbOF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLkJlYWNvbiwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVsxMl0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLk90aGVyQ291bnQsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbMTZdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5UeEFjMCwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVsyMF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlR4QWMxLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzI0XSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuVHhBYzIsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbMjhdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5UeEFjMywgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVszMl0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlR4SENDQSwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVszNl0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlR4TWdtdCwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs0MF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlJTU0kwLCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzQ0XSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuUlNTSTEsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbNDhdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5SU1NJMiwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs1Ml0sIChVQ0hBUiAqKSZwQWRhcHRlci0+YXRlLlNOUjAsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbNTZdLCAoVUNIQVIgKikmcEFkYXB0ZXItPmF0ZS5TTlIxLCA0KTsKKworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMis2MCk7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfR0VUX0NPVU5URVJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0dFVF9DT1VOVEVSIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0NMRUFSX0NPVU5URVI6CisJCQl7CisJCQkJcEFkYXB0ZXItPmF0ZS5VMk0gPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuT3RoZXJEYXRhID0gMDsKKwkJCQlwQWRhcHRlci0+YXRlLkJlYWNvbiA9IDA7CisJCQkJcEFkYXB0ZXItPmF0ZS5PdGhlckNvdW50ID0gMDsKKwkJCQlwQWRhcHRlci0+YXRlLlR4QWMwID0gMDsKKwkJCQlwQWRhcHRlci0+YXRlLlR4QWMxID0gMDsKKwkJCQlwQWRhcHRlci0+YXRlLlR4QWMyID0gMDsKKwkJCQlwQWRhcHRlci0+YXRlLlR4QWMzID0gMDsKKwkJCQlwQWRhcHRlci0+YXRlLlR4SENDQSA9IDA7CisJCQkJcEFkYXB0ZXItPmF0ZS5UeE1nbXQgPSAwOworCQkJCXBBZGFwdGVyLT5hdGUuVHhEb25lQ291bnQgPSAwOworCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0NMRUFSX0NPVU5URVJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0NMRUFSX0NPVU5URVIgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9UWF9TVEFSVDoKKwkJCXsKKwkJCQlVU0hPUlQgKnA7CisJCQkJVVNIT1JUCWVyciA9IDE7CisJCQkJVUNIQVIgICBCYnAyMlZhbHVlID0gMCwgQmJwMjRWYWx1ZSA9IDA7CisKKwkJCQlpZiAoKHBBZGFwdGVyLT5hdGUuVHhTdGF0dXMgIT0gMCkgJiYgKHBBZGFwdGVyLT5hdGUuTW9kZSAmIEFURV9UWEZSQU1FKSkKKwkJCQl7CisJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQXRlIFR4IGlzIGFscmVhZHkgcnVubmluZywgdG8gcnVuIG5leHQgVHgsIHlvdSBtdXN0IHN0b3AgaXQgZmlyc3RcbiIpKTsKKwkJCQkJZXJyID0gMjsKKwkJCQkJZ290byBUWF9TVEFSVF9FUlJPUjsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKHBBZGFwdGVyLT5hdGUuVHhTdGF0dXMgIT0gMCkgJiYgIShwQWRhcHRlci0+YXRlLk1vZGUgJiBBVEVfVFhGUkFNRSkpCisJCQkJeworCQkJCQlpbnQgaSA9IDA7CisKKwkJCQkJd2hpbGUgKChpKysgPCAxMCkgJiYgKHBBZGFwdGVyLT5hdGUuVHhTdGF0dXMgIT0gMCkpCisJCQkJCXsKKwkJCQkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJCQkJCX0KKworCQkJCQkvLyBmb3JjZSBpdCB0byBzdG9wCisJCQkJCXBBZGFwdGVyLT5hdGUuVHhTdGF0dXMgPSAwOworCQkJCQlwQWRhcHRlci0+YXRlLlR4RG9uZUNvdW50ID0gMDsKKwkJCQkJLy9wQWRhcHRlci0+YXRlLlJlcGVhdCA9IDA7CisJCQkJCXBBZGFwdGVyLT5hdGUuYlFBVHhTdGFydCA9IEZBTFNFOworCQkJCX0KKworCQkJCS8vIElmIHBSYUNmZy0+bGVuZ3RoID09IDAsIHRoaXMgIlJBQ0ZHX0NNRF9UWF9TVEFSVCIgaXMgZm9yIENhcnJpZXIgdGVzdCBvciBDYXJyaWVyIFN1cHByZXNzaW9uLgorCQkJCWlmIChudG9ocyhwUmFDZmctPmxlbmd0aCkgIT0gMCkKKwkJCQl7CisJCQkJCS8vIEdldCBmcmFtZSBpbmZvCisjaWZkZWYgUlQyODcwCisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWRhcHRlci0+YXRlLlR4SW5mbywgcFJhQ2ZnLT5kYXRhIC0gMiwgNCk7CisjaWZkZWYgUlRfQklHX0VORElBTgorCQkJCQlSVE1QRGVzY3JpcHRvckVuZGlhbkNoYW5nZSgoUFVDSEFSKSAmcEFkYXB0ZXItPmF0ZS5UeEluZm8sIFRZUEVfVFhJTkZPKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZGFwdGVyLT5hdGUuVHhXSSwgcFJhQ2ZnLT5kYXRhICsgMiwgMTYpOworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJCQkJUlRNUFdJRW5kaWFuQ2hhbmdlKChQVUNIQVIpJnBBZGFwdGVyLT5hdGUuVHhXSSwgVFlQRV9UWFdJKTsKKyNlbmRpZiAvLyBSVF9CSUdfRU5ESUFOIC8vCisKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZGFwdGVyLT5hdGUuVHhDb3VudCwgcFJhQ2ZnLT5kYXRhICsgMTgsIDQpOworCQkJCQlwQWRhcHRlci0+YXRlLlR4Q291bnQgPSBudG9obChwQWRhcHRlci0+YXRlLlR4Q291bnQpOworCisJCQkJCXAgPSAoVVNIT1JUICopKCZwUmFDZmctPmRhdGFbMjJdKTsKKwkJCQkJLy9wID0gcFJhQ2ZnLT5kYXRhICsgMjI7CisJCQkJCS8vIGFsd2F5cyB1c2UgUUlEX0FDX0JFCisJCQkJCXBBZGFwdGVyLT5hdGUuUUlEID0gMDsKKwkJCQkJcCA9IChVU0hPUlQgKikoJnBSYUNmZy0+ZGF0YVsyNF0pOworCQkJCQkvL3AgPSBwUmFDZmctPmRhdGEgKyAyNDsKKwkJCQkJcEFkYXB0ZXItPmF0ZS5ITGVuID0gbnRvaHMoKnApOworCisJCQkJCWlmIChwQWRhcHRlci0+YXRlLkhMZW4gPiAzMikKKwkJCQkJeworCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJwQWRhcHRlci0+YXRlLkhMZW4gPiAzMlxuIikpOworCQkJCQkJZXJyID0gMzsKKwkJCQkJCWdvdG8gVFhfU1RBUlRfRVJST1I7CisJCQkJCX0KKworCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkYXB0ZXItPmF0ZS5IZWFkZXIsIHBSYUNmZy0+ZGF0YSArIDI2LCBwQWRhcHRlci0+YXRlLkhMZW4pOworCisKKwkJCQkJcEFkYXB0ZXItPmF0ZS5QTGVuID0gbnRvaHMocFJhQ2ZnLT5sZW5ndGgpIC0gKHBBZGFwdGVyLT5hdGUuSExlbiArIDI4KTsKKworCQkJCQlpZiAocEFkYXB0ZXItPmF0ZS5QTGVuID4gMzIpCisJCQkJCXsKKwkJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgicEFkYXB0ZXItPmF0ZS5QTGVuID4gMzJcbiIpKTsKKwkJCQkJCWVyciA9IDQ7CisJCQkJCQlnb3RvIFRYX1NUQVJUX0VSUk9SOworCQkJCQl9CisKKwkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZGFwdGVyLT5hdGUuUGF0dGVybiwgcFJhQ2ZnLT5kYXRhICsgMjYgKyBwQWRhcHRlci0+YXRlLkhMZW4sIHBBZGFwdGVyLT5hdGUuUExlbik7CisJCQkJCXBBZGFwdGVyLT5hdGUuRExlbiA9IHBBZGFwdGVyLT5hdGUuVHhXSS5NUERVdG90YWxCeXRlQ291bnQgLSBwQWRhcHRlci0+YXRlLkhMZW47CisJCQkJfQorCisJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SMjIsICZCYnAyMlZhbHVlKTsKKworCQkJCXN3aXRjaCAoQmJwMjJWYWx1ZSkKKwkJCQl7CisJCQkJCWNhc2UgQkJQMjJfVFhGUkFNRToKKwkJCQkJCXsKKwkJCQkJCQlpZiAocEFkYXB0ZXItPmF0ZS5UeENvdW50ID09IDApCisJCQkJCQkJeworCQkJCQkJCX0KKwkJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNUQVJUIFRYRlJBTUVcbiIpKTsKKwkJCQkJCQlwQWRhcHRlci0+YXRlLmJRQVR4U3RhcnQgPSBUUlVFOworCQkJCQkJCVNldF9BVEVfUHJvYyhwQWRhcHRlciwgIlRYRlJBTUUiKTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgQkJQMjJfVFhDT05UX09SX0NBUlJTVVBQOgorCQkJCQkJeworCQkJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQkJQMjJfVFhDT05UX09SX0NBUlJTVVBQXG4iKSk7CisJCQkJCQkJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIDI0LCAmQmJwMjRWYWx1ZSk7CisKKwkJCQkJCQlzd2l0Y2ggKEJicDI0VmFsdWUpCisJCQkJCQkJeworCQkJCQkJCQljYXNlIEJCUDI0X1RYQ09OVDoKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNUQVJUIFRYQ09OVFxuIikpOworCQkJCQkJCQkJCXBBZGFwdGVyLT5hdGUuYlFBVHhTdGFydCA9IFRSVUU7CisJCQkJCQkJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiVFhDT05UIik7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlicmVhazsKKworCQkJCQkJCQljYXNlIEJCUDI0X0NBUlJTVVBQOgorCQkJCQkJCQkJeworCQkJCQkJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU1RBUlQgVFhDQVJSU1VQUFxuIikpOworCQkJCQkJCQkJCXBBZGFwdGVyLT5hdGUuYlFBVHhTdGFydCA9IFRSVUU7CisJCQkJCQkJCQkJcEFkYXB0ZXItPmF0ZS5Nb2RlIHw9IEFURV9UWENBUlJTVVBQOworCQkJCQkJCQkJfQorCQkJCQkJCQkJYnJlYWs7CisKKwkJCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlVua25vd24gU3RhcnQgVFggc3VidHlwZSAhIikpOworCQkJCQkJCQkJfQorCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSBCQlAyMl9UWENBUlI6CisJCQkJCQl7CisJCQkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJTVEFSVCBUWENBUlJcbiIpKTsKKwkJCQkJCQlwQWRhcHRlci0+YXRlLmJRQVR4U3RhcnQgPSBUUlVFOworCQkJCQkJCVNldF9BVEVfUHJvYyhwQWRhcHRlciwgIlRYQ0FSUiIpOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXsKKwkJCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIlVua25vd24gU3RhcnQgVFggc3VidHlwZSAhIikpOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKHBBZGFwdGVyLT5hdGUuYlFBVHhTdGFydCA9PSBUUlVFKQorCQkJCXsKKwkJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCisJCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisJICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorCSAgICAgICAgICAgIAl7CisJICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSB3YXMgZmFpbGVkIGluIGNhc2UgUkFDRkdfQ01EX1RYX1NUQVJUXG4iKSk7CisJICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworCSAgICAgICAgICAgIAl9CisJCQkJCWVsc2UKKwkJCQkJeworCSAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX1RYX1NUQVJUIGlzIGRvbmUgIVxuIikpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworVFhfU1RBUlRfRVJST1I6CisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucyhlcnIpOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9UWF9TVEFSVFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJmZWVkYmFjayBvZiBUWF9TVEFSVF9FUlJPUiBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9HRVRfVFhfU1RBVFVTOgorCQkJeworCQkJCVVJTlQzMiBjb3VudDsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDYpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJY291bnQgPSBodG9ubChwQWRhcHRlci0+YXRlLlR4RG9uZUNvdW50KTsKKwkJCQlOZGlzTW92ZU1lbW9yeShwUmFDZmctPmRhdGEsICZjb3VudCwgNCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0dFVF9UWF9TVEFUVVNcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0dFVF9UWF9TVEFUVVMgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfVFhfU1RPUDoKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9UWF9TVE9QXG4iKSk7CisKKwkJCQlTZXRfQVRFX1Byb2MocEFkYXB0ZXIsICJUWFNUT1AiKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX1RYX1NUT1BcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX1RYX1NUT1AgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfUlhfU1RBUlQ6CisJCQl7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfUlhfU1RBUlRcbiIpKTsKKworCQkJCXBBZGFwdGVyLT5hdGUuYlFBUnhTdGFydCA9IFRSVUU7CisJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiUlhGUkFNRSIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfUlhfU1RBUlRcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX1JYX1NUQVJUIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX1JYX1NUT1A6CisJCQl7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfUlhfU1RPUFxuIikpOworCisJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiUlhTVE9QIik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9SWF9TVE9QXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9SWF9TVE9QIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCS8qIFRoZSBmb2xsb3dpbmcgY2FzZXMgYXJlIGZvciBuZXcgQVRFIEdVSShub3QgUUEpLiAqLworCQkvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKwkJY2FzZSBSQUNGR19DTURfQVRFX1NUQVJUX1RYX0NBUlJJRVI6CisJCQl7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NUQVJUX1RYX0NBUlJJRVJcbiIpKTsKKworCQkJCVNldF9BVEVfUHJvYyhwQWRhcHRlciwgIlRYQ0FSUiIpOworCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgid3JxLT51LmRhdGEubGVuZ3RoID0gJWRcbiIsIHdycS0+dS5kYXRhLmxlbmd0aCkpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9DQVJSSUVSXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ0FSUklFUiBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ09OVDoKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfQ09OVFxuIikpOworCisJCQkJU2V0X0FURV9Qcm9jKHBBZGFwdGVyLCAiVFhDT05UIik7CisKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJ3cnEtPnUuZGF0YS5sZW5ndGggPSAlZFxuIiwgd3JxLT51LmRhdGEubGVuZ3RoKSk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NUQVJUX1RYX0NPTlRcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9DT05UIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9GUkFNRToKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfRlJBTUVcbiIpKTsKKworCQkJCVNldF9BVEVfUHJvYyhwQWRhcHRlciwgIlRYRlJBTUUiKTsKKworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIndycS0+dS5kYXRhLmxlbmd0aCA9ICVkXG4iLCB3cnEtPnUuZGF0YS5sZW5ndGgpKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU1RBUlRfVFhfRlJBTUVcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TVEFSVF9UWF9GUkFNRSBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX0JXOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMDsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9CV1xuIikpOworCisJCQkJbWVtY3B5KChQVUNIQVIpJnZhbHVlLCAoUFVDSEFSKSYocFJhQ2ZnLT5zdGF0dXMpLCAyKTsKKwkJCQl2YWx1ZSA9IG50b2hzKHZhbHVlKTsKKwkJCQlzcHJpbnRmKChQQ0hBUilzdHIsICIlZCIsIHZhbHVlKTsKKworCQkJCVNldF9BVEVfVFhfQldfUHJvYyhwQWRhcHRlciwgc3RyKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TRVRfQldcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfQlcgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9UWF9QT1dFUjA6CisJCQl7CisJCQkJU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX1RYX1BPV0VSMFxuIikpOworCisJCQkJbWVtY3B5KChQVUNIQVIpJnZhbHVlLCAoUFVDSEFSKSYocFJhQ2ZnLT5zdGF0dXMpLCAyKTsKKwkJCQl2YWx1ZSA9IG50b2hzKHZhbHVlKTsKKwkJCQlzcHJpbnRmKChQQ0hBUilzdHIsICIlZCIsIHZhbHVlKTsKKwkJCQlTZXRfQVRFX1RYX1BPV0VSMF9Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9UWF9QT1dFUjBcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfVFhfUE9XRVIwIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TRVRfVFhfUE9XRVIxOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMDsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9UWF9QT1dFUjFcbiIpKTsKKworCQkJCW1lbWNweSgoUFVDSEFSKSZ2YWx1ZSwgKFBVQ0hBUikmKHBSYUNmZy0+c3RhdHVzKSwgMik7CisJCQkJdmFsdWUgPSBudG9ocyh2YWx1ZSk7CisJCQkJc3ByaW50ZigoUENIQVIpc3RyLCAiJWQiLCB2YWx1ZSk7CisJCQkJU2V0X0FURV9UWF9QT1dFUjFfUHJvYyhwQWRhcHRlciwgc3RyKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TRVRfVFhfUE9XRVIxXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU0VUX1RYX1BPV0VSMSBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX0ZSRVFfT0ZGU0VUOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMDsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9GUkVRX09GRlNFVFxuIikpOworCisJCQkJbWVtY3B5KChQVUNIQVIpJnZhbHVlLCAoUFVDSEFSKSYocFJhQ2ZnLT5zdGF0dXMpLCAyKTsKKwkJCQl2YWx1ZSA9IG50b2hzKHZhbHVlKTsKKwkJCQlzcHJpbnRmKChQQ0hBUilzdHIsICIlZCIsIHZhbHVlKTsKKwkJCQlTZXRfQVRFX1RYX0ZSRVFPRkZTRVRfUHJvYyhwQWRhcHRlciwgc3RyKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TRVRfRlJFUV9PRkZTRVRcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfRlJFUV9PRkZTRVQgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX0dFVF9TVEFUSVNUSUNTOgorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9HRVRfU1RBVElTVElDU1xuIikpOworCisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVswXSwgKFVDSEFSICopJnBBZGFwdGVyLT5hdGUuVHhEb25lQ291bnQsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbNF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQudS5Mb3dQYXJ0LCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzhdLCAoVUNIQVIgKikmcEFkYXB0ZXItPldsYW5Db3VudGVycy5GYWlsZWRDb3VudC51Lkxvd1BhcnQsIDQpOworCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbMTJdLCAoVUNIQVIgKikmcEFkYXB0ZXItPldsYW5Db3VudGVycy5SVFNTdWNjZXNzQ291bnQudS5Mb3dQYXJ0LCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzE2XSwgKFVDSEFSICopJnBBZGFwdGVyLT5XbGFuQ291bnRlcnMuUlRTRmFpbHVyZUNvdW50LnUuTG93UGFydCwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVsyMF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJlY2VpdmVkRnJhZ21lbnRDb3VudC5RdWFkUGFydCwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVsyNF0sIChVQ0hBUiAqKSZwQWRhcHRlci0+V2xhbkNvdW50ZXJzLkZDU0Vycm9yQ291bnQudS5Mb3dQYXJ0LCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzI4XSwgKFVDSEFSICopJnBBZGFwdGVyLT5Db3VudGVyczgwMjMuUnhOb0J1ZmZlciwgNCk7CisJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVszMl0sIChVQ0hBUiAqKSZwQWRhcHRlci0+V2xhbkNvdW50ZXJzLkZyYW1lRHVwbGljYXRlQ291bnQudS5Mb3dQYXJ0LCA0KTsKKwkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzM2XSwgKFVDSEFSICopJnBBZGFwdGVyLT5SYWxpbmtDb3VudGVycy5PbmVTZWNGYWxzZUNDQUNudCwgNCk7CisKKwkJCQlpZiAocEFkYXB0ZXItPmF0ZS5SeEFudGVubmFTZWwgPT0gMCkKKwkJCQl7CisJCQkJCUlOVDMyIFJTU0kwID0gMDsKKwkJCQkJSU5UMzIgUlNTSTEgPSAwOworCQkJCQlJTlQzMiBSU1NJMiA9IDA7CisKKwkJCQkJUlNTSTAgPSAoSU5UMzIpKHBBZGFwdGVyLT5hdGUuTGFzdFJzc2kwIC0gcEFkYXB0ZXItPkJicFJzc2lUb0RibURlbHRhKTsKKwkJCQkJUlNTSTEgPSAoSU5UMzIpKHBBZGFwdGVyLT5hdGUuTGFzdFJzc2kxIC0gcEFkYXB0ZXItPkJicFJzc2lUb0RibURlbHRhKTsKKwkJCQkJUlNTSTIgPSAoSU5UMzIpKHBBZGFwdGVyLT5hdGUuTGFzdFJzc2kyIC0gcEFkYXB0ZXItPkJicFJzc2lUb0RibURlbHRhKTsKKwkJCQkJbWVtY3B5X2V4bChwQWRhcHRlciwgJnBSYUNmZy0+ZGF0YVs0MF0sIChVQ0hBUiAqKSZSU1NJMCwgNCk7CisJCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbNDRdLCAoVUNIQVIgKikmUlNTSTEsIDQpOworCQkJCQltZW1jcHlfZXhsKHBBZGFwdGVyLCAmcFJhQ2ZnLT5kYXRhWzQ4XSwgKFVDSEFSICopJlJTU0kyLCA0KTsKKwkJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKzUyKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJSU5UMzIgUlNTSTAgPSAwOworCisJCQkJCVJTU0kwID0gKElOVDMyKShwQWRhcHRlci0+YXRlLkxhc3RSc3NpMCAtIHBBZGFwdGVyLT5CYnBSc3NpVG9EYm1EZWx0YSk7CisJCQkJCW1lbWNweV9leGwocEFkYXB0ZXIsICZwUmFDZmctPmRhdGFbNDBdLCAoVUNIQVIgKikmUlNTSTAsIDQpOworCQkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIrNDQpOworCQkJCX0KKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfR0VUX1NUQVRJU1RJQ1NcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9HRVRfU1RBVElTVElDUyBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfUkVTRVRfQ09VTlRFUjoKKwkJCXsKKwkJCQlTSE9SVCAgICB2YWx1ZSA9IDE7CisJCQkJVUNIQVIgICAgc3RyW0xFTl9PRl9BUkddOworCisJCQkJTmRpc1plcm9NZW1vcnkoc3RyLCBMRU5fT0ZfQVJHKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9SRVNFVF9DT1VOVEVSXG4iKSk7CisKKwkJCQlzcHJpbnRmKChQQ0hBUilzdHIsICIlZCIsIHZhbHVlKTsKKwkJCQlTZXRfUmVzZXRTdGF0Q291bnRlcl9Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJcEFkYXB0ZXItPmF0ZS5UeERvbmVDb3VudCA9IDA7CisKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1JFU0VUX0NPVU5URVJcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9SRVNFVF9DT1VOVEVSIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKworCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFTF9UWF9BTlRFTk5BOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMDsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFTF9UWF9BTlRFTk5BXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9BVEVfVFhfQW50ZW5uYV9Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFTF9UWF9BTlRFTk5BXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU0VMX1RYX0FOVEVOTkEgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFTF9SWF9BTlRFTk5BOgorCQkJeworCQkJCVNIT1JUICAgIHZhbHVlID0gMDsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFTF9SWF9BTlRFTk5BXG4iKSk7CisKKwkJCQltZW1jcHkoKFBVQ0hBUikmdmFsdWUsIChQVUNIQVIpJihwUmFDZmctPnN0YXR1cyksIDIpOworCQkJCXZhbHVlID0gbnRvaHModmFsdWUpOworCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCVNldF9BVEVfUlhfQW50ZW5uYV9Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFTF9SWF9BTlRFTk5BXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU0VMX1JYX0FOVEVOTkEgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9QUkVBTUJMRToKKwkJCXsKKwkJCQlTSE9SVCAgICB2YWx1ZSA9IDA7CisJCQkJVUNIQVIgICAgc3RyW0xFTl9PRl9BUkddOworCisJCQkJTmRpc1plcm9NZW1vcnkoc3RyLCBMRU5fT0ZfQVJHKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TRVRfUFJFQU1CTEVcbiIpKTsKKworCQkJCW1lbWNweSgoUFVDSEFSKSZ2YWx1ZSwgKFBVQ0hBUikmKHBSYUNmZy0+c3RhdHVzKSwgMik7CisJCQkJdmFsdWUgPSBudG9ocyh2YWx1ZSk7CisJCQkJc3ByaW50ZigoUENIQVIpc3RyLCAiJWQiLCB2YWx1ZSk7CisJCQkJU2V0X0FURV9UWF9NT0RFX1Byb2MocEFkYXB0ZXIsIHN0cik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX1BSRUFNQkxFXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU0VUX1BSRUFNQkxFIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TRVRfQ0hBTk5FTDoKKwkJCXsKKwkJCQlTSE9SVCAgICB2YWx1ZSA9IDA7CisJCQkJVUNIQVIgICAgc3RyW0xFTl9PRl9BUkddOworCisJCQkJTmRpc1plcm9NZW1vcnkoc3RyLCBMRU5fT0ZfQVJHKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TRVRfQ0hBTk5FTFxuIikpOworCisJCQkJbWVtY3B5KChQVUNIQVIpJnZhbHVlLCAoUFVDSEFSKSYocFJhQ2ZnLT5zdGF0dXMpLCAyKTsKKwkJCQl2YWx1ZSA9IG50b2hzKHZhbHVlKTsKKwkJCQlzcHJpbnRmKChQQ0hBUilzdHIsICIlZCIsIHZhbHVlKTsKKwkJCQlTZXRfQVRFX0NIQU5ORUxfUHJvYyhwQWRhcHRlciwgc3RyKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TRVRfQ0hBTk5FTFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9DSEFOTkVMIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TRVRfQUREUjE6CisJCQl7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9BRERSMVxuIikpOworCisJCQkJLy8gQWRkciBpcyBhbiBhcnJheSBvZiBVQ0hBUiwKKwkJCQkvLyBzbyBubyBuZWVkIHRvIHBlcmZvcm0gZW5kaWFuIHN3YXAuCisJCQkJbWVtY3B5KHBBZGFwdGVyLT5hdGUuQWRkcjEsIChQVUNIQVIpKHBSYUNmZy0+ZGF0YSAtIDIpLCBNQUNfQUREUl9MRU4pOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9BRERSMVxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9BRERSMSBpcyBkb25lICFcbiAoQUREUjEgPSAlMlg6JTJYOiUyWDolMlg6JTJYOiUyWClcbiIsIHBBZGFwdGVyLT5hdGUuQWRkcjFbMF0sCisJCQkJCQlwQWRhcHRlci0+YXRlLkFkZHIxWzFdLCBwQWRhcHRlci0+YXRlLkFkZHIxWzJdLCBwQWRhcHRlci0+YXRlLkFkZHIxWzNdLCBwQWRhcHRlci0+YXRlLkFkZHIxWzRdLCBwQWRhcHRlci0+YXRlLkFkZHIxWzVdKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9BRERSMjoKKwkJCXsKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIyXG4iKSk7CisKKwkJCQkvLyBBZGRyIGlzIGFuIGFycmF5IG9mIFVDSEFSLAorCQkJCS8vIHNvIG5vIG5lZWQgdG8gcGVyZm9ybSBlbmRpYW4gc3dhcC4KKwkJCQltZW1jcHkocEFkYXB0ZXItPmF0ZS5BZGRyMiwgKFBVQ0hBUikocFJhQ2ZnLT5kYXRhIC0gMiksIE1BQ19BRERSX0xFTik7CisKKwkJCQkvLyBwcmVwYXJlIGZlZWRiYWNrCisJCQkJcFJhQ2ZnLT5sZW5ndGggPSBodG9ucygyKTsKKwkJCQlwUmFDZmctPnN0YXR1cyA9IGh0b25zKDApOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwUmFDZmctPm1hZ2ljX25vKSArIHNpemVvZihwUmFDZmctPmNvbW1hbmRfdHlwZSkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF9pZCkgKyBzaXplb2YocFJhQ2ZnLT5sZW5ndGgpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPnNlcXVlbmNlKSArIG50b2hzKHBSYUNmZy0+bGVuZ3RoKTsKKworICAgICAgICAgICAgCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFJhQ2ZnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkJQVRFREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiY29weV90b191c2VyKCkgZmFpbCBpbiBjYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIyXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIyIGlzIGRvbmUgIVxuIChBRERSMiA9ICUyWDolMlg6JTJYOiUyWDolMlg6JTJYKVxuIiwgcEFkYXB0ZXItPmF0ZS5BZGRyMlswXSwKKwkJCQkJCXBBZGFwdGVyLT5hdGUuQWRkcjJbMV0sIHBBZGFwdGVyLT5hdGUuQWRkcjJbMl0sIHBBZGFwdGVyLT5hdGUuQWRkcjJbM10sIHBBZGFwdGVyLT5hdGUuQWRkcjJbNF0sIHBBZGFwdGVyLT5hdGUuQWRkcjJbNV0pKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU0VUX0FERFIzOgorCQkJeworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TRVRfQUREUjNcbiIpKTsKKworCQkJCS8vIEFkZHIgaXMgYW4gYXJyYXkgb2YgVUNIQVIsCisJCQkJLy8gc28gbm8gbmVlZCB0byBwZXJmb3JtIGVuZGlhbiBzd2FwLgorCQkJCW1lbWNweShwQWRhcHRlci0+YXRlLkFkZHIzLCAoUFVDSEFSKShwUmFDZmctPmRhdGEgLSAyKSwgTUFDX0FERFJfTEVOKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX0FURV9TRVRfQUREUjNcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfQUREUjMgaXMgZG9uZSAhXG4gKEFERFIzID0gJTJYOiUyWDolMlg6JTJYOiUyWDolMlgpXG4iLCBwQWRhcHRlci0+YXRlLkFkZHIzWzBdLAorCQkJCQkJcEFkYXB0ZXItPmF0ZS5BZGRyM1sxXSwgcEFkYXB0ZXItPmF0ZS5BZGRyM1syXSwgcEFkYXB0ZXItPmF0ZS5BZGRyM1szXSwgcEFkYXB0ZXItPmF0ZS5BZGRyM1s0XSwgcEFkYXB0ZXItPmF0ZS5BZGRyM1s1XSkpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TRVRfUkFURToKKwkJCXsKKwkJCQlTSE9SVCAgICB2YWx1ZSA9IDA7CisJCQkJVUNIQVIgICAgc3RyW0xFTl9PRl9BUkddOworCisJCQkJTmRpc1plcm9NZW1vcnkoc3RyLCBMRU5fT0ZfQVJHKTsKKworCQkJCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUkFDRkdfQ01EX0FURV9TRVRfUkFURVxuIikpOworCisJCQkJbWVtY3B5KChQVUNIQVIpJnZhbHVlLCAoUFVDSEFSKSYocFJhQ2ZnLT5zdGF0dXMpLCAyKTsKKwkJCQl2YWx1ZSA9IG50b2hzKHZhbHVlKTsKKwkJCQlzcHJpbnRmKChQQ0hBUilzdHIsICIlZCIsIHZhbHVlKTsKKwkJCQlTZXRfQVRFX1RYX01DU19Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9SQVRFXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9BVEVfU0VUX1JBVEUgaXMgZG9uZSAhXG4iKSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9MRU46CisJCQl7CisJCQkJU0hPUlQgICAgdmFsdWUgPSAwOworCQkJCVVDSEFSICAgIHN0cltMRU5fT0ZfQVJHXTsKKworCQkJCU5kaXNaZXJvTWVtb3J5KHN0ciwgTEVOX09GX0FSRyk7CisKKwkJCQlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlJBQ0ZHX0NNRF9BVEVfU0VUX1RYX0ZSQU1FX0xFTlxuIikpOworCisJCQkJbWVtY3B5KChQVUNIQVIpJnZhbHVlLCAoUFVDSEFSKSYocFJhQ2ZnLT5zdGF0dXMpLCAyKTsKKwkJCQl2YWx1ZSA9IG50b2hzKHZhbHVlKTsKKwkJCQlzcHJpbnRmKChQQ0hBUilzdHIsICIlZCIsIHZhbHVlKTsKKwkJCQlTZXRfQVRFX1RYX0xFTkdUSF9Qcm9jKHBBZGFwdGVyLCBzdHIpOworCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9MRU5cbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIAl9CisJCQkJZWxzZQorCQkJCXsKKyAgICAgICAgICAgICAgICAJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUkFDRkdfQ01EX0FURV9TRVRfVFhfRlJBTUVfTEVOIGlzIGRvbmUgIVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkFDRkdfQ01EX0FURV9TRVRfVFhfRlJBTUVfQ09VTlQ6CisJCQl7CisJCQkJVVNIT1JUICAgIHZhbHVlID0gMDsKKwkJCQlVQ0hBUiAgICBzdHJbTEVOX09GX0FSR107CisKKwkJCQlOZGlzWmVyb01lbW9yeShzdHIsIExFTl9PRl9BUkcpOworCisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9DT1VOVFxuIikpOworCisJCQkJbWVtY3B5KChQVUNIQVIpJnZhbHVlLCAoUFVDSEFSKSYocFJhQ2ZnLT5zdGF0dXMpLCAyKTsKKwkJCQl2YWx1ZSA9IG50b2hzKHZhbHVlKTsKKwkJCQl7CisJCQkJCXNwcmludGYoKFBDSEFSKXN0ciwgIiVkIiwgdmFsdWUpOworCQkJCQlTZXRfQVRFX1RYX0NPVU5UX1Byb2MocEFkYXB0ZXIsIHN0cik7CisJCQkJfQorCisJCQkJLy8gcHJlcGFyZSBmZWVkYmFjaworCQkJCXBSYUNmZy0+bGVuZ3RoID0gaHRvbnMoMik7CisJCQkJcFJhQ2ZnLT5zdGF0dXMgPSBodG9ucygwKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YocFJhQ2ZnLT5tYWdpY19ubykgKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX3R5cGUpCisJCQkJCQkJCQkrIHNpemVvZihwUmFDZmctPmNvbW1hbmRfaWQpICsgc2l6ZW9mKHBSYUNmZy0+bGVuZ3RoKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5zZXF1ZW5jZSkgKyBudG9ocyhwUmFDZmctPmxlbmd0aCk7CisKKyAgICAgICAgICAgIAlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBSYUNmZywgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIAl7CisgICAgICAgICAgICAJCUFURURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNvcHlfdG9fdXNlcigpIGZhaWwgaW4gY2FzZSBSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9DT1VOVFxuIikpOworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgCX0KKwkJCQllbHNlCisJCQkJeworICAgICAgICAgICAgICAgIAlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSQUNGR19DTURfQVRFX1NFVF9UWF9GUkFNRV9DT1VOVCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFJBQ0ZHX0NNRF9BVEVfU1RBUlRfUlhfRlJBTUU6CisJCQl7CisJCQkJQVRFREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSQUNGR19DTURfUlhfU1RBUlRcbiIpKTsKKworCQkJCVNldF9BVEVfUHJvYyhwQWRhcHRlciwgIlJYRlJBTUUiKTsKKworCQkJCS8vIHByZXBhcmUgZmVlZGJhY2sKKwkJCQlwUmFDZmctPmxlbmd0aCA9IGh0b25zKDIpOworCQkJCXBSYUNmZy0+c3RhdHVzID0gaHRvbnMoMCk7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHBSYUNmZy0+bWFnaWNfbm8pICsgc2l6ZW9mKHBSYUNmZy0+Y29tbWFuZF90eXBlKQorCQkJCQkJCQkJKyBzaXplb2YocFJhQ2ZnLT5jb21tYW5kX2lkKSArIHNpemVvZihwUmFDZmctPmxlbmd0aCkKKwkJCQkJCQkJCSsgc2l6ZW9mKHBSYUNmZy0+c2VxdWVuY2UpICsgbnRvaHMocFJhQ2ZnLT5sZW5ndGgpOworCisgICAgICAgICAgICAJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwUmFDZmcsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCQlBVEVEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJjb3B5X3RvX3VzZXIoKSBmYWlsIGluIGNhc2UgUkFDRkdfQ01EX1JYX1NUQVJUXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICAJfQorCQkJCWVsc2UKKwkJCQl7CisgICAgICAgICAgICAgICAgCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJBQ0ZHX0NNRF9SWF9TVEFSVCBpcyBkb25lICFcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKyAgICBBU1NFUlQocFJhQ2ZnICE9IE5VTEwpOworICAgIGlmIChwUmFDZmcgIT0gTlVMTCkKKyAgICB7CisgICAga2ZyZWUocFJhQ2ZnKTsKKyAgICB9CisJcmV0dXJuOworfQorCitWT0lEIEJ1YmJsZVNvcnQoSU5UMzIgbiwgSU5UMzIgYVtdKQoreworCUlOVDMyIGssIGosIHRlbXA7CisKKwlmb3IgKGsgPSBuLTE7ICBrPjA7ICBrLS0pCisJeworCQlmb3IgKGogPSAwOyBqPGs7IGorKykKKwkJeworCQkJaWYoYVtqXSA+IGFbaisxXSkKKwkJCXsKKwkJCQl0ZW1wID0gYVtqXTsKKwkJCQlhW2pdPWFbaisxXTsKKwkJCQlhW2orMV09dGVtcDsKKwkJCX0KKwkJfQorCX0KK30KKworVk9JRCBDYWxOb2lzZUxldmVsKFBSVE1QX0FEQVBURVIgcEFkLCBVQ0hBUiBjaGFubmVsLCBJTlQzMiBSU1NJWzNdWzEwXSkKK3sKKwlJTlQzMgkJUlNTSTAsIFJTU0kxLCBSU1NJMjsKKyAJQ0hBUgkJUnNzaTBPZmZzZXQsIFJzc2kxT2Zmc2V0LCBSc3NpMk9mZnNldDsKKwlVQ0hBUgkJQmJwUjUwUnNzaTAgPSAwLCBCYnBSNTFSc3NpMSA9IDAsIEJicFI1MlJzc2kyID0gMDsKKwlVQ0hBUgkJT3JnX0JCUDY2dmFsdWUgPSAwLCBPcmdfQkJQNjl2YWx1ZSA9IDAsIE9yZ19CQlA3MHZhbHVlID0gMCwgZGF0YSA9IDA7CisJVVNIT1JUCQlMTkFfR2FpbiA9IDA7CisJSU5UMzIgICAgICAgaiA9IDA7CisJVUNIQVIJCU9yZ19DaGFubmVsID0gcEFkLT5hdGUuQ2hhbm5lbDsKKwlVU0hPUlQJICAgIEdhaW5WYWx1ZSA9IDAsIE9mZnNldFZhbHVlID0gMDsKKworCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgJk9yZ19CQlA2NnZhbHVlKTsKKwlBVEVfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksICZPcmdfQkJQNjl2YWx1ZSk7CisJQVRFX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCAmT3JnX0JCUDcwdmFsdWUpOworCisJLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJLy8gUmVhZCB0aGUgdmFsdWUgb2YgTE5BIGdhaW4gYW5kIFJzc2kgb2Zmc2V0CisJLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fTE5BX09GRlNFVCwgR2FpblZhbHVlKTsKKworCS8vIGZvciBOb2lzZSBMZXZlbAorCWlmIChjaGFubmVsIDw9IDE0KQorCXsKKwkJTE5BX0dhaW4gPSBHYWluVmFsdWUgJiAweDAwRkY7CisKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fUlNTSV9CR19PRkZTRVQsIE9mZnNldFZhbHVlKTsKKwkJUnNzaTBPZmZzZXQgPSBPZmZzZXRWYWx1ZSAmIDB4MDBGRjsKKwkJUnNzaTFPZmZzZXQgPSAoT2Zmc2V0VmFsdWUgJiAweEZGMDApID4+IDg7CisJCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgKEVFUFJPTV9SU1NJX0JHX09GRlNFVCArIDIpLyogMHg0OCAqLywgT2Zmc2V0VmFsdWUpOworCQlSc3NpMk9mZnNldCA9IE9mZnNldFZhbHVlICYgMHgwMEZGOworCX0KKwllbHNlCisJeworCQlMTkFfR2FpbiA9IChHYWluVmFsdWUgJiAweEZGMDApID4+IDg7CisKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fUlNTSV9BX09GRlNFVCwgT2Zmc2V0VmFsdWUpOworCQlSc3NpME9mZnNldCA9IE9mZnNldFZhbHVlICYgMHgwMEZGOworCQlSc3NpMU9mZnNldCA9IChPZmZzZXRWYWx1ZSAmIDB4RkYwMCkgPj4gODsKKwkJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAoRUVQUk9NX1JTU0lfQV9PRkZTRVQgKyAyKS8qIDB4NEMgKi8sIE9mZnNldFZhbHVlKTsKKwkJUnNzaTJPZmZzZXQgPSBPZmZzZXRWYWx1ZSAmIDB4MDBGRjsKKwl9CisJLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJeworCQlwQWQtPmF0ZS5DaGFubmVsID0gY2hhbm5lbDsKKwkJQVRFQXNpY1N3aXRjaENoYW5uZWwocEFkKTsKKwkJbWRlbGF5KDUpOworCisJCWRhdGEgPSAweDEwOworCQlBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCBkYXRhKTsKKwkJZGF0YSA9IDB4NDA7CisJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIGRhdGEpOworCQlkYXRhID0gMHg0MDsKKwkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MCwgZGF0YSk7CisJCW1kZWxheSg1KTsKKworCQkvLyBTdGFydCBSeAorCQlwQWQtPmF0ZS5iUUFSeFN0YXJ0ID0gVFJVRTsKKwkJU2V0X0FURV9Qcm9jKHBBZCwgIlJYRlJBTUUiKTsKKworCQltZGVsYXkoNSk7CisKKwkJZm9yIChqID0gMDsgaiA8IDEwOyBqKyspCisJCXsKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I1MCwgJkJicFI1MFJzc2kwKTsKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I1MSwgJkJicFI1MVJzc2kxKTsKKwkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I1MiwgJkJicFI1MlJzc2kyKTsKKworCQkJbWRlbGF5KDEwKTsKKworCQkJLy8gQ2FsY3VsYXRlIFJTU0kgMAorCQkJaWYgKEJicFI1MFJzc2kwID09IDApCisJCQl7CisJCQkJUlNTSTAgPSAtMTAwOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCVJTU0kwID0gKElOVDMyKSgtMTIgLSBCYnBSNTBSc3NpMCAtIExOQV9HYWluIC0gUnNzaTBPZmZzZXQpOworCQkJfQorCQkJUlNTSVswXVtqXSA9IFJTU0kwOworCisJCQlpZiAoIHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPj0gMiApIC8vIDJSCisJCQl7CisJCQkJLy8gQ2FsY3VsYXRlIFJTU0kgMQorCQkJCWlmIChCYnBSNTFSc3NpMSA9PSAwKQorCQkJCXsKKwkJCQkJUlNTSTEgPSAtMTAwOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSU1NJMSA9IChJTlQzMikoLTEyIC0gQmJwUjUxUnNzaTEgLSBMTkFfR2FpbiAtIFJzc2kxT2Zmc2V0KTsKKwkJCQl9CisJCQkJUlNTSVsxXVtqXSA9IFJTU0kxOworCQkJfQorCisJCQlpZiAoIHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPj0gMyApIC8vIDNSCisJCQl7CisJCQkJLy8gQ2FsY3VsYXRlIFJTU0kgMgorCQkJCWlmIChCYnBSNTJSc3NpMiA9PSAwKQorCQkJCQlSU1NJMiA9IC0xMDA7CisJCQkJZWxzZQorCQkJCQlSU1NJMiA9IChJTlQzMikoLTEyIC0gQmJwUjUyUnNzaTIgLSBMTkFfR2FpbiAtIFJzc2kyT2Zmc2V0KTsKKworCQkJCVJTU0lbMl1bal0gPSBSU1NJMjsKKwkJCX0KKwkJfQorCisJCS8vIFN0b3AgUngKKwkJU2V0X0FURV9Qcm9jKHBBZCwgIlJYU1RPUCIpOworCisJCW1kZWxheSg1KTsKKworCQlCdWJibGVTb3J0KDEwLCBSU1NJWzBdKTsJLy8gMVIKKworCQlpZiAoIHBBZC0+QW50ZW5uYS5maWVsZC5SeFBhdGggPj0gMiApIC8vIDJSCisJCXsKKwkJCUJ1YmJsZVNvcnQoMTAsIFJTU0lbMV0pOworCQl9CisKKwkJaWYgKCBwQWQtPkFudGVubmEuZmllbGQuUnhQYXRoID49IDMgKSAvLyAzUgorCQl7CisJCQlCdWJibGVTb3J0KDEwLCBSU1NJWzJdKTsKKwkJfQorCisJfQorCisJcEFkLT5hdGUuQ2hhbm5lbCA9IE9yZ19DaGFubmVsOworCUFURUFzaWNTd2l0Y2hDaGFubmVsKHBBZCk7CisKKwkvLyBSZXN0b3JlIG9yaWdpbmFsIHZhbHVlCisgICAgQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2NiwgT3JnX0JCUDY2dmFsdWUpOworICAgIEFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIE9yZ19CQlA2OXZhbHVlKTsKKyAgICBBVEVfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCBPcmdfQkJQNzB2YWx1ZSk7CisKKwlyZXR1cm47Cit9CisKK0JPT0xFQU4gU3luY1R4UnhDb25maWcoUFJUTVBfQURBUFRFUiBwQWQsIFVTSE9SVCBvZmZzZXQsIFVDSEFSIHZhbHVlKQoreworCVVDSEFSIHRtcCA9IDAsIGJicF9kYXRhID0gMDsKKworCWlmIChBVEVfT04ocEFkKSkKKwl7CisJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgb2Zmc2V0LCAmYmJwX2RhdGEpOworCX0KKwllbHNlCisJeworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBvZmZzZXQsICZiYnBfZGF0YSk7CisJfQorCisJLyogY29uZmlybSBhZ2FpbiAqLworCUFTU0VSVChiYnBfZGF0YSA9PSB2YWx1ZSk7CisKKwlzd2l0Y2gob2Zmc2V0KQorCXsKKwkJY2FzZSBCQlBfUjE6CisJCQkvKiBOZWVkIHRvIHN5bmMuIHR4IGNvbmZpZ3VyYXRpb24gd2l0aCBsZWdhY3kgQVRFLiAqLworCQkJdG1wID0gKGJicF9kYXRhICYgKCgxIDw8IDQpIHwgKDEgPDwgMykpLyogMHgxOCAqLykgPj4gMzsKKwkJICAgIHN3aXRjaCh0bXApCisJCSAgICB7CisJCQkJLyogVGhlIEJCUCBSMSBiaXRbNDozXSA9IDIgOjogQm90aCBEQUNzIHdpbGwgYmUgdXNlZCBieSBRQS4gKi8KKwkJICAgICAgICBjYXNlIDI6CisJCQkJCS8qIEFsbCAqLworCQkJCQlwQWQtPmF0ZS5UeEFudGVubmFTZWwgPSAwOworCQkgICAgICAgICAgICBicmVhazsKKwkJCQkvKiBUaGUgQkJQIFIxIGJpdFs0OjNdID0gMCA6OiBEQUMgMCB3aWxsIGJlIHVzZWQgYnkgUUEuICovCisJCSAgICAgICAgY2FzZSAwOgorCQkJCQkvKiBBbnRlbm5hIG9uZSAqLworCQkJCQlwQWQtPmF0ZS5UeEFudGVubmFTZWwgPSAxOworCQkgICAgICAgICAgICBicmVhazsKKwkJCQkvKiBUaGUgQkJQIFIxIGJpdFs0OjNdID0gMSA6OiBEQUMgMSB3aWxsIGJlIHVzZWQgYnkgUUEuICovCisJCSAgICAgICAgY2FzZSAxOgorCQkJCQkvKiBBbnRlbm5hIHR3byAqLworCQkJCQlwQWQtPmF0ZS5UeEFudGVubmFTZWwgPSAyOworCQkgICAgICAgICAgICBicmVhazsKKwkJICAgICAgICBkZWZhdWx0OgorCQkgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlcyAtLSBTdGguIHdyb25nISAgOiByZXR1cm4gRkFMU0U7IFxuIiwgX19GVU5DVElPTl9fKSk7CisJCSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKwkJICAgIH0KKwkJCWJyZWFrOy8qIGNhc2UgQkJQX1IxICovCisKKwkJY2FzZSBCQlBfUjM6CisJCQkvKiBOZWVkIHRvIHN5bmMuIHJ4IGNvbmZpZ3VyYXRpb24gd2l0aCBsZWdhY3kgQVRFLiAqLworCQkJdG1wID0gKGJicF9kYXRhICYgKCgxIDw8IDEpIHwgKDEgPDwgMCkpLyogMHgwMyAqLyk7CisJCSAgICBzd2l0Y2godG1wKQorCQkgICAgeworCQkJCS8qIFRoZSBCQlAgUjMgYml0WzE6MF0gPSAzIDo6IEFsbCBBRENzIHdpbGwgYmUgdXNlZCBieSBRQS4gKi8KKwkJICAgICAgICBjYXNlIDM6CisJCQkJCS8qIEFsbCAqLworCQkJCQlwQWQtPmF0ZS5SeEFudGVubmFTZWwgPSAwOworCQkgICAgICAgICAgICBicmVhazsKKwkJCQkvKiBUaGUgQkJQIFIzIGJpdFsxOjBdID0gMCA6OiBBREMgMCB3aWxsIGJlIHVzZWQgYnkgUUEsICovCisJCQkJLyogdW5sZXNzIHRoZSBCQlAgUjMgYml0WzQ6M10gPSAyICovCisJCSAgICAgICAgY2FzZSAwOgorCQkJCQkvKiBBbnRlbm5hIG9uZSAqLworCQkJCQlwQWQtPmF0ZS5SeEFudGVubmFTZWwgPSAxOworCQkJCQl0bXAgPSAoKGJicF9kYXRhICYgKCgxIDw8IDQpIHwgKDEgPDwgMykpLyogMHgwMyAqLykgPj4gMyk7CisJCQkJCWlmICh0bXAgPT0gMikvLyAzUgorCQkJCQl7CisJCQkJCQkvKiBEZWZhdWx0IDogQWxsIEFEQ3Mgd2lsbCBiZSB1c2VkIGJ5IFFBICovCisJCQkJCQlwQWQtPmF0ZS5SeEFudGVubmFTZWwgPSAwOworCQkJCQl9CisJCSAgICAgICAgICAgIGJyZWFrOworCQkJCS8qIFRoZSBCQlAgUjMgYml0WzE6MF0gPSAxIDo6IEFEQyAxIHdpbGwgYmUgdXNlZCBieSBRQS4gKi8KKwkJICAgICAgICBjYXNlIDE6CisJCQkJCS8qIEFudGVubmEgdHdvICovCisJCQkJCXBBZC0+YXRlLlJ4QW50ZW5uYVNlbCA9IDI7CisJCSAgICAgICAgICAgIGJyZWFrOworCQkJCS8qIFRoZSBCQlAgUjMgYml0WzE6MF0gPSAyIDo6IEFEQyAyIHdpbGwgYmUgdXNlZCBieSBRQS4gKi8KKwkJICAgICAgICBjYXNlIDI6CisJCQkJCS8qIEFudGVubmEgdGhyZWUgKi8KKwkJCQkJcEFkLT5hdGUuUnhBbnRlbm5hU2VsID0gMzsKKwkJICAgICAgICAgICAgYnJlYWs7CisJCSAgICAgICAgZGVmYXVsdDoKKwkJICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgLS0gSW1wb3NzaWJsZSEgIDogcmV0dXJuIEZBTFNFOyBcbiIsIF9fRlVOQ1RJT05fXykpOworCQkgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisJCSAgICB9CisJCQlicmVhazsvKiBjYXNlIEJCUF9SMyAqLworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyAtLSBTdGguIHdyb25nISAgOiByZXR1cm4gRkFMU0U7IFxuIiwgX19GVU5DVElPTl9fKSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBWT0lEIG1lbWNweV9leGwoUFJUTVBfQURBUFRFUiBwQWQsIFVDSEFSICpkc3QsIFVDSEFSICpzcmMsIFVMT05HIGxlbikKK3sKKwlVTE9ORyBpLCBWYWx1ZSA9IDA7CisJVUxPTkcgKnBEc3QsICpwU3JjOworCVVDSEFSICpwODsKKworCXA4ID0gc3JjOworCXBEc3QgPSAoVUxPTkcgKikgZHN0OworCXBTcmMgPSAoVUxPTkcgKikgc3JjOworCisJZm9yIChpID0gMCA7IGkgPCAobGVuLzQpOyBpKyspCisJeworCQkvKiBGb3IgYWxpZ25tZW50IGlzc3VlLCB3ZSBuZWVkIGEgdmFyaWFibGUgIlZhbHVlIi4gKi8KKwkJbWVtbW92ZSgmVmFsdWUsIHBTcmMsIDQpOworCQlWYWx1ZSA9IGh0b25sKFZhbHVlKTsKKwkJbWVtbW92ZShwRHN0LCAmVmFsdWUsIDQpOworCQlwRHN0Kys7CisJCXBTcmMrKzsKKwl9CisJaWYgKChsZW4gJSA0KSAhPSAwKQorCXsKKwkJLyogd2lzaCB0aGF0IGl0IHdpbGwgbmV2ZXIgcmVhY2ggaGVyZSAqLworCQltZW1tb3ZlKCZWYWx1ZSwgcFNyYywgKGxlbiAlIDQpKTsKKwkJVmFsdWUgPSBodG9ubChWYWx1ZSk7CisJCW1lbW1vdmUocERzdCwgJlZhbHVlLCAobGVuICUgNCkpOworCX0KK30KKworc3RhdGljIFZPSUQgbWVtY3B5X2V4cyhQUlRNUF9BREFQVEVSIHBBZCwgVUNIQVIgKmRzdCwgVUNIQVIgKnNyYywgVUxPTkcgbGVuKQoreworCVVMT05HIGk7CisJVUNIQVIgKnBEc3QsICpwU3JjOworCisJcERzdCA9IGRzdDsKKwlwU3JjID0gc3JjOworCisJZm9yIChpID0gMDsgaSA8IChsZW4vMik7IGkrKykKKwl7CisJCW1lbW1vdmUocERzdCwgcFNyYywgMik7CisJCSooKFVTSE9SVCAqKXBEc3QpID0gaHRvbnMoKigoVVNIT1JUICopcERzdCkpOworCQlwRHN0Kz0yOworCQlwU3JjKz0yOworCX0KKworCWlmICgobGVuICUgMikgIT0gMCkKKwl7CisJCW1lbW1vdmUocERzdCwgcFNyYywgMSk7CisJfQorfQorCitzdGF0aWMgVk9JRCBSVE1QX0lPX1JFQURfQlVMSyhQUlRNUF9BREFQVEVSIHBBZCwgVUNIQVIgKmRzdCwgVUNIQVIgKnNyYywgVUlOVDMyIGxlbikKK3sKKwlVSU5UMzIgaSwgVmFsdWU7CisJVUlOVDMyICpwRHN0LCAqcFNyYzsKKworCXBEc3QgPSAoVUlOVDMyICopIGRzdDsKKwlwU3JjID0gKFVJTlQzMiAqKSBzcmM7CisKKwlmb3IgKGkgPSAwIDsgaSA8IChsZW4vNCk7IGkrKykKKwl7CisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgKFVMT05HKXBTcmMsICZWYWx1ZSk7CisJCVZhbHVlID0gaHRvbmwoVmFsdWUpOworCQltZW1tb3ZlKHBEc3QsICZWYWx1ZSwgNCk7CisJCXBEc3QrKzsKKwkJcFNyYysrOworCX0KKwlyZXR1cm47Cit9CisKK0lOVCBTZXRfVHhTdG9wX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCUFURURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU2V0X1R4U3RvcF9Qcm9jXG4iKSk7CisKKwlpZiAoU2V0X0FURV9Qcm9jKHBBZCwgIlRYU1RPUCIpKQorCXsKKwlyZXR1cm4gVFJVRTsKK30KKwllbHNlCisJeworCQlyZXR1cm4gRkFMU0U7CisJfQorfQorCitJTlQgU2V0X1J4U3RvcF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlBVEVEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIlNldF9SeFN0b3BfUHJvY1xuIikpOworCisJaWYgKFNldF9BVEVfUHJvYyhwQWQsICJSWFNUT1AiKSkKKwl7CisJcmV0dXJuIFRSVUU7Cit9CisJZWxzZQorCXsKKwkJcmV0dXJuIEZBTFNFOworCX0KK30KKyNlbmRpZgkvLyBSQUxJTktfMjh4eF9RQSAvLworI2VuZGlmCS8vIFJBTElOS19BVEUgLy8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9hdGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5ZWJiNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfYXRlLmgKQEAgLTAsMCArMSwyOTQgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgX19BVEVfSF9fCisjZGVmaW5lIF9fQVRFX0hfXworCisjaWZuZGVmIFVDT1MKKyNkZWZpbmUgYXRlX3ByaW50IHByaW50aworI2RlZmluZSBBVEVEQkdQUklOVCBEQkdQUklOVAorCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIEVFUFJPTV9TSVpFCQkJCQkJCQkweDQwMAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZSBFRVBST01fQklOX0ZJTEVfTkFNRSAgIi9ldGMvV2lyZWxlc3MvUlQyODcwU1RBL2UycC5iaW4iCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisjZW5kaWYgLy8gUlQyODcwIC8vCisjZWxzZSAvLyAhVUNPUyAvLworI2RlZmluZSBmQVRFX0xPQURfRUVQUk9NCQkJCQkJMHgwQzQzCisjaWZkZWYgQ09ORklHX1BSSU5USworZXh0ZXJuIElOVCBDb25zb2xlUmVzcG9uc2UoSU4gUFVDSEFSIGJ1ZmYpOworZXh0ZXJuIGludCAoKnJlbW90ZV9kaXNwbGF5KShjaGFyICopOworZXh0ZXJuIHZvaWQgcHV0cyAoY29uc3QgY2hhciAqcyk7CisKKy8qIHNwZWNpZmljbHkgZGVmaW5lZCB0byByZWRpcmVjdCBhbmQgc2hvdyBhdGUtcmVsYXRlZCBtZXNzYWdlcyB0byBob3N0LiAqLworLyogVHJ5IHRvIGRlZmluZSBhdGVfcHJpbnQgYXMgYSBtYWNyby4gKi8KKyNkZWZpbmUgYXRlX3ByaW50KGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgIFwKK2RveyAgIGludCAoKm9yZ19yZW1vdGVfZGlzcGxheSkoY2hhciAqKSA9IE5VTEw7ICAgXAorCW9yZ19yZW1vdGVfZGlzcGxheSA9IHJlbW90ZV9kaXNwbGF5O1wKKwkvKiBTYXZlIG9yaWdpbmFsICJyZW1vdGVfZGlzcGxheSIgKi9cCisJcmVtb3RlX2Rpc3BsYXkgPSAoaW50ICgqKShjaGFyICopKUNvbnNvbGVSZXNwb25zZTsgICAgICAgICAgIFwKKwlwcmludGsoZm10LCAjIyBhcmdzKTsgICAgICAgICAgICAgICAgICAgICAgIFwKKwkvKiBSZXN0b3JlIHRoZSByZW1vdGVfZGlzcGxheSBmdW5jdGlvbiBwb2ludGVyICovICAgICAgICBcCisJcmVtb3RlX2Rpc3BsYXkgPSBvcmdfcmVtb3RlX2Rpc3BsYXk7IH13aGlsZSgwKQorCisjZGVmaW5lIEFURURCR1BSSU5UKExldmVsLCBGbXQpICAgIAlcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChMZXZlbCkgPD0gUlREZWJ1Z0xldmVsKSAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYXRlX3ByaW50IEZtdDsJCQkJCVwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbmRpZiAvLyBDT05GSUdfUFJJTlRLIC8vCisjZW5kaWYgLy8gIVVDT1MgLy8KKworI2RlZmluZSBBVEVfT04oX3ApICAgICAgICAgICAgICAoKChfcCktPmF0ZS5Nb2RlKSAhPSBBVEVfU1RPUCkKKworLyogUlQyODgwX2lOSUMgd2lsbCBkZWZpbmUgIlJUMjg2MCIuICovCisKKy8qIFJUMjg4MF9pTklDIHdpbGwgZGVmaW5lIFJUMjg2MC4gKi8KKworI2lmZGVmIFJUMjg3MAorI2RlZmluZSBFRVBST01fU0laRQkJCQkJCQkJMHg0MDAKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNkZWZpbmUgRUVQUk9NX0JJTl9GSUxFX05BTUUgICIvZXRjL1dpcmVsZXNzL1JUMjg3MFNUQS9lMnAuYmluIgorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIEFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKF9BLCBfSSwgX3BWKSAgICBSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpCisjZGVmaW5lIEFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChfQSwgX0ksIF9WKSAgICBSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKF9BLCBfSSwgX1YpCisKKyNkZWZpbmUgQlVMS19PVVRfTE9DSyhwTG9jaywgSXJxRmxhZ3MpCVwKKwkJaWYoMSAvKiEoaW5faW50ZXJydXB0KCkgJiAweGZmZmYwMDAwKSovKQlcCisJCQlSVE1QX0lSUV9MT0NLKChwTG9jayksIElycUZsYWdzKTsKKworI2RlZmluZSBCVUxLX09VVF9VTkxPQ0socExvY2ssIElycUZsYWdzKQlcCisJCWlmKDEgLyohKGluX2ludGVycnVwdCgpICYgMHhmZmZmMDAwMCkqLykJXAorCQkJUlRNUF9JUlFfVU5MT0NLKChwTG9jayksIElycUZsYWdzKTsKKworLy8gUHJvdG90eXBlcyBvZiBjb21wbGV0aW9uIGZ1bnVjLgorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorI2RlZmluZSBBVEVfUlRVU0JCdWxrT3V0RGF0YVBhY2tldENvbXBsZXRlKHB1cmIsIHB0X3JlZ3MpICAgIEFURV9SVFVTQkJ1bGtPdXREYXRhUGFja2V0Q29tcGxldGUocHVyYikKKyNlbmRpZgorCitWT0lEIEFURV9SVFVTQkJ1bGtPdXREYXRhUGFja2V0Q29tcGxldGUoCisJSU4gcHVyYmJfdCBwdXJiLAorCU9VVCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncyk7CisKK1ZPSUQgQVRFX1JUVVNCQnVsa091dERhdGFQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlCdWxrT3V0UGlwZUlkKTsKKworVk9JRCBBVEVfUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2lmZGVmIFJUMzB4eAorI2RlZmluZSBBVEVfUkZfSU9fUkVBRDhfQllfUkVHX0lEKF9BLCBfSSwgX3BWKSAgICAgUlRNUF9SRl9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpCisjZGVmaW5lIEFURV9SRl9JT19XUklURThfQllfUkVHX0lEKF9BLCBfSSwgX1YpICAgICBSVE1QX1JGX0lPX1dSSVRFOF9CWV9SRUdfSUQoX0EsIF9JLCBfVikKKyNlbmRpZiAvLyBSVDMweHggLy8KKworCitWT0lEIHJ0X2VlX3JlYWRfYWxsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCU9VVCBVU0hPUlQgKkRhdGEpOworCisKK1ZPSUQgcnRfZWVfd3JpdGVfYWxsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVU0hPUlQgKkRhdGEpOworCitJTlQgU2V0X0FURV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX0RBX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfU0FfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9CU1NJRF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX0NIQU5ORUxfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9UWF9QT1dFUjBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9UWF9QT1dFUjFfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9UWF9BbnRlbm5hX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfUlhfQW50ZW5uYV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1RYX0ZSRVFPRkZTRVRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9UWF9CV19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1RYX0xFTkdUSF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1RYX0NPVU5UX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfVFhfTUNTX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9BVEVfVFhfTU9ERV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1RYX0dJX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworCitJTlQJU2V0X0FURV9SWF9GRVJfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0FURV9SZWFkX1JGX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9BVEVfV3JpdGVfUkYxX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9BVEVfV3JpdGVfUkYyX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9BVEVfV3JpdGVfUkYzX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9BVEVfV3JpdGVfUkY0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9BVEVfTG9hZF9FMlBfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0FURV9SZWFkX0UyUF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQVRFX1Nob3dfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0FURV9IZWxwX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworI2lmZGVmIFJBTElOS19BVEUKKyNpZmRlZiBSQUxJTktfMjh4eF9RQQorVk9JRCBBVEVfUUFfU3RhdGlzdGljcygKKwlJTiBQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4gUFJYV0lfU1RSVUMJCQlwUnhXSSwKKwlJTiBQUlQyOFhYX1JYRF9TVFJVQyAgICBwMjh4eFJ4RCwKKwlJTiBQSEVBREVSXzgwMl8xMQkJcEhlYWRlcik7CisKK1ZPSUQgUnRtcERvQXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4Jc3RydWN0IGl3cmVxCSp3cnEpOworCitWT0lEIEJ1YmJsZVNvcnQoCisJSU4gIElOVDMyIG4sCisJSU4gIElOVDMyIGFbXSk7CisKK1ZPSUQgQ2FsTm9pc2VMZXZlbCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorCUlOICBVQ0hBUiAgICAgICAgICAgY2hhbm5lbCwKKwlPVVQgSU5UMzIgICAgICAgICAgIGJ1ZmZlclszXVsxMF0pOworCitCT09MRUFOIFN5bmNUeFJ4Q29uZmlnKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4JVVNIT1JUCQkJb2Zmc2V0LAorCUlOCVVDSEFSCQkJdmFsdWUpOworCitJTlQgU2V0X1R4U3RvcF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfUnhTdG9wX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCitWT0lEIEFURUFzaWNTd2l0Y2hDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBVEVBc2ljQWRqdXN0VHhQb3dlcigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgQVRFRGlzYWJsZUFzaWNQcm90ZWN0KAorCUlOCQlQUlRNUF9BREFQVEVSCXBBZCk7CisKK0NIQVIgQVRFQ29udmVydFRvUnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSICBwQWQsCisJSU4gQ0hBUgkJCQlSc3NpLAorCUlOIFVDSEFSICAgIFJzc2lOdW1iZXIpOworCitWT0lEIEFURVNhbXBsZVJzc2koCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gUFJYV0lfU1RSVUMJCXBSeFdJKTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitWT0lEIFJUTVBTdGF0aW9uU3RvcCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgUlRNUFN0YXRpb25TdGFydCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisjZW5kaWYgLy8gX19BVEVfSF9fIC8vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2NvbmZpZy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTA2NDE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9jb25maWcuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlydF9jb25maWcuaAorCisJQWJzdHJhY3Q6CisJQ2VudHJhbCBoZWFkZXIgZmlsZSB0byBtYWludGFpbiBhbGwgaW5jbHVkZSBmaWxlcyBmb3IgYWxsIE5ESVMKKwltaW5pcG9ydCBkcml2ZXIgcm91dGluZXMuCisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorCS0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVBhdWwgTGluICAgIDA4LTAxLTIwMDIgICAgY3JlYXRlZAorCisqLworI2lmbmRlZglfX1JUX0NPTkZJR19IX18KKyNkZWZpbmUJX19SVF9DT05GSUdfSF9fCisKKyNpbmNsdWRlICAgICJydG1wX3R5cGUuaCIKKyNpZmRlZiBVQ09TCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgCSJydF91Y29zLmgiCisjZW5kaWYKKworI2lmZGVmIExJTlVYCisjaW5jbHVkZQkicnRfbGludXguaCIKKyNlbmRpZgorI2luY2x1ZGUgICAgInJ0bXBfZGVmLmgiCisjaW5jbHVkZSAgICAicnQyOHh4LmgiCisKKworI2lmZGVmIFJUMjg3MAorI2luY2x1ZGUJInJ0Mjg3MC5oIgorI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaW5jbHVkZSAgICAib2lkLmgiCisjaW5jbHVkZSAgICAibWxtZS5oIgorI2luY2x1ZGUgICAgIndwYS5oIgorI2luY2x1ZGUgICAgIm1kNS5oIgorI2luY2x1ZGUgICAgInJ0bXAuaCIKKyNpbmNsdWRlCSJhcC5oIgorI2luY2x1ZGUJImRmcy5oIgorI2luY2x1ZGUJImNobGlzdC5oIgorI2luY2x1ZGUJInNwZWN0cnVtLmgiCisjaWZkZWYgTUxNRV9FWAorI2luY2x1ZGUJIm1sbWVfZXhfZGVmLmgiCisjaW5jbHVkZQkibWxtZV9leC5oIgorI2VuZGlmIC8vIE1MTUVfRVggLy8KKworI3VuZGVmIEFQX1dTQ19JTkNMVURFRAorI3VuZGVmIFNUQV9XU0NfSU5DTFVERUQKKyN1bmRlZiBXU0NfSU5DTFVERUQKKworCisjaWZkZWYgTEVBUF9TVVBQT1JUCisjaW5jbHVkZSAgICAibGVhcC5oIgorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBCTE9DS19ORVRfSUYKKyNpbmNsdWRlICJuZXRpZl9ibG9jay5oIgorI2VuZGlmIC8vIEJMT0NLX05FVF9JRiAvLworCisjaWZkZWYgSUdNUF9TTk9PUF9TVVBQT1JUCisjaW5jbHVkZSAiaWdtcF9zbm9vcC5oIgorI2VuZGlmIC8vIElHTVBfU05PT1BfU1VQUE9SVCAvLworCisjaWZkZWYgUkFMSU5LX0FURQorI2luY2x1ZGUgInJ0X2F0ZS5oIgorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworCisKKyNpZiBkZWZpbmVkKEFQX1dTQ19JTkNMVURFRCkgfHwgZGVmaW5lZChTVEFfV1NDX0lOQ0xVREVEKQorI2RlZmluZSBXU0NfSU5DTFVERUQKKyNlbmRpZgorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmbmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjZXJyb3IgIkJ1aWxkIGZvciBiZWluZyBjb250cm9sbGVkIGJ5IE5ldHdvcmtNYW5hZ2VyIG9yIHdleHQsIHBsZWFzZSBzZXQgSEFTX1dQQV9TVVBQTElDQU5UPXkgYW5kIEhBU19OQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVD15IgorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworI2lmZGVmIElLQU5PU19WWF8xWDAKKyNpbmNsdWRlCSJ2cl9pa2Fucy5oIgorI2VuZGlmIC8vIElLQU5PU19WWF8xWDAgLy8KKworI2VuZGlmCS8vIF9fUlRfQ09ORklHX0hfXworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2xpbnV4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYzMzg1MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfbGludXguYwpAQCAtMCwwICsxLDEwNjMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpbmNsdWRlICJydF9jb25maWcuaCIKKworVUxPTkcJUlREZWJ1Z0xldmVsID0gUlRfREVCVUdfRVJST1I7CisKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKE1sbWVQZXJpb2RpY0V4ZWMpOworLy9CVUlMRF9USU1FUl9GVU5DVElPTihNbG1lUnNzaVJlcG9ydEV4ZWMpOworQlVJTERfVElNRVJfRlVOQ1RJT04oQXNpY1J4QW50RXZhbFRpbWVvdXQpOworQlVJTERfVElNRVJfRlVOQ1RJT04oQVBTRFBlcmlvZGljRXhlYyk7CitCVUlMRF9USU1FUl9GVU5DVElPTihBc2ljUmZUdW5pbmdFeGVjKTsKKyNpZmRlZiBSVDI4NzAKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKEJlYWNvblVwZGF0ZUV4ZWMpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKEJlYWNvblRpbWVvdXQpOworQlVJTERfVElNRVJfRlVOQ1RJT04oU2NhblRpbWVvdXQpOworQlVJTERfVElNRVJfRlVOQ1RJT04oQXV0aFRpbWVvdXQpOworQlVJTERfVElNRVJfRlVOQ1RJT04oQXNzb2NUaW1lb3V0KTsKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKFJlYXNzb2NUaW1lb3V0KTsKK0JVSUxEX1RJTUVSX0ZVTkNUSU9OKERpc2Fzc29jVGltZW91dCk7CitCVUlMRF9USU1FUl9GVU5DVElPTihMaW5rRG93bkV4ZWMpOworI2lmZGVmIExFQVBfU1VQUE9SVAorQlVJTERfVElNRVJfRlVOQ1RJT04oTGVhcEF1dGhUaW1lb3V0KTsKKyNlbmRpZgorQlVJTERfVElNRVJfRlVOQ1RJT04oU3RhUXVpY2tSZXNwb25lRm9yUmF0ZVVwRXhlYyk7CitCVUlMRF9USU1FUl9GVU5DVElPTihXcGFEaXNhc3NvY0FwQW5kQmxvY2tBc3NvYyk7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCitCVUlMRF9USU1FUl9GVU5DVElPTihEbHNUaW1lb3V0QWN0aW9uKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisKKworLy8gZm9yIHdpcmVsZXNzIHN5c3RlbSBldmVudCBtZXNzYWdlCitjaGFyIGNvbnN0ICpwV2lyZWxlc3NTeXNFdmVudFRleHRbSVdfU1lTX0VWRU5UX1RZUEVfTlVNXSA9IHsKKwkvLyBzeXN0ZW0gc3RhdHVzIGV2ZW50CisgICAgImhhZCBhc3NvY2lhdGVkIHN1Y2Nlc3NmdWxseSIsCQkJCQkJCS8qIElXX0FTU09DX0VWRU5UX0ZMQUcgKi8KKyAgICAiaGFkIGRpc2Fzc29jaWF0ZWQiLAkJCQkJCQkJCS8qIElXX0RJU0FTU09DX0VWRU5UX0ZMQUcgKi8KKyAgICAiaGFkIGRlYXV0aGVudGljYXRlZCIsCQkJCQkJCQkJLyogSVdfREVBVVRIX0VWRU5UX0ZMQUcgKi8KKyAgICAiaGFkIGJlZW4gYWdlZC1vdXQgYW5kIGRpc2Fzc29jaWF0ZWQiLAkJCQkJLyogSVdfQUdFT1VUX0VWRU5UX0ZMQUcgKi8KKyAgICAib2NjdXJyZWQgQ291bnRlck1lYXN1cmVzIGF0dGFjayIsCQkJCQkJLyogSVdfQ09VTlRFUl9NRUFTVVJFU19FVkVOVF9GTEFHICovCisgICAgIm9jY3VycmVkIHJlcGxheSBjb3VudGVyIGRpZmZlcmVudCBpbiBLZXkgSGFuZHNoYWtpbmciLAkvKiBJV19SRVBMQVlfQ09VTlRFUl9ESUZGX0VWRU5UX0ZMQUcgKi8KKyAgICAib2NjdXJyZWQgUlNOSUUgZGlmZmVyZW50IGluIEtleSBIYW5kc2hha2luZyIsCQkJLyogSVdfUlNOSUVfRElGRl9FVkVOVF9GTEFHICovCisgICAgIm9jY3VycmVkIE1JQyBkaWZmZXJlbnQgaW4gS2V5IEhhbmRzaGFraW5nIiwJCQkvKiBJV19NSUNfRElGRl9FVkVOVF9GTEFHICovCisgICAgIm9jY3VycmVkIElDViBlcnJvciBpbiBSWCIsCQkJCQkJCQkvKiBJV19JQ1ZfRVJST1JfRVZFTlRfRkxBRyAqLworICAgICJvY2N1cnJlZCBNSUMgZXJyb3IgaW4gUlgiLAkJCQkJCQkJLyogSVdfTUlDX0VSUk9SX0VWRU5UX0ZMQUcgKi8KKwkiR3JvdXAgS2V5IEhhbmRzaGFraW5nIHRpbWVvdXQiLAkJCQkJCS8qIElXX0dST1VQX0hTX1RJTUVPVVRfRVZFTlRfRkxBRyAqLworCSJQYWlyd2lzZSBLZXkgSGFuZHNoYWtpbmcgdGltZW91dCIsCQkJCQkJLyogSVdfUEFJUldJU0VfSFNfVElNRU9VVF9FVkVOVF9GTEFHICovCisJIlJTTiBJRSBzYW5pdHkgY2hlY2sgZmFpbHVyZSIsCQkJCQkJCS8qIElXX1JTTklFX1NBTklUWV9GQUlMX0VWRU5UX0ZMQUcgKi8KKwkic2V0IGtleSBkb25lIGluIFdQQS9XUEFQU0siLAkJCQkJCQkvKiBJV19TRVRfS0VZX0RPTkVfV1BBMV9FVkVOVF9GTEFHICovCisJInNldCBrZXkgZG9uZSBpbiBXUEEyL1dQQTJQU0siLCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJV19TRVRfS0VZX0RPTkVfV1BBMl9FVkVOVF9GTEFHICovCisJImNvbm5lY3RzIHdpdGggb3VyIHdpcmVsZXNzIGNsaWVudCIsICAgICAgICAgICAgICAgICAgICAvKiBJV19TVEFfTElOS1VQX0VWRU5UX0ZMQUcgKi8KKwkiZGlzY29ubmVjdHMgd2l0aCBvdXIgd2lyZWxlc3MgY2xpZW50IiwgICAgICAgICAgICAgICAgIC8qIElXX1NUQV9MSU5LRE9XTl9FVkVOVF9GTEFHICovCisJInNjYW4gY29tcGxldGVkIgkJCQkJCQkJCQkvKiBJV19TQ0FOX0NPTVBMRVRFRF9FVkVOVF9GTEFHICovCisJInNjYW4gdGVybWluYXRlISEgQnVzeSEhIEVucXVldWUgZmFpbCEhIgkJCQkvKiBJV19TQ0FOX0VOUVVFVUVfRkFJTF9FVkVOVF9GTEFHICovCisJfTsKKworLy8gZm9yIHdpcmVsZXNzIElEU19zcG9vZl9hdHRhY2sgZXZlbnQgbWVzc2FnZQorY2hhciBjb25zdCAqcFdpcmVsZXNzU3Bvb2ZFdmVudFRleHRbSVdfU1BPT0ZfRVZFTlRfVFlQRV9OVU1dID0geworICAgICJkZXRlY3RlZCBjb25mbGljdCBTU0lEIiwJCQkJCQkJCS8qIElXX0NPTkZMSUNUX1NTSURfRVZFTlRfRkxBRyAqLworICAgICJkZXRlY3RlZCBzcG9vZmVkIGFzc29jaWF0aW9uIHJlc3BvbnNlIiwJCQkJLyogSVdfU1BPT0ZfQVNTT0NfUkVTUF9FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIHNwb29mZWQgcmVhc3NvY2lhdGlvbiByZXNwb25zZXMiLAkJCQkvKiBJV19TUE9PRl9SRUFTU09DX1JFU1BfRVZFTlRfRkxBRyAqLworICAgICJkZXRlY3RlZCBzcG9vZmVkIHByb2JlIHJlc3BvbnNlIiwJCQkJCQkvKiBJV19TUE9PRl9QUk9CRV9SRVNQX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgc3Bvb2ZlZCBiZWFjb24iLAkJCQkJCQkJLyogSVdfU1BPT0ZfQkVBQ09OX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgc3Bvb2ZlZCBkaXNhc3NvY2lhdGlvbiIsCQkJCQkJLyogSVdfU1BPT0ZfRElTQVNTT0NfRVZFTlRfRkxBRyAqLworICAgICJkZXRlY3RlZCBzcG9vZmVkIGF1dGhlbnRpY2F0aW9uIiwJCQkJCQkvKiBJV19TUE9PRl9BVVRIX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgc3Bvb2ZlZCBkZWF1dGhlbnRpY2F0aW9uIiwJCQkJCS8qIElXX1NQT09GX0RFQVVUSF9FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIHNwb29mZWQgdW5rbm93biBtYW5hZ2VtZW50IGZyYW1lIiwJCQkvKiBJV19TUE9PRl9VTktOT1dOX01HTVRfRVZFTlRfRkxBRyAqLworCSJkZXRlY3RlZCByZXBsYXkgYXR0YWNrIgkJCQkJCQkJLyogSVdfUkVQTEFZX0FUVEFDS19FVkVOVF9GTEFHICovCisJfTsKKworLy8gZm9yIHdpcmVsZXNzIElEU19mbG9vZGluZ19hdHRhY2sgZXZlbnQgbWVzc2FnZQorY2hhciBjb25zdCAqcFdpcmVsZXNzRmxvb2RFdmVudFRleHRbSVdfRkxPT0RfRVZFTlRfVFlQRV9OVU1dID0geworCSJkZXRlY3RlZCBhdXRoZW50aWNhdGlvbiBmbG9vZGluZyIsCQkJCQkJLyogSVdfRkxPT0RfQVVUSF9FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIGFzc29jaWF0aW9uIHJlcXVlc3QgZmxvb2RpbmciLAkJCQkvKiBJV19GTE9PRF9BU1NPQ19SRVFfRVZFTlRfRkxBRyAqLworICAgICJkZXRlY3RlZCByZWFzc29jaWF0aW9uIHJlcXVlc3QgZmxvb2RpbmciLAkJCQkvKiBJV19GTE9PRF9SRUFTU09DX1JFUV9FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIHByb2JlIHJlcXVlc3QgZmxvb2RpbmciLAkJCQkJCS8qIElXX0ZMT09EX1BST0JFX1JFUV9FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIGRpc2Fzc29jaWF0aW9uIGZsb29kaW5nIiwJCQkJCQkvKiBJV19GTE9PRF9ESVNBU1NPQ19FVkVOVF9GTEFHICovCisgICAgImRldGVjdGVkIGRlYXV0aGVudGljYXRpb24gZmxvb2RpbmciLAkJCQkJLyogSVdfRkxPT0RfREVBVVRIX0VWRU5UX0ZMQUcgKi8KKyAgICAiZGV0ZWN0ZWQgODAyLjF4IGVhcC1yZXF1ZXN0IGZsb29kaW5nIgkJCQkJLyogSVdfRkxPT0RfRUFQX1JFUV9FVkVOVF9GTEFHICovCisJfTsKKworCisvKiB0aW1lb3V0IC0tIG1zICovCitWT0lEIFJUTVBfU2V0UGVyaW9kaWNUaW1lcigKKwlJTglORElTX01JTklQT1JUX1RJTUVSICpwVGltZXIsCisJSU4JdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoreworCXRpbWVvdXQgPSAoKHRpbWVvdXQqSFopIC8gMTAwMCk7CisJcFRpbWVyLT5leHBpcmVzID0gamlmZmllcyArIHRpbWVvdXQ7CisJYWRkX3RpbWVyKHBUaW1lcik7Cit9CisKKy8qIGNvbnZlcnQgTmRpc01Jbml0aWFsaXplVGltZXIgLS0+IFJUTVBfT1NfSW5pdF9UaW1lciAqLworVk9JRCBSVE1QX09TX0luaXRfVGltZXIoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JTkRJU19NSU5JUE9SVF9USU1FUiAqcFRpbWVyLAorCUlOCVRJTUVSX0ZVTkNUSU9OIGZ1bmN0aW9uLAorCUlOCVBWT0lEIGRhdGEpCit7CisJaW5pdF90aW1lcihwVGltZXIpOworICAgIHBUaW1lci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRhdGE7CisgICAgcFRpbWVyLT5mdW5jdGlvbiA9IGZ1bmN0aW9uOworfQorCisKK1ZPSUQgUlRNUF9PU19BZGRfVGltZXIoCisJSU4JTkRJU19NSU5JUE9SVF9USU1FUgkJKnBUaW1lciwKKwlJTgl1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJaWYgKHRpbWVyX3BlbmRpbmcocFRpbWVyKSkKKwkJcmV0dXJuOworCisJdGltZW91dCA9ICgodGltZW91dCpIWikgLyAxMDAwKTsKKwlwVGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgdGltZW91dDsKKwlhZGRfdGltZXIocFRpbWVyKTsKK30KKworVk9JRCBSVE1QX09TX01vZF9UaW1lcigKKwlJTglORElTX01JTklQT1JUX1RJTUVSCQkqcFRpbWVyLAorCUlOCXVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwl0aW1lb3V0ID0gKCh0aW1lb3V0KkhaKSAvIDEwMDApOworCW1vZF90aW1lcihwVGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTsKK30KKworVk9JRCBSVE1QX09TX0RlbF9UaW1lcigKKwlJTglORElTX01JTklQT1JUX1RJTUVSCQkqcFRpbWVyLAorCU9VVAlCT09MRUFOCQkJCQkqcENhbmNlbGxlZCkKK3sKKwlpZiAodGltZXJfcGVuZGluZyhwVGltZXIpKQorCXsKKwkJKnBDYW5jZWxsZWQgPSBkZWxfdGltZXJfc3luYyhwVGltZXIpOworCX0KKwllbHNlCisJeworCQkqcENhbmNlbGxlZCA9IFRSVUU7CisJfQorCit9CisKK1ZPSUQgUlRNUF9PU19SZWxlYXNlX1BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglQUVVFVUVfRU5UUlkgIHBFbnRyeSkKK3sKKwkvL1JUTVBGcmVlTmRpc1BhY2tldChwQWQsIChzdHJ1Y3Qgc2tfYnVmZiAqKXBFbnRyeSk7Cit9CisKKy8vIFVuaWZ5IGFsbCBkZWxheSByb3V0aW5lIGJ5IHVzaW5nIHVkZWxheQorVk9JRCBSVE1QdXNlY0RlbGF5KAorCUlOCVVMT05HCXVzZWMpCit7CisJVUxPTkcJaTsKKworCWZvciAoaSA9IDA7IGkgPCAodXNlYyAvIDUwKTsgaSsrKQorCQl1ZGVsYXkoNTApOworCisJaWYgKHVzZWMgJSA1MCkKKwkJdWRlbGF5KHVzZWMgJSA1MCk7Cit9CisKK3ZvaWQgUlRNUF9HZXRDdXJyZW50U3lzdGVtVGltZShMQVJHRV9JTlRFR0VSICp0aW1lKQoreworCXRpbWUtPnUuTG93UGFydCA9IGppZmZpZXM7Cit9CisKKy8vIHBBZCBNVVNUIGFsbG93IHRvIGJlIE5VTEwKK05ESVNfU1RBVFVTIG9zX2FsbG9jX21lbSgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlPVVQJUFVDSEFSICptZW0sCisJSU4JVUxPTkcgIHNpemUpCit7CisJKm1lbSA9IChQVUNIQVIpIGttYWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKCptZW0pCisJCXJldHVybiAoTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisJZWxzZQorCQlyZXR1cm4gKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworfQorCisvLyBwQWQgTVVTVCBhbGxvdyB0byBiZSBOVUxMCitORElTX1NUQVRVUyBvc19mcmVlX21lbSgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglQVUNIQVIgbWVtKQoreworCisJQVNTRVJUKG1lbSk7CisJa2ZyZWUobWVtKTsKKwlyZXR1cm4gKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworfQorCisKK1BORElTX1BBQ0tFVCBSVE1QX0FsbG9jYXRlRnJhZ1BhY2tldEJ1ZmZlcigKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVTE9ORwlMZW5ndGgpCit7CisJc3RydWN0IHNrX2J1ZmYgKnBrdDsKKworCXBrdCA9IGRldl9hbGxvY19za2IoTGVuZ3RoKTsKKworCWlmIChwa3QgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNhbid0IGFsbG9jYXRlIGZyYWcgcnggJWxkIHNpemUgcGFja2V0XG4iLExlbmd0aCkpOworCX0KKworCWlmIChwa3QpCisJeworCQlSVE1QX1NFVF9QQUNLRVRfU09VUkNFKE9TUEtUX1RPX1JUUEtUKHBrdCksIFBLVFNSQ19ORElTKTsKKwl9CisKKwlyZXR1cm4gKFBORElTX1BBQ0tFVCkgcGt0OworfQorCisKK1BORElTX1BBQ0tFVCBSVE1QX0FsbG9jYXRlVHhQYWNrZXRCdWZmZXIoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JVUxPTkcJTGVuZ3RoLAorCUlOCUJPT0xFQU4JQ2FjaGVkLAorCU9VVAlQVk9JRAkqVmlydHVhbEFkZHJlc3MpCit7CisJc3RydWN0IHNrX2J1ZmYgKnBrdDsKKworCXBrdCA9IGRldl9hbGxvY19za2IoTGVuZ3RoKTsKKworCWlmIChwa3QgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoImNhbid0IGFsbG9jYXRlIHR4ICVsZCBzaXplIHBhY2tldFxuIixMZW5ndGgpKTsKKwl9CisKKwlpZiAocGt0KQorCXsKKwkJUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShPU1BLVF9UT19SVFBLVChwa3QpLCBQS1RTUkNfTkRJUyk7CisJCSpWaXJ0dWFsQWRkcmVzcyA9IChQVk9JRCkgcGt0LT5kYXRhOworCX0KKwllbHNlCisJeworCQkqVmlydHVhbEFkZHJlc3MgPSAoUFZPSUQpIE5VTEw7CisJfQorCisJcmV0dXJuIChQTkRJU19QQUNLRVQpIHBrdDsKK30KKworCitWT0lEIGJ1aWxkX3R4X3BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCwKKwlJTglQVUNIQVIJcEZyYW1lLAorCUlOCVVMT05HCUZyYW1lTGVuKQoreworCisJc3RydWN0IHNrX2J1ZmYJKnBUeFBrdDsKKworCUFTU0VSVChwUGFja2V0KTsKKwlwVHhQa3QgPSBSVFBLVF9UT19PU1BLVChwUGFja2V0KTsKKworCU5kaXNNb3ZlTWVtb3J5KHNrYl9wdXQocFR4UGt0LCBGcmFtZUxlbiksIHBGcmFtZSwgRnJhbWVMZW4pOworfQorCitWT0lECVJUTVBGcmVlQWRhcHRlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCkKK3sKKyAgICBQT1NfQ09PS0lFIG9zX2Nvb2tpZTsKKwlpbnQgaW5kZXg7CisKKwlvc19jb29raWU9KFBPU19DT09LSUUpcEFkLT5PU19Db29raWU7CisKKwlrZnJlZShwQWQtPkJlYWNvbkJ1Zik7CisKKworCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+TWdtdFJpbmdMb2NrKTsKKworCisJZm9yIChpbmRleCA9MCA7IGluZGV4IDwgTlVNX09GX1RYX1JJTkc7IGluZGV4KyspCisJeworICAgIAlOZGlzRnJlZVNwaW5Mb2NrKCZwQWQtPlR4U3dRdWV1ZUxvY2tbaW5kZXhdKTsKKwkJTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5EZVF1ZXVlTG9ja1tpbmRleF0pOworCQlwQWQtPkRlUXVldWVSdW5uaW5nW2luZGV4XSA9IEZBTFNFOworCX0KKworCU5kaXNGcmVlU3BpbkxvY2soJnBBZC0+aXJxX2xvY2spOworCisKKwl2ZnJlZShwQWQpOyAvLyBwY2lfZnJlZV9jb25zaXN0ZW50KG9zX2Nvb2tpZS0+cGNpX2RldixzaXplb2YoUlRNUF9BREFQVEVSKSxwQWQsb3NfY29va2llLT5wQWRfcGEpOworCWtmcmVlKG9zX2Nvb2tpZSk7Cit9CisKK0JPT0xFQU4gT1NfTmVlZF9DbG9uZV9QYWNrZXQodm9pZCkKK3sKKwlyZXR1cm4gKEZBTFNFKTsKK30KKworCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQljbG9uZSBhbiBpbnB1dCBORElTIFBBQ0tFVCB0byBhbm90aGVyIG9uZS4gVGhlIG5ldyBpbnRlcm5hbGx5IGNyZWF0ZWQgTkRJUyBQQUNLRVQKKwkJbXVzdCBoYXZlIG9ubHkgb25lIE5ESVMgQlVGRkVSCisJCXJldHVybiAtIGJ5dGUgY29waWVkLiAwIG1lYW5zIGNhbid0IGNyZWF0ZSBORElTIFBBQ0tFVAorCQlOT1RFOiBpbnRlcm5hbGx5IGNyZWF0ZWQgTkRJU19QQUNLRVQgc2hvdWxkIGJlIGRlc3Ryb3llZCBieSBSVE1QRnJlZU5kaXNQYWNrZXQKKworCUFyZ3VtZW50czoKKwkJcEFkIAlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCXBJbnNBTVNEVUhkcglFV0MgQS1NU0RVIGZvcm1hdCBoYXMgZXh0cmEgMTQtYnl0ZXMgaGVhZGVyLiBpZiBUUlVFLCBpbnNlcnQgdGhpcyAxNC1ieXRlIGhkciBpbiBmcm9udCBvZiBNU0RVLgorCQkqcFNyY1RvdGFsTGVuCQkJcmV0dXJuIHRvdGFsIHBhY2tldCBsZW5ndGguIFRoaXMgbGVuZ2h0IGlzIGNhbGN1bGF0ZWQgd2l0aCA4MDIuMyBmb3JtYXQgcGFja2V0LgorCisJUmV0dXJuIFZhbHVlOgorCQlORElTX1NUQVRVU19TVUNDRVNTCisJCU5ESVNfU1RBVFVTX0ZBSUxVUkUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUyBSVE1QQ2xvbmVOZGlzUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCUJPT0xFQU4JCQlwSW5zQU1TRFVIZHIsCisJSU4JUE5ESVNfUEFDS0VUCXBJblBhY2tldCwKKwlPVVQgUE5ESVNfUEFDS0VUICAgKnBwT3V0UGFja2V0KQoreworCisJc3RydWN0IHNrX2J1ZmYgKnBrdDsKKworCUFTU0VSVChwSW5QYWNrZXQpOworCUFTU0VSVChwcE91dFBhY2tldCk7CisKKwkvLyAxLiBBbGxvY2F0ZSBhIHBhY2tldAorCXBrdCA9IGRldl9hbGxvY19za2IoMjA0OCk7CisKKwlpZiAocGt0ID09IE5VTEwpCisJeworCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKyAJc2tiX3B1dChwa3QsIEdFVF9PU19QS1RfTEVOKHBJblBhY2tldCkpOworCU5kaXNNb3ZlTWVtb3J5KHBrdC0+ZGF0YSwgR0VUX09TX1BLVF9EQVRBUFRSKHBJblBhY2tldCksIEdFVF9PU19QS1RfTEVOKHBJblBhY2tldCkpOworCSpwcE91dFBhY2tldCA9IE9TUEtUX1RPX1JUUEtUKHBrdCk7CisKKworCVJUTVBfU0VUX1BBQ0tFVF9TT1VSQ0UoT1NQS1RfVE9fUlRQS1QocGt0KSwgUEtUU1JDX05ESVMpOworCisJcHJpbnRrKCIjIyNDbG9uZSMjI1xuIik7CisKKwlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKK30KKworCisvLyB0aGUgYWxsb2NhdGVkIE5ESVMgUEFDS0VUIG11c3QgYmUgZnJlZWQgdmlhIFJUTVBGcmVlTmRpc1BhY2tldCgpCitORElTX1NUQVRVUyBSVE1QQWxsb2NhdGVOZGlzUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCU9VVCBQTkRJU19QQUNLRVQgICAqcHBQYWNrZXQsCisJSU4JUFVDSEFSCQkJcEhlYWRlciwKKwlJTglVSU5UCQkJSGVhZGVyTGVuLAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVJTlQJCQlEYXRhTGVuKQoreworCVBORElTX1BBQ0tFVAlwUGFja2V0OworCUFTU0VSVChwRGF0YSk7CisJQVNTRVJUKERhdGFMZW4pOworCisJLy8gMS4gQWxsb2NhdGUgYSBwYWNrZXQKKwlwUGFja2V0ID0gKFBORElTX1BBQ0tFVCAqKSBkZXZfYWxsb2Nfc2tiKEhlYWRlckxlbiArIERhdGFMZW4gKyBUWFBBRERJTkdfU0laRSk7CisJaWYgKHBQYWNrZXQgPT0gTlVMTCkKKyAJeworCQkqcHBQYWNrZXQgPSBOVUxMOworI2lmZGVmIERFQlVHCisJCXByaW50aygiUlRNUEFsbG9jYXRlTmRpc1BhY2tldCBGYWlsXG5cbiIpOworI2VuZGlmCisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCS8vIDIuIGNsb25lIHRoZSBmcmFtZSBjb250ZW50CisJaWYgKEhlYWRlckxlbiA+IDApCisJCU5kaXNNb3ZlTWVtb3J5KEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KSwgcEhlYWRlciwgSGVhZGVyTGVuKTsKKwlpZiAoRGF0YUxlbiA+IDApCisJCU5kaXNNb3ZlTWVtb3J5KEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KSArIEhlYWRlckxlbiwgcERhdGEsIERhdGFMZW4pOworCisJLy8gMy4gdXBkYXRlIGxlbmd0aCBvZiBwYWNrZXQKKyAJc2tiX3B1dChHRVRfT1NfUEtUX1RZUEUocFBhY2tldCksIEhlYWRlckxlbitEYXRhTGVuKTsKKworCVJUTVBfU0VUX1BBQ0tFVF9TT1VSQ0UocFBhY2tldCwgUEtUU1JDX05ESVMpOworLy8JcHJpbnRrKCIlcyA6IHBQYWNrZXQgPSAlcCwgbGVuID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcFBhY2tldCwgR0VUX09TX1BLVF9MRU4ocFBhY2tldCkpOworCSpwcFBhY2tldCA9IHBQYWNrZXQ7CisJcmV0dXJuIE5ESVNfU1RBVFVTX1NVQ0NFU1M7Cit9CisKKy8qCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICBEZXNjcmlwdGlvbjoKKwlUaGlzIHJvdXRpbmUgZnJlZXMgYSBtaW5pcG9ydCBpbnRlcm5hbGx5IGFsbG9jYXRlZCBORElTX1BBQ0tFVCBhbmQgaXRzCisJY29ycmVzcG9uZGluZyBORElTX0JVRkZFUiBhbmQgYWxsb2NhdGVkIG1lbW9yeS4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QRnJlZU5kaXNQYWNrZXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUE5ESVNfUEFDS0VUICBwUGFja2V0KQoreworCWRldl9rZnJlZV9za2JfYW55KFJUUEtUX1RPX09TUEtUKHBQYWNrZXQpKTsKK30KKworCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKKy8vIE5PVEU6IHdlIGRvIGhhdmUgYW4gYXNzdW1wdGlvbiBoZXJlLCB0aGF0IEJ5dGUwIGFuZCBCeXRlMSBhbHdheXMgcmVhc2lkIGF0IHRoZSBzYW1lCisvLwkJCSBzY2F0dGVyIGdhdGhlciBidWZmZXIKK05ESVNfU1RBVFVTIFNuaWZmMkJ5dGVzRnJvbU5kaXNCdWZmZXIoCisJSU4JUE5ESVNfQlVGRkVSCXBGaXJzdEJ1ZmZlciwKKwlJTglVQ0hBUgkJCURlc2lyZWRPZmZzZXQsCisJT1VUIFBVQ0hBUgkJCXBCeXRlMCwKKwlPVVQgUFVDSEFSCQkJcEJ5dGUxKQoreworICAgICpwQnl0ZTAgPSAqKFBVQ0hBUikocEZpcnN0QnVmZmVyICsgRGVzaXJlZE9mZnNldCk7CisgICAgKnBCeXRlMSA9ICooUFVDSEFSKShwRmlyc3RCdWZmZXIgKyBEZXNpcmVkT2Zmc2V0ICsgMSk7CisKKwlyZXR1cm4gTkRJU19TVEFUVVNfU1VDQ0VTUzsKK30KKworCit2b2lkIFJUTVBfUXVlcnlQYWNrZXRJbmZvKAorCUlOICBQTkRJU19QQUNLRVQgcFBhY2tldCwKKwlPVVQgUEFDS0VUX0lORk8gICpwUGFja2V0SW5mbywKKwlPVVQgUFVDSEFSCQkgKnBTcmNCdWZWQSwKKwlPVVQJVUlOVAkJICpwU3JjQnVmTGVuKQoreworCXBQYWNrZXRJbmZvLT5CdWZmZXJDb3VudCA9IDE7CisJcFBhY2tldEluZm8tPnBGaXJzdEJ1ZmZlciA9IEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KTsKKwlwUGFja2V0SW5mby0+UGh5c2ljYWxCdWZmZXJDb3VudCA9IDE7CisJcFBhY2tldEluZm8tPlRvdGFsUGFja2V0TGVuZ3RoID0gR0VUX09TX1BLVF9MRU4ocFBhY2tldCk7CisKKwkqcFNyY0J1ZlZBID0gR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCSpwU3JjQnVmTGVuID0gR0VUX09TX1BLVF9MRU4ocFBhY2tldCk7Cit9CisKK3ZvaWQgUlRNUF9RdWVyeU5leHRQYWNrZXRJbmZvKAorCUlOICBQTkRJU19QQUNLRVQgKnBwUGFja2V0LAorCU9VVCBQQUNLRVRfSU5GTyAgKnBQYWNrZXRJbmZvLAorCU9VVCBQVUNIQVIJCSAqcFNyY0J1ZlZBLAorCU9VVAlVSU5UCQkgKnBTcmNCdWZMZW4pCit7CisJUE5ESVNfUEFDS0VUIHBQYWNrZXQgPSBOVUxMOworCisJaWYgKCpwcFBhY2tldCkKKwkJcFBhY2tldCA9IEdFVF9PU19QS1RfTkVYVCgqcHBQYWNrZXQpOworCisJaWYgKHBQYWNrZXQpCisJeworCQlwUGFja2V0SW5mby0+QnVmZmVyQ291bnQgPSAxOworCQlwUGFja2V0SW5mby0+cEZpcnN0QnVmZmVyID0gR0VUX09TX1BLVF9EQVRBUFRSKHBQYWNrZXQpOworCQlwUGFja2V0SW5mby0+UGh5c2ljYWxCdWZmZXJDb3VudCA9IDE7CisJCXBQYWNrZXRJbmZvLT5Ub3RhbFBhY2tldExlbmd0aCA9IEdFVF9PU19QS1RfTEVOKHBQYWNrZXQpOworCisJCSpwU3JjQnVmVkEgPSBHRVRfT1NfUEtUX0RBVEFQVFIocFBhY2tldCk7CisJCSpwU3JjQnVmTGVuID0gR0VUX09TX1BLVF9MRU4ocFBhY2tldCk7CisJCSpwcFBhY2tldCA9IEdFVF9PU19QS1RfTkVYVChwUGFja2V0KTsKKwl9CisJZWxzZQorCXsKKwkJcFBhY2tldEluZm8tPkJ1ZmZlckNvdW50ID0gMDsKKwkJcFBhY2tldEluZm8tPnBGaXJzdEJ1ZmZlciA9IE5VTEw7CisJCXBQYWNrZXRJbmZvLT5QaHlzaWNhbEJ1ZmZlckNvdW50ID0gMDsKKwkJcFBhY2tldEluZm8tPlRvdGFsUGFja2V0TGVuZ3RoID0gMDsKKworCQkqcFNyY0J1ZlZBID0gTlVMTDsKKwkJKnBTcmNCdWZMZW4gPSAwOworCQkqcHBQYWNrZXQgPSBOVUxMOworCX0KK30KKworLy8gbm90IHlldCBzdXBwb3J0IE1CU1MKK1BORVRfREVWIGdldF9uZXRkZXZfZnJvbV9ic3NpZCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworICAgIFBORVRfREVWIGRldl9wID0gTlVMTDsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCWRldl9wID0gcEFkLT5uZXRfZGV2OworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCUFTU0VSVChkZXZfcCk7CisJcmV0dXJuIGRldl9wOyAvKiByZXR1cm4gb25lIG9mIE1CU1MgKi8KK30KKworUE5ESVNfUEFDS0VUIER1cGxpY2F0ZVBhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCwKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCXN0cnVjdCBza19idWZmCSpza2I7CisJUE5ESVNfUEFDS0VUCXBSZXRQYWNrZXQgPSBOVUxMOworCVVTSE9SVAkJCURhdGFTaXplOworCVVDSEFSCQkJKnBEYXRhOworCisJRGF0YVNpemUgPSAoVVNIT1JUKSBHRVRfT1NfUEtUX0xFTihwUGFja2V0KTsKKwlwRGF0YSA9IChQVUNIQVIpIEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KTsKKworCisJc2tiID0gc2tiX2Nsb25lKFJUUEtUX1RPX09TUEtUKHBQYWNrZXQpLCBNRU1fQUxMT0NfRkxBRyk7CisJaWYgKHNrYikKKwl7CisJCXNrYi0+ZGV2ID0gZ2V0X25ldGRldl9mcm9tX2Jzc2lkKHBBZCwgRnJvbVdoaWNoQlNTSUQpOworCQlwUmV0UGFja2V0ID0gT1NQS1RfVE9fUlRQS1Qoc2tiKTsKKwl9CisKKwlyZXR1cm4gcFJldFBhY2tldDsKKworfQorCitQTkRJU19QQUNLRVQgZHVwbGljYXRlX3BrdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwSGVhZGVyODAyXzMsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBIZHJMZW4sCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEYXRhU2l6ZSwKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCXN0cnVjdCBza19idWZmCSpza2I7CisJUE5ESVNfUEFDS0VUCXBQYWNrZXQgPSBOVUxMOworCisKKwlpZiAoKHNrYiA9IF9fZGV2X2FsbG9jX3NrYihIZHJMZW4gKyBEYXRhU2l6ZSArIDIsIE1FTV9BTExPQ19GTEFHKSkgIT0gTlVMTCkKKwl7CisJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisJCU5kaXNNb3ZlTWVtb3J5KHNrYi0+dGFpbCwgcEhlYWRlcjgwMl8zLCBIZHJMZW4pOworCQlza2JfcHV0KHNrYiwgSGRyTGVuKTsKKwkJTmRpc01vdmVNZW1vcnkoc2tiLT50YWlsLCBwRGF0YSwgRGF0YVNpemUpOworCQlza2JfcHV0KHNrYiwgRGF0YVNpemUpOworCQlza2ItPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEZyb21XaGljaEJTU0lEKTsKKwkJcFBhY2tldCA9IE9TUEtUX1RPX1JUUEtUKHNrYik7CisJfQorCisJcmV0dXJuIHBQYWNrZXQ7Cit9CisKKworI2RlZmluZSBUS0lQX1RYX01JQ19TSVpFCQk4CitQTkRJU19QQUNLRVQgZHVwbGljYXRlX3BrdF93aXRoX1RLSVBfTUlDKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KQoreworCXN0cnVjdCBza19idWZmCSpza2IsICpuZXdza2I7CisKKworCXNrYiA9IFJUUEtUX1RPX09TUEtUKHBQYWNrZXQpOworCWlmIChza2JfdGFpbHJvb20oc2tiKSA8IFRLSVBfVFhfTUlDX1NJWkUpCisJeworCQkvLyBhbGxvYyBhIG5ldyBza2IgYW5kIGNvcHkgdGhlIHBhY2tldAorCQluZXdza2IgPSBza2JfY29weV9leHBhbmQoc2tiLCBza2JfaGVhZHJvb20oc2tiKSwgVEtJUF9UWF9NSUNfU0laRSwgR0ZQX0FUT01JQyk7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCWlmIChuZXdza2IgPT0gTlVMTCkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRXh0ZW5kIFR4Lk1JQyBmb3IgcGFja2V0IGZhaWxlZCEsIGRyb3BwaW5nIHBhY2tldCFcbiIpKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXNrYiA9IG5ld3NrYjsKKwl9CisKKwlyZXR1cm4gT1NQS1RfVE9fUlRQS1Qoc2tiKTsKK30KKworCisKKworUE5ESVNfUEFDS0VUIENsb25lUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVMT05HCQkJRGF0YVNpemUpCit7CisJc3RydWN0IHNrX2J1ZmYJKnBSeFBrdDsKKwlzdHJ1Y3Qgc2tfYnVmZgkqcENsb25lZFBrdDsKKworCUFTU0VSVChwUGFja2V0KTsKKwlwUnhQa3QgPSBSVFBLVF9UT19PU1BLVChwUGFja2V0KTsKKworCS8vIGNsb25lIHRoZSBwYWNrZXQKKwlwQ2xvbmVkUGt0ID0gc2tiX2Nsb25lKHBSeFBrdCwgTUVNX0FMTE9DX0ZMQUcpOworCisJaWYgKHBDbG9uZWRQa3QpCisJeworICAgIAkvLyBzZXQgdGhlIGNvcnJlY3QgZGF0YXB0ciBhbmQgZGF0YSBsZW4KKyAgICAJcENsb25lZFBrdC0+ZGV2ID0gcFJ4UGt0LT5kZXY7CisgICAgCXBDbG9uZWRQa3QtPmRhdGEgPSBwRGF0YTsKKyAgICAJcENsb25lZFBrdC0+bGVuID0gRGF0YVNpemU7CisgICAgCXBDbG9uZWRQa3QtPnRhaWwgPSBwQ2xvbmVkUGt0LT5kYXRhICsgcENsb25lZFBrdC0+bGVuOworCQlBU1NFUlQoRGF0YVNpemUgPCAxNTMwKTsKKwl9CisJcmV0dXJuIHBDbG9uZWRQa3Q7Cit9CisKKy8vCisvLyBjaGFuZ2UgT1MgcGFja2V0IERhdGFQdHIgYW5kIERhdGFMZW4KKy8vCit2b2lkICB1cGRhdGVfb3NfcGFja2V0X2luZm8oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTiAgVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkqcE9TUGt0OworCisJQVNTRVJUKHBSeEJsay0+cFJ4UGFja2V0KTsKKwlwT1NQa3QgPSBSVFBLVF9UT19PU1BLVChwUnhCbGstPnBSeFBhY2tldCk7CisKKwlwT1NQa3QtPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEZyb21XaGljaEJTU0lEKTsKKwlwT1NQa3QtPmRhdGEgPSBwUnhCbGstPnBEYXRhOworCXBPU1BrdC0+bGVuID0gcFJ4QmxrLT5EYXRhU2l6ZTsKKwlwT1NQa3QtPnRhaWwgPSBwT1NQa3QtPmRhdGEgKyBwT1NQa3QtPmxlbjsKK30KKworCit2b2lkIHdsYW5fODAyXzExX3RvXzgwMl8zX3BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVBVQ0hBUgkJCXBIZWFkZXI4MDJfMywKKwlJTiAgVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZgkqcE9TUGt0OworCisJQVNTRVJUKHBSeEJsay0+cFJ4UGFja2V0KTsKKwlBU1NFUlQocEhlYWRlcjgwMl8zKTsKKworCXBPU1BrdCA9IFJUUEtUX1RPX09TUEtUKHBSeEJsay0+cFJ4UGFja2V0KTsKKworCXBPU1BrdC0+ZGV2ID0gZ2V0X25ldGRldl9mcm9tX2Jzc2lkKHBBZCwgRnJvbVdoaWNoQlNTSUQpOworCXBPU1BrdC0+ZGF0YSA9IHBSeEJsay0+cERhdGE7CisJcE9TUGt0LT5sZW4gPSBwUnhCbGstPkRhdGFTaXplOworCXBPU1BrdC0+dGFpbCA9IHBPU1BrdC0+ZGF0YSArIHBPU1BrdC0+bGVuOworCisJLy8KKwkvLyBjb3B5IDgwMi4zIGhlYWRlcgorCS8vCisJLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCU5kaXNNb3ZlTWVtb3J5KHNrYl9wdXNoKHBPU1BrdCwgTEVOR1RIXzgwMl8zKSwgcEhlYWRlcjgwMl8zLCBMRU5HVEhfODAyXzMpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCisKK3ZvaWQgYW5ub3VuY2VfODAyXzNfcGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KQoreworCisJc3RydWN0IHNrX2J1ZmYJKnBSeFBrdDsKKworCUFTU0VSVChwUGFja2V0KTsKKworCXBSeFBrdCA9IFJUUEtUX1RPX09TUEtUKHBQYWNrZXQpOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyAgICAvKiBQdXNoIHVwIHRoZSBwcm90b2NvbCBzdGFjayAqLworI2lmZGVmIElLQU5PU19WWF8xWDAKKwlJS0FOT1NfRGF0YUZyYW1lUngocEFkLCBwUnhQa3QtPmRldiwgcFJ4UGt0LCBwUnhQa3QtPmxlbik7CisjZWxzZQorCXBSeFBrdC0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhwUnhQa3QsIHBSeFBrdC0+ZGV2KTsKKworLy8jaWZkZWYgQ09ORklHXzVWVF9FTkhBTkNFCisvLwkqKGludCopKHBSeFBrdC0+Y2IpID0gQlJJREdFX1RBRzsKKy8vI2VuZGlmCisJbmV0aWZfcngocFJ4UGt0KTsKKyNlbmRpZiAvLyBJS0FOT1NfVlhfMVgwIC8vCit9CisKKworUFJUTVBfU0NBVFRFUl9HQVRIRVJfTElTVAorcnRfZ2V0X3NnX2xpc3RfZnJvbV9wYWNrZXQoUE5ESVNfUEFDS0VUIHBQYWNrZXQsIFJUTVBfU0NBVFRFUl9HQVRIRVJfTElTVCAqc2cpCit7CisJc2ctPk51bWJlck9mRWxlbWVudHMgPSAxOworCXNnLT5FbGVtZW50c1swXS5BZGRyZXNzID0gIEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KTsKKwlzZy0+RWxlbWVudHNbMF0uTGVuZ3RoID0gR0VUX09TX1BLVF9MRU4ocFBhY2tldCk7CisJcmV0dXJuIChzZyk7Cit9CisKK3ZvaWQgaGV4X2R1bXAoY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICpwU3JjQnVmVkEsIHVuc2lnbmVkIGludCBTcmNCdWZMZW4pCit7CisJdW5zaWduZWQgY2hhciAqcHQ7CisJaW50IHg7CisKKwlpZiAoUlREZWJ1Z0xldmVsIDwgUlRfREVCVUdfVFJBQ0UpCisJCXJldHVybjsKKworCXB0ID0gcFNyY0J1ZlZBOworCXByaW50aygiJXM6ICVwLCBsZW4gPSAlZFxuIixzdHIsICBwU3JjQnVmVkEsIFNyY0J1Zkxlbik7CisJZm9yICh4PTA7IHg8U3JjQnVmTGVuOyB4KyspCisJeworCQlpZiAoeCAlIDE2ID09IDApCisJCQlwcmludGsoIjB4JTA0eCA6ICIsIHgpOworCQlwcmludGsoIiUwMnggIiwgKCh1bnNpZ25lZCBjaGFyKXB0W3hdKSk7CisJCWlmICh4JTE2ID09IDE1KSBwcmludGsoIlxuIik7CisJfQorCXByaW50aygiXG4iKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVNlbmQgbG9nIG1lc3NhZ2UgdGhyb3VnaCB3aXJlbGVzcyBldmVudAorCisJCVN1cHBvcnQgc3RhbmRhcmQgaXdfZXZlbnQgd2l0aCBJV0VWQ1VTVE9NLiBJdCBpcyB1c2VkIGJlbG93LgorCisJCWl3cmVxX2RhdGEuZGF0YS5mbGFncyBpcyB1c2VkIHRvIHN0b3JlIGV2ZW50X2ZsYWcgdGhhdCBpcyBkZWZpbmVkIGJ5IHVzZXIuCisJCWl3cmVxX2RhdGEuZGF0YS5sZW5ndGggaXMgdGhlIGxlbmd0aCBvZiB0aGUgZXZlbnQgbG9nLgorCisJCVRoZSBmb3JtYXQgb2YgdGhlIGV2ZW50IGxvZyBpcyBjb21wb3NlZCBvZiB0aGUgZW50cnkncyBNQUMgYWRkcmVzcyBhbmQKKwkJdGhlIGRlc2lyZWQgbG9nIG1lc3NhZ2UgKHJlZmVyIHRvIHBXaXJlbGVzc0V2ZW50VGV4dCkuCisKKwkJCWV4OiAxMToyMjozMzo0NDo1NTo2NiBoYXMgYXNzb2NpYXRlZCBzdWNjZXNzZnVsbHkKKworCQlwLnMuIFRoZSByZXF1aXJlbWVudCBvZiBXaXJlbGVzcyBFeHRlbnNpb24gaXMgdjE1IG9yIG5ld2VyLgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBSVE1QU2VuZFdpcmVsZXNzRXZlbnQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJRXZlbnRfZmxhZywKKwlJTglQVUNIQVIgCQkJcEFkZHIsCisJSU4JVUNIQVIJCQlCc3NJZHgsCisJSU4JQ0hBUgkJCVJzc2kpCit7CisjaWYgV0lSRUxFU1NfRVhUID49IDE1CisKKwl1bmlvbiAJaXdyZXFfZGF0YSAgICAgIHdycXU7CisJUFVDSEFSIAlwQnVmID0gTlVMTCwgcEJ1ZlB0ciA9IE5VTEw7CisJVVNIT1JUCWV2ZW50LCB0eXBlLCBCdWZMZW47CisJVUNIQVIJZXZlbnRfdGFibGVfbGVuID0gMDsKKworCXR5cGUgPSBFdmVudF9mbGFnICYgMHhGRjAwOworCWV2ZW50ID0gRXZlbnRfZmxhZyAmIDB4MDBGRjsKKworCXN3aXRjaCAodHlwZSkKKwl7CisJCWNhc2UgSVdfU1lTX0VWRU5UX0ZMQUdfU1RBUlQ6CisJCQlldmVudF90YWJsZV9sZW4gPSBJV19TWVNfRVZFTlRfVFlQRV9OVU07CisJCQlicmVhazsKKworCQljYXNlIElXX1NQT09GX0VWRU5UX0ZMQUdfU1RBUlQ6CisJCQlldmVudF90YWJsZV9sZW4gPSBJV19TUE9PRl9FVkVOVF9UWVBFX05VTTsKKwkJCWJyZWFrOworCisJCWNhc2UgSVdfRkxPT0RfRVZFTlRfRkxBR19TVEFSVDoKKwkJCWV2ZW50X3RhYmxlX2xlbiA9IElXX0ZMT09EX0VWRU5UX1RZUEVfTlVNOworCQkJYnJlYWs7CisJfQorCisJaWYgKGV2ZW50X3RhYmxlX2xlbiA9PSAwKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBUaGUgdHlwZSglMHgwMngpIGlzIG5vdCB2YWxpZC5cbiIsIF9fRlVOQ1RJT05fXywgdHlwZSkpOworCQlyZXR1cm47CisJfQorCisJaWYgKGV2ZW50ID49IGV2ZW50X3RhYmxlX2xlbikKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIDogVGhlIGV2ZW50KCUweDAyeCkgaXMgbm90IHZhbGlkLlxuIiwgX19GVU5DVElPTl9fLCBldmVudCkpOworCQlyZXR1cm47CisJfQorCisJLy9BbGxvY2F0ZSBtZW1vcnkgYW5kIGNvcHkgdGhlIG1zZy4KKwlpZigocEJ1ZiA9IGttYWxsb2MoSVdfQ1VTVE9NX01BWF9MRU4sIEdGUF9BVE9NSUMpKSAhPSBOVUxMKQorCXsKKwkJLy9QcmVwYXJlIHRoZSBwYXlsb2FkCisJCW1lbXNldChwQnVmLCAwLCBJV19DVVNUT01fTUFYX0xFTik7CisKKwkJcEJ1ZlB0ciA9IHBCdWY7CisKKwkJaWYgKHBBZGRyKQorCQkJcEJ1ZlB0ciArPSBzcHJpbnRmKHBCdWZQdHIsICIoUlQyODYwKSBTVEEoJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngpICIsIFBSSU5UX01BQyhwQWRkcikpOworCQllbHNlIGlmIChCc3NJZHggPCBNQVhfTUJTU0lEX05VTSkKKwkJCXBCdWZQdHIgKz0gc3ByaW50ZihwQnVmUHRyLCAiKFJUMjg2MCkgQlNTKHJhJWQpICIsIEJzc0lkeCk7CisJCWVsc2UKKwkJCXBCdWZQdHIgKz0gc3ByaW50ZihwQnVmUHRyLCAiKFJUMjg2MCkgIik7CisKKwkJaWYgKHR5cGUgPT0gSVdfU1lTX0VWRU5UX0ZMQUdfU1RBUlQpCisJCQlwQnVmUHRyICs9IHNwcmludGYocEJ1ZlB0ciwgIiVzIiwgcFdpcmVsZXNzU3lzRXZlbnRUZXh0W2V2ZW50XSk7CisJCWVsc2UgaWYgKHR5cGUgPT0gSVdfU1BPT0ZfRVZFTlRfRkxBR19TVEFSVCkKKwkJCXBCdWZQdHIgKz0gc3ByaW50ZihwQnVmUHRyLCAiJXMgKFJTU0k9JWQpIiwgcFdpcmVsZXNzU3Bvb2ZFdmVudFRleHRbZXZlbnRdLCBSc3NpKTsKKwkJZWxzZSBpZiAodHlwZSA9PSBJV19GTE9PRF9FVkVOVF9GTEFHX1NUQVJUKQorCQkJcEJ1ZlB0ciArPSBzcHJpbnRmKHBCdWZQdHIsICIlcyIsIHBXaXJlbGVzc0Zsb29kRXZlbnRUZXh0W2V2ZW50XSk7CisJCWVsc2UKKwkJCXBCdWZQdHIgKz0gc3ByaW50ZihwQnVmUHRyLCAiJXMiLCAidW5rbm93biBldmVudCIpOworCisJCXBCdWZQdHJbcEJ1ZlB0ciAtIHBCdWZdID0gJ1wwJzsKKwkJQnVmTGVuID0gcEJ1ZlB0ciAtIHBCdWY7CisKKwkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCSAgICB3cnF1LmRhdGEuZmxhZ3MgPSBFdmVudF9mbGFnOworCQl3cnF1LmRhdGEubGVuZ3RoID0gQnVmTGVuOworCisJCS8vc2VuZCB3aXJlbGVzcyBldmVudAorCSAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIHBCdWYpOworCisJCS8vREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXMgOiAlc1xuIiwgX19GVU5DVElPTl9fLCBwQnVmKSk7CisKKwkJa2ZyZWUocEJ1Zik7CisJfQorCWVsc2UKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHdpcmVsZXNzIGV2ZW50LlxuIiwgX19GVU5DVElPTl9fKSk7CisjZWxzZQorCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIDogVGhlIFdpcmVsZXNzIEV4dGVuc2lvbiBNVVNUIGJlIHYxNSBvciBuZXdlci5cbiIsIF9fRlVOQ1RJT05fXykpOworI2VuZGlmICAvKiBXSVJFTEVTU19FWFQgPj0gMTUgKi8KK30KKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCit2b2lkIHNlbmRfbW9uaXRvcl9wYWNrZXRzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGspCit7CisgICAgc3RydWN0IHNrX2J1ZmYJKnBPU1BrdDsKKyAgICB3bGFuX25nX3ByaXNtMl9oZWFkZXIgKnBoOworICAgIGludCByYXRlX2luZGV4ID0gMDsKKyAgICBVU0hPUlQgaGVhZGVyX2xlbiA9IDA7CisgICAgVUNIQVIgdGVtcF9oZWFkZXJbNDBdID0gezB9OworCisgICAgdV9pbnQzMl90IHJhbGlua3JhdGVbMjU2XSA9IHsyLDQsMTEsMjIsIDEyLDE4LDI0LDM2LDQ4LDcyLDk2LCAgMTA4LCAgIDEwOSwgMTEwLCAxMTEsIDExMiwgMTMsIDI2LCAzOSwgNTIsNzgsMTA0LCAxMTcsIDEzMCwgMjYsIDUyLCA3OCwxMDQsIDE1NiwgMjA4LCAyMzQsIDI2MCwgMjcsIDU0LDgxLDEwOCwxNjIsIDIxNiwgMjQzLCAyNzAsIC8vIExhc3QgMzgKKwk1NCwgMTA4LCAxNjIsIDIxNiwgMzI0LCA0MzIsIDQ4NiwgNTQwLCAgMTQsIDI5LCA0MywgNTcsIDg3LCAxMTUsIDEzMCwgMTQ0LCAyOSwgNTksODcsMTE1LCAxNzMsIDIzMCwyNjAsIDI4OCwgMzAsIDYwLDkwLDEyMCwxODAsMjQwLDI3MCwzMDAsNjAsMTIwLDE4MCwyNDAsMzYwLDQ4MCw1NDAsNjAwLCAwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLAorCTExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwfTsKKworCisgICAgQVNTRVJUKHBSeEJsay0+cFJ4UGFja2V0KTsKKyAgICBpZiAocFJ4QmxrLT5EYXRhU2l6ZSA8IDEwKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiJXMgOiBTaXplIGlzIHRvbyBzbWFsbCEgKCVkKVxuIiwgX19GVU5DVElPTl9fLCBwUnhCbGstPkRhdGFTaXplKSk7CisJCWdvdG8gZXJyX2ZyZWVfc2tfYnVmZjsKKyAgICB9CisKKyAgICBpZiAocFJ4QmxrLT5EYXRhU2l6ZSArIHNpemVvZih3bGFuX25nX3ByaXNtMl9oZWFkZXIpID4gUlhfQlVGRkVSX0FHR1JFU0laRSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiVzIDogU2l6ZSBpcyB0b28gbGFyZ2UhICglZClcbiIsIF9fRlVOQ1RJT05fXywgcFJ4QmxrLT5EYXRhU2l6ZSArIHNpemVvZih3bGFuX25nX3ByaXNtMl9oZWFkZXIpKSk7CisJCWdvdG8gZXJyX2ZyZWVfc2tfYnVmZjsKKyAgICB9CisKKyAgICBwT1NQa3QgPSBSVFBLVF9UT19PU1BLVChwUnhCbGstPnBSeFBhY2tldCk7CisJcE9TUGt0LT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBCU1MwKTsKKyAgICBpZiAocFJ4QmxrLT5wSGVhZGVyLT5GQy5UeXBlID09IEJUWVBFX0RBVEEpCisgICAgeworICAgICAgICBwUnhCbGstPkRhdGFTaXplIC09IExFTkdUSF84MDJfMTE7CisgICAgICAgIGlmICgocFJ4QmxrLT5wSGVhZGVyLT5GQy5Ub0RzID09IDEpICYmCisgICAgICAgICAgICAocFJ4QmxrLT5wSGVhZGVyLT5GQy5GckRzID09IDEpKQorICAgICAgICAgICAgaGVhZGVyX2xlbiA9IExFTkdUSF84MDJfMTFfV0lUSF9BRERSNDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaGVhZGVyX2xlbiA9IExFTkdUSF84MDJfMTE7CisKKyAgICAgICAgLy8gUU9TCisgICAgCWlmIChwUnhCbGstPnBIZWFkZXItPkZDLlN1YlR5cGUgJiAweDA4KQorICAgIAl7CisgICAgCSAgICBoZWFkZXJfbGVuICs9IDI7CisgICAgCQkvLyBEYXRhIHNraXAgUU9TIGNvbnRvcmwgZmllbGQKKyAgICAJCXBSeEJsay0+RGF0YVNpemUgLT0yOworICAgIAl9CisKKyAgICAJLy8gT3JkZXIgYml0OiBBLVJhbGluayBvciBIVEMrCisgICAgCWlmIChwUnhCbGstPnBIZWFkZXItPkZDLk9yZGVyKQorICAgIAl7CisgICAgCSAgICBoZWFkZXJfbGVuICs9IDQ7CisJCQkvLyBEYXRhIHNraXAgSFRDIGNvbnRvcmwgZmllbGQKKwkJCXBSeEJsay0+RGF0YVNpemUgLT0gNDsKKyAgICAJfQorCisgICAgICAgIC8vIENvcHkgSGVhZGVyCisgICAgICAgIGlmIChoZWFkZXJfbGVuIDw9IDQwKQorICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkodGVtcF9oZWFkZXIsIHBSeEJsay0+cERhdGEsIGhlYWRlcl9sZW4pOworCisgICAgICAgIC8vIHNraXAgSFcgcGFkZGluZworICAgIAlpZiAocFJ4QmxrLT5SeEQuTDJQQUQpCisgICAgCSAgICBwUnhCbGstPnBEYXRhICs9IChoZWFkZXJfbGVuICsgMik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBSeEJsay0+cERhdGEgKz0gaGVhZGVyX2xlbjsKKyAgICB9IC8vZW5kIGlmCisKKworCWlmIChwUnhCbGstPkRhdGFTaXplIDwgcE9TUGt0LT5sZW4pIHsKKyAgICAgICAgc2tiX3RyaW0ocE9TUGt0LHBSeEJsay0+RGF0YVNpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNrYl9wdXQocE9TUGt0LChwUnhCbGstPkRhdGFTaXplIC0gcE9TUGt0LT5sZW4pKTsKKyAgICB9IC8vZW5kIGlmCisKKyAgICBpZiAoKHBSeEJsay0+cERhdGEgLSBwT1NQa3QtPmRhdGEpID4gMCkgeworCSAgICBza2JfcHV0KHBPU1BrdCwocFJ4QmxrLT5wRGF0YSAtIHBPU1BrdC0+ZGF0YSkpOworCSAgICBza2JfcHVsbChwT1NQa3QsKHBSeEJsay0+cERhdGEgLSBwT1NQa3QtPmRhdGEpKTsKKyAgICB9IC8vZW5kIGlmCisKKyAgICBpZiAoc2tiX2hlYWRyb29tKHBPU1BrdCkgPCAoc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikrIGhlYWRlcl9sZW4pKSB7CisgICAgICAgIGlmIChwc2tiX2V4cGFuZF9oZWFkKHBPU1BrdCwgKHNpemVvZih3bGFuX25nX3ByaXNtMl9oZWFkZXIpICsgaGVhZGVyX2xlbiksIDAsIEdGUF9BVE9NSUMpKSB7CisJICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlcyA6IFJlYWxsb2NhdGUgaGVhZGVyIHNpemUgb2Ygc2tfYnVmZiBmYWlsIVxuIiwgX19GVU5DVElPTl9fKSk7CisJCQlnb3RvIGVycl9mcmVlX3NrX2J1ZmY7CisJICAgIH0gLy9lbmQgaWYKKyAgICB9IC8vZW5kIGlmCisKKyAgICBpZiAoaGVhZGVyX2xlbiA+IDApCisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHNrYl9wdXNoKHBPU1BrdCwgaGVhZGVyX2xlbiksIHRlbXBfaGVhZGVyLCBoZWFkZXJfbGVuKTsKKworICAgIHBoID0gKHdsYW5fbmdfcHJpc20yX2hlYWRlciAqKSBza2JfcHVzaChwT1NQa3QsIHNpemVvZih3bGFuX25nX3ByaXNtMl9oZWFkZXIpKTsKKwlOZGlzWmVyb01lbW9yeShwaCwgc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcikpOworCisgICAgcGgtPm1zZ2NvZGUJCSAgICA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm07CisJcGgtPm1zZ2xlbgkJICAgID0gc2l6ZW9mKHdsYW5fbmdfcHJpc20yX2hlYWRlcik7CisJc3RyY3B5KHBoLT5kZXZuYW1lLCBwQWQtPm5ldF9kZXYtPm5hbWUpOworCisgICAgcGgtPmhvc3R0aW1lLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faG9zdHRpbWU7CisJcGgtPmhvc3R0aW1lLnN0YXR1cyA9IDA7CisJcGgtPmhvc3R0aW1lLmxlbiA9IDQ7CisJcGgtPmhvc3R0aW1lLmRhdGEgPSBqaWZmaWVzOworCisJcGgtPm1hY3RpbWUuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9tYWN0aW1lOworCXBoLT5tYWN0aW1lLnN0YXR1cyA9IDA7CisJcGgtPm1hY3RpbWUubGVuID0gMDsKKwlwaC0+bWFjdGltZS5kYXRhID0gMDsKKworICAgIHBoLT5pc3R4LmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faXN0eDsKKwlwaC0+aXN0eC5zdGF0dXMgPSAwOworCXBoLT5pc3R4LmxlbiA9IDA7CisJcGgtPmlzdHguZGF0YSA9IDA7CisKKyAgICBwaC0+Y2hhbm5lbC5kaWQgPSBESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2NoYW5uZWw7CisJcGgtPmNoYW5uZWwuc3RhdHVzID0gMDsKKwlwaC0+Y2hhbm5lbC5sZW4gPSA0OworCisgICAgcGgtPmNoYW5uZWwuZGF0YSA9ICh1X2ludDMyX3QpcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKKworICAgIHBoLT5yc3NpLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fcnNzaTsKKwlwaC0+cnNzaS5zdGF0dXMgPSAwOworCXBoLT5yc3NpLmxlbiA9IDQ7CisgICAgcGgtPnJzc2kuZGF0YSA9ICh1X2ludDMyX3QpUlRNUE1heFJzc2kocEFkLCBDb252ZXJ0VG9Sc3NpKHBBZCwgcFJ4QmxrLT5wUnhXSS0+UlNTSTAsIFJTU0lfMCksIENvbnZlcnRUb1Jzc2kocEFkLCBwUnhCbGstPnBSeFdJLT5SU1NJMSwgUlNTSV8xKSwgQ29udmVydFRvUnNzaShwQWQsIHBSeEJsay0+cFJ4V0ktPlJTU0kyLCBSU1NJXzIpKTs7CisKKwlwaC0+c2lnbmFsLmRpZCA9IERJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fc2lnbmFsOworCXBoLT5zaWduYWwuc3RhdHVzID0gMDsKKwlwaC0+c2lnbmFsLmxlbiA9IDQ7CisJcGgtPnNpZ25hbC5kYXRhID0gMDsgLy9yc3NpICsgbm9pc2U7CisKKwlwaC0+bm9pc2UuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9ub2lzZTsKKwlwaC0+bm9pc2Uuc3RhdHVzID0gMDsKKwlwaC0+bm9pc2UubGVuID0gNDsKKwlwaC0+bm9pc2UuZGF0YSA9IDA7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyAgICBpZiAocFJ4QmxrLT5wUnhXSS0+UEhZTU9ERSA+PSBNT0RFX0hUTUlYKQorICAgIHsKKyAgICAJcmF0ZV9pbmRleCA9IDE2ICsgKChVQ0hBUilwUnhCbGstPnBSeFdJLT5CVyAqMTYpICsgKChVQ0hBUilwUnhCbGstPnBSeFdJLT5TaG9ydEdJICozMikgKyAoKFVDSEFSKXBSeEJsay0+cFJ4V0ktPk1DUyk7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlpZiAocFJ4QmxrLT5wUnhXSS0+UEhZTU9ERSA9PSBNT0RFX09GRE0pCisgICAgCXJhdGVfaW5kZXggPSAoVUNIQVIpKHBSeEJsay0+cFJ4V0ktPk1DUykgKyA0OworICAgIGVsc2UKKyAgICAJcmF0ZV9pbmRleCA9IChVQ0hBUikocFJ4QmxrLT5wUnhXSS0+TUNTKTsKKyAgICBpZiAocmF0ZV9pbmRleCA8IDApCisgICAgICAgIHJhdGVfaW5kZXggPSAwOworICAgIGlmIChyYXRlX2luZGV4ID4gMjU1KQorICAgICAgICByYXRlX2luZGV4ID0gMjU1OworCisJcGgtPnJhdGUuZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9yYXRlOworCXBoLT5yYXRlLnN0YXR1cyA9IDA7CisJcGgtPnJhdGUubGVuID0gNDsKKyAgICBwaC0+cmF0ZS5kYXRhID0gcmFsaW5rcmF0ZVtyYXRlX2luZGV4XTsKKworCXBoLT5mcm1sZW4uZGlkID0gRElEbXNnX2xueGluZF93bGFuc25pZmZybV9mcm1sZW47CisgICAgcGgtPmZybWxlbi5zdGF0dXMgPSAwOworCXBoLT5mcm1sZW4ubGVuID0gNDsKKwlwaC0+ZnJtbGVuLmRhdGEJPSAodV9pbnQzMl90KXBSeEJsay0+RGF0YVNpemU7CisKKworICAgIHBPU1BrdC0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworICAgIHBPU1BrdC0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhwT1NQa3QsIHBPU1BrdC0+ZGV2KTsKKyAgICBwT1NQa3QtPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisgICAgbmV0aWZfcngocE9TUGt0KTsKKworICAgIHJldHVybjsKKworZXJyX2ZyZWVfc2tfYnVmZjoKKwlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCXJldHVybjsKKworfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKK3ZvaWQgcnRtcF9vc190aHJlYWRfaW5pdChQVUNIQVIgcFRocmVhZE5hbWUsIFBWT0lEIHBOb3RpZnkpCit7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCisJZGFlbW9uaXplKHBUaHJlYWROYW1lIC8qIiVzIixwQWQtPm5ldF9kZXYtPm5hbWUqLyk7CisKKwlhbGxvd19zaWduYWwoU0lHVEVSTSk7CisJYWxsb3dfc2lnbmFsKFNJR0tJTEwpOworCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGFlbW9uaXplKCk7CisJcmVwYXJlbnRfdG9faW5pdCgpOworCXN0cmNweShjdXJyZW50LT5jb21tLCBwVGhyZWFkTmFtZSk7CisKKwlzaWdpbml0c2V0aW52KCZjdXJyZW50LT5ibG9ja2VkLCBzaWdtYXNrKFNJR1RFUk0pIHwgc2lnbWFzayhTSUdLSUxMKSk7CisKKwkvKiBBbGxvdyBpbnRlcmNlcHRpb24gb2YgU0lHS0lMTCBvbmx5CisJICogRG9uJ3QgYWxsb3cgb3RoZXIgc2lnbmFscyB0byBpbnRlcnJ1cHQgdGhlIHRyYW5zbWlzc2lvbiAqLworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNCwyMikKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3VycmVudC0+c2lnbWFza19sb2NrLCBmbGFncyk7CisJZmx1c2hfc2lnbmFscyhjdXJyZW50KTsKKwlyZWNhbGNfc2lncGVuZGluZyhjdXJyZW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdXJyZW50LT5zaWdtYXNrX2xvY2ssIGZsYWdzKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICAvKiBzaWduYWwgdGhhdCB3ZSd2ZSBzdGFydGVkIHRoZSB0aHJlYWQgKi8KKwljb21wbGV0ZShwTm90aWZ5KTsKKworfQorCit2b2lkIFJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwl7CisJCWlmIChwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9PSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZCkKKwkJeworCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfU1RBX0xJTktVUF9FVkVOVF9GTEFHLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIEJTUzAsIDApOworCQl9CisJCWVsc2UKKwkJeworCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfU1RBX0xJTktET1dOX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisJCX0KKwl9Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfbGludXguaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfbGludXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTQwZDAyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9saW51eC5oCkBAIC0wLDAgKzEsODg3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIFByb2dyYW06ICAgIHJ0X2xpbnV4LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIENyZWF0ZWQ6ICAgIDQvMjEvMjAwNiAxOjE3OjM4IFBNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIEF1dGhvcjogICAgIFd1IFhpLUt1biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgIENvbW1lbnRzOiAgIGBkZXNjcmlwdGlvbmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBIaXN0b3J5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBSZXZpc2lvbiAxLjEgNC8yMS8yMDA2IDE6MTc6MzggUE0gIHhzaWt1biAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBJbml0aWFsIHJldmlzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJydG1wX3R5cGUuaCIKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKworI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKworLy8gbG9hZCBmaXJtd2FyZQorI2RlZmluZSBfX0tFUk5FTF9TWVNDQUxMU19fCisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworCisjZGVmaW5lIE1FTV9BTExPQ19GTEFHICAgICAgKEdGUF9BVE9NSUMpIC8vKEdGUF9ETUEgfCBHRlBfQVRPTUlDKQorCisjaWZuZGVmIElGTkFNU0laCisjZGVmaW5lIElGTkFNU0laIDE2CisjZW5kaWYKKworLy8jZGVmaW5lIENPTkZJR19DS0lQX1NVUFBPUlQKKworI3VuZGVmIF9faW5saW5lCisjZGVmaW5lIF9faW5saW5lCSAgIHN0YXRpYyBpbmxpbmUKKwordHlwZWRlZiBpbnQgKCpIQVJEX1NUQVJUX1hNSVRfRlVOQykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOworCisvLyBhZGQgYnkga2F0aHkKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIFNUQV9QUk9GSUxFX1BBVEgJCQkiL2V0Yy9XaXJlbGVzcy9SVDI4NzBTVEEvUlQyODcwU1RBLmRhdCIKKyNkZWZpbmUgU1RBX1JUMjg3MF9JTUFHRV9GSUxFX05BTUUgICIvZXRjL1dpcmVsZXNzL1JUMjg3MFNUQS9ydDI4NzAuYmluIgorI2RlZmluZSBTVEFfTklDX0RFVklDRV9OQU1FCQkJIlJUMjg3MFNUQSIKKyNkZWZpbmUgU1RBX0RSSVZFUl9WRVJTSU9OCQkJIjIuMC4xLjAiCisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisjZGVmaW5lIENBUkRfSU5GT19QQVRICQkJIi9ldGMvV2lyZWxlc3MvUlQyODcwU1RBL1JUMjg3MFNUQUNhcmQuZGF0IgorI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLworI2VuZGlmIC8vIFJUMjg3MCAvLworCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDUsMCkKKworI2RlZmluZSBSVE1QX1RJTUVfQUZURVIoYSxiKQkJXAorCSh0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgKHVuc2lnbmVkIGxvbmcpYSkgJiYgXAorCSB0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgKHVuc2lnbmVkIGxvbmcpYikgJiYgXAorCSAoKGxvbmcpKGIpIC0gKGxvbmcpKGEpIDwgMCkpCisKKyNkZWZpbmUgUlRNUF9USU1FX0FGVEVSX0VRKGEsYikJXAorCSh0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgKHVuc2lnbmVkIGxvbmcpYSkgJiYgXAorCSB0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgKHVuc2lnbmVkIGxvbmcpYikgJiYgXAorCSAoKGxvbmcpKGEpIC0gKGxvbmcpKGIpID49IDApKQorI2RlZmluZSBSVE1QX1RJTUVfQkVGT1JFKGEsYikJUlRNUF9USU1FX0FGVEVSX0VRKGIsYSkKKyNlbHNlCisjZGVmaW5lIFJUTVBfVElNRV9BRlRFUihhLGIpIHRpbWVfYWZ0ZXIoYSwgYikKKyNlbmRpZgorCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorI2RlZmluZSBSVF9NT0RfSU5DX1VTRV9DT1VOVCgpIFwKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkgXAorCXsgXAorCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczogY2Fubm90IHJlc2VydmUgbW9kdWxlXG4iLCBfX0ZVTkNUSU9OX18pKTsgXAorCQlyZXR1cm4gLTE7IFwKKwl9CisKKyNkZWZpbmUgUlRfTU9EX0RFQ19VU0VfQ09VTlQoKSBtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKyNlbHNlCisjZGVmaW5lIFJUX01PRF9JTkNfVVNFX0NPVU5UKCkJTU9EX0lOQ19VU0VfQ09VTlQ7CisjZGVmaW5lIFJUX01PRF9ERUNfVVNFX0NPVU5UKCkgTU9EX0RFQ19VU0VfQ09VTlQ7CisjZW5kaWYKKworI2RlZmluZSBPU19IWgkJCUhaCisKKyNkZWZpbmUgRVRIX0xFTkdUSF9PRl9BRERSRVNTCTYKKworI2RlZmluZSBJTgorI2RlZmluZSBPVVQKKworI2RlZmluZSBORElTX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UCisjZGVmaW5lIE5ESVNfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIE5ESVNfU1RBVFVTX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIE5ESVNfU1RBVFVTX0lOVkFMSURfREFUQQkJCQkweDAyCisjZGVmaW5lIE5ESVNfU1RBVFVTX1JFU09VUkNFUyAgICAgICAgICAgICAgICAgICAweDAzCisKKyNkZWZpbmUgTUlOX05FVF9ERVZJQ0VfRk9SX0FJRAkJCTB4MDAJCS8vMHgwMH4weDNmCisjZGVmaW5lIE1JTl9ORVRfREVWSUNFX0ZPUl9NQlNTSUQJCTB4MDAJCS8vMHgwMCwweDEwLDB4MjAsMHgzMAorI2RlZmluZSBNSU5fTkVUX0RFVklDRV9GT1JfV0RTCQkJMHgxMAkJLy8weDQwLDB4NTAsMHg2MCwweDcwCisjZGVmaW5lIE1JTl9ORVRfREVWSUNFX0ZPUl9BUENMSQkJMHgyMAorI2RlZmluZSBNSU5fTkVUX0RFVklDRV9GT1JfTUVTSAkJCTB4MzAKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNkZWZpbmUgTUlOX05FVF9ERVZJQ0VfRk9SX0RMUwkJCTB4NDAKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZGVmaW5lIE5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQJCTAKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9NVUxUSUNBU1QJCTEKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1QJCTIKKyNkZWZpbmUgTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUCTMKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworc3RydWN0IG9zX2xvY2sgIHsKKwlzcGlubG9ja190CQlsb2NrOworCXVuc2lnbmVkIGxvbmcgIAlmbGFnczsKK307CisKKworc3RydWN0IG9zX2Nvb2tpZSB7CisKKyNpZmRlZiBSVDI4NzAKKwlzdHJ1Y3QgdXNiX2RldmljZQkJKnBVc2JfRGV2OworCisJc3RydWN0IHBpZCAqCQlNTE1FVGhyX3BpZDsKKwlzdHJ1Y3QgcGlkICoJCVJUVVNCQ21kVGhyX3BpZDsKKwlzdHJ1Y3QgcGlkICoJCVRpbWVyUVRocl9waWQ7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgCXJ4X2RvbmVfdGFzazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgCW1nbXRfZG1hX2RvbmVfdGFzazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgCWFjMF9kbWFfZG9uZV90YXNrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJYWMxX2RtYV9kb25lX3Rhc2s7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IAlhYzJfZG1hX2RvbmVfdGFzazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgCWFjM19kbWFfZG9uZV90YXNrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCAJaGNjYV9kbWFfZG9uZV90YXNrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAl0YnR0X3Rhc2s7CisjaWZkZWYgUlQyODcwCisJc3RydWN0IHRhc2tsZXRfc3RydWN0CW51bGxfZnJhbWVfY29tcGxldGVfdGFzazsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJcnRzX2ZyYW1lX2NvbXBsZXRlX3Rhc2s7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0CXBzcG9sbF9mcmFtZV9jb21wbGV0ZV90YXNrOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKwl1bnNpZ25lZCBsb25nCQkJYXBkX3BpZDsgLy84MDIuMXggZGFlbW9uIHBpZAorCUlOVAkJCQkJCWlvY3RsX2lmX3R5cGU7CisJSU5UIAkJCQkJaW9jdGxfaWY7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfVklSVFVBTF9BREFQVEVSCit7CisJc3RydWN0IG5ldF9kZXZpY2UJCSpSdG1wRGV2OworCXN0cnVjdCBuZXRfZGV2aWNlCQkqVmlydHVhbERldjsKK30gVklSVFVBTF9BREFQVEVSLCBQVklSVFVBTF9BREFQVEVSOworCisjdW5kZWYgIEFTU0VSVAorI2RlZmluZSBBU1NFUlQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoISh4KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgX19GSUxFX18gIjolZCBhc3NlcnQgIiAjeCAiZmFpbGVkXG4iLCBfX0xJTkVfXyk7ICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCit0eXBlZGVmIHN0cnVjdCBvc19jb29raWUJKiBQT1NfQ09PS0lFOwordHlwZWRlZiBzdHJ1Y3QgcGNpX2RldiAJCSogUFBDSV9ERVY7Cit0eXBlZGVmIHN0cnVjdCBuZXRfZGV2aWNlCSogUE5FVF9ERVY7Cit0eXBlZGVmIHZvaWQJCQkJKiBQTkRJU19QQUNLRVQ7Cit0eXBlZGVmIGNoYXIJCQkJTkRJU19QQUNLRVQ7Cit0eXBlZGVmIFBORElTX1BBQ0tFVAkJKiBQUE5ESVNfUEFDS0VUOwordHlwZWRlZglkbWFfYWRkcl90CQkJTkRJU19QSFlTSUNBTF9BRERSRVNTOwordHlwZWRlZglkbWFfYWRkcl90CQkJKiBQTkRJU19QSFlTSUNBTF9BRERSRVNTOworLy90eXBlZGVmIHN0cnVjdCB0aW1lcl9saXN0CVJBTElOS19USU1FUl9TVFJVQ1Q7CisvL3R5cGVkZWYgc3RydWN0IHRpbWVyX2xpc3QJKiBQUkFMSU5LX1RJTUVSX1NUUlVDVDsKKy8vdHlwZWRlZiBzdHJ1Y3Qgb3NfbG9jawkJTkRJU19TUElOX0xPQ0s7Cit0eXBlZGVmIHNwaW5sb2NrX3QJCQlORElTX1NQSU5fTE9DSzsKK3R5cGVkZWYgc3RydWN0IHRpbWVyX2xpc3QJTkRJU19NSU5JUE9SVF9USU1FUjsKK3R5cGVkZWYgdm9pZAkJCQkqIE5ESVNfSEFORExFOwordHlwZWRlZiBjaGFyIAkJCQkqIFBORElTX0JVRkZFUjsKKworCisKK3ZvaWQgaGV4X2R1bXAoY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICpwU3JjQnVmVkEsIHVuc2lnbmVkIGludCBTcmNCdWZMZW4pOworCitkbWFfYWRkcl90IGxpbnV4X3BjaV9tYXBfc2luZ2xlKHZvaWQgKmhhbmRsZSwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgaW50IHNkX2lkeCwgaW50IGRpcmVjdGlvbik7Cit2b2lkIGxpbnV4X3BjaV91bm1hcF9zaW5nbGUodm9pZCAqaGFuZGxlLCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7CisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTU9WRSBUTyBydG1wLmggPworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNkZWZpbmUgUEtUU1JDX05ESVMgICAgICAgICAgICAgMHg3ZgorI2RlZmluZSBQS1RTUkNfRFJJVkVSICAgICAgICAgICAweDBmCisjZGVmaW5lIFBSSU5UX01BQyhhZGRyKQlcCisJYWRkclswXSwgYWRkclsxXSwgYWRkclsyXSwgYWRkclszXSwgYWRkcls0XSwgYWRkcls1XQorCisKKyNkZWZpbmUgUlQyODYwX1BDSV9ERVZJQ0VfSUQJCTB4MDYwMQorCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIFBDSV9NQVBfU0lOR0xFKF9oYW5kbGUsIF9wdHIsIF9zaXplLCBfZGlyKSAoVUxPTkcpMAorCisjZGVmaW5lIFBDSV9VTk1BUF9TSU5HTEUoX2hhbmRsZSwgX3B0ciwgX3NpemUsIF9kaXIpCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworI2RlZmluZSBCRUFDT05fRlJBTUVfRE1BX0NBQ0hFX1dCQUNLKF9wdHIsIF9zaXplKQlcCisJZG1hX2NhY2hlX3diYWNrKF9wdHIsIF9zaXplKQorCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKyNkZWZpbmUgTmRpc01JbmRpY2F0ZVN0YXR1cyhfdywgX3gsIF95LCBfeikKKworCit0eXBlZGVmIHN0cnVjdCB0aW1lcl9saXN0CVJUTVBfT1NfVElNRVI7CisKKyNpZmRlZiBSVDI4NzAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIFRpbWVyIFJlbGF0ZWQgTUFSQ08gLS0tLS0tLS0tLS0tLS0tKi8KKy8vIEluIFJUMjg3MCwgd2UgaGF2ZSBhIGxvdCBvZiB0aW1lciBmdW5jdGlvbnMgYW5kIHdpbGwgcmVhZC93cml0ZSByZWdpc3RlciwgaXQncworLy8Jbm90IGFsbG93ZWQgaW4gTGludXggVVNCIHN1Yi1zeXN0ZW0gdG8gZG8gaXQgKCBiZWNhdXNlIG9mIHNsZWVwIGlzc3VlIHdoZW4gc3VibWl0CisvLyAgdG8gY3RybCBwaXBlKS4gU28gd2UgbmVlZCBhIHdyYXBwZXIgZnVuY3Rpb24gdG8gdGFrZSBjYXJlIGl0LgorCit0eXBlZGVmIFZPSUQgKCpSVDI4NzBfVElNRVJfSEFORExFKSgKKwlJTiAgUFZPSUQgICBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gIFBWT0lEICAgRnVuY3Rpb25Db250ZXh0LAorCUlOICBQVk9JRCAgIFN5c3RlbVNwZWNpZmljMiwKKwlJTiAgUFZPSUQgICBTeXN0ZW1TcGVjaWZpYzMpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKK3R5cGVkZWYgc3RydWN0ICBfUkFMSU5LX1RJTUVSX1NUUlVDVCAgICB7CisgICAgUlRNUF9PU19USU1FUgkJVGltZXJPYmo7ICAgICAgIC8vIE5kaXMgVGltZXIgb2JqZWN0CisJQk9PTEVBTgkJCQlWYWxpZDsJCQkvLyBTZXQgdG8gVHJ1ZSB3aGVuIGNhbGwgUlRNUEluaXRUaW1lcgorICAgIEJPT0xFQU4gICAgICAgICAgICAgU3RhdGU7ICAgICAgICAgIC8vIFRydWUgaWYgdGltZXIgY2FuY2VsbGVkCisgICAgQk9PTEVBTgkgICAgICAJCVBlcmlvZGljVHlwZTsJLy8gVHJ1ZSBpZiB0aW1lciBpcyBwZXJpb2RpYyB0aW1lcgorICAgIEJPT0xFQU4gICAgICAgICAgICAgUmVwZWF0OyAgICAgICAgIC8vIFRydWUgaWYgcGVyaW9kaWMgdGltZXIKKyAgICBVTE9ORyAgICAgICAgICAgICAgIFRpbWVyVmFsdWU7ICAgICAvLyBUaW1lciB2YWx1ZSBpbiBtaWxsaXNlY29uZHMKKwlVTE9ORwkJCQljb29raWU7CQkJLy8gb3Mgc3BlY2lmaWMgb2JqZWN0CisjaWZkZWYgUlQyODcwCisJUlQyODcwX1RJTUVSX0hBTkRMRQloYW5kbGU7CisJdm9pZAkJCQkqcEFkOworI2VuZGlmIC8vIFJUMjg3MCAvLworfSAgIFJBTElOS19USU1FUl9TVFJVQ1QsICpQUkFMSU5LX1RJTUVSX1NUUlVDVDsKKworCisjaWZkZWYgUlQyODcwCisKK3R5cGVkZWYgZW51bSBfUlQyODcwX0tFUk5FTF9USFJFQURfU1RBVFVTXworeworCVJUMjg3MF9USFJFQURfVU5LTk9XTiA9IDAsCisJUlQyODcwX1RIUkVBRF9JTklURUQgPSAxLAorCVJUMjg3MF9USFJFQURfUlVOTklORyA9IDIsCisJUlQyODcwX1RIUkVBRF9TVE9QRUQgPSA0LAorfVJUMjg3MF9LRVJORUxfVEhSRUFEX1NUQVRVUzsKKworI2RlZmluZSBSVDI4NzBfVEhSRUFEX0NBTl9ET19JTlNFUlQJCShSVDI4NzBfVEhSRUFEX0lOSVRFRCB8UlQyODcwX1RIUkVBRF9SVU5OSU5HKQorCit0eXBlZGVmIHN0cnVjdCBfUlQyODcwX1RJTUVSX0VOVFJZXworeworCVJBTElOS19USU1FUl9TVFJVQ1QgCQkJKnBSYVRpbWVyOworCXN0cnVjdCBfUlQyODcwX1RJTUVSX0VOVFJZXyAJKnBOZXh0OworfVJUMjg3MF9USU1FUl9FTlRSWTsKKworCisjZGVmaW5lIFRJTUVSX1FVRVVFX1NJWkVfTUFYCTEyOAordHlwZWRlZiBzdHJ1Y3QgX1JUMjg3MF9USU1FUl9RVUVVRV8KK3sKKwl1bnNpZ25lZCBpbnQJCXN0YXR1czsKKwkvL3dhaXRfcXVldWVfaGVhZF90IAl0aW1lcldhaXRROworCS8vYXRvbWljX3QJCQljb3VudDsKKwlVQ0hBUgkJCQkqcFRpbWVyUVBvbGw7CisJUlQyODcwX1RJTUVSX0VOVFJZCSpwUVBvbGxGcmVlTGlzdDsKKwlSVDI4NzBfVElNRVJfRU5UUlkgCSpwUUhlYWQ7CisJUlQyODcwX1RJTUVSX0VOVFJZIAkqcFFUYWlsOworfVJUMjg3MF9USU1FUl9RVUVVRTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisvLyNkZWZpbmUgREJHCTEKKworLy8KKy8vICBNQUNSTyBmb3IgZGVidWdnaW5nIGluZm9ybWF0aW9uCisvLworCisjaWZkZWYgREJHCitleHRlcm4gVUxPTkcgICAgUlREZWJ1Z0xldmVsOworCisjZGVmaW5lIERCR1BSSU5UX1JBVyhMZXZlbCwgRm10KSAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKExldmVsIDw9IFJURGVidWdMZXZlbCkgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHByaW50ayBGbXQ7ICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIERCR1BSSU5UKExldmVsLCBGbXQpICAgIERCR1BSSU5UX1JBVyhMZXZlbCwgRm10KQorCisKKyNkZWZpbmUgREJHUFJJTlRfRVJSKEZtdCkgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwcmludGsoIkVSUk9SISEhICIpOyAgICAgICAgICBcCisgICAgcHJpbnRrIEZtdDsgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgREJHUFJJTlRfUyhTdGF0dXMsIEZtdCkJCVwKK3sJCQkJCQkJCQlcCisJcHJpbnRrIEZtdDsJCQkJCVwKK30KKworCisjZWxzZQorI2RlZmluZSBEQkdQUklOVChMZXZlbCwgRm10KQorI2RlZmluZSBEQkdQUklOVF9SQVcoTGV2ZWwsIEZtdCkKKyNkZWZpbmUgREJHUFJJTlRfUyhTdGF0dXMsIEZtdCkKKyNkZWZpbmUgREJHUFJJTlRfRVJSKEZtdCkKKyNlbmRpZgorCisKKy8vCisvLyAgc3Bpbl9sb2NrIGVuaGFuY2VkIGZvciBOZXN0ZWQgc3BpbiBsb2NrCisvLworI2RlZmluZSBOZGlzQWxsb2NhdGVTcGluTG9jayhfX2xvY2spICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzcGluX2xvY2tfaW5pdCgoc3BpbmxvY2tfdCAqKShfX2xvY2spKTsgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgTmRpc0ZyZWVTcGluTG9jayhsb2NrKSAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisKKyNkZWZpbmUgUlRNUF9TRU1fTE9DSyhfX2xvY2spCQkJCQlcCit7CQkJCQkJCQkJCQkJXAorCXNwaW5fbG9ja19iaCgoc3BpbmxvY2tfdCAqKShfX2xvY2spKTsJCQkJXAorfQorCisjZGVmaW5lIFJUTVBfU0VNX1VOTE9DSyhfX2xvY2spCQkJCQlcCit7CQkJCQkJCQkJCQkJXAorCXNwaW5fdW5sb2NrX2JoKChzcGlubG9ja190ICopKF9fbG9jaykpOwkJCQlcCit9CisKKy8vIHNhbXBsZSwgdXNlIHNlbWFwaG9yZSBsb2NrIHRvIHJlcGxhY2UgSVJRIGxvY2ssIDIwMDcvMTEvMTUKKyNkZWZpbmUgUlRNUF9JUlFfTE9DSyhfX2xvY2ssIF9faXJxZmxhZ3MpCQkJXAorewkJCQkJCQkJCQkJCQlcCisJX19pcnFmbGFncyA9IDA7CQkJCQkJCQkJXAorCXNwaW5fbG9ja19iaCgoc3BpbmxvY2tfdCAqKShfX2xvY2spKTsJCQlcCisJcEFkLT5pcnFfZGlzYWJsZWQgfD0gMTsgXAorfQorCisjZGVmaW5lIFJUTVBfSVJRX1VOTE9DSyhfX2xvY2ssIF9faXJxZmxhZykJCQlcCit7CQkJCQkJCQkJCQkJCVwKKwlwQWQtPmlycV9kaXNhYmxlZCAmPSAwOyBcCisJc3Bpbl91bmxvY2tfYmgoKHNwaW5sb2NrX3QgKikoX19sb2NrKSk7CQkJXAorfQorCisjZGVmaW5lIFJUTVBfSU5UX0xPQ0soX19sb2NrLCBfX2lycWZsYWdzKQkJCVwKK3sJCQkJCQkJCQkJCQkJXAorCXNwaW5fbG9ja19pcnFzYXZlKChzcGlubG9ja190ICopX19sb2NrLCBfX2lycWZsYWdzKTsJXAorfQorCisjZGVmaW5lIFJUTVBfSU5UX1VOTE9DSyhfX2xvY2ssIF9faXJxZmxhZykJCQlcCit7CQkJCQkJCQkJCQkJCVwKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKChzcGlubG9ja190ICopKF9fbG9jayksICgodW5zaWduZWQgbG9uZylfX2lycWZsYWcpKTsJXAorfQorCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIFJUTVBfSU9fUkVBRDMyKF9BLCBfUiwgX3BWKQkJCQkJCQkJXAorCVJUVVNCUmVhZE1BQ1JlZ2lzdGVyKF9BLCBfUiwgX3BWKQorCisjZGVmaW5lIFJUTVBfSU9fUkVBRDgoX0EsIF9SLCBfcFYpCQkJCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJCVwKK30KKworI2RlZmluZSBSVE1QX0lPX1dSSVRFMzIoX0EsIF9SLCBfVikJCQkJCQkJCVwKKwlSVFVTQldyaXRlTUFDUmVnaXN0ZXIoX0EsIF9SLCBfVikKKworCisjZGVmaW5lIFJUTVBfSU9fV1JJVEU4KF9BLCBfUiwgX1YpCQkJCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJCVwKKwlVU0hPUlQJX1ZhbCA9IF9WOwkJCQkJCQkJCQkJXAorCVJUVVNCU2luZ2xlV3JpdGUoX0EsIF9SLCBfVmFsKTsJCQkJCQkJCVwKK30KKworCisjZGVmaW5lIFJUTVBfSU9fV1JJVEUxNihfQSwgX1IsIF9WKQkJCQkJCQkJXAorewkJCQkJCQkJCQkJCQkJCQlcCisJUlRVU0JTaW5nbGVXcml0ZShfQSwgX1IsIF9WKTsJCQkJCQkJCVwKK30KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2lmbmRlZiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dAorI2RlZmluZSBfX3dhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLCBjb25kaXRpb24sIHJldCkgXAorZG8geyBcCisgICAgICAgIHdhaXRfcXVldWVfdCBfX3dhaXQ7IFwKKyAgICAgICAgaW5pdF93YWl0cXVldWVfZW50cnkoJl9fd2FpdCwgY3VycmVudCk7IFwKKyAgICAgICAgYWRkX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgXAorICAgICAgICBmb3IgKDs7KSB7IFwKKyAgICAgICAgICAgICAgICBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOyBcCisgICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbikgXAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgICAgICAgICBpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHNjaGVkdWxlX3RpbWVvdXQocmV0KTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyBcCisgICAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgICAgICAgcmV0ID0gLUVSRVNUQVJUU1lTOyBcCisgICAgICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgfSBcCisgICAgICAgIGN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOyBcCisgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZ3cSwgJl9fd2FpdCk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkgXAorKHsgXAorICAgICAgICBsb25nIF9fcmV0ID0gdGltZW91dDsgXAorICAgICAgICBpZiAoIShjb25kaXRpb24pKSBcCisgICAgICAgICAgICAgICAgX193YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCBfX3JldCk7IFwKKyAgICAgICAgX19yZXQ7IFwKK30pCisjZW5kaWYKKyNkZWZpbmUgT05FX1RJQ0sgMQorI2RlZmluZSBPU19XQUlUKF90aW1lKSBcCit7CWludCBfaTsgXAorCWxvbmcgX2xvb3AgPSAoKF90aW1lKS8oMTAwMC9PU19IWikpID4gMCA/ICgoX3RpbWUpLygxMDAwL09TX0haKSkgOiAxO1wKKwl3YWl0X3F1ZXVlX2hlYWRfdCBfd2FpdDsgXAorCWluaXRfd2FpdHF1ZXVlX2hlYWQoJl93YWl0KTsgXAorCWZvciAoX2k9MDsgX2k8KF9sb29wKTsgX2krKykgXAorCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChfd2FpdCwgMCwgT05FX1RJQ0spOyB9CisKKworLyogTW9kaWZpZWQgYnkgV3UgWGktS3VuIDQvMjEvMjAwNiAqLwordHlwZWRlZiB2b2lkICgqVElNRVJfRlVOQ1RJT04pKHVuc2lnbmVkIGxvbmcpOworCisjZGVmaW5lIENPUFlfTUFDX0FERFIoQWRkcjEsIEFkZHIyKSAgICAgICAgICAgICBtZW1jcHkoKEFkZHIxKSwgKEFkZHIyKSwgTUFDX0FERFJfTEVOKQorCisjZGVmaW5lIE1sbWVBbGxvY2F0ZU1lbW9yeShfcEFkLCBfcHBWQSkgb3NfYWxsb2NfbWVtKF9wQWQsIF9wcFZBLCBNR01UX0RNQV9CVUZGRVJfU0laRSkKKyNkZWZpbmUgTWxtZUZyZWVNZW1vcnkoX3BBZCwgX3BWQSkgICAgIG9zX2ZyZWVfbWVtKF9wQWQsIF9wVkEpCisKKworI2lmZGVmIFJUMjg3MAorI2RlZmluZSBCVUlMRF9USU1FUl9GVU5DVElPTihfZnVuYykJCQkJCQkJCQkJCQkJXAordm9pZCBsaW51eF8jI19mdW5jKHVuc2lnbmVkIGxvbmcgZGF0YSkJCQkJCQkJCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCVBSQUxJTktfVElNRVJfU1RSVUNUCV9wVGltZXIgPSAoUFJBTElOS19USU1FUl9TVFJVQ1QpZGF0YTsJCQkJCVwKKwlSVDI4NzBfVElNRVJfRU5UUlkJCSpfcFFOb2RlOwkJCQkJCQkJCQkJCVwKKwlSVE1QX0FEQVBURVIJCQkqX3BBZDsJCQkJCQkJCQkJCQkJXAorCQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJX3BUaW1lci0+aGFuZGxlID0gX2Z1bmM7CQkJCQkJCQkJCQkJCQkJXAorCV9wQWQgPSAoUlRNUF9BREFQVEVSICopX3BUaW1lci0+cEFkOwkJCQkJCQkJCQkJCVwKKwlfcFFOb2RlID0gUlQyODcwX1RpbWVyUV9JbnNlcnQoX3BBZCwgX3BUaW1lcik7IAkJCQkJCQkJCVwKKwlpZiAoKF9wUU5vZGUgPT0gTlVMTCkgJiYgKF9wQWQtPlRpbWVyUS5zdGF0dXMgJiBSVDI4NzBfVEhSRUFEX0NBTl9ET19JTlNFUlQpKQlcCisJCVJUTVBfT1NfQWRkX1RpbWVyKCZfcFRpbWVyLT5UaW1lck9iaiwgSFopOyAgICAgICAgICAgICAgIAkJCQkJXAorfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKyNkZWZpbmUgREVDTEFSRV9USU1FUl9GVU5DVElPTihfZnVuYykJCQlcCit2b2lkIGxpbnV4XyMjX2Z1bmModW5zaWduZWQgbG9uZyBkYXRhKQorCisjZGVmaW5lIEdFVF9USU1FUl9GVU5DVElPTihfZnVuYykJCQkJXAorCQlsaW51eF8jI19mdW5jCisKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oTWxtZVBlcmlvZGljRXhlYyk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKE1sbWVSc3NpUmVwb3J0RXhlYyk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKEFzaWNSeEFudEV2YWxUaW1lb3V0KTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oQVBTRFBlcmlvZGljRXhlYyk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKEFzaWNSZlR1bmluZ0V4ZWMpOworI2lmZGVmIFJUMjg3MAorREVDTEFSRV9USU1FUl9GVU5DVElPTihCZWFjb25VcGRhdGVFeGVjKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKEJlYWNvblRpbWVvdXQpOworREVDTEFSRV9USU1FUl9GVU5DVElPTihTY2FuVGltZW91dCk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKEF1dGhUaW1lb3V0KTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oQXNzb2NUaW1lb3V0KTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oUmVhc3NvY1RpbWVvdXQpOworREVDTEFSRV9USU1FUl9GVU5DVElPTihEaXNhc3NvY1RpbWVvdXQpOworREVDTEFSRV9USU1FUl9GVU5DVElPTihMaW5rRG93bkV4ZWMpOworI2lmZGVmIExFQVBfU1VQUE9SVAorREVDTEFSRV9USU1FUl9GVU5DVElPTihMZWFwQXV0aFRpbWVvdXQpOworI2VuZGlmCitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKFN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcEV4ZWMpOworREVDTEFSRV9USU1FUl9GVU5DVElPTihXcGFEaXNhc3NvY0FwQW5kQmxvY2tBc3NvYyk7CitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKFBzUG9sbFdha2VFeGVjKTsKK0RFQ0xBUkVfVElNRVJfRlVOQ1RJT04oUmFkaW9PbkV4ZWMpOworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCitERUNMQVJFX1RJTUVSX0ZVTkNUSU9OKERsc1RpbWVvdXRBY3Rpb24pOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjdW5kZWYgQVBfV1NDX0lOQ0xVREVECisjdW5kZWYgU1RBX1dTQ19JTkNMVURFRAorI3VuZGVmIFdTQ19JTkNMVURFRAorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmIGRlZmluZWQoQVBfV1NDX0lOQ0xVREVEKSB8fCBkZWZpbmVkKFNUQV9XU0NfSU5DTFVERUQpCisjZGVmaW5lIFdTQ19JTkNMVURFRAorI2VuZGlmCisKKworCit2b2lkIFJUTVBfR2V0Q3VycmVudFN5c3RlbVRpbWUoTEFSR0VfSU5URUdFUiAqdGltZSk7CisKKworLyoKKyAqIHBhY2tldCBoZWxwZXIKKyAqIAktIGNvbnZlcnQgaW50ZXJuYWwgcnQgcGFja2V0IHRvIG9zIHBhY2tldCBvcgorICogICAgICAgICAgICAgb3MgcGFja2V0IHRvIHJ0IHBhY2tldAorICovCisjZGVmaW5lIFJUUEtUX1RPX09TUEtUKF9wKQkJKChzdHJ1Y3Qgc2tfYnVmZiAqKShfcCkpCisjZGVmaW5lIE9TUEtUX1RPX1JUUEtUKF9wKQkJKChQTkRJU19QQUNLRVQpKF9wKSkKKworI2RlZmluZSBHRVRfT1NfUEtUX0RBVEFQVFIoX3BrdCkgXAorCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCktPmRhdGEpCisKKyNkZWZpbmUgR0VUX09TX1BLVF9MRU4oX3BrdCkgXAorCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCktPmxlbikKKworI2RlZmluZSBHRVRfT1NfUEtUX0RBVEFUQUlMKF9wa3QpIFwKKwkJKFJUUEtUX1RPX09TUEtUKF9wa3QpLT50YWlsKQorCisjZGVmaW5lIEdFVF9PU19QS1RfSEVBRChfcGt0KSBcCisJCShSVFBLVF9UT19PU1BLVChfcGt0KS0+aGVhZCkKKworI2RlZmluZSBHRVRfT1NfUEtUX0VORChfcGt0KSBcCisJCShSVFBLVF9UT19PU1BLVChfcGt0KS0+ZW5kKQorCisjZGVmaW5lIEdFVF9PU19QS1RfTkVUREVWKF9wa3QpIFwKKwkJKFJUUEtUX1RPX09TUEtUKF9wa3QpLT5kZXYpCisKKyNkZWZpbmUgR0VUX09TX1BLVF9UWVBFKF9wa3QpIFwKKwkJKFJUUEtUX1RPX09TUEtUKF9wa3QpKQorCisjZGVmaW5lIEdFVF9PU19QS1RfTkVYVChfcGt0KSBcCisJCShSVFBLVF9UT19PU1BLVChfcGt0KS0+bmV4dCkKKworCisjZGVmaW5lIE9TX05UT0hTKF9WYWwpIFwKKwkJKG50b2hzKF9WYWwpKQorI2RlZmluZSBPU19IVE9OUyhfVmFsKSBcCisJCShodG9ucyhfVmFsKSkKKyNkZWZpbmUgT1NfTlRPSEwoX1ZhbCkgXAorCQkobnRvaGwoX1ZhbCkpCisjZGVmaW5lIE9TX0hUT05MKF9WYWwpIFwKKwkJKGh0b25sKF9WYWwpKQorCisvKiBzdGF0aXN0aWNzIGNvdW50ZXIgKi8KKyNkZWZpbmUgU1RBVFNfSU5DX1JYX1BBQ0tFVFMoX3BBZCwgX2RldikKKyNkZWZpbmUgU1RBVFNfSU5DX1RYX1BBQ0tFVFMoX3BBZCwgX2RldikKKworI2RlZmluZSBTVEFUU19JTkNfUlhfQllURVNTKF9wQWQsIF9kZXYsIGxlbikKKyNkZWZpbmUgU1RBVFNfSU5DX1RYX0JZVEVTUyhfcEFkLCBfZGV2LCBsZW4pCisKKyNkZWZpbmUgU1RBVFNfSU5DX1JYX0VSUk9SUyhfcEFkLCBfZGV2KQorI2RlZmluZSBTVEFUU19JTkNfVFhfRVJST1JTKF9wQWQsIF9kZXYpCisKKyNkZWZpbmUgU1RBVFNfSU5DX1JYX0RST1BQRUQoX3BBZCwgX2RldikKKyNkZWZpbmUgU1RBVFNfSU5DX1RYX0RST1BQRUQoX3BBZCwgX2RldikKKworCisjZGVmaW5lIENCX09GRiAgMTAKKworCisvLyAgIGNoZWNrIERESyBORElTX1BBQ0tFVCBkYXRhIHN0cnVjdHVyZSBhbmQgZmluZCBvdXQgb25seSBNaW5pcG9ydFJlc2VydmVkRXhbMC4uN10gY2FuIGJlIHVzZWQgYnkgb3VyIGRyaXZlciB3aXRob3V0CisvLyAgIGFtYmlndWl0eS4gRmllbGRzIGFmdGVyIHBQYWNrZXQtPk1pbmlwb3J0UmVzZXJ2ZWRFeFs4XSBtYXkgYmUgdXNlZCBieSBvdGhlciB3cmFwcGVyIGxheWVyIHRodXMgY3Jhc2hlcyB0aGUgZHJpdmVyCisvLworLy8jZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9NUihfcCkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApKQorCisvLyBVc2VyIFByaW9yaXR5CisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9VUChfcCwgX3ByaW8pCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzBdID0gX3ByaW8pCisjZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9VUChfcCkJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRiswXSkKKworLy8gRnJhZ21lbnQgIworI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfRlJBR01FTlRTKF9wLCBfbnVtKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzFdID0gX251bSkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX0ZSQUdNRU5UUyhfcCkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMV0pCisKKy8vIDB4MCB+MHg3ZjogVFggdG8gQVAncyBvd24gQlNTIHdoaWNoIGhhcyB0aGUgc3BlY2lmaWVkIEFJRC4gaWYgQUlEPjEyNywgc2V0IGJpdCA3IGluIFJUTVBfU0VUX1BBQ0tFVF9FTUFDVEFCIHRvby4KKy8vKHRoaXMgdmFsdWUgYWxzbyBhcyBNQUMob24tY2hpcCBXQ0lEKSB0YWJsZSBpbmRleCkKKy8vIDB4ODB+MHhmZjogVFggdG8gYSBXRFMgbGluay4gYjB+NjogV0RTIGluZGV4CisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9XQ0lEKF9wLCBfd2RzaWR4KQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzJdID0gX3dkc2lkeCkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX1dDSUQoX3ApICAgICAgICAgIAkJKChVQ0hBUikoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMl0pKQorCisvLyAweGZmOiBQS1RTUkNfTkRJUywgb3RoZXJzOiBsb2NhbCBUWCBidWZmZXIgaW5kZXguIFRoaXMgdmFsdWUgYWZmZWN0cyBob3cgdG8gYSBwYWNrZXQKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX1NPVVJDRShfcCwgX3BrdHNyYykJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRiszXSA9IF9wa3RzcmMpCisjZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9TT1VSQ0UoX3ApICAgICAgIAkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzNdKQorCisvLyBSVFMvQ1RTLXRvLXNlbGYgcHJvdGVjdGlvbiBtZXRob2QKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX1JUUyhfcCwgX251bSkgICAgICAJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRis0XSA9IF9udW0pCisjZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9SVFMoX3ApICAgICAgICAgIAkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzRdKQorLy8gc2VlIFJUTVBfUyhHKUVUX1BBQ0tFVF9FTUFDVEFCCisKKy8vIFRYIHJhdGUgaW5kZXgKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX1RYUkFURShfcCwgX3JhdGUpCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrNV0gPSBfcmF0ZSkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX1RYUkFURShfcCkJCSAgCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrNV0pCisKKy8vIEZyb20gd2hpY2ggSW50ZXJmYWNlCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF9JRihfcCwgX2lmZHgpCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrNl0gPSBfaWZkeCkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX0lGKF9wKQkJICAJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRis2XSkKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX05FVF9ERVZJQ0VfTUJTU0lEKF9wLCBfYnNzKQkJUlRNUF9TRVRfUEFDS0VUX0lGKChfcCksIChfYnNzKSkKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX05FVF9ERVZJQ0VfV0RTKF9wLCBfYnNzKQkJUlRNUF9TRVRfUEFDS0VUX0lGKChfcCksICgoX2JzcykgKyBNSU5fTkVUX0RFVklDRV9GT1JfV0RTKSkKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX05FVF9ERVZJQ0VfQVBDTEkoX3AsIF9pZHgpICAgCVJUTVBfU0VUX1BBQ0tFVF9JRigoX3ApLCAoKF9pZHgpICsgTUlOX05FVF9ERVZJQ0VfRk9SX0FQQ0xJKSkKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX05FVF9ERVZJQ0VfTUVTSChfcCwgX2lkeCkgICAJUlRNUF9TRVRfUEFDS0VUX0lGKChfcCksICgoX2lkeCkgKyBNSU5fTkVUX0RFVklDRV9GT1JfTUVTSCkpCisjZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9ORVRfREVWSUNFX01CU1NJRChfcCkJCQlSVE1QX0dFVF9QQUNLRVRfSUYoKF9wKSkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX05FVF9ERVZJQ0UoX3ApCQkJCQlSVE1QX0dFVF9QQUNLRVRfSUYoKF9wKSkKKworI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTU9SRURBVEEoX3AsIF9tb3JlYml0KQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzddID0gX21vcmViaXQpCisjZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9NT1JFREFUQShfcCkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzddKQorCisvLyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX05FVF9ERVZJQ0VfTUJTU0lEKF9wLCBfYnNzKQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYls4XSA9IF9ic3MpCisvLyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX05FVF9ERVZJQ0VfTUJTU0lEKF9wKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbOF0pCisKKy8vCisvLwlTZXBjaWZpYyBQYWtjZXQgVHlwZSBkZWZpbml0aW9uCisvLworI2RlZmluZSBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19DQl9PRkZTRVQJMTEKKworI2RlZmluZSBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19ESENQCQkweDAxCisjZGVmaW5lIFJUTVBfUEFDS0VUX1NQRUNJRklDX0VBUE9MCQkweDAyCisjZGVmaW5lIFJUTVBfUEFDS0VUX1NQRUNJRklDX0lQVjQJCTB4MDQKKyNkZWZpbmUgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfV0FJCQkweDA4CisjZGVmaW5lIFJUTVBfUEFDS0VUX1NQRUNJRklDX1ZMQU4JCTB4MTAKKyNkZWZpbmUgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfTExDU05BUAkweDIwCisKKy8vU3BlY2lmaWMKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX1NQRUNJRklDKF9wLCBfZmxnKQkgICAJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSA9IF9mbGcpCisKKy8vREhDUAorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfREhDUChfcCwgX2ZsZykgICAJCQkJCQkJCQkJCQkJXAorCQkJZG97CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJaWYgKF9mbGcpCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pIHw9IChSVE1QX1BBQ0tFVF9TUEVDSUZJQ19ESENQKTsJCVwKKwkJCQllbHNlCQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSAmPSAoIVJUTVBfUEFDS0VUX1NQRUNJRklDX0RIQ1ApOwlcCisJCQl9d2hpbGUoMCkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX0RIQ1AoX3ApCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdICYgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfREhDUCkKKworLy9FQVBPTAorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfRUFQT0woX3AsIF9mbGcpICAgCQkJCQkJCQkJCQkJCVwKKwkJCWRvewkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCWlmIChfZmxnKQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSB8PSAoUlRNUF9QQUNLRVRfU1BFQ0lGSUNfRUFQT0wpOwkJXAorCQkJCWVsc2UJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pICY9ICghUlRNUF9QQUNLRVRfU1BFQ0lGSUNfRUFQT0wpOwlcCisJCQl9d2hpbGUoMCkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX0VBUE9MKF9wKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSAmIFJUTVBfUEFDS0VUX1NQRUNJRklDX0VBUE9MKQorCisvL1dBSQorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfV0FJKF9wLCBfZmxnKSAgIAkJCQkJCQkJCQkJCQlcCisJCQlkb3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQlpZiAoX2ZsZykJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgfD0gKFJUTVBfUEFDS0VUX1NQRUNJRklDX1dBSSk7CQlcCisJCQkJZWxzZQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgJj0gKCFSVE1QX1BBQ0tFVF9TUEVDSUZJQ19XQUkpOwlcCisJCQl9d2hpbGUoMCkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX1dBSShfcCkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0gJiBSVE1QX1BBQ0tFVF9TUEVDSUZJQ19XQUkpCisKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX0xPV1JBVEUoX3ApCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdICYgKFJUTVBfUEFDS0VUX1NQRUNJRklDX0VBUE9MIHwgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfREhDUCB8IFJUTVBfUEFDS0VUX1NQRUNJRklDX1dBSSkpCisKKy8vVkxBTgorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfVkxBTihfcCwgX2ZsZykgICAJCQkJCQkJCQkJCQkJXAorCQkJZG97CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJaWYgKF9mbGcpCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pIHw9IChSVE1QX1BBQ0tFVF9TUEVDSUZJQ19WTEFOKTsJCVwKKwkJCQllbHNlCQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSAmPSAoIVJUTVBfUEFDS0VUX1NQRUNJRklDX1ZMQU4pOwlcCisJCQl9d2hpbGUoMCkKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX1ZMQU4oX3ApCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdICYgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfVkxBTikKKworLy9MTEMvU05BUAorI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTExDU05BUChfcCwgX2ZsZykgICAJCQkJCQkJCQkJCQkJXAorCQkJZG97CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJaWYgKF9mbGcpCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pIHw9IChSVE1QX1BBQ0tFVF9TUEVDSUZJQ19MTENTTkFQKTsJCVwKKwkJCQllbHNlCQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdKSAmPSAoIVJUTVBfUEFDS0VUX1NQRUNJRklDX0xMQ1NOQVApOwkJXAorCQkJfXdoaWxlKDApCisKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX0xMQ1NOQVAoX3ApCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTFdICYgUlRNUF9QQUNLRVRfU1BFQ0lGSUNfTExDU05BUCkKKworLy8gSVAKKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX0lQVjQoX3AsIF9mbGcpCQkJCQkJCQkJCQkJCQlcCisJCQlkb3sJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQlpZiAoX2ZsZykJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSkgfD0gKFJUTVBfUEFDS0VUX1NQRUNJRklDX0lQVjQpOwkJXAorCQkJCWVsc2UJCQkJCQkJCQkJCQkJCQkJCQlcCisJCQkJCShSVFBLVF9UT19PU1BLVChfcCktPmNiW0NCX09GRisxMV0pICY9ICghUlRNUF9QQUNLRVRfU1BFQ0lGSUNfSVBWNCk7CVwKKwkJCX13aGlsZSgwKQorCisjZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9JUFY0KF9wKQkJKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzExXSAmIFJUTVBfUEFDS0VUX1NQRUNJRklDX0lQVjQpCisKKy8vIElmIHRoaXMgZmxhZyBpcyBzZXQsIGl0IGluZGljYXRlcyB0aGF0IHRoaXMgRUFQb0wgZnJhbWUgTVVTVCBiZSBjbGVhci4KKyNkZWZpbmUgUlRNUF9TRVRfUEFDS0VUX0NMRUFSX0VBUF9GUkFNRShfcCwgX2ZsZykgICAoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTJdID0gX2ZsZykKKyNkZWZpbmUgUlRNUF9HRVRfUEFDS0VUX0NMRUFSX0VBUF9GUkFNRShfcCkgICAgICAgICAoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMTJdKQorCisjZGVmaW5lIFJUTVBfU0VUX1BBQ0tFVF81VlQoX3AsIF9mbGcpICAgKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzIyXSA9IF9mbGcpCisjZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF81VlQoX3ApICAgICAgICAgKFJUUEtUX1RPX09TUEtUKF9wKS0+Y2JbQ0JfT0ZGKzIyXSkKKworCisjaWZkZWYgSU5GX0FNQVpPTl9TRQorLypJdmVyc29uIHBhdGNoIGZvciBXTU0gQTUtVDA3ICxXaXJlbGVzc1N0YVRvV2lyZWxlc3NTdGEgZG8gbm90IGJ1bGsgb3V0IGFnZ3JlZ2F0ZSAqLworI2RlZmluZSBSVE1QX1NFVF9QQUNLRVRfTk9CVUxLT1VUKF9wLCBfbW9yZWJpdCkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMjNdID0gX21vcmViaXQpCisjZGVmaW5lIFJUTVBfR0VUX1BBQ0tFVF9OT0JVTEtPVVQoX3ApCQkJCQkoUlRQS1RfVE9fT1NQS1QoX3ApLT5jYltDQl9PRkYrMjNdKQorI2VuZGlmIC8vIElORl9BTUFaT05fU0UgLy8KKworCisKKyNpZmRlZiBDT05GSUdfNVZUX0VOSEFOQ0UKKyNkZWZpbmUgQlJJREdFX1RBRyAweDM1NTY0MjUyICAgIC8vIGRlcGVuZHMgb24gNVZUIGRlZmluZSBpbiBicl9pbnB1dC5jCisjZW5kaWYKKworCisjZGVmaW5lIE5ESVNfU0VUX1BBQ0tFVF9TVEFUVVMoX3AsIF9zdGF0dXMpCisKKworI2RlZmluZSBHRVRfU0dfTElTVF9GUk9NX1BBQ0tFVChfcCwgX3NjKQlcCisgICAgcnRfZ2V0X3NnX2xpc3RfZnJvbV9wYWNrZXQoX3AsIF9zYykKKworI2RlZmluZSBOZGlzTW92ZU1lbW9yeShEZXN0aW5hdGlvbiwgU291cmNlLCBMZW5ndGgpIG1lbW1vdmUoRGVzdGluYXRpb24sIFNvdXJjZSwgTGVuZ3RoKQorI2RlZmluZSBOZGlzWmVyb01lbW9yeShEZXN0aW5hdGlvbiwgTGVuZ3RoKSAgICAgICAgIG1lbXNldChEZXN0aW5hdGlvbiwgMCwgTGVuZ3RoKQorI2RlZmluZSBOZGlzRmlsbE1lbW9yeShEZXN0aW5hdGlvbiwgTGVuZ3RoLCBGaWxsKSAgIG1lbXNldChEZXN0aW5hdGlvbiwgRmlsbCwgTGVuZ3RoKQorI2RlZmluZSBOZGlzRXF1YWxNZW1vcnkoU291cmNlMSwgU291cmNlMiwgTGVuZ3RoKSAgICghbWVtY21wKFNvdXJjZTEsIFNvdXJjZTIsIExlbmd0aCkpCisjZGVmaW5lIFJUTVBFcXVhbE1lbW9yeShTb3VyY2UxLCBTb3VyY2UyLCBMZW5ndGgpCSghbWVtY21wKFNvdXJjZTEsIFNvdXJjZTIsIExlbmd0aCkpCisKKworI2RlZmluZSBSVE1QX0lOQ19SRUYoX0EpCQkwCisjZGVmaW5lIFJUTVBfREVDX1JFRihfQSkJCTAKKyNkZWZpbmUgUlRNUF9HRVRfUkVGKF9BKQkJMAorCisKKworLyoKKyAqIFVMT05HCisgKiBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0xvdygKKyAqICAgSU4gTkRJU19QSFlTSUNBTF9BRERSRVNTICBQaHlzaWNhbEFkZHJlc3MpOworICovCisjZGVmaW5lIFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzTG93KFBoeXNpY2FsQWRkcmVzcykJCShQaHlzaWNhbEFkZHJlc3MpCisKKy8qCisgKiBVTE9ORworICogUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NIaWdoKAorICogICBJTiBORElTX1BIWVNJQ0FMX0FERFJFU1MgIFBoeXNpY2FsQWRkcmVzcyk7CisgKi8KKyNkZWZpbmUgUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NIaWdoKFBoeXNpY2FsQWRkcmVzcykJCSgwKQorCisvKgorICogVk9JRAorICogUlRNUF9TZXRQaHlzaWNhbEFkZHJlc3NMb3coCisgKiAgIElOIE5ESVNfUEhZU0lDQUxfQUREUkVTUyAgUGh5c2ljYWxBZGRyZXNzLAorICogICBJTiBVTE9ORyAgVmFsdWUpOworICovCisjZGVmaW5lIFJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzTG93KFBoeXNpY2FsQWRkcmVzcywgVmFsdWUpCVwKKwkJCVBoeXNpY2FsQWRkcmVzcyA9IFZhbHVlOworCisvKgorICogVk9JRAorICogUlRNUF9TZXRQaHlzaWNhbEFkZHJlc3NIaWdoKAorICogICBJTiBORElTX1BIWVNJQ0FMX0FERFJFU1MgIFBoeXNpY2FsQWRkcmVzcywKKyAqICAgSU4gVUxPTkcgIFZhbHVlKTsKKyAqLworI2RlZmluZSBSVE1QX1NldFBoeXNpY2FsQWRkcmVzc0hpZ2goUGh5c2ljYWxBZGRyZXNzLCBWYWx1ZSkKKworCisvL0NPTlRBSU5JTkdfUkVDT1JEKHBFbnRyeSwgTkRJU19QQUNLRVQsIE1pbmlwb3J0UmVzZXJ2ZWRFeCk7CisjZGVmaW5lIFFVRVVFX0VOVFJZX1RPX1BBQ0tFVChwRW50cnkpIFwKKwkoUE5ESVNfUEFDS0VUKShwRW50cnkpCisKKyNkZWZpbmUgUEFDS0VUX1RPX1FVRVVFX0VOVFJZKHBQYWNrZXQpIFwKKwkoUFFVRVVFX0VOVFJZKShwUGFja2V0KQorCisKKyNpZm5kZWYgQ09OVEFJTklOR19SRUNPUkQKKyNkZWZpbmUgQ09OVEFJTklOR19SRUNPUkQoYWRkcmVzcywgdHlwZSwgZmllbGQpCQkJXAorKCh0eXBlICopKChQQ0hBUikoYWRkcmVzcykgLSBvZmZzZXRvZih0eXBlLCBmaWVsZCkpKQorI2VuZGlmCisKKworI2RlZmluZSBSRUxFQVNFX05ESVNfUEFDS0VUKF9wQWQsIF9wUGFja2V0LCBfU3RhdHVzKSAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVE1QRnJlZU5kaXNQYWNrZXQoX3BBZCwgX3BQYWNrZXQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisKKyNkZWZpbmUgU1dJVENIX1BoeUFCKF9wQUEsIF9wQkIpICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVUxPTkcJQUFCYXNlUGFIaWdoOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVTE9ORwlBQUJhc2VQYUxvdzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgVUxPTkcJQkJCYXNlUGFIaWdoOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVTE9ORwlCQkJhc2VQYUxvdzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQkJCYXNlUGFIaWdoID0gUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NIaWdoKF9wQkIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgQkJCYXNlUGFMb3cgPSBSVE1QX0dldFBoeXNpY2FsQWRkcmVzc0xvdyhfcEJCKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFBQmFzZVBhSGlnaCA9IFJUTVBfR2V0UGh5c2ljYWxBZGRyZXNzSGlnaChfcEFBKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEFBQmFzZVBhTG93ID0gUlRNUF9HZXRQaHlzaWNhbEFkZHJlc3NMb3coX3BBQSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBSVE1QX1NldFBoeXNpY2FsQWRkcmVzc0hpZ2goX3BBQSwgQkJCYXNlUGFIaWdoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzTG93KF9wQUEsIEJCQmFzZVBhTG93KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJUTVBfU2V0UGh5c2ljYWxBZGRyZXNzSGlnaChfcEJCLCBBQUJhc2VQYUhpZ2gpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUlRNUF9TZXRQaHlzaWNhbEFkZHJlc3NMb3coX3BCQiwgQUFCYXNlUGFMb3cpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKworI2RlZmluZSBOZGlzV3JpdGVFcnJvckxvZ0VudHJ5KF9hLCBfYiwgX2MsIF9kKQorI2RlZmluZSBOZGlzTUFsbG9jYXRlTWFwUmVnaXN0ZXJzKF9hLCBfYiwgX2MsIF9kLCBfZSkJCU5ESVNfU1RBVFVTX1NVQ0NFU1MKKworCisjZGVmaW5lIE5kaXNBY3F1aXJlU3BpbkxvY2sJCVJUTVBfU0VNX0xPQ0sKKyNkZWZpbmUgTmRpc1JlbGVhc2VTcGluTG9jawkJUlRNUF9TRU1fVU5MT0NLCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBOZGlzR2V0U3lzdGVtVXBUaW1lKFVMT05HICp0aW1lKQoreworCSp0aW1lID0gamlmZmllczsKK30KKworLy9wUGFja2V0ID0gQ09OVEFJTklOR19SRUNPUkQocEVudHJ5LCBORElTX1BBQ0tFVCwgTWluaXBvcnRSZXNlcnZlZEV4KTsKKyNkZWZpbmUgUVVFVUVfRU5UUllfVE9fUEtUKHBFbnRyeSkgXAorCQkoKFBORElTX1BBQ0tFVCkgKHBFbnRyeSkpCisKK2ludCBydDI4eHhfcGFja2V0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKworCit2b2lkIHJ0bXBfb3NfdGhyZWFkX2luaXQoUFVDSEFSIHBUaHJlYWROYW1lLCBQVk9JRCBwTm90aWZ5KTsKKworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfbWFpbl9kZXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDAwNjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydF9tYWluX2Rldi5jCkBAIC0wLDAgKzEsMTgwMCBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgICBNb2R1bGUgTmFtZToKKyAgICBydF9tYWluX2Rldi5jCisKKyAgICBBYnN0cmFjdDoKKyAgICBDcmVhdGUgYW5kIHJlZ2lzdGVyIG5ldHdvcmsgaW50ZXJmYWNlLgorCisgICAgUmV2aXNpb24gSGlzdG9yeToKKyAgICBXaG8gICAgICAgICBXaGVuICAgICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU2FtcGxlCQlNYXIvMjEvMDcJCU1lcmdlIFJUMjg3MCBhbmQgUlQyODYwIGRyaXZlcnMuCisqLworCisjaW5jbHVkZSAicnRfY29uZmlnLmgiCisKKyNkZWZpbmUgRk9SVFlfTUhaX0lOVE9MRVJBTlRfSU5URVJWQUwJKDYwKjEwMDApIC8vIDEgbWluCisKKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKy8vIHJlY29yZCB3aGV0aGVyIHRoZSBjYXJkIGluIHRoZSBjYXJkIGxpc3QgaXMgdXNlZCBpbiB0aGUgY2FyZCBmaWxlCitVSU5UOCAgTUNfQ2FyZFVzZWRbTUFYX05VTV9PRl9NVUxUSVBMRV9DQVJEXTsKKy8vIHJlY29yZCB1c2VkIGNhcmQgbWFjIGFkZHJlc3MgaW4gdGhlIGNhcmQgbGlzdAorc3RhdGljIFVJTlQ4ICBNQ19DYXJkTWFjW01BWF9OVU1fT0ZfTVVMVElQTEVfQ0FSRF1bNl07CisjZW5kaWYgLy8gTVVMVElQTEVfQ0FSRF9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVAorVUlOVDMyIENXX01BWF9JTl9CSVRTOworI2VuZGlmIC8vIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUIC8vCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIFByaXZhdGUgVmFyaWFibGVzIFVzZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8vc3RhdGljIFJBTElOS19USU1FUl9TVFJVQ1QgICAgIFBlcmlvZGljVGltZXI7CisKK2NoYXIgKm1hYyA9ICIiOwkJICAgLy8gZGVmYXVsdCAwMDowMDowMDowMDowMDowMAorY2hhciAqaG9zdG5hbWUgPSAiIjsJCSAgIC8vIGRlZmF1bHQgQ01QQworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSBLRVJORUxfVkVSU0lPTigyLDYsMTIpCitNT0RVTEVfUEFSTSAobWFjLCAicyIpOworI2Vsc2UKK21vZHVsZV9wYXJhbSAobWFjLCBjaGFycCwgMCk7CisjZW5kaWYKK01PRFVMRV9QQVJNX0RFU0MgKG1hYywgInJ0Mjh4eDogd2lyZWxlc3MgbWFjIGFkZHIiKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBQcm90b3R5cGVzIG9mIEZ1bmN0aW9ucyBVc2VkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitleHRlcm4gQk9PTEVBTiBiYV9yZW9yZGVyaW5nX3Jlc291cmNlX2luaXQoUFJUTVBfQURBUFRFUiBwQWQsIGludCBudW0pOworZXh0ZXJuIHZvaWQgYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9yZWxlYXNlKFBSVE1QX0FEQVBURVIgcEFkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KK2V4dGVybiBORElTX1NUQVRVUyBOSUNMb2FkUmF0ZVN3aXRjaGluZ1BhcmFtcyhJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKKworLy8gcHVibGljIGZ1bmN0aW9uIHByb3RvdHlwZQorSU5UIF9fZGV2aW5pdCBydDI4eHhfcHJvYmUoSU4gdm9pZCAqX2Rldl9wLCBJTiB2b2lkICpfZGV2X2lkX3AsCisJCQkJCQkJSU4gVUlOVCBhcmdjLCBPVVQgUFJUTVBfQURBUFRFUiAqcHBBZCk7CisKKy8vIHByaXZhdGUgZnVuY3Rpb24gcHJvdG90eXBlCitzdGF0aWMgaW50IHJ0Mjh4eF9pbml0KElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKK0lOVCBydDI4eHhfc2VuZF9wYWNrZXRzKElOIHN0cnVjdCBza19idWZmICpza2JfcCwgSU4gc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDw9IDB4MjA0MDIJLy8gUmVkIEhhdCA3LjEKK3N0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXYoCisJaW50IHNpemVvZl9wcml2LAorCWNvbnN0IGNoYXIgKm1hc2ssCisJdm9pZCAoKnNldHVwKShzdHJ1Y3QgbmV0X2RldmljZSAqKSk7CisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKK3N0YXRpYyB2b2lkIENmZ0luaXRIb29rKFBSVE1QX0FEQVBURVIgcEFkKTsKKy8vc3RhdGljIEJPT0xFQU4gUlQyOFhYQXZhaWxSQU5hbWVBc3NpZ24oSU4gQ0hBUiAqbmFtZV9wKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorZXh0ZXJuCWNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBydDI4eHhfaXdfaGFuZGxlcl9kZWY7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVAorZXh0ZXJuCWNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBydDI4eHhfYXBfaXdfaGFuZGxlcl9kZWY7CisjZW5kaWYgLy8gQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQgLy8KKworI2lmIFdJUkVMRVNTX0VYVCA+PSAxMgorLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIHF1ZXJ5IC9wcm9jCitzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqcnQyOHh4X2dldF93aXJlbGVzc19zdGF0cygKKyAgICBJTiBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldik7CisjZW5kaWYKKworc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKlJUMjh4eF9nZXRfZXRoZXJfc3RhdHMoCisgICAgSU4gIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBDbG9zZSByYXh4IGludGVyZmFjZS4KKworQXJndW1lbnRzOgorCSpuZXRfZGV2CQkJdGhlIHJheHggaW50ZXJmYWNlIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorICAgIDAJCQkJCU9wZW4gT0sKKwlvdGhlcndpc2UJCQlPcGVuIEZhaWwKKworTm90ZToKKwkxLiBpZiBvcGVuIGZhaWwsIGtlcm5lbCB3aWxsIG5vdCBjYWxsIHRoZSBjbG9zZSBmdW5jdGlvbi4KKwkyLiBGcmVlIG1lbW9yeSBmb3IKKwkJKDEpIE1sbWUgTWVtb3J5IEhhbmRsZXI6CQlNbG1lSGFsdCgpCisJCSgyKSBUWCAmIFJYOgkJCQkJUlRNUEZyZWVUeFJ4UmluZ01lbW9yeSgpCisJCSgzKSBCQSBSZW9yZGVyaW5nOiAJCQkJYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9yZWxlYXNlKCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK2ludCBNYWluVmlydHVhbElGX2Nsb3NlKElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworICAgIFJUTVBfQURBUFRFUiAqcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKworCS8vIFNhbml0eSBjaGVjayBmb3IgcEFkCisJaWYgKHBBZCA9PSBOVUxMKQorCQlyZXR1cm4gMDsgLy8gY2xvc2Ugb2sKKworCW5ldGlmX2NhcnJpZXJfb2ZmKHBBZC0+bmV0X2Rldik7CisJbmV0aWZfc3RvcF9xdWV1ZShwQWQtPm5ldF9kZXYpOworCisKKworCVZJUlRVQUxfSUZfRE9XTihwQWQpOworCisJUlRfTU9EX0RFQ19VU0VfQ09VTlQoKTsKKworCXJldHVybiAwOyAvLyBjbG9zZSBvaworfQorCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIE9wZW4gcmF4eCBpbnRlcmZhY2UuCisKK0FyZ3VtZW50czoKKwkqbmV0X2RldgkJCXRoZSByYXh4IGludGVyZmFjZSBwb2ludGVyCisKK1JldHVybiBWYWx1ZToKKyAgICAwCQkJCQlPcGVuIE9LCisJb3RoZXJ3aXNlCQkJT3BlbiBGYWlsCisKK05vdGU6CisJMS4gaWYgb3BlbiBmYWlsLCBrZXJuZWwgd2lsbCBub3QgY2FsbCB0aGUgY2xvc2UgZnVuY3Rpb24uCisJMi4gRnJlZSBtZW1vcnkgZm9yCisJCSgxKSBNbG1lIE1lbW9yeSBIYW5kbGVyOgkJTWxtZUhhbHQoKQorCQkoMikgVFggJiBSWDoJCQkJCVJUTVBGcmVlVHhSeFJpbmdNZW1vcnkoKQorCQkoMykgQkEgUmVvcmRlcmluZzogCQkJCWJhX3Jlb3JkZXJpbmdfcmVzb3VyY2VfcmVsZWFzZSgpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitpbnQgTWFpblZpcnR1YWxJRl9vcGVuKElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworICAgIFJUTVBfQURBUFRFUiAqcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKworCS8vIFNhbml0eSBjaGVjayBmb3IgcEFkCisJaWYgKHBBZCA9PSBOVUxMKQorCQlyZXR1cm4gMDsgLy8gY2xvc2Ugb2sKKworCWlmIChWSVJUVUFMX0lGX1VQKHBBZCkgIT0gMCkKKwkJcmV0dXJuIC0xOworCisJLy8gaW5jcmVhc2UgTU9EVUxFIHVzZSBjb3VudAorCVJUX01PRF9JTkNfVVNFX0NPVU5UKCk7CisKKwluZXRpZl9zdGFydF9xdWV1ZShuZXRfZGV2KTsKKwluZXRpZl9jYXJyaWVyX29uKG5ldF9kZXYpOworCW5ldGlmX3dha2VfcXVldWUobmV0X2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBDbG9zZSByYXh4IGludGVyZmFjZS4KKworQXJndW1lbnRzOgorCSpuZXRfZGV2CQkJdGhlIHJheHggaW50ZXJmYWNlIHBvaW50ZXIKKworUmV0dXJuIFZhbHVlOgorICAgIDAJCQkJCU9wZW4gT0sKKwlvdGhlcndpc2UJCQlPcGVuIEZhaWwKKworTm90ZToKKwkxLiBpZiBvcGVuIGZhaWwsIGtlcm5lbCB3aWxsIG5vdCBjYWxsIHRoZSBjbG9zZSBmdW5jdGlvbi4KKwkyLiBGcmVlIG1lbW9yeSBmb3IKKwkJKDEpIE1sbWUgTWVtb3J5IEhhbmRsZXI6CQlNbG1lSGFsdCgpCisJCSgyKSBUWCAmIFJYOgkJCQkJUlRNUEZyZWVUeFJ4UmluZ01lbW9yeSgpCisJCSgzKSBCQSBSZW9yZGVyaW5nOiAJCQkJYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9yZWxlYXNlKCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK2ludCBydDI4eHhfY2xvc2UoSU4gUE5FVF9ERVYgZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICogbmV0X2RldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldjsKKyAgICBSVE1QX0FEQVBURVIJKnBBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CisJQk9PTEVBTiAJCUNhbmNlbGxlZCA9IEZBTFNFOworCVVJTlQzMgkJCWkgPSAwOworI2lmZGVmIFJUMjg3MAorCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHVubGlua193YWtldXApOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJLy9SVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRU1PVkVfSU5fUFJPR1JFU1MpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+IHJ0Mjh4eF9jbG9zZVxuIikpOworCisJLy8gU2FuaXR5IGNoZWNrIGZvciBwQWQKKwlpZiAocEFkID09IE5VTEwpCisJCXJldHVybiAwOyAvLyBjbG9zZSBvaworCisKKyNpZmRlZiBXRFNfU1VQUE9SVAorCVdkc0Rvd24ocEFkKTsKKyNlbmRpZiAvLyBXRFNfU1VQUE9SVCAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisKKwkJLy8gSWYgZGlydmVyIGRvZXNuJ3Qgd2FrZSB1cCBmaXJtd2FyZSBoZXJlLAorCQkvLyBOSUNMb2FkRmlybXdhcmUgd2lsbCBoYW5nIGZvcmV2ZXIgd2hlbiBpbnRlcmZhY2UgaXMgdXAgYWdhaW4uCisJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQorICAgICAgICB7CisJCSAgICBBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKKyAgICAgICAgfQorCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCS8vIHNlbmQgRExTLVRFQVJfRE9XTiBtZXNzYWdlLAorCQlpZiAocEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJCXsKKwkJCVVDSEFSIGk7CisKKwkJCS8vIHRlYXIgZG93biBsb2NhbCBkbHMgdGFibGUgZW50cnkKKwkJCWZvciAoaT0wOyBpPE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwkJCXsKKwkJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKSkKKwkJCQl7CisJCQkJCVJUTVBTZW5kRExTVGVhckRvd25GcmFtZShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpOworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQl9CisJCQl9CisKKwkJCS8vIHRlYXIgZG93biBwZWVyIGRscyB0YWJsZSBlbnRyeQorCQkJZm9yIChpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwkJCXsKKwkJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKSkKKwkJCQl7CisJCQkJCVJUTVBTZW5kRExTVGVhckRvd25GcmFtZShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpOworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfTk9ORTsKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQl9CisJCQl9CisJCQlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7CisJCX0KKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCQlpZiAoSU5GUkFfT04ocEFkKSAmJgorCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkpKQorCQl7CisJCQlNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QJRGlzUmVxOworCQkJTUxNRV9RVUVVRV9FTEVNICpNc2dFbGVtID0gKE1MTUVfUVVFVUVfRUxFTSAqKSBrbWFsbG9jKHNpemVvZihNTE1FX1FVRVVFX0VMRU0pLCBNRU1fQUxMT0NfRkxBRyk7CisKKwkJCUNPUFlfTUFDX0FERFIoRGlzUmVxLkFkZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCURpc1JlcS5SZWFzb24gPSAgUkVBU09OX0RFQVVUSF9TVEFfTEVBVklORzsKKworCQkJTXNnRWxlbS0+TWFjaGluZSA9IEFTU09DX1NUQVRFX01BQ0hJTkU7CisJCQlNc2dFbGVtLT5Nc2dUeXBlID0gTVQyX01MTUVfRElTQVNTT0NfUkVROworCQkJTXNnRWxlbS0+TXNnTGVuID0gc2l6ZW9mKE1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCk7CisJCQlOZGlzTW92ZU1lbW9yeShNc2dFbGVtLT5Nc2csICZEaXNSZXEsIHNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpKTsKKworCQkJLy8gUHJldmVudCB0byBjb25uZWN0IEFQIGFnYWluIGluIFNUQU1sbWVQZXJpb2RpY0V4ZWMKKwkJCXBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbj0gMzI7CisJCQlOZGlzWmVyb01lbW9yeShwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbik7CisKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0RJU0FTU09DOworCQkJTWxtZURpc2Fzc29jUmVxQWN0aW9uKHBBZCwgTXNnRWxlbSk7CisJCQlrZnJlZShNc2dFbGVtKTsKKworCQkJUlRNUHVzZWNEZWxheSgxMDAwKTsKKwkJfQorCisjaWZkZWYgUlQyODcwCisJUlRNUF9TRVRfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVNT1ZFX0lOX1BST0dSRVNTKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2lmZGVmIENDWF9TVVBQT1JUCisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuTGVhcEF1dGhUaW1lciwgJkNhbmNlbGxlZCk7CisjZW5kaWYKKworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLlN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyLCAmQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5XcGFEaXNhc3NvY0FuZEJsb2NrQXNzb2NUaW1lciwgJkNhbmNlbGxlZCk7CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZuZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJCXsKKwkJCXVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKwkJCS8vIHNlbmQgd2lyZWxlc3MgZXZlbnQgdG8gd3BhX3N1cHBsaWNhbnQgZm9yIGluZnJvbWluZyBpbnRlcmZhY2UgZG93bi4KKwkJCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwkJCXdycXUuZGF0YS5mbGFncyA9IFJUX0lOVEVSRkFDRV9ET1dOOworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKwkJfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisJCU1sbWVSYWRpb09mZihwQWQpOworCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MpOworCisJZm9yIChpID0gMCA7IGkgPCBOVU1fT0ZfVFhfUklORzsgaSsrKQorCXsKKwkJd2hpbGUgKHBBZC0+RGVRdWV1ZVJ1bm5pbmdbaV0gPT0gVFJVRSkKKwkJeworCQkJcHJpbnRrKCJXYWl0aW5nIGZvciBUeFF1ZXVlWyVkXSBkb25lLi4uLi4uLi4uLlxuIiwgaSk7CisJCQlSVE1QdXNlY0RlbGF5KDEwMDApOworCQl9CisJfQorCisjaWZkZWYgUlQyODcwCisJLy8gZW5zdXJlIHRoZXJlIGFyZSBubyBtb3JlIGFjdGl2ZSB1cmJzLgorCWFkZF93YWl0X3F1ZXVlICgmdW5saW5rX3dha2V1cCwgJndhaXQpOworCXBBZC0+d2FpdCA9ICZ1bmxpbmtfd2FrZXVwOworCisJLy8gbWF5YmUgd2FpdCBmb3IgZGVsZXRpb25zIHRvIGZpbmlzaC4KKwlpID0gMDsKKwkvL3doaWxlKChpIDwgMjUpICYmIGF0b21pY19yZWFkKCZwQWQtPlBlbmRpbmdSeCkgPiAwKQorCXdoaWxlKGkgPCAyNSkKKwl7CisJCXVuc2lnbmVkIGxvbmcgSXJxRmxhZ3M7CisKKwkJUlRNUF9JUlFfTE9DSygmcEFkLT5CdWxrSW5Mb2NrLCBJcnFGbGFncyk7CisJCWlmIChwQWQtPlBlbmRpbmdSeCA9PSAwKQorCQl7CisJCQlSVE1QX0lSUV9VTkxPQ0soJnBBZC0+QnVsa0luTG9jaywgSXJxRmxhZ3MpOworCQkJYnJlYWs7CisJCX0KKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPkJ1bGtJbkxvY2ssIElycUZsYWdzKTsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiw5KQorCQltc2xlZXAoVU5MSU5LX1RJTUVPVVRfTVMpOwkvL1RpbWUgaW4gbWlsbGlzZWNvbmQKKyNlbHNlCisJCVJUTVB1c2VjRGVsYXkoVU5MSU5LX1RJTUVPVVRfTVMqMTAwMCk7CS8vVGltZSBpbiBtaWNyb3NlY29uZAorI2VuZGlmCisJCWkrKzsKKwl9CisJcEFkLT53YWl0ID0gTlVMTDsKKwlyZW1vdmVfd2FpdF9xdWV1ZSAoJnVubGlua193YWtldXAsICZ3YWl0KTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCS8vUlRVU0JDbGVhblVwTUxNRVdhaXRRdWV1ZShwQWQpOwkvKm5vdCB1c2VkIGluIFJUMjh4eCovCisKKworI2lmZGVmIFJUMjg3MAorCS8vIFdlIG5lZWQgY2xlYXIgdGltZXJRIHJlbGF0ZWQgc3RydWN0dXJlIGJlZm9yZSBleGl0cyBvZiB0aGUgdGltZXIgdGhyZWFkLgorCVJUMjg3MF9UaW1lclFfRXhpdChwQWQpOworCS8vIENsb3NlIGtlcm5lbCB0aHJlYWRzIG9yIHRhc2tsZXRzCisJUlQyOHh4VGhyZWFkVGVybWluYXRlKHBBZCk7CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwkvLyBTdG9wIE1sbWUgc3RhdGUgbWFjaGluZQorCU1sbWVIYWx0KHBBZCk7CisKKwkvLyBDbG9zZSBrZXJuZWwgdGhyZWFkcyBvciB0YXNrbGV0cworCWtpbGxfdGhyZWFkX3Rhc2socEFkKTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwl7CisJCU1hY1RhYmxlUmVzZXQocEFkKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCU1lYXN1cmVSZXFUYWJFeGl0KHBBZCk7CisJVHBjUmVxVGFiRXhpdChwQWQpOworCisKKworCisJLy8gRnJlZSBSaW5nIG9yIFVTQiBidWZmZXJzCisJUlRNUEZyZWVUeFJ4UmluZ01lbW9yeShwQWQpOworCisJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCS8vIEZyZWUgQkEgcmVvcmRlciByZXNvdXJjZQorCWJhX3Jlb3JkZXJpbmdfcmVzb3VyY2VfcmVsZWFzZShwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjaWZkZWYgUlQyODcwCisjaWZkZWYgSU5GX0FNQVpPTl9TRQorCWlmIChwQWQtPlVzYlZlbmRvclJlcUJ1ZikKKwkJb3NfZnJlZV9tZW0ocEFkLCBwQWQtPlVzYlZlbmRvclJlcUJ1Zik7CisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9TVEFSVF9VUCk7CisKKwlyZXR1cm4gMDsgLy8gY2xvc2Ugb2sKK30gLyogRW5kIG9mIHJ0Mjh4eF9jbG9zZSAqLworCitzdGF0aWMgaW50IHJ0Mjh4eF9pbml0KElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworCVBSVE1QX0FEQVBURVIgCQkJcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKwlVSU5UCQkJCQlpbmRleDsKKwlVQ0hBUgkJCQkJVG1wUGh5OworLy8JVUxPTkcJCQkJCVZhbHVlPTA7CisJTkRJU19TVEFUVVMJCQkJU3RhdHVzOworLy8gICAgT0lEX1NFVF9IVF9QSFlNT0RFCQlTZXRIVDsKKy8vCVdQRE1BX0dMT19DRkdfU1RSVUMgICAgIEdsb0NmZzsKKwlVSU5UMzIgCQlNYWNDc3IwID0gMDsKKwlVSU5UMzIJCU1hY1ZhbHVlID0gMDsKKworI2lmZGVmIFJUMjg3MAorI2lmZGVmIElORl9BTUFaT05fU0UKKwlpbml0X01VVEVYKCYocEFkLT5Vc2JWZW5kb3JSZXFfc2VtYXBob3JlKSk7CisJb3NfYWxsb2NfbWVtKHBBZCwgKFBVQ0hBUikmcEFkLT5Vc2JWZW5kb3JSZXFCdWYsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSAtIDEpOworCWlmIChwQWQtPlVzYlZlbmRvclJlcUJ1ZiA9PSBOVUxMKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiQWxsb2NhdGUgdmVuZG9yIHJlcXVlc3QgdGVtcCBidWZmZXIgZmFpbGVkIVxuIikpOworCQlnb3RvIGVycjA7CisJfQorI2VuZGlmIC8vIElORl9BTUFaT05fU0UgLy8KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCS8vIEFsbG9jYXRlIEJBIFJlb3JkZXJpbmcgbWVtb3J5CisJYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9pbml0KHBBZCwgTUFYX1JFT1JERVJJTkdfTVBEVV9OVU0pOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJLy8gTWFrZSBzdXJlIE1BQyBnZXRzIHJlYWR5LgorCWluZGV4ID0gMDsKKwlkbworCXsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBNQUNfQ1NSMCwgJk1hY0NzcjApOworCQlwQWQtPk1BQ1ZlcnNpb24gPSBNYWNDc3IwOworCisJCWlmICgocEFkLT5NQUNWZXJzaW9uICE9IDB4MDApICYmIChwQWQtPk1BQ1ZlcnNpb24gIT0gMHhGRkZGRkZGRikpCisJCQlicmVhazsKKworCQlSVE1QdXNlY0RlbGF5KDEwKTsKKwl9IHdoaWxlIChpbmRleCsrIDwgMTAwKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1BQ19DU1IwICBbIFZlcjpSZXY9MHglMDh4XVxuIiwgcEFkLT5NQUNWZXJzaW9uKSk7CisvKkl2ZXJzb24gcGF0Y2ggUENJRSBMMSBpc3N1ZSAqLworCisJLy8gRGlzYWJsZSBETUEKKwlSVDI4WFhETUFEaXNhYmxlKHBBZCk7CisKKworCS8vIExvYWQgODA1MSBmaXJtd2FyZQorCVN0YXR1cyA9IE5JQ0xvYWRGaXJtd2FyZShwQWQpOworCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UX0VSUigoIk5JQ0xvYWRGaXJtd2FyZSBmYWlsZWQsIFN0YXR1c1s9MHglMDh4XVxuIiwgU3RhdHVzKSk7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlOSUNMb2FkUmF0ZVN3aXRjaGluZ1BhcmFtcyhwQWQpOworCisJLy8gRGlzYWJsZSBpbnRlcnJ1cHRzIGhlcmUgd2hpY2ggaXMgYXMgc29vbiBhcyBwb3NzaWJsZQorCS8vIFRoaXMgc3RhdGVtZW50IHNob3VsZCBuZXZlciBiZSB0cnVlLiBXZSBtaWdodCBjb25zaWRlciB0byByZW1vdmUgaXQgbGF0ZXIKKworCVN0YXR1cyA9IFJUTVBBbGxvY1R4UnhSaW5nTWVtb3J5KHBBZCk7CisJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiUlRNUEFsbG9jRE1BTWVtb3J5IGZhaWxlZCwgU3RhdHVzWz0weCUwOHhdXG4iLCBTdGF0dXMpKTsKKwkJZ290byBlcnIxOworCX0KKworCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpOworCisJLy8gaW5pdGlhbGl6ZSBNTE1FCisJLy8KKworCVN0YXR1cyA9IE1sbWVJbml0KHBBZCk7CisJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlRfRVJSKCgiTWxtZUluaXQgZmFpbGVkLCBTdGF0dXNbPTB4JTA4eF1cbiIsIFN0YXR1cykpOworCQlnb3RvIGVycjI7CisJfQorCisJLy8gSW5pdGlhbGl6ZSBwQWQtPlN0YUNmZywgcEFkLT5BcENmZywgcEFkLT5Db21tb25DZmcgdG8gbWFudWZhY3R1cmUgZGVmYXVsdAorCS8vCisJVXNlckNmZ0luaXQocEFkKTsKKworI2lmZGVmIFJUMjg3MAorCS8vIFdlIG5lZWQgaW5pdCB0aW1lclEgcmVsYXRlZCBzdHJ1Y3R1cmUgYmVmb3JlIGNyZWF0ZSB0aGUgdGltZXIgdGhyZWFkLgorCVJUMjg3MF9UaW1lclFfSW5pdChwQWQpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJUlQyOFhYX1RBU0tfVEhSRUFEX0lOSVQocEFkLCBTdGF0dXMpOworCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJZ290byBlcnIxOworCisvLwlDT1BZX01BQ19BRERSKHBBZC0+QXBDZmcuTUJTU0lEW2FwaWR4XS5Cc3NpZCwgbmV0aWYtPmh3YWRkcik7CisvLwlwQWQtPmJGb3JjZVByaW50VFggPSBUUlVFOworCisJQ2ZnSW5pdEhvb2socEFkKTsKKworCisjaWZkZWYgQkxPQ0tfTkVUX0lGCisJaW5pdGJsb2NrUXVldWVUYWIocEFkKTsKKyNlbmRpZiAvLyBCTE9DS19ORVRfSUYgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCU5kaXNBbGxvY2F0ZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJTWVhc3VyZVJlcVRhYkluaXQocEFkKTsKKwlUcGNSZXFUYWJJbml0KHBBZCk7CisKKwkvLworCS8vIEluaXQgdGhlIGhhcmR3YXJlLCB3ZSBuZWVkIHRvIGluaXQgYXNpYyBiZWZvcmUgcmVhZCByZWdpc3RyeSwgb3RoZXJ3aXNlIG1hYyByZWdpc3RlciB3aWxsIGJlIHJlc2V0CisJLy8KKwlTdGF0dXMgPSBOSUNJbml0aWFsaXplQWRhcHRlcihwQWQsIFRSVUUpOworCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UX0VSUigoIk5JQ0luaXRpYWxpemVBZGFwdGVyIGZhaWxlZCwgU3RhdHVzWz0weCUwOHhdXG4iLCBTdGF0dXMpKTsKKwkJaWYgKFN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQlnb3RvIGVycjM7CisJfQorCisJLy8gUmVhZCBwYXJhbWV0ZXJzIGZyb20gQ29uZmlnIEZpbGUKKwlTdGF0dXMgPSBSVE1QUmVhZFBhcmFtZXRlcnNIb29rKHBBZCk7CisKKwlwcmludGsoIjEuIFBoeSBNb2RlID0gJWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUpOworCWlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCURCR1BSSU5UX0VSUigoIk5JQ1JlYWRSZWdQYXJhbWV0ZXJzIGZhaWxlZCwgU3RhdHVzWz0weCUwOHhdXG4iLFN0YXR1cykpOworCQlnb3RvIGVycjQ7CisJfQorCisjaWZkZWYgUlQyODcwCisJcEFkLT5Db21tb25DZmcuYk11bHRpcGxlSVJQID0gRkFMU0U7CisKKwlpZiAocEFkLT5Db21tb25DZmcuYk11bHRpcGxlSVJQKQorCQlwQWQtPkNvbW1vbkNmZy5OdW1PZkJ1bGtJbklSUCA9IFJYX1JJTkdfU0laRTsKKwllbHNlCisJCXBBZC0+Q29tbW9uQ2ZnLk51bU9mQnVsa0luSVJQID0gMTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisgICAJLy9Jbml0IEJhIENhcGFiaWxpdHkgcGFyYW1ldGVycy4KKy8vCVJUMjhYWF9CQV9JTklUKHBBZCk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1wZHVEZW5zaXR5ID0gKFVDSEFSKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NcGR1RGVuc2l0eTsKKwlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVFbmFibGUgPSAoVVNIT1JUKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZTsKKwlwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVTaXplID0gKFVTSE9SVClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVTaXplOworCXBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NaW1vUHMgPSAoVVNIT1JUKXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NTVBTbW9kZTsKKwkvLyBVUGRhdGEgdG8gSFQgSUUKKwlwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLk1pbW9QcyA9IChVU0hPUlQpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlOworCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQU1zZHVTaXplID0gKFVTSE9SVClwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQW1zZHVTaXplOworCXBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTXBkdURlbnNpdHkgPSAoVUNIQVIpcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5OworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJLy8gYWZ0ZXIgcmVhZGluZyBSZWdpc3RyeSwgd2Ugbm93IGtub3cgaWYgaW4gQVAgbW9kZSBvciBTVEEgbW9kZQorCisJLy8gTG9hZCA4MDUxIGZpcm13YXJlOyBjcmFzaCB3aGVuIEZXIGltYWdlIG5vdCBleGlzdGVudAorCS8vIFN0YXR1cyA9IE5JQ0xvYWRGaXJtd2FyZShwQWQpOworCS8vIGlmIChTdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkvLyAgICBicmVhazsKKworCXByaW50aygiMi4gUGh5IE1vZGUgPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuUGh5TW9kZSk7CisKKwkvLyBXZSBzaG91bGQgcmVhZCBFRVBST00gZm9yIGFsbCBjYXNlcy4gIHJ0Mjg2MGIKKwlOSUNSZWFkRUVQUk9NUGFyYW1ldGVycyhwQWQsIG1hYyk7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlwcmludGsoIjMuIFBoeSBNb2RlID0gJWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUpOworCisJTklDSW5pdEFzaWNGcm9tRUVQUk9NKHBBZCk7IC8vcnQyODYwYgorCisJLy8gU2V0IFBIWSB0byBhcHByb3ByaWF0ZSBtb2RlCisJVG1wUGh5ID0gcEFkLT5Db21tb25DZmcuUGh5TW9kZTsKKwlwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID0gMHhmZjsKKwlSVE1QU2V0UGh5TW9kZShwQWQsIFRtcFBoeSk7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJU2V0Q29tbW9uSFQocEFkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCS8vIE5vIHZhbGlkIGNoYW5uZWxzLgorCWlmIChwQWQtPkNoYW5uZWxMaXN0TnVtID09IDApCisJeworCQlwcmludGsoIldyb25nIGNvbmZpZ3VyYXRpb24uIE5vIHZhbGlkIGNoYW5uZWwgZm91bmQuIENoZWNrIFwiQ29udHJ5Q29kZVwiIGFuZCBcIkNoYW5uZWxHZW9ncmFwaHlcIiBzZXR0aW5nLlxuIik7CisJCWdvdG8gZXJyNDsKKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlwcmludGsoIk1DUyBTZXQgPSAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsIHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMF0sCisgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMV0sIHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbMl0sCisgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbM10sIHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5NQ1NTZXRbNF0pOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjaWZkZWYgUlQzMHh4CisgICAgLy9Jbml0IFJUMzB4eCBSRlJlZ2lzdGVycyBhZnRlciByZWFkIFJGSUMgdHlwZSBmcm9tIEVFUFJPTQorCU5JQ0luaXRSVDMweHhSRlJlZ2lzdGVycyhwQWQpOworI2VuZGlmIC8vIFJUMzB4eCAvLworCisvLwkJQVBJbml0aWFsaXplKHBBZCk7CisKKyNpZmRlZiBJS0FOT1NfVlhfMVgwCisJVlJfSUtBTk9TX0ZQX0luaXQocEFkLT5BcENmZy5Cc3NpZE51bSwgcEFkLT5QZXJtYW5lbnRBZGRyZXNzKTsKKyNlbmRpZiAvLyBJS0FOT1NfVlhfMVgwIC8vCisKKwkJLy8KKwkvLyBJbml0aWFsaXplIFJGIHJlZ2lzdGVyIHRvIGRlZmF1bHQgdmFsdWUKKwkvLworCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOworCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCisJaWYgKHBBZCAmJiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpKQorCXsKKwkJLy8KKwkJLy8gVW5kbyBldmVyeXRoaW5nIGlmIGl0IGZhaWxlZAorCQkvLworCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorCQl7CisvLwkJCU5kaXNNRGVyZWdpc3RlckludGVycnVwdCgmcEFkLT5JbnRlcnJ1cHQpOworCQkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKTsKKwkJfQorLy8JCVJUTVBGcmVlQWRhcHRlcihwQWQpOyAvLyB3ZSB3aWxsIGZyZWUgaXQgaW4gZGlzY29ubmVjdCgpCisJfQorCWVsc2UgaWYgKHBBZCkKKwl7CisJCS8vIE1pY3Jvc29mdCBIQ1QgcmVxdWlyZSBkcml2ZXIgc2VuZCBhIGRpc2Nvbm5lY3QgZXZlbnQgYWZ0ZXIgZHJpdmVyIGluaXRpYWxpemF0aW9uLgorCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworLy8JCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisJCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX01FRElBX1NUQVRFX0NIQU5HRSk7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVCBFdmVudCBCIVxuIikpOworCisKKyNpZmRlZiBSVDI4NzAKKwkJUlRNUF9DTEVBUl9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyk7CisJCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVNT1ZFX0lOX1BST0dSRVNTKTsKKworCQkvLworCQkvLyBTdXBwb3J0IG11bHRpcGxlIEJ1bGtJbiBJUlAsCisJCS8vIHRoZSB2YWx1ZSBvbiBwQWQtPkNvbW1vbkNmZy5OdW1PZkJ1bGtJbklSUCBtYXkgYmUgbGFyZ2UgdGhhbiAxLgorCQkvLworCQlmb3IoaW5kZXg9MDsgaW5kZXg8cEFkLT5Db21tb25DZmcuTnVtT2ZCdWxrSW5JUlA7IGluZGV4KyspCisJCXsKKwkJCVJUVVNCQnVsa1JlY2VpdmUocEFkKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUVVNCQnVsa1JlY2VpdmUhXG4iICkpOworCQl9CisjZW5kaWYgLy8gUlQyODcwIC8vCisJfS8vIGVuZCBvZiBlbHNlCisKKworCURCR1BSSU5UX1MoU3RhdHVzLCAoIjw9PT09IFJUTVBJbml0aWFsaXplLCBTdGF0dXM9JXhcbiIsIFN0YXR1cykpOworCisJcmV0dXJuIFRSVUU7CisKKworZXJyNDoKK2VycjM6CisJTWxtZUhhbHQocEFkKTsKK2VycjI6CisJUlRNUEZyZWVUeFJ4UmluZ01lbW9yeShwQWQpOworLy8JUlRNUEZyZWVBZGFwdGVyKHBBZCk7CitlcnIxOgorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJb3NfZnJlZV9tZW0ocEFkLCBwQWQtPm1wZHVfYmxrX3Bvb2wubWVtKTsgLy8gZnJlZSBCQSBwb29sCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJUlQyOFhYX0lSUV9SRUxFQVNFKG5ldF9kZXYpOworCisJLy8gc2hhbGwgbm90IHNldCBwcml2IHRvIE5VTEwgaGVyZSBiZWNhdXNlIHRoZSBwcml2IGRpZG4ndCBiZWVuIGZyZWUgeWV0LgorCS8vbmV0X2Rldi0+bWxfcHJpdiA9IDA7CisjaWZkZWYgSU5GX0FNQVpPTl9TRQorZXJyMDoKKyNlbmRpZiAvLyBJTkZfQU1BWk9OX1NFIC8vCisJcHJpbnRrKCIhISEgJXMgSW5pdGlhbGl6ZWQgZmFpbCAhISFcbiIsIFJUMjh4eF9DSElQX05BTUUpOworCXJldHVybiBGQUxTRTsKK30gLyogRW5kIG9mIHJ0Mjh4eF9pbml0ICovCisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBPcGVuIHJheHggaW50ZXJmYWNlLgorCitBcmd1bWVudHM6CisJKm5ldF9kZXYJCQl0aGUgcmF4eCBpbnRlcmZhY2UgcG9pbnRlcgorCitSZXR1cm4gVmFsdWU6CisgICAgMAkJCQkJT3BlbiBPSworCW90aGVyd2lzZQkJCU9wZW4gRmFpbAorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworaW50IHJ0Mjh4eF9vcGVuKElOIFBORVRfREVWIGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqIG5ldF9kZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXY7CisJUFJUTVBfQURBUFRFUiBwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCWludCByZXR2YWwgPSAwOworIAlQT1NfQ09PS0lFIHBPYmo7CisKKworCS8vIFNhbml0eSBjaGVjayBmb3IgcEFkCisJaWYgKHBBZCA9PSBOVUxMKQorCXsKKwkJLyogaWYgMXN0IG9wZW4gZmFpbCwgcEFkIHdpbGwgYmUgZnJlZTsKKwkJICAgU28gdGhlIG5ldF9kZXYtPm1sX3ByaXYgd2lsbCBiZSBOVUxMIGluIDJyZCBvcGVuICovCisJCXJldHVybiAtMTsKKwl9CisKKyNpZmRlZiBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVAorCWlmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfQVApCisJeworCQlDV19NQVhfSU5fQklUUyA9IDY7CisJfQorCWVsc2UgaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCisJeworCQlDV19NQVhfSU5fQklUUyA9IDEwOworCX0KKworI2lmIFdJUkVMRVNTX0VYVCA+PSAxMgorCWlmIChuZXRfZGV2LT5tbF9wcml2X2ZsYWdzID09IElOVF9NQUlOKQorCXsKKwkJaWYgKHBBZC0+T3BNb2RlID09IE9QTU9ERV9BUCkKKwkJCW5ldF9kZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSAmcnQyOHh4X2FwX2l3X2hhbmRsZXJfZGVmOworCQllbHNlIGlmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKQorCQkJbmV0X2Rldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopICZydDI4eHhfaXdfaGFuZGxlcl9kZWY7CisJfQorI2VuZGlmIC8vIFdJUkVMRVNTX0VYVCA+PSAxMiAvLworI2VuZGlmIC8vIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIEluaXQKKyAJcE9iaiA9IChQT1NfQ09PS0lFKXBBZC0+T1NfQ29va2llOworCisJLy8gcmVzZXQgQWRhcHRlciBmbGFncworCVJUTVBfQ0xFQVJfRkxBR1MocEFkKTsKKworCS8vIFJlcXVlc3QgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSBmb3IgUENJIGRldmljZQorCS8vIHJlZ2lzdGVyIHRoZSBpbnRlcnJ1cHQgcm91dGluZSB3aXRoIHRoZSBvcworCVJUMjhYWF9JUlFfUkVRVUVTVChuZXRfZGV2KTsKKworCisJLy8gSW5pdCBCc3NUYWIgJiBDaGFubmVsSW5mbyB0YWJibGVzIGZvciBhdXRvIGNoYW5uZWwgc2VsZWN0LgorCisKKwkvLyBDaGlwICYgb3RoZXIgaW5pdAorCWlmIChydDI4eHhfaW5pdChuZXRfZGV2KSA9PSBGQUxTRSkKKwkJZ290byBlcnI7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuZGV2X25hbWUsIDE2KTsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuZGV2X25hbWUsIG5ldF9kZXYtPm5hbWUsIHN0cmxlbihuZXRfZGV2LT5uYW1lKSk7CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gU2V0IHVwIHRoZSBNYWMgYWRkcmVzcworCU5kaXNNb3ZlTWVtb3J5KG5ldF9kZXYtPmRldl9hZGRyLCAodm9pZCAqKSBwQWQtPkN1cnJlbnRBZGRyZXNzLCA2KTsKKworCS8vIEluaXQgSVJRIHBhcmFtZXRlcnMKKwlSVDI4WFhfSVJRX0lOSVQocEFkKTsKKworCS8vIFZhcmlvdXMgQVAgZnVuY3Rpb24gaW5pdAorCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkJeworCQkJdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworCQkJLy8gc2VuZCB3aXJlbGVzcyBldmVudCB0byB3cGFfc3VwcGxpY2FudCBmb3IgaW5mcm9taW5nIGludGVyZmFjZSBkb3duLgorCQkJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworCQkJd3JxdS5kYXRhLmZsYWdzID0gUlRfSU5URVJGQUNFX1VQOworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKwkJfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gRW5hYmxlIEludGVycnVwdAorCVJUMjhYWF9JUlFfRU5BQkxFKHBBZCk7CisKKwkvLyBOb3cgRW5hYmxlIFJ4VHgKKwlSVE1QRW5hYmxlUnhUeChwQWQpOworCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1NUQVJUX1VQKTsKKworCXsKKwlVSU5UMzIgcmVnID0gMDsKKwlSVE1QX0lPX1JFQUQzMihwQWQsIDB4MTMwMCwgJnJlZyk7ICAvLyBjbGVhciBnYXJiYWdlIGludGVycnVwdHMKKwlwcmludGsoIjB4MTMwMCA9ICUwOHhcbiIsIHJlZyk7CisJfQorCisJeworLy8JdTMyIHJlZzsKKy8vCXU4ICBieXRlOworLy8JdTE2IHRtcDsKKworLy8JUlRNUF9JT19SRUFEMzIocEFkLCBYSUZTX1RJTUVfQ0ZHLCAmcmVnKTsKKworLy8JdG1wID0gMHgwODA1OworLy8JcmVnICA9IChyZWcgJiAweGZmZmYwMDAwKSB8IHRtcDsKKy8vCVJUTVBfSU9fV1JJVEUzMihwQWQsIFhJRlNfVElNRV9DRkcsIHJlZyk7CisKKwl9CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCXJldHVybiAocmV0dmFsKTsKKworZXJyOgorCXJldHVybiAoLTEpOworfSAvKiBFbmQgb2YgcnQyOHh4X29wZW4gKi8KKworCisvKiBNdXN0IG5vdCBiZSBjYWxsZWQgZm9yIG1kZXYgYW5kIGFwZGV2ICovCitzdGF0aWMgTkRJU19TVEFUVVMgcnRfaWVlZTgwMjExX2lmX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIFBSVE1QX0FEQVBURVIgcEFkKQoreworCU5ESVNfU1RBVFVTIFN0YXR1czsKKwlJTlQgICAgIGk9MDsKKwlDSEFSICAgIHNsb3RfbmFtZVtJRk5BTVNJWl07CisJc3RydWN0IG5ldF9kZXZpY2UgICAqZGV2aWNlOworCisKKwkvL2V0aGVyX3NldHVwKGRldik7CisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBydDI4eHhfc2VuZF9wYWNrZXRzOworCisjaWZkZWYgSUtBTk9TX1ZYXzFYMAorCWRldi0+aGFyZF9zdGFydF94bWl0ID0gSUtBTk9TX0RhdGFGcmFtZXNUeDsKKyNlbmRpZiAvLyBJS0FOT1NfVlhfMVgwIC8vCisKKy8vCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdDsKKy8vCWRldi0+Y2hhbmdlX210dSA9IGllZWU4MDIxMV9jaGFuZ2VfbXR1OworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2lmIFdJUkVMRVNTX0VYVCA+PSAxMgorCWlmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBKQorCXsKKwkJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZydDI4eHhfaXdfaGFuZGxlcl9kZWY7CisJfQorI2VuZGlmIC8vV0lSRUxFU1NfRVhUID49IDEyCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVAorI2lmIFdJUkVMRVNTX0VYVCA+PSAxMgorCWlmIChwQWQtPk9wTW9kZSA9PSBPUE1PREVfQVApCisJeworCQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnJ0Mjh4eF9hcF9pd19oYW5kbGVyX2RlZjsKKwl9CisjZW5kaWYgLy9XSVJFTEVTU19FWFQgPj0gMTIKKyNlbmRpZiAvLyBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVCAvLworCisjaWYgV0lSRUxFU1NfRVhUIDwgMjEKKwkJZGV2LT5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzOworI2VuZGlmCisJZGV2LT5nZXRfc3RhdHMgPSBSVDI4eHhfZ2V0X2V0aGVyX3N0YXRzOworCWRldi0+b3BlbiA9IE1haW5WaXJ0dWFsSUZfb3BlbjsgLy9ydDI4eHhfb3BlbjsKKwlkZXYtPnN0b3AgPSBNYWluVmlydHVhbElGX2Nsb3NlOyAvL3J0Mjh4eF9jbG9zZTsKKy8vCWRldi0+dW5pbml0ID0gaWVlZTgwMjExX2lmX3JlaW5pdDsKKy8vCWRldi0+ZGVzdHJ1Y3RvciA9IGllZWU4MDIxMV9pZl9mcmVlOworCWRldi0+cHJpdl9mbGFncyA9IElOVF9NQUlOOworCWRldi0+ZG9faW9jdGwgPSBydDI4eHhfaW9jdGw7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkKKyAgICBkZXYtPnZhbGlkYXRlX2FkZHIgPSBOVUxMOworI2VuZGlmCisJLy8gZmluZCBhdmFpbGFibGUgZGV2aWNlIG5hbWUKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCXsKKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKwkJaWYgKHBBZC0+TUNfUm93SUQgPj0gMCkKKwkJCXNwcmludGYoc2xvdF9uYW1lLCAicmElMDJkXyVkIiwgcEFkLT5NQ19Sb3dJRCwgaSk7CisJCWVsc2UKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKwkJc3ByaW50ZihzbG90X25hbWUsICJyYSVkIiwgaSk7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDI2KQorICAgICAgICBkZXZpY2UgPSBkZXZfZ2V0X2J5X25hbWUoZGV2X25ldChkZXYpLCBzbG90X25hbWUpOworI2Vsc2UKKyAgICAgICAgZGV2aWNlID0gZGV2X2dldF9ieV9uYW1lKGRldi0+bmRfbmV0LCBzbG90X25hbWUpOworI2VuZGlmCisjZWxzZQorCQlkZXZpY2UgPSBkZXZfZ2V0X2J5X25hbWUoc2xvdF9uYW1lKTsKKyNlbmRpZgorCQlpZiAoZGV2aWNlICE9IE5VTEwpIGRldl9wdXQoZGV2aWNlKTsKKyNlbHNlCisJCWZvciAoZGV2aWNlID0gZGV2X2Jhc2U7IGRldmljZSAhPSBOVUxMOyBkZXZpY2UgPSBkZXZpY2UtPm5leHQpCisJCXsKKwkJCWlmIChzdHJuY21wKGRldmljZS0+bmFtZSwgc2xvdF9uYW1lLCA0KSA9PSAwKQorCQkJCWJyZWFrOworCQl9CisjZW5kaWYKKwkJaWYoZGV2aWNlID09IE5VTEwpCisJCQlicmVhazsKKwl9CisKKwlpZihpID09IDgpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJObyBhdmFpbGFibGUgc2xvdCBuYW1lXG4iKSk7CisJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJfQorCWVsc2UKKwl7CisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisJCWlmIChwQWQtPk1DX1Jvd0lEID49IDApCisJICAgICAgICBzcHJpbnRmKGRldi0+bmFtZSwgInJhJTAyZF8lZCIsIHBBZC0+TUNfUm93SUQsIGkpOworCQllbHNlCisjZW5kaWYgLy8gTVVMVElQTEVfQ0FSRF9TVVBQT1JUIC8vCisJCXNwcmludGYoZGV2LT5uYW1lLCAicmElZCIsIGkpOworCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCX0KKworCXJldHVybiBTdGF0dXM7CisKK30KKworCisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIEdldCBjYXJkIHByb2ZpbGUgcGF0aC4KKworQXJndW1lbnRzOgorICAgIHBBZAorCitSZXR1cm4gVmFsdWU6CisgICAgVFJVRQkJLSBGaW5kIGEgY2FyZCBwcm9maWxlCisJRkFMU0UJCS0gdXNlIGRlZmF1bHQgcHJvZmlsZQorCitOb3RlOgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworZXh0ZXJuIElOVCBSVE1QR2V0S2V5UGFyYW1ldGVyKAorICAgIElOICBQQ0hBUiAgIGtleSwKKyAgICBPVVQgUENIQVIgICBkZXN0LAorICAgIElOICBJTlQgICAgIGRlc3RzaXplLAorICAgIElOICBQQ0hBUiAgIGJ1ZmZlcik7CisKK0JPT0xFQU4gUlRNUF9DYXJkSW5mb1JlYWQoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQpCit7CisjZGVmaW5lIE1DX1NFTEVDVF9DQVJESUQJCTAJLyogdXNlIENBUkQgSUQgKDAgfiAzMSkgdG8gaWRlbnRpZnkgZGlmZmVyZW50IGNhcmRzICovCisjZGVmaW5lIE1DX1NFTEVDVF9NQUMJCQkxCS8qIHVzZSBDQVJEIE1BQyB0byBpZGVudGlmeSBkaWZmZXJlbnQgY2FyZHMgKi8KKyNkZWZpbmUgTUNfU0VMRUNUX0NBUkRUWVBFCQkyCS8qIHVzZSBDQVJEIHR5cGUgKGFiZ24gb3IgYmduKSB0byBpZGVudGlmeSBkaWZmZXJlbnQgY2FyZHMgKi8KKworI2RlZmluZSBMRVRURVJfQ0FTRV9UUkFOU0xBVEUodHh0X3AsIGNhcmRfaWQpCQkJXAorCXsJVUlOVDMyIF9sZW47IGNoYXIgX2NoYXI7CQkJCQkJXAorCQlmb3IoX2xlbj0wOyBfbGVuPHN0cmxlbihjYXJkX2lkKTsgX2xlbisrKSB7CQlcCisJCQlfY2hhciA9ICoodHh0X3AgKyBfbGVuKTsJCQkJCVwKKwkJCWlmICgoJ0EnIDw9IF9jaGFyKSAmJiAoX2NoYXIgPD0gJ1onKSkJCVwKKwkJCQkqKHR4dF9wK19sZW4pID0gJ2EnKyhfY2hhci0nQScpOwkJXAorCQl9IH0KKworCXN0cnVjdCBmaWxlICpzcmNmOworCUlOVCByZXR2YWwsIG9yZ2ZzdWlkLCBvcmdmc2dpZDsKKyAgIAltbV9zZWdtZW50X3Qgb3JnZnM7CisJQ0hBUiAqYnVmZmVyLCAqdG1wYnVmLCBjYXJkX2lkX2J1ZlszMF0sIFJGSUNfd29yZFszMF07CisJQk9PTEVBTiBmbGdfbWF0Y2hfb2sgPSBGQUxTRTsKKwlJTlQzMiBjYXJkX3NlbGVjdF9tZXRob2Q7CisJSU5UMzIgY2FyZF9mcmVlX2lkLCBjYXJkX25vdXNlX2lkLCBjYXJkX3NhbWVfbWFjX2lkLCBjYXJkX21hdGNoX2lkOworCUVFUFJPTV9BTlRFTk5BX1NUUlVDIGFudGVubmE7CisJVVNIT1JUIGFkZHIwMSwgYWRkcjIzLCBhZGRyNDU7CisJVUlOVDggbWFjWzZdOworCVVJTlQzMiBkYXRhLCBjYXJkX2luZGV4OworCVVDSEFSICpzdGFydF9wdHI7CisKKworCS8vIGluaXQKKwlidWZmZXIgPSBrbWFsbG9jKE1BWF9JTklfQlVGRkVSX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworCXRtcGJ1ZiA9IGttYWxsb2MoTUFYX1BBUkFNX0JVRkZFUl9TSVpFLCBNRU1fQUxMT0NfRkxBRyk7CisJaWYodG1wYnVmID09IE5VTEwpCisJeworCQlrZnJlZShidWZmZXIpOworICAgICAgICByZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKwlvcmdmc3VpZCA9IGN1cnJlbnQtPmZzdWlkOworCW9yZ2ZzZ2lkID0gY3VycmVudC0+ZnNnaWQ7CisJY3VycmVudC0+ZnN1aWQgPSBjdXJyZW50LT5mc2dpZCA9IDA7CisgICAgb3JnZnMgPSBnZXRfZnMoKTsKKyAgICBzZXRfZnMoS0VSTkVMX0RTKTsKKworCS8vIGdldCBSRiBJQyB0eXBlCisJUlRNUF9JT19SRUFEMzIocEFkLCBFMlBST01fQ1NSLCAmZGF0YSk7CisKKwlpZiAoKGRhdGEgJiAweDMwKSA9PSAwKQorCQlwQWQtPkVFUFJPTUFkZHJlc3NOdW0gPSA2OwkvLyA5M0M0NgorCWVsc2UgaWYgKChkYXRhICYgMHgzMCkgPT0gMHgxMCkKKwkJcEFkLT5FRVBST01BZGRyZXNzTnVtID0gODsJLy8gOTNDNjYKKwllbHNlCisJCXBBZC0+RUVQUk9NQWRkcmVzc051bSA9IDg7CS8vIDkzQzg2CisKKwkvL2FudGVubmEud29yZCA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIEVFUFJPTV9OSUMxX09GRlNFVCk7CisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCBFRVBST01fTklDMV9PRkZTRVQsIGFudGVubmEud29yZCk7CisKKwlpZiAoKGFudGVubmEuZmllbGQuUmZJY1R5cGUgPT0gUkZJQ18yODUwKSB8fAorCQkoYW50ZW5uYS5maWVsZC5SZkljVHlwZSA9PSBSRklDXzI3NTApKQorCXsKKwkJLyogQUJHTiBjYXJkICovCisJCXN0cmNweShSRklDX3dvcmQsICJhYmduIik7CisJfQorCWVsc2UKKwl7CisJCS8qIEJHTiBjYXJkICovCisJCXN0cmNweShSRklDX3dvcmQsICJiZ24iKTsKKwl9CisKKwkvLyBnZXQgTUFDIGFkZHJlc3MKKwkvL2FkZHIwMSA9IFJUTVBfRUVQUk9NX1JFQUQxNihwQWQsIDB4MDQpOworCS8vYWRkcjIzID0gUlRNUF9FRVBST01fUkVBRDE2KHBBZCwgMHgwNik7CisJLy9hZGRyNDUgPSBSVE1QX0VFUFJPTV9SRUFEMTYocEFkLCAweDA4KTsKKwlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWQsIDB4MDQsIGFkZHIwMSk7CisJUlQyOHh4X0VFUFJPTV9SRUFEMTYocEFkLCAweDA2LCBhZGRyMjMpOworCVJUMjh4eF9FRVBST01fUkVBRDE2KHBBZCwgMHgwOCwgYWRkcjQ1KTsKKworCW1hY1swXSA9IChVQ0hBUikoYWRkcjAxICYgMHhmZik7CisJbWFjWzFdID0gKFVDSEFSKShhZGRyMDEgPj4gOCk7CisJbWFjWzJdID0gKFVDSEFSKShhZGRyMjMgJiAweGZmKTsKKwltYWNbM10gPSAoVUNIQVIpKGFkZHIyMyA+PiA4KTsKKwltYWNbNF0gPSAoVUNIQVIpKGFkZHI0NSAmIDB4ZmYpOworCW1hY1s1XSA9IChVQ0hBUikoYWRkcjQ1ID4+IDgpOworCisJLy8gb3BlbiBjYXJkIGluZm9ybWF0aW9uIGZpbGUKKwlzcmNmID0gZmlscF9vcGVuKENBUkRfSU5GT19QQVRILCBPX1JET05MWSwgMCk7CisJaWYgKElTX0VSUihzcmNmKSkKKwl7CisJCS8qIGNhcmQgaW5mb3JtYXRpb24gZmlsZSBkb2VzIG5vdCBleGlzdCAqLworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsCisJCQkJKCItLT4gRXJyb3IgJWxkIG9wZW5pbmcgJXNcbiIsIC1QVFJfRVJSKHNyY2YpLCBDQVJEX0lORk9fUEFUSCkpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKHNyY2YtPmZfb3AgJiYgc3JjZi0+Zl9vcC0+cmVhZCkKKwl7CisJCS8qIGNhcmQgaW5mb3JtYXRpb24gZmlsZSBleGlzdHMgc28gcmVhZGluZyB0aGUgY2FyZCBpbmZvcm1hdGlvbiAqLworCQltZW1zZXQoYnVmZmVyLCAweDAwLCBNQVhfSU5JX0JVRkZFUl9TSVpFKTsKKwkJcmV0dmFsID0gc3JjZi0+Zl9vcC0+cmVhZChzcmNmLCBidWZmZXIsIE1BWF9JTklfQlVGRkVSX1NJWkUsICZzcmNmLT5mX3Bvcyk7CisJCWlmIChyZXR2YWwgPCAwKQorCQl7CisJCQkvKiByZWFkIGZhaWwgKi8KKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKKwkJCQkJKCItLT4gUmVhZCAlcyBlcnJvciAlZFxuIiwgQ0FSRF9JTkZPX1BBVEgsIC1yZXR2YWwpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIGdldCBjYXJkIHNlbGVjdGlvbiBtZXRob2QgKi8KKwkJCW1lbXNldCh0bXBidWYsIDB4MDAsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSk7CisJCQljYXJkX3NlbGVjdF9tZXRob2QgPSBNQ19TRUxFQ1RfQ0FSRFRZUEU7IC8vIGRlZmF1bHQKKworCQkJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIlNFTEVDVCIsIHRtcGJ1ZiwgMjU2LCBidWZmZXIpKQorCQkJeworCQkJCWlmIChzdHJjbXAodG1wYnVmLCAiQ0FSRElEIikgPT0gMCkKKwkJCQkJY2FyZF9zZWxlY3RfbWV0aG9kID0gTUNfU0VMRUNUX0NBUkRJRDsKKwkJCQllbHNlIGlmIChzdHJjbXAodG1wYnVmLCAiTUFDIikgPT0gMCkKKwkJCQkJY2FyZF9zZWxlY3RfbWV0aG9kID0gTUNfU0VMRUNUX01BQzsKKwkJCQllbHNlIGlmIChzdHJjbXAodG1wYnVmLCAiQ0FSRFRZUEUiKSA9PSAwKQorCQkJCQljYXJkX3NlbGVjdF9tZXRob2QgPSBNQ19TRUxFQ1RfQ0FSRFRZUEU7CisJCQl9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLAorCQkJCQkoIk1DPiBDYXJkIFNlbGVjdGlvbiA9ICVkXG4iLCBjYXJkX3NlbGVjdF9tZXRob2QpKTsKKworCQkJLy8gaW5pdAorCQkJY2FyZF9mcmVlX2lkID0gLTE7CisJCQljYXJkX25vdXNlX2lkID0gLTE7CisJCQljYXJkX3NhbWVfbWFjX2lkID0gLTE7CisJCQljYXJkX21hdGNoX2lkID0gLTE7CisKKwkJCS8vIHNlYXJjaCBjdXJyZW50IGNhcmQgaW5mb3JtYXRpb24gcmVjb3JkcworCQkJZm9yKGNhcmRfaW5kZXg9MDsKKwkJCQljYXJkX2luZGV4PE1BWF9OVU1fT0ZfTVVMVElQTEVfQ0FSRDsKKwkJCQljYXJkX2luZGV4KyspCisJCQl7CisJCQkJaWYgKCgqKFVJTlQzMiAqKSZNQ19DYXJkTWFjW2NhcmRfaW5kZXhdWzBdID09IDApICYmCisJCQkJCSgqKFVJTlQxNiAqKSZNQ19DYXJkTWFjW2NhcmRfaW5kZXhdWzRdID09IDApKQorCQkJCXsKKwkJCQkJLy8gTUFDIGlzIGFsbC0wIHNvIHRoZSBlbnRyeSBpcyBhdmFpbGFibGUKKwkJCQkJTUNfQ2FyZFVzZWRbY2FyZF9pbmRleF0gPSAwOworCisJCQkJCWlmIChjYXJkX2ZyZWVfaWQgPCAwKQorCQkJCQkJY2FyZF9mcmVlX2lkID0gY2FyZF9pbmRleDsgLy8gMXN0IGZyZWUgZW50cnkKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKG1lbWNtcChNQ19DYXJkTWFjW2NhcmRfaW5kZXhdLCBtYWMsIDYpID09IDApCisJCQkJCXsKKwkJCQkJCS8vIHdlIGZpbmQgdGhlIGVudHJ5IHdpdGggc2FtZSBNQUMKKwkJCQkJCWlmIChjYXJkX3NhbWVfbWFjX2lkIDwgMCkKKwkJCQkJCQljYXJkX3NhbWVfbWFjX2lkID0gY2FyZF9pbmRleDsgLy8gMXN0IHNhbWUgZW50cnkKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCS8vIE1BQyBpcyBub3QgYWxsLTAgYnV0IHVzZWQgZmxhZyA9PSAwCisJCQkJCQlpZiAoKE1DX0NhcmRVc2VkW2NhcmRfaW5kZXhdID09IDApICYmCisJCQkJCQkJKGNhcmRfbm91c2VfaWQgPCAwKSkKKwkJCQkJCXsKKwkJCQkJCQljYXJkX25vdXNlX2lkID0gY2FyZF9pbmRleDsgLy8gMXN0IGF2YWlsYWJsZSBlbnRyeQorCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKKwkJCQkJKCJNQz4gRnJlZSA9ICVkLCBTYW1lID0gJWQsIE5PVVNFID0gJWRcbiIsCisJCQkJCWNhcmRfZnJlZV9pZCwgY2FyZF9zYW1lX21hY19pZCwgY2FyZF9ub3VzZV9pZCkpOworCisJCQlpZiAoKGNhcmRfc2FtZV9tYWNfaWQgPj0gMCkgJiYKKwkJCQkoKGNhcmRfc2VsZWN0X21ldGhvZCA9PSBNQ19TRUxFQ1RfQ0FSRElEKSB8fAorCQkJCShjYXJkX3NlbGVjdF9tZXRob2QgPT0gTUNfU0VMRUNUX0NBUkRUWVBFKSkpCisJCQl7CisJCQkJLy8gc2FtZSBNQUMgZW50cnkgaXMgZm91bmQKKwkJCQljYXJkX21hdGNoX2lkID0gY2FyZF9zYW1lX21hY19pZDsKKworCQkJCWlmIChjYXJkX3NlbGVjdF9tZXRob2QgPT0gTUNfU0VMRUNUX0NBUkRUWVBFKQorCQkJCXsKKwkJCQkJLy8gZm9yIENBUkRUWVBFCisJCQkJCXNwcmludGYoY2FyZF9pZF9idWYsICIlMDJkQ0FSRFRZUEUlcyIsCisJCQkJCQkJY2FyZF9tYXRjaF9pZCwgUkZJQ193b3JkKTsKKworCQkJCQlpZiAoKHN0YXJ0X3B0cj1ydHN0cnN0cnVuY2FzZWNtcChidWZmZXIsIGNhcmRfaWRfYnVmKSkgIT0gTlVMTCkKKwkJCQkJeworCQkJCQkJLy8gd2UgZm91bmQgdGhlIGNhcmQgSUQKKwkJCQkJCUxFVFRFUl9DQVNFX1RSQU5TTEFURShzdGFydF9wdHIsIGNhcmRfaWRfYnVmKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyB0aGUgY2FyZCBpcyAxc3QgcGx1Zy1pbiwgdHJ5IHRvIGZpbmQgdGhlIG1hdGNoIGNhcmQgcHJvZmlsZQorCQkJCXN3aXRjaChjYXJkX3NlbGVjdF9tZXRob2QpCisJCQkJeworCQkJCQljYXNlIE1DX1NFTEVDVF9DQVJESUQ6IC8vIENBUkRJRAorCQkJCQlkZWZhdWx0OgorCQkJCQkJaWYgKGNhcmRfZnJlZV9pZCA+PSAwKQorCQkJCQkJCWNhcmRfbWF0Y2hfaWQgPSBjYXJkX2ZyZWVfaWQ7CisJCQkJCQllbHNlCisJCQkJCQkJY2FyZF9tYXRjaF9pZCA9IGNhcmRfbm91c2VfaWQ7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIE1DX1NFTEVDVF9NQUM6IC8vIE1BQworCQkJCQkJc3ByaW50ZihjYXJkX2lkX2J1ZiwgIk1BQyUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKKwkJCQkJCQkJbWFjWzBdLCBtYWNbMV0sIG1hY1syXSwKKwkJCQkJCQkJbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSk7CisKKwkJCQkJCS8qIHRyeSB0byBmaW5kIHRoZSBrZXkgd29yZCBpbiB0aGUgY2FyZCBmaWxlICovCisJCQkJCQlpZiAoKHN0YXJ0X3B0cj1ydHN0cnN0cnVuY2FzZWNtcChidWZmZXIsIGNhcmRfaWRfYnVmKSkgIT0gTlVMTCkKKwkJCQkJCXsKKwkJCQkJCQlMRVRURVJfQ0FTRV9UUkFOU0xBVEUoc3RhcnRfcHRyLCBjYXJkX2lkX2J1Zik7CisKKwkJCQkJCQkvKiBnZXQgdGhlIHJvdyBJRCAoMiBBU0NJSSBjaGFyYWN0ZXJzKSAqLworCQkJCQkJCXN0YXJ0X3B0ciAtPSAyOworCQkJCQkJCWNhcmRfaWRfYnVmWzBdID0gKihzdGFydF9wdHIpOworCQkJCQkJCWNhcmRfaWRfYnVmWzFdID0gKihzdGFydF9wdHIrMSk7CisJCQkJCQkJY2FyZF9pZF9idWZbMl0gPSAweDAwOworCisJCQkJCQkJY2FyZF9tYXRjaF9pZCA9IHNpbXBsZV9zdHJ0b2woY2FyZF9pZF9idWYsIDAsIDEwKTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgTUNfU0VMRUNUX0NBUkRUWVBFOiAvLyBDQVJEVFlQRQorCQkJCQkJY2FyZF9ub3VzZV9pZCA9IC0xOworCisJCQkJCQlmb3IoY2FyZF9pbmRleD0wOworCQkJCQkJCWNhcmRfaW5kZXg8TUFYX05VTV9PRl9NVUxUSVBMRV9DQVJEOworCQkJCQkJCWNhcmRfaW5kZXgrKykKKwkJCQkJCXsKKwkJCQkJCQlzcHJpbnRmKGNhcmRfaWRfYnVmLCAiJTAyZENBUkRUWVBFJXMiLAorCQkJCQkJCQkJY2FyZF9pbmRleCwgUkZJQ193b3JkKTsKKworCQkJCQkJCWlmICgoc3RhcnRfcHRyPXJ0c3Ryc3RydW5jYXNlY21wKGJ1ZmZlciwKKwkJCQkJCQkJCQkJCQkJY2FyZF9pZF9idWYpKSAhPSBOVUxMKQorCQkJCQkJCXsKKwkJCQkJCQkJTEVUVEVSX0NBU0VfVFJBTlNMQVRFKHN0YXJ0X3B0ciwgY2FyZF9pZF9idWYpOworCisJCQkJCQkJCWlmIChNQ19DYXJkVXNlZFtjYXJkX2luZGV4XSA9PSAwKQorCQkJCQkJCQl7CisJCQkJCQkJCQkvKiBjdXJyZW50IHRoZSBjYXJkIHByb2ZpbGUgaXMgbm90IHVzZWQgKi8KKwkJCQkJCQkJCWlmICgoKihVSU5UMzIgKikmTUNfQ2FyZE1hY1tjYXJkX2luZGV4XVswXSA9PSAwKSAmJgorCQkJCQkJCQkJCSgqKFVJTlQxNiAqKSZNQ19DYXJkTWFjW2NhcmRfaW5kZXhdWzRdID09IDApKQorCQkJCQkJCQkJeworCQkJCQkJCQkJCS8vIGZpbmQgaXQgYW5kIG5vIHByZXZpb3VzIGNhcmQgdXNlIGl0CisJCQkJCQkJCQkJY2FyZF9tYXRjaF9pZCA9IGNhcmRfaW5kZXg7CisJCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCQl9CisJCQkJCQkJCQllbHNlCisJCQkJCQkJCQl7CisJCQkJCQkJCQkJLy8gZXZlciBhIGNhcmQgdXNlIGl0CisJCQkJCQkJCQkJaWYgKGNhcmRfbm91c2VfaWQgPCAwKQorCQkJCQkJCQkJCQljYXJkX25vdXNlX2lkID0gY2FyZF9pbmRleDsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQkJLy8gaWYgbm90IGZpbmQgYSBmcmVlIG9uZSwgdXNlIHRoZSBhdmFpbGFibGUgb25lCisJCQkJCQlpZiAoY2FyZF9tYXRjaF9pZCA8IDApCisJCQkJCQkJY2FyZF9tYXRjaF9pZCA9IGNhcmRfbm91c2VfaWQ7CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChjYXJkX21hdGNoX2lkID49IDApCisJCQl7CisJCQkJLy8gbWFrZSB1cCBzZWFyY2gga2V5d29yZAorCQkJCXN3aXRjaChjYXJkX3NlbGVjdF9tZXRob2QpCisJCQkJeworCQkJCQljYXNlIE1DX1NFTEVDVF9DQVJESUQ6IC8vIENBUkRJRAorCQkJCQkJc3ByaW50ZihjYXJkX2lkX2J1ZiwgIiUwMmRDQVJESUQiLCBjYXJkX21hdGNoX2lkKTsKKwkJCQkJCWJyZWFrOworCisJCQkJCWNhc2UgTUNfU0VMRUNUX01BQzogLy8gTUFDCisJCQkJCQlzcHJpbnRmKGNhcmRfaWRfYnVmLAorCQkJCQkJCQkiJTAyZG1hYyUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwKKwkJCQkJCQkJY2FyZF9tYXRjaF9pZCwKKwkJCQkJCQkJbWFjWzBdLCBtYWNbMV0sIG1hY1syXSwKKwkJCQkJCQkJbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSk7CisJCQkJCQlicmVhazsKKworCQkJCQljYXNlIE1DX1NFTEVDVF9DQVJEVFlQRTogLy8gQ0FSRFRZUEUKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXNwcmludGYoY2FyZF9pZF9idWYsICIlMDJkY2FyZHR5cGUlcyIsCisJCQkJCQkJCWNhcmRfbWF0Y2hfaWQsIFJGSUNfd29yZCk7CisJCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZWFyY2ggS2V5d29yZCA9ICVzXG4iLCBjYXJkX2lkX2J1ZikpOworCisJCQkJLy8gcmVhZCBjYXJkIGZpbGUgcGF0aAorCQkJCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKGNhcmRfaWRfYnVmLCB0bXBidWYsIDI1NiwgYnVmZmVyKSkKKwkJCQl7CisJCQkJCWlmIChzdHJsZW4odG1wYnVmKSA8IHNpemVvZihwQWQtPk1DX0ZpbGVOYW1lKSkKKwkJCQkJeworCQkJCQkJLy8gYmFja3VwIGNhcmQgaW5mb3JtYXRpb24KKwkJCQkJCXBBZC0+TUNfUm93SUQgPSBjYXJkX21hdGNoX2lkOyAvKiBiYXNlIDAgKi8KKwkJCQkJCU1DX0NhcmRVc2VkW2NhcmRfbWF0Y2hfaWRdID0gMTsKKwkJCQkJCW1lbWNweShNQ19DYXJkTWFjW2NhcmRfbWF0Y2hfaWRdLCBtYWMsIHNpemVvZihtYWMpKTsKKworCQkJCQkJLy8gYmFja3VwIGNhcmQgZmlsZSBwYXRoCisJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1DX0ZpbGVOYW1lLCB0bXBidWYgLCBzdHJsZW4odG1wYnVmKSk7CisJCQkJCQlwQWQtPk1DX0ZpbGVOYW1lW3N0cmxlbih0bXBidWYpXSA9ICdcMCc7CisJCQkJCQlmbGdfbWF0Y2hfb2sgPSBUUlVFOworCisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKKwkJCQkJCQkJKCJDYXJkIFByb2ZpbGUgTmFtZSA9ICVzXG4iLCBwQWQtPk1DX0ZpbGVOYW1lKSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKKwkJCQkJCQkJKCJDYXJkIFByb2ZpbGUgTmFtZSBsZW5ndGggdG9vIGxhcmdlIVxuIikpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLAorCQkJCQkJCSgiQ2FuIG5vdCBmaW5kIHNlYXJjaCBrZXkgd29yZCBpbiBjYXJkLmRhdCFcbiIpKTsKKwkJCQl9CisKKwkJCQlpZiAoKGZsZ19tYXRjaF9vayAhPSBUUlVFKSAmJgorCQkJCQkoY2FyZF9tYXRjaF9pZCA8IE1BWF9OVU1fT0ZfTVVMVElQTEVfQ0FSRCkpCisJCQkJeworCQkJCQlNQ19DYXJkVXNlZFtjYXJkX21hdGNoX2lkXSA9IDA7CisJCQkJCW1lbXNldChNQ19DYXJkTWFjW2NhcmRfbWF0Y2hfaWRdLCAwLCBzaXplb2YobWFjKSk7CisJCQkJfQorCQkJfSAvLyBpZiAoY2FyZF9tYXRjaF9pZCA+PSAwKQorCQl9CisJfQorCisJLy8gY2xvc2UgZmlsZQorCXJldHZhbCA9IGZpbHBfY2xvc2Uoc3JjZiwgTlVMTCk7CisJc2V0X2ZzKG9yZ2ZzKTsKKwljdXJyZW50LT5mc3VpZCA9IG9yZ2ZzdWlkOworCWN1cnJlbnQtPmZzZ2lkID0gb3JnZnNnaWQ7CisJa2ZyZWUoYnVmZmVyKTsKKwlrZnJlZSh0bXBidWYpOworCXJldHVybiBmbGdfbWF0Y2hfb2s7Cit9CisjZW5kaWYgLy8gTVVMVElQTEVfQ0FSRF9TVVBQT1JUIC8vCisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBQcm9iZSBSVDI4WFggY2hpcHNldC4KKworQXJndW1lbnRzOgorICAgIF9kZXZfcAkJCQlQb2ludCB0byB0aGUgUENJIG9yIFVTQiBkZXZpY2UKKwlfZGV2X2lkX3AJCQlQb2ludCB0byB0aGUgUENJIG9yIFVTQiBkZXZpY2UgSUQKKworUmV0dXJuIFZhbHVlOgorICAgIDAJCQkJCVByb2JlIE9LCisJLUVOT0RFVgkJCQlQcm9iZSBGYWlsCisKK05vdGU6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgX19kZXZpbml0ICAgcnQyOHh4X3Byb2JlKAorICAgIElOICB2b2lkICpfZGV2X3AsCisgICAgSU4gIHZvaWQgKl9kZXZfaWRfcCwKKwlJTiAgVUlOVCBhcmdjLAorCU9VVCBQUlRNUF9BREFQVEVSICpwcEFkKQoreworICAgIHN0cnVjdCAgbmV0X2RldmljZQkqbmV0X2RldjsKKyAgICBQUlRNUF9BREFQVEVSICAgICAgIHBBZCA9IChQUlRNUF9BREFQVEVSKSBOVUxMOworICAgIElOVCAgICAgICAgICAgICAgICAgc3RhdHVzOworCVBWT0lECQkJCWhhbmRsZTsKKyNpZmRlZiBSVDI4NzAKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLDUsMCkJLyoga2VybmVsIDIuNCBzZXJpZXMgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2X3AgPSAoc3RydWN0IHVzYl9kZXZpY2UgKilfZGV2X3A7CisjZWxzZQorCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gKHN0cnVjdCB1c2JfaW50ZXJmYWNlICopX2Rldl9wOworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXZfcCA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKKwlkZXZfcCA9IHVzYl9nZXRfZGV2KGRldl9wKTsKKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1RBIERyaXZlciB2ZXJzaW9uLSVzXG4iLCBTVEFfRFJJVkVSX1ZFUlNJT04pKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCS8vIENoZWNrIGNoaXBzZXQgdmVuZG9yL3Byb2R1Y3QgSUQKKy8vCWlmIChSVDI4WFhDaGlwc2V0Q2hlY2soX2Rldl9wKSA9PSBGQUxTRSkKKy8vCQlnb3RvIGVycl9vdXQ7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPD0gMHgyMDQwMiAgICAgICAvLyBSZWQgSGF0IDcuMQorICAgIG5ldF9kZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKFBSVE1QX0FEQVBURVIpLCAiZXRoJWQiLCBldGhlcl9zZXR1cCk7CisjZWxzZQorICAgIG5ldF9kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoUFJUTVBfQURBUFRFUikpOworI2VuZGlmCisgICAgaWYgKG5ldF9kZXYgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHByaW50aygiYWxsb2NfbmV0ZGV2IGZhaWxlZFxuIik7CisKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw2LDE1KQorCQltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKKyNlbmRpZiAvL0xJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwxNSkKKyNlbHNlCisJCU1PRF9ERUNfVVNFX0NPVU5UOworI2VuZGlmCisgICAgICAgIGdvdG8gZXJyX291dDsKKyAgICB9CisKKy8vIHNhbXBsZQorLy8JaWYgKHJ0X2llZWU4MDIxMV9pZl9zZXR1cChuZXRfZGV2KSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorLy8JCWdvdG8gZXJyX291dDsKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNiwyNCkKKyAgICBTRVRfTU9EVUxFX09XTkVSKG5ldF9kZXYpOworI2VuZGlmCisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldF9kZXYpOworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisvKiBmb3Igc3VwcG9ydGluZyBOZXR3b3JrIE1hbmFnZXIgKi8KKy8qIFNldCB0aGUgc3lzZnMgcGh5c2ljYWwgZGV2aWNlIHJlZmVyZW5jZSBmb3IgdGhlIG5ldHdvcmsgbG9naWNhbCBkZXZpY2UKKyAqIGlmIHNldCBwcmlvciB0byByZWdpc3RyYXRpb24gd2lsbCBjYXVzZSBhIHN5bWxpbmsgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMCkpCisgICAgU0VUX05FVERFVl9ERVYobmV0X2RldiwgJihkZXZfcC0+ZGV2KSk7CisjZW5kaWYKKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisJLy8gQWxsb2NhdGUgUlRNUF9BREFQVEVSIG1pbmlwb3J0IGFkYXB0ZXIgc3RydWN0dXJlCisJaGFuZGxlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9zX2Nvb2tpZSksIEdGUF9LRVJORUwpOworCVJUMjhYWF9IQU5ETEVfREVWX0FTU0lHTihoYW5kbGUsIGRldl9wKTsKKworCXN0YXR1cyA9IFJUTVBBbGxvY0FkYXB0ZXJCbG9jayhoYW5kbGUsICZwQWQpOworCWlmIChzdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OworCisJbmV0X2Rldi0+bWxfcHJpdiA9IChQVk9JRClwQWQ7CisgICAgcEFkLT5uZXRfZGV2ID0gbmV0X2RldjsgLy8gbXVzdCBiZSBiZWZvcmUgUlQyOFhYTmV0RGV2SW5pdCgpCisKKwlSVDI4WFhOZXREZXZJbml0KF9kZXZfcCwgbmV0X2RldiwgcEFkKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorICAgIHBBZC0+U3RhQ2ZnLk9yaURldlR5cGUgPSBuZXRfZGV2LT50eXBlOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJLy8gRmluZCBhbmQgYXNzaWduIGEgZnJlZSBpbnRlcmZhY2UgbmFtZSwgcmF4eAorLy8JUlQyOFhYQXZhaWxSQU5hbWVBc3NpZ24obmV0X2Rldi0+bmFtZSk7CisKKwkvLyBQb3N0IGNvbmZpZworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKQorCWlmIChSVDI4WFhQcm9iZVBvc3RDb25maWcoX2Rldl9wLCBwQWQsIGFyZ2MpID09IEZBTFNFKQorCQlnb3RvIGVycl9vdXRfdW5tYXA7CisjZWxzZQorCWlmIChSVDI4WFhQcm9iZVBvc3RDb25maWcoX2Rldl9wLCBwQWQsIDApID09IEZBTFNFKQorCQlnb3RvIGVycl9vdXRfdW5tYXA7CisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlwQWQtPk9wTW9kZSA9IE9QTU9ERV9TVEE7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworI2lmZGVmIE1VTFRJUExFX0NBUkRfU1VQUE9SVAorCS8vIGZpbmQgaXRzIHByb2ZpbGUgcGF0aAorCXBBZC0+TUNfUm93SUQgPSAtMTsgLy8gdXNlIGRlZmF1bHQgcHJvZmlsZSBwYXRoCisJUlRNUF9DYXJkSW5mb1JlYWQocEFkKTsKKworCWlmIChwQWQtPk1DX1Jvd0lEID09IC0xKQorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlzdHJjcHkocEFkLT5NQ19GaWxlTmFtZSwgU1RBX1BST0ZJTEVfUEFUSCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwKKwkJCSgiTUM+IFJPVyA9ICVkLCBQQVRIID0gJXNcbiIsIHBBZC0+TUNfUm93SUQsIHBBZC0+TUNfRmlsZU5hbWUpKTsKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKworCS8vIHNhbXBsZSBtb3ZlCisJaWYgKHJ0X2llZWU4MDIxMV9pZl9zZXR1cChuZXRfZGV2LCBwQWQpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCWdvdG8gZXJyX291dF91bm1hcDsKKworICAgIC8vIFJlZ2lzdGVyIHRoaXMgZGV2aWNlCisgICAgc3RhdHVzID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldF9kZXYpOworICAgIGlmIChzdGF0dXMpCisgICAgICAgIGdvdG8gZXJyX291dF91bm1hcDsKKworICAgIC8vIFNldCBkcml2ZXIgZGF0YQorCVJUMjhYWF9EUlZEQVRBX1NFVChfZGV2X3ApOworCisKKworCSpwcEFkID0gcEFkOworICAgIHJldHVybiAwOyAvLyBwcm9iZSBvaworCisKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRVJST1IgSEFORExFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworZXJyX291dF91bm1hcDoKKwlSVE1QRnJlZUFkYXB0ZXIocEFkKTsKKwlSVDI4WFhfVU5NQVAoKTsKKworZXJyX291dF9mcmVlX25ldGRldjoKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw1LDApCisgICAgZnJlZV9uZXRkZXYobmV0X2Rldik7CisjZWxzZQorCWtmcmVlKG5ldF9kZXYpOworI2VuZGlmCisKK2Vycl9vdXQ6CisJUlQyOFhYX1BVVF9ERVZJQ0UoZGV2X3ApOworCisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiw1LDApCisJcmV0dXJuIChMT05HKU5VTEw7CisjZWxzZQorICAgIHJldHVybiAtRU5PREVWOyAvKiBwcm9iZSBmYWlsICovCisjZW5kaWYgLy8gTElOVVhfVkVSU0lPTl9DT0RFIC8vCit9IC8qIEVuZCBvZiBydDI4eHhfcHJvYmUgKi8KKworCisvKgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgIFRoZSBlbnRyeSBwb2ludCBmb3IgTGludXgga2VybmVsIHNlbnQgcGFja2V0IHRvIG91ciBkcml2ZXIuCisKK0FyZ3VtZW50czoKKyAgICBza19idWZmICpza2IJCXRoZSBwb2ludGVyIHJlZmVyIHRvIGEgc2tfYnVmZmVyLgorCitSZXR1cm4gVmFsdWU6CisgICAgMAorCitOb3RlOgorCVRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IG9mIFR4IFBhdGggZm9yIE9zIGRlbGl2ZXJ5IHBhY2tldCB0bworCW91ciBkcml2ZXIuIFlvdSBvbmx5IGNhbiBwdXQgT1MtZGVwZW5lZCAmIFNUQS9BUCBjb21tb24gaGFuZGxlIHByb2NlZHVyZXMKKwlpbiBoZXJlLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworaW50IHJ0Mjh4eF9wYWNrZXRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gc2tiLT5kZXY7CisJUFJUTVBfQURBUFRFUiBwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCWludCBzdGF0dXMgPSAwOworCVBORElTX1BBQ0tFVCBwUGFja2V0ID0gKFBORElTX1BBQ0tFVCkgc2tiOworCisJLyogUlQyODcwU1RBIGRvZXMgdGhpcyBpbiBSVE1QU2VuZFBhY2tldHMoKSAqLworI2lmZGVmIFJBTElOS19BVEUKKwlpZiAoQVRFX09OKHBBZCkpCisJeworCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfUkVTT1VSQ0VTKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJeworCQkvLyBEcm9wIHNlbmQgcmVxdWVzdCBzaW5jZSB3ZSBhcmUgaW4gbW9uaXRvciBtb2RlCisJCWlmIChNT05JVE9SX09OKHBBZCkpCisJCXsKKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworICAgICAgICAvLyBFYXBvbFN0YXJ0IHNpemUgaXMgMTgKKwlpZiAoc2tiLT5sZW4gPCAxNCkKKwl7CisJCS8vcHJpbnRrKCJiYWQgcGFja2V0IHNpemU6ICVkXG4iLCBwa3QtPmxlbik7CisJCWhleF9kdW1wKCJiYWQgcGFja2V0Iiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJZ290byBkb25lOworCX0KKworCVJUTVBfU0VUX1BBQ0tFVF81VlQocFBhY2tldCwgMCk7CisvLwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIHBrdC0+ZGF0YSwgcGt0LT5sZW4pOworI2lmZGVmIENPTkZJR181VlRfRU5IQU5DRQorICAgIGlmICgqKGludCopKHNrYi0+Y2IpID09IEJSSURHRV9UQUcpIHsKKwkJUlRNUF9TRVRfUEFDS0VUXzVWVChwUGFja2V0LCAxKTsKKyAgICB9CisjZW5kaWYKKworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKworCQlTVEFTZW5kUGFja2V0cygoTkRJU19IQU5ETEUpcEFkLCAoUFBORElTX1BBQ0tFVCkgJnBQYWNrZXQsIDEpOworCX0KKworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisJc3RhdHVzID0gMDsKK2RvbmU6CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JvdXRpbmUgRGVzY3JpcHRpb246CisgICAgU2VuZCBhIHBhY2tldCB0byBXTEFOLgorCitBcmd1bWVudHM6CisgICAgc2tiX3AgICAgICAgICAgIHBvaW50cyB0byBvdXIgYWRhcHRlcgorICAgIGRldl9wICAgICAgICAgICB3aGljaCBXTEFOIG5ldHdvcmsgaW50ZXJmYWNlCisKK1JldHVybiBWYWx1ZToKKyAgICAwOiB0cmFuc21pdCBzdWNjZXNzZnVsbHkKKyAgICBvdGhlcndpc2U6IHRyYW5zbWl0IGZhaWwKKworTm90ZToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBydDI4eHhfc2VuZF9wYWNrZXRzKAorCUlOIHN0cnVjdCBza19idWZmIAkJKnNrYl9wLAorCUlOIHN0cnVjdCBuZXRfZGV2aWNlIAkqbmV0X2RldikKK3sKKyAgICBSVE1QX0FEQVBURVIgKnBBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CisKKwlpZiAoIShuZXRfZGV2LT5mbGFncyAmIElGRl9VUCkpCisJeworCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgKFBORElTX1BBQ0tFVClza2JfcCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybiAwOworCX0KKworCU5kaXNaZXJvTWVtb3J5KChQVUNIQVIpJnNrYl9wLT5jYltDQl9PRkZdLCAxNSk7CisJUlRNUF9TRVRfUEFDS0VUX05FVF9ERVZJQ0VfTUJTU0lEKHNrYl9wLCBNQUlOX01CU1NJRCk7CisKKwlyZXR1cm4gcnQyOHh4X3BhY2tldF94bWl0KHNrYl9wKTsKK30gLyogRW5kIG9mIE1CU1NfVmlydHVhbElGX1BhY2tldFNlbmQgKi8KKworCisKKworI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8PSAweDIwNDAyCS8vIFJlZCBIYXQgNy4xCisvL3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbmV0ZGV2KGludCBzaXplb2ZfcHJpdiwgY29uc3QgY2hhciAqbWFzaywgdm9pZCAoKnNldHVwKShzdHJ1Y3QgbmV0X2RldmljZSAqKSkgLy9zYW1wbGUKK3N0cnVjdCBuZXRfZGV2aWNlICphbGxvY19uZXRkZXYoCisJaW50IHNpemVvZl9wcml2LAorCWNvbnN0IGNoYXIgKm1hc2ssCisJdm9pZCAoKnNldHVwKShzdHJ1Y3QgbmV0X2RldmljZSAqKSkKK3sKKyAgICBzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OworICAgIElOVAkJCQkJYWxsb2Nfc2l6ZTsKKworCisgICAgLyogZW5zdXJlIDMyLWJ5dGUgYWxpZ25tZW50IG9mIHRoZSBwcml2YXRlIGFyZWEgKi8KKyAgICBhbGxvY19zaXplID0gc2l6ZW9mICgqZGV2KSArIHNpemVvZl9wcml2ICsgMzE7CisKKyAgICBkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikga21hbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKKyAgICBpZiAoZGV2ID09IE5VTEwpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwKKwkJCQkoImFsbG9jX25ldGRldjogVW5hYmxlIHRvIGFsbG9jYXRlIGRldmljZSBtZW1vcnkuXG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG1lbXNldChkZXYsIDAsIGFsbG9jX3NpemUpOworCisgICAgaWYgKHNpemVvZl9wcml2KQorICAgICAgICBkZXYtPm1sX3ByaXYgPSAodm9pZCAqKSAoKChsb25nKShkZXYgKyAxKSArIDMxKSAmIH4zMSk7CisKKyAgICBzZXR1cChkZXYpOworICAgIHN0cmNweShkZXYtPm5hbWUsIG1hc2spOworCisgICAgcmV0dXJuIGRldjsKK30KKyNlbmRpZiAvLyBMSU5VWF9WRVJTSU9OX0NPREUgLy8KKworCit2b2lkIENmZ0luaXRIb29rKFBSVE1QX0FEQVBURVIgcEFkKQoreworCXBBZC0+YkJyb2FkQ29tSFQgPSBUUlVFOworfSAvKiBFbmQgb2YgQ2ZnSW5pdEhvb2sgKi8KKworCisjaWYgV0lSRUxFU1NfRVhUID49IDEyCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gcXVlcnkgL3Byb2MKK3N0cnVjdCBpd19zdGF0aXN0aWNzICpydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzKAorICAgIElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworCVBSVE1QX0FEQVBURVIgcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgicnQyOHh4X2dldF93aXJlbGVzc19zdGF0cyAtLS0+XG4iKSk7CisKKwlwQWQtPml3X3N0YXRzLnN0YXR1cyA9IDA7IC8vIFN0YXR1cyAtIGRldmljZSBkZXBlbmRlbnQgZm9yIG5vdworCisJLy8gbGluayBxdWFsaXR5CisJcEFkLT5pd19zdGF0cy5xdWFsLnF1YWwgPSAoKHBBZC0+TWxtZS5DaGFubmVsUXVhbGl0eSAqIDEyKS8xMCArIDEwKTsKKwlpZihwQWQtPml3X3N0YXRzLnF1YWwucXVhbCA+IDEwMCkKKwkJcEFkLT5pd19zdGF0cy5xdWFsLnF1YWwgPSAxMDA7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlpZiAocEFkLT5PcE1vZGUgPT0gT1BNT0RFX1NUQSkKKwkJcEFkLT5pd19zdGF0cy5xdWFsLmxldmVsID0gUlRNUE1heFJzc2kocEFkLCBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCwgcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEsIHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kyKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCXBBZC0+aXdfc3RhdHMucXVhbC5ub2lzZSA9IHBBZC0+QmJwV3JpdGVMYXRjaFs2Nl07IC8vIG5vaXNlIGxldmVsIChkQm0pCisKKwlwQWQtPml3X3N0YXRzLnF1YWwubm9pc2UgKz0gMjU2IC0gMTQzOworCXBBZC0+aXdfc3RhdHMucXVhbC51cGRhdGVkID0gMTsgICAgIC8vIEZsYWdzIHRvIGtub3cgaWYgdXBkYXRlZAorI2lmZGVmIElXX1FVQUxfREJNCisJcEFkLT5pd19zdGF0cy5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9EQk07CS8vIExldmVsICsgTm9pc2UgYXJlIGRCbQorI2VuZGlmIC8vIElXX1FVQUxfREJNIC8vCisKKwlwQWQtPml3X3N0YXRzLmRpc2NhcmQubndpZCA9IDA7ICAgICAvLyBSeCA6IFdyb25nIG53aWQvZXNzaWQKKwlwQWQtPml3X3N0YXRzLm1pc3MuYmVhY29uID0gMDsgICAgICAvLyBNaXNzZWQgYmVhY29ucy9zdXBlcmZyYW1lCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8LS0tIHJ0Mjh4eF9nZXRfd2lyZWxlc3Nfc3RhdHNcbiIpKTsKKwlyZXR1cm4gJnBBZC0+aXdfc3RhdHM7Cit9IC8qIEVuZCBvZiBydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzICovCisjZW5kaWYgLy8gV0lSRUxFU1NfRVhUIC8vCisKKworCit2b2lkIHRidHRfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisjZGVmaW5lIE1BWF9UWF9JTl9UQlRUCQkoMTYpCisKK30KKworSU5UIHJ0Mjh4eF9pb2N0bCgKKwlJTglzdHJ1Y3QgbmV0X2RldmljZQkqbmV0X2RldiwKKwlJTglPVVQJc3RydWN0IGlmcmVxCSpycSwKKwlJTglJTlQJCQkJCWNtZCkKK3sKKwlWSVJUVUFMX0FEQVBURVIJKnBWaXJ0dWFsQWQgPSBOVUxMOworCVJUTVBfQURBUFRFUgkqcEFkID0gTlVMTDsKKwlJTlQJCQkJcmV0ID0gMDsKKworCWlmIChuZXRfZGV2LT5wcml2X2ZsYWdzID09IElOVF9NQUlOKQorCXsKKwkJcEFkID0gbmV0X2Rldi0+bWxfcHJpdjsKKwl9CisJZWxzZQorCXsKKwkJcFZpcnR1YWxBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CisJCXBBZCA9IHBWaXJ0dWFsQWQtPlJ0bXBEZXYtPm1sX3ByaXY7CisJfQorCisJaWYgKHBBZCA9PSBOVUxMKQorCXsKKwkJLyogaWYgMXN0IG9wZW4gZmFpbCwgcEFkIHdpbGwgYmUgZnJlZTsKKwkJICAgU28gdGhlIG5ldF9kZXYtPm1sX3ByaXYgd2lsbCBiZSBOVUxMIGluIDJyZCBvcGVuICovCisJCXJldHVybiAtRU5FVERPV047CisJfQorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCXsKKwkJcmV0ID0gcnQyOHh4X3N0YV9pb2N0bChuZXRfZGV2LCBycSwgY21kKTsKKwl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgcmV0dXJuIGV0aGVybmV0IHN0YXRpc3RpY3MgY291bnRlcgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBuZXRfZGV2ICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBuZXRfZGV2aWNlCisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIG5ldF9kZXZpY2Vfc3RhdHMqCisKKyAgICBOb3RlOgorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKlJUMjh4eF9nZXRfZXRoZXJfc3RhdHMoCisgICAgSU4gIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQoreworICAgIFJUTVBfQURBUFRFUiAqcEFkID0gTlVMTDsKKworCWlmIChuZXRfZGV2KQorCQlwQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCisJaWYgKHBBZCkKKwl7CisKKwkJcEFkLT5zdGF0cy5yeF9wYWNrZXRzID0gcEFkLT5XbGFuQ291bnRlcnMuUmVjZWl2ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0OworCQlwQWQtPnN0YXRzLnR4X3BhY2tldHMgPSBwQWQtPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQ7CisKKwkJcEFkLT5zdGF0cy5yeF9ieXRlcyA9IHBBZC0+UmFsaW5rQ291bnRlcnMuUmVjZWl2ZWRCeXRlQ291bnQ7CisJCXBBZC0+c3RhdHMudHhfYnl0ZXMgPSBwQWQtPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQnl0ZUNvdW50OworCisJCXBBZC0+c3RhdHMucnhfZXJyb3JzID0gcEFkLT5Db3VudGVyczgwMjMuUnhFcnJvcnM7CisJCXBBZC0+c3RhdHMudHhfZXJyb3JzID0gcEFkLT5Db3VudGVyczgwMjMuVHhFcnJvcnM7CisKKwkJcEFkLT5zdGF0cy5yeF9kcm9wcGVkID0gMDsKKwkJcEFkLT5zdGF0cy50eF9kcm9wcGVkID0gMDsKKworCSAgICBwQWQtPnN0YXRzLm11bHRpY2FzdCA9IHBBZC0+V2xhbkNvdW50ZXJzLk11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudC5RdWFkUGFydDsgICAvLyBtdWx0aWNhc3QgcGFja2V0cyByZWNlaXZlZAorCSAgICBwQWQtPnN0YXRzLmNvbGxpc2lvbnMgPSBwQWQtPkNvdW50ZXJzODAyMy5PbmVDb2xsaXNpb24gKyBwQWQtPkNvdW50ZXJzODAyMy5Nb3JlQ29sbGlzaW9uczsgIC8vIENvbGxpc2lvbiBwYWNrZXRzCisKKwkgICAgcEFkLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0gMDsKKwkgICAgcEFkLT5zdGF0cy5yeF9vdmVyX2Vycm9ycyA9IHBBZC0+Q291bnRlcnM4MDIzLlJ4Tm9CdWZmZXI7ICAgICAgICAgICAgICAgICAgIC8vIHJlY2VpdmVyIHJpbmcgYnVmZiBvdmVyZmxvdworCSAgICBwQWQtPnN0YXRzLnJ4X2NyY19lcnJvcnMgPSAwOy8vcEFkLT5XbGFuQ291bnRlcnMuRkNTRXJyb3JDb3VudDsgICAgIC8vIHJlY3ZlZCBwa3Qgd2l0aCBjcmMgZXJyb3IKKwkgICAgcEFkLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSBwQWQtPkNvdW50ZXJzODAyMy5SY3ZBbGlnbm1lbnRFcnJvcnM7ICAgICAgICAgIC8vIHJlY3YnZCBmcmFtZSBhbGlnbm1lbnQgZXJyb3IKKwkgICAgcEFkLT5zdGF0cy5yeF9maWZvX2Vycm9ycyA9IHBBZC0+Q291bnRlcnM4MDIzLlJ4Tm9CdWZmZXI7ICAgICAgICAgICAgICAgICAgIC8vIHJlY3YnciBmaWZvIG92ZXJydW4KKwkgICAgcEFkLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlY2VpdmVyIG1pc3NlZCBwYWNrZXQKKworCSAgICAvLyBkZXRhaWxlZCB0eF9lcnJvcnMKKwkgICAgcEFkLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyA9IDA7CisJICAgIHBBZC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgPSAwOworCSAgICBwQWQtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzID0gMDsKKwkgICAgcEFkLT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzID0gMDsKKwkgICAgcEFkLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzID0gMDsKKworCSAgICAvLyBmb3IgY3NsaXAgZXRjCisJICAgIHBBZC0+c3RhdHMucnhfY29tcHJlc3NlZCA9IDA7CisJICAgIHBBZC0+c3RhdHMudHhfY29tcHJlc3NlZCA9IDA7CisKKwkJcmV0dXJuICZwQWQtPnN0YXRzOworCX0KKwllbHNlCisgICAgCXJldHVybiBOVUxMOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X3Byb2ZpbGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRfcHJvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZGEyN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0X3Byb2ZpbGUuYwpAQCAtMCwwICsxLDIwNDEgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpbmNsdWRlICJydF9jb25maWcuaCIKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorc3RhdGljIHZvaWQgSFRQYXJhbWV0ZXJzSG9vaygKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglDSEFSCQkgICpwVmFsdWVTdHIsCisJSU4JQ0hBUgkJICAqcElucHV0KTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworI2RlZmluZSBFVEhfTUFDX0FERFJfU1RSX0xFTiAxNyAgLy8gaW4gZm9ybWF0IG9mIHh4Onh4Onh4Onh4Onh4Onh4CisKKy8vIFdlIGFzc3VtZSB0aGUgczEgaXMgYSBzdGluZywgczIgaXMgYSBtZW1vcnkgc3BhY2Ugd2l0aCA2IGJ5dGVzLiBhbmQgY29udGVudCBvZiBzMSB3aWxsIGJlIGNoYW5nZWQuCitCT09MRUFOIHJ0c3RybWFjdG9oZXgoY2hhciAqczEsIGNoYXIgKnMyKQoreworCWludCBpID0gMDsKKwljaGFyICpwdG9rUyA9IHMxLCAqcHRva0UgPSBzMTsKKworCWlmIChzdHJsZW4oczEpICE9IEVUSF9NQUNfQUREUl9TVFJfTEVOKQorCQlyZXR1cm4gRkFMU0U7CisKKwl3aGlsZSgoKnB0b2tTKSAhPSAnXDAnKQorCXsKKwkJaWYoKHB0b2tFID0gc3RyY2hyKHB0b2tTLCAnOicpKSAhPSBOVUxMKQorCQkJKnB0b2tFKysgPSAnXDAnOworCQlpZiAoKHN0cmxlbihwdG9rUykgIT0gMikgfHwgKCFpc3hkaWdpdCgqcHRva1MpKSB8fCAoIWlzeGRpZ2l0KCoocHRva1MrMSkpKSkKKwkJCWJyZWFrOyAvLyBmYWlsCisJCUF0b0gocHRva1MsICZzMltpKytdLCAxKTsKKwkJcHRva1MgPSBwdG9rRTsKKwkJaWYgKGkgPT0gNikKKwkJCWJyZWFrOyAvLyBwYXJzaW5nIGZpbmlzaGVkCisJfQorCisJcmV0dXJuICggaSA9PSA2ID8gVFJVRSA6IEZBTFNFKTsKKworfQorCisKKy8vIHdlIGFzc3VtZSB0aGUgczEgYW5kIHMyIGJvdGggYXJlIHN0cmluZ3MuCitCT09MRUFOIHJ0c3RyY2FzZWNtcChjaGFyICpzMSwgY2hhciAqczIpCit7CisJY2hhciAqcDEgPSBzMSwgKnAyID0gczI7CisKKwlpZiAoc3RybGVuKHMxKSAhPSBzdHJsZW4oczIpKQorCQlyZXR1cm4gRkFMU0U7CisKKwl3aGlsZSgqcDEgIT0gJ1wwJykKKwl7CisJCWlmKCgqcDEgIT0gKnAyKSAmJiAoKCpwMSBeICpwMikgIT0gMHgyMCkpCisJCQlyZXR1cm4gRkFMU0U7CisJCXAxKys7CisJCXAyKys7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKy8vIHdlIGFzc3VtZSB0aGUgczEgKGJ1ZmZlcikgYW5kIHMyIChrZXkpIGJvdGggYXJlIHN0cmluZ3MuCitjaGFyICogcnRzdHJzdHJ1bmNhc2VjbXAoY2hhciAqIHMxLCBjaGFyICogczIpCit7CisJSU5UIGwxLCBsMiwgaTsKKwljaGFyIHRlbXAxLCB0ZW1wMjsKKworCWwyID0gc3RybGVuKHMyKTsKKwlpZiAoIWwyKQorCQlyZXR1cm4gKGNoYXIgKikgczE7CisKKwlsMSA9IHN0cmxlbihzMSk7CisKKwl3aGlsZSAobDEgPj0gbDIpCisJeworCQlsMS0tOworCisJCWZvcihpPTA7IGk8bDI7IGkrKykKKwkJeworCQkJdGVtcDEgPSAqKHMxK2kpOworCQkJdGVtcDIgPSAqKHMyK2kpOworCisJCQlpZiAoKCdhJyA8PSB0ZW1wMSkgJiYgKHRlbXAxIDw9ICd6JykpCisJCQkJdGVtcDEgPSAnQScrKHRlbXAxLSdhJyk7CisJCQlpZiAoKCdhJyA8PSB0ZW1wMikgJiYgKHRlbXAyIDw9ICd6JykpCisJCQkJdGVtcDIgPSAnQScrKHRlbXAyLSdhJyk7CisKKwkJCWlmICh0ZW1wMSAhPSB0ZW1wMikKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChpID09IGwyKQorCQkJcmV0dXJuIChjaGFyICopIHMxOworCisJCXMxKys7CisJfQorCisJcmV0dXJuIE5VTEw7IC8vIG5vdCBmb3VuZAorfQorCisvL2FkZCBieSBrYXRoeQorCisgLyoqCisgICogc3Ryc3RyIC0gRmluZCB0aGUgZmlyc3Qgc3Vic3RyaW5nIGluIGEgJU5VTCB0ZXJtaW5hdGVkIHN0cmluZworICAqIEBzMTogVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZAorICAqIEBzMjogVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yCisgICovCitjaGFyICogcnRzdHJzdHIoY29uc3QgY2hhciAqIHMxLGNvbnN0IGNoYXIgKiBzMikKK3sKKwlJTlQgbDEsIGwyOworCisJbDIgPSBzdHJsZW4oczIpOworCWlmICghbDIpCisJCXJldHVybiAoY2hhciAqKSBzMTsKKworCWwxID0gc3RybGVuKHMxKTsKKworCXdoaWxlIChsMSA+PSBsMikKKwl7CisJCWwxLS07CisJCWlmICghbWVtY21wKHMxLHMyLGwyKSkKKwkJCXJldHVybiAoY2hhciAqKSBzMTsKKwkJczErKzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiByc3RydG9rIC0gU3BsaXQgYSBzdHJpbmcgaW50byB0b2tlbnMKKyAqIEBzOiBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkCisgKiBAY3Q6IFRoZSBjaGFyYWN0ZXJzIHRvIHNlYXJjaCBmb3IKKyAqICogV0FSTklORzogc3RydG9rIGlzIGRlcHJlY2F0ZWQsIHVzZSBzdHJzZXAgaW5zdGVhZC4gSG93ZXZlciBzdHJzZXAgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBvbGQgYXJjaGl0ZWN0dXJlLgorICovCitjaGFyICogX19yc3RydG9rOworY2hhciAqIHJzdHJ0b2soY2hhciAqIHMsY29uc3QgY2hhciAqIGN0KQoreworCWNoYXIgKnNiZWdpbiwgKnNlbmQ7CisKKwlzYmVnaW4gID0gcyA/IHMgOiBfX3JzdHJ0b2s7CisJaWYgKCFzYmVnaW4pCisJeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzYmVnaW4gKz0gc3Ryc3BuKHNiZWdpbixjdCk7CisJaWYgKCpzYmVnaW4gPT0gJ1wwJykKKwl7CisJCV9fcnN0cnRvayA9IE5VTEw7CisJCXJldHVybiggTlVMTCApOworCX0KKworCXNlbmQgPSBzdHJwYnJrKCBzYmVnaW4sIGN0KTsKKwlpZiAoc2VuZCAmJiAqc2VuZCAhPSAnXDAnKQorCQkqc2VuZCsrID0gJ1wwJzsKKworCV9fcnN0cnRvayA9IHNlbmQ7CisKKwlyZXR1cm4gKHNiZWdpbik7Cit9CisKKy8qKgorICogZGVsaW1pdGNudCAtIHJldHVybiB0aGUgY291bnQgb2YgYSBnaXZlbiBkZWxpbWl0ZXIgaW4gYSBnaXZlbiBzdHJpbmcuCisgKiBAczogVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZC4KKyAqIEBjdDogVGhlIGRlbGltaXRlciB0byBzZWFyY2ggZm9yLgorICogTm90aWNlIDogV2Ugc3VwcG9zZSB0aGUgZGVsaW1pdGVyIGlzIGEgc2luZ2xlLWNoYXIgc3RyaW5nKGZvciBleGFtcGxlIDogIjsiKS4KKyAqLworSU5UIGRlbGltaXRjbnQoY2hhciAqIHMsY29uc3QgY2hhciAqIGN0KQoreworCUlOVCBjb3VudCA9IDA7CisJLyogcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZSAqLworCWNvbnN0IGNoYXIgKnRva2VuID0gczsKKworCWZvciAoIDs7ICkKKwl7CisJCXRva2VuID0gc3RycGJyayh0b2tlbiwgY3QpOyAvKiBzZWFyY2ggZm9yIGRlbGltaXRlcnMgKi8KKworICAgICAgICBpZiAoIHRva2VuID09IE5VTEwgKQorCQl7CisJCQkvKiBhZHZhbmNlZCB0byB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIgKi8KKwkJCWJyZWFrOworCQl9CisJCS8qIHNraXAgdGhlIGRlbGltaXRlciAqLworCSAgICArK3Rva2VuOworCisJCS8qCisJCSAqIFByaW50IHRoZSBmb3VuZCB0ZXh0OiB1c2UgbGVuIHdpdGggJS4qcyB0byBzcGVjaWZ5IGZpZWxkIHdpZHRoLgorCQkgKi8KKworCQkvKiBhY2N1bXVsYXRlIGRlbGltaXRlciBjb3VudCAqLworCSAgICArK2NvdW50OworCX0KKyAgICByZXR1cm4gY291bnQ7Cit9CisKKy8qCisgICogY29udmVydHMgdGhlIEludGVybmV0IGhvc3QgYWRkcmVzcyBmcm9tIHRoZSBzdGFuZGFyZCBudW1iZXJzLWFuZC1kb3RzIG5vdGF0aW9uCisgICogaW50byBiaW5hcnkgZGF0YS4KKyAgKiByZXR1cm5zIG5vbnplcm8gaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQsIHplcm8gaWYgbm90LgorICAqLworaW50IHJ0aW5ldF9hdG9uKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBpbnQgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IAl2YWw7CisJaW50ICAgICAgICAgCWJhc2UsIG47CisJY2hhciAgICAgICAgCWM7CisJdW5zaWduZWQgaW50ICAgIHBhcnRzWzRdOworCXVuc2lnbmVkIGludCAgICAqcHAgPSBwYXJ0czsKKworCWZvciAoOzspCisgICAgeworICAgICAgICAgLyoKKyAgICAgICAgICAqIENvbGxlY3QgbnVtYmVyIHVwIHRvIGBgLicnLgorICAgICAgICAgICogVmFsdWVzIGFyZSBzcGVjaWZpZWQgYXMgZm9yIEM6CisgICAgICAgICAgKgkweD1oZXgsIDA9b2N0YWwsIG90aGVyPWRlY2ltYWwuCisgICAgICAgICAgKi8KKyAgICAgICAgIHZhbCA9IDA7CisgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICBpZiAoKmNwID09ICcwJykKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBpZiAoKisrY3AgPT0gJ3gnIHx8ICpjcCA9PSAnWCcpCisgICAgICAgICAgICAgICAgIGJhc2UgPSAxNiwgY3ArKzsKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIGJhc2UgPSA4OworICAgICAgICAgfQorICAgICAgICAgd2hpbGUgKChjID0gKmNwKSAhPSAnXDAnKQorICAgICAgICAgeworICAgICAgICAgICAgIGlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSBjKSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHZhbCA9ICh2YWwgKiBiYXNlKSArIChjIC0gJzAnKTsKKyAgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGlmIChiYXNlID09IDE2ICYmIGlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSBjKSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIHZhbCA9ICh2YWwgPDwgNCkgKworICAgICAgICAgICAgICAgICAgICAgKGMgKyAxMCAtIChpc2xvd2VyKCh1bnNpZ25lZCBjaGFyKSBjKSA/ICdhJyA6ICdBJykpOworICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBpZiAoKmNwID09ICcuJykKKyAgICAgICAgIHsKKyAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAqIEludGVybmV0IGZvcm1hdDogYS5iLmMuZCBhLmIuYyAgICh3aXRoIGMgdHJlYXRlZCBhcyAxNi1iaXRzKQorICAgICAgICAgICAgICAqIGEuYiAgICAgKHdpdGggYiB0cmVhdGVkIGFzIDI0IGJpdHMpCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgaWYgKHBwID49IHBhcnRzICsgMyB8fCB2YWwgPiAweGZmKQorICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAqcHArKyA9IHZhbCwgY3ArKzsKKyAgICAgICAgIH0KKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgfQorCisgICAgIC8qCisgICAgICAqIENoZWNrIGZvciB0cmFpbGluZyBqdW5rLgorICAgICAgKi8KKyAgICAgd2hpbGUgKCpjcCkKKyAgICAgICAgIGlmICghaXNzcGFjZSgodW5zaWduZWQgY2hhcikgKmNwKyspKQorICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgIC8qCisgICAgICAqIENvbmNvY3QgdGhlIGFkZHJlc3MgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgcGFydHMgc3BlY2lmaWVkLgorICAgICAgKi8KKyAgICAgbiA9IHBwIC0gcGFydHMgKyAxOworICAgICBzd2l0Y2ggKG4pCisgICAgIHsKKworICAgICAgICAgY2FzZSAxOiAgICAgICAgIC8qIGEgLS0gMzIgYml0cyAqLworICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICBjYXNlIDI6ICAgICAgICAgLyogYS5iIC0tIDguMjQgYml0cyAqLworICAgICAgICAgICAgIGlmICh2YWwgPiAweGZmZmZmZikKKyAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgdmFsIHw9IHBhcnRzWzBdIDw8IDI0OworICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICBjYXNlIDM6ICAgICAgICAgLyogYS5iLmMgLS0gOC44LjE2IGJpdHMgKi8KKyAgICAgICAgICAgICBpZiAodmFsID4gMHhmZmZmKQorICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICB2YWwgfD0gKHBhcnRzWzBdIDw8IDI0KSB8IChwYXJ0c1sxXSA8PCAxNik7CisgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgIGNhc2UgNDogICAgICAgICAvKiBhLmIuYy5kIC0tIDguOC44LjggYml0cyAqLworICAgICAgICAgICAgIGlmICh2YWwgPiAweGZmKQorICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICB2YWwgfD0gKHBhcnRzWzBdIDw8IDI0KSB8IChwYXJ0c1sxXSA8PCAxNikgfCAocGFydHNbMl0gPDwgOCk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgIH0KKworICAgICAqYWRkciA9IGh0b25sKHZhbCk7CisgICAgIHJldHVybiAxOworCit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICBSb3V0aW5lIERlc2NyaXB0aW9uOgorICAgICAgICBGaW5kIGtleSBzZWN0aW9uIGZvciBHZXQga2V5IHBhcmFtZXRlci4KKworICAgIEFyZ3VtZW50czoKKyAgICAgICAgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBzdGFydCBmaW5kIHRoZSBrZXkgc2VjdGlvbgorICAgICAgICBzZWN0aW9uICAgICAgICAgICAgICAgICAgICAgdGhlIGtleSBvZiB0aGUgc2VjaW9uIHRvIGJlIGZpbmQKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgIEZhaWwKKyAgICAgICAgT3RoZXJzICAgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitQVUNIQVIgIFJUTVBGaW5kU2VjdGlvbigKKyAgICBJTiAgUENIQVIgICBidWZmZXIpCit7CisgICAgQ0hBUiB0ZW1wX2J1ZlszMl07CisgICAgUFVDSEFSICBwdHI7CisKKyAgICBzdHJjcHkodGVtcF9idWYsICJEZWZhdWx0Iik7CisKKyAgICBpZigocHRyID0gcnRzdHJzdHIoYnVmZmVyLCB0ZW1wX2J1ZikpICE9IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gKHB0citzdHJsZW4oIlxuIikpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgICAgIEdldCBrZXkgcGFyYW1ldGVyLgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBrZXkgc3RyaW5nCisgICAgICAgIGRlc3QgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGRlc3RpbmF0aW9uCisgICAgICAgIGRlc3RzaXplICAgICAgICAgICAgICAgICAgICBUaGUgZGF0YXNpemUgb2YgdGhlIGRlc3RpbmF0aW9uCisgICAgICAgIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gc3RhcnQgZmluZCB0aGUga2V5CisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIFRSVUUgICAgICAgICAgICAgICAgICAgICAgICBTdWNjZXNzCisgICAgICAgIEZBTFNFICAgICAgICAgICAgICAgICAgICAgICBGYWlsCisKKyAgICBOb3RlOgorICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBtYXRjaGVkIGtleSAoY2FzZSBjYXNlLXNlbnNpdGl2ZSkKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgUlRNUEdldEtleVBhcmFtZXRlcigKKyAgICBJTiAgUENIQVIgICBrZXksCisgICAgT1VUIFBDSEFSICAgZGVzdCwKKyAgICBJTiAgSU5UICAgICBkZXN0c2l6ZSwKKyAgICBJTiAgUENIQVIgICBidWZmZXIpCit7CisgICAgVUNIQVIgKnRlbXBfYnVmMSA9IE5VTEw7CisgICAgVUNIQVIgKnRlbXBfYnVmMiA9IE5VTEw7CisgICAgQ0hBUiAqc3RhcnRfcHRyOworICAgIENIQVIgKmVuZF9wdHI7CisgICAgQ0hBUiAqcHRyOworICAgIENIQVIgKm9mZnNldCA9IDA7CisgICAgSU5UICBsZW47CisKKwkvL3RlbXBfYnVmMSA9IGttYWxsb2MoTUFYX1BBUkFNX0JVRkZFUl9TSVpFLCBNRU1fQUxMT0NfRkxBRyk7CisJb3NfYWxsb2NfbWVtKE5VTEwsICZ0ZW1wX2J1ZjEsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSk7CisKKwlpZih0ZW1wX2J1ZjEgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisKKwkvL3RlbXBfYnVmMiA9IGttYWxsb2MoTUFYX1BBUkFNX0JVRkZFUl9TSVpFLCBNRU1fQUxMT0NfRkxBRyk7CisJb3NfYWxsb2NfbWVtKE5VTEwsICZ0ZW1wX2J1ZjIsIE1BWF9QQVJBTV9CVUZGRVJfU0laRSk7CisJaWYodGVtcF9idWYyID09IE5VTEwpCisJeworCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKwl9CisKKyAgICAvL2ZpbmQgc2VjdGlvbgorICAgIGlmKChvZmZzZXQgPSBSVE1QRmluZFNlY3Rpb24oYnVmZmVyKSkgPT0gTlVMTCkKKyAgICB7CisgICAgCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgIH0KKworICAgIHN0cmNweSh0ZW1wX2J1ZjEsICJcbiIpOworICAgIHN0cmNhdCh0ZW1wX2J1ZjEsIGtleSk7CisgICAgc3RyY2F0KHRlbXBfYnVmMSwgIj0iKTsKKworICAgIC8vc2VhcmNoIGtleQorICAgIGlmKChzdGFydF9wdHI9cnRzdHJzdHIob2Zmc2V0LCB0ZW1wX2J1ZjEpKT09TlVMTCkKKyAgICB7CisJCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgIH0KKworICAgIHN0YXJ0X3B0cis9c3RybGVuKCJcbiIpOworICAgIGlmKChlbmRfcHRyPXJ0c3Ryc3RyKHN0YXJ0X3B0ciwgIlxuIikpPT1OVUxMKQorICAgICAgIGVuZF9wdHI9c3RhcnRfcHRyK3N0cmxlbihzdGFydF9wdHIpOworCisgICAgaWYgKGVuZF9wdHI8c3RhcnRfcHRyKQorICAgIHsKKwkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgTmRpc01vdmVNZW1vcnkodGVtcF9idWYyLCBzdGFydF9wdHIsIGVuZF9wdHItc3RhcnRfcHRyKTsKKyAgICB0ZW1wX2J1ZjJbZW5kX3B0ci1zdGFydF9wdHJdPSdcMCc7CisgICAgbGVuID0gc3RybGVuKHRlbXBfYnVmMik7CisgICAgc3RyY3B5KHRlbXBfYnVmMSwgdGVtcF9idWYyKTsKKyAgICBpZigoc3RhcnRfcHRyPXJ0c3Ryc3RyKHRlbXBfYnVmMSwgIj0iKSkgPT0gTlVMTCkKKyAgICB7CisJCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgIH0KKworICAgIHN0cmNweSh0ZW1wX2J1ZjIsIHN0YXJ0X3B0cisxKTsKKyAgICBwdHIgPSB0ZW1wX2J1ZjI7CisgICAgLy90cmltIHNwYWNlIG9yIHRhYgorICAgIHdoaWxlKCpwdHIgIT0gMHgwMCkKKyAgICB7CisgICAgICAgIGlmKCAoKnB0ciA9PSAnICcpIHx8ICgqcHRyID09ICdcdCcpICkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBlbHNlCisgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGxlbiA9IHN0cmxlbihwdHIpOworICAgIG1lbXNldChkZXN0LCAweDAwLCBkZXN0c2l6ZSk7CisgICAgc3RybmNweShkZXN0LCBwdHIsIGxlbiA+PSBkZXN0c2l6ZSA/ICBkZXN0c2l6ZTogbGVuKTsKKworCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgICAgIEdldCBrZXkgcGFyYW1ldGVyLgorCisgICAgQXJndW1lbnRzOgorICAgICAgICBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRlciB0byBrZXkgc3RyaW5nCisgICAgICAgIGRlc3QgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGRlc3RpbmF0aW9uCisgICAgICAgIGRlc3RzaXplICAgICAgICAgICAgICAgICAgICBUaGUgZGF0YXNpemUgb2YgdGhlIGRlc3RpbmF0aW9uCisgICAgICAgIGJ1ZmZlciAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gc3RhcnQgZmluZCB0aGUga2V5CisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIFRSVUUgICAgICAgICAgICAgICAgICAgICAgICBTdWNjZXNzCisgICAgICAgIEZBTFNFICAgICAgICAgICAgICAgICAgICAgICBGYWlsCisKKyAgICBOb3RlOgorICAgICAgICBUaGlzIHJvdXRpbmUgZ2V0IHRoZSB2YWx1ZSB3aXRoIHRoZSBtYXRjaGVkIGtleSAoY2FzZSBjYXNlLXNlbnNpdGl2ZSkuCisgICAgICAgIEl0IGlzIGNhbGxlZCBmb3IgcGFyc2luZyBTU0lEIGFuZCBhbnkga2V5IHN0cmluZy4KKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgUlRNUEdldENyaXRpY2FsUGFyYW1ldGVyKAorICAgIElOICBQQ0hBUiAgIGtleSwKKyAgICBPVVQgUENIQVIgICBkZXN0LAorICAgIElOICBJTlQgICAgIGRlc3RzaXplLAorICAgIElOICBQQ0hBUiAgIGJ1ZmZlcikKK3sKKyAgICBVQ0hBUiAqdGVtcF9idWYxID0gTlVMTDsKKyAgICBVQ0hBUiAqdGVtcF9idWYyID0gTlVMTDsKKyAgICBDSEFSICpzdGFydF9wdHI7CisgICAgQ0hBUiAqZW5kX3B0cjsKKyAgICBDSEFSICpwdHI7CisgICAgQ0hBUiAqb2Zmc2V0ID0gMDsKKyAgICBJTlQgIGxlbjsKKworCS8vdGVtcF9idWYxID0ga21hbGxvYyhNQVhfUEFSQU1fQlVGRkVSX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKwlvc19hbGxvY19tZW0oTlVMTCwgJnRlbXBfYnVmMSwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFKTsKKworCWlmKHRlbXBfYnVmMSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gKEZBTFNFKTsKKworCS8vdGVtcF9idWYyID0ga21hbGxvYyhNQVhfUEFSQU1fQlVGRkVSX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKwlvc19hbGxvY19tZW0oTlVMTCwgJnRlbXBfYnVmMiwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFKTsKKwlpZih0ZW1wX2J1ZjIgPT0gTlVMTCkKKwl7CisJCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworCX0KKworICAgIC8vZmluZCBzZWN0aW9uCisgICAgaWYoKG9mZnNldCA9IFJUTVBGaW5kU2VjdGlvbihidWZmZXIpKSA9PSBOVUxMKQorICAgIHsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgc3RyY3B5KHRlbXBfYnVmMSwgIlxuIik7CisgICAgc3RyY2F0KHRlbXBfYnVmMSwga2V5KTsKKyAgICBzdHJjYXQodGVtcF9idWYxLCAiPSIpOworCisgICAgLy9zZWFyY2gga2V5CisgICAgaWYoKHN0YXJ0X3B0cj1ydHN0cnN0cihvZmZzZXQsIHRlbXBfYnVmMSkpPT1OVUxMKQorICAgIHsKKwkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgc3RhcnRfcHRyKz1zdHJsZW4oIlxuIik7CisgICAgaWYoKGVuZF9wdHI9cnRzdHJzdHIoc3RhcnRfcHRyLCAiXG4iKSk9PU5VTEwpCisgICAgICAgZW5kX3B0cj1zdGFydF9wdHIrc3RybGVuKHN0YXJ0X3B0cik7CisKKyAgICBpZiAoZW5kX3B0cjxzdGFydF9wdHIpCisgICAgeworCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBOZGlzTW92ZU1lbW9yeSh0ZW1wX2J1ZjIsIHN0YXJ0X3B0ciwgZW5kX3B0ci1zdGFydF9wdHIpOworICAgIHRlbXBfYnVmMltlbmRfcHRyLXN0YXJ0X3B0cl09J1wwJzsKKyAgICBsZW4gPSBzdHJsZW4odGVtcF9idWYyKTsKKyAgICBzdHJjcHkodGVtcF9idWYxLCB0ZW1wX2J1ZjIpOworICAgIGlmKChzdGFydF9wdHI9cnRzdHJzdHIodGVtcF9idWYxLCAiPSIpKSA9PSBOVUxMKQorICAgIHsKKwkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYyKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisgICAgfQorCisgICAgc3RyY3B5KHRlbXBfYnVmMiwgc3RhcnRfcHRyKzEpOworICAgIHB0ciA9IHRlbXBfYnVmMjsKKworICAgIC8vdHJpbSB0YWIKKyAgICAvKiBXZSBjYW5ub3QgdHJpbSBzcGFjZSgnICcpIGZvciBTU0lEIGFuZCBrZXkgc3RyaW5nLiAqLworICAgIHdoaWxlKCpwdHIgIT0gMHgwMCkKKyAgICB7CisgICAgICAgIC8vaWYoICgqcHRyID09ICcgJykgfHwgKCpwdHIgPT0gJ1x0JykgKQorICAgICAgICBpZiggKCpwdHIgPT0gJ1x0JykgKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbGVuID0gc3RybGVuKHB0cik7CisgICAgbWVtc2V0KGRlc3QsIDB4MDAsIGRlc3RzaXplKTsKKyAgICBzdHJuY3B5KGRlc3QsIHB0ciwgbGVuID49IGRlc3RzaXplID8gIGRlc3RzaXplOiBsZW4pOworCisJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICBvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICAgICAgR2V0IG11bHRpcGxlIGtleSBwYXJhbWV0ZXIuCisKKyAgICBBcmd1bWVudHM6CisgICAgICAgIGtleSAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIGtleSBzdHJpbmcKKyAgICAgICAgZGVzdCAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gZGVzdGluYXRpb24KKyAgICAgICAgZGVzdHNpemUgICAgICAgICAgICAgICAgICAgIFRoZSBkYXRhc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgYnVmZmVyICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBzdGFydCBmaW5kIHRoZSBrZXkKKworICAgIFJldHVybiBWYWx1ZToKKyAgICAgICAgVFJVRSAgICAgICAgICAgICAgICAgICAgICAgIFN1Y2Nlc3MKKyAgICAgICAgRkFMU0UgICAgICAgICAgICAgICAgICAgICAgIEZhaWwKKworICAgIE5vdGU6CisgICAgICAgIFRoaXMgcm91dGluZSBnZXQgdGhlIHZhbHVlIHdpdGggdGhlIG1hdGNoZWQga2V5IChjYXNlIGNhc2Utc2Vuc2l0aXZlKQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBSVE1QR2V0S2V5UGFyYW1ldGVyV2l0aE9mZnNldCgKKyAgICBJTiAgUENIQVIgICBrZXksCisgICAgT1VUIFBDSEFSICAgZGVzdCwKKyAgICBPVVQJVVNIT1JUCSplbmRfb2Zmc2V0LAorICAgIElOICBJTlQgICAgIGRlc3RzaXplLAorICAgIElOICBQQ0hBUiAgIGJ1ZmZlciwKKyAgICBJTglCT09MRUFOCWJUcmltU3BhY2UpCit7CisgICAgVUNIQVIgKnRlbXBfYnVmMSA9IE5VTEw7CisgICAgVUNIQVIgKnRlbXBfYnVmMiA9IE5VTEw7CisgICAgQ0hBUiAqc3RhcnRfcHRyOworICAgIENIQVIgKmVuZF9wdHI7CisgICAgQ0hBUiAqcHRyOworICAgIENIQVIgKm9mZnNldCA9IDA7CisgICAgSU5UICBsZW47CisKKwlpZiAoKmVuZF9vZmZzZXQgPj0gTUFYX0lOSV9CVUZGRVJfU0laRSkKKwkJcmV0dXJuIChGQUxTRSk7CisKKwlvc19hbGxvY19tZW0oTlVMTCwgJnRlbXBfYnVmMSwgTUFYX1BBUkFNX0JVRkZFUl9TSVpFKTsKKworCWlmKHRlbXBfYnVmMSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gKEZBTFNFKTsKKworCW9zX2FsbG9jX21lbShOVUxMLCAmdGVtcF9idWYyLCBNQVhfUEFSQU1fQlVGRkVSX1NJWkUpOworCWlmKHRlbXBfYnVmMiA9PSBOVUxMKQorCXsKKwkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKyAgICAgICAgcmV0dXJuIChGQUxTRSk7CisJfQorCisgICAgLy9maW5kIHNlY3Rpb24KKwlpZigqZW5kX29mZnNldCA9PSAwKQorICAgIHsKKwkJaWYgKChvZmZzZXQgPSBSVE1QRmluZFNlY3Rpb24oYnVmZmVyKSkgPT0gTlVMTCkKKwkJeworCQkJb3NfZnJlZV9tZW0oTlVMTCwgdGVtcF9idWYxKTsKKwkgICAgCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgCSAgICByZXR1cm4gKEZBTFNFKTsKKwkJfQorICAgIH0KKwllbHNlCisJCW9mZnNldCA9IGJ1ZmZlciArICgqZW5kX29mZnNldCk7CisKKyAgICBzdHJjcHkodGVtcF9idWYxLCAiXG4iKTsKKyAgICBzdHJjYXQodGVtcF9idWYxLCBrZXkpOworICAgIHN0cmNhdCh0ZW1wX2J1ZjEsICI9Iik7CisKKyAgICAvL3NlYXJjaCBrZXkKKyAgICBpZigoc3RhcnRfcHRyPXJ0c3Ryc3RyKG9mZnNldCwgdGVtcF9idWYxKSk9PU5VTEwpCisgICAgeworCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBzdGFydF9wdHIrPXN0cmxlbigiXG4iKTsKKyAgICBpZigoZW5kX3B0cj1ydHN0cnN0cihzdGFydF9wdHIsICJcbiIpKT09TlVMTCkKKyAgICAgICBlbmRfcHRyPXN0YXJ0X3B0citzdHJsZW4oc3RhcnRfcHRyKTsKKworICAgIGlmIChlbmRfcHRyPHN0YXJ0X3B0cikKKyAgICB7CisJCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMSk7CisgICAgCW9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgIH0KKworCSplbmRfb2Zmc2V0ID0gZW5kX3B0ciAtIGJ1ZmZlcjsKKworICAgIE5kaXNNb3ZlTWVtb3J5KHRlbXBfYnVmMiwgc3RhcnRfcHRyLCBlbmRfcHRyLXN0YXJ0X3B0cik7CisgICAgdGVtcF9idWYyW2VuZF9wdHItc3RhcnRfcHRyXT0nXDAnOworICAgIGxlbiA9IHN0cmxlbih0ZW1wX2J1ZjIpOworICAgIHN0cmNweSh0ZW1wX2J1ZjEsIHRlbXBfYnVmMik7CisgICAgaWYoKHN0YXJ0X3B0cj1ydHN0cnN0cih0ZW1wX2J1ZjEsICI9IikpID09IE5VTEwpCisgICAgeworCQlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIAlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjIpOworICAgICAgICByZXR1cm4gKEZBTFNFKTsKKyAgICB9CisKKyAgICBzdHJjcHkodGVtcF9idWYyLCBzdGFydF9wdHIrMSk7CisgICAgcHRyID0gdGVtcF9idWYyOworICAgIC8vdHJpbSBzcGFjZSBvciB0YWIKKyAgICB3aGlsZSgqcHRyICE9IDB4MDApCisgICAgeworICAgICAgICBpZigoYlRyaW1TcGFjZSAmJiAoKnB0ciA9PSAnICcpKSB8fCAoKnB0ciA9PSAnXHQnKSApCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBsZW4gPSBzdHJsZW4ocHRyKTsKKyAgICBtZW1zZXQoZGVzdCwgMHgwMCwgZGVzdHNpemUpOworICAgIHN0cm5jcHkoZGVzdCwgcHRyLCBsZW4gPj0gZGVzdHNpemUgPyAgZGVzdHNpemU6IGxlbik7CisKKwlvc19mcmVlX21lbShOVUxMLCB0ZW1wX2J1ZjEpOworICAgIG9zX2ZyZWVfbWVtKE5VTEwsIHRlbXBfYnVmMik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKworc3RhdGljIGludCBydG1wX3BhcnNlX2tleV9idWZmZXJfZnJvbV9maWxlKElOICBQUlRNUF9BREFQVEVSIHBBZCxJTiAgY2hhciAqYnVmZmVyLElOICBVTE9ORyBLZXlUeXBlLElOICBJTlQgQlNTSWR4LElOICBJTlQgS2V5SWR4KQoreworCVBVQ0hBUgkJa2V5YnVmZjsKKwlJTlQJCQlpID0gQlNTSWR4LCBpZHggPSBLZXlJZHg7CisJVUxPTkcJCUtleUxlbjsKKwlVQ0hBUgkJQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCisJa2V5YnVmZiA9IGJ1ZmZlcjsKKwlLZXlMZW4gPSBzdHJsZW4oa2V5YnVmZik7CisKKwlpZiAoS2V5VHlwZSA9PSAxKQorCXsvL0FzY2lpCisJCWlmKCAoS2V5TGVuID09IDUpIHx8IChLZXlMZW4gPT0gMTMpKQorCQl7CisJCQlwQWQtPlNoYXJlZEtleVtpXVtpZHhdLktleUxlbiA9IEtleUxlbjsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W2ldW2lkeF0uS2V5LCBrZXlidWZmLCBLZXlMZW4pOworCQkJaWYgKEtleUxlbiA9PSA1KQorCQkJCUNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwkJCWVsc2UKKwkJCQlDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworCQkJcEFkLT5TaGFyZWRLZXlbaV1baWR4XS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkkvRihyYSVkKSBLZXklZFN0cj0lcyBhbmQgdHlwZT0lc1xuIiwgaSwgaWR4KzEsIGtleWJ1ZmYsIChLZXlUeXBlID09IDApID8gIkhleCI6IkFzY2lpIikpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJZWxzZQorCQl7Ly9JbnZhbGlkIGtleSBsZW5ndGgKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIktleSVkU3RyIGlzIEludmFsaWQga2V5IGxlbmd0aCEgS2V5TGVuID0gJWxkIVxuIiwgaWR4KzEsIEtleUxlbikpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJZWxzZQorCXsvL0hleCB0eXBlCisJCWlmKCAoS2V5TGVuID09IDEwKSB8fCAoS2V5TGVuID09IDI2KSkKKwkJeworCQkJcEFkLT5TaGFyZWRLZXlbaV1baWR4XS5LZXlMZW4gPSBLZXlMZW4gLyAyOworCQkJQXRvSChrZXlidWZmLCBwQWQtPlNoYXJlZEtleVtpXVtpZHhdLktleSwgS2V5TGVuIC8gMik7CisJCQlpZiAoS2V5TGVuID09IDEwKQorCQkJCUNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwkJCWVsc2UKKwkJCQlDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworCQkJcEFkLT5TaGFyZWRLZXlbaV1baWR4XS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkkvRihyYSVkKSBLZXklZFN0cj0lcyBhbmQgdHlwZT0lc1xuIiwgaSwgaWR4KzEsIGtleWJ1ZmYsIChLZXlUeXBlID09IDApID8gIkhleCI6IkFzY2lpIikpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJZWxzZQorCQl7Ly9JbnZhbGlkIGtleSBsZW5ndGgKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkkvRihyYSVkKSBLZXklZFN0ciBpcyBJbnZhbGlkIGtleSBsZW5ndGghIEtleUxlbiA9ICVsZCFcbiIsIGksIGlkeCsxLCBLZXlMZW4pKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorfQorc3RhdGljIHZvaWQgcnRtcF9yZWFkX2tleV9wYXJtc19mcm9tX2ZpbGUoSU4gIFBSVE1QX0FEQVBURVIgcEFkLCBjaGFyICp0bXBidWYsIGNoYXIgKmJ1ZmZlcikKK3sKKwljaGFyCQl0b2tfc3RyWzE2XTsKKwlQVUNIQVIJCW1hY3B0cjsKKwlJTlQJCQlpID0gMCwgaWR4OworCVVMT05HCQlLZXlUeXBlW01BWF9NQlNTSURfTlVNXTsKKwlVTE9ORwkJS2V5SWR4OworCisJTmRpc1plcm9NZW1vcnkoS2V5VHlwZSwgTUFYX01CU1NJRF9OVU0pOworCisJLy9EZWZhdWx0S2V5SUQKKwlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJEZWZhdWx0S2V5SUQiLCB0bXBidWYsIDI1LCBidWZmZXIpKQorCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlLZXlJZHggPSBzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApOworCQkJaWYoKEtleUlkeCA+PSAxICkgJiYgKEtleUlkeCA8PSA0KSkKKwkJCQlwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSAoVUNIQVIpIChLZXlJZHggLSAxKTsKKwkJCWVsc2UKKwkJCQlwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSAwOworCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEZWZhdWx0S2V5SUQoMH4zKT0lZFxuIiwgcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkKSk7CisJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwl9CisKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgNDsgaWR4KyspCisJeworCQlzcHJpbnRmKHRva19zdHIsICJLZXklZFR5cGUiLCBpZHggKyAxKTsKKwkJLy9LZXkxVHlwZQorCQlpZiAoUlRNUEdldEtleVBhcmFtZXRlcih0b2tfc3RyLCB0bXBidWYsIDEyOCwgYnVmZmVyKSkKKwkJeworCQkgICAgZm9yIChpID0gMCwgbWFjcHRyID0gcnN0cnRvayh0bXBidWYsIjsiKTsgbWFjcHRyOyBtYWNwdHIgPSByc3RydG9rKE5VTEwsIjsiKSwgaSsrKQorCQkgICAgeworCQkJICAgIEtleVR5cGVbaV0gPSBzaW1wbGVfc3RydG9sKG1hY3B0ciwgMCwgMTApOworCQkgICAgfQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJeworCQkJCXNwcmludGYodG9rX3N0ciwgIktleSVkU3RyIiwgaWR4ICsgMSk7CisJCQkJaWYgKFJUTVBHZXRDcml0aWNhbFBhcmFtZXRlcih0b2tfc3RyLCB0bXBidWYsIDEyOCwgYnVmZmVyKSkKKwkJCQl7CisJCQkJCXJ0bXBfcGFyc2Vfa2V5X2J1ZmZlcl9mcm9tX2ZpbGUocEFkLCB0bXBidWYsIEtleVR5cGVbQlNTMF0sIEJTUzAsIGlkeCk7CisJCQkJfQorCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQl9CisJfQorfQorCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK3N0YXRpYyB2b2lkIHJ0bXBfcmVhZF9zdGFfd21tX3Bhcm1zX2Zyb21fZmlsZShJTiAgUFJUTVBfQURBUFRFUiBwQWQsIGNoYXIgKnRtcGJ1ZiwgY2hhciAqYnVmZmVyKQoreworCVBVQ0hBUgkJCQkJbWFjcHRyOworCUlOVAkJCQkJCWk9MDsKKwlCT09MRUFOCQkJCQliV21tRW5hYmxlID0gRkFMU0U7CisKKwkvL1dtbUNhcGFibGUKKwlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJXbW1DYXBhYmxlIiwgdG1wYnVmLCAzMiwgYnVmZmVyKSkKKwl7CisJCWlmKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkgIT0gMCkgLy9FbmFibGUKKwkJeworCQkJcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUgPSBUUlVFOworCQkJYldtbUVuYWJsZSA9IFRSVUU7CisJCX0KKwkJZWxzZSAvL0Rpc2FibGUKKwkJeworCQkJcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUgPSBGQUxTRTsKKwkJfQorCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldtbUNhcGFibGU9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlKSk7CisJfQorCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJLy9ETFNDYXBhYmxlCisJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiRExTQ2FwYWJsZSIsIHRtcGJ1ZiwgMzIsIGJ1ZmZlcikpCisJeworCQlpZihzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApICE9IDApICAvL0VuYWJsZQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSA9IFRSVUU7CisJCX0KKwkJZWxzZSAvL0Rpc2FibGUKKwkJeworCQkJcEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUgPSBGQUxTRTsKKwkJfQorCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImJETFNDYXBhYmxlPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkpOworCX0KKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCS8vQWNrUG9saWN5IGZvciBBQ19CSywgQUNfQkUsIEFDX1ZJLCBBQ19WTworCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkFja1BvbGljeSIsIHRtcGJ1ZiwgMzIsIGJ1ZmZlcikpCisJeworCQlmb3IgKGkgPSAwLCBtYWNwdHIgPSByc3RydG9rKHRtcGJ1ZiwiOyIpOyBtYWNwdHI7IG1hY3B0ciA9IHJzdHJ0b2soTlVMTCwiOyIpLCBpKyspCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkFja1BvbGljeVtpXSA9IChVQ0hBUilzaW1wbGVfc3RydG9sKG1hY3B0ciwgMCwgMTApOworCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBY2tQb2xpY3lbJWRdPSVkXG4iLCBpLCBwQWQtPkNvbW1vbkNmZy5BY2tQb2xpY3lbaV0pKTsKKwkJfQorCX0KKworCWlmIChiV21tRW5hYmxlKQorCXsKKwkJLy9BUFNEQ2FwYWJsZQorCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJBUFNEQ2FwYWJsZSIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCXsKKwkJCWlmKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkgIT0gMCkgIC8vRW5hYmxlCisJCQkJcEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlID0gVFJVRTsKKwkJCWVsc2UKKwkJCQlwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgPSBGQUxTRTsKKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVBTRENhcGFibGU9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSkpOworCQl9CisKKwkJLy9BUFNEQUMgZm9yIEFDX0JFLCBBQ19CSywgQUNfVkksIEFDX1ZPCisJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkFQU0RBQyIsIHRtcGJ1ZiwgMzIsIGJ1ZmZlcikpCisJCXsKKwkJCUJPT0xFQU4gYXBzZF9hY1s0XTsKKworCQkJZm9yIChpID0gMCwgbWFjcHRyID0gcnN0cnRvayh0bXBidWYsIjsiKTsgbWFjcHRyOyBtYWNwdHIgPSByc3RydG9rKE5VTEwsIjsiKSwgaSsrKQorCQkJeworCQkJCWFwc2RfYWNbaV0gPSAoQk9PTEVBTilzaW1wbGVfc3RydG9sKG1hY3B0ciwgMCwgMTApOworCisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVBTREFDJWQgICVkXG4iLCBpLCAgYXBzZF9hY1tpXSkpOworCQkJfQorCisJCQlwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JFID0gYXBzZF9hY1swXTsKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQksgPSBhcHNkX2FjWzFdOworCQkJcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WSSA9IGFwc2RfYWNbMl07CisJCQlwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZPID0gYXBzZF9hY1szXTsKKwkJfQorCX0KKworfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKK05ESVNfU1RBVFVTCVJUTVBSZWFkUGFyYW1ldGVyc0hvb2soCisJSU4JUFJUTVBfQURBUFRFUiBwQWQpCit7CisJUFVDSEFSCQkJCQlzcmMgPSBOVUxMOworCXN0cnVjdCBmaWxlCQkJCSpzcmNmOworCUlOVCAJCQkJCXJldHZhbCwgb3JnZnN1aWQsIG9yZ2ZzZ2lkOworICAgCW1tX3NlZ21lbnRfdAkJCW9yZ2ZzOworCUNIQVIJCQkJCSpidWZmZXI7CisJQ0hBUgkJCQkJKnRtcGJ1ZjsKKwlVTE9ORwkJCQkJUnRzVGhyZXNoOworCVVMT05HCQkJCQlGcmFnVGhyZXNoOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCVVDSEFSCSAgICAgICAgICAgICAgICBrZXlNYXRlcmlhbFs0MF07CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCVBVQ0hBUgkJCQkJbWFjcHRyOworCUlOVAkJCQkJCWkgPSAwOworCisJYnVmZmVyID0ga21hbGxvYyhNQVhfSU5JX0JVRkZFUl9TSVpFLCBNRU1fQUxMT0NfRkxBRyk7CisJaWYoYnVmZmVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCisJdG1wYnVmID0ga21hbGxvYyhNQVhfUEFSQU1fQlVGRkVSX1NJWkUsIE1FTV9BTExPQ19GTEFHKTsKKwlpZih0bXBidWYgPT0gTlVMTCkKKwl7CisJCWtmcmVlKGJ1ZmZlcik7CisgICAgICAgIHJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCXNyYyA9IFNUQV9QUk9GSUxFX1BBVEg7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisJc3JjID0gcEFkLT5NQ19GaWxlTmFtZTsKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKworCS8vIFNhdmUgdWlkIGFuZCBnaWQgdXNlZCBmb3IgZmlsZXN5c3RlbSBhY2Nlc3MuCisJLy8gU2V0IHVzZXIgYW5kIGdyb3VwIHRvIDAgKHJvb3QpCisjaWYgMAorCW9yZ2ZzdWlkID0gY3VycmVudC0+ZnN1aWQ7CisJb3JnZnNnaWQgPSBjdXJyZW50LT5mc2dpZDsKKwljdXJyZW50LT5mc3VpZD1jdXJyZW50LT5mc2dpZCA9IDA7CisjZW5kaWYKKyAgICBvcmdmcyA9IGdldF9mcygpOworICAgIHNldF9mcyhLRVJORUxfRFMpOworCisJaWYgKHNyYyAmJiAqc3JjKQorCXsKKwkJc3JjZiA9IGZpbHBfb3BlbihzcmMsIE9fUkRPTkxZLCAwKTsKKwkJaWYgKElTX0VSUihzcmNmKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiLS0+IEVycm9yICVsZCBvcGVuaW5nICVzXG4iLCAtUFRSX0VSUihzcmNmKSxzcmMpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIFRoZSBvYmplY3QgbXVzdCBoYXZlIGEgcmVhZCBtZXRob2QKKwkJCWlmIChzcmNmLT5mX29wICYmIHNyY2YtPmZfb3AtPnJlYWQpCisJCQl7CisJCQkJbWVtc2V0KGJ1ZmZlciwgMHgwMCwgTUFYX0lOSV9CVUZGRVJfU0laRSk7CisJCQkJcmV0dmFsPXNyY2YtPmZfb3AtPnJlYWQoc3JjZiwgYnVmZmVyLCBNQVhfSU5JX0JVRkZFUl9TSVpFLCAmc3JjZi0+Zl9wb3MpOworCQkJCWlmIChyZXR2YWwgPCAwKQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IFJlYWQgJXMgZXJyb3IgJWRcbiIsIHNyYywgLXJldHZhbCkpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvLyBzZXQgZmlsZSBwYXJhbWV0ZXIgdG8gcG9ydGNmZworCQkJCQkvL0NvdW50cnlSZWdpb24KKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQ291bnRyeVJlZ2lvbiIsIHRtcGJ1ZiwgMjUsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24gPSAoVUNIQVIpIHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDb3VudHJ5UmVnaW9uPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uKSk7CisJCQkJCX0KKwkJCQkJLy9Db3VudHJ5UmVnaW9uQUJhbmQKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQ291bnRyeVJlZ2lvbkFCYW5kIiwgdG1wYnVmLCAyNSwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJcEFkLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kPSAoVUNIQVIpIHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDb3VudHJ5UmVnaW9uQUJhbmQ9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZCkpOworCQkJCQl9CisJCQkJCS8vQ291bnRyeUNvZGUKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiQ291bnRyeUNvZGUiLCB0bXBidWYsIDI1LCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPkNvbW1vbkNmZy5Db3VudHJ5Q29kZSwgdG1wYnVmICwgMik7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAorCQkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5TdGFPcmlDb3VudHJ5Q29kZSwgdG1wYnVmICwgMik7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCQkJCQkJaWYgKHN0cmxlbihwQWQtPkNvbW1vbkNmZy5Db3VudHJ5Q29kZSkgIT0gMCkKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iQ291bnRyeUZsYWcgPSBUUlVFOworCQkJCQkJfQorCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ291bnRyeUNvZGU9JXNcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlKSk7CisJCQkJCX0KKwkJCQkJLy9DaGFubmVsR2VvZ3JhcGh5CisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkNoYW5uZWxHZW9ncmFwaHkiLCB0bXBidWYsIDI1LCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlVQ0hBUiBHZW9ncmFwaHkgPSAoVUNIQVIpIHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQkJCQlpZiAoR2VvZ3JhcGh5IDw9IEJPVEgpCisJCQkJCQl7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5ID0gR2VvZ3JhcGh5OworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlWzJdID0KKwkJCQkJCQkJKHBBZC0+Q29tbW9uQ2ZnLkdlb2dyYXBoeSA9PSBCT1RIKSA/ICcgJyA6ICgocEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5ID09IElET1IpID8gJ0knIDogJ08nKTsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJCQkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCQkJCXBBZC0+U3RhQ2ZnLlN0YU9yaUdlb2dyYXBoeSA9IHBBZC0+Q29tbW9uQ2ZnLkdlb2dyYXBoeTsKKyNlbmRpZiAvLyBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2hhbm5lbEdlb2dyYXBoeT0lZFxuIiwgcEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5KSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkgPSBCT1RIOworCQkJCQkJcEFkLT5Db21tb25DZmcuQ291bnRyeUNvZGVbMl0gPSAnICc7CisJCQkJCX0KKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCXsKKwkJCQkJCS8vU1NJRAorCQkJCQkJaWYgKFJUTVBHZXRDcml0aWNhbFBhcmFtZXRlcigiU1NJRCIsIHRtcGJ1ZiwgMjU2LCBidWZmZXIpKQorCQkJCQkJeworCQkJCQkJCWlmIChzdHJsZW4odG1wYnVmKSA8PSAzMikKKwkJCQkJCQl7CisJCQkgCQkJCQlwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuID0gKFVDSEFSKSBzdHJsZW4odG1wYnVmKTsKKwkJCQkJCQkJTmRpc1plcm9NZW1vcnkocEFkLT5Db21tb25DZmcuU3NpZCwgTkRJU184MDJfMTFfTEVOR1RIX1NTSUQpOworCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPkNvbW1vbkNmZy5Tc2lkLCB0bXBidWYsIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4pOworCQkJCQkJCQlwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4gPSBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuOworCQkJCQkJCQlOZGlzWmVyb01lbW9yeShwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIE5ESVNfODAyXzExX0xFTkdUSF9TU0lEKTsKKwkJCQkJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLCB0bXBidWYsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbik7CisJCQkJCQkJCXBBZC0+TWxtZUF1eC5Tc2lkTGVuID0gcEFkLT5Db21tb25DZmcuU3NpZExlbjsKKwkJCQkJCQkJTmRpc1plcm9NZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIE5ESVNfODAyXzExX0xFTkdUSF9TU0lEKTsKKwkJCQkJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIHRtcGJ1ZiwgcEFkLT5NbG1lQXV4LlNzaWRMZW4pOworCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6KFNTSUQ9JXMpXG4iLCBfX0ZVTkNUSU9OX18sIHRtcGJ1ZikpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCXsKKwkJCQkJCS8vTmV0d29ya1R5cGUKKwkJCQkJCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJOZXR3b3JrVHlwZSIsIHRtcGJ1ZiwgMjUsIGJ1ZmZlcikpCisJCQkJCQl7CisJCQkJCQkJcEFkLT5iQ29uZmlnQ2hhbmdlZCA9IFRSVUU7CisJCQkJCQkJaWYgKHN0cmNtcCh0bXBidWYsICJBZGhvYyIpID09IDApCisJCQkJCQkJCXBBZC0+U3RhQ2ZnLkJzc1R5cGUgPSBCU1NfQURIT0M7CisJCQkJCQkJZWxzZSAvL0RlZmF1bHQgSW5mcmFzdHJ1Y3R1cmUgbW9kZQorCQkJCQkJCQlwQWQtPlN0YUNmZy5Cc3NUeXBlID0gQlNTX0lORlJBOworCQkJCQkJCS8vIFJlc2V0IFJhbGluayBzdXBwbGljYW50IHRvIG5vdCB1c2UsIGl0IHdpbGwgYmUgc2V0IHRvIHN0YXJ0IHdoZW4gVUkgc2V0IFBNSyBrZXkKKwkJCQkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX05PVFVTRTsKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6KE5ldHdvcmtUeXBlPSVkKVxuIiwgX19GVU5DVElPTl9fLCBwQWQtPlN0YUNmZy5Cc3NUeXBlKSk7CisJCQkJCQl9CisJCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCQkJLy9DaGFubmVsCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkNoYW5uZWwiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlwQWQtPkNvbW1vbkNmZy5DaGFubmVsID0gKFVDSEFSKSBzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApOworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2hhbm5lbD0lZFxuIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQkJCQl9CisJCQkJCS8vV2lyZWxlc3NNb2RlCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIldpcmVsZXNzTW9kZSIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCWludCB2YWx1ZSAgPSAwLCBtYXhQaHlNb2RlID0gUEhZXzExRzsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCQkJbWF4UGh5TW9kZSA9IFBIWV8xMU5fNUc7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJCQkJCXZhbHVlID0gc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKworCQkJCQkJaWYgKHZhbHVlIDw9IG1heFBoeU1vZGUpCisJCQkJCQl7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUGh5TW9kZSA9IHZhbHVlOworCQkJCQkJfQorCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGh5TW9kZT0lZFxuIiwgcEFkLT5Db21tb25DZmcuUGh5TW9kZSkpOworCQkJCQl9CisgICAgICAgICAgICAgICAgICAgIC8vQmFzaWNSYXRlCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkJhc2ljUmF0ZSIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkJhc2ljUmF0ZUJpdG1hcCA9IChVTE9ORykgc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJhc2ljUmF0ZT0lbGRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkJhc2ljUmF0ZUJpdG1hcCkpOworCQkJCQl9CisJCQkJCS8vQmVhY29uUGVyaW9kCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkJlYWNvblBlcmlvZCIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA9IChVU0hPUlQpIHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCZWFjb25QZXJpb2Q9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCkpOworCQkJCQl9CisgICAgICAgICAgICAgICAgICAgIC8vVHhQb3dlcgorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJUeFBvd2VyIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UgPSAoVUxPTkcpIHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0ID0gcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2U7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUeFBvd2VyPSVsZFxuIiwgcEFkLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UpKTsKKwkJCQkJfQorCQkJCQkvL0JHUHJvdGVjdGlvbgorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJCR1Byb3RlY3Rpb24iLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkpCisJCQkJCQl7CisJCQkJCQkJY2FzZSAxOiAvL0Fsd2F5cyBPbgorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24gPSAxOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDI6IC8vQWx3YXlzIE9GRgorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24gPSAyOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDA6IC8vQVVUTworCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlVzZUJHUHJvdGVjdGlvbiA9IDA7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQkdQcm90ZWN0aW9uPSVsZFxuIiwgcEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uKSk7CisJCQkJCX0KKwkJCQkJLy9PTEJDRGV0ZWN0aW9uCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkRpc2FibGVPTEJDIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJc3dpdGNoIChzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApKQorCQkJCQkJeworCQkJCQkJCWNhc2UgMTogLy9kaXNhYmxlIE9MQkMgRGV0ZWN0aW9uCisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkRpc2FibGVPTEJDRGV0ZWN0ID0gMTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAwOiAvL2VuYWJsZSBPTEJDIERldGVjdGlvbgorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5EaXNhYmxlT0xCQ0RldGVjdCA9IDA7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkRpc2FibGVPTEJDRGV0ZWN0PSAwOworCQkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk9MQkNEZXRlY3Rpb249JWxkXG4iLCBwQWQtPkNvbW1vbkNmZy5EaXNhYmxlT0xCQ0RldGVjdCkpOworCQkJCQl9CisJCQkJCS8vVHhQcmVhbWJsZQorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJUeFByZWFtYmxlIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJc3dpdGNoIChzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApKQorCQkJCQkJeworCQkJCQkJCWNhc2UgUnQ4MDJfMTFQcmVhbWJsZVNob3J0OgorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlID0gUnQ4MDJfMTFQcmVhbWJsZVNob3J0OworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIFJ0ODAyXzExUHJlYW1ibGVMb25nOgorCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUgPSBSdDgwMl8xMVByZWFtYmxlTG9uZzsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUeFByZWFtYmxlPSVsZFxuIiwgcEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSkpOworCQkJCQl9CisJCQkJCS8vUlRTVGhyZXNob2xkCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIlJUU1RocmVzaG9sZCIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJCVJ0c1RocmVzaCA9IHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQkJCQlpZiggKFJ0c1RocmVzaCA+PSAxKSAmJiAoUnRzVGhyZXNoIDw9IE1BWF9SVFNfVEhSRVNIT0xEKSApCisJCQkJCQkJcEFkLT5Db21tb25DZmcuUnRzVGhyZXNob2xkICA9IChVU0hPUlQpUnRzVGhyZXNoOworCQkJCQkJZWxzZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCA9IE1BWF9SVFNfVEhSRVNIT0xEOworCisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSVFNUaHJlc2hvbGQ9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCkpOworCQkJCQl9CisJCQkJCS8vRnJhZ1RocmVzaG9sZAorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJGcmFnVGhyZXNob2xkIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJRnJhZ1RocmVzaCA9IHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQkJCQlwQWQtPkNvbW1vbkNmZy5iVXNlWmVyb1RvRGlzYWJsZUZyYWdtZW50ID0gRkFMU0U7CisKKwkJCQkJCWlmIChGcmFnVGhyZXNoID4gTUFYX0ZSQUdfVEhSRVNIT0xEIHx8IEZyYWdUaHJlc2ggPCBNSU5fRlJBR19USFJFU0hPTEQpCisJCQkJCQl7IC8vaWxsZWdhbCBGcmFnVGhyZXNoIHNvIHdlIHNldCBpdCB0byBkZWZhdWx0CisJCQkJCQkJcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQgPSBNQVhfRlJBR19USFJFU0hPTEQ7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuYlVzZVplcm9Ub0Rpc2FibGVGcmFnbWVudCA9IFRSVUU7CisJCQkJCQl9CisJCQkJCQllbHNlIGlmIChGcmFnVGhyZXNoICUgMiA9PSAxKQorCQkJCQkJeworCQkJCQkJCS8vIFRoZSBsZW5ndGggb2YgZWFjaCBmcmFnbWVudCBzaGFsbCBhbHdheXMgYmUgYW4gZXZlbiBudW1iZXIgb2Ygb2N0ZXRzLCBleGNlcHQgZm9yIHRoZSBsYXN0IGZyYWdtZW50CisJCQkJCQkJLy8gb2YgYW4gTVNEVSBvciBNTVBEVSwgd2hpY2ggbWF5IGJlIGVpdGhlciBhbiBldmVuIG9yIGFuIG9kZCBudW1iZXIgb2Ygb2N0ZXRzLgorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkID0gKFVTSE9SVCkoRnJhZ1RocmVzaCAtIDEpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkID0gKFVTSE9SVClGcmFnVGhyZXNoOworCQkJCQkJfQorCQkJCQkJLy9wQWQtPkNvbW1vbkNmZy5BbGxvd0ZyYWdTaXplID0gKHBBZC0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkKSAtIExFTkdUSF84MDJfMTEgLSBMRU5HVEhfQ1JDOworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRnJhZ1RocmVzaG9sZD0lZFxuIiwgcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQpKTsKKwkJCQkJfQorCQkJCQkvL1R4QnVyc3QKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiVHhCdXJzdCIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKy8vI2lmZGVmIFdJRklfVEVTVAorLy8JCQkJCQlwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCA9IEZBTFNFOworLy8jZWxzZQorCQkJCQkJaWYoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSAhPSAwKSAgLy9FbmFibGUKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCA9IFRSVUU7CisJCQkJCQllbHNlIC8vRGlzYWJsZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0ID0gRkFMU0U7CisvLyNlbmRpZgorCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVHhCdXJzdD0lZFxuIiwgcEFkLT5Db21tb25DZmcuYkVuYWJsZVR4QnVyc3QpKTsKKwkJCQkJfQorCisjaWZkZWYgQUdHUkVHQVRJT05fU1VQUE9SVAorCQkJCQkvL1BrdEFnZ3JlZ2F0ZQorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJQa3RBZ2dyZWdhdGUiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlpZihzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApICE9IDApICAvL0VuYWJsZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUgPSBUUlVFOworCQkJCQkJZWxzZSAvL0Rpc2FibGUKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlID0gRkFMU0U7CisjaWZkZWYgUElHR1lCQUNLX1NVUFBPUlQKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJQaWdneUJhY2tDYXBhYmxlID0gcEFkLT5Db21tb25DZmcuYkFnZ3JlZ2F0aW9uQ2FwYWJsZTsKKyNlbmRpZiAvLyBQSUdHWUJBQ0tfU1VQUE9SVCAvLworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGt0QWdncmVnYXRlPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlKSk7CisJCQkJCX0KKyNlbHNlCisJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUgPSBGQUxTRTsKKwkJCQkJcEFkLT5Db21tb25DZmcuYlBpZ2d5QmFja0NhcGFibGUgPSBGQUxTRTsKKyNlbmRpZiAvLyBBR0dSRUdBVElPTl9TVVBQT1JUIC8vCisKKwkJCQkJLy8gV21tQ2FwYWJsZQorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCQlydG1wX3JlYWRfc3RhX3dtbV9wYXJtc19mcm9tX2ZpbGUocEFkLCB0bXBidWYsIGJ1ZmZlcik7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwkJCQkJLy9TaG9ydFNsb3QKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiU2hvcnRTbG90IiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJaWYoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSAhPSAwKSAgLy9FbmFibGUKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iVXNlU2hvcnRTbG90VGltZSA9IFRSVUU7CisJCQkJCQllbHNlIC8vRGlzYWJsZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJVc2VTaG9ydFNsb3RUaW1lID0gRkFMU0U7CisKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNob3J0U2xvdD0lZFxuIiwgcEFkLT5Db21tb25DZmcuYlVzZVNob3J0U2xvdFRpbWUpKTsKKwkJCQkJfQorCQkJCQkvL0lFRUU4MDIxMUgKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiSUVFRTgwMjExSCIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJICAgIGZvciAoaSA9IDAsIG1hY3B0ciA9IHJzdHJ0b2sodG1wYnVmLCI7Iik7IG1hY3B0cjsgbWFjcHRyID0gcnN0cnRvayhOVUxMLCI7IiksIGkrKykKKwkJCQkJICAgIHsKKyAgICAJCQkJCQlpZihzaW1wbGVfc3RydG9sKG1hY3B0ciwgMCwgMTApICE9IDApICAvL0VuYWJsZQorICAgIAkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9IFRSVUU7CisgICAgCQkJCQkJZWxzZSAvL0Rpc2FibGUKKyAgICAJCQkJCQkJcEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPSBGQUxTRTsKKworICAgIAkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklFRUU4MDIxMUg9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJJRUVFODAyMTFIKSk7CisJCQkJCSAgICB9CisJCQkJCX0KKwkJCQkJLy9DU1BlcmlvZAorCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJDU1BlcmlvZCIsIHRtcGJ1ZiwgMTAsIGJ1ZmZlcikpCisJCQkJCXsKKwkJCQkJICAgIGlmKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkgIT0gMCkKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5DU1BlcmlvZCA9IHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCk7CisJCQkJCQllbHNlCisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuQ1NQZXJpb2QgPSAwOworCisgICAJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDU1BlcmlvZD0lZFxuIiwgcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuQ1NQZXJpb2QpKTsKKwkJCQkJfQorCisJCQkJCS8vUkRSZWdpb24KKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiUkRSZWdpb24iLCB0bXBidWYsIDEyOCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkJaWYgKChzdHJuY21wKHRtcGJ1ZiwgIkpBUF9XNTMiLCA3KSA9PSAwKSB8fCAoc3RybmNtcCh0bXBidWYsICJqYXBfdzUzIiwgNykgPT0gMCkpCisJCQkJCQl7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkREdXJSZWdpb24gPSBKQVBfVzUzOworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lID0gMTU7CisJCQkJCQl9CisJCQkJCQllbHNlIGlmICgoc3RybmNtcCh0bXBidWYsICJKQVBfVzU2IiwgNykgPT0gMCkgfHwgKHN0cm5jbXAodG1wYnVmLCAiamFwX3c1NiIsIDcpID09IDApKQorCQkJCQkJeworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uID0gSkFQX1c1NjsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5EZnNTZXNzaW9uVGltZSA9IDEzOworCQkJCQkJfQorCQkJCQkJZWxzZSBpZiAoKHN0cm5jbXAodG1wYnVmLCAiSkFQIiwgMykgPT0gMCkgfHwgKHN0cm5jbXAodG1wYnVmLCAiamFwIiwgMykgPT0gMCkpCisJCQkJCQl7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkREdXJSZWdpb24gPSBKQVA7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuRGZzU2Vzc2lvblRpbWUgPSA1OworCQkJCQkJfQorCQkJCQkJZWxzZSAgaWYgKChzdHJuY21wKHRtcGJ1ZiwgIkZDQyIsIDMpID09IDApIHx8IChzdHJuY21wKHRtcGJ1ZiwgImZjYyIsIDMpID09IDApKQorCQkJCQkJeworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uID0gRkNDOworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lID0gNTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UgaWYgKChzdHJuY21wKHRtcGJ1ZiwgIkNFIiwgMikgPT0gMCkgfHwgKHN0cm5jbXAodG1wYnVmLCAiY2UiLCAyKSA9PSAwKSkKKwkJCQkJCXsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRER1clJlZ2lvbiA9IENFOworCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LkRmc1Nlc3Npb25UaW1lID0gMTM7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkREdXJSZWdpb24gPSBDRTsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5EZnNTZXNzaW9uVGltZSA9IDEzOworCQkJCQkJfQorCisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSRFJlZ2lvbj0lZFxuIiwgcEFkLT5Db21tb25DZmcuUmFkYXJEZXRlY3QuUkREdXJSZWdpb24pKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJERHVyUmVnaW9uID0gQ0U7CisJCQkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5EZnNTZXNzaW9uVGltZSA9IDEzOworCQkJCQl9CisKKwkJCQkJLy9XaXJlbGVzc0V2ZW50CisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIldpcmVsZXNzRXZlbnQiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisjaWYgV0lSRUxFU1NfRVhUID49IDE1CisJCQkJCSAgICBpZihzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApICE9IDApCisJCQkJCQkJcEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQgPSBzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApOworCQkJCQkJZWxzZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50ID0gMDsJLy8gZGlzYWJsZQorI2Vsc2UKKwkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50ID0gMDsJLy8gZGlzYWJsZQorI2VuZGlmCisgICAJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXaXJlbGVzc0V2ZW50PSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkpOworCQkJCQl9CisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIldpRmlUZXN0IiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJeworCQkJCQkgICAgaWYoc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKSAhPSAwKQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJXaUZpVGVzdD0gc2ltcGxlX3N0cnRvbCh0bXBidWYsIDAsIDEwKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iV2lGaVRlc3QgPSAwOwkvLyBkaXNhYmxlCisKKyAgIAkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldpRmlUZXN0PSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5iV2lGaVRlc3QpKTsKKwkJCQkJfQorCQkJCQkvL0F1dGhNb2RlCisJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkF1dGhNb2RlIiwgdG1wYnVmLCAxMjgsIGJ1ZmZlcikpCisJCQkJCXsKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCQl7CisJCQkJCQkJaWYgKChzdHJjbXAodG1wYnVmLCAiV0VQQVVUTyIpID09IDApIHx8IChzdHJjbXAodG1wYnVmLCAid2VwYXV0byIpID09IDApKQorCQkJCQkJCSAgICBwQWQtPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2g7CisJCQkJCQkJZWxzZSBpZiAoKHN0cmNtcCh0bXBidWYsICJTSEFSRUQiKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgInNoYXJlZCIpID09IDApKQorCQkJCQkJCSAgICBwQWQtPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZDsKKwkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIldQQVBTSyIpID09IDApIHx8IChzdHJjbXAodG1wYnVmLCAid3BhcHNrIikgPT0gMCkpCisJCQkJCQkJICAgIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLOworCQkJCQkJCWVsc2UgaWYgKChzdHJjbXAodG1wYnVmLCAiV1BBTk9ORSIpID09IDApIHx8IChzdHJjbXAodG1wYnVmLCAid3Bhbm9uZSIpID09IDApKQorCQkJCQkJCSAgICBwQWQtPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmU7CisJCQkJCQkJZWxzZSBpZiAoKHN0cmNtcCh0bXBidWYsICJXUEEyUFNLIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJ3cGEycHNrIikgPT0gMCkpCisJCQkJCQkJICAgIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSzsKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJCQkJCQkJZWxzZSBpZiAoKHN0cmNtcCh0bXBidWYsICJXUEEiKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgIndwYSIpID09IDApKQorCQkJCQkJCSAgICBwQWQtPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTsKKwkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIldQQTIiKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgIndwYTIiKSA9PSAwKSkKKwkJCQkJCQkgICAgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKKworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEOworCisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiJXM6OihFbmNyeXBUeXBlPSVkKVxuIiwgX19GVU5DVElPTl9fLCBwQWQtPlN0YUNmZy5XZXBTdGF0dXMpKTsKKwkJCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwkJCQkJfQorCQkJCQkvL0VuY3J5cFR5cGUKKwkJCQkJaWYoUlRNUEdldEtleVBhcmFtZXRlcigiRW5jcnlwVHlwZSIsIHRtcGJ1ZiwgMTI4LCBidWZmZXIpKQorCQkJCQl7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCQl7CisJCQkJCQkJaWYgKChzdHJjbXAodG1wYnVmLCAiV0VQIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJ3ZXAiKSA9PSAwKSkKKwkJCQkJCQkJcEFkLT5TdGFDZmcuV2VwU3RhdHVzCT0gTmRpczgwMl8xMVdFUEVuYWJsZWQ7CisJCQkJCQkJZWxzZSBpZiAoKHN0cmNtcCh0bXBidWYsICJUS0lQIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJ0a2lwIikgPT0gMCkpCisJCQkJCQkJCXBBZC0+U3RhQ2ZnLldlcFN0YXR1cwk9IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQ7CisJCQkJCQkJZWxzZSBpZiAoKHN0cmNtcCh0bXBidWYsICJBRVMiKSA9PSAwKSB8fCAoc3RyY21wKHRtcGJ1ZiwgImFlcyIpID09IDApKQorCQkJCQkJCQlwQWQtPlN0YUNmZy5XZXBTdGF0dXMJPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJcEFkLT5TdGFDZmcuV2VwU3RhdHVzCT0gTmRpczgwMl8xMVdFUERpc2FibGVkOworCisJCQkJCQkJLy8gVXBkYXRlIGFsbCB3ZXBzdGF0dXMgcmVsYXRlZAorCQkJCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIJCT0gcEFkLT5TdGFDZmcuV2VwU3RhdHVzOworCQkJCQkJCXBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyIAk9IHBBZC0+U3RhQ2ZnLldlcFN0YXR1czsKKwkJCQkJCQlwQWQtPlN0YUNmZy5PcmlnV2VwU3RhdHVzIAk9IHBBZC0+U3RhQ2ZnLldlcFN0YXR1czsKKwkJCQkJCQlwQWQtPlN0YUNmZy5iTWl4Q2lwaGVyIAkJPSBGQUxTRTsKKworCQkJCQkJCS8vUlRNUE1ha2VSU05JRShwQWQsIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlLCBwQWQtPlN0YUNmZy5XZXBTdGF0dXMsIDApOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjooRW5jcnlwVHlwZT0lZClcbiIsIF9fRlVOQ1RJT05fXywgcEFkLT5TdGFDZmcuV2VwU3RhdHVzKSk7CisJCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJCQkJCX0KKworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJeworCQkJCQkJaWYoUlRNUEdldENyaXRpY2FsUGFyYW1ldGVyKCJXUEFQU0siLCB0bXBidWYsIDUxMiwgYnVmZmVyKSkKKwkJCQkJCXsKKwkJCQkJCQlpbnQgICAgIGVycj0wOworCisJCQkJCQkJdG1wYnVmW3N0cmxlbih0bXBidWYpXSA9ICdcMCc7IC8vIG1ha2UgU1RBIGNhbiBwcm9jZXNzIC4kXiYgZm9yIFdQQVBTSyBpbnB1dAorCisJCQkJCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spICYmCisJCQkJCQkJCShwQWQtPlN0YUNmZy5BdXRoTW9kZSAhPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSAmJgorCQkJCQkJCQkocEFkLT5TdGFDZmcuQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKwkJCQkJCQkJKQorCQkJCQkJCXsKKwkJCQkJCQkJZXJyID0gMTsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSBpZiAoKHN0cmxlbih0bXBidWYpID49IDgpICYmIChzdHJsZW4odG1wYnVmKSA8IDY0KSkKKwkJCQkJCQl7CisJCQkJCQkJCVBhc3N3b3JkSGFzaCgoY2hhciAqKXRtcGJ1ZiwgcEFkLT5Db21tb25DZmcuU3NpZCwgcEFkLT5Db21tb25DZmcuU3NpZExlbiwga2V5TWF0ZXJpYWwpOworCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5QTUssIGtleU1hdGVyaWFsLCAzMik7CisKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSBpZiAoc3RybGVuKHRtcGJ1ZikgPT0gNjQpCisJCQkJCQkJeworCQkJCQkJCQlBdG9IKHRtcGJ1Ziwga2V5TWF0ZXJpYWwsIDMyKTsKKwkJCQkJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUE1LLCBrZXlNYXRlcmlhbCwgMzIpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQllcnIgPSAxOworCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIlczo6KFdQQVBTSyBrZXktc3RyaW5nIHJlcXVpcmVkIDggfiA2NCBjaGFyYWN0ZXJzISlcbiIsIF9fRlVOQ1RJT05fXykpOworCQkJCQkJCX0KKworCQkJCQkJCWlmIChlcnIgPT0gMCkKKwkgICAgICAgICAgICAgICAgICAgICAgICAJCQl7CisJICAgICAgICAgICAgICAgICAgICAgICAgCQkJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSB8fAorCQkJCQkJCQkJKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKQorCQkJCQkJCQl7CisJCQkJCQkJCQkvLyBTdGFydCBTVEEgc3VwcGxpY2FudCBzdGF0ZSBtYWNoaW5lCisJCQkJCQkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1NUQVJUOworCQkJCQkJCQl9CisJCQkJCQkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisJCQkJCQkJCXsKKwkvKgorCQkJCQkJCQkJTmRpc1plcm9NZW1vcnkoJnBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLCBzaXplb2YoQ0lQSEVSX0tFWSkpOworCQkJCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gTEVOX1RLSVBfRUs7CisJCQkJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXksIHBBZC0+U3RhQ2ZnLlBNSywgTEVOX1RLSVBfRUspOworCQkJCQkJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMsICZwQWQtPlN0YUNmZy5QTUtbMTZdLCBMRU5fVEtJUF9SWE1JQ0spOworCQkJCQkJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uVHhNaWMsICZwQWQtPlN0YUNmZy5QTUtbMTZdLCBMRU5fVEtJUF9UWE1JQ0spOworCisJCQkJCQkJCQkvLyBEZWNpZGUgaXRzIENoaXBlckFsZworCQkJCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKwkJCQkJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKKwkJCQkJCQkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJCQkJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOworCQkJCQkJCQkJZWxzZQorCQkJCQkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCSovCisJCQkJCQkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX05PVFVTRTsKKwkJCQkJCQkJfQorCisJCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjooV1BBUFNLPSVzKVxuIiwgX19GVU5DVElPTl9fLCB0bXBidWYpKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCQkJCQkvL0RlZmF1bHRLZXlJRCwgS2V5VHlwZSwgS2V5U3RyCisJCQkJCXJ0bXBfcmVhZF9rZXlfcGFybXNfZnJvbV9maWxlKHBBZCwgdG1wYnVmLCBidWZmZXIpOworCisKKwkJCQkJLy9IU0NvdW50ZXIKKwkJCQkJLyppZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJIU0NvdW50ZXIiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkpCisJCQkJCQl7CisJCQkJCQkJY2FzZSAxOiAvL0VuYWJsZQorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iRW5hYmxlSFNDb3VudGVyID0gVFJVRTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAwOiAvL0Rpc2FibGUKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5iRW5hYmxlSFNDb3VudGVyID0gRkFMU0U7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICJIU0NvdW50ZXI9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVIU0NvdW50ZXIpOworCQkJCQl9Ki8KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCQlIVFBhcmFtZXRlcnNIb29rKHBBZCwgdG1wYnVmLCBidWZmZXIpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUCisJCQkJCQkvL0NhcnJpZXJEZXRlY3QKKwkJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkNhcnJpZXJEZXRlY3QiLCB0bXBidWYsIDEyOCwgYnVmZmVyKSkKKwkJCQkJCXsKKwkJCQkJCQlpZiAoKHN0cm5jbXAodG1wYnVmLCAiMCIsIDEpID09IDApKQorCQkJCQkJCQlwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSA9IEZBTFNFOworCQkJCQkJCWVsc2UgaWYgKChzdHJuY21wKHRtcGJ1ZiwgIjEiLCAxKSA9PSAwKSkKKwkJCQkJCQkJcEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUgPSBUUlVFOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJcEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUgPSBGQUxTRTsKKworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNhcnJpZXJEZXRlY3QuRW5hYmxlPSVkXG4iLCBwQWQtPkNvbW1vbkNmZy5DYXJyaWVyRGV0ZWN0LkVuYWJsZSkpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuRW5hYmxlID0gRkFMU0U7CisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJCQkJCUlGX0RFVl9DT05GSUdfT1BNT0RFX09OX1NUQShwQWQpCisJCQkJCXsKKwkJCQkJCS8vUFNNb2RlCisJCQkJCQlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiUFNNb2RlIiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJCXsKKwkJCQkJCQlpZiAocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfSU5GUkEpCisJCQkJCQkJeworCQkJCQkJCQlpZiAoKHN0cmNtcCh0bXBidWYsICJNQVhfUFNQIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJtYXhfcHNwIikgPT0gMCkpCisJCQkJCQkJCXsKKwkJCQkJCQkJCS8vIGRvIE5PVCB0dXJuIG9uIFBTTSBiaXQgaGVyZSwgd2FpdCB1bnRpbCBNbG1lQ2hlY2tGb3JQc21DaGFuZ2UoKQorCQkJCQkJCQkJLy8gdG8gZXhjbHVkZSBjZXJ0YWluIHNpdHVhdGlvbnMuCisJCQkJCQkJCQkvLwkgICBNbG1lU2V0UHNtKHBBZCwgUFdSX1NBVkUpOworCQkJCQkJCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSk7CisJCQkJCQkJCQlpZiAocEFkLT5TdGFDZmcuYldpbmRvd3NBQ0NBTUVuYWJsZSA9PSBGQUxTRSkKKwkJCQkJCQkJCQlwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZU1BWF9QU1A7CisJCQkJCQkJCQlwQWQtPlN0YUNmZy5XaW5kb3dzQmF0dGVyeVBvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVNQVhfUFNQOworCQkJCQkJCQkJcEFkLT5TdGFDZmcuRGVmYXVsdExpc3RlbkNvdW50ID0gNTsKKwkJCQkJCQkJfQorCQkJCQkJCQllbHNlIGlmICgoc3RyY21wKHRtcGJ1ZiwgIkZhc3RfUFNQIikgPT0gMCkgfHwgKHN0cmNtcCh0bXBidWYsICJmYXN0X3BzcCIpID09IDApCisJCQkJCQkJCQl8fCAoc3RyY21wKHRtcGJ1ZiwgIkZBU1RfUFNQIikgPT0gMCkpCisJCQkJCQkJCXsKKwkJCQkJCQkJCS8vIGRvIE5PVCB0dXJuIG9uIFBTTSBiaXQgaGVyZSwgd2FpdCB1bnRpbCBNbG1lQ2hlY2tGb3JQc21DaGFuZ2UoKQorCQkJCQkJCQkJLy8gdG8gZXhjbHVkZSBjZXJ0YWluIHNpdHVhdGlvbnMuCisJCQkJCQkJCQkvLwkgICBNbG1lU2V0UHNtQml0KHBBZCwgUFdSX1NBVkUpOworCQkJCQkJCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSk7CisJCQkJCQkJCQlpZiAocEFkLT5TdGFDZmcuYldpbmRvd3NBQ0NBTUVuYWJsZSA9PSBGQUxTRSkKKwkJCQkJCQkJCQlwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZUZhc3RfUFNQOworCQkJCQkJCQkJcEFkLT5TdGFDZmcuV2luZG93c0JhdHRlcnlQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlRmFzdF9QU1A7CisJCQkJCQkJCQlwQWQtPlN0YUNmZy5EZWZhdWx0TGlzdGVuQ291bnQgPSAzOworCQkJCQkJCQl9CisJCQkJCQkJCWVsc2UgaWYgKChzdHJjbXAodG1wYnVmLCAiTGVnYWN5X1BTUCIpID09IDApIHx8IChzdHJjbXAodG1wYnVmLCAibGVnYWN5X3BzcCIpID09IDApCisJCQkJCQkJCQl8fCAoc3RyY21wKHRtcGJ1ZiwgIkxFR0FDWV9QU1AiKSA9PSAwKSkKKwkJCQkJCQkJeworCQkJCQkJCQkJLy8gZG8gTk9UIHR1cm4gb24gUFNNIGJpdCBoZXJlLCB3YWl0IHVudGlsIE1sbWVDaGVja0ZvclBzbUNoYW5nZSgpCisJCQkJCQkJCQkvLyB0byBleGNsdWRlIGNlcnRhaW4gc2l0dWF0aW9ucy4KKwkJCQkJCQkJCS8vCSAgIE1sbWVTZXRQc21CaXQocEFkLCBQV1JfU0FWRSk7CisJCQkJCQkJCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKTsKKwkJCQkJCQkJCWlmIChwQWQtPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorCQkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlTGVnYWN5X1BTUDsKKwkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldpbmRvd3NCYXR0ZXJ5UG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZUxlZ2FjeV9QU1A7CisJCQkJCQkJCQlwQWQtPlN0YUNmZy5EZWZhdWx0TGlzdGVuQ291bnQgPSAzOworCQkJCQkJCQl9CisJCQkJCQkJCWVsc2UKKwkJCQkJCQkJeyAvL0RlZmF1bHQgTmRpczgwMl8xMVBvd2VyTW9kZUNBTQorCQkJCQkJCQkJLy8gY2xlYXIgUFNNIGJpdCBpbW1lZGlhdGVseQorCQkJCQkJCQkJTWxtZVNldFBzbUJpdChwQWQsIFBXUl9BQ1RJVkUpOworCQkJCQkJCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSk7CisJCQkJCQkJCQlpZiAocEFkLT5TdGFDZmcuYldpbmRvd3NBQ0NBTUVuYWJsZSA9PSBGQUxTRSkKKwkJCQkJCQkJCQlwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZUNBTTsKKwkJCQkJCQkJCXBBZC0+U3RhQ2ZnLldpbmRvd3NCYXR0ZXJ5UG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZUNBTTsKKwkJCQkJCQkJfQorCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQU01vZGU9JWxkXG4iLCBwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlKSk7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJLy8gRmFzdFJvYW1pbmcKKwkJCQkJCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJGYXN0Um9hbWluZyIsIHRtcGJ1ZiwgMzIsIGJ1ZmZlcikpCisJCQkJCQl7CisJCQkJCQkJaWYgKHNpbXBsZV9zdHJ0b2wodG1wYnVmLCAwLCAxMCkgPT0gMCkKKwkJCQkJCQkJcEFkLT5TdGFDZmcuYkZhc3RSb2FtaW5nID0gRkFMU0U7CisJCQkJCQkJZWxzZQorCQkJCQkJCQlwQWQtPlN0YUNmZy5iRmFzdFJvYW1pbmcgPSBUUlVFOworCisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRmFzdFJvYW1pbmc9JWRcbiIsIHBBZC0+U3RhQ2ZnLmJGYXN0Um9hbWluZykpOworCQkJCQkJfQorCQkJCQkJLy8gUm9hbVRocmVzaG9sZAorCQkJCQkJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIlJvYW1UaHJlc2hvbGQiLCB0bXBidWYsIDMyLCBidWZmZXIpKQorCQkJCQkJeworCQkJCQkJCWxvbmcgbEluZm8gPSBzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApOworCisJCQkJCQkJaWYgKGxJbmZvID4gOTAgfHwgbEluZm8gPCA2MCkKKwkJCQkJCQkJcEFkLT5TdGFDZmcuZEJtVG9Sb2FtID0gLTcwOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJcEFkLT5TdGFDZmcuZEJtVG9Sb2FtID0gKENIQVIpKC0xKSpsSW5mbzsKKworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJvYW1UaHJlc2hvbGQ9JWQgIGRCbVxuIiwgcEFkLT5TdGFDZmcuZEJtVG9Sb2FtKSk7CisJCQkJCQl9CisKKwkJCQkJCWlmKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIlRHbldpZmlUZXN0IiwgdG1wYnVmLCAxMCwgYnVmZmVyKSkKKwkJCQkJCXsKKwkJCQkJCQlpZihzaW1wbGVfc3RydG9sKHRtcGJ1ZiwgMCwgMTApID09IDApCisJCQkJCQkJCXBBZC0+U3RhQ2ZnLmJUR25XaWZpVGVzdCA9IEZBTFNFOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJcEFkLT5TdGFDZmcuYlRHbldpZmlUZXN0ID0gVFJVRTsKKwkJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVEduV2lmaVRlc3Q9JWRcbiIsIHBBZC0+U3RhQ2ZnLmJUR25XaWZpVGVzdCkpOworCQkJCQkJfQorCQkJCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworI2lmZGVmIFJUMzB4eAorI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQkJCQkJSUZfREVWX0NPTkZJR19PUE1PREVfT05fU1RBKHBBZCkKKwkJCQkJCXsKKwkJCQkJCQlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJBbnREaXZlcnNpdHkiLCB0bXBidWYsIDEwLCBidWZmZXIpKQorCQkJCQkJCXsKKwkJCQkJCQkJZm9yIChpID0gMCwgbWFjcHRyID0gcnN0cnRvayh0bXBidWYsIjsiKTsgbWFjcHRyOyBtYWNwdHIgPSByc3RydG9rKE5VTEwsIjsiKSwgaSsrKQorCQkJCQkJCQl7CisJCQkJCQkJCQlpZihzaW1wbGVfc3RydG9sKG1hY3B0ciwgMCwgMTApICE9IDApICAvL0VuYWJsZQorCQkJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJSeEFudERpdmVyc2l0eSA9IFRSVUU7CisJCQkJCQkJCQllbHNlIC8vRGlzYWJsZQorCQkJCQkJCQkJCXBBZC0+Q29tbW9uQ2ZnLmJSeEFudERpdmVyc2l0eSA9IEZBTFNFOworCisJCQkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJBbnREaXZlcnNpdHk9JWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLmJSeEFudERpdmVyc2l0eSkpOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworI2VuZGlmIC8vIFJUMzB4eCAvLworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4gJXMgZG9lcyBub3QgaGF2ZSBhIHdyaXRlIG1ldGhvZFxuIiwgc3JjKSk7CisJCQl9CisKKwkJCXJldHZhbD1maWxwX2Nsb3NlKHNyY2YsTlVMTCk7CisKKwkJCWlmIChyZXR2YWwpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0+IEVycm9yICVkIGNsb3NpbmcgJXNcbiIsIC1yZXR2YWwsIHNyYykpOworCQkJfQorCQl9CisJfQorCisJc2V0X2ZzKG9yZ2ZzKTsKKyNpZiAwCisJY3VycmVudC0+ZnN1aWQgPSBvcmdmc3VpZDsKKwljdXJyZW50LT5mc2dpZCA9IG9yZ2ZzZ2lkOworI2VuZGlmCisKKwlrZnJlZShidWZmZXIpOworCWtmcmVlKHRtcGJ1Zik7CisKKwlyZXR1cm4gKE5ESVNfU1RBVFVTX1NVQ0NFU1MpOworfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitzdGF0aWMgdm9pZAlIVFBhcmFtZXRlcnNIb29rKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCUNIQVIJCSAgKnBWYWx1ZVN0ciwKKwlJTglDSEFSCQkgICpwSW5wdXQpCit7CisKKwlJTlQgVmFsdWU7CisKKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfUFJPVEVDVCIsIHBWYWx1ZVN0ciwgMjUsIHBJbnB1dCkpCisgICAgeworICAgICAgICBWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisgICAgICAgIGlmIChWYWx1ZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5iSFRQcm90ZWN0ID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5iSFRQcm90ZWN0ID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogUHJvdGVjdGlvbiAgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJEaXNhYmxlIiA6ICJFbmFibGUiKSk7CisgICAgfQorCisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX01JTU9QU0VuYWJsZSIsIHBWYWx1ZVN0ciwgMjUsIHBJbnB1dCkpCisgICAgeworICAgICAgICBWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisgICAgICAgIGlmIChWYWx1ZSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5iTUlNT1BTRW5hYmxlID0gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5iTUlNT1BTRW5hYmxlID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogTUlNT1BTRW5hYmxlICA9ICVzXG4iLCAoVmFsdWU9PTApID8gIkRpc2FibGUiIDogIkVuYWJsZSIpKTsKKyAgICB9CisKKworICAgIGlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9NSU1PUFNNb2RlIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKyAgICB7CisgICAgICAgIFZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKyAgICAgICAgaWYgKFZhbHVlID4gTU1QU19FTkFCTEUpCisgICAgICAgIHsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NTVBTbW9kZSA9IE1NUFNfRU5BQkxFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy9UT0RPOiBhZGQgbWltbyBwb3dlciBzYXZpbmcgbWVjaGFuaXNtCisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTU1QU21vZGUgPSBNTVBTX0VOQUJMRTsKKwkJCS8vcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlID0gVmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IE1JTU9QUyBNb2RlICA9ICVkXG4iLCBWYWx1ZSkpOworICAgIH0KKworICAgIGlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9CQURlY2xpbmUiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorICAgIHsKKyAgICAgICAgVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworICAgICAgICBpZiAoVmFsdWUgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuYkJBRGVjbGluZSA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuYkJBRGVjbGluZSA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IEJBIERlY2xpbmUgID0gJXNcbiIsIChWYWx1ZT09MCkgPyAiRGlzYWJsZSIgOiAiRW5hYmxlIikpOworICAgIH0KKworCisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX0Rpc2FibGVSZW9yZGVyaW5nIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKyAgICB7CisgICAgICAgIFZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKyAgICAgICAgaWYgKFZhbHVlID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLmJEaXNhYmxlUmVvcmRlcmluZyA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuYkRpc2FibGVSZW9yZGVyaW5nID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogRGlzYWJsZVJlb3JkZXJpbmcgID0gJXNcbiIsIChWYWx1ZT09MCkgPyAiRGlzYWJsZSIgOiAiRW5hYmxlIikpOworICAgIH0KKworICAgIGlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9BdXRvQkEiLCBwVmFsdWVTdHIsIDI1LCBwSW5wdXQpKQorICAgIHsKKyAgICAgICAgVmFsdWUgPSBzaW1wbGVfc3RydG9sKHBWYWx1ZVN0ciwgMCwgMTApOworICAgICAgICBpZiAoVmFsdWUgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IEZBTFNFOworCSAgICBwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5ID0gQkFfTk9UVVNFOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IFRSVUU7CisJICAgIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5Qb2xpY3kgPSBJTU1FRF9CQTsKKyAgICAgICAgfQorICAgICAgICBwQWQtPkNvbW1vbkNmZy5SRUdCQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID0gcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQTsKKwlwQWQtPkNvbW1vbkNmZy5SRUdCQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5ID0gcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlBvbGljeTsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IEF1dG8gQkEgID0gJXNcbiIsIChWYWx1ZT09MCkgPyAiRGlzYWJsZSIgOiAiRW5hYmxlIikpOworICAgIH0KKworCS8vIFR4XytIVEMgZnJhbWUKKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfSFRDIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJaWYgKFZhbHVlID09IDApCisJCXsKKwkJCXBBZC0+SFRDRW5hYmxlID0gRkFMU0U7CisJCX0KKwkJZWxzZQorCQl7CisgICAgICAgICAgICAJCXBBZC0+SFRDRW5hYmxlID0gVFJVRTsKKwkJfQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogVHggK0hUQyBmcmFtZSA9ICVzXG4iLCAoVmFsdWU9PTApID8gIkRpc2FibGUiIDogIkVuYWJsZSIpKTsKKwl9CisKKwkvLyBFbmFibGUgSFQgTGluayBBZGFwdGF0aW9uIENvbnRyb2wKKwlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfTGlua0FkYXB0IiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJaWYgKFZhbHVlID09IDApCisJCXsKKwkJCXBBZC0+YkxpbmtBZGFwdCA9IEZBTFNFOworCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5IVENFbmFibGUgPSBUUlVFOworCQkJcEFkLT5iTGlua0FkYXB0ID0gVFJVRTsKKwkJfQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogTGluayBBZGFwdGF0aW9uIENvbnRyb2wgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJEaXNhYmxlIiA6ICJFbmFibGUoK0hUQykiKSk7CisJfQorCisJLy8gUmV2ZXJzZSBEaXJlY3Rpb24gTWVjaGFuaXNtCisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX1JERyIsIHBWYWx1ZVN0ciwgMjUsIHBJbnB1dCkpCisJeworCQlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisJCWlmIChWYWx1ZSA9PSAwKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5iUmRnID0gRkFMU0U7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwQWQtPkhUQ0VuYWJsZSA9IFRSVUU7CisgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5iUmRnID0gVFJVRTsKKwkJfQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogUkRHID0gJXNcbiIsIChWYWx1ZT09MCkgPyAiRGlzYWJsZSIgOiAiRW5hYmxlKCtIVEMpIikpOworCX0KKworCisKKworCS8vIFR4IEEtTVNVRCA/CisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX0FNU0RVIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKwkJaWYgKFZhbHVlID09IDApCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5BbXNkdUVuYWJsZSA9IEZBTFNFOworCQl9CisJCWVsc2UKKwkJeworICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkFtc2R1RW5hYmxlID0gVFJVRTsKKwkJfQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogVHggQS1NU0RVID0gJXNcbiIsIChWYWx1ZT09MCkgPyAiRGlzYWJsZSIgOiAiRW5hYmxlIikpOworCX0KKworCS8vIE1QRFUgRGVuc2l0eQorICAgIGlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9NcGR1RGVuc2l0eSIsIHBWYWx1ZVN0ciwgMjUsIHBJbnB1dCkpCisJeworCQlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisJCWlmIChWYWx1ZSA8PTcgJiYgVmFsdWUgPj0gMCkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5ID0gVmFsdWU7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogTVBEVSBEZW5zaXR5ID0gJWRcbiIsIFZhbHVlKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuTXBkdURlbnNpdHkgPSA0OworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IE1QRFUgRGVuc2l0eSA9ICVkIChEZWZhdWx0KVxuIiwgNCkpOworCQl9CisJfQorCisJLy8gTWF4IFJ4IEJBIFdpbmRvdyBTaXplCisgICAgaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX0JBV2luU2l6ZSIsIHBWYWx1ZVN0ciwgMjUsIHBJbnB1dCkpCisJeworCQlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisKKwkJaWYgKFZhbHVlID49MSAmJiBWYWx1ZSA8PSA2NCkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IFZhbHVlOworCQkJcEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IFZhbHVlOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IEJBIFdpbmR3IFNpemUgPSAlZFxuIiwgVmFsdWUpKTsKKwkJfQorCQllbHNlCisJCXsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQgPSA2NDsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQgPSA2NDsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBCQSBXaW5kdyBTaXplID0gNjQgKERlZnVhbHQpXG4iKSk7CisJCX0KKworCX0KKworCS8vIEd1YXJkIEludGVydmFsCisJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX0dJIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKworCQlpZiAoVmFsdWUgPT0gR0lfNDAwKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU2hvcnRHSSA9IEdJXzQwMDsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TaG9ydEdJID0gR0lfODAwOworCQl9CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IEd1YXJkIEludGVydmFsID0gJXNcbiIsIChWYWx1ZT09R0lfNDAwKSA/ICI0MDAiIDogIjgwMCIgKSk7CisJfQorCisJLy8gSFQgT3BlcmF0aW9uIE1vZGUgOiBNaXhlZCBNb2RlICwgR3JlZW4gRmllbGQKKwlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfT3BNb2RlIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKworCQlpZiAoVmFsdWUgPT0gSFRNT0RFX0dGKQorCQl7CisKKwkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5IVE1PREUgID0gSFRNT0RFX0dGOworCQl9CisJCWVsc2UKKwkJeworCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkhUTU9ERSAgPSBIVE1PREVfTU07CisJCX0KKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogT3BlcmF0ZSBNb2RlID0gJXNcbiIsIChWYWx1ZT09SFRNT0RFX0dGKSA/ICJHcmVlbiBGaWVsZCIgOiAiTWl4ZWQgTW9kZSIgKSk7CisJfQorCisJLy8gRml4ZWQgVHggbW9kZSA6IENDSywgT0ZETQorCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJGaXhlZFR4TW9kZSIsIHBWYWx1ZVN0ciwgMjUsIHBJbnB1dCkpCisJeworCQlVQ0hBUglmaXhfdHhfbW9kZTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlmaXhfdHhfbW9kZSA9IEZJWEVEX1RYTU9ERV9IVDsKKworCQkJaWYgKHN0cmNtcChwVmFsdWVTdHIsICJPRkRNIikgPT0gMCB8fCBzdHJjbXAocFZhbHVlU3RyLCAib2ZkbSIpID09IDApCisJCQl7CisJCQkJZml4X3R4X21vZGUgPSBGSVhFRF9UWE1PREVfT0ZETTsKKwkJCX0KKwkJCWVsc2UgaWYgKHN0cmNtcChwVmFsdWVTdHIsICJDQ0siKSA9PSAwIHx8IHN0cmNtcChwVmFsdWVTdHIsICJjY2siKSA9PSAwKQorCQkJeworCQkgICAgICAgIGZpeF90eF9tb2RlID0gRklYRURfVFhNT0RFX0NDSzsKKwkJCX0KKwkJCWVsc2UgaWYgKHN0cmNtcChwVmFsdWVTdHIsICJIVCIpID09IDAgfHwgc3RyY21wKHBWYWx1ZVN0ciwgImh0IikgPT0gMCkKKwkJCXsKKwkJICAgICAgICBmaXhfdHhfbW9kZSA9IEZJWEVEX1RYTU9ERV9IVDsKKwkJfQorCQllbHNlCisJCXsKKwkJCQlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisJCQkJLy8gMSA6IENDSworCQkJCS8vIDIgOiBPRkRNCisJCQkJLy8gb3RoZXJ3aXNlIDogSFQKKwkJCQlpZiAoVmFsdWUgPT0gRklYRURfVFhNT0RFX0NDSyB8fCBWYWx1ZSA9PSBGSVhFRF9UWE1PREVfT0ZETSkKKwkJCQkJZml4X3R4X21vZGUgPSBWYWx1ZTsKKwkJCQllbHNlCisJCQkJCWZpeF90eF9tb2RlID0gRklYRURfVFhNT0RFX0hUOworCQl9CisKKwkJCXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuRml4ZWRUeE1vZGUgPSBmaXhfdHhfbW9kZTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkZpeGVkIFR4IE1vZGUgPSAlZFxuIiwgZml4X3R4X21vZGUpKTsKKworCQl9CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJfQorCisKKwkvLyBDaGFubmVsIFdpZHRoCisJaWYgKFJUTVBHZXRLZXlQYXJhbWV0ZXIoIkhUX0JXIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKworCQlpZiAoVmFsdWUgPT0gQldfNDApCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyAgPSBCV180MDsKKwkJfQorCQllbHNlCisJCXsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyAgPSBCV18yMDsKKwkJfQorCisjaWZkZWYgTUNBU1RfUkFURV9TUEVDSUZJQworCQlwQWQtPkNvbW1vbkNmZy5NQ2FzdFBoeU1vZGUuZmllbGQuQlcgPSBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlc7CisjZW5kaWYgLy8gTUNBU1RfUkFURV9TUEVDSUZJQyAvLworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBDaGFubmVsIFdpZHRoID0gJXNcbiIsIChWYWx1ZT09QldfNDApID8gIjQwIE1IeiIgOiAiMjAgTUh6IiApKTsKKwl9CisKKwlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfRVhUQ0hBIiwgcFZhbHVlU3RyLCAyNSwgcElucHV0KSkKKwl7CisJCVZhbHVlID0gc2ltcGxlX3N0cnRvbChwVmFsdWVTdHIsIDAsIDEwKTsKKworCQlpZiAoVmFsdWUgPT0gMCkKKwkJeworCisJCQlwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBICA9IEVYVENIQV9CRUxPVzsKKwkJfQorCQllbHNlCisJCXsKKyAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5FWFRDSEEgPSBFWFRDSEFfQUJPVkU7CisJCX0KKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogRXh0IENoYW5uZWwgPSAlc1xuIiwgKFZhbHVlPT0wKSA/ICJCRUxPVyIgOiAiQUJPVkUiICkpOworCX0KKworCS8vIE1TQworCWlmIChSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9NQ1MiLCBwVmFsdWVTdHIsIDUwLCBwSW5wdXQpKQorCXsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCQlJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEocEFkKQorCQl7CisJCQlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisKKy8vCQkJaWYgKChWYWx1ZSA+PSAwICYmIFZhbHVlIDw9IDE1KSB8fCAoVmFsdWUgPT0gMzIpKQorCQkJaWYgKChWYWx1ZSA+PSAwICYmIFZhbHVlIDw9IDIzKSB8fCAoVmFsdWUgPT0gMzIpKSAvLyAzKjMKKwkJeworCQkJCXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTICA9IFZhbHVlOworCQkJCXBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IE1DUyA9ICVkXG4iLCBwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUykpOworCQl9CisJCWVsc2UKKwkJeworCQkJCXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTICA9IE1DU19BVVRPOworCQkJCXBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID0gVFJVRTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogTUNTID0gQVVUT1xuIikpOworCQl9CisJfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCX0KKworCS8vIFNUQkMKKyAgICBpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfU1RCQyIsIHBWYWx1ZVN0ciwgMjUsIHBJbnB1dCkpCisJeworCQlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisJCWlmIChWYWx1ZSA9PSBTVEJDX1VTRSkKKwkJeworCQkJcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlNUQkMgPSBTVEJDX1VTRTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TVEJDID0gU1RCQ19OT05FOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBTVEJDID0gJWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5TVEJDKSk7CisJfQorCisJLy8gNDBfTWh6X0ludG9sZXJhbnQKKwlpZiAoUlRNUEdldEtleVBhcmFtZXRlcigiSFRfNDBNSFpfSU5UT0xFUkFOVCIsIHBWYWx1ZVN0ciwgMjUsIHBJbnB1dCkpCisJeworCQlWYWx1ZSA9IHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCk7CisJCWlmIChWYWx1ZSA9PSAwKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5iRm9ydHlfTWh6X0ludG9sZXJhbnQgPSBGQUxTRTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+Q29tbW9uQ2ZnLmJGb3J0eV9NaHpfSW50b2xlcmFudCA9IFRSVUU7CisJCX0KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSFQ6IDQwTUhaIElOVE9MRVJBTlQgPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuYkZvcnR5X01oel9JbnRvbGVyYW50KSk7CisJfQorCS8vSFRfVHhTdHJlYW0KKwlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9UeFN0cmVhbSIsIHBWYWx1ZVN0ciwgMTAsIHBJbnB1dCkpCisJeworCQlzd2l0Y2ggKHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCkpCisJCXsKKwkJCWNhc2UgMToKKwkJCQlwQWQtPkNvbW1vbkNmZy5UeFN0cmVhbSA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJcEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPSAyOworCQkJCWJyZWFrOworCQkJY2FzZSAzOiAvLyAzKjMKKwkJCWRlZmF1bHQ6CisJCQkJcEFkLT5Db21tb25DZmcuVHhTdHJlYW0gPSAzOworCisJCQkJaWYgKHBBZC0+TUFDVmVyc2lvbiA8IFJBTElOS18yODgzX1ZFUlNJT04pCisJCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID0gMjsgLy8gb25seSAyIHR4IHN0cmVhbXMgZm9yIFJUMjg2MCBzZXJpZXMKKwkJCQlicmVhazsKKwkJfQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJIVDogVHggU3RyZWFtID0gJWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtKSk7CisJfQorCS8vSFRfUnhTdHJlYW0KKwlpZihSVE1QR2V0S2V5UGFyYW1ldGVyKCJIVF9SeFN0cmVhbSIsIHBWYWx1ZVN0ciwgMTAsIHBJbnB1dCkpCisJeworCQlzd2l0Y2ggKHNpbXBsZV9zdHJ0b2wocFZhbHVlU3RyLCAwLCAxMCkpCisJCXsKKwkJCWNhc2UgMToKKwkJCQlwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJcEFkLT5Db21tb25DZmcuUnhTdHJlYW0gPSAyOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJZGVmYXVsdDoKKwkJCQlwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9IDM7CisKKwkJCQlpZiAocEFkLT5NQUNWZXJzaW9uIDwgUkFMSU5LXzI4ODNfVkVSU0lPTikKKwkJCQkJcEFkLT5Db21tb25DZmcuUnhTdHJlYW0gPSAyOyAvLyBvbmx5IDIgcnggc3RyZWFtcyBmb3IgUlQyODYwIHNlcmllcworCQkJCWJyZWFrOworCQl9CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkhUOiBSeCBTdHJlYW0gPSAlZFxuIiwgcEFkLT5Db21tb25DZmcuUnhTdHJlYW0pKTsKKwl9CisKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydG1wLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODBkNzRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydG1wLmgKQEAgLTAsMCArMSw3NzI4IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIE1vZHVsZSBOYW1lOgorICAgIHJ0bXAuaAorCisgICAgQWJzdHJhY3Q6CisgICAgTWluaXBvcnQgZ2VuZXJpYyBwb3J0aW9uIGhlYWRlciBmaWxlCisKKyAgICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIFdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFBhdWwgTGluICAgIDIwMDItMDgtMDEgICAgY3JlYXRlZAorICAgIEphbWVzIFRhbiAgIDIwMDItMDktMDYgICAgbW9kaWZpZWQgKFJldmlzZSBOVENSZWdUYWJsZSkKKyAgICBKb2huIENoYW5nICAyMDA0LTA5LTA2ICAgIG1vZGlmaWVkIGZvciBSVDI2MDAKKyovCisjaWZuZGVmIF9fUlRNUF9IX18KKyNkZWZpbmUgX19SVE1QX0hfXworCisjaW5jbHVkZSAibGlua19saXN0LmgiCisjaW5jbHVkZSAic3BlY3RydW1fZGVmLmgiCisKKyNpZmRlZiBNTE1FX0VYCisjaW5jbHVkZSAibWxtZV9leF9kZWYuaCIKKyNlbmRpZiAvLyBNTE1FX0VYIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpbmNsdWRlICJhaXJvbmV0LmgiCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyN1bmRlZiBBUF9XU0NfSU5DTFVERUQKKyN1bmRlZiBTVEFfV1NDX0lOQ0xVREVECisjdW5kZWYgV1NDX0lOQ0xVREVECisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWYgZGVmaW5lZChBUF9XU0NfSU5DTFVERUQpIHx8IGRlZmluZWQoU1RBX1dTQ19JTkNMVURFRCkKKyNkZWZpbmUgV1NDX0lOQ0xVREVECisjZW5kaWYKKworCisKKworCisvLyNkZWZpbmUgREJHCQkxCisKKy8vI2RlZmluZSBEQkdfRElBR05PU0UJCTEKKworI2lmIGRlZmluZWQoQ09ORklHX0FQX1NVUFBPUlQpICYmIGRlZmluZWQoQ09ORklHX1NUQV9TVVBQT1JUKQorI2RlZmluZSBJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9BUChfcEFkKQlpZihfcEFkLT5PcE1vZGUgPT0gT1BNT0RFX0FQKQorI2RlZmluZSBJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEoX3BBZCkJaWYoX3BBZC0+T3BNb2RlID09IE9QTU9ERV9TVEEpCisjZWxzZQorI2RlZmluZSBJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9BUChfcEFkKQorI2RlZmluZSBJRl9ERVZfQ09ORklHX09QTU9ERV9PTl9TVEEoX3BBZCkKKyNlbmRpZgorCisjZGVmaW5lIFZJUlRVQUxfSUZfSU5DKF9fcEFkKSAoKF9fcEFkKS0+VmlydHVhbElmQ250KyspCisjZGVmaW5lIFZJUlRVQUxfSUZfREVDKF9fcEFkKSAoKF9fcEFkKS0+VmlydHVhbElmQ250LS0pCisjZGVmaW5lIFZJUlRVQUxfSUZfTlVNKF9fcEFkKSAoKF9fcEFkKS0+VmlydHVhbElmQ250KQorCisjaWZkZWYgUlQyODcwCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBUaGUgVFhfQlVGRkVSIHN0cnVjdHVyZSBmb3JtcyB0aGUgdHJhbnNtaXR0ZWQgVVNCIHBhY2tldCB0byB0aGUgZGV2aWNlCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit0eXBlZGVmIHN0cnVjdCBfX1RYX0JVRkZFUnsKKwl1bmlvbgl7CisJCVVDSEFSCQkJV2lyZWxlc3NQYWNrZXRbVFhfQlVGRkVSX05PUk1TSVpFXTsKKwkJSEVBREVSXzgwMl8xMQlOdWxsRnJhbWU7CisJCVBTUE9MTF9GUkFNRQlQc1BvbGxQYWNrZXQ7CisJCVJUU19GUkFNRQkJUlRTRnJhbWU7CisJfWZpZWxkOworCVVDSEFSCQkJQWdncmVnYXRpb25bNF07ICAvL0J1ZmZlciBmb3Igc2F2ZSBBZ2dyZWdhdGlvbiBzaXplLgorfSBUWF9CVUZGRVIsICpQVFhfQlVGRkVSOworCit0eXBlZGVmIHN0cnVjdCBfX0hUVFhfQlVGRkVSeworCXVuaW9uCXsKKwkJVUNIQVIJCQlXaXJlbGVzc1BhY2tldFtNQVhfVFhCVUxLX1NJWkVdOworCQlIRUFERVJfODAyXzExCU51bGxGcmFtZTsKKwkJUFNQT0xMX0ZSQU1FCVBzUG9sbFBhY2tldDsKKwkJUlRTX0ZSQU1FCQlSVFNGcmFtZTsKKwl9ZmllbGQ7CisJVUNIQVIJCQlBZ2dyZWdhdGlvbls0XTsgIC8vQnVmZmVyIGZvciBzYXZlIEFnZ3JlZ2F0aW9uIHNpemUuCit9IEhUVFhfQlVGRkVSLCAqUEhUVFhfQlVGRkVSOworCisKKy8vIHVzZWQgdG8gdHJhY2sgZHJpdmVyLWdlbmVyYXRlZCB3cml0ZSBpcnBzCit0eXBlZGVmIHN0cnVjdCBfVFhfQ09OVEVYVAoreworCVBWT0lECQkJcEFkOwkJLy9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKKwlQVVJCCQkJcFVyYjsJCQkvL0luaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZQorCVBJUlAJCQlwSXJwOwkJCS8vdXNlZCB0byBjYW5jZWwgcGVuZGluZyBidWxrIG91dC4KKwkJCQkJCQkJCS8vSW5pdGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXplCisJUFRYX0JVRkZFUgkJVHJhbnNmZXJCdWZmZXI7CS8vSW5pdGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXplCisJVUxPTkcJCQlCdWxrT3V0U2l6ZTsKKwlVQ0hBUgkJCUJ1bGtPdXRQaXBlSWQ7CisJVUNIQVIJCQlTZWxmSWR4OworCUJPT0xFQU4JCQlJblVzZTsKKwlCT09MRUFOCQkJYldhaXRpbmdCdWxrT3V0OyAvLyBhdCBsZWFzdCBvbmUgcGFja2V0IGlzIGluIHRoaXMgVHhDb250ZXh0LCByZWFkeSBmb3IgbWFraW5nIElSUCBhbnl0aW1lLgorCUJPT0xFQU4JCQliRnVsbEZvckJ1bGtPdXQ7IC8vIGFsbCB0eCBidWZmZXIgYXJlIGZ1bGwgLCBzbyB3YWl0aW5nIGZvciB0eCBidWxrb3V0LgorCUJPT0xFQU4JCQlJUlBQZW5kaW5nOworCUJPT0xFQU4JCQlMYXN0T25lOworCUJPT0xFQU4JCQliQWdncmVnYXRpYmxlOworCVVDSEFSCQkJSGVhZGVyXzgwMl8zW0xFTkdUSF84MDJfM107CisJVUNIQVIJCQlSc3ZbMl07CisJVUxPTkcJCQlEYXRhT2Zmc2V0OworCVVJTlQJCQlUeFJhdGU7CisJZG1hX2FkZHJfdAkJZGF0YV9kbWE7CQkvLyB1cmIgZG1hIG9uIGxpbnV4CisKK30JVFhfQ09OVEVYVCwgKlBUWF9DT05URVhULCAqKlBQVFhfQ09OVEVYVDsKKworCisvLyB1c2VkIHRvIHRyYWNrIGRyaXZlci1nZW5lcmF0ZWQgd3JpdGUgaXJwcwordHlwZWRlZiBzdHJ1Y3QgX0hUX1RYX0NPTlRFWFQKK3sKKwlQVk9JRAkJCXBBZDsJCS8vSW5pdGlhbGl6ZWQgaW4gTWluaXBvcnRJbml0aWFsaXplCisJUFVSQgkJCXBVcmI7CQkJLy9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKKwlQSVJQCQkJcElycDsJCQkvL3VzZWQgdG8gY2FuY2VsIHBlbmRpbmcgYnVsayBvdXQuCisJCQkJCQkJCQkvL0luaXRpYWxpemVkIGluIE1pbmlwb3J0SW5pdGlhbGl6ZQorCVBIVFRYX0JVRkZFUglUcmFuc2ZlckJ1ZmZlcjsJLy9Jbml0aWFsaXplZCBpbiBNaW5pcG9ydEluaXRpYWxpemUKKwlVTE9ORwkJCUJ1bGtPdXRTaXplOwkvLyBJbmRpY2F0ZSB0aGUgdG90YWwgYnVsay1vdXQgc2l6ZSBpbiBieXRlcyBpbiBvbmUgYnVsay10cmFuc21pc3Npb24KKwlVQ0hBUgkJCUJ1bGtPdXRQaXBlSWQ7CisJQk9PTEVBTgkJCUlSUFBlbmRpbmc7CisJQk9PTEVBTgkJCUxhc3RPbmU7CisJQk9PTEVBTgkJCWJDdXJXcml0aW5nOworCUJPT0xFQU4JCQliUmluZ0VtcHR5OworCUJPT0xFQU4JCQliQ29weVNhdmVQYWQ7CisJVUNIQVIJCQlTYXZlZFBhZFs4XTsKKwlVQ0hBUgkJCUhlYWRlcl84MDJfM1tMRU5HVEhfODAyXzNdOworCVVMT05HCQkJQ3VyV3JpdGVQb3NpdGlvbjsJCS8vIEluZGljYXRlIHRoZSBidWZmZXIgb2Zmc2V0IHdoaWNoIHBhY2tldCB3aWxsIGJlIGluc2VydGVkIHN0YXJ0IGZyb20uCisJVUxPTkcJCQlDdXJXcml0ZVJlYWxQb3M7CQkvLyBJbmRpY2F0ZSB0aGUgYnVmZmVyIG9mZnNldCB3aGljaCBwYWNrZXQgbm93IGFyZSB3cml0aW5nIHRvLgorCVVMT05HCQkJTmV4dEJ1bGtPdXRQb3NpdGlvbjsJLy8gSW5kaWNhdGUgdGhlIGJ1ZmZlciBzdGFydCBvZmZzZXQgb2YgYSBidWxrLXRyYW5zbWlzc2lvbgorCVVMT05HCQkJRU5leHRCdWxrT3V0UG9zaXRpb247CS8vIEluZGljYXRlIHRoZSBidWZmZXIgZW5kIG9mZnNldCBvZiBhIGJ1bGstdHJhbnNtaXNzaW9uCisJVUlOVAkJCVR4UmF0ZTsKKwlkbWFfYWRkcl90CQlkYXRhX2RtYTsJCS8vIHVyYiBkbWEgb24gbGludXgKK30JSFRfVFhfQ09OVEVYVCwgKlBIVF9UWF9DT05URVhULCAqKlBQSFRfVFhfQ09OVEVYVDsKKworCisvLworLy8gU3RydWN0dXJlIHRvIGtlZXAgdHJhY2sgb2YgcmVjZWl2ZSBwYWNrZXRzIGFuZCBidWZmZXJzIHRvIGluZGljYXRlCisvLyByZWNlaXZlIGRhdGEgdG8gdGhlIHByb3RvY29sLgorLy8KK3R5cGVkZWYgc3RydWN0IF9SWF9DT05URVhUCit7CisJUFVDSEFSCQkJCVRyYW5zZmVyQnVmZmVyOworCVBWT0lECQkJCXBBZDsKKwlQSVJQCQkJCXBJcnA7Ly91c2VkIHRvIGNhbmNlbCBwZW5kaW5nIGJ1bGsgaW4uCisJUFVSQgkJCQlwVXJiOworCS8vVGhlc2UgMiBCb29sZWFuIHNob3VsZG4ndCBib3RoIGJlIDEgYXQgdGhlIHNhbWUgdGltZS4KKwlVTE9ORwkJCQlCdWxrSW5PZmZzZXQ7CS8vIG51bWJlciBvZiBwYWNrZXRzIHdhaXRpbmcgZm9yIHJlb3JkZXJpbmcgLgorLy8JQk9PTEVBTgkJCQlSZW9yZGVySW5Vc2U7CS8vIEF0IGxlYXN0IG9uZSBwYWNrZXQgaW4gdGhpcyBidWZmZXIgYXJlIGluIHJlb3JkZXJpbmcgYnVmZmVyIGFuZCB3YWl0IGZvciByZWNlaXZlIGluZGljYXRpb24KKwlCT09MRUFOCQkJCWJSeEhhbmRsaW5nOwkvLyBOb3RpZnkgdGhpcyBwYWNrZXQgaXMgYmVpbmcgcHJvY2VzcyBub3cuCisJQk9PTEVBTgkJCQlJblVzZTsJCQkvLyBVU0IgSGFyZHdhcmUgT2NjdXBpZWQuIFdhaXQgZm9yIFVTQiBIVyB0byBwdXQgcGFja2V0LgorCUJPT0xFQU4JCQkJUmVhZGFibGU7CQkvLyBSZWNlaXZlIENvbXBsZXRlIGJhY2suIE9LIGZvciBkcml2ZXIgdG8gaW5kaWNhdGUgcmVjZWl2aW5nIHBhY2tldC4KKwlCT09MRUFOCQkJCUlSUFBlbmRpbmc7CQkvLyBUT0RPOiBUbyBiZSByZW1vdmVkCisJYXRvbWljX3QJCQlJcnBMb2NrOworCU5ESVNfU1BJTl9MT0NLCQlSeENvbnRleHRMb2NrOworCWRtYV9hZGRyX3QJCQlkYXRhX2RtYTsJCS8vIHVyYiBkbWEgb24gbGludXgKK30JUlhfQ09OVEVYVCwgKlBSWF9DT05URVhUOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKy8vCisvLyAgTkRJUyBWZXJzaW9uIGRlZmluaXRpb25zCisvLworI2lmZGVmICBORElTNTBfTUlOSVBPUlQKKyNkZWZpbmUgUlRNUF9ORElTX01BSk9SX1ZFUlNJT04gICAgIDUKKyNkZWZpbmUgUlRNUF9ORElTX01JTk9SX1ZFUlNJT04gICAgIDAKKyNlbmRpZgorCisjaWZkZWYgIE5ESVM1MV9NSU5JUE9SVAorI2RlZmluZSBSVE1QX05ESVNfTUFKT1JfVkVSU0lPTiAgICAgNQorI2RlZmluZSBSVE1QX05ESVNfTUlOT1JfVkVSU0lPTiAgICAgMQorI2VuZGlmCisKK2V4dGVybiAgY2hhciAgICBOSUNfVkVORE9SX0RFU0NbXTsKK2V4dGVybiAgaW50ICAgICBOSUNfVkVORE9SX0RFU0NfTEVOOworCitleHRlcm4gIHVuc2lnbmVkIGNoYXIgICBTTkFQX0FJUk9ORVRbXTsKK2V4dGVybiAgdW5zaWduZWQgY2hhciAgIENpcGhlclN1aXRlQ2lzY29DQ0tNW107CitleHRlcm4gIHVuc2lnbmVkIGNoYXIgICBDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbjsKK2V4dGVybgl1bnNpZ25lZCBjaGFyCUNpcGhlclN1aXRlQ2lzY29DQ0tNMjRbXTsKK2V4dGVybgl1bnNpZ25lZCBjaGFyCUNpcGhlclN1aXRlQ2lzY29DQ0tNMjRMZW47CitleHRlcm4gIHVuc2lnbmVkIGNoYXIgICBDaXBoZXJTdWl0ZUNDWFRraXBbXTsKK2V4dGVybiAgdW5zaWduZWQgY2hhciAgIENpcGhlclN1aXRlQ0NYVGtpcExlbjsKK2V4dGVybiAgdW5zaWduZWQgY2hhciAgIENJU0NPX09VSVtdOworZXh0ZXJuICBVQ0hBUglCYVNpemVBcnJheVs0XTsKKworZXh0ZXJuIFVDSEFSIEJST0FEQ0FTVF9BRERSW01BQ19BRERSX0xFTl07CitleHRlcm4gVUNIQVIgTVVMVElDQVNUX0FERFJbTUFDX0FERFJfTEVOXTsKK2V4dGVybiBVQ0hBUiBaRVJPX01BQ19BRERSW01BQ19BRERSX0xFTl07CitleHRlcm4gVUxPTkcgQklUMzJbMzJdOworZXh0ZXJuIFVDSEFSIEJJVDhbOF07CitleHRlcm4gY2hhciogQ2lwaGVyTmFtZVtdOworZXh0ZXJuIGNoYXIqIE1DU1RvTWJwc1tdOworZXh0ZXJuIFVDSEFSCSBSeHdpTUNTVG9PZmRtUmF0ZVsxMl07CitleHRlcm4gVUNIQVIgU05BUF84MDJfMUhbNl07CitleHRlcm4gVUNIQVIgU05BUF9CUklER0VfVFVOTkVMWzZdOworZXh0ZXJuIFVDSEFSIFNOQVBfQUlST05FVFs4XTsKK2V4dGVybiBVQ0hBUiBDS0lQX0xMQ19TTkFQWzhdOworZXh0ZXJuIFVDSEFSIEVBUE9MX0xMQ19TTkFQWzhdOworZXh0ZXJuIFVDSEFSIEVBUE9MWzJdOworZXh0ZXJuIFVDSEFSIElQWFsyXTsKK2V4dGVybiBVQ0hBUiBBUFBMRV9UQUxLWzJdOworZXh0ZXJuIFVDSEFSIFJhdGVJZFRvUGxjcFNpZ25hbFsxMl07IC8vIHNlZSBJRUVFODAyLjExYS0xOTk5IHAuMTQKK2V4dGVybiBVQ0hBUgkgT2ZkbVJhdGVUb1J4d2lNQ1NbXTsKK2V4dGVybiBVQ0hBUiBPZmRtU2lnbmFsVG9SYXRlSWRbMTZdIDsKK2V4dGVybiBVQ0hBUiBkZWZhdWx0X2N3bWluWzRdOworZXh0ZXJuIFVDSEFSIGRlZmF1bHRfY3dtYXhbNF07CitleHRlcm4gVUNIQVIgZGVmYXVsdF9zdGFfYWlmc25bNF07CitleHRlcm4gVUNIQVIgTWFwVXNlclByaW9yaXR5VG9BY2Nlc3NDYXRlZ29yeVs4XTsKKworZXh0ZXJuIFVTSE9SVCBSYXRlVXBQRVJbXTsKK2V4dGVybiBVU0hPUlQgUmF0ZURvd25QRVJbXTsKK2V4dGVybiBVQ0hBUiAgUGh5MTFCTmV4dFJhdGVEb3dud2FyZFtdOworZXh0ZXJuIFVDSEFSICBQaHkxMUJOZXh0UmF0ZVVwd2FyZFtdOworZXh0ZXJuIFVDSEFSICBQaHkxMUJHTmV4dFJhdGVEb3dud2FyZFtdOworZXh0ZXJuIFVDSEFSICBQaHkxMUJHTmV4dFJhdGVVcHdhcmRbXTsKK2V4dGVybiBVQ0hBUiAgUGh5MTFBTmV4dFJhdGVEb3dud2FyZFtdOworZXh0ZXJuIFVDSEFSICBQaHkxMUFOZXh0UmF0ZVVwd2FyZFtdOworZXh0ZXJuIENIQVIgICBSc3NpU2FmZUxldmVsRm9yVHhSYXRlW107CitleHRlcm4gVUNIQVIgIFJhdGVJZFRvTWJwc1tdOworZXh0ZXJuIFVTSE9SVCBSYXRlSWRUbzUwMEticHNbXTsKKworZXh0ZXJuIFVDSEFSICBDaXBoZXJTdWl0ZVdwYU5vbmVUa2lwW107CitleHRlcm4gVUNIQVIgIENpcGhlclN1aXRlV3BhTm9uZVRraXBMZW47CisKK2V4dGVybiBVQ0hBUiAgQ2lwaGVyU3VpdGVXcGFOb25lQWVzW107CitleHRlcm4gVUNIQVIgIENpcGhlclN1aXRlV3BhTm9uZUFlc0xlbjsKKworZXh0ZXJuIFVDSEFSICBTc2lkSWU7CitleHRlcm4gVUNIQVIgIFN1cFJhdGVJZTsKK2V4dGVybiBVQ0hBUiAgRXh0UmF0ZUllOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitleHRlcm4gVUNIQVIgIEh0Q2FwSWU7CitleHRlcm4gVUNIQVIgIEFkZEh0SW5mb0llOworZXh0ZXJuIFVDSEFSICBOZXdFeHRDaGFuSWU7CisjaWZkZWYgRE9UMTFOX0RSQUZUMworZXh0ZXJuIFVDSEFSICBFeHRIdENhcEllOworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworZXh0ZXJuIFVDSEFSICBFcnBJZTsKK2V4dGVybiBVQ0hBUiAgRHNJZTsKK2V4dGVybiBVQ0hBUiAgVGltSWU7CitleHRlcm4gVUNIQVIgIFdwYUllOworZXh0ZXJuIFVDSEFSICBXcGEySWU7CitleHRlcm4gVUNIQVIgIElic3NJZTsKK2V4dGVybiBVQ0hBUiAgQ2N4MkllOworZXh0ZXJuIFVDSEFSICBXYXBpSWU7CisKK2V4dGVybiBVQ0hBUiAgV1BBX09VSVtdOworZXh0ZXJuIFVDSEFSICBSU05fT1VJW107CitleHRlcm4gVUNIQVIgIFdBUElfT1VJW107CitleHRlcm4gVUNIQVIgIFdNRV9JTkZPX0VMRU1bXTsKK2V4dGVybiBVQ0hBUiAgV01FX1BBUk1fRUxFTVtdOworZXh0ZXJuIFVDSEFSICBDY3gyUW9zSW5mb1tdOworZXh0ZXJuIFVDSEFSICBDY3gySWVJbmZvW107CitleHRlcm4gVUNIQVIgIFJBTElOS19PVUlbXTsKK2V4dGVybiBVQ0hBUiAgUG93ZXJDb25zdHJhaW50SUVbXTsKKworCitleHRlcm4gVUNIQVIgIFJhdGVTd2l0Y2hUYWJsZVtdOworZXh0ZXJuIFVDSEFSICBSYXRlU3dpdGNoVGFibGUxMUJbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlMTFHW107CitleHRlcm4gVUNIQVIgIFJhdGVTd2l0Y2hUYWJsZTExQkdbXTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorZXh0ZXJuIFVDSEFSICBSYXRlU3dpdGNoVGFibGUxMUJHTjFTW107CitleHRlcm4gVUNIQVIgIFJhdGVTd2l0Y2hUYWJsZTExQkdOMlNbXTsKK2V4dGVybiBVQ0hBUiAgUmF0ZVN3aXRjaFRhYmxlMTFCR04yU0ZvckFCYW5kW107CitleHRlcm4gVUNIQVIgIFJhdGVTd2l0Y2hUYWJsZTExTjFTW107CitleHRlcm4gVUNIQVIgIFJhdGVTd2l0Y2hUYWJsZTExTjJTW107CitleHRlcm4gVUNIQVIgIFJhdGVTd2l0Y2hUYWJsZTExTjJTRm9yQUJhbmRbXTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorZXh0ZXJuIFVDSEFSICBQUkVfTl9IVF9PVUlbXTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworI2RlZmluZQlNQVhTRVEJCSgweEZGRikKKworI2lmZGVmIFJBTElOS19BVEUKK3R5cGVkZWYJc3RydWN0IF9BVEVfSU5GTyB7CisJVUNIQVIJTW9kZTsKKwlDSEFSCVR4UG93ZXIwOworCUNIQVIJVHhQb3dlcjE7CisJQ0hBUiAgICBUeEFudGVubmFTZWw7CisJQ0hBUiAgICBSeEFudGVubmFTZWw7CisJVFhXSV9TVFJVQyAgVHhXSTsgCSAgLy8gVFhXSQorCVVTSE9SVAlRSUQ7CisJVUNIQVIJQWRkcjFbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUglBZGRyMltNQUNfQUREUl9MRU5dOworCVVDSEFSCUFkZHIzW01BQ19BRERSX0xFTl07CisJVUNIQVIJQ2hhbm5lbDsKKwlVSU5UMzIJVHhMZW5ndGg7CisJVUlOVDMyCVR4Q291bnQ7CisJVUlOVDMyCVR4RG9uZUNvdW50OyAvLyBUeCBETUEgRG9uZQorCVVJTlQzMglSRkZyZXFPZmZzZXQ7CisJQk9PTEVBTgliUnhGZXI7CisJQk9PTEVBTgliUUFUeFN0YXJ0OyAvLyBIYXZlIGNvbXBpbGVkIFFBIGluIGFuZCB1c2UgaXQgdG8gQVRFIHR4LgorCUJPT0xFQU4JYlFBUnhTdGFydDsJLy8gSGF2ZSBjb21waWxlZCBRQSBpbiBhbmQgdXNlIGl0IHRvIEFURSByeC4KKwlVSU5UMzIJUnhUb3RhbENudDsKKwlVSU5UMzIJUnhDbnRQZXJTZWM7CisKKwlDSEFSCUxhc3RTTlIwOyAgICAgICAgICAgICAvLyBsYXN0IHJlY2VpdmVkIFNOUgorCUNIQVIgICAgTGFzdFNOUjE7ICAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgU05SIGZvciAybmQgIGFudGVubmEKKwlDSEFSICAgIExhc3RSc3NpMDsgICAgICAgICAgICAvLyBsYXN0IHJlY2VpdmVkIFJTU0kKKwlDSEFSICAgIExhc3RSc3NpMTsgICAgICAgICAgICAvLyBsYXN0IHJlY2VpdmVkIFJTU0kgZm9yIDJuZCAgYW50ZW5uYQorCUNIQVIgICAgTGFzdFJzc2kyOyAgICAgICAgICAgIC8vIGxhc3QgcmVjZWl2ZWQgUlNTSSBmb3IgM3JkICBhbnRlbm5hCisJQ0hBUiAgICBBdmdSc3NpMDsgICAgICAgICAgICAgLy8gbGFzdCA4IGZyYW1lcycgYXZlcmFnZSBSU1NJCisJQ0hBUiAgICBBdmdSc3NpMTsgICAgICAgICAgICAgLy8gbGFzdCA4IGZyYW1lcycgYXZlcmFnZSBSU1NJCisJQ0hBUiAgICBBdmdSc3NpMjsgICAgICAgICAgICAgLy8gbGFzdCA4IGZyYW1lcycgYXZlcmFnZSBSU1NJCisJU0hPUlQgICBBdmdSc3NpMFg4OyAgICAgICAgICAgLy8gc3VtIG9mIGxhc3QgOCBmcmFtZXMnIFJTU0kKKwlTSE9SVCAgIEF2Z1Jzc2kxWDg7ICAgICAgICAgICAvLyBzdW0gb2YgbGFzdCA4IGZyYW1lcycgUlNTSQorCVNIT1JUICAgQXZnUnNzaTJYODsgICAgICAgICAgIC8vIHN1bSBvZiBsYXN0IDggZnJhbWVzJyBSU1NJCisKKwlVSU5UMzIJTnVtT2ZBdmdSc3NpU2FtcGxlOworCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkvLyBUeCBmcmFtZQorI2lmZGVmIFJUMjg3MAorCS8qIG5vdCB1c2VkIGluIFJUMjg2MCAqLworCVRYSU5GT19TVFJVQwkJVHhJbmZvOyAvLyBUeEluZm8KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwlVU0hPUlQJCUhMZW47IC8vIEhlYWRlciBMZW5ndGgKKwlVU0hPUlQJCVBMZW47IC8vIFBhdHRlcm4gTGVuZ3RoCisJVUNIQVIgCQlIZWFkZXJbMzJdOyAvLyBIZWFkZXIgYnVmZmVyCisJVUNIQVIJCVBhdHRlcm5bMzJdOyAvLyBQYXR0ZXJuIGJ1ZmZlcgorCVVTSE9SVAkJRExlbjsgLy8gRGF0YSBMZW5ndGgKKwlVU0hPUlQJCXNlcTsKKwlVSU5UMzIJCUNJRDsKKwlwaWRfdCAJCUF0ZVBpZDsKKwkvLyBjb3VudGVycworCVVJTlQzMgkJVTJNOworCVVJTlQzMgkJT3RoZXJEYXRhOworCVVJTlQzMgkJQmVhY29uOworCVVJTlQzMgkJT3RoZXJDb3VudDsKKwlVSU5UMzIJCVR4QWMwOworCVVJTlQzMgkJVHhBYzE7CisJVUlOVDMyCQlUeEFjMjsKKwlVSU5UMzIJCVR4QWMzOworCVVJTlQzMgkJVHhIQ0NBOworCVVJTlQzMgkJVHhNZ210OworCVVJTlQzMgkJUlNTSTA7CisJVUlOVDMyCQlSU1NJMTsKKwlVSU5UMzIJCVJTU0kyOworCVVJTlQzMgkJU05SMDsKKwlVSU5UMzIJCVNOUjE7CisJLy8gY29udHJvbAorCS8vVUlOVDMyCQlSZXBlYXQ7IC8vIFR4IENwdSBjb3VudAorCVVDSEFSCQlUeFN0YXR1czsgLy8gdGFzayBUeCBzdGF0dXMgLy8gMCAtLT4gdGFzayBpcyBpZGxlLCAxIC0tPiB0YXNrIGlzIHJ1bm5pbmcKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworfQlBVEVfSU5GTywgKlBBVEVfSU5GTzsKKworI2lmZGVmIFJBTElOS18yOHh4X1FBCitzdHJ1Y3QgYXRlX3JhY2ZnaGRyIHsKKyAJVUlOVDMyCQltYWdpY19ubzsKKwlVU0hPUlQJCWNvbW1hbmRfdHlwZTsKKwlVU0hPUlQJCWNvbW1hbmRfaWQ7CisJVVNIT1JUCQlsZW5ndGg7CisJVVNIT1JUCQlzZXF1ZW5jZTsKKwlVU0hPUlQJCXN0YXR1czsKKwlVQ0hBUgkJZGF0YVsyMDQ2XTsKK30gIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitzdHJ1Y3QgcmVvcmRlcmluZ19tcGR1Cit7CisJc3RydWN0IHJlb3JkZXJpbmdfbXBkdQkqbmV4dDsKKwlQTkRJU19QQUNLRVQJCQlwUGFja2V0OwkJLyogY292ZXJ0ZWQgdG8gODAyLjMgZnJhbWUgKi8KKwlpbnQJCQkJCQlTZXF1ZW5jZTsJCS8qIHNlcXVlbmNlIG51bWJlciBvZiBNUERVICovCisJQk9PTEVBTgkJCQkJYkFNU0RVOworfTsKKworc3RydWN0IHJlb3JkZXJpbmdfbGlzdAoreworCXN0cnVjdCByZW9yZGVyaW5nX21wZHUgKm5leHQ7CisJaW50IAlxbGVuOworfTsKKworc3RydWN0IHJlb3JkZXJpbmdfbXBkdV9wb29sCit7CisJUFZPSUQJCQkJCW1lbTsKKwlORElTX1NQSU5fTE9DSwkJCWxvY2s7CisJc3RydWN0IHJlb3JkZXJpbmdfbGlzdCAJZnJlZWxpc3Q7Cit9OworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCit0eXBlZGVmIHN0cnVjdCAJX1JTU0lfU0FNUExFIHsKKwlDSEFSCQkJTGFzdFJzc2kwOyAgICAgICAgICAgICAvLyBsYXN0IHJlY2VpdmVkIFJTU0kKKwlDSEFSCQkJTGFzdFJzc2kxOyAgICAgICAgICAgICAvLyBsYXN0IHJlY2VpdmVkIFJTU0kKKwlDSEFSCQkJTGFzdFJzc2kyOyAgICAgICAgICAgICAvLyBsYXN0IHJlY2VpdmVkIFJTU0kKKwlDSEFSCQkJQXZnUnNzaTA7CisJQ0hBUgkJCUF2Z1Jzc2kxOworCUNIQVIJCQlBdmdSc3NpMjsKKwlTSE9SVAkJCUF2Z1Jzc2kwWDg7CisJU0hPUlQJCQlBdmdSc3NpMVg4OworCVNIT1JUCQkJQXZnUnNzaTJYODsKK30gUlNTSV9TQU1QTEU7CisKKy8vCisvLyAgUXVldWUgc3RydWN0dXJlIGFuZCBtYWNyb3MKKy8vCit0eXBlZGVmIHN0cnVjdCAgX1FVRVVFX0VOVFJZICAgIHsKKwlzdHJ1Y3QgX1FVRVVFX0VOVFJZICAgICAqTmV4dDsKK30gICBRVUVVRV9FTlRSWSwgKlBRVUVVRV9FTlRSWTsKKworLy8gUXVldWUgc3RydWN0dXJlCit0eXBlZGVmIHN0cnVjdCAgX1FVRVVFX0hFQURFUiAgIHsKKwlQUVVFVUVfRU5UUlkgICAgSGVhZDsKKwlQUVVFVUVfRU5UUlkgICAgVGFpbDsKKwlVTE9ORyAgICAgICAgICAgTnVtYmVyOworfSAgIFFVRVVFX0hFQURFUiwgKlBRVUVVRV9IRUFERVI7CisKKyNkZWZpbmUgSW5pdGlhbGl6ZVF1ZXVlSGVhZGVyKFF1ZXVlSGVhZGVyKSAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKFF1ZXVlSGVhZGVyKS0+SGVhZCA9IChRdWV1ZUhlYWRlciktPlRhaWwgPSBOVUxMOyAgIFwKKwkoUXVldWVIZWFkZXIpLT5OdW1iZXIgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFJlbW92ZUhlYWRRdWV1ZShRdWV1ZUhlYWRlcikgICAgICAgICAgICAgICAgXAorKFF1ZXVlSGVhZGVyKS0+SGVhZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJUFFVRVVFX0VOVFJZIHBOZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmICgoUXVldWVIZWFkZXIpLT5IZWFkICE9IE5VTEwpCQkJCVwKKwl7CQkJCQkJCQkJCQkJXAorCQlwTmV4dCA9IChRdWV1ZUhlYWRlciktPkhlYWQtPk5leHQ7ICAgICAgICAgIFwKKwkJKFF1ZXVlSGVhZGVyKS0+SGVhZCA9IHBOZXh0OyAgICAgICAgICAgICAgICBcCisJCWlmIChwTmV4dCA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJKFF1ZXVlSGVhZGVyKS0+VGFpbCA9IE5VTEw7ICAgICAgICAgICAgIFwKKwkJKFF1ZXVlSGVhZGVyKS0+TnVtYmVyLS07ICAgICAgICAgICAgICAgICAgICBcCisJfQkJCQkJCQkJCQkJCVwKK30KKworI2RlZmluZSBJbnNlcnRIZWFkUXVldWUoUXVldWVIZWFkZXIsIFF1ZXVlRW50cnkpICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkoKFBRVUVVRV9FTlRSWSlRdWV1ZUVudHJ5KS0+TmV4dCA9IChRdWV1ZUhlYWRlciktPkhlYWQ7IFwKKwkJKFF1ZXVlSGVhZGVyKS0+SGVhZCA9IChQUVVFVUVfRU5UUlkpKFF1ZXVlRW50cnkpOyAgICAgICBcCisJCWlmICgoUXVldWVIZWFkZXIpLT5UYWlsID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJKFF1ZXVlSGVhZGVyKS0+VGFpbCA9IChQUVVFVUVfRU5UUlkpKFF1ZXVlRW50cnkpOyAgIFwKKwkJKFF1ZXVlSGVhZGVyKS0+TnVtYmVyKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNkZWZpbmUgSW5zZXJ0VGFpbFF1ZXVlKFF1ZXVlSGVhZGVyLCBRdWV1ZUVudHJ5KSAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSgoUFFVRVVFX0VOVFJZKVF1ZXVlRW50cnkpLT5OZXh0ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoKFF1ZXVlSGVhZGVyKS0+VGFpbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCShRdWV1ZUhlYWRlciktPlRhaWwtPk5leHQgPSAoUFFVRVVFX0VOVFJZKShRdWV1ZUVudHJ5KTsgXAorCWVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJKFF1ZXVlSGVhZGVyKS0+SGVhZCA9IChQUVVFVUVfRU5UUlkpKFF1ZXVlRW50cnkpOyAgICAgICBcCisJKFF1ZXVlSGVhZGVyKS0+VGFpbCA9IChQUVVFVUVfRU5UUlkpKFF1ZXVlRW50cnkpOyAgICAgICAgICAgXAorCShRdWV1ZUhlYWRlciktPk51bWJlcisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLy8KKy8vICBNYWNyb3MgZm9yIGZsYWcgYW5kIHJlZiBjb3VudCBvcGVyYXRpb25zCisvLworI2RlZmluZSBSVE1QX1NFVF9GTEFHKF9NLCBfRikgICAgICAgKChfTSktPkZsYWdzIHw9IChfRikpCisjZGVmaW5lIFJUTVBfQ0xFQVJfRkxBRyhfTSwgX0YpICAgICAoKF9NKS0+RmxhZ3MgJj0gfihfRikpCisjZGVmaW5lIFJUTVBfQ0xFQVJfRkxBR1MoX00pICAgICAgICAoKF9NKS0+RmxhZ3MgPSAwKQorI2RlZmluZSBSVE1QX1RFU1RfRkxBRyhfTSwgX0YpICAgICAgKCgoX00pLT5GbGFncyAmIChfRikpICE9IDApCisjZGVmaW5lIFJUTVBfVEVTVF9GTEFHUyhfTSwgX0YpICAgICAoKChfTSktPkZsYWdzICYgKF9GKSkgPT0gKF9GKSkKKworI2RlZmluZSBPUFNUQVRVU19TRVRfRkxBRyhfcEFkLCBfRikgICAgICgoX3BBZCktPkNvbW1vbkNmZy5PcFN0YXR1c0ZsYWdzIHw9IChfRikpCisjZGVmaW5lIE9QU1RBVFVTX0NMRUFSX0ZMQUcoX3BBZCwgX0YpICAgKChfcEFkKS0+Q29tbW9uQ2ZnLk9wU3RhdHVzRmxhZ3MgJj0gfihfRikpCisjZGVmaW5lIE9QU1RBVFVTX1RFU1RfRkxBRyhfcEFkLCBfRikgICAgKCgoX3BBZCktPkNvbW1vbkNmZy5PcFN0YXR1c0ZsYWdzICYgKF9GKSkgIT0gMCkKKworI2RlZmluZSBDTElFTlRfU1RBVFVTX1NFVF9GTEFHKF9wRW50cnksX0YpICAgICAgKChfcEVudHJ5KS0+Q2xpZW50U3RhdHVzRmxhZ3MgfD0gKF9GKSkKKyNkZWZpbmUgQ0xJRU5UX1NUQVRVU19DTEVBUl9GTEFHKF9wRW50cnksX0YpICAgICgoX3BFbnRyeSktPkNsaWVudFN0YXR1c0ZsYWdzICY9IH4oX0YpKQorI2RlZmluZSBDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhfcEVudHJ5LF9GKSAgICAgKCgoX3BFbnRyeSktPkNsaWVudFN0YXR1c0ZsYWdzICYgKF9GKSkgIT0gMCkKKworI2RlZmluZSBSWF9GSUxURVJfU0VUX0ZMQUcoX3BBZCwgX0YpICAgICgoX3BBZCktPkNvbW1vbkNmZy5QYWNrZXRGaWx0ZXIgfD0gKF9GKSkKKyNkZWZpbmUgUlhfRklMVEVSX0NMRUFSX0ZMQUcoX3BBZCwgX0YpICAoKF9wQWQpLT5Db21tb25DZmcuUGFja2V0RmlsdGVyICY9IH4oX0YpKQorI2RlZmluZSBSWF9GSUxURVJfVEVTVF9GTEFHKF9wQWQsIF9GKSAgICgoKF9wQWQpLT5Db21tb25DZmcuUGFja2V0RmlsdGVyICYgKF9GKSkgIT0gMCkKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorI2RlZmluZSBTVEFfTk9fU0VDVVJJVFlfT04oX3ApICAgICAgICAgIChfcC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkKQorI2RlZmluZSBTVEFfV0VQX09OKF9wKSAgICAgICAgICAgICAgICAgIChfcC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKQorI2RlZmluZSBTVEFfVEtJUF9PTihfcCkgICAgICAgICAgICAgICAgIChfcC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorI2RlZmluZSBTVEFfQUVTX09OKF9wKSAgICAgICAgICAgICAgICAgIChfcC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCisjZGVmaW5lIFNUQV9UR05fV0lGSV9PTihfcCkgICAgICAgICAgICAgKF9wLT5TdGFDZmcuYlRHbldpZmlUZXN0ID09IFRSVUUpCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNkZWZpbmUgQ0tJUF9LUF9PTihfcCkJCQkJKCgoKF9wKS0+U3RhQ2ZnLkNraXBGbGFnKSAmIDB4MTApICYmICgoX3ApLT5TdGFDZmcuYkNraXBDbWljT24gPT0gVFJVRSkpCisjZGVmaW5lIENLSVBfQ01JQ19PTihfcCkJCQkoKCgoX3ApLT5TdGFDZmcuQ2tpcEZsYWcpICYgMHgwOCkgJiYgKChfcCktPlN0YUNmZy5iQ2tpcENtaWNPbiA9PSBUUlVFKSkKKworCisjZGVmaW5lIElOQ19SSU5HX0lOREVYKF9pZHgsIF9SaW5nU2l6ZSkgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoX2lkeCkgPSAoX2lkeCsxKSAlIChfUmluZ1NpemUpOyAgICAgICBcCit9CisKKy8vIFdlIHdpbGwgaGF2ZSBhIGNvc3QgZG93biB2ZXJzaW9uIHdoaWNoIG1hYyB2ZXJzaW9uIGlzIDB4MzA5MHh4eHgKKyNkZWZpbmUgSVNfUlQzMDkwKF9wQWQpCQkJCSgoKChfcEFkKS0+TUFDVmVyc2lvbiAmIDB4ZmZmZjAwMDApID09IDB4MzA3MTAwMDApIHx8ICgoKF9wQWQpLT5NQUNWZXJzaW9uICYgMHhmZmZmMDAwMCkgPT0gMHgzMDkwMDAwMCkpCisKKyNkZWZpbmUgSVNfUlQzMDcwKF9wQWQpCQkJCSgoKF9wQWQpLT5NQUNWZXJzaW9uICYgMHhmZmZmMDAwMCkgPT0gMHgzMDcwMDAwMCkKKyNkZWZpbmUgSVNfUlQzMDcxKF9wQWQpCQkJCSgoKF9wQWQpLT5NQUNWZXJzaW9uICYgMHhmZmZmMDAwMCkgPT0gMHgzMDcxMDAwMCkKKyNkZWZpbmUgSVNfUlQyMDcwKF9wQWQpCQkJCSgoKF9wQWQpLT5SZkljVHlwZSA9PSBSRklDXzIwMjApIHx8ICgoX3BBZCktPkVGdXNlVGFnID09IDB4MjcpKQorCisjZGVmaW5lIElTX1JUMzB4eChfcEFkKQkJCQkoKChfcEFkKS0+TUFDVmVyc2lvbiAmIDB4ZmZmMDAwMDApID09IDB4MzA3MDAwMDApCisKKyNkZWZpbmUgUklOR19QQUNLRVRfSU5JVChfVHhSaW5nLCBfaWR4KSAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9UeFJpbmctPkNlbGxbX2lkeF0ucE5kaXNQYWNrZXQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfVHhSaW5nLT5DZWxsW19pZHhdLnBOZXh0TmRpc1BhY2tldCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFRYRFRfSU5JVChfVHhEKSAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCU5kaXNaZXJvTWVtb3J5KF9UeEQsIFRYRF9TSVpFKTsJXAorCV9UeEQtPkRNQURPTkUgPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLy9TZXQgbGFzdCBkYXRhIHNlZ21lbnQKKyNkZWZpbmUgUklOR19TRVRfTEFTVERTKF9UeEQsIF9Jc1NEMCkgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoX0lzU0QwKSB7X1R4RC0+TGFzdFNlYzAgPSAxO30gICAgIFwKKyAgICBlbHNlIHtfVHhELT5MYXN0U2VjMSA9IDE7fSAgICAgXAorfQorCisvLyBJbmNyZWFzZSBUeFRzYyB2YWx1ZSBmb3IgbmV4dCB0cmFuc21pc3Npb24KKy8vIFRPRE86CisvLyBXaGVuIGk9PTYsIG1lYW5zIFRTQyBoYXMgZG9uZSBvbmUgZnVsbCBjeWNsZSwgZG8gcmUta2V5aW5nIHN0dWZmIGZvbGxvdyBzcGVjcworLy8gU2hvdWxkIHNlbmQgYSBzcGVjaWFsIGV2ZW50IG1pY3Jvc29mdCBkZWZpbmVkIHRvIHJlcXVlc3QgcmUta2V5CisjZGVmaW5lIElOQ19UWF9UU0MoX3RzYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGludCBpPTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgd2hpbGUgKCsrX3RzY1tpXSA9PSAweDApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChpID09IDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8vIFN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5NQ1NTZXQgaXMgY29waWVkIGZyb20gQVAgYmVhY29uLiAgRG9uJ3QgbmVlZCB0byB1cGRhdGUgaGVyZS4KKyNkZWZpbmUgQ09QWV9IVFNFVFRJTkdTX0ZST01fTUxNRV9BVVhfVE9fQUNUSVZFX0NGRyhfcEFkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5LkNoYW5uZWxXaWR0aCA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGg7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5NaW1vUHMgPSBfcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uTWltb1BzOyAgICAgIFwKKwlfcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuR0YgPSBfcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uR0Y7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5TaG9ydEdJZm9yMjAgPSBfcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjIwOyAgICAgIFwKKwlfcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuU2hvcnRHSWZvcjQwID0gX3BBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3I0MDsgICAgICBcCisJX3BBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZEh0UGh5LlR4U1RCQyA9IF9wQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5UeFNUQkM7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5SeFNUQkMgPSBfcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uUnhTVEJDOyAgICAgIFwKKwlfcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuRXh0Q2hhbk9mZnNldCA9IF9wQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0OyAgICAgIFwKKwlfcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuUmVjb21XaWR0aCA9IF9wQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mby5SZWNvbVdpZHRoOyAgICAgIFwKKwlfcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuT3BlcmFpb25Nb2RlID0gX3BBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGU7ICAgICAgXAorCV9wQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5Ob25HZlByZXNlbnQgPSBfcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudDsgICAgICBcCisJTmRpc01vdmVNZW1vcnkoKF9wQWQpLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVENhcGFiaWxpdHkuTUNTU2V0LCAoX3BBZCktPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLk1DU1NldCwgc2l6ZW9mKFVDSEFSKSAqIDE2KTtcCit9CisKKyNkZWZpbmUgQ09QWV9BUF9IVFNFVFRJTkdTX0ZST01fQkVBQ09OKF9wQWQsIF9wSHRDYXBhYmlsaXR5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJX3BBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQU1zZHVTaXplID0gKFVDSEFSKShfcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLkFNc2R1U2l6ZSk7CVwKKwlfcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5NbXBzTW9kZT0gKFVDSEFSKShfcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLk1pbW9Qcyk7CVwKKwlfcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5NYXhSQW1wZHVGYWN0b3IgPSAoVUNIQVIpKF9wSHRDYXBhYmlsaXR5LT5IdENhcFBhcm0uTWF4UkFtcGR1RmFjdG9yKTsJXAorfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisvLworLy8gTUFDUk8gZm9yIDMyLWJpdCBQQ0kgcmVnaXN0ZXIgcmVhZCAvIHdyaXRlCisvLworLy8gVXNhZ2UgOiBSVE1QX0lPX1JFQUQzMigKKy8vICAgICAgICAgICAgICBQUlRNUF9BREFQVEVSIHBBZCwKKy8vICAgICAgICAgICAgICBVTE9ORyBSZWdpc3Rlcl9PZmZzZXQsCisvLyAgICAgICAgICAgICAgUFVMT05HICBwVmFsdWUpCisvLworLy8gICAgICAgICBSVE1QX0lPX1dSSVRFMzIoCisvLyAgICAgICAgICAgICAgUFJUTVBfQURBUFRFUiBwQWQsCisvLyAgICAgICAgICAgICAgVUxPTkcgUmVnaXN0ZXJfT2Zmc2V0LAorLy8gICAgICAgICAgICAgIFVMT05HIFZhbHVlKQorLy8KKworLy8KKy8vIEJCUCAmIFJGIGFyZSB1c2luZyBpbmRpcmVjdCBhY2Nlc3MuIEJlZm9yZSB3cml0ZSBhbnkgdmFsdWUgaW50byBpdC4KKy8vIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoZXJlIGlzIG5vIG91dHN0YW5kaW5nIGNvbW1hbmQgcGVuZGluZyB2aWEgY2hlY2tpbmcgYnVzeSBiaXQuCisvLworI2RlZmluZSBNQVhfQlVTWV9DT1VOVCAgMTAwICAgICAgICAgLy8gTnVtYmVyIG9mIHJldHJ5IGJlZm9yZSBmYWlsaW5nIGFjY2VzcyBCQlAgJiBSRiBpbmRpcmVjdCByZWdpc3RlcgorLy8KKworI2lmZGVmIFJUMjg3MAorI2RlZmluZSBSVE1QX1JGX0lPX1dSSVRFMzIoX0EsIF9WKSAgICAgICAgICAgICAgICAgUlRVU0JXcml0ZVJGUmVnaXN0ZXIoX0EsIF9WKQorI2RlZmluZSBSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpICAgUlRVU0JSZWFkQkJQUmVnaXN0ZXIoX0EsIF9JLCBfcFYpCisjZGVmaW5lIFJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQoX0EsIF9JLCBfVikgICBSVFVTQldyaXRlQkJQUmVnaXN0ZXIoX0EsIF9JLCBfVikKKworI2RlZmluZSBCQlBfSU9fV1JJVEU4X0JZX1JFR19JRChfQSwgX0ksIF9WKQkJCVJUVVNCV3JpdGVCQlBSZWdpc3RlcihfQSwgX0ksIF9WKQorI2RlZmluZSBCQlBfSU9fUkVBRDhfQllfUkVHX0lEKF9BLCBfSSwgX3BWKSAgIAkJUlRVU0JSZWFkQkJQUmVnaXN0ZXIoX0EsIF9JLCBfcFYpCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNpZmRlZiBSVDMweHgKKyNkZWZpbmUgUlRNUF9SRl9JT19SRUFEOF9CWV9SRUdfSUQoX0EsIF9JLCBfcFYpICAgIFJUMzB4eFJlYWRSRlJlZ2lzdGVyKF9BLCBfSSwgX3BWKQorI2RlZmluZSBSVE1QX1JGX0lPX1dSSVRFOF9CWV9SRUdfSUQoX0EsIF9JLCBfVikgICAgUlQzMHh4V3JpdGVSRlJlZ2lzdGVyKF9BLCBfSSwgX1YpCisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKyNkZWZpbmUgICAgIE1BUF9DSEFOTkVMX0lEX1RPX0tIWihjaCwga2h6KSAgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAga2h6ID0gMjQxMjAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiAgICAga2h6ID0gMjQxNzAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAga2h6ID0gMjQyMjAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAga2h6ID0gMjQyNzAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1OiAgICAga2h6ID0gMjQzMjAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiAgICAga2h6ID0gMjQzNzAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiAgICAga2h6ID0gMjQ0MjAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA4OiAgICAga2h6ID0gMjQ0NzAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA5OiAgICAga2h6ID0gMjQ1MjAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDogICAga2h6ID0gMjQ1NzAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTogICAga2h6ID0gMjQ2MjAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjogICAga2h6ID0gMjQ2NzAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzogICAga2h6ID0gMjQ3MjAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDogICAga2h6ID0gMjQ4NDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzNjogIC8qIFVOSUkgKi8gIGtoeiA9IDUxODAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDA6ICAvKiBVTklJICovICBraHogPSA1MjAwMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDQ0OiAgLyogVU5JSSAqLyAga2h6ID0gNTIyMDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0ODogIC8qIFVOSUkgKi8gIGtoeiA9IDUyNDAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTI6ICAvKiBVTklJICovICBraHogPSA1MjYwMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU2OiAgLyogVU5JSSAqLyAga2h6ID0gNTI4MDAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA2MDogIC8qIFVOSUkgKi8gIGtoeiA9IDUzMDAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNjQ6ICAvKiBVTklJICovICBraHogPSA1MzIwMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OTogLyogVU5JSSAqLyAga2h6ID0gNTc0NTAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxNTM6IC8qIFVOSUkgKi8gIGtoeiA9IDU3NjUwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTU3OiAvKiBVTklJICovICBraHogPSA1Nzg1MDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE2MTogLyogVU5JSSAqLyAga2h6ID0gNTgwNTAwMDsgICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjU6IC8qIFVOSUkgKi8gIGtoeiA9IDU4MjUwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTAwOiAvKiBIaXBlckxBTjIgKi8gIGtoeiA9IDU1MDAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA0OiAvKiBIaXBlckxBTjIgKi8gIGtoeiA9IDU1MjAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA4OiAvKiBIaXBlckxBTjIgKi8gIGtoeiA9IDU1NDAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTEyOiAvKiBIaXBlckxBTjIgKi8gIGtoeiA9IDU1NjAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTE2OiAvKiBIaXBlckxBTjIgKi8gIGtoeiA9IDU1ODAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTIwOiAvKiBIaXBlckxBTjIgKi8gIGtoeiA9IDU2MDAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI0OiAvKiBIaXBlckxBTjIgKi8gIGtoeiA9IDU2MjAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI4OiAvKiBIaXBlckxBTjIgKi8gIGtoeiA9IDU2NDAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTMyOiAvKiBIaXBlckxBTjIgKi8gIGtoeiA9IDU2NjAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTM2OiAvKiBIaXBlckxBTjIgKi8gIGtoeiA9IDU2ODAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQwOiAvKiBIaXBlckxBTjIgKi8gIGtoeiA9IDU3MDAwMDA7ICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzQ6ICAvKiBKYXBhbiBNTUFDICovICAga2h6ID0gNTE3MDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzg6ICAvKiBKYXBhbiBNTUFDICovICAga2h6ID0gNTE5MDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDI6ICAvKiBKYXBhbiBNTUFDICovICAga2h6ID0gNTIxMDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDY6ICAvKiBKYXBhbiBNTUFDICovICAga2h6ID0gNTIzMDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTg0OiAvKiBKYXBhbiAqLyAgIGtoeiA9IDQ5MjAwMDA7ICAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDE4ODogLyogSmFwYW4gKi8gICBraHogPSA0OTQwMDAwOyAgIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOTI6IC8qIEphcGFuICovICAga2h6ID0gNDk2MDAwMDsgICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMTk2OiAvKiBKYXBhbiAqLyAgIGtoeiA9IDQ5ODAwMDA7ICAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDIwODogLyogSmFwYW4sIG1lYW5zIEowOCAqLyAgIGtoeiA9IDUwNDAwMDA7ICAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDIxMjogLyogSmFwYW4sIG1lYW5zIEoxMiAqLyAgIGtoeiA9IDUwNjAwMDA7ICAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDIxNjogLyogSmFwYW4sIG1lYW5zIEoxNiAqLyAgIGtoeiA9IDUwODAwMDA7ICAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICBraHogPSAyNDEyMDAwOyAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfQorCisjZGVmaW5lICAgICBNQVBfS0haX1RPX0NIQU5ORUxfSUQoa2h6LCBjaCkgIHsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgc3dpdGNoIChraHopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQxMjAwMDogICAgY2ggPSAxOyAgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQxNzAwMDogICAgY2ggPSAyOyAgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQyMjAwMDogICAgY2ggPSAzOyAgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQyNzAwMDogICAgY2ggPSA0OyAgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQzMjAwMDogICAgY2ggPSA1OyAgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQzNzAwMDogICAgY2ggPSA2OyAgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ0MjAwMDogICAgY2ggPSA3OyAgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ0NzAwMDogICAgY2ggPSA4OyAgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ1MjAwMDogICAgY2ggPSA5OyAgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ1NzAwMDogICAgY2ggPSAxMDsgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ2MjAwMDogICAgY2ggPSAxMTsgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ2NzAwMDogICAgY2ggPSAxMjsgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ3MjAwMDogICAgY2ggPSAxMzsgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjQ4NDAwMDogICAgY2ggPSAxNDsgICAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTE4MDAwMDogICAgY2ggPSAzNjsgIC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUyMDAwMDA6ICAgIGNoID0gNDA7ICAvKiBVTklJICovICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MjIwMDAwOiAgICBjaCA9IDQ0OyAgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTI0MDAwMDogICAgY2ggPSA0ODsgIC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUyNjAwMDA6ICAgIGNoID0gNTI7ICAvKiBVTklJICovICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MjgwMDAwOiAgICBjaCA9IDU2OyAgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTMwMDAwMDogICAgY2ggPSA2MDsgIC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUzMjAwMDA6ICAgIGNoID0gNjQ7ICAvKiBVTklJICovICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1NzQ1MDAwOiAgICBjaCA9IDE0OTsgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTc2NTAwMDogICAgY2ggPSAxNTM7IC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU3ODUwMDA6ICAgIGNoID0gMTU3OyAvKiBVTklJICovICBicmVhazsgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1ODA1MDAwOiAgICBjaCA9IDE2MTsgLyogVU5JSSAqLyAgYnJlYWs7ICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTgyNTAwMDogICAgY2ggPSAxNjU7IC8qIFVOSUkgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU1MDAwMDA6ICAgIGNoID0gMTAwOyAvKiBIaXBlckxBTjIgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU1MjAwMDA6ICAgIGNoID0gMTA0OyAvKiBIaXBlckxBTjIgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU1NDAwMDA6ICAgIGNoID0gMTA4OyAvKiBIaXBlckxBTjIgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU1NjAwMDA6ICAgIGNoID0gMTEyOyAvKiBIaXBlckxBTjIgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU1ODAwMDA6ICAgIGNoID0gMTE2OyAvKiBIaXBlckxBTjIgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU2MDAwMDA6ICAgIGNoID0gMTIwOyAvKiBIaXBlckxBTjIgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU2MjAwMDA6ICAgIGNoID0gMTI0OyAvKiBIaXBlckxBTjIgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU2NDAwMDA6ICAgIGNoID0gMTI4OyAvKiBIaXBlckxBTjIgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU2NjAwMDA6ICAgIGNoID0gMTMyOyAvKiBIaXBlckxBTjIgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU2ODAwMDA6ICAgIGNoID0gMTM2OyAvKiBIaXBlckxBTjIgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDU3MDAwMDA6ICAgIGNoID0gMTQwOyAvKiBIaXBlckxBTjIgKi8gIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUxNzAwMDA6ICAgIGNoID0gMzQ7ICAvKiBKYXBhbiBNTUFDICovICAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUxOTAwMDA6ICAgIGNoID0gMzg7ICAvKiBKYXBhbiBNTUFDICovICAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUyMTAwMDA6ICAgIGNoID0gNDI7ICAvKiBKYXBhbiBNTUFDICovICAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUyMzAwMDA6ICAgIGNoID0gNDY7ICAvKiBKYXBhbiBNTUFDICovICAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDQ5MjAwMDA6ICAgIGNoID0gMTg0OyAvKiBKYXBhbiAqLyAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDQ5NDAwMDA6ICAgIGNoID0gMTg4OyAvKiBKYXBhbiAqLyAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDQ5NjAwMDA6ICAgIGNoID0gMTkyOyAvKiBKYXBhbiAqLyAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDQ5ODAwMDA6ICAgIGNoID0gMTk2OyAvKiBKYXBhbiAqLyAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBjYXNlIDUwNDAwMDA6ICAgIGNoID0gMjA4OyAvKiBKYXBhbiwgbWVhbnMgSjA4ICovICBicmVhazsgICBcCisgICAgICAgICAgICAgICAgICAgIGNhc2UgNTA2MDAwMDogICAgY2ggPSAyMTI7IC8qIEphcGFuLCBtZWFucyBKMTIgKi8gIGJyZWFrOyAgIFwKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA1MDgwMDAwOiAgICBjaCA9IDIxNjsgLyogSmFwYW4sIG1lYW5zIEoxNiAqLyAgYnJlYWs7ICAgXAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgIGNoID0gMTsgICAgIGJyZWFrOyAgICAgXAorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfQorCisvLworLy8gQ29tbW9uIGZyYWdtZW50IGxpc3Qgc3RydWN0dXJlIC0gIElkZW50aWNhbCB0byB0aGUgc2NhdHRlciBnYXRoZXIgZnJhZyBsaXN0IHN0cnVjdHVyZQorLy8KKy8vI2RlZmluZSBSVE1QX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQgICAgICAgICBTQ0FUVEVSX0dBVEhFUl9FTEVNRU5UCisvLyNkZWZpbmUgUFJUTVBfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCAgICAgICAgUFNDQVRURVJfR0FUSEVSX0VMRU1FTlQKKyNkZWZpbmUgTklDX01BWF9QSFlTX0JVRl9DT1VOVCAgICAgICAgICAgICAgOAorCit0eXBlZGVmIHN0cnVjdCBfUlRNUF9TQ0FUVEVSX0dBVEhFUl9FTEVNRU5UIHsKKyAgICBQVk9JRAkJQWRkcmVzczsKKyAgICBVTE9ORwkJTGVuZ3RoOworICAgIFBVTE9ORwkJUmVzZXJ2ZWQ7Cit9IFJUTVBfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCwgKlBSVE1QX1NDQVRURVJfR0FUSEVSX0VMRU1FTlQ7CisKKwordHlwZWRlZiBzdHJ1Y3QgX1JUTVBfU0NBVFRFUl9HQVRIRVJfTElTVCB7CisgICAgVUxPTkcgIE51bWJlck9mRWxlbWVudHM7CisgICAgUFVMT05HIFJlc2VydmVkOworICAgIFJUTVBfU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCBFbGVtZW50c1tOSUNfTUFYX1BIWVNfQlVGX0NPVU5UXTsKK30gUlRNUF9TQ0FUVEVSX0dBVEhFUl9MSVNULCAqUFJUTVBfU0NBVFRFUl9HQVRIRVJfTElTVDsKKworLy8KKy8vICBTb21lIHV0aWxpdHkgbWFjcm9zCisvLworI2lmbmRlZiBtaW4KKyNkZWZpbmUgbWluKF9hLCBfYikgICAgICgoKF9hKSA8IChfYikpID8gKF9hKSA6IChfYikpCisjZW5kaWYKKworI2lmbmRlZiBtYXgKKyNkZWZpbmUgbWF4KF9hLCBfYikgICAgICgoKF9hKSA+IChfYikpID8gKF9hKSA6IChfYikpCisjZW5kaWYKKworI2RlZmluZSBHRVRfTE5BX0dBSU4oX3BBZCkJKChfcEFkLT5MYXRjaFJmUmVncy5DaGFubmVsIDw9IDE0KSA/IChfcEFkLT5CTE5BR2FpbikgOiAoKF9wQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gNjQpID8gKF9wQWQtPkFMTkFHYWluMCkgOiAoKF9wQWQtPkxhdGNoUmZSZWdzLkNoYW5uZWwgPD0gMTI4KSA/IChfcEFkLT5BTE5BR2FpbjEpIDogKF9wQWQtPkFMTkFHYWluMikpKSkKKworI2RlZmluZSBJTkNfQ09VTlRFUjY0KFZhbCkgICAgICAgICAgKFZhbC5RdWFkUGFydCsrKQorCisjZGVmaW5lIElORlJBX09OKF9wKSAgICAgICAgICAgICAgICAoT1BTVEFUVVNfVEVTVF9GTEFHKF9wLCBmT1BfU1RBVFVTX0lORlJBX09OKSkKKyNkZWZpbmUgQURIT0NfT04oX3ApICAgICAgICAgICAgICAgIChPUFNUQVRVU19URVNUX0ZMQUcoX3AsIGZPUF9TVEFUVVNfQURIT0NfT04pKQorI2RlZmluZSBNT05JVE9SX09OKF9wKSAgICAgICAgICAgICAgKCgoX3ApLT5TdGFDZmcuQnNzVHlwZSkgPT0gQlNTX01PTklUT1IpCisjZGVmaW5lIElETEVfT04oX3ApICAgICAgICAgICAgICAgICAoIUlORlJBX09OKF9wKSAmJiAhQURIT0NfT04oX3ApKQorCisvLyBDaGVjayBMRUFQICYgQ0NLTSBmbGFncworI2RlZmluZSBMRUFQX09OKF9wKSAgICAgICAgICAgICAgICAgKCgoX3ApLT5TdGFDZmcuTGVhcEF1dGhNb2RlKSA9PSBDSVNDT19BdXRoTW9kZUxFQVApCisjZGVmaW5lIExFQVBfQ0NLTV9PTihfcCkgICAgICAgICAgICAoKCgoX3ApLT5TdGFDZmcuTGVhcEF1dGhNb2RlKSA9PSBDSVNDT19BdXRoTW9kZUxFQVApICYmICgoX3ApLT5TdGFDZmcuTGVhcEF1dGhJbmZvLkNDS00gPT0gVFJVRSkpCisKKy8vIGlmIG9yZ2luYWwgRXRoZXJuZXQgZnJhbWUgY29udGFpbnMgbm8gTExDL1NOQVAsIHRoZW4gYW4gZXh0cmEgTExDL1NOQVAgZW5jYXAgaXMgcmVxdWlyZWQKKyNkZWZpbmUgRVhUUkFfTExDU05BUF9FTkNBUF9GUk9NX1BLVF9TVEFSVChfcEJ1ZlZBLCBfcEV4dHJhTGxjU25hcEVuY2FwKQkJXAorewkJCQkJCQkJCQkJCQkJCQlcCisJaWYgKCgoKihfcEJ1ZlZBICsgMTIpIDw8IDgpICsgKihfcEJ1ZlZBICsgMTMpKSA+IDE1MDApCQlcCisJewkJCQkJCQkJCQkJCQkJCVwKKwkJX3BFeHRyYUxsY1NuYXBFbmNhcCA9IFNOQVBfODAyXzFIOwkJCQkJCVwKKwkJaWYgKE5kaXNFcXVhbE1lbW9yeShJUFgsIF9wQnVmVkEgKyAxMiwgMikgfHwgCQkJXAorCQkJTmRpc0VxdWFsTWVtb3J5KEFQUExFX1RBTEssIF9wQnVmVkEgKyAxMiwgMikpCQlcCisJCXsJCQkJCQkJCQkJCQkJCVwKKwkJCV9wRXh0cmFMbGNTbmFwRW5jYXAgPSBTTkFQX0JSSURHRV9UVU5ORUw7CQkJXAorCQl9CQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCVwKKwllbHNlCQkJCQkJCQkJCQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCVwKKwkJX3BFeHRyYUxsY1NuYXBFbmNhcCA9IE5VTEw7CQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCVwKK30KKworLy8gTmV3IERlZmluZSBmb3IgbmV3IFR4IFBhdGguCisjZGVmaW5lIEVYVFJBX0xMQ1NOQVBfRU5DQVBfRlJPTV9QS1RfT0ZGU0VUKF9wQnVmVkEsIF9wRXh0cmFMbGNTbmFwRW5jYXApCVwKK3sJCQkJCQkJCQkJCQkJCQkJXAorCWlmICgoKCooX3BCdWZWQSkgPDwgOCkgKyAqKF9wQnVmVkEgKyAxKSkgPiAxNTAwKQkJCVwKKwl7CQkJCQkJCQkJCQkJCQkJXAorCQlfcEV4dHJhTGxjU25hcEVuY2FwID0gU05BUF84MDJfMUg7CQkJCQkJXAorCQlpZiAoTmRpc0VxdWFsTWVtb3J5KElQWCwgX3BCdWZWQSwgMikgfHwgCQkJCVwKKwkJCU5kaXNFcXVhbE1lbW9yeShBUFBMRV9UQUxLLCBfcEJ1ZlZBLCAyKSkJCQlcCisJCXsJCQkJCQkJCQkJCQkJCVwKKwkJCV9wRXh0cmFMbGNTbmFwRW5jYXAgPSBTTkFQX0JSSURHRV9UVU5ORUw7CQkJXAorCQl9CQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCVwKKwllbHNlCQkJCQkJCQkJCQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCVwKKwkJX3BFeHRyYUxsY1NuYXBFbmNhcCA9IE5VTEw7CQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCVwKK30KKworCisjZGVmaW5lIE1BS0VfODAyXzNfSEVBREVSKF9wLCBfcE1hYzEsIF9wTWFjMiwgX3BUeXBlKSAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTmRpc01vdmVNZW1vcnkoX3AsIF9wTWFjMSwgTUFDX0FERFJfTEVOKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTmRpc01vdmVNZW1vcnkoKF9wICsgTUFDX0FERFJfTEVOKSwgX3BNYWMyLCBNQUNfQUREUl9MRU4pOyAgICAgICAgICBcCisgICAgTmRpc01vdmVNZW1vcnkoKF9wICsgTUFDX0FERFJfTEVOICogMiksIF9wVHlwZSwgTEVOR1RIXzgwMl8zX1RZUEUpOyBcCit9CisKKy8vIGlmIHBEYXRhIGhhcyBubyBMTEMvU05BUCAobmVpdGhlciBSRkMxMDQyIG5vciBCcmlkZ2UgdHVubmVsKSwga2VlcCBpdCB0aGF0IHdheS4KKy8vIGVsc2UgaWYgdGhlIHJlY2VpdmVkIGZyYW1lIGlzIExMQy9TTkFQLWVuY2FwZWQgSVBYIG9yIEFQUExFVEFMSywgcHJlc2VydmUgdGhlIExMQy9TTkFQIGZpZWxkCisvLyBlbHNlIHJlbW92ZSB0aGUgTExDL1NOQVAgZmllbGQgZnJvbSB0aGUgcmVzdWx0IEV0aGVybmV0IGZyYW1lCisvLyBQYXRjaCBmb3IgV0hRTCBvbmx5LCB3aGljaCBkaWQgbm90IHR1cm4gb24gTmV0YmlvcyBidXQgdXNlIElQWCB3aXRoaW4gaXRzIHBheWxvYWQKKy8vIE5vdGU6CisvLyAgICAgX3BEYXRhICYgX0RhdGFTaXplIG1heSBiZSBhbHRlcmVkIChyZW1vdmUgOC1ieXRlIExMQy9TTkFQKSBieSB0aGlzIE1BQ1JPCisvLyAgICAgX3BSZW1vdmVkTExDU05BUDogcG9pbnRlciB0byByZW1vdmVkIExMQy9TTkFQOyBOVUxMIGlzIG5vdCByZW1vdmVkCisjZGVmaW5lIENPTlZFUlRfVE9fODAyXzMoX3A4MDIzaGRyLCBfcERBLCBfcFNBLCBfcERhdGEsIF9EYXRhU2l6ZSwgX3BSZW1vdmVkTExDU05BUCkgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY2hhciBMTENfTGVuWzJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX3BSZW1vdmVkTExDU05BUCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShTTkFQXzgwMl8xSCwgX3BEYXRhLCA2KSAgfHwgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE5kaXNFcXVhbE1lbW9yeShTTkFQX0JSSURHRV9UVU5ORUwsIF9wRGF0YSwgNikpICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFBVQ0hBUiBwUHJvdG8gPSBfcERhdGEgKyA2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICgoTmRpc0VxdWFsTWVtb3J5KElQWCwgcFByb3RvLCAyKSB8fCBOZGlzRXF1YWxNZW1vcnkoQVBQTEVfVEFMSywgcFByb3RvLCAyKSkgJiYgIFwKKyAgICAgICAgICAgIE5kaXNFcXVhbE1lbW9yeShTTkFQXzgwMl8xSCwgX3BEYXRhLCA2KSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIExMQ19MZW5bMF0gPSAoVUNIQVIpKF9EYXRhU2l6ZSAvIDI1Nik7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIExMQ19MZW5bMV0gPSAoVUNIQVIpKF9EYXRhU2l6ZSAlIDI1Nik7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1BS0VfODAyXzNfSEVBREVSKF9wODAyM2hkciwgX3BEQSwgX3BTQSwgTExDX0xlbik7ICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIE1BS0VfODAyXzNfSEVBREVSKF9wODAyM2hkciwgX3BEQSwgX3BTQSwgcFByb3RvKTsgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9wUmVtb3ZlZExMQ1NOQVAgPSBfcERhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9EYXRhU2l6ZSAtPSBMRU5HVEhfODAyXzFfSDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9wRGF0YSArPSBMRU5HVEhfODAyXzFfSDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTExDX0xlblswXSA9IChVQ0hBUikoX0RhdGFTaXplIC8gMjU2KTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTExDX0xlblsxXSA9IChVQ0hBUikoX0RhdGFTaXplICUgMjU2KTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTUFLRV84MDJfM19IRUFERVIoX3A4MDIzaGRyLCBfcERBLCBfcFNBLCBMTENfTGVuKTsgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBTV0lUQ0hfQUIoIF9wQUEsIF9wQkIpICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUFZPSUQgcENDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcENDID0gX3BCQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9wQkIgPSBfcEFBOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX3BBQSA9IHBDQzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisvLyBFbnF1ZXVlIHRoaXMgZnJhbWUgdG8gTUxNRSBlbmdpbmUKKy8vIFdlIG5lZWQgdG8gZW5xdWV1ZSB0aGUgd2hvbGUgZnJhbWUgYmVjYXVzZSBNTE1FIG5lZWQgdG8gcGFzcyBkYXRhIHR5cGUKKy8vIGluZm9ybWF0aW9uIGZyb20gODAyLjExIGhlYWRlcgorI2lmZGVmIFJUMjg3MAorI2RlZmluZSBSRVBPUlRfTUdNVF9GUkFNRV9UT19NTE1FKF9wQWQsIFdjaWQsIF9wRnJhbWUsIF9GcmFtZVNpemUsIF9Sc3NpMCwgX1Jzc2kxLCBfUnNzaTIsIF9QbGNwU2lnbmFsKSAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVSU5UMzIgSGlnaDMyVFNGPTAsIExvdzMyVFNGPTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNbG1lRW5xdWV1ZUZvclJlY3YoX3BBZCwgV2NpZCwgSGlnaDMyVFNGLCBMb3czMlRTRiwgKFVDSEFSKV9Sc3NpMCwgKFVDSEFSKV9Sc3NpMSwoVUNIQVIpX1Jzc2kyLF9GcmFtZVNpemUsIF9wRnJhbWUsIChVQ0hBUilfUGxjcFNpZ25hbCk7ICAgXAorfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisjaWZkZWYgUlQzMHh4CisvL05lZWQgdG8gY29sbGVjdCBlYWNoIGFudCdzIHJzc2kgY29uY3VycmVudGx5CisvL3Jzc2kxIGlzIHJlcG9ydCB0byBwYWlyMiBBbnQgYW5kIHJzczIgaXMgcmVwcm90IHRvIHBhaXIxIEFudCB3aGVuIDQgQW50CisjZGVmaW5lIENPTExFQ1RfUlhfQU5URU5OQV9BVkVSQUdFX1JTU0koX3BBZCwgX3Jzc2kxLCBfcnNzaTIpCQkJCQlcCit7CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisJU0hPUlQJQXZnUnNzaTsJCQkJCQkJCQkJCQkJCQlcCisJVUNIQVIJVXNlZEFudDsJCQkJCQkJCQkJCQkJCQlcCisJaWYgKF9wQWQtPlJ4QW50LkV2YWx1YXRlUGVyaW9kID09IDApCQkJCQkJCQkJXAorCXsJCQkJCQkJCQkJCQkJCQkJCQlcCisJCVVzZWRBbnQgPSBfcEFkLT5SeEFudC5QYWlyMVByaW1hcnlSeEFudDsJCQkJCQkJXAorCQlBdmdSc3NpID0gX3BBZC0+UnhBbnQuUGFpcjFBdmdSc3NpW1VzZWRBbnRdOwkJCQkJCVwKKwkJaWYgKEF2Z1Jzc2kgPCAwKQkJCQkJCQkJCQkJCQlcCisJCQlBdmdSc3NpID0gQXZnUnNzaSAtIChBdmdSc3NpID4+IDMpICsgX3Jzc2kxOwkJCQkJXAorCQllbHNlCQkJCQkJCQkJCQkJCQkJCVwKKwkJCUF2Z1Jzc2kgPSBfcnNzaTEgPDwgMzsJCQkJCQkJCQkJCVwKKwkJX3BBZC0+UnhBbnQuUGFpcjFBdmdSc3NpW1VzZWRBbnRdID0gQXZnUnNzaTsJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJCVwKKwllbHNlCQkJCQkJCQkJCQkJCQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJVXNlZEFudCA9IF9wQWQtPlJ4QW50LlBhaXIxU2Vjb25kYXJ5UnhBbnQ7CQkJCQkJCVwKKwkJQXZnUnNzaSA9IF9wQWQtPlJ4QW50LlBhaXIxQXZnUnNzaVtVc2VkQW50XTsJCQkJCQlcCisJCWlmICgoQXZnUnNzaSA8IDApICYmIChfcEFkLT5SeEFudC5GaXJzdFBrdEFycml2ZWRXaGVuRXZhbHVhdGUpKQkJXAorCQkJQXZnUnNzaSA9IEF2Z1Jzc2kgLSAoQXZnUnNzaSA+PiAzKSArIF9yc3NpMTsJCQkJCVwKKwkJZWxzZQkJCQkJCQkJCQkJCQkJCQlcCisJCXsJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCV9wQWQtPlJ4QW50LkZpcnN0UGt0QXJyaXZlZFdoZW5FdmFsdWF0ZSA9IFRSVUU7CQkJCQlcCisJCQlBdmdSc3NpID0gX3Jzc2kxIDw8IDM7CQkJCQkJCQkJCQlcCisJCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwkJX3BBZC0+UnhBbnQuUGFpcjFBdmdSc3NpW1VzZWRBbnRdID0gQXZnUnNzaTsJCQkJCQlcCisJCV9wQWQtPlJ4QW50LlJjdlBrdE51bVdoZW5FdmFsdWF0ZSsrOwkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCQlcCit9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKworI2RlZmluZSBORElTX1FVRVJZX0JVRkZFUihfTmRpc0J1ZiwgX3BwVkEsIF9wQnVmTGVuKSAgICAgICAgICAgICAgICAgICAgXAorICAgIE5kaXNRdWVyeUJ1ZmZlcihfTmRpc0J1ZiwgX3BwVkEsIF9wQnVmTGVuKQorCisjZGVmaW5lIE1BQ19BRERSX0VRVUFMKHBBZGRyMSxwQWRkcjIpICAgICAgICAgICBSVE1QRXF1YWxNZW1vcnkoKFBWT0lEKShwQWRkcjEpLCAoUFZPSUQpKHBBZGRyMiksIE1BQ19BRERSX0xFTikKKyNkZWZpbmUgU1NJRF9FUVVBTChzc2lkMSwgbGVuMSwgc3NpZDIsIGxlbjIpICAgICgobGVuMT09bGVuMikgJiYgKFJUTVBFcXVhbE1lbW9yeShzc2lkMSwgc3NpZDIsIGxlbjEpKSkKKworLy8KKy8vIENoZWNrIGlmIGl0IGlzIEphcGFuIFc1MyhjaDUyLDU2LDYwLDY0KSBjaGFubmVsLgorLy8KKyNkZWZpbmUgSmFwYW5DaGFubmVsQ2hlY2soY2hhbm5lbCkgICgoY2hhbm5lbCA9PSA1MikgfHwgKGNoYW5uZWwgPT0gNTYpIHx8IChjaGFubmVsID09IDYwKSB8fCAoY2hhbm5lbCA9PSA2NCkpCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNkZWZpbmUgU1RBX1BPUlRfU0VDVVJFRChfcEFkKSBcCit7IFwKKwlfcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsgXAorCU5kaXNBY3F1aXJlU3BpbkxvY2soJl9wQWQtPk1hY1RhYkxvY2spOyBcCisJX3BBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUG9ydFNlY3VyZWQgPSBfcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQ7IFwKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZfcEFkLT5NYWNUYWJMb2NrKTsgXAorfQorI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisKKy8vCisvLyBSZWdpc3RlciBzZXQgcGFpciBmb3IgaW5pdGlhbHphdGlvbiByZWdpc3RlciBzZXQgZGVmaW5pdGlvbgorLy8KK3R5cGVkZWYgc3RydWN0ICBfUlRNUF9SRUdfUEFJUgoreworCVVMT05HICAgUmVnaXN0ZXI7CisJVUxPTkcgICBWYWx1ZTsKK30gUlRNUF9SRUdfUEFJUiwgKlBSVE1QX1JFR19QQUlSOworCit0eXBlZGVmIHN0cnVjdCAgX1JFR19QQUlSCit7CisJVUNIQVIgICBSZWdpc3RlcjsKKwlVQ0hBUiAgIFZhbHVlOworfSBSRUdfUEFJUiwgKlBSRUdfUEFJUjsKKworLy8KKy8vIFJlZ2lzdGVyIHNldCBwYWlyIGZvciBpbml0aWFsemF0aW9uIHJlZ2lzdGVyIHNldCBkZWZpbml0aW9uCisvLwordHlwZWRlZiBzdHJ1Y3QgIF9SVE1QX1JGX1JFR1MKK3sKKwlVQ0hBUiAgIENoYW5uZWw7CisJVUxPTkcgICBSMTsKKwlVTE9ORyAgIFIyOworCVVMT05HICAgUjM7CisJVUxPTkcgICBSNDsKK30gUlRNUF9SRl9SRUdTLCAqUFJUTVBfUkZfUkVHUzsKKwordHlwZWRlZiBzdHJ1Y3QgX0ZSRVFVRU5DWV9JVEVNIHsKKwlVQ0hBUglDaGFubmVsOworCVVDSEFSCU47CisJVUNIQVIJUjsKKwlVQ0hBUglLOworfSBGUkVRVUVOQ1lfSVRFTSwgKlBGUkVRVUVOQ1lfSVRFTTsKKworLy8KKy8vICBEYXRhIGJ1ZmZlciBmb3IgRE1BIG9wZXJhdGlvbiwgdGhlIGJ1ZmZlciBtdXN0IGJlIGNvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5CisvLyAgQm90aCBETUEgdG8gLyBmcm9tIENQVSB1c2UgdGhlIHNhbWUgc3RydWN0dXJlLgorLy8KK3R5cGVkZWYgc3RydWN0ICBfUlRNUF9ETUFCVUYKK3sKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBBbGxvY1NpemU7CisJUFZPSUQgICAgICAgICAgICAgICAgICAgQWxsb2NWYTsgICAgICAgICAgICAvLyBUeEJ1ZiB2aXJ0dWFsIGFkZHJlc3MKKwlORElTX1BIWVNJQ0FMX0FERFJFU1MgICBBbGxvY1BhOyAgICAgICAgICAgIC8vIFR4QnVmIHBoeXNpY2FsIGFkZHJlc3MKK30gUlRNUF9ETUFCVUYsICpQUlRNUF9ETUFCVUY7CisKKwordHlwZWRlZgl1bmlvbglfSEVBREVSXzgwMl8xMV9TRVF7CisjaWZkZWYgUlRfQklHX0VORElBTgorICAgIHN0cnVjdCB7CisgICAJVVNIT1JUCQkJU2VxdWVuY2U6MTI7CisJVVNIT1JUCQkJRnJhZzo0OworICAgIH0gICBmaWVsZDsKKyNlbHNlCisgICAgc3RydWN0IHsKKwlVU0hPUlQJCQlGcmFnOjQ7CisJVVNIT1JUCQkJU2VxdWVuY2U6MTI7CisgICAgfSAgIGZpZWxkOworI2VuZGlmCisgICAgVVNIT1JUICAgICAgICAgICB2YWx1ZTsKK30JSEVBREVSXzgwMl8xMV9TRVEsICpQSEVBREVSXzgwMl8xMV9TRVE7CisKKy8vCisvLyAgRGF0YSBidWZmZXIgZm9yIERNQSBvcGVyYXRpb24sIHRoZSBidWZmZXIgbXVzdCBiZSBjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeQorLy8gIEJvdGggRE1BIHRvIC8gZnJvbSBDUFUgdXNlIHRoZSBzYW1lIHN0cnVjdHVyZS4KKy8vCit0eXBlZGVmIHN0cnVjdCAgX1JUTVBfUkVPUkRFUkJVRgoreworCUJPT0xFQU4JCQlJc0Z1bGw7CisJUFZPSUQgICAgICAgICAgICAgICAgICAgQWxsb2NWYTsgICAgICAgICAgICAvLyBUeEJ1ZiB2aXJ0dWFsIGFkZHJlc3MKKwlVQ0hBUgkJCUhlYWRlcjgwMl8zWzE0XTsKKwlIRUFERVJfODAyXzExX1NFUQkJCVNlcXVlbmNlOwkvL3N1cHBvcnQgY29tcHJlc3NlZCBiaXRtYXAgQkEsIHNvIG5vIGNvbnNpZGVyIGZyYWdtZW50IGluIEJBCisJVUNIQVIgCQlEYXRhT2Zmc2V0OworCVVTSE9SVCAJCURhdGFzaXplOworCVVMT05HICAgICAgICAgICAgICAgICAgIEFsbG9jU2l6ZTsKKyNpZmRlZiBSVDI4NzAKKwlQVUNIQVIJCQkJCUFsbG9jUGE7CisjZW5kaWYgLy8gUlQyODcwIC8vCit9ICAgUlRNUF9SRU9SREVSQlVGLCAqUFJUTVBfUkVPUkRFUkJVRjsKKworLy8KKy8vIENvbnRyb2wgYmxvY2sgKERlc2NyaXB0b3IpIGZvciBhbGwgcmluZyBkZXNjcmlwdG9yIERNQSBvcGVyYXRpb24sIGJ1ZmZlciBtdXN0IGJlCisvLyBjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeS4gTkRJU19QQUNLRVQgc3RvcmVkIHRoZSBiaW5kaW5nIFJ4IHBhY2tldCBkZXNjcmlwdG9yCisvLyB3aGljaCB3b24ndCBiZSByZWxlYXNlZCwgZHJpdmVyIGhhcyB0byB3YWl0IHVudGlsIHVwcGVyIGxheWVyIHJldHVybiB0aGUgcGFja2V0CisvLyBiZWZvcmUgZ2l2ZWluZyB1cCB0aGlzIHJ4IHJpbmcgZGVzY3JpcHRvciB0byBBU0lDLiBORElTX0JVRkZFUiBpcyBhc3NvY2FpdGVkIHBhaXIKKy8vIHRvIGRlc2NyaWJlIHRoZSBwYWNrZXQgYnVmZmVyLiBGb3IgVHgsIE5ESVNfUEFDS0VUIHN0b3JlZCB0aGUgdHggcGFja2V0IGRlc2NyaXB0b3IKKy8vIHdoaWNoIGRyaXZlciBzaG91bGQgQUNLIHVwcGVyIGxheWVyIHdoZW4gdGhlIHR4IGlzIHBoeXNpY2FsbHkgZG9uZSBvciBmYWlsZWQuCisvLwordHlwZWRlZiBzdHJ1Y3QgX1JUTVBfRE1BQ0IKK3sKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBBbGxvY1NpemU7ICAgICAgICAgIC8vIENvbnRyb2wgYmxvY2sgc2l6ZQorCVBWT0lEICAgICAgICAgICAgICAgICAgIEFsbG9jVmE7ICAgICAgICAgICAgLy8gQ29udHJvbCBibG9jayB2aXJ0dWFsIGFkZHJlc3MKKwlORElTX1BIWVNJQ0FMX0FERFJFU1MgICBBbGxvY1BhOyAgICAgICAgICAgIC8vIENvbnRyb2wgYmxvY2sgcGh5c2ljYWwgYWRkcmVzcworCVBORElTX1BBQ0tFVCBwTmRpc1BhY2tldDsKKwlQTkRJU19QQUNLRVQgcE5leHROZGlzUGFja2V0OworCisJUlRNUF9ETUFCVUYgICAgICAgICAgICAgRG1hQnVmOyAgICAgICAgICAgICAvLyBBc3NvY2lhdGVkIERNQSBidWZmZXIgc3RydWN0dXJlCit9IFJUTVBfRE1BQ0IsICpQUlRNUF9ETUFDQjsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUTVBfVFhfQlVGCit7CisJUFFVRVVFX0VOVFJZICAgIE5leHQ7CisJVUNIQVIgICAgICAgICAgIEluZGV4OworCVVMT05HICAgICAgICAgICAgICAgICAgIEFsbG9jU2l6ZTsgICAgICAgICAgLy8gQ29udHJvbCBibG9jayBzaXplCisJUFZPSUQgICAgICAgICAgICAgICAgICAgQWxsb2NWYTsgICAgICAgICAgICAvLyBDb250cm9sIGJsb2NrIHZpcnR1YWwgYWRkcmVzcworCU5ESVNfUEhZU0lDQUxfQUREUkVTUyAgIEFsbG9jUGE7ICAgICAgICAgICAgLy8gQ29udHJvbCBibG9jayBwaHlzaWNhbCBhZGRyZXNzCit9IFJUTVBfVFhCVUYsICpQUlRNUF9UWEJVRjsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUTVBfUlhfQlVGCit7CisJQk9PTEVBTiAgICAgICAgICAgSW5Vc2U7CisJVUxPTkcgICAgICAgICAgIAlCeUJhUmVjSW5kZXg7CisJUlRNUF9SRU9SREVSQlVGCU1BUF9SWEJ1ZltNQVhfUlhfUkVPUkRFUkJVRl07Cit9IFJUTVBfUlhCVUYsICpQUlRNUF9SWEJVRjsKK3R5cGVkZWYgc3RydWN0IF9SVE1QX1RYX1JJTkcKK3sKKwlSVE1QX0RNQUNCICBDZWxsW1RYX1JJTkdfU0laRV07CisJVUlOVDMyCQlUeENwdUlkeDsKKwlVSU5UMzIJCVR4RG1hSWR4OworCVVJTlQzMgkJVHhTd0ZyZWVJZHg7IAkvLyBzb2Z0d2FyZSBuZXh0IGZyZWUgdHggaW5kZXgKK30gUlRNUF9UWF9SSU5HLCAqUFJUTVBfVFhfUklORzsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUTVBfUlhfUklORworeworCVJUTVBfRE1BQ0IgIENlbGxbUlhfUklOR19TSVpFXTsKKwlVSU5UMzIJCVJ4Q3B1SWR4OworCVVJTlQzMgkJUnhEbWFJZHg7CisJSU5UMzIJCVJ4U3dSZWFkSWR4OyAJLy8gc29mdHdhcmUgbmV4dCByZWFkIGluZGV4Cit9IFJUTVBfUlhfUklORywgKlBSVE1QX1JYX1JJTkc7CisKK3R5cGVkZWYgc3RydWN0IF9SVE1QX01HTVRfUklORworeworCVJUTVBfRE1BQ0IgIENlbGxbTUdNVF9SSU5HX1NJWkVdOworCVVJTlQzMgkJVHhDcHVJZHg7CisJVUlOVDMyCQlUeERtYUlkeDsKKwlVSU5UMzIJCVR4U3dGcmVlSWR4OyAvLyBzb2Z0d2FyZSBuZXh0IGZyZWUgdHggaW5kZXgKK30gUlRNUF9NR01UX1JJTkcsICpQUlRNUF9NR01UX1JJTkc7CisKKy8vCisvLyAgU3RhdGlzdGljIGNvdW50ZXIgc3RydWN0dXJlCisvLwordHlwZWRlZiBzdHJ1Y3QgX0NPVU5URVJfODAyXzMKK3sKKwkvLyBHZW5lcmFsIFN0YXRzCisJVUxPTkcgICAgICAgR29vZFRyYW5zbWl0czsKKwlVTE9ORyAgICAgICBHb29kUmVjZWl2ZXM7CisJVUxPTkcgICAgICAgVHhFcnJvcnM7CisJVUxPTkcgICAgICAgUnhFcnJvcnM7CisJVUxPTkcgICAgICAgUnhOb0J1ZmZlcjsKKworCS8vIEV0aGVybmV0IFN0YXRzCisJVUxPTkcgICAgICAgUmN2QWxpZ25tZW50RXJyb3JzOworCVVMT05HICAgICAgIE9uZUNvbGxpc2lvbjsKKwlVTE9ORyAgICAgICBNb3JlQ29sbGlzaW9uczsKKworfSBDT1VOVEVSXzgwMl8zLCAqUENPVU5URVJfODAyXzM7CisKK3R5cGVkZWYgc3RydWN0IF9DT1VOVEVSXzgwMl8xMSB7CisJVUxPTkcgICAgICAgICAgIExlbmd0aDsKKwlMQVJHRV9JTlRFR0VSICAgTGFzdFRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50OworCUxBUkdFX0lOVEVHRVIgICBNdWx0aWNhc3RUcmFuc21pdHRlZEZyYW1lQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgIEZhaWxlZENvdW50OworCUxBUkdFX0lOVEVHRVIgICBSZXRyeUNvdW50OworCUxBUkdFX0lOVEVHRVIgICBNdWx0aXBsZVJldHJ5Q291bnQ7CisJTEFSR0VfSU5URUdFUiAgIFJUU1N1Y2Nlc3NDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgUlRTRmFpbHVyZUNvdW50OworCUxBUkdFX0lOVEVHRVIgICBBQ0tGYWlsdXJlQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgIEZyYW1lRHVwbGljYXRlQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgIFJlY2VpdmVkRnJhZ21lbnRDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50OworCUxBUkdFX0lOVEVHRVIgICBGQ1NFcnJvckNvdW50OworfSBDT1VOVEVSXzgwMl8xMSwgKlBDT1VOVEVSXzgwMl8xMTsKKwordHlwZWRlZiBzdHJ1Y3QgX0NPVU5URVJfUkFMSU5LIHsKKwlVTE9ORyAgICAgICAgICAgVHJhbnNtaXR0ZWRCeXRlQ291bnQ7ICAgLy8gYm90aCBzdWNjZXNzZnVsIGFuZCBmYWlsdXJlLCB1c2VkIHRvIGNhbGN1bGF0ZSBUWCB0aHJvdWdocHV0CisJVUxPTkcgICAgICAgICAgIFJlY2VpdmVkQnl0ZUNvdW50OyAgICAgIC8vIGJvdGggQ1JDIG9rYXkgYW5kIENSQyBlcnJvciwgdXNlZCB0byBjYWxjdWxhdGUgUlggdGhyb3VnaHB1dAorCVVMT05HICAgICAgICAgICBCZWVuRGlzYXNzb2NpYXRlZENvdW50OworCVVMT05HICAgICAgICAgICBCYWRDUUlBdXRvUmVjb3ZlcnlDb3VudDsKKwlVTE9ORyAgICAgICAgICAgUG9vckNRSVJvYW1pbmdDb3VudDsKKwlVTE9ORyAgICAgICAgICAgTWdtdFJpbmdGdWxsQ291bnQ7CisJVUxPTkcgICAgICAgICAgIFJ4Q291bnRTaW5jZUxhc3ROVUxMOworCVVMT05HICAgICAgICAgICBSeENvdW50OworCVVMT05HICAgICAgICAgICBSeFJpbmdFcnJDb3VudDsKKwlVTE9ORyAgICAgICAgICAgS2lja1R4Q291bnQ7CisJVUxPTkcgICAgICAgICAgIFR4UmluZ0VyckNvdW50OworCUxBUkdFX0lOVEVHRVIgICBSZWFsRmNzRXJyQ291bnQ7CisJVUxPTkcgICAgICAgICAgIFBlbmRpbmdOZGlzUGFja2V0Q291bnQ7CisKKwlVTE9ORyAgICAgICAgICAgT25lU2VjT3NUeENvdW50W05VTV9PRl9UWF9SSU5HXTsKKwlVTE9ORyAgICAgICAgICAgT25lU2VjRG1hRG9uZUNvdW50W05VTV9PRl9UWF9SSU5HXTsKKwlVSU5UMzIgICAgICAgICAgT25lU2VjVHhEb25lQ291bnQ7CisJVUxPTkcgICAgICAgICAgIE9uZVNlY1J4Q291bnQ7CisJVUlOVDMyICAgICAgICAgIE9uZVNlY1R4QWdncmVnYXRpb25Db3VudDsKKwlVSU5UMzIgICAgICAgICAgT25lU2VjUnhBZ2dyZWdhdGlvbkNvdW50OworCisJVUlOVDMyICAgCQlPbmVTZWNGcmFtZUR1cGxpY2F0ZUNvdW50OworCisjaWZkZWYgUlQyODcwCisJVUxPTkcgICAgICAgICAgIE9uZVNlY1RyYW5zbWl0dGVkQnl0ZUNvdW50OyAgIC8vIGJvdGggc3VjY2Vzc2Z1bCBhbmQgZmFpbHVyZSwgdXNlZCB0byBjYWxjdWxhdGUgVFggdGhyb3VnaHB1dAorI2VuZGlmIC8vIFJUMjg3MCAvLworCisJVUlOVDMyICAgICAgICAgIE9uZVNlY1R4Tm9SZXRyeU9rQ291bnQ7CisJVUlOVDMyICAgICAgICAgIE9uZVNlY1R4UmV0cnlPa0NvdW50OworCVVJTlQzMiAgICAgICAgICBPbmVTZWNUeEZhaWxDb3VudDsKKwlVSU5UMzIgICAgICAgICAgT25lU2VjRmFsc2VDQ0FDbnQ7ICAgICAgLy8gQ0NBIGVycm9yIGNvdW50LCBmb3IgZGVidWcgcHVycG9zZSwgbWlnaHQgbW92ZSB0byBnbG9iYWwgY291bnRlcgorCVVJTlQzMiAgICAgICAgICBPbmVTZWNSeE9rQ250OyAgICAgICAgICAvLyBSWCB3aXRob3V0IGVycm9yCisJVUlOVDMyICAgICAgICAgIE9uZVNlY1J4T2tEYXRhQ250OyAgICAgIC8vIHVuaWNhc3QtdG8tbWUgREFUQSBmcmFtZSBjb3VudAorCVVJTlQzMiAgICAgICAgICBPbmVTZWNSeEZjc0VyckNudDsgICAgICAvLyBDUkMgZXJyb3IKKwlVSU5UMzIgICAgICAgICAgT25lU2VjQmVhY29uU2VudENudDsKKwlVSU5UMzIgICAgICAgICAgTGFzdE9uZVNlY1RvdGFsVHhDb3VudDsgLy8gT25lU2VjVHhOb1JldHJ5T2tDb3VudCArIE9uZVNlY1R4UmV0cnlPa0NvdW50ICsgT25lU2VjVHhGYWlsQ291bnQKKwlVSU5UMzIgICAgICAgICAgTGFzdE9uZVNlY1J4T2tEYXRhQ250OyAgLy8gT25lU2VjUnhPa0RhdGFDbnQKKwlVTE9ORwkJRHVwbGljYXRlUmN2OworCVVMT05HCQlUeEFnZ0NvdW50OworCVVMT05HCQlUeE5vbkFnZ0NvdW50OworCVVMT05HCQlUeEFnZzFNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnMk1QRFVDb3VudDsKKwlVTE9ORwkJVHhBZ2czTVBEVUNvdW50OworCVVMT05HCQlUeEFnZzRNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnNU1QRFVDb3VudDsKKwlVTE9ORwkJVHhBZ2c2TVBEVUNvdW50OworCVVMT05HCQlUeEFnZzdNUERVQ291bnQ7CisJVUxPTkcJCVR4QWdnOE1QRFVDb3VudDsKKwlVTE9ORwkJVHhBZ2c5TVBEVUNvdW50OworCVVMT05HCQlUeEFnZzEwTVBEVUNvdW50OworCVVMT05HCQlUeEFnZzExTVBEVUNvdW50OworCVVMT05HCQlUeEFnZzEyTVBEVUNvdW50OworCVVMT05HCQlUeEFnZzEzTVBEVUNvdW50OworCVVMT05HCQlUeEFnZzE0TVBEVUNvdW50OworCVVMT05HCQlUeEFnZzE1TVBEVUNvdW50OworCVVMT05HCQlUeEFnZzE2TVBEVUNvdW50OworCisJTEFSR0VfSU5URUdFUiAgICAgICBUcmFuc21pdHRlZE9jdGV0c0luQU1TRFU7CisJTEFSR0VfSU5URUdFUiAgICAgICBUcmFuc21pdHRlZEFNU0RVQ291bnQ7CisJTEFSR0VfSU5URUdFUiAgICAgICBSZWNlaXZlZE9jdGVzSW5BTVNEVUNvdW50OworCUxBUkdFX0lOVEVHRVIgICAgICAgUmVjZWl2ZWRBTVNEVUNvdW50OworCUxBUkdFX0lOVEVHRVIgICAgICAgVHJhbnNtaXR0ZWRBTVBEVUNvdW50OworCUxBUkdFX0lOVEVHRVIgICAgICAgVHJhbnNtaXR0ZWRNUERVc0luQU1QRFVDb3VudDsKKwlMQVJHRV9JTlRFR0VSICAgICAgIFRyYW5zbWl0dGVkT2N0ZXRzSW5BTVBEVUNvdW50OworCUxBUkdFX0lOVEVHRVIgICAgICAgTVBEVUluUmVjZWl2ZWRBTVBEVUNvdW50OworfSBDT1VOVEVSX1JBTElOSywgKlBDT1VOVEVSX1JBTElOSzsKKwordHlwZWRlZiBzdHJ1Y3QgX1BJRF9DT1VOVEVSIHsKKwlVTE9ORyAgICAgICAgICAgVHhBY2tSZXF1aXJlZENvdW50OyAgICAgIC8vIENSQyBlcnJvcgorCVVMT05HICAgICAgICAgICBUeEFnZ3JlQ291bnQ7CisJVUxPTkcgICAgICAgICAgIFR4U3VjY2Vzc0NvdW50OyAvLyBPbmVTZWNUeE5vUmV0cnlPa0NvdW50ICsgT25lU2VjVHhSZXRyeU9rQ291bnQgKyBPbmVTZWNUeEZhaWxDb3VudAorCVVMT05HCQlMYXN0U3VjY2Vzc1JhdGU7Cit9IFBJRF9DT1VOVEVSLCAqUFBJRF9DT1VOVEVSOworCit0eXBlZGVmIHN0cnVjdCBfQ09VTlRFUl9EUlMgeworCS8vIHRvIHJlY29yZCB0aGUgZWFjaCBUWCByYXRlJ3MgcXVhbGl0eS4gMCBpcyBiZXN0LCB0aGUgYmlnZ2VyIHRoZSB3b3JzZS4KKwlVU0hPUlQgICAgICAgICAgVHhRdWFsaXR5W01BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIXTsKKwlVQ0hBUiAgICAgICAgICAgUEVSW01BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENIXTsKKwlVQ0hBUiAgICAgICAgICAgVHhSYXRlVXBQZW5hbHR5OyAgICAgIC8vIGV4dHJhICMgb2Ygc2Vjb25kIHBlbmFsdHkgZHVlIHRvIGxhc3QgdW5zdGFibGUgY29uZGl0aW9uCisJVUxPTkcgICAgICAgICAgIEN1cnJUeFJhdGVTdGFibGVUaW1lOyAvLyAjIG9mIHNlY29uZCBpbiBjdXJyZW50IFRYIHJhdGUKKwlCT09MRUFOICAgICAgICAgZk5vaXN5RW52aXJvbm1lbnQ7CisJQk9PTEVBTiAgICAgICAgIGZMYXN0U2VjQWNjb3JkaW5nUlNTSTsKKwlVQ0hBUiAgICAgICAgICAgTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbjsgLy8gMDogbm8gY2hhbmdlLCAxOnJhdGUgVVAsIDI6cmF0ZSBkb3duCisJVUNIQVIJCQlMYXN0VGltZVR4UmF0ZUNoYW5nZUFjdGlvbjsgLy9LZWVwIGxhc3QgdGltZSB2YWx1ZSBvZiBMYXN0U2VjVHhSYXRlQ2hhbmdlQWN0aW9uCisJVUxPTkcJCQlMYXN0VHhPa0NvdW50OworfSBDT1VOVEVSX0RSUywgKlBDT1VOVEVSX0RSUzsKKworLy8KKy8vICBBcmNmb3VyIFN0cnVjdHVyZSBBZGRlZCBieSBQYXVsV3UKKy8vCit0eXBlZGVmIHN0cnVjdCAgX0FSQ0ZPVVIKK3sKKwlVSU5UICAgICAgICAgICAgWDsKKwlVSU5UICAgICAgICAgICAgWTsKKwlVQ0hBUiAgICAgICAgICAgU1RBVEVbMjU2XTsKK30gQVJDRk9VUkNPTlRFWFQsICpQQVJDRk9VUkNPTlRFWFQ7CisKKy8vIE1JTU8gVHggcGFyYW1ldGVyLCBTaG9ydEdJLCBNQ1MsIFNUQkMsIGV0Yy4gIHRoZXNlIGFyZSBmaWVsZHMgaW4gVFhXSSB0b28uIGp1c3QgY29weSB0byBUWFdJLgordHlwZWRlZiBzdHJ1Y3QgIF9SRUNFSVZFX1NFVFRJTkcgeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlVU0hPUlQJCU1JTU86MTsKKwlVU0hPUlQJCU9GRE06MTsKKwlVU0hPUlQJCXJzdjozOworCVVTSE9SVAkJU1RCQzoyOwkvL1NQQUNFCisJVVNIT1JUCQlTaG9ydEdJOjE7CisJVVNIT1JUCQlNb2RlOjI7CS8vY2hhbm5lbCBiYW5kd2lkdGggMjBNSHogb3IgNDAgTUh6CisJVVNIT1JUICAgCU51bU9mUlg6MjsgICAgICAgICAgICAgICAgIC8vIE1JTU8uIFdFIEhBVkUgM1IKKyNlbHNlCisJVVNIT1JUICAgCU51bU9mUlg6MjsgICAgICAgICAgICAgICAgIC8vIE1JTU8uIFdFIEhBVkUgM1IKKwlVU0hPUlQJCU1vZGU6MjsJLy9jaGFubmVsIGJhbmR3aWR0aCAyME1IeiBvciA0MCBNSHoKKwlVU0hPUlQJCVNob3J0R0k6MTsKKwlVU0hPUlQJCVNUQkM6MjsJLy9TUEFDRQorCVVTSE9SVAkJcnN2OjM7CisJVVNIT1JUCQlPRkRNOjE7CisJVVNIT1JUCQlNSU1POjE7CisjZW5kaWYKKyB9IFJFQ0VJVkVfU0VUVElORywgKlBSRUNFSVZFX1NFVFRJTkc7CisKKy8vIFNoYXJlZCBrZXkgZGF0YSBzdHJ1Y3R1cmUKK3R5cGVkZWYgc3RydWN0ICBfV0VQX0tFWSB7CisJVUNIQVIgICBLZXlMZW47ICAgICAgICAgICAgICAgICAgICAgLy8gS2V5IGxlbmd0aCBmb3IgZWFjaCBrZXksIDA6IGVudHJ5IGlzIGludmFsaWQKKwlVQ0hBUiAgIEtleVtNQVhfTEVOX09GX0tFWV07ICAgICAgICAvLyByaWdodCBub3cgd2UgaW1wbGVtZW50IDQga2V5cywgMTI4IGJpdHMgbWF4Cit9IFdFUF9LRVksICpQV0VQX0tFWTsKKwordHlwZWRlZiBzdHJ1Y3QgX0NJUEhFUl9LRVkgeworCVVDSEFSICAgS2V5WzE2XTsgICAgICAgICAgICAvLyByaWdodCBub3cgd2UgaW1wbGVtZW50IDQga2V5cywgMTI4IGJpdHMgbWF4CisJVUNIQVIgICBSeE1pY1s4XTsJCQkvLyBtYWtlIGFsaWdubWVudAorCVVDSEFSICAgVHhNaWNbOF07CisJVUNIQVIgICBUeFRzY1s2XTsgICAgICAgICAgIC8vIDQ4Yml0IFRTQyB2YWx1ZQorCVVDSEFSICAgUnhUc2NbNl07ICAgICAgICAgICAvLyA0OGJpdCBUU0MgdmFsdWUKKwlVQ0hBUiAgIENpcGhlckFsZzsgICAgICAgICAgLy8gMC1ub25lLCAxOldFUDY0LCAyOldFUDEyOCwgMzpUS0lQLCA0OkFFUywgNTpDS0lQNjQsIDY6Q0tJUDEyOAorCVVDSEFSICAgS2V5TGVuOworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCVVDSEFSICAgQnNzSWRbNl07CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisgICAgICAgICAgICAvLyBLZXkgbGVuZ3RoIGZvciBlYWNoIGtleSwgMDogZW50cnkgaXMgaW52YWxpZAorCVVDSEFSICAgVHlwZTsgICAgICAgICAgICAgICAvLyBJbmRpY2F0ZSBQYWlyd2lzZS9Hcm91cCB3aGVuIHJlcG9ydGluZyBNSUMgZXJyb3IKK30gQ0lQSEVSX0tFWSwgKlBDSVBIRVJfS0VZOworCit0eXBlZGVmIHN0cnVjdCBfQkJQX1RVTklOR19TVFJVQ1QgeworCUJPT0xFQU4gICAgIEVuYWJsZTsKKwlVQ0hBUiAgICAgICBGYWxzZUNjYUNvdW50VXBwZXJCb3VuZDsgIC8vIDEwMCBwZXIgc2VjCisJVUNIQVIgICAgICAgRmFsc2VDY2FDb3VudExvd2VyQm91bmQ7ICAvLyAxMCBwZXIgc2VjCisJVUNIQVIgICAgICAgUjE3TG93ZXJCb3VuZDsgICAgICAgICAgICAvLyBzcGVjaWZpZWQgaW4gRTJQUk9NCisJVUNIQVIgICAgICAgUjE3VXBwZXJCb3VuZDsgICAgICAgICAgICAvLyAweDY4IGFjY29yZGluZyB0byBEYXZpZCBUdW5nCisJVUNIQVIgICAgICAgQ3VycmVudFIxN1ZhbHVlOworfSBCQlBfVFVOSU5HLCAqUEJCUF9UVU5JTkc7CisKK3R5cGVkZWYgc3RydWN0IF9TT0ZUX1JYX0FOVF9ESVZFUlNJVFlfU1RSVUNUIHsKKwlVQ0hBUiAgICAgRXZhbHVhdGVQZXJpb2Q7CQkgLy8gMDpub3QgZXZhbHV0ZSBzdGF0dXMsIDE6IGV2YWx1YXRlIHN0YXR1cywgMjogc3dpdGNoaW5nIHN0YXR1cworCVVDSEFSICAgICBFdmFsdWF0ZVN0YWJsZUNudDsKKwlVQ0hBUiAgICAgUGFpcjFQcmltYXJ5UnhBbnQ7ICAgICAvLyAwOkFudC1FMSwgMTpBbnQtRTIKKwlVQ0hBUiAgICAgUGFpcjFTZWNvbmRhcnlSeEFudDsgICAvLyAwOkFudC1FMSwgMTpBbnQtRTIKKwlVQ0hBUiAgICAgUGFpcjJQcmltYXJ5UnhBbnQ7ICAgICAvLyAwOkFudC1FMywgMTpBbnQtRTQKKwlVQ0hBUiAgICAgUGFpcjJTZWNvbmRhcnlSeEFudDsgICAvLyAwOkFudC1FMywgMTpBbnQtRTQKKwlTSE9SVCAgICAgUGFpcjFBdmdSc3NpWzJdOyAgICAgICAvLyBBdmdSc3NpWzBdOkUxLCBBdmdSc3NpWzFdOkUyCisJU0hPUlQgICAgIFBhaXIyQXZnUnNzaVsyXTsgICAgICAgLy8gQXZnUnNzaVswXTpFMywgQXZnUnNzaVsxXTpFNAorCVNIT1JUICAgICBQYWlyMUxhc3RBdmdSc3NpOyAgICAgIC8vCisJU0hPUlQgICAgIFBhaXIyTGFzdEF2Z1Jzc2k7ICAgICAgLy8KKwlVTE9ORyAgICAgUmN2UGt0TnVtV2hlbkV2YWx1YXRlOworCUJPT0xFQU4gICBGaXJzdFBrdEFycml2ZWRXaGVuRXZhbHVhdGU7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCAgICBSeEFudERpdmVyc2l0eVRpbWVyOworfSBTT0ZUX1JYX0FOVF9ESVZFUlNJVFksICpQU09GVF9SWF9BTlRfRElWRVJTSVRZOworCit0eXBlZGVmIHN0cnVjdCBfTEVBUF9BVVRIX0lORk8geworCUJPT0xFQU4gICAgICAgICBFbmFibGVkOyAgICAgICAgLy9UdXJlOiBFbmFibGUgTEVBUCBBdXRoZW50aWNhdGlvbgorCUJPT0xFQU4gICAgICAgICBDQ0tNOyAgICAgICAgICAgLy9UdXJlOiBVc2UgRmFzdCBSZWF1dGhlbnRpY2F0aW9uIHdpdGggQ0NLTQorCVVDSEFSICAgICAgICAgICBSZXNlcnZlWzJdOworCVVDSEFSICAgICAgICAgICBVc2VyTmFtZVsyNTZdOyAgLy9MRUFQLCBVc2VyIG5hbWUKKwlVTE9ORyAgICAgICAgICAgVXNlck5hbWVMZW47CisJVUNIQVIgICAgICAgICAgIFBhc3N3b3JkWzI1Nl07ICAvL0xFQVAsIFVzZXIgUGFzc3dvcmQKKwlVTE9ORyAgICAgICAgICAgUGFzc3dvcmRMZW47Cit9IExFQVBfQVVUSF9JTkZPLCAqUExFQVBfQVVUSF9JTkZPOworCit0eXBlZGVmIHN0cnVjdCB7CisJVUNIQVIgICAgICAgIEFkZHJbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUiAgICAgICAgRXJyb3JDb2RlWzJdOyAgLy8wMCAwMS1JbnZhbGlkIGF1dGhlbnRpY2F0aW9uIHR5cGUKKwkJCQkJCQkJLy8wMCAwMi1BdXRoZW50aWNhdGlvbiB0aW1lb3V0CisJCQkJCQkJCS8vMDAgMDMtQ2hhbGxlbmdlIGZyb20gQVAgZmFpbGVkCisJCQkJCQkJCS8vMDAgMDQtQ2hhbGxlbmdlIHRvIEFQIGZhaWxlZAorCUJPT0xFQU4gICAgICBSZXBvcnRlZDsKK30gUk9HVUVBUF9FTlRSWSwgKlBST0dVRUFQX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCB7CisJVUNIQVIgICAgICAgICAgICAgICBSb2d1ZUFwTnI7CisJUk9HVUVBUF9FTlRSWSAgICAgICBSb2d1ZUFwRW50cnlbTUFYX0xFTl9PRl9CU1NfVEFCTEVdOworfSBST0dVRUFQX1RBQkxFLCAqUFJPR1VFQVBfVEFCTEU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlCT09MRUFOICAgICBFbmFibGU7CisJVUNIQVIgICAgICAgRGVsdGE7CisJQk9PTEVBTiAgICAgUGx1c1NpZ247Cit9IENDS19UWF9QT1dFUl9DQUxJQlJBVEUsICpQQ0NLX1RYX1BPV0VSX0NBTElCUkFURTsKKworLy8KKy8vIFJlY2VpdmUgVHVwbGUgQ2FjaGUgRm9ybWF0CisvLwordHlwZWRlZiBzdHJ1Y3QgIF9UVVBMRV9DQUNIRSAgICB7CisJQk9PTEVBTiAgICAgICAgIFZhbGlkOworCVVDSEFSICAgICAgICAgICBNYWNBZGRyZXNzW01BQ19BRERSX0xFTl07CisJVVNIT1JUICAgICAgICAgIFNlcXVlbmNlOworCVVTSE9SVCAgICAgICAgICBGcmFnOworfSBUVVBMRV9DQUNIRSwgKlBUVVBMRV9DQUNIRTsKKworLy8KKy8vIEZyYWdtZW50IEZyYW1lIHN0cnVjdHVyZQorLy8KK3R5cGVkZWYgc3RydWN0ICBfRlJBR01FTlRfRlJBTUUgeworCVBORElTX1BBQ0tFVCAgICBwRnJhZ1BhY2tldDsKKwlVTE9ORyAgICAgICBSeFNpemU7CisJVVNIT1JUICAgICAgU2VxdWVuY2U7CisJVVNIT1JUICAgICAgTGFzdEZyYWc7CisJVUxPTkcgICAgICAgRmxhZ3M7ICAgICAgICAgIC8vIFNvbWUgZXh0cmEgZnJhbWUgaW5mb3JtYXRpb24uIGJpdCAwOiBMTEMgcHJlc2VudGVkCit9IEZSQUdNRU5UX0ZSQU1FLCAqUEZSQUdNRU5UX0ZSQU1FOworCisKKy8vCisvLyBQYWNrZXQgaW5mb3JtYXRpb24gZm9yIE5kaXNRdWVyeVBhY2tldAorLy8KK3R5cGVkZWYgc3RydWN0ICBfUEFDS0VUX0lORk8gICAgeworCVVJTlQgICAgICAgICAgICBQaHlzaWNhbEJ1ZmZlckNvdW50OyAgICAvLyBQaHlzaWNhbCBicmVha3Mgb2YgYnVmZmVyIGRlc2NyaXBvciBjaGFpbmVkCisJVUlOVCAgICAgICAgICAgIEJ1ZmZlckNvdW50IDsgICAgICAgICAgIC8vIE51bWJlciBvZiBCdWZmZXIgZGVzY3JpcHRvciBjaGFpbmVkCisJVUlOVCAgICAgICAgICAgIFRvdGFsUGFja2V0TGVuZ3RoIDsgICAgIC8vIFNlbGYgZXhwbGFpbmVkCisJUE5ESVNfQlVGRkVSICAgIHBGaXJzdEJ1ZmZlcjsgICAgICAgICAgIC8vIFBvaW50ZXIgdG8gZmlyc3QgYnVmZmVyIGRlc2NyaXB0b3IKK30gUEFDS0VUX0lORk8sICpQUEFDS0VUX0lORk87CisKKy8vCisvLyBUa2lwIEtleSBzdHJ1Y3R1cmUgd2hpY2ggUkM0IGtleSAmIE1JQyBjYWxjdWxhdGlvbgorLy8KK3R5cGVkZWYgc3RydWN0ICBfVEtJUF9LRVlfSU5GTyAgeworCVVJTlQgICAgICAgIG5CeXRlc0luTTsgIC8vICMgYnl0ZXMgaW4gTSBmb3IgTUlDS0VZCisJVUxPTkcgICAgICAgSVYxNjsKKwlVTE9ORyAgICAgICBJVjMyOworCVVMT05HICAgICAgIEswOyAgICAgICAgIC8vIGZvciBNSUNLRVkgTG93CisJVUxPTkcgICAgICAgSzE7ICAgICAgICAgLy8gZm9yIE1JQ0tFWSBIaWcKKwlVTE9ORyAgICAgICBMOyAgICAgICAgICAvLyBDdXJyZW50IHN0YXRlIGZvciBNSUNLRVkKKwlVTE9ORyAgICAgICBSOyAgICAgICAgICAvLyBDdXJyZW50IHN0YXRlIGZvciBNSUNLRVkKKwlVTE9ORyAgICAgICBNOyAgICAgICAgICAvLyBNZXNzYWdlIGFjY3VtdWxhdG9yIGZvciBNSUNLRVkKKwlVQ0hBUiAgICAgICBSQzRLRVlbMTZdOworCVVDSEFSICAgICAgIE1JQ1s4XTsKK30gVEtJUF9LRVlfSU5GTywgKlBUS0lQX0tFWV9JTkZPOworCisvLworLy8gUHJpdmF0ZSAvIE1pc2MgZGF0YSwgY291bnRlcnMgZm9yIGRyaXZlciBpbnRlcm5hbCB1c2UKKy8vCit0eXBlZGVmIHN0cnVjdCAgX19QUklWQVRFX1NUUlVDIHsKKwlVSU5UICAgICAgIFN5c3RlbVJlc2V0Q250OyAgICAgICAgIC8vIFN5c3RlbSByZXNldCBjb3VudGVyCisJVUlOVCAgICAgICBUeFJpbmdGdWxsQ250OyAgICAgICAgICAvLyBUeCByaW5nIGZ1bGwgb2NjdXJyYW5jZSBudW1iZXIKKwlVSU5UICAgICAgIFBoeVJ4RXJyQ250OyAgICAgICAgICAgIC8vIFBIWSBSeCBlcnJvciBjb3VudCwgZm9yIGRlYnVnIHB1cnBvc2UsIG1pZ2h0IG1vdmUgdG8gZ2xvYmFsIGNvdW50ZXIKKwkvLyBWYXJpYWJsZXMgZm9yIFdFUCBlbmNyeXB0aW9uIC8gZGVjcnlwdGlvbiBpbiBydG1wX3dlcC5jCisJVUlOVCAgICAgICBGQ1NDUkMzMjsKKwlBUkNGT1VSQ09OVEVYVCAgV0VQQ09OVEVYVDsKKwkvLyBUa2lwIHN0dWZmCisJVEtJUF9LRVlfSU5GTyAgIFR4OworCVRLSVBfS0VZX0lORk8gICBSeDsKK30gUFJJVkFURV9TVFJVQywgKlBQUklWQVRFX1NUUlVDOworCisvLyBzdHJ1Y3R1cmUgdG8gdHVuZSBCQlAgUjY2IChCQlAgVFVOSU5HKQordHlwZWRlZiBzdHJ1Y3QgX0JCUF9SNjZfVFVOSU5HIHsKKwlCT09MRUFOICAgICBiRW5hYmxlOworCVVTSE9SVCAgICAgIEZhbHNlQ2NhTG93ZXJUaHJlc2hvbGQ7ICAvLyBkZWZhdWx0IDEwMAorCVVTSE9SVCAgICAgIEZhbHNlQ2NhVXBwZXJUaHJlc2hvbGQ7ICAvLyBkZWZhdWx0IDUxMgorCVVDSEFSICAgICAgIFI2NkRlbHRhOworCVVDSEFSICAgICAgIFI2NkN1cnJlbnRWYWx1ZTsKKwlCT09MRUFOCQlSNjZMb3dlclVwcGVyU2VsZWN0OyAvL0JlZm9yZSBMaW5rVXAsIFVzZWQgTG93ZXJCb3VuZCBvciBVcHBlckJvdW5kIGFzIFI2NiB2YWx1ZS4KK30gQkJQX1I2Nl9UVU5JTkcsICpQQkJQX1I2Nl9UVU5JTkc7CisKKy8vIHN0cnVjdHVyZSB0byBzdG9yZSBjaGFubmVsIFRYIHBvd2VyCit0eXBlZGVmIHN0cnVjdCBfQ0hBTk5FTF9UWF9QT1dFUiB7CisJVVNIT1JUICAgICBSZW1haW5pbmdUaW1lRm9yVXNlOwkJLy91bml0OiBzZWMKKwlVQ0hBUiAgICAgIENoYW5uZWw7CisjaWZkZWYgRE9UMTFOX0RSQUZUMworCUJPT0xFQU4gICAgICAgYkVmZmVjdGVkQ2hhbm5lbDsJLy8gRm9yIEJXIDQwIG9wZXJhdGluZyBpbiAyLjRHSHogLCB0aGUgImVmZmVjdGVkIGNoYW5uZWwiIGlzIHRoZSBjaGFubmVsIHRoYXQgaXMgY292ZXJlZCBpbiA0ME1oei4KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisJQ0hBUiAgICAgICBQb3dlcjsKKwlDSEFSICAgICAgIFBvd2VyMjsKKwlVQ0hBUiAgICAgIE1heFR4UHdyOworCVVDSEFSICAgICAgRGZzUmVxOworfSBDSEFOTkVMX1RYX1BPV0VSLCAqUENIQU5ORUxfVFhfUE9XRVI7CisKKy8vIHN0cnVjdHVyZSB0byBzdG9yZSA4MDIuMTFqIGNoYW5uZWwgVFggcG93ZXIKK3R5cGVkZWYgc3RydWN0IF9DSEFOTkVMXzExSl9UWF9QT1dFUiB7CisJVUNIQVIgICAgICBDaGFubmVsOworCVVDSEFSICAgICAgQlc7CS8vIEJXXzEwIG9yIEJXXzIwCisJQ0hBUiAgICAgICBQb3dlcjsKKwlDSEFSICAgICAgIFBvd2VyMjsKKwlVU0hPUlQgICAgIFJlbWFpbmluZ1RpbWVGb3JVc2U7CQkvL3VuaXQ6IHNlYworfSBDSEFOTkVMXzExSl9UWF9QT1dFUiwgKlBDSEFOTkVMXzExSl9UWF9QT1dFUjsKKwordHlwZWRlZiBlbnVtIF9BQkdCQU5EX1NUQVRFXyB7CisJVU5LTk9XTl9CQU5ELAorCUJHX0JBTkQsCisJQV9CQU5ELAorfSBBQkdCQU5EX1NUQVRFOworCit0eXBlZGVmIHN0cnVjdCBfTUxNRV9TVFJVQ1QgeworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorCS8vIFNUQSBzdGF0ZSBtYWNoaW5lcworCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIENudGxNYWNoaW5lOworCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIEFzc29jTWFjaGluZTsKKwlTVEFURV9NQUNISU5FICAgICAgICAgICBBdXRoTWFjaGluZTsKKwlTVEFURV9NQUNISU5FICAgICAgICAgICBBdXRoUnNwTWFjaGluZTsKKwlTVEFURV9NQUNISU5FICAgICAgICAgICBTeW5jTWFjaGluZTsKKwlTVEFURV9NQUNISU5FICAgICAgICAgICBXcGFQc2tNYWNoaW5lOworCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIExlYXBNYWNoaW5lOworCVNUQVRFX01BQ0hJTkUgICAgICAgICAgIEFpcm9uZXRNYWNoaW5lOworCVNUQVRFX01BQ0hJTkVfRlVOQyAgICAgIEFzc29jRnVuY1tBU1NPQ19GVU5DX1NJWkVdOworCVNUQVRFX01BQ0hJTkVfRlVOQyAgICAgIEF1dGhGdW5jW0FVVEhfRlVOQ19TSVpFXTsKKwlTVEFURV9NQUNISU5FX0ZVTkMgICAgICBBdXRoUnNwRnVuY1tBVVRIX1JTUF9GVU5DX1NJWkVdOworCVNUQVRFX01BQ0hJTkVfRlVOQyAgICAgIFN5bmNGdW5jW1NZTkNfRlVOQ19TSVpFXTsKKwlTVEFURV9NQUNISU5FX0ZVTkMgICAgICBXcGFQc2tGdW5jW1dQQV9QU0tfRlVOQ19TSVpFXTsKKwlTVEFURV9NQUNISU5FX0ZVTkMgICAgICBBaXJvbmV0RnVuY1tBSVJPTkVUX0ZVTkNfU0laRV07CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJU1RBVEVfTUFDSElORV9GVU5DICAgICAgQWN0RnVuY1tBQ1RfRlVOQ19TSVpFXTsKKwkvLyBBY3Rpb24KKwlTVEFURV9NQUNISU5FICAgICAgICAgICBBY3RNYWNoaW5lOworCisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwlTVEFURV9NQUNISU5FCQkJRGxzTWFjaGluZTsKKwlTVEFURV9NQUNISU5FX0ZVTkMgICAgICBEbHNGdW5jW0RMU19GVU5DX1NJWkVdOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisKKworCisJVUxPTkcgICAgICAgICAgICAgICAgICAgQ2hhbm5lbFF1YWxpdHk7ICAvLyAwLi4xMDAsIENoYW5uZWwgUXVhbGl0eSBJbmRpY2F0aW9uIGZvciBSb2FtaW5nCisJVUxPTkcgICAgICAgICAgICAgICAgICAgTm93MzI7ICAgICAgICAgICAvLyBsYXRjaCB0aGUgdmFsdWUgb2YgTmRpc0dldFN5c3RlbVVwVGltZSgpCisJVUxPTkcgICAgICAgICAgICAgICAgICAgTGFzdFNlbmROVUxMcHNtVGltZTsKKworCUJPT0xFQU4gICAgICAgICAgICAgICAgIGJSdW5uaW5nOworCU5ESVNfU1BJTl9MT0NLICAgICAgICAgIFRhc2tMb2NrOworCU1MTUVfUVVFVUUgICAgICAgICAgICAgIFF1ZXVlOworCisJVUlOVCAgICAgICAgICAgICAgICAgICAgU2hpZnRSZWc7CisKKwlSQUxJTktfVElNRVJfU1RSVUNUICAgICBQZXJpb2RpY1RpbWVyOworCVJBTElOS19USU1FUl9TVFJVQ1QgICAgIEFQU0RQZXJpb2RpY1RpbWVyOworCVJBTElOS19USU1FUl9TVFJVQ1QgICAgIExpbmtEb3duVGltZXI7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCAgICAgTGlua1VwVGltZXI7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgUGVyaW9kaWNSb3VuZDsKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBPbmVTZWNQZXJpb2RpY1JvdW5kOworCisJVUNIQVIJCQkJCVJlYWxSeFBhdGg7CisJQk9PTEVBTgkJCQkJYkxvd1Rocm91Z2hwdXQ7CisJQk9PTEVBTgkJCQkJYkVuYWJsZUF1dG9BbnRlbm5hQ2hlY2s7CisJUkFMSU5LX1RJTUVSX1NUUlVDVAkJUnhBbnRFdmFsVGltZXI7CisKKyNpZmRlZiBSVDMweHgKKwlVQ0hBUiBDYWxpQlc0MFJmUjI0OworCVVDSEFSIENhbGlCVzIwUmZSMjQ7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKK30gTUxNRV9TVFJVQ1QsICpQTUxNRV9TVFJVQ1Q7CisKKy8vIHN0cnVjdHVyZSBmb3IgcmFkYXIgZGV0ZWN0aW9uIGFuZCBjaGFubmVsIHN3aXRjaAordHlwZWRlZiBzdHJ1Y3QgX1JBREFSX0RFVEVDVF9TVFJVQ1QgeworICAgIC8vQk9PTEVBTgkJSUVFRTgwMjExSDsJCQkvLyAwOiBkaXNhYmxlLCAxOiBlbmFibGUgSUVFRTgwMi4xMWgKKwlVQ0hBUgkJQ1NDb3VudDsJCQkvL0NoYW5uZWwgc3dpdGNoIGNvdW50ZXIKKwlVQ0hBUgkJQ1NQZXJpb2Q7CQkJLy9DaGFubmVsIHN3aXRjaCBwZXJpb2QgKGJlYWNvbiBjb3VudCkKKwlVQ0hBUgkJUkRDb3VudDsJCQkvL1JhZGFyIGRldGVjdGlvbiBjb3VudGVyCisJVUNIQVIJCVJETW9kZTsJCQkJLy9SYWRhciBEZXRlY3Rpb24gbW9kZQorCVVDSEFSCQlSRER1clJlZ2lvbjsJCS8vUmFkYXIgZGV0ZWN0aW9uIGR1cmF0aW9uIHJlZ2lvbgorCVVDSEFSCQlCQlBSMTY7CisJVUNIQVIJCUJCUFIxNzsKKwlVQ0hBUgkJQkJQUjE4OworCVVDSEFSCQlCQlBSMjE7CisJVUNIQVIJCUJCUFIyMjsKKwlVQ0hBUgkJQkJQUjY0OworCVVMT05HCQlJblNlcnZpY2VNb25pdG9yQ291bnQ7IC8vIHVuaXQ6IHNlYworCVVJTlQ4CQlEZnNTZXNzaW9uVGltZTsKKwlCT09MRUFOCQliRmFzdERmczsKKwlVSU5UOAkJQ2hNb3ZpbmdUaW1lOworCVVJTlQ4CQlMb25nUHVsc2VSYWRhclRoOworfSBSQURBUl9ERVRFQ1RfU1RSVUNULCAqUFJBREFSX0RFVEVDVF9TVFJVQ1Q7CisKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUCit0eXBlZGVmIGVudW0gQ0RfU1RBVEVfbgoreworCUNEX05PUk1BTCwKKwlDRF9TSUxFTkNFLAorCUNEX01BWF9TVEFURQorfSBDRF9TVEFURTsKKwordHlwZWRlZiBzdHJ1Y3QgQ0FSUklFUl9ERVRFQ1RJT05fcworeworCUJPT0xFQU4JCQkJCUVuYWJsZTsKKwlVSU5UOAkJCQkJQ0RTZXNzaW9uVGltZTsKKwlVSU5UOAkJCQkJQ0RQZXJpb2Q7CisJQ0RfU1RBVEUJCQkJQ0RfU3RhdGU7Cit9IENBUlJJRVJfREVURUNUSU9OLCAqUENBUlJJRVJfREVURUNUSU9OOworI2VuZGlmIC8vIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8KKwordHlwZWRlZiBlbnVtIF9SRUNfQkxPQ0tBQ0tfU1RBVFVTCit7CisgICAgUmVjaXBpZW50X05PTkU9MCwKKwlSZWNpcGllbnRfVVNFRCwKKwlSZWNpcGllbnRfSGFuZGxlUmVzLAorICAgIFJlY2lwaWVudF9BY2NlcHQKK30gUkVDX0JMT0NLQUNLX1NUQVRVUywgKlBSRUNfQkxPQ0tBQ0tfU1RBVFVTOworCit0eXBlZGVmIGVudW0gX09SSV9CTE9DS0FDS19TVEFUVVMKK3sKKyAgICBPcmlnaW5hdG9yX05PTkU9MCwKKwlPcmlnaW5hdG9yX1VTRUQsCisgICAgT3JpZ2luYXRvcl9XYWl0UmVzLAorICAgIE9yaWdpbmF0b3JfRG9uZQorfSBPUklfQkxPQ0tBQ0tfU1RBVFVTLCAqUE9SSV9CTE9DS0FDS19TVEFUVVM7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK3R5cGVkZWYgc3RydWN0IF9CQV9PUklfRU5UUll7CisJVUNIQVIgICBXY2lkOworCVVDSEFSICAgVElEOworCVVDSEFSICAgQkFXaW5TaXplOworCVVDSEFSICAgVG9rZW47CisvLyBTZXF1ZW5jZSBpcyB0byBmaWxsIGV2ZXJ5IG91dGdvaW5nIFFvUyBEQVRBIGZyYW1lJ3Mgc2VxdWVuY2UgZmllbGQgaW4gODAyLjExIGhlYWRlci4KKwlVU0hPUlQJU2VxdWVuY2U7CisJVVNIT1JUCVRpbWVPdXRWYWx1ZTsKKwlPUklfQkxPQ0tBQ0tfU1RBVFVTICBPUklfQkFfU3RhdHVzOworCVJBTElOS19USU1FUl9TVFJVQ1QgT1JJQkFUaW1lcjsKKwlQVk9JRAlwQWRhcHRlcjsKK30gQkFfT1JJX0VOVFJZLCAqUEJBX09SSV9FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgX0JBX1JFQ19FTlRSWSB7CisJVUNIQVIgICBXY2lkOworCVVDSEFSICAgVElEOworCVVDSEFSICAgQkFXaW5TaXplOwkvLyA3LjMuMS4xNC4gZWFjaCBidWZmZXIgaXMgY2FwYWJsZSBvZiBob2xkaW5nIGEgbWF4IEFNU0RVIG9yIE1TRFUuCisJLy9VQ0hBUglOdW1PZlJ4UGt0OworCS8vVUNIQVIgICAgQ3VyaW5kaWR4OyAvLyB0aGUgaGVhZCBpbiB0aGUgUlggcmVvcmRlcmluZyBidWZmZXIKKwlVU0hPUlQJCUxhc3RJbmRTZXE7CisvLwlVU0hPUlQJCUxhc3RJbmRTZXFBdFRpbWVyOworCVVTSE9SVAkJVGltZU91dFZhbHVlOworCVJBTElOS19USU1FUl9TVFJVQ1QgUkVDQkFUaW1lcjsKKwlVTE9ORwkJTGFzdEluZFNlcUF0VGltZXI7CisJVUxPTkcJCW5Ecm9wUGFja2V0OworCVVMT05HCQlyY3ZTZXE7CisJUkVDX0JMT0NLQUNLX1NUQVRVUyAgUkVDX0JBX1N0YXR1czsKKy8vCVVDSEFSCVJ4QnVmSWR4VXNlZDsKKwkvLyBjb3JyZXNwb25kaW5nIHZpcnR1YWwgYWRkcmVzcyBmb3IgUlggcmVvcmRlcmluZyBwYWNrZXQgc3RvcmFnZS4KKwkvL1JUTVBfUkVPUkRFUkRNQUJVRiBNQVBfUlhCdWZbTUFYX1JYX1JFT1JERVJCVUZdOworCU5ESVNfU1BJTl9MT0NLICAgICAgICAgIFJ4UmVSaW5nTG9jazsgICAgICAgICAgICAgICAgIC8vIFJ4IFJpbmcgc3BpbmxvY2sKKy8vCXN0cnVjdCBfQkFfUkVDX0VOVFJZICpwTmV4dDsKKwlQVk9JRAlwQWRhcHRlcjsKKwlzdHJ1Y3QgcmVvcmRlcmluZ19saXN0CWxpc3Q7Cit9IEJBX1JFQ19FTlRSWSwgKlBCQV9SRUNfRU5UUlk7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworCVVMT05HCQludW1Bc1JlY2lwaWVudDsJCS8vIEkgYW0gcmVjaXBpZW50IG9mIG51bUFzUmVjaXBpZW50IGNsaWVudHMuIFRoZXNlIGNsaWVudCBhcmUgaW4gdGhlIEJBUmVjRW50cnlbXQorCVVMT05HCQludW1Bc09yaWdpbmF0b3I7CS8vIEkgYW0gb3JpZ2luYXRvciBvZiAJbnVtQXNPcmlnaW5hdG9yIGNsaWVudHMuIFRoZXNlIGNsaWVudHMgYXJlIGluIHRoZSBCQU9yaUVudHJ5W10KKwlCQV9PUklfRU5UUlkgICAgICAgQkFPcmlFbnRyeVtNQVhfTEVOX09GX0JBX09SSV9UQUJMRV07CisJQkFfUkVDX0VOVFJZICAgICAgIEJBUmVjRW50cnlbTUFYX0xFTl9PRl9CQV9SRUNfVEFCTEVdOworfSBCQV9UQUJMRSwgKlBCQV9UQUJMRTsKKworLy9Gb3IgUXVyZXlCQVRhYmxlT0lEIHVzZTsKK3R5cGVkZWYgc3RydWN0ICBQQUNLRUQgX09JRF9CQV9SRUNfRU5UUll7CisJVUNIQVIgICBNQUNBZGRyW01BQ19BRERSX0xFTl07CisJVUNIQVIgICBCYUJpdG1hcDsgICAvLyBpZiAoQmFCaXRtYXAmKDE8PFRJRCkpLCB0aGlzIHNlc3Npb24gd2l0aHtNQUNBZGRyLCBUSUR9ZXhpc3RzLCBzbyByZWFkIEJ1ZlNpemVbVElEXSBmb3IgQnVmZmVyU2l6ZQorCVVDSEFSICAgcnN2OworCVVDSEFSICAgQnVmU2l6ZVs4XTsKKwlSRUNfQkxPQ0tBQ0tfU1RBVFVTCVJFQ19CQV9TdGF0dXNbOF07Cit9IE9JRF9CQV9SRUNfRU5UUlksICpQT0lEX0JBX1JFQ19FTlRSWTsKKworLy9Gb3IgUXVyZXlCQVRhYmxlT0lEIHVzZTsKK3R5cGVkZWYgc3RydWN0ICBQQUNLRUQgX09JRF9CQV9PUklfRU5UUll7CisJVUNIQVIgICBNQUNBZGRyW01BQ19BRERSX0xFTl07CisJVUNIQVIgICBCYUJpdG1hcDsgIC8vIGlmIChCYUJpdG1hcCYoMTw8VElEKSksIHRoaXMgc2Vzc2lvbiB3aXRoe01BQ0FkZHIsIFRJRH1leGlzdHMsIHNvIHJlYWQgQnVmU2l6ZVtUSURdIGZvciBCdWZmZXJTaXplLCByZWFkIE9SSV9CQV9TdGF0dXNbVElEXSBmb3Igc3RhdHVzCisJVUNIQVIgICByc3Y7CisJVUNIQVIgICBCdWZTaXplWzhdOworCU9SSV9CTE9DS0FDS19TVEFUVVMgIE9SSV9CQV9TdGF0dXNbOF07Cit9IE9JRF9CQV9PUklfRU5UUlksICpQT0lEX0JBX09SSV9FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgX1FVRVJZQkFfVEFCTEV7CisJT0lEX0JBX09SSV9FTlRSWSAgICAgICBCQU9yaUVudHJ5WzMyXTsKKwlPSURfQkFfUkVDX0VOVFJZICAgICAgIEJBUmVjRW50cnlbMzJdOworCVVDSEFSICAgT3JpTnVtOy8vIE51bWJlciBvZiBiZWxvdyBCQU9yaUVudHJ5CisJVUNIQVIgICBSZWNOdW07Ly8gTnVtYmVyIG9mIGJlbG93IEJBUmVjRW50cnkKK30gUVVFUllCQV9UQUJMRSwgKlBRVUVSWUJBX1RBQkxFOworCit0eXBlZGVmCXVuaW9uCV9CQUNBUF9TVFJVQwl7CisjaWZkZWYgUlRfQklHX0VORElBTgorCXN0cnVjdAl7CisJCVVJTlQzMiAgICAgOjQ7CisJCVVJTlQzMiAgICAgYjIwNDBDb2V4aXN0U2NhblN1cDoxOwkJLy9BcyBTdGEsIHN1cHBvcnQgZG8gMjA0MCBjb2V4aXN0ZW5jZSBzY2FuIGZvciBBUC4gQXMgQXAsIHN1cHBvcnQgbW9uaXRvciB0cmlnZ2VyIGV2ZW50IHRvIGNoZWNrIGlmIGNhbiB1c2UgQlcgNDBNSHouCisJCVVJTlQzMiAgICAgYkh0QWRob2M6MTsJCQkvLyBhZGhvYyBjYW4gdXNlIGh0IHJhdGUuCisJCVVJTlQzMiAgICAgTU1QU21vZGU6MjsJLy8gTUlNTyBwb3dlciBzYXZlIG1vcmUsIDA6c3RhdGljLCAxOmR5bmFtaWMsIDI6cnN2LCAzOm1pbW8gZW5hYmxlCisJCVVJTlQzMiAgICAgQW1zZHVTaXplOjE7CS8vIDA6MzgzOSwgMTo3OTM1IGJ5dGVzLiBVSU5UICBNU0RVU2l6ZVRvQnl0ZXNbXQk9IHsgMzgzOSwgNzkzNX07CisJCVVJTlQzMiAgICAgQW1zZHVFbmFibGU6MTsJLy9FbmFibGUgQU1TRFUgdHJhbnNtaXNzdGlvbgorCQlVSU5UMzIJCU1wZHVEZW5zaXR5OjM7CisJCVVJTlQzMgkJUG9saWN5OjI7CS8vIDA6IERFTEFZX0JBIDE6SU1NRURfQkEgICgvL0JBIFBvbGljeSBzdWJmaWxlZCB2YWx1ZSBpbiBBRERCQSBmcmFtZSkgICAyOkJBLW5vdCB1c2UKKwkJVUlOVDMyCQlBdXRvQkE6MTsJLy8gYXV0b21hdGljYWxseSBCQQorCQlVSU5UMzIJCVR4QkFXaW5MaW1pdDo4OworCQlVSU5UMzIJCVJ4QkFXaW5MaW1pdDo4OworCX0JZmllbGQ7CisjZWxzZQorCXN0cnVjdAl7CisJCVVJTlQzMgkJUnhCQVdpbkxpbWl0Ojg7CisJCVVJTlQzMgkJVHhCQVdpbkxpbWl0Ojg7CisJCVVJTlQzMgkJQXV0b0JBOjE7CS8vIGF1dG9tYXRpY2FsbHkgQkEKKwkJVUlOVDMyCQlQb2xpY3k6MjsJLy8gMDogREVMQVlfQkEgMTpJTU1FRF9CQSAgKC8vQkEgUG9saWN5IHN1YmZpbGVkIHZhbHVlIGluIEFEREJBIGZyYW1lKSAgIDI6QkEtbm90IHVzZQorCQlVSU5UMzIJCU1wZHVEZW5zaXR5OjM7CisJCVVJTlQzMiAgICAgICAJQW1zZHVFbmFibGU6MTsJLy9FbmFibGUgQU1TRFUgdHJhbnNtaXNzdGlvbgorCQlVSU5UMzIgICAgICAgCUFtc2R1U2l6ZToxOwkvLyAwOjM4MzksIDE6NzkzNSBieXRlcy4gVUlOVCAgTVNEVVNpemVUb0J5dGVzW10JPSB7IDM4MzksIDc5MzV9OworCQlVSU5UMzIgICAgICAgCU1NUFNtb2RlOjI7CS8vIE1JTU8gcG93ZXIgc2F2ZSBtb3JlLCAwOnN0YXRpYywgMTpkeW5hbWljLCAyOnJzdiwgMzptaW1vIGVuYWJsZQorCQlVSU5UMzIgICAgICAgCWJIdEFkaG9jOjE7CQkJLy8gYWRob2MgY2FuIHVzZSBodCByYXRlLgorCQlVSU5UMzIgICAgICAgCWIyMDQwQ29leGlzdFNjYW5TdXA6MTsJCS8vQXMgU3RhLCBzdXBwb3J0IGRvIDIwNDAgY29leGlzdGVuY2Ugc2NhbiBmb3IgQVAuIEFzIEFwLCBzdXBwb3J0IG1vbml0b3IgdHJpZ2dlciBldmVudCB0byBjaGVjayBpZiBjYW4gdXNlIEJXIDQwTUh6LgorCQlVSU5UMzIgICAgICAgCTo0OworCX0JZmllbGQ7CisjZW5kaWYKKwlVSU5UMzIJCQl3b3JkOworfSBCQUNBUF9TVFJVQywgKlBCQUNBUF9TVFJVQzsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworLy9UaGlzIHN0cnVjdHVyZSBpcyBmb3IgYWxsIDgwMi4xMW4gY2FyZCBJbnRlck9wdGliaWxpdHlUZXN0IGFjdGlvbi4gUmVzZXQgYWxsIE51bSBldmVyeSBuIHNlY29uZC4gIChEZXRhaWxzIHNlZSBNTE1FUGVyaW9kaWMpCit0eXBlZGVmCXN0cnVjdAlfSU9UX1NUUlVDCXsKKwlVQ0hBUgkJCVRocmVzaG9sZFsyXTsKKwlVQ0hBUgkJCVJlb3JkZXJUaW1lT3V0TnVtW01BWF9MRU5fT0ZfQkFfUkVDX1RBQkxFXTsJLy8gY29tcGFyZSB3aXRoIHRocmVzaG9sZFswXQorCVVDSEFSCQkJUmVmcmVzaE51bVtNQVhfTEVOX09GX0JBX1JFQ19UQUJMRV07CS8vIGNvbXBhcmUgd2l0aCB0aHJlc2hvbGRbMV0KKwlVTE9ORwkJCU9uZVNlY0luV2luZG93Q291bnQ7CisJVUxPTkcJCQlPbmVTZWNGcmFtZUR1cGxpY2F0ZUNvdW50OworCVVMT05HCQkJT25lU2VjT3V0V2luZG93Q291bnQ7CisJVUNIQVIJCQlEZWxPcmlBY3Q7CisJVUNIQVIJCQlEZWxSZWNBY3Q7CisJVUNIQVIJCQlSVFNTaG9ydFByb3Q7CisJVUNIQVIJCQlSVFNMb25nUHJvdDsKKwlCT09MRUFOCQkJYlJUU0xvbmdQcm90T247CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisJQk9PTEVBTgkJCWJMYXN0QXRoZXJvczsKKyAgICBCT09MRUFOCQkJYkN1cnJlbnRBdGhlcm9zOworICAgIEJPT0xFQU4gICAgICAgICBiTm93QXRoZXJvc0J1cnN0T247CisJQk9PTEVBTgkJCWJOZXh0RGlzYWJsZVJ4QkE7CisgICAgQk9PTEVBTgkJCWJUb2dnbGU7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCit9IElPVF9TVFJVQywgKlBJT1RfU1RSVUM7CisKKy8vIFRoaXMgaXMgdGhlIHJlZ2lzdHJ5IHNldHRpbmcgZm9yIDgwMi4xMW4gdHJhbnNtaXQgc2V0dGluZy4gIFVzZWQgaW4gYWR2YW5jZWQgcGFnZS4KK3R5cGVkZWYgdW5pb24gX1JFR19UUkFOU01JVF9TRVRUSU5HIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisgc3RydWN0IHsKKyAgICAgICAgIFVJTlQzMiAgcnN2OjEzOworCQkgVUlOVDMyICBFWFRDSEE6MjsKKwkJIFVJTlQzMiAgSFRNT0RFOjE7CisJCSBVSU5UMzIgIFRSQU5TTk86MjsKKwkJIFVJTlQzMiAgU1RCQzoxOyAvL1NQQUNFCisJCSBVSU5UMzIgIFNob3J0R0k6MTsKKwkJIFVJTlQzMiAgQlc6MTsgLy9jaGFubmVsIGJhbmR3aWR0aCAyME1IeiBvciA0MCBNSHoKKwkJIFVJTlQzMiAgVHhCRjoxOyAvLyAzKjMKKwkJIFVJTlQzMiAgcnN2MDoxMDsKKwkJIC8vVUlOVDMyICBNQ1M6NzsgICAgICAgICAgICAgICAgIC8vIE1DUworICAgICAgICAgLy9VSU5UMzIgIFBoeU1vZGU6NDsKKyAgICB9IGZpZWxkOworI2Vsc2UKKyBzdHJ1Y3QgeworICAgICAgICAgLy9VSU5UMzIgIFBoeU1vZGU6NDsKKyAgICAgICAgIC8vVUlOVDMyICBNQ1M6NzsgICAgICAgICAgICAgICAgIC8vIE1DUworCQkgVUlOVDMyICByc3YwOjEwOworCQkgVUlOVDMyICBUeEJGOjE7CisgICAgICAgICBVSU5UMzIgIEJXOjE7IC8vY2hhbm5lbCBiYW5kd2lkdGggMjBNSHogb3IgNDAgTUh6CisgICAgICAgICBVSU5UMzIgIFNob3J0R0k6MTsKKyAgICAgICAgIFVJTlQzMiAgU1RCQzoxOyAvL1NQQUNFCisgICAgICAgICBVSU5UMzIgIFRSQU5TTk86MjsKKyAgICAgICAgIFVJTlQzMiAgSFRNT0RFOjE7CisgICAgICAgICBVSU5UMzIgIEVYVENIQToyOworICAgICAgICAgVUlOVDMyICByc3Y6MTM7CisgICAgfSBmaWVsZDsKKyNlbmRpZgorIFVJTlQzMiAgIHdvcmQ7Cit9IFJFR19UUkFOU01JVF9TRVRUSU5HLCAqUFJFR19UUkFOU01JVF9TRVRUSU5HOworCit0eXBlZGVmIHVuaW9uICBfREVTSVJFRF9UUkFOU01JVF9TRVRUSU5HIHsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJc3RydWN0CXsKKwkJCVVTSE9SVAkJcnN2OjM7CisJCQlVU0hPUlQJCUZpeGVkVHhNb2RlOjI7CQkJLy8gSWYgTUNTIGlzbid0IEFVVE8sIGZpeCByYXRlIGluIENDSywgT0ZETSBvciBIVCBtb2RlLgorCQkJVVNIT1JUCQlQaHlNb2RlOjQ7CisJCQlVU0hPUlQgICAJTUNTOjc7ICAgICAgICAgICAgICAgICAvLyBNQ1MKKwl9CWZpZWxkOworI2Vsc2UKKwlzdHJ1Y3QJeworCQkJVVNIT1JUICAgCU1DUzo3OyAgICAgICAgICAgICAgICAgCS8vIE1DUworCQkJVVNIT1JUCQlQaHlNb2RlOjQ7CisJCQlVU0hPUlQJIAlGaXhlZFR4TW9kZToyOwkJCS8vIElmIE1DUyBpc24ndCBBVVRPLCBmaXggcmF0ZSBpbiBDQ0ssIE9GRE0gb3IgSFQgbW9kZS4KKwkJCVVTSE9SVAkJcnN2OjM7CisJfQlmaWVsZDsKKyNlbmRpZgorCVVTSE9SVAkJd29yZDsKKyB9IERFU0lSRURfVFJBTlNNSVRfU0VUVElORywgKlBERVNJUkVEX1RSQU5TTUlUX1NFVFRJTkc7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlCT09MRUFOCQlJc1JlY2lwaWVudDsKKwlVQ0hBUiAgIE1BQ0FkZHJbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUiAgIFRJRDsKKwlVQ0hBUiAgIG5NU0RVOworCVVTSE9SVCAgIFRpbWVPdXQ7CisJQk9PTEVBTiBiQWxsVGlkOyAgLy8gSWYgVHJ1ZSwgZGVsZXRlIGFsbCBUSUQgZm9yIEJBIHNlc3Npb25zIHdpdGggdGhpcyBNQUNhZGRyLgorfSBPSURfQUREX0JBX0VOVFJZLCAqUE9JRF9BRERfQkFfRU5UUlk7CisKKy8vCisvLyBNdWx0aXBsZSBTU0lEIHN0cnVjdHVyZQorLy8KKyNkZWZpbmUgV0xBTl9NQVhfTlVNX09GX1RJTQkJCSgoTUFYX0xFTl9PRl9NQUNfVEFCTEUgPj4gMykgKyAxKSAvKiAvOCArIDEgKi8KKyNkZWZpbmUgV0xBTl9DVF9USU1fQkNNQ19PRkZTRVQJCTAgLyogdW5pdDogMzJCICovCisKKy8qIGNsZWFyIGJjbWMgVElNIGJpdCAqLworI2RlZmluZSBXTEFOX01SX1RJTV9CQ01DX0NMRUFSKGFwaWR4KSBcCisJcEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLlRpbUJpdG1hcHNbV0xBTl9DVF9USU1fQkNNQ19PRkZTRVRdICY9IH5CSVQ4WzBdOworCisvKiBzZXQgYmNtYyBUSU0gYml0ICovCisjZGVmaW5lIFdMQU5fTVJfVElNX0JDTUNfU0VUKGFwaWR4KSBcCisJcEFkLT5BcENmZy5NQlNTSURbYXBpZHhdLlRpbUJpdG1hcHNbV0xBTl9DVF9USU1fQkNNQ19PRkZTRVRdIHw9IEJJVDhbMF07CisKKy8qIGNsZWFyIGEgc3RhdGlvbiBQUyBUSU0gYml0ICovCisjZGVmaW5lIFdMQU5fTVJfVElNX0JJVF9DTEVBUihhZF9wLCBhcGlkeCwgd2NpZCkgXAorCXsJVUNIQVIgdGltX29mZnNldCA9IHdjaWQgPj4gMzsgXAorCQlVQ0hBUiBiaXRfb2Zmc2V0ID0gd2NpZCAmIDB4NzsgXAorCQlhZF9wLT5BcENmZy5NQlNTSURbYXBpZHhdLlRpbUJpdG1hcHNbdGltX29mZnNldF0gJj0gKH5CSVQ4W2JpdF9vZmZzZXRdKTsgfQorCisvKiBzZXQgYSBzdGF0aW9uIFBTIFRJTSBiaXQgKi8KKyNkZWZpbmUgV0xBTl9NUl9USU1fQklUX1NFVChhZF9wLCBhcGlkeCwgd2NpZCkgXAorCXsJVUNIQVIgdGltX29mZnNldCA9IHdjaWQgPj4gMzsgXAorCQlVQ0hBUiBiaXRfb2Zmc2V0ID0gd2NpZCAmIDB4NzsgXAorCQlhZF9wLT5BcENmZy5NQlNTSURbYXBpZHhdLlRpbUJpdG1hcHNbdGltX29mZnNldF0gfD0gQklUOFtiaXRfb2Zmc2V0XTsgfQorCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIEJFQUNPTl9CSVRNQVBfTUFTSwkJMHhmZgordHlwZWRlZiBzdHJ1Y3QgX0JFQUNPTl9TWU5DX1NUUlVDVF8KK3sKKwlVQ0hBUiAgICAgICAgCQkJQmVhY29uQnVmW0hXX0JFQUNPTl9NQVhfQ09VTlRdW0hXX0JFQUNPTl9PRkZTRVRdOworCVVDSEFSCQkJCQlCZWFjb25UeFdJW0hXX0JFQUNPTl9NQVhfQ09VTlRdW1RYV0lfU0laRV07CisJVUxPTkcgCQkJCQlUaW1JRUxvY2F0aW9uSW5CZWFjb25bSFdfQkVBQ09OX01BWF9DT1VOVF07CisJVUxPTkcJCQkJCUNhcGFiaWxpdHlJbmZvTG9jYXRpb25JbkJlYWNvbltIV19CRUFDT05fTUFYX0NPVU5UXTsKKwlCT09MRUFOCQkJCQlFbmFibGVCZWFjb247CQkvLyB0cmlnZ2VyIHRvIGVuYWJsZSBiZWFjb24gdHJhbnNtaXNzaW9uLgorCVVDSEFSCQkJCQlCZWFjb25CaXRNYXA7CQkvLyBOT1RFOiBJZiB0aGUgTUFYX01CU1NJRF9OVU0gaXMgbGFyZ2VyIHRoYW4gOCwgdGhpcyBwYXJhbWV0ZXIgbmVlZCB0byBjaGFuZ2UuCisJVUNIQVIJCQkJCUR0aW1CaXRPbjsJCQkvLyBOT1RFOiBJZiB0aGUgTUFYX01CU1NJRF9OVU0gaXMgbGFyZ2VyIHRoYW4gOCwgdGhpcyBwYXJhbWV0ZXIgbmVlZCB0byBjaGFuZ2UuCit9QkVBQ09OX1NZTkNfU1RSVUNUOworI2VuZGlmIC8vIFJUMjg3MCAvLworCit0eXBlZGVmIHN0cnVjdCBfTVVMVElTU0lEX1NUUlVDVCB7CisJVUNIQVIJCQkJCQkJCUJzc2lkW01BQ19BRERSX0xFTl07CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3NpZExlbjsKKyAgICBDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF07CisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FwYWJpbGl0eUluZm87CisKKyAgICBQTkVUX0RFViAgICAgICAgICAgICAgICAgICAJCQlNU1NJRERldjsKKworCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgICAgIEF1dGhNb2RlOworCU5ESVNfODAyXzExX1dFUF9TVEFUVVMgICAgICAgICAgICAgIFdlcFN0YXR1czsKKwlORElTXzgwMl8xMV9XRVBfU1RBVFVTCQkJCUdyb3VwS2V5V2VwU3RhdHVzOworCVdQQV9NSVhfUEFJUl9DSVBIRVIJCQkJCVdwYU1peFBhaXJDaXBoZXI7CisKKwlVTE9ORwkJCQkJCQkJVHhDb3VudDsKKwlVTE9ORwkJCQkJCQkJUnhDb3VudDsKKwlVTE9ORwkJCQkJCQkJUmVjZWl2ZWRCeXRlQ291bnQ7CisJVUxPTkcJCQkJCQkJCVRyYW5zbWl0dGVkQnl0ZUNvdW50OworCVVMT05HCQkJCQkJCQlSeEVycm9yQ291bnQ7CisJVUxPTkcJCQkJCQkJCVJ4RHJvcENvdW50OworCisJSFRUUkFOU01JVF9TRVRUSU5HCQkJCQlIVFBoeU1vZGUsIE1heEhUUGh5TW9kZSwgTWluSFRQaHlNb2RlOy8vIEZvciB0cmFuc21pdCBwaHkgc2V0dGluZyBpbiBUWFdJLgorCVJUX0hUX1BIWV9JTkZPCQkJCQkJRGVzaXJlZEh0UGh5SW5mbzsKKwlERVNJUkVEX1RSQU5TTUlUX1NFVFRJTkcgICAgICAgIAlEZXNpcmVkVHJhbnNtaXRTZXR0aW5nOyAvLyBEZXNpcmVkIHRyYW5zbWl0IHNldHRpbmcuIHRoaXMgaXMgZm9yIHJlYWRpbmcgcmVnaXN0cnkgc2V0dGluZyBvbmx5LiBub3QgdXNlZnVsLgorCUJPT0xFQU4JCQkJCQkJCWJBdXRvVHhSYXRlU3dpdGNoOworCisJLy9DSVBIRVJfS0VZICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZWRLZXlbU0hBUkVfS0VZX05VTV07IC8vIHJlZiBwQWQtPlNoYXJlZEtleVtCU1NdWzRdCisJVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdEtleUlkOworCisJVUNIQVIJCQkJCQkJCVR4UmF0ZTsgICAgICAgLy8gUkFURV8xLCBSQVRFXzIsIFJBVEVfNV81LCBSQVRFXzExLCAuLi4KKwlVQ0hBUiAgICAgCQkJCQkJCURlc2lyZWRSYXRlc1tNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107Ly8gT0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTCisJVUNIQVIJCQkJCQkJCURlc2lyZWRSYXRlc0luZGV4OworCVVDSEFSICAgICAJCQkJCQkJTWF4VHhSYXRlOyAgICAgICAgICAgIC8vIFJBVEVfMSwgUkFURV8yLCBSQVRFXzVfNSwgUkFURV8xMQorCisvLwlVTE9ORyAgICAgICAgICAgCQkJCQlUaW1CaXRtYXA7ICAgICAgLy8gYml0MCBmb3IgYnJvYWRjYXN0LCAxIGZvciBBSUQxLCAyIGZvciBBSUQyLCAuLi5zbyBvbgorLy8gICAgVUxPTkcgICAgICAgICAgIAkJCQkJVGltQml0bWFwMjsgICAgIC8vIGIwIGZvciBBSUQzMiwgYjEgZm9yIEFJRDMzLCAuLi4gYW5kIHNvIG9uCisJVUNIQVIJCQkJCQkJCVRpbUJpdG1hcHNbV0xBTl9NQVhfTlVNX09GX1RJTV07CisKKyAgICAvLyBXUEEKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTUtbMzJdOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNS1szMl07CisJVUNIQVIJCQkJCQkJCUdUS1szMl07CisgICAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVFRTgwMjFYOworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZUF1dGg7CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR05vbmNlWzMyXTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3J0U2VjdXJlZDsKKyAgICBORElTXzgwMl8xMV9QUklWQUNZX0ZJTFRFUiAgICAgICAgICBQcml2YWN5RmlsdGVyOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJBTkNsYXNzM0RhdGE7CisgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNvbGF0ZUludGVyU3RhVHJhZmZpYzsKKworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJTTklFX0xlblsyXTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU05fSUVbMl1bTUFYX0xFTl9PRl9SU05JRV07CisKKworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgIAkJCVRpbUlFTG9jYXRpb25JbkJlYWNvbjsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAJCQlDYXBhYmlsaXR5SW5mb0xvY2F0aW9uSW5CZWFjb247CisgICAgLy8gb3V0Z29pbmcgQkVBQ09OIGZyYW1lIGJ1ZmZlciBhbmQgY29ycmVzcG9uZGluZyBUWFdJCisJLy8gUFRYV0lfU1RSVUMgICAgICAgICAgICAgICAgICAgICAgICAgICBCZWFjb25UeFdJOyAvLworICAgIENIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlYWNvbkJ1ZltNQVhfQkVBQ09OX1NJWkVdOyAvLyBOT1RFOiBCZWFjb25CdWYgc2hvdWxkIGJlIDQtYnl0ZSBhbGlnbmVkCisKKyAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiSGlkZVNzaWQ7CisJVUlOVDE2CQkJCQkJCQlTdGF0aW9uS2VlcEFsaXZlVGltZTsgLy8gdW5pdDogc2Vjb25kCisKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWTEFOX1ZJRDsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWTEFOX1ByaW9yaXR5OworCisgICAgUlRfODAyXzExX0FDTAkJCQkJCUFjY2Vzc0NvbnRyb2xMaXN0OworCisJLy8gRURDQSBRb3MKKyAgICBCT09MRUFOCQkJCQkJCQliV21tQ2FwYWJsZTsJLy8gMDpkaXNhYmxlIFdNTSwgMTplbmFibGUgV01NCisgICAgQk9PTEVBTgkJCQkJCQkJYkRMU0NhcGFibGU7CS8vIDA6ZGlzYWJsZSBETFMsIDE6ZW5hYmxlIERMUworCisJVUNIQVIgICAgICAgICAgIAkJCQkJRGxzUFRLWzY0XTsJCS8vIER1ZSB0byB3aW5kb3dzIGRpcnZlciBjb3VudCBvbiBtZWV0aW5naG91c2UgdG8gaGFuZGxlIDQtd2F5IHNoYWtlCisKKwkvLyBGb3IgODAyLjF4IGRhZW1vbiBzZXR0aW5nIHBlciBCU1MKKwlVQ0hBUgkJCQkJCQkJcmFkaXVzX3Nydl9udW07CisJUkFESVVTX1NSVl9JTkZPCQkJCQkJcmFkaXVzX3Nydl9pbmZvW01BWF9SQURJVVNfU1JWX05VTV07CisKKyNpZmRlZiBSVEw4NjVYX1NPQworCXVuc2lnbmVkIGludAkJCQkJCW15bGlua2lkOworI2VuZGlmCisKKworCVVJTlQzMgkJCQkJUmN2ZENvbmZsaWN0U3NpZENvdW50OworCVVJTlQzMgkJCQkJUmN2ZFNwb29mZWRBc3NvY1Jlc3BDb3VudDsKKwlVSU5UMzIJCQkJCVJjdmRTcG9vZmVkUmVhc3NvY1Jlc3BDb3VudDsKKwlVSU5UMzIJCQkJCVJjdmRTcG9vZmVkUHJvYmVSZXNwQ291bnQ7CisJVUlOVDMyCQkJCQlSY3ZkU3Bvb2ZlZEJlYWNvbkNvdW50OworCVVJTlQzMgkJCQkJUmN2ZFNwb29mZWREaXNhc3NvY0NvdW50OworCVVJTlQzMgkJCQkJUmN2ZFNwb29mZWRBdXRoQ291bnQ7CisJVUlOVDMyCQkJCQlSY3ZkU3Bvb2ZlZERlYXV0aENvdW50OworCVVJTlQzMgkJCQkJUmN2ZFNwb29mZWRVbmtub3duTWdtdENvdW50OworCVVJTlQzMgkJCQkJUmN2ZFJlcGxheUF0dGFja0NvdW50OworCisJQ0hBUgkJCQkJUnNzaU9mUmN2ZENvbmZsaWN0U3NpZDsKKwlDSEFSCQkJCQlSc3NpT2ZSY3ZkU3Bvb2ZlZEFzc29jUmVzcDsKKwlDSEFSCQkJCQlSc3NpT2ZSY3ZkU3Bvb2ZlZFJlYXNzb2NSZXNwOworCUNIQVIJCQkJCVJzc2lPZlJjdmRTcG9vZmVkUHJvYmVSZXNwOworCUNIQVIJCQkJCVJzc2lPZlJjdmRTcG9vZmVkQmVhY29uOworCUNIQVIJCQkJCVJzc2lPZlJjdmRTcG9vZmVkRGlzYXNzb2M7CisJQ0hBUgkJCQkJUnNzaU9mUmN2ZFNwb29mZWRBdXRoOworCUNIQVIJCQkJCVJzc2lPZlJjdmRTcG9vZmVkRGVhdXRoOworCUNIQVIJCQkJCVJzc2lPZlJjdmRTcG9vZmVkVW5rbm93bk1nbXQ7CisJQ0hBUgkJCQkJUnNzaU9mUmN2ZFJlcGxheUF0dGFjazsKKworCUJPT0xFQU4JCQkJCWJCY25TbnRSZXE7CisJVUNIQVIJCQkJCUJjbkJ1ZklkeDsKK30gTVVMVElTU0lEX1NUUlVDVCwgKlBNVUxUSVNTSURfU1RSVUNUOworCisKKworI2lmZGVmIERPVDExTl9EUkFGVDMKK3R5cGVkZWYgZW51bSBfQlNTMjA0MENPRVhJU1RfRkxBR3sKKwlCU1NfMjA0MF9DT0VYSVNUX0RJU0FCTEUgPSAwLAorCUJTU18yMDQwX0NPRVhJU1RfVElNRVJfRklSRUQgID0gMSwKKwlCU1NfMjA0MF9DT0VYSVNUX0lORk9fU1lOQyA9IDIsCisJQlNTXzIwNDBfQ09FWElTVF9JTkZPX05PVElGWSA9IDQsCit9QlNTMjA0MENPRVhJU1RfRkxBRzsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKy8vIGNvbmZpZ3VyYXRpb24gY29tbW9uIHRvIE9QTU9ERV9BUCBhcyB3ZWxsIGFzIE9QTU9ERV9TVEEKK3R5cGVkZWYgc3RydWN0IF9DT01NT05fQ09ORklHIHsKKworCUJPT0xFQU4JCWJDb3VudHJ5RmxhZzsKKwlVQ0hBUgkJQ291bnRyeUNvZGVbM107CisJVUNIQVIJCUdlb2dyYXBoeTsKKwlVQ0hBUiAgICAgICBDb3VudHJ5UmVnaW9uOyAgICAgIC8vIEVudW0gb2YgY291bnRyeSByZWdpb24sIDA6RkNDLCAxOklDLCAyOkVUU0ksIDM6U1BBSU4sIDQ6RnJhbmNlLCA1Ok1LSywgNjpNS0sxLCA3OklzcmFlbAorCVVDSEFSICAgICAgIENvdW50cnlSZWdpb25Gb3JBQmFuZDsJLy8gRW51bSBvZiBjb3VudHJ5IHJlZ2lvbiBmb3IgQSBiYW5kCisJVUNIQVIgICAgICAgUGh5TW9kZTsgICAgICAgICAgICAvLyBQSFlfMTFBLCBQSFlfMTFCLCBQSFlfMTFCR19NSVhFRCwgUEhZX0FCR19NSVhFRAorCVVTSE9SVCAgICAgIERzaWZzOyAgICAgICAgICAgICAgLy8gaW4gdW5pdHMgb2YgdXNlYworCVVMT05HICAgICAgIFBhY2tldEZpbHRlcjsgICAgICAgLy8gUGFja2V0IGZpbHRlciBmb3IgcmVjZWl2aW5nCisKKwlDSEFSICAgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF07IC8vIE5PVCBOVUxMLXRlcm1pbmF0ZWQKKwlVQ0hBUiAgICAgICBTc2lkTGVuOyAgICAgICAgICAgICAgIC8vIHRoZSBhY3R1YWwgc3NpZCBsZW5ndGggaW4gdXNlZAorCVVDSEFSICAgICAgIExhc3RTc2lkTGVuOyAgICAgICAgICAgICAgIC8vIHRoZSBhY3R1YWwgc3NpZCBsZW5ndGggaW4gdXNlZAorCUNIQVIgICAgICAgIExhc3RTc2lkW01BWF9MRU5fT0ZfU1NJRF07IC8vIE5PVCBOVUxMLXRlcm1pbmF0ZWQKKwlVQ0hBUgkJTGFzdEJzc2lkW01BQ19BRERSX0xFTl07CisKKwlVQ0hBUiAgICAgICBCc3NpZFtNQUNfQUREUl9MRU5dOworCVVTSE9SVCAgICAgIEJlYWNvblBlcmlvZDsKKwlVQ0hBUiAgICAgICBDaGFubmVsOworCVVDSEFSICAgICAgIENlbnRyYWxDaGFubmVsOyAgICAJLy8gQ2VudHJhbCBDaGFubmVsIHdoZW4gdXNpbmcgNDBNSHogaXMgaW5kaWNhdGluZy4gbm90IHJlYWwgY2hhbm5lbC4KKworCVVDSEFSICAgICAgIFN1cFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSICAgICAgIFN1cFJhdGVMZW47CisJVUNIQVIgICAgICAgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIgICAgICAgRXh0UmF0ZUxlbjsKKwlVQ0hBUiAgICAgICBEZXNpcmVSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsgICAgICAvLyBPSURfODAyXzExX0RFU0lSRURfUkFURVMKKwlVQ0hBUiAgICAgICBNYXhEZXNpcmVkUmF0ZTsKKwlVQ0hBUiAgICAgICBFeHBlY3RlZEFDS1JhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCisJVUxPTkcgICAgICAgQmFzaWNSYXRlQml0bWFwOyAgICAgICAgLy8gYmFja3VwIGJhc2ljIHJhdGViaXRtYXAKKworCUJPT0xFQU4JCWJBUFNEQ2FwYWJsZTsKKwlCT09MRUFOCQliSW5TZXJ2aWNlUGVyaW9kOworCUJPT0xFQU4JCWJBUFNEQUNfQkU7CisJQk9PTEVBTgkJYkFQU0RBQ19CSzsKKwlCT09MRUFOCQliQVBTREFDX1ZJOworCUJPT0xFQU4JCWJBUFNEQUNfVk87CisJQk9PTEVBTgkJYk5lZWRTZW5kVHJpZ2dlckZyYW1lOworCUJPT0xFQU4JCWJBUFNERm9yY2VQb3dlclNhdmU7CS8vIEZvcmNlIHBvd2VyIHNhdmUgbW9kZSwgc2hvdWxkIG9ubHkgdXNlIGluIEFQU0QtU1RBVVQKKwlVTE9ORwkJVHJpZ2dlclRpbWVyQ291bnQ7CisJVUNIQVIJCU1heFNQTGVuZ3RoOworCVVDSEFSCQlCQlBDdXJyZW50Qlc7CS8vIEJXXzEwLCAJQldfMjAsIEJXXzQwCisJLy8gbW92ZSB0byBNVUxUSVNTSURfU1RSVUNUIGZvciBNQlNTCisJLy9IVFRSQU5TTUlUX1NFVFRJTkcJSFRQaHlNb2RlLCBNYXhIVFBoeU1vZGUsIE1pbkhUUGh5TW9kZTsvLyBGb3IgdHJhbnNtaXQgcGh5IHNldHRpbmcgaW4gVFhXSS4KKwlSRUdfVFJBTlNNSVRfU0VUVElORyAgICAgICAgUmVnVHJhbnNtaXRTZXR0aW5nOyAvL3JlZ2lzdHJ5IHRyYW5zbWl0IHNldHRpbmcuIHRoaXMgaXMgZm9yIHJlYWRpbmcgcmVnaXN0cnkgc2V0dGluZyBvbmx5LiBub3QgdXNlZnVsLgorCS8vVUNIQVIgICAgICAgRml4ZWRUeE1vZGU7ICAgICAgICAgICAgICAvLyBGaXhlZCBUeCBNb2RlIChDQ0ssIE9GRE0pLCBmb3IgSFQgZml4ZWQgdHggbW9kZSAoR0YsIE1JWCkgLCByZWZlciB0byBSZWdUcmFuc21pdFNldHRpbmcuZmllbGQuSFRNb2RlCisJVUNIQVIgICAgICAgVHhSYXRlOyAgICAgICAgICAgICAgICAgLy8gU2FtZSB2YWx1ZSB0byBmaWxsIGluIFRYRC4gVHhSYXRlIGlzIDYtYml0CisJVUNIQVIgICAgICAgTWF4VHhSYXRlOyAgICAgICAgICAgICAgLy8gUkFURV8xLCBSQVRFXzIsIFJBVEVfNV81LCBSQVRFXzExCisJVUNIQVIgICAgICAgVHhSYXRlSW5kZXg7ICAgICAgICAgICAgLy8gVHggcmF0ZSBpbmRleCBpbiBSYXRlU3dpdGNoVGFibGUKKwlVQ0hBUiAgICAgICBUeFJhdGVUYWJsZVNpemU7ICAgICAgICAvLyBWYWxpZCBUeCByYXRlIHRhYmxlIHNpemUgaW4gUmF0ZVN3aXRjaFRhYmxlCisJLy9CT09MRUFOCQliQXV0b1R4UmF0ZVN3aXRjaDsKKwlVQ0hBUiAgICAgICBNaW5UeFJhdGU7ICAgICAgICAgICAgICAvLyBSQVRFXzEsIFJBVEVfMiwgUkFURV81XzUsIFJBVEVfMTEKKwlVQ0hBUiAgICAgICBSdHNSYXRlOyAgICAgICAgICAgICAgICAvLyBSQVRFX3h4eAorCUhUVFJBTlNNSVRfU0VUVElORwlNbG1lVHJhbnNtaXQ7ICAgLy8gTUdNVCBmcmFtZSBQSFkgcmF0ZSBzZXR0aW5nIHdoZW4gb3BlcmF0aW4gYXQgSHQgcmF0ZS4KKwlVQ0hBUiAgICAgICBNbG1lUmF0ZTsgICAgICAgICAgICAgICAvLyBSQVRFX3h4eCwgdXNlZCB0byBzZW5kIE1MTUUgZnJhbWVzCisJVUNIQVIgICAgICAgQmFzaWNNbG1lUmF0ZTsgICAgICAgICAgLy8gRGVmYXVsdCBSYXRlIGZvciBzZW5kaW5nIE1MTUUgZnJhbWVzCisKKwlVU0hPUlQgICAgICBSdHNUaHJlc2hvbGQ7ICAgICAgICAgICAvLyBpbiB1bml0IG9mIEJZVEUKKwlVU0hPUlQgICAgICBGcmFnbWVudFRocmVzaG9sZDsgICAgICAvLyBpbiB1bml0IG9mIEJZVEUKKworCVVDSEFSICAgICAgIFR4UG93ZXI7ICAgICAgICAgICAgICAgIC8vIGluIHVuaXQgb2YgbVcKKwlVTE9ORyAgICAgICBUeFBvd2VyUGVyY2VudGFnZTsgICAgICAvLyAwfjEwMCAlCisJVUxPTkcgICAgICAgVHhQb3dlckRlZmF1bHQ7ICAgICAgICAgLy8ga2VlcCBmb3IgVHhQb3dlclBlcmNlbnRhZ2UKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUJBQ0FQX1NUUlVDICAgICAgICBCQUNhcGFiaWxpdHk7IC8vICAgTk8gVVNFID0gMFhGRiAgOyAgSU1NRURfQkEgPTEgIDsgIERFTEFZX0JBPTAKKwlCQUNBUF9TVFJVQyAgICAgICAgUkVHQkFDYXBhYmlsaXR5OyAvLyAgIE5PIFVTRSA9IDBYRkYgIDsgIElNTUVEX0JBID0xICA7ICBERUxBWV9CQT0wCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJSU9UX1NUUlVDCQlJT1Rlc3RQYXJtOwkvLyA4MDIuMTFuIEludGVyT3BiaWxpdHkgVGVzdCBQYXJhbWV0ZXI7CisJVUxPTkcgICAgICAgVHhQcmVhbWJsZTsgICAgICAgICAgICAgLy8gUnQ4MDJfMTFQcmVhbWJsZUxvbmcsIFJ0ODAyXzExUHJlYW1ibGVTaG9ydCwgUnQ4MDJfMTFQcmVhbWJsZUF1dG8KKwlCT09MRUFOICAgICBiVXNlWmVyb1RvRGlzYWJsZUZyYWdtZW50OyAgICAgLy8gTWljcm9zb2Z0IHVzZSAwIGFzIGRpc2FibGUKKwlVTE9ORyAgICAgICBVc2VCR1Byb3RlY3Rpb247ICAgICAgICAvLyAwOiBhdXRvLCAxOiBhbHdheXMgdXNlLCAyOiBhbHdheXMgbm90IHVzZQorCUJPT0xFQU4gICAgIGJVc2VTaG9ydFNsb3RUaW1lOyAgICAgIC8vIDA6IGRpc2FibGUsIDEgLSB1c2Ugc2hvcnQgc2xvdCAoOXVzKQorCUJPT0xFQU4gICAgIGJFbmFibGVUeEJ1cnN0OyAgICAgICAgIC8vIDE6IGVuYmxlIFRYIFBBQ0tFVCBCVVJTVCwgMDogZGlzYWJsZSBUWCBQQUNLRVQgQlVSU1QKKwlCT09MRUFOICAgICBiQWdncmVnYXRpb25DYXBhYmxlOyAgICAgIC8vIDE6IGVuYWJsZSBUWCBhZ2dyZWdhdGlvbiB3aGVuIHRoZSBwZWVyIHN1cHBvcnRzIGl0CisJQk9PTEVBTiAgICAgYlBpZ2d5QmFja0NhcGFibGU7CQkvLyAxOiBlbmFibGUgVFggcGlnZ3ktYmFjayBhY2NvcmRpbmcgTUFDJ3MgdmVyc2lvbgorCUJPT0xFQU4gICAgIGJJRUVFODAyMTFIOwkJCS8vIDE6IGVuYWJsZSBJRUVFODAyLjExaCBzcGVjLgorCVVMT05HCQlEaXNhYmxlT0xCQ0RldGVjdDsJCS8vIDA6IGVuYWJsZSBPTEJDIGRldGVjdDsgMSBkaXNhYmxlIE9MQkMgZGV0ZWN0CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlCT09MRUFOCQkJCWJSZGc7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJQk9PTEVBTiAgICAgICAgICAgICBiV21tQ2FwYWJsZTsgICAgICAgIC8vIDA6ZGlzYWJsZSBXTU0sIDE6ZW5hYmxlIFdNTQorCVFPU19DQVBBQklMSVRZX1BBUk0gQVBRb3NDYXBhYmlsaXR5OyAgICAvLyBRT1MgY2FwYWJpbGl0eSBvZiB0aGUgY3VycmVudCBhc3NvY2lhdGVkIEFQCisJRURDQV9QQVJNICAgICAgICAgICBBUEVkY2FQYXJtOyAgICAgICAgIC8vIEVEQ0EgcGFyYW1ldGVycyBvZiB0aGUgY3VycmVudCBhc3NvY2lhdGVkIEFQCisJUUJTU19MT0FEX1BBUk0gICAgICBBUFFic3NMb2FkOyAgICAgICAgIC8vIFFCU1MgbG9hZCBvZiB0aGUgY3VycmVudCBhc3NvY2lhdGVkIEFQCisJVUNIQVIgICAgICAgICAgICAgICBBY2tQb2xpY3lbNF07ICAgICAgIC8vIEFDSyBwb2xpY3kgb2YgdGhlIHNwZWNpZmllZCBBQy4gc2VlIEFDS194eHgKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlCT09MRUFOCQkJCWJETFNDYXBhYmxlOwkJLy8gMDpkaXNhYmxlIERMUywgMTplbmFibGUgRExTCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJLy8gYSBiaXRtYXAgb2YgQk9PTEVBTiBmbGFncy4gZWFjaCBiaXQgcmVwcmVzZW50IGFuIG9wZXJhdGlvbiBzdGF0dXMgb2YgYSBwYXJ0aWN1bGFyCisJLy8gQk9PTEVBTiBjb250cm9sLCBlaXRoZXIgT04gb3IgT0ZGLiBUaGVzZSBmbGFncyBzaG91bGQgYWx3YXlzIGJlIGFjY2Vzc2VkIHZpYQorCS8vIE9QU1RBVFVTX1RFU1RfRkxBRygpLCBPUFNUQVRVU19TRVRfRkxBRygpLCBPUF9TVEFUVVNfQ0xFQVJfRkxBRygpIG1hY3Jvcy4KKwkvLyBzZWUgZk9QX1NUQVRVU194eHggaW4gUlRNUF9ERUYuQyBmb3IgZGV0YWlsIGJpdCBkZWZpbml0aW9uCisJVUxPTkcgICAgICAgICAgICAgICBPcFN0YXR1c0ZsYWdzOworCisJQk9PTEVBTgkJCQlOZGlzUmFkaW9TdGF0ZU9mZjsgLy9Gb3IgSENUIDEyLjAsIHNldCB0aGlzIGZsYWcgdG8gVFJVRSBpbnN0ZWFkIG9mIGNhbGxlZCBNbG1lUmFkaW9PZmYuCisJQUJHQkFORF9TVEFURQkJQmFuZFN0YXRlOwkJLy8gRm9yIHNldHRpbmcgQkJQIHVzZWQgb24gQi9HIG9yIEEgbW9kZS4KKwlCT09MRUFOCQkJCWJSeEFudERpdmVyc2l0eTsgLy8gMDpkaXNhYmxlLCAxOmVuYWJsZSBTb2Z0d2FyZSBSeCBBbnRlbm5hIERpdmVyc2l0eS4KKworCS8vIElFRUU4MDIuMTFILS1ERlMuCisJUkFEQVJfREVURUNUX1NUUlVDVAlSYWRhckRldGVjdDsKKworI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQKKwlDQVJSSUVSX0RFVEVDVElPTgkJQ2FycmllckRldGVjdDsKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkvLyBIVAorCVVDSEFSCQkJQkFTaXplOwkJLy8gVVNlciBkZXNpcmVkIEJBV2luZG93U2l6ZS4gU2hvdWxkIG5vdCBleGNlZWQgb3VyIG1heCBjYXBhYmlsaXR5CisJLy9SVF9IVF9DQVBBQklMSVRZCVN1cHBvcnRlZEh0UGh5OworCVJUX0hUX0NBUEFCSUxJVFkJRGVzaXJlZEh0UGh5OworCUhUX0NBUEFCSUxJVFlfSUUJCUh0Q2FwYWJpbGl0eTsKKwlBRERfSFRfSU5GT19JRQkJQWRkSFRJbmZvOwkvLyBVc2VmdWwgYXMgQVAuCisJLy9UaGlzIElFIGlzIHVzZWQgd2l0aCBjaGFubmVsIHN3aXRjaCBhbm5vdW5jZW1lbnQgZWxlbWVudCB3aGVuIGNoYW5naW5nIHRvIGEgbmV3IDQwTUh6LgorCS8vVGhpcyBJRSBpcyBpbmNsdWRlZCBpbiBjaGFubmVsIHN3aXRjaCBhbW1vdW5jZW1lbnQgZnJhbWVzIDcuNC4xLjUsIGJlYWNvbnMsIHByb2JlIFJzcC4KKwlORVdfRVhUX0NIQU5fSUUJTmV3RXh0Q2hhbk9mZnNldDsJLy83LjMuMi4yMEEsIDEgaWYgZXh0ZW5zaW9uIGNoYW5uZWwgaXMgYWJvdmUgdGhlIGNvbnRyb2wgY2hhbm5lbCwgMyBpZiBiZWxvdywgMCBpZiBub3QgcHJlc2VudAorCisjaWZkZWYgRE9UMTFOX0RSQUZUMworCVVDSEFSCQkJCQlCc3MyMDQwQ29leGlzdEZsYWc7CQkvLyBiaXQgMDogYkJzc0NvZXhpc3RUaW1lclJ1bm5pbmcsIGJpdCAxOiBOZWVkU3luY0FkZEh0SW5mby4KKwlSQUxJTktfVElNRVJfU1RSVUNUCUJzczIwNDBDb2V4aXN0VGltZXI7CisKKwkvL1RoaXMgSUUgaXMgdXNlZCBmb3IgMjAvNDAgQlNTIENvZXhpc3RlbmNlLgorCUJTU18yMDQwX0NPRVhJU1RfSUUJCUJTUzIwNDBDb2V4aXN0SW5mbzsKKwkvLyA9PT09PT0gMTFuIEQzLjAgPT09PT09PT09PT09PT09PT09PT09PT0+CisJVVNIT1JUCQkJCQlEb3QxMU9Cc3NTY2FuUGFzc2l2ZUR3ZWxsOwkJCQkvLyBVbml0IDogVFUuIDV+MTAwMAorCVVTSE9SVAkJCQkJRG90MTFPQnNzU2NhbkFjdGl2ZUR3ZWxsOwkJCQkvLyBVbml0IDogVFUuIDEwfjEwMDAKKwlVU0hPUlQJCQkJCURvdDExQnNzV2lkdGhUcmlnZ2VyU2NhbkludDsJCQkvLyBVbml0IDogU2Vjb25kCisJVVNIT1JUCQkJCQlEb3QxMU9Cc3NTY2FuUGFzc2l2ZVRvdGFsUGVyQ2hhbm5lbDsJLy8gVW5pdCA6IFRVLiAyMDB+MTAwMDAKKwlVU0hPUlQJCQkJCURvdDExT0Jzc1NjYW5BY3RpdmVUb3RhbFBlckNoYW5uZWw7CS8vIFVuaXQgOiBUVS4gMjB+MTAwMDAKKwlVU0hPUlQJCQkJCURvdDExQnNzV2lkdGhDaGFuVHJhbkRlbGF5RmFjdG9yOworCVVTSE9SVAkJCQkJRG90MTFPQnNzU2NhbkFjdGl2aXR5VGhyZTsJCQkJLy8gVW5pdCA6IHBlcmNlbnRhZ2UKKworCVVMT05HCQkJCQlEb3QxMUJzc1dpZHRoQ2hhblRyYW5EZWxheTsJCQkvLyBtdWx0aXBsZSBvZiAoRG90MTFCc3NXaWR0aFRyaWdnZXJTY2FuSW50ICogRG90MTFCc3NXaWR0aENoYW5UcmFuRGVsYXlGYWN0b3IpCisJVUxPTkcJCQkJCUNvdW50RG93bkN0cjsJLy8gQ291bnREb3duIENvdW50ZXIgZnJvbSAoRG90MTFCc3NXaWR0aFRyaWdnZXJTY2FuSW50ICogRG90MTFCc3NXaWR0aENoYW5UcmFuRGVsYXlGYWN0b3IpCisKKwlORElTX1NQSU5fTE9DSyAgICAgICAgICBUcmlnZ2VyRXZlbnRUYWJMb2NrOworCUJTU18yMDQwX0NPRVhJU1RfSUUJCUxhc3RCU1NDb2V4aXN0MjA0MDsKKwlCU1NfMjA0MF9DT0VYSVNUX0lFCQlCU1NDb2V4aXN0MjA0MDsKKwlUUklHR0VSX0VWRU5UX1RBQgkJVHJpZ2dlckV2ZW50VGFiOworCVVDSEFSCQkJCQlDaGFubmVsTGlzdElkeDsKKwkvLyA8PT09PT09IDExbiBEMy4wID09PT09PT09PT09PT09PT09PT09PT09CisJQk9PTEVBTgkJCQkJYk92ZXJsYXBTY2FubmluZzsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKKyAgICBCT09MRUFOICAgICAgICAgICAgICAgICBiSFRQcm90ZWN0OworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgIGJNSU1PUFNFbmFibGU7CisgICAgQk9PTEVBTgkJCQkJYkJBRGVjbGluZTsKKwlCT09MRUFOCQkJCQliRGlzYWJsZVJlb3JkZXJpbmc7CisJQk9PTEVBTgkJCQkJYkZvcnR5X01oel9JbnRvbGVyYW50OworCUJPT0xFQU4JCQkJCWJFeHRDaGFubmVsU3dpdGNoQW5ub3VuY2VtZW50OworCUJPT0xFQU4JCQkJCWJSY3ZCU1NXaWR0aFRyaWdnZXJFdmVudHM7CisJVUxPTkcJCQkJCUxhc3RSY3ZCU1NXaWR0aFRyaWdnZXJFdmVudHNUaW1lOworCisJVUNIQVIJCQkJCVR4QkFTaXplOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJLy8gRW5hYmxlIHdpcmVsZXNzIGV2ZW50CisJQk9PTEVBTgkJCQliV2lyZWxlc3NFdmVudDsKKwlCT09MRUFOCQkJCWJXaUZpVGVzdDsJCQkJLy8gRW5hYmxlIHRoaXMgcGFyYW1ldGVyIGZvciBXaUZpIHRlc3QKKworCS8vIFR4ICYgUnggU3RyZWFtIG51bWJlciBzZWxlY3Rpb24KKwlVQ0hBUgkJCQlUeFN0cmVhbTsKKwlVQ0hBUgkJCQlSeFN0cmVhbTsKKworCS8vIHRyYW5zbWl0IHBoeSBtb2RlLCB0cmFzbWl0IHJhdGUgZm9yIE11bHRpY2FzdC4KKyNpZmRlZiBNQ0FTVF9SQVRFX1NQRUNJRklDCisJVUNIQVIJCQkJTWNhc3RUcmFuc21pdE1jczsKKwlVQ0hBUgkJCQlNY2FzdFRyYW5zbWl0UGh5TW9kZTsKKyNlbmRpZiAvLyBNQ0FTVF9SQVRFX1NQRUNJRklDIC8vCisKKwlCT09MRUFOICAgICAJCWJIYXJkd2FyZVJhZGlvOyAgICAgLy8gSGFyZHdhcmUgY29udHJvbGxlZCBSYWRpbyBlbmFibGVkCisKKyNpZmRlZiBSVDI4NzAKKwlCT09MRUFOICAgICAJCWJNdWx0aXBsZUlSUDsgICAgICAgLy8gTXVsdGlwbGUgQnVsayBJTiBmbGFnCisJVUNIQVIgICAgICAgCQlOdW1PZkJ1bGtJbklSUDsgICAgIC8vIGlmIGJNdWx0aXBsZUlSUCA9PSBUUlVFLCBOdW1PZkJ1bGtJbklSUCB3aWxsIGJlIDQgb3RoZXJ3aXNlIGJlIDEKKyAJUlRfSFRfQ0FQQUJJTElUWQlTdXBwb3J0ZWRIdFBoeTsKKwlVTE9ORwkJCQlNYXhQa3RPbmVUeEJ1bGs7CisJVUNIQVIJCQkJVHhCdWxrRmFjdG9yOworCVVDSEFSCQkJCVJ4QnVsa0ZhY3RvcjsKKworCUJFQUNPTl9TWU5DX1NUUlVDVAkqcEJlYWNvblN5bmM7CisJUkFMSU5LX1RJTUVSX1NUUlVDVAlCZWFjb25VcGRhdGVUaW1lcjsKKwlVSU5UMzIJCQkJQmVhY29uQWRqdXN0OworCVVJTlQzMgkJCQlCZWFjb25GYWN0b3I7CisJVUlOVDMyCQkJCUJlYWNvblJlbWFpbjsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisgCU5ESVNfU1BJTl9MT0NLCQkJTWVhc3VyZVJlcVRhYkxvY2s7CisJUE1FQVNVUkVfUkVRX1RBQgkJcE1lYXN1cmVSZXFUYWI7CisKKwlORElTX1NQSU5fTE9DSwkJCVRwY1JlcVRhYkxvY2s7CisJUFRQQ19SRVFfVEFCCQkJcFRwY1JlcVRhYjsKKworCS8vIHRyYW5zbWl0IHBoeSBtb2RlLCB0cmFzbWl0IHJhdGUgZm9yIE11bHRpY2FzdC4KKyNpZmRlZiBNQ0FTVF9SQVRFX1NQRUNJRklDCisJSFRUUkFOU01JVF9TRVRUSU5HCQlNQ2FzdFBoeU1vZGU7CisjZW5kaWYgLy8gTUNBU1RfUkFURV9TUEVDSUZJQyAvLworCisjaWZkZWYgU0lOR0xFX1NLVQorCVVJTlQxNgkJCQkJRGVmaW5lTWF4VHhQd3I7CisjZW5kaWYgLy8gU0lOR0xFX1NLVSAvLworCisKK30gQ09NTU9OX0NPTkZJRywgKlBDT01NT05fQ09ORklHOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8qIE1vZGlmaWVkIGJ5IFd1IFhpLUt1biA0LzIxLzIwMDYgKi8KKy8vIFNUQSBjb25maWd1cmF0aW9uIGFuZCBzdGF0dXMKK3R5cGVkZWYgc3RydWN0IF9TVEFfQURNSU5fQ09ORklHIHsKKwkvLyBHUk9VUCAxIC0KKwkvLyAgIFVzZXIgY29uZmlndXJhdGlvbiBsb2FkZWQgZnJvbSBSZWdpc3RyeSwgRTJQUk9NIG9yIE9JRF94eHguIFRoZXNlIHNldHRpbmdzIGRlc2NyaWJlCisJLy8gICB0aGUgdXNlciBpbnRlbmRlZCBjb25maWd1cmF0aW9uLCBidXQgbm90IG5lY2Vzc2FyeSBmdWxseSBlcXVhbCB0byB0aGUgZmluYWwKKwkvLyAgIHNldHRpbmdzIGluIEFDVElWRSBCU1MgYWZ0ZXIgbmVnb3RpYXRpb24vY29tcHJvbWl6ZSB3aXRoIHRoZSBCU1MgaG9sZGVyIChlaXRoZXIKKwkvLyAgIEFQIG9yIElCU1MgaG9sZGVyKS4KKwkvLyAgIE9uY2UgaW5pdGlhbGl6ZWQsIHVzZXIgY29uZmlndXJhdGlvbiBjYW4gb25seSBiZSBjaGFuZ2VkIHZpYSBPSURfeHh4CisJVUNIQVIgICAgICAgQnNzVHlwZTsgICAgICAgICAgICAgIC8vIEJTU19JTkZSQSBvciBCU1NfQURIT0MKKwlVU0hPUlQgICAgICBBdGltV2luOyAgICAgICAgICAvLyB1c2VkIHdoZW4gc3RhcnRpbmcgYSBuZXcgSUJTUworCisJLy8gR1JPVVAgMiAtCisJLy8gICBVc2VyIGNvbmZpZ3VyYXRpb24gbG9hZGVkIGZyb20gUmVnaXN0cnksIEUyUFJPTSBvciBPSURfeHh4LiBUaGVzZSBzZXR0aW5ncyBkZXNjcmliZQorCS8vICAgdGhlIHVzZXIgaW50ZW5kZWQgY29uZmlndXJhdGlvbiwgYW5kIHNob3VsZCBiZSBhbHdheXMgYXBwbGllZCB0byB0aGUgZmluYWwKKwkvLyAgIHNldHRpbmdzIGluIEFDVElWRSBCU1Mgd2l0aG91dCBjb21wcm9taXNpbmcgd2l0aCB0aGUgQlNTIGhvbGRlci4KKwkvLyAgIE9uY2UgaW5pdGlhbGl6ZWQsIHVzZXIgY29uZmlndXJhdGlvbiBjYW4gb25seSBiZSBjaGFuZ2VkIHZpYSBPSURfeHh4CisJVUNIQVIgICAgICAgUnNzaVRyaWdnZXI7CisJVUNIQVIgICAgICAgUnNzaVRyaWdnZXJNb2RlOyAgICAgIC8vIFJTU0lfVFJJR0dFUkVEX1VQT05fQkVMT1dfVEhSRVNIT0xEIG9yIFJTU0lfVFJJR0dFUkVEX1VQT05fRVhDQ0VFRF9USFJFU0hPTEQKKwlVU0hPUlQgICAgICBEZWZhdWx0TGlzdGVuQ291bnQ7ICAgLy8gZGVmYXVsdCBsaXN0ZW4gY291bnQ7CisJVUxPTkcgICAgICAgV2luZG93c1Bvd2VyTW9kZTsgICAgICAgICAgIC8vIFBvd2VyIG1vZGUgZm9yIEFDIHBvd2VyCisJVUxPTkcgICAgICAgV2luZG93c0JhdHRlcnlQb3dlck1vZGU7ICAgIC8vIFBvd2VyIG1vZGUgZm9yIGJhdHRlcnkgaWYgZXhpc3RzCisJQk9PTEVBTiAgICAgYldpbmRvd3NBQ0NBTUVuYWJsZTsgICAgICAgIC8vIEVuYWJsZSBDQU0gcG93ZXIgbW9kZSB3aGVuIEFDIG9uCisJQk9PTEVBTiAgICAgYkF1dG9SZWNvbm5lY3Q7ICAgICAgICAgLy8gU2V0IHRvIFRSVUUgd2hlbiBzZXR0aW5nIE9JRF84MDJfMTFfU1NJRCB3aXRoIG5vIG1hdGNoaW5nIEJTU0lECisJVUxPTkcgICAgICAgV2luZG93c1Bvd2VyUHJvZmlsZTsgICAgLy8gV2luZG93cyBwb3dlciBwcm9maWxlLCBmb3IgTkRJUzUuMSBQblAKKworCS8vIE1JQjppZWVlODAyZG90MTEuZG90MTFzbXQoMSkuZG90MTFTdGF0aW9uQ29uZmlnVGFibGUoMSkKKwlVU0hPUlQgICAgICBQc207ICAgICAgICAgICAgICAgICAgLy8gcG93ZXIgbWFuYWdlbWVudCBtb2RlICAgKFBXUl9BQ1RJVkV8UFdSX1NBVkUpCisJVVNIT1JUICAgICAgRGlzYXNzb2NSZWFzb247CisJVUNIQVIgICAgICAgRGlzYXNzb2NTdGFbTUFDX0FERFJfTEVOXTsKKwlVU0hPUlQgICAgICBEZWF1dGhSZWFzb247CisJVUNIQVIgICAgICAgRGVhdXRoU3RhW01BQ19BRERSX0xFTl07CisJVVNIT1JUICAgICAgQXV0aEZhaWxSZWFzb247CisJVUNIQVIgICAgICAgQXV0aEZhaWxTdGFbTUFDX0FERFJfTEVOXTsKKworCU5ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSICAgICAgICAgIFByaXZhY3lGaWx0ZXI7ICAvLyBQcml2YWN5RmlsdGVyIGVudW0gZm9yIDgwMi4xWAorCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgICAgIEF1dGhNb2RlOyAgICAgICAvLyBUaGlzIHNob3VsZCBtYXRjaCB0byB3aGF0ZXZlciBtaWNyb3NvZnQgZGVmaW5lZAorCU5ESVNfODAyXzExX1dFUF9TVEFUVVMgICAgICAgICAgICAgIFdlcFN0YXR1czsKKwlORElTXzgwMl8xMV9XRVBfU1RBVFVTCQkJCU9yaWdXZXBTdGF0dXM7CS8vIE9yaWdpbmFsIHdlcCBzdGF0dXMgc2V0IGZyb20gT0lECisKKwkvLyBBZGQgdG8gc3VwcG9ydCBkaWZmZXJlbnQgY2lwaGVyIHN1aXRlIGZvciBXUEEyL1dQQSBtb2RlCisJTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJCUdyb3VwQ2lwaGVyOwkJLy8gTXVsdGljYXN0IGNpcGhlciBzdWl0ZQorCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCQlQYWlyQ2lwaGVyOwkJCS8vIFVuaWNhc3QgY2lwaGVyIHN1aXRlCisJQk9PTEVBTgkJCQkJCQkJYk1peENpcGhlcjsJCQkvLyBJbmRpY2F0ZSBjdXJyZW50IFBhaXIgJiBHcm91cCB1c2UgZGlmZmVyZW50IGNpcGhlciBzdWl0ZXMKKwlVU0hPUlQJCQkJCQkJCVJzbkNhcGFiaWxpdHk7CisKKwlORElTXzgwMl8xMV9XRVBfU1RBVFVTICAgICAgICAgICAgICBHcm91cEtleVdlcFN0YXR1czsKKworCVVDSEFSCQlQTUtbMzJdOyAgICAgICAgICAgICAgICAvLyBXUEEgUFNLIG1vZGUgUE1LCisJVUNIQVIgICAgICAgUFRLWzY0XTsgICAgICAgICAgICAgICAgLy8gV1BBIFBTSyBtb2RlIFBUSworCVVDSEFSCQlHVEtbMzJdOwkJCQkvLyBHVEsgZnJvbSBhdXRoZW50aWNhdG9yCisJQlNTSURfSU5GTwlTYXZlZFBNS1tQTUtJRF9OT107CisJVUlOVAkJU2F2ZWRQTUtOdW07CQkJLy8gU2F2ZWQgUE1LSUQgbnVtYmVyCisKKwlVQ0hBUgkJRGVmYXVsdEtleUlkOworCisKKwkvLyBXUEEgODAyLjF4IHBvcnQgY29udHJvbCwgV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQsIFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRAorCVVDSEFSICAgICAgIFBvcnRTZWN1cmVkOworCisJLy8gRm9yIFdQQSBjb3VudGVybWVhc3VyZXMKKwlVTE9ORyAgICAgICBMYXN0TWljRXJyb3JUaW1lOyAgIC8vIHJlY29yZCBsYXN0IE1JQyBlcnJvciB0aW1lCisJVUxPTkcgICAgICAgTWljRXJyQ250OyAgICAgICAgICAvLyBTaG91bGQgYmUgMCwgMSwgMiwgdGhlbiByZXNldCB0byB6ZXJvIChhZnRlciBkaXNhc3NvaWNpYXRpb24pLgorCUJPT0xFQU4gICAgIGJCbG9ja0Fzc29jOyAgICAgICAgLy8gQmxvY2sgYXNzb2NpYXRlIGF0dGVtcHQgZm9yIDYwIHNlY29uZHMgYWZ0ZXIgY291bnRlciBtZWFzdXJlIG9jY3VycmVkLgorCS8vIEZvciBXUEEtUFNLIHN1cHBsaWNhbnQgc3RhdGUKKwlXUEFfU1RBVEUgICBXcGFTdGF0ZTsgICAgICAgICAgIC8vIERlZmF1bHQgaXMgU1NfTk9UVVNFIGFuZCBoYW5kbGVkIGJ5IG1pY3Jvc29mdCA4MDIuMXgKKwlVQ0hBUiAgICAgICBSZXBsYXlDb3VudGVyWzhdOworCVVDSEFSICAgICAgIEFOb25jZVszMl07ICAgICAgICAgLy8gQU5vbmNlIGZvciBXUEEtUFNLIGZyb20gYXVyaGVudGljYXRvcgorCVVDSEFSICAgICAgIFNOb25jZVszMl07ICAgICAgICAgLy8gU05vbmNlIGZvciBXUEEtUFNLCisKKwlVQ0hBUiAgICAgICBMYXN0U05SMDsgICAgICAgICAgICAgLy8gbGFzdCByZWNlaXZlZCBCRUFDT04ncyBTTlIKKwlVQ0hBUiAgICAgICBMYXN0U05SMTsgICAgICAgICAgICAvLyBsYXN0IHJlY2VpdmVkIEJFQUNPTidzIFNOUiBmb3IgMm5kICBhbnRlbm5hCisJUlNTSV9TQU1QTEUgUnNzaVNhbXBsZTsKKwlVTE9ORyAgICAgICBOdW1PZkF2Z1Jzc2lTYW1wbGU7CisKKwlVTE9ORyAgICAgICBMYXN0QmVhY29uUnhUaW1lOyAgICAgLy8gT1MncyB0aW1lc3RhbXAgb2YgdGhlIGxhc3QgQkVBQ09OIFJYIHRpbWUKKwlVTE9ORyAgICAgICBMYXN0MTFiQmVhY29uUnhUaW1lOyAgLy8gT1MncyB0aW1lc3RhbXAgb2YgdGhlIGxhc3QgMTFCIEJFQUNPTiBSWCB0aW1lCisJVUxPTkcJCUxhc3QxMWdCZWFjb25SeFRpbWU7CS8vIE9TJ3MgdGltZXN0YW1wIG9mIHRoZSBsYXN0IDExRyBCRUFDT04gUlggdGltZQorCVVMT05HCQlMYXN0MjBOQmVhY29uUnhUaW1lOwkvLyBPUydzIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCAyME1IeiBOIEJFQUNPTiBSWCB0aW1lCisKKwlVTE9ORyAgICAgICBMYXN0U2NhblRpbWU7ICAgICAgIC8vIFJlY29yZCBsYXN0IHNjYW4gdGltZSBmb3IgaXNzdWUgQlNTSURfU0NBTl9MSVNUCisJVUxPTkcgICAgICAgU2NhbkNudDsgICAgICAgICAgICAvLyBTY2FuIGNvdW50cyBzaW5jZSBtb3N0IHJlY2VudCBTU0lELCBCU1NJRCwgU0NBTiBPSUQgcmVxdWVzdAorCUJPT0xFQU4gICAgIGJTd1JhZGlvOyAgICAgICAgICAgLy8gU29mdHdhcmUgY29udHJvbGxlZCBSYWRpbyBPbi9PZmYsIFRSVUU6IE9uCisJQk9PTEVBTiAgICAgYkh3UmFkaW87ICAgICAgICAgICAvLyBIYXJkd2FyZSBjb250cm9sbGVkIFJhZGlvIE9uL09mZiwgVFJVRTogT24KKwlCT09MRUFOICAgICBiUmFkaW87ICAgICAgICAgICAgIC8vIFJhZGlvIHN0YXRlLCBBbmQgb2YgU3cgJiBIdyByYWRpbyBzdGF0ZQorCUJPT0xFQU4gICAgIGJIYXJkd2FyZVJhZGlvOyAgICAgLy8gSGFyZHdhcmUgY29udHJvbGxlZCBSYWRpbyBlbmFibGVkCisJQk9PTEVBTiAgICAgYlNob3dIaWRkZW5TU0lEOyAgICAvLyBTaG93IGFsbCBrbm93biBTU0lEIGluIFNTSUQgbGlzdCBnZXQgb3BlcmF0aW9uCisKKyAgICAvL0JPT0xFQU4JCUFkaG9jQk9ubHlKb2luZWQ7CS8vIEluZGljYXRlIEFkaG9jIEIgSm9pbi4KKyAgICAvL0JPT0xFQU4JCUFkaG9jQkdKb2luZWQ7CQkvLyBJbmRpY2F0ZSBBZGhvYyBCL0cgSm9pbi4KKyAgICAvL0JPT0xFQU4JCUFkaG9jMjBOSm9pbmVkOwkJLy8gSW5kaWNhdGUgQWRob2MgMjBNSHogTiBKb2luLgorCisJLy8gTmV3IGZvciBXUEEsIHdpbmRvd3Mgd2FudCB1cyB0byB0byBrZWVwIGFzc29jaWF0aW9uIGluZm9ybWF0aW9uIGFuZAorCS8vIEZpeGVkIElFcyBmcm9tIGxhc3QgYXNzb2NpYXRpb24gcmVzcG9uc2UKKwlORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTiAgICAgQXNzb2NJbmZvOworCVVTSE9SVCAgICAgICBSZXFWYXJJRUxlbjsgICAgICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIG5leHQgVklFIGluY2x1ZGUgRUlEICYgTGVuZ3RoCisJVUNIQVIgICAgICAgUmVxVmFySUVzW01BWF9WSUVfTEVOXTsJCS8vIFRoZSBjb250ZW50IHNhdmVkIGhlcmUgc2hvdWxkIGJlIGxpdHRsZS1lbmRpYW4gZm9ybWF0LgorCVVTSE9SVCAgICAgICBSZXNWYXJJRUxlbjsgICAgICAgICAgICAgICAgLy8gTGVuZ3RoIG9mIG5leHQgVklFIGluY2x1ZGUgRUlEICYgTGVuZ3RoCisJVUNIQVIgICAgICAgUmVzVmFySUVzW01BWF9WSUVfTEVOXTsKKworCVVDSEFSICAgICAgIFJTTklFX0xlbjsKKwlVQ0hBUiAgICAgICBSU05fSUVbTUFYX0xFTl9PRl9SU05JRV07CS8vIFRoZSBjb250ZW50IHNhdmVkIGhlcmUgc2hvdWxkIGJlIGxpdHRsZS1lbmRpYW4gZm9ybWF0LgorCisJLy8gTmV3IHZhcmlhYmxlcyB1c2VkIGZvciBDQ1ggMS4wCisJQk9PTEVBTiAgICAgICAgICAgICBiQ2tpcE9uOworCUJPT0xFQU4gICAgICAgICAgICAgYkNraXBDbWljT247CisJVUNIQVIgICAgICAgICAgICAgICBDa2lwRmxhZzsKKwlVQ0hBUiAgICAgICAgICAgICAgIEdJVlszXTsgIC8vZm9yIENDWCBpdgorCVVDSEFSICAgICAgICAgICAgICAgUnhTRVFbNF07CisJVUNIQVIgICAgICAgICAgICAgICBUeFNFUVs0XTsKKwlVQ0hBUiAgICAgICAgICAgICAgIENLSVBNSUNbNF07CisJVUNIQVIgICAgICAgICAgICAgICBMZWFwQXV0aE1vZGU7CisJTEVBUF9BVVRIX0lORk8gICAgICBMZWFwQXV0aEluZm87CisJVUNIQVIgICAgICAgICAgICAgICBIYXNoUHdkWzE2XTsKKwlVQ0hBUiAgICAgICAgICAgICAgIE5ldHdvcmtDaGFsbGVuZ2VbOF07CisJVUNIQVIgICAgICAgICAgICAgICBOZXR3b3JrQ2hhbGxlbmdlUmVzcG9uc2VbMjRdOworCVVDSEFSICAgICAgICAgICAgICAgUGVlckNoYWxsZW5nZVs4XTsKKworCVVDSEFSICAgICAgICAgICAgICAgUGVlckNoYWxsZW5nZVJlc3BvbnNlWzI0XTsKKwlVQ0hBUiAgICAgICAgICAgICAgIFNlc3Npb25LZXlbMTZdOyAvL05ldHdvcmsgc2Vzc2lvbiBrZXlzIChOU0spCisJUkFMSU5LX1RJTUVSX1NUUlVDVCBMZWFwQXV0aFRpbWVyOworCVJPR1VFQVBfVEFCTEUgICAgICAgUm9ndWVBcFRhYjsgICAvL0Npc2NvIENDWDEgUm9ndWUgQVAgRGV0ZWN0aW9uCisKKwkvLyBOZXcgY29udHJvbCBmbGFncyBmb3IgQ0NYCisJQ0NYX0NPTlRST0wgICAgICAgICBDQ1hDb250cm9sOyAgICAgICAgICAgICAgICAgLy8gTWFzdGVyIGFkbWluaXN0cmF0aW9uIHN0YXRlCisJQk9PTEVBTiAgICAgICAgICAgICBDQ1hFbmFibGU7ICAgICAgICAgICAgICAgICAgLy8gQWN0dWFsIENDWCBzdGF0ZQorCVVDSEFSICAgICAgICAgICAgICAgQ0NYU2NhbkNoYW5uZWw7ICAgICAgICAgICAgIC8vIFNlbGVjdGVkIGNoYW5uZWwgZm9yIENDWCBiZWFjb24gcmVxdWVzdAorCVVTSE9SVCAgICAgICAgICAgICAgQ0NYU2NhblRpbWU7ICAgICAgICAgICAgICAgIC8vIFRpbWUgb3V0IHRvIHdhaXQgZm9yIGJlYWNvbiBhbmQgcHJvYmUgcmVzcG9uc2UKKwlVQ0hBUiAgICAgICAgICAgICAgIENDWFJlcVR5cGU7ICAgICAgICAgICAgICAgICAvLyBDdXJyZW50IHByb2Nlc3NpbmcgQ0NYIHJlcXVlc3QgdHlwZQorCUJTU19UQUJMRSAgICAgICAgICAgQ0NYQnNzVGFiOyAgICAgICAgICAgICAgICAgIC8vIEJTUyBUYWJsZQorCVVDSEFSICAgICAgICAgICAgICAgRnJhbWVSZXBvcnRCdWZbMjA0OF07ICAgICAgIC8vIEJ1ZmZlciBmb3IgY3JlYXRpbmcgZnJhbWUgcmVwb3J0CisJVVNIT1JUICAgICAgICAgICAgICBGcmFtZVJlcG9ydExlbjsgICAgICAgICAgICAgLy8gQ3VycmVudCBGcmFtZSByZXBvcnQgbGVuZ3RoCisJVUxPTkcgICAgICAgICAgICAgICBDTEJ1c3lCeXRlczsgICAgICAgICAgICAgICAgLy8gU2F2ZSB0aGUgdG90YWwgYnl0ZXMgcmVjZWl2ZWQgZHVybmluZyBjaGFubmVsIGxvYWQgc2NhbiB0aW1lCisJVVNIT1JUICAgICAgICAgICAgICBSUElEZW5zaXR5WzhdOyAgICAgICAgICAgICAgLy8gQXJyYXkgZm9yIFJQSSBkZW5zaXR5IGNvbGxlY3Rpb24KKwkvLyBTdGFydCBhZGRyZXNzIG9mIGVhY2ggQlNTIHRhYmxlIHdpdGhpbiBGcmFtZVJlcG9ydEJ1ZgorCS8vIEl0J3MgaW1wb3J0YW50IHRvIHVwZGF0ZSB0aGUgUnhQb3dlciBvZiB0aGUgY29ycmVzcG9uZGluZyBCc3MKKwlVU0hPUlQgICAgICAgICAgICAgIEJzc1JlcG9ydE9mZnNldFtNQVhfTEVOX09GX0JTU19UQUJMRV07CisJVVNIT1JUICAgICAgICAgICAgICBCZWFjb25Ub2tlbjsgICAgICAgICAgICAgICAgLy8gVG9rZW4gZm9yIGJlYWNvbiByZXBvcnQKKwlVTE9ORyAgICAgICAgICAgICAgIExhc3RCc3NJbmRleDsgICAgICAgICAgICAgICAvLyBNb3N0IGN1cnJlbnQgcmVwb3J0ZWQgQnNzIGluZGV4CisJUk1fUkVRVUVTVF9BQ1RJT04gICBNZWFzdXJlbWVudFJlcXVlc3RbMTZdOyAgICAgLy8gU2F2ZWQgbWVhc3VyZW1lbnQgcmVxdWVzdAorCVVDSEFSICAgICAgICAgICAgICAgUk1SZXFDbnQ7ICAgICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBtZWFzdXJlbWVudCByZXF1ZXN0IHNhdmVkLgorCVVDSEFSICAgICAgICAgICAgICAgQ3VycmVudFJNUmVxSWR4OyAgICAgICAgICAgIC8vIE51bWJlciBvZiBtZWFzdXJlbWVudCByZXF1ZXN0IHNhdmVkLgorCUJPT0xFQU4gICAgICAgICAgICAgUGFyYWxsZWxSZXE7ICAgICAgICAgICAgICAgIC8vIFBhcmFsbGVsIG1lYXN1cmVtZW50LCBvbmx5IG9uZSByZXF1ZXN0IHBlcmZvcm1lZCwKKwkJCQkJCQkJCQkJCQkvLyBJdCBtdXN0IGJlIHRoZSBzYW1lIGNoYW5uZWwgd2l0aCBtYXhpbXVtIGR1cmF0aW9uCisJVVNIT1JUICAgICAgICAgICAgICBQYXJhbGxlbER1cmF0aW9uOyAgICAgICAgICAgLy8gTWF4aW11bSBkdXJhdGlvbiBmb3IgcGFyYWxsZWwgbWVhc3VyZW1lbnQKKwlVQ0hBUiAgICAgICAgICAgICAgIFBhcmFsbGVsQ2hhbm5lbDsgICAgICAgICAgICAvLyBPbmx5IG9uZSBjaGFubmVsIHdpdGggcGFyYWxsZWwgbWVhc3VyZW1lbnQKKwlVU0hPUlQgICAgICAgICAgICAgIElBUFBUb2tlbjsgICAgICAgICAgICAgICAgICAvLyBJQVBQIGRpYWxvZyB0b2tlbgorCVVDSEFSICAgICAgICAgICAgICAgQ0NYUW9zRUNXTWluOyAgICAgICAgICAgICAgIC8vIENpc2NvIFFPUyBFQ1dNaW4gZm9yIEFDIDAKKwlVQ0hBUiAgICAgICAgICAgICAgIENDWFFvc0VDV01heDsgICAgICAgICAgICAgICAvLyBDaXNjbyBRT1MgRUNXTWF4IGZvciBBQyAwCisJLy8gSGFjayBmb3IgY2hhbm5lbCBsb2FkIGFuZCBub2lzZSBoaXN0b2dyYW0gcGFyYW1ldGVycworCVVDSEFSICAgICAgICAgICAgICAgTkhGYWN0b3I7ICAgICAgICAgICAgICAgICAgIC8vIFBhcmFtZXRlciBmb3IgTm9pc2UgaGlzdG9ncmFtCisJVUNIQVIgICAgICAgICAgICAgICBDTEZhY3RvcjsgICAgICAgICAgICAgICAgICAgLy8gUGFyYW1ldGVyIGZvciBjaGFubmVsIGxvYWQKKworCVVDSEFSICAgICAgICAgICAgICAgS1JLWzE2XTsgICAgICAgIC8vS2V5IFJlZnJlc2ggS2V5LgorCVVDSEFSICAgICAgICAgICAgICAgQlRLWzMyXTsgICAgICAgIC8vQmFzZSBUcmFuc2llbnQgS2V5CisJQk9PTEVBTiAgICAgICAgICAgICBDQ0tNTGlua1VwRmxhZzsKKwlVTE9ORyAgICAgICAgICAgICAgIENDS01STjsgICAgLy8oUmUpQXNzb2NpYXRpb24gcmVxdWVzdCBudW1iZXIuCisJTEFSR0VfSU5URUdFUiAgICAgICBDQ0tNQmVhY29uQXRKb2luVGltZVN0YW1wOyAgLy9UU0YgdGltZXIgZm9yIFJlLWFzc29jYWl0ZSB0byB0aGUgbmV3IEFQCisJVUNIQVIgICAgICAgICAgICAgICBBaXJvbmV0Q2VsbFBvd2VyTGltaXQ7ICAgICAgLy9pbiBkQm0KKwlVQ0hBUiAgICAgICAgICAgICAgIEFpcm9uZXRJUEFkZHJlc3NbNF07ICAgICAgICAvL2VnLiAxOTIuMTY4LjEuMQorCUJPT0xFQU4gICAgICAgICAgICAgQ0NYQWRqYWNlbnRBUFJlcG9ydEZsYWc7ICAgIC8vZmxhZyBmb3IgZGV0ZXJtaW5pbmcgcmVwb3J0IEFzc29jIExvc3QgdGltZQorCUNIQVIgICAgICAgICAgICAgICAgQ0NYQWRqYWNlbnRBUFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsgLy9BZGphY2VudCBBUCdzIFNTSUQgcmVwb3J0CisJVUNIQVIgICAgICAgICAgICAgICBDQ1hBZGphY2VudEFQU3NpZExlbjsgICAgICAgICAgICAgICAvLyB0aGUgYWN0dWFsIHNzaWQgbGVuZ3RoIGluIHVzZWQKKwlVQ0hBUiAgICAgICAgICAgICAgIENDWEFkamFjZW50QVBCc3NpZFtNQUNfQUREUl9MRU5dOyAgICAgICAgIC8vQWRqYWNlbnQgQVAncyBCU1NJRCByZXBvcnQKKwlVU0hPUlQgICAgICAgICAgICAgIENDWEFkamFjZW50QVBDaGFubmVsOworCVVMT05HICAgICAgICAgICAgICAgQ0NYQWRqYWNlbnRBUExpbmtEb3duVGltZTsgIC8vZm9yIFNwZWMgUzMyLgorCisJUkFMSU5LX1RJTUVSX1NUUlVDVAlTdGFRdWlja1Jlc3BvbmVGb3JSYXRlVXBUaW1lcjsKKwlCT09MRUFOCQkJCVN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcFRpbWVyUnVubmluZzsKKworCVVDSEFSICAgICAgICAgICAJRHRpbUNvdW50OyAgICAgIC8vIDAuLiBEdGltUGVyaW9kLTEKKwlVQ0hBUiAgICAgICAgICAgCUR0aW1QZXJpb2Q7ICAgICAvLyBkZWZhdWx0ID0gMworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJUlRfODAyXzExX0RMUwkJRExTRW50cnlbTUFYX05VTV9PRl9ETFNfRU5UUlldOworCVVDSEFSCQkJCURsc1JlcGxheUNvdW50ZXJbOF07CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCS8vIFRoaXMgaXMgb25seSBmb3IgV0hRTCB0ZXN0LgorCUJPT0xFQU4JCQkJV2hxbFRlc3Q7CisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgUkFMSU5LX1RJTUVSX1NUUlVDVCBXcGFEaXNhc3NvY0FuZEJsb2NrQXNzb2NUaW1lcjsKKyAgICAvLyBGYXN0IFJvYW1pbmcKKwlCT09MRUFOCQkgICAgICAgIGJGYXN0Um9hbWluZzsgICAgICAgLy8gMDpkaXNhYmxlIGZhc3Qgcm9hbWluZywgMTplbmFibGUgZmFzdCByb2FtaW5nCisJQ0hBUgkJICAgICAgICBkQm1Ub1JvYW07ICAgICAgICAgIC8vIHRoZSBjb25kaXRpb24gdG8gcm9hbSB3aGVuIHJlY2VpdmluZyBSc3NpIGxlc3MgdGhhbiB0aGlzIHZhbHVlLiBJdCdzIG5lZ2F0aXZlIHZhbHVlLgorCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIEJPT0xFQU4gICAgICAgICAgICAgSUVFRTgwMjFYOworICAgIEJPT0xFQU4gICAgICAgICAgICAgSUVFRTgwMjF4X3JlcXVpcmVkX2tleXM7CisgICAgQ0lQSEVSX0tFWQkgICAgICAgIERlc2lyZVNoYXJlZEtleVs0XTsJLy8gUmVjb3JkIHVzZXIgZGVzaXJlZCBXRVAga2V5cworICAgIFVDSEFSICAgICAgICAgICAgICAgRGVzaXJlU2hhcmVkS2V5SWQ7CisKKyAgICAvLyAwOiBkcml2ZXIgaWdub3JlcyB3cGFfc3VwcGxpY2FudAorICAgIC8vIDE6IHdwYV9zdXBwbGljYW50IGluaXRpYXRlcyBzY2FubmluZyBhbmQgQVAgc2VsZWN0aW9uCisgICAgLy8gMjogZHJpdmVyIHRha2VzIGNhcmUgb2Ygc2Nhbm5pbmcsIEFQIHNlbGVjdGlvbiwgYW5kIElFRUUgODAyLjExIGFzc29jaWF0aW9uIHBhcmFtZXRlcnMKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIFdwYVN1cHBsaWNhbnRVUDsKKwlVQ0hBUgkJCQlXcGFTdXBwbGljYW50U2NhbkNvdW50OworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworICAgIENIQVIgICAgICAgICAgICAgICAgZGV2X25hbWVbMTZdOworICAgIFVTSE9SVCAgICAgICAgICAgICAgT3JpRGV2VHlwZTsKKworICAgIEJPT0xFQU4gICAgICAgICAgICAgYlRHbldpZmlUZXN0OworCUJPT0xFQU4JCQkgICAgYlNjYW5SZXFJc0Zyb21XZWJVSTsKKworCUhUVFJBTlNNSVRfU0VUVElORwkJCQlIVFBoeU1vZGUsIE1heEhUUGh5TW9kZSwgTWluSFRQaHlNb2RlOy8vIEZvciB0cmFuc21pdCBwaHkgc2V0dGluZyBpbiBUWFdJLgorCURFU0lSRURfVFJBTlNNSVRfU0VUVElORyAgICAgICAJRGVzaXJlZFRyYW5zbWl0U2V0dGluZzsKKwlSVF9IVF9QSFlfSU5GTwkJCQkJRGVzaXJlZEh0UGh5SW5mbzsKKwlCT09MRUFOCQkJCQkJCWJBdXRvVHhSYXRlU3dpdGNoOworCisKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJVUNIQVIJCQkJSUVFRTgwMjExZENsaWVudE1vZGU7CisJVUNIQVIJCQkJU3RhT3JpQ291bnRyeUNvZGVbM107CisJVUNIQVIJCQkJU3RhT3JpR2VvZ3JhcGh5OworI2VuZGlmIC8vIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QgLy8KK30gU1RBX0FETUlOX0NPTkZJRywgKlBTVEFfQURNSU5fQ09ORklHOworCisvLyBUaGlzIGRhdGEgc3RydWN0dXJlIGtlZXAgdGhlIGN1cnJlbnQgYWN0aXZlIEJTUy9JQlNTJ3MgY29uZmlndXJhdGlvbiB0aGF0IHRoaXMgU1RBCisvLyBoYWQgYWdyZWVkIHVwb24gam9pbmluZyB0aGUgbmV0d29yay4gV2hpY2ggbWVhbnMgdGhlc2UgcGFyYW1ldGVycyBhcmUgdXN1YWxseSBkZWNpZGVkCisvLyBieSB0aGUgQlNTL0lCU1MgY3JlYXRvciBpbnN0ZWFkIG9mIHVzZXIgY29uZmlndXJhdGlvbi4gRGF0YSBpbiB0aGlzIGRhdGEgc3RydWN0dXJyZQorLy8gaXMgdmFsaWQgb25seSB3aGVuIGVpdGhlciBBREhPQ19PTihwQWQpIG9yIElORlJBX09OKHBBZCkgaXMgVFJVRS4KKy8vIE5vcm1hbGx5LCBhZnRlciBTQ0FOIG9yIGZhaWxlZCByb2FtaW5nIGF0dGVtcHRzLCB3ZSBuZWVkIHRvIHJlY292ZXIgYmFjayB0bworLy8gdGhlIGN1cnJlbnQgYWN0aXZlIHNldHRpbmdzLgordHlwZWRlZiBzdHJ1Y3QgX1NUQV9BQ1RJVkVfQ09ORklHIHsKKwlVU0hPUlQgICAgICBBaWQ7CisJVVNIT1JUICAgICAgQXRpbVdpbjsgICAgICAgICAgICAgICAgLy8gaW4ga3VzZWM7IElCU1MgcGFyYW1ldGVyIHNldCBlbGVtZW50CisJVVNIT1JUICAgICAgQ2FwYWJpbGl0eUluZm87CisJVVNIT1JUICAgICAgQ2ZwTWF4RHVyYXRpb247CisJVVNIT1JUICAgICAgQ2ZwUGVyaW9kOworCisJLy8gQ29weSBzdXBwb3J0ZWQgcmF0ZSBmcm9tIGRlc2lyZWQgQVAncyBiZWFjb24uIFdlIGFyZSB0cnlpbmcgdG8gbWF0Y2gKKwkvLyBBUCdzIHN1cHBvcnRlZCBhbmQgZXh0ZW5kZWQgcmF0ZSBzZXR0aW5ncy4KKwlVQ0hBUiAgICAgICBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKKwlVQ0hBUiAgICAgICBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKKwlVQ0hBUiAgICAgICBTdXBSYXRlTGVuOworCVVDSEFSICAgICAgIEV4dFJhdGVMZW47CisJLy8gQ29weSBzdXBwb3J0ZWQgaHQgZnJvbSBkZXNpcmVkIEFQJ3MgYmVhY29uLiBXZSBhcmUgdHJ5aW5nIHRvIG1hdGNoCisJUlRfSFRfUEhZX0lORk8JCVN1cHBvcnRlZFBoeUluZm87CisJUlRfSFRfQ0FQQUJJTElUWQlTdXBwb3J0ZWRIdFBoeTsKK30gU1RBX0FDVElWRV9DT05GSUcsICpQU1RBX0FDVElWRV9DT05GSUc7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBSVDI4NzAKK3R5cGVkZWYgc3RydWN0ICAgUlRfQUREX1BBSVJXSVNFX0tFWV9FTlRSWSB7CisgICAgICAgIE5ESVNfODAyXzExX01BQ19BRERSRVNTICAgICAgICAgTWFjQWRkcjsKKyAgICAgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNUYWJNYXRjaFdDSUQ7ICAgICAgICAvLyBBU0lDCisgICAgICAgIENJUEhFUl9LRVkgICAgICBDaXBoZXJLZXk7Cit9IFJUX0FERF9QQUlSV0lTRV9LRVlfRU5UUlksKlBSVF9BRERfUEFJUldJU0VfS0VZX0VOVFJZOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisvLyAtLS0tLS0tLS0tLSBzdGFydCBvZiBBUCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQVVUSC1SU1AgU3RhdGUgTWFjaGluZSBBdXggZGF0YSBzdHJ1Y3R1cmUKK3R5cGVkZWYgc3RydWN0IF9BUF9NTE1FX0FVWCB7CisJVUNIQVIgICAgICAgICAgICAgICBBZGRyW01BQ19BRERSX0xFTl07CisJVVNIT1JUICAgICAgICAgICAgICBBbGc7CisJQ0hBUiAgICAgICAgICAgICAgICBDaGFsbGVuZ2VbQ0lQSEVSX1RFWFRfTEVOXTsKK30gQVBfTUxNRV9BVVgsICpQQVBfTUxNRV9BVVg7CisKKy8vIHN0cnVjdHVyZSB0byBkZWZpbmUgV1BBIEdyb3VwIEtleSBSZWtleSBJbnRlcnZhbAordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9SVF84MDJfMTFfV1BBX1JFS0VZIHsKKwlVTE9ORyBSZUtleU1ldGhvZDsgICAgICAgICAgLy8gbWVjaGFuaXNtIGZvciByZWtleWluZzogMDpkaXNhYmxlLCAxOiB0aW1lLWJhc2VkLCAyOiBwYWNrZXQtYmFzZWQKKwlVTE9ORyBSZUtleUludGVydmFsOyAgICAgICAgLy8gdGltZS1iYXNlZDogc2Vjb25kcywgcGFja2V0LWJhc2VkOiBraWxvLXBhY2tldHMKK30gUlRfV1BBX1JFS0VZLCpQUlRfV1BBX1JFS0VZLCBSVF84MDJfMTFfV1BBX1JFS0VZLCAqUFJUXzgwMl8xMV9XUEFfUkVLRVk7CisKK3R5cGVkZWYgc3RydWN0IF9NQUNfVEFCTEVfRU5UUlkgeworCS8vQ2hvb3NlIDEgZnJvbSBWYWxpZEFzV0RTIGFuZCBWYWxpZEFzQ0xJICB0byB2YWxpZGl6ZS4KKwlCT09MRUFOCQlWYWxpZEFzQ0xJOwkJLy8gU3RhIG1vZGUsIHNldCB0aGlzIFRSVUUgYWZ0ZXIgTGlua3VwLHRvby4KKwlCT09MRUFOCQlWYWxpZEFzV0RTOwkvLyBUaGlzIGlzIFdEUyBFbnRyeS4gb25seSBmb3IgQVAgbW9kZS4KKwlCT09MRUFOCQlWYWxpZEFzQXBDbGk7ICAgLy9UaGlzIGlzIGEgQVAtQ2xpZW50IGVudHJ5LCBvbmx5IGZvciBBUCBtb2RlIHdoaWNoIGVuYWJsZSBBUC1DbGllbnQgZnVuY3Rpb25zLgorCUJPT0xFQU4JCVZhbGlkQXNNZXNoOworCUJPT0xFQU4JCVZhbGlkQXNEbHM7CS8vIFRoaXMgaXMgRExTIEVudHJ5LiBvbmx5IGZvciBTVEEgbW9kZS4KKwlCT09MRUFOCQlpc0NhY2hlZDsKKwlCT09MRUFOCQliSUFtQmFkQXRoZXJvczsKKworCVVDSEFSICAgICAgICAgCUVucXVldWVFYXBvbFN0YXJ0VGltZXJSdW5uaW5nOyAgLy8gRW5xdWV1ZSBFQVBvTC1TdGFydCBmb3IgdHJpZ2dlcmluZyBFQVAgU00KKwkvL2phbiBmb3Igd3BhCisJLy8gcmVjb3JkIHdoaWNoIGVudHJ5IHJldm9rZSBNSUMgRmFpbHVyZSAsIGlmIGl0IGxlYXZlcyB0aGUgQlNTIGl0c2VsZiwgQVAgd29uJ3QgdXBkYXRlIGFNSUNGYWlsVGltZSBNSUIKKwlVQ0hBUiAgICAgICAgICAgQ01UaW1lclJ1bm5pbmc7CisJVUNIQVIgICAgICAgICAgIGFwaWR4OwkJCS8vIE1CU1MgbnVtYmVyCisJVUNIQVIgICAgICAgICAgIFJTTklFX0xlbjsKKwlVQ0hBUiAgICAgICAgICAgUlNOX0lFW01BWF9MRU5fT0ZfUlNOSUVdOworCVVDSEFSICAgICAgICAgICBBTm9uY2VbTEVOX0tFWV9ERVNDX05PTkNFXTsKKwlVQ0hBUiAgICAgICAgICAgUl9Db3VudGVyW0xFTl9LRVlfREVTQ19SRVBMQVldOworCVVDSEFSICAgICAgICAgICBQVEtbNjRdOworCVVDSEFSICAgICAgICAgICBSZVRyeUNvdW50ZXI7CisJUkFMSU5LX1RJTUVSX1NUUlVDVCAgICAgICAgICAgICAgICAgUmV0cnlUaW1lcjsKKwlSQUxJTktfVElNRVJfU1RSVUNUCQkJCQlFbnF1ZXVlU3RhcnRGb3JQU0tUaW1lcjsJLy8gQSB0aW1lciB3aGljaCBlbnF1ZXVlIEVBUG9MLVN0YXJ0IGZvciB0cmlnZ2VyaW5nIFBTSyBTTQorCU5ESVNfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgICAgIEF1dGhNb2RlOyAgIC8vIFRoaXMgc2hvdWxkIG1hdGNoIHRvIHdoYXRldmVyIG1pY3Jvc29mdCBkZWZpbmVkCisJTkRJU184MDJfMTFfV0VQX1NUQVRVUyAgICAgICAgICAgICAgV2VwU3RhdHVzOworCUFQX1dQQV9TVEFURSAgICBXcGFTdGF0ZTsKKwlHVEtfU1RBVEUgICAgICAgR1RLU3RhdGU7CisJVVNIT1JUICAgICAgICAgIFBvcnRTZWN1cmVkOworCU5ESVNfODAyXzExX1BSSVZBQ1lfRklMVEVSICBQcml2YWN5RmlsdGVyOyAgICAgIC8vIFByaXZhY3lGaWx0ZXIgZW51bSBmb3IgODAyLjFYCisJQ0lQSEVSX0tFWSAgICAgIFBhaXJ3aXNlS2V5OworCVBWT0lEICAgICAgICAgICBwQWQ7CisgICAgSU5UCQkJCVBNS0lEX0NhY2hlSWR4OworICAgIFVDSEFSCQkJUE1LSURbTEVOX1BNS0lEXTsKKworCisJVUNIQVIgICAgICAgICAgIEFkZHJbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUiAgICAgICAgICAgUHNNb2RlOworCVNTVCAgICAgICAgICAgICBTc3Q7CisJQVVUSF9TVEFURSAgICAgIEF1dGhTdGF0ZTsgLy8gZm9yIFNIQVJFRCBLRVkgYXV0aGVudGljYXRpb24gc3RhdGUgbWFjaGluZSB1c2VkIG9ubHkKKwlCT09MRUFOCQkJSXNSZWFzc29jU3RhOwkvLyBJbmRpY2F0ZSB3aGV0aGVyIHRoaXMgaXMgYSByZWFzc29jaWF0aW9uIHByb2NlZHVyZQorCVVTSE9SVCAgICAgICAgICBBaWQ7CisJVVNIT1JUICAgICAgICAgIENhcGFiaWxpdHlJbmZvOworCVVDSEFSICAgICAgICAgICBMYXN0UnNzaTsKKwlVTE9ORyAgICAgICAgICAgTm9EYXRhSWRsZUNvdW50OworCVVJTlQxNgkJCVN0YXRpb25LZWVwQWxpdmVDb3VudDsgLy8gdW5pdDogc2Vjb25kCisJVUxPTkcgICAgICAgICAgIFBzUUlkbGVDb3VudDsKKwlRVUVVRV9IRUFERVIgICAgUHNRdWV1ZTsKKworCVVJTlQzMgkJCVN0YUNvbm5lY3RUaW1lOwkJLy8gdGhlIGxpdmUgdGltZSBvZiB0aGlzIHN0YXRpb24gc2luY2UgYXNzb2NpYXRlZCB3aXRoIEFQCisKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCUJPT0xFQU4JCQliU2VuZEJBUjsKKwlVU0hPUlQJCQlOb0JBRGF0YUNvdW50RG93bjsKKworCVVJTlQzMiAgIAkJQ2FjaGVkQnVmWzE2XTsJCS8vIFVJTlQgKDQgYnl0ZXMpIGZvciBhbGlnbm1lbnQKKwlVSU5UCQkJVHhCRkNvdW50OyAvLyAzKjMKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlVSU5UCQkJRklGT0NvdW50OworCVVJTlQJCQlEZWJ1Z0ZJRk9Db3VudDsKKwlVSU5UCQkJRGVidWdUeENvdW50OworICAgIEJPT0xFQU4JCQliRGxzSW5pdDsKKworCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vV0RTIGVudHJ5IG5lZWRzIHRoZXNlCisvLyBydDI4NjAgYWRkIHRoaXMuIGlmIFZhbGlkQXNXRFM9PVRSVUUsIE1hdGNoV0RTVGFiSWR4IGlzIHRoZSBpbmRleCBpbiBXZHNUYWIuTWFjVGFiCisJVUlOVAkJCU1hdGNoV0RTVGFiSWR4OworCVVDSEFSICAgICAgICAgICBNYXhTdXBwb3J0ZWRSYXRlOworCVVDSEFSICAgICAgICAgICBDdXJyVHhSYXRlOworCVVDSEFSICAgICAgICAgICBDdXJyVHhSYXRlSW5kZXg7CisJLy8gdG8gcmVjb3JkIHRoZSBlYWNoIFRYIHJhdGUncyBxdWFsaXR5LiAwIGlzIGJlc3QsIHRoZSBiaWdnZXIgdGhlIHdvcnNlLgorCVVTSE9SVCAgICAgICAgICBUeFF1YWxpdHlbTUFYX1NURVBfT0ZfVFhfUkFURV9TV0lUQ0hdOworLy8JVVNIT1JUICAgICAgICAgIE9uZVNlY1R4T2tDb3VudDsKKwlVSU5UMzIJCQlPbmVTZWNUeE5vUmV0cnlPa0NvdW50OworCVVJTlQzMiAgICAgICAgICBPbmVTZWNUeFJldHJ5T2tDb3VudDsKKwlVSU5UMzIgICAgICAgICAgT25lU2VjVHhGYWlsQ291bnQ7CisJVUlOVDMyCQkJQ29udGludWVUeEZhaWxDbnQ7CisJVUlOVDMyICAgICAgICAgIEN1cnJUeFJhdGVTdGFibGVUaW1lOyAvLyAjIG9mIHNlY29uZCBpbiBjdXJyZW50IFRYIHJhdGUKKwlVQ0hBUiAgICAgICAgICAgVHhSYXRlVXBQZW5hbHR5OyAgICAgIC8vIGV4dHJhICMgb2Ygc2Vjb25kIHBlbmFsdHkgZHVlIHRvIGxhc3QgdW5zdGFibGUgY29uZGl0aW9uCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwlVSU5UCQkJTWF0Y2hEbHNFbnRyeUlkeDsgLy8gaW5kaWNhdGUgdGhlIGluZGV4IGluIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKwlCT09MRUFOICAgICAgICAgZk5vaXN5RW52aXJvbm1lbnQ7CisJQk9PTEVBTgkJCWZMYXN0U2VjQWNjb3JkaW5nUlNTSTsKKwlVQ0hBUiAgICAgICAgICAgTGFzdFNlY1R4UmF0ZUNoYW5nZUFjdGlvbjsgLy8gMDogbm8gY2hhbmdlLCAxOnJhdGUgVVAsIDI6cmF0ZSBkb3duCisJQ0hBUgkJCUxhc3RUaW1lVHhSYXRlQ2hhbmdlQWN0aW9uOyAvL0tlZXAgbGFzdCB0aW1lIHZhbHVlIG9mIExhc3RTZWNUeFJhdGVDaGFuZ2VBY3Rpb24KKwlVTE9ORwkJCUxhc3RUeE9rQ291bnQ7CisJVUNIQVIgICAgICAgICAgIFBFUltNQVhfU1RFUF9PRl9UWF9SQVRFX1NXSVRDSF07CisKKwkvLyBhIGJpdG1hcCBvZiBCT09MRUFOIGZsYWdzLiBlYWNoIGJpdCByZXByZXNlbnQgYW4gb3BlcmF0aW9uIHN0YXR1cyBvZiBhIHBhcnRpY3VsYXIKKwkvLyBCT09MRUFOIGNvbnRyb2wsIGVpdGhlciBPTiBvciBPRkYuIFRoZXNlIGZsYWdzIHNob3VsZCBhbHdheXMgYmUgYWNjZXNzZWQgdmlhCisJLy8gQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcoKSwgQ0xJRU5UX1NUQVRVU19TRVRfRkxBRygpLCBDTElFTlRfU1RBVFVTX0NMRUFSX0ZMQUcoKSBtYWNyb3MuCisJLy8gc2VlIGZPUF9TVEFUVVNfeHh4IGluIFJUTVBfREVGLkMgZm9yIGRldGFpbCBiaXQgZGVmaW5pdGlvbi4gZkNMSUVOVF9TVEFUVVNfQU1TRFVfSU5VU0VECisJVUxPTkcgICAgICAgICAgIENsaWVudFN0YXR1c0ZsYWdzOworCisJLy8gVE9ETzogU2hhbGwgd2UgbW92ZSB0aGF0IHRvIERPVDExX05fU1VQUE9SVD8/PworCUhUVFJBTlNNSVRfU0VUVElORwlIVFBoeU1vZGUsIE1heEhUUGh5TW9kZSwgTWluSFRQaHlNb2RlOy8vIEZvciB0cmFuc21pdCBwaHkgc2V0dGluZyBpbiBUWFdJLgorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gSFQgRVdDIE1JTU8tTiB1c2VkIHBhcmFtZXRlcnMKKwlVU0hPUlQJCVJYQkFiaXRtYXA7CS8vIGZpbGwgdG8gb24tY2hpcCAgUlhXSV9CQV9CSVRNQVNLIGluIDguMS4zUlggYXR0cmlidXRlIGVudHJ5IGZvcm1hdAorCVVTSE9SVAkJVFhCQWJpdG1hcDsJLy8gVGhpcyBiaXRtYXAgYXMgb3JpZ2luYXRvciwgb25seSBrZWVwIGluIHNvZnR3YXJlIHVzZWQgdG8gbWFyayBBTVBEVSBiaXQgaW4gVFhXSQorCVVTSE9SVAkJVFhBdXRvQkFiaXRtYXA7CisJVVNIT1JUCQlCQURlY2xpbmVCaXRtYXA7CisJVVNIT1JUCQlCQVJlY1djaWRBcnJheVtOVU1fT0ZfVElEXTsJLy8gVGhlIG1hcHBpbmcgd2NpZCBvZiByZWNpcGllbnQgc2Vzc2lvbi4gaWYgUlhCQWJpdG1hcCBiaXQgaXMgbWFza2VkCisJVVNIT1JUCQlCQU9yaVdjaWRBcnJheVtOVU1fT0ZfVElEXTsgLy8gVGhlIG1hcHBpbmcgd2NpZCBvZiBvcmlnaW5hdG9yIHNlc3Npb24uIGlmIFRYQkFiaXRtYXAgYml0IGlzIG1hc2tlZAorCVVTSE9SVAkJQkFPcmlTZXF1ZW5jZVtOVU1fT0ZfVElEXTsgLy8gVGhlIG1hcHBpbmcgd2NpZCBvZiBvcmlnaW5hdG9yIHNlc3Npb24uIGlmIFRYQkFiaXRtYXAgYml0IGlzIG1hc2tlZAorCisJLy8gODAyLjExbiBmZWF0dXJlcy4KKwlVQ0hBUgkJTXBkdURlbnNpdHk7CisJVUNIQVIJCU1heFJBbXBkdUZhY3RvcjsKKwlVQ0hBUgkJQU1zZHVTaXplOworCVVDSEFSCQlNbXBzTW9kZTsJLy8gTUlNTyBwb3dlciBzYXZlIG1vcmUuCisKKwlIVF9DQVBBQklMSVRZX0lFCQlIVENhcGFiaWxpdHk7CisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJVUNIQVIJCUJTUzIwNDBDb2V4aXN0ZW5jZU1nbXRTdXBwb3J0OworI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCUJPT0xFQU4JCWJBdXRvVHhSYXRlU3dpdGNoOworCisJVUNIQVIgICAgICAgUmF0ZUxlbjsKKwlzdHJ1Y3QgX01BQ19UQUJMRV9FTlRSWSAqcE5leHQ7CisgICAgVVNIT1JUICAgICAgVHhTZXFbTlVNX09GX1RJRF07CisJVVNIT1JUCQlOb25Rb3NEYXRhU2VxOworCisJUlNTSV9TQU1QTEUJUnNzaVNhbXBsZTsKKworCVVJTlQzMgkJCVRYTUNTRXhwZWN0ZWRbMTZdOworCVVJTlQzMgkJCVRYTUNTU3VjY2Vzc2Z1bFsxNl07CisJVUlOVDMyCQkJVFhNQ1NGYWlsZWRbMTZdOworCVVJTlQzMgkJCVRYTUNTQXV0b0ZhbGxCYWNrWzE2XVsxNl07CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyAgICAgICAgVUxPTkcgICAgICAgICAgICAgICAgICAgTGFzdEJlYWNvblJ4VGltZTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KK30gTUFDX1RBQkxFX0VOVFJZLCAqUE1BQ19UQUJMRV9FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgX01BQ19UQUJMRSB7CisJVVNIT1JUCQkJU2l6ZTsKKwlNQUNfVEFCTEVfRU5UUlkgKkhhc2hbSEFTSF9UQUJMRV9TSVpFXTsKKwlNQUNfVEFCTEVfRU5UUlkgQ29udGVudFtNQVhfTEVOX09GX01BQ19UQUJMRV07CisJUVVFVUVfSEVBREVSICAgIE1jYXN0UHNRdWV1ZTsKKwlVTE9ORyAgICAgICAgICAgUHNRSWRsZUNvdW50OworCUJPT0xFQU4gICAgICAgICBmQW55U3RhdGlvbkluUHNtOworCUJPT0xFQU4gICAgICAgICBmQW55U3RhdGlvbkJhZEF0aGVyb3M7CS8vIENoZWNrIGlmIGFueSBTdGF0aW9uIGlzIGF0aGVyb3MgODAyLjExbiBDaGlwLiAgV2UgbmVlZCB0byB1c2UgUlRTL0NUUyB3aXRoIEF0aGVyb3MgODAyLC4xMW4gY2hpcC4KKwlCT09MRUFOCQkJZkFueVR4T1BGb3JjZURpc2FibGU7CS8vIENoZWNrIGlmIGl0IGlzIG5lY2Vzc2FyeSB0byBkaXNhYmxlIEJFIFR4T1AKKwlCT09MRUFOCQkJZkFsbFN0YXRpb25Bc1JhbGluazsgCS8vIENoZWNrIGlmIGFsbCBzdGF0aW9ucyBhcmUgcmFsaW5rLWNoaXBzZXQKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlCT09MRUFOICAgICAgICAgZkFueVN0YXRpb25Jc0xlZ2FjeTsJLy8gQ2hlY2sgaWYgSSB1c2UgbGVnYWN5IHJhdGUgdG8gdHJhbnNtaXQgdG8gbXkgQlNTIFN0YXRpb24vCisJQk9PTEVBTiAgICAgICAgIGZBbnlTdGF0aW9uTm9uR0Y7CQkvLyBDaGVjayBpZiBhbnkgU3RhdGlvbiBjYW4ndCBzdXBwb3J0IEdGLgorCUJPT0xFQU4gICAgICAgICBmQW55U3RhdGlvbjIwT25seTsJCS8vIENoZWNrIGlmIGFueSBTdGF0aW9uIGNhbid0IHN1cHBvcnQgR0YuCisJQk9PTEVBTgkJCWZBbnlTdGF0aW9uTUlNT1BTRHluYW1pYzsgLy8gQ2hlY2sgaWYgYW55IFN0YXRpb24gaXMgTUlNTyBEeW5hbWljCisJQk9PTEVBTiAgICAgICAgIGZBbnlCQVNlc3Npb247ICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgQkEgc2Vzc2lvbi4gIEZvcmNlIHR1cm4gb24gUlRTL0NUUworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworfSBNQUNfVEFCTEUsICpQTUFDX1RBQkxFOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisjZGVmaW5lIElTX0hUX1NUQShfcE1hY0VudHJ5KQlcCisJKF9wTWFjRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID49IE1PREVfSFRNSVgpCisKKyNkZWZpbmUgSVNfSFRfUkFURShfcE1hY0VudHJ5KQlcCisJKF9wTWFjRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID49IE1PREVfSFRNSVgpCisKKyNkZWZpbmUgUEVFUl9JU19IVF9SQVRFKF9wTWFjRW50cnkpCVwKKwkoX3BNYWNFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCkKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwordHlwZWRlZiBzdHJ1Y3QgX1dEU19FTlRSWSB7CisJQk9PTEVBTiAgICAgICAgIFZhbGlkOworCVVDSEFSICAgICAgICAgICBBZGRyW01BQ19BRERSX0xFTl07CisJVUxPTkcgICAgICAgICAgIE5vRGF0YUlkbGVDb3VudDsKKwlzdHJ1Y3QgX1dEU19FTlRSWSAqcE5leHQ7Cit9IFdEU19FTlRSWSwgKlBXRFNfRU5UUlk7CisKK3R5cGVkZWYgc3RydWN0ICBfV0RTX1RBQkxFX0VOVFJZIHsKKwlVU0hPUlQJCQlTaXplOworCVVDSEFSICAgICAgICAgICBXZHNBZGRyW01BQ19BRERSX0xFTl07CisJV0RTX0VOVFJZICAgICAgICpIYXNoW0hBU0hfVEFCTEVfU0laRV07CisJV0RTX0VOVFJZICAgICAgIENvbnRlbnRbTUFYX0xFTl9PRl9NQUNfVEFCTEVdOworCVVDSEFSICAgICAgICAgICBNYXhTdXBwb3J0ZWRSYXRlOworCVVDSEFSICAgICAgICAgICBDdXJyVHhSYXRlOworCVVTSE9SVCAgICAgICAgICBUeFF1YWxpdHlbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVTSE9SVCAgICAgICAgICBPbmVTZWNUeE9rQ291bnQ7CisJVVNIT1JUICAgICAgICAgIE9uZVNlY1R4UmV0cnlPa0NvdW50OworCVVTSE9SVCAgICAgICAgICBPbmVTZWNUeEZhaWxDb3VudDsKKwlVTE9ORyAgICAgICAgICAgQ3VyclR4UmF0ZVN0YWJsZVRpbWU7IC8vICMgb2Ygc2Vjb25kIGluIGN1cnJlbnQgVFggcmF0ZQorCVVDSEFSICAgICAgICAgICBUeFJhdGVVcFBlbmFsdHk7ICAgICAgLy8gZXh0cmEgIyBvZiBzZWNvbmQgcGVuYWx0eSBkdWUgdG8gbGFzdCB1bnN0YWJsZSBjb25kaXRpb24KK30gV0RTX1RBQkxFX0VOVFJZLCAqUFdEU19UQUJMRV9FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgX1JUXzgwMl8xMV9XRFNfRU5UUlkgeworCVBORVRfREVWCQkJZGV2OworCVVDSEFSCQkJCVZhbGlkOworCVVDSEFSCQkJCVBoeU1vZGU7CisJVUNIQVIJCQkJUGVlcldkc0FkZHJbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUgkJCQlNYWNUYWJNYXRjaFdDSUQ7CS8vIEFTSUMKKwlORElTXzgwMl8xMV9XRVBfU1RBVFVTICBXZXBTdGF0dXM7CisJVUNIQVIJCQkJCUtleUlkeDsKKwlDSVBIRVJfS0VZICAgICAgICAgIAlXZHNLZXk7CisJSFRUUkFOU01JVF9TRVRUSU5HCQkJCUhUUGh5TW9kZSwgTWF4SFRQaHlNb2RlLCBNaW5IVFBoeU1vZGU7CisJUlRfSFRfUEhZX0lORk8JCQkJCURlc2lyZWRIdFBoeUluZm87CisJQk9PTEVBTgkJCQkJCQliQXV0b1R4UmF0ZVN3aXRjaDsKKwlERVNJUkVEX1RSQU5TTUlUX1NFVFRJTkcgICAgICAgCURlc2lyZWRUcmFuc21pdFNldHRpbmc7IC8vIERlc2lyZWQgdHJhbnNtaXQgc2V0dGluZy4KK30gUlRfODAyXzExX1dEU19FTlRSWSwgKlBSVF84MDJfMTFfV0RTX0VOVFJZOworCit0eXBlZGVmIHN0cnVjdCBfV0RTX1RBQkxFIHsKKwlVQ0hBUiAgICAgICAgICAgICAgIE1vZGU7CisJVUxPTkcgICAgICAgICAgICAgICBTaXplOworCVJUXzgwMl8xMV9XRFNfRU5UUlkJV2RzRW50cnlbTUFYX1dEU19FTlRSWV07Cit9IFdEU19UQUJMRSwgKlBXRFNfVEFCTEU7CisKK3R5cGVkZWYgc3RydWN0IF9BUENMSV9TVFJVQ1QgeworCVBORVRfREVWCQkJCWRldjsKKyNpZmRlZiBSVEw4NjVYX1NPQworCXVuc2lnbmVkIGludCAgICAgICAgICAgIG15bGlua2lkOworI2VuZGlmCisJQk9PTEVBTiAgICAgICAgICAgICAgICAgRW5hYmxlOwkvLyBTZXQgaXQgYXMgMSBpZiB0aGUgYXBjbGkgaW50ZXJmYWNlIHdhcyBjb25maWd1cmVkIHRvICIxIiAgb3IgYnkgaXdwcml2IGNtZCAiQXBDbGlFbmFibGUiCisJQk9PTEVBTiAgICAgICAgICAgICAgICAgVmFsaWQ7CS8vIFNldCBpdCBhcyAxIGlmIHRoZSBhcGNsaSBpbnRlcmZhY2UgYXNzb2NpYXRlZCBzdWNjZXNzIHRvIHJlbW90ZSBBUC4KKwlVQ0hBUgkJCQkJTWFjVGFiV0NJRDsJLy9XQ0lEIHZhbHVlLCB3aGljaCBwb2ludCB0byB0aGUgZW50cnkgb2YgQVNJQyBNYWMgdGFibGUuCisJVUNIQVIgICAgICAgICAgICAgICAgICAgU3NpZExlbjsKKwlDSEFSICAgICAgICAgICAgICAgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF07CisKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBDZmdTc2lkTGVuOworCUNIQVIgICAgICAgICAgICAgICAgICAgIENmZ1NzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBDZmdBcENsaUJzc2lkW0VUSF9MRU5HVEhfT0ZfQUREUkVTU107CisJVUNIQVIgICAgICAgICAgICAgICAgICAgQ3VycmVudEFkZHJlc3NbRVRIX0xFTkdUSF9PRl9BRERSRVNTXTsKKworCVVMT05HICAgICAgICAgICAgICAgICAgIEFwQ2xpUmN2QmVhY29uVGltZTsKKworCVVMT05HICAgICAgICAgICAgICAgICAgIEN0cmxDdXJyU3RhdGU7CisJVUxPTkcgICAgICAgICAgICAgICAgICAgU3luY0N1cnJTdGF0ZTsKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBBdXRoQ3VyclN0YXRlOworCVVMT05HICAgICAgICAgICAgICAgICAgIEFzc29jQ3VyclN0YXRlOworCVVMT05HCQkJCQlXcGFQc2tDdXJyU3RhdGU7CisKKwlVU0hPUlQgICAgICAgICAgICAgICAgICBBdXRoUmVxQ250OworCVVTSE9SVCAgICAgICAgICAgICAgICAgIEFzc29jUmVxQ250OworCisJVUxPTkcgICAgICAgICAgICAgICAgICAgQ2xpZW50U3RhdHVzRmxhZ3M7CisJVUNIQVIgICAgICAgICAgICAgICAgICAgTXBkdURlbnNpdHk7CisKKwlORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFICAgICBBdXRoTW9kZTsgICAvLyBUaGlzIHNob3VsZCBtYXRjaCB0byB3aGF0ZXZlciBtaWNyb3NvZnQgZGVmaW5lZAorCU5ESVNfODAyXzExX1dFUF9TVEFUVVMgICAgICAgICAgICAgIFdlcFN0YXR1czsKKworCS8vIEFkZCB0byBzdXBwb3J0IGRpZmZlcmVudCBjaXBoZXIgc3VpdGUgZm9yIFdQQTIvV1BBIG1vZGUKKwlORElTXzgwMl8xMV9FTkNSWVBUSU9OX1NUQVRVUwkJR3JvdXBDaXBoZXI7CQkvLyBNdWx0aWNhc3QgY2lwaGVyIHN1aXRlCisJTkRJU184MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJCVBhaXJDaXBoZXI7CQkJLy8gVW5pY2FzdCBjaXBoZXIgc3VpdGUKKwlCT09MRUFOCQkJCQkJCQliTWl4Q2lwaGVyOwkJCS8vIEluZGljYXRlIGN1cnJlbnQgUGFpciAmIEdyb3VwIHVzZSBkaWZmZXJlbnQgY2lwaGVyIHN1aXRlcworCVVTSE9SVAkJCQkJCQkJUnNuQ2FwYWJpbGl0eTsKKworCVVDSEFSCQlQU0tbMTAwXTsJCQkJLy8gcmVzZXJ2ZSBQU0sga2V5IG1hdGVyaWFsCisJVUNIQVIgICAgICAgUFNLTGVuOworCVVDSEFSICAgICAgIFBNS1szMl07ICAgICAgICAgICAgICAgIC8vIFdQQSBQU0sgbW9kZSBQTUsKKwkvL1VDSEFSICAgICAgIFBUS1s2NF07ICAgICAgICAgICAgICAgIC8vIFdQQSBQU0sgbW9kZSBQVEsKKwlVQ0hBUgkJR1RLWzMyXTsJCQkJLy8gR1RLIGZyb20gYXV0aGVudGljYXRvcgorCisJLy9DSVBIRVJfS0VZCQlQYWlyd2lzZUtleTsKKwlDSVBIRVJfS0VZICAgICAgU2hhcmVkS2V5W1NIQVJFX0tFWV9OVU1dOworCVVDSEFSICAgICAgICAgICBEZWZhdWx0S2V5SWQ7CisKKwkvLyBXUEEgODAyLjF4IHBvcnQgY29udHJvbCwgV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQsIFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRAorCS8vVUNIQVIgICAgICAgUG9ydFNlY3VyZWQ7CisKKwkvLyBzdG9yZSBSU05fSUUgYnVpbHQgYnkgZHJpdmVyCisJVUNIQVIJCVJTTl9JRVtNQVhfTEVOX09GX1JTTklFXTsgIC8vIFRoZSBjb250ZW50IHNhdmVkIGhlcmUgc2hvdWxkIGJlIGNvbnZlcnQgdG8gbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisJVUNIQVIJCVJTTklFX0xlbjsKKworCS8vIEZvciBXUEEgY291bnRlcm1lYXN1cmVzCisJVUxPTkcgICAgICAgTGFzdE1pY0Vycm9yVGltZTsgICAvLyByZWNvcmQgbGFzdCBNSUMgZXJyb3IgdGltZQorCS8vVUxPTkcgICAgICAgTWljRXJyQ250OyAgICAgICAgICAvLyBTaG91bGQgYmUgMCwgMSwgMiwgdGhlbiByZXNldCB0byB6ZXJvIChhZnRlciBkaXNhc3NvaWNpYXRpb24pLgorCUJPT0xFQU4gICAgICAgICAgICAgICAgIGJCbG9ja0Fzc29jOyAvLyBCbG9jayBhc3NvY2lhdGUgYXR0ZW1wdCBmb3IgNjAgc2Vjb25kcyBhZnRlciBjb3VudGVyIG1lYXN1cmUgb2NjdXJyZWQuCisKKwkvLyBGb3IgV1BBLVBTSyBzdXBwbGljYW50IHN0YXRlCisJLy9XUEFfU1RBVEUgICAJV3BhU3RhdGU7ICAgICAgICAgICAvLyBEZWZhdWx0IGlzIFNTX05PVFVTRQorCS8vVUNIQVIgICAgICAgCVJlcGxheUNvdW50ZXJbOF07CisJLy9VQ0hBUiAgICAgICAJQU5vbmNlWzMyXTsgICAgICAgICAvLyBBTm9uY2UgZm9yIFdQQS1QU0sgZnJvbSBhdXRoZW50aWNhdG9yCisJVUNIQVIgICAgICAgCVNOb25jZVszMl07ICAgICAgICAgLy8gU05vbmNlIGZvciBXUEEtUFNLCisJVUNIQVIJCQlHTm9uY2VbMzJdOwkJCS8vIEdOb25jZSBmb3IgV1BBLVBTSyBmcm9tIGF1dGhlbnRpY2F0b3IKKworCUhUVFJBTlNNSVRfU0VUVElORwkJCQlIVFBoeU1vZGUsIE1heEhUUGh5TW9kZSwgTWluSFRQaHlNb2RlOworCVJUX0hUX1BIWV9JTkZPCQkJCQlEZXNpcmVkSHRQaHlJbmZvOworCUJPT0xFQU4JCQkJCQkJYkF1dG9UeFJhdGVTd2l0Y2g7CisJREVTSVJFRF9UUkFOU01JVF9TRVRUSU5HICAgICAgIAlEZXNpcmVkVHJhbnNtaXRTZXR0aW5nOyAvLyBEZXNpcmVkIHRyYW5zbWl0IHNldHRpbmcuCit9IEFQQ0xJX1NUUlVDVCwgKlBBUENMSV9TVFJVQ1Q7CisKKy8vIC0tLS0tLS0tLS0tIGVuZCBvZiBBUCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpZmRlZiBCTE9DS19ORVRfSUYKK3R5cGVkZWYgc3RydWN0IF9CTE9DS19RVUVVRV9FTlRSWQoreworCUJPT0xFQU4gU3dUeFF1ZXVlQmxvY2tGbGFnOworCUxJU1RfSEVBREVSIE5ldElmTGlzdDsKK30gQkxPQ0tfUVVFVUVfRU5UUlksICpQQkxPQ0tfUVVFVUVfRU5UUlk7CisjZW5kaWYgLy8gQkxPQ0tfTkVUX0lGIC8vCisKKworc3RydWN0IHdpZmljb25mCit7CisJQk9PTEVBTgliU2hvcnRHSTsKKwlCT09MRUFOIGJHcmVlbkZpZWxkOworfTsKKworCisKKwordHlwZWRlZiBzdHJ1Y3QgX0lORl9QQ0lfQ09ORklHCit7CisJUFVDSEFSICAgICAgICAgICAgICAgICAgQ1NSQmFzZUFkZHJlc3M7ICAgICAvLyBQQ0kgTU1JTyBCYXNlIEFkZHJlc3MsIGFsbCBhY2Nlc3Mgd2lsbCB1c2UKK31JTkZfUENJX0NPTkZJRzsKKwordHlwZWRlZiBzdHJ1Y3QgX0lORl9VU0JfQ09ORklHCit7CisJVUlOVCAgICAgICAgICAgICAgICBCdWxrSW5FcEFkZHI7CQkvLyBidWxrLWluIGVuZHBvaW50IGFkZHJlc3MKKwlVSU5UICAgICAgICAgICAgICAgIEJ1bGtPdXRFcEFkZHJbNl07CS8vIGJ1bGstb3V0IGVuZHBvaW50IGFkZHJlc3MKKworfUlORl9VU0JfQ09ORklHOworCisjaWZkZWYgSUtBTk9TX1ZYXzFYMAorCXR5cGVkZWYgdm9pZCAoKklrYW5vc1dsYW5UeENiRnVuY1ApKHZvaWQgKiwgdm9pZCAqKTsKKworCXN0cnVjdCBJS0FOT1NfVFhfSU5GTworCXsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwkJSWthbm9zV2xhblR4Q2JGdW5jUCAqZnA7CisJfTsKKyNlbmRpZiAvLyBJS0FOT1NfVlhfMVgwIC8vCisKKyNpZmRlZiBOSU5URU5ET19BUAordHlwZWRlZiBzdHJ1Y3QgX05JTkRPX0NUUkxfQkxPQ0sgeworCisJUlRfTklOVEVORE9fVEFCTEUJRFNfVEFCTEU7CisKKyNpZmRlZiBDSElQMjVYWAorCXNwaW5sb2NrX3QJCQlOSU5URU5ET19UQUJMRV9Mb2NrOworI2Vsc2UKKwlORElTX1NQSU5fTE9DSwkJTklOVEVORE9fVEFCTEVfTG9jazsKKyNlbmRpZiAvLyBDSElQMjVYWCAvLworCisJVUNIQVIJCQkJTklOVEVORE9fVVBfQlVGRkVSWzUxMl07CisJVUNIQVIJCQkJTG9jYWxfS2V5SWR4OworCUNJUEhFUl9LRVkJCQlMb2NhbF9TaGFyZWRLZXk7CisJVUNIQVIJCQkJTG9jYWxfYkhpZGVTc2lkOworCVVDSEFSCQkJCUxvY2FsX0F1dGhNb2RlOworCVVDSEFSCQkJCUxvY2FsX1dlcFN0YXR1czsKKwlVU0hPUlQJCQkJTG9jYWxfQ2FwYWJpbGl0eUluZm87Cit9IE5JTkRPX0NUUkxfQkxPQ0s7CisjZW5kaWYgLy8gTklOVEVORE9fQVAgLy8KKworCisjaWZkZWYgREJHX0RJQUdOT1NFCisjZGVmaW5lIERJQUdOT1NFX1RJTUUJMTAgICAvLyAxMCBzZWMKK3R5cGVkZWYgc3RydWN0IF9SdG1wRGlhZ1N0cmN1dF8KK3sJLy8gRGlhZ25vc2lzIFJlbGF0ZWQgZWxlbWVudAorCXVuc2lnbmVkIGNoYXIJCWluaXRlZDsKKwl1bnNpZ25lZCBjaGFyIAlxSWR4OworCXVuc2lnbmVkIGNoYXIgCUFycmF5U3RhcnRJZHg7CisJdW5zaWduZWQgY2hhcgkJQXJyYXlDdXJJZHg7CisJLy8gVHggUmVsYXRlZCBDb3VudAorCVVTSE9SVAkJCVR4RGF0YUNudFtESUFHTk9TRV9USU1FXTsKKwlVU0hPUlQJCQlUeEZhaWxDbnRbRElBR05PU0VfVElNRV07CisvLwlVU0hPUlQJCQlUeERlc2NDbnRbRElBR05PU0VfVElNRV1bMTZdOwkJLy8gVHhEZXNjIHF1ZXVlIGxlbmd0aCBpbiBzY2FsZSBvZiAwfjE0LCA+PTE1CisJVVNIT1JUCQkJVHhEZXNjQ250W0RJQUdOT1NFX1RJTUVdWzI0XTsgLy8gMyozCS8vIFR4RGVzYyBxdWV1ZSBsZW5ndGggaW4gc2NhbGUgb2YgMH4xNCwgPj0xNQorLy8JVVNIT1JUCQkJVHhNY3NDbnRbRElBR05PU0VfVElNRV1bMTZdOwkJCS8vIFR4RGF0ZSBNQ1MgQ291bnQgaW4gcmFuZ2UgZnJvbSAwIHRvIDE1LCBzdGVwIGluIDEuCisJVVNIT1JUCQkJVHhNY3NDbnRbRElBR05PU0VfVElNRV1bMjRdOyAvLyAzKjMKKwlVU0hPUlQJCQlUeFNXUXVlQ250W0RJQUdOT1NFX1RJTUVdWzldOwkJLy8gVHhTd1F1ZXVlIGxlbmd0aCBpbiBzY2FsZSBvZiAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA+PTgKKworCVVTSE9SVAkJCVR4QWdnQ250W0RJQUdOT1NFX1RJTUVdOworCVVTSE9SVAkJCVR4Tm9uQWdnQ250W0RJQUdOT1NFX1RJTUVdOworLy8JVVNIT1JUCQkJVHhBTVBEVUNudFtESUFHTk9TRV9USU1FXVsxNl07CQkvLyAxMCBzZWMsIFR4RE1BIEFQTURVIEFnZ3JlZ2F0aW9uIGNvdW50IGluIHJhbmdlIGZyb20gMCB0byAxNSwgaW4gc2V0cCBvZiAxLgorCVVTSE9SVAkJCVR4QU1QRFVDbnRbRElBR05PU0VfVElNRV1bMjRdOyAvLyAzKjMgLy8gMTAgc2VjLCBUeERNQSBBUE1EVSBBZ2dyZWdhdGlvbiBjb3VudCBpbiByYW5nZSBmcm9tIDAgdG8gMTUsIGluIHNldHAgb2YgMS4KKwlVU0hPUlQJCQlUeFJhbGlua0NudFtESUFHTk9TRV9USU1FXTsJCQkvLyBUeFJhbGluayBBZ2dyZWdhdGlvbiBDb3VudCBpbiAxIHNlYyBzY2FsZS4KKwlVU0hPUlQJCQlUeEFNU0RVQ250W0RJQUdOT1NFX1RJTUVdOwkJCS8vIFR4QU1TVUQgQWdncmVnYXRpb24gQ291bnQgaW4gMSBzZWMgc2NhbGUuCisKKwkvLyBSeCBSZWxhdGVkIENvdW50CisJVVNIT1JUCQkJUnhEYXRhQ250W0RJQUdOT1NFX1RJTUVdOwkJCS8vIFJ4IFRvdGFsIERhdGEgY291bnQuCisJVVNIT1JUCQkJUnhDcmNFcnJDbnRbRElBR05PU0VfVElNRV07CisvLwlVU0hPUlQJCQlSeE1jc0NudFtESUFHTk9TRV9USU1FXVsxNl07CQkvLyBSeCBNQ1MgQ291bnQgaW4gcmFuZ2UgZnJvbSAwIHRvIDE1LCBzdGVwIGluIDEuCisJVVNIT1JUCQkJUnhNY3NDbnRbRElBR05PU0VfVElNRV1bMjRdOyAvLyAzKjMKK31SdG1wRGlhZ1N0cnVjdDsKKyNlbmRpZiAvLyBEQkdfRElBR05PU0UgLy8KKworCisvLworLy8gIFRoZSBtaW5pcG9ydCBhZGFwdGVyIHN0cnVjdHVyZQorLy8KK3R5cGVkZWYgc3RydWN0IF9SVE1QX0FEQVBURVIKK3sKKwlQVk9JRAkJCQkJT1NfQ29va2llOwkvLyBzYXZlIHNwZWNpZmljIHN0cnVjdHVyZSByZWxhdGl2ZSB0byBPUworCVBORVRfREVWCQkJCW5ldF9kZXY7CisJVUxPTkcJCQkJCVZpcnR1YWxJZkNudDsKKworCisKKwlORElTX1NQSU5fTE9DSyAgICAgICAgICBpcnFfbG9jazsKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBpcnFfZGlzYWJsZWQ7CisKKyNpZmRlZiBSVDI4NzAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgVVNCIHJlbGF0ZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yCQkqY29uZmlnOworCVVJTlQJCQkJCQkJCUJ1bGtJbkVwQWRkcjsJCS8vIGJ1bGstaW4gZW5kcG9pbnQgYWRkcmVzcworCVVJTlQJCQkJCQkJCUJ1bGtPdXRFcEFkZHJbNl07CS8vIGJ1bGstb3V0IGVuZHBvaW50IGFkZHJlc3MKKworCVVJTlQJCQkJCQkJCU51bWJlck9mUGlwZXM7CisJVVNIT1JUCQkJCQkJCQlCdWxrT3V0TWF4UGFja2V0U2l6ZTsKKwlVU0hPUlQJCQkJCQkJCUJ1bGtJbk1heFBhY2tldFNpemU7CisKKwkvLz09PT09PUNvbnRyb2wgRmxhZ3MKKwlMT05HICAgICAgICAgICAgICAgICAgICAJUGVuZGluZ0lvQ291bnQ7CisJVUxPTkcJCQkJCQlCdWxrRmxhZ3M7CisJQk9PTEVBTiAgICAgICAgICAgICAgICAgICAgIGJVc2JUeEJ1bGtBZ2dyZTsJLy8gRmxhZ3MgZm9yIGJ1bGsgb3V0IGRhdGEgcHJpb3JpdHkKKworCisJLy89PT09PT1UaW1lciBUaHJlYWQKKwlSVDI4NzBfVElNRVJfUVVFVUUJCVRpbWVyUTsKKwlORElTX1NQSU5fTE9DSwkJCVRpbWVyUUxvY2s7CisKKworCS8vPT09PT09Q21kIFRocmVhZAorCUNtZFEJCQkJCUNtZFE7CisJTkRJU19TUElOX0xPQ0sJCQlDbWRRTG9jazsJCQkJLy8gQ21kUUxvY2sgc3BpbmxvY2sKKworCUJPT0xFQU4JCQkJCVRpbWVyRnVuY19raWxsOworCUJPT0xFQU4JCQkJCW1sbWVfa2lsbDsKKworCisJLy89PT09PT1TZW1hcGhvcmVzIChldmVudCkKKwlzdHJ1Y3Qgc2VtYXBob3JlCQkJbWxtZV9zZW1hcGhvcmU7CQkJLyogdG8gc2xlZXAgdGhyZWFkIG9uCSovCisJc3RydWN0IHNlbWFwaG9yZQkJCVJUVVNCQ21kX3NlbWFwaG9yZTsJCS8qIHRvIHNsZWVwIHRocmVhZCBvbgkqLworCXN0cnVjdCBzZW1hcGhvcmUJCQlSVFVTQlRpbWVyX3NlbWFwaG9yZTsKKyNpZmRlZiBJTkZfQU1BWk9OX1NFCisJc3RydWN0IHNlbWFwaG9yZQkJCVVzYlZlbmRvclJlcV9zZW1hcGhvcmU7CisJUFZPSUQJCQkJCQlVc2JWZW5kb3JSZXFCdWY7CisjZW5kaWYgLy8gSU5GX0FNQVpPTl9TRSAvLworCXN0cnVjdCBjb21wbGV0aW9uCQkJVGltZXJRQ29tcGxldGU7CisJc3RydWN0IGNvbXBsZXRpb24JCQltbG1lQ29tcGxldGU7CisJc3RydWN0IGNvbXBsZXRpb24JCQlDbWRRQ29tcGxldGU7CisJd2FpdF9xdWV1ZV9oZWFkX3QJCQkqd2FpdDsKKworCS8vPT09PT09TG9jayBmb3IgMjg3MCBBVEUKKyNpZmRlZiBSQUxJTktfQVRFCisJTkRJU19TUElOX0xPQ0sJCQlHZW5lcmljTG9jazsJCS8vIEFURSBUeC9SeCBnZW5lcmljIHNwaW5sb2NrCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisjZW5kaWYgLy8gUlQyODcwIC8vCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qICAgICAgQm90aCBQQ0kvVVNCIHJlbGF0ZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgIFR4IHJlbGF0ZWQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlCT09MRUFOICAgICAgICAgICAgICAgICBEZVF1ZXVlUnVubmluZ1tOVU1fT0ZfVFhfUklOR107ICAvLyBmb3IgZW5zdXJpbmcgUlRVU0JEZVF1ZXVlUGFja2V0IGdldCBjYWxsIG9uY2UKKwlORElTX1NQSU5fTE9DSyAgICAgICAgICBEZVF1ZXVlTG9ja1tOVU1fT0ZfVFhfUklOR107CisKKyNpZmRlZiBSVDI4NzAKKwkvLyBEYXRhIHJlbGF0ZWQgY29udGV4dCBhbmQgQUMgc3BlY2lmaWVkLCA0IEFDIHN1cHBvcnRlZAorCU5ESVNfU1BJTl9MT0NLCQkJQnVsa091dExvY2tbNl07CQkJLy8gQnVsa091dCBzcGlubG9jayBmb3IgNCBBQ3MKKwlORElTX1NQSU5fTE9DSwkJCU1MTUVCdWxrT3V0TG9jazsJLy8gTUxNRSBCdWxrT3V0IGxvY2sKKworCUhUX1RYX0NPTlRFWFQJCQlUeENvbnRleHRbTlVNX09GX1RYX1JJTkddOworCU5ESVNfU1BJTl9MT0NLCQkJVHhDb250ZXh0UXVldWVMb2NrW05VTV9PRl9UWF9SSU5HXTsJCS8vIFR4Q29udGV4dFF1ZXVlIHNwaW5sb2NrCisKKwkvLyA0IHNldHMgb2YgQnVsayBPdXQgaW5kZXggYW5kIHBlbmRpbmcgZmxhZworCVVDSEFSCQkJCQlOZXh0QnVsa091dEluZGV4WzRdOwkvLyBvbmx5IHVzZWQgZm9yIDQgRURDQSBidWxrb3V0IHBpcGUKKworCUJPT0xFQU4JCQkJCUJ1bGtPdXRQZW5kaW5nWzZdOwkvLyB1c2VkIGZvciB0b3RhbCA2IGJ1bGtvdXQgcGlwZQorCVVDSEFSCQkJCQlidWxrUmVzZXRQaXBlaWQ7CisJQk9PTEVBTgkJCQkJTWdtdEJ1bGtQZW5kaW5nOworCVVMT05HCQkJCQlidWxrUmVzZXRSZXFbNl07CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKwkvLyByZXNvdXJjZSBmb3Igc29mdHdhcmUgYmFja2xvZyBxdWV1ZXMKKwlRVUVVRV9IRUFERVIgICAgICAgICAgICBUeFN3UXVldWVbTlVNX09GX1RYX1JJTkddOyAgLy8gNCBBQyArIDEgSENDQQorCU5ESVNfU1BJTl9MT0NLICAgICAgICAgIFR4U3dRdWV1ZUxvY2tbTlVNX09GX1RYX1JJTkddOwkvLyBUeFN3UXVldWUgc3BpbmxvY2sKKworCVJUTVBfRE1BQlVGICAgICAgICAgICAgIE1nbXREZXNjUmluZzsgICAgICAgICAgICAgICAJLy8gU2hhcmVkIG1lbW9yeSBmb3IgTUdNVCBkZXNjcmlwdG9ycworCVJUTVBfTUdNVF9SSU5HICAgICAgICAgIE1nbXRSaW5nOworCU5ESVNfU1BJTl9MT0NLICAgICAgICAgIE1nbXRSaW5nTG9jazsgICAgICAgICAgICAgICAJLy8gUHJpbyBSaW5nIHNwaW5sb2NrCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICBSeCByZWxhdGVkIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmZGVmIFJUMjg3MAorCVJYX0NPTlRFWFQJCQkJUnhDb250ZXh0W1JYX1JJTkdfU0laRV07ICAvLyAxIGZvciByZWR1bmRhbnQgbXVsdGlwbGUgSVJQIGJ1bGsgaW4uCisJTkRJU19TUElOX0xPQ0sJCQlCdWxrSW5Mb2NrOwkJCQkvLyBCdWxrSW4gc3BpbmxvY2sgZm9yIDQgQUNzCisJVUNIQVIJCQkJCVBlbmRpbmdSeDsJCQkJLy8gVGhlIE1heGltYSBwZW5kaW5nIFJ4IHZhbHVlIHNob3VsZCBiZSAJUlhfUklOR19TSVpFLgorCVVDSEFSCQkJCQlOZXh0UnhCdWxrSW5JbmRleDsJCS8vIEluZGljYXRlIHRoZSBjdXJyZW50IFJ4Q29udGV4dCBJbmRleCB3aGljaCBob2xkIGJ5IEhvc3QgY29udHJvbGxlci4KKwlVQ0hBUgkJCQkJTmV4dFJ4QnVsa0luUmVhZEluZGV4OwkvLyBJbmRpY2F0ZSB0aGUgY3VycmVudCBSeENvbnRleHQgSW5kZXggd2hpY2ggZHJpdmVyIGNhbiByZWFkICYgcHJvY2VzcyBpdC4KKwlVTE9ORwkJCQkJTmV4dFJ4QnVsa0luUG9zaXRpb247ICAgLy8gV2FudCB0byBjb250YXRlbmF0ZSAyIFVSQiBidWZmZXIgd2hpbGUgMXN0IGlzIGJ1bGtpbiBmYWlsZWQgVVJCLiBUaGlzIFBvc2l0aW9uIGlzIDFzdCBVUkIgVHJhbnNmZXJMZW5ndGguCisJVUxPTkcJCQkJCVRyYW5zZmVyQnVmZmVyTGVuZ3RoOwkvLyBjdXJyZW50IGxlbmd0aCBvZiB0aGUgcGFja2V0IGJ1ZmZlcgorCVVMT05HCQkJCQlSZWFkUG9zaXRpb247CQkJLy8gY3VycmVudCByZWFkIHBvc2l0aW9uIGluIGEgcGFja2V0IGJ1ZmZlcgorI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgQVNJQyByZWxhdGVkIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlVSU5UMzIgICAgICAgICAgICAgICAJTUFDVmVyc2lvbjsgICAgICAJLy8gTUFDIHZlcnNpb24uIFJlY29yZCBydDI4NjBDKDB4Mjg2MDAxMDApIG9yIHJ0Mjg2MEQgKDB4Mjg2MDAxMDEpLi4KKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIEUyUFJPTQorCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVVMT05HICAgICAgICAgICAgICAgICAgIEVlcHJvbVZlcnNpb247ICAgICAgICAgIC8vIGJ5dGUgMDogdmVyc2lvbiwgYnl0ZSAxOiByZXZpc2lvbiwgYnl0ZSAyfjM6IHVudXNlZAorCVVDSEFSICAgICAgICAgICAgICAgICAgIEVFUFJPTUFkZHJlc3NOdW07ICAgICAgIC8vIDkzYzQ2PTYgIDkzYzY2PTgKKwlVU0hPUlQgICAgICAgICAgICAgICAgICBFRVBST01EZWZhdWx0VmFsdWVbTlVNX0VFUFJPTV9CQlBfUEFSTVNdOworCUJPT0xFQU4gICAgICAgICAgICAgICAgIEVlcHJvbUFjY2VzczsKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBFRnVzZVRhZzsKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBGaXJtd2FyZVZlcnNpb247ICAgICAgICAvLyBieXRlIDA6IE1pbm9yIHZlcnNpb24sIGJ5dGUgMTogTWFqb3IgdmVyc2lvbiwgb3RoZXJ3aXNlIHVudXNlZC4KKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIEJCUCBDb250cm9sCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJVUNIQVIgICAgICAgICAgICAgICAgICAgQmJwV3JpdGVMYXRjaFsxNDBdOyAgICAgLy8gcmVjb3JkIGxhc3QgQkJQIHJlZ2lzdGVyIHZhbHVlIHdyaXR0ZW4gdmlhIEJCUF9JT19XUklURS9CQlBfSU9fV1JJVEVfVllfUkVHX0lECisJVUNIQVIgICAgICAgICAgICAgICAgICAgQmJwUnNzaVRvRGJtRGVsdGE7CisJQkJQX1I2Nl9UVU5JTkcgICAgICAgICAgQmJwVHVuaW5nOworCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIFJGSUMgY29udHJvbAorCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBSZkljVHlwZTsgICAgICAgLy8gUkZJQ194eHgKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBSZkZyZXFPZmZzZXQ7ICAgLy8gRnJlcXVlbmN5IG9mZnNldCBmb3IgY2hhbm5lbCBzd2l0Y2hpbmcKKwlSVE1QX1JGX1JFR1MgICAgICAgICAgICBMYXRjaFJmUmVnczsgICAgLy8gbGF0Y2ggdGggbGF0ZXN0IFJGIHByb2dyYW1taW5nIHZhbHVlIHNpbmNlIFJGIElDIGRvZXNuJ3Qgc3VwcG9ydCBSRUFECisKKwlFRVBST01fQU5URU5OQV9TVFJVQyAgICBBbnRlbm5hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBBTnRlbm5hIGRlZmluaXRpb24gaXMgZGlmZmVyZW50IGZvciBhICYgZy4gV2UgbmVlZCB0byBzYXZlIGl0IGZvciBmdXR1cmUgcmVmZXJlbmNlLgorCUVFUFJPTV9OSUNfQ09ORklHMl9TVFJVQyAgICBOaWNDb25maWcyOworCisJLy8gVGhpcyBzb2Z0IFJ4IEFudGVubmEgRGl2ZXJzaXR5IG1lY2hhbmlzbSBpcyB1c2VkIG9ubHkgd2hlbiB1c2VyIHNldAorCS8vIFJYIEFudGVubmEgPSBESVZFUlNJVFkgT04KKwlTT0ZUX1JYX0FOVF9ESVZFUlNJVFkgICBSeEFudDsKKworCVVDSEFSICAgICAgICAgICAgICAgICAgIFJGUHJvZ1NlcTsKKwlDSEFOTkVMX1RYX1BPV0VSICAgICAgICBUeFBvd2VyW01BWF9OVU1fT0ZfQ0hBTk5FTFNdOyAgICAgICAvLyBTdG9yZSBUeCBwb3dlciB2YWx1ZSBmb3IgYWxsIGNoYW5uZWxzLgorCUNIQU5ORUxfVFhfUE9XRVIgICAgICAgIENoYW5uZWxMaXN0W01BWF9OVU1fT0ZfQ0hBTk5FTFNdOyAgIC8vIGxpc3QgYWxsIHN1cHBvcnRlZCBjaGFubmVscyBmb3Igc2l0ZSBzdXJ2ZXkKKwlDSEFOTkVMXzExSl9UWF9QT1dFUiAgICBUeFBvd2VyMTFKW01BWF9OVU1fT0ZfMTFKQ0hBTk5FTFNdOyAgICAgICAvLyA4MDIuMTFqIGNoYW5uZWwgYW5kIGJ3CisJQ0hBTk5FTF8xMUpfVFhfUE9XRVIgICAgQ2hhbm5lbExpc3QxMUpbTUFYX05VTV9PRl8xMUpDSEFOTkVMU107ICAgLy8gbGlzdCBhbGwgc3VwcG9ydGVkIGNoYW5uZWxzIGZvciBzaXRlIHN1cnZleQorCisJVUNIQVIgICAgICAgICAgICAgICAgICAgQ2hhbm5lbExpc3ROdW07ICAgICAgICAgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGNoYW5uZWwgaW4gQ2hhbm5lbExpc3RbXQorCVVDSEFSCQkJCQlCYnA5NDsKKwlCT09MRUFOCQkJCQlCYnBGb3JDQ0s7CisJVUxPTkcJCVR4MjBNUHdyQ2ZnQUJhbmRbNV07CisJVUxPTkcJCVR4MjBNUHdyQ2ZnR0JhbmRbNV07CisJVUxPTkcJCVR4NDBNUHdyQ2ZnQUJhbmRbNV07CisJVUxPTkcJCVR4NDBNUHdyQ2ZnR0JhbmRbNV07CisKKwlCT09MRUFOICAgICBiQXV0b1R4QWdjQTsgICAgICAgICAgICAgICAgLy8gRW5hYmxlIGRyaXZlciBhdXRvIFR4IEFnYyBjb250cm9sCisJVUNIQVIJICAgIFRzc2lSZWZBOwkJCQkJLy8gU3RvcmUgVHNzaSByZWZlcmVuY2UgdmFsdWUgYXMgMjUgdGVtcGVyYXR1cmUuCisJVUNIQVIJICAgIFRzc2lQbHVzQm91bmRhcnlBWzVdOwkJLy8gVHNzaSBib3VuZGFyeSBmb3IgaW5jcmVhc2UgVHggcG93ZXIgdG8gY29tcGVuc2F0ZS4KKwlVQ0hBUgkgICAgVHNzaU1pbnVzQm91bmRhcnlBWzVdOwkJLy8gVHNzaSBib3VuZGFyeSBmb3IgZGVjcmVhc2UgVHggcG93ZXIgdG8gY29tcGVuc2F0ZS4KKwlVQ0hBUgkgICAgVHhBZ2NTdGVwQTsJCQkJCS8vIFN0b3JlIFR4IFRTU0kgZGVsdGEgaW5jcmVtZW50IC8gZGVjcmVtZW50IHZhbHVlCisJQ0hBUgkJVHhBZ2NDb21wZW5zYXRlQTsJCQkvLyBTdG9yZSB0aGUgY29tcGVuc2F0aW9uIChUeEFnY1N0ZXAgKiAoaWR4LTEpKQorCisJQk9PTEVBTiAgICAgYkF1dG9UeEFnY0c7ICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBkcml2ZXIgYXV0byBUeCBBZ2MgY29udHJvbAorCVVDSEFSCSAgICBUc3NpUmVmRzsJCQkJCS8vIFN0b3JlIFRzc2kgcmVmZXJlbmNlIHZhbHVlIGFzIDI1IHRlbXBlcmF0dXJlLgorCVVDSEFSCSAgICBUc3NpUGx1c0JvdW5kYXJ5R1s1XTsJCS8vIFRzc2kgYm91bmRhcnkgZm9yIGluY3JlYXNlIFR4IHBvd2VyIHRvIGNvbXBlbnNhdGUuCisJVUNIQVIJICAgIFRzc2lNaW51c0JvdW5kYXJ5R1s1XTsJCS8vIFRzc2kgYm91bmRhcnkgZm9yIGRlY3JlYXNlIFR4IHBvd2VyIHRvIGNvbXBlbnNhdGUuCisJVUNIQVIJICAgIFR4QWdjU3RlcEc7CQkJCQkvLyBTdG9yZSBUeCBUU1NJIGRlbHRhIGluY3JlbWVudCAvIGRlY3JlbWVudCB2YWx1ZQorCUNIQVIJCVR4QWdjQ29tcGVuc2F0ZUc7CQkJLy8gU3RvcmUgdGhlIGNvbXBlbnNhdGlvbiAoVHhBZ2NTdGVwICogKGlkeC0xKSkKKworCS8vKysrRm9yIFJUMjg3MCwgdGhlIHBhcmFtZXRlcmVzIGlzIHN0YXJ0IGZyb20gQkdSc3NpT2Zmc2V0MSB+IEJHUnNzaU9mZnNldDMKKwlDSEFSCQlCR1Jzc2lPZmZzZXQwOwkJCQkvLyBTdG9yZSBCL0cgUlNTSSMwIE9mZnNldCB2YWx1ZSBvbiBFRVBST00gMHg0NmgKKwlDSEFSCQlCR1Jzc2lPZmZzZXQxOwkJCQkvLyBTdG9yZSBCL0cgUlNTSSMxIE9mZnNldCB2YWx1ZQorCUNIQVIJCUJHUnNzaU9mZnNldDI7CQkJCS8vIFN0b3JlIEIvRyBSU1NJIzIgT2Zmc2V0IHZhbHVlCisJLy8tLS0KKworCS8vKysrRm9yIFJUMjg3MCwgdGhlIHBhcmFtZXRlcmVzIGlzIHN0YXJ0IGZyb20gQVJzc2lPZmZzZXQxIH4gQVJzc2lPZmZzZXQzCisJQ0hBUgkJQVJzc2lPZmZzZXQwOwkJCQkvLyBTdG9yZSBBIFJTU0kjMCBPZmZzZXQgdmFsdWUgb24gRUVQUk9NIDB4NEFoCisJQ0hBUgkJQVJzc2lPZmZzZXQxOwkJCQkvLyBTdG9yZSBBIFJTU0kjMSBPZmZzZXQgdmFsdWUKKwlDSEFSCQlBUnNzaU9mZnNldDI7CQkJCS8vIFN0b3JlIEEgUlNTSSMyIE9mZnNldCB2YWx1ZQorCS8vLS0tCisKKwlDSEFSCQlCTE5BR2FpbjsJCQkJCS8vIFN0b3JlIEIvRyBleHRlcm5hbCBMTkEjMCB2YWx1ZSBvbiBFRVBST00gMHg0NGgKKwlDSEFSCQlBTE5BR2FpbjA7CQkJCQkvLyBTdG9yZSBBIGV4dGVybmFsIExOQSMwIHZhbHVlIGZvciBjaDM2fjY0CisJQ0hBUgkJQUxOQUdhaW4xOwkJCQkJLy8gU3RvcmUgQSBleHRlcm5hbCBMTkEjMSB2YWx1ZSBmb3IgY2gxMDB+MTI4CisJQ0hBUgkJQUxOQUdhaW4yOwkJCQkJLy8gU3RvcmUgQSBleHRlcm5hbCBMTkEjMiB2YWx1ZSBmb3IgY2gxMzJ+MTY1CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gTEVEIGNvbnRyb2wKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJTUNVX0xFRENTX1NUUlVDCQlMZWRDbnRsOworCVVTSE9SVAkJCQlMZWQxOwkvLyByZWFkIGZyb20gRUVQUk9NIDB4M2MKKwlVU0hPUlQJCQkJTGVkMjsJLy8gRUVQUk9NIDB4M2UKKwlVU0hPUlQJCQkJTGVkMzsJLy8gRUVQUk9NIDB4NDAKKwlVQ0hBUgkJCQlMZWRJbmRpY2F0b3JTdHJlZ3RoOworCVVDSEFSCQkJCVJzc2lTaW5nYWxzdHJlbmd0aE9mZmV0OworICAgIEJPT0xFQU4JCQkJYkxlZE9uU2Nhbm5pbmc7CisJVUNIQVIJCQkJTGVkU3RhdHVzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgIDgwMi4xMSByZWxhdGVkIHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLy8gb3V0Z29pbmcgQkVBQ09OIGZyYW1lIGJ1ZmZlciBhbmQgY29ycmVzcG9uZGluZyBUWEQKKwlUWFdJX1NUUlVDICAgICAgICAgICAgICAJQmVhY29uVHhXSTsKKwlQVUNIQVIJCQkJCQlCZWFjb25CdWY7CisJVVNIT1JUCQkJCQkJQmVhY29uT2Zmc2V0W0hXX0JFQUNPTl9NQVhfQ09VTlRdOworCisJLy8gcHJlLWJ1aWxkIFBTLVBPTEwgYW5kIE5VTEwgZnJhbWUgdXBvbiBsaW5rIHVwLiBmb3IgZWZmaWNpZW5jeSBwdXJwb3NlLgorCVBTUE9MTF9GUkFNRSAgICAgICAgICAgIAlQc1BvbGxGcmFtZTsKKwlIRUFERVJfODAyXzExICAgICAgICAgICAJTnVsbEZyYW1lOworCisjaWZkZWYgUlQyODcwCisJVFhfQ09OVEVYVAkJCQlCZWFjb25Db250ZXh0W0JFQUNPTl9SSU5HX1NJWkVdOworCVRYX0NPTlRFWFQJCQkJTnVsbENvbnRleHQ7CisJVFhfQ09OVEVYVAkJCQlQc1BvbGxDb250ZXh0OworCVRYX0NPTlRFWFQJCQkJUlRTQ29udGV4dDsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCisKKy8vPT09PT09PT09QVA9PT09PT09PT09PQorCisKKy8vPT09PT09PVNUQT09PT09PT09PT09CisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvKiBNb2RpZmllZCBieSBXdSBYaS1LdW4gNC8yMS8yMDA2ICovCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBTVEEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAmIG9wZXJhdGlvbiBzdGF0dXMKKwkvLyB1c2VkIG9ubHkgd2hlbiBwQWQtPk9wTW9kZSA9PSBPUE1PREVfU1RBCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTVEFfQURNSU5fQ09ORklHICAgICAgICBTdGFDZmc7ICAgICAgICAgICAvLyB1c2VyIGRlc2lyZWQgc2V0dGluZ3MKKwlTVEFfQUNUSVZFX0NPTkZJRyAgICAgICBTdGFBY3RpdmU7ICAgICAgICAgLy8gdmFsaWQgb25seSB3aGVuIEFESE9DX09OKHBBZCkgfHwgSU5GUkFfT04ocEFkKQorCUNIQVIgICAgICAgICAgICAgICAgICAgIG5pY2tuYW1lW0lXX0VTU0lEX01BWF9TSVpFKzFdOyAvLyBuaWNrbmFtZSwgb25seSB1c2VkIGluIHRoZSBpd2NvbmZpZyBpL2YKKwlORElTX01FRElBX1NUQVRFICAgICAgICBQcmVNZWRpYVN0YXRlOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisvLz09PT09PT1Db21tb249PT09PT09PT09PQorCS8vIE9QIG1vZGU6IGVpdGhlciBBUCBvciBTVEEKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICBPcE1vZGU7ICAgICAgICAgICAgICAgICAgICAgLy8gT1BNT0RFX1NUQSwgT1BNT0RFX0FQCisKKwlORElTX01FRElBX1NUQVRFICAgICAgICBJbmRpY2F0ZU1lZGlhU3RhdGU7CQkJLy8gQmFzZSBvbiBJbmRpY2F0aW9uIHN0YXRlLCBkZWZhdWx0IGlzIE5kaXNNZWRpYVN0YXRlRGlzQ29ubmVjdGVkCisKKworCS8vIE1BVCByZWxhdGVkIHBhcmFtZXRlcnMKKworCS8vIGNvbmZpZ3VyYXRpb246IHJlYWQgZnJvbSBSZWdpc3RyeSAmIEUyUFJPTQorCUJPT0xFQU4gICAgICAgICAgICAgICAgIGJMb2NhbEFkbWluTUFDOyAgICAgICAgICAgICAvLyBVc2UgdXNlciBjaGFuZ2VkIE1BQworCVVDSEFSICAgICAgICAgICAgICAgICAgIFBlcm1hbmVudEFkZHJlc3NbTUFDX0FERFJfTEVOXTsgICAgLy8gRmFjdG9yeSBkZWZhdWx0IE1BQyBhZGRyZXNzCisJVUNIQVIgICAgICAgICAgICAgICAgICAgQ3VycmVudEFkZHJlc3NbTUFDX0FERFJfTEVOXTsgICAgICAvLyBVc2VyIGNoYW5nZWQgTUFDIGFkZHJlc3MKKworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIGNvbW1vbiBjb25maWd1cmF0aW9uIHRvIGJvdGggT1BNT0RFX1NUQSBhbmQgT1BNT0RFX0FQCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJQ09NTU9OX0NPTkZJRyAgICAgICAgICAgQ29tbW9uQ2ZnOworCU1MTUVfU1RSVUNUICAgICAgICAgICAgIE1sbWU7CisKKwkvLyBBUCBuZWVkcyB0aG9zZSB2YWlhYmxlcyBmb3Igc2l0ZSBzdXJ2ZXkgZmVhdHVyZS4KKwlNTE1FX0FVWCAgICAgICAgICAgICAgICBNbG1lQXV4OyAgICAgICAgICAgLy8gdGVtcG9yYXJ5IHNldHRpbmdzIHVzZWQgZHVyaW5nIE1MTUUgc3RhdGUgbWFjaGluZQorCUJTU19UQUJMRSAgICAgICAgICAgICAgIFNjYW5UYWI7ICAgICAgICAgICAvLyBzdG9yZSB0aGUgbGF0ZXN0IFNDQU4gcmVzdWx0CisKKwkvL0Fib3V0IE1hY1RhYiwgdGhlIHN0YSBkcml2ZXIgd2lsbCB1c2UgIzAgYW5kICMxIGZvciBtdWx0aWNhc3QgYW5kIEFQLgorCU1BQ19UQUJMRSAgICAgICAgICAgICAgICAgTWFjVGFiOyAgICAgLy8gQVNJQyBvbi1jaGlwIFdDSUQgZW50cnkgdGFibGUuICBBdCBUWCwgQVNJQyBhbHdheXMgdXNlIGtleSBhY2NvcmRpbmcgdG8gdGhpcyBvbi1jaGlwIHRhYmxlLgorCU5ESVNfU1BJTl9MT0NLICAgICAgICAgIE1hY1RhYkxvY2s7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlCQV9UQUJMRQkJCUJBVGFibGU7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJTkRJU19TUElOX0xPQ0sgICAgICAgICAgQkFUYWJMb2NrOworCVJBTElOS19USU1FUl9TVFJVQ1QgUkVDQkFUaW1lcjsKKworCS8vIGVuY3J5cHRpb24vZGVjcnlwdGlvbiBLRVkgdGFibGVzCisJQ0lQSEVSX0tFWSAgICAgICAgICAgICAgU2hhcmVkS2V5W01BWF9NQlNTSURfTlVNXVs0XTsgLy8gU1RBIGFsd2F5cyB1c2UgU2hhcmVkS2V5W0JTUzBdWzAuLjNdCisKKwkJLy8gUlggcmUtYXNzZW1ibHkgYnVmZmVyIGZvciBmcmFnbWVudGF0aW9uCisJRlJBR01FTlRfRlJBTUUgICAgICAgICAgRnJhZ0ZyYW1lOyAgICAgICAgICAgICAgICAgIC8vIEZyYW1lIHN0b3JhZ2UgZm9yIGZyYWdtZW50IGZyYW1lCisKKwkvLyB2YXJpb3VzIENvdW50ZXJzCisJQ09VTlRFUl84MDJfMyAgICAgICAgICAgQ291bnRlcnM4MDIzOyAgICAgICAgICAgICAgIC8vIDgwMi4zIGNvdW50ZXJzCisJQ09VTlRFUl84MDJfMTEgICAgICAgICAgV2xhbkNvdW50ZXJzOyAgICAgICAgICAgICAgIC8vIDgwMi4xMSBNSUIgY291bnRlcnMKKwlDT1VOVEVSX1JBTElOSyAgICAgICAgICBSYWxpbmtDb3VudGVyczsgICAgICAgICAgICAgLy8gUmFsaW5rIHByb3ByaWV0eSBjb3VudGVycworCUNPVU5URVJfRFJTICAgICAgICAgICAgIERyc0NvdW50ZXJzOyAgICAgICAgICAgICAgICAvLyBjb3VudGVycyBmb3IgRHluYW1pYyBUWCBSYXRlIFN3aXRjaGluZworCVBSSVZBVEVfU1RSVUMgICAgICAgICAgIFByaXZhdGVJbmZvOyAgICAgICAgICAgICAgICAvLyBQcml2YXRlIGluZm9ybWF0aW9uICYgY291bnRlcnMKKworCS8vIGZsYWdzLCBzZWUgZlJUTVBfQURBUFRFUl94eHggZmxhZ3MKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBGbGFnczsgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwcmVzZW50IGN1cnJlbnQgZGV2aWNlIHN0YXR1cworCisJLy8gY3VycmVudCBUWCBzZXF1ZW5jZSAjCisJVVNIT1JUICAgICAgICAgICAgICAgICAgU2VxdWVuY2U7CisKKyNpZmRlZiBVTkRFUl9DRQorCU5ESVNfSEFORExFICAgICAgICAgICAgIGhHaUlTUjsKKyNlbmRpZgorCisKKwkvLyBDb250cm9sIGRpc2Nvbm5lY3QgLyBjb25uZWN0IGV2ZW50IGdlbmVyYXRpb24KKwkvLysrK0RpZG4ndCB1c2VkIGFueW1vcmUKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBMaW5rRG93blRpbWU7CisJLy8tLS0KKwlVTE9ORyAgICAgICAgICAgICAgICAgICBMYXN0UnhSYXRlOworCVVMT05HICAgICAgICAgICAgICAgICAgIExhc3RUeFJhdGU7CisJLy8rKytVc2VkIG9ubHkgZm9yIFN0YXRpb24KKwlCT09MRUFOICAgICAgICAgICAgICAgICBiQ29uZmlnQ2hhbmdlZDsgICAgICAgICAvLyBDb25maWcgQ2hhbmdlIGZsYWcgZm9yIHRoZSBzYW1lIFNTSUQgc2V0dGluZworCS8vLS0tCisKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBFeHRyYUluZm87ICAgICAgICAgICAgICAvLyBFeHRyYSBpbmZvcm1hdGlvbiBmb3IgZGlzcGxheWluZyBzdGF0dXMKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBTeXN0ZW1FcnJvckJpdG1hcDsgICAgICAvLyBiMDogRTJQUk9NIHZlcnNpb24gZXJyb3IKKworCS8vKysrRGlkbid0IHVzZWQgYW55bW9yZQorCVVMT05HICAgICAgICAgICAgICAgICAgIE1hY0ljVmVyc2lvbjsgICAgICAgICAgIC8vIE1BQy9CQlAgc2VyaWFsIGludGVyZmFjZSBpc3N1ZSBzb2x2ZWQgYWZ0ZXIgdmVyLkQKKwkvLy0tLQorCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gU3lzdGVtIGV2ZW50IGxvZworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVJUXzgwMl8xMV9FVkVOVF9UQUJMRSAgIEV2ZW50VGFiOworCisKKwlCT09MRUFOCQlIVENFbmFibGU7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogICAgICBTdGF0aXN0aWMgcmVsYXRlZCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZmRlZiBSVDI4NzAKKwlVTE9ORwkJCQkJCUJ1bGtPdXREYXRhT25lU2VjQ291bnQ7CisJVUxPTkcJCQkJCQlCdWxrSW5EYXRhT25lU2VjQ291bnQ7CisJVUxPTkcJCQkJCQlCdWxrTGFzdE9uZVNlY0NvdW50OyAvLyBCdWxrT3V0RGF0YU9uZVNlY0NvdW50ICsgQnVsa0luRGF0YU9uZVNlY0NvdW50CisJVUxPTkcJCQkJCQl3YXRjaERvZ1J4Q250OworCVVMT05HCQkJCQkJd2F0Y2hEb2dSeE92ZXJGbG93Q250OworCVVMT05HCQkJCQkJd2F0Y2hEb2dUeFBlbmRpbmdDbnRbTlVNX09GX1RYX1JJTkddOworI2VuZGlmIC8vIFJUMjg3MCAvLworCisJQk9PTEVBTgkJCQkJCWJVcGRhdGVCY25DbnREb25lOworCVVMT05HCQkJCQkJd2F0Y2hEb2dNYWNEZWFkbG9jazsJLy8gcHJldmVudCBNQUMvQkJQIGludG8gZGVhZGxvY2sgY29uZGl0aW9uCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIERFQlVHIHBhcmFtZXJ0cworCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvL1VMT05HCQlEZWJ1Z1NldHRpbmdbNF07CisJQk9PTEVBTgkJYkJhbkFsbEJhU2V0dXA7CisJQk9PTEVBTgkJYlByb21pc2N1b3VzOworCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIHJ0Mjg2MGMgZW11bGF0aW9uLXVzZSBQYXJhbWV0ZXJzCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVVMT05HCQlydHNhY2N1WzMwXTsKKwlVTE9ORwkJY3RzYWNjdVszMF07CisJVUxPTkcJCWNmZW5kYWNjdVszMF07CisJVUxPTkcJCWJhY29udGVudFsxNl07CisJVUxPTkcJCXJ4aW50W1JYX1JJTkdfU0laRSsxXTsKKwlVQ0hBUgkJcmN2YmFbNjBdOworCUJPT0xFQU4JCWJMaW5rQWRhcHQ7CisJQk9PTEVBTgkJYkZvcmNlUHJpbnRUWDsKKwlCT09MRUFOCQliRm9yY2VQcmludFJYOworCUJPT0xFQU4JCWJEaXNhYmxlc2Nhbm5pbmc7CQkvL2RlZmluZWQgaW4gUlQyODcwIFVTQgorCUJPT0xFQU4JCWJTdGFGaWZvVGVzdDsKKwlCT09MRUFOCQliUHJvdGVjdGlvblRlc3Q7CisJQk9PTEVBTgkJYkhDQ0FUZXN0OworCUJPT0xFQU4JCWJHZW5PbmVIQ0NBOworCUJPT0xFQU4JCWJCcm9hZENvbUhUOworCS8vKysrRm9sbG93aW5nIGFkZCBmcm9tIFJUMjg3MCBVU0IuCisJVUxPTkcJCUJ1bGtPdXRSZXE7CisJVUxPTkcJCUJ1bGtPdXRDb21wbGV0ZTsKKwlVTE9ORwkJQnVsa091dENvbXBsZXRlT3RoZXI7CisJVUxPTkcJCUJ1bGtPdXRDb21wbGV0ZUNhbmNlbDsJLy8gc2VlbXMgbm90IHVzZSBub3c/CisJVUxPTkcJCUJ1bGtJblJlcTsKKwlVTE9ORwkJQnVsa0luQ29tcGxldGU7CisJVUxPTkcJCUJ1bGtJbkNvbXBsZXRlRmFpbDsKKwkvLy0tLQorCisgICAgc3RydWN0IHdpZmljb25mCQkJV0lGSXRlc3RiZWQ7CisKKyNpZmRlZiBSQUxJTktfQVRFCisJQVRFX0lORk8JCQkJYXRlOworI2lmZGVmIFJUMjg3MAorCUJPT0xFQU4JCQkJCUNvbnRpbkJ1bGtPdXQ7CQkvL0FURSBidWxrIG91dCBjb250cm9sCisJQk9PTEVBTgkJCQkJQ29udGluQnVsa0luOwkJLy9BVEUgYnVsayBpbiBjb250cm9sCisJYXRvbWljX3QJCQkJQnVsa091dFJlbWFpbmVkOworCWF0b21pY190CQkJCUJ1bGtJblJlbWFpbmVkOworI2VuZGlmIC8vIFJUMjg3MCAvLworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCXN0cnVjdCByZW9yZGVyaW5nX21wZHVfcG9vbCBtcGR1X2Jsa19wb29sOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJVUxPTkcJCQkJCU9uZVNlY29uZG5vbkJFcGFja2V0czsJCS8vIHJlY29yZCBub24gQkUgcGFja2V0cyBwZXIgc2Vjb25kCisKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTIKKyAgICBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAgICBpd19zdGF0czsKKyNlbmRpZgorCisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7CisKKyNpZmRlZiBCTE9DS19ORVRfSUYKKwlCTE9DS19RVUVVRV9FTlRSWQkJYmxvY2tRdWV1ZVRhYltOVU1fT0ZfVFhfUklOR107CisjZW5kaWYgLy8gQkxPQ0tfTkVUX0lGIC8vCisKKworCisjaWZkZWYgTVVMVElQTEVfQ0FSRF9TVVBQT1JUCisJSU5UMzIJCQkJCU1DX1Jvd0lEOworCVVDSEFSCQkJCQlNQ19GaWxlTmFtZVsyNTZdOworI2VuZGlmIC8vIE1VTFRJUExFX0NBUkRfU1VQUE9SVCAvLworCisJVUxPTkcJCQkJCVRidHRUaWNrQ291bnQ7CisjaWZkZWYgUENJX01TSV9TVVBQT1JUCisJQk9PTEVBTgkJCQkJSGF2ZU1zaTsKKyNlbmRpZiAvLyBQQ0lfTVNJX1NVUFBPUlQgLy8KKworCisJVUNIQVIJCQkJCWlzX29uOworCisjZGVmaW5lIFRJTUVfQkFTRQkJCSgxMDAwMDAwL09TX0haKQorI2RlZmluZSBUSU1FX09ORV9TRUNPTkQJCSgxMDAwMDAwL1RJTUVfQkFTRSkKKwlVQ0hBUgkJCQkJZmxnX2JlX2FkanVzdDsKKwlVTE9ORwkJCQkJYmVfYWRqdXN0X2xhc3RfdGltZTsKKworI2lmZGVmIE5JTlRFTkRPX0FQCisJTklORE9fQ1RSTF9CTE9DSwkJbmluZG9fY3RybF9ibG9jazsKKyNlbmRpZiAvLyBOSU5URU5ET19BUCAvLworCisKKyNpZmRlZiBJS0FOT1NfVlhfMVgwCisJc3RydWN0IElLQU5PU19UWF9JTkZPCUlrYW5vc1R4SW5mbzsKKwlzdHJ1Y3QgSUtBTk9TX1RYX0lORk8JSWthbm9zUnhJbmZvW01BWF9NQlNTSURfTlVNICsgTUFYX1dEU19FTlRSWSArIE1BWF9BUENMSV9OVU0gKyBNQVhfTUVTSF9OVU1dOworI2VuZGlmIC8vIElLQU5PU19WWF8xWDAgLy8KKworCisjaWZkZWYgREJHX0RJQUdOT1NFCisJUnRtcERpYWdTdHJ1Y3QJRGlhZ1N0cnVjdDsKKyNlbmRpZiAvLyBEQkdfRElBR05PU0UgLy8KKworCisJVUlOVDgJCQkJCVBNX0ZsZ1N1c3BlbmQ7CisKKyNpZmRlZiBSVDMweHgKKy8vPT09PT09ZWZ1c2UKKwlCT09MRUFOCQliVXNlRWZ1c2U7CisJQk9PTEVBTgkJYkVFUFJPTUZpbGU7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKK30gUlRNUF9BREFQVEVSLCAqUFJUTVBfQURBUFRFUjsKKworLy8KKy8vIENpc2NvIElBUFAgZm9ybWF0CisvLwordHlwZWRlZiBzdHJ1Y3QgIF9DSVNDT19JQVBQX0NPTlRFTlRfCit7CisJVVNIT1JUICAgICBMZW5ndGg7ICAgICAgICAvL0lBUFAgTGVuZ3RoCisJVUNIQVIgICAgICBNZXNzYWdlVHlwZTsgICAgICAvL0lBUFAgdHlwZQorCVVDSEFSICAgICAgRnVuY3Rpb25Db2RlOyAgICAgLy9JQVBQIGZ1bmN0aW9uIHR5cGUKKwlVQ0hBUiAgICAgIERlc3RpbmFpb25NQUNbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUiAgICAgIFNvdXJjZU1BQ1tNQUNfQUREUl9MRU5dOworCVVTSE9SVCAgICAgVGFnOyAgICAgICAgICAgLy9UYWcoZWxlbWVudCBJRSkgLSBBZGphY2VudCBBUCByZXBvcnQKKwlVU0hPUlQgICAgIFRhZ0xlbmd0aDsgICAgIC8vTGVuZ3RoIG9mIGVsZW1lbnQgbm90IGluY2x1ZGluZyA0IGJ5dGUgaGVhZGVyCisJVUNIQVIgICAgICBPVUlbNF07ICAgICAgICAgICAvLzB4MDAsIDB4NDAsIDB4OTYsIDB4MDAKKwlVQ0hBUiAgICAgIFByZXZpb3VzQVBbTUFDX0FERFJfTEVOXTsgICAgICAgLy9NQUMgQWRkcmVzcyBvZiBhY2Nlc3MgcG9pbnQKKwlVU0hPUlQgICAgIENoYW5uZWw7CisJVVNIT1JUICAgICBTc2lkTGVuOworCVVDSEFSICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdOworCVVTSE9SVCAgICAgU2Vjb25kczsgICAgICAgICAgLy9TZWNvbmRzIHRoYXQgdGhlIGNsaWVudCBoYXMgYmVlbiBkaXNhc3NvY2lhdGVkLgorfSBDSVNDT19JQVBQX0NPTlRFTlQsICpQQ0lTQ09fSUFQUF9DT05URU5UOworCisjZGVmaW5lIERFTEFZSU5UTUFTSwkJMHgwMDAzZmZmYgorI2RlZmluZSBJTlRNQVNLCQkJCTB4MDAwM2ZmZmIKKyNkZWZpbmUgSW5kTWFzawkJCQkweDAwMDNmZmZjCisjZGVmaW5lIFJ4SU5UCQkJCTB4MDAwMDAwMDUJLy8gRGVsYXllZCBSeCBvciBpbmRpdmkgcngKKyNkZWZpbmUgVHhEYXRhSW50CQkJMHgwMDAwMDBmYQkvLyBEZWxheWVkIFR4IG9yIGluZGl2aSB0eAorI2RlZmluZSBUeE1nbXRJbnQJCQkweDAwMDAwMTAyCS8vIERlbGF5ZWQgVHggb3IgaW5kaXZpIHR4CisjZGVmaW5lIFR4Q29oZXJlbnQJCQkweDAwMDIwMDAwCS8vIHR4IGNvaGVyZW50CisjZGVmaW5lIFJ4Q29oZXJlbnQJCQkweDAwMDEwMDAwCS8vIHJ4IGNvaGVyZW50CisjZGVmaW5lIE1jdUNvbW1hbmQJCQkweDAwMDAwMjAwCS8vIG1jdQorI2RlZmluZSBQcmVUQlRUSW50CQkJMHgwMDAwMTAwMAkvLyBQcmUtVEJUVCBpbnRlcnJ1cHQKKyNkZWZpbmUgVEJUVEludAkJCQkweDAwMDAwODAwCQkvLyBUQlRUIGludGVycnVwdAorI2RlZmluZSBHUFRpbWVPdXRJbnQJCQkweDAwMDA4MDAwCQkvLyBHUHRpbWVvdXQgaW50ZXJydXB0CisjZGVmaW5lIEF1dG9XYWtldXBJbnQJCTB4MDAwMDQwMDAJCS8vIEF1dG9XYWtldXBJbnQgaW50ZXJydXB0CisjZGVmaW5lIEZpZm9TdGFGdWxsSW50CQkJMHgwMDAwMjAwMAkvLyAgZmlmbyBzdGF0aXN0aWNzIGZ1bGwgaW50ZXJydXB0CisKKwordHlwZWRlZiBzdHJ1Y3QgX1JYX0JMS18KK3sKKy8vCVJYRF9TVFJVQwkJUnhEOyAvLyBzYW1wbGUKKwlSVDI4WFhfUlhEX1NUUlVDCVJ4RDsKKwlQUlhXSV9TVFJVQwkJCXBSeFdJOworCVBIRUFERVJfODAyXzExCQlwSGVhZGVyOworCVBORElTX1BBQ0tFVAkJcFJ4UGFja2V0OworCVVDSEFSCQkJCSpwRGF0YTsKKwlVU0hPUlQJCQkJRGF0YVNpemU7CisJVVNIT1JUCQkJCUZsYWdzOworCVVDSEFSCQkJCVVzZXJQcmlvcml0eTsJLy8gZm9yIGNhbGN1bGF0ZSBUS0lQIE1JQyB1c2luZworfSBSWF9CTEs7CisKKworI2RlZmluZSBSWF9CTEtfU0VUX0ZMQUcoX3BSeEJsaywgX2ZsYWcpCQkoX3BSeEJsay0+RmxhZ3MgfD0gX2ZsYWcpCisjZGVmaW5lIFJYX0JMS19URVNUX0ZMQUcoX3BSeEJsaywgX2ZsYWcpCShfcFJ4QmxrLT5GbGFncyAmIF9mbGFnKQorI2RlZmluZSBSWF9CTEtfQ0xFQVJfRkxBRyhfcFJ4QmxrLCBfZmxhZykJKF9wUnhCbGstPkZsYWdzICY9IH4oX2ZsYWcpKQorCisKKyNkZWZpbmUgZlJYX1dEUwkJCTB4MDAwMQorI2RlZmluZSBmUlhfQU1TRFUgICAgICAgMHgwMDAyCisjZGVmaW5lIGZSWF9BUkFMSU5LICAgICAweDAwMDQKKyNkZWZpbmUgZlJYX0hUQyAgICAgICAgIDB4MDAwOAorI2RlZmluZSBmUlhfUEFEICAgICAgICAgMHgwMDEwCisjZGVmaW5lIGZSWF9BTVBEVSAgICAgICAweDAwMjAKKyNkZWZpbmUgZlJYX1FPUwkJCTB4MDA0MAorI2RlZmluZSBmUlhfSU5GUkEJCTB4MDA4MAorI2RlZmluZSBmUlhfRUFQCQkJMHgwMTAwCisjZGVmaW5lIGZSWF9NRVNICQkweDAyMDAKKyNkZWZpbmUgZlJYX0FQQ0xJCQkweDA0MDAKKyNkZWZpbmUgZlJYX0RMUwkJCTB4MDgwMAorI2RlZmluZSBmUlhfV1BJCQkJMHgxMDAwCisKKyNkZWZpbmUgTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRAkxNAorI2RlZmluZSBMRU5HVEhfQVJBTElOS19TVUJGUkFNRUhFQUQJMTQKKyNkZWZpbmUgTEVOR1RIX0FSQUxJTktfSEVBREVSX0ZJRUxECSAyCisKKyNkZWZpbmUgVFhfVU5LT1dOX0ZSQU1FCQkJMHgwMAorI2RlZmluZSBUWF9NQ0FTVF9GUkFNRQkJCTB4MDEKKyNkZWZpbmUgVFhfTEVHQUNZX0ZSQU1FCQkJMHgwMgorI2RlZmluZSBUWF9BTVBEVV9GUkFNRQkJCTB4MDQKKyNkZWZpbmUgVFhfQU1TRFVfRlJBTUUJCQkweDA4CisjZGVmaW5lIFRYX1JBTElOS19GUkFNRQkJCTB4MTAKKyNkZWZpbmUgVFhfRlJBR19GUkFNRQkJCTB4MjAKKworCisvLwlDdXJyZW50bHkgdGhlIHNpemVvZihUWF9CTEspIGlzIDE0OCBieXRlcy4KK3R5cGVkZWYgc3RydWN0IF9UWF9CTEtfCit7CisJVUNIQVIJCQkJUXVlSWR4OworCVVDSEFSCQkJCVR4RnJhbWVUeXBlOwkJCQkvLyBJbmRpY2F0ZSB0aGUgVHJhbnNtaXNzaW9uIHR5cGUgb2YgdGhlIGFsbCBmcmFtZXMgaW4gb25lIGJhdGNoCisJVUNIQVIJCQkJVG90YWxGcmFtZU51bTsJCQkJLy8gVG90YWwgZnJhbWUgbnVtYmVyIHdhbnQgdG8gc2VuZC1vdXQgaW4gb25lIGJhdGNoCisJVVNIT1JUCQkJCVRvdGFsRnJhZ051bTsJCQkJLy8gVG90YWwgZnJhbWUgZnJhZ21lbnRzIHJlcXVpcmVkIGluIG9uZSBiYXRjaAorCVVTSE9SVAkJCQlUb3RhbEZyYW1lTGVuOwkJCQkvLyBUb3RhbCBsZW5ndGggb2YgYWxsIGZyYW1lcyB3YW50IHRvIHNlbmQtb3V0IGluIG9uZSBiYXRjaAorCisJUVVFVUVfSEVBREVSCQlUeFBhY2tldExpc3Q7CisJTUFDX1RBQkxFX0VOVFJZCQkqcE1hY0VudHJ5OwkJCQkJLy8gTlVMTDogcGFja2V0IHdpdGggODAyLjExIFJBIGZpZWxkIGlzIG11bHRpY2FzdC9icm9hZGNhc3QgYWRkcmVzcworCUhUVFJBTlNNSVRfU0VUVElORwkqcFRyYW5zbWl0OworCisJLy8gRm9sbG93aW5nIHN0cnVjdHVyZSB1c2VkIGZvciB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIGEgc3BlY2lmaWMgcGFja2V0LgorCVBORElTX1BBQ0tFVAkJcFBhY2tldDsKKwlQVUNIQVIJCQkJcFNyY0J1ZkhlYWRlcjsJCQkJLy8gUmVmZXJlbmNlIHRvIHRoZSBoZWFkIG9mIHNrX2J1ZmYtPmRhdGEKKwlQVUNIQVIJCQkJcFNyY0J1ZkRhdGE7CQkJCS8vIFJlZmVyZW5jZSB0byB0aGUgc2tfYnVmZi0+ZGF0YSwgd2lsbCBjaGFuZ2VkIGRlcGVuZHMgb24gaGFubGRpbmcgcHJvZ3Jlc3NzCisJVUlOVAkJCQlTcmNCdWZMZW47CQkJCQkvLyBMZW5ndGggb2YgcGFja2V0IHBheWxvYWQgd2hpY2ggbm90IGluY2x1ZGluZyBMYXllciAyIGhlYWRlcgorCVBVQ0hBUgkJCQlwRXh0cmFMbGNTbmFwRW5jYXA7CQkJLy8gTlVMTCBtZWFucyBubyBleHRyYSBMTEMvU05BUCBpcyByZXF1aXJlZAorCVVDSEFSCQkJCUhlYWRlckJ1Zls4MF07CQkJCS8vIFRlbXBCdWZmZXIgZm9yIFRYX0lORk8gKyBUWF9XSSArIDgwMi4xMSBIZWFkZXIgKyBwYWRkaW5nICsgQU1TRFUgU3ViSGVhZGVyICsgTExDL1NOQVAKKwlVQ0hBUgkJCQlNcGR1SGVhZGVyTGVuOwkJCQkvLyA4MDIuMTEgaGVhZGVyIGxlbmd0aCBOT1QgaW5jbHVkaW5nIHRoZSBwYWRkaW5nCisJVUNIQVIJCQkJSGRyUGFkTGVuOwkJCQkJLy8gcmVjb3JkaW5nIEhlYWRlciBQYWRkaW5nIExlbmd0aDsKKwlVQ0hBUgkJCQlhcGlkeDsJCQkJCQkvLyBUaGUgaW50ZXJmYWNlIGFzc29jaWF0ZWQgdG8gdGhpcyBwYWNrZXQKKwlVQ0hBUgkJCQlXY2lkOwkJCQkJCS8vIFRoZSBNQUMgZW50cnkgYXNzb2NpYXRlZCB0byB0aGlzIHBhY2tldAorCVVDSEFSCQkJCVVzZXJQcmlvcml0eTsJCQkJLy8gcHJpb3JpdHkgY2xhc3Mgb2YgcGFja2V0CisJVUNIQVIJCQkJRnJhbWVHYXA7CQkJCQkvLyB3aGF0IGtpbmQgb2YgSUZTIHRoaXMgcGFja2V0IHVzZQorCVVDSEFSCQkJCU1wZHVSZXFOdW07CQkJCQkvLyBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIHRoaXMgZnJhbWUKKwlVQ0hBUgkJCQlUeFJhdGU7CQkJCQkJLy8gVE9ETzogT2Jzb2xldGVkPyBTaG91bGQgY2hhbmdlIHRvIE1DUz8KKwlVQ0hBUgkJCQlDaXBoZXJBbGc7CQkJCQkvLyBjaXBoZXIgYWxvZ3JpdGhtCisJUENJUEhFUl9LRVkJCQlwS2V5OworCisKKworCVVTSE9SVAkJCQlGbGFnczsJCQkJCQkvL1NlZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIGRldGFpbC4KKworCS8vWU9VIFNIT1VMRCBOT1QgVE9VQ0ggSVQhIEZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSB1c2VkIGZvciBoYXJkd2FyZS1kZXBlbmRlZCBsYXllci4KKwlVTE9ORwkJCQlQcml2OwkJCQkJCS8vIEhhcmR3YXJlIHNwZWNpZmljIHZhbHVlIHNhdmVkIGluIGhlcmUuCit9IFRYX0JMSywgKlBUWF9CTEs7CisKKworI2RlZmluZSBmVFhfYlJ0c1JlcXVpcmVkCQkweDAwMDEJLy8gSW5kaWNhdGUgaWYgbmVlZCBzZW5kIFJUUyBmcmFtZSBmb3IgcHJvdGVjdGlvbi4gTm90IHVzZWQgaW4gUlQyODYwL1JUMjg3MC4KKyNkZWZpbmUgZlRYX2JBY2tSZXF1aXJlZCAgICAgICAJMHgwMDAyCS8vIHRoZSBwYWNrZXQgbmVlZCBhY2sgcmVzcG9uc2UKKyNkZWZpbmUgZlRYX2JQaWdneUJhY2sgICAgIAkJMHgwMDA0CS8vIExlZ2FjeSBkZXZpY2UgdXNlIFBpZ2diYWNrIG9yIG5vdAorI2RlZmluZSBmVFhfYkhUUmF0ZSAgICAgICAgIAkweDAwMDgJLy8gYWxsb3cgdG8gdXNlIEhUIHJhdGUKKy8vI2RlZmluZSBmVFhfYkZvcmNlTG93UmF0ZSAgICAgICAweDAwMTAJLy8gZm9yY2UgdG8gdXNlIExvdyBSYXRlCisjZGVmaW5lIGZUWF9iRm9yY2VOb25Rb1MgICAgICAgCTB4MDAxMAkvLyBmb3JjZSB0byB0cmFuc21pdCBmcmFtZSB3aXRob3V0IFdNTS1Rb1MgaW4gSFQgbW9kZQorI2RlZmluZSBmVFhfYkFsbG93RnJhZyAgICAgICAJMHgwMDIwCS8vIGFsbG93IHRvIGZyYWdtZW50IHRoZSBwYWNrZXQsIEEtTVBEVSwgQS1NU0RVLCBBLVJhbGluayBpcyBub3QgYWxsb3dlZCB0byBmcmFnbWVudAorI2RlZmluZSBmVFhfYk1vcmVEYXRhCQkJMHgwMDQwCS8vIHRoZXJlIGFyZSBtb3JlIGRhdGEgcGFja2V0cyBpbiBQb3dlclNhdmUgUXVldWUKKyNkZWZpbmUgZlRYX2JXTU0JCQkJMHgwMDgwCS8vIFFPUyBEYXRhCisKKyNkZWZpbmUgZlRYX2JDbGVhckVBUEZyYW1lCQkweDAxMDAKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCisjZGVmaW5lIFRYX0JMS19BU1NJR05fRkxBRyhfcFR4QmxrLCBfZmxhZywgdmFsdWUpCVwKKwkJZG8gewkJCQkJCQkJCQlcCisJCQlpZiAodmFsdWUpIAkJCQkJCQkJXAorCQkJCShfcFR4QmxrLT5GbGFncyB8PSBfZmxhZykgCQkJXAorCQkJZWxzZSAJCQkJCQkJCQlcCisJCQkJKF9wVHhCbGstPkZsYWdzICY9IH4oX2ZsYWcpKQkJXAorCQl9d2hpbGUoMCkKKworI2RlZmluZSBUWF9CTEtfU0VUX0ZMQUcoX3BUeEJsaywgX2ZsYWcpCQkoX3BUeEJsay0+RmxhZ3MgfD0gX2ZsYWcpCisjZGVmaW5lIFRYX0JMS19URVNUX0ZMQUcoX3BUeEJsaywgX2ZsYWcpCSgoKF9wVHhCbGstPkZsYWdzICYgX2ZsYWcpID09IF9mbGFnKSA/IDEgOiAwKQorI2RlZmluZSBUWF9CTEtfQ0xFQVJfRkxBRyhfcFR4QmxrLCBfZmxhZykJKF9wVHhCbGstPkZsYWdzICY9IH4oX2ZsYWcpKQorCisKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCisjaWZkZWYgUlRfQklHX0VORElBTgorc3RhdGljIGlubGluZSBWT0lECVdyaXRlQmFja1RvRGVzY3JpcHRvcigKKwlJTiAgUFVDSEFSCQkJRGVzdCwKKyAJSU4JUFVDSEFSCQkJU3JjLAorICAgIElOICBCT09MRUFOCQkJRG9FbmNyeXB0LAorCUlOICBVTE9ORyAgICAgICAgICAgRGVzY3JpcHRvclR5cGUpCit7CisJVUlOVDMyICpwMSwgKnAyOworCisJcDEgPSAoKFVJTlQzMiAqKURlc3QpOworCXAyID0gKChVSU5UMzIgKilTcmMpOworCisJKnAxID0gKnAyOworCSoocDErMikgPSAqKHAyKzIpOworCSoocDErMykgPSAqKHAyKzMpOworCSoocDErMSkgPSAqKHAyKzEpOyAvLyBXb3JkIDE7IHRoaXMgbXVzdCBiZSB3cml0dGVuIGJhY2sgbGFzdAorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJRW5kaWFuIGNvbnZlcnNpb24gb2YgVHgvUnggZGVzY3JpcHRvciAuCisKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlwRGF0YQkJCVBvaW50ZXIgdG8gVHgvUnggZGVzY3JpcHRvcgorCQlEZXNjcmlwdG9yVHlwZQlEaXJlY3Rpb24gb2YgdGhlIGZyYW1lCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisJCUNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHJlYWQgb3IgdXBkYXRlIGRlc2NyaXB0b3IKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitzdGF0aWMgaW5saW5lIFZPSUQJUlRNUFdJRW5kaWFuQ2hhbmdlKAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVMT05HCQkJRGVzY3JpcHRvclR5cGUpCit7CisJaW50IHNpemU7CisJaW50IGk7CisKKwlzaXplID0gKChEZXNjcmlwdG9yVHlwZSA9PSBUWVBFX1RYV0kpID8gVFhXSV9TSVpFIDogUlhXSV9TSVpFKTsKKworCWlmKERlc2NyaXB0b3JUeXBlID09IFRZUEVfVFhXSSkKKwl7CisJCSooKFVJTlQzMiAqKShwRGF0YSkpID0gU1dBUDMyKCooKFVJTlQzMiAqKShwRGF0YSkpKTsJCS8vIEJ5dGUgMH4zCisJCSooKFVJTlQzMiAqKShwRGF0YSArIDQpKSA9IFNXQVAzMigqKChVSU5UMzIgKikocERhdGErNCkpKTsJLy8gQnl0ZSA0fjcKKwl9CisJZWxzZQorCXsKKwkJZm9yKGk9MDsgaSA8IHNpemUvNCA7IGkrKykKKwkJCSooKChVSU5UMzIgKilwRGF0YSkgK2kpID0gU1dBUDMyKCooKChVSU5UMzIgKilwRGF0YSkraSkpOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUVuZGlhbiBjb252ZXJzaW9uIG9mIFR4L1J4IGRlc2NyaXB0b3IgLgorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcERhdGEJCQlQb2ludGVyIHRvIFR4L1J4IGRlc2NyaXB0b3IKKwkJRGVzY3JpcHRvclR5cGUJRGlyZWN0aW9uIG9mIHRoZSBmcmFtZQorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCQlDYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiByZWFkIG9yIHVwZGF0ZSBkZXNjcmlwdG9yCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCisjaWZkZWYgUlQyODcwCitzdGF0aWMgaW5saW5lIFZPSUQJUlRNUERlc2NyaXB0b3JFbmRpYW5DaGFuZ2UoCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEZXNjcmlwdG9yVHlwZSkKK3sKKwkqKChVSU5UMzIgKikocERhdGEpKSA9IFNXQVAzMigqKChVSU5UMzIgKikocERhdGEpKSk7Cit9CisjZW5kaWYgLy8gUlQyODcwIC8vCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJRW5kaWFuIGNvbnZlcnNpb24gb2YgYWxsIGtpbmRzIG9mIDgwMi4xMSBmcmFtZXMgLgorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcERhdGEJCQlQb2ludGVyIHRvIHRoZSA4MDIuMTEgZnJhbWUgc3RydWN0dXJlCisJCURpciAJCQlEaXJlY3Rpb24gb2YgdGhlIGZyYW1lCisJCUZyb21SeERvbmVJbnQJQ2FsbGVyIGlzIGZyb20gUnhEb25lIGludGVycnVwdAorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCQlDYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiByZWFkIG9yIHVwZGF0ZSBidWZmZXIgZGF0YQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK3N0YXRpYyBpbmxpbmUgVk9JRAlSVE1QRnJhbWVFbmRpYW5DaGFuZ2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEaXIsCisJSU4JQk9PTEVBTiAJCUZyb21SeERvbmVJbnQpCit7CisJUEhFQURFUl84MDJfMTEgcEZyYW1lOworCVBVQ0hBUglwTWFjSGRyOworCisJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gRnJhbWUgQ29udHJvbCBmaWVsZAorCWlmKERpciA9PSBESVJfUkVBRCkKKwl7CisJCSooVVNIT1JUICopcERhdGEgPSBTV0FQMTYoKihVU0hPUlQgKilwRGF0YSk7CisJfQorCisJcEZyYW1lID0gKFBIRUFERVJfODAyXzExKSBwRGF0YTsKKwlwTWFjSGRyID0gKFBVQ0hBUikgcEZyYW1lOworCisJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gRHVyYXRpb24vSUQgZmllbGQKKwkqKFVTSE9SVCAqKShwTWFjSGRyICsgMikgPSBTV0FQMTYoKihVU0hPUlQgKikocE1hY0hkciArIDIpKTsKKworCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIFNlcXVlbmNlIENvbnRyb2wgZmllbGQKKwkqKFVTSE9SVCAqKShwTWFjSGRyICsgMjIpID0gU1dBUDE2KCooVVNIT1JUICopKHBNYWNIZHIgKyAyMikpOworCisJaWYocEZyYW1lLT5GQy5UeXBlID09IEJUWVBFX01HTVQpCisJeworCQlzd2l0Y2gocEZyYW1lLT5GQy5TdWJUeXBlKQorCQl7CisJCQljYXNlIFNVQlRZUEVfQVNTT0NfUkVROgorCQkJY2FzZSBTVUJUWVBFX1JFQVNTT0NfUkVROgorCQkJCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIENhcGFiaWxpdHlJbmZvIGZpZWxkCisJCQkJcE1hY0hkciArPSBzaXplb2YoSEVBREVSXzgwMl8xMSk7CisJCQkJKihVU0hPUlQgKilwTWFjSGRyID0gU1dBUDE2KCooVVNIT1JUICopcE1hY0hkcik7CisKKwkJCQkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBMaXN0ZW4gSW50ZXJ2YWwgZmllbGQKKwkJCQlwTWFjSGRyICs9IDI7CisJCQkJKihVU0hPUlQgKilwTWFjSGRyID0gU1dBUDE2KCooVVNIT1JUICopcE1hY0hkcik7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgU1VCVFlQRV9BU1NPQ19SU1A6CisJCQljYXNlIFNVQlRZUEVfUkVBU1NPQ19SU1A6CisJCQkJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gQ2FwYWJpbGl0eUluZm8gZmllbGQKKwkJCQlwTWFjSGRyICs9IHNpemVvZihIRUFERVJfODAyXzExKTsKKwkJCQkqKFVTSE9SVCAqKXBNYWNIZHIgPSBTV0FQMTYoKihVU0hPUlQgKilwTWFjSGRyKTsKKworCQkJCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIFN0YXR1cyBDb2RlIGZpZWxkCisJCQkJcE1hY0hkciArPSAyOworCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCisJCQkJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gQUlEIGZpZWxkCisJCQkJcE1hY0hkciArPSAyOworCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCQkJCWJyZWFrOworCisJCQljYXNlIFNVQlRZUEVfQVVUSDoKKwkJCQkvLyBJZiBmcm9tIEFQSGFuZGxlUnhEb25lSW50ZXJydXB0IHJvdXRpbmUsIGl0IGlzIHN0aWxsIGEgZW5jcnlwdCBmb3JtYXQuCisJCQkJLy8gVGhlIGNvbnZlcnRpb24gaXMgZGVsYXllZCB0byBSVE1QSGFuZGxlRGVjcnlwdGlvbkRvbmVJbnRlcnJ1cHQuCisJCQkJaWYoIUZyb21SeERvbmVJbnQgJiYgcEZyYW1lLT5GQy5XZXAgPT0gMSkKKwkJCQkJYnJlYWs7CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gQXV0aCBBbGcgTm8uIGZpZWxkCisJCQkJCXBNYWNIZHIgKz0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCQkJCQkqKFVTSE9SVCAqKXBNYWNIZHIgPSBTV0FQMTYoKihVU0hPUlQgKilwTWFjSGRyKTsKKworCQkJCQkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBBdXRoIFNlcSBOby4gZmllbGQKKwkJCQkJcE1hY0hkciArPSAyOworCQkJCQkqKFVTSE9SVCAqKXBNYWNIZHIgPSBTV0FQMTYoKihVU0hPUlQgKilwTWFjSGRyKTsKKworCQkJCQkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBTdGF0dXMgQ29kZSBmaWVsZAorCQkJCQlwTWFjSGRyICs9IDI7CisJCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBTVUJUWVBFX0JFQUNPTjoKKwkJCWNhc2UgU1VCVFlQRV9QUk9CRV9SU1A6CisJCQkJLy8gc3dhYiAxNiBiaXQgZmllbGRzIC0gQmVhY29uSW50ZXJ2YWwgZmllbGQKKwkJCQlwTWFjSGRyICs9IChzaXplb2YoSEVBREVSXzgwMl8xMSkgKyBUSU1FU1RBTVBfTEVOKTsKKwkJCQkqKFVTSE9SVCAqKXBNYWNIZHIgPSBTV0FQMTYoKihVU0hPUlQgKilwTWFjSGRyKTsKKworCQkJCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIENhcGFiaWxpdHlJbmZvIGZpZWxkCisJCQkJcE1hY0hkciArPSBzaXplb2YoVVNIT1JUKTsKKwkJCQkqKFVTSE9SVCAqKXBNYWNIZHIgPSBTV0FQMTYoKihVU0hPUlQgKilwTWFjSGRyKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBTVUJUWVBFX0RFQVVUSDoKKwkJCWNhc2UgU1VCVFlQRV9ESVNBU1NPQzoKKwkJCQkvLyBzd2FiIDE2IGJpdCBmaWVsZHMgLSBSZWFzb24gY29kZSBmaWVsZAorCQkJCXBNYWNIZHIgKz0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCQkJCSooVVNIT1JUICopcE1hY0hkciA9IFNXQVAxNigqKFVTSE9SVCAqKXBNYWNIZHIpOworCQkJCWJyZWFrOworCQl9CisJfQorCWVsc2UgaWYoIHBGcmFtZS0+RkMuVHlwZSA9PSBCVFlQRV9EQVRBICkKKwl7CisJfQorCWVsc2UgaWYocEZyYW1lLT5GQy5UeXBlID09IEJUWVBFX0NOVEwpCisJeworCQlzd2l0Y2gocEZyYW1lLT5GQy5TdWJUeXBlKQorCQl7CisJCQljYXNlIFNVQlRZUEVfQkxPQ0tfQUNLX1JFUToKKwkJCQl7CisJCQkJCVBGUkFNRV9CQV9SRVEgcEJBUmVxID0gKFBGUkFNRV9CQV9SRVEpcEZyYW1lOworCQkJCQkqKFVTSE9SVCAqKSgmcEJBUmVxLT5CQVJDb250cm9sKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmcEJBUmVxLT5CQVJDb250cm9sKSk7CisJCQkJCXBCQVJlcS0+QkFTdGFydGluZ1NlcS53b3JkID0gU1dBUDE2KHBCQVJlcS0+QkFTdGFydGluZ1NlcS53b3JkKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFNVQlRZUEVfQkxPQ0tfQUNLOgorCQkJCS8vIEZvciBCbG9jayBBY2sgcGFja2V0LCB0aGUgSFRfQ09OVFJPTCBmaWVsZCBpcyBpbiB0aGUgc2FtZSBvZmZzZXQgd2l0aCBBZGRyMworCQkJCSooVUlOVDMyICopKCZwRnJhbWUtPkFkZHIzWzBdKSA9IFNXQVAzMigqKFVJTlQzMiAqKSgmcEZyYW1lLT5BZGRyM1swXSkpOworCQkJCWJyZWFrOworCisJCQljYXNlIFNVQlRZUEVfQUNLOgorCQkJCS8vRm9yIEFDSyBwYWNrZXQsIHRoZSBIVF9DT05UUk9MIGZpZWxkIGlzIGluIHRoZSBzYW1lIG9mZnNldCB3aXRoIEFkZHIyCisJCQkJKihVSU5UMzIgKikoJnBGcmFtZS0+QWRkcjJbMF0pPQlTV0FQMzIoKihVSU5UMzIgKikoJnBGcmFtZS0+QWRkcjJbMF0pKTsKKwkJCQlicmVhazsKKwkJfQorCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkludmFsaWQgRnJhbWUgVHlwZSEhIVxuIikpOworCX0KKworCS8vIHN3YWIgMTYgYml0IGZpZWxkcyAtIEZyYW1lIENvbnRyb2wKKwlpZihEaXIgPT0gRElSX1dSSVRFKQorCXsKKwkJKihVU0hPUlQgKilwRGF0YSA9IFNXQVAxNigqKFVTSE9SVCAqKXBEYXRhKTsKKwl9Cit9CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCisKK3N0YXRpYyBpbmxpbmUgVk9JRCBDb252ZXJ0TXVsdGljYXN0SVAyTUFDKAorCUlOIFBVQ0hBUiBwSXBBZGRyLAorCUlOIFBVQ0hBUiAqcHBNYWNBZGRyLAorCUlOIFVJTlQxNiBQcm90b1R5cGUpCit7CisJaWYgKHBJcEFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKHBwTWFjQWRkciA9PSBOVUxMIHx8ICpwcE1hY0FkZHIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc3dpdGNoIChQcm90b1R5cGUpCisJeworCQljYXNlIEVUSF9QX0lQVjY6CisvLwkJCW1lbXNldCgqcHBNYWNBZGRyLCAwLCBFVEhfTEVOR1RIX09GX0FERFJFU1MpOworCQkJKigqcHBNYWNBZGRyKSA9IDB4MzM7CisJCQkqKCpwcE1hY0FkZHIgKyAxKSA9IDB4MzM7CisJCQkqKCpwcE1hY0FkZHIgKyAyKSA9IHBJcEFkZHJbMTJdOworCQkJKigqcHBNYWNBZGRyICsgMykgPSBwSXBBZGRyWzEzXTsKKwkJCSooKnBwTWFjQWRkciArIDQpID0gcElwQWRkclsxNF07CisJCQkqKCpwcE1hY0FkZHIgKyA1KSA9IHBJcEFkZHJbMTVdOworCQkJYnJlYWs7CisKKwkJY2FzZSBFVEhfUF9JUDoKKwkJZGVmYXVsdDoKKy8vCQkJbWVtc2V0KCpwcE1hY0FkZHIsIDAsIEVUSF9MRU5HVEhfT0ZfQUREUkVTUyk7CisJCQkqKCpwcE1hY0FkZHIpID0gMHgwMTsKKwkJCSooKnBwTWFjQWRkciArIDEpID0gMHgwMDsKKwkJCSooKnBwTWFjQWRkciArIDIpID0gMHg1ZTsKKwkJCSooKnBwTWFjQWRkciArIDMpID0gcElwQWRkclsxXSAmIDB4N2Y7CisJCQkqKCpwcE1hY0FkZHIgKyA0KSA9IHBJcEFkZHJbMl07CisJCQkqKCpwcE1hY0FkZHIgKyA1KSA9IHBJcEFkZHJbM107CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm47Cit9CisKK0JPT0xFQU4gUlRNUENoZWNrRm9ySGFuZygKKwlJTiAgTkRJU19IQU5ETEUgTWluaXBvcnRBZGFwdGVyQ29udGV4dAorCSk7CisKK1ZPSUQgIFJUTVBIYWx0KAorCUlOICBORElTX0hBTkRMRSBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0CisJKTsKKworLy8KKy8vICBQcml2YXRlIHJvdXRpbmVzIGluIHJ0bXBfaW5pdC5jCisvLworTkRJU19TVEFUVVMgUlRNUEFsbG9jQWRhcHRlckJsb2NrKAorCUlOIFBWT0lECQkJaGFuZGxlLAorCU9VVCBQUlRNUF9BREFQVEVSICAgKnBwQWRhcHRlcgorCSk7CisKK05ESVNfU1RBVFVTIFJUTVBBbGxvY1R4UnhSaW5nTWVtb3J5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkCisJKTsKKworTkRJU19TVEFUVVMgUlRNUEZpbmRBZGFwdGVyKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBORElTX0hBTkRMRSAgICAgV3JhcHBlckNvbmZpZ3VyYXRpb25Db250ZXh0CisJKTsKKworTkRJU19TVEFUVVMJUlRNUFJlYWRQYXJhbWV0ZXJzSG9vaygKKwlJTglQUlRNUF9BREFQVEVSIHBBZAorCSk7CisKK1ZPSUQgUlRNUEZyZWVBZGFwdGVyKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkCisJKTsKKworTkRJU19TVEFUVVMgTklDUmVhZFJlZ1BhcmFtZXRlcnMoCisJSU4gIFBSVE1QX0FEQVBURVIgICAgICAgcEFkLAorCUlOICBORElTX0hBTkRMRSAgICAgICAgIFdyYXBwZXJDb25maWd1cmF0aW9uQ29udGV4dAorCSk7CisKKyNpZmRlZiBSVDMweHgKK1ZPSUQgTklDSW5pdFJUMzB4eFJGUmVnaXN0ZXJzKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKyNlbmRpZiAvLyBSVDMweHggLy8KKworVk9JRCBOSUNSZWFkRUVQUk9NUGFyYW1ldGVycygKKwlJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQsCisJSU4JUFVDSEFSCQkJCW1hY19hZGRyKTsKKworVk9JRCBOSUNJbml0QXNpY0Zyb21FRVBST00oCisJSU4gIFBSVE1QX0FEQVBURVIgICAgICAgcEFkKTsKKworVk9JRCBOSUNJbml0VHhSeFJpbmdBbmRCYWNrbG9nUXVldWUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitORElTX1NUQVRVUyBOSUNJbml0aWFsaXplQWRhcHRlcigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgIEJPT0xFQU4gICAgYkhhcmRSZXNldCk7CisKK05ESVNfU1RBVFVTIE5JQ0luaXRpYWxpemVBc2ljKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBCT09MRUFOCQliSGFyZFJlc2V0KTsKKworVk9JRCBOSUNJc3N1ZVJlc2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBSVE1QUmluZ0NsZWFuVXAoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgICAgICAgICBSaW5nVHlwZSk7CisKK1ZPSUQgUnhUZXN0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworTkRJU19TVEFUVVMgRGJnU2VuZFBhY2tldCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUE5ESVNfUEFDS0VUICAgIHBQYWNrZXQpOworCitWT0lEIFVzZXJDZmdJbml0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBOSUNSZXNldEZyb21FcnJvcigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgTklDRXJhc2VGaXJtd2FyZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK05ESVNfU1RBVFVTIE5JQ0xvYWRGaXJtd2FyZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK05ESVNfU1RBVFVTIE5JQ0xvYWRSYXRlU3dpdGNoaW5nUGFyYW1zKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworQk9PTEVBTiBOSUNDaGVja0ZvckhhbmcoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIE5JQ1VwZGF0ZUZpZm9TdGFDb3VudGVycygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgTklDVXBkYXRlUmF3Q291bnRlcnMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitVTE9ORwlSVE1QTm90QWxsWmVybygKKwlJTglQVk9JRAlwU3JjMSwKKwlJTglVTE9ORwlMZW5ndGgpOworCitWT0lEIFJUTVBaZXJvTWVtb3J5KAorCUlOICBQVk9JRCAgIHBTcmMsCisJSU4gIFVMT05HICAgTGVuZ3RoKTsKKworVUxPTkcgUlRNUENvbXBhcmVNZW1vcnkoCisJSU4gIFBWT0lEICAgcFNyYzEsCisJSU4gIFBWT0lEICAgcFNyYzIsCisJSU4gIFVMT05HICAgTGVuZ3RoKTsKKworVk9JRCBSVE1QTW92ZU1lbW9yeSgKKwlPVVQgUFZPSUQgICBwRGVzdCwKKwlJTiAgUFZPSUQgICBwU3JjLAorCUlOICBVTE9ORyAgIExlbmd0aCk7CisKK1ZPSUQgQXRvSCgKKwljaGFyCSpzcmMsCisJVUNIQVIJKmRlc3QsCisJaW50CQlkZXN0bGVuKTsKKworVUNIQVIgQnRvSCgKKwljaGFyIGNoKTsKKworVk9JRCBSVE1QUGF0Y2hNYWNCYnBCdWcoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIFJUTVBQYXRjaENhcmRCdXMoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlcik7CisKK1ZPSUQgUlRNUFBhdGNoUmFsaW5rQ2FyZEJ1cygKKwlJTglQUlRNUF9BREFQVEVSCXBBZGFwdGVyLAorCUlOCVVMT05HCQkJQnVzKTsKKworVUxPTkcgUlRNUFJlYWRDQkNvbmZpZygKKwlJTglVTE9ORwlCdXMsCisJSU4JVUxPTkcJU2xvdCwKKwlJTglVTE9ORwlGdW5jLAorCUlOCVVMT05HCU9mZnNldCk7CisKK1ZPSUQgUlRNUFdyaXRlQ0JDb25maWcoCisJSU4JVUxPTkcJQnVzLAorCUlOCVVMT05HCVNsb3QsCisJSU4JVUxPTkcJRnVuYywKKwlJTglVTE9ORwlPZmZzZXQsCisJSU4JVUxPTkcJVmFsdWUpOworCitWT0lEIFJUTVBJbml0VGltZXIoCisJSU4gIFBSVE1QX0FEQVBURVIgICAgICAgICAgIHBBZCwKKwlJTiAgUFJBTElOS19USU1FUl9TVFJVQ1QgICAgcFRpbWVyLAorCUlOICBQVk9JRCAgICAgICAgICAgICAgICAgICBwVGltZXJGdW5jLAorCUlOCVBWT0lECQkJCQlwRGF0YSwKKwlJTiAgQk9PTEVBTiAgICAgICAgICAgICAgICAgUmVwZWF0KTsKKworVk9JRCBSVE1QU2V0VGltZXIoCisJSU4gIFBSQUxJTktfVElNRVJfU1RSVUNUICAgIHBUaW1lciwKKwlJTiAgVUxPTkcgICAgICAgICAgICAgICAgICAgVmFsdWUpOworCisKK1ZPSUQgUlRNUE1vZFRpbWVyKAorCUlOCVBSQUxJTktfVElNRVJfU1RSVUNUCXBUaW1lciwKKwlJTglVTE9ORwkJCQkJVmFsdWUpOworCitWT0lEIFJUTVBDYW5jZWxUaW1lcigKKwlJTiAgUFJBTElOS19USU1FUl9TVFJVQ1QgICAgcFRpbWVyLAorCU9VVCBCT09MRUFOICAgICAgICAgICAgICAgICAqcENhbmNlbGxlZCk7CisKK1ZPSUQgUlRNUFNldExFRCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQsCisJSU4gVUNIQVIJCQlTdGF0dXMpOworCitWT0lEIFJUTVBTZXRTaWduYWxMRUQoCisJSU4gUFJUTVBfQURBUFRFUiAJcEFkLAorCUlOIE5ESVNfODAyXzExX1JTU0kgRGJtKTsKKworVk9JRCBSVE1QRW5hYmxlUnhUeCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKKy8vCisvLyBwcm90b3R5cGUgaW4gYWN0aW9uLmMKKy8vCitWT0lEIEFjdGlvblN0YXRlTWFjaGluZUluaXQoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisgICAgSU4gIFNUQVRFX01BQ0hJTkUgKlMsCisgICAgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCBNbG1lQUREQkFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBNbG1lREVMQkFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBNbG1lRExTQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgTWxtZUludmFsaWRBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBNbG1lUU9TQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgUGVlckFkZEJBUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckFkZEJBUnNwQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckRlbEJBQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckJBQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgU2VuZFBTTVBBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gVUNIQVIJCQlXY2lkLAorCUlOIFVDSEFSCQkJUHNtcCk7CisKKworI2lmZGVmIERPVDExTl9EUkFGVDMKK1ZPSUQgU2VuZEJTUzIwNDBDb2V4aXN0TWdtdEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUglXY2lkLAorCUlOCVVDSEFSCWFwaWR4LAorCUlOCVVDSEFSCUluZm9SZXEpOworCitWT0lEIFNlbmROb3RpZnlCV0FjdGlvbkZyYW1lKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSICBXY2lkLAorCUlOIFVDSEFSIGFwaWR4KTsKKworQk9PTEVBTiBDaGFubmVsU3dpdGNoU2FuaXR5Q2hlY2soCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gICAgVUNIQVIgIFdjaWQsCisJSU4gICAgVUNIQVIgIE5ld0NoYW5uZWwsCisJSU4gICAgVUNIQVIgIFNlY29uZGFyeSk7CisKK1ZPSUQgQ2hhbm5lbFN3aXRjaEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBVQ0hBUiAgV2NpZCwKKwlJTiAgICBVQ0hBUiAgQ2hhbm5lbCwKKwlJTiAgICBVQ0hBUiAgU2Vjb25kYXJ5KTsKKworVUxPTkcgQnVpbGRJbnRvbGVyYW50Q2hhbm5lbFJlcCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBQVUNIQVIgIHBEZXN0KTsKKworVk9JRCBVcGRhdGUyMDQwQ29leGlzdEZyYW1lQW5kTm90aWZ5KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgIFVDSEFSICBXY2lkLAorCUlOCUJPT0xFQU4JYkFkZEludG9sZXJhbnRDaGEpOworCitWT0lEIFNlbmQyMDQwQ29leGlzdEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgICBVQ0hBUiAgV2NpZCwKKwlJTglCT09MRUFOCWJBZGRJbnRvbGVyYW50Q2hhKTsKKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisKK1ZPSUQgUGVlclJNQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlclB1YmxpY0FjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitWT0lEIFN0YVB1YmxpY0FjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiBCc3MyMDQwQ29leGlzdCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworVk9JRCBQZWVyQlNTVHJhbkFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lEIFBlZXJIVEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitWT0lEIFBlZXJRT1NBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorVk9JRCBQZWVyRExTQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKK1ZPSUQgRGxzUGFybUZpbGwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gT1VUIE1MTUVfRExTX1JFUV9TVFJVQ1QgKnBEbHNSZXEsCisJSU4gUFJUXzgwMl8xMV9ETFMgcERscywKKwlJTiBVU0hPUlQgcmVhc29uKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBSRUNCQVRpbWVyVGltZW91dCgKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisgICAgSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitWT0lEIE9SSUJBVGltZXJUaW1lb3V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBTZW5kUmVmcmVzaEJBUigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglNQUNfVEFCTEVfRU5UUlkJKnBFbnRyeSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgQWN0SGVhZGVySW5pdCgKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiBPVVQgUEhFQURFUl84MDJfMTEgcEhkcjgwMjExLAorICAgIElOIFBVQ0hBUiBBZGRyMSwKKyAgICBJTiBQVUNIQVIgQWRkcjIsCisgICAgSU4gUFVDSEFSIEFkZHIzKTsKKworVk9JRCBCYXJIZWFkZXJJbml0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIE9VVCBQRlJBTUVfQkFSIHBDbnRsQmFyLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gUFVDSEFSIHBTQSk7CisKK1ZPSUQgSW5zZXJ0QWN0RmllbGQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJT1VUIFBVQ0hBUiBwRnJhbWVCdWYsCisJT1VUIFBVTE9ORyBwRnJhbWVMZW4sCisJSU4gVUlOVDggQ2F0ZWdvcnksCisJSU4gVUlOVDggQWN0Q29kZSk7CisKK0JPT0xFQU4gUW9zQkFEYXRhUGFyc2UoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gQk9PTEVBTiBiQU1TRFUsCisJSU4gUFVDSEFSIHA4MDIzSGVhZGVyLAorCUlOIFVDSEFSCVdDSUQsCisJSU4gVUNIQVIJVElELAorCUlOIFVTSE9SVCBTZXF1ZW5jZSwKKwlJTiBVQ0hBUiBEYXRhT2Zmc2V0LAorCUlOIFVTSE9SVCBEYXRhc2l6ZSwKKwlJTiBVSU5UICAgQ3VyUnhJbmRleCk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK0JPT0xFQU4gQ250bEVucXVldWVGb3JSZWN2KAorICAgIElOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFVMT05HIFdjaWQsCisgICAgSU4gVUxPTkcgTXNnTGVuLAorCUlOIFBGUkFNRV9CQV9SRVEgcE1zZyk7CisKK1ZPSUQgQmFBdXRvTWFuU3dpdGNoKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworVk9JRCBIVElPVENoZWNrKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICAgIFVDSEFSICAgICBCYXRSZWNJZHgpOworCisvLworLy8gUHJpdmF0ZSByb3V0aW5lcyBpbiBydG1wX2RhdGEuYworLy8KK0JPT0xFQU4gUlRNUEhhbmRsZVJ4RG9uZUludGVycnVwdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgUlRNUEhhbmRsZVR4RG9uZUludGVycnVwdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK0JPT0xFQU4gUlRNUEhhbmRsZVR4UmluZ0RtYURvbmVJbnRlcnJ1cHQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIElOVF9TT1VSQ0VfQ1NSX1NUUlVDIFR4UmluZ0JpdG1hcCk7CisKK1ZPSUQgUlRNUEhhbmRsZU1nbXRSaW5nRG1hRG9uZUludGVycnVwdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgUlRNUEhhbmRsZVRCVFRJbnRlcnJ1cHQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIFJUTVBIYW5kbGVQcmVUQlRUSW50ZXJydXB0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKwordm9pZCBSVE1QSGFuZGxlVHdha2V1cEludGVycnVwdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQJUlRNUEhhbmRsZVJ4Q29oZXJlbnRJbnRlcnJ1cHQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitCT09MRUFOIFR4RnJhbWVJc0FnZ3JlZ2F0aWJsZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBQcmV2QWRkcjEsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwODAyM2hkcik7CisKK0JPT0xFQU4gUGVlcklzQWdncmVPbigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgVHhSYXRlLAorICAgIElOICBQTUFDX1RBQkxFX0VOVFJZIHBNYWNFbnRyeSk7CisKK05ESVNfU1RBVFVTIFNuaWZmMkJ5dGVzRnJvbU5kaXNCdWZmZXIoCisJSU4gIFBORElTX0JVRkZFUiAgICBwRmlyc3RCdWZmZXIsCisJSU4gIFVDSEFSICAgICAgICAgICBEZXNpcmVkT2Zmc2V0LAorCU9VVCBQVUNIQVIgICAgICAgICAgcEJ5dGUwLAorCU9VVCBQVUNIQVIgICAgICAgICAgcEJ5dGUxKTsKKworTkRJU19TVEFUVVMgU1RBU2VuZFBhY2tldCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUE5ESVNfUEFDS0VUICAgIHBQYWNrZXQpOworCitWT0lEIFNUQVNlbmRQYWNrZXRzKAorCUlOICBORElTX0hBTkRMRSAgICAgTWluaXBvcnRBZGFwdGVyQ29udGV4dCwKKwlJTiAgUFBORElTX1BBQ0tFVCAgIHBwUGFja2V0QXJyYXksCisJSU4gIFVJTlQgICAgICAgICAgICBOdW1iZXJPZlBhY2tldHMpOworCitWT0lEIFJUTVBEZVF1ZXVlUGFja2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgCUlOCUJPT0xFQU4JCQliSW50Q29udGV4dCwKKwlJTiAgVUNIQVIJCQlRdWVJZHgsCisJSU4JVUNIQVIJCQlNYXhfVHhfUGFja2V0cyk7CisKK05ESVNfU1RBVFVTCVJUTVBIYXJkVHJhbnNtaXQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gUE5ESVNfUEFDS0VUCQlwUGFja2V0LAorCUlOICBVQ0hBUgkJCVF1ZUlkeCwKKwlPVVQJUFVMT05HCQkJcEZyZWVUWERMZWZ0KTsKKworTkRJU19TVEFUVVMJU1RBSGFyZFRyYW5zbWl0KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFRYX0JMSwkJCSpwVHhCbGssCisJSU4gIFVDSEFSCQkJUXVlSWR4KTsKKworVk9JRCBTVEFSeEVBUE9MRnJhbWVJbmRpY2F0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglNQUNfVEFCTEVfRU5UUlkJKnBFbnRyeSwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCitORElTX1NUQVRVUyBSVE1QRnJlZVRYRFJlcXVlc3QoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgICAgICAgICBSaW5nVHlwZSwKKwlJTiAgVUNIQVIgICAgICAgICAgIE51bWJlclJlcXVpcmVkLAorCUlOIAlQVUNIQVIgICAgICAgICAgRnJlZU51bWJlcklzKTsKKworTkRJU19TVEFUVVMgTWxtZUhhcmRUcmFuc21pdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIJUXVlSWR4LAorCUlOICBQTkRJU19QQUNLRVQgICAgcFBhY2tldCk7CisKK05ESVNfU1RBVFVTIE1sbWVIYXJkVHJhbnNtaXRNZ210UmluZygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIJUXVlSWR4LAorCUlOICBQTkRJU19QQUNLRVQgICAgcFBhY2tldCk7CisKK05ESVNfU1RBVFVTIE1sbWVIYXJkVHJhbnNtaXRUeFJpbmcoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSCVF1ZUlkeCwKKwlJTiAgUE5ESVNfUEFDS0VUICAgIHBQYWNrZXQpOworCitVU0hPUlQgIFJUTVBDYWxjRHVyYXRpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgICAgICAgICBSYXRlLAorCUlOICBVTE9ORyAgICAgICAgICAgU2l6ZSk7CisKK1ZPSUQgUlRNUFdyaXRlVHhXSSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVFhXSV9TVFJVQwkJcFR4V0ksCisJSU4gIEJPT0xFQU4gICAgCQlGUkFHLAorCUlOICBCT09MRUFOICAgIAkJQ0ZBQ0ssCisJSU4gIEJPT0xFQU4gICAgCQlJbnNUaW1lc3RhbXAsCisJSU4JQk9PTEVBTgkJCUFNUERVLAorCUlOCUJPT0xFQU4JCQlBY2ssCisJSU4JQk9PTEVBTgkJCU5TZXEsCQkvLyBIVyBuZXcgYSBzZXF1ZW5jZS4KKwlJTglVQ0hBUgkJCUJBU2l6ZSwKKwlJTglVQ0hBUgkJCVdDSUQsCisJSU4JVUxPTkcJCQlMZW5ndGgsCisJSU4gIFVDSEFSICAgICAgCQlQSUQsCisJSU4JVUNIQVIJCQlUSUQsCisJSU4JVUNIQVIJCQlUeFJhdGUsCisJSU4JVUNIQVIJCQlUeG9wbW9kZSwKKwlJTglCT09MRUFOCQkJQ2ZBY2ssCisJSU4JSFRUUkFOU01JVF9TRVRUSU5HCSpwVHJhbnNtaXQpOworCisKK1ZPSUQgUlRNUFdyaXRlVHhXSV9EYXRhKAorCUlOCVBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTglPVVQgUFRYV0lfU1RSVUMJCXBUeFdJLAorCUlOCVRYX0JMSwkJCQkqcFR4QmxrKTsKKworCitWT0lEIFJUTVBXcml0ZVR4V0lfQ2FjaGUoCisJSU4JUFJUTVBfQURBUFRFUgkJcEFkLAorCUlOCU9VVCBQVFhXSV9TVFJVQwkJcFR4V0ksCisJSU4JVFhfQkxLCQkJCSpwVHhCbGspOworCitWT0lEIFJUTVBXcml0ZVR4RGVzY3JpcHRvcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVFhEX1NUUlVDCQlwVHhELAorCUlOCUJPT0xFQU4JCQliV0lWLAorCUlOCVVDSEFSCQkJUVNFTCk7CisKK1ZPSUQgUlRNUFN1c3BlbmRNc2R1VHJhbnNtaXNzaW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBSVE1QUmVzdW1lTXNkdVRyYW5zbWlzc2lvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK05ESVNfU1RBVFVTIE1pbmlwb3J0TU1SZXF1ZXN0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOCVVDSEFSCQkJUXVlSWR4LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOICBVSU5UICAgICAgICAgICAgTGVuZ3RoKTsKKworTkRJU19TVEFUVVMgTWluaXBvcnREYXRhTU1SZXF1ZXN0KAorCSBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwkgSU4gIFVDSEFSICAgICAgICAgICBRdWVJZHgsCisJIElOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisJIElOICBVSU5UICAgICAgICAgICAgTGVuZ3RoKTsKKworVk9JRCBSVE1QU2VuZE51bGxGcmFtZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIFR4UmF0ZSwKKwlJTglCT09MRUFOCQkJYlFvc051bGwpOworCitWT0lEIFJUTVBTZW5kRGlzYXNzb2NpYXRpb25GcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUlRNUFNlbmRSVFNGcmFtZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEQSwKKwlJTgl1bnNpZ25lZCBpbnQJTmV4dE1wZHVTaXplLAorCUlOICBVQ0hBUiAgICAgICAgICAgVHhSYXRlLAorCUlOICBVQ0hBUiAgICAgICAgICAgUlRTUmF0ZSwKKwlJTiAgVVNIT1JUICAgICAgICAgIEFja0R1cmF0aW9uLAorCUlOICBVQ0hBUiAgICAgICAgICAgUXVlSWR4LAorCUlOICBVQ0hBUgkJCUZyYW1lR2FwKTsKKworCitORElTX1NUQVRVUyBSVE1QQXBwbHlQYWNrZXRGaWx0ZXIoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBSVDI4WFhfUlhEX1NUUlVDICAgICAgcFJ4RCwKKwlJTiAgUEhFQURFUl84MDJfMTEgIHBIZWFkZXIpOworCitQUVVFVUVfSEVBREVSICAgUlRNUENoZWNrVHhTd1F1ZXVlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCU9VVCBVQ0hBUiAgICAgICAgICAgKlF1ZUlkeCk7CisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKK1ZPSUQgUlRNUFJlcG9ydE1pY0Vycm9yKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQQ0lQSEVSX0tFWSAgICAgcFdwYUtleSk7CisKK1ZPSUQJV3BhTWljRmFpbHVyZVJlcG9ydEZyYW1lKAorCUlOICBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgICBXcGFEaXNhc3NvY0FwQW5kQmxvY2tBc3NvYygKKyAgICBJTiAgUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorICAgIElOICBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKyAgICBJTiAgUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworTkRJU19TVEFUVVMgUlRNUENsb25lTmRpc1BhY2tldCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTglCT09MRUFOICAgIHBJbnNBTVNEVUhkciwKKwlJTiAgUE5ESVNfUEFDS0VUICAgIHBJblBhY2tldCwKKwlPVVQgUE5ESVNfUEFDS0VUICAgKnBwT3V0UGFja2V0KTsKKworTkRJU19TVEFUVVMgUlRNUEFsbG9jYXRlTmRpc1BhY2tldCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUE5ESVNfUEFDS0VUICAgICpwUGFja2V0LAorCUlOICBQVUNIQVIgICAgICAgICAgcEhlYWRlciwKKwlJTiAgVUlOVCAgICAgICAgICAgIEhlYWRlckxlbiwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEYXRhLAorCUlOICBVSU5UICAgICAgICAgICAgRGF0YUxlbik7CisKK1ZPSUQgUlRNUEZyZWVOZGlzUGFja2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQTkRJU19QQUNLRVQgICAgcFBhY2tldCk7CisKK0JPT0xFQU4gUlRNUEZyZWVUWERVcG9uVHhEbWFEb25lKAorCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCUlOIFVDSEFSICAgICAgICAgICAgUXVlSWR4KTsKKworQk9PTEVBTiBSVE1QQ2hlY2tESENQRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpOworCisKK0JPT0xFQU4gUlRNUENoZWNrRXRoZXJUeXBlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KTsKKworCitWT0lEIFJUTVBDY2tCYnBUdW5pbmcoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUlOVAkJCVR4UmF0ZSk7CisKKy8vCisvLyBQcml2YXRlIHJvdXRpbmVzIGluIHJ0bXBfd2VwLmMKKy8vCitWT0lEIFJUTVBJbml0V2VwRW5naW5lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcEtleSwKKwlJTiAgVUNIQVIgICAgICAgICAgIEtleUlkLAorCUlOICBVQ0hBUiAgICAgICAgICAgS2V5TGVuLAorCUlOICBQVUNIQVIgICAgICAgICAgcERlc3QpOworCitWT0lEIFJUTVBFbmNyeXB0RGF0YSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBTcmMsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGVzdCwKKwlJTiAgVUlOVCAgICAgICAgICAgIExlbik7CisKK0JPT0xFQU4JUlRNUERlY3J5cHREYXRhKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4JUFVDSEFSCQkJcFNyYywKKwlJTglVSU5UCQkJTGVuLAorCUlOCVVJTlQJCQlpZHgpOworCitCT09MRUFOCVJUTVBTb2Z0RGVjcnlwdFdFUCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQsCisJSU4gUFVDSEFSCQkJcERhdGEsCisJSU4gVUxPTkcJCQlEYXRhQnl0ZUNudCwKKwlJTiBQQ0lQSEVSX0tFWQkJcEdyb3VwS2V5KTsKKworVk9JRCBSVE1QU2V0SUNWKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcERlc3QpOworCitWT0lEIEFSQ0ZPVVJfSU5JVCgKKwlJTiAgUEFSQ0ZPVVJDT05URVhUIEN0eCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBLZXksCisJSU4gIFVJTlQgICAgICAgICAgICBLZXlMZW4pOworCitVQ0hBUiAgIEFSQ0ZPVVJfQllURSgKKwlJTiAgUEFSQ0ZPVVJDT05URVhUICAgICBDdHgpOworCitWT0lEIEFSQ0ZPVVJfREVDUllQVCgKKwlJTiAgUEFSQ0ZPVVJDT05URVhUIEN0eCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEZXN0LAorCUlOICBQVUNIQVIgICAgICAgICAgcFNyYywKKwlJTiAgVUlOVCAgICAgICAgICAgIExlbik7CisKK1ZPSUQgQVJDRk9VUl9FTkNSWVBUKAorCUlOICBQQVJDRk9VUkNPTlRFWFQgQ3R4LAorCUlOICBQVUNIQVIgICAgICAgICAgcERlc3QsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwU3JjLAorCUlOICBVSU5UICAgICAgICAgICAgTGVuKTsKKworVk9JRCBXUEFBUkNGT1VSX0VOQ1JZUFQoCisJSU4gIFBBUkNGT1VSQ09OVEVYVCBDdHgsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGVzdCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBTcmMsCisJSU4gIFVJTlQgICAgICAgICAgICBMZW4pOworCitVSU5UIFJUTVBfQ0FMQ19GQ1MzMigKKwlJTiAgVUlOVCAgIEZjcywKKwlJTiAgUFVDSEFSICBDcCwKKwlJTiAgSU5UICAgICBMZW4pOworCisvLworLy8gTUxNRSByb3V0aW5lcworLy8KKworLy8gQXNpYy9SRi9CQlAgcmVsYXRlZCBmdW5jdGlvbnMKKworVk9JRCBBc2ljQWRqdXN0VHhQb3dlcigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgCUFzaWNVcGRhdGVQcm90ZWN0KAorCUlOCQlQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAJCVVTSE9SVAkJCU9wZXJhaW9uTW9kZSwKKwlJTiAJCVVDSEFSCQkJU2V0TWFzaywKKwlJTgkJQk9PTEVBTgkJCWJEaXNhYmxlQkdQcm90ZWN0LAorCUlOCQlCT09MRUFOCQkJYk5vbkdGRXhpc3QpOworCitWT0lEIEFzaWNTd2l0Y2hDaGFubmVsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOCVVDSEFSCQkJQ2hhbm5lbCwKKwlJTglCT09MRUFOCQkJYlNjYW4pOworCitWT0lEIEFzaWNMb2NrQ2hhbm5lbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiBDaGFubmVsKSA7CisKK1ZPSUQgQXNpY0FudGVubmFTZWxlY3QoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgICAgICAgICBDaGFubmVsKTsKKworVk9JRCBBc2ljQW50ZW5uYVNldHRpbmcoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JQUJHQkFORF9TVEFURQlCYW5kU3RhdGUpOworCitWT0lEIEFzaWNSZlR1bmluZ0V4ZWMoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorVk9JRCBBc2ljU2xlZXBUaGVuQXV0b1dha2V1cCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVVNIT1JUIFRidHROdW1Ub05leHRXYWtlVXApOworCitWT0lEIEFzaWNGb3JjZVNsZWVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBc2ljRm9yY2VXYWtldXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gQk9PTEVBTiAgICBiRnJvbVR4KTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworVk9JRCBBc2ljU2V0QnNzaWQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiBwQnNzaWQpOworCitWT0lEIEFzaWNTZXRNY2FzdFdDKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBc2ljRGVsV2NpZFRhYigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUglXY2lkKTsKKworVk9JRCBBc2ljRW5hYmxlUkRHKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBBc2ljRGlzYWJsZVJERygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgQXNpY0Rpc2FibGVTeW5jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBBc2ljRW5hYmxlQnNzU3luYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgQXNpY0VuYWJsZUlic3NTeW5jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBBc2ljU2V0RWRjYVBhcm0oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUEVEQ0FfUEFSTSAgICBwRWRjYVBhcm0pOworCitWT0lEIEFzaWNTZXRTbG90VGltZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBCT09MRUFOIGJVc2VTaG9ydFNsb3RUaW1lKTsKKworVk9JRCBBc2ljQWRkU2hhcmVkS2V5RW50cnkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgICAgICAgICBCc3NJbmRleCwKKwlJTiBVQ0hBUiAgICAgICAgIEtleUlkeCwKKwlJTiBVQ0hBUiAgICAgICAgIENpcGhlckFsZywKKwlJTiBQVUNIQVIgICAgICAgIHBLZXksCisJSU4gUFVDSEFSICAgICAgICBwVHhNaWMsCisJSU4gUFVDSEFSICAgICAgICBwUnhNaWMpOworCitWT0lEIEFzaWNSZW1vdmVTaGFyZWRLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiAgICAgICAgIEJzc0luZGV4LAorCUlOIFVDSEFSICAgICAgICAgS2V5SWR4KTsKKworVk9JRCBBc2ljVXBkYXRlV0NJREF0dHJpYnV0ZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQJCVdDSUQsCisJSU4gVUNIQVIJCUJzc0luZGV4LAorCUlOIFVDSEFSICAgICAgICBDaXBoZXJBbGcsCisJSU4gQk9PTEVBTgkJYlVzZVBhaXJld2lzZUtleVRhYmxlKTsKKworVk9JRCBBc2ljVXBkYXRlV0NJRElWRUlWKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVAkJV0NJRCwKKwlJTiBVTE9ORyAgICAgICAgdUlWLAorCUlOIFVMT05HICAgICAgICB1RUlWKTsKKworVk9JRCBBc2ljVXBkYXRlUnhXQ0lEVGFibGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUCQlXQ0lELAorCUlOIFBVQ0hBUiAgICAgICAgcEFkZHIpOworCitWT0lEIEFzaWNBZGRLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQJCVdDSUQsCisJSU4gVUNIQVIJCUJzc0luZGV4LAorCUlOIFVDSEFSCQlLZXlJZHgsCisJSU4gUENJUEhFUl9LRVkJcENpcGhlcktleSwKKwlJTiBCT09MRUFOCQliVXNlUGFpcmV3aXNlS2V5VGFibGUsCisJSU4gQk9PTEVBTgkJYlR4S2V5KTsKKworVk9JRCBBc2ljQWRkUGFpcndpc2VLZXlFbnRyeSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgICAgICAgIHBBZGRyLAorCUlOIFVDSEFSCQlXQ0lELAorCUlOIENJUEhFUl9LRVkJCSAqcENpcGhlcktleSk7CisKK1ZPSUQgQXNpY1JlbW92ZVBhaXJ3aXNlS2V5RW50cnkoCisJSU4gUFJUTVBfQURBUFRFUiAgcEFkLAorCUlOIFVDSEFSCQkgQnNzSWR4LAorCUlOIFVDSEFSCQkgV2NpZCk7CisKK0JPT0xFQU4gQXNpY1NlbmRDb21tYW5kVG9NY3UoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgICAgICAgICBDb21tYW5kLAorCUlOIFVDSEFSICAgICAgICAgVG9rZW4sCisJSU4gVUNIQVIgICAgICAgICBBcmcwLAorCUlOIFVDSEFSICAgICAgICAgQXJnMSk7CisKKworVk9JRCBNYWNBZGRyUmFuZG9tQnNzaWQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJT1VUIFBVQ0hBUiBwQWRkcik7CisKK1ZPSUQgTWd0TWFjSGVhZGVySW5pdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgICAgcEFkLAorCUlOIE9VVCBQSEVBREVSXzgwMl8xMSBwSGRyODAyMTEsCisJSU4gVUNIQVIgU3ViVHlwZSwKKwlJTiBVQ0hBUiBUb0RzLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gUFVDSEFSIHBCc3NpZCk7CisKK1ZPSUQgTWxtZVJhZGlvT2ZmKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCBNbG1lUmFkaW9PbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKKworVk9JRCBCc3NUYWJsZUluaXQoCisJSU4gQlNTX1RBQkxFICpUYWIpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lEIEJBVGFibGVJbml0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIEJBX1RBQkxFICpUYWIpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitVTE9ORyBCc3NUYWJsZVNlYXJjaCgKKwlJTiBCU1NfVEFCTEUgKlRhYiwKKwlJTiBQVUNIQVIgcEJzc2lkLAorCUlOIFVDSEFSIENoYW5uZWwpOworCitVTE9ORyBCc3NTc2lkVGFibGVTZWFyY2goCisJSU4gQlNTX1RBQkxFICpUYWIsCisJSU4gUFVDSEFSICAgIHBCc3NpZCwKKwlJTiBQVUNIQVIgICAgcFNzaWQsCisJSU4gVUNIQVIgICAgIFNzaWRMZW4sCisJSU4gVUNIQVIgICAgIENoYW5uZWwpOworCitVTE9ORyBCc3NUYWJsZVNlYXJjaFdpdGhTU0lEKAorCUlOIEJTU19UQUJMRSAqVGFiLAorCUlOIFBVQ0hBUiAgICBCc3NpZCwKKwlJTiBQVUNIQVIgICAgcFNzaWQsCisJSU4gVUNIQVIgICAgIFNzaWRMZW4sCisJSU4gVUNIQVIgICAgIENoYW5uZWwpOworCitWT0lEIEJzc1RhYmxlRGVsZXRlRW50cnkoCisJSU4gT1VUICBQQlNTX1RBQkxFIHBUYWIsCisJSU4gICAgICBQVUNIQVIgcEJzc2lkLAorCUlOICAgICAgVUNIQVIgQ2hhbm5lbCk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgQkFUYWJsZURlbGV0ZU9SSUVudHJ5KAorCUlOIE9VVAlQUlRNUF9BREFQVEVSIHBBZCwKKwlJTgkJQkFfT1JJX0VOVFJZCSpwQkFPUklFbnRyeSk7CisKK1ZPSUQgQkFUYWJsZURlbGV0ZVJFQ0VudHJ5KAorCUlOIE9VVAlQUlRNUF9BREFQVEVSIHBBZCwKKwlJTgkJQkFfUkVDX0VOVFJZCSpwQkFSRUNFbnRyeSk7CisKK1ZPSUQgQkFUYWJsZVRlYXJPUklFbnRyeSgKKwlJTiBPVVQJUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JCVVDSEFSIFRJRCwKKwlJTgkJVUNIQVIgV2NpZCwKKwlJTgkJQk9PTEVBTiBiRm9yY2VEZWxldGUsCisJSU4JCUJPT0xFQU4gQUxMKTsKKworVk9JRCBCQVRhYmxlVGVhclJFQ0VudHJ5KAorCUlOIE9VVAlQUlRNUF9BREFQVEVSIHBBZCwKKwlJTgkJVUNIQVIgVElELAorCUlOCQlVQ0hBUiBXQ0lELAorCUlOCQlCT09MRUFOIEFMTCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgIEJzc0VudHJ5U2V0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCU9VVCBQQlNTX0VOVFJZIHBCc3MsCisJSU4gUFVDSEFSIHBCc3NpZCwKKwlJTiBDSEFSIFNzaWRbXSwKKwlJTiBVQ0hBUiBTc2lkTGVuLAorCUlOIFVDSEFSIEJzc1R5cGUsCisJSU4gVVNIT1JUIEJlYWNvblBlcmlvZCwKKwlJTiBQQ0ZfUEFSTSBDZlBhcm0sCisJSU4gVVNIT1JUIEF0aW1XaW4sCisJSU4gVVNIT1JUIENhcGFiaWxpdHlJbmZvLAorCUlOIFVDSEFSIFN1cFJhdGVbXSwKKwlJTiBVQ0hBUiBTdXBSYXRlTGVuLAorCUlOIFVDSEFSIEV4dFJhdGVbXSwKKwlJTiBVQ0hBUiBFeHRSYXRlTGVuLAorCUlOIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHksCisJSU4gQUREX0hUX0lORk9fSUUgKnBBZGRIdEluZm8sCS8vIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRQorCUlOIFVDSEFSCQkJSHRDYXBhYmlsaXR5TGVuLAorCUlOIFVDSEFSCQkJQWRkSHRJbmZvTGVuLAorCUlOIFVDSEFSCQkJTmV3RXh0Q2hhbk9mZnNldCwKKwlJTiBVQ0hBUiBDaGFubmVsLAorCUlOIENIQVIgUnNzaSwKKwlJTiBMQVJHRV9JTlRFR0VSIFRpbWVTdGFtcCwKKwlJTiBVQ0hBUiBDa2lwRmxhZywKKwlJTiBQRURDQV9QQVJNIHBFZGNhUGFybSwKKwlJTiBQUU9TX0NBUEFCSUxJVFlfUEFSTSBwUW9zQ2FwYWJpbGl0eSwKKwlJTiBQUUJTU19MT0FEX1BBUk0gcFFic3NMb2FkLAorCUlOIFVTSE9SVCBMZW5ndGhWSUUsCisJSU4gUE5ESVNfODAyXzExX1ZBUklBQkxFX0lFcyBwVklFKTsKKworVUxPTkcgIEJzc1RhYmxlU2V0RW50cnkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJT1VUIFBCU1NfVEFCTEUgcFRhYiwKKwlJTiBQVUNIQVIgcEJzc2lkLAorCUlOIENIQVIgU3NpZFtdLAorCUlOIFVDSEFSIFNzaWRMZW4sCisJSU4gVUNIQVIgQnNzVHlwZSwKKwlJTiBVU0hPUlQgQmVhY29uUGVyaW9kLAorCUlOIENGX1BBUk0gKkNmUGFybSwKKwlJTiBVU0hPUlQgQXRpbVdpbiwKKwlJTiBVU0hPUlQgQ2FwYWJpbGl0eUluZm8sCisJSU4gVUNIQVIgU3VwUmF0ZVtdLAorCUlOIFVDSEFSIFN1cFJhdGVMZW4sCisJSU4gVUNIQVIgRXh0UmF0ZVtdLAorCUlOIFVDSEFSIEV4dFJhdGVMZW4sCisJSU4gSFRfQ0FQQUJJTElUWV9JRSAqcEh0Q2FwYWJpbGl0eSwKKwlJTiBBRERfSFRfSU5GT19JRSAqcEFkZEh0SW5mbywJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJSU4gVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4sCisJSU4gVUNIQVIJCQlBZGRIdEluZm9MZW4sCisJSU4gVUNIQVIJCQlOZXdFeHRDaGFuT2Zmc2V0LAorCUlOIFVDSEFSIENoYW5uZWwsCisJSU4gQ0hBUiBSc3NpLAorCUlOIExBUkdFX0lOVEVHRVIgVGltZVN0YW1wLAorCUlOIFVDSEFSIENraXBGbGFnLAorCUlOIFBFRENBX1BBUk0gcEVkY2FQYXJtLAorCUlOIFBRT1NfQ0FQQUJJTElUWV9QQVJNIHBRb3NDYXBhYmlsaXR5LAorCUlOIFBRQlNTX0xPQURfUEFSTSBwUWJzc0xvYWQsCisJSU4gVVNIT1JUIExlbmd0aFZJRSwKKwlJTiBQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzIHBWSUUpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lEIEJBVGFibGVJbnNlcnRFbnRyeSgKKyAgICBJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVU0hPUlQgQWlkLAorICAgIElOIFVTSE9SVAkJVGltZU91dFZhbHVlLAorCUlOIFVTSE9SVAkJU3RhcnRpbmdTZXEsCisgICAgSU4gVUNIQVIgVElELAorCUlOIFVDSEFSIEJBV2luU2l6ZSwKKwlJTiBVQ0hBUiBPcmlnaW5hdG9yU3RhdHVzLAorICAgIElOIEJPT0xFQU4gSXNSZWNpcGllbnQpOworCisjaWZkZWYgRE9UMTFOX0RSQUZUMworVk9JRCBCc3MyMDQwQ29leGlzdFRpbWVPdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworCitWT0lEICBUcmlFdmVudEluaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitVTE9ORyBUcmlFdmVudFRhYmxlU2V0RW50cnkoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUIFRSSUdHRVJfRVZFTlRfVEFCICpUYWIsCisJSU4gUFVDSEFSIHBCc3NpZCwKKwlJTiBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5LAorCUlOIFVDSEFSCQkJSHRDYXBhYmlsaXR5TGVuLAorCUlOIFVDSEFSCQkJUmVnQ2xhc3MsCisJSU4gVUNIQVIgQ2hhbm5lbE5vKTsKKworVk9JRCBUcmlFdmVudENvdW50ZXJNYWludGVuYW5jZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitWT0lEIEJzc1RhYmxlU3NpZFNvcnQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJT1VUIEJTU19UQUJMRSAqT3V0VGFiLAorCUlOICBDSEFSIFNzaWRbXSwKKwlJTiAgVUNIQVIgU3NpZExlbik7CisKK1ZPSUQgIEJzc1RhYmxlU29ydEJ5UnNzaSgKKwlJTiBPVVQgQlNTX1RBQkxFICpPdXRUYWIpOworCitWT0lEIEJzc0NpcGhlclBhcnNlKAorCUlOIE9VVCAgUEJTU19FTlRSWSAgcEJzcyk7CisKK05ESVNfU1RBVFVTICBNbG1lUXVldWVJbml0KAorCUlOIE1MTUVfUVVFVUUgKlF1ZXVlKTsKKworVk9JRCAgTWxtZVF1ZXVlRGVzdHJveSgKKwlJTiBNTE1FX1FVRVVFICpRdWV1ZSk7CisKK0JPT0xFQU4gTWxtZUVucXVldWUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUxPTkcgTWFjaGluZSwKKwlJTiBVTE9ORyBNc2dUeXBlLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlJTiBWT0lEICpNc2cpOworCitCT09MRUFOIE1sbWVFbnF1ZXVlRm9yUmVjdigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiBVTE9ORyBXY2lkLAorCUlOIFVMT05HIFRpbWVTdGFtcEhpZ2gsCisJSU4gVUxPTkcgVGltZVN0YW1wTG93LAorCUlOIFVDSEFSIFJzc2kwLAorCUlOIFVDSEFSIFJzc2kxLAorCUlOIFVDSEFSIFJzc2kyLAorCUlOIFVMT05HIE1zZ0xlbiwKKwlJTiBQVk9JRCBNc2csCisJSU4gVUNIQVIgU2lnbmFsKTsKKworCitCT09MRUFOIE1sbWVEZXF1ZXVlKAorCUlOIE1MTUVfUVVFVUUgKlF1ZXVlLAorCU9VVCBNTE1FX1FVRVVFX0VMRU0gKipFbGVtKTsKKworVk9JRCAgICBNbG1lUmVzdGFydFN0YXRlTWFjaGluZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK0JPT0xFQU4gIE1sbWVRdWV1ZUVtcHR5KAorCUlOIE1MTUVfUVVFVUUgKlF1ZXVlKTsKKworQk9PTEVBTiAgTWxtZVF1ZXVlRnVsbCgKKwlJTiBNTE1FX1FVRVVFICpRdWV1ZSk7CisKK0JPT0xFQU4gIE1zZ1R5cGVTdWJzdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQRlJBTUVfODAyXzExIHBGcmFtZSwKKwlPVVQgSU5UICpNYWNoaW5lLAorCU9VVCBJTlQgKk1zZ1R5cGUpOworCitWT0lEIFN0YXRlTWFjaGluZUluaXQoCisJSU4gU1RBVEVfTUFDSElORSAqU20sCisJSU4gU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10sCisJSU4gVUxPTkcgU3ROciwKKwlJTiBVTE9ORyBNc2dOciwKKwlJTiBTVEFURV9NQUNISU5FX0ZVTkMgRGVmRnVuYywKKwlJTiBVTE9ORyBJbml0U3RhdGUsCisJSU4gVUxPTkcgQmFzZSk7CisKK1ZPSUQgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKAorCUlOIFNUQVRFX01BQ0hJTkUgKlMsCisJSU4gVUxPTkcgU3QsCisJVUxPTkcgTXNnLAorCUlOIFNUQVRFX01BQ0hJTkVfRlVOQyBGKTsKKworVk9JRCBTdGF0ZU1hY2hpbmVQZXJmb3JtQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIFNUQVRFX01BQ0hJTkUgKlMsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBEcm9wKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQXNzb2NTdGF0ZU1hY2hpbmVJbml0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBTVEFURV9NQUNISU5FICpTbSwKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIFJlYXNzb2NUaW1lb3V0KAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgQXNzb2NUaW1lb3V0KAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgRGlzYXNzb2NUaW1lb3V0KAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVk9JRCBNbG1lRGlzYXNzb2NSZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgTWxtZUFzc29jUmVxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIE1sbWVSZWFzc29jUmVxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIE1sbWVEaXNhc3NvY1JlcUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyQXNzb2NSc3BBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlclJlYXNzb2NSc3BBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckRpc2Fzc29jQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIERpc2Fzc29jVGltZW91dEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBc3NvY1RpbWVvdXRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgIFJlYXNzb2NUaW1lb3V0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICBDbHMzZXJyQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgcEFkZHIpOworCitWT0lEIFN3aXRjaEJldHdlZW5XZXBBbmRDa2lwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCAgSW52YWxpZFN0YXRlV2hlbkFzc29jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEICBJbnZhbGlkU3RhdGVXaGVuUmVhc3NvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBJbnZhbGlkU3RhdGVXaGVuRGlzYXNzb2NpYXRlKAorCUlOICBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworI2lmZGVmIFJUMjg3MAorVk9JRCBNbG1lQ250bENvbmZpcm0oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUxPTkcgTXNnVHlwZSwKKwlJTiBVU0hPUlQgTXNnKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworVk9JRCAgQ29tcG9zZVBzUG9sbCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgIENvbXBvc2VOdWxsRnJhbWUoCisJSU4gIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVk9JRCAgQXNzb2NQb3N0UHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSIHBBZGRyMiwKKwlJTiAgVVNIT1JUIENhcGFiaWxpdHlJbmZvLAorCUlOICBVU0hPUlQgQWlkLAorCUlOICBVQ0hBUiBTdXBSYXRlW10sCisJSU4gIFVDSEFSIFN1cFJhdGVMZW4sCisJSU4gIFVDSEFSIEV4dFJhdGVbXSwKKwlJTiAgVUNIQVIgRXh0UmF0ZUxlbiwKKwlJTiBQRURDQV9QQVJNIHBFZGNhUGFybSwKKwlJTiBIVF9DQVBBQklMSVRZX0lFCQkqcEh0Q2FwYWJpbGl0eSwKKwlJTiAgVUNIQVIgSHRDYXBhYmlsaXR5TGVuLAorCUlOIEFERF9IVF9JTkZPX0lFCQkqcEFkZEh0SW5mbyk7CisKK1ZPSUQgQXV0aFN0YXRlTWFjaGluZUluaXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gUFNUQVRFX01BQ0hJTkUgc20sCisJT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCBBdXRoVGltZW91dCgKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitWT0lEIE1sbWVBdXRoUmVxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJBdXRoUnNwQXRTZXEyQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJBdXRoUnNwQXRTZXE0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEF1dGhUaW1lb3V0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIENsczJlcnJBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiBwQWRkcik7CisKK1ZPSUQgTWxtZURlYXV0aFJlcUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBJbnZhbGlkU3RhdGVXaGVuQXV0aCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVk9JRCBBdXRoUnNwU3RhdGVNYWNoaW5lSW5pdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFNUQVRFX01BQ0hJTkUgU20sCisJSU4gIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCBQZWVyRGVhdXRoQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckF1dGhTaW1wbGVSc3BHZW5BbmRTZW5kKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQSEVBREVSXzgwMl8xMSAgcEhkcjgwMjExLAorCUlOICBVU0hPUlQgQWxnLAorCUlOICBVU0hPUlQgU2VxLAorCUlOICBVU0hPUlQgUmVhc29uLAorCUlOICBVU0hPUlQgU3RhdHVzKTsKKworLy8KKy8vIFByaXZhdGUgcm91dGluZXMgaW4gZGxzLmMKKy8vCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKK3ZvaWQgRGxzU3RhdGVNYWNoaW5lSW5pdCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBTVEFURV9NQUNISU5FICpTbSwKKyAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pOworCitWT0lEIE1sbWVEbHNSZXFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyRGxzUmVxQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIJcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTQkqRWxlbSk7CisKK1ZPSUQgUGVlckRsc1JzcEFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0JKkVsZW0pOworCitWT0lEIE1sbWVEbHNUZWFyRG93bkFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJEbHNUZWFyRG93bkFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSCXBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0JKkVsZW0pOworCitWT0lEIFJUTVBDaGVja0RMU1RpbWVPdXQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpOworCitCT09MRUFOIFJUTVBSY3ZGcmFtZURMU0NoZWNrKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFBIRUFERVJfODAyXzExCXBIZWFkZXIsCisJSU4gVUxPTkcJCQlMZW4sCisJSU4gUFJUMjhYWF9SWERfU1RSVUMJcFJ4RCk7CisKK0lOVAlSVE1QQ2hlY2tETFNGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEQSk7CisKK1ZPSUQgUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcERBKTsKKworTkRJU19TVEFUVVMgUlRNUFNlbmRTVEFLZXlSZXF1ZXN0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBEQSk7CisKK05ESVNfU1RBVFVTIFJUTVBTZW5kU1RBS2V5SGFuZFNoYWtlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBEQSk7CisKK1ZPSUQgRGxzVGltZW91dEFjdGlvbigKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitCT09MRUFOIE1sbWVEbHNSZXFTYW5pdHkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFJUXzgwMl8xMV9ETFMgKnBETFMsCisgICAgT1VUIFBVU0hPUlQgcFJlYXNvbik7CisKK0lOVCBTZXRfRGxzRW50cnlJbmZvX0Rpc3BsYXlfUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgYXJnKTsKKworTUFDX1RBQkxFX0VOVFJZICpNYWNUYWJsZUluc2VydERsc0VudHJ5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIJcEFkZHIsCisJSU4gIFVJTlQJRGxzRW50cnlJZHgpOworCitCT09MRUFOIE1hY1RhYmxlRGVsZXRlRGxzRW50cnkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIHdjaWQsCisJSU4gUFVDSEFSIHBBZGRyKTsKKworTUFDX1RBQkxFX0VOVFJZICpEbHNFbnRyeVRhYmxlTG9va3VwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUglwQWRkciwKKwlJTiBCT09MRUFOCWJSZXNldElkZWxDb3VudCk7CisKK01BQ19UQUJMRV9FTlRSWSAqRGxzRW50cnlUYWJsZUxvb2t1cEJ5V2NpZCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUgl3Y2lkLAorCUlOIFBVQ0hBUglwQWRkciwKKwlJTiBCT09MRUFOCWJSZXNldElkZWxDb3VudCk7CisKK0lOVAlTZXRfRGxzQWRkRW50cnlfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0Rsc1RlYXJEb3duRW50cnlfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCitCT09MRUFOIFBlZXJEbHNSZXFTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBEQSwKKyAgICBPVVQgUFVDSEFSIHBTQSwKKyAgICBPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisgICAgT1VUIFVTSE9SVCAqcERsc1RpbWVvdXQsCisgICAgT1VUIFVDSEFSICpwUmF0ZXNMZW4sCisgICAgT1VUIFVDSEFSIFJhdGVzW10sCisgICAgT1VUIFVDSEFSICpwSHRDYXBhYmlsaXR5TGVuLAorICAgIE9VVCBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5KTsKKworQk9PTEVBTiBQZWVyRGxzUnNwU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKk1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwREEsCisgICAgT1VUIFBVQ0hBUiBwU0EsCisgICAgT1VUIFVTSE9SVCAqcENhcGFiaWxpdHlJbmZvLAorICAgIE9VVCBVU0hPUlQgKnBTdGF0dXMsCisgICAgT1VUIFVDSEFSICpwUmF0ZXNMZW4sCisgICAgT1VUIFVDSEFSIFJhdGVzW10sCisgICAgT1VUIFVDSEFSICpwSHRDYXBhYmlsaXR5TGVuLAorICAgIE9VVCBIVF9DQVBBQklMSVRZX0lFICpwSHRDYXBhYmlsaXR5KTsKKworQk9PTEVBTiBQZWVyRGxzVGVhckRvd25TYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBEQSwKKyAgICBPVVQgUFVDSEFSIHBTQSwKKyAgICBPVVQgVVNIT1JUICpwUmVhc29uKTsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1ZPSUQgU3luY1N0YXRlTWFjaGluZUluaXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFNUQVRFX01BQ0hJTkUgKlNtLAorCU9VVCBTVEFURV9NQUNISU5FX0ZVTkMgVHJhbnNbXSk7CisKK1ZPSUQgQmVhY29uVGltZW91dCgKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitWT0lEIFNjYW5UaW1lb3V0KAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgTWxtZVNjYW5SZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgSW52YWxpZFN0YXRlV2hlblNjYW4oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgSW52YWxpZFN0YXRlV2hlbkpvaW4oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgSW52YWxpZFN0YXRlV2hlblN0YXJ0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJCZWFjb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgRW5xdWV1ZVByb2JlUmVxdWVzdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK0JPT0xFQU4gU2NhblJ1bm5pbmcoCisJCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVk9JRCBNbG1lQ250bEluaXQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFNUQVRFX01BQ0hJTkUgKlMsCisJT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCBNbG1lQ250bE1hY2hpbmVQZXJmb3JtQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBTVEFURV9NQUNISU5FICpTLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIENudGxJZGxlUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBDbnRsT2lkU2NhblByb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIENudGxPaWRTc2lkUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICogRWxlbSk7CisKK1ZPSUQgQ250bE9pZFJUQnNzaWRQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKiBFbGVtKTsKKworVk9JRCBDbnRsTWxtZVJvYW1pbmdQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKiBFbGVtKTsKKworVk9JRCBDbnRsV2FpdERpc2Fzc29jUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBDbnRsV2FpdEpvaW5Qcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIENudGxXYWl0UmVhc3NvY1Byb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQ250bFdhaXRTdGFydFByb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQ250bFdhaXRBdXRoUHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBDbnRsV2FpdEF1dGhQcm9jMigKKwlJTiAgUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQ250bFdhaXRBc3NvY1Byb2MoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKK1ZPSUQgQ250bE9pZERMU1NldHVwUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCitWT0lEIExpbmtVcCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgQnNzVHlwZSk7CisKK1ZPSUQgTGlua0Rvd24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIEJPT0xFQU4gICAgICAgICBJc1JlcUZyb21BUCk7CisKK1ZPSUQgSXRlcmF0ZU9uQnNzVGFiKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBJdGVyYXRlT25Cc3NUYWIyKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTs7CisKK1ZPSUQgSm9pblBhcm1GaWxsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBPVVQgTUxNRV9KT0lOX1JFUV9TVFJVQ1QgKkpvaW5SZXEsCisJSU4gIFVMT05HIEJzc0lkeCk7CisKK1ZPSUQgQXNzb2NQYXJtRmlsbCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiBPVVQgTUxNRV9BU1NPQ19SRVFfU1RSVUNUICpBc3NvY1JlcSwKKwlJTiAgUFVDSEFSIHBBZGRyLAorCUlOICBVU0hPUlQgQ2FwYWJpbGl0eUluZm8sCisJSU4gIFVMT05HIFRpbWVvdXQsCisJSU4gIFVTSE9SVCBMaXN0ZW5JbnR2KTsKKworVk9JRCBTY2FuUGFybUZpbGwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE9VVCBNTE1FX1NDQU5fUkVRX1NUUlVDVCAqU2NhblJlcSwKKwlJTiAgQ0hBUiBTc2lkW10sCisJSU4gIFVDSEFSIFNzaWRMZW4sCisJSU4gIFVDSEFSIEJzc1R5cGUsCisJSU4gIFVDSEFSIFNjYW5UeXBlKTsKKworVk9JRCBEaXNhc3NvY1Bhcm1GaWxsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBPVVQgTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUICpEaXNhc3NvY1JlcSwKKwlJTiAgUFVDSEFSIHBBZGRyLAorCUlOICBVU0hPUlQgUmVhc29uKTsKKworVk9JRCBTdGFydFBhcm1GaWxsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBPVVQgTUxNRV9TVEFSVF9SRVFfU1RSVUNUICpTdGFydFJlcSwKKwlJTiAgQ0hBUiBTc2lkW10sCisJSU4gIFVDSEFSIFNzaWRMZW4pOworCitWT0lEIEF1dGhQYXJtRmlsbCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgT1VUIE1MTUVfQVVUSF9SRVFfU1RSVUNUICpBdXRoUmVxLAorCUlOICBQVUNIQVIgcEFkZHIsCisJSU4gIFVTSE9SVCBBbGcpOworCitWT0lEIEVucXVldWVQc1BvbGwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEVucXVldWVCZWFjb25GcmFtZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgTWxtZUpvaW5SZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgTWxtZVNjYW5SZXFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgTWxtZVN0YXJ0UmVxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFNjYW5UaW1lb3V0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEJlYWNvblRpbWVvdXRBdEpvaW5BY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlckJlYWNvbkF0U2NhbkFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyQmVhY29uQXRKb2luQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIFBlZXJCZWFjb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgUGVlclByb2JlUmVxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBTY2FuTmV4dENoYW5uZWwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitVTE9ORyBNYWtlSWJzc0JlYWNvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgQ0NYQWRqYWNlbnRBUFJlcG9ydCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK0JPT0xFQU4gTWxtZVNjYW5SZXFTYW5pdHkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFZPSUQgKk1zZywKKwlJTiAgVUxPTkcgTXNnTGVuLAorCU9VVCBVQ0hBUiAqQnNzVHlwZSwKKwlPVVQgQ0hBUiBzc2lkW10sCisJT1VUIFVDSEFSICpTc2lkTGVuLAorCU9VVCBVQ0hBUiAqU2NhblR5cGUpOworCitCT09MRUFOIFBlZXJCZWFjb25BbmRQcm9iZVJzcFNhbml0eSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVk9JRCAqTXNnLAorCUlOICBVTE9ORyBNc2dMZW4sCisJSU4gIFVDSEFSIE1zZ0NoYW5uZWwsCisJT1VUIFBVQ0hBUiBwQWRkcjIsCisJT1VUIFBVQ0hBUiBwQnNzaWQsCisJT1VUIENIQVIgU3NpZFtdLAorCU9VVCBVQ0hBUiAqcFNzaWRMZW4sCisJT1VUIFVDSEFSICpwQnNzVHlwZSwKKwlPVVQgVVNIT1JUICpwQmVhY29uUGVyaW9kLAorCU9VVCBVQ0hBUiAqcENoYW5uZWwsCisJT1VUIFVDSEFSICpwTmV3Q2hhbm5lbCwKKwlPVVQgTEFSR0VfSU5URUdFUiAqcFRpbWVzdGFtcCwKKwlPVVQgQ0ZfUEFSTSAqcENmUGFybSwKKwlPVVQgVVNIT1JUICpwQXRpbVdpbiwKKwlPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisJT1VUIFVDSEFSICpwRXJwLAorCU9VVCBVQ0hBUiAqcER0aW1Db3VudCwKKwlPVVQgVUNIQVIgKnBEdGltUGVyaW9kLAorCU9VVCBVQ0hBUiAqcEJjYXN0RmxhZywKKwlPVVQgVUNIQVIgKnBNZXNzYWdlVG9NZSwKKwlPVVQgVUNIQVIgU3VwUmF0ZVtdLAorCU9VVCBVQ0hBUiAqcFN1cFJhdGVMZW4sCisJT1VUIFVDSEFSIEV4dFJhdGVbXSwKKwlPVVQgVUNIQVIgKnBFeHRSYXRlTGVuLAorCU9VVAlVQ0hBUiAqcENraXBGbGFnLAorCU9VVAlVQ0hBUiAqcEFpcm9uZXRDZWxsUG93ZXJMaW1pdCwKKwlPVVQgUEVEQ0FfUEFSTSAgICAgICBwRWRjYVBhcm0sCisJT1VUIFBRQlNTX0xPQURfUEFSTSAgcFFic3NMb2FkLAorCU9VVCBQUU9TX0NBUEFCSUxJVFlfUEFSTSBwUW9zQ2FwYWJpbGl0eSwKKwlPVVQgVUxPTkcgKnBSYWxpbmtJZSwKKwlPVVQgVUNIQVIJCSAqcEh0Q2FwYWJpbGl0eUxlbiwKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKwlPVVQgVUNIQVIJCSAqcFByZU5IdENhcGFiaWxpdHlMZW4sCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisJT1VUIEhUX0NBUEFCSUxJVFlfSUUgKnBIdENhcGFiaWxpdHksCisJT1VUIFVDSEFSCQkgKkFkZEh0SW5mb0xlbiwKKwlPVVQgQUREX0hUX0lORk9fSUUgKkFkZEh0SW5mbywKKwlPVVQgVUNIQVIgKk5ld0V4dENoYW5uZWwsCisJT1VUIFVTSE9SVCAqTGVuZ3RoVklFLAorCU9VVCBQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzIHBWSUUpOworCitCT09MRUFOIFBlZXJBZGRCQVJlcUFjdGlvblNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpwTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVDSEFSIHBBZGRyMik7CisKK0JPT0xFQU4gUGVlckFkZEJBUnNwQWN0aW9uU2FuaXR5KAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIFZPSUQgKnBNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuKTsKKworQk9PTEVBTiBQZWVyRGVsQkFBY3Rpb25TYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVUNIQVIgV2NpZCwKKyAgICBJTiBWT0lEICpwTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbik7CisKK0JPT0xFQU4gTWxtZUFzc29jUmVxU2FuaXR5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBWT0lEICpNc2csCisJSU4gIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVDSEFSIHBBcEFkZHIsCisJT1VUIFVTSE9SVCAqQ2FwYWJpbGl0eUluZm8sCisJT1VUIFVMT05HICpUaW1lb3V0LAorCU9VVCBVU0hPUlQgKkxpc3RlbkludHYpOworCitCT09MRUFOIE1sbWVBdXRoUmVxU2FuaXR5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBWT0lEICpNc2csCisJSU4gIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVDSEFSIHBBZGRyLAorCU9VVCBVTE9ORyAqVGltZW91dCwKKwlPVVQgVVNIT1JUICpBbGcpOworCitCT09MRUFOIE1sbWVTdGFydFJlcVNhbml0eSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVk9JRCAqTXNnLAorCUlOICBVTE9ORyBNc2dMZW4sCisJT1VUIENIQVIgU3NpZFtdLAorCU9VVCBVQ0hBUiAqU3NpZGxlbik7CisKK0JPT0xFQU4gUGVlckF1dGhTYW5pdHkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFZPSUQgKk1zZywKKwlJTiAgVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIsCisJT1VUIFVTSE9SVCAqQWxnLAorCU9VVCBVU0hPUlQgKlNlcSwKKwlPVVQgVVNIT1JUICpTdGF0dXMsCisJT1VUIENIQVIgQ2hsZ1RleHRbXSk7CisKK0JPT0xFQU4gUGVlckFzc29jUnNwU2FuaXR5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOIFZPSUQgKnBNc2csCisJSU4gIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVDSEFSIHBBZGRyMiwKKwlPVVQgVVNIT1JUICpwQ2FwYWJpbGl0eUluZm8sCisJT1VUIFVTSE9SVCAqcFN0YXR1cywKKwlPVVQgVVNIT1JUICpwQWlkLAorCU9VVCBVQ0hBUiBTdXBSYXRlW10sCisJT1VUIFVDSEFSICpwU3VwUmF0ZUxlbiwKKwlPVVQgVUNIQVIgRXh0UmF0ZVtdLAorCU9VVCBVQ0hBUiAqcEV4dFJhdGVMZW4sCisgICAgT1VUIEhUX0NBUEFCSUxJVFlfSUUJCSpwSHRDYXBhYmlsaXR5LAorICAgIE9VVCBBRERfSFRfSU5GT19JRQkJKnBBZGRIdEluZm8sCS8vIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRQorICAgIE9VVCBVQ0hBUgkJCSpwSHRDYXBhYmlsaXR5TGVuLAorICAgIE9VVCBVQ0hBUgkJCSpwQWRkSHRJbmZvTGVuLAorICAgIE9VVCBVQ0hBUgkJCSpwTmV3RXh0Q2hhbm5lbE9mZnNldCwKKwlPVVQgUEVEQ0FfUEFSTSBwRWRjYVBhcm0sCisJT1VUIFVDSEFSICpwQ2tpcEZsYWcpOworCitCT09MRUFOIFBlZXJEaXNhc3NvY1Nhbml0eSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVk9JRCAqTXNnLAorCUlOICBVTE9ORyBNc2dMZW4sCisJT1VUIFBVQ0hBUiBwQWRkcjIsCisJT1VUIFVTSE9SVCAqUmVhc29uKTsKKworQk9PTEVBTiBQZWVyV3BhTWVzc2FnZVNhbml0eSgKKyAgICBJTiAJUFJUTVBfQURBUFRFUiAJCXBBZCwKKyAgICBJTiAJUEVBUE9MX1BBQ0tFVCAJCXBNc2csCisgICAgSU4gCVVMT05HIAkJCQlNc2dMZW4sCisgICAgSU4gCVVDSEFSCQkJCU1zZ1R5cGUsCisgICAgSU4gCU1BQ19UQUJMRV9FTlRSWSAgCSpwRW50cnkpOworCitCT09MRUFOIFBlZXJEZWF1dGhTYW5pdHkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFZPSUQgKk1zZywKKwlJTiAgVUxPTkcgTXNnTGVuLAorCU9VVCBQVUNIQVIgcEFkZHIyLAorCU9VVCBVU0hPUlQgKlJlYXNvbik7CisKK0JPT0xFQU4gUGVlclByb2JlUmVxU2FuaXR5KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBWT0lEICpNc2csCisJSU4gIFVMT05HIE1zZ0xlbiwKKwlPVVQgUFVDSEFSIHBBZGRyMiwKKwlPVVQgQ0hBUiBTc2lkW10sCisJT1VUIFVDSEFSICpwU3NpZExlbik7CisKK0JPT0xFQU4gR2V0VGltQml0KAorCUlOICBDSEFSICpQdHIsCisJSU4gIFVTSE9SVCBBaWQsCisJT1VUIFVDSEFSICpUaW1MZW4sCisJT1VUIFVDSEFSICpCY2FzdEZsYWcsCisJT1VUIFVDSEFSICpEdGltQ291bnQsCisJT1VUIFVDSEFSICpEdGltUGVyaW9kLAorCU9VVCBVQ0hBUiAqTWVzc2FnZVRvTWUpOworCitVQ0hBUiBDaGFubmVsU2FuaXR5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSIGNoYW5uZWwpOworCitORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUgTmV0d29ya1R5cGVJblVzZVNhbml0eSgKKwlJTiBQQlNTX0VOVFJZIHBCc3MpOworCitCT09MRUFOIE1sbWVEZWxCQVJlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuKTsKKworQk9PTEVBTiBNbG1lQWRkQkFSZXFTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqTXNnLAorICAgIElOIFVMT05HIE1zZ0xlbiwKKyAgICBPVVQgUFVDSEFSIHBBZGRyMik7CisKK1VMT05HIE1ha2VPdXRnb2luZ0ZyYW1lKAorCU9VVCBDSEFSICpCdWZmZXIsCisJT1VUIFVMT05HICpMZW5ndGgsIC4uLik7CisKK1ZPSUQgIExmc3JJbml0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVTE9ORyBTZWVkKTsKKworVUNIQVIgUmFuZG9tQnl0ZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgQXNpY1VwZGF0ZUF1dG9GYWxsQmFja1RhYmxlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBUeFJhdGUpOworCitWT0lEICBNbG1lUGVyaW9kaWNFeGVjKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgTGlua0Rvd25FeGVjKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgTGlua1VwRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitWT0lEIFNUQU1sbWVQZXJpb2RpY0V4ZWMoCisJUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIE1sbWVBdXRvU2NhbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgTWxtZUF1dG9SZWNvbm5lY3RMYXN0U1NJRCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK0JPT0xFQU4gTWxtZVZhbGlkYXRlU1NJRCgKKwlJTiBQVUNIQVIgcFNzaWQsCisJSU4gVUNIQVIgIFNzaWRMZW4pOworCitWT0lEIE1sbWVDaGVja0ZvclJvYW1pbmcoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUxPTkcgICAgTm93MzIpOworCitWT0lEIE1sbWVDaGVja0ZvckZhc3RSb2FtaW5nKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVTE9ORyAgICAgICAgICAgTm93KTsKKworVk9JRCBNbG1lRHluYW1pY1R4UmF0ZVN3aXRjaGluZygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgTWxtZVNldFR4UmF0ZSgKKwlJTiBQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4gUE1BQ19UQUJMRV9FTlRSWQkJcEVudHJ5LAorCUlOIFBSVE1QX1RYX1JBVEVfU1dJVENICXBUeFJhdGUpOworCitWT0lEIE1sbWVTZWxlY3RUeFJhdGVUYWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4gUE1BQ19UQUJMRV9FTlRSWQkJcEVudHJ5LAorCUlOIFBVQ0hBUgkJCQkqcHBUYWJsZSwKKwlJTiBQVUNIQVIJCQkJcFRhYmxlU2l6ZSwKKwlJTiBQVUNIQVIJCQkJcEluaXRUeFJhdGVJZHgpOworCitWT0lEIE1sbWVDYWxjdWxhdGVDaGFubmVsUXVhbGl0eSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVTE9ORyBOb3cpOworCitWT0lEIE1sbWVDaGVja1BzbUNoYW5nZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVTE9ORyAgICBOb3czMik7CisKK1ZPSUQgTWxtZVNldFBzbUJpdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQgcHNtKTsKKworVk9JRCBNbG1lU2V0VHhQcmVhbWJsZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVU0hPUlQgVHhQcmVhbWJsZSk7CisKK1ZPSUQgVXBkYXRlQmFzaWNSYXRlQml0bWFwKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBNbG1lVXBkYXRlVHhSYXRlcygKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQsCisJSU4gCUJPT0xFQU4JCSAJYkxpbmtVcCwKKwlJTglVQ0hBUgkJCWFwaWR4KTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRCBNbG1lVXBkYXRlSHRUeFJhdGVzKAorCUlOIFBSVE1QX0FEQVBURVIgCQlwQWQsCisJSU4JVUNIQVIJCQkJYXBpZHgpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitWT0lEICAgIFJUTVBDaGVja1JhdGVzKAorCUlOICAgICAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiBPVVQgIFVDSEFSICAgICAgICAgICBTdXBSYXRlW10sCisJSU4gT1VUICBVQ0hBUiAgICAgICAgICAgKlN1cFJhdGVMZW4pOworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitCT09MRUFOIFJUTVBDaGVja0NoYW5uZWwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIJCUNlbnRyYWxDaGFubmVsLAorCUlOIFVDSEFSCQlDaGFubmVsKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworQk9PTEVBTiAJUlRNUENoZWNrSHQoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCQlVQ0hBUglXY2lkLAorCUlOIE9VVAlIVF9DQVBBQklMSVRZX0lFCQkJKnBIdENhcGFiaWxpdHksCisJSU4gT1VUCUFERF9IVF9JTkZPX0lFCQkJKnBBZGRIdEluZm8pOworCitWT0lEIFN0YVF1aWNrUmVzcG9uZUZvclJhdGVVcEV4ZWMoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBBc2ljQmJwVHVuaW5nMSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgQXNpY0JicFR1bmluZzIoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIFJUTVBVcGRhdGVNbG1lUmF0ZSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKK0NIQVIgUlRNUE1heFJzc2koCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gQ0hBUgkJCQlSc3NpMCwKKwlJTiBDSEFSCQkJCVJzc2kxLAorCUlOIENIQVIJCQkJUnNzaTIpOworCitWT0lEIEFzaWNTZXRSeEFudCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVQ0hBUgkJCUFudCk7CisKK1ZPSUQgQXNpY0V2YWx1YXRlUnhBbnQoCisJSU4gUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIEFzaWNSeEFudEV2YWxUaW1lb3V0KAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgQVBTRFBlcmlvZGljRXhlYygKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMiwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpOworCitCT09MRUFOIFJUTVBDaGVja0VudHJ5RW5hYmxlQXV0b1JhdGVTd2l0Y2goCisJSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisJSU4gUE1BQ19UQUJMRV9FTlRSWQlwRW50cnkpOworCitVQ0hBUiBSVE1QU3RhRml4ZWRUeE1vZGUoCisJSU4gUFJUTVBfQURBUFRFUiAgICBwQWQsCisJSU4gUE1BQ19UQUJMRV9FTlRSWQlwRW50cnkpOworCitWT0lEIFJUTVBVcGRhdGVMZWdhY3lUeFNldHRpbmcoCisJCVVDSEFSCQkJCWZpeGVkX3R4X21vZGUsCisJCVBNQUNfVEFCTEVfRU5UUlkJcEVudHJ5KTsKKworQk9PTEVBTiBSVE1QQXV0b1JhdGVTd2l0Y2hDaGVjaygKKwlJTiBQUlRNUF9BREFQVEVSICAgIHBBZCk7CisKK05ESVNfU1RBVFVTIE1sbWVJbml0KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBNbG1lSGFuZGxlcigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgTWxtZUhhbHQoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIE1sbWVSZXNldFJhbGlua0NvdW50ZXJzKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBCdWlsZENoYW5uZWxMaXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVUNIQVIgRmlyc3RDaGFubmVsKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVUNIQVIgTmV4dENoYW5uZWwoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSIGNoYW5uZWwpOworCitWT0lEIENoYW5nZVRvQ2VsbFBvd2VyTGltaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVUNIQVIgICAgICAgICBBaXJvbmV0Q2VsbFBvd2VyTGltaXQpOworCitWT0lEIFJhaXNlQ2xvY2soCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVJTlQzMiAqeCk7CisKK1ZPSUQgTG93ZXJDbG9jaygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUlOVDMyICp4KTsKKworVVNIT1JUIFNoaWZ0SW5CaXRzKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworVk9JRCBTaGlmdE91dEJpdHMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVTSE9SVCBkYXRhLAorCUlOICBVU0hPUlQgY291bnQpOworCitWT0lEIEVFcHJvbUNsZWFudXAoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEVXRFMoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIEVXRU4oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitVU0hPUlQgUlRNUF9FRVBST01fUkVBRDE2KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVU0hPUlQgT2Zmc2V0KTsKKworVk9JRCBSVE1QX0VFUFJPTV9XUklURTE2KAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVU0hPUlQgT2Zmc2V0LAorCUlOICBVU0hPUlQgRGF0YSk7CisKKy8vCisvLyBQcm90b3R5cGVzIG9mIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4gcnRtcF90a2lwLmMKKy8vCitWT0lEICAgIFJUTVBJbml0VGtpcEVuZ2luZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBUS2V5LAorCUlOICBVQ0hBUiAgICAgICAgICAgS2V5SWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwVEEsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwTUlDS2V5LAorCUlOICBQVUNIQVIgICAgICAgICAgcFRTQywKKwlPVVQgUFVMT05HICAgICAgICAgIHBJVjE2LAorCU9VVCBQVUxPTkcgICAgICAgICAgcElWMzIpOworCitWT0lEICAgIFJUTVBJbml0TUlDRW5naW5lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcEtleSwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEQSwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBTQSwKKwlJTiAgVUNIQVIgICAgICAgICAgIFVzZXJQcmlvcml0eSwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBNSUNLZXkpOworCitCT09MRUFOIFJUTVBUa2lwQ29tcGFyZU1JQ1ZhbHVlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcFNyYywKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEQSwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBTQSwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBNSUNLZXksCisJSU4JVUNIQVIJCQlVc2VyUHJpb3JpdHksCisJSU4gIFVJTlQgICAgICAgICAgICBMZW4pOworCitWT0lEICAgIFJUTVBDYWxjdWxhdGVNSUNWYWx1ZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUE5ESVNfUEFDS0VUICAgIHBQYWNrZXQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRW5jYXAsCisJSU4gIFBDSVBIRVJfS0VZICAgICBwS2V5LAorCUlOCVVDSEFSCQkJYXBpZHgpOworCitCT09MRUFOIFJUTVBUa2lwQ29tcGFyZU1JQ1ZhbHVlV2l0aExMQygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBMTEMsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwU3JjLAorCUlOICBQVUNIQVIgICAgICAgICAgcERBLAorCUlOICBQVUNIQVIgICAgICAgICAgcFNBLAorCUlOICBQVUNIQVIgICAgICAgICAgcE1JQ0tleSwKKwlJTiAgVUlOVCAgICAgICAgICAgIExlbik7CisKK1ZPSUQgICAgUlRNUFRraXBBcHBlbmRCeXRlKAorCUlOICBQVEtJUF9LRVlfSU5GTyAgcFRraXAsCisJSU4gIFVDSEFSICAgICAgICAgICB1Q2hhcik7CisKK1ZPSUQgICAgUlRNUFRraXBBcHBlbmQoCisJSU4gIFBUS0lQX0tFWV9JTkZPICBwVGtpcCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBTcmMsCisJSU4gIFVJTlQgICAgICAgICAgICBuQnl0ZXMpOworCitWT0lEICAgIFJUTVBUa2lwR2V0TUlDKAorCUlOICBQVEtJUF9LRVlfSU5GTyAgcFRraXApOworCitCT09MRUFOIFJUTVBTb2Z0RGVjcnlwdFRLSVAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSCXBEYXRhLAorCUlOIFVMT05HCURhdGFCeXRlQ250LAorCUlOIFVDSEFSICAgIFVzZXJQcmlvcml0eSwKKwlJTiBQQ0lQSEVSX0tFWQlwV3BhS2V5KTsKKworQk9PTEVBTiBSVE1QU29mdERlY3J5cHRBRVMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSCXBEYXRhLAorCUlOIFVMT05HCURhdGFCeXRlQ250LAorCUlOIFBDSVBIRVJfS0VZCXBXcGFLZXkpOworCisvLworLy8gUHJvdG90eXBlcyBvZiBmdW5jdGlvbiBkZWZpbml0aW9uIGluIGNtbV9pbmZvLmMKKy8vCitORElTX1NUQVRVUyBSVE1QV1BBUmVtb3ZlS2V5UHJvYygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFZPSUQgICAgICAgICAgIHBCdWYpOworCitWT0lEICAgIFJUTVBXUEFSZW1vdmVBbGxLZXlzKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkKTsKKworQk9PTEVBTiBSVE1QQ2hlY2tTdHJQcmludEFibGUoCisgICAgSU4gIENIQVIgKnBJblB1dFN0ciwKKyAgICBJTiAgVUNIQVIgc3RyTGVuKTsKKworVk9JRCAgICBSVE1QU2V0UGh5TW9kZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUxPTkcgcGh5bW9kZSk7CisKK1ZPSUQJUlRNUFVwZGF0ZUhUSUUoCisJSU4JUlRfSFRfQ0FQQUJJTElUWQkqcFJ0SHQsCisJSU4JCVVDSEFSCQkJCSpwTWNzU2V0LAorCU9VVAkJSFRfQ0FQQUJJTElUWV9JRSAqcEh0Q2FwYWJpbGl0eSwKKwlPVVQJCUFERF9IVF9JTkZPX0lFCQkqcEFkZEh0SW5mbyk7CisKK1ZPSUQJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUJzc0lkeCwKKwlJTiAJVUNIQVIJCSAJS2V5SWR4LAorCUlOIAlVQ0hBUgkJIAlDaXBoZXJBbGcsCisJSU4gCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5KTsKKworQ0hBUiAqR2V0RW5jcnlwdFR5cGUoCisJQ0hBUiBlbmMpOworCitDSEFSICpHZXRBdXRoTW9kZSgKKwlDSEFSIGF1dGgpOworCitWT0lEIFJUTVBJb2N0bEdldFNpdGVTdXJ2ZXkoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSk7CisKK1ZPSUQgUlRNUElvY3RsR2V0TWFjVGFibGUoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gc3RydWN0IGl3cmVxICp3cnEpOworCitWT0lEIFJUTVBJbmRpY2F0ZVdQQTJTdGF0dXMoCisJSU4gIFBSVE1QX0FEQVBURVIgIHBBZGFwdGVyKTsKKworVk9JRAlSVE1QT1BNb2RlU3dpdGNoaW5nKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorVk9JRCAgICBSVE1QQWRkQlNTSURDaXBoZXIoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JVUNIQVIJQWlkLAorICAgIElOICBQTkRJU184MDJfMTFfS0VZICAgIHBLZXksCisgICAgSU4gIFVDSEFSICAgQ2lwaGVyQWxnKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorVk9JRAlSVE1QU2V0SFQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JT0lEX1NFVF9IVF9QSFlNT0RFICpwSFRQaHlNb2RlKTsKKworVk9JRAlSVE1QU2V0SW5kaXZpZHVhbEhUKAorCUlOCVBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTglVQ0hBUgkJCQlhcGlkeCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK1ZPSUQgUlRNUFNlbmRXaXJlbGVzc0V2ZW50KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCUV2ZW50X2ZsYWcsCisJSU4JUFVDSEFSIAkJCXBBZGRyLAorCUlOICBVQ0hBUgkJCUJzc0lkeCwKKwlJTglDSEFSCQkJUnNzaSk7CisKK1ZPSUQJTklDVXBkYXRlQ250bENvdW50ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBIRUFERVJfODAyXzExCXBIZWFkZXIsCisJSU4gICAgVUNIQVIJCQlTdWJUeXBlLAorCUlOCVBSWFdJX1NUUlVDIAlwUnhXSSk7CisvLworLy8gcHJvdG90eXBlIGluIHdwYS5jCisvLworQk9PTEVBTiBXcGFNc2dUeXBlU3Vic3QoCisJSU4gIFVDSEFSICAgRUFQVHlwZSwKKwlPVVQgSU5UCQkqTXNnVHlwZSk7CisKK1ZPSUQgV3BhUHNrU3RhdGVNYWNoaW5lSW5pdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQsCisJSU4gIFNUQVRFX01BQ0hJTkUgICAgICAgKlMsCisJT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKTsKKworVk9JRCBXcGFFQVBPTEtleUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgICBXcGFQYWlyTXNnMUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgICBXcGFQYWlyTXNnM0FjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgICBXcGFHcm91cE1zZzFBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgICAgV3BhTWFjSGVhZGVySW5pdCgKKwlJTiAgICAgIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gT1VUICBQSEVBREVSXzgwMl8xMSAgcEhkcjgwMjExLAorCUlOICAgICAgVUNIQVIgICAgICAgICAgIHdlcCwKKwlJTiAgICAgIFBVQ0hBUiAgICAgICAgICBwQWRkcjEpOworCitWT0lEICAgIFdwYTJQYWlyTXNnMUFjdGlvbigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgICBXcGEyUGFpck1zZzNBY3Rpb24oCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK0JPT0xFQU4gUGFyc2VLZXlEYXRhKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQVUNIQVIgICAgICAgICAgcEtleURhdGEsCisgICAgSU4gIFVDSEFSICAgICAgICAgICBLZXlEYXRhTGVuLAorCUlOCVVDSEFSCQkJYlBhaXJld2lzZSk7CisKK1ZPSUQgICAgUlRNUFRvV2lyZWxlc3NTdGEoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwSGVhZGVyODAyXzMsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBIZHJMZW4sCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKyAgICBJTiAgVUlOVCAgICAgICAgICAgIERhdGFMZW4sCisgICAgSU4JQk9PTEVBTgkJCWlzNHdheUZyYW1lKTsKKworVk9JRCAgICBITUFDX1NIQTEoCisJSU4gIFVDSEFSICAgKnRleHQsCisJSU4gIFVJTlQgICAgdGV4dF9sZW4sCisJSU4gIFVDSEFSICAgKmtleSwKKwlJTiAgVUlOVCAgICBrZXlfbGVuLAorCUlOICBVQ0hBUiAgICpkaWdlc3QpOworCitWT0lEICAgIFBSRigKKwlJTiAgVUNIQVIgICAqa2V5LAorCUlOICBJTlQgICAgIGtleV9sZW4sCisJSU4gIFVDSEFSICAgKnByZWZpeCwKKwlJTiAgSU5UICAgICBwcmVmaXhfbGVuLAorCUlOICBVQ0hBUiAgICpkYXRhLAorCUlOICBJTlQgICAgIGRhdGFfbGVuLAorCU9VVCBVQ0hBUiAgICpvdXRwdXQsCisJSU4gIElOVCAgICAgbGVuKTsKKworVk9JRCAgICBDQ0tNUFJGKAorCUlOICBVQ0hBUiAgICprZXksCisJSU4gIElOVCAgICAga2V5X2xlbiwKKwlJTiAgVUNIQVIgICAqZGF0YSwKKwlJTiAgSU5UICAgICBkYXRhX2xlbiwKKwlPVVQgVUNIQVIgICAqb3V0cHV0LAorCUlOICBJTlQgICAgIGxlbik7CisKK1ZPSUQgV3BhQ291bnRQVEsoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgKlBNSywKKwlJTiAgVUNIQVIgICAqQU5vbmNlLAorCUlOICBVQ0hBUiAgICpBQSwKKwlJTiAgVUNIQVIgICAqU05vbmNlLAorCUlOICBVQ0hBUiAgICpTQSwKKwlPVVQgVUNIQVIgICAqb3V0cHV0LAorCUlOICBVSU5UICAgIGxlbik7CisKK1ZPSUQgICAgR2VuUmFuZG9tKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOCVVDSEFSCQkJKm1hY0FkZHIsCisJT1VUCVVDSEFSCQkJKnJhbmRvbSk7CisKKy8vCisvLyBwcm90b3R5cGUgaW4gYWlyb25ldC5jCisvLworVk9JRCAgICBBaXJvbmV0U3RhdGVNYWNoaW5lSW5pdCgKKwlJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQsCisJSU4gIFNUQVRFX01BQ0hJTkUgICAgICAgKlMsCisJT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyAgVHJhbnNbXSk7CisKK1ZPSUQgICAgQWlyb25ldE1zZ0FjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgICBBaXJvbmV0UmVxdWVzdEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCAgICBDaGFubmVsTG9hZFJlcXVlc3RBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgICAgICAgICBJbmRleCk7CisKK1ZPSUQgICAgTm9pc2VIaXN0UmVxdWVzdEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUNIQVIgICAgICAgICAgIEluZGV4KTsKKworVk9JRCAgICBCZWFjb25SZXF1ZXN0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUiAgICAgICAgICAgSW5kZXgpOworCitWT0lEICAgIEFpcm9uZXRSZXBvcnRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgICAgQ2hhbm5lbExvYWRSZXBvcnRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVDSEFSICAgICAgICAgICBJbmRleCk7CisKK1ZPSUQgICAgTm9pc2VIaXN0UmVwb3J0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUiAgICAgICAgICAgSW5kZXgpOworCitWT0lEICAgIEFpcm9uZXRGaW5hbFJlcG9ydEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgICAgQmVhY29uUmVwb3J0QWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBVQ0hBUiAgICAgICAgICAgSW5kZXgpOworCitWT0lEICAgIEFpcm9uZXRBZGRCZWFjb25SZXBvcnQoCisJSU4gIFBSVE1QX0FEQVBURVIgICAgICAgcEFkLAorCUlOICBVTE9ORyAgICAgICAgICAgICAgIEluZGV4LAorCUlOICBQTUxNRV9RVUVVRV9FTEVNICAgIHBFbGVtKTsKKworVk9JRCAgICBBaXJvbmV0Q3JlYXRlQmVhY29uUmVwb3J0RnJvbUJzc1RhYmxlKAorCUlOICBQUlRNUF9BREFQVEVSICAgICAgIHBBZCk7CisKK1ZPSUQgICAgREJHUFJJTlRfVFhfUklORygKKwlJTiBQUlRNUF9BREFQVEVSICBwQWQsCisJSU4gVUNIQVIgICAgICAgICAgUXVlSWR4KTsKKworVk9JRCBEQkdQUklOVF9SWF9SSU5HKAorCUlOIFBSVE1QX0FEQVBURVIgIHBBZCk7CisKK0NIQVIgICAgQ29udmVydFRvUnNzaSgKKwlJTiBQUlRNUF9BREFQVEVSICBwQWQsCisJSU4gQ0hBUgkJCQlSc3NpLAorCUlOIFVDSEFSICAgIFJzc2lOdW1iZXIpOworCisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCitWT0lEIEJ1aWxkRWZmZWN0ZWRDaGFubmVsTGlzdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworCisKK1ZPSUQgQVBBc2ljRXZhbHVhdGVSeEFudCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCk7CisKKworVk9JRCBBUEFzaWNSeEFudEV2YWxUaW1lb3V0KAorCUlOIFBSVE1QX0FEQVBURVIJcEFkKTsKKworLy8KKy8vIGZ1bmN0aW9uIHByb3RvdHlwZSBpbiBjbW1fd3BhLmMKKy8vCitCT09MRUFOIFJUTVBDaGVja1dQQWZyYW1lKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBNQUNfVEFCTEVfRU5UUlkJcEVudHJ5LAorCUlOIFBVQ0hBUiAJCQlwRGF0YSwKKwlJTiBVTE9ORyAJCQlEYXRhQnl0ZUNvdW50LAorCUlOIFVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCitWT0lEIEFFU19HVEtfS0VZX1VOV1JBUCgKKwlJTiAgVUNIQVIgICAqa2V5LAorCU9VVCBVQ0hBUiAgICpwbGFpbnRleHQsCisJSU4JVUNIQVIJY19sZW4sCisJSU4gIFVDSEFSICAgKmNpcGhlcnRleHQpOworCitCT09MRUFOIFJUTVBDaGVja1JTTklFKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisJSU4gIFVDSEFSICAgICAgICAgICBEYXRhTGVuLAorCUlOICBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSwKKwlPVVQJVUNIQVIJCQkqT2Zmc2V0KTsKKworQk9PTEVBTiBSVE1QUGFyc2VFYXBvbEtleURhdGEoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwS2V5RGF0YSwKKwlJTiAgVUNIQVIgICAgICAgICAgIEtleURhdGFMZW4sCisJSU4JVUNIQVIJCQlHcm91cEtleUluZGV4LAorCUlOCVVDSEFSCQkJTXNnVHlwZSwKKwlJTglCT09MRUFOCQkJYldQQTIsCisJSU4gIE1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5KTsKKworVk9JRAlDb25zdHJ1Y3RFYXBvbE1zZygKKwlJTiAJUFJUTVBfQURBUFRFUiAgICAJcEFkLAorICAgIElOIAlVQ0hBUgkJCQlQZWVyQXV0aE1vZGUsCisgICAgSU4gCVVDSEFSCQkJCVBlZXJXZXBTdGF0dXMsCisgICAgSU4gCVVDSEFSCQkJCU15R3JvdXBLZXlXZXBTdGF0dXMsCisgICAgSU4gCVVDSEFSCQkJCU1zZ1R5cGUsCisgICAgSU4JVUNIQVIJCQkJRGVmYXVsdEtleUlkeCwKKyAgICBJTiAJVUNIQVIJCQkJKlJlcGxheUNvdW50ZXIsCisJSU4gCVVDSEFSCQkJCSpLZXlOb25jZSwKKwlJTglVQ0hBUgkJCQkqVHhSU0MsCisJSU4JVUNIQVIJCQkJKlBUSywKKwlJTglVQ0hBUgkJCQkqR1RLLAorCUlOCVVDSEFSCQkJCSpSU05JRSwKKwlJTglVQ0hBUgkJCQlSU05JRV9MZW4sCisgICAgT1VUIFBFQVBPTF9QQUNLRVQgICAgICAgcE1zZyk7CisKK1ZPSUQJQ2FsY3VsYXRlTUlDKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJUGVlcldlcFN0YXR1cywKKwlJTglVQ0hBUgkJCSpQVEssCisJT1VUIFBFQVBPTF9QQUNLRVQgICBwTXNnKTsKKworTkRJU19TVEFUVVMJUlRNUFNvZnREZWNyeXB0QnJvYWRDYXN0RGF0YSgKKwlJTglQUlRNUF9BREFQVEVSCQkJCQlwQWQsCisJSU4JUlhfQkxLCQkJCQkJCSpwUnhCbGssCisJSU4gIE5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTIAlHcm91cENpcGhlciwKKwlJTiAgUENJUEhFUl9LRVkJCQkJCQlwU2hhcmRfa2V5KTsKKworVk9JRAlDb25zdHJ1Y3RFYXBvbEtleURhdGEoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlQZWVyQXV0aE1vZGUsCisJSU4JVUNIQVIJCQlQZWVyV2VwU3RhdHVzLAorCUlOCVVDSEFSCQkJR3JvdXBLZXlXZXBTdGF0dXMsCisJSU4gCVVDSEFSCQkJTXNnVHlwZSwKKwlJTglVQ0hBUgkJCURlZmF1bHRLZXlJZHgsCisJSU4JQk9PTEVBTgkJCWJXUEEyQ2FwYWJsZSwKKwlJTglVQ0hBUgkJCSpQVEssCisJSU4JVUNIQVIJCQkqR1RLLAorCUlOCVVDSEFSCQkJKlJTTklFLAorCUlOCVVDSEFSCQkJUlNOSUVfTEVOLAorCU9VVCBQRUFQT0xfUEFDS0VUICAgcE1zZyk7CisKK1ZPSUQgUlRNUE1ha2VSU05JRSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVUlOVCAgICAgICAgICAgIEF1dGhNb2RlLAorCUlOICBVSU5UICAgICAgICAgICAgV2VwU3RhdHVzLAorCUlOCVVDSEFSCQkJYXBpZHgpOworCisvLworLy8gZnVuY3Rpb24gcHJvdG90eXBlIGluIGFwX3dwYS5jCisvLworCitCT09MRUFOIEFQV3BhTXNnVHlwZVN1YnN0KAorCUlOIFVDSEFSICAgIEVBUFR5cGUsCisJT1VUIElOVCAqTXNnVHlwZSkgOworCitNQUNfVEFCTEVfRU5UUlkgKlBBQ0lucXVpcnkoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFVMT05HICAgICAgICAgICBXY2lkKTsKKworQk9PTEVBTiBSVE1QQ2hlY2tNY2FzdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQRUlEX1NUUlVDVCAgICAgIGVpZF9wdHIsCisJSU4gTUFDX1RBQkxFX0VOVFJZICAqcEVudHJ5KTsKKworQk9PTEVBTiBSVE1QQ2hlY2tVY2FzdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQRUlEX1NUUlVDVCAgICAgIGVpZF9wdHIsCisJSU4gTUFDX1RBQkxFX0VOVFJZICAqcEVudHJ5KTsKKworQk9PTEVBTiBSVE1QQ2hlY2tBVVRIKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBFSURfU1RSVUNUICAgICAgZWlkX3B0ciwKKwlJTiBNQUNfVEFCTEVfRU5UUlkgICpwRW50cnkpOworCitWT0lEIFdQQVN0YXJ0NFdheUhTKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSwKKwlJTglVTE9ORwkJCVRpbWVJbnRlcnZhbCk7CisKK1ZPSUQgV1BBU3RhcnQyV2F5R3JvdXBIUygKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUFDX1RBQkxFX0VOVFJZICpwRW50cnkpOworCitWT0lEIEFQV3BhRUFQUGFja2V0QWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBXcGFFQVBPTFN0YXJ0QWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQVBXcGFFQVBPTExvZ29mZkFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCitWT0lEIEFQV3BhRUFQT0xLZXlBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBBUFdwYUVBUE9MQVNGQWxlcnRBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gICpFbGVtKTsKKworVk9JRCBIYW5kbGVDb3VudGVyTWVhc3VyZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNQUNfVEFCTEVfRU5UUlkgICpwRW50cnkpOworCitWT0lEIFBlZXJQYWlyTXNnMkFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNQUNfVEFCTEVfRU5UUlkgICpwRW50cnksCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKTsKKworVk9JRCBQZWVyUGFpck1zZzRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUFDX1RBQkxFX0VOVFJZICAqcEVudHJ5LAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSk7CisKK1ZPSUQgQ01UaW1lckV4ZWMoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBXUEFSZXRyeUV4ZWMoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKTsKKworVk9JRCBFbnF1ZXVlU3RhcnRGb3JQU0tFeGVjKAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKyAgICBJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorICAgIElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgUlRNUEhhbmRsZVNUQUtleSgKKyAgICBJTiBQUlRNUF9BREFQVEVSICAgIHBBZGFwdGVyLAorICAgIElOIE1BQ19UQUJMRV9FTlRSWSAgKnBFbnRyeSwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gICpFbGVtKTsKKworVk9JRCBQZWVyR3JvdXBNc2cyQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTiAgUE1BQ19UQUJMRV9FTlRSWSBwRW50cnksCisJSU4gIFZPSUQgICAgICAgICAgICAgKk1zZywKKwlJTiAgVUlOVCAgICAgICAgICAgICBNc2dMZW4pOworCitWT0lEIFBhaXJEaXNBc3NvY0FjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgICBwQWQsCisJSU4gIFBNQUNfVEFCTEVfRU5UUlkgcEVudHJ5LAorCUlOICBVU0hPUlQgICAgICAgICAgIFJlYXNvbik7CisKK1ZPSUQgTWxtZURlQXV0aEFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgICBwQWQsCisJSU4gIFBNQUNfVEFCTEVfRU5UUlkgcEVudHJ5LAorCUlOICBVU0hPUlQgICAgICAgICAgIFJlYXNvbik7CisKK1ZPSUQgR1JFS0VZUGVyaW9kaWNFeGVjKAorCUlOICBQVk9JRCAgIFN5c3RlbVNwZWNpZmljMSwKKwlJTiAgUFZPSUQgICBGdW5jdGlvbkNvbnRleHQsCisJSU4gIFBWT0lEICAgU3lzdGVtU3BlY2lmaWMyLAorCUlOICBQVk9JRCAgIFN5c3RlbVNwZWNpZmljMyk7CisKK1ZPSUQgQ291bnRHVEsoCisJSU4gIFVDSEFSICAgKlBNSywKKwlJTiAgVUNIQVIgICAqR05vbmNlLAorCUlOICBVQ0hBUiAgICpBQSwKKwlPVVQgVUNIQVIgICAqb3V0cHV0LAorCUlOICBVSU5UICAgIGxlbik7CisKK1ZPSUQgICAgR2V0U21hbGwoCisJSU4gIFBWT0lEICAgcFNyYzEsCisJSU4gIFBWT0lEICAgcFNyYzIsCisJT1VUIFBVQ0hBUiAgb3V0LAorCUlOICBVTE9ORyAgIExlbmd0aCk7CisKK1ZPSUQgICAgR2V0TGFyZ2UoCisJSU4gIFBWT0lEICAgcFNyYzEsCisJSU4gIFBWT0lEICAgcFNyYzIsCisJT1VUIFBVQ0hBUiAgb3V0LAorCUlOICBVTE9ORyAgIExlbmd0aCk7CisKK1ZPSUQgQVBHZW5SYW5kb20oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJT1VUIFVDSEFSICAgICAgICpyYW5kb20pOworCitWT0lEIEFFU19HVEtfS0VZX1dSQVAoCisJSU4gVUNIQVIgKmtleSwKKwlJTiBVQ0hBUiAqcGxhaW50ZXh0LAorCUlOIFVDSEFSIHBfbGVuLAorCU9VVCBVQ0hBUiAqY2lwaGVydGV4dCk7CisKK1ZPSUQgICAgV3BhU2VuZCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgcFBhY2tldCwKKyAgICBJTiAgVUxPTkcgICAgICAgICAgIExlbik7CisKK1ZPSUQgICAgQVBUb1dpcmVsZXNzU3RhKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBIZWFkZXI4MDJfMywKKwlJTiAgVUlOVCAgICAgICAgICAgIEhkckxlbiwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEYXRhLAorCUlOICBVSU5UICAgICAgICAgICAgRGF0YUxlbiwKKyAgICBJTglCT09MRUFOCQkJYkNsZWFyRnJhbWUpOworCitWT0lEIFJUTVBBZGRQTUtJRENhY2hlKAorCUlOICBQUlRNUF9BREFQVEVSICAgCQlwQWQsCisJSU4JSU5UCQkJCQkJYXBpZHgsCisJSU4JUFVDSEFSCQkJCXBBZGRyLAorCUlOCVVDSEFSCQkJCQkqUE1LSUQsCisJSU4JVUNIQVIJCQkJCSpQTUspOworCitJTlQgUlRNUFNlYXJjaFBNS0lEQ2FjaGUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4JSU5UCQkJCWFwaWR4LAorCUlOCVBVQ0hBUgkJcEFkZHIpOworCitWT0lEIFJUTVBEZWxldGVQTUtJRENhY2hlKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOCUlOVAkJCQlhcGlkeCwKKwlJTiAgSU5UCQkJCWlkeCk7CisKK1ZPSUQgUlRNUE1haW50YWluUE1LSURDYWNoZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQJUlRNUFNlbmRUcmlnZ2VyRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFZPSUQJCQlwQnVmZmVyLAorCUlOCVVMT05HCQkJTGVuZ3RoLAorCUlOICBVQ0hBUiAgICAgICAgICAgVHhSYXRlLAorCUlOCUJPT0xFQU4JCQliUW9zTnVsbCk7CisKKyNpZmRlZiBSVDMweHgKK1ZPSUQgUlRNUEZpbHRlckNhbGlicmF0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKyNlbmRpZiAvLyBSVDMweHggLy8KKworCisvL3R5cGVkZWYgdm9pZCAoKlRJTUVSX0ZVTkNUSU9OKSh1bnNpZ25lZCBsb25nKTsKKworCisvKiB0aW1lb3V0IC0tIG1zICovCitWT0lEIFJUTVBfU2V0UGVyaW9kaWNUaW1lcigKKwlJTglORElTX01JTklQT1JUX1RJTUVSICpwVGltZXIsCisJSU4JdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKKworVk9JRCBSVE1QX09TX0luaXRfVGltZXIoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JTkRJU19NSU5JUE9SVF9USU1FUiAqcFRpbWVyLAorCUlOCVRJTUVSX0ZVTkNUSU9OIGZ1bmN0aW9uLAorCUlOCVBWT0lEIGRhdGEpOworCitWT0lEIFJUTVBfT1NfQWRkX1RpbWVyKAorCUlOCU5ESVNfTUlOSVBPUlRfVElNRVIJKnBUaW1lciwKKwlJTgl1bnNpZ25lZCBsb25nIHRpbWVvdXQpOworCitWT0lEIFJUTVBfT1NfTW9kX1RpbWVyKAorCUlOCU5ESVNfTUlOSVBPUlRfVElNRVIJKnBUaW1lciwKKwlJTgl1bnNpZ25lZCBsb25nIHRpbWVvdXQpOworCisKK1ZPSUQgUlRNUF9PU19EZWxfVGltZXIoCisJSU4JTkRJU19NSU5JUE9SVF9USU1FUgkqcFRpbWVyLAorCU9VVAlCT09MRUFOCQkJCSAqcENhbmNlbGxlZCk7CisKKworVk9JRCBSVE1QX09TX1JlbGVhc2VfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVBRVUVVRV9FTlRSWSAgcEVudHJ5KTsKKworVk9JRCBSVE1QdXNlY0RlbGF5KAorCUlOCVVMT05HCXVzZWMpOworCitORElTX1NUQVRVUyBvc19hbGxvY19tZW0oCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJT1VUCVBVQ0hBUiAqbWVtLAorCUlOCVVMT05HICBzaXplKTsKKworTkRJU19TVEFUVVMgb3NfZnJlZV9tZW0oCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JUFVDSEFSIG1lbSk7CisKKwordm9pZCBSVE1QX0FsbG9jYXRlU2hhcmVkTWVtb3J5KAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVVMT05HCUxlbmd0aCwKKwlJTglCT09MRUFOCUNhY2hlZCwKKwlPVVQJUFZPSUQJKlZpcnR1YWxBZGRyZXNzLAorCU9VVAlQTkRJU19QSFlTSUNBTF9BRERSRVNTIFBoeXNpY2FsQWRkcmVzcyk7CisKK1ZPSUQgUlRNUEZyZWVUeFJ4UmluZ01lbW9yeSgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK05ESVNfU1RBVFVTIEFkYXB0ZXJCbG9ja0FsbG9jYXRlTWVtb3J5KAorCUlOIFBWT0lECWhhbmRsZSwKKwlPVVQJUFZPSUQJKnBwQWQpOworCit2b2lkIFJUTVBfQWxsb2NhdGVUeERlc2NNZW1vcnkoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JVUlOVAlJbmRleCwKKwlJTglVTE9ORwlMZW5ndGgsCisJSU4JQk9PTEVBTglDYWNoZWQsCisJT1VUCVBWT0lECSpWaXJ0dWFsQWRkcmVzcywKKwlPVVQJUE5ESVNfUEhZU0lDQUxfQUREUkVTUyBQaHlzaWNhbEFkZHJlc3MpOworCit2b2lkIFJUTVBfQWxsb2NhdGVGaXJzdFR4QnVmZmVyKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVVJTlQJSW5kZXgsCisJSU4JVUxPTkcJTGVuZ3RoLAorCUlOCUJPT0xFQU4JQ2FjaGVkLAorCU9VVAlQVk9JRAkqVmlydHVhbEFkZHJlc3MsCisJT1VUCVBORElTX1BIWVNJQ0FMX0FERFJFU1MgUGh5c2ljYWxBZGRyZXNzKTsKKwordm9pZCBSVE1QX0FsbG9jYXRlTWdtdERlc2NNZW1vcnkoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JVUxPTkcJTGVuZ3RoLAorCUlOCUJPT0xFQU4JQ2FjaGVkLAorCU9VVAlQVk9JRAkqVmlydHVhbEFkZHJlc3MsCisJT1VUCVBORElTX1BIWVNJQ0FMX0FERFJFU1MgUGh5c2ljYWxBZGRyZXNzKTsKKwordm9pZCBSVE1QX0FsbG9jYXRlUnhEZXNjTWVtb3J5KAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCUlOCVVMT05HCUxlbmd0aCwKKwlJTglCT09MRUFOCUNhY2hlZCwKKwlPVVQJUFZPSUQJKlZpcnR1YWxBZGRyZXNzLAorCU9VVAlQTkRJU19QSFlTSUNBTF9BRERSRVNTIFBoeXNpY2FsQWRkcmVzcyk7CisKK1BORElTX1BBQ0tFVCBSVE1QX0FsbG9jYXRlUnhQYWNrZXRCdWZmZXIoCisJSU4JUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JVUxPTkcJTGVuZ3RoLAorCUlOCUJPT0xFQU4JQ2FjaGVkLAorCU9VVAlQVk9JRAkqVmlydHVhbEFkZHJlc3MsCisJT1VUCVBORElTX1BIWVNJQ0FMX0FERFJFU1MgUGh5c2ljYWxBZGRyZXNzKTsKKworUE5ESVNfUEFDS0VUIFJUTVBfQWxsb2NhdGVUeFBhY2tldEJ1ZmZlcigKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVTE9ORwlMZW5ndGgsCisJSU4JQk9PTEVBTglDYWNoZWQsCisJT1VUCVBWT0lECSpWaXJ0dWFsQWRkcmVzcyk7CisKK1BORElTX1BBQ0tFVCBSVE1QX0FsbG9jYXRlRnJhZ1BhY2tldEJ1ZmZlcigKKwlJTglQUlRNUF9BREFQVEVSIHBBZCwKKwlJTglVTE9ORwlMZW5ndGgpOworCit2b2lkIFJUTVBfUXVlcnlQYWNrZXRJbmZvKAorCUlOICBQTkRJU19QQUNLRVQgcFBhY2tldCwKKwlPVVQgUEFDS0VUX0lORk8gICpwUGFja2V0SW5mbywKKwlPVVQgUFVDSEFSCQkgKnBTcmNCdWZWQSwKKwlPVVQJVUlOVAkJICpwU3JjQnVmTGVuKTsKKwordm9pZCBSVE1QX1F1ZXJ5TmV4dFBhY2tldEluZm8oCisJSU4gIFBORElTX1BBQ0tFVCAqcHBQYWNrZXQsCisJT1VUIFBBQ0tFVF9JTkZPICAqcFBhY2tldEluZm8sCisJT1VUIFBVQ0hBUgkJICpwU3JjQnVmVkEsCisJT1VUCVVJTlQJCSAqcFNyY0J1Zkxlbik7CisKKworQk9PTEVBTiBSVE1QX0ZpbGxUeEJsa0luZm8oCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gVFhfQkxLICpwVHhCbGspOworCisKK1BSVE1QX1NDQVRURVJfR0FUSEVSX0xJU1QKK3J0X2dldF9zZ19saXN0X2Zyb21fcGFja2V0KFBORElTX1BBQ0tFVCBwUGFja2V0LCBSVE1QX1NDQVRURVJfR0FUSEVSX0xJU1QgKnNnKTsKKworCisgdm9pZCBhbm5vdW5jZV84MDJfM19wYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpOworCisKK1VJTlQgQkFfUmVvcmRlcl9BTVNEVV9Bbm5ub3VuY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQpOworCisKK1VJTlQgSGFuZGxlX0FNU0RVX1BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplLAorCUlOICBVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworCit2b2lkIGNvbnZlcnRfODAyXzExX3RvXzgwMl8zX3BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCwKKwlJTglQVUNIQVIJCQlwODAyM2hkciwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplLAorCUlOICBVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworCitQTkVUX0RFViBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKKworUE5ESVNfUEFDS0VUIGR1cGxpY2F0ZV9wa3QoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJcEhlYWRlcjgwMl8zLAorICAgIElOICBVSU5UICAgICAgICAgICAgSGRyTGVuLAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVMT05HCQkJRGF0YVNpemUsCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKKworUE5ESVNfUEFDS0VUIGR1cGxpY2F0ZV9wa3Rfd2l0aF9US0lQX01JQygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcE9sZFBrdCk7CisKK1BORElTX1BBQ0tFVCBkdXBsaWNhdGVfcGt0X3dpdGhfVkxBTigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwSGVhZGVyODAyXzMsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBIZHJMZW4sCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEYXRhU2l6ZSwKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworUE5ESVNfUEFDS0VUIGR1cGxpY2F0ZV9wa3Rfd2l0aF9XUEkoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQsCisJSU4JVUlOVDMyCQkJZXh0X2hlYWRfbGVuLAorCUlOCVVJTlQzMgkJCWV4dF90YWlsX2xlbik7CisKK1VDSEFSIFZMQU5fODAyM19IZWFkZXJfQ29weSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwSGVhZGVyODAyXzMsCisJSU4JVUlOVCAgICAgICAgICAgIEhkckxlbiwKKwlPVVQgUFVDSEFSCQkJcERhdGEsCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK3ZvaWQgYmFfZmx1c2hfcmVvcmRlcmluZ190aW1lb3V0X21wZHVzKAorCUlOIFBSVE1QX0FEQVBURVIJcEFkLAorCUlOIFBCQV9SRUNfRU5UUlkJcEJBRW50cnksCisJSU4gVUxPTkcJCQlOb3czMik7CisKKworVk9JRCBCQU9yaVNlc3Npb25TZXRVcCgKKwkJCUlOIFBSVE1QX0FEQVBURVIgICAgcEFkLAorCQkJSU4gTUFDX1RBQkxFX0VOVFJZCSpwRW50cnksCisJCQlJTiBVQ0hBUgkJCVRJRCwKKwkJCUlOIFVTSE9SVAkJCVRpbWVPdXQsCisJCQlJTiBVTE9ORwkJCURlbGF5VGltZSwKKwkJCUlOIEJPT0xFQU4JCWlzRm9yY2VkKTsKKworVk9JRCBCQVNlc3Npb25UZWFyRG93bkFMTCgKKwlJTiBPVVQJUFJUTVBfQURBUFRFUiBwQWQsCisJSU4JCVVDSEFSIFdjaWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitCT09MRUFOIE9TX05lZWRfQ2xvbmVfUGFja2V0KHZvaWQpOworCisKK1ZPSUQgYnVpbGRfdHhfcGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVBVQ0hBUglwRnJhbWUsCisJSU4JVUxPTkcJRnJhbWVMZW4pOworCisKK1ZPSUQgQkFPcmlTZXNzaW9uVGVhckRvd24oCisJSU4gT1VUCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCQlVQ0hBUgkJCVdjaWQsCisJSU4JCVVDSEFSCQkJVElELAorCUlOCQlCT09MRUFOCQkJYlBhc3NpdmUsCisJSU4JCUJPT0xFQU4JCQliRm9yY2VTZW5kKTsKKworVk9JRCBCQVJlY1Nlc3Npb25UZWFyRG93bigKKwlJTiBPVVQJUFJUTVBfQURBUFRFUglwQWQsCisJSU4JCVVDSEFSCQkJV2NpZCwKKwlJTgkJVUNIQVIJCQlUSUQsCisJSU4JCUJPT0xFQU4JCQliUGFzc2l2ZSk7CisKK0JPT0xFQU4gYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9pbml0KFBSVE1QX0FEQVBURVIgcEFkLCBpbnQgbnVtKTsKK3ZvaWQgYmFfcmVvcmRlcmluZ19yZXNvdXJjZV9yZWxlYXNlKFBSVE1QX0FEQVBURVIgcEFkKTsKKworVUxPTkcgQXV0b0NoQnNzSW5zZXJ0RW50cnkoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBCc3NpZCwKKwlJTiBDSEFSIFNzaWRbXSwKKwlJTiBVQ0hBUiBTc2lkTGVuLAorCUlOIFVDSEFSIENoYW5uZWxObywKKwlJTiBDSEFSIFJzc2kpOworCit2b2lkIEF1dG9DaEJzc1RhYmxlSW5pdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK3ZvaWQgQ2hhbm5lbEluZm9Jbml0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKwordm9pZCBBdXRvQ2hCc3NUYWJsZURlc3Ryb3koCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCit2b2lkIENoYW5uZWxJbmZvRGVzdHJveSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1VDSEFSIE5ld19BcEF1dG9TZWxlY3RDaGFubmVsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworCisjaWZkZWYgTklOVEVORE9fQVAKK1ZPSUQJSW5pdE5JTlRFTkRPX1RBQkxFKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKworVUNIQVIJQ2hlY2tOSU5URU5ET19UQUJMRSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlQQ0hBUiBwRFNfU3NpZCwKKwlVQ0hBUiBEU19Tc2lkTGVuLAorCVBVQ0hBUiBwRFNfQWRkcik7CisKK1VDSEFSCURlbE5JTlRFTkRPX0VOVFJZKAorCUlOCVBSVE1QX0FEQVBURVIgcEFkLAorCVVDSEFSICogcERTX0FkZHIpOworCitWT0lECVJUTVBJb2N0bE5pbnRlbmRvQ2FwYWJsZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSk7CisKK1ZPSUQJUlRNUElvY3RsTmludGVuZG9HZXRUYWJsZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSk7CisKK1ZPSUQJUlRNUElvY3RsTmludGVuZG9TZXRUYWJsZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSk7CisKKyNlbmRpZiAvLyBOSU5URU5ET19BUCAvLworCitCT09MRUFOIHJ0c3RybWFjdG9oZXgoCisJSU4gY2hhciAqczEsCisJSU4gY2hhciAqczIpOworCitCT09MRUFOIHJ0c3RyY2FzZWNtcCgKKwlJTiBjaGFyICpzMSwKKwlJTiBjaGFyICpzMik7CisKK2NoYXIgKnJ0c3Ryc3RydW5jYXNlY21wKAorCUlOIGNoYXIgKnMxLAorCUlOIGNoYXIgKnMyKTsKKworY2hhciAgICAqcnRzdHJzdHIoCisJSU4JY29uc3QgY2hhciAqIHMxLAorCUlOCWNvbnN0IGNoYXIgKiBzMik7CisKK2NoYXIgKnJzdHJ0b2soCisJSU4gY2hhciAqIHMsCisJSU4gY29uc3QgY2hhciAqIGN0KTsKKworaW50IHJ0aW5ldF9hdG9uKAorCWNvbnN0IGNoYXIgKmNwLAorCXVuc2lnbmVkIGludCAqYWRkcik7CisKKy8vLy8vLy8vLy8gY29tbW9uIGlvY3RsIGZ1bmN0aW9ucyAvLy8vLy8vLy8vCitJTlQgU2V0X0RyaXZlclZlcnNpb25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0NvdW50cnlSZWdpb25fUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0NvdW50cnlSZWdpb25BQmFuZF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfV2lyZWxlc3NNb2RlX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9DaGFubmVsX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9TaG9ydFNsb3RfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X1R4UG93ZXJfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQgU2V0X0JHUHJvdGVjdGlvbl9Qcm9jKAorCUlOICBQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4gIFBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfVHhQcmVhbWJsZV9Qcm9jKAorCUlOICBQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4gIFBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfUlRTVGhyZXNob2xkX1Byb2MoCisJSU4gIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiAgUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9GcmFnVGhyZXNob2xkX1Byb2MoCisJSU4gIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiAgUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9UeEJ1cnN0X1Byb2MoCisJSU4gIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiAgUFVDSEFSCQkJYXJnKTsKKworI2lmZGVmIEFHR1JFR0FUSU9OX1NVUFBPUlQKK0lOVAlTZXRfUGt0QWdncmVnYXRlX1Byb2MoCisJSU4gIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiAgUFVDSEFSCQkJYXJnKTsKKyNlbmRpZgorCitJTlQJU2V0X0lFRUU4MDIxMUhfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCisjaWZkZWYgREJHCitJTlQJU2V0X0RlYnVnX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKyNlbmRpZgorCitJTlQJU2hvd19EZXNjSW5mb19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfUmVzZXRTdGF0Q291bnRlcl9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK0lOVAlTZXRfQkFTZXR1cF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfQkFEZWNsaW5lX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9CQU9yaVRlYXJEb3duX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9CQVJlY1RlYXJEb3duX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdEJ3X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdE1jc19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfSHRHaV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfSHRPcE1vZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0U3RiY19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfSHRIdGNfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0RXh0Y2hhX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdE1wZHVEZW5zaXR5X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdEJhV2luU2l6ZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfSHRSZGdfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0h0TGlua0FkYXB0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdEFtc2R1X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdEF1dG9CYV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVAlTZXRfSHRQcm90ZWN0X1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdE1pbW9Qc19Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKKworSU5UCVNldF9Gb3JjZVNob3J0R0lfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0X0ZvcmNlR0ZfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCitJTlQJU2V0Q29tbW9uSFQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitJTlQJU2V0X1NlbmRQU01QQWN0aW9uX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UCVNldF9IdE1JTU9QU21vZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworCisKK0lOVAlTZXRfSHRUeEJBU2l6ZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvL0RscyAsCWthdGh5CitWT0lEIFJUTVBTZW5kRExTVGVhckRvd25GcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwREEpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisvL0Jsb2NrIEFDSworVk9JRCBRdWVyeUJBVEFCTEUoCisJSU4gIFBSVE1QX0FEQVBURVIgcEFkLAorCU9VVCBQUVVFUllCQV9UQUJMRSBwQkFUKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKK0lOVAkgICAgV3BhQ2hlY2tFYXBDb2RlKAorCUlOICBQUlRNUF9BREFQVEVSICAgCXBBZCwKKwlJTiAgUFVDSEFSCQkJCXBGcmFtZSwKKwlJTiAgVVNIT1JUCQkJCUZyYW1lTGVuLAorCUlOICBVU0hPUlQJCQkJT2ZmU2V0KTsKKworVk9JRCAgICBXcGFTZW5kTWljRmFpbHVyZVRvV3BhU3VwcGxpY2FudCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQsCisgICAgSU4gIEJPT0xFQU4gICAgICAgICAgICAgYlVuaWNhc3QpOworCitWT0lEICAgIFNlbmRBc3NvY0lFc1RvV3BhU3VwcGxpY2FudCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgICAgICBwQWQpOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCitpbnQgd2V4dF9ub3RpZnlfZXZlbnRfYXNzb2MoCisJSU4gIFJUTVBfQURBUFRFUiAqcEFkKTsKKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCitWT0lEIEhhbmRsZV9CU1NfV2lkdGhfVHJpZ2dlcl9FdmVudHMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCit2b2lkIGJ1aWxkX2V4dF9jaGFubmVsX3N3aXRjaF9pZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBIVF9FWFRfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0VNRU5UX0lFICpwSUUpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisKK0JPT0xFQU4gQVBSeERvbmVJbnRlcnJ1cHRIYW5kbGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitCT09MRUFOIFNUQVJ4RG9uZUludGVycnVwdEhhbmRsZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglCT09MRUFOCQkJYXJnYyk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8vIEFNUERVIHBhY2tldCBpbmRpY2F0aW9uCitWT0lEIEluZGljYXRlX0FNUERVX1BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCisvLyBBTVNEVSBwYWNrZXQgaW5kaWNhdGlvbgorVk9JRCBJbmRpY2F0ZV9BTVNEVV9QYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworLy8gTm9ybWFsIGxlZ2FjeSBSeCBwYWNrZXQgaW5kaWNhdGlvbgorVk9JRCBJbmRpY2F0ZV9MZWdhY3lfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKK1ZPSUQgSW5kaWNhdGVfRUFQT0xfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKK3ZvaWQgIHVwZGF0ZV9vc19wYWNrZXRfaW5mbygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCit2b2lkIHdsYW5fODAyXzExX3RvXzgwMl8zX3BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrLAorCUlOCVBVQ0hBUgkJCXBIZWFkZXI4MDJfMywKKwlJTiAgVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCk7CisKK1VJTlQgZGVhZ2dyZWdhdGVfQU1TRFVfYW5ub3VuY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJUE5ESVNfUEFDS0VUCQlwUGFja2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVMT05HCQkJRGF0YVNpemUpOworCisKKyNpZmRlZiBDT05GSUdfU1RBX1NVUFBPUlQKKy8vIHJlbW92ZSBMTEMgYW5kIGdldCA4MDJfMyBIZWFkZXIKKyNkZWZpbmUgIFJUTVBfODAyXzExX1JFTU9WRV9MTENfQU5EX0NPTlZFUlRfVE9fODAyXzMoX3BSeEJsaywgX3BIZWFkZXI4MDJfMykJXAorewkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCVBVQ0hBUiBfcFJlbW92ZWRMTENTTkFQID0gTlVMTCwgX3BEQSwgX3BTQTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwlpZiAoUlhfQkxLX1RFU1RfRkxBRyhfcFJ4QmxrLCBmUlhfTUVTSCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCV9wREEgPSBfcFJ4QmxrLT5wSGVhZGVyLT5BZGRyMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJX3BTQSA9IChQVUNIQVIpX3BSeEJsay0+cEhlYWRlciArIHNpemVvZihIRUFERVJfODAyXzExKTsgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoUlhfQkxLX1RFU1RfRkxBRyhfcFJ4QmxrLCBmUlhfSU5GUkEpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCisJCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCV9wREEgPSBfcFJ4QmxrLT5wSGVhZGVyLT5BZGRyMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoUlhfQkxLX1RFU1RfRkxBRyhfcFJ4QmxrLCBmUlhfRExTKSkJCQkJCQkJCQlcCisJCQlfcFNBID0gX3BSeEJsay0+cEhlYWRlci0+QWRkcjI7CQkJCQkJCQkJCVwKKwkJZWxzZQkJCQkJCQkJCQkJCQkJCQkJXAorCQkJX3BTQSA9IF9wUnhCbGstPnBIZWFkZXItPkFkZHIzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlfcERBID0gX3BSeEJsay0+cEhlYWRlci0+QWRkcjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCV9wU0EgPSBfcFJ4QmxrLT5wSGVhZGVyLT5BZGRyMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJXAorCUNPTlZFUlRfVE9fODAyXzMoX3BIZWFkZXI4MDJfMywgX3BEQSwgX3BTQSwgX3BSeEJsay0+cERhdGEsIAkJCQlcCisJCV9wUnhCbGstPkRhdGFTaXplLCBfcFJlbW92ZWRMTENTTkFQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworCitCT09MRUFOIEFQRm93YXJkV2lyZWxlc3NTdGFUb1dpcmVsZXNzU3RhKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVVMT05HCQkJRnJvbVdoaWNoQlNTSUQpOworCitWT0lEIEFubm91bmNlX29yX0ZvcndhcmRfODAyXzNfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpOworCitWT0lEIFN0YV9Bbm5vdW5jZV9vcl9Gb3J3YXJkXzgwMl8zX1BhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCwKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZGVmaW5lIEFOTk9VTkNFX09SX0ZPUldBUkRfODAyXzNfUEFDS0VUKF9wQWQsIF9wUGFja2V0LCBfRnJvbVdoaWNoQlNTKVwKKwkJCVN0YV9Bbm5vdW5jZV9vcl9Gb3J3YXJkXzgwMl8zX1BhY2tldChfcEFkLCBfcFBhY2tldCwgX0Zyb21XaGljaEJTUyk7CisJCQkvL2Fubm91bmNlXzgwMl8zX3BhY2tldChfcEFkLCBfcFBhY2tldCk7CisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKworUE5ESVNfUEFDS0VUIER1cGxpY2F0ZVBhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQTkRJU19QQUNLRVQJcFBhY2tldCwKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworCitQTkRJU19QQUNLRVQgQ2xvbmVQYWNrZXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUE5ESVNfUEFDS0VUCXBQYWNrZXQsCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEYXRhU2l6ZSk7CisKKworLy8gTm9ybWFsLCBBTVBEVSBvciBBTVNEVQorVk9JRCBDbW1SeG5vblJhbGlua0ZyYW1lSW5kaWNhdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworVk9JRCBDbW1SeFJhbGlua0ZyYW1lSW5kaWNhdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUFDX1RBQkxFX0VOVFJZCSpwRW50cnksCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKTsKKworVk9JRCBVcGRhdGVfUnNzaV9TYW1wbGUoCisJSU4gUFJUTVBfQURBUFRFUglwQWQsCisJSU4gUlNTSV9TQU1QTEUJCSpwUnNzaSwKKwlJTiBQUlhXSV9TVFJVQwkJcFJ4V0kpOworCitQTkRJU19QQUNLRVQgR2V0UGFja2V0RnJvbVJ4UmluZygKKwlJTgkJUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCQlQUlQyOFhYX1JYRF9TVFJVQwkJcFNhdmVSeEQsCisJT1VUCQlCT09MRUFOCQkJKnBiUmVzY2hlZHVsZSwKKwlJTiBPVVQJVUlOVDMyCQkJKnBSeFBlbmRpbmcpOworCitQTkRJU19QQUNLRVQgUlRNUERlRnJhZ21lbnREYXRhRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsayk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCisKKworCisjaWZkZWYgU05NUF9TVVBQT1JUCisvL2ZvciBzbm1wICwga2F0aHkKK3R5cGVkZWYgc3RydWN0IF9EZWZhdWx0S2V5SWR4VmFsdWUKK3sKKwlVQ0hBUglLZXlJZHg7CisJVUNIQVIJVmFsdWVbMTZdOworfSBEZWZhdWx0S2V5SWR4VmFsdWUsICpQRGVmYXVsdEtleUlkeFZhbHVlOworI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19TVEFfU1VQUE9SVAorZW51bSB7CisJRElEbXNnX2xueGluZF93bGFuc25pZmZybQkJPSAweDAwMDAwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1faG9zdHRpbWUJPSAweDAwMDEwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fbWFjdGltZQk9IDB4MDAwMjAwNDQsCisJRElEbXNnX2xueGluZF93bGFuc25pZmZybV9jaGFubmVsCT0gMHgwMDAzMDA0NCwKKwlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3Jzc2kJCT0gMHgwMDA0MDA0NCwKKwlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3NxCQk9IDB4MDAwNTAwNDQsCisJRElEbXNnX2xueGluZF93bGFuc25pZmZybV9zaWduYWwJPSAweDAwMDYwMDQ0LAorCURJRG1zZ19sbnhpbmRfd2xhbnNuaWZmcm1fbm9pc2UJCT0gMHgwMDA3MDA0NCwKKwlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX3JhdGUJCT0gMHgwMDA4MDA0NCwKKwlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2lzdHgJCT0gMHgwMDA5MDA0NCwKKwlESURtc2dfbG54aW5kX3dsYW5zbmlmZnJtX2ZybWxlbgk9IDB4MDAwQTAwNDQKK307CitlbnVtIHsKKwlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX25vX3ZhbHVlCT0gMHgwMAorfTsKK2VudW0geworCVA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UJCQk9IDB4MDAsCisJUDgwMjExRU5VTV90cnV0aF90cnVlCQkJPSAweDAxCit9OworCisvKiBEZWZpbml0aW9uIGZyb20gbWFkd2lmaSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBVSU5UMzIgZGlkOworICAgICAgICBVSU5UMTYgc3RhdHVzOworICAgICAgICBVSU5UMTYgbGVuOworICAgICAgICBVSU5UMzIgZGF0YTsKK30gcDgwMjExaXRlbV91aW50MzJfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBVSU5UMzIgbXNnY29kZTsKKyAgICAgICAgVUlOVDMyIG1zZ2xlbjsKKyNkZWZpbmUgV0xBTl9ERVZOQU1FTEVOX01BWCAxNgorICAgICAgICBVSU5UOCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworICAgICAgICBwODAyMTFpdGVtX3VpbnQzMl90IGhvc3R0aW1lOworICAgICAgICBwODAyMTFpdGVtX3VpbnQzMl90IG1hY3RpbWU7CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3QgY2hhbm5lbDsKKyAgICAgICAgcDgwMjExaXRlbV91aW50MzJfdCByc3NpOworICAgICAgICBwODAyMTFpdGVtX3VpbnQzMl90IHNxOworICAgICAgICBwODAyMTFpdGVtX3VpbnQzMl90IHNpZ25hbDsKKyAgICAgICAgcDgwMjExaXRlbV91aW50MzJfdCBub2lzZTsKKyAgICAgICAgcDgwMjExaXRlbV91aW50MzJfdCByYXRlOworICAgICAgICBwODAyMTFpdGVtX3VpbnQzMl90IGlzdHg7CisgICAgICAgIHA4MDIxMWl0ZW1fdWludDMyX3QgZnJtbGVuOworfSB3bGFuX25nX3ByaXNtMl9oZWFkZXI7CisKKy8qIFRoZSByYWRpbyBjYXB0dXJlIGhlYWRlciBwcmVjZWRlcyB0aGUgODAyLjExIGhlYWRlci4gKi8KK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciB7CisgICAgVUlOVDgJaXRfdmVyc2lvbjsJLyogVmVyc2lvbiAwLiBPbmx5IGluY3JlYXNlcworCQkJCSAqIGZvciBkcmFzdGljIGNoYW5nZXMsCisJCQkJICogaW50cm9kdWN0aW9uIG9mIGNvbXBhdGlibGUKKwkJCQkgKiBuZXcgZmllbGRzIGRvZXMgbm90IGNvdW50LgorCQkJCSAqLworICAgIFVJTlQ4CWl0X3BhZDsKKyAgICBVSU5UMTYgICAgIGl0X2xlbjsgICAgICAgICAvKiBsZW5ndGggb2YgdGhlIHdob2xlCisJCQkJICogaGVhZGVyIGluIGJ5dGVzLCBpbmNsdWRpbmcKKwkJCQkgKiBpdF92ZXJzaW9uLCBpdF9wYWQsCisJCQkJICogaXRfbGVuLCBhbmQgZGF0YSBmaWVsZHMuCisJCQkJICovCisgICAgVUlOVDMyICAgaXRfcHJlc2VudDsJLyogQSBiaXRtYXAgdGVsbGluZyB3aGljaAorCQkJCQkgKiBmaWVsZHMgYXJlIHByZXNlbnQuIFNldCBiaXQgMzEKKwkJCQkJICogKDB4ODAwMDAwMDApIHRvIGV4dGVuZCB0aGUKKwkJCQkJICogYml0bWFwIGJ5IGFub3RoZXIgMzIgYml0cy4KKwkJCQkJICogQWRkaXRpb25hbCBleHRlbnNpb25zIGFyZSBtYWRlCisJCQkJCSAqIGJ5IHNldHRpbmcgYml0IDMxLgorCQkJCQkgKi8KK31pZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIDsKKworZW51bSBpZWVlODAyMTFfcmFkaW90YXBfdHlwZSB7CisgICAgSUVFRTgwMjExX1JBRElPVEFQX1RTRlQgPSAwLAorICAgIElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUyA9IDEsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUgPSAyLAorICAgIElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMID0gMywKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfRkhTUyA9IDQsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUwgPSA1LAorICAgIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UTk9JU0UgPSA2LAorICAgIElFRUU4MDIxMV9SQURJT1RBUF9MT0NLX1FVQUxJVFkgPSA3LAorICAgIElFRUU4MDIxMV9SQURJT1RBUF9UWF9BVFRFTlVBVElPTiA9IDgsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX0RCX1RYX0FUVEVOVUFUSU9OID0gOSwKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfREJNX1RYX1BPV0VSID0gMTAsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkEgPSAxMSwKKyAgICBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMID0gMTIsCisgICAgSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVE5PSVNFID0gMTMKK307CisKKyNkZWZpbmUgV0xBTl9SQURJT1RBUF9QUkVTRU5UICgJCQlcCisJKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1RTRlQpCXwJXAorCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUykgfAlcCisJKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpICB8IAlcCisJIDApCisKK3R5cGVkZWYgc3RydWN0IF93bGFuX3JhZGlvdGFwX2hlYWRlciB7CisJaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciB3dF9paGRyOworCUlOVDY0IHd0X3RzZnQ7CisJVUlOVDggd3RfZmxhZ3M7CisJVUlOVDggd3RfcmF0ZTsKK30gd2xhbl9yYWRpb3RhcF9oZWFkZXI7CisvKiBEZWZpbml0aW9uIGZyb20gbWFkd2lmaSAqLworCit2b2lkIHNlbmRfbW9uaXRvcl9wYWNrZXRzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVJYX0JMSwkJCSpwUnhCbGspOworCisjaWYgV0lSRUxFU1NfRVhUID49IDEyCisvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gcXVlcnkgL3Byb2MKK3N0cnVjdCBpd19zdGF0aXN0aWNzICpydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzKAorICAgIElOIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKKyNlbmRpZgorCitWT0lEICAgIFJUTVBTZXREZXNpcmVkUmF0ZXMoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgTE9ORyAgICAgICAgICAgIFJhdGVzKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKworSU5UCVNldF9GaXhlZFR4TW9kZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKKyNpZmRlZiBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVAorSU5UCVNldF9PcE1vZGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworI2VuZGlmIC8vIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUIC8vCisKK3N0YXRpYyBpbmxpbmUgY2hhciogR2V0UGh5TW9kZSgKKwlpbnQgTW9kZSkKK3sKKwlzd2l0Y2goTW9kZSkKKwl7CisJCWNhc2UgTU9ERV9DQ0s6CisJCQlyZXR1cm4gIkNDSyI7CisKKwkJY2FzZSBNT0RFX09GRE06CisJCQlyZXR1cm4gIk9GRE0iOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQljYXNlIE1PREVfSFRNSVg6CisJCQlyZXR1cm4gIkhUTUlYIjsKKworCQljYXNlIE1PREVfSFRHUkVFTkZJRUxEOgorCQkJcmV0dXJuICJHUkVFTiI7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gIk4vQSI7CisJfQorfQorCisKK3N0YXRpYyBpbmxpbmUgY2hhciogR2V0QlcoCisJaW50IEJXKQoreworCXN3aXRjaChCVykKKwl7CisJCWNhc2UgQldfMTA6CisJCQlyZXR1cm4gIjEwTSI7CisKKwkJY2FzZSBCV18yMDoKKwkJCXJldHVybiAiMjBNIjsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJY2FzZSBCV180MDoKKwkJCXJldHVybiAiNDBNIjsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJZGVmYXVsdDoKKwkJCXJldHVybiAiTi9BIjsKKwl9Cit9CisKKworVk9JRCBSVDI4eHhUaHJlYWRUZXJtaW5hdGUoCisJSU4gUlRNUF9BREFQVEVSICpwQWQpOworCitCT09MRUFOIFJUMjhYWENoaXBzZXRDaGVjaygKKwlJTiB2b2lkICpfZGV2X3ApOworCitCT09MRUFOIFJUMjhYWE5ldERldkluaXQoCisJSU4gdm9pZCAJCQkJKl9kZXZfcCwKKwlJTiBzdHJ1Y3QgIG5ldF9kZXZpY2UJKm5ldF9kZXYsCisJSU4gUlRNUF9BREFQVEVSIAkJKnBBZCk7CisKK0JPT0xFQU4gUlQyOFhYUHJvYmVQb3N0Q29uZmlnKAorCUlOIHZvaWQgCQkJCSpfZGV2X3AsCisJSU4gUlRNUF9BREFQVEVSIAkJKnBBZCwKKwlJTiBJTlQzMgkJCQlhcmdjKTsKKworVk9JRCBSVDI4WFhETUFEaXNhYmxlKAorCUlOIFJUTVBfQURBUFRFUiAJCSpwQWQpOworCitWT0lEIFJUMjhYWERNQUVuYWJsZSgKKwlJTiBSVE1QX0FEQVBURVIgCQkqcEFkKTsKKworVk9JRCBSVDI4eHhfVXBkYXRlQmVhY29uVG9Bc2ljKAorCUlOIFJUTVBfQURBUFRFUiAqIHBBZCwKKwlJTiBJTlQgYXBpZHgsCisJSU4gVUxPTkcgQmVhY29uTGVuLAorCUlOIFVMT05HIFVwZGF0ZVBvcyk7CisKK0lOVCBydDI4eHhfaW9jdGwoCisJSU4Jc3RydWN0IG5ldF9kZXZpY2UJKm5ldF9kZXYsCisJSU4JT1VUCXN0cnVjdCBpZnJlcQkqcnEsCisJSU4JSU5UCQkJY21kKTsKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitJTlQgcnQyOHh4X3N0YV9pb2N0bCgKKwlJTglzdHJ1Y3QgbmV0X2RldmljZQkqbmV0X2RldiwKKwlJTglPVVQJc3RydWN0IGlmcmVxCSpycSwKKwlJTglJTlQJCQljbWQpOworI2VuZGlmIC8vIENPTkZJR19TVEFfU1VQUE9SVCAvLworCitCT09MRUFOIFJUMjhYWFNlY3VyaXR5S2V5QWRkKAorCUlOCQlQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4JCVVMT05HCQkJCWFwaWR4LAorCUlOCQlVTE9ORwkJCQlLZXlJZHgsCisJSU4JCU1BQ19UQUJMRV9FTlRSWSAJKnBFbnRyeSk7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK1BORElTX1BBQ0tFVCBHZXRQYWNrZXRGcm9tUnhSaW5nKAorCUlOCQlQUlRNUF9BREFQVEVSCXBBZCwKKwlPVVQJCVBSVDI4WFhfUlhEX1NUUlVDCXBTYXZlUnhELAorCU9VVAkJQk9PTEVBTgkJCSpwYlJlc2NoZWR1bGUsCisJSU4gT1VUCVVJTlQzMgkJCSpwUnhQZW5kaW5nKTsKKworCit2b2lkIGtpbGxfdGhyZWFkX3Rhc2soUFJUTVBfQURBUFRFUiBwQWQpOworCit2b2lkIHRidHRfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOworCisKK1ZPSUQgQXNpY1R1cm5PZmZSRkNsaygKKwlJTiBQUlRNUF9BREFQVEVSICAgIHBBZCwKKwlJTglVQ0hBUiAgICAgICAgICAgQ2hhbm5lbCk7CisKK1ZPSUQgQXNpY1R1cm5PblJGQ2xrKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCwKKwlJTglVQ0hBUgkJCUNoYW5uZWwpOworCisjaWZkZWYgUlQzMHh4CitOVFNUQVRVUyBSVDMweHhXcml0ZVJGUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlSZWdJRCwKKwlJTglVQ0hBUgkJCVZhbHVlKTsKKworTlRTVEFUVVMgUlQzMHh4UmVhZFJGUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlSZWdJRCwKKwlJTglQVUNIQVIJCQlwVmFsdWUpOworCisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2U8LS0KK1VDSEFSIGVGdXNlUmVhZFJlZ2lzdGVycygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQgT2Zmc2V0LAorCUlOCVVTSE9SVCBMZW5ndGgsCisJT1VUCVVTSE9SVCogcERhdGEpOworCitWT0lEIGVGdXNlUmVhZFBoeXNpY2FsKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorICAJSU4JUFVTSE9SVCBscEluQnVmZmVyLAorICAJSU4JVUxPTkcgbkluQnVmZmVyU2l6ZSwKKyAgCU9VVAlQVVNIT1JUIGxwT3V0QnVmZmVyLAorICAJSU4JVUxPTkcgbk91dEJ1ZmZlclNpemUKKyk7CisKK05UU1RBVFVTIGVGdXNlUmVhZCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJT1VUCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVTSE9SVAkJCUxlbmd0aCk7CisKK1ZPSUQgZUZ1c2VQaHlzaWNhbFdyaXRlUmVnaXN0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVCBPZmZzZXQsCisJSU4JVVNIT1JUIExlbmd0aCwKKwlPVVQJVVNIT1JUKiBwRGF0YSk7CisKK05UU1RBVFVTIGVGdXNlV3JpdGVSZWdpc3RlcnMoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUIE9mZnNldCwKKwlJTglVU0hPUlQgTGVuZ3RoLAorCUlOCVVTSE9SVCogcERhdGEpOworCitWT0lEIGVGdXNlV3JpdGVQaHlzaWNhbCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKyAgCVBVU0hPUlQgbHBJbkJ1ZmZlciwKKwlVTE9ORyBuSW5CdWZmZXJTaXplLAorICAJUFVDSEFSIGxwT3V0QnVmZmVyLAorICAJVUxPTkcgbk91dEJ1ZmZlclNpemUKKyk7CisKK05UU1RBVFVTIGVGdXNlV3JpdGUoCisgICAJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVTSE9SVAkJCWxlbmd0aCk7CisKK0lOVCBzZXRfZUZ1c2VHZXRGcmVlQmxvY2tDb3VudF9Qcm9jKAorICAgCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBzZXRfZUZ1c2VkdW1wX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIHNldF9lRnVzZUxvYWRGcm9tQmluX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworTlRTVEFUVVMgZUZ1c2VXcml0ZVJlZ2lzdGVyc0Zyb21CaW4oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUIE9mZnNldCwKKwlJTglVU0hPUlQgTGVuZ3RoLAorCUlOCVVTSE9SVCogcERhdGEpOworCitWT0lEIGVGdXNlUGh5c2ljYWxSZWFkUmVnaXN0ZXJzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVCBPZmZzZXQsCisJSU4JVVNIT1JUIExlbmd0aCwKKwlPVVQJVVNIT1JUKiBwRGF0YSk7CisKK05ESVNfU1RBVFVTIE5JQ0xvYWRFRVBST00oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitCT09MRUFOIGJOZWVkTG9hZEVFUFJPTSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2UtLT4KKyNlbmRpZiAvLyBSVDMweHggLy8KKworI2lmZGVmIFJUMzB4eAorLy8gYWRkIGJ5IGpvaG5saSwgUkYgcG93ZXIgc2VxdWVuY2Ugc2V0dXAKK1ZPSUQgUlQzMHh4TG9hZFJGTm9ybWFsTW9kZVNldHVwKAorCUlOIFBSVE1QX0FEQVBURVIgCXBBZCk7CisKK1ZPSUQgUlQzMHh4TG9hZFJGU2xlZXBNb2RlU2V0dXAoCisJSU4gUFJUTVBfQURBUFRFUiAJcEFkKTsKKworVk9JRCBSVDMweHhSZXZlcnNlUkZTbGVlcE1vZGVTZXR1cCgKKwlJTiBQUlRNUF9BREFQVEVSIAlwQWQpOworLy8gZW5kIGpvaG5saQorI2VuZGlmIC8vIFJUMzB4eCAvLworCisjaWZkZWYgUlQyODcwCisvLworLy8gRnVuY3Rpb24gUHJvdG90eXBlIGluIHJ0dXNiX2J1bGsuYworLy8KK1ZPSUQJUlRVU0JJbml0VHhEZXNjKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWF9DT05URVhUCQlwVHhDb250ZXh0LAorCUlOCVVDSEFSCQkJQnVsa091dFBpcGVJZCwKKwlJTgl1c2JfY29tcGxldGVfdAlGdW5jKTsKKworVk9JRAlSVFVTQkluaXRIVFR4RGVzYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQSFRfVFhfQ09OVEVYVAlwVHhDb250ZXh0LAorCUlOCVVDSEFSCQkJQnVsa091dFBpcGVJZCwKKwlJTglVTE9ORwkJCUJ1bGtPdXRTaXplLAorCUlOCXVzYl9jb21wbGV0ZV90CUZ1bmMpOworCitWT0lECVJUVVNCSW5pdFJ4RGVzYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQUlhfQ09OVEVYVAkJcFJ4Q29udGV4dCk7CisKK1ZPSUQgUlRVU0JDbGVhblVwRGF0YUJ1bGtPdXRRdWV1ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUlRVU0JDYW5jZWxQZW5kaW5nQnVsa091dElSUCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUlRVU0JCdWxrT3V0RGF0YVBhY2tldCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUJ1bGtPdXRQaXBlSWQsCisJSU4JVUNIQVIJCQlJbmRleCk7CisKK1ZPSUQgUlRVU0JCdWxrT3V0TnVsbEZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQkJ1bGtPdXRSVFNGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUlRVU0JDYW5jZWxQZW5kaW5nQnVsa0luSVJQKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQkNhbmNlbFBlbmRpbmdJUlBzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworVk9JRCBSVFVTQkJ1bGtPdXRNTE1FUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSW5kZXgpOworCitWT0lEIFJUVVNCQnVsa091dFBzUG9sbCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUlRVU0JDbGVhblVwTUxNRUJ1bGtPdXRRdWV1ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUlRVU0JLaWNrQnVsa091dCgKKwlJTglQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQJUlRVU0JCdWxrUmVjZWl2ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgRG9CdWxrSW4oCisJSU4gUlRNUF9BREFQVEVSICpwQWQpOworCitWT0lEIFJUVVNCSW5pdFJ4RGVzYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgUFJYX0NPTlRFWFQJCXBSeENvbnRleHQpOworCitWT0lEIFJUVVNCQnVsa1J4SGFuZGxlKAorCUlOIHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKKy8vCisvLyBGdW5jdGlvbiBQcm90b3R5cGUgaW4gcnR1c2JfaW8uYworLy8KK05UU1RBVFVTIFJUVVNCTXVsdGlSZWFkKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlPVVQJUFVDSEFSCQkJcERhdGEsCisJSU4JVVNIT1JUCQkJbGVuZ3RoKTsKKworTlRTVEFUVVMgUlRVU0JNdWx0aVdyaXRlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVTSE9SVAkJCU9mZnNldCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVU0hPUlQJCQlsZW5ndGgpOworCitOVFNUQVRVUyBSVFVTQk11bHRpV3JpdGVfT25lQnl0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JUFVDSEFSCQkJcERhdGEpOworCitOVFNUQVRVUyBSVFVTQlJlYWRCQlBSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUlkLAorCUlOCVBVQ0hBUgkJCXBWYWx1ZSk7CisKK05UU1RBVFVTIFJUVVNCV3JpdGVCQlBSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUlkLAorCUlOCVVDSEFSCQkJVmFsdWUpOworCitOVFNUQVRVUyBSVFVTQldyaXRlUkZSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVSU5UMzIJCQlWYWx1ZSk7CisKK05UU1RBVFVTIFJUVVNCX1ZlbmRvclJlcXVlc3QoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUlOVDMyCQkJVHJhbnNmZXJGbGFncywKKwlJTglVQ0hBUgkJCVJlc2VydmVkQml0cywKKwlJTglVQ0hBUgkJCVJlcXVlc3QsCisJSU4JVVNIT1JUCQkJVmFsdWUsCisJSU4JVVNIT1JUCQkJSW5kZXgsCisJSU4JUFZPSUQJCQlUcmFuc2ZlckJ1ZmZlciwKKwlJTglVSU5UMzIJCQlUcmFuc2ZlckJ1ZmZlckxlbmd0aCk7CisKK05UU1RBVFVTIFJUVVNCUmVhZEVFUFJPTSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJT1VUCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVTSE9SVAkJCWxlbmd0aCk7CisKK05UU1RBVFVTIFJUVVNCV3JpdGVFRVBST00oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCUlOCVBVQ0hBUgkJCXBEYXRhLAorCUlOCVVTSE9SVAkJCWxlbmd0aCk7CisKK1ZPSUQgUlRVU0JQdXRUb1NsZWVwKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworTlRTVEFUVVMgUlRVU0JXYWtlVXAoCisJSU4JUFJUTVBfQURBUFRFUglwQWQpOworCitWT0lEIFJUVVNCSW5pdGlhbGl6ZUNtZFEoCisJSU4JUENtZFEJY21kcSk7CisKK05ESVNfU1RBVFVTCVJUVVNCRW5xdWV1ZUNtZEZyb21OZGlzKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU5ESVNfT0lECQlPaWQsCisJSU4JQk9PTEVBTgkJCVNldEluZm9ybWF0aW9uLAorCUlOCVBWT0lECQkJcEluZm9ybWF0aW9uQnVmZmVyLAorCUlOCVVJTlQzMgkJCUluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoKTsKKworTkRJU19TVEFUVVMgUlRVU0JFbnF1ZXVlSW50ZXJuYWxDbWQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gTkRJU19PSUQJCQlPaWQsCisJSU4gUFZPSUQJCQlwSW5mb3JtYXRpb25CdWZmZXIsCisJSU4gVUlOVDMyCQkJSW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpOworCitWT0lEIFJUVVNCRGVxdWV1ZUNtZCgKKwlJTglQQ21kUQkJY21kcSwKKwlPVVQJUENtZFFFbG10CSpwY21kcWVsbXQpOworCitJTlQgUlRVU0JDbWRUaHJlYWQoCisJSU4gT1VUIFBWT0lEIENvbnRleHQpOworCitJTlQgVGltZXJRVGhyZWFkKAorCUlOIE9VVCBQVk9JRCBDb250ZXh0KTsKKworUlQyODcwX1RJTUVSX0VOVFJZICpSVDI4NzBfVGltZXJRX0luc2VydCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBSQUxJTktfVElNRVJfU1RSVUNUICpwVGltZXIpOworCitCT09MRUFOIFJUMjg3MF9UaW1lclFfUmVtb3ZlKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFJBTElOS19USU1FUl9TVFJVQ1QgKnBUaW1lcik7CisKK3ZvaWQgUlQyODcwX1RpbWVyUV9FeGl0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKTsKKwordm9pZCBSVDI4NzBfVGltZXJRX0luaXQoCisJSU4gUlRNUF9BREFQVEVSICpwQWQpOworCitWT0lEIFJUMjg3MF9Cc3NCZWFjb25FeGl0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkKTsKKworVk9JRCBSVDI4NzBfQnNzQmVhY29uU3RvcCgKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCk7CisKK1ZPSUQgUlQyODcwX0Jzc0JlYWNvblN0YXJ0KAorCUlOIFJUTVBfQURBUFRFUiAqIHBBZCk7CisKK1ZPSUQgUlQyODcwX0Jzc0JlYWNvbkluaXQoCisJSU4gUlRNUF9BREFQVEVSICpwQWQpOworCitWT0lEIFJUMjg3MF9XYXRjaERvZygKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCk7CisKK05UU1RBVFVTIFJUVVNCV3JpdGVNQUNSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJSU4JVUlOVDMyCQkJVmFsdWUpOworCitOVFNUQVRVUyBSVFVTQlJlYWRNQUNSZWdpc3RlcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVU0hPUlQJCQlPZmZzZXQsCisJT1VUCVBVSU5UMzIJCQlwVmFsdWUpOworCitOVFNUQVRVUyBSVFVTQlNpbmdsZVdyaXRlKAorCUlOIAlSVE1QX0FEQVBURVIgCSpwQWQsCisJSU4JVVNIT1JUCQkJT2Zmc2V0LAorCUlOCVVTSE9SVAkJCVZhbHVlKTsKKworTlRTVEFUVVMgUlRVU0JGaXJtd2FyZVJ1bigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK05UU1RBVFVTIFJUVVNCRmlybXdhcmVXcml0ZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIJCXBGd0ltYWdlLAorCUlOIFVMT05HCQlGd0xlbik7CisKK05UU1RBVFVTCVJUVVNCRmlybXdhcmVPcG1vZGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJT1VUCVBVSU5UMzIJCQlwVmFsdWUpOworCitOVFNUQVRVUwlSVFVTQlZlbmRlclJlc2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKTsKKworTkRJU19TVEFUVVMgUlRVU0JTZXRIYXJkV2FyZVJlZ2lzdGVyKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4JUFZPSUQJCQlwQnVmKTsKKworTkRJU19TVEFUVVMgUlRVU0JRdWVyeUhhcmRXYXJlUmVnaXN0ZXIoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglQVk9JRAkJCXBCdWYpOworCitWT0lEIENNREhhbmRsZXIoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCisKK05ESVNfU1RBVFVTCSBDcmVhdGVUaHJlYWRzKAorCUlOCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ICk7CisKKworVk9JRCBNYWNUYWJsZUluaXRpYWxpemUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQpOworCitWT0lEIE1sbWVTZXRQc20oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gVVNIT1JUIHBzbSk7CisKK05ESVNfU1RBVFVTIFJUTVBXUEFBZGRLZXlQcm9jKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVk9JRCAgICAgICAgICAgcEJ1Zik7CisKK1ZPSUQgQXNpY1J4QW50RXZhbEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK3ZvaWQgYXBwZW5kX3BrdCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwSGVhZGVyODAyXzMsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBIZHJMZW4sCisJSU4JUFVDSEFSCQkJcERhdGEsCisJSU4JVUxPTkcJCQlEYXRhU2l6ZSwKKwlPVVQgIFBORElTX1BBQ0tFVAkqcHBQYWNrZXQpOworCitVSU5UIGRlYWdncmVnYXRlX0FNU0RVX2Fubm91bmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCVBORElTX1BBQ0tFVAkJcFBhY2tldCwKKwlJTglQVUNIQVIJCQlwRGF0YSwKKwlJTglVTE9ORwkJCURhdGFTaXplKTsKKworTkRJU19TVEFUVVMJUlRNUENoZWNrUnhFcnJvcigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQSEVBREVSXzgwMl8xMQlwSGVhZGVyLAorCUlOCVBSWFdJX1NUUlVDCXBSeFdJLAorCUlOCVBSVDI4WFhfUlhEX1NUUlVDCXBSeElORk8pOworCisKK1ZPSUQgUlRVU0JNbG1lSGFyZFRyYW5zbWl0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBNR01UX1NUUlVDCQlwTWdtdCk7CisKK0lOVCBNbG1lVGhyZWFkKAorCUlOIFBWT0lEIENvbnRleHQpOworCisvLworLy8gRnVuY3Rpb24gUHJvdG90eXBlIGluIHJ0dXNiX2RhdGEuYworLy8KK05ESVNfU1RBVFVTCVJUVVNCRnJlZURlc2NyaXB0b3JSZXF1ZXN0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJQnVsa091dFBpcGVJZCwKKwlJTglVSU5UMzIJCQlOdW1iZXJSZXF1aXJlZCk7CisKKworQk9PTEVBTglSVFVTQk5lZWRRdWV1ZUJhY2tGb3JBZ2coCisJSU4gUlRNUF9BREFQVEVSICpwQWQsCisJSU4gVUNIQVIJCUJ1bGtPdXRQaXBlSWQpOworCisKK1ZPSUQgUlRNUFdyaXRlVHhJbmZvKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBUWElORk9fU1RSVUMgCXBUeEluZm8sCisJSU4JICBVU0hPUlQJCVVTQkRNQXBrdExlbiwKKwlJTgkgIEJPT0xFQU4JCWJXaXYsCisJSU4JICBVQ0hBUgkJCVF1ZXVlU2VsLAorCUlOCSAgVUNIQVIJCQlOZXh0VmFsaWQsCisJSU4JICBVQ0hBUgkJCVR4QnVyc3QpOworCisvLworLy8gRnVuY3Rpb24gUHJvdG90eXBlIGluIGNtbV9kYXRhXzI4NzAuYworLy8KK1VTSE9SVCBSdG1wVVNCX1dyaXRlU3ViVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCUJPT0xFQU4JCQliSXNMYXN0LAorCU9VVAlVU0hPUlQJCQkqRnJlZU51bWJlcik7CisKK1VTSE9SVCBSdG1wVVNCX1dyaXRlU2luZ2xlVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCUJPT0xFQU4JCQliSXNMYXN0LAorCU9VVAlVU0hPUlQJCQkqRnJlZU51bWJlcik7CisKK1VTSE9SVAlSdG1wVVNCX1dyaXRlRnJhZ1R4UmVzb3VyY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVFhfQkxLCQkJKnBUeEJsaywKKwlJTglVQ0hBUgkJCWZyYWdOdW0sCisJT1VUCVVTSE9SVAkJCSpGcmVlTnVtYmVyKTsKKworVVNIT1JUIFJ0bXBVU0JfV3JpdGVNdWx0aVR4UmVzb3VyY2UoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVFhfQkxLCQkJKnBUeEJsaywKKwlJTglVQ0hBUgkJCWZyYW1lTnVtLAorCU9VVAlVU0hPUlQJCQkqRnJlZU51bWJlcik7CisKK1ZPSUQgUnRtcFVTQl9GaW5hbFdyaXRlVHhSZXNvdXJjZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrLAorCUlOCVVTSE9SVAkJCXRvdGFsTVBEVVNpemUsCisJSU4JVVNIT1JUCQkJVHhJZHgpOworCitWT0lEIFJ0bXBVU0JEYXRhTGFzdFR4SWR4KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJUXVlSWR4LAorCUlOCVVTSE9SVAkJCVR4SWR4KTsKKworVk9JRCBSdG1wVVNCRGF0YUtpY2tPdXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVFhfQkxLCQkJKnBUeEJsaywKKwlJTglVQ0hBUgkJCVF1ZUlkeCk7CisKKworaW50IFJ0bXBVU0JNZ210S2lja091dCgKKwlJTiBSVE1QX0FEQVBURVIgCSpwQWQsCisJSU4gVUNIQVIgCQkJUXVlSWR4LAorCUlOIFBORElTX1BBQ0tFVAkJcFBhY2tldCwKKwlJTiBQVUNIQVIJCQlwU3JjQnVmVkEsCisJSU4gVUlOVCAJCQlTcmNCdWZMZW4pOworCitWT0lEIFJ0bXBVU0JOdWxsRnJhbWVLaWNrT3V0KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFVDSEFSCQlRdWVJZHgsCisJSU4gVUNIQVIJCSpwTnVsbEZyYW1lLAorCUlOIFVJTlQzMgkJZnJhbWVMZW4pOworCitWT0lEIFJUMjh4eFVzYlN0YUFzaWNGb3JjZVdha2V1cCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBCT09MRUFOICAgICAgIGJGcm9tVHgpOworCitWT0lEIFJUMjh4eFVzYlN0YUFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVCBUYnR0TnVtVG9OZXh0V2FrZVVwKTsKKworVk9JRCBSVDI4eHhVc2JNbG1lUmFkaW9PbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgUlQyOHh4VXNiTWxtZVJhZGlvT0ZGKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitWT0lEIFFCU1NfTG9hZEluaXQoCisgCUlOCQlSVE1QX0FEQVBURVIJKnBBZCk7CisKK1VJTlQzMiBRQlNTX0xvYWRFbGVtZW50QXBwZW5kKAorIAlJTgkJUlRNUF9BREFQVEVSCSpwQWQsCisJT1VUCQlVSU5UOAkJCSpidWZfcCk7CisKK1ZPSUQgUUJTU19Mb2FkVXBkYXRlKAorIAlJTgkJUlRNUF9BREFQVEVSCSpwQWQpOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK0lOVCBSVE1QU2hvd0NmZ1ZhbHVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBOYW1lLAorCUlOCVBVQ0hBUgkJCXBCdWYpOworCitQQ0hBUiAgIFJUTVBHZXRSYWxpbmtBdXRoTW9kZVN0cigKKyAgICBJTiAgTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSBhdXRoTW9kZSk7CisKK1BDSEFSICAgUlRNUEdldFJhbGlua0VuY3J5TW9kZVN0cigKKyAgICBJTiAgVVNIT1JUIGVuY3J5TW9kZSk7CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCitWT0lEIEFzaWNTdGFCYnBUdW5pbmcoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitCT09MRUFOIFN0YUFkZE1hY1RhYmxlRW50cnkoCisJSU4gIFBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTiAgUE1BQ19UQUJMRV9FTlRSWQlwRW50cnksCisJSU4gIFVDSEFSCQkJCU1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMsCisJSU4gIEhUX0NBUEFCSUxJVFlfSUUJKnBIdENhcGFiaWxpdHksCisJSU4gIFVDSEFSCQkJCUh0Q2FwYWJpbGl0eUxlbiwKKwlJTiAgVVNIT1JUICAgICAgICAJCUNhcGFiaWxpdHlJbmZvKTsKKyNlbmRpZiAvLyBDT05GSUdfU1RBX1NVUFBPUlQgLy8KKwordm9pZCBSVE1QX0luZGljYXRlTWVkaWFTdGF0ZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCk7CisKK1ZPSUQgUmVTeW5jQmVhY29uVGltZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCk7CisKK1ZPSUQgUlRNUFNldEFHQ0luaXRWYWx1ZSgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBVQ0hBUgkJCUJhbmRXaWR0aCk7CisKK2ludCBydDI4eHhfY2xvc2UoSU4gUE5FVF9ERVYgZGV2KTsKK2ludCBydDI4eHhfb3BlbihJTiBQTkVUX0RFViBkZXYpOworCitfX2lubGluZSBJTlQgVklSVFVBTF9JRl9VUChQUlRNUF9BREFQVEVSIHBBZCkKK3sKK2V4dGVybiBWT0lEIE1lc2hNYWtlQmVhY29uKElOIFBSVE1QX0FEQVBURVIgcEFkLCBJTiBVQ0hBUiBpZHgpOworZXh0ZXJuIFZPSUQgTWVzaFVwZGF0ZUJlYWNvbkZyYW1lKElOIFBSVE1QX0FEQVBURVIgcEFkLCBJTiBVQ0hBUiBpZHgpOworCisJaWYgKFZJUlRVQUxfSUZfTlVNKHBBZCkgPT0gMCkKKwl7CisJCWlmIChydDI4eHhfb3BlbihwQWQtPm5ldF9kZXYpICE9IDApCisJCQlyZXR1cm4gLTE7CisJfQorCWVsc2UKKwl7CisJfQorCVZJUlRVQUxfSUZfSU5DKHBBZCk7CisJcmV0dXJuIDA7Cit9CisKK19faW5saW5lIFZPSUQgVklSVFVBTF9JRl9ET1dOKFBSVE1QX0FEQVBURVIgcEFkKQoreworCVZJUlRVQUxfSUZfREVDKHBBZCk7CisJaWYgKFZJUlRVQUxfSUZfTlVNKHBBZCkgPT0gMCkKKwkJcnQyOHh4X2Nsb3NlKHBBZC0+bmV0X2Rldik7CisJcmV0dXJuOworfQorCisKKyNlbmRpZiAgLy8gX19SVE1QX0hfXworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXBfY2tpcG1pYy5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydG1wX2NraXBtaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2Q5NDlhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydG1wX2NraXBtaWMuaApAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlydG1wX2NraXBtaWMuaAorCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncworKi8KKyNpZm5kZWYJX19SVE1QX0NLSVBNSUNfSF9fCisjZGVmaW5lCV9fUlRNUF9DS0lQTUlDX0hfXworCit0eXBlZGVmCXN0cnVjdAlfTUlDX0NPTlRFWFQJeworCS8qIC0tLSBNTUggY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVVDSEFSCQlDS1sxNl07CQkJCS8qIHRoZSBrZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCVVDSEFSCQljb2VmZmljaWVudFsxNl07CS8qIGN1cnJlbnQgYWVzIGNvdW50ZXIgbW9kZSBjb2VmZmljaWVudHMgICAgICAqLworCVVMT05HTE9ORwlhY2N1bTsJCQkJLyogYWNjdW11bGF0ZWQgbWljLCByZWR1Y2VkIHRvIHUzMiBpbiBmaW5hbCgpICovCisJVUlOVAkJcG9zaXRpb247CQkJLyogY3VycmVudCBwb3NpdGlvbiAoYnl0ZSBvZmZzZXQpIGluIG1lc3NhZ2UgICovCisJVUNIQVIJCXBhcnRbNF07CQkJLyogZm9yIGNvbnZlcnNpb24gb2YgbWVzc2FnZSB0byB1MzIgZm9yIG1taCAgICovCit9CU1JQ19DT05URVhULCAqUE1JQ19DT05URVhUOworCitWT0lECUNLSVBfa2V5X3Blcm11dGUoCisJT1VUCVVDSEFSCSpQSywJCQkvKiBvdXRwdXQgcGVybXV0ZWQga2V5ICovCisJSU4JVUNIQVIJKkNLLAkJCS8qIGlucHV0IENLSVAga2V5ICovCisJSU4JVUNIQVIJdG9Ec0Zyb21EcywJCS8qIGlucHV0IHRvRHMvRnJvbURzIGJpdHMgKi8KKwlJTglVQ0hBUgkqcGl2KTsJCQkvKiBpbnB1dCBwb2ludGVyIHRvIElWICovCisKK1ZPSUQJUlRNUENraXBNaWNJbml0KAorCUlOCVBNSUNfQ09OVEVYVAkJcENvbnRleHQsCisJSU4JUFVDSEFSCQkJCUNLKTsKKworVk9JRCBSVE1QTWljVXBkYXRlKAorICAgIElOICBQTUlDX0NPTlRFWFQgICAgICAgIHBDb250ZXh0LAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIHBPY3RldHMsCisgICAgSU4gIElOVCAgICAgICAgICAgICAgICAgbGVuKTsKKworVUxPTkcgUlRNUE1pY0dldENvZWZmaWNpZW50KAorICAgIElOICBQTUlDX0NPTlRFWFQgICAgICAgICBwQ29udGV4dCk7CisKK1ZPSUQgeG9yXzEyOCgKKyAgICBJTiAgUFVDSEFSICAgICAgICAgICAgICBhLAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGIsCisgICAgT1VUIFBVQ0hBUiAgICAgICAgICAgICAgb3V0KTsKKworVUNIQVIgUlRNUENraXBTYm94KAorICAgIElOICBVQ0hBUiAgICAgICAgICAgICAgIGEpOworCitWT0lEIHhvcl8zMigKKyAgICBJTiAgUFVDSEFSICAgICAgICAgICAgICBhLAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGIsCisgICAgT1VUIFBVQ0hBUiAgICAgICAgICAgICAgb3V0KTsKKworVk9JRCBuZXh0X2tleSgKKyAgICBJTiAgUFVDSEFSICAgICAgICAgICAgICBrZXksCisgICAgSU4gIElOVCAgICAgICAgICAgICAgICAgcm91bmQpOworCitWT0lEIGJ5dGVfc3ViKAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGluLAorICAgIE9VVCBQVUNIQVIgICAgICAgICAgICAgIG91dCk7CisKK1ZPSUQgc2hpZnRfcm93KAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGluLAorICAgIE9VVCBQVUNIQVIgICAgICAgICAgICAgIG91dCk7CisKK1ZPSUQgbWl4X2NvbHVtbigKKyAgICBJTiAgUFVDSEFSICAgICAgICAgICAgICBpbiwKKyAgICBPVVQgUFVDSEFSICAgICAgICAgICAgICBvdXQpOworCitWT0lEIFJUTVBBZXNFbmNyeXB0KAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGtleSwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgICAgICBkYXRhLAorICAgIElOICBQVUNIQVIgICAgICAgICAgICAgIGNpcGhlcnRleHQpOworCitWT0lEIFJUTVBNaWNGaW5hbCgKKyAgICBJTiAgUE1JQ19DT05URVhUICAgICAgICBwQ29udGV4dCwKKyAgICBPVVQgVUNIQVIgICAgICAgICAgICAgICBkaWdlc3RbNF0pOworCitWT0lEIFJUTVBDa2lwSW5zZXJ0Q01JQygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKyAgICBPVVQgUFVDSEFSICAgICAgICAgIHBNSUMsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBwODAyMTFoZHIsCisgICAgSU4gIFBORElTX1BBQ0tFVCAgICBwUGFja2V0LAorICAgIElOICBQQ0lQSEVSX0tFWSAgICAgcEtleSwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIG1pY19zbmFwKTsKKworI2VuZGlmIC8vX19SVE1QX0NLSVBNSUNfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXBfZGVmLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXBfZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5OWY3YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvcnRtcF9kZWYuaApAQCAtMCwwICsxLDE1NTkgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisgICAgcnRtcF9kZWYuaAorCisgICAgQWJzdHJhY3Q6CisgICAgTWluaXBvcnQgcmVsYXRlZCBkZWZpbml0aW9uIGhlYWRlcgorCisgICAgUmV2aXNpb24gSGlzdG9yeToKKyAgICBXaG8gICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKKyAgICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBQYXVsIExpbiAgICAwOC0wMS0yMDAyICAgIGNyZWF0ZWQKKyAgICBKb2huIENoYW5nICAwOC0wNS0yMDAzICAgIGFkZCBkZWZpbml0aW9uIGZvciAxMWcgJiBvdGhlciBkcmFmdHMKKyovCisjaWZuZGVmIF9fUlRNUF9ERUZfSF9fCisjZGVmaW5lIF9fUlRNUF9ERUZfSF9fCisKKyNpbmNsdWRlICJvaWQuaCIKKworI3VuZGVmIEFQX1dTQ19JTkNMVURFRAorI3VuZGVmIFNUQV9XU0NfSU5DTFVERUQKKyN1bmRlZiBXU0NfSU5DTFVERUQKKworCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZiBkZWZpbmVkKEFQX1dTQ19JTkNMVURFRCkgfHwgZGVmaW5lZChTVEFfV1NDX0lOQ0xVREVEKQorI2RlZmluZSBXU0NfSU5DTFVERUQKKyNlbmRpZgorLy8KKy8vICBEZWJ1ZyBpbmZvcm1hdGlvbiB2ZXJib3NpdHk6IGxvd2VyIHZhbHVlcyBpbmRpY2F0ZSBoaWdoZXIgdXJnZW5jeQorLy8KKyNkZWZpbmUgUlRfREVCVUdfT0ZGICAgICAgICAwCisjZGVmaW5lIFJUX0RFQlVHX0VSUk9SICAgICAgMQorI2RlZmluZSBSVF9ERUJVR19XQVJOICAgICAgIDIKKyNkZWZpbmUgUlRfREVCVUdfVFJBQ0UgICAgICAzCisjZGVmaW5lIFJUX0RFQlVHX0lORk8gICAgICAgNAorI2RlZmluZSBSVF9ERUJVR19MT1VEICAgICAgIDUKKworI2RlZmluZSBOSUNfVEFHICAgICAgICAgICAgICgoVUxPTkcpJzA2ODInKQorI2RlZmluZSBOSUNfREJHX1NUUklORyAgICAgICgiKipSVDI4eHgqKiIpCisKKyNpZmRlZiBTTk1QX1NVUFBPUlQKKy8vIGZvciBzbm1wCisvLyB0byBnZXQgbWFudWZhY3R1cmVyIE9VSSwga2F0aHksIDIwMDhfMDIyMAorI2RlZmluZSBNYW51ZmFjdHVyZXJPVUlfTEVOCQkJMworI2RlZmluZSBNYW51ZmFjdHVyZXJOQU1FCQkJKCJSYWxpbmsgVGVjaG5vbG9neSBDb21wYW55LiIpCisjZGVmaW5lCVJlc291cmNlVHlwZUlkTmFtZQkJCSgiUmFsaW5rX0lEIikKKyNlbmRpZgorCisKKy8vI2RlZmluZSBQQUNLRUQKKworI2RlZmluZSBSQUxJTktfMjg4M19WRVJTSU9OCQkoKFVJTlQzMikweDI4ODMwMzAwKQorI2RlZmluZSBSQUxJTktfMjg4MEVfVkVSU0lPTgkoKFVJTlQzMikweDI4NzIwMjAwKQorI2RlZmluZSBSQUxJTktfMzA3MF9WRVJTSU9OCQkoKFVJTlQzMikweDMwNzAwMjAwKQorCisvLworLy8gTkRJUyB2ZXJzaW9uIGluIHVzZSBieSB0aGUgTklDIGRyaXZlci4KKy8vIFRoZSBoaWdoIGJ5dGUgaXMgdGhlIG1ham9yIHZlcnNpb24uIFRoZSBsb3cgYnl0ZSBpcyB0aGUgbWlub3IgdmVyc2lvbi4KKy8vCisjaWZkZWYgIE5ESVM1MV9NSU5JUE9SVAorI2RlZmluZSBOSUNfRFJJVkVSX1ZFUlNJT04gICAgICAweDA1MDEKKyNlbHNlCisjZGVmaW5lIE5JQ19EUklWRVJfVkVSU0lPTiAgICAgIDB4MDUwMAorI2VuZGlmCisKKy8vCisvLyBORElTIG1lZGlhIHR5cGUsIGN1cnJlbnQgaXMgZXRoZXJuZXQsIGNoYW5nZSBpZiBuYXRpdmUgd2lyZWxlc3Mgc3VwcG9ydGVkCisvLworI2RlZmluZSBOSUNfTUVESUFfVFlQRSAgICAgICAgICBOZGlzTWVkaXVtODAyXzMKKyNkZWZpbmUgTklDX1BDSV9IRFJfTEVOR1RIICAgICAgMHhlMgorI2RlZmluZSBOSUNfTUFYX1BBQ0tFVF9TSVpFICAgICAyMzA0CisjZGVmaW5lIE5JQ19IRUFERVJfU0laRSAgICAgICAgIDE0CisjZGVmaW5lIE1BWF9NQVBfUkVHSVNURVJTX05FRURFRCAzMgorI2RlZmluZSBNSU5fTUFQX1JFR0lTVEVSU19ORUVERUQgMiAgIC8vVG9kbzogc2hvdWxkIGNvbnNpZGVyIGZyYWdtZW50IGlzc3VlLgorCisvLworLy8gaW50ZXJmYWNlIHR5cGUsIHdlIHVzZSBQQ0kKKy8vCisjZGVmaW5lIE5JQ19JTlRFUkZBQ0VfVFlQRSAgICAgIE5kaXNJbnRlcmZhY2VQY2kKKyNkZWZpbmUgTklDX0lOVEVSUlVQVF9NT0RFICAgICAgTmRpc0ludGVycnVwdExldmVsU2Vuc2l0aXZlCisKKy8vCisvLyBidWZmZXIgc2l6ZSBwYXNzZWQgaW4gTmRpc01RdWVyeUFkYXB0ZXJSZXNvdXJjZXMKKy8vIFdlIHNob3VsZCBvbmx5IG5lZWQgdGhyZWUgYWRhcHRlciByZXNvdXJjZXMgKElPLCBpbnRlcnJ1cHQgYW5kIG1lbW9yeSksCisvLyBTb21lIGRldmljZXMgZ2V0IGV4dHJhIHJlc291cmNlcywgc28gaGF2ZSByb29tIGZvciAxMCByZXNvdXJjZXMKKy8vICAgICAgICAgICAgICAgICAgICBVRl9TSVpFICAgKHNpemVvZihORElTX1JFU09VUkNFX0xJU1QpICsgKDEwKnNpemVvZihDTV9QQVJUSUFMX1JFU09VUkNFX0RFU0NSSVBUT1IpKSkKKworCisjZGVmaW5lIE5JQ19SRVNPVVJDRV9CLy8KKy8vIElPIHNwYWNlIGxlbmd0aAorLy8KKyNkZWZpbmUgTklDX01BUF9JT1NQQUNFX0xFTkdUSCAgc2l6ZW9mKENTUl9TVFJVQykKKworI2RlZmluZSBNQVhfUlhfUEtUX0xFTgkxNTIwCisKKy8vCisvLyBFbnRyeSBudW1iZXIgZm9yIGVhY2ggRE1BIGRlc2NyaXB0b3IgcmluZworLy8KKworCisjaWZkZWYgUlQyODcwCisjZGVmaW5lIFRYX1JJTkdfU0laRSAgICAgICAgICAgIDggLy8gMQorI2RlZmluZSBQUklPX1JJTkdfU0laRSAgICAgICAgICA4CisjZGVmaW5lIE1HTVRfUklOR19TSVpFICAgICAgIDMyIC8vIFBSSU9fUklOR19TSVpFCisjZGVmaW5lIFJYX1JJTkdfU0laRSAgICAgICAgICAgIDgKKyNkZWZpbmUgTUFYX1RYX1BST0NFU1MgICAgICAgICAgNAorI2RlZmluZSBMT0NBTF9UWEJVRl9TSVpFICAgICAgICAyMDQ4CisjZW5kaWYgLy8gUlQyODcwIC8vCisKKyNpZmRlZiBNVUxUSVBMRV9DQVJEX1NVUFBPUlQKKy8vIE1DOiBNdWx0cGxlIENhcmRzCisjZGVmaW5lIE1BWF9OVU1fT0ZfTVVMVElQTEVfQ0FSRAkJMzIKKyNlbmRpZiAvLyBNVUxUSVBMRV9DQVJEX1NVUFBPUlQgLy8KKworI2RlZmluZSBNQVhfUlhfUFJPQ0VTUyAgICAgICAgICAxMjggLy82NCAvLzMyCisjZGVmaW5lIE5VTV9PRl9MT0NBTF9UWEJVRiAgICAgIDIKKyNkZWZpbmUgVFhEX1NJWkUgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgVFhXSV9TSVpFICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgUlhEX1NJWkUgICAgICAgICAgICAgICAJMTYKKyNkZWZpbmUgUlhXSV9TSVpFICAgICAgICAgICAgIAkxNgorLy8gVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkUgKyA4MDIuMTEgSGVhZGVyIFNpemUgKyBBTVNEVSBzdWIgZnJhbWUgaGVhZGVyCisjZGVmaW5lIFRYX0RNQV8xU1RfQlVGRkVSX1NJWkUgIDk2ICAgIC8vIG9ubHkgdGhlIDFzdCBwaHlzaWNhbCBidWZmZXIgaXMgcHJlLWFsbG9jYXRlZAorI2RlZmluZSBNR01UX0RNQV9CVUZGRVJfU0laRSAgICAxNTM2IC8vMjA0OAorI2RlZmluZSBSWF9CVUZGRVJfQUdHUkVTSVpFICAgICAzODQwIC8vMzkwNCAvLzM5NjggLy80MDk2IC8vMjA0OCAvLzQwOTYKKyNkZWZpbmUgUlhfQlVGRkVSX05PUk1TSVpFICAgICAgMzg0MCAvLzM5MDQgLy8zOTY4IC8vNDA5NiAvLzIwNDggLy80MDk2CisjZGVmaW5lIFRYX0JVRkZFUl9OT1JNU0laRQkJUlhfQlVGRkVSX05PUk1TSVpFCisjZGVmaW5lIE1BWF9GUkFNRV9TSVpFICAgICAgICAgIDIzNDYgICAgICAgICAgICAgICAgICAgIC8vIE1heGltdW0gODAyLjExIGZyYW1lIHNpemUKKyNkZWZpbmUgTUFYX0FHR1JFR0FUSU9OX1NJWkUgICAgMzg0MCAvLzM5MDQgLy8zOTY4IC8vNDA5NgorI2RlZmluZSBNQVhfTlVNX09GX1RVUExFX0NBQ0hFICAyCisjZGVmaW5lIE1BWF9NQ0FTVF9MSVNUX1NJWkUgICAgIDMyCisjZGVmaW5lIE1BWF9MRU5fT0ZfVkVORE9SX0RFU0MgIDY0CisvLyNkZWZpbmUgTUFYX1NJWkVfT0ZfTUNBU1RfUFNRICAgKE5VTV9PRl9MT0NBTF9UWEJVRiA+PiAyKSAvLyBBUCB3b24ndCBzcGVuZCBtb3JlIHRoYW4gMS80IG9mIHRvdGFsIGJ1ZmZlcnMgb24gTS9CQ0FTVCBQU1EKKyNkZWZpbmUgTUFYX1NJWkVfT0ZfTUNBU1RfUFNRICAgICAgICAgICAgICAgMzIKKworI2RlZmluZSBNQVhfUlhfUFJPQ0VTU19DTlQJKFJYX1JJTkdfU0laRSkKKworCisjZGVmaW5lIE1BWF9QQUNLRVRTX0lOX1FVRVVFCQkJCSg1MTIpIC8vKDUxMikgICAgLy8gdG8gcGFzcyBXTU0gQTUtV1BBUFNLCisjZGVmaW5lIE1BWF9QQUNLRVRTX0lOX01DQVNUX1BTX1FVRVVFCQkzMgorI2RlZmluZSBNQVhfUEFDS0VUU19JTl9QU19RVUVVRQkJCQkxMjgJLy8zMgorI2RlZmluZSBXTU1fTlVNX09GX0FDICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBBQzAsIEFDMSwgQUMyLCBhbmQgQUMzICovCisKKworLy8yMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlPC0tCisjZGVmaW5lIE1BWF9FRVBST01fQklOX0ZJTEVfU0laRQkJCQkJMTAyNAorLy8yMDA4LzA5LzExOktIIGFkZCB0byBzdXBwb3J0IGVmdXNlLS0+CisKKy8vIFJ4RmlsdGVyCisjZGVmaW5lIFNUQU5PUk1BTAkgMHgxN2Y5NworI2RlZmluZSBBUE5PUk1BTAkgMHgxNWY5NworLy8KKy8vICBSVE1QX0FEQVBURVIgZmxhZ3MKKy8vCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfTUFQX1JFR0lTVEVSICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBmUlRNUF9BREFQVEVSX0hBUkRXQVJFX0VSUk9SICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIGZSVE1QX0FEQVBURVJfU0NBVFRFUl9HQVRIRVIgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9TRU5EX1BBQ0tFVF9FUlJPUiAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBmUlRNUF9BREFQVEVSX01MTUVfUkVTRVRfSU5fUFJPR1JFU1MgMHgwMDAwMDAyMAorI2RlZmluZSBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBmUlRNUF9BREFQVEVSX1RYX1JJTkdfQUxMT0NBVEVEICAgICAweDAwMDAwMjAwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfUkVNT1ZFX0lOX1BST0dSRVNTICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9NSU1PUkFURV9JTlVTRUQgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBmUlRNUF9BREFQVEVSX1JYX1JJTkdfQUxMT0NBVEVEICAgICAweDAwMDAxMDAwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0FDVElWRSAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUyAgMHgwMDAwNDAwMAorI2RlZmluZQlmUlRNUF9BREFQVEVSX1JFQVNTT0NfSU5fUFJPR1JFU1MJMHgwMDAwODAwMAorI2RlZmluZQlmUlRNUF9BREFQVEVSX01FRElBX1NUQVRFX1BFTkRJTkcJMHgwMDAxMDAwMAorI2RlZmluZQlmUlRNUF9BREFQVEVSX1JBRElPX09GRgkJCQkweDAwMDIwMDAwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfQlVMS09VVF9SRVNFVAkJCTB4MDAwNDAwMDAKKyNkZWZpbmUJZlJUTVBfQURBUFRFUl9CVUxLSU5fUkVTRVQJCQkweDAwMDgwMDAwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfUkRHX0FDVElWRQkJCTB4MDAxMDAwMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9EWU5BTUlDX0JFX1RYT1BfQUNUSVZFIDB4MDAyMDAwMDAKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9TQ0FOXzIwNDAgCQkJMHgwNDAwMDAwMAorI2RlZmluZQlmUlRNUF9BREFQVEVSX1JBRElPX01FQVNVUkVNRU5UCQkweDA4MDAwMDAwCisKKyNkZWZpbmUgZlJUTVBfQURBUFRFUl9TVEFSVF9VUCAgICAgICAgIAkJMHgxMDAwMDAwMAkvL0Rldml2ZSBhbHJlYWR5IGluaXRpYWxpemVkIGFuZCBlbmFibGVkIFR4L1J4LgorI2RlZmluZSBmUlRNUF9BREFQVEVSX01FRElBX1NUQVRFX0NIQU5HRSAgICAweDIwMDAwMDAwCisjZGVmaW5lIGZSVE1QX0FEQVBURVJfSURMRV9SQURJT19PRkYgICAgICAgIDB4NDAwMDAwMDAKKworLy8gTG9jayBiaXQgZm9yIGFjY2Vzc2luZyBkaWZmZXJlbnQgcmluZyBidWZmZXJzCisvLyNkZWZpbmUgZlJUTVBfQURBUFRFUl9UWF9SSU5HX0JVU1kgICAgICAgIDB4ODAwMDAwMDAKKy8vI2RlZmluZSBmUlRNUF9BREFQVEVSX01HTVRfUklOR19CVVNZICAgICAgMHg0MDAwMDAwMAorLy8jZGVmaW5lIGZSVE1QX0FEQVBURVJfQVRJTV9SSU5HX0JVU1kgICAgICAweDIwMDAwMDAwCisvLyNkZWZpbmUgZlJUTVBfQURBUFRFUl9SWF9SSU5HX0JVU1kgICAgICAgIDB4MTAwMDAwMDAKKworLy8gTG9jayBiaXQgZm9yIGFjY2Vzc2luZyBkaWZmZXJlbnQgcXVldWUKKy8vI2RlZmluZSAgIGZSVE1QX0FEQVBURVJfVFhfUVVFVUVfQlVTWSAgICAgMHgwODAwMDAwMAorLy8jZGVmaW5lICAgZlJUTVBfQURBUFRFUl9NR01UX1FVRVVFX0JVU1kgICAweDA0MDAwMDAwCisKKy8vCisvLyAgU1RBIG9wZXJhdGlvbiBzdGF0dXMgZmxhZ3MKKy8vCisjZGVmaW5lIGZPUF9TVEFUVVNfSU5GUkFfT04gICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgZk9QX1NUQVRVU19BREhPQ19PTiAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBmT1BfU1RBVFVTX0JHX1BST1RFQ1RJT05fSU5VU0VEICAgICAweDAwMDAwMDA0CisjZGVmaW5lIGZPUF9TVEFUVVNfU0hPUlRfU0xPVF9JTlVTRUQgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgZk9QX1NUQVRVU19TSE9SVF9QUkVBTUJMRV9JTlVTRUQgICAgMHgwMDAwMDAxMAorI2RlZmluZSBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSAgICAgICAgICAgICAweDAwMDAwMDIwCisvLyNkZWZpbmUgZk9QX1NUQVRVU19UWF9SQVRFX1NXSVRDSF9FTkFCTEVEICAgMHgwMDAwMDA0MAorI2RlZmluZSBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCAgICAweDAwMDAwMDgwCisjZGVmaW5lIGZPUF9TVEFUVVNfV01NX0lOVVNFRCAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBmT1BfU1RBVFVTX0RPWkUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwICAvLyBkZWJ1ZyBwdXJwb3NlCisjZGVmaW5lIGZPUF9TVEFUVVNfUElHR1lCQUNLX0lOVVNFRCAgICAgICAgIDB4MDAwMDA4MDAgIC8vIHBpZ2d5LWJhY2ssIGFuZCBhZ2dyZWdhdGlvbgorI2RlZmluZSBmT1BfU1RBVFVTX0FQU0RfSU5VU0VECQkJCTB4MDAwMDEwMDAKKyNkZWZpbmUgZk9QX1NUQVRVU19UWF9BTVNEVV9JTlVTRUQJCQkweDAwMDAyMDAwCisjZGVmaW5lIGZPUF9TVEFUVVNfTUFYX1JFVFJZX0VOQUJMRUQJCTB4MDAwMDQwMDAKKyNkZWZpbmUgZk9QX1NUQVRVU19XQUtFVVBfTk9XICAgICAgICAgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBmT1BfU1RBVFVTX0FEVkFOQ0VfUE9XRVJfU0FWRV9QQ0lFX0RFVklDRSAgICAgICAweDAwMDIwMDAwCisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisjZGVmaW5lIGZPUF9TVEFUVVNfU0NBTl8yMDQwICAgICAgICAgICAgICAgCSAgICAweDAwMDQwMDAwCisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworCisjZGVmaW5lIENDS1NFVFBST1RFQ1QJCTB4MQorI2RlZmluZSBPRkRNU0VUUFJPVEVDVAkJMHgyCisjZGVmaW5lIE1NMjBTRVRQUk9URUNUCQkweDQKKyNkZWZpbmUgTU00MFNFVFBST1RFQ1QJCTB4OAorI2RlZmluZSBHRjIwU0VUUFJPVEVDVAkJMHgxMAorI2RlZmluZSBHUjQwU0VUUFJPVEVDVAkJMHgyMAorI2RlZmluZSBBTExOX1NFVFBST1RFQ1QJCShHUjQwU0VUUFJPVEVDVCB8IEdGMjBTRVRQUk9URUNUIHwgTU00MFNFVFBST1RFQ1QgfCBNTTIwU0VUUFJPVEVDVCkKKworLy8KKy8vICBBUCdzIGNsaWVudCB0YWJsZSBvcGVyYXRpb24gc3RhdHVzIGZsYWdzCisvLworI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19XTU1fQ0FQQUJMRSAgICAgICAgICAweDAwMDAwMDAxICAvLyBDTElFTlQgY2FuIHBhcnNlIFFPUyBEQVRBIGZyYW1lCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX0FHR1JFR0FUSU9OX0NBUEFCTEUgIDB4MDAwMDAwMDIgIC8vIENMSUVOVCBjYW4gcmVjZWl2ZSBSYWxpbmsncyBwcm9wcmlldGFyeSBUWCBhZ2dyZWdhdGlvbiBmcmFtZQorI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19QSUdHWUJBQ0tfQ0FQQUJMRSAgICAweDAwMDAwMDA0ICAvLyBDTElFTlQgc3VwcG9ydCBwaWdneS1iYWNrCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX0FNU0RVX0lOVVNFRAkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfU0dJMjBfQ0FQQUJMRQkJMHgwMDAwMDAxMAorI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19TR0k0MF9DQVBBQkxFCQkweDAwMDAwMDIwCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX1R4U1RCQ19DQVBBQkxFCQkweDAwMDAwMDQwCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX1J4U1RCQ19DQVBBQkxFCQkweDAwMDAwMDgwCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX0hUQ19DQVBBQkxFCQkJMHgwMDAwMDEwMAorI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRQkJCTB4MDAwMDAyMDAKKyNkZWZpbmUgZkNMSUVOVF9TVEFUVVNfTUNTRkVFREJBQ0tfQ0FQQUJMRSAgMHgwMDAwMDQwMAorI2RlZmluZSBmQ0xJRU5UX1NUQVRVU19BUFNEX0NBUEFCTEUgICAgICAgICAweDAwMDAwODAwICAvKiBVQVBTRCBTVEFUSU9OICovCisKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX0JTU0NPRVhJU1RfQ0FQQUJMRQkweDAwMDAxMDAwCisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworCisjZGVmaW5lIGZDTElFTlRfU1RBVFVTX1JBTElOS19DSElQU0VUCQkweDAwMTAwMDAwCisvLworLy8gIFNUQSBjb25maWd1cmF0aW9uIGZsYWdzCisvLworLy8jZGVmaW5lIGZTVEFfQ0ZHX0VOQUJMRV9UWF9CVVJTVCAgICAgICAgICAweDAwMDAwMDAxCisKKy8vIDgwMi4xMW4gT3BlcmF0aW5nIE1vZGUgRGVmaW5pdGlvbi4gMC0zIGFsc28gdXNlZCBpbiBBU0lDVVBkYXRlUHJvdGVjdCBzd2l0Y2ggY2FzZQorI2RlZmluZSBIVF9OT19QUk9URUNUCTAKKyNkZWZpbmUgSFRfTEVHQUNZX1BST1RFQ1QJMQorI2RlZmluZSBIVF80MF9QUk9URUNUCTIKKyNkZWZpbmUgSFRfMjA0MF9QUk9URUNUCTMKKyNkZWZpbmUgSFRfUlRTQ1RTXzZNCTcKKy8vZm9sbG93aW5nIGlzIG91ciBvd24gZGVmaW5pdGlvbiBpbiBvcmRlciB0byB0dXJuIG9uIG91ciBBU0lDIHByb3RlY3Rpb24gcmVnaXN0ZXIgaW4gSU5GUkFTVFJVQ1RVUkUuCisjZGVmaW5lIEhUX0FUSEVST1MJOAorI2RlZmluZSBIVF9GT1JDRVJUU0NUUwk5CS8vIEZvcmNlIHR1cm4gb24gUlRTL0NUUyBmaXJzdC4gdGhlbiBnbyB0byBldmFsdWF0ZSBpZiB0aGlzIGZvcmNlIFJUUyBpcyBuZWNlc3NhcnkuCisKKy8vCisvLyBSWCBQYWNrZXQgRmlsdGVyIGNvbnRyb2wgZmxhZ3MuIEFwcGx5IG9uIHBBZC0+UGFja2V0RmlsdGVyCisvLworI2RlZmluZSBmUlhfRklMVEVSX0FDQ0VQVF9ESVJFQ1QgICAgICAgICAgICBORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVECisjZGVmaW5lIGZSWF9GSUxURVJfQUNDRVBUX01VTFRJQ0FTVCAgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfTVVMVElDQVNUCisjZGVmaW5lIGZSWF9GSUxURVJfQUNDRVBUX0JST0FEQ0FTVCAgICAgICAgIE5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUCisjZGVmaW5lIGZSWF9GSUxURVJfQUNDRVBUX0FMTF9NVUxUSUNBU1QgICAgIE5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVAorCisvLworLy8gRXJyb3IgY29kZSBzZWN0aW9uCisvLworLy8gTkRJU19FUlJPUl9DT0RFX0FEQVBURVJfTk9UX0ZPVU5ECisjZGVmaW5lIEVSUkxPR19SRUFEX1BDSV9TTE9UX0ZBSUxFRCAgICAgMHgwMDAwMDEwMUwKKyNkZWZpbmUgRVJSTE9HX1dSSVRFX1BDSV9TTE9UX0ZBSUxFRCAgICAweDAwMDAwMTAyTAorI2RlZmluZSBFUlJMT0dfVkVORE9SX0RFVklDRV9OT01BVENIICAgIDB4MDAwMDAxMDNMCisKKy8vIE5ESVNfRVJST1JfQ09ERV9BREFQVEVSX0RJU0FCTEVECisjZGVmaW5lIEVSUkxPR19CVVNfTUFTVEVSX0RJU0FCTEVEICAgICAgMHgwMDAwMDIwMUwKKworLy8gTkRJU19FUlJPUl9DT0RFX1VOU1VQUE9SVEVEX0NPTkZJR1VSQVRJT04KKyNkZWZpbmUgRVJSTE9HX0lOVkFMSURfU1BFRURfRFVQTEVYICAgICAweDAwMDAwMzAxTAorI2RlZmluZSBFUlJMT0dfU0VUX1NFQ09OREFSWV9GQUlMRUQgICAgIDB4MDAwMDAzMDJMCisKKy8vIE5ESVNfRVJST1JfQ09ERV9PVVRfT0ZfUkVTT1VSQ0VTCisjZGVmaW5lIEVSUkxPR19PVVRfT0ZfTUVNT1JZICAgICAgICAgICAgMHgwMDAwMDQwMUwKKyNkZWZpbmUgRVJSTE9HX09VVF9PRl9TSEFSRURfTUVNT1JZICAgICAweDAwMDAwNDAyTAorI2RlZmluZSBFUlJMT0dfT1VUX09GX01BUF9SRUdJU1RFUlMgICAgIDB4MDAwMDA0MDNMCisjZGVmaW5lIEVSUkxPR19PVVRfT0ZfQlVGRkVSX1BPT0wgICAgICAgMHgwMDAwMDQwNEwKKyNkZWZpbmUgRVJSTE9HX09VVF9PRl9ORElTX0JVRkZFUiAgICAgICAweDAwMDAwNDA1TAorI2RlZmluZSBFUlJMT0dfT1VUX09GX1BBQ0tFVF9QT09MICAgICAgIDB4MDAwMDA0MDZMCisjZGVmaW5lIEVSUkxPR19PVVRfT0ZfTkRJU19QQUNLRVQgICAgICAgMHgwMDAwMDQwN0wKKyNkZWZpbmUgRVJSTE9HX09VVF9PRl9MT09LQVNJREVfTUVNT1JZICAweDAwMDAwNDA4TAorCisvLyBORElTX0VSUk9SX0NPREVfSEFSRFdBUkVfRkFJTFVSRQorI2RlZmluZSBFUlJMT0dfU0VMRlRFU1RfRkFJTEVEICAgICAgICAgIDB4MDAwMDA1MDFMCisjZGVmaW5lIEVSUkxPR19JTklUSUFMSVpFX0FEQVBURVIgICAgICAgMHgwMDAwMDUwMkwKKyNkZWZpbmUgRVJSTE9HX1JFTU9WRV9NSU5JUE9SVCAgICAgICAgICAweDAwMDAwNTAzTAorCisvLyBORElTX0VSUk9SX0NPREVfUkVTT1VSQ0VfQ09ORkxJQ1QKKyNkZWZpbmUgRVJSTE9HX01BUF9JT19TUEFDRSAgICAgICAgICAgICAweDAwMDAwNjAxTAorI2RlZmluZSBFUlJMT0dfUVVFUllfQURBUFRFUl9SRVNPVVJDRVMgIDB4MDAwMDA2MDJMCisjZGVmaW5lIEVSUkxPR19OT19JT19SRVNPVVJDRSAgICAgICAgICAgMHgwMDAwMDYwM0wKKyNkZWZpbmUgRVJSTE9HX05PX0lOVEVSUlVQVF9SRVNPVVJDRSAgICAweDAwMDAwNjA0TAorI2RlZmluZSBFUlJMT0dfTk9fTUVNT1JZX1JFU09VUkNFICAgICAgIDB4MDAwMDA2MDVMCisKKworLy8gV0RTIGRlZmluaXRpb24KKyNkZWZpbmUJTUFYX1dEU19FTlRSWSAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgV0RTX1BBSVJXSVNFX0tFWV9PRkZTRVQgICAgIDYwICAgIC8vIFdEUyBsaW5rcyB1c2VzIHBhaXJ3aXNlIGtleSM2MCB+IDYzIGluIEFTSUMgcGFpcndpc2Uga2V5IHRhYmxlCisKKyNkZWZpbmUJV0RTX0RJU0FCTEVfTU9ERSAgICAgICAgICAgIDAKKyNkZWZpbmUJV0RTX1JFU1RSSUNUX01PREUgICAgICAgICAgIDEKKyNkZWZpbmUJV0RTX0JSSURHRV9NT0RFICAgICAgICAgICAgIDIKKyNkZWZpbmUJV0RTX1JFUEVBVEVSX01PREUgICAgICAgICAgIDMKKyNkZWZpbmUJV0RTX0xBWllfTU9ERSAgICAgICAgICAgICAgIDQKKworCisjZGVmaW5lIE1BWF9NRVNIX05VTQkJCQkwCisKKyNkZWZpbmUgTUFYX0FQQ0xJX05VTQkJCQkwCisKKyNkZWZpbmUgTUFYX01CU1NJRF9OVU0JCQkJMQorI2lmZGVmIE1CU1NfU1VQUE9SVAorI3VuZGVmCU1BWF9NQlNTSURfTlVNCisjZGVmaW5lIE1BWF9NQlNTSURfTlVNCQkJCSg4IC0gTUFYX01FU0hfTlVNIC0gTUFYX0FQQ0xJX05VTSkKKyNlbmRpZiAvLyBNQlNTX1NVUFBPUlQgLy8KKworLyogc2FuaXR5IGNoZWNrIGZvciBhcGlkeCAqLworI2RlZmluZSBNQlNTX01SX0FQSURYX1NBTklUWV9DSEVDSyhhcGlkeCkgXAorICAgIHsgaWYgKGFwaWR4ID4gTUFYX01CU1NJRF9OVU0pIHsgXAorICAgICAgICAgIHByaW50aygiJXM+IEVycm9yISBhcGlkeCA9ICVkID4gTUFYX01CU1NJRF9OVU0hXG4iLCBfX0ZVTkNUSU9OX18sIGFwaWR4KTsgXAorCSAgYXBpZHggPSBNQUlOX01CU1NJRDsgfSB9CisKKyNkZWZpbmUgVkFMSURfV0NJRChfd2NpZCkJKChfd2NpZCkgPiAwICYmIChfd2NpZCkgPCBNQVhfTEVOX09GX01BQ19UQUJMRSApCisKKyNkZWZpbmUgTUFJTl9NQlNTSUQgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRklSU1RfTUJTU0lEICAgICAgICAgICAgICAgIDEKKworCisjZGVmaW5lIE1BWF9CRUFDT05fU0laRQkJCQk1MTIKKy8vIElmIHRoZSBNQVhfTUJTU0lEX05VTSBpcyBsYXJnZXIgdGhhbiA2LAorLy8gaXQgc2hhbGwgcmVzZXJ2ZSBzb21lIFdDSUQgc3BhY2Uod2NpZCAyMjJ+MjUzKSBmb3IgYmVhY29uIGZyYW1lcy4KKy8vIC0JdGhlc2Ugd2NpZCAyMzh+MjUzIGFyZSByZXNlcnZlZCBmb3IgYmVhY29uIzYocmE2KS4KKy8vIC0JdGhlc2Ugd2NpZCAyMjJ+MjM3IGFyZSByZXNlcnZlZCBmb3IgYmVhY29uIzcocmE3KS4KKyNpZiBkZWZpbmVkKE1BWF9NQlNTSURfTlVNKSAmJiAoTUFYX01CU1NJRF9OVU0gPT0gOCkKKyNkZWZpbmUgSFdfUkVTRVJWRURfV0NJRAkyMjIKKyNlbGlmIGRlZmluZWQoTUFYX01CU1NJRF9OVU0pICYmIChNQVhfTUJTU0lEX05VTSA9PSA3KQorI2RlZmluZSBIV19SRVNFUlZFRF9XQ0lECTIzOAorI2Vsc2UKKyNkZWZpbmUgSFdfUkVTRVJWRURfV0NJRAkyNTUKKyNlbmRpZgorCisvLyBUaGVuIGRlZGljYXRlIHdjaWQgb2YgREZTIGFuZCBDYXJyaWVyLVNlbnNlLgorI2RlZmluZSBERlNfQ1RTX1dDSUQgCQkoSFdfUkVTRVJWRURfV0NJRCAtIDEpCisjZGVmaW5lIENTX0NUU19XQ0lEIAkJKEhXX1JFU0VSVkVEX1dDSUQgLSAyKQorI2RlZmluZSBMQVNUX1NQRUNJRklDX1dDSUQJKEhXX1JFU0VSVkVEX1dDSUQgLSAyKQorCisvLyBJZiBNQVhfTUJTU0lEX05VTSBpcyA4LCB0aGUgbWF4aW11bSBhdmFpbGFibGUgd2NpZCBmb3IgdGhlIGFzc29jaWF0ZWQgU1RBIGlzIDIxMS4KKy8vIElmIE1BWF9NQlNTSURfTlVNIGlzIDcsIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSB3Y2lkIGZvciB0aGUgYXNzb2NpYXRlZCBTVEEgaXMgMjI4LgorI2RlZmluZSBNQVhfQVZBSUxBQkxFX0NMSUVOVF9XQ0lECShMQVNUX1NQRUNJRklDX1dDSUQgLSBNQVhfTUJTU0lEX05VTSAtIDEpCisKKy8vIFRYIG5lZWQgV0NJRCB0byBmaW5kIENpcGhlciBLZXkKKy8vIHRoZXNlIHdjaWQgMjEyIH4gMjE5IGFyZSByZXNlcnZlZCBmb3IgYmMvbWMgcGFja2V0cyBpZiBNQVhfTUJTU0lEX05VTSBpcyA4LgorI2RlZmluZSBHRVRfR3JvdXBLZXlfV0NJRChfX3djaWQsIF9fYnNzaWR4KSBcCisJewkJCQkJCQkJCQlcCisJCV9fd2NpZCA9IExBU1RfU1BFQ0lGSUNfV0NJRCAtIChNQVhfTUJTU0lEX05VTSkgKyBfX2Jzc2lkeDsJXAorCX0KKworI2RlZmluZSBJc0dyb3VwS2V5V0NJRChfX3djaWQpICgoKF9fd2NpZCkgPCBMQVNUX1NQRUNJRklDX1dDSUQpICYmICgoX193Y2lkKSA+PSAoTEFTVF9TUEVDSUZJQ19XQ0lEIC0gKE1BWF9NQlNTSURfTlVNKSkpKQorCisKKy8vIGRlZmluaXRpb24gdG8gc3VwcG9ydCBtdWx0aXBsZSBCU1NJRAorI2RlZmluZSBCU1MwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQlNTMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEJTUzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBCU1MzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgQlNTNCAgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEJTUzUgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBCU1M2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgQlNTNyAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIExlbmd0aCBkZWZpbml0aW9ucworI2RlZmluZSBQRUVSX0tFWV9OTyAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgTUFDX0FERFJfTEVOICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFRJTUVTVEFNUF9MRU4gICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyAgICAgIE1BWF9MRU5HVEhfT0ZfU1VQUE9SVF9SQVRFUyAvLyAxLCAyLCA1LjUsIDExLCA2LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0CisjZGVmaW5lIE1BWF9MRU5fT0ZfS0VZICAgICAgICAgICAgICAgICAgMzIgICAgICAvLyAzMiBvY3RldHMgPT0gMjU2IGJpdHMsIFJlZGVmaW5lIGZvciBXUEEKKyNkZWZpbmUgTUFYX05VTV9PRl9DSEFOTkVMUyAgICAgICAgICAgICBNQVhfTlVNX09GX0NIUyAgICAgIC8vIDE0IGNoYW5uZWxzIEAyLjRHICsgIDEyQFVOSUkgKyA0IEBNTUFDICsgMTEgQEhpcGVyTEFOMiArIDcgQEphcGFuICsgMSBhcyBOVUxMIHRlcm1pbmF0aW9uCisjZGVmaW5lIE1BWF9OVU1fT0ZfMTFKQ0hBTk5FTFMgICAgICAgICAgICAgMjAgICAgICAvLyAxNCBjaGFubmVscyBAMi40RyArICAxMkBVTklJICsgNCBATU1BQyArIDExIEBIaXBlckxBTjIgKyA3IEBKYXBhbiArIDEgYXMgTlVMTCB0ZXJtaW5hdGlvbgorI2RlZmluZSBNQVhfTEVOX09GX1NTSUQgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIENJUEhFUl9URVhUX0xFTiAgICAgICAgICAgICAgICAgMTI4CisjZGVmaW5lIEhBU0hfVEFCTEVfU0laRSAgICAgICAgICAgICAgICAgMjU2CisjZGVmaW5lIE1BWF9WSUVfTEVOICAgICAgICAgICAgICAgICAgICAgMTAyNCAgIC8vIE5ldyBmb3IgV1BBIGNpcGhlciBzdWl0ZSB2YXJpYWJsZSBJRSBzaXplcy4KKyNkZWZpbmUgTUFYX1NVUFBPUlRfTUNTICAgICAgICAgICAgIDMyCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBBU0lDIFdDSUQgVGFibGUgZGVmaW5pdGlvbi4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjZGVmaW5lIEJTU0lEX1dDSUQJCTEJLy8gaW4gaW5mcmEgbW9kZSwgYWx3YXlzIHB1dCBic3NpZCB3aXRoIHRoaXMgV0NJRAorI2RlZmluZSBNQ0FTVF9XQ0lECTB4MAorI2RlZmluZSBCU1MwTWNhc3RfV0NJRAkweDAKKyNkZWZpbmUgQlNTMU1jYXN0X1dDSUQJMHhmOAorI2RlZmluZSBCU1MyTWNhc3RfV0NJRAkweGY5CisjZGVmaW5lIEJTUzNNY2FzdF9XQ0lECTB4ZmEKKyNkZWZpbmUgQlNTNE1jYXN0X1dDSUQJMHhmYgorI2RlZmluZSBCU1M1TWNhc3RfV0NJRAkweGZjCisjZGVmaW5lIEJTUzZNY2FzdF9XQ0lECTB4ZmQKKyNkZWZpbmUgQlNTN01jYXN0X1dDSUQJMHhmZQorI2RlZmluZSBSRVNFUlZFRF9XQ0lECQkweGZmCisKKyNkZWZpbmUgTUFYX05VTV9PRl9BQ0xfTElTVAkJCQlNQVhfTlVNQkVSX09GX0FDTAorCisjZGVmaW5lIE1BWF9MRU5fT0ZfTUFDX1RBQkxFICAgICAgICAgICAgTUFYX05VTUJFUl9PRl9NQUMgLy8gaWYgTUFYX01CU1NJRF9OVU0gaXMgOCwgdGhpcyB2YWx1ZSBjYW4ndCBiZSBsYXJnZXIgdGhhbiAyMTEKKworI2lmIE1BWF9MRU5fT0ZfTUFDX1RBQkxFPk1BWF9BVkFJTEFCTEVfQ0xJRU5UX1dDSUQKKyNlcnJvciBNQVhfTEVOX09GX01BQ19UQUJMRSBjYW4gbm90IGJlIGxhcmdlciB0aGFuIE1BWF9BVkFJTEFCTEVfQ0xJRU5UX1dDSUQhISEhCisjZW5kaWYKKworI2RlZmluZSBNQVhfTlVNX09GX1dEU19MSU5LX1BFUkJTU0lECSAgICAgICAgICAgIDMKKyNkZWZpbmUgTUFYX05VTV9PRl9XRFNfTElOSwkgICAgICAgICAgICAoTUFYX05VTV9PRl9XRFNfTElOS19QRVJCU1NJRCpNQVhfTUJTU0lEX05VTSkKKyNkZWZpbmUgTUFYX05VTV9PRl9FVkVOVCAgICAgICAgICAgICAgICBNQVhfTlVNQkVSX09GX0VWRU5UCisjZGVmaW5lIFdEU19MSU5LX1NUQVJUX1dDSUQJCQkJKE1BWF9MRU5fT0ZfTUFDX1RBQkxFLTEpCisKKyNkZWZpbmUgTlVNX09GX1RJRAkJCTgKKyNkZWZpbmUgTUFYX0FJRF9CQSAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBNQVhfTEVOX09GX0JBX1JFQ19UQUJMRSAgICAgICAgICAoKE5VTV9PRl9USUQgKiBNQVhfTEVOX09GX01BQ19UQUJMRSkvMikvLyAgIChOVU1fT0ZfVElEKk1BWF9BSURfQkEgKyAzMikJIC8vQmxvY2sgQUNLIHJlY2lwaWVudAorI2RlZmluZSBNQVhfTEVOX09GX0JBX09SSV9UQUJMRSAgICAgICAgICAoKE5VTV9PRl9USUQgKiBNQVhfTEVOX09GX01BQ19UQUJMRSkvMikvLyAgIChOVU1fT0ZfVElEKk1BWF9BSURfQkEgKyAzMikgICAvLyBCbG9jayBBQ0sgb3JpZ2luYXRvcgorI2RlZmluZSBNQVhfTEVOX09GX0JTU19UQUJMRSAgICAgICAgICAgICA2NAorI2RlZmluZSBNQVhfUkVPUkRFUklOR19NUERVX05VTQkJCSA1MTIKKworLy8ga2V5IHJlbGF0ZWQgZGVmaW5pdGlvbnMKKyNkZWZpbmUgU0hBUkVfS0VZX05VTSAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIE1BWF9MRU5fT0ZfU0hBUkVfS0VZICAgICAgICAgICAgMTYgICAgLy8gYnl0ZSBjb3VudAorI2RlZmluZSBNQVhfTEVOX09GX1BFRVJfS0VZICAgICAgICAgICAgIDE2ICAgIC8vIGJ5dGUgY291bnQKKyNkZWZpbmUgUEFJUldJU0VfS0VZX05VTSAgICAgICAgICAgICAgICA2NCAgICAvLyBpbiBNQUMgQVNJQyBwYWlyd2lzZSBrZXkgdGFibGUKKyNkZWZpbmUgR1JPVVBfS0VZX05VTSAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFBNS19MRU4gICAgICAgICAgICAgICAgICAgICAgICAgMzIKKyNkZWZpbmUgV0RTX1BBSVJXSVNFX0tFWV9PRkZTRVQgICAgICAgICA2MCAgICAvLyBXRFMgbGlua3MgdXNlcyBwYWlyd2lzZSBrZXkjNjAgfiA2MyBpbiBBU0lDIHBhaXJ3aXNlIGtleSB0YWJsZQorI2RlZmluZQlQTUtJRF9OTyAgICAgICAgICAgICAgICAgICAgICAgIDQgICAgIC8vIE51bWJlciBvZiBQTUtJRCBzYXZlZCBzdXBwb3J0ZWQKKyNkZWZpbmUgTUFYX0xFTl9PRl9NTE1FX0JVRkZFUiAgICAgICAgICAyMDQ4CisKKy8vIHBvd2VyIHN0YXR1cyByZWxhdGVkIGRlZmluaXRpb25zCisjZGVmaW5lIFBXUl9BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQV1JfU0FWRSAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUFdSX01NUFMgICAgICAgICAgICAgICAgICAgICAgICAyCQkJLy9NSU1PIHBvd2VyIHNhdmUKKy8vI2RlZmluZSBQV1JfVU5LTk9XTiAgICAgICAgICAgICAgICAgICAyCisKKy8vIEF1dGggYW5kIEFzc29jIG1vZGUgcmVsYXRlZCBkZWZpbml0aW9ucworI2RlZmluZSBBVVRIX01PREVfT1BFTiAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQVVUSF9NT0RFX0tFWSAgICAgICAgICAgICAgICAgICAweDAxCisvLyNkZWZpbmUgQVVUSF9NT0RFX0FVVE9fU1dJVENIICAgICAgICAgMHgwMworLy8jZGVmaW5lIEFVVEhfTU9ERV9ERUFVVEggICAgICAgICAgICAgIDB4MDQKKy8vI2RlZmluZSBBVVRIX01PREVfVVBMQVlFUiAgICAgICAgICAgICAweDA1IC8vIHJlc2VydmVkIGZvciA4MDIuMTFpIHVzZQorCisvLyBCU1MgVHlwZSBkZWZpbml0aW9ucworI2RlZmluZSBCU1NfQURIT0MgICAgICAgICAgICAgICAgICAgICAgIDAgIC8vID0gTmRpczgwMl8xMUlCU1MKKyNkZWZpbmUgQlNTX0lORlJBICAgICAgICAgICAgICAgICAgICAgICAxICAvLyA9IE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZQorI2RlZmluZSBCU1NfQU5ZICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8vID0gTmRpczgwMl8xMUF1dG9Vbmtub3duCisjZGVmaW5lIEJTU19NT05JVE9SCQkJICAgICAgICAgICAgMyAgLy8gPSBOZGlzODAyXzExTW9uaXRvcgorCisKKy8vIFJlYXNvbiBjb2RlIGRlZmluaXRpb25zCisjZGVmaW5lIFJFQVNPTl9SRVNFUlZFRCAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBSRUFTT05fVU5TUEVDSUZZICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUkVBU09OX05PX0xPTkdFUl9WQUxJRCAgICAgICAgICAyCisjZGVmaW5lIFJFQVNPTl9ERUFVVEhfU1RBX0xFQVZJTkcgICAgICAgMworI2RlZmluZSBSRUFTT05fRElTQVNTT0NfSU5BQ1RJVkUgICAgICAgIDQKKyNkZWZpbmUgUkVBU09OX0RJU0FTU1BDX0FQX1VOQUJMRSAgICAgICA1CisjZGVmaW5lIFJFQVNPTl9DTFMyRVJSICAgICAgICAgICAgICAgICAgNgorI2RlZmluZSBSRUFTT05fQ0xTM0VSUiAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HICAgICA4CisjZGVmaW5lIFJFQVNPTl9TVEFfUkVRX0FTU09DX05PVF9BVVRIICAgOQorI2RlZmluZSBSRUFTT05fSU5WQUxJRF9JRSAgICAgICAgICAgICAgIDEzCisjZGVmaW5lIFJFQVNPTl9NSUNfRkFJTFVSRSAgICAgICAgICAgICAgMTQKKyNkZWZpbmUgUkVBU09OXzRfV0FZX1RJTUVPVVQgICAgICAgICAgICAxNQorI2RlZmluZSBSRUFTT05fR1JPVVBfS0VZX0hTX1RJTUVPVVQgICAgIDE2CisjZGVmaW5lIFJFQVNPTl9JRV9ESUZGRVJFTlQgICAgICAgICAgICAgMTcKKyNkZWZpbmUgUkVBU09OX01DSVBIRVJfTk9UX1ZBTElEICAgICAgICAxOAorI2RlZmluZSBSRUFTT05fVUNJUEhFUl9OT1RfVkFMSUQgICAgICAgIDE5CisjZGVmaW5lIFJFQVNPTl9BS01QX05PVF9WQUxJRCAgICAgICAgICAgMjAKKyNkZWZpbmUgUkVBU09OX1VOU1VQUE9SVF9SU05FX1ZFUiAgICAgICAyMQorI2RlZmluZSBSRUFTT05fSU5WQUxJRF9SU05FX0NBUCAgICAgICAgIDIyCisjZGVmaW5lIFJFQVNPTl84MDIxWF9BVVRIX0ZBSUwgICAgICAgICAgMjMKKyNkZWZpbmUgUkVBU09OX0NJUEhFUl9TVUlURV9SRUpFQ1RFRCAgICAyNAorI2RlZmluZSBSRUFTT05fREVDTElORUQgICAgICAgICAgICAgICAgIDM3CisKKyNkZWZpbmUgUkVBU09OX1FPU19VTlNQRUNJRlkgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFJFQVNPTl9RT1NfTEFDS19CQU5EV0lEVEggICAgICAgICAzMworI2RlZmluZSBSRUFTT05fUE9PUl9DSEFOTkVMX0NPTkRJVElPTiAgICAgMzQKKyNkZWZpbmUgUkVBU09OX1FPU19PVVRTSURFX1RYT1BfTElNSVRJT04gIDM1CisjZGVmaW5lIFJFQVNPTl9RT1NfUVNUQV9MRUFWSU5HX1FCU1MgICAgICAzNgorI2RlZmluZSBSRUFTT05fUU9TX1VOV0FOVEVEX01FQ0hBTklTTSAgICAgMzcKKyNkZWZpbmUgUkVBU09OX1FPU19NRUNIX1NFVFVQX1JFUVVJUkVEICAgIDM4CisjZGVmaW5lIFJFQVNPTl9RT1NfUkVRVUVTVF9USU1FT1VUICAgICAgICAzOQorI2RlZmluZSBSRUFTT05fUU9TX0NJUEhFUl9OT1RfU1VQUE9SVCAgICAgNDUKKworLy8gU3RhdHVzIGNvZGUgZGVmaW5pdGlvbnMKKyNkZWZpbmUgTUxNRV9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1MTUVfVU5TUEVDSUZZX0ZBSUwgICAgICAgICAgICAgMQorI2RlZmluZSBNTE1FX0NBTk5PVF9TVVBQT1JUX0NBUCAgICAgICAgIDEwCisjZGVmaW5lIE1MTUVfUkVBU1NPQ19ERU5ZX0FTU09DX0VYSVNUICAgMTEKKyNkZWZpbmUgTUxNRV9BU1NPQ19ERU5ZX09VVF9TQ09QRSAgICAgICAxMgorI2RlZmluZSBNTE1FX0FMR19OT1RfU1VQUE9SVCAgICAgICAgICAgIDEzCisjZGVmaW5lIE1MTUVfU0VRX05SX09VVF9PRl9TRVFVRU5DRSAgICAgMTQKKyNkZWZpbmUgTUxNRV9SRUpfQ0hBTExFTkdFX0ZBSUxVUkUgICAgICAxNQorI2RlZmluZSBNTE1FX1JFSl9USU1FT1VUICAgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgTUxNRV9BU1NPQ19SRUpfVU5BQkxFX0hBTkRMRV9TVEEgIDE3CisjZGVmaW5lIE1MTUVfQVNTT0NfUkVKX0RBVEFfUkFURSAgICAgICAgICAxOAorCisjZGVmaW5lIE1MTUVfQVNTT0NfUkVKX05PX0VYVF9SQVRFICAgICAgICAyMgorI2RlZmluZSBNTE1FX0FTU09DX1JFSl9OT19FWFRfUkFURV9QQkNDICAgMjMKKyNkZWZpbmUgTUxNRV9BU1NPQ19SRUpfTk9fQ0NLX09GRE0gICAgICAgIDI0CisKKyNkZWZpbmUgTUxNRV9RT1NfVU5TUEVDSUZZICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIE1MTUVfUkVRVUVTVF9ERUNMSU5FRCAgICAgICAgICAgICAzNworI2RlZmluZSBNTE1FX1JFUVVFU1RfV0lUSF9JTlZBTElEX1BBUkFNICAgMzgKKyNkZWZpbmUgTUxNRV9ETFNfTk9UX0FMTE9XX0lOX1FCU1MgICAgICAgIDQ4CisjZGVmaW5lIE1MTUVfREVTVF9TVEFfTk9UX0lOX1FCU1MgICAgICAgICA0OQorI2RlZmluZSBNTE1FX0RFU1RfU1RBX0lTX05PVF9BX1FTVEEgICAgICAgNTAKKworI2RlZmluZSBNTE1FX0lOVkFMSURfRk9STUFUICAgICAgICAgICAgIDB4NTEKKyNkZWZpbmUgTUxNRV9GQUlMX05PX1JFU09VUkNFICAgICAgICAgICAweDUyCisjZGVmaW5lIE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1QgICAgICAgMHg1MworI2RlZmluZSBNTE1FX01BQ19UQUJMRV9GQUlMICAgICAgICAgICAgIDB4NTQKKworLy8gSUUgY29kZQorI2RlZmluZSBJRV9TU0lEICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSUVfU1VQUF9SQVRFUyAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIElFX0ZIX1BBUk0gICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBJRV9EU19QQVJNICAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgSUVfQ0ZfUEFSTSAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIElFX1RJTSAgICAgICAgICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBJRV9JQlNTX1BBUk0gICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgSUVfQ09VTlRSWSAgICAgICAgICAgICAgICAgICAgICA3ICAgICAvLyA4MDIuMTFkCisjZGVmaW5lIElFXzgwMl8xMURfUkVRVUVTVCAgICAgICAgICAgICAgMTAgICAgLy8gODAyLjExZAorI2RlZmluZSBJRV9RQlNTX0xPQUQgICAgICAgICAgICAgICAgICAgIDExICAgIC8vIDgwMi4xMWUgZDkKKyNkZWZpbmUgSUVfRURDQV9QQVJBTUVURVIgICAgICAgICAgICAgICAxMiAgICAvLyA4MDIuMTFlIGQ5CisjZGVmaW5lIElFX1RTUEVDICAgICAgICAgICAgICAgICAgICAgICAgMTMgICAgLy8gODAyLjExZSBkOQorI2RlZmluZSBJRV9UQ0xBUyAgICAgICAgICAgICAgICAgICAgICAgIDE0ICAgIC8vIDgwMi4xMWUgZDkKKyNkZWZpbmUgSUVfU0NIRURVTEUgICAgICAgICAgICAgICAgICAgICAxNSAgICAvLyA4MDIuMTFlIGQ5CisjZGVmaW5lIElFX0NIQUxMRU5HRV9URVhUICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgSUVfUE9XRVJfQ09OU1RSQUlOVCAgICAgICAgICAgICAzMiAgICAvLyA4MDIuMTFoIGQzLjMKKyNkZWZpbmUgSUVfUE9XRVJfQ0FQQUJJTElUWSAgICAgICAgICAgICAzMyAgICAvLyA4MDIuMTFoIGQzLjMKKyNkZWZpbmUgSUVfVFBDX1JFUVVFU1QgICAgICAgICAgICAgICAgICAzNCAgICAvLyA4MDIuMTFoIGQzLjMKKyNkZWZpbmUgSUVfVFBDX1JFUE9SVCAgICAgICAgICAgICAgICAgICAzNSAgICAvLyA4MDIuMTFoIGQzLjMKKyNkZWZpbmUgSUVfU1VQUF9DSEFOTkVMUyAgICAgICAgICAgICAgICAzNiAgICAvLyA4MDIuMTFoIGQzLjMKKyNkZWZpbmUgSUVfQ0hBTk5FTF9TV0lUQ0hfQU5OT1VOQ0VNRU5UICAzNyAgICAvLyA4MDIuMTFoIGQzLjMKKyNkZWZpbmUgSUVfTUVBU1VSRU1FTlRfUkVRVUVTVCAgICAgICAgICAzOCAgICAvLyA4MDIuMTFoIGQzLjMKKyNkZWZpbmUgSUVfTUVBU1VSRU1FTlRfUkVQT1JUICAgICAgICAgICAzOSAgICAvLyA4MDIuMTFoIGQzLjMKKyNkZWZpbmUgSUVfUVVJRVQgICAgICAgICAgICAgICAgICAgICAgICA0MCAgICAvLyA4MDIuMTFoIGQzLjMKKyNkZWZpbmUgSUVfSUJTU19ERlMgICAgICAgICAgICAgICAgICAgICA0MSAgICAvLyA4MDIuMTFoIGQzLjMKKyNkZWZpbmUgSUVfRVJQICAgICAgICAgICAgICAgICAgICAgICAgICA0MiAgICAvLyA4MDIuMTFnCisjZGVmaW5lIElFX1RTX0RFTEFZICAgICAgICAgICAgICAgICAgICAgNDMgICAgLy8gODAyLjExZSBkOQorI2RlZmluZSBJRV9UQ0xBU19QUk9DRVNTSU5HICAgICAgICAgICAgIDQ0ICAgIC8vIDgwMi4xMWUgZDkKKyNkZWZpbmUgSUVfUU9TX0NBUEFCSUxJVFkgICAgICAgICAgICAgICA0NiAgICAvLyA4MDIuMTFlIGQ2CisjZGVmaW5lIElFX0hUX0NBUCAgICAgICAgICAgICAgICAgICAgICAgNDUgICAgLy8gODAyLjExbiBkMS4gSFQgQ0FQQUJJTElUWS4gRUxFTUVOVCBJRCBUQkQKKyNkZWZpbmUgSUVfQVBfQ0hBTk5FTF9SRVBPUlQJCQk1MSAgICAvLyA4MDIuMTFrIGQ2CisjZGVmaW5lIElFX0hUX0NBUDIgICAgICAgICAgICAgICAgICAgICAgICAgNTIgICAgLy8gODAyLjExbiBkMS4gSFQgQ0FQQUJJTElUWS4gRUxFTUVOVCBJRCBUQkQKKyNkZWZpbmUgSUVfUlNOICAgICAgICAgICAgICAgICAgICAgICAgICA0OCAgICAvLyA4MDIuMTFpIGQzLjAKKyNkZWZpbmUgSUVfV1BBMiAgICAgICAgICAgICAgICAgICAgICAgICA0OCAgICAvLyBXUEEyCisjZGVmaW5lIElFX0VYVF9TVVBQX1JBVEVTICAgICAgICAgICAgICAgNTAgICAgLy8gODAyLjExZworI2RlZmluZSBJRV9TVVBQX1JFR19DTEFTUyAgICAgICAgICAgICAgIDU5ICAgIC8vIDgwMi4xMXkuIFN1cHBvcnRlZCByZWd1bGF0b3J5IGNsYXNzZXMuCisjZGVmaW5lIElFX0VYVF9DSEFOTkVMX1NXSVRDSF9BTk5PVU5DRU1FTlQJNjAJLy8gODAyLjExbgorI2RlZmluZSBJRV9BRERfSFQgICAgICAgICAgICAgICAgICAgICAgICAgNjEgICAgLy8gODAyLjExbiBkMS4gQURESVRJT05BTCBIVCBDQVBBQklMSVRZLiBFTEVNRU5UIElEIFRCRAorI2RlZmluZSBJRV9BRERfSFQyICAgICAgICAgICAgICAgICAgICAgICAgNTMgICAgLy8gODAyLjExbiBkMS4gQURESVRJT05BTCBIVCBDQVBBQklMSVRZLiBFTEVNRU5UIElEIFRCRAorCisKKy8vIEZvciA4MDIuMTFuIEQzLjAzCisvLyNkZWZpbmUgSUVfTkVXX0VYVF9DSEFfT0ZGU0VUICAgICAgICAgICAgIDYyICAgIC8vIDgwMi4xMW4gZDEuIE5ldyBleHRlbnNpb24gY2hhbm5lbCBvZmZzZXQgZWxlbWV0CisjZGVmaW5lIElFX1NFQ09OREFSWV9DSF9PRkZTRVQJCTYyCS8vIDgwMi4xMW4gRDMuMDMJU2Vjb25kYXJ5IENoYW5uZWwgT2Zmc2V0IGVsZW1lbnQKKyNkZWZpbmUgSUVfV0FQSQkJCQkJCQk2OAkJLy8gV0FQSSBpbmZvcm1hdGlvbiBlbGVtZW50CisjZGVmaW5lIElFXzIwNDBfQlNTX0NPRVhJU1QgICAgICAgICAgICAgICA3MiAgICAvLyA4MDIuMTFuIEQzLjAuMworI2RlZmluZSBJRV8yMDQwX0JTU19JTlRPTEVSQU5UX1JFUE9SVCAgICAgNzMgICAgLy8gODAyLjExbiBEMy4wMworI2RlZmluZSBJRV9PVkVSTEFQQlNTX1NDQU5fUEFSTSAgICAgICAgICAgNzQgICAgLy8gODAyLjExbiBEMy4wMworI2RlZmluZSBJRV9FWFRfQ0FQQUJJTElUWSAgICAgICAgICAgICAgICAxMjcgICAvLyA4MDIuMTFuIEQzLjAzCisKKworI2RlZmluZSBJRV9XUEEgICAgICAgICAgICAgICAgICAgICAgICAgIDIyMSAgIC8vIFdQQQorI2RlZmluZSBJRV9WRU5ET1JfU1BFQ0lGSUMgICAgICAgICAgICAgIDIyMSAgIC8vIFdpZmkgV01NIChXTUUpCisKKyNkZWZpbmUgT1VJX0JST0FEQ09NX0hUICAgICAgICAgICAgICA1MSAgIC8vCisjZGVmaW5lIE9VSV9CUk9BRENPTV9IVEFERCAgICAgICAgICAgICAgNTIgICAvLworI2RlZmluZSBPVUlfUFJFTl9IVF9DQVAgICAgICAgICAgICAgIDUxICAgLy8KKyNkZWZpbmUgT1VJX1BSRU5fQUREX0hUICAgICAgICAgICAgICA1MiAgIC8vCisKKy8vIENDWCBpbmZvcm1hdGlvbgorI2RlZmluZSBJRV9BSVJPTkVUX0NLSVAgICAgICAgICAgICAgICAgIDEzMyAgIC8vIENDWDEuMCBJRCA4NUggZm9yIENLSVAKKyNkZWZpbmUgSUVfQVBfVFhfUE9XRVIgICAgICAgICAgICAgICAgICAxNTAgICAvLyBDQ1ggMi4wIGZvciBBUCB0cmFuc21pdCBwb3dlcgorI2RlZmluZSBJRV9NRUFTVVJFTUVOVF9DQVBBQklMSVRZICAgICAgIDIyMSAgIC8vIENDWCAyLjAKKyNkZWZpbmUgSUVfQ0NYX1YyICAgICAgICAgICAgICAgICAgICAgICAyMjEKKyNkZWZpbmUgSUVfQUlST05FVF9JUEFERFJFU1MgICAgICAgICAgICAxNDkgICAvLyBDQ1ggSUQgOTVIIGZvciBJUCBBZGRyZXNzCisjZGVmaW5lIElFX0FJUk9ORVRfQ0NLTVJFQVNTT0MgICAgICAgICAgMTU2ICAgLy8gQ0NYIElEIDlDSCBmb3IgQ0NLTSBSZWFzc29jaWF0aW9uIFJlcXVlc3QgZWxlbWVudAorI2RlZmluZSBDS0lQX05FR09USUFUSU9OX0xFTkdUSCAgICAgICAgIDMwCisjZGVmaW5lIEFJUk9ORVRfSVBBRERSRVNTX0xFTkdUSCAgICAgICAgMTAKKyNkZWZpbmUgQUlST05FVF9DQ0tNUkVBU1NPQ19MRU5HVEggICAgICAyNAorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gTUxNRSBzdGF0ZSBtYWNoaW5lIGRlZmluaXRpb24KKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy8vIFNUQSBNTE1FIHN0YXRlIG1haGNpbmVzCisjZGVmaW5lIEFTU09DX1NUQVRFX01BQ0hJTkUgICAgICAgICAgICAgMQorI2RlZmluZSBBVVRIX1NUQVRFX01BQ0hJTkUgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVVUSF9SU1BfU1RBVEVfTUFDSElORSAgICAgICAgICAzCisjZGVmaW5lIFNZTkNfU1RBVEVfTUFDSElORSAgICAgICAgICAgICAgNAorI2RlZmluZSBNTE1FX0NOVExfU1RBVEVfTUFDSElORSAgICAgICAgIDUKKyNkZWZpbmUgV1BBX1BTS19TVEFURV9NQUNISU5FICAgICAgICAgICA2CisjZGVmaW5lIExFQVBfU1RBVEVfTUFDSElORSAgICAgICAgICAgICAgNworI2RlZmluZSBBSVJPTkVUX1NUQVRFX01BQ0hJTkUgICAgICAgICAgIDgKKyNkZWZpbmUgQUNUSU9OX1NUQVRFX01BQ0hJTkUgICAgICAgICAgIDkKKworLy8gQVAgTUxNRSBzdGF0ZSBtYWNoaW5lcworI2RlZmluZSBBUF9BU1NPQ19TVEFURV9NQUNISU5FICAgICAgICAgIDExCisjZGVmaW5lIEFQX0FVVEhfU1RBVEVfTUFDSElORSAgICAgICAgICAgMTIKKyNkZWZpbmUgQVBfQVVUSF9SU1BfU1RBVEVfTUFDSElORSAgICAgICAxMworI2RlZmluZSBBUF9TWU5DX1NUQVRFX01BQ0hJTkUgICAgICAgICAgIDE0CisjZGVmaW5lIEFQX0NOVExfU1RBVEVfTUFDSElORSAgICAgICAgICAgMTUKKyNkZWZpbmUgQVBfV1BBX1NUQVRFX01BQ0hJTkUgICAgICAgICAgICAxNgorCisjZGVmaW5lIFdTQ19TVEFURV9NQUNISU5FICAgICAgICAgICAgMTcKKyNkZWZpbmUgV1NDX1VQTlBfU1RBVEVfTUFDSElORQkJICAgIDE4CisKKworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisjZGVmaW5lIERMU19TVEFURV9NQUNISU5FICAgICAgICAgICAgICAgMjYKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworLy8KKy8vIFNUQSdzIENPTlRST0wvQ09OTkVDVCBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQ05UTF9JRExFICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENOVExfV0FJVF9ESVNBU1NPQyAgICAgICAgICAgICAgMQorI2RlZmluZSBDTlRMX1dBSVRfSk9JTiAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ05UTF9XQUlUX1JFQVNTT0MgICAgICAgICAgICAgICAzCisjZGVmaW5lIENOVExfV0FJVF9TVEFSVCAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDTlRMX1dBSVRfQVVUSCAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ05UTF9XQUlUX0FTU09DICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIENOVExfV0FJVF9BVVRIMiAgICAgICAgICAgICAgICAgNworI2RlZmluZSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTiAgICAgICAgIDgKKyNkZWZpbmUgQ05UTF9XQUlUX09JRF9ESVNBU1NPQyAgICAgICAgICA5CisjaWZkZWYgUlQyODcwCisjZGVmaW5lIENOVExfV0FJVF9TQ0FOX0ZPUl9DT05ORUNUICAgICAgMTAKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworI2RlZmluZSBNVDJfQVNTT0NfQ09ORiAgICAgICAgICAgICAgICAgIDM0CisjZGVmaW5lIE1UMl9BVVRIX0NPTkYgICAgICAgICAgICAgICAgICAgMzUKKyNkZWZpbmUgTVQyX0RFQVVUSF9DT05GICAgICAgICAgICAgICAgICAzNgorI2RlZmluZSBNVDJfRElTQVNTT0NfQ09ORiAgICAgICAgICAgICAgIDM3CisjZGVmaW5lIE1UMl9SRUFTU09DX0NPTkYgICAgICAgICAgICAgICAgMzgKKyNkZWZpbmUgTVQyX1BXUl9NR01UX0NPTkYgICAgICAgICAgICAgICAzOQorI2RlZmluZSBNVDJfSk9JTl9DT05GICAgICAgICAgICAgICAgICAgIDQwCisjZGVmaW5lIE1UMl9TQ0FOX0NPTkYgICAgICAgICAgICAgICAgICAgNDEKKyNkZWZpbmUgTVQyX1NUQVJUX0NPTkYgICAgICAgICAgICAgICAgICA0MgorI2RlZmluZSBNVDJfR0VUX0NPTkYgICAgICAgICAgICAgICAgICAgIDQzCisjZGVmaW5lIE1UMl9TRVRfQ09ORiAgICAgICAgICAgICAgICAgICAgNDQKKyNkZWZpbmUgTVQyX1JFU0VUX0NPTkYgICAgICAgICAgICAgICAgICA0NQorI2RlZmluZSBNVDJfTUxNRV9ST0FNSU5HX1JFUSAgICAgICAgICAgIDUyCisKKyNkZWZpbmUgQ05UTF9GVU5DX1NJWkUgICAgICAgICAgICAgICAgICAxCisKKy8vCisvLyBTVEEncyBBU1NPQyBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQVNTT0NfSURMRSAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFTU09DX1dBSVRfUlNQICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBSRUFTU09DX1dBSVRfUlNQICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRElTQVNTT0NfV0FJVF9SU1AgICAgICAgICAgICAgICAzCisjZGVmaW5lIE1BWF9BU1NPQ19TVEFURSAgICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIEFTU09DX01BQ0hJTkVfQkFTRSAgICAgICAgICAgICAgMAorI2RlZmluZSBNVDJfTUxNRV9BU1NPQ19SRVEgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTVQyX01MTUVfUkVBU1NPQ19SRVEgICAgICAgICAgICAxCisjZGVmaW5lIE1UMl9NTE1FX0RJU0FTU09DX1JFUSAgICAgICAgICAgMgorI2RlZmluZSBNVDJfUEVFUl9ESVNBU1NPQ19SRVEgICAgICAgICAgIDMKKyNkZWZpbmUgTVQyX1BFRVJfQVNTT0NfUkVRICAgICAgICAgICAgICA0CisjZGVmaW5lIE1UMl9QRUVSX0FTU09DX1JTUCAgICAgICAgICAgICAgNQorI2RlZmluZSBNVDJfUEVFUl9SRUFTU09DX1JFUSAgICAgICAgICAgIDYKKyNkZWZpbmUgTVQyX1BFRVJfUkVBU1NPQ19SU1AgICAgICAgICAgICA3CisjZGVmaW5lIE1UMl9ESVNBU1NPQ19USU1FT1VUICAgICAgICAgICAgOAorI2RlZmluZSBNVDJfQVNTT0NfVElNRU9VVCAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgTVQyX1JFQVNTT0NfVElNRU9VVCAgICAgICAgICAgICAxMAorI2RlZmluZSBNQVhfQVNTT0NfTVNHICAgICAgICAgICAgICAgICAgIDExCisKKyNkZWZpbmUgQVNTT0NfRlVOQ19TSVpFICAgICAgICAgICAgICAgICAoTUFYX0FTU09DX1NUQVRFICogTUFYX0FTU09DX01TRykKKworLy8KKy8vIEFDVCBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQUNUX0lETEUgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNQVhfQUNUX1NUQVRFICAgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQUNUX01BQ0hJTkVfQkFTRSAgICAgICAgICAgICAgMAorCisvL1Rob3NlIFBFRVJfeHhfQ0FURSBudW1iZXIgaXMgYmFzZWQgb24gcmVhbCBDYXRlZ2FyeSB2YWx1ZSBpbiBJRUVFIHNwZWMuIFBsZWFzZSBkb24nZXMgbW9kaWZ5IGl0IGJ5IHlvdXIgc2VsZi4KKy8vQ2F0ZWdvcnkKKyNkZWZpbmUgTVQyX1BFRVJfU1BFQ1RSVU1fQ0FURSAgICAgICAgICAgICAgMAorI2RlZmluZSBNVDJfUEVFUl9RT1NfQ0FURSAgICAgICAgICAgICAgMQorI2RlZmluZSBNVDJfUEVFUl9ETFNfQ0FURSAgICAgICAgICAgICAyCisjZGVmaW5lIE1UMl9QRUVSX0JBX0NBVEUgICAgICAgICAgICAgMworI2RlZmluZSBNVDJfUEVFUl9QVUJMSUNfQ0FURSAgICAgICAgICAgICA0CisjZGVmaW5lIE1UMl9QRUVSX1JNX0NBVEUgICAgICAgICAgICAgNQorI2RlZmluZSBNVDJfUEVFUl9IVF9DQVRFICAgICAgICAgICAgIDcJLy8JNy40LjcKKyNkZWZpbmUgTUFYX1BFRVJfQ0FURV9NU0cgICAgICAgICAgICAgICAgICAgNworI2RlZmluZSBNVDJfTUxNRV9BRERfQkFfQ0FURSAgICAgICAgICAgICA4CisjZGVmaW5lIE1UMl9NTE1FX09SSV9ERUxCQV9DQVRFICAgICAgICAgICAgIDkKKyNkZWZpbmUgTVQyX01MTUVfUkVDX0RFTEJBX0NBVEUgICAgICAgICAgICAgMTAKKyNkZWZpbmUgTVQyX01MTUVfUU9TX0NBVEUgICAgICAgICAgICAgIDExCisjZGVmaW5lIE1UMl9NTE1FX0RMU19DQVRFICAgICAgICAgICAgIDEyCisjZGVmaW5lIE1UMl9BQ1RfSU5WQUxJRCAgICAgICAgICAgICAxMworI2RlZmluZSBNQVhfQUNUX01TRyAgICAgICAgICAgICAgICAgICAxNAorCisvL0NhdGVnb3J5IGZpZWxkCisjZGVmaW5lIENBVEVHT1JZX1NQRUNUUlVNCQkwCisjZGVmaW5lIENBVEVHT1JZX1FPUwkJCTEKKyNkZWZpbmUgQ0FURUdPUllfRExTCQkJMgorI2RlZmluZSBDQVRFR09SWV9CQQkJCTMKKyNkZWZpbmUgQ0FURUdPUllfUFVCTElDCQk0CisjZGVmaW5lIENBVEVHT1JZX1JNCQkJNQorI2RlZmluZSBDQVRFR09SWV9IVAkJCTcKKworCisvLyBETFMgQWN0aW9uIGZyYW1lIGRlZmluaXRpb24KKyNkZWZpbmUgQUNUSU9OX0RMU19SRVFVRVNUCQkJMAorI2RlZmluZSBBQ1RJT05fRExTX1JFU1BPTlNFCQkJMQorI2RlZmluZSBBQ1RJT05fRExTX1RFQVJET1dOCQkJMgorCisvL1NwZWN0cnVtICBBY3Rpb24gZmllbGQgdmFsdWUgODAyLjExaCA3LjQuMQorI2RlZmluZSBTUEVDX01SUQkwCS8vIFJlcXVlc3QKKyNkZWZpbmUgU1BFQ19NUlAJMQkvL1JlcG9ydAorI2RlZmluZSBTUEVDX1RQQ1JRCTIKKyNkZWZpbmUgU1BFQ19UUENSUAkzCisjZGVmaW5lIFNQRUNfQ0hBTk5FTF9TV0lUQ0gJNAorCisKKy8vQkEgIEFjdGlvbiBmaWVsZCB2YWx1ZQorI2RlZmluZSBBRERCQV9SRVEJMAorI2RlZmluZSBBRERCQV9SRVNQCTEKKyNkZWZpbmUgREVMQkEgICAyCisKKy8vUHVibGljJ3MgIEFjdGlvbiBmaWVsZCB2YWx1ZSBpbiBQdWJsaWMgQ2F0ZWdvcnkuICBTb21lIGluIDgwMi4xMXkgYW5kIHNvbWUgaW4gMTFuCisjZGVmaW5lIEFDVElPTl9CU1NfMjA0MF9DT0VYSVNUCQkJCTAJLy8gMTFuCisjZGVmaW5lIEFDVElPTl9EU0VfRU5BQkxFTUVOVAkJCQkJMQkvLyAxMXkgRDkuMAorI2RlZmluZSBBQ1RJT05fRFNFX0RFRU5BQkxFTUVOVAkJCQkyCS8vIDExeSBEOS4wCisjZGVmaW5lIEFDVElPTl9EU0VfUkVHX0xPQ0FUSU9OX0FOTk9VTkNFCTMJLy8gMTF5IEQ5LjAKKyNkZWZpbmUgQUNUSU9OX0VYVF9DSF9TV0lUQ0hfQU5OT1VOQ0UJCTQJLy8gMTF5IEQ5LjAKKyNkZWZpbmUgQUNUSU9OX0RTRV9NRUFTVVJFTUVOVF9SRVEJCQk1CS8vIDExeSBEOS4wCisjZGVmaW5lIEFDVElPTl9EU0VfTUVBU1VSRU1FTlRfUkVQT1JUCQk2CS8vIDExeSBEOS4wCisjZGVmaW5lIEFDVElPTl9NRUFTVVJFTUVOVF9QSUxPVF9BQ1RJT04JCTcgIAkvLyAxMXkgRDkuMAorI2RlZmluZSBBQ1RJT05fRFNFX1BPV0VSX0NPTlNUUkFJTlQJCQk4CS8vIDExeSBEOS4wCisKKworLy9IVCAgQWN0aW9uIGZpZWxkIHZhbHVlCisjZGVmaW5lIE5PVElGWV9CV19BQ1RJT04JCQkJMAorI2RlZmluZSBTTVBTX0FDVElPTgkJCQkJCTEKKyNkZWZpbmUgUFNNUF9BQ1RJT04gICAJCQkJCTIKKyNkZWZpbmUgU0VUUENPX0FDVElPTgkJCQkJMworI2RlZmluZSBNSU1PX0NIQV9NRUFTVVJFX0FDVElPTgkJCTQKKyNkZWZpbmUgTUlNT19OX0JFQUNPTkZPUk0JCQkJNQorI2RlZmluZSBNSU1PX0JFQUNPTkZPUk0JCQkJCTYKKyNkZWZpbmUgQU5URU5OQV9TRUxFQ1QJCQkJCTcKKyNkZWZpbmUgSFRfSU5GT19FWENIQU5HRQkJCQk4CisKKyNkZWZpbmUgQUNUX0ZVTkNfU0laRSAgICAgICAgICAgICAgICAgKE1BWF9BQ1RfU1RBVEUgKiBNQVhfQUNUX01TRykKKy8vCisvLyBTVEEncyBBVVRIRU5USUNBVElPTiBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2dmVudHMsIHRvdGFsIGZ1bmN0aW9uICMKKy8vCisjZGVmaW5lIEFVVEhfUkVRX0lETEUgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBVVRIX1dBSVRfU0VRMiAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQVVUSF9XQUlUX1NFUTQgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1BWF9BVVRIX1NUQVRFICAgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIEFVVEhfTUFDSElORV9CQVNFICAgICAgICAgICAgICAgMAorI2RlZmluZSBNVDJfTUxNRV9BVVRIX1JFUSAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTVQyX1BFRVJfQVVUSF9FVkVOICAgICAgICAgICAgICAxCisjZGVmaW5lIE1UMl9BVVRIX1RJTUVPVVQgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNQVhfQVVUSF9NU0cgICAgICAgICAgICAgICAgICAgIDMKKworI2RlZmluZSBBVVRIX0ZVTkNfU0laRSAgICAgICAgICAgICAgICAgIChNQVhfQVVUSF9TVEFURSAqIE1BWF9BVVRIX01TRykKKworLy8KKy8vIFNUQSdzIEFVVEhfUlNQIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBBVVRIX1JTUF9JRExFICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVVUSF9SU1BfV0FJVF9DSEFMICAgICAgICAgICAgICAxCisjZGVmaW5lIE1BWF9BVVRIX1JTUF9TVEFURSAgICAgICAgICAgICAgMgorCisjZGVmaW5lIEFVVEhfUlNQX01BQ0hJTkVfQkFTRSAgICAgICAgICAgMAorI2RlZmluZSBNVDJfQVVUSF9DSEFMTEVOR0VfVElNRU9VVCAgICAgIDAKKyNkZWZpbmUgTVQyX1BFRVJfQVVUSF9PREQgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1UMl9QRUVSX0RFQVVUSCAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNQVhfQVVUSF9SU1BfTVNHICAgICAgICAgICAgICAgIDMKKworI2RlZmluZSBBVVRIX1JTUF9GVU5DX1NJWkUgICAgICAgICAgICAgIChNQVhfQVVUSF9SU1BfU1RBVEUgKiBNQVhfQVVUSF9SU1BfTVNHKQorCisvLworLy8gU1RBJ3MgU1lOQyBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgU1lOQ19JRExFICAgICAgICAgICAgICAgICAgICAgICAwICAvLyBtZXJnZSBOT19CU1MsSUJTU19JRExFLElCU1NfQUNUSVZFIGFuZCBCU1MgaW4gdG8gMSBzdGF0ZQorI2RlZmluZSBKT0lOX1dBSVRfQkVBQ09OICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgU0NBTl9MSVNURU4gICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1BWF9TWU5DX1NUQVRFICAgICAgICAgICAgICAgICAgMworCisjZGVmaW5lIFNZTkNfTUFDSElORV9CQVNFICAgICAgICAgICAgICAgMAorI2RlZmluZSBNVDJfTUxNRV9TQ0FOX1JFUSAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTVQyX01MTUVfSk9JTl9SRVEgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1UMl9NTE1FX1NUQVJUX1JFUSAgICAgICAgICAgICAgMgorI2RlZmluZSBNVDJfUEVFUl9CRUFDT04gICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTVQyX1BFRVJfUFJPQkVfUlNQICAgICAgICAgICAgICA0CisjZGVmaW5lIE1UMl9QRUVSX0FUSU0gICAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBNVDJfU0NBTl9USU1FT1VUICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgTVQyX0JFQUNPTl9USU1FT1VUICAgICAgICAgICAgICA3CisjZGVmaW5lIE1UMl9BVElNX1RJTUVPVVQgICAgICAgICAgICAgICAgOAorI2RlZmluZSBNVDJfUEVFUl9QUk9CRV9SRVEgICAgICAgICAgICAgIDkKKyNkZWZpbmUgTUFYX1NZTkNfTVNHICAgICAgICAgICAgICAgICAgICAxMAorCisjZGVmaW5lIFNZTkNfRlVOQ19TSVpFICAgICAgICAgICAgICAgICAgKE1BWF9TWU5DX1NUQVRFICogTUFYX1NZTkNfTVNHKQorCisvL01lc3NhZ2VzIGZvciB0aGUgRExTIHN0YXRlIG1hY2hpbmUKKyNkZWZpbmUgRExTX0lETEUJCQkJCQkwCisjZGVmaW5lIE1BWF9ETFNfU1RBVEUJCQkJCTEKKworI2RlZmluZSBETFNfTUFDSElORV9CQVNFCQkJCTAKKyNkZWZpbmUgTVQyX01MTUVfRExTX1JFUQkJCSAgICAwCisjZGVmaW5lIE1UMl9QRUVSX0RMU19SRVEJCQkgICAgMQorI2RlZmluZSBNVDJfUEVFUl9ETFNfUlNQCQkJICAgIDIKKyNkZWZpbmUgTVQyX01MTUVfRExTX1RFQVJfRE9XTgkJICAgIDMKKyNkZWZpbmUgTVQyX1BFRVJfRExTX1RFQVJfRE9XTgkJICAgIDQKKyNkZWZpbmUgTUFYX0RMU19NU0cJCQkJICAgICAgICA1CisKKyNkZWZpbmUgRExTX0ZVTkNfU0laRQkJCQkJKE1BWF9ETFNfU1RBVEUgKiBNQVhfRExTX01TRykKKworLy8KKy8vIFNUQSdzIFdQQS1QU0sgU3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMKKy8vCisjZGVmaW5lIFdQQV9QU0tfSURMRQkJCQkJMAorI2RlZmluZSBNQVhfV1BBX1BTS19TVEFURQkJCQkxCisKKyNkZWZpbmUgV1BBX01BQ0hJTkVfQkFTRSAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1UMl9FQVBQYWNrZXQgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNVDJfRUFQT0xTdGFydCAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTVQyX0VBUE9MTG9nb2ZmICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1UMl9FQVBPTEtleSAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBNVDJfRUFQT0xBU0ZBbGVydCAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgTUFYX1dQQV9QU0tfTVNHICAgICAgICAgICAgICAgICA1CisKKyNkZWZpbmUJV1BBX1BTS19GVU5DX1NJWkUJCQkJKE1BWF9XUEFfUFNLX1NUQVRFICogTUFYX1dQQV9QU0tfTVNHKQorCisvLworLy8gU1RBJ3MgQ0lTQ08tQUlST05FVCBTdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQUlST05FVF9JRExFCQkJCQkwCisjZGVmaW5lCUFJUk9ORVRfU0NBTk5JTkcJCQkJMQorI2RlZmluZSBNQVhfQUlST05FVF9TVEFURQkJCQkyCisKKyNkZWZpbmUgQUlST05FVF9NQUNISU5FX0JBU0UJCSAgICAwCisjZGVmaW5lIE1UMl9BSVJPTkVUX01TRwkJCQkgICAgMAorI2RlZmluZSBNVDJfQUlST05FVF9TQ0FOX1JFUQkJICAgIDEKKyNkZWZpbmUgTVQyX0FJUk9ORVRfU0NBTl9ET05FCQkgICAgMgorI2RlZmluZSBNQVhfQUlST05FVF9NU0cJCQkJICAgIDMKKworI2RlZmluZQlBSVJPTkVUX0ZVTkNfU0laRQkJCQkoTUFYX0FJUk9ORVRfU1RBVEUgKiBNQVhfQUlST05FVF9NU0cpCisKKy8vCisvLyBXU0MgU3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMKKy8vCisKKy8vCisvLyBBUCdzIENPTlRST0wvQ09OTkVDVCBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQVBfQ05UTF9GVU5DX1NJWkUgICAgICAgICAgICAgICAxCisKKy8vCisvLyBBUCdzIEFTU09DIHN0YXRlIG1hY2hpbmU6IHN0YXRlcywgZXZlbnRzLCB0b3RhbCBmdW5jdGlvbiAjCisvLworI2RlZmluZSBBUF9BU1NPQ19JRExFICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBfTUFYX0FTU09DX1NUQVRFICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQVBfQVNTT0NfTUFDSElORV9CQVNFICAgICAgICAgICAwCisjZGVmaW5lIEFQTVQyX01MTUVfRElTQVNTT0NfUkVRICAgICAgICAgMAorI2RlZmluZSBBUE1UMl9QRUVSX0RJU0FTU09DX1JFUSAgICAgICAgIDEKKyNkZWZpbmUgQVBNVDJfUEVFUl9BU1NPQ19SRVEgICAgICAgICAgICAyCisjZGVmaW5lIEFQTVQyX1BFRVJfUkVBU1NPQ19SRVEgICAgICAgICAgMworI2RlZmluZSBBUE1UMl9DTFMzRVJSICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQVBfTUFYX0FTU09DX01TRyAgICAgICAgICAgICAgICA1CisKKyNkZWZpbmUgQVBfQVNTT0NfRlVOQ19TSVpFICAgICAgICAgICAgICAoQVBfTUFYX0FTU09DX1NUQVRFICogQVBfTUFYX0FTU09DX01TRykKKworLy8KKy8vIEFQJ3MgQVVUSEVOVElDQVRJT04gc3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMKKy8vCisjZGVmaW5lIEFQX0FVVEhfUkVRX0lETEUgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUF9NQVhfQVVUSF9TVEFURSAgICAgICAgICAgICAgIDEKKworI2RlZmluZSBBUF9BVVRIX01BQ0hJTkVfQkFTRSAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBNVDJfTUxNRV9ERUFVVEhfUkVRICAgICAgICAgICAwCisjZGVmaW5lIEFQTVQyX0NMUzJFUlIgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBUF9NQVhfQVVUSF9NU0cgICAgICAgICAgICAgICAgIDIKKworI2RlZmluZSBBUF9BVVRIX0ZVTkNfU0laRSAgICAgICAgICAgICAgIChBUF9NQVhfQVVUSF9TVEFURSAqIEFQX01BWF9BVVRIX01TRykKKworLy8KKy8vIEFQJ3MgQVVUSC1SU1Agc3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMKKy8vCisjZGVmaW5lIEFQX0FVVEhfUlNQX0lETEUgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUF9NQVhfQVVUSF9SU1BfU1RBVEUgICAgICAgICAgIDEKKworI2RlZmluZSBBUF9BVVRIX1JTUF9NQUNISU5FX0JBU0UgICAgICAgIDAKKyNkZWZpbmUgQVBNVDJfQVVUSF9DSEFMTEVOR0VfVElNRU9VVCAgICAwCisjZGVmaW5lIEFQTVQyX1BFRVJfQVVUSF9PREQgICAgICAgICAgICAgMQorI2RlZmluZSBBUE1UMl9QRUVSX0RFQVVUSCAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVBfTUFYX0FVVEhfUlNQX01TRyAgICAgICAgICAgICAzCisKKyNkZWZpbmUgQVBfQVVUSF9SU1BfRlVOQ19TSVpFICAgICAgICAgICAoQVBfTUFYX0FVVEhfUlNQX1NUQVRFICogQVBfTUFYX0FVVEhfUlNQX01TRykKKworLy8KKy8vIEFQJ3MgU1lOQyBzdGF0ZSBtYWNoaW5lOiBzdGF0ZXMsIGV2ZW50cywgdG90YWwgZnVuY3Rpb24gIworLy8KKyNkZWZpbmUgQVBfU1lOQ19JRExFICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQX1NDQU5fTElTVEVOCQkJCQkxCisjZGVmaW5lIEFQX01BWF9TWU5DX1NUQVRFICAgICAgICAgICAgICAgMgorCisjZGVmaW5lIEFQX1NZTkNfTUFDSElORV9CQVNFICAgICAgICAgICAgMAorI2RlZmluZSBBUE1UMl9QRUVSX1BST0JFX1JFUSAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBNVDJfUEVFUl9CRUFDT04gICAgICAgICAgICAgICAxCisjZGVmaW5lIEFQTVQyX01MTUVfU0NBTl9SRVEJCQkJMgorI2RlZmluZSBBUE1UMl9QRUVSX1BST0JFX1JTUAkJCTMKKyNkZWZpbmUgQVBNVDJfU0NBTl9USU1FT1VUCQkJCTQKKyNkZWZpbmUgQVBNVDJfTUxNRV9TQ0FOX0NOQ0wJCQk1CisjZGVmaW5lIEFQX01BWF9TWU5DX01TRyAgICAgICAgICAgICAgICAgNgorCisjZGVmaW5lIEFQX1NZTkNfRlVOQ19TSVpFICAgICAgICAgICAgICAgKEFQX01BWF9TWU5DX1NUQVRFICogQVBfTUFYX1NZTkNfTVNHKQorCisvLworLy8gQVAncyBXUEEgc3RhdGUgbWFjaGluZTogc3RhdGVzLCBldmVudHMsIHRvdGFsIGZ1bmN0aW9uICMKKy8vCisjZGVmaW5lIEFQX1dQQV9QVEsgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBBUF9NQVhfV1BBX1BUS19TVEFURSAgICAgICAgICAgIDEKKworI2RlZmluZSBBUF9XUEFfTUFDSElORV9CQVNFICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVBNVDJfRUFQUGFja2V0ICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFQTVQyX0VBUE9MU3RhcnQgICAgICAgICAgICAgICAgMQorI2RlZmluZSBBUE1UMl9FQVBPTExvZ29mZiAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQVBNVDJfRUFQT0xLZXkgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEFQTVQyX0VBUE9MQVNGQWxlcnQgICAgICAgICAgICAgNAorI2RlZmluZSBBUF9NQVhfV1BBX01TRyAgICAgICAgICAgICAgICAgIDUKKworI2RlZmluZSBBUF9XUEFfRlVOQ19TSVpFICAgICAgICAgICAgICAgIChBUF9NQVhfV1BBX1BUS19TVEFURSAqIEFQX01BWF9XUEFfTVNHKQorCisKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLy8gdmFsdWUgZG9tYWluIG9mIDgwMi4xMSBoZWFkZXIgRkMuVHl0ZSwgd2hpY2ggaXMgYjMuLmIyIG9mIHRoZSAxc3QtYnl0ZSBvZiBNQUMgaGVhZGVyCisjZGVmaW5lIEJUWVBFX01HTVQgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEJUWVBFX0NOVEwgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEJUWVBFX0RBVEEgICAgICAgICAgICAgICAgICAyCisKKy8vIHZhbHVlIGRvbWFpbiBvZiA4MDIuMTEgTUdNVCBmcmFtZSdzIEZDLnN1YnR5cGUsIHdoaWNoIGlzIGI3Li40IG9mIHRoZSAxc3QtYnl0ZSBvZiBNQUMgaGVhZGVyCisjZGVmaW5lIFNVQlRZUEVfQVNTT0NfUkVRICAgICAgICAgICAwCisjZGVmaW5lIFNVQlRZUEVfQVNTT0NfUlNQICAgICAgICAgICAxCisjZGVmaW5lIFNVQlRZUEVfUkVBU1NPQ19SRVEgICAgICAgICAyCisjZGVmaW5lIFNVQlRZUEVfUkVBU1NPQ19SU1AgICAgICAgICAzCisjZGVmaW5lIFNVQlRZUEVfUFJPQkVfUkVRICAgICAgICAgICA0CisjZGVmaW5lIFNVQlRZUEVfUFJPQkVfUlNQICAgICAgICAgICA1CisjZGVmaW5lIFNVQlRZUEVfQkVBQ09OICAgICAgICAgICAgICA4CisjZGVmaW5lIFNVQlRZUEVfQVRJTSAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFNVQlRZUEVfRElTQVNTT0MgICAgICAgICAgICAxMAorI2RlZmluZSBTVUJUWVBFX0FVVEggICAgICAgICAgICAgICAgMTEKKyNkZWZpbmUgU1VCVFlQRV9ERUFVVEggICAgICAgICAgICAgIDEyCisjZGVmaW5lIFNVQlRZUEVfQUNUSU9OICAgICAgICAgICAgICAxMworI2RlZmluZSBTVUJUWVBFX0FDVElPTl9OT19BQ0sgICAgICAgICAgICAgIDE0CisKKy8vIHZhbHVlIGRvbWFpbiBvZiA4MDIuMTEgQ05UTCBmcmFtZSdzIEZDLnN1YnR5cGUsIHdoaWNoIGlzIGI3Li40IG9mIHRoZSAxc3QtYnl0ZSBvZiBNQUMgaGVhZGVyCisjZGVmaW5lIFNVQlRZUEVfV1JBUFBFUiAgICAgICAJNworI2RlZmluZSBTVUJUWVBFX0JMT0NLX0FDS19SRVEgICAgICAgOAorI2RlZmluZSBTVUJUWVBFX0JMT0NLX0FDSyAgICAgICAgICAgOQorI2RlZmluZSBTVUJUWVBFX1BTX1BPTEwgICAgICAgICAgICAgMTAKKyNkZWZpbmUgU1VCVFlQRV9SVFMgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFNVQlRZUEVfQ1RTICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBTVUJUWVBFX0FDSyAgICAgICAgICAgICAgICAgMTMKKyNkZWZpbmUgU1VCVFlQRV9DRkVORCAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIFNVQlRZUEVfQ0ZFTkRfQ0ZBQ0sgICAgICAgICAxNQorCisvLyB2YWx1ZSBkb21haW4gb2YgODAyLjExIERBVEEgZnJhbWUncyBGQy5zdWJ0eXBlLCB3aGljaCBpcyBiNy4uNCBvZiB0aGUgMXN0LWJ5dGUgb2YgTUFDIGhlYWRlcgorI2RlZmluZSBTVUJUWVBFX0RBVEEgICAgICAgICAgICAgICAgMAorI2RlZmluZSBTVUJUWVBFX0RBVEFfQ0ZBQ0sgICAgICAgICAgMQorI2RlZmluZSBTVUJUWVBFX0RBVEFfQ0ZQT0xMICAgICAgICAgMgorI2RlZmluZSBTVUJUWVBFX0RBVEFfQ0ZBQ0tfQ0ZQT0xMICAgMworI2RlZmluZSBTVUJUWVBFX05VTExfRlVOQyAgICAgICAgICAgNAorI2RlZmluZSBTVUJUWVBFX0NGQUNLICAgICAgICAgICAgICAgNQorI2RlZmluZSBTVUJUWVBFX0NGUE9MTCAgICAgICAgICAgICAgNgorI2RlZmluZSBTVUJUWVBFX0NGQUNLX0NGUE9MTCAgICAgICAgNworI2RlZmluZSBTVUJUWVBFX1FEQVRBICAgICAgICAgICAgICAgOAorI2RlZmluZSBTVUJUWVBFX1FEQVRBX0NGQUNLICAgICAgICAgOQorI2RlZmluZSBTVUJUWVBFX1FEQVRBX0NGUE9MTCAgICAgICAgMTAKKyNkZWZpbmUgU1VCVFlQRV9RREFUQV9DRkFDS19DRlBPTEwgIDExCisjZGVmaW5lIFNVQlRZUEVfUU9TX05VTEwgICAgICAgICAgICAxMgorI2RlZmluZSBTVUJUWVBFX1FPU19DRkFDSyAgICAgICAgICAgMTMKKyNkZWZpbmUgU1VCVFlQRV9RT1NfQ0ZQT0xMICAgICAgICAgIDE0CisjZGVmaW5lIFNVQlRZUEVfUU9TX0NGQUNLX0NGUE9MTCAgICAxNQorCisvLyBBQ0sgcG9saWN5IG9mIFFPUyBDb250cm9sIGZpZWxkIGJpdCA2OjUKKyNkZWZpbmUgTk9STUFMX0FDSyAgICAgICAgICAgICAgICAgIDB4MDAgIC8vIGI2OjUgPSAwMAorI2RlZmluZSBOT19BQ0sgICAgICAgICAgICAgICAgICAgICAgMHgyMCAgLy8gYjY6NSA9IDAxCisjZGVmaW5lIE5PX0VYUExJQ0lUX0FDSyAgICAgICAgICAgICAweDQwICAvLyBiNjo1ID0gMTAKKyNkZWZpbmUgQkxPQ0tfQUNLICAgICAgICAgICAgICAgICAgIDB4NjAgIC8vIGI2OjUgPSAxMQorCisvLworLy8gcnRtcF9kYXRhLmMgdXNlIHRoZXNlIGRlZmluaXRpb24KKy8vCisjZGVmaW5lIExFTkdUSF84MDJfMTEgICAgICAgICAgICAgICAyNAorI2RlZmluZSBMRU5HVEhfODAyXzExX0FORF9IICAgICAgICAgMzAKKyNkZWZpbmUgTEVOR1RIXzgwMl8xMV9DUkNfSCAgICAgICAgIDM0CisjZGVmaW5lIExFTkdUSF84MDJfMTFfQ1JDICAgICAgICAgICAyOAorI2RlZmluZSBMRU5HVEhfODAyXzExX1dJVEhfQUREUjQgICAgMzAKKyNkZWZpbmUgTEVOR1RIXzgwMl8zICAgICAgICAgICAgICAgIDE0CisjZGVmaW5lIExFTkdUSF84MDJfM19UWVBFICAgICAgICAgICAyCisjZGVmaW5lIExFTkdUSF84MDJfMV9IICAgICAgICAgICAgICA4CisjZGVmaW5lIExFTkdUSF9FQVBPTF9IICAgICAgICAgICAgICA0CisjZGVmaW5lIExFTkdUSF9XTU1RT1NfSAkJCQkyCisjZGVmaW5lIExFTkdUSF9DUkMgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIE1BWF9TRVFfTlVNQkVSICAgICAgICAgICAgICAweDBmZmYKKyNkZWZpbmUgTEVOR1RIXzgwMl8zX05PX1RZUEUJCTEyCisjZGVmaW5lIExFTkdUSF84MDJfMVEJCQkJNCAvKiBWTEFOIHJlbGF0ZWQgKi8KKworLy8gU1RBX0NTUjQuZmllbGQuVHhSZXN1bHQKKyNkZWZpbmUgVFhfUkVTVUxUX1NVQ0NFU1MgICAgICAgICAgIDAKKyNkZWZpbmUgVFhfUkVTVUxUX1pFUk9fTEVOR1RIICAgICAgIDEKKyNkZWZpbmUgVFhfUkVTVUxUX1VOREVSX1JVTiAgICAgICAgIDIKKyNkZWZpbmUgVFhfUkVTVUxUX09IWV9FUlJPUiAgICAgICAgIDQKKyNkZWZpbmUgVFhfUkVTVUxUX1JFVFJZX0ZBSUwgICAgICAgIDYKKworLy8gQWxsIFBIWSByYXRlIHN1bW1hcnkgaW4gVFhECisvLyBQcmVhbWJsZSBNT0RFIGluIFR4RAorI2RlZmluZSBNT0RFX0NDSwkwCisjZGVmaW5lIE1PREVfT0ZETSAgIDEKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyNkZWZpbmUgTU9ERV9IVE1JWAkyCisjZGVmaW5lIE1PREVfSFRHUkVFTkZJRUxECTMKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKy8vIE1DUyBmb3IgQ0NLLiAgQlcuU0dJLlNUQkMgYXJlIHJlc2VydmVkCisjZGVmaW5lIE1DU19MT05HUF9SQVRFXzEgICAgICAgICAgICAgICAgICAgICAgMAkgLy8gbG9uZyBwcmVhbWJsZSBDQ0sgMU1icHMKKyNkZWZpbmUgTUNTX0xPTkdQX1JBVEVfMiAgICAgICAgICAgICAgICAgICAgICAxCS8vIGxvbmcgcHJlYW1ibGUgQ0NLIDFNYnBzCisjZGVmaW5lIE1DU19MT05HUF9SQVRFXzVfNSAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNQ1NfTE9OR1BfUkFURV8xMSAgICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgTUNTX1NIT1JUUF9SQVRFXzEgICAgICAgICAgICAgICAgICAgICAgNAkgLy8gbG9uZyBwcmVhbWJsZSBDQ0sgMU1icHMuIHNob3J0IGlzIGZvcmJpZGRlbiBpbiAxTWJwcworI2RlZmluZSBNQ1NfU0hPUlRQX1JBVEVfMiAgICAgICAgICAgICAgICAgICAgICA1CS8vIHNob3J0IHByZWFtYmxlIENDSyAyTWJwcworI2RlZmluZSBNQ1NfU0hPUlRQX1JBVEVfNV81ICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIE1DU19TSE9SVFBfUkFURV8xMSAgICAgICAgICAgICAgICAgICAgIDcKKy8vIFRvIHNlbmQgZHVwbGljYXRlIGxlZ2FjeSBPRkRNLiBzZXQgQlc9QldfNDAuICBTR0kuU1RCQyBhcmUgcmVzZXJ2ZWQKKyNkZWZpbmUgTUNTX1JBVEVfNiAgICAgICAgICAgICAgICAgICAgICAwICAgLy8gbGVnYWN5IE9GRE0KKyNkZWZpbmUgTUNTX1JBVEVfOSAgICAgICAgICAgICAgICAgICAgICAxICAgLy8gT0ZETQorI2RlZmluZSBNQ1NfUkFURV8xMiAgICAgICAgICAgICAgICAgICAgIDIgICAvLyBPRkRNCisjZGVmaW5lIE1DU19SQVRFXzE4ICAgICAgICAgICAgICAgICAgICAgMyAgIC8vIE9GRE0KKyNkZWZpbmUgTUNTX1JBVEVfMjQgICAgICAgICAgICAgICAgICAgICA0ICAvLyBPRkRNCisjZGVmaW5lIE1DU19SQVRFXzM2ICAgICAgICAgICAgICAgICAgICAgNSAgIC8vIE9GRE0KKyNkZWZpbmUgTUNTX1JBVEVfNDggICAgICAgICAgICAgICAgICAgICA2ICAvLyBPRkRNCisjZGVmaW5lIE1DU19SQVRFXzU0ICAgICAgICAgICAgICAgICAgICAgNyAvLyBPRkRNCisvLyBIVAorI2RlZmluZSBNQ1NfMAkJMAkvLyAxUworI2RlZmluZSBNQ1NfMQkJMQorI2RlZmluZSBNQ1NfMgkJMgorI2RlZmluZSBNQ1NfMwkJMworI2RlZmluZSBNQ1NfNAkJNAorI2RlZmluZSBNQ1NfNQkJNQorI2RlZmluZSBNQ1NfNgkJNgorI2RlZmluZSBNQ1NfNwkJNworI2RlZmluZSBNQ1NfOAkJOAkvLyAyUworI2RlZmluZSBNQ1NfOQkJOQorI2RlZmluZSBNQ1NfMTAJCTEwCisjZGVmaW5lIE1DU18xMQkJMTEKKyNkZWZpbmUgTUNTXzEyCQkxMgorI2RlZmluZSBNQ1NfMTMJCTEzCisjZGVmaW5lIE1DU18xNAkJMTQKKyNkZWZpbmUgTUNTXzE1CQkxNQorI2RlZmluZSBNQ1NfMTYJCTE2CS8vIDMqMworI2RlZmluZSBNQ1NfMTcJCTE3CisjZGVmaW5lIE1DU18xOAkJMTgKKyNkZWZpbmUgTUNTXzE5CQkxOQorI2RlZmluZSBNQ1NfMjAJCTIwCisjZGVmaW5lIE1DU18yMQkJMjEKKyNkZWZpbmUgTUNTXzIyCQkyMgorI2RlZmluZSBNQ1NfMjMJCTIzCisjZGVmaW5lIE1DU18zMgkJMzIKKyNkZWZpbmUgTUNTX0FVVE8JCTMzCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8vIE9JRF9IVFBIWU1PREUKKy8vIE1PREUKKyNkZWZpbmUgSFRNT0RFX01NCTAKKyNkZWZpbmUgSFRNT0RFX0dGCTEKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworLy8gRml4ZWQgVHggTU9ERSAtIEhULCBDQ0sgb3IgT0ZETQorI2RlZmluZSBGSVhFRF9UWE1PREVfSFQJCTAKKyNkZWZpbmUgRklYRURfVFhNT0RFX0NDSwkxCisjZGVmaW5lIEZJWEVEX1RYTU9ERV9PRkRNIAkyCisvLyBCVworI2RlZmluZSBCV18yMAkJQkFORF9XSURUSF8yMAorI2RlZmluZSBCV180MAkJQkFORF9XSURUSF80MAorI2RlZmluZSBCV19CT1RICQlCQU5EX1dJRFRIX0JPVEgKKyNkZWZpbmUgQldfMTAJCUJBTkRfV0lEVEhfMTAJLy8gODAyLjExaiBoYXMgMTBNSHouIFRoaXMgZGVmaW5pdGlvbiBpcyBmb3IgaW50ZXJuYWwgdXNhZ2UuIGRvZXNuJ3QgZmlsbCBpbiB0aGUgSUUgb3Igb3RoZXIgZmllbGQuCisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8vIFNIT1JUR0kKKyNkZWZpbmUgR0lfNDAwCQlHQVBfSU5URVJWQUxfNDAwCS8vIG9ubHkgc3VwcG9ydCBpbiBIVCBtb2RlCisjZGVmaW5lIEdJX0JPVEgJCUdBUF9JTlRFUlZBTF9CT1RICisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisjZGVmaW5lIEdJXzgwMAkJR0FQX0lOVEVSVkFMXzgwMAorLy8gU1RCQworI2RlZmluZSBTVEJDX05PTkUJMAorI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2RlZmluZSBTVEJDX1VTRQkxCS8vIGxpbWl0ZWQgdXNlIGluIHJ0Mjg2MGIgcGh5CisjZGVmaW5lIFJYU1RCQ19PTkUJMQkvLyByeCBzdXBwb3J0IG9mIG9uZSBzcGF0aWFsIHN0cmVhbQorI2RlZmluZSBSWFNUQkNfVFdPCTIJLy8gcnggc3VwcG9ydCBvZiAxIGFuZCAyIHNwYXRpYWwgc3RyZWFtCisjZGVmaW5lIFJYU1RCQ19USFIJMwkvLyByeCBzdXBwb3J0IG9mIDF+MyBzcGF0aWFsIHN0cmVhbQorLy8gTUNTIEZFRURCQUNLCisjZGVmaW5lIE1DU0ZCS19OT05FCTAgIC8vIG5vdCBzdXBwb3J0IG1jcyBmZWVkYmFjayAvCisjZGVmaW5lIE1DU0ZCS19SU1YJMQkvLyByZXNlcnZlZAorI2RlZmluZSBNQ1NGQktfVU5TT0xJQ0lUCTIJLy8gb25seSBzdXBwb3J0IHVuc29saWN0IG1jcyBmZWVkYmFjaworI2RlZmluZSBNQ1NGQktfTVJRCTMJLy8gcmVzcG9uc2UgdG8gYm90aCBNUlEgYW5kIHVuc29saWN0IG1jcyBmZWVkYmFjaworCisvLyBNSU1PIHBvd2VyIHNhZmUKKyNkZWZpbmUJTU1QU19TVEFUSUMJMAorI2RlZmluZQlNTVBTX0RZTkFNSUMJCTEKKyNkZWZpbmUgICBNTVBTX1JTVgkJMgorI2RlZmluZSBNTVBTX0VOQUJMRQkJMworCisKKy8vIEEtTVNEVSBzaXplCisjZGVmaW5lCUFNU0RVXzAJMAorI2RlZmluZQlBTVNEVV8xCQkxCisKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworLy8gTUNTIHVzZSA3IGJpdHMKKyNkZWZpbmUgVFhSQVRFTUlNTwkJMHg4MAorI2RlZmluZSBUWFJBVEVNQ1MJCTB4N0YKKyNkZWZpbmUgVFhSQVRFT0ZETQkJMHg3RgorI2RlZmluZSBSQVRFXzEgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBSQVRFXzIgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBSQVRFXzVfNSAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBSQVRFXzExICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBSQVRFXzYgICAgICAgICAgICAgICAgICAgICAgNCAgIC8vIE9GRE0KKyNkZWZpbmUgUkFURV85ICAgICAgICAgICAgICAgICAgICAgIDUgICAvLyBPRkRNCisjZGVmaW5lIFJBVEVfMTIgICAgICAgICAgICAgICAgICAgICA2ICAgLy8gT0ZETQorI2RlZmluZSBSQVRFXzE4ICAgICAgICAgICAgICAgICAgICAgNyAgIC8vIE9GRE0KKyNkZWZpbmUgUkFURV8yNCAgICAgICAgICAgICAgICAgICAgIDggICAvLyBPRkRNCisjZGVmaW5lIFJBVEVfMzYgICAgICAgICAgICAgICAgICAgICA5ICAgLy8gT0ZETQorI2RlZmluZSBSQVRFXzQ4ICAgICAgICAgICAgICAgICAgICAgMTAgIC8vIE9GRE0KKyNkZWZpbmUgUkFURV81NCAgICAgICAgICAgICAgICAgICAgIDExICAvLyBPRkRNCisjZGVmaW5lIFJBVEVfRklSU1RfT0ZETV9SQVRFICAgICAgICBSQVRFXzYKKyNkZWZpbmUgUkFURV9MQVNUX09GRE1fUkFURSAgICAgICAgCVJBVEVfNTQKKyNkZWZpbmUgUkFURV82XzUgICAgICAgICAgICAgICAgICAgIDEyICAvLyBIVCBtaXgKKyNkZWZpbmUgUkFURV8xMyAgICAgICAgICAgICAgICAgICAgIDEzICAvLyBIVCBtaXgKKyNkZWZpbmUgUkFURV8xOV81ICAgICAgICAgICAgICAgICAgIDE0ICAvLyBIVCBtaXgKKyNkZWZpbmUgUkFURV8yNiAgICAgICAgICAgICAgICAgICAgIDE1ICAvLyBIVCBtaXgKKyNkZWZpbmUgUkFURV8zOSAgICAgICAgICAgICAgICAgICAgIDE2ICAvLyBIVCBtaXgKKyNkZWZpbmUgUkFURV81MiAgICAgICAgICAgICAgICAgICAgIDE3ICAvLyBIVCBtaXgKKyNkZWZpbmUgUkFURV81OF81ICAgICAgICAgICAgICAgICAgIDE4ICAvLyBIVCBtaXgKKyNkZWZpbmUgUkFURV82NSAgICAgICAgICAgICAgICAgICAgIDE5ICAvLyBIVCBtaXgKKyNkZWZpbmUgUkFURV83OCAgICAgICAgICAgICAgICAgICAgIDIwICAvLyBIVCBtaXgKKyNkZWZpbmUgUkFURV8xMDQgICAgICAgICAgICAgICAgICAgIDIxICAvLyBIVCBtaXgKKyNkZWZpbmUgUkFURV8xMTcgICAgICAgICAgICAgICAgICAgIDIyICAvLyBIVCBtaXgKKyNkZWZpbmUgUkFURV8xMzAgICAgICAgICAgICAgICAgICAgIDIzICAvLyBIVCBtaXgKKy8vI2RlZmluZSBSQVRFX0FVVE9fU1dJVENIICAgICAgICAgICAgMjU1IC8vIGZvciBTdGFDZmcuRml4ZWRUeFJhdGUgb25seQorI2RlZmluZSBIVFJBVEVfMCAgICAgICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBSQVRFX0ZJUlNUX01NX1JBVEUgICAgICAgIEhUUkFURV8wCisjZGVmaW5lIFJBVEVfRklSU1RfSFRfUkFURSAgICAgICAgSFRSQVRFXzAKKyNkZWZpbmUgUkFURV9MQVNUX0hUX1JBVEUgICAgICAgIEhUUkFURV8wCisKKy8vIHBUeFdJLT50eG9wCisjZGVmaW5lIElGU19IVFRYT1AgICAgICAgICAgICAgICAgIDAJLy8gVGhlIHR4b3Agd2lsbCBiZSBoYW5kbGVzIGJ5IEFTSUMuCisjZGVmaW5lIElGU19QSUZTICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIElGU19TSUZTICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElGU19CQUNLT0ZGICAgICAgICAgICAgICAgICAzCisKKy8vIHBUeEQtPlJldHJ5TW9kZQorI2RlZmluZSBMT05HX1JFVFJZICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBTSE9SVF9SRVRSWSAgICAgICAgICAgICAgICAgMAorCisvLyBDb3VudHJ5IFJlZ2lvbiBkZWZpbml0aW9uCisjZGVmaW5lIFJFR0lPTl9NSU5JTVVNX0JHX0JBTkQgICAgICAgICAgICAwCisjZGVmaW5lIFJFR0lPTl8wX0JHX0JBTkQgICAgICAgICAgICAgICAgICAwICAgICAgIC8vIDEtMTEKKyNkZWZpbmUgUkVHSU9OXzFfQkdfQkFORCAgICAgICAgICAgICAgICAgIDEgICAgICAgLy8gMS0xMworI2RlZmluZSBSRUdJT05fMl9CR19CQU5EICAgICAgICAgICAgICAgICAgMiAgICAgICAvLyAxMC0xMQorI2RlZmluZSBSRUdJT05fM19CR19CQU5EICAgICAgICAgICAgICAgICAgMyAgICAgICAvLyAxMC0xMworI2RlZmluZSBSRUdJT05fNF9CR19CQU5EICAgICAgICAgICAgICAgICAgNCAgICAgICAvLyAxNAorI2RlZmluZSBSRUdJT05fNV9CR19CQU5EICAgICAgICAgICAgICAgICAgNSAgICAgICAvLyAxLTE0CisjZGVmaW5lIFJFR0lPTl82X0JHX0JBTkQgICAgICAgICAgICAgICAgICA2ICAgICAgIC8vIDMtOQorI2RlZmluZSBSRUdJT05fN19CR19CQU5EICAgICAgICAgICAgICAgICAgNyAgICAgICAvLyA1LTEzCisjZGVmaW5lIFJFR0lPTl8zMV9CR19CQU5EICAgICAgICAgICAgICAgICAzMSAgICAgICAvLyA1LTEzCisjZGVmaW5lIFJFR0lPTl9NQVhJTVVNX0JHX0JBTkQgICAgICAgICAgICA3CisKKyNkZWZpbmUgUkVHSU9OX01JTklNVU1fQV9CQU5EICAgICAgICAgICAgIDAKKyNkZWZpbmUgUkVHSU9OXzBfQV9CQU5EICAgICAgICAgICAgICAgICAgIDAgICAgICAgLy8gMzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0LCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NQorI2RlZmluZSBSRUdJT05fMV9BX0JBTkQgICAgICAgICAgICAgICAgICAgMSAgICAgICAvLyAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwCisjZGVmaW5lIFJFR0lPTl8yX0FfQkFORCAgICAgICAgICAgICAgICAgICAyICAgICAgIC8vIDM2LCA0MCwgNDQsIDQ4LCA1MiwgNTYsIDYwLCA2NAorI2RlZmluZSBSRUdJT05fM19BX0JBTkQgICAgICAgICAgICAgICAgICAgMyAgICAgICAvLyA1MiwgNTYsIDYwLCA2NCwgMTQ5LCAxNTMsIDE1NywgMTYxCisjZGVmaW5lIFJFR0lPTl80X0FfQkFORCAgICAgICAgICAgICAgICAgICA0ICAgICAgIC8vIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1CisjZGVmaW5lIFJFR0lPTl81X0FfQkFORCAgICAgICAgICAgICAgICAgICA1ICAgICAgIC8vIDE0OSwgMTUzLCAxNTcsIDE2MQorI2RlZmluZSBSRUdJT05fNl9BX0JBTkQgICAgICAgICAgICAgICAgICAgNiAgICAgICAvLyAzNiwgNDAsIDQ0LCA0OAorI2RlZmluZSBSRUdJT05fN19BX0JBTkQgICAgICAgICAgICAgICAgICAgNyAgICAgICAvLyAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwLCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NQorI2RlZmluZSBSRUdJT05fOF9BX0JBTkQgICAgICAgICAgICAgICAgICAgOCAgICAgICAvLyA1MiwgNTYsIDYwLCA2NAorI2RlZmluZSBSRUdJT05fOV9BX0JBTkQgICAgICAgICAgICAgICAgICAgOSAgICAgICAvLyAzNiwgNDAsIDQ0LCA0OCwgNTIsIDU2LCA2MCwgNjQsIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMzIsIDEzNiwgMTQwLCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NQorI2RlZmluZSBSRUdJT05fMTBfQV9CQU5EICAgICAgICAgICAgICAgICAgMTAJICAvLyAzNiwgNDAsIDQ0LCA0OCwgMTQ5LCAxNTMsIDE1NywgMTYxLCAxNjUKKyNkZWZpbmUgUkVHSU9OXzExX0FfQkFORCAgICAgICAgICAgICAgICAgIDExCSAgLy8gMzYsIDQwLCA0NCwgNDgsIDUyLCA1NiwgNjAsIDY0LCAxMDAsIDEwNCwgMTA4LCAxMTIsIDExNiwgMTIwLCAxNDksIDE1MywgMTU3LCAxNjEKKyNkZWZpbmUgUkVHSU9OX01BWElNVU1fQV9CQU5EICAgICAgICAgICAgIDExCisKKy8vIHBUeEQtPkNpcGhlckFsZworI2RlZmluZSBDSVBIRVJfTk9ORSAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBDSVBIRVJfV0VQNjQgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDSVBIRVJfV0VQMTI4ICAgICAgICAgICAgICAgMgorI2RlZmluZSBDSVBIRVJfVEtJUCAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDSVBIRVJfQUVTICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBDSVBIRVJfQ0tJUDY0ICAgICAgICAgICAgICAgNQorI2RlZmluZSBDSVBIRVJfQ0tJUDEyOCAgICAgICAgICAgICAgNgorI2RlZmluZSBDSVBIRVJfVEtJUF9OT19NSUMgICAgICAgICAgNyAgICAgICAvLyBNSUMgYXBwZW5kZWQgYnkgZHJpdmVyOiBub3QgYSB2YWxpZCB2YWx1ZSBpbiBoYXJkd2FyZSBrZXkgdGFibGUKKyNkZWZpbmUgQ0lQSEVSX1NNUzQJCQkJCTgKKworLy8gdmFsdWUgZG9tYWluIG9mIHBBZC0+UmZJY1R5cGUKKyNkZWZpbmUgUkZJQ18yODIwICAgICAgICAgICAgICAgICAgIDEgICAgICAgLy8gMi40RyAyVDNSCisjZGVmaW5lIFJGSUNfMjg1MCAgICAgICAgICAgICAgICAgICAyICAgICAgIC8vIDIuNEcvNUcgMlQzUgorI2RlZmluZSBSRklDXzI3MjAgICAgICAgICAgICAgICAgICAgMyAgICAgICAvLyAyLjRHIDFUMlIKKyNkZWZpbmUgUkZJQ18yNzUwICAgICAgICAgICAgICAgICAgIDQgICAgICAgLy8gMi40Ry81RyAxVDJSCisjZGVmaW5lIFJGSUNfMzAyMCAgICAgICAgICAgICAgICAgICA1ICAgICAgIC8vIDIuNEcgMVQxUgorI2RlZmluZSBSRklDXzIwMjAgICAgICAgICAgICAgICAgICAgNiAgICAgICAvLyAyLjRHIEIvRworI2RlZmluZSBSRklDXzMwMjEgICAgICAgICAgICAgICAgICAgNyAgICAgICAvLyAyLjRHIDFUMlIKKyNkZWZpbmUgUkZJQ18zMDIyICAgICAgICAgICAgICAgICAgIDggICAgICAgLy8gMi40RyAyVDJSCisKKy8vIExFRCBTdGF0dXMuCisjZGVmaW5lIExFRF9MSU5LX0RPV04gICAgICAgICAgICAgICAwCisjZGVmaW5lIExFRF9MSU5LX1VQICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIExFRF9SQURJT19PRkYgICAgICAgICAgICAgICAyCisjZGVmaW5lIExFRF9SQURJT19PTiAgICAgICAgICAgICAgICAzCisjZGVmaW5lIExFRF9IQUxUICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIExFRF9XUFMgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIExFRF9PTl9TSVRFX1NVUlZFWSAgICAgICAgICA2CisjZGVmaW5lIExFRF9QT1dFUl9VUCAgICAgICAgICAgICAgICA3CisKKy8vIHZhbHVlIGRvbWFpbiBvZiBwQWQtPkxlZENudGwuTGVkTW9kZSBhbmQgRTJQUk9NCisjZGVmaW5lIExFRF9NT0RFX0RFRkFVTFQgICAgICAgICAgICAwCisjZGVmaW5lIExFRF9NT0RFX1RXT19MRUQJCQkxCisjZGVmaW5lIExFRF9NT0RFX1NJR05BTF9TVFJFR1RICQk4ICAvLyBFRVBST00gZGVmaW5lID04CisKKy8vIFJDNCBpbml0IHZhbHVlLCB1c2VkIGZybyBXRVAgJiBUS0lQCisjZGVmaW5lIFBQUElOSVRGQ1MzMiAgICAgICAgICAgICAgICAweGZmZmZmZmZmICAgLyogSW5pdGlhbCBGQ1MgdmFsdWUgKi8KKworLy8gdmFsdWUgZG9tYWluIG9mIHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkLiA4MDIuMVggY29udHJvbGxlZCBwb3J0IGRlZmluaXRpb24KKyNkZWZpbmUgV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQgICAgIDEKKyNkZWZpbmUgV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEIDIKKworI2RlZmluZSBQQUlSV0lTRV9LRVkgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHUk9VUF9LRVkgICAgICAgICAgICAgICAgICAgMgorCisvL2RlZmluaXRpb24gb2YgRFJTCisjZGVmaW5lIE1BWF9TVEVQX09GX1RYX1JBVEVfU1dJVENICTMyCisKKworLy8gcHJlLWFsbG9jYXRlZCBmcmVlIE5ESVMgUEFDS0VUL0JVRkZFUiBwb2xsIGZvciBpbnRlcm5hbCB1c2FnZQorI2RlZmluZSBNQVhfTlVNX09GX0ZSRUVfTkRJU19QQUNLRVQgMTI4CisKKy8vQmxvY2sgQUNLCisjZGVmaW5lIE1BWF9UWF9SRU9SREVSQlVGICAgNjQKKyNkZWZpbmUgTUFYX1JYX1JFT1JERVJCVUYgICA2NAorI2RlZmluZSBERUZBVUxUX1RYX1RJTUVPVVQgICAzMAorI2RlZmluZSBERUZBVUxUX1JYX1RJTUVPVVQgICAzMAorCisvLyBkZWZpbml0aW9uIG9mIFJlY2lwaWVudCBvciBPcmlnaW5hdG9yCisjZGVmaW5lIElfUkVDSVBJRU5UICAgICAgICAgICAgICAgICAgVFJVRQorI2RlZmluZSBJX09SSUdJTkFUT1IgICAgICAgICAgICAgICAgICAgRkFMU0UKKworI2RlZmluZSBERUZBVUxUX0JCUF9UWF9QT1dFUiAgICAgICAgMAorI2RlZmluZSBERUZBVUxUX1JGX1RYX1BPV0VSICAgICAgICAgNQorCisjZGVmaW5lIE1BWF9JTklfQlVGRkVSX1NJWkUJCQk0MDk2CisjZGVmaW5lIE1BWF9QQVJBTV9CVUZGRVJfU0laRQkJKDIwNDgpIC8vIGVub3VnaCBmb3IgQUNMICgxOCo2NCkKKwkJCQkJCQkJCQkJLy8xOCA6IHRoZSBsZW5ndGggb2YgTWFjIGFkZHJlc3MgYWNjZXB0YWJsZSBmb3JtYXQgIjAxOjAyOjAzOjA0OjA1OjA2OyIpCisJCQkJCQkJCQkJCS8vNjQgOiBNQVhfTlVNX09GX0FDTF9MSVNUCisvLyBkZWZpbml0aW9uIG9mIHBBZC0+T3BNb2RlCisjZGVmaW5lIE9QTU9ERV9TVEEgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE9QTU9ERV9BUCAgICAgICAgICAgICAgICAgICAxCisvLyNkZWZpbmUgT1BNT0RFX0wzX0JSRyAgICAgICAgICAgICAgIDIgICAgICAgLy8gYXMgQVAgYW5kIFNUQSBhdCB0aGUgc2FtZSB0aW1lCisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisjZGVmaW5lIERJUl9SRUFEICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERJUl9XUklURSAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRZUEVfVFhEICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRZUEVfUlhEICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRZUEVfVFhJTkZPCQkJCQkwCisjZGVmaW5lIFRZUEVfUlhJTkZPCQkJCQkxCisjZGVmaW5lIFRZUEVfVFhXSQkJCQkJMAorI2RlZmluZSBUWVBFX1JYV0kJCQkJCTEKKyNlbmRpZgorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09IEFQIHJ0bXBfZGVmLmggPT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyB2YWx1ZSBkb21haW4gZm9yIHBBZC0+RXZlbnRUYWIuTG9nW10uRXZlbnQKKyNkZWZpbmUgRVZFTlRfUkVTRVRfQUNDRVNTX1BPSU5UICAgIDAgLy8gTG9nID0gImhoOm1tOnNzICAgUmVzdGFydCBBY2Nlc3MgUG9pbnQiCisjZGVmaW5lIEVWRU5UX0FTU09DSUFURUQgICAgICAgICAgICAxIC8vIExvZyA9ICJoaDptbTpzcyAgIFNUQSAwMDowMTowMjowMzowNDowNSBhc3NvY2lhdGVkIgorI2RlZmluZSBFVkVOVF9ESVNBU1NPQ0lBVEVEICAgICAgICAgMiAvLyBMb2cgPSAiaGg6bW06c3MgICBTVEEgMDA6MDE6MDI6MDM6MDQ6MDUgbGVmdCB0aGlzIEJTUyIKKyNkZWZpbmUgRVZFTlRfQUdFRF9PVVQgICAgICAgICAgICAgIDMgLy8gTG9nID0gImhoOm1tOnNzICAgU1RBIDAwOjAxOjAyOjAzOjA0OjA1IHdhcyBhZ2VkLW91dCBhbmQgcmVtb3ZlZCBmcm9tIHRoaXMgQlNTIgorI2RlZmluZSBFVkVOVF9DT1VOVEVSX00gICAgICAgICAgICAgNAorI2RlZmluZSBFVkVOVF9JTlZBTElEX1BTSyAgICAgICAgICAgNQorI2RlZmluZSBFVkVOVF9NQVhfRVZFTlRfVFlQRSAgICAgICAgNgorLy8gPT09PSBlbmQgb2YgQVAgcnRtcF9kZWYuaCA9PT09PT09PT09PT0KKworLy8gZGVmaW5pdGlvbiBSU1NJIE51bWJlcgorI2RlZmluZSBSU1NJXzAJCQkJCTAKKyNkZWZpbmUgUlNTSV8xCQkJCQkxCisjZGVmaW5lIFJTU0lfMgkJCQkJMgorCisvLyBkZWZpbml0aW9uIG9mIHJhZGFyIGRldGVjdGlvbgorI2RlZmluZSBSRF9OT1JNQUxfTU9ERQkJCQkwCS8vIE5vdCBmb3VuZCByYWRhciBzaWduYWwKKyNkZWZpbmUgUkRfU1dJVENISU5HX01PREUJCQkxCS8vIEZvdW5kIHJhZGFyIHNpZ25hbCwgYW5kIGRvaW5nIGNoYW5uZWwgc3dpdGNoCisjZGVmaW5lIFJEX1NJTEVOQ0VfTU9ERQkJCQkyCS8vIEFmdGVyIGNoYW5uZWwgc3dpdGNoLCBuZWVkIHRvIGJlIHNpbGVuY2UgYSB3aGlsZSB0byBlbnN1cmUgcmFkYXIgbm90IGZvdW5kCisKKy8vRHJpdmVyIGRlZmluZWQgY2lkIGZvciBtYXBwaW5nIHN0YXR1cyBhbmQgY29tbWFuZC4KKyNkZWZpbmUgIFNMRUVQQ0lECTB4MTEKKyNkZWZpbmUgIFdBS0VDSUQJMHgyMgorI2RlZmluZSAgUVVFUllQT1dFUkNJRAkweDMzCisjZGVmaW5lICBPV05FUk1DVQkweDEKKyNkZWZpbmUgIE9XTkVSQ1BVCTB4MAorCisvLyBNQlNTSUQgZGVmaW5pdGlvbgorI2RlZmluZSBFTlRSWV9OT1RfRk9VTkQgICAgICAgICAgICAgMHhGRgorCisKKy8qIEFmdGVyIExpbnV4IDIuNi45LAorICogVkxBTiBtb2R1bGUgdXNlIFByaXZhdGUgKGZyb20gdXNlcikgaW50ZXJmYWNlIGZsYWdzIChuZXRkZXZpY2UtPnByaXZfZmxhZ3MpLgorICogI2RlZmluZSBJRkZfODAyXzFRX1ZMQU4gMHgxICAgICAgICAgLS0gICAgODAyLjFRIFZMQU4gZGV2aWNlLiAgaW4gaWYuaAorICogcmVmIHRvIGlwX3NhYm90YWdlX291dCgpIFsgb3V0LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOIF0gaW4gYnJfbmV0ZmlsdGVyLmMKKyAqCisgKiBGb3IgdGhpcyByZWFzb24sIHdlIE1VU1QgdXNlIEVWRU4gdmFsdWUgaW4gcHJpdl9mbGFncworICovCisjZGVmaW5lIElOVF9NQUlOICAgICAgICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgSU5UX01CU1NJRCAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBJTlRfV0RTICAgICAgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIElOVF9BUENMSSAgICAgICAgICAgICAgICAgICAweDA0MDAKKyNkZWZpbmUgSU5UX01FU0ggICAgICAgICAgICAgICAgICAgCTB4MDUwMAorCisvLyBVc2UgYml0bWFwIHRvIGFsbG93IGNvZXhpc3Qgb2YgQVRFX1RYRlJBTUUgYW5kIEFURV9SWEZSQU1FKGkuZS4sdG8gc3VwcG9ydCBMb29wQmFjayBtb2RlKQorI2lmZGVmIFJBTElOS19BVEUKKyNkZWZpbmUJQVRFX1NUQVJUICAgICAgICAgICAgICAgICAgIDB4MDAgICAvLyBTdGFydCBBVEUKKyNkZWZpbmUJQVRFX1NUT1AgICAgICAgICAgICAgICAgICAgIDB4ODAgICAvLyBTdG9wIEFURQorI2RlZmluZQlBVEVfVFhDT05UICAgICAgICAgICAgICAgICAgMHgwNSAgIC8vIENvbnRpbnVvdXMgVHJhbnNtaXQKKyNkZWZpbmUJQVRFX1RYQ0FSUiAgICAgICAgICAgICAgICAgIDB4MDkgICAvLyBUcmFuc21pdCBDYXJyaWVyCisjZGVmaW5lCUFURV9UWENBUlJTVVBQICAgICAgICAgICAgICAweDExICAgLy8gVHJhbnNtaXQgQ2FycmllciBTdXBwcmVzc2lvbgorI2RlZmluZQlBVEVfVFhGUkFNRSAgICAgICAgICAgICAgICAgMHgwMSAgIC8vIFRyYW5zbWl0IEZyYW1lcworI2RlZmluZQlBVEVfUlhGUkFNRSAgICAgICAgICAgICAgICAgMHgwMiAgIC8vIFJlY2VpdmUgRnJhbWVzCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKyNkZWZpbmUgQVRFX1RYU1RPUCAgICAgICAgICAgICAgICAgIDB4ZTIgICAvLyBTdG9wIFRyYW5zbWl0aW9uKGkuZS4sIFRYQ09OVCwgVFhDQVJSLCBUWENBUlJTVVBQLCBhbmQgVFhGUkFNRSkKKyNkZWZpbmUgQVRFX1JYU1RPUAkJCQkJMHhmZCAgIC8vIFN0b3AgcmVjZWl2aW5nIEZyYW1lcworI2RlZmluZQlCQlAyMl9UWEZSQU1FICAgICAJCQkweDAwICAgLy8gVHJhbnNtaXQgRnJhbWVzCisjZGVmaW5lCUJCUDIyX1RYQ09OVF9PUl9DQVJSU1VQUCAgICAweDgwICAgLy8gQ29udGludW91cyBUcmFuc21pdCBvciBDYXJyaWVyIFN1cHByZXNzaW9uCisjZGVmaW5lCUJCUDIyX1RYQ0FSUiAgICAgICAgICAgICAgICAweGMxICAgLy8gVHJhbnNtaXQgQ2FycmllcgorI2RlZmluZQlCQlAyNF9UWENPTlQgICAgICAgICAgICAgICAgMHgwMCAgIC8vIENvbnRpbnVvdXMgVHJhbnNtaXQKKyNkZWZpbmUJQkJQMjRfQ0FSUlNVUFAgICAgICAgICAgICAgIDB4MDEgICAvLyBDYXJyaWVyIFN1cHByZXNzaW9uCisjZW5kaWYgLy8gUkFMSU5LXzI4eHhfUUEgLy8KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKy8vIFdFUCBLZXkgVFlQRQorI2RlZmluZSBXRVBfSEVYQURFQ0lNQUxfVFlQRSAgICAwCisjZGVmaW5lIFdFUF9BU0NJSV9UWVBFICAgICAgICAgIDEKKworCisKKy8vIFdJUkVMRVNTIEVWRU5UUyBkZWZpbml0aW9uCisvKiBNYXggbnVtYmVyIG9mIGNoYXIgaW4gY3VzdG9tIGV2ZW50LCByZWZlciB0byB3aXJlbGVzc190b29scy4yOC93aXJlbGVzcy4yMC5oICovCisjZGVmaW5lIElXX0NVU1RPTV9NQVhfTEVOCQkJCSAgCQkJMjU1CS8qIEluIGJ5dGVzICovCisKKy8vIEZvciBzeXN0ZW0gZXZlbnQgLSBzdGFydAorI2RlZmluZQlJV19TWVNfRVZFTlRfRkxBR19TVEFSVCAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZQlJV19BU1NPQ19FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZQlJV19ESVNBU1NPQ19FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMQorI2RlZmluZQlJV19ERUFVVEhfRVZFTlRfRkxBRyAgICAgICAgICAgICAgICAgICAgICAJMHgwMjAyCisjZGVmaW5lCUlXX0FHRU9VVF9FVkVOVF9GTEFHICAgICAgICAgICAgICAgICAgICAgIAkweDAyMDMKKyNkZWZpbmUJSVdfQ09VTlRFUl9NRUFTVVJFU19FVkVOVF9GTEFHICAgICAgICAgICAgICAweDAyMDQKKyNkZWZpbmUJSVdfUkVQTEFZX0NPVU5URVJfRElGRl9FVkVOVF9GTEFHICAgICAgICAgICAweDAyMDUKKyNkZWZpbmUJSVdfUlNOSUVfRElGRl9FVkVOVF9GTEFHICAgICAgICAgICAJCQkweDAyMDYKKyNkZWZpbmUJSVdfTUlDX0RJRkZfRVZFTlRfRkxBRyAgICAgICAgICAgCQkJMHgwMjA3CisjZGVmaW5lIElXX0lDVl9FUlJPUl9FVkVOVF9GTEFHCQkJCQkJMHgwMjA4CisjZGVmaW5lIElXX01JQ19FUlJPUl9FVkVOVF9GTEFHCQkJCQkJMHgwMjA5CisjZGVmaW5lIElXX0dST1VQX0hTX1RJTUVPVVRfRVZFTlRfRkxBRwkJCQkweDAyMEEKKyNkZWZpbmUJSVdfUEFJUldJU0VfSFNfVElNRU9VVF9FVkVOVF9GTEFHCQkJMHgwMjBCCisjZGVmaW5lIElXX1JTTklFX1NBTklUWV9GQUlMX0VWRU5UX0ZMQUcJCQkJMHgwMjBDCisjZGVmaW5lIElXX1NFVF9LRVlfRE9ORV9XUEExX0VWRU5UX0ZMQUcJCQkJMHgwMjBECisjZGVmaW5lIElXX1NFVF9LRVlfRE9ORV9XUEEyX0VWRU5UX0ZMQUcJCQkJMHgwMjBFCisjZGVmaW5lIElXX1NUQV9MSU5LVVBfRVZFTlRfRkxBRwkJCQkJMHgwMjBGCisjZGVmaW5lIElXX1NUQV9MSU5LRE9XTl9FVkVOVF9GTEFHCQkJCQkweDAyMTAKKyNkZWZpbmUgSVdfU0NBTl9DT01QTEVURURfRVZFTlRfRkxBRwkJCQkweDAyMTEKKyNkZWZpbmUgSVdfU0NBTl9FTlFVRVVFX0ZBSUxfRVZFTlRfRkxBRwkJCQkweDAyMTIKKy8vIGlmIGFkZCBuZXcgc3lzdGVtIGV2ZW50IGZsYWcsIHBsZWFzZSB1cGFkdGUgdGhlIElXX1NZU19FVkVOVF9GTEFHX0VORAorI2RlZmluZQlJV19TWVNfRVZFTlRfRkxBR19FTkQgICAgICAgICAgICAgICAgICAgICAgIDB4MDIxMgorI2RlZmluZQlJV19TWVNfRVZFTlRfVFlQRV9OVU0JCQkJCQkoSVdfU1lTX0VWRU5UX0ZMQUdfRU5EIC0gSVdfU1lTX0VWRU5UX0ZMQUdfU1RBUlQgKyAxKQorLy8gRm9yIHN5c3RlbSBldmVudCAtIGVuZAorCisvLyBGb3Igc3Bvb2YgYXR0YWNrIGV2ZW50IC0gc3RhcnQKKyNkZWZpbmUJSVdfU1BPT0ZfRVZFTlRfRkxBR19TVEFSVCAgICAgICAgICAgICAgICAgICAweDAzMDAKKyNkZWZpbmUgSVdfQ09ORkxJQ1RfU1NJRF9FVkVOVF9GTEFHCQkJCQkweDAzMDAKKyNkZWZpbmUgSVdfU1BPT0ZfQVNTT0NfUkVTUF9FVkVOVF9GTEFHCQkJCTB4MDMwMQorI2RlZmluZSBJV19TUE9PRl9SRUFTU09DX1JFU1BfRVZFTlRfRkxBRwkJCTB4MDMwMgorI2RlZmluZSBJV19TUE9PRl9QUk9CRV9SRVNQX0VWRU5UX0ZMQUcJCQkJMHgwMzAzCisjZGVmaW5lIElXX1NQT09GX0JFQUNPTl9FVkVOVF9GTEFHCQkJCQkweDAzMDQKKyNkZWZpbmUgSVdfU1BPT0ZfRElTQVNTT0NfRVZFTlRfRkxBRwkJCQkweDAzMDUKKyNkZWZpbmUgSVdfU1BPT0ZfQVVUSF9FVkVOVF9GTEFHCQkJCQkweDAzMDYKKyNkZWZpbmUgSVdfU1BPT0ZfREVBVVRIX0VWRU5UX0ZMQUcJCQkJCTB4MDMwNworI2RlZmluZSBJV19TUE9PRl9VTktOT1dOX01HTVRfRVZFTlRfRkxBRwkJCTB4MDMwOAorI2RlZmluZSBJV19SRVBMQVlfQVRUQUNLX0VWRU5UX0ZMQUcJCQkJCTB4MDMwOQorLy8gaWYgYWRkIG5ldyBzcG9vZiBhdHRhY2sgZXZlbnQgZmxhZywgcGxlYXNlIHVwYWR0ZSB0aGUgSVdfU1BPT0ZfRVZFTlRfRkxBR19FTkQKKyNkZWZpbmUJSVdfU1BPT0ZfRVZFTlRfRkxBR19FTkQgICAgICAgICAgICAgICAgICAgICAweDAzMDkKKyNkZWZpbmUJSVdfU1BPT0ZfRVZFTlRfVFlQRV9OVU0JCQkJCQkoSVdfU1BPT0ZfRVZFTlRfRkxBR19FTkQgLSBJV19TUE9PRl9FVkVOVF9GTEFHX1NUQVJUICsgMSkKKy8vIEZvciBzcG9vZiBhdHRhY2sgZXZlbnQgLSBlbmQKKworLy8gRm9yIGZsb29kaW5nIGF0dGFjayBldmVudCAtIHN0YXJ0CisjZGVmaW5lCUlXX0ZMT09EX0VWRU5UX0ZMQUdfU1RBUlQgICAgICAgICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIElXX0ZMT09EX0FVVEhfRVZFTlRfRkxBRwkJCQkJMHgwNDAwCisjZGVmaW5lIElXX0ZMT09EX0FTU09DX1JFUV9FVkVOVF9GTEFHCQkJCTB4MDQwMQorI2RlZmluZSBJV19GTE9PRF9SRUFTU09DX1JFUV9FVkVOVF9GTEFHCQkJCTB4MDQwMgorI2RlZmluZSBJV19GTE9PRF9QUk9CRV9SRVFfRVZFTlRfRkxBRwkJCQkweDA0MDMKKyNkZWZpbmUgSVdfRkxPT0RfRElTQVNTT0NfRVZFTlRfRkxBRwkJCQkweDA0MDQKKyNkZWZpbmUgSVdfRkxPT0RfREVBVVRIX0VWRU5UX0ZMQUcJCQkJCTB4MDQwNQorI2RlZmluZSBJV19GTE9PRF9FQVBfUkVRX0VWRU5UX0ZMQUcJCQkJCTB4MDQwNgorLy8gaWYgYWRkIG5ldyBmbG9vZGluZyBhdHRhY2sgZXZlbnQgZmxhZywgcGxlYXNlIHVwYWR0ZSB0aGUgSVdfRkxPT0RfRVZFTlRfRkxBR19FTkQKKyNkZWZpbmUJSVdfRkxPT0RfRVZFTlRfRkxBR19FTkQgICAgICAgICAgICAgICAgICAgCTB4MDQwNgorI2RlZmluZQlJV19GTE9PRF9FVkVOVF9UWVBFX05VTQkJCQkJCShJV19GTE9PRF9FVkVOVF9GTEFHX0VORCAtIElXX0ZMT09EX0VWRU5UX0ZMQUdfU1RBUlQgKyAxKQorLy8gRm9yIGZsb29kaW5nIGF0dGFjayAtIGVuZAorCisvLyBFbmQgLSBXSVJFTEVTUyBFVkVOVFMgZGVmaW5pdGlvbgorCisjaWZkZWYgQ09ORklHX1NUQV9TVVBQT1JUCisvLyBkZWZpbml0aW9uIGZvciBETFMsIGthdGh5CisjZGVmaW5lCU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlkgICAxCisjZGVmaW5lCU1BWF9OVU1fT0ZfRExTX0VOVFJZICAgICAgICBNQVhfTlVNQkVSX09GX0RMU19FTlRSWQorCisvL0Jsb2NrIEFDSyAsIHJ0Mjg2MCwga2F0aHkKKyNkZWZpbmUgTUFYX1RYX1JFT1JERVJCVUYJCTY0CisjZGVmaW5lIE1BWF9SWF9SRU9SREVSQlVGCQk2NAorI2RlZmluZSBERUZBVUxUX1RYX1RJTUVPVVQJCTMwCisjZGVmaW5lIERFRkFVTFRfUlhfVElNRU9VVAkJMzAKKyNpZm5kZWYgQ09ORklHX0FQX1NVUFBPUlQKKyNkZWZpbmUgTUFYX0JBUkVDSV9TRVNTSU9OCQk4CisjZW5kaWYKKworI2lmbmRlZiBJV19FU1NJRF9NQVhfU0laRQorLyogTWF4aW11bSBzaXplIG9mIHRoZSBFU1NJRCBhbmQgcEFkLT5uaWNrbmFtZSBzdHJpbmdzICovCisjZGVmaW5lIElXX0VTU0lEX01BWF9TSVpFICAgCQkzMgorI2VuZGlmCisjZW5kaWYgLy8gQ09ORklHX1NUQV9TVVBQT1JUIC8vCisKKyNpZmRlZiBNQ0FTVF9SQVRFX1NQRUNJRklDCisjZGVmaW5lIE1DQVNUX0RJU0FCTEUJMAorI2RlZmluZSBNQ0FTVF9DQ0sJCTEKKyNkZWZpbmUgTUNBU1RfT0ZETQkJMgorI2RlZmluZSBNQ0FTVF9IVE1JWAkJMworI2VuZGlmIC8vIE1DQVNUX1JBVEVfU1BFQ0lGSUMgLy8KKworLy8gRm9yIEFzaWNSYWRpb09mZi9Bc2ljUmFkaW9PbiBmdW5jdGlvbgorI2RlZmluZSBET1QxMVBPV0VSU0FWRQkJMAorI2RlZmluZSBHVUlSQURJT19PRkYJCTEKKyNkZWZpbmUgUlRNUF9IQUxUCQkgICAgMgorI2RlZmluZSBHVUlfSURMRV9QT1dFUl9TQVZFCQkzCisvLyAtLQorCisKKy8vIGRlZmluaXRpb24gZm9yIFdwYVN1cHBvcnQgZmxhZworI2RlZmluZSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFCQkJCTAKKyNkZWZpbmUgV1BBX1NVUFBMSUNBTlRfRU5BQkxFCQkJCTEKKyNkZWZpbmUJV1BBX1NVUFBMSUNBTlRfRU5BQkxFX1dJVEhfV0VCX1VJCTIKKworLy8gRW5kaWFuIGJ5dGUgc3dhcHBpbmcgY29kZXMKKyNkZWZpbmUgU1dBUDE2KHgpIFwKKyAgICAoKFVJTlQxNikoIFwKKyAgICAoKChVSU5UMTYpKHgpICYgKFVJTlQxNikgMHgwMGZmVSkgPDwgOCkgfCBcCisgICAgKCgoVUlOVDE2KSh4KSAmIChVSU5UMTYpIDB4ZmYwMFUpID4+IDgpICkpCisKKyNkZWZpbmUgU1dBUDMyKHgpIFwKKyAgICAoKFVJTlQzMikoIFwKKyAgICAoKChVSU5UMzIpKHgpICYgKFVJTlQzMikgMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCBcCisgICAgKCgoVUlOVDMyKSh4KSAmIChVSU5UMzIpIDB4MDAwMGZmMDBVTCkgPDwgIDgpIHwgXAorICAgICgoKFVJTlQzMikoeCkgJiAoVUlOVDMyKSAweDAwZmYwMDAwVUwpID4+ICA4KSB8IFwKKyAgICAoKChVSU5UMzIpKHgpICYgKFVJTlQzMikgMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSkKKworI2RlZmluZSBTV0FQNjQoeCkgXAorICAgICgoVUlOVDY0KSggXAorICAgIChVSU5UNjQpKCgoVUlOVDY0KSh4KSAmIChVSU5UNjQpIDB4MDAwMDAwMDAwMDAwMDBmZlVMTCkgPDwgNTYpIHwgXAorICAgIChVSU5UNjQpKCgoVUlOVDY0KSh4KSAmIChVSU5UNjQpIDB4MDAwMDAwMDAwMDAwZmYwMFVMTCkgPDwgNDApIHwgXAorICAgIChVSU5UNjQpKCgoVUlOVDY0KSh4KSAmIChVSU5UNjQpIDB4MDAwMDAwMDAwMGZmMDAwMFVMTCkgPDwgMjQpIHwgXAorICAgIChVSU5UNjQpKCgoVUlOVDY0KSh4KSAmIChVSU5UNjQpIDB4MDAwMDAwMDBmZjAwMDAwMFVMTCkgPDwgIDgpIHwgXAorICAgIChVSU5UNjQpKCgoVUlOVDY0KSh4KSAmIChVSU5UNjQpIDB4MDAwMDAwZmYwMDAwMDAwMFVMTCkgPj4gIDgpIHwgXAorICAgIChVSU5UNjQpKCgoVUlOVDY0KSh4KSAmIChVSU5UNjQpIDB4MDAwMGZmMDAwMDAwMDAwMFVMTCkgPj4gMjQpIHwgXAorICAgIChVSU5UNjQpKCgoVUlOVDY0KSh4KSAmIChVSU5UNjQpIDB4MDBmZjAwMDAwMDAwMDAwMFVMTCkgPj4gNDApIHwgXAorICAgIChVSU5UNjQpKCgoVUlOVDY0KSh4KSAmIChVSU5UNjQpIDB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkgPj4gNTYpICkpCisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisKKyNkZWZpbmUgY3B1MmxlNjQoeCkgU1dBUDY0KCh4KSkKKyNkZWZpbmUgbGUyY3B1NjQoeCkgU1dBUDY0KCh4KSkKKyNkZWZpbmUgY3B1MmxlMzIoeCkgU1dBUDMyKCh4KSkKKyNkZWZpbmUgbGUyY3B1MzIoeCkgU1dBUDMyKCh4KSkKKyNkZWZpbmUgY3B1MmxlMTYoeCkgU1dBUDE2KCh4KSkKKyNkZWZpbmUgbGUyY3B1MTYoeCkgU1dBUDE2KCh4KSkKKyNkZWZpbmUgY3B1MmJlNjQoeCkgKChVSU5UNjQpKHgpKQorI2RlZmluZSBiZTJjcHU2NCh4KSAoKFVJTlQ2NCkoeCkpCisjZGVmaW5lIGNwdTJiZTMyKHgpICgoVUlOVDMyKSh4KSkKKyNkZWZpbmUgYmUyY3B1MzIoeCkgKChVSU5UMzIpKHgpKQorI2RlZmluZSBjcHUyYmUxNih4KSAoKFVJTlQxNikoeCkpCisjZGVmaW5lIGJlMmNwdTE2KHgpICgoVUlOVDE2KSh4KSkKKworI2Vsc2UgICAvLyBMaXR0bGVfRW5kaWFuCisKKyNkZWZpbmUgY3B1MmxlNjQoeCkgKChVSU5UNjQpKHgpKQorI2RlZmluZSBsZTJjcHU2NCh4KSAoKFVJTlQ2NCkoeCkpCisjZGVmaW5lIGNwdTJsZTMyKHgpICgoVUlOVDMyKSh4KSkKKyNkZWZpbmUgbGUyY3B1MzIoeCkgKChVSU5UMzIpKHgpKQorI2RlZmluZSBjcHUybGUxNih4KSAoKFVJTlQxNikoeCkpCisjZGVmaW5lIGxlMmNwdTE2KHgpICgoVUlOVDE2KSh4KSkKKyNkZWZpbmUgY3B1MmJlNjQoeCkgU1dBUDY0KCh4KSkKKyNkZWZpbmUgYmUyY3B1NjQoeCkgU1dBUDY0KCh4KSkKKyNkZWZpbmUgY3B1MmJlMzIoeCkgU1dBUDMyKCh4KSkKKyNkZWZpbmUgYmUyY3B1MzIoeCkgU1dBUDMyKCh4KSkKKyNkZWZpbmUgY3B1MmJlMTYoeCkgU1dBUDE2KCh4KSkKKyNkZWZpbmUgYmUyY3B1MTYoeCkgU1dBUDE2KCh4KSkKKworI2VuZGlmICAvLyBSVF9CSUdfRU5ESUFOCisKKyNlbmRpZiAgLy8gX19SVE1QX0RFRl9IX18KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3J0bXBfdHlwZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydG1wX3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTRiMTY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9ydG1wX3R5cGUuaApAQCAtMCwwICsxLDk1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIE1vZHVsZSBOYW1lOgorICAgIHJ0bXBfdHlwZS5oCisKKyAgICBBYnN0cmFjdDoKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICAgIFdoYXQKKyAgICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIE5hbWUgICAgICAgIERhdGUgICAgICAgICAgICBNb2RpZmljYXRpb24gbG9ncworICAgIFBhdWwgTGluICAgIDEtMi0yMDA0CisqLworI2lmbmRlZiBfX1JUTVBfVFlQRV9IX18KKyNkZWZpbmUgX19SVE1QX1RZUEVfSF9fCisKKworI2RlZmluZSBQQUNLRUQgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQorCisvLyBQdXQgcGxhdGZvcm0gZGVwZW5kZW50IGRlY2xhcmF0aW9uIGhlcmUKKy8vIEZvciBleGFtcGxlLCBsaW51eCB0eXBlIGRlZmluaXRpb24KK3R5cGVkZWYgdW5zaWduZWQgY2hhcgkJVUlOVDg7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQlVSU5UMTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludAkJVUlOVDMyOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcJVUlOVDY0OwordHlwZWRlZiBpbnQJCQkJCUlOVDMyOwordHlwZWRlZiBsb25nIGxvbmcgCQkJSU5UNjQ7CisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAqCQkJUFVJTlQ4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAqCQlQVUlOVDE2OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgKgkJCVBVSU5UMzI7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAqCVBVSU5UNjQ7Cit0eXBlZGVmIGludAkqCQkJCQlQSU5UMzI7Cit0eXBlZGVmIGxvbmcgbG9uZyAqIAkJCVBJTlQ2NDsKKwordHlwZWRlZiBzaWduZWQgY2hhcgkJCUNIQVI7Cit0eXBlZGVmIHNpZ25lZCBzaG9ydAkJU0hPUlQ7Cit0eXBlZGVmIHNpZ25lZCBpbnQJCQlJTlQ7Cit0eXBlZGVmIHNpZ25lZCBsb25nCQkJTE9ORzsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZwlMT05HTE9ORzsKKworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCVVDSEFSOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJVVNIT1JUOwordHlwZWRlZiB1bnNpZ25lZCBpbnQJCVVJTlQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJCVVMT05HOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcJVUxPTkdMT05HOworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCUJPT0xFQU47Cit0eXBlZGVmIHZvaWQJCQkJVk9JRDsKKwordHlwZWRlZiBWT0lEICoJCQkJUFZPSUQ7Cit0eXBlZGVmIENIQVIgKgkJCQlQQ0hBUjsKK3R5cGVkZWYgVUNIQVIgKiAJCQlQVUNIQVI7Cit0eXBlZGVmIFVTSE9SVCAqCQkJUFVTSE9SVDsKK3R5cGVkZWYgTE9ORyAqCQkJCVBMT05HOwordHlwZWRlZiBVTE9ORyAqCQkJCVBVTE9ORzsKK3R5cGVkZWYgVUlOVCAqCQkJCVBVSU5UOworCit0eXBlZGVmIHVuc2lnbmVkIGludAlORElTX01FRElBX1NUQVRFOworCit0eXBlZGVmIHVuaW9uIF9MQVJHRV9JTlRFR0VSIHsKKyAgICBzdHJ1Y3QgeworICAgICAgICBVSU5UIExvd1BhcnQ7CisgICAgICAgIElOVDMyIEhpZ2hQYXJ0OworICAgIH0gdTsKKyAgICBJTlQ2NCBRdWFkUGFydDsKK30gTEFSR0VfSU5URUdFUjsKKworI2VuZGlmICAvLyBfX1JUTVBfVFlQRV9IX18KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zcGVjdHJ1bS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zcGVjdHJ1bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0Y2ZhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3NwZWN0cnVtLmgKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNpZm5kZWYgX19TUEVDVFJVTV9IX18KKyNkZWZpbmUgX19TUEVDVFJVTV9IX18KKworI2luY2x1ZGUgInJ0bXBfdHlwZS5oIgorI2luY2x1ZGUgInNwZWN0cnVtX2RlZi5oIgorCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1RQQ19SRVBPUlRfSU5GTworeworCVVJTlQ4IFR4UHdyOworCVVJTlQ4IExpbmtNYXJnaW47Cit9IFRQQ19SRVBPUlRfSU5GTywgKlBUUENfUkVQT1JUX0lORk87CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfQ0hfU1dfQU5OX0lORk8KK3sKKwlVSU5UOCBDaFN3TW9kZTsKKwlVSU5UOCBDaGFubmVsOworCVVJTlQ4IENoU3dDbnQ7Cit9IENIX1NXX0FOTl9JTkZPLCAqUENIX1NXX0FOTl9JTkZPOworCit0eXBlZGVmIHVuaW9uIFBBQ0tFRCBfTUVBU1VSRV9SRVFfTU9ERQoreworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwlzdHJ1Y3QgUEFDS0VECisJeworCQlVSU5UOCBSZXYxOjQ7CisJCVVJTlQ4IFJlcG9ydDoxOworCQlVSU5UOCBSZXF1ZXN0OjE7CisJCVVJTlQ4IEVuYWJsZToxOworCQlVSU5UOCBSZXYwOjE7CisJfSBmaWVsZDsKKyNlbHNlCisJc3RydWN0IFBBQ0tFRAorCXsKKwkJVUlOVDggUmV2MDoxOworCQlVSU5UOCBFbmFibGU6MTsKKwkJVUlOVDggUmVxdWVzdDoxOworCQlVSU5UOCBSZXBvcnQ6MTsKKwkJVUlOVDggUmV2MTo0OworCX0gZmllbGQ7CisjZW5kaWYgLy8gUlRfQklHX0VORElBTiAvLworCVVJTlQ4IHdvcmQ7Cit9IE1FQVNVUkVfUkVRX01PREUsICpQTUVBU1VSRV9SRVFfTU9ERTsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9NRUFTVVJFX1JFUQoreworCVVJTlQ4IENoTnVtOworCVVJTlQ2NCBNZWFzdXJlU3RhcnRUaW1lOworCVVJTlQxNiBNZWFzdXJlRHVyYXRpb247Cit9IE1FQVNVUkVfUkVRLCAqUE1FQVNVUkVfUkVROworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX01FQVNVUkVfUkVRX0lORk8KK3sKKwlVSU5UOCBUb2tlbjsKKwlNRUFTVVJFX1JFUV9NT0RFIFJlcU1vZGU7CisJVUlOVDggUmVxVHlwZTsKKwlNRUFTVVJFX1JFUSBNZWFzdXJlUmVxOworfSBNRUFTVVJFX1JFUV9JTkZPLCAqUE1FQVNVUkVfUkVRX0lORk87CisKK3R5cGVkZWYgdW5pb24gUEFDS0VEIF9NRUFTVVJFX0JBU0lDX1JFUE9SVF9NQVAKK3sKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJc3RydWN0IFBBQ0tFRAorCXsKKwkJVUlOVDggUmV2OjM7CisJCVVJTlQ4IFVubWVhc3VyZToxOworCQlVSU5UOCBSYWRhcjoxOworCQlVSU5UOCBVbmlkZW50aWZpZWRTaWduYWw6MTsKKwkJVUlOVDggT2ZkbVByZWFtYmxlOjE7CisJCVVJTlQ4IEJTUzoxOworCX0gZmllbGQ7CisjZWxzZQorCXN0cnVjdCBQQUNLRUQKKwl7CisJCVVJTlQ4IEJTUzoxOworCQlVSU5UOCBPZmRtUHJlYW1ibGU6MTsKKwkJVUlOVDggVW5pZGVudGlmaWVkU2lnbmFsOjE7CisJCVVJTlQ4IFJhZGFyOjE7CisJCVVJTlQ4IFVubWVhc3VyZToxOworCQlVSU5UOCBSZXY6MzsKKwl9IGZpZWxkOworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKwlVSU5UOCB3b3JkOworfSBNRUFTVVJFX0JBU0lDX1JFUE9SVF9NQVAsICpQTUVBU1VSRV9CQVNJQ19SRVBPUlRfTUFQOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX01FQVNVUkVfQkFTSUNfUkVQT1JUCit7CisJVUlOVDggQ2hOdW07CisJVUlOVDY0IE1lYXN1cmVTdGFydFRpbWU7CisJVUlOVDE2IE1lYXN1cmVEdXJhdGlvbjsKKwlNRUFTVVJFX0JBU0lDX1JFUE9SVF9NQVAgTWFwOworfSBNRUFTVVJFX0JBU0lDX1JFUE9SVCwgKlBNRUFTVVJFX0JBU0lDX1JFUE9SVDsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9NRUFTVVJFX0NDQV9SRVBPUlQKK3sKKwlVSU5UOCBDaE51bTsKKwlVSU5UNjQgTWVhc3VyZVN0YXJ0VGltZTsKKwlVSU5UMTYgTWVhc3VyZUR1cmF0aW9uOworCVVJTlQ4IENDQV9CdXN5X0ZyYWN0aW9uOworfSBNRUFTVVJFX0NDQV9SRVBPUlQsICpQTUVBU1VSRV9DQ0FfUkVQT1JUOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX01FQVNVUkVfUlBJX1JFUE9SVAoreworCVVJTlQ4IENoTnVtOworCVVJTlQ2NCBNZWFzdXJlU3RhcnRUaW1lOworCVVJTlQxNiBNZWFzdXJlRHVyYXRpb247CisJVUlOVDggUlBJX0RlbnNpdHlbOF07Cit9IE1FQVNVUkVfUlBJX1JFUE9SVCwgKlBNRUFTVVJFX1JQSV9SRVBPUlQ7CisKK3R5cGVkZWYgdW5pb24gUEFDS0VEIF9NRUFTVVJFX1JFUE9SVF9NT0RFCit7CisJc3RydWN0IFBBQ0tFRAorCXsKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJCVVJTlQ4IFJldjo1OworCQlVSU5UOCBSZWZ1c2VkOjE7CisJCVVJTlQ4IEluY2FwYWJsZToxOworCQlVSU5UOCBMYXRlOjE7CisjZWxzZQorCQlVSU5UOCBMYXRlOjE7CisJCVVJTlQ4IEluY2FwYWJsZToxOworCQlVSU5UOCBSZWZ1c2VkOjE7CisJCVVJTlQ4IFJldjo1OworI2VuZGlmIC8vIFJUX0JJR19FTkRJQU4gLy8KKwl9IGZpZWxkOworCVVJTlQ4IHdvcmQ7Cit9IE1FQVNVUkVfUkVQT1JUX01PREUsICpQTUVBU1VSRV9SRVBPUlRfTU9ERTsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9NRUFTVVJFX1JFUE9SVF9JTkZPCit7CisJVUlOVDggVG9rZW47CisJTUVBU1VSRV9SRVBPUlRfTU9ERSBSZXBvcnRNb2RlOworCVVJTlQ4IFJlcG9ydFR5cGU7CisJVUlOVDggT2N0ZWN0WzBdOworfSBNRUFTVVJFX1JFUE9SVF9JTkZPLCAqUE1FQVNVUkVfUkVQT1JUX0lORk87CisKK3R5cGVkZWYgc3RydWN0IFBBQ0tFRCBfUVVJRVRfSU5GTworeworCVVJTlQ4IFF1aWV0Q250OworCVVJTlQ4IFF1aWV0UGVyaW9kOworCVVJTlQ4IFF1aWV0RHVyYXRpb247CisJVUlOVDggUXVpZXRPZmZzZXQ7Cit9IFFVSUVUX0lORk8sICpQUVVJRVRfSU5GTzsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlQcmVwYXJlIE1lYXN1cmVtZW50IHJlcXVlc3QgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlTWVhc3VyZW1lbnRSZXEoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBVSU5UOCBNZWFzdXJlVG9rZW4sCisJSU4gVUlOVDggTWVhc3VyZVJlcU1vZGUsCisJSU4gVUlOVDggTWVhc3VyZVJlcVR5cGUsCisJSU4gVUlOVDggTWVhc3VyZUNoLAorCUlOIFVJTlQxNiBNZWFzdXJlRHVyYXRpb24pOworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVByZXBhcmUgTWVhc3VyZW1lbnQgcmVwb3J0IGFjdGlvbiBmcmFtZSBhbmQgZW5xdWV1ZSBpdCBpbnRvCisJCW1hbmFnZW1lbnQgcXVldWUgd2FpdGluZyBmb3IgdHJhbnNtaXRpb24uCisKKwlQYXJhbWV0cnM6CisJCTEuIHRoZSBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcyBvZiB0aGUgZnJhbWUuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRW5xdWV1ZU1lYXN1cmVtZW50UmVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gVUlOVDggRGlhbG9nVG9rZW4sCisJSU4gVUlOVDggTWVhc3VyZVRva2VuLAorCUlOIFVJTlQ4IE1lYXN1cmVSZXFNb2RlLAorCUlOIFVJTlQ4IE1lYXN1cmVSZXFUeXBlLAorCUlOIFVJTlQ4IFJlcG9ydEluZm9MZW4sCisJSU4gUFVJTlQ4IHBSZXBvcnRJbmZvKTsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlQcmVwYXJlIFRQQyBSZXF1ZXN0IGFjdGlvbiBmcmFtZSBhbmQgZW5xdWV1ZSBpdCBpbnRvCisJCW1hbmFnZW1lbnQgcXVldWUgd2FpdGluZyBmb3IgdHJhbnNtaXRpb24uCisKKwlQYXJhbWV0cnM6CisJCTEuIHRoZSBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcyBvZiB0aGUgZnJhbWUuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRW5xdWV1ZVRQQ1JlcSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcERBLAorCUlOIFVDSEFSIERpYWxvZ1Rva2VuKTsKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlQcmVwYXJlIFRQQyBSZXBvcnQgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKworCVJldHVybgk6IE5vbmUuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBFbnF1ZXVlVFBDUmVwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBwREEsCisJSU4gVUlOVDggRGlhbG9nVG9rZW4sCisJSU4gVUlOVDggVHhQd3IsCisJSU4gVUlOVDggTGlua01hcmdpbik7CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUHJlcGFyZSBDaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgYWN0aW9uIGZyYW1lIGFuZCBlbnF1ZXVlIGl0IGludG8KKwkJbWFuYWdlbWVudCBxdWV1ZSB3YWl0aW5nIGZvciB0cmFuc21pdGlvbi4KKworCVBhcmFtZXRyczoKKwkJMS4gdGhlIGRlc3RpbmF0aW9uIG1hYyBhZGRyZXNzIG9mIHRoZSBmcmFtZS4KKwkJMi4gQ2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IG1vZGUuCisJCTIuIGEgTmV3IHNlbGVjdGVkIGNoYW5uZWwuCisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRW5xdWV1ZUNoU3dBbm4oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBEQSwKKwlJTiBVSU5UOCBDaFN3TW9kZSwKKwlJTiBVSU5UOCBOZXdDaCk7CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJU3BlY3RydW4gYWN0aW9uIGZyYW1lcyBIYW5kbGVyIHN1Y2ggYXMgY2hhbm5lbCBzd2l0Y2ggYW5ub3VjZW1lbnQsCisJCW1lYXN1cmVtZW50IHJlcG9ydCwgbWVhc3VyZW1lbnQgcmVxdWVzdCBhY3Rpb25zIGZyYW1lcy4KKworCVBhcmFtZXRyczoKKwkJRWxtZSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCisJUmV0dXJuCTogTm9uZS4KKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJTcGVjdHJ1bUFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pOworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlQYXJhbWV0cnM6CisKKwlSZXR1cm4JOiBOb25lLgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0lOVCBTZXRfTWVhc3VyZVJlcV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKK0lOVCBTZXRfVHBjUmVxX1Byb2MoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworVk9JRCBNZWFzdXJlUmVxVGFiSW5pdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCk7CisKK1ZPSUQgTWVhc3VyZVJlcVRhYkV4aXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIFRwY1JlcVRhYkluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIFRwY1JlcVRhYkV4aXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpOworCitWT0lEIE5vdGlmeUNoU3dBbm5Ub1BlZXJBUHMoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gUFVDSEFSIHBSQSwKKwlJTiBQVUNIQVIgcFRBLAorCUlOIFVJTlQ4IENoU3dNb2RlLAorCUlOIFVJTlQ4IENoYW5uZWwpOworI2VuZGlmIC8vIF9fU1BFQ1RSVU1fSF9fIC8vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3BlY3RydW1fZGVmLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3NwZWN0cnVtX2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYTQ4MTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3NwZWN0cnVtX2RlZi5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisJc3BlY3RydW1fZGVmLmgKKworICAgIEFic3RyYWN0OgorICAgIEhhbmRsZSBhc3NvY2lhdGlvbiByZWxhdGVkIHJlcXVlc3RzIGVpdGhlciBmcm9tIFdTVEEgb3IgZnJvbSBsb2NhbCBNTE1FCisKKyAgICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIFdobyAgICAgICAgICBXaGVuICAgICAgICAgIFdoYXQKKyAgICAtLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJRm9uY2hpIFd1ICAgIDIwMDgJICAJICAgY3JlYXRlZCBmb3IgODAyLjExaAorICovCisKKyNpZm5kZWYgX19TUEVDVFJVTV9ERUZfSF9fCisjZGVmaW5lIF9fU1BFQ1RSVU1fREVGX0hfXworCisjZGVmaW5lIE1BWF9NRUFTVVJFX1JFUV9UQUJfU0laRQkJMworI2RlZmluZSBNQVhfSEFTSF9NRUFTVVJFX1JFUV9UQUJfU0laRQlNQVhfTUVBU1VSRV9SRVFfVEFCX1NJWkUKKworI2RlZmluZSBNQVhfVFBDX1JFUV9UQUJfU0laRQkJCTMKKyNkZWZpbmUgTUFYX0hBU0hfVFBDX1JFUV9UQUJfU0laRQkJTUFYX1RQQ19SRVFfVEFCX1NJWkUKKworI2RlZmluZSBNSU5fUkNWX1BXUgkJCQkxMDAJCS8qIE5lZ2F0aXZlIHZhbHVlICgoZEJtKSAqLworCisjZGVmaW5lIFJNX1RQQ19SRVEJCQkJMAorI2RlZmluZSBSTV9NRUFTVVJFX1JFUQkJCTEKKworI2RlZmluZSBSTV9CQVNJQwkJCQkwCisjZGVmaW5lIFJNX0NDQQkJCQkJMQorI2RlZmluZSBSTV9SUElfSElTVE9HUkFNCQkyCisKKyNkZWZpbmUgVFBDX1JFUV9BR0VfT1VUCQkJNTAwCQkvKiBtcyAqLworI2RlZmluZSBNUV9SRVFfQUdFX09VVAkJCTUwMAkJLyogbXMgKi8KKworI2RlZmluZSBUUENfRElBTE9HVE9LRU5fSEFTSF9JTkRFWChfRGlhbG9nVG9rZW4pCSgoX0RpYWxvZ1Rva2VuKSAlIE1BWF9IQVNIX1RQQ19SRVFfVEFCX1NJWkUpCisjZGVmaW5lIE1RX0RJQUxPR1RPS0VOX0hBU0hfSU5ERVgoX0RpYWxvZ1Rva2VuKQkJKChfRGlhbG9nVG9rZW4pICUgTUFYX01FQVNVUkVfUkVRX1RBQl9TSVpFKQorCit0eXBlZGVmIHN0cnVjdCBfTUVBU1VSRV9SRVFfRU5UUlkKK3sKKwlzdHJ1Y3QgX01FQVNVUkVfUkVRX0VOVFJZICpwTmV4dDsKKwlVTE9ORyBsYXN0VGltZTsKKwlCT09MRUFOCVZhbGlkOworCVVJTlQ4IERpYWxvZ1Rva2VuOworCVVJTlQ4IE1lYXN1cmVEaWFsb2dUb2tlblszXTsJLy8gMDpiYXNpYyBtZWFzdXJlLCAxOiBDQ0EgbWVhc3VyZSwgMjogUlBJX0hpc3RvZ3JhbSBtZWFzdXJlLgorfSBNRUFTVVJFX1JFUV9FTlRSWSwgKlBNRUFTVVJFX1JFUV9FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgX01FQVNVUkVfUkVRX1RBQgoreworCVVDSEFSIFNpemU7CisJUE1FQVNVUkVfUkVRX0VOVFJZIEhhc2hbTUFYX0hBU0hfTUVBU1VSRV9SRVFfVEFCX1NJWkVdOworCU1FQVNVUkVfUkVRX0VOVFJZIENvbnRlbnRbTUFYX01FQVNVUkVfUkVRX1RBQl9TSVpFXTsKK30gTUVBU1VSRV9SRVFfVEFCLCAqUE1FQVNVUkVfUkVRX1RBQjsKKwordHlwZWRlZiBzdHJ1Y3QgX1RQQ19SRVFfRU5UUlkKK3sKKwlzdHJ1Y3QgX1RQQ19SRVFfRU5UUlkgKnBOZXh0OworCVVMT05HIGxhc3RUaW1lOworCUJPT0xFQU4gVmFsaWQ7CisJVUlOVDggRGlhbG9nVG9rZW47Cit9IFRQQ19SRVFfRU5UUlksICpQVFBDX1JFUV9FTlRSWTsKKwordHlwZWRlZiBzdHJ1Y3QgX1RQQ19SRVFfVEFCCit7CisJVUNIQVIgU2l6ZTsKKwlQVFBDX1JFUV9FTlRSWSBIYXNoW01BWF9IQVNIX1RQQ19SRVFfVEFCX1NJWkVdOworCVRQQ19SRVFfRU5UUlkgQ29udGVudFtNQVhfVFBDX1JFUV9UQUJfU0laRV07Cit9IFRQQ19SRVFfVEFCLCAqUFRQQ19SRVFfVEFCOworCisjZW5kaWYgLy8gX19TUEVDVFJVTV9ERUZfSF9fIC8vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL2Fpcm9uZXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL2Fpcm9uZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWY0YTE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYWlyb25ldC5jCkBAIC0wLDAgKzEsMTMxMiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwlhaXJvbmV0LmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlQYXVsIExpbgkwNC0wNi0xNQkJSW5pdGlhbAorKi8KKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlhc3NvY2lhdGlvbglzdGF0ZSBtYWNoaW5lIGluaXQsCWluY2x1ZGluZyBzdGF0ZQl0cmFuc2l0aW9uIGFuZCB0aW1lciBpbml0CisJUGFyYW1ldGVyczoKKwkJUyAtCXBvaW50ZXIJdG8gdGhlIGFzc29jaWF0aW9uIHN0YXRlIG1hY2hpbmUKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lECUFpcm9uZXRTdGF0ZU1hY2hpbmVJbml0KAorCUlOCVBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTglTVEFURV9NQUNISU5FCQkqUywKKwlPVVQJU1RBVEVfTUFDSElORV9GVU5DCVRyYW5zW10pCit7CisJU3RhdGVNYWNoaW5lSW5pdChTLAlUcmFucywgTUFYX0FJUk9ORVRfU1RBVEUsIE1BWF9BSVJPTkVUX01TRywgKFNUQVRFX01BQ0hJTkVfRlVOQylEcm9wLCBBSVJPTkVUX0lETEUsIEFJUk9ORVRfTUFDSElORV9CQVNFKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQUlST05FVF9JRExFLCBNVDJfQUlST05FVF9NU0csIChTVEFURV9NQUNISU5FX0ZVTkMpQWlyb25ldE1zZ0FjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFJUk9ORVRfSURMRSwgTVQyX0FJUk9ORVRfU0NBTl9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpQWlyb25ldFJlcXVlc3RBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBSVJPTkVUX1NDQU5OSU5HLCBNVDJfQUlST05FVF9TQ0FOX0RPTkUsIChTVEFURV9NQUNISU5FX0ZVTkMpQWlyb25ldFJlcG9ydEFjdGlvbik7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVGhpcyBpcwlzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9uLgorCQlXaGVuIHJlY2VpdmluZyBFQVBPTCBwYWNrZXRzIHdoaWNoIGlzICBmb3IgODAyLjF4IGtleSBtYW5hZ2VtZW50LgorCQlVc2UJYm90aCBpbglXUEEsIGFuZCBXUEFQU0sJY2FzZS4KKwkJSW4gdGhpcwlmdW5jdGlvbiwgZnVydGhlciBkaXNwYXRjaCB0byBkaWZmZXJlbnQJZnVuY3Rpb25zIGFjY29yZGluZwl0byB0aGUgcmVjZWl2ZWQJcGFja2V0LgkgMyBjYXRlZ29yaWVzIGFyZSA6CisJCSAgMS4gIG5vcm1hbCA0LXdheSBwYWlyd2lzZWtleSBhbmQgMi13YXkgZ3JvdXBrZXkgaGFuZHNoYWtlCisJCSAgMi4gIE1JQyBlcnJvcgkoQ291bnRlcm1lYXN1cmVzIGF0dGFjaykgIHJlcG9ydCBwYWNrZXQJZnJvbSBTVEEuCisJCSAgMy4gIFJlcXVlc3QgZm9yIHBhaXJ3aXNlL2dyb3VwIGtleSB1cGRhdGUJZnJvbSBTVEEKKwlSZXR1cm46CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUFpcm9uZXRNc2dBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUxNRV9RVUVVRV9FTEVNCSpFbGVtKQoreworCVVTSE9SVAkJCQkJCQlMZW5ndGg7CisJVUNIQVIJCQkJCQkJSW5kZXgsIGk7CisJUFVDSEFSCQkJCQkJCXBEYXRhOworCVBBSVJPTkVUX1JNX1JFUVVFU1RfRlJBTUUJCXBSTVJlcTsKKwlQUk1fUkVRVUVTVF9BQ1RJT04JCQkJcFJlcUVsZW07CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLS0tLT4gQWlyb25ldE1zZ0FjdGlvblxuIikpOworCisJLy8gMC4gR2V0IEFpcm9uZXQgSUFQUCBoZWFkZXIgZmlyc3QKKwlwUk1SZXEgPSAoUEFJUk9ORVRfUk1fUkVRVUVTVF9GUkFNRSkgJkVsZW0tPk1zZ1tMRU5HVEhfODAyXzExXTsKKwlwRGF0YSAgPSAoUFVDSEFSKSAmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTFdOworCisJLy8gMS4gQ2hhbmdlIGVuZGlhbiBmb3JtYXQgZm9ybSBuZXR3b3JrIHRvIGxpdHRsZSBlbmRpYW4KKwlMZW5ndGggPSBiZTJjcHUxNihwUk1SZXEtPklBUFAuTGVuZ3RoKTsKKworCS8vIDIuMCBTYW5pdHkgY2hlY2ssIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIHdoZW4gQ0NYIDIuMCBzdXBwb3J0IGlzIGVuYWJsZWQKKwlpZiAocEFkLT5TdGFDZmcuQ0NYRW5hYmxlICE9IFRSVUUpCisJCXJldHVybjsKKworCS8vIDIuMSBSYWRpbyBtZWFzdXJlbWVudCBtdXN0IGJlIG9uCisJaWYgKHBBZC0+U3RhQ2ZnLkNDWENvbnRyb2wuZmllbGQuUk1FbmFibGUgIT0gMSkKKwkJcmV0dXJuOworCisJLy8gMi4yLiBEZWJ1ZyBwcmludCBhbGwgYml0IGluZm9ybWF0aW9uCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUFQUCBJRCAmIExlbmd0aCAlZFxuIiwgTGVuZ3RoKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUFQUCBUeXBlICV4XG4iLCBwUk1SZXEtPklBUFAuVHlwZSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklBUFAgU3ViVHlwZSAleFxuIiwgcFJNUmVxLT5JQVBQLlN1YlR5cGUpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJQVBQIERpYWxvZyBUb2tlbiAleFxuIiwgcFJNUmVxLT5JQVBQLlRva2VuKSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUFQUCBBY3RpdmF0aW9uIERlbGF5ICV4XG4iLCBwUk1SZXEtPkRlbGF5KSk7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSUFQUCBNZWFzdXJlbWVudCBPZmZzZXQgJXhcbiIsIHBSTVJlcS0+T2Zmc2V0KSk7CisKKwkvLyAzLiBDaGVjayBJQVBQIGZyYW1lIHR5cGUsIGl0IG11c3QgYmUgMHgzMiBmb3IgQ2lzY28gQWlyb25ldCBleHRlbnNpb24KKwlpZiAocFJNUmVxLT5JQVBQLlR5cGUgIT0gQUlST05FVF9JQVBQX1RZUEUpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJXcm9uZyBJQVBQIHR5cGUgZm9yIENpc2NvIEFpcm9uZXQgZXh0ZW5zaW9uXG4iKSk7CisJCXJldHVybjsKKwl9CisKKwkvLyA0LiBDaGVjayBJQVBQIGZyYW1lIHN1YnR5cGUsIGl0IG11c3QgYmUgMHgwMSBmb3IgQ2lzY28gQWlyb25ldCBleHRlbnNpb24gcmVxdWVzdC4KKwkvLyAgICBTaW5jZSB3ZSBhcmUgYWN0aW5nIGFzIGNsaWVudCBvbmx5LCB3ZSB3aWxsIGRpc3JlZ2FyZHMgcmVwbHkgc3VidHlwZS4KKwlpZiAocFJNUmVxLT5JQVBQLlN1YlR5cGUgIT0gQUlST05FVF9JQVBQX1NVQlRZUEVfUkVRVUVTVCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIldyb25nIElBUFAgc3VidHlwZSBmb3IgQ2lzY28gQWlyb25ldCBleHRlbnNpb25cbiIpKTsKKwkJcmV0dXJuOworCX0KKworCS8vIDUuIFZlcmlmeSBEZXN0aW5hdGlvbiBNQUMgYW5kIFNvdXJjZSBNQUMsIGJvdGggc2hvdWxkIGJlIGFsbCB6ZXJvcy4KKwlpZiAoISBNQUNfQUREUl9FUVVBTChwUk1SZXEtPklBUFAuREEsIFpFUk9fTUFDX0FERFIpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiV3JvbmcgSUFQUCBEQSBmb3IgQ2lzY28gQWlyb25ldCBleHRlbnNpb24sIGl0J3Mgbm90IFplcm9cbiIpKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghIE1BQ19BRERSX0VRVUFMKHBSTVJlcS0+SUFQUC5TQSwgWkVST19NQUNfQUREUikpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJXcm9uZyBJQVBQIFNBIGZvciBDaXNjbyBBaXJvbmV0IGV4dGVuc2lvbiwgaXQncyBub3QgWmVyb1xuIikpOworCQlyZXR1cm47CisJfQorCisJLy8gNi4gUmVpbml0IGFsbCByZXBvcnQgcmVsYXRlZCBmaWVsZHMKKwlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydEJ1ZiwgMjA0OCk7CisJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuQnNzUmVwb3J0T2Zmc2V0LCBzaXplb2YoVVNIT1JUKSAqIE1BWF9MRU5fT0ZfQlNTX1RBQkxFKTsKKwlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3QsIHNpemVvZihSTV9SRVFVRVNUX0FDVElPTikgKiA0KTsKKworCS8vIDcuIFBvaW50IHRvIHRoZSBzdGFydCBvZiBmaXJzdCBlbGVtZW50IHJlcG9ydCBlbGVtZW50CisJcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW4gICA9IExFTkdUSF84MDJfMTEgKyBzaXplb2YoQUlST05FVF9JQVBQX0hFQURFUik7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRlIgbGVuID0gJWRcbiIsIHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuKSk7CisJcEFkLT5TdGFDZmcuTGFzdEJzc0luZGV4ICAgICA9IDB4ZmY7CisJcEFkLT5TdGFDZmcuUk1SZXFDbnQgICAgICAgICA9IDA7CisJcEFkLT5TdGFDZmcuUGFyYWxsZWxSZXEgICAgICA9IEZBTFNFOworCXBBZC0+U3RhQ2ZnLlBhcmFsbGVsRHVyYXRpb24gPSAwOworCXBBZC0+U3RhQ2ZnLlBhcmFsbGVsQ2hhbm5lbCAgPSAwOworCXBBZC0+U3RhQ2ZnLklBUFBUb2tlbiAgICAgICAgPSBwUk1SZXEtPklBUFAuVG9rZW47CisJcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4ICA9IDA7CisJcEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMgICAgICA9IDA7CisJLy8gUmVzZXQgdGhlIHN0YXRpc3RpY3MKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5W2ldID0gMDsKKworCUluZGV4ID0gMDsKKworCS8vIDguIFNhdmUgZGlhbG9nIHRva2VuIGZvciByZXBvcnQKKwlwQWQtPlN0YUNmZy5JQVBQVG9rZW4gPSBwUk1SZXEtPklBUFAuVG9rZW47CisKKwkvLyBTYXZlIEFjdGl2YXRpb24gZGVsYXkgJiBtZWFzdXJlbWVudCBvZmZzZXQsIE5vdCByZWFsbHkgbmVlZGVkCisKKwkvLyA5LiBQb2ludCB0byB0aGUgZmlyc3QgcmVxdWVzdCBlbGVtZW50CisJcERhdGEgKz0gc2l6ZW9mKEFJUk9ORVRfUk1fUkVRVUVTVF9GUkFNRSk7CisJLy8gICAgTGVuZ3RoIHNob3VsZCBleGNsdWRlIHRoZSBDSVNDTyBBaXJvbmV0IFNOQVAgaGVhZGVyCisJTGVuZ3RoIC09IChzaXplb2YoQUlST05FVF9STV9SRVFVRVNUX0ZSQU1FKSAtIExFTkdUSF84MDJfMV9IKTsKKworCS8vIDEwLiBTdGFydCBQYXJzaW5nIHRoZSBNZWFzdXJlbWVudCBlbGVtZW50cy4KKwkvLyAgICBCZSBjYXJlZnVsIGFib3V0IG11bHRpcGxlIE1SIGVsZW1lbnRzIHdpdGhpbiBvbmUgZnJhbWVzLgorCXdoaWxlIChMZW5ndGggPiAwKQorCXsKKwkJcFJlcUVsZW0gPSAoUFJNX1JFUVVFU1RfQUNUSU9OKSBwRGF0YTsKKwkJc3dpdGNoIChwUmVxRWxlbS0+UmVxRWxlbS5FaWQpCisJCXsKKwkJCWNhc2UgSUVfTUVBU1VSRU1FTlRfUkVRVUVTVDoKKwkJCQkvLyBGcm9tIHRoZSBleGFtcGxlLCBpdCBzZWVtcyB3ZSBvbmx5IG5lZWQgdG8gc3VwcG9ydCBvbmUgcmVxdWVzdCBpbiBvbmUgZnJhbWUKKwkJCQkvLyBUaGVyZSBpcyBubyBtdWx0aXBsZSByZXF1ZXN0IGluIG9uZSBmcmFtZS4KKwkJCQkvLyBCZXNpZGVzLCBsb29rcyBsaWtlIHdlIG5lZWQgdG8gdGFrZSBjYXJlIHRoZSBtZWFzdXJlbWVudCByZXF1ZXN0IG9ubHkuCisJCQkJLy8gVGhlIG1lYXN1cmVtZW50IHJlcXVlc3QgaXMgYWx3YXlzIDQgYnl0ZXMuCisKKwkJCQkvLyBTdGFydCBwYXJzaW5nIHRoaXMgdHlwZSBvZiByZXF1ZXN0LgorCQkJCS8vIDAuIEVpZCBpcyBJRV9NRUFTVVJFTUVOVF9SRVFVRVNUCisJCQkJLy8gMS4gTGVuZ3RoIGRpZG4ndCBpbmNsdWRlIEVpZCBhbmQgTGVuZ3RoIGZpZWxkLCBpdCBhbHdheXMgYmUgOC4KKwkJCQkvLyAyLiBNZWFzdXJlbWVudCBUb2tlbiwgd2Ugbm5lZCB0byBzYXZlIGl0IGZvciB0aGUgY29ycmVzcG9uZGluZyByZXBvcnQuCisJCQkJLy8gMy4gTWVhc3VyZW1lbnQgTW9kZSwgQWx0aG91Z2ggdGhlcmUgYXJlIGRlZmluaXRpb25zLCBidXQgd2UgZGluJ3Qgc2VlIHZhbHVlIG90aGVyIHRoYW4KKwkJCQkvLyAgICAwIGZyb20gdGVzdCBzcGVjcyBleGFtcGxlcy4KKwkJCQkvLyA0LiBNZWFzdXJlbWVudCBUeXBlLCB0aGlzIGlzIHdoYXQgd2UgbmVlZCB0byBkby4KKwkJCQlzd2l0Y2ggKHBSZXFFbGVtLT5SZXFFbGVtLlR5cGUpCisJCQkJeworCQkJCQljYXNlIE1TUk5fVFlQRV9DSEFOTkVMX0xPQURfUkVROgorCQkJCQljYXNlIE1TUk5fVFlQRV9OT0lTRV9ISVNUX1JFUToKKwkJCQkJY2FzZSBNU1JOX1RZUEVfQkVBQ09OX1JFUToKKwkJCQkJCS8vIENoZWNrIHRoZSBFbmFibGUgbm9uLXNlcnZpbmcgY2hhbm5lbCBtZWFzdXJlbWVudCBjb250cm9sCisJCQkJCQlpZiAocEFkLT5TdGFDZmcuQ0NYQ29udHJvbC5maWVsZC5EQ1JNRW5hYmxlID09IDApCisJCQkJCQl7CisJCQkJCQkJLy8gQ2hlY2sgY2hhbm5lbCBiZWZvcmUgZW5xdWV1ZSB0aGUgYWN0aW9uCisJCQkJCQkJaWYgKHBSZXFFbGVtLT5NZWFzdXJlbWVudC5DaGFubmVsICE9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpCisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCS8vIElmIG9mZiBjaGFubmVsIG1lYXN1cmVtZW50LCBjaGVjayB0aGUgVFUgZHVyYXRpb24gbGltaXQKKwkJCQkJCQlpZiAocFJlcUVsZW0tPk1lYXN1cmVtZW50LkNoYW5uZWwgIT0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwkJCQkJCQkJaWYgKHBSZXFFbGVtLT5NZWFzdXJlbWVudC5EdXJhdGlvbiA+IHBBZC0+U3RhQ2ZnLkNDWENvbnRyb2wuZmllbGQuVHVMaW1pdCkKKwkJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQkvLyBTYXZlIHJlcXVlc3RzIGFuZCBleGVjdXRlIGFjdGlvbnMgbGF0ZXIKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdLCBwUmVxRWxlbSwgc2l6ZW9mKFJNX1JFUVVFU1RfQUNUSU9OKSk7CisJCQkJCQlJbmRleCArPSAxOworCQkJCQkJYnJlYWs7CisKKwkJCQkJY2FzZSBNU1JOX1RZUEVfRlJBTUVfUkVROgorCQkJCQkJLy8gU2luY2UgaXQncyBvcHRpb24sIHdlIHdpbGwgc3VwcG9ydCBsYXRlcgorCQkJCQkJLy8gRnJhbWVSZXF1ZXN0QWN0aW9uKHBBZCwgcERhdGEpOworCQkJCQkJYnJlYWs7CisKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8vIFBvaW50IHRvIG5leHQgTWVhc3VyZW1lbnQgcmVxdWVzdAorCQkJCXBEYXRhICArPSBzaXplb2YoUk1fUkVRVUVTVF9BQ1RJT04pOworCQkJCUxlbmd0aCAtPSBzaXplb2YoUk1fUkVRVUVTVF9BQ1RJT04pOworCQkJCWJyZWFrOworCisJCQkvLyBXZSBhY2NlcHQgcmVxdWVzdCBvbmx5LCBhbGwgb3RoZXJzIGFyZSBkcm9wcGVkCisJCQljYXNlIElFX01FQVNVUkVNRU5UX1JFUE9SVDoKKwkJCWNhc2UgSUVfQVBfVFhfUE9XRVI6CisJCQljYXNlIElFX01FQVNVUkVNRU5UX0NBUEFCSUxJVFk6CisJCQlkZWZhdWx0OgorCQkJCXJldHVybjsKKwkJfQorCX0KKworCS8vIDExLiBVcGRhdGUgc29tZSBmbGFncyBhbmQgaW5kZXgKKwlwQWQtPlN0YUNmZy5STVJlcUNudCA9IEluZGV4OworCisJaWYgKEluZGV4KQorCXsKKwkJTWxtZUVucXVldWUocEFkLCBBSVJPTkVUX1NUQVRFX01BQ0hJTkUsIE1UMl9BSVJPTkVUX1NDQU5fUkVRLCAwLCBOVUxMKTsKKwkJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS0tLSBBaXJvbmV0TXNnQWN0aW9uXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBaXJvbmV0UmVxdWVzdEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglNTE1FX1FVRVVFX0VMRU0JKkVsZW0pCit7CisJUFJNX1JFUVVFU1RfQUNUSU9OCXBSZXE7CisKKwkvLyAxLiBQb2ludCB0byBuZXh0IHJlcXVlc3QgZWxlbWVudAorCXBSZXEgPSAoUFJNX1JFUVVFU1RfQUNUSU9OKSAmcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W3BBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeF07CisKKwkvLyAyLiBQYXJzZSBtZWFzdXJlbWVudCB0eXBlIGFuZCBjYWxsIGFwcHJvcHJpYXRlIGZ1bmN0aW9ucworCWlmIChwUmVxLT5SZXFFbGVtLlR5cGUgPT0gTVNSTl9UWVBFX0NIQU5ORUxfTE9BRF9SRVEpCisJCS8vIENoYW5uZWwgTG9hZCBtZWFzdXJlbWVudCByZXF1ZXN0CisJCUNoYW5uZWxMb2FkUmVxdWVzdEFjdGlvbihwQWQsIHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCk7CisJZWxzZSBpZiAocFJlcS0+UmVxRWxlbS5UeXBlID09IE1TUk5fVFlQRV9OT0lTRV9ISVNUX1JFUSkKKwkJLy8gTm9pc2UgSGlzdG9ncmFtIG1lYXN1cmVtZW50IHJlcXVlc3QKKwkJTm9pc2VIaXN0UmVxdWVzdEFjdGlvbihwQWQsIHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCk7CisJZWxzZSBpZiAocFJlcS0+UmVxRWxlbS5UeXBlID09IE1TUk5fVFlQRV9CRUFDT05fUkVRKQorCQkvLyBCZWFjb24gbWVhc3VyZW1lbnQgcmVxdWVzdAorCQlCZWFjb25SZXF1ZXN0QWN0aW9uKHBBZCwgcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4KTsKKwllbHNlCisJCS8vIFVua25vd24uIERvIG5vdGhpbmcgYW5kIHJldHVybiwgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCisJCXJldHVybjsKKworCS8vIDMuIFBlZWsgaW50byB0aGUgbmV4dCByZXF1ZXN0LCBpZiBpdCdzIHBhcmFsbGVsLCB3ZSB3aWxsIHVwZGF0ZSB0aGUgc2NhbiB0aW1lIHRvIHRoZSBsYXJnZXN0IG9uZQorCWlmICgocEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4ICsgMSkgPCBwQWQtPlN0YUNmZy5STVJlcUNudCkKKwl7CisJCXBSZXEgPSAoUFJNX1JFUVVFU1RfQUNUSU9OKSAmcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W3BBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCArIDFdOworCQkvLyBDaGVjayBmb3IgcGFyYWxsZWwgYml0CisJCWlmICgocFJlcS0+UmVxRWxlbS5Nb2RlICYgMHgwMSkgJiYgKHBSZXEtPk1lYXN1cmVtZW50LkNoYW5uZWwgPT0gcEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWwpKQorCQl7CisJCQkvLyBVcGRhdGUgcGFyYWxsZWwgbW9kZSByZXF1ZXN0IGluZm9ybWF0aW9uCisJCQlwQWQtPlN0YUNmZy5QYXJhbGxlbFJlcSA9IFRSVUU7CisJCQlwQWQtPlN0YUNmZy5DQ1hTY2FuVGltZSA9ICgocFJlcS0+TWVhc3VyZW1lbnQuRHVyYXRpb24gPiBwQWQtPlN0YUNmZy5DQ1hTY2FuVGltZSkgPworCQkJKHBSZXEtPk1lYXN1cmVtZW50LkR1cmF0aW9uKSA6IChwQWQtPlN0YUNmZy5DQ1hTY2FuVGltZSkpOworCQl9CisJfQorCisJLy8gNC4gQ2FsbCBSVDI4WFhfTUxNRV9IQU5ETEVSIHRvIGV4ZWN1dGUgdGhlIHJlcXVlc3QgbWxtZSBjb21tYW5kcywgU2NhbiByZXF1ZXN0IGlzIHRoZSBvbmx5IG9uZSB1c2VkCisJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByZXBhcmUgY2hhbm5lbCBsb2FkIHJlcG9ydCBhY3Rpb24sIHNwZWNpYWwgc2NhbiBvcGVyYXRpb24gYWRkZWQKKwkJdG8gc3VwcG9ydAorCisJQXJndW1lbnRzOgorCQlwQWQJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgorCQlwRGF0YQkJU3RhcnQgZnJvbSBlbGVtZW50IElECisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUNoYW5uZWxMb2FkUmVxdWVzdEFjdGlvbigKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglVQ0hBUgkJCUluZGV4KQoreworCVBSTV9SRVFVRVNUX0FDVElPTgkJCQlwUmVxOworCU1MTUVfU0NBTl9SRVFfU1RSVUNUCQkJU2NhblJlcTsKKwlVQ0hBUgkJCQkJCQlaZXJvU3NpZFszMl07CisJTkRJU19TVEFUVVMJCQkJCQlOU3RhdHVzOworCVBVQ0hBUgkJCQkJCQlwT3V0QnVmZmVyID0gTlVMTDsKKwlQSEVBREVSXzgwMl8xMQkJCQkJcE51bGxGcmFtZTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNoYW5uZWxMb2FkUmVxdWVzdEFjdGlvbiAtLS0tLT5cbiIpKTsKKworCXBSZXEgPSAoUFJNX1JFUVVFU1RfQUNUSU9OKSAmcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W0luZGV4XTsKKwlOZGlzWmVyb01lbW9yeShaZXJvU3NpZCwgMzIpOworCisJLy8gUHJlcGFyZSBmb3Igc3BlY2lhbCBzY2FuIHJlcXVlc3QKKwkvLyBUaGUgc2NhbiBkZWZpbml0aW9uIGlzIGRpZmZlcmVudCB3aXRoIG91ciBBY3RpdmUsIFBhc3NpdmUgc2NhbiBkZWZpbml0aW9uLgorCS8vIEZvciBDQ1gyLCBBY3RpdmUgbWVhbnMgc2VuZCBvdXQgcHJvYmUgcmVxdWVzdCB3aXRoIGJyb2FkY2FzdCBCU1NJRC4KKwkvLyBQYXNzaXZlIG1lYW5zIG5vIHByb2JlIHJlcXVlc3Qgc2VudCwgb25seSBsaXN0ZW4gdG8gdGhlIGJlYWNvbnMuCisJLy8gVGhlIGNoYW5uZWwgc2Nhbm5lZCBpcyBmaXhlZCBhcyBzcGVjaWZpZWQsIG5vIG5lZWQgdG8gc2NhbiBhbGwgY2hhbm5lbHMuCisJLy8gVGhlIHNjYW4gd2FpdCB0aW1lIGlzIHNwZWNpZmllZCBpbiB0aGUgcmVxdWVzdCB0b28uCisJLy8gUGFzc2l2ZSBzY2FuIE1vZGUKKworCS8vIENvbnRyb2wgc3RhdGUgbWFjaGluZSBpcyBub3QgaWRsZSwgcmVqZWN0IHRoZSByZXF1ZXN0CisJaWYgKChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlICE9IENOVExfSURMRSkgJiYgKEluZGV4ID09IDApKQorCQlyZXR1cm47CisKKwkvLyBGaWxsIG91dCBzdHVmZiBmb3Igc2NhbiByZXF1ZXN0CisJU2NhblBhcm1GaWxsKHBBZCwgJlNjYW5SZXEsIFplcm9Tc2lkLCAwLCBCU1NfQU5ZLCBTQ0FOX0NJU0NPX0NIQU5ORUxfTE9BRCk7CisJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NDQU5fUkVRLCBzaXplb2YoTUxNRV9TQ0FOX1JFUV9TVFJVQ1QpLCAmU2NhblJlcSk7CisJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9PSURfTElTVF9TQ0FOOworCisJLy8gUmVzZXQgc29tZSBpbnRlcm5hbCBjb250cm9sIGZsYWdzIHRvIG1ha2Ugc3VyZSB0aGlzIHNjYW4gd29ya3MuCisJQnNzVGFibGVJbml0KCZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIpOworCXBBZC0+U3RhQ2ZnLlNjYW5DbnQgICAgICAgID0gMDsKKwlwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCA9IHBSZXEtPk1lYXN1cmVtZW50LkNoYW5uZWw7CisJcEFkLT5TdGFDZmcuQ0NYU2NhblRpbWUgICAgPSBwUmVxLT5NZWFzdXJlbWVudC5EdXJhdGlvbjsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkR1cmF0aW9uICVkLCBDaGFubmVsICVkIVxuIiwgcFJlcS0+TWVhc3VyZW1lbnQuRHVyYXRpb24sIHBSZXEtPk1lYXN1cmVtZW50LkNoYW5uZWwpKTsKKworCS8vIElmIGl0J3Mgbm9uIHNlcnZpbmcgY2hhbm5lbCBzY2FuLCBzZW5kIG91dCBhIG51bGwgZnJhbWUgd2l0aCBQU00gYml0IG9uLgorCWlmIChwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCXsKKwkJLy8gVXNlIE1MTUUgZW5xdWV1ZSBtZXRob2QKKwkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsIChQVk9JRCkmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCWlmIChOU3RhdHVzCSE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQlyZXR1cm47CisKKwkJcE51bGxGcmFtZSA9IChQSEVBREVSXzgwMl8xMSkgcE91dEJ1ZmZlcjs7CisJCS8vIE1ha2UgdGhlIHBvd2VyIHNhdmUgTnVsbCBmcmFtZSB3aXRoIFBTTSBiaXQgb24KKwkJTWd0TWFjSGVhZGVySW5pdChwQWQsIHBOdWxsRnJhbWUsIFNVQlRZUEVfTlVMTF9GVU5DLCAxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQlwTnVsbEZyYW1lLT5EdXJhdGlvbiAJPSAwOworCQlwTnVsbEZyYW1lLT5GQy5UeXBlIAk9IEJUWVBFX0RBVEE7CisJCXBOdWxsRnJhbWUtPkZDLlB3ck1nbXQJPSBQV1JfU0FWRTsKKworCQkvLyBTZW5kIHVzaW5nIHByaW9yaXR5IHF1ZXVlCisJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKwkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBQU00gRGF0YSBmcmFtZSBmb3Igb2ZmIGNoYW5uZWwgUk1cbiIpKTsKKwkJUlRNUHVzZWNEZWxheSg1MDAwKTsKKwl9CisKKwlwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlICAgICA9IE1TUk5fVFlQRV9DSEFOTkVMX0xPQURfUkVROworCXBBZC0+U3RhQ2ZnLkNMQnVzeUJ5dGVzICAgID0gMDsKKwkvLyBFbmFibGUgUnggd2l0aCBwcm9taXNjdW91cyByZWNlcHRpb24KKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9GSUxUUl9DRkcsIDB4MTAxMCk7CisKKwkvLyBTZXQgY2hhbm5lbCBsb2FkIG1lYXN1cmVtZW50IGZsYWcKKwlSVE1QX1NFVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19NRUFTVVJFTUVOVCk7CisKKwlwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUuQ3VyclN0YXRlID0gQUlST05FVF9TQ0FOTklORzsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNoYW5uZWxMb2FkUmVxdWVzdEFjdGlvbiA8LS0tLS1cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByZXBhcmUgbm9pc2UgaGlzdG9ncmFtIHJlcG9ydCBhY3Rpb24sIHNwZWNpYWwgc2NhbiBvcGVyYXRpb24gYWRkZWQKKwkJdG8gc3VwcG9ydAorCisJQXJndW1lbnRzOgorCQlwQWQJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgorCQlwRGF0YQkJU3RhcnQgZnJvbSBlbGVtZW50IElECisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECU5vaXNlSGlzdFJlcXVlc3RBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJbmRleCkKK3sKKwlQUk1fUkVRVUVTVF9BQ1RJT04JCQkJcFJlcTsKKwlNTE1FX1NDQU5fUkVRX1NUUlVDVAkJCVNjYW5SZXE7CisJVUNIQVIJCQkJCQkJWmVyb1NzaWRbMzJdLCBpOworCU5ESVNfU1RBVFVTCQkJCQkJTlN0YXR1czsKKwlQVUNIQVIJCQkJCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJUEhFQURFUl84MDJfMTEJCQkJCXBOdWxsRnJhbWU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOb2lzZUhpc3RSZXF1ZXN0QWN0aW9uIC0tLS0tPlxuIikpOworCisJcFJlcSA9IChQUk1fUkVRVUVTVF9BQ1RJT04pICZwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdOworCU5kaXNaZXJvTWVtb3J5KFplcm9Tc2lkLCAzMik7CisKKwkvLyBQcmVwYXJlIGZvciBzcGVjaWFsIHNjYW4gcmVxdWVzdAorCS8vIFRoZSBzY2FuIGRlZmluaXRpb24gaXMgZGlmZmVyZW50IHdpdGggb3VyIEFjdGl2ZSwgUGFzc2l2ZSBzY2FuIGRlZmluaXRpb24uCisJLy8gRm9yIENDWDIsIEFjdGl2ZSBtZWFucyBzZW5kIG91dCBwcm9iZSByZXF1ZXN0IHdpdGggYnJvYWRjYXN0IEJTU0lELgorCS8vIFBhc3NpdmUgbWVhbnMgbm8gcHJvYmUgcmVxdWVzdCBzZW50LCBvbmx5IGxpc3RlbiB0byB0aGUgYmVhY29ucy4KKwkvLyBUaGUgY2hhbm5lbCBzY2FubmVkIGlzIGZpeGVkIGFzIHNwZWNpZmllZCwgbm8gbmVlZCB0byBzY2FuIGFsbCBjaGFubmVscy4KKwkvLyBUaGUgc2NhbiB3YWl0IHRpbWUgaXMgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHRvby4KKwkvLyBQYXNzaXZlIHNjYW4gTW9kZQorCisJLy8gQ29udHJvbCBzdGF0ZSBtYWNoaW5lIGlzIG5vdCBpZGxlLCByZWplY3QgdGhlIHJlcXVlc3QKKwlpZiAoKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0gQ05UTF9JRExFKSAmJiAoSW5kZXggPT0gMCkpCisJCXJldHVybjsKKworCS8vIEZpbGwgb3V0IHN0dWZmIGZvciBzY2FuIHJlcXVlc3QKKwlTY2FuUGFybUZpbGwocEFkLCAmU2NhblJlcSwgWmVyb1NzaWQsIDAsIEJTU19BTlksIFNDQU5fQ0lTQ09fTk9JU0UpOworCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9TQ0FOX1JFUSwgc2l6ZW9mKE1MTUVfU0NBTl9SRVFfU1RSVUNUKSwgJlNjYW5SZXEpOworCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsKKworCS8vIFJlc2V0IHNvbWUgaW50ZXJuYWwgY29udHJvbCBmbGFncyB0byBtYWtlIHN1cmUgdGhpcyBzY2FuIHdvcmtzLgorCUJzc1RhYmxlSW5pdCgmcEFkLT5TdGFDZmcuQ0NYQnNzVGFiKTsKKwlwQWQtPlN0YUNmZy5TY2FuQ250ICAgICAgICA9IDA7CisJcEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWwgPSBwUmVxLT5NZWFzdXJlbWVudC5DaGFubmVsOworCXBBZC0+U3RhQ2ZnLkNDWFNjYW5UaW1lICAgID0gcFJlcS0+TWVhc3VyZW1lbnQuRHVyYXRpb247CisJcEFkLT5TdGFDZmcuQ0NYUmVxVHlwZSAgICAgPSBNU1JOX1RZUEVfTk9JU0VfSElTVF9SRVE7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEdXJhdGlvbiAlZCwgQ2hhbm5lbCAlZCFcbiIsIHBSZXEtPk1lYXN1cmVtZW50LkR1cmF0aW9uLCBwUmVxLT5NZWFzdXJlbWVudC5DaGFubmVsKSk7CisKKwkvLyBJZiBpdCdzIG5vbiBzZXJ2aW5nIGNoYW5uZWwgc2Nhbiwgc2VuZCBvdXQgYSBudWxsIGZyYW1lIHdpdGggUFNNIGJpdCBvbi4KKwlpZiAocEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWwgIT0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwl7CisJCS8vIFVzZSBNTE1FIGVucXVldWUgbWV0aG9kCisJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFZPSUQpJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCQlpZiAoTlN0YXR1cwkhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJcmV0dXJuOworCisJCXBOdWxsRnJhbWUgPSAoUEhFQURFUl84MDJfMTEpIHBPdXRCdWZmZXI7CisJCS8vIE1ha2UgdGhlIHBvd2VyIHNhdmUgTnVsbCBmcmFtZSB3aXRoIFBTTSBiaXQgb24KKwkJTWd0TWFjSGVhZGVySW5pdChwQWQsIHBOdWxsRnJhbWUsIFNVQlRZUEVfTlVMTF9GVU5DLCAxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQlwTnVsbEZyYW1lLT5EdXJhdGlvbiAJPSAwOworCQlwTnVsbEZyYW1lLT5GQy5UeXBlICAJPSBCVFlQRV9EQVRBOworCQlwTnVsbEZyYW1lLT5GQy5Qd3JNZ210CT0gUFdSX1NBVkU7CisKKwkJLy8gU2VuZCB1c2luZyBwcmlvcml0eSBxdWV1ZQorCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNlbmQgUFNNIERhdGEgZnJhbWUgZm9yIG9mZiBjaGFubmVsIFJNXG4iKSk7CisJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJfQorCisJLy8gUmVzZXQgdGhlIHN0YXRpc3RpY3MKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlwQWQtPlN0YUNmZy5SUElEZW5zaXR5W2ldID0gMDsKKworCS8vIEVuYWJsZSBSeCB3aXRoIHByb21pc2N1b3VzIHJlY2VwdGlvbgorCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX0ZJTFRSX0NGRywgMHgxMDEwKTsKKworCS8vIFNldCBjaGFubmVsIGxvYWQgbWVhc3VyZW1lbnQgZmxhZworCVJUTVBfU0VUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX01FQVNVUkVNRU5UKTsKKworCXBBZC0+TWxtZS5BaXJvbmV0TWFjaGluZS5DdXJyU3RhdGUgPSBBSVJPTkVUX1NDQU5OSU5HOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTm9pc2VIaXN0UmVxdWVzdEFjdGlvbiA8LS0tLS1cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCVByZXBhcmUgQmVhY29uIHJlcG9ydCBhY3Rpb24sIHNwZWNpYWwgc2NhbiBvcGVyYXRpb24gYWRkZWQKKwkJdG8gc3VwcG9ydAorCisJQXJndW1lbnRzOgorCQlwQWQJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgorCQlwRGF0YQkJU3RhcnQgZnJvbSBlbGVtZW50IElECisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUJlYWNvblJlcXVlc3RBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJbmRleCkKK3sKKwlQUk1fUkVRVUVTVF9BQ1RJT04JCQkJcFJlcTsKKwlORElTX1NUQVRVUwkJCQkJCU5TdGF0dXM7CisJUFVDSEFSCQkJCQkJCXBPdXRCdWZmZXIgPSBOVUxMOworCVBIRUFERVJfODAyXzExCQkJCQlwTnVsbEZyYW1lOworCU1MTUVfU0NBTl9SRVFfU1RSVUNUCQkJU2NhblJlcTsKKwlVQ0hBUgkJCQkJCQlaZXJvU3NpZFszMl07CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCZWFjb25SZXF1ZXN0QWN0aW9uIC0tLS0tPlxuIikpOworCisJcFJlcSA9IChQUk1fUkVRVUVTVF9BQ1RJT04pICZwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdOworCU5kaXNaZXJvTWVtb3J5KFplcm9Tc2lkLCAzMik7CisKKwkvLyBQcmVwYXJlIGZvciBzcGVjaWFsIHNjYW4gcmVxdWVzdAorCS8vIFRoZSBzY2FuIGRlZmluaXRpb24gaXMgZGlmZmVyZW50IHdpdGggb3VyIEFjdGl2ZSwgUGFzc2l2ZSBzY2FuIGRlZmluaXRpb24uCisJLy8gRm9yIENDWDIsIEFjdGl2ZSBtZWFucyBzZW5kIG91dCBwcm9iZSByZXF1ZXN0IHdpdGggYnJvYWRjYXN0IEJTU0lELgorCS8vIFBhc3NpdmUgbWVhbnMgbm8gcHJvYmUgcmVxdWVzdCBzZW50LCBvbmx5IGxpc3RlbiB0byB0aGUgYmVhY29ucy4KKwkvLyBUaGUgY2hhbm5lbCBzY2FubmVkIGlzIGZpeGVkIGFzIHNwZWNpZmllZCwgbm8gbmVlZCB0byBzY2FuIGFsbCBjaGFubmVscy4KKwkvLyBUaGUgc2NhbiB3YWl0IHRpbWUgaXMgc3BlY2lmaWVkIGluIHRoZSByZXF1ZXN0IHRvby4KKwlpZiAocFJlcS0+TWVhc3VyZW1lbnQuU2Nhbk1vZGUgPT0gTVNSTl9TQ0FOX01PREVfUEFTU0lWRSkKKwl7CisJCS8vIFBhc3NpdmUgc2NhbiBNb2RlCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBhc3NpdmUgU2NhbiBNb2RlIVxuIikpOworCisJCS8vIENvbnRyb2wgc3RhdGUgbWFjaGluZSBpcyBub3QgaWRsZSwgcmVqZWN0IHRoZSByZXF1ZXN0CisJCWlmICgocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpICYmIChJbmRleCA9PSAwKSkKKwkJCXJldHVybjsKKworCQkvLyBGaWxsIG91dCBzdHVmZiBmb3Igc2NhbiByZXF1ZXN0CisJCVNjYW5QYXJtRmlsbChwQWQsICZTY2FuUmVxLCBaZXJvU3NpZCwgMCwgQlNTX0FOWSwgU0NBTl9DSVNDT19QQVNTSVZFKTsKKwkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NDQU5fUkVRLCBzaXplb2YoTUxNRV9TQ0FOX1JFUV9TVFJVQ1QpLCAmU2NhblJlcSk7CisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsKKworCQkvLyBSZXNldCBzb21lIGludGVybmFsIGNvbnRyb2wgZmxhZ3MgdG8gbWFrZSBzdXJlIHRoaXMgc2NhbiB3b3Jrcy4KKwkJQnNzVGFibGVJbml0KCZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIpOworCQlwQWQtPlN0YUNmZy5TY2FuQ250ICAgICAgICA9IDA7CisJCXBBZC0+U3RhQ2ZnLkNDWFNjYW5DaGFubmVsID0gcFJlcS0+TWVhc3VyZW1lbnQuQ2hhbm5lbDsKKwkJcEFkLT5TdGFDZmcuQ0NYU2NhblRpbWUgICAgPSBwUmVxLT5NZWFzdXJlbWVudC5EdXJhdGlvbjsKKwkJcEFkLT5TdGFDZmcuQ0NYUmVxVHlwZSAgICAgPSBNU1JOX1RZUEVfQkVBQ09OX1JFUTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRHVyYXRpb24gJWQhXG4iLCBwUmVxLT5NZWFzdXJlbWVudC5EdXJhdGlvbikpOworCisJCS8vIElmIGl0J3Mgbm9uIHNlcnZpbmcgY2hhbm5lbCBzY2FuLCBzZW5kIG91dCBhIG51bGwgZnJhbWUgd2l0aCBQU00gYml0IG9uLgorCQlpZiAocEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWwgIT0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwkJeworCQkJLy8gVXNlIE1MTUUgZW5xdWV1ZSBtZXRob2QKKwkJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFZPSUQpJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCQkJaWYgKE5TdGF0dXMJIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCQlyZXR1cm47CisKKwkJCXBOdWxsRnJhbWUgPSAoUEhFQURFUl84MDJfMTEpIHBPdXRCdWZmZXI7CisJCQkvLyBNYWtlIHRoZSBwb3dlciBzYXZlIE51bGwgZnJhbWUgd2l0aCBQU00gYml0IG9uCisJCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgcE51bGxGcmFtZSwgU1VCVFlQRV9OVUxMX0ZVTkMsIDEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQlwTnVsbEZyYW1lLT5EdXJhdGlvbiAJPSAwOworCQkJcE51bGxGcmFtZS0+RkMuVHlwZSAgICAgPSBCVFlQRV9EQVRBOworCQkJcE51bGxGcmFtZS0+RkMuUHdyTWdtdCAgPSBQV1JfU0FWRTsKKworCQkJLy8gU2VuZCB1c2luZyBwcmlvcml0eSBxdWV1ZQorCQkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNlbmQgUFNNIERhdGEgZnJhbWUgZm9yIG9mZiBjaGFubmVsIFJNXG4iKSk7CisJCQlSVE1QdXNlY0RlbGF5KDUwMDApOworCQl9CisKKwkJcEFkLT5NbG1lLkFpcm9uZXRNYWNoaW5lLkN1cnJTdGF0ZSA9IEFJUk9ORVRfU0NBTk5JTkc7CisJfQorCWVsc2UgaWYgKHBSZXEtPk1lYXN1cmVtZW50LlNjYW5Nb2RlID09IE1TUk5fU0NBTl9NT0RFX0FDVElWRSkKKwl7CisJCS8vIEFjdGl2ZSBzY2FuIE1vZGUKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQWN0aXZlIFNjYW4gTW9kZSFcbiIpKTsKKworCQkvLyBDb250cm9sIHN0YXRlIG1hY2hpbmUgaXMgbm90IGlkbGUsIHJlamVjdCB0aGUgcmVxdWVzdAorCQlpZiAocEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSAhPSBDTlRMX0lETEUpCisJCQlyZXR1cm47CisKKwkJLy8gRmlsbCBvdXQgc3R1ZmYgZm9yIHNjYW4gcmVxdWVzdAorCQlTY2FuUGFybUZpbGwocEFkLCAmU2NhblJlcSwgWmVyb1NzaWQsIDAsIEJTU19BTlksIFNDQU5fQ0lTQ09fQUNUSVZFKTsKKwkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NDQU5fUkVRLCBzaXplb2YoTUxNRV9TQ0FOX1JFUV9TVFJVQ1QpLCAmU2NhblJlcSk7CisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0xJU1RfU0NBTjsKKworCQkvLyBSZXNldCBzb21lIGludGVybmFsIGNvbnRyb2wgZmxhZ3MgdG8gbWFrZSBzdXJlIHRoaXMgc2NhbiB3b3Jrcy4KKwkJQnNzVGFibGVJbml0KCZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIpOworCQlwQWQtPlN0YUNmZy5TY2FuQ250ICAgICAgICA9IDA7CisJCXBBZC0+U3RhQ2ZnLkNDWFNjYW5DaGFubmVsID0gcFJlcS0+TWVhc3VyZW1lbnQuQ2hhbm5lbDsKKwkJcEFkLT5TdGFDZmcuQ0NYU2NhblRpbWUgICAgPSBwUmVxLT5NZWFzdXJlbWVudC5EdXJhdGlvbjsKKwkJcEFkLT5TdGFDZmcuQ0NYUmVxVHlwZSAgICAgPSBNU1JOX1RZUEVfQkVBQ09OX1JFUTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRHVyYXRpb24gJWQhXG4iLCBwUmVxLT5NZWFzdXJlbWVudC5EdXJhdGlvbikpOworCisJCS8vIElmIGl0J3Mgbm9uIHNlcnZpbmcgY2hhbm5lbCBzY2FuLCBzZW5kIG91dCBhIG51bGwgZnJhbWUgd2l0aCBQU00gYml0IG9uLgorCQlpZiAocEFkLT5TdGFDZmcuQ0NYU2NhbkNoYW5uZWwgIT0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwkJeworCQkJLy8gVXNlIE1MTUUgZW5xdWV1ZSBtZXRob2QKKwkJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFZPSUQpJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCQkJaWYgKE5TdGF0dXMJIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCQlyZXR1cm47CisKKwkJCXBOdWxsRnJhbWUgPSAoUEhFQURFUl84MDJfMTEpIHBPdXRCdWZmZXI7CisJCQkvLyBNYWtlIHRoZSBwb3dlciBzYXZlIE51bGwgZnJhbWUgd2l0aCBQU00gYml0IG9uCisJCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgcE51bGxGcmFtZSwgU1VCVFlQRV9OVUxMX0ZVTkMsIDEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQlwTnVsbEZyYW1lLT5EdXJhdGlvbiAJPSAwOworCQkJcE51bGxGcmFtZS0+RkMuVHlwZSAgICAgPSBCVFlQRV9EQVRBOworCQkJcE51bGxGcmFtZS0+RkMuUHdyTWdtdCAgPSBQV1JfU0FWRTsKKworCQkJLy8gU2VuZCB1c2luZyBwcmlvcml0eSBxdWV1ZQorCQkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCQkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNlbmQgUFNNIERhdGEgZnJhbWUgZm9yIG9mZiBjaGFubmVsIFJNXG4iKSk7CisJCQlSVE1QdXNlY0RlbGF5KDUwMDApOworCQl9CisKKwkJcEFkLT5NbG1lLkFpcm9uZXRNYWNoaW5lLkN1cnJTdGF0ZSA9IEFJUk9ORVRfU0NBTk5JTkc7CisJfQorCWVsc2UgaWYgKHBSZXEtPk1lYXN1cmVtZW50LlNjYW5Nb2RlID09IE1TUk5fU0NBTl9NT0RFX0JFQUNPTl9UQUJMRSkKKwl7CisJCS8vIEJlYWNvbiByZXBvcnQgTW9kZSwgcmVwb3J0IGFsbCB0aGUgQVBTIGluIGN1cnJlbnQgYnNzIHRhYmxlCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJlYWNvbiBSZXBvcnQgTW9kZSFcbiIpKTsKKworCQkvLyBDb3B5IGN1cnJlbnQgQlNTIHRhYmxlIHRvIENDWCB0YWJsZSwgd2UgY2FuIG9taXQgdGhpcyBzdGVwIGxhdGVyIG9uLgorCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFDZmcuQ0NYQnNzVGFiLCAmcEFkLT5TY2FuVGFiLCBzaXplb2YoQlNTX1RBQkxFKSk7CisKKwkJLy8gQ3JlYXRlIGJlYWNvbiByZXBvcnQgZnJvbSBCc3MgdGFibGUKKwkJQWlyb25ldENyZWF0ZUJlYWNvblJlcG9ydEZyb21Cc3NUYWJsZShwQWQpOworCisJCS8vIFNldCBzdGF0ZSB0byBzY2FubmluZworCQlwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUuQ3VyclN0YXRlID0gQUlST05FVF9TQ0FOTklORzsKKworCQkvLyBFbnF1ZXVlIHJlcG9ydCByZXF1ZXN0CisJCS8vIENpc2NvIHNjYW4gcmVxdWVzdCBpcyBmaW5pc2hlZCwgcHJlcGFyZSBiZWFjb24gcmVwb3J0CisJCU1sbWVFbnF1ZXVlKHBBZCwgQUlST05FVF9TVEFURV9NQUNISU5FLCBNVDJfQUlST05FVF9TQ0FOX0RPTkUsIDAsIE5VTEwpOworCX0KKwllbHNlCisJeworCQkvLyBXcm9uZyBzY2FuIE1vZGUKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV3JvbmcgU2NhbiBNb2RlIVxuIikpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkJlYWNvblJlcXVlc3RBY3Rpb24gPC0tLS0tXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBaXJvbmV0UmVwb3J0QWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1MTUVfUVVFVUVfRUxFTQkqRWxlbSkKK3sKKwlQUk1fUkVRVUVTVF9BQ1RJT04JcFJlcTsKKwlVTE9ORwkJCQlOb3czMjsKKworICAgIE5kaXNHZXRTeXN0ZW1VcFRpbWUoJk5vdzMyKTsKKwlwQWQtPlN0YUNmZy5MYXN0QmVhY29uUnhUaW1lID0gTm93MzI7CisKKwlwUmVxID0gKFBSTV9SRVFVRVNUX0FDVElPTikgJnBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHhdOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQWlyb25ldFJlcG9ydEFjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIDEuIFBhcnNlIG1lYXN1cmVtZW50IHR5cGUgYW5kIGNhbGwgYXBwcm9wcmlhdGUgZnVuY3Rpb25zCisJaWYgKHBSZXEtPlJlcUVsZW0uVHlwZSA9PSBNU1JOX1RZUEVfQ0hBTk5FTF9MT0FEX1JFUSkKKwkJLy8gQ2hhbm5lbCBMb2FkIG1lYXN1cmVtZW50IHJlcXVlc3QKKwkJQ2hhbm5lbExvYWRSZXBvcnRBY3Rpb24ocEFkLCBwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHgpOworCWVsc2UgaWYgKHBSZXEtPlJlcUVsZW0uVHlwZSA9PSBNU1JOX1RZUEVfTk9JU0VfSElTVF9SRVEpCisJCS8vIE5vaXNlIEhpc3RvZ3JhbSBtZWFzdXJlbWVudCByZXF1ZXN0CisJCU5vaXNlSGlzdFJlcG9ydEFjdGlvbihwQWQsIHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCk7CisJZWxzZSBpZiAocFJlcS0+UmVxRWxlbS5UeXBlID09IE1TUk5fVFlQRV9CRUFDT05fUkVRKQorCQkvLyBCZWFjb24gbWVhc3VyZW1lbnQgcmVxdWVzdAorCQlCZWFjb25SZXBvcnRBY3Rpb24ocEFkLCBwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHgpOworCWVsc2UKKwkJLy8gVW5rbm93bi4gRG8gbm90aGluZyBhbmQgcmV0dXJuCisJCTsKKworCS8vIDIuIFBvaW50IHRvIHRoZSBjb3JyZWN0IGluZGV4IG9mIGFjdGlvbiBlbGVtZW50LCBzdGFydCBmcm9tIDAKKwlwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHgrKzsKKworCS8vIDMuIENoZWNrIGZvciBwYXJhbGxlbCBhY3Rpb25zCisJaWYgKHBBZC0+U3RhQ2ZnLlBhcmFsbGVsUmVxID09IFRSVUUpCisJeworCQlwUmVxID0gKFBSTV9SRVFVRVNUX0FDVElPTikgJnBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHhdOworCisJCS8vIFByb2Nlc3MgbmV4dCBhY3Rpb24gcmlnaHQgYXdheQorCQlpZiAocFJlcS0+UmVxRWxlbS5UeXBlID09IE1TUk5fVFlQRV9DSEFOTkVMX0xPQURfUkVRKQorCQkJLy8gQ2hhbm5lbCBMb2FkIG1lYXN1cmVtZW50IHJlcXVlc3QKKwkJCUNoYW5uZWxMb2FkUmVwb3J0QWN0aW9uKHBBZCwgcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4KTsKKwkJZWxzZSBpZiAocFJlcS0+UmVxRWxlbS5UeXBlID09IE1TUk5fVFlQRV9OT0lTRV9ISVNUX1JFUSkKKwkJCS8vIE5vaXNlIEhpc3RvZ3JhbSBtZWFzdXJlbWVudCByZXF1ZXN0CisJCQlOb2lzZUhpc3RSZXBvcnRBY3Rpb24ocEFkLCBwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHgpOworCisJCXBBZC0+U3RhQ2ZnLlBhcmFsbGVsUmVxID0gRkFMU0U7CisJCXBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeCsrOworCX0KKworCWlmIChwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHggPj0gcEFkLT5TdGFDZmcuUk1SZXFDbnQpCisJeworCQkvLyA0LiBUaGVyZSBpcyBubyBtb3JlIHVucHJvY2Vzc2VkIG1lYXN1cmVtZW50IHJlcXVlc3QsIGdvIGZvciB0cmFuc21pdCB0aGlzIHJlcG9ydAorCQlBaXJvbmV0RmluYWxSZXBvcnRBY3Rpb24ocEFkKTsKKwkJcEFkLT5NbG1lLkFpcm9uZXRNYWNoaW5lLkN1cnJTdGF0ZSA9IEFJUk9ORVRfSURMRTsKKwl9CisJZWxzZQorCXsKKwkJcFJlcSA9IChQUk1fUkVRVUVTVF9BQ1RJT04pICZwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbcEFkLT5TdGFDZmcuQ3VycmVudFJNUmVxSWR4XTsKKworCQlpZiAocFJlcS0+TWVhc3VyZW1lbnQuQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQl7CisJCQlSVE1QdXNlY0RlbGF5KDEwMDAwMCk7CisJCX0KKworCQkvLyA1LiBUaGVyZSBhcmUgbW9yZSByZXF1ZXN0cyB0byBiZSBtZWFzdXJlCisJCU1sbWVFbnF1ZXVlKHBBZCwgQUlST05FVF9TVEFURV9NQUNISU5FLCBNVDJfQUlST05FVF9TQ0FOX1JFUSwgMCwgTlVMTCk7CisJCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBaXJvbmV0UmVwb3J0QWN0aW9uIDwtLS0tLVxuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJQWlyb25ldEZpbmFsUmVwb3J0QWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworCVBVQ0hBUgkJCQkJcERlc3Q7CisJUEFJUk9ORVRfSUFQUF9IRUFERVIJcElBUFA7CisJUEhFQURFUl84MDJfMTEJCQlwSGVhZGVyOworCVVDSEFSCQkJCQlBY2tSYXRlID0gUkFURV8yOworCVVTSE9SVAkJCQkJQWNrRHVyYXRpb24gPSAwOworCU5ESVNfU1RBVFVTCQkJCU5TdGF0dXM7CisJUFVDSEFSCQkJCQlwT3V0QnVmZmVyID0gTlVMTDsKKwlVTE9ORwkJCQkJRnJhbWVMZW4gPSAwOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQWlyb25ldEZpbmFsUmVwb3J0QWN0aW9uIC0tLS0tPlxuIikpOworCisJLy8gMC4gU2V0IHVwIHRoZSBmcmFtZSBwb2ludGVyLCBGcmFtZSB3YXMgaW5pdGVkIGF0IHRoZSBlbmQgb2YgbWVzc2FnZSBhY3Rpb24KKwlwRGVzdCA9ICZwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydEJ1ZltMRU5HVEhfODAyXzExXTsKKworCS8vIDEuIFVwZGF0ZSByZXBvcnQgSUFQUCBmaWVsZHMKKwlwSUFQUCA9IChQQUlST05FVF9JQVBQX0hFQURFUikgcERlc3Q7CisKKwkvLyAyLiBDb3B5IENpc2NvIFNOQVAgaGVhZGVyCisJTmRpc01vdmVNZW1vcnkocElBUFAtPkNpc2NvU25hcEhlYWRlciwgU05BUF9BSVJPTkVULCBMRU5HVEhfODAyXzFfSCk7CisKKwkvLyAzLiBuZXR3b3JrIG9yZGVyIGZvciB0aGlzIDE2Yml0IGxlbmd0aAorCXBJQVBQLT5MZW5ndGggID0gY3B1MmJlMTYocEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW4gLSBMRU5HVEhfODAyXzExIC0gTEVOR1RIXzgwMl8xX0gpOworCisJLy8gMy4xIHNhbml0eSBjaGVjayB0aGUgcmVwb3J0IGxlbmd0aCwgaWdub3JlIGl0IGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVwb3J0CisJaWYgKGJlMmNwdTE2KHBJQVBQLT5MZW5ndGgpIDw9IDE4KQorCQlyZXR1cm47CisKKwkvLyA0LiBUeXBlIG11c3QgYmUgMHgzMgorCXBJQVBQLT5UeXBlICAgID0gQUlST05FVF9JQVBQX1RZUEU7CisKKwkvLyA1LiBTdWJUeXBlIGZvciByZXBvcnQgbXVzdCBiZSAweDgxCisJcElBUFAtPlN1YlR5cGUgPSBBSVJPTkVUX0lBUFBfU1VCVFlQRV9SRVBPUlQ7CisKKwkvLyA2LiBEQSBpcyBub3QgdXNlZCBhbmQgbXVzdCBiZSB6ZXJvLCBhbHRob3VnaCB0aGUgd2hvbGUgZnJhbWUgd2FzIGNsZWFyZWQgYXQgdGhlIHN0YXJ0IG9mIGZ1bmN0aW9uCisJLy8gICAgV2Ugd2lsbCBkbyBpdCBhZ2FpbiBoZXJlLiBXZSBjYW4gdXNlIEJTU0lEIGluc3RlYWQKKwlDT1BZX01BQ19BRERSKHBJQVBQLT5EQSwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJLy8gNy4gU0EgaXMgdGhlIGNsaWVudCByZXBvcnRpbmcgd2hpY2ggbXVzdCBiZSBvdXIgTUFDCisJQ09QWV9NQUNfQUREUihwSUFQUC0+U0EsIHBBZC0+Q3VycmVudEFkZHJlc3MpOworCisJLy8gOC4gQ29weSB0aGUgc2F2ZWQgZGlhbG9nIHRva2VuCisJcElBUFAtPlRva2VuID0gcEFkLT5TdGFDZmcuSUFQUFRva2VuOworCisJLy8gOS4gTWFrZSB0aGUgUmVwb3J0IGZyYW1lIDgwMi4xMSBoZWFkZXIKKwkvLyAgICBSZXVzZSBmdW5jdGlvbiBpbiB3cGEuYworCXBIZWFkZXIgPSAoUEhFQURFUl84MDJfMTEpIHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0QnVmOworCXBBZC0+U2VxdWVuY2UgKys7CisJV3BhTWFjSGVhZGVySW5pdChwQWQsIHBIZWFkZXIsIDAsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKworCS8vIEFDSyBzaXplCWlzIDE0IGluY2x1ZGUgQ1JDLCBhbmQgaXRzIHJhdGUJaXMgYmFzZWQgb24gcmVhbCB0aW1lIGluZm9ybWF0aW9uCisJQWNrUmF0ZSAgICAgPSBwQWQtPkNvbW1vbkNmZy5FeHBlY3RlZEFDS1JhdGVbcEFkLT5Db21tb25DZmcuTWxtZVJhdGVdOworCUFja0R1cmF0aW9uID0gUlRNUENhbGNEdXJhdGlvbihwQWQsIEFja1JhdGUsIDE0KTsKKwlwSGVhZGVyLT5EdXJhdGlvbiA9IHBBZC0+Q29tbW9uQ2ZnLkRzaWZzICsgQWNrRHVyYXRpb247CisKKwkvLyBVc2UgTUxNRSBlbnF1ZXVlIG1ldGhvZAorCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYgKE5TdGF0dXMJIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuOworCisJLy8gMTAuIFByZXBhcmUgcmVwb3J0IGZyYW1lIHdpdGggZHluYW1pYyBvdXRidWZmZXIuIEp1c3Qgc2ltcGx5IGNvcHkgZXZlcnl0aGluZy4KKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCSAgICAgICAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuLCBwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydEJ1ZiwKKwkJICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisKKwkvLyAxMS4gU2VuZCB1c2luZyBwcmlvcml0eSBxdWV1ZQorCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwlwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlID0gTVNSTl9UWVBFX1VOVVNFRDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFpcm9uZXRGaW5hbFJlcG9ydEFjdGlvbiA8LS0tLS1cbiIpKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisKKwlBcmd1bWVudHM6CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECUNoYW5uZWxMb2FkUmVwb3J0QWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJSW5kZXgpCit7CisJUE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UCXBSZXBvcnQ7CisJUENIQU5ORUxfTE9BRF9SRVBPUlQJCXBMb2FkOworCVBVQ0hBUgkJCQkJCXBEZXN0OworCVVDSEFSCQkJCQkJQ0NBQnVzeUZyYWN0aW9uOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2hhbm5lbExvYWRSZXBvcnRBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwkvLyBEaXNhYmxlIFJ4IHdpdGggcHJvbWlzY3VvdXMgcmVjZXB0aW9uLCBtYWtlIGl0IGJhY2sgdG8gbm9ybWFsCisJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfRklMVFJfQ0ZHLCBTVEFOT1JNQUwpOyAvLyBTdGFpb24gbm90IGRyb3AgY29udHJvbCBmcmFtZSB3aWxsIGZhaWwgV2lGaSBDZXJ0aWZpY2F0aW9uLgorCisJLy8gMC4gU2V0dXAgcG9pbnRlciBmb3IgcHJvY2Vzc2luZyBiZWFjb24gJiBwcm9iZSByZXNwb25zZQorCXBEZXN0ID0gKFBVQ0hBUikgJnBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0QnVmW3BBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuXTsKKwlwUmVwb3J0ID0gKFBNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCkgcERlc3Q7CisKKwkvLyAxLiBGaWxsIE1lYXN1cmVtZW50IHJlcG9ydCBlbGVtZW50IGZpZWxkLgorCXBSZXBvcnQtPkVpZCAgICA9IElFX01FQVNVUkVNRU5UX1JFUE9SVDsKKwkvLyBGaXhlZCBMZW5ndGggYXQgOSwgbm90IGluY2x1ZGUgRWlkIGFuZCBsZW5ndGggZmllbGRzCisJcFJlcG9ydC0+TGVuZ3RoID0gOTsKKwlwUmVwb3J0LT5Ub2tlbiAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdLlJlcUVsZW0uVG9rZW47CisJcFJlcG9ydC0+TW9kZSAgID0gcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W0luZGV4XS5SZXFFbGVtLk1vZGU7CisJcFJlcG9ydC0+VHlwZSAgID0gTVNSTl9UWVBFX0NIQU5ORUxfTE9BRF9SRVE7CisKKwkvLyAyLiBGaWxsIGNoYW5uZWwgcmVwb3J0IG1lYXN1cmVtZW50IGRhdGEKKwlwRGVzdCArPSBzaXplb2YoTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQpOworCXBMb2FkICA9IChQQ0hBTk5FTF9MT0FEX1JFUE9SVCkgcERlc3Q7CisJcExvYWQtPkNoYW5uZWwgID0gcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W0luZGV4XS5NZWFzdXJlbWVudC5DaGFubmVsOworCXBMb2FkLT5TcGFyZSAgICA9IDA7CisJcExvYWQtPkR1cmF0aW9uID0gcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W0luZGV4XS5NZWFzdXJlbWVudC5EdXJhdGlvbjsKKworCS8vIDMuIENhbGN1bGF0ZSB0aGUgQ0NBIEJ1c3kgRnJhY3Rpb24KKwkvLyAgICAoQnl0ZXMgKyBBQ0sgc2l6ZSkgKiA4IC8gVHggc3BlZWQgKiAyNTUgLyAxMDAwIC8gbWVhc3VyZW1lbnQgZHVyYXRpb24sIHVzZSAyNCB1cyBUeCBzcGVlZAorCS8vICAgICA9ICAoQnl0ZXMgKyBBQ0spIC8gMTIgLyBkdXJhdGlvbgorCS8vICAgICA5IGlzIHRoZSBnb29kIHZhbHVlIGZvciBwQWQtPlN0YUNmZy5DTEZhY3RvcgorCS8vIENDQUJ1c3lGcmFjdGlvbiA9IChVQ0hBUikgKHBBZC0+U3RhQ2ZnLkNMQnVzeUJ5dGVzIC8gOSAvIHBMb2FkLT5EdXJhdGlvbik7CisJQ0NBQnVzeUZyYWN0aW9uID0gKFVDSEFSKSAocEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMgLyBwQWQtPlN0YUNmZy5DTEZhY3RvciAvIHBMb2FkLT5EdXJhdGlvbik7CisJaWYgKENDQUJ1c3lGcmFjdGlvbiA8IDEwKQorCQkJQ0NBQnVzeUZyYWN0aW9uID0gKFVDSEFSKSAocEFkLT5TdGFDZmcuQ0xCdXN5Qnl0ZXMgLyAzIC8gcExvYWQtPkR1cmF0aW9uKSArIDE7CisKKwlwTG9hZC0+Q0NBQnVzeSA9IENDQUJ1c3lGcmFjdGlvbjsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTEJ1c3lCeXRlICVsZCwgRHVyYXRpb24gJWQsIFJlc3VsdCwgJWRcbiIsIHBBZC0+U3RhQ2ZnLkNMQnVzeUJ5dGVzLCBwTG9hZC0+RHVyYXRpb24sIENDQUJ1c3lGcmFjdGlvbikpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRnJhbWVSZXBvcnRMZW4gJWRcbiIsIHBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuKSk7CisJcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW4gKz0gKHNpemVvZihNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCkgKyBzaXplb2YoQ0hBTk5FTF9MT0FEX1JFUE9SVCkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkZyYW1lUmVwb3J0TGVuICVkXG4iLCBwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbikpOworCisJLy8gNC4gQ2xlYXIgY2hhbm5lbCBsb2FkIG1lYXN1cmVtZW50IGZsYWcKKwlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX01FQVNVUkVNRU5UKTsKKworCS8vIDUuIHJlc2V0IHRvIGlkbGUgc3RhdGUKKwlwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUuQ3VyclN0YXRlID0gQUlST05FVF9JRExFOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2hhbm5lbExvYWRSZXBvcnRBY3Rpb24gPC0tLS0tXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCisJQXJndW1lbnRzOgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlOb2lzZUhpc3RSZXBvcnRBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJbmRleCkKK3sKKwlQTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQJcFJlcG9ydDsKKwlQTk9JU0VfSElTVF9SRVBPUlQJCQlwTm9pc2U7CisJUFVDSEFSCQkJCQkJcERlc3Q7CisJVUNIQVIJCQkJCQlpLE5vaXNlQ250OworCVVTSE9SVAkJCQkJCVRvdGFsUlBJQ250LCBUb3RhbFJQSVN1bTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5vaXNlSGlzdFJlcG9ydEFjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIDAuIERpc2FibGUgUnggd2l0aCBwcm9taXNjdW91cyByZWNlcHRpb24sIG1ha2UgaXQgYmFjayB0byBub3JtYWwKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBSWF9GSUxUUl9DRkcsIFNUQU5PUk1BTCk7IC8vIFN0YWlvbiBub3QgZHJvcCBjb250cm9sIGZyYW1lIHdpbGwgZmFpbCBXaUZpIENlcnRpZmljYXRpb24uCisJLy8gMS4gU2V0dXAgcG9pbnRlciBmb3IgcHJvY2Vzc2luZyBiZWFjb24gJiBwcm9iZSByZXNwb25zZQorCXBEZXN0ID0gKFBVQ0hBUikgJnBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0QnVmW3BBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuXTsKKwlwUmVwb3J0ID0gKFBNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCkgcERlc3Q7CisKKwkvLyAyLiBGaWxsIE1lYXN1cmVtZW50IHJlcG9ydCBlbGVtZW50IGZpZWxkLgorCXBSZXBvcnQtPkVpZCAgICA9IElFX01FQVNVUkVNRU5UX1JFUE9SVDsKKwkvLyBGaXhlZCBMZW5ndGggYXQgMTYsIG5vdCBpbmNsdWRlIEVpZCBhbmQgbGVuZ3RoIGZpZWxkcworCXBSZXBvcnQtPkxlbmd0aCA9IDE2OworCXBSZXBvcnQtPlRva2VuICA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF0uUmVxRWxlbS5Ub2tlbjsKKwlwUmVwb3J0LT5Nb2RlICAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdLlJlcUVsZW0uTW9kZTsKKwlwUmVwb3J0LT5UeXBlICAgPSBNU1JOX1RZUEVfTk9JU0VfSElTVF9SRVE7CisKKwkvLyAzLiBGaWxsIG5vaXNlIGhpc3RvZ3JhbSByZXBvcnQgbWVhc3VyZW1lbnQgZGF0YQorCXBEZXN0ICs9IHNpemVvZihNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCk7CisJcE5vaXNlICA9IChQTk9JU0VfSElTVF9SRVBPUlQpIHBEZXN0OworCXBOb2lzZS0+Q2hhbm5lbCAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbSW5kZXhdLk1lYXN1cmVtZW50LkNoYW5uZWw7CisJcE5vaXNlLT5TcGFyZSAgICA9IDA7CisJcE5vaXNlLT5EdXJhdGlvbiA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtJbmRleF0uTWVhc3VyZW1lbnQuRHVyYXRpb247CisJLy8gNC4gRmlsbCBOb2lzZSBoaXN0b2dyYW0sIHRoZSB0b3RhbCBSUEkgY291bnRzIHNob3VsZCBiZSAwLjQgKiBUVQorCS8vICAgIFdlIGVzdGltYXRlIDQwMDAgbm9ybWFsIHBhY2tldHMgcmVjZWl2ZWQgZHVybmluZyAxMCBzZWNvbmRzIHRlc3QuCisJLy8gICAgQWRqdXN0IGl0IGlmIHJlcXVpcmVkLgorCS8vIDMgaXMgYSBnb29kIHZhbHVlIGZvciBwQWQtPlN0YUNmZy5OSEZhY3RvcgorCS8vIFRvdGFsUlBJQ250ID0gcE5vaXNlLT5EdXJhdGlvbiAqIDMgLyAxMDsKKwlUb3RhbFJQSUNudCA9IHBOb2lzZS0+RHVyYXRpb24gKiBwQWQtPlN0YUNmZy5OSEZhY3RvciAvIDEwOworCVRvdGFsUlBJU3VtID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJeworCQlUb3RhbFJQSVN1bSArPSBwQWQtPlN0YUNmZy5SUElEZW5zaXR5W2ldOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSUEkgJWQgQ29udXRzICVkXG4iLCBpLCBwQWQtPlN0YUNmZy5SUElEZW5zaXR5W2ldKSk7CisJfQorCisJLy8gRG91YmxlIGNoZWNrIGlmIHRoZSBjb3VudGVyIGlzIGxhcmdlciB0aGFuIG91ciBleHBlY3RhdGlvbi4KKwkvLyBXZSB3aWxsIHJlcGxhY2UgaXQgd2l0aCB0aGUgdG90YWwgbnVtYmVyIHBsdXMgYSBmcmFjdGlvbi4KKwlpZiAoVG90YWxSUElTdW0gPiBUb3RhbFJQSUNudCkKKwkJVG90YWxSUElDbnQgPSBUb3RhbFJQSVN1bSArIHBOb2lzZS0+RHVyYXRpb24gLyAyMDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlRvdGFsIFJQSSBDb251dHMgJWRcbiIsIFRvdGFsUlBJQ250KSk7CisKKwkvLyA1LiBJbml0aWFsaXplIG5vaXNlIGNvdW50IGZvciB0aGUgdG90YWwgc3VtbWF0aW9uIG9mIDB4ZmYKKwlOb2lzZUNudCA9IDA7CisJZm9yIChpID0gMTsgaSA8IDg7IGkrKykKKwl7CisJCXBOb2lzZS0+RGVuc2l0eVtpXSA9IChVQ0hBUikgKHBBZC0+U3RhQ2ZnLlJQSURlbnNpdHlbaV0gKiAyNTUgLyBUb3RhbFJQSUNudCk7CisJCWlmICgocE5vaXNlLT5EZW5zaXR5W2ldID09IDApICYmIChwQWQtPlN0YUNmZy5SUElEZW5zaXR5W2ldICE9IDApKQorCQkJcE5vaXNlLT5EZW5zaXR5W2ldKys7CisJCU5vaXNlQ250ICs9IHBOb2lzZS0+RGVuc2l0eVtpXTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmVwb3J0ZWQgUlBJWyVkXSAgPSAweCUwMnhcbiIsIGksIHBOb2lzZS0+RGVuc2l0eVtpXSkpOworCX0KKworCS8vIDYuIFJQSVswXSByZXByZXNlbnRzIHRoZSByZXN0IG9mIGNvdW50cworCXBOb2lzZS0+RGVuc2l0eVswXSA9IDB4ZmYgLSBOb2lzZUNudDsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZXBvcnRlZCBSUElbMF0gID0gMHglMDJ4XG4iLCBwTm9pc2UtPkRlbnNpdHlbMF0pKTsKKworCXBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0TGVuICs9IChzaXplb2YoTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQpICsgc2l6ZW9mKE5PSVNFX0hJU1RfUkVQT1JUKSk7CisKKwkvLyA3LiBDbGVhciBjaGFubmVsIGxvYWQgbWVhc3VyZW1lbnQgZmxhZworCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fTUVBU1VSRU1FTlQpOworCisJLy8gOC4gcmVzZXQgdG8gaWRsZSBzdGF0ZQorCXBBZC0+TWxtZS5BaXJvbmV0TWFjaGluZS5DdXJyU3RhdGUgPSBBSVJPTkVUX0lETEU7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJOb2lzZUhpc3RSZXBvcnRBY3Rpb24gPC0tLS0tXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlQcmVwYXJlIEJlYWNvbiByZXBvcnQgYWN0aW9uLAorCisJQXJndW1lbnRzOgorCQlwQWQJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlOb25lCisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlCZWFjb25SZXBvcnRBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVUNIQVIJCQlJbmRleCkKK3sKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCZWFjb25SZXBvcnRBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwkvLyBMb29rcyBsaWtlIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdGhpbmcgbmVlZCB0byBkbyBoZXJlLgorCS8vIEFsbCBtZWFzdXJlbWVudCByZXBvcnQgYWxyZWFkeSBmaW5pc2hlZCBpbiBBZGRCZWFjb25SZXBvcnQKKwkvLyBUaGUgbGVuZ3RoIGlzIGluIHRoZSBGcmFtZVJlcG9ydExlbgorCisJLy8gcmVzZXQgQmVhY29uIGluZGV4IGZvciBuZXh0IGJlYWNvbiByZXF1ZXN0CisJcEFkLT5TdGFDZmcuTGFzdEJzc0luZGV4ID0gMHhmZjsKKworCS8vIHJlc2V0IHRvIGlkbGUgc3RhdGUKKwlwQWQtPk1sbWUuQWlyb25ldE1hY2hpbmUuQ3VyclN0YXRlID0gQUlST05FVF9JRExFOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQmVhY29uUmVwb3J0QWN0aW9uIDwtLS0tLVxuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKwkJSW5kZXgJCUN1cnJlbnQgQlNTSUQgaW4gQ0NYQnNzdGFiIGVudHJ5IGluZGV4CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBaXJvbmV0QWRkQmVhY29uUmVwb3J0KAorCUlOCVBSVE1QX0FEQVBURVIJCXBBZCwKKwlJTglVTE9ORwkJCQlJbmRleCwKKwlJTglQTUxNRV9RVUVVRV9FTEVNCXBFbGVtKQoreworCVBWT0lECQkJCQkJcE1zZzsKKwlQVUNIQVIJCQkJCQlwU3JjLCBwRGVzdDsKKwlVQ0hBUgkJCQkJCVJlcUlkeDsKKwlVTE9ORwkJCQkJCU1zZ0xlbjsKKwlVU0hPUlQJCQkJCQlMZW5ndGg7CisJUEZSQU1FXzgwMl8xMQkJCQlwRnJhbWU7CisJUE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UCXBSZXBvcnQ7CisJUEVJRF9TVFJVQ1QJCQkgICAgICAgIHBFaWQ7CisJUEJFQUNPTl9SRVBPUlQJCQkJcEJlYWNvblJlcG9ydDsKKwlQQlNTX0VOVFJZCQkJCQlwQnNzOworCisJLy8gMC4gU2V0dXAgcG9pbnRlciBmb3IgcHJvY2Vzc2luZyBiZWFjb24gJiBwcm9iZSByZXNwb25zZQorCXBNc2cgICA9IHBFbGVtLT5Nc2c7CisJTXNnTGVuID0gcEVsZW0tPk1zZ0xlbjsKKwlwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSkgcE1zZzsKKwlwU3JjICAgPSBwRnJhbWUtPk9jdGV0OwkJCQkvLyBTdGFydCBmcm9tIEFQIFRTRgorCXBCc3MgICA9IChQQlNTX0VOVFJZKSAmcEFkLT5TdGFDZmcuQ0NYQnNzVGFiLkJzc0VudHJ5W0luZGV4XTsKKwlSZXFJZHggPSBwQWQtPlN0YUNmZy5DdXJyZW50Uk1SZXFJZHg7CisKKwkvLyAxIENoZWNrIHRoZSBJbmRleCwgaWYgd2UgYWxyZWFkeSBjcmVhdGUgdGhpcyBlbnRyeSwgb25seSB1cGRhdGUgdGhlIGF2ZXJhZ2UgUlNTSQorCWlmICgoSW5kZXggPD0gcEFkLT5TdGFDZmcuTGFzdEJzc0luZGV4KSAmJiAocEFkLT5TdGFDZmcuTGFzdEJzc0luZGV4ICE9IDB4ZmYpKQorCXsKKwkJcERlc3QgID0gKFBVQ0hBUikgJnBBZC0+U3RhQ2ZnLkZyYW1lUmVwb3J0QnVmW3BBZC0+U3RhQ2ZnLkJzc1JlcG9ydE9mZnNldFtJbmRleF1dOworCQkvLyBQb2ludCB0byBic3MgcmVwb3J0IGluZm9ybWF0aW9uCisJCXBEZXN0ICs9IHNpemVvZihNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCk7CisJCXBCZWFjb25SZXBvcnQgPSAoUEJFQUNPTl9SRVBPUlQpIHBEZXN0OworCisJCS8vIFVwZGF0ZSBSeCBwb3dlciwgaW4gZEJtCisJCS8vIEdldCB0aGUgb3JpZ2luYWwgUlNTSSByZWFkYmFjayBmcm9tIEJCUAorCQlwQmVhY29uUmVwb3J0LT5SeFBvd2VyICs9IHBBZC0+QmJwUnNzaVRvRGJtRGVsdGE7CisJCS8vIEF2ZXJhZ2UgdGhlIFJzc2kgcmVhZGluZworCQlwQmVhY29uUmVwb3J0LT5SeFBvd2VyICA9IChwQmVhY29uUmVwb3J0LT5SeFBvd2VyICsgcEJzcy0+UnNzaSkgLyAyOworCQkvLyBHZXQgdG8gZEJtIGZvcm1hdAorCQlwQmVhY29uUmVwb3J0LT5SeFBvd2VyIC09IHBBZC0+QmJwUnNzaVRvRGJtRGVsdGE7CisKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQnNzaWQgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggIiwKKwkJCXBCc3MtPkJzc2lkWzBdLCBwQnNzLT5Cc3NpZFsxXSwgcEJzcy0+QnNzaWRbMl0sCisJCQlwQnNzLT5Cc3NpZFszXSwgcEJzcy0+QnNzaWRbNF0sIHBCc3MtPkJzc2lkWzVdKSk7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJ4UG93ZXJbJWxkXSBSc3NpICVkLCBBdmcgUnNzaSAlZFxuIiwgSW5kZXgsIChwQnNzLT5Sc3NpIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSksIHBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgLSAyNTYpKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRnJhbWVSZXBvcnRMZW4gPSAlZFxuIiwgcEFkLT5TdGFDZmcuQnNzUmVwb3J0T2Zmc2V0W0luZGV4XSkpOworCisJCS8vIFVwZGF0ZSBvdGhlciBpbmZvcm1hdGlvbiBoZXJlCisKKwkJLy8gRG9uZQorCQlyZXR1cm47CisJfQorCisJLy8gMi4gVXBkYXRlIHJlcG9ydGVkIEluZGV4CisJcEFkLT5TdGFDZmcuTGFzdEJzc0luZGV4ID0gSW5kZXg7CisKKwkvLyAzLiBTZXR1cCB0aGUgYnVmZmVyIGFkZHJlc3MgZm9yIGNvcHlpbmcgdGhpcyBCU1NJRCBpbnRvIHJlcG9ydGluZyBmcmFtZQorCS8vICAgIFRoZSBvZmZzZXQgc2hvdWxkIHN0YXJ0IGFmdGVyIDgwMi4xMSBoZWFkZXIgYW5kIHJlcG9ydCBmcmFtZSBoZWFkZXIuCisJcERlc3QgPSAoUFVDSEFSKSAmcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRCdWZbcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW5dOworCisJLy8gNC4gU2F2ZSB0aGUgc3RhcnQgb2Zmc2V0IG9mIGVhY2ggQnNzIGluIHJlcG9ydCBmcmFtZQorCXBBZC0+U3RhQ2ZnLkJzc1JlcG9ydE9mZnNldFtJbmRleF0gPSBwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbjsKKworCS8vIDUuIEZpbGwgTWVhc3VyZW1lbnQgcmVwb3J0IGZpZWxkcworCXBSZXBvcnQgPSAoUE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKSBwRGVzdDsKKwlwUmVwb3J0LT5FaWQgPSBJRV9NRUFTVVJFTUVOVF9SRVBPUlQ7CisJcFJlcG9ydC0+TGVuZ3RoID0gMDsKKwlwUmVwb3J0LT5Ub2tlbiAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbUmVxSWR4XS5SZXFFbGVtLlRva2VuOworCXBSZXBvcnQtPk1vZGUgICA9IHBBZC0+U3RhQ2ZnLk1lYXN1cmVtZW50UmVxdWVzdFtSZXFJZHhdLlJlcUVsZW0uTW9kZTsKKwlwUmVwb3J0LT5UeXBlICAgPSBNU1JOX1RZUEVfQkVBQ09OX1JFUTsKKwlMZW5ndGggICAgICAgICAgPSBzaXplb2YoTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQpOworCXBEZXN0ICAgICAgICAgICs9IHNpemVvZihNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCk7CisKKwkvLyA2LiBTdGFydCB0aGViZWFjb24gcmVwb3J0IGZvcm1hdAorCXBCZWFjb25SZXBvcnQgPSAoUEJFQUNPTl9SRVBPUlQpIHBEZXN0OworCXBEZXN0ICAgICAgICArPSBzaXplb2YoQkVBQ09OX1JFUE9SVCk7CisJTGVuZ3RoICAgICAgICs9IHNpemVvZihCRUFDT05fUkVQT1JUKTsKKworCS8vIDcuIENvcHkgQ2hhbm5lbCBudW1iZXIKKwlwQmVhY29uUmVwb3J0LT5DaGFubmVsICAgICAgICA9IHBCc3MtPkNoYW5uZWw7CisJcEJlYWNvblJlcG9ydC0+U3BhcmUgICAgICAgICAgPSAwOworCXBCZWFjb25SZXBvcnQtPkR1cmF0aW9uICAgICAgID0gcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W1JlcUlkeF0uTWVhc3VyZW1lbnQuRHVyYXRpb247CisJcEJlYWNvblJlcG9ydC0+UGh5VHlwZSAgICAgICAgPSAoKHBCc3MtPlN1cFJhdGVMZW4rcEJzcy0+RXh0UmF0ZUxlbiA+IDQpID8gUEhZX0VSUCA6IFBIWV9EU1MpOworCS8vIDguIFJ4IHBvd2VyLCBpbiBkQm0KKwlwQmVhY29uUmVwb3J0LT5SeFBvd2VyICAgICAgICA9IHBCc3MtPlJzc2kgLSBwQWQtPkJicFJzc2lUb0RibURlbHRhOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQnNzaWQgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggIiwKKwkJcEJzcy0+QnNzaWRbMF0sIHBCc3MtPkJzc2lkWzFdLCBwQnNzLT5Cc3NpZFsyXSwKKwkJcEJzcy0+QnNzaWRbM10sIHBCc3MtPkJzc2lkWzRdLCBwQnNzLT5Cc3NpZFs1XSkpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJ4UG93ZXJbJWxkXSwgUnNzaSAlZFxuIiwgSW5kZXgsIHBCZWFjb25SZXBvcnQtPlJ4UG93ZXIgLSAyNTYpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJGcmFtZVJlcG9ydExlbiA9ICVkXG4iLCBwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbikpOworCisJcEJlYWNvblJlcG9ydC0+QmVhY29uSW50ZXJ2YWwgPSBwQnNzLT5CZWFjb25QZXJpb2Q7CisJQ09QWV9NQUNfQUREUihwQmVhY29uUmVwb3J0LT5CU1NJRCwgcEZyYW1lLT5IZHIuQWRkcjMpOworCU5kaXNNb3ZlTWVtb3J5KHBCZWFjb25SZXBvcnQtPlBhcmVudFRTRiwgcFNyYywgNCk7CisJTmRpc01vdmVNZW1vcnkocEJlYWNvblJlcG9ydC0+VGFyZ2V0VFNGLCAmcEVsZW0tPlRpbWVTdGFtcC51Lkxvd1BhcnQsIDQpOworCU5kaXNNb3ZlTWVtb3J5KCZwQmVhY29uUmVwb3J0LT5UYXJnZXRUU0ZbNF0sICZwRWxlbS0+VGltZVN0YW1wLnUuSGlnaFBhcnQsIDQpOworCisJLy8gOS4gU2tpcCB0aGUgYmVhY29uIGZyYW1lIGFuZCBvZmZzZXQgdG8gc3RhcnQgb2YgY2FwYWJpbGl0eWluZm8gc2luY2Ugd2UgYWxyZWFkeSBwcm9jZXNzZWQgY2FwYWJpbGl0eWluZm8KKwlwU3JjICs9IChUSU1FU1RBTVBfTEVOICsgMik7CisJcEJlYWNvblJlcG9ydC0+Q2FwYWJpbGl0eUluZm8gPSAqKFVTSE9SVCAqKXBTcmM7CisKKwkvLyAxMC4gUG9pbnQgdG8gc3RhcnQgb2YgZWxlbWVudCBJRAorCXBTcmMgKz0gMjsKKwlwRWlkID0gKFBFSURfU1RSVUNUKSBwU3JjOworCisJLy8gMTEuIFN0YXJ0IHByb2Nlc3MgYWxsIHZhcmlhYmxlIEVpZCBvYXlsb2FkIGFuZCBhZGQgdGhlIGFwcHJvcHJpYXRlIHRvIHRoZSBmcmFtZSByZXBvcnQKKwl3aGlsZSAoKChQVUNIQVIpIHBFaWQgKyBwRWlkLT5MZW4gKyAxKSA8ICgoUFVDSEFSKSBwRnJhbWUgKyBNc2dMZW4pKQorCXsKKwkJLy8gT25seSBsaW1pdGVkIEVJRCBhcmUgcmVxdWlyZWQgdG8gcmVwb3J0IGZvciBDQ1ggMi4gSXQgaW5jbHVkZXMgU1NJRCwgU3VwcG9ydGVkIHJhdGUsCisJCS8vIEZIIHBhcmFtZW50ZXIgc2V0LCBEUyBwYXJhbWV0ZXIgc2V0LCBDRiBwYXJhbWV0ZXIgc2V0LCBJQlNTIHBhcmFtZXRlciBzZXQsCisJCS8vIFRJTSAocmVwb3J0IGZpcnN0IDQgYnl0ZXMgb25seSwgcmFkaW8gbWVhc3VyZW1lbnQgY2FwYWJpbGl0eQorCQlzd2l0Y2ggKHBFaWQtPkVpZCkKKwkJeworCQkJY2FzZSBJRV9TU0lEOgorCQkJY2FzZSBJRV9TVVBQX1JBVEVTOgorCQkJY2FzZSBJRV9GSF9QQVJNOgorCQkJY2FzZSBJRV9EU19QQVJNOgorCQkJY2FzZSBJRV9DRl9QQVJNOgorCQkJY2FzZSBJRV9JQlNTX1BBUk06CisJCQkJTmRpc01vdmVNZW1vcnkocERlc3QsIHBFaWQsIHBFaWQtPkxlbiArIDIpOworCQkJCXBEZXN0ICArPSAocEVpZC0+TGVuICsgMik7CisJCQkJTGVuZ3RoICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBJRV9NRUFTVVJFTUVOVF9DQVBBQklMSVRZOgorCQkJCS8vIFNpbmNlIHRoaXMgSUUgaXMgZHVwbGljYXRlZCB3aXRoIFdQQSBzZWN1cml0eSBJRSwgd2UgaGFzIHRvIGRvIHNhbml0eSBjaGVjayBiZWZvcmUKKwkJCQkvLyByZWNvZ25pemUgaXQuCisJCQkJLy8gMS4gSXQgYWxzbyBoYXMgZml4ZWQgNiBieXRlcyBJRSBsZW5ndGguCisJCQkJaWYgKHBFaWQtPkxlbiAhPSA2KQorCQkJCQlicmVhazsKKwkJCQkvLyAyLiBDaGVjayB0aGUgQ2lzY28gQWlyb25ldCBPVUkKKwkJCQlpZiAoTmRpc0VxdWFsTWVtb3J5KENJU0NPX09VSSwgKHBTcmMgKyAyKSwgMykpCisJCQkJeworCQkJCQkvLyBNYXRjaGVkLCB0aGlzIGlzIHdoYXQgd2Ugd2FudAorCQkJCQlOZGlzTW92ZU1lbW9yeShwRGVzdCwgcEVpZCwgcEVpZC0+TGVuICsgMik7CisJCQkJCXBEZXN0ICArPSAocEVpZC0+TGVuICsgMik7CisJCQkJCUxlbmd0aCArPSAocEVpZC0+TGVuICsgMik7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIElFX1RJTToKKwkJCQlpZiAocEVpZC0+TGVuID4gNCkKKwkJCQl7CisJCQkJCS8vIE1heSB0cnVuY2F0ZSBhbmQgcmVwb3J0IHRoZSBmaXJzdCA0IGJ5dGVzIG9ubHksIHdpdGggdGhlIGVpZCAmIGxlbiwgdG90YWwgc2hvdWxkIGJlIDYKKwkJCQkJTmRpc01vdmVNZW1vcnkocERlc3QsIHBFaWQsIDYpOworCQkJCQlwRGVzdCAgKz0gNjsKKwkJCQkJTGVuZ3RoICs9IDY7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBEZXN0LCBwRWlkLCBwRWlkLT5MZW4gKyAyKTsKKwkJCQkJcERlc3QgICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQkJTGVuZ3RoICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCX0KKwkJLy8gMTIuIE1vdmUgdG8gbmV4dCBlbGVtZW50IElECisJCXBTcmMgKz0gKDIgKyBwRWlkLT5MZW4pOworCQlwRWlkID0gKFBFSURfU1RSVUNUKSBwU3JjOworCX0KKworCS8vIDEzLiBVcGRhdGUgdGhlIGxlbmd0aCBpbiB0aGUgaGVhZGVyLCBub3QgaW5jbHVkZSBFSUQgYW5kIGxlbmd0aAorCXBSZXBvcnQtPkxlbmd0aCA9IExlbmd0aCAtIDQ7CisKKwkvLyAxNC4gVXBkYXRlIHRoZSBmcmFtZSByZXBvcnQgYnVmZmVyIGRhdGEgbGVuZ3RoCisJcEFkLT5TdGFDZmcuRnJhbWVSZXBvcnRMZW4gKz0gTGVuZ3RoOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkZSIGxlbiA9ICVkXG4iLCBwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKworCUFyZ3VtZW50czoKKwkJSW5kZXgJCUN1cnJlbnQgQlNTSUQgaW4gQ0NYQnNzdGFiIGVudHJ5IGluZGV4CisKKwlSZXR1cm4gVmFsdWU6CisKKwlOb3RlOgorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRAlBaXJvbmV0Q3JlYXRlQmVhY29uUmVwb3J0RnJvbUJzc1RhYmxlKAorCUlOCVBSVE1QX0FEQVBURVIJCXBBZCkKK3sKKwlQTUVBU1VSRU1FTlRfUkVQT1JUX0VMRU1FTlQJcFJlcG9ydDsKKwlQQkVBQ09OX1JFUE9SVAkJCQlwQmVhY29uUmVwb3J0OworCVVDSEFSCQkJCQkJSW5kZXgsIFJlcUlkeDsKKwlVU0hPUlQJCQkJCQlMZW5ndGg7CisJUFVDSEFSCQkJCQkJcERlc3Q7CisJUEJTU19FTlRSWQkJCQkJcEJzczsKKworCS8vIDAuIHNldHVwIGJhc2UgcG9pbnRlcgorCVJlcUlkeCA9IHBBZC0+U3RhQ2ZnLkN1cnJlbnRSTVJlcUlkeDsKKworCWZvciAoSW5kZXggPSAwOyBJbmRleCA8IHBBZC0+U3RhQ2ZnLkNDWEJzc1RhYi5Cc3NOcjsgSW5kZXgrKykKKwl7CisJCS8vIDEuIFNldHVwIHRoZSBidWZmZXIgYWRkcmVzcyBmb3IgY29weWluZyB0aGlzIEJTU0lEIGludG8gcmVwb3J0aW5nIGZyYW1lCisJCS8vICAgIFRoZSBvZmZzZXQgc2hvdWxkIHN0YXJ0IGFmdGVyIDgwMi4xMSBoZWFkZXIgYW5kIHJlcG9ydCBmcmFtZSBoZWFkZXIuCisJCXBEZXN0ICA9IChQVUNIQVIpICZwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydEJ1ZltwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbl07CisJCXBCc3MgICA9IChQQlNTX0VOVFJZKSAmcEFkLT5TdGFDZmcuQ0NYQnNzVGFiLkJzc0VudHJ5W0luZGV4XTsKKwkJTGVuZ3RoID0gMDsKKworCQkvLyAyLiBGaWxsIE1lYXN1cmVtZW50IHJlcG9ydCBmaWVsZHMKKwkJcFJlcG9ydCAgICAgICAgID0gKFBNRUFTVVJFTUVOVF9SRVBPUlRfRUxFTUVOVCkgcERlc3Q7CisJCXBSZXBvcnQtPkVpZCAgICA9IElFX01FQVNVUkVNRU5UX1JFUE9SVDsKKwkJcFJlcG9ydC0+TGVuZ3RoID0gMDsKKwkJcFJlcG9ydC0+VG9rZW4gID0gcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W1JlcUlkeF0uUmVxRWxlbS5Ub2tlbjsKKwkJcFJlcG9ydC0+TW9kZSAgID0gcEFkLT5TdGFDZmcuTWVhc3VyZW1lbnRSZXF1ZXN0W1JlcUlkeF0uUmVxRWxlbS5Nb2RlOworCQlwUmVwb3J0LT5UeXBlICAgPSBNU1JOX1RZUEVfQkVBQ09OX1JFUTsKKwkJTGVuZ3RoICAgICAgICAgID0gc2l6ZW9mKE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKTsKKwkJcERlc3QgICAgICAgICAgKz0gc2l6ZW9mKE1FQVNVUkVNRU5UX1JFUE9SVF9FTEVNRU5UKTsKKworCQkvLyAzLiBTdGFydCB0aGUgYmVhY29uIHJlcG9ydCBmb3JtYXQKKwkJcEJlYWNvblJlcG9ydCA9IChQQkVBQ09OX1JFUE9SVCkgcERlc3Q7CisJCXBEZXN0ICAgICAgICArPSBzaXplb2YoQkVBQ09OX1JFUE9SVCk7CisJCUxlbmd0aCAgICAgICArPSBzaXplb2YoQkVBQ09OX1JFUE9SVCk7CisKKwkJLy8gNC4gQ29weSBDaGFubmVsIG51bWJlcgorCQlwQmVhY29uUmVwb3J0LT5DaGFubmVsICAgICAgICA9IHBCc3MtPkNoYW5uZWw7CisJCXBCZWFjb25SZXBvcnQtPlNwYXJlICAgICAgICAgID0gMDsKKwkJcEJlYWNvblJlcG9ydC0+RHVyYXRpb24gICAgICAgPSBwQWQtPlN0YUNmZy5NZWFzdXJlbWVudFJlcXVlc3RbUmVxSWR4XS5NZWFzdXJlbWVudC5EdXJhdGlvbjsKKwkJcEJlYWNvblJlcG9ydC0+UGh5VHlwZSAgICAgICAgPSAoKHBCc3MtPlN1cFJhdGVMZW4rcEJzcy0+RXh0UmF0ZUxlbiA+IDQpID8gUEhZX0VSUCA6IFBIWV9EU1MpOworCQlwQmVhY29uUmVwb3J0LT5SeFBvd2VyICAgICAgICA9IHBCc3MtPlJzc2kgLSBwQWQtPkJicFJzc2lUb0RibURlbHRhOworCQlwQmVhY29uUmVwb3J0LT5CZWFjb25JbnRlcnZhbCA9IHBCc3MtPkJlYWNvblBlcmlvZDsKKwkJcEJlYWNvblJlcG9ydC0+Q2FwYWJpbGl0eUluZm8gPSBwQnNzLT5DYXBhYmlsaXR5SW5mbzsKKwkJQ09QWV9NQUNfQUREUihwQmVhY29uUmVwb3J0LT5CU1NJRCwgcEJzcy0+QnNzaWQpOworCQlOZGlzTW92ZU1lbW9yeShwQmVhY29uUmVwb3J0LT5QYXJlbnRUU0YsIHBCc3MtPlBUU0YsIDQpOworCQlOZGlzTW92ZU1lbW9yeShwQmVhY29uUmVwb3J0LT5UYXJnZXRUU0YsIHBCc3MtPlRUU0YsIDgpOworCisJCS8vIDUuIENyZWF0ZSBTU0lECisJCSpwRGVzdCsrID0gMHgwMDsKKwkJKnBEZXN0KysgPSBwQnNzLT5Tc2lkTGVuOworCQlOZGlzTW92ZU1lbW9yeShwRGVzdCwgcEJzcy0+U3NpZCwgcEJzcy0+U3NpZExlbik7CisJCXBEZXN0ICArPSBwQnNzLT5Tc2lkTGVuOworCQlMZW5ndGggKz0gKDIgKyBwQnNzLT5Tc2lkTGVuKTsKKworCQkvLyA2LiBDcmVhdGUgU3VwcG9ydFJhdGVzCisJCSpwRGVzdCsrID0gMHgwMTsKKwkJKnBEZXN0KysgPSBwQnNzLT5TdXBSYXRlTGVuOworCQlOZGlzTW92ZU1lbW9yeShwRGVzdCwgcEJzcy0+U3VwUmF0ZSwgcEJzcy0+U3VwUmF0ZUxlbik7CisJCXBEZXN0ICArPSBwQnNzLT5TdXBSYXRlTGVuOworCQlMZW5ndGggKz0gKDIgKyBwQnNzLT5TdXBSYXRlTGVuKTsKKworCQkvLyA3LiBEUyBQYXJhbWV0ZXIKKwkJKnBEZXN0KysgPSAweDAzOworCQkqcERlc3QrKyA9IDE7CisJCSpwRGVzdCsrID0gcEJzcy0+Q2hhbm5lbDsKKwkJTGVuZ3RoICArPSAzOworCisJCS8vIDguIElCU1MgcGFyYW1ldGVyIGlmIHByZXNlbnRzCisJCWlmIChwQnNzLT5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJeworCQkJKnBEZXN0KysgPSAweDA2OworCQkJKnBEZXN0KysgPSAyOworCQkJKihQVVNIT1JUKSBwRGVzdCA9IHBCc3MtPkF0aW1XaW47CisJCQlwRGVzdCAgICs9IDI7CisJCQlMZW5ndGggICs9IDQ7CisJCX0KKworCQkvLyA5LiBVcGRhdGUgbGVuZ3RoIGZpZWxkLCBub3QgaW5jbHVkZSBFSUQgYW5kIGxlbmd0aAorCQlwUmVwb3J0LT5MZW5ndGggPSBMZW5ndGggLSA0OworCisJCS8vIDEwLiBVcGRhdGUgdG90YWwgZnJhbWUgc2l6ZQorCQlwQWQtPlN0YUNmZy5GcmFtZVJlcG9ydExlbiArPSBMZW5ndGg7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXNzb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL2Fzc29jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzM2E4OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL2Fzc29jLmMKQEAgLTAsMCArMSwyMDYwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWFzc29jLmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKb2huCQkyMDA0LTktMwkJcG9ydGluZyBmcm9tIFJUMjUwMAorKi8KKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworVUNIQVIJQ2lwaGVyV3BhVGVtcGxhdGVbXSA9IHsKKwkJMHhkZCwgCQkJCQkvLyBXUEEgSUUKKwkJMHgxNiwJCQkJCS8vIExlbmd0aAorCQkweDAwLCAweDUwLCAweGYyLCAweDAxLAkvLyBvdWkKKwkJMHgwMSwgMHgwMCwJCQkJLy8gVmVyc2lvbgorCQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvLyBNdWx0aWNhc3QKKwkJMHgwMSwgMHgwMCwJCQkJLy8gTnVtYmVyIG9mIHVuaWNhc3QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMiwJLy8gdW5pY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEJLy8gYXV0aGVudGljYXRpb24KKwkJfTsKKworVUNIQVIJQ2lwaGVyV3BhMlRlbXBsYXRlW10gPSB7CisJCTB4MzAsCQkJCQkvLyBSU04gSUUKKwkJMHgxNCwJCQkJCS8vIExlbmd0aAorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4MGYsIDB4YWMsIDB4MDIsCS8vIGdyb3VwIGNpcGhlciwgVEtJUAorCQkweDAxLCAweDAwLAkJCQkvLyBudW1iZXIgb2YgcGFpcndpc2UKKwkJMHgwMCwgMHgwZiwgMHhhYywgMHgwMiwJLy8gdW5pY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kCisJCTB4MDAsIDB4MGYsIDB4YWMsIDB4MDIsCS8vIGF1dGhlbnRpY2F0aW9uCisJCTB4MDAsIDB4MDAsCQkJCS8vIFJTTiBjYXBhYmlsaXR5CisJCX07CisKK1VDSEFSCUNjeDJJZUluZm9bXSA9IHsgMHgwMCwgMHg0MCwgMHg5NiwgMHgwMywgMHgwMn07CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJYXNzb2NpYXRpb24gc3RhdGUgbWFjaGluZSBpbml0LCBpbmNsdWRpbmcgc3RhdGUgdHJhbnNpdGlvbiBhbmQgdGltZXIgaW5pdAorCVBhcmFtZXRlcnM6CisJCVMgLSBwb2ludGVyIHRvIHRoZSBhc3NvY2lhdGlvbiBzdGF0ZSBtYWNoaW5lCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBc3NvY1N0YXRlTWFjaGluZUluaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gIFNUQVRFX01BQ0hJTkUgKlMsCisJT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKQoreworCVN0YXRlTWFjaGluZUluaXQoUywgVHJhbnMsIE1BWF9BU1NPQ19TVEFURSwgTUFYX0FTU09DX01TRywgKFNUQVRFX01BQ0hJTkVfRlVOQylEcm9wLCBBU1NPQ19JRExFLCBBU1NPQ19NQUNISU5FX0JBU0UpOworCisJLy8gZmlyc3QgY29sdW1uCisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX0lETEUsIE1UMl9NTE1FX0FTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lQXNzb2NSZXFBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19JRExFLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lUmVhc3NvY1JlcUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX0lETEUsIE1UMl9NTE1FX0RJU0FTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lRGlzYXNzb2NSZXFBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19JRExFLCBNVDJfUEVFUl9ESVNBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckRpc2Fzc29jQWN0aW9uKTsKKworCS8vIHNlY29uZCBjb2x1bW4KKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfV0FJVF9SU1AsIE1UMl9NTE1FX0FTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuQXNzb2MpOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfUkVBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlblJlYXNzb2MpOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfRElTQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5EaXNhc3NvY2lhdGUpOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19XQUlUX1JTUCwgTVQyX1BFRVJfRElTQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJEaXNhc3NvY0FjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIEFTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9BU1NPQ19SU1AsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckFzc29jUnNwQWN0aW9uKTsKKwkvLworCS8vIFBhdGNoIDNDb20gQVAgTU9kZTozQ1JXRTQ1NEc3MgorCS8vIFdlIHNlbmQgQXNzb2MgcmVxdWVzdCBmcmFtZSB0byB0aGlzIEFQLCBpdCBhbHdheXMgc2VuZCBSZWFzc29jIFJzcCBub3QgQXNzb2NpYXRlIFJzcC4KKwkvLworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBBU1NPQ19XQUlUX1JTUCwgTVQyX1BFRVJfUkVBU1NPQ19SU1AsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckFzc29jUnNwQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgQVNTT0NfV0FJVF9SU1AsIE1UMl9BU1NPQ19USU1FT1VULCAoU1RBVEVfTUFDSElORV9GVU5DKUFzc29jVGltZW91dEFjdGlvbik7CisKKwkvLyB0aGlyZCBjb2x1bW4KKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgUkVBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5Bc3NvYyk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIFJFQVNTT0NfV0FJVF9SU1AsIE1UMl9NTE1FX1JFQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5SZWFzc29jKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgUkVBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfRElTQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5EaXNhc3NvY2lhdGUpOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBSRUFTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9ESVNBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckRpc2Fzc29jQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgUkVBU1NPQ19XQUlUX1JTUCwgTVQyX1BFRVJfUkVBU1NPQ19SU1AsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlclJlYXNzb2NSc3BBY3Rpb24pOworCS8vCisJLy8gUGF0Y2gsIEFQIGRvZXNuJ3Qgc2VuZCBSZWFzc29jaWF0ZSBSc3AgZnJhbWUgdG8gU3RhdGlvbi4KKwkvLworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBSRUFTU09DX1dBSVRfUlNQLCBNVDJfUEVFUl9BU1NPQ19SU1AsIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlclJlYXNzb2NSc3BBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBSRUFTU09DX1dBSVRfUlNQLCBNVDJfUkVBU1NPQ19USU1FT1VULCAoU1RBVEVfTUFDSElORV9GVU5DKVJlYXNzb2NUaW1lb3V0QWN0aW9uKTsKKworCS8vIGZvdXJ0aCBjb2x1bW4KKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oUywgRElTQVNTT0NfV0FJVF9SU1AsIE1UMl9NTE1FX0FTU09DX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuQXNzb2MpOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBESVNBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfUkVBU1NPQ19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlblJlYXNzb2MpOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBESVNBU1NPQ19XQUlUX1JTUCwgTVQyX01MTUVfRElTQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5EaXNhc3NvY2lhdGUpOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBESVNBU1NPQ19XQUlUX1JTUCwgTVQyX1BFRVJfRElTQVNTT0NfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJEaXNhc3NvY0FjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFMsIERJU0FTU09DX1dBSVRfUlNQLCBNVDJfRElTQVNTT0NfVElNRU9VVCwgKFNUQVRFX01BQ0hJTkVfRlVOQylEaXNhc3NvY1RpbWVvdXRBY3Rpb24pOworCisJLy8gaW5pdGlhbGl6ZSB0aGUgdGltZXIKKwlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+TWxtZUF1eC5Bc3NvY1RpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oQXNzb2NUaW1lb3V0KSwgcEFkLCBGQUxTRSk7CisJUlRNUEluaXRUaW1lcihwQWQsICZwQWQtPk1sbWVBdXguUmVhc3NvY1RpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oUmVhc3NvY1RpbWVvdXQpLCBwQWQsIEZBTFNFKTsKKwlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+TWxtZUF1eC5EaXNhc3NvY1RpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oRGlzYXNzb2NUaW1lb3V0KSwgcEFkLCBGQUxTRSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQXNzb2NpYXRpb24gdGltZW91dCBwcm9jZWR1cmUuIEFmdGVyIGFzc29jaWF0aW9uIHRpbWVvdXQsIHRoaXMgZnVuY3Rpb24KKwkJd2lsbCBiZSBjYWxsZWQgYW5kIGl0IHdpbGwgcHV0IGEgbWVzc2FnZSBpbnRvIHRoZSBNTE1FIHF1ZXVlCisJUGFyYW1ldGVyczoKKwkJU3RhbmRhcmQgdGltZXIgcGFyYW1ldGVycworCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEFzc29jVGltZW91dChJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJCQkJIElOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwkJCQkgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCQkJCSBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisJUlRNUF9BREFQVEVSICpwQWQgPSAoUlRNUF9BREFQVEVSICopRnVuY3Rpb25Db250ZXh0OworCisJLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuCisJLy8gVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0CisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKKwkJcmV0dXJuOworCisJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfQVNTT0NfVElNRU9VVCwgMCwgTlVMTCk7CisJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCVJlYXNzb2NpYXRpb24gdGltZW91dCBwcm9jZWR1cmUuIEFmdGVyIHJlYXNzb2NpYXRpb24gdGltZW91dCwgdGhpcworCQlmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhbmQgcHV0IGEgbWVzc2FnZSBpbnRvIHRoZSBNTE1FIHF1ZXVlCisJUGFyYW1ldGVyczoKKwkJU3RhbmRhcmQgdGltZXIgcGFyYW1ldGVycworCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFJlYXNzb2NUaW1lb3V0KElOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwkJCQkJSU4gUFZPSUQgRnVuY3Rpb25Db250ZXh0LAorCQkJCQlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJCQkJCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKwlSVE1QX0FEQVBURVIgKnBBZCA9IChSVE1QX0FEQVBURVIgKilGdW5jdGlvbkNvbnRleHQ7CisKKwkvLyBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4KKwkvLyBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCQlyZXR1cm47CisKKwlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFTU09DX1RJTUVPVVQsIDAsIE5VTEwpOworCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlEaXNhc3NvY2lhdGlvbiB0aW1lb3V0IHByb2NlZHVyZS4gQWZ0ZXIgZGlzYXNzb2NpYXRpb24gdGltZW91dCwgdGhpcworCQlmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhbmQgcHV0IGEgbWVzc2FnZSBpbnRvIHRoZSBNTE1FIHF1ZXVlCisJUGFyYW1ldGVyczoKKwkJU3RhbmRhcmQgdGltZXIgcGFyYW1ldGVycworCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIERpc2Fzc29jVGltZW91dChJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzEsCisJCQkJCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwkJCQkJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCQkJCQlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzMpCit7CisJUlRNUF9BREFQVEVSICpwQWQgPSAoUlRNUF9BREFQVEVSICopRnVuY3Rpb25Db250ZXh0OworCisJLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuCisJLy8gVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0CisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTIHwgZlJUTVBfQURBUFRFUl9OSUNfTk9UX0VYSVNUKSkKKwkJcmV0dXJuOworCisJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfRElTQVNTT0NfVElNRU9VVCwgMCwgTlVMTCk7CisJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCW1sbWUgYXNzb2MgcmVxIGhhbmRsaW5nIHByb2NlZHVyZQorCVBhcmFtZXRlcnM6CisJCUFkYXB0ZXIgLSBBZGFwdGVyIHBvaW50ZXIKKwkJRWxlbSAtIE1MTUUgUXVldWUgRWxlbWVudAorCVByZToKKwkJdGhlIHN0YXRpb24gaGFzIGJlZW4gYXV0aGVudGljYXRlZCBhbmQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gdGhlIGNvbmZpZworCQkJLSMgU1NJRAorCQkJLSMgc3VwcG9ydGVkIHJhdGVzIGFuZCB0aGVpciBsZW5ndGgKKwkJCS0jIGxpc3RlbiBpbnRlcnZhbCAoQWRhcHRlci0+U3RhQ2ZnLmRlZmF1bHRfbGlzdGVuX2NvdW50KQorCQkJLSMgVHJhbnNtaXQgcG93ZXIgIChBZGFwdGVyLT5TdGFDZmcudHhfcG93ZXIpCisJUG9zdCAgOgorCQktIyBBbiBhc3NvY2lhdGlvbiByZXF1ZXN0IGZyYW1lIGlzIGdlbmVyYXRlZCBhbmQgc2VudCB0byB0aGUgYWlyCisJCS0jIEFzc29jaWF0aW9uIHRpbWVyIHN0YXJ0cworCQktIyBBc3NvY2lhdGlvbiBzdGF0ZSAtPiBBU1NPQ19XQUlUX1JTUAorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVBc3NvY1JlcUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIJCQlBcEFkZHJbNl07CisJSEVBREVSXzgwMl8xMQlBc3NvY0hkcjsKKwlVQ0hBUgkJCUNjeDJMZW4gPSA1OworCVVDSEFSCQkJV21lSWVbOV0gPSB7SUVfVkVORE9SX1NQRUNJRklDLCAweDA3LCAweDAwLCAweDUwLCAweGYyLCAweDAyLCAweDAwLCAweDAxLCAweDAwfTsKKwlVU0hPUlQJCQlMaXN0ZW5JbnR2OworCVVMT05HCQkJVGltZW91dDsKKwlVU0hPUlQJCQlDYXBhYmlsaXR5SW5mbzsKKwlCT09MRUFOCQkJVGltZXJDYW5jZWxsZWQ7CisJUFVDSEFSCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisJTkRJU19TVEFUVVMJCU5TdGF0dXM7CisJVUxPTkcJCQlGcmFtZUxlbiA9IDA7CisJVUxPTkcJCQl0bXA7CisJVVNIT1JUCQkJVmFySWVzT2Zmc2V0OworCVVDSEFSCQkJQ2tpcEZsYWc7CisJVUNIQVIJCQlDa2lwTmVnb3RpYXRpb25CdWZmZXJbQ0tJUF9ORUdPVElBVElPTl9MRU5HVEhdOworCVVDSEFSCQkJQWlyb25ldENraXBJZSA9IElFX0FJUk9ORVRfQ0tJUDsKKwlVQ0hBUgkJCUFpcm9uZXRDa2lwTGVuID0gQ0tJUF9ORUdPVElBVElPTl9MRU5HVEg7CisJVUNIQVIJCQlBaXJvbmV0SVBBZGRyZXNzSUUgPSBJRV9BSVJPTkVUX0lQQUREUkVTUzsKKwlVQ0hBUgkJCUFpcm9uZXRJUEFkZHJlc3NMZW4gPSBBSVJPTkVUX0lQQUREUkVTU19MRU5HVEg7CisJVUNIQVIJCQlBaXJvbmV0SVBBZGRyZXNzQnVmZmVyW0FJUk9ORVRfSVBBRERSRVNTX0xFTkdUSF0gPSB7MHgwMCwgMHg0MCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMH07CisJVVNIT1JUCQkJU3RhdHVzOworCisJLy8gQmxvY2sgYWxsIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZHVybmluZyBXUEEgYmxvY2sgcGVyaW9kCisJaWYgKHBBZC0+U3RhQ2ZnLmJCbG9ja0Fzc29jID09IFRSVUUpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIEJsb2NrIEFzc29jIHJlcXVlc3QgZHVybmluZyBXUEEgYmxvY2sgcGVyaW9kIVxuIikpOworCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJCVN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7CisJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKKwl9CisJLy8gY2hlY2sgc2FuaXR5IGZpcnN0CisJZWxzZSBpZiAoTWxtZUFzc29jUmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIEFwQWRkciwgJkNhcGFiaWxpdHlJbmZvLCAmVGltZW91dCwgJkxpc3RlbkludHYpKQorCXsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQXNzb2NUaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwkJQ09QWV9NQUNfQUREUihwQWQtPk1sbWVBdXguQnNzaWQsIEFwQWRkcik7CisKKwkJLy8gR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwkJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsKKwkJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBU1NPQyAtIE1sbWVBc3NvY1JlcUFjdGlvbigpIGFsbG9jYXRlIG1lbW9yeSBmYWlsZWQgXG4iKSk7CisJCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJCQlTdGF0dXMgPSBNTE1FX0ZBSUxfTk9fUkVTT1VSQ0U7CisJCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7CisJCQlyZXR1cm47CisJCX0KKworCQkvLyBBZGQgYnkgSmFtZXMgMDMvMDYvMjcKKwkJcEFkLT5TdGFDZmcuQXNzb2NJbmZvLkxlbmd0aCA9IHNpemVvZihORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTik7CisJCS8vIEFzc29jaWF0aW9uIGRvbid0IG5lZWQgdG8gcmVwb3J0IE1BQyBhZGRyZXNzCisJCXBBZC0+U3RhQ2ZnLkFzc29jSW5mby5BdmFpbGFibGVSZXF1ZXN0Rml4ZWRJRXMgPQorCQkJTkRJU184MDJfMTFfQUlfUkVRRklfQ0FQQUJJTElUSUVTIHwgTkRJU184MDJfMTFfQUlfUkVRRklfTElTVEVOSU5URVJWQUw7CisJCXBBZC0+U3RhQ2ZnLkFzc29jSW5mby5SZXF1ZXN0Rml4ZWRJRXMuQ2FwYWJpbGl0aWVzID0gQ2FwYWJpbGl0eUluZm87CisJCXBBZC0+U3RhQ2ZnLkFzc29jSW5mby5SZXF1ZXN0Rml4ZWRJRXMuTGlzdGVuSW50ZXJ2YWwgPSBMaXN0ZW5JbnR2OworCQkvLyBPbmx5IHJlYXNzb2NpYXRlIG5lZWQgdGhpcworCQkvL0NPUFlfTUFDX0FERFIocEFkLT5TdGFDZmcuQXNzb2NJbmZvLlJlcXVlc3RGaXhlZElFcy5DdXJyZW50QVBBZGRyZXNzLCBBcEFkZHIpOworCQlwQWQtPlN0YUNmZy5Bc3NvY0luZm8uT2Zmc2V0UmVxdWVzdElFcyA9IHNpemVvZihORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTik7CisKKyAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzLCBNQVhfVklFX0xFTik7CisJCS8vIEZpcnN0IGFkZCBTU0lECisJCVZhckllc09mZnNldCA9IDA7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgJlNzaWRJZSwgMSk7CisJCVZhckllc09mZnNldCArPSAxOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsICZwQWQtPk1sbWVBdXguU3NpZExlbiwgMSk7CisJCVZhckllc09mZnNldCArPSAxOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbik7CisJCVZhckllc09mZnNldCArPSBwQWQtPk1sbWVBdXguU3NpZExlbjsKKworCQkvLyBTZWNvbmQgYWRkIFN1cHBvcnRlZCByYXRlcworCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsICZTdXBSYXRlSWUsIDEpOworCQlWYXJJZXNPZmZzZXQgKz0gMTsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCAmcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sIDEpOworCQlWYXJJZXNPZmZzZXQgKz0gMTsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCBwQWQtPk1sbWVBdXguU3VwUmF0ZSwgcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4pOworCQlWYXJJZXNPZmZzZXQgKz0gcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW47CisJCS8vIEVuZCBBZGQgYnkgSmFtZXMKKworICAgICAgICBpZiAoKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkgJiYKKyAgICAgICAgICAgIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSBUUlVFKSkKKyAgICAgICAgICAgIENhcGFiaWxpdHlJbmZvIHw9IDB4MDEwMDsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIFNlbmQgQVNTT0MgcmVxdWVzdC4uLlxuIikpOworCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkFzc29jSGRyLCBTVUJUWVBFX0FTU09DX1JFUSwgMCwgQXBBZGRyLCBBcEFkZHIpOworCisJCS8vIEJ1aWxkIGJhc2ljIGZyYW1lIGZpcnN0CisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsCQkJCSZGcmFtZUxlbiwKKwkJCQkJCSAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLAkmQXNzb2NIZHIsCisJCQkJCQkgIDIsCQkJCQkJJkNhcGFiaWxpdHlJbmZvLAorCQkJCQkJICAyLAkJCQkJCSZMaXN0ZW5JbnR2LAorCQkJCQkJICAxLAkJCQkJCSZTc2lkSWUsCisJCQkJCQkgIDEsCQkJCQkJJnBBZC0+TWxtZUF1eC5Tc2lkTGVuLAorCQkJCQkJICBwQWQtPk1sbWVBdXguU3NpZExlbiwgCXBBZC0+TWxtZUF1eC5Tc2lkLAorCQkJCQkJICAxLAkJCQkJCSZTdXBSYXRlSWUsCisJCQkJCQkgIDEsCQkJCQkJJnBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLAorCQkJCQkJICBwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwgIHBBZC0+TWxtZUF1eC5TdXBSYXRlLAorCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisKKwkJaWYgKHBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuICE9IDApCisJCXsKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgJnRtcCwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgJkV4dFJhdGVJZSwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuLAorCQkJCQkJCSAgcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4sICBwQWQtPk1sbWVBdXguRXh0UmF0ZSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCUZyYW1lTGVuICs9IHRtcDsKKwkJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCS8vIEhUCisJCWlmICgocEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiA+IDApICYmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCQl7CisJCQlVTE9ORyBUbXBMZW47CisJCQlVQ0hBUiBIdExlbjsKKwkJCVVDSEFSIEJST0FEQ09NWzRdID0gezB4MCwgMHg5MCwgMHg0YywgMHgzM307CisJCQlpZiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iUHJlTkh0ID09IFRSVUUpCisJCQl7CisJCQkJSHRMZW4gPSBTSVpFX0hUX0NBUF9JRSArIDQ7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICAgICZUbXBMZW4sCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJldwYUllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdExlbiwKKwkJCQkJCQkgIDQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQlJPQURDT01bMF0sCisJCQkJCQkJIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4sICAgICAgICAgICZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJfQorCQkJZWxzZQorCQkJeworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJICAgICAgICBIVF9DQVBBQklMSVRZX0lFIEh0Q2FwYWJpbGl0eVRtcDsKKyNlbmRpZgorCisjaWZuZGVmIFJUX0JJR19FTkRJQU4KKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICAgJlRtcExlbiwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRDYXBJZSwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwKKwkJCQkJCQkgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwgICAgICAgICAgJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisjZWxzZQorICAgICAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KCZIdENhcGFiaWxpdHlUbXAsIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkoJkh0Q2FwYWJpbGl0eVRtcCwgJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksIHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4pOworICAgICAgICAJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkh0Q2FwSW5mbykpOworICAgICAgICAJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuRXh0SHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkV4dEh0Q2FwSW5mbykpOworCisgICAgICAgIAkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICZUbXBMZW4sCisgICAgICAgIAkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICZIdENhcEllLAorICAgICAgICAJCQkJCQkJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwKKyAgICAgICAgCQkJCQkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4sJkh0Q2FwYWJpbGl0eVRtcCwKKyAgICAgICAgCQkJCQkJCUVORF9PRl9BUkdTKTsKKyNlbmRpZgorCQkJfQorCQkJRnJhbWVMZW4gKz0gVG1wTGVuOworCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJLy8gYWRkIFJhbGluayBwcm9wcmlldGFyeSBJRSB0byBpbmZvcm0gQVAgdGhpcyBTVEEgaXMgZ29pbmcgdG8gdXNlIEFHR1JFR0FUSU9OIG9yIFBJR0dZLUJBQ0srQUdHUkVHQVRJT04KKwkJLy8gQ2FzZSBJOiAoQWdncmVnYXRpb24gKyBQaWdneS1CYWNrKQorCQkvLyAxLiB1c2VyIGVuYWJsZSBhZ2dyZWdhdGlvbiwgQU5ECisJCS8vIDIuIE1hYyBzdXBwb3J0IHBpZ2d5LWJhY2sKKwkJLy8gMy4gQVAgYW5ub3VjZXMgaXQncyBQSUdHWS1CQUNLK0FHR1JFR0FUSU9OLWNhcGFibGUgaW4gQkVBQ09OCisJCS8vIENhc2UgSUk6IChBZ2dyZWdhdGlvbikKKwkJLy8gMS4gdXNlciBlbmFibGUgYWdncmVnYXRpb24sIEFORAorCQkvLyAyLiBBUCBhbm5vdWNlcyBpdCdzIEFHR1JFR0FUSU9OLWNhcGFibGUgaW4gQkVBQ09OCisJCWlmIChwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlKQorCQl7CisJCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJQaWdneUJhY2tDYXBhYmxlKSAmJiAoKHBBZC0+TWxtZUF1eC5BUFJhbGlua0llICYgMHgwMDAwMDAwMykgPT0gMykpCisJCQl7CisJCQkJVUxPTkcgVG1wTGVuOworCQkJCVVDSEFSIFJhbGlua0llWzldID0ge0lFX1ZFTkRPUl9TUEVDSUZJQywgNywgMHgwMCwgMHgwYywgMHg0MywgMHgwMywgMHgwMCwgMHgwMCwgMHgwMH07CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlcitGcmFtZUxlbiwgICAgICAgICAgICZUbXBMZW4sCisJCQkJCQkJCSAgOSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbGlua0llLAorCQkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCQlGcmFtZUxlbiArPSBUbXBMZW47CisJCQl9CisJCQllbHNlIGlmIChwQWQtPk1sbWVBdXguQVBSYWxpbmtJZSAmIDB4MDAwMDAwMDEpCisJCQl7CisJCQkJVUxPTkcgVG1wTGVuOworCQkJCVVDSEFSIFJhbGlua0llWzldID0ge0lFX1ZFTkRPUl9TUEVDSUZJQywgNywgMHgwMCwgMHgwYywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMH07CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlcitGcmFtZUxlbiwgICAgICAgICAgICZUbXBMZW4sCisJCQkJCQkJCSAgOSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbGlua0llLAorCQkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCQlGcmFtZUxlbiArPSBUbXBMZW47CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlVTE9ORyBUbXBMZW47CisJCQlVQ0hBUiBSYWxpbmtJZVs5XSA9IHtJRV9WRU5ET1JfU1BFQ0lGSUMsIDcsIDB4MDAsIDB4MGMsIDB4NDMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDB9OworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlcitGcmFtZUxlbiwJCSAmVG1wTGVuLAorCQkJCQkJCSAgOSwJCQkJCQkgUmFsaW5rSWUsCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSBUbXBMZW47CisJCX0KKworCQlpZiAocEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0uYlZhbGlkKQorCQl7CisJCQlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlICYmIHBBZC0+TWxtZUF1eC5BUEVkY2FQYXJtLmJBUFNEQ2FwYWJsZSkKKwkJCXsKKwkJCQlRQlNTX1NUQV9JTkZPX1BBUk0gUW9zSW5mbzsKKworCQkJCU5kaXNaZXJvTWVtb3J5KCZRb3NJbmZvLCBzaXplb2YoUUJTU19TVEFfSU5GT19QQVJNKSk7CisJCQkJUW9zSW5mby5VQVBTRF9BQ19CRSA9IHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQkU7CisJCQkJUW9zSW5mby5VQVBTRF9BQ19CSyA9IHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQks7CisJCQkJUW9zSW5mby5VQVBTRF9BQ19WSSA9IHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVkk7CisJCQkJUW9zSW5mby5VQVBTRF9BQ19WTyA9IHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk87CisJCQkJUW9zSW5mby5NYXhTUExlbmd0aCA9IHBBZC0+Q29tbW9uQ2ZnLk1heFNQTGVuZ3RoOworCQkJCVdtZUllWzhdIHw9ICooUFVDSEFSKSZRb3NJbmZvOworCQkJfQorCQkJZWxzZQorCQkJeworICAgICAgICAgICAgICAgIC8vIFRoZSBQYXJhbWV0ZXIgU2V0IENvdW50IGlzIHNldCB0byChpzChqCBpbiB0aGUgYXNzb2NpYXRpb24gcmVxdWVzdCBmcmFtZXMKKyAgICAgICAgICAgICAgICAvLyBXbWVJZVs4XSB8PSAocEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0uRWRjYVVwZGF0ZUNvdW50ICYgMHgwZik7CisJCQl9CisKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgJnRtcCwKKwkJCQkJCQkgIDksICAgICAgICAgICAgICAgICAgICAgICAgJldtZUllWzBdLAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCQl9CisKKwkJLy8KKwkJLy8gTGV0IFdQQSgjMjIxKSBFbGVtZW50IElEIG9uIHRoZSBlbmQgb2YgdGhpcyBhc3NvY2lhdGlvbiBmcmFtZS4KKwkJLy8gT3RoZXJ3aXNlIHNvbWUgQVAgd2lsbCBmYWlsIG9uIHBhcnNpbmcgRWxlbWVudCBJRCBhbmQgc2V0IHN0YXR1cyBmYWlsIG9uIEFzc29jIFJzcC4KKwkJLy8gRm9yIGV4YW1wbGU6IFB1dCBWZW5kb3IgU3BlY2lmaWMgSUUgb24gdGhlIGZyb250IG9mIFdQQSBJRS4KKwkJLy8gVGhpcyBoYXBwZW5zIG9uIEFQIChNb2RlbCBObzpMaW5rc3lzIFdSSzU0RykKKwkJLy8KKwkJaWYgKCgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSB8fAorICAgICAgICAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spIHx8CisgICAgICAgICAgICAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fAorICAgICAgICAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCisJCQkpCisgICAgICAgICAgICApCisJCXsKKwkJCVVDSEFSIFJTTkllID0gSUVfV1BBOworCisJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spIHx8CisgICAgICAgICAgICAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpKQorCQkJeworCQkJCVJTTkllID0gSUVfV1BBMjsKKwkJCX0KKworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZkZWYgU0lPQ1NJV0dFTklFCisJCQlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQICE9IDEpCisjZW5kaWYgLy8gU0lPQ1NJV0dFTklFIC8vCisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyAgICAgICAgICAgIAlSVE1QTWFrZVJTTklFKHBBZCwgcEFkLT5TdGFDZmcuQXV0aE1vZGUsIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cywgQlNTMCk7CisKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBXUEEgUE1LIGNhY2hlIGxpc3QKKwkJCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKQorCQkJeworCQkJICAgIElOVCAgICAgaWR4OworICAgICAgICAgICAgICAgIEJPT0xFQU4gRm91bmRQTUsgPSBGQUxTRTsKKwkJCQkvLyBTZWFyY2ggY2hjaGVkIFBNS0lELCBhcHBlbmQgaXQgaWYgZXhpc3RlZAorCQkJCWZvciAoaWR4ID0gMDsgaWR4IDwgUE1LSURfTk87IGlkeCsrKQorCQkJCXsKKwkJCQkJaWYgKE5kaXNFcXVhbE1lbW9yeShBcEFkZHIsICZwQWQtPlN0YUNmZy5TYXZlZFBNS1tpZHhdLkJTU0lELCA2KSkKKwkJCQkJeworCQkJCQkJRm91bmRQTUsgPSBUUlVFOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoRm91bmRQTUspCisJCQkJeworCQkJCQkvLyBTZXQgUE1LIG51bWJlcgorCQkJCQkqKFBVU0hPUlQpICZwQWQtPlN0YUNmZy5SU05fSUVbcEFkLT5TdGFDZmcuUlNOSUVfTGVuXSA9IDE7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5SU05fSUVbcEFkLT5TdGFDZmcuUlNOSUVfTGVuICsgMl0sICZwQWQtPlN0YUNmZy5TYXZlZFBNS1tpZHhdLlBNS0lELCAxNik7CisgICAgICAgICAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLlJTTklFX0xlbiArPSAxODsKKwkJCQl9CisJCQl9CisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmZGVmIFNJT0NTSVdHRU5JRQorCQkJaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9PSAxKQorCQkJeworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgCQkmdG1wLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAJcEFkLT5TdGFDZmcuUlNOSUVfTGVuLAkJCXBBZC0+U3RhQ2ZnLlJTTl9JRSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgCUVORF9PRl9BUkdTKTsKKwkJCX0KKwkJCWVsc2UKKyNlbmRpZgorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJCQl7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAJCSZ0bXAsCisJCQkJICAgICAgICAgICAgICAJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJTTkllLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5TdGFDZmcuUlNOSUVfTGVuLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAJcEFkLT5TdGFDZmcuUlNOSUVfTGVuLAkJCXBBZC0+U3RhQ2ZnLlJTTl9JRSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgCUVORF9PRl9BUkdTKTsKKwkJCX0KKworCQkJRnJhbWVMZW4gKz0gdG1wOworCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZmRlZiBTSU9DU0lXR0VOSUUKKwkJCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gMSkKKyNlbmRpZgorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJCQl7CisJICAgICAgICAgICAgLy8gQXBwZW5kIFZhcmlhYmxlIElFCisJICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCAmUlNOSWUsIDEpOworCSAgICAgICAgICAgIFZhckllc09mZnNldCArPSAxOworCSAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgJnBBZC0+U3RhQ2ZnLlJTTklFX0xlbiwgMSk7CisJICAgICAgICAgICAgVmFySWVzT2Zmc2V0ICs9IDE7CisJCQl9CisJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXFWYXJJRXMgKyBWYXJJZXNPZmZzZXQsIHBBZC0+U3RhQ2ZnLlJTTl9JRSwgcEFkLT5TdGFDZmcuUlNOSUVfTGVuKTsKKwkJCVZhckllc09mZnNldCArPSBwQWQtPlN0YUNmZy5SU05JRV9MZW47CisKKwkJCS8vIFNldCBWYXJpYWJsZSBJRXMgTGVuZ3RoCisJCQlwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbiA9IFZhckllc09mZnNldDsKKwkJfQorCisJCS8vIFdlIGhhdmUgdXBkYXRlIHRoYXQgYXQgUGVlckJlYWNvbkF0Sm9pblJlcXVlc3QoKQorCQlDa2lwRmxhZyA9IHBBZC0+U3RhQ2ZnLkNraXBGbGFnOworCQlpZiAoQ2tpcEZsYWcgIT0gMCkKKwkJeworCQkJTmRpc1plcm9NZW1vcnkoQ2tpcE5lZ290aWF0aW9uQnVmZmVyLCBDS0lQX05FR09USUFUSU9OX0xFTkdUSCk7CisJCQlDa2lwTmVnb3RpYXRpb25CdWZmZXJbMl0gPSAweDY2OworCQkJLy8gTWFrZSBpdCB0cnkgS1AgJiBNSUMsIHNpbmNlIHdlIGhhdmUgdG8gZm9sbG93IHRoZSByZXN1bHQgZnJvbSBBc3NvY1JzcAorCQkJQ2tpcE5lZ290aWF0aW9uQnVmZmVyWzhdID0gMHgxODsKKwkJCUNraXBOZWdvdGlhdGlvbkJ1ZmZlcltDS0lQX05FR09USUFUSU9OX0xFTkdUSCAtIDFdID0gMHgyMjsKKwkJCUNraXBGbGFnID0gMHgxODsKKworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAJJnRtcCwKKwkJCQkJCTEsCQkJCQkJICAJCSZBaXJvbmV0Q2tpcEllLAorCQkJCQkJMSwJCQkJCQkgIAkJJkFpcm9uZXRDa2lwTGVuLAorCQkJCQkJQWlyb25ldENraXBMZW4sIAkJICAJCUNraXBOZWdvdGlhdGlvbkJ1ZmZlciwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKwkJCUZyYW1lTGVuICs9IHRtcDsKKwkJfQorCisJCS8vIEFkZCBDQ1ggdjIgcmVxdWVzdCBpZiBDQ1gyIGFkbWluIHN0YXRlIGlzIG9uCisJCWlmIChwQWQtPlN0YUNmZy5DQ1hDb250cm9sLmZpZWxkLkVuYWJsZSA9PSAxKQorCQl7CisKKwkJCS8vCisJCQkvLyBBZGQgQWlyb25ldElQQWRkcmVzc0lFIGZvciBDaXNjbyBDQ1ggMi5YCisJCQkvLyBBZGQgQ0NYIFZlcnNpb24KKwkJCS8vCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICZ0bXAsCisJCQkJCQkxLAkJCQkJCQkmQWlyb25ldElQQWRkcmVzc0lFLAorCQkJCQkJMSwJCQkJCQkJJkFpcm9uZXRJUEFkZHJlc3NMZW4sCisJCQkJCQlBaXJvbmV0SVBBZGRyZXNzTGVuLAkJQWlyb25ldElQQWRkcmVzc0J1ZmZlciwKKwkJCQkJCTEsCQkJCQkJCSZDY3gySWUsCisJCQkJCQkxLAkJCQkJCQkmQ2N4MkxlbiwKKwkJCQkJCUNjeDJMZW4sCQkJCSAgICBDY3gySWVJbmZvLAorCQkJCQkJRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCisJCQkvLworCQkJLy8gQWRkIENpcGhlclN1aXRlIENDS00gb3IgTGVhcFRraXAgaWYgc2V0dGluZy4KKwkJCS8vCisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQlpZiAoTEVBUF9DQ0tNX09OKHBBZCkpCisJCQl7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAkmdG1wLAorCQkJCQkJQ2lwaGVyU3VpdGVDaXNjb0NDS01MZW4sCQlDaXBoZXJTdWl0ZUNpc2NvQ0NLTSwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKwkJCQlGcmFtZUxlbiArPSB0bXA7CisKKwkJCQkvLyBUaGlyZCBhZGQgUlNOCisJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVxVmFySUVzICsgVmFySWVzT2Zmc2V0LCBDaXBoZXJTdWl0ZUNpc2NvQ0NLTSwgQ2lwaGVyU3VpdGVDaXNjb0NDS01MZW4pOyAvL1NhdmUgQ2lwaGVyU3VpdGUKKwkJCQlWYXJJZXNPZmZzZXQgKz0gQ2lwaGVyU3VpdGVDaXNjb0NDS01MZW47CisJCQl9CisJCQllbHNlIGlmICgocEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID09IENJU0NPX0F1dGhNb2RlTEVBUCkgJiYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSkKKwkJCXsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICZ0bXAsCisJCQkJCQlDaXBoZXJTdWl0ZUNDWFRraXBMZW4sCSAgICBDaXBoZXJTdWl0ZUNDWFRraXAsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisJCQkJRnJhbWVMZW4gKz0gdG1wOworCisJCQkJLy8gVGhpcmQgYWRkIFJTTgorCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcVZhcklFcyArIFZhckllc09mZnNldCwgQ2lwaGVyU3VpdGVDQ1hUa2lwLCBDaXBoZXJTdWl0ZUNDWFRraXBMZW4pOworCQkJCVZhckllc09mZnNldCArPSBDaXBoZXJTdWl0ZUNDWFRraXBMZW47CisJCQl9CisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisKKwkJCS8vIEFkZCBieSBKYW1lcyAwMy8wNi8yNworCQkJLy8gU2V0IFZhcmlhYmxlIElFcyBMZW5ndGgKKwkJCXBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuID0gVmFySWVzT2Zmc2V0OworCQkJcEFkLT5TdGFDZmcuQXNzb2NJbmZvLlJlcXVlc3RJRUxlbmd0aCA9IFZhckllc09mZnNldDsKKworCQkJLy8gT2Zmc2V0UmVzcG9uc2VJRXMgZm9sbG93IFJlcVZhcklFCisJCQlwQWQtPlN0YUNmZy5Bc3NvY0luZm8uT2Zmc2V0UmVzcG9uc2VJRXMgPSBzaXplb2YoTkRJU184MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04pICsgcEFkLT5TdGFDZmcuUmVxVmFySUVMZW47CisJCQkvLyBFbmQgQWRkIGJ5IEphbWVzCisJCX0KKworCisJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lQXV4LkFzc29jVGltZXIsIFRpbWVvdXQpOworCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX1dBSVRfUlNQOworCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFTU09DIC0gTWxtZUFzc29jUmVxQWN0aW9uKCkgc2FuaXR5IGNoZWNrIGZhaWxlZC4gQlVHISEhISEhIFxuIikpOworCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJCVN0YXR1cyA9IE1MTUVfSU5WQUxJRF9GT1JNQVQ7CisJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKKwl9CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQltbG1lIHJlYXNzb2MgcmVxIGhhbmRsaW5nIHByb2NlZHVyZQorCVBhcmFtZXRlcnM6CisJCUVsZW0gLQorCVByZToKKwkJLSMgU1NJRCAgKEFkYXB0ZXItPlN0YUNmZy5zc2lkW10pCisJCS0jIEJTU0lEIChBUCBhZGRyZXNzLCBBZGFwdGVyLT5TdGFDZmcuYnNzaWQpCisJCS0jIFN1cHBvcnRlZCByYXRlcyAoQWRhcHRlci0+U3RhQ2ZnLnN1cHBvcnRlZF9yYXRlc1tdKQorCQktIyBTdXBwb3J0ZWQgcmF0ZXMgbGVuZ3RoIChBZGFwdGVyLT5TdGFDZmcuc3VwcG9ydGVkX3JhdGVzX2xlbikKKwkJLSMgVHggcG93ZXIgKEFkYXB0ZXItPlN0YUNmZy50eF9wb3dlcikKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lUmVhc3NvY1JlcUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIJCQlBcEFkZHJbNl07CisJSEVBREVSXzgwMl8xMQlSZWFzc29jSGRyOworCVVDSEFSCQkJQ2N4MkxlbiA9IDU7CisJVUNIQVIJCQlXbWVJZVs5XSA9IHtJRV9WRU5ET1JfU1BFQ0lGSUMsIDB4MDcsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsIDB4MDAsIDB4MDEsIDB4MDB9OworCVVTSE9SVAkJCUNhcGFiaWxpdHlJbmZvLCBMaXN0ZW5JbnR2OworCVVMT05HCQkJVGltZW91dDsKKwlVTE9ORwkJCUZyYW1lTGVuID0gMDsKKwlCT09MRUFOCQkJVGltZXJDYW5jZWxsZWQ7CisJTkRJU19TVEFUVVMJCU5TdGF0dXM7CisJVUxPTkcJCQl0bXA7CisJUFVDSEFSCQkJcE91dEJ1ZmZlciA9IE5VTEw7CisvL0NDWCAyLlgKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwlVQ0hBUgkJCUNraXBGbGFnOworCVVDSEFSCQkJQ2tpcE5lZ290aWF0aW9uQnVmZmVyW0NLSVBfTkVHT1RJQVRJT05fTEVOR1RIXTsKKwlVQ0hBUgkJCUFpcm9uZXRDa2lwSWUgPSBJRV9BSVJPTkVUX0NLSVA7CisJVUNIQVIJCQlBaXJvbmV0Q2tpcExlbiA9IENLSVBfTkVHT1RJQVRJT05fTEVOR1RIOworCVVDSEFSCQkJQWlyb25ldElQQWRkcmVzc0lFID0gSUVfQUlST05FVF9JUEFERFJFU1M7CisJVUNIQVIJCQlBaXJvbmV0SVBBZGRyZXNzTGVuID0gQUlST05FVF9JUEFERFJFU1NfTEVOR1RIOworCVVDSEFSCQkJQWlyb25ldElQQWRkcmVzc0J1ZmZlcltBSVJPTkVUX0lQQUREUkVTU19MRU5HVEhdID0gezB4MDAsIDB4NDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDB9OworCVVDSEFSCQkJQWlyb25ldENDS01SZWFzc29jSUUgPSBJRV9BSVJPTkVUX0NDS01SRUFTU09DOworCVVDSEFSCQkJQWlyb25ldENDS01SZWFzc29jTGVuID0gQUlST05FVF9DQ0tNUkVBU1NPQ19MRU5HVEg7CisJVUNIQVIJCQlBaXJvbmV0Q0NLTVJlYXNzb2NCdWZmZXJbQUlST05FVF9DQ0tNUkVBU1NPQ19MRU5HVEhdOworCVVDSEFSCQkJQWlyb25ldE9VSVtdID0gezB4MDAsIDB4NDAsIDB4OTYsIDB4MDB9OworCVVDSEFSCQkJTUlDTU5bMTZdOworCVVDSEFSCQkJQ2FsY01pY0J1ZmZlcls4MF07CisJVUxPTkcJCQlDYWxjTWljQnVmZmVyTGVuID0gMDsKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKwlVU0hPUlQJCQlTdGF0dXM7CisKKwkvLyBCbG9jayBhbGwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBkdXJuaW5nIFdQQSBibG9jayBwZXJpb2QKKwlpZiAocEFkLT5TdGFDZmcuYkJsb2NrQXNzb2MgPT0gVFJVRSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gQmxvY2sgUmVBc3NvYyByZXF1ZXN0IGR1cm5pbmcgV1BBIGJsb2NrIHBlcmlvZCFcbiIpKTsKKwkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCQlTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOworCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfUkVBU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKKwl9CisJLy8gdGhlIHBhcmFtZXRlcnMgYXJlIHRoZSBzYW1lIGFzIHRoZSBhc3NvY2lhdGlvbgorCWVsc2UgaWYoTWxtZUFzc29jUmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIEFwQWRkciwgJkNhcGFiaWxpdHlJbmZvLCAmVGltZW91dCwgJkxpc3RlbkludHYpKQorCXsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguUmVhc3NvY1RpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCisJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJCWlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJBU1NPQyAtIE1sbWVSZWFzc29jUmVxQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKKwkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJCVN0YXR1cyA9IE1MTUVfRkFJTF9OT19SRVNPVVJDRTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFTU09DX0NPTkYsIDIsICZTdGF0dXMpOworCQkJcmV0dXJuOworCQl9CisKKwkJQ09QWV9NQUNfQUREUihwQWQtPk1sbWVBdXguQnNzaWQsIEFwQWRkcik7CisKKwkJLy8gbWFrZSBmcmFtZSwgdXNlIGJzc2lkIGFzIHRoZSBBUCBhZGRyZXNzPz8KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBTZW5kIFJFLUFTU09DIHJlcXVlc3QuLi5cbiIpKTsKKwkJTWd0TWFjSGVhZGVySW5pdChwQWQsICZSZWFzc29jSGRyLCBTVUJUWVBFX1JFQVNTT0NfUkVRLCAwLCBBcEFkZHIsIEFwQWRkcik7CisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkJICBzaXplb2YoSEVBREVSXzgwMl8xMSksICAgICZSZWFzc29jSGRyLAorCQkJCQkJICAyLCAgICAgICAgICAgICAgICAgICAgICAgICZDYXBhYmlsaXR5SW5mbywKKwkJCQkJCSAgMiwgICAgICAgICAgICAgICAgICAgICAgICAmTGlzdGVuSW50diwKKwkJCQkJCSAgTUFDX0FERFJfTEVOLCAgICAgICAgICAgICBBcEFkZHIsCisJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgJlNzaWRJZSwKKwkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5NbG1lQXV4LlNzaWRMZW4sCisJCQkJCQkgIHBBZC0+TWxtZUF1eC5Tc2lkTGVuLCAgICAgcEFkLT5NbG1lQXV4LlNzaWQsCisJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgJlN1cFJhdGVJZSwKKwkJCQkJCSAgMSwJCQkJCQkmcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sCisJCQkJCQkgIHBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLCAgcEFkLT5NbG1lQXV4LlN1cFJhdGUsCisJCQkJCQkgIEVORF9PRl9BUkdTKTsKKworCQlpZiAocEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gIT0gMCkKKwkJeworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgJnRtcCwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZFeHRSYXRlSWUsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4sCisJCQkJCQkJICBwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiwJICAgIHBBZC0+TWxtZUF1eC5FeHRSYXRlLAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCQl9CisKKwkJaWYgKHBBZC0+TWxtZUF1eC5BUEVkY2FQYXJtLmJWYWxpZCkKKwkJeworCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSAmJiBwQWQtPk1sbWVBdXguQVBFZGNhUGFybS5iQVBTRENhcGFibGUpCisJCQl7CisJCQkJUUJTU19TVEFfSU5GT19QQVJNIFFvc0luZm87CisKKwkJCQlOZGlzWmVyb01lbW9yeSgmUW9zSW5mbywgc2l6ZW9mKFFCU1NfU1RBX0lORk9fUEFSTSkpOworCQkJCVFvc0luZm8uVUFQU0RfQUNfQkUgPSBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JFOworCQkJCVFvc0luZm8uVUFQU0RfQUNfQksgPSBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JLOworCQkJCVFvc0luZm8uVUFQU0RfQUNfVkkgPSBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZJOworCQkJCVFvc0luZm8uVUFQU0RfQUNfVk8gPSBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZPOworCQkJCVFvc0luZm8uTWF4U1BMZW5ndGggPSBwQWQtPkNvbW1vbkNmZy5NYXhTUExlbmd0aDsKKwkJCQlXbWVJZVs4XSB8PSAqKFBVQ0hBUikmUW9zSW5mbzsKKwkJCX0KKworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAmdG1wLAorCQkJCQkJCSAgOSwgICAgICAgICAgICAgICAgICAgICAgICAmV21lSWVbMF0sCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQlGcmFtZUxlbiArPSB0bXA7CisJCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkvLyBIVAorCQlpZiAoKHBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4gPiAwKSAmJiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKSkKKwkJeworCQkJVUxPTkcgVG1wTGVuOworCQkJVUNIQVIgSHRMZW47CisJCQlVQ0hBUiBCUk9BRENPTVs0XSA9IHsweDAsIDB4OTAsIDB4NGMsIDB4MzN9OworCQkJaWYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYlByZU5IdCA9PSBUUlVFKQorCQkJeworCQkJCUh0TGVuID0gU0laRV9IVF9DQVBfSUUgKyA0OworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgICAmVG1wTGVuLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZXcGFJZSwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRMZW4sCisJCQkJCQkJICA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJST0FEQ09NWzBdLAorCQkJCQkJCSBwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuLCAgICAgICAgICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICAgJlRtcExlbiwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRDYXBJZSwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwKKwkJCQkJCQkgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwgICAgICAgICAgJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCQl9CisJCQlGcmFtZUxlbiArPSBUbXBMZW47CisJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkvLyBhZGQgUmFsaW5rIHByb3ByaWV0YXJ5IElFIHRvIGluZm9ybSBBUCB0aGlzIFNUQSBpcyBnb2luZyB0byB1c2UgQUdHUkVHQVRJT04gb3IgUElHR1ktQkFDSytBR0dSRUdBVElPTgorCQkvLyBDYXNlIEk6IChBZ2dyZWdhdGlvbiArIFBpZ2d5LUJhY2spCisJCS8vIDEuIHVzZXIgZW5hYmxlIGFnZ3JlZ2F0aW9uLCBBTkQKKwkJLy8gMi4gTWFjIHN1cHBvcnQgcGlnZ3ktYmFjaworCQkvLyAzLiBBUCBhbm5vdWNlcyBpdCdzIFBJR0dZLUJBQ0srQUdHUkVHQVRJT04tY2FwYWJsZSBpbiBCRUFDT04KKwkJLy8gQ2FzZSBJSTogKEFnZ3JlZ2F0aW9uKQorCQkvLyAxLiB1c2VyIGVuYWJsZSBhZ2dyZWdhdGlvbiwgQU5ECisJCS8vIDIuIEFQIGFubm91Y2VzIGl0J3MgQUdHUkVHQVRJT04tY2FwYWJsZSBpbiBCRUFDT04KKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJBZ2dyZWdhdGlvbkNhcGFibGUpCisJCXsKKwkJCWlmICgocEFkLT5Db21tb25DZmcuYlBpZ2d5QmFja0NhcGFibGUpICYmICgocEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgJiAweDAwMDAwMDAzKSA9PSAzKSkKKwkJCXsKKwkJCQlVTE9ORyBUbXBMZW47CisJCQkJVUNIQVIgUmFsaW5rSWVbOV0gPSB7SUVfVkVORE9SX1NQRUNJRklDLCA3LCAweDAwLCAweDBjLCAweDQzLCAweDAzLCAweDAwLCAweDAwLCAweDAwfTsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyK0ZyYW1lTGVuLCAgICAgICAgICAgJlRtcExlbiwKKwkJCQkJCQkJICA5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFsaW5rSWUsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJCX0KKwkJCWVsc2UgaWYgKHBBZC0+TWxtZUF1eC5BUFJhbGlua0llICYgMHgwMDAwMDAwMSkKKwkJCXsKKwkJCQlVTE9ORyBUbXBMZW47CisJCQkJVUNIQVIgUmFsaW5rSWVbOV0gPSB7SUVfVkVORE9SX1NQRUNJRklDLCA3LCAweDAwLCAweDBjLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwfTsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyK0ZyYW1lTGVuLCAgICAgICAgICAgJlRtcExlbiwKKwkJCQkJCQkJICA5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFsaW5rSWUsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCVVMT05HIFRtcExlbjsKKwkJCVVDSEFSIFJhbGlua0llWzldID0ge0lFX1ZFTkRPUl9TUEVDSUZJQywgNywgMHgwMCwgMHgwYywgMHg0MywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMH07CisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyK0ZyYW1lTGVuLAkJICZUbXBMZW4sCisJCQkJCQkJICA5LAkJCQkJCSBSYWxpbmtJZSwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCUZyYW1lTGVuICs9IFRtcExlbjsKKwkJfQorI2lmZGVmIExFQVBfU1VQUE9SVAorCQlpZiAoTEVBUF9DQ0tNX09OKHBBZCkgJiYgKHBBZC0+U3RhQ2ZnLkNDS01MaW5rVXBGbGFnID09IFRSVUUpKQorCQl7CisJCQlDa2lwRmxhZyA9IHBBZC0+U3RhQ2ZnLkNraXBGbGFnOwkvLyBXZSBoYXZlIHVwZGF0ZSB0aGF0IGF0IFBlZXJCZWFjb25BdEpvaW5SZXF1ZXN0KCkKKwkJCWlmIChDa2lwRmxhZyAhPSAwKQorCQkJeworCQkJCU5kaXNaZXJvTWVtb3J5KENraXBOZWdvdGlhdGlvbkJ1ZmZlciwgQ0tJUF9ORUdPVElBVElPTl9MRU5HVEgpOworCQkJCUNraXBOZWdvdGlhdGlvbkJ1ZmZlclsyXSA9IDB4NjY7CisJCQkJLy8gTWFrZSBpdCB0cnkgS1AgJiBNSUMsIHNpbmNlIHdlIGhhdmUgdG8gZm9sbG93IHRoZSByZXN1bHQgZnJvbSBBc3NvY1JzcAorCQkJCUNraXBOZWdvdGlhdGlvbkJ1ZmZlcls4XSA9IDB4MTg7CisJCQkJQ2tpcE5lZ290aWF0aW9uQnVmZmVyW0NLSVBfTkVHT1RJQVRJT05fTEVOR1RIIC0gMV0gPSAweDIyOworCisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICAgICZ0bXAsCisJCQkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBaXJvbmV0Q2tpcEllLAorCQkJCQkJCQkJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQWlyb25ldENraXBMZW4sCisJCQkJCQkJCQlBaXJvbmV0Q2tpcExlbiwgICAgICAgICAgICAgICAgIENraXBOZWdvdGlhdGlvbkJ1ZmZlciwKKwkJCQkJCQkJCUVORF9PRl9BUkdTKTsKKwkJCQlGcmFtZUxlbiArPSB0bXA7CisJCQl9CisKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgJnRtcCwKKwkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBaXJvbmV0SVBBZGRyZXNzSUUsCisJCQkJCQkJMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQWlyb25ldElQQWRkcmVzc0xlbiwKKwkJCQkJCQlBaXJvbmV0SVBBZGRyZXNzTGVuLCAgICAgICAgICAgIEFpcm9uZXRJUEFkZHJlc3NCdWZmZXIsCisJCQkJCQkJRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCisJCQkvLworCQkJLy8gVGhlIFJOIGlzIGluY3JlbWVudGVkIGJlZm9yZSBlYWNoIHJlYXNzb2NpYXRpb24gcmVxdWVzdC4KKwkJCS8vCisJCQlwQWQtPlN0YUNmZy5DQ0tNUk4rKzsKKwkJCS8vCisJCQkvLyBDYWxjdWxhdGUgTUlDID0gaG1hYy1tZDUoa3JrLCBTVEEtSUR8QlNTSUR8UlNOSUV8VFNGfFJOKTsKKwkJCS8vCisJCQlDT1BZX01BQ19BRERSKENhbGNNaWNCdWZmZXIsIHBBZC0+Q3VycmVudEFkZHJlc3MpOworCQkJQ2FsY01pY0J1ZmZlckxlbiA9IE1BQ19BRERSX0xFTjsKKwkJCUNPUFlfTUFDX0FERFIoQ2FsY01pY0J1ZmZlciArIENhbGNNaWNCdWZmZXJMZW4sIHBBZC0+TWxtZUF1eC5Cc3NpZCk7CisJCQlDYWxjTWljQnVmZmVyTGVuICs9IE1BQ19BRERSX0xFTjsKKwkJCU5kaXNNb3ZlTWVtb3J5KENhbGNNaWNCdWZmZXIgKyBDYWxjTWljQnVmZmVyTGVuLCBDaXBoZXJTdWl0ZUNpc2NvQ0NLTSwgQ2lwaGVyU3VpdGVDaXNjb0NDS01MZW4pOworCQkJQ2FsY01pY0J1ZmZlckxlbiArPSBDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbjsKKwkJCU5kaXNNb3ZlTWVtb3J5KENhbGNNaWNCdWZmZXIgKyBDYWxjTWljQnVmZmVyTGVuLCAoUFVDSEFSKSAmcEFkLT5TdGFDZmcuQ0NLTUJlYWNvbkF0Sm9pblRpbWVTdGFtcCwgc2l6ZW9mKHBBZC0+U3RhQ2ZnLkNDS01CZWFjb25BdEpvaW5UaW1lU3RhbXApKTsKKwkJCUNhbGNNaWNCdWZmZXJMZW4gKz0gc2l6ZW9mKHBBZC0+U3RhQ2ZnLkNDS01CZWFjb25BdEpvaW5UaW1lU3RhbXApOworCQkJTmRpc01vdmVNZW1vcnkoQ2FsY01pY0J1ZmZlciArIENhbGNNaWNCdWZmZXJMZW4sIChQVUNIQVIpJnBBZC0+U3RhQ2ZnLkNDS01STiwgc2l6ZW9mKHBBZC0+U3RhQ2ZnLkNDS01STikpOworCQkJQ2FsY01pY0J1ZmZlckxlbiArPSBzaXplb2YocEFkLT5TdGFDZmcuQ0NLTVJOKTsKKwkJCWhtYWNfbWQ1KHBBZC0+U3RhQ2ZnLktSSywgTEVOX0VBUF9NSUNLLCBDYWxjTWljQnVmZmVyLCBDYWxjTWljQnVmZmVyTGVuLCBNSUNNTik7CisKKwkJCS8vCisJCQkvLyBmaWxsIHVwIENDS00gcmVhc3NvY2lhdGlvbiByZXF1ZXN0IGVsZW1lbnQKKwkJCS8vCisJCQlOZGlzTW92ZU1lbW9yeShBaXJvbmV0Q0NLTVJlYXNzb2NCdWZmZXIsIEFpcm9uZXRPVUksIDQpOworCQkJTmRpc01vdmVNZW1vcnkoQWlyb25ldENDS01SZWFzc29jQnVmZmVyICsgNCwgKFBVQ0hBUikmcEFkLT5TdGFDZmcuQ0NLTUJlYWNvbkF0Sm9pblRpbWVTdGFtcCwgOCk7CisJCQlOZGlzTW92ZU1lbW9yeShBaXJvbmV0Q0NLTVJlYXNzb2NCdWZmZXIgKyAxMiwgKFBVQ0hBUikgJnBBZC0+U3RhQ2ZnLkNDS01STiwgNCk7CisJCQlOZGlzTW92ZU1lbW9yeShBaXJvbmV0Q0NLTVJlYXNzb2NCdWZmZXIgKzE2LCBNSUNNTiwgOCk7CisKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgJnRtcCwKKwkJCQkJCQkxLCAgICAgICAgICAgICAgICAgICAgICAmQWlyb25ldENDS01SZWFzc29jSUUsCisJCQkJCQkJMSwgICAgICAgICAgICAgICAgICAgICAgJkFpcm9uZXRDQ0tNUmVhc3NvY0xlbiwKKwkJCQkJCQlBaXJvbmV0Q0NLTVJlYXNzb2NMZW4sICBBaXJvbmV0Q0NLTVJlYXNzb2NCdWZmZXIsCisJCQkJCQkJRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICZ0bXAsCisJCQkJCQkJQ2lwaGVyU3VpdGVDaXNjb0NDS01MZW4sQ2lwaGVyU3VpdGVDaXNjb0NDS00sCisJCQkJCQkJRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCQl9CisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisKKwkJLy8gQWRkIENDWCB2MiByZXF1ZXN0IGlmIENDWDIgYWRtaW4gc3RhdGUgaXMgb24KKwkJaWYgKHBBZC0+U3RhQ2ZnLkNDWENvbnRyb2wuZmllbGQuRW5hYmxlID09IDEpCisJCXsKKwkJCS8vCisJCQkvLyBBZGQgQ0NYIFZlcnNpb24KKwkJCS8vCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICZ0bXAsCisJCQkJCQkxLAkJCQkJCQkmQ2N4MkllLAorCQkJCQkJMSwJCQkJCQkJJkNjeDJMZW4sCisJCQkJCQlDY3gyTGVuLAkJCQkgICAgQ2N4MkllSW5mbywKKwkJCQkJCUVORF9PRl9BUkdTKTsKKwkJCUZyYW1lTGVuICs9IHRtcDsKKwkJfQorCisJCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJCVJUTVBTZXRUaW1lcigmcEFkLT5NbG1lQXV4LlJlYXNzb2NUaW1lciwgVGltZW91dCk7IC8qIGluIG1TZWMgKi8KKwkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBSRUFTU09DX1dBSVRfUlNQOworCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFTU09DIC0gTWxtZVJlYXNzb2NSZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbGVkLiBCVUchISEhIFxuIikpOworCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJCVN0YXR1cyA9IE1MTUVfSU5WQUxJRF9GT1JNQVQ7CisJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9SRUFTU09DX0NPTkYsIDIsICZTdGF0dXMpOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlVcHBlciBsYXllciBpc3N1ZXMgZGlzYXNzb2MgcmVxdWVzdAorCVBhcmFtZXRlcnM6CisJCUVsZW0gLQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZURpc2Fzc29jUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlQTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUIHBEaXNhc3NvY1JlcTsKKwlIRUFERVJfODAyXzExICAgICAgICAgRGlzYXNzb2NIZHI7CisJUEhFQURFUl84MDJfMTEgICAgICAgIHBEaXNhc3NvY0hkcjsKKwlQVUNIQVIgICAgICAgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJVUxPTkcgICAgICAgICAgICAgICAgIEZyYW1lTGVuID0gMDsKKwlORElTX1NUQVRVUyAgICAgICAgICAgTlN0YXR1czsKKwlCT09MRUFOICAgICAgICAgICAgICAgVGltZXJDYW5jZWxsZWQ7CisJVUxPTkcgICAgICAgICAgICAgICAgIFRpbWVvdXQgPSAwOworCVVTSE9SVCAgICAgICAgICAgICAgICBTdGF0dXM7CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkvLyBzZW5kIERMUy1URUFSX0RPV04gbWVzc2FnZSwKKwlpZiAocEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJeworCQlVQ0hBUiBpOworCisJCS8vIHRlYXIgZG93biBsb2NhbCBkbHMgdGFibGUgZW50cnkKKwkJZm9yIChpPTA7IGk8TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaSsrKQorCQl7CisJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKSkKKwkJCXsKKwkJCQlSVE1QU2VuZERMU1RlYXJEb3duRnJhbWUocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJfQorCQl9CisKKwkJLy8gdGVhciBkb3duIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJCWZvciAoaT1NQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJCXsKKwkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpKQorCQkJeworCQkJCVJUTVBTZW5kRExTVGVhckRvd25GcmFtZShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19OT05FOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQl9CisJCX0KKwl9CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKwkvLyBza2lwIHNhbml0eSBjaGVjaworCXBEaXNhc3NvY1JlcSA9IChQTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKShFbGVtLT5Nc2cpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBNbG1lRGlzYXNzb2NSZXFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkXG4iKSk7CisJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJU3RhdHVzID0gTUxNRV9GQUlMX05PX1JFU09VUkNFOworCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfRElTQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKworCisJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguRGlzYXNzb2NUaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gU2VuZCBESVNBU1NPQyByZXF1ZXN0W0JTU0lEOjolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCAoUmVhc29uPSVkKVxuIiwKKwkJCQlwRGlzYXNzb2NSZXEtPkFkZHJbMF0sIHBEaXNhc3NvY1JlcS0+QWRkclsxXSwgcERpc2Fzc29jUmVxLT5BZGRyWzJdLAorCQkJCXBEaXNhc3NvY1JlcS0+QWRkclszXSwgcERpc2Fzc29jUmVxLT5BZGRyWzRdLCBwRGlzYXNzb2NSZXEtPkFkZHJbNV0sIHBEaXNhc3NvY1JlcS0+UmVhc29uKSk7CisJTWd0TWFjSGVhZGVySW5pdChwQWQsICZEaXNhc3NvY0hkciwgU1VCVFlQRV9ESVNBU1NPQywgMCwgcERpc2Fzc29jUmVxLT5BZGRyLCBwRGlzYXNzb2NSZXEtPkFkZHIpOwkvLyBwYXRjaCBwZWFwIHR0bHMgc3dpdGNoaW5nIGlzc3VlCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICZGcmFtZUxlbiwKKwkJCQkJICBzaXplb2YoSEVBREVSXzgwMl8xMSksJkRpc2Fzc29jSGRyLAorCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAmcERpc2Fzc29jUmVxLT5SZWFzb24sCisJCQkJCSAgRU5EX09GX0FSR1MpOworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCisJLy8gVG8gcGF0Y2ggSW5zdGFuY2UgYW5kIEJ1ZmZhbG8oTikgQVAKKwkvLyBEcml2ZXIgaGFzIHRvIHNlbmQgZGVhdXRoIHRvIEluc3RhbmNlIEFQLCBidXQgQnVmZmFsbyhOKSBuZWVkcyB0byBzZW5kIGRpc2Fzc29jIHRvIHJlc2V0IEF1dGhlbnRpY2F0b3IncyBzdGF0ZSBtYWNoaW5lCisJLy8gVGhlcmVmb3JlLCB3ZSBzZW5kIGJvdGggb2YgdGhlbS4KKwlwRGlzYXNzb2NIZHIgPSAoUEhFQURFUl84MDJfMTEpcE91dEJ1ZmZlcjsKKwlwRGlzYXNzb2NIZHItPkZDLlN1YlR5cGUgPSBTVUJUWVBFX0RFQVVUSDsKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisKKwlwQWQtPlN0YUNmZy5EaXNhc3NvY1JlYXNvbiA9IFJFQVNPTl9ESVNBU1NPQ19TVEFfTEVBVklORzsKKwlDT1BZX01BQ19BRERSKHBBZC0+U3RhQ2ZnLkRpc2Fzc29jU3RhLCBwRGlzYXNzb2NSZXEtPkFkZHIpOworCisJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguRGlzYXNzb2NUaW1lciwgVGltZW91dCk7IC8qIGluIG1TZWMgKi8KKwlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IERJU0FTU09DX1dBSVRfUlNQOworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmbmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIGlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gV1BBX1NVUFBMSUNBTlRfRElTQUJMRSkKKwl7CisgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKyAgICAgICAgLy9zZW5kIGRpc2Fzc29jaWF0ZSBldmVudCB0byB3cGFfc3VwcGxpY2FudAorICAgICAgICBtZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisgICAgICAgIHdycXUuZGF0YS5mbGFncyA9IFJUX0RJU0FTU09DX0VWRU5UX0ZMQUc7CisgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgTlVMTCk7CisgICAgfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICB7CisgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKyAgICAgICAgbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBNQUNfQUREUl9MRU4pOworICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisgICAgfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlwZWVyIHNlbmRzIGFzc29jIHJzcCBiYWNrCisJUGFyYW1ldGVyczoKKwkJRWxtZSAtIE1MTUUgbWVzc2FnZSBjb250YWluaW5nIHRoZSByZWNlaXZlZCBmcmFtZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJBc3NvY1JzcEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICAgICAgICBDYXBhYmlsaXR5SW5mbywgU3RhdHVzLCBBaWQ7CisJVUNIQVIgICAgICAgICBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwgU3VwUmF0ZUxlbjsKKwlVQ0hBUiAgICAgICAgIEV4dFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdLCBFeHRSYXRlTGVuOworCVVDSEFSICAgICAgICAgQWRkcjJbTUFDX0FERFJfTEVOXTsKKwlCT09MRUFOICAgICAgIFRpbWVyQ2FuY2VsbGVkOworCVVDSEFSICAgICAgICAgQ2tpcEZsYWc7CisJRURDQV9QQVJNICAgICBFZGNhUGFybTsKKwlIVF9DQVBBQklMSVRZX0lFCQlIdENhcGFiaWxpdHk7CisJQUREX0hUX0lORk9fSUUJCUFkZEh0SW5mbzsJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJVUNIQVIJCQlIdENhcGFiaWxpdHlMZW47CisJVUNIQVIJCQlBZGRIdEluZm9MZW47CisJVUNIQVIJCQlOZXdFeHRDaGFubmVsT2Zmc2V0ID0gMHhmZjsKKworCWlmIChQZWVyQXNzb2NSc3BTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQWRkcjIsICZDYXBhYmlsaXR5SW5mbywgJlN0YXR1cywgJkFpZCwgU3VwUmF0ZSwgJlN1cFJhdGVMZW4sIEV4dFJhdGUsICZFeHRSYXRlTGVuLAorCQkmSHRDYXBhYmlsaXR5LCZBZGRIdEluZm8sICZIdENhcGFiaWxpdHlMZW4sJkFkZEh0SW5mb0xlbiwmTmV3RXh0Q2hhbm5lbE9mZnNldCwgJkVkY2FQYXJtLCAmQ2tpcEZsYWcpKQorCXsKKwkJLy8gVGhlIGZyYW1lIGlzIGZvciBtZSA/CisJCWlmKE1BQ19BRERSX0VRVUFMKEFkZHIyLCBwQWQtPk1sbWVBdXguQnNzaWQpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQXNzb2NSc3BBY3Rpb24oKTpBU1NPQyAtIHJlY2VpdmUgQVNTT0NfUlNQIHRvIG1lIChzdGF0dXM9JWQpXG4iLCBTdGF0dXMpKTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJBc3NvY1JzcEFjdGlvbigpOk1hY1RhYmxlIFslZF0uQU1zZHVTaXplID0gJWQuIENsaWVudFN0YXR1c0ZsYWdzID0gMHglbHggXG4iLEVsZW0tPldjaWQsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQU1zZHVTaXplLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkNsaWVudFN0YXR1c0ZsYWdzKSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5Bc3NvY1RpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQkJaWYoU3RhdHVzID09IE1MTUVfU1VDQ0VTUykKKwkJCXsKKwkJCQlVQ0hBUgkJCU1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPSAwOworCQkJCVVDSEFSCQkJaWR4OworCisJCQkJLy8gc3VwcG9ydGVkIHJhdGVzIGFycmF5IG1heSBub3QgYmUgc29ydGVkLiBzb3J0IGl0IGFuZCBmaW5kIHRoZSBtYXhpbXVtIHJhdGUKKwkJCSAgICBmb3IgKGlkeD0wOyBpZHg8U3VwUmF0ZUxlbjsgaWR4KyspCisgICAgICAgICAgICAgICAgeworCQkJICAgICAgICBpZiAoTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA8IChTdXBSYXRlW2lkeF0gJiAweDdmKSkKKwkJCSAgICAgICAgICAgIE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPSBTdXBSYXRlW2lkeF0gJiAweDdmOworICAgICAgICAgICAgICAgIH0KKworCQkJCWZvciAoaWR4PTA7IGlkeDxFeHRSYXRlTGVuOyBpZHgrKykKKyAgICAgICAgICAgICAgICB7CisJCQkgICAgICAgIGlmIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzIDwgKEV4dFJhdGVbaWR4XSAmIDB4N2YpKQorCQkJICAgICAgICAgICAgTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IEV4dFJhdGVbaWR4XSAmIDB4N2Y7CisgICAgICAgICAgICAgICAgfQorCQkJCS8vIGdvIHRvIHByb2NlZHVyZSBsaXN0ZWQgb24gcGFnZSAzNzYKKwkJCQlBc3NvY1Bvc3RQcm9jKHBBZCwgQWRkcjIsIENhcGFiaWxpdHlJbmZvLCBBaWQsIFN1cFJhdGUsIFN1cFJhdGVMZW4sIEV4dFJhdGUsIEV4dFJhdGVMZW4sCisJCQkJCSZFZGNhUGFybSwgJkh0Q2FwYWJpbGl0eSwgSHRDYXBhYmlsaXR5TGVuLCAmQWRkSHRJbmZvKTsKKworCQkJCVN0YUFkZE1hY1RhYmxlRW50cnkocEFkLCAmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXSwgTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcywgJkh0Q2FwYWJpbGl0eSwgSHRDYXBhYmlsaXR5TGVuLCBDYXBhYmlsaXR5SW5mbyk7CisKKwkJCQlwQWQtPlN0YUNmZy5Da2lwRmxhZyA9IENraXBGbGFnOworCQkJCWlmIChDa2lwRmxhZyAmIDB4MTgpCisJCQkJeworCQkJCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5UeFNFUSwgNCk7CisJCQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlJ4U0VRLCA0KTsKKwkJCQkJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuQ0tJUE1JQywgNCk7CisJCQkJCXBBZC0+U3RhQ2ZnLkdJVlswXSA9IFJhbmRvbUJ5dGUocEFkKTsKKwkJCQkJcEFkLT5TdGFDZmcuR0lWWzFdID0gUmFuZG9tQnl0ZShwQWQpOworCQkJCQlwQWQtPlN0YUNmZy5HSVZbMl0gPSBSYW5kb21CeXRlKHBBZCk7CisJCQkJCXBBZC0+U3RhQ2ZnLmJDa2lwT24gPSBUUlVFOworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8Q0NYPiBwQWQtPlN0YUNmZy5Da2lwRmxhZyA9IDB4JTAyeFxuIiwgcEFkLT5TdGFDZmcuQ2tpcEZsYWcpKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8gRmFpbGUgb24gQXNzb2NpYXRpb24sIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHN0YXR1cyBjb2RlCisJCQkJLy8gSXMgdGhhdCBhIFJvZ3VlIEFQPworI2lmZGVmIExFQVBfU1VQUE9SVAorCQkJCWlmICgocEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID09IENJU0NPX0F1dGhNb2RlTEVBUCkgJiYgKFN0YXR1cyA9PSBNTE1FX0FMR19OT1RfU1VQUE9SVCkpCisJCQkJeyAvL1Bvc3NpYmx5IFJvZ3VlIEFQCisJCQkJCVJvZ3VlQXBUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+U3RhQ2ZnLlJvZ3VlQXBUYWIsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTEVBUF9SRUFTT05fSU5WQUxJRF9BVVRIKTsKKwkJCQl9CisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisJCQl9CisJCQlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBQZWVyQXNzb2NSc3BBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbFxuIikpOworCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlwZWVyIHNlbmRzIHJlYXNzb2MgcnNwCisJUGFyYW1ldHJzOgorCQlFbGVtIC0gTUxNRSBtZXNzYWdlIGNudGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBQZWVyUmVhc3NvY1JzcEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICAgICAgQ2FwYWJpbGl0eUluZm87CisJVVNIT1JUICAgICAgU3RhdHVzOworCVVTSE9SVCAgICAgIEFpZDsKKwlVQ0hBUiAgICAgICBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwgU3VwUmF0ZUxlbjsKKwlVQ0hBUiAgICAgICBFeHRSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwgRXh0UmF0ZUxlbjsKKwlVQ0hBUiAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCVVDSEFSICAgICAgIENraXBGbGFnOworCUJPT0xFQU4gICAgIFRpbWVyQ2FuY2VsbGVkOworCUVEQ0FfUEFSTSAgIEVkY2FQYXJtOworCUhUX0NBUEFCSUxJVFlfSUUJCUh0Q2FwYWJpbGl0eTsKKwlBRERfSFRfSU5GT19JRQkJQWRkSHRJbmZvOwkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKwlVQ0hBUgkJCUh0Q2FwYWJpbGl0eUxlbjsKKwlVQ0hBUgkJCUFkZEh0SW5mb0xlbjsKKwlVQ0hBUgkJCU5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOworCisJaWYoUGVlckFzc29jUnNwU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIEFkZHIyLCAmQ2FwYWJpbGl0eUluZm8sICZTdGF0dXMsICZBaWQsIFN1cFJhdGUsICZTdXBSYXRlTGVuLCBFeHRSYXRlLCAmRXh0UmF0ZUxlbiwKKwkJCQkJCQkJJkh0Q2FwYWJpbGl0eSwJJkFkZEh0SW5mbywgJkh0Q2FwYWJpbGl0eUxlbiwgJkFkZEh0SW5mb0xlbiwmTmV3RXh0Q2hhbm5lbE9mZnNldCwgJkVkY2FQYXJtLCAmQ2tpcEZsYWcpKQorCXsKKwkJaWYoTUFDX0FERFJfRVFVQUwoQWRkcjIsIHBBZC0+TWxtZUF1eC5Cc3NpZCkpIC8vIFRoZSBmcmFtZSBpcyBmb3IgbWUgPworCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIHJlY2VpdmUgUkVBU1NPQ19SU1AgdG8gbWUgKHN0YXR1cz0lZClcbiIsIFN0YXR1cykpOworCQkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguUmVhc3NvY1RpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCisJCQlpZihTdGF0dXMgPT0gTUxNRV9TVUNDRVNTKQorCQkJeworCQkJCS8vIGdvIHRvIHByb2NlZHVyZSBsaXN0ZWQgb24gcGFnZSAzNzYKKwkJCQlBc3NvY1Bvc3RQcm9jKHBBZCwgQWRkcjIsIENhcGFiaWxpdHlJbmZvLCBBaWQsIFN1cFJhdGUsIFN1cFJhdGVMZW4sIEV4dFJhdGUsIEV4dFJhdGVMZW4sCisJCQkJCSAmRWRjYVBhcm0sICZIdENhcGFiaWxpdHksIEh0Q2FwYWJpbGl0eUxlbiwgJkFkZEh0SW5mbyk7CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZuZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAhPSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworCisgICAgICAgICAgICAgICAgICAgIFNlbmRBc3NvY0lFc1RvV3BhU3VwcGxpY2FudChwQWQpOworICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisgICAgICAgICAgICAgICAgICAgIHdycXUuZGF0YS5mbGFncyA9IFJUX0FTU09DX0VWRU5UX0ZMQUc7CisgICAgICAgICAgICAgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgTlVMTCk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKyAgICAgICAgICAgICAgICAgICAgd2V4dF9ub3RpZnlfZXZlbnRfYXNzb2MocEFkKTsKKworICAgICAgICAgICAgICAgICAgICBtZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgcEFkLT5NbG1lQXV4LkJzc2lkLCBNQUNfQUREUl9MRU4pOworICAgICAgICAgICAgICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworCQkJfQorCisJCQkvLworCQkJLy8gQ2lzY28gTGVhcCBDQ0tNIHN1cHBvcnRlZCBSZS1hc3NvY2lhdGlvbi4KKwkJCS8vCisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQlpZiAoTEVBUF9DQ0tNX09OKHBBZCkgJiYgKHBBZC0+U3RhQ2ZnLkNDS01MaW5rVXBGbGFnID09IFRSVUUpKQorCQkJeworCQkJCWlmIChDQ0tNQXNzb2NSc3BTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbikgPT0gVFJVRSkKKwkJCQl7CisJCQkJCXBBZC0+U3RhQ2ZnLkNraXBGbGFnID0gQ2tpcEZsYWc7CisJCQkJCWlmIChDa2lwRmxhZyAmIDB4MTgpCisJCQkJCXsKKwkJCQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlR4U0VRLCA0KTsKKwkJCQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlJ4U0VRLCA0KTsKKwkJCQkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLkNLSVBNSUMsIDQpOworCQkJCQkJcEFkLT5TdGFDZmcuR0lWWzBdID0gUmFuZG9tQnl0ZShwQWQpOworCQkJCQkJcEFkLT5TdGFDZmcuR0lWWzFdID0gUmFuZG9tQnl0ZShwQWQpOworCQkJCQkJcEFkLT5TdGFDZmcuR0lWWzJdID0gUmFuZG9tQnl0ZShwQWQpOworCQkJCQkJcEFkLT5TdGFDZmcuYkNraXBPbiA9IFRSVUU7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8Q0NYPiBwQWQtPlN0YUNmZy5Da2lwRmxhZyA9IDB4JTAyeFxuIiwgcEFkLT5TdGFDZmcuQ2tpcEZsYWcpKTsKKwkJCQkJfQorCisJCQkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJCQkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1JFQVNTT0NfQ09ORiwgMiwgJlN0YXR1cyk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gQ0NLTUFzc29jUnNwU2FuaXR5KCkgc2FuaXR5IGNoZWNrIGZhaWxcbiIpKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisJCQl7CisJCQkJLy8gQ2tpcEZsYWcgaXMgbm8gdXNlIGZvciByZWFzc29jaWF0ZQorCQkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwkJCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfUkVBU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIFBlZXJSZWFzc29jUnNwQWN0aW9uKCkgc2FuaXR5IGNoZWNrIGZhaWxcbiIpKTsKKwl9CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlwcm9jZWR1cmVzIG9uIElFRUUgODAyLjExLzE5OTkgcC4zNzYKKwlQYXJhbWV0cnM6CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNzb2NQb3N0UHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgcEFkZHIyLAorCUlOIFVTSE9SVCBDYXBhYmlsaXR5SW5mbywKKwlJTiBVU0hPUlQgQWlkLAorCUlOIFVDSEFSIFN1cFJhdGVbXSwKKwlJTiBVQ0hBUiBTdXBSYXRlTGVuLAorCUlOIFVDSEFSIEV4dFJhdGVbXSwKKwlJTiBVQ0hBUiBFeHRSYXRlTGVuLAorCUlOIFBFRENBX1BBUk0gcEVkY2FQYXJtLAorCUlOIEhUX0NBUEFCSUxJVFlfSUUJCSpwSHRDYXBhYmlsaXR5LAorCUlOIFVDSEFSIEh0Q2FwYWJpbGl0eUxlbiwKKwlJTiBBRERfSFRfSU5GT19JRQkJKnBBZGRIdEluZm8pCS8vIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRQoreworCVVMT05HIElkeDsKKworCXBBZC0+TWxtZUF1eC5Cc3NUeXBlID0gQlNTX0lORlJBOworCUNPUFlfTUFDX0FERFIocEFkLT5NbG1lQXV4LkJzc2lkLCBwQWRkcjIpOworCXBBZC0+TWxtZUF1eC5BaWQgPSBBaWQ7CisJcEFkLT5NbG1lQXV4LkNhcGFiaWxpdHlJbmZvID0gQ2FwYWJpbGl0eUluZm8gJiBTVVBQT1JURURfQ0FQQUJJTElUWV9JTkZPOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCS8vIFNvbWUgSFQgQVAgbWlnaHQgbG9zdCBXTU0gSUUuIFdlIGFkZCBXTU0gb3Vyc2VsdmVzLiBiZWFjdWFzZSBIVCByZXF1aXJlcyBRb1Mgb24uCisJaWYgKChIdENhcGFiaWxpdHlMZW4gPiAwKSAmJiAocEVkY2FQYXJtLT5iVmFsaWQgPT0gRkFMU0UpKQorCXsKKwkJcEVkY2FQYXJtLT5iVmFsaWQgPSBUUlVFOworCQlwRWRjYVBhcm0tPkFpZnNuWzBdID0gMzsKKwkJcEVkY2FQYXJtLT5BaWZzblsxXSA9IDc7CisJCXBFZGNhUGFybS0+QWlmc25bMl0gPSAyOworCQlwRWRjYVBhcm0tPkFpZnNuWzNdID0gMjsKKworCQlwRWRjYVBhcm0tPkN3bWluWzBdID0gNDsKKwkJcEVkY2FQYXJtLT5Dd21pblsxXSA9IDQ7CisJCXBFZGNhUGFybS0+Q3dtaW5bMl0gPSAzOworCQlwRWRjYVBhcm0tPkN3bWluWzNdID0gMjsKKworCQlwRWRjYVBhcm0tPkN3bWF4WzBdID0gMTA7CisJCXBFZGNhUGFybS0+Q3dtYXhbMV0gPSAxMDsKKwkJcEVkY2FQYXJtLT5Dd21heFsyXSA9IDQ7CisJCXBFZGNhUGFybS0+Q3dtYXhbM10gPSAzOworCisJCXBFZGNhUGFybS0+VHhvcFswXSAgPSAwOworCQlwRWRjYVBhcm0tPlR4b3BbMV0gID0gMDsKKwkJcEVkY2FQYXJtLT5UeG9wWzJdICA9IDk2OworCQlwRWRjYVBhcm0tPlR4b3BbM10gID0gNDg7CisKKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlOZGlzTW92ZU1lbW9yeSgmcEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0sIHBFZGNhUGFybSwgc2l6ZW9mKEVEQ0FfUEFSTSkpOworCisJLy8gZmlsdGVyIG91dCB1bi1zdXBwb3J0ZWQgcmF0ZXMKKwlwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiA9IFN1cFJhdGVMZW47CisJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlN1cFJhdGUsIFN1cFJhdGUsIFN1cFJhdGVMZW4pOworCVJUTVBDaGVja1JhdGVzKHBBZCwgcEFkLT5NbG1lQXV4LlN1cFJhdGUsICZwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbik7CisKKwkvLyBmaWx0ZXIgb3V0IHVuLXN1cHBvcnRlZCByYXRlcworCXBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuID0gRXh0UmF0ZUxlbjsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguRXh0UmF0ZSwgRXh0UmF0ZSwgRXh0UmF0ZUxlbik7CisJUlRNUENoZWNrUmF0ZXMocEFkLCBwQWQtPk1sbWVBdXguRXh0UmF0ZSwgJnBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmIChIdENhcGFiaWxpdHlMZW4gPiAwKQorCXsKKwkJUlRNUENoZWNrSHQocEFkLCBCU1NJRF9XQ0lELCBwSHRDYXBhYmlsaXR5LCBwQWRkSHRJbmZvKTsKKwl9CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQXNzb2NQb3N0UHJvYz09PT4gIEFQLkFNc2R1U2l6ZSA9ICVkLiBDbGllbnRTdGF0dXNGbGFncyA9IDB4JWx4IFxuIiwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BTXNkdVNpemUsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQ2xpZW50U3RhdHVzRmxhZ3MpKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFzc29jUG9zdFByb2M9PT0+ICAgIChNbXBzPSVkLCBBbXNkdVNpemU9JWQsIClcbiIsCisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uTW1wc01vZGUsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQU1zZHVTaXplKSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBTZXQgTmV3IFdQQSBpbmZvcm1hdGlvbgorCUlkeCA9IEJzc1RhYmxlU2VhcmNoKCZwQWQtPlNjYW5UYWIsIHBBZGRyMiwgcEFkLT5NbG1lQXV4LkNoYW5uZWwpOworCWlmIChJZHggPT0gQlNTX05PVF9GT1VORCkKKwl7CisJCURCR1BSSU5UX0VSUigoIkFTU09DIC0gQ2FuJ3QgZmluZCBCU1MgYWZ0ZXIgcmVjZWl2aW5nIEFzc29jIHJlc3BvbnNlXG4iKSk7CisJfQorCWVsc2UKKwl7CisJCS8vIEluaXQgdmFyaWFibGUKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4gPSAwOworCQlOZGlzWmVyb01lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTl9JRSwgTUFYX0xFTl9PRl9SU05JRSk7CisKKwkJLy8gU3RvcmUgYXBwcm9wcmlhdGUgUlNOX0lFIGZvciBXUEEgU00gbmVnb3RpYXRpb24gbGF0ZXIKKwkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpICYmIChwQWQtPlNjYW5UYWIuQnNzRW50cnlbSWR4XS5WYXJJRUxlbiAhPSAwKSkKKwkJeworCQkJUFVDSEFSICAgICAgICAgICAgICBwVklFOworCQkJVVNIT1JUICAgICAgICAgICAgICBsZW47CisJCQlQRUlEX1NUUlVDVCAgICAgICAgIHBFaWQ7CisKKwkJCXBWSUUgPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbSWR4XS5WYXJJRXM7CisJCQlsZW4JID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0lkeF0uVmFySUVMZW47CisKKwkJCXdoaWxlIChsZW4gPiAwKQorCQkJeworCQkJCXBFaWQgPSAoUEVJRF9TVFJVQ1QpIHBWSUU7CisJCQkJLy8gRm9yIFdQQS9XUEFQU0sKKwkJCQlpZiAoKHBFaWQtPkVpZCA9PSBJRV9XUEEpICYmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdQQV9PVUksIDQpKQorCQkJCQkmJiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBIHx8IHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykpCisJCQkJeworCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTl9JRSwgcFZJRSwgKHBFaWQtPkxlbiArIDIpKTsKKwkJCQkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4gPSAocEVpZC0+TGVuICsgMik7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFzc29jUG9zdFByb2M9PT0+IFN0b3JlIFJTTl9JRSBmb3IgV1BBIFNNIG5lZ290aWF0aW9uIFxuIikpOworCQkJCX0KKwkJCQkvLyBGb3IgV1BBMi9XUEEyUFNLCisJCQkJZWxzZSBpZiAoKHBFaWQtPkVpZCA9PSBJRV9SU04pICYmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQgKyAyLCBSU05fT1VJLCAzKSkKKwkJCQkJJiYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIgfHwgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisJCQkJeworCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTl9JRSwgcFZJRSwgKHBFaWQtPkxlbiArIDIpKTsKKwkJCQkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4gPSAocEVpZC0+TGVuICsgMik7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFzc29jUG9zdFByb2M9PT0+IFN0b3JlIFJTTl9JRSBmb3IgV1BBMiBTTSBuZWdvdGlhdGlvbiBcbiIpKTsKKwkJCQl9CisKKwkJCQlwVklFICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJCQlsZW4gIC09IChwRWlkLT5MZW4gKyAyKTsKKwkJCX0KKwkJfQorCisJCWlmIChwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbiA9PSAwKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBc3NvY1Bvc3RQcm9jPT09PiBubyBSU05fSUUgXG4iKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQloZXhfZHVtcCgiUlNOX0lFIiwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05fSUUsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOSUVfTGVuKTsKKwkJfQorCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlsZWZ0IHBhcnQgb2YgSUVFRSA4MDIuMTEvMTk5OSBwLjM3NAorCVBhcmFtZXRlcnM6CisJCUVsZW0gLSBNTE1FIG1lc3NhZ2UgY29udGFpbmluZyB0aGUgcmVjZWl2ZWQgZnJhbWUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBQZWVyRGlzYXNzb2NBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSICAgICAgICAgQWRkcjJbTUFDX0FERFJfTEVOXTsKKwlVU0hPUlQgICAgICAgIFJlYXNvbjsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gUGVlckRpc2Fzc29jQWN0aW9uKClcbiIpKTsKKwlpZihQZWVyRGlzYXNzb2NTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQWRkcjIsICZSZWFzb24pKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBQZWVyRGlzYXNzb2NBY3Rpb24oKSBSZWFzb24gPSAlZFxuIiwgUmVhc29uKSk7CisJCWlmIChJTkZSQV9PTihwQWQpICYmIE1BQ19BRERSX0VRVUFMKHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBBZGRyMikpCisJCXsKKworCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQkJeworCQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX0RJU0FTU09DX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisJCQl9CisKKworI2lmZGVmIExFQVBfU1VQUE9SVAorCQkJaWYgKHBBZC0+U3RhQ2ZnLkxlYXBBdXRoTW9kZSA9PSBDSVNDT19BdXRoTW9kZUxFQVApCisJCQl7CisJCQkJLy8gQ2lzY29fTEVBUCBoYXMgc3RhcnQgYSB0aW1lcgorCQkJCS8vIFdlIHNob3VsZCBjYW5jZWwgaXQgaWYgdXNpbmcgTEVBUAorCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuTGVhcEF1dGhUaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwkJCQkvL0NoZWNrIGlzIGl0IG1hY2ggdGhlIExFQVAgQXV0aGVudGljYXRpb24gZmFpbGVkIGFzIHBvc3NpYmxlIGEgUm9ndWUgQVAKKwkJCQkvL29uIGl0J3MgUG9ydFNlY3VyZWQgbm90IGVxdWFsIHRvIFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEIHdoaWxlIHByb2Nlc3MgdGhlIEFzc29jaWF0aW9uLgorCQkJCWlmICgocEFkLT5NbG1lLkxlYXBNYWNoaW5lLkN1cnJTdGF0ZSAhPSBMRUFQX0lETEUpICYmIChwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCAhPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCkpCisJCQkJeworCQkJCQlSb2d1ZUFwVGFibGVTZXRFbnRyeShwQWQsICZwQWQtPlN0YUNmZy5Sb2d1ZUFwVGFiLCBBZGRyMiwgTEVBUF9SRUFTT05fQVVUSF9USU1FT1VUKTsKKwkJCQl9CisJCQl9CisjZW5kaWYJLy8gTEVBUF9TVVBQT1JUIC8vCisJCQkvLworCQkJLy8gR2V0IEN1cnJlbnQgU3lzdGVtIHRpbWUgYW5kIFR1cm4gb24gQWRqYWNlbnRBUFJlcG9ydAorCQkJLy8KKwkJCU5kaXNHZXRTeXN0ZW1VcFRpbWUoJnBBZC0+U3RhQ2ZnLkNDWEFkamFjZW50QVBMaW5rRG93blRpbWUpOworCQkJcEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUFJlcG9ydEZsYWcgPSBUUlVFOworCQkJTGlua0Rvd24ocEFkLCBUUlVFKTsKKwkJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gV1BBX1NVUFBMSUNBTlRfRElTQUJMRSkKKwkJCXsKKyAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisgICAgICAgICAgICAgICAgLy9zZW5kIGRpc2Fzc29jaWF0ZSBldmVudCB0byB3cGFfc3VwcGxpY2FudAorICAgICAgICAgICAgICAgIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKyAgICAgICAgICAgICAgICB3cnF1LmRhdGEuZmxhZ3MgPSBSVF9ESVNBU1NPQ19FVkVOVF9GTEFHOworICAgICAgICAgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgTlVMTCk7CisgICAgICAgICAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKyAgICAgICAgICAgICAgICBtZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworICAgICAgICAgICAgfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJCX0KKwl9CisJZWxzZQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBQZWVyRGlzYXNzb2NBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbFxuIikpOworCX0KKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXdoYXQgdGhlIHN0YXRlIG1hY2hpbmUgd2lsbCBkbyBhZnRlciBhc3NvYyB0aW1lb3V0CisJUGFyYW1ldGVyczoKKwkJRWxtZSAtCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXNzb2NUaW1lb3V0QWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgIFN0YXR1czsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBU1NPQyAtIEFzc29jVGltZW91dEFjdGlvblxuIikpOworCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKwlTdGF0dXMgPSBNTE1FX1JFSl9USU1FT1VUOworCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQl3aGF0IHRoZSBzdGF0ZSBtYWNoaW5lIHdpbGwgZG8gYWZ0ZXIgcmVhc3NvYyB0aW1lb3V0CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUmVhc3NvY1RpbWVvdXRBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gUmVhc3NvY1RpbWVvdXRBY3Rpb25cbiIpKTsKKwlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJU3RhdHVzID0gTUxNRV9SRUpfVElNRU9VVDsKKwlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfUkVBU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQl3aGF0IHRoZSBzdGF0ZSBtYWNoaW5lIHdpbGwgZG8gYWZ0ZXIgZGlzYXNzb2MgdGltZW91dAorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIERpc2Fzc29jVGltZW91dEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUICBTdGF0dXM7CisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBEaXNhc3NvY1RpbWVvdXRBY3Rpb25cbiIpKTsKKwlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJU3RhdHVzID0gTUxNRV9TVUNDRVNTOworCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9ESVNBU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKK30KKworVk9JRCBJbnZhbGlkU3RhdGVXaGVuQXNzb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gSW52YWxpZFN0YXRlV2hlbkFzc29jKHN0YXRlPSVsZCksIHJlc2V0IEFTU09DIHN0YXRlIG1hY2hpbmVcbiIsCisJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlKSk7CisJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCVN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7CisJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FTU09DX0NPTkYsIDIsICZTdGF0dXMpOworfQorCitWT0lEIEludmFsaWRTdGF0ZVdoZW5SZWFzc29jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gSW52YWxpZFN0YXRlV2hlblJlYXNzb2Moc3RhdGU9JWxkKSwgcmVzZXQgQVNTT0Mgc3RhdGUgbWFjaGluZVxuIiwKKwkJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUpKTsKKwlwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJU3RhdHVzID0gTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVDsKKwlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfUkVBU1NPQ19DT05GLCAyLCAmU3RhdHVzKTsKK30KKworVk9JRCBJbnZhbGlkU3RhdGVXaGVuRGlzYXNzb2NpYXRlKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgU3RhdHVzOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFTU09DIC0gSW52YWxpZFN0YXRlV2hlbkRpc2Fzc29jKHN0YXRlPSVsZCksIHJlc2V0IEFTU09DIHN0YXRlIG1hY2hpbmVcbiIsCisJCXBBZC0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlKSk7CisJcEFkLT5NbG1lLkFzc29jTWFjaGluZS5DdXJyU3RhdGUgPSBBU1NPQ19JRExFOworCVN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7CisJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0RJU0FTU09DX0NPTkYsIDIsICZTdGF0dXMpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXJpZ2h0IHBhcnQgb2YgSUVFRSA4MDIuMTEvMTk5OSBwYWdlIDM3NAorCU5vdGU6CisJCVRoaXMgZXZlbnQgc2hvdWxkIG5ldmVyIGNhdXNlIEFTU09DIHN0YXRlIG1hY2hpbmUgcGVyZm9ybSBzdGF0ZQorCQl0cmFuc2l0aW9uLCBhbmQgaGFzIG5vIHJlbGF0aW9uc2hpcCB3aXRoIENOVEwgbWFjaGluZS4gU28gd2Ugc2VwYXJhdGUKKwkJdGhpcyByb3V0aW5lIGFzIGEgc2VydmljZSBvdXRzaWRlIG9mIEFTU09DIHN0YXRlIHRyYW5zaXRpb24gdGFibGUuCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQ2xzM2VyckFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBQVUNIQVIgICAgICAgIHBBZGRyKQoreworCUhFQURFUl84MDJfMTEgICAgICAgICBEaXNhc3NvY0hkcjsKKwlQSEVBREVSXzgwMl8xMSAgICAgICAgcERpc2Fzc29jSGRyOworCVBVQ0hBUiAgICAgICAgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlVTE9ORyAgICAgICAgICAgICAgICAgRnJhbWVMZW4gPSAwOworCU5ESVNfU1RBVFVTICAgICAgICAgICBOU3RhdHVzOworCVVTSE9SVCAgICAgICAgICAgICAgICBSZWFzb24gPSBSRUFTT05fQ0xTM0VSUjsKKworCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVNTT0MgLSBDbGFzcyAzIEVycm9yLCBTZW5kIERJU0FTU09DIGZyYW1lXG4iKSk7CisJTWd0TWFjSGVhZGVySW5pdChwQWQsICZEaXNhc3NvY0hkciwgU1VCVFlQRV9ESVNBU1NPQywgMCwgcEFkZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsJLy8gcGF0Y2ggcGVhcCB0dGxzIHN3aXRjaGluZyBpc3N1ZQorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisJCQkJCSAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCZEaXNhc3NvY0hkciwKKwkJCQkJICAyLCAgICAgICAgICAgICAgICAgICAgJlJlYXNvbiwKKwkJCQkJICBFTkRfT0ZfQVJHUyk7CisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisKKwkvLyBUbyBwYXRjaCBJbnN0YW5jZSBhbmQgQnVmZmFsbyhOKSBBUAorCS8vIERyaXZlciBoYXMgdG8gc2VuZCBkZWF1dGggdG8gSW5zdGFuY2UgQVAsIGJ1dCBCdWZmYWxvKE4pIG5lZWRzIHRvIHNlbmQgZGlzYXNzb2MgdG8gcmVzZXQgQXV0aGVudGljYXRvcidzIHN0YXRlIG1hY2hpbmUKKwkvLyBUaGVyZWZvcmUsIHdlIHNlbmQgYm90aCBvZiB0aGVtLgorCXBEaXNhc3NvY0hkciA9IChQSEVBREVSXzgwMl8xMSlwT3V0QnVmZmVyOworCXBEaXNhc3NvY0hkci0+RkMuU3ViVHlwZSA9IFNVQlRZUEVfREVBVVRIOworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKworCXBBZC0+U3RhQ2ZnLkRpc2Fzc29jUmVhc29uID0gUkVBU09OX0NMUzNFUlI7CisJQ09QWV9NQUNfQUREUihwQWQtPlN0YUNmZy5EaXNhc3NvY1N0YSwgcEFkZHIpOworfQorCisgLyoKKwkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkgRGVzY3JpcHRpb246CisJCSBTd2l0Y2ggYmV0d2VlbiBXRVAgYW5kIENLSVAgdXBvbiBuZXcgYXNzb2NpYXRpb24gdXAuCisJIFBhcmFtZXRlcnM6CisKKwkgSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgKi8KK1ZPSUQgU3dpdGNoQmV0d2VlbldlcEFuZENraXAoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJaW50ICAgICAgICAgICAgaTsKKwlTSEFSRURLRVlfTU9ERV9TVFJVQyAgY3NyMTsKKworCS8vIGlmIEtQIGlzIHJlcXVpcmVkLiBjaGFuZ2UgdGhlIENpcGhlckFsZyBpbiBoYXJkd2FyZSBzaGFyZCBrZXkgdGFibGUgZnJvbSBXRVAKKwkvLyB0byBDS0lQLiBlbHNlIHJlbWFpbiBhcyBXRVAKKwlpZiAocEFkLT5TdGFDZmcuYkNraXBPbiAmJiAocEFkLT5TdGFDZmcuQ2tpcEZsYWcgJiAweDEwKSkKKwl7CisJCS8vIG1vZGlmeSBoYXJkd2FyZSBrZXkgdGFibGUgc28gdGhhdCBNQUMgdXNlIGNvcnJlY3QgYWxnb3JpdGhtIHRvIGRlY3J5cHQgUlgKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBTSEFSRURfS0VZX01PREVfQkFTRSwgJmNzcjEud29yZCk7CisJCWlmIChjc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID09IENJUEhFUl9XRVA2NCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPSBDSVBIRVJfQ0tJUDY0OworCQllbHNlIGlmIChjc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID09IENJUEhFUl9XRVAxMjgpCisJCQljc3IxLmZpZWxkLkJzczBLZXkwQ2lwaGVyQWxnID0gQ0lQSEVSX0NLSVAxMjg7CisKKwkJaWYgKGNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDY0KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MUNpcGhlckFsZyA9IENJUEhFUl9DS0lQNjQ7CisJCWVsc2UgaWYgKGNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDEyOCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTFDaXBoZXJBbGcgPSBDSVBIRVJfQ0tJUDEyODsKKworCQlpZiAoY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9PSBDSVBIRVJfV0VQNjQpCisJCQljc3IxLmZpZWxkLkJzczBLZXkyQ2lwaGVyQWxnID0gQ0lQSEVSX0NLSVA2NDsKKwkJZWxzZSBpZiAoY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9PSBDSVBIRVJfV0VQMTI4KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9IENJUEhFUl9DS0lQMTI4OworCisJCWlmIChjc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID09IENJUEhFUl9XRVA2NCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTNDaXBoZXJBbGcgPSBDSVBIRVJfQ0tJUDY0OworCQllbHNlIGlmIChjc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID09IENJUEhFUl9XRVAxMjgpCisJCQljc3IxLmZpZWxkLkJzczBLZXkzQ2lwaGVyQWxnID0gQ0lQSEVSX0NLSVAxMjg7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFNIQVJFRF9LRVlfTU9ERV9CQVNFLCBjc3IxLndvcmQpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTd2l0Y2hCZXR3ZWVuV2VwQW5kQ2tpcDogbW9kaWZ5IEJTUzAgY2lwaGVyIHRvICVzXG4iLCBDaXBoZXJOYW1lW2NzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGddKSk7CisKKwkJLy8gbW9kaWZ5IHNvZnR3YXJlIGtleSB0YWJsZSBzbyB0aGF0IGRyaXZlciBjYW4gc3BlY2lmeSBjb3JyZWN0IGFsZ29yaXRobSBpbiBUWEQgdXBvbiBUWAorCQlmb3IgKGk9MDsgaTxTSEFSRV9LRVlfTlVNOyBpKyspCisJCXsKKwkJCWlmIChwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDY0KQorCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9IENJUEhFUl9DS0lQNjQ7CisJCQllbHNlIGlmIChwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPT0gQ0lQSEVSX1dFUDEyOCkKKwkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPSBDSVBIRVJfQ0tJUDEyODsKKwkJfQorCX0KKworCS8vIGVsc2UgaWYgS1AgTk9UIGludXNlZC4gY2hhbmdlIHRoZSBDaXBoZXJBbGcgaW4gaGFyZHdhcmUgc2hhcmQga2V5IHRhYmxlIGZyb20gQ0tJUAorCS8vIHRvIFdFUC4KKwllbHNlCisJeworCQkvLyBtb2RpZnkgaGFyZHdhcmUga2V5IHRhYmxlIHNvIHRoYXQgTUFDIHVzZSBjb3JyZWN0IGFsZ29yaXRobSB0byBkZWNyeXB0IFJYCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UsICZjc3IxLndvcmQpOworCQlpZiAoY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZyA9PSBDSVBIRVJfQ0tJUDY0KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwkJZWxzZSBpZiAoY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZyA9PSBDSVBIRVJfQ0tJUDEyOCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworCisJCWlmIChjc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID09IENJUEhFUl9DS0lQNjQpCisJCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQllbHNlIGlmIChjc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID09IENJUEhFUl9DS0lQMTI4KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5MUNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisKKwkJaWYgKGNzcjEuZmllbGQuQnNzMEtleTJDaXBoZXJBbGcgPT0gQ0lQSEVSX0NLSVA2NCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTJDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisJCWVsc2UgaWYgKGNzcjEuZmllbGQuQnNzMEtleTJDaXBoZXJBbGcgPT0gQ0lQSEVSX0NLSVAxMjgpCisJCQljc3IxLmZpZWxkLkJzczBLZXkyQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKworCQlpZiAoY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9PSBDSVBIRVJfQ0tJUDY0KQorCQkJY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwkJZWxzZSBpZiAoY3NyMS5maWVsZC5Cc3MwS2V5M0NpcGhlckFsZyA9PSBDSVBIRVJfQ0tJUDEyOCkKKwkJCWNzcjEuZmllbGQuQnNzMEtleTNDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworCisJCS8vIG1vZGlmeSBzb2Z0d2FyZSBrZXkgdGFibGUgc28gdGhhdCBkcml2ZXIgY2FuIHNwZWNpZnkgY29ycmVjdCBhbGdvcml0aG0gaW4gVFhEIHVwb24gVFgKKwkJZm9yIChpPTA7IGk8U0hBUkVfS0VZX05VTTsgaSsrKQorCQl7CisJCQlpZiAocEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQ2lwaGVyQWxnID09IENJUEhFUl9DS0lQNjQpCisJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQkJZWxzZSBpZiAocEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQ2lwaGVyQWxnID09IENJUEhFUl9DS0lQMTI4KQorCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLkNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisJCX0KKworCQkvLworCQkvLyBPbiBXUEEtTk9ORSwgbXVzdCB1cGRhdGUgQ2lwaGVyQWxnLgorCQkvLyBCZWNhdXNlIHRoZSBPSURfODAyXzExX1dFUF9TVEFUVVMgd2FzIGJlZW4gc2V0IGFmdGVyIE9JRF84MDJfMTFfQUREX0tFWQorCQkvLyBhbmQgQ2lwaGVyQWxnIHdpbGwgYmUgQ0lQSEVSX05PTkUgYnkgV2luZG93cyBaZXJvQ29uZmlnLgorCQkvLyBTbyB3ZSBuZWVkIHRvIHVwZGF0ZSBDaXBoZXJBbGcgYWZ0ZXIgY29ubmVjdC4KKwkJLy8KKwkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisJCXsKKwkJCWZvciAoaSA9IDA7IGkgPCBTSEFSRV9LRVlfTlVNOyBpKyspCisJCQl7CisJCQkJaWYgKHBBZC0+U2hhcmVkS2V5W0JTUzBdW2ldLktleUxlbiAhPSAwKQorCQkJCXsKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorCQkJCQl7CisJCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKKwkJCQkJfQorCQkJCQllbHNlIGlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJCQkJeworCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baV0uQ2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtpXS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKwkJCQl9CisJCQl9CisKKwkJCWNzcjEuZmllbGQuQnNzMEtleTBDaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGc7CisJCQljc3IxLmZpZWxkLkJzczBLZXkxQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bMV0uQ2lwaGVyQWxnOworCQkJY3NyMS5maWVsZC5Cc3MwS2V5MkNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdWzJdLkNpcGhlckFsZzsKKwkJCWNzcjEuZmllbGQuQnNzMEtleTNDaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVszXS5DaXBoZXJBbGc7CisJCX0KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgU0hBUkVEX0tFWV9NT0RFX0JBU0UsIGNzcjEud29yZCk7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlN3aXRjaEJldHdlZW5XZXBBbmRDa2lwOiBtb2RpZnkgQlNTMCBjaXBoZXIgdG8gJXNcbiIsIENpcGhlck5hbWVbY3NyMS5maWVsZC5Cc3MwS2V5MENpcGhlckFsZ10pKTsKKwl9Cit9CisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjaWZuZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCitWT0lEICAgIFNlbmRBc3NvY0lFc1RvV3BhU3VwcGxpY2FudCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiBwQWQpCit7CisgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgIHVuc2lnbmVkIGNoYXIgY3VzdG9tW0lXX0NVU1RPTV9NQVhdID0gezB9OworCisgICAgaWYgKChwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbiArIDE3KSA8PSBJV19DVVNUT01fTUFYKQorICAgIHsKKyAgICAgICAgc3ByaW50ZihjdXN0b20sICJBU1NPQ0lORk9fUmVxSUVzPSIpOworCSAgICBOZGlzTW92ZU1lbW9yeShjdXN0b20rMTcsIHBBZC0+U3RhQ2ZnLlJlcVZhcklFcywgcEFkLT5TdGFDZmcuUmVxVmFySUVMZW4pOworCSAgICBtZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisgICAgICAgIHdycXUuZGF0YS5sZW5ndGggPSBwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbiArIDE3OworICAgICAgICB3cnF1LmRhdGEuZmxhZ3MgPSBSVF9SRVFJRV9FVkVOVF9GTEFHOworICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIGN1c3RvbSk7CisKKyAgICAgICAgbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOworICAgICAgICB3cnF1LmRhdGEuZmxhZ3MgPSBSVF9BU1NPQ0lORk9fRVZFTlRfRkxBRzsKKyAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJwQWQtPlN0YUNmZy5SZXFWYXJJRUxlbiArIDE3ID4gTUFYX0NVU1RPTV9MRU5cbiIpKTsKKworICAgIHJldHVybjsKK30KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCitpbnQgd2V4dF9ub3RpZnlfZXZlbnRfYXNzb2MoCisJSU4gIFJUTVBfQURBUFRFUiAqcEFkKQoreworICAgIHVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKyAgICBjaGFyIGN1c3RvbVtJV19DVVNUT01fTUFYXSA9IHswfTsKKworI2lmIFdJUkVMRVNTX0VYVCA+IDE3CisgICAgaWYgKHBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuIDw9IElXX0NVU1RPTV9NQVgpCisgICAgeworICAgICAgICB3cnF1LmRhdGEubGVuZ3RoID0gcEFkLT5TdGFDZmcuUmVxVmFySUVMZW47CisgICAgICAgIG1lbWNweShjdXN0b20sIHBBZC0+U3RhQ2ZnLlJlcVZhcklFcywgcEFkLT5TdGFDZmcuUmVxVmFySUVMZW4pOworICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkFTU09DUkVRSUUsICZ3cnF1LCBjdXN0b20pOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuID4gTUFYX0NVU1RPTV9MRU5cbiIpKTsKKyNlbHNlCisgICAgaWYgKCgocEFkLT5TdGFDZmcuUmVxVmFySUVMZW4qMikgKyAxNykgPD0gSVdfQ1VTVE9NX01BWCkKKyAgICB7CisgICAgICAgIFVDSEFSICAgaWR4OworICAgICAgICB3cnF1LmRhdGEubGVuZ3RoID0gKHBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuKjIpICsgMTc7CisgICAgICAgIHNwcmludGYoY3VzdG9tLCAiQVNTT0NJTkZPKFJlcUlFcz0iKTsKKyAgICAgICAgZm9yIChpZHg9MDsgaWR4PHBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuOyBpZHgrKykKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGN1c3RvbSwgIiVzJTAyeCIsIGN1c3RvbSwgcEFkLT5TdGFDZmcuUmVxVmFySUVzW2lkeF0pOworICAgICAgICB3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgSVdFVkNVU1RPTSwgJndycXUsIGN1c3RvbSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiKHBBZC0+U3RhQ2ZnLlJlcVZhcklFTGVuKjIpICsgMTcgPiBNQVhfQ1VTVE9NX0xFTlxuIikpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKKworfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKworQk9PTEVBTiBTdGFBZGRNYWNUYWJsZUVudHJ5KAorCUlOICBQUlRNUF9BREFQVEVSCQlwQWQsCisJSU4gIFBNQUNfVEFCTEVfRU5UUlkJcEVudHJ5LAorCUlOICBVQ0hBUgkJCQlNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzLAorCUlOICBIVF9DQVBBQklMSVRZX0lFCSpwSHRDYXBhYmlsaXR5LAorCUlOICBVQ0hBUgkJCQlIdENhcGFiaWxpdHlMZW4sCisJSU4gIFVTSE9SVCAgICAgICAgCQlDYXBhYmlsaXR5SW5mbykKK3sKKwlVQ0hBUiAgICAgICAgICAgIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOworCisJaWYgKEFESE9DX09OKHBBZCkpCisJCUNMSUVOVF9TVEFUVVNfQ0xFQVJfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKTsKKworCXN3aXRjaCAoTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcykKKyAgICB7CisgICAgICAgIGNhc2UgMTA4OiBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV81NDsgICBicmVhazsKKyAgICAgICAgY2FzZSA5NjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzQ4OyAgIGJyZWFrOworICAgICAgICBjYXNlIDcyOiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMzY7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDg6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8yNDsgICBicmVhazsKKyAgICAgICAgY2FzZSAzNjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzE4OyAgIGJyZWFrOworICAgICAgICBjYXNlIDI0OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTg6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV85OyAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMjogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzY7ICAgIGJyZWFrOworICAgICAgICBjYXNlIDIyOiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTE7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTE6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV81XzU7ICBicmVhazsKKyAgICAgICAgY2FzZSA0OiAgIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI7ICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6ICAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTsgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExRykgJiYgKE1heFN1cHBvcnRlZFJhdGUgPCBSQVRFX0ZJUlNUX09GRE1fUkFURSkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCS8vIDExbiBvbmx5CisJaWYgKCgocEFkLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFOXzJfNEcpIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMU5fNUcpKSYmIChIdENhcGFiaWxpdHlMZW4gPT0gMCkpCisJCXJldHVybiBGQUxTRTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCWlmICghcEVudHJ5KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCWlmIChwRW50cnkpCisJeworCQlwRW50cnktPlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJCWlmICgoTWF4U3VwcG9ydGVkUmF0ZSA8IFJBVEVfRklSU1RfT0ZETV9SQVRFKSB8fAorCQkJKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQikpCisJCXsKKwkJCXBFbnRyeS0+UmF0ZUxlbiA9IDQ7CisJCQlpZiAoTWF4U3VwcG9ydGVkUmF0ZSA+PSBSQVRFX0ZJUlNUX09GRE1fUkFURSkKKwkJCQlNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsKKwkJfQorCQllbHNlCisJCQlwRW50cnktPlJhdGVMZW4gPSAxMjsKKworCQlwRW50cnktPk1heEhUUGh5TW9kZS53b3JkID0gMDsKKwkJcEVudHJ5LT5NaW5IVFBoeU1vZGUud29yZCA9IDA7CisJCXBFbnRyeS0+SFRQaHlNb2RlLndvcmQgPSAwOworCQlwRW50cnktPk1heFN1cHBvcnRlZFJhdGUgPSBNYXhTdXBwb3J0ZWRSYXRlOworCQlpZiAocEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlIDwgUkFURV9GSVJTVF9PRkRNX1JBVEUpCisJCXsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZTsKKwkJCXBFbnRyeS0+TWluSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJCXBFbnRyeS0+TWluSFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZTsKKwkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCXBFbnRyeS0+TWluSFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZV07CisJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKKwkJfQorCQlwRW50cnktPkNhcGFiaWxpdHlJbmZvID0gQ2FwYWJpbGl0eUluZm87CisJCUNMSUVOVF9TVEFUVVNfQ0xFQVJfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX0FHR1JFR0FUSU9OX0NBUEFCTEUpOworCQlDTElFTlRfU1RBVFVTX0NMRUFSX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19QSUdHWUJBQ0tfQ0FQQUJMRSk7CisJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJLy8gSWYgdGhpcyBFbnRyeSBzdXBwb3J0cyA4MDIuMTFuLCB1cGdyYWRlIHRvIEhUIHJhdGUuCisJaWYgKChIdENhcGFiaWxpdHlMZW4gIT0gMCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkpCisJeworCQlVQ0hBUglqLCBiaXRtYXNrOyAvL2ssYml0bWFzazsKKwkJQ0hBUiAgICBpOworCisJCWlmIChBREhPQ19PTihwQWQpKQorCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKTsKKwkJaWYgKChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uR0YpICYmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuR0YpKQorCQl7CisJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVEdSRUVORklFTEQ7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKKwkJCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uTm9uR0YgPSBUUlVFOworCQkJcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50ID0gMTsKKwkJfQorCisJCWlmICgocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLkNoYW5uZWxXaWR0aCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5DaGFubmVsV2lkdGgpKQorCQl7CisJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVz0gQldfNDA7CisJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjQwKSYocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlNob3J0R0lmb3I0MCkpOworCQl9CisJCWVsc2UKKwkJeworCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKwkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSAoKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yMjApJihwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjIwKSk7CisJCQlwQWQtPk1hY1RhYi5mQW55U3RhdGlvbjIwT25seSA9IFRSVUU7CisJCX0KKworCQkvLyAzKjMKKwkJaWYgKHBBZC0+TUFDVmVyc2lvbiA+PSBSQUxJTktfMjg4M19WRVJTSU9OICYmIHBBZC0+TUFDVmVyc2lvbiA8IFJBTElOS18zMDcwX1ZFUlNJT04pCisJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5UeEJGID0gcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLlR4QkY7CisKKwkJLy8gZmluZCBtYXggZml4ZWQgcmF0ZQorCQlmb3IgKGk9MjM7IGk+PTA7IGktLSkgLy8gMyozCisJCXsKKwkJCWogPSBpLzg7CisJCQliaXRtYXNrID0gKDE8PChpLShqKjgpKSk7CisJCQlpZiAoKHBBZC0+U3RhQ2ZnLkRlc2lyZWRIdFBoeUluZm8uTUNTU2V0W2pdICYgYml0bWFzaykgJiYgKHBIdENhcGFiaWxpdHktPk1DU1NldFtqXSAmIGJpdG1hc2spKQorCQkJeworCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaT09MCkKKwkJCQlicmVhazsKKwkJfQorCisKKwkJaWYgKHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTICE9IE1DU19BVVRPKQorCQl7CisJCQlpZiAocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPT0gMzIpCisJCQl7CisJCQkJLy8gRml4IE1DUyBhcyBIVCBEdXBsaWNhdGVkIE1vZGUKKwkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVyA9IDE7CisJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRNSVg7CisJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU1RCQyA9IDA7CisJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IDA7CisJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gMzI7CisJCQl9CisJCQllbHNlIGlmIChwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPiBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTKQorCQkJeworCQkJCS8vIFNUQSBzdXBwb3J0cyBmaXhlZCBNQ1MKKwkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQkJfQorCQl9CisKKwkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU1RCQyA9IChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uUnhTVEJDICYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5UeFNUQkMpKTsKKwkJcEVudHJ5LT5NcGR1RGVuc2l0eSA9IHBIdENhcGFiaWxpdHktPkh0Q2FwUGFybS5NcGR1RGVuc2l0eTsKKwkJcEVudHJ5LT5NYXhSQW1wZHVGYWN0b3IgPSBwSHRDYXBhYmlsaXR5LT5IdENhcFBhcm0uTWF4UkFtcGR1RmFjdG9yOworCQlwRW50cnktPk1tcHNNb2RlID0gKFVDSEFSKXBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5NaW1vUHM7CisJCXBFbnRyeS0+QU1zZHVTaXplID0gKFVDSEFSKXBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5BTXNkdVNpemU7CisJCXBFbnRyeS0+SFRQaHlNb2RlLndvcmQgPSBwRW50cnktPk1heEhUUGh5TW9kZS53b3JkOworCisJCWlmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVFbmFibGUgJiYgKHBBZC0+Q29tbW9uQ2ZnLlJFR0JBQ2FwYWJpbGl0eS5maWVsZC5BdXRvQkEgPT0gRkFMU0UpKQorCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX0FNU0RVX0lOVVNFRCk7CisJCWlmIChwSHRDYXBhYmlsaXR5LT5IdENhcEluZm8uU2hvcnRHSWZvcjIwKQorCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1NHSTIwX0NBUEFCTEUpOworCQlpZiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlNob3J0R0lmb3I0MCkKKwkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19TR0k0MF9DQVBBQkxFKTsKKwkJaWYgKHBIdENhcGFiaWxpdHktPkh0Q2FwSW5mby5UeFNUQkMpCisJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfVHhTVEJDX0NBUEFCTEUpOworCQlpZiAocEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvLlJ4U1RCQykKKwkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19SeFNUQkNfQ0FQQUJMRSk7CisJCWlmIChwSHRDYXBhYmlsaXR5LT5FeHRIdENhcEluZm8uUGx1c0hUQykKKwkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19IVENfQ0FQQUJMRSk7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5iUmRnICYmIHBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mby5SREdTdXBwb3J0KQorCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1JER19DQVBBQkxFKTsKKwkJaWYgKHBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mby5NQ1NGZWVkYmFjayA9PSAweDAzKQorCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX01DU0ZFRURCQUNLX0NBUEFCTEUpOworCX0KKwllbHNlCisJeworCQlwQWQtPk1hY1RhYi5mQW55U3RhdGlvbklzTGVnYWN5ID0gVFJVRTsKKwl9CisKKwlOZGlzTW92ZU1lbW9yeSgmcEVudHJ5LT5IVENhcGFiaWxpdHksIHBIdENhcGFiaWxpdHksIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlwRW50cnktPkhUUGh5TW9kZS53b3JkID0gcEVudHJ5LT5NYXhIVFBoeU1vZGUud29yZDsKKwlwRW50cnktPkN1cnJUeFJhdGUgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisKKwkvLyBTZXQgYXNpYyBhdXRvIGZhbGwgYmFjaworCWlmIChwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCA9PSBUUlVFKQorCXsKKwkJUFVDSEFSCQkJCQlwVGFibGU7CisJCVVDSEFSCQkJCQlUYWJsZVNpemUgPSAwOworCisJCU1sbWVTZWxlY3RUeFJhdGVUYWJsZShwQWQsIHBFbnRyeSwgJnBUYWJsZSwgJlRhYmxlU2l6ZSwgJnBFbnRyeS0+Q3VyclR4UmF0ZUluZGV4KTsKKwkJcEVudHJ5LT5iQXV0b1R4UmF0ZVN3aXRjaCA9IFRSVUU7CisJfQorCWVsc2UKKwl7CisJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERTsKKwkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUzsKKwkJcEVudHJ5LT5iQXV0b1R4UmF0ZVN3aXRjaCA9IEZBTFNFOworCisJCS8vIElmIHRoZSBsZWdhY3kgbW9kZSBpcyBzZXQsIG92ZXJ3cml0ZSB0aGUgdHJhbnNtaXQgc2V0dGluZyBvZiB0aGlzIGVudHJ5LgorCQlSVE1QVXBkYXRlTGVnYWN5VHhTZXR0aW5nKChVQ0hBUilwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlLCBwRW50cnkpOworCX0KKworCXBFbnRyeS0+UG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwlwRW50cnktPlNzdCA9IFNTVF9BU1NPQzsKKwlwRW50cnktPkF1dGhTdGF0ZSA9IEFTX0FVVEhfT1BFTjsKKwlwRW50cnktPkF1dGhNb2RlID0gcEFkLT5TdGFDZmcuQXV0aE1vZGU7CisJcEVudHJ5LT5XZXBTdGF0dXMgPSBwQWQtPlN0YUNmZy5XZXBTdGF0dXM7CisKKwlOZGlzUmVsZWFzZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmbmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIGlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApCisgICAgeworICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisKKyAgICAgICAgU2VuZEFzc29jSUVzVG9XcGFTdXBwbGljYW50KHBBZCk7CisgICAgICAgIG1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKyAgICAgICAgd3JxdS5kYXRhLmZsYWdzID0gUlRfQVNTT0NfRVZFTlRfRkxBRzsKKyAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIElXRVZDVVNUT00sICZ3cnF1LCBOVUxMKTsKKyAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIHsKKyAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgICAgICB3ZXh0X25vdGlmeV9ldmVudF9hc3NvYyhwQWQpOworCisgICAgICAgIG1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgMCwgTUFDX0FERFJfTEVOKTsKKyAgICAgICAgbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBwQWQtPk1sbWVBdXguQnNzaWQsIE1BQ19BRERSX0xFTik7CisgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKworICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCXJldHVybiBUUlVFOworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL2F1dGguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL2F1dGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzJiNWRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXV0aC5jCkBAIC0wLDAgKzEsNDc1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCWF1dGguYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUpvaG4JCTIwMDQtOS0zCQlwb3J0aW5nIGZyb20gUlQyNTAwCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIGF1dGhlbnRpY2F0ZSBzdGF0ZSBtYWNoaW5lIGluaXQsIGluY2x1ZGluZyBzdGF0ZSB0cmFuc2l0aW9uIGFuZCB0aW1lciBpbml0CisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgU20gLSBwb2ludGVyIHRvIHRoZSBhdXRoIHN0YXRlIG1hY2hpbmUKKyAgICBOb3RlOgorICAgICAgICBUaGUgc3RhdGUgbWFjaGluZSBsb29rcyBsaWtlIHRoaXMKKworICAgICAgICAgICAgICAgICAgICAgICAgQVVUSF9SRVFfSURMRSAgICAgICAgICAgQVVUSF9XQUlUX1NFUTIgICAgICAgICAgICAgICAgICAgQVVUSF9XQUlUX1NFUTQKKyAgICBNVDJfTUxNRV9BVVRIX1JFUSAgIG1sbWVfYXV0aF9yZXFfYWN0aW9uICAgIGludmFsaWRfc3RhdGVfd2hlbl9hdXRoICAgICAgICAgIGludmFsaWRfc3RhdGVfd2hlbl9hdXRoCisgICAgTVQyX1BFRVJfQVVUSF9FVkVOICBkcm9wICAgICAgICAgICAgICAgICAgICBwZWVyX2F1dGhfZXZlbl9hdF9zZXEyX2FjdGlvbiAgICBwZWVyX2F1dGhfZXZlbl9hdF9zZXE0X2FjdGlvbgorICAgIE1UMl9BVVRIX1RJTUVPVVQgICAgRHJvcCAgICAgICAgICAgICAgICAgICAgYXV0aF90aW1lb3V0X2FjdGlvbiAgICAgICAgICAgICAgYXV0aF90aW1lb3V0X2FjdGlvbgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKwordm9pZCBBdXRoU3RhdGVNYWNoaW5lSW5pdCgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBTVEFURV9NQUNISU5FICpTbSwKKyAgICBPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCit7CisgICAgU3RhdGVNYWNoaW5lSW5pdChTbSwgVHJhbnMsIE1BWF9BVVRIX1NUQVRFLCBNQVhfQVVUSF9NU0csIChTVEFURV9NQUNISU5FX0ZVTkMpRHJvcCwgQVVUSF9SRVFfSURMRSwgQVVUSF9NQUNISU5FX0JBU0UpOworCisgICAgLy8gdGhlIGZpcnN0IGNvbHVtbgorICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgQVVUSF9SRVFfSURMRSwgTVQyX01MTUVfQVVUSF9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZUF1dGhSZXFBY3Rpb24pOworCisgICAgLy8gdGhlIHNlY29uZCBjb2x1bW4KKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfV0FJVF9TRVEyLCBNVDJfTUxNRV9BVVRIX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuQXV0aCk7CisgICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBBVVRIX1dBSVRfU0VRMiwgTVQyX1BFRVJfQVVUSF9FVkVOLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJBdXRoUnNwQXRTZXEyQWN0aW9uKTsKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfV0FJVF9TRVEyLCBNVDJfQVVUSF9USU1FT1VULCAoU1RBVEVfTUFDSElORV9GVU5DKUF1dGhUaW1lb3V0QWN0aW9uKTsKKworICAgIC8vIHRoZSB0aGlyZCBjb2x1bW4KKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfV0FJVF9TRVE0LCBNVDJfTUxNRV9BVVRIX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuQXV0aCk7CisgICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBBVVRIX1dBSVRfU0VRNCwgTVQyX1BFRVJfQVVUSF9FVkVOLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJBdXRoUnNwQXRTZXE0QWN0aW9uKTsKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfV0FJVF9TRVE0LCBNVDJfQVVUSF9USU1FT1VULCAoU1RBVEVfTUFDSElORV9GVU5DKUF1dGhUaW1lb3V0QWN0aW9uKTsKKworCVJUTVBJbml0VGltZXIocEFkLCAmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwgR0VUX1RJTUVSX0ZVTkNUSU9OKEF1dGhUaW1lb3V0KSwgcEFkLCBGQUxTRSk7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYXQgdGltZXIgdGhyZWFkIHdoZW4gYXV0aCB0aW1lciBleHBpcmVzCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXV0aFRpbWVvdXQoCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorICAgIElOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworICAgIFJUTVBfQURBUFRFUiAqcEFkID0gKFJUTVBfQURBUFRFUiAqKUZ1bmN0aW9uQ29udGV4dDsKKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQVVUSCAtIEF1dGhUaW1lb3V0XG4iKSk7CisKKwkvLyBEbyBub3RoaW5nIGlmIHRoZSBkcml2ZXIgaXMgc3RhcnRpbmcgaGFsdCBzdGF0ZS4KKwkvLyBUaGlzIG1pZ2h0IGhhcHBlbiB3aGVuIHRpbWVyIGFscmVhZHkgYmVlbiBmaXJlZCBiZWZvcmUgY2FuY2VsIHRpbWVyIHdpdGggbWxtZWhhbHQKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0hBTFRfSU5fUFJPR1JFU1MgfCBmUlRNUF9BREFQVEVSX05JQ19OT1RfRVhJU1QpKQorCQlyZXR1cm47CisKKwkvLyBzZW5kIGEgZGUtYXV0aCB0byByZXNldCBBUCdzIHN0YXRlIG1hY2hpbmUgKFBhdGNoIEFQLURpcjYzNSkKKwlpZiAocEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9PSBBVVRIX1dBSVRfU0VRMikKKwkJQ2xzMmVyckFjdGlvbihwQWQsIHBBZC0+TWxtZUF1eC5Cc3NpZCk7CisKKworICAgIE1sbWVFbnF1ZXVlKHBBZCwgQVVUSF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9USU1FT1VULCAwLCBOVUxMKTsKKyAgICBSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZCk7Cit9CisKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVBdXRoUmVxQWN0aW9uKAorICAgIElOIFBSVE1QX0FEQVBURVIgcEFkLAorICAgIElOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKyAgICBVQ0hBUiAgICAgICAgICAgICAgQWRkcls2XTsKKyAgICBVU0hPUlQgICAgICAgICAgICAgQWxnLCBTZXEsIFN0YXR1czsKKyAgICBVTE9ORyAgICAgICAgICAgICAgVGltZW91dDsKKyAgICBIRUFERVJfODAyXzExICAgICAgQXV0aEhkcjsKKyAgICBCT09MRUFOICAgICAgICAgICAgVGltZXJDYW5jZWxsZWQ7CisgICAgTkRJU19TVEFUVVMgICAgICAgIE5TdGF0dXM7CisgICAgUFVDSEFSICAgICAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworICAgIFVMT05HICAgICAgICAgICAgICBGcmFtZUxlbiA9IDA7CisKKwkvLyBCbG9jayBhbGwgYXV0aGVudGljYXRpb24gcmVxdWVzdCBkdXJuaW5nIFdQQSBibG9jayBwZXJpb2QKKwlpZiAocEFkLT5TdGFDZmcuYkJsb2NrQXNzb2MgPT0gVFJVRSkKKwl7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBCbG9jayBBdXRoIHJlcXVlc3QgZHVybmluZyBXUEEgYmxvY2sgcGVyaW9kIVxuIikpOworICAgICAgICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKKyAgICAgICAgU3RhdHVzID0gTUxNRV9TVEFURV9NQUNISU5FX1JFSkVDVDsKKyAgICAgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1cyk7CisJfQorICAgIGVsc2UgaWYoTWxtZUF1dGhSZXFTYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgQWRkciwgJlRpbWVvdXQsICZBbGcpKQorICAgIHsKKyAgICAgICAgLy8gcmVzZXQgdGltZXIKKyAgICAgICAgUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQXV0aFRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworICAgICAgICBDT1BZX01BQ19BRERSKHBBZC0+TWxtZUF1eC5Cc3NpZCwgQWRkcik7CisgICAgICAgIHBBZC0+TWxtZUF1eC5BbGcgID0gQWxnOworICAgICAgICBTZXEgPSAxOworICAgICAgICBTdGF0dXMgPSBNTE1FX1NVQ0NFU1M7CisKKyAgICAgICAgTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKyAgICAgICAgaWYoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gTWxtZUF1dGhSZXFBY3Rpb24oQWxnOiVkKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkXG4iLCBBbGcpKTsKKyAgICAgICAgICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgICAgICAgICAgU3RhdHVzID0gTUxNRV9GQUlMX05PX1JFU09VUkNFOworICAgICAgICAgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gU2VuZCBBVVRIIHJlcXVlc3Qgc2VxIzEgKEFsZz0lZCkuLi5cbiIsIEFsZykpOworICAgICAgICBNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkF1dGhIZHIsIFNVQlRZUEVfQVVUSCwgMCwgQWRkciwgcEFkLT5NbG1lQXV4LkJzc2lkKTsKKyAgICAgICAgTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICZGcmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCZBdXRoSGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAgICAgICAgICAgICAgICAgICAgJkFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICZTZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAmU3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisgICAgICAgIE1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworICAgIAlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisgICAgICAgIFJUTVBTZXRUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwgVGltZW91dCk7CisgICAgICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1dBSVRfU0VRMjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgREJHUFJJTlRfRVJSKCgiQVVUSCAtIE1sbWVBdXRoUmVxQWN0aW9uKCkgc2FuaXR5IGNoZWNrIGZhaWxlZFxuIikpOworICAgICAgICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKKyAgICAgICAgU3RhdHVzID0gTUxNRV9JTlZBTElEX0ZPUk1BVDsKKyAgICAgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1cyk7CisgICAgfQorfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlckF1dGhSc3BBdFNlcTJBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworICAgIFVDSEFSICAgICAgICAgQWRkcjJbTUFDX0FERFJfTEVOXTsKKyAgICBVU0hPUlQgICAgICAgIFNlcSwgU3RhdHVzLCBSZW1vdGVTdGF0dXMsIEFsZzsKKyAgICBVQ0hBUiAgICAgICAgIENobGdUZXh0W0NJUEhFUl9URVhUX0xFTl07CisgICAgVUNIQVIgICAgICAgICBDeXBlckNobGdUZXh0W0NJUEhFUl9URVhUX0xFTiArIDggKyA4XTsKKyAgICBVQ0hBUiAgICAgICAgIEVsZW1lbnRbMl07CisgICAgSEVBREVSXzgwMl8xMSBBdXRoSGRyOworICAgIEJPT0xFQU4gICAgICAgVGltZXJDYW5jZWxsZWQ7CisgICAgUFVDSEFSICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKyAgICBORElTX1NUQVRVUyAgIE5TdGF0dXM7CisgICAgVUxPTkcgICAgICAgICBGcmFtZUxlbiA9IDA7CisgICAgVVNIT1JUICAgICAgICBTdGF0dXMyOworCisgICAgaWYgKFBlZXJBdXRoU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIEFkZHIyLCAmQWxnLCAmU2VxLCAmU3RhdHVzLCBDaGxnVGV4dCkpCisgICAgeworICAgICAgICBpZiAoTUFDX0FERFJfRVFVQUwocEFkLT5NbG1lQXV4LkJzc2lkLCBBZGRyMikgJiYgU2VxID09IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBSZWNlaXZlIEFVVEhfUlNQIHNlcSMyIHRvIG1lIChBbGc9JWQsIFN0YXR1cz0lZClcbiIsIEFsZywgU3RhdHVzKSk7CisgICAgICAgICAgICBSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5BdXRoVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKyAgICAgICAgICAgIGlmIChTdGF0dXMgPT0gTUxNRV9TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEF1dGhlbnRpY2F0aW9uIE1vZGUgIkxFQVAiIGhhcyBhbGxvdyBmb3IgQ0NYIDEuWAorICAgICAgICAgICAgICAgIGlmICgocEFkLT5NbG1lQXV4LkFsZyA9PSBOZGlzODAyXzExQXV0aE1vZGVPcGVuKQorI2lmZGVmIExFQVBfU1VQUE9SVAorCQkJCQl8fCAocEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKwkJCQkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKyAgICAgICAgICAgICAgICAgICAgcEFkLT5NbG1lLkxlYXBNYWNoaW5lLkN1cnJTdGF0ZSA9IExFQVBfSURMRTsKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICAgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0FVVEhfQ09ORiwgMiwgJlN0YXR1cyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIDIuIHNoYXJlZCBrZXksIG5lZWQgdG8gYmUgY2hhbGxlbmdlZAorICAgICAgICAgICAgICAgICAgICBTZXErKzsKKyAgICAgICAgICAgICAgICAgICAgUmVtb3RlU3RhdHVzID0gTUxNRV9TVUNDRVNTOworCisJCQkJCS8vIEdldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisgICAgICAgICAgICAgICAgICAgIE5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIGlmKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIFBlZXJBdXRoUnNwQXRTZXEyQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzMiA9IE1MTUVfRkFJTF9OT19SRVNPVVJDRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BVVRIX0NPTkYsIDIsICZTdGF0dXMyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBTZW5kIEFVVEggcmVxdWVzdCBzZXEjMy4uLlxuIikpOworICAgICAgICAgICAgICAgICAgICBNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkF1dGhIZHIsIFNVQlRZUEVfQVVUSCwgMCwgQWRkcjIsIHBBZC0+TWxtZUF1eC5Cc3NpZCk7CisgICAgICAgICAgICAgICAgICAgIEF1dGhIZHIuRkMuV2VwID0gMTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRW5jcnlwdCBjaGFsbGVuZ2UgdGV4dCAmIGF1dGggaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgUlRNUEluaXRXZXBFbmdpbmUoCisgICAgICAgICAgICAgICAgICAgIAlwQWQsCisgICAgICAgICAgICAgICAgICAgIAlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleSwKKyAgICAgICAgICAgICAgICAgICAgCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCwKKyAgICAgICAgICAgICAgICAgICAgCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5TGVuLAorICAgICAgICAgICAgICAgICAgICAJQ3lwZXJDaGxnVGV4dCk7CisKKwkJCQkJQWxnID0gY3B1MmxlMTYoKihVU0hPUlQgKikmQWxnKTsKKwkJCQkJU2VxID0gY3B1MmxlMTYoKihVU0hPUlQgKikmU2VxKTsKKwkJCQkJUmVtb3RlU3RhdHVzPSBjcHUybGUxNigqKFVTSE9SVCAqKSZSZW1vdGVTdGF0dXMpOworCisJCQkJCVJUTVBFbmNyeXB0RGF0YShwQWQsIChQVUNIQVIpICZBbGcsIEN5cGVyQ2hsZ1RleHQgKyA0LCAyKTsKKwkJCQkJUlRNUEVuY3J5cHREYXRhKHBBZCwgKFBVQ0hBUikgJlNlcSwgQ3lwZXJDaGxnVGV4dCArIDYsIDIpOworCQkJCQlSVE1QRW5jcnlwdERhdGEocEFkLCAoUFVDSEFSKSAmUmVtb3RlU3RhdHVzLCBDeXBlckNobGdUZXh0ICsgOCwgMik7CisJCQkJCUVsZW1lbnRbMF0gPSAxNjsKKwkJCQkJRWxlbWVudFsxXSA9IDEyODsKKwkJCQkJUlRNUEVuY3J5cHREYXRhKHBBZCwgRWxlbWVudCwgQ3lwZXJDaGxnVGV4dCArIDEwLCAyKTsKKwkJCQkJUlRNUEVuY3J5cHREYXRhKHBBZCwgQ2hsZ1RleHQsIEN5cGVyQ2hsZ1RleHQgKyAxMiwgMTI4KTsKKwkJCQkJUlRNUFNldElDVihwQWQsIEN5cGVyQ2hsZ1RleHQgKyAxNDApOworICAgICAgICAgICAgICAgICAgICBNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgICAgICZGcmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCAgICAmQXV0aEhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0lQSEVSX1RFWFRfTEVOICsgMTYsICAgICBDeXBlckNobGdUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisgICAgICAgICAgICAgICAgICAgIE1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworICAgICAgICAgICAgICAgIAlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisgICAgICAgICAgICAgICAgICAgIFJUTVBTZXRUaW1lcigmcEFkLT5NbG1lQXV4LkF1dGhUaW1lciwgQVVUSF9USU1FT1VUKTsKKyAgICAgICAgICAgICAgICAgICAgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfV0FJVF9TRVE0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKyAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vSW52YWxpZCBBdXRoZW50aWNhdGlvbiBwb3NzaWJsZSByb2d1ZSBBUAorICAgICAgICAgICAgICAgICAgICAvL0FkZCB0aGlzIEFwIHRvIFJvZ3VlIEFQLgorICAgICAgICAgICAgICAgICAgICBSb2d1ZUFwVGFibGVTZXRFbnRyeShwQWQsICZwQWQtPlN0YUNmZy5Sb2d1ZUFwVGFiLCBBZGRyMiwgTEVBUF9SRUFTT05fSU5WQUxJRF9BVVRIKTsKKwkJCQl9CisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuQXV0aEZhaWxSZWFzb24gPSBTdGF0dXM7CisgICAgICAgICAgICAgICAgQ09QWV9NQUNfQUREUihwQWQtPlN0YUNmZy5BdXRoRmFpbFN0YSwgQWRkcjIpOworICAgICAgICAgICAgICAgIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUgPSBBVVRIX1JFUV9JRExFOworICAgICAgICAgICAgICAgIE1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BVVRIX0NPTkYsIDIsICZTdGF0dXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBQZWVyQXV0aFNhbml0eSgpIHNhbml0eSBjaGVjayBmYWlsXG4iKSk7CisgICAgfQorfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlckF1dGhSc3BBdFNlcTRBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworICAgIFVDSEFSICAgICAgICAgQWRkcjJbTUFDX0FERFJfTEVOXTsKKyAgICBVU0hPUlQgICAgICAgIEFsZywgU2VxLCBTdGF0dXM7CisgICAgQ0hBUiAgICAgICAgICBDaGxnVGV4dFtDSVBIRVJfVEVYVF9MRU5dOworICAgIEJPT0xFQU4gICAgICAgVGltZXJDYW5jZWxsZWQ7CisKKyAgICBpZihQZWVyQXV0aFNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyMiwgJkFsZywgJlNlcSwgJlN0YXR1cywgQ2hsZ1RleHQpKQorICAgIHsKKyAgICAgICAgaWYoTUFDX0FERFJfRVFVQUwocEFkLT5NbG1lQXV4LkJzc2lkLCBBZGRyMikgJiYgU2VxID09IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBSZWNlaXZlIEFVVEhfUlNQIHNlcSM0IHRvIG1lXG4iKSk7CisgICAgICAgICAgICBSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5BdXRoVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKyAgICAgICAgICAgIGlmIChTdGF0dXMgIT0gTUxNRV9TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLkF1dGhGYWlsUmVhc29uID0gU3RhdHVzOworICAgICAgICAgICAgICAgIENPUFlfTUFDX0FERFIocEFkLT5TdGFDZmcuQXV0aEZhaWxTdGEsIEFkZHIyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7CisgICAgICAgICAgICBNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gUGVlckF1dGhSc3BBdFNlcTRBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbFxuIikpOworICAgIH0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVEZWF1dGhSZXFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworICAgIE1MTUVfREVBVVRIX1JFUV9TVFJVQ1QgKnBJbmZvOworICAgIEhFQURFUl84MDJfMTEgRGVhdXRoSGRyOworICAgIFBVQ0hBUiAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisgICAgTkRJU19TVEFUVVMgICBOU3RhdHVzOworICAgIFVMT05HICAgICAgICAgRnJhbWVMZW4gPSAwOworICAgIFVTSE9SVCAgICAgICAgU3RhdHVzOworCisgICAgcEluZm8gPSAoTUxNRV9ERUFVVEhfUkVRX1NUUlVDVCAqKUVsZW0tPk1zZzsKKworICAgIE5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisgICAgaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFVVEggLSBNbG1lRGVhdXRoUmVxQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxcbiIpKTsKKyAgICAgICAgcEFkLT5NbG1lLkF1dGhNYWNoaW5lLkN1cnJTdGF0ZSA9IEFVVEhfUkVRX0lETEU7CisgICAgICAgIFN0YXR1cyA9IE1MTUVfRkFJTF9OT19SRVNPVVJDRTsKKyAgICAgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0RFQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIFNlbmQgREUtQVVUSCByZXF1ZXN0IChSZWFzb249JWQpLi4uXG4iLCBwSW5mby0+UmVhc29uKSk7CisgICAgTWd0TWFjSGVhZGVySW5pdChwQWQsICZEZWF1dGhIZHIsIFNVQlRZUEVfREVBVVRILCAwLCBwSW5mby0+QWRkciwgcEFkLT5NbG1lQXV4LkJzc2lkKTsKKyAgICBNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIRUFERVJfODAyXzExKSwmRGVhdXRoSGRyLAorICAgICAgICAgICAgICAgICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAmcEluZm8tPlJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisgICAgTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKworICAgIHBBZC0+U3RhQ2ZnLkRlYXV0aFJlYXNvbiA9IHBJbmZvLT5SZWFzb247CisgICAgQ09QWV9NQUNfQUREUihwQWQtPlN0YUNmZy5EZWF1dGhTdGEsIHBJbmZvLT5BZGRyKTsKKyAgICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKKyAgICBTdGF0dXMgPSBNTE1FX1NVQ0NFU1M7CisgICAgTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0RFQVVUSF9DT05GLCAyLCAmU3RhdHVzKTsKKworCS8vIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3IgZGVhdXRoZW50aWNhdGlvbgorCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfREVBVVRIX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBBdXRoVGltZW91dEFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisgICAgVVNIT1JUIFN0YXR1czsKKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBVVRIIC0gQXV0aFRpbWVvdXRBY3Rpb25cbiIpKTsKKyAgICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKKyAgICBTdGF0dXMgPSBNTE1FX1JFSl9USU1FT1VUOworICAgIE1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BVVRIX0NPTkYsIDIsICZTdGF0dXMpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgSW52YWxpZFN0YXRlV2hlbkF1dGgoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworICAgIFVTSE9SVCBTdGF0dXM7CisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIEludmFsaWRTdGF0ZVdoZW5BdXRoIChzdGF0ZT0lbGQpLCByZXNldCBBVVRIIHN0YXRlIG1hY2hpbmVcbiIsIHBBZC0+TWxtZS5BdXRoTWFjaGluZS5DdXJyU3RhdGUpKTsKKyAgICBwQWQtPk1sbWUuQXV0aE1hY2hpbmUuQ3VyclN0YXRlID0gQVVUSF9SRVFfSURMRTsKKyAgICBTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOworICAgIE1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9BVVRIX0NPTkYsIDIsICZTdGF0dXMpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNvbWUgU1RBL0FQCisgICAgTm90ZToKKyAgICAgICAgVGhpcyBhY3Rpb24gc2hvdWxkIG5ldmVyIHRyaWdnZXIgQVVUSCBzdGF0ZSB0cmFuc2l0aW9uLCB0aGVyZWZvcmUgd2UKKyAgICAgICAgc2VwYXJhdGUgaXQgZnJvbSBBVVRIIHN0YXRlIG1hY2hpbmUsIGFuZCBtYWtlIGl0IGFzIGEgc3RhbmRhbG9uZSBzZXJ2aWNlCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQ2xzMmVyckFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBQVUNIQVIgcEFkZHIpCit7CisgICAgSEVBREVSXzgwMl8xMSBEZWF1dGhIZHI7CisgICAgUFVDSEFSICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKyAgICBORElTX1NUQVRVUyAgIE5TdGF0dXM7CisgICAgVUxPTkcgICAgICAgICBGcmFtZUxlbiA9IDA7CisgICAgVVNIT1JUICAgICAgICBSZWFzb24gPSBSRUFTT05fQ0xTMkVSUjsKKworICAgIE5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7ICAvL0dldCBhbiB1bnVzZWQgbm9ucGFnZWQgbWVtb3J5CisgICAgaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQVVUSCAtIENsYXNzIDIgZXJyb3IsIFNlbmQgREVBVVRIIGZyYW1lLi4uXG4iKSk7CisgICAgTWd0TWFjSGVhZGVySW5pdChwQWQsICZEZWF1dGhIZHIsIFNVQlRZUEVfREVBVVRILCAwLCBwQWRkciwgcEFkLT5NbG1lQXV4LkJzc2lkKTsKKyAgICBNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIRUFERVJfODAyXzExKSwmRGVhdXRoSGRyLAorICAgICAgICAgICAgICAgICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAmUmVhc29uLAorICAgICAgICAgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKyAgICBNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisgICAgcEFkLT5TdGFDZmcuRGVhdXRoUmVhc29uID0gUmVhc29uOworICAgIENPUFlfTUFDX0FERFIocEFkLT5TdGFDZmcuRGVhdXRoU3RhLCBwQWRkcik7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvYXV0aF9yc3AuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL2F1dGhfcnNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhYTRiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL2F1dGhfcnNwLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJYXV0aF9yc3AuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUpvaG4JCTIwMDQtMTAtMQkJY29weSBmcm9tIFJUMjU2MAorKi8KKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBhdXRoZW50aWNhdGlvbiBzdGF0ZSBtYWNoaW5lIGluaXQgcHJvY2VkdXJlCisgICAgUGFyYW1ldGVyczoKKyAgICAgICAgU20gLSB0aGUgc3RhdGUgbWFjaGluZQorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgQXV0aFJzcFN0YXRlTWFjaGluZUluaXQoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gUFNUQVRFX01BQ0hJTkUgU20sCisgICAgSU4gU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCit7CisgICAgU3RhdGVNYWNoaW5lSW5pdChTbSwgVHJhbnMsIE1BWF9BVVRIX1JTUF9TVEFURSwgTUFYX0FVVEhfUlNQX01TRywgKFNUQVRFX01BQ0hJTkVfRlVOQylEcm9wLCBBVVRIX1JTUF9JRExFLCBBVVRIX1JTUF9NQUNISU5FX0JBU0UpOworCisgICAgLy8gY29sdW1uIDEKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIEFVVEhfUlNQX0lETEUsIE1UMl9QRUVSX0RFQVVUSCwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyRGVhdXRoQWN0aW9uKTsKKworICAgIC8vIGNvbHVtbiAyCisgICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBBVVRIX1JTUF9XQUlUX0NIQUwsIE1UMl9QRUVSX0RFQVVUSCwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyRGVhdXRoQWN0aW9uKTsKKworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBQZWVyQXV0aFNpbXBsZVJzcEdlbkFuZFNlbmQoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gUEhFQURFUl84MDJfMTEgcEhkcjgwMjExLAorICAgIElOIFVTSE9SVCBBbGcsCisgICAgSU4gVVNIT1JUIFNlcSwKKyAgICBJTiBVU0hPUlQgUmVhc29uLAorICAgIElOIFVTSE9SVCBTdGF0dXMpCit7CisgICAgSEVBREVSXzgwMl8xMSAgICAgQXV0aEhkcjsKKyAgICBVTE9ORyAgICAgICAgICAgICBGcmFtZUxlbiA9IDA7CisgICAgUFVDSEFSICAgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisgICAgTkRJU19TVEFUVVMgICAgICAgTlN0YXR1czsKKworICAgIGlmIChSZWFzb24gIT0gTUxNRV9TVUNDRVNTKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlciBBVVRIIGZhaWwuLi5cbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCS8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKyAgICBOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOworICAgIGlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNlbmQgQVVUSCByZXNwb25zZSAoc2VxIzIpLi4uXG4iKSk7CisgICAgTWd0TWFjSGVhZGVySW5pdChwQWQsICZBdXRoSGRyLCBTVUJUWVBFX0FVVEgsIDAsIHBIZHI4MDIxMS0+QWRkcjIsIHBBZC0+TWxtZUF1eC5Cc3NpZCk7CisgICAgTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEhFQURFUl84MDJfMTEpLCAgICAmQXV0aEhkciwKKyAgICAgICAgICAgICAgICAgICAgICAyLCAgICAgICAgICAgICAgICAgICAgICAgICZBbGcsCisgICAgICAgICAgICAgICAgICAgICAgMiwgICAgICAgICAgICAgICAgICAgICAgICAmU2VxLAorICAgICAgICAgICAgICAgICAgICAgIDIsICAgICAgICAgICAgICAgICAgICAgICAgJlJlYXNvbiwKKyAgICAgICAgICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisgICAgTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUGVlckRlYXV0aEFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBQTUxNRV9RVUVVRV9FTEVNIEVsZW0pCit7CisgICAgVUNIQVIgICAgICAgQWRkcjJbTUFDX0FERFJfTEVOXTsKKyAgICBVU0hPUlQgICAgICBSZWFzb247CisKKyAgICBpZiAoUGVlckRlYXV0aFNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBBZGRyMiwgJlJlYXNvbikpCisgICAgeworICAgICAgICBpZiAoSU5GUkFfT04ocEFkKSAmJiBNQUNfQUREUl9FUVVBTChBZGRyMiwgcEFkLT5Db21tb25DZmcuQnNzaWQpKQorICAgICAgICB7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkFVVEhfUlNQIC0gcmVjZWl2ZSBERS1BVVRIIGZyb20gb3VyIEFQIChSZWFzb249JWQpXG4iLCBSZWFzb24pKTsKKworCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisgICAgICAgICAgICAgICAgbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBNQUNfQUREUl9MRU4pOworICAgICAgICAgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisKKwkJCS8vIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3IgZGVhdXRoZW50aWNhdGlvbgorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX0RFQVVUSF9FVkVOVF9GTEFHLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIEJTUzAsIDApOworCisgICAgICAgICAgICBMaW5rRG93bihwQWQsIFRSVUUpOworCisgICAgICAgICAgICAvLyBBdXRoZW50aWNhdGlvbiBNb2RlIENpc2NvX0xFQVAgaGFzIHN0YXJ0IGEgdGltZXIKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBjYW5jZWwgaXQgaWYgdXNpbmcgTEVBUAorI2lmZGVmIExFQVBfU1VQUE9SVAorICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLkxlYXBBdXRoTW9kZSA9PSBDSVNDT19BdXRoTW9kZUxFQVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUlRNUENhbmNlbFRpbWVyKCZwQWQtPlN0YUNmZy5MZWFwQXV0aFRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworICAgICAgICAgICAgICAgIC8vQ2hlY2sgaXMgaXQgbWFjaCB0aGUgTEVBUCBBdXRoZW50aWNhdGlvbiBmYWlsZWQgYXMgcG9zc2libGUgYSBSb2d1ZSBBUAorICAgICAgICAgICAgICAgIC8vb24gaXQncyBQb3J0U2VjdXJlZCBub3QgZXF1YWwgdG8gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQgd2hpbGUgcHJvY2VzcyB0aGUgQXV0aGVudGljYXRvbi4KKyAgICAgICAgICAgICAgICBpZiAoKHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkICE9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEKSAmJiAocEFkLT5NbG1lLkxlYXBNYWNoaW5lLkN1cnJTdGF0ZSAhPSBMRUFQX0lETEUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUm9ndWVBcFRhYmxlU2V0RW50cnkocEFkLCAmcEFkLT5TdGFDZmcuUm9ndWVBcFRhYiwgQWRkcjIsIExFQVBfUkVBU09OX0FVVEhfVElNRU9VVCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQVVUSF9SU1AgLSBQZWVyRGVhdXRoQWN0aW9uKCkgc2FuaXR5IGNoZWNrIGZhaWxcbiIpKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL2Nvbm5lY3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL2Nvbm5lY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTJjMGJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvY29ubmVjdC5jCkBAIC0wLDAgKzEsMjg1NyBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwljb25uZWN0LmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKb2huCQkJMjAwNC0wOC0wOAkJCU1ham9yIG1vZGlmaWNhdGlvbiBmcm9tIFJUMjU2MAorKi8KKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworVUNIQVIJQ2lwaGVyU3VpdGVXcGFOb25lVGtpcFtdID0geworCQkweDAwLCAweDUwLCAweGYyLCAweDAxLAkvLyBvdWkKKwkJMHgwMSwgMHgwMCwJCQkJLy8gVmVyc2lvbgorCQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvLyBNdWx0aWNhc3QKKwkJMHgwMSwgMHgwMCwJCQkJLy8gTnVtYmVyIG9mIHVuaWNhc3QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMiwJLy8gdW5pY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDAJLy8gYXV0aGVudGljYXRpb24KKwkJfTsKK1VDSEFSCUNpcGhlclN1aXRlV3BhTm9uZVRraXBMZW4gPSAoc2l6ZW9mKENpcGhlclN1aXRlV3BhTm9uZVRraXApIC8gc2l6ZW9mKFVDSEFSKSk7CisKK1VDSEFSCUNpcGhlclN1aXRlV3BhTm9uZUFlc1tdID0geworCQkweDAwLCAweDUwLCAweGYyLCAweDAxLAkvLyBvdWkKKwkJMHgwMSwgMHgwMCwJCQkJLy8gVmVyc2lvbgorCQkweDAwLCAweDUwLCAweGYyLCAweDA0LAkvLyBNdWx0aWNhc3QKKwkJMHgwMSwgMHgwMCwJCQkJLy8gTnVtYmVyIG9mIHVuaWNhc3QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwNCwJLy8gdW5pY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDAJLy8gYXV0aGVudGljYXRpb24KKwkJfTsKK1VDSEFSCUNpcGhlclN1aXRlV3BhTm9uZUFlc0xlbiA9IChzaXplb2YoQ2lwaGVyU3VpdGVXcGFOb25lQWVzKSAvIHNpemVvZihVQ0hBUikpOworCisvLyBUaGUgZm9sbG93aW5nIE1BQ1JPIGlzIGNhbGxlZCBhZnRlciAxLiBzdGFydGluZyBhbiBuZXcgSUJTUywgMi4gc3VjY2VzZnVsbHkgSk9JTiBhbiBJQlNTLAorLy8gb3IgMy4gc3VjY2VzZnVsbHkgQVNTT0NJQVRFIHRvIGEgQlNTLCA0LiBzdWNjZXNzZnVsbHkgUkVfQVNTT0NJQVRFIHRvIGEgQlNTCisvLyBBbGwgc2V0dGluZ3Mgc3VjY2Vzc2Z1bHkgbmVnb3RpYXRlZCBmdXJpbmcgTUxNRSBzdGF0ZSBtYWNoaW5lcyBiZWNvbWUgZmluYWwgc2V0dGluZ3MKKy8vIGFuZCBhcmUgY29waWVkIHRvIHBBZC0+U3RhQWN0aXZlCisjZGVmaW5lIENPUFlfU0VUVElOR1NfRlJPTV9NTE1FX0FVWF9UT19BQ1RJVkVfQ0ZHKF9wQWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoX3BBZCktPkNvbW1vbkNmZy5Tc2lkTGVuID0gKF9wQWQpLT5NbG1lQXV4LlNzaWRMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJTmRpc01vdmVNZW1vcnkoKF9wQWQpLT5Db21tb25DZmcuU3NpZCwgKF9wQWQpLT5NbG1lQXV4LlNzaWQsIChfcEFkKS0+TWxtZUF1eC5Tc2lkTGVuKTsgXAorCUNPUFlfTUFDX0FERFIoKF9wQWQpLT5Db21tb25DZmcuQnNzaWQsIChfcEFkKS0+TWxtZUF1eC5Cc3NpZCk7ICAgICAgICAgICAgICAgICAgICAgIFwKKwkoX3BBZCktPkNvbW1vbkNmZy5DaGFubmVsID0gKF9wQWQpLT5NbG1lQXV4LkNoYW5uZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKF9wQWQpLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSAoX3BBZCktPk1sbWVBdXguQ2VudHJhbENoYW5uZWw7ICAgICAgICAgICAgICAgICAgXAorCShfcEFkKS0+U3RhQWN0aXZlLkFpZCA9IChfcEFkKS0+TWxtZUF1eC5BaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoX3BBZCktPlN0YUFjdGl2ZS5BdGltV2luID0gKF9wQWQpLT5NbG1lQXV4LkF0aW1XaW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJKF9wQWQpLT5TdGFBY3RpdmUuQ2FwYWJpbGl0eUluZm8gPSAoX3BBZCktPk1sbWVBdXguQ2FwYWJpbGl0eUluZm87ICAgICAgICAgICAgICAgICAgXAorCShfcEFkKS0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCA9IChfcEFkKS0+TWxtZUF1eC5CZWFjb25QZXJpb2Q7ICAgICAgICAgICAgICAgICAgICAgIFwKKwkoX3BBZCktPlN0YUFjdGl2ZS5DZnBNYXhEdXJhdGlvbiA9IChfcEFkKS0+TWxtZUF1eC5DZnBNYXhEdXJhdGlvbjsgICAgICAgICAgICAgICAgICBcCisJKF9wQWQpLT5TdGFBY3RpdmUuQ2ZwUGVyaW9kID0gKF9wQWQpLT5NbG1lQXV4LkNmcFBlcmlvZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCShfcEFkKS0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gPSAoX3BBZCktPk1sbWVBdXguU3VwUmF0ZUxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlOZGlzTW92ZU1lbW9yeSgoX3BBZCktPlN0YUFjdGl2ZS5TdXBSYXRlLCAoX3BBZCktPk1sbWVBdXguU3VwUmF0ZSwgKF9wQWQpLT5NbG1lQXV4LlN1cFJhdGVMZW4pO1wKKwkoX3BBZCktPlN0YUFjdGl2ZS5FeHRSYXRlTGVuID0gKF9wQWQpLT5NbG1lQXV4LkV4dFJhdGVMZW47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJTmRpc01vdmVNZW1vcnkoKF9wQWQpLT5TdGFBY3RpdmUuRXh0UmF0ZSwgKF9wQWQpLT5NbG1lQXV4LkV4dFJhdGUsIChfcEFkKS0+TWxtZUF1eC5FeHRSYXRlTGVuKTtcCisJTmRpc01vdmVNZW1vcnkoJihfcEFkKS0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0sICYoX3BBZCktPk1sbWVBdXguQVBFZGNhUGFybSwgc2l6ZW9mKEVEQ0FfUEFSTSkpO1wKKwlOZGlzTW92ZU1lbW9yeSgmKF9wQWQpLT5Db21tb25DZmcuQVBRb3NDYXBhYmlsaXR5LCAmKF9wQWQpLT5NbG1lQXV4LkFQUW9zQ2FwYWJpbGl0eSwgc2l6ZW9mKFFPU19DQVBBQklMSVRZX1BBUk0pKTtcCisJTmRpc01vdmVNZW1vcnkoJihfcEFkKS0+Q29tbW9uQ2ZnLkFQUWJzc0xvYWQsICYoX3BBZCktPk1sbWVBdXguQVBRYnNzTG9hZCwgc2l6ZW9mKFFCU1NfTE9BRF9QQVJNKSk7XAorCUNPUFlfTUFDX0FERFIoKF9wQWQpLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCAoX3BBZCktPk1sbWVBdXguQnNzaWQpOyAgICAgIFwKKwkoX3BBZCktPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFpZCA9IChfcEFkKS0+TWxtZUF1eC5BaWQ7ICAgICAgICAgICAgICAgICAgICAgICBcCisJKF9wQWQpLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSAoX3BBZCktPlN0YUNmZy5QYWlyQ2lwaGVyO1wKKwlDT1BZX01BQ19BRERSKChfcEFkKS0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUGFpcndpc2VLZXkuQnNzSWQsIChfcEFkKS0+TWxtZUF1eC5Cc3NpZCk7XAorCShfcEFkKS0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUmF0ZUxlbiA9IChfcEFkKS0+U3RhQWN0aXZlLlN1cFJhdGVMZW4gKyAoX3BBZCktPlN0YUFjdGl2ZS5FeHRSYXRlTGVuO1wKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IFBBU1NJVkVfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBNbG1lQ250bEluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gU1RBVEVfTUFDSElORSAqUywKKwlPVVQgU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCit7CisJLy8gQ29udHJvbCBzdGF0ZSBtYWNoaW5lIGRpZmZlcnMgZnJvbSBvdGhlciBzdGF0ZSBtYWNoaW5lcywgdGhlIGludGVyZmFjZQorCS8vIGZvbGxvd3MgdGhlIHN0YW5kYXJkIGludGVyZmFjZQorCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIE1sbWVDbnRsTWFjaGluZVBlcmZvcm1BY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gU1RBVEVfTUFDSElORSAqUywKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJc3dpdGNoKHBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUpCisJeworCQljYXNlIENOVExfSURMRToKKwkJCXsKKwkJCQlDbnRsSWRsZVByb2MocEFkLCBFbGVtKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENOVExfV0FJVF9ESVNBU1NPQzoKKwkJCUNudGxXYWl0RGlzYXNzb2NQcm9jKHBBZCwgRWxlbSk7CisJCQlicmVhazsKKwkJY2FzZSBDTlRMX1dBSVRfSk9JTjoKKwkJCUNudGxXYWl0Sm9pblByb2MocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCisJCS8vIENOVExfV0FJVF9SRUFTU09DIGlzIHRoZSBvbmx5IHN0YXRlIGluIENOVEwgbWFjaGluZSB0aGF0IGRvZXMKKwkJLy8gbm90IHRyaWdnZXJlZCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGJ5ICJSVE1QU2V0SW5mb3JtYXRpb24oT0lEX3h4eCkiLgorCQkvLyBUaGVyZWZvcmUgbm90IHByb3RlY3RlZCBieSBORElTJ3MgIm9ubHkgb25lIG91dHN0YW5kaW5nIE9JRCByZXF1ZXN0IgorCQkvLyBydWxlLiBXaGljaCBtZWFucyBORElTIG1heSBTRVQgT0lEIGluIHRoZSBtaWRkbGUgb2YgUk9BTWluZyBhdHRlbXB0cy4KKwkJLy8gQ3VycmVudCBhcHByb2FjaCBpcyB0byBibG9jayBuZXcgU0VUIHJlcXVlc3QgYXQgUlRNUFNldEluZm9ybWF0aW9uKCkKKwkJLy8gd2hlbiBDbnRsTWFjaGluZS5DdXJyU3RhdGUgaXMgbm90IENOVExfSURMRQorCQljYXNlIENOVExfV0FJVF9SRUFTU09DOgorCQkJQ250bFdhaXRSZWFzc29jUHJvYyhwQWQsIEVsZW0pOworCQkJYnJlYWs7CisKKwkJY2FzZSBDTlRMX1dBSVRfU1RBUlQ6CisJCQlDbnRsV2FpdFN0YXJ0UHJvYyhwQWQsIEVsZW0pOworCQkJYnJlYWs7CisJCWNhc2UgQ05UTF9XQUlUX0FVVEg6CisJCQlDbnRsV2FpdEF1dGhQcm9jKHBBZCwgRWxlbSk7CisJCQlicmVhazsKKwkJY2FzZSBDTlRMX1dBSVRfQVVUSDI6CisJCQlDbnRsV2FpdEF1dGhQcm9jMihwQWQsIEVsZW0pOworCQkJYnJlYWs7CisJCWNhc2UgQ05UTF9XQUlUX0FTU09DOgorCQkJQ250bFdhaXRBc3NvY1Byb2MocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQ05UTF9XQUlUX09JRF9MSVNUX1NDQU46CisJCQlpZihFbGVtLT5Nc2dUeXBlID09IE1UMl9TQ0FOX0NPTkYpCisJCQl7CisJCQkJLy8gUmVzdW1lIFR4UmluZyBhZnRlciBTQ0FOSU5HIGNvbXBsZXRlLiBXZSBob3BlIHRoZSBvdXQtb2Ytc2VydmljZSB0aW1lCisJCQkJLy8gd29uJ3QgYmUgdG9vIGxvbmcgdG8gbGV0IHVwcGVyIGxheWVyIHRpbWUtb3V0IHRoZSB3YWl0aW5nIGZyYW1lcworCQkJCVJUTVBSZXN1bWVNc2R1VHJhbnNtaXNzaW9uKHBBZCk7CisJCQkJaWYgKHBBZC0+U3RhQ2ZnLkNDWFJlcVR5cGUgIT0gTVNSTl9UWVBFX1VOVVNFRCkKKwkJCQl7CisJCQkJCS8vIENpc2NvIHNjYW4gcmVxdWVzdCBpcyBmaW5pc2hlZCwgcHJlcGFyZSBiZWFjb24gcmVwb3J0CisJCQkJCU1sbWVFbnF1ZXVlKHBBZCwgQUlST05FVF9TVEFURV9NQUNISU5FLCBNVDJfQUlST05FVF9TQ0FOX0RPTkUsIDAsIE5VTEwpOworCQkJCX0KKwkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCisgICAgICAgICAgICAgICAgLy8KKwkJCQkvLyBTZXQgTEVEIHN0YXR1cyB0byBwcmV2aW91cyBzdGF0dXMuCisJCQkJLy8KKwkJCQlpZiAocEFkLT5iTGVkT25TY2FubmluZykKKwkJCQl7CisJCQkJCXBBZC0+YkxlZE9uU2Nhbm5pbmcgPSBGQUxTRTsKKwkJCQkJUlRNUFNldExFRChwQWQsIHBBZC0+TGVkU3RhdHVzKTsKKwkJCQl9CisjaWZkZWYgRE9UMTFOX0RSQUZUMworCQkJCS8vIEFQIHNlbnQgYSAyMDQwQ29leGlzdGVuY2UgbWdtdCBmcmFtZSwgdGhlbiBzdGF0aW9uIHBlcmZvcm0gYSBzY2FuLCBhbmQgdGhlbiBzZW5kIGJhY2sgdGhlIHJlc3BvbmUuCisJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkJTU0NvZXhpc3QyMDQwLmZpZWxkLkluZm9SZXEgPT0gMSkKKwkJCQl7CisJCQkJCVVwZGF0ZTIwNDBDb2V4aXN0RnJhbWVBbmROb3RpZnkocEFkLCBCU1NJRF9XQ0lELCBUUlVFKTsKKwkJCQl9CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBDTlRMX1dBSVRfT0lEX0RJU0FTU09DOgorCQkJaWYgKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX0RJU0FTU09DX0NPTkYpCisJCQl7CisJCQkJTGlua0Rvd24ocEFkLCBGQUxTRSk7CisJCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKwkJCX0KKwkJCWJyZWFrOworI2lmZGVmIFJUMjg3MAorCQkvLworCQkvLyBUaGlzIHN0YXRlIGlzIGZvciB0aGF0IHdlIHdhbnQgdG8gY29ubmVjdCB0byBhbiBBUCBidXQKKwkJLy8gaXQgZGlkbid0IGZpbmQgb24gQlNTIExpc3QgdGFibGUuIFNvIHdlIG5lZWQgdG8gc2NhbiB0aGUgYWlyIGZpcnN0LAorCQkvLyBhZnRlciB0aGF0IHdlIGNhbiB0cnkgdG8gY29ubmVjdCB0byB0aGUgZGVzaXJlZCBBUCBpZiBhdmFpbGFibGUuCisJCS8vCisJCWNhc2UgQ05UTF9XQUlUX1NDQU5fRk9SX0NPTk5FQ1Q6CisJCQlpZihFbGVtLT5Nc2dUeXBlID09IE1UMl9TQ0FOX0NPTkYpCisJCQl7CisJCQkJLy8gUmVzdW1lIFR4UmluZyBhZnRlciBTQ0FOSU5HIGNvbXBsZXRlLiBXZSBob3BlIHRoZSBvdXQtb2Ytc2VydmljZSB0aW1lCisJCQkJLy8gd29uJ3QgYmUgdG9vIGxvbmcgdG8gbGV0IHVwcGVyIGxheWVyIHRpbWUtb3V0IHRoZSB3YWl0aW5nIGZyYW1lcworCQkJCVJUTVBSZXN1bWVNc2R1VHJhbnNtaXNzaW9uKHBBZCk7CisjaWZkZWYgQ0NYX1NVUFBPUlQKKwkJCQlpZiAocEFkLT5TdGFDZmcuQ0NYUmVxVHlwZSAhPSBNU1JOX1RZUEVfVU5VU0VEKQorCQkJCXsKKwkJCQkJLy8gQ2lzY28gc2NhbiByZXF1ZXN0IGlzIGZpbmlzaGVkLCBwcmVwYXJlIGJlYWNvbiByZXBvcnQKKwkJCQkJTWxtZUVucXVldWUocEFkLCBBSVJPTkVUX1NUQVRFX01BQ0hJTkUsIE1UMl9BSVJPTkVUX1NDQU5fRE9ORSwgMCwgTlVMTCk7CisJCQkJfQorI2VuZGlmIC8vIENDWF9TVVBQT1JUIC8vCisJCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKworCQkJCS8vCisJCQkJLy8gQ2hlY2sgaWYgd2UgY2FuIGNvbm5lY3QgdG8uCisJCQkJLy8KKwkJCQlCc3NUYWJsZVNzaWRTb3J0KHBBZCwgJnBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLCBwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbik7CisJCQkJaWYgKHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc05yID4gMCkKKwkJCQl7CisJCQkJCU1sbWVBdXRvUmVjb25uZWN0TGFzdFNTSUQocEFkKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwkJZGVmYXVsdDoKKwkJCURCR1BSSU5UX0VSUigoIiFFUlJPUiEgQ05UTCAtIElsbGVnYWwgbWVzc2FnZSB0eXBlKD0lbGQpIiwgRWxlbS0+TXNnVHlwZSkpOworCQkJYnJlYWs7CisJfQorfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIENudGxJZGxlUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUICAgRGlzYXNzb2NSZXE7CisKKwlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCisJCXJldHVybjsKKworCXN3aXRjaChFbGVtLT5Nc2dUeXBlKQorCXsKKwkJY2FzZSBPSURfODAyXzExX1NTSUQ6CisJCQlDbnRsT2lkU3NpZFByb2MocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9CU1NJRDoKKwkJCUNudGxPaWRSVEJzc2lkUHJvYyhwQWQsRWxlbSk7CisJCQlicmVhazsKKworCQljYXNlIE9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOOgorCQkJQ250bE9pZFNjYW5Qcm9jKHBBZCxFbGVtKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9ESVNBU1NPQ0lBVEU6CisjaWZkZWYgUkFMSU5LX0FURQorCQkJaWYoQVRFX09OKHBBZCkpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVGhlIGRyaXZlciBpcyBpbiBBVEUgbW9kZSBub3dcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisJCQlEaXNhc3NvY1Bhcm1GaWxsKHBBZCwgJkRpc2Fzc29jUmVxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HKTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRElTQVNTT0NfUkVRLCBzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKSwgJkRpc2Fzc29jUmVxKTsKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0RJU0FTU09DOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFX1dJVEhfV0VCX1VJKQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyAgICAgICAgICAgIHsKKyAgICAJCQkvLyBTZXQgdGhlIEF1dG9SZWNvbm5lY3RTc2lkIHRvIHByZXZlbnQgaXQgcmVjb25uZWN0IHRvIG9sZCBTU0lECisgICAgCQkJLy8gU2luY2UgY2FsbGluZyB0aGlzIGluZGljYXRlIHVzZXIgZG9uJ3Qgd2FudCB0byBjb25uZWN0IHRvIHRoYXQgU1NJRCBhbnltb3JlLgorICAgIAkJCXBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbj0gMzI7CisgICAgCQkJTmRpc1plcm9NZW1vcnkocEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLCBwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW4pOworICAgICAgICAgICAgfQorCQkJYnJlYWs7CisKKwkJY2FzZSBNVDJfTUxNRV9ST0FNSU5HX1JFUToKKwkJCUNudGxNbG1lUm9hbWluZ1Byb2MocEFkLCBFbGVtKTsKKwkJCWJyZWFrOworCisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9NSUNfRkFJTFVSRV9SRVBPUlRfRlJBTUU6CisgICAgICAgICAgICBXcGFNaWNGYWlsdXJlUmVwb3J0RnJhbWUocEFkLCBFbGVtKTsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9TRVRfRExTX1BBUkFNOgorCQkJQ250bE9pZERMU1NldHVwUHJvYyhwQWQsIEVsZW0pOworCQkJYnJlYWs7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKwkJZGVmYXVsdDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBJbGxlZ2FsIG1lc3NhZ2UgaW4gQ250bElkbGVQcm9jKE1zZ1R5cGU9JWxkKVxuIixFbGVtLT5Nc2dUeXBlKSk7CisJCQlicmVhazsKKwl9Cit9CisKK1ZPSUQgQ250bE9pZFNjYW5Qcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlNTE1FX1NDQU5fUkVRX1NUUlVDVCAgICAgICBTY2FuUmVxOworCVVMT05HICAgICAgICAgICAgICAgICAgICAgIEJzc0lkeCA9IEJTU19OT1RfRk9VTkQ7CisJQlNTX0VOVFJZICAgICAgICAgICAgICAgICAgQ3VyckJzczsKKworI2lmZGVmIFJBTElOS19BVEUKKy8qIERpc2FibGUgc2Nhbm5pbmcgd2hlbiBBVEUgaXMgcnVubmluZy4gKi8KKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKworCS8vIHJlY29yZCBjdXJyZW50IEJTUyBpZiBuZXR3b3JrIGlzIGNvbm5lY3RlZC4KKwkvLyAyMDAzLTItMTMgZG8gbm90IGluY2x1ZGUgY3VycmVudCBJQlNTIGlmIHRoaXMgaXMgdGhlIG9ubHkgU1RBIGluIHRoaXMgSUJTUy4KKwlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQorCXsKKwkJQnNzSWR4ID0gQnNzU3NpZFRhYmxlU2VhcmNoKCZwQWQtPlNjYW5UYWIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJaWYgKEJzc0lkeCAhPSBCU1NfTk9UX0ZPVU5EKQorCQl7CisJCQlOZGlzTW92ZU1lbW9yeSgmQ3VyckJzcywgJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLCBzaXplb2YoQlNTX0VOVFJZKSk7CisJCX0KKwl9CisKKwkvLyBjbGVhbiB1cCBwcmV2aW91cyBTQ0FOIHJlc3VsdCwgYWRkIGN1cnJlbnQgQlNTIGJhY2sgdG8gdGFibGUgaWYgYW55CisJQnNzVGFibGVJbml0KCZwQWQtPlNjYW5UYWIpOworCWlmIChCc3NJZHggIT0gQlNTX05PVF9GT1VORCkKKwl7CisJCS8vIERESyBOb3RlOiBJZiB0aGUgTklDIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgQlNTSUQgYW5kIFNTSUQKKwkJLy8gICAgdGhhdCBhcmUgbm90IGNvbnRhaW5lZCBpbiB0aGUgbGlzdCBvZiBCU1NJRHMgZ2VuZXJhdGVkIGJ5IHRoaXMgc2NhbiwgdGhlCisJCS8vICAgIEJTU0lEIGRlc2NyaXB0aW9uIG9mIHRoZSBjdXJyZW50bHkgYXNzb2NpYXRlZCBCU1NJRCBhbmQgU1NJRCBzaG91bGQgYmUKKwkJLy8gICAgYXBwZW5kZWQgdG8gdGhlIGxpc3Qgb2YgQlNTSURzIGluIHRoZSBOSUMncyBkYXRhYmFzZS4KKwkJLy8gVG8gZW5zdXJlIHRoaXMsIHdlIGFwcGVuZCB0aGlzIEJTUyBhcyB0aGUgZmlyc3QgZW50cnkgaW4gU0NBTiByZXN1bHQKKwkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVswXSwgJkN1cnJCc3MsIHNpemVvZihCU1NfRU5UUlkpKTsKKwkJcEFkLT5TY2FuVGFiLkJzc05yID0gMTsKKwl9CisKKwlTY2FuUGFybUZpbGwocEFkLCAmU2NhblJlcSwgIiIsIDAsIEJTU19BTlksIFNDQU5fQUNUSVZFKTsKKwlNbG1lRW5xdWV1ZShwQWQsIFNZTkNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfU0NBTl9SRVEsCisJCXNpemVvZihNTE1FX1NDQU5fUkVRX1NUUlVDVCksICZTY2FuUmVxKTsKKwlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX09JRF9MSVNUX1NDQU47Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJQmVmb3JlIGNhbGxpbmcgdGhpcyByb3V0aW5lLCB1c2VyIGRlc2lyZWQgU1NJRCBzaG91bGQgYWxyZWFkeSBiZWVuCisJCXJlY29yZGVkIGluIENvbW1vbkNmZy5Tc2lkW10KKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDbnRsT2lkU3NpZFByb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICogRWxlbSkKK3sKKwlQTkRJU184MDJfMTFfU1NJRCAgICAgICAgICBwT2lkU3NpZCA9IChORElTXzgwMl8xMV9TU0lEICopRWxlbS0+TXNnOworCU1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCAgIERpc2Fzc29jUmVxOworCVVMT05HCQkJCQkgICBOb3c7CisKKwkvLyBTdGVwIDEuIHJlY29yZCB0aGUgZGVzaXJlZCB1c2VyIHNldHRpbmdzIHRvIE1sbWVBdXgKKwlOZGlzWmVyb01lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgcE9pZFNzaWQtPlNzaWQsIHBPaWRTc2lkLT5Tc2lkTGVuZ3RoKTsKKwlwQWQtPk1sbWVBdXguU3NpZExlbiA9IChVQ0hBUilwT2lkU3NpZC0+U3NpZExlbmd0aDsKKwlOZGlzWmVyb01lbW9yeShwQWQtPk1sbWVBdXguQnNzaWQsIE1BQ19BRERSX0xFTik7CisJcEFkLT5NbG1lQXV4LkJzc1R5cGUgPSBwQWQtPlN0YUNmZy5Cc3NUeXBlOworCisKKwkvLworCS8vIFVwZGF0ZSBSZWNvbm5lY3QgU3NpZCwgdGhhdCB1c2VyIGRlc2lyZWQgdG8gY29ubmVjdC4KKwkvLworCU5kaXNaZXJvTWVtb3J5KHBBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbik7CisJcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuID0gcEFkLT5NbG1lQXV4LlNzaWRMZW47CisKKwkvLyBzdGVwIDIuIGZpbmQgYWxsIG1hdGNoaW5nIEJTUyBpbiB0aGUgbGFzdGVzdCBTQ0FOIHJlc3VsdCAoaW5Cc3NUYWIpCisJLy8gICAgJiBsb2cgdGhlbSBpbnRvIE1sbWVBdXguU3NpZEJzc1RhYiBmb3IgbGF0ZXItb24gaXRlcmF0aW9uLiBTb3J0IGJ5IFJTU0kgb3JkZXIKKwlCc3NUYWJsZVNzaWRTb3J0KHBBZCwgJnBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLCBwQWQtPk1sbWVBdXguU3NpZCwgcEFkLT5NbG1lQXV4LlNzaWRMZW4pOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ250bE9pZFNzaWRQcm9jKCk6Q05UTCAtICVkIEJTUyBvZiAlZCBCU1MgbWF0Y2ggdGhlIGRlc2lyZSAoJWQpU1NJRCAtICVzXG4iLAorCQkJcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIsIHBBZC0+U2NhblRhYi5Cc3NOciwgcEFkLT5NbG1lQXV4LlNzaWRMZW4sIHBBZC0+TWxtZUF1eC5Tc2lkKSk7CisJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93KTsKKworCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkgJiYKKwkJKHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4gPT0gcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbMF0uU3NpZExlbikgJiYKKwkJTmRpc0VxdWFsTWVtb3J5KHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5WzBdLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4pICYmCisJCU1BQ19BRERSX0VRVUFMKHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVswXS5Cc3NpZCkpCisJeworCQkvLyBDYXNlIDEuIGFscmVhZHkgY29ubmVjdGVkIHdpdGggYW4gQVAgd2hvIGhhcyB0aGUgZGVzaXJlZCBTU0lECisJCS8vICAgICAgICAgd2l0aCBoaWdoZXN0IFJTU0kKKworCQkvLyBBZGQgY2hlY2tpbmcgTW9kZSAiTEVBUCIgZm9yIENDWCAxLjAKKwkJaWYgKCgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fAorCQkJIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHx8CisJCQkgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8CisJCQkgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spCisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkgfHwgKHBBZC0+U3RhQ2ZnLkxlYXBBdXRoTW9kZSA9PSBDSVNDT19BdXRoTW9kZUxFQVApCisjZW5kaWYgLy8gTEVBUF9TVVBQT1JUIC8vCisJCQkgKSAmJgorCQkJKHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRCkpCisJCXsKKwkJCS8vIGNhc2UgMS4xIEZvciBXUEEsIFdQQS1QU0ssIGlmIHRoZSAxeCBwb3J0IGlzIG5vdCBzZWN1cmVkLCB3ZSBoYXZlIHRvIHJlZG8KKwkJCS8vICAgICAgICAgIGNvbm5lY3Rpb24gcHJvY2VzcworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ250bE9pZFNzaWRQcm9jKCk6Q05UTCAtIGRpc2Fzc29jaWF0ZSB3aXRoIGN1cnJlbnQgQVAuLi5cbiIpKTsKKwkJCURpc2Fzc29jUGFybUZpbGwocEFkLCAmRGlzYXNzb2NSZXEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBSRUFTT05fRElTQVNTT0NfU1RBX0xFQVZJTkcpOworCQkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ESVNBU1NPQ19SRVEsCisJCQkJCQlzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKSwgJkRpc2Fzc29jUmVxKTsKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfRElTQVNTT0M7CisJCX0KKwkJZWxzZSBpZiAocEFkLT5iQ29uZmlnQ2hhbmdlZCA9PSBUUlVFKQorCQl7CisJCQkvLyBjYXNlIDEuMiBJbXBvcnRhbnQgQ29uZmlnIGhhcyBjaGFuZ2VkLCB3ZSBoYXZlIHRvIHJlY29ubmVjdCB0byB0aGUgc2FtZSBBUAorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ250bE9pZFNzaWRQcm9jKCk6Q05UTCAtIGRpc2Fzc29jaWF0ZSB3aXRoIGN1cnJlbnQgQVAgQmVjYXVzZSBjb25maWcgY2hhbmdlZC4uLlxuIikpOworCQkJRGlzYXNzb2NQYXJtRmlsbChwQWQsICZEaXNhc3NvY1JlcSwgcEFkLT5Db21tb25DZmcuQnNzaWQsIFJFQVNPTl9ESVNBU1NPQ19TVEFfTEVBVklORyk7CisJCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RJU0FTU09DX1JFUSwKKwkJCQkJCXNpemVvZihNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QpLCAmRGlzYXNzb2NSZXEpOworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9ESVNBU1NPQzsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIGNhc2UgMS4zLiBhbHJlYWR5IGNvbm5lY3RlZCB0byB0aGUgU1NJRCB3aXRoIGhpZ2hlc3QgUlNTSS4KKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNudGxPaWRTc2lkUHJvYygpOkNOVEwgLSBhbHJlYWR5IHdpdGggdGhpcyBCU1NJRC4gaWdub3JlIHRoaXMgU0VUX1NTSUQgcmVxdWVzdFxuIikpOworCQkJLy8KKwkJCS8vIChIQ1QgMTIuMSkgMWNfd2xhbl9tZWRpYWV2ZW50cyByZXF1aXJlZAorCQkJLy8gbWVkaWEgY29ubmVjdCBldmVudHMgYXJlIGluZGljYXRlZCB3aGVuIGFzc29jaWF0aW5nIHdpdGggdGhlIHNhbWUgQVAKKwkJCS8vCisJCQlpZiAoSU5GUkFfT04ocEFkKSkKKwkJCXsKKwkJCQkvLworCQkJCS8vIFNpbmNlIE1lZGlhU3RhdGUgYWxyZWFkeSBpcyBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZAorCQkJCS8vIFdlIGp1c3QgaW5kaWNhdGUgdGhlIGNvbm5lY3QgZXZlbnQgYWdhaW4gdG8gbWVldCB0aGUgV0hRTCByZXF1aXJlZC4KKwkJCQkvLworCQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisJCQkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKKyAgICAgICAgICAgICAgICBwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19VUDsgICAvLyBVcGRhdGUgZXh0cmEgaW5mb3JtYXRpb24gdG8gbGluayBpcyB1cAorCQkJfQorCisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworI2lmZGVmIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworCisgICAgICAgICAgICAgICAgbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBNQUNfQUREUl9MRU4pOworICAgICAgICAgICAgICAgIG1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgcEFkLT5NbG1lQXV4LkJzc2lkLCBNQUNfQUREUl9MRU4pOworICAgICAgICAgICAgICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKworICAgICAgICAgICAgfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJCX0KKwl9CisJZWxzZSBpZiAoSU5GUkFfT04ocEFkKSkKKwl7CisJCS8vCisJCS8vIEZvciBSVDYxCisJCS8vIFs4ODg4OF0gT0lEXzgwMl8xMV9TU0lEIHNob3VsZCBoYXZlIHJldHVybmVkIE5EVEVTVF9XRVBfQVAyKFJldHVybmVkOiApCisJCS8vIFJUNjEgbWF5IGxvc3QgU1NJRCwgYW5kIG5vdCBjb25uZWN0IHRvIE5EVEVTVF9XRVBfQVAyIGFuZCB3aWxsIGNvbm5lY3QgdG8gTkRURVNUX1dFUF9BUDIgYnkgQXV0b3JlY29ubmVjdAorCQkvLyBCdXQgbWVkaWEgc3RhdHVzIGlzIGNvbm5lY3RlZCwgc28gdGhlIFNTSUQgbm90IHJlcG9ydCBjb3JyZWN0bHkuCisJCS8vCisJCWlmICghU1NJRF9FUVVBTChwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLCBwQWQtPk1sbWVBdXguU3NpZCwgcEFkLT5NbG1lQXV4LlNzaWRMZW4pKQorCQl7CisJCQkvLworCQkJLy8gRGlmZmVyZW50IFNTSUQgbWVhbnMgbm90IFJvYW1pbmcgY2FzZSwgc28gd2UgbGV0IExpbmtEb3duKCkgdG8gSW5kaWNhdGUgYSBkaXNjb25uZWN0IGV2ZW50LgorCQkJLy8KKwkJCXBBZC0+TWxtZUF1eC5DdXJyUmVxSXNGcm9tTmRpcyA9IFRSVUU7CisJCX0KKwkJLy8gY2FzZSAyLiBhY3RpdmUgSU5GUkEgYXNzb2NpYXRpb24gZXhpc3RlbnQKKwkJLy8gICAgcm9hbWluZyBpcyBkb25lIHdpdGhpbiBtaW5pcG9ydCBkcml2ZXIsIG5vdGhpbmcgdG8gZG8gd2l0aCBjb25maWd1cmF0aW9uCisJCS8vICAgIHV0aWxpdHkuIHNvIHVwb24gYSBuZXcgU0VUKE9JRF84MDJfMTFfU1NJRCkgaXMgcmVjZWl2ZWQsIHdlIGp1c3QKKwkJLy8gICAgZGlzYXNzb2NpYXRlIHdpdGggdGhlIGN1cnJlbnQgYXNzb2NpYXRlZCBBUCwKKwkJLy8gICAgdGhlbiBwZXJmb3JtIGEgbmV3IGFzc29jaWF0aW9uIHdpdGggdGhpcyBuZXcgU1NJRCwgbm8gbWF0dGVyIHRoZQorCQkvLyAgICBuZXcvb2xkIFNTSUQgYXJlIHRoZSBzYW1lIG9yIG5vdC4KKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ250bE9pZFNzaWRQcm9jKCk6Q05UTCAtIGRpc2Fzc29jaWF0ZSB3aXRoIGN1cnJlbnQgQVAuLi5cbiIpKTsKKwkJRGlzYXNzb2NQYXJtRmlsbChwQWQsICZEaXNhc3NvY1JlcSwgcEFkLT5Db21tb25DZmcuQnNzaWQsIFJFQVNPTl9ESVNBU1NPQ19TVEFfTEVBVklORyk7CisJCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRElTQVNTT0NfUkVRLAorCQkJCQlzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKSwgJkRpc2Fzc29jUmVxKTsKKwkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9ESVNBU1NPQzsKKwl9CisJZWxzZQorCXsKKwkJaWYgKEFESE9DX09OKHBBZCkpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNudGxPaWRTc2lkUHJvYygpOkNOVEwgLSBkcm9wIGN1cnJlbnQgQURIT0NcbiIpKTsKKwkJCUxpbmtEb3duKHBBZCwgRkFMU0UpOworCQkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKKwkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisJCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOworICAgICAgICAgICAgcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNudGxPaWRTc2lkUHJvYygpOk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgRXZlbnQgQyFcbiIpKTsKKwkJfQorCisJCWlmICgocEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIgPT0gMCkgJiYKKwkJCShwQWQtPlN0YUNmZy5iQXV0b1JlY29ubmVjdCA9PSBUUlVFKSAmJgorCQkJKHBBZC0+TWxtZUF1eC5Cc3NUeXBlID09IEJTU19JTkZSQSkgJiYKKwkJCShNbG1lVmFsaWRhdGVTU0lEKHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbikgPT0gVFJVRSkKKwkJCSkKKwkJeworCQkJTUxNRV9TQ0FOX1JFUV9TVFJVQ1QgICAgICAgU2NhblJlcTsKKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ250bE9pZFNzaWRQcm9jKCk6Q05UTCAtIE5vIG1hdGNoaW5nIEJTUywgc3RhcnQgYSBuZXcgc2NhblxuIikpOworCQkJU2NhblBhcm1GaWxsKHBBZCwgJlNjYW5SZXEsIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbiwgQlNTX0FOWSwgU0NBTl9BQ1RJVkUpOworCQkJTWxtZUVucXVldWUocEFkLCBTWU5DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX1NDQU5fUkVRLCBzaXplb2YoTUxNRV9TQ0FOX1JFUV9TVFJVQ1QpLCAmU2NhblJlcSk7CisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX09JRF9MSVNUX1NDQU47CisJCQkvLyBSZXNldCBNaXNzZWQgc2NhbiBudW1iZXIKKwkJCXBBZC0+U3RhQ2ZnLkxhc3RTY2FuVGltZSA9IE5vdzsKKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+TWxtZUF1eC5Cc3NJZHggPSAwOworCQkJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7CisJCX0KKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQ250bE9pZFJUQnNzaWRQcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqIEVsZW0pCit7CisJVUxPTkcgICAgICAgQnNzSWR4OworCVBVQ0hBUiAgICAgIHBPaWRCc3NpZCA9IChQVUNIQVIpRWxlbS0+TXNnOworCU1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCAgICBEaXNhc3NvY1JlcTsKKwlNTE1FX0pPSU5fUkVRX1NUUlVDVCAgICAgICAgSm9pblJlcTsKKworI2lmZGVmIFJBTElOS19BVEUKKy8qIE5vIG5lZWQgdG8gcGVyZm9ybSB0aGlzIHJvdXRpbmUgd2hlbiBBVEUgaXMgcnVubmluZy4gKi8KKwlpZiAoQVRFX09OKHBBZCkpCisJCXJldHVybjsKKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKwkvLyByZWNvcmQgdXNlciBkZXNpcmVkIHNldHRpbmdzCisJQ09QWV9NQUNfQUREUihwQWQtPk1sbWVBdXguQnNzaWQsIHBPaWRCc3NpZCk7CisJcEFkLT5NbG1lQXV4LkJzc1R5cGUgPSBwQWQtPlN0YUNmZy5Cc3NUeXBlOworCisJLy8KKwkvLyBVcGRhdGUgUmVjb25uZWN0IFNzaWQsIHRoYXQgdXNlciBkZXNpcmVkIHRvIGNvbm5lY3QuCisJLy8KKwlOZGlzWmVyb01lbW9yeShwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIE1BWF9MRU5fT0ZfU1NJRCk7CisJcEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuID0gcEFkLT5NbG1lQXV4LlNzaWRMZW47CisJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLCBwQWQtPk1sbWVBdXguU3NpZCwgcEFkLT5NbG1lQXV4LlNzaWRMZW4pOworCisJLy8gZmluZCB0aGUgZGVzaXJlZCBCU1MgaW4gdGhlIGxhdGVzdCBTQ0FOIHJlc3VsdCB0YWJsZQorCUJzc0lkeCA9IEJzc1RhYmxlU2VhcmNoKCZwQWQtPlNjYW5UYWIsIHBPaWRCc3NpZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwpOworCWlmIChCc3NJZHggPT0gQlNTX05PVF9GT1VORCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBCU1NJRCBub3QgZm91bmQuIHJlcGx5IE5ESVNfU1RBVFVTX05PVF9BQ0NFUFRFRFxuIikpOworCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCQlyZXR1cm47CisJfQorCisJLy8gY29weSB0aGUgbWF0Y2hlZCBCU1MgZW50cnkgZnJvbSBTY2FuVGFiIHRvIE1sbWVBdXguU3NpZEJzc1RhYi4gV2h5PworCS8vIEJlY2F1c2Ugd2UgbmVlZCB0aGlzIGVudHJ5IHRvIGJlY29tZSB0aGUgSk9JTiB0YXJnZXQgaW4gbGF0ZXIgb24gU1lOQyBzdGF0ZSBtYWNoaW5lCisJcEFkLT5NbG1lQXV4LkJzc0lkeCA9IDA7CisJcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIgPSAxOworCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVswXSwgJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLCBzaXplb2YoQlNTX0VOVFJZKSk7CisKKwkvL3BBZC0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbiA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLlNzaWRMZW47CisJLy9OZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLlNzaWQsIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLlNzaWRMZW4pOworCisJLy8gQWRkIFNTSUQgaW50byBNbG1lQXV4IGZvciBzaXRlIHN1cmV5IGpvaW5pbmcgaGlkZGVuIFNTSUQKKwkvL3BBZC0+TWxtZUF1eC5Tc2lkTGVuID0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uU3NpZExlbjsKKwkvL05kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbik7CisKKwkvLyAyMDAyLTExLTI2IHNraXAgdGhlIGZvbGxvd2luZyBjaGVja2luZy4gaS5lLiBpZiB1c2VyIHdhbnRzIHRvIHJlLWNvbm5lY3QgdG8gc2FtZSBBUAorCS8vICAgd2UganVzdCBmb2xsb3cgbm9ybWFsIHByb2NlZHVyZS4gVGhlIHJlYXNvbiBvZiB1c2VyIGRvaW5nIHRoaXMgbWF5IGJlY2F1c2UgaGUvc2hlIGNoYW5nZWQKKwkvLyAgIEFQIHRvIGFub3RoZXIgY2hhbm5lbCwgYnV0IHdlIHN0aWxsIHJlY2VpdmVkIEJFQUNPTiBmcm9tIGl0IHRodXMgZG9uJ3QgY2xhaW0gTGluayBEb3duLgorCS8vICAgU2luY2UgdXNlciBrbm93cyBoZSdzIGNoYW5nZWQgQVAgY2hhbm5lbCwgaGUnbGwgcmUtY29ubmVjdCBhZ2Fpbi4gQnkgc2tpcHBpbmcgdGhlIGZvbGxvd2luZworCS8vICAgY2hlY2tpbmcsIHdlJ2xsIGRpc2Fzc29jaWF0ZSB0aGVuIHJlLWRvIG5vcm1hbCBhc3NvY2lhdGlvbiB3aXRoIHRoaXMgQVAgYXQgdGhlIG5ldyBjaGFubmVsLgorCS8vIDIwMDMtMS02IFJlLWVuYWJsZSB0aGlzIGZlYXR1cmUgYmFzZWQgb24gbWljcm9zb2Z0IHJlcXVpcmVtZW50IHdoaWNoIHByZWZlciBub3QgdG8gcmUtZG8KKwkvLyAgIGNvbm5lY3Rpb24gd2hlbiBzZXR0aW5nIHRoZSBzYW1lIEJTU0lELgorCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkgJiYKKwkJTUFDX0FERFJfRVFVQUwocEFkLT5Db21tb25DZmcuQnNzaWQsIHBPaWRCc3NpZCkpCisJeworCQkvLyBhbHJlYWR5IGNvbm5lY3RlZCB0byB0aGUgc2FtZSBCU1NJRCwgZ28gYmFjayB0byBpZGxlIHN0YXRlIGRpcmVjdGx5CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBhbHJlYWR5IGluIHRoaXMgQlNTSUQuIGlnbm9yZSB0aGlzIFNFVF9CU1NJRCByZXF1ZXN0XG4iKSk7CisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1bmlvbiBpd3JlcV9kYXRhICAgIHdycXU7CisKKyAgICAgICAgICAgICAgICBtZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsIDAsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBwQWQtPk1sbWVBdXguQnNzaWQsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudChwQWQtPm5ldF9kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCisgICAgICAgICAgICB9CisjZW5kaWYgLy8gTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwl9CisJZWxzZQorCXsKKwkJaWYgKElORlJBX09OKHBBZCkpCisJCXsKKwkJCS8vIGRpc2Fzc29jIGZyb20gY3VycmVudCBBUCBmaXJzdAorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIGRpc2Fzc29jaWF0ZSB3aXRoIGN1cnJlbnQgQVAgLi4uXG4iKSk7CisJCQlEaXNhc3NvY1Bhcm1GaWxsKHBBZCwgJkRpc2Fzc29jUmVxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgUkVBU09OX0RJU0FTU09DX1NUQV9MRUFWSU5HKTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRElTQVNTT0NfUkVRLAorCQkJCQkJc2l6ZW9mKE1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCksICZEaXNhc3NvY1JlcSk7CisKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfRElTQVNTT0M7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoQURIT0NfT04ocEFkKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gZHJvcCBjdXJyZW50IEFESE9DXG4iKSk7CisJCQkJTGlua0Rvd24ocEFkLCBGQUxTRSk7CisJCQkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKKwkJCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOworCQkJCVJUTVBfSW5kaWNhdGVNZWRpYVN0YXRlKHBBZCk7CisgICAgICAgICAgICAgICAgcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUIEV2ZW50IEMhXG4iKSk7CisJCQl9CisKKwkJCS8vIENoYW5nZSB0aGUgd2Vwc3RhdHVzIHRvIG9yaWdpbmFsIHdlcHN0YXR1cworCQkJcEFkLT5TdGFDZmcuV2VwU3RhdHVzICAgPSBwQWQtPlN0YUNmZy5PcmlnV2VwU3RhdHVzOworCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciAgPSBwQWQtPlN0YUNmZy5PcmlnV2VwU3RhdHVzOworCQkJcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBwQWQtPlN0YUNmZy5PcmlnV2VwU3RhdHVzOworCisJCQkvLyBDaGVjayBjaXBoZXIgc3VpdGUsIEFQIG11c3QgaGF2ZSBtb3JlIHNlY3VyZWQgY2lwaGVyIHRoYW4gc3RhdGlvbiBzZXR0aW5nCisJCQkvLyBTZXQgdGhlIFBhaXJ3aXNlIGFuZCBHcm91cCBjaXBoZXIgdG8gbWF0Y2ggdGhlIGludGVuZGVkIEFQIHNldHRpbmcKKwkJCS8vIFdlIGNhbiBvbmx5IGNvbm5lY3QgdG8gQVAgd2l0aCBsZXNzIHNlY3VyZWQgY2lwaGVyIHNldHRpbmcKKwkJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSkKKwkJCXsKKwkJCQlwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5Hcm91cENpcGhlcjsKKworCQkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBLlBhaXJDaXBoZXIpCisJCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEuUGFpckNpcGhlcjsKKwkJCQllbHNlIGlmIChwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEuUGFpckNpcGhlckF1eCAhPSBOZGlzODAyXzExV0VQRGlzYWJsZWQpCisJCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEuUGFpckNpcGhlckF1eDsKKwkJCQllbHNlCS8vIFRoZXJlIGlzIG5vIFBhaXJDaXBoZXIgQXV4LCBkb3duZ3JhZGUgb3VyIGNhcGFiaWxpdHkgdG8gVEtJUAorCQkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKKwkJCX0KKwkJCWVsc2UgaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykpCisJCQl7CisJCQkJcEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLkdyb3VwQ2lwaGVyOworCisJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLlBhaXJDaXBoZXIpCisJCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLlBhaXJDaXBoZXI7CisJCQkJZWxzZSBpZiAocEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5QYWlyQ2lwaGVyQXV4ICE9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkKKwkJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuUGFpckNpcGhlckF1eDsKKwkJCQllbHNlCS8vIFRoZXJlIGlzIG5vIFBhaXJDaXBoZXIgQXV4LCBkb3duZ3JhZGUgb3VyIGNhcGFiaWxpdHkgdG8gVEtJUAorCQkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKKworCQkJCS8vIFJTTiBjYXBhYmlsaXR5CisJCQkJcEFkLT5TdGFDZmcuUnNuQ2FwYWJpbGl0eSA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuUnNuQ2FwYWJpbGl0eTsKKwkJCX0KKworCQkJLy8gU2V0IE1peCBjaXBoZXIgZmxhZworCQkJcEFkLT5TdGFDZmcuYk1peENpcGhlciA9IChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyKSA/IEZBTFNFIDogVFJVRTsKKwkJCWlmIChwQWQtPlN0YUNmZy5iTWl4Q2lwaGVyID09IFRSVUUpCisJCQl7CisJCQkJLy8gSWYgbWl4IGNpcGhlciwgcmUtYnVpbGQgUlNOSUUKKwkJCQlSVE1QTWFrZVJTTklFKHBBZCwgcEFkLT5TdGFDZmcuQXV0aE1vZGUsIHBBZC0+U3RhQ2ZnLldlcFN0YXR1cywgMCk7CisJCQl9CisJCQkvLyBObyBhY3RpdmUgYXNzb2NpYXRpb24sIGpvaW4gdGhlIEJTUyBpbW1lZGlhdGVseQorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIGpvaW5pbmcgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggLi4uXG4iLAorCQkJCXBPaWRCc3NpZFswXSxwT2lkQnNzaWRbMV0scE9pZEJzc2lkWzJdLHBPaWRCc3NpZFszXSxwT2lkQnNzaWRbNF0scE9pZEJzc2lkWzVdKSk7CisKKwkJCUpvaW5QYXJtRmlsbChwQWQsICZKb2luUmVxLCBwQWQtPk1sbWVBdXguQnNzSWR4KTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9KT0lOX1JFUSwgc2l6ZW9mKE1MTUVfSk9JTl9SRVFfU1RSVUNUKSwgJkpvaW5SZXEpOworCisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0pPSU47CisJCX0KKwl9Cit9CisKKy8vIFJvYW1pbmcgaXMgdGhlIG9ubHkgZXh0ZXJuYWwgcmVxdWVzdCB0cmlnZ2VyaW5nIENOVEwgc3RhdGUgbWFjaGluZQorLy8gZGVzcGl0ZSBvZiBvdGhlciAiU0VUIE9JRCIgb3BlcmF0aW9uLiBBbGwgIlNFVCBPSUQiIHJlbGF0ZWQgb2VyYXRpb25zCisvLyBoYXBwZW4gaW4gc2VxdWVuY2UsIGJlY2F1c2Ugbm8gb3RoZXIgU0VUIE9JRCB3aWxsIGJlIHNlbnQgdG8gdGhpcyBkZXZpY2UKKy8vIHVudGlsIHRoZSB0aGUgcHJldmlvdXMgU0VUIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSAoc3VjY2Vzc2Z1bCBvIGZhaWxlZCkuCisvLyBTbywgaG93IGRvIHdlIHF1YXJhbnRlZSB0aGlzIFJPQU1JTkcgcmVxdWVzdCB3b24ndCBjb3JydXB0IG90aGVyICJTRVQgT0lEIj8KKy8vIG9yIGJlZW4gY29ycnVwdGVkIGJ5IG90aGVyICJTRVQgT0lEIj8KKy8vCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgQ250bE1sbWVSb2FtaW5nUHJvYygKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJLy8gVE9ETzoKKwkvLyBBUCBpbiBkaWZmZXJlbnQgY2hhbm5lbCBtYXkgc2hvdyBsb3dlciBSU1NJIHRoYW4gYWN0dWFsIHZhbHVlPz8KKwkvLyBzaG91bGQgd2UgYWRkIGEgd2VpZ2h0aW5nIGZhY3RvciB0byBjb21wZW5zYXRlIGl0PworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQ05UTCAtIFJvYW1pbmcgaW4gTWxtZUF1eC5Sb2FtVGFiLi4uXG4iKSk7CisKKwlOZGlzTW92ZU1lbW9yeSgmcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIsICZwQWQtPk1sbWVBdXguUm9hbVRhYiwgc2l6ZW9mKHBBZC0+TWxtZUF1eC5Sb2FtVGFiKSk7CisJcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIgPSBwQWQtPk1sbWVBdXguUm9hbVRhYi5Cc3NOcjsKKworCUJzc1RhYmxlU29ydEJ5UnNzaSgmcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIpOworCXBBZC0+TWxtZUF1eC5Cc3NJZHggPSAwOworCUl0ZXJhdGVPbkJzc1RhYihwQWQpOworfQorCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDbnRsT2lkRExTU2V0dXBQcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlQUlRfODAyXzExX0RMUwkJcERMUyA9IChQUlRfODAyXzExX0RMUylFbGVtLT5Nc2c7CisJTUxNRV9ETFNfUkVRX1NUUlVDVAlNbG1lRGxzUmVxOworCUlOVAkJCQkJaTsKKwlVU0hPUlQJCQkJcmVhc29uID0gUkVBU09OX1VOU1BFQ0lGWTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQ05UTCAtIChPSUQgc2V0ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IHdpdGggVmFsaWQ9JWQsIFN0YXR1cz0lZCwgVGltZU91dD0lZCwgQ291bnREb3duVGltZXI9JWQpXG4iLAorCQlwRExTLT5NYWNBZGRyWzBdLCBwRExTLT5NYWNBZGRyWzFdLCBwRExTLT5NYWNBZGRyWzJdLCBwRExTLT5NYWNBZGRyWzNdLCBwRExTLT5NYWNBZGRyWzRdLCBwRExTLT5NYWNBZGRyWzVdLAorCQlwRExTLT5WYWxpZCwgcERMUy0+U3RhdHVzLCBwRExTLT5UaW1lT3V0LCBwRExTLT5Db3VudERvd25UaW1lcikpOworCisJaWYgKCFwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwkJcmV0dXJuOworCisJLy8gRExTIHdpbGwgbm90IGJlIHN1cHBvcnRlZCB3aGVuIEFkaG9jIG1vZGUKKwlpZiAoSU5GUkFfT04ocEFkKSkKKwl7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCQl7CisJCQlpZiAocERMUy0+VmFsaWQgJiYgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKSAmJgorCQkJCShwRExTLT5UaW1lT3V0ID09IHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQpICYmIE1BQ19BRERSX0VRVUFMKHBETFMtPk1hY0FkZHIsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQkJeworCQkJCS8vIDEuIFNhbWUgc2V0dGluZywganVzdCBkcm9wIGl0CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJDTlRMIC0gc2V0dGluZyB1bmNoYW5nZWRcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UgaWYgKCFwRExTLT5WYWxpZCAmJiBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpICYmCisJCQkJTUFDX0FERFJfRVFVQUwocERMUy0+TWFjQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCQl7CisJCQkJLy8gMi4gRGlzYWJsZSBETFMgbGluayBjYXNlLCBqdXN0IHRlYXIgZG93biBETFMgbGluaworCQkJCXJlYXNvbiA9IFJFQVNPTl9RT1NfVU5XQU5URURfTUVDSEFOSVNNOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzCT0gRExTX05PTkU7CisJCQkJRGxzUGFybUZpbGwocEFkLCAmTWxtZURsc1JlcSwgJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLCByZWFzb24pOworCQkJCU1sbWVFbnF1ZXVlKHBBZCwgRExTX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RMU19URUFSX0RPV04sIHNpemVvZihNTE1FX0RMU19SRVFfU1RSVUNUKSwgJk1sbWVEbHNSZXEpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQ05UTCAtIHN0YXJ0IHRlYXIgZG93biBwcm9jZWR1cmVcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UgaWYgKChpIDwgTUFYX05VTV9PRl9ETFNfRU5UUlkpICYmIHBETFMtPlZhbGlkICYmICFwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCkKKwkJCXsKKwkJCQkvLyAzLiBFbmFibGUgY2FzZSwgc3RhcnQgRExTIHNldHVwIHByb2NlZHVyZQorCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcERMUywgc2l6ZW9mKFJUXzgwMl8xMV9ETFNfVUkpKTsKKworCQkJCS8vVXBkYXRlIGNvdW50ZG93biB0aW1lcgorCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID0gcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dDsKKwkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1JFUSwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJDTlRMIC0gRExTIHNldHVwIGNhc2VcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVsc2UgaWYgKChpIDwgTUFYX05VTV9PRl9ETFNfRU5UUlkpICYmIHBETFMtPlZhbGlkICYmIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmCisJCQkJKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKSAmJiAhTUFDX0FERFJfRVFVQUwocERMUy0+TWFjQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCQl7CisJCQkJLy8gNC4gdXBkYXRlIG1hYyBjYXNlLCB0ZWFyIGRvd24gb2xkIERMUyBhbmQgc2V0dXAgbmV3IERMUworCQkJCXJlYXNvbiA9IFJFQVNPTl9RT1NfVU5XQU5URURfTUVDSEFOSVNNOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzCT0gRExTX05PTkU7CisJCQkJRGxzUGFybUZpbGwocEFkLCAmTWxtZURsc1JlcSwgJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLCByZWFzb24pOworCQkJCU1sbWVFbnF1ZXVlKHBBZCwgRExTX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RMU19URUFSX0RPV04sIHNpemVvZihNTE1FX0RMU19SRVFfU1RSVUNUKSwgJk1sbWVEbHNSZXEpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcERMUywgc2l6ZW9mKFJUXzgwMl8xMV9ETFNfVUkpKTsKKwkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1JFUSwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJDTlRMIC0gRExTIHRlYXIgZG93biBhbmQgcmVzdGFydCBjYXNlXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlIGlmIChwRExTLT5WYWxpZCAmJiBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJgorCQkJCU1BQ19BRERSX0VRVUFMKHBETFMtPk1hY0FkZHIsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lT3V0ICE9IHBETFMtPlRpbWVPdXQpKQorCQkJeworCQkJCS8vIDUuIHVwZGF0ZSB0aW1lb3V0IGNhc2UsIHN0YXJ0IERMUyBzZXR1cCBwcm9jZWR1cmUgKG5vIHRlYXIgZG93bikKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lT3V0CT0gcERMUy0+VGltZU91dDsKKwkJCQkvL1VwZGF0ZSBjb3VudGRvd24gdGltZXIKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5Db3VudERvd25UaW1lciA9IHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQ7CisJCQkJRGxzUGFybUZpbGwocEFkLCAmTWxtZURsc1JlcSwgJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLCByZWFzb24pOworCQkJCU1sbWVFbnF1ZXVlKHBBZCwgRExTX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RMU19SRVEsIHNpemVvZihNTE1FX0RMU19SRVFfU1RSVUNUKSwgJk1sbWVEbHNSZXEpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiQ05UTCAtIERMUyB1cGRhdGUgdGltZW91dCBjYXNlXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlIGlmIChwRExTLT5WYWxpZCAmJiBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJgorCQkJCShwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgIT0gRExTX0ZJTklTSCkgJiYgTUFDX0FERFJfRVFVQUwocERMUy0+TWFjQWRkciwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCQl7CisJCQkJLy8gNi4gcmUtc2V0dXAgY2FzZSwgc3RhcnQgRExTIHNldHVwIHByb2NlZHVyZSAobm8gdGVhciBkb3duKQorCQkJCURsc1Bhcm1GaWxsKHBBZCwgJk1sbWVEbHNSZXEsICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXSwgcmVhc29uKTsKKwkJCQlNbG1lRW5xdWV1ZShwQWQsIERMU19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ETFNfUkVRLCBzaXplb2YoTUxNRV9ETFNfUkVRX1NUUlVDVCksICZNbG1lRGxzUmVxKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkNOVEwgLSBETFMgcmV0cnkgc2V0dXAgcHJvY2VkdXJlXG4iKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwoIkNOVEwgLSBETFMgbm90IGNoYW5nZWQgaW4gZW50cnkgLSAlZCAtIFZhbGlkPSVkLCBTdGF0dXM9JWQsIFRpbWVPdXQ9JWRcbiIsCisJCQkJCWksIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQpKTsKKwkJCX0KKwkJfQorCX0KK30KKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQ250bFdhaXREaXNhc3NvY1Byb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCU1MTUVfU1RBUlRfUkVRX1NUUlVDVCAgICAgU3RhcnRSZXE7CisKKwlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfRElTQVNTT0NfQ09ORikKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBEaXMtYXNzb2NpYXRlIHN1Y2Nlc3NmdWxcbiIpKTsKKworCSAgICBpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCXsKKwkJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX0RJU0FTU09DX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisJCX0KKworCQlMaW5rRG93bihwQWQsIEZBTFNFKTsKKworCQkvLyBjYXNlIDEuIG5vIG1hdGNoaW5nIEJTUywgYW5kIHVzZXIgd2FudHMgQURIT0MsIHNvIHdlIGp1c3Qgc3RhcnQgYSBuZXcgb25lCisJCWlmICgocEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnI9PTApICYmIChwQWQtPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBObyBtYXRjaGluZyBCU1MsIHN0YXJ0IGEgbmV3IEFESE9DIChTc2lkPSVzKS4uLlxuIixwQWQtPk1sbWVBdXguU3NpZCkpOworCQkJU3RhcnRQYXJtRmlsbChwQWQsICZTdGFydFJlcSwgcEFkLT5NbG1lQXV4LlNzaWQsIHBBZC0+TWxtZUF1eC5Tc2lkTGVuKTsKKwkJCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9TVEFSVF9SRVEsIHNpemVvZihNTE1FX1NUQVJUX1JFUV9TVFJVQ1QpLCAmU3RhcnRSZXEpOworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9TVEFSVDsKKwkJfQorCQkvLyBjYXNlIDIuIHRyeSBlYWNoIG1hdGNoZWQgQlNTCisJCWVsc2UKKwkJeworCQkJcEFkLT5NbG1lQXV4LkJzc0lkeCA9IDA7CisKKwkJCUl0ZXJhdGVPbkJzc1RhYihwQWQpOworCQl9CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDbnRsV2FpdEpvaW5Qcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgUmVhc29uOworCU1MTUVfQVVUSF9SRVFfU1RSVUNUICAgICAgICBBdXRoUmVxOworCisJaWYgKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX0pPSU5fQ09ORikKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KCZSZWFzb24sIEVsZW0tPk1zZywgc2l6ZW9mKFVTSE9SVCkpOworCQlpZiAoUmVhc29uID09IE1MTUVfU1VDQ0VTUykKKwkJeworCQkJLy8gMS4gam9pbmVkIGFuIElCU1MsIHdlIGFyZSBwcmV0dHkgbXVjaCBkb25lIGhlcmUKKwkJCWlmIChwQWQtPk1sbWVBdXguQnNzVHlwZSA9PSBCU1NfQURIT0MpCisJCQl7CisJCQkgICAgLy8KKwkJCQkvLyA1RyBiYW5kcyBydWxlcyBvZiBKYXBhbjoKKwkJCQkvLyBBZCBob2MgbXVzdCBiZSBkaXNhYmxlZCBpbiBXNTMoY2g1Miw1Niw2MCw2NCkgY2hhbm5lbHMuCisJCQkJLy8KKwkJCQlpZiAoIChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKSAmJgorICAgICAgICAgICAgICAgICAgICAgIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwkJCQkgICApCisJCQkJeworCQkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQ2hhbm5lbD0lZCwgSm9pbiBhZGhvYyBvbiBXNTMoNTIsNTYsNjAsNjQpIENoYW5uZWxzIGFyZSBub3QgYWNjZXB0ZWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKworCQkJCUxpbmtVcChwQWQsIEJTU19BREhPQyk7CisJCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gam9pbiB0aGUgSUJTUyA9ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IC4uLlxuIiwKKwkJCQlwQWQtPkNvbW1vbkNmZy5Cc3NpZFswXSxwQWQtPkNvbW1vbkNmZy5Cc3NpZFsxXSxwQWQtPkNvbW1vbkNmZy5Cc3NpZFsyXSwKKwkJCQlwQWQtPkNvbW1vbkNmZy5Cc3NpZFszXSxwQWQtPkNvbW1vbkNmZy5Cc3NpZFs0XSxwQWQtPkNvbW1vbkNmZy5Cc3NpZFs1XSkpOworCisgICAgICAgICAgICAgICAgcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKyAgICAgICAgICAgICAgICBwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19VUDsKKwkJCX0KKwkJCS8vIDIuIGpvaW5lZCBhIG5ldyBJTkZSQSBuZXR3b3JrLCBzdGFydCBmcm9tIGF1dGhlbnRpY2F0aW9uCisJCQllbHNlCisJCQl7CisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkJLy8gQWRkIEF1dGhNb2RlICJMRUFQIiBmb3IgQ0NYIDEuWAorCQkJCWlmIChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorCQkJCXsKKwkJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgQ0lTQ09fQXV0aE1vZGVMRUFQKTsKKwkJCQl9CisJCQkJZWxzZQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQkJCXsKKwkJCQkJLy8gZWl0aGVyIE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCBvciBOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoLCB0cnkgc2hhcmVkIGtleSBmaXJzdAorCQkJCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkgfHwKKwkJCQkJCShwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoKSkKKwkJCQkJeworCQkJCQkJQXV0aFBhcm1GaWxsKHBBZCwgJkF1dGhSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCUF1dGhQYXJtRmlsbChwQWQsICZBdXRoUmVxLCBwQWQtPk1sbWVBdXguQnNzaWQsIE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pOworCQkJCQl9CisJCQkJfQorCQkJCU1sbWVFbnF1ZXVlKHBBZCwgQVVUSF9TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9BVVRIX1JFUSwKKwkJCQkJCQlzaXplb2YoTUxNRV9BVVRIX1JFUV9TVFJVQ1QpLCAmQXV0aFJlcSk7CisKKwkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0FVVEg7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyAzLiBmYWlsZWQsIHRyeSBuZXh0IEJTUworCQkJcEFkLT5NbG1lQXV4LkJzc0lkeCsrOworCQkJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7CisJCX0KKwl9Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQ250bFdhaXRTdGFydFByb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgICAgIFJlc3VsdDsKKworCWlmIChFbGVtLT5Nc2dUeXBlID09IE1UMl9TVEFSVF9DT05GKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoJlJlc3VsdCwgRWxlbS0+TXNnLCBzaXplb2YoVVNIT1JUKSk7CisJCWlmIChSZXN1bHQgPT0gTUxNRV9TVUNDRVNTKQorCQl7CisJCSAgICAvLworCQkJLy8gNUcgYmFuZHMgcnVsZXMgb2YgSmFwYW46CisJCQkvLyBBZCBob2MgbXVzdCBiZSBkaXNhYmxlZCBpbiBXNTMoY2g1Miw1Niw2MCw2NCkgY2hhbm5lbHMuCisJCQkvLworCQkJaWYgKCAocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPT0gMSkgJiYKKyAgICAgICAgICAgICAgICAgIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwkJCSAgICkKKwkJCXsKKwkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBDaGFubmVsPSVkLCBTdGFydCBhZGhvYyBvbiBXNTMoNTIsNTYsNjAsNjQpIENoYW5uZWxzIGFyZSBub3QgYWNjZXB0ZWRcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKKwkJCQlyZXR1cm47CisJCQl9CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlpZiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKQorCQkJeworCQkJCU5fQ2hhbm5lbENoZWNrKHBBZCk7CisJCQkJU2V0Q29tbW9uSFQocEFkKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5NbG1lQXV4LkFkZEh0SW5mbywgJnBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbywgc2l6ZW9mKEFERF9IVF9JTkZPX0lFKSk7CisJCQkJUlRNUENoZWNrSHQocEFkLCBCU1NJRF9XQ0lELCAmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LCAmcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvKTsKKwkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9IFRSVUU7CisJCQkJTmRpc1plcm9NZW1vcnkoJnBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdLCAxNik7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdLCAmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lk1DU1NldFswXSwgMTYpOworCQkJCUNPUFlfSFRTRVRUSU5HU19GUk9NX01MTUVfQVVYX1RPX0FDVElWRV9DRkcocEFkKTsKKworCQkJCWlmICgocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggID09IEJXXzQwKSAmJgorCQkJCQkocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID09IEVYVENIQV9BQk9WRSkpCisJCQkJeworCQkJCQlwQWQtPk1sbWVBdXguQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsICsgMjsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoICA9PSBCV180MCkgJiYKKwkJCQkJCSAocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLkFkZEh0SW5mby5FeHRDaGFuT2Zmc2V0ID09IEVYVENIQV9CRUxPVykpCisJCQkJeworCQkJCQlwQWQtPk1sbWVBdXguQ2VudHJhbENoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsIC0gMjsKKwkJCQl9CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQl7CisJCQkJcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iSHRFbmFibGUgPSBGQUxTRTsKKwkJCX0KKwkJCUxpbmtVcChwQWQsIEJTU19BREhPQyk7CisJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOworCQkJLy8gQmVmb3JlIHNlbmQgYmVhY29uLCBkcml2ZXIgbmVlZCBkbyByYWRhciBkZXRlY3Rpb24KKwkJCWlmICgocEFkLT5Db21tb25DZmcuQ2hhbm5lbCA+IDE0ICkKKwkJCQkmJiAocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPT0gMSkKKwkJCQkmJiBSYWRhckNoYW5uZWxDaGVjayhwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpKQorCQkJeworCQkJCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSA9IFJEX1NJTEVOQ0VfTU9ERTsKKwkJCQlwQWQtPkNvbW1vbkNmZy5SYWRhckRldGVjdC5SRENvdW50ID0gMDsKKyNpZmRlZiBERlNfU1VQUE9SVAorCQkJCUJicFJhZGFyRGV0ZWN0aW9uU3RhcnQocEFkKTsKKyNlbmRpZiAvLyBERlNfU1VQUE9SVCAvLworCQkJfQorCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gc3RhcnQgYSBuZXcgSUJTUyA9ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IC4uLlxuIiwKKwkJCQlwQWQtPkNvbW1vbkNmZy5Cc3NpZFswXSxwQWQtPkNvbW1vbkNmZy5Cc3NpZFsxXSxwQWQtPkNvbW1vbkNmZy5Cc3NpZFsyXSwKKwkJCQlwQWQtPkNvbW1vbkNmZy5Cc3NpZFszXSxwQWQtPkNvbW1vbkNmZy5Cc3NpZFs0XSxwQWQtPkNvbW1vbkNmZy5Cc3NpZFs1XSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIFN0YXJ0IElCU1MgZmFpbC4gQlVHISEhISFcbiIpKTsKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIENudGxXYWl0QXV0aFByb2MoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgUmVhc29uOworCU1MTUVfQVNTT0NfUkVRX1NUUlVDVCAgICAgICAgQXNzb2NSZXE7CisJTUxNRV9BVVRIX1JFUV9TVFJVQ1QgICAgICAgICBBdXRoUmVxOworCisJaWYgKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX0FVVEhfQ09ORikKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KCZSZWFzb24sIEVsZW0tPk1zZywgc2l6ZW9mKFVTSE9SVCkpOworCQlpZiAoUmVhc29uID09IE1MTUVfU1VDQ0VTUykKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEFVVEggT0tcbiIpKTsKKwkJCUFzc29jUGFybUZpbGwocEFkLCAmQXNzb2NSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgcEFkLT5NbG1lQXV4LkNhcGFiaWxpdHlJbmZvLAorCQkJCQkJICBBU1NPQ19USU1FT1VULCBwQWQtPlN0YUNmZy5EZWZhdWx0TGlzdGVuQ291bnQpOworCisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQkvLworCQkJLy8gQ2lzY28gTGVhcCBDQ0tNIHN1cHBvcnRlZCBSZS1hc3NvY2lhdGlvbi4KKwkJCS8vCisJCQlpZiAoTEVBUF9DQ0tNX09OKHBBZCkgJiYgKHBBZC0+U3RhQ2ZnLkNDS01MaW5rVXBGbGFnID09IFRSVUUpKQorCQkJeworCQkJCS8vaWYgQ0NLTSBpcyB0dXJuIG9uICwgdGhhdCdzIG1lYW4gRmFzdCBSZWF1dGhlbnRpY2F0aW9uCisJCQkJLy9Vc2UgQ0NLTSBSZWFzc29jaWF0aW9uIGluc3RlYWQgb2Ygbm9ybWFsIGFzc29jaWF0aW9uIGZvciBGYXN0IFJvYW1pbmcuCisJCQkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9SRUFTU09DX1JFUSwKKwkJCQkJCQlzaXplb2YoTUxNRV9BU1NPQ19SRVFfU1RSVUNUKSwgJkFzc29jUmVxKTsKKworCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfUkVBU1NPQzsKKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKwkJCXsKKwkJCQlNbG1lRW5xdWV1ZShwQWQsIEFTU09DX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0FTU09DX1JFUSwKKwkJCQkJCQlzaXplb2YoTUxNRV9BU1NPQ19SRVFfU1RSVUNUKSwgJkFzc29jUmVxKTsKKworCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfQVNTT0M7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBUaGlzIGZhaWwgbWF5IGJlY2F1c2Ugb2YgdGhlIEFQIGFscmVhZHkga2VlcCB1cyBpbiBpdHMgTUFDIHRhYmxlIHdpdGhvdXQKKwkJCS8vIGFnZWluZy1vdXQuIFRoZSBwcmV2aW91cyBhdXRoZW50aWNhdGlvbiBhdHRlbXB0IG11c3QgaGF2ZSBsZXQgaXQgcmVtb3ZlIHVzLgorCQkJLy8gc28gdHJ5IEF1dGhlbnRpY2F0aW9uIGFnYWluIG1heSBoZWxwLiBGb3IgRC1MaW5rIERXTC05MDBBUCsgY29tcGF0aWJpbGl0eS4KKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBBVVRIIEZBSUwsIHRyeSBhZ2Fpbi4uLlxuIikpOworI2lmZGVmIExFQVBfU1VQUE9SVAorCQkJLy9BZGQgQXV0aE1vZGUgIkxFQVAiIGZvciBDQ1ggMS5YCisJCQlpZiAocEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKwkJCXsKKwkJCQlBdXRoUGFybUZpbGwocEFkLCAmQXV0aFJlcSwgcEFkLT5NbG1lQXV4LkJzc2lkLCBDSVNDT19BdXRoTW9kZUxFQVApOworCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQkJeworCQkJCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKSB8fAorCQkJCQkocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCkpCisJCQkJeworCQkJCQkvLyBlaXRoZXIgTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkIG9yIE5kaXM4MDJfMTFBdXRoTW9kZUF1dG9Td2l0Y2gsIHRyeSBzaGFyZWQga2V5IGZpcnN0CisJCQkJCUF1dGhQYXJtRmlsbChwQWQsICZBdXRoUmVxLCBwQWQtPk1sbWVBdXguQnNzaWQsIE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUF1dGhQYXJtRmlsbChwQWQsICZBdXRoUmVxLCBwQWQtPk1sbWVBdXguQnNzaWQsIE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pOworCQkJCX0KKwkJCX0KKwkJCU1sbWVFbnF1ZXVlKHBBZCwgQVVUSF9TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9BVVRIX1JFUSwKKwkJCQkJCXNpemVvZihNTE1FX0FVVEhfUkVRX1NUUlVDVCksICZBdXRoUmVxKTsKKworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9BVVRIMjsKKwkJfQorCX0KK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQ250bFdhaXRBdXRoUHJvYzIoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgUmVhc29uOworCU1MTUVfQVNTT0NfUkVRX1NUUlVDVCAgICAgICAgQXNzb2NSZXE7CisJTUxNRV9BVVRIX1JFUV9TVFJVQ1QgICAgICAgICBBdXRoUmVxOworCisJaWYgKEVsZW0tPk1zZ1R5cGUgPT0gTVQyX0FVVEhfQ09ORikKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KCZSZWFzb24sIEVsZW0tPk1zZywgc2l6ZW9mKFVTSE9SVCkpOworCQlpZiAoUmVhc29uID09IE1MTUVfU1VDQ0VTUykKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEFVVEggT0tcbiIpKTsKKwkJCUFzc29jUGFybUZpbGwocEFkLCAmQXNzb2NSZXEsIHBBZC0+TWxtZUF1eC5Cc3NpZCwgcEFkLT5NbG1lQXV4LkNhcGFiaWxpdHlJbmZvLAorCQkJCQkJICBBU1NPQ19USU1FT1VULCBwQWQtPlN0YUNmZy5EZWZhdWx0TGlzdGVuQ291bnQpOworCQkJTWxtZUVucXVldWUocEFkLCBBU1NPQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9BU1NPQ19SRVEsCisJCQkJCQlzaXplb2YoTUxNRV9BU1NPQ19SRVFfU1RSVUNUKSwgJkFzc29jUmVxKTsKKworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfV0FJVF9BU1NPQzsKKwkJfQorCQllbHNlCisJCXsKKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJCS8vIFByb2Nlc3MgTEVBUCBmaXJzdCwgc2luY2UgaXQgdXNlIGRpZmZlcmVudCBjb250cm9sIHZhcmlhYmxlCisJCQkvLyBXZSBkb24ndCB3YW50IHRvIGFmZmVjdCBvdGhlciBwb3ZlbiBvcGVyYXRpb24KKwkJCWlmIChwQWQtPlN0YUNmZy5MZWFwQXV0aE1vZGUgPT0gQ0lTQ09fQXV0aE1vZGVMRUFQKQorCQkJeworCQkJCS8vIExFQVAgQXV0aCBub3Qgc3VjY2VzcywgdHJ5IG5leHQgQlNTCisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtICpMRUFQKiBBVVRIIEZBSUwsIGdpdmUgdXA7IHRyeSBuZXh0IEJTU1xuIikpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlRvdGFsIG1hdGNoIEJTU0lEIFs9JWRdXG4iLCBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NOcikpOworCQkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisJCQkJcEFkLT5NbG1lQXV4LkJzc0lkeCsrOworCQkJCUl0ZXJhdGVPbkJzc1RhYihwQWQpOworCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoKSAmJgorCQkJCSAocEFkLT5NbG1lQXV4LkFsZyA9PSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBBVVRIIEZBSUwsIHRyeSBPUEVOIHN5c3RlbS4uLlxuIikpOworCQkJCUF1dGhQYXJtRmlsbChwQWQsICZBdXRoUmVxLCBwQWQtPk1sbWVBdXguQnNzaWQsIE5kaXM4MDJfMTFBdXRoTW9kZU9wZW4pOworCQkJCU1sbWVFbnF1ZXVlKHBBZCwgQVVUSF9TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9BVVRIX1JFUSwKKwkJCQkJCQlzaXplb2YoTUxNRV9BVVRIX1JFUV9TVFJVQ1QpLCAmQXV0aFJlcSk7CisKKwkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0FVVEgyOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIG5vdCBzdWNjZXNzLCB0cnkgbmV4dCBCU1MKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQVVUSCBGQUlMLCBnaXZlIHVwOyB0cnkgbmV4dCBCU1NcbiIpKTsKKwkJCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9JRExFOyAvLz8/Pz8/Pz8KKwkJCQlwQWQtPk1sbWVBdXguQnNzSWR4Kys7CisJCQkJSXRlcmF0ZU9uQnNzVGFiKHBBZCk7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIENudGxXYWl0QXNzb2NQcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgICAgICBSZWFzb247CisKKwlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfQVNTT0NfQ09ORikKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KCZSZWFzb24sIEVsZW0tPk1zZywgc2l6ZW9mKFVTSE9SVCkpOworCQlpZiAoUmVhc29uID09IE1MTUVfU1VDQ0VTUykKKwkJeworCQkJTGlua1VwKHBBZCwgQlNTX0lORlJBKTsKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQXNzb2NpYXRpb24gc3VjY2Vzc2Z1bCBvbiBCU1MgIyVsZFxuIixwQWQtPk1sbWVBdXguQnNzSWR4KSk7CisKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwkJCXsKKwkJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19BU1NPQ19FVkVOVF9GTEFHLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIEJTUzAsIDApOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJLy8gbm90IHN1Y2Nlc3MsIHRyeSBuZXh0IEJTUworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEFzc29jaWF0aW9uIGZhaWxzIG9uIEJTUyAjJWxkXG4iLHBBZC0+TWxtZUF1eC5Cc3NJZHgpKTsKKwkJCXBBZC0+TWxtZUF1eC5Cc3NJZHgrKzsKKwkJCUl0ZXJhdGVPbkJzc1RhYihwQWQpOworCQl9CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBDbnRsV2FpdFJlYXNzb2NQcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVU0hPUlQgICAgICBSZXN1bHQ7CisKKwlpZiAoRWxlbS0+TXNnVHlwZSA9PSBNVDJfUkVBU1NPQ19DT05GKQorCXsKKwkJTmRpc01vdmVNZW1vcnkoJlJlc3VsdCwgRWxlbS0+TXNnLCBzaXplb2YoVVNIT1JUKSk7CisJCWlmIChSZXN1bHQgPT0gTUxNRV9TVUNDRVNTKQorCQl7CisJCQkvLworCQkJLy8gTkRJUyByZXF1aXJlcyBhIG5ldyBMaW5rIFVQIGluZGljYXRpb24gYnV0IG5vIExpbmsgRG93biBmb3IgUkUtQVNTT0MKKwkJCS8vCisJCQlMaW5rVXAocEFkLCBCU1NfSU5GUkEpOworCisJCQkvLyBzZW5kIHdpcmVsZXNzIGV2ZW50IC0gZm9yIGFzc29jaWF0aW9uCisJCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfQVNTT0NfRVZFTlRfRkxBRywgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBCU1MwLCAwKTsKKworCisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQlpZiAoTEVBUF9DQ0tNX09OKHBBZCkpCisJCQl7CisJCQkJU1RBX1BPUlRfU0VDVVJFRChwQWQpOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfRklOSVNIOworCQkJfQorI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCQkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBSZS1hc3NvY2l0aW9uIHN1Y2Nlc3NmdWwgb24gQlNTICMlbGRcbiIsIHBBZC0+TWxtZUF1eC5Sb2FtSWR4KSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyByZWFzc29jIGZhaWxlZCwgdHJ5IHRvIHBpY2sgbmV4dCBCU1MgaW4gdGhlIEJTUyBUYWJsZQorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIFJlLWFzc29jaXRpb24gZmFpbHMgb24gQlNTICMlbGRcbiIsIHBBZC0+TWxtZUF1eC5Sb2FtSWR4KSk7CisJCQlwQWQtPk1sbWVBdXguUm9hbUlkeCsrOworCQkJSXRlcmF0ZU9uQnNzVGFiMihwQWQpOworCQl9CisJfQorfQorCisKK1ZPSUQJQWRob2NUdXJuT25Rb3MoCisJSU4gIFBSVE1QX0FEQVBURVIgcEFkKQoreworI2RlZmluZSBBQzBfREVGX1RYT1AJCTAKKyNkZWZpbmUgQUMxX0RFRl9UWE9QCQkwCisjZGVmaW5lIEFDMl9ERUZfVFhPUAkJOTQKKyNkZWZpbmUgQUMzX0RFRl9UWE9QCQk0NworCisJLy8gVHVybiBvbiBRT3MgaWYgdXNlIEhUIHJhdGUuCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYlZhbGlkID09IEZBTFNFKQorCXsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iVmFsaWQgPSBUUlVFOworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkFpZnNuWzBdID0gMzsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5BaWZzblsxXSA9IDc7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQWlmc25bMl0gPSAxOworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkFpZnNuWzNdID0gMTsKKworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWluWzBdID0gNDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21pblsxXSA9IDQ7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtaW5bMl0gPSAzOworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWluWzNdID0gMjsKKworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWF4WzBdID0gMTA7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uQ3dtYXhbMV0gPSA2OworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLkN3bWF4WzJdID0gNDsKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5Dd21heFszXSA9IDM7CisKKwkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5UeG9wWzBdICA9IDA7CisJCXBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uVHhvcFsxXSAgPSAwOworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLlR4b3BbMl0gID0gQUMyX0RFRl9UWE9QOworCQlwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtLlR4b3BbM10gID0gQUMzX0RFRl9UWE9QOworCX0KKwlBc2ljU2V0RWRjYVBhcm0ocEFkLCAmcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIExpbmtVcCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVQ0hBUiBCc3NUeXBlKQoreworCVVMT05HCU5vdzsKKwlVSU5UMzIJRGF0YTsKKwlCT09MRUFOCUNhbmNlbGxlZDsKKwlVQ0hBUglWYWx1ZSA9IDAsIGlkeDsKKwlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeSA9IE5VTEwsICpwQ3VyckVudHJ5OworCisJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisKKwkvLworCS8vIEFTU09DIC0gRGlzYXNzb2NUaW1lb3V0QWN0aW9uCisJLy8gQ05UTCAtIERpcy1hc3NvY2lhdGUgc3VjY2Vzc2Z1bAorCS8vICEhISBMSU5LIERPV04gISEhCisJLy8gWzg4ODg4XSBPSURfODAyXzExX1NTSUQgc2hvdWxkIGhhdmUgcmV0dXJuZWQgTkRURVNUX1dFUF9BUDIoUmV0dXJuZWQ6ICkKKwkvLworCS8vIFRvIHByZXZlbnQgRGlzYXNzb2NUaW1lb3V0QWN0aW9uIHRvIGNhbGwgTGluayBkb3duIGFmdGVyIHdlIGxpbmsgdXAsCisJLy8gY2FuY2VsIHRoZSBEaXNhc3NvY1RpbWVyIG5vIG1hdHRlciB3aGF0IGl0IHN0YXJ0IG9yIG5vdC4KKwkvLworCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkRpc2Fzc29jVGltZXIsICAmQ2FuY2VsbGVkKTsKKworCUNPUFlfU0VUVElOR1NfRlJPTV9NTE1FX0FVWF9UT19BQ1RJVkVfQ0ZHKHBBZCk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlDT1BZX0hUU0VUVElOR1NfRlJPTV9NTE1FX0FVWF9UT19BQ1RJVkVfQ0ZHKHBBZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJLy8gSXQncyBxdWl0ZSBkaWZmaWN1bHQgdG8gdGVsbCBpZiBhIG5ld2x5IGFkZGVkIEtFWSBpcyBXRVAgb3IgQ0tJUCB1bnRpbCBhIG5ldyBCU1MKKwkvLyBpcyBmb3JtZWQgKGVpdGhlciBBU1NPQy9SRS1BU1NPQyBkb25lIG9yIElCU1Mgc3RhcnRlZC4gTGlua1VQIHNob3VsZCBiZSBhIHNhZmUgcGxhY2UKKwkvLyB0byBleGFtaW5lIGlmIGNpcGhlciBhbGdvcml0aG0gc3dpdGNoaW5nIGlzIHJlcXVpcmVkLgorCS8vcnQyODYwYi4gRG9uJ3Qga25vdyB3aHkgbmVlZCB0aGlzCisJU3dpdGNoQmV0d2VlbldlcEFuZENraXAocEFkKTsKKworCisJaWYgKEJzc1R5cGUgPT0gQlNTX0FESE9DKQorCXsKKwkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FESE9DX09OKTsKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfSU5GUkFfT04pOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmICgocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggID09IEJXXzQwKSAmJgorCQkJKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9PSBFWFRDSEFfQUJPVkUpKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgKyAyOworCQl9CisJCWVsc2UgaWYgKChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMikgJiYKKwkJCQkgKHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoICA9PSBCV180MCkgJiYKKwkJCQkgKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mby5BZGRIdEluZm8uRXh0Q2hhbk9mZnNldCA9PSBFWFRDSEFfQkVMT1cpKQorCQl7CisJCQlwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgLSAyOworCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKyNpZmRlZiBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vIFJvZ2VyIHN5bmMgQ2FycmllcgorCQkvLyBObyBjYXJyaWVyIGRldGVjdGlvbiB3aGVuIGFkaG9jCisJCS8vIENhcnJpZXJEZXRlY3Rpb25TdG9wKHBBZCk7CisJCXBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuQ0RfU3RhdGUgPSBDRF9OT1JNQUw7CisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpCisJCQlBZGhvY1R1cm5PblFvcyhwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhIUFkaG9jIExJTksgVVAgISEhIFxuIiApKTsKKwl9CisJZWxzZQorCXsKKwkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0lORlJBX09OKTsKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQURIT0NfT04pOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhIUluZnJhIExJTksgVVAgISEhIFxuIiApKTsKKwl9CisKKwkvLyAzKjMKKwkvLyByZXNldCBUeCBiZWFtZm9ybWluZyBiaXQKKwlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZWYWx1ZSk7CisJVmFsdWUgJj0gKH4weDAxKTsKKwlWYWx1ZSB8PSBwQWQtPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuVHhCRjsKKwlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBWYWx1ZSk7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkvLyBDaGFuZ2UgdG8gQVAgY2hhbm5lbAorICAgIGlmICgocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPiBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSAmJiAocEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoID09IEJXXzQwKSkKKwl7CisJCS8vIE11c3QgdXNpbmcgNDBNSHouCisJCXBBZC0+Q29tbW9uQ2ZnLkJCUEN1cnJlbnRCVyA9IEJXXzQwOworCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLCBGQUxTRSk7CisJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKTsKKworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZWYWx1ZSk7CisJCVZhbHVlICY9ICh+MHgxOCk7CisJCVZhbHVlIHw9IDB4MTA7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIFZhbHVlKTsKKworCQkvLyAgUlggOiBjb250cm9sIGNoYW5uZWwgYXQgbG93ZXIKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmVmFsdWUpOworCQlWYWx1ZSAmPSAofjB4MjApOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBWYWx1ZSk7CisKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBUWF9CQU5EX0NGRywgJkRhdGEpOworCQlEYXRhICY9IDB4ZmZmZmZmZmU7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBEYXRhKTsKKworCQlpZiAocEFkLT5NQUNWZXJzaW9uID09IDB4Mjg2MDAxMDApCisJCXsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY5LCAweDFBKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjcwLCAweDBBKTsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjczLCAweDE2KTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhIXJ0Mjg2MEMgISEhIFxuIiApKTsKKwkJfQorCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhITQwTUh6IExvd2VyIExJTksgVVAgISEhIENvbnRyb2wgQ2hhbm5lbCBhdCBCZWxvdy4gQ2VudHJhbCA9ICVkIFxuIiwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgKSk7CisJfQorCWVsc2UgaWYgKChwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA8IHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpICYmIChwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKQorICAgIHsKKwkgICAgLy8gTXVzdCB1c2luZyA0ME1Iei4KKwkJcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfNDA7CisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkgICAgQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gKH4weDE4KTsKKwkJVmFsdWUgfD0gMHgxMDsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgVmFsdWUpOworCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZEYXRhKTsKKwkJRGF0YSB8PSAweDE7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFRYX0JBTkRfQ0ZHLCBEYXRhKTsKKworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsICZWYWx1ZSk7CisJICAgIFZhbHVlIHw9ICgweDIwKTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgVmFsdWUpOworCisJCWlmIChwQWQtPk1BQ1ZlcnNpb24gPT0gMHgyODYwMDEwMCkKKwkJeworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNjksIDB4MUEpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzAsIDB4MEEpOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNzMsIDB4MTYpOworCQkJICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhIXJ0Mjg2MEMgISEhIFxuIiApKTsKKwkJfQorCisJICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISA0ME1IeiBVcHBlciBMSU5LIFVQICEhISBDb250cm9sIENoYW5uZWwgYXQgVXBwZXJDZW50cmFsID0gJWQgXG4iLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCApKTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworICAgIHsKKwkgICAgcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfMjA7CisJCXBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKKwkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJlZhbHVlKTsKKwkJVmFsdWUgJj0gKH4weDE4KTsKKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgVmFsdWUpOworCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgVFhfQkFORF9DRkcsICZEYXRhKTsKKwkJRGF0YSAmPSAweGZmZmZmZmZlOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBUWF9CQU5EX0NGRywgRGF0YSk7CisKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCAmVmFsdWUpOworCQlWYWx1ZSAmPSAofjB4MjApOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1IzLCBWYWx1ZSk7CisKKwkJaWYgKHBBZC0+TUFDVmVyc2lvbiA9PSAweDI4NjAwMTAwKQorCQl7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I2OSwgMHgxNik7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MCwgMHgwOCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I3MywgMHgxMSk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISFydDI4NjBDICEhISBcbiIgKSk7CisJCX0KKworCSAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgMjBNSHogTElOSyBVUCAhISEgXG4iICkpOworICAgIH0KKworCVJUTVBTZXRBR0NJbml0VmFsdWUocEFkLCBwQWQtPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcpOworCS8vCisJLy8gU2F2ZSBCQlBfUjY2IHZhbHVlLCBpdCB3aWxsIGJlIHVzZWQgaW4gUlRVU0JSZXN1bWVNc2R1VHJhbnNtaXNzaW9uCisJLy8KKwlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjY2LCAmcEFkLT5CYnBUdW5pbmcuUjY2Q3VycmVudFZhbHVlKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMSU5LIFVQICEhISAoQnNzVHlwZT0lZCwgQUlEPSVkLCBzc2lkPSVzLCBDaGFubmVsPSVkLCBDZW50cmFsQ2hhbm5lbCA9ICVkKVxuIiwKKwkJQnNzVHlwZSwgcEFkLT5TdGFBY3RpdmUuQWlkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCkpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExJTksgVVAgISEhIChEZW5zaXR5ID0lZCwgKVxuIiwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5NcGR1RGVuc2l0eSkpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCUFzaWNTZXRCc3NpZChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKworCUFzaWNTZXRTbG90VGltZShwQWQsIFRSVUUpOworCUFzaWNTZXRFZGNhUGFybShwQWQsICZwQWQtPkNvbW1vbkNmZy5BUEVkY2FQYXJtKTsKKworCS8vIENhbGwgdGhpcyBmb3IgUlRTIHByb3RlY3Rpb25mb3IgbGVnYWN5IHJhdGUsIHdlIHdpbGwgYWx3YXlzIGVuYWJsZSBSVFMgdGhyZXNob2xkLCBidXQgbm9ybWFsbHkgaXQgd2lsbCBub3QgaGl0CisJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCAwLCAoT0ZETVNFVFBST1RFQ1QgfCBDQ0tTRVRQUk9URUNUKSwgVFJVRSwgRkFMU0UpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJaWYgKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9PSBUUlVFKSkKKwl7CisJCS8vIFVwZGF0ZSBIVCBwcm90ZWN0aW9uZm9yIGJhc2VkIG9uIEFQJ3Mgb3BlcmF0aW5nIG1vZGUuCisgICAgCWlmIChwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuTm9uR2ZQcmVzZW50ID09IDEpCisgICAgCXsKKyAgICAJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSwgIEFMTE5fU0VUUFJPVEVDVCwgRkFMU0UsIFRSVUUpOworICAgIAl9CisgICAgCWVsc2UKKyAgIAkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSwgIEFMTE5fU0VUUFJPVEVDVCwgRkFMU0UsIEZBTFNFKTsKKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5EcnNDb3VudGVycywgc2l6ZW9mKENPVU5URVJfRFJTKSk7CisKKwlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCXBBZC0+U3RhQ2ZnLkxhc3RCZWFjb25SeFRpbWUgPSBOb3c7ICAgLy8gbGFzdCBSWCB0aW1lc3RhbXAKKworCWlmICgocEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSAhPSBSdDgwMl8xMVByZWFtYmxlTG9uZykgJiYKKwkJQ0FQX0lTX1NIT1JUX1BSRUFNQkxFX09OKHBBZC0+U3RhQWN0aXZlLkNhcGFiaWxpdHlJbmZvKSkKKwl7CisJCU1sbWVTZXRUeFByZWFtYmxlKHBBZCwgUnQ4MDJfMTFQcmVhbWJsZVNob3J0KTsKKwl9CisKKwlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpOworCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSA9PSBSRF9TSUxFTkNFX01PREUpCisJeworI2lmZGVmIERGU19TVVBQT1JUCisJCVJhZGFyRGV0ZWN0aW9uU3RvcChwQWQpOworI2VuZGlmIC8vIERGU19TVVBQT1JUIC8vCisJfQorCXBBZC0+Q29tbW9uQ2ZnLlJhZGFyRGV0ZWN0LlJETW9kZSA9IFJEX05PUk1BTF9NT0RFOworCisJaWYgKEJzc1R5cGUgPT0gQlNTX0FESE9DKQorCXsKKwkJTWFrZUlic3NCZWFjb24ocEFkKTsKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMTQpCisJCQkmJiAocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPT0gMSkKKwkJCSYmIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpCisJCXsKKwkJCTsgLy9EbyBub3RoaW5nCisJCX0KKwkJZWxzZQorCQl7CisJCQlBc2ljRW5hYmxlSWJzc1N5bmMocEFkKTsKKwkJfQorCisJCS8vIEluIGFkIGhvYyBtb2RlLCB1c2UgTUFDIHRhYmxlIGZyb20gaW5kZXggMS4KKwkJLy8gcC5zIEFTSUMgdXNlIGFsbCAweGZmIGFzIHRlcm1pbmF0aW9uIG9mIFdDSUQgdGFibGUgc2VhcmNoLlRvIHByZXZlbnQgaXQncyAweGZmLWZmLWZmLWZmLWZmLWZmLCBXcml0ZSAwIGhlcmUuCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIE1BQ19XQ0lEX0JBU0UsIDB4MDApOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCAweDE4MDgsIDB4MDApOworCisJCS8vIElmIFdFUCBpcyBlbmFibGVkLCBhZGQga2V5IG1hdGVyaWFsIGFuZCBjaXBoZXJBbGcgaW50byBBc2ljCisJCS8vIEZpbGwgaW4gU2hhcmVkIEtleSBUYWJsZShvZmZzZXQ6IDB4NmMwMCkgYW5kIFNoYXJlZCBLZXkgTW9kZShvZmZzZXQ6IDB4NzAwMCkKKworCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBFbmFibGVkKQorCQl7CisJCQlQVUNIQVIJS2V5OworCQkJVUNIQVIgCUNpcGhlckFsZzsKKworCQkJZm9yIChpZHg9MDsgaWR4IDwgU0hBUkVfS0VZX05VTTsgaWR4KyspCisgICAgICAgIAl7CisJCQkJQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5DaXBoZXJBbGc7CisgICAgCQkJS2V5ID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXk7CisKKwkJCQlpZiAocEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXlMZW4gPiAwKQorCQkJCXsKKwkJCQkJLy8gU2V0IGtleSBtYXRlcmlhbCBhbmQgY2lwaGVyQWxnIHRvIEFzaWMKKyAgICAJCQkJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwgQlNTMCwgaWR4LCBDaXBoZXJBbGcsIEtleSwgTlVMTCwgTlVMTCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlkeCA9PSBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQpCisJCQkJCXsKKwkJCQkJCS8vIFVwZGF0ZSBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUgZm9yIHRoaXMgZ3JvdXAga2V5IHRhYmxlCisJCQkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwgQlNTMCwgaWR4LCBDaXBoZXJBbGcsIE5VTEwpOworCQkJCQl9CisJCQkJfQorCisKKwkJCX0KKwkJfQorCQkvLyBJZiBXUEFOb25lIGlzIGVuYWJsZWQsIGFkZCBrZXkgbWF0ZXJpYWwgYW5kIGNpcGhlckFsZyBpbnRvIEFzaWMKKwkJLy8gRmlsbCBpbiBTaGFyZWQgS2V5IFRhYmxlKG9mZnNldDogMHg2YzAwKSBhbmQgU2hhcmVkIEtleSBNb2RlKG9mZnNldDogMHg3MDAwKQorCQllbHNlIGlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFOb25lKQorCQl7CisJCQlwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSAwOwkvLyBhbHdheXMgYmUgemVybworCisgICAgICAgICAgICBOZGlzWmVyb01lbW9yeSgmcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0sIHNpemVvZihDSVBIRVJfS0VZKSk7CisJCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gTEVOX1RLSVBfRUs7CisJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXksIHBBZC0+U3RhQ2ZnLlBNSywgTEVOX1RLSVBfRUspOworCisgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorICAgICAgICAgICAgeworICAgIAkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlJ4TWljLCAmcEFkLT5TdGFDZmcuUE1LWzE2XSwgTEVOX1RLSVBfUlhNSUNLKTsKKyAgICAJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5UeE1pYywgJnBBZC0+U3RhQ2ZnLlBNS1sxNl0sIExFTl9US0lQX1RYTUlDSyk7CisgICAgICAgICAgICB9CisKKwkJCS8vIERlY2lkZSBpdHMgQ2hpcGVyQWxnCisJCQlpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9US0lQOworCQkJZWxzZSBpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisJCQllbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVW5rbm93IENpcGhlciAoPSVkKSwgc2V0IENpcGhlciB0byBBRVNcbiIsIHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIpKTsKKwkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOworICAgICAgICAgICAgfQorCisJCQkvLyBTZXQga2V5IG1hdGVyaWFsIGFuZCBjaXBoZXJBbGcgdG8gQXNpYworCQkJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwKKwkJCQkJCQkJICBCU1MwLAorCQkJCQkJCQkgIDAsCisJCQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnLAorCQkJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwKKwkJCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5UeE1pYywKKwkJCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYyk7CisKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUgZm9yIHRoaXMgZ3JvdXAga2V5IHRhYmxlCisJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwgQlNTMCwgMCwgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnLCBOVUxMKTsKKworCQl9CisKKwl9CisJZWxzZSAvLyBCU1NfSU5GUkEKKwl7CisJCS8vIENoZWNrIHRoZSBuZXcgU1NJRCB3aXRoIGxhc3QgU1NJRAorCQl3aGlsZSAoQ2FuY2VsbGVkID09IFRSVUUpCisJCXsKKwkJCWlmIChwQWQtPkNvbW1vbkNmZy5MYXN0U3NpZExlbiA9PSBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuKQorCQkJeworCQkJCWlmIChSVE1QQ29tcGFyZU1lbW9yeShwQWQtPkNvbW1vbkNmZy5MYXN0U3NpZCwgcEFkLT5Db21tb25DZmcuU3NpZCwgcEFkLT5Db21tb25DZmcuTGFzdFNzaWRMZW4pID09IDApCisJCQkJeworCQkJCQkvLyBMaW5rIHRvIHRoZSBvbGQgb25lIG5vIGxpbmtkb3duIGlzIHJlcXVpcmVkLgorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQkvLyBTZW5kIGxpbmsgZG93biBldmVudCBiZWZvcmUgc2V0IHRvIGxpbmsgdXAKKwkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisJCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOworICAgICAgICAgICAgcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QgRXZlbnQgQUEhXG4iKSk7CisJCQlicmVhazsKKwkJfQorCisJCS8vCisJCS8vIE9uIFdQQSBtb2RlLCBSZW1vdmUgQWxsIEtleXMgaWYgbm90IGNvbm5lY3QgdG8gdGhlIGxhc3QgQlNTSUQKKwkJLy8gS2V5IHdpbGwgYmUgc2V0IGFmdGVyIDQtd2F5IGhhbmRzaGFrZS4KKwkJLy8KKwkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpKQorCQl7CisJCQlVTE9ORyAJCUlWOworCisJCQkvLyBSZW1vdmUgYWxsIFdQQSBrZXlzCisJCQlSVE1QV1BBUmVtb3ZlQWxsS2V5cyhwQWQpOworCQkJcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQ7CisJCQlwQWQtPlN0YUNmZy5Qcml2YWN5RmlsdGVyID0gTmRpczgwMl8xMVByaXZGaWx0ZXI4MDIxeFdFUDsKKworCQkJLy8gRml4ZWQgY29ubmVjdGlvbiBmYWlsZWQgd2l0aCBSYW5nZSBNYXhpbWl6ZXIgLSA1MTUgQVAgKE1hcnZlbGwgQ2hpcCkgd2hlbiBzZWN1cml0eSBpcyBXUEFQU0svVEtJUAorCQkJLy8gSWYgSVYgcmVsYXRlZCB2YWx1ZXMgYXJlIHRvbyBsYXJnZSBpbiBHcm91cE1zZzIsIEFQIHdvdWxkIGlnbm9yZSB0aGlzIG1lc3NhZ2UuCisJCQlJViA9IDA7CisJCQlJViB8PSAocEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkIDw8IDMwKTsKKwkJCUFzaWNVcGRhdGVXQ0lESVZFSVYocEFkLCBCU1NJRF9XQ0lELCBJViwgMCk7CisJCX0KKwkJLy8gTk9URToKKwkJLy8gdGhlIGRlY2lzaW9uIG9mIHVzaW5nICJzaG9ydCBzbG90IHRpbWUiIG9yIG5vdCBtYXkgY2hhbmdlIGR5bmFtaWNhbGx5IGR1ZSB0bworCQkvLyBuZXcgU1RBIGFzc29jaWF0aW9uIHRvIHRoZSBBUC4gc28gd2UgaGF2ZSB0byBkZWNpZGUgdGhhdCB1cG9uIHBhcnNpbmcgQkVBQ09OLCBub3QgaGVyZQorCisJCS8vIE5PVEU6CisJCS8vIHRoZSBkZWNpc2lvbiB0byB1c2UgIlJUQy9DVFMiIG9yICJDVFMtdG8tc2VsZiIgcHJvdGVjdGlvbiBvciBub3QgbWF5IGNoYW5nZSBkeW5hbWljYWxseQorCQkvLyBkdWUgdG8gbmV3IFNUQSBhc3NvY2lhdGlvbiB0byB0aGUgQVAuIHNvIHdlIGhhdmUgdG8gZGVjaWRlIHRoYXQgdXBvbiBwYXJzaW5nIEJFQUNPTiwgbm90IGhlcmUKKworCQlDb21wb3NlUHNQb2xsKHBBZCk7CisJCUNvbXBvc2VOdWxsRnJhbWUocEFkKTsKKworCQkJQXNpY0VuYWJsZUJzc1N5bmMocEFkKTsKKworCQkvLyBBZGQgQlNTSUQgdG8gV0NJRCBzZWFyY2ggdGFibGUKKwkJQXNpY1VwZGF0ZVJ4V0NJRFRhYmxlKHBBZCwgQlNTSURfV0NJRCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisJCS8vIGFkZCB0aGlzIEJTU0lEIGVudHJ5IGludG8gSEFTSCB0YWJsZQorCQl7CisJCQlVQ0hBUiBIYXNoSWR4OworCisJCQkvL3BFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdOworCQkJSGFzaElkeCA9IE1BQ19BRERSX0hBU0hfSU5ERVgocEFkLT5Db21tb25DZmcuQnNzaWQpOworCQkJaWYgKHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF0gPT0gTlVMTCkKKwkJCXsKKwkJCQlwQWQtPk1hY1RhYi5IYXNoW0hhc2hJZHhdID0gcEVudHJ5OworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXBDdXJyRW50cnkgPSBwQWQtPk1hY1RhYi5IYXNoW0hhc2hJZHhdOworCQkJCXdoaWxlIChwQ3VyckVudHJ5LT5wTmV4dCAhPSBOVUxMKQorCQkJCQlwQ3VyckVudHJ5ID0gcEN1cnJFbnRyeS0+cE5leHQ7CisJCQkJcEN1cnJFbnRyeS0+cE5leHQgPSBwRW50cnk7CisJCQl9CisJCX0KKwkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCisJCS8vIElmIFdFUCBpcyBlbmFibGVkLCBhZGQgcGFpZXdpc2UgYW5kIHNoYXJlZCBrZXkKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgIGlmICgoKHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCkmJgorICAgICAgICAgICAgIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMVdFUEVuYWJsZWQpJiYKKyAgICAgICAgICAgICAocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQpKSB8fAorICAgICAgICAgICAgKChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gV1BBX1NVUFBMSUNBTlRfRElTQUJMRSkmJgorICAgICAgICAgICAgICAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBFbmFibGVkKSkpCisjZWxzZQorCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBFbmFibGVkKQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJeworCQkJUFVDSEFSCUtleTsKKwkJCVVDSEFSIAlDaXBoZXJBbGc7CisKKwkJCWZvciAoaWR4PTA7IGlkeCA8IFNIQVJFX0tFWV9OVU07IGlkeCsrKQorICAgICAgICAJeworCQkJCUNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uQ2lwaGVyQWxnOworICAgIAkJCUtleSA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uS2V5OworCisJCQkJaWYgKHBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uS2V5TGVuID4gMCkKKwkJCQl7CisJCQkJCS8vIFNldCBrZXkgbWF0ZXJpYWwgYW5kIGNpcGhlckFsZyB0byBBc2ljCisgICAgCQkJCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWQsIEJTUzAsIGlkeCwgQ2lwaGVyQWxnLCBLZXksIE5VTEwsIE5VTEwpOworCisJCQkJCWlmIChpZHggPT0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkKQorCQkJCQl7CisJCQkJCQkvLyBBc3NpZ24gZ3JvdXAga2V5IGluZm8KKwkJCQkJCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLCBCU1MwLCBpZHgsIENpcGhlckFsZywgTlVMTCk7CisKKwkJCQkJCS8vIEFzc2lnbiBwYWlyd2lzZSBrZXkgaW5mbworCQkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsIEJTUzAsIGlkeCwgQ2lwaGVyQWxnLCBwRW50cnkpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJLy8gb25seSBJTkZSQVNUUlVDVFVSRSBtb2RlIG5lZWQgdG8gaW5kaWNhdGUgY29ubmVjdGl2aXR5IGltbWVkaWF0ZWx5OyBBREhPQyBtb2RlCisJCS8vIHNob3VsZCB3YWl0IHVudGlsIGF0IGxlYXN0IDIgYWN0aXZlIG5vZGVzIGluIHRoaXMgQlNTSUQuCisJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworCisgICAgICAgIC8vIEZvciBHVUkgKysKKwkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlIDwgTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorCQl7CisJCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOworCQkJcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfVVA7CisJCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOworCQl9CisgICAgICAgIC8vIC0tCisKKwkJLy8gQWRkIEJTU0lEIGluIG15IE1BQyBUYWJsZS4KKyAgICAgICAgTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKwkJUlRNUE1vdmVNZW1vcnkocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BZGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BaWQgPSBCU1NJRF9XQ0lEOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLnBBZCA9IHBBZDsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5WYWxpZEFzQ0xJID0gVFJVRTsJLy9BbHRob3VnaCB0aGlzIGlzIGJzc2lkLi5zdGlsbCBzZXQgVmFsaWRBc0NsCisJCXBBZC0+TWFjVGFiLlNpemUgPSAxOwkvLyBpbmZyYSBtb2RlIGFsd2F5cyBzZXQgTUFDdGFiIHNpemUgPTEuCisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uU3N0ID0gU1NUX0FTU09DOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkF1dGhTdGF0ZSA9IFNTVF9BU1NPQzsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5BdXRoTW9kZSA9IHBBZC0+U3RhQ2ZnLkF1dGhNb2RlOworCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLldlcFN0YXR1cyA9IHBBZC0+U3RhQ2ZnLldlcFN0YXR1czsKKyAgICAgICAgTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgTElOSyBVUCAhISEgIENsaWVudFN0YXR1c0ZsYWdzPSVseClcbiIsCisJCQlwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkNsaWVudFN0YXR1c0ZsYWdzKSk7CisKKwkJTWxtZVVwZGF0ZVR4UmF0ZXMocEFkLCBUUlVFLCBCU1MwKTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJTWxtZVVwZGF0ZUh0VHhSYXRlcyhwQWQsIEJTUzApOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgTElOSyBVUCAhISAoU3RhQWN0aXZlLmJIdEVuYWJsZSA9JWQsIClcbiIsIHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uYkh0RW5hYmxlKSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJLy8KKwkJLy8gUmVwb3J0IEFkamFjZW50IEFQIHJlcG9ydC4KKwkJLy8KKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJQ0NYQWRqYWNlbnRBUFJlcG9ydChwQWQpOworI2VuZGlmIC8vIExFQVBfU1VQUE9SVCAvLworCisJCWlmIChwQWQtPkNvbW1vbkNmZy5iQWdncmVnYXRpb25DYXBhYmxlKQorCQl7CisJCQlpZiAoKHBBZC0+Q29tbW9uQ2ZnLmJQaWdneUJhY2tDYXBhYmxlKSAmJiAocEFkLT5NbG1lQXV4LkFQUmFsaW5rSWUgJiAweDAwMDAwMDAzKSA9PSAzKQorCQkJeworCisJCQkJT1BTVEFUVVNfU0VUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1BJR0dZQkFDS19JTlVTRUQpOworCQkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpOworICAgICAgICAgICAgICAgIFJUTVBTZXRQaWdneUJhY2socEFkLCBUUlVFKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUdXJuIG9uIFBpZ2d5LUJhY2tcbiIpKTsKKwkJCX0KKwkJCWVsc2UgaWYgKHBBZC0+TWxtZUF1eC5BUFJhbGlua0llICYgMHgwMDAwMDAwMSkKKwkJCXsKKwkJCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQUdHUkVHQVRJT05fSU5VU0VEKTsKKwkJCX0KKwkJfQorCisJCWlmIChwQWQtPk1sbWVBdXguQVBSYWxpbmtJZSAhPSAweDApCisJCXsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCWlmIChDTElFTlRfU1RBVFVTX1RFU1RfRkxBRygmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXSwgZkNMSUVOVF9TVEFUVVNfUkRHX0NBUEFCTEUpKQorCQkJeworCQkJCUFzaWNFbmFibGVSREcocEFkKTsKKwkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQpOworCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRygmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXSwgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQpOworCQl9CisJCWVsc2UKKwkJeworCQkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZDTElFTlRfU1RBVFVTX1JBTElOS19DSElQU0VUKTsKKwkJCUNMSUVOVF9TVEFUVVNfQ0xFQVJfRkxBRygmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXSwgZkNMSUVOVF9TVEFUVVNfUkFMSU5LX0NISVBTRVQpOworCQl9CisJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTkRJU19TVEFUVVNfTUVESUFfQ09OTkVDVCBFdmVudCBCIS5CQUNhcGFiaWxpdHkgPSAleC4gQ2xpZW50U3RhdHVzRmxhZ3MgPSAlbHhcbiIsIHBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS53b3JkLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkNsaWVudFN0YXR1c0ZsYWdzKSk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBTZXQgTEVECisJUlRNUFNldExFRChwQWQsIExFRF9MSU5LX1VQKTsKKworCXBBZC0+TWxtZS5QZXJpb2RpY1JvdW5kID0gMDsKKwlwQWQtPk1sbWUuT25lU2VjUGVyaW9kaWNSb3VuZCA9IDA7CisJcEFkLT5iQ29uZmlnQ2hhbmdlZCA9IEZBTFNFOyAgICAgICAgLy8gUmVzZXQgY29uZmlnIGZsYWcKKwlwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19VUDsgICAvLyBVcGRhdGUgZXh0cmEgaW5mb3JtYXRpb24gdG8gbGluayBpcyB1cAorCisJLy8gU2V0IGFzaWMgYXV0byBmYWxsIGJhY2sKKwl7CisJCVBVQ0hBUgkJCQkJcFRhYmxlOworCQlVQ0hBUgkJCQkJVGFibGVTaXplID0gMDsKKworCQlNbG1lU2VsZWN0VHhSYXRlVGFibGUocEFkLCAmcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXSwgJnBUYWJsZSwgJlRhYmxlU2l6ZSwgJnBBZC0+Q29tbW9uQ2ZnLlR4UmF0ZUluZGV4KTsKKwkJQXNpY1VwZGF0ZUF1dG9GYWxsQmFja1RhYmxlKHBBZCwgcFRhYmxlKTsKKwl9CisKKwlOZGlzQWNxdWlyZVNwaW5Mb2NrKCZwQWQtPk1hY1RhYkxvY2spOworICAgIHBFbnRyeS0+SFRQaHlNb2RlLndvcmQgPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUud29yZDsKKyAgICBwRW50cnktPk1heEhUUGh5TW9kZS53b3JkID0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLndvcmQ7CisJaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID09IEZBTFNFKQorCXsKKwkJcEVudHJ5LT5iQXV0b1R4UmF0ZVN3aXRjaCA9IEZBTFNFOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlpZiAocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID09IDMyKQorCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IEdJXzgwMDsKKworCQlpZiAoKHBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA+IE1DU183KSB8fCAocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID09IDMyKSkKKwkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLlNUQkMgPSBTVEJDX05PTkU7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCS8vIElmIHRoZSBsZWdhY3kgbW9kZSBpcyBzZXQsIG92ZXJ3cml0ZSB0aGUgdHJhbnNtaXQgc2V0dGluZyBvZiB0aGlzIGVudHJ5LgorCQlpZiAocEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA8PSBNT0RFX09GRE0pCisJCQlSVE1QVXBkYXRlTGVnYWN5VHhTZXR0aW5nKChVQ0hBUilwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlLCBwRW50cnkpOworCX0KKwllbHNlCisJCXBFbnRyeS0+YkF1dG9UeFJhdGVTd2l0Y2ggPSBUUlVFOworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisKKwkvLyAgTGV0IExpbmsgU3RhdHVzIFBhZ2UgZGlzcGxheSBmaXJzdCBpbml0aWFsIHJhdGUuCisJcEFkLT5MYXN0VHhSYXRlID0gKFVTSE9SVCkocEVudHJ5LT5IVFBoeU1vZGUud29yZCk7CisJLy8gU2VsZWN0IERBQyBhY2NvcmRpbmcgdG8gSFQgb3IgTGVnYWN5CisJaWYgKHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0WzBdICE9IDB4MDApCisJeworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsICZWYWx1ZSk7CisJCVZhbHVlICY9ICh+MHgxOCk7CisJCWlmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpCisJCXsKKwkJICAgIFZhbHVlIHw9IDB4MTA7CisJCX0KKwkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgVmFsdWUpOworCX0KKwllbHNlCisJeworCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsICZWYWx1ZSk7CisJCVZhbHVlICY9ICh+MHgxOCk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsIFZhbHVlKTsKKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iSHRFbmFibGUgPT0gRkFMU0UpCisJeworCX0KKwllbHNlIGlmIChwRW50cnktPk1heFJBbXBkdUZhY3RvciA9PSAwKQorCXsKKwkgICAgLy8gSWYgSFQgQVAgZG9lc24ndCBzdXBwb3J0IE1heFJBbXBkdUZhY3RvciA9IDEsIHdlIG5lZWQgdG8gc2V0IG1heCBQU0RVIHRvIDAuCisJICAgIC8vIEJlY2F1c2Ugb3VyIEluaXQgdmFsdWUgaXMgMSBhdCBNQUNSZWdUYWJsZS4KKwkJUlRNUF9JT19XUklURTMyKHBBZCwgTUFYX0xFTl9DRkcsIDB4MGZmZik7CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJLy8gUGF0Y2ggZm9yIE1hcnZlbCBBUCB0byBnYWluIGhpZ2ggdGhyb3VnaHB1dAorCS8vIE5lZWQgdG8gc2V0IGFzIGZvbGxvd2luZywKKwkvLyAxLiBTZXQgdHhvcCBpbiByZWdpc3Rlci1FRENBX0FDMF9DRkcgYXMgMHg2MAorCS8vIDIuIFNldCBFblRYV3JpdGVCYWNrRERPTkUgaW4gcmVnaXN0ZXItV1BETUFfR0xPX0NGRyBhcyB6ZXJvCisJLy8gMy4gUEJGX01BWF9QQ05UIGFzIDB4MUYzRkJGOUYKKwkvLyA0LiBraWNrIHBlciB0d28gcGFja2V0cyB3aGVuIGRlcXVldWUKKwkvLworCS8vIFR4b3AgY2FuIG9ubHkgYmUgbW9kaWZpZWQgd2hlbiBSREcgaXMgb2ZmLCBXTU0gaXMgZGlzYWJsZSBhbmQgVHhCdXJzdCBpcyBlbmFibGUKKwkvLworCS8vIGlmIDEuIExlZ2FjeSBBUCBXTU0gb24sICBvciAyLiAxMW4gQVAsIEFNUERVIGRpc2FibGUuICBGb3JjZSB0dXJuIG9mZiBidXJzdCBubyBtYXR0ZXIgd2hhdCBiRW5hYmxlVHhCdXJzdCBpcy4KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKy8vCWlmICgoIUlTX1JUMzB4eChwQWQpKSAmJgorCWlmICghKChwQWQtPkNvbW1vbkNmZy5SeFN0cmVhbSA9PSAxKSYmKHBBZC0+Q29tbW9uQ2ZnLlR4U3RyZWFtID09IDEpKSAmJgorCQkoKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9PSBGQUxTRSkgJiYgT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XTU1fSU5VU0VEKSkKKwkJfHwgKChwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9PSBUUlVFKSAmJiAocEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlBvbGljeSA9PSBCQV9OT1RVU0UpKSkpCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVEQ0FfQUMwX0NGRywgJkRhdGEpOworCQlEYXRhICAmPSAweEZGRkZGRjAwOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIERhdGEpOworCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9NQVhfUENOVCwgMHgxRjNGN0Y5Rik7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlR4YnVyc3QgMVxuIikpOworCX0KKwllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0KQorCXsKKwkJUlRNUF9JT19SRUFEMzIocEFkLCBFRENBX0FDMF9DRkcsICZEYXRhKTsKKwkJRGF0YSAgJj0gMHhGRkZGRkYwMDsKKwkJRGF0YSAgfD0gMHg2MDsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzBfQ0ZHLCBEYXRhKTsKKwkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTm93QXRoZXJvc0J1cnN0T24gPSBUUlVFOworCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9NQVhfUENOVCwgMHgxRjNGQkY5Rik7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlR4YnVyc3QgMlxuIikpOworCX0KKwllbHNlCisJeworCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVEQ0FfQUMwX0NGRywgJkRhdGEpOworCQlEYXRhICAmPSAweEZGRkZGRjAwOworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCBFRENBX0FDMF9DRkcsIERhdGEpOworCisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFBCRl9NQVhfUENOVCwgMHgxRjNGN0Y5Rik7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlR4YnVyc3QgM1xuIikpOworCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCS8vIFJlLWNoZWNrIHRvIHR1cm4gb24gVFggYnVyc3Qgb3Igbm90LgorCWlmICgocEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTGFzdEF0aGVyb3MgPT0gVFJVRSkgJiYgKChTVEFfV0VQX09OKHBBZCkpfHwoU1RBX1RLSVBfT04ocEFkKSkpKQorCXsKKwkJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTmV4dERpc2FibGVSeEJBID0gVFJVRTsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0KQorCQl7CisJCSAgICBVSU5UMzIgTUFDVmFsdWUgPSAwOworCQkJLy8gRm9yY2UgZGlzYWJsZSAgVFhPUCB2YWx1ZSBpbiB0aGlzIGNhc2UuIFRoZSBzYW1lIGFjdGlvbiBpbiBNTE1FVXBkYXRlUHJvdGVjdCB0b28uCisJCQkvLyBJIGRpZG4ndCBjaGFuZ2UgUEJGX01BWF9QQ05UIHNldHRpbmcuCisJCQlSVE1QX0lPX1JFQUQzMihwQWQsIEVEQ0FfQUMwX0NGRywgJk1BQ1ZhbHVlKTsKKwkJCU1BQ1ZhbHVlICAmPSAweEZGRkZGRjAwOworCQkJUlRNUF9JT19XUklURTMyKHBBZCwgRURDQV9BQzBfQ0ZHLCBNQUNWYWx1ZSk7CisJCQlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJOb3dBdGhlcm9zQnVyc3RPbiA9IEZBTFNFOworCQl9CisJfQorCWVsc2UKKwl7CisJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYk5leHREaXNhYmxlUnhCQSA9IEZBTFNFOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYkxhc3RBdGhlcm9zID0gRkFMU0U7CisJQ09QWV9NQUNfQUREUihwQWQtPkNvbW1vbkNmZy5MYXN0QnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISFwQWQtPmJOZXh0RGlzYWJsZVJ4QkE9ICVkIFxuIiwgcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iTmV4dERpc2FibGVSeEJBKSk7CisJLy8gQlNTSUQgYWRkIGluIG9uZSBNQUMgZW50cnkgdG9vLiAgQmVjYXVzZSBpbiBUeCwgQVNJQyBuZWVkIHRvIGNoZWNrIENpcGhlciBhbmQgSVYvRUlWLCBCQWJpdG1hcAorCS8vIFB0aGVyIGluZm9ybWF0aW9uIGluIE1BQ1RhYi5Db250ZW50W0JTU0lEX1dDSURdIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGRyaXZlci4KKwkvLyBOb3RlOiBBcyBTVEEsIFRoZSBNQUNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS4gUGFpcndpc2VLZXkgYW5kIFNoYXJlZCBLZXkgZm9yIEJTUzAgYXJlIHRoZSBzYW1lLgorCisgICAgaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA8PSBOZGlzODAyXzExV0VQRGlzYWJsZWQpCisgICAgeworICAgICAgICBwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCQlwQWQtPlN0YUNmZy5Qcml2YWN5RmlsdGVyID0gTmRpczgwMl8xMVByaXZGaWx0ZXJBY2NlcHRBbGw7CisJfQorCisJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKwlwRW50cnktPlBvcnRTZWN1cmVkID0gcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQ7CisJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkLT5NYWNUYWJMb2NrKTsKKworICAgIC8vCisJLy8gUGF0Y2ggQXRoZXJvcyBBUCBUWCB3aWxsIGJyZWFrZG93biBpc3N1ZS4KKwkvLyBBUCBNb2RlbDogRExpbmsgRFdMLTgyMDBBUAorCS8vCisJaWYgKElORlJBX09OKHBBZCkgJiYgT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XTU1fSU5VU0VEKSAmJiBTVEFfVEtJUF9PTihwQWQpKQorCXsKKwkJUlRNUF9JT19XUklURTMyKHBBZCwgUlhfUEFSU0VSX0NGRywgMHgwMSk7CisJfQorCWVsc2UKKwl7CisJCVJUTVBfSU9fV1JJVEUzMihwQWQsIFJYX1BBUlNFUl9DRkcsIDB4MDApOworCX0KKworCVJUTVBfQ0xFQVJfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisjaWZkZWYgRE9UMTFOX0RSQUZUMworCWlmICgocEFkLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLmIyMDQwQ29leGlzdFNjYW5TdXApICYmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsIDw9IDExKSkKKwl7CisJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19TQ0FOXzIwNDApOworCQlCdWlsZEVmZmVjdGVkQ2hhbm5lbExpc3QocEFkKTsKKwl9CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlEaXNjb25uZWN0IGN1cnJlbnQgQlNTSUQKKworCUFyZ3VtZW50czoKKwkJcEFkCQkJCS0gUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCQlJc1JlcUZyb21BUAkJLSBSZXF1ZXN0IGZyb20gQVAKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCQlXZSBuZWVkIG1vcmUgaW5mb3JtYXRpb24gdG8ga25vdyBpdCdzIHRoaXMgcmVxdXN0IGZyb20gQVAuCisJCUlmIHllcyEgd2UgbmVlZCB0byBkbyBleHRyYSBoYW5kbGluZywgZm9yIGV4YW1wbGUsIHJlbW92ZSB0aGUgV1BBIGtleS4KKwkJT3RoZXJ3aXNlIG9uIDQtd2F5IGhhbmRzaGFraW5nIHdpbGwgZmFpZWQsIHNpbmNlIHRoZSBXUEEga2V5IGRpZG4ndCBiZQorCQlyZW1vdmUgd2hpbGUgYXV0byByZWNvbm5lY3QuCisJCURpc2Nvbm5lY3QgcmVxdWVzdCBmcm9tIEFQLCBpdCBtZWFucyB3ZSB3aWxsIHN0YXJ0IGFmcmVzaCA0LXdheSBoYW5kc2hha2luZworCQlvbiBXUEEgbW9kZS4KKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBMaW5rRG93bigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiAgQk9PTEVBTiAgICAgIElzUmVxRnJvbUFQKQoreworCVVDSEFSCQkJICAgIGksIEJ5dGVWYWx1ZSA9IDA7CisKKwkvLyBEbyBub3RoaW5nIGlmIG1vbml0b3IgbW9kZSBpcyBvbgorCWlmIChNT05JVE9SX09OKHBBZCkpCisJCXJldHVybjsKKworI2lmZGVmIFJBTElOS19BVEUKKwkvLyBOb3RoaW5nIHRvIGRvIGluIEFURSBtb2RlLgorCWlmIChBVEVfT04ocEFkKSkKKwkJcmV0dXJuOworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworICAgIGlmIChwQWQtPkNvbW1vbkNmZy5iV2lyZWxlc3NFdmVudCkKKwl7CisJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1NUQV9MSU5LRE9XTl9FVkVOVF9GTEFHLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIEJTUzAsIDApOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMSU5LIERPV04gISEhXG4iKSk7CisJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQUdHUkVHQVRJT05fSU5VU0VEKTsKKworCWlmIChBREhPQ19PTihwQWQpKQkJLy8gQWRob2MgbW9kZSBsaW5rIGRvd24KKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMSU5LIERPV04gMSEhIVxuIikpOworCisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0FESE9DX09OKTsKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKKwkJcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZURpc2Nvbm5lY3RlZDsKKwkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKKyAgICAgICAgcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsKKwkJQnNzVGFibGVEZWxldGVFbnRyeSgmcEFkLT5TY2FuVGFiLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBNYWNUYWIuU2l6ZT0lZCAhISFcbiIsIHBBZC0+TWFjVGFiLlNpemUpKTsKKwl9CisJZWxzZQkJCQkJLy8gSW5mcmEgc3RydWN0dXJlIG1vZGUKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMSU5LIERPV04gMiEhIVxuIikpOworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCS8vIERMUyB0ZWFyIGRvd24gZnJhbWUgbXVzdCBiZSBzZW50IGJlZm9yZSBsaW5rIGRvd24KKwkJLy8gc2VuZCBETFMtVEVBUl9ET1dOIG1lc3NhZ2UKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKQorCQl7CisJCQkvLyB0ZWFyIGRvd24gbG9jYWwgZGxzIHRhYmxlIGVudHJ5CisJCQlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpKyspCisJCQl7CisJCQkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkpCisJCQkJeworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfTk9ORTsKKwkJCQkJUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCQkJfQorCQkJfQorCisJCQkvLyB0ZWFyIGRvd24gcGVlciBkbHMgdGFibGUgZW50cnkKKwkJCWZvciAoaT1NQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJCQl7CisJCQkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gIERMU19GSU5JU0gpKQorCQkJCXsKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX05PTkU7CisJCQkJCVJUTVBTZW5kRExTVGVhckRvd25GcmFtZShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpOworCQkJCX0KKwkJCX0KKwkJfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0lORlJBX09OKTsKKwkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKKworCQkvLyBTYXZlZCBsYXN0IFNTSUQgZm9yIGxpbmt1cCBjb21wYXJpc29uCisJCXBBZC0+Q29tbW9uQ2ZnLkxhc3RTc2lkTGVuID0gcEFkLT5Db21tb25DZmcuU3NpZExlbjsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5Db21tb25DZmcuTGFzdFNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkxhc3RTc2lkTGVuKTsKKwkJQ09QWV9NQUNfQUREUihwQWQtPkNvbW1vbkNmZy5MYXN0QnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJaWYgKHBBZC0+TWxtZUF1eC5DdXJyUmVxSXNGcm9tTmRpcyA9PSBUUlVFKQorCQl7CisJCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOworCQkJUlRNUF9JbmRpY2F0ZU1lZGlhU3RhdGUocEFkKTsKKyAgICAgICAgICAgIHBBZC0+RXh0cmFJbmZvID0gR0VORVJBTF9MSU5LX0RPV047CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUIEV2ZW50IEEhXG4iKSk7CisJCQlwQWQtPk1sbWVBdXguQ3VyclJlcUlzRnJvbU5kaXMgPSBGQUxTRTsKKwkJfQorCQllbHNlCisJCXsKKyAgICAgICAgICAgIC8vCisJCQkvLyBJZiBkaXNhc3NvY2lhdGlvbiByZXF1ZXN0IGlzIGZyb20gTkRJUywgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGRlbGV0ZSBCU1NJRCBmcm9tIGVudHJ5LgorCQkJLy8gT3RoZXJ3aXNlIGxvc3QgYmVhY29uIG9yIHJlY2VpdmUgRGUtQXV0aGVudGljYXRpb24gZnJvbSBBUCwKKwkJCS8vIHRoZW4gd2Ugc2hvdWxkIGRlbGV0ZSBCU1NJRCBmcm9tIEJzc1RhYmxlLgorCQkJLy8gSWYgd2UgZG9uJ3QgZGVsZXRlIGZyb20gZW50cnksIHJvYW1pbmcgd2lsbCBmYWlsLgorCQkJLy8KKwkJCUJzc1RhYmxlRGVsZXRlRW50cnkoJnBBZC0+U2NhblRhYiwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCQl9CisKKwkJLy8gcmVzdG9yZSBiYWNrIHRvIC0KKwkJLy8gICAgICAxLiBsb25nIHNsb3QgKDIwIHVzKSBvciBzaG9ydCBzbG90ICg5IHVzKSB0aW1lCisJCS8vICAgICAgMi4gdHVybiBvbi9vZmYgUlRTL0NUUyBhbmQvb3IgQ1RTLXRvLXNlbGYgcHJvdGVjdGlvbgorCQkvLyAgICAgIDMuIHNob3J0IHByZWFtYmxlCisJCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0JHX1BST1RFQ1RJT05fSU5VU0VEKTsKKworCQlpZiAocEFkLT5TdGFDZmcuQ0NYQWRqYWNlbnRBUFJlcG9ydEZsYWcgPT0gVFJVRSkKKwkJeworCQkJLy8KKwkJCS8vIFJlY29yZCBjdXJyZW50IEFQJ3MgaW5mb3JtYXRpb24uCisJCQkvLyBmb3IgbGF0ZXIgdXNlZCByZXBvcnRpbmcgQWRqYWNlbnQgQVAgcmVwb3J0LgorCQkJLy8KKwkJCXBBZC0+U3RhQ2ZnLkNDWEFkamFjZW50QVBDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKKwkJCXBBZC0+U3RhQ2ZnLkNDWEFkamFjZW50QVBTc2lkTGVuID0gcEFkLT5Db21tb25DZmcuU3NpZExlbjsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLkNDWEFkamFjZW50QVBTc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPlN0YUNmZy5DQ1hBZGphY2VudEFQU3NpZExlbik7CisJCQlDT1BZX01BQ19BRERSKHBBZC0+U3RhQ2ZnLkNDWEFkamFjZW50QVBCc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQl9CisKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJCS8vIENvdW50cnkgSUUgb2YgdGhlIEFQIHdpbGwgYmUgZXZhbHVhdGVkIGFuZCB3aWxsIGJlIHVzZWQuCisJCWlmIChwQWQtPlN0YUNmZy5JRUVFODAyMTFkQ2xpZW50TW9kZSAhPSBSdDgwMl8xMV9EX05vbmUpCisJCXsKKwkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPkNvbW1vbkNmZy5Db3VudHJ5Q29kZVswXSwgJnBBZC0+U3RhQ2ZnLlN0YU9yaUNvdW50cnlDb2RlWzBdLCAyKTsKKwkJCXBBZC0+Q29tbW9uQ2ZnLkdlb2dyYXBoeSA9IHBBZC0+U3RhQ2ZnLlN0YU9yaUdlb2dyYXBoeTsKKwkJCUJ1aWxkQ2hhbm5lbExpc3RFeChwQWQpOworCQl9CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworCisJfQorCisJZm9yIChpPTE7IGk8TUFYX0xFTl9PRl9NQUNfVEFCTEU7IGkrKykKKwl7CisJCWlmIChwQWQtPk1hY1RhYi5Db250ZW50W2ldLlZhbGlkQXNDTEkgPT0gVFJVRSkKKwkJCU1hY1RhYmxlRGVsZXRlRW50cnkocEFkLCBwQWQtPk1hY1RhYi5Db250ZW50W2ldLkFpZCwgcEFkLT5NYWNUYWIuQ29udGVudFtpXS5BZGRyKTsKKwl9CisKKwlwQWQtPlN0YUNmZy5DQ1hRb3NFQ1dNaW4JPSA0OworCXBBZC0+U3RhQ2ZnLkNDWFFvc0VDV01heAk9IDEwOworCisJQXNpY1NldFNsb3RUaW1lKHBBZCwgVFJVRSk7IC8vRkFMU0UpOworCUFzaWNTZXRFZGNhUGFybShwQWQsIE5VTEwpOworCisJLy8gU2V0IExFRAorCVJUTVBTZXRMRUQocEFkLCBMRURfTElOS19ET1dOKTsKKyAgICBwQWQtPkxlZEluZGljYXRvclN0cmVndGggPSAweEYwOworICAgIFJUTVBTZXRTaWduYWxMRUQocEFkLCAtMTAwKTsJLy8gRm9yY2Ugc2lnbmFsIHN0cmVuZ3RoIExlZCB0byBiZSB0dXJuZWQgb2ZmLCBmaXJtd2FyZSBpcyBub3QgZG9uZSBpdC4KKworCQlBc2ljRGlzYWJsZVN5bmMocEFkKTsKKworCXBBZC0+TWxtZS5QZXJpb2RpY1JvdW5kID0gMDsKKwlwQWQtPk1sbWUuT25lU2VjUGVyaW9kaWNSb3VuZCA9IDA7CisKKwlpZiAocEFkLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfSU5GUkEpCisJeworCS8vIFJlbW92ZSBTdGFDZmcgSW5mb3JtYXRpb24gYWZ0ZXIgbGluayBkb3duCisJTmRpc1plcm9NZW1vcnkocEFkLT5Db21tb25DZmcuQnNzaWQsIE1BQ19BRERSX0xFTik7CisJTmRpc1plcm9NZW1vcnkocEFkLT5Db21tb25DZmcuU3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKKwkJcEFkLT5Db21tb25DZmcuU3NpZExlbiA9IDA7CisJfQorI2lmZGVmIERPVDExX05fU1VQUE9SVAorCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LCBzaXplb2YoSFRfQ0FQQUJJTElUWV9JRSkpOworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQWRkSHRJbmZvLCBzaXplb2YoQUREX0hUX0lORk9fSUUpKTsKKwlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuID0gMDsKKwlwQWQtPk1sbWVBdXguTmV3RXh0Q2hhbm5lbE9mZnNldCA9IDB4ZmY7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBSZXNldCBXUEEtUFNLIHN0YXRlLiBPbmx5IHJlc2V0IHdoZW4gc3VwcGxpY2FudCBlbmFibGVkCisJaWYgKHBBZC0+U3RhQ2ZnLldwYVN0YXRlICE9IFNTX05PVFVTRSkKKwl7CisJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfU1RBUlQ7CisJCS8vIENsZWFyIFJlcGxheSBjb3VudGVyCisJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIDgpOworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCWlmIChwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwkJCU5kaXNaZXJvTWVtb3J5KHBBZC0+U3RhQ2ZnLkRsc1JlcGxheUNvdW50ZXIsIDgpOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCX0KKworCisJLy8KKwkvLyBpZiBsaW5rIGRvd24gY29tZSBmcm9tIEFQLCB3ZSBuZWVkIHRvIHJlbW92ZSBhbGwgV1BBIGtleXMgb24gV1BBIG1vZGUuCisJLy8gb3RoZXJ3aXNlIHdpbGwgY2F1c2UgNC13YXkgaGFuZHNoYWtpbmcgZmFpbGVkLCBzaW5jZSB0aGUgV1BBIGtleSBub3QgZW1wdHkuCisJLy8KKwlpZiAoKElzUmVxRnJvbUFQKSAmJiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSkKKwl7CisJCS8vIFJlbW92ZSBhbGwgV1BBIGtleXMKKwkJUlRNUFdQQVJlbW92ZUFsbEtleXMocEFkKTsKKwl9CisKKwkvLyA4MDIuMXggcG9ydCBjb250cm9sCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCS8vIFByZXZlbnQgY2xlYXIgUG9ydFNlY3VyZWQgaGVyZSB3aXRoIHN0YXRpYyBXRVAKKwkvLyBOZXR3b3JrTWFuZ2VyIHNldCBzZWN1cml0eSBwb2xpY3kgZmlyc3QgdGhlbiBzZXQgU1NJRCB0byBjb25uZWN0IEFQLgorCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgJiYKKwkJKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExV0VQRW5hYmxlZCkgJiYKKwkJKHBBZC0+U3RhQ2ZnLklFRUU4MDIxWCA9PSBGQUxTRSkpCisJeworCQlwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCX0KKwllbHNlCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCXsKKwkJcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQ7CisJCXBBZC0+U3RhQ2ZnLlByaXZhY3lGaWx0ZXIgPSBOZGlzODAyXzExUHJpdkZpbHRlcjgwMjF4V0VQOworCX0KKworCU5kaXNBY3F1aXJlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisJcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5Qb3J0U2VjdXJlZCA9IHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkOworCU5kaXNSZWxlYXNlU3BpbkxvY2soJnBBZC0+TWFjVGFiTG9jayk7CisKKwlwQWQtPlN0YUNmZy5NaWNFcnJDbnQgPSAwOworCisJLy8gVHVybiBvZmYgQ2tpcCBjb250cm9sIGZsYWcKKwlwQWQtPlN0YUNmZy5iQ2tpcE9uID0gRkFMU0U7CisJcEFkLT5TdGFDZmcuQ0NYRW5hYmxlID0gRkFMU0U7CisKKyAgICBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlRGlzY29ubmVjdGVkOworCS8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbiB0byBsaW5rIGlzIHVwCisJcEFkLT5FeHRyYUluZm8gPSBHRU5FUkFMX0xJTktfRE9XTjsKKworICAgIC8vcEFkLT5TdGFDZmcuQWRob2NCT25seUpvaW5lZCA9IEZBTFNFOworCS8vcEFkLT5TdGFDZmcuQWRob2NCR0pvaW5lZCA9IEZBTFNFOworCS8vcEFkLT5TdGFDZmcuQWRob2MyME5Kb2luZWQgPSBGQUxTRTsKKyAgICBwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9IEZBTFNFOworCisJLy8gUmVzZXQgdGhlIEN1cnJlbnQgQVAncyBJUCBhZGRyZXNzCisJTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuQWlyb25ldElQQWRkcmVzcywgNCk7CisjaWZkZWYgUlQyODcwCisJcEFkLT5iVXNiVHhCdWxrQWdncmUgPSBGQUxTRTsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKworCS8vIENsZWFuIGFzc29jaWF0aW9uIGluZm9ybWF0aW9uCisJTmRpc1plcm9NZW1vcnkoJnBBZC0+U3RhQ2ZnLkFzc29jSW5mbywgc2l6ZW9mKE5ESVNfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OKSk7CisJcEFkLT5TdGFDZmcuQXNzb2NJbmZvLkxlbmd0aCA9IHNpemVvZihORElTXzgwMl8xMV9BU1NPQ0lBVElPTl9JTkZPUk1BVElPTik7CisJcEFkLT5TdGFDZmcuUmVxVmFySUVMZW4gPSAwOworCXBBZC0+U3RhQ2ZnLlJlc1ZhcklFTGVuID0gMDsKKworCS8vCisJLy8gUmVzZXQgUlNTSSB2YWx1ZSBhZnRlciBsaW5rIGRvd24KKwkvLworCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTAgPSAwOworCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTBYOCA9IDA7CisJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMSA9IDA7CisJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5BdmdSc3NpMVg4ID0gMDsKKwlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kyID0gMDsKKwlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkF2Z1Jzc2kyWDggPSAwOworCisJLy8gUmVzdG9yZSBNbG1lUmF0ZQorCXBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlID0gcEFkLT5Db21tb25DZmcuQmFzaWNNbG1lUmF0ZTsKKwlwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gcEFkLT5Db21tb25DZmcuQmFzaWNNbG1lUmF0ZTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCS8vCisJLy8gQWZ0ZXIgTGluayBkb3duLCByZXNldCBwaWdneS1iYWNrIHNldHRpbmcgaW4gQVNJQy4gRGlzYWJsZSBSREcuCisJLy8KKwlpZiAocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKQorCXsKKwkJcEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfMjA7CisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgJkJ5dGVWYWx1ZSk7CisJCUJ5dGVWYWx1ZSAmPSAofjB4MTgpOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCeXRlVmFsdWUpOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkvLyBSZXNldCBEQUMKKwlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjEsICZCeXRlVmFsdWUpOworCUJ5dGVWYWx1ZSAmPSAofjB4MTgpOworCWlmIChwQWQtPkFudGVubmEuZmllbGQuVHhQYXRoID09IDIpCisJeworCQlCeXRlVmFsdWUgfD0gMHgxMDsKKwl9CisJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SMSwgQnl0ZVZhbHVlKTsKKworCVJUTVBTZXRQaWdneUJhY2socEFkLEZBTFNFKTsKKwlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZCwgZk9QX1NUQVRVU19QSUdHWUJBQ0tfSU5VU0VEKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCXBBZC0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS53b3JkID0gcEFkLT5Db21tb25DZmcuUkVHQkFDYXBhYmlsaXR5LndvcmQ7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBSZXN0b3JlIGFsbCBzZXR0aW5ncyBpbiB0aGUgZm9sbG93aW5nLgorCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgMCwgKEFMTE5fU0VUUFJPVEVDVHxDQ0tTRVRQUk9URUNUfE9GRE1TRVRQUk9URUNUKSwgVFJVRSwgRkFMU0UpOworCUFzaWNEaXNhYmxlUkRHKHBBZCk7CisJcEFkLT5Db21tb25DZmcuSU9UZXN0UGFybS5iQ3VycmVudEF0aGVyb3MgPSBGQUxTRTsKKwlwQWQtPkNvbW1vbkNmZy5JT1Rlc3RQYXJtLmJOb3dBdGhlcm9zQnVyc3RPbiA9IEZBTFNFOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisjaWZkZWYgRE9UMTFOX0RSQUZUMworCU9QU1RBVFVTX0NMRUFSX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1NDQU5fMjA0MCk7CisJcEFkLT5Db21tb25DZmcuQlNTQ29leGlzdDIwNDAud29yZCA9IDA7CisJVHJpRXZlbnRJbml0KHBBZCk7CisJZm9yIChpID0gMDsgaSA8IChwQWQtPkNoYW5uZWxMaXN0TnVtIC0gMSk7IGkrKykKKwl7CisJCXBBZC0+Q2hhbm5lbExpc3RbaV0uYkVmZmVjdGVkQ2hhbm5lbCA9IEZBTFNFOworCX0KKyNlbmRpZiAvLyBET1QxMU5fRFJBRlQzIC8vCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlSVE1QX0lPX1dSSVRFMzIocEFkLCBNQVhfTEVOX0NGRywgMHgxZmZmKTsKKwlSVE1QX0NMRUFSX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKTsKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyNpZm5kZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQKSB7CisJCXVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKwkJLy9zZW5kIGRpc2Fzc29jaWF0ZSBldmVudCB0byB3cGFfc3VwcGxpY2FudAorCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJCXdycXUuZGF0YS5mbGFncyA9IFJUX0RJU0FTU09DX0VWRU5UX0ZMQUc7CisJCXdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgTlVMTCk7CisJfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisjaWZkZWYgTkFUSVZFX1dQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwl7CisJCXVuaW9uIGl3cmVxX2RhdGEgICAgd3JxdTsKKwkJbWVtc2V0KHdycXUuYXBfYWRkci5zYV9kYXRhLCAwLCBNQUNfQUREUl9MRU4pOworCQl3aXJlbGVzc19zZW5kX2V2ZW50KHBBZC0+bmV0X2RldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CisJfQorI2VuZGlmIC8vIE5BVElWRV9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNpZmRlZiBSVDMweHgKKwlpZiAoSVNfUlQzMDkwKHBBZCkpCisJeworCQlVSU5UMzIJCQkJbWFjZGF0YTsKKwkJLy8gZGlzYWJsZSBNTVBTIEJCUCBjb250cm9sIHJlZ2lzdGVyCisJCVJUTVBfQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWQsIEJCUF9SMywgJkJ5dGVWYWx1ZSk7CisJCUJ5dGVWYWx1ZSAmPSB+KDB4MDQpOwkvL2JpdCAyCisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjMsIEJ5dGVWYWx1ZSk7CisKKwkJLy8gZGlzYWJsZSBNTVBTIE1BQyBjb250cm9sIHJlZ2lzdGVyCisJCVJUTVBfSU9fUkVBRDMyKHBBZCwgMHgxMjEwLCAmbWFjZGF0YSk7CisJCW1hY2RhdGEgJj0gfigweDA5KTsJLy9iaXQgMCwgMworCQlSVE1QX0lPX1dSSVRFMzIocEFkLCAweDEyMTAsIG1hY2RhdGEpOworCX0KKyNlbmRpZiAvLyBSVDMweHggLy8KKworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBJdGVyYXRlT25Cc3NUYWIoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJTUxNRV9TVEFSVF9SRVFfU1RSVUNUICAgU3RhcnRSZXE7CisJTUxNRV9KT0lOX1JFUV9TVFJVQ1QgICAgSm9pblJlcTsKKwlVTE9ORyAgICAgICAgICAgICAgICAgICBCc3NJZHg7CisKKwkvLyBDaGFuZ2UgdGhlIHdlcHN0YXR1cyB0byBvcmlnaW5hbCB3ZXBzdGF0dXMKKwlwQWQtPlN0YUNmZy5XZXBTdGF0dXMgICA9IHBBZC0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXM7CisJcEFkLT5TdGFDZmcuUGFpckNpcGhlciAgPSBwQWQtPlN0YUNmZy5PcmlnV2VwU3RhdHVzOworCXBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gcEFkLT5TdGFDZmcuT3JpZ1dlcFN0YXR1czsKKworCUJzc0lkeCA9IHBBZC0+TWxtZUF1eC5Cc3NJZHg7CisJaWYgKEJzc0lkeCA8IHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc05yKQorCXsKKwkJLy8gQ2hlY2sgY2lwaGVyIHN1aXRlLCBBUCBtdXN0IGhhdmUgbW9yZSBzZWN1cmVkIGNpcGhlciB0aGFuIHN0YXRpb24gc2V0dGluZworCQkvLyBTZXQgdGhlIFBhaXJ3aXNlIGFuZCBHcm91cCBjaXBoZXIgdG8gbWF0Y2ggdGhlIGludGVuZGVkIEFQIHNldHRpbmcKKwkJLy8gV2UgY2FuIG9ubHkgY29ubmVjdCB0byBBUCB3aXRoIGxlc3Mgc2VjdXJlZCBjaXBoZXIgc2V0dGluZworCQlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykpCisJCXsKKwkJCXBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEuR3JvdXBDaXBoZXI7CisKKwkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEuUGFpckNpcGhlcikKKwkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0gcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEuUGFpckNpcGhlcjsKKwkJCWVsc2UgaWYgKHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBLlBhaXJDaXBoZXJBdXggIT0gTmRpczgwMl8xMVdFUERpc2FibGVkKQorCQkJCXBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQS5QYWlyQ2lwaGVyQXV4OworCQkJZWxzZQkvLyBUaGVyZSBpcyBubyBQYWlyQ2lwaGVyIEF1eCwgZG93bmdyYWRlIG91ciBjYXBhYmlsaXR5IHRvIFRLSVAKKwkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKKwkJfQorCQllbHNlIGlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKQorCQl7CisJCQlwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9IHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5Hcm91cENpcGhlcjsKKworCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuUGFpckNpcGhlcikKKwkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0gcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbQnNzSWR4XS5XUEEyLlBhaXJDaXBoZXI7CisJCQllbHNlIGlmIChwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuUGFpckNpcGhlckF1eCAhPSBOZGlzODAyXzExV0VQRGlzYWJsZWQpCisJCQkJcEFkLT5TdGFDZmcuUGFpckNpcGhlciA9IHBBZC0+TWxtZUF1eC5Tc2lkQnNzVGFiLkJzc0VudHJ5W0Jzc0lkeF0uV1BBMi5QYWlyQ2lwaGVyQXV4OworCQkJZWxzZQkvLyBUaGVyZSBpcyBubyBQYWlyQ2lwaGVyIEF1eCwgZG93bmdyYWRlIG91ciBjYXBhYmlsaXR5IHRvIFRLSVAKKwkJCQlwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKKworCQkJLy8gUlNOIGNhcGFiaWxpdHkKKwkJCXBBZC0+U3RhQ2ZnLlJzbkNhcGFiaWxpdHkgPSBwQWQtPk1sbWVBdXguU3NpZEJzc1RhYi5Cc3NFbnRyeVtCc3NJZHhdLldQQTIuUnNuQ2FwYWJpbGl0eTsKKwkJfQorCisJCS8vIFNldCBNaXggY2lwaGVyIGZsYWcKKwkJcEFkLT5TdGFDZmcuYk1peENpcGhlciA9IChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyKSA/IEZBTFNFIDogVFJVRTsKKwkJaWYgKHBBZC0+U3RhQ2ZnLmJNaXhDaXBoZXIgPT0gVFJVRSkKKwkJeworCQkJLy8gSWYgbWl4IGNpcGhlciwgcmUtYnVpbGQgUlNOSUUKKwkJCVJUTVBNYWtlUlNOSUUocEFkLCBwQWQtPlN0YUNmZy5BdXRoTW9kZSwgcEFkLT5TdGFDZmcuV2VwU3RhdHVzLCAwKTsKKwkJfQorCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBpdGVyYXRlIEJTUyAlbGQgb2YgJWRcbiIsIEJzc0lkeCwgcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzTnIpKTsKKwkJSm9pblBhcm1GaWxsKHBBZCwgJkpvaW5SZXEsIEJzc0lkeCk7CisJCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9KT0lOX1JFUSwgc2l6ZW9mKE1MTUVfSk9JTl9SRVFfU1RSVUNUKSwKKwkJCQkJJkpvaW5SZXEpOworCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX0pPSU47CisJfQorCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0FESE9DKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ05UTCAtIEFsbCBCU1MgZmFpbDsgc3RhcnQgYSBuZXcgQURIT0MgKFNzaWQ9JXMpLi4uXG4iLHBBZC0+TWxtZUF1eC5Tc2lkKSk7CisJCVN0YXJ0UGFybUZpbGwocEFkLCAmU3RhcnRSZXEsIHBBZC0+TWxtZUF1eC5Tc2lkLCBwQWQtPk1sbWVBdXguU3NpZExlbik7CisJCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9TVEFSVF9SRVEsIHNpemVvZihNTE1FX1NUQVJUX1JFUV9TVFJVQ1QpLCAmU3RhcnRSZXEpOworCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX1NUQVJUOworCX0KKwllbHNlIC8vIG5vIG1vcmUgQlNTCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDTlRMIC0gQWxsIHJvYW1pbmcgZmFpbGVkLCBzdGF5IEAgY2ggIyVkXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKSk7CisJCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCwgRkFMU0UpOworCQlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKTsKKwkJcEFkLT5NbG1lLkNudGxNYWNoaW5lLkN1cnJTdGF0ZSA9IENOVExfSURMRTsKKwl9Cit9CisKKy8vIGZvciByZS1hc3NvY2lhdGlvbiBvbmx5CisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgSXRlcmF0ZU9uQnNzVGFiMigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlNTE1FX1JFQVNTT0NfUkVRX1NUUlVDVCBSZWFzc29jUmVxOworCVVMT05HICAgICAgICAgICAgICAgICAgIEJzc0lkeDsKKwlCU1NfRU5UUlkgICAgICAgICAgICAgICAqcEJzczsKKworCUJzc0lkeCA9IHBBZC0+TWxtZUF1eC5Sb2FtSWR4OworCXBCc3MgPSAmcEFkLT5NbG1lQXV4LlJvYW1UYWIuQnNzRW50cnlbQnNzSWR4XTsKKworCWlmIChCc3NJZHggPCBwQWQtPk1sbWVBdXguUm9hbVRhYi5Cc3NOcikKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBpdGVyYXRlIEJTUyAlbGQgb2YgJWRcbiIsIEJzc0lkeCwgcEFkLT5NbG1lQXV4LlJvYW1UYWIuQnNzTnIpKTsKKworCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBCc3MtPkNoYW5uZWwsIEZBTFNFKTsKKwkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEJzcy0+Q2hhbm5lbCk7CisKKwkJLy8gcmVhc3NvY2lhdGUgbWVzc2FnZSBoYXMgdGhlIHNhbWUgc3RydWN0dXJlIGFzIGFzc29jaWF0ZSBtZXNzYWdlCisJCUFzc29jUGFybUZpbGwocEFkLCAmUmVhc3NvY1JlcSwgcEJzcy0+QnNzaWQsIHBCc3MtPkNhcGFiaWxpdHlJbmZvLAorCQkJCQkgIEFTU09DX1RJTUVPVVQsIHBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCk7CisJCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfUkVBU1NPQ19SRVEsCisJCQkJCXNpemVvZihNTE1FX1JFQVNTT0NfUkVRX1NUUlVDVCksICZSZWFzc29jUmVxKTsKKworCQlwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID0gQ05UTF9XQUlUX1JFQVNTT0M7CisJfQorCWVsc2UgLy8gbm8gbW9yZSBCU1MKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkNOVEwgLSBBbGwgZmFzdCByb2FtaW5nIGZhaWxlZCwgYmFjayB0byBjaCAjJWRcbiIscEFkLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIEZBTFNFKTsKKwkJQXNpY0xvY2tDaGFubmVsKHBBZCwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX0lETEU7CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworVk9JRCBKb2luUGFybUZpbGwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gT1VUIE1MTUVfSk9JTl9SRVFfU1RSVUNUICpKb2luUmVxLAorCUlOIFVMT05HIEJzc0lkeCkKK3sKKwlKb2luUmVxLT5Cc3NJZHggPSBCc3NJZHg7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFNjYW5QYXJtRmlsbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBPVVQgTUxNRV9TQ0FOX1JFUV9TVFJVQ1QgKlNjYW5SZXEsCisJSU4gQ0hBUiBTc2lkW10sCisJSU4gVUNIQVIgU3NpZExlbiwKKwlJTiBVQ0hBUiBCc3NUeXBlLAorCUlOIFVDSEFSIFNjYW5UeXBlKQoreworICAgIE5kaXNaZXJvTWVtb3J5KFNjYW5SZXEtPlNzaWQsIE1BWF9MRU5fT0ZfU1NJRCk7CisJU2NhblJlcS0+U3NpZExlbiA9IFNzaWRMZW47CisJTmRpc01vdmVNZW1vcnkoU2NhblJlcS0+U3NpZCwgU3NpZCwgU3NpZExlbik7CisJU2NhblJlcS0+QnNzVHlwZSA9IEJzc1R5cGU7CisJU2NhblJlcS0+U2NhblR5cGUgPSBTY2FuVHlwZTsKK30KKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgRGxzUGFybUZpbGwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gT1VUIE1MTUVfRExTX1JFUV9TVFJVQ1QgKnBEbHNSZXEsCisJSU4gUFJUXzgwMl8xMV9ETFMgcERscywKKwlJTiBVU0hPUlQgcmVhc29uKQoreworCXBEbHNSZXEtPnBETFMgPSBwRGxzOworCXBEbHNSZXEtPlJlYXNvbiA9IHJlYXNvbjsKK30KKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgU3RhcnRQYXJtRmlsbCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBPVVQgTUxNRV9TVEFSVF9SRVFfU1RSVUNUICpTdGFydFJlcSwKKwlJTiBDSEFSIFNzaWRbXSwKKwlJTiBVQ0hBUiBTc2lkTGVuKQoreworCUFTU0VSVChTc2lkTGVuIDw9IE1BWF9MRU5fT0ZfU1NJRCk7CisJTmRpc01vdmVNZW1vcnkoU3RhcnRSZXEtPlNzaWQsIFNzaWQsIFNzaWRMZW4pOworCVN0YXJ0UmVxLT5Tc2lkTGVuID0gU3NpZExlbjsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQXV0aFBhcm1GaWxsKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE9VVCBNTE1FX0FVVEhfUkVRX1NUUlVDVCAqQXV0aFJlcSwKKwlJTiBQVUNIQVIgcEFkZHIsCisJSU4gVVNIT1JUIEFsZykKK3sKKwlDT1BZX01BQ19BRERSKEF1dGhSZXEtPkFkZHIsIHBBZGRyKTsKKwlBdXRoUmVxLT5BbGcgPSBBbGc7CisJQXV0aFJlcS0+VGltZW91dCA9IEFVVEhfVElNRU9VVDsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKworI2lmZGVmIFJUMjg3MAorCitWT0lEIE1sbWVDbnRsQ29uZmlybSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBVTE9ORyBNc2dUeXBlLAorCUlOIFVTSE9SVCBNc2cpCit7CisJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTXNnVHlwZSwgc2l6ZW9mKFVTSE9SVCksICZNc2cpOworfQorCitWT0lEIENvbXBvc2VQc1BvbGwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisJUFRYSU5GT19TVFJVQwkJcFR4SW5mbzsKKwlQVFhXSV9TVFJVQwkJcFR4V0k7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDb21wb3NlUHNQb2xsXG4iKSk7CisJTmRpc1plcm9NZW1vcnkoJnBBZC0+UHNQb2xsRnJhbWUsIHNpemVvZihQU1BPTExfRlJBTUUpKTsKKworCXBBZC0+UHNQb2xsRnJhbWUuRkMuUHdyTWdtdCA9IDA7CisJcEFkLT5Qc1BvbGxGcmFtZS5GQy5UeXBlID0gQlRZUEVfQ05UTDsKKwlwQWQtPlBzUG9sbEZyYW1lLkZDLlN1YlR5cGUgPSBTVUJUWVBFX1BTX1BPTEw7CisJcEFkLT5Qc1BvbGxGcmFtZS5BaWQgPSBwQWQtPlN0YUFjdGl2ZS5BaWQgfCAweEMwMDA7CisJQ09QWV9NQUNfQUREUihwQWQtPlBzUG9sbEZyYW1lLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJQ09QWV9NQUNfQUREUihwQWQtPlBzUG9sbEZyYW1lLlRhLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKworCVJUTVBaZXJvTWVtb3J5KCZwQWQtPlBzUG9sbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0WzBdLCAxMDApOworCXBUeEluZm8gPSAoUFRYSU5GT19TVFJVQykmcEFkLT5Qc1BvbGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFswXTsKKwlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAoVVNIT1JUKShzaXplb2YoUFNQT0xMX0ZSQU1FKStUWFdJX1NJWkUpLCBUUlVFLCBFcFRvUXVldWVbTUdNVFBJUEVJRFhdLCBGQUxTRSwgIEZBTFNFKTsKKwlwVHhXSSA9IChQVFhXSV9TVFJVQykmcEFkLT5Qc1BvbGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtUWElORk9fU0laRV07CisJUlRNUFdyaXRlVHhXSShwQWQsIHBUeFdJLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgVFJVRSwgRkFMU0UsIDAsIEJTU0lEX1dDSUQsIChzaXplb2YoUFNQT0xMX0ZSQU1FKSksCisJCTAsICAwLCAoVUNIQVIpcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUywgSUZTX0JBQ0tPRkYsIEZBTFNFLCAmcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0KTsKKwlSVE1QTW92ZU1lbW9yeSgmcEFkLT5Qc1BvbGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtUWFdJX1NJWkUrVFhJTkZPX1NJWkVdLCAmcEFkLT5Qc1BvbGxGcmFtZSwgc2l6ZW9mKFBTUE9MTF9GUkFNRSkpOworCS8vIEFwcGVuZCA0IGV4dHJhIHplcm8gYnl0ZXMuCisJcEFkLT5Qc1BvbGxDb250ZXh0LkJ1bGtPdXRTaXplID0gIFRYSU5GT19TSVpFICsgVFhXSV9TSVpFICsgc2l6ZW9mKFBTUE9MTF9GUkFNRSkgKyA0OworfQorCisvLyBJUlFMID0gRElTUEFUQ0hfTEVWRUwKK1ZPSUQgQ29tcG9zZU51bGxGcmFtZSgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlQVFhJTkZPX1NUUlVDCQlwVHhJbmZvOworCVBUWFdJX1NUUlVDCQlwVHhXSTsKKworCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk51bGxGcmFtZSwgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKwlwQWQtPk51bGxGcmFtZS5GQy5UeXBlID0gQlRZUEVfREFUQTsKKwlwQWQtPk51bGxGcmFtZS5GQy5TdWJUeXBlID0gU1VCVFlQRV9OVUxMX0ZVTkM7CisJcEFkLT5OdWxsRnJhbWUuRkMuVG9EcyA9IDE7CisJQ09QWV9NQUNfQUREUihwQWQtPk51bGxGcmFtZS5BZGRyMSwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCUNPUFlfTUFDX0FERFIocEFkLT5OdWxsRnJhbWUuQWRkcjIsIHBBZC0+Q3VycmVudEFkZHJlc3MpOworCUNPUFlfTUFDX0FERFIocEFkLT5OdWxsRnJhbWUuQWRkcjMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwlSVE1QWmVyb01lbW9yeSgmcEFkLT5OdWxsQ29udGV4dC5UcmFuc2ZlckJ1ZmZlci0+ZmllbGQuV2lyZWxlc3NQYWNrZXRbMF0sIDEwMCk7CisJcFR4SW5mbyA9IChQVFhJTkZPX1NUUlVDKSZwQWQtPk51bGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFswXTsKKwlSVE1QV3JpdGVUeEluZm8ocEFkLCBwVHhJbmZvLCAoVVNIT1JUKShzaXplb2YoSEVBREVSXzgwMl8xMSkrVFhXSV9TSVpFKSwgVFJVRSwgRXBUb1F1ZXVlW01HTVRQSVBFSURYXSwgRkFMU0UsICBGQUxTRSk7CisJcFR4V0kgPSAoUFRYV0lfU1RSVUMpJnBBZC0+TnVsbENvbnRleHQuVHJhbnNmZXJCdWZmZXItPmZpZWxkLldpcmVsZXNzUGFja2V0W1RYSU5GT19TSVpFXTsKKwlSVE1QV3JpdGVUeFdJKHBBZCwgcFR4V0ksIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBUUlVFLCBGQUxTRSwgMCwgQlNTSURfV0NJRCwgKHNpemVvZihIRUFERVJfODAyXzExKSksCisJCTAsIDAsIChVQ0hBUilwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTUNTLCBJRlNfQkFDS09GRiwgRkFMU0UsICZwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQpOworCVJUTVBNb3ZlTWVtb3J5KCZwQWQtPk51bGxDb250ZXh0LlRyYW5zZmVyQnVmZmVyLT5maWVsZC5XaXJlbGVzc1BhY2tldFtUWFdJX1NJWkUrVFhJTkZPX1NJWkVdLCAmcEFkLT5OdWxsRnJhbWUsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJcEFkLT5OdWxsQ29udGV4dC5CdWxrT3V0U2l6ZSA9ICBUWElORk9fU0laRSArIFRYV0lfU0laRSArIHNpemVvZihwQWQtPk51bGxGcmFtZSkgKyA0OworfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUHJlLWJ1aWxkIGEgQkVBQ09OIGZyYW1lIGluIHRoZSBzaGFyZWQgbWVtb3J5CisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitVTE9ORyBNYWtlSWJzc0JlYWNvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlVQ0hBUiAgICAgICAgIERzTGVuID0gMSwgSWJzc0xlbiA9IDI7CisJVUNIQVIgICAgICAgICBMb2NhbEVycEllWzNdID0ge0lFX0VSUCwgMSwgMHgwNH07CisJSEVBREVSXzgwMl8xMSBCY25IZHI7CisJVVNIT1JUICAgICAgICBDYXBhYmlsaXR5SW5mbzsKKwlMQVJHRV9JTlRFR0VSIEZha2VUaW1lc3RhbXA7CisJVUxPTkcgICAgICAgICBGcmFtZUxlbiA9IDA7CisJUFRYV0lfU1RSVUMJICBwVHhXSSA9ICZwQWQtPkJlYWNvblR4V0k7CisJQ0hBUiAgICAgICAgICpwQmVhY29uRnJhbWUgPSBwQWQtPkJlYWNvbkJ1ZjsKKwlCT09MRUFOICAgICAgIFByaXZhY3k7CisJVUNIQVIgICAgICAgICBTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXTsKKwlVQ0hBUiAgICAgICAgIFN1cFJhdGVMZW4gPSAwOworCVVDSEFSICAgICAgICAgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIgICAgICAgICBFeHRSYXRlTGVuID0gMDsKKwlVQ0hBUiAgICAgICAgIFJTTkllID0gSUVfV1BBOworCisJaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID09IFBIWV8xMUIpICYmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsIDw9IDE0KSkKKwl7CisJCVN1cFJhdGVbMF0gPSAweDgyOyAvLyAxIG1icHMKKwkJU3VwUmF0ZVsxXSA9IDB4ODQ7IC8vIDIgbWJwcworCQlTdXBSYXRlWzJdID0gMHg4YjsgLy8gNS41IG1icHMKKwkJU3VwUmF0ZVszXSA9IDB4OTY7IC8vIDExIG1icHMKKwkJU3VwUmF0ZUxlbiA9IDQ7CisJCUV4dFJhdGVMZW4gPSAwOworCX0KKwllbHNlIGlmIChwQWQtPkNvbW1vbkNmZy5DaGFubmVsID4gMTQpCisJeworCQlTdXBSYXRlWzBdICA9IDB4OEM7ICAgIC8vIDYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUKKwkJU3VwUmF0ZVsxXSAgPSAweDEyOyAgICAvLyA5IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCVN1cFJhdGVbMl0gID0gMHg5ODsgICAgLy8gMTIgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMsIGJhc2ljIHJhdGUKKwkJU3VwUmF0ZVszXSAgPSAweDI0OyAgICAvLyAxOCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQlTdXBSYXRlWzRdICA9IDB4YjA7ICAgIC8vIDI0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLCBiYXNpYyByYXRlCisJCVN1cFJhdGVbNV0gID0gMHg0ODsgICAgLy8gMzYgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJU3VwUmF0ZVs2XSAgPSAweDYwOyAgICAvLyA0OCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQlTdXBSYXRlWzddICA9IDB4NmM7ICAgIC8vIDU0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCVN1cFJhdGVMZW4gID0gODsKKwkJRXh0UmF0ZUxlbiAgPSAwOworCisJCS8vCisJCS8vIEFsc28gVXBkYXRlIE1sbWVSYXRlICYgUnRzUmF0ZSBmb3IgRyBvbmx5ICYgQSBvbmx5CisJCS8vCisJCXBBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlID0gUkFURV82OworCQlwQWQtPkNvbW1vbkNmZy5SdHNSYXRlID0gUkFURV82OworCQlwQWQtPkNvbW1vbkNmZy5NbG1lVHJhbnNtaXQuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJcEFkLT5Db21tb25DZmcuTWxtZVRyYW5zbWl0LmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BBZC0+Q29tbW9uQ2ZnLk1sbWVSYXRlXTsKKwkJcEFkLT5NYWNUYWIuQ29udGVudFtCU1MwTWNhc3RfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCXBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTME1jYXN0X1dDSURdLkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twQWQtPkNvbW1vbkNmZy5NbG1lUmF0ZV07CisJfQorCWVsc2UKKwl7CisJCVN1cFJhdGVbMF0gPSAweDgyOyAvLyAxIG1icHMKKwkJU3VwUmF0ZVsxXSA9IDB4ODQ7IC8vIDIgbWJwcworCQlTdXBSYXRlWzJdID0gMHg4YjsgLy8gNS41IG1icHMKKwkJU3VwUmF0ZVszXSA9IDB4OTY7IC8vIDExIG1icHMKKwkJU3VwUmF0ZUxlbiA9IDQ7CisKKwkJRXh0UmF0ZVswXSAgPSAweDBDOyAgICAvLyA2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLAorCQlFeHRSYXRlWzFdICA9IDB4MTI7ICAgIC8vIDkgbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJRXh0UmF0ZVsyXSAgPSAweDE4OyAgICAvLyAxMiBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcywKKwkJRXh0UmF0ZVszXSAgPSAweDI0OyAgICAvLyAxOCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQlFeHRSYXRlWzRdICA9IDB4MzA7ICAgIC8vIDI0IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzLAorCQlFeHRSYXRlWzVdICA9IDB4NDg7ICAgIC8vIDM2IG1icHMsIGluIHVuaXRzIG9mIDAuNSBNYnBzCisJCUV4dFJhdGVbNl0gID0gMHg2MDsgICAgLy8gNDggbWJwcywgaW4gdW5pdHMgb2YgMC41IE1icHMKKwkJRXh0UmF0ZVs3XSAgPSAweDZjOyAgICAvLyA1NCBtYnBzLCBpbiB1bml0cyBvZiAwLjUgTWJwcworCQlFeHRSYXRlTGVuICA9IDg7CisJfQorCisJcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiA9IFN1cFJhdGVMZW47CisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFBY3RpdmUuU3VwUmF0ZSwgU3VwUmF0ZSwgU3VwUmF0ZUxlbik7CisJcEFkLT5TdGFBY3RpdmUuRXh0UmF0ZUxlbiA9IEV4dFJhdGVMZW47CisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFBY3RpdmUuRXh0UmF0ZSwgRXh0UmF0ZSwgRXh0UmF0ZUxlbik7CisKKwkvLyBjb21wb3NlIElCU1MgYmVhY29uIGZyYW1lCisJTWd0TWFjSGVhZGVySW5pdChwQWQsICZCY25IZHIsIFNVQlRZUEVfQkVBQ09OLCAwLCBCUk9BRENBU1RfQUREUiwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCVByaXZhY3kgPSAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpIHx8CisJCQkgIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgfHwKKwkJCSAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKTsKKwlDYXBhYmlsaXR5SW5mbyA9IENBUF9HRU5FUkFURSgwLCAxLCBQcml2YWN5LCAocEFkLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9PSBSdDgwMl8xMVByZWFtYmxlU2hvcnQpLCAwLCAwKTsKKworCU1ha2VPdXRnb2luZ0ZyYW1lKHBCZWFjb25GcmFtZSwgICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkgIHNpemVvZihIRUFERVJfODAyXzExKSwgICAgICAgICAgICZCY25IZHIsCisJCQkJCSAgVElNRVNUQU1QX0xFTiwgICAgICAgICAgICAgICAgICAgJkZha2VUaW1lc3RhbXAsCisJCQkJCSAgMiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZCwKKwkJCQkJICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ2FwYWJpbGl0eUluZm8sCisJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNzaWRJZSwKKwkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5Db21tb25DZmcuU3NpZExlbiwKKwkJCQkJICBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLCAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5Tc2lkLAorCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdXBSYXRlSWUsCisJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN1cFJhdGVMZW4sCisJCQkJCSAgU3VwUmF0ZUxlbiwgICAgICAgICAgICAgICAgICAgICAgU3VwUmF0ZSwKKwkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRHNJZSwKKwkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRHNMZW4sCisJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsCisJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJklic3NJZSwKKwkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSWJzc0xlbiwKKwkJCQkJICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5TdGFBY3RpdmUuQXRpbVdpbiwKKwkJCQkJICBFTkRfT0ZfQVJHUyk7CisKKwkvLyBhZGQgRVJQX0lFIGFuZCBFWFRfUkFFIElFIG9mIGluIDgwMi4xMWcKKwlpZiAoRXh0UmF0ZUxlbikKKwl7CisJCVVMT05HCXRtcDsKKworCQlNYWtlT3V0Z29pbmdGcmFtZShwQmVhY29uRnJhbWUgKyBGcmFtZUxlbiwgICAgICAgICAmdG1wLAorCQkJCQkJICAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbEVycEllLAorCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRXh0UmF0ZUllLAorCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRXh0UmF0ZUxlbiwKKwkJCQkJCSAgRXh0UmF0ZUxlbiwgICAgICAgICAgICAgICAgICAgICAgRXh0UmF0ZSwKKwkJCQkJCSAgRU5EX09GX0FSR1MpOworCQlGcmFtZUxlbiArPSB0bXA7CisJfQorCisJLy8gSWYgYWRob2Mgc2VjcnVpdHkgaXMgc2V0IGZvciBXUEEtTm9uZSwgYXBwZW5kIHRoZSBjaXBoZXIgc3VpdGUgSUUKKwlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKwl7CisJCVVMT05HIHRtcDsKKyAgICAgICAgUlRNUE1ha2VSU05JRShwQWQsIHBBZC0+U3RhQ2ZnLkF1dGhNb2RlLCBwQWQtPlN0YUNmZy5XZXBTdGF0dXMsIEJTUzApOworCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBCZWFjb25GcmFtZSArIEZyYW1lTGVuLCAgICAgICAgCSZ0bXAsCisJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSZSU05JZSwKKwkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSZwQWQtPlN0YUNmZy5SU05JRV9MZW4sCisJCQkJCQkgIHBBZC0+U3RhQ2ZnLlJTTklFX0xlbiwgICAgICAJCXBBZC0+U3RhQ2ZnLlJTTl9JRSwKKwkJCQkJCSAgRU5EX09GX0FSR1MpOworCQlGcmFtZUxlbiArPSB0bXA7CisJfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCXsKKwkJVUxPTkcgVG1wTGVuOworCQlVQ0hBUiBIdExlbiwgSHRMZW4xOworCisjaWZkZWYgUlRfQklHX0VORElBTgorCQlIVF9DQVBBQklMSVRZX0lFIEh0Q2FwYWJpbGl0eVRtcDsKKwkJQUREX0hUX0lORk9fSUUJYWRkSFRJbmZvVG1wOworCQlVU0hPUlQJYjJsVG1wLCBiMmxUbXAyOworI2VuZGlmCisKKwkJLy8gYWRkIEhUIENhcGFiaWxpdHkgSUUKKwkJSHRMZW4gPSBzaXplb2YocEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5KTsKKwkJSHRMZW4xID0gc2l6ZW9mKHBBZC0+Q29tbW9uQ2ZnLkFkZEhUSW5mbyk7CisjaWZuZGVmIFJUX0JJR19FTkRJQU4KKwkJTWFrZU91dGdvaW5nRnJhbWUocEJlYWNvbkZyYW1lK0ZyYW1lTGVuLAkmVG1wTGVuLAorCQkJCQkJICAxLAkJCQkJCSZIdENhcEllLAorCQkJCQkJICAxLAkJCQkJCSZIdExlbiwKKwkJCQkJCSAgSHRMZW4sCQkJCQkmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LAorCQkJCQkJICAxLAkJCQkJCSZBZGRIdEluZm9JZSwKKwkJCQkJCSAgMSwJCQkJCQkmSHRMZW4xLAorCQkJCQkJICBIdExlbjEsCQkJCQkmcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLAorCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisjZWxzZQorCQlOZGlzTW92ZU1lbW9yeSgmSHRDYXBhYmlsaXR5VG1wLCAmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LCBIdExlbik7CisJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkh0Q2FwSW5mbykpOworCQkqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkV4dEh0Q2FwSW5mbykgPSBTV0FQMTYoKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5FeHRIdENhcEluZm8pKTsKKworCQlOZGlzTW92ZU1lbW9yeSgmYWRkSFRJbmZvVG1wLCAmcEFkLT5Db21tb25DZmcuQWRkSFRJbmZvLCBIdExlbjEpOworCQkqKFVTSE9SVCAqKSgmYWRkSFRJbmZvVG1wLkFkZEh0SW5mbzIpID0gU1dBUDE2KCooVVNIT1JUICopKCZhZGRIVEluZm9UbXAuQWRkSHRJbmZvMikpOworCQkqKFVTSE9SVCAqKSgmYWRkSFRJbmZvVG1wLkFkZEh0SW5mbzMpID0gU1dBUDE2KCooVVNIT1JUICopKCZhZGRIVEluZm9UbXAuQWRkSHRJbmZvMykpOworCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBCZWFjb25GcmFtZStGcmFtZUxlbiwJJlRtcExlbiwKKwkJCQkJCSAgMSwJCQkJCQkmSHRDYXBJZSwKKwkJCQkJCSAgMSwJCQkJCQkmSHRMZW4sCisJCQkJCQkgIEh0TGVuLAkJCQkJJkh0Q2FwYWJpbGl0eVRtcCwKKwkJCQkJCSAgMSwJCQkJCQkmQWRkSHRJbmZvSWUsCisJCQkJCQkgIDEsCQkJCQkJJkh0TGVuMSwKKwkJCQkJCSAgSHRMZW4xLAkJCQkJJmFkZEhUSW5mb1RtcCwKKwkJCQkJCSAgRU5EX09GX0FSR1MpOworI2VuZGlmCisJCUZyYW1lTGVuICs9IFRtcExlbjsKKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvL2JlYWNvbiB1c2UgcmVzZXJ2ZWQgV0NJRCAweGZmCisgICAgaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkKKyAgICB7CisJUlRNUFdyaXRlVHhXSShwQWQsIHBUeFdJLCBGQUxTRSwgRkFMU0UsICBUUlVFLCBGQUxTRSwgRkFMU0UsIFRSVUUsIDAsIDB4ZmYsIEZyYW1lTGVuLAorCQlQSURfTUdNVCwgUElEX0JFQUNPTiwgUkFURV8xLCBJRlNfSFRUWE9QLCBGQUxTRSwgJnBBZC0+Q29tbW9uQ2ZnLk1sbWVUcmFuc21pdCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIFNldCB0byB1c2UgMU1icHMgZm9yIEFkaG9jIGJlYWNvbi4KKwkJSFRUUkFOU01JVF9TRVRUSU5HIFRyYW5zbWl0OworICAgICAgICBUcmFuc21pdC53b3JkID0gMDsKKyAgICAgICAgUlRNUFdyaXRlVHhXSShwQWQsIHBUeFdJLCBGQUxTRSwgRkFMU0UsICBUUlVFLCBGQUxTRSwgRkFMU0UsIFRSVUUsIDAsIDB4ZmYsIEZyYW1lTGVuLAorICAgIAkJUElEX01HTVQsIFBJRF9CRUFDT04sIFJBVEVfMSwgSUZTX0hUVFhPUCwgRkFMU0UsICZUcmFuc21pdCk7CisgICAgfQorCisjaWZkZWYgUlRfQklHX0VORElBTgorCVJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIHBCZWFjb25GcmFtZSwgRElSX1dSSVRFLCBGQUxTRSk7CisJUlRNUFdJRW5kaWFuQ2hhbmdlKChQVUNIQVIpcFR4V0ksIFRZUEVfVFhXSSk7CisjZW5kaWYKKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1ha2VJYnNzQmVhY29uIChsZW49JWxkKSwgU3VwUmF0ZUxlbj0lZCwgRXh0UmF0ZUxlbj0lZCwgQ2hhbm5lbD0lZCwgUGh5TW9kZT0lZFxuIiwKKwkJCQkJRnJhbWVMZW4sIFN1cFJhdGVMZW4sIEV4dFJhdGVMZW4sIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsIHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUpKTsKKwlyZXR1cm4gRnJhbWVMZW47Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvZGxzLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9kbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmNkNDEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvZGxzLmMKQEAgLTAsMCArMSwyMTcwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICAgIE1vZHVsZSBOYW1lOgorICAgIGRscy5jCisKKyAgICBBYnN0cmFjdDoKKyAgICBIYW5kbGUgV01NLURMUyBzdGF0ZSBtYWNoaW5lCisKKyAgICBSZXZpc2lvbiBIaXN0b3J5OgorICAgIFdobyAgICAgICAgIFdoZW4gICAgICAgICAgV2hhdAorICAgIC0tLS0tLS0tICAgIC0tLS0tLS0tLS0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFJvcnkgQ2hlbiAgIDAyLTE0LTIwMDYKKwlBcnZpbiBUYWkJMDYtMDMtMjAwOAkgIE1vZGlmaWVkIGZvciBSVDI4eHgKKyAqLworCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgZGxzIHN0YXRlIG1hY2hpbmUgaW5pdCwgaW5jbHVkaW5nIHN0YXRlIHRyYW5zaXRpb24gYW5kIHRpbWVyIGluaXQKKyAgICBQYXJhbWV0ZXJzOgorICAgICAgICBTbSAtIHBvaW50ZXIgdG8gdGhlIGRscyBzdGF0ZSBtYWNoaW5lCisgICAgTm90ZToKKyAgICAgICAgVGhlIHN0YXRlIG1hY2hpbmUgbG9va3MgbGlrZSB0aGlzCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBETFNfSURMRQorICAgIE1UMl9NTE1FX0RMU19SRVFVRVNUICAgTWxtZURsc1JlcUFjdGlvbgorICAgIE1UMl9QRUVSX0RMU19SRVFVRVNUICAgUGVlckRsc1JlcUFjdGlvbgorICAgIE1UMl9QRUVSX0RMU19SRVNQT05TRSAgUGVlckRsc1JzcEFjdGlvbgorICAgIE1UMl9NTE1FX0RMU19URUFSRE9XTiAgTWxtZVRlYXJEb3duQWN0aW9uCisgICAgTVQyX1BFRVJfRExTX1RFQVJET1dOICBQZWVyVGVhckRvd25BY3Rpb24KKworCUlSUUwgPSBQQVNTSVZFX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCit2b2lkIERsc1N0YXRlTWFjaGluZUluaXQoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gU1RBVEVfTUFDSElORSAqU20sCisgICAgT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKQoreworCVVDSEFSCWk7CisKKyAgICBTdGF0ZU1hY2hpbmVJbml0KFNtLCAoU1RBVEVfTUFDSElORV9GVU5DKilUcmFucywgTUFYX0RMU19TVEFURSwgTUFYX0RMU19NU0csIChTVEFURV9NQUNISU5FX0ZVTkMpRHJvcCwgRExTX0lETEUsIERMU19NQUNISU5FX0JBU0UpOworCisgICAgLy8gdGhlIGZpcnN0IGNvbHVtbgorICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgRExTX0lETEUsIE1UMl9NTE1FX0RMU19SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZURsc1JlcUFjdGlvbik7CisgICAgU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBETFNfSURMRSwgTVQyX1BFRVJfRExTX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyRGxzUmVxQWN0aW9uKTsKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIERMU19JRExFLCBNVDJfUEVFUl9ETFNfUlNQLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJEbHNSc3BBY3Rpb24pOworICAgIFN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgRExTX0lETEUsIE1UMl9NTE1FX0RMU19URUFSX0RPV04sIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZURsc1RlYXJEb3duQWN0aW9uKTsKKyAgICBTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIERMU19JRExFLCBNVDJfUEVFUl9ETFNfVEVBUl9ET1dOLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJEbHNUZWFyRG93bkFjdGlvbik7CisKKwlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCXsKKwkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0ucEFkID0gcEFkOworCQlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVyLCBHRVRfVElNRVJfRlVOQ1RJT04oRGxzVGltZW91dEFjdGlvbiksIHBBZCwgRkFMU0UpOworCX0KK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVEbHNSZXFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBVQ0hBUgkJCXBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTCQlOU3RhdHVzOworCVVMT05HCQkJRnJhbWVMZW4gPSAwOworCUhFQURFUl84MDJfMTEJRGxzUmVxSGRyOworCVBSVF84MDJfMTFfRExTCXBETFMgPSBOVUxMOworCVVDSEFSCQkJQ2F0ZWdvcnkgPSBDQVRFR09SWV9ETFM7CisJVUNIQVIJCQlBY3Rpb24gPSBBQ1RJT05fRExTX1JFUVVFU1Q7CisJVUxPTkcJCQl0bXA7CisJVVNIT1JUCQkJcmVhc29uOworCVVMT05HCQkJVGltZW91dDsKKwlCT09MRUFOCQkJVGltZXJDYW5jZWxsZWQ7CisKKwlpZighTWxtZURsc1JlcVNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCAmcERMUywgJnJlYXNvbikpCisJCXJldHVybjsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gTWxtZURsc1JlcUFjdGlvbigpIFxuIikpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJETFMgLSBNbG1lRGxzUmVxQWN0aW9uKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCUFjdEhlYWRlckluaXQocEFkLCAmRGxzUmVxSGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJLy8gQnVpbGQgYmFzaWMgZnJhbWUgZmlyc3QKKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLAkJCQkmRnJhbWVMZW4sCisJCQkJCXNpemVvZihIRUFERVJfODAyXzExKSwJCSZEbHNSZXFIZHIsCisJCQkJCTEsCQkJCQkJCSZDYXRlZ29yeSwKKwkJCQkJMSwJCQkJCQkJJkFjdGlvbiwKKwkJCQkJNiwJCQkJCQkJJnBETFMtPk1hY0FkZHIsCisJCQkJCTYsCQkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MsCisJCQkJCTIsCQkJCQkJCSZwQWQtPlN0YUFjdGl2ZS5DYXBhYmlsaXR5SW5mbywKKwkJCQkJMiwJCQkJCQkJJnBETFMtPlRpbWVPdXQsCisJCQkJCTEsCQkJCQkJCSZTdXBSYXRlSWUsCisJCQkJCTEsCQkJCQkJCSZwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwKKwkJCQkJcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4sCXBBZC0+TWxtZUF1eC5TdXBSYXRlLAorCQkJCQlFTkRfT0ZfQVJHUyk7CisKKwlpZiAocEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gIT0gMCkKKwl7CisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwJJnRtcCwKKwkJCQkJCSAgMSwJCQkJCQkmRXh0UmF0ZUllLAorCQkJCQkJICAxLAkJCQkJCSZwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiwKKwkJCQkJCSAgcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4sCXBBZC0+TWxtZUF1eC5FeHRSYXRlLAorCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisJCUZyYW1lTGVuICs9IHRtcDsKKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPj0gUEhZXzExQUJHTl9NSVhFRCkpCisJeworCQlVQ0hBUiBIdExlbjsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJSFRfQ0FQQUJJTElUWV9JRSBIdENhcGFiaWxpdHlUbXA7CisjZW5kaWYKKworCQkvLyBhZGQgSFQgQ2FwYWJpbGl0eSBJRQorCQlIdExlbiA9IHNpemVvZihIVF9DQVBBQklMSVRZX0lFKTsKKyNpZm5kZWYgUlRfQklHX0VORElBTgorCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sCSZ0bXAsCisJCQkJCQkJMSwJCQkJCQkmSHRDYXBJZSwKKwkJCQkJCQkxLAkJCQkJCSZIdExlbiwKKwkJCQkJCQlIdExlbiwJCQkJCSZwQWQtPkNvbW1vbkNmZy5IdENhcGFiaWxpdHksCisJCQkJCQkJRU5EX09GX0FSR1MpOworI2Vsc2UKKwkJTmRpc01vdmVNZW1vcnkoJkh0Q2FwYWJpbGl0eVRtcCwgJnBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eSwgSHRMZW4pOworCQkJCQkJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuSHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkh0Q2FwSW5mbykpOworCQkJCQkJCSooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuRXh0SHRDYXBJbmZvKSA9IFNXQVAxNigqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkV4dEh0Q2FwSW5mbykpOworCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwJJnRtcCwKKwkJCQkJCQkxLAkJCQkJCSZIdENhcEllLAorCQkJCQkJCTEsCQkJCQkJJkh0TGVuLAorCQkJCQkJCUh0TGVuLAkJCQkJJkh0Q2FwYWJpbGl0eVRtcCwKKwkJCQkJCQlFTkRfT0ZfQVJHUyk7CisjZW5kaWYKKwkJRnJhbWVMZW4gPSBGcmFtZUxlbiArIHRtcDsKKwl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwlSVE1QQ2FuY2VsVGltZXIoJnBETFMtPlRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCVRpbWVvdXQgPSBETFNfVElNRU9VVDsKKwlSVE1QU2V0VGltZXIoJnBETFMtPlRpbWVyLCBUaW1lb3V0KTsKKworCU1pbmlwb3J0TU1SZXF1ZXN0KHBBZCwgUUlEX0FDX0JFLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJEbHNSZXFBY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBVQ0hBUgkJCXBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTCQlOU3RhdHVzOworCVVMT05HCQkJRnJhbWVMZW4gPSAwOworCVVTSE9SVAkJCVN0YXR1c0NvZGUgPSBNTE1FX1NVQ0NFU1M7CisJSEVBREVSXzgwMl8xMQlEbHNSc3BIZHI7CisJVUNIQVIJCQlDYXRlZ29yeSA9IENBVEVHT1JZX0RMUzsKKwlVQ0hBUgkJCUFjdGlvbiA9IEFDVElPTl9ETFNfUkVTUE9OU0U7CisJVUxPTkcJCQl0bXA7CisJVVNIT1JUCQkJQ2FwYWJpbGl0eUluZm87CisJVUNIQVIJCQlEQVtNQUNfQUREUl9MRU5dLCBTQVtNQUNfQUREUl9MRU5dOworCVVTSE9SVAkJCURMU1RpbWVPdXQ7CisJU0hPUlQJCQlpOworCVVMT05HCQkJVGltZW91dDsKKwlCT09MRUFOCQkJVGltZXJDYW5jZWxsZWQ7CisJUFJUXzgwMl8xMV9ETFMJcERMUyA9IE5VTEw7CisJVUNIQVIJCQlNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzID0gMDsKKyAgICBVQ0hBUgkJCVN1cHBvcnRlZFJhdGVzTGVuOworICAgIFVDSEFSCQkJU3VwcG9ydGVkUmF0ZXNbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSCQkJSHRDYXBhYmlsaXR5TGVuOworCUhUX0NBUEFCSUxJVFlfSUUJSHRDYXBhYmlsaXR5OworCisJaWYgKCFQZWVyRGxzUmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIERBLCBTQSwgJkNhcGFiaWxpdHlJbmZvLCAmRExTVGltZU91dCwKKwkJCQkJCQkmU3VwcG9ydGVkUmF0ZXNMZW4sICZTdXBwb3J0ZWRSYXRlc1swXSwgJkh0Q2FwYWJpbGl0eUxlbiwgJkh0Q2FwYWJpbGl0eSkpCisJCXJldHVybjsKKworICAgIC8vIHN1cHBvcnRlZCByYXRlcyBhcnJheSBtYXkgbm90IGJlIHNvcnRlZC4gc29ydCBpdCBhbmQgZmluZCB0aGUgbWF4aW11bSByYXRlCisgICAgZm9yIChpID0gMDsgaSA8IFN1cHBvcnRlZFJhdGVzTGVuOyBpKyspCisgICAgeworICAgICAgICBpZiAoTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA8IChTdXBwb3J0ZWRSYXRlc1tpXSAmIDB4N2YpKQorICAgICAgICAgICAgTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IFN1cHBvcnRlZFJhdGVzW2ldICYgMHg3ZjsKKyAgICB9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFBlZXJEbHNSZXFBY3Rpb24oKSBmcm9tICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBTQVswXSwgU0FbMV0sIFNBWzJdLCBTQVszXSwgU0FbNF0sIFNBWzVdKSk7CisKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkRMUyAtIFBlZXJEbHNSZXFBY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFJTkZSQV9PTihwQWQpKQorCXsKKwkJU3RhdHVzQ29kZSA9IE1MTUVfUkVRVUVTVF9ERUNMSU5FRDsKKwl9CisJZWxzZSBpZiAoIXBBZC0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlKQorCXsKKwkJU3RhdHVzQ29kZSA9IE1MTUVfREVTVF9TVEFfSVNfTk9UX0FfUVNUQTsKKwl9CisJZWxzZSBpZiAoIXBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKQorCXsKKwkJU3RhdHVzQ29kZSA9IE1MTUVfUkVRVUVTVF9ERUNMSU5FRDsKKwl9CisJZWxzZQorCXsKKwkJLy8gZmluZCB0YWJsZSB0byB1cGRhdGUgcGFyYW1ldGVycworCQlmb3IgKGkgPSAoTUFYX05VTV9PRl9ETFNfRU5UUlktMSk7IGkgPj0gMDsgaS0tKQorCQl7CisJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgTUFDX0FERFJfRVFVQUwoU0EsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQkJeworCQkJCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19XQUlUX0tFWTsKKwkJCQllbHNlCisJCQkJeworCQkJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfRklOSVNIOworCQkJCX0KKworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlNlcXVlbmNlID0gMDsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lT3V0ID0gRExTVGltZU91dDsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5Db3VudERvd25UaW1lciA9IERMU1RpbWVPdXQ7CisJCQkJaWYgKEh0Q2FwYWJpbGl0eUxlbiAhPSAwKQorCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5iSFRDYXAgPSBUUlVFOworCQkJCWVsc2UKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uYkhUQ2FwID0gRkFMU0U7CisJCQkJcERMUyA9ICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8vIGNhbiBub3QgZmluZCBpbiB0YWJsZSwgY3JlYXRlIGEgbmV3IG9uZQorCQlpZiAoaSA8IDApCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUGVlckRsc1JlcUFjdGlvbigpIGNhbiBub3QgZmluZCBzYW1lIGVudHJ5IFxuIikpOworCQkJZm9yIChpPShNQVhfTlVNX09GX0RMU19FTlRSWSAtIDEpOyBpID49IE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGktLSkKKwkJCXsKKwkJCQlpZiAoIXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkKQorCQkJCXsKKwkJCQkJTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisJCQkJCVVDSEFSIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOworCisJCQkJCWlmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisJCQkJCXsKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19XQUlUX0tFWTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfRklOSVNIOworCQkJCQl9CisKKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU2VxdWVuY2UgPSAwOworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCA9IFRSVUU7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQgPSBETFNUaW1lT3V0OworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5Db3VudERvd25UaW1lciA9IERMU1RpbWVPdXQ7CisJCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIsIFNBLCBNQUNfQUREUl9MRU4pOworCQkJCQlpZiAoSHRDYXBhYmlsaXR5TGVuICE9IDApCisJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5iSFRDYXAgPSBUUlVFOworCQkJCQllbHNlCisJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5iSFRDYXAgPSBGQUxTRTsKKwkJCQkJcERMUyA9ICZwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXTsKKwkJCQkJcEVudHJ5ID0gTWFjVGFibGVJbnNlcnREbHNFbnRyeShwQWQsIFNBLCBpKTsKKworCQkJCQlzd2l0Y2ggKE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMpCisJCQkJCXsKKwkJCQkJCWNhc2UgMTA4OiBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV81NDsgICBicmVhazsKKwkJCQkJCWNhc2UgOTY6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV80ODsgICBicmVhazsKKwkJCQkJCWNhc2UgNzI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8zNjsgICBicmVhazsKKwkJCQkJCWNhc2UgNDg6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8yNDsgICBicmVhazsKKwkJCQkJCWNhc2UgMzY6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xODsgICBicmVhazsKKwkJCQkJCWNhc2UgMjQ6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMjsgICBicmVhazsKKwkJCQkJCWNhc2UgMTg6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV85OyAgICBicmVhazsKKwkJCQkJCWNhc2UgMTI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV82OyAgICBicmVhazsKKwkJCQkJCWNhc2UgMjI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsgICBicmVhazsKKwkJCQkJCWNhc2UgMTE6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV81XzU7ICBicmVhazsKKwkJCQkJCWNhc2UgNDogICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8yOyAgICBicmVhazsKKwkJCQkJCWNhc2UgMjogICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xOyAgICBicmVhazsKKwkJCQkJCWRlZmF1bHQ6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsgICBicmVhazsKKwkJCQkJfQorCisJCQkJCXBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZSA9IG1pbihwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUsIE1heFN1cHBvcnRlZFJhdGUpOworCisJCQkJCWlmIChwRW50cnktPk1heFN1cHBvcnRlZFJhdGUgPCBSQVRFX0ZJUlNUX09GRE1fUkFURSkKKwkJCQkJeworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZV07CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJCQl9CisKKwkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKwkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCQlwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPSAwOworCQkJCQlwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPSAwOworCisJCQkJCS8vIElmIHRoaXMgRW50cnkgc3VwcG9ydHMgODAyLjExbiwgdXBncmFkZSB0byBIVCByYXRlLgorCQkJCQlpZiAoKEh0Q2FwYWJpbGl0eUxlbiAhPSAwKSAmJiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKSkKKwkJCQkJeworCQkJCQkJVUNIQVIJaiwgYml0bWFzazsgLy9rLGJpdG1hc2s7CisJCQkJCQlDSEFSICAgIGlpOworCisJCQkJCQlpZiAoKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uR0YpICYmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuR0YpKQorCQkJCQkJeworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUR1JFRU5GSUVMRDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKKwkJCQkJCQlwQWQtPk1hY1RhYi5mQW55U3RhdGlvbk5vbkdGID0gVFJVRTsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPSAxOworCQkJCQkJfQorCisJCQkJCQlpZiAoKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoKSAmJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCkpCisJCQkJCQl7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlc9IEJXXzQwOworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSAoKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yNDApJihIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3I0MCkpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXID0gQldfMjA7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9ICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3IyMCkmKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjIwKSk7CisJCQkJCQkJcEFkLT5NYWNUYWIuZkFueVN0YXRpb24yME9ubHkgPSBUUlVFOworCQkJCQkJfQorCisJCQkJCQkvLyBmaW5kIG1heCBmaXhlZCByYXRlCisJCQkJCQlmb3IgKGlpPTE1OyBpaT49MDsgaWktLSkKKwkJCQkJCXsKKwkJCQkJCQlqID0gaWkvODsKKwkJCQkJCQliaXRtYXNrID0gKDE8PChpaS0oaio4KSkpOworCQkJCQkJCWlmICggKHBBZC0+U3RhQ2ZnLkRlc2lyZWRIdFBoeUluZm8uTUNTU2V0W2pdJmJpdG1hc2spICYmIChIdENhcGFiaWxpdHkuTUNTU2V0W2pdJmJpdG1hc2spKQorCQkJCQkJCXsKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gaWk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJCQlpZiAoaWk9PTApCisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisKKwkJCQkJCWlmIChwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyAhPSBNQ1NfQVVUTykKKwkJCQkJCXsKKworCQkJCQkJCXByaW50aygiQEBAIHBBZC0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPSAlZFxuIiwKKwkJCQkJCQkJcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MpOworCQkJCQkJCWlmIChwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9PSAzMikKKwkJCQkJCQl7CisJCQkJCQkJCS8vIEZpeCBNQ1MgYXMgSFQgRHVwbGljYXRlZCBNb2RlCisJCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXID0gMTsKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRNSVg7CisJCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNUQkMgPSAwOworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gMDsKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gMzI7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UgaWYgKHBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA+IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MpCisJCQkJCQkJeworCQkJCQkJCQkvLyBTVEEgc3VwcG9ydHMgZml4ZWQgTUNTCisJCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisJCQkJCQkJfQorCQkJCQkJfQorCisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TVEJDID0gKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uUnhTVEJDICYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5UeFNUQkMpKTsKKwkJCQkJCXBFbnRyeS0+TXBkdURlbnNpdHkgPSBIdENhcGFiaWxpdHkuSHRDYXBQYXJtLk1wZHVEZW5zaXR5OworCQkJCQkJcEVudHJ5LT5NYXhSQW1wZHVGYWN0b3IgPSBIdENhcGFiaWxpdHkuSHRDYXBQYXJtLk1heFJBbXBkdUZhY3RvcjsKKwkJCQkJCXBFbnRyeS0+TW1wc01vZGUgPSAoVUNIQVIpSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5NaW1vUHM7CisJCQkJCQlwRW50cnktPkFNc2R1U2l6ZSA9IChVQ0hBUilIdENhcGFiaWxpdHkuSHRDYXBJbmZvLkFNc2R1U2l6ZTsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLndvcmQgPSBwRW50cnktPk1heEhUUGh5TW9kZS53b3JkOworCisJCQkJCQlpZiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1NHSTIwX0NBUEFCTEUpOworCQkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjQwKQorCQkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19TR0k0MF9DQVBBQkxFKTsKKwkJCQkJCWlmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlR4U1RCQykKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfVHhTVEJDX0NBUEFCTEUpOworCQkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uUnhTVEJDKQorCQkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19SeFNUQkNfQ0FQQUJMRSk7CisJCQkJCQlpZiAoSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5QbHVzSFRDKQorCQkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19IVENfQ0FQQUJMRSk7CisJCQkJCQlpZiAocEFkLT5Db21tb25DZmcuYlJkZyAmJiBIdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlJER1N1cHBvcnQpCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1JER19DQVBBQkxFKTsKKwkJCQkJCWlmIChIdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLk1DU0ZlZWRiYWNrID09IDB4MDMpCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX01DU0ZFRURCQUNLX0NBUEFCTEUpOworCisJCQkJCQlOZGlzTW92ZU1lbW9yeSgmcEVudHJ5LT5IVENhcGFiaWxpdHksICZIdENhcGFiaWxpdHksIHNpemVvZihIVF9DQVBBQklMSVRZX0lFKSk7CisJCQkJCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkJCQlwRW50cnktPkhUUGh5TW9kZS53b3JkID0gcEVudHJ5LT5NYXhIVFBoeU1vZGUud29yZDsKKwkJCQkJcEVudHJ5LT5DdXJyVHhSYXRlID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfV01NX0NBUEFCTEUpOworCisJCQkJCWlmIChwQWQtPlN0YUNmZy5iQXV0b1R4UmF0ZVN3aXRjaCA9PSBUUlVFKQorCQkJCQl7CisJCQkJCQlQVUNIQVIgcFRhYmxlOworCQkJCQkJVUNIQVIgVGFibGVTaXplID0gMDsKKworCQkJCQkJTWxtZVNlbGVjdFR4UmF0ZVRhYmxlKHBBZCwgcEVudHJ5LCAmcFRhYmxlLCAmVGFibGVTaXplLCAmcEVudHJ5LT5DdXJyVHhSYXRlSW5kZXgpOworCQkJCQkJcEVudHJ5LT5iQXV0b1R4UmF0ZVN3aXRjaCA9IFRSVUU7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFCT0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREU7CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQkJCQkJcEVudHJ5LT5iQXV0b1R4UmF0ZVN3aXRjaCA9IEZBTFNFOworCisJCQkJCQlSVE1QVXBkYXRlTGVnYWN5VHhTZXR0aW5nKChVQ0hBUilwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkZpeGVkVHhNb2RlLCBwRW50cnkpOworCQkJCQl9CisJCQkJCXBFbnRyeS0+UmF0ZUxlbiA9IFN1cHBvcnRlZFJhdGVzTGVuOworCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCQlTdGF0dXNDb2RlID0gTUxNRV9TVUNDRVNTOworCisJCS8vIGNhbiBub3QgZmluZCBpbiB0YWJsZSwgY3JlYXRlIGEgbmV3IG9uZQorCQlpZiAoaSA8IDApCisJCXsKKwkJCVN0YXR1c0NvZGUgPSBNTE1FX1FPU19VTlNQRUNJRlk7CisJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkRMUyAtIFBlZXJEbHNSZXFBY3Rpb24oKSBETFNFbnRyeSB0YWJsZSBmdWxsKG9ubHkgY2FuIHN1cHBvcnQgJWQgRExTIHNlc3Npb24pIFxuIiwgTUFYX05VTV9PRl9ETFNfRU5UUlkgLSBNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFBlZXJEbHNSZXFBY3Rpb24oKSB1c2UgZW50cnkoJWQpICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCWksIFNBWzBdLCBTQVsxXSwgU0FbMl0sIFNBWzNdLCBTQVs0XSwgU0FbNV0pKTsKKwkJfQorCX0KKworCUFjdEhlYWRlckluaXQocEFkLCAmRGxzUnNwSGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJLy8gQnVpbGQgYmFzaWMgZnJhbWUgZmlyc3QKKwlpZiAoU3RhdHVzQ29kZSA9PSBNTE1FX1NVQ0NFU1MpCisJeworCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLAkJCQkmRnJhbWVMZW4sCisJCQkJCQlzaXplb2YoSEVBREVSXzgwMl8xMSksCQkmRGxzUnNwSGRyLAorCQkJCQkJMSwJCQkJCQkJJkNhdGVnb3J5LAorCQkJCQkJMSwJCQkJCQkJJkFjdGlvbiwKKwkJCQkJCTIsCQkJCQkJCSZTdGF0dXNDb2RlLAorCQkJCQkJNiwJCQkJCQkJU0EsCisJCQkJCQk2LAkJCQkJCQlwQWQtPkN1cnJlbnRBZGRyZXNzLAorCQkJCQkJMiwJCQkJCQkJJnBBZC0+U3RhQWN0aXZlLkNhcGFiaWxpdHlJbmZvLAorCQkJCQkJMSwJCQkJCQkJJlN1cFJhdGVJZSwKKwkJCQkJCTEsCQkJCQkJCSZwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwKKwkJCQkJCXBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLAlwQWQtPk1sbWVBdXguU3VwUmF0ZSwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKworCQlpZiAocEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gIT0gMCkKKwkJeworCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAkmdG1wLAorCQkJCQkJCSAgMSwJCQkJCQkmRXh0UmF0ZUllLAorCQkJCQkJCSAgMSwJCQkJCQkmcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4sCisJCQkJCQkJICBwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbiwgCXBBZC0+TWxtZUF1eC5FeHRSYXRlLAorCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJRnJhbWVMZW4gKz0gdG1wOworCQl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpKQorCQl7CisJCQlVQ0hBUiBIdExlbjsKKworI2lmZGVmIFJUX0JJR19FTkRJQU4KKwkJCUhUX0NBUEFCSUxJVFlfSUUgSHRDYXBhYmlsaXR5VG1wOworI2VuZGlmCisKKwkJCS8vIGFkZCBIVCBDYXBhYmlsaXR5IElFCisJCQlIdExlbiA9IHNpemVvZihIVF9DQVBBQklMSVRZX0lFKTsKKyNpZm5kZWYgUlRfQklHX0VORElBTgorCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLAkmdG1wLAorCQkJCQkJCQkxLAkJCQkJCSZIdENhcEllLAorCQkJCQkJCQkxLAkJCQkJCSZIdExlbiwKKwkJCQkJCQkJSHRMZW4sCQkJCQkmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LAorCQkJCQkJCQlFTkRfT0ZfQVJHUyk7CisjZWxzZQorCQkJTmRpc01vdmVNZW1vcnkoJkh0Q2FwYWJpbGl0eVRtcCwgJnBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eSwgSHRMZW4pOworCQkJCQkJCQkqKFVTSE9SVCAqKSgmSHRDYXBhYmlsaXR5VG1wLkh0Q2FwSW5mbykgPSBTV0FQMTYoKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5IdENhcEluZm8pKTsKKwkJCQkJCQkJKihVU0hPUlQgKikoJkh0Q2FwYWJpbGl0eVRtcC5FeHRIdENhcEluZm8pID0gU1dBUDE2KCooVVNIT1JUICopKCZIdENhcGFiaWxpdHlUbXAuRXh0SHRDYXBJbmZvKSk7CisKKwkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwJJnRtcCwKKwkJCQkJCQkJMSwJCQkJCQkmSHRDYXBJZSwKKwkJCQkJCQkJMSwJCQkJCQkmSHRMZW4sCisJCQkJCQkJCUh0TGVuLAkJCQkJJkh0Q2FwYWJpbGl0eVRtcCwKKwkJCQkJCQkJRU5EX09GX0FSR1MpOworI2VuZGlmCisJCQlGcmFtZUxlbiA9IEZyYW1lTGVuICsgdG1wOworCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkJaWYgKHBETFMgJiYgKHBETFMtPlN0YXR1cyAhPSBETFNfRklOSVNIKSkKKwkJeworCQkJUlRNUENhbmNlbFRpbWVyKCZwRExTLT5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwkJCVRpbWVvdXQgPSBETFNfVElNRU9VVDsKKwkJCVJUTVBTZXRUaW1lcigmcERMUy0+VGltZXIsIFRpbWVvdXQpOworCQl9CisJfQorCWVsc2UKKwl7CisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsCQkJCSZGcmFtZUxlbiwKKwkJCQkJCXNpemVvZihIRUFERVJfODAyXzExKSwJCSZEbHNSc3BIZHIsCisJCQkJCQkxLAkJCQkJCQkmQ2F0ZWdvcnksCisJCQkJCQkxLAkJCQkJCQkmQWN0aW9uLAorCQkJCQkJMiwJCQkJCQkJJlN0YXR1c0NvZGUsCisJCQkJCQk2LAkJCQkJCQlTQSwKKwkJCQkJCTYsCQkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisJfQorCisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCBRSURfQUNfQkUsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUGVlckRsc1JzcEFjdGlvbigKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUCQlDYXBhYmlsaXR5SW5mbzsKKwlVQ0hBUgkJREFbTUFDX0FERFJfTEVOXSwgU0FbTUFDX0FERFJfTEVOXTsKKwlVU0hPUlQJCVN0YXR1c0NvZGU7CisJU0hPUlQJCWk7CisJQk9PTEVBTgkJVGltZXJDYW5jZWxsZWQ7CisJVUNIQVIJCU1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPSAwOworICAgIFVDSEFSCQlTdXBwb3J0ZWRSYXRlc0xlbjsKKyAgICBVQ0hBUgkJU3VwcG9ydGVkUmF0ZXNbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSCQlIdENhcGFiaWxpdHlMZW47CisJSFRfQ0FQQUJJTElUWV9JRQlIdENhcGFiaWxpdHk7CisKKwlpZiAoIXBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKQorCQlyZXR1cm47CisKKwlpZiAoIUlORlJBX09OKHBBZCkpCisJCXJldHVybjsKKworCWlmICghUGVlckRsc1JzcFNhbml0eShwQWQsIEVsZW0tPk1zZywgRWxlbS0+TXNnTGVuLCBEQSwgU0EsICZDYXBhYmlsaXR5SW5mbywgJlN0YXR1c0NvZGUsCisJCQkJCQkJJlN1cHBvcnRlZFJhdGVzTGVuLCAmU3VwcG9ydGVkUmF0ZXNbMF0sICZIdENhcGFiaWxpdHlMZW4sICZIdENhcGFiaWxpdHkpKQorCQlyZXR1cm47CisKKyAgICAvLyBzdXBwb3J0ZWQgcmF0ZXMgYXJyYXkgbWF5IG5vdCBiZSBzb3J0ZWQuIHNvcnQgaXQgYW5kIGZpbmQgdGhlIG1heGltdW0gcmF0ZQorICAgIGZvciAoaT0wOyBpPFN1cHBvcnRlZFJhdGVzTGVuOyBpKyspCisgICAgeworICAgICAgICBpZiAoTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA8IChTdXBwb3J0ZWRSYXRlc1tpXSAmIDB4N2YpKQorICAgICAgICAgICAgTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IFN1cHBvcnRlZFJhdGVzW2ldICYgMHg3ZjsKKyAgICB9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFBlZXJEbHNSc3BBY3Rpb24oKSBmcm9tICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IHdpdGggU3RhdHVzQ29kZT0lZCwgQ2FwYWJpbGl0eUluZm89MHgleFxuIiwKKwkJU0FbMF0sIFNBWzFdLCBTQVsyXSwgU0FbM10sIFNBWzRdLCBTQVs1XSwgU3RhdHVzQ29kZSwgQ2FwYWJpbGl0eUluZm8pKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpKyspCisJeworCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgTUFDX0FERFJfRVFVQUwoU0EsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQl7CisJCQlpZiAoU3RhdHVzQ29kZSA9PSBNTE1FX1NVQ0NFU1MpCisJCQl7CisJCQkJTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisJCQkJVUNIQVIgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTE7CisKKwkJCQlwRW50cnkgPSBNYWNUYWJsZUluc2VydERsc0VudHJ5KHBBZCwgU0EsIGkpOworCisJCQkJc3dpdGNoIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzKQorCQkJCXsKKwkJCQkJY2FzZSAxMDg6IE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzU0OyAgIGJyZWFrOworCQkJCQljYXNlIDk2OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfNDg7ICAgYnJlYWs7CisJCQkJCWNhc2UgNzI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8zNjsgICBicmVhazsKKwkJCQkJY2FzZSA0ODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzI0OyAgIGJyZWFrOworCQkJCQljYXNlIDM2OiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTg7ICAgYnJlYWs7CisJCQkJCWNhc2UgMjQ6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMjsgICBicmVhazsKKwkJCQkJY2FzZSAxODogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzk7ICAgIGJyZWFrOworCQkJCQljYXNlIDEyOiAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfNjsgICAgYnJlYWs7CisJCQkJCWNhc2UgMjI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsgICBicmVhazsKKwkJCQkJY2FzZSAxMTogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzVfNTsgIGJyZWFrOworCQkJCQljYXNlIDQ6ICAgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMjsgICAgYnJlYWs7CisJCQkJCWNhc2UgMjogICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xOyAgICBicmVhazsKKwkJCQkJZGVmYXVsdDogIE1heFN1cHBvcnRlZFJhdGUgPSBSQVRFXzExOyAgIGJyZWFrOworCQkJCX0KKworCQkJCXBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZSA9IG1pbihwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUsIE1heFN1cHBvcnRlZFJhdGUpOworCisJCQkJaWYgKHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZSA8IFJBVEVfRklSU1RfT0ZETV9SQVRFKQorCQkJCXsKKwkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCXBFbnRyeS0+TWluSFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0NDSzsKKwkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9DQ0s7CisJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUyA9IHBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKKwkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKKwkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKKwkJCQl9CisKKwkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVyA9IEJXXzIwOworCQkJCXBFbnRyeS0+TWluSFRQaHlNb2RlLmZpZWxkLkJXID0gQldfMjA7CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCQlwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPSAwOworCQkJCXBFbnRyeS0+SFRDYXBhYmlsaXR5Lk1DU1NldFsxXSA9IDA7CisKKwkJCQkvLyBJZiB0aGlzIEVudHJ5IHN1cHBvcnRzIDgwMi4xMW4sIHVwZ3JhZGUgdG8gSFQgcmF0ZS4KKwkJCQlpZiAoKEh0Q2FwYWJpbGl0eUxlbiAhPSAwKSAmJiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKSkKKwkJCQl7CisJCQkJCVVDSEFSCWosIGJpdG1hc2s7IC8vayxiaXRtYXNrOworCQkJCQlDSEFSICAgIGlpOworCisJCQkJCWlmICgoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5HRikgJiYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5HRikpCisJCQkJCXsKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUR1JFRU5GSUVMRDsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUTUlYOworCQkJCQkJcEFkLT5NYWNUYWIuZkFueVN0YXRpb25Ob25HRiA9IFRSVUU7CisJCQkJCQlwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPSAxOworCQkJCQl9CisKKwkJCQkJaWYgKChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCkgJiYgKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5DaGFubmVsV2lkdGgpKQorCQkJCQl7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVz0gQldfNDA7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjQwKSYoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yNDApKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXID0gQldfMjA7CisJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5TaG9ydEdJID0gKChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuU2hvcnRHSWZvcjIwKSYoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yMjApKTsKKwkJCQkJCXBBZC0+TWFjVGFiLmZBbnlTdGF0aW9uMjBPbmx5ID0gVFJVRTsKKwkJCQkJfQorCisJCQkJCS8vIGZpbmQgbWF4IGZpeGVkIHJhdGUKKwkJCQkJZm9yIChpaT0xNTsgaWk+PTA7IGlpLS0pCisJCQkJCXsKKwkJCQkJCWogPSBpaS84OworCQkJCQkJYml0bWFzayA9ICgxPDwoaWktKGoqOCkpKTsKKwkJCQkJCWlmICggKHBBZC0+U3RhQ2ZnLkRlc2lyZWRIdFBoeUluZm8uTUNTU2V0W2pdJmJpdG1hc2spICYmIChIdENhcGFiaWxpdHkuTUNTU2V0W2pdJmJpdG1hc2spKQorCQkJCQkJeworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IGlpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQkJaWYgKGlpPT0wKQorCQkJCQkJCWJyZWFrOworCQkJCQl9CisKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTICE9IE1DU19BVVRPKQorCQkJCQl7CisJCQkJCQlpZiAocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgPT0gMzIpCisJCQkJCQl7CisJCQkJCQkJLy8gRml4IE1DUyBhcyBIVCBEdXBsaWNhdGVkIE1vZGUKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5CVyA9IDE7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfSFRNSVg7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU1RCQyA9IDA7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9IDA7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gMzI7CisJCQkJCQl9CisJCQkJCQllbHNlIGlmIChwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPiBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTKQorCQkJCQkJeworCQkJCQkJCS8vIFNUQSBzdXBwb3J0cyBmaXhlZCBNQ1MKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU1RCQyA9IChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlJ4U1RCQyAmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuVHhTVEJDKSk7CisJCQkJCXBFbnRyeS0+TXBkdURlbnNpdHkgPSBIdENhcGFiaWxpdHkuSHRDYXBQYXJtLk1wZHVEZW5zaXR5OworCQkJCQlwRW50cnktPk1heFJBbXBkdUZhY3RvciA9IEh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTWF4UkFtcGR1RmFjdG9yOworCQkJCQlwRW50cnktPk1tcHNNb2RlID0gKFVDSEFSKUh0Q2FwYWJpbGl0eS5IdENhcEluZm8uTWltb1BzOworCQkJCQlwRW50cnktPkFNc2R1U2l6ZSA9IChVQ0hBUilIdENhcGFiaWxpdHkuSHRDYXBJbmZvLkFNc2R1U2l6ZTsKKwkJCQkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IHBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQ7CisKKwkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjIwKQorCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1NHSTIwX0NBUEFCTEUpOworCQkJCQlpZiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yNDApCisJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfU0dJNDBfQ0FQQUJMRSk7CisJCQkJCWlmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlR4U1RCQykKKwkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19UeFNUQkNfQ0FQQUJMRSk7CisJCQkJCWlmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlJ4U1RCQykKKwkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19SeFNUQkNfQ0FQQUJMRSk7CisJCQkJCWlmIChIdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlBsdXNIVEMpCisJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfSFRDX0NBUEFCTEUpOworCQkJCQlpZiAocEFkLT5Db21tb25DZmcuYlJkZyAmJiBIdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlJER1N1cHBvcnQpCisJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUkRHX0NBUEFCTEUpOworCQkJCQlpZiAoSHRDYXBhYmlsaXR5LkV4dEh0Q2FwSW5mby5NQ1NGZWVkYmFjayA9PSAweDAzKQorCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX01DU0ZFRURCQUNLX0NBUEFCTEUpOworCisJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwRW50cnktPkhUQ2FwYWJpbGl0eSwgJkh0Q2FwYWJpbGl0eSwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKwkJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IHBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQ7CisJCQkJcEVudHJ5LT5DdXJyVHhSYXRlID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19XTU1fQ0FQQUJMRSk7CisKKwkJCQlpZiAocEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPT0gVFJVRSkKKwkJCQl7CisJCQkJCVBVQ0hBUiBwVGFibGU7CisJCQkJCVVDSEFSIFRhYmxlU2l6ZSA9IDA7CisKKwkJCQkJTWxtZVNlbGVjdFR4UmF0ZVRhYmxlKHBBZCwgcEVudHJ5LCAmcFRhYmxlLCAmVGFibGVTaXplLCAmcEVudHJ5LT5DdXJyVHhSYXRlSW5kZXgpOworCQkJCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gVFJVRTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERQk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NT0RFOworCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTUNTOworCQkJCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7CisKKwkJCQkJUlRNUFVwZGF0ZUxlZ2FjeVR4U2V0dGluZygoVUNIQVIpcEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5GaXhlZFR4TW9kZSwgcEVudHJ5KTsKKwkJCQl9CisJCQkJcEVudHJ5LT5SYXRlTGVuID0gU3VwcG9ydGVkUmF0ZXNMZW47CisKKwkJCQlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorCQkJCXsKKwkJCQkJLy8gSWYgc3VwcG9ydCBXUEEgb3IgV1BBMiwgc3RhcnQgU1RBS2V5IGhhbmQgc2hha2UsCisJCQkJCS8vIElmIGZhaWxlZCBoYW5kIHNoYWtlLCBqdXN0IHRlYXIgZG93biBwZWVyIERMUworCQkJCQlpZiAoUlRNUFNlbmRTVEFLZXlSZXF1ZXN0KHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCQkJeworCQkJCQkJTUxNRV9ETFNfUkVRX1NUUlVDVAlNbG1lRGxzUmVxOworCQkJCQkJVVNIT1JUCQkJCXJlYXNvbiA9IFJFQVNPTl9RT1NfQ0lQSEVSX05PVF9TVVBQT1JUOworCisJCQkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJCQlNbG1lRW5xdWV1ZShwQWQsIERMU19TVEFURV9NQUNISU5FLCBNVDJfTUxNRV9ETFNfVEVBUl9ET1dOLCBzaXplb2YoTUxNRV9ETFNfUkVRX1NUUlVDVCksICZNbG1lRGxzUmVxKTsKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19OT05FOworCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiRExTIC0gUGVlckRsc1JzcEFjdGlvbiBmYWlsZWQgd2hlbiBjYWxsIFJUTVBTZW5kU1RBS2V5UmVxdWVzdCBcbiIpKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19XQUlUX0tFWTsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gd2FpdGluZyBmb3IgU1RBS2V5IGhhbmRzaGFrZSBwcm9jZWR1cmVcbiIpKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfRklOSVNIOworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFBlZXJEbHNSc3BBY3Rpb24oKSBmcm9tICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IFN1Y2NlZWQgd2l0aCBXRVAgb3Igbm8gc2VjdXJpdHlcbiIsIFNBWzBdLCBTQVsxXSwgU0FbMl0sIFNBWzNdLCBTQVs0XSwgU0FbNV0pKTsKKwkJCQl9CisKKwkJCQkvL2luaXRpYWxpemUgc2VxIG5vIGZvciBETFMgZnJhbWVzLgorCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlNlcXVlbmNlID0gMDsKKwkJCQlpZiAoSHRDYXBhYmlsaXR5TGVuICE9IDApCisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLmJIVENhcCA9IFRSVUU7CisJCQkJZWxzZQorCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5iSFRDYXAgPSBGQUxTRTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBETFMgc2V0dXAgcHJvY2VkdXJlIGZhaWxlZC4KKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfTk9ORTsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJETFMgLSBQZWVyRGxzUnNwQWN0aW9uIGZhaWxlZCB3aXRoIFN0YXR1c0NvZGU9JWQgXG4iLCBTdGF0dXNDb2RlKSk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoaSA+PSBNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBQZWVyRGxzUnNwQWN0aW9uKCkgdXBkYXRlIHRpbWVvdXQgdmFsdWUgXG4iKSk7CisJCWZvciAoaT0oTUFYX05VTV9PRl9ETFNfRU5UUlktMSk7IGk+PU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGktLSkKKwkJeworCQkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmIE1BQ19BRERSX0VRVUFMKFNBLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJCXsKKwkJCQlpZiAoU3RhdHVzQ29kZSA9PSBNTE1FX1NVQ0NFU1MpCisJCQkJeworCQkJCQlNQUNfVEFCTEVfRU5UUlkgKnBFbnRyeTsKKwkJCQkJVUNIQVIgTWF4U3VwcG9ydGVkUmF0ZSA9IFJBVEVfMTE7CisKKwkJCQkJcEVudHJ5ID0gTWFjVGFibGVJbnNlcnREbHNFbnRyeShwQWQsIFNBLCBpKTsKKworCQkJCQlzd2l0Y2ggKE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMpCisJCQkJCXsKKwkJCQkJCWNhc2UgMTA4OiBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV81NDsgICBicmVhazsKKwkJCQkJCWNhc2UgOTY6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV80ODsgICBicmVhazsKKwkJCQkJCWNhc2UgNzI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8zNjsgICBicmVhazsKKwkJCQkJCWNhc2UgNDg6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8yNDsgICBicmVhazsKKwkJCQkJCWNhc2UgMzY6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xODsgICBicmVhazsKKwkJCQkJCWNhc2UgMjQ6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMjsgICBicmVhazsKKwkJCQkJCWNhc2UgMTg6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV85OyAgICBicmVhazsKKwkJCQkJCWNhc2UgMTI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV82OyAgICBicmVhazsKKwkJCQkJCWNhc2UgMjI6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsgICBicmVhazsKKwkJCQkJCWNhc2UgMTE6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV81XzU7ICBicmVhazsKKwkJCQkJCWNhc2UgNDogICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8yOyAgICBicmVhazsKKwkJCQkJCWNhc2UgMjogICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xOyAgICBicmVhazsKKwkJCQkJCWRlZmF1bHQ6ICBNYXhTdXBwb3J0ZWRSYXRlID0gUkFURV8xMTsgICBicmVhazsKKwkJCQkJfQorCisJCQkJCXBFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZSA9IG1pbihwQWQtPkNvbW1vbkNmZy5NYXhUeFJhdGUsIE1heFN1cHBvcnRlZFJhdGUpOworCisJCQkJCWlmIChwRW50cnktPk1heFN1cHBvcnRlZFJhdGUgPCBSQVRFX0ZJUlNUX09GRE1fUkFURSkKKwkJCQkJeworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfQ0NLOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUuZmllbGQuTUNTID0gcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTU9ERSA9IE1PREVfT0ZETTsKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1DUyA9IE9mZG1SYXRlVG9SeHdpTUNTW3BFbnRyeS0+TWF4U3VwcG9ydGVkUmF0ZV07CisJCQkJCQlwRW50cnktPk1pbkhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9PRkRNOworCQkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuTUNTID0gT2ZkbVJhdGVUb1J4d2lNQ1NbcEVudHJ5LT5NYXhTdXBwb3J0ZWRSYXRlXTsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX09GRE07CisJCQkJCQlwRW50cnktPkhUUGh5TW9kZS5maWVsZC5NQ1MgPSBPZmRtUmF0ZVRvUnh3aU1DU1twRW50cnktPk1heFN1cHBvcnRlZFJhdGVdOworCQkJCQl9CisKKwkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKwkJCQkJcEVudHJ5LT5NaW5IVFBoeU1vZGUuZmllbGQuQlcgPSBCV18yMDsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCQlwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMF0gPSAwOworCQkJCQlwRW50cnktPkhUQ2FwYWJpbGl0eS5NQ1NTZXRbMV0gPSAwOworCisJCQkJCS8vIElmIHRoaXMgRW50cnkgc3VwcG9ydHMgODAyLjExbiwgdXBncmFkZSB0byBIVCByYXRlLgorCQkJCQlpZiAoKEh0Q2FwYWJpbGl0eUxlbiAhPSAwKSAmJiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKSkKKwkJCQkJeworCQkJCQkJVUNIQVIJaiwgYml0bWFzazsgLy9rLGJpdG1hc2s7CisJCQkJCQlDSEFSICAgIGlpOworCisJCQkJCQlpZiAoKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uR0YpICYmIChwQWQtPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuR0YpKQorCQkJCQkJeworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLk1PREUgPSBNT0RFX0hUR1JFRU5GSUVMRDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKKwkJCQkJCQlwQWQtPk1hY1RhYi5mQW55U3RhdGlvbk5vbkdGID0gVFJVRTsKKwkJCQkJCQlwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPSAxOworCQkJCQkJfQorCisJCQkJCQlpZiAoKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQ2hhbm5lbFdpZHRoKSAmJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkNoYW5uZWxXaWR0aCkpCisJCQkJCQl7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlc9IEJXXzQwOworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSAoKHBBZC0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5TaG9ydEdJZm9yNDApJihIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3I0MCkpOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLkJXID0gQldfMjA7CisJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU2hvcnRHSSA9ICgocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlNob3J0R0lmb3IyMCkmKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uU2hvcnRHSWZvcjIwKSk7CisJCQkJCQkJcEFkLT5NYWNUYWIuZkFueVN0YXRpb24yME9ubHkgPSBUUlVFOworCQkJCQkJfQorCisJCQkJCQkvLyBmaW5kIG1heCBmaXhlZCByYXRlCisJCQkJCQlmb3IgKGlpPTE1OyBpaT49MDsgaWktLSkKKwkJCQkJCXsKKwkJCQkJCQlqID0gaWkvODsKKwkJCQkJCQliaXRtYXNrID0gKDE8PChpaS0oaio4KSkpOworCQkJCQkJCWlmICggKHBBZC0+U3RhQ2ZnLkRlc2lyZWRIdFBoeUluZm8uTUNTU2V0W2pdJmJpdG1hc2spICYmIChIdENhcGFiaWxpdHkuTUNTU2V0W2pdJmJpdG1hc2spKQorCQkJCQkJCXsKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gaWk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJCQlpZiAoaWk9PTApCisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCisJCQkJCQlpZiAocEFkLT5TdGFDZmcuRGVzaXJlZFRyYW5zbWl0U2V0dGluZy5maWVsZC5NQ1MgIT0gTUNTX0FVVE8pCisJCQkJCQl7CisJCQkJCQkJcHJpbnRrKCJAQEAgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9ICVkXG4iLAorCQkJCQkJCQlwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyk7CisJCQkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID09IDMyKQorCQkJCQkJCXsKKwkJCQkJCQkJLy8gRml4IE1DUyBhcyBIVCBEdXBsaWNhdGVkIE1vZGUKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuQlcgPSAxOworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NT0RFID0gTU9ERV9IVE1JWDsKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuU1RCQyA9IDA7CisJCQkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNob3J0R0kgPSAwOworCQkJCQkJCQlwRW50cnktPk1heEhUUGh5TW9kZS5maWVsZC5NQ1MgPSAzMjsKKwkJCQkJCQl9CisJCQkJCQkJZWxzZSBpZiAocEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID4gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUykKKwkJCQkJCQl7CisJCQkJCQkJCS8vIFNUQSBzdXBwb3J0cyBmaXhlZCBNQ1MKKwkJCQkJCQkJcEVudHJ5LT5NYXhIVFBoeU1vZGUuZmllbGQuTUNTID0gcEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1DUzsKKwkJCQkJCQl9CisJCQkJCQl9CisKKwkJCQkJCXBFbnRyeS0+TWF4SFRQaHlNb2RlLmZpZWxkLlNUQkMgPSAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5SeFNUQkMgJiAocEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LlR4U1RCQykpOworCQkJCQkJcEVudHJ5LT5NcGR1RGVuc2l0eSA9IEh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTXBkdURlbnNpdHk7CisJCQkJCQlwRW50cnktPk1heFJBbXBkdUZhY3RvciA9IEh0Q2FwYWJpbGl0eS5IdENhcFBhcm0uTWF4UkFtcGR1RmFjdG9yOworCQkJCQkJcEVudHJ5LT5NbXBzTW9kZSA9IChVQ0hBUilIdENhcGFiaWxpdHkuSHRDYXBJbmZvLk1pbW9QczsKKwkJCQkJCXBFbnRyeS0+QU1zZHVTaXplID0gKFVDSEFSKUh0Q2FwYWJpbGl0eS5IdENhcEluZm8uQU1zZHVTaXplOworCQkJCQkJcEVudHJ5LT5IVFBoeU1vZGUud29yZCA9IHBFbnRyeS0+TWF4SFRQaHlNb2RlLndvcmQ7CisKKwkJCQkJCWlmIChIdENhcGFiaWxpdHkuSHRDYXBJbmZvLlNob3J0R0lmb3IyMCkKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfU0dJMjBfQ0FQQUJMRSk7CisJCQkJCQlpZiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5TaG9ydEdJZm9yNDApCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1NHSTQwX0NBUEFCTEUpOworCQkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5IdENhcEluZm8uVHhTVEJDKQorCQkJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19UeFNUQkNfQ0FQQUJMRSk7CisJCQkJCQlpZiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5SeFNUQkMpCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1J4U1RCQ19DQVBBQkxFKTsKKwkJCQkJCWlmIChIdENhcGFiaWxpdHkuRXh0SHRDYXBJbmZvLlBsdXNIVEMpCisJCQkJCQkJQ0xJRU5UX1NUQVRVU19TRVRfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX0hUQ19DQVBBQkxFKTsKKwkJCQkJCWlmIChwQWQtPkNvbW1vbkNmZy5iUmRnICYmIEh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uUkRHU3VwcG9ydCkKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfUkRHX0NBUEFCTEUpOworCQkJCQkJaWYgKEh0Q2FwYWJpbGl0eS5FeHRIdENhcEluZm8uTUNTRmVlZGJhY2sgPT0gMHgwMykKKwkJCQkJCQlDTElFTlRfU1RBVFVTX1NFVF9GTEFHKHBFbnRyeSwgZkNMSUVOVF9TVEFUVVNfTUNTRkVFREJBQ0tfQ0FQQUJMRSk7CisKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwRW50cnktPkhUQ2FwYWJpbGl0eSwgJkh0Q2FwYWJpbGl0eSwgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpKTsKKwkJCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLndvcmQgPSBwRW50cnktPk1heEhUUGh5TW9kZS53b3JkOworCQkJCQlwRW50cnktPkN1cnJUeFJhdGUgPSBwRW50cnktPk1heFN1cHBvcnRlZFJhdGU7CisJCQkJCUNMSUVOVF9TVEFUVVNfU0VUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19XTU1fQ0FQQUJMRSk7CisKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID09IFRSVUUpCisJCQkJCXsKKwkJCQkJCVBVQ0hBUiBwVGFibGU7CisJCQkJCQlVQ0hBUiBUYWJsZVNpemUgPSAwOworCisJCQkJCQlNbG1lU2VsZWN0VHhSYXRlVGFibGUocEFkLCBwRW50cnksICZwVGFibGUsICZUYWJsZVNpemUsICZwRW50cnktPkN1cnJUeFJhdGVJbmRleCk7CisJCQkJCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gVFJVRTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1PREUJPSBwQWQtPlN0YUNmZy5IVFBoeU1vZGUuZmllbGQuTU9ERTsKKwkJCQkJCXBFbnRyeS0+SFRQaHlNb2RlLmZpZWxkLk1DUwk9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1M7CisJCQkJCQlwRW50cnktPmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7CisKKwkJCQkJCVJUTVBVcGRhdGVMZWdhY3lUeFNldHRpbmcoKFVDSEFSKXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuRml4ZWRUeE1vZGUsIHBFbnRyeSk7CisJCQkJCX0KKwkJCQkJcEVudHJ5LT5SYXRlTGVuID0gU3VwcG9ydGVkUmF0ZXNMZW47CisKKwkJCQkJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKwkJCQkJeworCQkJCQkJLy8gSWYgc3VwcG9ydCBXUEEgb3IgV1BBMiwgc3RhcnQgU1RBS2V5IGhhbmQgc2hha2UsCisJCQkJCQkvLyBJZiBmYWlsZWQgaGFuZCBzaGFrZSwganVzdCB0ZWFyIGRvd24gcGVlciBETFMKKwkJCQkJCWlmIChSVE1QU2VuZFNUQUtleVJlcXVlc3QocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCQkJeworCQkJCQkJCU1MTUVfRExTX1JFUV9TVFJVQ1QJTWxtZURsc1JlcTsKKwkJCQkJCQlVU0hPUlQJCQkJcmVhc29uID0gUkVBU09OX1FPU19DSVBIRVJfTk9UX1NVUFBPUlQ7CisKKwkJCQkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX05PTkU7CisJCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkRMUyAtIFBlZXJEbHNSc3BBY3Rpb24gZmFpbGVkIHdoZW4gY2FsbCBSVE1QU2VuZFNUQUtleVJlcXVlc3QgXG4iKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX1dBSVRfS0VZOworCQkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gd2FpdGluZyBmb3IgU1RBS2V5IGhhbmRzaGFrZSBwcm9jZWR1cmVcbiIpKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPSBETFNfRklOSVNIOworCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBQZWVyRGxzUnNwQWN0aW9uKCkgZnJvbSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCBTdWNjZWVkIHdpdGggV0VQIG9yIG5vIHNlY3VyaXR5XG4iLCBTQVswXSwgU0FbMV0sIFNBWzJdLCBTQVszXSwgU0FbNF0sIFNBWzVdKSk7CisJCQkJCX0KKwkJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU2VxdWVuY2UgPSAwOworCQkJCQlpZiAoSHRDYXBhYmlsaXR5TGVuICE9IDApCisJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5iSFRDYXAgPSBUUlVFOworCQkJCQllbHNlCisJCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5iSFRDYXAgPSBGQUxTRTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJLy8gRExTIHNldHVwIHByb2NlZHVyZSBmYWlsZWQuCisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9IERMU19OT05FOworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkRMUyAtIFBlZXJEbHNSc3BBY3Rpb24gZmFpbGVkIHdpdGggU3RhdHVzQ29kZT0lZCBcbiIsIFN0YXR1c0NvZGUpKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lRGxzVGVhckRvd25BY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBVQ0hBUgkJCXBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTCQlOU3RhdHVzOworCVVMT05HCQkJRnJhbWVMZW4gPSAwOworCVVDSEFSCQkJQ2F0ZWdvcnkgPSBDQVRFR09SWV9ETFM7CisJVUNIQVIJCQlBY3Rpb24gPSBBQ1RJT05fRExTX1RFQVJET1dOOworCVVTSE9SVAkJCVJlYXNvbkNvZGUgPSBSRUFTT05fUU9TX1VOU1BFQ0lGWTsKKwlIRUFERVJfODAyXzExCURsc1RlYXJEb3duSGRyOworCVBSVF84MDJfMTFfRExTCXBETFM7CisJQk9PTEVBTgkJCVRpbWVyQ2FuY2VsbGVkOworCVVDSEFSCQkJaTsKKworCWlmKCFNbG1lRGxzUmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sICZwRExTLCAmUmVhc29uQ29kZSkpCisJCXJldHVybjsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gTWxtZURsc1RlYXJEb3duQWN0aW9uKCkgd2l0aCBSZWFzb25Db2RlPSVkIFxuIiwgUmVhc29uQ29kZSkpOworCisJTlN0YXR1cyA9IE1sbWVBbGxvY2F0ZU1lbW9yeShwQWQsICZwT3V0QnVmZmVyKTsgIC8vR2V0IGFuIHVudXNlZCBub25wYWdlZCBtZW1vcnkKKwlpZiAoTlN0YXR1cyAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsKCJETFMgLSBNbG1lRGxzVGVhckRvd25BY3Rpb24oKSBhbGxvY2F0ZSBtZW1vcnkgZmFpbGVkIFxuIikpOworCQlyZXR1cm47CisJfQorCisJQWN0SGVhZGVySW5pdChwQWQsICZEbHNUZWFyRG93bkhkciwgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKworCS8vIEJ1aWxkIGJhc2ljIGZyYW1lIGZpcnN0CisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCQkJJkZyYW1lTGVuLAorCQkJCQlzaXplb2YoSEVBREVSXzgwMl8xMSksCQkmRGxzVGVhckRvd25IZHIsCisJCQkJCTEsCQkJCQkJCSZDYXRlZ29yeSwKKwkJCQkJMSwJCQkJCQkJJkFjdGlvbiwKKwkJCQkJNiwJCQkJCQkJJnBETFMtPk1hY0FkZHIsCisJCQkJCTYsCQkJCQkJCXBBZC0+Q3VycmVudEFkZHJlc3MsCisJCQkJCTIsCQkJCQkJCSZSZWFzb25Db2RlLAorCQkJCQlFTkRfT0ZfQVJHUyk7CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIFFJRF9BQ19CRSwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJUlRNUENhbmNlbFRpbWVyKCZwRExTLT5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKworCS8vIFJlbW92ZSBrZXkgaW4gbG9jYWwgZGxzIHRhYmxlIGVudHJ5CisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmIChNQUNfQUREUl9FUVVBTChwRExTLT5NYWNBZGRyLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJeworCQkJTWFjVGFibGVEZWxldGVEbHNFbnRyeShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY1RhYk1hdGNoV0NJRCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCX0KKwl9CisKKwkvLyBjbGVhciBwZWVyIGRscyB0YWJsZSBlbnRyeQorCWZvciAoaSA9IE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkgPCBNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCXsKKwkJaWYgKE1BQ19BRERSX0VRVUFMKHBETFMtPk1hY0FkZHIsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQl7CisJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQkJTWFjVGFibGVEZWxldGVEbHNFbnRyeShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY1RhYk1hdGNoV0NJRCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCX0KKwl9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBQZWVyRGxzVGVhckRvd25BY3Rpb24oCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSCQkJREFbTUFDX0FERFJfTEVOXSwgU0FbTUFDX0FERFJfTEVOXTsKKwlVU0hPUlQJCQlSZWFzb25Db2RlOworCVVJTlQJCQlpOworCUJPT0xFQU4JCQlUaW1lckNhbmNlbGxlZDsKKworCWlmICghcEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJCXJldHVybjsKKworCWlmICghSU5GUkFfT04ocEFkKSkKKwkJcmV0dXJuOworCisJaWYgKCFQZWVyRGxzVGVhckRvd25TYW5pdHkocEFkLCBFbGVtLT5Nc2csIEVsZW0tPk1zZ0xlbiwgREEsIFNBLCAmUmVhc29uQ29kZSkpCisJCXJldHVybjsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUGVlckRsc1RlYXJEb3duQWN0aW9uKCkgZnJvbSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCB3aXRoIFJlYXNvbkNvZGU9JWRcbiIsIFNBWzBdLCBTQVsxXSwgU0FbMl0sIFNBWzNdLCBTQVs0XSwgU0FbNV0sIFJlYXNvbkNvZGUpKTsKKworCS8vIGNsZWFyIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCWZvciAoaT0wOyBpPE1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZCAmJiBNQUNfQUREUl9FUVVBTChTQSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCXsKKwkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisJCQkvL0FzaWNEZWxXY2lkVGFiKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lEKTsKKwkJCS8vQXNpY1JlbW92ZVBhaXJ3aXNlS2V5RW50cnkocEFkLCBCU1MwLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQpOworCQkJTWFjVGFibGVEZWxldGVEbHNFbnRyeShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY1RhYk1hdGNoV0NJRCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCX0KKwl9CisKKwkvLyBjbGVhciBwZWVyIGRscyB0YWJsZSBlbnRyeQorCWZvciAoaT1NQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJeworCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgTUFDX0FERFJfRVFVQUwoU0EsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQl7CisJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQkJLy9Bc2ljRGVsV2NpZFRhYihwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY1RhYk1hdGNoV0NJRCk7CisJCQkvL0FzaWNSZW1vdmVQYWlyd2lzZUtleUVudHJ5KHBBZCwgQlNTMCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lEKTsKKwkJCU1hY1RhYmxlRGVsZXRlRGxzRW50cnkocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpOworCQl9CisJfQorfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgUlRNUENoZWNrRExTVGltZU91dCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCkKK3sKKwlVTE9ORwkJCQlpOworCU1MTUVfRExTX1JFUV9TVFJVQ1QJTWxtZURsc1JlcTsKKwlVU0hPUlQJCQkJcmVhc29uID0gUkVBU09OX1FPU19VTlNQRUNJRlk7CisKKwlpZiAoISBwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwkJcmV0dXJuOworCisJaWYgKCEgSU5GUkFfT04ocEFkKSkKKwkJcmV0dXJuOworCisJLy8gSWYgdGltZW91dCB2YWx1ZSBpcyBlcXVhbGVkIHRvIHplcm8sIGl0IG1lYW5zIGFsd2F5cyBub3QgYmUgdGltZW91dC4KKworCS8vIHVwZGF0ZSBsb2NhbCBkbHMgdGFibGUgZW50cnkKKwlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpKyspCisJeworCQlpZiAoKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkKSAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpCisJCQkmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dCAhPSAwKSkKKwkJeworCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uQ291bnREb3duVGltZXIgLS07CisKKwkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5Db3VudERvd25UaW1lciA9PSAwKQorCQkJeworCQkJCXJlYXNvbiA9IFJFQVNPTl9RT1NfUkVRVUVTVF9USU1FT1VUOworCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzCT0gRExTX05PTkU7CisJCQkJRGxzUGFybUZpbGwocEFkLCAmTWxtZURsc1JlcSwgJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLCByZWFzb24pOworCQkJCU1sbWVFbnF1ZXVlKHBBZCwgRExTX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RMU19URUFSX0RPV04sIHNpemVvZihNTE1FX0RMU19SRVFfU1RSVUNUKSwgJk1sbWVEbHNSZXEpOworCQkJfQorCQl9CisJfQorCisJLy8gdXBkYXRlIHBlZXIgZGxzIHRhYmxlIGVudHJ5CisJZm9yIChpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwl7CisJCWlmICgocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQpICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkKKwkJCSYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5UaW1lT3V0ICE9IDApKQorCQl7CisJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5Db3VudERvd25UaW1lciAtLTsKKworCQkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID09IDApCisJCQl7CisJCQkJcmVhc29uID0gUkVBU09OX1FPU19SRVFVRVNUX1RJTUVPVVQ7CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMJPSBETFNfTk9ORTsKKwkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBSVE1QUmN2RnJhbWVETFNDaGVjaygKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBQSEVBREVSXzgwMl8xMQlwSGVhZGVyLAorCUlOIFVMT05HCQkJTGVuLAorCUlOIFBSVDI4WFhfUlhEX1NUUlVDCXBSeEQpCit7CisJVUxPTkcJCQlpOworCUJPT0xFQU4JCQliRmluZEVudHJ5ID0gRkFMU0U7CisJQk9PTEVBTgkJCWJTVEFLZXlGcmFtZSA9IEZBTFNFOworCVBFQVBPTF9QQUNLRVQJcEVhcDsKKwlQVUNIQVIJCQlwUHJvdG8sIHBBZGRyID0gTlVMTDsKKwlQVUNIQVIJCQlwU1RBS2V5ID0gTlVMTDsKKwlVQ0hBUgkJCVplcm9SZXBsYXlbTEVOX0tFWV9ERVNDX1JFUExBWV07CisJVUNIQVIJCQlNaWNbMTZdLCBPbGRNaWNbMTZdOworCVVDSEFSCQkJZGlnZXN0WzgwXTsKKwlVQ0hBUgkJCURsc1BUS1s4MF07CisJVUNIQVIJCQl0ZW1wWzY0XTsKKwlCT09MRUFOCQkJVGltZXJDYW5jZWxsZWQ7CisJQ0lQSEVSX0tFWQkJUGFpcndpc2VLZXk7CisKKworCWlmICghIHBBZC0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKQorCQlyZXR1cm4gYlNUQUtleUZyYW1lOworCisJaWYgKCEgSU5GUkFfT04ocEFkKSkKKwkJcmV0dXJuIGJTVEFLZXlGcmFtZTsKKworCWlmICghIChwSGVhZGVyLT5GQy5TdWJUeXBlICYgMHgwOCkpCisJCXJldHVybiBiU1RBS2V5RnJhbWU7CisKKwlpZiAoTGVuIDwgTEVOR1RIXzgwMl8xMSArIDYgKyAyICsgMikKKwkJcmV0dXJuIGJTVEFLZXlGcmFtZTsKKworCXBQcm90bwk9IChQVUNIQVIpcEhlYWRlciArIExFTkdUSF84MDJfMTEgKyAyICsgNjsJLy8gUU9TIENvbnRyb2wgZmllbGQgLCAweEFBIDB4QUEgMHhBQSAweDAwIDB4MDAgMHgwMAorCXBBZGRyCT0gcEhlYWRlci0+QWRkcjI7CisKKwkvLyBMMlBBRCBiaXQgb24gd2lsbCBwYWQgMiBieXRlcyBhdCBMTEMKKwlpZiAocFJ4RC0+TDJQQUQpCisJeworCQlwUHJvdG8gKz0gMjsKKwl9CisKKwlpZiAoUlRNUEVxdWFsTWVtb3J5KEVBUE9MLCBwUHJvdG8sIDIpICYmIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA+PSAgTmRpczgwMl8xMUF1dGhNb2RlV1BBKSkKKwl7CisJCXBFYXAgPSAoUEVBUE9MX1BBQ0tFVCkgKHBQcm90byArIDIpOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gU25pZmYgTGVuPSVsZCwgRGF0YUxlbj0lZCwgS2V5TWljPSVkLCBJbnN0YWxsPSVkLCBLZXlBY2s9JWQsIFNlY3VyZT0lZCwgRUtEX0RMPSVkLCBFcnJvcj0lZCwgUmVxdWVzdD0lZFxuIiwgTGVuLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMRU5HVEhfODAyXzExICsgNiArIDIgKyAyICsgc2l6ZW9mKEVBUE9MX1BBQ0tFVCkgLSBNQVhfTEVOX09GX1JTTklFICsgMTYpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBFYXAtPktleURlc2MuS2V5SW5mby5LZXlNaWMsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLkluc3RhbGwsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLktleUFjaywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRWFwLT5LZXlEZXNjLktleUluZm8uU2VjdXJlLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBFYXAtPktleURlc2MuS2V5SW5mby5FS0RfREwsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLkVycm9yLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBFYXAtPktleURlc2MuS2V5SW5mby5SZXF1ZXN0KSk7CisKKwkJaWYgKChMZW4gPj0gKExFTkdUSF84MDJfMTEgKyA2ICsgMiArIDIgKyBzaXplb2YoRUFQT0xfUEFDS0VUKSAtIE1BWF9MRU5fT0ZfUlNOSUUgKyAxNikpICYmIHBFYXAtPktleURlc2MuS2V5SW5mby5LZXlNaWMKKwkJCSYmIHBFYXAtPktleURlc2MuS2V5SW5mby5JbnN0YWxsICYmIHBFYXAtPktleURlc2MuS2V5SW5mby5LZXlBY2sgJiYgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLlNlY3VyZQorCQkJJiYgcEVhcC0+S2V5RGVzYy5LZXlJbmZvLkVLRF9ETCAmJiAhcEVhcC0+S2V5RGVzYy5LZXlJbmZvLkVycm9yICYmICFwRWFwLT5LZXlEZXNjLktleUluZm8uUmVxdWVzdCkKKwkJeworCQkJLy8gRmlyc3QgdmFsaWRhdGUgcmVwbGF5IGNvdW50ZXIsIG9ubHkgYWNjZXB0IG1lc3NhZ2Ugd2l0aCBsYXJnZXIgcmVwbGF5IGNvdW50ZXIKKwkJCS8vIExldCBlcXVhbCBwYXNzLCBzb21lIEFQIHN0YXJ0IHdpdGggYWxsIHplcm8gcmVwbGF5IGNvdW50ZXIKKwkJCU5kaXNaZXJvTWVtb3J5KFplcm9SZXBsYXksIExFTl9LRVlfREVTQ19SRVBMQVkpOworCQkJaWYgKChSVE1QQ29tcGFyZU1lbW9yeShwRWFwLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpICE9IDEpICYmCisJCQkJKFJUTVBDb21wYXJlTWVtb3J5KHBFYXAtPktleURlc2MuUmVwbGF5Q291bnRlciwgWmVyb1JlcGxheSwgTEVOX0tFWV9ERVNDX1JFUExBWSkgIT0gMCkpCisJCQkJcmV0dXJuIGJTVEFLZXlGcmFtZTsKKworCQkJLy9SVE1QTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCBwRWFwLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCQkJUlRNUE1vdmVNZW1vcnkocEFkLT5TdGFDZmcuRGxzUmVwbGF5Q291bnRlciwgcEVhcC0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gU25pZmYgcmVwbGF5IGNvdW50ZXIgKCUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeCkgTGVuPSVsZCwgS2V5RGF0YUxlbj0lZFxuIiwKKwkJCQlwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzBdLCBwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzFdLCBwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzJdLAorCQkJCXBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbM10sIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbNF0sCXBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbNV0sCisJCQkJcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlcls2XSwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlcls3XSwgTGVuLCBwRWFwLT5LZXlEZXNjLktleURhdGFbMV0pKTsKKworCQkJLy8gcHV0IHRoZXNlIGNvZGUgc2VnbWVudCB0byBnZXQgdGhlIHJlcGxheSBjb3VudGVyCisJCQlpZiAocEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEKQorCQkJCXJldHVybiBiU1RBS2V5RnJhbWU7CisKKwkJCS8vIENoZWNrIE1JQyB2YWx1ZQorCQkJLy8gU2F2ZSB0aGUgTUlDIGFuZCByZXBsYWNlIHdpdGggemVybworCQkJLy8gdXNlIHByb3ByaWV0YXJ5IFBUSworCQkJTmRpc1plcm9NZW1vcnkodGVtcCwgNjQpOworCQkJTmRpc01vdmVNZW1vcnkodGVtcCwgIklFRUU4MDIuMTEgV0lSRUxFU1MgQUNDRVNTIFBPSU5UIiwgMzIpOworCQkJV3BhQ291bnRQVEsocEFkLCB0ZW1wLCB0ZW1wLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgdGVtcCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRGxzUFRLLCBMRU5fUFRLKTsKKworCQkJTmRpc01vdmVNZW1vcnkoT2xkTWljLCBwRWFwLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJCQlOZGlzWmVyb01lbW9yeShwRWFwLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJCQlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJCQl7CisJCQkJLy8gQUVTCisJCQkJSE1BQ19TSEExKChQVUNIQVIpIHBFYXAsIHBFYXAtPkJvZHlfTGVuWzFdICsgNCwgRGxzUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCQkJTmRpc01vdmVNZW1vcnkoTWljLAlkaWdlc3QsCUxFTl9LRVlfREVTQ19NSUMpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWhtYWNfbWQ1KERsc1BUSywgTEVOX0VBUF9NSUNLLCAoUFVDSEFSKSBwRWFwLCBwRWFwLT5Cb2R5X0xlblsxXSArIDQsIE1pYyk7CisJCQl9CisKKwkJCWlmICghTmRpc0VxdWFsTWVtb3J5KE9sZE1pYywgTWljLCBMRU5fS0VZX0RFU0NfTUlDKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJNSUMgRGlmZmVyZW50IGluIE1zZzEgb2YgU1RBS2V5IGhhbmRzaGFrZSEgXG4iKSk7CisJCQkJcmV0dXJuIGJTVEFLZXlGcmFtZTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJNSUMgVkFMSUQgaW4gTXNnMSBvZiBTVEFLZXkgaGFuZHNoYWtlISBcbiIpKTsKKyNpZiAxCisJCQlpZiAoKHBFYXAtPktleURlc2MuS2V5RGF0YVswXSA9PSAweEREKSAmJiAocEVhcC0+S2V5RGVzYy5LZXlEYXRhWzJdID09IDB4MDApICYmIChwRWFwLT5LZXlEZXNjLktleURhdGFbM10gPT0gMHgwQykKKwkJCQkmJiAocEVhcC0+S2V5RGVzYy5LZXlEYXRhWzRdID09IDB4NDMpICYmIChwRWFwLT5LZXlEZXNjLktleURhdGFbNV0gPT0gMHgwMikpCisJCQl7CisJCQkJcEFkZHIJCQk9IHBFYXAtPktleURlc2MuS2V5RGF0YSArIDg7CQkvLyBUcGUoMSksIExlbigxKSwgT1VJKDMpLCBEYXRhVHlwZSgxKSwgUmVzZXJ2ZWQoMikKKwkJCQlwU1RBS2V5CQkJPSBwRWFwLT5LZXlEZXNjLktleURhdGEgKyAxNDsJLy8gVHBlKDEpLCBMZW4oMSksIE9VSSgzKSwgRGF0YVR5cGUoMSksIFJlc2VydmVkKDIpLCBTVEFLZXlfTWFjX0FkZHIoNikKKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUmVjZWl2ZSBTVEFLZXkgTWVzc2FnZS0xIGZyb20gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnggTGVuPSVsZCwgS2V5RGF0YUxlbj0lZFxuIiwKKwkJCQkJcEFkZHJbMF0sIHBBZGRyWzFdLCBwQWRkclsyXSwgcEFkZHJbM10sIHBBZGRyWzRdLCBwQWRkcls1XSwgTGVuLCBwRWFwLT5LZXlEZXNjLktleURhdGFbMV0pKTsKKworCQkJCWJTVEFLZXlGcmFtZSA9IFRSVUU7CisJCQl9CisjZWxzZQorCQkJaWYgKChwRWFwLT5LZXlEZXNjLktleURhdGFbMF0gPT0gMHhERCkgJiYgKHBFYXAtPktleURlc2MuS2V5RGF0YVsyXSA9PSAweDAwKSAmJiAocEVhcC0+S2V5RGVzYy5LZXlEYXRhWzNdID09IDB4MEYpCisJCQkJJiYgKHBFYXAtPktleURlc2MuS2V5RGF0YVs0XSA9PSAweEFDKSAmJiAocEVhcC0+S2V5RGVzYy5LZXlEYXRhWzVdID09IDB4MDIpKQorCQkJeworCQkJCXBBZGRyCQkJPSBwRWFwLT5LZXlEZXNjLktleURhdGEgKyA4OwkJLy8gVHBlKDEpLCBMZW4oMSksIE9VSSgzKSwgRGF0YVR5cGUoMSksIFJlc2VydmVkKDIpCisJCQkJcFNUQUtleQkJCT0gcEVhcC0+S2V5RGVzYy5LZXlEYXRhICsgMTQ7CS8vIFRwZSgxKSwgTGVuKDEpLCBPVUkoMyksIERhdGFUeXBlKDEpLCBSZXNlcnZlZCgyKSwgU1RBS2V5X01hY19BZGRyKDYpCisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFJlY2VpdmUgU1RBS2V5IE1lc3NhZ2UtMSBmcm9tICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IExlbj0lZCwgS2V5RGF0YUxlbj0lZFxuIiwKKwkJCQkJcEFkZHJbMF0sIHBBZGRyWzFdLCBwQWRkclsyXSwgcEFkZHJbM10sIHBBZGRyWzRdLCBwQWRkcls1XSwgTGVuLCBwRWFwLT5LZXlEZXNjLktleURhdGFbMV0pKTsKKworCQkJCWJTVEFLZXlGcmFtZSA9IFRSVUU7CisJCQl9CisjZW5kaWYKKworCQl9CisJCWVsc2UgaWYgKExlbiA+PSAoTEVOR1RIXzgwMl8xMSArIDYgKyAyICsgMiArIHNpemVvZihFQVBPTF9QQUNLRVQpIC0gTUFYX0xFTl9PRl9SU05JRSkpCisJCXsKKwkJCVJUTVBNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLkRsc1JlcGxheUNvdW50ZXIsIHBFYXAtPktleURlc2MuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFNuaWZmIHJlcGxheSBjb3VudGVyIDIoJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4KSBMZW49JWxkLCBLZXlEYXRhTGVuPSVkXG4iLAorCQkJCXBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbMF0sIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbMV0sIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXJbMl0sCisJCQkJcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlclszXSwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlcls0XSwJcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlcls1XSwKKwkJCQlwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzZdLCBwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyWzddLCBMZW4sIHBFYXAtPktleURlc2MuS2V5RGF0YVsxXSkpOworCisJCX0KKwl9CisKKwkvLyBJZiB0aW1lb3V0IHZhbHVlIGlzIGVxdWFsZWQgdG8gemVybywgaXQgbWVhbnMgYWx3YXlzIG5vdCBiZSB0aW1lb3V0LgorCS8vIHVwZGF0ZSBsb2NhbCBkbHMgdGFibGUgZW50cnkKKwlmb3IgKGk9IDA7IGkgPCBNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpKyspCisJeworCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgTUFDX0FERFJfRVFVQUwocEFkZHIsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQl7CisJCQlpZiAoYlNUQUtleUZyYW1lKQorCQkJeworCQkJCVBNQUNfVEFCTEVfRU5UUlkgcEVudHJ5OworCisJCQkJLy8gU1RBS2V5IGZyYW1lLCBhZGQgcGFpcndpc2Uga2V5IHRhYmxlCisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX0ZJTklTSDsKKwkJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCisJCQkJUGFpcndpc2VLZXkuS2V5TGVuID0gTEVOX1RLSVBfRUs7CisJCQkJTmRpc01vdmVNZW1vcnkoUGFpcndpc2VLZXkuS2V5LCAmcFNUQUtleVswXSwgTEVOX1RLSVBfRUspOworCQkJCU5kaXNNb3ZlTWVtb3J5KFBhaXJ3aXNlS2V5LlR4TWljLCAmcFNUQUtleVsxNl0sIExFTl9US0lQX1JYTUlDSyk7CisJCQkJTmRpc01vdmVNZW1vcnkoUGFpcndpc2VLZXkuUnhNaWMsICZwU1RBS2V5WzI0XSwgTEVOX1RLSVBfVFhNSUNLKTsKKworCQkJCVBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnOworCisJCQkJcEVudHJ5ID0gRGxzRW50cnlUYWJsZUxvb2t1cChwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIsIFRSVUUpOworCQkJCS8vQXNpY0FkZEtleUVudHJ5KHBBZCwgKFVTSE9SVCkoaSArIDIpLCBCU1MwLCAwLCAmUGFpcndpc2VLZXksIFRSVUUsIFRSVUUpOwkvLyByZXNlcnZlIDAgZm9yIG11bHRpY2FzdCwgMSBmb3IgdW5pY2FzdAorCQkJCS8vQXNpY1VwZGF0ZVJ4V0NJRFRhYmxlKHBBZCwgKFVTSE9SVCkoaSArIDIpLCBwQWRkcik7CisJCQkJLy8gQWRkIFBhaXItd2lzZSBrZXkgdG8gQXNpYworI2lmZGVmIFJUMjg3MAorLy9CZW5zb24gbW9kaWZpZWQgZm9yIFVTQiBpbnRlcmZhY2UsIGF2b2lkIGluIGludGVycnVwdCB3aGVuIHdyaXRlIGtleSwgMjAwODA3MjQgLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVF9BRERfUEFJUldJU0VfS0VZX0VOVFJZIEtleUluZm87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09QWV9NQUNfQUREUihLZXlJbmZvLk1hY0FkZHIscEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5SW5mby5NYWNUYWJNYXRjaFdDSUQ9cEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZLZXlJbmZvLkNpcGhlcktleSwgICZQYWlyd2lzZUtleSxzaXplb2YoQ0lQSEVSX0tFWSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgUlRfQ01EX1NFVF9LRVlfVEFCTEUsICZLZXlJbmZvLCBzaXplb2YoUlRfQUREX1BBSVJXSVNFX0tFWV9FTlRSWSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTUFDX1RBQkxFX0VOVFJZIHBETFNFbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRExTRW50cnkgPSBEbHNFbnRyeVRhYmxlTG9va3VwKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkciwgVFJVRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERMU0VudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGc9UGFpcndpc2VLZXkuQ2lwaGVyQWxnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgUlRfQ01EX1NFVF9SWF9XQ0lEX1RBQkxFLCBwRExTRW50cnksIHNpemVvZihNQUNfVEFCTEVfRU5UUlkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorLy9CZW5zb24gbW9kaWZpZWQgZm9yIFVTQiBpbnRlcmZhY2UsIGF2b2lkIGluIGludGVycnVwdCB3aGVuIHdyaXRlIGtleSwgMjAwODA3MjQgPC0tCisjZW5kaWYgLy8gUlQyODcwIC8vCisJCQkJTmRpc01vdmVNZW1vcnkoJnBFbnRyeS0+UGFpcndpc2VLZXksICZQYWlyd2lzZUtleSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFJlY2VpdmUgU1RBS2V5IE1lc3NhZ2UtMSAoUGVlciBTVEEgTUFDIEFkZHJlc3MgU1RBS2V5KSBcbiIpKTsKKworCQkJCVJUTVBTZW5kU1RBS2V5SGFuZFNoYWtlKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIEZpbmlzaCBTVEFLZXkgaGFuZHNoYWtlIHByb2NlZHVyZSAoSW5pdGlhdG9yIHNpZGUpXG4iKSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8gRGF0YSBmcmFtZSwgdXBkYXRlIHRpbWVvdXQgdmFsdWUKKwkJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpCisJCQkJeworCQkJCQlwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5Db3VudERvd25UaW1lciA9IHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQ7CisJCQkJCS8vQXNpY1VwZGF0ZVJ4V0NJRFRhYmxlKHBBZCwgKFVTSE9SVCkoaSArIDIpLCBwQWRkcik7CisJCQkJfQorCQkJfQorCisJCQliRmluZEVudHJ5ID0gVFJVRTsKKwkJfQorCX0KKworCS8vIHVwZGF0ZSBwZWVyIGRscyB0YWJsZSBlbnRyeQorCWZvciAoaT1NQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJeworCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgTUFDX0FERFJfRVFVQUwocEFkZHIsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpKQorCQl7CisJCQlpZiAoYlNUQUtleUZyYW1lKQorCQkJeworCQkJCVBNQUNfVEFCTEVfRU5UUlkgcEVudHJ5ID0gTlVMTDsKKworCQkJCS8vIFNUQUtleSBmcmFtZSwgYWRkIHBhaXJ3aXNlIGtleSB0YWJsZSwgYW5kIHNlbmQgU1RBa2V5IE1zZy0yCisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID0gRExTX0ZJTklTSDsKKwkJCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCisJCQkJUGFpcndpc2VLZXkuS2V5TGVuID0gTEVOX1RLSVBfRUs7CisJCQkJTmRpc01vdmVNZW1vcnkoUGFpcndpc2VLZXkuS2V5LCAmcFNUQUtleVswXSwgTEVOX1RLSVBfRUspOworCQkJCU5kaXNNb3ZlTWVtb3J5KFBhaXJ3aXNlS2V5LlR4TWljLCAmcFNUQUtleVsxNl0sIExFTl9US0lQX1JYTUlDSyk7CisJCQkJTmRpc01vdmVNZW1vcnkoUGFpcndpc2VLZXkuUnhNaWMsICZwU1RBS2V5WzI0XSwgTEVOX1RLSVBfVFhNSUNLKTsKKworCQkJCVBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnOworCisJCQkJcEVudHJ5ID0gRGxzRW50cnlUYWJsZUxvb2t1cChwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIsIFRSVUUpOworCQkJCS8vQXNpY0FkZEtleUVudHJ5KHBBZCwgKFVTSE9SVCkoaSArIDIpLCBCU1MwLCAwLCAmUGFpcndpc2VLZXksIFRSVUUsIFRSVUUpOwkvLyByZXNlcnZlIDAgZm9yIG11bHRpY2FzdCwgMSBmb3IgdW5pY2FzdAorCQkJCS8vQXNpY1VwZGF0ZVJ4V0NJRFRhYmxlKHBBZCwgKFVTSE9SVCkoaSArIDIpLCBwQWRkcik7CisJCQkJLy8gQWRkIFBhaXItd2lzZSBrZXkgdG8gQXNpYworI2lmZGVmIFJUMjg3MAorLy9CZW5zb24gbW9kaWZpZWQgZm9yIFVTQiBpbnRlcmZhY2UsIGF2b2lkIGluIGludGVycnVwdCB3aGVuIHdyaXRlIGtleSwgMjAwODA3MjQgLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVF9BRERfUEFJUldJU0VfS0VZX0VOVFJZIEtleUluZm87CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09QWV9NQUNfQUREUihLZXlJbmZvLk1hY0FkZHIscEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5SW5mby5NYWNUYWJNYXRjaFdDSUQ9cEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjVGFiTWF0Y2hXQ0lEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZLZXlJbmZvLkNpcGhlcktleSwgICZQYWlyd2lzZUtleSxzaXplb2YoQ0lQSEVSX0tFWSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgUlRfQ01EX1NFVF9LRVlfVEFCTEUsICZLZXlJbmZvLCBzaXplb2YoUlRfQUREX1BBSVJXSVNFX0tFWV9FTlRSWSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTUFDX1RBQkxFX0VOVFJZIHBETFNFbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRExTRW50cnkgPSBEbHNFbnRyeVRhYmxlTG9va3VwKHBBZCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkciwgVFJVRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERMU0VudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGc9UGFpcndpc2VLZXkuQ2lwaGVyQWxnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUVVNCRW5xdWV1ZUludGVybmFsQ21kKHBBZCwgUlRfQ01EX1NFVF9SWF9XQ0lEX1RBQkxFLCBwRExTRW50cnksIHNpemVvZihNQUNfVEFCTEVfRU5UUlkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorLy9CZW5zb24gbW9kaWZpZWQgZm9yIFVTQiBpbnRlcmZhY2UsIGF2b2lkIGluIGludGVycnVwdCB3aGVuIHdyaXRlIGtleSwgMjAwODA3MjQgPC0tCisjZW5kaWYgLy8gUlQyODcwIC8vCisJCQkJTmRpc01vdmVNZW1vcnkoJnBFbnRyeS0+UGFpcndpc2VLZXksICZQYWlyd2lzZUtleSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIFJlY2VpdmUgU1RBS2V5IE1lc3NhZ2UtMSAoSW5pdGlhdG9yIFNUQSBNQUMgQWRkcmVzcyBTVEFLZXkpXG4iKSk7CisKKwkJCQkvLyBJZiBzdXBwb3J0IFdQQSBvciBXUEEyLCBzdGFydCBTVEFLZXkgaGFuZCBzaGFrZSwKKwkJCQkvLyBJZiBmYWlsZWQgaGFuZCBzaGFrZSwganVzdCB0ZWFyIGRvd24gcGVlciBETFMKKwkJCQlpZiAoUlRNUFNlbmRTVEFLZXlIYW5kU2hha2UocEFkLCBwQWRkcikgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCQl7CisJCQkJCU1MTUVfRExTX1JFUV9TVFJVQ1QJTWxtZURsc1JlcTsKKwkJCQkJVVNIT1JUCQkJCXJlYXNvbiA9IFJFQVNPTl9RT1NfQ0lQSEVSX05PVF9TVVBQT1JUOworCisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkCT0gRkFMU0U7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJCQlEbHNQYXJtRmlsbChwQWQsICZNbG1lRGxzUmVxLCAmcEFkLT5TdGFDZmcuRExTRW50cnlbaV0sIHJlYXNvbik7CisJCQkJCU1sbWVFbnF1ZXVlKHBBZCwgRExTX1NUQVRFX01BQ0hJTkUsIE1UMl9NTE1FX0RMU19URUFSX0RPV04sIHNpemVvZihNTE1FX0RMU19SRVFfU1RSVUNUKSwgJk1sbWVEbHNSZXEpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRMUyAtIEZpbmlzaCBTVEFLZXkgaGFuZHNoYWtlIHByb2NlZHVyZSAoUGVlciBzaWRlKVxuIikpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBEYXRhIGZyYW1lLCB1cGRhdGUgdGltZW91dCB2YWx1ZQorCQkJCWlmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkKKwkJCQl7CisJCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLkNvdW50RG93blRpbWVyID0gcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVGltZU91dDsKKwkJCQl9CisJCQl9CisKKwkJCWJGaW5kRW50cnkgPSBUUlVFOworCQl9CisJfQorCisKKwlyZXR1cm4gYlNUQUtleUZyYW1lOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZQlEZXNjcmlwdGlvbjoKKwkJQ2hlY2sgaWYgdGhlIGZyYW1lIGNhbiBiZSBzZW50IHRocm91Z2ggRExTIGRpcmVjdCBsaW5rIGludGVyZmFjZQorCisJQXJndW1lbnRzOgorCQlwQWQJCVBvaW50ZXIJdG8gYWRhcHRlcgorCisJUmV0dXJuIFZhbHVlOgorCQlETFMgZW50cnkgaW5kZXgKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQJUlRNUENoZWNrRExTRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwREEpCit7CisJSU5UIHJ2YWwgPSAtMTsKKwlJTlQJaTsKKworCWlmICghcEFkLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJCXJldHVybiBydmFsOworCisJaWYgKCFJTkZSQV9PTihwQWQpKQorCQlyZXR1cm4gcnZhbDsKKworCWRveworCQkvLyBjaGVjayBsb2NhbCBkbHMgdGFibGUgZW50cnkKKwkJZm9yIChpPTA7IGk8TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaSsrKQorCQl7CisJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKSAmJgorCQkJCU1BQ19BRERSX0VRVUFMKHBEQSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCQl7CisJCQkJcnZhbCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvLyBjaGVjayBwZWVyIGRscyB0YWJsZSBlbnRyeQorCQlmb3IgKGk9TUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCQl7CisJCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKSAmJgorCQkJCU1BQ19BRERSX0VRVUFMKHBEQSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCQl7CisJCQkJcnZhbCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IHdoaWxlIChGQUxTRSk7CisKKwlyZXR1cm4gcnZhbDsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFJUTVBTZW5kRExTVGVhckRvd25GcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiAgUFVDSEFSICAgICAgICAgIHBEQSkKK3sKKwlQVUNIQVIJCQlwT3V0QnVmZmVyID0gTlVMTDsKKwlORElTX1NUQVRVUwkJTlN0YXR1czsKKwlIRUFERVJfODAyXzExCURsc1RlYXJEb3duSGRyOworCVVMT05HCQkJRnJhbWVMZW4gPSAwOworCVVTSE9SVAkJCVJlYXNvbiA9IFJFQVNPTl9RT1NfUVNUQV9MRUFWSU5HX1FCU1M7CisJVUNIQVIJCQlDYXRlZ29yeSA9IENBVEVHT1JZX0RMUzsKKwlVQ0hBUgkJCUFjdGlvbiA9IEFDVElPTl9ETFNfVEVBUkRPV047CisJVUNIQVIJCQlpID0gMDsKKworCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpIHx8CisJCVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkKKwkJcmV0dXJuOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2VuZCBETFMgVGVhckRvd24gRnJhbWUgXG4iKSk7CisKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwoIkFTU09DIC0gUlRNUFNlbmRETFNUZWFyRG93bkZyYW1lKCkgYWxsb2NhdGUgbWVtb3J5IGZhaWxlZCBcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCUFjdEhlYWRlckluaXQocEFkLCAmRGxzVGVhckRvd25IZHIsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwJCQkJJkZyYW1lTGVuLAorCQkJCQlzaXplb2YoSEVBREVSXzgwMl8xMSksCQkmRGxzVGVhckRvd25IZHIsCisJCQkJCTEsCQkJCQkJCSZDYXRlZ29yeSwKKwkJCQkJMSwJCQkJCQkJJkFjdGlvbiwKKwkJCQkJNiwJCQkJCQkJcERBLAorCQkJCQk2LAkJCQkJCQlwQWQtPkN1cnJlbnRBZGRyZXNzLAorCQkJCQkyLAkJCQkJCQkmUmVhc29uLAorCQkJCQlFTkRfT0ZfQVJHUyk7CisKKwlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCisJLy8gUmVtb3ZlIGtleSBpbiBsb2NhbCBkbHMgdGFibGUgZW50cnkKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTV9PRl9JTklUX0RMU19FTlRSWTsgaSsrKQorCXsKKwkJaWYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmIChwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5TdGF0dXMgPT0gRExTX0ZJTklTSCkKKwkJCSYmIE1BQ19BRERSX0VRVUFMKHBEQSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcikpCisJCXsKKwkJCU1hY1RhYmxlRGVsZXRlRGxzRW50cnkocEFkLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNUYWJNYXRjaFdDSUQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHIpOworCQl9CisJfQorCisJLy8gUmVtb3ZlIGtleSBpbiBwZWVyIGRscyB0YWJsZSBlbnRyeQorCWZvciAoaT1NQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJeworCQlpZiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKQorCQkJJiYgTUFDX0FERFJfRVFVQUwocERBLCBwQWQtPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKSkKKwkJeworCQkJTWFjVGFibGVEZWxldGVEbHNFbnRyeShwQWQsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY1RhYk1hdGNoV0NJRCwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCX0KKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZW5kIERMUyBUZWFyRG93biBGcmFtZSBhbmQgcmVtb3ZlIGtleSBpbiAoaT0lZCkgXG4iLCBpKSk7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworTkRJU19TVEFUVVMgUlRNUFNlbmRTVEFLZXlSZXF1ZXN0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBEQSkKK3sKKwlVQ0hBUgkJCQlIZWFkZXI4MDJfM1sxNF07CisJTkRJU19TVEFUVVMJCQlOU3RhdHVzOworCVVMT05HCQkJCUZyYW1lTGVuID0gMDsKKwlFQVBPTF9QQUNLRVQJCVBhY2tldDsKKwlVQ0hBUgkJCQlNaWNbMTZdOworCVVDSEFSCQkJCWRpZ2VzdFs4MF07CisJUFVDSEFSCQkJCXBPdXRCdWZmZXIgPSBOVUxMOworCVBORElTX1BBQ0tFVAkJcE5kaXNQYWNrZXQ7CisJVUNIQVIJCQkJdGVtcFs2NF07CisJVUNIQVIJCQkJRGxzUFRLWzgwXTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiRExTIC0gUlRNUFNlbmRTVEFLZXlSZXF1ZXN0KCkgdG8gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIHBEQVswXSwgcERBWzFdLCBwREFbMl0sIHBEQVszXSwgcERBWzRdLCBwREFbNV0pKTsKKworCXBBZC0+U2VxdWVuY2UgKys7CisJTUFLRV84MDJfM19IRUFERVIoSGVhZGVyODAyXzMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkN1cnJlbnRBZGRyZXNzLCBFQVBPTCk7CisKKwkvLyBaZXJvIG1lc3NhZ2UgYm9keQorCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKKwlQYWNrZXQuUHJvVmVyID0gRUFQT0xfVkVSOworCVBhY2tldC5Qcm9UeXBlICAgID0gRUFQT0xLZXk7CisJUGFja2V0LkJvZHlfTGVuWzFdICA9IHNpemVvZihLRVlfREVTQ1JJUFRFUikgLSBNQVhfTEVOX09GX1JTTklFICsgNiArIE1BQ19BRERSX0xFTjsJCS8vIGRhdGEgZmllbGQgY29udGFpbiBLREUgYW5kUGVlciBNQUMgYWRkcmVzcworCisJLy8gU1RBS2V5IE1lc3NhZ2UgaXMgYXMgRUFQT0wtS2V5KDEsMSwwLDAsRy8wLDAsMCwgTUlDLCAwLFBlZXIgTUFDIEtERSkKKwlpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykpCisgICAgeworICAgICAgICBQYWNrZXQuS2V5RGVzYy5UeXBlID0gV1BBMV9LRVlfREVTQzsKKyAgICB9CisgICAgZWxzZSBpZiAoKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8IChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSkKKyAgICB7CisgICAgICAgIFBhY2tldC5LZXlEZXNjLlR5cGUgPSBXUEEyX0tFWV9ERVNDOworICAgIH0KKworCS8vIEtleSBkZXNjcmlwdG9yIHZlcnNpb24KKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPQorCQkoKChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpIHx8IChwQWQtPlN0YUNmZy5Hcm91cENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSkgPyAoREVTQ19UWVBFX0FFUykgOiAoREVTQ19UWVBFX1RLSVApKTsKKworCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5TWljCT0gMTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLlNlY3VyZQk9IDE7CisJUGFja2V0LktleURlc2MuS2V5SW5mby5SZXF1ZXN0CT0gMTsKKworCVBhY2tldC5LZXlEZXNjLktleURhdGFMZW5bMV0JPSAxMjsKKworCS8vIHVzZSBvdXIgb3duIE9VSSB0byBkaXN0aW5ndWlzaCBwcm9wcmlldGFyeSB3aXRoIHN0YW5kYXJkLgorCVBhY2tldC5LZXlEZXNjLktleURhdGFbMF0JCT0gMHhERDsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzFdCQk9IDB4MEE7CisJUGFja2V0LktleURlc2MuS2V5RGF0YVsyXQkJPSAweDAwOworCVBhY2tldC5LZXlEZXNjLktleURhdGFbM10JCT0gMHgwQzsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzRdCQk9IDB4NDM7CisJUGFja2V0LktleURlc2MuS2V5RGF0YVs1XQkJPSAweDAzOworCU5kaXNNb3ZlTWVtb3J5KCZQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzZdLCBwREEsIE1BQ19BRERSX0xFTik7CisKKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5SZXBsYXlDb3VudGVyLCBwQWQtPlN0YUNmZy5EbHNSZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIEFsbG9jYXRlIGJ1ZmZlciBmb3IgdHJhbnNtaXR0aW5nIG1lc3NhZ2UKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOworCWlmIChOU3RhdHVzCSE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiBOU3RhdHVzOworCisJLy8gUHJlcGFyZSBFQVBPTCBmcmFtZSBmb3IgTUlDIGNhbGN1bGF0aW9uCisJLy8gQmUgY2FyZWZ1bCwgb25seSBFQVBPTCBmcmFtZSBpcyBjb3VudGVkIGZvciBNSUMgY2FsY3VsYXRpb24KKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorCQkgICAgICAgICAgICAgIFBhY2tldC5Cb2R5X0xlblsxXSArIDQsICAgICZQYWNrZXQsCisJCSAgICAgICAgICAgICAgRU5EX09GX0FSR1MpOworCisJLy8gdXNlIHByb3ByaWV0YXJ5IFBUSworCU5kaXNaZXJvTWVtb3J5KHRlbXAsIDY0KTsKKwlOZGlzTW92ZU1lbW9yeSh0ZW1wLCAiSUVFRTgwMi4xMSBXSVJFTEVTUyBBQ0NFU1MgUE9JTlQiLCAzMik7CisJV3BhQ291bnRQVEsocEFkLCB0ZW1wLCB0ZW1wLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgdGVtcCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRGxzUFRLLCBMRU5fUFRLKTsKKworCS8vIGNhbGN1bGF0ZSBNSUMKKwlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQkvLyBBRVMKKwkJTmRpc1plcm9NZW1vcnkoZGlnZXN0LAlzaXplb2YoZGlnZXN0KSk7CisJCUhNQUNfU0hBMShwT3V0QnVmZmVyLCBGcmFtZUxlbiwgRGxzUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLktleU1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsKKwkJTmRpc1plcm9NZW1vcnkoTWljLAlzaXplb2YoTWljKSk7CisJCWhtYWNfbWQ1KERsc1BUSywgTEVOX0VBUF9NSUNLLCBwT3V0QnVmZmVyLCBGcmFtZUxlbiwgTWljKTsKKwkJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuS2V5TWljLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKworCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisJICAgICAgICAgICAgICAgICAgc2l6ZW9mKEhlYWRlcjgwMl8zKSwJSGVhZGVyODAyXzMsCisJCSAgICAgICAgICAgICAgUGFja2V0LkJvZHlfTGVuWzFdICsgNCwJJlBhY2tldCwKKwkJICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisKKwlOU3RhdHVzID0gUlRNUEFsbG9jYXRlTmRpc1BhY2tldChwQWQsICZwTmRpc1BhY2tldCwgTlVMTCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCWlmIChOU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlSVE1QX1NFVF9QQUNLRVRfV0NJRChwTmRpc1BhY2tldCwgQlNTSURfV0NJRCk7CisJCVNUQVNlbmRQYWNrZXQocEFkLCBwTmRpc1BhY2tldCk7CisJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgRkFMU0UsIE5VTV9PRl9UWF9SSU5HLCBNQVhfVFhfUFJPQ0VTUyk7CisJfQorCisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBTZW5kU1RBS2V5UmVxdWVzdC0gU2VuZCBTVEFLZXkgcmVxdWVzdCAoTlN0YXR1cz0leCwgRnJhbWVMZW49JWxkKVxuIiwgTlN0YXR1cywgRnJhbWVMZW4pKTsKKworCXJldHVybiBOU3RhdHVzOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK05ESVNfU1RBVFVTIFJUTVBTZW5kU1RBS2V5SGFuZFNoYWtlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBEQSkKK3sKKwlVQ0hBUgkJCQlIZWFkZXI4MDJfM1sxNF07CisJTkRJU19TVEFUVVMJCQlOU3RhdHVzOworCVVMT05HCQkJCUZyYW1lTGVuID0gMDsKKwlFQVBPTF9QQUNLRVQJCVBhY2tldDsKKwlVQ0hBUgkJCQlNaWNbMTZdOworCVVDSEFSCQkJCWRpZ2VzdFs4MF07CisJUFVDSEFSCQkJCXBPdXRCdWZmZXIgPSBOVUxMOworCVBORElTX1BBQ0tFVAkJcE5kaXNQYWNrZXQ7CisJVUNIQVIJCQkJdGVtcFs2NF07CisJVUNIQVIJCQkJRGxzUFRLWzgwXTsJCQkvLyBEdWUgdG8gZGlydmVyIGNhbiBub3QgZ2V0IFBUSywgdXNlIHByb3ByaWV0YXJ5IFBUSworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJETFMgLSBSVE1QU2VuZFNUQUtleUhhbmRTaGFrZSgpIHRvICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBwREFbMF0sIHBEQVsxXSwgcERBWzJdLCBwREFbM10sIHBEQVs0XSwgcERBWzVdKSk7CisKKwlwQWQtPlNlcXVlbmNlICsrOworCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRUFQT0wpOworCisJLy8gWmVybyBtZXNzYWdlIGJvZHkKKwlOZGlzWmVyb01lbW9yeSgmUGFja2V0LCBzaXplb2YoUGFja2V0KSk7CisJUGFja2V0LlByb1ZlciA9IEVBUE9MX1ZFUjsKKwlQYWNrZXQuUHJvVHlwZSAgICA9IEVBUE9MS2V5OworCVBhY2tldC5Cb2R5X0xlblsxXSAgPSBzaXplb2YoS0VZX0RFU0NSSVBURVIpIC0gTUFYX0xFTl9PRl9SU05JRSArIDYgKyBNQUNfQUREUl9MRU47CQkvLyBkYXRhIGZpZWxkIGNvbnRhaW4gS0RFIGFuZCBQZWVyIE1BQyBhZGRyZXNzCisKKwkvLyBTVEFLZXkgTWVzc2FnZSBpcyBhcyBFQVBPTC1LZXkoMSwxLDAsMCxHLzAsMCwwLCBNSUMsIDAsUGVlciBNQUMgS0RFKQorCWlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fCAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSkKKyAgICB7CisgICAgICAgIFBhY2tldC5LZXlEZXNjLlR5cGUgPSBXUEExX0tFWV9ERVNDOworICAgIH0KKyAgICBlbHNlIGlmICgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spKQorICAgIHsKKyAgICAgICAgUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTJfS0VZX0RFU0M7CisgICAgfQorCisJLy8gS2V5IGRlc2NyaXB0b3IgdmVyc2lvbgorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9CisJCSgoKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkgfHwgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpKSA/IChERVNDX1RZUEVfQUVTKSA6IChERVNDX1RZUEVfVEtJUCkpOworCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlNaWMJPSAxOworCVBhY2tldC5LZXlEZXNjLktleUluZm8uU2VjdXJlCT0gMTsKKworCVBhY2tldC5LZXlEZXNjLktleURhdGFMZW5bMV0JPSAxMjsKKworCS8vIHVzZSBvdXIgb3duIE9VSSB0byBkaXN0aW5ndWlzaCBwcm9wcmlldGFyeSB3aXRoIHN0YW5kYXJkLgorCVBhY2tldC5LZXlEZXNjLktleURhdGFbMF0JCT0gMHhERDsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzFdCQk9IDB4MEE7CisJUGFja2V0LktleURlc2MuS2V5RGF0YVsyXQkJPSAweDAwOworCVBhY2tldC5LZXlEZXNjLktleURhdGFbM10JCT0gMHgwQzsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzRdCQk9IDB4NDM7CisJUGFja2V0LktleURlc2MuS2V5RGF0YVs1XQkJPSAweDAzOworCU5kaXNNb3ZlTWVtb3J5KCZQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzZdLCBwREEsIE1BQ19BRERSX0xFTik7CisKKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5SZXBsYXlDb3VudGVyLCBwQWQtPlN0YUNmZy5EbHNSZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIEFsbG9jYXRlIGJ1ZmZlciBmb3IgdHJhbnNtaXR0aW5nIG1lc3NhZ2UKKwlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOworCWlmIChOU3RhdHVzCSE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiBOU3RhdHVzOworCisJLy8gUHJlcGFyZSBFQVBPTCBmcmFtZSBmb3IgTUlDIGNhbGN1bGF0aW9uCisJLy8gQmUgY2FyZWZ1bCwgb25seSBFQVBPTCBmcmFtZSBpcyBjb3VudGVkIGZvciBNSUMgY2FsY3VsYXRpb24KKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorCQkgICAgICAgICAgICAgIFBhY2tldC5Cb2R5X0xlblsxXSArIDQsICAgICZQYWNrZXQsCisJCSAgICAgICAgICAgICAgRU5EX09GX0FSR1MpOworCisJLy8gdXNlIHByb3ByaWV0YXJ5IFBUSworCU5kaXNaZXJvTWVtb3J5KHRlbXAsIDY0KTsKKwlOZGlzTW92ZU1lbW9yeSh0ZW1wLCAiSUVFRTgwMi4xMSBXSVJFTEVTUyBBQ0NFU1MgUE9JTlQiLCAzMik7CisJV3BhQ291bnRQVEsocEFkLCB0ZW1wLCB0ZW1wLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgdGVtcCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRGxzUFRLLCBMRU5fUFRLKTsKKworCS8vIGNhbGN1bGF0ZSBNSUMKKwlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQkvLyBBRVMKKwkJTmRpc1plcm9NZW1vcnkoZGlnZXN0LAlzaXplb2YoZGlnZXN0KSk7CisJCUhNQUNfU0hBMShwT3V0QnVmZmVyLCBGcmFtZUxlbiwgRGxzUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLktleU1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsKKwkJTmRpc1plcm9NZW1vcnkoTWljLAlzaXplb2YoTWljKSk7CisJCWhtYWNfbWQ1KERsc1BUSywgTEVOX0VBUF9NSUNLLCBwT3V0QnVmZmVyLCBGcmFtZUxlbiwgTWljKTsKKwkJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuS2V5TWljLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKworCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisJICAgICAgICAgICAgICAgICAgc2l6ZW9mKEhlYWRlcjgwMl8zKSwJSGVhZGVyODAyXzMsCisJCSAgICAgICAgICAgICAgUGFja2V0LkJvZHlfTGVuWzFdICsgNCwJJlBhY2tldCwKKwkJICAgICAgICAgICAgICBFTkRfT0ZfQVJHUyk7CisKKwlOU3RhdHVzID0gUlRNUEFsbG9jYXRlTmRpc1BhY2tldChwQWQsICZwTmRpc1BhY2tldCwgTlVMTCwgMCwgcE91dEJ1ZmZlciwgRnJhbWVMZW4pOworCWlmIChOU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJeworCQlSVE1QX1NFVF9QQUNLRVRfV0NJRChwTmRpc1BhY2tldCwgQlNTSURfV0NJRCk7CisJCVNUQVNlbmRQYWNrZXQocEFkLCBwTmRpc1BhY2tldCk7CisJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgRkFMU0UsIE5VTV9PRl9UWF9SSU5HLCBNQVhfVFhfUFJPQ0VTUyk7CisJfQorCisJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBTZW5kU1RBS2V5SGFuZFNoYWtlLSBTZW5kIFNUQUtleSBNZXNzYWdlLTIgKE5TdGF0dXM9JXgsIEZyYW1lTGVuPSVsZClcbiIsIE5TdGF0dXMsIEZyYW1lTGVuKSk7CisKKwlyZXR1cm4gTlN0YXR1czsKK30KKworVk9JRCBEbHNUaW1lb3V0QWN0aW9uKAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMSwKKwlJTiBQVk9JRCBGdW5jdGlvbkNvbnRleHQsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMyLAorCUlOIFBWT0lEIFN5c3RlbVNwZWNpZmljMykKK3sKKwlNTE1FX0RMU19SRVFfU1RSVUNUCQlNbG1lRGxzUmVxOworCVVTSE9SVAkJCQkJcmVhc29uOworCVBSVF84MDJfMTFfRExTCQkJcERMUyA9IChQUlRfODAyXzExX0RMUylGdW5jdGlvbkNvbnRleHQ7CisJUFJUTVBfQURBUFRFUgkJCXBBZCA9IHBETFMtPnBBZDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkRsc1RpbWVvdXQgLSBUZWFyIGRvd24gRExTIGxpbmtzICglMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeClcbiIsCisJCXBETFMtPk1hY0FkZHJbMF0sIHBETFMtPk1hY0FkZHJbMV0sIHBETFMtPk1hY0FkZHJbMl0sIHBETFMtPk1hY0FkZHJbM10sIHBETFMtPk1hY0FkZHJbNF0sIHBETFMtPk1hY0FkZHJbNV0pKTsKKworCWlmICgocERMUykgJiYgKHBETFMtPlZhbGlkKSkKKwl7CisJCXJlYXNvbgkJCT0gUkVBU09OX1FPU19SRVFVRVNUX1RJTUVPVVQ7CisJCXBETFMtPlZhbGlkCQk9IEZBTFNFOworCQlwRExTLT5TdGF0dXMJPSBETFNfTk9ORTsKKwkJRGxzUGFybUZpbGwocEFkLCAmTWxtZURsc1JlcSwgcERMUywgcmVhc29uKTsKKwkJTWxtZUVucXVldWUocEFkLCBETFNfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRExTX1RFQVJfRE9XTiwgc2l6ZW9mKE1MTUVfRExTX1JFUV9TVFJVQ1QpLCAmTWxtZURsc1JlcSk7CisJCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKwl9Cit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitEZXNjcmlwdGlvbiA6IGJlY2F1c2UgRExTIGFuZCBDTEkgc2hhcmUgdGhlIHNhbWUgV0NJRCB0YWJsZSBpbiBBU0lDLgorTWVzaCBlbnRyeSBhbHNvIGluc2VydCB0byBwQWQtPk1hY1RhYi5jb250ZW50W10uICBTdWNoIGlzIG1hcmtlZCBhcyBWYWxpZEFzRGxzID0gVFJVRS4KK0Fsc28gZmlsbHMgdGhlIHBhaXJ3aXNlIGtleS4KK0JlY2F1c2UgZnJvbnQgTUFYX0FJRF9CQSBlbnRyaWVzIGhhdmUgZGlyZWN0IG1hcHBpbmcgdG8gQkFFbnRyeSwgd2hpY2ggaXMgb25seSB1c2VkIGFzIENMSS4gU28gd2UgaW5zZXJ0IERscworZnJvbSBpbmRleCBNQVhfQUlEX0JBLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK01BQ19UQUJMRV9FTlRSWSAqTWFjVGFibGVJbnNlcnREbHNFbnRyeSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgUFVDSEFSCXBBZGRyLAorCUlOICBVSU5UCURsc0VudHJ5SWR4KQoreworCVBNQUNfVEFCTEVfRU5UUlkgcEVudHJ5ID0gTlVMTDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT0+IE1hY1RhYmxlSW5zZXJ0RGxzRW50cnlcbiIpKTsKKwkvLyBpZiBGVUxMLCByZXR1cm4KKwlpZiAocEFkLT5NYWNUYWIuU2l6ZSA+PSBNQVhfTEVOX09GX01BQ19UQUJMRSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkbworCXsKKwkJaWYoKHBFbnRyeSA9IERsc0VudHJ5VGFibGVMb29rdXAocEFkLCBwQWRkciwgVFJVRSkpICE9IE5VTEwpCisJCQlicmVhazsKKworCQkvLyBhbGxvY2F0ZSBvbmUgTUFDIGVudHJ5CisJCXBFbnRyeSA9IE1hY1RhYmxlSW5zZXJ0RW50cnkocEFkLCBwQWRkciwgRGxzRW50cnlJZHggKyBNSU5fTkVUX0RFVklDRV9GT1JfRExTLCBUUlVFKTsKKwkJaWYgKHBFbnRyeSkKKwkJeworCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbRGxzRW50cnlJZHhdLk1hY1RhYk1hdGNoV0NJRCA9IHBFbnRyeS0+QWlkOworCQkJcEVudHJ5LT5NYXRjaERsc0VudHJ5SWR4ID0gRGxzRW50cnlJZHg7CisJCQlwRW50cnktPkF1dGhNb2RlID0gcEFkLT5TdGFDZmcuQXV0aE1vZGU7CisJCQlwRW50cnktPldlcFN0YXR1cyA9IHBBZC0+U3RhQ2ZnLldlcFN0YXR1czsKKworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWFjVGFibGVJbnNlcnREbHNFbnRyeSAtIGFsbG9jYXRlIGVudHJ5ICMlZCwgVG90YWw9ICVkXG4iLHBFbnRyeS0+QWlkLCBwQWQtPk1hY1RhYi5TaXplKSk7CisKKwkJCS8vIElmIGxlZ2FjeSBXRVAgaXMgdXNlZCwgc2V0IHBhaXItd2lzZSBjaXBoZXJBbGcgaW50byBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBmb3IgdGhpcyBlbnRyeQorCQkJaWYgKChwRW50cnktPlZhbGlkQXNEbHMpICYmIChwRW50cnktPldlcFN0YXR1cyA9PSBOZGlzODAyXzExV0VQRW5hYmxlZCkpCisJCQl7CisJCQkJVUNIQVIgS2V5SWR4ID0gMDsKKwkJCQlVQ0hBUiBDaXBoZXJBbGcgPSAwOworCisJCQkJS2V5SWR4CT0gcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkOworCisJCQkJQ2lwaGVyQWxnIAk9IHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnOworCisJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCisJCQkJCQkJCQkJCUJTUzAsCisJCQkJCQkJCQkJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCwKKwkJCQkJCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcsCisJCQkJCQkJCQkJCXBFbnRyeSk7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZShGQUxTRSk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT09PSBNYWNUYWJsZUluc2VydERsc0VudHJ5XG4iKSk7CisKKwlyZXR1cm4gcEVudHJ5OworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJRGVsZXRlIGFsbCBNZXNoIEVudHJ5IGluIHBBZC0+TWFjVGFiCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBNYWNUYWJsZURlbGV0ZURsc0VudHJ5KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVTSE9SVCB3Y2lkLAorCUlOIFBVQ0hBUiBwQWRkcikKK3sKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT09PiBNYWNUYWJsZURlbGV0ZURsc0VudHJ5XG4iKSk7CisKKwlpZiAoIVZBTElEX1dDSUQod2NpZCkpCisJCXJldHVybiBGQUxTRTsKKworCU1hY1RhYmxlRGVsZXRlRW50cnkocEFkLCB3Y2lkLCBwQWRkcik7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT09PSBNYWNUYWJsZURlbGV0ZURsc0VudHJ5XG4iKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworTUFDX1RBQkxFX0VOVFJZICpEbHNFbnRyeVRhYmxlTG9va3VwKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUglwQWRkciwKKwlJTiBCT09MRUFOCWJSZXNldElkZWxDb3VudCkKK3sKKwlVTE9ORyBIYXNoSWR4OworCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5ID0gTlVMTDsKKworCVJUTVBfU0VNX0xPQ0soJnBBZC0+TWFjVGFiTG9jayk7CisJSGFzaElkeCA9IE1BQ19BRERSX0hBU0hfSU5ERVgocEFkZHIpOworCXBFbnRyeSA9IHBBZC0+TWFjVGFiLkhhc2hbSGFzaElkeF07CisKKwl3aGlsZSAocEVudHJ5KQorCXsKKwkJaWYgKChwRW50cnktPlZhbGlkQXNEbHMgPT0gVFJVRSkKKwkJCSYmIE1BQ19BRERSX0VRVUFMKHBFbnRyeS0+QWRkciwgcEFkZHIpKQorCQl7CisJCQlpZihiUmVzZXRJZGVsQ291bnQpCisJCQkJcEVudHJ5LT5Ob0RhdGFJZGxlQ291bnQgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJZWxzZQorCQkJcEVudHJ5ID0gcEVudHJ5LT5wTmV4dDsKKwl9CisKKwlSVE1QX1NFTV9VTkxPQ0soJnBBZC0+TWFjVGFiTG9jayk7CisJcmV0dXJuIHBFbnRyeTsKK30KKworTUFDX1RBQkxFX0VOVFJZICpEbHNFbnRyeVRhYmxlTG9va3VwQnlXY2lkKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFVDSEFSCXdjaWQsCisJSU4gUFVDSEFSCXBBZGRyLAorCUlOIEJPT0xFQU4JYlJlc2V0SWRlbENvdW50KQoreworCVVMT05HIERMc0luZGV4OworCVBNQUNfVEFCTEVfRU5UUlkgcEN1ckVudHJ5ID0gTlVMTDsKKwlQTUFDX1RBQkxFX0VOVFJZIHBFbnRyeSA9IE5VTEw7CisKKwlpZiAoIVZBTElEX1dDSUQod2NpZCkpCisJCXJldHVybiBOVUxMOworCisJUlRNUF9TRU1fTE9DSygmcEFkLT5NYWNUYWJMb2NrKTsKKworCWRvCisJeworCQlwQ3VyRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFt3Y2lkXTsKKworCQlETHNJbmRleCA9IDB4ZmY7CisJCWlmICgocEN1ckVudHJ5KSAmJiAocEN1ckVudHJ5LT5WYWxpZEFzRGxzPT0gVFJVRSkpCisJCXsKKwkJCURMc0luZGV4ID0gcEN1ckVudHJ5LT5NYXRjaERsc0VudHJ5SWR4OworCQl9CisKKwkJaWYgKERMc0luZGV4ID09IDB4ZmYpCisJCQlicmVhazsKKworCQlpZiAoTUFDX0FERFJfRVFVQUwocEN1ckVudHJ5LT5BZGRyLCBwQWRkcikpCisJCXsKKwkJCWlmKGJSZXNldElkZWxDb3VudCkKKwkJCQlwQ3VyRW50cnktPk5vRGF0YUlkbGVDb3VudCA9IDA7CisJCQlwRW50cnkgPSBwQ3VyRW50cnk7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUoRkFMU0UpOworCisJUlRNUF9TRU1fVU5MT0NLKCZwQWQtPk1hY1RhYkxvY2spOworCisJcmV0dXJuIHBFbnRyeTsKK30KKworSU5UIFNldF9EbHNFbnRyeUluZm9fRGlzcGxheV9Qcm9jKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIFBVQ0hBUiBhcmcpCit7CisJSU5UIGk7CisKKwlwcmludGsoIlxuJS0xOXMlLThzXG4iLCAiTUFDIiwgIlRJTUVPVVRcbiIpOworCWZvciAoaT0wOyBpPE1BWF9OVU1fT0ZfRExTX0VOVFJZOyBpKyspCisJeworCQlpZiAoKHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkKSAmJiAocEFkLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpKQorCQl7CisJCQlwcmludGsoIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4ICAiLAorCQkJCXBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHJbMF0sIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHJbMV0sIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLk1hY0FkZHJbMl0sCisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkclszXSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcls0XSwgcEFkLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcls1XSk7CisJCQlwcmludGsoIiUtOGRcbiIsIHBBZC0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlRpbWVPdXQpOworCQl9CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVAlTZXRfRGxzQWRkRW50cnlfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpCit7CisgICAgVUNIQVIJbWFjW01BQ19BRERSX0xFTl07CisJVVNIT1JUCVRpbWVvdXQ7CisJY2hhciAqdG9rZW4sIHNlcFZhbHVlW10gPSAiOiIsIERBU0ggPSAnLSc7CisJSU5UIGk7CisgICAgUlRfODAyXzExX0RMUwlEbHM7CisKKyAgICBpZihzdHJsZW4oYXJnKSA8IDE5KSAgLy9NYWMgYWRkcmVzcyBhY2NlcHRhYmxlIGZvcm1hdCAwMTowMjowMzowNDowNTowNiBsZW5ndGggMTcgcGx1cyB0aGUgIi0iIGFuZCB0aW1lb3V0IHZhbHVlIGluIGRlY2ltYWwgZm9ybWF0LgorCQlyZXR1cm4gRkFMU0U7CisKKwl0b2tlbiA9IHN0cmNocihhcmcsIERBU0gpOworCWlmICgodG9rZW4gIT0gTlVMTCkgJiYgKHN0cmxlbih0b2tlbik+MSkpCisJeworCQlUaW1lb3V0ID0gc2ltcGxlX3N0cnRvbCgodG9rZW4rMSksIDAsIDEwKTsKKworCQkqdG9rZW4gPSAnXDAnOworCQlmb3IgKGkgPSAwLCB0b2tlbiA9IHJzdHJ0b2soYXJnLCAmc2VwVmFsdWVbMF0pOyB0b2tlbjsgdG9rZW4gPSByc3RydG9rKE5VTEwsICZzZXBWYWx1ZVswXSksIGkrKykKKwkJeworCQkJaWYoKHN0cmxlbih0b2tlbikgIT0gMikgfHwgKCFpc3hkaWdpdCgqdG9rZW4pKSB8fCAoIWlzeGRpZ2l0KCoodG9rZW4rMSkpKSkKKwkJCQlyZXR1cm4gRkFMU0U7CisJCQlBdG9IKHRva2VuLCAoUFVDSEFSKSgmbWFjW2ldKSwgMSk7CisJCX0KKwkJaWYoaSAhPSA2KQorCQkJcmV0dXJuIEZBTFNFOworCisJICAgIHByaW50aygiXG4lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeC0lZCIsIG1hY1swXSwgbWFjWzFdLAorCSAgICAgICAgICAgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdLCAoaW50KVRpbWVvdXQpOworCisJCU5kaXNaZXJvTWVtb3J5KCZEbHMsIHNpemVvZihSVF84MDJfMTFfRExTKSk7CisJCURscy5UaW1lT3V0ID0gVGltZW91dDsKKwkJQ09QWV9NQUNfQUREUihEbHMuTWFjQWRkciwgbWFjKTsKKwkJRGxzLlZhbGlkID0gMTsKKworCQlNbG1lRW5xdWV1ZShwQWQsCisJCQkJCU1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorCQkJCQlSVF9PSURfODAyXzExX1NFVF9ETFNfUEFSQU0sCisJCQkJCXNpemVvZihSVF84MDJfMTFfRExTKSwKKwkJCQkJJkRscyk7CisKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworCit9CisKK0lOVAlTZXRfRGxzVGVhckRvd25FbnRyeV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlVQ0hBUgkJCW1hY0FkZHJbTUFDX0FERFJfTEVOXTsKKwlDSEFSCQkJKnZhbHVlOworCUlOVAkJCQlpOworCVJUXzgwMl8xMV9ETFMJRGxzOworCisJaWYoc3RybGVuKGFyZykgIT0gMTcpICAvL01hYyBhZGRyZXNzIGFjY2VwdGFibGUgZm9ybWF0IDAxOjAyOjAzOjA0OjA1OjA2IGxlbmd0aCAxNworCQlyZXR1cm4gRkFMU0U7CisKKwlmb3IgKGk9MCwgdmFsdWUgPSByc3RydG9rKGFyZywiOiIpOyB2YWx1ZTsgdmFsdWUgPSByc3RydG9rKE5VTEwsIjoiKSkKKwl7CisJCWlmKChzdHJsZW4odmFsdWUpICE9IDIpIHx8ICghaXN4ZGlnaXQoKnZhbHVlKSkgfHwgKCFpc3hkaWdpdCgqKHZhbHVlKzEpKSkgKQorCQkJcmV0dXJuIEZBTFNFOyAgLy9JbnZhbGlkCisKKwkJQXRvSCh2YWx1ZSwgJm1hY0FkZHJbaSsrXSwgMik7CisJfQorCisJcHJpbnRrKCJcbiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwgbWFjQWRkclswXSwgbWFjQWRkclsxXSwKKwkgICAgICAgICAgIG1hY0FkZHJbMl0sIG1hY0FkZHJbM10sIG1hY0FkZHJbNF0sIG1hY0FkZHJbNV0pOworCisJTmRpc1plcm9NZW1vcnkoJkRscywgc2l6ZW9mKFJUXzgwMl8xMV9ETFMpKTsKKwlDT1BZX01BQ19BRERSKERscy5NYWNBZGRyLCBtYWNBZGRyKTsKKwlEbHMuVmFsaWQgPSAwOworCisJTWxtZUVucXVldWUocEFkLAorCQkJCU1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorCQkJCVJUX09JRF84MDJfMTFfU0VUX0RMU19QQVJBTSwKKwkJCQlzaXplb2YoUlRfODAyXzExX0RMUyksCisJCQkJJkRscyk7CisKKwlyZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvcnRtcF9kYXRhLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9ydG1wX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGYyNTliCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvcnRtcF9kYXRhLmMKQEAgLTAsMCArMSwyNjM3IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXJ0bXBfZGF0YS5jCisKKwlBYnN0cmFjdDoKKwlEYXRhIHBhdGggc3Vicm91dGluZXMKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvIAkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSm9obgkJICAgICAgQXVnLzE3LzA0CQltYWpvciBtb2RpZmljYXRpb24gZm9yIFJUMjU2MS8yNjYxCisJSmFuIExlZQkgICAgICBNYXIvMTcvMDYJCW1ham9yIG1vZGlmaWNhdGlvbiBmb3IgUlQyODYwIE5ldyBSaW5nIERlc2lnbgorKi8KKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworCisKK1ZPSUQgU1RBUnhFQVBPTEZyYW1lSW5kaWNhdGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUFDX1RBQkxFX0VOVFJZCSpwRW50cnksCisJSU4JUlhfQkxLCQkJKnBSeEJsaywKKwlJTglVQ0hBUgkJCUZyb21XaGljaEJTU0lEKQoreworCVBSVDI4WFhfUlhEX1NUUlVDCXBSeEQgPSAmKHBSeEJsay0+UnhEKTsKKwlQUlhXSV9TVFJVQwkJcFJ4V0kgPSBwUnhCbGstPnBSeFdJOworCVVDSEFSCQkJKnBUbXBCdWY7CisKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQKQorCXsKKwkJLy8gQWxsIEVBUG9MIGZyYW1lcyBoYXZlIHRvIHBhc3MgdG8gdXBwZXIgbGF5ZXIgKGV4LiBXUEFfU1VQUExJQ0FOVCBkYWVtb24pCisJCS8vIFRCRCA6IHByb2Nlc3MgZnJhZ21lbnRlZCBFQVBvbCBmcmFtZXMKKwkJeworCQkJLy8gSW4gODAyLjF4IG1vZGUsIGlmIHRoZSByZWNlaXZlZCBmcmFtZSBpcyBFQVAtU1VDQ0VTUyBwYWNrZXQsIHR1cm4gb24gdGhlIFBvcnRTZWN1cmVkIHZhcmlhYmxlCisJCQlpZiAoIHBBZC0+U3RhQ2ZnLklFRUU4MDIxWCA9PSBUUlVFICYmCisJCQkJIChFQVBfQ09ERV9TVUNDRVNTID09IFdwYUNoZWNrRWFwQ29kZShwQWQsIHBSeEJsay0+cERhdGEsIHBSeEJsay0+RGF0YVNpemUsIExFTkdUSF84MDJfMV9IKSkpCisJCQl7CisJCQkJUFVDSEFSCUtleTsKKwkJCQlVQ0hBUiAJQ2lwaGVyQWxnOworCQkJCWludCAgICAgaWR4ID0gMDsKKworCQkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJSZWNlaXZlIEVBUC1TVUNDRVNTIFBhY2tldFxuIikpOworCQkJCS8vcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZCk7CisKKyAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuSUVFRTgwMjF4X3JlcXVpcmVkX2tleXMgPT0gRkFMU0UpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZHggPSBwQWQtPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlJZDsKKyAgICAgICAgICAgICAgICAgICAgQ2lwaGVyQWxnID0gcEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uQ2lwaGVyQWxnOworCQkJCQlLZXkgPSBwQWQtPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlbaWR4XS5LZXk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtpZHhdLktleUxlbiA+IDApCisgICAgCQkJCXsKKyNpZmRlZiBSVDI4NzAKKwkJCQkJCXVuaW9uCisJCQkJCQl7CisJCQkJCQkJY2hhciBidWZbc2l6ZW9mKE5ESVNfODAyXzExX1dFUCkrTUFYX0xFTl9PRl9LRVktIDFdOworCQkJCQkJCU5ESVNfODAyXzExX1dFUCBrZXlpbmZvOworCQkJCQkJfSAgV2VwS2V5OworCQkJCQkJaW50IGxlbjsKKworCisJCQkJCQlOZGlzWmVyb01lbW9yeSgmV2VwS2V5LCBzaXplb2YoV2VwS2V5KSk7CisJCQkJCQlsZW4gPXBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtpZHhdLktleUxlbjsKKworCQkJCQkJTmRpc01vdmVNZW1vcnkoV2VwS2V5LmtleWluZm8uS2V5TWF0ZXJpYWwsCisJCQkJCQkJcEFkLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W2lkeF0uS2V5LAorCQkJCQkJCXBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtpZHhdLktleUxlbik7CisKKwkJCQkJCVdlcEtleS5rZXlpbmZvLktleUluZGV4ID0gMHg4MDAwMDAwMCArIGlkeDsKKwkJCQkJCVdlcEtleS5rZXlpbmZvLktleUxlbmd0aCA9IGxlbjsKKwkJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uS2V5TGVuID0oVUNIQVIpIChsZW4gPD0gNSA/IDUgOiAxMyk7CisKKwkJCQkJCXBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisJCQkJCQlwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19VUDsKKwkJCQkJCS8vIG5lZWQgdG8gZW5xdWV1ZSBjbWQgdG8gdGhyZWFkCisJCQkJCQlSVFVTQkVucXVldWVDbWRGcm9tTmRpcyhwQWQsIE9JRF84MDJfMTFfQUREX1dFUCwgVFJVRSwgJldlcEtleSwgc2l6ZW9mKFdlcEtleS5rZXlpbmZvKSArIGxlbiAtIDEpOworI2VuZGlmIC8vIFJUMjg3MCAvLworCQkJCQkJLy8gRm9yIFByZXZlbnRpbmcgU2hhcmRLZXkgVGFibGUgaXMgY2xlYXJlZCBieSByZW1vdmUga2V5IHByb2NlZHVyZS4KKyAgICAJCQkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW2lkeF0uQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCQkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXlMZW4gPSBwQWQtPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlbaWR4XS5LZXlMZW47CisJCQkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleSwKKwkJCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtpZHhdLktleSwKKwkJCQkJCQkJCSAgIHBBZC0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtpZHhdLktleUxlbik7CisgICAgCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCUluZGljYXRlX0xlZ2FjeV9QYWNrZXQocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwllbHNlCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCXsKKwkJLy8gU3BlY2lhbCBEQVRBIGZyYW1lIHRoYXQgaGFzIHRvIHBhc3MgdG8gTUxNRQorCQkvLwkgMS4gQ2lzY28gQWlyb25ldCBmcmFtZXMgZm9yIENDWDIuIFdlIG5lZWQgcGFzcyBpdCB0byBNTE1FIGZvciBzcGVjaWFsIHByb2Nlc3MKKwkJLy8JIDIuIEVBUE9MIGhhbmRzaGFraW5nIGZyYW1lcyB3aGVuIGRyaXZlciBzdXBwbGljYW50IGVuYWJsZWQsIHBhc3MgdG8gTUxNRSBmb3Igc3BlY2lhbCBwcm9jZXNzCisJCXsKKwkJCXBUbXBCdWYgPSBwUnhCbGstPnBEYXRhIC0gTEVOR1RIXzgwMl8xMTsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBUbXBCdWYsIHBSeEJsay0+cEhlYWRlciwgTEVOR1RIXzgwMl8xMSk7CisJCQlSRVBPUlRfTUdNVF9GUkFNRV9UT19NTE1FKHBBZCwgcFJ4V0ktPldpcmVsZXNzQ2xpSUQsIHBUbXBCdWYsIHBSeEJsay0+RGF0YVNpemUgKyBMRU5HVEhfODAyXzExLCBwUnhXSS0+UlNTSTAsIHBSeFdJLT5SU1NJMSwgcFJ4V0ktPlJTU0kyLCBwUnhELT5QbGNwU2lnbmFsKTsKKwkJCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCIhISEgcmVwb3J0IEVBUE9ML0FJUk9ORVQgREFUQSB0byBNTE1FIChsZW49JWQpICEhIVxuIiwgcFJ4QmxrLT5EYXRhU2l6ZSkpOworCQl9CisJfQorCisJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwlyZXR1cm47CisKK30KKworVk9JRCBTVEFSeERhdGFGcmFtZUFubm91bmNlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1BQ19UQUJMRV9FTlRSWQkqcEVudHJ5LAorCUlOCVJYX0JMSwkJCSpwUnhCbGssCisJSU4JVUNIQVIJCQlGcm9tV2hpY2hCU1NJRCkKK3sKKworCS8vIG5vbi1FQVAgZnJhbWUKKwlpZiAoIVJUTVBDaGVja1dQQWZyYW1lKHBBZCwgcEVudHJ5LCBwUnhCbGstPnBEYXRhLCBwUnhCbGstPkRhdGFTaXplLCBGcm9tV2hpY2hCU1NJRCkpCisJeworCisJCXsKKwkJCS8vIGRyb3AgYWxsIG5vbi1FQVAgREFUQSBmcmFtZSBiZWZvcmUKKwkJCS8vIHRoaXMgY2xpZW50J3MgUG9ydC1BY2Nlc3MtQ29udHJvbCBpcyBzZWN1cmVkCisJCQlpZiAocFJ4QmxrLT5wSGVhZGVyLT5GQy5XZXApCisJCQl7CisJCQkJLy8gdW5zdXBwb3J0ZWQgY2lwaGVyIHN1aXRlCisJCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbkRpc2FibGVkKQorCQkJCXsKKwkJCQkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeEJsay0+cFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBlbmNyeXB0aW9uIGluLXVzZSBidXQgcmVjZWl2ZSBhIG5vbi1FQVBPTCBjbGVhciB0ZXh0IGZyYW1lLCBkcm9wIGl0CisJCQkJaWYgKChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZCkgJiYKKwkJCQkJKHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRCkpCisJCQkJeworCQkJCQkvLyByZWxlYXNlIHBhY2tldAorCQkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCQl9CisJCVJYX0JMS19DTEVBUl9GTEFHKHBSeEJsaywgZlJYX0VBUCk7CisJCWlmICghUlhfQkxLX1RFU1RfRkxBRyhwUnhCbGssIGZSWF9BUkFMSU5LKSkKKwkJeworCQkJLy8gTm9ybWFsIGxlZ2FjeSwgQU1QRFUgb3IgQU1TRFUKKwkJCUNtbVJ4bm9uUmFsaW5rRnJhbWVJbmRpY2F0ZShwQWQsIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyBBUkFMSU5LCisJCQlDbW1SeFJhbGlua0ZyYW1lSW5kaWNhdGUocEFkLCBwRW50cnksIHBSeEJsaywgRnJvbVdoaWNoQlNTSUQpOworCQl9CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCVJYX0JMS19DTEVBUl9GTEFHKHBSeEJsaywgZlJYX0RMUyk7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJfQorCWVsc2UKKwl7CisJCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9FQVApOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlpZiAoUlhfQkxLX1RFU1RfRkxBRyhwUnhCbGssIGZSWF9BTVBEVSkgJiYgKHBBZC0+Q29tbW9uQ2ZnLmJEaXNhYmxlUmVvcmRlcmluZyA9PSAwKSkKKwkJeworCQkJSW5kaWNhdGVfQU1QRFVfUGFja2V0KHBBZCwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQl7CisJCQkvLyBEZXRlcm1pbiB0aGUgZGVzdGluYXRpb24gb2YgdGhlIEVBUCBmcmFtZQorCQkJLy8gIHRvIFdQQSBzdGF0ZSBtYWNoaW5lIG9yIHVwcGVyIGxheWVyCisJCQlTVEFSeEVBUE9MRnJhbWVJbmRpY2F0ZShwQWQsIHBFbnRyeSwgcFJ4QmxrLCBGcm9tV2hpY2hCU1NJRCk7CisJCX0KKwl9Cit9CisKKworLy8gRm9yIFRLSVAgZnJhbWUsIGNhbGN1bGF0ZSB0aGUgTUlDIHZhbHVlCitCT09MRUFOIFNUQUNoZWNrVGtpcE1JQ1ZhbHVlKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1BQ19UQUJMRV9FTlRSWQkqcEVudHJ5LAorCUlOCVJYX0JMSwkJCSpwUnhCbGspCit7CisJUEhFQURFUl84MDJfMTEJcEhlYWRlciA9IHBSeEJsay0+cEhlYWRlcjsKKwlVQ0hBUgkJCSpwRGF0YSA9IHBSeEJsay0+cERhdGE7CisJVVNIT1JUCQkJRGF0YVNpemUgPSBwUnhCbGstPkRhdGFTaXplOworCVVDSEFSCQkJVXNlclByaW9yaXR5ID0gcFJ4QmxrLT5Vc2VyUHJpb3JpdHk7CisJUENJUEhFUl9LRVkJCXBXcGFLZXk7CisJVUNIQVIJCQkqcERBLCAqcFNBOworCisJcFdwYUtleSA9ICZwQWQtPlNoYXJlZEtleVtCU1MwXVtwUnhCbGstPnBSeFdJLT5LZXlJbmRleF07CisKKwlwREEgPSBwSGVhZGVyLT5BZGRyMTsKKwlpZiAoUlhfQkxLX1RFU1RfRkxBRyhwUnhCbGssIGZSWF9JTkZSQSkpCisJeworCQlwU0EgPSBwSGVhZGVyLT5BZGRyMzsKKwl9CisJZWxzZQorCXsKKwkJcFNBID0gcEhlYWRlci0+QWRkcjI7CisJfQorCisJaWYgKFJUTVBUa2lwQ29tcGFyZU1JQ1ZhbHVlKHBBZCwKKwkJCQkJCQkJcERhdGEsCisJCQkJCQkJCXBEQSwKKwkJCQkJCQkJcFNBLAorCQkJCQkJCQlwV3BhS2V5LT5SeE1pYywKKwkJCQkJCQkJVXNlclByaW9yaXR5LAorCQkJCQkJCQlEYXRhU2l6ZSkgPT0gRkFMU0UpCisJeworCQlEQkdQUklOVF9SQVcoUlRfREVCVUdfRVJST1IsKCJSeCBNSUMgVmFsdWUgZXJyb3IgMlxuIikpOworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCQlpZiAocEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQKQorCQl7CisJCQlXcGFTZW5kTWljRmFpbHVyZVRvV3BhU3VwcGxpY2FudChwQWQsIChwV3BhS2V5LT5UeXBlID09IFBBSVJXSVNFS0VZKSA/IFRSVUUgOiBGQUxTRSk7CisJCX0KKwkJZWxzZQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKwkJeworCQkJUlRNUFJlcG9ydE1pY0Vycm9yKHBBZCwgcFdwYUtleSk7CisJCX0KKworCQkvLyByZWxlYXNlIHBhY2tldAorCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4QmxrLT5wUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKworLy8KKy8vIEFsbCBSeCByb3V0aW5lcyB1c2UgUlhfQkxLIHN0cnVjdHVyZSB0byBoYW5kZSByeCBldmVudHMKKy8vIEl0IGlzIHZlcnkgaW1wb3J0YW50IHRvIGJ1aWxkIHBSeEJsayBhdHRyaWJ1dGVzCisvLyAgMS4gcEhlYWRlciBwb2ludGVyIHRvIDgwMi4xMSBIZWFkZXIKKy8vICAyLiBwRGF0YSBwb2ludGVyIHRvIHBheWxvYWQgaW5jbHVkaW5nIExMQyAoanVzdCBza2lwIEhlYWRlcikKKy8vICAzLiBzZXQgcGF5bG9hZCBzaXplIGluY2x1ZGluZyBMTEMgdG8gRGF0YVNpemUKKy8vICA0LiBzZXQgc29tZSBmbGFncyB3aXRoIFJYX0JMS19TRVRfRkxBRygpCisvLworVk9JRCBTVEFIYW5kbGVSeERhdGFGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrKQoreworCVBSVDI4WFhfUlhEX1NUUlVDCQkJCXBSeEQgPSAmKHBSeEJsay0+UnhEKTsKKwlQUlhXSV9TVFJVQwkJCQkJCXBSeFdJID0gcFJ4QmxrLT5wUnhXSTsKKwlQSEVBREVSXzgwMl8xMQkJCQkJcEhlYWRlciA9IHBSeEJsay0+cEhlYWRlcjsKKwlQTkRJU19QQUNLRVQJCQkJCXBSeFBhY2tldCA9IHBSeEJsay0+cFJ4UGFja2V0OworCUJPT0xFQU4gCQkJCQkJYkZyYWdtZW50ID0gRkFMU0U7CisJTUFDX1RBQkxFX0VOVFJZCSAgICAJCQkqcEVudHJ5ID0gTlVMTDsKKwlVQ0hBUgkJCQkJCQlGcm9tV2hpY2hCU1NJRCA9IEJTUzA7CisJVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyUHJpb3JpdHkgPSAwOworCisJeworCQkvLyBiZWZvcmUgTElOSyBVUCwgYWxsIERBVEEgZnJhbWVzIGFyZSByZWplY3RlZAorCQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkKKwkJeworCQkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJcmV0dXJuOworCQl9CisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJLy9pZiAoKHBIZWFkZXItPkZDLkZyRHMgPT0gMCkgJiYgKHBIZWFkZXItPkZDLlRvRHMgPT0gMCkpCisJCWlmIChSVE1QUmN2RnJhbWVETFNDaGVjayhwQWQsIHBIZWFkZXIsIHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQsIHBSeEQpKQorCQl7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCQkvLyBEcm9wIG5vdCBteSBCU1MgZnJhbWVzCisJCWlmIChwUnhELT5NeUJzcyA9PSAwKQorCQl7CisJCQl7CisJCQkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlJ4Q291bnRTaW5jZUxhc3ROVUxMKys7CisJCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgJiYgcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5iQVBTRENhcGFibGUgJiYgKHBIZWFkZXItPkZDLlN1YlR5cGUgJiAweDA4KSkKKwkJeworCQkJVUNIQVIgKnBEYXRhOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJiQVBTRENhcGFibGVcbiIpKTsKKworCQkJLy8gUW9zIGJpdCA0CisJCQlwRGF0YSA9IChQVUNIQVIpcEhlYWRlciArIExFTkdUSF84MDJfMTE7CisJCQlpZiAoKCpwRGF0YSA+PiA0KSAmIDB4MDEpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJSeERvbmUtIFJjdiBFT1NQIGZyYW1lLCBkcml2ZXIgbWF5IGZhbGwgaW50byBzbGVlcFxuIikpOworCQkJCXBBZC0+Q29tbW9uQ2ZnLmJJblNlcnZpY2VQZXJpb2QgPSBGQUxTRTsKKworCQkJCS8vIEZvcmNlIGRyaXZlciB0byBmYWxsIGludG8gc2xlZXAgbW9kZSB3aGVuIHJjdiBFT1NQIGZyYW1lCisJCQkJaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX0RPWkUpKQorCQkJCXsKKwkJCQkJVVNIT1JUICBUYnR0TnVtVG9OZXh0V2FrZVVwOworCQkJCQlVU0hPUlQgIE5leHREdGltID0gcEFkLT5TdGFDZmcuRHRpbVBlcmlvZDsKKwkJCQkJVUxPTkcgICBOb3c7CisKKwkJCQkJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93KTsKKwkJCQkJTmV4dER0aW0gLT0gKFVTSE9SVCkoTm93IC0gcEFkLT5TdGFDZmcuTGFzdEJlYWNvblJ4VGltZSkvcEFkLT5Db21tb25DZmcuQmVhY29uUGVyaW9kOworCisJCQkJCVRidHROdW1Ub05leHRXYWtlVXAgPSBwQWQtPlN0YUNmZy5EZWZhdWx0TGlzdGVuQ291bnQ7CisJCQkJCWlmIChPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSkgJiYgKFRidHROdW1Ub05leHRXYWtlVXAgPiBOZXh0RHRpbSkpCisJCQkJCQlUYnR0TnVtVG9OZXh0V2FrZVVwID0gTmV4dER0aW07CisKKwkJCQkJTWxtZVNldFBzbUJpdChwQWQsIFBXUl9TQVZFKTsKKwkJCQkJLy8gaWYgV01NLUFQU0QgaXMgZmFpbGVkLCB0cnkgdG8gZGlzYWJsZSBmb2xsb3dpbmcgbGluZQorCQkJCQlBc2ljU2xlZXBUaGVuQXV0b1dha2V1cChwQWQsIFRidHROdW1Ub05leHRXYWtlVXApOworCQkJCX0KKwkJCX0KKworCQkJaWYgKChwSGVhZGVyLT5GQy5Nb3JlRGF0YSkgJiYgKHBBZC0+Q29tbW9uQ2ZnLmJJblNlcnZpY2VQZXJpb2QpKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU2VuZGluZyBhbm90aGVyIHRyaWdnZXIgZnJhbWUgd2hlbiBNb3JlIERhdGEgYml0IGlzIHNldCB0byAxXG4iKSk7CisJCQl9CisJCX0KKworCQkvLyBEcm9wIE5VTEwsIENGLUFDSyhubyBkYXRhKSwgQ0YtUE9MTChubyBkYXRhKSwgYW5kIENGLUFDSytDRi1QT0xMKG5vIGRhdGEpIGRhdGEgZnJhbWUKKwkJaWYgKChwSGVhZGVyLT5GQy5TdWJUeXBlICYgMHgwNCkpIC8vIGJpdCAyIDogbm8gREFUQQorCQl7CisJCQkvLyByZWxlYXNlIHBhY2tldAorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQlyZXR1cm47CisJCX0KKworCSAgICAvLyBEcm9wIG5vdCBteSBCU1MgZnJhbWUgKHdlIGNhbiBub3Qgb25seSBjaGVjayB0aGUgTXlCc3MgYml0IGluIFJ4RCkKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkgICAgaWYgKCFwQWQtPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSkKKwkgICAgeworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQlpZiAoSU5GUkFfT04ocEFkKSkKKwkJeworCQkJLy8gSW5mcmFzdHJ1Y3R1cmUgbW9kZSwgY2hlY2sgYWRkcmVzcyAyIGZvciBCU1NJRAorCQkJaWYgKCFSVE1QRXF1YWxNZW1vcnkoJnBIZWFkZXItPkFkZHIyLCAmcEFkLT5Db21tb25DZmcuQnNzaWQsIDYpKQorCQkJeworCQkJCS8vIFJlY2VpdmUgZnJhbWUgbm90IG15IEJTU0lECisJICAgICAgICAgICAgLy8gcmVsZWFzZSBwYWNrZXQKKwkgICAgICAgICAgICBSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJZWxzZQkvLyBBZC1Ib2MgbW9kZSBvciBOb3QgYXNzb2NpYXRlZAorCQl7CisJCQkvLyBBZC1Ib2MgbW9kZSwgY2hlY2sgYWRkcmVzcyAzIGZvciBCU1NJRAorCQkJaWYgKCFSVE1QRXF1YWxNZW1vcnkoJnBIZWFkZXItPkFkZHIzLCAmcEFkLT5Db21tb25DZmcuQnNzaWQsIDYpKQorCQkJeworCQkJCS8vIFJlY2VpdmUgZnJhbWUgbm90IG15IEJTU0lECisJICAgICAgICAgICAgLy8gcmVsZWFzZSBwYWNrZXQKKwkgICAgICAgICAgICBSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkgICAgfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisJCS8vCisJCS8vIGZpbmQgcEVudHJ5CisJCS8vCisJCWlmIChwUnhXSS0+V2lyZWxlc3NDbGlJRCA8IE1BWF9MRU5fT0ZfTUFDX1RBQkxFKQorCQl7CisJCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtwUnhXSS0+V2lyZWxlc3NDbGlJRF07CisJCX0KKwkJZWxzZQorCQl7CisJCQkvLyAxLiByZWxlYXNlIHBhY2tldCBpZiBpbmZyYSBtb2RlCisJCQkvLyAyLiBuZXcgYSBwRW50cnkgaWYgYWQtaG9jIG1vZGUKKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gaW5mcmEgb3IgYWQtaG9jCisJCWlmIChJTkZSQV9PTihwQWQpKQorCQl7CisJCQlSWF9CTEtfU0VUX0ZMQUcocFJ4QmxrLCBmUlhfSU5GUkEpOworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCQkJaWYgKChwSGVhZGVyLT5GQy5GckRzID09IDApICYmIChwSGVhZGVyLT5GQy5Ub0RzID09IDApKQorCQkJCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9ETFMpOworCQkJZWxzZQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCQkJQVNTRVJUKHBSeFdJLT5XaXJlbGVzc0NsaUlEID09IEJTU0lEX1dDSUQpOworCQl9CisKKwkJLy8gY2hlY2sgQXRoZXJvcyBDbGllbnQKKwkJaWYgKChwRW50cnktPmJJQW1CYWRBdGhlcm9zID09IEZBTFNFKSAmJiAgKHBSeEQtPkFNUERVID09IDEpICYmIChwSGVhZGVyLT5GQy5SZXRyeSApKQorCQl7CisJCQlwRW50cnktPmJJQW1CYWRBdGhlcm9zID0gVFJVRTsKKwkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYkN1cnJlbnRBdGhlcm9zID0gVFJVRTsKKwkJCXBBZC0+Q29tbW9uQ2ZnLklPVGVzdFBhcm0uYkxhc3RBdGhlcm9zID0gVFJVRTsKKwkJCWlmICghU1RBX0FFU19PTihwQWQpKQorCQkJeworCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgOCwgQUxMTl9TRVRQUk9URUNULCBUUlVFLCBGQUxTRSk7CisJCQl9CisJCX0KKwl9CisKKwlwUnhCbGstPnBEYXRhID0gKFVDSEFSICopcEhlYWRlcjsKKworCS8vCisJLy8gdXBkYXRlIFJ4QmxrLT5wRGF0YSwgRGF0YVNpemUKKwkvLyA4MDIuMTEgSGVhZGVyLCBRT1MsIEhUQywgSHcgUGFkZGluZworCS8vCisKKwkvLyAxLiBza2lwIDgwMi4xMSBIRUFERVIKKwl7CisJCXBSeEJsay0+cERhdGEgKz0gTEVOR1RIXzgwMl8xMTsKKwkJcFJ4QmxrLT5EYXRhU2l6ZSAtPSBMRU5HVEhfODAyXzExOworCX0KKworCS8vIDIuIFFPUworCWlmIChwSGVhZGVyLT5GQy5TdWJUeXBlICYgMHgwOCkKKwl7CisJCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9RT1MpOworCQlVc2VyUHJpb3JpdHkgPSAqKHBSeEJsay0+cERhdGEpICYgMHgwZjsKKwkJLy8gYml0IDcgaW4gUW9TIENvbnRyb2wgZmllbGQgc2lnbmFscyB0aGUgSFQgQS1NU0RVIGZvcm1hdAorCQlpZiAoKCpwUnhCbGstPnBEYXRhKSAmIDB4ODApCisJCXsKKwkJCVJYX0JMS19TRVRfRkxBRyhwUnhCbGssIGZSWF9BTVNEVSk7CisJCX0KKworCQkvLyBza2lwIFFPUyBjb250b3JsIGZpZWxkCisJCXBSeEJsay0+cERhdGEgKz0gMjsKKwkJcFJ4QmxrLT5EYXRhU2l6ZSAtPTI7CisJfQorCXBSeEJsay0+VXNlclByaW9yaXR5ID0gVXNlclByaW9yaXR5OworCisJLy8gMy4gT3JkZXIgYml0OiBBLVJhbGluayBvciBIVEMrCisJaWYgKHBIZWFkZXItPkZDLk9yZGVyKQorCXsKKyNpZmRlZiBBR0dSRUdBVElPTl9TVVBQT1JUCisJCWlmICgocFJ4V0ktPlBIWU1PREUgPD0gTU9ERV9PRkRNKSAmJiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19BR0dSRUdBVElPTl9JTlVTRUQpKSkKKwkJeworCQkJUlhfQkxLX1NFVF9GTEFHKHBSeEJsaywgZlJYX0FSQUxJTkspOworCQl9CisJCWVsc2UKKyNlbmRpZgorCQl7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlSWF9CTEtfU0VUX0ZMQUcocFJ4QmxrLCBmUlhfSFRDKTsKKwkJCS8vIHNraXAgSFRDIGNvbnRvcmwgZmllbGQKKwkJCXBSeEJsay0+cERhdGEgKz0gNDsKKwkJCXBSeEJsay0+RGF0YVNpemUgLT0gNDsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJfQorCX0KKworCS8vIDQuIHNraXAgSFcgcGFkZGluZworCWlmIChwUnhELT5MMlBBRCkKKwl7CisJCS8vIGp1c3QgbW92ZSBwRGF0YSBwb2ludGVyCisJCS8vIGJlY2F1c2UgRGF0YVNpemUgZXhjbHVkaW5nIEhXIHBhZGRpbmcKKwkJUlhfQkxLX1NFVF9GTEFHKHBSeEJsaywgZlJYX1BBRCk7CisJCXBSeEJsay0+cERhdGEgKz0gMjsKKwl9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlpZiAocFJ4RC0+QkEpCisJeworCQlSWF9CTEtfU0VUX0ZMQUcocFJ4QmxrLCBmUlhfQU1QRFUpOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCisJLy8KKwkvLyBDYXNlIEkgIFByb2Nlc3MgQnJvYWRjYXN0ICYgTXVsdGljYXN0IGRhdGEgZnJhbWUKKwkvLworCWlmIChwUnhELT5CY2FzdCB8fCBwUnhELT5NY2FzdCkKKwl7CisJCUlOQ19DT1VOVEVSNjQocEFkLT5XbGFuQ291bnRlcnMuTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50KTsKKworCQkvLyBEcm9wIE1jYXN0L0JjYXN0IGZyYW1lIHdpdGggZnJhZ21lbnQgYml0IG9uCisJCWlmIChwSGVhZGVyLT5GQy5Nb3JlRnJhZykKKwkJeworCQkJLy8gcmVsZWFzZSBwYWNrZXQKKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJcmV0dXJuOworCQl9CisKKwkJLy8gRmlsdGVyIG91dCBCY2FzdCBmcmFtZSB3aGljaCBBUCByZWxheWVkIGZvciB1cworCQlpZiAocEhlYWRlci0+RkMuRnJEcyAmJiBNQUNfQUREUl9FUVVBTChwSGVhZGVyLT5BZGRyMywgcEFkLT5DdXJyZW50QWRkcmVzcykpCisJCXsKKwkJCS8vIHJlbGVhc2UgcGFja2V0CisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCXJldHVybjsKKwkJfQorCisJCUluZGljYXRlX0xlZ2FjeV9QYWNrZXQocEFkLCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwkJcmV0dXJuOworCX0KKwllbHNlIGlmIChwUnhELT5VMk0pCisJeworCQlwQWQtPkxhc3RSeFJhdGUgPSAoVVNIT1JUKSgocFJ4V0ktPk1DUykgKyAocFJ4V0ktPkJXIDw8NykgKyAocFJ4V0ktPlNob3J0R0kgPDw4KSsgKHBSeFdJLT5QSFlNT0RFIDw8MTQpKSA7CisKKworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorICAgICAgICBpZiAoUlhfQkxLX1RFU1RfRkxBRyhwUnhCbGssIGZSWF9ETFMpKQorCQl7CisJCQlNQUNfVEFCTEVfRU5UUlkgKnBEbHNFbnRyeSA9IE5VTEw7CisKKwkJCXBEbHNFbnRyeSA9IERsc0VudHJ5VGFibGVMb29rdXBCeVdjaWQocEFkLCBwUnhXSS0+V2lyZWxlc3NDbGlJRCwgcEhlYWRlci0+QWRkcjIsIFRSVUUpOworCQkJCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHBEbHNFbnRyeSkKKwkJCVVwZGF0ZV9Sc3NpX1NhbXBsZShwQWQsICZwRGxzRW50cnktPlJzc2lTYW1wbGUsIHBSeFdJKTsKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJCWlmIChBREhPQ19PTihwQWQpKQorCQl7CisJCQlwRW50cnkgPSBNYWNUYWJsZUxvb2t1cChwQWQsIHBIZWFkZXItPkFkZHIyKTsKKwkJCWlmIChwRW50cnkpCisJCQkJVXBkYXRlX1Jzc2lfU2FtcGxlKHBBZCwgJnBFbnRyeS0+UnNzaVNhbXBsZSwgcFJ4V0kpOworCQl9CisKKworCQlVcGRhdGVfUnNzaV9TYW1wbGUocEFkLCAmcEFkLT5TdGFDZmcuUnNzaVNhbXBsZSwgcFJ4V0kpOworCisJCXBBZC0+U3RhQ2ZnLkxhc3RTTlIwID0gKFVDSEFSKShwUnhXSS0+U05SMCk7CisJCXBBZC0+U3RhQ2ZnLkxhc3RTTlIxID0gKFVDSEFSKShwUnhXSS0+U05SMSk7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNSeE9rRGF0YUNudCsrOworCisKKyAgICAJaWYgKCEoKHBIZWFkZXItPkZyYWcgPT0gMCkgJiYgKHBIZWFkZXItPkZDLk1vcmVGcmFnID09IDApKSkKKyAgICAJeworICAgIAkJLy8gcmUtYXNzZW1ibGUgdGhlIGZyYWdtZW50ZWQgcGFja2V0cworICAgIAkJLy8gcmV0dXJuIGNvbXBsZXRlIGZyYW1lIChwUnhQYWNrZXQpIG9yIE5VTEwKKyAgICAJCWJGcmFnbWVudCA9IFRSVUU7CisgICAgCQlwUnhQYWNrZXQgPSBSVE1QRGVGcmFnbWVudERhdGFGcmFtZShwQWQsIHBSeEJsayk7CisgICAgCX0KKworICAgIAlpZiAocFJ4UGFja2V0KQorICAgIAl7CisJCQlwRW50cnkgPSAmcEFkLT5NYWNUYWIuQ29udGVudFtwUnhXSS0+V2lyZWxlc3NDbGlJRF07CisKKyAgICAJCS8vIHByb2Nlc3MgY29tcGxldGUgZnJhbWUKKyAgICAJCWlmIChiRnJhZ21lbnQgJiYgKHBSeEQtPkRlY3J5cHRlZCkgJiYgKHBFbnRyeS0+V2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpKQorICAgIAkJeworCQkJCS8vIE1pbnVzIE1JQyBsZW5ndGgKKwkJCQlwUnhCbGstPkRhdGFTaXplIC09IDg7CisKKyAgICAJCQkvLyBGb3IgVEtJUCBmcmFtZSwgY2FsY3VsYXRlIHRoZSBNSUMgdmFsdWUKKyAgICAJCQlpZiAoU1RBQ2hlY2tUa2lwTUlDVmFsdWUocEFkLCBwRW50cnksIHBSeEJsaykgPT0gRkFMU0UpCisgICAgCQkJeworICAgIAkJCQlyZXR1cm47CisgICAgCQkJfQorICAgIAkJfQorCisgICAgCQlTVEFSeERhdGFGcmFtZUFubm91bmNlKHBBZCwgcEVudHJ5LCBwUnhCbGssIEZyb21XaGljaEJTU0lEKTsKKwkJCXJldHVybjsKKyAgICAJfQorICAgIAllbHNlCisgICAgCXsKKyAgICAJCS8vIGp1c3QgcmV0dXJuCisgICAgCQkvLyBiZWNhdXNlIFJUTVBEZUZyYWdtZW50RGF0YUZyYW1lKCkgd2lsbCByZWxlYXNlIHJ4IHBhY2tldCwKKyAgICAJCS8vIGlmIHBhY2tldCBpcyBmcmFnbWVudGVkCisgICAgCQlyZXR1cm47CisgICAgCX0KKwl9CisKKwlBU1NFUlQoMCk7CisJLy8gcmVsZWFzZSBwYWNrZXQKKwlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKK30KKworVk9JRCBTVEFIYW5kbGVSeE1nbXRGcmFtZSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglSWF9CTEsJCQkqcFJ4QmxrKQoreworCVBSVDI4WFhfUlhEX1NUUlVDCXBSeEQgPSAmKHBSeEJsay0+UnhEKTsKKwlQUlhXSV9TVFJVQwkJcFJ4V0kgPSBwUnhCbGstPnBSeFdJOworCVBIRUFERVJfODAyXzExCXBIZWFkZXIgPSBwUnhCbGstPnBIZWFkZXI7CisJUE5ESVNfUEFDS0VUCXBSeFBhY2tldCA9IHBSeEJsay0+cFJ4UGFja2V0OworCisJZG8KKwl7CisKKwkJLy8gV2Ugc2hvdWxkIGNvbGxlY3QgUlNTSSBub3Qgb25seSBVMk0gZGF0YSBidXQgYWxzbyBteSBiZWFjb24KKwkJaWYgKChwSGVhZGVyLT5GQy5TdWJUeXBlID09IFNVQlRZUEVfQkVBQ09OKSAmJiAoTUFDX0FERFJfRVFVQUwoJnBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCAmcEhlYWRlci0+QWRkcjIpKQorCQkJJiYgKHBBZC0+UnhBbnQuRXZhbHVhdGVQZXJpb2QgPT0gMCkpCisJCXsKKwkJCVVwZGF0ZV9Sc3NpX1NhbXBsZShwQWQsICZwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLCBwUnhXSSk7CisKKwkJCXBBZC0+U3RhQ2ZnLkxhc3RTTlIwID0gKFVDSEFSKShwUnhXSS0+U05SMCk7CisJCQlwQWQtPlN0YUNmZy5MYXN0U05SMSA9IChVQ0hBUikocFJ4V0ktPlNOUjEpOworCQl9CisKKyNpZmRlZiBSVDMweHgKKwkJLy8gY29sbGVjdCByc3NpIGluZm9ybWF0aW9uIGZvciBhbnRlbm5hIGRpdmVyc2l0eQorCQlpZiAocEFkLT5OaWNDb25maWcyLmZpZWxkLkFudERpdmVyc2l0eSkKKwkJeworCQkJaWYgKChwUnhELT5VMk0pIHx8ICgocEhlYWRlci0+RkMuU3ViVHlwZSA9PSBTVUJUWVBFX0JFQUNPTikgJiYgKE1BQ19BRERSX0VRVUFMKCZwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgJnBIZWFkZXItPkFkZHIyKSkpKQorCQkJeworCQkJCQlDT0xMRUNUX1JYX0FOVEVOTkFfQVZFUkFHRV9SU1NJKHBBZCwgQ29udmVydFRvUnNzaShwQWQsIChVQ0hBUilwUnhXSS0+UlNTSTAsIFJTU0lfMCksIDApOyAvL05vdGU6IFJTU0kyIG5vdCB1c2VkIG9uIFJUNzMKKwkJCQkJcEFkLT5TdGFDZmcuTnVtT2ZBdmdSc3NpU2FtcGxlICsrOworCQkJfQorCQl9CisjZW5kaWYgLy8gUlQzMHh4IC8vCisKKwkJLy8gRmlyc3QgY2hlY2sgdGhlIHNpemUsIGl0IE1VU1Qgbm90IGV4Y2VlZCB0aGUgbWxtZSBxdWV1ZSBzaXplCisJCWlmIChwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50ID4gTUdNVF9ETUFfQlVGRkVSX1NJWkUpCisJCXsKKwkJCURCR1BSSU5UX0VSUigoIlNUQUhhbmRsZVJ4TWdtdEZyYW1lOiBmcmFtZSB0b28gbGFyZ2UsIHNpemUgPSAlZCBcbiIsIHBSeFdJLT5NUERVdG90YWxCeXRlQ291bnQpKTsKKwkJCWJyZWFrOworCQl9CisKKwkJUkVQT1JUX01HTVRfRlJBTUVfVE9fTUxNRShwQWQsIHBSeFdJLT5XaXJlbGVzc0NsaUlELCBwSGVhZGVyLCBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50LAorCQkJCQkJCQkJcFJ4V0ktPlJTU0kwLCBwUnhXSS0+UlNTSTEsIHBSeFdJLT5SU1NJMiwgcFJ4RC0+UGxjcFNpZ25hbCk7CisJfSB3aGlsZSAoRkFMU0UpOworCisJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBSeFBhY2tldCwgTkRJU19TVEFUVVNfU1VDQ0VTUyk7Cit9CisKK1ZPSUQgU1RBSGFuZGxlUnhDb250cm9sRnJhbWUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUlhfQkxLCQkJKnBSeEJsaykKK3sKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlQUlhXSV9TVFJVQwkJcFJ4V0kgPSBwUnhCbGstPnBSeFdJOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCVBIRUFERVJfODAyXzExCXBIZWFkZXIgPSBwUnhCbGstPnBIZWFkZXI7CisJUE5ESVNfUEFDS0VUCXBSeFBhY2tldCA9IHBSeEJsay0+cFJ4UGFja2V0OworCisJc3dpdGNoIChwSGVhZGVyLT5GQy5TdWJUeXBlKQorCXsKKwkJY2FzZSBTVUJUWVBFX0JMT0NLX0FDS19SRVE6CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQl7CisJCQkJQ250bEVucXVldWVGb3JSZWN2KHBBZCwgcFJ4V0ktPldpcmVsZXNzQ2xpSUQsIChwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50KSwgKFBGUkFNRV9CQV9SRVEpcEhlYWRlcik7CisJCQl9CisJCQlicmVhazsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJY2FzZSBTVUJUWVBFX0JMT0NLX0FDSzoKKwkJY2FzZSBTVUJUWVBFX0FDSzoKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlQcm9jZXNzIFJ4RG9uZSBpbnRlcnJ1cHQsIHJ1bm5pbmcgaW4gRFBDIGxldmVsCisKKwlBcmd1bWVudHM6CisJCXBBZCBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKwkJVGhpcyByb3V0aW5lIGhhcyB0byBtYWludGFpbiBSeCByaW5nIHJlYWQgcG9pbnRlci4KKwkJTmVlZCB0byBjb25zaWRlciBRT1MgREFUQSBmb3JtYXQgd2hlbiBjb252ZXJ0aW5nIHRvIDgwMi4zCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTiBTVEFSeERvbmVJbnRlcnJ1cHRIYW5kbGUoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JQk9PTEVBTgkJCWFyZ2MpCit7CisJTkRJU19TVEFUVVMJCQlTdGF0dXM7CisJVUlOVDMyCQkJUnhQcm9jZXNzZWQsIFJ4UGVuZGluZzsKKwlCT09MRUFOCQkJYlJlc2NoZWR1bGUgPSBGQUxTRTsKKwlSVDI4WFhfUlhEX1NUUlVDCSpwUnhEOworCVVDSEFSCQkJKnBEYXRhOworCVBSWFdJX1NUUlVDCQlwUnhXSTsKKwlQTkRJU19QQUNLRVQJcFJ4UGFja2V0OworCVBIRUFERVJfODAyXzExCXBIZWFkZXI7CisJUlhfQkxLCQkJUnhDZWxsOworCisJUnhQcm9jZXNzZWQgPSBSeFBlbmRpbmcgPSAwOworCisJLy8gcHJvY2VzcyB3aG9sZSByeCByaW5nCisJd2hpbGUgKDEpCisJeworCisJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkFESU9fT0ZGIHwKKwkJCQkJCQkJZlJUTVBfQURBUFRFUl9SRVNFVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUyB8CisJCQkJCQkJCWZSVE1QX0FEQVBURVJfTklDX05PVF9FWElTVCkgfHwKKwkJCSFSVE1QX1RFU1RfRkxBRyhwQWQsZlJUTVBfQURBUFRFUl9TVEFSVF9VUCkpCisJCXsKKwkJCWJyZWFrOworCQl9CisKKworCQlSeFByb2Nlc3NlZCArKzsgLy8gdGVzdAorCisJCS8vIDEuIGFsbG9jYXRlIGEgbmV3IGRhdGEgcGFja2V0IGludG8gcnggcmluZyB0byByZXBsYWNlIHJlY2VpdmVkIHBhY2tldAorCQkvLyAgICB0aGVuIHByb2Nlc3NpbmcgdGhlIHJlY2VpdmVkIHBhY2tldAorCQkvLyAyLiB0aGUgY2FsbGVlIG11c3QgdGFrZSBjaGFyZ2Ugb2YgcmVsZWFzZSBvZiBwYWNrZXQKKwkJLy8gMy4gQXMgZmFyIGFzIGRyaXZlciBpcyBjb25jZXJuZWQgLAorCQkvLyAgICB0aGUgcnggcGFja2V0IG11c3QKKwkJLy8gICAgICBhLiBiZSBpbmRpY2F0ZWQgdG8gdXBwZXIgbGF5ZXIgb3IKKwkJLy8gICAgICBiLiBiZSByZWxlYXNlZCBpZiBpdCBpcyBkaXNjYXJkZWQKKwkJcFJ4UGFja2V0ID0gR2V0UGFja2V0RnJvbVJ4UmluZyhwQWQsICYoUnhDZWxsLlJ4RCksICZiUmVzY2hlZHVsZSwgJlJ4UGVuZGluZyk7CisJCWlmIChwUnhQYWNrZXQgPT0gTlVMTCkKKwkJeworCQkJLy8gbm8gbW9yZSBwYWNrZXQgdG8gcHJvY2VzcworCQkJYnJlYWs7CisJCX0KKworCQkvLyBnZXQgcnggcmluZyBkZXNjcmlwdG9yCisJCXBSeEQgPSAmKFJ4Q2VsbC5SeEQpOworCQkvLyBnZXQgcnggZGF0YSBidWZmZXIKKwkJcERhdGEJPSBHRVRfT1NfUEtUX0RBVEFQVFIocFJ4UGFja2V0KTsKKwkJcFJ4V0kJPSAoUFJYV0lfU1RSVUMpIHBEYXRhOworCQlwSGVhZGVyID0gKFBIRUFERVJfODAyXzExKSAocERhdGErUlhXSV9TSVpFKSA7CisKKyNpZmRlZiBSVF9CSUdfRU5ESUFOCisJICAgIFJUTVBGcmFtZUVuZGlhbkNoYW5nZShwQWQsIChQVUNIQVIpcEhlYWRlciwgRElSX1JFQUQsIFRSVUUpOworCQlSVE1QV0lFbmRpYW5DaGFuZ2UoKFBVQ0hBUilwUnhXSSwgVFlQRV9SWFdJKTsKKyNlbmRpZgorCisJCS8vIGJ1aWxkIFJ4Q2VsbAorCQlSeENlbGwucFJ4V0kgPSBwUnhXSTsKKwkJUnhDZWxsLnBIZWFkZXIgPSBwSGVhZGVyOworCQlSeENlbGwucFJ4UGFja2V0ID0gcFJ4UGFja2V0OworCQlSeENlbGwucERhdGEgPSAoVUNIQVIgKikgcEhlYWRlcjsKKwkJUnhDZWxsLkRhdGFTaXplID0gcFJ4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudDsKKwkJUnhDZWxsLkZsYWdzID0gMDsKKworCQkvLyBJbmNyZWFzZSBUb3RhbCByZWNlaXZlIGJ5dGUgY291bnRlciBhZnRlciByZWFsIGRhdGEgcmVjZWl2ZWQgbm8gbWF0ZXIgYW55IGVycm9yIG9yIG5vdAorCQlwQWQtPlJhbGlua0NvdW50ZXJzLlJlY2VpdmVkQnl0ZUNvdW50ICs9ICBwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50OworCQlwQWQtPlJhbGlua0NvdW50ZXJzLlJ4Q291bnQgKys7CisKKwkJSU5DX0NPVU5URVI2NChwQWQtPldsYW5Db3VudGVycy5SZWNlaXZlZEZyYWdtZW50Q291bnQpOworCisJCWlmIChwUnhXSS0+TVBEVXRvdGFsQnl0ZUNvdW50IDwgMTQpCisJCQlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCisgICAgICAgIGlmIChNT05JVE9SX09OKHBBZCkpCisJCXsKKyAgICAgICAgICAgIHNlbmRfbW9uaXRvcl9wYWNrZXRzKHBBZCwgJlJ4Q2VsbCk7CisJCQlicmVhazsKKwkJfQorCQkvKiBSVDI4NzAgaW52b2tlcyBTVEFSeERvbmVJbnRlcnJ1cHRIYW5kbGUoKSBpbiBydHVzYl9idWxrLmMgKi8KKyNpZmRlZiBSQUxJTktfQVRFCisJCWlmIChBVEVfT04ocEFkKSkKKwkJeworCQkJcEFkLT5hdGUuUnhDbnRQZXJTZWMrKzsKKwkJCUFURVNhbXBsZVJzc2kocEFkLCBwUnhXSSk7CisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkJCWlmIChwQWQtPmF0ZS5iUUFSeFN0YXJ0ID09IFRSVUUpCisJCQl7CisJCQkJLyogKCpwUnhEKSBoYXMgYmVlbiBzd2FwcGVkIGluIEdldFBhY2tldEZyb21SeFJpbmcoKSAqLworCQkJCUFURV9RQV9TdGF0aXN0aWNzKHBBZCwgcFJ4V0ksIHBSeEQsCXBIZWFkZXIpOworCQkJfQorI2VuZGlmIC8vIFJBTElOS18yOHh4X1FBIC8vCisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFJ4UGFja2V0LCBORElTX1NUQVRVU19TVUNDRVNTKTsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJCS8vIENoZWNrIGZvciBhbGwgUnhEIGVycm9ycworCQlTdGF0dXMgPSBSVE1QQ2hlY2tSeEVycm9yKHBBZCwgcEhlYWRlciwgcFJ4V0ksIHBSeEQpOworCisJCS8vIEhhbmRsZSB0aGUgcmVjZWl2ZWQgZnJhbWUKKwkJaWYgKFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCQl7CisJCQlzd2l0Y2ggKHBIZWFkZXItPkZDLlR5cGUpCisJCQl7CisJCQkJLy8gQ0FTRSBJLCByZWNlaXZlIGEgREFUQSBmcmFtZQorCQkJCWNhc2UgQlRZUEVfREFUQToKKwkJCQl7CisJCQkJCS8vIHByb2Nlc3MgREFUQSBmcmFtZQorCQkJCQlTVEFIYW5kbGVSeERhdGFGcmFtZShwQWQsICZSeENlbGwpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCQkvLyBDQVNFIElJLCByZWNlaXZlIGEgTUdNVCBmcmFtZQorCQkJCWNhc2UgQlRZUEVfTUdNVDoKKwkJCQl7CisJCQkJCVNUQUhhbmRsZVJ4TWdtdEZyYW1lKHBBZCwgJlJ4Q2VsbCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJCS8vIENBU0UgSUlJLiByZWNlaXZlIGEgQ05UTCBmcmFtZQorCQkJCWNhc2UgQlRZUEVfQ05UTDoKKwkJCQl7CisJCQkJCVNUQUhhbmRsZVJ4Q29udHJvbEZyYW1lKHBBZCwgJlJ4Q2VsbCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJCS8vIGRpc2NhcmQgb3RoZXIgdHlwZQorCQkJCWRlZmF1bHQ6CisJCQkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCXBBZC0+Q291bnRlcnM4MDIzLlJ4RXJyb3JzKys7CisJCQkvLyBkaXNjYXJkIHRoaXMgZnJhbWUKKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUnhQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQl9CisJfQorCisJcmV0dXJuIGJSZXNjaGVkdWxlOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwlBcmd1bWVudHM6CisJCXBBZCAJUG9pbnRlciB0byBvdXIgYWRhcHRlcgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVJUTVBIYW5kbGVUd2FrZXVwSW50ZXJydXB0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCUFzaWNGb3JjZVdha2V1cChwQWQsIEZBTFNFKTsKK30KKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBFYXJseSBjaGVja2luZyBhbmQgT1MtZGVwZW5lZCBwYXJzaW5nIGZvciBUeCBwYWNrZXQgc2VuZCB0byBvdXIgU1RBIGRyaXZlci4KKworQXJndW1lbnRzOgorICAgIE5ESVNfSEFORExFIAlNaW5pcG9ydEFkYXB0ZXJDb250ZXh0CVBvaW50ZXIgcmVmZXIgdG8gdGhlIGRldmljZSBoYW5kbGUsIGkuZS4sIHRoZSBwQWQuCisJUFBORElTX1BBQ0tFVAlwcFBhY2tldEFycmF5CQkJVGhlIHBhY2tldCBhcnJheSBuZWVkIHRvIGRvIHRyYW5zbWlzc2lvbi4KKwlVSU5UCQkJTnVtYmVyT2ZQYWNrZXRzCQkJTnVtYmVyIG9mIHBhY2tldCBpbiBwYWNrZXQgYXJyYXkuCisKK1JldHVybiBWYWx1ZToKKwlOT05FCisKK05vdGU6CisJVGhpcyBmdW5jdGlvbiBkbyBlYXJseSBjaGVja2luZyBhbmQgY2xhc3NpZmljYXRpb24gZm9yIHNlbmQtb3V0IHBhY2tldC4KKwlZb3Ugb25seSBjYW4gcHV0IE9TLWRlcGVuZWQgJiBTVEEgcmVsYXRlZCBjb2RlIGluIGhlcmUuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFNUQVNlbmRQYWNrZXRzKAorCUlOCU5ESVNfSEFORExFCQlNaW5pcG9ydEFkYXB0ZXJDb250ZXh0LAorCUlOCVBQTkRJU19QQUNLRVQJcHBQYWNrZXRBcnJheSwKKwlJTglVSU5UCQkJTnVtYmVyT2ZQYWNrZXRzKQoreworCVVJTlQJCQlJbmRleDsKKwlQUlRNUF9BREFQVEVSCXBBZCA9IChQUlRNUF9BREFQVEVSKSBNaW5pcG9ydEFkYXB0ZXJDb250ZXh0OworCVBORElTX1BBQ0tFVAlwUGFja2V0OworCUJPT0xFQU4JCQlhbGxvd1RvU2VuZCA9IEZBTFNFOworCisKKwlmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJPZlBhY2tldHM7IEluZGV4KyspCisJeworCQlwUGFja2V0ID0gcHBQYWNrZXRBcnJheVtJbmRleF07CisKKwkJZG8KKwkJeworCisJCQlpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX1JFU0VUX0lOX1BST0dSRVNTKSB8fAorCQkJCVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSB8fAorCQkJCVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9SQURJT19PRkYpKQorCQkJeworCQkJCS8vIERyb3Agc2VuZCByZXF1ZXN0IHNpbmNlIGhhcmR3YXJlIGlzIGluIHJlc2V0IHN0YXRlCisJCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZSBpZiAoIUlORlJBX09OKHBBZCkgJiYgIUFESE9DX09OKHBBZCkpCisJCQl7CisJCQkJLy8gRHJvcCBzZW5kIHJlcXVlc3Qgc2luY2UgdGhlcmUgYXJlIG5vIHBoeXNpY2FsIGNvbm5lY3Rpb24geWV0CisJCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vIFJlY29yZCB0aGF0IG9yaWduYWwgcGFja2V0IHNvdXJjZSBpcyBmcm9tIE5ESVMgbGF5ZXIsc28gdGhhdAorCQkJCS8vIGxhdGVyIG9uIGRyaXZlciBrbm93cyBob3cgdG8gcmVsZWFzZSB0aGlzIE5ESVMgUEFDS0VUCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQkJTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisJCQkJUFVDSEFSIHBTcmNCdWZWQSA9IEdFVF9PU19QS1RfREFUQVBUUihwUGFja2V0KTsKKworCQkJCXBFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZCwgcFNyY0J1ZlZBKTsKKwkJCQlpZiAocEVudHJ5ICYmIChwRW50cnktPlZhbGlkQXNEbHMgPT0gVFJVRSkpCisJCQkJeworCQkJCQlSVE1QX1NFVF9QQUNLRVRfV0NJRChwUGFja2V0LCBwRW50cnktPkFpZCk7CisJCQkJfQorCQkJCWVsc2UKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJCQlSVE1QX1NFVF9QQUNLRVRfV0NJRChwUGFja2V0LCAwKTsgLy8gdGhpcyBmaWVsZCBpcyB1c2VsZXNzIHdoZW4gaW4gU1RBIG1vZGUKKwkJCQlSVE1QX1NFVF9QQUNLRVRfU09VUkNFKHBQYWNrZXQsIFBLVFNSQ19ORElTKTsKKwkJCQlORElTX1NFVF9QQUNLRVRfU1RBVFVTKHBQYWNrZXQsIE5ESVNfU1RBVFVTX1BFTkRJTkcpOworCQkJCXBBZC0+UmFsaW5rQ291bnRlcnMuUGVuZGluZ05kaXNQYWNrZXRDb3VudCsrOworCisJCQkJYWxsb3dUb1NlbmQgPSBUUlVFOworCQkJfQorCQl9IHdoaWxlKEZBTFNFKTsKKworCQlpZiAoYWxsb3dUb1NlbmQgPT0gVFJVRSkKKwkJCVNUQVNlbmRQYWNrZXQocEFkLCBwUGFja2V0KTsKKwkJZWxzZQorCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCX0KKworCS8vIERlcXVldWUgb3V0Z29pbmcgZnJhbWVzIGZyb20gVHhTd1F1ZXVlW10gYW5kIHByb2Nlc3MgaXQKKwlSVE1QRGVRdWV1ZVBhY2tldChwQWQsIEZBTFNFLCBOVU1fT0ZfVFhfUklORywgTUFYX1RYX1BST0NFU1MpOworCit9CisKKworLyoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUm91dGluZSBEZXNjcmlwdGlvbjoKKwlUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBkbyBwYWNrZXQgcGFyc2luZyBhbmQgY2xhc3NpZmljYXRpb24gZm9yIFR4IHBhY2tldAorCXRvIFNUQSBkZXZpY2UsIGFuZCBpdCB3aWxsIGVuLXF1ZXVlIHBhY2tldHMgdG8gb3VyIFR4U3dRdWV1ZSBkZXBlbmRzIG9uIEFDCisJY2xhc3MuCisKK0FyZ3VtZW50czoKKwlwQWQgICAgCQlQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJcFBhY2tldCAJUG9pbnRlciB0byBzZW5kIHBhY2tldAorCitSZXR1cm4gVmFsdWU6CisJTkRJU19TVEFUVVNfU1VDQ0VTUwkJCUlmIHN1Y2NlcyB0byBxdWV1ZSB0aGUgcGFja2V0IGludG8gVHhTd1F1ZXVlLgorCU5ESVNfU1RBVFVTX0ZBSUxVUkUJCQlJZiBmYWlsZWQgdG8gZG8gZW4tcXVldWUuCisKK05vdGU6CisJWW91IG9ubHkgY2FuIHB1dCBPUy1pbmRlcGVuZWQgJiBTVEEgcmVsYXRlZCBjb2RlIGluIGhlcmUuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitORElTX1NUQVRVUyBTVEFTZW5kUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0KQoreworCVBBQ0tFVF9JTkZPIAlQYWNrZXRJbmZvOworCVBVQ0hBUgkJCXBTcmNCdWZWQTsKKwlVSU5UCQkJU3JjQnVmTGVuOworCVVJTlQJCQlBbGxvd0ZyYWdTaXplOworCVVDSEFSCQkJTnVtYmVyT2ZGcmFnOworLy8JVUNIQVIJCQlSVFNSZXF1aXJlZDsKKwlVQ0hBUgkJCVF1ZUlkeCwgVXNlclByaW9yaXR5OworCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgCUlycUZsYWdzOworCVVDSEFSCQkJRmxnSXNJUCA9IDA7CisJVUNIQVIJCQlSYXRlOworCisJLy8gUHJlcGFyZSBwYWNrZXQgaW5mb3JtYXRpb24gc3RydWN0dXJlIGZvciBidWZmZXIgZGVzY3JpcHRvcgorCS8vIGNoYWluZWQgd2l0aGluIGEgc2luZ2xlIE5ESVMgcGFja2V0LgorCVJUTVBfUXVlcnlQYWNrZXRJbmZvKHBQYWNrZXQsICZQYWNrZXRJbmZvLCAmcFNyY0J1ZlZBLCAmU3JjQnVmTGVuKTsKKworCWlmIChwU3JjQnVmVkEgPT0gTlVMTCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiU1RBU2VuZFBhY2tldCAtLT4gcFNyY0J1ZlZBID09IE5VTEwgISEhU3JjQnVmTGVuPSV4XG4iLFNyY0J1ZkxlbikpOworCQkvLyBSZXNvdXJlY2UgaXMgbG93LCBzeXN0ZW0gZGlkIG5vdCBhbGxvY2F0ZSB2aXJ0dWFsIGFkZHJlc3MKKwkJLy8gcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkUgZGlyZWN0bHkgdG8gdXBwZXIgbGF5ZXIKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKworCWlmIChTcmNCdWZMZW4gPCAxNCkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiU1RBU2VuZFBhY2tldCAtLT4gTmRpcyBQYWNrZXQgYnVmZmVyIGVycm9yICEhIVxuIikpOworCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCXJldHVybiAoTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJfQorCisJLy8gSW4gSFQgcmF0ZSBhZGhvYyBtb2RlLCBBLU1QRFUgaXMgb2Z0ZW4gdXNlZC4gU28gbmVlZCB0byBsb29rdXAgQkEgVGFibGUgYW5kIE1BQyBFbnRyeS4KKwkvLyBOb3RlIG11bHRpY2FzdCBwYWNrZXRzIGluIGFkaG9jIGFsc28gdXNlIEJTU0lEX1dDSUQgaW5kZXguCisJeworCQlpZihJTkZSQV9PTihwQWQpKQorCQl7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQlVU0hPUlQJdG1wV2NpZDsKKworCQkJdG1wV2NpZCA9IFJUTVBfR0VUX1BBQ0tFVF9XQ0lEKHBQYWNrZXQpOworCQkJaWYgKFZBTElEX1dDSUQodG1wV2NpZCkgJiYKKwkJCQkocEFkLT5NYWNUYWIuQ29udGVudFt0bXBXY2lkXS5WYWxpZEFzRGxzPT0gVFJVRSkpCisJCQl7CisJCQkJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbdG1wV2NpZF07CisJCQkJUmF0ZSA9IHBBZC0+TWFjVGFiLkNvbnRlbnRbdG1wV2NpZF0uQ3VyclR4UmF0ZTsKKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJCXsKKwkJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdOworCQkJUlRNUF9TRVRfUEFDS0VUX1dDSUQocFBhY2tldCwgQlNTSURfV0NJRCk7CisJCQlSYXRlID0gcEFkLT5Db21tb25DZmcuVHhSYXRlOworCQl9CisJCX0KKwkJZWxzZSBpZiAoQURIT0NfT04ocEFkKSkKKwkJeworCQkJaWYgKCpwU3JjQnVmVkEgJiAweDAxKQorCQkJeworCQkJCVJUTVBfU0VUX1BBQ0tFVF9XQ0lEKHBQYWNrZXQsIE1DQVNUX1dDSUQpOworCQkJCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W01DQVNUX1dDSURdOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXBFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZCwgcFNyY0J1ZlZBKTsKKwkJCX0KKwkJCVJhdGUgPSBwQWQtPkNvbW1vbkNmZy5UeFJhdGU7CisJCX0KKwl9CisKKwlpZiAoIXBFbnRyeSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiU1RBU2VuZFBhY2tldC0+Q2Fubm90IGZpbmQgcEVudHJ5KCUyeDolMng6JTJ4OiUyeDolMng6JTJ4KSBpbiBNYWNUYWIhXG4iLCBQUklOVF9NQUMocFNyY0J1ZlZBKSkpOworCQkvLyBSZXNvdXJlY2UgaXMgbG93LCBzeXN0ZW0gZGlkIG5vdCBhbGxvY2F0ZSB2aXJ0dWFsIGFkZHJlc3MKKwkJLy8gcmV0dXJuIE5ESVNfU1RBVFVTX0ZBSUxVUkUgZGlyZWN0bHkgdG8gdXBwZXIgbGF5ZXIKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwl9CisKKwlpZiAoQURIT0NfT04ocEFkKQorCQkpCisJeworCQlSVE1QX1NFVF9QQUNLRVRfV0NJRChwUGFja2V0LCAoVUNIQVIpcEVudHJ5LT5BaWQpOworCX0KKworCS8vCisJLy8gQ2hlY2sgdGhlIEV0aGVybmV0IEZyYW1lIHR5cGUgb2YgdGhpcyBwYWNrZXQsIGFuZCBzZXQgdGhlIFJUTVBfU0VUX1BBQ0tFVF9TUEVDSUZJQyBmbGFncy4KKwkvLwkJSGVyZSB3ZSBzZXQgdGhlIFBBQ0tFVF9TUEVDSUZJQyBmbGFncyhMTEMsIFZMQU4sIERIQ1AvQVJQLCBFQVBPTCkuCisJUlRNUENoZWNrRXRoZXJUeXBlKHBBZCwgcFBhY2tldCk7CisKKworCisJLy8KKwkvLyBXUEEgODAyLjF4IHNlY3VyZWQgcG9ydCBjb250cm9sIC0gZHJvcCBhbGwgbm9uLTgwMi4xeCBmcmFtZSBiZWZvcmUgcG9ydCBzZWN1cmVkCisJLy8KKwlpZiAoKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8CisJCSAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSB8fAorCQkgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpIHx8CisJCSAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJCSAgfHwgKHBBZC0+U3RhQ2ZnLklFRUU4MDIxWCA9PSBUUlVFKQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNpZmRlZiBMRUFQX1NVUFBPUlQKKwkJICB8fCAocEFkLT5TdGFDZmcuTGVhcEF1dGhNb2RlID09IENJU0NPX0F1dGhNb2RlTEVBUCkKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKwkJICApCisJCSAgJiYgKChwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQpIHx8IChwQWQtPlN0YUNmZy5NaWNFcnJDbnQgPj0gMikpCisJCSAgJiYgKFJUTVBfR0VUX1BBQ0tFVF9FQVBPTChwUGFja2V0KT09IEZBTFNFKQorCQkgICkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU1RBU2VuZFBhY2tldCAtLT4gRHJvcCBwYWNrZXQgYmVmb3JlIHBvcnQgc2VjdXJlZCAhISFcbiIpKTsKKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCisJCXJldHVybiAoTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJfQorCisKKwkvLyBTVEVQIDEuIERlY2lkZSBudW1iZXIgb2YgZnJhZ21lbnRzIHJlcXVpcmVkIHRvIGRlbGl2ZXIgdGhpcyBNU0RVLgorCS8vCSAgIFRoZSBlc3RpbWF0aW9uIGhlcmUgaXMgbm90IHZlcnkgYWNjdXJhdGUgYmVjYXVzZSBkaWZmaWN1bHQgdG8KKwkvLwkgICB0YWtlIGVuY3J5cHRpb24gb3ZlcmhlYWQgaW50byBjb25zaWRlcmF0aW9uIGhlcmUuIFRoZSByZXN1bHQKKwkvLwkgICAiTnVtYmVyT2ZGcmFnIiBpcyB0aGVuIGp1c3QgdXNlZCB0byBwcmUtY2hlY2sgaWYgZW5vdWdoIGZyZWUKKwkvLwkgICBUWEQgYXJlIGF2YWlsYWJsZSB0byBob2xkIHRoaXMgTVNEVS4KKworCisJaWYgKCpwU3JjQnVmVkEgJiAweDAxKQkvLyBmcmFnbWVudGF0aW9uIG5vdCBhbGxvd2VkIG9uIG11bHRpY2FzdCAmIGJyb2FkY2FzdAorCQlOdW1iZXJPZkZyYWcgPSAxOworCWVsc2UgaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQUdHUkVHQVRJT05fSU5VU0VEKSkKKwkJTnVtYmVyT2ZGcmFnID0gMTsJLy8gQWdncmVnYXRpb24gb3ZlcndoZWxtcyBmcmFnbWVudGF0aW9uCisJZWxzZSBpZiAoQ0xJRU5UX1NUQVRVU19URVNUX0ZMQUcocEVudHJ5LCBmQ0xJRU5UX1NUQVRVU19BTVNEVV9JTlVTRUQpKQorCQlOdW1iZXJPZkZyYWcgPSAxOwkvLyBBZ2dyZWdhdGlvbiBvdmVyd2hlbG1zIGZyYWdtZW50YXRpb24KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwllbHNlIGlmICgocEFkLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLk1PREUgPT0gTU9ERV9IVE1JWCkgfHwgKHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NT0RFID09IE1PREVfSFRHUkVFTkZJRUxEKSkKKwkJTnVtYmVyT2ZGcmFnID0gMTsJLy8gTUlNTyBSQVRFIG92ZXJ3aGVsbXMgZnJhZ21lbnRhdGlvbgorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCWVsc2UKKwl7CisJCS8vIFRoZSBjYWxjdWxhdGVkICJOdW1iZXJPZkZyYWciIGlzIGEgcm91Z2ggZXN0aW1hdGlvbiBiZWNhdXNlIG9mIHZhcmlvdXMKKwkJLy8gZW5jcnlwdGlvbi9lbmNhcHN1bGF0aW9uIG92ZXJoZWFkIG5vdCB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoaXMgbnVtYmVyIGlzIGp1c3QKKwkJLy8gdXNlZCB0byBtYWtlIHN1cmUgZW5vdWdoIGZyZWUgVFhEIGFyZSBhdmFpbGFibGUgYmVmb3JlIGZyYWdtZW50YXRpb24gdGFrZXMgcGxhY2UuCisJCS8vIEluIGNhc2UgdGhlIGFjdHVhbCByZXF1aXJlZCBudW1iZXIgb2YgZnJhZ21lbnRzIG9mIGFuIE5ESVMgcGFja2V0CisJCS8vIGV4Y2NlZWRzICJOdW1iZXJPZkZyYWciY2FjdWxhdGVkIGhlcmUgYW5kIG5vdCBlbm91Z2ggZnJlZSBUWEQgYXZhaWxhYmxlLCB0aGUKKwkJLy8gbGFzdCBmcmFnbWVudCAoaS5lLiBsYXN0IE1QRFUpIHdpbGwgYmUgZHJvcHBlZCBpbiBSVE1QSGFyZFRyYW5zbWl0KCkgZHVlIHRvIG91dCBvZgorCQkvLyByZXNvdXJjZSwgYW5kIHRoZSBORElTIHBhY2tldCB3aWxsIGJlIGluZGljYXRlZCBORElTX1NUQVRVU19GQUlMVVJFLiBUaGlzIHNob3VsZAorCQkvLyByYXJlbHkgaGFwcGVuIGFuZCB0aGUgcGVuYWx0eSBpcyBqdXN0IGxpa2UgYSBUWCBSRVRSWSBmYWlsLiBBZmZvcmRhYmxlLgorCisJCUFsbG93RnJhZ1NpemUgPSAocEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQpIC0gTEVOR1RIXzgwMl8xMSAtIExFTkdUSF9DUkM7CisJCU51bWJlck9mRnJhZyA9ICgoUGFja2V0SW5mby5Ub3RhbFBhY2tldExlbmd0aCAtIExFTkdUSF84MDJfMyArIExFTkdUSF84MDJfMV9IKSAvIEFsbG93RnJhZ1NpemUpICsgMTsKKwkJLy8gVG8gZ2V0IGFjY3VyYXRlIG51bWJlciBvZiBmcmFnbWVudGF0aW9uLCBNaW51cyAxIGlmIHRoZSBzaXplIGp1c3QgbWF0Y2ggdG8gYWxsb3dhYmxlIGZyYWdtZW50IHNpemUKKwkJaWYgKCgoUGFja2V0SW5mby5Ub3RhbFBhY2tldExlbmd0aCAtIExFTkdUSF84MDJfMyArIExFTkdUSF84MDJfMV9IKSAlIEFsbG93RnJhZ1NpemUpID09IDApCisJCXsKKwkJCU51bWJlck9mRnJhZy0tOworCQl9CisJfQorCisJLy8gU2F2ZSBmcmFnbWVudCBudW1iZXIgdG8gTmRpcyBwYWNrZXQgcmVzZXJ2ZWQgZmllbGQKKwlSVE1QX1NFVF9QQUNLRVRfRlJBR01FTlRTKHBQYWNrZXQsIE51bWJlck9mRnJhZyk7CisKKworCS8vIFNURVAgMi4gQ2hlY2sgdGhlIHJlcXVpcmVtZW50IG9mIFJUUzoKKwkvLwkgICBJZiBtdWx0aXBsZSBmcmFnbWVudCByZXF1aXJlZCwgUlRTIGlzIHJlcXVpcmVkIG9ubHkgZm9yIHRoZSBmaXJzdCBmcmFnbWVudAorCS8vCSAgIGlmIHRoZSBmcmFnbWVudCBzaXplIGxhcmdlIHRoYW4gUlRTIHRocmVzaG9sZAorCS8vICAgICBGb3IgUlQyOHh4LCBMZXQgQVNJQyBzZW5kIFJUUy9DVFMKKwlSVE1QX1NFVF9QQUNLRVRfUlRTKHBQYWNrZXQsIDApOworCVJUTVBfU0VUX1BBQ0tFVF9UWFJBVEUocFBhY2tldCwgcEFkLT5Db21tb25DZmcuVHhSYXRlKTsKKworCS8vCisJLy8gU1RFUCAzLiBUcmFmZmljIGNsYXNzaWZpY2F0aW9uLiBvdXRjb21lID0gPFVzZXJQcmlvcml0eSwgUXVlSWR4PgorCS8vCisJVXNlclByaW9yaXR5ID0gMDsKKwlRdWVJZHgJCSA9IFFJRF9BQ19CRTsKKwlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XTU1fSU5VU0VEKSAmJgorCQlDTElFTlRfU1RBVFVTX1RFU1RfRkxBRyhwRW50cnksIGZDTElFTlRfU1RBVFVTX1dNTV9DQVBBQkxFKSkKKwl7CisJCVVTSE9SVCBQcm90b2NvbDsKKwkJVUNIQVIgIExsY1NuYXBMZW4gPSAwLCBCeXRlMCwgQnl0ZTE7CisJCWRvCisJCXsKKwkJCS8vIGdldCBFdGhlcm5ldCBwcm90b2NvbCBmaWVsZAorCQkJUHJvdG9jb2wgPSAoVVNIT1JUKSgocFNyY0J1ZlZBWzEyXSA8PCA4KSArIHBTcmNCdWZWQVsxM10pOworCQkJaWYgKFByb3RvY29sIDw9IDE1MDApCisJCQl7CisJCQkJLy8gZ2V0IEV0aGVybmV0IHByb3RvY29sIGZpZWxkIGZyb20gTExDL1NOQVAKKwkJCQlpZiAoU25pZmYyQnl0ZXNGcm9tTmRpc0J1ZmZlcihQYWNrZXRJbmZvLnBGaXJzdEJ1ZmZlciwgTEVOR1RIXzgwMl8zICsgNiwgJkJ5dGUwLCAmQnl0ZTEpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQkJCWJyZWFrOworCisJCQkJUHJvdG9jb2wgPSAoVVNIT1JUKSgoQnl0ZTAgPDwgOCkgKyBCeXRlMSk7CisJCQkJTGxjU25hcExlbiA9IDg7CisJCQl9CisKKwkJCS8vIGFsd2F5cyBBQ19CRSBmb3Igbm9uLUlQIHBhY2tldAorCQkJaWYgKFByb3RvY29sICE9IDB4MDgwMCkKKwkJCQlicmVhazsKKworCQkJLy8gZ2V0IElQIGhlYWRlcgorCQkJaWYgKFNuaWZmMkJ5dGVzRnJvbU5kaXNCdWZmZXIoUGFja2V0SW5mby5wRmlyc3RCdWZmZXIsIExFTkdUSF84MDJfMyArIExsY1NuYXBMZW4sICZCeXRlMCwgJkJ5dGUxKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCWJyZWFrOworCisJCQkvLyByZXR1cm4gQUNfQkUgaWYgcGFja2V0IGlzIG5vdCBJUHY0CisJCQlpZiAoKEJ5dGUwICYgMHhmMCkgIT0gMHg0MCkKKwkJCQlicmVhazsKKworCQkJRmxnSXNJUCA9IDE7CisJCQlVc2VyUHJpb3JpdHkgPSAoQnl0ZTEgJiAweGUwKSA+PiA1OworCQkJUXVlSWR4ID0gTWFwVXNlclByaW9yaXR5VG9BY2Nlc3NDYXRlZ29yeVtVc2VyUHJpb3JpdHldOworCisJCQkvLyBUT0RPOiBoYXZlIHRvIGNoZWNrIEFDTSBiaXQuIGFwcGx5IFRTUEVDIGlmIEFDTSBpcyBPTgorCQkJLy8gVE9ETzogZG93bmdyYWRlIFVQICYgUXVlSWR4IGJlZm9yZSBwYXNzaW5nIEFDTQorCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYkFDTVtRdWVJZHhdKQorCQkJeworCQkJCVVzZXJQcmlvcml0eSA9IDA7CisJCQkJUXVlSWR4CQkgPSBRSURfQUNfQkU7CisJCQl9CisJCX0gd2hpbGUgKEZBTFNFKTsKKwl9CisKKwlSVE1QX1NFVF9QQUNLRVRfVVAocFBhY2tldCwgVXNlclByaW9yaXR5KTsKKworCisKKwkvLyBNYWtlIHN1cmUgU2VuZFR4V2FpdCBxdWV1ZSByZXNvdXJjZSB3b24ndCBiZSB1c2VkIGJ5IG90aGVyIHRocmVhZHMKKwlSVE1QX0lSUV9MT0NLKCZwQWQtPmlycV9sb2NrLCBJcnFGbGFncyk7CisJaWYgKHBBZC0+VHhTd1F1ZXVlW1F1ZUlkeF0uTnVtYmVyID49IE1BWF9QQUNLRVRTX0lOX1FVRVVFKQorCXsKKwkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPmlycV9sb2NrLCBJcnFGbGFncyk7CisjaWZkZWYgQkxPQ0tfTkVUX0lGCisJCVN0b3BOZXRJZlF1ZXVlKHBBZCwgUXVlSWR4LCBwUGFja2V0KTsKKyNlbmRpZiAvLyBCTE9DS19ORVRfSUYgLy8KKwkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKwllbHNlCisJeworCQlJbnNlcnRUYWlsUXVldWUoJnBBZC0+VHhTd1F1ZXVlW1F1ZUlkeF0sIFBBQ0tFVF9UT19RVUVVRV9FTlRSWShwUGFja2V0KSk7CisJfQorCVJUTVBfSVJRX1VOTE9DSygmcEFkLT5pcnFfbG9jaywgSXJxRmxhZ3MpOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisgICAgaWYgKChwQWQtPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuQXV0b0JBID09IFRSVUUpJiYKKyAgICAgICAgSVNfSFRfU1RBKHBFbnRyeSkpCisJeworCSAgICAvL1BNQUNfVEFCTEVfRU5UUlkgcE1hY0VudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisJCWlmICgoKHBFbnRyeS0+VFhCQWJpdG1hcCAmICgxPDxVc2VyUHJpb3JpdHkpKSA9PSAwKSAmJgorICAgICAgICAgICAgKChwRW50cnktPkJBRGVjbGluZUJpdG1hcCAmICgxPDxVc2VyUHJpb3JpdHkpKSA9PSAwKSAmJgorICAgICAgICAgICAgKHBFbnRyeS0+UG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQpCisJCQkgLy8gRm9yIElPVCBjb21wYXRpYmlsaXR5LCBpZgorCQkJIC8vIDEuIEl0IGlzIFJhbGluayBjaGlwIG9yCisJCQkgLy8gMi4gSXQgaXMgT1BFTiBvciBBRVMgbW9kZSwKKwkJCSAvLyB0aGVuIEJBIHNlc3Npb24gY2FuIGJlIGJ1bGl0LgorCQkJICYmICgocEVudHJ5LT5WYWxpZEFzQ0xJICYmIHBBZC0+TWxtZUF1eC5BUFJhbGlua0llICE9IDB4MCkgfHwKKwkJCSAJIChwRW50cnktPldlcFN0YXR1cyA9PSBOZGlzODAyXzExV0VQRGlzYWJsZWQgfHwgcEVudHJ5LT5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkpCisJCQkpCisJCXsKKwkJCUJBT3JpU2Vzc2lvblNldFVwKHBBZCwgcEVudHJ5LCAwLCAwLCAxMCwgRkFMU0UpOworCQl9CisJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNPc1R4Q291bnRbUXVlSWR4XSsrOyAvLyBUT0RPOiBmb3IgZGVidWcgb25seS4gdG8gYmUgcmVtb3ZlZAorCXJldHVybiBORElTX1NUQVRVU19TVUNDRVNTOworfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlUaGlzIHN1YnJvdXRpbmUgd2lsbCBzY2FuIHRocm91Z2ggcmVsZWF0aXZlIHJpbmcgZGVzY3JpcHRvciB0byBmaW5kCisJCW91dCBhdmFsaWFibGUgZnJlZSByaW5nIGRlc2NyaXB0b3IgYW5kIGNvbXBhcmUgd2l0aCByZXF1ZXN0IHNpemUuCisKKwlBcmd1bWVudHM6CisJCXBBZCBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisJCVF1ZUlkeAkJU2VsZWN0ZWQgVFggUmluZworCisJUmV0dXJuIFZhbHVlOgorCQlORElTX1NUQVRVU19GQUlMVVJFIAlOb3QgZW5vdWdoIGZyZWUgZGVzY3JpcHRvcgorCQlORElTX1NUQVRVU19TVUNDRVNTIAlFbm91Z2ggZnJlZSBkZXNjcmlwdG9yCisKKwlJUlFMID0gUEFTU0lWRV9MRVZFTAorCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KKworI2lmZGVmIFJUMjg3MAorLyoKKwlBY3R1YWxseSwgdGhpcyBmdW5jdGlvbiB1c2VkIHRvIGNoZWNrIGlmIHRoZSBUeEhhcmR3YXJlIFF1ZXVlIHN0aWxsIGhhcyBmcmFtZSBuZWVkIHRvIHNlbmQuCisJSWYgbm8gZnJhbWUgbmVlZCB0byBzZW5kLCBnbyB0byBzbGVlcCwgZWxzZSwgc3RpbGwgd2FrZSB1cC4KKyovCitORElTX1NUQVRVUyBSVE1QRnJlZVRYRFJlcXVlc3QoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCQlVQ0hBUgkJCVF1ZUlkeCwKKwlJTgkJVUNIQVIJCQlOdW1iZXJSZXF1aXJlZCwKKwlJTgkJUFVDSEFSCQkJRnJlZU51bWJlcklzKQoreworCS8vVUxPTkcJCUZyZWVOdW1iZXIgPSAwOworCU5ESVNfU1RBVFVTIAlTdGF0dXMgPSBORElTX1NUQVRVU19GQUlMVVJFOworCXVuc2lnbmVkIGxvbmcgICBJcnFGbGFnczsKKwlIVF9UWF9DT05URVhUCSpwSFRUWENvbnRleHQ7CisKKwlzd2l0Y2ggKFF1ZUlkeCkKKwl7CisJCWNhc2UgUUlEX0FDX0JLOgorCQljYXNlIFFJRF9BQ19CRToKKwkJY2FzZSBRSURfQUNfVkk6CisJCWNhc2UgUUlEX0FDX1ZPOgorCQljYXNlIFFJRF9IQ0NBOgorCQkJeworCQkJCXBIVFRYQ29udGV4dCA9ICZwQWQtPlR4Q29udGV4dFtRdWVJZHhdOworCQkJCVJUTVBfSVJRX0xPQ0soJnBBZC0+VHhDb250ZXh0UXVldWVMb2NrW1F1ZUlkeF0sIElycUZsYWdzKTsKKwkJCQlpZiAoKHBIVFRYQ29udGV4dC0+Q3VyV3JpdGVQb3NpdGlvbiAhPSBwSFRUWENvbnRleHQtPkVOZXh0QnVsa091dFBvc2l0aW9uKSB8fAorCQkJCQkocEhUVFhDb250ZXh0LT5JUlBQZW5kaW5nID09IFRSVUUpKQorCQkJCXsKKwkJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwkJCQl9CisJCQkJUlRNUF9JUlFfVU5MT0NLKCZwQWQtPlR4Q29udGV4dFF1ZXVlTG9ja1tRdWVJZHhdLCBJcnFGbGFncyk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFFJRF9NR01UOgorCQkJaWYgKHBBZC0+TWdtdFJpbmcuVHhTd0ZyZWVJZHggIT0gTUdNVF9SSU5HX1NJWkUpCisJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfRkFJTFVSRTsKKwkJCWVsc2UKKwkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCgiUlRNUEZyZWVUWERSZXF1ZXN0OjpJbnZhbGlkIFF1ZUlkeCg9JWQpXG4iLCBRdWVJZHgpKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAoU3RhdHVzKTsKKworfQorI2VuZGlmIC8vIFJUMjg3MCAvLworCisKK1ZPSUQgUlRNUFNlbmREaXNhc3NvY2lhdGlvbkZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkKQoreworfQorCitWT0lECVJUTVBTZW5kTnVsbEZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVVDSEFSCQkJVHhSYXRlLAorCUlOCUJPT0xFQU4gCQliUW9zTnVsbCkKK3sKKwlVQ0hBUglOdWxsRnJhbWVbNDhdOworCVVMT05HCUxlbmd0aDsKKwlQSEVBREVSXzgwMl8xMQlwSGVhZGVyXzgwMl8xMTsKKworCisjaWZkZWYgUkFMSU5LX0FURQorCWlmKEFURV9PTihwQWQpKQorCXsKKwkJcmV0dXJuOworCX0KKyNlbmRpZiAvLyBSQUxJTktfQVRFIC8vCisKKyAgICAvLyBXUEEgODAyLjF4IHNlY3VyZWQgcG9ydCBjb250cm9sCisgICAgaWYgKCgocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKSB8fAorICAgICAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgfHwKKyAgICAgICAgIChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyKSB8fAorICAgICAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCQkJICB8fCAocEFkLT5TdGFDZmcuSUVFRTgwMjFYID09IFRSVUUpCisjZW5kaWYKKyAgICAgICAgKSAmJgorICAgICAgIChwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQpKQorCXsKKwkJcmV0dXJuOworCX0KKworCU5kaXNaZXJvTWVtb3J5KE51bGxGcmFtZSwgNDgpOworCUxlbmd0aCA9IHNpemVvZihIRUFERVJfODAyXzExKTsKKworCXBIZWFkZXJfODAyXzExID0gKFBIRUFERVJfODAyXzExKSBOdWxsRnJhbWU7CisKKwlwSGVhZGVyXzgwMl8xMS0+RkMuVHlwZSA9IEJUWVBFX0RBVEE7CisJcEhlYWRlcl84MDJfMTEtPkZDLlN1YlR5cGUgPSBTVUJUWVBFX05VTExfRlVOQzsKKwlwSGVhZGVyXzgwMl8xMS0+RkMuVG9EcyA9IDE7CisJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMiwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKworCWlmIChwQWQtPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlKQorCXsKKwkJcEhlYWRlcl84MDJfMTEtPkZDLlB3ck1nbXQgPSBQV1JfU0FWRTsKKwl9CisJZWxzZQorCXsKKwkJcEhlYWRlcl84MDJfMTEtPkZDLlB3ck1nbXQgPSAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKSA/IDE6IDA7CisJfQorCXBIZWFkZXJfODAyXzExLT5EdXJhdGlvbiA9IHBBZC0+Q29tbW9uQ2ZnLkRzaWZzICsgUlRNUENhbGNEdXJhdGlvbihwQWQsIFR4UmF0ZSwgMTQpOworCisJcEFkLT5TZXF1ZW5jZSsrOworCXBIZWFkZXJfODAyXzExLT5TZXF1ZW5jZSA9IHBBZC0+U2VxdWVuY2U7CisKKwkvLyBQcmVwYXJlIFFvc051bGwgZnVuY3Rpb24gZnJhbWUKKwlpZiAoYlFvc051bGwpCisJeworCQlwSGVhZGVyXzgwMl8xMS0+RkMuU3ViVHlwZSA9IFNVQlRZUEVfUU9TX05VTEw7CisKKwkJLy8gY29weSBRT1MgY29udHJvbCBieXRlcworCQlOdWxsRnJhbWVbTGVuZ3RoXQk9ICAwOworCQlOdWxsRnJhbWVbTGVuZ3RoKzFdID0gIDA7CisJCUxlbmd0aCArPSAyOy8vIGlmIHBhZCB3aXRoIDIgYnl0ZXMgZm9yIGFsaWdubWVudCwgQVBTRCB3aWxsIGZhaWwKKwl9CisKKwlIQUxfS2lja091dE51bGxGcmFtZVR4KHBBZCwgMCwgTnVsbEZyYW1lLCBMZW5ndGgpOworCit9CisKKy8vIElSUUwgPSBESVNQQVRDSF9MRVZFTAorVk9JRAlSVE1QU2VuZFJUU0ZyYW1lKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCXBEQSwKKwlJTgl1bnNpZ25lZCBpbnQJTmV4dE1wZHVTaXplLAorCUlOCVVDSEFSCQkJVHhSYXRlLAorCUlOCVVDSEFSCQkJUlRTUmF0ZSwKKwlJTglVU0hPUlQJCQlBY2tEdXJhdGlvbiwKKwlJTglVQ0hBUgkJCVF1ZUlkeCwKKwlJTglVQ0hBUgkJCUZyYW1lR2FwKQoreworfQorCisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBGSU5EIEVOQ1JZUFQgS0VZIEFORCBERUNJREUgQ0lQSEVSIEFMR09SSVRITQorLy8JCUZpbmQgdGhlIFdQQSBrZXksIGVpdGhlciBHcm91cCBvciBQYWlyd2lzZSBLZXkKKy8vCQlMRUFQICsgVEtJUCBhbHNvIHVzZSBXUEEga2V5LgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERlY2lkZSBXRVAgYml0IGFuZCBjaXBoZXIgc3VpdGUgdG8gYmUgdXNlZC4gU2FtZSBjaXBoZXIgc3VpdGUgc2hvdWxkIGJlIHVzZWQgZm9yIHdob2xlIGZyYWdtZW50IGJ1cnN0CisvLyBJbiBDaXNjbyBDQ1ggMi4wIExlYXAgQXV0aGVudGljYXRpb24KKy8vCQkgICBXZXBTdGF0dXMgaXMgTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCBidXQgdGhlIGtleSB3aWxsIHVzZSBQYWlyd2lzZUtleQorLy8JCSAgIEluc3RlYWQgb2YgdGhlIFNoYXJlZEtleSwgU2hhcmVkS2V5IExlbmd0aCBtYXkgYmUgWmVyby4KK1ZPSUQgU1RBRmluZENpcGhlckFsZ29yaXRobSgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrKQoreworCU5ESVNfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCUNpcGhlcjsJCQkJLy8gVG8gaW5kaWNhdGUgY2lwaGVyIHVzZWQgZm9yIHRoaXMgcGFja2V0CisJVUNIQVIJCQkJCQkJQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CQkvLyBjaXBoZXIgYWxvZ3JpdGhtCisJVUNIQVIJCQkJCQkJS2V5SWR4ID0gMHhmZjsKKwlQVUNIQVIJCQkJCQkJcFNyY0J1ZlZBOworCVBDSVBIRVJfS0VZCQkJCQkJcEtleSA9IE5VTEw7CisKKwlwU3JjQnVmVkEgPSBHRVRfT1NfUEtUX0RBVEFQVFIocFR4QmxrLT5wUGFja2V0KTsKKworCXsKKwkgICAgLy8gU2VsZWN0IENpcGhlcgorCSAgICBpZiAoKCpwU3JjQnVmVkEgJiAweDAxKSAmJiAoQURIT0NfT04ocEFkKSkpCisJICAgICAgICBDaXBoZXIgPSBwQWQtPlN0YUNmZy5Hcm91cENpcGhlcjsgLy8gQ2lwaGVyIGZvciBNdWx0aWNhc3Qgb3IgQnJvYWRjYXN0CisJICAgIGVsc2UKKwkgICAgICAgIENpcGhlciA9IHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXI7IC8vIENpcGhlciBmb3IgVW5pY2FzdAorCisJCWlmIChSVE1QX0dFVF9QQUNLRVRfRUFQT0wocFR4QmxrLT5wUGFja2V0KSkKKwkJeworCQkJQVNTRVJUKHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA8PSBDSVBIRVJfQ0tJUDEyOCk7CisKKwkJCS8vIDQtd2F5IGhhbmRzaGFraW5nIGZyYW1lIG11c3QgYmUgY2xlYXIKKwkJCWlmICghKFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYkNsZWFyRUFQRnJhbWUpKSAmJiAocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnKSAmJgorCQkJCShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXlMZW4pKQorCQkJeworCQkJCUNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZzsKKwkJCQlLZXlJZHggPSAwOworCQkJfQorCQl9CisJCWVsc2UgaWYgKENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjFFbmFibGVkKQorCQl7CisjaWZkZWYgTEVBUF9TVVBQT1JUCisJCQlpZiAocEFkLT5TdGFDZmcuQ2tpcEZsYWcgJiAweDEwKSAvLyBDaXNjbyBDS0lQIEtQIGlzIG9uCisJCQl7CisJCQkJaWYgKExFQVBfQ0NLTV9PTihwQWQpKQorCQkJCXsKKwkJCQkJaWYgKCgoKnBTcmNCdWZWQSAmIDB4MDEpICYmIChBREhPQ19PTihwQWQpKSkpCisJCQkJCQlLZXlJZHggPSAxOworCQkJCQllbHNlCisJCQkJCQlLZXlJZHggPSAwOworCQkJCX0KKwkJCQllbHNlCisJCQkJCUtleUlkeCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZDsKKwkJCX0KKwkJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkNraXBGbGFnICYgMHgwOCkgLy8gb25seSBDS0lQIENNSUMKKwkJCQlLZXlJZHggPSBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQ7CisJCQllbHNlIGlmIChMRUFQX0NDS01fT04ocEFkKSkKKwkJCXsKKwkJCQlpZiAoKCpwU3JjQnVmVkEgJiAweDAxKSAmJiAoQURIT0NfT04ocEFkKSkpCisJCQkJCUtleUlkeCA9IDE7CisJCQkJZWxzZQorCQkJCQlLZXlJZHggPSAwOworCQkJfQorCQkJZWxzZQkvLyBzdGFuZGFyZCBXRVA2NCBvciBXRVAxMjgKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKwkJCQlLZXlJZHggPSBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQ7CisJCX0KKwkJZWxzZSBpZiAoKENpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSB8fAorCQkJCSAoQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpKQorCQl7CisJCQlpZiAoKCpwU3JjQnVmVkEgJiAweDAxKSAmJiAoQURIT0NfT04ocEFkKSkpIC8vIG11bHRpY2FzdAorCQkJCUtleUlkeCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZDsKKwkJCWVsc2UgaWYgKHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleUxlbikKKwkJCQlLZXlJZHggPSAwOworCQkJZWxzZQorCQkJCUtleUlkeCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZDsKKwkJfQorCisJCWlmIChLZXlJZHggPT0gMHhmZikKKwkJCUNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCQllbHNlIGlmICgoQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uRGlzYWJsZWQpIHx8IChwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleUxlbiA9PSAwKSkKKwkJCUNpcGhlckFsZyA9IENJUEhFUl9OT05FOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwkgICAgZWxzZSBpZiAoIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCAmJgorCSAgICAgICAgICAgICAoQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMUVuYWJsZWQpICYmCisJICAgICAgICAgICAgIChwQWQtPlN0YUNmZy5JRUVFODAyMVggPT0gVFJVRSkgJiYKKwkgICAgICAgICAgICAgKHBBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRCkpCisJICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisJCWVsc2UKKwkJeworCQkJLy9IZWFkZXJfODAyXzExLkZDLldlcCA9IDE7CisJCQlDaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZzsKKwkJCXBLZXkgPSAmcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XTsKKwkJfQorCX0KKworCXBUeEJsay0+Q2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCXBUeEJsay0+cEtleSA9IHBLZXk7Cit9CisKKworVk9JRCBTVEFCdWlsZENvbW1vbjgwMl8xMUhlYWRlcigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgVFhfQkxLICAgICAgICAgICpwVHhCbGspCit7CisKKwlIRUFERVJfODAyXzExCSpwSGVhZGVyXzgwMl8xMTsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwlCT09MRUFOCWJETFNGcmFtZSA9IEZBTFNFOworCUlOVAlEbHNFbnRyeUluZGV4ID0gMDsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKworCS8vCisJLy8gTUFLRSBBIENPTU1PTiA4MDIuMTEgSEVBREVSCisJLy8KKworCS8vIG5vcm1hbCB3bGFuIGhlYWRlciBzaXplIDogMjQgb2N0ZXRzCisJcFR4QmxrLT5NcGR1SGVhZGVyTGVuID0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJcEhlYWRlcl84MDJfMTEgPSAoSEVBREVSXzgwMl8xMSAqKSAmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOworCisJTmRpc1plcm9NZW1vcnkocEhlYWRlcl84MDJfMTEsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisKKwlwSGVhZGVyXzgwMl8xMS0+RkMuRnJEcyA9IDA7CisJcEhlYWRlcl84MDJfMTEtPkZDLlR5cGUgPSBCVFlQRV9EQVRBOworCXBIZWFkZXJfODAyXzExLT5GQy5TdWJUeXBlID0gKChUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JXTU0pKSA/IFNVQlRZUEVfUURBVEEgOiBTVUJUWVBFX0RBVEEpOworCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJaWYgKElORlJBX09OKHBBZCkpCisJeworCQkvLyBDaGVjayBpZiB0aGUgZnJhbWUgY2FuIGJlIHNlbnQgdGhyb3VnaCBETFMgZGlyZWN0IGxpbmsgaW50ZXJmYWNlCisJCS8vIElmIHBhY2tldCBjYW4gYmUgc2VudCB0aHJvdWdoIERMUywgdGhlbiBmb3JjZSBhZ2dyZWdhdGlvbiBkaXNhYmxlLiAoSGFyZCB0byBkZXRlcm1pbmUgcGVlciBTVEEncyBjYXBhYmlsaXR5KQorCQlEbHNFbnRyeUluZGV4ID0gUlRNUENoZWNrRExTRnJhbWUocEFkLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIpOworCQlpZiAoRGxzRW50cnlJbmRleCA+PSAwKQorCQkJYkRMU0ZyYW1lID0gVFJVRTsKKwkJZWxzZQorCQkJYkRMU0ZyYW1lID0gRkFMU0U7CisJfQorI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisgICAgaWYgKHBUeEJsay0+cE1hY0VudHJ5KQorCXsKKwkJaWYgKFRYX0JMS19URVNUX0ZMQUcocFR4QmxrLCBmVFhfYkZvcmNlTm9uUW9TKSkKKwkJeworCQkJcEhlYWRlcl84MDJfMTEtPlNlcXVlbmNlID0gcFR4QmxrLT5wTWFjRW50cnktPk5vblFvc0RhdGFTZXE7CisJCQlwVHhCbGstPnBNYWNFbnRyeS0+Tm9uUW9zRGF0YVNlcSA9IChwVHhCbGstPnBNYWNFbnRyeS0+Tm9uUW9zRGF0YVNlcSsxKSAmIE1BWFNFUTsKKwkJfQorCQllbHNlCisJCXsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJCWlmIChiRExTRnJhbWUpCisJCQl7CisJCQkJcEhlYWRlcl84MDJfMTEtPlNlcXVlbmNlID0gcEFkLT5TdGFDZmcuRExTRW50cnlbRGxzRW50cnlJbmRleF0uU2VxdWVuY2U7CisJCQkJcEFkLT5TdGFDZmcuRExTRW50cnlbRGxzRW50cnlJbmRleF0uU2VxdWVuY2UgPSAocEFkLT5TdGFDZmcuRExTRW50cnlbRGxzRW50cnlJbmRleF0uU2VxdWVuY2UrMSkgJiBNQVhTRVE7CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJCQl7CisgICAgCSAgICBwSGVhZGVyXzgwMl8xMS0+U2VxdWVuY2UgPSBwVHhCbGstPnBNYWNFbnRyeS0+VHhTZXFbcFR4QmxrLT5Vc2VyUHJpb3JpdHldOworICAgIAkgICAgcFR4QmxrLT5wTWFjRW50cnktPlR4U2VxW3BUeEJsay0+VXNlclByaW9yaXR5XSA9IChwVHhCbGstPnBNYWNFbnRyeS0+VHhTZXFbcFR4QmxrLT5Vc2VyUHJpb3JpdHldKzEpICYgTUFYU0VROworICAgIAl9CisJfQorCX0KKwllbHNlCisJeworCQlwSGVhZGVyXzgwMl8xMS0+U2VxdWVuY2UgPSBwQWQtPlNlcXVlbmNlOworCQlwQWQtPlNlcXVlbmNlID0gKHBBZC0+U2VxdWVuY2UrMSkgJiBNQVhTRVE7IC8vIG5leHQgc2VxdWVuY2UKKwl9CisKKwlwSGVhZGVyXzgwMl8xMS0+RnJhZyA9IDA7CisKKwlwSGVhZGVyXzgwMl8xMS0+RkMuTW9yZURhdGEgPSBUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JNb3JlRGF0YSk7CisKKwl7CisJCWlmIChJTkZSQV9PTihwQWQpKQorCQl7CisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCQlpZiAoYkRMU0ZyYW1lKQorCQkJeworCQkJCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIxLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIpOworCQkJCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIyLCBwQWQtPkN1cnJlbnRBZGRyZXNzKTsKKwkJCQlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQkJCXBIZWFkZXJfODAyXzExLT5GQy5Ub0RzID0gMDsKKwkJCX0KKwkJCWVsc2UKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJCXsKKwkJCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIxLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMiwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisJCQlDT1BZX01BQ19BRERSKHBIZWFkZXJfODAyXzExLT5BZGRyMywgcFR4QmxrLT5wU3JjQnVmSGVhZGVyKTsKKwkJCXBIZWFkZXJfODAyXzExLT5GQy5Ub0RzID0gMTsKKwkJfQorCQl9CisJCWVsc2UgaWYgKEFESE9DX09OKHBBZCkpCisJCXsKKwkJCUNPUFlfTUFDX0FERFIocEhlYWRlcl84MDJfMTEtPkFkZHIxLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIpOworCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjIsIHBBZC0+Q3VycmVudEFkZHJlc3MpOworCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyXzgwMl8xMS0+QWRkcjMsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkKTsKKwkJCXBIZWFkZXJfODAyXzExLT5GQy5Ub0RzID0gMDsKKwkJfQorCX0KKworCWlmIChwVHhCbGstPkNpcGhlckFsZyAhPSBDSVBIRVJfTk9ORSkKKwkJcEhlYWRlcl84MDJfMTEtPkZDLldlcCA9IDE7CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIFNURVAgMi4gTUFLRSBBIENPTU1PTiA4MDIuMTEgSEVBREVSIFNIQVJFRCBCWSBFTlRJUkUgRlJBR01FTlQgQlVSU1QuIEZpbGwgc2VxdWVuY2UgbGF0ZXIuCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZSkKKyAgICAJcEhlYWRlcl84MDJfMTEtPkZDLlB3ck1nbXQgPSBQV1JfU0FWRTsKKwllbHNlCisgICAgCXBIZWFkZXJfODAyXzExLT5GQy5Qd3JNZ210ID0gKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSk7Cit9CisKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKK1ZPSUQgU1RBQnVpbGRDYWNoZTgwMl8xMUhlYWRlcigKKwlJTiBSVE1QX0FEQVBURVIJCSpwQWQsCisJSU4gVFhfQkxLCQkJKnBUeEJsaywKKwlJTiBVQ0hBUgkJCSpwSGVhZGVyKQoreworCU1BQ19UQUJMRV9FTlRSWQkqcE1hY0VudHJ5OworCVBIRUFERVJfODAyXzExCXBIZWFkZXI4MDIxMTsKKworCXBIZWFkZXI4MDIxMSA9IChQSEVBREVSXzgwMl8xMSlwSGVhZGVyOworCXBNYWNFbnRyeSA9IHBUeEJsay0+cE1hY0VudHJ5OworCisJLy8KKwkvLyBVcGRhdGUgdGhlIGNhY2hlZCA4MDIuMTEgSEVBREVSCisJLy8KKworCS8vIG5vcm1hbCB3bGFuIGhlYWRlciBzaXplIDogMjQgb2N0ZXRzCisJcFR4QmxrLT5NcGR1SGVhZGVyTGVuID0gc2l6ZW9mKEhFQURFUl84MDJfMTEpOworCisJLy8gTW9yZSBCaXQKKwlwSGVhZGVyODAyMTEtPkZDLk1vcmVEYXRhID0gVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iTW9yZURhdGEpOworCisJLy8gU2VxdWVuY2UKKwlwSGVhZGVyODAyMTEtPlNlcXVlbmNlID0gcE1hY0VudHJ5LT5UeFNlcVtwVHhCbGstPlVzZXJQcmlvcml0eV07CisgICAgcE1hY0VudHJ5LT5UeFNlcVtwVHhCbGstPlVzZXJQcmlvcml0eV0gPSAocE1hY0VudHJ5LT5UeFNlcVtwVHhCbGstPlVzZXJQcmlvcml0eV0rMSkgJiBNQVhTRVE7CisKKwl7CisJCS8vIENoZWNrIGlmIHRoZSBmcmFtZSBjYW4gYmUgc2VudCB0aHJvdWdoIERMUyBkaXJlY3QgbGluayBpbnRlcmZhY2UKKwkJLy8gSWYgcGFja2V0IGNhbiBiZSBzZW50IHRocm91Z2ggRExTLCB0aGVuIGZvcmNlIGFnZ3JlZ2F0aW9uIGRpc2FibGUuIChIYXJkIHRvIGRldGVybWluZSBwZWVyIFNUQSdzIGNhcGFiaWxpdHkpCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCUJPT0xFQU4JYkRMU0ZyYW1lID0gRkFMU0U7CisJCUlOVAlEbHNFbnRyeUluZGV4ID0gMDsKKworCQlEbHNFbnRyeUluZGV4ID0gUlRNUENoZWNrRExTRnJhbWUocEFkLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIpOworCQlpZiAoRGxzRW50cnlJbmRleCA+PSAwKQorCQkJYkRMU0ZyYW1lID0gVFJVRTsKKwkJZWxzZQorCQkJYkRMU0ZyYW1lID0gRkFMU0U7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisKKwkJLy8gVGhlIGFkZHIzIG9mIG5vcm1hbCBwYWNrZXQgc2VuZCBmcm9tIERTIGlzIERlc3QgTWFjIGFkZHJlc3MuCisjaWZkZWYgUU9TX0RMU19TVVBQT1JUCisJCWlmIChiRExTRnJhbWUpCisJCXsKKwkJCUNPUFlfTUFDX0FERFIocEhlYWRlcjgwMjExLT5BZGRyMSwgcFR4QmxrLT5wU3JjQnVmSGVhZGVyKTsKKwkJCUNPUFlfTUFDX0FERFIocEhlYWRlcjgwMjExLT5BZGRyMywgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQkJcEhlYWRlcjgwMjExLT5GQy5Ub0RzID0gMDsKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJCWlmIChBREhPQ19PTihwQWQpKQorCQkJQ09QWV9NQUNfQUREUihwSGVhZGVyODAyMTEtPkFkZHIzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCWVsc2UKKwkJCUNPUFlfTUFDX0FERFIocEhlYWRlcjgwMjExLT5BZGRyMywgcFR4QmxrLT5wU3JjQnVmSGVhZGVyKTsKKwl9CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS8vIFNURVAgMi4gTUFLRSBBIENPTU1PTiA4MDIuMTEgSEVBREVSIFNIQVJFRCBCWSBFTlRJUkUgRlJBR01FTlQgQlVSU1QuIEZpbGwgc2VxdWVuY2UgbGF0ZXIuCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZSkKKyAgICAJcEhlYWRlcjgwMjExLT5GQy5Qd3JNZ210ID0gUFdSX1NBVkU7CisJZWxzZQorICAgIAlwSGVhZGVyODAyMTEtPkZDLlB3ck1nbXQgPSAocEFkLT5TdGFDZmcuUHNtID09IFBXUl9TQVZFKTsKK30KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworc3RhdGljIGlubGluZSBQVUNIQVIgU1RBX0J1aWxkX0FSYWxpbmtfRnJhbWVfSGVhZGVyKAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFRYX0JMSwkJKnBUeEJsaykKK3sKKwlQVUNIQVIJCQlwSGVhZGVyQnVmUHRyOworCUhFQURFUl84MDJfMTEJKnBIZWFkZXJfODAyXzExOworCVBORElTX1BBQ0tFVAlwTmV4dFBhY2tldDsKKwlVSU5UMzIJCQluZXh0QnVmTGVuOworCVBRVUVVRV9FTlRSWQlwUUVudHJ5OworCisJU1RBRmluZENpcGhlckFsZ29yaXRobShwQWQsIHBUeEJsayk7CisJU1RBQnVpbGRDb21tb244MDJfMTFIZWFkZXIocEFkLCBwVHhCbGspOworCisKKwlwSGVhZGVyQnVmUHRyID0gJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFICsgVFhXSV9TSVpFXTsKKwlwSGVhZGVyXzgwMl8xMSA9IChIRUFERVJfODAyXzExICopIHBIZWFkZXJCdWZQdHI7CisKKwkvLyBzdGVhbCAib3JkZXIiIGJpdCB0byBtYXJrICJhZ2dyZWdhdGlvbiIKKwlwSGVhZGVyXzgwMl8xMS0+RkMuT3JkZXIgPSAxOworCisJLy8gc2tpcCBjb21tb24gaGVhZGVyCisJcEhlYWRlckJ1ZlB0ciArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47CisKKwlpZiAoVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iV01NKSkKKwl7CisJCS8vCisJCS8vIGJ1aWxkIFFPUyBDb250cm9sIGJ5dGVzCisJCS8vCisJCSpwSGVhZGVyQnVmUHRyID0gKHBUeEJsay0+VXNlclByaW9yaXR5ICYgMHgwRik7CisKKwkJKihwSGVhZGVyQnVmUHRyKzEpID0gMDsKKwkJcEhlYWRlckJ1ZlB0ciArPTI7CisJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSAyOworCX0KKworCS8vIHBhZGRpbmcgYXQgZnJvbnQgb2YgTExDIGhlYWRlci4gTExDIGhlYWRlciBzaG91bGQgYXQgNC1ieXRlcyBhbGlnbWVudC4KKwlwVHhCbGstPkhkclBhZExlbiA9IChVTE9ORylwSGVhZGVyQnVmUHRyOworCXBIZWFkZXJCdWZQdHIgPSAoUENIQVIpUk9VTkRfVVAocEhlYWRlckJ1ZlB0ciwgNCk7CisJcFR4QmxrLT5IZHJQYWRMZW4gPSAoVUxPTkcpKHBIZWFkZXJCdWZQdHIgLSBwVHhCbGstPkhkclBhZExlbik7CisKKwkvLyBGb3IgUkEgQWdncmVnYXRpb24sCisJLy8gcHV0IHRoZSAybmQgTVNEVSBsZW5ndGgoZXh0cmEgMi1ieXRlIGZpZWxkKSBhZnRlciBRT1NfQ09OVFJPTCBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdAorCXBRRW50cnkgPSBwVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkOworCXBOZXh0UGFja2V0ID0gUVVFVUVfRU5UUllfVE9fUEtUKHBRRW50cnkpOworCW5leHRCdWZMZW4gPSBHRVRfT1NfUEtUX0xFTihwTmV4dFBhY2tldCk7CisJaWYgKFJUTVBfR0VUX1BBQ0tFVF9WTEFOKHBOZXh0UGFja2V0KSkKKwkJbmV4dEJ1ZkxlbiAtPSBMRU5HVEhfODAyXzFROworCisJKnBIZWFkZXJCdWZQdHIgPSAoVUNIQVIpbmV4dEJ1ZkxlbiAmIDB4ZmY7CisJKihwSGVhZGVyQnVmUHRyKzEpID0gKFVDSEFSKShuZXh0QnVmTGVuID4+IDgpOworCisJcEhlYWRlckJ1ZlB0ciArPSAyOworCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSAyOworCisJcmV0dXJuIHBIZWFkZXJCdWZQdHI7CisKK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorc3RhdGljIGlubGluZSBQVUNIQVIgU1RBX0J1aWxkX0FNU0RVX0ZyYW1lX0hlYWRlcigKKwlJTiBSVE1QX0FEQVBURVIgKnBBZCwKKwlJTiBUWF9CTEsJCSpwVHhCbGspCit7CisJUFVDSEFSCQkJcEhlYWRlckJ1ZlB0cjsvLywgcFNhdmVCdWZQdHI7CisJSEVBREVSXzgwMl8xMQkqcEhlYWRlcl84MDJfMTE7CisKKworCVNUQUZpbmRDaXBoZXJBbGdvcml0aG0ocEFkLCBwVHhCbGspOworCVNUQUJ1aWxkQ29tbW9uODAyXzExSGVhZGVyKHBBZCwgcFR4QmxrKTsKKworCXBIZWFkZXJCdWZQdHIgPSAmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOworCXBIZWFkZXJfODAyXzExID0gKEhFQURFUl84MDJfMTEgKikgcEhlYWRlckJ1ZlB0cjsKKworCS8vIHNraXAgY29tbW9uIGhlYWRlcgorCXBIZWFkZXJCdWZQdHIgKz0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuOworCisJLy8KKwkvLyBidWlsZCBRT1MgQ29udHJvbCBieXRlcworCS8vCisJKnBIZWFkZXJCdWZQdHIgPSAocFR4QmxrLT5Vc2VyUHJpb3JpdHkgJiAweDBGKTsKKworCS8vCisJLy8gQS1NU0RVIHBhY2tldAorCS8vCisJKnBIZWFkZXJCdWZQdHIgfD0gMHg4MDsKKworCSoocEhlYWRlckJ1ZlB0cisxKSA9IDA7CisJcEhlYWRlckJ1ZlB0ciArPTI7CisJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IDI7CisKKwkvL3BTYXZlQnVmUHRyID0gcEhlYWRlckJ1ZlB0cjsKKworCS8vCisJLy8gcGFkZGluZyBhdCBmcm9udCBvZiBMTEMgaGVhZGVyCisJLy8gTExDIGhlYWRlciBzaG91bGQgbG9jYXRlIGF0IDQtb2N0ZXRzIGFsaWdtZW50CisJLy8KKwkvLyBAQEAgTXBkdUhlYWRlckxlbiBleGNsdWRpbmcgcGFkZGluZyBAQEAKKwkvLworCXBUeEJsay0+SGRyUGFkTGVuID0gKFVMT05HKXBIZWFkZXJCdWZQdHI7CisJcEhlYWRlckJ1ZlB0ciA9IChQQ0hBUikgUk9VTkRfVVAocEhlYWRlckJ1ZlB0ciwgNCk7CisJcFR4QmxrLT5IZHJQYWRMZW4gPSAoVUxPTkcpKHBIZWFkZXJCdWZQdHIgLSBwVHhCbGstPkhkclBhZExlbik7CisKKwlyZXR1cm4gcEhlYWRlckJ1ZlB0cjsKKworfQorCisKK1ZPSUQgU1RBX0FNUERVX0ZyYW1lX1R4KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGspCit7CisJSEVBREVSXzgwMl8xMQkqcEhlYWRlcl84MDJfMTE7CisJUFVDSEFSCQkJcEhlYWRlckJ1ZlB0cjsKKwlVU0hPUlQJCQlGcmVlTnVtYmVyOworCU1BQ19UQUJMRV9FTlRSWQkqcE1hY0VudHJ5OworCUJPT0xFQU4JCQliVkxBTlBrdDsKKwlQUVVFVUVfRU5UUlkJcFFFbnRyeTsKKworCUFTU0VSVChwVHhCbGspOworCisJd2hpbGUocFR4QmxrLT5UeFBhY2tldExpc3QuSGVhZCkKKwl7CisJCXBRRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0KTsKKwkJcFR4QmxrLT5wUGFja2V0ID0gUVVFVUVfRU5UUllfVE9fUEFDS0VUKHBRRW50cnkpOworCQlpZiAoIFJUTVBfRmlsbFR4QmxrSW5mbyhwQWQsIHBUeEJsaykgIT0gVFJVRSkKKwkJeworCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBUeEJsay0+cFBhY2tldCwgTkRJU19TVEFUVVNfRkFJTFVSRSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWJWTEFOUGt0ID0gKFJUTVBfR0VUX1BBQ0tFVF9WTEFOKHBUeEJsay0+cFBhY2tldCkgPyBUUlVFIDogRkFMU0UpOworCisJCXBNYWNFbnRyeSA9IHBUeEJsay0+cE1hY0VudHJ5OworCQlpZiAocE1hY0VudHJ5LT5pc0NhY2hlZCkKKwkJeworCQkJLy8gTk9URTogUGxlYXNlIG1ha2Ugc3VyZSB0aGUgc2l6ZSBvZiBwTWFjRW50cnktPkNhY2hlZEJ1ZltdIGlzIHNtYWxsZXIgdGhhbiBwVHhCbGstPkhlYWRlckJ1ZltdISEhIQorCQkJTmRpc01vdmVNZW1vcnkoKFBVQ0hBUikmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdLCAoUFVDSEFSKSZwTWFjRW50cnktPkNhY2hlZEJ1ZlswXSwgVFhXSV9TSVpFICsgc2l6ZW9mKEhFQURFUl84MDJfMTEpKTsKKwkJCXBIZWFkZXJCdWZQdHIgPSAoUFVDSEFSKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdKTsKKwkJCVNUQUJ1aWxkQ2FjaGU4MDJfMTFIZWFkZXIocEFkLCBwVHhCbGssIHBIZWFkZXJCdWZQdHIpOworCQl9CisJCWVsc2UKKwkJeworCQkJU1RBRmluZENpcGhlckFsZ29yaXRobShwQWQsIHBUeEJsayk7CisJCQlTVEFCdWlsZENvbW1vbjgwMl8xMUhlYWRlcihwQWQsIHBUeEJsayk7CisKKwkJCXBIZWFkZXJCdWZQdHIgPSAmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkUgKyBUWFdJX1NJWkVdOworCQl9CisKKworCQlwSGVhZGVyXzgwMl8xMSA9IChIRUFERVJfODAyXzExICopIHBIZWFkZXJCdWZQdHI7CisKKwkJLy8gc2tpcCBjb21tb24gaGVhZGVyCisJCXBIZWFkZXJCdWZQdHIgKz0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuOworCisJCS8vCisJCS8vIGJ1aWxkIFFPUyBDb250cm9sIGJ5dGVzCisJCS8vCisJCSpwSGVhZGVyQnVmUHRyID0gKHBUeEJsay0+VXNlclByaW9yaXR5ICYgMHgwRik7CisJCSoocEhlYWRlckJ1ZlB0cisxKSA9IDA7CisJCXBIZWFkZXJCdWZQdHIgKz0yOworCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gMjsKKworCQkvLworCQkvLyBidWlsZCBIVEMrCisJCS8vIEhUQyBjb250cm9sIGZpbGVkIGZvbGxvd2luZyBRb1MgZmllbGQKKwkJLy8KKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5iUmRnID09IFRSVUUpICYmIENMSUVOVF9TVEFUVVNfVEVTVF9GTEFHKHBUeEJsay0+cE1hY0VudHJ5LCBmQ0xJRU5UX1NUQVRVU19SREdfQ0FQQUJMRSkpCisJCXsKKwkJCWlmIChwTWFjRW50cnktPmlzQ2FjaGVkID09IEZBTFNFKQorCQkJeworCQkJCS8vIG1hcmsgSFRDIGJpdAorCQkJCXBIZWFkZXJfODAyXzExLT5GQy5PcmRlciA9IDE7CisKKwkJCQlOZGlzWmVyb01lbW9yeShwSGVhZGVyQnVmUHRyLCA0KTsKKwkJCQkqKHBIZWFkZXJCdWZQdHIrMykgfD0gMHg4MDsKKwkJCX0KKwkJCXBIZWFkZXJCdWZQdHIgKz0gNDsKKwkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSA0OworCQl9CisKKwkJLy9wVHhCbGstPk1wZHVIZWFkZXJMZW4gPSBwSGVhZGVyQnVmUHRyIC0gcFR4QmxrLT5IZWFkZXJCdWYgLSBUWFdJX1NJWkUgLSBUWElORk9fU0laRTsKKwkJQVNTRVJUKHBUeEJsay0+TXBkdUhlYWRlckxlbiA+PSAyNCk7CisKKwkJLy8gc2tpcCA4MDIuMyBoZWFkZXIKKwkJcFR4QmxrLT5wU3JjQnVmRGF0YSA9IHBUeEJsay0+cFNyY0J1ZkhlYWRlciArIExFTkdUSF84MDJfMzsKKwkJcFR4QmxrLT5TcmNCdWZMZW4gIC09IExFTkdUSF84MDJfMzsKKworCQkvLyBza2lwIHZsYW4gdGFnCisJCWlmIChiVkxBTlBrdCkKKwkJeworCQkJcFR4QmxrLT5wU3JjQnVmRGF0YQkrPSBMRU5HVEhfODAyXzFROworCQkJcFR4QmxrLT5TcmNCdWZMZW4JLT0gTEVOR1RIXzgwMl8xUTsKKwkJfQorCisJCS8vCisJCS8vIHBhZGRpbmcgYXQgZnJvbnQgb2YgTExDIGhlYWRlcgorCQkvLyBMTEMgaGVhZGVyIHNob3VsZCBsb2NhdGUgYXQgNC1vY3RldHMgYWxpZ21lbnQKKwkJLy8KKwkJLy8gQEBAIE1wZHVIZWFkZXJMZW4gZXhjbHVkaW5nIHBhZGRpbmcgQEBACisJCS8vCisJCXBUeEJsay0+SGRyUGFkTGVuID0gKFVMT05HKXBIZWFkZXJCdWZQdHI7CisJCXBIZWFkZXJCdWZQdHIgPSAoUENIQVIpIFJPVU5EX1VQKHBIZWFkZXJCdWZQdHIsIDQpOworCQlwVHhCbGstPkhkclBhZExlbiA9IChVTE9ORykocEhlYWRlckJ1ZlB0ciAtIHBUeEJsay0+SGRyUGFkTGVuKTsKKworCQl7CisKKwkJCS8vCisJCQkvLyBJbnNlcnQgTExDLVNOQVAgZW5jYXBzdWxhdGlvbiAtIDggb2N0ZXRzCisJCQkvLworCQkJRVhUUkFfTExDU05BUF9FTkNBUF9GUk9NX1BLVF9PRkZTRVQocFR4QmxrLT5wU3JjQnVmRGF0YS0yLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCk7CisJCQlpZiAocFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXApCisJCQl7CisJCQkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwgcFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXAsIDYpOworCQkJCXBIZWFkZXJCdWZQdHIgKz0gNjsKKwkJCQkvLyBnZXQgMiBvY3RldHMgKFR5cGVvZkxlbikKKwkJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBTcmNCdWZEYXRhLTIsIDIpOworCQkJCXBIZWFkZXJCdWZQdHIgKz0gMjsKKwkJCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gTEVOR1RIXzgwMl8xX0g7CisJCQl9CisKKwkJfQorCisJCWlmIChwTWFjRW50cnktPmlzQ2FjaGVkKQorCQl7CisgICAgICAgICAgICBSVE1QV3JpdGVUeFdJX0NhY2hlKHBBZCwgKFBUWFdJX1NUUlVDKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKSwgcFR4QmxrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVJUTVBXcml0ZVR4V0lfRGF0YShwQWQsIChQVFhXSV9TVFJVQykoJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFXSksIHBUeEJsayk7CisKKwkJCU5kaXNaZXJvTWVtb3J5KChQVUNIQVIpKCZwTWFjRW50cnktPkNhY2hlZEJ1ZlswXSksIHNpemVvZihwTWFjRW50cnktPkNhY2hlZEJ1ZikpOworCQkJTmRpc01vdmVNZW1vcnkoKFBVQ0hBUikoJnBNYWNFbnRyeS0+Q2FjaGVkQnVmWzBdKSwgKFBVQ0hBUikoJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFXSksIChwSGVhZGVyQnVmUHRyIC0gKFBVQ0hBUikoJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFXSkpKTsKKwkJCXBNYWNFbnRyeS0+aXNDYWNoZWQgPSBUUlVFOworCQl9CisKKwkJLy8gY2FsY3VsYXRlIFRyYW5zbWl0dGVkIEFNUERVIGNvdW50IGFuZCBCeXRlQ291bnQKKwkJeworCQkJcEFkLT5SYWxpbmtDb3VudGVycy5UcmFuc21pdHRlZE1QRFVzSW5BTVBEVUNvdW50LnUuTG93UGFydCArKzsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRPY3RldHNJbkFNUERVQ291bnQuUXVhZFBhcnQgKz0gcFR4QmxrLT5TcmNCdWZMZW47CisJCX0KKworCQkvL0ZyZWVOdW1iZXIgPSBHRVRfVFhSSU5HX0ZSRUVOTyhwQWQsIFF1ZUlkeCk7CisKKwkJSEFMX1dyaXRlVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgVFJVRSwgJkZyZWVOdW1iZXIpOworCisJCS8vCisJCS8vIEtpY2sgb3V0IFR4CisJCS8vCisJCUhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIHBUeEJsay0+UXVlSWR4KTsKKworCQlwQWQtPlJhbGlua0NvdW50ZXJzLktpY2tUeENvdW50Kys7CisJCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhEb25lQ291bnQrKzsKKwl9CisKK30KKworCitWT0lEIFNUQV9BTVNEVV9GcmFtZV9UeCgKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglUWF9CTEsJCQkqcFR4QmxrKQoreworCVBVQ0hBUgkJCXBIZWFkZXJCdWZQdHI7CisJVVNIT1JUCQkJRnJlZU51bWJlcjsKKwlVU0hPUlQJCQlzdWJGcmFtZVBheWxvYWRMZW4gPSAwOwkvLyBBTVNEVSBTdWJmcmFtZSBsZW5ndGggd2l0aG91dCBBTVNEVS1IZWFkZXIgLyBQYWRkaW5nLgorCVVTSE9SVAkJCXRvdGFsTVBEVVNpemU9MDsKKwlVQ0hBUgkJCSpzdWJGcmFtZUhlYWRlcjsKKwlVQ0hBUgkJCXBhZGRpbmcgPSAwOworCVVTSE9SVAkJCUZpcnN0VHggPSAwLCBMYXN0VHhJZHggPSAwOworCUJPT0xFQU4JCQliVkxBTlBrdDsKKwlpbnQgCQkJZnJhbWVOdW0gPSAwOworCVBRVUVVRV9FTlRSWQlwUUVudHJ5OworCisKKwlBU1NFUlQocFR4QmxrKTsKKworCUFTU0VSVCgocFR4QmxrLT5UeFBhY2tldExpc3QuTnVtYmVyID4gMSkpOworCisJd2hpbGUocFR4QmxrLT5UeFBhY2tldExpc3QuSGVhZCkKKwl7CisJCXBRRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0KTsKKwkJcFR4QmxrLT5wUGFja2V0ID0gUVVFVUVfRU5UUllfVE9fUEFDS0VUKHBRRW50cnkpOworCQlpZiAoUlRNUF9GaWxsVHhCbGtJbmZvKHBBZCwgcFR4QmxrKSAhPSBUUlVFKQorCQl7CisJCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFR4QmxrLT5wUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYlZMQU5Qa3QgPSAoUlRNUF9HRVRfUEFDS0VUX1ZMQU4ocFR4QmxrLT5wUGFja2V0KSA/IFRSVUUgOiBGQUxTRSk7CisKKwkJLy8gc2tpcCA4MDIuMyBoZWFkZXIKKwkJcFR4QmxrLT5wU3JjQnVmRGF0YSA9IHBUeEJsay0+cFNyY0J1ZkhlYWRlciArIExFTkdUSF84MDJfMzsKKwkJcFR4QmxrLT5TcmNCdWZMZW4gIC09IExFTkdUSF84MDJfMzsKKworCQkvLyBza2lwIHZsYW4gdGFnCisJCWlmIChiVkxBTlBrdCkKKwkJeworCQkJcFR4QmxrLT5wU3JjQnVmRGF0YQkrPSBMRU5HVEhfODAyXzFROworCQkJcFR4QmxrLT5TcmNCdWZMZW4JLT0gTEVOR1RIXzgwMl8xUTsKKwkJfQorCisJCWlmIChmcmFtZU51bSA9PSAwKQorCQl7CisJCQlwSGVhZGVyQnVmUHRyID0gU1RBX0J1aWxkX0FNU0RVX0ZyYW1lX0hlYWRlcihwQWQsIHBUeEJsayk7CisKKwkJCS8vIE5PVEU6IFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudCB3aWxsIGJlIHVwZGF0ZWQgYWZ0ZXIgZmluYWwgZnJhbWUgd2FzIGhhbmRsZWQuCisJCQlSVE1QV3JpdGVUeFdJX0RhdGEocEFkLCAoUFRYV0lfU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pLCBwVHhCbGspOworCQl9CisJCWVsc2UKKwkJeworCQkJcEhlYWRlckJ1ZlB0ciA9ICZwVHhCbGstPkhlYWRlckJ1ZlswXTsKKwkJCXBhZGRpbmcgPSBST1VORF9VUChMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEICsgc3ViRnJhbWVQYXlsb2FkTGVuLCA0KSAtIChMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEICsgc3ViRnJhbWVQYXlsb2FkTGVuKTsKKwkJCU5kaXNaZXJvTWVtb3J5KHBIZWFkZXJCdWZQdHIsIHBhZGRpbmcgKyBMRU5HVEhfQU1TRFVfU1VCRlJBTUVIRUFEKTsKKwkJCXBIZWFkZXJCdWZQdHIgKz0gcGFkZGluZzsKKwkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiA9IHBhZGRpbmc7CisJCX0KKworCQkvLworCQkvLyBBLU1TRFUgc3ViZnJhbWUKKwkJLy8gICBEQSg2KStTQSg2KStMZW5ndGgoMikgKyBMTEMvU05BUCBFbmNhcAorCQkvLworCQlzdWJGcmFtZUhlYWRlciA9IHBIZWFkZXJCdWZQdHI7CisJCXN1YkZyYW1lUGF5bG9hZExlbiA9IHBUeEJsay0+U3JjQnVmTGVuOworCisJCU5kaXNNb3ZlTWVtb3J5KHN1YkZyYW1lSGVhZGVyLCBwVHhCbGstPnBTcmNCdWZIZWFkZXIsIDEyKTsKKworCisJCXBIZWFkZXJCdWZQdHIgKz0gTEVOR1RIX0FNU0RVX1NVQkZSQU1FSEVBRDsKKwkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IExFTkdUSF9BTVNEVV9TVUJGUkFNRUhFQUQ7CisKKworCQkvLworCQkvLyBJbnNlcnQgTExDLVNOQVAgZW5jYXBzdWxhdGlvbiAtIDggb2N0ZXRzCisJCS8vCisJCUVYVFJBX0xMQ1NOQVBfRU5DQVBfRlJPTV9QS1RfT0ZGU0VUKHBUeEJsay0+cFNyY0J1ZkRhdGEtMiwgcFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXApOworCisJCXN1YkZyYW1lUGF5bG9hZExlbiA9IHBUeEJsay0+U3JjQnVmTGVuOworCisJCWlmIChwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCkKKwkJeworCQkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwgcFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXAsIDYpOworCQkJcEhlYWRlckJ1ZlB0ciArPSA2OworCQkJLy8gZ2V0IDIgb2N0ZXRzIChUeXBlb2ZMZW4pCisJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBTcmNCdWZEYXRhLTIsIDIpOworCQkJcEhlYWRlckJ1ZlB0ciArPSAyOworCQkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IExFTkdUSF84MDJfMV9IOworCQkJc3ViRnJhbWVQYXlsb2FkTGVuICs9IExFTkdUSF84MDJfMV9IOworCQl9CisKKwkJLy8gdXBkYXRlIHN1YkZyYW1lIExlbmd0aCBmaWVsZAorCQlzdWJGcmFtZUhlYWRlclsxMl0gPSAoc3ViRnJhbWVQYXlsb2FkTGVuICYgMHhGRjAwKSA+PiA4OworCQlzdWJGcmFtZUhlYWRlclsxM10gPSBzdWJGcmFtZVBheWxvYWRMZW4gJiAweEZGOworCisJCXRvdGFsTVBEVVNpemUgKz0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuICsgcFR4QmxrLT5TcmNCdWZMZW47CisKKwkJaWYgKGZyYW1lTnVtID09MCkKKwkJCUZpcnN0VHggPSBIQUxfV3JpdGVNdWx0aVR4UmVzb3VyY2UocEFkLCBwVHhCbGssIGZyYW1lTnVtLCAmRnJlZU51bWJlcik7CisJCWVsc2UKKwkJCUxhc3RUeElkeCA9IEhBTF9Xcml0ZU11bHRpVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhbWVOdW0sICZGcmVlTnVtYmVyKTsKKworCQlmcmFtZU51bSsrOworCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuS2lja1R4Q291bnQrKzsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCsrOworCisJCS8vIGNhbGN1bGF0ZSBUcmFuc21pdHRlZCBBTVNEVSBDb3VudCBhbmQgQnl0ZUNvdW50CisJCXsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRBTVNEVUNvdW50LnUuTG93UGFydCArKzsKKwkJCXBBZC0+UmFsaW5rQ291bnRlcnMuVHJhbnNtaXR0ZWRPY3RldHNJbkFNU0RVLlF1YWRQYXJ0ICs9IHRvdGFsTVBEVVNpemU7CisJCX0KKworCX0KKworCUhBTF9GaW5hbFdyaXRlVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgdG90YWxNUERVU2l6ZSwgRmlyc3RUeCk7CisJSEFMX0xhc3RUeElkeChwQWQsIHBUeEJsay0+UXVlSWR4LCBMYXN0VHhJZHgpOworCisJLy8KKwkvLyBLaWNrIG91dCBUeAorCS8vCisJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOworfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitWT0lEIFNUQV9MZWdhY3lfRnJhbWVfVHgoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JVFhfQkxLCQkJKnBUeEJsaykKK3sKKwlIRUFERVJfODAyXzExCSpwSGVhZGVyXzgwMl8xMTsKKwlQVUNIQVIJCQlwSGVhZGVyQnVmUHRyOworCVVTSE9SVAkJCUZyZWVOdW1iZXI7CisJQk9PTEVBTgkJCWJWTEFOUGt0OworCVBRVUVVRV9FTlRSWQlwUUVudHJ5OworCisJQVNTRVJUKHBUeEJsayk7CisKKworCXBRRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0KTsKKwlwVHhCbGstPnBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFFFbnRyeSk7CisJaWYgKFJUTVBfRmlsbFR4QmxrSW5mbyhwQWQsIHBUeEJsaykgIT0gVFJVRSkKKwl7CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQlyZXR1cm47CisJfQorCisJaWYgKHBUeEJsay0+VHhGcmFtZVR5cGUgPT0gVFhfTUNBU1RfRlJBTUUpCisJeworCQlJTkNfQ09VTlRFUjY0KHBBZC0+V2xhbkNvdW50ZXJzLk11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudCk7CisJfQorCisJaWYgKFJUTVBfR0VUX1BBQ0tFVF9SVFMocFR4QmxrLT5wUGFja2V0KSkKKwkJVFhfQkxLX1NFVF9GTEFHKHBUeEJsaywgZlRYX2JSdHNSZXF1aXJlZCk7CisJZWxzZQorCQlUWF9CTEtfQ0xFQVJfRkxBRyhwVHhCbGssIGZUWF9iUnRzUmVxdWlyZWQpOworCisJYlZMQU5Qa3QgPSAoUlRNUF9HRVRfUEFDS0VUX1ZMQU4ocFR4QmxrLT5wUGFja2V0KSA/IFRSVUUgOiBGQUxTRSk7CisKKwlpZiAocFR4QmxrLT5UeFJhdGUgPCBwQWQtPkNvbW1vbkNmZy5NaW5UeFJhdGUpCisJCXBUeEJsay0+VHhSYXRlID0gcEFkLT5Db21tb25DZmcuTWluVHhSYXRlOworCisJU1RBRmluZENpcGhlckFsZ29yaXRobShwQWQsIHBUeEJsayk7CisJU1RBQnVpbGRDb21tb244MDJfMTFIZWFkZXIocEFkLCBwVHhCbGspOworCisKKwkvLyBza2lwIDgwMi4zIGhlYWRlcgorCXBUeEJsay0+cFNyY0J1ZkRhdGEgPSBwVHhCbGstPnBTcmNCdWZIZWFkZXIgKyBMRU5HVEhfODAyXzM7CisJcFR4QmxrLT5TcmNCdWZMZW4gIC09IExFTkdUSF84MDJfMzsKKworCS8vIHNraXAgdmxhbiB0YWcKKwlpZiAoYlZMQU5Qa3QpCisJeworCQlwVHhCbGstPnBTcmNCdWZEYXRhCSs9IExFTkdUSF84MDJfMVE7CisJCXBUeEJsay0+U3JjQnVmTGVuCS09IExFTkdUSF84MDJfMVE7CisJfQorCisJcEhlYWRlckJ1ZlB0ciA9ICZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRSArIFRYV0lfU0laRV07CisJcEhlYWRlcl84MDJfMTEgPSAoSEVBREVSXzgwMl8xMSAqKSBwSGVhZGVyQnVmUHRyOworCisJLy8gc2tpcCBjb21tb24gaGVhZGVyCisJcEhlYWRlckJ1ZlB0ciArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47CisKKwlpZiAoVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iV01NKSkKKwl7CisJCS8vCisJCS8vIGJ1aWxkIFFPUyBDb250cm9sIGJ5dGVzCisJCS8vCisJCSpwSGVhZGVyQnVmUHRyID0gKHBUeEJsay0+VXNlclByaW9yaXR5ICYgMHgwRik7CisJCSoocEhlYWRlckJ1ZlB0cisxKSA9IDA7CisJCXBIZWFkZXJCdWZQdHIgKz0yOworCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gMjsKKwl9CisKKwkvLyBUaGUgcmVtYWluaW5nIGNvbnRlbnQgb2YgTVBEVSBoZWFkZXIgc2hvdWxkIGxvY2F0ZSBhdCA0LW9jdGV0cyBhbGlnbWVudAorCXBUeEJsay0+SGRyUGFkTGVuID0gKFVMT05HKXBIZWFkZXJCdWZQdHI7CisJcEhlYWRlckJ1ZlB0ciA9IChQQ0hBUikgUk9VTkRfVVAocEhlYWRlckJ1ZlB0ciwgNCk7CisJcFR4QmxrLT5IZHJQYWRMZW4gPSAoVUxPTkcpKHBIZWFkZXJCdWZQdHIgLSBwVHhCbGstPkhkclBhZExlbik7CisKKwl7CisKKwkJLy8KKwkJLy8gSW5zZXJ0IExMQy1TTkFQIGVuY2Fwc3VsYXRpb24gLSA4IG9jdGV0cworCQkvLworCQkvLworICAgCQkvLyBpZiBvcmlnaW5hbCBFdGhlcm5ldCBmcmFtZSBjb250YWlucyBubyBMTEMvU05BUCwKKwkJLy8gdGhlbiBhbiBleHRyYSBMTEMvU05BUCBlbmNhcCBpcyByZXF1aXJlZAorCQkvLworCQlFWFRSQV9MTENTTkFQX0VOQ0FQX0ZST01fUEtUX1NUQVJUKHBUeEJsay0+cFNyY0J1ZkhlYWRlciwgcFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXApOworCQlpZiAocFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXApCisJCXsKKwkJCVVDSEFSIHZsYW5fc2l6ZTsKKworCQkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwgcFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXAsIDYpOworCQkJcEhlYWRlckJ1ZlB0ciArPSA2OworCQkJLy8gc2tpcCB2bGFuIHRhZworCQkJdmxhbl9zaXplID0gIChiVkxBTlBrdCkgPyBMRU5HVEhfODAyXzFRIDogMDsKKwkJCS8vIGdldCAyIG9jdGV0cyAoVHlwZW9mTGVuKQorCQkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwgcFR4QmxrLT5wU3JjQnVmSGVhZGVyKzEyK3ZsYW5fc2l6ZSwgMik7CisJCQlwSGVhZGVyQnVmUHRyICs9IDI7CisJCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gTEVOR1RIXzgwMl8xX0g7CisJCX0KKworCX0KKworCS8vCisJLy8gcHJlcGFyZSBmb3IgVFhXSQorCS8vIHVzZSBXY2lkIGFzIEtleSBJbmRleAorCS8vCisKKwlSVE1QV3JpdGVUeFdJX0RhdGEocEFkLCAoUFRYV0lfU1RSVUMpKCZwVHhCbGstPkhlYWRlckJ1ZltUWElORk9fU0laRV0pLCBwVHhCbGspOworCisJLy9GcmVlTnVtYmVyID0gR0VUX1RYUklOR19GUkVFTk8ocEFkLCBRdWVJZHgpOworCisJSEFMX1dyaXRlVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgVFJVRSwgJkZyZWVOdW1iZXIpOworCisJcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOworCXBBZC0+UmFsaW5rQ291bnRlcnMuT25lU2VjVHhEb25lQ291bnQrKzsKKworCS8vCisJLy8gS2ljayBvdXQgVHgKKwkvLworCUhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIHBUeEJsay0+UXVlSWR4KTsKK30KKworCitWT0lEIFNUQV9BUmFsaW5rX0ZyYW1lX1R4KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVRYX0JMSwkJCSpwVHhCbGspCit7CisJUFVDSEFSCQkJcEhlYWRlckJ1ZlB0cjsKKwlVU0hPUlQJCQlGcmVlTnVtYmVyOworCVVTSE9SVAkJCXRvdGFsTVBEVVNpemU9MDsKKwlVU0hPUlQJCQlGaXJzdFR4LCBMYXN0VHhJZHg7CisJaW50IAkJCWZyYW1lTnVtID0gMDsKKwlCT09MRUFOCQkJYlZMQU5Qa3Q7CisJUFFVRVVFX0VOVFJZCXBRRW50cnk7CisKKworCUFTU0VSVChwVHhCbGspOworCisJQVNTRVJUKChwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXI9PSAyKSk7CisKKworCUZpcnN0VHggPSBMYXN0VHhJZHggPSAwOyAgLy8gSXMgaXQgb2sgaW5pdCB0aGV5IGFzIDA/CisJd2hpbGUocFR4QmxrLT5UeFBhY2tldExpc3QuSGVhZCkKKwl7CisJCXBRRW50cnkgPSBSZW1vdmVIZWFkUXVldWUoJnBUeEJsay0+VHhQYWNrZXRMaXN0KTsKKwkJcFR4QmxrLT5wUGFja2V0ID0gUVVFVUVfRU5UUllfVE9fUEFDS0VUKHBRRW50cnkpOworCisJCWlmIChSVE1QX0ZpbGxUeEJsa0luZm8ocEFkLCBwVHhCbGspICE9IFRSVUUpCisJCXsKKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwVHhCbGstPnBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJY29udGludWU7CisJCX0KKworCQliVkxBTlBrdCA9IChSVE1QX0dFVF9QQUNLRVRfVkxBTihwVHhCbGstPnBQYWNrZXQpID8gVFJVRSA6IEZBTFNFKTsKKworCQkvLyBza2lwIDgwMi4zIGhlYWRlcgorCQlwVHhCbGstPnBTcmNCdWZEYXRhID0gcFR4QmxrLT5wU3JjQnVmSGVhZGVyICsgTEVOR1RIXzgwMl8zOworCQlwVHhCbGstPlNyY0J1ZkxlbiAgLT0gTEVOR1RIXzgwMl8zOworCisJCS8vIHNraXAgdmxhbiB0YWcKKwkJaWYgKGJWTEFOUGt0KQorCQl7CisJCQlwVHhCbGstPnBTcmNCdWZEYXRhCSs9IExFTkdUSF84MDJfMVE7CisJCQlwVHhCbGstPlNyY0J1ZkxlbgktPSBMRU5HVEhfODAyXzFROworCQl9CisKKwkJaWYgKGZyYW1lTnVtID09IDApCisJCXsJLy8gRm9yIGZpcnN0IGZyYW1lLCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgODAyLjExIGhlYWRlciArIHBhZGRpbmcob3B0aW9uYWwpICsgUkEtQUdHLUxFTiArIFNOQVAgSGVhZGVyCisKKwkJCXBIZWFkZXJCdWZQdHIgPSBTVEFfQnVpbGRfQVJhbGlua19GcmFtZV9IZWFkZXIocEFkLCBwVHhCbGspOworCisJCQkvLyBJdCdzIG9rIHdyaXRlIHRoZSBUeFdJIGhlcmUsIGJlY2F1c2UgdGhlIFR4V0ktPk1QRFV0b3RhbEJ5dGVDb3VudAorCQkJLy8Jd2lsbCBiZSB1cGRhdGVkIGFmdGVyIGZpbmFsIGZyYW1lIHdhcyBoYW5kbGVkLgorCQkJUlRNUFdyaXRlVHhXSV9EYXRhKHBBZCwgKFBUWFdJX1NUUlVDKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKSwgcFR4QmxrKTsKKworCisJCQkvLworCQkJLy8gSW5zZXJ0IExMQy1TTkFQIGVuY2Fwc3VsYXRpb24gLSA4IG9jdGV0cworCQkJLy8KKwkJCUVYVFJBX0xMQ1NOQVBfRU5DQVBfRlJPTV9QS1RfT0ZGU0VUKHBUeEJsay0+cFNyY0J1ZkRhdGEtMiwgcFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXApOworCisJCQlpZiAocFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXApCisJCQl7CisJCQkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwgcFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXAsIDYpOworCQkJCXBIZWFkZXJCdWZQdHIgKz0gNjsKKwkJCQkvLyBnZXQgMiBvY3RldHMgKFR5cGVvZkxlbikKKwkJCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBTcmNCdWZEYXRhLTIsIDIpOworCQkJCXBIZWFkZXJCdWZQdHIgKz0gMjsKKwkJCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gKz0gTEVOR1RIXzgwMl8xX0g7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CS8vIEZvciBzZWNvbmQgYWdncmVnYXRlZCBmcmFtZSwgd2UgbmVlZCBjcmVhdGUgdGhlIDgwMi4zIGhlYWRlciB0byBoZWFkZXJCdWYsIGJlY2F1c2UgUENJIHdpbGwgY29weSBpdCB0byBTRFB0cjAuCisKKwkJCXBIZWFkZXJCdWZQdHIgPSAmcFR4QmxrLT5IZWFkZXJCdWZbMF07CisJCQlwVHhCbGstPk1wZHVIZWFkZXJMZW4gPSAwOworCisJCQkvLyBBLVJhbGluayBzdWItc2VxdWVudCBmcmFtZSBoZWFkZXIgaXMgdGhlIHNhbWUgYXMgODAyLjMgaGVhZGVyLgorCQkJLy8gICBEQSg2KStTQSg2KStGcmFtZVR5cGUoMikKKwkJCU5kaXNNb3ZlTWVtb3J5KHBIZWFkZXJCdWZQdHIsIHBUeEJsay0+cFNyY0J1ZkhlYWRlciwgMTIpOworCQkJcEhlYWRlckJ1ZlB0ciArPSAxMjsKKwkJCS8vIGdldCAyIG9jdGV0cyAoVHlwZW9mTGVuKQorCQkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwgcFR4QmxrLT5wU3JjQnVmRGF0YS0yLCAyKTsKKwkJCXBIZWFkZXJCdWZQdHIgKz0gMjsKKwkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiA9IExFTkdUSF9BUkFMSU5LX1NVQkZSQU1FSEVBRDsKKwkJfQorCisJCXRvdGFsTVBEVVNpemUgKz0gcFR4QmxrLT5NcGR1SGVhZGVyTGVuICsgcFR4QmxrLT5TcmNCdWZMZW47CisKKwkJLy9GcmVlTnVtYmVyID0gR0VUX1RYUklOR19GUkVFTk8ocEFkLCBRdWVJZHgpOworCQlpZiAoZnJhbWVOdW0gPT0wKQorCQkJRmlyc3RUeCA9IEhBTF9Xcml0ZU11bHRpVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhbWVOdW0sICZGcmVlTnVtYmVyKTsKKwkJZWxzZQorCQkJTGFzdFR4SWR4ID0gSEFMX1dyaXRlTXVsdGlUeFJlc291cmNlKHBBZCwgcFR4QmxrLCBmcmFtZU51bSwgJkZyZWVOdW1iZXIpOworCisJCWZyYW1lTnVtKys7CisKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeEFnZ3JlZ2F0aW9uQ291bnQrKzsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5LaWNrVHhDb3VudCsrOworCQlwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY1R4RG9uZUNvdW50Kys7CisKKwl9CisKKwlIQUxfRmluYWxXcml0ZVR4UmVzb3VyY2UocEFkLCBwVHhCbGssIHRvdGFsTVBEVVNpemUsIEZpcnN0VHgpOworCUhBTF9MYXN0VHhJZHgocEFkLCBwVHhCbGstPlF1ZUlkeCwgTGFzdFR4SWR4KTsKKworCS8vCisJLy8gS2ljayBvdXQgVHgKKwkvLworCUhBTF9LaWNrT3V0VHgocEFkLCBwVHhCbGssIHBUeEJsay0+UXVlSWR4KTsKKworfQorCisKK1ZPSUQgU1RBX0ZyYWdtZW50X0ZyYW1lX1R4KAorCUlOIFJUTVBfQURBUFRFUiAqcEFkLAorCUlOIFRYX0JMSwkJKnBUeEJsaykKK3sKKwlIRUFERVJfODAyXzExCSpwSGVhZGVyXzgwMl8xMTsKKwlQVUNIQVIJCQlwSGVhZGVyQnVmUHRyOworCVVTSE9SVAkJCUZyZWVOdW1iZXI7CisJVUNIQVIgCQkJZnJhZ051bSA9IDA7CisJUEFDS0VUX0lORk8JCVBhY2tldEluZm87CisJVVNIT1JUCQkJRW5jcnlwdGlvbk92ZXJoZWFkID0gMDsKKwlVSU5UMzIJCQlGcmVlTXBkdVNpemUsIFNyY1JlbWFpbmluZ0J5dGVzOworCVVTSE9SVAkJCUFja0R1cmF0aW9uOworCVVJTlQgCQkJTmV4dE1wZHVTaXplOworCUJPT0xFQU4JCQliVkxBTlBrdDsKKwlQUVVFVUVfRU5UUlkJcFFFbnRyeTsKKworCisJQVNTRVJUKHBUeEJsayk7CisKKwlwUUVudHJ5ID0gUmVtb3ZlSGVhZFF1ZXVlKCZwVHhCbGstPlR4UGFja2V0TGlzdCk7CisJcFR4QmxrLT5wUGFja2V0ID0gUVVFVUVfRU5UUllfVE9fUEFDS0VUKHBRRW50cnkpOworCWlmIChSVE1QX0ZpbGxUeEJsa0luZm8ocEFkLCBwVHhCbGspICE9IFRSVUUpCisJeworCQlSRUxFQVNFX05ESVNfUEFDS0VUKHBBZCwgcFR4QmxrLT5wUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwkJcmV0dXJuOworCX0KKworCUFTU0VSVChUWF9CTEtfVEVTVF9GTEFHKHBUeEJsaywgZlRYX2JBbGxvd0ZyYWcpKTsKKwliVkxBTlBrdCA9IChSVE1QX0dFVF9QQUNLRVRfVkxBTihwVHhCbGstPnBQYWNrZXQpID8gVFJVRSA6IEZBTFNFKTsKKworCVNUQUZpbmRDaXBoZXJBbGdvcml0aG0ocEFkLCBwVHhCbGspOworCVNUQUJ1aWxkQ29tbW9uODAyXzExSGVhZGVyKHBBZCwgcFR4QmxrKTsKKworCWlmIChwVHhCbGstPkNpcGhlckFsZyA9PSBDSVBIRVJfVEtJUCkKKwl7CisJCXBUeEJsay0+cFBhY2tldCA9IGR1cGxpY2F0ZV9wa3Rfd2l0aF9US0lQX01JQyhwQWQsIHBUeEJsay0+cFBhY2tldCk7CisJCWlmIChwVHhCbGstPnBQYWNrZXQgPT0gTlVMTCkKKwkJCXJldHVybjsKKwkJUlRNUF9RdWVyeVBhY2tldEluZm8ocFR4QmxrLT5wUGFja2V0LCAmUGFja2V0SW5mbywgJnBUeEJsay0+cFNyY0J1ZkhlYWRlciwgJnBUeEJsay0+U3JjQnVmTGVuKTsKKwl9CisKKwkvLyBza2lwIDgwMi4zIGhlYWRlcgorCXBUeEJsay0+cFNyY0J1ZkRhdGEgPSBwVHhCbGstPnBTcmNCdWZIZWFkZXIgKyBMRU5HVEhfODAyXzM7CisJcFR4QmxrLT5TcmNCdWZMZW4gIC09IExFTkdUSF84MDJfMzsKKworCisJLy8gc2tpcCB2bGFuIHRhZworCWlmIChiVkxBTlBrdCkKKwl7CisJCXBUeEJsay0+cFNyY0J1ZkRhdGEJKz0gTEVOR1RIXzgwMl8xUTsKKwkJcFR4QmxrLT5TcmNCdWZMZW4JLT0gTEVOR1RIXzgwMl8xUTsKKwl9CisKKwlwSGVhZGVyQnVmUHRyID0gJnBUeEJsay0+SGVhZGVyQnVmW1RYSU5GT19TSVpFICsgVFhXSV9TSVpFXTsKKwlwSGVhZGVyXzgwMl8xMSA9IChIRUFERVJfODAyXzExICopcEhlYWRlckJ1ZlB0cjsKKworCisJLy8gc2tpcCBjb21tb24gaGVhZGVyCisJcEhlYWRlckJ1ZlB0ciArPSBwVHhCbGstPk1wZHVIZWFkZXJMZW47CisKKwlpZiAoVFhfQkxLX1RFU1RfRkxBRyhwVHhCbGssIGZUWF9iV01NKSkKKwl7CisJCS8vCisJCS8vIGJ1aWxkIFFPUyBDb250cm9sIGJ5dGVzCisJCS8vCisJCSpwSGVhZGVyQnVmUHRyID0gKHBUeEJsay0+VXNlclByaW9yaXR5ICYgMHgwRik7CisKKwkJKihwSGVhZGVyQnVmUHRyKzEpID0gMDsKKwkJcEhlYWRlckJ1ZlB0ciArPTI7CisJCXBUeEJsay0+TXBkdUhlYWRlckxlbiArPSAyOworCX0KKworCS8vCisJLy8gcGFkZGluZyBhdCBmcm9udCBvZiBMTEMgaGVhZGVyCisJLy8gTExDIGhlYWRlciBzaG91bGQgbG9jYXRlIGF0IDQtb2N0ZXRzIGFsaWdtZW50CisJLy8KKwlwVHhCbGstPkhkclBhZExlbiA9IChVTE9ORylwSGVhZGVyQnVmUHRyOworCXBIZWFkZXJCdWZQdHIgPSAoUENIQVIpIFJPVU5EX1VQKHBIZWFkZXJCdWZQdHIsIDQpOworCXBUeEJsay0+SGRyUGFkTGVuID0gKFVMT05HKShwSGVhZGVyQnVmUHRyIC0gcFR4QmxrLT5IZHJQYWRMZW4pOworCisKKworCS8vCisJLy8gSW5zZXJ0IExMQy1TTkFQIGVuY2Fwc3VsYXRpb24gLSA4IG9jdGV0cworCS8vCisJLy8KKyAgIAkvLyBpZiBvcmlnaW5hbCBFdGhlcm5ldCBmcmFtZSBjb250YWlucyBubyBMTEMvU05BUCwKKwkvLyB0aGVuIGFuIGV4dHJhIExMQy9TTkFQIGVuY2FwIGlzIHJlcXVpcmVkCisJLy8KKwlFWFRSQV9MTENTTkFQX0VOQ0FQX0ZST01fUEtUX1NUQVJUKHBUeEJsay0+cFNyY0J1ZkhlYWRlciwgcFR4QmxrLT5wRXh0cmFMbGNTbmFwRW5jYXApOworCWlmIChwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCkKKwl7CisJCVVDSEFSIHZsYW5fc2l6ZTsKKworCQlOZGlzTW92ZU1lbW9yeShwSGVhZGVyQnVmUHRyLCBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCwgNik7CisJCXBIZWFkZXJCdWZQdHIgKz0gNjsKKwkJLy8gc2tpcCB2bGFuIHRhZworCQl2bGFuX3NpemUgPSAgKGJWTEFOUGt0KSA/IExFTkdUSF84MDJfMVEgOiAwOworCQkvLyBnZXQgMiBvY3RldHMgKFR5cGVvZkxlbikKKwkJTmRpc01vdmVNZW1vcnkocEhlYWRlckJ1ZlB0ciwgcFR4QmxrLT5wU3JjQnVmSGVhZGVyKzEyK3ZsYW5fc2l6ZSwgMik7CisJCXBIZWFkZXJCdWZQdHIgKz0gMjsKKwkJcFR4QmxrLT5NcGR1SGVhZGVyTGVuICs9IExFTkdUSF84MDJfMV9IOworCX0KKworCisJLy8gSWYgVEtJUCBpcyB1c2VkIGFuZCBmcmFnbWVudGF0aW9uIGlzIHJlcXVpcmVkLiBEcml2ZXIgaGFzIHRvCisJLy8JYXBwZW5kIFRLSVAgTUlDIGF0IHRhaWwgb2YgdGhlIHNjYXR0ZXIgYnVmZmVyCisJLy8JTUFDIEFTSUMgd2lsbCBvbmx5IHBlcmZvcm0gSVYvRUlWL0lDViBpbnNlcnRpb24gYnV0IG5vIFRLSVAgTUlDCisJaWYgKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9US0lQKQorCXsKKworCQkvLyBOT1RFOiBET04nVCByZWZlciB0aGUgc2tiLT5sZW4gZGlyZWN0bHkgYWZ0ZXIgZm9sbG93aW5nIGNvcHkuIEJlY2FzdWUgdGhlIGxlbmd0aCBpcyBub3QgYWRqdXN0CisJCS8vCQkJdG8gY29ycmVjdCBsZW5naHQsIHJlZmVyIHRvIHBUeEJsay0+U3JjQnVmTGVuIGZvciB0aGUgcGFja2V0IGxlbmd0aCBpbiBmb2xsb3dpbmcgcHJvZ3Jlc3MuCisJCU5kaXNNb3ZlTWVtb3J5KHBUeEJsay0+cFNyY0J1ZkRhdGEgKyBwVHhCbGstPlNyY0J1ZkxlbiwgJnBBZC0+UHJpdmF0ZUluZm8uVHguTUlDWzBdLCA4KTsKKwkJLy9za2JfcHV0KChSVFBLVF9UT19PU1BLVChwVHhCbGstPnBQYWNrZXQpKS0+dGFpbCwgOCk7CisJCXBUeEJsay0+U3JjQnVmTGVuICs9IDg7CisJCXBUeEJsay0+VG90YWxGcmFtZUxlbiArPSA4OworCQlwVHhCbGstPkNpcGhlckFsZyA9IENJUEhFUl9US0lQX05PX01JQzsKKwl9CisKKwkvLworCS8vIGNhbGN1YXRlIHRoZSBvdmVyaGVhZCBieXRlcyB0aGF0IGVuY3J5cHRpb24gYWxnb3JpdGhtIG1heSBhZGQuIFRoaXMKKwkvLyBhZmZlY3RzIHRoZSBjYWxjdWxhdGUgb2YgImR1cmF0aW9uIiBmaWVsZAorCS8vCisJaWYgKChwVHhCbGstPkNpcGhlckFsZyA9PSBDSVBIRVJfV0VQNjQpIHx8IChwVHhCbGstPkNpcGhlckFsZyA9PSBDSVBIRVJfV0VQMTI4KSkKKwkJRW5jcnlwdGlvbk92ZXJoZWFkID0gODsgLy9XRVA6IElWWzRdICsgSUNWWzRdOworCWVsc2UgaWYgKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9US0lQX05PX01JQykKKwkJRW5jcnlwdGlvbk92ZXJoZWFkID0gMTI7Ly9US0lQOiBJVls0XSArIEVJVls0XSArIElDVls0XSwgTUlDIHdpbGwgYmUgYWRkZWQgdG8gVG90YWxQYWNrZXRMZW5ndGgKKwllbHNlIGlmIChwVHhCbGstPkNpcGhlckFsZyA9PSBDSVBIRVJfVEtJUCkKKwkJRW5jcnlwdGlvbk92ZXJoZWFkID0gMjA7Ly9US0lQOiBJVls0XSArIEVJVls0XSArIElDVls0XSArIE1JQ1s4XQorCWVsc2UgaWYgKHBUeEJsay0+Q2lwaGVyQWxnID09IENJUEhFUl9BRVMpCisJCUVuY3J5cHRpb25PdmVyaGVhZCA9IDE2OwkvLyBBRVM6IElWWzRdICsgRUlWWzRdICsgTUlDWzhdCisJZWxzZQorCQlFbmNyeXB0aW9uT3ZlcmhlYWQgPSAwOworCisJLy8gZGVjaWRlIGhvdyBtdWNoIHRpbWUgYW4gQUNLL0NUUyBmcmFtZSB3aWxsIGNvbnN1bWUgaW4gdGhlIGFpcgorCUFja0R1cmF0aW9uID0gUlRNUENhbGNEdXJhdGlvbihwQWQsIHBBZC0+Q29tbW9uQ2ZnLkV4cGVjdGVkQUNLUmF0ZVtwVHhCbGstPlR4UmF0ZV0sIDE0KTsKKworCS8vIEluaXQgdGhlIHRvdGFsIHBheWxvYWQgbGVuZ3RoIG9mIHRoaXMgZnJhbWUuCisJU3JjUmVtYWluaW5nQnl0ZXMgPSBwVHhCbGstPlNyY0J1ZkxlbjsKKworCXBUeEJsay0+VG90YWxGcmFnTnVtID0gMHhmZjsKKworCWRvIHsKKworCQlGcmVlTXBkdVNpemUgPSBwQWQtPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCAtIExFTkdUSF9DUkM7CisKKwkJRnJlZU1wZHVTaXplIC09IHBUeEJsay0+TXBkdUhlYWRlckxlbjsKKworCQlpZiAoU3JjUmVtYWluaW5nQnl0ZXMgPD0gRnJlZU1wZHVTaXplKQorCQl7CS8vIHRoaXMgaXMgdGhlIGxhc3Qgb3Igb25seSBmcmFnbWVudAorCisJCQlwVHhCbGstPlNyY0J1ZkxlbiA9IFNyY1JlbWFpbmluZ0J5dGVzOworCisJCQlwSGVhZGVyXzgwMl8xMS0+RkMuTW9yZUZyYWcgPSAwOworCQkJcEhlYWRlcl84MDJfMTEtPkR1cmF0aW9uID0gcEFkLT5Db21tb25DZmcuRHNpZnMgKyBBY2tEdXJhdGlvbjsKKworCQkJLy8gSW5kaWNhdGUgdGhlIGxvd2VyIGxheWVyIHRoYXQgdGhpcydzIHRoZSBsYXN0IGZyYWdtZW50LgorCQkJcFR4QmxrLT5Ub3RhbEZyYWdOdW0gPSBmcmFnTnVtOworCQl9CisJCWVsc2UKKwkJewkvLyBtb3JlIGZyYWdtZW50IGlzIHJlcXVpcmVkCisKKwkJCXBUeEJsay0+U3JjQnVmTGVuID0gRnJlZU1wZHVTaXplOworCisJCQlOZXh0TXBkdVNpemUgPSBtaW4oKChVSU5UKVNyY1JlbWFpbmluZ0J5dGVzIC0gcFR4QmxrLT5TcmNCdWZMZW4pLCAoKFVJTlQpcEFkLT5Db21tb25DZmcuRnJhZ21lbnRUaHJlc2hvbGQpKTsKKwkJCXBIZWFkZXJfODAyXzExLT5GQy5Nb3JlRnJhZyA9IDE7CisJCQlwSGVhZGVyXzgwMl8xMS0+RHVyYXRpb24gPSAoMyAqIHBBZC0+Q29tbW9uQ2ZnLkRzaWZzKSArICgyICogQWNrRHVyYXRpb24pICsgUlRNUENhbGNEdXJhdGlvbihwQWQsIHBUeEJsay0+VHhSYXRlLCBOZXh0TXBkdVNpemUgKyBFbmNyeXB0aW9uT3ZlcmhlYWQpOworCQl9CisKKwkJaWYgKGZyYWdOdW0gPT0gMCkKKwkJCXBUeEJsay0+RnJhbWVHYXAgPSBJRlNfSFRUWE9QOworCQllbHNlCisJCQlwVHhCbGstPkZyYW1lR2FwID0gSUZTX1NJRlM7CisKKwkJUlRNUFdyaXRlVHhXSV9EYXRhKHBBZCwgKFBUWFdJX1NUUlVDKSgmcFR4QmxrLT5IZWFkZXJCdWZbVFhJTkZPX1NJWkVdKSwgcFR4QmxrKTsKKworCQlIQUxfV3JpdGVGcmFnVHhSZXNvdXJjZShwQWQsIHBUeEJsaywgZnJhZ051bSwgJkZyZWVOdW1iZXIpOworCisJCXBBZC0+UmFsaW5rQ291bnRlcnMuS2lja1R4Q291bnQrKzsKKwkJcEFkLT5SYWxpbmtDb3VudGVycy5PbmVTZWNUeERvbmVDb3VudCsrOworCisJCS8vIFVwZGF0ZSB0aGUgZnJhbWUgbnVtYmVyLCByZW1haW5pbmcgc2l6ZSBvZiB0aGUgTkRJUyBwYWNrZXQgcGF5bG9hZC4KKworCQkvLyBzcGFjZSBmb3IgODAyLjExIGhlYWRlci4KKwkJaWYgKGZyYWdOdW0gPT0gMCAmJiBwVHhCbGstPnBFeHRyYUxsY1NuYXBFbmNhcCkKKwkJCXBUeEJsay0+TXBkdUhlYWRlckxlbiAtPSBMRU5HVEhfODAyXzFfSDsKKworCQlmcmFnTnVtKys7CisJCVNyY1JlbWFpbmluZ0J5dGVzIC09IHBUeEJsay0+U3JjQnVmTGVuOworCQlwVHhCbGstPnBTcmNCdWZEYXRhICs9IHBUeEJsay0+U3JjQnVmTGVuOworCisJCXBIZWFkZXJfODAyXzExLT5GcmFnKys7CSAvLyBpbmNyZWFzZSBGcmFnICMKKworCX13aGlsZShTcmNSZW1haW5pbmdCeXRlcyA+IDApOworCisJLy8KKwkvLyBLaWNrIG91dCBUeAorCS8vCisJSEFMX0tpY2tPdXRUeChwQWQsIHBUeEJsaywgcFR4QmxrLT5RdWVJZHgpOworfQorCisKKyNkZWZpbmUgUkVMRUFTRV9GUkFNRVNfT0ZfVFhCTEsoX3BBZCwgX3BUeEJsaywgX3BRRW50cnksIF9TdGF0dXMpIAkJCQkJCQkJCQlcCisJCXdoaWxlKF9wVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkKQkJCQkJCQkJCQkJCQkJXAorCQl7CQkJCQkJCQkJCQkJCQkJCQkJCQkJCVwKKwkJCV9wUUVudHJ5ID0gUmVtb3ZlSGVhZFF1ZXVlKCZfcFR4QmxrLT5UeFBhY2tldExpc3QpOwkJCQkJCQkJCVwKKwkJCVJFTEVBU0VfTkRJU19QQUNLRVQoX3BBZCwgUVVFVUVfRU5UUllfVE9fUEFDS0VUKF9wUUVudHJ5KSwgX1N0YXR1cyk7CVwKKwkJfQorCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlDb3B5IGZyYW1lIGZyb20gd2FpdGluZyBxdWV1ZSBpbnRvIHJlbGF0aXZlIHJpbmcgYnVmZmVyIGFuZCBzZXQKKwlhcHByb3ByaWF0ZSBBU0lDIHJlZ2lzdGVyIHRvIGtpY2sgaGFyZHdhcmUgZW5jcnlwdGlvbiBiZWZvcmUgcmVhbGx5CisJc2VudCBvdXQgdG8gYWlyLgorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJUE5ESVNfUEFDS0VUCVBvaW50ZXIgdG8gb3V0Z29pbmcgTmRpcyBmcmFtZQorCQlOdW1iZXJPZkZyYWcJTnVtYmVyIG9mIGZyYWdtZW50IHJlcXVpcmVkCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK05ESVNfU1RBVFVTIFNUQUhhcmRUcmFuc21pdCgKKwlJTiBQUlRNUF9BREFQVEVSCXBBZCwKKwlJTiBUWF9CTEsgCQkJKnBUeEJsaywKKwlJTglVQ0hBUgkJCVF1ZUlkeCkKK3sKKwlORElTX1BBQ0tFVAkJKnBQYWNrZXQ7CisJUFFVRVVFX0VOVFJZCXBRRW50cnk7CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBTVEVQIDAuIERPIFNBTklUWSBDSEVDSyBBTkQgU09NRSBFQVJMWSBQUkVQQVJBVElPTi4KKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLworCUFTU0VSVChwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXIpOworCWlmIChwVHhCbGstPlR4UGFja2V0TGlzdC5IZWFkID09IE5VTEwpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJwVHhCbGstPlRvdGFsRnJhbWVOdW0gPT0gJWxkIVxuIiwgcFR4QmxrLT5UeFBhY2tldExpc3QuTnVtYmVyKSk7CisJCXJldHVybiBORElTX1NUQVRVU19GQUlMVVJFOworCX0KKworCXBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFR4QmxrLT5UeFBhY2tldExpc3QuSGVhZCk7CisKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBTVEVQIDEuIFdBS0UgVVAgUEhZCisJLy8JCW91dGdvaW5nIGZyYW1lIGFsd2F5cyB3YWtldXAgUEhZIHRvIHByZXZlbnQgZnJhbWUgbG9zdCBhbmQKKwkvLwkJdHVybiBvZmYgUFNNIGJpdCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlCisJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJLy8gbm90IHRvIGNoYW5nZSBQU00gYml0LCBqdXN0IHNlbmQgdGhpcyBmcmFtZSBvdXQ/CisJaWYgKChwQWQtPlN0YUNmZy5Qc20gPT0gUFdSX1NBVkUpICYmIE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCisJeworCSAgICBEQkdQUklOVF9SQVcoUlRfREVCVUdfVFJBQ0UsICgiQXNpY0ZvcmNlV2FrZXVwIEF0IEhhcmRUeFxuIikpOworCQlBc2ljRm9yY2VXYWtldXAocEFkLCBUUlVFKTsKKwl9CisKKwkvLyBJdCBzaG91bGQgbm90IGNoYW5nZSBQU00gYml0LCB3aGVuIEFQU0QgdHVybiBvbi4KKwlpZiAoKCEocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlICYmIHBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYkFQU0RDYXBhYmxlKSAmJiAocEFkLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZSA9PSBGQUxTRSkpCisJCXx8IChSVE1QX0dFVF9QQUNLRVRfRUFQT0wocFR4QmxrLT5wUGFja2V0KSkKKwkJfHwgKFJUTVBfR0VUX1BBQ0tFVF9XQUkocFR4QmxrLT5wUGFja2V0KSkpCisJeworCQlpZiAoKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkgJiYKKyAgICAgICAgICAgIChwQWQtPlN0YUNmZy5XaW5kb3dzUG93ZXJNb2RlID09IE5kaXM4MDJfMTFQb3dlck1vZGVGYXN0X1BTUCkpCisJCQlNbG1lU2V0UHNtQml0KHBBZCwgUFdSX0FDVElWRSk7CisJfQorCisJc3dpdGNoIChwVHhCbGstPlR4RnJhbWVUeXBlKQorCXsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJY2FzZSBUWF9BTVBEVV9GUkFNRToKKwkJCQlTVEFfQU1QRFVfRnJhbWVfVHgocEFkLCBwVHhCbGspOworCQkJYnJlYWs7CisJCWNhc2UgVFhfQU1TRFVfRlJBTUU6CisJCQkJU1RBX0FNU0RVX0ZyYW1lX1R4KHBBZCwgcFR4QmxrKTsKKwkJCWJyZWFrOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQljYXNlIFRYX0xFR0FDWV9GUkFNRToKKwkJCQlTVEFfTGVnYWN5X0ZyYW1lX1R4KHBBZCwgcFR4QmxrKTsKKwkJCWJyZWFrOworCQljYXNlIFRYX01DQVNUX0ZSQU1FOgorCQkJCVNUQV9MZWdhY3lfRnJhbWVfVHgocEFkLCBwVHhCbGspOworCQkJYnJlYWs7CisJCWNhc2UgVFhfUkFMSU5LX0ZSQU1FOgorCQkJCVNUQV9BUmFsaW5rX0ZyYW1lX1R4KHBBZCwgcFR4QmxrKTsKKwkJCWJyZWFrOworCQljYXNlIFRYX0ZSQUdfRlJBTUU6CisJCQkJU1RBX0ZyYWdtZW50X0ZyYW1lX1R4KHBBZCwgcFR4QmxrKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJeworCQkJCS8vIEl0IHNob3VsZCBub3QgaGFwcGVuZWQhCisJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiU2VuZCBhIHBhY2VrdCB3YXMgbm90IGNsYXNzaWZpZWQhISBJdCBzaG91bGQgbm90IGhhcHBlbiFcbiIpKTsKKwkJCQl3aGlsZShwVHhCbGstPlR4UGFja2V0TGlzdC5OdW1iZXIpCisJCQkJeworCQkJCQlwUUVudHJ5ID0gUmVtb3ZlSGVhZFF1ZXVlKCZwVHhCbGstPlR4UGFja2V0TGlzdCk7CisJCQkJCXBQYWNrZXQgPSBRVUVVRV9FTlRSWV9UT19QQUNLRVQocFFFbnRyeSk7CisJCQkJCWlmIChwUGFja2V0KQorCQkJCQkJUkVMRUFTRV9ORElTX1BBQ0tFVChwQWQsIHBQYWNrZXQsIE5ESVNfU1RBVFVTX0ZBSUxVUkUpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCX0KKworCXJldHVybiAoTkRJU19TVEFUVVNfU1VDQ0VTUyk7CisKK30KKworVUxPTkcgIEhhc2hCeXRlc1BvbHlub21pYWwoVUNIQVIgKnZhbHVlLCB1bnNpZ25lZCBpbnQgbGVuKQoreworICAgdW5zaWduZWQgY2hhciAqd29yZCA9IHZhbHVlOworICAgdW5zaWduZWQgaW50IHJldCA9IDA7CisgICB1bnNpZ25lZCBpbnQgaTsKKworICAgZm9yKGk9MDsgaSA8IGxlbjsgaSsrKQorICAgeworCSAgaW50IG1vZCA9IGkgJSAzMjsKKwkgIHJldCBePSh1bnNpZ25lZCBpbnQpICh3b3JkW2ldKSA8PCBtb2Q7CisJICByZXQgXj0odW5zaWduZWQgaW50KSAod29yZFtpXSkgPj4gKDMyIC0gbW9kKTsKKyAgIH0KKyAgIHJldHVybiByZXQ7Cit9CisKK1ZPSUQgU3RhX0Fubm91bmNlX29yX0ZvcndhcmRfODAyXzNfUGFja2V0KAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBORElTX1BBQ0tFVAlwUGFja2V0LAorCUlOCVVDSEFSCQkJRnJvbVdoaWNoQlNTSUQpCit7CisJaWYgKFRSVUUKKwkJKQorCXsKKwkJYW5ub3VuY2VfODAyXzNfcGFja2V0KHBBZCwgcFBhY2tldCk7CisJfQorCWVsc2UKKwl7CisJCS8vIHJlbGVhc2UgcGFja2V0CisJCVJFTEVBU0VfTkRJU19QQUNLRVQocEFkLCBwUGFja2V0LCBORElTX1NUQVRVU19GQUlMVVJFKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL3Nhbml0eS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvc2FuaXR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM5ODcyNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL3Nhbml0eS5jCkBAIC0wLDAgKzEsNDIwIEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXNhbml0eS5jCisKKwlBYnN0cmFjdDoKKworCVJldmlzaW9uIEhpc3Rvcnk6CisJV2hvCQkJV2hlbgkJCVdoYXQKKwktLS0tLS0tLQktLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJSm9obiBDaGFuZyAgMjAwNC0wOS0wMSAgICAgIGFkZCBXTU0gc3VwcG9ydAorKi8KKyNpbmNsdWRlICIuLi9ydF9jb25maWcuaCIKKworZXh0ZXJuIFVDSEFSCUNJU0NPX09VSVtdOworCitleHRlcm4gVUNIQVIJV1BBX09VSVtdOworZXh0ZXJuIFVDSEFSCVJTTl9PVUlbXTsKK2V4dGVybiBVQ0hBUglXTUVfSU5GT19FTEVNW107CitleHRlcm4gVUNIQVIJV01FX1BBUk1fRUxFTVtdOworZXh0ZXJuIFVDSEFSCUNjeDJRb3NJbmZvW107CitleHRlcm4gVUNIQVIJUkFMSU5LX09VSVtdOworZXh0ZXJuIFVDSEFSCUJST0FEQ09NX09VSVtdOworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIE1MTUUgbWVzc2FnZSBzYW5pdHkgY2hlY2sKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIE1sbWVTdGFydFJlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBDSEFSIFNzaWRbXSwKKyAgICBPVVQgVUNIQVIgKnBTc2lkTGVuKQoreworICAgIE1MTUVfU1RBUlRfUkVRX1NUUlVDVCAqSW5mbzsKKworICAgIEluZm8gPSAoTUxNRV9TVEFSVF9SRVFfU1RSVUNUICopKE1zZyk7CisKKyAgICBpZiAoSW5mby0+U3NpZExlbiA+IE1BWF9MRU5fT0ZfU1NJRCkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVTdGFydFJlcVNhbml0eSBmYWlsIC0gd3JvbmcgU1NJRCBsZW5ndGhcbiIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgICpwU3NpZExlbiA9IEluZm8tPlNzaWRMZW47CisgICAgTmRpc01vdmVNZW1vcnkoU3NpZCwgSW5mby0+U3NpZCwgKnBTc2lkTGVuKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIE1MTUUgbWVzc2FnZSBzYW5pdHkgY2hlY2sKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKworICAgIElSUUwgPSBESVNQQVRDSF9MRVZFTAorCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworQk9PTEVBTiBQZWVyQXNzb2NSc3BTYW5pdHkoCisgICAgSU4gUFJUTVBfQURBUFRFUiBwQWQsCisgICAgSU4gVk9JRCAqcE1zZywKKyAgICBJTiBVTE9ORyBNc2dMZW4sCisgICAgT1VUIFBVQ0hBUiBwQWRkcjIsCisgICAgT1VUIFVTSE9SVCAqcENhcGFiaWxpdHlJbmZvLAorICAgIE9VVCBVU0hPUlQgKnBTdGF0dXMsCisgICAgT1VUIFVTSE9SVCAqcEFpZCwKKyAgICBPVVQgVUNIQVIgU3VwUmF0ZVtdLAorICAgIE9VVCBVQ0hBUiAqcFN1cFJhdGVMZW4sCisgICAgT1VUIFVDSEFSIEV4dFJhdGVbXSwKKyAgICBPVVQgVUNIQVIgKnBFeHRSYXRlTGVuLAorICAgIE9VVCBIVF9DQVBBQklMSVRZX0lFCQkqcEh0Q2FwYWJpbGl0eSwKKyAgICBPVVQgQUREX0hUX0lORk9fSUUJCSpwQWRkSHRJbmZvLAkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKyAgICBPVVQgVUNIQVIJCQkqcEh0Q2FwYWJpbGl0eUxlbiwKKyAgICBPVVQgVUNIQVIJCQkqcEFkZEh0SW5mb0xlbiwKKyAgICBPVVQgVUNIQVIJCQkqcE5ld0V4dENoYW5uZWxPZmZzZXQsCisgICAgT1VUIFBFRENBX1BBUk0gcEVkY2FQYXJtLAorICAgIE9VVCBVQ0hBUiAqcENraXBGbGFnKQoreworICAgIENIQVIgICAgICAgICAgSWVUeXBlLCAqUHRyOworICAgIFBGUkFNRV84MDJfMTEgcEZyYW1lID0gKFBGUkFNRV84MDJfMTEpcE1zZzsKKyAgICBQRUlEX1NUUlVDVCAgIHBFaWQ7CisgICAgVUxPTkcgICAgICAgICBMZW5ndGggPSAwOworCisJKnBOZXdFeHRDaGFubmVsT2Zmc2V0ID0gMHhmZjsKKwkqcEh0Q2FwYWJpbGl0eUxlbiA9IDA7CisJKnBBZGRIdEluZm9MZW4gPSAwOworICAgIENPUFlfTUFDX0FERFIocEFkZHIyLCBwRnJhbWUtPkhkci5BZGRyMik7CisgICAgUHRyID0gcEZyYW1lLT5PY3RldDsKKyAgICBMZW5ndGggKz0gTEVOR1RIXzgwMl8xMTsKKworICAgIE5kaXNNb3ZlTWVtb3J5KHBDYXBhYmlsaXR5SW5mbywgJnBGcmFtZS0+T2N0ZXRbMF0sIDIpOworICAgIExlbmd0aCArPSAyOworICAgIE5kaXNNb3ZlTWVtb3J5KHBTdGF0dXMsICAgICAgICAgJnBGcmFtZS0+T2N0ZXRbMl0sIDIpOworICAgIExlbmd0aCArPSAyOworICAgICpwQ2tpcEZsYWcgPSAwOworICAgICpwRXh0UmF0ZUxlbiA9IDA7CisgICAgcEVkY2FQYXJtLT5iVmFsaWQgPSBGQUxTRTsKKworICAgIGlmICgqcFN0YXR1cyAhPSBNTE1FX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgTmRpc01vdmVNZW1vcnkocEFpZCwgJnBGcmFtZS0+T2N0ZXRbNF0sIDIpOworICAgIExlbmd0aCArPSAyOworCisgICAgLy8gQWlkIGFscmVhZHkgc3dhcGVkIGJ5dGUgb3JkZXIgaW4gUlRNUEZyYW1lRW5kaWFuQ2hhbmdlKCkgZm9yIGJpZyBlbmRpYW4gcGxhdGZvcm0KKyAgICAqcEFpZCA9ICgqcEFpZCkgJiAweDNmZmY7IC8vIEFJRCBpcyBsb3cgMTQtYml0CisKKyAgICAvLyAtLSBnZXQgc3VwcG9ydGVkIHJhdGVzIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIEllVHlwZSA9IHBGcmFtZS0+T2N0ZXRbNl07CisgICAgKnBTdXBSYXRlTGVuID0gcEZyYW1lLT5PY3RldFs3XTsKKyAgICBpZiAoKEllVHlwZSAhPSBJRV9TVVBQX1JBVEVTKSB8fCAoKnBTdXBSYXRlTGVuID4gTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGVlckFzc29jUnNwU2FuaXR5IGZhaWwgLSB3cm9uZyBTdXBwb3J0ZWRSYXRlcyBJRVxuIikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgTmRpc01vdmVNZW1vcnkoU3VwUmF0ZSwgJnBGcmFtZS0+T2N0ZXRbOF0sICpwU3VwUmF0ZUxlbik7CisKKyAgICBMZW5ndGggPSBMZW5ndGggKyAyICsgKnBTdXBSYXRlTGVuOworCisgICAgLy8gbWFueSBBUCBpbXBsZW1lbnQgcHJvcHJpZXRhcnkgSUVzIGluIG5vbi1zdGFuZGFyZCBvcmRlciwgd2UnZCBiZXR0ZXIKKyAgICAvLyB0b2xlcmF0ZSBtaXMtb3JkZXJlZCBJRXMgdG8gZ2V0IGJlc3QgY29tcGF0aWJpbGl0eQorICAgIHBFaWQgPSAoUEVJRF9TVFJVQ1QpICZwRnJhbWUtPk9jdGV0WzggKyAoKnBTdXBSYXRlTGVuKV07CisKKyAgICAvLyBnZXQgdmFyaWFibGUgZmllbGRzIGZyb20gcGF5bG9hZCBhbmQgYWR2YW5jZSB0aGUgcG9pbnRlcgorICAgIHdoaWxlICgoTGVuZ3RoICsgMiArIHBFaWQtPkxlbikgPD0gTXNnTGVuKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwRWlkLT5FaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgSUVfRVhUX1NVUFBfUkFURVM6CisgICAgICAgICAgICAgICAgaWYgKHBFaWQtPkxlbiA8PSBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KEV4dFJhdGUsIHBFaWQtPk9jdGV0LCBwRWlkLT5MZW4pOworICAgICAgICAgICAgICAgICAgICAqcEV4dFJhdGVMZW4gPSBwRWlkLT5MZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgY2FzZSBJRV9IVF9DQVA6CisgICAgICAgICAgICBjYXNlIElFX0hUX0NBUDI6CisJCQlpZiAocEVpZC0+TGVuID49IFNJWkVfSFRfQ0FQX0lFKSAgLy9Ob3RlOiBhbGxvdyBleHRlbnNpb24uISEKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShwSHRDYXBhYmlsaXR5LCBwRWlkLT5PY3RldCwgU0laRV9IVF9DQVBfSUUpOworCisJCQkJKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkh0Q2FwSW5mbykgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+SHRDYXBJbmZvKSk7CisJCQkJKihVU0hPUlQgKikoJnBIdENhcGFiaWxpdHktPkV4dEh0Q2FwSW5mbykgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcEh0Q2FwYWJpbGl0eS0+RXh0SHRDYXBJbmZvKSk7CisKKwkJCQkqcEh0Q2FwYWJpbGl0eUxlbiA9IFNJWkVfSFRfQ0FQX0lFOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckFzc29jUnNwU2FuaXR5IC0gd3JvbmcgSUVfSFRfQ0FQLiBcbiIpKTsKKwkJCX0KKworCQlicmVhazsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyAgICAgICAgICAgIGNhc2UgSUVfQUREX0hUOgorICAgICAgICAgICAgY2FzZSBJRV9BRERfSFQyOgorCQkJaWYgKHBFaWQtPkxlbiA+PSBzaXplb2YoQUREX0hUX0lORk9fSUUpKQorCQkJeworCQkJCS8vIFRoaXMgSUUgYWxsb3dzIGV4dGVuc2lvbiwgYnV0IHdlIGNhbiBpZ25vcmUgZXh0cmEgYnl0ZXMgYmV5b25kIG91ciBrbm93bGVkZ2UgLCBzbyBvbmx5CisJCQkJLy8gY29weSBmaXJzdCBzaXplb2YoQUREX0hUX0lORk9fSUUpCisJCQkJTmRpc01vdmVNZW1vcnkocEFkZEh0SW5mbywgcEVpZC0+T2N0ZXQsIHNpemVvZihBRERfSFRfSU5GT19JRSkpOworCisJCQkJKihVU0hPUlQgKikoJnBBZGRIdEluZm8tPkFkZEh0SW5mbzIpID0gY3B1MmxlMTYoKihVU0hPUlQgKikoJnBBZGRIdEluZm8tPkFkZEh0SW5mbzIpKTsKKwkJCQkqKFVTSE9SVCAqKSgmcEFkZEh0SW5mby0+QWRkSHRJbmZvMykgPSBjcHUybGUxNigqKFVTSE9SVCAqKSgmcEFkZEh0SW5mby0+QWRkSHRJbmZvMykpOworCisJCQkJKnBBZGRIdEluZm9MZW4gPSBTSVpFX0FERF9IVF9JTkZPX0lFOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1dBUk4sICgiUGVlckFzc29jUnNwU2FuaXR5IC0gd3JvbmcgSUVfQUREX0hULiBcbiIpKTsKKwkJCX0KKworCQlicmVhazsKKyAgICAgICAgICAgIGNhc2UgSUVfU0VDT05EQVJZX0NIX09GRlNFVDoKKwkJCWlmIChwRWlkLT5MZW4gPT0gMSkKKwkJCXsKKwkJCQkqcE5ld0V4dENoYW5uZWxPZmZzZXQgPSBwRWlkLT5PY3RldFswXTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19XQVJOLCAoIlBlZXJBc3NvY1JzcFNhbml0eSAtIHdyb25nIElFX1NFQ09OREFSWV9DSF9PRkZTRVQuIFxuIikpOworCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQlicmVhazsKKyAgICAgICAgICAgIGNhc2UgSUVfQUlST05FVF9DS0lQOgorICAgICAgICAgICAgICAgIC8vIDAuIENoZWNrIEFpcm9uZXQgSUUgbGVuZ3RoLCBpdCBtdXN0IGJlIGxhcmdlciBvciBlcXVhbCB0byAyOAorICAgICAgICAgICAgICAgIC8vICAgIENpc2NvJ3MgQVAgVnhXb3JrIHZlcnNpb24od2lsbCBub3QgYmUgc3VwcG9ydGVkKSB1c2VkIHRoaXMgSUUgbGVuZ3RoIGFzIDI4CisgICAgICAgICAgICAgICAgLy8gICAgQ2lzY28ncyBBUCBJT1MgdmVyc2lvbiB1c2VkIHRoaXMgSUUgbGVuZ3RoIGFzIDMwCisgICAgICAgICAgICAgICAgaWYgKHBFaWQtPkxlbiA8IChDS0lQX05FR09USUFUSU9OX0xFTkdUSCAtIDIpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gMS4gQ29weSBDS0lQIGZsYWcgYnl0ZSB0byBidWZmZXIgZm9yIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAqcENraXBGbGFnID0gKihwRWlkLT5PY3RldCArIDgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIElFX0FJUk9ORVRfSVBBRERSRVNTOgorICAgICAgICAgICAgICAgIGlmIChwRWlkLT5MZW4gIT0gMHgwQSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIEdldCBDaXNjbyBBaXJvbmV0IElQIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgQ0lTQ09fT1VJLCAzKSA9PSAxKQorICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5BaXJvbmV0SVBBZGRyZXNzLCBwRWlkLT5PY3RldCArIDQsIDQpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvLyBDQ1gyLCBXTU0gdXNlIHRoZSBzYW1lIElFIHZhbHVlCisgICAgICAgICAgICAvLyBjYXNlIElFX0NDWF9WMjoKKyAgICAgICAgICAgIGNhc2UgSUVfVkVORE9SX1NQRUNJRklDOgorICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBXTUUgUEFSQU1URVIgRUxFTUVOVAorICAgICAgICAgICAgICAgIGlmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdNRV9QQVJNX0VMRU0sIDYpICYmIChwRWlkLT5MZW4gPT0gMjQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUFVDSEFSIHB0cjsKKyAgICAgICAgICAgICAgICAgICAgaW50IGk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2luZyBFRENBIHBhcmFtZXRlcnMKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iVmFsaWQgICAgICAgICAgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPmJRQWNrICAgICAgICAgICA9IEZBTFNFOyAvLyBwRWlkLT5PY3RldFswXSAmIDB4MTA7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YlF1ZXVlUmVxdWVzdCAgID0gRkFMU0U7IC8vIHBFaWQtPk9jdGV0WzBdICYgMHgyMDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iVHhvcFJlcXVlc3QgICAgPSBGQUxTRTsgLy8gcEVpZC0+T2N0ZXRbMF0gJiAweDQwOworICAgICAgICAgICAgICAgICAgICAvL3BFZGNhUGFybS0+Yk1vcmVEYXRhQWNrICAgID0gRkFMU0U7IC8vIHBFaWQtPk9jdGV0WzBdICYgMHg4MDsKKyAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5FZGNhVXBkYXRlQ291bnQgPSBwRWlkLT5PY3RldFs2XSAmIDB4MGY7CisgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+YkFQU0RDYXBhYmxlICAgID0gKHBFaWQtPk9jdGV0WzZdICYgMHg4MCkgPyAxIDogMDsKKyAgICAgICAgICAgICAgICAgICAgcHRyID0gJnBFaWQtPk9jdGV0WzhdOworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTw0OyBpKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVDSEFSIGFjaSA9ICgqcHRyICYgMHg2MCkgPj4gNTsgLy8gYjV+NiBpcyBBQyBJTkRFWAorICAgICAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5iQUNNW2FjaV0gID0gKCgoKnB0cikgJiAweDEwKSA9PSAweDEwKTsgICAvLyBiNSBpcyBBQ00KKyAgICAgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+QWlmc25bYWNpXSA9ICgqcHRyKSAmIDB4MGY7ICAgICAgICAgICAgICAgLy8gYjB+MyBpcyBBSUZTTgorICAgICAgICAgICAgICAgICAgICAgICAgcEVkY2FQYXJtLT5Dd21pblthY2ldID0gKihwdHIrMSkgJiAweDBmOyAgICAgICAgICAgICAvLyBiMH40IGlzIEN3bWluCisgICAgICAgICAgICAgICAgICAgICAgICBwRWRjYVBhcm0tPkN3bWF4W2FjaV0gPSAqKHB0cisxKSA+PiA0OyAgICAgICAgICAgICAgIC8vIGI1fjggaXMgQ3dtYXgKKyAgICAgICAgICAgICAgICAgICAgICAgIHBFZGNhUGFybS0+VHhvcFthY2ldICA9ICoocHRyKzIpICsgMjU2ICogKCoocHRyKzMpKTsgLy8gaW4gdW5pdCBvZiAzMi11cworICAgICAgICAgICAgICAgICAgICAgICAgcHRyICs9IDQ7IC8vIHBvaW50IHRvIG5leHQgQUMKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBDQ1ggSUUKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAwLiBDaGVjayB0aGUgc2l6ZSBhbmQgQ0NYIGFkbWluIGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLkNDWENvbnRyb2wuZmllbGQuRW5hYmxlID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBFaWQtPkxlbiAhPSA1KQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gVHVybiBDQ1gyIGlmIG1hdGNoZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCwgQ2N4MkllSW5mbywgNSkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLkNDWEVuYWJsZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQXNzb2NSc3BTYW5pdHkgLSBpZ25vcmUgdW5yZWNvZ25pemVkIEVJRCA9ICVkXG4iLCBwRWlkLT5FaWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIExlbmd0aCA9IExlbmd0aCArIDIgKyBwRWlkLT5MZW47CisgICAgICAgIHBFaWQgPSAoUEVJRF9TVFJVQ1QpKChVQ0hBUiopcEVpZCArIDIgKyBwRWlkLT5MZW4pOworICAgIH0KKworICAgIC8vIEZvcmNlIENDWDIgZW5hYmxlIHRvIFRSVUUgZm9yIHRob3NlIEFQIGRpZG4ndCByZXBsYXkgQ0NYIHYyIElFLCB3ZSBzdGlsbCBmb3JjZSBpdCB0byBiZSBvbgorICAgIGlmIChwQWQtPlN0YUNmZy5DQ1hDb250cm9sLmZpZWxkLkVuYWJsZSA9PSAxKQorICAgICAgICBwQWQtPlN0YUNmZy5DQ1hFbmFibGUgPSBUUlVFOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgTUxNRSBtZXNzYWdlIHNhbml0eSBjaGVjaworICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitCT09MRUFOIFBlZXJQcm9iZVJlcVNhbml0eSgKKyAgICBJTiBQUlRNUF9BREFQVEVSIHBBZCwKKyAgICBJTiBWT0lEICpNc2csCisgICAgSU4gVUxPTkcgTXNnTGVuLAorICAgIE9VVCBQVUNIQVIgcEFkZHIyLAorICAgIE9VVCBDSEFSIFNzaWRbXSwKKyAgICBPVVQgVUNIQVIgKnBTc2lkTGVuKQoreworICAgIFVDSEFSICAgICAgICAgSWR4OworICAgIFVDSEFSCSAgICAgIFJhdGVMZW47CisgICAgQ0hBUiAgICAgICAgICBJZVR5cGU7CisgICAgUEZSQU1FXzgwMl8xMSBwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSlNc2c7CisKKyAgICBDT1BZX01BQ19BRERSKHBBZGRyMiwgcEZyYW1lLT5IZHIuQWRkcjIpOworCisgICAgaWYgKChwRnJhbWUtPk9jdGV0WzBdICE9IElFX1NTSUQpIHx8IChwRnJhbWUtPk9jdGV0WzFdID4gTUFYX0xFTl9PRl9TU0lEKSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJQcm9iZVJlcVNhbml0eSBmYWlsIC0gd3JvbmcgU1NJRCBJRShUeXBlPSVkLExlbj0lZClcbiIscEZyYW1lLT5PY3RldFswXSxwRnJhbWUtPk9jdGV0WzFdKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICAqcFNzaWRMZW4gPSBwRnJhbWUtPk9jdGV0WzFdOworICAgIE5kaXNNb3ZlTWVtb3J5KFNzaWQsICZwRnJhbWUtPk9jdGV0WzJdLCAqcFNzaWRMZW4pOworCisgICAgSWR4ID0gKnBTc2lkTGVuICsgMjsKKworICAgIC8vIC0tIGdldCBzdXBwb3J0ZWQgcmF0ZXMgZnJvbSBwYXlsb2FkIGFuZCBhZHZhbmNlIHRoZSBwb2ludGVyCisgICAgSWVUeXBlID0gcEZyYW1lLT5PY3RldFtJZHhdOworICAgIFJhdGVMZW4gPSBwRnJhbWUtPk9jdGV0W0lkeCArIDFdOworICAgIGlmIChJZVR5cGUgIT0gSUVfU1VQUF9SQVRFUykKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlBlZXJQcm9iZVJlcVNhbml0eSBmYWlsIC0gd3JvbmcgU3VwcG9ydFJhdGVzIElFKFR5cGU9JWQsTGVuPSVkKVxuIixwRnJhbWUtPk9jdGV0W0lkeF0scEZyYW1lLT5PY3RldFtJZHgrMV0pKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExRykgJiYgKFJhdGVMZW4gPCA4KSkKKyAgICAgICAgICAgIHJldHVybiAoRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK0JPT0xFQU4gR2V0VGltQml0KAorICAgIElOIENIQVIgKlB0ciwKKyAgICBJTiBVU0hPUlQgQWlkLAorICAgIE9VVCBVQ0hBUiAqVGltTGVuLAorICAgIE9VVCBVQ0hBUiAqQmNhc3RGbGFnLAorICAgIE9VVCBVQ0hBUiAqRHRpbUNvdW50LAorICAgIE9VVCBVQ0hBUiAqRHRpbVBlcmlvZCwKKyAgICBPVVQgVUNIQVIgKk1lc3NhZ2VUb01lKQoreworICAgIFVDSEFSICAgICAgICAgIEJpdENudGwsIE4xLCBOMiwgTXlCeXRlLCBNeUJpdDsKKyAgICBDSEFSICAgICAgICAgICpJZHhQdHI7CisKKyAgICBJZHhQdHIgPSBQdHI7CisKKyAgICBJZHhQdHIgKys7CisgICAgKlRpbUxlbiA9ICpJZHhQdHI7CisKKyAgICAvLyBnZXQgRFRJTSBDb3VudCBmcm9tIFRJTSBlbGVtZW50CisgICAgSWR4UHRyICsrOworICAgICpEdGltQ291bnQgPSAqSWR4UHRyOworCisgICAgLy8gZ2V0IERUSU0gUGVyaW9kIGZyb20gVElNIGVsZW1lbnQKKyAgICBJZHhQdHIrKzsKKyAgICAqRHRpbVBlcmlvZCA9ICpJZHhQdHI7CisKKyAgICAvLyBnZXQgQml0bWFwIENvbnRyb2wgZnJvbSBUSU0gZWxlbWVudAorICAgIElkeFB0cisrOworICAgIEJpdENudGwgPSAqSWR4UHRyOworCisgICAgaWYgKCgqRHRpbUNvdW50ID09IDApICYmIChCaXRDbnRsICYgMHgwMSkpCisgICAgICAgICpCY2FzdEZsYWcgPSBUUlVFOworICAgIGVsc2UKKyAgICAgICAgKkJjYXN0RmxhZyA9IEZBTFNFOworCisgICAgLy8gUGFyc2UgUGFydGlhbCBWaXJ0dWFsIEJpdG1hcCBmcm9tIFRJTSBlbGVtZW50CisgICAgTjEgPSBCaXRDbnRsICYgMHhmZTsgICAgLy8gTjEgaXMgdGhlIGZpcnN0IGJpdG1hcCBieXRlIworICAgIE4yID0gKlRpbUxlbiAtIDQgKyBOMTsgIC8vIE4yIGlzIHRoZSBsYXN0IGJpdG1hcCBieXRlIworCisgICAgaWYgKChBaWQgPCAoTjEgPDwgMykpIHx8IChBaWQgPj0gKChOMiArIDEpIDw8IDMpKSkKKyAgICAgICAgKk1lc3NhZ2VUb01lID0gRkFMU0U7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgTXlCeXRlID0gKEFpZCA+PiAzKSAtIE4xOyAgICAgICAgICAgICAgICAgICAgICAgLy8gbXkgYnl0ZSBwb3NpdGlvbiBpbiB0aGUgYml0bWFwIGJ5dGUtc3RyZWFtCisgICAgICAgIE15Qml0ID0gQWlkICUgMTYgLSAoKE15Qnl0ZSAmIDB4MDEpPyA4OjApOworCisgICAgICAgIElkeFB0ciArPSAoTXlCeXRlICsgMSk7CisKKyAgICAgICAgLy9pZiAoKklkeFB0cikKKyAgICAgICAgLy8gICAgREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJUSU0gYml0bWFwID0gMHglMDJ4XG4iLCAqSWR4UHRyKSk7CisKKyAgICAgICAgaWYgKCpJZHhQdHIgJiAoMHgwMSA8PCBNeUJpdCkpCisgICAgICAgICAgICAqTWVzc2FnZVRvTWUgPSBUUlVFOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqTWVzc2FnZVRvTWUgPSBGQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvc3luYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGEvc3luYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNWIzYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS9zeW5jLmMKQEAgLTAsMCArMSwxNzU1IEBACisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFJhbGluayBUZWNoIEluYy4KKyAqIDVGLiwgTm8uMzYsIFRhaXl1YW4gU3QuLCBKaHViZWkgQ2l0eSwKKyAqIEhzaW5jaHUgQ291bnR5IDMwMiwKKyAqIFRhaXdhbiwgUi5PLkMuCisgKgorICogKGMpIENvcHlyaWdodCAyMDAyLTIwMDcsIFJhbGluayBUZWNobm9sb2d5LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgICoKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgICAgICAgICoKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCU1vZHVsZSBOYW1lOgorCXN5bmMuYworCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCUpvaG4gQ2hhbmcJMjAwNC0wOS0wMSAgICAgIG1vZGlmaWVkIGZvciBydDI1NjEvMjY2MQorCUphbiBMZWUJCTIwMDYtMDgtMDEgICAgICBtb2RpZmllZCBmb3IgcnQyODYwIGZvciA4MDIuMTFuCisqLworI2luY2x1ZGUgIi4uL3J0X2NvbmZpZy5oIgorCisjZGVmaW5lIEFESE9DX0VOVFJZX0JFQUNPTl9MT1NUX1RJTUUJKDIqT1NfSFopCS8vIDIgc2VjCisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVGhlIHN5bmMgc3RhdGUgbWFjaGluZSwKKwlQYXJhbWV0ZXJzOgorCQlTbSAtIHBvaW50ZXIgdG8gdGhlIHN0YXRlIG1hY2hpbmUKKwlOb3RlOgorCQl0aGUgc3RhdGUgbWFjaGluZSBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgU3luY1N0YXRlTWFjaGluZUluaXQoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gU1RBVEVfTUFDSElORSAqU20sCisJT1VUIFNUQVRFX01BQ0hJTkVfRlVOQyBUcmFuc1tdKQoreworCVN0YXRlTWFjaGluZUluaXQoU20sIFRyYW5zLCBNQVhfU1lOQ19TVEFURSwgTUFYX1NZTkNfTVNHLCAoU1RBVEVfTUFDSElORV9GVU5DKURyb3AsIFNZTkNfSURMRSwgU1lOQ19NQUNISU5FX0JBU0UpOworCisJLy8gY29sdW1uIDEKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNZTkNfSURMRSwgTVQyX01MTUVfU0NBTl9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpTWxtZVNjYW5SZXFBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU1lOQ19JRExFLCBNVDJfTUxNRV9KT0lOX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lSm9pblJlcUFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTWU5DX0lETEUsIE1UMl9NTE1FX1NUQVJUX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylNbG1lU3RhcnRSZXFBY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU1lOQ19JRExFLCBNVDJfUEVFUl9CRUFDT04sIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckJlYWNvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTWU5DX0lETEUsIE1UMl9QRUVSX1BST0JFX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyUHJvYmVSZXFBY3Rpb24pOworCisJLy9jb2x1bW4gMgorCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgSk9JTl9XQUlUX0JFQUNPTiwgTVQyX01MTUVfU0NBTl9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlblNjYW4pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgSk9JTl9XQUlUX0JFQUNPTiwgTVQyX01MTUVfSk9JTl9SRVEsIChTVEFURV9NQUNISU5FX0ZVTkMpSW52YWxpZFN0YXRlV2hlbkpvaW4pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgSk9JTl9XQUlUX0JFQUNPTiwgTVQyX01MTUVfU1RBUlRfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5TdGFydCk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBKT0lOX1dBSVRfQkVBQ09OLCBNVDJfUEVFUl9CRUFDT04sIChTVEFURV9NQUNISU5FX0ZVTkMpUGVlckJlYWNvbkF0Sm9pbkFjdGlvbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBKT0lOX1dBSVRfQkVBQ09OLCBNVDJfQkVBQ09OX1RJTUVPVVQsIChTVEFURV9NQUNISU5FX0ZVTkMpQmVhY29uVGltZW91dEF0Sm9pbkFjdGlvbik7CisKKwkvLyBjb2x1bW4gMworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU0NBTl9MSVNURU4sIE1UMl9NTE1FX1NDQU5fUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5TY2FuKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNDQU5fTElTVEVOLCBNVDJfTUxNRV9KT0lOX1JFUSwgKFNUQVRFX01BQ0hJTkVfRlVOQylJbnZhbGlkU3RhdGVXaGVuSm9pbik7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTQ0FOX0xJU1RFTiwgTVQyX01MTUVfU1RBUlRfUkVRLCAoU1RBVEVfTUFDSElORV9GVU5DKUludmFsaWRTdGF0ZVdoZW5TdGFydCk7CisJU3RhdGVNYWNoaW5lU2V0QWN0aW9uKFNtLCBTQ0FOX0xJU1RFTiwgTVQyX1BFRVJfQkVBQ09OLCAoU1RBVEVfTUFDSElORV9GVU5DKVBlZXJCZWFjb25BdFNjYW5BY3Rpb24pOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTbSwgU0NBTl9MSVNURU4sIE1UMl9QRUVSX1BST0JFX1JTUCwgKFNUQVRFX01BQ0hJTkVfRlVOQylQZWVyQmVhY29uQXRTY2FuQWN0aW9uKTsKKwlTdGF0ZU1hY2hpbmVTZXRBY3Rpb24oU20sIFNDQU5fTElTVEVOLCBNVDJfU0NBTl9USU1FT1VULCAoU1RBVEVfTUFDSElORV9GVU5DKVNjYW5UaW1lb3V0QWN0aW9uKTsKKworCS8vIHRpbWVyIGluaXQKKwlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+TWxtZUF1eC5CZWFjb25UaW1lciwgR0VUX1RJTUVSX0ZVTkNUSU9OKEJlYWNvblRpbWVvdXQpLCBwQWQsIEZBTFNFKTsKKwlSVE1QSW5pdFRpbWVyKHBBZCwgJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsIEdFVF9USU1FUl9GVU5DVElPTihTY2FuVGltZW91dCksIHBBZCwgRkFMU0UpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCUJlYWNvbiB0aW1lb3V0IGhhbmRsZXIsIGV4ZWN1dGVkIGluIHRpbWVyIHRocmVhZAorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEJlYWNvblRpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCVJUTVBfQURBUFRFUiAqcEFkID0gKFJUTVBfQURBUFRFUiAqKUZ1bmN0aW9uQ29udGV4dDsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU1lOQyAtIEJlYWNvblRpbWVvdXRcbiIpKTsKKworCS8vIERvIG5vdGhpbmcgaWYgdGhlIGRyaXZlciBpcyBzdGFydGluZyBoYWx0IHN0YXRlLgorCS8vIFRoaXMgbWlnaHQgaGFwcGVuIHdoZW4gdGltZXIgYWxyZWFkeSBiZWVuIGZpcmVkIGJlZm9yZSBjYW5jZWwgdGltZXIgd2l0aCBtbG1laGFsdAorCWlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfSEFMVF9JTl9QUk9HUkVTUykpCisJCXJldHVybjsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCWlmICgocEFkLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID09IEJXXzQwKQorCQkpCisJeworCQlVQ0hBUiAgICAgICAgQkJQVmFsdWUgPSAwOworCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLCBGQUxTRSk7CisJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKTsKKwkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQkJQVmFsdWUpOworCQlCQlBWYWx1ZSAmPSAofjB4MTgpOworCQlCQlBWYWx1ZSB8PSAweDEwOworCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCBCQlBWYWx1ZSk7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBFbmQgb2YgU0NBTiwgcmVzdG9yZSB0byA0ME1IeiBjaGFubmVsICVkLCBUb3RhbCBCU1NbJTAyZF1cbiIscEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIHBBZC0+U2NhblRhYi5Cc3NOcikpOworCX0KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCU1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfQkVBQ09OX1RJTUVPVVQsIDAsIE5VTEwpOworCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlTY2FuIHRpbWVvdXQgaGFuZGxlciwgZXhlY3V0ZWQgaW4gdGltZXIgdGhyZWFkCisKKwlJUlFMID0gRElTUEFUQ0hfTEVWRUwKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgU2NhblRpbWVvdXQoCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorCUlOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKwlJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisJSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworCVJUTVBfQURBUFRFUiAqcEFkID0gKFJUTVBfQURBUFRFUiAqKUZ1bmN0aW9uQ29udGV4dDsKKworCisJLy8gRG8gbm90aGluZyBpZiB0aGUgZHJpdmVyIGlzIHN0YXJ0aW5nIGhhbHQgc3RhdGUuCisJLy8gVGhpcyBtaWdodCBoYXBwZW4gd2hlbiB0aW1lciBhbHJlYWR5IGJlZW4gZmlyZWQgYmVmb3JlIGNhbmNlbCB0aW1lciB3aXRoIG1sbWVoYWx0CisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9IQUxUX0lOX1BST0dSRVNTKSkKKwkJcmV0dXJuOworCisJaWYgKE1sbWVFbnF1ZXVlKHBBZCwgU1lOQ19TVEFURV9NQUNISU5FLCBNVDJfU0NBTl9USU1FT1VULCAwLCBOVUxMKSkKKwl7CisJCVJUMjhYWF9NTE1FX0hBTkRMRVIocEFkKTsKKwl9CisJZWxzZQorCXsKKwkJLy8gVG8gcHJldmVudCBTeW5jTWFjaGluZS5DdXJyU3RhdGUgaXMgU0NBTl9MSVNURU4gZm9yZXZlci4KKwkJcEFkLT5NbG1lQXV4LkNoYW5uZWwgPSAwOworCQlTY2FuTmV4dENoYW5uZWwocEFkKTsKKwkJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQl7CisJCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19TQ0FOX0VOUVVFVUVfRkFJTF9FVkVOVF9GTEFHLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIEJTUzAsIDApOworCQl9CisJfQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCU1MTUUgU0NBTiByZXEgc3RhdGUgbWFjaGluZSBwcm9jZWR1cmUKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIE1sbWVTY2FuUmVxQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVQ0hBUiAgICAgICAgICBTc2lkW01BWF9MRU5fT0ZfU1NJRF0sIFNzaWRMZW4sIFNjYW5UeXBlLCBCc3NUeXBlLCBCQlBWYWx1ZSA9IDA7CisJQk9PTEVBTiAgICAgICAgVGltZXJDYW5jZWxsZWQ7CisJVUxPTkcJCSAgIE5vdzsKKwlVU0hPUlQgICAgICAgICBTdGF0dXM7CisJUEhFQURFUl84MDJfMTEgcEhkcjgwMjExOworCVBVQ0hBUiAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCU5ESVNfU1RBVFVTICAgIE5TdGF0dXM7CisKKwkvLyBDaGVjayB0aGUgdG90YWwgc2NhbiB0cmllcyBmb3Igb25lIHNpbmdsZSBPSUQgY29tbWFuZAorCS8vIElmIHRoaXMgaXMgdGhlIENDWCAyLjAgQ2FzZSwgc2tpcCB0aGF0IQorCWlmICggIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9TVEFSVF9VUCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gTWxtZVNjYW5SZXFBY3Rpb24gYmVmb3JlIFN0YXJ0dXBcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCS8vIEluY3JlYXNlIHRoZSBzY2FuIHJldHJ5IGNvdW50ZXJzLgorCXBBZC0+U3RhQ2ZnLlNjYW5DbnQrKzsKKworCisJLy8gZmlyc3QgY2hlY2sgdGhlIHBhcmFtZXRlciBzYW5pdHkKKwlpZiAoTWxtZVNjYW5SZXFTYW5pdHkocEFkLAorCQkJCQkJICBFbGVtLT5Nc2csCisJCQkJCQkgIEVsZW0tPk1zZ0xlbiwKKwkJCQkJCSAgJkJzc1R5cGUsCisJCQkJCQkgIFNzaWQsCisJCQkJCQkgICZTc2lkTGVuLAorCQkJCQkJICAmU2NhblR5cGUpKQorCXsKKworCQkvLyBDaGVjayBmb3IgY2hhbm5lbCBsb2FkIGFuZCBub2lzZSBoaXN0IHJlcXVlc3QKKwkJLy8gU3VzcGVuZCBNU0RVIG9ubHkgYXQgc2NhbiByZXF1ZXN0LCBub3QgdGhlIGxhc3QgdHdvIG1lbnRpb25lZAorCQlpZiAoKFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fTk9JU0UpIHx8IChTY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX0NIQU5ORUxfTE9BRCkpCisJCXsKKwkJCWlmIChwQWQtPlN0YUNmZy5DQ1hTY2FuQ2hhbm5lbCAhPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCQkJCVJUTVBTdXNwZW5kTXNkdVRyYW5zbWlzc2lvbihwQWQpOwkJCS8vIFN1c3BlbmQgTVNEVSB0cmFuc21pc3Npb24gaGVyZQorCQl9CisJCWVsc2UKKwkJeworCQkJLy8gU3VzcGVuZCBNU0RVIHRyYW5zbWlzc2lvbiBoZXJlCisJCQlSVE1QU3VzcGVuZE1zZHVUcmFuc21pc3Npb24ocEFkKTsKKwkJfQorCisJCS8vCisJCS8vIFRvIHByZXZlbnQgZGF0YSBsb3N0LgorCQkvLyBTZW5kIGFuIE5VTEwgZGF0YSB3aXRoIHR1cm5lZCBQU00gYml0IG9uIHRvIGN1cnJlbnQgYXNzb2NpYXRlZCBBUCBiZWZvcmUgU0NBTiBwcm9ncmVzcy4KKwkJLy8gQW5kIHNob3VsZCBzZW5kIGFuIE5VTEwgZGF0YSB3aXRoIHR1cm5lZCBQU00gYml0IG9mZiB0byBBUCwgd2hlbiBzY2FuIHByb2dyZXNzIGRvbmUKKwkJLy8KKwkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSAmJiAoSU5GUkFfT04ocEFkKSkpCisJCXsKKwkJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFZPSUQpJnBPdXRCdWZmZXIpOworCQkJaWYgKE5TdGF0dXMJPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCXsKKwkJCQlwSGRyODAyMTEgPSAoUEhFQURFUl84MDJfMTEpIHBPdXRCdWZmZXI7CisJCQkJTWd0TWFjSGVhZGVySW5pdChwQWQsIHBIZHI4MDIxMSwgU1VCVFlQRV9OVUxMX0ZVTkMsIDEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQkJcEhkcjgwMjExLT5EdXJhdGlvbiA9IDA7CisJCQkJcEhkcjgwMjExLT5GQy5UeXBlID0gQlRZUEVfREFUQTsKKwkJCQlwSGRyODAyMTEtPkZDLlB3ck1nbXQgPSBQV1JfU0FWRTsKKworCQkJCS8vIFNlbmQgdXNpbmcgcHJpb3JpdHkgcXVldWUKKwkJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIHNpemVvZihIRUFERVJfODAyXzExKSk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVNjYW5SZXFBY3Rpb24gLS0gU2VuZCBQU00gRGF0YSBmcmFtZSBmb3Igb2ZmIGNoYW5uZWwgUk1cbiIpKTsKKwkJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQkJCVJUTVB1c2VjRGVsYXkoNTAwMCk7CisJCQl9CisJCX0KKworCQlOZGlzR2V0U3lzdGVtVXBUaW1lKCZOb3cpOworCQlwQWQtPlN0YUNmZy5MYXN0U2NhblRpbWUgPSBOb3c7CisJCS8vIHJlc2V0IGFsbCB0aGUgdGltZXJzCisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCQlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5TY2FuVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKwkJLy8gcmVjb3JkIGRlc2lyZWQgQlNTIHBhcmFtZXRlcnMKKwkJcEFkLT5NbG1lQXV4LkJzc1R5cGUgPSBCc3NUeXBlOworCQlwQWQtPk1sbWVBdXguU2NhblR5cGUgPSBTY2FuVHlwZTsKKwkJcEFkLT5NbG1lQXV4LlNzaWRMZW4gPSBTc2lkTGVuOworICAgICAgICBOZGlzWmVyb01lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlNzaWQsIFNzaWQsIFNzaWRMZW4pOworCisJCS8vIHN0YXJ0IGZyb20gdGhlIGZpcnN0IGNoYW5uZWwKKwkJcEFkLT5NbG1lQXV4LkNoYW5uZWwgPSBGaXJzdENoYW5uZWwocEFkKTsKKworCQkvLyBDaGFuZ2UgdGhlIHNjYW4gY2hhbm5lbCB3aGVuIGRlYWxpbmcgd2l0aCBDQ1ggYmVhY29uIHJlcG9ydAorCQlpZiAoKFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fUEFTU0lWRSkgfHwgKFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQUNUSVZFKSB8fAorCQkJKFNjYW5UeXBlID09IFNDQU5fQ0lTQ09fQ0hBTk5FTF9MT0FEKSB8fCAoU2NhblR5cGUgPT0gU0NBTl9DSVNDT19OT0lTRSkpCisJCQlwQWQtPk1sbWVBdXguQ2hhbm5lbCA9IHBBZC0+U3RhQ2ZnLkNDWFNjYW5DaGFubmVsOworCisJCS8vIExldCBCQlAgcmVnaXN0ZXIgYXQgMjBNSHogdG8gZG8gc2NhbgorCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsICZCQlBWYWx1ZSk7CisJCUJCUFZhbHVlICY9ICh+MHgxOCk7CisJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkLCBCQlBfUjQsIEJCUFZhbHVlKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIEJCUCBSNCB0byAyME1Iei5sXG4iKSk7CisJCVNjYW5OZXh0Q2hhbm5lbChwQWQpOworCX0KKwllbHNlCisJeworCQlEQkdQUklOVF9FUlIoKCJTWU5DIC0gTWxtZVNjYW5SZXFBY3Rpb24oKSBzYW5pdHkgY2hlY2sgZmFpbFxuIikpOworCQlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOworCQlTdGF0dXMgPSBNTE1FX0lOVkFMSURfRk9STUFUOworCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfU0NBTl9DT05GLCAyLCAmU3RhdHVzKTsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJTUxNRSBKT0lOIHJlcSBzdGF0ZSBtYWNoaW5lIHByb2NlZHVyZQorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgTWxtZUpvaW5SZXFBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSICAgICAgICBCQlBWYWx1ZSA9IDA7CisJQlNTX0VOVFJZICAgICpwQnNzOworCUJPT0xFQU4gICAgICAgVGltZXJDYW5jZWxsZWQ7CisJSEVBREVSXzgwMl8xMSBIZHI4MDIxMTsKKwlORElTX1NUQVRVUyAgIE5TdGF0dXM7CisJVUxPTkcgICAgICAgICBGcmFtZUxlbiA9IDA7CisJUFVDSEFSICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlQVUNIQVIgICAgICAgIHBTdXBSYXRlID0gTlVMTDsKKwlVQ0hBUiAgICAgICAgIFN1cFJhdGVMZW47CisJUFVDSEFSICAgICAgICBwRXh0UmF0ZSA9IE5VTEw7CisJVUNIQVIgICAgICAgICBFeHRSYXRlTGVuOworCVVDSEFSICAgICAgICAgQVN1cFJhdGVbXSA9IHsweDhDLCAweDEyLCAweDk4LCAweDI0LCAweGIwLCAweDQ4LCAweDYwLCAweDZDfTsKKwlVQ0hBUiAgICAgICAgIEFTdXBSYXRlTGVuID0gc2l6ZW9mKEFTdXBSYXRlKS9zaXplb2YoVUNIQVIpOworCU1MTUVfSk9JTl9SRVFfU1RSVUNUICpwSW5mbyA9IChNTE1FX0pPSU5fUkVRX1NUUlVDVCAqKShFbGVtLT5Nc2cpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIE1sbWVKb2luUmVxQWN0aW9uKEJTUyAjJWxkKVxuIiwgcEluZm8tPkJzc0lkeCkpOworCisKKwkvLyByZXNldCBhbGwgdGhlIHRpbWVycworCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwlSVE1QQ2FuY2VsVGltZXIoJnBBZC0+TWxtZUF1eC5CZWFjb25UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKworCXBCc3MgPSAmcEFkLT5NbG1lQXV4LlNzaWRCc3NUYWIuQnNzRW50cnlbcEluZm8tPkJzc0lkeF07CisKKwkvLyByZWNvcmQgdGhlIGRlc2lyZWQgU1NJRCAmIEJTU0lEIHdlJ3JlIHdhaXRpbmcgZm9yCisJQ09QWV9NQUNfQUREUihwQWQtPk1sbWVBdXguQnNzaWQsIHBCc3MtPkJzc2lkKTsKKworCS8vIElmIEFQJ3MgU1NJRCBpcyBub3QgaGlkZGVuLCBpdCBpcyBPSyBmb3IgdXBkYXRpbmcgc3NpZCB0byBNbG1lQXV4IGFnYWluLgorCWlmIChwQnNzLT5IaWRkZW4gPT0gMCkKKwl7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBwQnNzLT5Tc2lkLCBwQnNzLT5Tc2lkTGVuKTsKKwkJcEFkLT5NbG1lQXV4LlNzaWRMZW4gPSBwQnNzLT5Tc2lkTGVuOworCX0KKworCXBBZC0+TWxtZUF1eC5Cc3NUeXBlID0gcEJzcy0+QnNzVHlwZTsKKwlwQWQtPk1sbWVBdXguQ2hhbm5lbCA9IHBCc3MtPkNoYW5uZWw7CisJcEFkLT5NbG1lQXV4LkNlbnRyYWxDaGFubmVsID0gcEJzcy0+Q2VudHJhbENoYW5uZWw7CisKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCisJLy8gQ291bnRyeSBJRSBvZiB0aGUgQVAgd2lsbCBiZSBldmFsdWF0ZWQgYW5kIHdpbGwgYmUgdXNlZC4KKwlpZiAoKHBBZC0+U3RhQ2ZnLklFRUU4MDIxMWRDbGllbnRNb2RlICE9IFJ0ODAyXzExX0RfTm9uZSkgJiYKKwkJKHBCc3MtPmJIYXNDb3VudHJ5SUUgPT0gVFJVRSkpCisJeworCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5Db21tb25DZmcuQ291bnRyeUNvZGVbMF0sICZwQnNzLT5Db3VudHJ5U3RyaW5nWzBdLCAyKTsKKwkJaWYgKHBCc3MtPkNvdW50cnlTdHJpbmdbMl0gPT0gJ0knKQorCQkJcEFkLT5Db21tb25DZmcuR2VvZ3JhcGh5ID0gSURPUjsKKwkJZWxzZSBpZiAocEJzcy0+Q291bnRyeVN0cmluZ1syXSA9PSAnTycpCisJCQlwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkgPSBPRE9SOworCQllbHNlCisJCQlwQWQtPkNvbW1vbkNmZy5HZW9ncmFwaHkgPSBCT1RIOworCQlCdWlsZENoYW5uZWxMaXN0RXgocEFkKTsKKwl9CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworCisJLy8gTGV0IEJCUCByZWdpc3RlciBhdCAyME1IeiB0byBkbyBzY2FuCisJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZCwgQkJQX1I0LCAmQkJQVmFsdWUpOworCUJCUFZhbHVlICY9ICh+MHgxOCk7CisJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWQsIEJCUF9SNCwgQkJQVmFsdWUpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBCQlAgUjQgdG8gMjBNSHoubFxuIikpOworCisJLy8gc3dpdGNoIGNoYW5uZWwgYW5kIHdhaXRpbmcgZm9yIGJlYWNvbiB0aW1lcgorCUFzaWNTd2l0Y2hDaGFubmVsKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwsIEZBTFNFKTsKKwlBc2ljTG9ja0NoYW5uZWwocEFkLCBwQWQtPk1sbWVBdXguQ2hhbm5lbCk7CisJUlRNUFNldFRpbWVyKCZwQWQtPk1sbWVBdXguQmVhY29uVGltZXIsIEpPSU5fVElNRU9VVCk7CisKKyAgICBkbworCXsKKwkJaWYgKCgocEFkLT5Db21tb25DZmcuYklFRUU4MDIxMUggPT0gMSkgJiYKKyAgICAgICAgICAgIChwQWQtPk1sbWVBdXguQ2hhbm5lbCA+IDE0KSAmJgorICAgICAgICAgICAgIFJhZGFyQ2hhbm5lbENoZWNrKHBBZCwgcEFkLT5NbG1lQXV4LkNoYW5uZWwpKQorI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8gUm9nZXIgc3luYyBDYXJyaWVyCisgICAgICAgICAgICAgfHwgKHBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuRW5hYmxlID09IFRSVUUpCisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworICAgICAgICAgICAgKQorCQl7CisJCQkvLworCQkJLy8gV2UgY2FuJ3Qgc2VuZCBhbnkgUHJvYmUgcmVxdWVzdCBmcmFtZSB0byBtZWV0IDgwMi4xMWguCisJCQkvLworCQkJaWYgKHBCc3MtPkhpZGRlbiA9PSAwKQorCQkJCWJyZWFrOworCQl9CisKKwkJLy8KKwkJLy8gc2VuZCBwcm9iZSByZXF1ZXN0CisJCS8vCisJCU5TdGF0dXMgPSBNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAmcE91dEJ1ZmZlcik7CisJCWlmIChOU3RhdHVzID09IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCXsKKwkJCWlmIChwQWQtPk1sbWVBdXguQ2hhbm5lbCA8PSAxNCkKKwkJCXsKKwkJCQlwU3VwUmF0ZSA9IHBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGU7CisJCQkJU3VwUmF0ZUxlbiA9IHBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGVMZW47CisJCQkJcEV4dFJhdGUgPSBwQWQtPkNvbW1vbkNmZy5FeHRSYXRlOworCQkJCUV4dFJhdGVMZW4gPSBwQWQtPkNvbW1vbkNmZy5FeHRSYXRlTGVuOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vCisJCQkJLy8gT3ZlcndyaXRlIFN1cHBvcnQgUmF0ZSwgQ0NLIHJhdGUgYXJlIG5vdCBhbGxvd2VkCisJCQkJLy8KKwkJCQlwU3VwUmF0ZSA9IEFTdXBSYXRlOworCQkJCVN1cFJhdGVMZW4gPSBBU3VwUmF0ZUxlbjsKKwkJCQlFeHRSYXRlTGVuID0gMDsKKwkJCX0KKworCQkJaWYgKHBBZC0+TWxtZUF1eC5Cc3NUeXBlID09IEJTU19JTkZSQSkKKwkJCQlNZ3RNYWNIZWFkZXJJbml0KHBBZCwgJkhkcjgwMjExLCBTVUJUWVBFX1BST0JFX1JFUSwgMCwgcEFkLT5NbG1lQXV4LkJzc2lkLCBwQWQtPk1sbWVBdXguQnNzaWQpOworCQkJZWxzZQorCQkJCU1ndE1hY0hlYWRlckluaXQocEFkLCAmSGRyODAyMTEsIFNVQlRZUEVfUFJPQkVfUkVRLCAwLCBCUk9BRENBU1RfQUREUiwgQlJPQURDQVNUX0FERFIpOworCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgICAgICZGcmFtZUxlbiwKKwkJCQkJCQkgIHNpemVvZihIRUFERVJfODAyXzExKSwgICAgJkhkcjgwMjExLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmU3NpZEllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5NbG1lQXV4LlNzaWRMZW4sCisJCQkJCQkJICBwQWQtPk1sbWVBdXguU3NpZExlbiwJICAgIHBBZC0+TWxtZUF1eC5Tc2lkLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmU3VwUmF0ZUllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAmU3VwUmF0ZUxlbiwKKwkJCQkJCQkgIFN1cFJhdGVMZW4sICAgICAgICAgICAgICAgcFN1cFJhdGUsCisJCQkJCQkJICBFTkRfT0ZfQVJHUyk7CisKKwkJCWlmIChFeHRSYXRlTGVuKQorCQkJeworCQkJCVVMT05HIFRtcDsKKwkJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyICsgRnJhbWVMZW4sICAgICAgICAgICAgJlRtcCwKKwkJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkV4dFJhdGVJZSwKKwkJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkV4dFJhdGVMZW4sCisJCQkJCQkJCSAgRXh0UmF0ZUxlbiwgICAgICAgICAgICAgICAgICAgICAgIHBFeHRSYXRlLAorCQkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCQlGcmFtZUxlbiArPSBUbXA7CisJCQl9CisKKworCQkJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCBwT3V0QnVmZmVyLCBGcmFtZUxlbik7CisJCQlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCQl9CisgICAgfSB3aGlsZSAoRkFMU0UpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtIFN3aXRjaCB0byBjaCAlZCwgV2FpdCBCRUFDT04gZnJvbSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJcEJzcy0+Q2hhbm5lbCwgcEJzcy0+QnNzaWRbMF0sIHBCc3MtPkJzc2lkWzFdLCBwQnNzLT5Cc3NpZFsyXSwgcEJzcy0+QnNzaWRbM10sIHBCc3MtPkJzc2lkWzRdLCBwQnNzLT5Cc3NpZFs1XSkpOworCisJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IEpPSU5fV0FJVF9CRUFDT047Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJTUxNRSBTVEFSVCBSZXF1ZXN0IHN0YXRlIG1hY2hpbmUgcHJvY2VkdXJlLCBzdGFydGluZyBhbiBJQlNTCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBNbG1lU3RhcnRSZXFBY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSICAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdLCBTc2lkTGVuOworCUJPT0xFQU4gICAgICAgVGltZXJDYW5jZWxsZWQ7CisKKwkvLyBOZXcgZm9yIFdQQSBzZWN1cml0eSBzdWl0ZXMKKwlVQ0hBUgkJCQkJCVZhcklFW01BWF9WSUVfTEVOXTsgCS8vIFRvdGFsIFZJRSBsZW5ndGggPSBNQVhfVklFX0xFTiAtIC01CisJTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzCSpwVklFID0gTlVMTDsKKwlMQVJHRV9JTlRFR0VSCQkJCVRpbWVTdGFtcDsKKwlCT09MRUFOIFByaXZhY3k7CisJVVNIT1JUIFN0YXR1czsKKworCS8vIEluaXQgVmFyaWFibGUgSUUgc3RydWN0dXJlCisJcFZJRSA9IChQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzKSBWYXJJRTsKKwlwVklFLT5MZW5ndGggPSAwOworCVRpbWVTdGFtcC51Lkxvd1BhcnQgID0gMDsKKwlUaW1lU3RhbXAudS5IaWdoUGFydCA9IDA7CisKKwlpZiAoTWxtZVN0YXJ0UmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIFNzaWQsICZTc2lkTGVuKSkKKwl7CisJCS8vIHJlc2V0IGFsbCB0aGUgdGltZXJzCisJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LlNjYW5UaW1lciwgJlRpbWVyQ2FuY2VsbGVkKTsKKwkJUlRNUENhbmNlbFRpbWVyKCZwQWQtPk1sbWVBdXguQmVhY29uVGltZXIsICZUaW1lckNhbmNlbGxlZCk7CisKKwkJLy8KKwkJLy8gU3RhcnQgYSBuZXcgSUJTUy4gQWxsIElCU1MgcGFyYW1ldGVycyBhcmUgZGVjaWRlZCBub3cuLi4uCisJCS8vCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1sbWVTdGFydFJlcUFjdGlvbiAtIFN0YXJ0IGEgbmV3IElCU1MuIEFsbCBJQlNTIHBhcmFtZXRlcnMgYXJlIGRlY2lkZWQgbm93Li4uLiBcbiIpKTsKKwkJcEFkLT5NbG1lQXV4LkJzc1R5cGUgICAgICAgICAgID0gQlNTX0FESE9DOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3NpZCwgU3NpZCwgU3NpZExlbik7CisJCXBBZC0+TWxtZUF1eC5Tc2lkTGVuICAgICAgICAgICA9IFNzaWRMZW47CisKKwkJLy8gZ2VuZXJhdGUgYSByYWRvbSBudW1iZXIgYXMgQlNTSUQKKwkJTWFjQWRkclJhbmRvbUJzc2lkKHBBZCwgcEFkLT5NbG1lQXV4LkJzc2lkKTsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWxtZVN0YXJ0UmVxQWN0aW9uIC0gZ2VuZXJhdGUgYSByYWRvbSBudW1iZXIgYXMgQlNTSUQgXG4iKSk7CisKKwkJUHJpdmFjeSA9IChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkgfHwKKwkJCQkgIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkgfHwKKwkJCQkgIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCk7CisJCXBBZC0+TWxtZUF1eC5DYXBhYmlsaXR5SW5mbyAgICA9IENBUF9HRU5FUkFURSgwLDEsUHJpdmFjeSwgKHBBZC0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUgPT0gUnQ4MDJfMTFQcmVhbWJsZVNob3J0KSwgMSwgMCk7CisJCXBBZC0+TWxtZUF1eC5CZWFjb25QZXJpb2QgICAgICA9IHBBZC0+Q29tbW9uQ2ZnLkJlYWNvblBlcmlvZDsKKwkJcEFkLT5NbG1lQXV4LkF0aW1XaW4gICAgICAgICAgID0gcEFkLT5TdGFDZmcuQXRpbVdpbjsKKwkJcEFkLT5NbG1lQXV4LkNoYW5uZWwgICAgICAgICAgID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKKworCQlwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCAgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCQlwQWQtPk1sbWVBdXguQ2VudHJhbENoYW5uZWwgICAgPSBwQWQtPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbDsKKworCQlwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbj0gcEFkLT5Db21tb25DZmcuU3VwUmF0ZUxlbjsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LlN1cFJhdGUsIHBBZC0+Q29tbW9uQ2ZnLlN1cFJhdGUsIE1BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTKTsKKwkJUlRNUENoZWNrUmF0ZXMocEFkLCBwQWQtPk1sbWVBdXguU3VwUmF0ZSwgJnBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuKTsKKwkJcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gPSBwQWQtPkNvbW1vbkNmZy5FeHRSYXRlTGVuOworCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguRXh0UmF0ZSwgcEFkLT5Db21tb25DZmcuRXh0UmF0ZSwgTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVMpOworCQlSVE1QQ2hlY2tSYXRlcyhwQWQsIHBBZC0+TWxtZUF1eC5FeHRSYXRlLCAmcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4pOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlpZiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKQorCQl7CisJCQlSVE1QVXBkYXRlSFRJRSgmcEFkLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LCAmcEFkLT5TdGFDZmcuRGVzaXJlZEh0UGh5SW5mby5NQ1NTZXRbMF0sICZwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5LCAmcEFkLT5NbG1lQXV4LkFkZEh0SW5mbyk7CisJCQlwQWQtPk1sbWVBdXguSHRDYXBhYmlsaXR5TGVuID0gc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpOworCQkJLy8gTm90IHR1cm4gcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuYkh0RW5hYmxlID0gVFJVRSBoZXJlLgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU1lOQyAtcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuYkh0RW5hYmxlID0gVFJVRVxuIikpOworCQl9CisJCWVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJeworCQkJcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiA9IDA7CisJCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9IEZBTFNFOworCQl9CisJCS8vIHRlbXBvcmFyaWx5IG5vdCBzdXBwb3J0IFFPUyBpbiBJQlNTCisJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBFZGNhUGFybSwgc2l6ZW9mKEVEQ0FfUEFSTSkpOworCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5NbG1lQXV4LkFQUWJzc0xvYWQsIHNpemVvZihRQlNTX0xPQURfUEFSTSkpOworCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5NbG1lQXV4LkFQUW9zQ2FwYWJpbGl0eSwgc2l6ZW9mKFFPU19DQVBBQklMSVRZX1BBUk0pKTsKKworCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWQsIHBBZC0+TWxtZUF1eC5DaGFubmVsLCBGQUxTRSk7CisJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+TWxtZUF1eC5DaGFubmVsKTsKKworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gTWxtZVN0YXJ0UmVxQWN0aW9uKGNoPSAlZCxzdXAgcmF0ZXM9ICVkLCBleHQgcmF0ZXM9JWQpXG4iLAorCQkJcEFkLT5NbG1lQXV4LkNoYW5uZWwsIHBBZC0+TWxtZUF1eC5TdXBSYXRlTGVuLCBwQWQtPk1sbWVBdXguRXh0UmF0ZUxlbikpOworCisJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7CisJCVN0YXR1cyA9IE1MTUVfU1VDQ0VTUzsKKwkJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX1NUQVJUX0NPTkYsIDIsICZTdGF0dXMpOworCX0KKwllbHNlCisJeworCQlEQkdQUklOVF9FUlIoKCJTWU5DIC0gTWxtZVN0YXJ0UmVxQWN0aW9uKCkgc2FuaXR5IGNoZWNrIGZhaWwuXG4iKSk7CisJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7CisJCVN0YXR1cyA9IE1MTUVfSU5WQUxJRF9GT1JNQVQ7CisJCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9TVEFSVF9DT05GLCAyLCAmU3RhdHVzKTsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJcGVlciBzZW5kcyBiZWFjb24gYmFjayB3aGVuIHNjYW5uaW5nCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBQZWVyQmVhY29uQXRTY2FuQWN0aW9uKAorCUlOIFBSVE1QX0FEQVBURVIgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlVQ0hBUiAgICAgICAgICAgQnNzaWRbTUFDX0FERFJfTEVOXSwgQWRkcjJbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUiAgICAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdLCBCc3NUeXBlLCBDaGFubmVsLCBOZXdDaGFubmVsLAorCQkJCQlTc2lkTGVuLCBEdGltQ291bnQsIER0aW1QZXJpb2QsIEJjYXN0RmxhZywgTWVzc2FnZVRvTWU7CisJQ0ZfUEFSTSAgICAgICAgIENmUGFybTsKKwlVU0hPUlQgICAgICAgICAgQmVhY29uUGVyaW9kLCBBdGltV2luLCBDYXBhYmlsaXR5SW5mbzsKKwlQRlJBTUVfODAyXzExICAgcEZyYW1lOworCUxBUkdFX0lOVEVHRVIgICBUaW1lU3RhbXA7CisJVUNIQVIgICAgICAgICAgIEVycDsKKwlVQ0hBUiAgICAgICAgIAlTdXBSYXRlW01BWF9MRU5fT0ZfU1VQUE9SVEVEX1JBVEVTXSwgRXh0UmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU107CisJVUNIQVIJCSAgCVN1cFJhdGVMZW4sIEV4dFJhdGVMZW47CisJVVNIT1JUIAkJCUxlblZJRTsKKwlVQ0hBUgkJCUNraXBGbGFnOworCVVDSEFSCQkJQWlyb25ldENlbGxQb3dlckxpbWl0OworCUVEQ0FfUEFSTSAgICAgICBFZGNhUGFybTsKKwlRQlNTX0xPQURfUEFSTSAgUWJzc0xvYWQ7CisJUU9TX0NBUEFCSUxJVFlfUEFSTSBRb3NDYXBhYmlsaXR5OworCVVMT05HCQkJCQkJUmFsaW5rSWU7CisJVUNIQVIJCQkJCQlWYXJJRVtNQVhfVklFX0xFTl07CQkvLyBUb3RhbCBWSUUgbGVuZ3RoID0gTUFYX1ZJRV9MRU4gLSAtNQorCU5ESVNfODAyXzExX1ZBUklBQkxFX0lFcwkqcFZJRSA9IE5VTEw7CisJSFRfQ0FQQUJJTElUWV9JRQkJSHRDYXBhYmlsaXR5OworCUFERF9IVF9JTkZPX0lFCQlBZGRIdEluZm87CS8vIEFQIG1pZ2h0IHVzZSB0aGlzIGFkZGl0aW9uYWwgaHQgaW5mbyBJRQorCVVDSEFSCQkJSHRDYXBhYmlsaXR5TGVuID0gMCwgUHJlTkh0Q2FwYWJpbGl0eUxlbiA9IDA7CisJVUNIQVIJCQlBZGRIdEluZm9MZW47CisJVUNIQVIJCQlOZXdFeHRDaGFubmVsT2Zmc2V0ID0gMHhmZjsKKworCisJLy8gTmRpc0ZpbGxNZW1vcnkoU3NpZCwgTUFYX0xFTl9PRl9TU0lELCAweDAwKTsKKwlwRnJhbWUgPSAoUEZSQU1FXzgwMl8xMSkgRWxlbS0+TXNnOworCS8vIEluaXQgVmFyaWFibGUgSUUgc3RydWN0dXJlCisJcFZJRSA9IChQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzKSBWYXJJRTsKKwlwVklFLT5MZW5ndGggPSAwOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgIFJUTVBaZXJvTWVtb3J5KCZIdENhcGFiaWxpdHksIHNpemVvZihIdENhcGFiaWxpdHkpKTsKKwlSVE1QWmVyb01lbW9yeSgmQWRkSHRJbmZvLCBzaXplb2YoQUREX0hUX0lORk9fSUUpKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCWlmIChQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkocEFkLAorCQkJCQkJCQlFbGVtLT5Nc2csCisJCQkJCQkJCUVsZW0tPk1zZ0xlbiwKKwkJCQkJCQkJRWxlbS0+Q2hhbm5lbCwKKwkJCQkJCQkJQWRkcjIsCisJCQkJCQkJCUJzc2lkLAorCQkJCQkJCQlTc2lkLAorCQkJCQkJCQkmU3NpZExlbiwKKwkJCQkJCQkJJkJzc1R5cGUsCisJCQkJCQkJCSZCZWFjb25QZXJpb2QsCisJCQkJCQkJCSZDaGFubmVsLAorCQkJCQkJCQkmTmV3Q2hhbm5lbCwKKwkJCQkJCQkJJlRpbWVTdGFtcCwKKwkJCQkJCQkJJkNmUGFybSwKKwkJCQkJCQkJJkF0aW1XaW4sCisJCQkJCQkJCSZDYXBhYmlsaXR5SW5mbywKKwkJCQkJCQkJJkVycCwKKwkJCQkJCQkJJkR0aW1Db3VudCwKKwkJCQkJCQkJJkR0aW1QZXJpb2QsCisJCQkJCQkJCSZCY2FzdEZsYWcsCisJCQkJCQkJCSZNZXNzYWdlVG9NZSwKKwkJCQkJCQkJU3VwUmF0ZSwKKwkJCQkJCQkJJlN1cFJhdGVMZW4sCisJCQkJCQkJCUV4dFJhdGUsCisJCQkJCQkJCSZFeHRSYXRlTGVuLAorCQkJCQkJCQkmQ2tpcEZsYWcsCisJCQkJCQkJCSZBaXJvbmV0Q2VsbFBvd2VyTGltaXQsCisJCQkJCQkJCSZFZGNhUGFybSwKKwkJCQkJCQkJJlFic3NMb2FkLAorCQkJCQkJCQkmUW9zQ2FwYWJpbGl0eSwKKwkJCQkJCQkJJlJhbGlua0llLAorCQkJCQkJCQkmSHRDYXBhYmlsaXR5TGVuLAorCQkJCQkJCQkmUHJlTkh0Q2FwYWJpbGl0eUxlbiwKKwkJCQkJCQkJJkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkJJkFkZEh0SW5mb0xlbiwKKwkJCQkJCQkJJkFkZEh0SW5mbywKKwkJCQkJCQkJJk5ld0V4dENoYW5uZWxPZmZzZXQsCisJCQkJCQkJCSZMZW5WSUUsCisJCQkJCQkJCXBWSUUpKQorCXsKKwkJVUxPTkcgSWR4OworCQlDSEFSIFJzc2kgPSAwOworCisJCUlkeCA9IEJzc1RhYmxlU2VhcmNoKCZwQWQtPlNjYW5UYWIsIEJzc2lkLCBDaGFubmVsKTsKKwkJaWYgKElkeCAhPSBCU1NfTk9UX0ZPVU5EKQorCQkJUnNzaSA9IHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtJZHhdLlJzc2k7CisKKwkJUnNzaSA9IFJUTVBNYXhSc3NpKHBBZCwgQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kwLCBSU1NJXzApLCBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTEsIFJTU0lfMSksIENvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMiwgUlNTSV8yKSk7CisKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlpZiAoKEh0Q2FwYWJpbGl0eUxlbiA+IDApIHx8IChQcmVOSHRDYXBhYmlsaXR5TGVuID4gMCkpCisJCQlIdENhcGFiaWxpdHlMZW4gPSBTSVpFX0hUX0NBUF9JRTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJaWYgKChwQWQtPlN0YUNmZy5DQ1hSZXFUeXBlICE9IE1TUk5fVFlQRV9VTlVTRUQpICYmIChDaGFubmVsID09IHBBZC0+U3RhQ2ZnLkNDWFNjYW5DaGFubmVsKSkKKwkJeworCQkJSWR4ID0gQnNzVGFibGVTZXRFbnRyeShwQWQsICZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIsIEJzc2lkLCBTc2lkLCBTc2lkTGVuLCBCc3NUeXBlLCBCZWFjb25QZXJpb2QsCisJCQkJCQkgJkNmUGFybSwgQXRpbVdpbiwgQ2FwYWJpbGl0eUluZm8sIFN1cFJhdGUsIFN1cFJhdGVMZW4sRXh0UmF0ZSwgRXh0UmF0ZUxlbiwgJkh0Q2FwYWJpbGl0eSwKKwkJCQkJCSAmQWRkSHRJbmZvLCBIdENhcGFiaWxpdHlMZW4sIEFkZEh0SW5mb0xlbiwgTmV3RXh0Q2hhbm5lbE9mZnNldCwgQ2hhbm5lbCwgUnNzaSwgVGltZVN0YW1wLCBDa2lwRmxhZywKKwkJCQkJCSAmRWRjYVBhcm0sICZRb3NDYXBhYmlsaXR5LCAmUWJzc0xvYWQsIExlblZJRSwgcFZJRSk7CisJCQlpZiAoSWR4ICE9IEJTU19OT1RfRk9VTkQpCisJCQl7CisJCQkJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuQ0NYQnNzVGFiLkJzc0VudHJ5W0lkeF0uUFRTRiwgJkVsZW0tPk1zZ1syNF0sIDQpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5DQ1hCc3NUYWIuQnNzRW50cnlbSWR4XS5UVFNGWzBdLCAmRWxlbS0+VGltZVN0YW1wLnUuTG93UGFydCwgNCk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLkNDWEJzc1RhYi5Cc3NFbnRyeVtJZHhdLlRUU0ZbNF0sICZFbGVtLT5UaW1lU3RhbXAudS5Mb3dQYXJ0LCA0KTsKKwkJCQlpZiAocEFkLT5TdGFDZmcuQ0NYUmVxVHlwZSA9PSBNU1JOX1RZUEVfQkVBQ09OX1JFUSkKKwkJCQkJQWlyb25ldEFkZEJlYWNvblJlcG9ydChwQWQsIElkeCwgRWxlbSk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlJZHggPSBCc3NUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+U2NhblRhYiwgQnNzaWQsIFNzaWQsIFNzaWRMZW4sIEJzc1R5cGUsIEJlYWNvblBlcmlvZCwKKwkJCQkJCSAgJkNmUGFybSwgQXRpbVdpbiwgQ2FwYWJpbGl0eUluZm8sIFN1cFJhdGUsIFN1cFJhdGVMZW4sIEV4dFJhdGUsIEV4dFJhdGVMZW4sICAmSHRDYXBhYmlsaXR5LAorCQkJCQkJICZBZGRIdEluZm8sIEh0Q2FwYWJpbGl0eUxlbiwgQWRkSHRJbmZvTGVuLCBOZXdFeHRDaGFubmVsT2Zmc2V0LCBDaGFubmVsLCBSc3NpLCBUaW1lU3RhbXAsIENraXBGbGFnLAorCQkJCQkJICZFZGNhUGFybSwgJlFvc0NhcGFiaWxpdHksICZRYnNzTG9hZCwgTGVuVklFLCBwVklFKTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyNpZmRlZiBET1QxMU5fRFJBRlQzCisJCQlpZiAocEFkLT5DaGFubmVsTGlzdFtwQWQtPkNvbW1vbkNmZy5DaGFubmVsTGlzdElkeF0uYkVmZmVjdGVkQ2hhbm5lbCA9PSBUUlVFKQorCQkJeworCQkJCVVDSEFSCQlSZWdDbGFzczsKKwkJCQlQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkyKHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sICZSZWdDbGFzcyk7CisJCQkJVHJpRXZlbnRUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+Q29tbW9uQ2ZnLlRyaWdnZXJFdmVudFRhYiwgQnNzaWQsICZIdENhcGFiaWxpdHksIEh0Q2FwYWJpbGl0eUxlbiwgUmVnQ2xhc3MsIENoYW5uZWwpOworCQkJfQorI2VuZGlmIC8vIERPVDExTl9EUkFGVDMgLy8KKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCWlmIChJZHggIT0gQlNTX05PVF9GT1VORCkKKwkJCXsKKwkJCQlOZGlzTW92ZU1lbW9yeShwQWQtPlNjYW5UYWIuQnNzRW50cnlbSWR4XS5QVFNGLCAmRWxlbS0+TXNnWzI0XSwgNCk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U2NhblRhYi5Cc3NFbnRyeVtJZHhdLlRUU0ZbMF0sICZFbGVtLT5UaW1lU3RhbXAudS5Mb3dQYXJ0LCA0KTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0lkeF0uVFRTRls0XSwgJkVsZW0tPlRpbWVTdGFtcC51Lkxvd1BhcnQsIDQpOworCQkJfQorCQl9CisJfQorCS8vIHNhbml0eSBjaGVjayBmYWlsLCBpZ25vcmVkCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJV2hlbiB3YWl0aW5nIGpvaW5pbmcgdGhlIChJKUJTUywgYmVhY29uIHJlY2VpdmVkIGZyb20gZXh0ZXJuYWwKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJCZWFjb25BdEpvaW5BY3Rpb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSICAgICAgICAgQnNzaWRbTUFDX0FERFJfTEVOXSwgQWRkcjJbTUFDX0FERFJfTEVOXTsKKwlVQ0hBUiAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXSwgU3NpZExlbiwgQnNzVHlwZSwgQ2hhbm5lbCwgTWVzc2FnZVRvTWUsCisJCQkJICBEdGltQ291bnQsIER0aW1QZXJpb2QsIEJjYXN0RmxhZywgTmV3Q2hhbm5lbDsKKwlMQVJHRV9JTlRFR0VSIFRpbWVTdGFtcDsKKwlVU0hPUlQgICAgICAgIEJlYWNvblBlcmlvZCwgQXRpbVdpbiwgQ2FwYWJpbGl0eUluZm87CisJQ0ZfUEFSTSAgICAgICBDZjsKKwlCT09MRUFOICAgICAgIFRpbWVyQ2FuY2VsbGVkOworCVVDSEFSICAgICAgICAgRXJwOworCVVDSEFSICAgICAgICAgU3VwUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU10sIEV4dFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSCQkgIFN1cFJhdGVMZW4sIEV4dFJhdGVMZW47CisJVUNIQVIgICAgICAgICBDa2lwRmxhZzsKKwlVU0hPUlQgCQkgIExlblZJRTsKKwlVQ0hBUgkJICBBaXJvbmV0Q2VsbFBvd2VyTGltaXQ7CisJRURDQV9QQVJNICAgICAgIEVkY2FQYXJtOworCVFCU1NfTE9BRF9QQVJNICBRYnNzTG9hZDsKKwlRT1NfQ0FQQUJJTElUWV9QQVJNIFFvc0NhcGFiaWxpdHk7CisJVVNIT1JUICAgICAgICBTdGF0dXM7CisJVUNIQVIJCQkJCQlWYXJJRVtNQVhfVklFX0xFTl07CQkvLyBUb3RhbCBWSUUgbGVuZ3RoID0gTUFYX1ZJRV9MRU4gLSAtNQorCU5ESVNfODAyXzExX1ZBUklBQkxFX0lFcwkqcFZJRSA9IE5VTEw7CisJVUxPTkcgICAgICAgICAgIFJhbGlua0llOworCVVMT05HICAgICAgICAgSWR4OworCUhUX0NBUEFCSUxJVFlfSUUJCUh0Q2FwYWJpbGl0eTsKKwlBRERfSFRfSU5GT19JRQkJQWRkSHRJbmZvOwkvLyBBUCBtaWdodCB1c2UgdGhpcyBhZGRpdGlvbmFsIGh0IGluZm8gSUUKKwlVQ0hBUgkJCQlIdENhcGFiaWxpdHlMZW4gPSAwLCBQcmVOSHRDYXBhYmlsaXR5TGVuID0gMDsKKwlVQ0hBUgkJCUFkZEh0SW5mb0xlbjsKKwlVQ0hBUgkJCU5ld0V4dENoYW5uZWxPZmZzZXQgPSAweGZmOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCVVDSEFSCQkJQ2VudHJhbENoYW5uZWw7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKKwkvLyBJbml0IFZhcmlhYmxlIElFIHN0cnVjdHVyZQorCXBWSUUgPSAoUE5ESVNfODAyXzExX1ZBUklBQkxFX0lFcykgVmFySUU7CisJcFZJRS0+TGVuZ3RoID0gMDsKKyAgICBSVE1QWmVyb01lbW9yeSgmSHRDYXBhYmlsaXR5LCBzaXplb2YoSHRDYXBhYmlsaXR5KSk7CisJUlRNUFplcm9NZW1vcnkoJkFkZEh0SW5mbywgc2l6ZW9mKEFERF9IVF9JTkZPX0lFKSk7CisKKworCWlmIChQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkocEFkLAorCQkJCQkJCQlFbGVtLT5Nc2csCisJCQkJCQkJCUVsZW0tPk1zZ0xlbiwKKwkJCQkJCQkJRWxlbS0+Q2hhbm5lbCwKKwkJCQkJCQkJQWRkcjIsCisJCQkJCQkJCUJzc2lkLAorCQkJCQkJCQlTc2lkLAorCQkJCQkJCQkmU3NpZExlbiwKKwkJCQkJCQkJJkJzc1R5cGUsCisJCQkJCQkJCSZCZWFjb25QZXJpb2QsCisJCQkJCQkJCSZDaGFubmVsLAorCQkJCQkJCQkmTmV3Q2hhbm5lbCwKKwkJCQkJCQkJJlRpbWVTdGFtcCwKKwkJCQkJCQkJJkNmLAorCQkJCQkJCQkmQXRpbVdpbiwKKwkJCQkJCQkJJkNhcGFiaWxpdHlJbmZvLAorCQkJCQkJCQkmRXJwLAorCQkJCQkJCQkmRHRpbUNvdW50LAorCQkJCQkJCQkmRHRpbVBlcmlvZCwKKwkJCQkJCQkJJkJjYXN0RmxhZywKKwkJCQkJCQkJJk1lc3NhZ2VUb01lLAorCQkJCQkJCQlTdXBSYXRlLAorCQkJCQkJCQkmU3VwUmF0ZUxlbiwKKwkJCQkJCQkJRXh0UmF0ZSwKKwkJCQkJCQkJJkV4dFJhdGVMZW4sCisJCQkJCQkJCSZDa2lwRmxhZywKKwkJCQkJCQkJJkFpcm9uZXRDZWxsUG93ZXJMaW1pdCwKKwkJCQkJCQkJJkVkY2FQYXJtLAorCQkJCQkJCQkmUWJzc0xvYWQsCisJCQkJCQkJCSZRb3NDYXBhYmlsaXR5LAorCQkJCQkJCQkmUmFsaW5rSWUsCisJCQkJCQkJCSZIdENhcGFiaWxpdHlMZW4sCisJCQkJCQkJCSZQcmVOSHRDYXBhYmlsaXR5TGVuLAorCQkJCQkJCQkmSHRDYXBhYmlsaXR5LAorCQkJCQkJCQkmQWRkSHRJbmZvTGVuLAorCQkJCQkJCQkmQWRkSHRJbmZvLAorCQkJCQkJCQkmTmV3RXh0Q2hhbm5lbE9mZnNldCwKKwkJCQkJCQkJJkxlblZJRSwKKwkJCQkJCQkJcFZJRSkpCisJeworCQkvLyBEaXNxdWFsaWZ5IDExYiBvbmx5IGFkaG9jIHdoZW4gd2UgYXJlIGluIDExZyBvbmx5IGFkaG9jIG1vZGUKKwkJaWYgKChCc3NUeXBlID09IEJTU19BREhPQykgJiYgKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExRykgJiYgKChTdXBSYXRlTGVuK0V4dFJhdGVMZW4pPCAxMikpCisJCQlyZXR1cm47CisKKwkJLy8gQkVBQ09OIGZyb20gZGVzaXJlZCBCU1MvSUJTUyBmb3VuZC4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZGVjaWRlIG1vc3QKKwkJLy8gQlNTIHBhcmFtZXRlcnMgaGVyZS4KKwkJLy8gUS4gQnV0IHdoYXQgaGFwcGVuIGlmIHRoaXMgSk9JTiBkb2Vzbid0IGNvbmNsdWRlIGEgc3VjY2Vzc2Z1bCBBU1NPQ0lBVEVJT04/CisJCS8vICAgIERvIHdlIG5lZWQgdG8gcmVjZW92ZXIgYmFjayBhbGwgcGFyYW1ldGVycyBiZWxvbmdpbmcgdG8gcHJldmlvdXMgQlNTPworCQkvLyBBLiBTaG91bGQgYmUgbm90LiBUaGVyZSdzIG5vIGJhY2stZG9vciByZWNvdmVyIHRvIHByZXZpb3VzIEFQLiBJdCBzdGlsbCBuZWVkCisJCS8vICAgIGEgbmV3IEpPSU4tQVVUSC1BU1NPQyBzZXF1ZW5jZS4KKwkJaWYgKE1BQ19BRERSX0VRVUFMKHBBZC0+TWxtZUF1eC5Cc3NpZCwgQnNzaWQpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gcmVjZWl2ZSBkZXNpcmVkIEJFQUNPTiBhdCBKb2luV2FpdEJlYWNvbi4uLiBDaGFubmVsID0gJWRcbiIsIENoYW5uZWwpKTsKKwkJCVJUTVBDYW5jZWxUaW1lcigmcEFkLT5NbG1lQXV4LkJlYWNvblRpbWVyLCAmVGltZXJDYW5jZWxsZWQpOworCisJCQkvLyBVcGRhdGUgUlNTSSB0byBwcmV2ZW50IE5vIHNpZ25hbCBkaXNwbGF5IHdoZW4gY2FyZHMgZmlyc3QgaW5pdGlhbGl6ZWQKKwkJCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwCT0gQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kwLCBSU1NJXzApOworCQkJcEFkLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTEJPSBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTEsIFJTU0lfMSk7CisJCQlwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMgk9IENvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMiwgUlNTSV8yKTsKKwkJCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTAJPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMDsKKwkJCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTBYOAk9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTAgPDwgMzsKKwkJCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTEJPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMTsKKwkJCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTFYOAk9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTEgPDwgMzsKKwkJCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTIJPSBwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMjsKKwkJCXBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTJYOAk9IHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuQXZnUnNzaTIgPDwgMzsKKworCQkJLy8KKwkJCS8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgU1NJRCBvbmx5IHNldCB0byBhbnksIHRoZW4gd2UgY2FuIHJlY29yZCB0aGUgY3VycmVudCBTU0lELgorCQkJLy8gT3RoZXJ3aXNlIHdpbGwgY2F1c2UgaGlkZGVuIFNTSUQgYXNzb2NpYXRpb24gZmFpbGVkLgorCQkJLy8KKwkJCWlmIChwQWQtPk1sbWVBdXguU3NpZExlbiA9PSAwKQorCQkJeworCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+TWxtZUF1eC5Tc2lkLCBTc2lkLCBTc2lkTGVuKTsKKwkJCQlwQWQtPk1sbWVBdXguU3NpZExlbiA9IFNzaWRMZW47CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJSWR4ID0gQnNzU3NpZFRhYmxlU2VhcmNoKCZwQWQtPlNjYW5UYWIsIEJzc2lkLCBwQWQtPk1sbWVBdXguU3NpZCwgcEFkLT5NbG1lQXV4LlNzaWRMZW4sIENoYW5uZWwpOworCisJCQkJaWYgKElkeCAhPSBCU1NfTk9UX0ZPVU5EKQorCQkJCXsKKwkJCQkJLy8KKwkJCQkJLy8gTXVsdGlwbGUgU1NJRCBjYXNlLCB1c2VkIGNvcnJlY3QgQ2FwYWJpbGl0eUluZm8KKwkJCQkJLy8KKwkJCQkJQ2FwYWJpbGl0eUluZm8gPSBwQWQtPlNjYW5UYWIuQnNzRW50cnlbSWR4XS5DYXBhYmlsaXR5SW5mbzsKKwkJCQl9CisJCQl9CisJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguQnNzaWQsIEJzc2lkLCBNQUNfQUREUl9MRU4pOworCQkJcEFkLT5NbG1lQXV4LkNhcGFiaWxpdHlJbmZvID0gQ2FwYWJpbGl0eUluZm8gJiBTVVBQT1JURURfQ0FQQUJJTElUWV9JTkZPOworCQkJcEFkLT5NbG1lQXV4LkJzc1R5cGUgPSBCc3NUeXBlOworCQkJcEFkLT5NbG1lQXV4LkJlYWNvblBlcmlvZCA9IEJlYWNvblBlcmlvZDsKKwkJCXBBZC0+TWxtZUF1eC5DaGFubmVsID0gQ2hhbm5lbDsKKwkJCXBBZC0+TWxtZUF1eC5BdGltV2luID0gQXRpbVdpbjsKKwkJCXBBZC0+TWxtZUF1eC5DZnBQZXJpb2QgPSBDZi5DZnBQZXJpb2Q7CisJCQlwQWQtPk1sbWVBdXguQ2ZwTWF4RHVyYXRpb24gPSBDZi5DZnBNYXhEdXJhdGlvbjsKKwkJCXBBZC0+TWxtZUF1eC5BUFJhbGlua0llID0gUmFsaW5rSWU7CisKKwkJCS8vIENvcHkgQVAncyBzdXBwb3J0ZWQgcmF0ZSB0byBNbG1lQXV4IGZvciBjcmVhdGluZyBhc3NvaWNhdGlvbiByZXF1ZXN0CisJCQkvLyBBbHNvIGZpbHRlciBvdXQgbm90IHN1cHBvcnRlZCByYXRlCisJCQlwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiA9IFN1cFJhdGVMZW47CisJCQlOZGlzTW92ZU1lbW9yeShwQWQtPk1sbWVBdXguU3VwUmF0ZSwgU3VwUmF0ZSwgU3VwUmF0ZUxlbik7CisJCQlSVE1QQ2hlY2tSYXRlcyhwQWQsIHBBZC0+TWxtZUF1eC5TdXBSYXRlLCAmcEFkLT5NbG1lQXV4LlN1cFJhdGVMZW4pOworCQkJcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4gPSBFeHRSYXRlTGVuOworCQkJTmRpc01vdmVNZW1vcnkocEFkLT5NbG1lQXV4LkV4dFJhdGUsIEV4dFJhdGUsIEV4dFJhdGVMZW4pOworCQkJUlRNUENoZWNrUmF0ZXMocEFkLCBwQWQtPk1sbWVBdXguRXh0UmF0ZSwgJnBBZC0+TWxtZUF1eC5FeHRSYXRlTGVuKTsKKworICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5NQ1NTZXQsIDE2KTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwkJCXBBZC0+TWxtZUF1eC5OZXdFeHRDaGFubmVsT2Zmc2V0ID0gTmV3RXh0Q2hhbm5lbE9mZnNldDsKKwkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4gPSBIdENhcGFiaWxpdHlMZW47CisKKwkJCS8vIGZpbHRlciBvdXQgdW4tc3VwcG9ydGVkIGh0IHJhdGVzCisJCQlpZiAoKChIdENhcGFiaWxpdHlMZW4gPiAwKSB8fCAoUHJlTkh0Q2FwYWJpbGl0eUxlbiA+IDApKSAmJiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKSkKKwkJCXsKKwkJCQlSVE1QWmVyb01lbW9yeSgmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwgU0laRV9IVF9DQVBfSUUpOworICAgCQkJCVJUTVBNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguQWRkSHRJbmZvLCAmQWRkSHRJbmZvLCBTSVpFX0FERF9IVF9JTkZPX0lFKTsKKworCQkJCS8vIFN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5NQ1NTZXQgc3RvcmVzIFBlZXIgQVAncyAxMW4gUnggY2FwYWJpbGl0eQorCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQWN0aXZlLlN1cHBvcnRlZFBoeUluZm8uTUNTU2V0LCBIdENhcGFiaWxpdHkuTUNTU2V0LCAxNik7CisJCQkJcEFkLT5NbG1lQXV4Lk5ld0V4dENoYW5uZWxPZmZzZXQgPSBOZXdFeHRDaGFubmVsT2Zmc2V0OworCQkJCXBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHlMZW4gPSBTSVpFX0hUX0NBUF9JRTsKKwkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJIdEVuYWJsZSA9IFRSVUU7CisJCQkJaWYgKFByZU5IdENhcGFiaWxpdHlMZW4gPiAwKQorCQkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRQaHlJbmZvLmJQcmVOSHQgPSBUUlVFOworCQkJCVJUTVBDaGVja0h0KHBBZCwgQlNTSURfV0NJRCwgJkh0Q2FwYWJpbGl0eSwgJkFkZEh0SW5mbyk7CisJCQkJLy8gQ29weSBBUCBQYXJhbWV0ZXIgdG8gU3RhQWN0aXZlLiAgVGhpcyBpcyBhbHNvIGluIExpbmtVcC4KKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQmVhY29uQXRKb2luQWN0aW9uISAoTXBkdURlbnNpdHk9JWQsIE1heFJBbXBkdUZhY3Rvcj0lZCwgQlc9JWQpXG4iLAorCQkJCQlwQWQtPlN0YUFjdGl2ZS5TdXBwb3J0ZWRIdFBoeS5NcGR1RGVuc2l0eSwgcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkSHRQaHkuTWF4UkFtcGR1RmFjdG9yLCBIdENhcGFiaWxpdHkuSHRDYXBJbmZvLkNoYW5uZWxXaWR0aCkpOworCisJCQkJaWYgKEFkZEh0SW5mb0xlbiA+IDApCisJCQkJeworCQkJCQlDZW50cmFsQ2hhbm5lbCA9IEFkZEh0SW5mby5Db250cm9sQ2hhbjsKKwkJIAkJCS8vIENoZWNrIGFnYWluIHRoZSBCYW5kd2lkdGggY2FwYWJpbGl0eSBvZiB0aGlzIEFQLgorCQkgCQkJaWYgKChBZGRIdEluZm8uQ29udHJvbENoYW4gPiAyKSYmIChBZGRIdEluZm8uQWRkSHRJbmZvLkV4dENoYW5PZmZzZXQgPT0gRVhUQ0hBX0JFTE9XKSAmJiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKQorCQkgCQkJeworCQkgCQkJCUNlbnRyYWxDaGFubmVsID0gQWRkSHRJbmZvLkNvbnRyb2xDaGFuIC0gMjsKKwkJIAkJCX0KKwkJIAkJCWVsc2UgaWYgKChBZGRIdEluZm8uQWRkSHRJbmZvLkV4dENoYW5PZmZzZXQgPT0gRVhUQ0hBX0FCT1ZFKSAmJiAoSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5DaGFubmVsV2lkdGggPT0gQldfNDApKQorCQkgCQkJeworCQkgCQkJCUNlbnRyYWxDaGFubmVsID0gQWRkSHRJbmZvLkNvbnRyb2xDaGFuICsgMjsKKwkJIAkJCX0KKworCQkJCQkvLyBDaGVjayBFcnJvciAuCisJCQkJCWlmIChwQWQtPk1sbWVBdXguQ2VudHJhbENoYW5uZWwgIT0gQ2VudHJhbENoYW5uZWwpCisJCSAJCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiUGVlckJlYWNvbkF0Sm9pbkFjdGlvbiBIVD09PT5CZWFjb24gQ2VudHJhbCBDaGFubmVsID0gJWQsIENvbnRyb2wgQ2hhbm5lbCA9ICVkLiBNbG1lYXV4IENlbnRyYWxDaGFubmVsID0gJWRcbiIsIENlbnRyYWxDaGFubmVsLCBBZGRIdEluZm8uQ29udHJvbENoYW4sIHBBZC0+TWxtZUF1eC5DZW50cmFsQ2hhbm5lbCkpOworCisJCSAJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQmVhY29uQXRKb2luQWN0aW9uIEhUPT09PkNlbnRyYWwgQ2hhbm5lbCA9ICVkLCBDb250cm9sIENoYW5uZWwgPSAlZCwgIC5cbiIsIENlbnRyYWxDaGFubmVsLCBBZGRIdEluZm8uQ29udHJvbENoYW4pKTsKKworCQkJCX0KKworCQkJfQorCQkJZWxzZQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQkJeworICAgCQkJCS8vIFRvIHByZXZlbnQgZXJyb3IsIGxldCBsZWdhY3kgQVAgbXVzdCBoYXZlIHNhbWUgQ2VudHJhbENoYW5uZWwgYW5kIENoYW5uZWwuCisJCQkJaWYgKChIdENhcGFiaWxpdHlMZW4gPT0gMCkgJiYgKFByZU5IdENhcGFiaWxpdHlMZW4gPT0gMCkpCisJCQkJCXBBZC0+TWxtZUF1eC5DZW50cmFsQ2hhbm5lbCA9IHBBZC0+TWxtZUF1eC5DaGFubmVsOworCisJCQkJcEFkLT5TdGFBY3RpdmUuU3VwcG9ydGVkUGh5SW5mby5iSHRFbmFibGUgPSBGQUxTRTsKKwkJCQlSVE1QWmVyb01lbW9yeSgmcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eSwgU0laRV9IVF9DQVBfSUUpOworCQkJCVJUTVBaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQWRkSHRJbmZvLCBTSVpFX0FERF9IVF9JTkZPX0lFKTsKKwkJCX0KKworCQkJUlRNUFVwZGF0ZU1sbWVSYXRlKHBBZCk7CisKKwkJCS8vIGNvcHkgUU9TIHJlbGF0ZWQgaW5mb3JtYXRpb24KKwkJCWlmICgocEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUpCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJIHx8IChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQpCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkJKQorCQkJeworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBFZGNhUGFybSwgJkVkY2FQYXJtLCBzaXplb2YoRURDQV9QQVJNKSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+TWxtZUF1eC5BUFFic3NMb2FkLCAmUWJzc0xvYWQsIHNpemVvZihRQlNTX0xPQURfUEFSTSkpOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBRb3NDYXBhYmlsaXR5LCAmUW9zQ2FwYWJpbGl0eSwgc2l6ZW9mKFFPU19DQVBBQklMSVRZX1BBUk0pKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5NbG1lQXV4LkFQRWRjYVBhcm0sIHNpemVvZihFRENBX1BBUk0pKTsKKwkJCQlOZGlzWmVyb01lbW9yeSgmcEFkLT5NbG1lQXV4LkFQUWJzc0xvYWQsIHNpemVvZihRQlNTX0xPQURfUEFSTSkpOworCQkJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPk1sbWVBdXguQVBRb3NDYXBhYmlsaXR5LCBzaXplb2YoUU9TX0NBUEFCSUxJVFlfUEFSTSkpOworCQkJfQorCisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gYWZ0ZXIgSk9JTiwgU3VwUmF0ZUxlbj0lZCwgRXh0UmF0ZUxlbj0lZFxuIiwKKwkJCQkJCQkJCQlwQWQtPk1sbWVBdXguU3VwUmF0ZUxlbiwgcEFkLT5NbG1lQXV4LkV4dFJhdGVMZW4pKTsKKworI2lmZGVmIExFQVBfU1VQUE9SVAorCQkJLy8gVXBkYXRlIENraXBGbGFnCisJCQlwQWQtPlN0YUNmZy5Da2lwRmxhZyA9IENraXBGbGFnOworCisJCQkvLyBLZWVwIFRpbWVTdGFtcCBmb3IgUmUtQXNzb2NpYXRpb24gdXNlZC4KKwkJCWlmIChMRUFQX0NDS01fT04ocEFkKSAmJiAocEFkLT5TdGFDZmcuQ0NLTUxpbmtVcEZsYWcgPT0gVFJVRSkpCisJCQkJcEFkLT5TdGFDZmcuQ0NLTUJlYWNvbkF0Sm9pblRpbWVTdGFtcCA9IFRpbWVTdGFtcDsKKyNlbmRpZiAvLyBMRUFQX1NVUFBPUlQgLy8KKworCQkJaWYgKEFpcm9uZXRDZWxsUG93ZXJMaW1pdCAhPSAweEZGKQorCQkJeworCQkJCS8vV2UgbmVlZCB0byBjaGFuZ2Ugb3VyIFR4UG93ZXIgZm9yIENDWCAyLjAgQVAgQ29udHJvbCBvZiBDbGllbnQgVHJhbnNtaXQgUG93ZXIKKwkJCQlDaGFuZ2VUb0NlbGxQb3dlckxpbWl0KHBBZCwgQWlyb25ldENlbGxQb3dlckxpbWl0KTsKKwkJCX0KKwkJCWVsc2UgIC8vVXNlZCB0aGUgZGVmYXVsdCBUWCBQb3dlciBQZXJjZW50YWdlLgorCQkJCXBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlID0gcEFkLT5Db21tb25DZmcuVHhQb3dlckRlZmF1bHQ7CisKKwkJCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7CisJCQlTdGF0dXMgPSBNTE1FX1NVQ0NFU1M7CisJCQlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfSk9JTl9DT05GLCAyLCAmU3RhdHVzKTsKKwkJfQorCQkvLyBub3QgdG8gbWUgQkVBQ09OLCBpZ25vcmVkCisJfQorCS8vIHNhbml0eSBjaGVjayBmYWlsLCBpZ25vcmUgdGhpcyBmcmFtZQorfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJCXJlY2VpdmUgQkVBQ09OIGZyb20gcGVlcgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJCZWFjb24oCisJSU4gUFJUTVBfQURBUFRFUiBwQWQsCisJSU4gTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVVDSEFSICAgICAgICAgQnNzaWRbTUFDX0FERFJfTEVOXSwgQWRkcjJbTUFDX0FERFJfTEVOXTsKKwlDSEFSICAgICAgICAgIFNzaWRbTUFYX0xFTl9PRl9TU0lEXTsKKwlDRl9QQVJNICAgICAgIENmUGFybTsKKwlVQ0hBUiAgICAgICAgIFNzaWRMZW4sIE1lc3NhZ2VUb01lPTAsIEJzc1R5cGUsIENoYW5uZWwsIE5ld0NoYW5uZWwsIGluZGV4PTA7CisJVUNIQVIgICAgICAgICBEdGltQ291bnQ9MCwgRHRpbVBlcmlvZD0wLCBCY2FzdEZsYWc9MDsKKwlVU0hPUlQgICAgICAgIENhcGFiaWxpdHlJbmZvLCBBdGltV2luLCBCZWFjb25QZXJpb2Q7CisJTEFSR0VfSU5URUdFUiBUaW1lU3RhbXA7CisJVVNIT1JUICAgICAgICBUYnR0TnVtVG9OZXh0V2FrZVVwOworCVVDSEFSICAgICAgICAgRXJwOworCVVDSEFSICAgICAgICAgU3VwUmF0ZVtNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFU10sIEV4dFJhdGVbTUFYX0xFTl9PRl9TVVBQT1JURURfUkFURVNdOworCVVDSEFSCQkgIFN1cFJhdGVMZW4sIEV4dFJhdGVMZW47CisJVUNIQVIJCSAgQ2tpcEZsYWc7CisJVVNIT1JUICAgICAgICBMZW5WSUU7CisJVUNIQVIJCSAgQWlyb25ldENlbGxQb3dlckxpbWl0OworCUVEQ0FfUEFSTSAgICAgICBFZGNhUGFybTsKKwlRQlNTX0xPQURfUEFSTSAgUWJzc0xvYWQ7CisJUU9TX0NBUEFCSUxJVFlfUEFSTSBRb3NDYXBhYmlsaXR5OworCVVMT05HICAgICAgICAgICBSYWxpbmtJZTsKKwkvLyBOZXcgZm9yIFdQQSBzZWN1cml0eSBzdWl0ZXMKKwlVQ0hBUgkJCQkJCVZhcklFW01BWF9WSUVfTEVOXTsJCS8vIFRvdGFsIFZJRSBsZW5ndGggPSBNQVhfVklFX0xFTiAtIC01CisJTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzCSpwVklFID0gTlVMTDsKKwlIVF9DQVBBQklMSVRZX0lFCQlIdENhcGFiaWxpdHk7CisJQUREX0hUX0lORk9fSUUJCUFkZEh0SW5mbzsJLy8gQVAgbWlnaHQgdXNlIHRoaXMgYWRkaXRpb25hbCBodCBpbmZvIElFCisJVUNIQVIJCQlIdENhcGFiaWxpdHlMZW4sIFByZU5IdENhcGFiaWxpdHlMZW47CisJVUNIQVIJCQlBZGRIdEluZm9MZW47CisJVUNIQVIJCQlOZXdFeHRDaGFubmVsT2Zmc2V0ID0gMHhmZjsKKworCisjaWZkZWYgUkFMSU5LX0FURQorICAgIGlmIChBVEVfT04ocEFkKSkKKyAgICB7CisJCXJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJaWYgKCEoSU5GUkFfT04ocEFkKSB8fCBBREhPQ19PTihwQWQpCisJCSkpCisJCXJldHVybjsKKworCS8vIEluaXQgVmFyaWFibGUgSUUgc3RydWN0dXJlCisJcFZJRSA9IChQTkRJU184MDJfMTFfVkFSSUFCTEVfSUVzKSBWYXJJRTsKKwlwVklFLT5MZW5ndGggPSAwOworICAgIFJUTVBaZXJvTWVtb3J5KCZIdENhcGFiaWxpdHksIHNpemVvZihIdENhcGFiaWxpdHkpKTsKKwlSVE1QWmVyb01lbW9yeSgmQWRkSHRJbmZvLCBzaXplb2YoQUREX0hUX0lORk9fSUUpKTsKKworCWlmIChQZWVyQmVhY29uQW5kUHJvYmVSc3BTYW5pdHkocEFkLAorCQkJCQkJCQlFbGVtLT5Nc2csCisJCQkJCQkJCUVsZW0tPk1zZ0xlbiwKKwkJCQkJCQkJRWxlbS0+Q2hhbm5lbCwKKwkJCQkJCQkJQWRkcjIsCisJCQkJCQkJCUJzc2lkLAorCQkJCQkJCQlTc2lkLAorCQkJCQkJCQkmU3NpZExlbiwKKwkJCQkJCQkJJkJzc1R5cGUsCisJCQkJCQkJCSZCZWFjb25QZXJpb2QsCisJCQkJCQkJCSZDaGFubmVsLAorCQkJCQkJCQkmTmV3Q2hhbm5lbCwKKwkJCQkJCQkJJlRpbWVTdGFtcCwKKwkJCQkJCQkJJkNmUGFybSwKKwkJCQkJCQkJJkF0aW1XaW4sCisJCQkJCQkJCSZDYXBhYmlsaXR5SW5mbywKKwkJCQkJCQkJJkVycCwKKwkJCQkJCQkJJkR0aW1Db3VudCwKKwkJCQkJCQkJJkR0aW1QZXJpb2QsCisJCQkJCQkJCSZCY2FzdEZsYWcsCisJCQkJCQkJCSZNZXNzYWdlVG9NZSwKKwkJCQkJCQkJU3VwUmF0ZSwKKwkJCQkJCQkJJlN1cFJhdGVMZW4sCisJCQkJCQkJCUV4dFJhdGUsCisJCQkJCQkJCSZFeHRSYXRlTGVuLAorCQkJCQkJCQkmQ2tpcEZsYWcsCisJCQkJCQkJCSZBaXJvbmV0Q2VsbFBvd2VyTGltaXQsCisJCQkJCQkJCSZFZGNhUGFybSwKKwkJCQkJCQkJJlFic3NMb2FkLAorCQkJCQkJCQkmUW9zQ2FwYWJpbGl0eSwKKwkJCQkJCQkJJlJhbGlua0llLAorCQkJCQkJCQkmSHRDYXBhYmlsaXR5TGVuLAorCQkJCQkJCQkmUHJlTkh0Q2FwYWJpbGl0eUxlbiwKKwkJCQkJCQkJJkh0Q2FwYWJpbGl0eSwKKwkJCQkJCQkJJkFkZEh0SW5mb0xlbiwKKwkJCQkJCQkJJkFkZEh0SW5mbywKKwkJCQkJCQkJJk5ld0V4dENoYW5uZWxPZmZzZXQsCisJCQkJCQkJCSZMZW5WSUUsCisJCQkJCQkJCXBWSUUpKQorCXsKKwkJQk9PTEVBTiBpc19teV9ic3NpZCwgaXNfbXlfc3NpZDsKKwkJVUxPTkcgICBCc3NpZHgsIE5vdzsKKwkJQlNTX0VOVFJZICpwQnNzOworCQlDSEFSCQlSZWFsUnNzaSA9IFJUTVBNYXhSc3NpKHBBZCwgQ29udmVydFRvUnNzaShwQWQsIEVsZW0tPlJzc2kwLCBSU1NJXzApLCBDb252ZXJ0VG9Sc3NpKHBBZCwgRWxlbS0+UnNzaTEsIFJTU0lfMSksIENvbnZlcnRUb1Jzc2kocEFkLCBFbGVtLT5Sc3NpMiwgUlNTSV8yKSk7CisKKwkJaXNfbXlfYnNzaWQgPSBNQUNfQUREUl9FUVVBTChCc3NpZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpPyBUUlVFIDogRkFMU0U7CisJCWlzX215X3NzaWQgPSBTU0lEX0VRVUFMKFNzaWQsIFNzaWRMZW4sIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsIHBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4pPyBUUlVFOkZBTFNFOworCisKKwkJLy8gaWdub3JlIEJFQUNPTiBub3QgZm9yIG15IFNTSUQKKwkJaWYgKCghIGlzX215X3NzaWQpICYmICghIGlzX215X2Jzc2lkKSkKKwkJCXJldHVybjsKKworCQkvLyBJdCBtZWFucyBTVEEgd2FpdHMgZGlzYXNzb2MgY29tcGxldGVseSBmcm9tIHRoaXMgQVAsIGlnbm9yZXMgdGhpcyBiZWFjb24uCisJCWlmIChwQWQtPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlID09IENOVExfV0FJVF9ESVNBU1NPQykKKwkJCXJldHVybjsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkvLyBDb3B5IENvbnRyb2wgY2hhbm5lbCBmb3IgdGhpcyBCU1NJRC4KKwkJaWYgKEFkZEh0SW5mb0xlbiAhPSAwKQorCQkJQ2hhbm5lbCA9IEFkZEh0SW5mby5Db250cm9sQ2hhbjsKKworCQlpZiAoKEh0Q2FwYWJpbGl0eUxlbiA+IDApIHx8IChQcmVOSHRDYXBhYmlsaXR5TGVuID4gMCkpCisJCQlIdENhcGFiaWxpdHlMZW4gPSBTSVpFX0hUX0NBUF9JRTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworCQkvLworCQkvLyBIb3VzZWtlZXBpbmcgIlNzaWRCc3NUYWIiIHRhYmxlIGZvciBsYXRlci1vbiBST0FNaW5nIHVzYWdlLgorCQkvLworCQlCc3NpZHggPSBCc3NUYWJsZVNlYXJjaCgmcEFkLT5TY2FuVGFiLCBCc3NpZCwgQ2hhbm5lbCk7CisJCWlmIChCc3NpZHggPT0gQlNTX05PVF9GT1VORCkKKwkJeworCQkJLy8gZGlzY292ZXIgbmV3IEFQIG9mIHRoaXMgbmV0d29yaywgY3JlYXRlIEJTUyBlbnRyeQorCQkJQnNzaWR4ID0gQnNzVGFibGVTZXRFbnRyeShwQWQsICZwQWQtPlNjYW5UYWIsIEJzc2lkLCBTc2lkLCBTc2lkTGVuLCBCc3NUeXBlLCBCZWFjb25QZXJpb2QsCisJCQkJCQkgJkNmUGFybSwgQXRpbVdpbiwgQ2FwYWJpbGl0eUluZm8sIFN1cFJhdGUsIFN1cFJhdGVMZW4sIEV4dFJhdGUsIEV4dFJhdGVMZW4sCisJCQkJCQkmSHRDYXBhYmlsaXR5LCAmQWRkSHRJbmZvLEh0Q2FwYWJpbGl0eUxlbixBZGRIdEluZm9MZW4sTmV3RXh0Q2hhbm5lbE9mZnNldCwgQ2hhbm5lbCwKKwkJCQkJCVJlYWxSc3NpLCBUaW1lU3RhbXAsIENraXBGbGFnLCAmRWRjYVBhcm0sICZRb3NDYXBhYmlsaXR5LAorCQkJCQkJJlFic3NMb2FkLCBMZW5WSUUsIHBWSUUpOworCQkJaWYgKEJzc2lkeCA9PSBCU1NfTk9UX0ZPVU5EKSAvLyByZXR1cm4gaWYgQlNTIHRhYmxlIGZ1bGwKKwkJCQlyZXR1cm47CisKKwkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdLlBUU0YsICZFbGVtLT5Nc2dbMjRdLCA0KTsKKwkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5UVFNGWzBdLCAmRWxlbS0+VGltZVN0YW1wLnUuTG93UGFydCwgNCk7CisJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uVFRTRls0XSwgJkVsZW0tPlRpbWVTdGFtcC51Lkxvd1BhcnQsIDQpOworCisKKworCQl9CisKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5iSUVFRTgwMjExSCA9PSAxKSAmJiAoTmV3Q2hhbm5lbCAhPSAwKSAmJiAoQ2hhbm5lbCAhPSBOZXdDaGFubmVsKSkKKwkJeworCQkJLy8gU3dpdGNoaW5nIHRvIGNoYW5uZWwgMSBjYW4gcHJldmVudCBmcm9tIHJlc2Nhbm5pbmcgdGhlIGN1cnJlbnQgY2hhbm5lbCBpbW1lZGlhdGVseSAoYnkgYXV0byByZWNvbm5lY3Rpb24pLgorCQkJLy8gSW4gYWRkaXRpb24sIGNsZWFyIHRoZSBNTE1FIHF1ZXVlIGFuZCB0aGUgc2NhbiB0YWJsZSB0byBkaXNjYXJkIHRoZSBSWCBwYWNrZXRzIGFuZCBwcmV2aW91cyBzY2FubmluZyByZXN1bHRzLgorCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCAxLCBGQUxTRSk7CisJCQlBc2ljTG9ja0NoYW5uZWwocEFkLCAxKTsKKwkJICAgIExpbmtEb3duKHBBZCwgRkFMU0UpOworCQkJTWxtZVF1ZXVlSW5pdCgmcEFkLT5NbG1lLlF1ZXVlKTsKKwkJCUJzc1RhYmxlSW5pdCgmcEFkLT5TY2FuVGFiKTsKKwkJICAgIFJUTVB1c2VjRGVsYXkoMTAwMDAwMCk7CQkvLyB1c2UgZGVsYXkgdG8gcHJldmVudCBTVEEgZG8gcmVhc3NvYworCisJCQkvLyBjaGFubmVsIHNhbml0eSBjaGVjaworCQkJZm9yIChpbmRleCA9IDAgOyBpbmRleCA8IHBBZC0+Q2hhbm5lbExpc3ROdW07IGluZGV4KyspCisJCQl7CisJCQkJaWYgKHBBZC0+Q2hhbm5lbExpc3RbaW5kZXhdLkNoYW5uZWwgPT0gTmV3Q2hhbm5lbCkKKwkJCQl7CisJCQkJCXBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdLkNoYW5uZWwgPSBOZXdDaGFubmVsOworCQkJCQlwQWQtPkNvbW1vbkNmZy5DaGFubmVsID0gTmV3Q2hhbm5lbDsKKwkJCQkJQXNpY1N3aXRjaENoYW5uZWwocEFkLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJCQkJCUFzaWNMb2NrQ2hhbm5lbChwQWQsIHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwpOworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJQZWVyQmVhY29uIC0gU1RBIHJlY2VpdmUgY2hhbm5lbCBzd2l0Y2ggYW5ub3VuY2VtZW50IElFIChOZXcgQ2hhbm5lbCA9JWQpXG4iLCBOZXdDaGFubmVsKSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGluZGV4ID49IHBBZC0+Q2hhbm5lbExpc3ROdW0pCisJCQl7CisJCQkJREJHUFJJTlRfRVJSKCgiUGVlckJlYWNvbihjYW4gbm90IGZpbmQgTmV3IENoYW5uZWw9JWQgaW4gQ2hhbm5lbExpc3RbJWRdXG4iLCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsLCBwQWQtPkNoYW5uZWxMaXN0TnVtKSk7CisJCQl9CisJCX0KKworCQkvLyBpZiB0aGUgc3NpZCBtYXRjaGVkICYgYnNzaWQgdW5tYXRjaGVkLCB3ZSBzaG91bGQgc2VsZWN0IHRoZSBic3NpZCB3aXRoIGxhcmdlIHZhbHVlLgorCQkvLyBUaGlzIG1pZ2h0IGhhcHBlbmVkIHdoZW4gdHdvIFNUQSBzdGFydCBhdCB0aGUgc2FtZSB0aW1lCisJCWlmICgoISBpc19teV9ic3NpZCkgJiYgQURIT0NfT04ocEFkKSkKKwkJeworCQkJSU5UCWk7CisKKwkJCS8vIEFkZCB0aGUgc2FmZWd1YXJkIGFnYWluc3QgdGhlIG1pc21hdGNoIG9mIGFkaG9jIHdlcCBzdGF0dXMKKwkJCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgIT0gcEFkLT5TY2FuVGFiLkJzc0VudHJ5W0Jzc2lkeF0uV2VwU3RhdHVzKQorCQkJeworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBOb3QgbWF0Y2hlZCB3ZXAgc3RhdHVzICVkICVkXG4iLCBwQWQtPlN0YUNmZy5XZXBTdGF0dXMsIHBBZC0+U2NhblRhYi5Cc3NFbnRyeVtCc3NpZHhdLldlcFN0YXR1cykpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImJzc2lkPSVzXG4iLCBwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XS5Cc3NpZCkpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJLy8gY29sbGFwc2UgaW50byB0aGUgQURIT0MgbmV0d29yayB3aGljaCBoYXMgYmlnZ2VyIEJTU0lEIHZhbHVlLgorCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCXsKKwkJCQlpZiAoQnNzaWRbaV0gPiBwQWQtPkNvbW1vbkNmZy5Cc3NpZFtpXSkKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBtZXJnZSB0byB0aGUgSUJTUyB3aXRoIGJpZ2dlciBCU1NJRD0lMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCQkJCUJzc2lkWzBdLCBCc3NpZFsxXSwgQnNzaWRbMl0sIEJzc2lkWzNdLCBCc3NpZFs0XSwgQnNzaWRbNV0pKTsKKwkJCQkJQXNpY0Rpc2FibGVTeW5jKHBBZCk7CisJCQkJCUNPUFlfTUFDX0FERFIocEFkLT5Db21tb25DZmcuQnNzaWQsIEJzc2lkKTsKKwkJCQkJQXNpY1NldEJzc2lkKHBBZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQkJCQlNYWtlSWJzc0JlYWNvbihwQWQpOyAgICAgICAgLy8gcmUtYnVpbGQgQkVBQ09OIGZyYW1lCisJCQkJCUFzaWNFbmFibGVJYnNzU3luYyhwQWQpOyAgICAvLyBjb3B5IEJFQUNPTiBmcmFtZSB0byBvbi1jaGlwIG1lbW9yeQorCQkJCQlpc19teV9ic3NpZCA9IFRSVUU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlIGlmIChCc3NpZFtpXSA8IHBBZC0+Q29tbW9uQ2ZnLkJzc2lkW2ldKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCisKKwkJTmRpc0dldFN5c3RlbVVwVGltZSgmTm93KTsKKwkJcEJzcyA9ICZwQWQtPlNjYW5UYWIuQnNzRW50cnlbQnNzaWR4XTsKKwkJcEJzcy0+UnNzaSA9IFJlYWxSc3NpOyAgICAgICAvLyBsYXN0ZXN0IFJTU0kKKwkJcEJzcy0+TGFzdEJlYWNvblJ4VGltZSA9IE5vdzsgICAvLyBsYXN0IFJYIHRpbWVzdGFtcAorCisJCS8vCisJCS8vIEJFQUNPTiBmcm9tIG15IEJTU0lEIC0gZWl0aGVyIElCU1Mgb3IgSU5GUkEgbmV0d29yaworCQkvLworCQlpZiAoaXNfbXlfYnNzaWQpCisJCXsKKwkJCVJYV0lfU1RSVUMJUnhXSTsKKworCQkJcEFkLT5TdGFDZmcuRHRpbUNvdW50ID0gRHRpbUNvdW50OworCQkJcEFkLT5TdGFDZmcuRHRpbVBlcmlvZCA9IER0aW1QZXJpb2Q7CisJCQlwQWQtPlN0YUNmZy5MYXN0QmVhY29uUnhUaW1lID0gTm93OworCisKKwkJCVJ4V0kuUlNTSTAgPSBFbGVtLT5Sc3NpMDsKKwkJCVJ4V0kuUlNTSTEgPSBFbGVtLT5Sc3NpMTsKKwkJCVJ4V0kuUlNTSTIgPSBFbGVtLT5Sc3NpMjsKKworCQkJVXBkYXRlX1Jzc2lfU2FtcGxlKHBBZCwgJnBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUsICZSeFdJKTsKKwkJCWlmIChBaXJvbmV0Q2VsbFBvd2VyTGltaXQgIT0gMHhGRikKKwkJCXsKKwkJCQkvLworCQkJCS8vIFdlIGdldCB0aGUgQ2lzY28gKGNjeCkgIlR4UG93ZXIgTGltaXQiIHJlcXVpcmVkCisJCQkJLy8gQ2hhbmdlZCB0byBhcHByb3ByaWF0ZSBUeFBvd2VyIExpbWl0IGZvciBDaXNvIENvbXBhdGlibGUgRXh0ZW5zaW9ucworCQkJCS8vCisJCQkJQ2hhbmdlVG9DZWxsUG93ZXJMaW1pdChwQWQsIEFpcm9uZXRDZWxsUG93ZXJMaW1pdCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLy8KKwkJCQkvLyBBaXJvbmV0Q2VsbFBvd2VyTGltaXQgZXF1YWwgdG8gMHhGRiBtZWFucyB0aGUgQ2lzY28gKGNjeCkgIlR4UG93ZXIgTGltaXQiIG5vdCBleGlzdC4KKwkJCQkvLyBVc2VkIHRoZSBkZWZhdWx0IFRYIFBvd2VyIFBlcmNlbnRhZ2UsIHRoYXQgc2V0IGZyb20gVUkuCisJCQkJLy8KKwkJCQlwQWQtPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IHBBZC0+Q29tbW9uQ2ZnLlR4UG93ZXJEZWZhdWx0OworCQkJfQorCisJCQlpZiAoQURIT0NfT04ocEFkKSAmJiAoQ0FQX0lTX0lCU1NfT04oQ2FwYWJpbGl0eUluZm8pKSkKKwkJCXsKKwkJCQlVQ0hBUgkJCU1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPSAwOworCQkJCVVDSEFSCQkJaWR4OworCQkJCU1BQ19UQUJMRV9FTlRSWSAqcEVudHJ5OworCisJCQkJLy8gc3VwcG9ydGVkIHJhdGVzIGFycmF5IG1heSBub3QgYmUgc29ydGVkLiBzb3J0IGl0IGFuZCBmaW5kIHRoZSBtYXhpbXVtIHJhdGUKKwkJCSAgICBmb3IgKGlkeD0wOyBpZHg8U3VwUmF0ZUxlbjsgaWR4KyspCisJCQkJCQl7CisJCQkgICAgICAgIGlmIChNYXhTdXBwb3J0ZWRSYXRlSW41MDBLYnBzIDwgKFN1cFJhdGVbaWR4XSAmIDB4N2YpKQorCQkJICAgICAgICAgICAgTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA9IFN1cFJhdGVbaWR4XSAmIDB4N2Y7CisJCQkJCQl9CisKKwkJCQlmb3IgKGlkeD0wOyBpZHg8RXh0UmF0ZUxlbjsgaWR4KyspCisJCQkgICAgeworCQkJICAgICAgICBpZiAoTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcyA8IChFeHRSYXRlW2lkeF0gJiAweDdmKSkKKwkJCSAgICAgICAgICAgIE1heFN1cHBvcnRlZFJhdGVJbjUwMEticHMgPSBFeHRSYXRlW2lkeF0gJiAweDdmOworCQkJCQl9CisKKwkJCQkvLyBsb29rIHVwIHRoZSBleGlzdGluZyB0YWJsZQorCQkJCXBFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZCwgQWRkcjIpOworCisJCQkJLy8gQWQtaG9jIG1vZGUgaXMgdXNpbmcgTUFDIGFkZHJlc3MgYXMgQkEgc2Vzc2lvbi4gU28gd2UgbmVlZCB0byBjb250aW51b3VzbHkgZmluZCBuZXdseSBqb2luZWQgYWRob2Mgc3RhdGlvbiBieSByZWNlaXZpbmcgYmVhY29uLgorCQkJCS8vIFRvIHByZXZlbnQgYWx3YXlzIGNoZWNrIHRoaXMsIHdlIHVzZSB3Y2lkID09IFJFU0VSVkVEX1dDSUQgdG8gcmVjb2duaXplIGl0IGFzIG5ld2x5IGpvaW5lZCBhZGhvYyBzdGF0aW9uLgorCQkJCWlmICgoQURIT0NfT04ocEFkKSAmJiAoRWxlbS0+V2NpZCA9PSBSRVNFUlZFRF9XQ0lEKSkgfHwKKwkJCQkJKHBFbnRyeSAmJiAoKHBFbnRyeS0+TGFzdEJlYWNvblJ4VGltZSArIEFESE9DX0VOVFJZX0JFQUNPTl9MT1NUX1RJTUUpIDwgTm93KSkpCisJCQkJCQl7CisJCQkJCWlmIChwRW50cnkgPT0gTlVMTCkKKwkJCQkJCS8vIEFub3RoZXIgYWRob2Mgam9pbmluZywgYWRkIHRvIG91ciBNQUMgdGFibGUuCisJCQkJCQlwRW50cnkgPSBNYWNUYWJsZUluc2VydEVudHJ5KHBBZCwgQWRkcjIsIEJTUzAsIEZBTFNFKTsKKworCQkJCQlpZiAoU3RhQWRkTWFjVGFibGVFbnRyeShwQWQsIHBFbnRyeSwgTWF4U3VwcG9ydGVkUmF0ZUluNTAwS2JwcywgJkh0Q2FwYWJpbGl0eSwgSHRDYXBhYmlsaXR5TGVuLCBDYXBhYmlsaXR5SW5mbykgPT0gRkFMU0UpCisJCQkJCXsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkFESE9DIC0gQWRkIEVudHJ5IGZhaWxlZC5cbiIpKTsKKwkJCQkJCXJldHVybjsKKwkJCQkJfQorCisJCQkJCWlmIChwRW50cnkgJiYKKwkJCQkJCShFbGVtLT5XY2lkID09IFJFU0VSVkVEX1dDSUQpKQorCQkJCXsKKwkJCQkJCWlkeCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZDsKKwkJCQkJCVJUMjhYWF9TVEFfU0VDVVJJVFlfSU5GT19BREQocEFkLCBCU1MwLCBpZHgsIHBFbnRyeSk7CisJCQkJfQorCQkJCX0KKworCQkJCWlmIChwRW50cnkgJiYgcEVudHJ5LT5WYWxpZEFzQ0xJKQorCQkJCQlwRW50cnktPkxhc3RCZWFjb25SeFRpbWUgPSBOb3c7CisKKwkJCQkvLyBBdCBsZWFzdCBhbm90aGVyIHBlZXIgaW4gdGhpcyBJQlNTLCBkZWNsYXJlIE1lZGlhU3RhdGUgYXMgQ09OTkVDVEVECisJCQkJaWYgKCFPUFNUQVRVU19URVNUX0ZMQUcocEFkLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpCisJCQkJeworCQkJCQlPUFNUQVRVU19TRVRfRkxBRyhwQWQsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKTsKKworCQkJCQlwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOworCQkJCQlSVE1QX0luZGljYXRlTWVkaWFTdGF0ZShwQWQpOworCSAgICAgICAgICAgICAgICBwQWQtPkV4dHJhSW5mbyA9IEdFTkVSQUxfTElOS19VUDsKKwkJCQkJQXNpY1NldEJzc2lkKHBBZCwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCisJCQkJCS8vIDIwMDMvMDMvMTIgLSBqb2huCisJCQkJCS8vIE1ha2Ugc3VyZSB0aGlzIGVudHJ5IGluICJTY2FuVGFiIiB0YWJsZSwgdGh1cyBjb21wbGllcyB0byBNaWNyb3NvZnQncyBwb2xpY3kgdGhhdAorCQkJCQkvLyAic2l0ZSBzdXJ2ZXkiIHJlc3VsdCBzaG91bGQgYWx3YXlzIGluY2x1ZGUgdGhlIGN1cnJlbnQgY29ubmVjdGVkIG5ldHdvcmsuCisJCQkJCS8vCisJCQkJCUJzc2lkeCA9IEJzc1RhYmxlU2VhcmNoKCZwQWQtPlNjYW5UYWIsIEJzc2lkLCBDaGFubmVsKTsKKwkJCQkJaWYgKEJzc2lkeCA9PSBCU1NfTk9UX0ZPVU5EKQorCQkJCQl7CisJCQkJCQlCc3NpZHggPSBCc3NUYWJsZVNldEVudHJ5KHBBZCwgJnBBZC0+U2NhblRhYiwgQnNzaWQsIFNzaWQsIFNzaWRMZW4sIEJzc1R5cGUsIEJlYWNvblBlcmlvZCwKKwkJCQkJCQkJCSZDZlBhcm0sIEF0aW1XaW4sIENhcGFiaWxpdHlJbmZvLCBTdXBSYXRlLCBTdXBSYXRlTGVuLCBFeHRSYXRlLCBFeHRSYXRlTGVuLCAmSHRDYXBhYmlsaXR5LAorCQkJCQkJCQkJJkFkZEh0SW5mbywgSHRDYXBhYmlsaXR5TGVuLCBBZGRIdEluZm9MZW4sIE5ld0V4dENoYW5uZWxPZmZzZXQsIENoYW5uZWwsIFJlYWxSc3NpLCBUaW1lU3RhbXAsIDAsCisJCQkJCQkJCQkmRWRjYVBhcm0sICZRb3NDYXBhYmlsaXR5LCAmUWJzc0xvYWQsIExlblZJRSwgcFZJRSk7CisJCQkJCX0KKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQURIT0MgIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVELlxuIikpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKElORlJBX09OKHBBZCkpCisJCQl7CisJCQkJQk9PTEVBTiBiVXNlU2hvcnRTbG90LCBiVXNlQkdQcm90ZWN0aW9uOworCisJCQkJLy8gZGVjaWRlIHRvIHVzZS9jaGFuZ2UgdG8gLQorCQkJCS8vICAgICAgMS4gbG9uZyBzbG90ICgyMCB1cykgb3Igc2hvcnQgc2xvdCAoOSB1cykgdGltZQorCQkJCS8vICAgICAgMi4gdHVybiBvbi9vZmYgUlRTL0NUUyBhbmQvb3IgQ1RTLXRvLXNlbGYgcHJvdGVjdGlvbgorCQkJCS8vICAgICAgMy4gc2hvcnQgcHJlYW1ibGUKKworCQkJCS8vYlVzZVNob3J0U2xvdCA9IHBBZC0+Q29tbW9uQ2ZnLmJVc2VTaG9ydFNsb3RUaW1lICYmIENBUF9JU19TSE9SVF9TTE9UKENhcGFiaWxpdHlJbmZvKTsKKwkJCQliVXNlU2hvcnRTbG90ID0gQ0FQX0lTX1NIT1JUX1NMT1QoQ2FwYWJpbGl0eUluZm8pOworCQkJCWlmIChiVXNlU2hvcnRTbG90ICE9IE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfU0xPVF9JTlVTRUQpKQorCQkJCQlBc2ljU2V0U2xvdFRpbWUocEFkLCBiVXNlU2hvcnRTbG90KTsKKworCQkJCWJVc2VCR1Byb3RlY3Rpb24gPSAocEFkLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uID09IDEpIHx8ICAgIC8vIGFsd2F5cyB1c2UKKwkJCQkJCQkJICAgKChwQWQtPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb24gPT0gMCkgJiYgRVJQX0lTX1VTRV9QUk9URUNUSU9OKEVycCkpOworCisJCQkJaWYgKHBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwgPiAxNCkgLy8gYWx3YXlzIG5vIEJHIHByb3RlY3Rpb24gaW4gQS1iYW5kLiBmYWxzZWx5IGhhcHBlbmVkIHdoZW4gc3dpdGNoaW5nIEEvRyBiYW5kIHRvIGEgZHVhbC1iYW5kIEFQCisJCQkJCWJVc2VCR1Byb3RlY3Rpb24gPSBGQUxTRTsKKworCQkJCWlmIChiVXNlQkdQcm90ZWN0aW9uICE9IE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQkdfUFJPVEVDVElPTl9JTlVTRUQpKQorCQkJCXsKKwkJCQkJaWYgKGJVc2VCR1Byb3RlY3Rpb24pCisJCQkJCXsKKwkJCQkJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19CR19QUk9URUNUSU9OX0lOVVNFRCk7CisJCQkJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUsIChPRkRNU0VUUFJPVEVDVHxDQ0tTRVRQUk9URUNUfEFMTE5fU0VUUFJPVEVDVCksRkFMU0UsKHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPT0gMSkpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWQsIGZPUF9TVEFUVVNfQkdfUFJPVEVDVElPTl9JTlVTRUQpOworCQkJCQkJQXNpY1VwZGF0ZVByb3RlY3QocEFkLCBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlLCAoT0ZETVNFVFBST1RFQ1R8Q0NLU0VUUFJPVEVDVHxBTExOX1NFVFBST1RFQ1QpLFRSVUUsKHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPT0gMSkpOworCQkJCQl9CisKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfV0FSTiwgKCJTWU5DIC0gQVAgY2hhbmdlZCBCL0cgcHJvdGVjdGlvbiB0byAlZFxuIiwgYlVzZUJHUHJvdGVjdGlvbikpOworCQkJCX0KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCS8vIGNoZWNrIEh0IHByb3RlY3Rpb24gbW9kZS4gYW5kIGFkaGVyZSB0byB0aGUgTm9uLUdGIGRldmljZSBpbmRpY2F0aW9uIGJ5IEFQLgorCQkJCWlmICgoQWRkSHRJbmZvTGVuICE9IDApICYmCisJCQkJCSgoQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlICE9IHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUpIHx8CisJCQkJCShBZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgIT0gcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCkpKQorCQkJCXsKKwkJCQkJcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudCA9IEFkZEh0SW5mby5BZGRIdEluZm8yLk5vbkdmUHJlc2VudDsKKwkJCQkJcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSA9IEFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZTsKKwkJCQkJaWYgKHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5Ob25HZlByZXNlbnQgPT0gMSkKKwkJCQl7CisJCQkJCQlBc2ljVXBkYXRlUHJvdGVjdChwQWQsIHBBZC0+TWxtZUF1eC5BZGRIdEluZm8uQWRkSHRJbmZvMi5PcGVyYWlvbk1vZGUsIEFMTE5fU0VUUFJPVEVDVCwgRkFMU0UsIFRSVUUpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJCUFzaWNVcGRhdGVQcm90ZWN0KHBBZCwgcEFkLT5NbG1lQXV4LkFkZEh0SW5mby5BZGRIdEluZm8yLk9wZXJhaW9uTW9kZSwgQUxMTl9TRVRQUk9URUNULCBGQUxTRSwgRkFMU0UpOworCisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBBUCBjaGFuZ2VkIE4gT3BlcmFpb25Nb2RlIHRvICVkXG4iLCBwQWQtPk1sbWVBdXguQWRkSHRJbmZvLkFkZEh0SW5mbzIuT3BlcmFpb25Nb2RlKSk7CisJCQkJfQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfU0hPUlRfUFJFQU1CTEVfSU5VU0VEKSAmJgorCQkJCQlFUlBfSVNfVVNFX0JBUktFUl9QUkVBTUJMRShFcnApKQorCQkJCXsKKwkJCQkJTWxtZVNldFR4UHJlYW1ibGUocEFkLCBSdDgwMl8xMVByZWFtYmxlTG9uZyk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBBUCBmb3JjZWQgdG8gdXNlIExPTkcgcHJlYW1ibGVcbiIpKTsKKwkJCQl9CisKKwkJCQlpZiAoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19XTU1fSU5VU0VEKSAgICAmJgorCQkJCQkoRWRjYVBhcm0uYlZhbGlkID09IFRSVUUpICAgICAgICAgICAgICAgICAgICAgICAgICAmJgorCQkJCQkoRWRjYVBhcm0uRWRjYVVwZGF0ZUNvdW50ICE9IHBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uRWRjYVVwZGF0ZUNvdW50KSkKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNZTkMgLSBBUCBjaGFuZ2UgRURDQSBwYXJhbWV0ZXJzKGZyb20gJWQgdG8gJWQpXG4iLAorCQkJCQkJcEFkLT5Db21tb25DZmcuQVBFZGNhUGFybS5FZGNhVXBkYXRlQ291bnQsCisJCQkJCQlFZGNhUGFybS5FZGNhVXBkYXRlQ291bnQpKTsKKwkJCQkJQXNpY1NldEVkY2FQYXJtKHBBZCwgJkVkY2FQYXJtKTsKKwkJCQl9CisKKwkJCQkvLyBjb3B5IFFPUyByZWxhdGVkIGluZm9ybWF0aW9uCisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLkFQUWJzc0xvYWQsICZRYnNzTG9hZCwgc2l6ZW9mKFFCU1NfTE9BRF9QQVJNKSk7CisJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+Q29tbW9uQ2ZnLkFQUW9zQ2FwYWJpbGl0eSwgJlFvc0NhcGFiaWxpdHksIHNpemVvZihRT1NfQ0FQQUJJTElUWV9QQVJNKSk7CisJCQl9CisKKwkJCS8vIG9ubHkgSU5GUkFTVFJVQ1RVUkUgbW9kZSBzdXBwb3J0IHBvd2VyLXNhdmluZyBmZWF0dXJlCisJCQlpZiAoKElORlJBX09OKHBBZCkgJiYgKHBBZC0+U3RhQ2ZnLlBzbSA9PSBQV1JfU0FWRSkpIHx8IChwQWQtPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlKSkKKwkJCXsKKwkJCQlVQ0hBUiBGcmVlTnVtYmVyOworCQkJCS8vICAxLiBBUCBoYXMgYmFja2xvZ2dlZCB1bmljYXN0LXRvLW1lIGZyYW1lLCBzdGF5IEFXQUtFLCBzZW5kIFBTUE9MTAorCQkJCS8vICAyLiBBUCBoYXMgYmFja2xvZ2dlZCBicm9hZGNhc3QvbXVsdGljYXN0IGZyYW1lIGFuZCB3ZSB3YW50IHRob3NlIGZyYW1lcywgc3RheSBBV0FLRQorCQkJCS8vICAzLiB3ZSBoYXZlIG91dGdvaW5nIGZyYW1lcyBpbiBUeFJpbmcgb3IgTWdtdFJpbmcsIGJldHRlciBzdGF5IEFXQUtFCisJCQkJLy8gIDQuIFBzbSBjaGFuZ2UgdG8gUFdSX1NBVkUsIGJ1dCBBUCBub3QgYmVlbiBpbmZvcm1lZCB5ZXQsIHdlIGJldHRlciBzdGF5IEFXQUtFCisJCQkJLy8gIDUuIG90aGVyd2lzZSwgcHV0IFBIWSBiYWNrIHRvIHNsZWVwIHRvIHNhdmUgYmF0dGVyeS4KKwkJCQlpZiAoTWVzc2FnZVRvTWUpCisJCQkJeworCQkJCQlpZiAocEFkLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlICYmIHBBZC0+Q29tbW9uQ2ZnLkFQRWRjYVBhcm0uYkFQU0RDYXBhYmxlICYmCisJCQkJCQlwQWQtPkNvbW1vbkNmZy5iQVBTREFDX0JFICYmIHBBZC0+Q29tbW9uQ2ZnLmJBUFNEQUNfQksgJiYgcEFkLT5Db21tb25DZmcuYkFQU0RBQ19WSSAmJiBwQWQtPkNvbW1vbkNmZy5iQVBTREFDX1ZPKQorCQkJCQl7CisJCQkJCQlwQWQtPkNvbW1vbkNmZy5iTmVlZFNlbmRUcmlnZ2VyRnJhbWUgPSBUUlVFOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJCVJUMjhYWF9QU19QT0xMX0VOUVVFVUUocEFkKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoQmNhc3RGbGFnICYmIChEdGltQ291bnQgPT0gMCkgJiYgT1BTVEFUVVNfVEVTVF9GTEFHKHBBZCwgZk9QX1NUQVRVU19SRUNFSVZFX0RUSU0pKQorCQkJCXsKKwkJCQl9CisJCQkJZWxzZSBpZiAoKHBBZC0+VHhTd1F1ZXVlW1FJRF9BQ19CS10uTnVtYmVyICE9IDApCQkJCQkJCQkJCQkJCXx8CisJCQkJCQkocEFkLT5UeFN3UXVldWVbUUlEX0FDX0JFXS5OdW1iZXIgIT0gMCkJCQkJCQkJCQkJCQkJCXx8CisJCQkJCQkocEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZJXS5OdW1iZXIgIT0gMCkJCQkJCQkJCQkJCQkJCXx8CisJCQkJCQkocEFkLT5UeFN3UXVldWVbUUlEX0FDX1ZPXS5OdW1iZXIgIT0gMCkJCQkJCQkJCQkJCQkJCXx8CisJCQkJCQkoUlRNUEZyZWVUWERSZXF1ZXN0KHBBZCwgUUlEX0FDX0JLLCBUWF9SSU5HX1NJWkUgLSAxLCAmRnJlZU51bWJlcikgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykJfHwKKwkJCQkJCShSVE1QRnJlZVRYRFJlcXVlc3QocEFkLCBRSURfQUNfQkUsIFRYX1JJTkdfU0laRSAtIDEsICZGcmVlTnVtYmVyKSAhPSBORElTX1NUQVRVU19TVUNDRVNTKQl8fAorCQkJCQkJKFJUTVBGcmVlVFhEUmVxdWVzdChwQWQsIFFJRF9BQ19WSSwgVFhfUklOR19TSVpFIC0gMSwgJkZyZWVOdW1iZXIpICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCXx8CisJCQkJCQkoUlRNUEZyZWVUWERSZXF1ZXN0KHBBZCwgUUlEX0FDX1ZPLCBUWF9SSU5HX1NJWkUgLSAxLCAmRnJlZU51bWJlcikgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykJfHwKKwkJCQkJCShSVE1QRnJlZVRYRFJlcXVlc3QocEFkLCBRSURfTUdNVCwgTUdNVF9SSU5HX1NJWkUgLSAxLCAmRnJlZU51bWJlcikgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykpCisJCQkJeworCQkJCQkvLyBUT0RPOiBjb25zaWRlciBzY2hlZHVsZWQgSENDQS4gbWlnaHQgbm90IGJlIHByb3BlciB0byB1c2UgdHJhZGl0aW9uYWwgRFRJTS1iYXNlZCBwb3dlci1zYXZpbmcgc2NoZW1lCisJCQkJCS8vIGNhbiB3ZSBjaGVhdCBoZXJlIChpLmUuIGp1c3QgY2hlY2sgTUdNVCAmIEFDX0JFKSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlPworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlVU0hPUlQgTmV4dER0aW0gPSBEdGltQ291bnQ7CisKKwkJCQkJaWYgKE5leHREdGltID09IDApCisJCQkJCQlOZXh0RHRpbSA9IER0aW1QZXJpb2Q7CisKKwkJCQkJVGJ0dE51bVRvTmV4dFdha2VVcCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudDsKKwkJCQkJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfUkVDRUlWRV9EVElNKSAmJiAoVGJ0dE51bVRvTmV4dFdha2VVcCA+IE5leHREdGltKSkKKwkJCQkJCVRidHROdW1Ub05leHRXYWtlVXAgPSBOZXh0RHRpbTsKKworCQkJCQlpZiAoIU9QU1RBVFVTX1RFU1RfRkxBRyhwQWQsIGZPUF9TVEFUVVNfRE9aRSkpCisJCQkJCXsKKwkJCQkJCUFzaWNTbGVlcFRoZW5BdXRvV2FrZXVwKHBBZCwgVGJ0dE51bVRvTmV4dFdha2VVcCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJLy8gbm90IG15IEJTU0lELCBpZ25vcmUgaXQKKwl9CisJLy8gc2FuaXR5IGNoZWNrIGZhaWwsIGlnbm9yZSB0aGlzIGZyYW1lCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJUmVjZWl2ZSBQUk9CRSBSRVEgZnJvbSByZW1vdGUgcGVlciB3aGVuIG9wZXJhdGluZyBpbiBJQlNTIG1vZGUKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFBlZXJQcm9iZVJlcUFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVUNIQVIgICAgICAgICBBZGRyMltNQUNfQUREUl9MRU5dOworCUNIQVIgICAgICAgICAgU3NpZFtNQVhfTEVOX09GX1NTSURdOworCVVDSEFSICAgICAgICAgU3NpZExlbjsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlVQ0hBUgkJICBIdExlbiwgQWRkSHRMZW4sIE5ld0V4dExlbjsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwlIRUFERVJfODAyXzExIFByb2JlUnNwSGRyOworCU5ESVNfU1RBVFVTICAgTlN0YXR1czsKKwlQVUNIQVIgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCVVMT05HICAgICAgICAgRnJhbWVMZW4gPSAwOworCUxBUkdFX0lOVEVHRVIgRmFrZVRpbWVzdGFtcDsKKwlVQ0hBUiAgICAgICAgIERzTGVuID0gMSwgSWJzc0xlbiA9IDI7CisJVUNIQVIgICAgICAgICBMb2NhbEVycEllWzNdID0ge0lFX0VSUCwgMSwgMH07CisJQk9PTEVBTiAgICAgICBQcml2YWN5OworCVVTSE9SVCAgICAgICAgQ2FwYWJpbGl0eUluZm87CisJVUNIQVIJCSAgUlNOSWUgPSBJRV9XUEE7CisKKwlpZiAoISBBREhPQ19PTihwQWQpKQorCQlyZXR1cm47CisKKwlpZiAoUGVlclByb2JlUmVxU2FuaXR5KHBBZCwgRWxlbS0+TXNnLCBFbGVtLT5Nc2dMZW4sIEFkZHIyLCBTc2lkLCAmU3NpZExlbikpCisJeworCQlpZiAoKFNzaWRMZW4gPT0gMCkgfHwgU1NJRF9FUVVBTChTc2lkLCBTc2lkTGVuLCBwQWQtPkNvbW1vbkNmZy5Tc2lkLCBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuKSkKKwkJeworCQkJLy8gYWxsb2NhdGUgYW5kIHNlbmQgb3V0IFByb2JlUnNwIGZyYW1lCisJCQlOU3RhdHVzID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCQkJaWYgKE5TdGF0dXMgIT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJCQlyZXR1cm47CisKKwkJCS8vcEFkLT5TdGFDZmcuQXRpbVdpbiA9IDA7ICAvLyA/Pz8/Pz8KKworCQkJUHJpdmFjeSA9IChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24xRW5hYmxlZCkgfHwKKwkJCQkJICAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpIHx8CisJCQkJCSAgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKTsKKwkJCUNhcGFiaWxpdHlJbmZvID0gQ0FQX0dFTkVSQVRFKDAsIDEsIFByaXZhY3ksIChwQWQtPkNvbW1vbkNmZy5UeFByZWFtYmxlID09IFJ0ODAyXzExUHJlYW1ibGVTaG9ydCksIDAsIDApOworCisJCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisJCQkJCQkJICBzaXplb2YoSEVBREVSXzgwMl8xMSksICAgICAgICAmUHJvYmVSc3BIZHIsCisJCQkJCQkJICBUSU1FU1RBTVBfTEVOLCAgICAgICAgICAgICAgICAmRmFrZVRpbWVzdGFtcCwKKwkJCQkJCQkgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPkNvbW1vbkNmZy5CZWFjb25QZXJpb2QsCisJCQkJCQkJICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ2FwYWJpbGl0eUluZm8sCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3NpZEllLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLlNzaWRMZW4sCisJCQkJCQkJICBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLCAgICAgICBwQWQtPkNvbW1vbkNmZy5Tc2lkLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN1cFJhdGVJZSwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPlN0YUFjdGl2ZS5TdXBSYXRlTGVuLAorCQkJCQkJCSAgcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZUxlbiwgICAgcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZSwKKwkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEc0llLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRzTGVuLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLkNoYW5uZWwsCisJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSWJzc0llLAorCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJklic3NMZW4sCisJCQkJCQkJICAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEFkLT5TdGFBY3RpdmUuQXRpbVdpbiwKKwkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKworCQkJaWYgKHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4pCisJCQl7CisJCQkJVUxPTkcgdG1wOworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICZ0bXAsCisJCQkJCQkJCSAgMywgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxFcnBJZSwKKwkJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRXh0UmF0ZUllLAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlTGVuLAorCQkJCQkJCQkgIHBBZC0+U3RhQWN0aXZlLkV4dFJhdGVMZW4sICAgICZwQWQtPlN0YUFjdGl2ZS5FeHRSYXRlLAorCQkJCQkJCQkgIEVORF9PRl9BUkdTKTsKKwkJCQlGcmFtZUxlbiArPSB0bXA7CisJCQl9CisKKwkJCS8vIElmIGFkaG9jIHNlY3J1aXR5IGlzIHNldCBmb3IgV1BBLU5vbmUsIGFwcGVuZCB0aGUgY2lwaGVyIHN1aXRlIElFCisJCQlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKwkJCXsKKwkJCQlVTE9ORyB0bXA7CisJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgCSZ0bXAsCisJCQkJCQkgIAkJCTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlJTTkllLAorCQkJCQkJICAJCQkxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAJJnBBZC0+U3RhQ2ZnLlJTTklFX0xlbiwKKwkJCQkJCSAgCQkJcEFkLT5TdGFDZmcuUlNOSUVfTGVuLCAgICAgIAlwQWQtPlN0YUNmZy5SU05fSUUsCisJCQkJCQkgIAkJCUVORF9PRl9BUkdTKTsKKwkJCQlGcmFtZUxlbiArPSB0bXA7CisJCQl9CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQlpZiAocEFkLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEKQorCQkJeworCQkJCVVMT05HIFRtcExlbjsKKwkJCQlVQ0hBUglCUk9BRENPTVs0XSA9IHsweDAsIDB4OTAsIDB4NGMsIDB4MzN9OworCQkJCUh0TGVuID0gc2l6ZW9mKHBBZC0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eSk7CisJCQkJQWRkSHRMZW4gPSBzaXplb2YocEFkLT5Db21tb25DZmcuQWRkSFRJbmZvKTsKKwkJCQlOZXdFeHRMZW4gPSAxOworCQkJCS8vTmV3IGV4dGVuc2lvbiBjaGFubmVsIG9mZnNldCBJRSBpcyBpbmNsdWRlZCBpbiBCZWFjb24sIFByb2JlIFJzcCBvciBjaGFubmVsIFN3aXRjaCBBbm5vdW5jZW1lbnQgRnJhbWUKKwkJCQlpZiAocEFkLT5iQnJvYWRDb21IVCA9PSBUUlVFKQorCQkJCXsKKwkJCQkJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciArIEZyYW1lTGVuLCAgICAgICAgICAgICZUbXBMZW4sCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZXcGFJZSwKKwkJCQkJCQkJICA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkJST0FEQ09NWzBdLAorCQkJCQkJCQkgcEFkLT5NbG1lQXV4Lkh0Q2FwYWJpbGl0eUxlbiwgICAgICAgICAgJnBBZC0+TWxtZUF1eC5IdENhcGFiaWxpdHksCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIgKyBGcmFtZUxlbiwgICAgICAgICAgICAmVG1wTGVuLAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSHRDYXBJZSwKKwkJCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkh0TGVuLAorCQkJCQkJCQkgc2l6ZW9mKEhUX0NBUEFCSUxJVFlfSUUpLCAgICAgICAgICAmcEFkLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5LAorCQkJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQWRkSHRJbmZvSWUsCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBZGRIdExlbiwKKwkJCQkJCQkJIHNpemVvZihBRERfSFRfSU5GT19JRSksICAgICAgICAgICZwQWQtPkNvbW1vbkNmZy5BZGRIVEluZm8sCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZOZXdFeHRDaGFuSWUsCisJCQkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZOZXdFeHRMZW4sCisJCQkJCQkJCSBzaXplb2YoTkVXX0VYVF9DSEFOX0lFKSwgICAgICAgICAgJnBBZC0+Q29tbW9uQ2ZnLk5ld0V4dENoYW5PZmZzZXQsCisJCQkJCQkJCSAgRU5EX09GX0FSR1MpOworCQkJCX0KKwkJCQlGcmFtZUxlbiArPSBUbXBMZW47CisJCQl9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwkJCU1sbWVGcmVlTWVtb3J5KHBBZCwgcE91dEJ1ZmZlcik7CisJCX0KKwl9Cit9CisKK1ZPSUQgQmVhY29uVGltZW91dEF0Sm9pbkFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUIFN0YXR1czsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTWU5DIC0gQmVhY29uVGltZW91dEF0Sm9pbkFjdGlvblxuIikpOworCXBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPSBTWU5DX0lETEU7CisJU3RhdHVzID0gTUxNRV9SRUpfVElNRU9VVDsKKwlNbG1lRW5xdWV1ZShwQWQsIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLCBNVDJfSk9JTl9DT05GLCAyLCAmU3RhdHVzKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlTY2FuIHRpbWVvdXQgcHJvY2VkdXJlLiBiYXNpY2FsbHkgYWRkIGNoYW5uZWwgaW5kZXggYnkgMSBhbmQgcmVzY2FuCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBTY2FuVGltZW91dEFjdGlvbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJcEFkLT5NbG1lQXV4LkNoYW5uZWwgPSBOZXh0Q2hhbm5lbChwQWQsIHBBZC0+TWxtZUF1eC5DaGFubmVsKTsKKworCS8vIE9ubHkgb25lIGNoYW5uZWwgc2Nhbm5lZCBmb3IgQ0lTQ08gYmVhY29uIHJlcXVlc3QKKwlpZiAoKHBBZC0+TWxtZUF1eC5TY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX0FDVElWRSkgfHwKKwkJKHBBZC0+TWxtZUF1eC5TY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX1BBU1NJVkUpIHx8CisJCShwQWQtPk1sbWVBdXguU2NhblR5cGUgPT0gU0NBTl9DSVNDT19OT0lTRSkgfHwKKwkJKHBBZC0+TWxtZUF1eC5TY2FuVHlwZSA9PSBTQ0FOX0NJU0NPX0NIQU5ORUxfTE9BRCkpCisJCXBBZC0+TWxtZUF1eC5DaGFubmVsID0gMDsKKworCS8vIHRoaXMgcm91dGluZSB3aWxsIHN0b3AgaWYgcEFkLT5NbG1lQXV4LkNoYW5uZWwgPT0gMAorCVNjYW5OZXh0Q2hhbm5lbChwQWQpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBJbnZhbGlkU3RhdGVXaGVuU2NhbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUIFN0YXR1czsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJBWU5DIC0gSW52YWxpZFN0YXRlV2hlblNjYW4oc3RhdGU9JWxkKS4gUmVzZXQgU1lOQyBtYWNoaW5lXG4iLCBwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlKSk7CisJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwlTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOworCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9TQ0FOX0NPTkYsIDIsICZTdGF0dXMpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJRGVzY3JpcHRpb246CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworVk9JRCBJbnZhbGlkU3RhdGVXaGVuSm9pbigKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUIFN0YXR1czsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJbnZhbGlkU3RhdGVXaGVuSm9pbihzdGF0ZT0lbGQpLiBSZXNldCBTWU5DIG1hY2hpbmVcbiIsIHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUpKTsKKwlwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlID0gU1lOQ19JRExFOworCVN0YXR1cyA9IE1MTUVfU1RBVEVfTUFDSElORV9SRUpFQ1Q7CisJTWxtZUVucXVldWUocEFkLCBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwgTVQyX0pPSU5fQ09ORiwgMiwgJlN0YXR1cyk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEludmFsaWRTdGF0ZVdoZW5TdGFydCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCwKKwlJTiBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJVVNIT1JUIFN0YXR1czsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJbnZhbGlkU3RhdGVXaGVuU3RhcnQoc3RhdGU9JWxkKS4gUmVzZXQgU1lOQyBtYWNoaW5lXG4iLCBwQWQtPk1sbWUuU3luY01hY2hpbmUuQ3VyclN0YXRlKSk7CisJcEFkLT5NbG1lLlN5bmNNYWNoaW5lLkN1cnJTdGF0ZSA9IFNZTkNfSURMRTsKKwlTdGF0dXMgPSBNTE1FX1NUQVRFX01BQ0hJTkVfUkVKRUNUOworCU1sbWVFbnF1ZXVlKHBBZCwgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsIE1UMl9TVEFSVF9DT05GLCAyLCAmU3RhdHVzKTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIEVucXVldWVQc1BvbGwoCisJSU4gUFJUTVBfQURBUFRFUiBwQWQpCit7CisjaWZkZWYgUkFMSU5LX0FURQorICAgIGlmIChBVEVfT04ocEFkKSkKKyAgICB7CisJCXJldHVybjsKKyAgICB9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisKKwlpZiAocEFkLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZSA9PSBOZGlzODAyXzExUG93ZXJNb2RlTGVnYWN5X1BTUCkKKyAgICAJcEFkLT5Qc1BvbGxGcmFtZS5GQy5Qd3JNZ210ID0gUFdSX1NBVkU7CisJTWluaXBvcnRNTVJlcXVlc3QocEFkLCAwLCAoUFVDSEFSKSZwQWQtPlBzUG9sbEZyYW1lLCBzaXplb2YoUFNQT0xMX0ZSQU1FKSk7Cit9CisKKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KK1ZPSUQgRW5xdWV1ZVByb2JlUmVxdWVzdCgKKwlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlORElTX1NUQVRVUyAgICAgTlN0YXRlOworCVBVQ0hBUiAgICAgICAgICBwT3V0QnVmZmVyOworCVVMT05HICAgICAgICAgICBGcmFtZUxlbiA9IDA7CisJSEVBREVSXzgwMl8xMSAgIEhkcjgwMjExOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiZm9yY2Ugb3V0IGEgUHJvYmVSZXF1ZXN0IC4uLlxuIikpOworCisJTlN0YXRlID0gTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgJnBPdXRCdWZmZXIpOyAgLy9HZXQgYW4gdW51c2VkIG5vbnBhZ2VkIG1lbW9yeQorCWlmIChOU3RhdGUgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwl7CisJCU1ndE1hY0hlYWRlckluaXQocEFkLCAmSGRyODAyMTEsIFNVQlRZUEVfUFJPQkVfUkVRLCAwLCBCUk9BRENBU1RfQUREUiwgQlJPQURDQVNUX0FERFIpOworCisJCS8vIHRoaXMgUHJvYmVSZXF1ZXN0IGV4cGxpY2l0bHkgc3BlY2lmeSBTU0lEIHRvIHJlZHVjZSB1bndhbnRlZCBQcm9iZVJlc3BvbnNlCisJCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAgICAgICAgICAgJkZyYW1lTGVuLAorCQkJCQkJICBzaXplb2YoSEVBREVSXzgwMl8xMSksICAgICAgICAgICZIZHI4MDIxMSwKKwkJCQkJCSAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3NpZEllLAorCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLAorCQkJCQkJICBwQWQtPkNvbW1vbkNmZy5Tc2lkTGVuLAkJICBwQWQtPkNvbW1vbkNmZy5Tc2lkLAorCQkJCQkJICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdXBSYXRlSWUsCisJCQkJCQkgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4sCisJCQkJCQkgIHBBZC0+U3RhQWN0aXZlLlN1cFJhdGVMZW4sICAgICAgcEFkLT5TdGFBY3RpdmUuU3VwUmF0ZSwKKwkJCQkJCSAgRU5EX09GX0FSR1MpOworCQlNaW5pcG9ydE1NUmVxdWVzdChwQWQsIDAsIHBPdXRCdWZmZXIsIEZyYW1lTGVuKTsKKwkJTWxtZUZyZWVNZW1vcnkocEFkLCBwT3V0QnVmZmVyKTsKKwl9CisKK30KKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorI2lmZGVmIERPVDExTl9EUkFGVDMKK1ZPSUQgQnVpbGRFZmZlY3RlZENoYW5uZWxMaXN0KAorCUlOIFBSVE1QX0FEQVBURVIgcEFkKQoreworCVVDSEFSCQlFQ2hhbm5lbFsxMV07CisJVUNIQVIJCWksIGosIGs7CisJVUNIQVIJCVVwcGVyQ2hhbm5lbCA9IDAsIExvd2VyQ2hhbm5lbCA9IDA7CisKKwlSVE1QWmVyb01lbW9yeShFQ2hhbm5lbCwgMTEpOworCWkgPSAwOworCS8vIEZpbmQgdXBwZXIgY2hhbm5lbCBhbmQgbG93ZXIgY2hhbm5lbC4KKwlpZiAocEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPCBwQWQtPkNvbW1vbkNmZy5DaGFubmVsKQorCXsKKwkJVXBwZXJDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2hhbm5lbDsKKwkJTG93ZXJDaGFubmVsID0gcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWw7CisJfQorCWVsc2UgaWYgKHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID4gcEFkLT5Db21tb25DZmcuQ2hhbm5lbCkKKwl7CisJCVVwcGVyQ2hhbm5lbCA9IHBBZC0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsOworCQlMb3dlckNoYW5uZWwgPSBwQWQtPkNvbW1vbkNmZy5DaGFubmVsOworCX0KKwllbHNlCisJeworCQlyZXR1cm47CisJfQorCisJLy8gUmVjb3JkIGNoYW5uZWxzIHRoYXQgaXMgYmVsb3cgbG93ZXIgY2hhbm5lbC4uCisJaWYgKExvd2VyQ2hhbm5lbCA+IDEpCisJeworCQlFQ2hhbm5lbFswXSA9IExvd2VyQ2hhbm5lbCAtIDE7CisJCWkgPSAxOworCQlpZiAoTG93ZXJDaGFubmVsID4gMikKKwkJeworCQkJRUNoYW5uZWxbMV0gPSBMb3dlckNoYW5uZWwgLSAyOworCQkJaSA9IDI7CisJCQlpZiAoTG93ZXJDaGFubmVsID4gMykKKwkJCXsKKwkJCQlFQ2hhbm5lbFsyXSA9IExvd2VyQ2hhbm5lbCAtIDM7CisJCQkJaSA9IDM7CisJCQl9CisJCX0KKwl9CisJLy8gUmVjb3JkIGNoYW5uZWxzIHRoYXQgaXMgYmV0d2VlbiAgbG93ZXIgY2hhbm5lbCBhbmQgdXBwZXIgY2hhbm5lbC4KKwlmb3IgKGsgPSBMb3dlckNoYW5uZWw7ayA8IFVwcGVyQ2hhbm5lbDtrKyspCisJeworCQlFQ2hhbm5lbFtpXSA9IGs7CisJCWkrKzsKKwl9CisJLy8gUmVjb3JkIGNoYW5uZWxzIHRoYXQgaXMgYWJvdmUgdXBwZXIgY2hhbm5lbC4uCisJaWYgKExvd2VyQ2hhbm5lbCA8IDExKQorCXsKKwkJRUNoYW5uZWxbaV0gPSBVcHBlckNoYW5uZWwgKyAxOworCQlpKys7CisJCWlmIChMb3dlckNoYW5uZWwgPCAxMCkKKwkJeworCQkJRUNoYW5uZWxbaV0gPSBMb3dlckNoYW5uZWwgKyAyOworCQkJaSsrOworCQkJaWYgKExvd2VyQ2hhbm5lbCA8IDkpCisJCQl7CisJCQkJRUNoYW5uZWxbaV0gPSBMb3dlckNoYW5uZWwgKyAzOworCQkJCWkrKzsKKwkJCX0KKwkJfQorCX0KKwkvLworCWZvciAoaiA9IDA7aiA8IGk7aisrKQorCXsKKwkJZm9yIChrID0gMDtrIDwgcEFkLT5DaGFubmVsTGlzdE51bTtrKyspCisJCXsKKwkJCWlmIChwQWQtPkNoYW5uZWxMaXN0W2tdLkNoYW5uZWwgPT0gRUNoYW5uZWxbal0pCisJCQl7CisJCQkJcEFkLT5DaGFubmVsTGlzdFtrXS5iRWZmZWN0ZWRDaGFubmVsID0gVFJVRTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIiBFZmZlY3RlZENoYW5uZWwoID0lZClcbiIsIEVDaGFubmVsW2pdKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisjZW5kaWYgLy8gRE9UMTFOX0RSQUZUMyAvLworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCitCT09MRUFOIFNjYW5SdW5uaW5nKAorCQlJTiBQUlRNUF9BREFQVEVSIHBBZCkKK3sKKwlyZXR1cm4gKHBBZC0+TWxtZS5TeW5jTWFjaGluZS5DdXJyU3RhdGUgPT0gU0NBTl9MSVNURU4pID8gVFJVRSA6IEZBTFNFOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS93cGEuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvc3RhL3dwYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZDA4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YS93cGEuYwpAQCAtMCwwICsxLDIwOTkgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisJTW9kdWxlIE5hbWU6CisJd3BhLmMKKworCUFic3RyYWN0OgorCisJUmV2aXNpb24gSGlzdG9yeToKKwlXaG8JCQlXaGVuCQkJV2hhdAorCS0tLS0tLS0tCS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlKYW4JTGVlCQkwMy0wNy0yMgkJSW5pdGlhbAorCVBhdWwgTGluCTAzLTExLTI4CQlNb2RpZnkgZm9yIHN1cHBsaWNhbnQKKyovCisjaW5jbHVkZSAiLi4vcnRfY29uZmlnLmgiCisKKyNkZWZpbmUJCVdQQVJTTklFCTB4ZGQKKyNkZWZpbmUJCVdQQTJSU05JRQkweDMwCisKKy8vZXh0ZXJuIFVDSEFSIEJJVDhbXTsKK1VDSEFSCUNpcGhlcldwYVBza1RraXBbXSA9IHsKKwkJMHhERCwgMHgxNiwJCQkJLy8gUlNOIElFCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsCS8vIG91aQorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIsCS8vIE11bHRpY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBOdW1iZXIgb2YgdW5pY2FzdAorCQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvLyB1bmljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIG51bWJlciBvZiBhdXRoZW50aWNhdGlvbiBtZXRob2QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMgkvLyBhdXRoZW50aWNhdGlvbgorCQl9OworVUNIQVIJQ2lwaGVyV3BhUHNrVGtpcExlbiA9IChzaXplb2YoQ2lwaGVyV3BhUHNrVGtpcCkgLyBzaXplb2YoVUNIQVIpKTsKKworVUNIQVIJQ2lwaGVyV3BhUHNrQWVzW10gPSB7CisJCTB4REQsIDB4MTYsIAkJCS8vIFJTTiBJRQorCQkweDAwLCAweDUwLCAweGYyLCAweDAxLAkvLyBvdWkKKwkJMHgwMSwgMHgwMCwJCQkJLy8gVmVyc2lvbgorCQkweDAwLCAweDUwLCAweGYyLCAweDA0LAkvLyBNdWx0aWNhc3QKKwkJMHgwMSwgMHgwMCwJCQkJLy8gTnVtYmVyIG9mIHVuaWNhc3QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwNCwJLy8gdW5pY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDIJLy8gYXV0aGVudGljYXRpb24KKwkJfTsKK1VDSEFSCUNpcGhlcldwYVBza0Flc0xlbiA9IChzaXplb2YoQ2lwaGVyV3BhUHNrQWVzKSAvIHNpemVvZihVQ0hBUikpOworCitVQ0hBUglDaXBoZXJTdWl0ZUNpc2NvQ0NLTVtdID0geworCQkweERELCAweDE2LAkJCQkvLyBSU04gSUUKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMSwgLy8gb3VpCisJCTB4MDEsIDB4MDAsCQkJCS8vIFZlcnNpb24KKwkJMHgwMCwgMHg0MCwgMHg5NiwgMHgwMSwgLy8gTXVsdGljYXN0CisJCTB4MDEsIDB4MDAsCQkJCS8vIE51bWJlciBvZiB1aWNhc3QKKwkJMHgwMCwgMHg0MCwgMHg5NiwgMHgwMSwgLy8gdW5pY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kCisJCTB4MDAsIDB4NDAsIDB4OTYsIDB4MDAgIC8vIEF1dGhlbnRpY2F0aW9uCisJCX07CitVQ0hBUglDaXBoZXJTdWl0ZUNpc2NvQ0NLTUxlbiA9IChzaXplb2YoQ2lwaGVyU3VpdGVDaXNjb0NDS00pIC8gc2l6ZW9mKFVDSEFSKSk7CisKK1VDSEFSCUNpcGhlclN1aXRlQ2lzY29DQ0tNMjRbXSA9IHsKKwkJMHhERCwgMHgxOCwJCQkJLy8gUlNOIElFCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEsIC8vIG91aQorCQkweDAxLCAweDAwLAkJCQkvLyBWZXJzaW9uCisJCTB4MDAsIDB4NDAsIDB4OTYsIDB4MDEsIC8vIE11bHRpY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBOdW1iZXIgb2YgdWljYXN0CisJCTB4MDAsIDB4NDAsIDB4OTYsIDB4MDEsIC8vIHVuaWNhc3QKKwkJMHgwMSwgMHgwMCwJCQkJLy8gbnVtYmVyIG9mIGF1dGhlbnRpY2F0aW9uIG1ldGhvZAorCQkweDAwLCAweDQwLCAweDk2LCAweDAwLAorCQkweDI4LCAweDAwLy8gQXV0aGVudGljYXRpb24KKwkJfTsKKworVUNIQVIJQ2lwaGVyU3VpdGVDaXNjb0NDS00yNExlbiA9IChzaXplb2YoQ2lwaGVyU3VpdGVDaXNjb0NDS00yNCkgLyBzaXplb2YoVUNIQVIpKTsKKworVUNIQVIJQ2lwaGVyU3VpdGVDQ1hUa2lwW10gPSB7CisJCTB4REQsIDB4MTYsCQkJCS8vIFJTTiBJRQorCQkweDAwLCAweDUwLCAweGYyLCAweDAxLAkvLyBvdWkKKwkJMHgwMSwgMHgwMCwJCQkJLy8gVmVyc2lvbgorCQkweDAwLCAweDUwLCAweGYyLCAweDAyLAkvLyBNdWx0aWNhc3QKKwkJMHgwMSwgMHgwMCwJCQkJLy8gTnVtYmVyIG9mIHVuaWNhc3QKKwkJMHgwMCwgMHg1MCwgMHhmMiwgMHgwMiwJLy8gdW5pY2FzdAorCQkweDAxLCAweDAwLAkJCQkvLyBudW1iZXIgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kCisJCTB4MDAsIDB4NTAsIDB4ZjIsIDB4MDEJLy8gYXV0aGVudGljYXRpb24KKwkJfTsKK1VDSEFSCUNpcGhlclN1aXRlQ0NYVGtpcExlbiA9IChzaXplb2YoQ2lwaGVyU3VpdGVDQ1hUa2lwKSAvIHNpemVvZihVQ0hBUikpOworCitVQ0hBUglDQ1hfTExDX0hEUltdID0gezB4QUEsIDB4QUEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4OTYsIDB4MDAsIDB4MDJ9OworVUNIQVIJTExDX05PUk1BTFtdID0gezB4QUEsIDB4QUEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9OworCitVQ0hBUglFQVBPTF9GUkFNRVtdID0gezB4ODgsIDB4OEV9OworCitCT09MRUFOIENoZWNrUlNOSUUoCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIFBVQ0hBUiAgICAgICAgICBwRGF0YSwKKwlJTiAgVUNIQVIgICAgICAgICAgIERhdGFMZW4sCisJT1VUCVVDSEFSCQkJKk9mZnNldCk7CisKK3ZvaWQgaW5jX2J5dGVfYXJyYXkoVUNIQVIgKmNvdW50ZXIsIGludCBsZW4pOworCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJQ2xhc3NpZnkgV1BBIEVBUCBtZXNzYWdlIHR5cGUKKworCUFyZ3VtZW50czoKKwkJRUFQVHlwZQkJVmFsdWUgb2YgRUFQIG1lc3NhZ2UgdHlwZQorCQlNc2dUeXBlCQlJbnRlcm5hbCBNZXNzYWdlIGRlZmluaXRpb24gZm9yIE1MTUUgc3RhdGUgbWFjaGluZQorCisJUmV0dXJuIFZhbHVlOgorCQlUUlVFCQlGb3VuZCBhcHByb3ByaWF0ZSBtZXNzYWdlIHR5cGUKKwkJRkFMU0UJCU5vIGFwcHJvcHJpYXRlIG1lc3NhZ2UgdHlwZQorCisJSVJRTCA9IERJU1BBVENIX0xFVkVMCisKKwlOb3RlOgorCQlBbGwgdGhlc2UgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIHdwYS5oCisJCUZvciBzdXBwbGljYW50LCB0aGVyZSBpcyBvbmx5IEVBUE9MIEtleSBtZXNzYWdlIGF2YWxpYWJsZQorCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTglXcGFNc2dUeXBlU3Vic3QoCisJSU4JVUNIQVIJRUFQVHlwZSwKKwlPVVQJSU5UCQkqTXNnVHlwZSkKK3sKKwlzd2l0Y2ggKEVBUFR5cGUpCisJeworCQljYXNlIEVBUFBhY2tldDoKKwkJCSpNc2dUeXBlID0gTVQyX0VBUFBhY2tldDsKKwkJCWJyZWFrOworCQljYXNlIEVBUE9MU3RhcnQ6CisJCQkqTXNnVHlwZSA9IE1UMl9FQVBPTFN0YXJ0OworCQkJYnJlYWs7CisJCWNhc2UgRUFQT0xMb2dvZmY6CisJCQkqTXNnVHlwZSA9IE1UMl9FQVBPTExvZ29mZjsKKwkJCWJyZWFrOworCQljYXNlIEVBUE9MS2V5OgorCQkJKk1zZ1R5cGUgPSBNVDJfRUFQT0xLZXk7CisJCQlicmVhazsKKwkJY2FzZSBFQVBPTEFTRkFsZXJ0OgorCQkJKk1zZ1R5cGUgPSBNVDJfRUFQT0xBU0ZBbGVydDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIEZBTFNFOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCURlc2NyaXB0aW9uOgorCQlhc3NvY2lhdGlvbglzdGF0ZSBtYWNoaW5lIGluaXQsCWluY2x1ZGluZyBzdGF0ZQl0cmFuc2l0aW9uIGFuZCB0aW1lciBpbml0CisJUGFyYW1ldGVyczoKKwkJUyAtCXBvaW50ZXIJdG8gdGhlIGFzc29jaWF0aW9uIHN0YXRlIG1hY2hpbmUKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCitWT0lEIFdwYVBza1N0YXRlTWFjaGluZUluaXQoCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JU1RBVEVfTUFDSElORSAqUywKKwlPVVQJU1RBVEVfTUFDSElORV9GVU5DIFRyYW5zW10pCit7CisJU3RhdGVNYWNoaW5lSW5pdChTLAlUcmFucywgTUFYX1dQQV9QU0tfU1RBVEUsIE1BWF9XUEFfUFNLX01TRywgKFNUQVRFX01BQ0hJTkVfRlVOQylEcm9wLCBXUEFfUFNLX0lETEUsIFdQQV9NQUNISU5FX0JBU0UpOworCVN0YXRlTWFjaGluZVNldEFjdGlvbihTLCBXUEFfUFNLX0lETEUsIE1UMl9FQVBPTEtleSwgKFNUQVRFX01BQ0hJTkVfRlVOQylXcGFFQVBPTEtleUFjdGlvbik7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwlEZXNjcmlwdGlvbjoKKwkJVGhpcyBpcwlzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9uLgorCQlXaGVuIHJlY2VpdmluZyBFQVBPTCBwYWNrZXRzIHdoaWNoIGlzICBmb3IgODAyLjF4IGtleSBtYW5hZ2VtZW50LgorCQlVc2UJYm90aCBpbglXUEEsIGFuZCBXUEFQU0sJY2FzZS4KKwkJSW4gdGhpcwlmdW5jdGlvbiwgZnVydGhlciBkaXNwYXRjaCB0byBkaWZmZXJlbnQJZnVuY3Rpb25zIGFjY29yZGluZwl0byB0aGUgcmVjZWl2ZWQJcGFja2V0LgkgMyBjYXRlZ29yaWVzIGFyZSA6CisJCSAgMS4gIG5vcm1hbCA0LXdheSBwYWlyd2lzZWtleSBhbmQgMi13YXkgZ3JvdXBrZXkgaGFuZHNoYWtlCisJCSAgMi4gIE1JQyBlcnJvcgkoQ291bnRlcm1lYXN1cmVzIGF0dGFjaykgIHJlcG9ydCBwYWNrZXQJZnJvbSBTVEEuCisJCSAgMy4gIFJlcXVlc3QgZm9yIHBhaXJ3aXNlL2dyb3VwIGtleSB1cGRhdGUJZnJvbSBTVEEKKwlSZXR1cm46CisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFdwYUVBUE9MS2V5QWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1MTUVfUVVFVUVfRUxFTQkqRWxlbSkKKworeworCUlOVCAgICAgICAgICAgICBNc2dUeXBlID0gRUFQT0xfTVNHX0lOVkFMSUQ7CisJUEtFWV9ERVNDUklQVEVSIHBLZXlEZXNjOworCVBIRUFERVJfODAyXzExICBwSGVhZGVyOyAvL3JlZAorCVVDSEFSICAgICAgICAgICBaZXJvUmVwbGF5W0xFTl9LRVlfREVTQ19SRVBMQVldOworCVVDSEFSIEVhcG9sVnI7CisJS0VZX0lORk8JCXBlZXJLZXlJbmZvOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiLS0tLS0+IFdwYUVBUE9MS2V5QWN0aW9uXG4iKSk7CisKKwkvLyBHZXQgODAyLjExIGhlYWRlciBmaXJzdAorCXBIZWFkZXIgPSAoUEhFQURFUl84MDJfMTEpIEVsZW0tPk1zZzsKKworCS8vIEdldCBFQVBvTC1LZXkgRGVzY3JpcHRvcgorCXBLZXlEZXNjID0gKFBLRVlfREVTQ1JJUFRFUikgJkVsZW0tPk1zZ1soTEVOR1RIXzgwMl8xMSArIExFTkdUSF84MDJfMV9IICsgTEVOR1RIX0VBUE9MX0gpXTsKKworCU5kaXNaZXJvTWVtb3J5KChQVUNIQVIpJnBlZXJLZXlJbmZvLCBzaXplb2YocGVlcktleUluZm8pKTsKKwlOZGlzTW92ZU1lbW9yeSgoUFVDSEFSKSZwZWVyS2V5SW5mbywgKFBVQ0hBUikmcEtleURlc2MtPktleUluZm8sIHNpemVvZihLRVlfSU5GTykpOworCisJKigoVVNIT1JUICopJnBlZXJLZXlJbmZvKSA9IGNwdTJsZTE2KCooKFVTSE9SVCAqKSZwZWVyS2V5SW5mbykpOworCisKKwkvLyAxLiBDaGVjayBFQVBPTCBmcmFtZSB2ZXJzaW9uIGFuZCB0eXBlCisJRWFwb2xWcgk9IChVQ0hBUikgRWxlbS0+TXNnW0xFTkdUSF84MDJfMTErTEVOR1RIXzgwMl8xX0hdOworCisgICAgaWYgKCgoRWFwb2xWciAhPSBFQVBPTF9WRVIpICYmIChFYXBvbFZyICE9IEVBUE9MX1ZFUjIpKSB8fCAoKHBLZXlEZXNjLT5UeXBlICE9IFdQQTFfS0VZX0RFU0MpICYmIChwS2V5RGVzYy0+VHlwZSAhPSBXUEEyX0tFWV9ERVNDKSkpCisJeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJLZXkgZGVzY3JpcHRlciBkb2VzIG5vdCBtYXRjaCB3aXRoIFdQQSBydWxlXG4iKSk7CisJCQlyZXR1cm47CisJfQorCisJLy8gRmlyc3QgdmFsaWRhdGUgcmVwbGF5IGNvdW50ZXIsIG9ubHkgYWNjZXB0IG1lc3NhZ2Ugd2l0aCBsYXJnZXIgcmVwbGF5IGNvdW50ZXIKKwkvLyBMZXQgZXF1YWwgcGFzcywgc29tZSBBUCBzdGFydCB3aXRoIGFsbCB6ZXJvIHJlcGxheSBjb3VudGVyCisJTmRpc1plcm9NZW1vcnkoWmVyb1JlcGxheSwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisKKwlpZigoUlRNUENvbXBhcmVNZW1vcnkocEtleURlc2MtPlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpICE9IDEpICYmCisJCShSVE1QQ29tcGFyZU1lbW9yeShwS2V5RGVzYy0+UmVwbGF5Q291bnRlciwgWmVyb1JlcGxheSwgTEVOX0tFWV9ERVNDX1JFUExBWSkgIT0gMCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCIgICBSZXBsYXlDb3VudGVyIG5vdCBtYXRjaCAgIFxuIikpOworCQlyZXR1cm47CisJfQorCisJLy8gUHJvY2VzcyBXUEEyUFNLIGZyYW1lCisJaWYocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKKwl7CisJCWlmKChwZWVyS2V5SW5mby5LZXlUeXBlID09IFBBSVJXSVNFS0VZKSAmJgorCQkJKHBlZXJLZXlJbmZvLkVLRF9ETCA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleUFjayA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleU1pYyA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLlNlY3VyZSA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLkVycm9yID09IDApICYmCisJCQkocGVlcktleUluZm8uUmVxdWVzdCA9PSAwKSkKKwkJeworCQkJTXNnVHlwZSA9IEVBUE9MX1BBSVJfTVNHXzE7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZWNlaXZlIEVBUE9MIEtleSBQYWlyd2lzZSBNZXNzYWdlIDFcbiIpKTsKKwkJfSBlbHNlIGlmKChwZWVyS2V5SW5mby5LZXlUeXBlID09IFBBSVJXSVNFS0VZKSAmJgorCQkJKHBlZXJLZXlJbmZvLkVLRF9ETCAgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlBY2sgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlNaWMgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5TZWN1cmUgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5FcnJvciA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLlJlcXVlc3QgPT0gMCkpCisJCXsKKwkJCU1zZ1R5cGUgPSBFQVBPTF9QQUlSX01TR18zOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmVjZWl2ZSBFQVBPTCBLZXkgUGFpcndpc2UgTWVzc2FnZSAzXG4iKSk7CisJCX0gZWxzZSBpZigocGVlcktleUluZm8uS2V5VHlwZSA9PSBHUk9VUEtFWSkgJiYKKwkJCShwZWVyS2V5SW5mby5FS0RfREwgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlBY2sgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlNaWMgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5TZWN1cmUgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5FcnJvciA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLlJlcXVlc3QgPT0gMCkpCisJCXsKKwkJCU1zZ1R5cGUgPSBFQVBPTF9HUk9VUF9NU0dfMTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJlY2VpdmUgRUFQT0wgS2V5IEdyb3VwIE1lc3NhZ2UgMVxuIikpOworCQl9CisKKwkJLy8gV2Ugd2lsbCBhc3N1bWUgbGluayBpcyB1cCAoYXNzb2Mgc3VjZWVzcyBhbmQgcG9ydCBub3Qgc2VjdXJlZCkuCisJCS8vIEFsbCBzdGF0ZSBoYXMgdG8gYmUgYWJsZSB0byBwcm9jZXNzIG1lc3NhZ2UgZnJvbSBwcmV2aW91cyBzdGF0ZQorCQlzd2l0Y2gocEFkLT5TdGFDZmcuV3BhU3RhdGUpCisJCXsKKwkJY2FzZSBTU19TVEFSVDoKKwkJCWlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSkKKwkJCXsKKwkJCQlXcGEyUGFpck1zZzFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1dBSVRfTVNHXzM7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFNTX1dBSVRfTVNHXzM6CisJCQlpZihNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzEpCisJCQl7CisJCQkJV3BhMlBhaXJNc2cxQWN0aW9uKHBBZCwgRWxlbSk7CisJCQkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19XQUlUX01TR18zOworCQkJfQorCQkJZWxzZSBpZihNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzMpCisJCQl7CisJCQkJV3BhMlBhaXJNc2czQWN0aW9uKHBBZCwgRWxlbSk7CisJCQkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19XQUlUX0dST1VQOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBTU19XQUlUX0dST1VQOgkJLy8gV2hlbiBkb2luZyBncm91cCBrZXkgZXhjaGFuZ2UKKwkJY2FzZSBTU19GSU5JU0g6CQkJLy8gVGhpcyBoYXBwZW5lZCB3aGVuIHVwZGF0ZSBncm91cCBrZXkKKwkJCWlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMSkKKwkJCXsKKwkJCSAgICAvLyBSZXNldCBwb3J0IHNlY3VyZWQgdmFyaWFibGUKKwkJCQlwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwkJCQlXcGEyUGFpck1zZzFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1dBSVRfTVNHXzM7CisJCQl9CisJCQllbHNlIGlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykKKwkJCXsKKwkJCSAgICAvLyBSZXNldCBwb3J0IHNlY3VyZWQgdmFyaWFibGUKKwkJCQlwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwkJCQlXcGEyUGFpck1zZzNBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1dBSVRfR1JPVVA7CisJCQl9CisJCQllbHNlIGlmKE1zZ1R5cGUgPT0gRUFQT0xfR1JPVVBfTVNHXzEpCisJCQl7CisJCQkJV3BhR3JvdXBNc2cxQWN0aW9uKHBBZCwgRWxlbSk7CisJCQkJcEFkLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19GSU5JU0g7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisJLy8gUHJvY2VzcyBXUEFQU0sgRnJhbWUKKwkvLyBDbGFzc2lmeSBtZXNzYWdlIFR5cGUsIGVpdGhlciBwYWlyd2lzZSBtZXNzYWdlIDEsIDMsIG9yIGdyb3VwIG1lc3NhZ2UgMSBmb3Igc3VwcGxpY2FudAorCWVsc2UgaWYocEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKQorCXsKKwkJaWYoKHBlZXJLZXlJbmZvLktleVR5cGUgPT0gUEFJUldJU0VLRVkpICYmCisJCQkocGVlcktleUluZm8uS2V5SW5kZXggPT0gMCkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlBY2sgPT0gMSkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlNaWMgPT0gMCkgJiYKKwkJCShwZWVyS2V5SW5mby5TZWN1cmUgPT0gMCkgJiYKKwkJCShwZWVyS2V5SW5mby5FcnJvciA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLlJlcXVlc3QgPT0gMCkpCisJCXsKKwkJCU1zZ1R5cGUgPSBFQVBPTF9QQUlSX01TR18xOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUmVjZWl2ZSBFQVBPTCBLZXkgUGFpcndpc2UgTWVzc2FnZSAxXG4iKSk7CisJCX0KKwkJZWxzZSBpZigocGVlcktleUluZm8uS2V5VHlwZSA9PSBQQUlSV0lTRUtFWSkgJiYKKwkJCShwZWVyS2V5SW5mby5LZXlJbmRleCA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleUFjayA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleU1pYyA9PSAxKSAmJgorCQkJKHBlZXJLZXlJbmZvLlNlY3VyZSA9PSAwKSAmJgorCQkJKHBlZXJLZXlJbmZvLkVycm9yID09IDApICYmCisJCQkocGVlcktleUluZm8uUmVxdWVzdCA9PSAwKSkKKwkJeworCQkJTXNnVHlwZSA9IEVBUE9MX1BBSVJfTVNHXzM7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZWNlaXZlIEVBUE9MIEtleSBQYWlyd2lzZSBNZXNzYWdlIDNcbiIpKTsKKwkJfQorCQllbHNlIGlmKChwZWVyS2V5SW5mby5LZXlUeXBlID09IEdST1VQS0VZKSAmJgorCQkJKHBlZXJLZXlJbmZvLktleUluZGV4ICE9IDApICYmCisJCQkocGVlcktleUluZm8uS2V5QWNrID09IDEpICYmCisJCQkocGVlcktleUluZm8uS2V5TWljID09IDEpICYmCisJCQkocGVlcktleUluZm8uU2VjdXJlID09IDEpICYmCisJCQkocGVlcktleUluZm8uRXJyb3IgPT0gMCkgJiYKKwkJCShwZWVyS2V5SW5mby5SZXF1ZXN0ID09IDApKQorCQl7CisJCQlNc2dUeXBlID0gRUFQT0xfR1JPVVBfTVNHXzE7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJSZWNlaXZlIEVBUE9MIEtleSBHcm91cCBNZXNzYWdlIDFcbiIpKTsKKwkJfQorCisJCS8vIFdlIHdpbGwgYXNzdW1lIGxpbmsgaXMgdXAgKGFzc29jIHN1Y2Vlc3MgYW5kIHBvcnQgbm90IHNlY3VyZWQpLgorCQkvLyBBbGwgc3RhdGUgaGFzIHRvIGJlIGFibGUgdG8gcHJvY2VzcyBtZXNzYWdlIGZyb20gcHJldmlvdXMgc3RhdGUKKwkJc3dpdGNoKHBBZC0+U3RhQ2ZnLldwYVN0YXRlKQorCQl7CisJCWNhc2UgU1NfU1RBUlQ6CisJCQlpZihNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzEpCisJCQl7CisJCQkJV3BhUGFpck1zZzFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1dBSVRfTVNHXzM7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIFNTX1dBSVRfTVNHXzM6CisJCQlpZihNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzEpCisJCQl7CisJCQkJV3BhUGFpck1zZzFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1dBSVRfTVNHXzM7CisJCQl9CisJCQllbHNlIGlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykKKwkJCXsKKwkJCQlXcGFQYWlyTXNnM0FjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9HUk9VUDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgU1NfV0FJVF9HUk9VUDoJCS8vIFdoZW4gZG9pbmcgZ3JvdXAga2V5IGV4Y2hhbmdlCisJCWNhc2UgU1NfRklOSVNIOgkJCS8vIFRoaXMgaGFwcGVuZWQgd2hlbiB1cGRhdGUgZ3JvdXAga2V5CisJCQlpZihNc2dUeXBlID09IEVBUE9MX1BBSVJfTVNHXzEpCisJCQl7CisJCQkJV3BhUGFpck1zZzFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX1dBSVRfTVNHXzM7CisJCQkJLy8gUmVzZXQgcG9ydCBzZWN1cmVkIHZhcmlhYmxlCisJCQkJcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQ7CisJCQl9CisJCQllbHNlIGlmKE1zZ1R5cGUgPT0gRUFQT0xfUEFJUl9NU0dfMykKKwkJCXsKKwkJCQlXcGFQYWlyTXNnM0FjdGlvbihwQWQsIEVsZW0pOworCQkJCXBBZC0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfV0FJVF9HUk9VUDsKKwkJCQkvLyBSZXNldCBwb3J0IHNlY3VyZWQgdmFyaWFibGUKKwkJCQlwQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwkJCX0KKwkJCWVsc2UgaWYoTXNnVHlwZSA9PSBFQVBPTF9HUk9VUF9NU0dfMSkKKwkJCXsKKwkJCQlXcGFHcm91cE1zZzFBY3Rpb24ocEFkLCBFbGVtKTsKKwkJCQlwQWQtPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX0ZJTklTSDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjwtLS0tLSBXcGFFQVBPTEtleUFjdGlvblxuIikpOworfQorCisvKgorCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJUm91dGluZSBEZXNjcmlwdGlvbjoKKwkJUHJvY2VzcyBQYWlyd2lzZSBrZXkgNC13YXkgaGFuZHNoYWtpbmcKKworCUFyZ3VtZW50czoKKwkJcEFkCVBvaW50ZXIJdG8gb3VyIGFkYXB0ZXIKKwkJRWxlbQkJTWVzc2FnZSBib2R5CisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVdwYVBhaXJNc2cxQWN0aW9uKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBNTE1FX1FVRVVFX0VMRU0gKkVsZW0pCit7CisJUEhFQURFUl84MDJfMTEgICAgICBwSGVhZGVyOworCVVDSEFSCQkJCSptcG9vbCwgKlBUSywgKmRpZ2VzdDsKKwlQVUNIQVIgICAgICAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCVVDSEFSICAgICAgICAgICAgICAgSGVhZGVyODAyXzNbMTRdOworCVVMT05HICAgICAgICAgICAgICAgRnJhbWVMZW4gPSAwOworCVBFQVBPTF9QQUNLRVQgICAgICAgcE1zZzE7CisJRUFQT0xfUEFDS0VUICAgICAgICBQYWNrZXQ7CisJVUNIQVIgICAgICAgICAgICAgICBNaWNbMTZdOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV3BhUGFpck1zZzFBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwkvLyBhbGxvY2F0ZSBtZW1vcnkgcG9vbAorCW9zX2FsbG9jX21lbShwQWQsIChQVUNIQVIgKikmbXBvb2wsIDI1Nik7CisKKwlpZiAobXBvb2wgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLy8gUFRLIExlbiA9IDgwLgorCVBUSyA9IChVQ0hBUiAqKSBST1VORF9VUChtcG9vbCwgNCk7CisJLy8gZGlnZXN0IExlbiA9IDgwLgorCWRpZ2VzdCA9IChVQ0hBUiAqKSBST1VORF9VUChQVEsgKyA4MCwgNCk7CisKKwlwSGVhZGVyID0gKFBIRUFERVJfODAyXzExKSBFbGVtLT5Nc2c7CisKKwkvLyBQcm9jZXNzIG1lc3NhZ2UgMSBmcm9tIGF1dGhlbnRpY2F0b3IKKwlwTXNnMSA9IChQRUFQT0xfUEFDS0VUKSAmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSF07CisKKwkvLyAxLiBTYXZlIFJlcGxheSBjb3VudGVyLCBpdCB3aWxsIHVzZSB0byB2ZXJpZnkgbWVzc2FnZSAzIGFuZCBjb25zdHJ1Y3QgbWVzc2FnZSAyCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgcE1zZzEtPktleURlc2MuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisKKwkvLyAyLiBTYXZlIEFOb25jZQorCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLkFOb25jZSwgcE1zZzEtPktleURlc2MuS2V5Tm9uY2UsIExFTl9LRVlfREVTQ19OT05DRSk7CisKKwkvLyBHZW5lcmF0ZSByYW5kb20gU05vbmNlCisJR2VuUmFuZG9tKHBBZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkLT5TdGFDZmcuU05vbmNlKTsKKworCS8vIENhbGMgUFRLKEFOb25jZSwgU05vbmNlKQorCVdwYUNvdW50UFRLKHBBZCwKKwkJcEFkLT5TdGFDZmcuUE1LLAorCQlwQWQtPlN0YUNmZy5BTm9uY2UsCisJCXBBZC0+Q29tbW9uQ2ZnLkJzc2lkLAorCQlwQWQtPlN0YUNmZy5TTm9uY2UsCisJCXBBZC0+Q3VycmVudEFkZHJlc3MsCisJCVBUSywKKwkJTEVOX1BUSyk7CisKKwkvLyBTYXZlIGtleSB0byBQVEsgZW50cnkKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5QVEssIFBUSywgTEVOX1BUSyk7CisKKwkvLyBpbml0IDgwMi4zIGhlYWRlciBhbmQgRmlsbCBQYWNrZXQKKwlNQUtFXzgwMl8zX0hFQURFUihIZWFkZXI4MDJfMywgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIEVBUE9MKTsKKworCS8vIFplcm8gTWVzc2FnZSAyIGJvZHkKKwlOZGlzWmVyb01lbW9yeSgmUGFja2V0LCBzaXplb2YoUGFja2V0KSk7CisJUGFja2V0LlByb1Zlcgk9IEVBUE9MX1ZFUjsKKwlQYWNrZXQuUHJvVHlwZQk9IEVBUE9MS2V5OworCS8vCisJLy8gTWVzc2FnZSAyIGFzICBFQVBPTC1LZXkoMCwxLDAsMCwwLFAsMCxTTm9uY2UsTUlDLFJTTiBJRSkKKwkvLworCVBhY2tldC5LZXlEZXNjLlR5cGUgPSBXUEExX0tFWV9ERVNDOworCS8vIDEuIEtleSBkZXNjcmlwdG9yIHZlcnNpb24gYW5kIGFwcHJvcHJpYXRlIFJTTiBJRQorCWlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9IDI7CisJfQorCWVsc2UJICAvLyBUS0lQCisJeworCQlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSAxOworCX0KKworCS8vIGZpbGwgaW4gRGF0YSBNYXRlcmlhbCBhbmQgaXRzIGxlbmd0aAorCVBhY2tldC5LZXlEZXNjLktleURhdGFbMF0gPSBJRV9XUEE7CisJUGFja2V0LktleURlc2MuS2V5RGF0YVsxXSA9IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbjsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhTGVuWzFdID0gcEFkLT5TdGFDZmcuUlNOSUVfTGVuICsgMjsKKwlOZGlzTW92ZU1lbW9yeSgmUGFja2V0LktleURlc2MuS2V5RGF0YVsyXSwgcEFkLT5TdGFDZmcuUlNOX0lFLCBwQWQtPlN0YUNmZy5SU05JRV9MZW4pOworCisJLy8gVXBkYXRlIHBhY2tldCBsZW5ndGggYWZ0ZXIgZGVjaWRlIEtleSBkYXRhIHBheWxvYWQKKwlQYWNrZXQuQm9keV9MZW5bMV0gID0gc2l6ZW9mKEtFWV9ERVNDUklQVEVSKSAtIE1BWF9MRU5fT0ZfUlNOSUUgKyBQYWNrZXQuS2V5RGVzYy5LZXlEYXRhTGVuWzFdOworCisJLy8gVXBkYXRlIEtleSBsZW5ndGgKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMF0gPSBwTXNnMS0+S2V5RGVzYy5LZXlMZW5ndGhbMF07CisJUGFja2V0LktleURlc2MuS2V5TGVuZ3RoWzFdID0gcE1zZzEtPktleURlc2MuS2V5TGVuZ3RoWzFdOworCS8vIDIuIEtleSBUeXBlIFBlZXJLZXkKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleVR5cGUgPSBQQUlSV0lTRUtFWTsKKworCS8vIDMuIEtleU1pYyBmaWVsZCBwcmVzZW50ZWQKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleU1pYyAgPSAxOworCisJLy9Db252ZXJ0IHRvIGxpdHRsZS1lbmRpYW4gZm9ybWF0LgorCSooKFVTSE9SVCAqKSZQYWNrZXQuS2V5RGVzYy5LZXlJbmZvKSA9IGNwdTJsZTE2KCooKFVTSE9SVCAqKSZQYWNrZXQuS2V5RGVzYy5LZXlJbmZvKSk7CisKKworCS8vIDQuIEZpbGwgU05vbmNlCisJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuS2V5Tm9uY2UsIHBBZC0+U3RhQ2ZnLlNOb25jZSwgTEVOX0tFWV9ERVNDX05PTkNFKTsKKworCS8vIDUuIEtleSBSZXBsYXkgQ291bnQKKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5SZXBsYXlDb3VudGVyLCBwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIFNlbmQgRUFQT0woMCwgMSwgMCwgMCwgMCwgUCwgMCwgU05vbmNlLCBNSUMsIFJTTl9JRSkKKwkvLyBPdXQgYnVmZmVyIGZvciB0cmFuc21pdHRpbmcgbWVzc2FnZSAyCisJTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgKFBVQ0hBUiAqKSZwT3V0QnVmZmVyKTsgIC8vIGFsbG9jYXRlIG1lbW9yeQorCWlmKHBPdXRCdWZmZXIgPT0gTlVMTCkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgbXBvb2wpOworCQlyZXR1cm47CisJfQorCS8vIFByZXBhcmUgRUFQT0wgZnJhbWUgZm9yIE1JQyBjYWxjdWxhdGlvbgorCS8vIEJlIGNhcmVmdWwsIG9ubHkgRUFQT0wgZnJhbWUgaXMgY291bnRlZCBmb3IgTUlDIGNhbGN1bGF0aW9uCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICZGcmFtZUxlbiwKKwkJUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgICAgJlBhY2tldCwKKwkJRU5EX09GX0FSR1MpOworCisJLy8gNi4gUHJlcGFyZSBhbmQgRmlsbCBNSUMgdmFsdWUKKwlOZGlzWmVyb01lbW9yeShNaWMsIHNpemVvZihNaWMpKTsKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJewkvLyBBRVMKKworCQlITUFDX1NIQTEocE91dEJ1ZmZlciwgRnJhbWVMZW4sIFBUSywgTEVOX0VBUF9NSUNLLCBkaWdlc3QpOworCQlOZGlzTW92ZU1lbW9yeShNaWMsIGRpZ2VzdCwgTEVOX0tFWV9ERVNDX01JQyk7CisJfQorCWVsc2UKKwl7CS8vIFRLSVAKKwkJaG1hY19tZDUoUFRLLCAgTEVOX0VBUF9NSUNLLCBwT3V0QnVmZmVyLCBGcmFtZUxlbiwgTWljKTsKKwl9CisJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuS2V5TWljLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisJLy9oZXhfZHVtcCgiTUlDIiwgTWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworCQlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgCSZGcmFtZUxlbiwKKwkJCSAgCQkJTEVOR1RIXzgwMl8zLCAgICAgCQkJJkhlYWRlcjgwMl8zLAorCQkJCQkJUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgICAgJlBhY2tldCwKKwkJCQkJCUVORF9PRl9BUkdTKTsKKworCisJLy8gNS4gQ29weSBmcmFtZSB0byBUeCByaW5nIGFuZCBzZW5kIE1zZyAyIHRvIGF1dGhlbnRpY2F0b3IKKwlSVE1QVG9XaXJlbGVzc1N0YShwQWQsIEhlYWRlcjgwMl8zLCBMRU5HVEhfODAyXzMsIChQVUNIQVIpJlBhY2tldCwgUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgVFJVRSk7CisKKwlNbG1lRnJlZU1lbW9yeShwQWQsIChQVUNIQVIpcE91dEJ1ZmZlcik7CisJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldwYVBhaXJNc2cxQWN0aW9uIDwtLS0tLVxuIikpOworfQorCitWT0lEIFdwYTJQYWlyTXNnMUFjdGlvbigKKwlJTiAgUFJUTVBfQURBUFRFUiAgIHBBZCwKKwlJTiAgTUxNRV9RVUVVRV9FTEVNICpFbGVtKQoreworCVBIRUFERVJfODAyXzExICAgICAgcEhlYWRlcjsKKwlVQ0hBUgkJCQkqbXBvb2wsICpQVEssICpkaWdlc3Q7CisJUFVDSEFSICAgICAgICAgICAgICBwT3V0QnVmZmVyID0gTlVMTDsKKwlVQ0hBUiAgICAgICAgICAgICAgIEhlYWRlcjgwMl8zWzE0XTsKKwlVTE9ORyAgICAgICAgICAgICAgIEZyYW1lTGVuID0gMDsKKwlQRUFQT0xfUEFDS0VUICAgICAgIHBNc2cxOworCUVBUE9MX1BBQ0tFVCAgICAgICAgUGFja2V0OworCVVDSEFSICAgICAgICAgICAgICAgTWljWzE2XTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIldwYTJQYWlyTXNnMUFjdGlvbiAtLS0tLT5cbiIpKTsKKworCS8vIGFsbG9jYXRlIG1lbW9yeSBwb29sCisJb3NfYWxsb2NfbWVtKHBBZCwgKFBVQ0hBUiAqKSZtcG9vbCwgMjU2KTsKKworCWlmIChtcG9vbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvLyBQVEsgTGVuID0gODAuCisJUFRLID0gKFVDSEFSICopIFJPVU5EX1VQKG1wb29sLCA0KTsKKwkvLyBkaWdlc3QgTGVuID0gODAuCisJZGlnZXN0ID0gKFVDSEFSICopIFJPVU5EX1VQKFBUSyArIDgwLCA0KTsKKworCXBIZWFkZXIgPSAoUEhFQURFUl84MDJfMTEpIEVsZW0tPk1zZzsKKworCS8vIFByb2Nlc3MgbWVzc2FnZSAxIGZyb20gYXV0aGVudGljYXRvcgorCQlwTXNnMSA9IChQRUFQT0xfUEFDS0VUKQkmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSF07CisKKwkvLyAxLiBTYXZlIFJlcGxheSBjb3VudGVyLCBpdCB3aWxsIHVzZSB0byB2ZXJpZnkgbWVzc2FnZSAzIGFuZCBjb25zdHJ1Y3QgbWVzc2FnZSAyCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgcE1zZzEtPktleURlc2MuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisKKwkvLyAyLiBTYXZlIEFOb25jZQorCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLkFOb25jZSwgcE1zZzEtPktleURlc2MuS2V5Tm9uY2UsIExFTl9LRVlfREVTQ19OT05DRSk7CisKKwkvLyBHZW5lcmF0ZSByYW5kb20gU05vbmNlCisJR2VuUmFuZG9tKHBBZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgcEFkLT5TdGFDZmcuU05vbmNlKTsKKworCWlmKHBNc2cxLT5LZXlEZXNjLktleURhdGFMZW5bMV0gPiAwICkKKwl7CisJCS8vIGNhY2hlZCBQTUtJRAorCX0KKworCS8vIENhbGMgUFRLKEFOb25jZSwgU05vbmNlKQorCVdwYUNvdW50UFRLKHBBZCwKKwkJcEFkLT5TdGFDZmcuUE1LLAorCQlwQWQtPlN0YUNmZy5BTm9uY2UsCisJCXBBZC0+Q29tbW9uQ2ZnLkJzc2lkLAorCQlwQWQtPlN0YUNmZy5TTm9uY2UsCisJCXBBZC0+Q3VycmVudEFkZHJlc3MsCisJCVBUSywKKwkJTEVOX1BUSyk7CisKKwkvLyBTYXZlIGtleSB0byBQVEsgZW50cnkKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlN0YUNmZy5QVEssIFBUSywgTEVOX1BUSyk7CisKKwkvLyBpbml0IDgwMi4zIGhlYWRlciBhbmQgRmlsbCBQYWNrZXQKKwlNQUtFXzgwMl8zX0hFQURFUihIZWFkZXI4MDJfMywgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIEVBUE9MKTsKKworCS8vIFplcm8gbWVzc2FnZSAyIGJvZHkKKwlOZGlzWmVyb01lbW9yeSgmUGFja2V0LCBzaXplb2YoUGFja2V0KSk7CisJUGFja2V0LlByb1Zlcgk9IEVBUE9MX1ZFUjsKKwlQYWNrZXQuUHJvVHlwZQk9IEVBUE9MS2V5OworCS8vCisJLy8gTWVzc2FnZSAyIGFzICBFQVBPTC1LZXkoMCwxLDAsMCwwLFAsMCxTTm9uY2UsTUlDLFJTTiBJRSkKKwkvLworCVBhY2tldC5LZXlEZXNjLlR5cGUgPSBXUEEyX0tFWV9ERVNDOworCisJLy8gMS4gS2V5IGRlc2NyaXB0b3IgdmVyc2lvbiBhbmQgYXBwcm9wcmlhdGUgUlNOIElFCisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSAyOworCX0KKwllbHNlCSAgLy8gVEtJUAorCXsKKwkJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlEZXNjVmVyID0gMTsKKwl9CisKKwkvLyBmaWxsIGluIERhdGEgTWF0ZXJpYWwgYW5kIGl0cyBsZW5ndGgKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzBdID0gSUVfV1BBMjsKKwlQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzFdID0gcEFkLT5TdGFDZmcuUlNOSUVfTGVuOworCVBhY2tldC5LZXlEZXNjLktleURhdGFMZW5bMV0gPSBwQWQtPlN0YUNmZy5SU05JRV9MZW4gKyAyOworCU5kaXNNb3ZlTWVtb3J5KCZQYWNrZXQuS2V5RGVzYy5LZXlEYXRhWzJdLCBwQWQtPlN0YUNmZy5SU05fSUUsIHBBZC0+U3RhQ2ZnLlJTTklFX0xlbik7CisKKwkvLyBVcGRhdGUgcGFja2V0IGxlbmd0aCBhZnRlciBkZWNpZGUgS2V5IGRhdGEgcGF5bG9hZAorCVBhY2tldC5Cb2R5X0xlblsxXSAgPSBzaXplb2YoS0VZX0RFU0NSSVBURVIpIC0gTUFYX0xFTl9PRl9SU05JRSArIFBhY2tldC5LZXlEZXNjLktleURhdGFMZW5bMV07CisKKwkvLyAyLiBLZXkgVHlwZSBQZWVyS2V5CisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlUeXBlID0gUEFJUldJU0VLRVk7CisKKwkvLyAzLiBLZXlNaWMgZmllbGQgcHJlc2VudGVkCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlNaWMgID0gMTsKKworCS8vIFVwZGF0ZSBLZXkgTGVuZ3RoCisJUGFja2V0LktleURlc2MuS2V5TGVuZ3RoWzBdID0gMDsKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMV0gPSBwTXNnMS0+S2V5RGVzYy5LZXlMZW5ndGhbMV07CisKKwkvLyA0LiBGaWxsIFNOb25jZQorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLktleU5vbmNlLCBwQWQtPlN0YUNmZy5TTm9uY2UsIExFTl9LRVlfREVTQ19OT05DRSk7CisKKwkvLyA1LiBLZXkgUmVwbGF5IENvdW50CisJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuUmVwbGF5Q291bnRlciwgcEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisKKwkvLyBDb252ZXJ0IHRvIGxpdHRsZS1lbmRpYW4gZm9ybWF0LgorCSooKFVTSE9SVCAqKSZQYWNrZXQuS2V5RGVzYy5LZXlJbmZvKSA9IGNwdTJsZTE2KCooKFVTSE9SVCAqKSZQYWNrZXQuS2V5RGVzYy5LZXlJbmZvKSk7CisKKwkvLyBTZW5kIEVBUE9MLUtleSgwLDEsMCwwLDAsUCwwLFNOb25jZSxNSUMsUlNOIElFKQorCS8vIE91dCBidWZmZXIgZm9yIHRyYW5zbWl0dGluZyBtZXNzYWdlIDIKKwlNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAgKFBVQ0hBUiAqKSZwT3V0QnVmZmVyKTsgIC8vIGFsbG9jYXRlIG1lbW9yeQorCWlmKHBPdXRCdWZmZXIgPT0gTlVMTCkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgbXBvb2wpOworCQlyZXR1cm47CisJfQorCisJLy8gUHJlcGFyZSBFQVBPTCBmcmFtZSBmb3IgTUlDIGNhbGN1bGF0aW9uCisJLy8gQmUgY2FyZWZ1bCwgb25seSBFQVBPTCBmcmFtZSBpcyBjb3VudGVkIGZvciBNSUMgY2FsY3VsYXRpb24KKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgJkZyYW1lTGVuLAorCQlQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAmUGFja2V0LAorCQlFTkRfT0ZfQVJHUyk7CisKKwkvLyA2LiBQcmVwYXJlIGFuZCBGaWxsIE1JQyB2YWx1ZQorCU5kaXNaZXJvTWVtb3J5KE1pYywgc2l6ZW9mKE1pYykpOworCWlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsKKwkJLy8gQUVTCisJCUhNQUNfU0hBMShwT3V0QnVmZmVyLCBGcmFtZUxlbiwgUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KE1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsKKwkJaG1hY19tZDUoUFRLLCAgTEVOX0VBUF9NSUNLLCBwT3V0QnVmZmVyLCBGcmFtZUxlbiwgTWljKTsKKwl9CisJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuS2V5TWljLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisKKwkvLyBNYWtlICBUcmFuc21pdHRpbmcgZnJhbWUKKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgCSZGcmFtZUxlbiwKKwkJCSAgCQkJTEVOR1RIXzgwMl8zLCAgICAgCQkmSGVhZGVyODAyXzMsCisJCQkJCQlQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAmUGFja2V0LAorCQkJCQkJRU5EX09GX0FSR1MpOworCisKKwkvLyA1LiBDb3B5IGZyYW1lIHRvIFR4IHJpbmcKKwlSVE1QVG9XaXJlbGVzc1N0YShwQWQsIEhlYWRlcjgwMl8zLCBMRU5HVEhfODAyXzMsIChQVUNIQVIpJlBhY2tldCwgUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgVFJVRSk7CisKKwlNbG1lRnJlZU1lbW9yeShwQWQsIHBPdXRCdWZmZXIpOworCW9zX2ZyZWVfbWVtKHBBZCwgbXBvb2wpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV3BhMlBhaXJNc2cxQWN0aW9uIDwtLS0tLVxuIikpOworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlQcm9jZXNzIFBhaXJ3aXNlIGtleSA0LXdheSBoYW5kc2hha2luZworCisJQXJndW1lbnRzOgorCQlwQWQJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgorCQlFbGVtCQlNZXNzYWdlIGJvZHkKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJV3BhUGFpck1zZzNBY3Rpb24oCisJSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JTUxNRV9RVUVVRV9FTEVNCSpFbGVtKQorCit7CisJUEhFQURFUl84MDJfMTEgICAgICBwSGVhZGVyOworCVBVQ0hBUiAgICAgICAgICAJcE91dEJ1ZmZlciA9IE5VTEw7CisJVUNIQVIgICAgICAgICAgICAgICBIZWFkZXI4MDJfM1sxNF07CisJVUxPTkcgICAgICAgICAgIAlGcmFtZUxlbiA9IDA7CisJRUFQT0xfUEFDS0VUICAgICAgICBQYWNrZXQ7CisJUEVBUE9MX1BBQ0tFVCAgICAgICBwTXNnMzsKKwlVQ0hBUiAgICAgICAgICAgCU1pY1sxNl0sIE9sZE1pY1sxNl07CisJTUFDX1RBQkxFX0VOVFJZIAkqcEVudHJ5ID0gTlVMTDsKKwlVQ0hBUgkJCQlza2lwX29mZnNldDsKKwlLRVlfSU5GTwkJCXBlZXJLZXlJbmZvOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV3BhUGFpck1zZzNBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwkvLyBSZWNvcmQgODAyLjExIGhlYWRlciAmIHRoZSByZWNlaXZlZCBFQVBPTCBwYWNrZXQgTXNnMworCXBIZWFkZXIgPSAoUEhFQURFUl84MDJfMTEpIEVsZW0tPk1zZzsKKwlwTXNnMyA9IChQRUFQT0xfUEFDS0VUKQkmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSF07CisKKwlOZGlzWmVyb01lbW9yeSgoUFVDSEFSKSZwZWVyS2V5SW5mbywgc2l6ZW9mKHBlZXJLZXlJbmZvKSk7CisJTmRpc01vdmVNZW1vcnkoKFBVQ0hBUikmcGVlcktleUluZm8sIChQVUNIQVIpJnBNc2czLT5LZXlEZXNjLktleUluZm8sIHNpemVvZihLRVlfSU5GTykpOworCisJKigoVVNIT1JUKikmcGVlcktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUKikmcGVlcktleUluZm8pKTsKKworCisJLy8gMS4gVmVyaWZ5IGNpcGhlciB0eXBlIG1hdGNoCisJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCAmJiAocGVlcktleUluZm8uS2V5RGVzY1ZlciAhPSAyKSkKKwl7CisJCXJldHVybjsKKwl9CisJZWxzZSBpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCAmJiAocGVlcktleUluZm8uS2V5RGVzY1ZlciAhPSAxKSkKKwl7CisJCXJldHVybjsKKwl9CisKKwkvLyBWZXJpZnkgUlNOIElFCisJLy9pZiAoIVJUTVBFcXVhbE1lbW9yeShwTXNnMy0+S2V5RGVzYy5LZXlEYXRhLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTl9JRSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4pKQorCWlmICghQ2hlY2tSU05JRShwQWQsIHBNc2czLT5LZXlEZXNjLktleURhdGEsIHBNc2czLT5LZXlEZXNjLktleURhdGFMZW5bMV0sICZza2lwX29mZnNldCkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJSU05fSUUgRGlmZmVyZW50IGluIE1zZyAzIG9mIFdQQTEgNC13YXkgaGFuZHNoYWtlISEgXG4iKSk7CisJCWhleF9kdW1wKCJUaGUgb3JpZ2luYWwgUlNOX0lFIiwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05fSUUsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOSUVfTGVuKTsKKwkJaGV4X2R1bXAoIlRoZSByZWNlaXZlZCBSU05fSUUiLCBwTXNnMy0+S2V5RGVzYy5LZXlEYXRhLCBwTXNnMy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdKTsKKwkJcmV0dXJuOworCX0KKwllbHNlCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJTTl9JRSBWQUxJRCBpbiBNc2cgMyBvZiBXUEExIDQtd2F5IGhhbmRzaGFrZSEhIFxuIikpOworCisKKwkvLyAyLiBDaGVjayBNSUMgdmFsdWUKKwkvLyBTYXZlIHRoZSBNSUMgYW5kIHJlcGxhY2Ugd2l0aCB6ZXJvCisJTmRpc01vdmVNZW1vcnkoT2xkTWljLCBwTXNnMy0+S2V5RGVzYy5LZXlNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCU5kaXNaZXJvTWVtb3J5KHBNc2czLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzICA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsKKwkJLy8gQUVTCisJCVVDSEFSIGRpZ2VzdFs4MF07CisKKwkJSE1BQ19TSEExKChQVUNIQVIpIHBNc2czLCBwTXNnMy0+Qm9keV9MZW5bMV0gKyA0LCBwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgZGlnZXN0KTsKKwkJTmRpc01vdmVNZW1vcnkoTWljLCBkaWdlc3QsIExFTl9LRVlfREVTQ19NSUMpOworCX0KKwllbHNlCS8vIFRLSVAKKwl7CisJCWhtYWNfbWQ1KHBBZC0+U3RhQ2ZnLlBUSywgTEVOX0VBUF9NSUNLLCAoUFVDSEFSKSBwTXNnMywgcE1zZzMtPkJvZHlfTGVuWzFdICsgNCwgTWljKTsKKwl9CisKKwlpZighTmRpc0VxdWFsTWVtb3J5KE9sZE1pYywgTWljLCBMRU5fS0VZX0RFU0NfTUlDKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiBNSUMgRGlmZmVyZW50IGluIG1zZyAzIG9mIDQtd2F5IGhhbmRzaGFrZSEhISEhISEhISEgXG4iKSk7CisJCXJldHVybjsKKwl9CisJZWxzZQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgTUlDIFZBTElEIGluIG1zZyAzIG9mIDQtd2F5IGhhbmRzaGFrZSEhISEhISEhISEgXG4iKSk7CisKKwkvLyAzLiBDaGVjayBSZXBsYXkgQ291bnRlciwgaXQgaGFzIHRvIGJlIGxhcmdlciB0aGFuIGxhc3Qgb25lLiBObyBuZWVkIHRvIGJlIGV4YWN0IG9uZSBsYXJnZXIKKwlpZihSVE1QQ29tcGFyZU1lbW9yeShwTXNnMy0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBwQWQtPlN0YUNmZy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKSAhPSAxKQorCQlyZXR1cm47CisKKwkvLyBVcGRhdGUgbmV3IHJlcGxheSBjb3VudGVyCisJTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgcE1zZzMtPktleURlc2MuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisKKwkvLyA0LiBEb3VibGUgY2hlY2sgQU5vbmNlCisJaWYoIU5kaXNFcXVhbE1lbW9yeShwQWQtPlN0YUNmZy5BTm9uY2UsIHBNc2czLT5LZXlEZXNjLktleU5vbmNlLCBMRU5fS0VZX0RFU0NfTk9OQ0UpKQorCQlyZXR1cm47CisKKwkvLyBpbml0IDgwMi4zIGhlYWRlciBhbmQgRmlsbCBQYWNrZXQKKwlNQUtFXzgwMl8zX0hFQURFUihIZWFkZXI4MDJfMywgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIEVBUE9MKTsKKworCS8vIFplcm8gTWVzc2FnZSA0IGJvZHkKKwlOZGlzWmVyb01lbW9yeSgmUGFja2V0LCBzaXplb2YoUGFja2V0KSk7CisJUGFja2V0LlByb1Zlcgk9IEVBUE9MX1ZFUjsKKwlQYWNrZXQuUHJvVHlwZQk9IEVBUE9MS2V5OworCVBhY2tldC5Cb2R5X0xlblsxXSAgPSBzaXplb2YoS0VZX0RFU0NSSVBURVIpIC0gTUFYX0xFTl9PRl9SU05JRTsJCS8vIE5vIGRhdGEgZmllbGQKKworCS8vCisJLy8gTWVzc2FnZSA0IGFzICBFQVBPTC1LZXkoMCwxLDAsMCwwLFAsMCwwLE1JQywwKQorCS8vCisJUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTFfS0VZX0RFU0M7CisKKwkvLyBLZXkgZGVzY3JpcHRvciB2ZXJzaW9uIGFuZCBhcHByb3ByaWF0ZSBSU04gSUUKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleURlc2NWZXIgPSBwZWVyS2V5SW5mby5LZXlEZXNjVmVyOworCisJLy8gVXBkYXRlIEtleSBMZW5ndGgKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMF0gPSBwTXNnMy0+S2V5RGVzYy5LZXlMZW5ndGhbMF07CisJUGFja2V0LktleURlc2MuS2V5TGVuZ3RoWzFdID0gcE1zZzMtPktleURlc2MuS2V5TGVuZ3RoWzFdOworCisJLy8gS2V5IFR5cGUgUGVlcktleQorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5VHlwZSA9IFBBSVJXSVNFS0VZOworCisJLy8gS2V5TWljIGZpZWxkIHByZXNlbnRlZAorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5TWljICA9IDE7CisKKwkvLyBJbiBNc2czLCAgS2V5SW5mby5zZWN1cmUgPTAgaWYgR3JvdXAgS2V5IEhTIHRvIGNvbWUuIDEgaWYgbm8gZ3JvdXAga2V5IEhTCisJLy8gU3RhdGlvbiBzZW5kcyBNc2c0ICBLZXlJbmZvLnNlY3VyZSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhhdCBpbiBNc2cuMworCVBhY2tldC5LZXlEZXNjLktleUluZm8uU2VjdXJlPSBwZWVyS2V5SW5mby5TZWN1cmU7CisKKwkvLyBDb252ZXJ0IHRvIGxpdHRsZS1lbmRpYW4gZm9ybWF0LgorCSooKFVTSE9SVCAqKSZQYWNrZXQuS2V5RGVzYy5LZXlJbmZvKSA9IGNwdTJsZTE2KCooKFVTSE9SVCAqKSZQYWNrZXQuS2V5RGVzYy5LZXlJbmZvKSk7CisKKwkvLyBLZXkgUmVwbGF5IGNvdW50CisJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuUmVwbGF5Q291bnRlciwgcE1zZzMtPktleURlc2MuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisKKwkvLyBPdXQgYnVmZmVyIGZvciB0cmFuc21pdHRpbmcgbWVzc2FnZSA0CisJTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgKFBVQ0hBUiAqKSZwT3V0QnVmZmVyKTsgIC8vIGFsbG9jYXRlIG1lbW9yeQorCWlmKHBPdXRCdWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLy8gUHJlcGFyZSBFQVBPTCBmcmFtZSBmb3IgTUlDIGNhbGN1bGF0aW9uCisJLy8gQmUgY2FyZWZ1bCwgb25seSBFQVBPTCBmcmFtZSBpcyBjb3VudGVkIGZvciBNSUMgY2FsY3VsYXRpb24KKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgJkZyYW1lTGVuLAorCQlQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAgICAmUGFja2V0LAorCQlFTkRfT0ZfQVJHUyk7CisKKwkvLyBQcmVwYXJlIGFuZCBGaWxsIE1JQyB2YWx1ZQorCU5kaXNaZXJvTWVtb3J5KE1pYywgc2l6ZW9mKE1pYykpOworCWlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCS8vIEFFUworCQlVQ0hBUiBkaWdlc3RbODBdOworCisJCUhNQUNfU0hBMShwT3V0QnVmZmVyLCBGcmFtZUxlbiwgcEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KE1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsKKwkJaG1hY19tZDUocEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCX0KKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisKKwkvLyBVcGRhdGUgUFRLCisJLy8gUHJlcGFyZSBwYWlyLXdpc2Uga2V5IGluZm9ybWF0aW9uIGludG8gc2hhcmVkIGtleSB0YWJsZQorCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlNoYXJlZEtleVtCU1MwXVswXSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKwlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXlMZW4gPSBMRU5fVEtJUF9FSzsKKyAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXksICZwQWQtPlN0YUNmZy5QVEtbMzJdLCBMRU5fVEtJUF9FSyk7CisJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMsICZwQWQtPlN0YUNmZy5QVEtbNDhdLCBMRU5fVEtJUF9SWE1JQ0spOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLCAmcEFkLT5TdGFDZmcuUFRLWzQ4K0xFTl9US0lQX1JYTUlDS10sIExFTl9US0lQX1RYTUlDSyk7CisKKwkvLyBEZWNpZGUgaXRzIENoaXBlckFsZworCWlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9US0lQOworCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ0lQSEVSX0FFUzsKKwllbHNlCisJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCisJLy8gVXBkYXRlIHRoZXNlIHJlbGF0ZWQgaW5mb3JtYXRpb24gdG8gTUFDX1RBQkxFX0VOVFJZCisJcEVudHJ5ID0gJnBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF07CisJTmRpc01vdmVNZW1vcnkocEVudHJ5LT5QYWlyd2lzZUtleS5LZXksICZwQWQtPlN0YUNmZy5QVEtbMzJdLCBMRU5fVEtJUF9FSyk7CisJTmRpc01vdmVNZW1vcnkocEVudHJ5LT5QYWlyd2lzZUtleS5SeE1pYywgJnBBZC0+U3RhQ2ZnLlBUS1s0OF0sIExFTl9US0lQX1JYTUlDSyk7CisJTmRpc01vdmVNZW1vcnkocEVudHJ5LT5QYWlyd2lzZUtleS5UeE1pYywgJnBBZC0+U3RhQ2ZnLlBUS1s0OCtMRU5fVEtJUF9SWE1JQ0tdLCBMRU5fVEtJUF9UWE1JQ0spOworCXBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnOworCisJLy8gVXBkYXRlIHBhaXJ3aXNlIGtleSBpbmZvcm1hdGlvbiB0byBBU0lDIFNoYXJlZCBLZXkgVGFibGUKKwlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkLAorCQkJCQkJICBCU1MwLAorCQkJCQkJICAwLAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uVHhNaWMsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlJ4TWljKTsKKworCS8vIFVwZGF0ZSBBU0lDIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZQorCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLAorCQkJCQkJCSAgQlNTMCwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcsCisJCQkJCQkJICBwRW50cnkpOworCisJLy8gTWFrZSB0cmFuc21pdHRpbmcgZnJhbWUKKwlNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgCSZGcmFtZUxlbiwKKwkJCSAgCQkJTEVOR1RIXzgwMl8zLCAgICAgCQkmSGVhZGVyODAyXzMsCisJCQkJCQlQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAmUGFja2V0LAorCQkJCQkJRU5EX09GX0FSR1MpOworCisKKwkvLyBDb3B5IGZyYW1lIHRvIFR4IHJpbmcgYW5kIFNlbmQgTWVzc2FnZSA0IHRvIGF1dGhlbnRpY2F0b3IKKwlSVE1QVG9XaXJlbGVzc1N0YShwQWQsIEhlYWRlcjgwMl8zLCBMRU5HVEhfODAyXzMsIChQVUNIQVIpJlBhY2tldCwgUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgVFJVRSk7CisKKwlNbG1lRnJlZU1lbW9yeShwQWQsIChQVUNIQVIpcE91dEJ1ZmZlcik7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGFQYWlyTXNnM0FjdGlvbiA8LS0tLS1cbiIpKTsKK30KKworVk9JRCAgICBXcGEyUGFpck1zZzNBY3Rpb24oCisJSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisJSU4gIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKKworeworCVBIRUFERVJfODAyXzExICAgICAgcEhlYWRlcjsKKwlQVUNIQVIgICAgICAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCVVDSEFSICAgICAgICAgICAgICAgSGVhZGVyODAyXzNbMTRdOworCVVMT05HICAgICAgICAgICAgICAgRnJhbWVMZW4gPSAwOworCUVBUE9MX1BBQ0tFVCAgICAgICAgUGFja2V0OworCVBFQVBPTF9QQUNLRVQgICAgICAgcE1zZzM7CisJVUNIQVIgICAgICAgICAgICAgICBNaWNbMTZdLCBPbGRNaWNbMTZdOworCVVDSEFSICAgICAgICAgICAgICAgKm1wb29sLCAqS0VZREFUQSwgKmRpZ2VzdDsKKwlVQ0hBUiAgICAgICAgICAgICAgIEtleVszMl07CisJTUFDX1RBQkxFX0VOVFJZIAkqcEVudHJ5ID0gTlVMTDsKKwlLRVlfSU5GTwkJCXBlZXJLZXlJbmZvOworCisJLy8gYWxsb2NhdGUgbWVtb3J5CisJb3NfYWxsb2NfbWVtKHBBZCwgKFBVQ0hBUiAqKSZtcG9vbCwgMTAyNCk7CisKKwlpZihtcG9vbCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvLyBLRVlEQVRBIExlbiA9IDUxMi4KKwlLRVlEQVRBID0gKFVDSEFSICopIFJPVU5EX1VQKG1wb29sLCA0KTsKKwkvLyBkaWdlc3QgTGVuID0gODAuCisJZGlnZXN0ID0gKFVDSEFSICopIFJPVU5EX1VQKEtFWURBVEEgKyA1MTIsIDQpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV3BhMlBhaXJNc2czQWN0aW9uIC0tLS0tPlxuIikpOworCisJcEhlYWRlciA9IChQSEVBREVSXzgwMl8xMSkgRWxlbS0+TXNnOworCisJLy8gUHJvY2VzcyBtZXNzYWdlIDMgZnJhbWUuCisJcE1zZzMgPSAoUEVBUE9MX1BBQ0tFVCkJJkVsZW0tPk1zZ1tMRU5HVEhfODAyXzExICsgTEVOR1RIXzgwMl8xX0hdOworCisJTmRpc1plcm9NZW1vcnkoKFBVQ0hBUikmcGVlcktleUluZm8sIHNpemVvZihwZWVyS2V5SW5mbykpOworCU5kaXNNb3ZlTWVtb3J5KChQVUNIQVIpJnBlZXJLZXlJbmZvLCAoUFVDSEFSKSZwTXNnMy0+S2V5RGVzYy5LZXlJbmZvLCBzaXplb2YoS0VZX0lORk8pKTsKKworCSooKFVTSE9SVCopJnBlZXJLZXlJbmZvKSA9IGNwdTJsZTE2KCooKFVTSE9SVCopJnBlZXJLZXlJbmZvKSk7CisKKwkvLyAxLiBWZXJpZnkgY2lwaGVyIHR5cGUgbWF0Y2gKKwlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQgJiYgKHBlZXJLZXlJbmZvLktleURlc2NWZXIhPSAyKSkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisJZWxzZSBpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCAmJiAocGVlcktleUluZm8uS2V5RGVzY1ZlciAhPSAxKSkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvLyAyLiBDaGVjayBNSUMgdmFsdWUKKwkvLyBTYXZlIHRoZSBNSUMgYW5kIHJlcGxhY2Ugd2l0aCB6ZXJvCisJTmRpc01vdmVNZW1vcnkoT2xkTWljLCBwTXNnMy0+S2V5RGVzYy5LZXlNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCU5kaXNaZXJvTWVtb3J5KHBNc2czLT5LZXlEZXNjLktleU1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsKKwkJLy8gQUVTCisJCUhNQUNfU0hBMSgoUFVDSEFSKSBwTXNnMywgcE1zZzMtPkJvZHlfTGVuWzFdICsgNCwgcEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KE1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsKKwkJaG1hY19tZDUocEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIChQVUNIQVIpIHBNc2czLCBwTXNnMy0+Qm9keV9MZW5bMV0gKyA0LCBNaWMpOworCX0KKworCWlmKCFOZGlzRXF1YWxNZW1vcnkoT2xkTWljLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiIE1JQyBEaWZmZXJlbnQgaW4gbXNnIDMgb2YgNC13YXkgaGFuZHNoYWtlISEhISEhISEhISBcbiIpKTsKKwkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKwllbHNlCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBNSUMgVkFMSUQgaW4gbXNnIDMgb2YgNC13YXkgaGFuZHNoYWtlISEhISEhISEhISBcbiIpKTsKKworCS8vIDMuIENoZWNrIFJlcGxheSBDb3VudGVyLCBpdCBoYXMgdG8gYmUgbGFyZ2VyIHRoYW4gbGFzdCBvbmUuIE5vIG5lZWQgdG8gYmUgZXhhY3Qgb25lIGxhcmdlcgorCWlmKFJUTVBDb21wYXJlTWVtb3J5KHBNc2czLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpICE9IDEpCisJeworCQlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCQlyZXR1cm47CisJfQorCisJLy8gVXBkYXRlIG5ldyByZXBsYXkgY291bnRlcgorCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIHBNc2czLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworCisJLy8gNC4gRG91YmxlIGNoZWNrIEFOb25jZQorCWlmKCFOZGlzRXF1YWxNZW1vcnkocEFkLT5TdGFDZmcuQU5vbmNlLCBwTXNnMy0+S2V5RGVzYy5LZXlOb25jZSwgTEVOX0tFWV9ERVNDX05PTkNFKSkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvLyBPYnRhaW4gR1RLCisJLy8gNS4gRGVjcnlwdCBHVEsgZnJvbSBLZXkgRGF0YQorCURCR1BSSU5UX1JBVyhSVF9ERUJVR19UUkFDRSwgKCJFS0QgPSAlZFxuIiwgcGVlcktleUluZm8uRUtEX0RMKSk7CisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQkvLyBEZWNyeXB0IEFFUyBHVEsKKwkJQUVTX0dUS19LRVlfVU5XUkFQKCZwQWQtPlN0YUNmZy5QVEtbMTZdLCBLRVlEQVRBLCBwTXNnMy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdLHBNc2czLT5LZXlEZXNjLktleURhdGEpOworCX0KKwllbHNlCSAgLy8gVEtJUAorCXsKKwkJSU5UIGk7CisJCS8vIERlY3J5cHQgVEtJUCBHVEsKKwkJLy8gQ29uc3RydWN0IDMyIGJ5dGVzIFJDNCBLZXkKKwkJTmRpc01vdmVNZW1vcnkoS2V5LCBwTXNnMy0+S2V5RGVzYy5LZXlJdiwgMTYpOworCQlOZGlzTW92ZU1lbW9yeSgmS2V5WzE2XSwgJnBBZC0+U3RhQ2ZnLlBUS1sxNl0sIDE2KTsKKwkJQVJDRk9VUl9JTklUKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQsIEtleSwgMzIpOworCQkvL2Rpc2NhcmQgZmlyc3QgMjU2IGJ5dGVzCisJCWZvcihpID0gMDsgaSA8IDI1NjsgaSsrKQorCQkJQVJDRk9VUl9CWVRFKCZwQWQtPlByaXZhdGVJbmZvLldFUENPTlRFWFQpOworCQkvLyBEZWNyeXB0IEdUSy4gQmVjYXJlZnVsLCB0aGVyZSBpcyBubyBJQ1YgdG8gY2hlY2sgdGhlIHJlc3VsdCBpcyBjb3JyZWN0IG9yIG5vdAorCQlBUkNGT1VSX0RFQ1JZUFQoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCwgS0VZREFUQSwgcE1zZzMtPktleURlc2MuS2V5RGF0YSwgcE1zZzMtPktleURlc2MuS2V5RGF0YUxlblsxXSk7CisJfQorCisJaWYgKCFQYXJzZUtleURhdGEocEFkLCBLRVlEQVRBLCBwTXNnMy0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdLCAxKSkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvLyBVcGRhdGUgR1RLIHRvIEFTSUMKKwkvLyBVcGRhdGUgZ3JvdXAga2V5IGluZm9ybWF0aW9uIHRvIEFTSUMgU2hhcmVkIEtleSBUYWJsZQorCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWQsCisJCQkJCQkgIEJTUzAsCisJCQkJCQkgIHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCwKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLlR4TWljLAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLlJ4TWljKTsKKworCS8vIFVwZGF0ZSBBU0lDIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZQorCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLAorCQkJCQkJCSAgQlNTMCwKKwkJCQkJCQkgIHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCwKKwkJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnLAorCQkJCQkJCSAgTlVMTCk7CisKKwkvLyBpbml0IDgwMi4zIGhlYWRlciBhbmQgRmlsbCBQYWNrZXQKKwlNQUtFXzgwMl8zX0hFQURFUihIZWFkZXI4MDJfMywgcEFkLT5Db21tb25DZmcuQnNzaWQsIHBBZC0+Q3VycmVudEFkZHJlc3MsIEVBUE9MKTsKKworCS8vIFplcm8gbWVzc2FnZSA0IGJvZHkKKwlOZGlzWmVyb01lbW9yeSgmUGFja2V0LCBzaXplb2YoUGFja2V0KSk7CisJUGFja2V0LlByb1Zlcgk9IEVBUE9MX1ZFUjsKKwlQYWNrZXQuUHJvVHlwZQk9IEVBUE9MS2V5OworCVBhY2tldC5Cb2R5X0xlblsxXSAgCT0gc2l6ZW9mKEtFWV9ERVNDUklQVEVSKSAtIE1BWF9MRU5fT0ZfUlNOSUU7CQkvLyBObyBkYXRhIGZpZWxkCisKKwkvLworCS8vIE1lc3NhZ2UgNCBhcyAgRUFQT0wtS2V5KDAsMSwwLDAsMCxQLDAsMCxNSUMsMCkKKwkvLworCVBhY2tldC5LZXlEZXNjLlR5cGUgPSBXUEEyX0tFWV9ERVNDOworCisJLy8gS2V5IGRlc2NyaXB0b3IgdmVyc2lvbiBhbmQgYXBwcm9wcmlhdGUgUlNOIElFCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlEZXNjVmVyID0gcGVlcktleUluZm8uS2V5RGVzY1ZlcjsKKworCS8vIFVwZGF0ZSBLZXkgTGVuZ3RoCisJUGFja2V0LktleURlc2MuS2V5TGVuZ3RoWzBdID0gcE1zZzMtPktleURlc2MuS2V5TGVuZ3RoWzBdOworCVBhY2tldC5LZXlEZXNjLktleUxlbmd0aFsxXSA9IHBNc2czLT5LZXlEZXNjLktleUxlbmd0aFsxXTsKKworCS8vIEtleSBUeXBlIFBlZXJLZXkKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleVR5cGUgPSBQQUlSV0lTRUtFWTsKKworCS8vIEtleU1pYyBmaWVsZCBwcmVzZW50ZWQKKwlQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLktleU1pYyAgPSAxOworCVBhY2tldC5LZXlEZXNjLktleUluZm8uU2VjdXJlID0gMTsKKworCS8vIENvbnZlcnQgdG8gbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisJKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pKTsKKworCS8vIEtleSBSZXBsYXkgY291bnQKKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5SZXBsYXlDb3VudGVyLCBwTXNnMy0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIE91dCBidWZmZXIgZm9yIHRyYW5zbWl0dGluZyBtZXNzYWdlIDQKKwlNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFVDSEFSICopJnBPdXRCdWZmZXIpOyAgLy8gYWxsb2NhdGUgbWVtb3J5CisJaWYocE91dEJ1ZmZlciA9PSBOVUxMKQorCXsKKwkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJcmV0dXJuOworCX0KKworCS8vIFByZXBhcmUgRUFQT0wgZnJhbWUgZm9yIE1JQyBjYWxjdWxhdGlvbgorCS8vIEJlIGNhcmVmdWwsIG9ubHkgRUFQT0wgZnJhbWUgaXMgY291bnRlZCBmb3IgTUlDIGNhbGN1bGF0aW9uCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICZGcmFtZUxlbiwKKwkJUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgICAgJlBhY2tldCwKKwkJRU5EX09GX0FSR1MpOworCisJLy8gUHJlcGFyZSBhbmQgRmlsbCBNSUMgdmFsdWUKKwlOZGlzWmVyb01lbW9yeShNaWMsIHNpemVvZihNaWMpKTsKKwlpZihwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CisJCS8vIEFFUworCQlITUFDX1NIQTEocE91dEJ1ZmZlciwgRnJhbWVMZW4sIHBBZC0+U3RhQ2ZnLlBUSywgTEVOX0VBUF9NSUNLLCBkaWdlc3QpOworCQlOZGlzTW92ZU1lbW9yeShNaWMsIGRpZ2VzdCwgTEVOX0tFWV9ERVNDX01JQyk7CisJfQorCWVsc2UKKwl7CisJCWhtYWNfbWQ1KHBBZC0+U3RhQ2ZnLlBUSywgTEVOX0VBUF9NSUNLLCBwT3V0QnVmZmVyLCBGcmFtZUxlbiwgTWljKTsKKwl9CisJTmRpc01vdmVNZW1vcnkoUGFja2V0LktleURlc2MuS2V5TWljLCBNaWMsIExFTl9LRVlfREVTQ19NSUMpOworCisJLy8gVXBkYXRlIFBUSworCS8vIFByZXBhcmUgcGFpci13aXNlIGtleSBpbmZvcm1hdGlvbiBpbnRvIHNoYXJlZCBrZXkgdGFibGUKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0sIHNpemVvZihDSVBIRVJfS0VZKSk7CisJcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gTEVOX1RLSVBfRUs7CisgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LCAmcEFkLT5TdGFDZmcuUFRLWzMyXSwgTEVOX1RLSVBfRUspOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlJ4TWljLCAmcEFkLT5TdGFDZmcuUFRLWzQ4XSwgTEVOX1RLSVBfUlhNSUNLKTsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5UeE1pYywgJnBBZC0+U3RhQ2ZnLlBUS1s0OCtMRU5fVEtJUF9SWE1JQ0tdLCBMRU5fVEtJUF9UWE1JQ0spOworCisJLy8gRGVjaWRlIGl0cyBDaGlwZXJBbGcKKwlpZiAocEFkLT5TdGFDZmcuUGFpckNpcGhlciA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKKwllbHNlIGlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisJZWxzZQorCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfTk9ORTsKKworCS8vIFVwZGF0ZSB0aGVzZSByZWxhdGVkIGluZm9ybWF0aW9uIHRvIE1BQ19UQUJMRV9FTlRSWQorCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdOworCU5kaXNNb3ZlTWVtb3J5KCZwRW50cnktPlBhaXJ3aXNlS2V5LktleSwgJnBBZC0+U3RhQ2ZnLlBUS1szMl0sIExFTl9US0lQX0VLKTsKKwlOZGlzTW92ZU1lbW9yeSgmcEVudHJ5LT5QYWlyd2lzZUtleS5SeE1pYywgJnBBZC0+U3RhQ2ZnLlBUS1s0OF0sIExFTl9US0lQX1JYTUlDSyk7CisJTmRpc01vdmVNZW1vcnkoJnBFbnRyeS0+UGFpcndpc2VLZXkuVHhNaWMsICZwQWQtPlN0YUNmZy5QVEtbNDgrTEVOX1RLSVBfUlhNSUNLXSwgTEVOX1RLSVBfVFhNSUNLKTsKKwlwRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZzsKKworCS8vIFVwZGF0ZSBwYWlyd2lzZSBrZXkgaW5mb3JtYXRpb24gdG8gQVNJQyBTaGFyZWQgS2V5IFRhYmxlCisJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwKKwkJCQkJCSAgQlNTMCwKKwkJCQkJCSAgMCwKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnLAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5LZXksCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYyk7CisKKwkvLyBVcGRhdGUgQVNJQyBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUKKwlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwKKwkJCQkJCQkgIEJTUzAsCisJCQkJCQkJICAwLAorCQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnLAorCQkJCQkJCSAgcEVudHJ5KTsKKworCS8vIE1ha2UgIFRyYW5zbWl0dGluZyBmcmFtZQorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAJJkZyYW1lTGVuLAorCQkJICAJCQlMRU5HVEhfODAyXzMsICAgICAJCSZIZWFkZXI4MDJfMywKKwkJCQkJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICZQYWNrZXQsCisJCQkJCQlFTkRfT0ZfQVJHUyk7CisKKworCS8vIENvcHkgZnJhbWUgdG8gVHggcmluZyBhbmQgU2VuZCBNZXNzYWdlIDQgdG8gYXV0aGVudGljYXRvcgorCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMywgKFBVQ0hBUikmUGFja2V0LCBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCBUUlVFKTsKKworCS8vIHNldCA4MDIuMXggcG9ydCBjb250cm9sCisJLy9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCVNUQV9QT1JUX1NFQ1VSRUQocEFkKTsKKworICAgIC8vIEluZGljYXRlIENvbm5lY3RlZCBmb3IgR1VJCisgICAgcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKworCU1sbWVGcmVlTWVtb3J5KHBBZCwgKFBVQ0hBUilwT3V0QnVmZmVyKTsKKwlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCisKKwkvLyBzZW5kIHdpcmVsZXNzIGV2ZW50IC0gZm9yIHNldCBrZXkgZG9uZSBXUEEyCisJaWYgKHBBZC0+Q29tbW9uQ2ZnLmJXaXJlbGVzc0V2ZW50KQorCQlSVE1QU2VuZFdpcmVsZXNzRXZlbnQocEFkLCBJV19TRVRfS0VZX0RPTkVfV1BBMl9FVkVOVF9GTEFHLCBwRW50cnktPkFkZHIsIEJTUzAsIDApOworCisJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiV3BhMlBhaXJNc2czQWN0aW9uIDwtLS0tLVxuIikpOworCit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlQcm9jZXNzIEdyb3VwIGtleSAyLXdheSBoYW5kc2hha2luZworCisJQXJndW1lbnRzOgorCQlwQWQJUG9pbnRlcgl0byBvdXIgYWRhcHRlcgorCQlFbGVtCQlNZXNzYWdlIGJvZHkKKworCVJldHVybiBWYWx1ZToKKwkJTm9uZQorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJV3BhR3JvdXBNc2cxQWN0aW9uKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCU1MTUVfUVVFVUVfRUxFTQkqRWxlbSkKKworeworCVBVQ0hBUiAgICAgICAgICAgICAgcE91dEJ1ZmZlciA9IE5VTEw7CisJVUNIQVIgICAgICAgICAgICAgICBIZWFkZXI4MDJfM1sxNF07CisJVUxPTkcgICAgICAgICAgICAgICBGcmFtZUxlbiA9IDA7CisJRUFQT0xfUEFDS0VUICAgICAgICBQYWNrZXQ7CisJUEVBUE9MX1BBQ0tFVCAgICAgICBwR3JvdXA7CisJVUNIQVIgICAgICAgICAgICAgICAqbXBvb2wsICpkaWdlc3QsICpLRVlEQVRBOworCVVDSEFSICAgICAgICAgICAgICAgTWljWzE2XSwgT2xkTWljWzE2XTsKKwlVQ0hBUiAgICAgICAgICAgICAgIEdUS1szMl0sIEtleVszMl07CisJS0VZX0lORk8JCQlwZWVyS2V5SW5mbzsKKworCS8vIGFsbG9jYXRlIG1lbW9yeQorCW9zX2FsbG9jX21lbShwQWQsIChQVUNIQVIgKikmbXBvb2wsIDEwMjQpOworCisJaWYobXBvb2wgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLy8gZGlnZXN0IExlbiA9IDgwLgorCWRpZ2VzdCA9IChVQ0hBUiAqKSBST1VORF9VUChtcG9vbCwgNCk7CisJLy8gS0VZREFUQSBMZW4gPSA1MTIuCisJS0VZREFUQSA9IChVQ0hBUiAqKSBST1VORF9VUChkaWdlc3QgKyA4MCwgNCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGFHcm91cE1zZzFBY3Rpb24gLS0tLS0+XG4iKSk7CisKKwkvLyBQcm9jZXNzIEdyb3VwIE1lc3NhZ2UgMSBmcmFtZS4gc2tpcCA4MDIuMTEgaGVhZGVyKDI0KSAmIExMQ19TTkFQIGhlYWRlcig4KQorCXBHcm91cCA9IChQRUFQT0xfUEFDS0VUKSAmRWxlbS0+TXNnW0xFTkdUSF84MDJfMTEgKyBMRU5HVEhfODAyXzFfSF07CisKKwlOZGlzWmVyb01lbW9yeSgoUFVDSEFSKSZwZWVyS2V5SW5mbywgc2l6ZW9mKHBlZXJLZXlJbmZvKSk7CisJTmRpc01vdmVNZW1vcnkoKFBVQ0hBUikmcGVlcktleUluZm8sIChQVUNIQVIpJnBHcm91cC0+S2V5RGVzYy5LZXlJbmZvLCBzaXplb2YoS0VZX0lORk8pKTsKKworCSooKFVTSE9SVCopJnBlZXJLZXlJbmZvKSA9IGNwdTJsZTE2KCooKFVTSE9SVCopJnBlZXJLZXlJbmZvKSk7CisKKwkvLyAwLiBDaGVjayBjaXBoZXIgdHlwZSBtYXRjaAorCWlmIChwQWQtPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCAmJiAocGVlcktleUluZm8uS2V5RGVzY1ZlciAhPSAyKSkKKwl7CisJCW9zX2ZyZWVfbWVtKHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisJZWxzZSBpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQgJiYgKHBlZXJLZXlJbmZvLktleURlc2NWZXIgIT0gMSkpCisJeworCQlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCQlyZXR1cm47CisJfQorCisJLy8gMS4gVmVyaWZ5IFJlcGxheSBjb3VudGVyCisJLy8gICAgQ2hlY2sgUmVwbGF5IENvdW50ZXIsIGl0IGhhcyB0byBiZSBsYXJnZXIgdGhhbiBsYXN0IG9uZS4gTm8gbmVlZCB0byBiZSBleGFjdCBvbmUgbGFyZ2VyCisJaWYoUlRNUENvbXBhcmVNZW1vcnkocEdyb3VwLT5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpICE9IDEpCisJeworCQlvc19mcmVlX21lbShwQWQsIChQVUNIQVIpbXBvb2wpOworCQlyZXR1cm47CisJfQorCisJLy8gVXBkYXRlIG5ldyByZXBsYXkgY291bnRlcgorCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIHBHcm91cC0+S2V5RGVzYy5SZXBsYXlDb3VudGVyLCBMRU5fS0VZX0RFU0NfUkVQTEFZKTsKKworCS8vIDIuIFZlcmlmeSBNSUMgaXMgdmFsaWQKKwkvLyBTYXZlIHRoZSBNSUMgYW5kIHJlcGxhY2Ugd2l0aCB6ZXJvCisJTmRpc01vdmVNZW1vcnkoT2xkTWljLCBwR3JvdXAtPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKwlOZGlzWmVyb01lbW9yeShwR3JvdXAtPktleURlc2MuS2V5TWljLCBMRU5fS0VZX0RFU0NfTUlDKTsKKworCWlmKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyAgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwl7CS8vIEFFUworCQlITUFDX1NIQTEoKFBVQ0hBUikgcEdyb3VwLCBwR3JvdXAtPkJvZHlfTGVuWzFdICsgNCwgcEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KE1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsJLy8gVEtJUAorCQlobWFjX21kNShwQWQtPlN0YUNmZy5QVEssIExFTl9FQVBfTUlDSywgKFBVQ0hBUikgcEdyb3VwLCBwR3JvdXAtPkJvZHlfTGVuWzFdICsgNCwgTWljKTsKKwl9CisKKwlpZighTmRpc0VxdWFsTWVtb3J5KE9sZE1pYywgTWljLCBMRU5fS0VZX0RFU0NfTUlDKSkKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIiBNSUMgRGlmZmVyZW50IGluIGdyb3VwIG1zZyAxIG9mIDItd2F5IGhhbmRzaGFrZSEhISEhISEhISEgXG4iKSk7CisJCU1sbWVGcmVlTWVtb3J5KHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisJZWxzZQorCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgTUlDIFZBTElEIGluIGdyb3VwIG1zZyAxIG9mIDItd2F5IGhhbmRzaGFrZSEhISEhISEhISEgXG4iKSk7CisKKworCS8vIDMuIERlY3J5cHQgR1RLIGZyb20gS2V5IERhdGEKKwlpZiAocEFkLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJeworCQkvLyBEZWNyeXB0IEFFUyBHVEsKKwkJQUVTX0dUS19LRVlfVU5XUkFQKCZwQWQtPlN0YUNmZy5QVEtbMTZdLCBLRVlEQVRBLCAgcEdyb3VwLT5LZXlEZXNjLktleURhdGFMZW5bMV0sIHBHcm91cC0+S2V5RGVzYy5LZXlEYXRhKTsKKwl9CisJZWxzZQkvLyBUS0lQCisJeworCQlJTlQgaTsKKworCQkvLyBEZWNyeXB0IFRLSVAgR1RLCisJCS8vIENvbnN0cnVjdCAzMiBieXRlcyBSQzQgS2V5CisJCU5kaXNNb3ZlTWVtb3J5KEtleSwgcEdyb3VwLT5LZXlEZXNjLktleUl2LCAxNik7CisJCU5kaXNNb3ZlTWVtb3J5KCZLZXlbMTZdLCAmcEFkLT5TdGFDZmcuUFRLWzE2XSwgMTYpOworCQlBUkNGT1VSX0lOSVQoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCwgS2V5LCAzMik7CisJCS8vZGlzY2FyZCBmaXJzdCAyNTYgYnl0ZXMKKwkJZm9yKGkgPSAwOyBpIDwgMjU2OyBpKyspCisJCQlBUkNGT1VSX0JZVEUoJnBBZC0+UHJpdmF0ZUluZm8uV0VQQ09OVEVYVCk7CisJCS8vIERlY3J5cHQgR1RLLiBCZWNhcmVmdWwsIHRoZXJlIGlzIG5vIElDViB0byBjaGVjayB0aGUgcmVzdWx0IGlzIGNvcnJlY3Qgb3Igbm90CisJCUFSQ0ZPVVJfREVDUllQVCgmcEFkLT5Qcml2YXRlSW5mby5XRVBDT05URVhULCBLRVlEQVRBLCBwR3JvdXAtPktleURlc2MuS2V5RGF0YSwgcEdyb3VwLT5LZXlEZXNjLktleURhdGFMZW5bMV0pOworCX0KKworCS8vIFByb2Nlc3MgZGVjcnlwdGVkIGtleSBkYXRhIG1hdGVyaWFsCisJLy8gUGFyc2Uga2V5RGF0YSB0byBoYW5kbGUgS0RFIGZvcm1hdCBmb3IgV1BBMlBTSworCWlmIChwZWVyS2V5SW5mby5FS0RfREwpCisJeworCQlpZiAoIVBhcnNlS2V5RGF0YShwQWQsIEtFWURBVEEsIHBHcm91cC0+S2V5RGVzYy5LZXlEYXRhTGVuWzFdLCAwKSkKKwkJeworCQkJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwllbHNlCS8vIFdQQVBTSworCXsKKwkJLy8gc2V0IGtleSBtYXRlcmlhbCwgVHhNaWMgYW5kIFJ4TWljIGZvciBXUEFQU0sKKwkJTmRpc01vdmVNZW1vcnkoR1RLLCBLRVlEQVRBLCAzMik7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLkdUSywgR1RLLCAzMik7CisJCXBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IHBlZXJLZXlJbmZvLktleUluZGV4OworCisJCS8vIFByZXBhcmUgcGFpci13aXNlIGtleSBpbmZvcm1hdGlvbiBpbnRvIHNoYXJlZCBrZXkgdGFibGUKKwkJTmRpc1plcm9NZW1vcnkoJnBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0sIHNpemVvZihDSVBIRVJfS0VZKSk7CisJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5TGVuID0gTEVOX1RLSVBfRUs7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LCBHVEssIExFTl9US0lQX0VLKTsKKwkJTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5SeE1pYywgJkdUS1sxNl0sIExFTl9US0lQX1JYTUlDSyk7CisJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uVHhNaWMsICZHVEtbMjRdLCBMRU5fVEtJUF9UWE1JQ0spOworCisJCS8vIFVwZGF0ZSBTaGFyZWQgS2V5IENpcGhlckFsZworCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCQlpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKwkJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1RLSVA7CisJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9BRVM7CisKKyAgICAJLy9oZXhfZHVtcCgiR3JvdXAgS2V5IDoiLCBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleSwgTEVOX1RLSVBfRUspOworCX0KKworCS8vIFVwZGF0ZSBncm91cCBrZXkgaW5mb3JtYXRpb24gdG8gQVNJQyBTaGFyZWQgS2V5IFRhYmxlCisJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwKKwkJCQkJCSAgQlNTMCwKKwkJCQkJCSAgcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAorCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZywKKwkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uVHhNaWMsCisJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uUnhNaWMpOworCisJLy8gVXBkYXRlIEFTSUMgV0NJRCBhdHRyaWJ1dGUgdGFibGUgYW5kIElWRUlWIHRhYmxlCisJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCisJCQkJCQkJICBCU1MwLAorCQkJCQkJCSAgcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkLAorCQkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcsCisJCQkJCQkJICBOVUxMKTsKKworCS8vIHNldCA4MDIuMXggcG9ydCBjb250cm9sCisJLy9wQWQtPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCVNUQV9QT1JUX1NFQ1VSRUQocEFkKTsKKworICAgIC8vIEluZGljYXRlIENvbm5lY3RlZCBmb3IgR1VJCisgICAgcEFkLT5JbmRpY2F0ZU1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKworCS8vIGluaXQgaGVhZGVyIGFuZCBGaWxsIFBhY2tldAorCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRUFQT0wpOworCisJLy8gWmVybyBHcm91cCBtZXNzYWdlIDEgYm9keQorCU5kaXNaZXJvTWVtb3J5KCZQYWNrZXQsIHNpemVvZihQYWNrZXQpKTsKKwlQYWNrZXQuUHJvVmVyCT0gRUFQT0xfVkVSOworCVBhY2tldC5Qcm9UeXBlCT0gRUFQT0xLZXk7CisJUGFja2V0LkJvZHlfTGVuWzFdICA9IHNpemVvZihLRVlfREVTQ1JJUFRFUikgLSBNQVhfTEVOX09GX1JTTklFOwkJLy8gTm8gZGF0YSBmaWVsZAorCisJLy8KKwkvLyBHcm91cCBNZXNzYWdlIDIgYXMgIEVBUE9MLUtleSgxLDAsMCwwLEcsMCwwLE1JQywwKQorCS8vCisJaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spCisJeworCQlQYWNrZXQuS2V5RGVzYy5UeXBlID0gV1BBMl9LRVlfREVTQzsKKwl9CisJZWxzZQorCXsKKwkJUGFja2V0LktleURlc2MuVHlwZSA9IFdQQTFfS0VZX0RFU0M7CisJfQorCisJLy8gS2V5IGRlc2NyaXB0b3IgdmVyc2lvbiBhbmQgYXBwcm9wcmlhdGUgUlNOIElFCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlEZXNjVmVyID0gcGVlcktleUluZm8uS2V5RGVzY1ZlcjsKKworCS8vIFVwZGF0ZSBLZXkgTGVuZ3RoCisJUGFja2V0LktleURlc2MuS2V5TGVuZ3RoWzBdID0gcEdyb3VwLT5LZXlEZXNjLktleUxlbmd0aFswXTsKKwlQYWNrZXQuS2V5RGVzYy5LZXlMZW5ndGhbMV0gPSBwR3JvdXAtPktleURlc2MuS2V5TGVuZ3RoWzFdOworCisJLy8gS2V5IEluZGV4IGFzIEctTXNnIDEKKwlpZihwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spCisJCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5SW5kZXggPSBwZWVyS2V5SW5mby5LZXlJbmRleDsKKworCS8vIEtleSBUeXBlIEdyb3VwIGtleQorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5VHlwZSA9IEdST1VQS0VZOworCisJLy8gS2V5TWljIGZpZWxkIHByZXNlbnRlZAorCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5TWljICA9IDE7CisKKwkvLyBTZWN1cmUgYml0CisJUGFja2V0LktleURlc2MuS2V5SW5mby5TZWN1cmUgID0gMTsKKworCS8vIENvbnZlcnQgdG8gbGl0dGxlLWVuZGlhbiBmb3JtYXQuCisJKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pID0gY3B1MmxlMTYoKigoVVNIT1JUICopJlBhY2tldC5LZXlEZXNjLktleUluZm8pKTsKKworCS8vIEtleSBSZXBsYXkgY291bnQKKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5SZXBsYXlDb3VudGVyLCBwR3JvdXAtPktleURlc2MuUmVwbGF5Q291bnRlciwgTEVOX0tFWV9ERVNDX1JFUExBWSk7CisKKwkvLyBPdXQgYnVmZmVyIGZvciB0cmFuc21pdHRpbmcgZ3JvdXAgbWVzc2FnZSAyCisJTWxtZUFsbG9jYXRlTWVtb3J5KHBBZCwgKFBVQ0hBUiAqKSZwT3V0QnVmZmVyKTsgIC8vIGFsbG9jYXRlIG1lbW9yeQorCWlmKHBPdXRCdWZmZXIgPT0gTlVMTCkKKwl7CisJCU1sbWVGcmVlTWVtb3J5KHBBZCwgKFBVQ0hBUiltcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwkvLyBQcmVwYXJlIEVBUE9MIGZyYW1lIGZvciBNSUMgY2FsY3VsYXRpb24KKwkvLyBCZSBjYXJlZnVsLCBvbmx5IEVBUE9MIGZyYW1lIGlzIGNvdW50ZWQgZm9yIE1JQyBjYWxjdWxhdGlvbgorCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgICAgICAmRnJhbWVMZW4sCisJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICAgICZQYWNrZXQsCisJCUVORF9PRl9BUkdTKTsKKworCS8vIFByZXBhcmUgYW5kIEZpbGwgTUlDIHZhbHVlCisJTmRpc1plcm9NZW1vcnkoTWljLCBzaXplb2YoTWljKSk7CisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzICA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsKKwkJLy8gQUVTCisJCUhNQUNfU0hBMShwT3V0QnVmZmVyLCBGcmFtZUxlbiwgcEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KE1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsKKwkJaG1hY19tZDUocEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCX0KKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisKKworCU1ha2VPdXRnb2luZ0ZyYW1lKHBPdXRCdWZmZXIsICAgICAgIAkJJkZyYW1lTGVuLAorCQkJCQkJTEVOR1RIXzgwMl8zLCAgICAgCQkmSGVhZGVyODAyXzMsCisJCQkJCQlQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCAmUGFja2V0LAorCQkJCQkJRU5EX09GX0FSR1MpOworCisKKwkvLyA1LiBDb3B5IGZyYW1lIHRvIFR4IHJpbmcgYW5kIHByZXBhcmUgZm9yIGVuY3J5cHRpb24KKwlSVE1QVG9XaXJlbGVzc1N0YShwQWQsIEhlYWRlcjgwMl8zLCBMRU5HVEhfODAyXzMsIChQVUNIQVIpJlBhY2tldCwgUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgRkFMU0UpOworCisJLy8gNiBGcmVlIGFsbG9jYXRlZCBtZW1vcnkKKwlNbG1lRnJlZU1lbW9yeShwQWQsIChQVUNIQVIpcE91dEJ1ZmZlcik7CisJb3NfZnJlZV9tZW0ocEFkLCAoUFVDSEFSKW1wb29sKTsKKworCS8vIHNlbmQgd2lyZWxlc3MgZXZlbnQgLSBmb3Igc2V0IGtleSBkb25lIFdQQTIKKwlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCVJUTVBTZW5kV2lyZWxlc3NFdmVudChwQWQsIElXX1NFVF9LRVlfRE9ORV9XUEEyX0VWRU5UX0ZMQUcsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uQWRkciwgQlNTMCwgMCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGFHcm91cE1zZzFBY3Rpb24gPC0tLS0tXG4iKSk7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlJbml0IFdQQSBNQUMgaGVhZGVyCisKKwlBcmd1bWVudHM6CisJCXBBZAlQb2ludGVyCXRvIG91ciBhZGFwdGVyCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lECVdwYU1hY0hlYWRlckluaXQoCisJSU4JCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOIE9VVAlQSEVBREVSXzgwMl8xMQlwSGRyODAyMTEsCisJSU4JCVVDSEFSCQkJd2VwLAorCUlOCQlQVUNIQVIJCSAgICBwQWRkcjEpCit7CisJTmRpc1plcm9NZW1vcnkocEhkcjgwMjExLCBzaXplb2YoSEVBREVSXzgwMl8xMSkpOworCXBIZHI4MDIxMS0+RkMuVHlwZQk9IEJUWVBFX0RBVEE7CisJcEhkcjgwMjExLT5GQy5Ub0RzCT0gMTsKKwlpZiAod2VwCT09IDEpCisJCXBIZHI4MDIxMS0+RkMuV2VwID0gMTsKKworCSAvLwlBZGRyMTogQlNTSUQsIEFkZHIyOiBTQSwgQWRkcjM6CURBCisJQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIxLCBwQWRkcjEpOworCUNPUFlfTUFDX0FERFIocEhkcjgwMjExLT5BZGRyMiwgcEFkLT5DdXJyZW50QWRkcmVzcyk7CisJQ09QWV9NQUNfQUREUihwSGRyODAyMTEtPkFkZHIzLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJcEhkcjgwMjExLT5TZXF1ZW5jZSA9CXBBZC0+U2VxdWVuY2U7Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lCURlc2NyaXB0aW9uOgorCQlDb3B5IGZyYW1lIGZyb20gd2FpdGluZyBxdWV1ZSBpbnRvIHJlbGF0aXZlIHJpbmcgYnVmZmVyIGFuZCBzZXQKKwlhcHByb3ByaWF0ZSBBU0lDIHJlZ2lzdGVyIHRvIGtpY2sgaGFyZHdhcmUgZW5jcnlwdGlvbiBiZWZvcmUgcmVhbGx5CisJc2VudCBvdXQgdG8gYWlyLgorCisJQXJndW1lbnRzOgorCQlwQWQJCVBvaW50ZXIJdG8gb3VyIGFkYXB0ZXIKKwkJUE5ESVNfUEFDS0VUCVBvaW50ZXIgdG8gb3V0Z29pbmcgTmRpcyBmcmFtZQorCQlOdW1iZXJPZkZyYWcJTnVtYmVyIG9mIGZyYWdtZW50IHJlcXVpcmVkCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEICAgIFJUTVBUb1dpcmVsZXNzU3RhKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcEhlYWRlcjgwMl8zLAorICAgIElOICBVSU5UICAgICAgICAgICAgSGRyTGVuLAorCUlOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisgICAgSU4gIFVJTlQgICAgICAgICAgICBEYXRhTGVuLAorICAgIElOCUJPT0xFQU4JCQlpczR3YXlGcmFtZSkKKworeworCU5ESVNfU1RBVFVTICAgICBTdGF0dXM7CisJUE5ESVNfUEFDS0VUICAgIHBQYWNrZXQ7CisJVUNIQVIgICBJbmRleDsKKworCWRvCisJeworCQkvLyAxLiBidWlsZCBhIE5ESVMgcGFja2V0IGFuZCBjYWxsIFJUTVBTZW5kUGFja2V0KCk7CisJCS8vICAgIGJlIGNhcmVmdWwgYWJvdXQgaG93L3doZW4gdG8gcmVsZWFzZSB0aGlzIGludGVybmFsIGFsbG9jYXRlZCBORElTIFBBQ0tFVCBidWZmZXIKKwkJU3RhdHVzID0gUlRNUEFsbG9jYXRlTmRpc1BhY2tldChwQWQsICZwUGFja2V0LCBwSGVhZGVyODAyXzMsIEhkckxlbiwgcERhdGEsIERhdGFMZW4pOworCQlpZiAoU3RhdHVzICE9IE5ESVNfU1RBVFVTX1NVQ0NFU1MpCisJCQlicmVhazsKKworCQlpZiAoaXM0d2F5RnJhbWUpCisJCQlSVE1QX1NFVF9QQUNLRVRfQ0xFQVJfRUFQX0ZSQU1FKHBQYWNrZXQsIDEpOworCQllbHNlCisJCQlSVE1QX1NFVF9QQUNLRVRfQ0xFQVJfRUFQX0ZSQU1FKHBQYWNrZXQsIDApOworCisJCS8vIDIuIHNlbmQgb3V0IHRoZSBwYWNrZXQKKwkJU3RhdHVzID0gU1RBU2VuZFBhY2tldChwQWQsIHBQYWNrZXQpOworCQlpZihTdGF0dXMgPT0gTkRJU19TVEFUVVNfU1VDQ0VTUykKKwkJeworCQkJLy8gRGVxdWV1ZSBvbmUgZnJhbWUgZnJvbSBUeFN3UXVldWUwLi4zIHF1ZXVlIGFuZCBwcm9jZXNzIGl0CisJCQkvLyBUaGVyZSBhcmUgdGhyZWUgcGxhY2UgY2FsbGluZyBkZXF1ZXVlIGZvciBUWCByaW5nLgorCQkJLy8gMS4gSGVyZSwgcmlnaHQgYWZ0ZXIgcXVldWVpbmcgdGhlIGZyYW1lLgorCQkJLy8gMi4gQXQgdGhlIGVuZCBvZiBUeFJpbmdUeERvbmUgc2VydmljZSByb3V0aW5lLgorCQkJLy8gMy4gVXBvbiBORElTIGNhbGwgUlRNUFNlbmRQYWNrZXRzCisJCQlpZigoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpICYmCisJCQkJKCFSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfUkVTRVRfSU5fUFJPR1JFU1MpKSkKKwkJCXsKKwkJCQlmb3IoSW5kZXggPSAwOyBJbmRleCA8IDU7IEluZGV4ICsrKQorCQkJCQlpZihwQWQtPlR4U3dRdWV1ZVtJbmRleF0uTnVtYmVyID4gMCkKKwkJCQkJCVJUTVBEZVF1ZXVlUGFja2V0KHBBZCwgRkFMU0UsIEluZGV4LCBNQVhfVFhfUFJPQ0VTUyk7CisJCQl9CisJCX0KKwl9IHdoaWxlKEZBTFNFKTsKKworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgUm91dGluZSBEZXNjcmlwdGlvbjoKKyAgICBDaGVjayBTYW5pdHkgUlNOIElFIGZvcm0gQVAKKworICAgIEFyZ3VtZW50czoKKworICAgIFJldHVybiBWYWx1ZToKKworCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworQk9PTEVBTiBDaGVja1JTTklFKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcERhdGEsCisJSU4gIFVDSEFSICAgICAgICAgICBEYXRhTGVuLAorCU9VVAlVQ0hBUgkJCSpPZmZzZXQpCit7CisJUFVDSEFSICAgICAgICAgICAgICBwVklFOworCVVDSEFSICAgICAgICAgICAgICAgbGVuOworCVBFSURfU1RSVUNUICAgICAgICAgcEVpZDsKKwlCT09MRUFOCQkJCXJlc3VsdCA9IEZBTFNFOworCisJcFZJRSA9IHBEYXRhOworCWxlbgkgPSBEYXRhTGVuOworCSpPZmZzZXQgPSAwOworCisJd2hpbGUgKGxlbiA+IHNpemVvZihSU05JRTIpKQorCXsKKwkJcEVpZCA9IChQRUlEX1NUUlVDVCkgcFZJRTsKKwkJLy8gV1BBIFJTTiBJRQorCQlpZiAoKHBFaWQtPkVpZCA9PSBJRV9XUEEpICYmIChOZGlzRXF1YWxNZW1vcnkocEVpZC0+T2N0ZXQsIFdQQV9PVUksIDQpKSkKKwkJeworCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEgfHwgcEFkLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSAmJgorCQkJCShOZGlzRXF1YWxNZW1vcnkocFZJRSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05fSUUsIHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uUlNOSUVfTGVuKSkgJiYKKwkJCQkocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4gPT0gKHBFaWQtPkxlbiArIDIpKSkKKwkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQ2hlY2tSU05JRSA9PT4gV1BBL1dQQVBTSyBSU04gSUUgbWF0Y2hlZCBpbiBNc2cgMywgTGVuZ3RoKCVkKSBcbiIsIChwRWlkLT5MZW4gKyAyKSkpOworCQkJCQlyZXN1bHQgPSBUUlVFOworCQkJfQorCisJCQkqT2Zmc2V0ICs9IChwRWlkLT5MZW4gKyAyKTsKKwkJfQorCQkvLyBXUEEyIFJTTiBJRQorCQllbHNlIGlmICgocEVpZC0+RWlkID09IElFX1JTTikgJiYgKE5kaXNFcXVhbE1lbW9yeShwRWlkLT5PY3RldCArIDIsIFJTTl9PVUksIDMpKSkKKwkJeworCQkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyIHx8IHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spICYmCisJCQkJKE5kaXNFcXVhbE1lbW9yeShwVklFLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTl9JRSwgcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5SU05JRV9MZW4pKSAmJgorCQkJCShwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLlJTTklFX0xlbiA9PSAocEVpZC0+TGVuICsgMikpKQorCQkJeworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGVja1JTTklFID09PiBXUEEyL1dQQTJQU0sgUlNOIElFIG1hdGNoZWQgaW4gTXNnIDMsIExlbmd0aCglZCkgXG4iLCAocEVpZC0+TGVuICsgMikpKTsKKwkJCQkJcmVzdWx0ID0gVFJVRTsKKwkJCX0KKworCQkJKk9mZnNldCArPSAocEVpZC0+TGVuICsgMik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlicmVhazsKKwkJfQorCisJCXBWSUUgKz0gKHBFaWQtPkxlbiArIDIpOworCQlsZW4gIC09IChwRWlkLT5MZW4gKyAyKTsKKwl9CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJDaGVja1JTTklFID09PiBza2lwX29mZnNldCglZCkgXG4iLCAqT2Zmc2V0KSk7CisKKwlyZXR1cm4gcmVzdWx0OworCit9CisKKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgIFJvdXRpbmUgRGVzY3JpcHRpb246CisgICAgUGFyc2UgS0VZREFUQSBmaWVsZC4gIEtFWURBVEFbXSBNYXkgY29udGFpbiAyIFJTTiBJRSBhbmQgb3B0aW9uYWxseSBHVEsuCisgICAgR1RLICBpcyBlbmNhcHR1bGF0ZWQgaW4gS0RFIGZvcm1hdCBhdCAgcC44MyA4MDIuMTFpIEQxMAorCisgICAgQXJndW1lbnRzOgorCisgICAgUmV0dXJuIFZhbHVlOgorCisgICAgTm90ZToKKyAgICAgICAgODAyLjExaSBEMTAKKworICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0JPT0xFQU4gUGFyc2VLZXlEYXRhKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOICBQVUNIQVIgICAgICAgICAgcEtleURhdGEsCisJSU4gIFVDSEFSICAgICAgICAgICBLZXlEYXRhTGVuLAorCUlOCVVDSEFSCQkJYlBhaXJld2lzZSkKK3sKKyAgICBQS0RFX0VOQ0FQICAgICAgICAgIHBLREUgPSBOVUxMOworICAgIFBVQ0hBUiAgICAgICAgICAgICAgcE15S2V5RGF0YSA9IHBLZXlEYXRhOworICAgIFVDSEFSICAgICAgICAgICAgICAgS2V5RGF0YUxlbmd0aCA9IEtleURhdGFMZW47CisgICAgVUNIQVIgICAgICAgICAgICAgICBHVEtMRU47CisJVUNIQVIJCQkJc2tpcF9vZmZzZXQ7CisKKwkvLyBWZXJpZnkgVGhlIFJTTiBJRSBjb250YWluZWQgaW4gUGFpcmV3aXNlLU1zZyAzIGFuZCBza2lwIGl0CisJaWYgKGJQYWlyZXdpc2UpCisgICAgeworCQkvLyBDaGVjayBSU04gSUUgd2hldGhlciBpdCBpcyBXUEEyL1dQQTJQU0sKKwkJaWYgKCFDaGVja1JTTklFKHBBZCwgcEtleURhdGEsIEtleURhdGFMZW4sICZza2lwX29mZnNldCkpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIlBhcnNlS2V5RGF0YSA9PT4gV1BBMi9XUEEyUFNLIFJTTiBJRSBtaXNtYXRjaGVkIFxuIikpOworCQkJaGV4X2R1bXAoIkdldCBLRVlEQVRBIDoiLCBwS2V5RGF0YSwgS2V5RGF0YUxlbik7CisJCQlyZXR1cm4gRkFMU0U7CisgICAgCX0KKyAgICAJZWxzZQorCQl7CisJCQkvLyBza2lwIFJTTiBJRQorCQkJcE15S2V5RGF0YSArPSBza2lwX29mZnNldDsKKwkJCUtleURhdGFMZW5ndGggLT0gc2tpcF9vZmZzZXQ7CisKKwkJCS8vREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUGFyc2VLZXlEYXRhID09PiBXUEEyL1dQQTJQU0sgUlNOIElFIG1hdGNoZWQgaW4gTXNnIDMsIExlbmd0aCglZCkgXG4iLCBza2lwX29mZnNldCkpOworCQl9CisJfQorCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJQYXJzZUtleURhdGEgPT0+IEtleURhdGFMZW5ndGggJWQgd2l0aG91dCBSU05fSUUgXG4iLCBLZXlEYXRhTGVuZ3RoKSk7CisKKwkvLyBQYXJzZSBFS0QgZm9ybWF0CisJaWYgKEtleURhdGFMZW5ndGggPj0gOCkKKyAgICB7CisgICAgICAgIHBLREUgPSAoUEtERV9FTkNBUCkgcE15S2V5RGF0YTsKKyAgICB9CisJZWxzZQorICAgIHsKKwkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiRVJST1I6IEtleURhdGFMZW5ndGggaXMgdG9vIHNob3J0IFxuIikpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisKKwkvLyBTYW5pdHkgY2hlY2sgLSBzaGFyZWQga2V5IGluZGV4IHNob3VsZCBub3QgYmUgMAorCWlmIChwS0RFLT5HVEtFbmNhcC5LaWQgPT0gMCkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIkVSUk9SOiBHVEsgS2V5IGluZGV4IHplcm8gXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKwkvLyBTYW5pdHkgY2hlY2sgLSBLRUQgbGVuZ3RoCisJaWYgKEtleURhdGFMZW5ndGggPCAocEtERS0+TGVuICsgMikpCisgICAgeworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUjogVGhlIGxlbiBmcm9tIEtERSBpcyB0b28gc2hvcnQgXG4iKSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKwkvLyBHZXQgR1RLIGxlbmd0aCAtIHJlZmVyIHRvIElFRUUgODAyLjExaS0yMDA0IHAuODIKKwlHVEtMRU4gPSBwS0RFLT5MZW4gLTY7CisKKwlpZiAoR1RLTEVOIDwgTEVOX0FFU19LRVkpCisJeworCQlEQkdQUklOVChSVF9ERUJVR19FUlJPUiwgKCJFUlJPUjogR1RLIEtleSBsZW5ndGggaXMgdG9vIHNob3J0ICglZCkgXG4iLCBHVEtMRU4pKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCX0KKwllbHNlCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkdUSyBLZXkgd2l0aCBLREUgZm9ybWV0IGdvdCBpbmRleD0lZCwgbGVuPSVkIFxuIiwgcEtERS0+R1RLRW5jYXAuS2lkLCBHVEtMRU4pKTsKKworCS8vIFVwZGF0ZSBHVEsKKwkvLyBzZXQga2V5IG1hdGVyaWFsLCBUeE1pYyBhbmQgUnhNaWMgZm9yIFdQQVBTSworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U3RhQ2ZnLkdUSywgcEtERS0+R1RLRW5jYXAuR1RLLCAzMik7CisJcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkID0gcEtERS0+R1RLRW5jYXAuS2lkOworCisJLy8gVXBkYXRlIHNoYXJlZCBrZXkgdGFibGUKKwlOZGlzWmVyb01lbW9yeSgmcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKwlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleUxlbiA9IExFTl9US0lQX0VLOworCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LCBwS0RFLT5HVEtFbmNhcC5HVEssIExFTl9US0lQX0VLKTsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLlJ4TWljLCAmcEtERS0+R1RLRW5jYXAuR1RLWzE2XSwgTEVOX1RLSVBfUlhNSUNLKTsKKwlOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLlR4TWljLCAmcEtERS0+R1RLRW5jYXAuR1RLWzI0XSwgTEVOX1RLSVBfVFhNSUNLKTsKKworCS8vIFVwZGF0ZSBTaGFyZWQgS2V5IENpcGhlckFsZworCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisJaWYgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisJCXBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1RLSVA7CisJZWxzZSBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKwkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOworCisJcmV0dXJuIFRSVUU7CisKK30KKworLyoKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCVJvdXRpbmUgRGVzY3JpcHRpb246CisJCUNpc2NvIENDS00gUFJGIGZ1bmN0aW9uCisKKwlBcmd1bWVudHM6CisJCWtleQkJCQlDaXNjbyBCYXNlIFRyYW5zaWVudCBLZXkgKEJUSykKKwkJa2V5X2xlbgkJCVRoZSBrZXkgbGVuZ3RoIG9mIHRoZSBCVEsKKwkJZGF0YQkJCVJ1cXVlc3QgTnVtYmVyKFJOKSArIEJTU0lECisJCWRhdGFfbGVuCQlUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhCisJCW91dHB1dAkJCVN0b3JlIGZvciBQVEsoUGFpcndpc2UgdHJhbnNpZW50IGtleXMpCisJCWxlbgkJCQlUaGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCU5vdGU6CisJCTgwMi4xaQlBbm5leCBGLjkKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgQ0NLTVBSRigKKwlJTglVQ0hBUgkqa2V5LAorCUlOCUlOVAkJa2V5X2xlbiwKKwlJTglVQ0hBUgkqZGF0YSwKKwlJTglJTlQJCWRhdGFfbGVuLAorCU9VVAlVQ0hBUgkqb3V0cHV0LAorCUlOCUlOVAkJbGVuKQoreworCUlOVAkJaTsKKwlVQ0hBUglpbnB1dFsxMDI0XTsKKwlJTlQJCWN1cnJlbnRpbmRleCA9IDA7CisJSU5UCQl0b3RhbF9sZW47CisKKwlOZGlzTW92ZU1lbW9yeShpbnB1dCwgZGF0YSwgZGF0YV9sZW4pOworCXRvdGFsX2xlbiA9IGRhdGFfbGVuOworCWlucHV0W3RvdGFsX2xlbl0gPSAwOworCXRvdGFsX2xlbisrOworCWZvcgkoaSA9IDA7CWkgPAkobGVuICsgMTkpIC8gMjA7IGkrKykKKwl7CisJCUhNQUNfU0hBMShpbnB1dCwgdG90YWxfbGVuLAlrZXksIGtleV9sZW4sICZvdXRwdXRbY3VycmVudGluZGV4XSk7CisJCWN1cnJlbnRpbmRleCArPQkyMDsKKwkJaW5wdXRbdG90YWxfbGVuIC0gMV0rKzsKKwl9Cit9CisKKy8qCisJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKwlSb3V0aW5lIERlc2NyaXB0aW9uOgorCQlQcm9jZXNzIE1JQyBlcnJvciBpbmRpY2F0aW9uIGFuZCByZWNvcmQgTUlDIGVycm9yIHRpbWVyLgorCisJQXJndW1lbnRzOgorCQlwQWQgCVBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKwkJcFdwYUtleSAJCVBvaW50ZXIgdG8gdGhlIFdQQSBrZXkgc3RydWN0dXJlCisKKwlSZXR1cm4gVmFsdWU6CisJCU5vbmUKKworCUlSUUwgPSBESVNQQVRDSF9MRVZFTAorCisJTm90ZToKKworCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQJUlRNUFJlcG9ydE1pY0Vycm9yKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBDSVBIRVJfS0VZIAlwV3BhS2V5KQoreworCVVMT05HCU5vdzsKKyAgICBVQ0hBUiAgIHVuaWNhc3RLZXkgPSAocFdwYUtleS0+VHlwZSA9PSBQQUlSV0lTRV9LRVkgPyAxOjApOworCisJLy8gUmVjb3JkIExhc3QgTUlDIGVycm9yIHRpbWUgYW5kIGNvdW50CisJTm93ID0gamlmZmllczsKKwlpZiAocEFkLT5TdGFDZmcuTWljRXJyQ250ID09IDApCisJeworCQlwQWQtPlN0YUNmZy5NaWNFcnJDbnQrKzsKKwkJcEFkLT5TdGFDZmcuTGFzdE1pY0Vycm9yVGltZSA9IE5vdzsKKyAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUmVwbGF5Q291bnRlciwgOCk7CisJfQorCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLk1pY0VyckNudCA9PSAxKQorCXsKKwkJaWYgKChwQWQtPlN0YUNmZy5MYXN0TWljRXJyb3JUaW1lICsgKDYwICogT1NfSFopKSA8IE5vdykKKwkJeworCQkJLy8gVXBkYXRlIExhc3QgTUlDIGVycm9yIHRpbWUsIHRoaXMgZGlkIG5vdCB2aW9sYXRlIHR3byBNSUMgZXJyb3JzIHdpdGhpbiA2MCBzZWNvbmRzCisJCQlwQWQtPlN0YUNmZy5MYXN0TWljRXJyb3JUaW1lID0gTm93OworCQl9CisJCWVsc2UKKwkJeworCisJCQlpZiAocEFkLT5Db21tb25DZmcuYldpcmVsZXNzRXZlbnQpCisJCQkJUlRNUFNlbmRXaXJlbGVzc0V2ZW50KHBBZCwgSVdfQ09VTlRFUl9NRUFTVVJFU19FVkVOVF9GTEFHLCBwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkFkZHIsIEJTUzAsIDApOworCisJCQlwQWQtPlN0YUNmZy5MYXN0TWljRXJyb3JUaW1lID0gTm93OworCQkJLy8gVmlvbGF0ZSBNSUMgZXJyb3IgY291bnRzLCBNSUMgY291bnRlcm1lYXN1cmVzIGtpY2tzIGluCisJCQlwQWQtPlN0YUNmZy5NaWNFcnJDbnQrKzsKKwkJCS8vIFdlIHNoYWxsIGJsb2NrIGFsbCByZWNlcHRpb24KKwkJCS8vIFdlIHNoYWxsIGNsZWFuIGFsbCBUeCByaW5nIGFuZCBkaXNhc3NvaWNhdGUgZnJvbSBBUCBhZnRlciBuZXh0IEVBUE9MIGZyYW1lCisJCQkvLworCQkJLy8gTm8gbmVjZXNzYXJ5IHRvIGNsZWFuIGFsbCBUeCByaW5nLCBvbiBSVE1QSGFyZFRyYW5zbWl0IHdpbGwgc3RvcCBzZW5kaW5nIG5vbi04MDIuMVggRUFQT0wgcGFja2V0cworCQkJLy8gaWYgcEFkLT5TdGFDZmcuTWljRXJyQ250IGdyZWF0ZXIgdGhhbiAyLgorCQkJLy8KKwkJCS8vIFJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19CSyk7CisJCQkvLyBSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfQUNfQkUpOworCQkJLy8gUlRNUFJpbmdDbGVhblVwKHBBZCwgUUlEX0FDX1ZJKTsKKwkJCS8vIFJUTVBSaW5nQ2xlYW5VcChwQWQsIFFJRF9BQ19WTyk7CisJCQkvLyBSVE1QUmluZ0NsZWFuVXAocEFkLCBRSURfSENDQSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJLy8gTUlDIGVycm9yIGNvdW50ID49IDIKKwkJLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbgorCQk7CisJfQorICAgIE1sbWVFbnF1ZXVlKHBBZCwKKwkJCQlNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKKwkJCQlPSURfODAyXzExX01JQ19GQUlMVVJFX1JFUE9SVF9GUkFNRSwKKwkJCQkxLAorCQkJCSZ1bmljYXN0S2V5KTsKKworICAgIGlmIChwQWQtPlN0YUNmZy5NaWNFcnJDbnQgPT0gMikKKyAgICB7CisgICAgICAgIFJUTVBTZXRUaW1lcigmcEFkLT5TdGFDZmcuV3BhRGlzYXNzb2NBbmRCbG9ja0Fzc29jVGltZXIsIDEwMCk7CisgICAgfQorfQorCisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisjZGVmaW5lCUxFTkdUSF9FQVBfSCAgICA0CisvLyBJZiB0aGUgcmVjZWl2ZWQgZnJhbWUgaXMgRUFQLVBhY2tldCAsZmluZCBvdXQgaXRzIEVBUC1Db2RlIChSZXF1ZXN0KDB4MDEpLCBSZXNwb25zZSgweDAyKSwgU3VjY2VzcygweDAzKSwgRmFpbHVyZSgweDA0KSkuCitJTlQJICAgIFdwYUNoZWNrRWFwQ29kZSgKKwlJTiAgUFJUTVBfQURBUFRFUiAgIAkJcEFkLAorCUlOICBQVUNIQVIJCQkJcEZyYW1lLAorCUlOICBVU0hPUlQJCQkJRnJhbWVMZW4sCisJSU4gIFVTSE9SVAkJCQlPZmZTZXQpCit7CisKKwlQVUNIQVIJcERhdGE7CisJSU5UCXJlc3VsdCA9IDA7CisKKwlpZiggRnJhbWVMZW4gPCBPZmZTZXQgKyBMRU5HVEhfRUFQT0xfSCArIExFTkdUSF9FQVBfSCApCisJCXJldHVybiByZXN1bHQ7CisKKwlwRGF0YSA9IHBGcmFtZSArIE9mZlNldDsgLy8gc2tpcCBvZmZzZXQgYnl0ZXMKKworCWlmKCoocERhdGErMSkgPT0gRUFQUGFja2V0KSAJLy8gODAyLjF4IGhlYWRlciAtIFBhY2tldCBUeXBlCisJeworCQkgcmVzdWx0ID0gKihwRGF0YSs0KTsJCS8vIEVBUCBoZWFkZXIgLSBDb2RlCisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworVk9JRCAgICBXcGFTZW5kTWljRmFpbHVyZVRvV3BhU3VwcGxpY2FudCgKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgICBwQWQsCisgICAgSU4gIEJPT0xFQU4gICAgICAgICAgYlVuaWNhc3QpCit7CisgICAgdW5pb24gaXdyZXFfZGF0YSAgICB3cnF1OworICAgIGNoYXIgY3VzdG9tW0lXX0NVU1RPTV9NQVhdID0gezB9OworCisgICAgc3ByaW50ZihjdXN0b20sICJNTE1FLU1JQ0hBRUxNSUNGQUlMVVJFLmluZGljYXRpb24iKTsKKyAgICBpZiAoYlVuaWNhc3QpCisgICAgICAgIHNwcmludGYoY3VzdG9tLCAiJXMgdW5pY2FzdCIsIGN1c3RvbSk7CisgICAgd3JxdS5kYXRhLmxlbmd0aCA9IHN0cmxlbihjdXN0b20pOworICAgIHdpcmVsZXNzX3NlbmRfZXZlbnQocEFkLT5uZXRfZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgY3VzdG9tKTsKKworICAgIHJldHVybjsKK30KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKK1ZPSUQJV3BhTWljRmFpbHVyZVJlcG9ydEZyYW1lKAorCUlOICBQUlRNUF9BREFQVEVSICAgcEFkLAorCUlOIE1MTUVfUVVFVUVfRUxFTSAqRWxlbSkKK3sKKwlQVUNIQVIgICAgICAgICAgICAgIHBPdXRCdWZmZXIgPSBOVUxMOworCVVDSEFSICAgICAgICAgICAgICAgSGVhZGVyODAyXzNbMTRdOworCVVMT05HICAgICAgICAgICAgICAgRnJhbWVMZW4gPSAwOworCUVBUE9MX1BBQ0tFVCAgICAgICAgUGFja2V0OworCVVDSEFSICAgICAgICAgICAgICAgTWljWzE2XTsKKyAgICBCT09MRUFOICAgICAgICAgICAgIGJVbmljYXN0OworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiV3BhTWljRmFpbHVyZVJlcG9ydEZyYW1lIC0tLS0tPlxuIikpOworCisgICAgYlVuaWNhc3QgPSAoRWxlbS0+TXNnWzBdID09IDEgPyBUUlVFOkZBTFNFKTsKKwlwQWQtPlNlcXVlbmNlID0gKChwQWQtPlNlcXVlbmNlKSArIDEpICYgKE1BWF9TRVFfTlVNQkVSKTsKKworCS8vIGluaXQgODAyLjMgaGVhZGVyIGFuZCBGaWxsIFBhY2tldAorCU1BS0VfODAyXzNfSEVBREVSKEhlYWRlcjgwMl8zLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCwgcEFkLT5DdXJyZW50QWRkcmVzcywgRUFQT0wpOworCisJTmRpc1plcm9NZW1vcnkoJlBhY2tldCwgc2l6ZW9mKFBhY2tldCkpOworCVBhY2tldC5Qcm9WZXIJPSBFQVBPTF9WRVI7CisJUGFja2V0LlByb1R5cGUJPSBFQVBPTEtleTsKKworCVBhY2tldC5LZXlEZXNjLlR5cGUgPSBXUEExX0tFWV9ERVNDOworCisgICAgLy8gUmVxdWVzdCBmaWVsZCBwcmVzZW50ZWQKKyAgICBQYWNrZXQuS2V5RGVzYy5LZXlJbmZvLlJlcXVlc3QgPSAxOworCisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzICA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsKKwkJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlEZXNjVmVyID0gMjsKKwl9CisJZWxzZQkgIC8vIFRLSVAKKwl7CisJCVBhY2tldC5LZXlEZXNjLktleUluZm8uS2V5RGVzY1ZlciA9IDE7CisJfQorCisgICAgUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlUeXBlID0gKGJVbmljYXN0ID8gUEFJUldJU0VLRVkgOiBHUk9VUEtFWSk7CisKKwkvLyBLZXlNaWMgZmllbGQgcHJlc2VudGVkCisJUGFja2V0LktleURlc2MuS2V5SW5mby5LZXlNaWMgID0gMTsKKworICAgIC8vIEVycm9yIGZpZWxkIHByZXNlbnRlZAorCVBhY2tldC5LZXlEZXNjLktleUluZm8uRXJyb3IgID0gMTsKKworCS8vIFVwZGF0ZSBwYWNrZXQgbGVuZ3RoIGFmdGVyIGRlY2lkZSBLZXkgZGF0YSBwYXlsb2FkCisJUGFja2V0LkJvZHlfTGVuWzFdICA9IHNpemVvZihLRVlfREVTQ1JJUFRFUikgLSBNQVhfTEVOX09GX1JTTklFOworCisJLy8gS2V5IFJlcGxheSBDb3VudAorCU5kaXNNb3ZlTWVtb3J5KFBhY2tldC5LZXlEZXNjLlJlcGxheUNvdW50ZXIsIHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIExFTl9LRVlfREVTQ19SRVBMQVkpOworICAgIGluY19ieXRlX2FycmF5KHBBZC0+U3RhQ2ZnLlJlcGxheUNvdW50ZXIsIDgpOworCisJLy8gQ29udmVydCB0byBsaXR0bGUtZW5kaWFuIGZvcm1hdC4KKwkqKChVU0hPUlQgKikmUGFja2V0LktleURlc2MuS2V5SW5mbykgPSBjcHUybGUxNigqKChVU0hPUlQgKikmUGFja2V0LktleURlc2MuS2V5SW5mbykpOworCisKKwlNbG1lQWxsb2NhdGVNZW1vcnkocEFkLCAoUFVDSEFSICopJnBPdXRCdWZmZXIpOyAgLy8gYWxsb2NhdGUgbWVtb3J5CisJaWYocE91dEJ1ZmZlciA9PSBOVUxMKQorCXsKKwkJcmV0dXJuOworCX0KKworCS8vIFByZXBhcmUgRUFQT0wgZnJhbWUgZm9yIE1JQyBjYWxjdWxhdGlvbgorCS8vIEJlIGNhcmVmdWwsIG9ubHkgRUFQT0wgZnJhbWUgaXMgY291bnRlZCBmb3IgTUlDIGNhbGN1bGF0aW9uCisJTWFrZU91dGdvaW5nRnJhbWUocE91dEJ1ZmZlciwgICAgICAgICAgICAgICAmRnJhbWVMZW4sCisJCSAgICAgICAgICAgICAgUGFja2V0LkJvZHlfTGVuWzFdICsgNCwgICAmUGFja2V0LAorCQkgICAgICAgICAgICAgIEVORF9PRl9BUkdTKTsKKworCS8vIFByZXBhcmUgYW5kIEZpbGwgTUlDIHZhbHVlCisJTmRpc1plcm9NZW1vcnkoTWljLCBzaXplb2YoTWljKSk7CisJaWYocEFkLT5TdGFDZmcuV2VwU3RhdHVzICA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKQorCXsJLy8gQUVTCisgICAgICAgIFVDSEFSIGRpZ2VzdFsyMF0gPSB7MH07CisJCUhNQUNfU0hBMShwT3V0QnVmZmVyLCBGcmFtZUxlbiwgcEFkLT5TdGFDZmcuUFRLLCBMRU5fRUFQX01JQ0ssIGRpZ2VzdCk7CisJCU5kaXNNb3ZlTWVtb3J5KE1pYywgZGlnZXN0LCBMRU5fS0VZX0RFU0NfTUlDKTsKKwl9CisJZWxzZQorCXsJLy8gVEtJUAorCQlobWFjX21kNShwQWQtPlN0YUNmZy5QVEssICBMRU5fRUFQX01JQ0ssIHBPdXRCdWZmZXIsIEZyYW1lTGVuLCBNaWMpOworCX0KKwlOZGlzTW92ZU1lbW9yeShQYWNrZXQuS2V5RGVzYy5LZXlNaWMsIE1pYywgTEVOX0tFWV9ERVNDX01JQyk7CisKKyAgICBNYWtlT3V0Z29pbmdGcmFtZShwT3V0QnVmZmVyLCAgICAgICAgICAgCSZGcmFtZUxlbiwKKyAgICAJICAJCQlMRU5HVEhfODAyXzMsICAgICAJCQkmSGVhZGVyODAyXzMsCisgICAgCQkJCVBhY2tldC5Cb2R5X0xlblsxXSArIDQsICAgICAmUGFja2V0LAorICAgIAkJCQlFTkRfT0ZfQVJHUyk7CisKKwkvLyBvcHkgZnJhbWUgdG8gVHggcmluZyBhbmQgc2VuZCBNSUMgZmFpbHVyZSByZXBvcnQgZnJhbWUgdG8gYXV0aGVudGljYXRvcgorCVJUTVBUb1dpcmVsZXNzU3RhKHBBZCwgSGVhZGVyODAyXzMsIExFTkdUSF84MDJfMywgKFBVQ0hBUikmUGFja2V0LCBQYWNrZXQuQm9keV9MZW5bMV0gKyA0LCBGQUxTRSk7CisKKwlNbG1lRnJlZU1lbW9yeShwQWQsIChQVUNIQVIpcE91dEJ1ZmZlcik7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJXcGFNaWNGYWlsdXJlUmVwb3J0RnJhbWUgPC0tLS0tXG4iKSk7Cit9CisKKy8qKiBmcm9tIHdwYV9zdXBwbGljYW50CisgKiBpbmNfYnl0ZV9hcnJheSAtIEluY3JlbWVudCBhcmJpdHJhcnkgbGVuZ3RoIGJ5dGUgYXJyYXkgYnkgb25lCisgKiBAY291bnRlcjogUG9pbnRlciB0byBieXRlIGFycmF5CisgKiBAbGVuOiBMZW5ndGggb2YgdGhlIGNvdW50ZXIgaW4gYnl0ZXMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluY3JlbWVudHMgdGhlIGxhc3QgYnl0ZSBvZiB0aGUgY291bnRlciBieSBvbmUgYW5kIGNvbnRpbnVlcworICogcm9sbGluZyBvdmVyIHRvIG1vcmUgc2lnbmlmaWNhbnQgYnl0ZXMgaWYgdGhlIGJ5dGUgd2FzIGluY3JlbWVudGVkIGZyb20KKyAqIDB4ZmYgdG8gMHgwMC4KKyAqLwordm9pZCBpbmNfYnl0ZV9hcnJheShVQ0hBUiAqY291bnRlciwgaW50IGxlbikKK3sKKwlpbnQgcG9zID0gbGVuIC0gMTsKKwl3aGlsZSAocG9zID49IDApIHsKKwkJY291bnRlcltwb3NdKys7CisJCWlmIChjb3VudGVyW3Bvc10gIT0gMCkKKwkJCWJyZWFrOworCQlwb3MtLTsKKwl9Cit9CisKK1ZPSUQgV3BhRGlzYXNzb2NBcEFuZEJsb2NrQXNzb2MoCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMxLAorICAgIElOIFBWT0lEIEZ1bmN0aW9uQ29udGV4dCwKKyAgICBJTiBQVk9JRCBTeXN0ZW1TcGVjaWZpYzIsCisgICAgSU4gUFZPSUQgU3lzdGVtU3BlY2lmaWMzKQoreworICAgIFJUTVBfQURBUFRFUiAgICAgICAgICAgICAgICAqcEFkID0gKFBSVE1QX0FEQVBURVIpRnVuY3Rpb25Db250ZXh0OworICAgIE1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCAgICBEaXNhc3NvY1JlcTsKKworCS8vIGRpc2Fzc29jIGZyb20gY3VycmVudCBBUCBmaXJzdAorCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBSZXBvcnRNaWNFcnJvciAtIGRpc2Fzc29jaWF0ZSB3aXRoIGN1cnJlbnQgQVAgYWZ0ZXIgc2VuZGluZyBzZWNvbmQgY29udGludW91cyBFQVBPTCBmcmFtZVxuIikpOworCURpc2Fzc29jUGFybUZpbGwocEFkLCAmRGlzYXNzb2NSZXEsIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkLCBSRUFTT05fTUlDX0ZBSUxVUkUpOworCU1sbWVFbnF1ZXVlKHBBZCwgQVNTT0NfU1RBVEVfTUFDSElORSwgTVQyX01MTUVfRElTQVNTT0NfUkVRLCBzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKSwgJkRpc2Fzc29jUmVxKTsKKworCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfRElTQVNTT0M7CisJcEFkLT5TdGFDZmcuYkJsb2NrQXNzb2MgPSBUUlVFOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3N0YV9pb2N0bC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGFfaW9jdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzk0NTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9zdGFfaW9jdGwuYwpAQCAtMCwwICsxLDcyMDMgQEAKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUmFsaW5rIFRlY2ggSW5jLgorICogNUYuLCBOby4zNiwgVGFpeXVhbiBTdC4sIEpodWJlaSBDaXR5LAorICogSHNpbmNodSBDb3VudHkgMzAyLAorICogVGFpd2FuLCBSLk8uQy4KKyAqCisgKiAoYykgQ29weXJpZ2h0IDIwMDItMjAwNywgUmFsaW5rIFRlY2hub2xvZ3ksIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yICAgICAqCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAqCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgICAgTW9kdWxlIE5hbWU6CisgICAgc3RhX2lvY3RsLmMKKworICAgIEFic3RyYWN0OgorICAgIElPQ1RMIHJlbGF0ZWQgc3Vicm91dGluZXMKKworICAgIFJldmlzaW9uIEhpc3Rvcnk6CisgICAgV2hvICAgICAgICAgV2hlbiAgICAgICAgICBXaGF0CisgICAgLS0tLS0tLS0gICAgLS0tLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgUm9yeSBDaGVuICAgMDEtMDMtMjAwMyAgICBjcmVhdGVkCisJUm9yeSBDaGVuICAgMDItMTQtMjAwNSAgICBtb2RpZnkgdG8gc3VwcG9ydCBSVDYxCisqLworCisjaW5jbHVkZQkicnRfY29uZmlnLmgiCisKKyNpZmRlZiBEQkcKK2V4dGVybiBVTE9ORyAgICBSVERlYnVnTGV2ZWw7CisjZW5kaWYKKworI2RlZmluZSBOUl9XRVBfS0VZUyAJCQkJNAorI2RlZmluZSBXRVBfU01BTExfS0VZX0xFTiAJCQkoNDAvOCkKKyNkZWZpbmUgV0VQX0xBUkdFX0tFWV9MRU4gCQkJKDEwNC84KQorCisjZGVmaW5lIEdST1VQX0tFWV9OTyAgICAgICAgICAgICAgICA0CisKK2V4dGVybiBVQ0hBUiAgICBDaXBoZXJXcGEyVGVtcGxhdGVbXTsKK2V4dGVybiBVQ0hBUiAgICBDaXBoZXJXcGFQc2tUa2lwW107CitleHRlcm4gVUNIQVIgICAgQ2lwaGVyV3BhUHNrVGtpcExlbjsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9SVF9WRVJTSU9OX0lORk97CisgICAgVUNIQVIgICAgICAgRHJpdmVyVmVyc2lvblc7CisgICAgVUNIQVIgICAgICAgRHJpdmVyVmVyc2lvblg7CisgICAgVUNIQVIgICAgICAgRHJpdmVyVmVyc2lvblk7CisgICAgVUNIQVIgICAgICAgRHJpdmVyVmVyc2lvblo7CisgICAgVUlOVCAgICAgICAgRHJpdmVyQnVpbGRZZWFyOworICAgIFVJTlQgICAgICAgIERyaXZlckJ1aWxkTW9udGg7CisgICAgVUlOVCAgICAgICAgRHJpdmVyQnVpbGREYXk7Cit9IFJUX1ZFUlNJT05fSU5GTywgKlBSVF9WRVJTSU9OX0lORk87CisKK3N0cnVjdCBpd19wcml2X2FyZ3MgcHJpdnRhYltdID0geworeyBSVFBSSVZfSU9DVExfU0VULAorICBJV19QUklWX1RZUEVfQ0hBUiB8IDEwMjQsIDAsCisgICJzZXQifSwKKworeyBSVFBSSVZfSU9DVExfU0hPVywgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywKKyAgIiJ9LAoreyBSVFBSSVZfSU9DVExfU0hPVywgSVdfUFJJVl9UWVBFX0NIQVIgfCAxMDI0LCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLAorICAiIn0sCisvKiAtLS0gc3ViLWlvY3RscyBkZWZpbml0aW9ucyAtLS0gKi8KKyAgICB7IFNIT1dfQ09OTl9TVEFUVVMsCisJICAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLCAiY29ublN0YXR1cyIgfSwKKwl7IFNIT1dfRFJWSUVSX1ZFUklPTiwKKwkgIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssICJkcml2ZXJWZXIiIH0sCisgICAgeyBTSE9XX0JBX0lORk8sCisJICAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLCAiYmFpbmZvIiB9LAorCXsgU0hPV19ERVNDX0lORk8sCisJICAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IElXX1BSSVZfU0laRV9NQVNLLCAiZGVzY2luZm8iIH0sCisgICAgeyBSQUlPX09GRiwKKwkgIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssICJyYWRpb19vZmYiIH0sCisJeyBSQUlPX09OLAorCSAgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywgInJhZGlvX29uIiB9LAorI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCXsgU0hPV19ETFNfRU5UUllfSU5GTywKKwkgIDAsIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssICJkbHNlbnRyeWluZm8iIH0sCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJeyBTSE9XX0NGR19WQUxVRSwKKwkgIElXX1BSSVZfVFlQRV9DSEFSIHwgMTAyNCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywgInNob3ciIH0sCisvKiAtLS0gc3ViLWlvY3RscyByZWxhdGlvbnMgLS0tICovCisKKyNpZmRlZiBEQkcKK3sgUlRQUklWX0lPQ1RMX0JCUCwKKyAgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywKKyAgImJicCJ9LAoreyBSVFBSSVZfSU9DVExfTUFDLAorICBJV19QUklWX1RZUEVfQ0hBUiB8IDEwMjQsIElXX1BSSVZfVFlQRV9DSEFSIHwgMTAyNCwKKyAgIm1hYyJ9LAorI2lmZGVmIFJUMzB4eAoreyBSVFBSSVZfSU9DVExfUkYsCisgIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssIElXX1BSSVZfVFlQRV9DSEFSIHwgSVdfUFJJVl9TSVpFX01BU0ssCisgICJyZiJ9LAorI2VuZGlmIC8vIFJUMzB4eCAvLworeyBSVFBSSVZfSU9DVExfRTJQLAorICBJV19QUklWX1RZUEVfQ0hBUiB8IDEwMjQsIElXX1BSSVZfVFlQRV9DSEFSIHwgMTAyNCwKKyAgImUycCJ9LAorI2VuZGlmICAvKiBEQkcgKi8KKworeyBSVFBSSVZfSU9DVExfU1RBVElTVElDUywKKyAgMCwgSVdfUFJJVl9UWVBFX0NIQVIgfCBJV19QUklWX1NJWkVfTUFTSywKKyAgInN0YXQifSwKK3sgUlRQUklWX0lPQ1RMX0dTSVRFU1VSVkVZLAorICAwLCBJV19QUklWX1RZUEVfQ0hBUiB8IDEwMjQsCisgICJnZXRfc2l0ZV9zdXJ2ZXkifSwKKworCit9OworCitJTlQgU2V0X1NTSURfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworI2lmZGVmIFdNTV9TVVBQT1JUCitJTlQJU2V0X1dtbUNhcGFibGVfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlhcmcpOworI2VuZGlmCisKK0lOVCBTZXRfTmV0d29ya1R5cGVfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworSU5UIFNldF9BdXRoTW9kZV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCitJTlQgU2V0X0VuY3J5cFR5cGVfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworSU5UIFNldF9EZWZhdWx0S2V5SURfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworSU5UIFNldF9LZXkxX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7CisKK0lOVCBTZXRfS2V5Ml9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworCitJTlQgU2V0X0tleTNfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworSU5UIFNldF9LZXk0X1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7CisKK0lOVCBTZXRfV1BBUFNLX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7CisKKworSU5UIFNldF9QU01vZGVfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKK0lOVCBTZXRfV3BhX1N1cHBvcnQoCisgICAgSU4JUFJUTVBfQURBUFRFUglwQWQsCisJSU4JUFVDSEFSCQkJYXJnKTsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNpZmRlZiBEQkcKKworVk9JRCBSVE1QSW9jdGxNQUMoCisJSU4JUFJUTVBfQURBUFRFUglwQWRhcHRlciwKKwlJTglzdHJ1Y3QgaXdyZXEJKndycSk7CisKK1ZPSUQgUlRNUElvY3RsRTJQUk9NKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIHN0cnVjdCBpd3JlcSAgICAqd3JxKTsKKworI2lmZGVmIFJUMzB4eAorVk9JRCBSVE1QSW9jdGxSRigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBzdHJ1Y3QgaXdyZXEgICAgKndycSk7CisjZW5kaWYgLy8gUlQzMHh4IC8vCisjZW5kaWYgLy8gREJHIC8vCisKKworTkRJU19TVEFUVVMgUlRNUFdQQU5vbmVBZGRLZXlQcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOCVBWT0lECQkJcEJ1Zik7CisKK0lOVCBTZXRfRnJhZ1Rlc3RfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorSU5UIFNldF9UR25XaWZpVGVzdF9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKworSU5UIFNldF9Mb25nUmV0cnlMaW1pdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4JUFVDSEFSCQkJYXJnKTsKKworSU5UIFNldF9TaG9ydFJldHJ5TGltaXRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZGFwdGVyLAorCUlOCVBVQ0hBUgkJCWFyZyk7CisKKyNpZmRlZiBFWFRfQlVJTERfQ0hBTk5FTF9MSVNUCitJTlQgU2V0X0llZWU4MDIxMWRDbGllbnRNb2RlX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZyk7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworCisjaWZkZWYgQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVAorSU5UIFNldF9DYXJyaWVyRGV0ZWN0X1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpOworI2VuZGlmIC8vIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQgLy8KKworc3RhdGljIHN0cnVjdCB7CisJQ0hBUiAqbmFtZTsKKwlJTlQgKCpzZXRfcHJvYykoUFJUTVBfQURBUFRFUiBwQWRhcHRlciwgUFVDSEFSIGFyZyk7Cit9ICpQUlRNUF9QUklWQVRFX1NFVF9QUk9DLCBSVE1QX1BSSVZBVEVfU1VQUE9SVF9QUk9DW10gPSB7CisJeyJEcml2ZXJWZXJzaW9uIiwJCQkJU2V0X0RyaXZlclZlcnNpb25fUHJvY30sCisJeyJDb3VudHJ5UmVnaW9uIiwJCQkJU2V0X0NvdW50cnlSZWdpb25fUHJvY30sCisJeyJDb3VudHJ5UmVnaW9uQUJhbmQiLAkJCVNldF9Db3VudHJ5UmVnaW9uQUJhbmRfUHJvY30sCisJeyJTU0lEIiwJCQkJCQlTZXRfU1NJRF9Qcm9jfSwKKwl7IldpcmVsZXNzTW9kZSIsCQkJCVNldF9XaXJlbGVzc01vZGVfUHJvY30sCisJeyJUeEJ1cnN0IiwJCQkJCVNldF9UeEJ1cnN0X1Byb2N9LAorCXsiVHhQcmVhbWJsZSIsCQkJCVNldF9UeFByZWFtYmxlX1Byb2N9LAorCXsiVHhQb3dlciIsCQkJCQlTZXRfVHhQb3dlcl9Qcm9jfSwKKwl7IkNoYW5uZWwiLAkJCQkJU2V0X0NoYW5uZWxfUHJvY30sCisJeyJCR1Byb3RlY3Rpb24iLAkJCQlTZXRfQkdQcm90ZWN0aW9uX1Byb2N9LAorCXsiUlRTVGhyZXNob2xkIiwJCQkJU2V0X1JUU1RocmVzaG9sZF9Qcm9jfSwKKwl7IkZyYWdUaHJlc2hvbGQiLAkJCQlTZXRfRnJhZ1RocmVzaG9sZF9Qcm9jfSwKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwl7Ikh0QnciLAkJICAgICAgICAgICAgICAgIFNldF9IdEJ3X1Byb2N9LAorCXsiSHRNY3MiLAkJICAgICAgICAgICAgICAgIFNldF9IdE1jc19Qcm9jfSwKKwl7Ikh0R2kiLAkJICAgICAgICAgICAgICAgIFNldF9IdEdpX1Byb2N9LAorCXsiSHRPcE1vZGUiLAkJICAgICAgICAgICAgU2V0X0h0T3BNb2RlX1Byb2N9LAorCXsiSHRFeHRjaGEiLAkJICAgICAgICAgICAgU2V0X0h0RXh0Y2hhX1Byb2N9LAorCXsiSHRNcGR1RGVuc2l0eSIsCQkgICAgICAgIFNldF9IdE1wZHVEZW5zaXR5X1Byb2N9LAorCXsiSHRCYVdpblNpemUiLAkJICAgICAgICAJU2V0X0h0QmFXaW5TaXplX1Byb2N9LAorCXsiSHRSZGciLAkJICAgICAgICAJCVNldF9IdFJkZ19Qcm9jfSwKKwl7Ikh0QW1zZHUiLAkJICAgICAgICAJCVNldF9IdEFtc2R1X1Byb2N9LAorCXsiSHRBdXRvQmEiLAkJICAgICAgICAJU2V0X0h0QXV0b0JhX1Byb2N9LAorCXsiSHRCYURlY2xpbmUiLAkJCQkJU2V0X0JBRGVjbGluZV9Qcm9jfSwKKwl7Ikh0UHJvdGVjdCIsCQkgICAgICAgIAlTZXRfSHRQcm90ZWN0X1Byb2N9LAorCXsiSHRNaW1vUHMiLAkJICAgICAgICAJU2V0X0h0TWltb1BzX1Byb2N9LAorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjaWZkZWYgQUdHUkVHQVRJT05fU1VQUE9SVAorCXsiUGt0QWdncmVnYXRlIiwJCQkJU2V0X1BrdEFnZ3JlZ2F0ZV9Qcm9jfSwKKyNlbmRpZgorCisjaWZkZWYgV01NX1NVUFBPUlQKKwl7IldtbUNhcGFibGUiLAkJCQkJU2V0X1dtbUNhcGFibGVfUHJvY30sCisjZW5kaWYKKwl7IklFRUU4MDIxMUgiLAkJCQkJU2V0X0lFRUU4MDIxMUhfUHJvY30sCisgICAgeyJOZXR3b3JrVHlwZSIsICAgICAgICAgICAgICAgICBTZXRfTmV0d29ya1R5cGVfUHJvY30sCisJeyJBdXRoTW9kZSIsCQkJCQlTZXRfQXV0aE1vZGVfUHJvY30sCisJeyJFbmNyeXBUeXBlIiwJCQkJCVNldF9FbmNyeXBUeXBlX1Byb2N9LAorCXsiRGVmYXVsdEtleUlEIiwJCQkJU2V0X0RlZmF1bHRLZXlJRF9Qcm9jfSwKKwl7IktleTEiLAkJCQkJCVNldF9LZXkxX1Byb2N9LAorCXsiS2V5MiIsCQkJCQkJU2V0X0tleTJfUHJvY30sCisJeyJLZXkzIiwJCQkJCQlTZXRfS2V5M19Qcm9jfSwKKwl7IktleTQiLAkJCQkJCVNldF9LZXk0X1Byb2N9LAorCXsiV1BBUFNLIiwJCQkJCQlTZXRfV1BBUFNLX1Byb2N9LAorCXsiUmVzZXRDb3VudGVyIiwJCQkJU2V0X1Jlc2V0U3RhdENvdW50ZXJfUHJvY30sCisJeyJQU01vZGUiLCAgICAgICAgICAgICAgICAgICAgICBTZXRfUFNNb2RlX1Byb2N9LAorI2lmZGVmIERCRworCXsiRGVidWciLAkJCQkJCVNldF9EZWJ1Z19Qcm9jfSwKKyNlbmRpZgorCisjaWZkZWYgUkFMSU5LX0FURQorCXsiQVRFIiwJCQkJCQkJU2V0X0FURV9Qcm9jfSwKKwl7IkFURURBIiwJCQkJCQlTZXRfQVRFX0RBX1Byb2N9LAorCXsiQVRFU0EiLAkJCQkJCVNldF9BVEVfU0FfUHJvY30sCisJeyJBVEVCU1NJRCIsCQkJCQlTZXRfQVRFX0JTU0lEX1Byb2N9LAorCXsiQVRFQ0hBTk5FTCIsCQkJCQlTZXRfQVRFX0NIQU5ORUxfUHJvY30sCisJeyJBVEVUWFBPVzAiLAkJCQkJU2V0X0FURV9UWF9QT1dFUjBfUHJvY30sCisJeyJBVEVUWFBPVzEiLAkJCQkJU2V0X0FURV9UWF9QT1dFUjFfUHJvY30sCisJeyJBVEVUWEFOVCIsCQkJCQlTZXRfQVRFX1RYX0FudGVubmFfUHJvY30sCisJeyJBVEVSWEFOVCIsCQkJCQlTZXRfQVRFX1JYX0FudGVubmFfUHJvY30sCisJeyJBVEVUWEZSRVFPRkZTRVQiLAkJCQlTZXRfQVRFX1RYX0ZSRVFPRkZTRVRfUHJvY30sCisJeyJBVEVUWEJXIiwJCQkJCQlTZXRfQVRFX1RYX0JXX1Byb2N9LAorCXsiQVRFVFhMRU4iLAkJCQkJU2V0X0FURV9UWF9MRU5HVEhfUHJvY30sCisJeyJBVEVUWENOVCIsCQkJCQlTZXRfQVRFX1RYX0NPVU5UX1Byb2N9LAorCXsiQVRFVFhNQ1MiLAkJCQkJU2V0X0FURV9UWF9NQ1NfUHJvY30sCisJeyJBVEVUWE1PREUiLAkJCQkJU2V0X0FURV9UWF9NT0RFX1Byb2N9LAorCXsiQVRFVFhHSSIsCQkJCQkJU2V0X0FURV9UWF9HSV9Qcm9jfSwKKwl7IkFURVJYRkVSIiwJCQkJCVNldF9BVEVfUlhfRkVSX1Byb2N9LAorCXsiQVRFUlJGIiwJCQkJCQlTZXRfQVRFX1JlYWRfUkZfUHJvY30sCisJeyJBVEVXUkYxIiwJCQkJCQlTZXRfQVRFX1dyaXRlX1JGMV9Qcm9jfSwKKwl7IkFURVdSRjIiLAkJCQkJCVNldF9BVEVfV3JpdGVfUkYyX1Byb2N9LAorCXsiQVRFV1JGMyIsCQkJCQkJU2V0X0FURV9Xcml0ZV9SRjNfUHJvY30sCisJeyJBVEVXUkY0IiwJCQkJCQlTZXRfQVRFX1dyaXRlX1JGNF9Qcm9jfSwKKwl7IkFURUxERTJQIiwJCQkJICAgIFNldF9BVEVfTG9hZF9FMlBfUHJvY30sCisJeyJBVEVSRTJQIiwJCQkJCQlTZXRfQVRFX1JlYWRfRTJQX1Byb2N9LAorCXsiQVRFU0hPVyIsCQkJCQkJU2V0X0FURV9TaG93X1Byb2N9LAorCXsiQVRFSEVMUCIsCQkJCQkJU2V0X0FURV9IZWxwX1Byb2N9LAorCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwl7IlR4U3RvcCIsCQkJCQkJU2V0X1R4U3RvcF9Qcm9jfSwKKwl7IlJ4U3RvcCIsCQkJCQkJU2V0X1J4U3RvcF9Qcm9jfSwKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICB7IldwYVN1cHBvcnQiLCAgICAgICAgICAgICAgICAgIFNldF9XcGFfU3VwcG9ydH0sCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisKKworCXsiRml4ZWRUeE1vZGUiLCAgICAgICAgICAgICAgICAgU2V0X0ZpeGVkVHhNb2RlX1Byb2N9LAorI2lmZGVmIENPTkZJR19BUFNUQV9NSVhFRF9TVVBQT1JUCisJeyJPcE1vZGUiLAkJCQkJCVNldF9PcE1vZGVfUHJvY30sCisjZW5kaWYgLy8gQ09ORklHX0FQU1RBX01JWEVEX1NVUFBPUlQgLy8KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyAgICB7IlRHbldpZmlUZXN0IiwgICAgICAgICAgICAgICAgIFNldF9UR25XaWZpVGVzdF9Qcm9jfSwKKyAgICB7IkZvcmNlR0YiLAkJICAgICAgICAJCVNldF9Gb3JjZUdGX1Byb2N9LAorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworI2lmZGVmIFFPU19ETFNfU1VQUE9SVAorCXsiRGxzQWRkRW50cnkiLAkJCQkJU2V0X0Rsc0FkZEVudHJ5X1Byb2N9LAorCXsiRGxzVGVhckRvd25FbnRyeSIsCQkJU2V0X0Rsc1RlYXJEb3duRW50cnlfUHJvY30sCisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisJeyJMb25nUmV0cnkiLAkgICAgICAgIAkJU2V0X0xvbmdSZXRyeUxpbWl0X1Byb2N9LAorCXsiU2hvcnRSZXRyeSIsCSAgICAgICAgCQlTZXRfU2hvcnRSZXRyeUxpbWl0X1Byb2N9LAorI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwl7IjExZENsaWVudE1vZGUiLAkJCQlTZXRfSWVlZTgwMjExZENsaWVudE1vZGVfUHJvY30sCisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworI2lmZGVmIENBUlJJRVJfREVURUNUSU9OX1NVUFBPUlQKKwl7IkNhcnJpZXJEZXRlY3QiLAkJCQlTZXRfQ2FycmllckRldGVjdF9Qcm9jfSwKKyNlbmRpZiAvLyBDQVJSSUVSX0RFVEVDVElPTl9TVVBQT1JUIC8vCisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2U8LS0KKyNpZmRlZiBSVDMweHgKKwl7ImVmdXNlRnJlZU51bWJlciIsCQkJCXNldF9lRnVzZUdldEZyZWVCbG9ja0NvdW50X1Byb2N9LAorCXsiZWZ1c2VEdW1wIiwJCQkJCXNldF9lRnVzZWR1bXBfUHJvY30sCisJeyJlZnVzZUxvYWRGcm9tQmluIiwJCQkJc2V0X2VGdXNlTG9hZEZyb21CaW5fUHJvY30sCisjZW5kaWYgLy8gUlQzMHh4IC8vCisvLzIwMDgvMDkvMTE6S0ggYWRkIHRvIHN1cHBvcnQgZWZ1c2UtLT4KKwl7TlVMTCx9Cit9OworCisKK1ZPSUQgUlRNUEFkZEtleSgKKwlJTglQUlRNUF9BREFQVEVSCSAgICBwQWQsCisJSU4JUE5ESVNfODAyXzExX0tFWSAgICBwS2V5KQoreworCVVMT05HCQkJCUtleUlkeDsKKwlNQUNfVEFCTEVfRU5UUlkgIAkqcEVudHJ5OworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUlRNUEFkZEtleSAtLS0tLS0+XG4iKSk7CisKKwlpZiAocEFkLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorCXsKKwkJaWYgKHBLZXktPktleUluZGV4ICYgMHg4MDAwMDAwMCkKKwkJeworCQkgICAgaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkLT5TdGFDZmcuUE1LLCAzMik7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TdGFDZmcuUE1LLCBwS2V5LT5LZXlNYXRlcmlhbCwgcEtleS0+S2V5TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgIH0KKwkJICAgIC8vIFVwZGF0ZSBQVEsKKwkJICAgIE5kaXNaZXJvTWVtb3J5KCZwQWQtPlNoYXJlZEtleVtCU1MwXVswXSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKyAgICAgICAgICAgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleUxlbiA9IExFTl9US0lQX0VLOworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LCBwS2V5LT5LZXlNYXRlcmlhbCwgTEVOX1RLSVBfRUspOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgIGlmIChwQWQtPlN0YUNmZy5QYWlyQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMsIHBLZXktPktleU1hdGVyaWFsICsgTEVOX1RLSVBfRUssIExFTl9US0lQX1RYTUlDSyk7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uVHhNaWMsIHBLZXktPktleU1hdGVyaWFsICsgTEVOX1RLSVBfRUsgKyBMRU5fVEtJUF9UWE1JQ0ssIExFTl9US0lQX1JYTUlDSyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworICAgICAgICAgICAgeworICAgICAgICAgICAgCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlR4TWljLCBwS2V5LT5LZXlNYXRlcmlhbCArIExFTl9US0lQX0VLLCBMRU5fVEtJUF9UWE1JQ0spOworICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLlJ4TWljLCBwS2V5LT5LZXlNYXRlcmlhbCArIExFTl9US0lQX0VLICsgTEVOX1RLSVBfVFhNSUNLLCBMRU5fVEtJUF9SWE1JQ0spOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBEZWNpZGUgaXRzIENoaXBlckFsZworICAgICAgICAJaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKyAgICAgICAgCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKKyAgICAgICAgCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLlBhaXJDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZCkKKyAgICAgICAgCQlwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOworICAgICAgICAJZWxzZQorICAgICAgICAJCXBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworCisgICAgICAgICAgICAvLyBVcGRhdGUgdGhlc2UgcmVsYXRlZCBpbmZvcm1hdGlvbiB0byBNQUNfVEFCTEVfRU5UUlkKKyAgICAgICAgCXBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdOworICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEVudHJ5LT5QYWlyd2lzZUtleS5LZXksIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwgTEVOX1RLSVBfRUspOworICAgICAgICAJTmRpc01vdmVNZW1vcnkocEVudHJ5LT5QYWlyd2lzZUtleS5SeE1pYywgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uUnhNaWMsIExFTl9US0lQX1JYTUlDSyk7CisgICAgICAgIAlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LlR4TWljLCBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5UeE1pYywgTEVOX1RLSVBfVFhNSUNLKTsKKyAgICAgICAgCXBFbnRyeS0+UGFpcndpc2VLZXkuQ2lwaGVyQWxnID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnOworCisgICAgICAgIAkvLyBVcGRhdGUgcGFpcndpc2Uga2V5IGluZm9ybWF0aW9uIHRvIEFTSUMgU2hhcmVkIEtleSBUYWJsZQorICAgICAgICAJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwKKyAgICAgICAgCQkJCQkJICBCU1MwLAorICAgICAgICAJCQkJCQkgIDAsCisgICAgICAgIAkJCQkJCSAgcEFkLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnLAorICAgICAgICAJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwKKyAgICAgICAgCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5UeE1pYywKKyAgICAgICAgCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVswXS5SeE1pYyk7CisKKyAgICAgICAgCS8vIFVwZGF0ZSBBU0lDIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZQorICAgICAgICAJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWQsCisgICAgICAgIAkJCQkJCQkgIEJTUzAsCisgICAgICAgIAkJCQkJCQkgIDAsCisgICAgICAgIAkJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZywKKyAgICAgICAgCQkJCQkJCSAgcEVudHJ5KTsKKworICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gc2V0IDgwMi4xeCBwb3J0IGNvbnRyb2wKKwkgICAgICAgICAgICAvL3BBZC0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJCQkJU1RBX1BPUlRfU0VDVVJFRChwQWQpOworCisgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGUgQ29ubmVjdGVkIGZvciBHVUkKKyAgICAgICAgICAgICAgICBwQWQtPkluZGljYXRlTWVkaWFTdGF0ZSA9IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkOworICAgICAgICAgICAgfQorCQl9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVXBkYXRlIEdUSworICAgICAgICAgICAgcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkID0gKHBLZXktPktleUluZGV4ICYgMHhGRik7CisgICAgICAgICAgICBOZGlzWmVyb01lbW9yeSgmcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXSwgc2l6ZW9mKENJUEhFUl9LRVkpKTsKKyAgICAgICAgICAgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5TGVuID0gTEVOX1RLSVBfRUs7CisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleSwgcEtleS0+S2V5TWF0ZXJpYWwsIExFTl9US0lQX0VLKTsKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuR3JvdXBDaXBoZXIgPT0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLlJ4TWljLCBwS2V5LT5LZXlNYXRlcmlhbCArIExFTl9US0lQX0VLLCBMRU5fVEtJUF9UWE1JQ0spOworICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uVHhNaWMsIHBLZXktPktleU1hdGVyaWFsICsgTEVOX1RLSVBfRUsgKyBMRU5fVEtJUF9UWE1JQ0ssIExFTl9US0lQX1JYTUlDSyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworICAgICAgICAgICAgeworICAgICAgICAgICAgCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uVHhNaWMsIHBLZXktPktleU1hdGVyaWFsICsgTEVOX1RLSVBfRUssIExFTl9US0lQX1RYTUlDSyk7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5SeE1pYywgcEtleS0+S2V5TWF0ZXJpYWwgKyBMRU5fVEtJUF9FSyArIExFTl9US0lQX1RYTUlDSywgTEVOX1RLSVBfUlhNSUNLKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVXBkYXRlIFNoYXJlZCBLZXkgQ2lwaGVyQWxnCisgICAgCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworICAgIAkJaWYgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uMkVuYWJsZWQpCisgICAgCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfVEtJUDsKKyAgICAJCWVsc2UgaWYgKHBBZC0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID09IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQpCisgICAgCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bcEFkLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5DaXBoZXJBbGcgPSBDSVBIRVJfQUVTOworCisgICAgICAgICAgICAvLyBVcGRhdGUgZ3JvdXAga2V5IGluZm9ybWF0aW9uIHRvIEFTSUMgU2hhcmVkIEtleSBUYWJsZQorICAgICAgICAJQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZCwKKyAgICAgICAgCQkJCQkJICBCU1MwLAorICAgICAgICAJCQkJCQkgIHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCwKKyAgICAgICAgCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLkNpcGhlckFsZywKKyAgICAgICAgCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleSwKKyAgICAgICAgCQkJCQkJICBwQWQtPlNoYXJlZEtleVtCU1MwXVtwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWRdLlR4TWljLAorICAgICAgICAJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uUnhNaWMpOworCisgICAgICAgIAkvLyBVcGRhdGUgQVNJQyBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUKKyAgICAgICAgCVJUTVBBZGRXY2lkQXR0cmlidXRlRW50cnkocEFkLAorICAgICAgICAJCQkJCQkJICBCU1MwLAorICAgICAgICAJCQkJCQkJICBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQsCisgICAgICAgIAkJCQkJCQkgIHBBZC0+U2hhcmVkS2V5W0JTUzBdW3BBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uQ2lwaGVyQWxnLAorICAgICAgICAJCQkJCQkJICBOVUxMKTsKKworICAgICAgICAgICAgLy8gc2V0IDgwMi4xeCBwb3J0IGNvbnRyb2wKKwkgICAgICAgIC8vcEFkLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwkJCVNUQV9QT1JUX1NFQ1VSRUQocEFkKTsKKworICAgICAgICAgICAgLy8gSW5kaWNhdGUgQ29ubmVjdGVkIGZvciBHVUkKKyAgICAgICAgICAgIHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVDb25uZWN0ZWQ7CisgICAgICAgIH0KKwl9CisJZWxzZQkvLyBkeW5hbWljIFdFUCBmcm9tIHdwYV9zdXBwbGljYW50CisJeworCQlVQ0hBUglDaXBoZXJBbGc7CisgICAgCVBVQ0hBUglLZXk7CisKKwkJaWYocEtleS0+S2V5TGVuZ3RoID09IDMyKQorCQkJZ290byBlbmQ7CisKKwkJS2V5SWR4ID0gcEtleS0+S2V5SW5kZXggJiAweDBmZmZmZmZmOworCisJCWlmIChLZXlJZHggPCA0KQorCQl7CisJCQkvLyBpdCBpcyBhIGRlZmF1bHQgc2hhcmVkIGtleSwgZm9yIFBhaXJ3aXNlIGtleSBzZXR0aW5nCisJCQlpZiAocEtleS0+S2V5SW5kZXggJiAweDgwMDAwMDAwKQorCQkJeworCQkJCXBFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZCwgcEtleS0+QlNTSUQpOworCisJCQkJaWYgKHBFbnRyeSkKKwkJCQl7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUTVBBZGRLZXk6IFNldCBQYWlyLXdpc2UgS2V5XG4iKSk7CisKKwkJCQkJLy8gc2V0IGtleSBtYXRlcmlhbCBhbmQga2V5IGxlbmd0aAorIAkJCQkJcEVudHJ5LT5QYWlyd2lzZUtleS5LZXlMZW4gPSAoVUNIQVIpcEtleS0+S2V5TGVuZ3RoOworCQkJCQlOZGlzTW92ZU1lbW9yeShwRW50cnktPlBhaXJ3aXNlS2V5LktleSwgJnBLZXktPktleU1hdGVyaWFsLCBwS2V5LT5LZXlMZW5ndGgpOworCisJCQkJCS8vIHNldCBDaXBoZXIgdHlwZQorCQkJCQlpZiAocEtleS0+S2V5TGVuZ3RoID09IDUpCisJCQkJCQlwRW50cnktPlBhaXJ3aXNlS2V5LkNpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKwkJCQkJZWxzZQorCQkJCQkJcEVudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworCisJCQkJCS8vIEFkZCBQYWlyLXdpc2Uga2V5IHRvIEFzaWMKKwkJCQkJQXNpY0FkZFBhaXJ3aXNlS2V5RW50cnkoCisJCQkJCQlwQWQsCisJCQkJCQlwRW50cnktPkFkZHIsCisJCQkJCQkoVUNIQVIpcEVudHJ5LT5BaWQsCisgICAgICAgICAgICAgICAgCQkmcEVudHJ5LT5QYWlyd2lzZUtleSk7CisKKwkJCQkJLy8gdXBkYXRlIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZSBmb3IgdGhpcyBlbnRyeQorCQkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KAorCQkJCQkJcEFkLAorCQkJCQkJQlNTMCwKKwkJCQkJCUtleUlkeCwgLy8gVGhlIHZhbHVlIG1heSBiZSBub3QgemVybworCQkJCQkJcEVudHJ5LT5QYWlyd2lzZUtleS5DaXBoZXJBbGcsCisJCQkJCQlwRW50cnkpOworCisJCQkJfQorCQkJfQorCQkJZWxzZQorICAgICAgICAgICAgeworCQkJCS8vIERlZmF1bHQga2V5IGZvciB0eCAoc2hhcmVkIGtleSkKKwkJCQlwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSAoVUNIQVIpIEtleUlkeDsKKworCQkJCS8vIHNldCBrZXkgbWF0ZXJpYWwgYW5kIGtleSBsZW5ndGgKKwkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleUxlbiA9IChVQ0hBUikgcEtleS0+S2V5TGVuZ3RoOworCQkJCU5kaXNNb3ZlTWVtb3J5KHBBZC0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5LCAmcEtleS0+S2V5TWF0ZXJpYWwsIHBLZXktPktleUxlbmd0aCk7CisKKwkJCQkvLyBTZXQgQ2lwZXIgdHlwZQorCQkJCWlmIChwS2V5LT5LZXlMZW5ndGggPT0gNSkKKwkJCQkJcEFkLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisJCQkJZWxzZQorCQkJCQlwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisKKyAgICAJCQlDaXBoZXJBbGcgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZzsKKyAgICAJCQlLZXkgPSBwQWQtPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleTsKKworCQkJCS8vIFNldCBHcm91cCBrZXkgbWF0ZXJpYWwgdG8gQXNpYworICAgIAkJCUFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWQsIEJTUzAsIEtleUlkeCwgQ2lwaGVyQWxnLCBLZXksIE5VTEwsIE5VTEwpOworCisJCQkJLy8gVXBkYXRlIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZSBmb3IgdGhpcyBncm91cCBrZXkgdGFibGUKKwkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZCwgQlNTMCwgS2V5SWR4LCBDaXBoZXJBbGcsIE5VTEwpOworCisJCQl9CisJCX0KKwl9CitlbmQ6CisJcmV0dXJuOworfQorCitjaGFyICogcnRzdHJjaHIoY29uc3QgY2hhciAqIHMsIGludCBjKQoreworICAgIGZvcig7ICpzICE9IChjaGFyKSBjOyArK3MpCisgICAgICAgIGlmICgqcyA9PSAnXDAnKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIChjaGFyICopIHM7Cit9CisKKy8qCitUaGlzIGlzIHJlcXVpcmVkIGZvciBMaW5FWDIwMDQva2VybmVsMi42LjcgdG8gcHJvdmlkZSBpd2xpc3Qgc2Nhbm5pbmcgZnVuY3Rpb24KKyovCisKK2ludAorcnRfaW9jdGxfZ2l3bmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICBjaGFyICpuYW1lLCBjaGFyICpleHRyYSkKK3sKKy8vCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKyNpZmRlZiBSVDI4NzAKKwlzdHJuY3B5KG5hbWUsICJSVDI4NzAgV2lyZWxlc3MiLCBJRk5BTVNJWik7CisjZW5kaWYgLy8gUlQyODcwIC8vCisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9zaXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisJaW50IAljaGFuID0gLTE7CisKKyAgICAvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIGlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAgICAgcmV0dXJuIC1FTkVURE9XTjsKKyAgICB9CisKKworCWlmIChmcmVxLT5lID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZigoZnJlcS0+ZSA9PSAwKSAmJiAoZnJlcS0+bSA8PSAxMDAwKSkKKwkJY2hhbiA9IGZyZXEtPm07CS8vIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIKKwllbHNlCisJCU1BUF9LSFpfVE9fQ0hBTk5FTF9JRCggKGZyZXEtPm0gLzEwMCkgLCBjaGFuKTsgLy8gU2V0dGluZyBieSBmcmVxdWVuY3kgLSBzZWFyY2ggdGhlIHRhYmxlICwgbGlrZSAyLjQxMkcsIDIuNDIyRywKKworICAgIGlmIChDaGFubmVsU2FuaXR5KHBBZGFwdGVyLCBjaGFuKSA9PSBUUlVFKQorICAgIHsKKwlwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwgPSBjaGFuOworCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SLCAoIj09PnJ0X2lvY3RsX3Npd2ZyZXE6OlNJT0NTSVdGUkVRW2NtZD0weCV4XSAoQ2hhbm5lbD0lZClcbiIsIFNJT0NTSVdGUkVRLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQoraW50IHJ0X2lvY3RsX2dpd2ZyZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJICAgc3RydWN0IGl3X2ZyZXEgKmZyZXEsIGNoYXIgKmV4dHJhKQoreworICAgIFZJUlRVQUxfQURBUFRFUiAqcFZpcnR1YWxBZCA9IE5VTEw7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlcjsKKwlVQ0hBUiBjaDsKKwlVTE9ORwltOworCisJaWYgKGRldi0+cHJpdl9mbGFncyA9PSBJTlRfTUFJTikKKwl7CisJCXBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCX0KKwllbHNlCisJeworCQlwVmlydHVhbEFkID0gZGV2LT5tbF9wcml2OworCQlwQWRhcHRlciA9IHBWaXJ0dWFsQWQtPlJ0bXBEZXYtPm1sX3ByaXY7CisJfQorCisJaWYgKHBBZGFwdGVyID09IE5VTEwpCisJeworCQkvKiBpZiAxc3Qgb3BlbiBmYWlsLCBwQWQgd2lsbCBiZSBmcmVlOworCQkgICBTbyB0aGUgbmV0X2Rldi0+bWxfcHJpdiB3aWxsIGJlIE5VTEwgaW4gMnJkIG9wZW4gKi8KKwkJcmV0dXJuIC1FTkVURE9XTjsKKwl9CisKKwkJY2ggPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWw7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIj09PnJ0X2lvY3RsX2dpd2ZyZXEgICVkXG4iLCBjaCkpOworCisgICAgTUFQX0NIQU5ORUxfSURfVE9fS0haKGNoLCBtKTsKKwlmcmVxLT5tID0gbSAqIDEwMDsKKwlmcmVxLT5lID0gMTsKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX3Npd21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJICAgX191MzIgKm1vZGUsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIGlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICB7CisgICAgCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAgICAJcmV0dXJuIC1FTkVURE9XTjsKKyAgICB9CisKKwlzd2l0Y2ggKCptb2RlKQorCXsKKwkJY2FzZSBJV19NT0RFX0FESE9DOgorCQkJU2V0X05ldHdvcmtUeXBlX1Byb2MocEFkYXB0ZXIsICJBZGhvYyIpOworCQkJYnJlYWs7CisJCWNhc2UgSVdfTU9ERV9JTkZSQToKKwkJCVNldF9OZXR3b3JrVHlwZV9Qcm9jKHBBZGFwdGVyLCAiSW5mcmEiKTsKKwkJCWJyZWFrOworI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPiBLRVJORUxfVkVSU0lPTigyLDQsMjApKQorICAgICAgICBjYXNlIElXX01PREVfTU9OSVRPUjoKKwkJCVNldF9OZXR3b3JrVHlwZV9Qcm9jKHBBZGFwdGVyLCAiTW9uaXRvciIpOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT5ydF9pb2N0bF9zaXdtb2RlOjpTSU9DU0lXTU9ERSAodW5rbm93biAlZClcbiIsICptb2RlKSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvLyBSZXNldCBSYWxpbmsgc3VwcGxpY2FudCB0byBub3QgdXNlLCBpdCB3aWxsIGJlIHNldCB0byBzdGFydCB3aGVuIFVJIHNldCBQTUsga2V5CisJcEFkYXB0ZXItPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX05PVFVTRTsKKworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfZ2l3bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCWlmIChBREhPQ19PTihwQWRhcHRlcikpCisJCSptb2RlID0gSVdfTU9ERV9BREhPQzsKKyAgICBlbHNlIGlmIChJTkZSQV9PTihwQWRhcHRlcikpCisJCSptb2RlID0gSVdfTU9ERV9JTkZSQTsKKyNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw0LDIwKSkKKyAgICBlbHNlIGlmIChNT05JVE9SX09OKHBBZGFwdGVyKSkKKyAgICB7CisgICAgICAgICptb2RlID0gSVdfTU9ERV9NT05JVE9SOworICAgIH0KKyNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgKm1vZGUgPSBJV19NT0RFX0FVVE87CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT5ydF9pb2N0bF9naXdtb2RlKG1vZGU9JWQpXG4iLCAqbW9kZSkpOworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfc2l3c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICBjaGFyICpuYW1lLCBjaGFyICpleHRyYSkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCisJLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKyAgICAJaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorICAgIAl7CisgICAgICAgIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgICAgIAlyZXR1cm4gLUVORVRET1dOOworICAgIAl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX2dpd3NlbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJICAgY2hhciAqbmFtZSwgY2hhciAqZXh0cmEpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKKwl1MTYgdmFsOworCWludCBpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgiPT09PnJ0X2lvY3RsX2dpd3JhbmdlXG4iKSk7CisJZGF0YS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSk7CisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CisKKwlyYW5nZS0+dHhwb3dlcl9jYXBhID0gSVdfVFhQT1dfREJNOworCisJaWYgKElORlJBX09OKHBBZGFwdGVyKXx8QURIT0NfT04ocEFkYXB0ZXIpKQorCXsKKwkJcmFuZ2UtPm1pbl9wbXAgPSAxICogMTAyNDsKKwkJcmFuZ2UtPm1heF9wbXAgPSA2NTUzNSAqIDEwMjQ7CisJCXJhbmdlLT5taW5fcG10ID0gMSAqIDEwMjQ7CisJCXJhbmdlLT5tYXhfcG10ID0gMTAwMCAqIDEwMjQ7CisJCXJhbmdlLT5wbXBfZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0Q7CisJCXJhbmdlLT5wbXRfZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOworCQlyYW5nZS0+cG1fY2FwYSA9IElXX1BPV0VSX1BFUklPRCB8IElXX1BPV0VSX1RJTUVPVVQgfAorCQkJSVdfUE9XRVJfVU5JQ0FTVF9SIHwgSVdfUE9XRVJfQUxMX1I7CisJfQorCisJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CisJcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMTQ7CisKKwlyYW5nZS0+cmV0cnlfY2FwYSA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5yZXRyeV9mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCXJhbmdlLT5taW5fcmV0cnkgPSAwOworCXJhbmdlLT5tYXhfcmV0cnkgPSAyNTU7CisKKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gIHBBZGFwdGVyLT5DaGFubmVsTGlzdE51bTsKKworCXZhbCA9IDA7CisJZm9yIChpID0gMTsgaSA8PSByYW5nZS0+bnVtX2NoYW5uZWxzOyBpKyspCisJeworCQl1MzIgbTsKKwkJcmFuZ2UtPmZyZXFbdmFsXS5pID0gcEFkYXB0ZXItPkNoYW5uZWxMaXN0W2ktMV0uQ2hhbm5lbDsKKwkJTUFQX0NIQU5ORUxfSURfVE9fS0haKHBBZGFwdGVyLT5DaGFubmVsTGlzdFtpLTFdLkNoYW5uZWwsIG0pOworCQlyYW5nZS0+ZnJlcVt2YWxdLm0gPSBtICogMTAwOyAvKiBIWiAqLworCisJCXJhbmdlLT5mcmVxW3ZhbF0uZSA9IDE7CisJCXZhbCsrOworCQlpZiAodmFsID09IElXX01BWF9GUkVRVUVOQ0lFUykKKwkJCWJyZWFrOworCX0KKwlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IHZhbDsKKworCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMTAwOyAvKiB3aGF0IGlzIGNvcnJlY3QgbWF4PyBUaGlzIHdhcyBub3QKKwkJCQkJKiBkb2N1bWVudGVkIGV4YWN0bHkuIEF0IGxlYXN0CisJCQkJCSogNjkgaGFzIGJlZW4gb2JzZXJ2ZWQuICovCisJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsgLyogZEIgKi8KKwlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAwOyAvKiBkQiAqLworCisJLyogV2hhdCB3b3VsZCBiZSBzdWl0YWJsZSB2YWx1ZXMgZm9yICJhdmVyYWdlL3R5cGljYWwiIHF1YWw/ICovCisJcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSAyMDsKKwlyYW5nZS0+YXZnX3F1YWwubGV2ZWwgPSAtNjA7CisJcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gLTk1OworCXJhbmdlLT5zZW5zaXRpdml0eSA9IDM7CisKKwlyYW5nZS0+bWF4X2VuY29kaW5nX3Rva2VucyA9IE5SX1dFUF9LRVlTOworCXJhbmdlLT5udW1fZW5jb2Rpbmdfc2l6ZXMgPSAyOworCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsKKwlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOworCisJcmFuZ2UtPm1pbl9ydHMgPSAwOworCXJhbmdlLT5tYXhfcnRzID0gMjM0NzsKKwlyYW5nZS0+bWluX2ZyYWcgPSAyNTY7CisJcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKKworI2lmIFdJUkVMRVNTX0VYVCA+IDE3CisJLyogSVdfRU5DX0NBUEFfKiBiaXQgZmllbGQgKi8KKwlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEEgfCBJV19FTkNfQ0FQQV9XUEEyIHwKKwkJCQkJSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgfCBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUDsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9zaXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisgICAgTkRJU184MDJfMTFfTUFDX0FERFJFU1MgQnNzaWQ7CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorCWlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKwl7CisgICAgICAgCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAgICAJcmV0dXJuIC1FTkVURE9XTjsKKyAgICB9CisKKwlpZiAocEFkYXB0ZXItPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlICE9IENOVExfSURMRSkKKyAgICB7CisgICAgICAgIFJUMjhYWF9NTE1FX1JFU0VUX1NUQVRFX01BQ0hJTkUocEFkYXB0ZXIpOworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgTUxNRSBidXN5LCByZXNldCBNTE1FIHN0YXRlIG1hY2hpbmUgISEhXG4iKSk7CisgICAgfQorCisgICAgLy8gdGVsbCBDTlRMIHN0YXRlIG1hY2hpbmUgdG8gY2FsbCBOZGlzTVNldEluZm9ybWF0aW9uQ29tcGxldGUoKSBhZnRlciBjb21wbGV0aW5nCisgICAgLy8gdGhpcyByZXF1ZXN0LCBiZWNhdXNlIHRoaXMgcmVxdWVzdCBpcyBpbml0aWF0ZWQgYnkgTkRJUy4KKyAgICBwQWRhcHRlci0+TWxtZUF1eC5DdXJyUmVxSXNGcm9tTmRpcyA9IEZBTFNFOworCS8vIFByZXZlbnQgdG8gY29ubmVjdCBBUCBhZ2FpbiBpbiBTVEFNbG1lUGVyaW9kaWNFeGVjCisJcEFkYXB0ZXItPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW49IDMyOworCisgICAgbWVtc2V0KEJzc2lkLCAwLCBNQUNfQUREUl9MRU4pOworICAgIG1lbWNweShCc3NpZCwgYXBfYWRkci0+c2FfZGF0YSwgTUFDX0FERFJfTEVOKTsKKyAgICBNbG1lRW5xdWV1ZShwQWRhcHRlciwKKyAgICAgICAgICAgICAgICBNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKKyAgICAgICAgICAgICAgICBPSURfODAyXzExX0JTU0lELAorICAgICAgICAgICAgICAgIHNpemVvZihORElTXzgwMl8xMV9NQUNfQUREUkVTUyksCisgICAgICAgICAgICAgICAgKFZPSUQgKikmQnNzaWQpOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU9DVEw6OlNJT0NTSVdBUCAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKyAgICAgICAgQnNzaWRbMF0sIEJzc2lkWzFdLCBCc3NpZFsyXSwgQnNzaWRbM10sIEJzc2lkWzRdLCBCc3NpZFs1XSkpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9naXdhcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwlpZiAoSU5GUkFfT04ocEFkYXB0ZXIpIHx8IEFESE9DX09OKHBBZGFwdGVyKSkKKwl7CisJCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJbWVtY3B5KGFwX2FkZHItPnNhX2RhdGEsICZwQWRhcHRlci0+Q29tbW9uQ2ZnLkJzc2lkLCBFVEhfQUxFTik7CisJfQorI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAvLyBBZGQgZm9yIFJUMjg3MAorICAgIGVsc2UgaWYgKHBBZGFwdGVyLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQICE9IFdQQV9TVVBQTElDQU5UX0RJU0FCTEUpCisgICAgeworICAgICAgICBhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisgICAgICAgIG1lbWNweShhcF9hZGRyLT5zYV9kYXRhLCAmcEFkYXB0ZXItPk1sbWVBdXguQnNzaWQsIEVUSF9BTEVOKTsKKyAgICB9CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCWVsc2UKKwl7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklPQ1RMOjpTSU9DR0lXQVAoPUVNUFRZKVxuIikpOworCQlyZXR1cm4gLUVOT1RDT05OOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogVW5pdHMgYXJlIGluIGRiIGFib3ZlIHRoZSBub2lzZSBmbG9vci4gVGhhdCBtZWFucyB0aGUKKyAqIHJzc2kgdmFsdWVzIHJlcG9ydGVkIGluIHRoZSB0eC9yeCBkZXNjcmlwdG9ycyBpbiB0aGUKKyAqIGRyaXZlciBhcmUgdGhlIFNOUiBleHByZXNzZWQgaW4gZGIuCisgKgorICogSWYgeW91IGFzc3VtZSB0aGF0IHRoZSBub2lzZSBmbG9vciBpcyAtOTUsIHdoaWNoIGlzIGFuCisgKiBleGNlbGxlbnQgYXNzdW1wdGlvbiA5OS41ICUgb2YgdGhlIHRpbWUsIHRoZW4geW91IGNhbgorICogZGVyaXZlIHRoZSBhYnNvbHV0ZSBzaWduYWwgbGV2ZWwgKGkuZS4gLTk1ICsgcnNzaSkuCisgKiBUaGVyZSBhcmUgc29tZSBvdGhlciBzbGlnaHQgZmFjdG9ycyB0byB0YWtlIGludG8gYWNjb3VudAorICogZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHJzc2kgbWVhc3VyZW1lbnQgaXMgZnJvbSAxMWIsCisgKiAxMWcsIG9yIDExYS4gICBUaGVzZSBkaWZmZXJlbmNlcyBhcmUgYXQgbW9zdCAyZGIgYW5kCisgKiBjYW4gYmUgZG9jdW1lbnRlZC4KKyAqCisgKiBOQjogdmFyaW91cyBjYWxjdWxhdGlvbnMgYXJlIGJhc2VkIG9uIHRoZSBvcmlub2NvL3dhdmVsYW4KKyAqICAgICBkcml2ZXJzIGZvciBjb21wYXRpYmlsaXR5CisgKi8KK3N0YXRpYyB2b2lkIHNldF9xdWFsaXR5KFBSVE1QX0FEQVBURVIgcEFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcXVhbGl0eSAqaXEsCisgICAgICAgICAgICAgICAgICAgICAgICBzaWduZWQgY2hhciByc3NpKQoreworCV9fdTggQ2hhbm5lbFF1YWxpdHk7CisKKwkvLyBOb3JtYWxpemUgUnNzaQorCWlmIChyc3NpID49IC01MCkKKwkJQ2hhbm5lbFF1YWxpdHkgPSAxMDA7CisJZWxzZSBpZiAocnNzaSA+PSAtODApIC8vIGJldHdlZW4gLTUwIH4gLTgwZGJtCisJCUNoYW5uZWxRdWFsaXR5ID0gKF9fdTgpKDI0ICsgKChyc3NpICsgODApICogMjYpLzEwKTsKKwllbHNlIGlmIChyc3NpID49IC05MCkgICAvLyBiZXR3ZWVuIC04MCB+IC05MGRibQorICAgICAgICBDaGFubmVsUXVhbGl0eSA9IChfX3U4KSgocnNzaSArIDkwKSAqIDI2KS8xMDsKKwllbHNlCisJCUNoYW5uZWxRdWFsaXR5ID0gMDsKKworICAgIGlxLT5xdWFsID0gKF9fdTgpQ2hhbm5lbFF1YWxpdHk7CisKKyAgICBpcS0+bGV2ZWwgPSAoX191OCkocnNzaSk7CisgICAgaXEtPm5vaXNlID0gKHBBZGFwdGVyLT5CYnBXcml0ZUxhdGNoWzY2XSA+IHBBZGFwdGVyLT5CYnBUdW5pbmcuRmFsc2VDY2FVcHBlclRocmVzaG9sZCkgPyAoKF9fdTgpcEFkYXB0ZXItPkJicFR1bmluZy5GYWxzZUNjYVVwcGVyVGhyZXNob2xkKSA6ICgoX191OCkgcEFkYXB0ZXItPkJicFdyaXRlTGF0Y2hbNjZdKTsgCS8vIG5vaXNlIGxldmVsIChkQm0pCisgICAgaXEtPm5vaXNlICs9IDI1NiAtIDE0MzsKKyAgICBpcS0+dXBkYXRlZCA9IHBBZGFwdGVyLT5pd19zdGF0cy5xdWFsLnVwZGF0ZWQ7Cit9CisKK2ludCBydF9pb2N0bF9pd2FwbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisgCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwlzdHJ1Y3Qgc29ja2FkZHIgYWRkcltJV19NQVhfQVBdOworCXN0cnVjdCBpd19xdWFsaXR5IHF1YWxbSVdfTUFYX0FQXTsKKwlpbnQgaTsKKworICAgCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorICAgIHsKKyAgICAgICAJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworCQlkYXRhLT5sZW5ndGggPSAwOworCQlyZXR1cm4gMDsKKyAgICAgICAgLy9yZXR1cm4gLUVORVRET1dOOworCX0KKworCWZvciAoaSA9IDA7IGkgPElXX01BWF9BUCA7IGkrKykKKwl7CisJCWlmIChpID49ICBwQWRhcHRlci0+U2NhblRhYi5Cc3NOcikKKwkJCWJyZWFrOworCQlhZGRyW2ldLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwkJCW1lbWNweShhZGRyW2ldLnNhX2RhdGEsICZwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NpZCwgTUFDX0FERFJfTEVOKTsKKwkJc2V0X3F1YWxpdHkocEFkYXB0ZXIsICZxdWFsW2ldLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc3NpKTsKKwl9CisJZGF0YS0+bGVuZ3RoID0gaTsKKwltZW1jcHkoZXh0cmEsICZhZGRyLCBpKnNpemVvZihhZGRyWzBdKSk7CisJZGF0YS0+ZmxhZ3MgPSAxOwkJLyogc2lnbmFsIHF1YWxpdHkgcHJlc2VudCAoc29ydCBvZikgKi8KKwltZW1jcHkoZXh0cmEgKyBpKnNpemVvZihhZGRyWzBdKSwgJnF1YWwsIGkqc2l6ZW9mKHF1YWxbaV0pKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgU0lPQ0dJV1NDQU4KK2ludCBydF9pb2N0bF9zaXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCisJVUxPTkcJCQkJCQkJCU5vdzsKKwlpbnQgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKworCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisJaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworCQlyZXR1cm4gLUVORVRET1dOOworCX0KKworCWlmIChNT05JVE9SX09OKHBBZGFwdGVyKSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBEcml2ZXIgaXMgaW4gTW9uaXRvciBNb2RlIG5vdyAhISFcbiIpKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisJaWYgKHBBZGFwdGVyLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID09IFdQQV9TVVBQTElDQU5UX0VOQUJMRSkKKwl7CisJCXBBZGFwdGVyLT5TdGFDZmcuV3BhU3VwcGxpY2FudFNjYW5Db3VudCsrOworCX0KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyAgICBwQWRhcHRlci0+U3RhQ2ZnLmJTY2FuUmVxSXNGcm9tV2ViVUkgPSBUUlVFOworCWlmIChSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCisJCXJldHVybiAwOworCWRveworCQlOb3cgPSBqaWZmaWVzOworCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCQlpZiAoKHBBZGFwdGVyLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQID09IFdQQV9TVVBQTElDQU5UX0VOQUJMRSkgJiYKKwkJCShwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRTY2FuQ291bnQgPiAzKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIFdwYVN1cHBsaWNhbnRTY2FuQ291bnQgPiAzXG4iKSk7CisJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKwkJaWYgKChPUFNUQVRVU19URVNUX0ZMQUcocEFkYXB0ZXIsIGZPUF9TVEFUVVNfTUVESUFfU1RBVEVfQ09OTkVDVEVEKSkgJiYKKwkJCSgocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpIHx8CisJCQkocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spKSAmJgorCQkJKHBBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPT0gV1BBXzgwMl8xWF9QT1JUX05PVF9TRUNVUkVEKSkKKwkJeworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExpbmsgVVAsIFBvcnQgTm90IFNlY3VyZWQhIGlnbm9yZSB0aGlzIHNldDo6T0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU5cbiIpKTsKKwkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChwQWRhcHRlci0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0gQ05UTF9JRExFKQorCQl7CisJCQlSVDI4WFhfTUxNRV9SRVNFVF9TVEFURV9NQUNISU5FKHBBZGFwdGVyKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBNTE1FIGJ1c3ksIHJlc2V0IE1MTUUgc3RhdGUgbWFjaGluZSAhISFcbiIpKTsKKwkJfQorCisJCS8vIHRlbGwgQ05UTCBzdGF0ZSBtYWNoaW5lIHRvIGNhbGwgTmRpc01TZXRJbmZvcm1hdGlvbkNvbXBsZXRlKCkgYWZ0ZXIgY29tcGxldGluZworCQkvLyB0aGlzIHJlcXVlc3QsIGJlY2F1c2UgdGhpcyByZXF1ZXN0IGlzIGluaXRpYXRlZCBieSBORElTLgorCQlwQWRhcHRlci0+TWxtZUF1eC5DdXJyUmVxSXNGcm9tTmRpcyA9IEZBTFNFOworCQkvLyBSZXNldCBhbGxvd2VkIHNjYW4gcmV0cmllcworCQlwQWRhcHRlci0+U3RhQ2ZnLlNjYW5DbnQgPSAwOworCQlwQWRhcHRlci0+U3RhQ2ZnLkxhc3RTY2FuVGltZSA9IE5vdzsKKworCQlNbG1lRW5xdWV1ZShwQWRhcHRlciwKKwkJCU1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorCQkJT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4sCisJCQkwLAorCQkJTlVMTCk7CisKKwkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwkJUlQyOFhYX01MTUVfSEFORExFUihwQWRhcHRlcik7CisJfXdoaWxlKDApOworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfZ2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCWludCBpPTA7CisJY2hhciAqY3VycmVudF9ldiA9IGV4dHJhLCAqcHJldmlvdXNfZXYgPSBleHRyYTsKKwljaGFyICplbmRfYnVmOworCWNoYXIgKmN1cnJlbnRfdmFsLCBjdXN0b21bTUFYX0NVU1RPTV9MRU5dID0gezB9OworI2lmbmRlZiBJV0VWR0VOSUUKKwljaGFyIGlkeDsKKyNlbmRpZiAvLyBJV0VWR0VOSUUgLy8KKwlzdHJ1Y3QgaXdfZXZlbnQgaXdlOworCisJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKyAgICB7CisJCS8qCisJCSAqIFN0aWxsIHNjYW5uaW5nLCBpbmRpY2F0ZSB0aGUgY2FsbGVyIHNob3VsZCB0cnkgYWdhaW4uCisJCSAqLworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKwlpZiAocEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFKQorCXsKKwkJcEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50U2NhbkNvdW50ID0gMDsKKwl9CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisJaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc05yID09IDApCisJeworCQlkYXRhLT5sZW5ndGggPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICBpZiAoZGF0YS0+bGVuZ3RoID4gMCkKKyAgICAgICAgZW5kX2J1ZiA9IGV4dHJhICsgZGF0YS0+bGVuZ3RoOworICAgIGVsc2UKKyAgICAgICAgZW5kX2J1ZiA9IGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQTsKKyNlbHNlCisgICAgZW5kX2J1ZiA9IGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQTsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IHBBZGFwdGVyLT5TY2FuVGFiLkJzc05yOyBpKyspCisJeworCQlpZiAoY3VycmVudF9ldiA+PSBlbmRfYnVmKQorICAgICAgICB7CisjaWYgV0lSRUxFU1NfRVhUID49IDE3CisgICAgICAgICAgICByZXR1cm4gLUUyQklHOworI2Vsc2UKKwkJCWJyZWFrOworI2VuZGlmCisgICAgICAgIH0KKworCQkvL01BQyBhZGRyZXNzCisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IFNJT0NHSVdBUDsKKwkJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJCQkJbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgJnBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkJzc2lkLCBFVEhfQUxFTik7CisKKyAgICAgICAgcHJldmlvdXNfZXYgPSBjdXJyZW50X2V2OworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX0FERFJfTEVOKTsKKyAgICAgICAgaWYgKGN1cnJlbnRfZXYgPT0gcHJldmlvdXNfZXYpCisjaWYgV0lSRUxFU1NfRVhUID49IDE3CisgICAgICAgICAgICByZXR1cm4gLUUyQklHOworI2Vsc2UKKwkJCWJyZWFrOworI2VuZGlmCisKKwkJLyoKKwkJUHJvdG9jb2w6CisJCQlpdCB3aWxsIHNob3cgc2Nhbm5lZCBBUCdzIFdpcmVsZXNzTW9kZSAuCisJCQlpdCBtaWdodCBiZQorCQkJCQk4MDIuMTFhCisJCQkJCTgwMi4xMWEvbgorCQkJCQk4MDIuMTFnL24KKwkJCQkJODAyLjExYi9nL24KKwkJCQkJODAyLjExZworCQkJCQk4MDIuMTFiL2cKKwkJKi8KKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IFNJT0NHSVdOQU1FOworCisKKwl7CisJCVBCU1NfRU5UUlkgcEJzc0VudHJ5PSZwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXTsKKwkJQk9PTEVBTiBpc0dvbmx5PUZBTFNFOworCQlpbnQgcmF0ZUNudD0wOworCisJCWlmIChwQnNzRW50cnktPkNoYW5uZWw+MTQpCisJCXsKKwkJCWlmIChwQnNzRW50cnktPkh0Q2FwYWJpbGl0eUxlbiE9MCkKKwkJCQlzdHJjcHkoaXdlLnUubmFtZSwiODAyLjExYS9uIik7CisJCQllbHNlCisJCQkJc3RyY3B5KGl3ZS51Lm5hbWUsIjgwMi4xMWEiKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkJaWYgb25lIG9mIG5vbiBCIG1vZGUgcmF0ZSBpcyBzZXQgc3VwcG9ydGVkIHJhdGUgLiBpdCBtZWFuIEcgb25seS4KKwkJCSovCisJCQlmb3IgKHJhdGVDbnQ9MDtyYXRlQ250PHBCc3NFbnRyeS0+U3VwUmF0ZUxlbjtyYXRlQ250KyspCisJCQl7CisJCQkJLyoKKwkJCQkJNk1icHMoMTQwKSA5TWJwcygxNDYpIGFuZCA+PTEyTWJwcygxNTIpIGFyZSBzdXBwb3J0ZWQgcmF0ZSAsIGl0IG1lYW4gRyBvbmx5LgorCQkJCSovCisJCQkJaWYgKHBCc3NFbnRyeS0+U3VwUmF0ZVtyYXRlQ250XT09MTQwIHx8IHBCc3NFbnRyeS0+U3VwUmF0ZVtyYXRlQ250XT09MTQ2IHx8IHBCc3NFbnRyeS0+U3VwUmF0ZVtyYXRlQ250XT49MTUyKQorCQkJCQlpc0dvbmx5PVRSVUU7CisJCQl9CisKKwkJCWZvciAocmF0ZUNudD0wO3JhdGVDbnQ8cEJzc0VudHJ5LT5FeHRSYXRlTGVuO3JhdGVDbnQrKykKKwkJCXsKKwkJCQlpZiAocEJzc0VudHJ5LT5FeHRSYXRlW3JhdGVDbnRdPT0xNDAgfHwgcEJzc0VudHJ5LT5FeHRSYXRlW3JhdGVDbnRdPT0xNDYgfHwgcEJzc0VudHJ5LT5FeHRSYXRlW3JhdGVDbnRdPj0xNTIpCisJCQkJCWlzR29ubHk9VFJVRTsKKwkJCX0KKworCisJCQlpZiAocEJzc0VudHJ5LT5IdENhcGFiaWxpdHlMZW4hPTApCisJCQl7CisJCQkJaWYgKGlzR29ubHk9PVRSVUUpCisJCQkJCXN0cmNweShpd2UudS5uYW1lLCI4MDIuMTFnL24iKTsKKwkJCQllbHNlCisJCQkJCXN0cmNweShpd2UudS5uYW1lLCI4MDIuMTFiL2cvbiIpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChpc0dvbmx5PT1UUlVFKQorCQkJCQlzdHJjcHkoaXdlLnUubmFtZSwiODAyLjExZyIpOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmIChwQnNzRW50cnktPlN1cFJhdGVMZW49PTQgJiYgcEJzc0VudHJ5LT5FeHRSYXRlTGVuPT0wKQorCQkJCQkJc3RyY3B5KGl3ZS51Lm5hbWUsIjgwMi4xMWIiKTsKKwkJCQkJZWxzZQorCQkJCQkJc3RyY3B5KGl3ZS51Lm5hbWUsIjgwMi4xMWIvZyIpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCQlwcmV2aW91c19ldiA9IGN1cnJlbnRfZXY7CisJCWN1cnJlbnRfZXYJID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworCQlpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKwkgICAJCXJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJYnJlYWs7CisjZW5kaWYKKworCQkvL0VTU0lECisJCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Tc2lkTGVuOworCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKKworICAgICAgICBwcmV2aW91c19ldiA9IGN1cnJlbnRfZXY7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Tc2lkKTsKKyAgICAgICAgaWYgKGN1cnJlbnRfZXYgPT0gcHJldmlvdXNfZXYpCisjaWYgV0lSRUxFU1NfRVhUID49IDE3CisgICAgICAgICAgICByZXR1cm4gLUUyQklHOworI2Vsc2UKKwkJCWJyZWFrOworI2VuZGlmCisKKwkJLy9OZXR3b3JrIFR5cGUKKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gU0lPQ0dJV01PREU7CisJCWlmIChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NUeXBlID09IE5kaXM4MDJfMTFJQlNTKQorCQl7CisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJfQorCQllbHNlIGlmIChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Cc3NUeXBlID09IE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZSkKKwkJeworCQkJaXdlLnUubW9kZSA9IElXX01PREVfSU5GUkE7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BVVRPOworCQl9CisJCWl3ZS5sZW4gPSBJV19FVl9VSU5UX0xFTjsKKworICAgICAgICBwcmV2aW91c19ldiA9IGN1cnJlbnRfZXY7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCAgSVdfRVZfVUlOVF9MRU4pOworICAgICAgICBpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJYnJlYWs7CisjZW5kaWYKKworCQkvL0NoYW5uZWwgYW5kIEZyZXF1ZW5jeQorCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwkJaWYgKElORlJBX09OKHBBZGFwdGVyKSB8fCBBREhPQ19PTihwQWRhcHRlcikpCisJCQlpd2UudS5mcmVxLm0gPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsOworCQllbHNlCisJCQlpd2UudS5mcmVxLm0gPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsOworCQlpd2UudS5mcmVxLmUgPSAwOworCQlpd2UudS5mcmVxLmkgPSAwOworCisJCXByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKKyAgICAgICAgaWYgKGN1cnJlbnRfZXYgPT0gcHJldmlvdXNfZXYpCisjaWYgV0lSRUxFU1NfRVhUID49IDE3CisgICAgICAgICAgICByZXR1cm4gLUUyQklHOworI2Vsc2UKKwkJCWJyZWFrOworI2VuZGlmCisKKyAgICAgICAgLy9BZGQgcXVhbGl0eSBzdGF0aXN0aWNzCisgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKyAgICAJaXdlLmNtZCA9IElXRVZRVUFMOworICAgIAlpd2UudS5xdWFsLmxldmVsID0gMDsKKyAgICAJaXdlLnUucXVhbC5ub2lzZSA9IDA7CisgICAgICAgIHNldF9xdWFsaXR5KHBBZGFwdGVyLCAmaXdlLnUucXVhbCwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUnNzaSk7CisgICAgCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7CisgICAgICAgIGlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQorI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworICAgICAgICAgICAgcmV0dXJuIC1FMkJJRzsKKyNlbHNlCisJCQlicmVhazsKKyNlbmRpZgorCisJCS8vRW5jeXB0aW9uIGtleQorCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBTSU9DR0lXRU5DT0RFOworCQlpZiAoQ0FQX0lTX1BSSVZBQ1lfT04gKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkNhcGFiaWxpdHlJbmZvICkpCisJCQlpd2UudS5kYXRhLmZsYWdzID1JV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKKwkJZWxzZQorCQkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKKworICAgICAgICBwcmV2aW91c19ldiA9IGN1cnJlbnRfZXY7CisgICAgICAgIGN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCZpd2UsIChjaGFyICopcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsoaXdlLnUuZGF0YS5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCktMV0uS2V5KTsKKyAgICAgICAgaWYgKGN1cnJlbnRfZXYgPT0gcHJldmlvdXNfZXYpCisjaWYgV0lSRUxFU1NfRVhUID49IDE3CisgICAgICAgICAgICByZXR1cm4gLUUyQklHOworI2Vsc2UKKwkJCWJyZWFrOworI2VuZGlmCisKKwkJLy9CaXQgUmF0ZQorCQkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJCWlmIChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5TdXBSYXRlTGVuKQorICAgICAgICB7CisgICAgICAgICAgICBVQ0hBUiB0bXBSYXRlID0gcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3VwUmF0ZVtwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5TdXBSYXRlTGVuLTFdOworCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKKyAgICAJCWN1cnJlbnRfdmFsID0gY3VycmVudF9ldiArIElXX0VWX0xDUF9MRU47CisgICAgICAgICAgICBpZiAodG1wUmF0ZSA9PSAweDgyKQorICAgICAgICAgICAgICAgIGl3ZS51LmJpdHJhdGUudmFsdWUgPSAgMSAqIDEwMDAwMDA7CisgICAgICAgICAgICBlbHNlIGlmICh0bXBSYXRlID09IDB4ODQpCisgICAgICAgICAgICAgICAgaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICAyICogMTAwMDAwMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRtcFJhdGUgPT0gMHg4QikKKyAgICAgICAgICAgICAgICBpd2UudS5iaXRyYXRlLnZhbHVlID0gIDUuNSAqIDEwMDAwMDA7CisgICAgICAgICAgICBlbHNlIGlmICh0bXBSYXRlID09IDB4OTYpCisgICAgICAgICAgICAgICAgaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICAxMSAqIDEwMDAwMDA7CisgICAgICAgICAgICBlbHNlCisgICAgCQkgICAgaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICAodG1wUmF0ZS8yKSAqIDEwMDAwMDA7CisKKwkJCWl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOworCQkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LAorCQkJCWN1cnJlbnRfdmFsLCBlbmRfYnVmLCAmaXdlLAorICAgIAkJCUlXX0VWX1BBUkFNX0xFTik7CisKKyAgICAgICAgCWlmKChjdXJyZW50X3ZhbC1jdXJyZW50X2V2KT5JV19FVl9MQ1BfTEVOKQorICAgICAgICAgICAgCWN1cnJlbnRfZXYgPSBjdXJyZW50X3ZhbDsKKyAgICAgICAgCWVsc2UKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgICAgICByZXR1cm4gLUUyQklHOworI2Vsc2UKKwkJCSAgICBicmVhazsKKyNlbmRpZgorICAgICAgICB9CisKKyNpZmRlZiBJV0VWR0VOSUUKKwkJLy9XUEEgSUUKKwkJaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLldwYUlFLklFTGVuID4gMCkKKwkJeworCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKwkJCW1lbXNldCgmY3VzdG9tWzBdLCAwLCBNQVhfQ1VTVE9NX0xFTik7CisJCQltZW1jcHkoY3VzdG9tLCAmKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLldwYUlFLklFWzBdKSwKKwkJCQkJCSAgIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLldwYUlFLklFTGVuKTsKKwkJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLldwYUlFLklFTGVuOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIGN1c3RvbSk7CisJCQlpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgICAgICByZXR1cm4gLUUyQklHOworI2Vsc2UKKwkJCSAgICBicmVhazsKKyNlbmRpZgorCQl9CisKKwkJLy9XUEEyIElFCisgICAgICAgIGlmIChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc25JRS5JRUxlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCQltZW1zZXQoJmN1c3RvbVswXSwgMCwgTUFYX0NVU1RPTV9MRU4pOworCQkJbWVtY3B5KGN1c3RvbSwgJihwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc25JRS5JRVswXSksCisJCQkJCQkgICBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc25JRS5JRUxlbik7CisJCQlpd2UuY21kID0gSVdFVkdFTklFOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Sc25JRS5JRUxlbjsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBjdXN0b20pOworCQkJaWYgKGN1cnJlbnRfZXYgPT0gcHJldmlvdXNfZXYpCisjaWYgV0lSRUxFU1NfRVhUID49IDE3CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FMkJJRzsKKyNlbHNlCisJCQkgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgLy9XUEEgSUUKKwkJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICBpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV3BhSUUuSUVMZW4gPiAwKQorICAgICAgICB7CisgICAgCQlOZGlzWmVyb01lbW9yeSgmaXdlLCBzaXplb2YoaXdlKSk7CisJCQltZW1zZXQoJmN1c3RvbVswXSwgMCwgTUFYX0NVU1RPTV9MRU4pOworICAgIAkJaXdlLmNtZCA9IElXRVZDVVNUT007CisgICAgICAgICAgICBpd2UudS5kYXRhLmxlbmd0aCA9IChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5XcGFJRS5JRUxlbiAqIDIpICsgNzsKKyAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KGN1c3RvbSwgIndwYV9pZT0iLCA3KTsKKyAgICAgICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uV3BhSUUuSUVMZW47IGlkeCsrKQorICAgICAgICAgICAgICAgIHNwcmludGYoY3VzdG9tLCAiJXMlMDJ4IiwgY3VzdG9tLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5XcGFJRS5JRVtpZHhdKTsKKyAgICAgICAgICAgIHByZXZpb3VzX2V2ID0gY3VycmVudF9ldjsKKyAgICAJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCAgY3VzdG9tKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50X2V2ID09IHByZXZpb3VzX2V2KQorI2lmIFdJUkVMRVNTX0VYVCA+PSAxNworICAgICAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisjZWxzZQorCQkJICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICAvL1dQQTIgSUUKKyAgICAgICAgaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzbklFLklFTGVuID4gMCkKKyAgICAgICAgeworICAgIAkJTmRpc1plcm9NZW1vcnkoJml3ZSwgc2l6ZW9mKGl3ZSkpOworCQkJbWVtc2V0KCZjdXN0b21bMF0sIDAsIE1BWF9DVVNUT01fTEVOKTsKKyAgICAJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworICAgICAgICAgICAgaXdlLnUuZGF0YS5sZW5ndGggPSAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUnNuSUUuSUVMZW4gKiAyKSArIDc7CisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShjdXN0b20sICJyc25faWU9IiwgNyk7CisJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlJzbklFLklFTGVuOyBpZHgrKykKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGN1c3RvbSwgIiVzJTAyeCIsIGN1c3RvbSwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUnNuSUUuSUVbaWR4XSk7CisgICAgICAgICAgICBwcmV2aW91c19ldiA9IGN1cnJlbnRfZXY7CisgICAgCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgIGN1c3RvbSk7CisgICAgICAgICAgICBpZiAoY3VycmVudF9ldiA9PSBwcmV2aW91c19ldikKKyNpZiBXSVJFTEVTU19FWFQgPj0gMTcKKyAgICAgICAgICAgICAgICByZXR1cm4gLUUyQklHOworI2Vsc2UKKwkJCSAgICBicmVhazsKKyNlbmRpZgorICAgICAgICB9CisjZW5kaWYgLy8gSVdFVkdFTklFIC8vCisJfQorCisJZGF0YS0+bGVuZ3RoID0gY3VycmVudF9ldiAtIGV4dHJhOworICAgIHBBZGFwdGVyLT5TdGFDZmcuYlNjYW5SZXFJc0Zyb21XZWJVSSA9IEZBTFNFOworCURCR1BSSU5UKFJUX0RFQlVHX0VSUk9SICwoIj09PT5ydF9pb2N0bF9naXdzY2FuLiAlZCglZCkgQlNTIHJldHVybmVkLCBkYXRhLT5sZW5ndGggPSAlZFxuIixpICwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzTnIsIGRhdGEtPmxlbmd0aCkpOworCXJldHVybiAwOworfQorI2VuZGlmCisKK2ludCBydF9pb2N0bF9zaXdlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICplc3NpZCkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCisJLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKyAgICBpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgeworICAgICAgIAlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgICAgCXJldHVybiAtRU5FVERPV047CisgICAgfQorCisJaWYgKGRhdGEtPmZsYWdzKQorCXsKKwkJUENIQVIJcFNzaWRTdHJpbmcgPSBOVUxMOworCisJCS8vIEluY2x1ZGVzIG51bGwgY2hhcmFjdGVyLgorCQlpZiAoZGF0YS0+bGVuZ3RoID4gKElXX0VTU0lEX01BWF9TSVpFICsgMSkpCisJCQlyZXR1cm4gLUUyQklHOworCisJCXBTc2lkU3RyaW5nID0gKENIQVIgKikga21hbGxvYyhNQVhfTEVOX09GX1NTSUQrMSwgTUVNX0FMTE9DX0ZMQUcpOworCQlpZiAocFNzaWRTdHJpbmcpCisJCXsKKwkJCU5kaXNaZXJvTWVtb3J5KHBTc2lkU3RyaW5nLCBNQVhfTEVOX09GX1NTSUQrMSk7CisJCQlOZGlzTW92ZU1lbW9yeShwU3NpZFN0cmluZywgZXNzaWQsIGRhdGEtPmxlbmd0aCk7CisJCQlpZiAoU2V0X1NTSURfUHJvYyhwQWRhcHRlciwgcFNzaWRTdHJpbmcpID09IEZBTFNFKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWVsc2UKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwllbHNlCisJeworCQkvLyBBTlkgc3NpZAorCQlpZiAoU2V0X1NTSURfUHJvYyhwQWRhcHRlciwgIiIpID09IEZBTFNFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfZ2l3ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXNzaWQpCit7CisJUFJUTVBfQURBUFRFUiBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCWRhdGEtPmZsYWdzID0gMTsKKyAgICBpZiAoTU9OSVRPUl9PTihwQWRhcHRlcikpCisgICAgeworICAgICAgICBkYXRhLT5sZW5ndGggID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisJaWYgKE9QU1RBVFVTX1RFU1RfRkxBRyhwQWRhcHRlciwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpKQorCXsKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgiTWVkaWFTdGF0ZSBpcyBjb25uZWN0ZWRcbiIpKTsKKwkJZGF0YS0+bGVuZ3RoID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkTGVuOworCQltZW1jcHkoZXNzaWQsIHBBZGFwdGVyLT5Db21tb25DZmcuU3NpZCwgcEFkYXB0ZXItPkNvbW1vbkNmZy5Tc2lkTGVuKTsKKwl9CisjaWZkZWYgUlQyODcwCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIC8vIEFkZCBmb3IgUlQyODcwCisgICAgZWxzZSBpZiAocEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgIT0gV1BBX1NVUFBMSUNBTlRfRElTQUJMRSkKKyAgICB7CisgICAgICAgIGRhdGEtPmxlbmd0aCA9IHBBZGFwdGVyLT5Db21tb25DZmcuU3NpZExlbjsKKwkJbWVtY3B5KGVzc2lkLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLlNzaWQsIHBBZGFwdGVyLT5Db21tb25DZmcuU3NpZExlbik7CisJfQorI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyNlbmRpZiAvLyBSVDI4NzAgLy8KKwllbHNlCisJey8vdGhlIEFOWSBzc2lkIHdhcyBzcGVjaWZpZWQKKwkJZGF0YS0+bGVuZ3RoICA9IDA7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoIk1lZGlhU3RhdGUgaXMgbm90IGNvbm5lY3RlZCwgZXNzXG4iKSk7CisJfQorCisJcmV0dXJuIDA7CisKK30KKworaW50IHJ0X2lvY3RsX3Npd25pY2tuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKm5pY2tuYW1lKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKyAgICAvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIGlmKCFSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAgICAgcmV0dXJuIC1FTkVURE9XTjsKKyAgICB9CisKKwlpZiAoZGF0YS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KHBBZGFwdGVyLT5uaWNrbmFtZSwgMCwgSVdfRVNTSURfTUFYX1NJWkUgKyAxKTsKKwltZW1jcHkocEFkYXB0ZXItPm5pY2tuYW1lLCBuaWNrbmFtZSwgZGF0YS0+bGVuZ3RoKTsKKworCisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9naXduaWNrbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpuaWNrbmFtZSkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCisJaWYgKGRhdGEtPmxlbmd0aCA+IHN0cmxlbihwQWRhcHRlci0+bmlja25hbWUpICsgMSkKKwkJZGF0YS0+bGVuZ3RoID0gc3RybGVuKHBBZGFwdGVyLT5uaWNrbmFtZSkgKyAxOworCWlmIChkYXRhLT5sZW5ndGggPiAwKSB7CisJCW1lbWNweShuaWNrbmFtZSwgcEFkYXB0ZXItPm5pY2tuYW1lLCBkYXRhLT5sZW5ndGgtMSk7CisJCW5pY2tuYW1lW2RhdGEtPmxlbmd0aC0xXSA9ICdcMCc7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfc2l3cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisJdTE2IHZhbDsKKworICAgIC8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisgICAgaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorICAgIHsKKyAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgICByZXR1cm4gLUVORVRET1dOOworICAgIH0KKworCWlmIChydHMtPmRpc2FibGVkKQorCQl2YWwgPSBNQVhfUlRTX1RIUkVTSE9MRDsKKwllbHNlIGlmIChydHMtPnZhbHVlIDwgMCB8fCBydHMtPnZhbHVlID4gTUFYX1JUU19USFJFU0hPTEQpCisJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKHJ0cy0+dmFsdWUgPT0gMCkKKwkgICAgdmFsID0gTUFYX1JUU19USFJFU0hPTEQ7CisJZWxzZQorCQl2YWwgPSBydHMtPnZhbHVlOworCisJaWYgKHZhbCAhPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZCkKKwkJcEFkYXB0ZXItPkNvbW1vbkNmZy5SdHNUaHJlc2hvbGQgPSB2YWw7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX2dpd3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCisJLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKyAgICAJaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorICAgIAl7CisgICAgICAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAgICAgCXJldHVybiAtRU5FVERPV047CisgICAgCX0KKworCXJ0cy0+dmFsdWUgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlJ0c1RocmVzaG9sZDsKKwlydHMtPmRpc2FibGVkID0gKHJ0cy0+dmFsdWUgPT0gTUFYX1JUU19USFJFU0hPTEQpOworCXJ0cy0+Zml4ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9zaXdmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKK3sKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCXUxNiB2YWw7CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIAlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgCXsKKyAgICAgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgICAJcmV0dXJuIC1FTkVURE9XTjsKKyAgICAJfQorCisJaWYgKGZyYWctPmRpc2FibGVkKQorCQl2YWwgPSBNQVhfRlJBR19USFJFU0hPTEQ7CisJZWxzZSBpZiAoZnJhZy0+dmFsdWUgPj0gTUlOX0ZSQUdfVEhSRVNIT0xEIHx8IGZyYWctPnZhbHVlIDw9IE1BWF9GUkFHX1RIUkVTSE9MRCkKKyAgICAgICAgdmFsID0gX19jcHVfdG9fbGUxNihmcmFnLT52YWx1ZSAmIH4weDEpOyAvKiBldmVuIG51bWJlcnMgb25seSAqLworCWVsc2UgaWYgKGZyYWctPnZhbHVlID09IDApCisJICAgIHZhbCA9IE1BWF9GUkFHX1RIUkVTSE9MRDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJcEFkYXB0ZXItPkNvbW1vbkNmZy5GcmFnbWVudFRocmVzaG9sZCA9IHZhbDsKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX2dpd2ZyYWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKmZyYWcsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIAlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgCXsKKyAgICAgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgICAJcmV0dXJuIC1FTkVURE9XTjsKKyAgICAJfQorCisJZnJhZy0+dmFsdWUgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkOworCWZyYWctPmRpc2FibGVkID0gKGZyYWctPnZhbHVlID09IE1BWF9GUkFHX1RIUkVTSE9MRCk7CisJZnJhZy0+Zml4ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTUFYX1dFUF9LRVlfU0laRSAxMworI2RlZmluZSBNSU5fV0VQX0tFWV9TSVpFIDUKK2ludCBydF9pb2N0bF9zaXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGl3X3BvaW50ICplcnEsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisKKwkvL2NoZWNrIGlmIHRoZSBpbnRlcmZhY2UgaXMgZG93bgorICAgIAlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgCXsKKyAgICAgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgICAgICAJcmV0dXJuIC1FTkVURE9XTjsKKyAgICAJfQorCisJaWYgKChlcnEtPmxlbmd0aCA9PSAwKSAmJgorICAgICAgICAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkpCisJeworCQlwQWRhcHRlci0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJCXBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJCXBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXMgPSBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1czsKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZU9wZW47CisgICAgICAgIGdvdG8gZG9uZTsKKwl9CisJZWxzZSBpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEIHx8IGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKKwl7CisJICAgIC8vcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworCQlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKwkJcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyID0gTmRpczgwMl8xMVdFUEVuYWJsZWQ7CisJCXBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKKwkJcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5PcmlnV2VwU3RhdHVzID0gcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXM7CisJCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpCisJCQlwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkOworICAgIAllbHNlCisJCQlwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKKwl9CisKKyAgICBpZiAoZXJxLT5sZW5ndGggPiAwKQorCXsKKwkJaW50IGtleUlkeCA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CisJCS8qIENoZWNrIHRoZSBzaXplIG9mIHRoZSBrZXkgKi8KKwkJaWYgKGVycS0+bGVuZ3RoID4gTUFYX1dFUF9LRVlfU0laRSkKKwkJeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyogQ2hlY2sga2V5IGluZGV4ICovCisJCWlmICgoa2V5SWR4IDwgMCkgfHwgKGtleUlkeCA+PSBOUl9XRVBfS0VZUykpCisgICAgICAgIHsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoIj09PnJ0X2lvY3RsX3Npd2VuY29kZTo6V3Jvbmcga2V5SWR4PSVkISBVc2luZyBkZWZhdWx0IGtleSBpbnN0ZWFkICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5SWR4LCBwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCkpOworCisgICAgICAgICAgICAvL1VzaW5nIGRlZmF1bHQga2V5CisJCQlrZXlJZHggPSBwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZDsKKyAgICAgICAgfQorCQllbHNlCisJCXsKKwkJCXBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkPWtleUlkeDsKKwkJfQorCisgICAgICAgIE5kaXNaZXJvTWVtb3J5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXksICAxNik7CisKKwkJaWYgKGVycS0+bGVuZ3RoID09IE1BWF9XRVBfS0VZX1NJWkUpCisgICAgICAgIHsKKwkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXlMZW4gPSBNQVhfV0VQX0tFWV9TSVpFOworICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLkNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisJCX0KKwkJZWxzZSBpZiAoZXJxLT5sZW5ndGggPT0gTUlOX1dFUF9LRVlfU0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleUxlbiA9IE1JTl9XRVBfS0VZX1NJWkU7CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworCQl9CisJCWVsc2UKKwkJCS8qIERpc2FibGUgdGhlIGtleSAqLworCQkJcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleUxlbiA9IDA7CisKKwkJLyogQ2hlY2sgaWYgdGhlIGtleSBpcyBub3QgbWFya2VkIGFzIGludmFsaWQgKi8KKwkJaWYoIShlcnEtPmZsYWdzICYgSVdfRU5DT0RFX05PS0VZKSkKKwkJeworCQkJLyogQ29weSB0aGUga2V5IGluIHRoZSBkcml2ZXIgKi8KKwkJCU5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXksIGV4dHJhLCBlcnEtPmxlbmd0aCk7CisgICAgICAgIH0KKwl9CisgICAgZWxzZQorCQkJeworCQkvKiBEbyB3ZSB3YW50IHRvIGp1c3Qgc2V0IHRoZSB0cmFuc21pdCBrZXkgaW5kZXggPyAqLworCQlpbnQgaW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworCQlpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IDQpKQorICAgICAgICB7CisJCQlwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICBlbHNlCisJCQkvKiBEb24ndCBjb21wbGFpbiBpZiBvbmx5IGNoYW5nZSB0aGUgbW9kZSAqLworCQlpZighZXJxLT5mbGFncyAmIElXX0VOQ09ERV9NT0RFKQorCQl7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKK2RvbmU6CisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgiPT0+cnRfaW9jdGxfc2l3ZW5jb2RlOjplcnEtPmZsYWdzPSV4XG4iLGVycS0+ZmxhZ3MpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCI9PT5ydF9pb2N0bF9zaXdlbmNvZGU6OkF1dGhNb2RlPSV4XG4iLHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUpKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCI9PT5ydF9pb2N0bF9zaXdlbmNvZGU6OkRlZmF1bHRLZXlJZD0leCwgS2V5TGVuID0gJWRcbiIscEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQgLCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW4pKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCI9PT5ydF9pb2N0bF9zaXdlbmNvZGU6OldlcFN0YXR1cz0leFxuIixwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cykpOworCXJldHVybiAwOworfQorCitpbnQKK3J0X2lvY3RsX2dpd2VuY29kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KQoreworCVBSVE1QX0FEQVBURVIgcEFkYXB0ZXIgPSBkZXYtPm1sX3ByaXY7CisJaW50IGtpZDsKKworCS8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisJaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorCXsKKyAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgCXJldHVybiAtRU5FVERPV047CisJfQorCisJa2lkID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI9PT0+cnRfaW9jdGxfZ2l3ZW5jb2RlICVkXG4iLCBlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSk7CisKKwlpZiAocEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPT0gTmRpczgwMl8xMVdFUERpc2FibGVkKQorCXsKKwkJZXJxLT5sZW5ndGggPSAwOworCQllcnEtPmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCX0KKwllbHNlIGlmICgoa2lkID4gMCkgJiYgKGtpZCA8PTQpKQorCXsKKwkJLy8gY29weSB3ZXAga2V5CisJCWVycS0+ZmxhZ3MgPSBraWQgOwkJCS8qIE5COiBiYXNlIDEgKi8KKwkJaWYgKGVycS0+bGVuZ3RoID4gcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtraWQtMV0uS2V5TGVuKQorCQkJZXJxLT5sZW5ndGggPSBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tpZC0xXS5LZXlMZW47CisJCW1lbWNweShrZXksIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2lkLTFdLktleSwgZXJxLT5sZW5ndGgpOworCQkvL2lmICgoa2lkID09IHBBZGFwdGVyLT5Qb3J0Q2ZnLkRlZmF1bHRLZXlJZCkpCisJCS8vZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsJLyogWFhYICovCisJCWlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkKKwkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7CQkvKiBYWFggKi8KKwkJZWxzZQorCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfT1BFTjsJCS8qIFhYWCAqLworCisJfQorCWVsc2UgaWYgKGtpZCA9PSAwKQorCXsKKwkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlU2hhcmVkKQorCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfUkVTVFJJQ1RFRDsJCS8qIFhYWCAqLworCQllbHNlCisJCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOwkJLyogWFhYICovCisJCWVycS0+bGVuZ3RoID0gcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5TGVuOworCQltZW1jcHkoa2V5LCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXksIGVycS0+bGVuZ3RoKTsKKwkJLy8gY29weSBkZWZhdWx0IGtleSBJRAorCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQpCisJCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9SRVNUUklDVEVEOwkJLyogWFhYICovCisJCWVsc2UKKwkJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX09QRU47CQkvKiBYWFggKi8KKwkJZXJxLT5mbGFncyA9IHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkICsgMTsJCQkvKiBOQjogYmFzZSAxICovCisJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CS8qIFhYWCAqLworCX0KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQKK3J0X2lvY3RsX3NldHBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgdm9pZCAqdywgY2hhciAqZXh0cmEpCit7CisgICAgVklSVFVBTF9BREFQVEVSCSpwVmlydHVhbEFkID0gTlVMTDsKKwlQUlRNUF9BREFQVEVSIHBBZGFwdGVyOworCVBPU19DT09LSUUgcE9iajsKKwljaGFyICp0aGlzX2NoYXIgPSBleHRyYTsKKwljaGFyICp2YWx1ZTsKKwlpbnQgIFN0YXR1cz0wOworCisJaWYgKGRldi0+cHJpdl9mbGFncyA9PSBJTlRfTUFJTikKKwl7CisJCXBBZGFwdGVyID0gZGV2LT5tbF9wcml2OworCX0KKwllbHNlCisJeworCQlwVmlydHVhbEFkID0gZGV2LT5tbF9wcml2OworCQlwQWRhcHRlciA9IHBWaXJ0dWFsQWQtPlJ0bXBEZXYtPm1sX3ByaXY7CisJfQorCXBPYmogPSAoUE9TX0NPT0tJRSkgcEFkYXB0ZXItPk9TX0Nvb2tpZTsKKworCWlmIChwQWRhcHRlciA9PSBOVUxMKQorCXsKKwkJLyogaWYgMXN0IG9wZW4gZmFpbCwgcEFkIHdpbGwgYmUgZnJlZTsKKwkJICAgU28gdGhlIG5ldF9kZXYtPm1sX3ByaXYgd2lsbCBiZSBOVUxMIGluIDJyZCBvcGVuICovCisJCXJldHVybiAtRU5FVERPV047CisJfQorCisJeworCQlwT2JqLT5pb2N0bF9pZl90eXBlID0gSU5UX01BSU47CisgICAgICAgIHBPYmotPmlvY3RsX2lmID0gTUFJTl9NQlNTSUQ7CisJfQorCisJLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKyAgICAJaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorICAgIAl7CisgICAgICAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKwkJCXJldHVybiAtRU5FVERPV047CisgICAgCX0KKworCWlmICghKnRoaXNfY2hhcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKHZhbHVlID0gcnRzdHJjaHIodGhpc19jaGFyLCAnPScpKSAhPSBOVUxMKQorCSAgICAqdmFsdWUrKyA9IDA7CisKKwlpZiAoIXZhbHVlKQorCSAgICByZXR1cm4gLUVJTlZBTDsKKworCS8vIHJlamVjdCBzZXR0aW5nIG5vdGhpbmcgYmVzaWRlcyBBTlkgc3NpZChzc2lkTGVuPTApCisgICAgaWYgKCEqdmFsdWUgJiYgKHN0cmNtcCh0aGlzX2NoYXIsICJTU0lEIikgIT0gMCkpCisgICAgICAgIHJldHVybiAtRUlOVkFMOworCisJZm9yIChQUlRNUF9QUklWQVRFX1NFVF9QUk9DID0gUlRNUF9QUklWQVRFX1NVUFBPUlRfUFJPQzsgUFJUTVBfUFJJVkFURV9TRVRfUFJPQy0+bmFtZTsgUFJUTVBfUFJJVkFURV9TRVRfUFJPQysrKQorCXsKKwkgICAgaWYgKHN0cmNtcCh0aGlzX2NoYXIsIFBSVE1QX1BSSVZBVEVfU0VUX1BST0MtPm5hbWUpID09IDApCisJICAgIHsKKwkgICAgICAgIGlmKCFQUlRNUF9QUklWQVRFX1NFVF9QUk9DLT5zZXRfcHJvYyhwQWRhcHRlciwgdmFsdWUpKQorCSAgICAgICAgewkvL0ZBTFNFOlNldCBwcml2YXRlIGZhaWxlZCB0aGVuIHJldHVybiBJbnZhbGlkIGFyZ3VtZW50CisJCQkgICAgU3RhdHVzID0gLUVJTlZBTDsKKwkgICAgICAgIH0KKwkJICAgIGJyZWFrOwkvL0V4aXQgZm9yIGxvb3AuCisJICAgIH0KKwl9CisKKwlpZihQUlRNUF9QUklWQVRFX1NFVF9QUk9DLT5uYW1lID09IE5VTEwpCisJeyAgLy9Ob3QgZm91bmQgYXJndW1lbnQKKwkgICAgU3RhdHVzID0gLUVJTlZBTDsKKwkgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PnJ0X2lvY3RsX3NldHBhcmFtOjogKGl3cHJpdikgTm90IFN1cHBvcnQgU2V0IENvbW1hbmQgWyVzPSVzXVxuIiwgdGhpc19jaGFyLCB2YWx1ZSkpOworCX0KKworICAgIHJldHVybiBTdGF0dXM7Cit9CisKKworc3RhdGljIGludAorcnRfcHJpdmF0ZV9nZXRfc3RhdGlzdGljcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcG9pbnQgKndycSwgY2hhciAqZXh0cmEpCit7CisJSU5UCQkJCVN0YXR1cyA9IDA7CisgICAgUFJUTVBfQURBUFRFUiAgIHBBZCA9IGRldi0+bWxfcHJpdjsKKworICAgIGlmIChleHRyYSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgd3JxLT5sZW5ndGggPSAwOworICAgICAgICByZXR1cm4gLUVJTzsKKyAgICB9CisKKyAgICBtZW1zZXQoZXh0cmEsIDB4MDAsIElXX1BSSVZfU0laRV9NQVNLKTsKKyAgICBzcHJpbnRmKGV4dHJhLCAiXG5cbiIpOworCisjaWZkZWYgUkFMSU5LX0FURQorCWlmIChBVEVfT04ocEFkKSkKKwl7CisJICAgIHNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlR4IHN1Y2Nlc3MgICAgICAgICAgICAgICAgICAgICAgPSAlbGRcbiIsIChVTE9ORylwQWQtPmF0ZS5UeERvbmVDb3VudCk7CisJICAgIC8vc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiVHggc3VjY2VzcyB3aXRob3V0IHJldHJ5ICAgICAgICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+YXRlLlR4RG9uZUNvdW50KTsKKwl9CisJZWxzZQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKwl7CisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiVHggc3VjY2VzcyAgICAgICAgICAgICAgICAgICAgICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC5RdWFkUGFydCk7CisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiVHggc3VjY2VzcyB3aXRob3V0IHJldHJ5ICAgICAgICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+V2xhbkNvdW50ZXJzLlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC5RdWFkUGFydCAtIChVTE9ORylwQWQtPldsYW5Db3VudGVycy5SZXRyeUNvdW50LlF1YWRQYXJ0KTsKKwl9CisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiVHggc3VjY2VzcyBhZnRlciByZXRyeSAgICAgICAgICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQuUXVhZFBhcnQpOworICAgIHNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlR4IGZhaWwgdG8gUmN2IEFDSyBhZnRlciByZXRyeSAgPSAlbGRcbiIsIChVTE9ORylwQWQtPldsYW5Db3VudGVycy5GYWlsZWRDb3VudC5RdWFkUGFydCk7CisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUlRTIFN1Y2Nlc3MgUmN2IENUUyAgICAgICAgICAgICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+V2xhbkNvdW50ZXJzLlJUU1N1Y2Nlc3NDb3VudC5RdWFkUGFydCk7CisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUlRTIEZhaWwgUmN2IENUUyAgICAgICAgICAgICAgICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+V2xhbkNvdW50ZXJzLlJUU0ZhaWx1cmVDb3VudC5RdWFkUGFydCk7CisKKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSeCBzdWNjZXNzICAgICAgICAgICAgICAgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5XbGFuQ291bnRlcnMuUmVjZWl2ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0KTsKKyAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSeCB3aXRoIENSQyAgICAgICAgICAgICAgICAgICAgID0gJWxkXG4iLCAoVUxPTkcpcEFkLT5XbGFuQ291bnRlcnMuRkNTRXJyb3JDb3VudC5RdWFkUGFydCk7CisgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUnggZHJvcCBkdWUgdG8gb3V0IG9mIHJlc291cmNlICA9ICVsZFxuIiwgKFVMT05HKXBBZC0+Q291bnRlcnM4MDIzLlJ4Tm9CdWZmZXIpOworICAgIHNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlJ4IGR1cGxpY2F0ZSBmcmFtZSAgICAgICAgICAgICAgPSAlbGRcbiIsIChVTE9ORylwQWQtPldsYW5Db3VudGVycy5GcmFtZUR1cGxpY2F0ZUNvdW50LlF1YWRQYXJ0KTsKKworICAgIHNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIkZhbHNlIENDQSAob25lIHNlY29uZCkgICAgICAgICAgPSAlbGRcbiIsIChVTE9ORylwQWQtPlJhbGlua0NvdW50ZXJzLk9uZVNlY0ZhbHNlQ0NBQ250KTsKKyNpZmRlZiBSQUxJTktfQVRFCisJaWYgKEFURV9PTihwQWQpKQorCXsKKwkJaWYgKHBBZC0+YXRlLlJ4QW50ZW5uYVNlbCA9PSAwKQorCQl7CisgICAgCQlzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSU1NJLUEgICAgICAgICAgICAgICAgICAgICAgICAgID0gJWxkXG4iLCAoTE9ORykocEFkLT5hdGUuTGFzdFJzc2kwIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSkpOworCQkJc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUlNTSS1CIChpZiBhdmFpbGFibGUpICAgICAgICAgICA9ICVsZFxuIiwgKExPTkcpKHBBZC0+YXRlLkxhc3RSc3NpMSAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGEpKTsKKwkJCXNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlJTU0ktQyAoaWYgYXZhaWxhYmxlKSAgICAgICAgICAgPSAlbGRcblxuIiwgKExPTkcpKHBBZC0+YXRlLkxhc3RSc3NpMiAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGEpKTsKKwkJfQorCQllbHNlCisJCXsKKyAgICAJCXNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlJTU0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAlbGRcbiIsIChMT05HKShwQWQtPmF0ZS5MYXN0UnNzaTAgLSBwQWQtPkJicFJzc2lUb0RibURlbHRhKSk7CisJCX0KKwl9CisJZWxzZQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKwl7CisgICAgCXNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIlJTU0ktQSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAlbGRcbiIsIChMT05HKShwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMCAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGEpKTsKKyAgICAgICAgc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUlNTSS1CIChpZiBhdmFpbGFibGUpICAgICAgICAgICA9ICVsZFxuIiwgKExPTkcpKHBBZC0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kxIC0gcEFkLT5CYnBSc3NpVG9EYm1EZWx0YSkpOworICAgICAgICBzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSU1NJLUMgKGlmIGF2YWlsYWJsZSkgICAgICAgICAgID0gJWxkXG5cbiIsIChMT05HKShwQWQtPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMiAtIHBBZC0+QmJwUnNzaVRvRGJtRGVsdGEpKTsKKwl9CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIHNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIldwYVN1cHBsaWNhbnRVUCAgICAgICAgICAgICAgICAgPSAlZFxuXG4iLCBwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVApOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworCisgICAgd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09IHJ0X3ByaXZhdGVfZ2V0X3N0YXRpc3RpY3MsIHdycS0+bGVuZ3RoID0gJWRcbiIsIHdycS0+bGVuZ3RoKSk7CisKKyAgICByZXR1cm4gU3RhdHVzOworfQorCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCit2b2lkCWdldEJhSW5mbygKKwlJTglQUlRNUF9BREFQVEVSCXBBZCwKKwlJTglQVUNIQVIJCQlwT3V0QnVmKQoreworCUlOVCBpLCBqOworCUJBX09SSV9FTlRSWSAqcE9yaUJBRW50cnk7CisJQkFfUkVDX0VOVFJZICpwUmVjQkFFbnRyeTsKKworCWZvciAoaT0wOyBpPE1BWF9MRU5fT0ZfTUFDX1RBQkxFOyBpKyspCisJeworCQlQTUFDX1RBQkxFX0VOVFJZIHBFbnRyeSA9ICZwQWQtPk1hY1RhYi5Db250ZW50W2ldOworCQlpZiAoKChwRW50cnktPlZhbGlkQXNDTEkgfHwgcEVudHJ5LT5WYWxpZEFzQXBDbGkpICYmIChwRW50cnktPlNzdCA9PSBTU1RfQVNTT0MpKQorCQkJfHwgKHBFbnRyeS0+VmFsaWRBc1dEUykgfHwgKHBFbnRyeS0+VmFsaWRBc01lc2gpKQorCQl7CisJCQlzcHJpbnRmKHBPdXRCdWYsICIlc1xuJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlggKEFpZCA9ICVkKSAoQVApIC1cbiIsCisgICAgICAgICAgICAgICAgcE91dEJ1ZiwKKwkJCQlwRW50cnktPkFkZHJbMF0sIHBFbnRyeS0+QWRkclsxXSwgcEVudHJ5LT5BZGRyWzJdLAorCQkJCXBFbnRyeS0+QWRkclszXSwgcEVudHJ5LT5BZGRyWzRdLCBwRW50cnktPkFkZHJbNV0sIHBFbnRyeS0+QWlkKTsKKworCQkJc3ByaW50ZihwT3V0QnVmLCAiJXNbUmVjaXBpZW50XVxuIiwgcE91dEJ1Zik7CisJCQlmb3IgKGo9MDsgaiA8IE5VTV9PRl9USUQ7IGorKykKKwkJCXsKKwkJCQlpZiAocEVudHJ5LT5CQVJlY1djaWRBcnJheVtqXSAhPSAwKQorCQkJCXsKKwkJCQkJcFJlY0JBRW50cnkgPSZwQWQtPkJBVGFibGUuQkFSZWNFbnRyeVtwRW50cnktPkJBUmVjV2NpZEFycmF5W2pdXTsKKwkJCQkJc3ByaW50ZihwT3V0QnVmLCAiJXNUSUQ9JWQsIEJBV2luU2l6ZT0lZCwgTGFzdEluZFNlcT0lZCwgUmVvcmRlcmluZ1BrdHM9JWRcbiIsIHBPdXRCdWYsIGosIHBSZWNCQUVudHJ5LT5CQVdpblNpemUsIHBSZWNCQUVudHJ5LT5MYXN0SW5kU2VxLCBwUmVjQkFFbnRyeS0+bGlzdC5xbGVuKTsKKwkJCQl9CisJCQl9CisJCQlzcHJpbnRmKHBPdXRCdWYsICIlc1xuIiwgcE91dEJ1Zik7CisKKwkJCXNwcmludGYocE91dEJ1ZiwgIiVzW09yaWdpbmF0b3JdXG4iLCBwT3V0QnVmKTsKKwkJCWZvciAoaj0wOyBqIDwgTlVNX09GX1RJRDsgaisrKQorCQkJeworCQkJCWlmIChwRW50cnktPkJBT3JpV2NpZEFycmF5W2pdICE9IDApCisJCQkJeworCQkJCQlwT3JpQkFFbnRyeSA9JnBBZC0+QkFUYWJsZS5CQU9yaUVudHJ5W3BFbnRyeS0+QkFPcmlXY2lkQXJyYXlbal1dOworCQkJCQlzcHJpbnRmKHBPdXRCdWYsICIlc1RJRD0lZCwgQkFXaW5TaXplPSVkLCBTdGFydFNlcT0lZCwgQ3VyVHhTZXE9JWRcbiIsIHBPdXRCdWYsIGosIHBPcmlCQUVudHJ5LT5CQVdpblNpemUsIHBPcmlCQUVudHJ5LT5TZXF1ZW5jZSwgcEVudHJ5LT5UeFNlcVtqXSk7CisJCQkJfQorCQkJfQorCQkJc3ByaW50ZihwT3V0QnVmLCAiJXNcblxuIiwgcE91dEJ1Zik7CisJCX0KKyAgICAgICAgaWYgKHN0cmxlbihwT3V0QnVmKSA+IChJV19QUklWX1NJWkVfTUFTSyAtIDMwKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKwl9CisKKwlyZXR1cm47Cit9CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisKK3N0YXRpYyBpbnQKK3J0X3ByaXZhdGVfc2hvdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQlzdHJ1Y3QgaXdfcG9pbnQgKndycSwgY2hhciAqZXh0cmEpCit7CisgICAgSU5UCQkJCVN0YXR1cyA9IDA7CisgICAgVklSVFVBTF9BREFQVEVSCSpwVmlydHVhbEFkID0gTlVMTDsKKyAgICBQUlRNUF9BREFQVEVSICAgcEFkOworCVBPU19DT09LSUUJCXBPYmo7CisgICAgdTMyICAgICAgICAgICAgIHN1YmNtZCA9IHdycS0+ZmxhZ3M7CisKKwlpZiAoZGV2LT5wcml2X2ZsYWdzID09IElOVF9NQUlOKQorCQlwQWQgPSBkZXYtPm1sX3ByaXY7CisJZWxzZQorCXsKKwkJcFZpcnR1YWxBZCA9IGRldi0+bWxfcHJpdjsKKwkJcEFkID0gcFZpcnR1YWxBZC0+UnRtcERldi0+bWxfcHJpdjsKKwl9CisJcE9iaiA9IChQT1NfQ09PS0lFKSBwQWQtPk9TX0Nvb2tpZTsKKworCWlmIChwQWQgPT0gTlVMTCkKKwl7CisJCS8qIGlmIDFzdCBvcGVuIGZhaWwsIHBBZCB3aWxsIGJlIGZyZWU7CisJCSAgIFNvIHRoZSBuZXRfZGV2LT5tbF9wcml2IHdpbGwgYmUgTlVMTCBpbiAycmQgb3BlbiAqLworCQlyZXR1cm4gLUVORVRET1dOOworCX0KKworICAgIGlmIChleHRyYSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgd3JxLT5sZW5ndGggPSAwOworICAgICAgICByZXR1cm4gLUVJTzsKKyAgICB9CisgICAgbWVtc2V0KGV4dHJhLCAweDAwLCBJV19QUklWX1NJWkVfTUFTSyk7CisKKwl7CisJCXBPYmotPmlvY3RsX2lmX3R5cGUgPSBJTlRfTUFJTjsKKyAgICAgICAgcE9iai0+aW9jdGxfaWYgPSBNQUlOX01CU1NJRDsKKwl9CisKKyAgICBzd2l0Y2goc3ViY21kKQorICAgIHsKKworICAgICAgICBjYXNlIFNIT1dfQ09OTl9TVEFUVVM6CisgICAgICAgICAgICBpZiAoTU9OSVRPUl9PTihwQWQpKQorICAgICAgICAgICAgeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgICAgICAgICAgICAgIGlmIChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQgJiYKKyAgICAgICAgICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuUmVnVHJhbnNtaXRTZXR0aW5nLmZpZWxkLkJXKQorICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGV4dHJhLCAiTW9uaXRvciBNb2RlKENlbnRyYWxDaGFubmVsICVkKVxuIiwgcEFkLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihleHRyYSwgIk1vbml0b3IgTW9kZShDaGFubmVsICVkKVxuIiwgcEFkLT5Db21tb25DZmcuQ2hhbm5lbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHBBZC0+SW5kaWNhdGVNZWRpYVN0YXRlID09IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkKQorICAgICAgICAgICAgCXsKKyAgICAgICAgICAgIAkgICAgaWYgKElORlJBX09OKHBBZCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihleHRyYSwgIkNvbm5lY3RlZChBUDogJXNbJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhdKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLlNzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5Cc3NpZFswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuQnNzaWRbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWQtPkNvbW1vbkNmZy5Cc3NpZFszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkJzc2lkWzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkLT5Db21tb25DZmcuQnNzaWRbNV0pOworICAgICAgICAgICAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSAsKCJTc2lkPSVzICxTc2lkbGVuID0gJWRcbiIscEFkLT5Db21tb25DZmcuU3NpZCwgcEFkLT5Db21tb25DZmcuU3NpZExlbikpOworICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQURIT0NfT04ocEFkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoZXh0cmEsICJDb25uZWN0ZWRcbiIpOworICAgICAgICAgICAgCX0KKyAgICAgICAgICAgIAllbHNlCisgICAgICAgICAgICAJeworICAgICAgICAgICAgCSAgICBzcHJpbnRmKGV4dHJhLCAiRGlzY29ubmVjdGVkXG4iKTsKKyAgICAgICAgICAgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgiQ29ublN0YXR1cyBpcyBub3QgY29ubmVjdGVkXG4iKSk7CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSE9XX0RSVklFUl9WRVJJT046CisgICAgICAgICAgICBzcHJpbnRmKGV4dHJhLCAiRHJpdmVyIHZlcnNpb24tJXMsICVzICVzXG4iLCBTVEFfRFJJVkVSX1ZFUlNJT04sIF9fREFURV9fLCBfX1RJTUVfXyApOworICAgICAgICAgICAgd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyAgICAgICAgY2FzZSBTSE9XX0JBX0lORk86CisgICAgICAgICAgICBnZXRCYUluZm8ocEFkLCBleHRyYSk7CisgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQljYXNlIFNIT1dfREVTQ19JTkZPOgorCQkJeworCQkJCVNob3dfRGVzY0luZm9fUHJvYyhwQWQsIE5VTEwpOworCQkJCXdycS0+bGVuZ3RoID0gMDsgLy8gMTogc2l6ZSBvZiAnXDAnCisJCQl9CisJCQlicmVhazsKKyAgICAgICAgY2FzZSBSQUlPX09GRjoKKyAgICAgICAgICAgIGlmIChSVE1QX1RFU1RfRkxBRyhwQWQsIGZSVE1QX0FEQVBURVJfQlNTX1NDQU5fSU5fUFJPR1JFU1MpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNwcmludGYoZXh0cmEsICJTY2FubmluZ1xuIik7CisgICAgICAgICAgICAgICAgd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWQtPlN0YUNmZy5iU3dSYWRpbyA9IEZBTFNFOworICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLmJSYWRpbyAhPSAocEFkLT5TdGFDZmcuYkh3UmFkaW8gJiYgcEFkLT5TdGFDZmcuYlN3UmFkaW8pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBZC0+U3RhQ2ZnLmJSYWRpbyA9IChwQWQtPlN0YUNmZy5iSHdSYWRpbyAmJiBwQWQtPlN0YUNmZy5iU3dSYWRpbyk7CisgICAgICAgICAgICAgICAgaWYgKHBBZC0+U3RhQ2ZnLmJSYWRpbyA9PSBGQUxTRSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE1sbWVSYWRpb09mZihwQWQpOworICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXh0cmEgaW5mb3JtYXRpb24KKwkJCQkJcEFkLT5FeHRyYUluZm8gPSBTV19SQURJT19PRkY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc3ByaW50ZihleHRyYSwgIlJhZGlvIE9mZlxuIik7CisgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJBSU9fT046CisgICAgICAgICAgICBpZiAoUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGV4dHJhLCAiU2Nhbm5pbmdcbiIpOworICAgICAgICAgICAgICAgIHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7IC8vIDE6IHNpemUgb2YgJ1wwJworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFkLT5TdGFDZmcuYlN3UmFkaW8gPSBUUlVFOworICAgICAgICAgICAgLy9pZiAocEFkLT5TdGFDZmcuYlJhZGlvICE9IChwQWQtPlN0YUNmZy5iSHdSYWRpbyAmJiBwQWQtPlN0YUNmZy5iU3dSYWRpbykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkLT5TdGFDZmcuYlJhZGlvID0gKHBBZC0+U3RhQ2ZnLmJId1JhZGlvICYmIHBBZC0+U3RhQ2ZnLmJTd1JhZGlvKTsKKyAgICAgICAgICAgICAgICBpZiAocEFkLT5TdGFDZmcuYlJhZGlvID09IFRSVUUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBNbG1lUmFkaW9PbihwQWQpOworICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXh0cmEgaW5mb3JtYXRpb24KKwkJCQkJcEFkLT5FeHRyYUluZm8gPSBFWFRSQV9JTkZPX0NMRUFSOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNwcmludGYoZXh0cmEsICJSYWRpbyBPblxuIik7CisgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKyAgICAgICAgICAgIGJyZWFrOworCisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJY2FzZSBTSE9XX0RMU19FTlRSWV9JTkZPOgorCQkJeworCQkJCVNldF9EbHNFbnRyeUluZm9fRGlzcGxheV9Qcm9jKHBBZCwgTlVMTCk7CisJCQkJd3JxLT5sZW5ndGggPSAwOyAvLyAxOiBzaXplIG9mICdcMCcKKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmIC8vIFFPU19ETFNfU1VQUE9SVCAvLworCisJCWNhc2UgU0hPV19DRkdfVkFMVUU6CisJCQl7CisJCQkJU3RhdHVzID0gUlRNUFNob3dDZmdWYWx1ZShwQWQsIHdycS0+cG9pbnRlciwgZXh0cmEpOworCQkJCWlmIChTdGF0dXMgPT0gMCkKKwkJCQkJd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCisJCQl9CisJCQlicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzIC0gdW5rbm93IHN1YmNtZCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN1YmNtZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFN0YXR1czsKK30KKworI2lmZGVmIFNJT0NTSVdNTE1FCitpbnQgcnRfaW9jdGxfc2l3bWxtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCisJCQkgICBjaGFyICpleHRyYSkKK3sKKwlQUlRNUF9BREFQVEVSICAgcEFkID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19tbG1lICpwTWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKXdycXUtPmRhdGEucG9pbnRlcjsKKwlNTE1FX1FVRVVFX0VMRU0JCQkJTXNnRWxlbTsKKwlNTE1FX0RJU0FTU09DX1JFUV9TVFJVQ1QJRGlzQXNzb2NSZXE7CisJTUxNRV9ERUFVVEhfUkVRX1NUUlVDVCAgICAgIERlQXV0aFJlcTsKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT0+ICVzXG4iLCBfX0ZVTkNUSU9OX18pKTsKKworCWlmIChwTWxtZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaChwTWxtZS0+Y21kKQorCXsKKyNpZmRlZiBJV19NTE1FX0RFQVVUSAorCQljYXNlIElXX01MTUVfREVBVVRIOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT4gJXMgLSBJV19NTE1FX0RFQVVUSFxuIiwgX19GVU5DVElPTl9fKSk7CisJCQlDT1BZX01BQ19BRERSKERlQXV0aFJlcS5BZGRyLCBwQWQtPkNvbW1vbkNmZy5Cc3NpZCk7CisJCQlEZUF1dGhSZXEuUmVhc29uID0gcE1sbWUtPnJlYXNvbl9jb2RlOworCQkJTXNnRWxlbS5Nc2dMZW4gPSBzaXplb2YoTUxNRV9ERUFVVEhfUkVRX1NUUlVDVCk7CisJCQlOZGlzTW92ZU1lbW9yeShNc2dFbGVtLk1zZywgJkRlQXV0aFJlcSwgc2l6ZW9mKE1MTUVfREVBVVRIX1JFUV9TVFJVQ1QpKTsKKwkJCU1sbWVEZWF1dGhSZXFBY3Rpb24ocEFkLCAmTXNnRWxlbSk7CisJCQlpZiAoSU5GUkFfT04ocEFkKSkKKwkJCXsKKwkJCSAgICBMaW5rRG93bihwQWQsIEZBTFNFKTsKKwkJCSAgICBwQWQtPk1sbWUuQXNzb2NNYWNoaW5lLkN1cnJTdGF0ZSA9IEFTU09DX0lETEU7CisJCQl9CisJCQlicmVhazsKKyNlbmRpZiAvLyBJV19NTE1FX0RFQVVUSCAvLworI2lmZGVmIElXX01MTUVfRElTQVNTT0MKKwkJY2FzZSBJV19NTE1FX0RJU0FTU09DOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT4gJXMgLSBJV19NTE1FX0RJU0FTU09DXG4iLCBfX0ZVTkNUSU9OX18pKTsKKwkJCUNPUFlfTUFDX0FERFIoRGlzQXNzb2NSZXEuQWRkciwgcEFkLT5Db21tb25DZmcuQnNzaWQpOworCQkJRGlzQXNzb2NSZXEuUmVhc29uID0gIHBNbG1lLT5yZWFzb25fY29kZTsKKworCQkJTXNnRWxlbS5NYWNoaW5lID0gQVNTT0NfU1RBVEVfTUFDSElORTsKKwkJCU1zZ0VsZW0uTXNnVHlwZSA9IE1UMl9NTE1FX0RJU0FTU09DX1JFUTsKKwkJCU1zZ0VsZW0uTXNnTGVuID0gc2l6ZW9mKE1MTUVfRElTQVNTT0NfUkVRX1NUUlVDVCk7CisJCQlOZGlzTW92ZU1lbW9yeShNc2dFbGVtLk1zZywgJkRpc0Fzc29jUmVxLCBzaXplb2YoTUxNRV9ESVNBU1NPQ19SRVFfU1RSVUNUKSk7CisKKwkJCXBBZC0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgPSBDTlRMX1dBSVRfT0lEX0RJU0FTU09DOworCQkJTWxtZURpc2Fzc29jUmVxQWN0aW9uKHBBZCwgJk1zZ0VsZW0pOworCQkJYnJlYWs7CisjZW5kaWYgLy8gSVdfTUxNRV9ESVNBU1NPQyAvLworCQlkZWZhdWx0OgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PT4gJXMgLSBVbmtub3cgQ29tbWFuZFxuIiwgX19GVU5DVElPTl9fKSk7CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvLyBTSU9DU0lXTUxNRSAvLworCisjaWYgV0lSRUxFU1NfRVhUID4gMTcKK2ludCBydF9pb2N0bF9zaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgICBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOworCisgICAgLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKwlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisJeworICAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAJcmV0dXJuIC1FTkVURE9XTjsKKwl9CisJc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisgICAgCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKKyAgICAgICAgICAgIGlmIChwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSzsKKwkJCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykKKwkJCQkJcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEyKQorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLOworCisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6SVdfQVVUSF9XUEFfVkVSU0lPTiAtIHBhcmFtLT52YWx1ZSA9ICVkIVxuIiwgX19GVU5DVElPTl9fLCBwYXJhbS0+dmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIAljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgorICAgICAgICAgICAgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9XRVA0MCB8fAorICAgICAgICAgICAgICAgICAgICAgcGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX1dFUDEwNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxWCA9IEZBTFNFOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9US0lQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzID0gTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXMgPSBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1czsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlBhaXJDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX0NDTVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgPSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6SVdfQVVUSF9DSVBIRVJfUEFJUldJU0UgLSBwYXJhbS0+dmFsdWUgPSAlZCFcbiIsIF9fRlVOQ1RJT05fXywgcGFyYW0tPnZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKKyAgICAgICAgICAgIGlmIChwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9DSVBIRVJfTk9ORSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX1dFUDQwIHx8CisgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+dmFsdWUgPT0gSVdfQVVUSF9DSVBIRVJfV0VQMTA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0NJUEhFUl9US0lQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW0tPnZhbHVlID09IElXX0FVVEhfQ0lQSEVSX0NDTVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciA9IE5kaXM4MDJfMTFFbmNyeXB0aW9uM0VuYWJsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6SVdfQVVUSF9DSVBIRVJfR1JPVVAgLSBwYXJhbS0+dmFsdWUgPSAlZCFcbiIsIF9fRlVOQ1RJT05fXywgcGFyYW0tPnZhbHVlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorICAgICAgICAgICAgaWYgKHBhcmFtLT52YWx1ZSA9PSBJV19BVVRIX0tFWV9NR01UXzgwMl8xWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5JRUVFODAyMVggPSBGQUxTRTsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVXUEEyOworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5JRUVFODAyMVggPSBGQUxTRTsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisgICAgICAgICAgICAgICAgfQorI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIC8vIFdFUCAxeAorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxWCA9IFRSVUU7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAocGFyYW0tPnZhbHVlID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy9wQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJCQkJU1RBX1BPUlRfU0VDVVJFRChwQWRhcHRlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6SVdfQVVUSF9LRVlfTUdNVCAtIHBhcmFtLT52YWx1ZSA9ICVkIVxuIiwgX19GVU5DVElPTl9fLCBwYXJhbS0+dmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIAljYXNlIElXX0FVVEhfUlhfVU5FTkNSWVBURURfRUFQT0w6CisgICAgICAgICAgICBicmVhazsKKyAgICAJY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKyAgICAgICAgICAgIC8qaWYgKHBhcmFtLT52YWx1ZSA9PSAwKQorCQkJeworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuT3JpZ1dlcFN0YXR1cyA9IHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKyAgICAgICAgCSAgICBwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworICAgICAgICAgICAgfSovCisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6SVdfQVVUSF9QUklWQUNZX0lOVk9LRUQgLSBwYXJhbS0+dmFsdWUgPSAlZCFcbiIsIF9fRlVOQ1RJT05fXywgcGFyYW0tPnZhbHVlKSk7CisgICAgCQlicmVhazsKKyAgICAJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CisgICAgICAgICAgICBpZiAocGFyYW0tPnZhbHVlICE9IDApCisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKwkJCWVsc2UKKwkJCXsKKyAgICAgICAgICAgICAgICAvL3BBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKwkJCQlTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKwkJCX0KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIX1dQQV9WRVJTSU9OIC0gcGFyYW0tPnZhbHVlID0gJWQhXG4iLCBfX0ZVTkNUSU9OX18sIHBhcmFtLT52YWx1ZSkpOworICAgIAkJYnJlYWs7CisgICAgCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKwkJCWlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKQorICAgICAgICAgICAgeworCQkJCXBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQ7CisJCQl9CisgICAgICAgICAgICBlbHNlIGlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkKKyAgICAgICAgICAgIHsKKwkJCQlwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKKwkJCX0KKyAgICAgICAgICAgIGVsc2UKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIXzgwMjExX0FVVEhfQUxHIC0gcGFyYW0tPnZhbHVlID0gJWQhXG4iLCBfX0ZVTkNUSU9OX18sIHBhcmFtLT52YWx1ZSkpOworCQkJYnJlYWs7CisgICAgCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKKyAgICAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19BVVRIX1dQQV9FTkFCTEVEIC0gRHJpdmVyIHN1cHBvcnRzIFdQQSEocGFyYW0tPnZhbHVlID0gJWQpXG4iLCBfX0ZVTkNUSU9OX18sIHBhcmFtLT52YWx1ZSkpOworICAgIAkJYnJlYWs7CisgICAgCWRlZmF1bHQ6CisgICAgCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0X2lvY3RsX2dpd2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgICBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOworCisgICAgLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKwlpZighUlRNUF9URVNUX0ZMQUcocEFkYXB0ZXIsIGZSVE1QX0FEQVBURVJfSU5URVJSVVBUX0lOX1VTRSkpCisgICAgeworICAJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklORk86Ok5ldHdvcmsgaXMgZG93biFcbiIpKTsKKyAgICAJcmV0dXJuIC1FTkVURE9XTjsKKyAgICB9CisKKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKwljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKyAgICAgICAgcGFyYW0tPnZhbHVlID0gKHBBZGFwdGVyLT5TdGFDZmcuV2VwU3RhdHVzID09IE5kaXM4MDJfMTFXRVBEaXNhYmxlZCkgPyAwIDogMTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisgICAgICAgIHBhcmFtLT52YWx1ZSA9IChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVNoYXJlZCkgPyBJV19BVVRIX0FMR19TSEFSRURfS0VZIDogSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorCQlwYXJhbS0+dmFsdWUgPSAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpID8gMSA6IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKyAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJydF9pb2N0bF9naXdhdXRoOjpwYXJhbS0+dmFsdWUgPSAlZCFcbiIsIHBhcmFtLT52YWx1ZSkpOworCXJldHVybiAwOworfQorCit2b2lkIGZuU2V0Q2lwaGVyS2V5KAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIElOVCAgICAgICAgICAgICBrZXlJZHgsCisgICAgSU4gIFVDSEFSICAgICAgICAgICBDaXBoZXJBbGcsCisgICAgSU4gIEJPT0xFQU4gICAgICAgICBiR1RLLAorICAgIElOICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0KQoreworICAgIE5kaXNaZXJvTWVtb3J5KCZwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0sIHNpemVvZihDSVBIRVJfS0VZKSk7CisgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleUxlbiA9IExFTl9US0lQX0VLOworICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXksIGV4dC0+a2V5LCBMRU5fVEtJUF9FSyk7CisgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLlR4TWljLCBleHQtPmtleSArIExFTl9US0lQX0VLLCBMRU5fVEtJUF9UWE1JQ0spOworICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5SeE1pYywgZXh0LT5rZXkgKyBMRU5fVEtJUF9FSyArIExFTl9US0lQX1RYTUlDSywgTEVOX1RLSVBfUlhNSUNLKTsKKyAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCisgICAgLy8gVXBkYXRlIGdyb3VwIGtleSBpbmZvcm1hdGlvbiB0byBBU0lDIFNoYXJlZCBLZXkgVGFibGUKKwlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkYXB0ZXIsCisJCQkJCQkgIEJTUzAsCisJCQkJCQkgIGtleUlkeCwKKwkJCQkJCSAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLkNpcGhlckFsZywKKwkJCQkJCSAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwKKwkJCQkJCSAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLlR4TWljLAorCQkJCQkJICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uUnhNaWMpOworCisgICAgaWYgKGJHVEspCisgICAgICAgIC8vIFVwZGF0ZSBBU0lDIFdDSUQgYXR0cmlidXRlIHRhYmxlIGFuZCBJVkVJViB0YWJsZQorICAgIAlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZGFwdGVyLAorICAgIAkJCQkJCQkgIEJTUzAsCisgICAgCQkJCQkJCSAga2V5SWR4LAorICAgIAkJCQkJCQkgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcsCisgICAgCQkJCQkJCSAgTlVMTCk7CisgICAgZWxzZQorICAgICAgICAvLyBVcGRhdGUgQVNJQyBXQ0lEIGF0dHJpYnV0ZSB0YWJsZSBhbmQgSVZFSVYgdGFibGUKKyAgICAJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWRhcHRlciwKKyAgICAJCQkJCQkJICBCU1MwLAorICAgIAkJCQkJCQkgIGtleUlkeCwKKyAgICAJCQkJCQkJICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnLAorICAgIAkJCQkJCQkgICZwQWRhcHRlci0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0pOworfQorCitpbnQgcnRfaW9jdGxfc2l3ZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCSAgIGNoYXIgKmV4dHJhKQorCQkJeworICAgIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOworCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKKyAgICBpbnQga2V5SWR4LCBhbGcgPSBleHQtPmFsZzsKKworICAgIC8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisJaWYoIVJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorCXsKKyAgCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisgICAgCXJldHVybiAtRU5FVERPV047CisJfQorCisgICAgaWYgKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKKwl7CisgICAgICAgIGtleUlkeCA9IChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKyAgICAgICAgLy8gc2V0IEJTU0lEIHdjaWQgZW50cnkgb2YgdGhlIFBhaXItd2lzZSBLZXkgdGFibGUgYXMgbm8tc2VjdXJpdHkgbW9kZQorCSAgICBBc2ljUmVtb3ZlUGFpcndpc2VLZXlFbnRyeShwQWRhcHRlciwgQlNTMCwgQlNTSURfV0NJRCk7CisgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXlMZW4gPSAwOworCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisJCUFzaWNSZW1vdmVTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwgMCwgKFVDSEFSKWtleUlkeCk7CisgICAgICAgIE5kaXNaZXJvTWVtb3J5KCZwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0sIHNpemVvZihDSVBIRVJfS0VZKSk7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpSZW1vdmUgYWxsIGtleXMhKGVuY29kaW5nLT5mbGFncyA9ICV4KVxuIiwgX19GVU5DVElPTl9fLCBlbmNvZGluZy0+ZmxhZ3MpKTsKKyAgICB9CisJCQkJCWVsc2UKKyAgICB7CisgICAgICAgIC8vIEdldCBLZXkgSW5kZXggYW5kIGNvbnZldCB0byBvdXIgb3duIGRlZmluZWQga2V5IGluZGV4CisgICAgCWtleUlkeCA9IChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKyAgICAJaWYoKGtleUlkeCA8IDApIHx8IChrZXlJZHggPj0gTlJfV0VQX0tFWVMpKQorICAgIAkJcmV0dXJuIC1FSU5WQUw7CisKKyAgICAgICAgaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKQorICAgICAgICB7CisgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCA9IGtleUlkeDsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpEZWZhdWx0S2V5SWQgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCkpOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChhbGcpIHsKKyAgICAJCWNhc2UgSVdfRU5DT0RFX0FMR19OT05FOgorICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiVzOjpJV19FTkNPREVfQUxHX05PTkVcbiIsIF9fRlVOQ1RJT05fXykpOworICAgIAkJCWJyZWFrOworICAgIAkJY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6SVdfRU5DT0RFX0FMR19XRVAgLSBleHQtPmtleV9sZW4gPSAlZCwga2V5SWR4ID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgZXh0LT5rZXlfbGVuLCBrZXlJZHgpKTsKKyAgICAJCQlpZiAoZXh0LT5rZXlfbGVuID09IE1BWF9XRVBfS0VZX1NJWkUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAJCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW2tleUlkeF0uS2V5TGVuID0gTUFYX1dFUF9LRVlfU0laRTsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLkNpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisJCQkJfQorICAgICAgICAJCWVsc2UgaWYgKGV4dC0+a2V5X2xlbiA9PSBNSU5fV0VQX0tFWV9TSVpFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleUxlbiA9IE1JTl9XRVBfS0VZX1NJWkU7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5DaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisJCQl9CisgICAgICAgIAkJZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAgICAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1ba2V5SWR4XS5LZXksICAxNik7CisJCQkgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtrZXlJZHhdLktleSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7CisgICAgCQkJYnJlYWs7CisgICAgICAgICAgICBjYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczo6SVdfRU5DT0RFX0FMR19US0lQIC0ga2V5SWR4ID0gJWQsIGV4dC0+a2V5X2xlbiA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGtleUlkeCwgZXh0LT5rZXlfbGVuKSk7CisgICAgICAgICAgICAgICAgaWYgKGV4dC0+a2V5X2xlbiA9PSAzMikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm5TZXRDaXBoZXJLZXkocEFkYXB0ZXIsIGtleUlkeCwgQ0lQSEVSX1RLSVAsIEZBTFNFLCBleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3BBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmblNldENpcGhlcktleShwQWRhcHRlciwga2V5SWR4LCBDSVBIRVJfVEtJUCwgVFJVRSwgZXh0KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IDgwMi4xeCBwb3J0IGNvbnRyb2wKKyAgICAgICAgICAgIAkgICAgICAgIC8vcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworICAgICAgICAgICAgCSAgICAgICAgU1RBX1BPUlRfU0VDVVJFRChwQWRhcHRlcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSVdfRU5DT0RFX0FMR19DQ01QOgorICAgICAgICAgICAgICAgIGlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkKKwkJeworICAgICAgICAgICAgICAgICAgICBmblNldENpcGhlcktleShwQWRhcHRlciwga2V5SWR4LCBDSVBIRVJfQUVTLCBGQUxTRSwgZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikKKyAgICAgICAgICAgICAgICAgICAgCS8vcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworICAgICAgICAgICAgICAgICAgICAJU1RBX1BPUlRfU0VDVVJFRChwQWRhcHRlcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9HUk9VUF9LRVkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmblNldENpcGhlcktleShwQWRhcHRlciwga2V5SWR4LCBDSVBIRVJfQUVTLCBUUlVFLCBleHQpOworCisgICAgICAgICAgICAgICAgICAgIC8vIHNldCA4MDIuMXggcG9ydCBjb250cm9sCisgICAgICAgIAkgICAgICAgIC8vcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEOworICAgICAgICAJICAgICAgICBTVEFfUE9SVF9TRUNVUkVEKHBBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgCQlkZWZhdWx0OgorICAgIAkJCXJldHVybiAtRUlOVkFMOworCQl9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorcnRfaW9jdGxfZ2l3ZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgcEFkID0gZGV2LT5tbF9wcml2OworCVBDSEFSIHBLZXkgPSBOVUxMOworCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCWludCBpZHgsIG1heF9rZXlfbGVuOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgiPT09PiBydF9pb2N0bF9naXdlbmNvZGVleHRcbiIpKTsKKworCW1heF9rZXlfbGVuID0gZW5jb2RpbmctPmxlbmd0aCAtIHNpemVvZigqZXh0KTsKKwlpZiAobWF4X2tleV9sZW4gPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKKwlpZiAoaWR4KQorCXsKKwkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gNCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZHgtLTsKKworCQlpZiAoKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKSB8fAorCQkJKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkKSkKKwkJeworCQkJaWYgKGlkeCAhPSBwQWQtPlN0YUNmZy5EZWZhdWx0S2V5SWQpCisJCQl7CisJCQkJZXh0LT5rZXlfbGVuID0gMDsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJCWlkeCA9IHBBZC0+U3RhQ2ZnLkRlZmF1bHRLZXlJZDsKKworCWVuY29kaW5nLT5mbGFncyA9IGlkeCArIDE7CisJbWVtc2V0KGV4dCwgMCwgc2l6ZW9mKCpleHQpKTsKKworCWV4dC0+a2V5X2xlbiA9IDA7CisJc3dpdGNoKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cykgeworCQljYXNlIE5kaXM4MDJfMTFXRVBEaXNhYmxlZDoKKwkJCWV4dC0+YWxnID0gSVdfRU5DT0RFX0FMR19OT05FOworCQkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwkJCWJyZWFrOworCQljYXNlIE5kaXM4MDJfMTFXRVBFbmFibGVkOgorCQkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1dFUDsKKwkJCWlmIChwQWQtPlNoYXJlZEtleVtCU1MwXVtpZHhdLktleUxlbiA+IG1heF9rZXlfbGVuKQorCQkJCXJldHVybiAtRTJCSUc7CisJCQllbHNlCisJCQl7CisJCQkJZXh0LT5rZXlfbGVuID0gcEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXlMZW47CisJCQkJcEtleSA9ICYocEFkLT5TaGFyZWRLZXlbQlNTMF1baWR4XS5LZXlbMF0pOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgTmRpczgwMl8xMUVuY3J5cHRpb24yRW5hYmxlZDoKKwkJY2FzZSBOZGlzODAyXzExRW5jcnlwdGlvbjNFbmFibGVkOgorCQkJaWYgKHBBZC0+U3RhQ2ZnLldlcFN0YXR1cyA9PSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkKQorCQkJCWV4dC0+YWxnID0gSVdfRU5DT0RFX0FMR19US0lQOworCQkJZWxzZQorCQkJCWV4dC0+YWxnID0gSVdfRU5DT0RFX0FMR19DQ01QOworCisJCQlpZiAobWF4X2tleV9sZW4gPCAzMikKKwkJCQlyZXR1cm4gLUUyQklHOworCQkJZWxzZQorCQkJeworCQkJCWV4dC0+a2V5X2xlbiA9IDMyOworCQkJCXBLZXkgPSAmcEFkLT5TdGFDZmcuUE1LWzBdOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZXh0LT5rZXlfbGVuICYmIHBLZXkpCisJeworCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7CisJCW1lbWNweShleHQtPmtleSwgcEtleSwgZXh0LT5rZXlfbGVuKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIFNJT0NTSVdHRU5JRQoraW50IHJ0X2lvY3RsX3Npd2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgICBwQWQgPSBkZXYtPm1sX3ByaXY7CisKKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPiBNQVhfTEVOX09GX1JTTklFIHx8CisJICAgICh3cnF1LT5kYXRhLmxlbmd0aCAmJiBleHRyYSA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGgpCisJeworCQlwQWQtPlN0YUNmZy5SU05JRV9MZW4gPSB3cnF1LT5kYXRhLmxlbmd0aDsKKwkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLlJTTl9JRVswXSwgZXh0cmEsIHBBZC0+U3RhQ2ZnLlJTTklFX0xlbik7CisJfQorCWVsc2UKKwl7CisJCXBBZC0+U3RhQ2ZnLlJTTklFX0xlbiA9IDA7CisJCU5kaXNaZXJvTWVtb3J5KCZwQWQtPlN0YUNmZy5SU05fSUVbMF0sIE1BWF9MRU5fT0ZfUlNOSUUpOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmIC8vIFNJT0NTSVdHRU5JRSAvLworCitpbnQgcnRfaW9jdGxfZ2l3Z2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCVBSVE1QX0FEQVBURVIgICBwQWQgPSBkZXYtPm1sX3ByaXY7CisKKwlpZiAoKHBBZC0+U3RhQ2ZnLlJTTklFX0xlbiA9PSAwKSB8fAorCQkocEFkLT5TdGFDZmcuQXV0aE1vZGUgPCBOZGlzODAyXzExQXV0aE1vZGVXUEEpKQorCXsKKwkJd3JxdS0+ZGF0YS5sZW5ndGggPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorI2lmZGVmIFNJT0NTSVdHRU5JRQorCWlmIChwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPT0gV1BBX1NVUFBMSUNBTlRfRU5BQkxFKQorCXsKKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPCBwQWQtPlN0YUNmZy5SU05JRV9MZW4pCisJCXJldHVybiAtRTJCSUc7CisKKwl3cnF1LT5kYXRhLmxlbmd0aCA9IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbjsKKwltZW1jcHkoZXh0cmEsICZwQWQtPlN0YUNmZy5SU05fSUVbMF0sIHBBZC0+U3RhQ2ZnLlJTTklFX0xlbik7CisJfQorCWVsc2UKKyNlbmRpZiAvLyBTSU9DU0lXR0VOSUUgLy8KKyNlbmRpZiAvLyBOQVRJVkVfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCXsKKwkJVUNIQVIgUlNOSWUgPSBJRV9XUEE7CisKKwkJaWYgKHdycXUtPmRhdGEubGVuZ3RoIDwgKHBBZC0+U3RhQ2ZnLlJTTklFX0xlbiArIDIpKSAvLyBJRCwgTGVuCisJCQlyZXR1cm4gLUUyQklHOworCQl3cnF1LT5kYXRhLmxlbmd0aCA9IHBBZC0+U3RhQ2ZnLlJTTklFX0xlbiArIDI7CisKKwkJaWYgKChwQWQtPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSB8fAorICAgICAgICAgICAgKHBBZC0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTIpKQorCQkJUlNOSWUgPSBJRV9SU047CisKKwkJZXh0cmFbMF0gPSAoY2hhcilSU05JZTsKKwkJZXh0cmFbMV0gPSBwQWQtPlN0YUNmZy5SU05JRV9MZW47CisJCW1lbWNweShleHRyYSsyLCAmcEFkLT5TdGFDZmcuUlNOX0lFWzBdLCBwQWQtPlN0YUNmZy5SU05JRV9MZW4pOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgcnRfaW9jdGxfc2l3cG1rc2Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAorCQkJICAgY2hhciAqZXh0cmEpCit7CisJUFJUTVBfQURBUFRFUiAgIHBBZCA9IGRldi0+bWxfcHJpdjsKKwlzdHJ1Y3QgaXdfcG1rc2EgKnBQbWtzYSA9IChzdHJ1Y3QgaXdfcG1rc2EgKil3cnF1LT5kYXRhLnBvaW50ZXI7CisJSU5UCUNhY2hlZElkeCA9IDAsIGlkeCA9IDA7CisKKwlpZiAocFBta3NhID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UgLCgiPT09PiBydF9pb2N0bF9zaXdwbWtzYVxuIikpOworCXN3aXRjaChwUG1rc2EtPmNtZCkKKwl7CisJCWNhc2UgSVdfUE1LU0FfRkxVU0g6CisJCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5TYXZlZFBNSywgc2l6ZW9mKEJTU0lEX0lORk8pKlBNS0lEX05PKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoInJ0X2lvY3RsX3Npd3Bta3NhIC0gSVdfUE1LU0FfRkxVU0hcbiIpKTsKKwkJCWJyZWFrOworCQljYXNlIElXX1BNS1NBX1JFTU9WRToKKwkJCWZvciAoQ2FjaGVkSWR4ID0gMDsgQ2FjaGVkSWR4IDwgcEFkLT5TdGFDZmcuU2F2ZWRQTUtOdW07IENhY2hlZElkeCsrKQorCQkJeworCQkgICAgICAgIC8vIGNvbXBhcmUgdGhlIEJTU0lECisJCSAgICAgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShwUG1rc2EtPmJzc2lkLnNhX2RhdGEsIHBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uQlNTSUQsIE1BQ19BRERSX0xFTikpCisJCSAgICAgICAgeworCQkgICAgICAgIAlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLkJTU0lELCBNQUNfQUREUl9MRU4pOworCQkJCQlOZGlzWmVyb01lbW9yeShwQWQtPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLlBNS0lELCAxNik7CisJCQkJCWZvciAoaWR4ID0gQ2FjaGVkSWR4OyBpZHggPCAocEFkLT5TdGFDZmcuU2F2ZWRQTUtOdW0gLSAxKTsgaWR4KyspCisJCQkJCXsKKwkJCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5TYXZlZFBNS1tpZHhdLkJTU0lEWzBdLCAmcEFkLT5TdGFDZmcuU2F2ZWRQTUtbaWR4KzFdLkJTU0lEWzBdLCBNQUNfQUREUl9MRU4pOworCQkJCQkJTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW2lkeF0uUE1LSURbMF0sICZwQWQtPlN0YUNmZy5TYXZlZFBNS1tpZHgrMV0uUE1LSURbMF0sIDE2KTsKKwkJCQkJfQorCQkJCQlwQWQtPlN0YUNmZy5TYXZlZFBNS051bS0tOworCQkJICAgICAgICBicmVhazsKKwkJICAgICAgICB9CisJICAgICAgICB9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoInJ0X2lvY3RsX3Npd3Bta3NhIC0gSVdfUE1LU0FfUkVNT1ZFXG4iKSk7CisJCQlicmVhazsKKwkJY2FzZSBJV19QTUtTQV9BREQ6CisJCQlmb3IgKENhY2hlZElkeCA9IDA7IENhY2hlZElkeCA8IHBBZC0+U3RhQ2ZnLlNhdmVkUE1LTnVtOyBDYWNoZWRJZHgrKykKKwkJCXsKKwkJICAgICAgICAvLyBjb21wYXJlIHRoZSBCU1NJRAorCQkgICAgICAgIGlmIChOZGlzRXF1YWxNZW1vcnkocFBta3NhLT5ic3NpZC5zYV9kYXRhLCBwQWQtPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLkJTU0lELCBNQUNfQUREUl9MRU4pKQorCQkJICAgICAgICBicmVhazsKKwkgICAgICAgIH0KKworCSAgICAgICAgLy8gRm91bmQsIHJlcGxhY2UgaXQKKwkgICAgICAgIGlmIChDYWNoZWRJZHggPCBQTUtJRF9OTykKKwkgICAgICAgIHsKKwkJICAgICAgICBEQkdQUklOVChSVF9ERUJVR19PRkYsICgiVXBkYXRlIFBNS0lELCBpZHggPSAlZFxuIiwgQ2FjaGVkSWR4KSk7CisJCSAgICAgICAgTmRpc01vdmVNZW1vcnkoJnBBZC0+U3RhQ2ZnLlNhdmVkUE1LW0NhY2hlZElkeF0uQlNTSURbMF0sIHBQbWtzYS0+YnNzaWQuc2FfZGF0YSwgTUFDX0FERFJfTEVOKTsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFDZmcuU2F2ZWRQTUtbQ2FjaGVkSWR4XS5QTUtJRFswXSwgcFBta3NhLT5wbWtpZCwgMTYpOworCQkgICAgICAgIHBBZC0+U3RhQ2ZnLlNhdmVkUE1LTnVtKys7CisJICAgICAgICB9CisJICAgICAgICAvLyBOb3QgZm91bmQsIHJlcGxhY2UgdGhlIGxhc3Qgb25lCisJICAgICAgICBlbHNlCisJICAgICAgICB7CisJCSAgICAgICAgLy8gUmFuZG9tbHkgcmVwbGFjZSBvbmUKKwkJICAgICAgICBDYWNoZWRJZHggPSAocFBta3NhLT5ic3NpZC5zYV9kYXRhWzVdICUgUE1LSURfTk8pOworCQkgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX09GRiwgKCJVcGRhdGUgUE1LSUQsIGlkeCA9ICVkXG4iLCBDYWNoZWRJZHgpKTsKKwkJICAgICAgICBOZGlzTW92ZU1lbW9yeSgmcEFkLT5TdGFDZmcuU2F2ZWRQTUtbQ2FjaGVkSWR4XS5CU1NJRFswXSwgcFBta3NhLT5ic3NpZC5zYV9kYXRhLCBNQUNfQUREUl9MRU4pOworCQkJCU5kaXNNb3ZlTWVtb3J5KCZwQWQtPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLlBNS0lEWzBdLCBwUG1rc2EtPnBta2lkLCAxNik7CisJICAgICAgICB9CisKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoInJ0X2lvY3RsX3Npd3Bta3NhIC0gSVdfUE1LU0FfQUREXG4iKSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFICwoInJ0X2lvY3RsX3Npd3Bta3NhIC0gVW5rbm93IENvbW1hbmQhIVxuIikpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLy8gI2lmIFdJUkVMRVNTX0VYVCA+IDE3CisKKyNpZmRlZiBEQkcKK3N0YXRpYyBpbnQKK3J0X3ByaXZhdGVfaW9jdGxfYmJwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXN0cnVjdCBpd19wb2ludCAqd3JxLCBjaGFyICpleHRyYSkKKwkJCXsKKwlDSEFSCQkJCSp0aGlzX2NoYXI7CisJQ0hBUgkJCQkqdmFsdWUgPSBOVUxMOworCVVDSEFSCQkJCXJlZ0JCUCA9IDA7CisvLwlDSEFSCQkJCWFyZ1syNTVdPXswfTsKKwlVSU5UMzIJCQkJYmJwSWQ7CisJVUlOVDMyCQkJCWJicFZhbHVlOworCUJPT0xFQU4JCQkJYklzUHJpbnRBbGxCQlAgPSBGQUxTRTsKKwlJTlQJCQkJCVN0YXR1cyA9IDA7CisgICAgUFJUTVBfQURBUFRFUiAgICAgICBwQWRhcHRlciA9IGRldi0+bWxfcHJpdjsKKworCisJbWVtc2V0KGV4dHJhLCAweDAwLCBJV19QUklWX1NJWkVfTUFTSyk7CisKKwlpZiAod3JxLT5sZW5ndGggPiAxKSAvL05vIHBhcmFtZXRlcnMuCisJCQkJeworCQlzcHJpbnRmKGV4dHJhLCAiXG4iKTsKKworCQkvL1BhcnNpbmcgUmVhZCBvciBXcml0ZQorCQl0aGlzX2NoYXIgPSB3cnEtPnBvaW50ZXI7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInRoaXNfY2hhcj0lc1xuIiwgdGhpc19jaGFyKSk7CisJCWlmICghKnRoaXNfY2hhcikKKwkJCWdvdG8gbmV4dDsKKworCQlpZiAoKHZhbHVlID0gcnRzdHJjaHIodGhpc19jaGFyLCAnPScpKSAhPSBOVUxMKQorCQkJKnZhbHVlKysgPSAwOworCisJCWlmICghdmFsdWUgfHwgISp2YWx1ZSkKKwkJeyAvL1JlYWQKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInRoaXNfY2hhcj0lcywgdmFsdWU9JXNcbiIsIHRoaXNfY2hhciwgdmFsdWUpKTsKKwkJCWlmIChzc2NhbmYodGhpc19jaGFyLCAiJWQiLCAmKGJicElkKSkgPT0gMSkKKwkJCXsKKyNpZm5kZWYgUlQzMHh4CisJCQkJaWYgKGJicElkIDw9IDEzNikKKyNlbmRpZiAvLyBSVDMweHggLy8KKyNpZmRlZiBSVDMweHgKKwkJCQlpZiAoYmJwSWQgPD0gMTM4KSAgLy8gZWRpdCBieSBqb2hubGksIFJGIHBvd2VyIHNlcXVlbmNlIHNldHVwLCBhZGQgQkJQIFIxMzggZm9yIEFEQyBkeW5hbWljIG9uL29mZiBjb250cm9sCisjZW5kaWYgLy8gUlQzMHh4IC8vCisJCQkJeworI2lmZGVmIFJBTElOS19BVEUKKwkJCQkJaWYgKEFURV9PTihwQWRhcHRlcikpCisJCQkJCXsKKwkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBiYnBJZCwgJnJlZ0JCUCk7CisJCQkJCX0KKwkJCQkJZWxzZQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKwkJCQkJeworCQkJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCAmcmVnQkJQKTsKKwkJCQkJfQorCQkJCQlzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJSJTAyZFsweCUwMlhdOiUwMlhcbiIsIGJicElkLCBiYnBJZCoyLCByZWdCQlApOworICAgICAgICAgICAgICAgICAgICB3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSkgKyAxOyAvLyAxOiBzaXplIG9mICdcMCcKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgibXNnPSVzXG4iLCBleHRyYSkpOworCQkJCX0KKwkJCQllbHNlCisJCQkJey8vSW52YWxpZCBwYXJhbWV0ZXMsIHNvIGRlZmF1bHQgcHJpbnRrIGFsbCBiYnAKKwkJCQkJYklzUHJpbnRBbGxCQlAgPSBUUlVFOworCQkJCQlnb3RvIG5leHQ7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeyAvL0ludmFsaWQgcGFyYW1ldGVzLCBzbyBkZWZhdWx0IHByaW50ayBhbGwgYmJwCisJCQkJYklzUHJpbnRBbGxCQlAgPSBUUlVFOworCQkJCWdvdG8gbmV4dDsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsgLy9Xcml0ZQorCQkJaWYgKChzc2NhbmYodGhpc19jaGFyLCAiJWQiLCAmKGJicElkKSkgPT0gMSkgJiYgKHNzY2FuZih2YWx1ZSwgIiV4IiwgJihiYnBWYWx1ZSkpID09IDEpKQorCQkJeworI2lmbmRlZiBSVDMweHgKKwkJCQlpZiAoYmJwSWQgPD0gMTM2KQorI2VuZGlmIC8vIFJUMzB4eCAvLworI2lmZGVmIFJUMzB4eAorCQkJCWlmIChiYnBJZCA8PSAxMzgpICAvLyBlZGl0IGJ5IGpvaG5saSwgUkYgcG93ZXIgc2VxdWVuY2Ugc2V0dXAsIGFkZCBCQlAgUjEzOCBmb3IgQURDIGR5bmFtaWMgb24vb2ZmIGNvbnRyb2wKKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJCQl7CisjaWZkZWYgUkFMSU5LX0FURQorCQkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQkJeworCQkJCQkJQVRFX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBiYnBJZCwgYmJwVmFsdWUpOworCQkJCQkJLy9SZWFkIGl0IGJhY2sgZm9yIHNob3dpbmcKKwkJCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBiYnBJZCwgJnJlZ0JCUCk7CisJCQkJCX0KKwkJCQkJZWxzZQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKwkJCQkJeworCQkJCQkgICAgUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgYmJwSWQsIGJicFZhbHVlKTsKKyAgICAJCQkJCS8vUmVhZCBpdCBiYWNrIGZvciBzaG93aW5nCisgICAgCQkJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCAmcmVnQkJQKTsKKwkJCX0KKwkJCQkJc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUiUwMmRbMHglMDJYXTolMDJYXG4iLCBiYnBJZCwgYmJwSWQqMiwgcmVnQkJQKTsKKyAgICAgICAgICAgICAgICAgICAgd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsgLy8gMTogc2l6ZSBvZiAnXDAnCisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIm1zZz0lc1xuIiwgZXh0cmEpKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsvL0ludmFsaWQgcGFyYW1ldGVzLCBzbyBkZWZhdWx0IHByaW50ayBhbGwgYmJwCisJCQkJCWJJc1ByaW50QWxsQkJQID0gVFJVRTsKKwkJCQkJZ290byBuZXh0OworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsgLy9JbnZhbGlkIHBhcmFtZXRlcywgc28gZGVmYXVsdCBwcmludGsgYWxsIGJicAorCQkJCWJJc1ByaW50QWxsQkJQID0gVFJVRTsKKwkJCQlnb3RvIG5leHQ7CisJCQl9CisJCX0KKwkJfQorCWVsc2UKKwkJYklzUHJpbnRBbGxCQlAgPSBUUlVFOworCituZXh0OgorCWlmIChiSXNQcmludEFsbEJCUCkKKwl7CisJCW1lbXNldChleHRyYSwgMHgwMCwgSVdfUFJJVl9TSVpFX01BU0spOworCQlzcHJpbnRmKGV4dHJhLCAiXG4iKTsKKyNpZm5kZWYgUlQzMHh4CisJCWZvciAoYmJwSWQgPSAwOyBiYnBJZCA8PSAxMzY7IGJicElkKyspCisjZW5kaWYgLy8gUlQzMHh4IC8vCisjaWZkZWYgUlQzMHh4CisJCWZvciAoYmJwSWQgPSAwOyBiYnBJZCA8PSAxMzg7IGJicElkKyspICAvLyBlZGl0IGJ5IGpvaG5saSwgUkYgcG93ZXIgc2VxdWVuY2Ugc2V0dXAsIGFkZCBCQlAgUjEzOCBmb3IgQURDIGR5bmFtaWMgb24vb2ZmIGNvbnRyb2wKKyNlbmRpZiAvLyBSVDMweHggLy8KKwkJeworCQkgICAgaWYgKHN0cmxlbihleHRyYSkgPj0gKElXX1BSSVZfU0laRV9NQVNLIC0gMTApKQorICAgICAgICAgICAgICAgIGJyZWFrOworI2lmZGVmIFJBTElOS19BVEUKKwkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJeworCQkJCUFURV9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBiYnBJZCwgJnJlZ0JCUCk7CisJCQl9CisJCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBiYnBJZCwgJnJlZ0JCUCk7CisvKgorCQkJc3ByaW50ZihleHRyYStzdHJsZW4oZXh0cmEpLCAiUiUwMmRbMHglMDJYXTolMDJYICAgICIsIGJicElkLCBiYnBJZCoyLCByZWdCQlApOworCQkJaWYgKGJicElkJTUgPT0gNCkKKwkJCQlzcHJpbnRmKGV4dHJhK3N0cmxlbihleHRyYSksICJcbiIpOworKi8KKwkJCXNwcmludGYoZXh0cmErc3RybGVuKGV4dHJhKSwgIiUwM2QgPSAlMDJYXG4iLCBiYnBJZCwgcmVnQkJQKTsgIC8vIGVkaXQgYnkgam9obmxpLCBjaGFuZ2UgZGlzcGxheSBmb3JtYXQKKwkJfQorCisgICAgICAgIHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7IC8vIDE6IHNpemUgb2YgJ1wwJworICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJ3cnEtPmxlbmd0aCA9ICVkXG4iLCB3cnEtPmxlbmd0aCkpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PXJ0X3ByaXZhdGVfaW9jdGxfYmJwXG5cbiIpKTsKKworICAgIHJldHVybiBTdGF0dXM7Cit9CisjZW5kaWYgLy8gREJHIC8vCisKK2ludCBydF9pb2N0bF9zaXdyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisgICAgUFJUTVBfQURBUFRFUiAgIHBBZCA9IGRldi0+bWxfcHJpdjsKKyAgICBVSU5UMzIgICAgICAgICAgcmF0ZSA9IHdycXUtPmJpdHJhdGUudmFsdWUsIGZpeGVkID0gd3JxdS0+Yml0cmF0ZS5maXhlZDsKKworICAgIC8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisJaWYoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKwl7CisgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgicnRfaW9jdGxfc2l3cmF0ZTo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgIAlyZXR1cm4gLUVORVRET1dOOworCX0KKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInJ0X2lvY3RsX3Npd3JhdGU6OihyYXRlID0gJWQsIGZpeGVkID0gJWQpXG4iLCByYXRlLCBmaXhlZCkpOworICAgIC8qIHJhdGUgPSAtMSA9PiBhdXRvIHJhdGUKKyAgICAgICByYXRlID0gWCwgZml4ZWQgPSAxID0+IChmaXhlZCByYXRlIFgpCisgICAgKi8KKyAgICBpZiAocmF0ZSA9PSAtMSkKKyAgICB7CisJCS8vQXV0byBSYXRlCisJCXBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTID0gTUNTX0FVVE87CisJCXBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID0gVFJVRTsKKwkJaWYgKChwQWQtPkNvbW1vbkNmZy5QaHlNb2RlIDw9IFBIWV8xMUcpIHx8CisJCSAgICAocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTU9ERSA8PSBNT0RFX09GRE0pKQorCQkJUlRNUFNldERlc2lyZWRSYXRlcyhwQWQsIC0xKTsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQlTZXRDb21tb25IVChwQWQpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoZml4ZWQpCisgICAgICAgIHsKKyAgICAgICAgCXBBZC0+U3RhQ2ZnLmJBdXRvVHhSYXRlU3dpdGNoID0gRkFMU0U7CisgICAgICAgICAgICBpZiAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPD0gUEhZXzExRykgfHwKKyAgICAgICAgICAgICAgICAocEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTU9ERSA8PSBNT0RFX09GRE0pKQorICAgICAgICAgICAgICAgIFJUTVBTZXREZXNpcmVkUmF0ZXMocEFkLCByYXRlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwQWQtPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUyA9IE1DU19BVVRPOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgICAgICAgICAgICAgIFNldENvbW1vbkhUKHBBZCk7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisgICAgICAgICAgICB9CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJydF9pb2N0bF9zaXdyYXRlOjooSHRNY3M9JWQpXG4iLHBBZC0+U3RhQ2ZnLkRlc2lyZWRUcmFuc21pdFNldHRpbmcuZmllbGQuTUNTKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUT0RPOiByYXRlID0gWCwgZml4ZWQgPSAwID0+IChyYXRlcyA8PSBYKQorICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBydF9pb2N0bF9naXdyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKyAgICBQUlRNUF9BREFQVEVSICAgcEFkID0gZGV2LT5tbF9wcml2OworICAgIGludCByYXRlX2luZGV4ID0gMCwgcmF0ZV9jb3VudCA9IDA7CisgICAgSFRUUkFOU01JVF9TRVRUSU5HIGh0X3NldHRpbmc7CisgICAgX19zMzIgcmFsaW5rcmF0ZVtdID0KKwl7MiwgIDQsICAgMTEsICAyMiwgLy8gQ0NLCisJMTIsIDE4LCAgIDI0LCAgMzYsIDQ4LCA3MiwgOTYsIDEwOCwgLy8gT0ZETQorCTEzLCAyNiwgICAzOSwgIDUyLCAgNzgsIDEwNCwgMTE3LCAxMzAsIDI2LCAgNTIsICA3OCwgMTA0LCAxNTYsIDIwOCwgMjM0LCAyNjAsIC8vIDIwTUh6LCA4MDBucyBHSSwgTUNTOiAwIH4gMTUKKwkzOSwgNzgsICAxMTcsIDE1NiwgMjM0LCAzMTIsIDM1MSwgMzkwLAkJCQkJCQkJCQkgIC8vIDIwTUh6LCA4MDBucyBHSSwgTUNTOiAxNiB+IDIzCisJMjcsIDU0LCAgIDgxLCAxMDgsIDE2MiwgMjE2LCAyNDMsIDI3MCwgNTQsIDEwOCwgMTYyLCAyMTYsIDMyNCwgNDMyLCA0ODYsIDU0MCwgLy8gNDBNSHosIDgwMG5zIEdJLCBNQ1M6IDAgfiAxNQorCTgxLCAxNjIsIDI0MywgMzI0LCA0ODYsIDY0OCwgNzI5LCA4MTAsCQkJCQkJCQkJCSAgLy8gNDBNSHosIDgwMG5zIEdJLCBNQ1M6IDE2IH4gMjMKKwkxNCwgMjksICAgNDMsICA1NywgIDg3LCAxMTUsIDEzMCwgMTQ0LCAyOSwgNTksICAgODcsIDExNSwgMTczLCAyMzAsIDI2MCwgMjg4LCAvLyAyME1IeiwgNDAwbnMgR0ksIE1DUzogMCB+IDE1CisJNDMsIDg3LCAgMTMwLCAxNzMsIDI2MCwgMzE3LCAzOTAsIDQzMywJCQkJCQkJCQkJICAvLyAyME1IeiwgNDAwbnMgR0ksIE1DUzogMTYgfiAyMworCTMwLCA2MCwgICA5MCwgMTIwLCAxODAsIDI0MCwgMjcwLCAzMDAsIDYwLCAxMjAsIDE4MCwgMjQwLCAzNjAsIDQ4MCwgNTQwLCA2MDAsIC8vIDQwTUh6LCA0MDBucyBHSSwgTUNTOiAwIH4gMTUKKwk5MCwgMTgwLCAyNzAsIDM2MCwgNTQwLCA3MjAsIDgxMCwgOTAwfTsJCQkJCQkJCQkJICAvLyA0ME1IeiwgNDAwbnMgR0ksIE1DUzogMTYgfiAyMworCisgICAgcmF0ZV9jb3VudCA9IHNpemVvZihyYWxpbmtyYXRlKS9zaXplb2YoX19zMzIpOworICAgIC8vY2hlY2sgaWYgdGhlIGludGVyZmFjZSBpcyBkb3duCisJaWYoIVJUTVBfVEVTVF9GTEFHKHBBZCwgZlJUTVBfQURBUFRFUl9JTlRFUlJVUFRfSU5fVVNFKSkKKwl7CisgIAkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU5GTzo6TmV0d29yayBpcyBkb3duIVxuIikpOworICAgIAlyZXR1cm4gLUVORVRET1dOOworCX0KKworICAgIGlmICgocEFkLT5TdGFDZmcuYkF1dG9UeFJhdGVTd2l0Y2ggPT0gRkFMU0UpICYmCisgICAgICAgIChJTkZSQV9PTihwQWQpKSAmJgorICAgICAgICAoKHBBZC0+Q29tbW9uQ2ZnLlBoeU1vZGUgPD0gUEhZXzExRykgfHwgKHBBZC0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLk1PREUgPD0gTU9ERV9PRkRNKSkpCisgICAgICAgIGh0X3NldHRpbmcud29yZCA9IHBBZC0+U3RhQ2ZnLkhUUGh5TW9kZS53b3JkOworICAgIGVsc2UKKyAgICAgICAgaHRfc2V0dGluZy53b3JkID0gcEFkLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUud29yZDsKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgIGlmIChodF9zZXR0aW5nLmZpZWxkLk1PREUgPj0gTU9ERV9IVE1JWCkKKyAgICB7CisvLyAgICAJcmF0ZV9pbmRleCA9IDEyICsgKChVQ0hBUilodF9zZXR0aW5nLmZpZWxkLkJXICoxNikgKyAoKFVDSEFSKWh0X3NldHRpbmcuZmllbGQuU2hvcnRHSSAqMzIpICsgKChVQ0hBUilodF9zZXR0aW5nLmZpZWxkLk1DUyk7CisgICAgCXJhdGVfaW5kZXggPSAxMiArICgoVUNIQVIpaHRfc2V0dGluZy5maWVsZC5CVyAqMjQpICsgKChVQ0hBUilodF9zZXR0aW5nLmZpZWxkLlNob3J0R0kgKjQ4KSArICgoVUNIQVIpaHRfc2V0dGluZy5maWVsZC5NQ1MpOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisgICAgaWYgKGh0X3NldHRpbmcuZmllbGQuTU9ERSA9PSBNT0RFX09GRE0pCisgICAgCXJhdGVfaW5kZXggPSAoVUNIQVIpKGh0X3NldHRpbmcuZmllbGQuTUNTKSArIDQ7CisgICAgZWxzZSBpZiAoaHRfc2V0dGluZy5maWVsZC5NT0RFID09IE1PREVfQ0NLKQorICAgIAlyYXRlX2luZGV4ID0gKFVDSEFSKShodF9zZXR0aW5nLmZpZWxkLk1DUyk7CisKKyAgICBpZiAocmF0ZV9pbmRleCA8IDApCisgICAgICAgIHJhdGVfaW5kZXggPSAwOworCisgICAgaWYgKHJhdGVfaW5kZXggPiByYXRlX2NvdW50KQorICAgICAgICByYXRlX2luZGV4ID0gcmF0ZV9jb3VudDsKKworICAgIHdycXUtPmJpdHJhdGUudmFsdWUgPSByYWxpbmtyYXRlW3JhdGVfaW5kZXhdICogNTAwMDAwOworICAgIHdycXUtPmJpdHJhdGUuZGlzYWJsZWQgPSAwOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyIHJ0X2hhbmRsZXJbXSA9Cit7CisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJICAgICAgICAgICAgLyogU0lPQ1NJV0NPTU1JVCAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXduYW1lLAkJCS8qIFNJT0NHSVdOQU1FICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCQkgICAgICAgICAgICAvKiBTSU9DU0lXTldJRCAgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJICAgICAgICAgICAgLyogU0lPQ0dJV05XSUQgICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdmcmVxLAkJICAgIC8qIFNJT0NTSVdGUkVRICAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3ZnJlcSwJCSAgICAvKiBTSU9DR0lXRlJFUSAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd21vZGUsCQkgICAgLyogU0lPQ1NJV01PREUgICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdtb2RlLAkJICAgIC8qIFNJT0NHSVdNT0RFICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCSAgICAgICAgICAgICAgICAvKiBTSU9DU0lXU0VOUyAgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkgICAgICAgICAgICAgICAgLyogU0lPQ0dJV1NFTlMgICAqLworCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1JBTkdFICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdyYW5nZSwJCSAgICAvKiBTSU9DR0lXUkFOR0UgICovCisJKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sCQkvKiBTSU9DU0lXUFJJViAgICovCisJKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sICAgIC8qIFNJT0NHSVdQUklWICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdTVEFUUyAgKi8KKwkoaXdfaGFuZGxlcikgcnQyOHh4X2dldF93aXJlbGVzc19zdGF0cyAvKiBrZXJuZWwgY29kZSAqLywgICAgLyogU0lPQ0dJV1NUQVRTICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdTUFkgICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCSAgICAgICAgICAgICAgICAvKiBTSU9DR0lXU1BZICAgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCSAgICAgICAgLyogU0lPQ1NJV1RIUlNQWSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkgICAgICAgIC8qIFNJT0NHSVdUSFJTUFkgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3YXAsICAgICAgICAgICAgLyogU0lPQ1NJV0FQICAgICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdhcCwJCSAgICAvKiBTSU9DR0lXQVAgICAgICovCisjaWZkZWYgU0lPQ1NJV01MTUUKKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3bWxtZSwJICAgICAgICAvKiBTSU9DU0lXTUxNRSAgICovCisjZWxzZQorCShpd19oYW5kbGVyKSBOVUxMLAkJCQkgICAgICAgIC8qIFNJT0NTSVdNTE1FICovCisjZW5kaWYgLy8gU0lPQ1NJV01MTUUgLy8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfaXdhcGxpc3QsCQkgICAgLyogU0lPQ0dJV0FQTElTVCAqLworI2lmZGVmIFNJT0NHSVdTQ0FOCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd3NjYW4sCQkgICAgLyogU0lPQ1NJV1NDQU4gICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdzY2FuLAkJICAgIC8qIFNJT0NHSVdTQ0FOICAgKi8KKyNlbHNlCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCSAgICAgICAgLyogU0lPQ1NJV1NDQU4gICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkgICAgICAgIC8qIFNJT0NHSVdTQ0FOICAgKi8KKyNlbmRpZiAvKiBTSU9DR0lXU0NBTiAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdlc3NpZCwJCSAgICAvKiBTSU9DU0lXRVNTSUQgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd2Vzc2lkLAkJICAgIC8qIFNJT0NHSVdFU1NJRCAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3bmlja24sCQkgICAgLyogU0lPQ1NJV05JQ0tOICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXduaWNrbiwJCSAgICAvKiBTSU9DR0lXTklDS04gICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCSAgICAgICAgLyogLS0gaG9sZSAtLSAgICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkgICAgICAgIC8qIC0tIGhvbGUgLS0gICAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3cmF0ZSwgICAgICAgICAgLyogU0lPQ1NJV1JBVEUgICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdyYXRlLCAgICAgICAgICAvKiBTSU9DR0lXUkFURSAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd3J0cywJCSAgICAvKiBTSU9DU0lXUlRTICAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd3J0cywJCSAgICAvKiBTSU9DR0lXUlRTICAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd2ZyYWcsCQkgICAgLyogU0lPQ1NJV0ZSQUcgICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9naXdmcmFnLAkJICAgIC8qIFNJT0NHSVdGUkFHICAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCSAgICAgICAgICAgICAgICAvKiBTSU9DU0lXVFhQT1cgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkgICAgICAgICAgICAgICAgLyogU0lPQ0dJV1RYUE9XICAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdSRVRSWSAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCSAgICAgICAgICAgICAgICAvKiBTSU9DR0lXUkVUUlkgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX3Npd2VuY29kZSwJCS8qIFNJT0NTSVdFTkNPREUgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfZ2l3ZW5jb2RlLAkJLyogU0lPQ0dJV0VOQ09ERSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJICAgICAgICAgICAgICAgIC8qIFNJT0NTSVdQT1dFUiAgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJCSAgICAgICAgICAgICAgICAvKiBTSU9DR0lXUE9XRVIgICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCQkJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkJCQkJCS8qIC0tIGhvbGUgLS0gKi8KKyNpZiBXSVJFTEVTU19FWFQgPiAxNworICAgIChpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdnZW5pZSwgICAgICAgICAvKiBTSU9DU0lXR0VOSUUgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd2dlbmllLCAgICAgICAgIC8qIFNJT0NHSVdHRU5JRSAgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3YXV0aCwJCSAgICAvKiBTSU9DU0lXQVVUSCAgICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd2F1dGgsCQkgICAgLyogU0lPQ0dJV0FVVEggICAqLworCShpd19oYW5kbGVyKSBydF9pb2N0bF9zaXdlbmNvZGVleHQsCSAgICAvKiBTSU9DU0lXRU5DT0RFRVhUICovCisJKGl3X2hhbmRsZXIpIHJ0X2lvY3RsX2dpd2VuY29kZWV4dCwJCS8qIFNJT0NHSVdFTkNPREVFWFQgKi8KKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2l3cG1rc2EsICAgICAgICAgLyogU0lPQ1NJV1BNS1NBICAqLworI2VuZGlmCit9OworCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlciBydF9wcml2X2hhbmRsZXJzW10gPSB7CisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwMCAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MDEgKi8KKyNpZm5kZWYgQ09ORklHX0FQX1NVUFBPUlQKKwkoaXdfaGFuZGxlcikgcnRfaW9jdGxfc2V0cGFyYW0sIC8qICsgMHgwMiAqLworI2Vsc2UKKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDAyICovCisjZW5kaWYgLy8gQ09ORklHX0FQX1NVUFBPUlQgLy8KKyNpZmRlZiBEQkcKKwkoaXdfaGFuZGxlcikgcnRfcHJpdmF0ZV9pb2N0bF9iYnAsIC8qICsgMHgwMyAqLworI2Vsc2UKKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDAzICovCisjZW5kaWYKKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDA0ICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwNSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MDYgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDA3ICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwOCAqLworCShpd19oYW5kbGVyKSBydF9wcml2YXRlX2dldF9zdGF0aXN0aWNzLCAvKiArIDB4MDkgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDBBICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwQiAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MEMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDBEICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgwRSAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MEYgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDEwICovCisJKGl3X2hhbmRsZXIpIHJ0X3ByaXZhdGVfc2hvdywgLyogKyAweDExICovCisgICAgKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgxMiAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MTMgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwgLyogKyAweDE1ICovCisJKGl3X2hhbmRsZXIpIE5VTEwsIC8qICsgMHgxNyAqLworCShpd19oYW5kbGVyKSBOVUxMLCAvKiArIDB4MTggKi8KK307CisKK2NvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBydDI4eHhfaXdfaGFuZGxlcl9kZWYgPQoreworI2RlZmluZQlOKGEpCShzaXplb2YgKGEpIC8gc2l6ZW9mIChhWzBdKSkKKwkuc3RhbmRhcmQJPSAoaXdfaGFuZGxlciAqKSBydF9oYW5kbGVyLAorCS5udW1fc3RhbmRhcmQJPSBzaXplb2YocnRfaGFuZGxlcikgLyBzaXplb2YoaXdfaGFuZGxlciksCisJLnByaXZhdGUJPSAoaXdfaGFuZGxlciAqKSBydF9wcml2X2hhbmRsZXJzLAorCS5udW1fcHJpdmF0ZQkJPSBOKHJ0X3ByaXZfaGFuZGxlcnMpLAorCS5wcml2YXRlX2FyZ3MJPSAoc3RydWN0IGl3X3ByaXZfYXJncyAqKSBwcml2dGFiLAorCS5udW1fcHJpdmF0ZV9hcmdzCT0gTihwcml2dGFiKSwKKyNpZiBJV19IQU5ETEVSX1ZFUlNJT04gPj0gNworICAgIC5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBydDI4eHhfZ2V0X3dpcmVsZXNzX3N0YXRzLAorI2VuZGlmCit9OworCitJTlQgUlRNUFNldEluZm9ybWF0aW9uKAorICAgIElOICBQUlRNUF9BREFQVEVSIHBBZGFwdGVyLAorICAgIElOICBPVVQgc3RydWN0IGlmcmVxICAgICpycSwKKyAgICBJTiAgSU5UICAgICAgICAgICAgICAgICBjbWQpCit7CisgICAgc3RydWN0IGl3cmVxICAgICAgICAgICAgICAgICAgICAgICAgKndycSA9IChzdHJ1Y3QgaXdyZXEgKikgcnE7CisgICAgTkRJU184MDJfMTFfU1NJRCAgICAgICAgICAgICAgICAgICAgU3NpZDsKKyAgICBORElTXzgwMl8xMV9NQUNfQUREUkVTUyAgICAgICAgICAgICBCc3NpZDsKKyAgICBSVF84MDJfMTFfUEhZX01PREUgICAgICAgICAgICAgICAgICBQaHlNb2RlOworICAgIFJUXzgwMl8xMV9TVEFfQ09ORklHICAgICAgICAgICAgICAgIFN0YUNvbmZpZzsKKyAgICBORElTXzgwMl8xMV9SQVRFUyAgICAgICAgICAgICAgICAgICBhcnlSYXRlczsKKyAgICBSVF84MDJfMTFfUFJFQU1CTEUgICAgICAgICAgICAgICAgICBQcmVhbWJsZTsKKyAgICBORElTXzgwMl8xMV9XRVBfU1RBVFVTICAgICAgICAgICAgICBXZXBTdGF0dXM7CisgICAgTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSAgICAgQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVNYXg7CisgICAgTkRJU184MDJfMTFfTkVUV09SS19JTkZSQVNUUlVDVFVSRSAgQnNzVHlwZTsKKyAgICBORElTXzgwMl8xMV9SVFNfVEhSRVNIT0xEICAgICAgICAgICBSdHNUaHJlc2g7CisgICAgTkRJU184MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQgRnJhZ1RocmVzaDsKKyAgICBORElTXzgwMl8xMV9QT1dFUl9NT0RFICAgICAgICAgICAgICBQb3dlck1vZGU7CisgICAgUE5ESVNfODAyXzExX0tFWSAgICAgICAgICAgICAgICAgICAgcEtleSA9IE5VTEw7CisgICAgUE5ESVNfODAyXzExX1dFUAkJCSAgICAgICAgcFdlcEtleSA9TlVMTDsKKyAgICBQTkRJU184MDJfMTFfUkVNT1ZFX0tFWSAgICAgICAgICAgICBwUmVtb3ZlS2V5ID0gTlVMTDsKKyAgICBORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OICAgICAgICAgICBDb25maWcsICpwQ29uZmlnID0gTlVMTDsKKyAgICBORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUgICAgICAgICAgICBOZXRUeXBlOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdzsKKyAgICBVSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlJZHggPSAwOworICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1MsIE1heFBoeU1vZGUgPSBQSFlfMTFHOworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyVGVtcDsKKyAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYWRpb1N0YXRlOworICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlTWFjaGluZVRvdWNoZWQgPSBGQUxTRTsKKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKwlPSURfU0VUX0hUX1BIWU1PREUJCQkJCUhUX1BoeU1vZGU7CS8vMTFuICxrYXRoeQorI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworI2lmZGVmIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQKKyAgICBQTkRJU184MDJfMTFfUE1LSUQgICAgICAgICAgICAgICAgICBwUG1rSWQgPSBOVUxMOworICAgIEJPT0xFQU4JCQkJICAgICAgICAgICAgICAgIElFRUU4MDIxeFN0YXRlID0gRkFMU0U7CisgICAgQk9PTEVBTgkJCQkgICAgICAgICAgICAgICAgSUVFRTgwMjF4X3JlcXVpcmVkX2tleXMgPSBGQUxTRTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cGFfc3VwcGxpY2FudF9lbmFibGUgPSAwOworI2VuZGlmIC8vIFdQQV9TVVBQTElDQU5UX1NVUFBPUlQgLy8KKworI2lmZGVmIFNOTVBfU1VQUE9SVAorCVRYX1JUWV9DRkdfU1RSVUMJCQl0eF9ydHlfY2ZnOworCVVMT05HCQkJCQkJU2hvcnRSZXRyeUxpbWl0LCBMb25nUmV0cnlMaW1pdDsKKwlVQ0hBUgkJCQkJCWN0bXA7CisjZW5kaWYgLy8gU05NUF9TVVBQT1JUIC8vCisKKworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCU1heFBoeU1vZGUgPSBQSFlfMTFOXzVHOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT5SVE1QU2V0SW5mb3JtYXRpb24oKSwJMHglMDh4XG4iLCBjbWQmMHg3RkZGKSk7CisgICAgc3dpdGNoKGNtZCAmIDB4N0ZGRikgeworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfQ09VTlRSWV9SRUdJT046CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoIDwgc2l6ZW9mKFVDSEFSKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUlOVkFMOworCQkJLy8gT25seSBhdmFsaWFibGUgd2hlbiBFRVBST00gbm90IHByb2dyYW1taW5nCisgICAgICAgICAgICBlbHNlIGlmICghKHBBZGFwdGVyLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbiAmIDB4ODApICYmICEocEFkYXB0ZXItPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQgJiAweDgwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTE9ORyAgIENvdW50cnk7CisgICAgICAgICAgICAgICAgVUNIQVIJVG1wUGh5OworCisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJkNvdW50cnksIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uID0gKFVDSEFSKShDb3VudHJ5ICYgMHgwMDAwMDBGRik7CisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5Db3VudHJ5UmVnaW9uRm9yQUJhbmQgPSAoVUNIQVIpKChDb3VudHJ5ID4+IDgpICYgMHgwMDAwMDBGRik7CisgICAgICAgICAgICAgICAgVG1wUGh5ID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlOworCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSA9IDB4ZmY7CisJCQkJLy8gQnVpbGQgYWxsIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBpbmZvcm1hdGlvbgorCQkJCVJUTVBTZXRQaHlNb2RlKHBBZGFwdGVyLCBUbXBQaHkpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCVNldENvbW1vbkhUKHBBZGFwdGVyKTsKKyNlbmRpZiAvLyBET1QxMV9OX1NVUFBPUlQgLy8KKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF84MDJfMTFfQ09VTlRSWV9SRUdJT04gKEE6JWQgIEIvRzolZClcbiIsIHBBZGFwdGVyLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbkZvckFCYW5kLAorCQkJCSAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOOgorICNpZmRlZiBSQUxJTktfQVRFCisJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUaGUgZHJpdmVyIGlzIGluIEFURSBtb2RlIG5vd1xuIikpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKyAgICAgICAgICAgIE5vdyA9IGppZmZpZXM7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOLCBUeENudCA9ICVkIFxuIiwgcEFkYXB0ZXItPlJhbGlua0NvdW50ZXJzLkxhc3RPbmVTZWNUb3RhbFR4Q291bnQpKTsKKworICAgICAgICAgICAgaWYgKE1PTklUT1JfT04ocEFkYXB0ZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBEcml2ZXIgaXMgaW4gTW9uaXRvciBNb2RlIG5vdyAhISFcbiIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworCQkJLy9CZW5zb24gYWRkIDIwMDgwNTI3LCB3aGVuIHJhZGlvIG9mZiwgc3RhIGRvbid0IG5lZWQgdG8gc2NhbgorCQkJaWYgKFJUTVBfVEVTVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX1JBRElPX09GRikpCisJCQkJYnJlYWs7CisKKwkJCWlmIChSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCisJCQl7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIERyaXZlciBpcyBzY2FubmluZyBub3cgISEhXG4iKSk7CisJCQkJcEFkYXB0ZXItPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJID0gVFJVRTsKKwkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisJCQlpZiAocEFkYXB0ZXItPlJhbGlua0NvdW50ZXJzLkxhc3RPbmVTZWNUb3RhbFR4Q291bnQgPiAxMDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiISEhIExpbmsgVVAsIGlnbm9yZSB0aGlzIHNldDo6T0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU5cbiIpKTsKKwkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCQkJCXBBZGFwdGVyLT5TdGFDZmcuU2NhbkNudCA9IDk5OwkJLy8gUHJldmVudCBhdXRvIHNjYW4gdHJpZ2dlcmVkIGJ5IHRoaXMgT0lECisJCQkJYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoT1BTVEFUVVNfVEVTVF9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCkpICYmCisJCQkJKChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgfHwKKwkJCQkocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEFQU0spIHx8CisJCQkJKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMikgfHwKKwkJCQkocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9PSBOZGlzODAyXzExQXV0aE1vZGVXUEEyUFNLKSkgJiYKKyAgICAgICAgICAgICAgICAocEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBMaW5rIFVQLCBQb3J0IE5vdCBTZWN1cmVkISBpZ25vcmUgdGhpcyBzZXQ6Ok9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOXG4iKSk7CisJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKwkJCQlwQWRhcHRlci0+U3RhQ2ZnLlNjYW5DbnQgPSA5OTsJCS8vIFByZXZlbnQgYXV0byBzY2FuIHRyaWdnZXJlZCBieSB0aGlzIE9JRAorCQkJCWJyZWFrOworICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgIGlmIChwQWRhcHRlci0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0gQ05UTF9JRExFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJUMjhYWF9NTE1FX1JFU0VUX1NUQVRFX01BQ0hJTkUocEFkYXB0ZXIpOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBNTE1FIGJ1c3ksIHJlc2V0IE1MTUUgc3RhdGUgbWFjaGluZSAhISFcbiIpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdGVsbCBDTlRMIHN0YXRlIG1hY2hpbmUgdG8gY2FsbCBOZGlzTVNldEluZm9ybWF0aW9uQ29tcGxldGUoKSBhZnRlciBjb21wbGV0aW5nCisgICAgICAgICAgICAvLyB0aGlzIHJlcXVlc3QsIGJlY2F1c2UgdGhpcyByZXF1ZXN0IGlzIGluaXRpYXRlZCBieSBORElTLgorICAgICAgICAgICAgcEFkYXB0ZXItPk1sbWVBdXguQ3VyclJlcUlzRnJvbU5kaXMgPSBGQUxTRTsKKyAgICAgICAgICAgIC8vIFJlc2V0IGFsbG93ZWQgc2NhbiByZXRyaWVzCisgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlNjYW5DbnQgPSAwOworICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5MYXN0U2NhblRpbWUgPSBOb3c7CisKKwkJCXBBZGFwdGVyLT5TdGFDZmcuYlNjYW5SZXFJc0Zyb21XZWJVSSA9IFRSVUU7CisgICAgICAgICAgICBSVE1QX1NFVF9GTEFHKHBBZGFwdGVyLCBmUlRNUF9BREFQVEVSX0JTU19TQ0FOX0lOX1BST0dSRVNTKTsKKyAgICAgICAgICAgIE1sbWVFbnF1ZXVlKHBBZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICBPSURfODAyXzExX0JTU0lEX0xJU1RfU0NBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgICAgICAgICAgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgICAgIFN0YXRlTWFjaGluZVRvdWNoZWQgPSBUUlVFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9TU0lEOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfU1NJRCkpCisgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIAlQQ0hBUiBwU3NpZFN0cmluZyA9IE5VTEw7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJlNzaWQsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfU1NJRCAoTGVuPSVkLFNzaWQ9JXMpXG4iLCBTc2lkLlNzaWRMZW5ndGgsIFNzaWQuU3NpZCkpOworICAgICAgICAgICAgICAgIGlmIChTc2lkLlNzaWRMZW5ndGggPiBNQVhfTEVOX09GX1NTSUQpCisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAJaWYgKFNzaWQuU3NpZExlbmd0aCA9PSAwKQorICAgICAgICAgICAgICAgIAl7CisgICAgICAgICAgICAgICAgCQlTZXRfU1NJRF9Qcm9jKHBBZGFwdGVyLCAiIik7CisgICAgICAgICAgICAgICAgCX0KKwkJCQkJZWxzZQorICAgICAgICAgICAgICAgIAl7CisJICAgICAgICAgICAgICAgIAlwU3NpZFN0cmluZyA9IChDSEFSICopIGttYWxsb2MoTUFYX0xFTl9PRl9TU0lEKzEsIE1FTV9BTExPQ19GTEFHKTsKKwkJCQkJCWlmIChwU3NpZFN0cmluZykKKwkJCQkJCXsKKwkJCQkJCQlOZGlzWmVyb01lbW9yeShwU3NpZFN0cmluZywgTUFYX0xFTl9PRl9TU0lEKzEpOworCQkJCQkJCU5kaXNNb3ZlTWVtb3J5KHBTc2lkU3RyaW5nLCBTc2lkLlNzaWQsIFNzaWQuU3NpZExlbmd0aCk7CisJICAgICAgICAgICAgICAgIAkJU2V0X1NTSURfUHJvYyhwQWRhcHRlciwgcFNzaWRTdHJpbmcpOworCQkJCQkJCWtmcmVlKHBTc2lkU3RyaW5nKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCQlTdGF0dXMgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9CU1NJRDoKKyNpZmRlZiBSQUxJTktfQVRFCisJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUaGUgZHJpdmVyIGlzIGluIEFURSBtb2RlIG5vd1xuIikpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKE5ESVNfODAyXzExX01BQ19BRERSRVNTKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmQnNzaWQsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICAvLyB0ZWxsIENOVEwgc3RhdGUgbWFjaGluZSB0byBjYWxsIE5kaXNNU2V0SW5mb3JtYXRpb25Db21wbGV0ZSgpIGFmdGVyIGNvbXBsZXRpbmcKKyAgICAgICAgICAgICAgICAvLyB0aGlzIHJlcXVlc3QsIGJlY2F1c2UgdGhpcyByZXF1ZXN0IGlzIGluaXRpYXRlZCBieSBORElTLgorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5NbG1lQXV4LkN1cnJSZXFJc0Zyb21OZGlzID0gRkFMU0U7CisKKwkJCQkvLyBQcmV2ZW50IHRvIGNvbm5lY3QgQVAgYWdhaW4gaW4gU1RBTWxtZVBlcmlvZGljRXhlYworCQkJCXBBZGFwdGVyLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuPSAzMjsKKworICAgICAgICAgICAgICAgIC8vIFJlc2V0IGFsbG93ZWQgc2NhbiByZXRyaWVzCisJCQkJcEFkYXB0ZXItPlN0YUNmZy5TY2FuQ250ID0gMDsKKworICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0gQ05UTF9JRExFKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUlQyOFhYX01MTUVfUkVTRVRfU1RBVEVfTUFDSElORShwQWRhcHRlcik7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBNTE1FIGJ1c3ksIHJlc2V0IE1MTUUgc3RhdGUgbWFjaGluZSAhISFcbiIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTWxtZUVucXVldWUocEFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUxNRV9DTlRMX1NUQVRFX01BQ0hJTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEXzgwMl8xMV9CU1NJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoTkRJU184MDJfMTFfTUFDX0FERFJFU1MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWT0lEICopJkJzc2lkKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworICAgICAgICAgICAgICAgIFN0YXRlTWFjaGluZVRvdWNoZWQgPSBUUlVFOworCisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0JTU0lEICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJzc2lkWzBdLCBCc3NpZFsxXSwgQnNzaWRbMl0sIEJzc2lkWzNdLCBCc3NpZFs0XSwgQnNzaWRbNV0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUkFESU86CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihCT09MRUFOKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmUmFkaW9TdGF0ZSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF84MDJfMTFfUkFESU8gKD0lZClcbiIsIFJhZGlvU3RhdGUpKTsKKyAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5iU3dSYWRpbyAhPSBSYWRpb1N0YXRlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5iU3dSYWRpbyA9IFJhZGlvU3RhdGU7CisgICAgICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLmJSYWRpbyAhPSAocEFkYXB0ZXItPlN0YUNmZy5iSHdSYWRpbyAmJiBwQWRhcHRlci0+U3RhQ2ZnLmJTd1JhZGlvKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5iUmFkaW8gPSAocEFkYXB0ZXItPlN0YUNmZy5iSHdSYWRpbyAmJiBwQWRhcHRlci0+U3RhQ2ZnLmJTd1JhZGlvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLmJSYWRpbyA9PSBUUlVFKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1sbWVSYWRpb09uKHBBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXh0cmEgaW5mb3JtYXRpb24KKwkJCQkJCQlwQWRhcHRlci0+RXh0cmFJbmZvID0gRVhUUkFfSU5GT19DTEVBUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBNbG1lUmFkaW9PZmYocEFkYXB0ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleHRyYSBpbmZvcm1hdGlvbgorCQkJCQkJCXBBZGFwdGVyLT5FeHRyYUluZm8gPSBTV19SQURJT19PRkY7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1BIWV9NT0RFOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoUlRfODAyXzExX1BIWV9NT0RFKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmUGh5TW9kZSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCQlpZiAoUGh5TW9kZSA8PSBNYXhQaHlNb2RlKQorCQkJCXsKKyAgICAgICAgICAgICAgICAJUlRNUFNldFBoeU1vZGUocEFkYXB0ZXIsIFBoeU1vZGUpOworI2lmZGVmIERPVDExX05fU1VQUE9SVAorCQkJCQlTZXRDb21tb25IVChwQWRhcHRlcik7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCQkJfQorICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9QSFlfTU9ERSAoPSVkKVxuIiwgUGh5TW9kZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9TVEFfQ09ORklHOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoUlRfODAyXzExX1NUQV9DT05GSUcpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZTdGFDb25maWcsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5iRW5hYmxlVHhCdXJzdCA9IFN0YUNvbmZpZy5FbmFibGVUeEJ1cnN0OworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uID0gU3RhQ29uZmlnLlVzZUJHUHJvdGVjdGlvbjsKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJVc2VTaG9ydFNsb3RUaW1lID0gMTsgLy8gMjAwMy0xMC0zMCBhbHdheXMgU0hPUlQgU0xPVCBjYXBhYmxlCisgICAgICAgICAgICAgICAgaWYgKChwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUgIT0gU3RhQ29uZmlnLkFkaG9jTW9kZSkgJiYKKwkJCQkJKFN0YUNvbmZpZy5BZGhvY01vZGUgPD0gTWF4UGh5TW9kZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBhbGxvdyBkeW5hbWljIGNoYW5nZSBvZiAiVVNFIE9GRE0gcmF0ZSBvciBub3QiIGluIEFESE9DIG1vZGUKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgc2V0dGluZyBjaGFuZ2VkLCBuZWVkIHRvIHJlc2V0IGN1cnJlbnQgVFggcmF0ZSBhcyB3ZWxsIGFzIEJFQUNPTiBmcmFtZSBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlID0gU3RhQ29uZmlnLkFkaG9jTW9kZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSA9PSBCU1NfQURIT0MpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgCVJUTVBTZXRQaHlNb2RlKHBBZGFwdGVyLCBQaHlNb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1sbWVVcGRhdGVUeFJhdGVzKHBBZGFwdGVyLCBGQUxTRSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWtlSWJzc0JlYWNvbihwQWRhcHRlcik7ICAgICAgICAgICAvLyByZS1idWlsZCBCRUFDT04gZnJhbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIEFzaWNFbmFibGVJYnNzU3luYyhwQWRhcHRlcik7ICAgLy8gY29weSB0byBvbi1jaGlwIG1lbW9yeQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9TRVRfU1RBX0NPTkZJRyAoQnVyc3Q9JWQsIFByb3RlY3Rpb249JWxkLFNob3J0U2xvdD0lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuVXNlQkdQcm90ZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuYlVzZVNob3J0U2xvdFRpbWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfREVTSVJFRF9SQVRFUzoKKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKE5ESVNfODAyXzExX1JBVEVTKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmYXJ5UmF0ZXMsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlLCBNQVhfTEVOX09GX1NVUFBPUlRFRF9SQVRFUyk7CisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlLCAmYXJ5UmF0ZXMsIHNpemVvZihORElTXzgwMl8xMV9SQVRFUykpOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9ERVNJUkVEX1JBVEVTICglMDJ4LCUwMngsJTAyeCwlMDJ4LCUwMngsJTAyeCwlMDJ4LCUwMngpXG4iLAorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMF0scEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzFdLAorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbMl0scEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzNdLAorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNF0scEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzVdLAorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZVJhdGVbNl0scEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVSYXRlWzddICkpOworICAgICAgICAgICAgICAgIC8vIENoYW5naW5nIERlc2lyZWRSYXRlIG1heSBhZmZlY3QgdGhlIE1BWCBUWCByYXRlIHdlIHVzZWQgdG8gVFggZnJhbWVzIG91dAorICAgICAgICAgICAgICAgIE1sbWVVcGRhdGVUeFJhdGVzKHBBZGFwdGVyLCBGQUxTRSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1BSRUFNQkxFOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoUlRfODAyXzExX1BSRUFNQkxFKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmUHJlYW1ibGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKFByZWFtYmxlID09IFJ0ODAyXzExUHJlYW1ibGVTaG9ydCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuVHhQcmVhbWJsZSA9IFByZWFtYmxlOworICAgICAgICAgICAgICAgICAgICBNbG1lU2V0VHhQcmVhbWJsZShwQWRhcHRlciwgUnQ4MDJfMTFQcmVhbWJsZVNob3J0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKFByZWFtYmxlID09IFJ0ODAyXzExUHJlYW1ibGVMb25nKSB8fCAoUHJlYW1ibGUgPT0gUnQ4MDJfMTFQcmVhbWJsZUF1dG8pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gaWYgdXNlciB3YW50cyBBVVRPLCBpbml0aWFsaXplIHRvIExPTkcgaGVyZSwgdGhlbiBjaGFuZ2UgYWNjb3JkaW5nIHRvIEFQJ3MKKyAgICAgICAgICAgICAgICAgICAgLy8gY2FwYWJpbGl0eSB1cG9uIGFzc29jaWF0aW9uLgorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLlR4UHJlYW1ibGUgPSBQcmVhbWJsZTsKKyAgICAgICAgICAgICAgICAgICAgTWxtZVNldFR4UHJlYW1ibGUocEFkYXB0ZXIsIFJ0ODAyXzExUHJlYW1ibGVMb25nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9QUkVBTUJMRSAoPSVkKVxuIiwgUHJlYW1ibGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfV0VQX1NUQVRVUzoKKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKE5ESVNfODAyXzExX1dFUF9TVEFUVVMpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZXZXBTdGF0dXMsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgLy8gU2luY2UgVEtJUCwgQUVTLCBXRVAgYXJlIGFsbCBzdXBwb3J0ZWQuIEl0IHNob3VsZCBub3QgaGF2ZSBhbnkgaW52YWxpZCBzZXR0aW5nCisgICAgICAgICAgICAgICAgaWYgKFdlcFN0YXR1cyA8PSBOZGlzODAyXzExRW5jcnlwdGlvbjNLZXlBYnNlbnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgIT0gV2VwU3RhdHVzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb25maWcgaGFzIGNoYW5nZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5iQ29uZmlnQ2hhbmdlZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgICAgID0gV2VwU3RhdHVzOworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXMgPSBXZXBTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUGFpckNpcGhlciAgICA9IFdlcFN0YXR1czsKKyAgICAgICAgICAgICAgICAJcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciAgID0gV2VwU3RhdHVzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9XRVBfU1RBVFVTICg9JWQpXG4iLFdlcFN0YXR1cykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSkpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJkF1dGhNb2RlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIGlmIChBdXRoTW9kZSA+IE5kaXM4MDJfMTFBdXRoTW9kZU1heCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgIT0gQXV0aE1vZGUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbmZpZyBoYXMgY2hhbmdlZAorICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPmJDb25maWdDaGFuZ2VkID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gQXV0aE1vZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQ7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUgKD0lZCkgXG4iLHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERToKKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKE5ESVNfODAyXzExX05FVFdPUktfSU5GUkFTVFJVQ1RVUkUpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZCc3NUeXBlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCisJCQkJaWYgKEJzc1R5cGUgPT0gTmRpczgwMl8xMUlCU1MpCisJCQkJCVNldF9OZXR3b3JrVHlwZV9Qcm9jKHBBZGFwdGVyLCAiQWRob2MiKTsKKwkJCQllbHNlIGlmIChCc3NUeXBlID09IE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZSkKKwkJCQkJU2V0X05ldHdvcmtUeXBlX1Byb2MocEFkYXB0ZXIsICJJbmZyYSIpOworCQkJCWVsc2UgaWYgKEJzc1R5cGUgPT0gTmRpczgwMl8xMU1vbml0b3IpCisJCQkJCVNldF9OZXR3b3JrVHlwZV9Qcm9jKHBBZGFwdGVyLCAiTW9uaXRvciIpOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCVN0YXR1cyAgPSAtRUlOVkFMOworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERSAodW5rbm93bilcbiIpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkgY2FzZSBPSURfODAyXzExX1JFTU9WRV9XRVA6CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfUkVNT1ZFX1dFUFxuIikpOworICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfS0VZX0lOREVYKSkKKyAgICAgICAgICAgIHsKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworCQkJCUtleUlkeCA9ICooTkRJU184MDJfMTFfS0VZX0lOREVYICopIHdycS0+dS5kYXRhLnBvaW50ZXI7CisKKwkJCQlpZiAoS2V5SWR4ICYgMHg4MDAwMDAwMCkKKwkJCQl7CisJCQkJCS8vIFNob3VsZCBuZXZlciBzZXQgZGVmYXVsdCBiaXQgd2hlbiByZW1vdmUga2V5CisJCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUtleUlkeCA9IEtleUlkeCAmIDB4MGZmZmZmZmY7CisJCQkJCWlmIChLZXlJZHggPj0gNCl7CisJCQkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleUxlbiA9IDA7CisJCQkJCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uQ2lwaGVyQWxnID0gQ0lQSEVSX05PTkU7CisJCQkJCQlBc2ljUmVtb3ZlU2hhcmVkS2V5RW50cnkocEFkYXB0ZXIsIDAsIChVQ0hBUilLZXlJZHgpOworCQkJCQl9CisJCQkJfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9SRVNFVF9DT1VOVEVSUzoKKyAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KCZwQWRhcHRlci0+V2xhbkNvdW50ZXJzLCBzaXplb2YoQ09VTlRFUl84MDJfMTEpKTsKKyAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KCZwQWRhcHRlci0+Q291bnRlcnM4MDIzLCBzaXplb2YoQ09VTlRFUl84MDJfMykpOworICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkoJnBBZGFwdGVyLT5SYWxpbmtDb3VudGVycywgc2l6ZW9mKENPVU5URVJfUkFMSU5LKSk7CisgICAgICAgICAgICBwQWRhcHRlci0+Q291bnRlcnM4MDIzLlJ4Tm9CdWZmZXIgICA9IDA7CisJCQlwQWRhcHRlci0+Q291bnRlcnM4MDIzLkdvb2RSZWNlaXZlcyA9IDA7CisJCQlwQWRhcHRlci0+Q291bnRlcnM4MDIzLlJ4Tm9CdWZmZXIgICA9IDA7CisjaWZkZWYgUlQyODcwCisJCQlwQWRhcHRlci0+QnVsa091dENvbXBsZXRlCT0gMDsKKwkJCXBBZGFwdGVyLT5CdWxrT3V0Q29tcGxldGVPdGhlcj0gMDsKKwkJCXBBZGFwdGVyLT5CdWxrT3V0Q29tcGxldGVDYW5jZWwgPSAwOworCQkJcEFkYXB0ZXItPkJ1bGtPdXRSZXEgPSAwOworCQkJcEFkYXB0ZXItPkJ1bGtJblJlcT0gMDsKKwkJCXBBZGFwdGVyLT5CdWxrSW5Db21wbGV0ZSA9IDA7CisJCQlwQWRhcHRlci0+QnVsa0luQ29tcGxldGVGYWlsID0gMDsKKyNlbmRpZiAvLyBSVDI4NzAgLy8KKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9SRVNFVF9DT1VOVEVSUyBcbiIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRDoKKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKE5ESVNfODAyXzExX1JUU19USFJFU0hPTEQpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZSdHNUaHJlc2gsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKFJ0c1RocmVzaCA+IE1BWF9SVFNfVEhSRVNIT0xEKQorICAgICAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuUnRzVGhyZXNob2xkID0gKFVTSE9SVClSdHNUaHJlc2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRCAoPSVsZClcbiIsUnRzVGhyZXNoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZGcmFnVGhyZXNoLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuYlVzZVplcm9Ub0Rpc2FibGVGcmFnbWVudCA9IEZBTFNFOworICAgICAgICAgICAgICAgIGlmIChGcmFnVGhyZXNoID4gTUFYX0ZSQUdfVEhSRVNIT0xEIHx8IEZyYWdUaHJlc2ggPCBNSU5fRlJBR19USFJFU0hPTEQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoRnJhZ1RocmVzaCA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkID0gTUFYX0ZSQUdfVEhSRVNIT0xEOworICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5iVXNlWmVyb1RvRGlzYWJsZUZyYWdtZW50ID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkID0gKFVTSE9SVClGcmFnVGhyZXNoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xEICg9JWxkKSBcbiIsRnJhZ1RocmVzaCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9QT1dFUl9NT0RFOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfUE9XRVJfTU9ERSkpCisgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmUG93ZXJNb2RlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIGlmIChQb3dlck1vZGUgPT0gTmRpczgwMl8xMVBvd2VyTW9kZUNBTSkKKyAgICAgICAgICAgICAgICAJU2V0X1BTTW9kZV9Qcm9jKHBBZGFwdGVyLCAiQ0FNIik7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoUG93ZXJNb2RlID09IE5kaXM4MDJfMTFQb3dlck1vZGVNQVhfUFNQKQorICAgICAgICAgICAgICAgIAlTZXRfUFNNb2RlX1Byb2MocEFkYXB0ZXIsICJNYXhfUFNQIik7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoUG93ZXJNb2RlID09IE5kaXM4MDJfMTFQb3dlck1vZGVGYXN0X1BTUCkKKwkJCQkJU2V0X1BTTW9kZV9Qcm9jKHBBZGFwdGVyLCAiRmFzdF9QU1AiKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChQb3dlck1vZGUgPT0gTmRpczgwMl8xMVBvd2VyTW9kZUxlZ2FjeV9QU1ApCisJCQkJCVNldF9QU01vZGVfUHJvYyhwQWRhcHRlciwgIkxlZ2FjeV9QU1AiKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FSU5WQUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfUE9XRVJfTU9ERSAoPSVkKVxuIixQb3dlck1vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1RYX1BPV0VSX0xFVkVMXzE6CisJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoICA8IHNpemVvZihVTE9ORykpCisJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCXsKKwkJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmUG93ZXJUZW1wLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCWlmIChQb3dlclRlbXAgPiAxMDApCisJCQkJCVBvd2VyVGVtcCA9IDB4ZmZmZmZmZmY7ICAvLyBBVVRPCisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFBvd2VyRGVmYXVsdCA9IFBvd2VyVGVtcDsgLy9rZWVwIGN1cnJlbnQgc2V0dGluZy4KKwkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSA9IHBBZGFwdGVyLT5Db21tb25DZmcuVHhQb3dlckRlZmF1bHQ7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX1RYX1BPV0VSX0xFVkVMXzEgKD0lbGQpXG4iLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLlR4UG93ZXJQZXJjZW50YWdlKSk7CisJCQl9CisJICAgICAgICBicmVhazsKKwkJY2FzZSBPSURfODAyXzExX05FVFdPUktfVFlQRV9JTl9VU0U6CisJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihORElTXzgwMl8xMV9ORVRXT1JLX1RZUEUpKQorCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisJCQllbHNlCisJCQl7CisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJk5ldFR5cGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisKKwkJCQlpZiAoTmV0VHlwZSA9PSBOZGlzODAyXzExRFMpCisJCQkJCVJUTVBTZXRQaHlNb2RlKHBBZGFwdGVyLCBQSFlfMTFCKTsKKwkJCQllbHNlIGlmIChOZXRUeXBlID09IE5kaXM4MDJfMTFPRkRNMjQpCisJCQkJCVJUTVBTZXRQaHlNb2RlKHBBZGFwdGVyLCBQSFlfMTFCR19NSVhFRCk7CisJCQkJZWxzZSBpZiAoTmV0VHlwZSA9PSBOZGlzODAyXzExT0ZETTUpCisJCQkJCVJUTVBTZXRQaHlNb2RlKHBBZGFwdGVyLCBQSFlfMTFBKTsKKwkJCQllbHNlCisJCQkJCVN0YXR1cyA9IC1FSU5WQUw7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCQkJaWYgKFN0YXR1cyA9PSBORElTX1NUQVRVU19TVUNDRVNTKQorCQkJCQlTZXRDb21tb25IVChwQWRhcHRlcik7CisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX05FVFdPUktfVFlQRV9JTl9VU0UgKD0lZClcbiIsTmV0VHlwZSkpOworCQkgICAgfQorCQkJYnJlYWs7CisgICAgICAgIC8vIEZvciBXUEEgUFNLIFBNSyBrZXkKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX0FERF9XUEE6CisgICAgICAgICAgICBwS2V5ID0ga21hbGxvYyh3cnEtPnUuZGF0YS5sZW5ndGgsIE1FTV9BTExPQ19GTEFHKTsKKyAgICAgICAgICAgIGlmKHBLZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihwS2V5LCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgaWYgKHBLZXktPkxlbmd0aCAhPSB3cnEtPnUuZGF0YS5sZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX0FERF9XUEEsIEZhaWxlZCEhXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgJiYKKwkJCQkgICAgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgJiYKKwkJCQkgICAgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVPUE5PVFNVUFA7CisgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9BRERfV1BBLCBGYWlsZWQhISBbQXV0aE1vZGUgIT0gV1BBUFNLL1dQQTJQU0svV1BBTk9ORV1cbiIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLKSB8fAorCQkJCQkJIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID09IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0spIHx8CisJCQkJCQkgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkgKSAgICAgLy8gT25seSBmb3IgV1BBIFBTSyBtb2RlCisJCQkJeworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+U3RhQ2ZnLlBNSywgJnBLZXktPktleU1hdGVyaWFsLCBwS2V5LT5LZXlMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAvLyBVc2UgUmFDb25maWcgYXMgUFNLIGFnZW50LgorICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBTVEEgc3VwcGxpY2FudCBzdGF0ZSBtYWNoaW5lCisgICAgICAgICAgICAgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQU5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfU1RBUlQ7CisKKyAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfODAyXzExX0FERF9XUEEgKGlkPTB4JXgsIExlbj0lZC1ieXRlKVxuIiwgcEtleS0+S2V5SW5kZXgsIHBLZXktPktleUxlbmd0aCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfTk9UVVNFOworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF84MDJfMTFfQUREX1dQQSAoaWQ9MHgleCwgTGVuPSVkLWJ5dGUpXG4iLCBwS2V5LT5LZXlJbmRleCwgcEtleS0+S2V5TGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAga2ZyZWUocEtleSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1JFTU9WRV9LRVk6CisgICAgICAgICAgICBwUmVtb3ZlS2V5ID0ga21hbGxvYyh3cnEtPnUuZGF0YS5sZW5ndGgsIE1FTV9BTExPQ19GTEFHKTsKKyAgICAgICAgICAgIGlmKHBSZW1vdmVLZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihwUmVtb3ZlS2V5LCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgaWYgKHBSZW1vdmVLZXktPkxlbmd0aCAhPSB3cnEtPnUuZGF0YS5sZW5ndGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1JFTU9WRV9LRVksIEZhaWxlZCEhXG4iKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgUlRNUFdQQVJlbW92ZUtleVByb2MocEFkYXB0ZXIsIHBSZW1vdmVLZXkpOworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfUkVNT1ZFX0tFWSwgUmVtb3ZlIFdQQSBLZXkhIVxuIikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBLZXlJZHggPSBwUmVtb3ZlS2V5LT5LZXlJbmRleDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoS2V5SWR4ICYgMHg4MDAwMDAwMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIG5ldmVyIHNldCBkZWZhdWx0IGJpdCB3aGVuIHJlbW92ZSBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1JFTU9WRV9LRVksIEZhaWxlZCEhKFNob3VsZCBuZXZlciBzZXQgZGVmYXVsdCBiaXQgd2hlbiByZW1vdmUga2V5KVxuIikpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgS2V5SWR4ID0gS2V5SWR4ICYgMHgwZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChLZXlJZHggPiAzKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9SRU1PVkVfS0VZLCBGYWlsZWQhIShLZXlJZFslZF0gb3V0IG9mIHJhbmdlKVxuIiwgS2V5SWR4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleUxlbiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZyA9IENJUEhFUl9OT05FOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzaWNSZW1vdmVTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwgMCwgKFVDSEFSKUtleUlkeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX1JFTU9WRV9LRVkgKGlkPTB4JXgsIExlbj0lZC1ieXRlKVxuIiwgcFJlbW92ZUtleS0+S2V5SW5kZXgsIHBSZW1vdmVLZXktPkxlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAga2ZyZWUocFJlbW92ZUtleSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gTmV3IGZvciBXUEEKKyAgICAgICAgY2FzZSBPSURfODAyXzExX0FERF9LRVk6CisgICAgICAgICAgICBwS2V5ID0ga21hbGxvYyh3cnEtPnUuZGF0YS5sZW5ndGgsIE1FTV9BTExPQ19GTEFHKTsKKyAgICAgICAgICAgIGlmKHBLZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIocEtleSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChwS2V5LT5MZW5ndGggIT0gd3JxLT51LmRhdGEubGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9BRERfS0VZLCBGYWlsZWQhIVxuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFJUTVBBZGRLZXkocEFkYXB0ZXIsIHBLZXkpOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9BRERfS0VZIChpZD0weCV4LCBMZW49JWQtYnl0ZSlcbiIsIHBLZXktPktleUluZGV4LCBwS2V5LT5LZXlMZW5ndGgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtmcmVlKHBLZXkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoTkRJU184MDJfMTFfQ09ORklHVVJBVElPTikpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJkNvbmZpZywgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBwQ29uZmlnID0gJkNvbmZpZzsKKworICAgICAgICAgICAgICAgIGlmICgocENvbmZpZy0+QmVhY29uUGVyaW9kID49IDIwKSAmJiAocENvbmZpZy0+QmVhY29uUGVyaW9kIDw9NDAwKSkKKyAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQmVhY29uUGVyaW9kID0gKFVTSE9SVCkgcENvbmZpZy0+QmVhY29uUGVyaW9kOworCisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUFjdGl2ZS5BdGltV2luID0gKFVTSE9SVCkgcENvbmZpZy0+QVRJTVdpbmRvdzsKKyAgICAgICAgICAgICAgICBNQVBfS0haX1RPX0NIQU5ORUxfSUQocENvbmZpZy0+RFNDb25maWcsIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCk7CisgICAgICAgICAgICAgICAgLy8KKwkJCQkvLyBTYXZlIHRoZSBjaGFubmVsIG9uIE1sbWVBdXggZm9yIENudGxPaWRSVEJzc2lkUHJvYyB1c2VkLgorCQkJCS8vCisJCQkJcEFkYXB0ZXItPk1sbWVBdXguQ2hhbm5lbCA9IHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbDsKKworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OIChCZWFjblBlcmlvZD0lbGQsQXRpbVc9JWxkLENoPSVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgcENvbmZpZy0+QmVhY29uUGVyaW9kLCBwQ29uZmlnLT5BVElNV2luZG93LCBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKKyAgICAgICAgICAgICAgICAvLyBDb25maWcgaGFzIGNoYW5nZWQKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+YkNvbmZpZ0NoYW5nZWQgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9TRVRfSFRfUEhZTU9ERToKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGgJIT0gc2l6ZW9mKE9JRF9TRVRfSFRfUEhZTU9ERSkpCisJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCXsKKwkJCSAgICBQT0lEX1NFVF9IVF9QSFlNT0RFCXBIVFBoeU1vZGUgPSAmSFRfUGh5TW9kZTsKKworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZIVF9QaHlNb2RlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6cEhUUGh5TW9kZQkoUGh5TW9kZSA9ICVkLFRyYW5zbWl0Tm8gPSAlZCwgSHRNb2RlID0JJWQsCUV4dE9mZnNldCA9CSVkICwgTUNTID0gJWQsIEJXID0JJWQsCVNUQkMgPSAlZCwgU0hPUlRHSSA9ICVkKSBcbiIsCisJCQkJcEhUUGh5TW9kZS0+UGh5TW9kZSwgcEhUUGh5TW9kZS0+VHJhbnNtaXRObyxwSFRQaHlNb2RlLT5IdE1vZGUscEhUUGh5TW9kZS0+RXh0T2Zmc2V0LAorCQkJCXBIVFBoeU1vZGUtPk1DUywgcEhUUGh5TW9kZS0+QlcsIHBIVFBoeU1vZGUtPlNUQkMsCXBIVFBoeU1vZGUtPlNIT1JUR0kpKTsKKwkJCQlpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlCT49IFBIWV8xMUFCR05fTUlYRUQpCisJCQkJCVJUTVBTZXRIVChwQWRhcHRlciwJcEhUUGh5TW9kZSk7CisJCQl9CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF84MDJfMTFfU0VUX0hUX1BIWU1PREUoTUNTPSVkLEJXPSVkLFNHST0lZCxTVEJDPSVkKVxuIiwKKwkJCQlwQWRhcHRlci0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5NQ1MsIHBBZGFwdGVyLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLkJXLCBwQWRhcHRlci0+U3RhQ2ZnLkhUUGh5TW9kZS5maWVsZC5TaG9ydEdJLAorCQkJCXBBZGFwdGVyLT5TdGFDZmcuSFRQaHlNb2RlLmZpZWxkLlNUQkMpKTsKKwkJCWJyZWFrOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCQljYXNlIFJUX09JRF84MDJfMTFfU0VUX0FQU0RfU0VUVElORzoKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKFVMT05HKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVVMT05HIGFwc2QgOworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZhcHNkLCB3cnEtPnUuZGF0YS5wb2ludGVyLAl3cnEtPnUuZGF0YS5sZW5ndGgpOworCisJCQkJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQkJfEIzMX5CNwl8CUI2fkI1CSB8CSBCNAkgfAkgQjMJIHwJQjIJIHwJQjEJIHwJICAgQjAJCXwKKwkJCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJCQl8IFJzdmQJfCBNYXggU1AgTGVuIHwgQUNfVk8gfCBBQ19WSSB8IEFDX0JLIHwgQUNfQkUgfCBBUFNECUNhcGFibGUJfAorCQkJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTRENhcGFibGUgPSAoYXBzZCAmIDB4MDAwMDAwMDEpID8gVFJVRSA6CUZBTFNFOworCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19CRSA9ICgoYXBzZAkmIDB4MDAwMDAwMDIpID4+IDEpCT8gVFJVRSA6IEZBTFNFOworCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19CSyA9ICgoYXBzZAkmIDB4MDAwMDAwMDQpID4+IDIpCT8gVFJVRSA6IEZBTFNFOworCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19WSSA9ICgoYXBzZAkmIDB4MDAwMDAwMDgpID4+IDMpCT8gVFJVRSA6IEZBTFNFOworCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19WTyA9ICgoYXBzZAkmIDB4MDAwMDAwMTApID4+IDQpCT8gVFJVRSA6IEZBTFNFOworCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuTWF4U1BMZW5ndGgJPSAoVUNIQVIpKChhcHNkCSYgMHgwMDAwMDA2MCkgPj4gNSk7CisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF84MDJfMTFfU0VUX0FQU0RfU0VUVElORyAoYXBzZD0weCVseCwgQVBTRENhcD0lZCwgW0JFLEJLLFZJLFZPXT1bJWQvJWQvJWQvJWRdLAlNYXhTUExlbj0lZClcbiIsIGFwc2QsIHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlLAorCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQUNfQkUsCXBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19CSywJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX1ZJLAlwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk8sCXBBZGFwdGVyLT5Db21tb25DZmcuTWF4U1BMZW5ndGgpKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9TRVRfQVBTRF9QU006CisJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoCSE9IHNpemVvZihVTE9ORykpCisJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCXsKKwkJCQkvLyBEcml2ZXIgbmVlZHMJdG8gbm90aWZ5IEFQIHdoZW4gUFNNIGNoYW5nZXMKKwkJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCWlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUJIT0gcEFkYXB0ZXItPlN0YUNmZy5Qc20pCisJCQkJeworCQkJCQlNbG1lU2V0UHNtQml0KHBBZGFwdGVyLAlwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUpOworCQkJCQlSVE1QU2VuZE51bGxGcmFtZShwQWRhcHRlciwJcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFJhdGUsCVRSVUUpOworCQkJCX0KKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OlJUX09JRF84MDJfMTFfU0VUX0FQU0RfUFNNIChiQVBTREZvcmNlUG93ZXJTYXZlOiVkKVxuIiwJcEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREZvcmNlUG93ZXJTYXZlKSk7CisJCQl9CisJCQlicmVhazsKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJY2FzZSBSVF9PSURfODAyXzExX1NFVF9ETFM6CisJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihVTE9ORykpCisJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCXsKKwkJCQlCT09MRUFOCW9sZHZhbHVlID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5iRExTQ2FwYWJsZTsKKwkJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmcEFkYXB0ZXItPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCQlpZiAob2xkdmFsdWUgJiYJIXBBZGFwdGVyLT5Db21tb25DZmcuYkRMU0NhcGFibGUpCisJCQkJeworCQkJCQlpbnQJaTsKKwkJCQkJLy8gdGVhcglkb3duIGxvY2FsIGRscyB0YWJsZSBlbnRyeQorCQkJCQlmb3IJKGk9MDsgaTxNQVhfTlVNX09GX0lOSVRfRExTX0VOVFJZOyBpKyspCisJCQkJCXsKKwkJCQkJCWlmIChwQWRhcHRlci0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlZhbGlkICYmIChwQWRhcHRlci0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cyA9PSBETFNfRklOSVNIKSkKKwkJCQkJCXsKKwkJCQkJCQlwQWRhcHRlci0+U3RhQ2ZnLkRMU0VudHJ5W2ldLlN0YXR1cwk9IERMU19OT05FOworCQkJCQkJCXBBZGFwdGVyLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQJPSBGQUxTRTsKKwkJCQkJCQlSVE1QU2VuZERMU1RlYXJEb3duRnJhbWUocEFkYXB0ZXIsIHBBZGFwdGVyLT5TdGFDZmcuRExTRW50cnlbaV0uTWFjQWRkcik7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQkvLyB0ZWFyCWRvd24gcGVlciBkbHMgdGFibGUJZW50cnkKKwkJCQkJZm9yCShpPU1BWF9OVU1fT0ZfSU5JVF9ETFNfRU5UUlk7IGk8TUFYX05VTV9PRl9ETFNfRU5UUlk7IGkrKykKKwkJCQkJeworCQkJCQkJaWYgKHBBZGFwdGVyLT5TdGFDZmcuRExTRW50cnlbaV0uVmFsaWQgJiYgKHBBZGFwdGVyLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzID09IERMU19GSU5JU0gpKQorCQkJCQkJeworCQkJCQkJCXBBZGFwdGVyLT5TdGFDZmcuRExTRW50cnlbaV0uU3RhdHVzCT0gRExTX05PTkU7CisJCQkJCQkJcEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXS5WYWxpZAk9IEZBTFNFOworCQkJCQkJCVJUTVBTZW5kRExTVGVhckRvd25GcmFtZShwQWRhcHRlciwgcEFkYXB0ZXItPlN0YUNmZy5ETFNFbnRyeVtpXS5NYWNBZGRyKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU2V0OjpSVF9PSURfODAyXzExX1NFVF9ETFMgKD0lZClcbiIsIHBBZGFwdGVyLT5Db21tb25DZmcuYkRMU0NhcGFibGUpKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9TRVRfRExTX1BBUkFNOgorCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aAkhPSBzaXplb2YoUlRfODAyXzExX0RMU19VSSkpCisJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCXsKKwkJCQlSVF84MDJfMTFfRExTCURsczsKKworCQkJCU5kaXNaZXJvTWVtb3J5KCZEbHMsIHNpemVvZihSVF84MDJfMTFfRExTKSk7CisJCQkJUlRNUE1vdmVNZW1vcnkoJkRscywgd3JxLT51LmRhdGEucG9pbnRlciwgc2l6ZW9mKFJUXzgwMl8xMV9ETFNfVUkpKTsKKwkJCQlNbG1lRW5xdWV1ZShwQWRhcHRlciwKKwkJCQkJCQlNTE1FX0NOVExfU1RBVEVfTUFDSElORSwKKwkJCQkJCQlSVF9PSURfODAyXzExX1NFVF9ETFNfUEFSQU0sCisJCQkJCQkJc2l6ZW9mKFJUXzgwMl8xMV9ETFMpLAorCQkJCQkJCSZEbHMpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiU2V0OjpSVF9PSURfODAyXzExX1NFVF9ETFNfUEFSQU0gXG4iKSk7CisJCQl9CisJCQlicmVhazsKKyNlbmRpZiAvLyBRT1NfRExTX1NVUFBPUlQgLy8KKwkJY2FzZSBSVF9PSURfODAyXzExX1NFVF9XTU06CisJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoCSE9IHNpemVvZihCT09MRUFOKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZwQWRhcHRlci0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9TRVRfV01NICg9JWQpCVxuIiwgcEFkYXB0ZXItPkNvbW1vbkNmZy5iV21tQ2FwYWJsZSkpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX0RJU0FTU09DSUFURToKKyNpZmRlZiBSQUxJTktfQVRFCisJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCXsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJUaGUgZHJpdmVyIGlzIGluIEFURSBtb2RlIG5vd1xuIikpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKwkJCS8vCisJCQkvLyBTZXQgTmRpc1JhZGlvU3RhdGVPZmYgdG8JVFJVRSwgaW5zdGVhZCBvZiBjYWxsZWQJTWxtZVJhZGlvT2ZmLgorCQkJLy8gTGF0ZXIgb24sIE5ESVNfODAyXzExX0JTU0lEX0xJU1RfRVgtPk51bWJlck9mSXRlbXMgc2hvdWxkIGJlCTAKKwkJCS8vIHdoZW4JcXVlcnkgT0lEXzgwMl8xMV9CU1NJRF9MSVNULgorCQkJLy8KKwkJCS8vIFRSVUU6ICBOdW1iZXJPZkl0ZW1zCXdpbGwgc2V0IHRvCTAuCisJCQkvLyBGQUxTRTogTnVtYmVyT2ZJdGVtcwlubyBjaGFuZ2UuCisJCQkvLworCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5OZGlzUmFkaW9TdGF0ZU9mZiA9CVRSVUU7CisJCQkvLyBTZXQgdG8gaW1tZWRpYXRlbHkgc2VuZCB0aGUgbWVkaWEgZGlzY29ubmVjdAlldmVudAorCQkJcEFkYXB0ZXItPk1sbWVBdXguQ3VyclJlcUlzRnJvbU5kaXMJPSBUUlVFOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0RJU0FTU09DSUFURQlcbiIpKTsKKworCQkJaWYgKElORlJBX09OKHBBZGFwdGVyKSkKKwkJCXsKKwkJCQlpZiAocEFkYXB0ZXItPk1sbWUuQ250bE1hY2hpbmUuQ3VyclN0YXRlICE9CUNOVExfSURMRSkKKwkJCQl7CisJCQkJCVJUMjhYWF9NTE1FX1JFU0VUX1NUQVRFX01BQ0hJTkUocEFkYXB0ZXIpOworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIhISEgTUxNRQlidXN5LCByZXNldAlNTE1FIHN0YXRlIG1hY2hpbmUgISEhXG4iKSk7CisJCQkJfQorCisJCQkJTWxtZUVucXVldWUocEFkYXB0ZXIsCisJCQkJCU1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorCQkJCQlPSURfODAyXzExX0RJU0FTU09DSUFURSwKKwkJCQkJMCwKKwkJCQkJTlVMTCk7CisKKwkJCQlTdGF0ZU1hY2hpbmVUb3VjaGVkCT0gVFJVRTsKKwkJCX0KKwkJCWJyZWFrOworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9TRVRfSU1NRV9CQV9DQVA6CisJCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoT0lEX0JBQ0FQX1NUUlVDKSkKKwkJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCQllbHNlCisJCQkJeworCQkJCQlPSURfQkFDQVBfU1RSVUMgT3JkZSA7CisJCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZPcmRlLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCQlpZiAoT3JkZS5Qb2xpY3kgPiBCQV9OT1RVU0UpCisJCQkJCXsKKwkJCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0lOVkFMSURfREFUQTsKKwkJCQkJfQorCQkJCQllbHNlIGlmIChPcmRlLlBvbGljeSA9PSBCQV9OT1RVU0UpCisJCQkJCXsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlBvbGljeSA9IEJBX05PVFVTRTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1wZHVEZW5zaXR5ID0gT3JkZS5NcGR1RGVuc2l0eTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1wZHVEZW5zaXR5ID0gT3JkZS5NcGR1RGVuc2l0eTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1RW5hYmxlID0gT3JkZS5BbXNkdUVuYWJsZTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5LkFtc2R1U2l6ZT0gT3JkZS5BbXNkdVNpemU7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NaW1vUHM9IE9yZGUuTU1QU21vZGU7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NTVBTbW9kZSA9IE9yZGUuTU1QU21vZGU7CisJCQkJCQkvLyBVUGRhdGEgdG8gSFQgSUUKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5NaW1vUHMgPSBPcmRlLk1NUFNtb2RlOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBJbmZvLkFNc2R1U2l6ZSA9IE9yZGUuQW1zZHVTaXplOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5IdENhcGFiaWxpdHkuSHRDYXBQYXJtLk1wZHVEZW5zaXR5ID0gT3JkZS5NcGR1RGVuc2l0eTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSA9IE9yZGUuQXV0b0JBOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQUNhcGFiaWxpdHkuZmllbGQuUG9saWN5ID0gSU1NRURfQkE7IC8vIHdlIG9ubHkgc3VwcG9ydCBpbW1lZGlhdGUgQkEuCisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5NcGR1RGVuc2l0eSA9IE9yZGUuTXBkdURlbnNpdHk7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5NcGR1RGVuc2l0eSA9IE9yZGUuTXBkdURlbnNpdHk7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdUVuYWJsZSA9IE9yZGUuQW1zZHVFbmFibGU7CisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdVNpemU9IE9yZGUuQW1zZHVTaXplOworCQkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuTWltb1BzID0gT3JkZS5NTVBTbW9kZTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLk1NUFNtb2RlID0gT3JkZS5NTVBTbW9kZTsKKworCQkJCQkJLy8gVVBkYXRhIHRvIEhUIElFCisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkh0Q2FwYWJpbGl0eS5IdENhcEluZm8uTWltb1BzID0gT3JkZS5NTVBTbW9kZTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwSW5mby5BTXNkdVNpemUgPSBPcmRlLkFtc2R1U2l6ZTsKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuSHRDYXBhYmlsaXR5Lkh0Q2FwUGFybS5NcGR1RGVuc2l0eSA9IE9yZGUuTXBkdURlbnNpdHk7CisKKwkJCQkJCWlmIChwQWRhcHRlci0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQgPiBNQVhfUlhfUkVPUkRFUkJVRikKKwkJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5SeEJBV2luTGltaXQgPSBNQVhfUlhfUkVPUkRFUkJVRjsKKworCQkJCQl9CisKKwkJCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5SRUdCQUNhcGFiaWxpdHkud29yZCA9IHBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LndvcmQ7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6KE9yZGUuQXV0b0JBID0gJWQpIChQb2xpY3k9JWQpKFJlQkFXaW5MaW1pdD0lZCkoVHhCQVdpbkxpbWl0PSVkKShBdXRvTW9kZT0lZClcbiIsT3JkZS5BdXRvQkEsIHBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlBvbGljeSwKKwkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCxwQWRhcHRlci0+Q29tbW9uQ2ZnLkJBQ2FwYWJpbGl0eS5maWVsZC5UeEJBV2luTGltaXQsIHBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLkF1dG9CQSkpOworCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OihNaW1vUHMgPSAlZCkoQW1zZHVFbmFibGUgPSAlZCkgKEFtc2R1U2l6ZT0lZCkoTXBkdURlbnNpdHk9JWQpXG4iLHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1pbW9QcywgcEFkYXB0ZXItPkNvbW1vbkNmZy5EZXNpcmVkSHRQaHkuQW1zZHVFbmFibGUsCisJCQkJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkRlc2lyZWRIdFBoeS5BbXNkdVNpemUsIHBBZGFwdGVyLT5Db21tb25DZmcuRGVzaXJlZEh0UGh5Lk1wZHVEZW5zaXR5KSk7CisJCQkJfQorCisJCQkJYnJlYWs7CisJCWNhc2UgUlRfT0lEXzgwMl8xMV9BRERfSU1NRV9CQToKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBTZXQgOjogUlRfT0lEXzgwMl8xMV9BRERfSU1NRV9CQSBcbiIpKTsKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKE9JRF9BRERfQkFfRU5UUlkpKQorCQkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVVDSEFSCQkgICAgICAgIGluZGV4OworCQkJCU9JRF9BRERfQkFfRU5UUlkgICAgQkE7CisJCQkJTUFDX1RBQkxFX0VOVFJZICAgICAqcEVudHJ5OworCisJCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJkJBLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCWlmIChCQS5USUQgPiAxNSkKKwkJCQl7CisJCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0lOVkFMSURfREFUQTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8vQkFUYWJsZUluc2VydEVudHJ5CisJCQkJCS8vQXMgYWQtaG9jIG1vZGUsIEJBIHBhaXIgaXMgbm90IGxpbWl0ZWQgdG8gb25seSBCU1NJRC4gc28gYWRkIHZpYSBPSUQuCisJCQkJCWluZGV4ID0gQkEuVElEOworCQkJCQkvLyBpbiBhZCBob2MgbW9kZSwgd2hlbiBhZGRpbmcgQkEgcGFpciwgd2Ugc2hvdWxkIGluc2VydCB0aGlzIGVudHJ5IGludG8gTUFDRW50cnkgdG9vCisJCQkJCXBFbnRyeSA9IE1hY1RhYmxlTG9va3VwKHBBZGFwdGVyLCBCQS5NQUNBZGRyKTsKKwkJCQkJaWYgKCFwRW50cnkpCisJCQkJCXsKKwkJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlJUX09JRF84MDJfMTFfQUREX0lNTUVfQkEuIGJyZWFrIG9uIG5vIGNvbm5lY3Rpb24uLS0tLToleDoleFxuIiwgQkEuTUFDQWRkcls0XSwgQkEuTUFDQWRkcls1XSkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJaWYgKEJBLklzUmVjaXBpZW50ID09IEZBTFNFKQorCQkJCQl7CisJCQkJCSAgICBpZiAocEVudHJ5LT5iSUFtQmFkQXRoZXJvcyA9PSBUUlVFKQorCQkJCQkJCXBBZGFwdGVyLT5Db21tb25DZmcuQkFDYXBhYmlsaXR5LmZpZWxkLlJ4QkFXaW5MaW1pdCA9IDB4MTA7CisKKwkJCQkJCUJBT3JpU2Vzc2lvblNldFVwKHBBZGFwdGVyLCBwRW50cnksIGluZGV4LCAwLCAxMDAsIFRSVUUpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJLy9CQVRhYmxlSW5zZXJ0RW50cnkocEFkYXB0ZXIsIHBFbnRyeS0+QWlkLCBCQS5NQUNBZGRyLCAwLCAweGZmZmYsIEJBLlRJRCwgQkEubk1TRFUsIEJBLklzUmVjaXBpZW50KTsKKwkJCQkJfQorCisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6UlRfT0lEXzgwMl8xMV9BRERfSU1NRV9CQS4gUmVjID0gJWQuIE1hYyA9ICV4OiV4OiV4OiV4OiV4OiV4IC4gXG4iLAorCQkJCQkJQkEuSXNSZWNpcGllbnQsIEJBLk1BQ0FkZHJbMF0sIEJBLk1BQ0FkZHJbMV0sIEJBLk1BQ0FkZHJbMl0sIEJBLk1BQ0FkZHJbMl0KKwkJCQkJCSwgQkEuTUFDQWRkcls0XSwgQkEuTUFDQWRkcls1XSkpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9URUFSX0lNTUVfQkE6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQgOjogUlRfT0lEXzgwMl8xMV9URUFSX0lNTUVfQkEgXG4iKSk7CisJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihPSURfQUREX0JBX0VOVFJZKSkKKwkJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCXsKKwkJCQlQT0lEX0FERF9CQV9FTlRSWQlwQkE7CisJCQkJTUFDX1RBQkxFX0VOVFJZICpwRW50cnk7CisKKwkJCQlwQkEgPSBrbWFsbG9jKHdycS0+dS5kYXRhLmxlbmd0aCwgTUVNX0FMTE9DX0ZMQUcpOworCisJCQkJaWYgKHBCQSA9PSBOVUxMKQorCQkJCXsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0IDo6IFJUX09JRF84MDJfMTFfVEVBUl9JTU1FX0JBIGttYWxsb2MoKSBjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5XG4iKSk7CisJCQkJCVN0YXR1cyA9IE5ESVNfU1RBVFVTX0ZBSUxVUkU7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKHBCQSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0IDo6IFJUX09JRF84MDJfMTFfVEVBUl9JTU1FX0JBKFRJRD0lZCwgYkFsbFRpZD0lZClcbiIsIHBCQS0+VElELCBwQkEtPmJBbGxUaWQpKTsKKworCQkJCQlpZiAoIXBCQS0+YkFsbFRpZCAmJiAocEJBLT5USUQgPiBOVU1fT0ZfVElEKSkKKwkJCQkJeworCQkJCQkJU3RhdHVzID0gTkRJU19TVEFUVVNfSU5WQUxJRF9EQVRBOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKworCQkJCQlpZiAocEJBLT5Jc1JlY2lwaWVudCA9PSBGQUxTRSkKKwkJCQkJeworCQkJCQkJcEVudHJ5ID0gTWFjVGFibGVMb29rdXAocEFkYXB0ZXIsIHBCQS0+TUFDQWRkcik7CisJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgcEJBLT5Jc1JlY2lwaWVudCA9PSBGQUxTRVxuIikpOworCQkJCQkJaWYgKHBFbnRyeSkKKwkJCQkJCXsKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgcEJBLT5wRW50cnlcbiIpKTsKKwkJCQkJCQlCQU9yaVNlc3Npb25UZWFyRG93bihwQWRhcHRlciwgcEVudHJ5LT5BaWQsIHBCQS0+VElELCBGQUxTRSwgVFJVRSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0IDo6IE5vdCBmb3VuZCBwRW50cnkgXG4iKSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlwRW50cnkgPSBNYWNUYWJsZUxvb2t1cChwQWRhcHRlciwgcEJBLT5NQUNBZGRyKTsKKwkJCQkJCWlmIChwRW50cnkpCisJCQkJCQl7CisJCQkJCQkJQkFSZWNTZXNzaW9uVGVhckRvd24oIHBBZGFwdGVyLCAoVUNIQVIpcEVudHJ5LT5BaWQsIHBCQS0+VElELCBUUlVFKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQgOjogTm90IGZvdW5kIHBFbnRyeSBcbiIpKTsKKwkJCQkJfQorCQkJCQlrZnJlZShwQkEpOworCQkJCX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisgICAgICAgIC8vIEZvciBXUEFfU1VQUExJQ0FOVCB0byBzZXQgc3RhdGljIHdlcCBrZXkKKyAgICAJY2FzZSBPSURfODAyXzExX0FERF9XRVA6CisgICAgCSAgICBwV2VwS2V5ID0ga21hbGxvYyh3cnEtPnUuZGF0YS5sZW5ndGgsIE1FTV9BTExPQ19GTEFHKTsKKworICAgIAkgICAgaWYocFdlcEtleSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FTk9NRU07CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0FERF9XRVAsIEZhaWxlZCEhXG4iKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihwV2VwS2V5LCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgaWYgKFN0YXR1cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQUREX1dFUCwgRmFpbGVkIChsZW5ndGggbWlzbWF0Y2gpISFcbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKwkJICAgICAgICBLZXlJZHggPSBwV2VwS2V5LT5LZXlJbmRleCAmIDB4MGZmZmZmZmY7CisgICAgICAgICAgICAgICAgLy8gS2V5SWR4IG11c3QgYmUgMCB+IDMKKyAgICAgICAgICAgICAgICBpZiAoS2V5SWR4ID4gNCkKKyAgICAJCQl7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQUREX1dFUCwgRmFpbGVkIChLZXlJZHggbXVzdCBiZSBzbWFsbGVyIHRoYW4gNCkhIVxuIikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVQ0hBUiBDaXBoZXJBbGcgPSAwOworICAgICAgICAgICAgICAgICAgICBQVUNIQVIgS2V5OworCisgICAgICAgICAgICAgICAgICAgIC8vIHNldCBrZXkgbWF0ZXJpYWwgYW5kIGtleSBsZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLktleSwgMTYpOworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW0tleUlkeF0uS2V5TGVuID0gKFVDSEFSKSBwV2VwS2V5LT5LZXlMZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXksICZwV2VwS2V5LT5LZXlNYXRlcmlhbCwgcFdlcEtleS0+S2V5TGVuZ3RoKTsKKworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gocFdlcEtleS0+S2V5TGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQUREX1dFUCwgb25seSBzdXBwb3J0IENJUEhFUl9XRVA2NChsZW46NSkgJiBDSVBIRVJfV0VQMTI4KGxlbjoxMykhIVxuIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtLZXlJZHhdLkNpcGhlckFsZyA9IENpcGhlckFsZzsKKworICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IGtleSBmb3IgdHggKHNoYXJlZCBrZXkpCisgICAgICAgICAgICAgICAgICAgIGlmIChwV2VwS2V5LT5LZXlJbmRleCAmIDB4ODAwMDAwMDApCisgICAgICAgICAgICAgICAgICAgIHsKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQga2V5IG1hdGVyaWFsIGFuZCBrZXkgbGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICBOZGlzWmVyb01lbW9yeShwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleVtLZXlJZHhdLktleSwgMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlbS2V5SWR4XS5LZXlMZW4gPSAoVUNIQVIpIHBXZXBLZXktPktleUxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TdGFDZmcuRGVzaXJlU2hhcmVkS2V5W0tleUlkeF0uS2V5LCAmcFdlcEtleS0+S2V5TWF0ZXJpYWwsIHBXZXBLZXktPktleUxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlc2lyZVNoYXJlZEtleUlkID0gS2V5SWR4OworICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVTaGFyZWRLZXlbS2V5SWR4XS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSAoVUNIQVIpIEtleUlkeDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgICAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9PSBXUEFfODAyXzFYX1BPUlRfU0VDVVJFRCkKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEtleSA9IHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bS2V5SWR4XS5LZXk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBrZXkgbWF0ZXJpYWwgYW5kIGNpcGhlckFsZyB0byBBc2ljCisgICAgICAgIAkJCQlBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkYXB0ZXIsIEJTUzAsIEtleUlkeCwgQ2lwaGVyQWxnLCBLZXksIE5VTEwsIE5VTEwpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocFdlcEtleS0+S2V5SW5kZXggJiAweDgwMDAwMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNQUNfVEFCTEVfRU5UUlkgcEVudHJ5ID0gJnBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBc3NpZ24gZ3JvdXAga2V5IGluZm8KKyAgICAJCQkJCQlSVE1QQWRkV2NpZEF0dHJpYnV0ZUVudHJ5KHBBZGFwdGVyLCBCU1MwLCBLZXlJZHgsIENpcGhlckFsZywgTlVMTCk7CisgICAgCQkJCQkJLy8gQXNzaWduIHBhaXJ3aXNlIGtleSBpbmZvCisgICAgCQkJCQkJUlRNUEFkZFdjaWRBdHRyaWJ1dGVFbnRyeShwQWRhcHRlciwgQlNTMCwgS2V5SWR4LCBDaXBoZXJBbGcsIHBFbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKwkJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0FERF9XRVAgKGlkPTB4JXgsIExlbj0lZC1ieXRlKSwgJXNcbiIsIHBXZXBLZXktPktleUluZGV4LCBwV2VwS2V5LT5LZXlMZW5ndGgsIChwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID09IFdQQV84MDJfMVhfUE9SVF9TRUNVUkVEKSA/ICJQb3J0IFNlY3VyZWQiOiJQb3J0IE5PVCBTZWN1cmVkIikpOworCQkJCX0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtmcmVlKHBXZXBLZXkpOworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorCSAgICBjYXNlIE9JRF9TRVRfQ09VTlRFUk1FQVNVUkVTOgorICAgICAgICAgICAgaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoaW50KSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgZW5hYmxlZCA9IDA7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIoJmVuYWJsZWQsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgaWYgKGVuYWJsZWQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5iQmxvY2tBc3NvYyA9IFRSVUU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAvLyBXUEEgTUlDIGVycm9yIHNob3VsZCBibG9jayBhc3NvY2lhdGlvbiBhdHRlbXB0IGZvciA2MCBzZWNvbmRzCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuYkJsb2NrQXNzb2MgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF9TRVRfQ09VTlRFUk1FQVNVUkVTIGJCbG9ja0Fzc29jPSVzXG4iLCBwQWRhcHRlci0+U3RhQ2ZnLmJCbG9ja0Fzc29jID8gIlRSVUUiOiJGQUxTRSIpKTsKKyAgICAgICAgICAgIH0KKwkgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUOgorCQkJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCAhPSBzaXplb2YoVUNIQVIpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZ3cGFfc3VwcGxpY2FudF9lbmFibGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgCQkJcEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSB3cGFfc3VwcGxpY2FudF9lbmFibGU7CisgICAgCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpSVF9PSURfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAoPSVkKVxuIiwgcEFkYXB0ZXItPlN0YUNmZy5XcGFTdXBwbGljYW50VVApKTsKKwkJCX0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfREVBVVRIRU5USUNBVElPTjoKKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKE1MTUVfREVBVVRIX1JFUV9TVFJVQ1QpKQorICAgICAgICAgICAgICAgIFN0YXR1cyAgPSAtRUlOVkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE1MTUVfREVBVVRIX1JFUV9TVFJVQ1QgICAgICAqcEluZm87CisJCQkJTUxNRV9RVUVVRV9FTEVNICpNc2dFbGVtID0gKE1MTUVfUVVFVUVfRUxFTSAqKSBrbWFsbG9jKHNpemVvZihNTE1FX1FVRVVFX0VMRU0pLCBNRU1fQUxMT0NfRkxBRyk7CisKKyAgICAgICAgICAgICAgICBwSW5mbyA9IChNTE1FX0RFQVVUSF9SRVFfU1RSVUNUICopIE1zZ0VsZW0tPk1zZzsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihwSW5mbywgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBNbG1lRGVhdXRoUmVxQWN0aW9uKHBBZGFwdGVyLCBNc2dFbGVtKTsKKwkJCQlrZnJlZShNc2dFbGVtKTsKKworICAgICAgICAgICAgICAgIGlmIChJTkZSQV9PTihwQWRhcHRlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBMaW5rRG93bihwQWRhcHRlciwgRkFMU0UpOworICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+TWxtZS5Bc3NvY01hY2hpbmUuQ3VyclN0YXRlID0gQVNTT0NfSURMRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0RFQVVUSEVOVElDQVRJT04gKFJlYXNvbj0lZClcbiIsIHBJbmZvLT5SZWFzb24pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfRFJPUF9VTkVOQ1JZUFRFRDoKKyAgICAgICAgICAgIGlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKGludCkpCisgICAgICAgICAgICAgICAgU3RhdHVzICA9IC1FSU5WQUw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IGVuYWJsZWQgPSAwOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZlbmFibGVkLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIGlmIChlbmFibGVkID09IDEpCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgPSBXUEFfODAyXzFYX1BPUlRfTk9UX1NFQ1VSRUQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlBvcnRTZWN1cmVkID0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQ7CisJCQkJTmRpc0FjcXVpcmVTcGluTG9jaygmcEFkYXB0ZXItPk1hY1RhYkxvY2spOworCQkJCXBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5Qb3J0U2VjdXJlZCA9IHBBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQ7CisJCQkJTmRpc1JlbGVhc2VTcGluTG9jaygmcEFkYXB0ZXItPk1hY1RhYkxvY2spOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9EUk9QX1VORU5DUllQVEVEICg9JWQpXG4iLCBlbmFibGVkKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1NFVF9JRUVFODAyMVg6CisgICAgICAgICAgICBpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihCT09MRUFOKSkKKyAgICAgICAgICAgICAgICBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmSUVFRTgwMjF4U3RhdGUsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCSAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5JRUVFODAyMVggPSBJRUVFODAyMXhTdGF0ZTsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfU0VUX0lFRUU4MDIxWCAoPSVkKVxuIiwgSUVFRTgwMjF4U3RhdGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfU0VUX0lFRUU4MDIxWF9SRVFVSVJFX0tFWToKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKEJPT0xFQU4pKQorCQkJCSBTdGF0dXMgID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmSUVFRTgwMjF4X3JlcXVpcmVkX2tleXMsIHdycS0+dS5kYXRhLnBvaW50ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJcEFkYXB0ZXItPlN0YUNmZy5JRUVFODAyMXhfcmVxdWlyZWRfa2V5cyA9IElFRUU4MDIxeF9yZXF1aXJlZF9rZXlzOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9TRVRfSUVFRTgwMjFYX1JFUVVJUkVfS0VZICglZClcbiIsIElFRUU4MDIxeF9yZXF1aXJlZF9rZXlzKSk7CisJCQl9CisJCQlicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1BNS0lEOgorCSAgICAgICAgcFBta0lkID0ga21hbGxvYyh3cnEtPnUuZGF0YS5sZW5ndGgsIE1FTV9BTExPQ19GTEFHKTsKKworCSAgICAgICAgaWYocFBta0lkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RhdHVzID0gY29weV9mcm9tX3VzZXIocFBta0lkLCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCisJICAgICAgICAvLyBjaGVjayB0aGUgUE1LSUQgaW5mb3JtYXRpb24KKwkgICAgICAgIGlmIChwUG1rSWQtPkJTU0lESW5mb0NvdW50ID09IDApCisgICAgICAgICAgICAgICAgTmRpc1plcm9NZW1vcnkocEFkYXB0ZXItPlN0YUNmZy5TYXZlZFBNSywgc2l6ZW9mKEJTU0lEX0lORk8pKlBNS0lEX05PKTsKKwkgICAgICAgIGVsc2UKKwkgICAgICAgIHsKKwkJICAgICAgICBQQlNTSURfSU5GTwlwQnNzSWRJbmZvOworCQkgICAgICAgIFVJTlQJCUJzc0lkeDsKKwkJICAgICAgICBVSU5UCQlDYWNoZWRJZHg7CisKKwkJICAgICAgICBmb3IgKEJzc0lkeCA9IDA7IEJzc0lkeCA8IHBQbWtJZC0+QlNTSURJbmZvQ291bnQ7IEJzc0lkeCsrKQorCQkgICAgICAgIHsKKwkJCSAgICAgICAgLy8gcG9pbnQgdG8gdGhlIGluZGV4ZWQgQlNTSURfSU5GTyBzdHJ1Y3R1cmUKKwkJCSAgICAgICAgcEJzc0lkSW5mbyA9IChQQlNTSURfSU5GTykgKChQVUNIQVIpIHBQbWtJZCArIDIgKiBzaXplb2YoVUlOVCkgKyBCc3NJZHggKiBzaXplb2YoQlNTSURfSU5GTykpOworCQkJICAgICAgICAvLyBGaW5kIHRoZSBlbnRyeSBpbiB0aGUgc2F2ZWQgZGF0YSBiYXNlLgorCQkJICAgICAgICBmb3IgKENhY2hlZElkeCA9IDA7IENhY2hlZElkeCA8IHBBZGFwdGVyLT5TdGFDZmcuU2F2ZWRQTUtOdW07IENhY2hlZElkeCsrKQorCQkJICAgICAgICB7CisJCQkJICAgICAgICAvLyBjb21wYXJlIHRoZSBCU1NJRAorCQkJCSAgICAgICAgaWYgKE5kaXNFcXVhbE1lbW9yeShwQnNzSWRJbmZvLT5CU1NJRCwgcEFkYXB0ZXItPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLkJTU0lELCBzaXplb2YoTkRJU184MDJfMTFfTUFDX0FERFJFU1MpKSkKKwkJCQkJICAgICAgICBicmVhazsKKwkJCSAgICAgICAgfQorCisJCQkgICAgICAgIC8vIEZvdW5kLCByZXBsYWNlIGl0CisJCQkgICAgICAgIGlmIChDYWNoZWRJZHggPCBQTUtJRF9OTykKKwkJCSAgICAgICAgeworCQkJCSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfT0ZGLCAoIlVwZGF0ZSBPSURfODAyXzExX1BNS0lELCBpZHggPSAlZFxuIiwgQ2FjaGVkSWR4KSk7CisJCQkJICAgICAgICBOZGlzTW92ZU1lbW9yeSgmcEFkYXB0ZXItPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLCBwQnNzSWRJbmZvLCBzaXplb2YoQlNTSURfSU5GTykpOworCQkJCSAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5TYXZlZFBNS051bSsrOworCQkJICAgICAgICB9CisJCQkgICAgICAgIC8vIE5vdCBmb3VuZCwgcmVwbGFjZSB0aGUgbGFzdCBvbmUKKwkJCSAgICAgICAgZWxzZQorCQkJICAgICAgICB7CisJCQkJICAgICAgICAvLyBSYW5kb21seSByZXBsYWNlIG9uZQorCQkJCSAgICAgICAgQ2FjaGVkSWR4ID0gKHBCc3NJZEluZm8tPkJTU0lEWzVdICUgUE1LSURfTk8pOworCQkJCSAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfT0ZGLCAoIlVwZGF0ZSBPSURfODAyXzExX1BNS0lELCBpZHggPSAlZFxuIiwgQ2FjaGVkSWR4KSk7CisJCQkJICAgICAgICBOZGlzTW92ZU1lbW9yeSgmcEFkYXB0ZXItPlN0YUNmZy5TYXZlZFBNS1tDYWNoZWRJZHhdLCBwQnNzSWRJbmZvLCBzaXplb2YoQlNTSURfSU5GTykpOworCQkJICAgICAgICB9CisJCSAgICAgICAgfQorCQkJfQorCQkJaWYocFBta0lkKQorCQkJCWtmcmVlKHBQbWtJZCk7CisJICAgICAgICBicmVhazsKKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKworCisjaWZkZWYgU05NUF9TVVBQT1JUCisJCWNhc2UgT0lEXzgwMl8xMV9TSE9SVFJFVFJZTElNSVQ6CisJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihVTE9ORykpCisJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCXsKKwkJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmU2hvcnRSZXRyeUxpbWl0LCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCVJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBUWF9SVFlfQ0ZHLCAmdHhfcnR5X2NmZy53b3JkKTsKKwkJCQl0eF9ydHlfY2ZnLmZpZWxkLlNob3J0UnR5TGltaXQgPSBTaG9ydFJldHJ5TGltaXQ7CisJCQkJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBUWF9SVFlfQ0ZHLCB0eF9ydHlfY2ZnLndvcmQpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9TSE9SVFJFVFJZTElNSVQgKHR4X3J0eV9jZmcuZmllbGQuU2hvcnRSZXRyeUxpbWl0PSVkLCBTaG9ydFJldHJ5TGltaXQ9JWxkKVxuIiwgdHhfcnR5X2NmZy5maWVsZC5TaG9ydFJ0eUxpbWl0LCBTaG9ydFJldHJ5TGltaXQpKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9MT05HUkVUUllMSU1JVDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9MT05HUkVUUllMSU1JVCBcbiIpKTsKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKFVMT05HKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJeworCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZMb25nUmV0cnlMaW1pdCwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgVFhfUlRZX0NGRywgJnR4X3J0eV9jZmcud29yZCk7CisJCQkJdHhfcnR5X2NmZy5maWVsZC5Mb25nUnR5TGltaXQgPSBMb25nUmV0cnlMaW1pdDsKKwkJCQlSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsIHR4X3J0eV9jZmcud29yZCk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0OjpPSURfODAyXzExX0xPTkdSRVRSWUxJTUlUICh0eF9ydHlfY2ZnLmZpZWxkLkxvbmdSZXRyeUxpbWl0PSAlZCxMb25nUmV0cnlMaW1pdD0lbGQpXG4iLCB0eF9ydHlfY2ZnLmZpZWxkLkxvbmdSdHlMaW1pdCwgTG9uZ1JldHJ5TGltaXQpKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9XRVBERUZBVUxUS0VZVkFMVUU6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfV0VQREVGQVVMVEtFWVZBTFVFXG4iKSk7CisJCQlwS2V5ID0ga21hbGxvYyh3cnEtPnUuZGF0YS5sZW5ndGgsIEdGUF9LRVJORUwpOworCQkJU3RhdHVzID0gY29weV9mcm9tX3VzZXIocEtleSwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCS8vcEtleSA9ICZXZXBLZXk7CisKKwkJCWlmICggcEtleS0+TGVuZ3RoICE9IHdycS0+dS5kYXRhLmxlbmd0aCkKKwkJCXsKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9XRVBERUZBVUxUS0VZVkFMVUUsIEZhaWxlZCEhXG4iKSk7CisJCQl9CisJCQlLZXlJZHggPSBwS2V5LT5LZXlJbmRleCAmIDB4MGZmZmZmZmY7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoInBLZXktPktleUluZGV4ID0lZCwgcEtleS0+S2V5TGVuZ3RoPSVkXG4iLCBwS2V5LT5LZXlJbmRleCwgcEtleS0+S2V5TGVuZ3RoKSk7CisKKwkJCS8vIGl0IGlzIGEgc2hhcmVkIGtleQorCQkJaWYgKEtleUlkeCA+IDQpCisJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCXsKKwkJCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW4gPSAoVUNIQVIpIHBLZXktPktleUxlbmd0aDsKKwkJCQlOZGlzTW92ZU1lbW9yeSgmcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LCAmcEtleS0+S2V5TWF0ZXJpYWwsIHBLZXktPktleUxlbmd0aCk7CisJCQkJaWYgKHBLZXktPktleUluZGV4ICYgMHg4MDAwMDAwMCkKKwkJCQl7CisJCQkJCS8vIERlZmF1bHQga2V5IGZvciB0eCAoc2hhcmVkIGtleSkKKwkJCQkJcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSAoVUNIQVIpIEtleUlkeDsKKwkJCQl9CisJCQkJLy9SZXN0YXJ0QVBJc1JlcXVpcmVkID0gVFJVRTsKKwkJCX0KKwkJCWJyZWFrOworCisKKwkJY2FzZSBPSURfODAyXzExX1dFUERFRkFVTFRLRVlJRDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldDo6T0lEXzgwMl8xMV9XRVBERUZBVUxUS0VZSUQgXG4iKSk7CisKKwkJCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggIT0gc2l6ZW9mKFVDSEFSKSkKKwkJCQlTdGF0dXMgPSAtRUlOVkFMOworCQkJZWxzZQorCQkJCVN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKCZwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKworCQkJYnJlYWs7CisKKworCQljYXNlIE9JRF84MDJfMTFfQ1VSUkVOVENIQU5ORUw6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6Ok9JRF84MDJfMTFfQ1VSUkVOVENIQU5ORUwgXG4iKSk7CisJCQlpZiAod3JxLT51LmRhdGEubGVuZ3RoICE9IHNpemVvZihVQ0hBUikpCisJCQkJU3RhdHVzID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCXsKKwkJCQlTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcigmY3RtcCwgd3JxLT51LmRhdGEucG9pbnRlciwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCQlzcHJpbnRmKCZjdG1wLCIlZCIsIGN0bXApOworCQkJCVNldF9DaGFubmVsX1Byb2MocEFkYXB0ZXIsICZjdG1wKTsKKwkJCX0KKwkJCWJyZWFrOworI2VuZGlmCisKKworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXQ6OnVua25vd24gSU9DVEwncyBzdWJjbWQgPSAweCUwOHhcbiIsIGNtZCkpOworICAgICAgICAgICAgU3RhdHVzID0gLUVPUE5PVFNVUFA7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKworICAgIHJldHVybiBTdGF0dXM7Cit9CisKK0lOVCBSVE1QUXVlcnlJbmZvcm1hdGlvbigKKyAgICBJTiAgUFJUTVBfQURBUFRFUiBwQWRhcHRlciwKKyAgICBJTiAgT1VUIHN0cnVjdCBpZnJlcSAgICAqcnEsCisgICAgSU4gIElOVCAgICAgICAgICAgICAgICAgY21kKQoreworICAgIHN0cnVjdCBpd3JlcSAgICAgICAgICAgICAgICAgICAgICAgICp3cnEgPSAoc3RydWN0IGl3cmVxICopIHJxOworICAgIE5ESVNfODAyXzExX0JTU0lEX0xJU1RfRVggICAgICAgICAgICpwQnNzaWRMaXN0ID0gTlVMTDsKKyAgICBQTkRJU19XTEFOX0JTU0lEX0VYICAgICAgICAgICAgICAgICBwQnNzOworICAgIE5ESVNfODAyXzExX1NTSUQgICAgICAgICAgICAgICAgICAgIFNzaWQ7CisgICAgTkRJU184MDJfMTFfQ09ORklHVVJBVElPTiAgICAgICAgICAgKnBDb25maWd1cmF0aW9uID0gTlVMTDsKKyAgICBSVF84MDJfMTFfTElOS19TVEFUVVMgICAgICAgICAgICAgICAqcExpbmtTdGF0dXMgPSBOVUxMOworICAgIFJUXzgwMl8xMV9TVEFfQ09ORklHICAgICAgICAgICAgICAgICpwU3RhQ29uZmlnID0gTlVMTDsKKyAgICBORElTXzgwMl8xMV9TVEFUSVNUSUNTICAgICAgICAgICAgICAqcFN0YXRpc3RpY3MgPSBOVUxMOworICAgIE5ESVNfODAyXzExX1JUU19USFJFU0hPTEQgICAgICAgICAgIFJ0c1RocmVzaDsKKyAgICBORElTXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCBGcmFnVGhyZXNoOworICAgIE5ESVNfODAyXzExX1BPV0VSX01PREUgICAgICAgICAgICAgIFBvd2VyTW9kZTsKKyAgICBORElTXzgwMl8xMV9ORVRXT1JLX0lORlJBU1RSVUNUVVJFICBCc3NUeXBlOworICAgIFJUXzgwMl8xMV9QUkVBTUJMRSAgICAgICAgICAgICAgICAgIFByZWFtVHlwZTsKKyAgICBORElTXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFICAgICBBdXRoTW9kZTsKKyAgICBORElTXzgwMl8xMV9XRVBfU1RBVFVTICAgICAgICAgICAgICBXZXBTdGF0dXM7CisgICAgTkRJU19NRURJQV9TVEFURSAgICAgICAgICAgICAgICAgICAgTWVkaWFTdGF0ZTsKKyAgICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCc3NCdWZTaXplLCB1bEluZm89MCwgTmV0d29ya1R5cGVMaXN0WzRdLCBhcHNkID0gMDsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCc3NMZW4gPSAwOworICAgIFBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdWYgPSBOVUxMLCBwUHRyOworICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyA9IE5ESVNfU1RBVFVTX1NVQ0NFU1M7CisgICAgVUlOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VfdmVyc2lvbl9jb21waWxlZDsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBQYWRkaW5nID0gMDsKKyAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYWRpb1N0YXRlOworCVVDSEFSCWRyaXZlclZlcnNpb25bOF07CisgICAgT0lEX1NFVF9IVF9QSFlNT0RFCQkJICAgICAgICAqcEhUUGh5TW9kZSA9IE5VTEw7CisKKworI2lmZGVmIFNOTVBfU1VQUE9SVAorCS8vZm9yIHNubXAsIGthdGh5CisJRGVmYXVsdEtleUlkeFZhbHVlCQkJKnBLZXlJZHhWYWx1ZTsKKwlJTlQJCQkJCQkJdmFsdWVMZW47CisJVFhfUlRZX0NGR19TVFJVQwkJCXR4X3J0eV9jZmc7CisJVUxPTkcJCQkJCQlTaG9ydFJldHJ5TGltaXQsIExvbmdSZXRyeUxpbWl0OworCVVDSEFSCQkJCQkJdG1wWzY0XTsKKyNlbmRpZiAvL1NOTVAKKworICAgIHN3aXRjaChjbWQpCisgICAgeworICAgICAgICBjYXNlIFJUX09JRF9ERVZJQ0VfTkFNRToKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihTVEFfTklDX0RFVklDRV9OQU1FKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBTVEFfTklDX0RFVklDRV9OQU1FLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEX1ZFUlNJT05fSU5GTzoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfVkVSU0lPTl9JTkZPIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gOCpzaXplb2YoVUNIQVIpOworCQkJc3ByaW50ZigmZHJpdmVyVmVyc2lvblswXSwgIiVzIiwgU1RBX0RSSVZFUl9WRVJTSU9OKTsKKwkJCWRyaXZlclZlcnNpb25bN10gPSAnXDAnOworCQkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmZHJpdmVyVmVyc2lvbiwgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAgICAgICAgIHsKKwkJCQlTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgUkFMSU5LX0FURQorCQljYXNlIFJUX1FVRVJZX0FURV9UWERPTkVfQ09VTlQ6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfUVVFUllfQVRFX1RYRE9ORV9DT1VOVCBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVSU5UMzIpOworCQkJaWYgKGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPmF0ZS5UeERvbmVDb3VudCwgd3JxLT51LmRhdGEubGVuZ3RoKSkKKwkJCXsKKwkJCQlTdGF0dXMgPSAtRUZBVUxUOworCQkJfQorCQkJYnJlYWs7CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworICAgICAgICBjYXNlIE9JRF84MDJfMTFfQlNTSURfTElTVDoKKyAgICAgICAgICAgIGlmIChSVE1QX1RFU1RfRkxBRyhwQWRhcHRlciwgZlJUTVBfQURBUFRFUl9CU1NfU0NBTl9JTl9QUk9HUkVTUykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAJLyoKKyAgICAgICAgICAgIAkgKiBTdGlsbCBzY2FubmluZywgaW5kaWNhdGUgdGhlIGNhbGxlciBzaG91bGQgdHJ5IGFnYWluLgorICAgICAgICAgICAgCSAqLworICAgICAgICAgICAgCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX0JTU0lEX0xJU1QgKFN0aWxsIHNjYW5uaW5nKVxuIikpOworCQkJCXJldHVybiAtRUFHQUlOOworICAgICAgICAgICAgfQorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfQlNTSURfTElTVCAoJWQgQlNTIHJldHVybmVkKVxuIixwQWRhcHRlci0+U2NhblRhYi5Cc3NOcikpOworCQkJcEFkYXB0ZXItPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJID0gRkFMU0U7CisgICAgICAgICAgICAvLyBDbGFjdWxhdGUgdG90YWwgYnVmZmVyIHNpemUgcmVxdWlyZWQKKyAgICAgICAgICAgIEJzc0J1ZlNpemUgPSBzaXplb2YoVUxPTkcpOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcEFkYXB0ZXItPlNjYW5UYWIuQnNzTnI7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBBbGlnbiBwb2ludGVyIHRvIDQgYnl0ZXMgYm91bmRhcnkuCisgICAgICAgICAgICAgICAgLy9QYWRkaW5nID0gNCAtIChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5WYXJJRUxlbiAmIDB4MDAwMyk7CisgICAgICAgICAgICAgICAgLy9pZiAoUGFkZGluZyA9PSA0KQorICAgICAgICAgICAgICAgIC8vICAgIFBhZGRpbmcgPSAwOworICAgICAgICAgICAgICAgIEJzc0J1ZlNpemUgKz0gKHNpemVvZihORElTX1dMQU5fQlNTSURfRVgpIC0gMSArIHNpemVvZihORElTXzgwMl8xMV9GSVhFRF9JRXMpICsgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uVmFySUVMZW4gKyBQYWRkaW5nKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRm9yIHNhZmV0eSBpc3N1ZSwgd2UgYWRkIDI1NiBieXRlcyBqdXN0IGluIGNhc2UKKyAgICAgICAgICAgIEJzc0J1ZlNpemUgKz0gMjU2OworICAgICAgICAgICAgLy8gQWxsb2NhdGUgdGhlIHNhbWUgc2l6ZSBhcyBwYXNzZWQgZnJvbSBoaWdoZXIgbGF5ZXIKKyAgICAgICAgICAgIHBCdWYgPSBrbWFsbG9jKEJzc0J1ZlNpemUsIE1FTV9BTExPQ19GTEFHKTsKKyAgICAgICAgICAgIGlmKHBCdWYgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gSW5pdCA4MDJfMTFfQlNTSURfTElTVF9FWCBzdHJ1Y3R1cmUKKyAgICAgICAgICAgIE5kaXNaZXJvTWVtb3J5KHBCdWYsIEJzc0J1ZlNpemUpOworICAgICAgICAgICAgcEJzc2lkTGlzdCA9IChQTkRJU184MDJfMTFfQlNTSURfTElTVF9FWCkgcEJ1ZjsKKyAgICAgICAgICAgIHBCc3NpZExpc3QtPk51bWJlck9mSXRlbXMgPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NOcjsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRvdGFsIGJ1ZmZlciBsZW5ndGgKKyAgICAgICAgICAgIEJzc0xlbiA9IDQ7IC8vIENvbnNpc3Qgb2YgTnVtYmVyT2ZJdGVtcworICAgICAgICAgICAgLy8gUG9pbnQgdG8gc3RhcnQgb2YgTkRJU19XTEFOX0JTU0lEX0VYCisgICAgICAgICAgICAvLyBwUHRyID0gcEJ1ZiArIHNpemVvZihVTE9ORyk7CisgICAgICAgICAgICBwUHRyID0gKFBVQ0hBUikgJnBCc3NpZExpc3QtPkJzc2lkWzBdOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBBZGFwdGVyLT5TY2FuVGFiLkJzc05yOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcEJzcyA9IChQTkRJU19XTEFOX0JTU0lEX0VYKSBwUHRyOworICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KCZwQnNzLT5NYWNBZGRyZXNzLCAmcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQnNzaWQsIE1BQ19BRERSX0xFTik7CisgICAgICAgICAgICAgICAgaWYgKChwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5IaWRkZW4gPT0gMSkgJiYgKHBBZGFwdGVyLT5TdGFDZmcuYlNob3dIaWRkZW5TU0lEID09IEZBTFNFKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vCisJCQkJCS8vIFdlIG11c3QgcmV0dXJuIHRoaXMgU1NJRCBkdXJpbmcgNHdheSBoYW5kc2hha2luZywgb3RoZXJ3aXNlIEFlZ2lzIHdpbGwgZmFpbGVkIHRvIHBhcnNlIFdQQSBpbmZvbWF0aW9uCisJCQkJCS8vIGFuZCB0aGVuIGZhaWxlZCB0byBzZW5kIEVBUE9sIGZhcmFtZS4KKwkJCQkJLy8KKwkJCQkJaWYgKChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkgJiYgKHBBZGFwdGVyLT5TdGFDZmcuUG9ydFNlY3VyZWQgIT0gV1BBXzgwMl8xWF9QT1JUX1NFQ1VSRUQpKQorCQkJCQl7CisJCQkJCQlwQnNzLT5Tc2lkLlNzaWRMZW5ndGggPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Tc2lkTGVuOworCQkJCQkJTmRpc01vdmVNZW1vcnkocEJzcy0+U3NpZC5Tc2lkLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Tc2lkLCBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Tc2lkTGVuKTsKKwkJCQkJfQorCQkJCQllbHNlCisgICAgICAgICAgICAgICAgICAgIAlwQnNzLT5Tc2lkLlNzaWRMZW5ndGggPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQnNzLT5Tc2lkLlNzaWRMZW5ndGggPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5Tc2lkTGVuOworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQnNzLT5Tc2lkLlNzaWQsIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWQsIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlNzaWRMZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwQnNzLT5Qcml2YWN5ID0gcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUHJpdmFjeTsKKyAgICAgICAgICAgICAgICBwQnNzLT5Sc3NpID0gcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uUnNzaSAtIHBBZGFwdGVyLT5CYnBSc3NpVG9EYm1EZWx0YTsKKyAgICAgICAgICAgICAgICBwQnNzLT5OZXR3b3JrVHlwZUluVXNlID0gTmV0d29ya1R5cGVJblVzZVNhbml0eSgmcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0pOworICAgICAgICAgICAgICAgIHBCc3MtPkNvbmZpZ3VyYXRpb24uTGVuZ3RoID0gc2l6ZW9mKE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04pOworICAgICAgICAgICAgICAgIHBCc3MtPkNvbmZpZ3VyYXRpb24uQmVhY29uUGVyaW9kID0gcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQmVhY29uUGVyaW9kOworICAgICAgICAgICAgICAgIHBCc3MtPkNvbmZpZ3VyYXRpb24uQVRJTVdpbmRvdyA9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkF0aW1XaW47CisKKyAgICAgICAgICAgICAgICBNQVBfQ0hBTk5FTF9JRF9UT19LSFoocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQ2hhbm5lbCwgcEJzcy0+Q29uZmlndXJhdGlvbi5EU0NvbmZpZyk7CisKKyAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uQnNzVHlwZSA9PSBCU1NfSU5GUkEpCisgICAgICAgICAgICAgICAgICAgIHBCc3MtPkluZnJhc3RydWN0dXJlTW9kZSA9IE5kaXM4MDJfMTFJbmZyYXN0cnVjdHVyZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBCc3MtPkluZnJhc3RydWN0dXJlTW9kZSA9IE5kaXM4MDJfMTFJQlNTOworCisgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEJzcy0+U3VwcG9ydGVkUmF0ZXMsIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlN1cFJhdGUsIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlN1cFJhdGVMZW4pOworICAgICAgICAgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBCc3MtPlN1cHBvcnRlZFJhdGVzICsgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uU3VwUmF0ZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5FeHRSYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLkV4dFJhdGVMZW4pOworCisgICAgICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlZhcklFTGVuID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwQnNzLT5JRUxlbmd0aCA9IHNpemVvZihORElTXzgwMl8xMV9GSVhFRF9JRXMpOworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQnNzLT5JRXMsICZwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5GaXhJRXMsIHNpemVvZihORElTXzgwMl8xMV9GSVhFRF9JRXMpKTsKKyAgICAgICAgICAgICAgICAgICAgcFB0ciA9IHBQdHIgKyBzaXplb2YoTkRJU19XTEFOX0JTU0lEX0VYKSAtIDEgKyBzaXplb2YoTkRJU184MDJfMTFfRklYRURfSUVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEJzcy0+SUVMZW5ndGggPSAoVUxPTkcpKHNpemVvZihORElTXzgwMl8xMV9GSVhFRF9JRXMpICsgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uVmFySUVMZW4pOworICAgICAgICAgICAgICAgICAgICBwUHRyID0gcFB0ciArIHNpemVvZihORElTX1dMQU5fQlNTSURfRVgpIC0gMSArIHNpemVvZihORElTXzgwMl8xMV9GSVhFRF9JRXMpOworICAgICAgICAgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShwQnNzLT5JRXMsICZwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5GaXhJRXMsIHNpemVvZihORElTXzgwMl8xMV9GSVhFRF9JRXMpKTsKKyAgICAgICAgICAgICAgICAgICAgTmRpc01vdmVNZW1vcnkocEJzcy0+SUVzICsgc2l6ZW9mKE5ESVNfODAyXzExX0ZJWEVEX0lFcyksIHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlZhcklFcywgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uVmFySUVMZW4pOworICAgICAgICAgICAgICAgICAgICBwUHRyICs9IHBBZGFwdGVyLT5TY2FuVGFiLkJzc0VudHJ5W2ldLlZhcklFTGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwQnNzLT5MZW5ndGggPSAoVUxPTkcpKHNpemVvZihORElTX1dMQU5fQlNTSURfRVgpIC0gMSArIHNpemVvZihORElTXzgwMl8xMV9GSVhFRF9JRXMpICsgcEFkYXB0ZXItPlNjYW5UYWIuQnNzRW50cnlbaV0uVmFySUVMZW4gKyBQYWRkaW5nKTsKKworI2lmIFdJUkVMRVNTX0VYVCA8IDE3CisgICAgICAgICAgICAgICAgaWYgKChCc3NMZW4gKyBwQnNzLT5MZW5ndGgpIDwgd3JxLT51LmRhdGEubGVuZ3RoKQorICAgICAgICAgICAgICAgIEJzc0xlbiArPSBwQnNzLT5MZW5ndGg7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcEJzc2lkTGlzdC0+TnVtYmVyT2ZJdGVtcyA9IGk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAgQnNzTGVuICs9IHBCc3MtPkxlbmd0aDsKKyNlbmRpZgorICAgICAgICAgICAgfQorCisjaWYgV0lSRUxFU1NfRVhUIDwgMTcKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IEJzc0xlbjsKKyNlbHNlCisgICAgICAgICAgICBpZiAoQnNzTGVuID4gd3JxLT51LmRhdGEubGVuZ3RoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGtmcmVlKHBCc3NpZExpc3QpOworICAgICAgICAgICAgICAgIHJldHVybiAtRTJCSUc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gQnNzTGVuOworI2VuZGlmCisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcEJzc2lkTGlzdCwgQnNzTGVuKTsKKyAgICAgICAgICAgIGtmcmVlKHBCc3NpZExpc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8zX0NVUlJFTlRfQUREUkVTUzoKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IE1BQ19BRERSX0xFTjsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEX0dFTl9NRURJQV9DT05ORUNUX1NUQVRVUzoKKyAgICAgICAgICAgIGlmIChwQWRhcHRlci0+SW5kaWNhdGVNZWRpYVN0YXRlID09IE5kaXNNZWRpYVN0YXRlQ29ubmVjdGVkKQorICAgICAgICAgICAgICAgIE1lZGlhU3RhdGUgPSBOZGlzTWVkaWFTdGF0ZUNvbm5lY3RlZDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBNZWRpYVN0YXRlID0gTmRpc01lZGlhU3RhdGVEaXNjb25uZWN0ZWQ7CisKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihORElTX01FRElBX1NUQVRFKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmTWVkaWFTdGF0ZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfQlNTSUQ6CisjaWZkZWYgUkFMSU5LX0FURQorCQkJaWYgKEFURV9PTihwQWRhcHRlcikpCisJCQl7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiVGhlIGRyaXZlciBpcyBpbiBBVEUgbW9kZSBub3dcbiIpKTsKKwkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19SRVNPVVJDRVM7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworICAgICAgICAgICAgaWYgKElORlJBX09OKHBBZGFwdGVyKSB8fCBBREhPQ19PTihwQWRhcHRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q29tbW9uQ2ZnLkJzc2lkLCBzaXplb2YoTkRJU184MDJfMTFfTUFDX0FERFJFU1MpKTsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX0JTU0lEKD1FTVBUWSlcbiIpKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRU5PVENPTk47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1NTSUQ6CisJCQlOZGlzWmVyb01lbW9yeSgmU3NpZCwgc2l6ZW9mKE5ESVNfODAyXzExX1NTSUQpKTsKKwkJCU5kaXNaZXJvTWVtb3J5KFNzaWQuU3NpZCwgTUFYX0xFTl9PRl9TU0lEKTsKKyAgICAgICAgICAgIFNzaWQuU3NpZExlbmd0aCA9IHBBZGFwdGVyLT5Db21tb25DZmcuU3NpZExlbjsKKwkJCW1lbWNweShTc2lkLlNzaWQsIHBBZGFwdGVyLT5Db21tb25DZmcuU3NpZCwJU3NpZC5Tc2lkTGVuZ3RoKTsKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihORElTXzgwMl8xMV9TU0lEKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmU3NpZCwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX1NTSUQgKExlbj0lZCwgc3NpZD0lcylcbiIsIFNzaWQuU3NpZExlbmd0aCxTc2lkLlNzaWQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUVVFUllfTElOS19TVEFUVVM6CisgICAgICAgICAgICBwTGlua1N0YXR1cyA9IChSVF84MDJfMTFfTElOS19TVEFUVVMgKikga21hbGxvYyhzaXplb2YoUlRfODAyXzExX0xJTktfU1RBVFVTKSwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYgKHBMaW5rU3RhdHVzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBMaW5rU3RhdHVzLT5DdXJyVHhSYXRlID0gUmF0ZUlkVG81MDBLYnBzW3BBZGFwdGVyLT5Db21tb25DZmcuVHhSYXRlXTsgICAvLyB1bml0IDogNTAwIGticHMKKyAgICAgICAgICAgICAgICBwTGlua1N0YXR1cy0+Q2hhbm5lbFF1YWxpdHkgPSBwQWRhcHRlci0+TWxtZS5DaGFubmVsUXVhbGl0eTsKKyAgICAgICAgICAgICAgICBwTGlua1N0YXR1cy0+UnhCeXRlQ291bnQgPSBwQWRhcHRlci0+UmFsaW5rQ291bnRlcnMuUmVjZWl2ZWRCeXRlQ291bnQ7CisgICAgICAgICAgICAgICAgcExpbmtTdGF0dXMtPlR4Qnl0ZUNvdW50ID0gcEFkYXB0ZXItPlJhbGlua0NvdW50ZXJzLlRyYW5zbWl0dGVkQnl0ZUNvdW50OworICAgICAgICAJCXBMaW5rU3RhdHVzLT5DZW50cmFsQ2hhbm5lbCA9IHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWw7CisgICAgICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFJUXzgwMl8xMV9MSU5LX1NUQVRVUyk7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBMaW5rU3RhdHVzLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIGtmcmVlKHBMaW5rU3RhdHVzKTsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9RVUVSWV9MSU5LX1NUQVRVU1xuIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX0xJTktfU1RBVFVTKGttYWxsb2MgZmFpbGVkKVxuIikpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX0NPTkZJR1VSQVRJT046CisgICAgICAgICAgICBwQ29uZmlndXJhdGlvbiA9IChORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OICopIGttYWxsb2Moc2l6ZW9mKE5ESVNfODAyXzExX0NPTkZJR1VSQVRJT04pLCBNRU1fQUxMT0NfRkxBRyk7CisgICAgICAgICAgICBpZiAocENvbmZpZ3VyYXRpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcENvbmZpZ3VyYXRpb24tPkxlbmd0aCA9IHNpemVvZihORElTXzgwMl8xMV9DT05GSUdVUkFUSU9OKTsKKyAgICAgICAgICAgICAgICBwQ29uZmlndXJhdGlvbi0+QmVhY29uUGVyaW9kID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5CZWFjb25QZXJpb2Q7CisgICAgICAgICAgICAgICAgcENvbmZpZ3VyYXRpb24tPkFUSU1XaW5kb3cgPSBwQWRhcHRlci0+U3RhQWN0aXZlLkF0aW1XaW47CisgICAgICAgICAgICAgICAgTUFQX0NIQU5ORUxfSURfVE9fS0haKHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCwgcENvbmZpZ3VyYXRpb24tPkRTQ29uZmlnKTsKKyAgICAgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoTkRJU184MDJfMTFfQ09ORklHVVJBVElPTik7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBDb25maWd1cmF0aW9uLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX0NPTkZJR1VSQVRJT04oQmVhY29uUGVyaW9kPSVsZCxBdGltVz0lbGQsQ2hhbm5lbD0lZCkgXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDb25maWd1cmF0aW9uLT5CZWFjb25QZXJpb2QsIHBDb25maWd1cmF0aW9uLT5BVElNV2luZG93LCBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKKwkJCQlrZnJlZShwQ29uZmlndXJhdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfQ09ORklHVVJBVElPTihrbWFsbG9jIGZhaWxlZClcbiIpKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisJCWNhc2UgUlRfT0lEXzgwMl8xMV9TTlJfMDoKKwkJCWlmICgocEFkYXB0ZXItPlN0YUNmZy5MYXN0U05SMCA+IDApKQorCQkJeworCQkJCXVsSW5mbyA9ICgoMHhlYgktIHBBZGFwdGVyLT5TdGFDZmcuTGFzdFNOUjApICogMykgLwkxNiA7CisJCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisJCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sCXdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfU05SXzAoMHg9JWx4KVxuIiwgdWxJbmZvKSk7CisJCQl9CisgICAgICAgICAgICBlbHNlCisJCQkgICAgU3RhdHVzID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQljYXNlIFJUX09JRF84MDJfMTFfU05SXzE6CisJCQlpZiAoKHBBZGFwdGVyLT5BbnRlbm5hLmZpZWxkLlJ4UGF0aAk+IDEpICYmCisgICAgICAgICAgICAgICAgKHBBZGFwdGVyLT5TdGFDZmcuTGFzdFNOUjEgPiAwKSkKKwkJCXsKKwkJCQl1bEluZm8gPSAoKDB4ZWIJLSBwQWRhcHRlci0+U3RhQ2ZnLkxhc3RTTlIxKSAqIDMpIC8JMTYgOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZih1bEluZm8pOworCQkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLAl3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgiUXVlcnk6OlJUX09JRF84MDJfMTFfU05SXzEoMHg9JWx4KVxuIix1bEluZm8pKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9TTlJfMShwQWRhcHRlci0+U3RhQ2ZnLkxhc3RTTlIxPSVkKVxuIixwQWRhcHRlci0+U3RhQ2ZnLkxhc3RTTlIxKSk7CisJCQlicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX1JTU0lfVFJJR0dFUjoKKyAgICAgICAgICAgIHVsSW5mbyA9IHBBZGFwdGVyLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTAgLSBwQWRhcHRlci0+QmJwUnNzaVRvRGJtRGVsdGE7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfUlNTSV9UUklHR0VSKD0lbGQpXG4iLCB1bEluZm8pKTsKKyAgICAgICAgICAgIGJyZWFrOworCQljYXNlIE9JRF84MDJfMTFfUlNTSToKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1JTU0k6CisJCQl1bEluZm8gPSBwQWRhcHRlci0+U3RhQ2ZnLlJzc2lTYW1wbGUuTGFzdFJzc2kwOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywJd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCWJyZWFrOworCQljYXNlIFJUX09JRF84MDJfMTFfUlNTSV8xOgorICAgICAgICAgICAgdWxJbmZvID0gcEFkYXB0ZXItPlN0YUNmZy5Sc3NpU2FtcGxlLkxhc3RSc3NpMTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZih1bEluZm8pOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sCXdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1JTU0lfMjoKKyAgICAgICAgICAgIHVsSW5mbyA9IHBBZGFwdGVyLT5TdGFDZmcuUnNzaVNhbXBsZS5MYXN0UnNzaTI7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLAl3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9TVEFUSVNUSUNTOgorICAgICAgICAgICAgcFN0YXRpc3RpY3MgPSAoTkRJU184MDJfMTFfU1RBVElTVElDUyAqKSBrbWFsbG9jKHNpemVvZihORElTXzgwMl8xMV9TVEFUSVNUSUNTKSwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYgKHBTdGF0aXN0aWNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX1NUQVRJU1RJQ1MgXG4iKSk7CisgICAgICAgICAgICAgICAgLy8gYWRkIHRoZSBtb3N0IHVwLXRvLWRhdGUgaC93IHJhdyBjb3VudGVycyBpbnRvIHNvZnR3YXJlIGNvdW50ZXJzCisJCQkgICAgTklDVXBkYXRlUmF3Q291bnRlcnMocEFkYXB0ZXIpOworCisgICAgICAgICAgICAgICAgLy8gU2FuaXR5IGNoZWNrIGZvciBjYWxjdWxhdGlvbiBvZiBzdWNlc3NmdWwgY291bnQKKyAgICAgICAgICAgICAgICBpZiAocEFkYXB0ZXItPldsYW5Db3VudGVycy5UcmFuc21pdHRlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQgPCBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLlJldHJ5Q291bnQuUXVhZFBhcnQpCisgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5SZXRyeUNvdW50LlF1YWRQYXJ0OworCisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPlRyYW5zbWl0dGVkRnJhZ21lbnRDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuVHJhbnNtaXR0ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0OworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5NdWx0aWNhc3RUcmFuc21pdHRlZEZyYW1lQ291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLk11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudC5RdWFkUGFydDsKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+RmFpbGVkQ291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLkZhaWxlZENvdW50LlF1YWRQYXJ0OworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5SZXRyeUNvdW50LlF1YWRQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5SZXRyeUNvdW50LlF1YWRQYXJ0OworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5NdWx0aXBsZVJldHJ5Q291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLk11bHRpcGxlUmV0cnlDb3VudC5RdWFkUGFydDsKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+UlRTU3VjY2Vzc0NvdW50LlF1YWRQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5SVFNTdWNjZXNzQ291bnQuUXVhZFBhcnQ7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPlJUU0ZhaWx1cmVDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuUlRTRmFpbHVyZUNvdW50LlF1YWRQYXJ0OworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5BQ0tGYWlsdXJlQ291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLkFDS0ZhaWx1cmVDb3VudC5RdWFkUGFydDsKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+RnJhbWVEdXBsaWNhdGVDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuRnJhbWVEdXBsaWNhdGVDb3VudC5RdWFkUGFydDsKKyAgICAgICAgICAgICAgICBwU3RhdGlzdGljcy0+UmVjZWl2ZWRGcmFnbWVudENvdW50LlF1YWRQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5SZWNlaXZlZEZyYWdtZW50Q291bnQuUXVhZFBhcnQ7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPk11bHRpY2FzdFJlY2VpdmVkRnJhbWVDb3VudC5RdWFkUGFydCA9IHBBZGFwdGVyLT5XbGFuQ291bnRlcnMuTXVsdGljYXN0UmVjZWl2ZWRGcmFtZUNvdW50LlF1YWRQYXJ0OworI2lmZGVmIERCRworICAgICAgICAgICAgICAgIHBTdGF0aXN0aWNzLT5GQ1NFcnJvckNvdW50ID0gcEFkYXB0ZXItPlJhbGlua0NvdW50ZXJzLlJlYWxGY3NFcnJDb3VudDsKKyNlbHNlCisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPkZDU0Vycm9yQ291bnQuUXVhZFBhcnQgPSBwQWRhcHRlci0+V2xhbkNvdW50ZXJzLkZDU0Vycm9yQ291bnQuUXVhZFBhcnQ7CisgICAgICAgICAgICAgICAgcFN0YXRpc3RpY3MtPkZyYW1lRHVwbGljYXRlQ291bnQudS5Mb3dQYXJ0ID0gcEFkYXB0ZXItPldsYW5Db3VudGVycy5GcmFtZUR1cGxpY2F0ZUNvdW50LnUuTG93UGFydCAvIDEwMDsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihORElTXzgwMl8xMV9TVEFUSVNUSUNTKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcFN0YXRpc3RpY3MsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAga2ZyZWUocFN0YXRpc3RpY3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX1NUQVRJU1RJQ1Moa21hbGxvYyBmYWlsZWQpXG4iKSk7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF9HRU5fUkNWX09LOgorICAgICAgICAgICAgdWxJbmZvID0gcEFkYXB0ZXItPkNvdW50ZXJzODAyMy5Hb29kUmVjZWl2ZXM7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEX0dFTl9SQ1ZfTk9fQlVGRkVSOgorICAgICAgICAgICAgdWxJbmZvID0gcEFkYXB0ZXItPkNvdW50ZXJzODAyMy5SeE5vQnVmZmVyOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUEhZX01PREU6CisgICAgICAgICAgICB1bEluZm8gPSAoVUxPTkcpcEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1BIWV9NT0RFICg9JWxkKVxuIiwgdWxJbmZvKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1NUQV9DT05GSUc6CisgICAgICAgICAgICBwU3RhQ29uZmlnID0gKFJUXzgwMl8xMV9TVEFfQ09ORklHICopIGttYWxsb2Moc2l6ZW9mKFJUXzgwMl8xMV9TVEFfQ09ORklHKSwgTUVNX0FMTE9DX0ZMQUcpOworICAgICAgICAgICAgaWYgKHBTdGFDb25maWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfU1RBX0NPTkZJR1xuIikpOworICAgICAgICAgICAgICAgIHBTdGFDb25maWctPkVuYWJsZVR4QnVyc3QgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJFbmFibGVUeEJ1cnN0OworICAgICAgICAgICAgICAgIHBTdGFDb25maWctPkVuYWJsZVR1cmJvUmF0ZSA9IDA7CisgICAgICAgICAgICAgICAgcFN0YUNvbmZpZy0+VXNlQkdQcm90ZWN0aW9uID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5Vc2VCR1Byb3RlY3Rpb247CisgICAgICAgICAgICAgICAgcFN0YUNvbmZpZy0+VXNlU2hvcnRTbG90VGltZSA9IHBBZGFwdGVyLT5Db21tb25DZmcuYlVzZVNob3J0U2xvdFRpbWU7CisgICAgICAgICAgICAgICAgLy9wU3RhQ29uZmlnLT5BZGhvY01vZGUgPSBwQWRhcHRlci0+U3RhQ2ZnLkFkaG9jTW9kZTsKKyAgICAgICAgICAgICAgICBwU3RhQ29uZmlnLT5Id1JhZGlvU3RhdHVzID0gKHBBZGFwdGVyLT5TdGFDZmcuYkh3UmFkaW8gPT0gVFJVRSkgPyAxIDogMDsKKyAgICAgICAgICAgICAgICBwU3RhQ29uZmlnLT5Sc3YxID0gMDsKKyAgICAgICAgICAgICAgICBwU3RhQ29uZmlnLT5TeXN0ZW1FcnJvckJpdG1hcCA9IHBBZGFwdGVyLT5TeXN0ZW1FcnJvckJpdG1hcDsKKyAgICAgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoUlRfODAyXzExX1NUQV9DT05GSUcpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwU3RhQ29uZmlnLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgICAgIGtmcmVlKHBTdGFDb25maWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1NUQV9DT05GSUcoa21hbGxvYyBmYWlsZWQpXG4iKSk7CisgICAgICAgICAgICAgICAgU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRDoKKyAgICAgICAgICAgIFJ0c1RocmVzaCA9IHBBZGFwdGVyLT5Db21tb25DZmcuUnRzVGhyZXNob2xkOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFJ0c1RocmVzaCk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJlJ0c1RocmVzaCwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX1JUU19USFJFU0hPTEQoPSVsZClcbiIsIFJ0c1RocmVzaCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRDoKKyAgICAgICAgICAgIEZyYWdUaHJlc2ggPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLkZyYWdtZW50VGhyZXNob2xkOworICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuYlVzZVplcm9Ub0Rpc2FibGVGcmFnbWVudCA9PSBUUlVFKQorICAgICAgICAgICAgICAgIEZyYWdUaHJlc2ggPSAwOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKEZyYWdUaHJlc2gpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZGcmFnVGhyZXNoLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfRlJBR01FTlRBVElPTl9USFJFU0hPTEQoPSVsZClcbiIsIEZyYWdUaHJlc2gpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfUE9XRVJfTU9ERToKKyAgICAgICAgICAgIFBvd2VyTW9kZSA9IHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZTsKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihQb3dlck1vZGUpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZQb3dlck1vZGUsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9QT1dFUl9NT0RFKD0lZClcbiIsIFBvd2VyTW9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9SQURJTzoKKyAgICAgICAgICAgIFJhZGlvU3RhdGUgPSAoQk9PTEVBTikgcEFkYXB0ZXItPlN0YUNmZy5iU3dSYWRpbzsKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihSYWRpb1N0YXRlKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmUmFkaW9TdGF0ZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX1JBRElPICg9JWQpXG4iLCBSYWRpb1N0YXRlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREU6CisgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQykKKyAgICAgICAgICAgICAgICBCc3NUeXBlID0gTmRpczgwMl8xMUlCU1M7CisgICAgICAgICAgICBlbHNlIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX0lORlJBKQorICAgICAgICAgICAgICAgIEJzc1R5cGUgPSBOZGlzODAyXzExSW5mcmFzdHJ1Y3R1cmU7CisgICAgICAgICAgICBlbHNlIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgPT0gQlNTX01PTklUT1IpCisgICAgICAgICAgICAgICAgQnNzVHlwZSA9IE5kaXM4MDJfMTFNb25pdG9yOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEJzc1R5cGUgPSBOZGlzODAyXzExQXV0b1Vua25vd247CisKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihCc3NUeXBlKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmQnNzVHlwZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX0lORlJBU1RSVUNUVVJFX01PREUoPSVkKVxuIiwgQnNzVHlwZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9QUkVBTUJMRToKKyAgICAgICAgICAgIFByZWFtVHlwZSA9IHBBZGFwdGVyLT5Db21tb25DZmcuVHhQcmVhbWJsZTsKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihQcmVhbVR5cGUpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZQcmVhbVR5cGUsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9QUkVBTUJMRSg9JWQpXG4iLCBQcmVhbVR5cGUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERToKKyAgICAgICAgICAgIEF1dGhNb2RlID0gcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZTsKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihBdXRoTW9kZSk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJkF1dGhNb2RlLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERSg9JWQpXG4iLCBBdXRoTW9kZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9XRVBfU1RBVFVTOgorICAgICAgICAgICAgV2VwU3RhdHVzID0gcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXM7CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoV2VwU3RhdHVzKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmV2VwU3RhdHVzLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfV0VQX1NUQVRVUyg9JWQpXG4iLCBXZXBTdGF0dXMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUw6CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUxPTkcpOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q29tbW9uQ2ZnLlR4UG93ZXIsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTCAleFxuIixwQWRhcHRlci0+Q29tbW9uQ2ZnLlR4UG93ZXIpKTsKKwkJCWJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfVFhfUE9XRVJfTEVWRUxfMToKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5Db21tb25DZmcuVHhQb3dlclBlcmNlbnRhZ2UsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTF8xICg9JWxkKVxuIiwgcEFkYXB0ZXItPkNvbW1vbkNmZy5UeFBvd2VyUGVyY2VudGFnZSkpOworCQkJYnJlYWs7CisgICAgICAgIGNhc2UgT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVTX1NVUFBPUlRFRDoKKwkJCWlmICgocEFkYXB0ZXItPlJmSWNUeXBlCT09IFJGSUNfMjg1MCkgfHwgKHBBZGFwdGVyLT5SZkljVHlwZSA9PQlSRklDXzI3NTApKQorCQkJeworCQkJCU5ldHdvcmtUeXBlTGlzdFswXSA9IDM7ICAgICAgICAgICAgICAgICAvLyBOdW1iZXJPZkl0ZW1zID0gMworCQkJCU5ldHdvcmtUeXBlTGlzdFsxXSA9IE5kaXM4MDJfMTFEUzsgICAgICAvLyBOZXR3b3JrVHlwZVsxXSA9IDExYgorCQkJCU5ldHdvcmtUeXBlTGlzdFsyXSA9IE5kaXM4MDJfMTFPRkRNMjQ7ICAvLyBOZXR3b3JrVHlwZVsyXSA9IDExZworCQkJCU5ldHdvcmtUeXBlTGlzdFszXSA9IE5kaXM4MDJfMTFPRkRNNTsgICAvLyBOZXR3b3JrVHlwZVszXSA9IDExYQorICAgICAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IDE2OworCQkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmTmV0d29ya1R5cGVMaXN0WzBdLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCU5ldHdvcmtUeXBlTGlzdFswXSA9IDI7ICAgICAgICAgICAgICAgICAvLyBOdW1iZXJPZkl0ZW1zID0gMgorCQkJCU5ldHdvcmtUeXBlTGlzdFsxXSA9IE5kaXM4MDJfMTFEUzsgICAgICAvLyBOZXR3b3JrVHlwZVsxXSA9IDExYgorCQkJCU5ldHdvcmtUeXBlTGlzdFsyXSA9IE5kaXM4MDJfMTFPRkRNMjQ7ICAvLyBOZXR3b3JrVHlwZVsyXSA9IDExZworCQkJICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IDEyOworCQkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmTmV0d29ya1R5cGVMaXN0WzBdLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJfQorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfTkVUV09SS19UWVBFU19TVVBQT1JURURcbiIpKTsKKwkJCQlicmVhazsKKwkgICAgY2FzZSBPSURfODAyXzExX05FVFdPUktfVFlQRV9JTl9VU0U6CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUxPTkcpOworCQkJaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBKQorCQkJCXVsSW5mbyA9IE5kaXM4MDJfMTFPRkRNNTsKKwkJCWVsc2UgaWYgKChwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExQkdfTUlYRUQpIHx8IChwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGUgPT0gUEhZXzExRykpCisJCQkJdWxJbmZvID0gTmRpczgwMl8xMU9GRE0yNDsKKwkJCWVsc2UKKwkJCQl1bEluZm8gPSBOZGlzODAyXzExRFM7CisgICAgICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCWJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUVVFUllfTEFTVF9SWF9SQVRFOgorICAgICAgICAgICAgdWxJbmZvID0gKFVMT05HKXBBZGFwdGVyLT5MYXN0UnhSYXRlOworICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX0xBU1RfUlhfUkFURSAoPSVsZClcbiIsIHVsSW5mbykpOworCQkJYnJlYWs7CisJCWNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9MQVNUX1RYX1JBVEU6CisJCQkvL3VsSW5mbyA9IChVTE9ORylwQWRhcHRlci0+TGFzdFR4UmF0ZTsKKwkJCXVsSW5mbyA9IChVTE9ORylwQWRhcHRlci0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLndvcmQ7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YodWxJbmZvKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdWxJbmZvLAl3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfTEFTVF9UWF9SQVRFICg9JWx4KVxuIiwgdWxJbmZvKSk7CisJCQlicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1FVRVJZX0VFUFJPTV9WRVJTSU9OOgorICAgICAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVMT05HKTsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkVlcHJvbVZlcnNpb24sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfODAyXzExX1FVRVJZX0ZJUk1XQVJFX1ZFUlNJT046CisgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUxPTkcpOworICAgICAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+RmlybXdhcmVWZXJzaW9uLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisJICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9OT0lTRV9MRVZFTDoKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVQ0hBUik7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5CYnBXcml0ZUxhdGNoWzY2XSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX05PSVNFX0xFVkVMICg9JWQpXG4iLCBwQWRhcHRlci0+QmJwV3JpdGVMYXRjaFs2Nl0pKTsKKwkJCWJyZWFrOworCSAgICBjYXNlIFJUX09JRF84MDJfMTFfRVhUUkFfSU5GTzoKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5FeHRyYUluZm8sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9FWFRSQV9JTkZPICg9JWxkKVxuIiwgcEFkYXB0ZXItPkV4dHJhSW5mbykpOworCSAgICAgICAgYnJlYWs7CisJICAgIGNhc2UgUlRfT0lEX1dFX1ZFUlNJT05fQ09NUElMRUQ6CisJICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUlOVCk7CisJICAgICAgICB3ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOworCSAgICAgICAgU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ3ZV92ZXJzaW9uX2NvbXBpbGVkLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCSAgICAgICAgYnJlYWs7CisJCWNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9BUFNEX1NFVFRJTkc6CisJCQlhcHNkID0gKHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RDYXBhYmxlIHwgKHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19CRSA8PCAxKSB8IChwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQUNfQksgPDwgMikKKwkJCQl8IChwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQUNfVkkgPDwgMykJfCAocEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX1ZPIDw8IDQpCXwgKHBBZGFwdGVyLT5Db21tb25DZmcuTWF4U1BMZW5ndGggPDwgNSkpOworCisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUxPTkcpOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZhcHNkLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfQVBTRF9TRVRUSU5HICg9MHglbHgsQVBTRENhcD0lZCxBQ19CRT0lZCxBQ19CSz0lZCxBQ19WST0lZCxBQ19WTz0lZCxNQVhTUExlbj0lZClcbiIsCisJCQkJYXBzZCxwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQ2FwYWJsZSxwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQUNfQkUscEFkYXB0ZXItPkNvbW1vbkNmZy5iQVBTREFDX0JLLHBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RBQ19WSSxwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNEQUNfVk8scEFkYXB0ZXItPkNvbW1vbkNmZy5NYXhTUExlbmd0aCkpOworCQkJYnJlYWs7CisJCWNhc2UgUlRfT0lEXzgwMl8xMV9RVUVSWV9BUFNEX1BTTToKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVTE9ORyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5Db21tb25DZmcuYkFQU0RGb3JjZVBvd2VyU2F2ZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX0FQU0RfUFNNICg9JWQpXG4iLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJBUFNERm9yY2VQb3dlclNhdmUpKTsKKwkJCWJyZWFrOworCQljYXNlIFJUX09JRF84MDJfMTFfUVVFUllfV01NOgorCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKEJPT0xFQU4pOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfUVVFUllfV01NICg9JWQpXG4iLAlwQWRhcHRlci0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlKSk7CisJCQlicmVhazsKKyNpZmRlZiBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUCisgICAgICAgIGNhc2UgUlRfT0lEX05FV19EUklWRVI6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVUNIQVIgZW5hYmxlZCA9IDE7CisgICAgCSAgICAgICAgd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVDSEFSKTsKKyAgICAJICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJmVuYWJsZWQsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF9ORVdfRFJJVkVSICg9JWQpXG4iLCBlbmFibGVkKSk7CisgICAgICAgICAgICB9CisJICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfV1BBX1NVUFBMSUNBTlRfU1VQUE9SVDoKKwkgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVQ0hBUik7CisJICAgICAgICBTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF9XUEFfU1VQUExJQ0FOVF9TVVBQT1JUICg9JWQpXG4iLCBwQWRhcHRlci0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCkpOworCSAgICAgICAgYnJlYWs7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworCisgICAgICAgIGNhc2UgUlRfT0lEX0RSSVZFUl9ERVZJQ0VfTkFNRToKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfRFJJVkVSX0RFVklDRV9OQU1FIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gMTY7CisJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBBZGFwdGVyLT5TdGFDZmcuZGV2X25hbWUsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisJCQl7CisJCQkJU3RhdHVzID0gLUVGQVVMVDsKKwkJCX0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUVVFUllfSFRfUEhZTU9ERToKKyAgICAgICAgICAgIHBIVFBoeU1vZGUgPSAoT0lEX1NFVF9IVF9QSFlNT0RFICopIGttYWxsb2Moc2l6ZW9mKE9JRF9TRVRfSFRfUEhZTU9ERSksIE1FTV9BTExPQ19GTEFHKTsKKyAgICAgICAgICAgIGlmIChwSFRQaHlNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBIVFBoeU1vZGUtPlBoeU1vZGUgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLlBoeU1vZGU7CisgICAgCQkJcEhUUGh5TW9kZS0+SHRNb2RlID0gKFVDSEFSKXBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTU9ERTsKKyAgICAJCQlwSFRQaHlNb2RlLT5CVyA9IChVQ0hBUilwQWRhcHRlci0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLkJXOworICAgIAkJCXBIVFBoeU1vZGUtPk1DUz0gKFVDSEFSKXBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuTUNTOworICAgIAkJCXBIVFBoeU1vZGUtPlNIT1JUR0k9IChVQ0hBUilwQWRhcHRlci0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLmZpZWxkLlNob3J0R0k7CisgICAgCQkJcEhUUGh5TW9kZS0+U1RCQz0gKFVDSEFSKXBBZGFwdGVyLT5NYWNUYWIuQ29udGVudFtCU1NJRF9XQ0lEXS5IVFBoeU1vZGUuZmllbGQuU1RCQzsKKworICAgIAkJCXBIVFBoeU1vZGUtPkV4dE9mZnNldCA9ICgocEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA8IHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCkgPyAoRVhUQ0hBX0JFTE9XKSA6IChFWFRDSEFfQUJPVkUpKTsKKyAgICAgICAgICAgICAgICB3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoT0lEX1NFVF9IVF9QSFlNT0RFKTsKKyAgICAgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBIVFBoeU1vZGUsIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgCQkJeworICAgIAkJCQlTdGF0dXMgPSAtRUZBVUxUOworICAgIAkJCX0KKyAgICAJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9RVUVSWV9IVF9QSFlNT0RFIChQaHlNb2RlID0gJWQsIE1DUyA9JWQsIEJXID0gJWQsIFNUQkMgPSAlZCwgRXh0T2Zmc2V0PSVkKVxuIiwKKyAgICAJCQkJcEhUUGh5TW9kZS0+SHRNb2RlLCBwSFRQaHlNb2RlLT5NQ1MsIHBIVFBoeU1vZGUtPkJXLCBwSFRQaHlNb2RlLT5TVEJDLCBwSFRQaHlNb2RlLT5FeHRPZmZzZXQpKTsKKyAgICAJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIgTWxtZVVwZGF0ZVR4UmF0ZXMgKC53b3JkID0gJXggKVxuIiwgcEFkYXB0ZXItPk1hY1RhYi5Db250ZW50W0JTU0lEX1dDSURdLkhUUGh5TW9kZS53b3JkKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfU1RBX0NPTkZJRyhrbWFsbG9jIGZhaWxlZClcbiIpKTsKKyAgICAgICAgICAgICAgICBTdGF0dXMgPSAtRUZBVUxUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUlRfT0lEXzgwMl8xMV9DT1VOVFJZX1JFR0lPTjoKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX0NPVU5UUllfUkVHSU9OIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisgICAgICAgICAgICB1bEluZm8gPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNvdW50cnlSZWdpb25Gb3JBQmFuZDsKKyAgICAgICAgICAgIHVsSW5mbyA9ICh1bEluZm8gPDwgOCl8KHBBZGFwdGVyLT5Db21tb25DZmcuQ291bnRyeVJlZ2lvbik7CisJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sIHdycS0+dS5kYXRhLmxlbmd0aCkpCisgICAgICAgICAgICB7CisJCQkJU3RhdHVzID0gLUVGQVVMVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJUX09JRF84MDJfMTFfUVVFUllfREFUX0hUX1BIWU1PREU6CisgICAgICAgICAgICBwSFRQaHlNb2RlID0gKE9JRF9TRVRfSFRfUEhZTU9ERSAqKSBrbWFsbG9jKHNpemVvZihPSURfU0VUX0hUX1BIWU1PREUpLCBNRU1fQUxMT0NfRkxBRyk7CisgICAgICAgICAgICBpZiAocEhUUGh5TW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwSFRQaHlNb2RlLT5QaHlNb2RlID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlOworICAgIAkJCXBIVFBoeU1vZGUtPkh0TW9kZSA9IChVQ0hBUilwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5IVE1PREU7CisgICAgCQkJcEhUUGh5TW9kZS0+QlcgPSAoVUNIQVIpcEFkYXB0ZXItPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlc7CisgICAgCQkJcEhUUGh5TW9kZS0+TUNTPSAoVUNIQVIpcEFkYXB0ZXItPlN0YUNmZy5EZXNpcmVkVHJhbnNtaXRTZXR0aW5nLmZpZWxkLk1DUzsKKyAgICAJCQlwSFRQaHlNb2RlLT5TSE9SVEdJPSAoVUNIQVIpcEFkYXB0ZXItPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU2hvcnRHSTsKKyAgICAJCQlwSFRQaHlNb2RlLT5TVEJDPSAoVUNIQVIpcEFkYXB0ZXItPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuU1RCQzsKKworICAgICAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihPSURfU0VUX0hUX1BIWU1PREUpOworICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgcEhUUGh5TW9kZSwgd3JxLT51LmRhdGEubGVuZ3RoKSkKKyAgICAJCQl7CisgICAgCQkJCVN0YXR1cyA9IC1FRkFVTFQ7CisgICAgCQkJfQorICAgIAkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX0hUX1BIWU1PREUgKFBoeU1vZGUgPSAlZCwgTUNTID0lZCwgQlcgPSAlZCwgU1RCQyA9ICVkLCBFeHRPZmZzZXQ9JWQpXG4iLAorICAgIAkJCQlwSFRQaHlNb2RlLT5IdE1vZGUsIHBIVFBoeU1vZGUtPk1DUywgcEhUUGh5TW9kZS0+QlcsIHBIVFBoeU1vZGUtPlNUQkMsIHBIVFBoeU1vZGUtPkV4dE9mZnNldCkpOworICAgIAkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiBNbG1lVXBkYXRlVHhSYXRlcyAoLndvcmQgPSAleCApXG4iLCBwQWRhcHRlci0+TWFjVGFiLkNvbnRlbnRbQlNTSURfV0NJRF0uSFRQaHlNb2RlLndvcmQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9TVEFfQ09ORklHKGttYWxsb2MgZmFpbGVkKVxuIikpOworICAgICAgICAgICAgICAgIFN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSVF9PSURfUVVFUllfTVVMVElQTEVfQ0FSRF9TVVBQT1JUOgorCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKFVDSEFSKTsKKyAgICAgICAgICAgIGkgPSAwOworI2lmZGVmIE1VTFRJUExFX0NBUkRfU1VQUE9SVAorICAgICAgICAgICAgaSA9IDE7CisjZW5kaWYgLy8gTVVMVElQTEVfQ0FSRF9TVVBQT1JUIC8vCisJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZpLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorICAgICAgICAgICAgeworCQkJCVN0YXR1cyA9IC1FRkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEX1FVRVJZX01VTFRJUExFX0NBUkRfU1VQUE9SVCg9JWQpIFxuIiwgaSkpOworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgU05NUF9TVVBQT1JUCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9NQUNfQUREUkVTUzoKKyAgICAgICAgICAgIHdycS0+dS5kYXRhLmxlbmd0aCA9IE1BQ19BRERSX0xFTjsKKyAgICAgICAgICAgIFN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkN1cnJlbnRBZGRyZXNzLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX01BTlVGQUNUVVJFUk9VSToKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX01BTlVGQUNUVVJFUk9VSSBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IE1hbnVmYWN0dXJlck9VSV9MRU47CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5DdXJyZW50QWRkcmVzcywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9NQU5VRkFDVFVSRVJOQU1FOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6OlJUX09JRF84MDJfMTFfTUFOVUZBQ1RVUkVSTkFNRSBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHN0cmxlbihNYW51ZmFjdHVyZXJOQU1FKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBNYW51ZmFjdHVyZXJOQU1FLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX1JFU09VUkNFVFlQRUlETkFNRToKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1JFU09VUkNFVFlQRUlETkFNRSBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHN0cmxlbihSZXNvdXJjZVR5cGVJZE5hbWUpOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIFJlc291cmNlVHlwZUlkTmFtZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUlRfT0lEXzgwMl8xMV9QUklWQUNZT1BUSU9OSU1QTEVNRU5URUQ6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9QUklWQUNZT1BUSU9OSU1QTEVNRU5URUQgXG4iKSk7CisJCQl1bEluZm8gPSAxOyAvLyAxIGlzIHN1cHBvcnQgd2VwIGVsc2UgMiBpcyBub3Qgc3VwcG9ydC4KKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZih1bEluZm8pOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZ1bEluZm8sIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKworCQljYXNlIFJUX09JRF84MDJfMTFfUE9XRVJNQU5BR0VNRU5UTU9ERToKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1BPV0VSTUFOQUdFTUVOVE1PREUgXG4iKSk7CisJCQlpZiAocEFkYXB0ZXItPlN0YUNmZy5Qc20gPT0gUFNNUF9BQ1RJT04pCisJCQkJdWxJbmZvID0gMTsgLy8gMSBpcyBwb3dlciBhY3RpdmUgZWxzZSAyIGlzIHBvd2VyIHNhdmUuCisJCQllbHNlCisJCQkJdWxJbmZvID0gMjsKKworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHVsSW5mbyk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnVsSW5mbywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9XRVBERUZBVUxUS0VZVkFMVUU6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9XRVBERUZBVUxUS0VZVkFMVUUgXG4iKSk7CisJCQkvL0tleUlkeFZhbHVlLktleUlkeCA9IHBBZC0+UG9ydENmZy5NQlNTSURbcEFkLT5Jb2N0bElGXS5EZWZhdWx0S2V5SWQ7CisJCQlwS2V5SWR4VmFsdWUgPSB3cnEtPnUuZGF0YS5wb2ludGVyOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsKCJLZXlJZHhWYWx1ZS5LZXlJZHggPSAlZCwgXG4iLHBLZXlJZHhWYWx1ZS0+S2V5SWR4KSk7CisJCQl2YWx1ZUxlbiA9IHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWRdLktleUxlbjsKKwkJCU5kaXNNb3ZlTWVtb3J5KHBLZXlJZHhWYWx1ZS0+VmFsdWUsCisJCQkJCQkgICAmcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5LAorCQkJCQkJICAgdmFsdWVMZW4pOworCQkJcEtleUlkeFZhbHVlLT5WYWx1ZVt2YWx1ZUxlbl09J1wwJzsKKworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc2l6ZW9mKERlZmF1bHRLZXlJZHhWYWx1ZSk7CisKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwS2V5SWR4VmFsdWUsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoIkRlZmF1bHRLZXlJZCA9ICVkLCB0b3RhbCBsZW4gPSAlZCwgc3RyIGxlbj0lZCwgS2V5VmFsdWU9ICUwMnggJTAyeCAlMDJ4ICUwMnggXG4iLCBwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZCwgd3JxLT51LmRhdGEubGVuZ3RoLCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdW3BBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkXS5LZXlMZW4sCisJCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzBdLktleVswXSwKKwkJCXBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMV0uS2V5WzBdLAorCQkJcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsyXS5LZXlbMF0sCisJCQlwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleVswXSkpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX1dFUERFRkFVTFRLRVlJRDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1dFUERFRkFVTFRLRVlJRCBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVQ0hBUik7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJnBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiRGVmYXVsdEtleUlkID0lZCBcbiIsIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkKSk7CisJCQlicmVhazsKKworCQljYXNlIFJUX09JRF84MDJfMTFfV0VQS0VZTUFQUElOR0xFTkdUSDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1dFUEtFWU1BUFBJTkdMRU5HVEggXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUNIQVIpOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsCisJCQkJCQkJCQkmcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVtwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRLZXlJZF0uS2V5TGVuLAorCQkJCQkJCQkJd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0lEXzgwMl8xMV9TSE9SVFJFVFJZTElNSVQ6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9TSE9SVFJFVFJZTElNSVQgXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUxPTkcpOworCQkJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsICZ0eF9ydHlfY2ZnLndvcmQpOworCQkJU2hvcnRSZXRyeUxpbWl0ID0gdHhfcnR5X2NmZy5maWVsZC5TaG9ydFJ0eUxpbWl0OworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2hvcnRSZXRyeUxpbWl0ID0lbGQsICB0eF9ydHlfY2ZnLmZpZWxkLlNob3J0UmV0cnlMaW1pdD0lZFxuIiwgU2hvcnRSZXRyeUxpbWl0LCB0eF9ydHlfY2ZnLmZpZWxkLlNob3J0UnR5TGltaXQpKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmU2hvcnRSZXRyeUxpbWl0LCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPSURfODAyXzExX0xPTkdSRVRSWUxJTUlUOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfTE9OR1JFVFJZTElNSVQgXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUxPTkcpOworCQkJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIFRYX1JUWV9DRkcsICZ0eF9ydHlfY2ZnLndvcmQpOworCQkJTG9uZ1JldHJ5TGltaXQgPSB0eF9ydHlfY2ZnLmZpZWxkLkxvbmdSdHlMaW1pdDsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIkxvbmdSZXRyeUxpbWl0ID0lbGQsICB0eF9ydHlfY2ZnLmZpZWxkLkxvbmdSdHlMaW1pdD0lZFxuIiwgTG9uZ1JldHJ5TGltaXQsIHR4X3J0eV9jZmcuZmllbGQuTG9uZ1J0eUxpbWl0KSk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgJkxvbmdSZXRyeUxpbWl0LCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX1BST0RVQ1RJRDoKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1BST0RVQ1RJRCBcbiIpKTsKKworI2lmZGVmIFJUMjg3MAorCQkJc3ByaW50Zih0bXAsICIlMDR4ICUwNHhcbiIsICgoUE9TX0NPT0tJRSlwQWRhcHRlci0+T1NfQ29va2llKS0+cFVzYl9EZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IgLCgoUE9TX0NPT0tJRSlwQWRhcHRlci0+T1NfQ29va2llKS0+cFVzYl9EZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKworI2VuZGlmIC8vIFJUMjg3MCAvLworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKHRtcCk7CisJCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgdG1wLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSVF9PSURfODAyXzExX01BTlVGQUNUVVJFSUQ6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9NQU5VRkFDVFVSRUlEIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKE1hbnVmYWN0dXJlck5BTUUpOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIE1hbnVmYWN0dXJlck5BTUUsIHdycS0+dS5kYXRhLmxlbmd0aCk7CisJCQlicmVhazsKKworCQljYXNlIE9JRF84MDJfMTFfQ1VSUkVOVENIQU5ORUw6CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9DVVJSRU5UQ0hBTk5FTCBcbiIpKTsKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihVQ0hBUik7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJzaXplb2YgVUNIQVI9JWQsIGNoYW5uZWw9JWQgXG4iLCBzaXplb2YoVUNIQVIpLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwpKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3RhdHVzPSVkXG4iLCBTdGF0dXMpKTsKKwkJCWJyZWFrOworI2VuZGlmIC8vU05NUF9TVVBQT1JUCisKKwkJY2FzZSBPSURfODAyXzExX0JVSUxEX0NIQU5ORUxfRVg6CisJCQl7CisJCQkJVUNIQVIgdmFsdWU7CisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfQlVJTERfQ0hBTk5FTF9FWCBcbiIpKTsKKwkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSBzaXplb2YoVUNIQVIpOworI2lmZGVmIEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTdXBwb3J0IEVYVF9CVUlMRF9DSEFOTkVMX0xJU1QuXG4iKSk7CisJCQkJdmFsdWUgPSAxOworI2Vsc2UKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJEb2Vzbid0IHN1cHBvcnQgRVhUX0JVSUxEX0NIQU5ORUxfTElTVC5cbiIpKTsKKwkJCQl2YWx1ZSA9IDA7CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworCQkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmdmFsdWUsIDEpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlN0YXR1cz0lZFxuIiwgU3RhdHVzKSk7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9JRF84MDJfMTFfR0VUX0NIX0xJU1Q6CisJCQl7CisJCQkJUFJUX0NIQU5ORUxfTElTVF9JTkZPIHBDaExpc3RCdWY7CisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6T0lEXzgwMl8xMV9HRVRfQ0hfTElTVCBcbiIpKTsKKwkJCQlpZiAocEFkYXB0ZXItPkNoYW5uZWxMaXN0TnVtID09IDApCisJCQkJeworCQkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlwQ2hMaXN0QnVmID0gKFJUX0NIQU5ORUxfTElTVF9JTkZPICopIGttYWxsb2Moc2l6ZW9mKFJUX0NIQU5ORUxfTElTVF9JTkZPKSwgTUVNX0FMTE9DX0ZMQUcpOworCQkJCWlmIChwQ2hMaXN0QnVmID09IE5VTEwpCisJCQkJeworCQkJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlwQ2hMaXN0QnVmLT5DaGFubmVsTGlzdE51bSA9IHBBZGFwdGVyLT5DaGFubmVsTGlzdE51bTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgcENoTGlzdEJ1Zi0+Q2hhbm5lbExpc3ROdW07IGkrKykKKwkJCQkJcENoTGlzdEJ1Zi0+Q2hhbm5lbExpc3RbaV0gPSBwQWRhcHRlci0+Q2hhbm5lbExpc3RbaV0uQ2hhbm5lbDsKKworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihSVF9DSEFOTkVMX0xJU1RfSU5GTyk7CisJCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHBDaExpc3RCdWYsIHNpemVvZihSVF9DSEFOTkVMX0xJU1RfSU5GTykpOworCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlN0YXR1cz0lZFxuIiwgU3RhdHVzKSk7CisKKwkJCQlpZiAocENoTGlzdEJ1ZikKKwkJCQkJa2ZyZWUocENoTGlzdEJ1Zik7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIE9JRF84MDJfMTFfR0VUX0NPVU5UUllfQ09ERToKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpPSURfODAyXzExX0dFVF9DT1VOVFJZX0NPREUgXG4iKSk7CisJCQl3cnEtPnUuZGF0YS5sZW5ndGggPSAyOworCQkJU3RhdHVzID0gY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsICZwQWRhcHRlci0+Q29tbW9uQ2ZnLkNvdW50cnlDb2RlLCAyKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlN0YXR1cz0lZFxuIiwgU3RhdHVzKSk7CisJCQlicmVhazsKKworCQljYXNlIE9JRF84MDJfMTFfR0VUX0NIQU5ORUxfR0VPR1JBUEhZOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiUXVlcnk6Ok9JRF84MDJfMTFfR0VUX0NIQU5ORUxfR0VPR1JBUEhZIFxuIikpOworCQkJd3JxLT51LmRhdGEubGVuZ3RoID0gMTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkNvbW1vbkNmZy5HZW9ncmFwaHksIDEpOworCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU3RhdHVzPSVkXG4iLCBTdGF0dXMpKTsKKwkJCWJyZWFrOworCisKKyNpZmRlZiBRT1NfRExTX1NVUFBPUlQKKwkJY2FzZSBSVF9PSURfODAyXzExX1FVRVJZX0RMUzoKKwkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihCT09MRUFOKTsKKwkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCAmcEFkYXB0ZXItPkNvbW1vbkNmZy5iRExTQ2FwYWJsZSwgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlF1ZXJ5OjpSVF9PSURfODAyXzExX1FVRVJZX0RMUyg9JWQpXG4iLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLmJETFNDYXBhYmxlKSk7CisJCQlicmVhazsKKworCQljYXNlIFJUX09JRF84MDJfMTFfUVVFUllfRExTX1BBUkFNOgorCQkJeworCQkJCVBSVF84MDJfMTFfRExTX0lORk8JcERsc0luZm8gPSBrbWFsbG9jKHNpemVvZihSVF84MDJfMTFfRExTX0lORk8pLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAocERsc0luZm8gPT0gTlVMTCkKKwkJCQkJYnJlYWs7CisKKwkJCQlmb3IgKGk9MDsgaTxNQVhfTlVNX09GX0RMU19FTlRSWTsgaSsrKQorCQkJCXsKKwkJCQkJUlRNUE1vdmVNZW1vcnkoJnBEbHNJbmZvLT5FbnRyeVtpXSwgJnBBZGFwdGVyLT5TdGFDZmcuRExTRW50cnlbaV0sIHNpemVvZihSVF84MDJfMTFfRExTX1VJKSk7CisJCQkJfQorCisJCQkJcERsc0luZm8tPm51bSA9IE1BWF9OVU1fT0ZfRExTX0VOVFJZOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihSVF84MDJfMTFfRExTX0lORk8pOworCQkJCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBwRGxzSW5mbywgd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6UlRfT0lEXzgwMl8xMV9RVUVSWV9ETFNfUEFSQU1cbiIpKTsKKworCQkJCWlmIChwRGxzSW5mbykKKwkJCQkJa2ZyZWUocERsc0luZm8pOworCQkJfQorCQkJYnJlYWs7CisjZW5kaWYgLy8gUU9TX0RMU19TVVBQT1JUIC8vCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJRdWVyeTo6dW5rbm93biBJT0NUTCdzIHN1YmNtZCA9IDB4JTA4eFxuIiwgY21kKSk7CisgICAgICAgICAgICBTdGF0dXMgPSAtRU9QTk9UU1VQUDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gU3RhdHVzOworfQorCitJTlQgcnQyOHh4X3N0YV9pb2N0bCgKKwlJTglzdHJ1Y3QgbmV0X2RldmljZQkqbmV0X2RldiwKKwlJTglPVVQJc3RydWN0IGlmcmVxCSpycSwKKwlJTglJTlQJCQkJCWNtZCkKK3sKKwlQT1NfQ09PS0lFCQkJcE9iajsKKwlWSVJUVUFMX0FEQVBURVIJCSpwVmlydHVhbEFkID0gTlVMTDsKKwlSVE1QX0FEQVBURVIgICAgICAgICpwQWQgPSBOVUxMOworCXN0cnVjdCBpd3JlcSAgICAgICAgKndycSA9IChzdHJ1Y3QgaXdyZXEgKikgcnE7CisJQk9PTEVBTgkJCQlTdGF0ZU1hY2hpbmVUb3VjaGVkID0gRkFMU0U7CisJSU5UCQkJCQlTdGF0dXMgPSBORElTX1NUQVRVU19TVUNDRVNTOworCVVTSE9SVAkJCQlzdWJjbWQ7CisKKwlpZiAobmV0X2Rldi0+cHJpdl9mbGFncyA9PSBJTlRfTUFJTikKKwl7CisJCXBBZCA9IG5ldF9kZXYtPm1sX3ByaXY7CisJfQorCWVsc2UKKwl7CisJCXBWaXJ0dWFsQWQgPSBuZXRfZGV2LT5tbF9wcml2OworCQlwQWQgPSBwVmlydHVhbEFkLT5SdG1wRGV2LT5tbF9wcml2OworCX0KKwlwT2JqID0gKFBPU19DT09LSUUpIHBBZC0+T1NfQ29va2llOworCisJaWYgKHBBZCA9PSBOVUxMKQorCXsKKwkJLyogaWYgMXN0IG9wZW4gZmFpbCwgcEFkIHdpbGwgYmUgZnJlZTsKKwkJICAgU28gdGhlIG5ldF9kZXYtPm1sX3ByaXYgd2lsbCBiZSBOVUxMIGluIDJyZCBvcGVuICovCisJCXJldHVybiAtRU5FVERPV047CisJfQorCisgICAgLy9jaGVjayBpZiB0aGUgaW50ZXJmYWNlIGlzIGRvd24KKyAgICBpZighUlRNUF9URVNUX0ZMQUcocEFkLCBmUlRNUF9BREFQVEVSX0lOVEVSUlVQVF9JTl9VU0UpKQorICAgIHsKKyNpZmRlZiBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVAorCSAgICBpZiAod3JxLT51LmRhdGEucG9pbnRlciA9PSBOVUxMKQorCSAgICB7CisJCSAgICByZXR1cm4gU3RhdHVzOworCSAgICB9CisKKwkgICAgaWYgKHN0cnN0cih3cnEtPnUuZGF0YS5wb2ludGVyLCAiT3BNb2RlIikgPT0gTlVMTCkKKyNlbmRpZiAvLyBDT05GSUdfQVBTVEFfTUlYRURfU1VQUE9SVCAvLworICAgICAgICB7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJTkZPOjpOZXR3b3JrIGlzIGRvd24hXG4iKSk7CisJCSAgICByZXR1cm4gLUVORVRET1dOOworICAgICAgICB9CisgICAgfQorCisJewkvLyBkZXRlcm1pbmUgdGhpcyBpb2N0bCBjb21tYW5kIGlzIGNvbW1pbmcgZnJvbSB3aGljaCBpbnRlcmZhY2UuCisJCXBPYmotPmlvY3RsX2lmX3R5cGUgPSBJTlRfTUFJTjsKKwkJcE9iai0+aW9jdGxfaWYgPSBNQUlOX01CU1NJRDsKKwl9CisKKwlzd2l0Y2goY21kKQorCXsKKyNpZmRlZiBSQUxJTktfQVRFCisjaWZkZWYgUkFMSU5LXzI4eHhfUUEKKwkJY2FzZSBSVFBSSVZfSU9DVExfQVRFOgorCQkJeworCQkJCVJ0bXBEb0F0ZShwQWQsIHdycSk7CisJCQl9CisJCQlicmVhazsKKyNlbmRpZiAvLyBSQUxJTktfMjh4eF9RQSAvLworI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKyAgICAgICAgY2FzZSBTSU9DR0lGSFdBRERSOgorCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiSU9DVEw6OlNJT0NHSUZIV0FERFJcbiIpKTsKKwkJCW1lbWNweSh3cnEtPnUubmFtZSwgcEFkLT5DdXJyZW50QWRkcmVzcywgRVRIX0FMRU4pOworCQkJYnJlYWs7CisJCWNhc2UgU0lPQ0dJV05BTUU6CisgICAgICAgIHsKKyAgICAgICAgCWNoYXIgKm5hbWU9JndycS0+dS5uYW1lWzBdOworICAgICAgICAJcnRfaW9jdGxfZ2l3bmFtZShuZXRfZGV2LCBOVUxMLCBuYW1lLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ0dJV0VTU0lEOiAgLy9HZXQgRVNTSUQKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X3BvaW50ICplc3NpZD0md3JxLT51LmVzc2lkOworICAgICAgICAJcnRfaW9jdGxfZ2l3ZXNzaWQobmV0X2RldiwgTlVMTCwgZXNzaWQsIGVzc2lkLT5wb2ludGVyKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ1NJV0VTU0lEOiAgLy9TZXQgRVNTSUQKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X3BvaW50CSplc3NpZD0md3JxLT51LmVzc2lkOworICAgICAgICAJcnRfaW9jdGxfc2l3ZXNzaWQobmV0X2RldiwgTlVMTCwgZXNzaWQsIGVzc2lkLT5wb2ludGVyKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ1NJV05XSUQ6ICAgLy8gc2V0IG5ldHdvcmsgaWQgKHRoZSBjZWxsKQorCQljYXNlIFNJT0NHSVdOV0lEOiAgIC8vIGdldCBuZXR3b3JrIGlkCisJCQlTdGF0dXMgPSAtRU9QTk9UU1VQUDsKKwkJCWJyZWFrOworCQljYXNlIFNJT0NTSVdGUkVROiAgIC8vc2V0IGNoYW5uZWwvZnJlcXVlbmN5IChIeikKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X2ZyZXEgKmZyZXE9JndycS0+dS5mcmVxOworICAgICAgICAJcnRfaW9jdGxfc2l3ZnJlcShuZXRfZGV2LCBOVUxMLCBmcmVxLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ0dJV0ZSRVE6ICAgLy8gZ2V0IGNoYW5uZWwvZnJlcXVlbmN5IChIeikKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X2ZyZXEgKmZyZXE9JndycS0+dS5mcmVxOworICAgICAgICAJcnRfaW9jdGxfZ2l3ZnJlcShuZXRfZGV2LCBOVUxMLCBmcmVxLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ1NJV05JQ0tOOiAvL3NldCBub2RlIG5hbWUvbmlja25hbWUKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X3BvaW50ICpkYXRhPSZ3cnEtPnUuZGF0YTsKKyAgICAgICAgCXJ0X2lvY3RsX3Npd25pY2tuKG5ldF9kZXYsIE5VTEwsIGRhdGEsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBTSU9DR0lXTklDS046IC8vZ2V0IG5vZGUgbmFtZS9uaWNrbmFtZQorICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGE9JndycS0+dS5kYXRhOworICAgICAgICAJcnRfaW9jdGxfZ2l3bmlja24obmV0X2RldiwgTlVMTCwgZGF0YSwgTlVMTCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIFNJT0NHSVdSQVRFOiAgIC8vZ2V0IGRlZmF1bHQgYml0IHJhdGUgKGJwcykKKwkJICAgIHJ0X2lvY3RsX2dpd3JhdGUobmV0X2RldiwgTlVMTCwgJndycS0+dSwgTlVMTCk7CisgICAgICAgICAgICBicmVhazsKKwkgICAgY2FzZSBTSU9DU0lXUkFURTogIC8vc2V0IGRlZmF1bHQgYml0IHJhdGUgKGJwcykKKwkgICAgICAgIHJ0X2lvY3RsX3Npd3JhdGUobmV0X2RldiwgTlVMTCwgJndycS0+dSwgTlVMTCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSU9DR0lXUlRTOiAgLy8gZ2V0IFJUUy9DVFMgdGhyZXNob2xkIChieXRlcykKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X3BhcmFtICpydHM9JndycS0+dS5ydHM7CisgICAgICAgIAlydF9pb2N0bF9naXdydHMobmV0X2RldiwgTlVMTCwgcnRzLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisgICAgICAgIGNhc2UgU0lPQ1NJV1JUUzogIC8vc2V0IFJUUy9DVFMgdGhyZXNob2xkIChieXRlcykKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X3BhcmFtICpydHM9JndycS0+dS5ydHM7CisgICAgICAgIAlydF9pb2N0bF9zaXdydHMobmV0X2RldiwgTlVMTCwgcnRzLCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisgICAgICAgIGNhc2UgU0lPQ0dJV0ZSQUc6ICAvL2dldCBmcmFnbWVudGF0aW9uIHRociAoYnl0ZXMpCisgICAgICAgIHsKKyAgICAgICAgCXN0cnVjdCBpd19wYXJhbSAqZnJhZz0md3JxLT51LmZyYWc7CisgICAgICAgIAlydF9pb2N0bF9naXdmcmFnKG5ldF9kZXYsIE5VTEwsIGZyYWcsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKyAgICAgICAgY2FzZSBTSU9DU0lXRlJBRzogIC8vc2V0IGZyYWdtZW50YXRpb24gdGhyIChieXRlcykKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X3BhcmFtICpmcmFnPSZ3cnEtPnUuZnJhZzsKKyAgICAgICAgCXJ0X2lvY3RsX3Npd2ZyYWcobmV0X2RldiwgTlVMTCwgZnJhZywgTlVMTCk7CisJCQlicmVhazsKKwkJfQorICAgICAgICBjYXNlIFNJT0NHSVdFTkNPREU6ICAvL2dldCBlbmNvZGluZyB0b2tlbiAmIG1vZGUKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IGl3X3BvaW50ICplcnE9JndycS0+dS5lbmNvZGluZzsKKyAgICAgICAgCWlmKGVycS0+cG9pbnRlcikKKyAgICAgICAgCQlydF9pb2N0bF9naXdlbmNvZGUobmV0X2RldiwgTlVMTCwgZXJxLCBlcnEtPnBvaW50ZXIpOworCQkJYnJlYWs7CisJCX0KKyAgICAgICAgY2FzZSBTSU9DU0lXRU5DT0RFOiAgLy9zZXQgZW5jb2RpbmcgdG9rZW4gJiBtb2RlCisgICAgICAgIHsKKyAgICAgICAgCXN0cnVjdCBpd19wb2ludCAqZXJxPSZ3cnEtPnUuZW5jb2Rpbmc7CisgICAgICAgIAlpZihlcnEtPnBvaW50ZXIpCisgICAgICAgIAkJcnRfaW9jdGxfc2l3ZW5jb2RlKG5ldF9kZXYsIE5VTEwsIGVycSwgZXJxLT5wb2ludGVyKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0lPQ0dJV0FQOiAgICAgLy9nZXQgYWNjZXNzIHBvaW50IE1BQyBhZGRyZXNzZXMKKyAgICAgICAgeworICAgICAgICAJc3RydWN0IHNvY2thZGRyICphcF9hZGRyPSZ3cnEtPnUuYXBfYWRkcjsKKyAgICAgICAgCXJ0X2lvY3RsX2dpd2FwKG5ldF9kZXYsIE5VTEwsIGFwX2FkZHIsIGFwX2FkZHItPnNhX2RhdGEpOworCQkJYnJlYWs7CisJCX0KKwkgICAgY2FzZSBTSU9DU0lXQVA6ICAvL3NldCBhY2Nlc3MgcG9pbnQgTUFDIGFkZHJlc3NlcworICAgICAgICB7CisgICAgICAgIAlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHI9JndycS0+dS5hcF9hZGRyOworICAgICAgICAJcnRfaW9jdGxfc2l3YXAobmV0X2RldiwgTlVMTCwgYXBfYWRkciwgYXBfYWRkci0+c2FfZGF0YSk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIFNJT0NHSVdNT0RFOiAgIC8vZ2V0IG9wZXJhdGlvbiBtb2RlCisgICAgICAgIHsKKyAgICAgICAgCV9fdTMyICptb2RlPSZ3cnEtPnUubW9kZTsKKyAgICAgICAgCXJ0X2lvY3RsX2dpd21vZGUobmV0X2RldiwgTlVMTCwgbW9kZSwgTlVMTCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIFNJT0NTSVdNT0RFOiAgIC8vc2V0IG9wZXJhdGlvbiBtb2RlCisgICAgICAgIHsKKyAgICAgICAgCV9fdTMyICptb2RlPSZ3cnEtPnUubW9kZTsKKyAgICAgICAgCXJ0X2lvY3RsX3Npd21vZGUobmV0X2RldiwgTlVMTCwgbW9kZSwgTlVMTCk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIFNJT0NHSVdTRU5TOiAgIC8vZ2V0IHNlbnNpdGl2aXR5IChkQm0pCisJCWNhc2UgU0lPQ1NJV1NFTlM6CS8vc2V0IHNlbnNpdGl2aXR5IChkQm0pCisJCWNhc2UgU0lPQ0dJV1BPV0VSOiAgLy9nZXQgUG93ZXIgTWFuYWdlbWVudCBzZXR0aW5ncworCQljYXNlIFNJT0NTSVdQT1dFUjogIC8vc2V0IFBvd2VyIE1hbmFnZW1lbnQgc2V0dGluZ3MKKwkJY2FzZSBTSU9DR0lXVFhQT1c6ICAvL2dldCB0cmFuc21pdCBwb3dlciAoZEJtKQorCQljYXNlIFNJT0NTSVdUWFBPVzogIC8vc2V0IHRyYW5zbWl0IHBvd2VyIChkQm0pCisJCWNhc2UgU0lPQ0dJV1JBTkdFOgkvL0dldCByYW5nZSBvZiBwYXJhbWV0ZXJzCisJCWNhc2UgU0lPQ0dJV1JFVFJZOgkvL2dldCByZXRyeSBsaW1pdHMgYW5kIGxpZmV0aW1lCisJCWNhc2UgU0lPQ1NJV1JFVFJZOgkvL3NldCByZXRyeSBsaW1pdHMgYW5kIGxpZmV0aW1lCisJCQlTdGF0dXMgPSAtRU9QTk9UU1VQUDsKKwkJCWJyZWFrOworCQljYXNlIFJUX1BSSVZfSU9DVEw6CisgICAgICAgIGNhc2UgUlRfUFJJVl9JT0NUTF9FWFQ6CisJCQlzdWJjbWQgPSB3cnEtPnUuZGF0YS5mbGFnczsKKwkJCWlmKCBzdWJjbWQgJiBPSURfR0VUX1NFVF9UT0dHTEUpCisJCQkJU3RhdHVzID0gUlRNUFNldEluZm9ybWF0aW9uKHBBZCwgcnEsIHN1YmNtZCk7CisJCQllbHNlCisJCQkJU3RhdHVzID0gUlRNUFF1ZXJ5SW5mb3JtYXRpb24ocEFkLCBycSwgc3ViY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNJT0NHSVdQUklWOgorCQkJaWYgKHdycS0+dS5kYXRhLnBvaW50ZXIpCisJCQl7CisJCQkJaWYgKCBhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB3cnEtPnUuZGF0YS5wb2ludGVyLCBzaXplb2YocHJpdnRhYikpICE9IFRSVUUpCisJCQkJCWJyZWFrOworCQkJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHNpemVvZihwcml2dGFiKSAvIHNpemVvZihwcml2dGFiWzBdKTsKKwkJCQlpZiAoY29weV90b191c2VyKHdycS0+dS5kYXRhLnBvaW50ZXIsIHByaXZ0YWIsIHNpemVvZihwcml2dGFiKSkpCisJCQkJCVN0YXR1cyA9IC1FRkFVTFQ7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBSVFBSSVZfSU9DVExfU0VUOgorCQkJaWYoYWNjZXNzX29rKFZFUklGWV9SRUFELCB3cnEtPnUuZGF0YS5wb2ludGVyLCB3cnEtPnUuZGF0YS5sZW5ndGgpICE9IFRSVUUpCisJCQkJYnJlYWs7CisJCQlydF9pb2N0bF9zZXRwYXJhbShuZXRfZGV2LCBOVUxMLCBOVUxMLCB3cnEtPnUuZGF0YS5wb2ludGVyKTsKKwkJCWJyZWFrOworCQljYXNlIFJUUFJJVl9JT0NUTF9HU0lURVNVUlZFWToKKwkJCVJUTVBJb2N0bEdldFNpdGVTdXJ2ZXkocEFkLCB3cnEpOworCQkgICAgYnJlYWs7CisjaWZkZWYgREJHCisJCWNhc2UgUlRQUklWX0lPQ1RMX01BQzoKKwkJCVJUTVBJb2N0bE1BQyhwQWQsIHdycSk7CisJCQlicmVhazsKKwkJY2FzZSBSVFBSSVZfSU9DVExfRTJQOgorCQkJUlRNUElvY3RsRTJQUk9NKHBBZCwgd3JxKTsKKwkJCWJyZWFrOworI2lmZGVmIFJUMzB4eAorCQljYXNlIFJUUFJJVl9JT0NUTF9SRjoKKwkJCVJUTVBJb2N0bFJGKHBBZCwgd3JxKTsKKwkJCWJyZWFrOworI2VuZGlmIC8vIFJUMzB4eCAvLworI2VuZGlmIC8vIERCRyAvLworICAgICAgICBjYXNlIFNJT0NFVEhUT09MOgorICAgICAgICAgICAgICAgIGJyZWFrOworCQlkZWZhdWx0OgorCQkJREJHUFJJTlQoUlRfREVCVUdfRVJST1IsICgiSU9DVEw6OnVua25vd24gSU9DVEwncyBjbWQgPSAweCUwOHhcbiIsIGNtZCkpOworCQkJU3RhdHVzID0gLUVPUE5PVFNVUFA7CisJCQlicmVhazsKKwl9CisKKyAgICBpZihTdGF0ZU1hY2hpbmVUb3VjaGVkKSAvLyBVcHBlciBsYXllciBzZW50IGEgTUxNRS1yZWxhdGVkIG9wZXJhdGlvbnMKKyAgICAJUlQyOFhYX01MTUVfSEFORExFUihwQWQpOworCisJcmV0dXJuIFN0YXR1czsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgU1NJRAorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9TU0lEX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBORElTXzgwMl8xMV9TU0lEICAgICAgICAgICAgICAgICAgICBTc2lkLCAqcFNzaWQ9TlVMTDsKKyAgICBCT09MRUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZU1hY2hpbmVUb3VjaGVkID0gRkFMU0U7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFRSVUU7CisKKyAgICBpZiggc3RybGVuKGFyZykgPD0gTUFYX0xFTl9PRl9TU0lEKQorICAgIHsKKyAgICAgICAgTmRpc1plcm9NZW1vcnkoJlNzaWQsIHNpemVvZihORElTXzgwMl8xMV9TU0lEKSk7CisgICAgICAgIGlmIChzdHJsZW4oYXJnKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBOZGlzTW92ZU1lbW9yeShTc2lkLlNzaWQsIGFyZywgc3RybGVuKGFyZykpOworICAgICAgICAgICAgU3NpZC5Tc2lkTGVuZ3RoID0gc3RybGVuKGFyZyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAgIC8vQU5ZIHNzaWQKKyAgICAgICAgeworICAgICAgICAgICAgU3NpZC5Tc2lkTGVuZ3RoID0gMDsKKwkJICAgIG1lbWNweShTc2lkLlNzaWQsICIiLCAwKTsKKwkJCXBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSA9IEJTU19JTkZSQTsKKwkJCXBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVPcGVuOworCSAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgID0gTmRpczgwMl8xMUVuY3J5cHRpb25EaXNhYmxlZDsKKwkJfQorICAgICAgICBwU3NpZCA9ICZTc2lkOworCisgICAgICAgIGlmIChwQWRhcHRlci0+TWxtZS5DbnRsTWFjaGluZS5DdXJyU3RhdGUgIT0gQ05UTF9JRExFKQorICAgICAgICB7CisgICAgICAgICAgICBSVDI4WFhfTUxNRV9SRVNFVF9TVEFURV9NQUNISU5FKHBBZGFwdGVyKTsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIiEhISBNTE1FIGJ1c3ksIHJlc2V0IE1MTUUgc3RhdGUgbWFjaGluZSAhISFcbiIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHBBZGFwdGVyLT5NbG1lQXV4LkN1cnJSZXFJc0Zyb21OZGlzID0gVFJVRTsKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5iU2NhblJlcUlzRnJvbVdlYlVJID0gRkFMU0U7CisJCXBBZGFwdGVyLT5iQ29uZmlnQ2hhbmdlZCA9IFRSVUU7CisKKyAgICAgICAgTWxtZUVucXVldWUocEFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgIE1MTUVfQ05UTF9TVEFURV9NQUNISU5FLAorICAgICAgICAgICAgICAgICAgICBPSURfODAyXzExX1NTSUQsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihORElTXzgwMl8xMV9TU0lEKSwKKyAgICAgICAgICAgICAgICAgICAgKFZPSUQgKilwU3NpZCk7CisKKyAgICAgICAgU3RhdGVNYWNoaW5lVG91Y2hlZCA9IFRSVUU7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9TU0lEX1Byb2M6OihMZW49JWQsU3NpZD0lcylcbiIsIFNzaWQuU3NpZExlbmd0aCwgU3NpZC5Tc2lkKSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgc3VjY2VzcyA9IEZBTFNFOworCisgICAgaWYgKFN0YXRlTWFjaGluZVRvdWNoZWQpIC8vIFVwcGVyIGxheWVyIHNlbnQgYSBNTE1FLXJlbGF0ZWQgb3BlcmF0aW9ucworICAgIAlSVDI4WFhfTUxNRV9IQU5ETEVSKHBBZGFwdGVyKTsKKworICAgIHJldHVybiBzdWNjZXNzOworfQorCisjaWZkZWYgV01NX1NVUFBPUlQKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IFdtbUNhcGFibGUgRW5hYmxlIG9yIERpc2FibGUKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVAlTZXRfV21tQ2FwYWJsZV9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlCT09MRUFOCWJXbW1DYXBhYmxlOworCisJYldtbUNhcGFibGUgPSBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApOworCisJaWYgKChiV21tQ2FwYWJsZSA9PSAxKQorI2lmZGVmIFJUMjg3MAorCQkmJiAocEFkLT5OdW1iZXJPZlBpcGVzID49IDUpCisjZW5kaWYgLy8gUlQyODcwIC8vCisJCSkKKwkJcEFkLT5Db21tb25DZmcuYldtbUNhcGFibGUgPSBUUlVFOworCWVsc2UgaWYgKGJXbW1DYXBhYmxlID09IDApCisJCXBBZC0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlID0gRkFMU0U7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQgYXJndW1lbnQKKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9XbW1DYXBhYmxlX1Byb2M6OihiV21tQ2FwYWJsZT0lZClcbiIsCisJCXBBZC0+Q29tbW9uQ2ZnLmJXbW1DYXBhYmxlKSk7CisKKwlyZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBXTU1fU1VQUE9SVCAvLworCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBOZXR3b3JrIFR5cGUoSW5mcmFzdHJ1Y3R1cmUvQWRob2MgbW9kZSkKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfTmV0d29ya1R5cGVfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIFVJTlQzMglWYWx1ZSA9IDA7CisKKyAgICBpZiAoc3RyY21wKGFyZywgIkFkaG9jIikgPT0gMCkKKwl7CisJCWlmIChwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgIT0gQlNTX0FESE9DKQorCQl7CisJCQkvLyBDb25maWcgaGFzIGNoYW5nZWQKKwkJCXBBZGFwdGVyLT5iQ29uZmlnQ2hhbmdlZCA9IFRSVUU7CisgICAgICAgICAgICBpZiAoTU9OSVRPUl9PTihwQWRhcHRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBSWF9GSUxUUl9DRkcsIFNUQU5PUk1BTCk7CisgICAgICAgICAgICAgICAgUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJCQlWYWx1ZSAmPSAofjB4ODApOworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisgICAgICAgICAgICAgICAgT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWRhcHRlciwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuYkF1dG9SZWNvbm5lY3QgPSBUUlVFOworICAgICAgICAgICAgICAgIExpbmtEb3duKHBBZGFwdGVyLCBGQUxTRSk7CisgICAgICAgICAgICB9CisJCQlpZiAoSU5GUkFfT04ocEFkYXB0ZXIpKQorCQkJeworCQkJCS8vQk9PTEVBTiBDYW5jZWxsZWQ7CisJCQkJLy8gU2V0IHRoZSBBdXRvUmVjb25uZWN0U3NpZCB0byBwcmV2ZW50IGl0IHJlY29ubmVjdCB0byBvbGQgU1NJRAorCQkJCS8vIFNpbmNlIGNhbGxpbmcgdGhpcyBpbmRpY2F0ZSB1c2VyIGRvbid0IHdhbnQgdG8gY29ubmVjdCB0byB0aGF0IFNTSUQgYW55bW9yZS4KKwkJCQlwQWRhcHRlci0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbj0gMzI7CisJCQkJTmRpc1plcm9NZW1vcnkocEFkYXB0ZXItPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWQsIHBBZGFwdGVyLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkTGVuKTsKKworCQkJCUxpbmtEb3duKHBBZGFwdGVyLCBGQUxTRSk7CisKKwkJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJORElTX1NUQVRVU19NRURJQV9ESVNDT05ORUNUIEV2ZW50IEJCIVxuIikpOworCQkJfQorCQl9CisJCXBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSA9IEJTU19BREhPQzsKKyAgICAgICAgcEFkYXB0ZXItPm5ldF9kZXYtPnR5cGUgPSBwQWRhcHRlci0+U3RhQ2ZnLk9yaURldlR5cGU7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT5TZXRfTmV0d29ya1R5cGVfUHJvYzo6KEFELUhPQylcbiIpKTsKKwl9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZywgIkluZnJhIikgPT0gMCkKKwl7CisJCWlmIChwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUgIT0gQlNTX0lORlJBKQorCQl7CisJCQkvLyBDb25maWcgaGFzIGNoYW5nZWQKKwkJCXBBZGFwdGVyLT5iQ29uZmlnQ2hhbmdlZCA9IFRSVUU7CisgICAgICAgICAgICBpZiAoTU9OSVRPUl9PTihwQWRhcHRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBSWF9GSUxUUl9DRkcsIFNUQU5PUk1BTCk7CisgICAgICAgICAgICAgICAgUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIE1BQ19TWVNfQ1RSTCwgJlZhbHVlKTsKKwkJCQlWYWx1ZSAmPSAofjB4ODApOworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisgICAgICAgICAgICAgICAgT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWRhcHRlciwgZk9QX1NUQVRVU19NRURJQV9TVEFURV9DT05ORUNURUQpOworICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuYkF1dG9SZWNvbm5lY3QgPSBUUlVFOworICAgICAgICAgICAgICAgIExpbmtEb3duKHBBZGFwdGVyLCBGQUxTRSk7CisgICAgICAgICAgICB9CisJCQlpZiAoQURIT0NfT04ocEFkYXB0ZXIpKQorCQkJeworCQkJCS8vIFNldCB0aGUgQXV0b1JlY29ubmVjdFNzaWQgdG8gcHJldmVudCBpdCByZWNvbm5lY3QgdG8gb2xkIFNTSUQKKwkJCQkvLyBTaW5jZSBjYWxsaW5nIHRoaXMgaW5kaWNhdGUgdXNlciBkb24ndCB3YW50IHRvIGNvbm5lY3QgdG8gdGhhdCBTU0lEIGFueW1vcmUuCisJCQkJcEFkYXB0ZXItPk1sbWVBdXguQXV0b1JlY29ubmVjdFNzaWRMZW49IDMyOworCQkJCU5kaXNaZXJvTWVtb3J5KHBBZGFwdGVyLT5NbG1lQXV4LkF1dG9SZWNvbm5lY3RTc2lkLCBwQWRhcHRlci0+TWxtZUF1eC5BdXRvUmVjb25uZWN0U3NpZExlbik7CisKKwkJCQlMaW5rRG93bihwQWRhcHRlciwgRkFMU0UpOworCQkJfQorCQl9CisJCXBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSA9IEJTU19JTkZSQTsKKyAgICAgICAgcEFkYXB0ZXItPm5ldF9kZXYtPnR5cGUgPSBwQWRhcHRlci0+U3RhQ2ZnLk9yaURldlR5cGU7CisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIj09PT5TZXRfTmV0d29ya1R5cGVfUHJvYzo6KElORlJBKVxuIikpOworCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQnNzVHlwZSA9IEJTU19JTkZSQTsKKwl9CisgICAgZWxzZSBpZiAoc3RyY21wKGFyZywgIk1vbml0b3IiKSA9PSAwKQorICAgIHsKKwkJVUNIQVIJYmJwVmFsdWUgPSAwOworCQlCQ05fVElNRV9DRkdfU1RSVUMgY3NyOworCQlPUFNUQVRVU19DTEVBUl9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX0lORlJBX09OKTsKKyAgICAgICAgT1BTVEFUVVNfQ0xFQVJfRkxBRyhwQWRhcHRlciwgZk9QX1NUQVRVU19BREhPQ19PTik7CisJCU9QU1RBVFVTX1NFVF9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCk7CisJCS8vIGRpc2FibGUgYWxsIHBlcmlvZGljIHN0YXRlIG1hY2hpbmUKKwkJcEFkYXB0ZXItPlN0YUNmZy5iQXV0b1JlY29ubmVjdCA9IEZBTFNFOworCQkvLyByZXNldCBhbGwgbWxtZSBzdGF0ZSBtYWNoaW5lCisJCVJUMjhYWF9NTE1FX1JFU0VUX1NUQVRFX01BQ0hJTkUocEFkYXB0ZXIpOworCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJmT1BfU1RBVFVTX01FRElBX1NUQVRFX0NPTk5FQ1RFRCBcbiIpKTsKKyAgICAgICAgaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPT0gMCkKKyAgICAgICAgeworI2lmZGVmIERPVDExX05fU1VQUE9SVAorICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSA9PSBQSFlfMTFBTl9NSVhFRCkKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gMzY7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCA9IDY7CisgICAgICAgIH0KKyNpZmRlZiBET1QxMV9OX1NVUFBPUlQKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTl9DaGFubmVsQ2hlY2socEFkYXB0ZXIpOworI2VuZGlmIC8vIERPVDExX05fU1VQUE9SVCAvLworCisjaWZkZWYgRE9UMTFfTl9TVVBQT1JUCisJaWYgKHBBZGFwdGVyLT5Db21tb25DZmcuUGh5TW9kZSA+PSBQSFlfMTFBQkdOX01JWEVEICYmCisgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLlJlZ1RyYW5zbWl0U2V0dGluZy5maWVsZC5CVyA9PSBCV180MCAmJgorICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBID09IEVYVENIQV9BQk9WRSkKKwkJeworCQkJLy8gNDBNSHogLGNvbnRyb2wgY2hhbm5lbCBhdCBsb3dlcgorCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjQsICZiYnBWYWx1ZSk7CisJCQliYnBWYWx1ZSAmPSAofjB4MTgpOworCQkJYmJwVmFsdWUgfD0gMHgxMDsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SNCwgYmJwVmFsdWUpOworCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKKwkJCS8vICBSWCA6IGNvbnRyb2wgY2hhbm5lbCBhdCBsb3dlcgorCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjMsICZiYnBWYWx1ZSk7CisJCQliYnBWYWx1ZSAmPSAofjB4MjApOworCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1IzLCBiYnBWYWx1ZSk7CisKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBUWF9CQU5EX0NGRywgJlZhbHVlKTsKKwkJCVZhbHVlICY9IDB4ZmZmZmZmZmU7CisJCQlSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIFRYX0JBTkRfQ0ZHLCBWYWx1ZSk7CisJCQlwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsID0gcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsICsgMjsKKyAgICAgICAgICAgIEFzaWNTd2l0Y2hDaGFubmVsKHBBZGFwdGVyLCBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsLCBGQUxTRSk7CisJCSAgICBBc2ljTG9ja0NoYW5uZWwocEFkYXB0ZXIsIHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpOworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiQldfNDAgLGNvbnRyb2xfY2hhbm5lbCglZCksIENlbnRyYWxDaGFubmVsKCVkKSBcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNlbnRyYWxDaGFubmVsKSk7CisJCX0KKwkJZWxzZSBpZiAocEFkYXB0ZXItPkNvbW1vbkNmZy5QaHlNb2RlID49IFBIWV8xMUFCR05fTUlYRUQgJiYKKyAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuQlcgPT0gQldfNDAgJiYKKyAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkNvbW1vbkNmZy5SZWdUcmFuc21pdFNldHRpbmcuZmllbGQuRVhUQ0hBID09IEVYVENIQV9CRUxPVykKKwkJeworCQkJLy8gNDBNSHogLGNvbnRyb2wgY2hhbm5lbCBhdCB1cHBlcgorCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjQsICZiYnBWYWx1ZSk7CisJCQliYnBWYWx1ZSAmPSAofjB4MTgpOworCQkJYmJwVmFsdWUgfD0gMHgxMDsKKwkJCVJUTVBfQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SNCwgYmJwVmFsdWUpOworCQkJcEFkYXB0ZXItPkNvbW1vbkNmZy5CQlBDdXJyZW50QlcgPSBCV180MDsKKwkJCVJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBUWF9CQU5EX0NGRywgJlZhbHVlKTsKKwkJCVZhbHVlIHw9IDB4MTsKKwkJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgVFhfQkFORF9DRkcsIFZhbHVlKTsKKworCQkJUlRNUF9CQlBfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjMsICZiYnBWYWx1ZSk7CisJCQliYnBWYWx1ZSB8PSAoMHgyMCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjMsIGJicFZhbHVlKTsKKwkJCXBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwgPSBwQWRhcHRlci0+Q29tbW9uQ2ZnLkNoYW5uZWwgLSAyOworICAgICAgICAgICAgQXNpY1N3aXRjaENoYW5uZWwocEFkYXB0ZXIsIHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwsIEZBTFNFKTsKKwkJICAgIEFzaWNMb2NrQ2hhbm5lbChwQWRhcHRlciwgcEFkYXB0ZXItPkNvbW1vbkNmZy5DZW50cmFsQ2hhbm5lbCk7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCV180MCAsY29udHJvbF9jaGFubmVsKCVkKSwgQ2VudHJhbENoYW5uZWwoJWQpIFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5Db21tb25DZmcuQ2VudHJhbENoYW5uZWwpKTsKKwkJfQorCQllbHNlCisjZW5kaWYgLy8gRE9UMTFfTl9TVVBQT1JUIC8vCisJCXsKKwkJCS8vIDIwTUh6CisJCQlSVE1QX0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIEJCUF9SNCwgJmJicFZhbHVlKTsKKwkJCWJicFZhbHVlICY9ICh+MHgxOCk7CisJCQlSVE1QX0JCUF9JT19XUklURThfQllfUkVHX0lEKHBBZGFwdGVyLCBCQlBfUjQsIGJicFZhbHVlKTsKKwkJCXBBZGFwdGVyLT5Db21tb25DZmcuQkJQQ3VycmVudEJXID0gQldfMjA7CisJCQlBc2ljU3dpdGNoQ2hhbm5lbChwQWRhcHRlciwgcEFkYXB0ZXItPkNvbW1vbkNmZy5DaGFubmVsLCBGQUxTRSk7CisJCQlBc2ljTG9ja0NoYW5uZWwocEFkYXB0ZXIsIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCk7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJCV18yMCwgQ2hhbm5lbCglZClcbiIsIHBBZGFwdGVyLT5Db21tb25DZmcuQ2hhbm5lbCkpOworCQl9CisJCS8vIEVuYWJsZSBSeCB3aXRoIHByb21pc2N1b3VzIHJlY2VwdGlvbgorCQlSVE1QX0lPX1dSSVRFMzIocEFkYXB0ZXIsIFJYX0ZJTFRSX0NGRywgMHgzKTsKKwkJLy8gQVNJQyBzdXBwb3JzdHMgc25pZmZlciBmdW5jdGlvbiB3aXRoIHJlcGxhY2luZyBSU1NJIHdpdGggdGltZXN0YW1wLgorCQkvL1JUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBNQUNfU1lTX0NUUkwsICZWYWx1ZSk7CisJCS8vVmFsdWUgfD0gKDB4ODApOworCQkvL1JUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgTUFDX1NZU19DVFJMLCBWYWx1ZSk7CisJCS8vIGRpc2FibGUgc3luYworCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgQkNOX1RJTUVfQ0ZHLCAmY3NyLndvcmQpOworCQljc3IuZmllbGQuYkJlYWNvbkdlbiA9IDA7CisJCWNzci5maWVsZC5iVEJUVEVuYWJsZSA9IDA7CisJCWNzci5maWVsZC5Uc2ZTeW5jTW9kZSA9IDA7CisJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgQkNOX1RJTUVfQ0ZHLCBjc3Iud29yZCk7CisKKwkJcEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID0gQlNTX01PTklUT1I7CisgICAgICAgIHBBZGFwdGVyLT5uZXRfZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9QUklTTTsgLy9BUlBIUkRfSUVFRTgwMjExOyAvLyBJRUVFODAyMTEKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPT09PlNldF9OZXR3b3JrVHlwZV9Qcm9jOjooTU9OSVRPUilcbiIpKTsKKyAgICB9CisKKyAgICAvLyBSZXNldCBSYWxpbmsgc3VwcGxpY2FudCB0byBub3QgdXNlLCBpdCB3aWxsIGJlIHNldCB0byBzdGFydCB3aGVuIFVJIHNldCBQTUsga2V5CisgICAgcEFkYXB0ZXItPlN0YUNmZy5XcGFTdGF0ZSA9IFNTX05PVFVTRTsKKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9OZXR3b3JrVHlwZV9Qcm9jOjooTmV0d29ya1R5cGU9JWQpXG4iLCBwQWRhcHRlci0+U3RhQ2ZnLkJzc1R5cGUpKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBBdXRoZW50aWNhdGlvbiBtb2RlCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X0F1dGhNb2RlX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBpZiAoKHN0cmNtcChhcmcsICJXRVBBVVRPIikgPT0gMCkgfHwgKHN0cmNtcChhcmcsICJ3ZXBhdXRvIikgPT0gMCkpCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVBdXRvU3dpdGNoOworICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiT1BFTiIpID09IDApIHx8IChzdHJjbXAoYXJnLCAib3BlbiIpID09IDApKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlT3BlbjsKKyAgICBlbHNlIGlmICgoc3RyY21wKGFyZywgIlNIQVJFRCIpID09IDApIHx8IChzdHJjbXAoYXJnLCAic2hhcmVkIikgPT0gMCkpCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPSBOZGlzODAyXzExQXV0aE1vZGVTaGFyZWQ7CisgICAgZWxzZSBpZiAoKHN0cmNtcChhcmcsICJXUEFQU0siKSA9PSAwKSB8fCAoc3RyY21wKGFyZywgIndwYXBzayIpID09IDApKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBUFNLOworICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiV1BBTk9ORSIpID09IDApIHx8IChzdHJjbXAoYXJnLCAid3Bhbm9uZSIpID09IDApKQorICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZTsKKyAgICBlbHNlIGlmICgoc3RyY21wKGFyZywgIldQQTJQU0siKSA9PSAwKSB8fCAoc3RyY21wKGFyZywgIndwYTJwc2siKSA9PSAwKSkKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTJQU0s7CisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorICAgIGVsc2UgaWYgKChzdHJjbXAoYXJnLCAiV1BBIikgPT0gMCkgfHwgKHN0cmNtcChhcmcsICJ3cGEiKSA9PSAwKSkKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTsKKyAgICBlbHNlIGlmICgoc3RyY21wKGFyZywgIldQQTIiKSA9PSAwKSB8fCAoc3RyY21wKGFyZywgIndwYTIiKSA9PSAwKSkKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQTI7CisjZW5kaWYgLy8gV1BBX1NVUFBMSUNBTlRfU1VQUE9SVCAvLworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcEFkYXB0ZXItPlN0YUNmZy5Qb3J0U2VjdXJlZCA9IFdQQV84MDJfMVhfUE9SVF9OT1RfU0VDVVJFRDsKKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9BdXRoTW9kZV9Qcm9jOjooQXV0aE1vZGU9JWQpXG4iLCBwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlKSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgRW5jcnlwdGlvbiBUeXBlCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X0VuY3J5cFR5cGVfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIGlmICgoc3RyY21wKGFyZywgIk5PTkUiKSA9PSAwKSB8fCAoc3RyY21wKGFyZywgIm5vbmUiKSA9PSAwKSkKKyAgICB7CisgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKyAgICAgICAgICAgIHJldHVybiBUUlVFOyAgICAvLyBkbyBub3RoaW5nCisKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgICAgID0gTmRpczgwMl8xMVdFUERpc2FibGVkOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlBhaXJDaXBoZXIgICAgPSBOZGlzODAyXzExV0VQRGlzYWJsZWQ7CisJICAgIHBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgICA9IE5kaXM4MDJfMTFXRVBEaXNhYmxlZDsKKyAgICB9CisgICAgZWxzZSBpZiAoKHN0cmNtcChhcmcsICJXRVAiKSA9PSAwKSB8fCAoc3RyY21wKGFyZywgIndlcCIpID09IDApKQorICAgIHsKKyAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7ICAgIC8vIGRvIG5vdGhpbmcKKworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyAgICAgPSBOZGlzODAyXzExV0VQRW5hYmxlZDsKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyICAgID0gTmRpczgwMl8xMVdFUEVuYWJsZWQ7CisJICAgIHBBZGFwdGVyLT5TdGFDZmcuR3JvdXBDaXBoZXIgICA9IE5kaXM4MDJfMTFXRVBFbmFibGVkOworICAgIH0KKyAgICBlbHNlIGlmICgoc3RyY21wKGFyZywgIlRLSVAiKSA9PSAwKSB8fCAoc3RyY21wKGFyZywgInRraXAiKSA9PSAwKSkKKyAgICB7CisgICAgICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlIDwgTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7ICAgIC8vIGRvIG5vdGhpbmcKKworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1cyAgICAgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLlBhaXJDaXBoZXIgICAgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworCSAgICBwQWRhcHRlci0+U3RhQ2ZnLkdyb3VwQ2lwaGVyICAgPSBOZGlzODAyXzExRW5jcnlwdGlvbjJFbmFibGVkOworICAgIH0KKyAgICBlbHNlIGlmICgoc3RyY21wKGFyZywgIkFFUyIpID09IDApIHx8IChzdHJjbXAoYXJnLCAiYWVzIikgPT0gMCkpCisgICAgeworICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA8IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKyAgICAgICAgICAgIHJldHVybiBUUlVFOyAgICAvLyBkbyBub3RoaW5nCisKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMgICAgID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5QYWlyQ2lwaGVyICAgID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKwkgICAgcEFkYXB0ZXItPlN0YUNmZy5Hcm91cENpcGhlciAgID0gTmRpczgwMl8xMUVuY3J5cHRpb24zRW5hYmxlZDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBwQWRhcHRlci0+U3RhQ2ZnLk9yaWdXZXBTdGF0dXMgPSBwQWRhcHRlci0+U3RhQ2ZnLldlcFN0YXR1czsKKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9FbmNyeXBUeXBlX1Byb2M6OihFbmNyeXBUeXBlPSVkKVxuIiwgcEFkYXB0ZXItPlN0YUNmZy5XZXBTdGF0dXMpKTsKKworICAgIHJldHVybiBUUlVFOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBEZWZhdWx0IEtleSBJRAorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9EZWZhdWx0S2V5SURfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleUlkeDsKKworICAgIEtleUlkeCA9IHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCk7CisgICAgaWYoKEtleUlkeCA+PSAxICkgJiYgKEtleUlkeCA8PSA0KSkKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5EZWZhdWx0S2V5SWQgPSAoVUNIQVIpIChLZXlJZHggLSAxICk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRkFMU0U7ICAvL0ludmFsaWQgYXJndW1lbnQKKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9EZWZhdWx0S2V5SURfUHJvYzo6KERlZmF1bHRLZXlJRD0lZClcbiIsIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdEtleUlkKSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgV0VQIEtFWTEKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfS2V5MV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5TGVuOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk7CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2lwaGVyQWxnPUNJUEhFUl9XRVA2NDsKKworICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKyAgICAgICAgcmV0dXJuIFRSVUU7ICAgIC8vIGRvIG5vdGhpbmcKKworICAgIEtleUxlbiA9IHN0cmxlbihhcmcpOworCisgICAgc3dpdGNoIChLZXlMZW4pCisgICAgeworICAgICAgICBjYXNlIDU6IC8vd2VwIDQwIEFzY2lpIHR5cGUKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5TGVuID0gS2V5TGVuOworICAgICAgICAgICAgbWVtY3B5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LCBhcmcsIEtleUxlbik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5MV9Qcm9jOjooS2V5MT0lcyBhbmQgdHlwZT0lcylcbiIsIGFyZywgIkFzY2lpIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTA6IC8vd2VwIDQwIEhleCB0eXBlCisgICAgICAgICAgICBmb3IoaT0wOyBpIDwgS2V5TGVuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICFpc3hkaWdpdCgqKGFyZytpKSkgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7ICAvL05vdCBIZXggdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzBdLktleUxlbiA9IEtleUxlbiAvIDIgOworICAgICAgICAgICAgQXRvSChhcmcsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LCBLZXlMZW4gLyAyKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkxX1Byb2M6OihLZXkxPSVzIGFuZCB0eXBlPSVzKVxuIiwgYXJnLCAiSGV4IikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTM6IC8vd2VwIDEwNCBBc2NpaSB0eXBlCisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzBdLktleUxlbiA9IEtleUxlbjsKKyAgICAgICAgICAgIG1lbWNweShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzBdLktleSwgYXJnLCBLZXlMZW4pOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkxX1Byb2M6OihLZXkxPSVzIGFuZCB0eXBlPSVzKVxuIiwgYXJnLCAiQXNjaWkiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyNjogLy93ZXAgMTA0IEhleCB0eXBlCisgICAgICAgICAgICBmb3IoaT0wOyBpIDwgS2V5TGVuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICFpc3hkaWdpdCgqKGFyZytpKSkgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7ICAvL05vdCBIZXggdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzBdLktleUxlbiA9IEtleUxlbiAvIDIgOworICAgICAgICAgICAgQXRvSChhcmcsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LCBLZXlMZW4gLyAyKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5MV9Qcm9jOjooS2V5MT0lcyBhbmQgdHlwZT0lcylcbiIsIGFyZywgIkhleCIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAvL0ludmFsaWQgYXJndW1lbnQKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkxX1Byb2M6OkludmFsaWQgYXJndW1lbnQgKD0lcylcbiIsIGFyZykpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCisgICAgLy8gU2V0IGtleXMgKGludG8gQVNJQykKKyAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgIDsgICAvLyBub3Qgc3VwcG9ydAorICAgIGVsc2UgICAgLy8gT2xkIFdFUCBzdHVmZgorICAgIHsKKyAgICAgICAgQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzBdLkNpcGhlckFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMF0uS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFNldCBXRVAgS0VZMgorICAgIFJldHVybjoKKyAgICAgICAgVFJVRSBpZiBhbGwgcGFyYW1ldGVycyBhcmUgT0ssIEZBTFNFIG90aGVyd2lzZQorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworSU5UIFNldF9LZXkyX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLZXlMZW47CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXBoZXJBbGc9Q0lQSEVSX1dFUDY0OworCisgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICByZXR1cm4gVFJVRTsgICAgLy8gZG8gbm90aGluZworCisgICAgS2V5TGVuID0gc3RybGVuKGFyZyk7CisKKyAgICBzd2l0Y2ggKEtleUxlbikKKyAgICB7CisgICAgICAgIGNhc2UgNTogLy93ZXAgNDAgQXNjaWkgdHlwZQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXlMZW4gPSBLZXlMZW47CisgICAgICAgICAgICBtZW1jcHkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXksIGFyZywgS2V5TGVuKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkyX1Byb2M6OihLZXkyPSVzIGFuZCB0eXBlPSVzKVxuIiwgYXJnLCAiQXNjaWkiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMDogLy93ZXAgNDAgSGV4IHR5cGUKKyAgICAgICAgICAgIGZvcihpPTA7IGkgPCBLZXlMZW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggIWlzeGRpZ2l0KCooYXJnK2kpKSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsgIC8vTm90IEhleCB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMV0uS2V5TGVuID0gS2V5TGVuIC8gMiA7CisgICAgICAgICAgICBBdG9IKGFyZywgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXksIEtleUxlbiAvIDIpOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTJfUHJvYzo6KEtleTI9JXMgYW5kIHR5cGU9JXMpXG4iLCBhcmcsICJIZXgiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMzogLy93ZXAgMTA0IEFzY2lpIHR5cGUKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMV0uS2V5TGVuID0gS2V5TGVuOworICAgICAgICAgICAgbWVtY3B5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMV0uS2V5LCBhcmcsIEtleUxlbik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTJfUHJvYzo6KEtleTI9JXMgYW5kIHR5cGU9JXMpXG4iLCBhcmcsICJBc2NpaSIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI2OiAvL3dlcCAxMDQgSGV4IHR5cGUKKyAgICAgICAgICAgIGZvcihpPTA7IGkgPCBLZXlMZW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiggIWlzeGRpZ2l0KCooYXJnK2kpKSApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsgIC8vTm90IEhleCB2YWx1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMV0uS2V5TGVuID0gS2V5TGVuIC8gMiA7CisgICAgICAgICAgICBBdG9IKGFyZywgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsxXS5LZXksIEtleUxlbiAvIDIpOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkyX1Byb2M6OihLZXkyPSVzIGFuZCB0eXBlPSVzKVxuIiwgYXJnLCAiSGV4IikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IC8vSW52YWxpZCBhcmd1bWVudAorICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTJfUHJvYzo6SW52YWxpZCBhcmd1bWVudCAoPSVzKVxuIiwgYXJnKSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMV0uQ2lwaGVyQWxnID0gQ2lwaGVyQWxnOworCisgICAgLy8gU2V0IGtleXMgKGludG8gQVNJQykKKyAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgIDsgICAvLyBub3Qgc3VwcG9ydAorICAgIGVsc2UgICAgLy8gT2xkIFdFUCBzdHVmZgorICAgIHsKKyAgICAgICAgQXNpY0FkZFNoYXJlZEtleUVudHJ5KHBBZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzFdLkNpcGhlckFsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMV0uS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgV0VQIEtFWTMKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfS2V5M19Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5TGVuOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk7CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2lwaGVyQWxnPUNJUEhFUl9XRVA2NDsKKworICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKyAgICAgICAgcmV0dXJuIFRSVUU7ICAgIC8vIGRvIG5vdGhpbmcKKworICAgIEtleUxlbiA9IHN0cmxlbihhcmcpOworCisgICAgc3dpdGNoIChLZXlMZW4pCisgICAgeworICAgICAgICBjYXNlIDU6IC8vd2VwIDQwIEFzY2lpIHR5cGUKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5TGVuID0gS2V5TGVuOworICAgICAgICAgICAgbWVtY3B5KHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5LCBhcmcsIEtleUxlbik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5M19Qcm9jOjooS2V5Mz0lcyBhbmQgdHlwZT1Bc2NpaSlcbiIsIGFyZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTA6IC8vd2VwIDQwIEhleCB0eXBlCisgICAgICAgICAgICBmb3IoaT0wOyBpIDwgS2V5TGVuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICFpc3hkaWdpdCgqKGFyZytpKSkgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7ICAvL05vdCBIZXggdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzJdLktleUxlbiA9IEtleUxlbiAvIDIgOworICAgICAgICAgICAgQXRvSChhcmcsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5LCBLZXlMZW4gLyAyKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVA2NDsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkzX1Byb2M6OihLZXkzPSVzIGFuZCB0eXBlPUhleClcbiIsIGFyZykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTM6IC8vd2VwIDEwNCBBc2NpaSB0eXBlCisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzJdLktleUxlbiA9IEtleUxlbjsKKyAgICAgICAgICAgIG1lbWNweShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzJdLktleSwgYXJnLCBLZXlMZW4pOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDEyODsKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkzX1Byb2M6OihLZXkzPSVzIGFuZCB0eXBlPUFzY2lpKVxuIiwgYXJnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyNjogLy93ZXAgMTA0IEhleCB0eXBlCisgICAgICAgICAgICBmb3IoaT0wOyBpIDwgS2V5TGVuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICFpc3hkaWdpdCgqKGFyZytpKSkgKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7ICAvL05vdCBIZXggdmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzJdLktleUxlbiA9IEtleUxlbiAvIDIgOworICAgICAgICAgICAgQXRvSChhcmcsIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bMl0uS2V5LCBLZXlMZW4gLyAyKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5M19Qcm9jOjooS2V5Mz0lcyBhbmQgdHlwZT1IZXgpXG4iLCBhcmcpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAvL0ludmFsaWQgYXJndW1lbnQKKyAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9LZXkzX1Byb2M6OkludmFsaWQgYXJndW1lbnQgKD0lcylcbiIsIGFyZykpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzJdLkNpcGhlckFsZyA9IENpcGhlckFsZzsKKworICAgIC8vIFNldCBrZXlzIChpbnRvIEFTSUMpCisgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPj0gTmRpczgwMl8xMUF1dGhNb2RlV1BBKQorICAgICAgICA7ICAgLy8gbm90IHN1cHBvcnQKKyAgICBlbHNlICAgIC8vIE9sZCBXRVAgc3R1ZmYKKyAgICB7CisgICAgICAgIEFzaWNBZGRTaGFyZWRLZXlFbnRyeShwQWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVsyXS5DaXBoZXJBbGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzJdLktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IFdFUCBLRVk0CisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X0tleTRfUHJvYygKKyAgICBJTiAgUFJUTVBfQURBUFRFUiAgIHBBZGFwdGVyLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtleUxlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOworICAgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENpcGhlckFsZz1DSVBIRVJfV0VQNjQ7CisKKyAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5BdXRoTW9kZSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpCisgICAgICAgIHJldHVybiBUUlVFOyAgICAvLyBkbyBub3RoaW5nCisKKyAgICBLZXlMZW4gPSBzdHJsZW4oYXJnKTsKKworICAgIHN3aXRjaCAoS2V5TGVuKQorICAgIHsKKyAgICAgICAgY2FzZSA1OiAvL3dlcCA0MCBBc2NpaSB0eXBlCisgICAgICAgICAgICBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleUxlbiA9IEtleUxlbjsKKyAgICAgICAgICAgIG1lbWNweShwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleSwgYXJnLCBLZXlMZW4pOworICAgICAgICAgICAgQ2lwaGVyQWxnID0gQ0lQSEVSX1dFUDY0OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTRfUHJvYzo6KEtleTQ9JXMgYW5kIHR5cGU9JXMpXG4iLCBhcmcsICJBc2NpaSIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEwOiAvL3dlcCA0MCBIZXggdHlwZQorICAgICAgICAgICAgZm9yKGk9MDsgaSA8IEtleUxlbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAhaXN4ZGlnaXQoKihhcmcraSkpICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOyAgLy9Ob3QgSGV4IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVszXS5LZXlMZW4gPSBLZXlMZW4gLyAyIDsKKyAgICAgICAgICAgIEF0b0goYXJnLCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleSwgS2V5TGVuIC8gMik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQNjQ7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5NF9Qcm9jOjooS2V5ND0lcyBhbmQgdHlwZT0lcylcbiIsIGFyZywgIkhleCIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEzOiAvL3dlcCAxMDQgQXNjaWkgdHlwZQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVszXS5LZXlMZW4gPSBLZXlMZW47CisgICAgICAgICAgICBtZW1jcHkocEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVszXS5LZXksIGFyZywgS2V5TGVuKTsKKyAgICAgICAgICAgIENpcGhlckFsZyA9IENJUEhFUl9XRVAxMjg7CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5NF9Qcm9jOjooS2V5ND0lcyBhbmQgdHlwZT0lcylcbiIsIGFyZywgIkFzY2lpIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjY6IC8vd2VwIDEwNCBIZXggdHlwZQorICAgICAgICAgICAgZm9yKGk9MDsgaSA8IEtleUxlbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCAhaXN4ZGlnaXQoKihhcmcraSkpICkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOyAgLy9Ob3QgSGV4IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVszXS5LZXlMZW4gPSBLZXlMZW4gLyAyIDsKKyAgICAgICAgICAgIEF0b0goYXJnLCBwQWRhcHRlci0+U2hhcmVkS2V5W0JTUzBdWzNdLktleSwgS2V5TGVuIC8gMik7CisgICAgICAgICAgICBDaXBoZXJBbGcgPSBDSVBIRVJfV0VQMTI4OworICAgICAgICAgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0tleTRfUHJvYzo6KEtleTQ9JXMgYW5kIHR5cGU9JXMpXG4iLCBhcmcsICJIZXgiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogLy9JbnZhbGlkIGFyZ3VtZW50CisgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJTZXRfS2V5NF9Qcm9jOjpJbnZhbGlkIGFyZ3VtZW50ICg9JXMpXG4iLCBhcmcpKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVszXS5DaXBoZXJBbGcgPSBDaXBoZXJBbGc7CisKKyAgICAvLyBTZXQga2V5cyAoaW50byBBU0lDKQorICAgIGlmIChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlID49IE5kaXM4MDJfMTFBdXRoTW9kZVdQQSkKKyAgICAgICAgOyAgIC8vIG5vdCBzdXBwb3J0CisgICAgZWxzZSAgICAvLyBPbGQgV0VQIHN0dWZmCisgICAgeworICAgICAgICBBc2ljQWRkU2hhcmVkS2V5RW50cnkocEFkYXB0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TaGFyZWRLZXlbQlNTMF1bM10uQ2lwaGVyQWxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPlNoYXJlZEtleVtCU1MwXVszXS5LZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgU2V0IFdQQSBQU0sga2V5CisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X1dQQVBTS19Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgVUNIQVIgICAgICAgICAgICAgICAgICAga2V5TWF0ZXJpYWxbNDBdOworCisgICAgaWYgKChwQWRhcHRlci0+U3RhQ2ZnLkF1dGhNb2RlICE9IE5kaXM4MDJfMTFBdXRoTW9kZVdQQVBTSykgJiYKKyAgICAgICAgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMlBTSykgJiYKKwkgICAgKHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgIT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKwkJKQorICAgICAgICByZXR1cm4gVFJVRTsgICAgLy8gZG8gbm90aGluZworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1dQQVBTS19Qcm9jOjooV1BBUFNLPSVzKVxuIiwgYXJnKSk7CisKKyAgICBOZGlzWmVyb01lbW9yeShrZXlNYXRlcmlhbCwgNDApOworCisgICAgaWYgKChzdHJsZW4oYXJnKSA8IDgpIHx8IChzdHJsZW4oYXJnKSA+IDY0KSkKKyAgICB7CisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldCBmYWlsZWQhIShXUEFQU0s9JXMpLCBXUEFQU0sga2V5LXN0cmluZyByZXF1aXJlZCA4IH4gNjQgY2hhcmFjdGVycyBcbiIsIGFyZykpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYgKHN0cmxlbihhcmcpID09IDY0KQorICAgIHsKKyAgICAgICAgQXRvSChhcmcsIGtleU1hdGVyaWFsLCAzMik7CisgICAgICAgIE5kaXNNb3ZlTWVtb3J5KHBBZGFwdGVyLT5TdGFDZmcuUE1LLCBrZXlNYXRlcmlhbCwgMzIpOworCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFBhc3N3b3JkSGFzaCgoY2hhciAqKWFyZywgcEFkYXB0ZXItPk1sbWVBdXguU3NpZCwgcEFkYXB0ZXItPk1sbWVBdXguU3NpZExlbiwga2V5TWF0ZXJpYWwpOworICAgICAgICBOZGlzTW92ZU1lbW9yeShwQWRhcHRlci0+U3RhQ2ZnLlBNSywga2V5TWF0ZXJpYWwsIDMyKTsKKyAgICB9CisKKworCisgICAgaWYocEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID09IEJTU19BREhPQyAmJgorICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuQXV0aE1vZGUgPT0gTmRpczgwMl8xMUF1dGhNb2RlV1BBTm9uZSkKKyAgICB7CisgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldwYVN0YXRlID0gU1NfTk9UVVNFOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBTdGFydCBTVEEgc3VwcGxpY2FudCBzdGF0ZSBtYWNoaW5lCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV3BhU3RhdGUgPSBTU19TVEFSVDsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgUG93ZXIgU2F2aW5nIG1vZGUKKyAgICBSZXR1cm46CisgICAgICAgIFRSVUUgaWYgYWxsIHBhcmFtZXRlcnMgYXJlIE9LLCBGQUxTRSBvdGhlcndpc2UKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK0lOVCBTZXRfUFNNb2RlX1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWRhcHRlciwKKyAgICBJTiAgUFVDSEFSICAgICAgICAgIGFyZykKK3sKKyAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5Cc3NUeXBlID09IEJTU19JTkZSQSkKKyAgICB7CisgICAgICAgIGlmICgoc3RyY21wKGFyZywgIk1heF9QU1AiKSA9PSAwKSB8fAorCQkJKHN0cmNtcChhcmcsICJtYXhfcHNwIikgPT0gMCkgfHwKKwkJCShzdHJjbXAoYXJnLCAiTUFYX1BTUCIpID09IDApKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkbyBOT1QgdHVybiBvbiBQU00gYml0IGhlcmUsIHdhaXQgdW50aWwgTWxtZUNoZWNrRm9yUHNtQ2hhbmdlKCkKKyAgICAgICAgICAgIC8vIHRvIGV4Y2x1ZGUgY2VydGFpbiBzaXR1YXRpb25zLgorICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuYldpbmRvd3NBQ0NBTUVuYWJsZSA9PSBGQUxTRSkKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlTUFYX1BTUDsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c0JhdHRlcnlQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlTUFYX1BTUDsKKyAgICAgICAgICAgIE9QU1RBVFVTX1NFVF9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSk7CisgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCA9IDU7CisKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoc3RyY21wKGFyZywgIkZhc3RfUFNQIikgPT0gMCkgfHwKKwkJCQkgKHN0cmNtcChhcmcsICJmYXN0X3BzcCIpID09IDApIHx8CisgICAgICAgICAgICAgICAgIChzdHJjbXAoYXJnLCAiRkFTVF9QU1AiKSA9PSAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZG8gTk9UIHR1cm4gb24gUFNNIGJpdCBoZXJlLCB3YWl0IHVudGlsIE1sbWVDaGVja0ZvclBzbUNoYW5nZSgpCisgICAgICAgICAgICAvLyB0byBleGNsdWRlIGNlcnRhaW4gc2l0dWF0aW9ucy4KKyAgICAgICAgICAgIE9QU1RBVFVTX1NFVF9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSk7CisgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVGYXN0X1BTUDsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c0JhdHRlcnlQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlRmFzdF9QU1A7CisgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLkRlZmF1bHRMaXN0ZW5Db3VudCA9IDM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKHN0cmNtcChhcmcsICJMZWdhY3lfUFNQIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChhcmcsICJsZWdhY3lfcHNwIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChhcmcsICJMRUdBQ1lfUFNQIikgPT0gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGRvIE5PVCB0dXJuIG9uIFBTTSBiaXQgaGVyZSwgd2FpdCB1bnRpbCBNbG1lQ2hlY2tGb3JQc21DaGFuZ2UoKQorICAgICAgICAgICAgLy8gdG8gZXhjbHVkZSBjZXJ0YWluIHNpdHVhdGlvbnMuCisgICAgICAgICAgICBPUFNUQVRVU19TRVRfRkxBRyhwQWRhcHRlciwgZk9QX1NUQVRVU19SRUNFSVZFX0RUSU0pOworICAgICAgICAgICAgaWYgKHBBZGFwdGVyLT5TdGFDZmcuYldpbmRvd3NBQ0NBTUVuYWJsZSA9PSBGQUxTRSkKKyAgICAgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlTGVnYWN5X1BTUDsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c0JhdHRlcnlQb3dlck1vZGUgPSBOZGlzODAyXzExUG93ZXJNb2RlTGVnYWN5X1BTUDsKKyAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuRGVmYXVsdExpc3RlbkNvdW50ID0gMzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vRGVmYXVsdCBOZGlzODAyXzExUG93ZXJNb2RlQ0FNCisgICAgICAgICAgICAvLyBjbGVhciBQU00gYml0IGltbWVkaWF0ZWx5CisgICAgICAgICAgICBNbG1lU2V0UHNtQml0KHBBZGFwdGVyLCBQV1JfQUNUSVZFKTsKKyAgICAgICAgICAgIE9QU1RBVFVTX1NFVF9GTEFHKHBBZGFwdGVyLCBmT1BfU1RBVFVTX1JFQ0VJVkVfRFRJTSk7CisgICAgICAgICAgICBpZiAocEFkYXB0ZXItPlN0YUNmZy5iV2luZG93c0FDQ0FNRW5hYmxlID09IEZBTFNFKQorICAgICAgICAgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuV2luZG93c1Bvd2VyTW9kZSA9IE5kaXM4MDJfMTFQb3dlck1vZGVDQU07CisgICAgICAgICAgICBwQWRhcHRlci0+U3RhQ2ZnLldpbmRvd3NCYXR0ZXJ5UG93ZXJNb2RlID0gTmRpczgwMl8xMVBvd2VyTW9kZUNBTTsKKyAgICAgICAgfQorCisgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIlNldF9QU01vZGVfUHJvYzo6KFBTTW9kZT0lbGQpXG4iLCBwQWRhcHRlci0+U3RhQ2ZnLldpbmRvd3NQb3dlck1vZGUpKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKworICAgIHJldHVybiBUUlVFOworfQorCisjaWZkZWYgV1BBX1NVUFBMSUNBTlRfU1VQUE9SVAorLyoKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIERlc2NyaXB0aW9uOgorICAgICAgICBTZXQgV3BhU3VwcG9ydCBmbGFnLgorICAgIFZhbHVlOgorICAgICAgICAwOiBEcml2ZXIgaWdub3JlIHdwYV9zdXBwbGljYW50LgorICAgICAgICAxOiB3cGFfc3VwcGxpY2FudCBpbml0aWF0ZXMgc2Nhbm5pbmcgYW5kIEFQIHNlbGVjdGlvbi4KKyAgICAgICAgMjogZHJpdmVyIHRha2VzIGNhcmUgb2Ygc2Nhbm5pbmcsIEFQIHNlbGVjdGlvbiwgYW5kIElFRUUgODAyLjExIGFzc29jaWF0aW9uIHBhcmFtZXRlcnMuCisgICAgUmV0dXJuOgorICAgICAgICBUUlVFIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBPSywgRkFMU0Ugb3RoZXJ3aXNlCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitJTlQgU2V0X1dwYV9TdXBwb3J0KAorICAgIElOCVBSVE1QX0FEQVBURVIJcEFkLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKworICAgIGlmICggc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKSA9PSAwKQorICAgICAgICBwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFOworICAgIGVsc2UgaWYgKCBzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApID09IDEpCisgICAgICAgIHBBZC0+U3RhQ2ZnLldwYVN1cHBsaWNhbnRVUCA9IFdQQV9TVVBQTElDQU5UX0VOQUJMRTsKKyAgICBlbHNlIGlmICggc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKSA9PSAyKQorICAgICAgICBwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSBXUEFfU1VQUExJQ0FOVF9FTkFCTEVfV0lUSF9XRUJfVUk7CisgICAgZWxzZQorICAgICAgICBwQWQtPlN0YUNmZy5XcGFTdXBwbGljYW50VVAgPSBXUEFfU1VQUExJQ0FOVF9ESVNBQkxFOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X1dwYV9TdXBwb3J0OjooV3BhU3VwcGxpY2FudFVQPSVkKVxuIiwgcEFkLT5TdGFDZmcuV3BhU3VwcGxpY2FudFVQKSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKyNlbmRpZiAvLyBXUEFfU1VQUExJQ0FOVF9TVVBQT1JUIC8vCisKKyNpZmRlZiBEQkcKKy8qCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBEZXNjcmlwdGlvbjoKKyAgICAgICAgUmVhZCAvIFdyaXRlIE1BQworICAgIEFyZ3VtZW50czoKKyAgICAgICAgcEFkYXB0ZXIgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIKKyAgICAgICAgd3JxICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlvY3RsIGFyZ3VtZW50CisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgIE5vdGU6CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgICAgMS4pIGl3cHJpdiByYTAgbWFjIDAgICAgICAgID09PiByZWFkIE1BQyB3aGVyZSBBZGRyPTB4MAorICAgICAgICAgICAgICAgMi4pIGl3cHJpdiByYTAgbWFjIDA9MTIgICAgID09PiB3cml0ZSBNQUMgd2hlcmUgQWRkcj0weDAsIHZhbHVlPTEyCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBJb2N0bE1BQygKKwlJTglQUlRNUF9BREFQVEVSCXBBZGFwdGVyLAorCUlOCXN0cnVjdCBpd3JlcQkqd3JxKQoreworCUNIQVIJCQkJKnRoaXNfY2hhcjsKKwlDSEFSCQkJCSp2YWx1ZTsKKwlJTlQJCQkJCWogPSAwLCBrID0gMDsKKwlDSEFSCQkJCW1zZ1sxMDI0XTsKKwlDSEFSCQkJCWFyZ1syNTVdOworCVVMT05HCQkJCW1hY0FkZHIgPSAwOworCVVDSEFSCQkJCXRlbXBbMTZdLCB0ZW1wMlsxNl07CisJVUlOVDMyCQkJCW1hY1ZhbHVlID0gMDsKKwlJTlQJCQkJCVN0YXR1czsKKwlCT09MRUFOCQkJCWJJc1ByaW50QWxsTUFDID0gRkFMU0U7CisKKworCW1lbXNldChtc2csIDB4MDAsIDEwMjQpOworCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggPiAxKSAvL05vIHBhcmFtZXRlcnMuCisJeworCSAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihhcmcsIHdycS0+dS5kYXRhLnBvaW50ZXIsICh3cnEtPnUuZGF0YS5sZW5ndGggPiAyNTUpID8gMjU1IDogd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJc3ByaW50Zihtc2csICJcbiIpOworCisJCS8vUGFyc2luZyBSZWFkIG9yIFdyaXRlCisJICAgIHRoaXNfY2hhciA9IGFyZzsKKwkJaWYgKCEqdGhpc19jaGFyKQorCQkJZ290byBuZXh0OworCisJCWlmICgodmFsdWUgPSBydHN0cmNocih0aGlzX2NoYXIsICc9JykpICE9IE5VTEwpCisJCQkqdmFsdWUrKyA9IDA7CisKKwkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKQorCQl7IC8vUmVhZAorCQkJLy8gU2FuaXR5IGNoZWNrCisJCQlpZihzdHJsZW4odGhpc19jaGFyKSA+IDQpCisJCQkJZ290byBuZXh0OworCisJCQlqID0gc3RybGVuKHRoaXNfY2hhcik7CisJCQl3aGlsZShqLS0gPiAwKQorCQkJeworCQkJCWlmKHRoaXNfY2hhcltqXSA+ICdmJyB8fCB0aGlzX2NoYXJbal0gPCAnMCcpCisJCQkJCXJldHVybjsKKwkJCX0KKworCQkJLy8gTWFjIEFkZHIKKwkJCWsgPSBqID0gc3RybGVuKHRoaXNfY2hhcik7CisJCQl3aGlsZShqLS0gPiAwKQorCQkJeworCQkJCXRoaXNfY2hhcls0LWsral0gPSB0aGlzX2NoYXJbal07CisJCQl9CisKKwkJCXdoaWxlKGsgPCA0KQorCQkJCXRoaXNfY2hhclszLWsrK109JzAnOworCQkJdGhpc19jaGFyWzRdPSdcMCc7CisKKwkJCWlmKHN0cmxlbih0aGlzX2NoYXIpID09IDQpCisJCQl7CisJCQkJQXRvSCh0aGlzX2NoYXIsIHRlbXAsIDIpOworCQkJCW1hY0FkZHIgPSAqdGVtcCoyNTYgKyB0ZW1wWzFdOworCQkJCWlmIChtYWNBZGRyIDwgMHhGRkZGKQorCQkJCXsKKwkJCQkJUlRNUF9JT19SRUFEMzIocEFkYXB0ZXIsIG1hY0FkZHIsICZtYWNWYWx1ZSk7CisJCQkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIk1hY0FkZHI9JWx4LCBNYWNWYWx1ZT0leFxuIiwgbWFjQWRkciwgbWFjVmFsdWUpKTsKKwkJCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksICJbMHglMDhsWF06JTA4WCAgIiwgbWFjQWRkciAsIG1hY1ZhbHVlKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsvL0ludmFsaWQgcGFyYW1ldGVzLCBzbyBkZWZhdWx0IHByaW50ayBhbGwgbWFjCisJCQkJCWJJc1ByaW50QWxsTUFDID0gVFJVRTsKKwkJCQkJZ290byBuZXh0OworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJCXsgLy9Xcml0ZQorCQkJbWVtY3B5KCZ0ZW1wMiwgdmFsdWUsIHN0cmxlbih2YWx1ZSkpOworCQkJdGVtcDJbc3RybGVuKHZhbHVlKV0gPSAnXDAnOworCisJCQkvLyBTYW5pdHkgY2hlY2sKKwkJCWlmKChzdHJsZW4odGhpc19jaGFyKSA+IDQpIHx8IHN0cmxlbih0ZW1wMikgPiA4KQorCQkJCWdvdG8gbmV4dDsKKworCQkJaiA9IHN0cmxlbih0aGlzX2NoYXIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQlpZih0aGlzX2NoYXJbal0gPiAnZicgfHwgdGhpc19jaGFyW2pdIDwgJzAnKQorCQkJCQlyZXR1cm47CisJCQl9CisKKwkJCWogPSBzdHJsZW4odGVtcDIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQlpZih0ZW1wMltqXSA+ICdmJyB8fCB0ZW1wMltqXSA8ICcwJykKKwkJCQkJcmV0dXJuOworCQkJfQorCisJCQkvL01BQyBBZGRyCisJCQlrID0gaiA9IHN0cmxlbih0aGlzX2NoYXIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQl0aGlzX2NoYXJbNC1rK2pdID0gdGhpc19jaGFyW2pdOworCQkJfQorCisJCQl3aGlsZShrIDwgNCkKKwkJCQl0aGlzX2NoYXJbMy1rKytdPScwJzsKKwkJCXRoaXNfY2hhcls0XT0nXDAnOworCisJCQkvL01BQyB2YWx1ZQorCQkJayA9IGogPSBzdHJsZW4odGVtcDIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQl0ZW1wMls4LWsral0gPSB0ZW1wMltqXTsKKwkJCX0KKworCQkJd2hpbGUoayA8IDgpCisJCQkJdGVtcDJbNy1rKytdPScwJzsKKwkJCXRlbXAyWzhdPSdcMCc7CisKKwkJCXsKKwkJCQlBdG9IKHRoaXNfY2hhciwgdGVtcCwgMik7CisJCQkJbWFjQWRkciA9ICp0ZW1wKjI1NiArIHRlbXBbMV07CisKKwkJCQlBdG9IKHRlbXAyLCB0ZW1wLCA0KTsKKwkJCQltYWNWYWx1ZSA9ICp0ZW1wKjI1NioyNTYqMjU2ICsgdGVtcFsxXSoyNTYqMjU2ICsgdGVtcFsyXSoyNTYgKyB0ZW1wWzNdOworCisJCQkJLy8gZGVidWcgbW9kZQorCQkJCWlmIChtYWNBZGRyID09IChIV19ERUJVR19TRVRUSU5HX0JBU0UgKyA0KSkKKwkJCQl7CisJCQkJCS8vIDB4MmJmNDogYnl0ZTAgbm9uLXplcm86IGVuYWJsZSBSMTcgdHVuaW5nLCAwOiBkaXNhYmxlIFIxNyB0dW5pbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1hY1ZhbHVlICYgMHgwMDAwMDBmZikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0ZXItPkJicFR1bmluZy5iRW5hYmxlID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCgidHVybiBvbiBSMTcgdHVuaW5nXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBVQ0hBUiBSNjY7CisgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHRlci0+QmJwVHVuaW5nLmJFbmFibGUgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFI2NiA9IDB4MjYgKyBHRVRfTE5BX0dBSU4ocEFkYXB0ZXIpOworI2lmZGVmIFJBTElOS19BVEUKKwkJCQkJCWlmIChBVEVfT04ocEFkYXB0ZXIpKQorCQkJCQkJeworCQkJCQkJCUFURV9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1I2NiwgKDB4MjYgKyBHRVRfTE5BX0dBSU4ocEFkYXB0ZXIpKSk7CisJCQkJCQl9CisJCQkJCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQkJCQkJUlRNUF9CQlBfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgQkJQX1I2NiwgKDB4MjYgKyBHRVRfTE5BX0dBSU4ocEFkYXB0ZXIpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBEQkdQUklOVChSVF9ERUJVR19UUkFDRSwoInR1cm4gb2ZmIFIxNyB0dW5pbmcsIHJlc3RvcmUgdG8gMHglMDJ4XG4iLCBSNjYpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiTWFjQWRkcj0lMDJseCwgTWFjVmFsdWU9MHgleFxuIiwgbWFjQWRkciwgbWFjVmFsdWUpKTsKKworCQkJCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgbWFjQWRkciwgbWFjVmFsdWUpOworCQkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCAiWzB4JTA4bFhdOiUwOFggICIsIG1hY0FkZHIsIG1hY1ZhbHVlKTsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJCWJJc1ByaW50QWxsTUFDID0gVFJVRTsKK25leHQ6CisJaWYgKGJJc1ByaW50QWxsTUFDKQorCXsKKwkJc3RydWN0IGZpbGUJCSpmaWxlX3c7CisJCVBDSEFSCQkJZmlsZU5hbWUgPSAiTWFjRHVtcC50eHQiOworCQltbV9zZWdtZW50X3QJb3JpZ19mczsKKworCQlvcmlnX2ZzID0gZ2V0X2ZzKCk7CisJCXNldF9mcyhLRVJORUxfRFMpOworCisJCS8vIG9wZW4gZmlsZQorCQlmaWxlX3cgPSBmaWxwX29wZW4oZmlsZU5hbWUsIE9fV1JPTkxZfE9fQ1JFQVQsIDApOworCQlpZiAoSVNfRVJSKGZpbGVfdykpCisJCXsKKwkJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIi0tPjIpICVzOiBFcnJvciAlbGQgb3BlbmluZyAlc1xuIiwgX19GVU5DVElPTl9fLCAtUFRSX0VSUihmaWxlX3cpLCBmaWxlTmFtZSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKGZpbGVfdy0+Zl9vcCAmJiBmaWxlX3ctPmZfb3AtPndyaXRlKQorCQkJeworCQkJCWZpbGVfdy0+Zl9wb3MgPSAwOworCQkJCW1hY0FkZHIgPSAweDEwMDA7CisKKwkJCQl3aGlsZSAobWFjQWRkciA8PSAweDE4MDApCisJCQkJeworCQkJCQlSVE1QX0lPX1JFQUQzMihwQWRhcHRlciwgbWFjQWRkciwgJm1hY1ZhbHVlKTsKKwkJCQkJc3ByaW50Zihtc2csICIlMDhseCA9ICUwOFhcbiIsIG1hY0FkZHIsIG1hY1ZhbHVlKTsKKworCQkJCQkvLyB3cml0ZSBkYXRhIHRvIGZpbGUKKwkJCQkJZmlsZV93LT5mX29wLT53cml0ZShmaWxlX3csIG1zZywgc3RybGVuKG1zZyksICZmaWxlX3ctPmZfcG9zKTsKKworCQkJCQlwcmludGsoIiVzIiwgbXNnKTsKKwkJCQkJbWFjQWRkciArPSA0OworCQkJCX0KKwkJCQlzcHJpbnRmKG1zZywgIlxuRHVtcCBhbGwgTUFDIHZhbHVlcyB0byAlc1xuIiwgZmlsZU5hbWUpOworCQkJfQorCQkJZmlscF9jbG9zZShmaWxlX3csIE5VTEwpOworCQl9CisJCXNldF9mcyhvcmlnX2ZzKTsKKwl9CisJaWYoc3RybGVuKG1zZykgPT0gMSkKKwkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksICI9PT0+RXJyb3IgY29tbWFuZCBmb3JtYXQhIik7CisKKwkvLyBDb3B5IHRoZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSB1c2VyIGJ1ZmZlcgorCXdycS0+dS5kYXRhLmxlbmd0aCA9IHN0cmxlbihtc2cpOworCVN0YXR1cyA9IGNvcHlfdG9fdXNlcih3cnEtPnUuZGF0YS5wb2ludGVyLCBtc2csIHdycS0+dS5kYXRhLmxlbmd0aCk7CisKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCI8PT1SVE1QSW9jdGxNQUNcblxuIikpOworfQorCisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFJlYWQgLyBXcml0ZSBFMlBST00KKyAgICBBcmd1bWVudHM6CisgICAgICAgIHBBZGFwdGVyICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgICAgIHdycSAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBpb2N0bCBhcmd1bWVudAorCisgICAgUmV0dXJuIFZhbHVlOgorICAgICAgICBOb25lCisKKyAgICBOb3RlOgorICAgICAgICBVc2FnZToKKyAgICAgICAgICAgICAgIDEuKSBpd3ByaXYgcmEwIGUycCAwICAgICAJPT0+IHJlYWQgRTJQUk9NIHdoZXJlIEFkZHI9MHgwCisgICAgICAgICAgICAgICAyLikgaXdwcml2IHJhMCBlMnAgMD0xMjM0ICAgID09PiB3cml0ZSBFMlBST00gd2hlcmUgQWRkcj0weDAsIHZhbHVlPTEyMzQKKyAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKi8KK1ZPSUQgUlRNUElvY3RsRTJQUk9NKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4Jc3RydWN0IGl3cmVxCSp3cnEpCit7CisJQ0hBUgkJCQkqdGhpc19jaGFyOworCUNIQVIJCQkJKnZhbHVlOworCUlOVAkJCQkJaiA9IDAsIGsgPSAwOworCUNIQVIJCQkJbXNnWzEwMjRdOworCUNIQVIJCQkJYXJnWzI1NV07CisJVVNIT1JUCQkJCWVlcEFkZHIgPSAwOworCVVDSEFSCQkJCXRlbXBbMTZdLCB0ZW1wMlsxNl07CisJVVNIT1JUCQkJCWVlcFZhbHVlOworCWludAkJCQkJU3RhdHVzOworCUJPT0xFQU4JCQkJYklzUHJpbnRBbGxFMlAgPSBGQUxTRTsKKworCisJbWVtc2V0KG1zZywgMHgwMCwgMTAyNCk7CisJaWYgKHdycS0+dS5kYXRhLmxlbmd0aCA+IDEpIC8vTm8gcGFyYW1ldGVycy4KKwl7CisJICAgIFN0YXR1cyA9IGNvcHlfZnJvbV91c2VyKGFyZywgd3JxLT51LmRhdGEucG9pbnRlciwgKHdycS0+dS5kYXRhLmxlbmd0aCA+IDI1NSkgPyAyNTUgOiB3cnEtPnUuZGF0YS5sZW5ndGgpOworCQlzcHJpbnRmKG1zZywgIlxuIik7CisKKwkgICAgLy9QYXJzaW5nIFJlYWQgb3IgV3JpdGUKKwkJdGhpc19jaGFyID0gYXJnOworCisKKwkJaWYgKCEqdGhpc19jaGFyKQorCQkJZ290byBuZXh0OworCisJCWlmICgodmFsdWUgPSBydHN0cmNocih0aGlzX2NoYXIsICc9JykpICE9IE5VTEwpCisJCQkqdmFsdWUrKyA9IDA7CisKKwkJaWYgKCF2YWx1ZSB8fCAhKnZhbHVlKQorCQl7IC8vUmVhZAorCisJCQkvLyBTYW5pdHkgY2hlY2sKKwkJCWlmKHN0cmxlbih0aGlzX2NoYXIpID4gNCkKKwkJCQlnb3RvIG5leHQ7CisKKwkJCWogPSBzdHJsZW4odGhpc19jaGFyKTsKKwkJCXdoaWxlKGotLSA+IDApCisJCQl7CisJCQkJaWYodGhpc19jaGFyW2pdID4gJ2YnIHx8IHRoaXNfY2hhcltqXSA8ICcwJykKKwkJCQkJcmV0dXJuOworCQkJfQorCisJCQkvLyBFMlBST00gYWRkcgorCQkJayA9IGogPSBzdHJsZW4odGhpc19jaGFyKTsKKwkJCXdoaWxlKGotLSA+IDApCisJCQl7CisJCQkJdGhpc19jaGFyWzQtaytqXSA9IHRoaXNfY2hhcltqXTsKKwkJCX0KKworCQkJd2hpbGUoayA8IDQpCisJCQkJdGhpc19jaGFyWzMtaysrXT0nMCc7CisJCQl0aGlzX2NoYXJbNF09J1wwJzsKKworCQkJaWYoc3RybGVuKHRoaXNfY2hhcikgPT0gNCkKKwkJCXsKKwkJCQlBdG9IKHRoaXNfY2hhciwgdGVtcCwgMik7CisJCQkJZWVwQWRkciA9ICp0ZW1wKjI1NiArIHRlbXBbMV07CisJCQkJaWYgKGVlcEFkZHIgPCAweEZGRkYpCisJCQkJeworCQkJCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWRhcHRlciwgZWVwQWRkciwgZWVwVmFsdWUpOworCQkJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIlsweCUwNFhdOjB4JTA0WCAgIiwgZWVwQWRkciAsIGVlcFZhbHVlKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsvL0ludmFsaWQgcGFyYW1ldGVzLCBzbyBkZWZhdWx0IHByaW50ayBhbGwgYmJwCisJCQkJCWJJc1ByaW50QWxsRTJQID0gVFJVRTsKKwkJCQkJZ290byBuZXh0OworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJCXsgLy9Xcml0ZQorCQkJbWVtY3B5KCZ0ZW1wMiwgdmFsdWUsIHN0cmxlbih2YWx1ZSkpOworCQkJdGVtcDJbc3RybGVuKHZhbHVlKV0gPSAnXDAnOworCisJCQkvLyBTYW5pdHkgY2hlY2sKKwkJCWlmKChzdHJsZW4odGhpc19jaGFyKSA+IDQpIHx8IHN0cmxlbih0ZW1wMikgPiA4KQorCQkJCWdvdG8gbmV4dDsKKworCQkJaiA9IHN0cmxlbih0aGlzX2NoYXIpOworCQkJd2hpbGUoai0tID4gMCkKKwkJCXsKKwkJCQlpZih0aGlzX2NoYXJbal0gPiAnZicgfHwgdGhpc19jaGFyW2pdIDwgJzAnKQorCQkJCQlyZXR1cm47CisJCQl9CisJCQlqID0gc3RybGVuKHRlbXAyKTsKKwkJCXdoaWxlKGotLSA+IDApCisJCQl7CisJCQkJaWYodGVtcDJbal0gPiAnZicgfHwgdGVtcDJbal0gPCAnMCcpCisJCQkJCXJldHVybjsKKwkJCX0KKworCQkJLy9NQUMgQWRkcgorCQkJayA9IGogPSBzdHJsZW4odGhpc19jaGFyKTsKKwkJCXdoaWxlKGotLSA+IDApCisJCQl7CisJCQkJdGhpc19jaGFyWzQtaytqXSA9IHRoaXNfY2hhcltqXTsKKwkJCX0KKworCQkJd2hpbGUoayA8IDQpCisJCQkJdGhpc19jaGFyWzMtaysrXT0nMCc7CisJCQl0aGlzX2NoYXJbNF09J1wwJzsKKworCQkJLy9NQUMgdmFsdWUKKwkJCWsgPSBqID0gc3RybGVuKHRlbXAyKTsKKwkJCXdoaWxlKGotLSA+IDApCisJCQl7CisJCQkJdGVtcDJbNC1rK2pdID0gdGVtcDJbal07CisJCQl9CisKKwkJCXdoaWxlKGsgPCA0KQorCQkJCXRlbXAyWzMtaysrXT0nMCc7CisJCQl0ZW1wMls0XT0nXDAnOworCisJCQlBdG9IKHRoaXNfY2hhciwgdGVtcCwgMik7CisJCQllZXBBZGRyID0gKnRlbXAqMjU2ICsgdGVtcFsxXTsKKworCQkJQXRvSCh0ZW1wMiwgdGVtcCwgMik7CisJCQllZXBWYWx1ZSA9ICp0ZW1wKjI1NiArIHRlbXBbMV07CisKKwkJCVJUMjh4eF9FRVBST01fV1JJVEUxNihwQWRhcHRlciwgZWVwQWRkciwgZWVwVmFsdWUpOworCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksICJbMHglMDJYXTolMDJYICAiLCBlZXBBZGRyLCBlZXBWYWx1ZSk7CisJCX0KKwl9CisJZWxzZQorCQliSXNQcmludEFsbEUyUCA9IFRSVUU7CituZXh0OgorCWlmIChiSXNQcmludEFsbEUyUCkKKwl7CisJCXN0cnVjdCBmaWxlCQkqZmlsZV93OworCQlQQ0hBUgkJCWZpbGVOYW1lID0gIkVFUFJPTUR1bXAudHh0IjsKKwkJbW1fc2VnbWVudF90CW9yaWdfZnM7CisKKwkJb3JpZ19mcyA9IGdldF9mcygpOworCQlzZXRfZnMoS0VSTkVMX0RTKTsKKworCQkvLyBvcGVuIGZpbGUKKwkJZmlsZV93ID0gZmlscF9vcGVuKGZpbGVOYW1lLCBPX1dST05MWXxPX0NSRUFULCAwKTsKKwkJaWYgKElTX0VSUihmaWxlX3cpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCItLT4yKSAlczogRXJyb3IgJWxkIG9wZW5pbmcgJXNcbiIsIF9fRlVOQ1RJT05fXywgLVBUUl9FUlIoZmlsZV93KSwgZmlsZU5hbWUpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChmaWxlX3ctPmZfb3AgJiYgZmlsZV93LT5mX29wLT53cml0ZSkKKwkJCXsKKwkJCQlmaWxlX3ctPmZfcG9zID0gMDsKKwkJCQllZXBBZGRyID0gMHgwMDsKKworCQkJCXdoaWxlIChlZXBBZGRyIDw9IDB4RkUpCisJCQkJeworCQkJCQlSVDI4eHhfRUVQUk9NX1JFQUQxNihwQWRhcHRlciwgZWVwQWRkciwgZWVwVmFsdWUpOworCQkJCQlzcHJpbnRmKG1zZywgIiUwOHggPSAlMDR4XG4iLCBlZXBBZGRyICwgZWVwVmFsdWUpOworCisJCQkJCS8vIHdyaXRlIGRhdGEgdG8gZmlsZQorCQkJCQlmaWxlX3ctPmZfb3AtPndyaXRlKGZpbGVfdywgbXNnLCBzdHJsZW4obXNnKSwgJmZpbGVfdy0+Zl9wb3MpOworCisJCQkJCXByaW50aygiJXMiLCBtc2cpOworCQkJCQllZXBBZGRyICs9IDI7CisJCQkJfQorCQkJCXNwcmludGYobXNnLCAiXG5EdW1wIGFsbCBFRVBST00gdmFsdWVzIHRvICVzXG4iLCBmaWxlTmFtZSk7CisJCQl9CisJCQlmaWxwX2Nsb3NlKGZpbGVfdywgTlVMTCk7CisJCX0KKwkJc2V0X2ZzKG9yaWdfZnMpOworCX0KKwlpZihzdHJsZW4obXNnKSA9PSAxKQorCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIj09PT5FcnJvciBjb21tYW5kIGZvcm1hdCEiKTsKKworCisJLy8gQ29weSB0aGUgaW5mb3JtYXRpb24gaW50byB0aGUgdXNlciBidWZmZXIKKwl3cnEtPnUuZGF0YS5sZW5ndGggPSBzdHJsZW4obXNnKTsKKwlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgbXNnLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCisJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiPD09UlRNUElvY3RsRTJQUk9NXG4iKSk7Cit9CisjaWZkZWYgUlQzMHh4CisvKgorICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgRGVzY3JpcHRpb246CisgICAgICAgIFJlYWQgLyBXcml0ZSBSRiByZWdpc3RlcgorQXJndW1lbnRzOgorICAgIHBBZGFwdGVyICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIG91ciBhZGFwdGVyCisgICAgd3JxICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlvY3RsIGFyZ3VtZW50CisKKyAgICBSZXR1cm4gVmFsdWU6CisgICAgICAgIE5vbmUKKworICAgIE5vdGU6CisgICAgICAgIFVzYWdlOgorICAgICAgICAgICAgICAgMS4pIGl3cHJpdiByYTAgcmYgICAgICAgICAgICAgICAgPT0+IHJlYWQgYWxsIFJGIHJlZ2lzdGVycworICAgICAgICAgICAgICAgMi4pIGl3cHJpdiByYTAgcmYgMSAgICAgICAgICAgICAgPT0+IHJlYWQgUkYgd2hlcmUgUmVnSUQ9MQorICAgICAgICAgICAgICAgMy4pIGl3cHJpdiByYTAgcmYgMT0xMAkJICAgID09PiB3cml0ZSBSRiBSMT0weDEwCisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCitWT0lEIFJUTVBJb2N0bFJGKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4Jc3RydWN0IGl3cmVxCSp3cnEpCit7CisJQ0hBUgkJCQkqdGhpc19jaGFyOworCUNIQVIJCQkJKnZhbHVlOworCVVDSEFSCQkJCXJlZ1JGID0gMDsKKwlDSEFSCQkJCW1zZ1syMDQ4XTsKKwlDSEFSCQkJCWFyZ1syNTVdOworCUlOVAkJCQkJcmZJZDsKKwlMT05HCQkJCXJmVmFsdWU7CisJaW50CQkJCQlTdGF0dXM7CisJQk9PTEVBTgkJCQliSXNQcmludEFsbFJGID0gRkFMU0U7CisKKworCW1lbXNldChtc2csIDB4MDAsIDIwNDgpOworCWlmICh3cnEtPnUuZGF0YS5sZW5ndGggPiAxKSAvL05vIHBhcmFtZXRlcnMuCisJeworCSAgICBTdGF0dXMgPSBjb3B5X2Zyb21fdXNlcihhcmcsIHdycS0+dS5kYXRhLnBvaW50ZXIsICh3cnEtPnUuZGF0YS5sZW5ndGggPiAyNTUpID8gMjU1IDogd3JxLT51LmRhdGEubGVuZ3RoKTsKKwkJc3ByaW50Zihtc2csICJcbiIpOworCisJICAgIC8vUGFyc2luZyBSZWFkIG9yIFdyaXRlCisJCXRoaXNfY2hhciA9IGFyZzsKKwkJaWYgKCEqdGhpc19jaGFyKQorCQkJZ290byBuZXh0OworCisJCWlmICgodmFsdWUgPSBzdHJjaHIodGhpc19jaGFyLCAnPScpKSAhPSBOVUxMKQorCQkJKnZhbHVlKysgPSAwOworCisJCWlmICghdmFsdWUgfHwgISp2YWx1ZSkKKwkJeyAvL1JlYWQKKwkJCWlmIChzc2NhbmYodGhpc19jaGFyLCAiJWQiLCAmKHJmSWQpKSA9PSAxKQorCQkJeworCQkJCWlmIChyZklkIDw9IDMxKQorCQkJCXsKKwkJCQkJLy8gSW4gUlQyODYwIEFURSBtb2RlLCB3ZSBkbyBub3QgbG9hZCA4MDUxIGZpcm13YXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1dlIG11c3QgYWNjZXNzIFJGIGRpcmVjdGx5LgorICAgICAgICAgICAgICAgICAgICAvLyBGb3IgUlQyODcwIEFURSBtb2RlLCBBVEVfUkZfSU9fV1JJVEU4KC9SRUFEOClfQllfUkVHX0lEIGFyZSByZWRlZmluZWQuCisjaWZkZWYgUkFMSU5LX0FURQorCQkJCQlpZiAoQVRFX09OKHBBZGFwdGVyKSkKKwkJCQkJeworCQkJCQkJQVRFX1JGX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgcmZJZCwgJnJlZ1JGKTsKKwkJCQkJfQorCQkJCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCQkJCQkvLyBhY2NvcmRpbmcgdG8gQW5keSwgR2FyeSwgRGF2aWQgcmVxdWlyZS4KKwkJCQkJLy8gdGhlIGNvbW1hbmQgcmYgc2hhbGwgcmVhZCByZiByZWdpc3RlciBkaXJlY3RseSBmb3IgZHVidWcuCisJCQkJCS8vIEJCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCAmcmVnQkJQKTsKKwkJCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkYXB0ZXIsIHJmSWQsICZyZWdSRik7CisKKwkJCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksICJSJTAyZFsweCUwMnhdOiUwMlggICIsIHJmSWQsIHJmSWQqMiwgcmVnUkYpOworCQkJCX0KKwkJCQllbHNlCisJCQkJey8vSW52YWxpZCBwYXJhbWV0ZXMsIHNvIGRlZmF1bHQgcHJpbnRrIGFsbCBSRgorCQkJCQliSXNQcmludEFsbFJGID0gVFJVRTsKKwkJCQkJZ290byBuZXh0OworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsgLy9JbnZhbGlkIHBhcmFtZXRlcywgc28gZGVmYXVsdCBwcmludGsgYWxsIFJGCisJCQkJYklzUHJpbnRBbGxSRiA9IFRSVUU7CisJCQkJZ290byBuZXh0OworCQkJfQorCQl9CisJCWVsc2UKKwkJeyAvL1dyaXRlCisJCQlpZiAoKHNzY2FuZih0aGlzX2NoYXIsICIlZCIsICYocmZJZCkpID09IDEpICYmIChzc2NhbmYodmFsdWUsICIlbHgiLCAmKHJmVmFsdWUpKSA9PSAxKSkKKwkJCXsKKwkJCQlpZiAocmZJZCA8PSAzMSkKKwkJCQl7CisJCQkJCS8vIEluIFJUMjg2MCBBVEUgbW9kZSwgd2UgZG8gbm90IGxvYWQgODA1MSBmaXJtd2FyZS4KKwkJCQkJLy8gV2Ugc2hvdWxkIGFjY2VzcyBSRiByZWdpc3RlcnMgZGlyZWN0bHkuCisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBSVDI4NzAgQVRFIG1vZGUsIEFURV9SRl9JT19XUklURTgvUkVBRDhfQllfUkVHX0lEIGFyZSByZWRlZmluZWQuCisjaWZkZWYgUkFMSU5LX0FURQorCQkJCQkJaWYgKEFURV9PTihwQWRhcHRlcikpCisJCQkJCQl7CisJCQkJCQkJQVRFX1JGX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgcmZJZCwgJnJlZ1JGKTsKKwkJCQkJCQlBVEVfUkZfSU9fV1JJVEU4X0JZX1JFR19JRChwQWRhcHRlciwgKFVDSEFSKXJmSWQsKFVDSEFSKSByZlZhbHVlKTsKKwkJCQkJCQkvL1JlYWQgaXQgYmFjayBmb3Igc2hvd2luZworCQkJCQkJCUFURV9SRl9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIHJmSWQsICZyZWdSRik7CisJCQkJCQkJc3ByaW50Zihtc2crc3RybGVuKG1zZyksICJSJTAyZFsweCUwMlhdOiUwMlhcbiIsIHJmSWQsIHJmSWQqMiwgcmVnUkYpOworCQkJCQkJfQorCQkJCQkJZWxzZQorI2VuZGlmIC8vIFJBTElOS19BVEUgLy8KKwkJCQkJCXsKKwkJCQkJCQkvLyBhY2NvcmRpbmcgdG8gQW5keSwgR2FyeSwgRGF2aWQgcmVxdWlyZS4KKwkJCQkJCQkvLyB0aGUgY29tbWFuZCBSRiBzaGFsbCByZWFkL3dyaXRlIFJGIHJlZ2lzdGVyIGRpcmVjdGx5IGZvciBkdWJ1Zy4KKwkJCQkJCQkvL0JCUF9JT19SRUFEOF9CWV9SRUdfSUQocEFkYXB0ZXIsIGJicElkLCAmcmVnQkJQKTsKKwkJCQkJICAgICAgICAgICAgICAgIC8vQkJQX0lPX1dSSVRFOF9CWV9SRUdfSUQocEFkYXB0ZXIsIChVQ0hBUiliYnBJZCwoVUNIQVIpIGJicFZhbHVlKTsKKwkJCQkJCQlSVDMweHhSZWFkUkZSZWdpc3RlcihwQWRhcHRlciwgcmZJZCwgJnJlZ1JGKTsKKwkJCQkJCQlSVDMweHhXcml0ZVJGUmVnaXN0ZXIocEFkYXB0ZXIsIChVQ0hBUilyZklkLChVQ0hBUikgcmZWYWx1ZSk7CisJCQkJCSAgICAgICAgICAgICAgICAvL1JlYWQgaXQgYmFjayBmb3Igc2hvd2luZworCQkJCQkJCS8vQkJQX0lPX1JFQUQ4X0JZX1JFR19JRChwQWRhcHRlciwgYmJwSWQsICZyZWdCQlApOworCQkJCQkJCVJUMzB4eFJlYWRSRlJlZ2lzdGVyKHBBZGFwdGVyLCByZklkLCAmcmVnUkYpOworCQkJCQkgICAgICAgICAgICAgICAgc3ByaW50Zihtc2crc3RybGVuKG1zZyksICJSJTAyZFsweCUwMlhdOiUwMlhcbiIsIHJmSWQsIHJmSWQqMiwgcmVnUkYpOworCQkJCSAgICAgICAgICAgICAgICB9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7Ly9JbnZhbGlkIHBhcmFtZXRlcywgc28gZGVmYXVsdCBwcmludGsgYWxsIFJGCisJCQkJCWJJc1ByaW50QWxsUkYgPSBUUlVFOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsgLy9JbnZhbGlkIHBhcmFtZXRlcywgc28gZGVmYXVsdCBwcmludGsgYWxsIFJGCisJCQkJYklzUHJpbnRBbGxSRiA9IFRSVUU7CisJCQl9CisJCX0KKwl9CisJZWxzZQorCQliSXNQcmludEFsbFJGID0gVFJVRTsKK25leHQ6CisJaWYgKGJJc1ByaW50QWxsUkYpCisJeworCQltZW1zZXQobXNnLCAweDAwLCAyMDQ4KTsKKwkJc3ByaW50Zihtc2csICJcbiIpOworCQlmb3IgKHJmSWQgPSAwOyByZklkIDw9IDMxOyByZklkKyspCisJCXsKKwkJCS8vIEluIFJUMjg2MCBBVEUgbW9kZSwgd2UgZG8gbm90IGxvYWQgODA1MSBmaXJtd2FyZS4KKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBhY2Nlc3MgUkYgcmVnaXN0ZXJzIGRpcmVjdGx5LgorICAgICAgICAgICAgLy8gRm9yIFJUMjg3MCBBVEUgbW9kZSwgQVRFX1JGX0lPX1dSSVRFOC9SRUFEOF9CWV9SRUdfSUQgYXJlIHJlZGVmaW5lZC4KKyNpZmRlZiBSQUxJTktfQVRFCisJCQkJaWYgKEFURV9PTihwQWRhcHRlcikpCisJCQkJeworCQkJCQlBVEVfUkZfSU9fUkVBRDhfQllfUkVHX0lEKHBBZGFwdGVyLCByZklkLCAmcmVnUkYpOworCQkJCX0KKwkJCQllbHNlCisjZW5kaWYgLy8gUkFMSU5LX0FURSAvLworCisJCQkvLyBhY2NvcmRpbmcgdG8gQW5keSwgR2FyeSwgRGF2aWQgcmVxdWlyZS4KKwkJCS8vIHRoZSBjb21tYW5kIFJGIHNoYWxsIHJlYWQvd3JpdGUgUkYgcmVnaXN0ZXIgZGlyZWN0bHkgZm9yIGR1YnVnLgorCQkJUlQzMHh4UmVhZFJGUmVnaXN0ZXIocEFkYXB0ZXIsIHJmSWQsICZyZWdSRik7CisJCQlzcHJpbnRmKG1zZytzdHJsZW4obXNnKSwgIiUwM2QgPSAlMDJYXG4iLCByZklkLCByZWdSRik7CisJCX0KKwkJLy8gQ29weSB0aGUgaW5mb3JtYXRpb24gaW50byB0aGUgdXNlciBidWZmZXIKKwkJREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgic3RybGVuKG1zZyk9JWRcbiIsIChVSU5UMzIpc3RybGVuKG1zZykpKTsKKwkJd3JxLT51LmRhdGEubGVuZ3RoID0gc3RybGVuKG1zZyk7CisJCWlmIChjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgbXNnLCB3cnEtPnUuZGF0YS5sZW5ndGgpKQorCQl7CisJCQlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCIlczogY29weV90b191c2VyKCkgZmFpbFxuIiwgX19GVU5DVElPTl9fKSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYoc3RybGVuKG1zZykgPT0gMSkKKwkJCXNwcmludGYobXNnK3N0cmxlbihtc2cpLCAiPT09PkVycm9yIGNvbW1hbmQgZm9ybWF0ISIpOworCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoImNvcHkgdG8gdXNlciBbbXNnPSVzXVxuIiwgbXNnKSk7CisJCS8vIENvcHkgdGhlIGluZm9ybWF0aW9uIGludG8gdGhlIHVzZXIgYnVmZmVyCisJCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoInN0cmxlbihtc2cpID0lZFxuIiwgKFVJTlQzMilzdHJsZW4obXNnKSkpOworCisJCS8vIENvcHkgdGhlIGluZm9ybWF0aW9uIGludG8gdGhlIHVzZXIgYnVmZmVyCisJCXdycS0+dS5kYXRhLmxlbmd0aCA9IHN0cmxlbihtc2cpOworCQlTdGF0dXMgPSBjb3B5X3RvX3VzZXIod3JxLT51LmRhdGEucG9pbnRlciwgbXNnLCB3cnEtPnUuZGF0YS5sZW5ndGgpOworCX0KKworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIjw9PVJUTVBJb2N0bFJGXG5cbiIpKTsKK30KKyNlbmRpZiAvLyBSVDMweHggLy8KKyNlbmRpZiAvLyBEQkcgLy8KKworCisKKworSU5UIFNldF9UR25XaWZpVGVzdF9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkLAorICAgIElOICBQVUNIQVIgICAgICAgICAgYXJnKQoreworICAgIGlmIChzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApID09IDApCisgICAgICAgIHBBZC0+U3RhQ2ZnLmJUR25XaWZpVGVzdCA9IEZBTFNFOworICAgIGVsc2UKKyAgICAgICAgcEFkLT5TdGFDZmcuYlRHbldpZmlUZXN0ID0gVFJVRTsKKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklGIFNldF9UR25XaWZpVGVzdF9Qcm9jOjooYlRHbldpZmlUZXN0PSVkKVxuIiwgcEFkLT5TdGFDZmcuYlRHbldpZmlUZXN0KSk7CisJcmV0dXJuIFRSVUU7Cit9CisKK0lOVCBTZXRfTG9uZ1JldHJ5TGltaXRfUHJvYygKKwlJTglQUlRNUF9BREFQVEVSCXBBZGFwdGVyLAorCUlOCVBVQ0hBUgkJCWFyZykKK3sKKwlUWF9SVFlfQ0ZHX1NUUlVDCXR4X3J0eV9jZmc7CisJVUNIQVIJCQkJTG9uZ1JldHJ5TGltaXQgPSAoVUNIQVIpc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBUWF9SVFlfQ0ZHLCAmdHhfcnR5X2NmZy53b3JkKTsKKwl0eF9ydHlfY2ZnLmZpZWxkLkxvbmdSdHlMaW1pdCA9IExvbmdSZXRyeUxpbWl0OworCVJUTVBfSU9fV1JJVEUzMihwQWRhcHRlciwgVFhfUlRZX0NGRywgdHhfcnR5X2NmZy53b3JkKTsKKwlEQkdQUklOVChSVF9ERUJVR19UUkFDRSwgKCJJRiBTZXRfTG9uZ1JldHJ5TGltaXRfUHJvYzo6KHR4X3J0eV9jZmc9MHgleClcbiIsIHR4X3J0eV9jZmcud29yZCkpOworCXJldHVybiBUUlVFOworfQorCitJTlQgU2V0X1Nob3J0UmV0cnlMaW1pdF9Qcm9jKAorCUlOCVBSVE1QX0FEQVBURVIJcEFkYXB0ZXIsCisJSU4JUFVDSEFSCQkJYXJnKQoreworCVRYX1JUWV9DRkdfU1RSVUMJdHhfcnR5X2NmZzsKKwlVQ0hBUgkJCQlTaG9ydFJldHJ5TGltaXQgPSAoVUNIQVIpc2ltcGxlX3N0cnRvbChhcmcsIDAsIDEwKTsKKworCVJUTVBfSU9fUkVBRDMyKHBBZGFwdGVyLCBUWF9SVFlfQ0ZHLCAmdHhfcnR5X2NmZy53b3JkKTsKKwl0eF9ydHlfY2ZnLmZpZWxkLlNob3J0UnR5TGltaXQgPSBTaG9ydFJldHJ5TGltaXQ7CisJUlRNUF9JT19XUklURTMyKHBBZGFwdGVyLCBUWF9SVFlfQ0ZHLCB0eF9ydHlfY2ZnLndvcmQpOworCURCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklGIFNldF9TaG9ydFJldHJ5TGltaXRfUHJvYzo6KHR4X3J0eV9jZmc9MHgleClcbiIsIHR4X3J0eV9jZmcud29yZCkpOworCXJldHVybiBUUlVFOworfQorCisjaWZkZWYgRVhUX0JVSUxEX0NIQU5ORUxfTElTVAorSU5UIFNldF9JZWVlODAyMTFkQ2xpZW50TW9kZV9Qcm9jKAorICAgIElOICBQUlRNUF9BREFQVEVSICAgcEFkYXB0ZXIsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgaWYgKHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCkgPT0gMCkKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5JRUVFODAyMTFkQ2xpZW50TW9kZSA9IFJ0ODAyXzExX0RfTm9uZTsKKyAgICBlbHNlIGlmIChzaW1wbGVfc3RydG9sKGFyZywgMCwgMTApID09IDEpCisgICAgICAgIHBBZGFwdGVyLT5TdGFDZmcuSUVFRTgwMjExZENsaWVudE1vZGUgPSBSdDgwMl8xMV9EX0ZsZXhpYmxlOworICAgIGVsc2UgaWYgKHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCkgPT0gMikKKyAgICAgICAgcEFkYXB0ZXItPlN0YUNmZy5JRUVFODAyMTFkQ2xpZW50TW9kZSA9IFJ0ODAyXzExX0RfU3RyaWN0OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgREJHUFJJTlQoUlRfREVCVUdfVFJBQ0UsICgiU2V0X0llZWU4MDJkTW9kZV9Qcm9jOjooSUVFRUUwMjExZE1vZGU9JWQpXG4iLCBwQWRhcHRlci0+U3RhQ2ZnLklFRUU4MDIxMWRDbGllbnRNb2RlKSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYgLy8gRVhUX0JVSUxEX0NIQU5ORUxfTElTVCAvLworCisjaWZkZWYgQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVAorSU5UIFNldF9DYXJyaWVyRGV0ZWN0X1Byb2MoCisgICAgSU4gIFBSVE1QX0FEQVBURVIgICBwQWQsCisgICAgSU4gIFBVQ0hBUiAgICAgICAgICBhcmcpCit7CisgICAgaWYgKHNpbXBsZV9zdHJ0b2woYXJnLCAwLCAxMCkgPT0gMCkKKyAgICAgICAgcEFkLT5Db21tb25DZmcuQ2FycmllckRldGVjdC5FbmFibGUgPSBGQUxTRTsKKyAgICBlbHNlCisgICAgICAgIHBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuRW5hYmxlID0gVFJVRTsKKworICAgIERCR1BSSU5UKFJUX0RFQlVHX1RSQUNFLCAoIklGIFNldF9DYXJyaWVyRGV0ZWN0X1Byb2M6OihDYXJyaWVyRGV0ZWN0LkVuYWJsZT0lZClcbiIsIHBBZC0+Q29tbW9uQ2ZnLkNhcnJpZXJEZXRlY3QuRW5hYmxlKSk7CisJcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYgLy8gQ0FSUklFUl9ERVRFQ1RJT05fU1VQUE9SVCAvLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL3dwYS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC93cGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGM3YzhiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC93cGEuaApAQCAtMCwwICsxLDM1NiBAQAorLyoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBSYWxpbmsgVGVjaCBJbmMuCisgKiA1Ri4sIE5vLjM2LCBUYWl5dWFuIFN0LiwgSmh1YmVpIENpdHksCisgKiBIc2luY2h1IENvdW50eSAzMDIsCisgKiBUYWl3YW4sIFIuTy5DLgorICoKKyAqIChjKSBDb3B5cmlnaHQgMjAwMi0yMDA3LCBSYWxpbmsgVGVjaG5vbG9neSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlICAgICAgICAgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAgICAgKgorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4gICAgICAgICAgICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKwlNb2R1bGUgTmFtZToKKwl3cGEuaAorCisJQWJzdHJhY3Q6CisKKwlSZXZpc2lvbiBIaXN0b3J5OgorCVdobwkJCVdoZW4JCQlXaGF0CisJLS0tLS0tLS0JLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCU5hbWUJCURhdGUJCQlNb2RpZmljYXRpb24gbG9ncworKi8KKworI2lmbmRlZglfX1dQQV9IX18KKyNkZWZpbmUJX19XUEFfSF9fCisKKy8vIEVBUE9MIEtleSBkZXNjcmlwdGVyIGZyYW1lIGZvcm1hdCByZWxhdGVkIGxlbmd0aAorI2RlZmluZSBMRU5fS0VZX0RFU0NfTk9OQ0UJCQkzMgorI2RlZmluZSBMRU5fS0VZX0RFU0NfSVYJCQkJMTYKKyNkZWZpbmUgTEVOX0tFWV9ERVNDX1JTQwkJCTgKKyNkZWZpbmUgTEVOX0tFWV9ERVNDX0lECQkJCTgKKyNkZWZpbmUgTEVOX0tFWV9ERVNDX1JFUExBWQkJCTgKKyNkZWZpbmUgTEVOX0tFWV9ERVNDX01JQwkJCTE2CisKKy8vIFRoZSBsZW5ndGggaXMgdGhlIEVBUG9MLUtleSBmcmFtZSBleGNlcHQga2V5IGRhdGEgZmllbGQuCisvLyBQbGVhc2UgcmVmZXIgdG8gODAyLjExaS0yMDA0ICxGaWd1cmUgNDN1IGluIHAuNzgKKyNkZWZpbmUgTEVOX0VBUE9MX0tFWV9NU0cJCQkoc2l6ZW9mKEtFWV9ERVNDUklQVEVSKSAtIE1BWF9MRU5fT0ZfUlNOSUUpCisKKy8vIEVBUCBDb2RlIFR5cGUuCisjZGVmaW5lIEVBUF9DT0RFX1JFUVVFU1QJMQorI2RlZmluZSBFQVBfQ09ERV9SRVNQT05TRQkyCisjZGVmaW5lIEVBUF9DT0RFX1NVQ0NFU1MgICAgMworI2RlZmluZSBFQVBfQ09ERV9GQUlMVVJFICAgIDQKKworLy8gRUFQT0wgZnJhbWUgUHJvdG9jb2wgVmVyc2lvbgorI2RlZmluZQlFQVBPTF9WRVIJCQkJCTEKKyNkZWZpbmUJRUFQT0xfVkVSMgkJCQkJMgorCisvLyBFQVBPTC1LRVkgRGVzY3JpcHRvciBUeXBlCisjZGVmaW5lCVdQQTFfS0VZX0RFU0MJCQkJMHhmZQorI2RlZmluZSBXUEEyX0tFWV9ERVNDICAgICAgICAgICAgICAgMHgwMgorCisvLyBLZXkgRGVzY3JpcHRvciBWZXJzaW9uIG9mIEtleSBJbmZvcm1hdGlvbgorI2RlZmluZQlERVNDX1RZUEVfVEtJUAkJCQkxCisjZGVmaW5lCURFU0NfVFlQRV9BRVMJCQkJMgorI2RlZmluZSBERVNDX1RZUEVfTUVTSAkJCQkzCisKKyNkZWZpbmUgTEVOX01TRzFfMldBWSAgICAgICAgICAgICAgIDB4N2YKKyNkZWZpbmUgTUFYX0xFTl9PRl9FQVBfSFMgICAgICAgICAgIDI1NgorCisjZGVmaW5lIExFTl9NQVNURVJfS0VZCQkJCTMyCisKKy8vIEVBUE9MIEVLLCBNSworI2RlZmluZSBMRU5fRUFQX0VLCQkJCQkxNgorI2RlZmluZSBMRU5fRUFQX01JQ0sJCQkJMTYKKyNkZWZpbmUgTEVOX0VBUF9LRVkJCQkJCSgoTEVOX0VBUF9FSykrKExFTl9FQVBfTUlDSykpCisvLyBUS0lQIGtleSByZWxhdGVkCisjZGVmaW5lIExFTl9QTUtJRAkJCQkJMTYKKyNkZWZpbmUgTEVOX1RLSVBfRUsJCQkJCTE2CisjZGVmaW5lIExFTl9US0lQX1JYTUlDSwkJCQk4CisjZGVmaW5lIExFTl9US0lQX1RYTUlDSwkJCQk4CisjZGVmaW5lIExFTl9BRVNfRUsJCQkJCTE2CisjZGVmaW5lIExFTl9BRVNfS0VZCQkJCQlMRU5fQUVTX0VLCisjZGVmaW5lIExFTl9US0lQX0tFWQkJCQkoKExFTl9US0lQX0VLKSsoTEVOX1RLSVBfUlhNSUNLKSsoTEVOX1RLSVBfVFhNSUNLKSkKKyNkZWZpbmUgVEtJUF9BUF9UWE1JQ0tfT0ZGU0VUCQkoKExFTl9FQVBfS0VZKSsoTEVOX1RLSVBfRUspKQorI2RlZmluZSBUS0lQX0FQX1JYTUlDS19PRkZTRVQJCShUS0lQX0FQX1RYTUlDS19PRkZTRVQrTEVOX1RLSVBfVFhNSUNLKQorI2RlZmluZSBUS0lQX0dUS19MRU5HVEgJCQkJKChMRU5fVEtJUF9FSykrKExFTl9US0lQX1JYTUlDSykrKExFTl9US0lQX1RYTUlDSykpCisjZGVmaW5lIExFTl9QVEsJCQkJCQkoKExFTl9FQVBfS0VZKSsoTEVOX1RLSVBfS0VZKSkKKworLy8gUlNOIElFIExlbmd0aCBkZWZpbml0aW9uCisjZGVmaW5lIE1BWF9MRU5fT0ZfUlNOSUUgICAgICAgICAJOTAKKyNkZWZpbmUgTUlOX0xFTl9PRl9SU05JRSAgICAgICAgIAk4CisKKy8vRUFQIFBhY2tldCBUeXBlCisjZGVmaW5lCUVBUFBhY2tldAkJMAorI2RlZmluZQlFQVBPTFN0YXJ0CQkxCisjZGVmaW5lCUVBUE9MTG9nb2ZmCQkyCisjZGVmaW5lCUVBUE9MS2V5CQkzCisjZGVmaW5lCUVBUE9MQVNGQWxlcnQJNAorI2RlZmluZQlFQVBUdHlwZU1heAkJNQorCisjZGVmaW5lCUVBUE9MX01TR19JTlZBTElECTAKKyNkZWZpbmUJRUFQT0xfUEFJUl9NU0dfMQkxCisjZGVmaW5lCUVBUE9MX1BBSVJfTVNHXzIJMgorI2RlZmluZQlFQVBPTF9QQUlSX01TR18zCTMKKyNkZWZpbmUJRUFQT0xfUEFJUl9NU0dfNAk0CisjZGVmaW5lCUVBUE9MX0dST1VQX01TR18xCTUKKyNkZWZpbmUJRUFQT0xfR1JPVVBfTVNHXzIJNgorCisjZGVmaW5lIFBBSVJXSVNFS0VZCQkJCQkxCisjZGVmaW5lIEdST1VQS0VZCQkJCQkwCisKKy8vIFJldHJ5IHRpbWVyIGNvdW50ZXIgaW5pdGlhbCB2YWx1ZQorI2RlZmluZSBQRUVSX01TRzFfUkVUUllfVElNRVJfQ1RSICAgICAgICAgICAwCisjZGVmaW5lIFBFRVJfTVNHM19SRVRSWV9USU1FUl9DVFIgICAgICAgICAgIDEwCisjZGVmaW5lIEdST1VQX01TRzFfUkVUUllfVElNRVJfQ1RSICAgICAgICAgIDIwCisKKworI2RlZmluZSBFQVBPTF9TVEFSVF9ESVNBQkxFCQkJCQkwCisjZGVmaW5lIEVBUE9MX1NUQVJUX1BTSwkJCQkJCTEKKyNkZWZpbmUgRUFQT0xfU1RBUlRfMVgJCQkJCQkyCisKKyNkZWZpbmUgTUlYX0NJUEhFUl9XUEFfVEtJUF9PTih4KSAgICAgICAoKCh4KSAmIDB4MDgpICE9IDApCisjZGVmaW5lIE1JWF9DSVBIRVJfV1BBX0FFU19PTih4KSAgICAgICAgKCgoeCkgJiAweDA0KSAhPSAwKQorI2RlZmluZSBNSVhfQ0lQSEVSX1dQQTJfVEtJUF9PTih4KSAgICAgICgoKHgpICYgMHgwMikgIT0gMCkKKyNkZWZpbmUgTUlYX0NJUEhFUl9XUEEyX0FFU19PTih4KSAgICAgICAoKCh4KSAmIDB4MDEpICE9IDApCisKKyNkZWZpbmUgUk9VTkRfVVAoX194LCBfX3kpIFwKKwkoKChVTE9ORykoKF9feCkrKChfX3kpLTEpKSkgJiAoKFVMT05HKX4oKF9feSktMSkpKQorCisjZGVmaW5lCUFERF9PTkVfVG9fNjRCSVRfVkFSKF9WKQkJXAorewkJCQkJCQkJCQlcCisJVUNIQVIJY250ID0gTEVOX0tFWV9ERVNDX1JFUExBWTsJXAorCWRvCQkJCQkJCQkJXAorCXsJCQkJCQkJCQlcCisJCWNudC0tOwkJCQkJCQlcCisJCV9WW2NudF0rKzsJCQkJCQlcCisJCWlmIChjbnQgPT0gMCkJCQkJCVwKKwkJCWJyZWFrOwkJCQkJCVwKKwl9d2hpbGUgKF9WW2NudF0gPT0gMCk7CQkJCVwKK30KKworI2RlZmluZSBJU19XUEFfQ0FQQUJJTElUWShhKSAgICAgICAoKChhKSA+PSBOZGlzODAyXzExQXV0aE1vZGVXUEEpICYmICgoYSkgPD0gTmRpczgwMl8xMUF1dGhNb2RlV1BBMVBTS1dQQTJQU0spKQorCisvLyBFQVBPTCBLZXkgSW5mb3JtYXRpb24gZGVmaW5pdGlvbiB3aXRoaW4gS2V5IGRlc2NyaXB0b3IgZm9ybWF0Cit0eXBlZGVmCXN0cnVjdCBQQUNLRUQgX0tFWV9JTkZPCit7CisjaWZkZWYgUlRfQklHX0VORElBTgorCVVDSEFSCUtleUFjazoxOworICAgIFVDSEFSCUluc3RhbGw6MTsKKyAgICBVQ0hBUglLZXlJbmRleDoyOworICAgIFVDSEFSCUtleVR5cGU6MTsKKyAgICBVQ0hBUglLZXlEZXNjVmVyOjM7CisgICAgVUNIQVIJUnN2ZDozOworICAgIFVDSEFSCUVLRF9ETDoxOwkJLy8gRUtEIGZvciBBUDsgREwgZm9yIFNUQQorICAgIFVDSEFSCVJlcXVlc3Q6MTsKKyAgICBVQ0hBUglFcnJvcjoxOworICAgIFVDSEFSCVNlY3VyZToxOworICAgIFVDSEFSCUtleU1pYzoxOworI2Vsc2UKKwlVQ0hBUglLZXlNaWM6MTsKKwlVQ0hBUglTZWN1cmU6MTsKKwlVQ0hBUglFcnJvcjoxOworCVVDSEFSCVJlcXVlc3Q6MTsKKwlVQ0hBUglFS0RfREw6MTsgICAgICAgLy8gRUtEIGZvciBBUDsgREwgZm9yIFNUQQorCVVDSEFSCVJzdmQ6MzsKKwlVQ0hBUglLZXlEZXNjVmVyOjM7CisJVUNIQVIJS2V5VHlwZToxOworCVVDSEFSCUtleUluZGV4OjI7CisJVUNIQVIJSW5zdGFsbDoxOworCVVDSEFSCUtleUFjazoxOworI2VuZGlmCit9CUtFWV9JTkZPLCAqUEtFWV9JTkZPOworCisvLyBFQVBPTCBLZXkgZGVzY3JpcHRvciBmb3JtYXQKK3R5cGVkZWYJc3RydWN0IFBBQ0tFRCBfS0VZX0RFU0NSSVBURVIKK3sKKwlVQ0hBUgkJVHlwZTsKKwlLRVlfSU5GTwlLZXlJbmZvOworCVVDSEFSCQlLZXlMZW5ndGhbMl07CisJVUNIQVIJCVJlcGxheUNvdW50ZXJbTEVOX0tFWV9ERVNDX1JFUExBWV07CisJVUNIQVIJCUtleU5vbmNlW0xFTl9LRVlfREVTQ19OT05DRV07CisJVUNIQVIJCUtleUl2W0xFTl9LRVlfREVTQ19JVl07CisJVUNIQVIJCUtleVJzY1tMRU5fS0VZX0RFU0NfUlNDXTsKKwlVQ0hBUgkJS2V5SWRbTEVOX0tFWV9ERVNDX0lEXTsKKwlVQ0hBUgkJS2V5TWljW0xFTl9LRVlfREVTQ19NSUNdOworCVVDSEFSCQlLZXlEYXRhTGVuWzJdOworCVVDSEFSCQlLZXlEYXRhW01BWF9MRU5fT0ZfUlNOSUVdOworfQlLRVlfREVTQ1JJUFRFUiwgKlBLRVlfREVTQ1JJUFRFUjsKKwordHlwZWRlZglzdHJ1Y3QgUEFDS0VEIF9FQVBPTF9QQUNLRVQKK3sKKwlVQ0hBUgkgCQkJUHJvVmVyOworCVVDSEFSCSAJCQlQcm9UeXBlOworCVVDSEFSCSAJCQlCb2R5X0xlblsyXTsKKwlLRVlfREVTQ1JJUFRFUgkJS2V5RGVzYzsKK30JRUFQT0xfUEFDS0VULCAqUEVBUE9MX1BBQ0tFVDsKKworLy84MDIuMTFpIEQxMCBwYWdlIDgzCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0dUS19FTkNBUAoreworI2lmbmRlZiBSVF9CSUdfRU5ESUFOCisgICAgVUNIQVIgICAgICAgICAgICAgICBLaWQ6MjsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIHR4OjE7CisgICAgVUNIQVIgICAgICAgICAgICAgICByc3Y6NTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIHJzdjE7CisjZWxzZQorICAgIFVDSEFSICAgICAgICAgICAgICAgcnN2OjU7CisgICAgVUNIQVIgICAgICAgICAgICAgICB0eDoxOworICAgIFVDSEFSICAgICAgICAgICAgICAgS2lkOjI7CisgICAgVUNIQVIgICAgICAgICAgICAgICByc3YxOworI2VuZGlmCisgICAgVUNIQVIgICAgICAgICAgICAgICBHVEtbVEtJUF9HVEtfTEVOR1RIXTsKK30gICBHVEtfRU5DQVAsICpQR1RLX0VOQ0FQOworCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX0tERV9FTkNBUAoreworICAgIFVDSEFSICAgICAgICAgICAgICAgVHlwZTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIExlbjsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIE9VSVszXTsKKyAgICBVQ0hBUiAgICAgICAgICAgICAgIERhdGFUeXBlOworICAgIEdUS19FTkNBUCAgICAgIEdUS0VuY2FwOworfSAgIEtERV9FTkNBUCwgKlBLREVfRU5DQVA7CisKKy8vIEZvciBXUEExCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JTTklFIHsKKyAgICBVQ0hBUiAgIG91aVs0XTsKKyAgICBVU0hPUlQgIHZlcnNpb247CisgICAgVUNIQVIgICBtY2FzdFs0XTsKKyAgICBVU0hPUlQgIHVjb3VudDsKKyAgICBzdHJ1Y3QgUEFDS0VEIHsKKyAgICAgICAgVUNIQVIgb3VpWzRdOworICAgIH11Y2FzdFsxXTsKK30gUlNOSUUsICpQUlNOSUU7CisKKy8vIEZvciBXUEEyCit0eXBlZGVmIHN0cnVjdCBQQUNLRUQgX1JTTklFMiB7CisgICAgVVNIT1JUICB2ZXJzaW9uOworICAgIFVDSEFSICAgbWNhc3RbNF07CisgICAgVVNIT1JUICB1Y291bnQ7CisgICAgc3RydWN0IFBBQ0tFRCB7CisgICAgICAgIFVDSEFSIG91aVs0XTsKKyAgICB9dWNhc3RbMV07Cit9IFJTTklFMiwgKlBSU05JRTI7CisKKy8vIEFLTSBTdWl0ZQordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9SU05JRV9BVVRIIHsKKyAgICBVU0hPUlQgYWNvdW50OworICAgIHN0cnVjdCBQQUNLRUQgeworICAgICAgICBVQ0hBUiBvdWlbNF07CisgICAgfWF1dGhbMV07Cit9IFJTTklFX0FVVEgsKlBSU05JRV9BVVRIOworCit0eXBlZGVmCXVuaW9uIFBBQ0tFRCBfUlNOX0NBUEFCSUxJVElFUwl7CisJc3RydWN0CVBBQ0tFRCB7CisjaWZkZWYgUlRfQklHX0VORElBTgorICAgICAgICBVU0hPUlQJCVJzdmQ6MTA7CisgICAgICAgIFVTSE9SVAkJR1RLU0FfUl9Db3VudGVyOjI7CisgICAgICAgIFVTSE9SVAkJUFRLU0FfUl9Db3VudGVyOjI7CisgICAgICAgIFVTSE9SVAkJTm9fUGFpcndpc2U6MTsKKwkJVVNIT1JUCQlQcmVBdXRoOjE7CisjZWxzZQorICAgICAgICBVU0hPUlQJCVByZUF1dGg6MTsKKwkJVVNIT1JUCQlOb19QYWlyd2lzZToxOworCQlVU0hPUlQJCVBUS1NBX1JfQ291bnRlcjoyOworCQlVU0hPUlQJCUdUS1NBX1JfQ291bnRlcjoyOworCQlVU0hPUlQJCVJzdmQ6MTA7CisjZW5kaWYKKwl9CWZpZWxkOworCVVTSE9SVAkJCXdvcmQ7Cit9CVJTTl9DQVBBQklMSVRJRVMsICpQUlNOX0NBUEFCSUxJVElFUzsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9FQVBfSERSIHsKKyAgICBVQ0hBUiAgIFByb1ZlcjsKKyAgICBVQ0hBUiAgIFByb1R5cGU7CisgICAgVUNIQVIgICBCb2R5X0xlblsyXTsKKyAgICBVQ0hBUiAgIGNvZGU7CisgICAgVUNIQVIgICBpZGVudGlmaWVyOworICAgIFVDSEFSICAgbGVuZ3RoWzJdOyAvLyBpbmNsdWRpbmcgY29kZSBhbmQgaWRlbnRpZmllciwgZm9sbG93ZWQgYnkgbGVuZ3RoLTIgb2N0ZXRzIG9mIGRhdGEKK30gRUFQX0hEUiwgKlBFQVBfSERSOworCisvLyBGb3Igc3VwcGxpY2FudCBzdGF0ZSBtYWNoaW5lIHN0YXRlcy4gODAyLjExaSBEcmFmdCA0LjEsIHAuIDk3CisvLyBXZSBzaW1wbGlmaWVkIGl0Cit0eXBlZGVmCWVudW0JX1dwYVN0YXRlCit7CisJU1NfTk9UVVNFLAkJCQkvLyAwCisJU1NfU1RBUlQsCQkJCS8vIDEKKwlTU19XQUlUX01TR18zLAkJCS8vIDIKKwlTU19XQUlUX0dST1VQLAkJCS8vIDMKKwlTU19GSU5JU0gsICAJCQkvLyA0CisJU1NfS0VZVVBEQVRFLAkJCS8vIDUKK30JV1BBX1NUQVRFOworCisvLworLy8JVGhlIGRlZmluaXRpb24gb2YgdGhlIGNpcGhlciBjb21iaW5hdGlvbgorLy8KKy8vIAkgYml0MwliaXQyICBiaXQxICAgYml0MAorLy8JKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCisvLyAJfAkgIFdQQQkgfAkgICBXUEEyICAgfAorLy8JKy0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0rCisvLwl8IFRLSVAgfCBBRVMgfCBUS0lQIHwgQUVTIHwKKy8vCXwJMCAgfCAgMSAgfCAgIDEgIHwgIDAgIHwgLT4gMHgwNgorLy8JfAkwICB8ICAxICB8ICAgMSAgfCAgMSAgfCAtPiAweDA3CisvLwl8CTEgIHwgIDAgIHwgICAwICB8ICAxICB8IC0+IDB4MDkKKy8vCXwJMSAgfCAgMCAgfCAgIDEgIHwgIDEgIHwgLT4gMHgwQgorLy8JfAkxICB8ICAxICB8ICAgMCAgfCAgMSAgfCAtPiAweDBECisvLwl8CTEgIHwgIDEgIHwgICAxICB8ICAwICB8IC0+IDB4MEUKKy8vCXwJMSAgfCAgMSAgfCAgIDEgIHwgIDEgIHwJLT4gMHgwRgorLy8JKy0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0rCisvLwordHlwZWRlZgllbnVtCV9XcGFNaXhQYWlyQ2lwaGVyCit7CisJTUlYX0NJUEhFUl9OT1RVU0UgCQkJPSAweDAwLAorCVdQQV9OT05FX1dQQTJfVEtJUEFFUwkJPSAweDAzLAkJLy8gV1BBMi1US0lQQUVTCisJV1BBX0FFU19XUEEyX1RLSVAgCQkJPSAweDA2LAorCVdQQV9BRVNfV1BBMl9US0lQQUVTCQk9IDB4MDcsCisJV1BBX1RLSVBfV1BBMl9BRVMJCQk9IDB4MDksCisJV1BBX1RLSVBfV1BBMl9US0lQQUVTCQk9IDB4MEIsCisJV1BBX1RLSVBBRVNfV1BBMl9OT05FCQk9IDB4MEMsCQkvLyBXUEEtVEtJUEFFUworCVdQQV9US0lQQUVTX1dQQTJfQUVTCQk9IDB4MEQsCisJV1BBX1RLSVBBRVNfV1BBMl9US0lQCQk9IDB4MEUsCisJV1BBX1RLSVBBRVNfV1BBMl9US0lQQUVTCT0gMHgwRiwKK30JV1BBX01JWF9QQUlSX0NJUEhFUjsKKwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9SU05fSUVfSEVBREVSX1NUUlVDVAl7CisJVUNIQVIJCUVpZDsKKwlVQ0hBUgkJTGVuZ3RoOworCVVTSE9SVAkJVmVyc2lvbjsJLy8gTGl0dGxlIGVuZGlhbiBmb3JtYXQKK30JUlNOX0lFX0hFQURFUl9TVFJVQ1QsICpQUlNOX0lFX0hFQURFUl9TVFJVQ1Q7CisKKy8vIENpcGhlciBzdWl0ZSBzZWxlY3RvciB0eXBlcwordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9DSVBIRVJfU1VJVEVfU1RSVUNUCXsKKwlVQ0hBUgkJT3VpWzNdOworCVVDSEFSCQlUeXBlOworfQlDSVBIRVJfU1VJVEVfU1RSVUNULCAqUENJUEhFUl9TVUlURV9TVFJVQ1Q7CisKKy8vIEF1dGhlbnRpY2F0aW9uIGFuZCBLZXkgTWFuYWdlbWVudCBzdWl0ZSBzZWxlY3RvcgordHlwZWRlZiBzdHJ1Y3QgUEFDS0VEIF9BS01fU1VJVEVfU1RSVUNUCXsKKwlVQ0hBUgkJT3VpWzNdOworCVVDSEFSCQlUeXBlOworfQlBS01fU1VJVEVfU1RSVUNULCAqUEFLTV9TVUlURV9TVFJVQ1Q7CisKKy8vIFJTTiBjYXBhYmlsaXR5Cit0eXBlZGVmIHN0cnVjdAlQQUNLRUQgX1JTTl9DQVBBQklMSVRZCXsKKwlVU0hPUlQJCVJzdjoxMDsKKwlVU0hPUlQJCUdUS1NBUmVwbGF5Q250OjI7CisJVVNIT1JUCQlQVEtTQVJlcGxheUNudDoyOworCVVTSE9SVAkJTm9QYWlyd2lzZToxOworCVVTSE9SVAkJUHJlQXV0aDoxOworfQlSU05fQ0FQQUJJTElUWSwgKlBSU05fQ0FQQUJJTElUWTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2RvdDExZC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9kb3QxMWQuaAppbmRleCA0OWY1M2ZlLi4yNDE3ZGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2RvdDExZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvZG90MTFkLmgKQEAgLTEsMTAxICsxLDEwMSBAQAotI2lmbmRlZiBfX0lOQ19ET1QxMURfSA0KLSNkZWZpbmUgX19JTkNfRE9UMTFEX0gNCi0NCi0jaW5jbHVkZSAiaWVlZTgwMjExLmgiDQotDQotLy8jZGVmaW5lIEVOQUJMRV9ET1QxMUQNCi0NCi0vLyNkZWZpbmUgRE9UMTFEX01BWF9DSE5MX05VTSA4Mw0KLQ0KLXR5cGVkZWYgc3RydWN0IF9DSE5MX1RYUE9XRVJfVFJJUExFIHsNCi0JdTggRmlyc3RDaG5sOw0KLQl1OCAgTnVtQ2hubHM7DQotCXU4ICBNYXhUeFBvd2VySW5EYm07DQotfUNITkxfVFhQT1dFUl9UUklQTEUsICpQQ0hOTF9UWFBPV0VSX1RSSVBMRTsNCi0NCi10eXBlZGVmIGVudW0gX0RPVDExRF9TVEFURSB7DQotCURPVDExRF9TVEFURV9OT05FID0gMCwNCi0JRE9UMTFEX1NUQVRFX0xFQVJORUQsDQotCURPVDExRF9TVEFURV9ET05FLA0KLX1ET1QxMURfU1RBVEU7DQotDQotdHlwZWRlZiBzdHJ1Y3QgX1JUX0RPVDExRF9JTkZPIHsNCi0JLy9ERUNMQVJFX1JUX09CSkVDVChSVF9ET1QxMURfSU5GTyk7DQotDQotCWJvb2wgYkVuYWJsZWQ7IC8vIGRvdDExTXVsdGlEb21haW5DYXBhYmlsaXR5RW5hYmxlZA0KLQ0KLQl1MTYgQ291bnRyeUllTGVuOyAvLyA+IDAgaWYgQ291bnRyeUllQnVmW10gY29udGFpbnMgdmFsaWQgY291bnRyeSBpbmZvcm1hdGlvbiBlbGVtZW50Lg0KLQl1OCAgQ291bnRyeUllQnVmW01BWF9JRV9MRU5dOw0KLQl1OCAgQ291bnRyeUllU3JjQWRkcls2XTsgLy8gU291cmNlIEFQIG9mIHRoZSBjb3VudHJ5IElFLg0KLQl1OCAgQ291bnRyeUllV2F0Y2hkb2c7IA0KLQ0KLQl1OCAgY2hhbm5lbF9tYXBbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOyAgLy8hISFWYWx1ZSAwOiBJbnZhbGlkLCAxOiBWYWxpZCAoYWN0aXZlIHNjYW4pLCAyOiBWYWxpZCAocGFzc2l2ZSBzY2FuKQ0KLQkvL3U4ICBDaG5sTGlzdExlbjsgLy8gI0J5dGVzIHZhbGlkIGluIENobmxMaXN0W10uDQotCS8vdTggIENobmxMaXN0W0RPVDExRF9NQVhfQ0hOTF9OVU1dOw0KLQl1OCAgTWF4VHhQd3JEYm1MaXN0W01BWF9DSEFOTkVMX05VTUJFUisxXTsNCi0NCi0JRE9UMTFEX1NUQVRFIFN0YXRlOw0KLX1SVF9ET1QxMURfSU5GTywgKlBSVF9ET1QxMURfSU5GTzsNCi0jZGVmaW5lIGVxTWFjQWRkcihhLGIpCQkoICgoYSlbMF09PShiKVswXSAmJiAoYSlbMV09PShiKVsxXSAmJiAoYSlbMl09PShiKVsyXSAmJiAoYSlbM109PShiKVszXSAmJiAoYSlbNF09PShiKVs0XSAmJiAoYSlbNV09PShiKVs1XSkgPyAxOjAgKQ0KLSNkZWZpbmUgY3BNYWNBZGRyKGRlcyxzcmMpCSAgICAgICgoZGVzKVswXT0oc3JjKVswXSwoZGVzKVsxXT0oc3JjKVsxXSwoZGVzKVsyXT0oc3JjKVsyXSwoZGVzKVszXT0oc3JjKVszXSwoZGVzKVs0XT0oc3JjKVs0XSwoZGVzKVs1XT0oc3JjKVs1XSkNCi0jZGVmaW5lIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KSAoKFBSVF9ET1QxMURfSU5GTykoKF9fcEllZWVEZXYpLT5wRG90MTFkSW5mbykpDQotDQotI2RlZmluZSBJU19ET1QxMURfRU5BQkxFKF9fcEllZWVEZXYpIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+YkVuYWJsZWQNCi0jZGVmaW5lIElTX0NPVU5UUllfSUVfVkFMSUQoX19wSWVlZURldikgKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllTGVuID4gMCkNCi0NCi0jZGVmaW5lIElTX0VRVUFMX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIGVxTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKSANCi0jZGVmaW5lIFVQREFURV9DSUVfU1JDKF9fcEllZWVEZXYsIF9fcFRhKSBjcE1hY0FkZHIoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVTcmNBZGRyLCBfX3BUYSkNCi0NCi0jZGVmaW5lIElTX0NPVU5UUllfSUVfQ0hBTkdFRChfX3BJZWVlRGV2LCBfX0llKSBcDQotCSgoKF9fSWUpLkxlbmd0aCA9PSAwIHx8IChfX0llKS5MZW5ndGggIT0gR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVMZW4pID8gXA0KLQlGQUxTRSA6IFwNCi0JKCFtZW1jbXAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVCdWYsIChfX0llKS5PY3RldCwgKF9fSWUpLkxlbmd0aCkpKQ0KLQ0KLSNkZWZpbmUgQ0lFX1dBVENIRE9HX1RIIDENCi0jZGVmaW5lIEdFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVXYXRjaGRvZw0KLSNkZWZpbmUgUkVTRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpIEdFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgPSAwIA0KLSNkZWZpbmUgVVBEQVRFX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSArK0dFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikNCi0NCi0jZGVmaW5lIElTX0RPVDExRF9TVEFURV9ET05FKF9fcEllZWVEZXYpIChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPlN0YXRlID09IERPVDExRF9TVEFURV9ET05FKQ0KLQ0KLQ0KLXZvaWQNCi1Eb3QxMWRfSW5pdCgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldg0KLQkpOw0KLQ0KLXZvaWQNCi1Eb3QxMWRfUmVzZXQoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYNCi0JKTsNCi0NCi12b2lkDQotRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwNCi0JdTggKgkJcFRhZGRyLA0KLQl1MTYJQ291dHJ5SWVMZW4sDQotCXU4ICogcENvdXRyeUllCSANCi0JKTsNCi0NCi11OA0KLURPVDExRF9HZXRNYXhUeFB3ckluRGJtKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LA0KLQl1OCBDaGFubmVsDQotCSk7DQotDQotdm9pZA0KLURPVDExRF9TY2FuQ29tcGxldGUoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2DQotCSk7DQotDQotaW50IElzTGVnYWxDaGFubmVsKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwNCi0JdTggY2hhbm5lbA0KLSk7DQotDQotaW50IFRvTGVnYWxDaGFubmVsKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwNCi0JdTggY2hhbm5lbA0KLSk7DQotDQotI2VuZGlmIC8vICNpZm5kZWYgX19JTkNfRE9UMTFEX0gNCisjaWZuZGVmIF9fSU5DX0RPVDExRF9ICisjZGVmaW5lIF9fSU5DX0RPVDExRF9ICisKKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKKworLy8jZGVmaW5lIEVOQUJMRV9ET1QxMUQKKworLy8jZGVmaW5lIERPVDExRF9NQVhfQ0hOTF9OVU0gODMKKwordHlwZWRlZiBzdHJ1Y3QgX0NITkxfVFhQT1dFUl9UUklQTEUgeworCXU4IEZpcnN0Q2hubDsKKwl1OCAgTnVtQ2hubHM7CisJdTggIE1heFR4UG93ZXJJbkRibTsKK31DSE5MX1RYUE9XRVJfVFJJUExFLCAqUENITkxfVFhQT1dFUl9UUklQTEU7CisKK3R5cGVkZWYgZW51bSBfRE9UMTFEX1NUQVRFIHsKKwlET1QxMURfU1RBVEVfTk9ORSA9IDAsCisJRE9UMTFEX1NUQVRFX0xFQVJORUQsCisJRE9UMTFEX1NUQVRFX0RPTkUsCit9RE9UMTFEX1NUQVRFOworCit0eXBlZGVmIHN0cnVjdCBfUlRfRE9UMTFEX0lORk8geworCS8vREVDTEFSRV9SVF9PQkpFQ1QoUlRfRE9UMTFEX0lORk8pOworCisJYm9vbCBiRW5hYmxlZDsgLy8gZG90MTFNdWx0aURvbWFpbkNhcGFiaWxpdHlFbmFibGVkCisKKwl1MTYgQ291bnRyeUllTGVuOyAvLyA+IDAgaWYgQ291bnRyeUllQnVmW10gY29udGFpbnMgdmFsaWQgY291bnRyeSBpbmZvcm1hdGlvbiBlbGVtZW50LgorCXU4ICBDb3VudHJ5SWVCdWZbTUFYX0lFX0xFTl07CisJdTggIENvdW50cnlJZVNyY0FkZHJbNl07IC8vIFNvdXJjZSBBUCBvZiB0aGUgY291bnRyeSBJRS4KKwl1OCAgQ291bnRyeUllV2F0Y2hkb2c7CisKKwl1OCAgY2hhbm5lbF9tYXBbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOyAgLy8hISFWYWx1ZSAwOiBJbnZhbGlkLCAxOiBWYWxpZCAoYWN0aXZlIHNjYW4pLCAyOiBWYWxpZCAocGFzc2l2ZSBzY2FuKQorCS8vdTggIENobmxMaXN0TGVuOyAvLyAjQnl0ZXMgdmFsaWQgaW4gQ2hubExpc3RbXS4KKwkvL3U4ICBDaG5sTGlzdFtET1QxMURfTUFYX0NITkxfTlVNXTsKKwl1OCAgTWF4VHhQd3JEYm1MaXN0W01BWF9DSEFOTkVMX05VTUJFUisxXTsKKworCURPVDExRF9TVEFURSBTdGF0ZTsKK31SVF9ET1QxMURfSU5GTywgKlBSVF9ET1QxMURfSU5GTzsKKyNkZWZpbmUgZXFNYWNBZGRyKGEsYikJCSggKChhKVswXT09KGIpWzBdICYmIChhKVsxXT09KGIpWzFdICYmIChhKVsyXT09KGIpWzJdICYmIChhKVszXT09KGIpWzNdICYmIChhKVs0XT09KGIpWzRdICYmIChhKVs1XT09KGIpWzVdKSA/IDE6MCApCisjZGVmaW5lIGNwTWFjQWRkcihkZXMsc3JjKQkgICAgICAoKGRlcylbMF09KHNyYylbMF0sKGRlcylbMV09KHNyYylbMV0sKGRlcylbMl09KHNyYylbMl0sKGRlcylbM109KHNyYylbM10sKGRlcylbNF09KHNyYylbNF0sKGRlcylbNV09KHNyYylbNV0pCisjZGVmaW5lIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KSAoKFBSVF9ET1QxMURfSU5GTykoKF9fcEllZWVEZXYpLT5wRG90MTFkSW5mbykpCisKKyNkZWZpbmUgSVNfRE9UMTFEX0VOQUJMRShfX3BJZWVlRGV2KSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPmJFbmFibGVkCisjZGVmaW5lIElTX0NPVU5UUllfSUVfVkFMSUQoX19wSWVlZURldikgKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllTGVuID4gMCkKKworI2RlZmluZSBJU19FUVVBTF9DSUVfU1JDKF9fcEllZWVEZXYsIF9fcFRhKSBlcU1hY0FkZHIoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVTcmNBZGRyLCBfX3BUYSkKKyNkZWZpbmUgVVBEQVRFX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIGNwTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKQorCisjZGVmaW5lIElTX0NPVU5UUllfSUVfQ0hBTkdFRChfX3BJZWVlRGV2LCBfX0llKSBcCisJKCgoX19JZSkuTGVuZ3RoID09IDAgfHwgKF9fSWUpLkxlbmd0aCAhPSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUxlbikgPyBcCisJRkFMU0UgOiBcCisJKCFtZW1jbXAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVCdWYsIChfX0llKS5PY3RldCwgKF9fSWUpLkxlbmd0aCkpKQorCisjZGVmaW5lIENJRV9XQVRDSERPR19USCAxCisjZGVmaW5lIEdFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVXYXRjaGRvZworI2RlZmluZSBSRVNFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSA9IDAKKyNkZWZpbmUgVVBEQVRFX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSArK0dFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikKKworI2RlZmluZSBJU19ET1QxMURfU1RBVEVfRE9ORShfX3BJZWVlRGV2KSAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5TdGF0ZSA9PSBET1QxMURfU1RBVEVfRE9ORSkKKworCit2b2lkCitEb3QxMWRfSW5pdCgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2CisJKTsKKwordm9pZAorRG90MTFkX1Jlc2V0KAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYKKwkpOworCit2b2lkCitEb3QxMWRfVXBkYXRlQ291bnRyeUllKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsCisJdTggKgkJcFRhZGRyLAorCXUxNglDb3V0cnlJZUxlbiwKKwl1OCAqIHBDb3V0cnlJZQorCSk7CisKK3U4CitET1QxMURfR2V0TWF4VHhQd3JJbkRibSgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LAorCXU4IENoYW5uZWwKKwkpOworCit2b2lkCitET1QxMURfU2NhbkNvbXBsZXRlKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2CisJKTsKKworaW50IElzTGVnYWxDaGFubmVsKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LAorCXU4IGNoYW5uZWwKKyk7CisKK2ludCBUb0xlZ2FsQ2hhbm5lbCgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwKKwl1OCBjaGFubmVsCispOworCisjZW5kaWYgLy8gI2lmbmRlZiBfX0lOQ19ET1QxMURfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvZG90MTFkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9kb3QxMWQuYwppbmRleCA1ZDhiNzUyZi4uNTRiY2RjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvZG90MTFkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvZG90MTFkLmMKQEAgLTEsMjQ2ICsxLDI0NiBAQAotI2lmZGVmIEVOQUJMRV9ET1QxMUQNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8JRmlsZToNCi0vLwkJRG90MTFkLmMNCi0vLw0KLS8vCURlc2NyaXB0aW9uOg0KLS8vCQlJbXBsZW1lbnQgODAyLjExZC4gDQotLy8NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotI2luY2x1ZGUgImRvdDExZC5oIg0KLQ0KLXZvaWQNCi1Eb3QxMWRfSW5pdChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkNCi17DQotCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhpZWVlKTsNCi0NCi0JcERvdDExZEluZm8tPmJFbmFibGVkID0gMDsNCi0NCi0JcERvdDExZEluZm8tPlN0YXRlID0gRE9UMTFEX1NUQVRFX05PTkU7DQotCXBEb3QxMWRJbmZvLT5Db3VudHJ5SWVMZW4gPSAwOw0KLQltZW1zZXQocERvdDExZEluZm8tPmNoYW5uZWxfbWFwLCAwLCBNQVhfQ0hBTk5FTF9OVU1CRVIrMSk7ICANCi0JbWVtc2V0KHBEb3QxMWRJbmZvLT5NYXhUeFB3ckRibUxpc3QsIDB4RkYsIE1BWF9DSEFOTkVMX05VTUJFUisxKTsNCi0JUkVTRVRfQ0lFX1dBVENIRE9HKGllZWUpOw0KLQ0KLQlwcmludGsoIkRvdDExZF9Jbml0KClcbiIpOw0KLX0NCi0NCi0vLw0KLS8vCURlc2NyaXB0aW9uOg0KLS8vCQlSZXNldCB0byB0aGUgc3RhdGUgYXMgd2UgYXJlIGp1c3QgZW50ZXJpbmcgYSByZWd1bGF0b3J5IGRvbWFpbi4NCi0vLw0KLXZvaWQNCi1Eb3QxMWRfUmVzZXQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpDQotew0KLQl1MzIgaTsNCi0JUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGllZWUpOw0KLQ0KLQkvLyBDbGVhciBvbGQgY2hhbm5lbCBtYXANCi0JbWVtc2V0KHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcCwgMCwgTUFYX0NIQU5ORUxfTlVNQkVSKzEpOw0KLQltZW1zZXQocERvdDExZEluZm8tPk1heFR4UHdyRGJtTGlzdCwgMHhGRiwgTUFYX0NIQU5ORUxfTlVNQkVSKzEpOw0KLQkvLyBTZXQgbmV3IGNoYW5uZWwgbWFwDQotCWZvciAoaT0xOyBpPD0xMTsgaSsrKSB7DQotCQkocERvdDExZEluZm8tPmNoYW5uZWxfbWFwKVtpXSA9IDE7DQotCX0NCi0JZm9yIChpPTEyOyBpPD0xNDsgaSsrKSB7DQotCQkocERvdDExZEluZm8tPmNoYW5uZWxfbWFwKVtpXSA9IDI7DQotCX0NCi0NCi0JcERvdDExZEluZm8tPlN0YXRlID0gRE9UMTFEX1NUQVRFX05PTkU7DQotCXBEb3QxMWRJbmZvLT5Db3VudHJ5SWVMZW4gPSAwOw0KLQlSRVNFVF9DSUVfV0FUQ0hET0coaWVlZSk7DQotDQotCS8vcHJpbnRrKCJEb3QxMWRfUmVzZXQoKVxuIik7DQotfQ0KLQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCVVwZGF0ZSBjb3VudHJ5IElFIGZyb20gQmVhY29uIG9yIFByb2JlIFJlc29wbnNlIA0KLS8vCQlhbmQgY29uZmlndXJlIFBIWSBmb3Igb3BlcmF0aW9uIGluIHRoZSByZWd1bGF0b3J5IGRvbWFpbi4NCi0vLw0KLS8vCVRPRE86IA0KLS8vCQlDb25maWd1cmUgVHggcG93ZXIuDQotLy8NCi0vLwlBc3N1bXB0aW9uOg0KLS8vCQkxLiBJU19ET1QxMURfRU5BQkxFKCkgaXMgVFJVRS4NCi0vLwkJMi4gSW5wdXQgSUUgaXMgYW4gdmFsaWQgb25lLg0KLS8vDQotdm9pZA0KLURvdDExZF9VcGRhdGVDb3VudHJ5SWUoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsDQotCXU4ICoJCXBUYWRkciwNCi0JdTE2CUNvdXRyeUllTGVuLA0KLQl1OCAqIHBDb3V0cnlJZQkgDQotCSkNCi17DQotCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhkZXYpOw0KLQl1OCBpLCBqLCBOdW1UcmlwbGVzLCBNYXhDaG5sTnVtOw0KLQlQQ0hOTF9UWFBPV0VSX1RSSVBMRSBwVHJpcGxlOw0KLQ0KLQlpZigoQ291dHJ5SWVMZW4gLSAzKSUzICE9IDApDQotCXsNCi0JCXByaW50aygiRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgpOiBJbnZhbGlkIGNvdW50cnkgSUUsIHNraXAgaXQuLi4uLi4uLjFcbiIpOw0KLQkJRG90MTFkX1Jlc2V0KGRldik7DQotCQlyZXR1cm47DQotCX0NCi0NCi0JbWVtc2V0KHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcCwgMCwgTUFYX0NIQU5ORUxfTlVNQkVSKzEpOw0KLQltZW1zZXQocERvdDExZEluZm8tPk1heFR4UHdyRGJtTGlzdCwgMHhGRiwgTUFYX0NIQU5ORUxfTlVNQkVSKzEpOw0KLQlNYXhDaG5sTnVtID0gMDsNCi0JTnVtVHJpcGxlcyA9IChDb3V0cnlJZUxlbiAtIDMpIC8gMzsgLy8gc2tpcCAzLWJ5dGUgY291bnRyeSBzdHJpbmcuDQotCXBUcmlwbGUgPSAoUENITkxfVFhQT1dFUl9UUklQTEUpKHBDb3V0cnlJZSArIDMpOw0KLQlmb3IoaSA9IDA7IGkgPCBOdW1UcmlwbGVzOyBpKyspDQotCXsNCi0JCWlmKE1heENobmxOdW0gPj0gcFRyaXBsZS0+Rmlyc3RDaG5sKQ0KLQkJeyAvLyBJdCBpcyBub3QgaW4gYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgb3JkZXIsIHNvIHN0b3AgcHJvY2Vzc2luZy4NCi0JCQlwcmludGsoIkRvdDExZF9VcGRhdGVDb3VudHJ5SWUoKTogSW52YWxpZCBjb3VudHJ5IElFLCBza2lwIGl0Li4uLi4uLi4xXG4iKTsNCi0JCQlEb3QxMWRfUmVzZXQoZGV2KTsNCi0JCQlyZXR1cm47IA0KLQkJfQ0KLQkJaWYoTUFYX0NIQU5ORUxfTlVNQkVSIDwgKHBUcmlwbGUtPkZpcnN0Q2hubCArIHBUcmlwbGUtPk51bUNobmxzKSkNCi0JCXsgLy8gSXQgaXMgbm90IGEgdmFsaWQgc2V0IG9mIGNoYW5uZWwgaWQsIHNvIHN0b3AgcHJvY2Vzc2luZy4NCi0JCQlwcmludGsoIkRvdDExZF9VcGRhdGVDb3VudHJ5SWUoKTogSW52YWxpZCBjb3VudHJ5IElFLCBza2lwIGl0Li4uLi4uLi4yXG4iKTsNCi0JCQlEb3QxMWRfUmVzZXQoZGV2KTsNCi0JCQlyZXR1cm47IA0KLQkJfQ0KLQ0KLQkJZm9yKGogPSAwIDsgaiA8IHBUcmlwbGUtPk51bUNobmxzOyBqKyspDQotCQl7DQotCQkJcERvdDExZEluZm8tPmNoYW5uZWxfbWFwW3BUcmlwbGUtPkZpcnN0Q2hubCArIGpdID0gMTsNCi0JCQlwRG90MTFkSW5mby0+TWF4VHhQd3JEYm1MaXN0W3BUcmlwbGUtPkZpcnN0Q2hubCArIGpdID0gcFRyaXBsZS0+TWF4VHhQb3dlckluRGJtOw0KLQkJCU1heENobmxOdW0gPSBwVHJpcGxlLT5GaXJzdENobmwgKyBqOw0KLQkJfQkNCi0NCi0JCXBUcmlwbGUgPSAoUENITkxfVFhQT1dFUl9UUklQTEUpKCh1OCopcFRyaXBsZSArIDMpOw0KLQl9DQotI2lmIDENCi0JLy9wcmludGsoIkRvdDExZF9VcGRhdGVDb3VudHJ5SWUoKTogQ2hhbm5lbCBMaXN0OlxuIik7DQotCXByaW50aygiQ2hhbm5lbCBMaXN0OiIpOw0KLQlmb3IoaT0xOyBpPD0gTUFYX0NIQU5ORUxfTlVNQkVSOyBpKyspDQotCQlpZihwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbaV0gPiAwKQ0KLQkJCXByaW50aygiICVkIiwgaSk7DQotCXByaW50aygiXG4iKTsNCi0jZW5kaWYNCi0NCi0JVVBEQVRFX0NJRV9TUkMoZGV2LCBwVGFkZHIpOw0KLQ0KLQlwRG90MTFkSW5mby0+Q291bnRyeUllTGVuID0gQ291dHJ5SWVMZW47DQotCW1lbWNweShwRG90MTFkSW5mby0+Q291bnRyeUllQnVmLCBwQ291dHJ5SWUsQ291dHJ5SWVMZW4pOw0KLQlwRG90MTFkSW5mby0+U3RhdGUgPSBET1QxMURfU1RBVEVfTEVBUk5FRDsNCi19DQotDQotdm9pZCBkdW1wX2NobmxfbWFwKHU4ICogY2hhbm5lbF9tYXApDQotew0KLQlpbnQgaTsNCi0JcHJpbnRrKCJDaGFubmVsIExpc3Q6Iik7DQotCWZvcihpPTE7IGk8PSBNQVhfQ0hBTk5FTF9OVU1CRVI7IGkrKykNCi0JCWlmKGNoYW5uZWxfbWFwW2ldID4gMCkNCi0JCQlwcmludGsoIiAlZCglZCkiLCBpLCBjaGFubmVsX21hcFtpXSk7DQotCXByaW50aygiXG4iKTsNCi19DQotDQotdTgNCi1ET1QxMURfR2V0TWF4VHhQd3JJbkRibSgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwNCi0JdTggQ2hhbm5lbA0KLQkpDQotew0KLQlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oZGV2KTsNCi0JdTggTWF4VHhQd3JJbkRibSA9IDI1NTsNCi0NCi0JaWYoTUFYX0NIQU5ORUxfTlVNQkVSIDwgQ2hhbm5lbCkNCi0JeyANCi0JCXByaW50aygiRE9UMTFEX0dldE1heFR4UHdySW5EYm0oKTogSW52YWxpZCBDaGFubmVsXG4iKTsNCi0JCXJldHVybiBNYXhUeFB3ckluRGJtOyANCi0JfQ0KLQlpZihwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbQ2hhbm5lbF0pDQotCXsNCi0JCU1heFR4UHdySW5EYm0gPSBwRG90MTFkSW5mby0+TWF4VHhQd3JEYm1MaXN0W0NoYW5uZWxdOwkNCi0JfQ0KLQ0KLQlyZXR1cm4gTWF4VHhQd3JJbkRibTsNCi19DQotDQotDQotdm9pZA0KLURPVDExRF9TY2FuQ29tcGxldGUoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2DQotCSkNCi17DQotCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhkZXYpOw0KLQ0KLQlzd2l0Y2gocERvdDExZEluZm8tPlN0YXRlKQ0KLQl7DQotCWNhc2UgRE9UMTFEX1NUQVRFX0xFQVJORUQ6DQotCQlwRG90MTFkSW5mby0+U3RhdGUgPSBET1QxMURfU1RBVEVfRE9ORTsNCi0JCWJyZWFrOw0KLQ0KLQljYXNlIERPVDExRF9TVEFURV9ET05FOg0KLQkJaWYoIEdFVF9DSUVfV0FUQ0hET0coZGV2KSA9PSAwICkNCi0JCXsgLy8gUmVzZXQgY291bnRyeSBJRSBpZiBwcmV2aW91cyBvbmUgaXMgZ29uZS4gDQotCQkJRG90MTFkX1Jlc2V0KGRldik7IA0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgRE9UMTFEX1NUQVRFX05PTkU6DQotCQlicmVhazsNCi0JfQ0KLX0NCi0NCi1pbnQgSXNMZWdhbENoYW5uZWwoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LA0KLQl1OCBjaGFubmVsDQotKQ0KLXsNCi0JUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGRldik7DQotDQotCWlmKE1BWF9DSEFOTkVMX05VTUJFUiA8IGNoYW5uZWwpDQotCXsgDQotCQlwcmludGsoIklzTGVnYWxDaGFubmVsKCk6IEludmFsaWQgQ2hhbm5lbFxuIik7DQotCQlyZXR1cm4gMDsgDQotCX0NCi0JaWYocERvdDExZEluZm8tPmNoYW5uZWxfbWFwW2NoYW5uZWxdID4gMCkNCi0JCXJldHVybiAxOw0KLQlyZXR1cm4gMDsNCi19DQotDQotaW50IFRvTGVnYWxDaGFubmVsKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldiwNCi0JdTggY2hhbm5lbA0KLSkNCi17DQotCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhkZXYpOw0KLQl1OCBkZWZhdWx0X2NobiA9IDA7DQotCXUzMiBpID0gMDsNCi0NCi0JZm9yIChpPTE7IGk8PSBNQVhfQ0hBTk5FTF9OVU1CRVI7IGkrKykNCi0Jew0KLQkJaWYocERvdDExZEluZm8tPmNoYW5uZWxfbWFwW2ldID4gMCkNCi0JCXsNCi0JCQlkZWZhdWx0X2NobiA9IGk7DQotCQkJYnJlYWs7DQotCQl9DQotCX0NCi0NCi0JaWYoTUFYX0NIQU5ORUxfTlVNQkVSIDwgY2hhbm5lbCkNCi0JeyANCi0JCXByaW50aygiSXNMZWdhbENoYW5uZWwoKTogSW52YWxpZCBDaGFubmVsXG4iKTsNCi0JCXJldHVybiBkZWZhdWx0X2NobjsgDQotCX0NCi0JDQotCWlmKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcFtjaGFubmVsXSA+IDApDQotCQlyZXR1cm4gY2hhbm5lbDsNCi0JDQotCXJldHVybiBkZWZhdWx0X2NobjsNCi19DQotDQotI2lmIDANCi1FWFBPUlRfU1lNQk9MKERvdDExZF9Jbml0KTsNCi1FWFBPUlRfU1lNQk9MKERvdDExZF9SZXNldCk7DQotRVhQT1JUX1NZTUJPTChEb3QxMWRfVXBkYXRlQ291bnRyeUllKTsNCi1FWFBPUlRfU1lNQk9MKERPVDExRF9HZXRNYXhUeFB3ckluRGJtKTsNCi1FWFBPUlRfU1lNQk9MKERPVDExRF9TY2FuQ29tcGxldGUpOw0KLUVYUE9SVF9TWU1CT0woSXNMZWdhbENoYW5uZWwpOw0KLUVYUE9SVF9TWU1CT0woVG9MZWdhbENoYW5uZWwpOw0KLSNlbmRpZg0KLSNlbmRpZg0KKyNpZmRlZiBFTkFCTEVfRE9UMTFECisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLwlGaWxlOgorLy8JCURvdDExZC5jCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJSW1wbGVtZW50IDgwMi4xMWQuCisvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaW5jbHVkZSAiZG90MTFkLmgiCisKK3ZvaWQKK0RvdDExZF9Jbml0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQoreworCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhpZWVlKTsKKworCXBEb3QxMWRJbmZvLT5iRW5hYmxlZCA9IDA7CisKKwlwRG90MTFkSW5mby0+U3RhdGUgPSBET1QxMURfU1RBVEVfTk9ORTsKKwlwRG90MTFkSW5mby0+Q291bnRyeUllTGVuID0gMDsKKwltZW1zZXQocERvdDExZEluZm8tPmNoYW5uZWxfbWFwLCAwLCBNQVhfQ0hBTk5FTF9OVU1CRVIrMSk7CisJbWVtc2V0KHBEb3QxMWRJbmZvLT5NYXhUeFB3ckRibUxpc3QsIDB4RkYsIE1BWF9DSEFOTkVMX05VTUJFUisxKTsKKwlSRVNFVF9DSUVfV0FUQ0hET0coaWVlZSk7CisKKwlwcmludGsoIkRvdDExZF9Jbml0KClcbiIpOworfQorCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJUmVzZXQgdG8gdGhlIHN0YXRlIGFzIHdlIGFyZSBqdXN0IGVudGVyaW5nIGEgcmVndWxhdG9yeSBkb21haW4uCisvLwordm9pZAorRG90MTFkX1Jlc2V0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQoreworCXUzMiBpOworCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhpZWVlKTsKKworCS8vIENsZWFyIG9sZCBjaGFubmVsIG1hcAorCW1lbXNldChwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXAsIDAsIE1BWF9DSEFOTkVMX05VTUJFUisxKTsKKwltZW1zZXQocERvdDExZEluZm8tPk1heFR4UHdyRGJtTGlzdCwgMHhGRiwgTUFYX0NIQU5ORUxfTlVNQkVSKzEpOworCS8vIFNldCBuZXcgY2hhbm5lbCBtYXAKKwlmb3IgKGk9MTsgaTw9MTE7IGkrKykgeworCQkocERvdDExZEluZm8tPmNoYW5uZWxfbWFwKVtpXSA9IDE7CisJfQorCWZvciAoaT0xMjsgaTw9MTQ7IGkrKykgeworCQkocERvdDExZEluZm8tPmNoYW5uZWxfbWFwKVtpXSA9IDI7CisJfQorCisJcERvdDExZEluZm8tPlN0YXRlID0gRE9UMTFEX1NUQVRFX05PTkU7CisJcERvdDExZEluZm8tPkNvdW50cnlJZUxlbiA9IDA7CisJUkVTRVRfQ0lFX1dBVENIRE9HKGllZWUpOworCisJLy9wcmludGsoIkRvdDExZF9SZXNldCgpXG4iKTsKK30KKworLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCVVwZGF0ZSBjb3VudHJ5IElFIGZyb20gQmVhY29uIG9yIFByb2JlIFJlc29wbnNlCisvLwkJYW5kIGNvbmZpZ3VyZSBQSFkgZm9yIG9wZXJhdGlvbiBpbiB0aGUgcmVndWxhdG9yeSBkb21haW4uCisvLworLy8JVE9ETzoKKy8vCQlDb25maWd1cmUgVHggcG93ZXIuCisvLworLy8JQXNzdW1wdGlvbjoKKy8vCQkxLiBJU19ET1QxMURfRU5BQkxFKCkgaXMgVFJVRS4KKy8vCQkyLiBJbnB1dCBJRSBpcyBhbiB2YWxpZCBvbmUuCisvLwordm9pZAorRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LAorCXU4ICoJCXBUYWRkciwKKwl1MTYJQ291dHJ5SWVMZW4sCisJdTggKiBwQ291dHJ5SWUKKwkpCit7CisJUFJUX0RPVDExRF9JTkZPIHBEb3QxMWRJbmZvID0gR0VUX0RPVDExRF9JTkZPKGRldik7CisJdTggaSwgaiwgTnVtVHJpcGxlcywgTWF4Q2hubE51bTsKKwlQQ0hOTF9UWFBPV0VSX1RSSVBMRSBwVHJpcGxlOworCisJaWYoKENvdXRyeUllTGVuIC0gMyklMyAhPSAwKQorCXsKKwkJcHJpbnRrKCJEb3QxMWRfVXBkYXRlQ291bnRyeUllKCk6IEludmFsaWQgY291bnRyeSBJRSwgc2tpcCBpdC4uLi4uLi4uMVxuIik7CisJCURvdDExZF9SZXNldChkZXYpOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcCwgMCwgTUFYX0NIQU5ORUxfTlVNQkVSKzEpOworCW1lbXNldChwRG90MTFkSW5mby0+TWF4VHhQd3JEYm1MaXN0LCAweEZGLCBNQVhfQ0hBTk5FTF9OVU1CRVIrMSk7CisJTWF4Q2hubE51bSA9IDA7CisJTnVtVHJpcGxlcyA9IChDb3V0cnlJZUxlbiAtIDMpIC8gMzsgLy8gc2tpcCAzLWJ5dGUgY291bnRyeSBzdHJpbmcuCisJcFRyaXBsZSA9IChQQ0hOTF9UWFBPV0VSX1RSSVBMRSkocENvdXRyeUllICsgMyk7CisJZm9yKGkgPSAwOyBpIDwgTnVtVHJpcGxlczsgaSsrKQorCXsKKwkJaWYoTWF4Q2hubE51bSA+PSBwVHJpcGxlLT5GaXJzdENobmwpCisJCXsgLy8gSXQgaXMgbm90IGluIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIG9yZGVyLCBzbyBzdG9wIHByb2Nlc3NpbmcuCisJCQlwcmludGsoIkRvdDExZF9VcGRhdGVDb3VudHJ5SWUoKTogSW52YWxpZCBjb3VudHJ5IElFLCBza2lwIGl0Li4uLi4uLi4xXG4iKTsKKwkJCURvdDExZF9SZXNldChkZXYpOworCQkJcmV0dXJuOworCQl9CisJCWlmKE1BWF9DSEFOTkVMX05VTUJFUiA8IChwVHJpcGxlLT5GaXJzdENobmwgKyBwVHJpcGxlLT5OdW1DaG5scykpCisJCXsgLy8gSXQgaXMgbm90IGEgdmFsaWQgc2V0IG9mIGNoYW5uZWwgaWQsIHNvIHN0b3AgcHJvY2Vzc2luZy4KKwkJCXByaW50aygiRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgpOiBJbnZhbGlkIGNvdW50cnkgSUUsIHNraXAgaXQuLi4uLi4uLjJcbiIpOworCQkJRG90MTFkX1Jlc2V0KGRldik7CisJCQlyZXR1cm47CisJCX0KKworCQlmb3IoaiA9IDAgOyBqIDwgcFRyaXBsZS0+TnVtQ2hubHM7IGorKykKKwkJeworCQkJcERvdDExZEluZm8tPmNoYW5uZWxfbWFwW3BUcmlwbGUtPkZpcnN0Q2hubCArIGpdID0gMTsKKwkJCXBEb3QxMWRJbmZvLT5NYXhUeFB3ckRibUxpc3RbcFRyaXBsZS0+Rmlyc3RDaG5sICsgal0gPSBwVHJpcGxlLT5NYXhUeFBvd2VySW5EYm07CisJCQlNYXhDaG5sTnVtID0gcFRyaXBsZS0+Rmlyc3RDaG5sICsgajsKKwkJfQorCisJCXBUcmlwbGUgPSAoUENITkxfVFhQT1dFUl9UUklQTEUpKCh1OCopcFRyaXBsZSArIDMpOworCX0KKyNpZiAxCisJLy9wcmludGsoIkRvdDExZF9VcGRhdGVDb3VudHJ5SWUoKTogQ2hhbm5lbCBMaXN0OlxuIik7CisJcHJpbnRrKCJDaGFubmVsIExpc3Q6Iik7CisJZm9yKGk9MTsgaTw9IE1BWF9DSEFOTkVMX05VTUJFUjsgaSsrKQorCQlpZihwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbaV0gPiAwKQorCQkJcHJpbnRrKCIgJWQiLCBpKTsKKwlwcmludGsoIlxuIik7CisjZW5kaWYKKworCVVQREFURV9DSUVfU1JDKGRldiwgcFRhZGRyKTsKKworCXBEb3QxMWRJbmZvLT5Db3VudHJ5SWVMZW4gPSBDb3V0cnlJZUxlbjsKKwltZW1jcHkocERvdDExZEluZm8tPkNvdW50cnlJZUJ1ZiwgcENvdXRyeUllLENvdXRyeUllTGVuKTsKKwlwRG90MTFkSW5mby0+U3RhdGUgPSBET1QxMURfU1RBVEVfTEVBUk5FRDsKK30KKwordm9pZCBkdW1wX2NobmxfbWFwKHU4ICogY2hhbm5lbF9tYXApCit7CisJaW50IGk7CisJcHJpbnRrKCJDaGFubmVsIExpc3Q6Iik7CisJZm9yKGk9MTsgaTw9IE1BWF9DSEFOTkVMX05VTUJFUjsgaSsrKQorCQlpZihjaGFubmVsX21hcFtpXSA+IDApCisJCQlwcmludGsoIiAlZCglZCkiLCBpLCBjaGFubmVsX21hcFtpXSk7CisJcHJpbnRrKCJcbiIpOworfQorCit1OAorRE9UMTFEX0dldE1heFR4UHdySW5EYm0oCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwKKwl1OCBDaGFubmVsCisJKQoreworCVBSVF9ET1QxMURfSU5GTyBwRG90MTFkSW5mbyA9IEdFVF9ET1QxMURfSU5GTyhkZXYpOworCXU4IE1heFR4UHdySW5EYm0gPSAyNTU7CisKKwlpZihNQVhfQ0hBTk5FTF9OVU1CRVIgPCBDaGFubmVsKQorCXsKKwkJcHJpbnRrKCJET1QxMURfR2V0TWF4VHhQd3JJbkRibSgpOiBJbnZhbGlkIENoYW5uZWxcbiIpOworCQlyZXR1cm4gTWF4VHhQd3JJbkRibTsKKwl9CisJaWYocERvdDExZEluZm8tPmNoYW5uZWxfbWFwW0NoYW5uZWxdKQorCXsKKwkJTWF4VHhQd3JJbkRibSA9IHBEb3QxMWRJbmZvLT5NYXhUeFB3ckRibUxpc3RbQ2hhbm5lbF07CisJfQorCisJcmV0dXJuIE1heFR4UHdySW5EYm07Cit9CisKKwordm9pZAorRE9UMTFEX1NjYW5Db21wbGV0ZSgKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldgorCSkKK3sKKwlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oZGV2KTsKKworCXN3aXRjaChwRG90MTFkSW5mby0+U3RhdGUpCisJeworCWNhc2UgRE9UMTFEX1NUQVRFX0xFQVJORUQ6CisJCXBEb3QxMWRJbmZvLT5TdGF0ZSA9IERPVDExRF9TVEFURV9ET05FOworCQlicmVhazsKKworCWNhc2UgRE9UMTFEX1NUQVRFX0RPTkU6CisJCWlmKCBHRVRfQ0lFX1dBVENIRE9HKGRldikgPT0gMCApCisJCXsgLy8gUmVzZXQgY291bnRyeSBJRSBpZiBwcmV2aW91cyBvbmUgaXMgZ29uZS4KKwkJCURvdDExZF9SZXNldChkZXYpOworCQl9CisJCWJyZWFrOworCWNhc2UgRE9UMTFEX1NUQVRFX05PTkU6CisJCWJyZWFrOworCX0KK30KKworaW50IElzTGVnYWxDaGFubmVsKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LAorCXU4IGNoYW5uZWwKKykKK3sKKwlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oZGV2KTsKKworCWlmKE1BWF9DSEFOTkVMX05VTUJFUiA8IGNoYW5uZWwpCisJeworCQlwcmludGsoIklzTGVnYWxDaGFubmVsKCk6IEludmFsaWQgQ2hhbm5lbFxuIik7CisJCXJldHVybiAwOworCX0KKwlpZihwRG90MTFkSW5mby0+Y2hhbm5lbF9tYXBbY2hhbm5lbF0gPiAwKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworaW50IFRvTGVnYWxDaGFubmVsKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LAorCXU4IGNoYW5uZWwKKykKK3sKKwlQUlRfRE9UMTFEX0lORk8gcERvdDExZEluZm8gPSBHRVRfRE9UMTFEX0lORk8oZGV2KTsKKwl1OCBkZWZhdWx0X2NobiA9IDA7CisJdTMyIGkgPSAwOworCisJZm9yIChpPTE7IGk8PSBNQVhfQ0hBTk5FTF9OVU1CRVI7IGkrKykKKwl7CisJCWlmKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcFtpXSA+IDApCisJCXsKKwkJCWRlZmF1bHRfY2huID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYoTUFYX0NIQU5ORUxfTlVNQkVSIDwgY2hhbm5lbCkKKwl7CisJCXByaW50aygiSXNMZWdhbENoYW5uZWwoKTogSW52YWxpZCBDaGFubmVsXG4iKTsKKwkJcmV0dXJuIGRlZmF1bHRfY2huOworCX0KKworCWlmKHBEb3QxMWRJbmZvLT5jaGFubmVsX21hcFtjaGFubmVsXSA+IDApCisJCXJldHVybiBjaGFubmVsOworCisJcmV0dXJuIGRlZmF1bHRfY2huOworfQorCisjaWYgMAorRVhQT1JUX1NZTUJPTChEb3QxMWRfSW5pdCk7CitFWFBPUlRfU1lNQk9MKERvdDExZF9SZXNldCk7CitFWFBPUlRfU1lNQk9MKERvdDExZF9VcGRhdGVDb3VudHJ5SWUpOworRVhQT1JUX1NZTUJPTChET1QxMURfR2V0TWF4VHhQd3JJbkRibSk7CitFWFBPUlRfU1lNQk9MKERPVDExRF9TY2FuQ29tcGxldGUpOworRVhQT1JUX1NZTUJPTChJc0xlZ2FsQ2hhbm5lbCk7CitFWFBPUlRfU1lNQk9MKFRvTGVnYWxDaGFubmVsKTsKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9kb3QxMWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2RvdDExZC5oCmluZGV4IDY0YmNmMTUuLjgyNTc2YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2RvdDExZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2RvdDExZC5oCkBAIC0xLDEwMiArMSwxMDIgQEAKLSNpZm5kZWYgX19JTkNfRE9UMTFEX0gNCi0jZGVmaW5lIF9fSU5DX0RPVDExRF9IDQotDQotI2luY2x1ZGUgImllZWU4MDIxMS5oIg0KLQ0KLS8vI2RlZmluZSBFTkFCTEVfRE9UMTFEDQotDQotLy8jZGVmaW5lIERPVDExRF9NQVhfQ0hOTF9OVU0gODMNCi0NCi10eXBlZGVmIHN0cnVjdCBfQ0hOTF9UWFBPV0VSX1RSSVBMRSB7DQotCXU4IEZpcnN0Q2hubDsNCi0JdTggIE51bUNobmxzOw0KLQl1OCAgTWF4VHhQb3dlckluRGJtOw0KLX1DSE5MX1RYUE9XRVJfVFJJUExFLCAqUENITkxfVFhQT1dFUl9UUklQTEU7DQotDQotdHlwZWRlZiBlbnVtIF9ET1QxMURfU1RBVEUgew0KLQlET1QxMURfU1RBVEVfTk9ORSA9IDAsDQotCURPVDExRF9TVEFURV9MRUFSTkVELA0KLQlET1QxMURfU1RBVEVfRE9ORSwNCi19RE9UMTFEX1NUQVRFOw0KLQ0KLXR5cGVkZWYgc3RydWN0IF9SVF9ET1QxMURfSU5GTyB7DQotCS8vREVDTEFSRV9SVF9PQkpFQ1QoUlRfRE9UMTFEX0lORk8pOw0KLQ0KLQlib29sIGJFbmFibGVkOyAvLyBkb3QxMU11bHRpRG9tYWluQ2FwYWJpbGl0eUVuYWJsZWQNCi0NCi0JdTE2IENvdW50cnlJZUxlbjsgLy8gPiAwIGlmIENvdW50cnlJZUJ1ZltdIGNvbnRhaW5zIHZhbGlkIGNvdW50cnkgaW5mb3JtYXRpb24gZWxlbWVudC4NCi0JdTggIENvdW50cnlJZUJ1ZltNQVhfSUVfTEVOXTsNCi0JdTggIENvdW50cnlJZVNyY0FkZHJbNl07IC8vIFNvdXJjZSBBUCBvZiB0aGUgY291bnRyeSBJRS4NCi0JdTggIENvdW50cnlJZVdhdGNoZG9nOyANCi0NCi0JdTggIGNoYW5uZWxfbWFwW01BWF9DSEFOTkVMX05VTUJFUisxXTsgIC8vISEhVmFsdWUgMDogSW52YWxpZCwgMTogVmFsaWQgKGFjdGl2ZSBzY2FuKSwgMjogVmFsaWQgKHBhc3NpdmUgc2NhbikNCi0JLy91OCAgQ2hubExpc3RMZW47IC8vICNCeXRlcyB2YWxpZCBpbiBDaG5sTGlzdFtdLg0KLQkvL3U4ICBDaG5sTGlzdFtET1QxMURfTUFYX0NITkxfTlVNXTsNCi0JdTggIE1heFR4UHdyRGJtTGlzdFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07DQotDQotCURPVDExRF9TVEFURSBTdGF0ZTsNCi19UlRfRE9UMTFEX0lORk8sICpQUlRfRE9UMTFEX0lORk87DQotI2RlZmluZSBlcU1hY0FkZHIoYSxiKQkJKCAoKGEpWzBdPT0oYilbMF0gJiYgKGEpWzFdPT0oYilbMV0gJiYgKGEpWzJdPT0oYilbMl0gJiYgKGEpWzNdPT0oYilbM10gJiYgKGEpWzRdPT0oYilbNF0gJiYgKGEpWzVdPT0oYilbNV0pID8gMTowICkNCi0jZGVmaW5lIGNwTWFjQWRkcihkZXMsc3JjKQkgICAgICAoKGRlcylbMF09KHNyYylbMF0sKGRlcylbMV09KHNyYylbMV0sKGRlcylbMl09KHNyYylbMl0sKGRlcylbM109KHNyYylbM10sKGRlcylbNF09KHNyYylbNF0sKGRlcylbNV09KHNyYylbNV0pDQotI2RlZmluZSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldikgKChQUlRfRE9UMTFEX0lORk8pKChfX3BJZWVlRGV2KS0+cERvdDExZEluZm8pKQ0KLQ0KLSNkZWZpbmUgSVNfRE9UMTFEX0VOQUJMRShfX3BJZWVlRGV2KSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPmJFbmFibGVkDQotI2RlZmluZSBJU19DT1VOVFJZX0lFX1ZBTElEKF9fcEllZWVEZXYpIChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUxlbiA+IDApDQotDQotI2RlZmluZSBJU19FUVVBTF9DSUVfU1JDKF9fcEllZWVEZXYsIF9fcFRhKSBlcU1hY0FkZHIoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVTcmNBZGRyLCBfX3BUYSkgDQotI2RlZmluZSBVUERBVEVfQ0lFX1NSQyhfX3BJZWVlRGV2LCBfX3BUYSkgY3BNYWNBZGRyKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllU3JjQWRkciwgX19wVGEpDQotDQotI2RlZmluZSBJU19DT1VOVFJZX0lFX0NIQU5HRUQoX19wSWVlZURldiwgX19JZSkgXA0KLQkoKChfX0llKS5MZW5ndGggPT0gMCB8fCAoX19JZSkuTGVuZ3RoICE9IEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllTGVuKSA/IFwNCi0JRkFMU0UgOiBcDQotCSghbWVtY21wKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllQnVmLCAoX19JZSkuT2N0ZXQsIChfX0llKS5MZW5ndGgpKSkNCi0NCi0jZGVmaW5lIENJRV9XQVRDSERPR19USCAxDQotI2RlZmluZSBHRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllV2F0Y2hkb2cNCi0jZGVmaW5lIFJFU0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSBHRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpID0gMCANCi0jZGVmaW5lIFVQREFURV9DSUVfV0FUQ0hET0coX19wSWVlZURldikgKytHRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpDQotDQotI2RlZmluZSBJU19ET1QxMURfU1RBVEVfRE9ORShfX3BJZWVlRGV2KSAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5TdGF0ZSA9PSBET1QxMURfU1RBVEVfRE9ORSkNCi0NCi0NCi12b2lkDQotRG90MTFkX0luaXQoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYNCi0JKTsNCi0NCi12b2lkDQotRG90MTFkX1Jlc2V0KA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2DQotCSk7DQotDQotdm9pZA0KLURvdDExZF9VcGRhdGVDb3VudHJ5SWUoDQotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsDQotCXU4ICoJCXBUYWRkciwNCi0JdTE2CUNvdXRyeUllTGVuLA0KLQl1OCAqIHBDb3V0cnlJZQkgDQotCSk7DQotDQotdTgNCi1ET1QxMURfR2V0TWF4VHhQd3JJbkRibSgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwNCi0JdTggQ2hhbm5lbA0KLQkpOw0KLQ0KLXZvaWQNCi1ET1QxMURfU2NhbkNvbXBsZXRlKA0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGRldg0KLQkpOw0KLQ0KLWludCBJc0xlZ2FsQ2hhbm5lbCgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYsDQotCXU4IGNoYW5uZWwNCi0pOw0KLQ0KLWludCBUb0xlZ2FsQ2hhbm5lbCgNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYsDQotCXU4IGNoYW5uZWwNCi0pOw0KLQ0KLXZvaWQgZHVtcF9jaG5sX21hcCh1OCAqIGNoYW5uZWxfbWFwKTsNCi0jZW5kaWYgLy8gI2lmbmRlZiBfX0lOQ19ET1QxMURfSA0KKyNpZm5kZWYgX19JTkNfRE9UMTFEX0gKKyNkZWZpbmUgX19JTkNfRE9UMTFEX0gKKworI2luY2x1ZGUgImllZWU4MDIxMS5oIgorCisvLyNkZWZpbmUgRU5BQkxFX0RPVDExRAorCisvLyNkZWZpbmUgRE9UMTFEX01BWF9DSE5MX05VTSA4MworCit0eXBlZGVmIHN0cnVjdCBfQ0hOTF9UWFBPV0VSX1RSSVBMRSB7CisJdTggRmlyc3RDaG5sOworCXU4ICBOdW1DaG5sczsKKwl1OCAgTWF4VHhQb3dlckluRGJtOworfUNITkxfVFhQT1dFUl9UUklQTEUsICpQQ0hOTF9UWFBPV0VSX1RSSVBMRTsKKwordHlwZWRlZiBlbnVtIF9ET1QxMURfU1RBVEUgeworCURPVDExRF9TVEFURV9OT05FID0gMCwKKwlET1QxMURfU1RBVEVfTEVBUk5FRCwKKwlET1QxMURfU1RBVEVfRE9ORSwKK31ET1QxMURfU1RBVEU7CisKK3R5cGVkZWYgc3RydWN0IF9SVF9ET1QxMURfSU5GTyB7CisJLy9ERUNMQVJFX1JUX09CSkVDVChSVF9ET1QxMURfSU5GTyk7CisKKwlib29sIGJFbmFibGVkOyAvLyBkb3QxMU11bHRpRG9tYWluQ2FwYWJpbGl0eUVuYWJsZWQKKworCXUxNiBDb3VudHJ5SWVMZW47IC8vID4gMCBpZiBDb3VudHJ5SWVCdWZbXSBjb250YWlucyB2YWxpZCBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQuCisJdTggIENvdW50cnlJZUJ1ZltNQVhfSUVfTEVOXTsKKwl1OCAgQ291bnRyeUllU3JjQWRkcls2XTsgLy8gU291cmNlIEFQIG9mIHRoZSBjb3VudHJ5IElFLgorCXU4ICBDb3VudHJ5SWVXYXRjaGRvZzsKKworCXU4ICBjaGFubmVsX21hcFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07ICAvLyEhIVZhbHVlIDA6IEludmFsaWQsIDE6IFZhbGlkIChhY3RpdmUgc2NhbiksIDI6IFZhbGlkIChwYXNzaXZlIHNjYW4pCisJLy91OCAgQ2hubExpc3RMZW47IC8vICNCeXRlcyB2YWxpZCBpbiBDaG5sTGlzdFtdLgorCS8vdTggIENobmxMaXN0W0RPVDExRF9NQVhfQ0hOTF9OVU1dOworCXU4ICBNYXhUeFB3ckRibUxpc3RbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOworCisJRE9UMTFEX1NUQVRFIFN0YXRlOworfVJUX0RPVDExRF9JTkZPLCAqUFJUX0RPVDExRF9JTkZPOworI2RlZmluZSBlcU1hY0FkZHIoYSxiKQkJKCAoKGEpWzBdPT0oYilbMF0gJiYgKGEpWzFdPT0oYilbMV0gJiYgKGEpWzJdPT0oYilbMl0gJiYgKGEpWzNdPT0oYilbM10gJiYgKGEpWzRdPT0oYilbNF0gJiYgKGEpWzVdPT0oYilbNV0pID8gMTowICkKKyNkZWZpbmUgY3BNYWNBZGRyKGRlcyxzcmMpCSAgICAgICgoZGVzKVswXT0oc3JjKVswXSwoZGVzKVsxXT0oc3JjKVsxXSwoZGVzKVsyXT0oc3JjKVsyXSwoZGVzKVszXT0oc3JjKVszXSwoZGVzKVs0XT0oc3JjKVs0XSwoZGVzKVs1XT0oc3JjKVs1XSkKKyNkZWZpbmUgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpICgoUFJUX0RPVDExRF9JTkZPKSgoX19wSWVlZURldiktPnBEb3QxMWRJbmZvKSkKKworI2RlZmluZSBJU19ET1QxMURfRU5BQkxFKF9fcEllZWVEZXYpIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+YkVuYWJsZWQKKyNkZWZpbmUgSVNfQ09VTlRSWV9JRV9WQUxJRChfX3BJZWVlRGV2KSAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVMZW4gPiAwKQorCisjZGVmaW5lIElTX0VRVUFMX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIGVxTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKQorI2RlZmluZSBVUERBVEVfQ0lFX1NSQyhfX3BJZWVlRGV2LCBfX3BUYSkgY3BNYWNBZGRyKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllU3JjQWRkciwgX19wVGEpCisKKyNkZWZpbmUgSVNfQ09VTlRSWV9JRV9DSEFOR0VEKF9fcEllZWVEZXYsIF9fSWUpIFwKKwkoKChfX0llKS5MZW5ndGggPT0gMCB8fCAoX19JZSkuTGVuZ3RoICE9IEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllTGVuKSA/IFwKKwlGQUxTRSA6IFwKKwkoIW1lbWNtcChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUJ1ZiwgKF9fSWUpLk9jdGV0LCAoX19JZSkuTGVuZ3RoKSkpCisKKyNkZWZpbmUgQ0lFX1dBVENIRE9HX1RIIDEKKyNkZWZpbmUgR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVdhdGNoZG9nCisjZGVmaW5lIFJFU0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KSBHRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpID0gMAorI2RlZmluZSBVUERBVEVfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpICsrR0VUX0NJRV9XQVRDSERPRyhfX3BJZWVlRGV2KQorCisjZGVmaW5lIElTX0RPVDExRF9TVEFURV9ET05FKF9fcEllZWVEZXYpIChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPlN0YXRlID09IERPVDExRF9TVEFURV9ET05FKQorCisKK3ZvaWQKK0RvdDExZF9Jbml0KAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYKKwkpOworCit2b2lkCitEb3QxMWRfUmVzZXQoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldgorCSk7CisKK3ZvaWQKK0RvdDExZF9VcGRhdGVDb3VudHJ5SWUoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwKKwl1OCAqCQlwVGFkZHIsCisJdTE2CUNvdXRyeUllTGVuLAorCXU4ICogcENvdXRyeUllCisJKTsKKwordTgKK0RPVDExRF9HZXRNYXhUeFB3ckluRGJtKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsCisJdTggQ2hhbm5lbAorCSk7CisKK3ZvaWQKK0RPVDExRF9TY2FuQ29tcGxldGUoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYKKwkpOworCitpbnQgSXNMZWdhbENoYW5uZWwoCisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYsCisJdTggY2hhbm5lbAorKTsKKworaW50IFRvTGVnYWxDaGFubmVsKAorCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LAorCXU4IGNoYW5uZWwKKyk7CisKK3ZvaWQgZHVtcF9jaG5sX21hcCh1OCAqIGNoYW5uZWxfbWFwKTsKKyNlbmRpZiAvLyAjaWZuZGVmIF9fSU5DX0RPVDExRF9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCBlNTc1MmY2Li44MGY5Y2M3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTcxOSw3ICs3MTksNyBAQAogI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc2Nhbl93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBjb250YWluZXJfb2YoZHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCBzb2Z0bWFjX3NjYW5fd3EpOwogI2Vsc2UKIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc2Nhbl93cShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKQEAgLTc3Nyw3ICs3NzcsNyBAQAogI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc2Nhbl93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0gICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgc29mdG1hY19zY2FuX3dxKTsKICNlbHNlCiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3NjYW5fd3Eoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCkBAIC0yOTgwLDcgKzI5ODAsNyBAQAogI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgaWVlZTgwMjExX3N0YXJ0X2lic3Nfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgc3RhcnRfaWJzc193cSk7CiAjZWxzZQogdm9pZCBpZWVlODAyMTFfc3RhcnRfaWJzc193cShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKQEAgLTMxNjIsNyArMzE2Miw3IEBACiAjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApKQogdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlX3JldHJ5X3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIGFzc29jaWF0ZV9yZXRyeV93cSk7CiAjZWxzZQogdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlX3JldHJ5X3dxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCA2YWFkNjFlLi5kMTI5NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtODQyLDE0ICs4NDIsMTQgQEAKIAogCWlmIChsZW4+TUFYX1dQQV9JRV9MRU4gfHwgKGxlbiAmJiBpZSA9PSBOVUxMKSkKIAl7Ci0JCXByaW50aygicmV0dXJuIGVycm9yIG91dCwgbGVuOiVkXG4iLCBsZW4pOworCQlwcmludGsoInJldHVybiBlcnJvciBvdXQsIGxlbjolenVcbiIsIGxlbik7CiAJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGxlbikKIAl7CiAJCWlmIChsZW4gIT0gaWVbMV0rMil7Ci0JCQlwcmludGsoImxlbjolZCwgaWU6JWRcbiIsIGxlbiwgaWVbMV0pOworCQkJcHJpbnRrKCJsZW46JXp1LCBpZTolZFxuIiwgbGVuLCBpZVsxXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCmluZGV4IDY2ZGU1Y2MuLjZlY2QxMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfY29yZS5jCkBAIC0zMTYxLDcgKzMxNjEsNyBAQAogCQlyZXR1cm4gOwogCiAJfQotCS8vd2hpbGUoISAqdGFpbCAmICgxPDwzMSkpeworCS8vd2hpbGUoISAoKnRhaWwgJiAoMTw8MzEpKSl7CiAJCSp0YWlsPSAwOyAvLyB6ZXJvZXMgaGVhZGVyCiAKIAkJKnRhaWwgPSAqdGFpbHwgKDE8PDI5KSA7IC8vZmlzdCBzZWdtZW50IG9mIHRoZSBwYWNrZXQKQEAgLTU0MzgsNyArNTQzOCw3IEBACiAvLwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcjgxODBfcHJpdiwgd2F0Y2hfZG9nX3dxKTsKIC8vCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSopCiAvLwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHdhdGNoX2RvZ193cSk7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yayxzdHJ1Y3QgZGVsYXllZF93b3JrLHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLGh3X3dha2V1cF93cSk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKICNlbHNlCkBAIC01NDU5LDcgKzU0NTksNyBAQAogLy8gICAgICBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcjgxODBfcHJpdiwgd2F0Y2hfZG9nX3dxKTsKIC8vICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlID0gKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKikKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCB3YXRjaF9kb2dfd3EpOwotICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBkZWxheWVkX3dvcmssd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLGh3X3NsZWVwX3dxKTsKICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKICNlbHNlCkBAIC02NDA3LDcgKzY0MDcsNyBAQAogdm9pZCBydGw4MTgwX3R4X2lycV93cShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJLy9zdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcjgxODBfcHJpdiwgcmVzZXRfd3EpOwotICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBkZWxheWVkX3dvcmssd29yayk7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlID0gKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKikKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfb2YoZHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCB3YXRjaF9kb2dfd3EpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7CkBAIC02NjkxLDcgKzY2OTEsNyBAQAogI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkKIHZvaWQgR1BJT0NoYW5nZVJGV29ya0l0ZW1DYWxsQmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JLy9zdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwkvL3N0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCBHUElPQ2hhbmdlUkZXb3JrSXRlbS53b3JrKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OwogCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uYwppbmRleCA3NDJkYzExLi45M2I1YTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9kbS5jCkBAIC0xLDE3MjUgKzEsMTcyNSBAQAotLy8jaW5jbHVkZSAicjgxODAuaCINCi0jaW5jbHVkZSAicjgxODBfZG0uaCINCi0jaW5jbHVkZSAicjgxODBfaHcuaCINCi0jaW5jbHVkZSAicjgxODBfOTNjeDYuaCINCi0vL3tieSBhbXkgMDgwMzEyDQotDQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJUmV0dXJuIFRSVUUgaWYgd2Ugc2hhbGwgcGVyZm9ybSBIaWdoIFBvd2VyIE1lY2FobmlzbSwgRkFMU0Ugb3RoZXJ3aXNlLgkNCi0vLw0KLS8vK2J5IGFteSAwODAzMTINCi0jZGVmaW5lIFJBVEVfQURBUFRJVkVfVElNRVJfUEVSSU9EICAgICAgMzAwDQotDQotYm9vbCBDaGVja0hpZ2hQb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOw0KLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU4MDIxMTsNCi0NCi0JaWYoIXByaXYtPmJSZWdIaWdoUG93ZXJNZWNoYW5pc20pDQotCXsNCi0JCXJldHVybiBmYWxzZTsNCi0JfQ0KLQkJDQotCWlmKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRURfU0NBTk5JTkcpDQotCXsNCi0JCXJldHVybiBmYWxzZTsNCi0JfQ0KLQ0KLQlyZXR1cm4gdHJ1ZTsNCi19DQotDQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJVXBkYXRlIFR4IHBvd2VyIGxldmVsIGlmIG5lY2Vzc2FyeS4NCi0vLwkJU2VlIGFsc28gRG9SeEhpZ2hQb3dlcigpIGFuZCBTZXRUeFBvd2VyTGV2ZWw4MTg1KCkgZm9yIHJlZmVyZW5jZS4NCi0vLw0KLS8vCU5vdGU6DQotLy8JCVRoZSByZWFzb24gd2h5IHdlIHVkcGF0ZSBUeCBwb3dlciBsZXZlbCBoZXJlIGluc3RlYWQgb2YgRG9SeEhpZ2hQb3dlcigpIA0KLS8vCQlpcyB0aGUgbnVtYmVyIG9mIElPIHRvIGNoYW5nZSBUeCBwb3dlciBpcyBtdWNoIG1vcmUgdGhhbiBjaGFuZSBUUiBzd2l0Y2ggDQotLy8JCWFuZCB0aGV5IGFyZSByZWxhdGVkIHRvIE9GRE0gYW5kIE1BQyByZWdpc3RlcnMuIA0KLS8vCQlTbywgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgaXQgc28gZnJlcXVlbnRseSBpbiBwZXItUnggcGFja2V0IGJhc2UuIA0KLS8vDQotdm9pZA0KLURvVHhIaWdoUG93ZXIoDQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYNCi0JKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOw0KLQl1MTYJCQlIaVB3clVwcGVyVGggPSAwOw0KLQl1MTYJCQlIaVB3ckxvd2VyVGggPSAwOw0KLQl1OAkJCVJTU0lIaVB3clVwcGVyVGg7DQotCXU4CQkJUlNTSUhpUHdyTG93ZXJUaDsNCi0JdTgJCQl1MWJUbXA7DQotCWNoYXIJCQlPZmRtVHhQd3JJZHgsIENja1R4UHdySWR4Ow0KLQ0KLQkvL3ByaW50aygiLS0tLT4gRG9UeEhpZ2hQb3dlcigpXG4iKTsNCi0NCi0JSGlQd3JVcHBlclRoID0gcHJpdi0+UmVnSGlQd3JVcHBlclRoOw0KLQlIaVB3ckxvd2VyVGggPSBwcml2LT5SZWdIaVB3ckxvd2VyVGg7CQkJCQkJDQotCQ0KLQlIaVB3clVwcGVyVGggPSBIaVB3clVwcGVyVGggKiAxMDsNCi0JSGlQd3JMb3dlclRoID0gSGlQd3JMb3dlclRoICogMTA7DQotCVJTU0lIaVB3clVwcGVyVGggPSBwcml2LT5SZWdSU1NJSGlQd3JVcHBlclRoOw0KLQlSU1NJSGlQd3JMb3dlclRoID0gcHJpdi0+UmVnUlNTSUhpUHdyTG93ZXJUaDsNCi0NCi0JLy9sem0gYWRkIDA4MDgyNg0KLQlPZmRtVHhQd3JJZHggID0gcHJpdi0+Y2h0eHB3cl9vZmRtW3ByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWxdOyANCi0JQ2NrVHhQd3JJZHggID0gcHJpdi0+Y2h0eHB3cltwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsXTsgDQotDQotCS8vCXByaW50aygiRG9UeEhpZ2hQb3dlcigpIC0gVW5kZWNvcmF0ZWRTbW9vdGhlZFNTOiVkLCBDdXJDQ0tSU1NJID0gJWQgLCBiQ3VyQ0NLUGt0PSAlZCBcbiIsIHByaXYtPlVuZGVjb3JhdGVkU21vb3RoZWRTUywgcHJpdi0+Q3VyQ0NLUlNTSSwgcHJpdi0+YkN1ckNDS1BrdCApOw0KLQkNCi0JaWYoKHByaXYtPlVuZGVjb3JhdGVkU21vb3RoZWRTUyA+IEhpUHdyVXBwZXJUaCkgfHwNCi0JCShwcml2LT5iQ3VyQ0NLUGt0ICYmIChwcml2LT5DdXJDQ0tSU1NJID4gUlNTSUhpUHdyVXBwZXJUaCkpKQ0KLQl7DQotCQkvLyBTdGV2ZW5sIHN1Z2dlc3RlZCB0aGF0IGRlZ3JhZGUgOGRibSBpbiBoaWdoIHBvd2VyIHNhdGUuIDIwMDctMTItMDQgSXNhaWFoIA0KLQkJDQotCS8vCXByaW50aygiPT09PT0+RG9UeEhpZ2hQb3dlcigpIC0gSGlnaCBQb3dlciAtIFVuZGVjb3JhdGVkU21vb3RoZWRTUzolZCwgIEhpUHdyVXBwZXJUaCA9ICVkIFxuIiwgcHJpdi0+VW5kZWNvcmF0ZWRTbW9vdGhlZFNTLCBIaVB3clVwcGVyVGggKTsNCi0JCXByaXYtPmJUb1VwZGF0ZVR4UHdyID0gdHJ1ZTsNCi0JCXUxYlRtcD0gcmVhZF9uaWNfYnl0ZShkZXYsIENDS19UWEFHQyk7DQotDQotCQkvLyBJZiBpdCBuZXZlciBlbnRlciBIaWdoIFBvd2VyLg0KLQkJaWYoIENja1R4UHdySWR4ID09IHUxYlRtcCkNCi0JCXsNCi0JCXUxYlRtcCA9ICh1MWJUbXAgPiAxNikgPyAodTFiVG1wIC0xNik6IDA7ICAvLyA4ZGJtDQotCQl3cml0ZV9uaWNfYnl0ZShkZXYsIENDS19UWEFHQywgdTFiVG1wKTsNCi0NCi0JCXUxYlRtcD0gcmVhZF9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MpOw0KLQkJdTFiVG1wID0gKHUxYlRtcCA+IDE2KSA/ICh1MWJUbXAgLTE2KTogMDsgIC8vIDhkYm0NCi0JCXdyaXRlX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQywgdTFiVG1wKTsNCi0JCX0NCi0JCQ0KLQl9DQotCWVsc2UgaWYoKHByaXYtPlVuZGVjb3JhdGVkU21vb3RoZWRTUyA8IEhpUHdyTG93ZXJUaCkgJiYNCi0JCSghcHJpdi0+YkN1ckNDS1BrdCB8fCBwcml2LT5DdXJDQ0tSU1NJIDwgUlNTSUhpUHdyTG93ZXJUaCkpDQotCXsNCi0JLy8JIHByaW50aygiRG9UeEhpZ2hQb3dlcigpIC0gbG93ZXIgUG93ZXIgLSBVbmRlY29yYXRlZFNtb290aGVkU1M6JWQsICBIaVB3clVwcGVyVGggPSAlZCBcbiIsIHByaXYtPlVuZGVjb3JhdGVkU21vb3RoZWRTUywgSGlQd3JMb3dlclRoICk7DQotCQlpZihwcml2LT5iVG9VcGRhdGVUeFB3cikNCi0JCXsNCi0JCQlwcml2LT5iVG9VcGRhdGVUeFB3ciA9IGZhbHNlOw0KLQkJCS8vU0QzIHJlcXVpcmVkLg0KLQkJCXUxYlRtcD0gcmVhZF9uaWNfYnl0ZShkZXYsIENDS19UWEFHQyk7CQkJDQotCQkJaWYodTFiVG1wIDwgQ2NrVHhQd3JJZHgpDQotCQkJew0KLQkJCS8vdTFiVG1wID0gKCh1MWJUbXArMTYpID4gMzUpID8gMzU6ICh1MWJUbXArMTYpOyAgLy8gOGRibQ0KLQkJCS8vd3JpdGVfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MsIHUxYlRtcCk7DQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MsIENja1R4UHdySWR4KTsNCi0JCQl9DQotDQotCQkJdTFiVG1wPSByZWFkX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQyk7DQotCQkJaWYodTFiVG1wIDwgT2ZkbVR4UHdySWR4KQ0KLQkJCXsNCi0JCQkvL3UxYlRtcCA9ICgodTFiVG1wKzE2KSA+IDM1KSA/IDM1OiAodTFiVG1wKzE2KTsgIC8vIDhkYm0NCi0JCQkvL3dyaXRlX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQywgdTFiVG1wKTsNCi0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIE9mZG1UeFB3cklkeCk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCS8vcHJpbnRrKCI8LS0tLSBEb1R4SGlnaFBvd2VyKClcbiIpOw0KLX0NCi0NCi0NCi0vLw0KLS8vCURlc2NyaXB0aW9uOg0KLS8vCQlDYWxsYmFjayBmdW5jdGlvbiBvZiBVcGRhdGVUeFBvd2VyV29ya0l0ZW0uDQotLy8JCUJlY2F1c2Ugb2Ygc29tZSBldmVudCBoYXBwZW5kLCBlLmcuIENDWCBUUEMsIEhpZ2ggUG93ZXIgTWVjaGFuaXNtLCANCi0vLwkJV2UgdXBkYXRlIFR4IHBvd2VyIG9mIGN1cnJlbnQgY2hhbm5lbCBhZ2Fpbi4gDQotLy8NCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApKQ0KLXZvaWQgcnRsODE4MF90eF9wd193cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KLXsNCi0vLyAgICAgIHN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByODE4MF9wcml2LCB3YXRjaF9kb2dfd3EpOw0KLS8vICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlID0gKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKikNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgd2F0Y2hfZG9nX3dxKTsNCi0gICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssc3RydWN0IGRlbGF5ZWRfd29yayx3b3JrKTsNCi0gICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLHR4X3B3X3dxKTsNCi0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7DQotI2Vsc2UNCi12b2lkIHJ0bDgxODBfdHhfcHdfd3Eoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCi17DQotCS8vIHN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0jZW5kaWYNCi0NCi0vLwlwcmludGsoIi0tLS0+IFVwZGF0ZVR4UG93ZXJXb3JrSXRlbUNhbGxiYWNrKClcbiIpOw0KLQkNCi0JRG9UeEhpZ2hQb3dlcihkZXYpOwkNCi0JDQotLy8JcHJpbnRrKCI8LS0tLSBVcGRhdGVUeFBvd2VyV29ya0l0ZW1DYWxsYmFjaygpXG4iKTsNCi19DQotDQotDQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJUmV0dXJuIFRSVUUgaWYgd2Ugc2hhbGwgcGVyZm9ybSBESUcgTWVjYWhuaXNtLCBGQUxTRSBvdGhlcndpc2UuCQ0KLS8vDQotYm9vbA0KLUNoZWNrRGlnKA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2DQotCSkNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7DQotDQotCWlmKCFwcml2LT5iRGlnTWVjaGFuaXNtKQ0KLQkJcmV0dXJuIGZhbHNlOw0KLQ0KLQlpZihpZWVlLT5zdGF0ZSAhPSBJRUVFODAyMTFfTElOS0VEKQ0KLQkJcmV0dXJuIGZhbHNlOw0KLQ0KLQkvL2lmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPCAzNikgLy8gU2NoZWR1bGUgRGlnIHVuZGVyIGFsbCBPRkRNIHJhdGVzLiBCeSBCcnVjZSwgMjAwNy0wNi0wMS4NCi0JaWYoKHByaXYtPmllZWU4MDIxMS0+cmF0ZS81KSA8IDM2KSAvLyBTY2hlZHVsZSBEaWcgdW5kZXIgYWxsIE9GRE0gcmF0ZXMuIEJ5IEJydWNlLCAyMDA3LTA2LTAxLg0KLQkJcmV0dXJuIGZhbHNlOw0KLQlyZXR1cm4gdHJ1ZTsNCi19DQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJSW1wbGVtZW50YXRpb24gb2YgRElHIGZvciBaZWJyYSBhbmQgWmVicmEyLgkNCi0vLw0KLXZvaWQNCi1ESUdfWmVicmEoDQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYNCi0JKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOw0KLQl1MTYJCQlDQ0tGYWxzZUFsYXJtLCBPRkRNRmFsc2VBbGFybTsNCi0JdTE2CQkJT2ZkbUZBMSwgT2ZkbUZBMjsNCi0JaW50CQkJSW5pdGlhbEdhaW5TdGVwID0gNzsgLy8gVGhlIG51bWJlciBvZiBpbml0aWFsIGdhaW4gc3RhZ2VzLg0KLQlpbnQJCQlMb3dlc3RHYWluU3RhZ2UgPSA0OyAvLyBUaGUgY2FwYWJsZSBsb3dlc3Qgc3RhZ2Ugb2YgcGVyZm9ybWluZyBkaWcgd29ya2l0ZW0uDQotCXUzMiAJCQlBd2FrZVBlcmlvZEluMlNlYz0wOw0KLQ0KLQkvL3ByaW50aygiLS0tLS0tLS0tPiBESUdfWmVicmEoKVxuIik7DQotDQotCUNDS0ZhbHNlQWxhcm0gPSAodTE2KShwcml2LT5GYWxzZUFsYXJtUmVnVmFsdWUgJiAweDAwMDBmZmZmKTsNCi0JT0ZETUZhbHNlQWxhcm0gPSAodTE2KSgocHJpdi0+RmFsc2VBbGFybVJlZ1ZhbHVlID4+IDE2KSAmIDB4MDAwMGZmZmYpOw0KLQlPZmRtRkExID0gIDB4MTU7DQotCU9mZG1GQTIgPSAoKHUxNikocHJpdi0+UmVnRGlnT2ZkbUZhVXBUaCkpIDw8IDg7DQotDQotLy8JcHJpbnRrKCJESUcqKioqKioqKioqQ0NLIEZhbHNlIEFsYXJtOiAlI1ggXG4iLENDS0ZhbHNlQWxhcm0pOw0KLS8vCXByaW50aygiRElHKioqKioqKioqKk9GRE0gRmFsc2UgQWxhcm06ICUjWCBcbiIsT0ZETUZhbHNlQWxhcm0pOw0KLQ0KLSAgICAgICAgLy8gVGhlIG51bWJlciBvZiBpbml0aWFsIGdhaW4gc3RlcHMgaXMgZGlmZmVyZW50LCBieSBCcnVjZSwgMjAwNy0wNC0xMy4NCi0JaWYgKHByaXYtPkluaXRpYWxHYWluID09IDAgKSAvL2F1dG9ESUcNCi0JeyAvLyBBZHZpc2VkIGZyb20gU0QzIERaDQotCQlwcml2LT5Jbml0aWFsR2FpbiA9IDQ7IC8vIEluIDg3QiwgbTc0ZEJtIG1lYW5zIFN0YXRlIDQgKG04MmRCbSkNCi0JfQ0KLQkvL2lmKHBIYWxEYXRhLT5WZXJzaW9uSUQgIT0gVkVSU0lPTl84MTg3Ql9CKQ0KLQl7IC8vIEFkdmlzZWQgZnJvbSBTRDMgRFoNCi0JCU9mZG1GQTEgPSAgMHgyMDsNCi0JfQ0KLQkNCi0jaWYgMSAvL2x6bSByZXNlcnZlZCAwODA4MjYNCi0JQXdha2VQZXJpb2RJbjJTZWMgPSAoMjAwMC1wcml2IC0+RG96ZVBlcmlvZEluUGFzdDJTZWMpOw0KLQkvL3ByaW50aygiJiYmIERvemVQZXJpb2Q9JWQgQXdha2VQZXJpb2Q9JWRcbiIsIHByaXYtPkRvemVQZXJpb2RJblBhc3QyU2VjLCBBd2FrZVBlcmlvZEluMlNlYyk7DQotCXByaXYgLT5Eb3plUGVyaW9kSW5QYXN0MlNlYz0wOw0KLQkNCi0JaWYoQXdha2VQZXJpb2RJbjJTZWMpDQotCXsJDQotCQkvL1JUX1RSQUNFKENPTVBfRElHLCBEQkdfVFJBQ0UsICgiRElHOiBBd2FrZVBlcmlvZEluMlNlYyglZCkgLSBGQVRoKDB4JVggLCAweCVYKSAtPiIsQXdha2VQZXJpb2RJbjJTZWMsIE9mZG1GQTEsIE9mZG1GQTIpKTsNCi0JCS8vIGFkanVlc3QgRElHIHRocmVzaG9sZC4NCi0JCU9mZG1GQTEgPSAgKHUxNikoKE9mZG1GQTEqQXdha2VQZXJpb2RJbjJTZWMpICAvIDIwMDApIDsgIAkNCi0JCU9mZG1GQTIgPSAgKHUxNikoKE9mZG1GQTIqQXdha2VQZXJpb2RJbjJTZWMpICAvIDIwMDApIDsNCi0JCS8vUlRfVFJBQ0UoQ09NUF9ESUcsIERCR19UUkFDRSwgKCIoIDB4JVggLCAweCVYKVxuIiwgT2ZkbUZBMSwgT2ZkbUZBMikpOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJOy8vUlRfVFJBQ0UoQ09NUF9ESUcsIERCR19XQVJOSU5HLCAoIkVSUk9SISEgIEF3YWtlUGVyaW9kSW4yU2VjIHNob3VsZCBub3QgYmUgWkVSTyEhXG4iKSk7DQotCX0NCi0jZW5kaWYNCi0NCi0JSW5pdGlhbEdhaW5TdGVwID0gODsNCi0JTG93ZXN0R2FpblN0YWdlID0gcHJpdi0+UmVnQk1vZGVHYWluU3RhZ2U7IC8vIExvd2VzdCBnYWluIHN0YWdlLg0KLQ0KLQlpZiAoT0ZETUZhbHNlQWxhcm0gPiBPZmRtRkExKQ0KLQl7DQotCQlpZiAoT0ZETUZhbHNlQWxhcm0gPiBPZmRtRkEyKQ0KLQkJew0KLQkJCXByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUrKzsNCi0JCQlpZiAocHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSA+MSkNCi0JCQl7DQotCQkJCS8vc2VyaW91cyBPRkRNICBGYWxzZSBBbGFybSwgbmVlZCBmYWxsYmFjaw0KLQkJCQlpZiAocHJpdi0+SW5pdGlhbEdhaW4gPCBJbml0aWFsR2FpblN0ZXApDQotCQkJCXsNCi0JCQkJCXByaXYtPkluaXRpYWxHYWluQmFja1VwPSBwcml2LT5Jbml0aWFsR2FpbjsNCi0NCi0JCQkJCXByaXYtPkluaXRpYWxHYWluID0gKHByaXYtPkluaXRpYWxHYWluICsgMSk7DQotLy8JCQkJCXByaW50aygiRElHKioqKioqKioqKk9GRE0gRmFsc2UgQWxhcm06ICUjWCwgIE9mZG1GQTE6ICUjWCwgT2ZkbUZBMjogJSNYXG4iLCBPRkRNRmFsc2VBbGFybSwgT2ZkbUZBMSwgT2ZkbUZBMik7DQotLy8JCQkJCXByaW50aygiRElHKysrKysrKyBmYWxsYmFjayBPRkRNOiVkIFxuIiwgcHJpdi0+SW5pdGlhbEdhaW4pOw0KLQkJCQkJVXBkYXRlSW5pdGlhbEdhaW4oZGV2KTsgDQotCQkJCX0NCi0JCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSA9IDA7DQotCQkJCXByaXYtPkRJR19OdW1iZXJVcGdyYWRlVm90ZT0wOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAocHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSkNCi0JCQkJcHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZS0tOw0KLQkJfQ0KLQkJcHJpdi0+RElHX051bWJlclVwZ3JhZGVWb3RlPTA7CQkNCi0JfQ0KLQllbHNlCQ0KLQl7DQotCQlpZiAocHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSkNCi0JCQlwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlLS07DQotCQlwcml2LT5ESUdfTnVtYmVyVXBncmFkZVZvdGUrKzsNCi0NCi0JCWlmIChwcml2LT5ESUdfTnVtYmVyVXBncmFkZVZvdGU+OSkNCi0JCXsNCi0JCQlpZiAocHJpdi0+SW5pdGlhbEdhaW4gPiBMb3dlc3RHYWluU3RhZ2UpIC8vIEluIDg3QiwgbTc4ZEJtIG1lYW5zIFN0YXRlIDQgKG04NjRkQm0pDQotCQkJew0KLQkJCQlwcml2LT5Jbml0aWFsR2FpbkJhY2tVcD0gcHJpdi0+SW5pdGlhbEdhaW47DQotDQotCQkJCXByaXYtPkluaXRpYWxHYWluID0gKHByaXYtPkluaXRpYWxHYWluIC0gMSk7DQotLy8JCQkJcHJpbnRrKCJESUcqKioqKioqKioqT0ZETSBGYWxzZSBBbGFybTogJSNYLCAgT2ZkbUZBMTogJSNYLCBPZmRtRkEyOiAlI1hcbiIsIE9GRE1GYWxzZUFsYXJtLCBPZmRtRkExLCBPZmRtRkEyKTsNCi0vLwkJCQlwcmludGsoIkRJRy0tLS0tLS0tLSBVcGdyYWRlIE9GRE06JWQgXG4iLCBwcml2LT5Jbml0aWFsR2Fpbik7DQotCQkJCVVwZGF0ZUluaXRpYWxHYWluKGRldik7IA0KLQkJCX0NCi0JCQlwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlID0gMDsNCi0JCQlwcml2LT5ESUdfTnVtYmVyVXBncmFkZVZvdGU9MDsNCi0JCX0NCi0JfQ0KLQ0KLS8vCXByaW50aygiRElHKysrKysrKyBPRkRNOiVkXG4iLCBwcml2LT5Jbml0aWFsR2Fpbik7CQ0KLQkvL3ByaW50aygiPC0tLS0tLS0tLSBESUdfWmVicmEoKVxuIik7DQotfQ0KLQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCURpc3BhdGNoIERJRyBpbXBsZW1lbnRhdGlvbiBhY2NvcmRpbmcgdG8gUkYuIAkNCi0vLw0KLXZvaWQNCi1EeW5hbWljSW5pdEdhaW4oDQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYNCi0JKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOw0KLQ0KLQlzd2l0Y2gocHJpdi0+cmZfY2hpcCkNCi0Jew0KLQkJY2FzZSBSRl9aRUJSQTI6ICAvLyBbQW5uaWVXb3JrYXJvdW5kXSBGb3IgWmVicmEyLCAyMDA1LTA4LTAxLg0KLQkJY2FzZSBSRl9aRUJSQTQ6DQotCQkJRElHX1plYnJhKCBkZXYgKTsNCi0JCQlicmVhazsNCi0JCQ0KLQkJZGVmYXVsdDoNCi0JCQlwcmludGsoIkR5bmFtaWNJbml0R2FpbigpOiB1bmtub3duIFJGQ2hpcElEKCVkKSAhISFcbiIsIHByaXYtPnJmX2NoaXApOw0KLQkJCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLSNpZiAoTElOVVhfVkVSU0lPTl9DT0RFID49IEtFUk5FTF9WRVJTSU9OKDIsNiwyMCkpDQotdm9pZCBydGw4MTgwX2h3X2RpZ193cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KLXsNCi0vLyAgICAgIHN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByODE4MF9wcml2LCB3YXRjaF9kb2dfd3EpOw0KLS8vICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlID0gKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKikNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgd2F0Y2hfZG9nX3dxKTsNCi0gICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssc3RydWN0IGRlbGF5ZWRfd29yayx3b3JrKTsNCi0gICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLGh3X2RpZ193cSk7DQotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2Ow0KLSNlbHNlDQotdm9pZCBydGw4MTgwX2h3X2RpZ193cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KLXsNCi0JDQotI2VuZGlmDQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0NCi0JLy8gUmVhZCBDQ0sgYW5kIE9GRE0gRmFsc2UgQWxhcm0uDQotCXByaXYtPkZhbHNlQWxhcm1SZWdWYWx1ZSA9IHJlYWRfbmljX2R3b3JkKGRldiwgQ0NLX0ZBTFNFX0FMQVJNKTsNCi0JDQotDQotCS8vIEFkanVzdCBJbml0aWFsIEdhaW4gZHluYW1pY2FsbHkuDQotCUR5bmFtaWNJbml0R2FpbihkZXYpOw0KLQkNCi19DQotDQotaW50DQotSW5jbHVkZWRJblN1cHBvcnRlZFJhdGVzKA0KLSAgICAgICAgc3RydWN0IHI4MTgwX3ByaXYgICAgICAgKnByaXYsDQotICAgICAgICB1OCAgICAgICAgICAgICAgVHhSYXRlICApDQotew0KLSAgICB1OCByYXRlX2xlbjsNCi0gICAgICAgIHU4IHJhdGVfZXhfbGVuOw0KLSAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgUmF0ZU1hc2sgPSAweDdGOw0KLSAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgaWR4Ow0KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgRm91bmQgPSAwOw0KLSAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgTmFpdmVUeFJhdGUgPSBUeFJhdGUmUmF0ZU1hc2s7DQotDQotICAgIHJhdGVfbGVuID0gcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsucmF0ZXNfbGVuOw0KLSAgICAgICAgcmF0ZV9leF9sZW4gPSBwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5yYXRlc19leF9sZW47DQotICAgICAgICBmb3IoIGlkeD0wOyBpZHg8IHJhdGVfbGVuOyBpZHgrKyApDQotICAgICAgICB7DQotICAgICAgICAgICAgICAgIGlmKCAocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsucmF0ZXNbaWR4XSAmIFJhdGVNYXNrKSA9PSBOYWl2ZVR4UmF0ZSApDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBGb3VuZCA9IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmb3VuZF9yYXRlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIGZvciggaWR4PTA7IGlkeDwgcmF0ZV9leF9sZW47IGlkeCsrICkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAgICAgaWYoIChwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5yYXRlc19leFtpZHhdICYgUmF0ZU1hc2spID09IE5haXZlVHhSYXRlICkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZvdW5kID0gMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX3JhdGU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBGb3VuZDsNCi0gICAgICAgIGZvdW5kX3JhdGU6DQotICAgICAgICByZXR1cm4gRm91bmQ7DQotfQ0KLQ0KLS8vDQotLy8gICAgICBEZXNjcmlwdGlvbjoNCi0vLyAgICAgICAgICAgICAgR2V0IHRoZSBUeCByYXRlIG9uZSBkZWdyZWUgdXAgZm9ybSB0aGUgaW5wdXQgcmF0ZSBpbiB0aGUgc3VwcG9ydGVkIHJhdGVzLg0KLS8vICAgICAgICAgICAgICBSZXR1cm4gdGhlIHVwZ3JhZGUgcmF0ZSBpZiBpdCBpcyBzdWNjZXNzZWQsIG90aGVyd2lzZSByZXR1cm4gdGhlIGlucHV0IHJhdGUuDQotLy8gICAgICBCeSBCcnVjZSwgMjAwNy0wNi0wNS4NCi0vLyANCi11OA0KLUdldFVwZ3JhZGVUeFJhdGUoDQotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LA0KLSAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRlDQotICAgICAgICApDQotew0KLSAgICAgICAgc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOw0KLSAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgVXBSYXRlOw0KLQ0KLSAgICAgICAgLy8gVXBncmFkZSAxIGRlZ3JlZS4NCi0gICAgICAgIHN3aXRjaChyYXRlKQ0KLSAgICAgICAgew0KLSAgICAgICAgY2FzZSAxMDg6IC8vIFVwIHRvIDU0TWJwcy4NCi0gICAgICAgICAgICAgICAgVXBSYXRlID0gMTA4Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGNhc2UgOTY6IC8vIFVwIHRvIDU0TWJwcy4NCi0gICAgICAgICAgICAgICAgVXBSYXRlID0gMTA4Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGNhc2UgNzI6IC8vIFVwIHRvIDQ4TWJwcy4NCi0gICAgICAgICAgICAgICAgVXBSYXRlID0gOTY7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSA0ODogLy8gVXAgdG8gMzZNYnBzLg0KLSAgICAgICAgICAgICAgICBVcFJhdGUgPSA3MjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDM2OiAvLyBVcCB0byAyNE1icHMuDQotICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDQ4Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGNhc2UgMjI6IC8vIFVwIHRvIDE4TWJwcy4NCi0gICAgICAgICAgICAgICAgVXBSYXRlID0gMzY7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSAxMTogLy8gVXAgdG8gMTFNYnBzLg0KLSAgICAgICAgICAgICAgICBVcFJhdGUgPSAyMjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDQ6IC8vIFVwIHRvIDUuNU1icHMuDQotICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDExOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGNhc2UgMjogLy8gVXAgdG8gMk1icHMuDQotICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDQ7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJHZXRVcGdyYWRlVHhSYXRlKCk6IElucHV0IFR4IFJhdGUoJWQpIGlzIHVuZGVmaW5lZCFcbiIsIHJhdGUpOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmF0ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIC8vIENoZWNrIGlmIHRoZSByYXRlIGlzIHZhbGlkLg0KLSAgICAgICAgaWYoSW5jbHVkZWRJblN1cHBvcnRlZFJhdGVzKHByaXYsIFVwUmF0ZSkpDQotICAgICAgICB7DQotLy8gICAgICAgICAgICAgIHByaW50aygiR2V0VXBncmFkZVR4UmF0ZSgpOiBHZXRVcGdyYWRlIFR4IHJhdGUoJWQpIGZyb20gJWQgIVxuIiwgVXBSYXRlLCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIFVwUmF0ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLy9wcmludGsoIkdldFVwZ3JhZGVUeFJhdGUoKTogVHggcmF0ZSAoJWQpIGlzIG5vdCBpbiBzdXBwb3J0ZWQgcmF0ZXNcbiIsIFVwUmF0ZSk7DQotICAgICAgICAgICAgICAgIHJldHVybiByYXRlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHJhdGU7DQotfQ0KLS8vDQotLy8gICAgICBEZXNjcmlwdGlvbjoNCi0vLyAgICAgICAgICAgICAgR2V0IHRoZSBUeCByYXRlIG9uZSBkZWdyZWUgZG93biBmb3JtIHRoZSBpbnB1dCByYXRlIGluIHRoZSBzdXBwb3J0ZWQgcmF0ZXMuDQotLy8gICAgICAgICAgICAgIFJldHVybiB0aGUgZGVncmFkZSByYXRlIGlmIGl0IGlzIHN1Y2Nlc3NlZCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgaW5wdXQgcmF0ZS4NCi0vLyAgICAgIEJ5IEJydWNlLCAyMDA3LTA2LTA1Lg0KLS8vIA0KLXU4DQotR2V0RGVncmFkZVR4UmF0ZSgNCi0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsDQotICAgICAgICB1OCAgICAgICAgIHJhdGUNCi0gICAgICAgICkNCi17DQotICAgICAgICBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7DQotICAgICAgICB1OCAgICAgICAgICAgICAgICAgICAgICBEb3duUmF0ZTsNCi0NCi0gICAgICAgIC8vIFVwZ3JhZGUgMSBkZWdyZWUuDQotICAgICAgICBzd2l0Y2gocmF0ZSkNCi0gICAgICAgIHsNCi0gICAgICAgIGNhc2UgMTA4OiAvLyBEb3duIHRvIDQ4TWJwcy4NCi0gICAgICAgICAgICAgICAgRG93blJhdGUgPSA5NjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDk2OiAvLyBEb3duIHRvIDM2TWJwcy4NCi0gICAgICAgICAgICAgICAgRG93blJhdGUgPSA3MjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDcyOiAvLyBEb3duIHRvIDI0TWJwcy4NCi0gICAgICAgICAgICAgICAgRG93blJhdGUgPSA0ODsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDQ4OiAvLyBEb3duIHRvIDE4TWJwcy4NCi0gICAgICAgICAgICAgICAgRG93blJhdGUgPSAzNjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDM2OiAvLyBEb3duIHRvIDExTWJwcy4NCi0gICAgICAgICAgICAgICAgRG93blJhdGUgPSAyMjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgICBjYXNlIDIyOiAvLyBEb3duIHRvIDUuNU1icHMuDQotICAgICAgICAgICAgICAgIERvd25SYXRlID0gMTE7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICAgY2FzZSAxMTogLy8gRG93biB0byAyTWJwcy4NCi0gICAgICAgICAgICAgICAgRG93blJhdGUgPSA0Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGNhc2UgNDogLy8gRG93biB0byAxTWJwcy4NCi0gICAgICAgICAgICAgICAgRG93blJhdGUgPSAyOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGNhc2UgMjogLy8gRG93biB0byAxTWJwcy4NCi0gICAgICAgICAgICAgICAgRG93blJhdGUgPSAyOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgICAgIHByaW50aygiR2V0RGVncmFkZVR4UmF0ZSgpOiBJbnB1dCBUeCBSYXRlKCVkKSBpcyB1bmRlZmluZWQhXG4iLCByYXRlKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJhdGU7DQotICAgICAgICB9DQotICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmF0ZSBpcyB2YWxpZC4NCi0gICAgICAgIGlmKEluY2x1ZGVkSW5TdXBwb3J0ZWRSYXRlcyhwcml2LCBEb3duUmF0ZSkpDQotICAgICAgICB7DQotLy8gICAgICAgICAgICAgIHByaW50aygiR2V0RGVncmFkZVR4UmF0ZSgpOiBHZXREZWdyYWRlIFR4IHJhdGUoJWQpIGZyb20gJWQhXG4iLCBEb3duUmF0ZSwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7DQotICAgICAgICAgICAgICAgIHJldHVybiBEb3duUmF0ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UNCi0gICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLy9wcmludGsoIkdldERlZ3JhZGVUeFJhdGUoKTogVHggcmF0ZSAoJWQpIGlzIG5vdCBpbiBzdXBwb3J0ZWQgcmF0ZXNcbiIsIERvd25SYXRlKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJhdGU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcmF0ZTsNCi19DQotLy8NCi0vLyAgICAgIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgc3BlY2lmaWVkIGRhdGEgcmF0ZSBpcyANCi0vLyAgICAgIENDSyByYXRlLg0KLS8vICAgICAgMjAwNS4wMS4yNSwgYnkgcmNuamtvLg0KLS8vDQotYm9vbA0KLU1nbnRJc0Nja1JhdGUoDQotICAgICAgICB1MTYgICAgIHJhdGUNCi0gICAgICAgICkNCi17DQotICAgICAgICBib29sIGJSZXR1cm4gPSBmYWxzZTsNCi0NCi0gICAgICAgIGlmKChyYXRlIDw9IDIyKSAmJiAocmF0ZSAhPSAxMikgJiYgKHJhdGUgIT0gMTgpKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgICAgICBiUmV0dXJuID0gdHJ1ZTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHJldHVybiBiUmV0dXJuOw0KLX0NCi0jaWZkZWYgQ09ORklHX1JUTDgxOFhfUw0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCVR4IFBvd2VyIHRyYWNraW5nIG1lY2hhbmlzbSByb3V0aW5lIG9uIDg3U0UuDQotLy8gCUNyZWF0ZWQgYnkgUm9nZXIsIDIwMDcuMTIuMTEuDQotLy8NCi12b2lkDQotVHhQd3JUcmFja2luZzg3U0UoDQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYNCi0pDQotewkJDQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0JdTgJdG1wdTFCeXRlLCBDdXJyZW50VGhlcm1hbCwgSWR4OwkNCi0JY2hhcglDY2tUeFB3cklkeCwgT2ZkbVR4UHdySWR4OwkNCi0JLy91MzIJdTRiUmZSZWc7DQotCQ0KLQl0bXB1MUJ5dGUgPSByZWFkX25pY19ieXRlKGRldiwgRU5fTFBGX0NBTCk7DQotCUN1cnJlbnRUaGVybWFsID0gKHRtcHUxQnl0ZSAmIDB4ZjApPj40OyAvL1sgNzo0XTogdGhlcm1hbCBtZXRlciBpbmRpY2F0aW9uLg0KLQlDdXJyZW50VGhlcm1hbCA9IChDdXJyZW50VGhlcm1hbD4weDBjKT8gMHgwYzpDdXJyZW50VGhlcm1hbDsvL2x6bSBhZGQgMDgwODI2DQotDQotCS8vcHJpbnRrKCJUeFB3clRyYWNraW5nODdTRSgpOiBDdXJyZW50VGhlcm1hbCglZClcbiIsIEN1cnJlbnRUaGVybWFsKTsNCi0JDQotCWlmKCBDdXJyZW50VGhlcm1hbCAhPSBwcml2LT5UaGVybWFsTWV0ZXIpDQotCXsJDQotLy8JCXByaW50aygiVHhQd3JUcmFja2luZzg3U0UoKTogVGhlcm1hbCBtZXRlciBjaGFuZ2VkISEhXG4iKTsNCi0NCi0JCS8vIFVwZGF0ZSBUeCBQb3dlciBsZXZlbCBvbiBlYWNoIGNoYW5uZWwuDQotCQlmb3IoSWR4ID0gMTsgSWR4PDE1OyBJZHgrKykNCi0JCXsJCQkNCi0JCQlDY2tUeFB3cklkeCA9IHByaXYtPmNodHhwd3JbSWR4XTsNCi0JCQlPZmRtVHhQd3JJZHggPSBwcml2LT5jaHR4cHdyX29mZG1bSWR4XTsJCQkNCi0JCQkNCi0JCQlpZiggQ3VycmVudFRoZXJtYWwgPiBwcml2LT5UaGVybWFsTWV0ZXIgKQ0KLQkJCXsgLy8gaGlnaGVyIHRoZXJtYWwgbWV0ZXIuCQkNCi0JCQkJQ2NrVHhQd3JJZHggKz0gKEN1cnJlbnRUaGVybWFsIC0gcHJpdi0+VGhlcm1hbE1ldGVyKSoyOw0KLQkJCQlPZmRtVHhQd3JJZHggKz0gKEN1cnJlbnRUaGVybWFsIC0gcHJpdi0+VGhlcm1hbE1ldGVyKSoyOw0KLQkJCQ0KLQkJCQlpZihDY2tUeFB3cklkeCA+MzUpDQotCQkJCQlDY2tUeFB3cklkeCA9IDM1OyAvLyBGb3JjZSBUeFBvd2VyIHRvIG1heGltYWwgaW5kZXguDQotCQkJCWlmKE9mZG1UeFB3cklkeCA+MzUpDQotCQkJCQlPZmRtVHhQd3JJZHggPSAzNTsJCQkJDQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7IC8vIGxvd2VyIHRoZXJtYWwgbWV0ZXIuCQkJCQ0KLQkJCQlDY2tUeFB3cklkeCAtPSAocHJpdi0+VGhlcm1hbE1ldGVyIC0gQ3VycmVudFRoZXJtYWwpKjI7DQotCQkJCU9mZG1UeFB3cklkeCAtPSAocHJpdi0+VGhlcm1hbE1ldGVyIC0gQ3VycmVudFRoZXJtYWwpKjI7DQotDQotCQkJCWlmKENja1R4UHdySWR4IDwwKQ0KLQkJCQkJQ2NrVHhQd3JJZHggPSAwOwkJDQotCQkJCWlmKE9mZG1UeFB3cklkeCA8MCkNCi0JCQkJCU9mZG1UeFB3cklkeCA9IDA7CQkJCQ0KLQkJCX0JCQkJCQ0KLQkJCQ0KLQkJCS8vIFVwZGF0ZSBUeFBvd2VyIGxldmVsIG9uIENDSyBhbmQgT0ZETSByZXNwLg0KLQkJCXByaXYtPmNodHhwd3JbSWR4XSA9IENja1R4UHdySWR4Ow0KLQkJCXByaXYtPmNodHhwd3Jfb2ZkbVtJZHhdID0gT2ZkbVR4UHdySWR4OwkJCQkNCi0JCX0JDQotDQotCQkvLyBVcGRhdGUgVHhQb3dlciBsZXZlbCBpbW1lZGlhdGVseS4NCi0JCXJ0bDgyMjV6Ml9TZXRUWFBvd2VyTGV2ZWwoZGV2LCBwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsKTsNCi0JfQkNCi0JcHJpdi0+VGhlcm1hbE1ldGVyID0gQ3VycmVudFRoZXJtYWw7CQkJCQkNCi19DQotdm9pZA0KLVN0YVJhdGVBZGFwdGl2ZTg3U0UoDQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYNCi0JKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOw0KLQl1bnNpZ25lZCBsb25nIAkJCUN1cnJUeG9rQ250Ow0KLQl1MTYJCQlDdXJyUmV0cnlDbnQ7DQotCXUxNgkJCUN1cnJSZXRyeVJhdGU7DQotCS8vdTE2CQkJaSxpZHg7DQotCXVuc2lnbmVkIGxvbmcgICAgICAgCUN1cnJSeG9rQ250Ow0KLQlib29sCQkJYlRyeVVwID0gZmFsc2U7DQotCWJvb2wJCQliVHJ5RG93biA9IGZhbHNlOw0KLQl1OAkJCVRyeVVwVGggPSAxOw0KLQl1OAkJCVRyeURvd25UaCA9IDI7DQotCXUzMgkJCVR4VGhyb3VnaHB1dDsNCi0JbG9uZwkJQ3VyclNpZ25hbFN0cmVuZ3RoOw0KLQlib29sCQliVXBkYXRlSW5pdGlhbEdhaW4gPSBmYWxzZTsNCi0gICAgCXU4CQkJdTFiT2ZkbT0wLCB1MWJDY2sgPSAwOw0KLQljaGFyCQlPZmRtVHhQd3JJZHgsIENja1R4UHdySWR4OwkNCi0NCi0JcHJpdi0+UmF0ZUFkYXB0aXZlUGVyaW9kPSBSQVRFX0FEQVBUSVZFX1RJTUVSX1BFUklPRDsNCi0NCi0NCi0JQ3VyclJldHJ5Q250CT0gcHJpdi0+Q3VyclJldHJ5Q250Ow0KLQlDdXJyVHhva0NudAk9IHByaXYtPk51bVR4T2tUb3RhbCAtIHByaXYtPkxhc3RUeG9rQ250Ow0KLQlDdXJyUnhva0NudAk9IHByaXYtPmllZWU4MDIxMS0+TnVtUnhPa1RvdGFsIC0gcHJpdi0+TGFzdFJ4b2tDbnQ7DQotCUN1cnJTaWduYWxTdHJlbmd0aCA9IHByaXYtPlN0YXRzX1JlY3ZTaWduYWxQb3dlcjsNCi0JVHhUaHJvdWdocHV0ID0gKHUzMikocHJpdi0+TnVtVHhPa0J5dGVzVG90YWwgLSBwcml2LT5MYXN0VHhPS0J5dGVzKTsNCi0JcHJpdi0+TGFzdFR4T0tCeXRlcyA9IHByaXYtPk51bVR4T2tCeXRlc1RvdGFsOw0KLQlwcml2LT5DdXJyZW50T3BlcmFSYXRlID0gcHJpdi0+aWVlZTgwMjExLT5yYXRlLzU7DQotCS8vcHJpbnRrKCJwcml2LT5DdXJyZW50T3BlcmFSYXRlIGlzICVkXG4iLHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOw0KLQkvLzIgQ29tcHV0ZSByZXRyeSByYXRpby4NCi0JaWYgKEN1cnJUeG9rQ250PjApDQotCXsNCi0JCUN1cnJSZXRyeVJhdGUgPSAodTE2KShDdXJyUmV0cnlDbnQqMTAwL0N1cnJUeG9rQ250KTsNCi0JfQ0KLQllbHNlDQotCXsgLy8gSXQgbWF5IGJlIHNlcmlvdXMgcmV0cnkuIFRvIGRpc3Rpbmd1aXNoIHNlcmlvdXMgcmV0cnkgb3Igbm8gcGFja2V0cyBtb2RpZmllZCBieSBCcnVjZQ0KLQkJQ3VyclJldHJ5UmF0ZSA9ICh1MTYpKEN1cnJSZXRyeUNudCoxMDAvMSk7DQotCX0NCi0NCi0NCi0JLy8NCi0JLy8gQWRkZWQgYnkgUm9nZXIsIDIwMDcuMDEuMDIuDQotCS8vIEZvciBkZWJ1ZyBpbmZvcm1hdGlvbi4NCi0JLy8NCi0JLy9wcmludGsoIlxuKDEpIHBIYWxEYXRhLT5MYXN0UmV0cnlSYXRlOiAlZCBcbiIscHJpdi0+TGFzdFJldHJ5UmF0ZSk7DQotCS8vcHJpbnRrKCIoMikgUmV0cnlDbnQgPSAlZCAgXG4iLCBDdXJyUmV0cnlDbnQpOwkNCi0JLy9wcmludGsoIigzKSBUeG9rQ250ID0gJWQgXG4iLCBDdXJyVHhva0NudCk7DQotCS8vcHJpbnRrKCIoNCkgQ3VyclJldHJ5UmF0ZSA9ICVkIFxuIiwgQ3VyclJldHJ5UmF0ZSk7CQ0KLQkvL3ByaW50aygiKDUpIEN1cnJTaWduYWxTdHJlbmd0aCA9ICVkIFxuIixDdXJyU2lnbmFsU3RyZW5ndGgpOw0KLQkvL3ByaW50aygiKDYpIFR4VGhyb3VnaHB1dCBpcyAlZFxuIixUeFRocm91Z2hwdXQpOw0KLQkvL3ByaW50aygicHJpdi0+TnVtVHhPa0J5dGVzVG90YWwgaXMgJWRcbiIscHJpdi0+TnVtVHhPa0J5dGVzVG90YWwpOwkJDQotDQotCXByaXYtPkxhc3RSZXRyeUNudCA9IHByaXYtPkN1cnJSZXRyeUNudDsNCi0JcHJpdi0+TGFzdFR4b2tDbnQgPSBwcml2LT5OdW1UeE9rVG90YWw7DQotCXByaXYtPkxhc3RSeG9rQ250ID0gcHJpdi0+aWVlZTgwMjExLT5OdW1SeE9rVG90YWw7DQotCXByaXYtPkN1cnJSZXRyeUNudCA9IDA7DQotDQotCS8vMk5vIFR4IHBhY2tldHMsIHJldHVybiB0byBpbml0X3JhdGUgb3Igbm90Pw0KLQlpZiAoQ3VyclJldHJ5UmF0ZT09MCAmJiBDdXJyVHhva0NudCA9PSAwKQ0KLQl7CQ0KLQkJLy8NCi0JCS8vQWZ0ZXIgOSAoMzAqMzAwbXMpIHNlY29uZHMgaW4gdGhpcyBjb25kaXRpb24sIHdlIHRyeSB0byByYWlzZSByYXRlLg0KLQkJLy8NCi0JCXByaXYtPlRyeXVwaW5nQ291bnROb0RhdGErKzsNCi0JCQ0KLS8vCQlwcmludGsoIk5vIFR4IHBhY2tldHMsIFRyeXVwaW5nQ291bnROb0RhdGEoJWQpXG4iLCBwcml2LT5Ucnl1cGluZ0NvdW50Tm9EYXRhKTsNCi0JCS8vW1RSQyBEZWxsIExhYl0gRXh0ZW5kIHJhaXNlZCBwZXJpb2QgZnJvbSA0LjVzZWMgdG8gOXNlYywgSXNhaWFoIDIwMDgtMDItMTUgMTg6MDAgDQotCQlpZiAocHJpdi0+VHJ5dXBpbmdDb3VudE5vRGF0YT4zMCkNCi0JCXsNCi0JCQlwcml2LT5Ucnl1cGluZ0NvdW50Tm9EYXRhID0gMDsNCi0JCSAJcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9IEdldFVwZ3JhZGVUeFJhdGUoZGV2LCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsJCQ0KLQkJCS8vIFJlc2V0IEZhaWwgUmVjb3JkDQotCQkJcHJpdi0+TGFzdEZhaWxUeFJhdGUgPSAwOw0KLQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlU1MgPSAtMjAwOw0KLQkJCXByaXYtPkZhaWxUeFJhdGVDb3VudCA9IDA7DQotCQl9DQotCQlnb3RvIFNldEluaXRpYWxHYWluOw0KLQl9DQotICAgICAgICBlbHNlDQotCXsNCi0JCXByaXYtPlRyeXVwaW5nQ291bnROb0RhdGE9MDsgLy9SZXNldCB0cnlpbmcgdXAgdGltZXMuDQotCX0NCi0NCi0NCi0JLy8NCi0JLy8gRm9yIE5ldGdlYXIgY2FzZSwgSSBjb21tZW50IG91dCB0aGUgZm9sbG93aW5nIHNpZ25hbCBzdHJlbmd0aCBlc3RpbWF0aW9uLA0KLQkvLyB3aGljaCBjYW4gcmVzdWx0cyBpbiBsb3dlciByYXRlIHRvIHRyYW5zbWl0IHdoZW4gc2FtcGxlIGlzIE5PVCBlbm91Z2ggKGUuZy4gUElORyByZXF1ZXN0KS4gIA0KLQkvLyAyMDA3LjA0LjA5LCBieSBSb2dlci4JDQotCS8vCQ0KLQ0KLQkvLw0KLQkvLyBSZXN0cnVjdHVyZSByYXRlIGFkYXB0aXZlIGFzIHRoZSBmb2xsb3dpbmcgbWFpbiBzdGFnZXM6DQotCS8vICgxKSBBZGQgcmV0cnkgdGhyZXNob2xkIGluIDU0TSB1cGdyYWRpbmcgY29uZGl0aW9uIHdpdGggc2lnbmFsIHN0cmVuZ3RoLg0KLQkvLyAoMikgQWRkIHRoZSBtZWNoYW5pc20gdG8gZGVncmFkZSB0byBDQ0sgcmF0ZSBhY2NvcmRpbmcgdG8gc2lnbmFsIHN0cmVuZ3RoIA0KLQkvLwkJYW5kIHJldHJ5IHJhdGUuDQotCS8vICgzKSBSZW1vdmUgYWxsIEluaXRpYWwgR2FpbiBVcGRhdGVzIG92ZXIgT0ZETSByYXRlLiBUbyBhdm9pZCB0aGUgY29tcGxpY2F0ZWQgDQotCS8vCQlzaXR1YXRpb24sIEluaXRpYWwgR2FpbiBVcGRhdGUgaXMgdXBvbiBvbiBESUcgbWVjaGFuaXNtIGV4Y2VwdCBDQ0sgcmF0ZS4NCi0JLy8gKDQpIEFkZCB0aGUgbWVoYW5pc20gb2YgdHJ5aW5nIHRvIHVwZ3JhZGUgdHggcmF0ZS4NCi0JLy8gKDUpIFJlY29yZCB0aGUgaW5mb3JtYXRpb24gb2YgdXBwaW5nIHR4IHJhdGUgdG8gYXZvaWQgdHJ5aW5nIHVwcGluZyB0eCByYXRlIGNvbnN0YW50bHkuDQotCS8vIEJ5IEJydWNlLCAyMDA3LTA2LTA1Lg0KLQkvLwkNCi0JLy8NCi0NCi0JLy8gMTFNYnBzIG9yIDM2TWJwcw0KLQkvLyBDaGVjayBtb3JlIHRpbWVzIGluIHRoZXNlIHJhdGUoa2V5IHJhdGVzKS4NCi0JLy8NCi0JaWYocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAyMiB8fCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDcyKQ0KLQl7IA0KLQkJVHJ5VXBUaCArPSA5Ow0KLQl9DQotCS8vDQotCS8vIExldCB0aGVzZSByYXRlcyBkb3duIG1vcmUgZGlmZmljdWx0Lg0KLQkvLw0KLQlpZihNZ250SXNDY2tSYXRlKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpIHx8IHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMzYpDQotCXsNCi0JCQlUcnlEb3duVGggKz0gMTsNCi0JfQ0KLQ0KLQkvLzEgQWRqdXN0IFJhdGUuDQotCWlmIChwcml2LT5iVHJ5dXBpbmcgPT0gdHJ1ZSkNCi0JewkNCi0JCS8vMiBGb3IgVGVzdCBVcGdyYWRpbmcgbWVjaGFuaXNtDQotCQkvLyBOb3RlOg0KLQkJLy8gCVNvbWV0aW1lcyB0aGUgdGhyb3VnaHB1dCBpcyB1cG9uIG9uIHRoZSBjYXBhYmlsaXR5IGJ3dHdlZW4gdGhlIEFQIGFuZCBOSUMsDQotCQkvLyAJdGh1cyB0aGUgbG93IGRhdGEgcmF0ZSBkb2VzIG5vdCBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZS4NCi0JCS8vIAlXZSByYW5kb21seSB1cGdyYWRlIHRoZSBkYXRhIHJhdGUgYW5kIGNoZWNrIGlmIHRoZSByZXRyeSByYXRlIGlzIGltcHJvdmVkLg0KLQkJDQotCQkvLyBVcGdyYWRpbmcgcmF0ZSBkaWQgbm90IGltcHJvdmUgdGhlIHJldHJ5IHJhdGUsIGZhbGxiYWNrIHRvIHRoZSBvcmlnaW5hbCByYXRlLg0KLQkJaWYgKCAoQ3VyclJldHJ5UmF0ZSA+IDI1KSAmJiBUeFRocm91Z2hwdXQgPCBwcml2LT5MYXN0VHhUaHJvdWdocHV0KQ0KLQkJew0KLQkJCS8vTm90IG5lY2Vzc2FyeSByYWlzaW5nIHJhdGUsIGZhbGwgYmFjayByYXRlLg0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCQkvL3ByaW50aygiY2FzZTEtMTogTm90IG5lY2Vzc2FyeSByYWlzaW5nIHJhdGUsIGZhbGwgYmFjayByYXRlLi4uLlxuIik7DQotCQkJLy9wcmludGsoImNhc2UxLTE6IHBNZ250SW5mby0+Q3VycmVudE9wZXJhUmF0ZSA9JWQsIFR4VGhyb3VnaHB1dCA9ICVkLCBMYXN0VGhyb3VnaHB1dCA9ICVkXG4iLA0KLQkJCS8vCQlwcml2LT5DdXJyZW50T3BlcmFSYXRlLCBUeFRocm91Z2hwdXQsIHByaXYtPkxhc3RUeFRocm91Z2hwdXQpOwkJCQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCXByaXYtPmJUcnl1cGluZyA9IGZhbHNlOw0KLQkJfQ0KLQl9CQ0KLQllbHNlIGlmIChDdXJyU2lnbmFsU3RyZW5ndGggPiAtNDcgJiYgKEN1cnJSZXRyeVJhdGUgPCA1MCkpDQotCXsNCi0JCS8vMkZvciBIaWdoIFBvd2VyDQotCQkvLw0KLQkJLy8gQWRkZWQgYnkgUm9nZXIsIDIwMDcuMDQuMDkuDQotCQkvLyBSZXR1cm4gdG8gaGlnaGVzdCBkYXRhIHJhdGUsIGlmIHNpZ25hbCBzdHJlbmd0aCBpcyBnb29kIGVub3VnaC4NCi0JCS8vIFNpZ25hbFN0cmVuZ3RoIHRocmVzaG9sZCgtNTBkYm0pIGlzIGZvciBSVEw4MTg2Lg0KLQkJLy8gUmV2aXNlIFNpZ25hbFN0cmVuZ3RoIHRocmVzaG9sZCB0byAtNTFkYm0uCQ0KLQkJLy8NCi0JCS8vIEFsc28gbmVlZCB0byBjaGVjayByZXRyeSByYXRlIGZvciBzYWZldHksIGJ5IEJydWNlLCAyMDA3LTA2LTA1Lg0KLQkJaWYocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSAhPSBwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5IaWdoZXN0T3BlcmFSYXRlICkNCi0JCXsNCi0JCQliVHJ5VXAgPSB0cnVlOw0KLQkJCS8vIFVwZ3JhZGUgVHggUmF0ZSBkaXJlY3RseS4NCi0JCQlwcml2LT5Ucnl1cGluZ0NvdW50ICs9IFRyeVVwVGg7DQotCQl9DQotLy8JCXByaW50aygiY2FzZTI6IFN0YVJhdGVBZGFwdGl2ZTg3U0U6IFBvd2VyKCVkKSBpcyBoaWdoIGVub3VnaCEhLiBcbiIsIEN1cnJTaWduYWxTdHJlbmd0aCk7CQkJDQotCQkJCQkNCi0JfQ0KLQllbHNlIGlmKEN1cnJUeG9rQ250ID4gOSAmJiBDdXJyVHhva0NudDwgMTAwICYmIEN1cnJSZXRyeVJhdGUgPj0gNjAwKSANCi0Jew0KLQkJLy8yIEZvciBTZXJpb3VzIFJldHJ5DQotCQkvLw0KLQkJLy8gVHJhZmZpYyBpcyBub3QgYnVzeSBidXQgb3VyIFR4IHJldHJ5IGlzIHNlcmlvdXMuIA0KLQkJLy8NCi0JCWJUcnlEb3duID0gdHJ1ZTsNCi0JCS8vIExldCBSYXRlIE1lY2hhbmlzbSB0byBkZWdyYWRlIHR4IHJhdGUgZGlyZWN0bHkuDQotCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsNCi0vLwkJcHJpbnRrKCJjYXNlMzogUkE6IFR4IFJldHJ5IGlzIHNlcmlvdXMuIERlZ3JhZGUgVHggUmF0ZSB0byAlZCBkaXJlY3RseS4uLlxuIiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CQ0KLQl9DQotCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDEwOCApDQotCXsNCi0JCS8vMkZvciA1NE1icHMNCi0JCS8vIEFpciBMaW5rDQotCQlpZiAoIChDdXJyUmV0cnlSYXRlPjI2KSYmKHByaXYtPkxhc3RSZXRyeVJhdGU+MjUpKQ0KLS8vCQlpZiAoIChDdXJyUmV0cnlSYXRlPjQwKSYmKHByaXYtPkxhc3RSZXRyeVJhdGU+MzkpKQ0KLQkJew0KLQkJCS8vRG93biB0byByYXRlIDQ4TWJwcy4NCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQl9DQotCQkvLyBDYWJsZSBMaW5rDQotCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU+MTcpJiYocHJpdi0+TGFzdFJldHJ5UmF0ZT4xNikgJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA+IC03MikpIA0KLS8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU+MTcpJiYocHJpdi0+TGFzdFJldHJ5UmF0ZT4xNikgJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA+IC03MikpDQotCQl7DQotCQkJLy9Eb3duIHRvIHJhdGUgNDhNYnBzLg0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCX0NCi0NCi0JCWlmKGJUcnlEb3duICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPCAtNzUpKSAvL2NhYmxlIGxpbmsNCi0JCXsNCi0JCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsNCi0JCX0NCi0JCS8vcHJpbnRrKCJjYXNlNC0tLTU0TSBcbiIpOwkNCi0NCi0JfQ0KLQllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSA5NiApDQotCXsNCi0JCS8vMkZvciA0OE1icHMNCi0JCS8vQWlyIExpbmsNCi0JCWlmICggKChDdXJyUmV0cnlSYXRlPjQ4KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT40NykpKQ0KLS8vCQlpZiAoICgoQ3VyclJldHJ5UmF0ZT42NSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+NjQpKSkNCi0NCi0JCXsJDQotCQkJLy9Eb3duIHRvIHJhdGUgMzZNYnBzLg0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCX0NCi0JCS8vQ2FibGUgTGluaw0KLQkJZWxzZSBpZiAoICgoQ3VyclJldHJ5UmF0ZT4yMSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+MjApKSAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTc0KSkNCi0JCXsNCi0JCQkvL0Rvd24gdG8gcmF0ZSAzNk1icHMuDQotCQkJYlRyeURvd24gPSB0cnVlOw0KLQkJfQ0KLQkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNTAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQ0KLS8vCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA3MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpDQotCQl7DQotCQkJYlRyeURvd24gPSB0cnVlOw0KLQkJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgKz0gVHJ5RG93blRoOw0KLQkJfQ0KLQkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDgpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDgpICkgLy9UTyBETzogbmVlZCB0byBjb25zaWRlciAoUlNTSSkNCi0vLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDI4KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw4KSApIA0KLQkJew0KLQkJCWJUcnlVcCA9IHRydWU7DQotCQl9DQotDQotCQlpZihiVHJ5RG93biAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTc1KSkNCi0JCXsNCi0JCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsNCi0JCX0NCi0JCS8vcHJpbnRrKCJjYXNlNS0tLTQ4TSBcbiIpOwkNCi0JfQ0KLQllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSA3MiApDQotCXsNCi0JCS8vMkZvciAzNk1icHMNCi0JCWlmICggKEN1cnJSZXRyeVJhdGU+NDMpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjQxKSkgDQotLy8JCWlmICggKEN1cnJSZXRyeVJhdGU+NjApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjU5KSkNCi0JCXsJDQotCQkJLy9Eb3duIHRvIHJhdGUgMjRNYnBzLg0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCX0NCi0JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDUwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkNCi0vLwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNzAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQ0KLQkJew0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsNCi0JCX0NCi0JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwxNSkgJiYgIChwcml2LT5MYXN0UmV0cnlSYXRlPDE2KSkgLy9UTyBETzogbmVlZCB0byBjb25zaWRlciAoUlNTSSkNCi0vLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDM1KSAmJiAgKHByaXYtPkxhc3RSZXRyeVJhdGU8MzYpKQ0KLQkJew0KLQkJCWJUcnlVcCA9IHRydWU7DQotCQl9DQotDQotCQlpZihiVHJ5RG93biAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTgwKSkNCi0JCXsNCi0JCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsNCi0JCX0NCi0JCS8vcHJpbnRrKCJjYXNlNi0tLTM2TSBcbiIpOwkNCi0JfQ0KLQllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSA0OCApDQotCXsNCi0JCS8vMkZvciAyNE1icHMNCi0JCS8vIEFpciBMaW5rDQotCQlpZiAoICgoQ3VyclJldHJ5UmF0ZT42MykgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+NjIpKSkNCi0vLwkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+ODMpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjgyKSkpDQotCQl7CQ0KLQkJCS8vRG93biB0byByYXRlIDE4TWJwcy4NCi0JCQliVHJ5RG93biA9IHRydWU7DQotCQl9DQotCQkvL0NhYmxlIExpbmsNCi0JCWVsc2UgaWYgKCAoKEN1cnJSZXRyeVJhdGU+MzMpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjMyKSkgJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA+IC04MikgKQ0KLS8vCQkgZWxzZSBpZiAoICgoQ3VyclJldHJ5UmF0ZT41MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+NDkpKSAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTgyKSApDQotCQl7DQotCQkJLy9Eb3duIHRvIHJhdGUgMThNYnBzLg0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCX0NCi0JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDUwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkNCi0vLwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNzAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQ0KLQ0KLQkJew0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsNCi0JCX0NCi0gIAkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDIwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTwyMSkpIC8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpDQotLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw0MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU8NDEpKQ0KLQkJewkNCi0JCQliVHJ5VXAgPSB0cnVlOwkNCi0JCX0NCi0NCi0JCWlmKGJUcnlEb3duICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPCAtODIpKQ0KLQkJew0KLQkJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgKz0gVHJ5RG93blRoOw0KLQkJfQ0KLQkJLy9wcmludGsoImNhc2U3LS0tMjRNIFxuIik7CQ0KLQl9DQotCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDM2ICkNCi0Jew0KLQkJLy8yRm9yIDE4TWJwcw0KLQkJLy8gb3JpZ2luYWwgKDEwOSwgMTA5KSANCi0JCS8vW1RSQyBEZWxsIExhYl0gKDkwLCA5MSksIElzYWlhaCAyMDA4LTAyLTE4IDIzOjI0DQotCQkvLwkJCSAgICAgKDg1LCA4NiksIElzYWlhaCAyMDA4LTAyLTE4IDI0OjAwDQotCQlpZiAoICgoQ3VyclJldHJ5UmF0ZT44NSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+ODYpKSkNCi0vLwkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+MTE1KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT4xMTYpKSkNCi0JCXsNCi0JCQkvL0Rvd24gdG8gcmF0ZSAxMU1icHMuDQotCQkJYlRyeURvd24gPSB0cnVlOw0KLQkJfQ0KLQkJLy9bVFJDIERlbGwgTGFiXSAgSXNhaWFoIDIwMDgtMDItMTggMjM6MjQNCi0JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDUwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkNCi0vLwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNzAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQ0KLQkJew0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsNCi0JCX0NCi0JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwyMikgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU8MjMpKSAvL1RPIERPOiBuZWVkIHRvIGNvbnNpZGVyIChSU1NJKQ0KLS8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8NDIpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDQzKSkNCi0JCXsJDQotCQkJYlRyeVVwID0gdHJ1ZTsJDQotCQl9DQotCQkvL3ByaW50aygiY2FzZTgtLS0xOE0gXG4iKTsJDQotCX0NCi0JZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMjIgKQ0KLQl7DQotCQkvLzJGb3IgMTFNYnBzDQotCQlpZiAoQ3VyclJldHJ5UmF0ZT45NSkNCi0vLwkJaWYgKEN1cnJSZXRyeVJhdGU+MTU1KQ0KLQkJew0KLQkJCWJUcnlEb3duID0gdHJ1ZTsNCi0JCX0NCi0JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwyOSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPDMwKSApLy9UTyBETzogbmVlZCB0byBjb25zaWRlciAoUlNTSSkNCi0vLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDQ5KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZSA8NTApICkNCi0JCQl7DQotCQkJYlRyeVVwID0gdHJ1ZTsNCi0JCQl9DQotCQkvL3ByaW50aygiY2FzZTktLS0xMU0gXG4iKTsJDQotCQl9CQ0KLQllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAxMSApDQotCXsNCi0JCS8vMkZvciA1LjVNYnBzDQotCQlpZiAoQ3VyclJldHJ5UmF0ZT4xNDkpIA0KLS8vCQlpZiAoQ3VyclJldHJ5UmF0ZT4xODkpDQotCQl7CQ0KLQkJCWJUcnlEb3duID0gdHJ1ZTsJCQkNCi0JCX0NCi0JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw2MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPCA2NSkpDQotLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw4MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPCA4NSkpDQotDQotCQkJew0KLQkJCWJUcnlVcCA9IHRydWU7DQotCQkJfQkJDQotCQkvL3ByaW50aygiY2FzZTEwLS0tNS41TSBcbiIpOwkNCi0JCX0NCi0JZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNCApDQotCXsNCi0JCS8vMkZvciAyIE1icHMNCi0JCWlmKChDdXJyUmV0cnlSYXRlPjk5KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT45OSkpDQotLy8JCWlmKChDdXJyUmV0cnlSYXRlPjE5OSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+MTk5KSkNCi0JCXsNCi0JCQliVHJ5RG93biA9IHRydWU7CQkJDQotCQl9DQotCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGUgPCA2NSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPCA3MCkpDQotLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZSA8IDg1KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZSA8IDkwKSkNCi0JCXsNCi0JCQliVHJ5VXAgPSB0cnVlOw0KLQkJfQ0KLQkJLy9wcmludGsoImNhc2UxMS0tLTJNIFxuIik7CQ0KLQl9DQotCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDIgKQ0KLQl7DQotCQkvLzJGb3IgMSBNYnBzDQotCQlpZiggKEN1cnJSZXRyeVJhdGU8NzApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDc1KSkNCi0vLwkJaWYoIChDdXJyUmV0cnlSYXRlPDkwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw5NSkpDQotCQl7DQotCQkJYlRyeVVwID0gdHJ1ZTsNCi0JCX0NCi0JCS8vcHJpbnRrKCJjYXNlMTItLS0xTSBcbiIpOwkNCi0JfQ0KLQ0KLQlpZihiVHJ5VXAgJiYgYlRyeURvd24pDQotICAgIAlwcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3QigpOiBUeCBSYXRlIHRyaWVkIHVwcGluZyBhbmQgZG93bmluZyBzaW11bHRhbmVvdXNseSFcbiIpOw0KLQkJCQkNCi0JLy8xIFRlc3QgVXBncmFkaW5nIFR4IFJhdGUNCi0JLy8gU29tZXRpbWVzIHRoZSBjYXVzZSBvZiB0aGUgbG93IHRocm91Z2hwdXQgKGhpZ2ggcmV0cnkgcmF0ZSkgaXMgdGhlIGNvbXBhdGliaWxpdHkgYmV0d2VlbiB0aGUgQVAgYW5kIE5JQy4NCi0JLy8gVG8gdGVzdCBpZiB0aGUgdXBwZXIgcmF0ZSBtYXkgY2F1c2UgbG93ZXIgcmV0cnkgcmF0ZSwgdGhpcyBtZWNoYW5pc20gcmFuZG9tbHkgb2NjdXJzIHRvIHRlc3QgdXBncmFkaW5nIHR4IHJhdGUuDQotCWlmKCFiVHJ5VXAgJiYgIWJUcnlEb3duICYmIChwcml2LT5Ucnl1cGluZ0NvdW50ID09IDApICYmIChwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID09IDApDQotCQkmJiBwcml2LT5DdXJyZW50T3BlcmFSYXRlICE9IHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLkhpZ2hlc3RPcGVyYVJhdGUgJiYgcHJpdi0+RmFpbFR4UmF0ZUNvdW50IDwgMikNCi0Jew0KLQkJaWYoamlmZmllcyUgKEN1cnJSZXRyeVJhdGUgKyAxMDEpID09IDApDQotCQl7DQotCQkJYlRyeVVwID0gdHJ1ZTsJDQotCQkJcHJpdi0+YlRyeXVwaW5nID0gdHJ1ZTsNCi0JCQkvL3ByaW50aygiU3RhUmF0ZUFkYXB0aXZlODdTRSgpOiBSYW5kb21seSB0cnkgdXBncmFkaW5nLi4uXG4iKTsNCi0JCX0NCi0JfQ0KLQ0KLQkvLzEgUmF0ZSBNZWNoYW5pc20NCi0JaWYoYlRyeVVwKQ0KLQl7DQotCQlwcml2LT5Ucnl1cGluZ0NvdW50Kys7DQotCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID0gMDsNCi0JCQkNCi0JCXsNCi0vLwkJCXByaW50aygiVVA6IHBIYWxEYXRhLT5Ucnl1cGluZ0NvdW50ID0gJWRcbiIsIHByaXYtPlRyeXVwaW5nQ291bnQpOw0KLS8vCQkJcHJpbnRrKCJVUDogVHJ5VXBUaCglZCkrIChGYWlsVHhSYXRlQ291bnQoJWQpKV4yID0lZFxuIiwgDQotLy8JCQkJVHJ5VXBUaCwgcHJpdi0+RmFpbFR4UmF0ZUNvdW50LCAoVHJ5VXBUaCArIHByaXYtPkZhaWxUeFJhdGVDb3VudCAqIHByaXYtPkZhaWxUeFJhdGVDb3VudCkgKTsNCi0vLwkJCXByaW50aygiVVA6IHBIYWxEYXRhLT5iVHJ5dXBpbmc9JWRcbiIsICBwcml2LT5iVHJ5dXBpbmcpOw0KLQ0KLQkJfQ0KLQkJDQotCQkvLw0KLQkJLy8gQ2hlY2sgbW9yZSB0aW1lcyBpZiB3ZSBuZWVkIHRvIHVwZ3JhZGUgaW5kZWVkLg0KLQkJLy8gQmVjYXVzZSB0aGUgbGFyZ2VzdCB2YWx1ZSBvZiBwSGFsRGF0YS0+VHJ5dXBpbmdDb3VudCBpcyAweEZGRkYgYW5kIA0KLQkJLy8gdGhlIGxhcmdlc3QgdmFsdWUgb2YgcEhhbERhdGEtPkZhaWxUeFJhdGVDb3VudCBpcyAweDE0LA0KLQkJLy8gdGhpcyBjb25kaXRpb24gd2lsbCBiZSBzYXRpc2ZpZWQgYXQgbW9zdCBldmVyeSAyIG1pbi4NCi0JCS8vDQotDQotCQlpZigocHJpdi0+VHJ5dXBpbmdDb3VudCA+IChUcnlVcFRoICsgcHJpdi0+RmFpbFR4UmF0ZUNvdW50ICogcHJpdi0+RmFpbFR4UmF0ZUNvdW50KSkgfHwNCi0JCQkoQ3VyclNpZ25hbFN0cmVuZ3RoID4gcHJpdi0+TGFzdEZhaWxUeFJhdGVTUykgfHwgcHJpdi0+YlRyeXVwaW5nKQ0KLQkJew0KLQkJCXByaXYtPlRyeXVwaW5nQ291bnQgPSAwOw0KLQkJCS8vIA0KLQkJCS8vIFdoZW4gdHJhbnNmZXJpbmcgZnJvbSBDQ0sgdG8gT0ZETSwgRElHIGlzIGFuIGltcG9ydGFudCBpc3N1ZS4NCi0JCQkvLw0KLQkJCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMjIpDQotCQkJCWJVcGRhdGVJbml0aWFsR2FpbiA9IHRydWU7DQotDQotCQkJLy8gVGhlIGRpZmZlcmVuY2UgaW4gdGhyb3VnaHB1dCBiZXR3ZWVuIDQ4TWJwcyBhbmQgMzZNYnBzIGlzIDhNLg0KLQkJCS8vIFNvLCB3ZSBtdXN0IGJlIGNhcmVmdWxseSBpbiB0aGlzIHJhdGUgc2NhbGUuIElzYWlhaCAyMDA4LTAyLTE1Lg0KLQkJCS8vDQotCQkJaWYoICAoKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNzIpIHx8IChwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDQ4KSB8fCAocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAzNikpICYmDQotCQkJCShwcml2LT5GYWlsVHhSYXRlQ291bnQgPiAyKSApDQotCQkJCXByaXYtPlJhdGVBZGFwdGl2ZVBlcmlvZD0gKFJBVEVfQURBUFRJVkVfVElNRVJfUEVSSU9ELzIpOw0KLQkJCQ0KLQkJCS8vICgxKVRvIGF2b2lkIHVwZ3JhZGUgZnJlcXVlbnRseSB0byB0aGUgZmFpbCB0eCByYXRlLCBhZGQgdGhlIEZhaWxUeFJhdGVDb3VudCBpbnRvIHRoZSB0aHJlc2hvbGQuDQotCQkJLy8gKDIpSWYgdGhlIHNpZ25hbCBzdHJlbmd0aCBpcyBpbmNyZWFzZWQsIGl0IG1heSBiZSBhYmxlIHRvIHVwZ3JhZGUuDQotDQotCQkJcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9IEdldFVwZ3JhZGVUeFJhdGUoZGV2LCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsNCi0vLwkJCXByaW50aygiU3RhUmF0ZUFkYXB0aXZlODdTRSgpOiBVcGdyYWRlIFR4IFJhdGUgdG8gJWRcbiIsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOw0KLQ0KLQkJCS8vW1RSQyBEZWxsIExhYl0gQnlwYXNzIDEyLzkvNiwgSXNhaWFoIDIwMDgtMDItMTggMjA6MDAgDQotCQkJaWYocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PTM2KQ0KLQkJCXsNCi0JCQkJcHJpdi0+YlVwZGF0ZUFSRlI9dHJ1ZTsNCi0JCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBBUkZSLCAweDBGOEYpOyAvL2J5cGFzcyAxMi85LzYNCi0vLwkJCQlwcmludGsoIlVQOiBBUkZSPTB4RjhGXG4iKTsNCi0JCQl9DQotCQkJZWxzZSBpZihwcml2LT5iVXBkYXRlQVJGUikNCi0JCQl7DQotCQkJCXByaXYtPmJVcGRhdGVBUkZSPWZhbHNlOw0KLQkJCQl3cml0ZV9uaWNfd29yZChkZXYsIEFSRlIsIDB4MEZGRik7IC8vc2V0IDFNIH4gNTRNYnBzLg0KLS8vCQkJCXByaW50aygiVVA6IEFSRlI9MHhGRkZcbiIpOw0KLQkJCX0NCi0JCQkJDQotCQkJLy8gVXBkYXRlIEZhaWwgVHggcmF0ZSBhbmQgY291bnQuDQotCQkJaWYocHJpdi0+TGFzdEZhaWxUeFJhdGUgIT0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkNCi0JCQl7DQotCQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlID0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZTsNCi0JCQkJcHJpdi0+RmFpbFR4UmF0ZUNvdW50ID0gMDsNCi0JCQkJcHJpdi0+TGFzdEZhaWxUeFJhdGVTUyA9IC0yMDA7IC8vIFNldCBsb3dlc3QgcG93ZXIuDQotCQkJfQ0KLQkJfQ0KLQl9DQotCWVsc2UNCi0JewkNCi0JCWlmKHByaXYtPlRyeXVwaW5nQ291bnQgPiAwKQ0KLQkJCXByaXYtPlRyeXVwaW5nQ291bnQgLS07DQotCX0NCi0JDQotCWlmKGJUcnlEb3duKQ0KLQl7DQotCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhKys7DQotCQlwcml2LT5Ucnl1cGluZ0NvdW50ID0gMDsNCi0JCXsNCi0vLwkJCXByaW50aygiRE46IHBIYWxEYXRhLT5UcnlEb3duQ291bnRMb3dEYXRhID0gJWRcbiIscHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSk7DQotLy8JCQlwcmludGsoIkROOiBUcnlEb3duVGggPSVkXG4iLCBUcnlEb3duVGgpOw0KLS8vCQkJcHJpbnRrKCJETjogcEhhbERhdGEtPmJUcnl1cGluZz0lZFxuIiwgIHByaXYtPmJUcnl1cGluZyk7DQotCQl9DQotCQkJCQkJDQotCQkvL0NoZWNrIGlmIFR4IHJhdGUgY2FuIGJlIGRlZ3JhZGVkIG9yIFRlc3QgdHJ5aW5nIHVwZ3JhZGluZyBzaG91bGQgZmFsbGJhY2suDQotCQlpZihwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID4gVHJ5RG93blRoIHx8IHByaXYtPmJUcnl1cGluZykNCi0JCXsNCi0JCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID0gMDsNCi0JCQlwcml2LT5iVHJ5dXBpbmcgPSBmYWxzZTsNCi0JCQkvLyBVcGRhdGUgZmFpbCBpbmZvcm1hdGlvbi4NCi0JCQlpZihwcml2LT5MYXN0RmFpbFR4UmF0ZSA9PSBwcml2LT5DdXJyZW50T3BlcmFSYXRlKQ0KLQkJCXsNCi0JCQkJcHJpdi0+RmFpbFR4UmF0ZUNvdW50ICsrOw0KLQkJCQkvLyBSZWNvcmQgdGhlIFR4IGZhaWwgcmF0ZSBzaWduYWwgc3RyZW5ndGguDQotCQkJCWlmKEN1cnJTaWduYWxTdHJlbmd0aCA+IHByaXYtPkxhc3RGYWlsVHhSYXRlU1MpDQotCQkJCXsNCi0JCQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlU1MgPSBDdXJyU2lnbmFsU3RyZW5ndGg7DQotCQkJCX0NCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJcHJpdi0+TGFzdEZhaWxUeFJhdGUgPSBwcml2LT5DdXJyZW50T3BlcmFSYXRlOw0KLQkJCQlwcml2LT5GYWlsVHhSYXRlQ291bnQgPSAxOw0KLQkJCQlwcml2LT5MYXN0RmFpbFR4UmF0ZVNTID0gQ3VyclNpZ25hbFN0cmVuZ3RoOw0KLQkJCX0NCi0JCQlwcml2LT5DdXJyZW50T3BlcmFSYXRlID0gR2V0RGVncmFkZVR4UmF0ZShkZXYsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOw0KLQ0KLQkJCS8vIFJlZHVjZSBjaGFyaW90IHRyYWluaW5nIHRpbWUgYXQgd2VhayBzaWduYWwgc3RyZW5ndGggc2l0dWF0aW9uLiBTRDMgRUQgZGVtYW5kLiANCi0JCQkvL1tUUkMgRGVsbCBMYWJdIFJldmlzZSBTaWduYWwgVGhyZXNob2xkIGZyb20gLTc1IHRvIC04MCAsIElzYWlhaCAyMDA4LTAyLTE4IDIwOjAwIA0KLQkJCWlmKCAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTgwKSAmJiAocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA+IDcyICkpDQotCQkJew0KLQkJCQlwcml2LT5DdXJyZW50T3BlcmFSYXRlID0gNzI7DQotLy8JCQkJcHJpbnRrKCJETjogd2VhayBzaWduYWwgc3RyZW5ndGggKCVkKSwgZGVncmFkZSB0byAzNk1icHNcbiIsIEN1cnJTaWduYWxTdHJlbmd0aCk7DQotCQkJfQ0KLQ0KLQkJCS8vW1RSQyBEZWxsIExhYl0gQnlwYXNzIDEyLzkvNiwgSXNhaWFoIDIwMDgtMDItMTggMjA6MDAgDQotCQkJaWYocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PTM2KQ0KLQkJCXsNCi0JCQkJcHJpdi0+YlVwZGF0ZUFSRlI9dHJ1ZTsNCi0JCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBBUkZSLCAweDBGOEYpOyAvL2J5cGFzcyAxMi85LzYNCi0vLwkJCQlwcmludGsoIkROOiBBUkZSPTB4RjhGXG4iKTsNCi0JCQl9DQotCQkJZWxzZSBpZihwcml2LT5iVXBkYXRlQVJGUikNCi0JCQl7DQotCQkJCXByaXYtPmJVcGRhdGVBUkZSPWZhbHNlOw0KLQkJCQl3cml0ZV9uaWNfd29yZChkZXYsIEFSRlIsIDB4MEZGRik7IC8vc2V0IDFNIH4gNTRNYnBzLg0KLS8vCQkJCXByaW50aygiRE46IEFSRlI9MHhGRkZcbiIpOw0KLQkJCX0NCi0JCQkJDQotCQkJLy8NCi0JCQkvLyBXaGVuIGl0IGlzIENDSyByYXRlLCBpdCBtYXkgbmVlZCB0byB1cGRhdGUgaW5pdGlhbCBnYWluIHRvIHJlY2VpdmUgbG93ZXIgcG93ZXIgcGFja2V0cy4NCi0JCQkvLw0KLQkJCWlmKE1nbnRJc0Nja1JhdGUocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkpDQotCQkJew0KLQkJCQliVXBkYXRlSW5pdGlhbEdhaW4gPSB0cnVlOw0KLQkJCX0NCi0vLwkJCXByaW50aygiU3RhUmF0ZUFkYXB0aXZlODdTRSgpOiBEZWdyYWRlIFR4IFJhdGUgdG8gJWRcbiIsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJaWYocHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA+IDApDQotCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSAtLTsNCi0JfQ0KLQkJCQ0KLQkvLyBLZWVwIHRoZSBUeCBmYWlsIHJhdGUgY291bnQgdG8gZXF1YWwgdG8gMHgxNSBhdCBtb3N0Lg0KLQkvLyBSZWR1Y2UgdGhlIGZhaWwgY291bnQgYXQgbGVhc3QgdG8gMTAgc2VjIGlmIHR4IHJhdGUgaXMgdGVuZGluZyBzdGFibGUuDQotCWlmKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+PSAweDE1IHx8IA0KLQkJKCFiVHJ5VXAgJiYgIWJUcnlEb3duICYmIHByaXYtPlRyeURvd25Db3VudExvd0RhdGEgPT0gMCAmJiBwcml2LT5Ucnl1cGluZ0NvdW50ICYmIHByaXYtPkZhaWxUeFJhdGVDb3VudCA+IDB4NikpDQotCXsNCi0JCXByaXYtPkZhaWxUeFJhdGVDb3VudCAtLTsNCi0JfQkJDQotDQotDQotCU9mZG1UeFB3cklkeCAgPSBwcml2LT5jaHR4cHdyX29mZG1bcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbF07IA0KLQlDY2tUeFB3cklkeCAgPSBwcml2LT5jaHR4cHdyW3ByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWxdOyANCi0JDQotCS8vW1RSQyBEZWxsIExhYl0gTWFjMHg5ZSBpbmNyZWFzZSAyIGxldmVsIGluIDM2TX4xOE0gc2l0dWF0aW9uLCBJc2FpYWggMjAwOC0wMi0xOCAyNDowMCANCi0JaWYoKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPCA5NikgJiYocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA+IDIyKSkNCi0Jew0KLQkJdTFiQ2NrID0gcmVhZF9uaWNfYnl0ZShkZXYsIENDS19UWEFHQyk7DQotCQl1MWJPZmRtID0gcmVhZF9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MpOw0KLQ0KLQkJLy8gY2FzZSAxOiBOZXZlciBlbnRlciBIaWdoIHBvd2VyDQotCQlpZih1MWJDY2sgPT0gQ2NrVHhQd3JJZHggKQ0KLQkJew0KLQkJCWlmKHUxYk9mZG0gIT0gKE9mZG1UeFB3cklkeCsyKSApDQotCQkJew0KLQkJCXByaXYtPmJFbmhhbmNlVHhQd3I9IHRydWU7DQotCQkJdTFiT2ZkbSA9ICgodTFiT2ZkbSsyKSA+IDM1KSA/IDM1OiAodTFiT2ZkbSsyKTsNCi0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIHUxYk9mZG0pOw0KLS8vCQkJcHJpbnRrKCJFbmhhbmNlIE9GRE1fVFhBR0MgOiArKysrKyB1MWJPZmRtPSAweCV4XG4iLCB1MWJPZmRtKTsNCi0JCQl9DQotCQl9DQotCQkvLyBjYXNlIDI6IGVudGVyIGhpZ2ggcG93ZXINCi0JCWVsc2UgaWYodTFiQ2NrIDwgQ2NrVHhQd3JJZHgpDQotCQl7DQotCQkJaWYoIXByaXYtPmJFbmhhbmNlVHhQd3IpDQotCQkJew0KLQkJCQlwcml2LT5iRW5oYW5jZVR4UHdyPSB0cnVlOw0KLQkJCQl1MWJPZmRtID0gKCh1MWJPZmRtKzIpID4gMzUpID8gMzU6ICh1MWJPZmRtKzIpOw0KLQkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIHUxYk9mZG0pOw0KLQkJCQkvL1JUX1RSQUNFKENPTVBfUkFURSwgREJHX1RSQUNFLCAoIkVuaGFuY2UgT0ZETV9UWEFHQygyKSA6ICsrKysrIHUxYk9mZG09IDB4JXhcbiIsIHUxYk9mZG0pKTsNCi0JCQl9DQotCQl9DQotCX0NCi0JZWxzZSBpZihwcml2LT5iRW5oYW5jZVR4UHdyKSAgLy81NC80OC8xMS81LjUvMi8xDQotCXsNCi0JCXUxYkNjayA9IHJlYWRfbmljX2J5dGUoZGV2LCBDQ0tfVFhBR0MpOw0KLQkJdTFiT2ZkbSA9IHJlYWRfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDKTsNCi0NCi0JCS8vIGNhc2UgMTogTmV2ZXIgZW50ZXIgSGlnaCBwb3dlcg0KLQkJaWYodTFiQ2NrID09IENja1R4UHdySWR4ICkNCi0JCXsNCi0JCXByaXYtPmJFbmhhbmNlVHhQd3I9IGZhbHNlOw0KLQkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCBPZmRtVHhQd3JJZHgpOw0KLQkJLy9wcmludGsoIlJlY292ZXIgT0ZETV9UWEFHQyA6ID09PT09IHUxYk9mZG09IDB4JXhcbiIsIE9mZG1UeFB3cklkeCk7DQotCQl9DQotCQkvLyBjYXNlIDI6IGVudGVyIGhpZ2ggcG93ZXINCi0JCWVsc2UgaWYodTFiQ2NrIDwgQ2NrVHhQd3JJZHgpDQotCQl7DQotCQkJcHJpdi0+YkVuaGFuY2VUeFB3cj0gZmFsc2U7DQotCQkJdTFiT2ZkbSA9ICgodTFiT2ZkbS0yKSA+IDApID8gKHUxYk9mZG0tMik6IDA7DQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCB1MWJPZmRtKTsNCi0JCQkvL1JUX1RSQUNFKENPTVBfUkFURSwgREJHX1RSQUNFLCAoIlJlY292ZXIgT0ZETV9UWEFHQygyKTogPT09PT0gdTFiT2ZkbT0gMHgleFxuIiwgdTFiT2ZkbSkpOw0KLQ0KLQkJfQ0KLQl9DQotDQotCS8vDQotCS8vIFdlIG5lZWQgdXBkYXRlIGluaXRpYWwgZ2FpbiB3aGVuIHdlIHNldCB0eCByYXRlICJmcm9tIE9GRE0gdG8gQ0NLIiBvcg0KLQkvLyAiZnJvbSBDQ0sgdG8gT0ZETSIuIA0KLQkvLw0KLVNldEluaXRpYWxHYWluOg0KLQlpZihiVXBkYXRlSW5pdGlhbEdhaW4pDQotCXsNCi0JCWlmKE1nbnRJc0Nja1JhdGUocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkpIC8vIENDSw0KLQkJew0KLQkJCWlmKHByaXYtPkluaXRpYWxHYWluID4gcHJpdi0+UmVnQk1vZGVHYWluU3RhZ2UpDQotCQkJew0KLQkJCQlwcml2LT5Jbml0aWFsR2FpbkJhY2tVcD0gcHJpdi0+SW5pdGlhbEdhaW47DQotDQotCQkJCWlmKEN1cnJTaWduYWxTdHJlbmd0aCA8IC04NSkgLy8gTG93IHBvd2VyLCBPRkRNIFsweDE3XSA9IDI2Lg0KLQkJCQl7DQotCQkJCQkvL1NEMyBTWXMgc3VnZ2VzdCB0aGF0IEN1cnJTaWduYWxTdHJlbmd0aCA8IC02NSwgb2ZkbSAweDE3PTI2Lg0KLQkJCQkJcHJpdi0+SW5pdGlhbEdhaW4gPSBwcml2LT5SZWdCTW9kZUdhaW5TdGFnZTsNCi0JCQkJfQ0KLQkJCQllbHNlIGlmKHByaXYtPkluaXRpYWxHYWluID4gcHJpdi0+UmVnQk1vZGVHYWluU3RhZ2UgKyAxKQ0KLQkJCQl7DQotCQkJCQlwcml2LT5Jbml0aWFsR2FpbiAtPSAyOw0KLQkJCQl9DQotCQkJCWVsc2UNCi0JCQkJew0KLQkJCQkJcHJpdi0+SW5pdGlhbEdhaW4gLS07DQotCQkJCX0NCi0JCQkJcHJpbnRrKCJTdGFSYXRlQWRhcHRpdmU4N1NFKCk6IHVwZGF0ZSBpbml0X2dhaW4gdG8gaW5kZXggJWQgZm9yIGRhdGUgcmF0ZSAlZFxuIixwcml2LT5Jbml0aWFsR2FpbiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CQkJDQotCQkJCVVwZGF0ZUluaXRpYWxHYWluKGRldik7DQotCQkJfQ0KLQkJfQ0KLQkJZWxzZSAvLyBPRkRNDQotCQl7CQkJDQotCQkJaWYocHJpdi0+SW5pdGlhbEdhaW4gPCA0KQ0KLQkJCXsNCi0JCQkJcHJpdi0+SW5pdGlhbEdhaW5CYWNrVXA9IHByaXYtPkluaXRpYWxHYWluOw0KLQ0KLQkJCQlwcml2LT5Jbml0aWFsR2FpbiArKzsNCi0JCQkJcHJpbnRrKCJTdGFSYXRlQWRhcHRpdmU4N1NFKCk6IHVwZGF0ZSBpbml0X2dhaW4gdG8gaW5kZXggJWQgZm9yIGRhdGUgcmF0ZSAlZFxuIixwcml2LT5Jbml0aWFsR2FpbiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CQkJDQotCQkJCVVwZGF0ZUluaXRpYWxHYWluKGRldik7DQotCQkJfQkJCQkJDQotCQl9DQotCX0NCi0NCi0JLy9SZWNvcmQgdGhlIHJlbGF0ZWQgaW5mbw0KLQlwcml2LT5MYXN0UmV0cnlSYXRlID0gQ3VyclJldHJ5UmF0ZTsNCi0JcHJpdi0+TGFzdFR4VGhyb3VnaHB1dCA9IFR4VGhyb3VnaHB1dDsNCi0JcHJpdi0+aWVlZTgwMjExLT5yYXRlID0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSAqIDU7DQotfQ0KLQ0KLSNlbmRpZg0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj1LRVJORUxfVkVSU0lPTigyLDYsMjApDQotdm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKiB3b3JrKQ0KLXsNCi0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yayxzdHJ1Y3QgZGVsYXllZF93b3JrLHdvcmspOw0KLSAgICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBjb250YWluZXJfb2YoZHdvcmssc3RydWN0IGllZWU4MDIxMV9kZXZpY2UscmF0ZV9hZGFwdGVyX3dxKTsNCi0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7DQotI2Vsc2UNCi12b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQotew0KLQ0KLSNlbmRpZg0KLSAgICAgICAgLy9zdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7DQotLy8gICAgRE1FU0coIi0tLS0+cnRsODE4MF9yYXRlX2FkYXB0ZXIiKTsNCi0gICAgICAgIFN0YVJhdGVBZGFwdGl2ZTg3U0UoZGV2KTsNCi0vLyAgIERNRVNHKCI8LS0tLXJ0bDgxODBfcmF0ZV9hZGFwdGVyIik7DQotfQ0KLXZvaWQgdGltZXJfcmF0ZV9hZGFwdGl2ZSh1bnNpZ25lZCBsb25nIGRhdGEpDQotew0KLQlzdHJ1Y3QgcjgxODBfcHJpdiogcHJpdiA9IGllZWU4MDIxMV9wcml2KChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGEpOw0KLQkvL0RNRVNHKCItLS0tPnRpbWVyX3JhdGVfYWRhcHRpdmUoKVxuIik7DQotCWlmKCFwcml2LT51cCkNCi0Jew0KLS8vCQlETUVTRygiPC0tLS10aW1lcl9yYXRlX2FkYXB0aXZlKCk6ZHJpdmVyIGlzIG5vdCB1cCFcbiIpOw0KLQkJcmV0dXJuOw0KLQl9DQotCWlmKChwcml2LT5pZWVlODAyMTEtPml3X21vZGUgIT0gSVdfTU9ERV9NQVNURVIpDQotCQkJJiYgKHByaXYtPmllZWU4MDIxMS0+c3RhdGUgPT0gSUVFRTgwMjExX0xJTktFRCkgJiYNCi0JCQkocHJpdi0+Rm9yY2VkRGF0YVJhdGUgPT0gMCkgKQ0KLQl7DQotLy8JRE1FU0coInRpbWVyX3JhdGVfYWRhcHRpdmUoKTpzY2hlZHVsZSByYXRlX2FkYXB0ZXJfd3FcbiIpOw0KLSNpZmRlZiBDT05GSUdfUlRMODE4WF9TDQotCQlxdWV1ZV93b3JrKHByaXYtPmllZWU4MDIxMS0+d3EsICh2b2lkICopJnByaXYtPmllZWU4MDIxMS0+cmF0ZV9hZGFwdGVyX3dxKTsNCi0vLwkJU3RhUmF0ZUFkYXB0aXZlODdTRSgoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhKTsNCi0jZW5kaWYNCi0JfQ0KLQlwcml2LT5yYXRlYWRhcHRlcl90aW1lci5leHBpcmVzID0gamlmZmllcyArIE1TRUNTKHByaXYtPlJhdGVBZGFwdGl2ZVBlcmlvZCk7DQotCWFkZF90aW1lcigmcHJpdi0+cmF0ZWFkYXB0ZXJfdGltZXIpOw0KLQkvL0RNRVNHKCI8LS0tLXRpbWVyX3JhdGVfYWRhcHRpdmUoKVxuIik7DQotfQ0KLS8vYnkgYW15IDA4MDMxMn0NCi12b2lkDQotU3dBbnRlbm5hRGl2ZXJzaXR5UnhPazgxODUoDQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIA0KLQl1OCBTaWduYWxTdHJlbmd0aA0KLQkpDQotew0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7DQotDQotLy8JcHJpbnRrKCIrU3dBbnRlbm5hRGl2ZXJzaXR5UnhPazgxODU6IFJ4U3M6ICVkXG4iLCBTaWduYWxTdHJlbmd0aCk7DQotDQotCXByaXYtPkFkUnhPa0NudCsrOw0KLQ0KLQlpZiggcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoICE9IC0xKQ0KLQl7DQotCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggPSAoKHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCo3KSArIChTaWduYWxTdHJlbmd0aCozKSkgLyAxMDsNCi0JfQ0KLQllbHNlDQotCXsgLy8gSW5pdGlhbGl6YXRpb24gY2FzZS4NCi0JCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCA9IFNpZ25hbFN0cmVuZ3RoOw0KLQl9DQotLy97K2J5IGFteSAwODAzMTINCi0JaWYoIHByaXYtPkxhc3RSeFBrdEFudGVubmEgKSAvL01haW4gYW50ZW5uYS4JDQotCQlwcml2LT5BZE1haW5BbnRlbm5hUnhPa0NudCsrOwkNCi0JZWxzZQkgLy8gQXV4IGFudGVubmEuDQotCQlwcml2LT5BZEF1eEFudGVubmFSeE9rQ250Kys7DQotLy8rYnkgYW15IDA4MDMxMg0KLS8vCXByaW50aygiLVN3QW50ZW5uYURpdmVyc2l0eVJ4T2s4MTg1OiBBZFJ4T2tDbnQ6ICVkIEFkUnhTaWduYWxTdHJlbmd0aDogJWRcbiIsIHByaXYtPkFkUnhPa0NudCwgcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoKTsNCi19DQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJQ2hhbmdlIEFudGVubmEgU3dpdGNoLg0KLS8vDQotYm9vbA0KLVNldEFudGVubmE4MTg1KA0KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LA0KLQl1OAkJdTFiQW50ZW5uYUluZGV4DQotCSkNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0JYm9vbCBiQW50ZW5uYVN3aXRjaGVkID0gZmFsc2U7DQotDQotLy8JcHJpbnRrKCIrU2V0QW50ZW5uYTgxODUoKTogQW50ZW5uYSBpcyBzd2l0Y2hpbmcgdG86ICVkIFxuIiwgdTFiQW50ZW5uYUluZGV4KTsNCi0NCi0Jc3dpdGNoKHUxYkFudGVubmFJbmRleCkNCi0Jew0KLQljYXNlIDA6DQotCQlzd2l0Y2gocHJpdi0+cmZfY2hpcCkNCi0JCXsNCi0JCWNhc2UgUkZfWkVCUkEyOg0KLQkJY2FzZSBSRl9aRUJSQTQ6DQotI2lmZGVmIENPTkZJR19SVEw4MTg1Qg0KLSNpZmRlZiBDT05GSUdfUlRMODE4WF9TDQotCQkJLy8gTWFjIHJlZ2lzdGVyLCBtYWluIGFudGVubmENCi0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOVFNFTCwgMHgwMyk7IA0KLQkJCS8vYmFzZSBiYW5kDQotCQkJd3JpdGVfcGh5X2NjayhkZXYsMHgxMSwgMHg5Yik7IC8vIENvbmZpZyBDQ0sgUlggYW50ZW5uYS4NCi0JCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MGQsIDB4NWMpOyAvLyBDb25maWcgT0ZETSBSWCBhbnRlbm5hLg0KLQ0KLSNlbHNlDQotCQkJLy8gTWFjIHJlZ2lzdGVyLCBtYWluIGFudGVubmENCi0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOVFNFTCwgMHgwMyk7IA0KLQkJCS8vYmFzZSBiYW5kDQotCQkJd3JpdGVfcGh5X2NjayhkZXYsIDB4MTAsIDB4OWIpOyAvLyBDb25maWcgQ0NLIFJYIGFudGVubmEuDQotCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDVjKTsgLy8gQ29uZmlnIE9GRE0gUlggYW50ZW5uYS4NCi0jZW5kaWYNCi0jZW5kaWYNCi0NCi0JCQliQW50ZW5uYVN3aXRjaGVkID0gdHJ1ZTsNCi0JCQlicmVhazsNCi0NCi0JCWRlZmF1bHQ6DQotCQkJcHJpbnRrKCJTZXRBbnRlbm5hODE4NTogdW5rb3duIFJGQ2hpcElEKCVkKVxuIiwgcHJpdi0+cmZfY2hpcCk7DQotCQkJYnJlYWs7DQotCQl9DQotCQlicmVhazsNCi0NCi0JY2FzZSAxOg0KLQkJc3dpdGNoKHByaXYtPnJmX2NoaXApDQotCQl7DQotCQljYXNlIFJGX1pFQlJBMjoNCi0JCWNhc2UgUkZfWkVCUkE0Og0KLSNpZmRlZiBDT05GSUdfUlRMODE4NUINCi0jaWZkZWYgQ09ORklHX1JUTDgxOFhfUw0KLQkJCS8vIE1hYyByZWdpc3RlciwgYXV4IGFudGVubmENCi0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOVFNFTCwgMHgwMCk7IA0KLQkJCS8vYmFzZSBiYW5kDQotCQkJd3JpdGVfcGh5X2NjayhkZXYsIDB4MTEsIDB4YmIpOyAvLyBDb25maWcgQ0NLIFJYIGFudGVubmEuDQotCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDU0KTsgLy8gQ29uZmlnIE9GRE0gUlggYW50ZW5uYS4NCi0jZWxzZQ0KLQkJCS8vIE1hYyByZWdpc3RlciwgYXV4IGFudGVubmENCi0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOVFNFTCwgMHgwMCk7IA0KLQkJCS8vYmFzZSBiYW5kDQotCQkJd3JpdGVfcGh5X2NjayhkZXYsIDB4MTAsIDB4YmIpOyAvLyBDb25maWcgQ0NLIFJYIGFudGVubmEuDQotCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDU0KTsgLy8gQ29uZmlnIE9GRE0gUlggYW50ZW5uYS4NCi0jZW5kaWYNCi0jZW5kaWYNCi0NCi0JCQliQW50ZW5uYVN3aXRjaGVkID0gdHJ1ZTsNCi0JCQlicmVhazsNCi0NCi0JCWRlZmF1bHQ6DQotCQkJcHJpbnRrKCJTZXRBbnRlbm5hODE4NTogdW5rb3duIFJGQ2hpcElEKCVkKVxuIiwgcHJpdi0+cmZfY2hpcCk7DQotCQkJYnJlYWs7DQotCQl9DQotCQlicmVhazsNCi0NCi0JZGVmYXVsdDoNCi0JCXByaW50aygiU2V0QW50ZW5uYTgxODU6IHVua293biB1MWJBbnRlbm5hSW5kZXgoJWQpXG4iLCB1MWJBbnRlbm5hSW5kZXgpOw0KLQkJYnJlYWs7DQotCX0NCi0NCi0JaWYoYkFudGVubmFTd2l0Y2hlZCkNCi0Jew0KLQkJcHJpdi0+Q3VyckFudGVubmFJbmRleCA9IHUxYkFudGVubmFJbmRleDsNCi0JfQ0KLQ0KLS8vCXByaW50aygiLVNldEFudGVubmE4MTg1KCk6IHJldHVybiAoJSNYKVxuIiwgYkFudGVubmFTd2l0Y2hlZCk7DQotDQotCXJldHVybiBiQW50ZW5uYVN3aXRjaGVkOw0KLX0NCi0vLw0KLS8vCURlc2NyaXB0aW9uOg0KLS8vCQlUb2dnbGUgQW50ZW5uYSBzd2l0Y2guDQotLy8NCi1ib29sDQotU3dpdGNoQW50ZW5uYSgNCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldg0KLQkpDQotew0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7DQotDQotCWJvb2wJCWJSZXN1bHQ7DQotDQotCWlmKHByaXYtPkN1cnJBbnRlbm5hSW5kZXggPT0gMCkNCi0Jew0KLSNpZiAwLy9sem0gZGVsIDA4MDgyNg0KLS8vYnkgYW15IDA4MDMxMg0KLSNpZmRlZiBDT05GSUdfUlRMODE4WF9TDQotCQlpZihwcml2LT5iU3dBbnRlbm5hRGl2ZXJpdHkpDQotCQkJYlJlc3VsdCA9IFNldEFudGVubmFDb25maWc4N1NFKGRldiwgMSwgdHJ1ZSk7DQotCQllbHNlCQkJDQotI2VuZGlmDQotI2VuZGlmDQotCQkJYlJlc3VsdCA9IFNldEFudGVubmE4MTg1KGRldiwgMSk7DQotLy9ieSBhbXkgMDgwMzEyDQotLy8JCXByaW50aygiU3dpdGNoQW50ZW5uYSgpOiBzd2l0Y2hpbmcgdG8gYW50ZW5uYSAxIC4uLi4uLlxuIik7DQotLy8JCWJSZXN1bHQgPSBTZXRBbnRlbm5hODE4NShkZXYsIDEpOy8vLWJ5IGFteSAwODAzMTINCi0JfQ0KLQllbHNlDQotCXsNCi0jaWYgMC8vbHptIGRlbCAwODA4MjYNCi0vL2J5IGFteSAwODAzMTINCi0jaWZkZWYgQ09ORklHX1JUTDgxOFhfUw0KLQkJaWYocHJpdi0+YlN3QW50ZW5uYURpdmVyaXR5KQ0KLQkJCWJSZXN1bHQgPSBTZXRBbnRlbm5hQ29uZmlnODdTRShkZXYsIDAsIHRydWUpOw0KLQkJZWxzZQkNCi0jZW5kaWYNCi0jZW5kaWYNCi0JCQliUmVzdWx0ID0gU2V0QW50ZW5uYTgxODUoZGV2LCAwKTsNCi0vL2J5IGFteSAwODAzMTINCi0vLwkJcHJpbnRrKCJTd2l0Y2hBbnRlbm5hKCk6IHN3aXRjaGluZyB0byBhbnRlbm5hIDAgLi4uLi4uXG4iKTsNCi0vLwkJYlJlc3VsdCA9IFNldEFudGVubmE4MTg1KGRldiwgMCk7Ly8tYnkgYW15IDA4MDMxMg0KLQl9DQotDQotCXJldHVybiBiUmVzdWx0Ow0KLX0NCi0vLw0KLS8vCURlc2NyaXB0aW9uOg0KLS8vCQlFbmdpbmUgb2YgU1cgQW50ZW5uYSBEaXZlcnNpdHkgbWVjaGFuaXNtLg0KLS8vCQlTaW5jZSA4MTg3IGhhcyBubyBUeCBwYXJ0IGluZm9ybWF0aW9uLCANCi0vLwkJdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBvbmx5IGRlcGVuZGVuZCBvbiBSeCBwYXJ0IGluZm9ybWF0aW9uLiANCi0vLw0KLS8vCTIwMDYuMDQuMTcsIGJ5IHJjbmprby4NCi0vLw0KLXZvaWQNCi1Td0FudGVubmFEaXZlcnNpdHkoDQotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYNCi0JKQ0KLXsNCi0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOw0KLQlib29sICAgYlN3Q2hlY2tTUz1mYWxzZTsNCi0vLwlwcmludGsoIitTd0FudGVubmFEaXZlcnNpdHkoKTogQ3VyckFudGVubmFJbmRleDogJWRcbiIsIHByaXYtPkN1cnJBbnRlbm5hSW5kZXgpOw0KLS8vCXByaW50aygiQWRUaWNrQ291bnQgaXMgJWRcbiIscHJpdi0+QWRUaWNrQ291bnQpOw0KLS8vYnkgYW15IDA4MDMxMg0KLQlpZihiU3dDaGVja1NTKQ0KLQl7DQotCQlwcml2LT5BZFRpY2tDb3VudCsrOw0KLQkNCi0JCXByaW50aygiKDEpIEFkVGlja0NvdW50OiAlZCwgQWRDaGVja1BlcmlvZDogJWRcbiIsIA0KLQkJCXByaXYtPkFkVGlja0NvdW50LCBwcml2LT5BZENoZWNrUGVyaW9kKTsNCi0JCXByaW50aygiKDIpIEFkUnhTaWduYWxTdHJlbmd0aDogJWxkLCBBZFJ4U3NUaHJlc2hvbGQ6ICVsZFxuIiwgDQotCQkJcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoLCBwcml2LT5BZFJ4U3NUaHJlc2hvbGQpOw0KLQl9DQotLy8JcHJpdi0+QWRUaWNrQ291bnQrKzsvLy1ieSBhbXkgMDgwMzEyDQotCQ0KLQkvLyBDYXNlIDEuIE5vIExpbmsuDQotCWlmKHByaXYtPmllZWU4MDIxMS0+c3RhdGUgIT0gSUVFRTgwMjExX0xJTktFRCkNCi0Jew0KLQkvLwlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBDYXNlIDEuIE5vIExpbmsuXG4iKTsNCi0NCi0JCXByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPSBmYWxzZTsNCi0JCS8vIEkgc3dpdGNoIGFudGVubmEgaGVyZSB0byBwcmV2ZW50IGFueSBvbmUgb2YgYW50ZW5uYSBpcyBicm9rZW4gYmVmb3JlIGxpbmsgZXN0YWJsaXNoZWQsIDIwMDYuMDQuMTgsIGJ5IHJjbmprby4uDQotCQlTd2l0Y2hBbnRlbm5hKGRldik7DQotCX0NCi0JLy8gQ2FzZSAyLiBMaW5rZWQgYnV0IG5vIHBhY2tldCByZWNlaXZlZC4NCi0JZWxzZSBpZihwcml2LT5BZFJ4T2tDbnQgPT0gMCkNCi0Jew0KLQkvLwlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBDYXNlIDIuIExpbmtlZCBidXQgbm8gcGFja2V0IHJlY2VpdmVkLlxuIik7DQotDQotCQlwcml2LT5iQWRTd2l0Y2hlZENoZWNraW5nID0gZmFsc2U7DQotCQlTd2l0Y2hBbnRlbm5hKGRldik7DQotCX0NCi0JLy8gQ2FzZSAzLiBFdmFsdWF0ZSBsYXN0IGFudGVubmEgc3dpdGNoIGFjdGlvbiBhbmQgdW5kbyBpdCBpZiBuZWNlc3NhcnkuDQotCWVsc2UgaWYocHJpdi0+YkFkU3dpdGNoZWRDaGVja2luZyA9PSB0cnVlKQ0KLQl7DQotCS8vCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IENhc2UgMy4gRXZhbHVhdGUgbGFzdCBhbnRlbm5hIHN3aXRjaCBhY3Rpb24uXG4iKTsNCi0NCi0JCXByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPSBmYWxzZTsNCi0NCi0JCS8vIEFkanVzdCBSeCBzaWduYWwgc3RyZW5ndGggdGhyZWFzaG9sZC4NCi0JCXByaXYtPkFkUnhTc1RocmVzaG9sZCA9IChwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggKyBwcml2LT5BZFJ4U3NCZWZvcmVTd2l0Y2hlZCkgLyAyOw0KLQ0KLQkJcHJpdi0+QWRSeFNzVGhyZXNob2xkID0gKHByaXYtPkFkUnhTc1RocmVzaG9sZCA+IHByaXYtPkFkTWF4UnhTc1RocmVzaG9sZCkgPwkNCi0JCQkJCXByaXYtPkFkTWF4UnhTc1RocmVzaG9sZDogcHJpdi0+QWRSeFNzVGhyZXNob2xkOw0KLQkJaWYocHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoIDwgcHJpdi0+QWRSeFNzQmVmb3JlU3dpdGNoZWQpDQotCQl7IC8vIFJ4IHNpZ25hbCBzdHJlbmd0aCBpcyBub3QgaW1wcm92ZWQgYWZ0ZXIgd2Ugc3d0aWNoZWQgYW50ZW5uYS4gPT4gU3dpY2ggYmFjay4NCi0vLwkJCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IFJ4IFNpZ25hbCBTdHJlbmd0aCBpcyBub3QgaW1wcm92ZWQsIEN1cnJSeFNzOiAlZCwgTGFzdFJ4U3M6ICVkXG4iLCANCi0vLwkJCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgsIHByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkKTsNCi0vL2J5IGFteSAwODAzMTINCi0JCQkvLyBJbmNyZWFzZSBBbnRlbm5hIERpdmVyc2l0eSBjaGVja2luZyBwZXJpb2QgZHVlIHRvIGJhZCBkZWNpc2lvbi4NCi0JCQlwcml2LT5BZENoZWNrUGVyaW9kICo9IDI7DQotLy9ieSBhbXkgMDgwMzEyDQotCQkJLy8gSW5jcmVhc2UgQW50ZW5uYSBEaXZlcnNpdHkgY2hlY2tpbmcgcGVyaW9kLg0KLQkJCWlmKHByaXYtPkFkQ2hlY2tQZXJpb2QgPiBwcml2LT5BZE1heENoZWNrUGVyaW9kKQ0KLQkJCQlwcml2LT5BZENoZWNrUGVyaW9kID0gcHJpdi0+QWRNYXhDaGVja1BlcmlvZDsNCi0JDQotCQkJLy8gV3JvbmcgZGVjZWlzaW9uID0+IHN3aXRjaCBiYWNrLg0KLQkJCVN3aXRjaEFudGVubmEoZGV2KTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsgLy8gUnggU2lnbmFsIFN0cmVuZ3RoIGlzIGltcHJvdmVkLiANCi0vLwkJCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IFJ4IFNpZ25hbCBTdHJlbmd0aCBpcyBpbXByb3ZlZCwgQ3VyclJ4U3M6ICVkLCBMYXN0UnhTczogJWRcbiIsIA0KLS8vCQkJCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCwgcHJpdi0+QWRSeFNzQmVmb3JlU3dpdGNoZWQpOw0KLQ0KLQkJCS8vIFJlc2V0IEFudGVubmEgRGl2ZXJzaXR5IGNoZWNraW5nIHBlcmlvZCB0byBpdHMgbWluIHZhbHVlLg0KLQkJCXByaXYtPkFkQ2hlY2tQZXJpb2QgPSBwcml2LT5BZE1pbkNoZWNrUGVyaW9kOw0KLQkJfQ0KLQ0KLS8vCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBBZFJ4U3NUaHJlc2hvbGQ6ICVkLCBBZENoZWNrUGVyaW9kOiAlZFxuIiwNCi0vLwkJCXByaXYtPkFkUnhTc1RocmVzaG9sZCwgcHJpdi0+QWRDaGVja1BlcmlvZCk7DQotCX0NCi0JLy8gQ2FzZSA0LiBFdmFsdWF0ZSBpZiB3ZSBzaGFsbCBzd2l0Y2ggYW50ZW5uYSBub3cuDQotCS8vIENhdXNlIFRhYmxlIFNwZWVkIGlzIHZlcnkgZmFzdCBpbiBUUkMgRGVsbCBMYWIsIHdlIGNoZWNrIGl0IGV2ZXJ5IHRpbWUuIA0KLQllbHNlLy8gaWYocHJpdi0+QWRUaWNrQ291bnQgPj0gcHJpdi0+QWRDaGVja1BlcmlvZCkvLy1ieSBhbXkgMDgwMzEyDQotCXsNCi0vLwkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQ2FzZSA0LiBFdmFsdWF0ZSBpZiB3ZSBzaGFsbCBzd2l0Y2ggYW50ZW5uYSBub3cuXG4iKTsNCi0NCi0JCXByaXYtPkFkVGlja0NvdW50ID0gMDsNCi0NCi0JCS8vDQotCQkvLyA8Um9nZXJfTm90ZXM+IFdlIGV2YWx1YXRlIFJ4T2sgY291bnRzIGZvciBlYWNoIGFudGVubmEgZmlyc3QgYW5kIHRoYW4gDQotCQkvLyBldmFsdWF0ZSBzaWduYWwgc3RyZW5ndGguIA0KLQkJLy8gVGhlIGZvbGxvd2luZyBvcGVyYXRpb24gY2FuIG92ZXJjb21lIHRoZSBkaXNhYmlsaXR5IG9mIENDQSBvbiBib3RoIHR3byBhbnRlbm5hcw0KLQkJLy8gV2hlbiBzaWduYWwgc3RyZW5ndGggd2FzIGV4dHJlbWVseSBsb3cgb3IgaGlnaC4NCi0JCS8vIDIwMDguMDEuMzAuDQotCQkvLyANCi0JCQ0KLQkJLy8NCi0JCS8vIEV2YWx1YXRlIFJ4T2sgY291bnQgZnJvbSBlYWNoIGFudGVubmEgaWYgd2Ugc2hhbGwgc3dpdGNoIGRlZmF1bHQgYW50ZW5uYSBub3cuDQotCQkvLyBBZGRlZCBieSBSb2dlciwgMjAwOC4wMi4yMS4NCi0vL3tieSBhbXkgMDgwMzEyDQotCQlpZigocHJpdi0+QWRNYWluQW50ZW5uYVJ4T2tDbnQgPCBwcml2LT5BZEF1eEFudGVubmFSeE9rQ250KSANCi0JCQkmJiAocHJpdi0+Q3VyckFudGVubmFJbmRleCA9PSAwKSkNCi0JCXsgLy8gV2Ugc2V0IE1haW4gYW50ZW5uYSBhcyBkZWZhdWx0IGJ1dCBSeE9rIGNvdW50IHdhcyBsZXNzIHRoYW4gQXV4IG9uZXMuDQotDQotCS8vCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBNYWluIGFudGVubmEgUnhPSyBpcyBwb29yLCBBZE1haW5BbnRlbm5hUnhPa0NudDogJWQsIEFkQXV4QW50ZW5uYVJ4T2tDbnQ6ICVkXG4iLCANCi0JLy8JCQlwcml2LT5BZE1haW5BbnRlbm5hUnhPa0NudCwgcHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCk7DQotCQkJDQotCQkJLy8gU3dpdGNoIHRvIEF1eCBhbnRlbm5hLg0KLQkJCVN3aXRjaEFudGVubmEoZGV2KTsJDQotCQkJcHJpdi0+YkhXQWRTd2l0Y2hlZCA9IHRydWU7DQotCQl9DQotCQllbHNlIGlmKChwcml2LT5BZEF1eEFudGVubmFSeE9rQ250IDwgcHJpdi0+QWRNYWluQW50ZW5uYVJ4T2tDbnQpIA0KLQkJCSYmIChwcml2LT5DdXJyQW50ZW5uYUluZGV4ID09IDEpKQ0KLQkJeyAvLyBXZSBzZXQgQXV4IGFudGVubmEgYXMgZGVmYXVsdCBidXQgUnhPayBjb3VudCB3YXMgbGVzcyB0aGFuIE1haW4gb25lcy4NCi0NCi0JLy8JCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IEF1eCBhbnRlbm5hIFJ4T0sgaXMgcG9vciwgQWRNYWluQW50ZW5uYVJ4T2tDbnQ6ICVkLCBBZEF1eEFudGVubmFSeE9rQ250OiAlZFxuIiwgDQotCS8vCQkJcHJpdi0+QWRNYWluQW50ZW5uYVJ4T2tDbnQsIHByaXYtPkFkQXV4QW50ZW5uYVJ4T2tDbnQpOw0KLQkJCQ0KLQkJCS8vIFN3aXRjaCB0byBNYWluIGFudGVubmEuDQotCQkJU3dpdGNoQW50ZW5uYShkZXYpOw0KLQkJCXByaXYtPmJIV0FkU3dpdGNoZWQgPSB0cnVlOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJey8vIERlZmF1bHQgYW50ZW5uYSBpcyBiZXR0ZXIuDQotDQotCS8vCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBEZWZhdWx0IGFudGVubmEgaXMgYmV0dGVyLiwgQWRNYWluQW50ZW5uYVJ4T2tDbnQ6ICVkLCBBZEF1eEFudGVubmFSeE9rQ250OiAlZFxuIiwgDQotCS8vCQkJcHJpdi0+QWRNYWluQW50ZW5uYVJ4T2tDbnQsIHByaXYtPkFkQXV4QW50ZW5uYVJ4T2tDbnQpOw0KLQ0KLQkJCS8vIFN0aWxsIG5lZWQgdG8gY2hlY2sgY3VycmVudCBzaWduYWwgc3RyZW5ndGguDQotCQkJcHJpdi0+YkhXQWRTd2l0Y2hlZCA9IGZhbHNlOwkNCi0JCX0NCi0JCS8vDQotCQkvLyA8Um9nZXJfTm90ZXM+IFdlIGV2YWx1YXRlIFJ4IHNpZ25hbCBzdHJlbmd0aCBPTkxZIHdoZW4gZGVmYXVsdCBhbnRlbm5hIA0KLQkJLy8gZGlkbid0IGNoYW5nZWQgYnkgSFcgZXZhbHVhdGlvbi4gDQotCQkvLyAyMDA4LjAyLjI3Lg0KLQkJLy8NCi0JCS8vIFtUUkMgRGVsbCBMYWJdIFNpZ25hbFN0cmVuZ3RoIGlzIGluYWNjdXJhY3kuIElzYWlhaCAyMDA4LTAzLTA1IA0KLQkJLy8gRm9yIGV4YW1wbGUsIFRocm91Z2hwdXQgb2YgYXV4IGlzIGJldHRlciB0aGFuIG1haW4gYW50ZW5uYShhYm91dCAxME0gdi5zIDJNKSwgDQotCQkvLyBidXQgQWRSeFNpZ25hbFN0cmVuZ3RoIGlzIGxlc3MgdGhhbiBtYWluLiANCi0JCS8vIE91ciBndWVzcyBpcyB0aGF0IG1haW4gYW50ZW5uYSBoYXZlIGxvd2VyIHRocm91Z2hwdXQgYW5kIGdldCBtYW55IGNoYW5nZSANCi0JCS8vIHRvIHJlY2VpdmUgbW9yZSBDQ0sgcGFja2V0cyhleC5CZWFjb24pIHdoaWNoIGhhdmUgc3Ryb25nZXIgU2lnbmFsU3RyZW5ndGguDQotCQkvLw0KLQkJaWYoICghcHJpdi0+YkhXQWRTd2l0Y2hlZCkgJiYgKGJTd0NoZWNrU1MpKQ0KLQkJew0KLS8vYnkgYW15IDA4MDMxMn0NCi0JCS8vIEV2YWx1YXRlIFJ4IHNpZ25hbCBzdHJlbmd0aCBpZiB3ZSBzaGFsbCBzd2l0Y2ggYW50ZW5uYSBub3cuDQotCQlpZihwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggPCBwcml2LT5BZFJ4U3NUaHJlc2hvbGQpDQotCQl7IC8vIFJ4IHNpZ25hbCBzdHJlbmd0aCBpcyB3ZWFrID0+IFN3aXRjaCBBbnRlbm5hLg0KLS8vCQkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogUnggU2lnbmFsIFN0cmVuZ3RoIGlzIHdlYWssIEN1cnJSeFNzOiAlZCwgUnhTc1RocmVzaG9sZDogJWRcbiIsIA0KLS8vCQkJCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCwgcHJpdi0+QWRSeFNzVGhyZXNob2xkKTsJDQotDQotCQkJcHJpdi0+QWRSeFNzQmVmb3JlU3dpdGNoZWQgPSBwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGg7IA0KLQkJCXByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPSB0cnVlOw0KLQ0KLQkJCVN3aXRjaEFudGVubmEoZGV2KTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsgLy8gUnggc2lnbmFsIHN0cmVuZ3RoIGlzIE9LLiANCi0vLwkJCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IFJ4IFNpZ25hbCBTdHJlbmd0aCBpcyBPSywgQ3VyclJ4U3M6ICVkLCBSeFNzVGhyZXNob2xkOiAlZFxuIiwgDQotLy8JCQkJcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoLCBwcml2LT5BZFJ4U3NUaHJlc2hvbGQpOw0KLQ0KLQkJCXByaXYtPmJBZFN3aXRjaGVkQ2hlY2tpbmcgPSBmYWxzZTsNCi0JCQkvLyBJbmNyZWFzZSBSeCBzaWduYWwgc3RyZW5ndGggdGhyZWFzaG9sZCBpZiBuZWNlc3NhcnkuDQotCQkJaWYoCShwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggPiAocHJpdi0+QWRSeFNzVGhyZXNob2xkICsgMTApKSAmJiAvLyBTaWduYWwgaXMgbXVjaCBzdHJvbmdlciB0aGFuIGN1cnJlbnQgdGhyZXNob2xkDQotCQkJCXByaXYtPkFkUnhTc1RocmVzaG9sZCA8PSBwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQpIC8vIEN1cnJlbnQgdGhyZWhvbGQgaXMgbm90IHlldCByZWFjaCB1cHBlciBsaW1pdC4NCi0JCQl7DQotCQkJCXByaXYtPkFkUnhTc1RocmVzaG9sZCA9IChwcml2LT5BZFJ4U3NUaHJlc2hvbGQgKyBwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgpIC8gMjsNCi0JCQkJcHJpdi0+QWRSeFNzVGhyZXNob2xkID0gKHByaXYtPkFkUnhTc1RocmVzaG9sZCA+IHByaXYtPkFkTWF4UnhTc1RocmVzaG9sZCkgPw0KLQkJCQkJCQkJCQkJCXByaXYtPkFkTWF4UnhTc1RocmVzaG9sZDogcHJpdi0+QWRSeFNzVGhyZXNob2xkOy8vK2J5IGFteSAwODAzMTINCi0JCQl9DQotDQotCQkJLy8gUmVkdWNlIEFudGVubmEgRGl2ZXJzaXR5IGNoZWNraW5nIHBlcmlvZCBpZiBwb3NzaWJsZS4gDQotCQkJaWYoIHByaXYtPkFkQ2hlY2tQZXJpb2QgPiBwcml2LT5BZE1pbkNoZWNrUGVyaW9kICkNCi0JCQl7DQotCQkJCXByaXYtPkFkQ2hlY2tQZXJpb2QgLz0gMjsgDQotCQkJfQ0KLQkJfQ0KLQkJfQ0KLQl9DQotLy9ieSBhbXkgMDgwMzEyDQotCS8vIFJlc2V0IGFudGVubmEgZGl2ZXJzaXR5IFJ4IHJlbGF0ZWQgc3RhdGlzdGljcy4NCi0JcHJpdi0+QWRSeE9rQ250ID0gMDsNCi0JcHJpdi0+QWRNYWluQW50ZW5uYVJ4T2tDbnQgPSAwOw0KLQlwcml2LT5BZEF1eEFudGVubmFSeE9rQ250ID0gMDsNCi0vL2J5IGFteSAwODAzMTINCi0NCi0vLwlwcml2LT5BZFJ4T2tDbnQgPSAwOy8vLWJ5IGFteSAwODAzMTINCi0NCi0vLwlwcmludGsoIi1Td0FudGVubmFEaXZlcnNpdHkoKVxuIik7DQotfQ0KLQ0KLS8vDQotLy8JRGVzY3JpcHRpb246DQotLy8JCVJldHVybiBUUlVFIGlmIHdlIHNoYWxsIHBlcmZvcm0gVHggUG93ZXIgVHJhY2tpbmcgTWVjYWhuaXNtLCBGQUxTRSBvdGhlcndpc2UuCQ0KLS8vDQotYm9vbA0KLUNoZWNrVHhQd3JUcmFja2luZygJc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCi17DQotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsNCi0NCi0JaWYoIXByaXYtPmJUeFBvd2VyVHJhY2spDQotCXsNCi0JCXJldHVybiBmYWxzZTsNCi0JfQ0KLQ0KLS8vbHptIHJlc2VydmVkIDA4MDgyNg0KLQkvL2lmKHByaXYtPmJTY2FuSW5Qcm9ncmVzcykNCi0JLy97DQotCS8vCXJldHVybiBmYWxzZTsNCi0JLy99DQotDQotCS8vaWYgODdTRSBpcyBpbiBIaWdoIFBvd2VyICwgZG9uJ3QgZG8gVHggUG93ZXIgVHJhY2tpbmcuIGFza2VkIGJ5IFNEMyBFRC4gMjAwOC0wOC0wOCBJc2FpYWggDQotCWlmKHByaXYtPmJUb1VwZGF0ZVR4UHdyKQ0KLQl7DQotCQlyZXR1cm4gZmFsc2U7DQotCX0NCi0JCQ0KLQlyZXR1cm4gdHJ1ZTsNCi19DQotDQotDQotLy8NCi0vLwlEZXNjcmlwdGlvbjoNCi0vLwkJVGltZXIgY2FsbGJhY2sgZnVuY3Rpb24gb2YgU1cgQW50ZW5uYSBEaXZlcnNpdHkuDQotLy8NCi12b2lkDQotU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXJDYWxsYmFjaygNCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldg0KLQkpDQotew0KLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7DQotCVJUX1JGX1BPV0VSX1NUQVRFIHJ0U3RhdGU7DQotCQ0KLQkvL3ByaW50aygiK1N3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soKVxuIik7DQotDQotCS8vDQotCS8vIFdlIGRvIE5PVCBuZWVkIHRvIHN3aXRjaCBhbnRlbm5hIHdoaWxlIFJGIGlzIG9mZi4NCi0JLy8gMjAwNy4wNS4wOSwgYWRkZWQgYnkgUm9nZXIuDQotCS8vDQotCXJ0U3RhdGUgPSBwcml2LT5lUkZQb3dlclN0YXRlOw0KLQlkb3sNCi0JCWlmIChydFN0YXRlID09IGVSZk9mZikNCi0JCXsJDQotLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eVRpbWVyIC0gUkYgaXMgT0ZGLlxuIik7DQotCQkJYnJlYWs7DQotCQl9ICAJDQotCQllbHNlIGlmIChydFN0YXRlID09IGVSZlNsZWVwKQ0KLQkJewkNCi0JCQkvLyBEb24ndCBhY2Nlc3MgQkIvUkYgdW5kZXIgRGlzYWJsZSBQTEwgc2l0dWF0aW9uLg0KLQkJCS8vUlRfVFJBQ0UoKENPTVBfUkZ8Q09NUF9BTlRFTk5BKSwgREJHX0xPVUQsICgiU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXJDYWxsYmFjaygpOiBSRiBpcyBTbGVlcCA9PiBza2lwIGl0XG4iKSk7DQotCQkJYnJlYWs7DQotCQl9ICANCi0JCVN3QW50ZW5uYURpdmVyc2l0eShkZXYpOw0KLQ0KLQl9d2hpbGUoZmFsc2UpOw0KLQ0KLQlpZihwcml2LT51cCkNCi0Jew0KLQkJcHJpdi0+U3dBbnRlbm5hRGl2ZXJzaXR5VGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBNU0VDUyhBTlRFTk5BX0RJVkVSU0lUWV9USU1FUl9QRVJJT0QpOw0KLQkJYWRkX3RpbWVyKCZwcml2LT5Td0FudGVubmFEaXZlcnNpdHlUaW1lcik7DQotCX0NCi0NCi0JLy9wcmludGsoIi1Td0FudGVubmFEaXZlcnNpdHlUaW1lckNhbGxiYWNrKClcbiIpOw0KLX0NCi0NCisvLyNpbmNsdWRlICJyODE4MC5oIgorI2luY2x1ZGUgInI4MTgwX2RtLmgiCisjaW5jbHVkZSAicjgxODBfaHcuaCIKKyNpbmNsdWRlICJyODE4MF85M2N4Ni5oIgorLy97YnkgYW15IDA4MDMxMgorCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJUmV0dXJuIFRSVUUgaWYgd2Ugc2hhbGwgcGVyZm9ybSBIaWdoIFBvd2VyIE1lY2FobmlzbSwgRkFMU0Ugb3RoZXJ3aXNlLgorLy8KKy8vK2J5IGFteSAwODAzMTIKKyNkZWZpbmUgUkFURV9BREFQVElWRV9USU1FUl9QRVJJT0QgICAgICAzMDAKKworYm9vbCBDaGVja0hpZ2hQb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU4MDIxMTsKKworCWlmKCFwcml2LT5iUmVnSGlnaFBvd2VyTWVjaGFuaXNtKQorCXsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRURfU0NBTk5JTkcpCisJeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlVcGRhdGUgVHggcG93ZXIgbGV2ZWwgaWYgbmVjZXNzYXJ5LgorLy8JCVNlZSBhbHNvIERvUnhIaWdoUG93ZXIoKSBhbmQgU2V0VHhQb3dlckxldmVsODE4NSgpIGZvciByZWZlcmVuY2UuCisvLworLy8JTm90ZToKKy8vCQlUaGUgcmVhc29uIHdoeSB3ZSB1ZHBhdGUgVHggcG93ZXIgbGV2ZWwgaGVyZSBpbnN0ZWFkIG9mIERvUnhIaWdoUG93ZXIoKQorLy8JCWlzIHRoZSBudW1iZXIgb2YgSU8gdG8gY2hhbmdlIFR4IHBvd2VyIGlzIG11Y2ggbW9yZSB0aGFuIGNoYW5lIFRSIHN3aXRjaAorLy8JCWFuZCB0aGV5IGFyZSByZWxhdGVkIHRvIE9GRE0gYW5kIE1BQyByZWdpc3RlcnMuCisvLwkJU28sIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIGl0IHNvIGZyZXF1ZW50bHkgaW4gcGVyLVJ4IHBhY2tldCBiYXNlLgorLy8KK3ZvaWQKK0RvVHhIaWdoUG93ZXIoCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldgorCSkKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJdTE2CQkJSGlQd3JVcHBlclRoID0gMDsKKwl1MTYJCQlIaVB3ckxvd2VyVGggPSAwOworCXU4CQkJUlNTSUhpUHdyVXBwZXJUaDsKKwl1OAkJCVJTU0lIaVB3ckxvd2VyVGg7CisJdTgJCQl1MWJUbXA7CisJY2hhcgkJCU9mZG1UeFB3cklkeCwgQ2NrVHhQd3JJZHg7CisKKwkvL3ByaW50aygiLS0tLT4gRG9UeEhpZ2hQb3dlcigpXG4iKTsKKworCUhpUHdyVXBwZXJUaCA9IHByaXYtPlJlZ0hpUHdyVXBwZXJUaDsKKwlIaVB3ckxvd2VyVGggPSBwcml2LT5SZWdIaVB3ckxvd2VyVGg7CisKKwlIaVB3clVwcGVyVGggPSBIaVB3clVwcGVyVGggKiAxMDsKKwlIaVB3ckxvd2VyVGggPSBIaVB3ckxvd2VyVGggKiAxMDsKKwlSU1NJSGlQd3JVcHBlclRoID0gcHJpdi0+UmVnUlNTSUhpUHdyVXBwZXJUaDsKKwlSU1NJSGlQd3JMb3dlclRoID0gcHJpdi0+UmVnUlNTSUhpUHdyTG93ZXJUaDsKKworCS8vbHptIGFkZCAwODA4MjYKKwlPZmRtVHhQd3JJZHggID0gcHJpdi0+Y2h0eHB3cl9vZmRtW3ByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWxdOworCUNja1R4UHdySWR4ICA9IHByaXYtPmNodHhwd3JbcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbF07CisKKwkvLwlwcmludGsoIkRvVHhIaWdoUG93ZXIoKSAtIFVuZGVjb3JhdGVkU21vb3RoZWRTUzolZCwgQ3VyQ0NLUlNTSSA9ICVkICwgYkN1ckNDS1BrdD0gJWQgXG4iLCBwcml2LT5VbmRlY29yYXRlZFNtb290aGVkU1MsIHByaXYtPkN1ckNDS1JTU0ksIHByaXYtPmJDdXJDQ0tQa3QgKTsKKworCWlmKChwcml2LT5VbmRlY29yYXRlZFNtb290aGVkU1MgPiBIaVB3clVwcGVyVGgpIHx8CisJCShwcml2LT5iQ3VyQ0NLUGt0ICYmIChwcml2LT5DdXJDQ0tSU1NJID4gUlNTSUhpUHdyVXBwZXJUaCkpKQorCXsKKwkJLy8gU3RldmVubCBzdWdnZXN0ZWQgdGhhdCBkZWdyYWRlIDhkYm0gaW4gaGlnaCBwb3dlciBzYXRlLiAyMDA3LTEyLTA0IElzYWlhaAorCisJLy8JcHJpbnRrKCI9PT09PT5Eb1R4SGlnaFBvd2VyKCkgLSBIaWdoIFBvd2VyIC0gVW5kZWNvcmF0ZWRTbW9vdGhlZFNTOiVkLCAgSGlQd3JVcHBlclRoID0gJWQgXG4iLCBwcml2LT5VbmRlY29yYXRlZFNtb290aGVkU1MsIEhpUHdyVXBwZXJUaCApOworCQlwcml2LT5iVG9VcGRhdGVUeFB3ciA9IHRydWU7CisJCXUxYlRtcD0gcmVhZF9uaWNfYnl0ZShkZXYsIENDS19UWEFHQyk7CisKKwkJLy8gSWYgaXQgbmV2ZXIgZW50ZXIgSGlnaCBQb3dlci4KKwkJaWYoIENja1R4UHdySWR4ID09IHUxYlRtcCkKKwkJeworCQl1MWJUbXAgPSAodTFiVG1wID4gMTYpID8gKHUxYlRtcCAtMTYpOiAwOyAgLy8gOGRibQorCQl3cml0ZV9uaWNfYnl0ZShkZXYsIENDS19UWEFHQywgdTFiVG1wKTsKKworCQl1MWJUbXA9IHJlYWRfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDKTsKKwkJdTFiVG1wID0gKHUxYlRtcCA+IDE2KSA/ICh1MWJUbXAgLTE2KTogMDsgIC8vIDhkYm0KKwkJd3JpdGVfbmljX2J5dGUoZGV2LCBPRkRNX1RYQUdDLCB1MWJUbXApOworCQl9CisKKwl9CisJZWxzZSBpZigocHJpdi0+VW5kZWNvcmF0ZWRTbW9vdGhlZFNTIDwgSGlQd3JMb3dlclRoKSAmJgorCQkoIXByaXYtPmJDdXJDQ0tQa3QgfHwgcHJpdi0+Q3VyQ0NLUlNTSSA8IFJTU0lIaVB3ckxvd2VyVGgpKQorCXsKKwkvLwkgcHJpbnRrKCJEb1R4SGlnaFBvd2VyKCkgLSBsb3dlciBQb3dlciAtIFVuZGVjb3JhdGVkU21vb3RoZWRTUzolZCwgIEhpUHdyVXBwZXJUaCA9ICVkIFxuIiwgcHJpdi0+VW5kZWNvcmF0ZWRTbW9vdGhlZFNTLCBIaVB3ckxvd2VyVGggKTsKKwkJaWYocHJpdi0+YlRvVXBkYXRlVHhQd3IpCisJCXsKKwkJCXByaXYtPmJUb1VwZGF0ZVR4UHdyID0gZmFsc2U7CisJCQkvL1NEMyByZXF1aXJlZC4KKwkJCXUxYlRtcD0gcmVhZF9uaWNfYnl0ZShkZXYsIENDS19UWEFHQyk7CisJCQlpZih1MWJUbXAgPCBDY2tUeFB3cklkeCkKKwkJCXsKKwkJCS8vdTFiVG1wID0gKCh1MWJUbXArMTYpID4gMzUpID8gMzU6ICh1MWJUbXArMTYpOyAgLy8gOGRibQorCQkJLy93cml0ZV9uaWNfYnl0ZShkZXYsIENDS19UWEFHQywgdTFiVG1wKTsKKwkJCXdyaXRlX25pY19ieXRlKGRldiwgQ0NLX1RYQUdDLCBDY2tUeFB3cklkeCk7CisJCQl9CisKKwkJCXUxYlRtcD0gcmVhZF9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MpOworCQkJaWYodTFiVG1wIDwgT2ZkbVR4UHdySWR4KQorCQkJeworCQkJLy91MWJUbXAgPSAoKHUxYlRtcCsxNikgPiAzNSkgPyAzNTogKHUxYlRtcCsxNik7ICAvLyA4ZGJtCisJCQkvL3dyaXRlX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQywgdTFiVG1wKTsKKwkJCXdyaXRlX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQywgT2ZkbVR4UHdySWR4KTsKKwkJCX0KKwkJfQorCX0KKworCS8vcHJpbnRrKCI8LS0tLSBEb1R4SGlnaFBvd2VyKClcbiIpOworfQorCisKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlDYWxsYmFjayBmdW5jdGlvbiBvZiBVcGRhdGVUeFBvd2VyV29ya0l0ZW0uCisvLwkJQmVjYXVzZSBvZiBzb21lIGV2ZW50IGhhcHBlbmQsIGUuZy4gQ0NYIFRQQywgSGlnaCBQb3dlciBNZWNoYW5pc20sCisvLwkJV2UgdXBkYXRlIFR4IHBvd2VyIG9mIGN1cnJlbnQgY2hhbm5lbCBhZ2Fpbi4KKy8vCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApKQordm9pZCBydGw4MTgwX3R4X3B3X3dxIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisvLyAgICAgIHN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByODE4MF9wcml2LCB3YXRjaF9kb2dfd3EpOworLy8gICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqIGllZWUgPSAoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsIHdhdGNoX2RvZ193cSk7CisgICAgICAgIHN0cnVjdCBkZWxheWVkX3dvcmsgKmR3b3JrID0gY29udGFpbmVyX29mKHdvcmssc3RydWN0IGRlbGF5ZWRfd29yayx3b3JrKTsKKyAgICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBjb250YWluZXJfb2YoZHdvcmssc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsdHhfcHdfd3EpOworICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OworI2Vsc2UKK3ZvaWQgcnRsODE4MF90eF9wd193cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCS8vIHN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKyNlbmRpZgorCisvLwlwcmludGsoIi0tLS0+IFVwZGF0ZVR4UG93ZXJXb3JrSXRlbUNhbGxiYWNrKClcbiIpOworCisJRG9UeEhpZ2hQb3dlcihkZXYpOworCisvLwlwcmludGsoIjwtLS0tIFVwZGF0ZVR4UG93ZXJXb3JrSXRlbUNhbGxiYWNrKClcbiIpOworfQorCisKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlSZXR1cm4gVFJVRSBpZiB3ZSBzaGFsbCBwZXJmb3JtIERJRyBNZWNhaG5pc20sIEZBTFNFIG90aGVyd2lzZS4KKy8vCitib29sCitDaGVja0RpZygKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHByaXYtPmllZWU4MDIxMTsKKworCWlmKCFwcml2LT5iRGlnTWVjaGFuaXNtKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZihpZWVlLT5zdGF0ZSAhPSBJRUVFODAyMTFfTElOS0VEKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvL2lmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPCAzNikgLy8gU2NoZWR1bGUgRGlnIHVuZGVyIGFsbCBPRkRNIHJhdGVzLiBCeSBCcnVjZSwgMjAwNy0wNi0wMS4KKwlpZigocHJpdi0+aWVlZTgwMjExLT5yYXRlLzUpIDwgMzYpIC8vIFNjaGVkdWxlIERpZyB1bmRlciBhbGwgT0ZETSByYXRlcy4gQnkgQnJ1Y2UsIDIwMDctMDYtMDEuCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlJbXBsZW1lbnRhdGlvbiBvZiBESUcgZm9yIFplYnJhIGFuZCBaZWJyYTIuCisvLwordm9pZAorRElHX1plYnJhKAorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKKwkpCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXUxNgkJCUNDS0ZhbHNlQWxhcm0sIE9GRE1GYWxzZUFsYXJtOworCXUxNgkJCU9mZG1GQTEsIE9mZG1GQTI7CisJaW50CQkJSW5pdGlhbEdhaW5TdGVwID0gNzsgLy8gVGhlIG51bWJlciBvZiBpbml0aWFsIGdhaW4gc3RhZ2VzLgorCWludAkJCUxvd2VzdEdhaW5TdGFnZSA9IDQ7IC8vIFRoZSBjYXBhYmxlIGxvd2VzdCBzdGFnZSBvZiBwZXJmb3JtaW5nIGRpZyB3b3JraXRlbS4KKwl1MzIgCQkJQXdha2VQZXJpb2RJbjJTZWM9MDsKKworCS8vcHJpbnRrKCItLS0tLS0tLS0+IERJR19aZWJyYSgpXG4iKTsKKworCUNDS0ZhbHNlQWxhcm0gPSAodTE2KShwcml2LT5GYWxzZUFsYXJtUmVnVmFsdWUgJiAweDAwMDBmZmZmKTsKKwlPRkRNRmFsc2VBbGFybSA9ICh1MTYpKChwcml2LT5GYWxzZUFsYXJtUmVnVmFsdWUgPj4gMTYpICYgMHgwMDAwZmZmZik7CisJT2ZkbUZBMSA9ICAweDE1OworCU9mZG1GQTIgPSAoKHUxNikocHJpdi0+UmVnRGlnT2ZkbUZhVXBUaCkpIDw8IDg7CisKKy8vCXByaW50aygiRElHKioqKioqKioqKkNDSyBGYWxzZSBBbGFybTogJSNYIFxuIixDQ0tGYWxzZUFsYXJtKTsKKy8vCXByaW50aygiRElHKioqKioqKioqKk9GRE0gRmFsc2UgQWxhcm06ICUjWCBcbiIsT0ZETUZhbHNlQWxhcm0pOworCisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgaW5pdGlhbCBnYWluIHN0ZXBzIGlzIGRpZmZlcmVudCwgYnkgQnJ1Y2UsIDIwMDctMDQtMTMuCisJaWYgKHByaXYtPkluaXRpYWxHYWluID09IDAgKSAvL2F1dG9ESUcKKwl7IC8vIEFkdmlzZWQgZnJvbSBTRDMgRFoKKwkJcHJpdi0+SW5pdGlhbEdhaW4gPSA0OyAvLyBJbiA4N0IsIG03NGRCbSBtZWFucyBTdGF0ZSA0IChtODJkQm0pCisJfQorCS8vaWYocEhhbERhdGEtPlZlcnNpb25JRCAhPSBWRVJTSU9OXzgxODdCX0IpCisJeyAvLyBBZHZpc2VkIGZyb20gU0QzIERaCisJCU9mZG1GQTEgPSAgMHgyMDsKKwl9CisKKyNpZiAxIC8vbHptIHJlc2VydmVkIDA4MDgyNgorCUF3YWtlUGVyaW9kSW4yU2VjID0gKDIwMDAtcHJpdiAtPkRvemVQZXJpb2RJblBhc3QyU2VjKTsKKwkvL3ByaW50aygiJiYmIERvemVQZXJpb2Q9JWQgQXdha2VQZXJpb2Q9JWRcbiIsIHByaXYtPkRvemVQZXJpb2RJblBhc3QyU2VjLCBBd2FrZVBlcmlvZEluMlNlYyk7CisJcHJpdiAtPkRvemVQZXJpb2RJblBhc3QyU2VjPTA7CisKKwlpZihBd2FrZVBlcmlvZEluMlNlYykKKwl7CisJCS8vUlRfVFJBQ0UoQ09NUF9ESUcsIERCR19UUkFDRSwgKCJESUc6IEF3YWtlUGVyaW9kSW4yU2VjKCVkKSAtIEZBVGgoMHglWCAsIDB4JVgpIC0+IixBd2FrZVBlcmlvZEluMlNlYywgT2ZkbUZBMSwgT2ZkbUZBMikpOworCQkvLyBhZGp1ZXN0IERJRyB0aHJlc2hvbGQuCisJCU9mZG1GQTEgPSAgKHUxNikoKE9mZG1GQTEqQXdha2VQZXJpb2RJbjJTZWMpICAvIDIwMDApIDsKKwkJT2ZkbUZBMiA9ICAodTE2KSgoT2ZkbUZBMipBd2FrZVBlcmlvZEluMlNlYykgIC8gMjAwMCkgOworCQkvL1JUX1RSQUNFKENPTVBfRElHLCBEQkdfVFJBQ0UsICgiKCAweCVYICwgMHglWClcbiIsIE9mZG1GQTEsIE9mZG1GQTIpKTsKKwl9CisJZWxzZQorCXsKKwkJOy8vUlRfVFJBQ0UoQ09NUF9ESUcsIERCR19XQVJOSU5HLCAoIkVSUk9SISEgIEF3YWtlUGVyaW9kSW4yU2VjIHNob3VsZCBub3QgYmUgWkVSTyEhXG4iKSk7CisJfQorI2VuZGlmCisKKwlJbml0aWFsR2FpblN0ZXAgPSA4OworCUxvd2VzdEdhaW5TdGFnZSA9IHByaXYtPlJlZ0JNb2RlR2FpblN0YWdlOyAvLyBMb3dlc3QgZ2FpbiBzdGFnZS4KKworCWlmIChPRkRNRmFsc2VBbGFybSA+IE9mZG1GQTEpCisJeworCQlpZiAoT0ZETUZhbHNlQWxhcm0gPiBPZmRtRkEyKQorCQl7CisJCQlwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlKys7CisJCQlpZiAocHJpdi0+RElHX051bWJlckZhbGxiYWNrVm90ZSA+MSkKKwkJCXsKKwkJCQkvL3NlcmlvdXMgT0ZETSAgRmFsc2UgQWxhcm0sIG5lZWQgZmFsbGJhY2sKKwkJCQlpZiAocHJpdi0+SW5pdGlhbEdhaW4gPCBJbml0aWFsR2FpblN0ZXApCisJCQkJeworCQkJCQlwcml2LT5Jbml0aWFsR2FpbkJhY2tVcD0gcHJpdi0+SW5pdGlhbEdhaW47CisKKwkJCQkJcHJpdi0+SW5pdGlhbEdhaW4gPSAocHJpdi0+SW5pdGlhbEdhaW4gKyAxKTsKKy8vCQkJCQlwcmludGsoIkRJRyoqKioqKioqKipPRkRNIEZhbHNlIEFsYXJtOiAlI1gsICBPZmRtRkExOiAlI1gsIE9mZG1GQTI6ICUjWFxuIiwgT0ZETUZhbHNlQWxhcm0sIE9mZG1GQTEsIE9mZG1GQTIpOworLy8JCQkJCXByaW50aygiRElHKysrKysrKyBmYWxsYmFjayBPRkRNOiVkIFxuIiwgcHJpdi0+SW5pdGlhbEdhaW4pOworCQkJCQlVcGRhdGVJbml0aWFsR2FpbihkZXYpOworCQkJCX0KKwkJCQlwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlID0gMDsKKwkJCQlwcml2LT5ESUdfTnVtYmVyVXBncmFkZVZvdGU9MDsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlKQorCQkJCXByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUtLTsKKwkJfQorCQlwcml2LT5ESUdfTnVtYmVyVXBncmFkZVZvdGU9MDsKKwl9CisJZWxzZQorCXsKKwkJaWYgKHByaXYtPkRJR19OdW1iZXJGYWxsYmFja1ZvdGUpCisJCQlwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlLS07CisJCXByaXYtPkRJR19OdW1iZXJVcGdyYWRlVm90ZSsrOworCisJCWlmIChwcml2LT5ESUdfTnVtYmVyVXBncmFkZVZvdGU+OSkKKwkJeworCQkJaWYgKHByaXYtPkluaXRpYWxHYWluID4gTG93ZXN0R2FpblN0YWdlKSAvLyBJbiA4N0IsIG03OGRCbSBtZWFucyBTdGF0ZSA0IChtODY0ZEJtKQorCQkJeworCQkJCXByaXYtPkluaXRpYWxHYWluQmFja1VwPSBwcml2LT5Jbml0aWFsR2FpbjsKKworCQkJCXByaXYtPkluaXRpYWxHYWluID0gKHByaXYtPkluaXRpYWxHYWluIC0gMSk7CisvLwkJCQlwcmludGsoIkRJRyoqKioqKioqKipPRkRNIEZhbHNlIEFsYXJtOiAlI1gsICBPZmRtRkExOiAlI1gsIE9mZG1GQTI6ICUjWFxuIiwgT0ZETUZhbHNlQWxhcm0sIE9mZG1GQTEsIE9mZG1GQTIpOworLy8JCQkJcHJpbnRrKCJESUctLS0tLS0tLS0gVXBncmFkZSBPRkRNOiVkIFxuIiwgcHJpdi0+SW5pdGlhbEdhaW4pOworCQkJCVVwZGF0ZUluaXRpYWxHYWluKGRldik7CisJCQl9CisJCQlwcml2LT5ESUdfTnVtYmVyRmFsbGJhY2tWb3RlID0gMDsKKwkJCXByaXYtPkRJR19OdW1iZXJVcGdyYWRlVm90ZT0wOworCQl9CisJfQorCisvLwlwcmludGsoIkRJRysrKysrKysgT0ZETTolZFxuIiwgcHJpdi0+SW5pdGlhbEdhaW4pOworCS8vcHJpbnRrKCI8LS0tLS0tLS0tIERJR19aZWJyYSgpXG4iKTsKK30KKworLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCURpc3BhdGNoIERJRyBpbXBsZW1lbnRhdGlvbiBhY2NvcmRpbmcgdG8gUkYuCisvLwordm9pZAorRHluYW1pY0luaXRHYWluKAorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKKwkpCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJc3dpdGNoKHByaXYtPnJmX2NoaXApCisJeworCQljYXNlIFJGX1pFQlJBMjogIC8vIFtBbm5pZVdvcmthcm91bmRdIEZvciBaZWJyYTIsIDIwMDUtMDgtMDEuCisJCWNhc2UgUkZfWkVCUkE0OgorCQkJRElHX1plYnJhKCBkZXYgKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcmludGsoIkR5bmFtaWNJbml0R2FpbigpOiB1bmtub3duIFJGQ2hpcElEKCVkKSAhISFcbiIsIHByaXYtPnJmX2NoaXApOworCQkJYnJlYWs7CisJfQorfQorCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApKQordm9pZCBydGw4MTgwX2h3X2RpZ193cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworLy8gICAgICBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcjgxODBfcHJpdiwgd2F0Y2hfZG9nX3dxKTsKKy8vICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlID0gKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKikKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLCB3YXRjaF9kb2dfd3EpOworICAgICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IGNvbnRhaW5lcl9vZih3b3JrLHN0cnVjdCBkZWxheWVkX3dvcmssd29yayk7CisgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGR3b3JrLHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlLGh3X2RpZ193cSk7CisgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7CisjZWxzZQordm9pZCBydGw4MTgwX2h3X2RpZ193cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCisjZW5kaWYKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisKKwkvLyBSZWFkIENDSyBhbmQgT0ZETSBGYWxzZSBBbGFybS4KKwlwcml2LT5GYWxzZUFsYXJtUmVnVmFsdWUgPSByZWFkX25pY19kd29yZChkZXYsIENDS19GQUxTRV9BTEFSTSk7CisKKworCS8vIEFkanVzdCBJbml0aWFsIEdhaW4gZHluYW1pY2FsbHkuCisJRHluYW1pY0luaXRHYWluKGRldik7CisKK30KKworaW50CitJbmNsdWRlZEluU3VwcG9ydGVkUmF0ZXMoCisgICAgICAgIHN0cnVjdCByODE4MF9wcml2ICAgICAgICpwcml2LAorICAgICAgICB1OCAgICAgICAgICAgICAgVHhSYXRlICApCit7CisgICAgdTggcmF0ZV9sZW47CisgICAgICAgIHU4IHJhdGVfZXhfbGVuOworICAgICAgICB1OCAgICAgICAgICAgICAgICAgICAgICBSYXRlTWFzayA9IDB4N0Y7CisgICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgIGlkeDsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgRm91bmQgPSAwOworICAgICAgICB1OCAgICAgICAgICAgICAgICAgICAgICBOYWl2ZVR4UmF0ZSA9IFR4UmF0ZSZSYXRlTWFzazsKKworICAgIHJhdGVfbGVuID0gcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsucmF0ZXNfbGVuOworICAgICAgICByYXRlX2V4X2xlbiA9IHByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLnJhdGVzX2V4X2xlbjsKKyAgICAgICAgZm9yKCBpZHg9MDsgaWR4PCByYXRlX2xlbjsgaWR4KysgKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIChwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5yYXRlc1tpZHhdICYgUmF0ZU1hc2spID09IE5haXZlVHhSYXRlICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBGb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX3JhdGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgZm9yKCBpZHg9MDsgaWR4PCByYXRlX2V4X2xlbjsgaWR4KysgKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoIChwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5yYXRlc19leFtpZHhdICYgUmF0ZU1hc2spID09IE5haXZlVHhSYXRlICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBGb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX3JhdGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBGb3VuZDsKKyAgICAgICAgZm91bmRfcmF0ZToKKyAgICAgICAgcmV0dXJuIEZvdW5kOworfQorCisvLworLy8gICAgICBEZXNjcmlwdGlvbjoKKy8vICAgICAgICAgICAgICBHZXQgdGhlIFR4IHJhdGUgb25lIGRlZ3JlZSB1cCBmb3JtIHRoZSBpbnB1dCByYXRlIGluIHRoZSBzdXBwb3J0ZWQgcmF0ZXMuCisvLyAgICAgICAgICAgICAgUmV0dXJuIHRoZSB1cGdyYWRlIHJhdGUgaWYgaXQgaXMgc3VjY2Vzc2VkLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBpbnB1dCByYXRlLgorLy8gICAgICBCeSBCcnVjZSwgMjAwNy0wNi0wNS4KKy8vCit1OAorR2V0VXBncmFkZVR4UmF0ZSgKKyAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKyAgICAgICAgdTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRlCisgICAgICAgICkKK3sKKyAgICAgICAgc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworICAgICAgICB1OCAgICAgICAgICAgICAgICAgICAgICBVcFJhdGU7CisKKyAgICAgICAgLy8gVXBncmFkZSAxIGRlZ3JlZS4KKyAgICAgICAgc3dpdGNoKHJhdGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSAxMDg6IC8vIFVwIHRvIDU0TWJwcy4KKyAgICAgICAgICAgICAgICBVcFJhdGUgPSAxMDg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSA5NjogLy8gVXAgdG8gNTRNYnBzLgorICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDEwODsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDcyOiAvLyBVcCB0byA0OE1icHMuCisgICAgICAgICAgICAgICAgVXBSYXRlID0gOTY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSA0ODogLy8gVXAgdG8gMzZNYnBzLgorICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDcyOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzY6IC8vIFVwIHRvIDI0TWJwcy4KKyAgICAgICAgICAgICAgICBVcFJhdGUgPSA0ODsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDIyOiAvLyBVcCB0byAxOE1icHMuCisgICAgICAgICAgICAgICAgVXBSYXRlID0gMzY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAxMTogLy8gVXAgdG8gMTFNYnBzLgorICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDIyOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDogLy8gVXAgdG8gNS41TWJwcy4KKyAgICAgICAgICAgICAgICBVcFJhdGUgPSAxMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDI6IC8vIFVwIHRvIDJNYnBzLgorICAgICAgICAgICAgICAgIFVwUmF0ZSA9IDQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBwcmludGsoIkdldFVwZ3JhZGVUeFJhdGUoKTogSW5wdXQgVHggUmF0ZSglZCkgaXMgdW5kZWZpbmVkIVxuIiwgcmF0ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhdGU7CisgICAgICAgIH0KKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJhdGUgaXMgdmFsaWQuCisgICAgICAgIGlmKEluY2x1ZGVkSW5TdXBwb3J0ZWRSYXRlcyhwcml2LCBVcFJhdGUpKQorICAgICAgICB7CisvLyAgICAgICAgICAgICAgcHJpbnRrKCJHZXRVcGdyYWRlVHhSYXRlKCk6IEdldFVwZ3JhZGUgVHggcmF0ZSglZCkgZnJvbSAlZCAhXG4iLCBVcFJhdGUsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOworICAgICAgICAgICAgICAgIHJldHVybiBVcFJhdGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAgICAgLy9wcmludGsoIkdldFVwZ3JhZGVUeFJhdGUoKTogVHggcmF0ZSAoJWQpIGlzIG5vdCBpbiBzdXBwb3J0ZWQgcmF0ZXNcbiIsIFVwUmF0ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJhdGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJhdGU7Cit9CisvLworLy8gICAgICBEZXNjcmlwdGlvbjoKKy8vICAgICAgICAgICAgICBHZXQgdGhlIFR4IHJhdGUgb25lIGRlZ3JlZSBkb3duIGZvcm0gdGhlIGlucHV0IHJhdGUgaW4gdGhlIHN1cHBvcnRlZCByYXRlcy4KKy8vICAgICAgICAgICAgICBSZXR1cm4gdGhlIGRlZ3JhZGUgcmF0ZSBpZiBpdCBpcyBzdWNjZXNzZWQsIG90aGVyd2lzZSByZXR1cm4gdGhlIGlucHV0IHJhdGUuCisvLyAgICAgIEJ5IEJydWNlLCAyMDA3LTA2LTA1LgorLy8KK3U4CitHZXREZWdyYWRlVHhSYXRlKAorICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorICAgICAgICB1OCAgICAgICAgIHJhdGUKKyAgICAgICAgKQoreworICAgICAgICBzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisgICAgICAgIHU4ICAgICAgICAgICAgICAgICAgICAgIERvd25SYXRlOworCisgICAgICAgIC8vIFVwZ3JhZGUgMSBkZWdyZWUuCisgICAgICAgIHN3aXRjaChyYXRlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgMTA4OiAvLyBEb3duIHRvIDQ4TWJwcy4KKyAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDk2OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgOTY6IC8vIERvd24gdG8gMzZNYnBzLgorICAgICAgICAgICAgICAgIERvd25SYXRlID0gNzI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSA3MjogLy8gRG93biB0byAyNE1icHMuCisgICAgICAgICAgICAgICAgRG93blJhdGUgPSA0ODsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDQ4OiAvLyBEb3duIHRvIDE4TWJwcy4KKyAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDM2OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzY6IC8vIERvd24gdG8gMTFNYnBzLgorICAgICAgICAgICAgICAgIERvd25SYXRlID0gMjI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAyMjogLy8gRG93biB0byA1LjVNYnBzLgorICAgICAgICAgICAgICAgIERvd25SYXRlID0gMTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAxMTogLy8gRG93biB0byAyTWJwcy4KKyAgICAgICAgICAgICAgICBEb3duUmF0ZSA9IDQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSA0OiAvLyBEb3duIHRvIDFNYnBzLgorICAgICAgICAgICAgICAgIERvd25SYXRlID0gMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDI6IC8vIERvd24gdG8gMU1icHMuCisgICAgICAgICAgICAgICAgRG93blJhdGUgPSAyOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcHJpbnRrKCJHZXREZWdyYWRlVHhSYXRlKCk6IElucHV0IFR4IFJhdGUoJWQpIGlzIHVuZGVmaW5lZCFcbiIsIHJhdGUpOworICAgICAgICAgICAgICAgIHJldHVybiByYXRlOworICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSByYXRlIGlzIHZhbGlkLgorICAgICAgICBpZihJbmNsdWRlZEluU3VwcG9ydGVkUmF0ZXMocHJpdiwgRG93blJhdGUpKQorICAgICAgICB7CisvLyAgICAgICAgICAgICAgcHJpbnRrKCJHZXREZWdyYWRlVHhSYXRlKCk6IEdldERlZ3JhZGUgVHggcmF0ZSglZCkgZnJvbSAlZCFcbiIsIERvd25SYXRlLCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRG93blJhdGU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAgICAgLy9wcmludGsoIkdldERlZ3JhZGVUeFJhdGUoKTogVHggcmF0ZSAoJWQpIGlzIG5vdCBpbiBzdXBwb3J0ZWQgcmF0ZXNcbiIsIERvd25SYXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmF0ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmF0ZTsKK30KKy8vCisvLyAgICAgIEhlbHBlciBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgc3BlY2lmaWVkIGRhdGEgcmF0ZSBpcworLy8gICAgICBDQ0sgcmF0ZS4KKy8vICAgICAgMjAwNS4wMS4yNSwgYnkgcmNuamtvLgorLy8KK2Jvb2wKK01nbnRJc0Nja1JhdGUoCisgICAgICAgIHUxNiAgICAgcmF0ZQorICAgICAgICApCit7CisgICAgICAgIGJvb2wgYlJldHVybiA9IGZhbHNlOworCisgICAgICAgIGlmKChyYXRlIDw9IDIyKSAmJiAocmF0ZSAhPSAxMikgJiYgKHJhdGUgIT0gMTgpKQorICAgICAgICB7CisgICAgICAgICAgICAgICAgYlJldHVybiA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYlJldHVybjsKK30KKyNpZmRlZiBDT05GSUdfUlRMODE4WF9TCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJVHggUG93ZXIgdHJhY2tpbmcgbWVjaGFuaXNtIHJvdXRpbmUgb24gODdTRS4KKy8vIAlDcmVhdGVkIGJ5IFJvZ2VyLCAyMDA3LjEyLjExLgorLy8KK3ZvaWQKK1R4UHdyVHJhY2tpbmc4N1NFKAorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKKykKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CisJdTgJdG1wdTFCeXRlLCBDdXJyZW50VGhlcm1hbCwgSWR4OworCWNoYXIJQ2NrVHhQd3JJZHgsIE9mZG1UeFB3cklkeDsKKwkvL3UzMgl1NGJSZlJlZzsKKworCXRtcHUxQnl0ZSA9IHJlYWRfbmljX2J5dGUoZGV2LCBFTl9MUEZfQ0FMKTsKKwlDdXJyZW50VGhlcm1hbCA9ICh0bXB1MUJ5dGUgJiAweGYwKT4+NDsgLy9bIDc6NF06IHRoZXJtYWwgbWV0ZXIgaW5kaWNhdGlvbi4KKwlDdXJyZW50VGhlcm1hbCA9IChDdXJyZW50VGhlcm1hbD4weDBjKT8gMHgwYzpDdXJyZW50VGhlcm1hbDsvL2x6bSBhZGQgMDgwODI2CisKKwkvL3ByaW50aygiVHhQd3JUcmFja2luZzg3U0UoKTogQ3VycmVudFRoZXJtYWwoJWQpXG4iLCBDdXJyZW50VGhlcm1hbCk7CisKKwlpZiggQ3VycmVudFRoZXJtYWwgIT0gcHJpdi0+VGhlcm1hbE1ldGVyKQorCXsKKy8vCQlwcmludGsoIlR4UHdyVHJhY2tpbmc4N1NFKCk6IFRoZXJtYWwgbWV0ZXIgY2hhbmdlZCEhIVxuIik7CisKKwkJLy8gVXBkYXRlIFR4IFBvd2VyIGxldmVsIG9uIGVhY2ggY2hhbm5lbC4KKwkJZm9yKElkeCA9IDE7IElkeDwxNTsgSWR4KyspCisJCXsKKwkJCUNja1R4UHdySWR4ID0gcHJpdi0+Y2h0eHB3cltJZHhdOworCQkJT2ZkbVR4UHdySWR4ID0gcHJpdi0+Y2h0eHB3cl9vZmRtW0lkeF07CisKKwkJCWlmKCBDdXJyZW50VGhlcm1hbCA+IHByaXYtPlRoZXJtYWxNZXRlciApCisJCQl7IC8vIGhpZ2hlciB0aGVybWFsIG1ldGVyLgorCQkJCUNja1R4UHdySWR4ICs9IChDdXJyZW50VGhlcm1hbCAtIHByaXYtPlRoZXJtYWxNZXRlcikqMjsKKwkJCQlPZmRtVHhQd3JJZHggKz0gKEN1cnJlbnRUaGVybWFsIC0gcHJpdi0+VGhlcm1hbE1ldGVyKSoyOworCisJCQkJaWYoQ2NrVHhQd3JJZHggPjM1KQorCQkJCQlDY2tUeFB3cklkeCA9IDM1OyAvLyBGb3JjZSBUeFBvd2VyIHRvIG1heGltYWwgaW5kZXguCisJCQkJaWYoT2ZkbVR4UHdySWR4ID4zNSkKKwkJCQkJT2ZkbVR4UHdySWR4ID0gMzU7CisJCQl9CisJCQllbHNlCisJCQl7IC8vIGxvd2VyIHRoZXJtYWwgbWV0ZXIuCisJCQkJQ2NrVHhQd3JJZHggLT0gKHByaXYtPlRoZXJtYWxNZXRlciAtIEN1cnJlbnRUaGVybWFsKSoyOworCQkJCU9mZG1UeFB3cklkeCAtPSAocHJpdi0+VGhlcm1hbE1ldGVyIC0gQ3VycmVudFRoZXJtYWwpKjI7CisKKwkJCQlpZihDY2tUeFB3cklkeCA8MCkKKwkJCQkJQ2NrVHhQd3JJZHggPSAwOworCQkJCWlmKE9mZG1UeFB3cklkeCA8MCkKKwkJCQkJT2ZkbVR4UHdySWR4ID0gMDsKKwkJCX0KKworCQkJLy8gVXBkYXRlIFR4UG93ZXIgbGV2ZWwgb24gQ0NLIGFuZCBPRkRNIHJlc3AuCisJCQlwcml2LT5jaHR4cHdyW0lkeF0gPSBDY2tUeFB3cklkeDsKKwkJCXByaXYtPmNodHhwd3Jfb2ZkbVtJZHhdID0gT2ZkbVR4UHdySWR4OworCQl9CisKKwkJLy8gVXBkYXRlIFR4UG93ZXIgbGV2ZWwgaW1tZWRpYXRlbHkuCisJCXJ0bDgyMjV6Ml9TZXRUWFBvd2VyTGV2ZWwoZGV2LCBwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5jaGFubmVsKTsKKwl9CisJcHJpdi0+VGhlcm1hbE1ldGVyID0gQ3VycmVudFRoZXJtYWw7Cit9Cit2b2lkCitTdGFSYXRlQWRhcHRpdmU4N1NFKAorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKKwkpCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgCQkJQ3VyclR4b2tDbnQ7CisJdTE2CQkJQ3VyclJldHJ5Q250OworCXUxNgkJCUN1cnJSZXRyeVJhdGU7CisJLy91MTYJCQlpLGlkeDsKKwl1bnNpZ25lZCBsb25nICAgICAgIAlDdXJyUnhva0NudDsKKwlib29sCQkJYlRyeVVwID0gZmFsc2U7CisJYm9vbAkJCWJUcnlEb3duID0gZmFsc2U7CisJdTgJCQlUcnlVcFRoID0gMTsKKwl1OAkJCVRyeURvd25UaCA9IDI7CisJdTMyCQkJVHhUaHJvdWdocHV0OworCWxvbmcJCUN1cnJTaWduYWxTdHJlbmd0aDsKKwlib29sCQliVXBkYXRlSW5pdGlhbEdhaW4gPSBmYWxzZTsKKyAgICAJdTgJCQl1MWJPZmRtPTAsIHUxYkNjayA9IDA7CisJY2hhcgkJT2ZkbVR4UHdySWR4LCBDY2tUeFB3cklkeDsKKworCXByaXYtPlJhdGVBZGFwdGl2ZVBlcmlvZD0gUkFURV9BREFQVElWRV9USU1FUl9QRVJJT0Q7CisKKworCUN1cnJSZXRyeUNudAk9IHByaXYtPkN1cnJSZXRyeUNudDsKKwlDdXJyVHhva0NudAk9IHByaXYtPk51bVR4T2tUb3RhbCAtIHByaXYtPkxhc3RUeG9rQ250OworCUN1cnJSeG9rQ250CT0gcHJpdi0+aWVlZTgwMjExLT5OdW1SeE9rVG90YWwgLSBwcml2LT5MYXN0Unhva0NudDsKKwlDdXJyU2lnbmFsU3RyZW5ndGggPSBwcml2LT5TdGF0c19SZWN2U2lnbmFsUG93ZXI7CisJVHhUaHJvdWdocHV0ID0gKHUzMikocHJpdi0+TnVtVHhPa0J5dGVzVG90YWwgLSBwcml2LT5MYXN0VHhPS0J5dGVzKTsKKwlwcml2LT5MYXN0VHhPS0J5dGVzID0gcHJpdi0+TnVtVHhPa0J5dGVzVG90YWw7CisJcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9IHByaXYtPmllZWU4MDIxMS0+cmF0ZS81OworCS8vcHJpbnRrKCJwcml2LT5DdXJyZW50T3BlcmFSYXRlIGlzICVkXG4iLHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOworCS8vMiBDb21wdXRlIHJldHJ5IHJhdGlvLgorCWlmIChDdXJyVHhva0NudD4wKQorCXsKKwkJQ3VyclJldHJ5UmF0ZSA9ICh1MTYpKEN1cnJSZXRyeUNudCoxMDAvQ3VyclR4b2tDbnQpOworCX0KKwllbHNlCisJeyAvLyBJdCBtYXkgYmUgc2VyaW91cyByZXRyeS4gVG8gZGlzdGluZ3Vpc2ggc2VyaW91cyByZXRyeSBvciBubyBwYWNrZXRzIG1vZGlmaWVkIGJ5IEJydWNlCisJCUN1cnJSZXRyeVJhdGUgPSAodTE2KShDdXJyUmV0cnlDbnQqMTAwLzEpOworCX0KKworCisJLy8KKwkvLyBBZGRlZCBieSBSb2dlciwgMjAwNy4wMS4wMi4KKwkvLyBGb3IgZGVidWcgaW5mb3JtYXRpb24uCisJLy8KKwkvL3ByaW50aygiXG4oMSkgcEhhbERhdGEtPkxhc3RSZXRyeVJhdGU6ICVkIFxuIixwcml2LT5MYXN0UmV0cnlSYXRlKTsKKwkvL3ByaW50aygiKDIpIFJldHJ5Q250ID0gJWQgIFxuIiwgQ3VyclJldHJ5Q250KTsKKwkvL3ByaW50aygiKDMpIFR4b2tDbnQgPSAlZCBcbiIsIEN1cnJUeG9rQ250KTsKKwkvL3ByaW50aygiKDQpIEN1cnJSZXRyeVJhdGUgPSAlZCBcbiIsIEN1cnJSZXRyeVJhdGUpOworCS8vcHJpbnRrKCIoNSkgQ3VyclNpZ25hbFN0cmVuZ3RoID0gJWQgXG4iLEN1cnJTaWduYWxTdHJlbmd0aCk7CisJLy9wcmludGsoIig2KSBUeFRocm91Z2hwdXQgaXMgJWRcbiIsVHhUaHJvdWdocHV0KTsKKwkvL3ByaW50aygicHJpdi0+TnVtVHhPa0J5dGVzVG90YWwgaXMgJWRcbiIscHJpdi0+TnVtVHhPa0J5dGVzVG90YWwpOworCisJcHJpdi0+TGFzdFJldHJ5Q250ID0gcHJpdi0+Q3VyclJldHJ5Q250OworCXByaXYtPkxhc3RUeG9rQ250ID0gcHJpdi0+TnVtVHhPa1RvdGFsOworCXByaXYtPkxhc3RSeG9rQ250ID0gcHJpdi0+aWVlZTgwMjExLT5OdW1SeE9rVG90YWw7CisJcHJpdi0+Q3VyclJldHJ5Q250ID0gMDsKKworCS8vMk5vIFR4IHBhY2tldHMsIHJldHVybiB0byBpbml0X3JhdGUgb3Igbm90PworCWlmIChDdXJyUmV0cnlSYXRlPT0wICYmIEN1cnJUeG9rQ250ID09IDApCisJeworCQkvLworCQkvL0FmdGVyIDkgKDMwKjMwMG1zKSBzZWNvbmRzIGluIHRoaXMgY29uZGl0aW9uLCB3ZSB0cnkgdG8gcmFpc2UgcmF0ZS4KKwkJLy8KKwkJcHJpdi0+VHJ5dXBpbmdDb3VudE5vRGF0YSsrOworCisvLwkJcHJpbnRrKCJObyBUeCBwYWNrZXRzLCBUcnl1cGluZ0NvdW50Tm9EYXRhKCVkKVxuIiwgcHJpdi0+VHJ5dXBpbmdDb3VudE5vRGF0YSk7CisJCS8vW1RSQyBEZWxsIExhYl0gRXh0ZW5kIHJhaXNlZCBwZXJpb2QgZnJvbSA0LjVzZWMgdG8gOXNlYywgSXNhaWFoIDIwMDgtMDItMTUgMTg6MDAKKwkJaWYgKHByaXYtPlRyeXVwaW5nQ291bnROb0RhdGE+MzApCisJCXsKKwkJCXByaXYtPlRyeXVwaW5nQ291bnROb0RhdGEgPSAwOworCQkgCXByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPSBHZXRVcGdyYWRlVHhSYXRlKGRldiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CisJCQkvLyBSZXNldCBGYWlsIFJlY29yZAorCQkJcHJpdi0+TGFzdEZhaWxUeFJhdGUgPSAwOworCQkJcHJpdi0+TGFzdEZhaWxUeFJhdGVTUyA9IC0yMDA7CisJCQlwcml2LT5GYWlsVHhSYXRlQ291bnQgPSAwOworCQl9CisJCWdvdG8gU2V0SW5pdGlhbEdhaW47CisJfQorICAgICAgICBlbHNlCisJeworCQlwcml2LT5Ucnl1cGluZ0NvdW50Tm9EYXRhPTA7IC8vUmVzZXQgdHJ5aW5nIHVwIHRpbWVzLgorCX0KKworCisJLy8KKwkvLyBGb3IgTmV0Z2VhciBjYXNlLCBJIGNvbW1lbnQgb3V0IHRoZSBmb2xsb3dpbmcgc2lnbmFsIHN0cmVuZ3RoIGVzdGltYXRpb24sCisJLy8gd2hpY2ggY2FuIHJlc3VsdHMgaW4gbG93ZXIgcmF0ZSB0byB0cmFuc21pdCB3aGVuIHNhbXBsZSBpcyBOT1QgZW5vdWdoIChlLmcuIFBJTkcgcmVxdWVzdCkuCisJLy8gMjAwNy4wNC4wOSwgYnkgUm9nZXIuCisJLy8KKworCS8vCisJLy8gUmVzdHJ1Y3R1cmUgcmF0ZSBhZGFwdGl2ZSBhcyB0aGUgZm9sbG93aW5nIG1haW4gc3RhZ2VzOgorCS8vICgxKSBBZGQgcmV0cnkgdGhyZXNob2xkIGluIDU0TSB1cGdyYWRpbmcgY29uZGl0aW9uIHdpdGggc2lnbmFsIHN0cmVuZ3RoLgorCS8vICgyKSBBZGQgdGhlIG1lY2hhbmlzbSB0byBkZWdyYWRlIHRvIENDSyByYXRlIGFjY29yZGluZyB0byBzaWduYWwgc3RyZW5ndGgKKwkvLwkJYW5kIHJldHJ5IHJhdGUuCisJLy8gKDMpIFJlbW92ZSBhbGwgSW5pdGlhbCBHYWluIFVwZGF0ZXMgb3ZlciBPRkRNIHJhdGUuIFRvIGF2b2lkIHRoZSBjb21wbGljYXRlZAorCS8vCQlzaXR1YXRpb24sIEluaXRpYWwgR2FpbiBVcGRhdGUgaXMgdXBvbiBvbiBESUcgbWVjaGFuaXNtIGV4Y2VwdCBDQ0sgcmF0ZS4KKwkvLyAoNCkgQWRkIHRoZSBtZWhhbmlzbSBvZiB0cnlpbmcgdG8gdXBncmFkZSB0eCByYXRlLgorCS8vICg1KSBSZWNvcmQgdGhlIGluZm9ybWF0aW9uIG9mIHVwcGluZyB0eCByYXRlIHRvIGF2b2lkIHRyeWluZyB1cHBpbmcgdHggcmF0ZSBjb25zdGFudGx5LgorCS8vIEJ5IEJydWNlLCAyMDA3LTA2LTA1LgorCS8vCisJLy8KKworCS8vIDExTWJwcyBvciAzNk1icHMKKwkvLyBDaGVjayBtb3JlIHRpbWVzIGluIHRoZXNlIHJhdGUoa2V5IHJhdGVzKS4KKwkvLworCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMjIgfHwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSA3MikKKwl7CisJCVRyeVVwVGggKz0gOTsKKwl9CisJLy8KKwkvLyBMZXQgdGhlc2UgcmF0ZXMgZG93biBtb3JlIGRpZmZpY3VsdC4KKwkvLworCWlmKE1nbnRJc0Nja1JhdGUocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkgfHwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAzNikKKwl7CisJCQlUcnlEb3duVGggKz0gMTsKKwl9CisKKwkvLzEgQWRqdXN0IFJhdGUuCisJaWYgKHByaXYtPmJUcnl1cGluZyA9PSB0cnVlKQorCXsKKwkJLy8yIEZvciBUZXN0IFVwZ3JhZGluZyBtZWNoYW5pc20KKwkJLy8gTm90ZToKKwkJLy8gCVNvbWV0aW1lcyB0aGUgdGhyb3VnaHB1dCBpcyB1cG9uIG9uIHRoZSBjYXBhYmlsaXR5IGJ3dHdlZW4gdGhlIEFQIGFuZCBOSUMsCisJCS8vIAl0aHVzIHRoZSBsb3cgZGF0YSByYXRlIGRvZXMgbm90IGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlLgorCQkvLyAJV2UgcmFuZG9tbHkgdXBncmFkZSB0aGUgZGF0YSByYXRlIGFuZCBjaGVjayBpZiB0aGUgcmV0cnkgcmF0ZSBpcyBpbXByb3ZlZC4KKworCQkvLyBVcGdyYWRpbmcgcmF0ZSBkaWQgbm90IGltcHJvdmUgdGhlIHJldHJ5IHJhdGUsIGZhbGxiYWNrIHRvIHRoZSBvcmlnaW5hbCByYXRlLgorCQlpZiAoIChDdXJyUmV0cnlSYXRlID4gMjUpICYmIFR4VGhyb3VnaHB1dCA8IHByaXYtPkxhc3RUeFRocm91Z2hwdXQpCisJCXsKKwkJCS8vTm90IG5lY2Vzc2FyeSByYWlzaW5nIHJhdGUsIGZhbGwgYmFjayByYXRlLgorCQkJYlRyeURvd24gPSB0cnVlOworCQkJLy9wcmludGsoImNhc2UxLTE6IE5vdCBuZWNlc3NhcnkgcmFpc2luZyByYXRlLCBmYWxsIGJhY2sgcmF0ZS4uLi5cbiIpOworCQkJLy9wcmludGsoImNhc2UxLTE6IHBNZ250SW5mby0+Q3VycmVudE9wZXJhUmF0ZSA9JWQsIFR4VGhyb3VnaHB1dCA9ICVkLCBMYXN0VGhyb3VnaHB1dCA9ICVkXG4iLAorCQkJLy8JCXByaXYtPkN1cnJlbnRPcGVyYVJhdGUsIFR4VGhyb3VnaHB1dCwgcHJpdi0+TGFzdFR4VGhyb3VnaHB1dCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwcml2LT5iVHJ5dXBpbmcgPSBmYWxzZTsKKwkJfQorCX0KKwllbHNlIGlmIChDdXJyU2lnbmFsU3RyZW5ndGggPiAtNDcgJiYgKEN1cnJSZXRyeVJhdGUgPCA1MCkpCisJeworCQkvLzJGb3IgSGlnaCBQb3dlcgorCQkvLworCQkvLyBBZGRlZCBieSBSb2dlciwgMjAwNy4wNC4wOS4KKwkJLy8gUmV0dXJuIHRvIGhpZ2hlc3QgZGF0YSByYXRlLCBpZiBzaWduYWwgc3RyZW5ndGggaXMgZ29vZCBlbm91Z2guCisJCS8vIFNpZ25hbFN0cmVuZ3RoIHRocmVzaG9sZCgtNTBkYm0pIGlzIGZvciBSVEw4MTg2LgorCQkvLyBSZXZpc2UgU2lnbmFsU3RyZW5ndGggdGhyZXNob2xkIHRvIC01MWRibS4KKwkJLy8KKwkJLy8gQWxzbyBuZWVkIHRvIGNoZWNrIHJldHJ5IHJhdGUgZm9yIHNhZmV0eSwgYnkgQnJ1Y2UsIDIwMDctMDYtMDUuCisJCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgIT0gcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuSGlnaGVzdE9wZXJhUmF0ZSApCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCQkvLyBVcGdyYWRlIFR4IFJhdGUgZGlyZWN0bHkuCisJCQlwcml2LT5Ucnl1cGluZ0NvdW50ICs9IFRyeVVwVGg7CisJCX0KKy8vCQlwcmludGsoImNhc2UyOiBTdGFSYXRlQWRhcHRpdmU4N1NFOiBQb3dlciglZCkgaXMgaGlnaCBlbm91Z2ghIS4gXG4iLCBDdXJyU2lnbmFsU3RyZW5ndGgpOworCisJfQorCWVsc2UgaWYoQ3VyclR4b2tDbnQgPiA5ICYmIEN1cnJUeG9rQ250PCAxMDAgJiYgQ3VyclJldHJ5UmF0ZSA+PSA2MDApCisJeworCQkvLzIgRm9yIFNlcmlvdXMgUmV0cnkKKwkJLy8KKwkJLy8gVHJhZmZpYyBpcyBub3QgYnVzeSBidXQgb3VyIFR4IHJldHJ5IGlzIHNlcmlvdXMuCisJCS8vCisJCWJUcnlEb3duID0gdHJ1ZTsKKwkJLy8gTGV0IFJhdGUgTWVjaGFuaXNtIHRvIGRlZ3JhZGUgdHggcmF0ZSBkaXJlY3RseS4KKwkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7CisvLwkJcHJpbnRrKCJjYXNlMzogUkE6IFR4IFJldHJ5IGlzIHNlcmlvdXMuIERlZ3JhZGUgVHggUmF0ZSB0byAlZCBkaXJlY3RseS4uLlxuIiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CisJfQorCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDEwOCApCisJeworCQkvLzJGb3IgNTRNYnBzCisJCS8vIEFpciBMaW5rCisJCWlmICggKEN1cnJSZXRyeVJhdGU+MjYpJiYocHJpdi0+TGFzdFJldHJ5UmF0ZT4yNSkpCisvLwkJaWYgKCAoQ3VyclJldHJ5UmF0ZT40MCkmJihwcml2LT5MYXN0UmV0cnlSYXRlPjM5KSkKKwkJeworCQkJLy9Eb3duIHRvIHJhdGUgNDhNYnBzLgorCQkJYlRyeURvd24gPSB0cnVlOworCQl9CisJCS8vIENhYmxlIExpbmsKKwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPjE3KSYmKHByaXYtPkxhc3RSZXRyeVJhdGU+MTYpICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPiAtNzIpKQorLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZT4xNykmJihwcml2LT5MYXN0UmV0cnlSYXRlPjE2KSAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTcyKSkKKwkJeworCQkJLy9Eb3duIHRvIHJhdGUgNDhNYnBzLgorCQkJYlRyeURvd24gPSB0cnVlOworCQl9CisKKwkJaWYoYlRyeURvd24gJiYgKEN1cnJTaWduYWxTdHJlbmd0aCA8IC03NSkpIC8vY2FibGUgbGluaworCQl7CisJCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsKKwkJfQorCQkvL3ByaW50aygiY2FzZTQtLS01NE0gXG4iKTsKKworCX0KKwllbHNlIGlmICggcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSA5NiApCisJeworCQkvLzJGb3IgNDhNYnBzCisJCS8vQWlyIExpbmsKKwkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+NDgpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjQ3KSkpCisvLwkJaWYgKCAoKEN1cnJSZXRyeVJhdGU+NjUpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPjY0KSkpCisKKwkJeworCQkJLy9Eb3duIHRvIHJhdGUgMzZNYnBzLgorCQkJYlRyeURvd24gPSB0cnVlOworCQl9CisJCS8vQ2FibGUgTGluaworCQllbHNlIGlmICggKChDdXJyUmV0cnlSYXRlPjIxKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT4yMCkpICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPiAtNzQpKQorCQl7CisJCQkvL0Rvd24gdG8gcmF0ZSAzNk1icHMuCisJCQliVHJ5RG93biA9IHRydWU7CisJCX0KKwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNTAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQorLy8JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDcwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkKKwkJeworCQkJYlRyeURvd24gPSB0cnVlOworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7CisJCX0KKwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDgpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDgpICkgLy9UTyBETzogbmVlZCB0byBjb25zaWRlciAoUlNTSSkKKy8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8MjgpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDgpICkKKwkJeworCQkJYlRyeVVwID0gdHJ1ZTsKKwkJfQorCisJCWlmKGJUcnlEb3duICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPCAtNzUpKQorCQl7CisJCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsKKwkJfQorCQkvL3ByaW50aygiY2FzZTUtLS00OE0gXG4iKTsKKwl9CisJZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNzIgKQorCXsKKwkJLy8yRm9yIDM2TWJwcworCQlpZiAoIChDdXJyUmV0cnlSYXRlPjQzKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT40MSkpCisvLwkJaWYgKCAoQ3VyclJldHJ5UmF0ZT42MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+NTkpKQorCQl7CisJCQkvL0Rvd24gdG8gcmF0ZSAyNE1icHMuCisJCQliVHJ5RG93biA9IHRydWU7CisJCX0KKwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNTAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQorLy8JCWVsc2UgaWYoKEN1cnJSZXRyeVJhdGU+ICAocHJpdi0+TGFzdFJldHJ5UmF0ZSArIDcwICkpICYmIChwcml2LT5GYWlsVHhSYXRlQ291bnQgPjIgKSkKKwkJeworCQkJYlRyeURvd24gPSB0cnVlOworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7CisJCX0KKwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDE1KSAmJiAgKHByaXYtPkxhc3RSZXRyeVJhdGU8MTYpKSAvL1RPIERPOiBuZWVkIHRvIGNvbnNpZGVyIChSU1NJKQorLy8JCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTwzNSkgJiYgIChwcml2LT5MYXN0UmV0cnlSYXRlPDM2KSkKKwkJeworCQkJYlRyeVVwID0gdHJ1ZTsKKwkJfQorCisJCWlmKGJUcnlEb3duICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPCAtODApKQorCQl7CisJCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsKKwkJfQorCQkvL3ByaW50aygiY2FzZTYtLS0zNk0gXG4iKTsKKwl9CisJZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNDggKQorCXsKKwkJLy8yRm9yIDI0TWJwcworCQkvLyBBaXIgTGluaworCQlpZiAoICgoQ3VyclJldHJ5UmF0ZT42MykgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+NjIpKSkKKy8vCQlpZiAoICgoQ3VyclJldHJ5UmF0ZT44MykgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+ODIpKSkKKwkJeworCQkJLy9Eb3duIHRvIHJhdGUgMThNYnBzLgorCQkJYlRyeURvd24gPSB0cnVlOworCQl9CisJCS8vQ2FibGUgTGluaworCQllbHNlIGlmICggKChDdXJyUmV0cnlSYXRlPjMzKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT4zMikpICYmIChDdXJyU2lnbmFsU3RyZW5ndGggPiAtODIpICkKKy8vCQkgZWxzZSBpZiAoICgoQ3VyclJldHJ5UmF0ZT41MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+NDkpKSAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoID4gLTgyKSApCisJCXsKKwkJCS8vRG93biB0byByYXRlIDE4TWJwcy4KKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA1MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpCisvLwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNzAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQorCisJCXsKKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgKz0gVHJ5RG93blRoOworCQl9CisgIAkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDIwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTwyMSkpIC8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpCisvLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDQwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZTw0MSkpCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCX0KKworCQlpZihiVHJ5RG93biAmJiAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTgyKSkKKwkJeworCQkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSArPSBUcnlEb3duVGg7CisJCX0KKwkJLy9wcmludGsoImNhc2U3LS0tMjRNIFxuIik7CisJfQorCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDM2ICkKKwl7CisJCS8vMkZvciAxOE1icHMKKwkJLy8gb3JpZ2luYWwgKDEwOSwgMTA5KQorCQkvL1tUUkMgRGVsbCBMYWJdICg5MCwgOTEpLCBJc2FpYWggMjAwOC0wMi0xOCAyMzoyNAorCQkvLwkJCSAgICAgKDg1LCA4NiksIElzYWlhaCAyMDA4LTAyLTE4IDI0OjAwCisJCWlmICggKChDdXJyUmV0cnlSYXRlPjg1KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZT44NikpKQorLy8JCWlmICggKChDdXJyUmV0cnlSYXRlPjExNSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+MTE2KSkpCisJCXsKKwkJCS8vRG93biB0byByYXRlIDExTWJwcy4KKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQkvL1tUUkMgRGVsbCBMYWJdICBJc2FpYWggMjAwOC0wMi0xOCAyMzoyNAorCQllbHNlIGlmKChDdXJyUmV0cnlSYXRlPiAgKHByaXYtPkxhc3RSZXRyeVJhdGUgKyA1MCApKSAmJiAocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4yICkpCisvLwkJZWxzZSBpZigoQ3VyclJldHJ5UmF0ZT4gIChwcml2LT5MYXN0UmV0cnlSYXRlICsgNzAgKSkgJiYgKHByaXYtPkZhaWxUeFJhdGVDb3VudCA+MiApKQorCQl7CisJCQliVHJ5RG93biA9IHRydWU7CisJCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhICs9IFRyeURvd25UaDsKKwkJfQorCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8MjIpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDIzKSkgLy9UTyBETzogbmVlZCB0byBjb25zaWRlciAoUlNTSSkKKy8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8NDIpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDQzKSkKKwkJeworCQkJYlRyeVVwID0gdHJ1ZTsKKwkJfQorCQkvL3ByaW50aygiY2FzZTgtLS0xOE0gXG4iKTsKKwl9CisJZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMjIgKQorCXsKKwkJLy8yRm9yIDExTWJwcworCQlpZiAoQ3VyclJldHJ5UmF0ZT45NSkKKy8vCQlpZiAoQ3VyclJldHJ5UmF0ZT4xNTUpCisJCXsKKwkJCWJUcnlEb3duID0gdHJ1ZTsKKwkJfQorCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGU8MjkpICYmIChwcml2LT5MYXN0UmV0cnlSYXRlIDwzMCkgKS8vVE8gRE86IG5lZWQgdG8gY29uc2lkZXIgKFJTU0kpCisvLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDQ5KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZSA8NTApICkKKwkJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCQl9CisJCS8vcHJpbnRrKCJjYXNlOS0tLTExTSBcbiIpOworCQl9CisJZWxzZSBpZiAoIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gMTEgKQorCXsKKwkJLy8yRm9yIDUuNU1icHMKKwkJaWYgKEN1cnJSZXRyeVJhdGU+MTQ5KQorLy8JCWlmIChDdXJyUmV0cnlSYXRlPjE4OSkKKwkJeworCQkJYlRyeURvd24gPSB0cnVlOworCQl9CisJCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZTw2MCkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPCA2NSkpCisvLwkJZWxzZSBpZiAoIChDdXJyUmV0cnlSYXRlPDgwKSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZSA8IDg1KSkKKworCQkJeworCQkJYlRyeVVwID0gdHJ1ZTsKKwkJCX0KKwkJLy9wcmludGsoImNhc2UxMC0tLTUuNU0gXG4iKTsKKwkJfQorCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDQgKQorCXsKKwkJLy8yRm9yIDIgTWJwcworCQlpZigoQ3VyclJldHJ5UmF0ZT45OSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+OTkpKQorLy8JCWlmKChDdXJyUmV0cnlSYXRlPjE5OSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGU+MTk5KSkKKwkJeworCQkJYlRyeURvd24gPSB0cnVlOworCQl9CisJCWVsc2UgaWYgKCAoQ3VyclJldHJ5UmF0ZSA8IDY1KSAmJiAocHJpdi0+TGFzdFJldHJ5UmF0ZSA8IDcwKSkKKy8vCQllbHNlIGlmICggKEN1cnJSZXRyeVJhdGUgPCA4NSkgJiYgKHByaXYtPkxhc3RSZXRyeVJhdGUgPCA5MCkpCisJCXsKKwkJCWJUcnlVcCA9IHRydWU7CisJCX0KKwkJLy9wcmludGsoImNhc2UxMS0tLTJNIFxuIik7CisJfQorCWVsc2UgaWYgKCBwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDIgKQorCXsKKwkJLy8yRm9yIDEgTWJwcworCQlpZiggKEN1cnJSZXRyeVJhdGU8NzApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDc1KSkKKy8vCQlpZiggKEN1cnJSZXRyeVJhdGU8OTApICYmIChwcml2LT5MYXN0UmV0cnlSYXRlPDk1KSkKKwkJeworCQkJYlRyeVVwID0gdHJ1ZTsKKwkJfQorCQkvL3ByaW50aygiY2FzZTEyLS0tMU0gXG4iKTsKKwl9CisKKwlpZihiVHJ5VXAgJiYgYlRyeURvd24pCisgICAgCXByaW50aygiU3RhUmF0ZUFkYXB0aXZlODdCKCk6IFR4IFJhdGUgdHJpZWQgdXBwaW5nIGFuZCBkb3duaW5nIHNpbXVsdGFuZW91c2x5IVxuIik7CisKKwkvLzEgVGVzdCBVcGdyYWRpbmcgVHggUmF0ZQorCS8vIFNvbWV0aW1lcyB0aGUgY2F1c2Ugb2YgdGhlIGxvdyB0aHJvdWdocHV0IChoaWdoIHJldHJ5IHJhdGUpIGlzIHRoZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhlIEFQIGFuZCBOSUMuCisJLy8gVG8gdGVzdCBpZiB0aGUgdXBwZXIgcmF0ZSBtYXkgY2F1c2UgbG93ZXIgcmV0cnkgcmF0ZSwgdGhpcyBtZWNoYW5pc20gcmFuZG9tbHkgb2NjdXJzIHRvIHRlc3QgdXBncmFkaW5nIHR4IHJhdGUuCisJaWYoIWJUcnlVcCAmJiAhYlRyeURvd24gJiYgKHByaXYtPlRyeXVwaW5nQ291bnQgPT0gMCkgJiYgKHByaXYtPlRyeURvd25Db3VudExvd0RhdGEgPT0gMCkKKwkJJiYgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSAhPSBwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5IaWdoZXN0T3BlcmFSYXRlICYmIHByaXYtPkZhaWxUeFJhdGVDb3VudCA8IDIpCisJeworCQlpZihqaWZmaWVzJSAoQ3VyclJldHJ5UmF0ZSArIDEwMSkgPT0gMCkKKwkJeworCQkJYlRyeVVwID0gdHJ1ZTsKKwkJCXByaXYtPmJUcnl1cGluZyA9IHRydWU7CisJCQkvL3ByaW50aygiU3RhUmF0ZUFkYXB0aXZlODdTRSgpOiBSYW5kb21seSB0cnkgdXBncmFkaW5nLi4uXG4iKTsKKwkJfQorCX0KKworCS8vMSBSYXRlIE1lY2hhbmlzbQorCWlmKGJUcnlVcCkKKwl7CisJCXByaXYtPlRyeXVwaW5nQ291bnQrKzsKKwkJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA9IDA7CisKKwkJeworLy8JCQlwcmludGsoIlVQOiBwSGFsRGF0YS0+VHJ5dXBpbmdDb3VudCA9ICVkXG4iLCBwcml2LT5Ucnl1cGluZ0NvdW50KTsKKy8vCQkJcHJpbnRrKCJVUDogVHJ5VXBUaCglZCkrIChGYWlsVHhSYXRlQ291bnQoJWQpKV4yID0lZFxuIiwKKy8vCQkJCVRyeVVwVGgsIHByaXYtPkZhaWxUeFJhdGVDb3VudCwgKFRyeVVwVGggKyBwcml2LT5GYWlsVHhSYXRlQ291bnQgKiBwcml2LT5GYWlsVHhSYXRlQ291bnQpICk7CisvLwkJCXByaW50aygiVVA6IHBIYWxEYXRhLT5iVHJ5dXBpbmc9JWRcbiIsICBwcml2LT5iVHJ5dXBpbmcpOworCisJCX0KKworCQkvLworCQkvLyBDaGVjayBtb3JlIHRpbWVzIGlmIHdlIG5lZWQgdG8gdXBncmFkZSBpbmRlZWQuCisJCS8vIEJlY2F1c2UgdGhlIGxhcmdlc3QgdmFsdWUgb2YgcEhhbERhdGEtPlRyeXVwaW5nQ291bnQgaXMgMHhGRkZGIGFuZAorCQkvLyB0aGUgbGFyZ2VzdCB2YWx1ZSBvZiBwSGFsRGF0YS0+RmFpbFR4UmF0ZUNvdW50IGlzIDB4MTQsCisJCS8vIHRoaXMgY29uZGl0aW9uIHdpbGwgYmUgc2F0aXNmaWVkIGF0IG1vc3QgZXZlcnkgMiBtaW4uCisJCS8vCisKKwkJaWYoKHByaXYtPlRyeXVwaW5nQ291bnQgPiAoVHJ5VXBUaCArIHByaXYtPkZhaWxUeFJhdGVDb3VudCAqIHByaXYtPkZhaWxUeFJhdGVDb3VudCkpIHx8CisJCQkoQ3VyclNpZ25hbFN0cmVuZ3RoID4gcHJpdi0+TGFzdEZhaWxUeFJhdGVTUykgfHwgcHJpdi0+YlRyeXVwaW5nKQorCQl7CisJCQlwcml2LT5Ucnl1cGluZ0NvdW50ID0gMDsKKwkJCS8vCisJCQkvLyBXaGVuIHRyYW5zZmVyaW5nIGZyb20gQ0NLIHRvIE9GRE0sIERJRyBpcyBhbiBpbXBvcnRhbnQgaXNzdWUuCisJCQkvLworCQkJaWYocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSAyMikKKwkJCQliVXBkYXRlSW5pdGlhbEdhaW4gPSB0cnVlOworCisJCQkvLyBUaGUgZGlmZmVyZW5jZSBpbiB0aHJvdWdocHV0IGJldHdlZW4gNDhNYnBzIGFuZCAzNk1icHMgaXMgOE0uCisJCQkvLyBTbywgd2UgbXVzdCBiZSBjYXJlZnVsbHkgaW4gdGhpcyByYXRlIHNjYWxlLiBJc2FpYWggMjAwOC0wMi0xNS4KKwkJCS8vCisJCQlpZiggICgocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9PSA3MikgfHwgKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0gNDgpIHx8IChwcml2LT5DdXJyZW50T3BlcmFSYXRlID09IDM2KSkgJiYKKwkJCQkocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID4gMikgKQorCQkJCXByaXYtPlJhdGVBZGFwdGl2ZVBlcmlvZD0gKFJBVEVfQURBUFRJVkVfVElNRVJfUEVSSU9ELzIpOworCisJCQkvLyAoMSlUbyBhdm9pZCB1cGdyYWRlIGZyZXF1ZW50bHkgdG8gdGhlIGZhaWwgdHggcmF0ZSwgYWRkIHRoZSBGYWlsVHhSYXRlQ291bnQgaW50byB0aGUgdGhyZXNob2xkLgorCQkJLy8gKDIpSWYgdGhlIHNpZ25hbCBzdHJlbmd0aCBpcyBpbmNyZWFzZWQsIGl0IG1heSBiZSBhYmxlIHRvIHVwZ3JhZGUuCisKKwkJCXByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPSBHZXRVcGdyYWRlVHhSYXRlKGRldiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CisvLwkJCXByaW50aygiU3RhUmF0ZUFkYXB0aXZlODdTRSgpOiBVcGdyYWRlIFR4IFJhdGUgdG8gJWRcbiIsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOworCisJCQkvL1tUUkMgRGVsbCBMYWJdIEJ5cGFzcyAxMi85LzYsIElzYWlhaCAyMDA4LTAyLTE4IDIwOjAwCisJCQlpZihwcml2LT5DdXJyZW50T3BlcmFSYXRlID09MzYpCisJCQl7CisJCQkJcHJpdi0+YlVwZGF0ZUFSRlI9dHJ1ZTsKKwkJCQl3cml0ZV9uaWNfd29yZChkZXYsIEFSRlIsIDB4MEY4Rik7IC8vYnlwYXNzIDEyLzkvNgorLy8JCQkJcHJpbnRrKCJVUDogQVJGUj0weEY4RlxuIik7CisJCQl9CisJCQllbHNlIGlmKHByaXYtPmJVcGRhdGVBUkZSKQorCQkJeworCQkJCXByaXYtPmJVcGRhdGVBUkZSPWZhbHNlOworCQkJCXdyaXRlX25pY193b3JkKGRldiwgQVJGUiwgMHgwRkZGKTsgLy9zZXQgMU0gfiA1NE1icHMuCisvLwkJCQlwcmludGsoIlVQOiBBUkZSPTB4RkZGXG4iKTsKKwkJCX0KKworCQkJLy8gVXBkYXRlIEZhaWwgVHggcmF0ZSBhbmQgY291bnQuCisJCQlpZihwcml2LT5MYXN0RmFpbFR4UmF0ZSAhPSBwcml2LT5DdXJyZW50T3BlcmFSYXRlKQorCQkJeworCQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlID0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZTsKKwkJCQlwcml2LT5GYWlsVHhSYXRlQ291bnQgPSAwOworCQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlU1MgPSAtMjAwOyAvLyBTZXQgbG93ZXN0IHBvd2VyLgorCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCWlmKHByaXYtPlRyeXVwaW5nQ291bnQgPiAwKQorCQkJcHJpdi0+VHJ5dXBpbmdDb3VudCAtLTsKKwl9CisKKwlpZihiVHJ5RG93bikKKwl7CisJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGErKzsKKwkJcHJpdi0+VHJ5dXBpbmdDb3VudCA9IDA7CisJCXsKKy8vCQkJcHJpbnRrKCJETjogcEhhbERhdGEtPlRyeURvd25Db3VudExvd0RhdGEgPSAlZFxuIixwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhKTsKKy8vCQkJcHJpbnRrKCJETjogVHJ5RG93blRoID0lZFxuIiwgVHJ5RG93blRoKTsKKy8vCQkJcHJpbnRrKCJETjogcEhhbERhdGEtPmJUcnl1cGluZz0lZFxuIiwgIHByaXYtPmJUcnl1cGluZyk7CisJCX0KKworCQkvL0NoZWNrIGlmIFR4IHJhdGUgY2FuIGJlIGRlZ3JhZGVkIG9yIFRlc3QgdHJ5aW5nIHVwZ3JhZGluZyBzaG91bGQgZmFsbGJhY2suCisJCWlmKHByaXYtPlRyeURvd25Db3VudExvd0RhdGEgPiBUcnlEb3duVGggfHwgcHJpdi0+YlRyeXVwaW5nKQorCQl7CisJCQlwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID0gMDsKKwkJCXByaXYtPmJUcnl1cGluZyA9IGZhbHNlOworCQkJLy8gVXBkYXRlIGZhaWwgaW5mb3JtYXRpb24uCisJCQlpZihwcml2LT5MYXN0RmFpbFR4UmF0ZSA9PSBwcml2LT5DdXJyZW50T3BlcmFSYXRlKQorCQkJeworCQkJCXByaXYtPkZhaWxUeFJhdGVDb3VudCArKzsKKwkJCQkvLyBSZWNvcmQgdGhlIFR4IGZhaWwgcmF0ZSBzaWduYWwgc3RyZW5ndGguCisJCQkJaWYoQ3VyclNpZ25hbFN0cmVuZ3RoID4gcHJpdi0+TGFzdEZhaWxUeFJhdGVTUykKKwkJCQl7CisJCQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlU1MgPSBDdXJyU2lnbmFsU3RyZW5ndGg7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlID0gcHJpdi0+Q3VycmVudE9wZXJhUmF0ZTsKKwkJCQlwcml2LT5GYWlsVHhSYXRlQ291bnQgPSAxOworCQkJCXByaXYtPkxhc3RGYWlsVHhSYXRlU1MgPSBDdXJyU2lnbmFsU3RyZW5ndGg7CisJCQl9CisJCQlwcml2LT5DdXJyZW50T3BlcmFSYXRlID0gR2V0RGVncmFkZVR4UmF0ZShkZXYsIHByaXYtPkN1cnJlbnRPcGVyYVJhdGUpOworCisJCQkvLyBSZWR1Y2UgY2hhcmlvdCB0cmFpbmluZyB0aW1lIGF0IHdlYWsgc2lnbmFsIHN0cmVuZ3RoIHNpdHVhdGlvbi4gU0QzIEVEIGRlbWFuZC4KKwkJCS8vW1RSQyBEZWxsIExhYl0gUmV2aXNlIFNpZ25hbCBUaHJlc2hvbGQgZnJvbSAtNzUgdG8gLTgwICwgSXNhaWFoIDIwMDgtMDItMTggMjA6MDAKKwkJCWlmKCAoQ3VyclNpZ25hbFN0cmVuZ3RoIDwgLTgwKSAmJiAocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA+IDcyICkpCisJCQl7CisJCQkJcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA9IDcyOworLy8JCQkJcHJpbnRrKCJETjogd2VhayBzaWduYWwgc3RyZW5ndGggKCVkKSwgZGVncmFkZSB0byAzNk1icHNcbiIsIEN1cnJTaWduYWxTdHJlbmd0aCk7CisJCQl9CisKKwkJCS8vW1RSQyBEZWxsIExhYl0gQnlwYXNzIDEyLzkvNiwgSXNhaWFoIDIwMDgtMDItMTggMjA6MDAKKwkJCWlmKHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgPT0zNikKKwkJCXsKKwkJCQlwcml2LT5iVXBkYXRlQVJGUj10cnVlOworCQkJCXdyaXRlX25pY193b3JkKGRldiwgQVJGUiwgMHgwRjhGKTsgLy9ieXBhc3MgMTIvOS82CisvLwkJCQlwcmludGsoIkROOiBBUkZSPTB4RjhGXG4iKTsKKwkJCX0KKwkJCWVsc2UgaWYocHJpdi0+YlVwZGF0ZUFSRlIpCisJCQl7CisJCQkJcHJpdi0+YlVwZGF0ZUFSRlI9ZmFsc2U7CisJCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBBUkZSLCAweDBGRkYpOyAvL3NldCAxTSB+IDU0TWJwcy4KKy8vCQkJCXByaW50aygiRE46IEFSRlI9MHhGRkZcbiIpOworCQkJfQorCisJCQkvLworCQkJLy8gV2hlbiBpdCBpcyBDQ0sgcmF0ZSwgaXQgbWF5IG5lZWQgdG8gdXBkYXRlIGluaXRpYWwgZ2FpbiB0byByZWNlaXZlIGxvd2VyIHBvd2VyIHBhY2tldHMuCisJCQkvLworCQkJaWYoTWdudElzQ2NrUmF0ZShwcml2LT5DdXJyZW50T3BlcmFSYXRlKSkKKwkJCXsKKwkJCQliVXBkYXRlSW5pdGlhbEdhaW4gPSB0cnVlOworCQkJfQorLy8JCQlwcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3U0UoKTogRGVncmFkZSBUeCBSYXRlIHRvICVkXG4iLCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlpZihwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhID4gMCkKKwkJCXByaXYtPlRyeURvd25Db3VudExvd0RhdGEgLS07CisJfQorCisJLy8gS2VlcCB0aGUgVHggZmFpbCByYXRlIGNvdW50IHRvIGVxdWFsIHRvIDB4MTUgYXQgbW9zdC4KKwkvLyBSZWR1Y2UgdGhlIGZhaWwgY291bnQgYXQgbGVhc3QgdG8gMTAgc2VjIGlmIHR4IHJhdGUgaXMgdGVuZGluZyBzdGFibGUuCisJaWYocHJpdi0+RmFpbFR4UmF0ZUNvdW50ID49IDB4MTUgfHwKKwkJKCFiVHJ5VXAgJiYgIWJUcnlEb3duICYmIHByaXYtPlRyeURvd25Db3VudExvd0RhdGEgPT0gMCAmJiBwcml2LT5Ucnl1cGluZ0NvdW50ICYmIHByaXYtPkZhaWxUeFJhdGVDb3VudCA+IDB4NikpCisJeworCQlwcml2LT5GYWlsVHhSYXRlQ291bnQgLS07CisJfQorCisKKwlPZmRtVHhQd3JJZHggID0gcHJpdi0+Y2h0eHB3cl9vZmRtW3ByaXYtPmllZWU4MDIxMS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWxdOworCUNja1R4UHdySWR4ICA9IHByaXYtPmNodHhwd3JbcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuY2hhbm5lbF07CisKKwkvL1tUUkMgRGVsbCBMYWJdIE1hYzB4OWUgaW5jcmVhc2UgMiBsZXZlbCBpbiAzNk1+MThNIHNpdHVhdGlvbiwgSXNhaWFoIDIwMDgtMDItMTggMjQ6MDAKKwlpZigocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSA8IDk2KSAmJihwcml2LT5DdXJyZW50T3BlcmFSYXRlID4gMjIpKQorCXsKKwkJdTFiQ2NrID0gcmVhZF9uaWNfYnl0ZShkZXYsIENDS19UWEFHQyk7CisJCXUxYk9mZG0gPSByZWFkX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQyk7CisKKwkJLy8gY2FzZSAxOiBOZXZlciBlbnRlciBIaWdoIHBvd2VyCisJCWlmKHUxYkNjayA9PSBDY2tUeFB3cklkeCApCisJCXsKKwkJCWlmKHUxYk9mZG0gIT0gKE9mZG1UeFB3cklkeCsyKSApCisJCQl7CisJCQlwcml2LT5iRW5oYW5jZVR4UHdyPSB0cnVlOworCQkJdTFiT2ZkbSA9ICgodTFiT2ZkbSsyKSA+IDM1KSA/IDM1OiAodTFiT2ZkbSsyKTsKKwkJCXdyaXRlX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQywgdTFiT2ZkbSk7CisvLwkJCXByaW50aygiRW5oYW5jZSBPRkRNX1RYQUdDIDogKysrKysgdTFiT2ZkbT0gMHgleFxuIiwgdTFiT2ZkbSk7CisJCQl9CisJCX0KKwkJLy8gY2FzZSAyOiBlbnRlciBoaWdoIHBvd2VyCisJCWVsc2UgaWYodTFiQ2NrIDwgQ2NrVHhQd3JJZHgpCisJCXsKKwkJCWlmKCFwcml2LT5iRW5oYW5jZVR4UHdyKQorCQkJeworCQkJCXByaXYtPmJFbmhhbmNlVHhQd3I9IHRydWU7CisJCQkJdTFiT2ZkbSA9ICgodTFiT2ZkbSsyKSA+IDM1KSA/IDM1OiAodTFiT2ZkbSsyKTsKKwkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIHUxYk9mZG0pOworCQkJCS8vUlRfVFJBQ0UoQ09NUF9SQVRFLCBEQkdfVFJBQ0UsICgiRW5oYW5jZSBPRkRNX1RYQUdDKDIpIDogKysrKysgdTFiT2ZkbT0gMHgleFxuIiwgdTFiT2ZkbSkpOworCQkJfQorCQl9CisJfQorCWVsc2UgaWYocHJpdi0+YkVuaGFuY2VUeFB3cikgIC8vNTQvNDgvMTEvNS41LzIvMQorCXsKKwkJdTFiQ2NrID0gcmVhZF9uaWNfYnl0ZShkZXYsIENDS19UWEFHQyk7CisJCXUxYk9mZG0gPSByZWFkX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQyk7CisKKwkJLy8gY2FzZSAxOiBOZXZlciBlbnRlciBIaWdoIHBvd2VyCisJCWlmKHUxYkNjayA9PSBDY2tUeFB3cklkeCApCisJCXsKKwkJcHJpdi0+YkVuaGFuY2VUeFB3cj0gZmFsc2U7CisJCXdyaXRlX25pY19ieXRlKGRldiwgT0ZETV9UWEFHQywgT2ZkbVR4UHdySWR4KTsKKwkJLy9wcmludGsoIlJlY292ZXIgT0ZETV9UWEFHQyA6ID09PT09IHUxYk9mZG09IDB4JXhcbiIsIE9mZG1UeFB3cklkeCk7CisJCX0KKwkJLy8gY2FzZSAyOiBlbnRlciBoaWdoIHBvd2VyCisJCWVsc2UgaWYodTFiQ2NrIDwgQ2NrVHhQd3JJZHgpCisJCXsKKwkJCXByaXYtPmJFbmhhbmNlVHhQd3I9IGZhbHNlOworCQkJdTFiT2ZkbSA9ICgodTFiT2ZkbS0yKSA+IDApID8gKHUxYk9mZG0tMik6IDA7CisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE9GRE1fVFhBR0MsIHUxYk9mZG0pOworCQkJLy9SVF9UUkFDRShDT01QX1JBVEUsIERCR19UUkFDRSwgKCJSZWNvdmVyIE9GRE1fVFhBR0MoMik6ID09PT09IHUxYk9mZG09IDB4JXhcbiIsIHUxYk9mZG0pKTsKKworCQl9CisJfQorCisJLy8KKwkvLyBXZSBuZWVkIHVwZGF0ZSBpbml0aWFsIGdhaW4gd2hlbiB3ZSBzZXQgdHggcmF0ZSAiZnJvbSBPRkRNIHRvIENDSyIgb3IKKwkvLyAiZnJvbSBDQ0sgdG8gT0ZETSIuCisJLy8KK1NldEluaXRpYWxHYWluOgorCWlmKGJVcGRhdGVJbml0aWFsR2FpbikKKwl7CisJCWlmKE1nbnRJc0Nja1JhdGUocHJpdi0+Q3VycmVudE9wZXJhUmF0ZSkpIC8vIENDSworCQl7CisJCQlpZihwcml2LT5Jbml0aWFsR2FpbiA+IHByaXYtPlJlZ0JNb2RlR2FpblN0YWdlKQorCQkJeworCQkJCXByaXYtPkluaXRpYWxHYWluQmFja1VwPSBwcml2LT5Jbml0aWFsR2FpbjsKKworCQkJCWlmKEN1cnJTaWduYWxTdHJlbmd0aCA8IC04NSkgLy8gTG93IHBvd2VyLCBPRkRNIFsweDE3XSA9IDI2LgorCQkJCXsKKwkJCQkJLy9TRDMgU1lzIHN1Z2dlc3QgdGhhdCBDdXJyU2lnbmFsU3RyZW5ndGggPCAtNjUsIG9mZG0gMHgxNz0yNi4KKwkJCQkJcHJpdi0+SW5pdGlhbEdhaW4gPSBwcml2LT5SZWdCTW9kZUdhaW5TdGFnZTsKKwkJCQl9CisJCQkJZWxzZSBpZihwcml2LT5Jbml0aWFsR2FpbiA+IHByaXYtPlJlZ0JNb2RlR2FpblN0YWdlICsgMSkKKwkJCQl7CisJCQkJCXByaXYtPkluaXRpYWxHYWluIC09IDI7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCXByaXYtPkluaXRpYWxHYWluIC0tOworCQkJCX0KKwkJCQlwcmludGsoIlN0YVJhdGVBZGFwdGl2ZTg3U0UoKTogdXBkYXRlIGluaXRfZ2FpbiB0byBpbmRleCAlZCBmb3IgZGF0ZSByYXRlICVkXG4iLHByaXYtPkluaXRpYWxHYWluLCBwcml2LT5DdXJyZW50T3BlcmFSYXRlKTsKKwkJCQlVcGRhdGVJbml0aWFsR2FpbihkZXYpOworCQkJfQorCQl9CisJCWVsc2UgLy8gT0ZETQorCQl7CisJCQlpZihwcml2LT5Jbml0aWFsR2FpbiA8IDQpCisJCQl7CisJCQkJcHJpdi0+SW5pdGlhbEdhaW5CYWNrVXA9IHByaXYtPkluaXRpYWxHYWluOworCisJCQkJcHJpdi0+SW5pdGlhbEdhaW4gKys7CisJCQkJcHJpbnRrKCJTdGFSYXRlQWRhcHRpdmU4N1NFKCk6IHVwZGF0ZSBpbml0X2dhaW4gdG8gaW5kZXggJWQgZm9yIGRhdGUgcmF0ZSAlZFxuIixwcml2LT5Jbml0aWFsR2FpbiwgcHJpdi0+Q3VycmVudE9wZXJhUmF0ZSk7CisJCQkJVXBkYXRlSW5pdGlhbEdhaW4oZGV2KTsKKwkJCX0KKwkJfQorCX0KKworCS8vUmVjb3JkIHRoZSByZWxhdGVkIGluZm8KKwlwcml2LT5MYXN0UmV0cnlSYXRlID0gQ3VyclJldHJ5UmF0ZTsKKwlwcml2LT5MYXN0VHhUaHJvdWdocHV0ID0gVHhUaHJvdWdocHV0OworCXByaXYtPmllZWU4MDIxMS0+cmF0ZSA9IHByaXYtPkN1cnJlbnRPcGVyYVJhdGUgKiA1OworfQorCisjZW5kaWYKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj1LRVJORUxfVkVSU0lPTigyLDYsMjApCit2b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqIHdvcmspCit7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yayxzdHJ1Y3QgZGVsYXllZF93b3JrLHdvcmspOworICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yayxzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSxyYXRlX2FkYXB0ZXJfd3EpOworICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OworI2Vsc2UKK3ZvaWQgcnRsODE4MF9yYXRlX2FkYXB0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKworI2VuZGlmCisgICAgICAgIC8vc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworLy8gICAgRE1FU0coIi0tLS0+cnRsODE4MF9yYXRlX2FkYXB0ZXIiKTsKKyAgICAgICAgU3RhUmF0ZUFkYXB0aXZlODdTRShkZXYpOworLy8gICBETUVTRygiPC0tLS1ydGw4MTgwX3JhdGVfYWRhcHRlciIpOworfQordm9pZCB0aW1lcl9yYXRlX2FkYXB0aXZlKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiogcHJpdiA9IGllZWU4MDIxMV9wcml2KChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGEpOworCS8vRE1FU0coIi0tLS0+dGltZXJfcmF0ZV9hZGFwdGl2ZSgpXG4iKTsKKwlpZighcHJpdi0+dXApCisJeworLy8JCURNRVNHKCI8LS0tLXRpbWVyX3JhdGVfYWRhcHRpdmUoKTpkcml2ZXIgaXMgbm90IHVwIVxuIik7CisJCXJldHVybjsKKwl9CisJaWYoKHByaXYtPmllZWU4MDIxMS0+aXdfbW9kZSAhPSBJV19NT0RFX01BU1RFUikKKwkJCSYmIChwcml2LT5pZWVlODAyMTEtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRUQpICYmCisJCQkocHJpdi0+Rm9yY2VkRGF0YVJhdGUgPT0gMCkgKQorCXsKKy8vCURNRVNHKCJ0aW1lcl9yYXRlX2FkYXB0aXZlKCk6c2NoZWR1bGUgcmF0ZV9hZGFwdGVyX3dxXG4iKTsKKyNpZmRlZiBDT05GSUdfUlRMODE4WF9TCisJCXF1ZXVlX3dvcmsocHJpdi0+aWVlZTgwMjExLT53cSwgKHZvaWQgKikmcHJpdi0+aWVlZTgwMjExLT5yYXRlX2FkYXB0ZXJfd3EpOworLy8JCVN0YVJhdGVBZGFwdGl2ZTg3U0UoKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YSk7CisjZW5kaWYKKwl9CisJcHJpdi0+cmF0ZWFkYXB0ZXJfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBNU0VDUyhwcml2LT5SYXRlQWRhcHRpdmVQZXJpb2QpOworCWFkZF90aW1lcigmcHJpdi0+cmF0ZWFkYXB0ZXJfdGltZXIpOworCS8vRE1FU0coIjwtLS0tdGltZXJfcmF0ZV9hZGFwdGl2ZSgpXG4iKTsKK30KKy8vYnkgYW15IDA4MDMxMn0KK3ZvaWQKK1N3QW50ZW5uYURpdmVyc2l0eVJ4T2s4MTg1KAorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJdTggU2lnbmFsU3RyZW5ndGgKKwkpCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOworCisvLwlwcmludGsoIitTd0FudGVubmFEaXZlcnNpdHlSeE9rODE4NTogUnhTczogJWRcbiIsIFNpZ25hbFN0cmVuZ3RoKTsKKworCXByaXYtPkFkUnhPa0NudCsrOworCisJaWYoIHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCAhPSAtMSkKKwl7CisJCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCA9ICgocHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoKjcpICsgKFNpZ25hbFN0cmVuZ3RoKjMpKSAvIDEwOworCX0KKwllbHNlCisJeyAvLyBJbml0aWFsaXphdGlvbiBjYXNlLgorCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggPSBTaWduYWxTdHJlbmd0aDsKKwl9CisvL3srYnkgYW15IDA4MDMxMgorCWlmKCBwcml2LT5MYXN0UnhQa3RBbnRlbm5hICkgLy9NYWluIGFudGVubmEuCisJCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250Kys7CisJZWxzZQkgLy8gQXV4IGFudGVubmEuCisJCXByaXYtPkFkQXV4QW50ZW5uYVJ4T2tDbnQrKzsKKy8vK2J5IGFteSAwODAzMTIKKy8vCXByaW50aygiLVN3QW50ZW5uYURpdmVyc2l0eVJ4T2s4MTg1OiBBZFJ4T2tDbnQ6ICVkIEFkUnhTaWduYWxTdHJlbmd0aDogJWRcbiIsIHByaXYtPkFkUnhPa0NudCwgcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoKTsKK30KKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlDaGFuZ2UgQW50ZW5uYSBTd2l0Y2guCisvLworYm9vbAorU2V0QW50ZW5uYTgxODUoCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwl1OAkJdTFiQW50ZW5uYUluZGV4CisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlib29sIGJBbnRlbm5hU3dpdGNoZWQgPSBmYWxzZTsKKworLy8JcHJpbnRrKCIrU2V0QW50ZW5uYTgxODUoKTogQW50ZW5uYSBpcyBzd2l0Y2hpbmcgdG86ICVkIFxuIiwgdTFiQW50ZW5uYUluZGV4KTsKKworCXN3aXRjaCh1MWJBbnRlbm5hSW5kZXgpCisJeworCWNhc2UgMDoKKwkJc3dpdGNoKHByaXYtPnJmX2NoaXApCisJCXsKKwkJY2FzZSBSRl9aRUJSQTI6CisJCWNhc2UgUkZfWkVCUkE0OgorI2lmZGVmIENPTkZJR19SVEw4MTg1QgorI2lmZGVmIENPTkZJR19SVEw4MThYX1MKKwkJCS8vIE1hYyByZWdpc3RlciwgbWFpbiBhbnRlbm5hCisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOVFNFTCwgMHgwMyk7CisJCQkvL2Jhc2UgYmFuZAorCQkJd3JpdGVfcGh5X2NjayhkZXYsMHgxMSwgMHg5Yik7IC8vIENvbmZpZyBDQ0sgUlggYW50ZW5uYS4KKwkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1Yyk7IC8vIENvbmZpZyBPRkRNIFJYIGFudGVubmEuCisKKyNlbHNlCisJCQkvLyBNYWMgcmVnaXN0ZXIsIG1haW4gYW50ZW5uYQorCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDMpOworCQkJLy9iYXNlIGJhbmQKKwkJCXdyaXRlX3BoeV9jY2soZGV2LCAweDEwLCAweDliKTsgLy8gQ29uZmlnIENDSyBSWCBhbnRlbm5hLgorCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDVjKTsgLy8gQ29uZmlnIE9GRE0gUlggYW50ZW5uYS4KKyNlbmRpZgorI2VuZGlmCisKKwkJCWJBbnRlbm5hU3dpdGNoZWQgPSB0cnVlOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiU2V0QW50ZW5uYTgxODU6IHVua293biBSRkNoaXBJRCglZClcbiIsIHByaXYtPnJmX2NoaXApOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDE6CisJCXN3aXRjaChwcml2LT5yZl9jaGlwKQorCQl7CisJCWNhc2UgUkZfWkVCUkEyOgorCQljYXNlIFJGX1pFQlJBNDoKKyNpZmRlZiBDT05GSUdfUlRMODE4NUIKKyNpZmRlZiBDT05GSUdfUlRMODE4WF9TCisJCQkvLyBNYWMgcmVnaXN0ZXIsIGF1eCBhbnRlbm5hCisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOVFNFTCwgMHgwMCk7CisJCQkvL2Jhc2UgYmFuZAorCQkJd3JpdGVfcGh5X2NjayhkZXYsIDB4MTEsIDB4YmIpOyAvLyBDb25maWcgQ0NLIFJYIGFudGVubmEuCisJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MGQsIDB4NTQpOyAvLyBDb25maWcgT0ZETSBSWCBhbnRlbm5hLgorI2Vsc2UKKwkJCS8vIE1hYyByZWdpc3RlciwgYXV4IGFudGVubmEKKwkJCXdyaXRlX25pY19ieXRlKGRldiwgQU5UU0VMLCAweDAwKTsKKwkJCS8vYmFzZSBiYW5kCisJCQl3cml0ZV9waHlfY2NrKGRldiwgMHgxMCwgMHhiYik7IC8vIENvbmZpZyBDQ0sgUlggYW50ZW5uYS4KKwkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1NCk7IC8vIENvbmZpZyBPRkRNIFJYIGFudGVubmEuCisjZW5kaWYKKyNlbmRpZgorCisJCQliQW50ZW5uYVN3aXRjaGVkID0gdHJ1ZTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlwcmludGsoIlNldEFudGVubmE4MTg1OiB1bmtvd24gUkZDaGlwSUQoJWQpXG4iLCBwcml2LT5yZl9jaGlwKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJTZXRBbnRlbm5hODE4NTogdW5rb3duIHUxYkFudGVubmFJbmRleCglZClcbiIsIHUxYkFudGVubmFJbmRleCk7CisJCWJyZWFrOworCX0KKworCWlmKGJBbnRlbm5hU3dpdGNoZWQpCisJeworCQlwcml2LT5DdXJyQW50ZW5uYUluZGV4ID0gdTFiQW50ZW5uYUluZGV4OworCX0KKworLy8JcHJpbnRrKCItU2V0QW50ZW5uYTgxODUoKTogcmV0dXJuICglI1gpXG4iLCBiQW50ZW5uYVN3aXRjaGVkKTsKKworCXJldHVybiBiQW50ZW5uYVN3aXRjaGVkOworfQorLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCVRvZ2dsZSBBbnRlbm5hIHN3aXRjaC4KKy8vCitib29sCitTd2l0Y2hBbnRlbm5hKAorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKKwkpCit7CisJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOworCisJYm9vbAkJYlJlc3VsdDsKKworCWlmKHByaXYtPkN1cnJBbnRlbm5hSW5kZXggPT0gMCkKKwl7CisjaWYgMC8vbHptIGRlbCAwODA4MjYKKy8vYnkgYW15IDA4MDMxMgorI2lmZGVmIENPTkZJR19SVEw4MThYX1MKKwkJaWYocHJpdi0+YlN3QW50ZW5uYURpdmVyaXR5KQorCQkJYlJlc3VsdCA9IFNldEFudGVubmFDb25maWc4N1NFKGRldiwgMSwgdHJ1ZSk7CisJCWVsc2UKKyNlbmRpZgorI2VuZGlmCisJCQliUmVzdWx0ID0gU2V0QW50ZW5uYTgxODUoZGV2LCAxKTsKKy8vYnkgYW15IDA4MDMxMgorLy8JCXByaW50aygiU3dpdGNoQW50ZW5uYSgpOiBzd2l0Y2hpbmcgdG8gYW50ZW5uYSAxIC4uLi4uLlxuIik7CisvLwkJYlJlc3VsdCA9IFNldEFudGVubmE4MTg1KGRldiwgMSk7Ly8tYnkgYW15IDA4MDMxMgorCX0KKwllbHNlCisJeworI2lmIDAvL2x6bSBkZWwgMDgwODI2CisvL2J5IGFteSAwODAzMTIKKyNpZmRlZiBDT05GSUdfUlRMODE4WF9TCisJCWlmKHByaXYtPmJTd0FudGVubmFEaXZlcml0eSkKKwkJCWJSZXN1bHQgPSBTZXRBbnRlbm5hQ29uZmlnODdTRShkZXYsIDAsIHRydWUpOworCQllbHNlCisjZW5kaWYKKyNlbmRpZgorCQkJYlJlc3VsdCA9IFNldEFudGVubmE4MTg1KGRldiwgMCk7CisvL2J5IGFteSAwODAzMTIKKy8vCQlwcmludGsoIlN3aXRjaEFudGVubmEoKTogc3dpdGNoaW5nIHRvIGFudGVubmEgMCAuLi4uLi5cbiIpOworLy8JCWJSZXN1bHQgPSBTZXRBbnRlbm5hODE4NShkZXYsIDApOy8vLWJ5IGFteSAwODAzMTIKKwl9CisKKwlyZXR1cm4gYlJlc3VsdDsKK30KKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlFbmdpbmUgb2YgU1cgQW50ZW5uYSBEaXZlcnNpdHkgbWVjaGFuaXNtLgorLy8JCVNpbmNlIDgxODcgaGFzIG5vIFR4IHBhcnQgaW5mb3JtYXRpb24sCisvLwkJdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBvbmx5IGRlcGVuZGVuZCBvbiBSeCBwYXJ0IGluZm9ybWF0aW9uLgorLy8KKy8vCTIwMDYuMDQuMTcsIGJ5IHJjbmprby4KKy8vCit2b2lkCitTd0FudGVubmFEaXZlcnNpdHkoCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldgorCSkKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CisJYm9vbCAgIGJTd0NoZWNrU1M9ZmFsc2U7CisvLwlwcmludGsoIitTd0FudGVubmFEaXZlcnNpdHkoKTogQ3VyckFudGVubmFJbmRleDogJWRcbiIsIHByaXYtPkN1cnJBbnRlbm5hSW5kZXgpOworLy8JcHJpbnRrKCJBZFRpY2tDb3VudCBpcyAlZFxuIixwcml2LT5BZFRpY2tDb3VudCk7CisvL2J5IGFteSAwODAzMTIKKwlpZihiU3dDaGVja1NTKQorCXsKKwkJcHJpdi0+QWRUaWNrQ291bnQrKzsKKworCQlwcmludGsoIigxKSBBZFRpY2tDb3VudDogJWQsIEFkQ2hlY2tQZXJpb2Q6ICVkXG4iLAorCQkJcHJpdi0+QWRUaWNrQ291bnQsIHByaXYtPkFkQ2hlY2tQZXJpb2QpOworCQlwcmludGsoIigyKSBBZFJ4U2lnbmFsU3RyZW5ndGg6ICVsZCwgQWRSeFNzVGhyZXNob2xkOiAlbGRcbiIsCisJCQlwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgsIHByaXYtPkFkUnhTc1RocmVzaG9sZCk7CisJfQorLy8JcHJpdi0+QWRUaWNrQ291bnQrKzsvLy1ieSBhbXkgMDgwMzEyCisKKwkvLyBDYXNlIDEuIE5vIExpbmsuCisJaWYocHJpdi0+aWVlZTgwMjExLT5zdGF0ZSAhPSBJRUVFODAyMTFfTElOS0VEKQorCXsKKwkvLwlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBDYXNlIDEuIE5vIExpbmsuXG4iKTsKKworCQlwcml2LT5iQWRTd2l0Y2hlZENoZWNraW5nID0gZmFsc2U7CisJCS8vIEkgc3dpdGNoIGFudGVubmEgaGVyZSB0byBwcmV2ZW50IGFueSBvbmUgb2YgYW50ZW5uYSBpcyBicm9rZW4gYmVmb3JlIGxpbmsgZXN0YWJsaXNoZWQsIDIwMDYuMDQuMTgsIGJ5IHJjbmprby4uCisJCVN3aXRjaEFudGVubmEoZGV2KTsKKwl9CisJLy8gQ2FzZSAyLiBMaW5rZWQgYnV0IG5vIHBhY2tldCByZWNlaXZlZC4KKwllbHNlIGlmKHByaXYtPkFkUnhPa0NudCA9PSAwKQorCXsKKwkvLwlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBDYXNlIDIuIExpbmtlZCBidXQgbm8gcGFja2V0IHJlY2VpdmVkLlxuIik7CisKKwkJcHJpdi0+YkFkU3dpdGNoZWRDaGVja2luZyA9IGZhbHNlOworCQlTd2l0Y2hBbnRlbm5hKGRldik7CisJfQorCS8vIENhc2UgMy4gRXZhbHVhdGUgbGFzdCBhbnRlbm5hIHN3aXRjaCBhY3Rpb24gYW5kIHVuZG8gaXQgaWYgbmVjZXNzYXJ5LgorCWVsc2UgaWYocHJpdi0+YkFkU3dpdGNoZWRDaGVja2luZyA9PSB0cnVlKQorCXsKKwkvLwlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBDYXNlIDMuIEV2YWx1YXRlIGxhc3QgYW50ZW5uYSBzd2l0Y2ggYWN0aW9uLlxuIik7CisKKwkJcHJpdi0+YkFkU3dpdGNoZWRDaGVja2luZyA9IGZhbHNlOworCisJCS8vIEFkanVzdCBSeCBzaWduYWwgc3RyZW5ndGggdGhyZWFzaG9sZC4KKwkJcHJpdi0+QWRSeFNzVGhyZXNob2xkID0gKHByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCArIHByaXYtPkFkUnhTc0JlZm9yZVN3aXRjaGVkKSAvIDI7CisKKwkJcHJpdi0+QWRSeFNzVGhyZXNob2xkID0gKHByaXYtPkFkUnhTc1RocmVzaG9sZCA+IHByaXYtPkFkTWF4UnhTc1RocmVzaG9sZCkgPworCQkJCQlwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQ6IHByaXYtPkFkUnhTc1RocmVzaG9sZDsKKwkJaWYocHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoIDwgcHJpdi0+QWRSeFNzQmVmb3JlU3dpdGNoZWQpCisJCXsgLy8gUnggc2lnbmFsIHN0cmVuZ3RoIGlzIG5vdCBpbXByb3ZlZCBhZnRlciB3ZSBzd3RpY2hlZCBhbnRlbm5hLiA9PiBTd2ljaCBiYWNrLgorLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBSeCBTaWduYWwgU3RyZW5ndGggaXMgbm90IGltcHJvdmVkLCBDdXJyUnhTczogJWQsIExhc3RSeFNzOiAlZFxuIiwKKy8vCQkJCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCwgcHJpdi0+QWRSeFNzQmVmb3JlU3dpdGNoZWQpOworLy9ieSBhbXkgMDgwMzEyCisJCQkvLyBJbmNyZWFzZSBBbnRlbm5hIERpdmVyc2l0eSBjaGVja2luZyBwZXJpb2QgZHVlIHRvIGJhZCBkZWNpc2lvbi4KKwkJCXByaXYtPkFkQ2hlY2tQZXJpb2QgKj0gMjsKKy8vYnkgYW15IDA4MDMxMgorCQkJLy8gSW5jcmVhc2UgQW50ZW5uYSBEaXZlcnNpdHkgY2hlY2tpbmcgcGVyaW9kLgorCQkJaWYocHJpdi0+QWRDaGVja1BlcmlvZCA+IHByaXYtPkFkTWF4Q2hlY2tQZXJpb2QpCisJCQkJcHJpdi0+QWRDaGVja1BlcmlvZCA9IHByaXYtPkFkTWF4Q2hlY2tQZXJpb2Q7CisKKwkJCS8vIFdyb25nIGRlY2Vpc2lvbiA9PiBzd2l0Y2ggYmFjay4KKwkJCVN3aXRjaEFudGVubmEoZGV2KTsKKwkJfQorCQllbHNlCisJCXsgLy8gUnggU2lnbmFsIFN0cmVuZ3RoIGlzIGltcHJvdmVkLgorLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBSeCBTaWduYWwgU3RyZW5ndGggaXMgaW1wcm92ZWQsIEN1cnJSeFNzOiAlZCwgTGFzdFJ4U3M6ICVkXG4iLAorLy8JCQkJcHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoLCBwcml2LT5BZFJ4U3NCZWZvcmVTd2l0Y2hlZCk7CisKKwkJCS8vIFJlc2V0IEFudGVubmEgRGl2ZXJzaXR5IGNoZWNraW5nIHBlcmlvZCB0byBpdHMgbWluIHZhbHVlLgorCQkJcHJpdi0+QWRDaGVja1BlcmlvZCA9IHByaXYtPkFkTWluQ2hlY2tQZXJpb2Q7CisJCX0KKworLy8JCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IEFkUnhTc1RocmVzaG9sZDogJWQsIEFkQ2hlY2tQZXJpb2Q6ICVkXG4iLAorLy8JCQlwcml2LT5BZFJ4U3NUaHJlc2hvbGQsIHByaXYtPkFkQ2hlY2tQZXJpb2QpOworCX0KKwkvLyBDYXNlIDQuIEV2YWx1YXRlIGlmIHdlIHNoYWxsIHN3aXRjaCBhbnRlbm5hIG5vdy4KKwkvLyBDYXVzZSBUYWJsZSBTcGVlZCBpcyB2ZXJ5IGZhc3QgaW4gVFJDIERlbGwgTGFiLCB3ZSBjaGVjayBpdCBldmVyeSB0aW1lLgorCWVsc2UvLyBpZihwcml2LT5BZFRpY2tDb3VudCA+PSBwcml2LT5BZENoZWNrUGVyaW9kKS8vLWJ5IGFteSAwODAzMTIKKwl7CisvLwkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQ2FzZSA0LiBFdmFsdWF0ZSBpZiB3ZSBzaGFsbCBzd2l0Y2ggYW50ZW5uYSBub3cuXG4iKTsKKworCQlwcml2LT5BZFRpY2tDb3VudCA9IDA7CisKKwkJLy8KKwkJLy8gPFJvZ2VyX05vdGVzPiBXZSBldmFsdWF0ZSBSeE9rIGNvdW50cyBmb3IgZWFjaCBhbnRlbm5hIGZpcnN0IGFuZCB0aGFuCisJCS8vIGV2YWx1YXRlIHNpZ25hbCBzdHJlbmd0aC4KKwkJLy8gVGhlIGZvbGxvd2luZyBvcGVyYXRpb24gY2FuIG92ZXJjb21lIHRoZSBkaXNhYmlsaXR5IG9mIENDQSBvbiBib3RoIHR3byBhbnRlbm5hcworCQkvLyBXaGVuIHNpZ25hbCBzdHJlbmd0aCB3YXMgZXh0cmVtZWx5IGxvdyBvciBoaWdoLgorCQkvLyAyMDA4LjAxLjMwLgorCQkvLworCisJCS8vCisJCS8vIEV2YWx1YXRlIFJ4T2sgY291bnQgZnJvbSBlYWNoIGFudGVubmEgaWYgd2Ugc2hhbGwgc3dpdGNoIGRlZmF1bHQgYW50ZW5uYSBub3cuCisJCS8vIEFkZGVkIGJ5IFJvZ2VyLCAyMDA4LjAyLjIxLgorLy97YnkgYW15IDA4MDMxMgorCQlpZigocHJpdi0+QWRNYWluQW50ZW5uYVJ4T2tDbnQgPCBwcml2LT5BZEF1eEFudGVubmFSeE9rQ250KQorCQkJJiYgKHByaXYtPkN1cnJBbnRlbm5hSW5kZXggPT0gMCkpCisJCXsgLy8gV2Ugc2V0IE1haW4gYW50ZW5uYSBhcyBkZWZhdWx0IGJ1dCBSeE9rIGNvdW50IHdhcyBsZXNzIHRoYW4gQXV4IG9uZXMuCisKKwkvLwkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogTWFpbiBhbnRlbm5hIFJ4T0sgaXMgcG9vciwgQWRNYWluQW50ZW5uYVJ4T2tDbnQ6ICVkLCBBZEF1eEFudGVubmFSeE9rQ250OiAlZFxuIiwKKwkvLwkJCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250LCBwcml2LT5BZEF1eEFudGVubmFSeE9rQ250KTsKKworCQkJLy8gU3dpdGNoIHRvIEF1eCBhbnRlbm5hLgorCQkJU3dpdGNoQW50ZW5uYShkZXYpOworCQkJcHJpdi0+YkhXQWRTd2l0Y2hlZCA9IHRydWU7CisJCX0KKwkJZWxzZSBpZigocHJpdi0+QWRBdXhBbnRlbm5hUnhPa0NudCA8IHByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250KQorCQkJJiYgKHByaXYtPkN1cnJBbnRlbm5hSW5kZXggPT0gMSkpCisJCXsgLy8gV2Ugc2V0IEF1eCBhbnRlbm5hIGFzIGRlZmF1bHQgYnV0IFJ4T2sgY291bnQgd2FzIGxlc3MgdGhhbiBNYWluIG9uZXMuCisKKwkvLwkJcHJpbnRrKCJTd0FudGVubmFEaXZlcnNpdHkoKTogQXV4IGFudGVubmEgUnhPSyBpcyBwb29yLCBBZE1haW5BbnRlbm5hUnhPa0NudDogJWQsIEFkQXV4QW50ZW5uYVJ4T2tDbnQ6ICVkXG4iLAorCS8vCQkJcHJpdi0+QWRNYWluQW50ZW5uYVJ4T2tDbnQsIHByaXYtPkFkQXV4QW50ZW5uYVJ4T2tDbnQpOworCisJCQkvLyBTd2l0Y2ggdG8gTWFpbiBhbnRlbm5hLgorCQkJU3dpdGNoQW50ZW5uYShkZXYpOworCQkJcHJpdi0+YkhXQWRTd2l0Y2hlZCA9IHRydWU7CisJCX0KKwkJZWxzZQorCQl7Ly8gRGVmYXVsdCBhbnRlbm5hIGlzIGJldHRlci4KKworCS8vCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBEZWZhdWx0IGFudGVubmEgaXMgYmV0dGVyLiwgQWRNYWluQW50ZW5uYVJ4T2tDbnQ6ICVkLCBBZEF1eEFudGVubmFSeE9rQ250OiAlZFxuIiwKKwkvLwkJCXByaXYtPkFkTWFpbkFudGVubmFSeE9rQ250LCBwcml2LT5BZEF1eEFudGVubmFSeE9rQ250KTsKKworCQkJLy8gU3RpbGwgbmVlZCB0byBjaGVjayBjdXJyZW50IHNpZ25hbCBzdHJlbmd0aC4KKwkJCXByaXYtPmJIV0FkU3dpdGNoZWQgPSBmYWxzZTsKKwkJfQorCQkvLworCQkvLyA8Um9nZXJfTm90ZXM+IFdlIGV2YWx1YXRlIFJ4IHNpZ25hbCBzdHJlbmd0aCBPTkxZIHdoZW4gZGVmYXVsdCBhbnRlbm5hCisJCS8vIGRpZG4ndCBjaGFuZ2VkIGJ5IEhXIGV2YWx1YXRpb24uCisJCS8vIDIwMDguMDIuMjcuCisJCS8vCisJCS8vIFtUUkMgRGVsbCBMYWJdIFNpZ25hbFN0cmVuZ3RoIGlzIGluYWNjdXJhY3kuIElzYWlhaCAyMDA4LTAzLTA1CisJCS8vIEZvciBleGFtcGxlLCBUaHJvdWdocHV0IG9mIGF1eCBpcyBiZXR0ZXIgdGhhbiBtYWluIGFudGVubmEoYWJvdXQgMTBNIHYucyAyTSksCisJCS8vIGJ1dCBBZFJ4U2lnbmFsU3RyZW5ndGggaXMgbGVzcyB0aGFuIG1haW4uCisJCS8vIE91ciBndWVzcyBpcyB0aGF0IG1haW4gYW50ZW5uYSBoYXZlIGxvd2VyIHRocm91Z2hwdXQgYW5kIGdldCBtYW55IGNoYW5nZQorCQkvLyB0byByZWNlaXZlIG1vcmUgQ0NLIHBhY2tldHMoZXguQmVhY29uKSB3aGljaCBoYXZlIHN0cm9uZ2VyIFNpZ25hbFN0cmVuZ3RoLgorCQkvLworCQlpZiggKCFwcml2LT5iSFdBZFN3aXRjaGVkKSAmJiAoYlN3Q2hlY2tTUykpCisJCXsKKy8vYnkgYW15IDA4MDMxMn0KKwkJLy8gRXZhbHVhdGUgUnggc2lnbmFsIHN0cmVuZ3RoIGlmIHdlIHNoYWxsIHN3aXRjaCBhbnRlbm5hIG5vdy4KKwkJaWYocHJpdi0+QWRSeFNpZ25hbFN0cmVuZ3RoIDwgcHJpdi0+QWRSeFNzVGhyZXNob2xkKQorCQl7IC8vIFJ4IHNpZ25hbCBzdHJlbmd0aCBpcyB3ZWFrID0+IFN3aXRjaCBBbnRlbm5hLgorLy8JCQlwcmludGsoIlN3QW50ZW5uYURpdmVyc2l0eSgpOiBSeCBTaWduYWwgU3RyZW5ndGggaXMgd2VhaywgQ3VyclJ4U3M6ICVkLCBSeFNzVGhyZXNob2xkOiAlZFxuIiwKKy8vCQkJCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCwgcHJpdi0+QWRSeFNzVGhyZXNob2xkKTsKKworCQkJcHJpdi0+QWRSeFNzQmVmb3JlU3dpdGNoZWQgPSBwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGg7CisJCQlwcml2LT5iQWRTd2l0Y2hlZENoZWNraW5nID0gdHJ1ZTsKKworCQkJU3dpdGNoQW50ZW5uYShkZXYpOworCQl9CisJCWVsc2UKKwkJeyAvLyBSeCBzaWduYWwgc3RyZW5ndGggaXMgT0suCisvLwkJCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5KCk6IFJ4IFNpZ25hbCBTdHJlbmd0aCBpcyBPSywgQ3VyclJ4U3M6ICVkLCBSeFNzVGhyZXNob2xkOiAlZFxuIiwKKy8vCQkJCXByaXYtPkFkUnhTaWduYWxTdHJlbmd0aCwgcHJpdi0+QWRSeFNzVGhyZXNob2xkKTsKKworCQkJcHJpdi0+YkFkU3dpdGNoZWRDaGVja2luZyA9IGZhbHNlOworCQkJLy8gSW5jcmVhc2UgUnggc2lnbmFsIHN0cmVuZ3RoIHRocmVhc2hvbGQgaWYgbmVjZXNzYXJ5LgorCQkJaWYoCShwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGggPiAocHJpdi0+QWRSeFNzVGhyZXNob2xkICsgMTApKSAmJiAvLyBTaWduYWwgaXMgbXVjaCBzdHJvbmdlciB0aGFuIGN1cnJlbnQgdGhyZXNob2xkCisJCQkJcHJpdi0+QWRSeFNzVGhyZXNob2xkIDw9IHByaXYtPkFkTWF4UnhTc1RocmVzaG9sZCkgLy8gQ3VycmVudCB0aHJlaG9sZCBpcyBub3QgeWV0IHJlYWNoIHVwcGVyIGxpbWl0LgorCQkJeworCQkJCXByaXYtPkFkUnhTc1RocmVzaG9sZCA9IChwcml2LT5BZFJ4U3NUaHJlc2hvbGQgKyBwcml2LT5BZFJ4U2lnbmFsU3RyZW5ndGgpIC8gMjsKKwkJCQlwcml2LT5BZFJ4U3NUaHJlc2hvbGQgPSAocHJpdi0+QWRSeFNzVGhyZXNob2xkID4gcHJpdi0+QWRNYXhSeFNzVGhyZXNob2xkKSA/CisJCQkJCQkJCQkJCQlwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQ6IHByaXYtPkFkUnhTc1RocmVzaG9sZDsvLytieSBhbXkgMDgwMzEyCisJCQl9CisKKwkJCS8vIFJlZHVjZSBBbnRlbm5hIERpdmVyc2l0eSBjaGVja2luZyBwZXJpb2QgaWYgcG9zc2libGUuCisJCQlpZiggcHJpdi0+QWRDaGVja1BlcmlvZCA+IHByaXYtPkFkTWluQ2hlY2tQZXJpb2QgKQorCQkJeworCQkJCXByaXYtPkFkQ2hlY2tQZXJpb2QgLz0gMjsKKwkJCX0KKwkJfQorCQl9CisJfQorLy9ieSBhbXkgMDgwMzEyCisJLy8gUmVzZXQgYW50ZW5uYSBkaXZlcnNpdHkgUnggcmVsYXRlZCBzdGF0aXN0aWNzLgorCXByaXYtPkFkUnhPa0NudCA9IDA7CisJcHJpdi0+QWRNYWluQW50ZW5uYVJ4T2tDbnQgPSAwOworCXByaXYtPkFkQXV4QW50ZW5uYVJ4T2tDbnQgPSAwOworLy9ieSBhbXkgMDgwMzEyCisKKy8vCXByaXYtPkFkUnhPa0NudCA9IDA7Ly8tYnkgYW15IDA4MDMxMgorCisvLwlwcmludGsoIi1Td0FudGVubmFEaXZlcnNpdHkoKVxuIik7Cit9CisKKy8vCisvLwlEZXNjcmlwdGlvbjoKKy8vCQlSZXR1cm4gVFJVRSBpZiB3ZSBzaGFsbCBwZXJmb3JtIFR4IFBvd2VyIFRyYWNraW5nIE1lY2FobmlzbSwgRkFMU0Ugb3RoZXJ3aXNlLgorLy8KK2Jvb2wKK0NoZWNrVHhQd3JUcmFja2luZygJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CisKKwlpZighcHJpdi0+YlR4UG93ZXJUcmFjaykKKwl7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKy8vbHptIHJlc2VydmVkIDA4MDgyNgorCS8vaWYocHJpdi0+YlNjYW5JblByb2dyZXNzKQorCS8veworCS8vCXJldHVybiBmYWxzZTsKKwkvL30KKworCS8vaWYgODdTRSBpcyBpbiBIaWdoIFBvd2VyICwgZG9uJ3QgZG8gVHggUG93ZXIgVHJhY2tpbmcuIGFza2VkIGJ5IFNEMyBFRC4gMjAwOC0wOC0wOCBJc2FpYWgKKwlpZihwcml2LT5iVG9VcGRhdGVUeFB3cikKKwl7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJVGltZXIgY2FsbGJhY2sgZnVuY3Rpb24gb2YgU1cgQW50ZW5uYSBEaXZlcnNpdHkuCisvLwordm9pZAorU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXJDYWxsYmFjaygKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2CisJKQoreworCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlSVF9SRl9QT1dFUl9TVEFURSBydFN0YXRlOworCisJLy9wcmludGsoIitTd0FudGVubmFEaXZlcnNpdHlUaW1lckNhbGxiYWNrKClcbiIpOworCisJLy8KKwkvLyBXZSBkbyBOT1QgbmVlZCB0byBzd2l0Y2ggYW50ZW5uYSB3aGlsZSBSRiBpcyBvZmYuCisJLy8gMjAwNy4wNS4wOSwgYWRkZWQgYnkgUm9nZXIuCisJLy8KKwlydFN0YXRlID0gcHJpdi0+ZVJGUG93ZXJTdGF0ZTsKKwlkb3sKKwkJaWYgKHJ0U3RhdGUgPT0gZVJmT2ZmKQorCQl7CisvLwkJCXByaW50aygiU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXIgLSBSRiBpcyBPRkYuXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKHJ0U3RhdGUgPT0gZVJmU2xlZXApCisJCXsKKwkJCS8vIERvbid0IGFjY2VzcyBCQi9SRiB1bmRlciBEaXNhYmxlIFBMTCBzaXR1YXRpb24uCisJCQkvL1JUX1RSQUNFKChDT01QX1JGfENPTVBfQU5URU5OQSksIERCR19MT1VELCAoIlN3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soKTogUkYgaXMgU2xlZXAgPT4gc2tpcCBpdFxuIikpOworCQkJYnJlYWs7CisJCX0KKwkJU3dBbnRlbm5hRGl2ZXJzaXR5KGRldik7CisKKwl9d2hpbGUoZmFsc2UpOworCisJaWYocHJpdi0+dXApCisJeworCQlwcml2LT5Td0FudGVubmFEaXZlcnNpdHlUaW1lci5leHBpcmVzID0gamlmZmllcyArIE1TRUNTKEFOVEVOTkFfRElWRVJTSVRZX1RJTUVSX1BFUklPRCk7CisJCWFkZF90aW1lcigmcHJpdi0+U3dBbnRlbm5hRGl2ZXJzaXR5VGltZXIpOworCX0KKworCS8vcHJpbnRrKCItU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXJDYWxsYmFjaygpXG4iKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9kbS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9kbS5oCmluZGV4IDNkZTkyZjAuLmIyNzM2YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmgKQEAgLTEsNDEgKzEsNDEgQEAKLSNpZm5kZWYgUjgxODBfRE1fSCANCi0jZGVmaW5lIFI4MTgwX0RNX0gNCi0NCi0jaW5jbHVkZSAicjgxODAuaCINCi0vLyNpbmNsdWRlICJyODE4MF9ody5oIg0KLS8vI2luY2x1ZGUgInI4MTgwXzkzY3g2LmgiDQotdm9pZCBTd0FudGVubmFEaXZlcnNpdHlSeE9rODE4NShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBTaWduYWxTdHJlbmd0aCk7DQotYm9vbCBTZXRBbnRlbm5hODE4NShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAl1OCB1MWJBbnRlbm5hSW5kZXgpOw0KLWJvb2wgU3dpdGNoQW50ZW5uYSgJc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQotdm9pZCBTd0FudGVubmFEaXZlcnNpdHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldgkpOw0KLXZvaWQgU3dBbnRlbm5hRGl2ZXJzaXR5VGltZXJDYWxsYmFjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCi1ib29sIENoZWNrRGlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KLWJvb2wgQ2hlY2tIaWdoUG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQotI2lmIChMSU5VWF9WRVJTSU9OX0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiw2LDIwKSkNCi12b2lkIHJ0bDgxODBfaHdfZGlnX3dxIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOw0KLSNlbHNlDQotdm9pZCBydGw4MTgwX2h3X2RpZ193cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCi0jZW5kaWYNCi0jaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApKQ0KLXZvaWQgcnRsODE4MF90eF9wd193cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsNCi0jZWxzZQ0KLXZvaWQgcnRsODE4MF90eF9wd193cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCi0jZW5kaWYNCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49S0VSTkVMX1ZFUlNJT04oMiw2LDIwKQ0KLXZvaWQgcnRsODE4MF9yYXRlX2FkYXB0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICogd29yayk7DQotDQotI2Vsc2UNCi12b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KLQ0KLSNlbmRpZg0KLXZvaWQgVHhQd3JUcmFja2luZzg3U0Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQotYm9vbCBDaGVja1R4UHdyVHJhY2tpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PUtFUk5FTF9WRVJTSU9OKDIsNiwyMCkNCi12b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqIHdvcmspOw0KLSNlbHNlDQotdm9pZCBydGw4MTgwX3JhdGVfYWRhcHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCi0jZW5kaWYNCi12b2lkIHRpbWVyX3JhdGVfYWRhcHRpdmUodW5zaWduZWQgbG9uZyBkYXRhKTsNCi0NCi0NCi0jZW5kaWYNCisjaWZuZGVmIFI4MTgwX0RNX0gKKyNkZWZpbmUgUjgxODBfRE1fSAorCisjaW5jbHVkZSAicjgxODAuaCIKKy8vI2luY2x1ZGUgInI4MTgwX2h3LmgiCisvLyNpbmNsdWRlICJyODE4MF85M2N4Ni5oIgordm9pZCBTd0FudGVubmFEaXZlcnNpdHlSeE9rODE4NShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBTaWduYWxTdHJlbmd0aCk7Citib29sIFNldEFudGVubmE4MTg1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCXU4IHUxYkFudGVubmFJbmRleCk7Citib29sIFN3aXRjaEFudGVubmEoCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBTd0FudGVubmFEaXZlcnNpdHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldgkpOwordm9pZCBTd0FudGVubmFEaXZlcnNpdHlUaW1lckNhbGxiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworYm9vbCBDaGVja0RpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2Jvb2wgQ2hlY2tIaWdoUG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApKQordm9pZCBydGw4MTgwX2h3X2RpZ193cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKyNlbHNlCit2b2lkIHJ0bDgxODBfaHdfZGlnX3dxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2VuZGlmCisjaWYgKExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigyLDYsMjApKQordm9pZCBydGw4MTgwX3R4X3B3X3dxIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworI2Vsc2UKK3ZvaWQgcnRsODE4MF90eF9wd193cShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyNlbmRpZgorI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PUtFUk5FTF9WRVJTSU9OKDIsNiwyMCkKK3ZvaWQgcnRsODE4MF9yYXRlX2FkYXB0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICogd29yayk7CisKKyNlbHNlCit2b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisjZW5kaWYKK3ZvaWQgVHhQd3JUcmFja2luZzg3U0Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Citib29sIENoZWNrVHhQd3JUcmFja2luZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPj1LRVJORUxfVkVSU0lPTigyLDYsMjApCit2b2lkIHJ0bDgxODBfcmF0ZV9hZGFwdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqIHdvcmspOworI2Vsc2UKK3ZvaWQgcnRsODE4MF9yYXRlX2FkYXB0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZW5kaWYKK3ZvaWQgdGltZXJfcmF0ZV9hZGFwdGl2ZSh1bnNpZ25lZCBsb25nIGRhdGEpOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF93eC5jCmluZGV4IDhiMzkwMWQuLjk3OWJhMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3d4LmMKQEAgLTEyNzQsOCArMTI3NCw4IEBACiAKIH0KIHN0YXRpYyBpbnQgcjgxODBfd3hfc2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19wYXJhbSAqZGF0YSwgY2hhciAqZXh0cmEpCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCS8vcHJpbnRrKCI9PT09PiVzKClcbiIsIF9fZnVuY19fKTsKIAlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CkBAIC0xMjg1LDcgKzEyODUsNyBAQAogCQlyZXR1cm4gMDsKIAogCWRvd24oJnByaXYtPnd4X3NlbSk7Ci0JcmV0ID0gaWVlZTgwMjExX3d4X3NldF9hdXRoKHByaXYtPmllZWU4MDIxMSwgaW5mbywgZGF0YSwgZXh0cmEpOworCXJldCA9IGllZWU4MDIxMV93eF9zZXRfYXV0aChwcml2LT5pZWVlODAyMTEsIGluZm8sICZ3cnF1LT5wYXJhbSwgZXh0cmEpOwogCXVwKCZwcml2LT53eF9zZW0pOwogCXJldHVybiByZXQ7CiB9CkBAIC0xMzEyLDggKzEzMTIsOCBAQAogCXJldHVybiByZXQ7CiB9CiBzdGF0aWMgaW50IHI4MTgwX3d4X3NldF9nZW5faWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIC8vCXByaW50aygiPT09PT4lcygpLCBsZW46JWRcbiIsIF9fZnVuY19fLCBkYXRhLT5sZW5ndGgpOwogCWludCByZXQ9MDsKQEAgLTEzMjUsNyArMTMyNSw3IEBACiAKICAgICAgICAgZG93bigmcHJpdi0+d3hfc2VtKTsKICNpZiAxCi0gICAgICAgIHJldCA9IGllZWU4MDIxMV93eF9zZXRfZ2VuX2llKHByaXYtPmllZWU4MDIxMSwgZXh0cmEsIGRhdGEtPmxlbmd0aCk7CisgICAgICAgIHJldCA9IGllZWU4MDIxMV93eF9zZXRfZ2VuX2llKHByaXYtPmllZWU4MDIxMSwgZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoKTsKICNlbmRpZgogICAgICAgICB1cCgmcHJpdi0+d3hfc2VtKTsKIAkvL3ByaW50aygiPD09PT09PSVzKCksIHJldDolZFxuIiwgX19mdW5jX18sIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MxYWY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IvS2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK2NvbmZpZyBVU0JfU0VSSUFMX1FVQVRFQ0hfRVNVMTAwCisJdHJpc3RhdGUgIlVTQiBRdWF0ZWNoIEVTVS0xMDAgOCBQb3J0IFNlcmlhbCBEcml2ZXIiCisJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFF1YXRlY2ggRVNVLTEwMCA4IHBvcnQgdXNiIHRvCisJICBzZXJpYWwgYWRhcHRlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2VycXRfdXNiLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZkMWRhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfUVVBVEVDSF9FU1UxMDApCQkrPSBzZXJxdF91c2IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYi9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZWNjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL1RPRE8KQEAgLTAsMCArMSw4IEBACitUaGluZ3MgdG8gZG8gZm9yIHRoaXMgZHJpdmVyIHRvIGdldCBtZXJnZWQgaW50byB0aGUgbWFpbiBwb3J0aW9uIG9mIHRoZQora2VybmVsOgorCS0gY2hlY2twYXRjaCBjbGVhbnVwcworCS0gc3BhcnNlIGNsZWFuCisJLSBwb3J0IHRvIHRoZSB1c2Itc2VyaWFsIGxheWVyIGluc3RlYWQgb2YgZG9pbmcgaXQgYWxsIG9uIGl0cworCSAgb3duLgorCitTZW5kIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2Ivc2VycXRfdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL3NlcnF0X3VzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ODE1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiL3NlcnF0X3VzYi5jCkBAIC0wLDAgKzEsMjc3OSBAQAorLyoKKyAqIFRoaXMgY29kZSB3YXMgZGV2ZWxvcGVkIGZvciB0aGUgUXVhdGVjaCBVU0IgbGluZSBmb3IgbGludXgsIGl0IHVzZWQKKyAqIG11Y2ggb2YgdGhlIGNvZGUgZGV2ZWxvcGVkIGJ5IEdyZWcgS3JvYWgtSGFydG1hbiBmb3IgVVNCIHNlcmlhbCBkZXZpY2VzCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKy8qIFVzZSBvdXIgb3duIGRiZyBtYWNybyAqLworLyogI2RlZmluZSBERUJVR19PTiAqLworLyogI3VuZGVmIGRiZyAqLworI2lmZGVmIERFQlVHX09OCisjZGVmaW5lICBteWRiZyhjb25zdC4uLikgICAgcHJpbnRrKGNvbnN0KQorI2Vsc2UKKyNkZWZpbmUgIG15ZGJnKGNvbnN0Li4uKQorI2VuZGlmCisKKy8qIHBhcml0eSBjaGVjayBmbGFnICovCisjZGVmaW5lIFJFTEVWQU5UX0lGTEFHKGlmbGFnKQkoaWZsYWcgJiAoSUdOQlJLfEJSS0lOVHxJR05QQVJ8UEFSTVJLfElOUENLKSkKKworI2RlZmluZSBTRVJJQUxfVFRZX01BSk9SCSAgICAgICAgMAkvKiBOaWNlIGxlZ2FsIG51bWJlciBub3cgKi8KKyNkZWZpbmUgU0VSSUFMX1RUWV9NSU5PUlMJICAgICAgICAyNTUJLyogbG9hZHMgb2YgZGV2aWNlcyA6KSAqLworI2RlZmluZSBNQVhfTlVNX1BPUlRTCQkgICAgICAgIDgJLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBvcnRzIG9uZSBkZXZpY2UgY2FuIGdyYWIgYXQgb25jZSAqLworI2RlZmluZSBQUkVGVUZGX0xFVkVMX0NPTlNFUlZBVElWRSAgMTI4CisjZGVmaW5lIEFUQ19ESVNBQkxFRCAgICAgICAgICAgICAgICAweDAwCisKKyNkZWZpbmUgUlJfQklUUyAgICAgICAgICAgICAweDAzCS8qIGZvciBjbGVhcmluZyBjbG9jayBiaXRzICovCisjZGVmaW5lIERVUE1PREVfQklUUyAgICAgICAgMHhjMAorCisjZGVmaW5lIFJTMjMyX01PREUgICAgICAgICAgMHgwMAorI2RlZmluZSBSVFNDVFNfVE9fQ09OTkVDVE9SIDB4NDAKKyNkZWZpbmUgQ0xLU19YNCAgICAgICAgICAgICAweDAyCisKKyNkZWZpbmUgTE9PUE1PREVfQklUUyAgICAgICAweDQxCS8qIExPT1AxID0gYjYsIExPT1AwID0gYjAgKFBPUlQgQikgKi8KKyNkZWZpbmUgQUxMX0xPT1BCQUNLICAgICAgICAweDAxCisjZGVmaW5lIE1PREVNX0NUUkwgICAgICAgICAgMHg0MAorCisjZGVmaW5lIFRISVNDSEFSICAgICAgICAgICAgICAgICAgICBkYXRhW2ldCisjZGVmaW5lIE5FWFRDSEFSICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAxXQorI2RlZmluZSBUSElSRENIQVIgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAyXQorI2RlZmluZSBGT1VSVEhDSEFSICAgICAgICAgICAgICAgICAgZGF0YVtpICsgM10KKworLyoKKyAqIFVzZWZ1bCBkZWZpbnRpb25zIGZvciBwb3J0IEEsIFBvcnQgQiBhbmQgUG9ydCBDCisgKi8KKyNkZWZpbmUgRlVMTFBXUkJJVCAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIE5FWFRfQk9BUkRfUE9XRVJfQklUICAgICAgICAweDAwMDAwMDA0CisKKyNkZWZpbmUgU0VSSUFMX0xTUl9PRSAgICAgICAweDAyCisjZGVmaW5lIFNFUklBTF9MU1JfUEUgICAgICAgMHgwNAorI2RlZmluZSBTRVJJQUxfTFNSX0ZFICAgICAgIDB4MDgKKyNkZWZpbmUgU0VSSUFMX0xTUl9CSSAgICAgICAweDEwCisKKyNkZWZpbmUgU0VSSUFMX0xTUl9URU1UICAgICAweDQwCisKKyNkZWZpbmUgIERJVl9MQVRDSF9MUyAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgIFhNVF9IT0xEX1JFR0lTVEVSICAgICAgICAgIDB4MDAKKyNkZWZpbmUgIFhWUl9CVUZGRVJfUkVHSVNURVIgICAgICAgIDB4MDAKKyNkZWZpbmUgIERJVl9MQVRDSF9NUyAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgIEZJRk9fQ09OVFJPTF9SRUdJU1RFUiAgICAgIDB4MDIKKyNkZWZpbmUgIExJTkVfQ09OVFJPTF9SRUdJU1RFUiAgICAgIDB4MDMKKyNkZWZpbmUgIE1PREVNX0NPTlRST0xfUkVHSVNURVIgICAgIDB4MDQKKyNkZWZpbmUgIExJTkVfU1RBVFVTX1JFR0lTVEVSICAgICAgIDB4MDUKKyNkZWZpbmUgIE1PREVNX1NUQVRVU19SRUdJU1RFUiAgICAgIDB4MDYKKworI2RlZmluZSAgU0VSSUFMX01DUl9EVFIgICAgICAgICAgICAgMHgwMQorI2RlZmluZSAgU0VSSUFMX01DUl9SVFMgICAgICAgICAgICAgMHgwMgorI2RlZmluZSAgU0VSSUFMX01DUl9MT09QICAgICAgICAgICAgMHgxMAorCisjZGVmaW5lICBTRVJJQUxfTVNSX0NUUyAgICAgICAgICAgICAweDEwCisjZGVmaW5lICBTRVJJQUxfTVNSX0NEICAgICAgICAgICAgICAweDgwCisjZGVmaW5lICBTRVJJQUxfTVNSX1JJICAgICAgICAgICAgICAweDQwCisjZGVmaW5lICBTRVJJQUxfTVNSX0RTUiAgICAgICAgICAgICAweDIwCisjZGVmaW5lICBTRVJJQUxfTVNSX01BU0sgICAgICAgICAgICAweGYwCisKKyNkZWZpbmUgIFNFUklBTF84X0RBVEEgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgIFNFUklBTF83X0RBVEEgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgIFNFUklBTF82X0RBVEEgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgIFNFUklBTF81X0RBVEEgICAgICAgICAgICAgIDB4MDAKKworI2RlZmluZSAgU0VSSUFMX09ERF9QQVJJVFkgICAgICAgICAgMFgwOAorI2RlZmluZSAgU0VSSUFMX0VWRU5fUEFSSVRZICAgICAgICAgMFgxOAorI2RlZmluZSAgU0VSSUFMX1RXT19TVE9QQiAgICAgICAgICAgMHgwNAorI2RlZmluZSAgU0VSSUFMX09ORV9TVE9QQiAgICAgICAgICAgMHgwMAorCisjZGVmaW5lICBNQVhfQkFVRF9SQVRFICAgICAgICAgICAgICA0NjA4MDAKKyNkZWZpbmUgIE1BWF9CQVVEX1JFTUFJTkRFUiAgICAgICAgIDQ2MDgKKworI2RlZmluZSBRVF9TRVRfR0VUX0RFVklDRSAgICAgICAgICAgMHhjMgorI2RlZmluZSBRVF9PUEVOX0NMT1NFX0NIQU5ORUwgICAgICAgMHhjYQorI2RlZmluZSBRVF9HRVRfU0VUX1BSRUJVRl9UUklHX0xWTCAgMHhjYworI2RlZmluZSBRVF9TRVRfQVRGICAgICAgICAgICAgICAgICAgMHhjZAorI2RlZmluZSBRVF9HRVRfU0VUX1JFR0lTVEVSICAgICAgICAgMHhjMAorI2RlZmluZSBRVF9HRVRfU0VUX1VBUlQgICAgICAgICAgICAgMHhjMQorI2RlZmluZSBRVF9IV19GTE9XX0NPTlRST0xfTUFTSyAgICAgMHhjNQorI2RlZmluZSBRVF9TV19GTE9XX0NPTlRST0xfTUFTSyAgICAgMHhjNgorI2RlZmluZSBRVF9TV19GTE9XX0NPTlRST0xfRElTQUJMRSAgMHhjNworI2RlZmluZSBRVF9CUkVBS19DT05UUk9MICAgICAgICAgICAgMHhjOAorCisjZGVmaW5lIFNFUklBTFFUX1BDSV9JT0NfTUFHSUMgJ2snCisjZGVmaW5lIFNFUklBTFFUX1dSSVRFX1FPUFIgX0lPVyhTRVJJQUxRVF9QQ0lfSU9DX01BR0lDLCAwLCBpbnQpCisjZGVmaW5lIFNFUklBTFFUX1dSSVRFX1FNQ1IgX0lPVyhTRVJJQUxRVF9QQ0lfSU9DX01BR0lDLCAxLCBpbnQpCisjZGVmaW5lIFNFUklBTFFUX0dFVF9OVU1PRl9VTklUUyBfSU9SKFNFUklBTFFUX1BDSV9JT0NfTUFHSUMsIDIsIHZvaWQgKikKKyNkZWZpbmUgU0VSSUFMUVRfR0VUX1RISVNfVU5JVCBfSU9SKFNFUklBTFFUX1BDSV9JT0NfTUFHSUMsIDMsIHZvaWQgKikKKyNkZWZpbmUgU0VSSUFMUVRfUkVBRF9RT1BSIF9JT1IoU0VSSUFMUVRfUENJX0lPQ19NQUdJQywgNCwgaW50KQorI2RlZmluZSBTRVJJQUxRVF9SRUFEX1FNQ1IgX0lPUihTRVJJQUxRVF9QQ0lfSU9DX01BR0lDLCA1LCBpbnQpCisjZGVmaW5lIFNFUklBTFFUX0lTNDIyX0VYVEVOREVEIF9JT1IoU0VSSUFMUVRfUENJX0lPQ19NQUdJQywgNiwgaW50KQkvKiByZXR1cm5zIHN1Y2Nlc3NmdWwgaWYgNDIyIGV4dGVuZGVkICovCisKKyNkZWZpbmUgVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fSU4gICAgMHhjMAorI2RlZmluZSBVU0JEX1RSQU5TRkVSX0RJUkVDVElPTl9PVVQgICAweDQwCisKKyNkZWZpbmUgQVRDX0RJU0FCTEVEICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQVRDX1JUU19FTkFCTEVEICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEFUQ19EVFJfRU5BQkxFRCAgICAgICAgICAgICAgICAgMHgwMQorCisjZGVmaW5lIFJSX0JJVFMgICAgICAgICAgICAgMHgwMwkvKiBmb3IgY2xlYXJpbmcgY2xvY2sgYml0cyAqLworI2RlZmluZSBEVVBNT0RFX0JJVFMgICAgICAgIDB4YzAKKworI2RlZmluZSBGVUxMX0RVUExFWCAgICAgICAgIDB4MDAKKyNkZWZpbmUgSEFMRl9EVVBMRVhfUlRTICAgICAweDQwCisjZGVmaW5lIEhBTEZfRFVQTEVYX0RUUiAgICAgMHg4MAorCisjZGVmaW5lIFFNQ1JfRlVMTF9EVVBMRVggIDB4MDAKKyNkZWZpbmUgUU1DUl9IQUxGX0RVUExFWF9SVFMgMHgwMgorI2RlZmluZSBRTUNSX0hBTEZfRFVQTEVYX0RUUiAweDAxCisjZGVmaW5lIFFNQ1JfSEFMRl9EVVBMRVhfTUFTSyAweDAzCisjZGVmaW5lIFFNQ1JfQ09OTkVDVE9SX01BU0sgMHgxQworCisjZGVmaW5lIFFNQ1JfUlhfRU5fTUFTSyAweDIwCisKKyNkZWZpbmUgUU1DUl9BTExfTE9PUEJBQ0sgICAgMHgxMAorI2RlZmluZSBRTUNSX01PREVNX0NPTlRST0wgICAwWDAwCisKKyNkZWZpbmUgU0VSSUFMUVRfSU9DX01BWE5SIDYKKworc3RydWN0IHVzYl9zZXJpYWxfcG9ydCB7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsJLyogcG9pbnRlciBiYWNrIHRvIHRoZSBvd25lciBvZiB0aGlzIHBvcnQgKi8KKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwkvKiB0aGUgY29yZXNwb25kaW5nIHR0eSBmb3IgdGhpcyBwb3J0ICovCisJdW5zaWduZWQgY2hhciBudW1iZXI7CisJY2hhciBhY3RpdmU7CQkvKiBzb21lb25lIGhhcyB0aGlzIGRldmljZSBvcGVuICovCisKKwl1bnNpZ25lZCBjaGFyICppbnRlcnJ1cHRfaW5fYnVmZmVyOworCXN0cnVjdCB1cmIgKmludGVycnVwdF9pbl91cmI7CisJX191OCBpbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzOworCisJdW5zaWduZWQgY2hhciAqYnVsa19pbl9idWZmZXI7CisJdW5zaWduZWQgY2hhciAqeGZlcl90b190dHlfYnVmZmVyOworCXN0cnVjdCB1cmIgKnJlYWRfdXJiOworCV9fdTggYnVsa19pbl9lbmRwb2ludEFkZHJlc3M7CisKKwl1bnNpZ25lZCBjaGFyICpidWxrX291dF9idWZmZXI7CisJaW50IGJ1bGtfb3V0X3NpemU7CisJc3RydWN0IHVyYiAqd3JpdGVfdXJiOworCV9fdTggYnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzOworCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd3JpdGVfd2FpdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCisJaW50IG9wZW5fY291bnQ7CQkvKiBudW1iZXIgb2YgdGltZXMgdGhpcyBwb3J0IGhhcyBiZWVuIG9wZW5lZCAqLworCXN0cnVjdCBzZW1hcGhvcmUgc2VtOwkvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZSAqLworCisJX191OCBzaGFkb3dMQ1I7CQkvKiBsYXN0IExDUiB2YWx1ZSByZWNlaXZlZCAqLworCV9fdTggc2hhZG93TUNSOwkJLyogbGFzdCBNQ1IgdmFsdWUgcmVjZWl2ZWQgKi8KKwlfX3U4IHNoYWRvd01TUjsJCS8qIGxhc3QgTVNSIHZhbHVlIHJlY2VpdmVkICovCisJX191OCBzaGFkb3dMU1I7CQkvKiBsYXN0IExTUiB2YWx1ZSByZWNlaXZlZCAqLworCWludCBSeEhvbGRpbmc7CisJY2hhciBjbG9zZVBlbmRpbmc7CisJaW50IFJlYWRCdWxrU3RvcHBlZDsKKworCXZvaWQgKnByaXZhdGU7CQkvKiBkYXRhIHByaXZhdGUgdG8gdGhlIHNwZWNpZmljIHBvcnQgKi8KK307CisKK3N0cnVjdCBpZGVudGl0eSB7CisJaW50IGluZGV4OworCWludCBuX2lkZW50aXR5OworfTsKKworc3RydWN0IHVzYl9zZXJpYWwgeworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsJLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdHR5X2RyaXZlciAqdHR5X2RyaXZlcjsJLyogdGhlIHR0eV9kcml2ZXIgZm9yIHRoaXMgZGV2aWNlICovCisJdW5zaWduZWQgY2hhciBtaW5vcjsJLyogdGhlIHN0YXJ0aW5nIG1pbm9yIG51bWJlciBmb3IgdGhpcyBkZXZpY2UgKi8KKwl1bnNpZ25lZCBjaGFyIG51bV9wb3J0czsJLyogdGhlIG51bWJlciBvZiBwb3J0cyB0aGlzIGRldmljZSBoYXMgKi8KKwljaGFyIG51bV9pbnRlcnJ1cHRfaW47CS8qIG51bWJlciBvZiBpbnRlcnJ1cHQgaW4gZW5kcG9pbnRzIHdlIGhhdmUgKi8KKwljaGFyIG51bV9idWxrX2luOwkvKiBudW1iZXIgb2YgYnVsayBpbiBlbmRwb2ludHMgd2UgaGF2ZSAqLworCWNoYXIgbnVtX2J1bGtfb3V0OwkvKiBudW1iZXIgb2YgYnVsayBvdXQgZW5kcG9pbnRzIHdlIGhhdmUgKi8KKwl1bnNpZ25lZCBjaGFyIG51bV9PcGVuQ291bnQ7CS8qIHRoZSBudW1iZXIgb2YgcG9ydHMgdGhpcyBkZXZpY2UgaGFzICovCisKKwlfX3UxNiB2ZW5kb3I7CQkvKiB2ZW5kb3IgaWQgb2YgdGhpcyBkZXZpY2UgKi8KKwlfX3UxNiBwcm9kdWN0OwkJLyogcHJvZHVjdCBpZCBvZiB0aGlzIGRldmljZSAqLworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgcG9ydFtNQVhfTlVNX1BPUlRTXTsKKworCXZvaWQgKnByaXZhdGU7CQkvKiBkYXRhIHByaXZhdGUgdG8gdGhlIHNwZWNpZmljIGRyaXZlciAqLworfTsKKworc3RhdGljIGlubGluZSBpbnQgcG9ydF9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKQoreworCWlmICghcG9ydCkgeworCQlkYmcoIiVzIC0gcG9ydCA9PSBOVUxMIiwgZnVuY3Rpb24pOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghcG9ydC0+c2VyaWFsKSB7CisJCWRiZygiJXMgLSBwb3J0LT5zZXJpYWwgPT0gTlVMTFxuIiwgZnVuY3Rpb24pOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghcG9ydC0+dHR5KSB7CisJCWRiZygiJXMgLSBwb3J0LT50dHkgPT0gTlVMTFxuIiwgZnVuY3Rpb24pOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIElubGluZSBmdW5jdGlvbnMgdG8gY2hlY2sgdGhlIHNhbml0eSBvZiBhIHBvaW50ZXIgdGhhdCBpcyBwYXNzZWQgdG8gdXMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNlcmlhbF9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCQljb25zdCBjaGFyICpmdW5jdGlvbikKK3sKKwlpZiAoIXNlcmlhbCkgeworCQlkYmcoIiVzIC0gc2VyaWFsID09IE5VTExcbiIsIGZ1bmN0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB1c2Jfc2VyaWFsICpnZXRfdXNiX3NlcmlhbChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkJY29uc3QgY2hhciAqZnVuY3Rpb24pCit7CisJLyogaWYgbm8gcG9ydCB3YXMgc3BlY2lmaWVkLCBvciBpdCBmYWlscyBhIHBhcmFub2lhIGNoZWNrICovCisJaWYgKCFwb3J0IHx8CisJICAgIHBvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgZnVuY3Rpb24pIHx8CisJICAgIHNlcmlhbF9wYXJhbm9pYV9jaGVjayhwb3J0LT5zZXJpYWwsIGZ1bmN0aW9uKSkgeworCQkvKiB0aGVuIHNheSB0aGF0IHdlIGRvbnQgaGF2ZSBhIHZhbGlkIHVzYl9zZXJpYWwgdGhpbmcsIHdoaWNoIHdpbGwKKwkJICogZW5kIHVwIGdlbnJhdGluZyAtRU5PREVWIHJldHVybiB2YWx1ZXMgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHBvcnQtPnNlcmlhbDsKK30KKworc3RydWN0IHF0X2dldF9kZXZpY2VfZGF0YSB7CisJX191OCBwb3J0YTsKKwlfX3U4IHBvcnRiOworCV9fdTggcG9ydGM7Cit9OworCitzdHJ1Y3QgcXRfb3Blbl9jaGFubmVsX2RhdGEgeworCV9fdTggbGluZV9zdGF0dXM7CisJX191OCBtb2RlbV9zdGF0dXM7Cit9OworCitzdGF0aWMgdm9pZCBQcm9jZXNzTGluZVN0YXR1cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICAgICAgdW5zaWduZWQgY2hhciBsaW5lX3N0YXR1cyk7CitzdGF0aWMgdm9pZCBQcm9jZXNzTW9kZW1TdGF0dXMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIG1vZGVtX3N0YXR1cyk7CitzdGF0aWMgdm9pZCBQcm9jZXNzUnhDaGFyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIgRGF0YSk7CitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWwgKmdldF9mcmVlX3NlcmlhbChpbnQgbnVtX3BvcnRzLCBpbnQgKm1pbm9yKTsKKworc3RhdGljIGludCBzZXJxdF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKTsKKworc3RhdGljIHZvaWQgc2VycXRfdXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitzdGF0aWMgaW50IGJveF9zZXRfZGV2aWNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkgIHN0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEgKnBEZXZpY2VEYXRhKTsKK3N0YXRpYyBpbnQgYm94X2dldF9kZXZpY2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCSAgc3RydWN0IHF0X2dldF9kZXZpY2VfZGF0YSAqcERldmljZURhdGEpOworc3RhdGljIGludCBzZXJpYWxfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgdm9pZCBzZXJpYWxfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApOworc3RhdGljIGludCBzZXJpYWxfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyBpbnQgc2VyaWFsX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgc2VyaWFsX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkKTsKK3N0YXRpYyBpbnQgc2VyaWFsX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCWludCBjb3VudCk7CisKK3N0YXRpYyB2b2lkIHNlcmlhbF90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK3N0YXRpYyB2b2lkIHNlcmlhbF91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworc3RhdGljIGludCBzZXJpYWxfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKTsKK3N0YXRpYyBpbnQgc2VyaWFsX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKworc3RhdGljIGludCBxdF9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKK3N0YXRpYyBpbnQgQm94U2V0UHJlYnVmZmVyTGV2ZWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CisKK3N0YXRpYyBpbnQgQm94U2V0QVRDKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IG5fTW9kZSk7CitzdGF0aWMgaW50IEJveFNldFVhcnQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgc2hvcnQgVWFydF9OdW1iZXIsCisJCSAgICAgIHVuc2lnbmVkIHNob3J0IGRlZmF1bHRfZGl2aXNvciwKKwkJICAgICAgdW5zaWduZWQgY2hhciBkZWZhdWx0X0xDUik7CisKK3N0YXRpYyBpbnQgQm94T1BlbkNsb3NlQ2hhbm5lbChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBVYXJ0X051bWJlciwKKwkJCSAgICAgICBfX3UxNiBPcGVuQ2xvc2UsCisJCQkgICAgICAgc3RydWN0IHF0X29wZW5fY2hhbm5lbF9kYXRhICpwRGV2aWNlRGF0YSk7CitzdGF0aWMgdm9pZCBxdF9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitzdGF0aWMgaW50IEJveEdldFJlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIHNob3J0IFVhcnRfTnVtYmVyLAorCQkJICB1bnNpZ25lZCBzaG9ydCBSZWdpc3Rlcl9OdW0sIF9fdTggKnBWYWx1ZSk7CitzdGF0aWMgaW50IEJveFNldFJlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIHNob3J0IFVhcnRfTnVtYmVyLAorCQkJICB1bnNpZ25lZCBzaG9ydCBSZWdpc3Rlcl9OdW0sIHVuc2lnbmVkIHNob3J0IFZhbHVlKTsKK3N0YXRpYyB2b2lkIHF0X3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyBpbnQgcXRfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGZyb21fdXNlciwKKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKK3N0YXRpYyB2b2lkIHBvcnRfc29mdGludChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIGludCBxdF93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworc3RhdGljIGludCBxdF9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50IHF0X2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworc3RhdGljIHZvaWQgcXRfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworc3RhdGljIGludCBCb3hTZXRIV19GbG93Q3RybChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBpbnQgVWFydE51bWJlciwKKwkJCSAgICAgaW50IGJTZXQpOworc3RhdGljIGludCBCb3hEaXNhYmxlX1NXX0Zsb3dDdHJsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIF9fdTE2IFVhcnROdW1iZXIpOworc3RhdGljIGludCBFbXVsYXRlV3JpdGVRTUNSX1JlZyhpbnQgaW5kZXgsIHVuc2lnbmVkIHVjX3ZhbHVlKTsKK3N0YXRpYyBpbnQgRW11bGF0ZVJlYWRRTUNSX1JlZyhpbnQgaW5kZXgsIHVuc2lnbmVkICp1Y192YWx1ZSk7CitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWwgKmZpbmRfdGhlX2JveCh1bnNpZ25lZCBpbnQgaW5kZXgpOworc3RhdGljIGludCBpb2N0bF9zZXJpYWxfdXNiKHN0cnVjdCBpbm9kZSAqaW5ub2QsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKKworc3RhdGljIGludCBCb3hTZXRTV19GbG93Q3RybChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBVYXJ0LAorCQkJICAgICB1bnNpZ25lZCBjaGFyIHN0b3BfY2hhciwgdW5zaWduZWQgY2hhciBzdGFydF9jaGFyKTsKK3N0YXRpYyB2b2lkIHF0X3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworCitzdGF0aWMgdm9pZCBwb3J0X3NvZnJpbnQodm9pZCAqcHJpdmF0ZSk7CisKK3N0YXRpYyB2b2lkIHJldHVybl9zZXJpYWwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CisKK3N0YXRpYyBpbnQgc2VyaWFsX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKK3N0YXRpYyBpbnQgc2VyaWFsX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKKworc3RhdGljIGludCBxdF90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSk7CisKK3N0YXRpYyBpbnQgcXRfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpOworCisvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2Mi4xNCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVGltIEdvYmVsaSwgUXVhdGVjaCwgSW5jIgorI2RlZmluZSBEUklWRVJfREVTQyAiUXVhdGVjaCBVU0IgdG8gU2VyaWFsIERyaXZlciIKKworI2RlZmluZQlVU0JfVkVORE9SX0lEX1FVQVRFQ0gJCQkweDA2MWQJLyogUXVhdGVjaCBWSUQgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfU0lOR0xFX1BPUlQJMHhDMDIwCS8qIFNTVTEwMCAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9TSU5HTEVfUE9SVAkweEMwMzAJLyogU1NVMjAwICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTMjMyX0RVQUxfUE9SVAkweEMwNDAJLyogRFNVMTAwICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0RVQUxfUE9SVAkweEMwNTAJLyogRFNVMjAwICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTMjMyX0ZPVVJfUE9SVAkweEMwNjAJLyogUVNVMTAwICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0ZPVVJfUE9SVAkweEMwNzAJLyogUVNVMjAwICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTMjMyX0VJR0hUX1BPUlRfQQkweEMwODAJLyogRVNVMTAwQSAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9FSUdIVF9QT1JUX0IJMHhDMDgxCS8qIEVTVTEwMEIgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfRUlHSFRfUE9SVF9BCTB4QzBBMAkvKiBFU1UyMDBBICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0VJR0hUX1BPUlRfQgkweEMwQTEJLyogRVNVMjAwQiAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl8xNl9QT1JUX0EJMHhDMDkwCS8qIEhTVTEwMEEgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9CCTB4QzA5MQkvKiBIU1UxMDBCICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTMjMyXzE2X1BPUlRfQwkweEMwOTIJLyogSFNVMTAwQyAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl8xNl9QT1JUX0QJMHhDMDkzCS8qIEhTVTEwMEQgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9BCTB4QzBCMAkvKiBIU1UyMDBBICovCisjZGVmaW5lIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQgkweEMwQjEJLyogSFNVMjAwQiAqLworI2RlZmluZSBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl8xNl9QT1JUX0MJMHhDMEIyCS8qIEhTVTIwMEMgKi8KKyNkZWZpbmUgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9ECTB4QzBCMwkvKiBIU1UyMDBEICovCisKKy8qIHRhYmxlIG9mIFF1YXRlY2ggZGV2aWNlcyAgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzZXJxdF90YWJsZVtdID0geworCXtVU0JfREVWSUNFCisJIChVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTMjMyX1NJTkdMRV9QT1JUKX0sCisJe1VTQl9ERVZJQ0UKKwkgKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfU0lOR0xFX1BPUlQpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTMjMyX0RVQUxfUE9SVCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfRFVBTF9QT1JUKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9GT1VSX1BPUlQpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0ZPVVJfUE9SVCl9LAorCXtVU0JfREVWSUNFCisJIChVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTMjMyX0VJR0hUX1BPUlRfQSl9LAorCXtVU0JfREVWSUNFCisJIChVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTMjMyX0VJR0hUX1BPUlRfQil9LAorCXtVU0JfREVWSUNFCisJIChVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0VJR0hUX1BPUlRfQSl9LAorCXtVU0JfREVWSUNFCisJIChVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX0VJR0hUX1BPUlRfQil9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9BKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl8xNl9QT1JUX0IpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTMjMyXzE2X1BPUlRfQyl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfMTZfUE9SVF9EKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl8xNl9QT1JUX0EpfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIERFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQil9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9DKX0sCisJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl8xNl9QT1JUX0QpfSwKKwl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc2VycXRfdGFibGUpOworCitzdGF0aWMgaW50IG1ham9yX251bWJlcjsKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsX3RhYmxlW1NFUklBTF9UVFlfTUlOT1JTXTsJLyogaW5pdGlhbGx5IGFsbCBOVUxMICovCisKKy8qIHRhYmxlIG9mIFF1YXRlY2ggNDIyZGV2aWNlcyAgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2VycXRfNDIyX3RhYmxlW10gPSB7CisJREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfU0lOR0xFX1BPUlQsCisJREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfRFVBTF9QT1JULAorCURFVklDRV9JRF9RVUFURUNIX1JTNDIyX0ZPVVJfUE9SVCwKKwlERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl9FSUdIVF9QT1JUX0EsCisJREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfRUlHSFRfUE9SVF9CLAorCURFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfQSwKKwlERVZJQ0VfSURfUVVBVEVDSF9SUzQyMl8xNl9QT1JUX0IsCisJREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9DLAorCURFVklDRV9JRF9RVUFURUNIX1JTNDIyXzE2X1BPUlRfRCwKKwkwCQkJLyogdGVybWluYXRlIHdpdGggemVybyAqLworfTsKKworLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNlcnF0X3VzYl9kcml2ZXIgPSB7CisJLm5hbWUgPSAicXVhdGVjaC11c2Itc2VyaWFsIiwKKwkucHJvYmUgPSBzZXJxdF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IHNlcnF0X3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IHNlcnF0X3RhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBrdGVybWlvcyAqc2VyaWFsX3Rlcm1pb3NbU0VSSUFMX1RUWV9NSU5PUlNdOworc3RhdGljIHN0cnVjdCBrdGVybWlvcyAqc2VyaWFsX3Rlcm1pb3NfbG9ja2VkW1NFUklBTF9UVFlfTUlOT1JTXTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBzZXJpYWxfb3BzID0geworCS5vcGVuID0gc2VyaWFsX29wZW4sCisJLmNsb3NlID0gc2VyaWFsX2Nsb3NlLAorCS53cml0ZSA9IHNlcmlhbF93cml0ZSwKKwkud3JpdGVfcm9vbSA9IHNlcmlhbF93cml0ZV9yb29tLAorCS5pb2N0bCA9IHNlcmlhbF9pb2N0bCwKKwkuc2V0X3Rlcm1pb3MgPSBzZXJpYWxfc2V0X3Rlcm1pb3MsCisJLnRocm90dGxlID0gc2VyaWFsX3Rocm90dGxlLAorCS51bnRocm90dGxlID0gc2VyaWFsX3VudGhyb3R0bGUsCisJLmJyZWFrX2N0bCA9IHNlcmlhbF9icmVhaywKKwkuY2hhcnNfaW5fYnVmZmVyID0gc2VyaWFsX2NoYXJzX2luX2J1ZmZlciwKKwkudGlvY21zZXQgPSBzZXJpYWxfdGlvY21zZXQsCisJLnRpb2NtZ2V0ID0gc2VyaWFsX3Rpb2NtZ2V0LAorfTsKKworc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyIHNlcmlhbF90dHlfZHJpdmVyID0geworCS5tYWdpYyA9IFRUWV9EUklWRVJfTUFHSUMsCisJLmRyaXZlcl9uYW1lID0gIlF1YXRlY2ggdXNiLXNlcmlhbCIsCisJLm5hbWUgPSAidHR5UVRfVVNCIiwKKwkubWFqb3IgPSBTRVJJQUxfVFRZX01BSk9SLAorCS5taW5vcl9zdGFydCA9IDAsCisJLm51bSA9IFNFUklBTF9UVFlfTUlOT1JTLAorCS50eXBlID0gVFRZX0RSSVZFUl9UWVBFX1NFUklBTCwKKwkuc3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTCwKKwkuZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXIHwgVFRZX0RSSVZFUl9EWU5BTUlDX0RFViwKKworCS50ZXJtaW9zID0gc2VyaWFsX3Rlcm1pb3MsCisJLnRlcm1pb3NfbG9ja2VkID0gc2VyaWFsX3Rlcm1pb3NfbG9ja2VkLAorCS5pbml0X3Rlcm1pb3MuY19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTCwKKworCS5pbml0X3Rlcm1pb3MuY19pZmxhZyA9IElDUk5MIHwgSVhPTiwKKwkuaW5pdF90ZXJtaW9zLmNfb2ZsYWcgPSBPUE9TVCwKKworCS5pbml0X3Rlcm1pb3MuY19sZmxhZyA9CisJICAgIElTSUcgfCBJQ0FOT04gfCBFQ0hPIHwgRUNIT0UgfCBFQ0hPSyB8IEVDSE9DVEwgfCBFQ0hPS0UgfCBJRVhURU4sCit9OworCisvKiBmb3BzIGZvciBwYXJlbnQgZGV2aWNlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZXJpYWxxdF91c2JfZm9wcyA9IHsKKwkuaW9jdGwgPSBpb2N0bF9zZXJpYWxfdXNiLAorfTsKKworIC8qKgorICoJICBzZXJxdF9wcm9iZQorICoKKyAqCUNhbGxlZCBieSB0aGUgdXNiIGNvcmUgd2hlbiBhIG5ldyBkZXZpY2UgaXMgY29ubmVjdGVkIHRoYXQgaXQgdGhpbmtzCisgKgl0aGlzIGRyaXZlciBtaWdodCBiZSBpbnRlcmVzdGVkIGluLgorICoKKyAqLworc3RhdGljIGludCBzZXJxdF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IE5VTEw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqaW50ZXJydXB0X2luX2VuZHBvaW50W01BWF9OVU1fUE9SVFNdOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqYnVsa19pbl9lbmRwb2ludFtNQVhfTlVNX1BPUlRTXTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmJ1bGtfb3V0X2VuZHBvaW50W01BWF9OVU1fUE9SVFNdOworCWludCBtaW5vcjsKKwlpbnQgYnVmZmVyX3NpemU7CisJaW50IGk7CisJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKKwlpbnQgbnVtX2ludGVycnVwdF9pbiA9IDA7CisJaW50IG51bV9idWxrX2luID0gMDsKKwlpbnQgbnVtX2J1bGtfb3V0ID0gMDsKKwlpbnQgbnVtX3BvcnRzOworCXN0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEgRGV2aWNlRGF0YTsKKwlpbnQgc3RhdHVzOworCisJbXlkYmcoIkluICVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBsZXQncyBmaW5kIHRoZSBlbmRwb2ludHMgbmVlZGVkICovCisJLyogY2hlY2sgb3V0IHRoZSBlbmRwb2ludHMgKi8KKwlpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzs7CisJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CisKKwkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAyKSkgeworCQkJLyogd2UgZm91bmQgYSBidWxrIGluIGVuZHBvaW50ICovCisJCQlteWRiZygiZm91bmQgYnVsayBpbiIpOworCQkJYnVsa19pbl9lbmRwb2ludFtudW1fYnVsa19pbl0gPSBlbmRwb2ludDsKKwkJCSsrbnVtX2J1bGtfaW47CisJCX0KKworCQlpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDB4MDApICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAyKSkgeworCQkJLyogd2UgZm91bmQgYSBidWxrIG91dCBlbmRwb2ludCAqLworCQkJbXlkYmcoImZvdW5kIGJ1bGsgb3V0XG4iKTsKKwkJCWJ1bGtfb3V0X2VuZHBvaW50W251bV9idWxrX291dF0gPSBlbmRwb2ludDsKKwkJCSsrbnVtX2J1bGtfb3V0OworCQl9CisKKwkJaWYgKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApICYmCisJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAzKSkgeworCQkJLyogd2UgZm91bmQgYSBpbnRlcnJ1cHQgaW4gZW5kcG9pbnQgKi8KKwkJCW15ZGJnKCJmb3VuZCBpbnRlcnJ1cHQgaW5cbiIpOworCQkJaW50ZXJydXB0X2luX2VuZHBvaW50W251bV9pbnRlcnJ1cHRfaW5dID0gZW5kcG9pbnQ7CisJCQkrK251bV9pbnRlcnJ1cHRfaW47CisJCX0KKwl9CisKKwkvKiBmb3VuZCBhbGwgdGhhdCB3ZSBuZWVkICovCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiUXVhdGVjaCBjb252ZXJ0ZXIgZGV0ZWN0ZWRcbiIpOworCW51bV9wb3J0cyA9IG51bV9idWxrX291dDsKKwlpZiAobnVtX3BvcnRzID09IDApIHsKKwkJZXJyKCJRdWF0ZWNoIGRldmljZSB3aXRoIG5vIGJ1bGsgb3V0LCBub3QgYWxsb3dlZC4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl9CisKKwlzZXJpYWwgPSBnZXRfZnJlZV9zZXJpYWwobnVtX3BvcnRzLCAmbWlub3IpOworCWlmIChzZXJpYWwgPT0gTlVMTCkgeworCQllcnIoIk5vIG1vcmUgZnJlZSBzZXJpYWwgZGV2aWNlcyIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzZXJpYWwtPmRldiA9IGRldjsKKwlzZXJpYWwtPmludGVyZmFjZSA9IGludGVyZmFjZTsKKwlzZXJpYWwtPm1pbm9yID0gbWlub3I7CisJc2VyaWFsLT5udW1fcG9ydHMgPSBudW1fcG9ydHM7CisJc2VyaWFsLT5udW1fYnVsa19pbiA9IG51bV9idWxrX2luOworCXNlcmlhbC0+bnVtX2J1bGtfb3V0ID0gbnVtX2J1bGtfb3V0OworCXNlcmlhbC0+bnVtX2ludGVycnVwdF9pbiA9IG51bV9pbnRlcnJ1cHRfaW47CisJc2VyaWFsLT52ZW5kb3IgPSBkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3I7CisJc2VyaWFsLT5wcm9kdWN0ID0gZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdDsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1bGtfaW47ICsraSkgeworCQllbmRwb2ludCA9IGJ1bGtfaW5fZW5kcG9pbnRbaV07CisJCXBvcnQgPSAmc2VyaWFsLT5wb3J0W2ldOworCQlwb3J0LT5yZWFkX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghcG9ydC0+cmVhZF91cmIpIHsKKwkJCWVycigiTm8gZnJlZSB1cmJzIGF2YWlsYWJsZSIpOworCQkJZ290byBwcm9iZV9lcnJvcjsKKwkJfQorCQlidWZmZXJfc2l6ZSA9IGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZTsKKwkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJcG9ydC0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJcG9ydC0+eGZlcl90b190dHlfYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcG9ydC0+YnVsa19pbl9idWZmZXIpIHsKKwkJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgYnVsa19pbl9idWZmZXIiKTsKKwkJCWdvdG8gcHJvYmVfZXJyb3I7CisJCX0KKwkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIGRldiwKKwkJCQkgIHVzYl9yY3ZidWxrcGlwZShkZXYsCisJCQkJCQkgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgIHBvcnQtPmJ1bGtfaW5fYnVmZmVyLCBidWZmZXJfc2l6ZSwKKwkJCQkgIHF0X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9idWxrX291dDsgKytpKSB7CisJCWVuZHBvaW50ID0gYnVsa19vdXRfZW5kcG9pbnRbaV07CisJCXBvcnQgPSAmc2VyaWFsLT5wb3J0W2ldOworCQlwb3J0LT53cml0ZV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXBvcnQtPndyaXRlX3VyYikgeworCQkJZXJyKCJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJCWJ1ZmZlcl9zaXplID0gZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplOworCQlwb3J0LT5idWxrX291dF9zaXplID0gYnVmZmVyX3NpemU7CisJCXBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQlwb3J0LT5idWxrX291dF9idWZmZXIgPSBrbWFsbG9jKGJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwb3J0LT5idWxrX291dF9idWZmZXIpIHsKKwkJCWVycigiQ291bGRuJ3QgYWxsb2NhdGUgYnVsa19vdXRfYnVmZmVyIik7CisJCQlnb3RvIHByb2JlX2Vycm9yOworCQl9CisJCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgZGV2LAorCQkJCSAgdXNiX3NuZGJ1bGtwaXBlKGRldiwKKwkJCQkJCSAgZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgcG9ydC0+YnVsa19vdXRfYnVmZmVyLCBidWZmZXJfc2l6ZSwKKwkJCQkgIHF0X3dyaXRlX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCisJfQorCisJLyogRm9yIHVzIG51bWIgb2YgYnVsa2luICBvciBvdXQgPSBudW1iZXIgb2YgcG9ydHMgKi8KKwlteWRiZygiJXMgLSBzZXR0aW5nIHVwICVkIHBvcnQgc3RydWN0dXJlcyBmb3IgdGhpcyBkZXZpY2VcbiIsCisJICAgICAgX19mdW5jX18sIG51bV9idWxrX2luKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2J1bGtfaW47ICsraSkgeworCQlwb3J0ID0gJnNlcmlhbC0+cG9ydFtpXTsKKwkJcG9ydC0+bnVtYmVyID0gaSArIHNlcmlhbC0+bWlub3I7CisJCXBvcnQtPnNlcmlhbCA9IHNlcmlhbDsKKworCQlJTklUX1dPUksoJnBvcnQtPndvcmssIHBvcnRfc29mdGludCk7CisKKwkJaW5pdF9NVVRFWCgmcG9ydC0+c2VtKTsKKworCX0KKwlzdGF0dXMgPSBib3hfZ2V0X2RldmljZShzZXJpYWwsICZEZXZpY2VEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiYm94X2dldF9kZXZpY2UgZmFpbGVkIik7CisJCWdvdG8gcHJvYmVfZXJyb3I7CisJfQorCisJbXlkYmcoX19GSUxFX18gIkRldmljZURhdGEucG9ydGIgPSAweCV4IiwgRGV2aWNlRGF0YS5wb3J0Yik7CisKKwlEZXZpY2VEYXRhLnBvcnRiICY9IH5GVUxMUFdSQklUOworCW15ZGJnKF9fRklMRV9fICJDaGFuZ2luZyBEZXZpY2VEYXRhLnBvcnRiIHRvIDB4JXgiLCBEZXZpY2VEYXRhLnBvcnRiKTsKKworCXN0YXR1cyA9IGJveF9zZXRfZGV2aWNlKHNlcmlhbCwgJkRldmljZURhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJib3hfc2V0X2RldmljZSBmYWlsZWRcbiIpOworCQlnb3RvIHByb2JlX2Vycm9yOworCX0KKworCS8qIGluaXRpYWxpemUgdGhlIGRldmZzIG5vZGVzIGZvciB0aGlzIGRldmljZSBhbmQgbGV0IHRoZSB1c2VyIGtub3cgd2hhdCBwb3J0cyB3ZSBhcmUgYm91bmQgdG8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsCisJCQkgIkNvbnZlcnRlciBub3cgYXR0YWNoZWQgdG8gdHR5VVNCJWQgKG9yIHVzYi90dHMvJWQgZm9yIGRldmZzKSIsCisJCQkgc2VyaWFsLT5wb3J0W2ldLm51bWJlciwgc2VyaWFsLT5wb3J0W2ldLm51bWJlcik7CisJfQorCisJLyogdXNiX3NlcmlhbF9jb25zb2xlX2luaXQgKGRlYnVnLCBtaW5vcik7ICovCisKKwkvKioqKioqKioqKipUQUcgYWRkIHN0YXJ0IG5leHQgYm9hcmQgaGVyZSAqKioqLworCXN0YXR1cyA9IGJveF9nZXRfZGV2aWNlKHNlcmlhbCwgJkRldmljZURhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJib3hfZ2V0X2RldmljZSBmYWlsZWQiKTsKKwkJZ290byBwcm9iZV9lcnJvcjsKKwl9CisJLyoKKwkgKiBhbmQgYmVmb3JlIHdlIHBvd2VyIHVwIGxldHMgaW5pdGlhbGlhemUgcGFybmVudCBkZXZpY2Ugc3R1ZmYgaGVyZSBiZWZvcmUKKwkgKiB3ZSBzZXQgdGhtZW0gdmlhIGFueSBvdGhlciBtZXRob2Qgc3VjaCBhcyB0aGUgcHJvcGVydHkgcGFnZXMKKwkgKi8KKwlzd2l0Y2ggKHNlcmlhbC0+cHJvZHVjdCkgeworCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlMyMzJfU0lOR0xFX1BPUlQ6CisJY2FzZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9EVUFMX1BPUlQ6CisJY2FzZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9GT1VSX1BPUlQ6CisJY2FzZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9FSUdIVF9QT1JUX0E6CisJY2FzZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl9FSUdIVF9QT1JUX0I6CisJY2FzZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl8xNl9QT1JUX0E6CisJY2FzZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl8xNl9QT1JUX0I6CisJY2FzZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl8xNl9QT1JUX0M6CisJY2FzZSBERVZJQ0VfSURfUVVBVEVDSF9SUzIzMl8xNl9QT1JUX0Q6CisJCURldmljZURhdGEucG9ydGEgJj0gfihSUl9CSVRTIHwgRFVQTU9ERV9CSVRTKTsKKwkJRGV2aWNlRGF0YS5wb3J0YSB8PSBDTEtTX1g0OworCQlEZXZpY2VEYXRhLnBvcnRiICY9IH4oTE9PUE1PREVfQklUUyk7CisJCURldmljZURhdGEucG9ydGIgfD0gUlMyMzJfTU9ERTsKKwkJYnJlYWs7CisKKwljYXNlIERFVklDRV9JRF9RVUFURUNIX1JTNDIyX1NJTkdMRV9QT1JUOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfRFVBTF9QT1JUOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfRk9VUl9QT1JUOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfRUlHSFRfUE9SVF9BOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfRUlHSFRfUE9SVF9COgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9BOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9COgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9DOgorCWNhc2UgREVWSUNFX0lEX1FVQVRFQ0hfUlM0MjJfMTZfUE9SVF9EOgorCQlEZXZpY2VEYXRhLnBvcnRhICY9IH4oUlJfQklUUyB8IERVUE1PREVfQklUUyk7CisJCURldmljZURhdGEucG9ydGEgfD0gQ0xLU19YNDsKKwkJRGV2aWNlRGF0YS5wb3J0YiAmPSB+KExPT1BNT0RFX0JJVFMpOworCQlEZXZpY2VEYXRhLnBvcnRiIHw9IEFMTF9MT09QQkFDSzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRGV2aWNlRGF0YS5wb3J0YSAmPSB+KFJSX0JJVFMgfCBEVVBNT0RFX0JJVFMpOworCQlEZXZpY2VEYXRhLnBvcnRhIHw9IENMS1NfWDQ7CisJCURldmljZURhdGEucG9ydGIgJj0gfihMT09QTU9ERV9CSVRTKTsKKwkJRGV2aWNlRGF0YS5wb3J0YiB8PSBSUzIzMl9NT0RFOworCQlicmVhazsKKworCX0KKwlzdGF0dXMgPSBCb3hTZXRQcmVidWZmZXJMZXZlbChzZXJpYWwpOwkvKiBzZXRzIHRvIGRlZmF1bHQgdmF1ZSAqLworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJCb3hTZXRQcmVidWZmZXJMZXZlbCBmYWlsZWRcbiIpOworCQlnb3RvIHByb2JlX2Vycm9yOworCX0KKworCXN0YXR1cyA9IEJveFNldEFUQyhzZXJpYWwsIEFUQ19ESVNBQkxFRCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbXlkYmcoX19GSUxFX18gIkJveFNldEFUQyBmYWlsZWRcbiIpOworCQlnb3RvIHByb2JlX2Vycm9yOworCX0KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlteWRiZyhfX0ZJTEVfXyAiRGV2aWNlRGF0YS5wb3J0YiA9IDB4JXgiLCBEZXZpY2VEYXRhLnBvcnRiKTsKKworCURldmljZURhdGEucG9ydGIgfD0gTkVYVF9CT0FSRF9QT1dFUl9CSVQ7CisJbXlkYmcoX19GSUxFX18gIkNoYW5naW5nIERldmljZURhdGEucG9ydGIgdG8gMHgleCIsIERldmljZURhdGEucG9ydGIpOworCisJc3RhdHVzID0gYm94X3NldF9kZXZpY2Uoc2VyaWFsLCAmRGV2aWNlRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbXlkYmcoX19GSUxFX18gImJveF9zZXRfZGV2aWNlIGZhaWxlZFxuIik7CisJCWdvdG8gcHJvYmVfZXJyb3I7CisJfQorCisJbXlkYmcoIkV4aXQgU3VjY2VzcyAlc1xuIiwgX19mdW5jX18pOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHNlcmlhbCk7CisJcmV0dXJuIDA7CisKK3Byb2JlX2Vycm9yOgorCisJZm9yIChpID0gMDsgaSA8IG51bV9idWxrX2luOyArK2kpIHsKKwkJcG9ydCA9ICZzZXJpYWwtPnBvcnRbaV07CisJCXVzYl9mcmVlX3VyYihwb3J0LT5yZWFkX3VyYik7CisJCWtmcmVlKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG51bV9idWxrX291dDsgKytpKSB7CisJCXBvcnQgPSAmc2VyaWFsLT5wb3J0W2ldOworCQl1c2JfZnJlZV91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwkJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKKwkJa2ZyZWUocG9ydC0+eGZlcl90b190dHlfYnVmZmVyKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IG51bV9pbnRlcnJ1cHRfaW47ICsraSkgeworCQlwb3J0ID0gJnNlcmlhbC0+cG9ydFtpXTsKKwkJdXNiX2ZyZWVfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCQlrZnJlZShwb3J0LT5pbnRlcnJ1cHRfaW5fYnVmZmVyKTsKKwl9CisKKwkvKiByZXR1cm4gdGhlIG1pbm9yIHJhbmdlIHRoYXQgdGhpcyBkZXZpY2UgaGFkICovCisJcmV0dXJuX3NlcmlhbChzZXJpYWwpOworCW15ZGJnKCJFeGl0IGZhaWwgJXNcbiIsIF9fZnVuY19fKTsKKworCS8qIGZyZWUgdXAgYW55IG1lbW9yeSB0aGF0IHdlIGFsbG9jYXRlZCAqLworCWtmcmVlKHNlcmlhbCk7CisJcmV0dXJuIC1FSU87Cit9CisKKy8qCisgKiByZXR1cm5zIHRoZSBzZXJpYWxfdGFibGUgYXJyYXkgcG9pbnRlcnMgdGhhdCBhcmUgdGFrZW4KKyAqIHVwIGluIGNvbnNlY3V0aXZlIHBvc2l0aW9ucyBmb3IgZWFjaCBwb3J0IHRvIGEgY29tbW9uIHVzYl9zZXJpYWwgc3RydWN0dXJlCisgKiBiYWNrIHRvIE5VTEwKKyAqLworc3RhdGljIHZvaWQgcmV0dXJuX3NlcmlhbChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpOworCisJbXlkYmcoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoc2VyaWFsID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKQorCQlzZXJpYWxfdGFibGVbc2VyaWFsLT5taW5vciArIGldID0gTlVMTDsKKworCXJldHVybjsKK30KKworLyoKKyAqIEZpbmRzIHRoZSBmaXJzdCBsb2NhdGlvIGludCB0aGUgc2VyaWFsX3RhYmxlIGFycmF5IHdoZXJlIGl0IGNhbiBmaXQKKyAqIG51bV9wb3J0cyBudW1iZXIgb2YgY29uc2VjdXRpdmUgcG9pbnRzIHRvIGEgY29tbW9uIHVzYl9zZXJpYWwKKyAqIHN0cnVjdHVyZSxhbGxvY2F0ZXMgYSBzdHVjdHVyZSBwb2ludHMgdG8gaXQgaW4gYWxsIHRoZSBzdHJ1Y3R1cmVzLCBhbmQKKyAqIHJldHVybnMgdGhlIGluZGV4IHRvIHRoZSBmaXJzdCBsb2NhdGlvbiBpbiB0aGUgYXJyYXkgaW4gdGhlICJtaW5vciIKKyAqIHZhcmlhYmxlLgorICovCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWwgKmdldF9mcmVlX3NlcmlhbChpbnQgbnVtX3BvcnRzLCBpbnQgKm1pbm9yKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBOVUxMOworCWludCBpLCBqOworCWludCBnb29kX3Nwb3Q7CisKKwlteWRiZygiJXMgJWRcbiIsIF9fZnVuY19fLCBudW1fcG9ydHMpOworCisJKm1pbm9yID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgU0VSSUFMX1RUWV9NSU5PUlM7ICsraSkgeworCQlpZiAoc2VyaWFsX3RhYmxlW2ldKQorCQkJY29udGludWU7CisKKwkJZ29vZF9zcG90ID0gMTsKKwkJLyoKKwkJICogZmluZCBhIHNwb3QgaW4gdGhlIGFycmF5IHdoZXJlIHlvdSBjYW4gZml0IGNvbnNlY3V0aXZlCisJCSAqIHBvc2l0aW9ucyB0byBwdXQgdGhlIHBvaW50ZXJzIHRvIHRoZSB1c2Jfc2VyYWlsIGFsbG9jYXRlZAorCQkgKiBzdHJ1Y3R1cmUgZm9yIGFsbCB0aGUgbWlub3IgbnVtYmVycyAoaWUuIHBvcnRzKQorCQkgKi8KKwkJZm9yIChqID0gMTsgaiA8PSBudW1fcG9ydHMgLSAxOyArK2opCisJCQlpZiAoc2VyaWFsX3RhYmxlW2kgKyBqXSkKKwkJCQlnb29kX3Nwb3QgPSAwOworCQlpZiAoZ29vZF9zcG90ID09IDApCisJCQljb250aW51ZTsKKworCQlzZXJpYWwgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3NlcmlhbCksIEdGUF9LRVJORUwpOworCQlpZiAoIXNlcmlhbCkgeworCQkJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQltZW1zZXQoc2VyaWFsLCAwLCBzaXplb2Yoc3RydWN0IHVzYl9zZXJpYWwpKTsKKwkJc2VyaWFsX3RhYmxlW2ldID0gc2VyaWFsOworCQkqbWlub3IgPSBpOworCQlteWRiZygiJXMgLSBtaW5vciBiYXNlID0gJWRcbiIsIF9fZnVuY19fLCAqbWlub3IpOworCisJCS8qCisJCSAqIGNvcHkgaW4gdGhlIHBvaW50ZXIgaW50byB0aGUgYXJyYXkgc3RhcnRpbmcgYSB0aGUgKm1pbm9yCisJCSAqIHBvc2l0aW9uIG1pbm9yIGlzIHRoZSBpbmRleCBpbnRvIHRoZSBhcnJheS4KKwkJICovCisJCWZvciAoaSA9ICptaW5vciArIDE7CisJCSAgICAgKGkgPCAoKm1pbm9yICsgbnVtX3BvcnRzKSkgJiYgKGkgPCBTRVJJQUxfVFRZX01JTk9SUyk7ICsraSkKKwkJCXNlcmlhbF90YWJsZVtpXSA9IHNlcmlhbDsKKwkJcmV0dXJuIHNlcmlhbDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZmxpcF90aGF0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIF9fdTE2IFVhcnROdW1iZXIsCisJCSAgICAgc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCXR0eV9zY2hlZHVsZV9mbGlwKHR0eSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIEhhbmRsZXMgcHJvY2Vzc2luZyBhbmQgbW92aW5nIGRhdGEgdG8gdGhlIHR0eSBsYXllciAqLworc3RhdGljIHZvaWQgcG9ydF9zb2ZyaW50KHZvaWQgKnByaXZhdGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopcHJpdmF0ZTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJdW5zaWduZWQgaW50IFVhcnROdW1iZXI7CisJc3RydWN0IHVyYiAqdXJiID0gcG9ydC0+cmVhZF91cmI7CisJdW5zaWduZWQgaW50IFJ4Q291bnQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CisJaW50IGksIHJlc3VsdDsKKwlpbnQgZmxhZywgZmxhZ19kYXRhOworCisJLyogVWFydE51bWJlciA9IE1JTk9SKHBvcnQtPnR0eS0+ZGV2aWNlKSAtIHNlcmlhbC0+bWlub3I7ICovCisJVWFydE51bWJlciA9IHR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJbXlkYmcoIiVzIC0gcG9ydC0+UnhIb2xkaW5nID0gJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5SeEhvbGRpbmcpOworCisJaWYgKHBvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19mdW5jX18pICE9IDApIHsKKwkJbXlkYmcoIiVzIC0gcG9ydF9wYXJhbm9pYV9jaGVjaywgZXhpdGluZ1xuIiwgX19mdW5jX18pOworCQlwb3J0LT5SZWFkQnVsa1N0b3BwZWQgPSAxOworCQlyZXR1cm47CisJfQorCisJaWYgKCFzZXJpYWwpIHsKKwkJbXlkYmcoIiVzIC0gYmFkIHNlcmlhbCBwb2ludGVyLCBleGl0aW5nXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJaWYgKHBvcnQtPmNsb3NlUGVuZGluZyA9PSAxKSB7CisJCS8qIFdlcmUgY2xvc2luZyAsIHN0b3AgcmVhZGluZyAqLworCQlteWRiZygiJXMgLSAocG9ydC0+Y2xvc2VwZW5kaW5nID09IDFcbiIsIF9fZnVuY19fKTsKKwkJcG9ydC0+UmVhZEJ1bGtTdG9wcGVkID0gMTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogUnhIb2xkaW5nIGlzIGFzc2VydGVkIGJ5IHRocm90dGxlLCBpZiB3ZSBhc3NlcnQgaXQsIHdlJ3JlIG5vdAorCSAqIHJlY2VpdmluZyBhbnkgbW9yZSBjaGFyYWN0ZXJzIGFuZCBsZXQgdGhlIGJveCBoYW5kbGUgdGhlIGZsb3cKKwkgKiBjb250cm9sCisJICovCisJaWYgKHBvcnQtPlJ4SG9sZGluZyA9PSAxKSB7CisJCXBvcnQtPlJlYWRCdWxrU3RvcHBlZCA9IDE7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJcG9ydC0+UmVhZEJ1bGtTdG9wcGVkID0gMTsKKworCQlteWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkgICAgICBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJdHR5ID0gcG9ydC0+dHR5OworCW15ZGJnKCIlcyAtIHBvcnQgJWQsIHR0eSA9MHglcFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgdHR5KTsKKworCWlmICh0dHkgJiYgUnhDb3VudCkgeworCQlmbGFnX2RhdGEgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgUnhDb3VudDsgKytpKSB7CisJCQkvKiBMb29rIGFoZWFkIGNvZGUgaGVyZSAqLworCQkJaWYgKChpIDw9IChSeENvdW50IC0gMykpICYmIChUSElTQ0hBUiA9PSAweDFiKQorCQkJICAgICYmIChORVhUQ0hBUiA9PSAweDFiKSkgeworCQkJCWZsYWcgPSAwOworCQkJCXN3aXRjaCAoVEhJUkRDSEFSKSB7CisJCQkJY2FzZSAweDAwOgorCQkJCQkvKiBMaW5lIHN0YXR1cyBjaGFuZ2UgNHRoIGJ5dGUgbXVzdCBmb2xsb3cgKi8KKwkJCQkJaWYgKGkgPiAoUnhDb3VudCAtIDQpKSB7CisJCQkJCQlteWRiZygiSWxsZWdhbCBlc2NhcGUgc2VxdWVuY2VzIGluIHJlY2VpdmVkIGRhdGFcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJUHJvY2Vzc0xpbmVTdGF0dXMocG9ydCwgRk9VUlRIQ0hBUik7CisJCQkJCWkgKz0gMzsKKwkJCQkJZmxhZyA9IDE7CisJCQkJCWJyZWFrOworCisJCQkJY2FzZSAweDAxOgorCQkJCQkvKiBNb2RlbSBzdGF0dXMgc3RhdHVzIGNoYW5nZSA0dGggYnl0ZSBtdXN0IGZvbGxvdyAqLworCQkJCQlteWRiZygiTW9kZW0gc3RhdHVzIHN0YXR1cy4gXG4iKTsKKwkJCQkJaWYgKGkgPiAoUnhDb3VudCAtIDQpKSB7CisJCQkJCQlteWRiZworCQkJCQkJICAgICgiSWxsZWdhbCBlc2NhcGUgc2VxdWVuY2VzIGluIHJlY2VpdmVkIGRhdGFcbiIpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJUHJvY2Vzc01vZGVtU3RhdHVzKHBvcnQsIEZPVVJUSENIQVIpOworCQkJCQlpICs9IDM7CisJCQkJCWZsYWcgPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlIDB4ZmY6CisJCQkJCW15ZGJnKCJObyBzdGF0dXMgc2VxdWVuY2UuIFxuIik7CisKKwkJCQkJUHJvY2Vzc1J4Q2hhcihwb3J0LCBUSElTQ0hBUik7CisJCQkJCVByb2Nlc3NSeENoYXIocG9ydCwgTkVYVENIQVIpOworCQkJCQlpICs9IDI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoZmxhZyA9PSAxKQorCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIDEpOworCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCAoZGF0YSArIGkpLCAxKTsKKwkJCX0KKworCQl9CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJfQorCisJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLworCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKKwkJCSAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgIHF0X3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCW15ZGJnKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwKKwkJICAgICAgX19mdW5jX18sIHJlc3VsdCk7CisJZWxzZSB7CisJCWlmICh0dHkgJiYgUnhDb3VudCkKKwkJCWZsaXBfdGhhdCh0dHksIFVhcnROdW1iZXIsIHNlcmlhbCk7CisJfQorCisJcmV0dXJuOworCit9CisKK3N0YXRpYyB2b2lkIHF0X3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJcG9ydC0+UmVhZEJ1bGtTdG9wcGVkID0gMTsKKwkJbXlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCisJCSAgICAgIF9fZnVuY19fLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlwb3J0X3NvZnJpbnQoKHZvaWQgKilwb3J0KTsKKwlzY2hlZHVsZV93b3JrKCZwb3J0LT53b3JrKTsKK30KKworc3RhdGljIHZvaWQgUHJvY2Vzc1J4Q2hhcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBjaGFyIERhdGEpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBwb3J0LT5yZWFkX3VyYjsKKwl0dHkgPSBwb3J0LT50dHk7CisJLyogaWYgd2UgaW5zZXJ0IG1vcmUgdGhhbiBUVFlfRkxJUEJVRl9TSVpFIGNoYXJhY3RlcnMsIHdlIGRyb3AgdGhlbS4gKi8KKworCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgMSk7CisJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCAmRGF0YSwgMSk7CisJCS8qIHR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7ICovCisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBQcm9jZXNzTGluZVN0YXR1cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICAgICAgdW5zaWduZWQgY2hhciBsaW5lX3N0YXR1cykKK3sKKworCXBvcnQtPnNoYWRvd0xTUiA9CisJICAgIGxpbmVfc3RhdHVzICYgKFNFUklBTF9MU1JfT0UgfCBTRVJJQUxfTFNSX1BFIHwgU0VSSUFMX0xTUl9GRSB8CisJCQkgICBTRVJJQUxfTFNSX0JJKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIFByb2Nlc3NNb2RlbVN0YXR1cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgbW9kZW1fc3RhdHVzKQoreworCisJcG9ydC0+c2hhZG93TVNSID0gbW9kZW1fc3RhdHVzOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+d2FpdCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzZXJxdF91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJLyogc3RydWN0IGRldmljZSAqZGV2ID0gJmludGVyZmFjZS0+ZGV2OyAqLworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJaW50IGk7CisKKwlteWRiZygiJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAoc2VyaWFsKSB7CisKKwkJc2VyaWFsLT5kZXYgPSBOVUxMOworCisJCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKQorCQkJc2VyaWFsLT5wb3J0W2ldLm9wZW5fY291bnQgPSAwOworCisJCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9idWxrX2luOyArK2kpIHsKKwkJCXBvcnQgPSAmc2VyaWFsLT5wb3J0W2ldOworCQkJdXNiX3VubGlua191cmIocG9ydC0+cmVhZF91cmIpOworCQkJdXNiX2ZyZWVfdXJiKHBvcnQtPnJlYWRfdXJiKTsKKwkJCWtmcmVlKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fYnVsa19vdXQ7ICsraSkgeworCQkJcG9ydCA9ICZzZXJpYWwtPnBvcnRbaV07CisJCQl1c2JfdW5saW5rX3VyYihwb3J0LT53cml0ZV91cmIpOworCQkJdXNiX2ZyZWVfdXJiKHBvcnQtPndyaXRlX3VyYik7CisJCQlrZnJlZShwb3J0LT5idWxrX291dF9idWZmZXIpOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9pbnRlcnJ1cHRfaW47ICsraSkgeworCQkJcG9ydCA9ICZzZXJpYWwtPnBvcnRbaV07CisJCQl1c2JfdW5saW5rX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJCXVzYl9mcmVlX3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwkJCWtmcmVlKHBvcnQtPmludGVycnVwdF9pbl9idWZmZXIpOworCX0KKworCQkvKiByZXR1cm4gdGhlIG1pbm9yIHJhbmdlIHRoYXQgdGhpcyBkZXZpY2UgaGFkICovCisJCXJldHVybl9zZXJpYWwoc2VyaWFsKTsKKworCQkvKiBmcmVlIHVwIGFueSBtZW1vcnkgdGhhdCB3ZSBhbGxvY2F0ZWQgKi8KKwkJa2ZyZWUoc2VyaWFsKTsKKworCX0gZWxzZSB7CisJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgImRldmljZSBkaXNjb25uZWN0ZWQiKTsKKwl9CisKK30KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICpnZXRfc2VyaWFsX2J5X21pbm9yKHVuc2lnbmVkIGludCBtaW5vcikKK3sKKwlyZXR1cm4gc2VyaWFsX3RhYmxlW21pbm9yXTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEcml2ZXIgdHR5IGludGVyZmFjZSBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgc2VyaWFsX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXVuc2lnbmVkIGludCBwb3J0TnVtYmVyOworCWludCByZXR2YWwgPSAwOworCisJbXlkYmcoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBwb2ludGVyIGluY2FzZSBzb21ldGhpbmcgZmFpbHMgKi8KKwl0dHktPmRyaXZlcl9kYXRhID0gTlVMTDsKKworCS8qIGdldCB0aGUgc2VyaWFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0dHkgcG9pbnRlciAqLworCS8qIHNlcmlhbCA9IGdldF9zZXJpYWxfYnlfbWlub3IgKE1JTk9SKHR0eS0+ZGV2aWNlKSk7ICovCisKKwkvKiBnZXQgdGhlIHNlcmlhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHR5IHBvaW50ZXIgKi8KKwlzZXJpYWwgPSBnZXRfc2VyaWFsX2J5X21pbm9yKHR0eS0+aW5kZXgpOworCisJaWYgKHNlcmlhbF9wYXJhbm9pYV9jaGVjayhzZXJpYWwsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBzZXQgdXAgb3VyIHBvcnQgc3RydWN0dXJlIG1ha2luZyB0aGUgdHR5IGRyaXZlciByZW1lbWJlciBvdXIgcG9ydCBvYmplY3QsIGFuZCB1cyBpdCAqLworCXBvcnROdW1iZXIgPSB0dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKwlwb3J0ID0gJnNlcmlhbC0+cG9ydFtwb3J0TnVtYmVyXTsKKwl0dHktPmRyaXZlcl9kYXRhID0gcG9ydDsKKworCWRvd24oJnBvcnQtPnNlbSk7CisJcG9ydC0+dHR5ID0gdHR5OworCisJKytwb3J0LT5vcGVuX2NvdW50OworCWlmIChwb3J0LT5vcGVuX2NvdW50ID09IDEpIHsKKwkJcG9ydC0+Y2xvc2VQZW5kaW5nID0gMDsKKwkJbXlkYmcoIiVzIHBvcnQtPmNsb3NlcGVuZGluZyA9IDBcbiIsIF9fZnVuY19fKTsKKworCQlwb3J0LT5SeEhvbGRpbmcgPSAwOworCQlteWRiZygiJXMgcG9ydC0+UnhIb2xkaW5nID0gMFxuIiwgX19mdW5jX18pOworCisJCXJldHZhbCA9IHF0X29wZW4ocG9ydCwgZmlscCk7CisJfQorCisJaWYgKHJldHZhbCkKKwkJcG9ydC0+b3Blbl9jb3VudCA9IDA7CisJbXlkYmcoIiVzIHJldHVybmluZyBwb3J0LT5jbG9zZVBlbmRpbmcgID0gJWRcbiIsIF9fZnVuY19fLAorCSAgICAgIHBvcnQtPmNsb3NlUGVuZGluZyk7CisKKwl1cCgmcG9ydC0+c2VtKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqZGV2aWNlJ3Mgc3BlY2lmaWMgZHJpdmVyIGZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBxdF9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJaW50IHJlc3VsdCA9IDA7CisJdW5zaWduZWQgaW50IFVhcnROdW1iZXI7CisJc3RydWN0IHF0X2dldF9kZXZpY2VfZGF0YSBEZXZpY2VEYXRhOworCXN0cnVjdCBxdF9vcGVuX2NoYW5uZWxfZGF0YSBDaGFubmVsRGF0YTsKKwl1bnNpZ25lZCBzaG9ydCBkZWZhdWx0X2Rpdmlzb3IgPSAweDMwOwkJLyogZ2l2ZXMgOTYwMCBiYXVkIHJhdGUgKi8KKwl1bnNpZ25lZCBjaGFyIGRlZmF1bHRfTENSID0gU0VSSUFMXzhfREFUQTsJLyogOCwgbm9uZSAsIDEgKi8KKwlpbnQgc3RhdHVzID0gMDsKKworCWlmIChwb3J0X3BhcmFub2lhX2NoZWNrKHBvcnQsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIGZvcmNlIGxvd19sYXRlbmN5IG9uIHNvIHRoYXQgb3VyIHR0eV9wdXNoIGFjdHVhbGx5IGZvcmNlcyB0aGUgZGF0YSB0aHJvdWdoLAorCSAgIG90aGVyd2lzZSBpdCBpcyBzY2hlZHVsZWQsIGFuZCB3aXRoIGhpZ2ggZGF0YSByYXRlcyAobGlrZSB3aXRoIE9IQ0kpIGRhdGEKKwkgICBjYW4gZ2V0IGxvc3QuICovCisJaWYgKHBvcnQtPnR0eSkKKwkJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDA7CisKKwlVYXJ0TnVtYmVyID0gcG9ydC0+dHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisKKwlzdGF0dXMgPSBib3hfZ2V0X2RldmljZShzZXJpYWwsICZEZXZpY2VEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiYm94X2dldF9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJc2VyaWFsLT5udW1fT3BlbkNvdW50Kys7CisJbXlkYmcoIiVzIHNlcmlhbC0+bnVtX09wZW5Db3VudCAgPSAlZFxuIiwgX19mdW5jX18sCisJICAgICAgc2VyaWFsLT5udW1fT3BlbkNvdW50KTsKKwkvKiBPcGVuIHVhcnQgY2hhbm5lbCAqLworCisJLyogUG9ydCBzcGVjaWZpYyBzZXR1cHMgKi8KKwlzdGF0dXMgPSBCb3hPUGVuQ2xvc2VDaGFubmVsKHNlcmlhbCwgVWFydE51bWJlciwgMSwgJkNoYW5uZWxEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlteWRiZyhfX0ZJTEVfXyAiQm94T1BlbkNsb3NlQ2hhbm5lbCBmYWlsZWRcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwlteWRiZyhfX0ZJTEVfXyAiQm94T1BlbkNsb3NlQ2hhbm5lbCBjb21wbGV0ZWQuXG4iKTsKKworCXBvcnQtPnNoYWRvd0xTUiA9IENoYW5uZWxEYXRhLmxpbmVfc3RhdHVzICYKKwkgICAgKFNFUklBTF9MU1JfT0UgfCBTRVJJQUxfTFNSX1BFIHwgU0VSSUFMX0xTUl9GRSB8IFNFUklBTF9MU1JfQkkpOworCisJcG9ydC0+c2hhZG93TVNSID0gQ2hhbm5lbERhdGEubW9kZW1fc3RhdHVzICYKKwkgICAgKFNFUklBTF9NU1JfQ1RTIHwgU0VSSUFMX01TUl9EU1IgfCBTRVJJQUxfTVNSX1JJIHwgU0VSSUFMX01TUl9DRCk7CisKKwkvKiBTZXQgQmF1ZCByYXRlIHRvIGRlZmF1bHQgYW5kIHR1cm4gb2ZmIChkZWZhdWx0KWZsb3cgY29udHJvbCBoZXJlICovCisJc3RhdHVzID0gQm94U2V0VWFydChzZXJpYWwsIFVhcnROdW1iZXIsIGRlZmF1bHRfZGl2aXNvciwgZGVmYXVsdF9MQ1IpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJCb3hTZXRVYXJ0IGZhaWxlZFxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCW15ZGJnKF9fRklMRV9fICJCb3hTZXRVYXJ0IGNvbXBsZXRlZC5cbiIpOworCisJLyogUHV0IHRoaXMgaGVyZSB0byBtYWtlIGl0IHJlc3BvbnNpdmUgdG8gc3R0eSBhbmQgZGVmYXVscyBzZXQgYnkgdGhlIHR0eSBsYXllciAqLworCXF0X3NldF90ZXJtaW9zKHBvcnQsIE5VTEwpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgd2FpdCBxdWUgaGVhZCAqLworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJihwb3J0LT53YWl0KSk7CisKKwkvKiBpZiB3ZSBoYXZlIGEgYnVsayBlbmRwb2ludCwgc3RhcnQgcmVhZGluZyBmcm9tIGl0ICovCisJaWYgKHNlcmlhbC0+bnVtX2J1bGtfaW4pIHsKKwkJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkJICBwb3J0LT4KKwkJCQkJCSAgYnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCSAgcXRfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKworCQlwb3J0LT5SZWFkQnVsa1N0b3BwZWQgPSAwOworCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKworCQlpZiAocmVzdWx0KSB7CisJCQllcnIoIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkgICAgX19mdW5jX18sIHJlc3VsdCk7CisJCQlwb3J0LT5SZWFkQnVsa1N0b3BwZWQgPSAxOworCQl9CisKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9CisJICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCisJaWYgKCFzZXJpYWwpCisJCXJldHVybjsKKworCWRvd24oJnBvcnQtPnNlbSk7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIGlmIGRpc2Nvbm5lY3QgYmVhdCB1cyB0byB0aGUgcHVuY2ggaGVyZSwgdGhlcmUncyBub3RoaW5nIHRvIGRvICovCisJaWYgKHR0eS0+ZHJpdmVyX2RhdGEpIHsKKwkJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWRcbiIsIF9fZnVuY19fKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCS0tcG9ydC0+b3Blbl9jb3VudDsKKwkJaWYgKHBvcnQtPm9wZW5fY291bnQgPD0gMCkgeworCQkJcG9ydC0+Y2xvc2VQZW5kaW5nID0gMTsKKwkJCW15ZGJnKCIlcyAtIHBvcnQtPmNsb3NlUGVuZGluZyA9IDFcbiIsIF9fZnVuY19fKTsKKworCQkJaWYgKHNlcmlhbC0+ZGV2KSB7CisJCQkJcXRfY2xvc2UocG9ydCwgZmlscCk7CisJCQkJcG9ydC0+b3Blbl9jb3VudCA9IDA7CisJCQl9CisJCX0KKworCX0KKworZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKKworCW15ZGJnKCIlcyAtICVkIHJldHVyblxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKK30KKworc3RhdGljIHZvaWQgcXRfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJdW5zaWduZWQgbG9uZyBqaWZ0ID0gamlmZmllcyArIDEwICogSFo7CisJX191OCBMU1JfVmFsdWUsIE1DUl9WYWx1ZTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IFVhcnROdW1iZXI7CisKKwlzdHJ1Y3QgcXRfb3Blbl9jaGFubmVsX2RhdGEgQ2hhbm5lbERhdGE7CisJc3RhdHVzID0gMDsKKwlMU1JfVmFsdWUgPSAwOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCisJLyogc2h1dGRvd24gYW55IGJ1bGsgcmVhZHMgdGhhdCBtaWdodCBiZSBnb2luZyBvbiAqLworCWlmIChzZXJpYWwtPm51bV9idWxrX291dCkKKwkJdXNiX3VubGlua191cmIocG9ydC0+d3JpdGVfdXJiKTsKKwlpZiAoc2VyaWFsLT5udW1fYnVsa19pbikKKwkJdXNiX3VubGlua191cmIocG9ydC0+cmVhZF91cmIpOworCisJLyogd2FpdCB1cCB0byAzMCBzZWNvbmRzIGZvciB0cmFuc21pdHRlciB0byBlbXB0eSAqLworCWRvIHsKKwkJc3RhdHVzID0gQm94R2V0UmVnaXN0ZXIoc2VyaWFsLCBVYXJ0TnVtYmVyLCBMSU5FX1NUQVRVU19SRUdJU1RFUiwgJkxTUl9WYWx1ZSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlteWRiZyhfX0ZJTEVfXyAiYm94X2dldF9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKChMU1JfVmFsdWUgJiBTRVJJQUxfTFNSX1RFTVQpCisJCSAgICAmJiAocG9ydC0+UmVhZEJ1bGtTdG9wcGVkID09IDEpKQorCQkJYnJlYWs7CisJCXNjaGVkdWxlKCk7CisKKwl9CisJd2hpbGUgKGppZmZpZXMgPD0gamlmdCkKKwkJOworCisJaWYgKGppZmZpZXMgPiBqaWZ0KQorCQlteWRiZygiJXMgLSBwb3J0ICVkIHRpbW91dCBvZiBjaGVja2luZyB0cmFuc21pdHRlciBlbXB0eVxuIiwKKwkJICAgICAgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJZWxzZQorCQlteWRiZygiJXMgLSBwb3J0ICVkIGNoZWNraW5nIHRyYW5zbWl0dGVyIGVtcHR5IHN1Y2NlZGVkXG4iLAorCQkgICAgICBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXN0YXR1cyA9CisJICAgIEJveEdldFJlZ2lzdGVyKHNlcmlhbCwgVWFydE51bWJlciwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwKKwkJCSAgICZNQ1JfVmFsdWUpOworCW15ZGJnKF9fRklMRV9fICJCb3hHZXRSZWdpc3RlciBNQ1IgPSAweCV4LlxuIiwgTUNSX1ZhbHVlKTsKKworCWlmIChzdGF0dXMgPj0gMCkgeworCQlNQ1JfVmFsdWUgJj0gfihTRVJJQUxfTUNSX0RUUiB8IFNFUklBTF9NQ1JfUlRTKTsKKwkJLyogc3RhdHVzID0gQm94U2V0UmVnaXN0ZXIoc2VyaWFsLCBVYXJ0TnVtYmVyLCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBNQ1JfVmFsdWUpOyAqLworCX0KKworCS8qIENsb3NlIHVhcnQgY2hhbm5lbCAqLworCXN0YXR1cyA9IEJveE9QZW5DbG9zZUNoYW5uZWwoc2VyaWFsLCBVYXJ0TnVtYmVyLCAwLCAmQ2hhbm5lbERhdGEpOworCWlmIChzdGF0dXMgPCAwKQorCQlteWRiZygiJXMgLSBwb3J0ICVkIEJveE9QZW5DbG9zZUNoYW5uZWwgZmFpbGVkLlxuIiwKKwkJICAgICAgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzZXJpYWwtPm51bV9PcGVuQ291bnQtLTsKKworfQorCitzdGF0aWMgaW50IHNlcmlhbF93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQlpbnQgY291bnQpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9CisJICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCWludCByZXR2YWwgPSAtRUlOVkFMOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCWludCBmcm9tX3VzZXIgPSAwOworCisJc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCWlmIChzZXJpYWwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJLyogVGhpcyBjYW4gaGFwcGVuIGlmIHdlIGdldCBkaXNjb25uZWN0ZWQgYSAqLworCWlmIChwb3J0LT5vcGVuX2NvdW50ID09IDApCisJCXJldHVybiAtRU5PREVWOworCVVhcnROdW1iZXIgPSBwb3J0LT50dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWQsICVkIGJ5dGUocylcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIGNvdW50KTsKKwlteWRiZygiJXMgLSBwb3J0LT5SeEhvbGRpbmcgPSAgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5SeEhvbGRpbmcpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCW15ZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5lZFxuIiwgX19mdW5jX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gcXRfd3JpdGUocG9ydCwgZnJvbV91c2VyLCBidWYsIGNvdW50KTsKKworZXhpdDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHF0X3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBmcm9tX3VzZXIsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpZiAoc2VyaWFsID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoY291bnQgPT0gMCkgeworCQlteWRiZygiJXMgLSB3cml0ZSByZXF1ZXN0IG9mIDAgYnl0ZXNcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCS8qIG9ubHkgZG8gc29tZXRoaW5nIGlmIHdlIGhhdmUgYSBidWxrIG91dCBlbmRwb2ludCAqLworCWlmIChzZXJpYWwtPm51bV9idWxrX291dCkgeworCQlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQlteWRiZygiJXMgLSBhbHJlYWR5IHdyaXRpbmdcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJY291bnQgPQorCQkgICAgKGNvdW50ID4gcG9ydC0+YnVsa19vdXRfc2l6ZSkgPyBwb3J0LT5idWxrX291dF9zaXplIDogY291bnQ7CisKKwkJaWYgKGZyb21fdXNlcikgeworCQkJaWYgKGNvcHlfZnJvbV91c2VyCisJCQkgICAgKHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBidWYsIGNvdW50KSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLCBjb3VudCk7CisJCX0KKworCQkvKiB1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoX19GSUxFX18sIF9fZnVuY19fLCBjb3VudCwgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOyAqLworCisJCS8qIHNldCB1cCBvdXIgdXJiICovCisKKwkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBzZXJpYWwtPmRldiwKKwkJCQkgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJCSAgcG9ydC0+CisJCQkJCQkgIGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkJICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQsCisJCQkJICBxdF93cml0ZV9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKworCQkvKiBzZW5kIHRoZSBkYXRhIG91dCB0aGUgYnVsayBwb3J0ICovCisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQpCisJCQlteWRiZygiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLAorCQkJICAgICAgX19mdW5jX18sIHJlc3VsdCk7CisJCWVsc2UKKwkJCXJlc3VsdCA9IGNvdW50OworCisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyogbm8gYnVsayBvdXQsIHNvIHJldHVybiAwIGJ5dGVzIHdyaXR0ZW4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcXRfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghc2VyaWFsKSB7CisJCW15ZGJnKCIlcyAtIGJhZCBzZXJpYWwgcG9pbnRlciwgZXhpdGluZ1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCW15ZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkgICAgICBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCXBvcnRfc29mdGludCgmcG9ydC0+d29yayk7CisJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHBvcnRfc29mdGludChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9CisJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0LCB3b3JrKTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghc2VyaWFsKQorCQlyZXR1cm47CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpCisJCXJldHVybjsKKyNpZiAwCisJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpCisJICAgICYmIHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSB7CisJCW15ZGJnKCIlcyAtIHdyaXRlIHdha2V1cCBjYWxsLlxuIiwgX19mdW5jX18pOworCQkodHR5LT5sZGlzYy53cml0ZV93YWtldXApICh0dHkpOworCX0KKyNlbmRpZgorCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOworfQorc3RhdGljIGludCBzZXJpYWxfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKworCWlmICghc2VyaWFsKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRvd24oJnBvcnQtPnNlbSk7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSBxdF93cml0ZV9yb29tKHBvcnQpOworCitleGl0OgorCXVwKCZwb3J0LT5zZW0pOworCXJldHVybiByZXR2YWw7Cit9CitzdGF0aWMgaW50IHF0X3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCByb29tID0gMDsKKwlpZiAocG9ydC0+Y2xvc2VQZW5kaW5nID09IDEpIHsKKwkJbXlkYmcoIiVzIC0gcG9ydC0+Y2xvc2VQZW5kaW5nID09IDFcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpIHsKKwkJaWYgKHBvcnQtPndyaXRlX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykKKwkJCXJvb20gPSBwb3J0LT5idWxrX291dF9zaXplOworCX0KKworCW15ZGJnKCIlcyAtIHJldHVybnMgJWRcbiIsIF9fZnVuY19fLCByb29tKTsKKwlyZXR1cm4gcm9vbTsKK30KK3N0YXRpYyBpbnQgc2VyaWFsX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpbnQgcmV0dmFsID0gLUVJTlZBTDsKKworCWlmICghc2VyaWFsKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRvd24oJnBvcnQtPnNlbSk7CisKKwlteWRiZygiJXMgPSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlyZXR2YWwgPSBxdF9jaGFyc19pbl9idWZmZXIocG9ydCk7CisKK2V4aXQ6CisJdXAoJnBvcnQtPnNlbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBxdF9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCWludCBjaGFycyA9IDA7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChzZXJpYWwtPm51bV9idWxrX291dCkgeworCQlpZiAocG9ydC0+d3JpdGVfdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKQorCQkJY2hhcnMgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CisJfQorCisJbXlkYmcoIiVzIC0gcmV0dXJucyAlZFxuIiwgX19mdW5jX18sIGNoYXJzKTsKKwlyZXR1cm4gY2hhcnM7Cit9CisKK3N0YXRpYyBpbnQgc2VyaWFsX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9CisJICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCWludCByZXR2YWwgPSAtRU5PREVWOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCW15ZGJnKCJJbiAlcyBcbiIsIF9fZnVuY19fKTsKKworCWlmICghc2VyaWFsKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCVVhcnROdW1iZXIgPSBwb3J0LT50dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKworCWRvd24oJnBvcnQtPnNlbSk7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkIFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJbXlkYmcoIiVzIC0gcG9ydC0+UnhIb2xkaW5nID0gJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5SeEhvbGRpbmcpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCW15ZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5cbiIsIF9fZnVuY19fKTsKKwkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IHF0X3Rpb2Ntc2V0KHBvcnQsIGZpbGUsIHNldCk7CisKK2V4aXQ6CisJdXAoJnBvcnQtPnNlbSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBxdF90aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJICAgICAgIHVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKworCV9fdTggTUNSX1ZhbHVlOworCWludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IFVhcnROdW1iZXI7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCWlmIChzZXJpYWwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiogIFRJT0NNR0VUCisgICAgICovCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCXN0YXR1cyA9CisJICAgIEJveEdldFJlZ2lzdGVyKHBvcnQtPnNlcmlhbCwgVWFydE51bWJlciwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwKKwkJCSAgICZNQ1JfVmFsdWUpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gLUVTUElQRTsKKworCS8qCisJICogVHVybiBvZmYgdGhlIFJUUyBhbmQgRFRSIGFuZCBsb29wYmNjayBhbmQgdGhlbiBvbmx5IHR1cm4gb24gd2hhdCB3YXMKKwkgKiBhc2tlZCBmb3IKKwkgKi8KKwlNQ1JfVmFsdWUgJj0gfihTRVJJQUxfTUNSX1JUUyB8IFNFUklBTF9NQ1JfRFRSIHwgU0VSSUFMX01DUl9MT09QKTsKKwlpZiAodmFsdWUgJiBUSU9DTV9SVFMpCisJCU1DUl9WYWx1ZSB8PSBTRVJJQUxfTUNSX1JUUzsKKwlpZiAodmFsdWUgJiBUSU9DTV9EVFIpCisJCU1DUl9WYWx1ZSB8PSBTRVJJQUxfTUNSX0RUUjsKKwlpZiAodmFsdWUgJiBUSU9DTV9MT09QKQorCQlNQ1JfVmFsdWUgfD0gU0VSSUFMX01DUl9MT09QOworCisJc3RhdHVzID0KKwkgICAgQm94U2V0UmVnaXN0ZXIocG9ydC0+c2VyaWFsLCBVYXJ0TnVtYmVyLCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLAorCQkJICAgTUNSX1ZhbHVlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIC1FU1BJUEU7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXJpYWxfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKwl1bnNpZ25lZCBpbnQgVWFydE51bWJlcjsKKwlteWRiZygiSW4gJXMgXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlVYXJ0TnVtYmVyID0gcG9ydC0+dHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJbXlkYmcoIiVzIC0gcG9ydC0+UnhIb2xkaW5nID0gJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5SeEhvbGRpbmcpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCW15ZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5cbiIsIF9fZnVuY19fKTsKKwkJZ290byBleGl0OworCX0KKworCXJldHZhbCA9IHF0X3Rpb2NtZ2V0KHBvcnQsIGZpbGUpOworCitleGl0OgorCXVwKCZwb3J0LT5zZW0pOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgcXRfdGlvY21nZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisKKwlfX3U4IE1DUl9WYWx1ZTsKKwlfX3U4IE1TUl9WYWx1ZTsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBVYXJ0TnVtYmVyOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCWlmIChzZXJpYWwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJdHR5ID0gcG9ydC0+dHR5OworCisJbXlkYmcoIiVzIC0gcG9ydCAlZCwgdHR5ID0weCVwXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCB0dHkpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qKiAgVElPQ01HRVQKKyAgICAgKi8KKwlVYXJ0TnVtYmVyID0gcG9ydC0+dHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisJc3RhdHVzID0KKwkgICAgQm94R2V0UmVnaXN0ZXIocG9ydC0+c2VyaWFsLCBVYXJ0TnVtYmVyLCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLAorCQkJICAgJk1DUl9WYWx1ZSk7CisJaWYgKHN0YXR1cyA+PSAwKSB7CisJCXN0YXR1cyA9CisJCSAgICBCb3hHZXRSZWdpc3Rlcihwb3J0LT5zZXJpYWwsIFVhcnROdW1iZXIsCisJCQkJICAgTU9ERU1fU1RBVFVTX1JFR0lTVEVSLCAmTVNSX1ZhbHVlKTsKKworCX0KKworCWlmIChzdGF0dXMgPj0gMCkgeworCQlyZXN1bHQgPSAoKE1DUl9WYWx1ZSAmIFNFUklBTF9NQ1JfRFRSKSA/IFRJT0NNX0RUUiA6IDApCisJCSAgICAvKiBEVFIgSVMgU0VUICovCisJCSAgICB8ICgoTUNSX1ZhbHVlICYgU0VSSUFMX01DUl9SVFMpID8gVElPQ01fUlRTIDogMCkKKwkJICAgIC8qIFJUUyBJUyBTRVQgKi8KKwkJICAgIHwgKChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0NUUykgPyBUSU9DTV9DVFMgOiAwKQorCQkgICAgLyogQ1RTIGlzIHNldCAqLworCQkgICAgfCAoKE1TUl9WYWx1ZSAmIFNFUklBTF9NU1JfQ0QpID8gVElPQ01fQ0FSIDogMCkKKwkJICAgIC8qIENhcnJpZXIgZGV0ZWN0IGlzIHNldCAqLworCQkgICAgfCAoKE1TUl9WYWx1ZSAmIFNFUklBTF9NU1JfUkkpID8gVElPQ01fUkkgOiAwKQorCQkgICAgLyogUmluZyBpbmRpY2F0b3Igc2V0ICovCisJCSAgICB8ICgoTVNSX1ZhbHVlICYgU0VSSUFMX01TUl9EU1IpID8gVElPQ01fRFNSIDogMCk7CisJCS8qIERTUiBpcyBzZXQgKi8KKwkJcmV0dXJuIHJlc3VsdDsKKworCX0gZWxzZQorCQlyZXR1cm4gLUVTUElQRTsKK30KKworc3RhdGljIGludCBzZXJpYWxfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlpbnQgcmV0dmFsID0gLUVOT0RFVjsKKwl1bnNpZ25lZCBpbnQgVWFydE51bWJlcjsKKwlteWRiZygiSW4gJXMgXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlVYXJ0TnVtYmVyID0gcG9ydC0+dHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZCwgY21kIDB4JS40eFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgY21kKTsKKwlteWRiZygiJXMgLSBwb3J0LT5SeEhvbGRpbmcgPSAlZFxuIiwgX19mdW5jX18sIHBvcnQtPlJ4SG9sZGluZyk7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJbXlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlblxuIiwgX19mdW5jX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0dmFsID0gcXRfaW9jdGwocG9ydCwgZmlsZSwgY21kLCBhcmcpOworCitleGl0OgorCXVwKCZwb3J0LT5zZW0pOworCXJldHVybiByZXR2YWw7Cit9CitzdGF0aWMgaW50IHF0X2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJX191OCBNQ1JfVmFsdWU7CisJX191OCBNU1JfVmFsdWU7CisJdW5zaWduZWQgc2hvcnQgUHJldl9NU1JfVmFsdWU7CisJdW5zaWduZWQgaW50IHZhbHVlLCByZXN1bHQgPSAwOworCWludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IFVhcnROdW1iZXI7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJaWYgKHNlcmlhbCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKwl0dHkgPSBwb3J0LT50dHk7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkLCB0dHkgPTB4JXBcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIsIHR0eSk7CisKKwkvKiBUSU9DTUdFVCAqLworCVVhcnROdW1iZXIgPSBwb3J0LT50dHktPmluZGV4IC0gc2VyaWFsLT5taW5vcjsKKworCWlmIChjbWQgPT0gVElPQ01HRVQpIHsKKwkJTUNSX1ZhbHVlID0gcG9ydC0+c2hhZG93TUNSOworCQlNU1JfVmFsdWUgPSBwb3J0LT5zaGFkb3dNU1I7CisKKwkJeworCQkJcmVzdWx0ID0gKChNQ1JfVmFsdWUgJiBTRVJJQUxfTUNSX0RUUikgPyBUSU9DTV9EVFIgOiAwKQorCQkJICAgIC8qIERUUiBJUyBTRVQgKi8KKwkJCSAgICB8ICgoTUNSX1ZhbHVlICYgU0VSSUFMX01DUl9SVFMpID8gVElPQ01fUlRTIDogMCkKKwkJCSAgICAvKiBSVFMgSVMgU0VUICovCisJCQkgICAgfCAoKE1TUl9WYWx1ZSAmIFNFUklBTF9NU1JfQ1RTKSA/IFRJT0NNX0NUUyA6IDApCisJCQkgICAgLyogQ1RTIGlzIHNldCAqLworCQkJICAgIHwgKChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0NEKSA/IFRJT0NNX0NBUiA6IDApCisJCQkgICAgLyogQ2FycmllciBkZXRlY3QgaXMgc2V0ICovCisJCQkgICAgfCAoKE1TUl9WYWx1ZSAmIFNFUklBTF9NU1JfUkkpID8gVElPQ01fUkkgOiAwKQorCQkJICAgIC8qIFJpbmcgaW5kaWNhdG9yIHNldCAqLworCQkJICAgIHwgKChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0RTUikgPyBUSU9DTV9EU1IgOiAwKTsKKwkJCS8qIERTUiBpcyBzZXQgKi8KKwkJCWlmIChjb3B5X3RvX3VzZXIKKwkJCSAgICAoKHVuc2lnbmVkIGludCAqKWFyZywgJnJlc3VsdCwKKwkJCSAgICAgc2l6ZW9mKHVuc2lnbmVkIGludCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisKKwkJfQorCX0KKworCS8qIFRJT0NNQklTLCBUSU9DTUJJQywgQU5EIFRJT0NNU0VUICovCisJaWYgKGNtZCA9PSBUSU9DTUJJUyB8fCBjbWQgPT0gVElPQ01CSUMgfHwgY21kID09IFRJT0NNU0VUKSB7CisJCXN0YXR1cyA9CisJCSAgICBCb3hHZXRSZWdpc3Rlcihwb3J0LT5zZXJpYWwsIFVhcnROdW1iZXIsCisJCQkJICAgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgJk1DUl9WYWx1ZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIC1FU1BJUEU7CisJCWlmIChjb3B5X2Zyb21fdXNlcgorCQkgICAgKCZ2YWx1ZSwgKHVuc2lnbmVkIGludCAqKWFyZywgc2l6ZW9mKHVuc2lnbmVkIGludCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBUSU9DTUJJUzoKKwkJCWlmICh2YWx1ZSAmIFRJT0NNX1JUUykKKwkJCQlNQ1JfVmFsdWUgfD0gU0VSSUFMX01DUl9SVFM7CisJCQlpZiAodmFsdWUgJiBUSU9DTV9EVFIpCisJCQkJTUNSX1ZhbHVlIHw9IFNFUklBTF9NQ1JfRFRSOworCQkJaWYgKHZhbHVlICYgVElPQ01fTE9PUCkKKwkJCQlNQ1JfVmFsdWUgfD0gU0VSSUFMX01DUl9MT09QOworCQkJYnJlYWs7CisJCWNhc2UgVElPQ01CSUM6CisJCQlpZiAodmFsdWUgJiBUSU9DTV9SVFMpCisJCQkJTUNSX1ZhbHVlICY9IH5TRVJJQUxfTUNSX1JUUzsKKwkJCWlmICh2YWx1ZSAmIFRJT0NNX0RUUikKKwkJCQlNQ1JfVmFsdWUgJj0gflNFUklBTF9NQ1JfRFRSOworCQkJaWYgKHZhbHVlICYgVElPQ01fTE9PUCkKKwkJCQlNQ1JfVmFsdWUgJj0gflNFUklBTF9NQ1JfTE9PUDsKKwkJCWJyZWFrOworCQljYXNlIFRJT0NNU0VUOgorCQkJLyoKKwkJCSAqIFR1cm4gb2ZmIHRoZSBSVFMgYW5kIERUUiBhbmQgbG9vcGJjY2sgYW5kIHRoZW4gb25seQorCQkJICogdHVybiBvbiB3aGF0IHdhcyBhc2tlZCBmb3IKKwkJCSAqLworCQkJTUNSX1ZhbHVlICY9CisJCQkgICAgfihTRVJJQUxfTUNSX1JUUyB8IFNFUklBTF9NQ1JfRFRSIHwKKwkJCSAgICAgIFNFUklBTF9NQ1JfTE9PUCk7CisJCQlpZiAodmFsdWUgJiBUSU9DTV9SVFMpCisJCQkJTUNSX1ZhbHVlIHw9IFNFUklBTF9NQ1JfUlRTOworCQkJaWYgKHZhbHVlICYgVElPQ01fRFRSKQorCQkJCU1DUl9WYWx1ZSB8PSBTRVJJQUxfTUNSX0RUUjsKKwkJCWlmICh2YWx1ZSAmIFRJT0NNX0xPT1ApCisJCQkJTUNSX1ZhbHVlIHw9IFNFUklBTF9NQ1JfTE9PUDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisKKwkJfQorCQlzdGF0dXMgPQorCQkgICAgQm94U2V0UmVnaXN0ZXIocG9ydC0+c2VyaWFsLCBVYXJ0TnVtYmVyLAorCQkJCSAgIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIE1DUl9WYWx1ZSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIC1FU1BJUEU7CisJCWVsc2UgeworCQkJcG9ydC0+c2hhZG93TUNSID0gTUNSX1ZhbHVlOworCQkJcmV0dXJuIDA7CisJCX0KKworCX0KKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAvKiogICBUSU9DTUJJUywgVElPQ01CSUMsIEFORCBUSU9DTVNFVCAgICBlbmQKKyAgICovCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKGNtZCA9PSBUSU9DTUlXQUlUKSB7CisJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCQlQcmV2X01TUl9WYWx1ZSA9IHBvcnQtPnNoYWRvd01TUiAmIFNFUklBTF9NU1JfTUFTSzsKKwkJd2hpbGUgKDEpIHsKKwkJCWFkZF93YWl0X3F1ZXVlKCZwb3J0LT53YWl0LCAmd2FpdCk7CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJc2NoZWR1bGUoKTsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT53YWl0LCAmd2FpdCk7CisJCQkvKiBzZWUgaWYgYSBzaWduYWwgd29rZSB1cyB1cCAqLworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQlNU1JfVmFsdWUgPSBwb3J0LT5zaGFkb3dNU1IgJiBTRVJJQUxfTVNSX01BU0s7CisJCQlpZiAoTVNSX1ZhbHVlID09IFByZXZfTVNSX1ZhbHVlKQorCQkJCXJldHVybiAtRUlPOwkvKiBubyBjaGFuZ2UgZXJyb3IgKi8KKworCQkJaWYgKChhcmcgJiBUSU9DTV9STkcKKwkJCSAgICAgJiYgKChQcmV2X01TUl9WYWx1ZSAmIFNFUklBTF9NU1JfUkkpID09CisJCQkJIChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX1JJKSkpCisJCQkgICAgfHwgKGFyZyAmIFRJT0NNX0RTUgorCQkJCSYmICgoUHJldl9NU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0RTUikgPT0KKwkJCQkgICAgKE1TUl9WYWx1ZSAmIFNFUklBTF9NU1JfRFNSKSkpCisJCQkgICAgfHwgKGFyZyAmIFRJT0NNX0NECisJCQkJJiYgKChQcmV2X01TUl9WYWx1ZSAmIFNFUklBTF9NU1JfQ0QpID09CisJCQkJICAgIChNU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0NEKSkpCisJCQkgICAgfHwgKGFyZyAmIFRJT0NNX0NUUworCQkJCSYmICgoUHJldl9NU1JfVmFsdWUgJiBTRVJJQUxfTVNSX0NUUykgPT0KKwkJCQkgICAgKE1TUl9WYWx1ZSAmIFNFUklBTF9NU1JfQ1RTKSkpKSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisKKwkJfQorCisJfQorCW15ZGJnKCIlcyAtTm8gaW9jdGwgZm9yIHRoYXQgb25lLiAgcG9ydCA9ICVkXG4iLCBfX2Z1bmNfXywKKwkgICAgICBwb3J0LT5udW1iZXIpOworCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKworCWlmICghc2VyaWFsKQorCQlyZXR1cm47CisKKwlkb3duKCZwb3J0LT5zZW0pOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJbXlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlblxuIiwgX19mdW5jX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpZiBpdCBpcyBhdmFpbGFibGUgKi8KKwlxdF9zZXRfdGVybWlvcyhwb3J0LCBvbGQpOworCitleGl0OgorCXVwKCZwb3J0LT5zZW0pOworfQorCitzdGF0aWMgdm9pZCBxdF9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICAgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwl1bnNpZ25lZCBpbnQgY2ZsYWc7CisJaW50IGJhdWQsIGRpdmlzb3IsIHJlbWFpbmRlcjsKKwl1bnNpZ25lZCBjaGFyIExDUl9jaGFuZ2VfdG8gPSAwOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCV9fdTE2IFVhcnROdW1iZXI7CisJX191MTYgdG1wLCB0bXAyOworCisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwl0bXAgPSBwb3J0LT50dHktPmluZGV4OworCW15ZGJnKCIlcyAtIE1JTk9SKHBvcnQtPnR0eS0+aW5kZXgpID0gICVkXG4iLCBfX2Z1bmNfXywgdG1wKTsKKworCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwl0bXAyID0gc2VyaWFsLT5taW5vcjsKKwlteWRiZygiJXMgLSBzZXJpYWwtPm1pbm9yID0gICVkXG4iLCBfX2Z1bmNfXywgdG1wMik7CisKKwlVYXJ0TnVtYmVyID0gcG9ydC0+dHR5LT5pbmRleCAtIHNlcmlhbC0+bWlub3I7CisKKwl0dHkgPSBwb3J0LT50dHk7CisKKwljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKKworCWlmIChvbGRfdGVybWlvcykgeworCQlpZiAoKGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnKQorCQkgICAgJiYgKFJFTEVWQU5UX0lGTEFHKHR0eS0+dGVybWlvcy0+Y19pZmxhZykgPT0KKwkJCVJFTEVWQU5UX0lGTEFHKG9sZF90ZXJtaW9zLT5jX2lmbGFnKSkpIHsKKwkJCW15ZGJnKCIlcyAtIE5vdGhpbmcgdG8gY2hhbmdlXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm47CisJCX0KKworCX0KKworCW15ZGJnKCIlcyAtIDNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoY2ZsYWcpIHsKKwljYXNlIENTNToKKwkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfNV9EQVRBOworCQlicmVhazsKKwljYXNlIENTNjoKKwkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfNl9EQVRBOworCQlicmVhazsKKwljYXNlIENTNzoKKwkJTENSX2NoYW5nZV90byB8PSBTRVJJQUxfN19EQVRBOworCQlicmVhazsKKwlkZWZhdWx0OgorCWNhc2UgQ1M4OgorCQlMQ1JfY2hhbmdlX3RvIHw9IFNFUklBTF84X0RBVEE7CisJCWJyZWFrOworCX0KKworCS8qIFBhcml0eSBzdHVmZiAqLworCWlmIChjZmxhZyAmIFBBUkVOQikgeworCQlpZiAoY2ZsYWcgJiBQQVJPREQpCisJCQlMQ1JfY2hhbmdlX3RvIHw9IFNFUklBTF9PRERfUEFSSVRZOworCQllbHNlCisJCQlMQ1JfY2hhbmdlX3RvIHw9IFNFUklBTF9FVkVOX1BBUklUWTsKKwl9CisJaWYgKGNmbGFnICYgQ1NUT1BCKQorCQlMQ1JfY2hhbmdlX3RvIHw9IFNFUklBTF9UV09fU1RPUEI7CisJZWxzZQorCQlMQ1JfY2hhbmdlX3RvIHw9IFNFUklBTF9UV09fU1RPUEI7CisKKwlteWRiZygiJXMgLSA0XG4iLCBfX2Z1bmNfXyk7CisJLyogVGhhdHMgdGhlIExDUiBzdHVmZiwgZ28gYWhlYWQgYW5kIHNldCBpdCAqLworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWlmICghYmF1ZCkgeworCQkvKiBwaWNrIGEgZGVmYXVsdCwgYW55IGRlZmF1bHQuLi4gKi8KKwkJYmF1ZCA9IDk2MDA7CisJfQorCisJbXlkYmcoIiVzIC0gZ290IGJhdWQgPSAlZFxuIiwgX19mdW5jX18sIGJhdWQpOworCisJZGl2aXNvciA9IE1BWF9CQVVEX1JBVEUgLyBiYXVkOworCXJlbWFpbmRlciA9IE1BWF9CQVVEX1JBVEUgJSBiYXVkOworCS8qIFJvdW5kIHRvIG5lYXJlc3QgZGl2aXNvciAqLworCWlmICgoKHJlbWFpbmRlciAqIDIpID49IGJhdWQpICYmIChiYXVkICE9IDExMCkpCisJCWRpdmlzb3IrKzsKKworCS8qCisJICogU2V0IEJhdWQgcmF0ZSB0byBkZWZhdWx0IGFuZCB0dXJuIG9mZiAoZGVmYXVsdClmbG93IGNvbnRyb2wgaGVyZQorCSAqLworCXN0YXR1cyA9CisJICAgIEJveFNldFVhcnQoc2VyaWFsLCBVYXJ0TnVtYmVyLCAodW5zaWduZWQgc2hvcnQpZGl2aXNvciwKKwkJICAgICAgIExDUl9jaGFuZ2VfdG8pOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJCb3hTZXRVYXJ0IGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBOb3cgZGV0ZXJtaW5lIGZsb3cgY29udHJvbCAqLworCWlmIChjZmxhZyAmIENSVFNDVFMpIHsKKwkJbXlkYmcoIiVzIC0gRW5hYmxpbmcgSFcgZmxvdyBjb250cm9sIHBvcnQgJWRcbiIsIF9fZnVuY19fLAorCQkgICAgICBwb3J0LT5udW1iZXIpOworCisJCS8qIEVuYWJsZSBSVFMvQ1RTIGZsb3cgY29udHJvbCAqLworCQlzdGF0dXMgPSBCb3hTZXRIV19GbG93Q3RybChzZXJpYWwsIFVhcnROdW1iZXIsIDEpOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlteWRiZyhfX0ZJTEVfXyAiQm94U2V0SFdfRmxvd0N0cmwgZmFpbGVkXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIERpc2FibGUgUlRTL0NUUyBmbG93IGNvbnRyb2wgKi8KKwkJbXlkYmcoIiVzIC0gZGlzYWJsaW5nIEhXIGZsb3cgY29udHJvbCBwb3J0ICVkXG4iLCBfX2Z1bmNfXywKKwkJICAgICAgcG9ydC0+bnVtYmVyKTsKKworCQlzdGF0dXMgPSBCb3hTZXRIV19GbG93Q3RybChzZXJpYWwsIFVhcnROdW1iZXIsIDApOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJbXlkYmcoX19GSUxFX18gIkJveFNldEhXX0Zsb3dDdHJsIGZhaWxlZFxuIik7CisJCQlyZXR1cm47CisJCX0KKworCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgWE9OL1hPRkYsIHNldCB0aGUgc3RhcnQgYW5kIHN0b3AgY2hhcmFjdGVyIGluCisJICogdGhlIGRldmljZSAqLworCWlmIChJX0lYT0ZGKHR0eSkgfHwgSV9JWE9OKHR0eSkpIHsKKwkJdW5zaWduZWQgY2hhciBzdG9wX2NoYXIgPSBTVE9QX0NIQVIodHR5KTsKKwkJdW5zaWduZWQgY2hhciBzdGFydF9jaGFyID0gU1RBUlRfQ0hBUih0dHkpOworCQlzdGF0dXMgPQorCQkgICAgQm94U2V0U1dfRmxvd0N0cmwoc2VyaWFsLCBVYXJ0TnVtYmVyLCBzdG9wX2NoYXIsCisJCQkJICAgICAgc3RhcnRfY2hhcik7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJbXlkYmcoX19GSUxFX18gIkJveFNldFNXX0Zsb3dDdHJsIChlbmFibGVkKSBmYWlsZWRcbiIpOworCisJfSBlbHNlIHsKKwkJLyogZGlzYWJsZSBTVyBmbG93IGNvbnRyb2wgKi8KKwkJc3RhdHVzID0gQm94RGlzYWJsZV9TV19GbG93Q3RybChzZXJpYWwsIFVhcnROdW1iZXIpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCW15ZGJnKF9fRklMRV9fICJCb3hTZXRTV19GbG93Q3RybCAoZGlhYmxpbmcpIGZhaWxlZFxuIik7CisKKwl9CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQm94R2V0UmVnaXN0ZXIKKyoJaXNzdXNlIGEgR0VUX1JFR0lTVEVSIHZlbmRvci1zcGNpZmljIHJlcXVlc3Qgb24gdGhlIGRlZmF1bHQgY29udHJvbCBwaXBlCisqCUlmIHN1Y2Nlc3NmdWwsIGZpbGxzIGluIHRoZSAgcFZhbHVlIHdpdGggdGhlIHJlZ2lzdGVyIHZhbHVlIGFza2VkIGZvcgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgQm94R2V0UmVnaXN0ZXIoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgc2hvcnQgVWFydF9OdW1iZXIsCisJCQkgIHVuc2lnbmVkIHNob3J0IFJlZ2lzdGVyX051bSwgX191OCAqcFZhbHVlKQoreworCWludCByZXN1bHQ7CisJX191MTYgY3VycmVudF9sZW5ndGg7CisKKwljdXJyZW50X2xlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhKTsKKworCXJlc3VsdCA9CisJICAgIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICBRVF9HRVRfU0VUX1JFR0lTVEVSLCAweEMwLCBSZWdpc3Rlcl9OdW0sCisJCQkgICAgVWFydF9OdW1iZXIsICh2b2lkICopcFZhbHVlLCBzaXplb2YoKnBWYWx1ZSksIDMwMCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBCb3hTZXRSZWdpc3RlcgorKglpc3N1c2UgYSBHRVRfUkVHSVNURVIgdmVuZG9yLXNwY2lmaWMgcmVxdWVzdCBvbiB0aGUgZGVmYXVsdCBjb250cm9sIHBpcGUKKyoJSWYgc3VjY2Vzc2Z1bCwgZmlsbHMgaW4gdGhlICBwVmFsdWUgd2l0aCB0aGUgcmVnaXN0ZXIgdmFsdWUgYXNrZWQgZm9yCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBCb3hTZXRSZWdpc3RlcihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBzaG9ydCBVYXJ0X051bWJlciwKKwkJCSAgdW5zaWduZWQgc2hvcnQgUmVnaXN0ZXJfTnVtLCB1bnNpZ25lZCBzaG9ydCBWYWx1ZSkKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIHNob3J0IFJlZ0FuZEJ5dGU7CisKKwlSZWdBbmRCeXRlID0gVmFsdWU7CisJUmVnQW5kQnl0ZSA9IFJlZ0FuZEJ5dGUgPDwgODsKKwlSZWdBbmRCeXRlID0gUmVnQW5kQnl0ZSArIFJlZ2lzdGVyX051bTsKKworLyoKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJIFFUX0dFVF9TRVRfUkVHSVNURVIsIDB4QzAsIFJlZ2lzdGVyX051bSwKKwkJCQkgVWFydF9OdW1iZXIsIE5VTEwsIDAsIDMwMCk7CisqLworCisJcmVzdWx0ID0KKwkgICAgdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgIFFUX0dFVF9TRVRfUkVHSVNURVIsIDB4NDAsIFJlZ0FuZEJ5dGUsIFVhcnRfTnVtYmVyLAorCQkJICAgIE5VTEwsIDAsIDMwMCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKioKKyAqIGJveF9nZXRfZGV2aWNlCisgKiAgIElzc3VlIGEgR0VUX0RFVklDRSB2ZW5kb3Itc3BlY2lmaWMgcmVxdWVzdCBvbiB0aGUgZGVmYXVsdCBjb250cm9sIHBpcGUgSWYKKyAqICAgc3VjY2Vzc2Z1bCwgZmlsbHMgaW4gdGhlIHF0X2dldF9kZXZpY2VfZGF0YSBzdHJ1Y3R1cmUgcG9pbnRlZCB0byBieQorICogICBkZXZpY2VfZGF0YSwgb3RoZXJ3aXNlIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvZiB0aGUgcHJvYmxlbS4KKyAqLworc3RhdGljIGludCBib3hfZ2V0X2RldmljZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJICBzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhICpkZXZpY2VfZGF0YSkKK3sKKwlpbnQgcmVzdWx0OworCV9fdTE2IGN1cnJlbnRfbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgKnRyYW5zZmVyX2J1ZmZlcjsKKworCWN1cnJlbnRfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEpOworCXRyYW5zZmVyX2J1ZmZlciA9IGttYWxsb2MoY3VycmVudF9sZW5ndGgsIEdGUF9LRVJORUwpOworCWlmICghdHJhbnNmZXJfYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQkgUVRfU0VUX0dFVF9ERVZJQ0UsIDB4YzAsIDAsIDAsCisJCQkJIHRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9sZW5ndGgsIDMwMCk7CisJaWYgKHJlc3VsdCA+IDApCisJCW1lbWNweShkZXZpY2VfZGF0YSwgdHJhbnNmZXJfYnVmZmVyLCBjdXJyZW50X2xlbmd0aCk7CisJa2ZyZWUodHJhbnNmZXJfYnVmZmVyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogYm94X3NldF9kZXZpY2UKKyAqICAgSXNzdWUgYSBTRVRfREVWSUNFIHZlbmRvci1zcGVjaWZpYyByZXF1ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbnRyb2wgcGlwZSBJZgorICogICBzdWNjZXNzZnVsIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCBvdGhlcndpc2UgaXQgcmV0dXJucyBhCisgKiAgIG5lZ2F0aXZlIGVycm9yIG51bWJlciBvZiB0aGUgcHJvYmxlbS4KKyAqLworc3RhdGljIGludCBib3hfc2V0X2RldmljZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJICBzdHJ1Y3QgcXRfZ2V0X2RldmljZV9kYXRhICpkZXZpY2VfZGF0YSkKK3sKKwlpbnQgcmVzdWx0OworCV9fdTE2IGxlbmd0aDsKKwlfX3UxNiBQb3J0U2V0dGluZ3M7CisKKwlQb3J0U2V0dGluZ3MgPSAoKF9fdTE2KSAoZGV2aWNlX2RhdGEtPnBvcnRiKSk7CisJUG9ydFNldHRpbmdzID0gKFBvcnRTZXR0aW5ncyA8PCA4KTsKKwlQb3J0U2V0dGluZ3MgKz0gKChfX3UxNikgKGRldmljZV9kYXRhLT5wb3J0YSkpOworCisJbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEpOworCW15ZGJnKCIlcyAtIFBvcnRTZXR0aW5ncyA9IDB4JXhcbiIsIF9fZnVuY19fLCBQb3J0U2V0dGluZ3MpOworCisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSBRVF9TRVRfR0VUX0RFVklDRSwgMHg0MCwgUG9ydFNldHRpbmdzLAorCQkJCSAwLCBOVUxMLCAwLCAzMDApOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCb3hPUGVuQ2xvc2VDaGFubmVsCisgKiBUaGlzIGZ1bmNpb3RuIG5vdGlmaWVzIHRoZSBkZXZpY2UgdGhhdCB0aGUgZGV2aWNlIGRyaXZlciB3aXNoZXMgdG8gb3BlbiBhIHBhcnRpY3VsYXIgVUFSVCBjaGFubmVsLiBpdHMKKyAqIHB1cnBvc2UgaXMgdG8gYWxsb3cgdGhlIGRldmljZSBkcml2ZXIgYW5kIHRoZSBkZXZpY2UgdG8gc3luY2hyb25pemUgc3RhdGUgaW5mb3JtYXRpb24uCisgKiBPcGVuQ2xvc2UgPSAxIGZvciBvcGVuICwgMCBmb3IgY2xvc2UKKyAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgQm94T1BlbkNsb3NlQ2hhbm5lbChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBVYXJ0X051bWJlciwKKwkJCSAgICAgICBfX3UxNiBPcGVuQ2xvc2UsCisJCQkgICAgICAgc3RydWN0IHF0X29wZW5fY2hhbm5lbF9kYXRhICpwRGV2aWNlRGF0YSkKK3sKKwlpbnQgcmVzdWx0OworCV9fdTE2IGxlbmd0aDsKKwlfX3U4IERpcmVjaW9uOworCXVuc2lnbmVkIGludCBwaXBlOworCWxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcXRfb3Blbl9jaGFubmVsX2RhdGEpOworCisJLyogaWYgb3BlbmluZy4uLiAqLworCWlmIChPcGVuQ2xvc2UgPT0gMSkgeworCQlEaXJlY2lvbiA9IFVTQkRfVFJBTlNGRVJfRElSRUNUSU9OX0lOOworCQlwaXBlID0gdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKTsKKwkJcmVzdWx0ID0KKwkJICAgIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgcGlwZSwgUVRfT1BFTl9DTE9TRV9DSEFOTkVMLAorCQkJCSAgICBEaXJlY2lvbiwgT3BlbkNsb3NlLCBVYXJ0X051bWJlciwKKwkJCQkgICAgcERldmljZURhdGEsIGxlbmd0aCwgMzAwKTsKKworCX0gZWxzZSB7CisJCURpcmVjaW9uID0gVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VUOworCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKTsKKwkJcmVzdWx0ID0KKwkJICAgIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgcGlwZSwgUVRfT1BFTl9DTE9TRV9DSEFOTkVMLAorCQkJCSAgICBEaXJlY2lvbiwgT3BlbkNsb3NlLCBVYXJ0X051bWJlciwgTlVMTCwgMCwKKwkJCQkgICAgMzAwKTsKKworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQm94U2V0UHJlYnVmZmVyTGV2ZWwKKyAgIFRFTExTIEJPWCBXSEVOIFRPIEFTU0VSVCBGTE9XIENPTlRST0wKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBCb3hTZXRQcmVidWZmZXJMZXZlbChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCByZXN1bHQ7CisJX191MTYgYnVmZmVyX2xlbmd0aDsKKworCWJ1ZmZlcl9sZW5ndGggPSBQUkVGVUZGX0xFVkVMX0NPTlNFUlZBVElWRTsKKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJIFFUX0dFVF9TRVRfUFJFQlVGX1RSSUdfTFZMLCAweDQwLAorCQkJCSBidWZmZXJfbGVuZ3RoLCAwLCBOVUxMLCAwLCAzMDApOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgQm94U2V0QVRDCisgICBURUxMUyBCT1ggV0hFTiBUTyBBU1NFUlQgYXV0b21hdGljIHRyYW5zbWl0dGVyIGNvbnRyb2wKKyAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IEJveFNldEFUQyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBuX01vZGUpCit7CisJaW50IHJlc3VsdDsKKwlfX3UxNiBidWZmZXJfbGVuZ3RoOworCisJYnVmZmVyX2xlbmd0aCA9IFBSRUZVRkZfTEVWRUxfQ09OU0VSVkFUSVZFOworCisJcmVzdWx0ID0KKwkgICAgdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgIFFUX1NFVF9BVEYsIDB4NDAsIG5fTW9kZSwgMCwgTlVMTCwgMCwgMzAwKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEJveFNldFVhcnQKKyoJaXNzdXNlIGEgU0VUX1VBUlQgdmVuZG9yLXNwY2lmaWMgcmVxdWVzdCBvbiB0aGUgZGVmYXVsdCBjb250cm9sIHBpcGUKKyoJSWYgc3VjY2Vzc2Z1bCBzZXRzIGJhdWQgcmF0ZSBkaXZpc29yIGFuZCBMQ1IgdmFsdWUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IEJveFNldFVhcnQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgc2hvcnQgVWFydF9OdW1iZXIsCisJCSAgICAgIHVuc2lnbmVkIHNob3J0IGRlZmF1bHRfZGl2aXNvciwgdW5zaWduZWQgY2hhciBkZWZhdWx0X0xDUikKK3sKKwlpbnQgcmVzdWx0OworCXVuc2lnbmVkIHNob3J0IFVhcnROdW1hbmRMQ1I7CisKKwlVYXJ0TnVtYW5kTENSID0gKGRlZmF1bHRfTENSIDw8IDgpICsgVWFydF9OdW1iZXI7CisKKwlyZXN1bHQgPQorCSAgICB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgUVRfR0VUX1NFVF9VQVJULCAweDQwLCBkZWZhdWx0X2Rpdmlzb3IsCisJCQkgICAgVWFydE51bWFuZExDUiwgTlVMTCwgMCwgMzAwKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgQm94U2V0SFdfRmxvd0N0cmwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgaW50IFVhcnROdW1iZXIsCisJCQkgICAgIGludCBiU2V0KQoreworCV9fdTggTUNSX1ZhbHVlID0gMDsKKwlfX3U4IE1TUl9WYWx1ZSA9IDAsIE1PVVRfVmFsdWUgPSAwOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCXBvcnQgPSBzZXJpYWwtPnBvcnQ7CisKKwlpZiAoYlNldCA9PSAxKSB7CisJCS8qIGZsb3cgY29udHJvbCwgYm94IHdpbGwgY2xlYXIgUlRTIGxpbmUgdG8gcHJldmVudCByZW1vdGUgKi8KKwkJTUNSX1ZhbHVlID0gU0VSSUFMX01DUl9SVFM7CisJfQkJCS8qIGRldmljZSBmcm9tIHhtaXR0aW5nIG1vcmUgY2hhcnMgKi8KKwllbHNlIHsKKwkJLyogbm8gZmxvdyBjb250cm9sIHRvIHJlbW90ZSBkZXZpY2UgKi8KKwkJTUNSX1ZhbHVlID0gMDsKKworCX0KKwlNT1VUX1ZhbHVlID0gTUNSX1ZhbHVlIDw8IDg7CisKKwlpZiAoYlNldCA9PSAxKSB7CisJCS8qIGZsb3cgY29udHJvbCwgYm94IHdpbGwgaW5oaWJpdCB4bWl0IGRhdGEgaWYgQ1RTIGxpbmUgaXMKKwkJICogYXNzZXJ0ZWQgKi8KKwkJTVNSX1ZhbHVlID0gU0VSSUFMX01TUl9DVFM7CisJfSBlbHNlIHsKKwkJLyogQm94IHdpbGwgbm90IGluaGltYmUgeG1pdCBkYXRhIGR1ZSB0byBDVFMgbGluZSAqLworCQlNU1JfVmFsdWUgPSAwOworCX0KKwlNT1VUX1ZhbHVlIHw9IE1TUl9WYWx1ZTsKKworCXN0YXR1cyA9CisJICAgIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICBRVF9IV19GTE9XX0NPTlRST0xfTUFTSywgMHg0MCwgTU9VVF9WYWx1ZSwKKwkJCSAgICBVYXJ0TnVtYmVyLCBOVUxMLCAwLCAzMDApOworCXJldHVybiBzdGF0dXM7CisKK30KKworc3RhdGljIGludCBCb3hTZXRTV19GbG93Q3RybChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBfX3UxNiBVYXJ0TnVtYmVyLAorCQkJICAgICB1bnNpZ25lZCBjaGFyIHN0b3BfY2hhciwgdW5zaWduZWQgY2hhciBzdGFydF9jaGFyKQoreworCV9fdTE2IG5TV2Zsb3dvdXQ7CisJaW50IHJlc3VsdDsKKworCW5TV2Zsb3dvdXQgPSBzdGFydF9jaGFyIDw8IDg7CisJblNXZmxvd291dCA9ICh1bnNpZ25lZCBzaG9ydClzdG9wX2NoYXI7CisKKwlyZXN1bHQgPQorCSAgICB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgUVRfU1dfRkxPV19DT05UUk9MX01BU0ssIDB4NDAsIG5TV2Zsb3dvdXQsCisJCQkgICAgVWFydE51bWJlciwgTlVMTCwgMCwgMzAwKTsKKwlyZXR1cm4gcmVzdWx0OworCit9CitzdGF0aWMgaW50IEJveERpc2FibGVfU1dfRmxvd0N0cmwoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191MTYgVWFydE51bWJlcikKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0KKwkgICAgdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgIFFUX1NXX0ZMT1dfQ09OVFJPTF9ESVNBQkxFLCAweDQwLCAwLCBVYXJ0TnVtYmVyLAorCQkJICAgIE5VTEwsIDAsIDMwMCk7CisJcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBnZXRfdXNiX3NlcmlhbChwb3J0LCBfX2Z1bmNfXyk7CisJbXlkYmcoIiVzIC0gcG9ydCAlZFxuIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuOworCisJZG93bigmcG9ydC0+c2VtKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisJLyogc2h1dCBkb3duIGFueSBidWxrIHJlYWRzIHRoYXQgbWF5IGJlIGdvaW5nIG9uICovCisvKgl1c2JfdW5saW5rX3VyYiAocG9ydC0+cmVhZF91cmIpOyAqLworCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gKi8KKwlwb3J0LT5SeEhvbGRpbmcgPSAxOworCW15ZGJnKCIlcyAtIHBvcnQtPlJ4SG9sZGluZyA9IDFcbiIsIF9fZnVuY19fKTsKKworZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHNlcmlhbF91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9CisJICAgIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19mdW5jX18pOworCXVuc2lnbmVkIGludCByZXN1bHQ7CisKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuOworCWRvd24oJnBvcnQtPnNlbSk7CisKKwlteWRiZygiJXMgLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICghcG9ydC0+b3Blbl9jb3VudCkgeworCQlteWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAocG9ydC0+UnhIb2xkaW5nID09IDEpIHsKKwkJbXlkYmcoIiVzIC1wb3J0LT5SeEhvbGRpbmcgPT0gMVxuIiwgX19mdW5jX18pOworCisJCXBvcnQtPlJ4SG9sZGluZyA9IDA7CisJCW15ZGJnKCIlcyAtIHBvcnQtPlJ4SG9sZGluZyA9IDBcbiIsIF9fZnVuY19fKTsKKworCQkvKiBpZiB3ZSBoYXZlIGEgYnVsayBlbmRwb2ludCwgc3RhcnQgaXQgdXAgKi8KKwkJaWYgKChzZXJpYWwtPm51bV9idWxrX2luKSAmJiAocG9ydC0+UmVhZEJ1bGtTdG9wcGVkID09IDEpKSB7CisJCQkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLworCQkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJCQkgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJCQkgIHBvcnQtPgorCQkJCQkJCSAgYnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCSAgcG9ydC0+cmVhZF91cmItPgorCQkJCQkgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJCSAgcXRfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChyZXN1bHQpCisJCQkJZXJyKCIlcyAtIGZhaWxlZCByZXN0YXJ0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsCisJCQkJICAgIF9fZnVuY19fLCByZXN1bHQpOworCQl9CisJfQorZXhpdDoKKwl1cCgmcG9ydC0+c2VtKTsKKwlyZXR1cm47CisKK30KKworc3RhdGljIGludCBzZXJpYWxfYnJlYWsoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPQorCSAgICAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdldF91c2Jfc2VyaWFsKHBvcnQsIF9fZnVuY19fKTsKKwlfX3UxNiBVYXJ0TnVtYmVyLCBCcmVha19WYWx1ZTsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0OworCisJVWFydE51bWJlciA9IHBvcnQtPnR0eS0+aW5kZXggLSBzZXJpYWwtPm1pbm9yOworCWlmICghc2VyaWFsKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChicmVha19zdGF0ZSA9PSAtMSkKKwkJQnJlYWtfVmFsdWUgPSAxOworCWVsc2UKKwkJQnJlYWtfVmFsdWUgPSAwOworCisJZG93bigmcG9ydC0+c2VtKTsKKworCW15ZGJnKCIlcyAtIHBvcnQgJWRcbiIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKCFwb3J0LT5vcGVuX2NvdW50KSB7CisJCW15ZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5cbiIsIF9fZnVuY19fKTsKKwkJZ290byBleGl0OworCX0KKworCXJlc3VsdCA9CisJICAgIHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICBRVF9CUkVBS19DT05UUk9MLCAweDQwLCBCcmVha19WYWx1ZSwgVWFydE51bWJlciwKKwkJCSAgICBOVUxMLCAwLCAzMDApOworCitleGl0OgorCXVwKCZwb3J0LT5zZW0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlvY3RsX3NlcmlhbF91c2Ioc3RydWN0IGlub2RlICppbm5vZCwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCisJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisKKwl1bnNpZ25lZCBlcnI7CisJdW5zaWduZWQgdWNPUFJfTmV3VmFsdWUsIHVjX1ZhbHVlOworCWludCAqcF9OdW1fb2ZfYWRhcHRlcnMsIGNvdW50cywgaW5kZXgsICpwX1FNQ1JfVmFsdWU7CisJc3RydWN0IGlkZW50aXR5ICpwX0lkZW50aXR5X29mOworCXN0cnVjdCBpZGVudGl0eSBJZGVudGl0eV9vZjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqbGFzdHNlcmlhbCwgKnNlcmlhbDsKKworCW15ZGJnKEtFUk5fREVCVUcgImlvY3RsX3NlcmlhbF91c2IgIGNtZCA9XG4iKTsKKwlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gU0VSSUFMUVRfUENJX0lPQ19NQUdJQykKKwkJcmV0dXJuIC1FTk9UVFk7CisJaWYgKF9JT0NfTlIoY21kKSA+IFNFUklBTFFUX0lPQ19NQVhOUikKKwkJcmV0dXJuIC1FTk9UVFk7CisJbXlkYmcoS0VSTl9ERUJVRyAiaW9jdGxfc2VyaWFsX3VzYiAgY21kID0gMHgleFxuIiwgY21kKTsKKwllcnIgPSAwOworCXN3aXRjaCAoY21kKSB7CisKKwljYXNlIFNFUklBTFFUX1dSSVRFX1FNQ1I6CisJCWVyciA9IC1FTk9UVFk7CisJCWluZGV4ID0gYXJnID4+IDE2OworCQljb3VudHMgPSAwOworCisJCXVjT1BSX05ld1ZhbHVlID0gYXJnOworCisJCWVyciA9IEVtdWxhdGVXcml0ZVFNQ1JfUmVnKGluZGV4LCB1Y09QUl9OZXdWYWx1ZSk7CisJCWJyZWFrOworCisJY2FzZSBTRVJJQUxRVF9SRUFEX1FNQ1I6CisJCWVyciA9IC1FTk9UVFk7CisJCXBfUU1DUl9WYWx1ZSA9IChpbnQgKilhcmc7CisJCWluZGV4ID0gYXJnID4+IDE2OworCQljb3VudHMgPSAwOworCisJCWVyciA9IEVtdWxhdGVSZWFkUU1DUl9SZWcoaW5kZXgsICZ1Y19WYWx1ZSk7CisJCWlmIChlcnIgPT0gMCkKKwkJCWVyciA9IHB1dF91c2VyKHVjX1ZhbHVlLCBwX1FNQ1JfVmFsdWUpOworCQlicmVhazsKKworCWNhc2UgU0VSSUFMUVRfR0VUX05VTU9GX1VOSVRTOgorCQlwX051bV9vZl9hZGFwdGVycyA9IChpbnQgKilhcmc7CisJCWNvdW50cyA9IDA7CS8qIEluaXRpYWxpemUgY291bnRzIHRvIHplcm8gKi8KKwkJLyogc3RydWN0IHVzYl9zZXJpYWwgKmxhc3RzZXJpYWwgPSBzZXJpYWxfdGFibGVbMF0sICpzZXJpYWw7ICovCisJCWxhc3RzZXJpYWwgPSBzZXJpYWxfdGFibGVbMF07CisKKwkJbXlkYmcoS0VSTl9ERUJVRyAiU0VSSUFMUVRfR0VUX05VTU9GX1VOSVRTIFxuIik7CisJCS8qIGlmIGZpcnN0IHBvaW50ZXIgaXMgbm9udWxsLCB3ZSBhdCBsZWFzdCBoYXZlIG9uZSBib3ggKi8KKwkJaWYgKGxhc3RzZXJpYWwpCisJCQljb3VudHMgPSAxOwkvKiB3ZSBhdCBsZWFzdCBoYXZlIG9uZSBib3ggKi8KKworCQlmb3IgKGluZGV4ID0gMTsgaW5kZXggPCBTRVJJQUxfVFRZX01JTk9SUzsgaW5kZXgrKykgeworCQkJc2VyaWFsID0gc2VyaWFsX3RhYmxlW2luZGV4XTsKKwkJCWlmIChzZXJpYWwpIHsKKwkJCQlpZiAoc2VyaWFsICE9IGxhc3RzZXJpYWwpIHsKKwkJCQkJLyogd2UgaGFkIGEgY2hhbmdlIGluIHRoZSBhcnJheSwgaGVuY2UKKwkJCQkJICogYW5vdGhlciBib3ggaXMgdGhlcmUgKi8KKwkJCQkJbGFzdHNlcmlhbCA9IHNlcmlhbDsKKwkJCQkJY291bnRzKys7CisJCQkJfQorCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCX0KKworCQlteWRiZyhLRVJOX0RFQlVHICJpb2N0bF9zZXJpYWxfdXNiIHdyaXR0aW5nIGNvdW50cyA9ICVkIiwKKwkJICAgICAgY291bnRzKTsKKworCQllcnIgPSBwdXRfdXNlcihjb3VudHMsIHBfTnVtX29mX2FkYXB0ZXJzKTsKKworCQlicmVhazsKKwljYXNlIFNFUklBTFFUX0dFVF9USElTX1VOSVQ6CisJCWNvdW50cyA9IDA7CisJCXBfSWRlbnRpdHlfb2YgPSAoc3RydWN0IGlkZW50aXR5ICopYXJnOworCQkvKiBjb3B5IHVzZXIgc3RydWN0dXJlIHRvIGxvY2FsIHZhcmlhYmxlICovCisJCWdldF91c2VyKElkZW50aXR5X29mLmluZGV4LCAmcF9JZGVudGl0eV9vZi0+aW5kZXgpOworCQlteWRiZyhLRVJOX0RFQlVHICJTRVJJQUxRVF9HRVRfVEhJU19VTklUIElkZW50aXR5X29mLmluZGV4XG4iKTsKKwkJbXlkYmcoS0VSTl9ERUJVRworCQkgICAgICAiU0VSSUFMUVRfR0VUX1RISVNfVU5JVCBJZGVudGl0eV9vZi5pbmRleD0gMHgleFxuIiwKKwkJICAgICAgSWRlbnRpdHlfb2YuaW5kZXgpOworCisJCWVyciA9IC1FTk9UVFk7CisJCXNlcmlhbCA9IGZpbmRfdGhlX2JveChJZGVudGl0eV9vZi5pbmRleCk7CisJCWlmIChzZXJpYWwpIHsKKwkJCWVyciA9CisJCQkgICAgcHV0X3VzZXIoc2VyaWFsLT5wcm9kdWN0LAorCQkJCSAgICAgJnBfSWRlbnRpdHlfb2YtPm5faWRlbnRpdHkpOworCisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFNFUklBTFFUX0lTNDIyX0VYVEVOREVEOgorCQllcnIgPSAtRU5PVFRZOworCQlteWRiZyhLRVJOX0RFQlVHICJTRVJJQUxRVF9JUzQyMl9FWFRFTkRFRCBcbiIpOworCQlpbmRleCA9IGFyZyA+PiAxNjsKKworCQljb3VudHMgPSAwOworCisJCW15ZGJnKEtFUk5fREVCVUcKKwkJICAgICAgIlNFUklBTFFUX0lTNDIyX0VYVEVOREVELCBsb29raW5nIElkZW50aXR5X29mLmluZGV4dCA9IDB4JXhcbiIsCisJCSAgICAgIGluZGV4KTsKKwkJc2VyaWFsID0gZmluZF90aGVfYm94KGluZGV4KTsKKwkJaWYgKHNlcmlhbCkgeworCQkJbXlkYmcoIiVzIGluZGV4ID0gMHgleCwgc2VyaWFsID0gMHglcFxuIiwgX19mdW5jX18sCisJCQkgICAgICBpbmRleCwgc2VyaWFsKTsKKwkJCWZvciAoY291bnRzID0gMDsgc2VycXRfNDIyX3RhYmxlW2NvdW50c10gIT0gMDsgY291bnRzKyspIHsKKworCQkJCW15ZGJnCisJCQkJICAgICgiJXMgc2VyaWFsLT5wcm9kdWN0ID0gPSAweCV4LCBzZXJxdF80MjJfdGFibGVbY291bnRzXSA9IDB4JXhcbiIsCisJCQkJICAgICBfX2Z1bmNfXywgc2VyaWFsLT5wcm9kdWN0LAorCQkJCSAgICAgc2VycXRfNDIyX3RhYmxlW2NvdW50c10pOworCQkJCWlmIChzZXJpYWwtPnByb2R1Y3QgPT0gc2VycXRfNDIyX3RhYmxlW2NvdW50c10pIHsKKwkJCQkJZXJyID0gMDsKKworCQkJCQlteWRiZworCQkJCQkgICAgKCIlcyBmb3VuZCBtYXRjaCBmb3IgNDIyZXh0ZW5kZWRcbiIsCisJCQkJCSAgICAgX19mdW5jX18pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PVFRZOworCX0KKworCW15ZGJnKCIlcyByZXR1cm5pbmcgZXJyID0gMHgleFxuIiwgX19mdW5jX18sIGVycik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICpmaW5kX3RoZV9ib3godW5zaWduZWQgaW50IGluZGV4KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpsYXN0c2VyaWFsLCAqZm91bmRzZXJpYWwsICpzZXJpYWw7CisJaW50IGNvdW50cyA9IDAsIGluZGV4MjsKKwlsYXN0c2VyaWFsID0gc2VyaWFsX3RhYmxlWzBdOworCWZvdW5kc2VyaWFsID0gTlVMTDsKKwlmb3IgKGluZGV4MiA9IDA7IGluZGV4MiA8IFNFUklBTF9UVFlfTUlOT1JTOyBpbmRleDIrKykgeworCQlzZXJpYWwgPSBzZXJpYWxfdGFibGVbaW5kZXgyXTsKKworCQlteWRiZygiJXMgaW5kZXggPSAweCV4LCBpbmRleDIgPSAweCV4LCBzZXJpYWwgPSAweCVwXG4iLAorCQkgICAgICBfX2Z1bmNfXywgaW5kZXgsIGluZGV4Miwgc2VyaWFsKTsKKworCQlpZiAoc2VyaWFsKSB7CisJCQkvKiBmaXJzdCBzZWUgaWYgdGhpcyBpcyB0aGUgdW5pdCB3ZSdlciBsb29raW5nIGZvciAqLworCQkJbXlkYmcKKwkJCSAgICAoIiVzIGluc2lkZSBpZihzZXJpYWwpIGNvdW50cyA9IDB4JXggLCBpbmRleCA9IDB4JXhcbiIsCisJCQkgICAgIF9fZnVuY19fLCBjb3VudHMsIGluZGV4KTsKKwkJCWlmIChjb3VudHMgPT0gaW5kZXgpIHsKKwkJCQkvKiB3ZSBmb3VuZCB0aGUgb25lIHdlJ3JlIGxvb2tpbmcgZm9yLCBjb3B5dGhlCisJCQkJICogcHJvZHVjdCBJZCB0byB1c2VyICovCisJCQkJbXlkYmcoIiVzIHdlIGZvdW5kIHRoZSBvbmUgd2UncmUgbG9va2luZyBmb3Igc2VyaWFsID0gMHglcFxuIiwKKwkJCQkgICAgIF9fZnVuY19fLCBzZXJpYWwpOworCQkJCWZvdW5kc2VyaWFsID0gc2VyaWFsOworCQkJCWJyZWFrOworCQkJfQorCisJCQlpZiAoc2VyaWFsICE9IGxhc3RzZXJpYWwpIHsKKwkJCQkvKiB3aGVuIHdlIGhhdmUgYSBjaGFuZ2UgaW4gdGhlIHBvaW50ZXIgKi8KKwkJCQlsYXN0c2VyaWFsID0gc2VyaWFsOworCQkJCWNvdW50cysrOworCQkJfQorCQl9IGVsc2UKKwkJCWJyZWFrOwkvKiBubyBtYXRjaGVzICovCisJfQorCisJbXlkYmcoIiVzIHJldHVybmluZyBmb3VuZHNlcmlhbCA9IDB4JXBcbiIsIF9fZnVuY19fLCBmb3VuZHNlcmlhbCk7CisJcmV0dXJuIGZvdW5kc2VyaWFsOworfQorCitzdGF0aWMgaW50IEVtdWxhdGVXcml0ZVFNQ1JfUmVnKGludCBpbmRleCwgdW5zaWduZWQgdWNfdmFsdWUpCit7CisKKwlfX3UxNiBBVENfTW9kZSA9IDA7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBxdF9nZXRfZGV2aWNlX2RhdGEgRGV2aWNlRGF0YTsKKwl1bnNpZ25lZCB1Y190ZW1wID0gMDsKKwlteWRiZygiSW5zaWRlICVzLCB1Y192YWx1ZSA9IDB4JXhcbiIsIF9fZnVuY19fLCB1Y192YWx1ZSk7CisKKwlEZXZpY2VEYXRhLnBvcnRhID0gMDsKKwlEZXZpY2VEYXRhLnBvcnRiID0gMDsKKwlzZXJpYWwgPSBmaW5kX3RoZV9ib3goaW5kZXgpOworCS8qIERldGVybWluZSBEdXBsZXggbW9kZSAqLworCWlmICghKHNlcmlhbCkpCisJCXJldHVybiAtRU5PVFRZOworCXN0YXR1cyA9IGJveF9nZXRfZGV2aWNlKHNlcmlhbCwgJkRldmljZURhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW15ZGJnKF9fRklMRV9fICJib3hfc2V0X2RldmljZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXVjX3RlbXAgPSB1Y192YWx1ZSAmIFFNQ1JfSEFMRl9EVVBMRVhfTUFTSzsKKwlzd2l0Y2ggKHVjX3RlbXApIHsKKwljYXNlIFFNQ1JfRlVMTF9EVVBMRVg6CisJCURldmljZURhdGEucG9ydGEgJj0gfkRVUE1PREVfQklUUzsKKwkJRGV2aWNlRGF0YS5wb3J0YSB8PSBGVUxMX0RVUExFWDsKKwkJQVRDX01vZGUgPSBBVENfRElTQUJMRUQ7CisJCWJyZWFrOworCWNhc2UgUU1DUl9IQUxGX0RVUExFWF9SVFM6CisJCURldmljZURhdGEucG9ydGEgJj0gfkRVUE1PREVfQklUUzsKKwkJRGV2aWNlRGF0YS5wb3J0YSB8PSBIQUxGX0RVUExFWF9SVFM7CisJCUFUQ19Nb2RlID0gQVRDX1JUU19FTkFCTEVEOworCQlicmVhazsKKwljYXNlIFFNQ1JfSEFMRl9EVVBMRVhfRFRSOgorCQlEZXZpY2VEYXRhLnBvcnRhICY9IH5EVVBNT0RFX0JJVFM7CisJCURldmljZURhdGEucG9ydGEgfD0gSEFMRl9EVVBMRVhfRFRSOworCQlBVENfTW9kZSA9IEFUQ19EVFJfRU5BQkxFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJdWNfdGVtcCA9IHVjX3ZhbHVlICYgUU1DUl9DT05ORUNUT1JfTUFTSzsKKwlzd2l0Y2ggKHVjX3RlbXApIHsKKwljYXNlIFFNQ1JfTU9ERU1fQ09OVFJPTDoKKwkJRGV2aWNlRGF0YS5wb3J0YiAmPSB+TE9PUE1PREVfQklUUzsJLyogcmVzZXQgY29ubmVjdGlvbiBiaXRzICovCisJCURldmljZURhdGEucG9ydGIgfD0gTU9ERU1fQ1RSTDsKKwkJYnJlYWs7CisJY2FzZSBRTUNSX0FMTF9MT09QQkFDSzoKKwkJRGV2aWNlRGF0YS5wb3J0YiAmPSB+TE9PUE1PREVfQklUUzsJLyogcmVzZXQgY29ubmVjdGlvbiBiaXRzICovCisJCURldmljZURhdGEucG9ydGIgfD0gQUxMX0xPT1BCQUNLOworCQlicmVhazsKKwl9CisKKwlteWRiZyhfX0ZJTEVfXyAiQ2FsbGluZyBib3hfc2V0X2RldmljZSB3aXRoIGZhaWxlZFxuIik7CisJc3RhdHVzID0gYm94X3NldF9kZXZpY2Uoc2VyaWFsLCAmRGV2aWNlRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbXlkYmcoX19GSUxFX18gImJveF9zZXRfZGV2aWNlIGZhaWxlZFxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJLyogVGhpcyBiaXQgKG90aGVyd2lzZSB1bnVzZWQpIGknbGwgdXNlZCAgdG8gZGV0ZWN0IHdoZXRoZXIgQVRDIGlzCisJICogc2VsZWN0ZWQgKi8KKwlpZiAodWNfdmFsdWUgJiBRTUNSX1JYX0VOX01BU0spIHsKKworCQlteWRiZyhfX0ZJTEVfXworCQkgICAgICAiY2FsbGluZyBCb3hzZXRBVEMgd2l0aCBEZXZpY2VEYXRhLnBvcnRhID0gMHgleCBhbmQgRGV2aWNlRGF0YS5wb3J0YiA9IDB4JXhcbiIsCisJCSAgICAgIERldmljZURhdGEucG9ydGEsIERldmljZURhdGEucG9ydGIpOworCQlzdGF0dXMgPSBCb3hTZXRBVEMoc2VyaWFsLCBBVENfTW9kZSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlteWRiZyhfX0ZJTEVfXyAiQm94U2V0QVRDIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gc3RhdHVzOworCQl9CisJfSBlbHNlIHsKKworCQlteWRiZyhfX0ZJTEVfXworCQkgICAgICAiY2FsbGluZyBCb3hzZXRBVEMgd2l0aCBEZXZpY2VEYXRhLnBvcnRhID0gMHgleCBhbmQgRGV2aWNlRGF0YS5wb3J0YiA9IDB4JXhcbiIsCisJCSAgICAgIERldmljZURhdGEucG9ydGEsIERldmljZURhdGEucG9ydGIpOworCQlzdGF0dXMgPSBCb3hTZXRBVEMoc2VyaWFsLCBBVENfRElTQUJMRUQpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJbXlkYmcoX19GSUxFX18gIkJveFNldEFUQyBmYWlsZWRcbiIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCX0KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgRW11bGF0ZVJlYWRRTUNSX1JlZyhpbnQgaW5kZXgsIHVuc2lnbmVkICp1Y192YWx1ZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCWludCBzdGF0dXM7CisJc3RydWN0IHF0X2dldF9kZXZpY2VfZGF0YSBEZXZpY2VEYXRhOworCV9fdTggdWNfdGVtcDsKKworCSp1Y192YWx1ZSA9IDA7CisKKwlzZXJpYWwgPSBmaW5kX3RoZV9ib3goaW5kZXgpOworCWlmICghKHNlcmlhbCkpCisJCXJldHVybiAtRU5PVFRZOworCisJc3RhdHVzID0gYm94X2dldF9kZXZpY2Uoc2VyaWFsLCAmRGV2aWNlRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbXlkYmcoX19GSUxFX18gImJveF9nZXRfZGV2aWNlIGZhaWxlZFxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCXVjX3RlbXAgPSBEZXZpY2VEYXRhLnBvcnRhICYgRFVQTU9ERV9CSVRTOworCXN3aXRjaCAodWNfdGVtcCkgeworCWNhc2UgRlVMTF9EVVBMRVg6CisJCSp1Y192YWx1ZSB8PSBRTUNSX0ZVTExfRFVQTEVYOworCQlicmVhazsKKwljYXNlIEhBTEZfRFVQTEVYX1JUUzoKKwkJKnVjX3ZhbHVlIHw9IFFNQ1JfSEFMRl9EVVBMRVhfUlRTOworCQlicmVhazsKKwljYXNlIEhBTEZfRFVQTEVYX0RUUjoKKwkJKnVjX3ZhbHVlIHw9IFFNQ1JfSEFMRl9EVVBMRVhfRFRSOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKiBJIHVzZSB0aGlzIGZvciBBVEMgY29udHJvbCBzZSAqLworCXVjX3RlbXAgPSBEZXZpY2VEYXRhLnBvcnRiICYgTE9PUE1PREVfQklUUzsKKworCXN3aXRjaCAodWNfdGVtcCkgeworCWNhc2UgQUxMX0xPT1BCQUNLOgorCQkqdWNfdmFsdWUgfD0gUU1DUl9BTExfTE9PUEJBQ0s7CisJCWJyZWFrOworCWNhc2UgTU9ERU1fQ1RSTDoKKwkJKnVjX3ZhbHVlIHw9IFFNQ1JfTU9ERU1fQ09OVFJPTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisKKwl9CisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCBfX2luaXQgc2VycXRfdXNiX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgcmVzdWx0OworCWludCBzdGF0dXMgPSAwOworCisJbXlkYmcoIiVzXG4iLCBfX2Z1bmNfXyk7CisJdHR5X3NldF9vcGVyYXRpb25zKCZzZXJpYWxfdHR5X2RyaXZlciwgJnNlcmlhbF9vcHMpOworCXJlc3VsdCA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbF90dHlfZHJpdmVyKTsKKwlpZiAocmVzdWx0KSB7CisJCW15ZGJnKCJ0dHlfcmVnaXN0ZXJfZHJpdmVyIGZhaWxlZCBlcnJvciA9IDB4JXgiLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qIEluaXRhbGl6ZSBvdXIgZ2xvYmFsIGRhdGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU0VSSUFMX1RUWV9NSU5PUlM7ICsraSkKKwkJc2VyaWFsX3RhYmxlW2ldID0gTlVMTDsKKworCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnNlcnF0X3VzYl9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZCBmb3IgdGhlICIgX19GSUxFX18KKwkJICAgICIgZHJpdmVyLiBFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlzdGF0dXMgPSAwOwkJLyogRHluYW1pYyBhc3NpZ25tZW50IG9mIG1ham9yIG51bWJlciAqLworCW1ham9yX251bWJlciA9CisJICAgIHJlZ2lzdGVyX2NocmRldihzdGF0dXMsICJTZXJpYWxRVF9VU0IiLCAmc2VyaWFscXRfdXNiX2ZvcHMpOworCWlmIChtYWpvcl9udW1iZXIgPCAwKSB7CisJCW15ZGJnKEtFUk5fREVCVUcgIk5vIGRldmljZXMgZm91bmQgXG5cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0gZWxzZQorCQlteWRiZyhLRVJOX0RFQlVHICJTZXJRVF9VU0IgbWFqb3IgbnVtYmVyIGFzc2lnbm1lbnQgPSAlZCBcblxuIiwKKwkJICAgICAgbWFqb3JfbnVtYmVyKTsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNlcnF0X3VzYl9leGl0KHZvaWQpCit7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJnNlcnF0X3VzYl9kcml2ZXIpOworCXR0eV91bnJlZ2lzdGVyX2RyaXZlcigmc2VyaWFsX3R0eV9kcml2ZXIpOworCXVucmVnaXN0ZXJfY2hyZGV2KG1ham9yX251bWJlciwgIlNlcmlhbFFUX1VTQiIpOworfQorCittb2R1bGVfaW5pdChzZXJxdF91c2JfaW5pdCk7Cittb2R1bGVfZXhpdChzZXJxdF91c2JfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvZ2Jkb3dubG9hZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3MvZ2Jkb3dubG9hZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTQ0MzJiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2diZG93bmxvYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDgyMTUgKzAsMCBAQAotI2RlZmluZSBNT0pBVkVfVUNPREVfVkVSU19TVFJJTkcJIjEuMiIKLSNkZWZpbmUgTU9KQVZFX1VDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEyOjIyIgotI2RlZmluZSBNT0pBVkVfVUNPREVfSE9TVElGX0lEICAJMwotCi1zdGF0aWMgczMyIE1OdW1TZWN0aW9ucyA9IDB4MjsKLXN0YXRpYyB1MzIgTVNlY3Rpb25TaXplW10gPQotewotCTB4MDAwMDgwMDAsIDB4MDAwMTAwMDAsCi19OwotCi1zdGF0aWMgdTMyIE1TZWN0aW9uU3RhcnRbXSA9Ci17Ci0JMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKLX07Ci0KLXN0YXRpYyB1OCBNb2phdmVVQ29kZVsyXVs2NTUzNl0gPQotewotCXsKLQkweDEyLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwKLQkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweGEyLCAweDQwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4MDksIDB4MDAsIDB4YTIsIDB4NDksIDB4ZGQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweGEyLCAweDQwLAotCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHgwMCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MWYsIDB4ZTksIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZTksCi0JMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHg0MCwgMHhlOSwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE2LCAweDAwLCAweDI5LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwZiwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjksIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDExLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MGUsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgyYiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDI3LCAweDAwLCAweDE0LCAweGJjLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDEsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKLQkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHhiNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGQ5LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4YjYsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4OTUsIDB4ZTgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHhlOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MjIsIDB4NTAsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweGE1LCAweGE1LCAweDAwLCAweGE2LCAweGI0LCAweGE3LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweGEyLCAweDUwLAotCTB4YjUsIDB4NzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHgwMCwgMHhhMiwgMHg0NSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDQxLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4N2YsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ZjUsIDB4Y2YsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDEsIDB4MDAsIDB4ZmEsCi0JMHhiMywgMHgzMywgMHgwMSwgMHgwMCwgMHhhNSwgMHhhNSwgMHgwMCwgMHhkYSwgMHhiNSwgMHhhYiwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDAwLCAweGEyLCAweDUwLCAweGI1LCAweDYzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLCAweGVkLCAweDhiLCAweDAxLCAweDAwLAotCTB4ZDUsIDB4MDAsIDB4MDAsIDB4NDYsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGVmLCAweDhiLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZTMsIDB4OGYsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGQ3LCAweDhkLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLCAweGYxLCAweGRiLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZTksIDB4OGIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhlOSwgMHhlMywgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMywgMHgzMywgMHgwMSwgMHgwMCwKLQkweDJjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NGMsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhlYiwgMHhkYiwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGRhLCAweDgxLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsCi0JMHhiNSwgMHhkYiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweGRhLCAweGI1LCAweGNmLCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGE3LAotCTB4YjQsIDB4ODcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRhLCAweGI1LCAweDhiLCAweDAxLCAweDAwLAotCTB4NjIsIDB4MDAsIDB4MjYsIDB4NGMsIDB4YjUsIDB4NjMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhiNSwgMHhjZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkZiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQ1LCAweDAwLCAweDAwLCAweDUyLCAweGIzLCAweDMzLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLAotCTB4NGIsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZGYsIDB4ZjcsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhlZiwgMHhkZiwgMHg4YiwgMHgwMSwgMHgwMCwgMHg2OSwgMHgwMCwgMHgyMiwgMHg0MCwKLQkweGRmLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGQ3LCAweGU1LCAweDAxLCAweDAwLCAweGY4LCAweDAwLCAweDAwLCAweGRhLAotCTB4YjMsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkOSwKLQkweGQ1LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGQ3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiNSwgMHhmMywgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweGRhLCAweDdiLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLAotCTB4ZGQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4NWQsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHhkYSwgMHhlNywgMHg4YiwgMHgwMSwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZTcsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHhlNywgMHg5NywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweGQ3LCAweGIxLCAweDAxLCAweDAwLCAweGQ1LCAweDAwLCAweDAwLCAweDVlLAotCTB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZTUsIDB4OGIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhlNSwgMHhlMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGRhLCAweGI1LCAweDhmLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4YjUsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGU1LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZGQsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHg5NiwgMHgwMCwgMHgyMiwgMHhmNSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVlLCAweGQ1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ZWIsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjUsCi0JMHhkNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhlYSwgMHhkNCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY3LCAweGUzLCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLAotCTB4ZDcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ZGQsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHhkNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweGU5LCAweDk3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY0LCAweGQ3LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZDUsIDB4MDAsIDB4MDAsIDB4NGEsIDB4YjMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGEsCi0JMHhkZCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhiNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweGE2LAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHhhNiwKLQkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAotCTB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgxMywgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAotCTB4ZDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGViLCAweGQ2LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgxMywgMHgwMCwgMHhlYiwgMHhkNiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGE2LAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4ZDYsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGRmLCAweGIxLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0YiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDA0LCAweDAwLCAweDQwLCAweGRkLCAweDk5LCAweDAxLCAweDAwLCAweGI3LCAweDAwLCAweDEzLCAweGJjLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDgsIDB4MDAsIDB4NDAsIDB4ZGQsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHg5NSwgMHhlOCwKLQkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGNhLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YzgsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4MWYsIDB4ZmQsCi0JMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHhjNywgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAotCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKLQkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweGQzLCAweDAwLCAweGEyLCAweGZmLAotCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4MDAsIDB4MDYsIDB4ZmUsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhiMywgMHhlMywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMSwgMHgwMCwgMHhmYSwgMHhiMywgMHhjMywgMHgwMCwgMHgwMCwKLQkweGRhLCAweDAwLCAweDAwLCAweDQyLCAweDhkLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhlYiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDk2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGI1LCAweGViLCAweDAxLCAweDAwLCAweGU0LCAweDAwLCAweDg0LCAweDk2LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjUsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiNSwgMHg4MywgMHgwMSwgMHgwMCwgMHhkZSwgMHgwMCwgMHhhMiwgMHg0MSwKLQkweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDJkLCAweDgxLCAweDAxLCAweDAwLAotCTB4MjYsIDB4MDEsIDB4MDAsIDB4NDEsIDB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhiMywgMHhjMywgMHgwMSwgMHgwMCwgMHhkYSwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4ZCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweGRhLCAweGI1LCAweGJmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHhiOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGI4LCAweGUzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRjLCAweGI5LCAweGViLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YjgsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MDAsIDB4ZGMsCi0JMHhiOSwgMHhlNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRiLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDI3LCAweDAxLCAweDAwLCAweDQyLAotCTB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgyZCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDJkLCAweDkxLCAweDAxLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MmQsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4MSwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDg0LCAweDk2LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweGEwLCAweGRjLAotCTB4YjksIDB4NmIsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmQsIDB4OTEsIDB4MDAsIDB4MDAsCi0JMHhmOCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZCwgMHg4MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweGRhLCAweDhiLCAweGIwLCAweDAwLCAweDAwLAotCTB4MTEsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEzLCAweDQ0LCAweDg5LCAweGVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhkOSwgMHgwMCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweGI1LCAweGYzLCAweDAxLCAweDAwLCAweDBjLCAweDAxLCAweGEwLCAweGRhLCAweDhiLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQ1LCAweDg4LCAweDg4LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4OGEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDEsIDB4OTAsIDB4NDQsIDB4OGEsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4YiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0NSwKLQkweDhhLCAweGE4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUwLCAweDhiLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ZjksIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHhjZiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMSwgMHgwMCwgMHhmYywgMHgxOSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDAxLCAweDQwLCAweGRhLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGRhLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjksIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHgxNiwgMHgwMSwgMHg5ZiwgMHhkYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDEsIDB4OWYsIDB4OTQsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGI1LCAweGYzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4YjQsIDB4OTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YjMsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHgxZCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDI5LCAweDAxLCAweDAwLCAweDUxLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjksIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MDEsIDB4MDAsIDB4NDksCi0JMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDI5LCAweDAxLCAweGEyLCAweDQxLCAweDkzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTEsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDA3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMSwgMHgyMCwgMHg0OCwgMHhhMSwgMHg1MSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDUwLCAweDAxLCAweDIyLCAweDRiLAotCTB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKLQkweDdlLCAweGIxLCAweDAxLCAweDAwLCAweDUxLCAweDAxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NGUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGYzLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YWYsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGYzLCAweDlmLCAweDAwLCAweDQwLCAweGJmLCAweGIzLCAweDAwLCAweDAwLAotCTB4NWYsIDB4MDEsIDB4MjIsIDB4Y2MsIDB4ODUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLAotCTB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGJhLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHhiYywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LAotCTB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDg4LCAweDAxLCAweDAwLCAweGRkLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDhiLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4ZiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZDIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGUxLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdmLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmMSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc3LCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDFhLCAweDAwLAotCTB4NWEsIDB4MDEsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NTIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgxYSwgMHgwMCwgMHg1YSwgMHgwMSwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgxYSwgMHgwMCwKLQkweDVhLCAweDAxLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDFhLCAweDAwLCAweDU1LCAweDAxLCAweDkxLCAweDgxLAotCTB4ODAsIDB4MzAsIDB4MWEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MWEsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHg5MSwgMHg4MiwgMHg4MCwgMHgzMCwgMHgxYSwgMHgwMCwgMHg1YSwgMHgwMSwgMHg0NiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTQsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMSwgMHgyMiwgMHg0MCwKLQkweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDk4LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDEsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDIsIDB4ZmYsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweGZmLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LAotCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhYSwgMHgwMSwgMHhhMiwgMHg0YywKLQkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGI2LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YjEsIDB4MDEsIDB4MjIsIDB4NDEsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTIsIDB4ZTAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0NCwKLQkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGIzLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLAotCTB4YjEsIDB4MDEsIDB4MDAsIDB4NWIsIDB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4OWYsIDB4MDAsIDB4YTAsCi0JMHg5ZSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGNiLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDEsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGM0LCAweDAxLCAweDkxLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHhjMywgMHgwMSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGM0LCAweDAxLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLAotCTB4NmYsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZjMsIDB4OWYsIDB4MDAsIDB4NTIsIDB4NmYsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4YzcsIDB4MDEsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGQxLCAweDAxLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgwMSwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkMSwgMHgwMSwgMHg1NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDZmLCAweDkzLCAweDAxLCAweDAwLAotCTB4ZjMsIDB4OWYsIDB4MDAsIDB4NTMsIDB4NmYsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGRhLCAweDAxLCAweDIyLCAweGRlLAotCTB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNSwgMHgwMSwgMHhhMiwgMHg0NCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQzLCAweGJmLCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjgsCi0JMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhlMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGQsCi0JMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhlNywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLCAweGVkLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4YTEsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NTcsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAotCTB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmNywgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwMSwgMHg4NCwgMHg0MSwKLQkweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGZhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4MDEsIDB4MDAsIDB4NDEsCi0JMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhiMSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweGRkLAotCTB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHhiMSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLCAweGE3LCAweGNiLCAweDAxLCAweDAwLAotCTB4YzUsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YTIsIDB4YmEsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMiwgMHhhOCwgMHhiMSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDU3LCAweDAxLCAweDAwLCAweDQwLCAweGUwLCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHgwMiwgMHgwMCwgMHg0ZCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGY1LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwMiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDc1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDVkLCAweDAyLCAweDAwLCAweGM3LAotCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg1ZCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVkLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGJhLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYiwgMHgwMiwgMHhiOSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MmQsIDB4MDIsIDB4YmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDMxLCAweDAyLCAweGJjLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgzMywgMHgwMiwgMHhiZCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM1LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDIsIDB4YmYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDM5LCAweDAyLCAweGM4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2IsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzZCwgMHgwMiwgMHhjYSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4M2YsIDB4MDIsIDB4Y2IsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MSwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQzLCAweDAyLCAweGNkLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHgwMiwgMHhjZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ3LCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGY3LCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4NjAsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDIsIDB4NDksIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjUsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKLQkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAotCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKLQkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCi0JMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAotCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKLQkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCi0JMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDgxLCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4NSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAotCTB4OGEsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTUsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKLQkweDk4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDllLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiYywgMHgwMiwgMHgwMCwgMHg0MiwKLQkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk0LCAweDAyLCAweDIyLCAweDQ0LAotCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHg1YSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMiwgMHgwMCwgMHhkZSwKLQkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NWEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAotCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWIsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMiwgMHgwMCwgMHg1NCwKLQkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGM1LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhOSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHgwMiwgMHgwMCwgMHg0NiwKLQkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCi0JMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAotCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKLQkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGI5LCAweDAyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsCi0JMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLAotCTB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YjgsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4Y2MsCi0JMHg4NSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGM3LCAweDAyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGM2LCAweDAyLCAweGEyLCAweGYyLAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMiwgMHg4MCwgMHhhNSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweGE1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4MDIsIDB4ODAsIDB4YTUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGQ2LCAweDAyLCAweDIwLCAweDRmLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4MDIsIDB4MjAsIDB4NGIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwMiwgMHgyMCwgMHg0NywKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDMsIDB4OTAsIDB4MDAsIDB4NDEsCi0JMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDE0LCAweDJmLCAweDRjLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMiwgMHhhMiwgMHhhNSwKLQkweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4MWYsIDB4OTEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGUzLCAweDAyLCAweDFmLCAweDkxLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4YTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhlNiwgMHgwMiwgMHgxZiwgMHg5MSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLAotCTB4ZTgsIDB4MDIsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjgsIDB4MDAsIDB4OTAsCi0JMHgyMCwgMHhhOSwgMHgwMSwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MjcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAxLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAzLCAweDAwLCAweDQwLAotCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwNywgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAyLCAweGEyLCAweGY4LCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDIyLCAweGYwLAotCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MjEsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgwYywKLQkweDg1LCAweDMwLCAweDAxLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDRkLCAweDg1LCAweDEwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDMsIDB4MDAsIDB4NGUsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MjAsIDB4NGYsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg0ZiwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweDM5LCAweDAzLCAweDAwLCAweDBjLCAweDg1LCAweDMwLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDIwLCAweDQzLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDMsIDB4MjIsIDB4ZjAsIDB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsCi0JMHgzOSwgMHgwMywgMHgwMCwgMHg0ZCwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgyMCwgMHg0MiwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAzLCAweDIyLCAweGYwLCAweDllLCAweDZlLCAweDAwLCAweDAwLAotCTB4MzksIDB4MDMsIDB4MDAsIDB4NGUsIDB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MjAsIDB4NDEsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMSwgMHgwMywgMHhhMiwgMHhmMCwgMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MjAsIDB4OTUsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OGQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgyMSwgMHg5NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDMsIDB4MDAsIDB4MTcsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4NTgsCi0JMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHg1OSwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDIwLCAweDRmLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDVhLAotCTB4ODUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDMsIDB4MDAsIDB4MTcsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHgxNCwgMHgyMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwMywgMHgyMiwgMHhmMCwKLQkweDllLCAweDZlLCAweDAwLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDU4LCAweDg1LCAweDEwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4MTQsIDB4MjAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDMsIDB4MjIsIDB4ZjAsCi0JMHg5ZSwgMHg2ZSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg1OSwgMHg4NSwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDE0LCAweDIwLCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDI3LCAweDAzLCAweGEyLCAweGYwLAotCTB4OWUsIDB4NmUsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OGQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg4LCAweGUwLCAweDAxLCAweDAwLAotCTB4MmYsIDB4MDMsIDB4YTIsIDB4NDIsIDB4MjEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YTUsIDB4YTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyMCwgMHg0MCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAzLCAweDAwLCAweDQ0LCAweDg0LCAweDMwLCAweDAxLCAweDAwLCAweDM5LCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MTQsIDB4MjAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHgwMywgMHhhMiwgMHhmMCwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg5LCAweGUwLCAweDAxLCAweDAwLCAweGUwLCAweDAwLCAweDgwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAotCTB4ODcsIDB4YjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQxLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAotCTB4ODcsIDB4YjQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg3LCAweGIwLCAweDAxLCAweDAwLAotCTB4NDIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ZjIsCi0JMHg4NiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMSwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDQxLCAweDAzLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDhmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDksIDB4MDMsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5ZiwgMHgwMCwgMHg0NywgMHg5OCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDA4LCAweDAwLCAweDQ3LCAweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDQ3LCAweDAzLCAweDAwLCAweDVjLAotCTB4OGYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgxNSwgMHgyZCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwKLQkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4ODIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMywgMHgyMiwgMHg1ZiwKLQkweDhkLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4NTMsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLAotCTB4ODYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgwMywgMHgwMCwgMHg0MSwgMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MmYsIDB4NDYsIDB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ1LAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OGIsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMywgMHhhMCwgMHg0MSwKLQkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDZkLCAweDAzLCAweDAwLCAweDQxLCAweDgyLCAweGU4LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OGUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDE1LCAweDAwLCAweDQwLCAweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDQwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4NTUsIDB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHg3MywgMHgwMywgMHgwMCwgMHg1MCwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3ZSwgMHgwMywgMHhhMiwgMHg0MSwKLQkweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MTUsIDB4MDAsIDB4YTYsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3MCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDA4LCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3MCwgMHgxNSwgMHgwMCwgMHg0MywKLQkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDg4LCAweDAzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4OGEsIDB4MDMsIDB4MjIsIDB4NWEsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMywgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDA4LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDgzLCAweDAzLCAweGEyLCAweDQxLAotCTB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY3LCAweDBmLCAweDAwLCAweGJjLAotCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCX0sCi0JewotCTB4MzEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDFiLCAweDgwLCAweDgxLCAweDgwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4ODksIDB4YTIsIDB4NDAsIDB4OTEsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg5MCwgMHhiMywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyZSwgMHhhMiwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGY0LCAweDg5LCAweDAxLCAweDAwLAotCTB4OTAsIDB4OTUsIDB4MmEsIDB4YzgsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDgwLCAweDExLCAweDgxLAotCTB4OTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgxYSwgMHg4MCwgMHgxMSwgMHg4MiwgMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGU2LCAweDg5LCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAotCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODAsIDB4YTIsIDB4NDIsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgwLCAweDExLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDIyLCAweDgwLCAweDUxLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4MTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MCwgMHg1MiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MCwgMHgwMCwgMHg0OCwKLQkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDI3LCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjYsIDB4ODAsIDB4YTIsIDB4NTMsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4NTMsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4MCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDI5LCAweDgwLCAweGEyLCAweDUyLCAweDA3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDUyLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLCAweDUyLCAweGIzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDRjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwNSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwNSwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZTEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHhkZSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OWIsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwgMHhkZSwgMHg5OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsIDB4MzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDM4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA2LCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHgxOCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwOSwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4NTAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2IsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlMCwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGRkLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MjAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDcxLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDk3LAotCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZSwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDkzLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NWMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YWYsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDQ5LCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHg3MSwgMHg4MCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MCwgMHg1MiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDczLCAweDgwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NzQsIDB4ODAsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4OTEsIDB4ODEsCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDQ2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHg1YSwgMHgwMSwgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHgwMCwgMHg0OSwKLQkweGZkLCAweDgzLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweDAwLCAweDRhLCAweGZkLCAweDgzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsCi0JMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweGQwLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAotCTB4N2MsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCi0JMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDg0LCAweDgwLCAweGEyLCAweDQxLAotCTB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4YTEsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgwNCwKLQkweDgwLCAweDk0LCAweDAwLCAweDAwLCAweDgwLCAweDE1LCAweDNmLCAweDQyLCAweDk3LCAweGUzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDMsCi0JMHgwMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGNiLCAweDk5LCAweGNiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLAotCTB4ZjMsIDB4ODMsIDB4MDEsIDB4MDAsIDB4OGUsIDB4ODAsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwKLQkweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGExLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg5NSwgMHg4MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMiwgMHgwMCwgMHgyMCwKLQkweDQyLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDA1LCAweDZjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDEsCi0JMHg4YiwgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDliLCAweDgwLCAweGE4LCAweGIxLCAweDhjLCAweDMzLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODAsIDB4YTgsIDB4YjEsIDB4OTQsIDB4MzMsIDB4MDAsIDB4MDAsCi0JMHhhMywgMHg4MCwgMHgxNCwgMHhjNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhjNiwKLQkweDgzLCAweGY0LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDRmLCAweDgzLCAweDA0LCAweDAwLCAweDAwLAotCTB4N2YsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4YzYsCi0JMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NywgMHhhMywgMHgwMSwgMHgwMCwKLQkweDdmLCAweDgwLCAweDFmLCAweDVjLCAweDk3LCAweDUzLCAweDAwLCAweDAwLCAweDllLCAweDgzLCAweDFkLCAweGM2LAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4NDMsIDB4ODEsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHhhOSwgMHg4MCwgMHgwMCwgMHg0MCwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM2LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZGEsIDB4ODEsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MmQsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MSwgMHgwMCwgMHg0ZCwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDFlLCAweDgxLCAweDAwLCAweDRlLCAweDYxLCAweGIxLCAweDAwLCAweDAwLCAweDBkLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDNkLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAotCTB4OGQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDg0LCAweDAwLCAweGNhLCAweDliLCAweGIzLCAweDAwLCAweDAwLCAweDQ2LCAweDgxLCAweDAwLCAweDQwLAotCTB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1NiwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAotCTB4NTgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NTksIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHgwMCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRkLCAweDgzLCAweDAwLCAweGJiLAotCTB4YWIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODEsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhkMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhkZiwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHg3NywgMHhiMywgMHgwMCwgMHgwMCwKLQkweDE1LCAweDgxLCAweDAwLCAweDRkLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDFjLCAweDgxLCAweDAwLCAweDRlLAotCTB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNSwgMHg4MSwgMHgwMCwgMHg0YywgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg4MSwgMHgwMCwgMHhiYiwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYwLCAweDgwLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTIsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCi0JMHg0ZCwgMHhiMywgMHgwMCwgMHgwMCwgMHg2NCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDhmLCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGM4LCAweDE0LCAweDJlLCAweGJiLAotCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMiwKLQkweGEwLCAweDhiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLAotCTB4NzUsIDB4ODAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDRlLCAweDAxLCAweDAwLCAweDRjLAotCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGU1LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4ODAsIDB4MjIsIDB4NDIsCi0JMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhlYSwgMHg4MCwgMHgyMiwgMHg0MSwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweGVjLCAweDgwLCAweDFlLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVlLCAweDgwLCAweDFmLCAweGNhLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgwMCwgMHg0MiwgMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGNkLCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQxLCAweDhmLCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsCi0JMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LAotCTB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyZiwgMHg5YywKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDA3LCAweDgxLCAweDAwLCAweDQwLCAweDM5LCAweDMzLCAweDAxLCAweDAwLAotCTB4MTgsIDB4MDAsIDB4MmYsIDB4OWIsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHgzNywgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDgxLCAweDAwLCAweDQwLCAweDM1LCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJmLCAweDk5LAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhhZSwgMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsCi0JMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweGFlLCAweDYzLCAweGRkLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDI4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMiwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLAotCTB4MDUsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NTgsCi0JMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMCwgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE0LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgxLCAweGEyLCAweDQwLAotCTB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKLQkweGUxLCAweGQxLCAweDAxLCAweDAwLCAweDBkLCAweDgxLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTEsIDB4ODEsIDB4MjgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDExLCAweDgxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxNiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MSwgMHgwMCwgMHhiYiwKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDZhLCAweDg0LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE5LCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwKLQkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDIxLCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4NjAsIDB4NDAsIDB4OTUsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MSwgMHgzNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDgxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyNSwgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDI3LCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MjIsIDB4NDEsCi0JMHg0MywgMHg1MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwgMHg5NSwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDIyLCAweDgxLCAweDAwLCAweDQxLCAweDg1LCAweGMwLCAweDAwLCAweDAwLCAweDJmLCAweDgxLCAweGEyLCAweDQyLAotCTB4NjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDY1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkzLCAweDgzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4Y2EsIDB4NjksIDB4OTcsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MjYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDg0LCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDIwLCAweDQzLAotCTB4OTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4ODAsIDB4Y2EsIDB4NjcsIDB4MzMsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgyMiwgMHg0MCwgMHg2NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg2ZiwKLQkweGRiLCAweDkxLCAweDAwLCAweDAwLCAweGMxLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzUsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDQyLCAweDgxLCAweGEyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4OTUsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGMzLCAweGIxLCAweDAxLCAweDAwLCAweDQ1LCAweDgxLCAweDIyLCAweDViLCAweDk1LCAweDdmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweGY1LCAweDAwLCAweGNhLCAweDk1LCAweDliLCAweDAxLCAweDAwLCAweDRhLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ZmQsIDB4MDAsIDB4Y2EsIDB4OTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg3ZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHhjYSwKLQkweGM1LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDk1LCAweDgzLCAweDAxLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4YzUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4NmYsIDB4MDAsIDB4Y2EsCi0JMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM3LCAweGIxLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDVmLAotCTB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHg4MywgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwKLQkweGM3LCAweGIxLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAwLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4Y2IsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCi0JMHhjZCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDQyLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDk4LCAweDE0LCAweDAwLCAweDQwLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDVlLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODEsIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDYyLCAweDgxLCAweDlmLCAweDg1LCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDYxLCAweDgxLCAweGEyLCAweDRmLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQxLCAweDg0LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDMsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmMCwgMHhmZiwgMHgwMCwgMHg0MSwgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDk0LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGE2LAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4YzQsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg3NSwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MWMsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODEsIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDdlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQxLCAweDAxLCAweDAwLCAweGE2LAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MGMsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg3YSwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDdlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NDEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MGMsIDB4MDAsIDB4NDMsCi0JMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4MSwgMHhhMiwgMHg0MywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2YsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHgxMywgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NywgMHg4MSwgMHgyMiwgMHg0MywKLQkweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ODQsIDB4ODEsIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDhjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTksIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHg4OSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHg0MSwKLQkweDA4LCAweDk5LCAweDAxLCAweDAwLCAweDhjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDhmLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAotCTB4MDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5MiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweGExLCAweDgxLCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLAotCTB4YjAsIDB4ODEsIDB4MjIsIDB4NDQsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDgxLCAweDIyLCAweDRhLCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4ODEsIDB4MjIsIDB4NGQsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4MSwgMHgyMiwgMHg0ZiwKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4YTAsIDB4ODEsIDB4MjIsIDB4NGUsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGM5LCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjOSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOCwgMHg4MSwgMHgyMiwgMHg0MiwKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MWMsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4MSwgMHgyMiwgMHg0NSwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweGFkLCAweDgxLCAweDIyLCAweDQ0LAotCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4MSwgMHgyMiwgMHg0MywgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweGI4LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzksIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGM5LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI4LCAweDgxLCAweDIyLCAweDQyLAotCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4YzksIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4ODEsIDB4MjIsIDB4NGIsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4YWYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YzUsIDB4ODEsIDB4MjIsIDB4NDAsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhjNSwgMHg4MSwgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGFlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIzLCAweDAxLCAweDAwLAotCTB4YzQsIDB4ODEsIDB4MjIsIDB4NDIsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzUsIDB4ODEsIDB4MDAsIDB4MGIsCi0JMHg3ZCwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg3ZCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDdmLCAweDAwLCAweGEyLCAweGEwLCAweDhiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGNhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODEsIDB4OWYsIDB4ODUsCi0JMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGQxLCAweDgxLCAweDE0LCAweGY3LCAweDgxLCAweDMwLCAweDAwLCAweDAwLCAweGQxLCAweDgxLCAweGEyLCAweDQ5LAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg4MSwgMHgxNSwgMHhmOCwgMHg4MSwgMHgxNCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4MSwgMHhhMiwgMHg0YSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4ZDYsIDB4ODEsIDB4YTIsIDB4YzgsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGVmLCAweGIzLCAweDAxLCAweDAwLCAweGQ4LCAweDgxLCAweDQyLCAweDQwLAotCTB4ZjEsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODEsIDB4MDAsIDB4NDAsIDB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgwMCwgMHhiYiwgMHg2YiwgMHhiMywgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhiYiwKLQkweGIxLCAweGIzLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTIsCi0JMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODEsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhmOCwgMHg4MSwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhlNywgMHg4MSwgMHhhMiwgMHg1MCwKLQkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4YmIsCi0JMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKLQkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmNSwgMHg4MSwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MSwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGU3LCAweDgxLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHg3NSwgMHg4MCwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ5LCAweDAwLCAweDAwLCAweDQxLAotCTB4YjMsIDB4NzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsIDB4YjUsIDB4ZjMsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhiMywgMHhmMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwKLQkweGIzLCAweGZiLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGE2LCAweGI4LCAweGIzLCAweDAxLCAweDAwLAotCTB4ZjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDIsCi0JMHgyZCwgMHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGViLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHg4MiwgMHgxMCwgMHhkYSwgMHhiNSwgMHg2YiwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MiwgMHgwMCwgMHg0MSwKLQkweDJkLCAweDgxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJkLCAweDkxLCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDA2LCAweDgyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDI2LCAweDAxLCAweDAwLCAweDQyLAotCTB4MmQsIDB4MDEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyNiwgMHgwMSwgMHgwMCwgMHg0MiwgMHgyZCwgMHgxMSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDJkLCAweDExLCAweDAxLCAweDAwLCAweDE1LCAweDgyLCAweDA0LCAweDQwLCAweDJkLCAweDAxLCAweDAwLCAweDAwLAotCTB4MjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTEsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDI1LCAweDAxLCAweDAwLCAweDQyLCAweDJkLCAweDAxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweDAwLCAweDQwLAotCTB4YjksIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MmQsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHgyZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDQzLCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODIsIDB4YTIsIDB4NTQsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDMwLCAweDgyLCAweGEyLCAweDA2LAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgwNywgMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM5LCAweDgyLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4M2EsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MiwKLQkweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY1LCAweGIxLCAweDAxLCAweDAwLAotCTB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwKLQkweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDgsIDB4YjIsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAotCTB4NDUsIDB4ODIsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGZjLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLAotCTB4NmYsIDB4ODIsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODIsIDB4MjIsIDB4NDUsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDM1LCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg2ZCwgMHg4MiwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MiwgMHg4MiwgMHgyMiwgMHgyMCwKLQkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDZmLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZGIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODIsIDB4MjIsIDB4NDAsCi0JMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4MiwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDA0LCAweDgxLCAweDAwLCAweDU4LAotCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKLQkweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDAwLCAweDQwLAotCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHg4MSwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4ODIsIDB4YTIsIDB4NDEsCi0JMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAotCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODAsIDB4MDAsIDB4YmIsIDB4ODUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhNywgMHg4MiwgMHgyMiwgMHg0NSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGUwLCAweDE1LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg5NiwgMHg4MiwgMHhhOCwgMHhiYiwgMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDk5LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4OTgsIDB4ODIsIDB4YTIsIDB4ZjIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg4MiwgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweGEwLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE3LCAweDgyLCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLAotCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YTcsIDB4ODIsIDB4YTIsIDB4ZmEsCi0JMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKLQkweGFhLCAweDgyLCAweDIyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweGE3LCAweDgyLCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAotCTB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGI0LCAweGIzLCAweDAxLCAweDAwLAotCTB4YjgsIDB4ODIsIDB4YTIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MTUsIDB4MjAsIDB4MjAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGRiLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJkLCAweDgyLCAweDIyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4ODIsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MSwgMHgwMCwgMHg1OCwKLQkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjMiwgMHg4MiwgMHgyMiwgMHg1MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4MSwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGY4LCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODEsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYSwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDgxLCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YSwKLQkweGI0LCAweDhiLCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHhiNCwgMHhmNywgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg4MiwgMHgyMiwgMHg1MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4MiwgMHgwMCwgMHg1MCwKLQkweGI1LCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGI1LCAweGIzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDMxLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDMyLCAweDMzLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MzUsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHgzNywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzOCwgMHgzOSwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQxLCAweDQyLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4NDMsIDB4NDQsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDUsIDB4NDYsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NywgMHg0OCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDRhLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhlNywgMHg4MiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAotCTB4ZWEsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGVkLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAotCTB4ZjMsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODIsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAotCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKLQkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAotCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCi0JMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDgzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCi0JMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKLQkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAotCTB4MTYsIDB4ODMsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAotCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MzMsIDB4ODMsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKLQkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCi0JMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDNkLCAweDgzLCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAotCTB4NGMsIDB4ODMsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4MywgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAotCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCi0JMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgzZiwgMHg4MywgMHhhYSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCi0JMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAotCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHg0YywgMHg4MywgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTMsIDB4ODMsIDB4YTMsIDB4NTMsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDYwLCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHg4MywgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKLQkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAotCTB4NjAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4MywgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCi0JMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4MWYsIDB4ODMsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCi0JMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAotCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCi0JMHgxMywgMHg4MywgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDlkLCAweDgzLCAweGEyLCAweDRiLCAweGI3LCAweDZmLCAweDAwLCAweDAwLAotCTB4OWQsIDB4ODMsIDB4YTIsIDB4NDEsIDB4MmYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDM1LCAweDgyLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDljLCAweDgzLCAweDIyLCAweDQwLAotCTB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHhmZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDljLCAweDgzLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAotCTB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4N2MsIDB4MTYsIDB4MjAsIDB4ZjYsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDgwLCAweDgzLCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ODIsIDB4ODMsIDB4MjIsIDB4NDAsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg4NiwgMHg4MywgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHg4NCwgMHg4MywgMHgyMiwgMHg0MiwKLQkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4ODYsIDB4ODMsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg5YSwgMHg4MywgMHgyMiwgMHg1MSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDM0LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg5NSwgMHg4MywgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDgxLCAweDAwLCAweDQ4LCAweDk2LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTksIDB4ODMsIDB4MjIsIDB4NDAsCi0JMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg4MywgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGZlLAotCTB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODMsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4NDEsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4YTgsIDB4ODMsIDB4MjIsIDB4NDQsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHg4MywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGFhLCAweDgzLCAweDIyLCAweDRjLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDgzLCAweDIyLCAweDUwLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4ODMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhiNywgMHg4MywgMHgyMiwgMHg1OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiYywgMHg4MywgMHgyMiwgMHg1YywKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsCi0JMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYzLCAweDgzLCAweDAxLCAweDAwLCAweGFlLCAweDgzLCAweGEyLCAweDQyLAotCTB4MDUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg4NCwgMHgyMiwgMHhjYSwgMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHg0NSwKLQkweGYzLCAweDkzLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLAotCTB4NmEsIDB4ODQsIDB4ODAsIDB4Y2EsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MjIsIDB4MDEsCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKLQkweDVjLCAweDAxLCAweDAwLCAweGJjLCAweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAotCTB4YjEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhjYSwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NCwgMHhhMiwgMHg0MCwKLQkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLAotCTB4YjksIDB4ODMsIDB4YTgsIDB4YjEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4NCwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHg4MywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4Y2EsIDB4ODMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweGM4LCAweDgzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGNhLCAweDgzLCAweDU2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4ZjMsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGNmLCAweDgzLCAweGEyLCAweDQxLAotCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkYSwgMHg4MywgMHg5MSwgMHg4MSwKLQkweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4YjYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4ODMsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4MywgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMywgMHg5ZiwgMHgwMCwgMHg0MSwKLQkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg1OCwgMHgxNSwgMHgyZCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJkLCAweGYwLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhmOCwgMHgwMCwgMHg0OCwgMHg5MCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDkzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLAotCTB4NmEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg4MywgMHgyMiwgMHg0MCwgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGYwLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ3LCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhmNSwgMHg4MywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwgMHhlNywgMHg4MywgMHhhMiwgMHg0MSwKLQkweDkzLCAweDUwLCAweDAwLCAweDAwLCAweGU1LCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4NDcsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5ZiwgMHgwMCwgMHg0NywgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAyLCAweDAwLCAweDQ3LCAweDhlLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhmYiwgMHg4MywgMHgyMCwgMHgxOCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAotCTB4NTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0ZiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDRlLCAweGQzLCAweDAxLCAweDAwLCAweDVlLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NmMsIDB4MDMsIDB4MDAsIDB4NDIsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNywgMHg4NCwgMHgyMiwgMHhhNywgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDQ5LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDg0LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MmUsIDB4NDMsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBkLCAweDg0LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDQwLCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDQxLAotCTB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgxMywgMHg4NCwgMHgwMCwgMHg1MCwgMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4NCwgMHhhMiwgMHg0MSwKLQkweDAxLCAweDdkLCAweDAwLCAweDAwLCAweDIxLCAweDg0LCAweDIyLCAweDU4LCAweDczLCAweDdkLCAweDAwLCAweDAwLAotCTB4NzgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWMsIDB4ODQsIDB4YTgsIDB4YjEsCi0JMHg5YywgMHgzMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDBlLCAweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDIxLCAweDg0LCAweDMzLCAweGM0LAotCTB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODQsIDB4YTEsIDB4YWQsIDB4OWQsIDB4MjAsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgxMywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0ZSwKLQkweDVhLCAweDgzLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MmMsIDB4ODQsIDB4MjIsIDB4YWIsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmEsIDB4ODQsIDB4YTIsIDB4NDAsCi0JMHgwMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyYywgMHg4NCwgMHgyMiwgMHg1ZiwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDIxLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDg0LCAweDIyLCAweDVlLAotCTB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ODQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzMSwgMHg4NCwgMHgyMiwgMHg1NCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDJjLCAweDg0LCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZmEsIDB4ODUsIDB4YTIsIDB4NWYsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NWMsIDB4ODksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMywgMHg4NCwgMHhhMiwgMHg1ZiwgMHg1OSwgMHgyNywgMHgwMCwgMHgwMCwKLQkweDM1LCAweDg0LCAweGEyLCAweDVjLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDNjLCAweDg0LCAweGEyLCAweDVlLAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODQsIDB4MjIsIDB4NWMsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg0NywgMHg4NCwgMHgzNywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDM2LCAweDg0LCAweGE4LCAweGIxLCAweDM2LCAweDMwLCAweDAwLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODQsIDB4YTgsIDB4YjEsCi0JMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDI5LCAweDg2LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQ3LCAweDg0LCAweDM0LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2UsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzZCwgMHg4NCwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg1MiwgMHgyMSwKLQkweDEzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQxLCAweDJmLCAweGMzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4M2YsIDB4MDAsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHgwMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHg4NywgMHg4NCwgMHgwMCwgMHgzNCwgMHgxMywgMHg4NCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDNmLCAweDE0LCAweDA5LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGU1LCAweDg0LCAweDAwLCAweDQzLAotCTB4MDEsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg0NywgMHg4NCwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgxMywgMHg0ZSwKLQkweDVhLCAweDkzLCAweDAwLCAweDAwLCAweGU2LCAweDg5LCAweGEyLCAweDQ4LCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4NGUsIDB4ODQsIDB4MjIsIDB4NTksIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NzksIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4NCwgMHgyOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDRiLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUyLCAweDg0LCAweDIxLCAweGFjLAotCTB4OWMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MWYsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMCwgMHg1ZiwgMHg5ZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweDU4LCAweDkxLCAweDAxLCAweDAwLCAweDU2LCAweDg0LCAweDIyLCAweDVhLCAweDczLCAweDdkLCAweDAwLCAweDAwLAotCTB4N2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTMsIDB4ODQsIDB4YTgsIDB4YjEsCi0JMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwgMHgxMSwgMHhjOSwgMHgwMCwgMHgwMCwKLQkweDVjLCAweDg0LCAweGEyLCAweDQwLCAweDkzLCAweDdmLCAweDAwLCAweDAwLCAweDVjLCAweDg0LCAweDIyLCAweDQ0LAotCTB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ODQsIDB4NDIsIDB4YTUsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg1YiwgMHg4NCwgMHhhMiwgMHg0MCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHg3MSwgMHg4NCwgMHgxYSwgMHg0MCwKLQkweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4OWEsIDB4ODAsIDB4YTIsIDB4NDAsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4OWIsIDB4ODksIDB4MjIsIDB4NDQsCi0JMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg5MiwgMHg4OSwgMHgyMiwgMHg0MCwgMHg2NSwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweGEwLCAweDg5LCAweGEyLCAweDViLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ5LAotCTB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjYsIDB4ODQsIDB4MjIsIDB4NDgsIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDk4LCAweDJmLCAweDQwLCAweDMzLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODQsIDB4MjIsIDB4NDAsCi0JMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg2OSwgMHg4NCwgMHgyMiwgMHg0MCwgMHg4MSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweGVmLCAweDg5LCAweDFmLCAweGE1LCAweDgyLCAweDZmLCAweDAwLCAweDAwLCAweDQ5LCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NmMsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MzMsIDB4NDAsCi0JMHgxZiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgxMywgMHg0ZSwgMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDczLCAweDg0LCAweGEwLCAweGNlLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDg1LCAweDg0LCAweGEwLCAweGNkLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OWMsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg4NCwgMHgyMiwgMHhiNSwKLQkweDgxLCAweDE0LCAweDAwLCAweDAwLCAweDgwLCAweDE1LCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4NzcsIDB4ODQsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YjQsCi0JMHg2NSwgMHg5NywgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNSwgMHgyZSwgMHg0MCwgMHg2OSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDgzLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLAotCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODQsIDB4YTgsIDB4YTEsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHg1YywgMHg4NCwgMHgwMCwgMHg4OCwgMHg5ZSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDVjLCAweDg0LCAweGEyLCAweDQxLCAweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDVjLCAweDg0LCAweDAwLCAweDZmLAotCTB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsIDB4ODUsIDB4ODQsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHg4NCwgMHgxYSwgMHg0MCwgMHg5MywgMHg4MywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgwMCwgMHgwOSwKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLAotCTB4OTAsIDB4ODQsIDB4YTYsIDB4NDIsIDB4MTMsIDB4NjAsIDB4MDAsIDB4MDAsIDB4M2YsIDB4OTcsIDB4MDAsIDB4OTUsCi0JMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg4NCwgMHg0NSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDc1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDhjLCAweDg0LCAweGE4LCAweGIxLAotCTB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTcsIDB4MWQsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg5MSwgMHg4NCwgMHgwMCwgMHg1OCwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5NywgMHgwMCwgMHg5NSwKLQkweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDk4LCAweDg0LCAweDIzLCAweDRiLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDk4LCAweDg0LCAweDIyLCAweDRiLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5YiwgMHg4NCwgMHg4MywgMHgxNywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4OWQsIDB4ODQsIDB4ODUsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHg0NywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHg4NCwgMHgyMiwgMHg1NSwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQzLCAweGQxLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLAotCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhhMywgMHg4NCwgMHgwMCwgMHg0YiwgMHg0NCwgMHhjMSwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweGY2LCAweDAyLCAweGNjLCAweDAxLCAweDAwLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLAotCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MjgsIDB4M2MsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4NCwgMHhhMiwgMHhmOCwKLQkweDBlLCAweDMwLCAweDAwLCAweDAwLCAweGJmLCAweDg0LCAweDIyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4ODQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhYywgMHg4NCwgMHhhMiwgMHhmOCwgMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGFjLCAweDg0LCAweGEyLCAweGY4LCAweDEwLCAweDZjLCAweDAwLCAweDAwLCAweGFjLCAweDg0LCAweGEyLCAweGYwLAotCTB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmQsIDB4ODQsIDB4MjIsIDB4NTgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4NCwgMHg0NywgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGI4LCAweDg0LCAweGEyLCAweGYzLCAweDc0LCAweDA2LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZTYsIDB4OTUsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODQsIDB4MWYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDAwLCAweDFmLCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiYiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NCwgMHg0NywgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGM1LCAweDg0LCAweDFmLCAweDQxLCAweDJkLCAweGMzLCAweDAwLCAweDAwLAotCTB4YzMsIDB4ODQsIDB4MjIsIDB4NTgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGMxLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGMzLCAweDg0LCAweDQ3LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4ODQsIDB4MWYsIDB4NDEsIDB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NiwgMHgwMCwgMHgwNywKLQkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGQzLCAweDg0LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4Y2IsIDB4ODQsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg4NCwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGZmLCAweDk2LCAweDAwLCAweDVmLCAweDAxLCAweDEwLCAweDAxLCAweDAwLCAweGQxLCAweDg0LCAweDIyLCAweDQwLAotCTB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4ODQsIDB4YTIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGRiLCAweDg0LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGQ4LCAweDg0LCAweDljLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4NCwgMHg4MiwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDY2LCAweDhiLCAweDAwLCAweDQ1LCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI4LCAweDIwLCAweDAwLCAweGE2LAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4ODQsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHhmNSwgMHg5NywgMHgwMCwgMHg0YiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg0YiwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBiLCAweDk3LCAweDAwLCAweDAzLCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAotCTB4ZTcsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlOSwgMHg4NCwgMHhhOCwgMHgwMCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhlZSwgMHgwNywgMHgyZSwgMHg0NywgMHg5NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4NCwgMHgyMiwgMHgxNywKLQkweDk2LCAweDA0LCAweDAwLCAweDAwLCAweGZkLCAweDg0LCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4ZmQsIDB4ODQsIDB4MjMsIDB4YTIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTYsIDB4MDAsIDB4NTIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDBjLCAweDAwLCAweDJkLCAweDAwLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MWMsIDB4ODUsIDB4MDAsIDB4NWMsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ODUsIDB4MjIsIDB4NDMsCi0JMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDBhLCAweDg1LCAweDIyLCAweDVmLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDA2LCAweDg1LCAweDQ1LCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgxZCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDBmLCAweDAwLCAweGY2LAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGUsIDB4ODUsIDB4YTIsIDB4YTYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxMSwgMHg4NSwgMHgwMCwgMHhmMiwgMHgzYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNywgMHg4NSwgMHhhMiwgMHg0YiwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MTUsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODUsIDB4MjIsIDB4NGEsCi0JMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxYywgMHg4NSwgMHgyMiwgMHg0OCwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDBhLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYyLAotCTB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHg0MywgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgzZCwgMHg0MiwKLQkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDFjLCAweDg1LCAweGEyLCAweDQyLCAweGUwLCAweDdkLCAweDAwLCAweDAwLAotCTB4ZjcsIDB4ODUsIDB4YTIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDFjLCAweDg1LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLAotCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDEsIDB4NDcsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg4NSwgMHgyMiwgMHhhMSwgMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2YiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDg1LCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4NWIsIDB4ODUsIDB4YTMsIDB4OTIsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwKLQkweDE1LCAweDhhLCAweDIyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI4LCAweDg1LCAweDIyLCAweDVjLAotCTB4MTcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjksIDB4ODUsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDJkLCAweDg1LCAweGEyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjgsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDksIDB4ODUsIDB4MDAsIDB4NWUsCi0JMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4YywgMHhjYywgMHgwMSwgMHgwMCwKLQkweGY4LCAweDk3LCAweDAwLCAweDRjLCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDM2LCAweDg1LCAweGE4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLCAweDQ5LCAweDg1LCAweDAwLCAweDVlLAotCTB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHg0OCwgMHg4NSwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDhjLCAweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDAzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MTksIDB4OTgsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDA5LAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NDksIDB4ODUsIDB4MjgsIDB4NTQsIDB4MTcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5OCwgMHgwMCwgMHg0MywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDRiLCAweDg1LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU2LAotCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHg0ZSwgMHg4NSwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NGYsIDB4ODUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU2LCAweDg1LCAweDIyLCAweDQzLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NywgMHgwMCwgMHg1ZSwKLQkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDU5LCAweDg1LCAweGEyLCAweDVmLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAotCTB4YjksIDB4OTQsIDB4MDAsIDB4MDEsIDB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDVkLCAweDg1LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGY0LCAweDg1LCAweDAwLCAweDQxLAotCTB4NDMsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg4NSwgMHgzNSwgMHgwMSwKLQkweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NjYsIDB4ODUsIDB4MjgsIDB4YjEsIDB4MzAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ODUsIDB4MjIsIDB4NGQsCi0JMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NSwgMHhhMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLCAweGYzLCAweDg1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg2NiwgMHg4NSwgMHhhOCwgMHhiMSwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4NSwgMHhhMiwgMHg0MCwKLQkweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwNywgMHgwMCwgMHg0MywgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDg1LCAweGFhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc0LCAweDg1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2UsIDB4NDMsIDB4MjcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDI3LCAweGMwLCAweDAxLCAweDAwLAotCTB4NjAsIDB4ODUsIDB4YTMsIDB4MGIsIDB4ODcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsCi0JMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDJkLCAweDQwLAotCTB4MzksIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODUsIDB4YTIsIDB4NDAsIDB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDdmLCAweDg1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgzMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDIwLCAweDAxLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4NCwgMHg4NSwgMHgyMywgMHgwMSwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDhmLCAweDg1LCAweDgyLCAweDQxLCAweDIzLCAweDQwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OGIsIDB4ODUsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg4LCAweDg1LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYiwgMHg5NSwgMHgwMCwgMHg0MywgMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg4NSwgMHgyMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk1LCAweDg1LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyNSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDJkLCAweDRjLCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MzcsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg4NCwgMHg4NSwgMHgwMCwgMHg0NSwgMHgxZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg4NSwgMHhhMywgMHgxMiwKLQkweDM2LCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDg1LCAweDY4LCAweDFiLCAweDI4LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTQsIDB4ODUsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHhjYSwgMHg4NSwgMHgyMiwgMHgxNCwgMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDMzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI0LCAweGQwLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MmQsIDB4MTQsIDB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzMsIDB4ODUsIDB4YTIsIDB4MTQsCi0JMHgzNiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg4NSwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGIyLCAweDg1LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4NSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDJiLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAotCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODUsIDB4MjMsIDB4MDEsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjNCwgMHg4NSwgMHgyMiwgMHgxYiwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDE1LCAweGUwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg4NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4NSwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGMwLCAweDAxLCAweDAwLAotCTB4ODQsIDB4ODUsIDB4YTIsIDB4NDAsIDB4MjUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgzOSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgzZCwgMHg0MywgMHgzOSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDI1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODQsIDB4ODUsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NSwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ODUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGViLCAweDk1LCAweDAwLCAweDQwLCAweDJiLCAweDMwLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDJlLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4ODUsIDB4MjIsIDB4NTAsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgxNywKLQkweDk4LCAweDg4LCAweDAxLCAweDAwLCAweGQ3LCAweDg1LCAweGEyLCAweDQxLCAweDk5LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZGEsIDB4ODUsIDB4MjIsIDB4NDMsCi0JMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDE2LCAweDAwLCAweDIwLCAweDFkLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGRjLCAweDg1LCAweGEzLCAweDQwLAotCTB4MjcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4NjAsIDB4NWYsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4NCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMywKLQkweDE2LCAweDk0LCAweDAxLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLAotCTB4MTUsIDB4OGEsIDB4YTIsIDB4NWYsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI5LCAweDk0LCAweDAwLCAweDAxLCAweDM4LCAweDQzLCAweDAxLCAweDAwLCAweDE1LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDg1LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4ODUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmMywgMHg4NSwgMHgyMiwgMHgxMywgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHg4NSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4ODUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ODUsIDB4MDAsIDB4NDEsCi0JMHg4MywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDhhLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDBiLCAweDk2LCAweDAwLCAweDA3LAotCTB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODYsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4NiwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDg2LCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4ODYsIDB4YTIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDBkLCAweDg2LCAweDIyLCAweDIwLCAweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDBhLCAweDg2LCAweDljLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4NSwgMHg5OCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEzLCAweDg2LCAweDIyLCAweDNhLCAweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDE3LCAweDg2LCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDM4LCAweDk3LCAweDAwLCAweDk1LCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDg2LCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLAotCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NGIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NGMsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4NiwgMHg4MywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDI0LCAweDg2LCAweDg1LCAweDE3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDBiLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZTcsIDB4OTQsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZSwgMHg4NiwgMHg0NiwgMHg0NywKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MmYsIDB4ODYsIDB4YTgsIDB4MWIsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MWUsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDU0LCAweDg2LCAweDAxLCAweGZiLAotCTB4MDgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4ODYsIDB4ODcsIDB4ZmIsIDB4MjIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLAotCTB4MGIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4ODYsIDB4MjIsIDB4NDEsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzZSwgMHg4NiwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDQ5LCAweDg2LCAweDIyLCAweDVmLAotCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHg0MiwgMHg4NiwgMHhhNiwgMHg1ZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDQ3LCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQwLAotCTB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4NiwgMHhhMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTIsIDB4ODYsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ODYsIDB4OWMsIDB4MGYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDY2LCAweDk2LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDg1LCAweDk4LCAweDAwLCAweDQyLAotCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjZSwgMHg5OSwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLAotCTB4NTYsIDB4ODYsIDB4MjEsIDB4MDQsIDB4ODAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODYsIDB4MDAsIDB4NDAsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4YSwgMHgwMCwgMHg0YiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDc2LCAweDg2LCAweDAwLCAweDQzLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDg2LCAweDAwLCAweGZiLAotCTB4MjIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2NiwgMHg4YiwgMHgwMCwgMHg0ZSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHg4NiwgMHgwMCwgMHg1YSwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDVmLCAweDg2LCAweDAwLCAweDQ3LCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4YTgsIDB4OGEsIDB4MDAsIDB4NTMsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NTYsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDY2LCAweDhiLCAweGEwLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDY1LCAweDg2LCAweGEyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODYsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg2NiwgMHg4YiwgMHgwMCwgMHg1MywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg1NCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDZlLCAweDg2LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NjgsIDB4ODYsIDB4YTIsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NWQsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDZjLCAweDg2LCAweGEwLCAweDkxLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OGIsIDB4MDAsIDB4NWUsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDcwLCAweDg2LCAweDIwLCAweDkxLCAweGU1LCAweDZkLCAweDAwLCAweDAwLAotCTB4NjYsIDB4OGIsIDB4MDAsIDB4NTQsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDY2LCAweDhiLCAweGEwLCAweDBhLAotCTB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg2NiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgyLCAweGY0LCAweDAxLCAweDAwLAotCTB4YTgsIDB4OGEsIDB4YTAsIDB4NDIsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NTQsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHg4MywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4NiwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDkwLCAweDg2LCAweGEyLCAweDU0LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDg4LCAweDg2LCAweDIyLCAweDU1LAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4NiwgMHgyMiwgMHg1MywKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwYywgMHhiYywgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDg2LCAweDIyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODYsIDB4YTIsIDB4NDMsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg3YywgMHg5NiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NiwgMHg0MywgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk0LCAweDg2LCAweGEwLCAweGYwLCAweDMwLCAweDZmLCAweDAwLCAweDAwLAotCTB4ODYsIDB4ODYsIDB4MWIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsCi0JMHgzMSwgMHhjMywgMHgwMSwgMHgwMCwgMHg5MCwgMHg5NSwgMHgwMCwgMHg0MCwgMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDg2LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4OTYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MGMsCi0JMHhlMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5OSwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGEwLCAweDg2LCAweDMwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMiwgMHgwMCwgMHhhMSwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODYsIDB4MjIsIDB4NDYsIDB4MjMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhZCwgMHg4NiwgMHgyMiwgMHg0MCwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGFmLCAweDg2LCAweDIyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODYsIDB4MjIsIDB4NDIsCi0JMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGIxLCAweDg2LCAweDQ3LCAweDFiLCAweDJjLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLAotCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDEsIDB4NDEsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHg4NiwgMHgyMywgMHg5MiwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhlMCwgMHg4NiwgMHhhMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGU0LCAweDg2LCAweDIyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyNCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGM3LCAweDk1LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLCAweGRlLCAweDg2LCAweDIyLCAweDA4LAotCTB4NDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHgwNywgMHgwMCwgMHgxMiwgMHgyNCwgMHhjYywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4NiwgMHhhYSwgMHg0MSwKLQkweDI3LCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAotCTB4ZGEsIDB4ODYsIDB4MjYsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGNkLCAweDAxLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLAotCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODYsIDB4YTIsIDB4NDAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkMywgMHg4NiwgMHgwMCwgMHg0MSwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MiwKLQkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDIxLCAweDM4LCAweDk2LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4ODYsIDB4YTIsIDB4NDQsCi0JMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDIwLAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4NiwgMHhhOCwgMHg0MiwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhjNSwgMHg4NiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDg2LCAweDIyLCAweDQwLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhkNywgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NiwgMHgwMCwgMHgxNywgMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGFhLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU0LCAweDg2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4OTIsIDB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4NiwgMHgyMiwgMHgwOCwKLQkweDJlLCAweDMwLCAweDAwLCAweDAwLCAweGVkLCAweDg2LCAweDAwLCAweDQxLCAweDI3LCAweGIwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHgwYSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4ODYsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHg2YiwgMHg4NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQxLCAweDNmLCAweGMzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4NywgMHgyYSwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4ODYsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmNiwgMHg4NiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg4NiwgMHhhMywgMHgwNywKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4ZjksIDB4ODYsIDB4YTMsIDB4NDAsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhmYiwgMHg4NiwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4MGUsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODYsIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDA4LCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDAxLCAweDJkLCAweDQwLAotCTB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4ODgsIDB4MjIsIDB4MGYsIDB4NDIsIDB4MDUsIDB4MDAsIDB4MDAsCi0JMHgxMiwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MGQsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDBhLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODcsIDB4MjIsIDB4MDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4ODcsIDB4YTIsIDB4NDUsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDU0LCAweDI5LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDBhLCAweGM4LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDA4LAotCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4NywgMHgyMCwgMHg5NCwKLQkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweDI0LCAweDg3LCAweDAwLCAweDk0LCAweGU1LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4ODcsIDB4MjIsIDB4MDEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyYiwgMHg4NywgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweDM3LCAweDg3LCAweDIyLCAweDQwLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzcsIDB4ODcsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NWYsIDB4ODcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzksIDB4ODcsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4NywgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDQzLCAweDg3LCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLAotCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODcsIDB4ODAsIDB4MDgsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDFlLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDFmLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDRhLCAweDg3LCAweGE4LCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4N2QsIDB4ODcsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHg4NywgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDU0LCAweDg3LCAweDAwLCAweDBkLCAweDI0LCAweGQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDU2LCAweDg3LCAweDIyLCAweDQyLAotCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODcsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDU3LCAweDg3LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4NywgMHgyMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGZiLCAweDk1LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAotCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg3ZCwgMHg4NywgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg3YywgMHg4NywgMHhhMiwgMHgwZCwKLQkweDBlLCAweDUwLCAweDAwLCAweDAwLCAweDZiLCAweDg3LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjYsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDcwLCAweDg3LCAweDFmLCAweGYwLCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDI0LCAweDg3LCAweDAwLCAweDRjLAotCTB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHg4NywgMHgyMywgMHgwNywgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg3OSwgMHg4NywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4NywgMHgwMCwgMHgwMywKLQkweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDI0LCAweDg3LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MmUsIDB4MTQsIDB4MGEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDJhLCAweGYyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgzLCAweDg3LCAweDIyLCAweDQwLAotCTB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsIDB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhmNiwKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDg3LCAweDg3LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ODksIDB4ODcsIDB4MjIsIDB4MGIsCi0JMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweGExLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGZhLAotCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4NywgMHgyMiwgMHg0NywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDQzLCAweDBlLCAweDUwLCAweDAwLCAweDAwLAotCTB4OTEsIDB4ODcsIDB4YTAsIDB4NDYsIDB4MGYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5NSwgMHg4NywgMHgyMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBmLCAweGEyLAotCTB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDk1LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4ODcsIDB4YTAsIDB4NDEsCi0JMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDg3LCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGEwLCAweDg3LCAweGEwLCAweDQzLAotCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ODcsIDB4MjAsIDB4NDUsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHg4NywgMHhhMCwgMHg0MSwgMHgwZSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGMwLCAweDAxLCAweDAwLAotCTB4OTgsIDB4ODcsIDB4YTIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YTksIDB4ODcsIDB4MjIsIDB4NDgsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQ4LCAweDkwLCAweDg4LCAweDAxLCAweDAwLCAweGE3LCAweDg3LCAweDkwLCAweDQ4LAotCTB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKLQkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiYywgMHg4NywgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODcsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGI2LCAweDg3LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiYywgMHg4NywgMHg4NywgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGZiLCAweDk1LCAweDAwLCAweDQxLCAweDIzLCAweDQwLCAweDAxLCAweDAwLAotCTB4YmUsIDB4ODcsIDB4YTIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NTIsIDB4ODksIDB4MDAsIDB4MTcsCi0JMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGMxLCAweDg3LCAweGEwLCAweDA3LCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhjNSwgMHg4NywgMHg5MCwgMHhmMiwKLQkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDJhLCAweDk0LCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGNjLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsCi0JMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwgMHg1MiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDkwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ1LCAweDg3LCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwNSwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAotCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDFiLCAweDg4LCAweDIyLCAweDAxLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHhhNCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGVhLCAweDg3LCAweGEzLCAweDA3LCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZWIsIDB4ODcsIDB4NjgsIDB4MDEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDcsCi0JMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZCwgMHg4NywgMHgyMiwgMHg0MCwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweGY3LCAweDg3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDM3LCAweDg4LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGY5LCAweDg3LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4ODgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODcsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4M2EsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHgzYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweDBiLCAweDg4LCAweDIzLCAweDFhLAotCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MDMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHg4OCwgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxZCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDAwLCAweDAwLCAweGYyLCAweDMwLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MzEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAyLCAweGMwLCAweDAxLCAweDAwLCAweDEzLCAweDg4LCAweDIyLCAweDFhLAotCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4ODgsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxNCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDE0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MTQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweDM3LCAweDg4LCAweDAwLCAweDFhLAotCTB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDIwLCAweDg4LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLAotCTB4MjEsIDB4ODgsIDB4NjgsIDB4MDcsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsCi0JMHgxYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4OCwgMHg4MCwgMHgwOCwgMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDExLCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4MWUsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MWYsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODgsIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg4OCwgMHgyMiwgMHgwZCwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDU0LCAweDg4LCAweDIyLCAweDBkLCAweDI0LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODgsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHg4OCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODgsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZiLCAweDk1LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDBmLAotCTB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1MywgMHg4OCwgMHhhMiwgMHgwZCwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4OCwgMHgyMiwgMHg0NiwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODgsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNkLCAweDg4LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA2LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NywgMHg4OCwgMHgxZiwgMHhmMCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDg3LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVmLAotCTB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4ODcsIDB4MjMsIDB4MDcsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4ODgsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4NywgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NywgMHgwMCwgMHgwZCwKLQkweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDcxLCAweDg4LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MmQsIDB4MWQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHhmMywgMHgzOCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyMCwgMHg1MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJkLCAweDQwLCAweDNmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDFkLAotCTB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2NiwgMHg4OCwgMHhhMCwgMHhmYywgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDY0LCAweDg4LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDUsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDE4LAotCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4ODgsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2YywgMHg4OCwgMHhhMiwgMHg0MSwKLQkweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDA1LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg3NiwgMHg4OCwgMHg0MiwgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODgsIDB4YTAsIDB4NDEsIDB4ODAsIDB4NDQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLCAweDgxLCAweDg0LCAweDAxLCAweDAwLAotCTB4ODQsIDB4ODgsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHg5MywgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDE5LAotCTB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg4YSwgMHg4OCwgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLCAweDMyLCAweGMwLCAweDAxLCAweDAwLAotCTB4OGYsIDB4ODgsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OGUsIDB4ODgsIDB4YTAsIDB4MWMsCi0JMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDlkLCAweDg4LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5YiwgMHg4OCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4ODgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MWEsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAotCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhMywgMHg4OCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIxLCAweDg4LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhhZCwgMHg4OCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YWEsIDB4ODgsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmIsIDB4OTUsIDB4MDAsIDB4NDEsIDB4MjMsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsCi0JMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4ODgsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKLQkweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGMxLCAweDg4LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4OCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODgsIDB4MjIsIDB4NDAsCi0JMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjOSwgMHg4OCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGM4LCAweDg4LCAweDIyLCAweDlmLAotCTB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHg2YiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDNmLCAweGMzLCAweDAxLCAweDAwLCAweDRlLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4Y2MsIDB4ODgsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCi0JMHgzZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4OCwgMHgyMiwgMHg0MCwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGNmLCAweDg4LCAweDIwLCAweDFlLCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzcsIDB4OTUsIDB4MDAsIDB4MWUsIDB4MjQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg4OCwgMHgyMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDExLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MzcsIDB4ODgsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGQxLCAweDg4LCAweGEyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDAwLCAweGE2LAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwNCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDFmLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDA0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDRlLCAweDk5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODgsIDB4YTIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4OCwgMHgwMCwgMHgxZSwgMHgzZSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwKLQkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4M2QsIDB4OTksIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhlZiwgMHg4OCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZWYsIDB4ODgsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGVjLCAweDg4LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODgsIDB4MjIsIDB4MDcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLAotCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNywgMHg4OCwgMHgyMCwgMHg5NCwKLQkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGY4LCAweDg4LCAweDAwLCAweDk0LCAweGUxLCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4ODgsIDB4MjIsIDB4NDAsCi0JMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODksIDB4YTgsIDB4NDAsCi0JMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDUyLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDBlLCAweDg5LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDg5LCAweDY4LCAweDA3LAotCTB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgxZiwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDg5LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg5LCAweDIyLCAweDBkLAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4ODksIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg4OSwgMHgwMCwgMHgwZCwKLQkweDI0LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDg5LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDI3LCAweDg5LCAweDAwLCAweDQxLAotCTB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg4OSwgMHhhOCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTQsIDB4MDAsIDB4NDMsCi0JMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDQ0LCAweDg5LCAweGEyLCAweDBkLAotCTB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4ODksIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDMxLCAweDg5LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyZSwgMHg4OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzgsIDB4ODksIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ODksIDB4MDAsIDB4NGMsCi0JMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDA5LCAweDg5LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDQxLCAweDg5LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDA5LCAweDg5LCAweDAwLCAweDAzLAotCTB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ODksIDB4MDAsIDB4MGQsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHg0ZSwgMHg4OSwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4ODksIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDRiLCAweDg5LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NCwgMHgwMCwgMHg0MSwKLQkweDIzLCAweDQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAxLCAweDAwLAotCTB4NTIsIDB4ODksIDB4MDAsIDB4NDAsIDB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU3LCAweDg5LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LAotCTB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0ZSwgMHg5OSwgMHgwMCwgMHg0MSwgMHgzZiwgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4M2QsIDB4OTksIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OGEsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAxLCAweDg0LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAotCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg2NiwgMHg4OSwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2NCwgMHg4OSwgMHgyMiwgMHg0MiwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NjUsIDB4ODksIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg4OSwgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDg2LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZlLCAweDg5LCAweDIyLCAweDIwLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODksIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg5NiwgMHgwMCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDg1LCAweDk4LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OTksIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OGEsIDB4YTIsIDB4NWYsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGY0LCAweDAxLCAweDAwLAotCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODksIDB4MjIsIDB4NDgsCi0JMHg4ZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDdkLCAweDg5LCAweDFmLCAweGYwLAotCTB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODksIDB4MjMsIDB4NDEsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhOCwgMHg4YSwgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg4YSwgMHgwMCwgMHg0OCwKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODIsIDB4ODksIDB4MjIsIDB4MGEsCi0JMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg5OSwgMHgwMCwgMHg0MCwgMHg5MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDhhLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweDQ1LAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGUsIDB4ODksIDB4MjIsIDB4ZjAsIDB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhhMywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHhmMywKLQkweDgyLCAweGUwLCAweDAxLCAweDAwLCAweDg4LCAweDg5LCAweGEzLCAweDQxLCAweDJjLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU4LCAweDAxLCAweDAwLCAweGE4LCAweDhhLCAweDIwLCAweDRjLAotCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4NDEsIDB4OTgsIDB4ZTgsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHg4YSwgMHgyMCwgMHhmMCwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgyMiwgMHgwYSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OGEsIDB4MDAsIDB4NDksCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDk2LCAweDg5LCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4OTcsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxYSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHg5NywgMHg4OSwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA4LCAweGIxLCAweDAxLCAweDAwLAotCTB4OTksIDB4ODksIDB4OWYsIDB4ODUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OWQsIDB4ODksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4NCwgMHgyMiwgMHg0MCwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweDk5LCAweDAxLCAweDAwLCAweDlkLCAweDg5LCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHg0OSwgMHg4NCwgMHgxYSwgMHg1YiwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGEwLCAweDg5LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4YzksIDB4ODksIDB4MWQsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4ODksIDB4MjIsIDB4NDAsCi0JMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4OSwgMHgyMiwgMHg1YiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDVkLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdkLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTYsIDB4ODksIDB4YTgsIDB4YjEsIDB4OTQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGE5LCAweDg5LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWIsIDB4ODksIDB4NDMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjksIDB4ODksIDB4MjIsIDB4NTcsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGFkLCAweDg5LCAweGE4LCAweGIxLCAweDk0LCAweDMwLCAweDAwLCAweDAwLCAweDc3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODksIDB4YTgsIDB4YjEsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGIyLCAweDg5LCAweGE4LCAweDRhLCAweDgwLCAweDMzLCAweDAwLCAweDAwLAotCTB4YjcsIDB4ODksIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNSwgMHg4OSwgMHhhOCwgMHg0YiwgMHhhYywgMHgzMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFiLCAweGE1LCAweDgyLCAweGIzLCAweDAxLCAweDAwLCAweGJhLCAweDg5LCAweDAwLCAweGJlLAotCTB4ODMsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDAsIDB4ODEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweGM3LCAweDg5LCAweGEyLCAweDQwLCAweDg2LCAweDA0LCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4OWMsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsCi0JMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweGMzLCAweDg5LCAweDUyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4OSwgMHgwMCwgMHg0OCwKLQkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDA1LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg0MSwgMHhlMSwgMHhjMSwgMHgwMCwgMHgwMCwKLQkweDc4LCAweDE4LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweGQwLCAweDg5LCAweDIyLCAweDU0LAotCTB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ODksIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwgMHg2OSwgMHhkZiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwKLQkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4ODksIDB4MGYsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweGUzLCAweDg5LCAweDAwLCAweDUwLCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQ0LAotCTB4ODgsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4ODksIDB4OTksIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg4OSwgMHg5YiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDg5LCAweGQwLCAweDAxLCAweDAwLAotCTB4ZGEsIDB4ODksIDB4MWYsIDB4NDQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDAsCi0JMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGUzLCAweDg5LCAweDAwLCAweDQ4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDU4LAotCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg2LCAweDg4LCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDI2LCAweDA1LCAweDQ3LCAweDMxLCAweDAwLCAweDAwLAotCTB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg0NCwgMHhmMCwgMHg0MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhlOSwgMHg4OSwgMHgyMiwgMHg0MCwgMHhmMiwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MSwgMHg4MCwgMHgwMCwgMHg2ZiwKLQkweDk3LCAweDMzLCAweDAxLCAweDAwLCAweGViLCAweDg5LCAweDIyLCAweDQwLCAweDczLCAweDdkLCAweDAwLCAweDAwLAotCTB4OWIsIDB4ODAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4ODksIDB4MjIsIDB4NTksCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGU2LCAweDg5LCAweDI4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweGVjLCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4YzAsIDB4OTUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4OSwgMHgyMiwgMHg1ZCwKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZjIsIDB4ODksIDB4YTgsIDB4YjEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCi0JMHg3ZiwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHhjNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDI1LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4ODksIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhmOSwgMHg4OSwgMHg0MywgMHg1ZiwgMHg3ZiwgMHgxMywgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMSwgMHgwMCwgMHhiZiwKLQkweGM1LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDdmLCAweDgzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4N2YsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTgsIDB4MDAsIDB4YmYsCi0JMHhjNSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA2LCAweDhhLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDYsIDB4OGEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAzLCAweDhhLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OTUsIDB4MjIsIDB4MDIsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNywgMHg4YSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDYyLCAweDk1LCAweDFhLCAweDAyLAotCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OGEsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMSwgMHg4YSwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4OGEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDZjLCAweDk1LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDEyLCAweDhhLCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHg2YywgMHg5NSwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgxYywgMHg4YSwgMHg5YywgMHgwZiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MWMsIDB4OGEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDE5LCAweDhhLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxZCwgMHg4YSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLAotCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyZiwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDZkLCAweDhhLCAweGEyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI4LCAweDk0LCAweDI5LCAweDQxLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZWYsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBkLCAweDk4LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDUxLCAweDhhLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4MzIsIDB4OGEsIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCi0JMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4YSwgMHgwNSwgMHhjMiwgMHgyNCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDUxLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmUsIDB4OGEsIDB4MWMsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg1MSwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDQ4LCAweDhhLCAweGEwLCAweDQ4LCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4YSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDFhLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OGEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDZlLCAweDhhLCAweDAwLCAweGY4LCAweDE4LCAweDMwLCAweDAxLCAweDAwLAotCTB4NDMsIDB4OGEsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsCi0JMHgzNCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDFhLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NGMsIDB4OGEsIDB4YTgsIDB4MDksIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDVkLCAweDhhLCAweDIyLCAweDQxLAotCTB4MGQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg1OSwgMHg4YSwgMHhhMCwgMHhhYSwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDEyLCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4YSwgMHgwMCwgMHg0MSwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAyLCAweDAwLCAweDA5LCAweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDMwLCAweDhhLCAweDgzLCAweDQxLAotCTB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4YSwgMHgwMCwgMHg0MSwgMHgxYiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg4YSwgMHgyMywgMHg0MCwKLQkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjUsIDB4OGEsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYyLCAweDhhLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4YSwgMHgwMCwgMHhmOCwKLQkweDE4LCAweDMwLCAweDAxLCAweDAwLCAweDY2LCAweDhhLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4OGEsIDB4YTAsIDB4YWEsCi0JMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDk0LCAweDIwLCAweDA3LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgwYywgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgwYywKLQkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDgwLCAweDhhLCAweDI2LCAweDU0LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4NzYsIDB4OGEsIDB4ODcsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3NiwgMHg4YSwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDc2LCAweDhhLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDcyLCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2IsIDB4OGEsIDB4MjIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAotCTB4NzcsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGEsIDB4MjIsIDB4NDksCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LAotCTB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAxLCAweDAwLAotCTB4ODAsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MmYsIDB4NTUsCi0JMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHhhNiwgMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDZmLCAweDg0LCAweGEyLCAweDQxLCAweGU1LCAweDUxLCAweDAwLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODgsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHg4YSwgMHhhMiwgMHg5MywgMHg1NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDU3LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweGFiLCAweDI3LCAweGIzLCAweDAxLCAweDAwLAotCTB4NmYsIDB4ODQsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MjIsIDB4NTEsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg2ZiwgMHg4NCwgMHhhMiwgMHg0MSwgMHgxZCwgMHg1MywgMHgwMCwgMHgwMCwKLQkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDM0LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5NywgMHg4YSwgMHgyMiwgMHg0MCwKLQkweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODEsIDB4MDAsIDB4NDEsIDB4YjUsIDB4NTMsIDB4MDEsIDB4MDAsIDB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDgyLCAweDAwLCAweDQwLAotCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YjUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MTYsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg4MiwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRhLAotCTB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGI0LCAweGY3LCAweDAxLCAweDAwLCAweGZmLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NmYsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweDQwLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHg4YSwgMHgwMCwgMHg0YiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhkMSwgMHg4ZCwgMHgwMCwgMHg0MSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4ZSwgMHgwMCwgMHg0MSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNywgMHg4ZSwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MzcsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzcsIDB4OGUsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NiwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg4ZSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGEzLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MGIsIDB4OTAsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4ZSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDZmLCAweDhmLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2ZiwgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDliLCAweDhmLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGI5LCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI5LCAweDhmLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OGYsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZjIsIDB4OGYsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OGYsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4ZiwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGYsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGZjLCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTAsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZCwgMHg4ZiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg5MCwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OTAsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHg5MCwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDZkLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDZkLCAweDhmLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDBmLCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBmLCAweDkwLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDkwLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDE4LCAweDkwLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI0LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4OGQsIDB4OTAsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4OGUsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDk1LCAweDkwLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4YTMsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTAsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MCwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5MSwgMHg5MCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg4ZSwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBiLCAweDkwLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDA4LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDIwLCAweDQ3LAotCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDk2LCAweGMwLCAweDAxLCAweDAwLAotCTB4NmUsIDB4OGIsIDB4MDAsIDB4NGIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4YmUsIDB4OTAsIDB4MDAsIDB4NDksCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNywgMHg5MCwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZkLCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MGIsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjcsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MSwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODYsIDB4OTEsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OTEsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDkxLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDAwLCAweDQ5LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4MDAsIDB4NGIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlNiwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGU2LCAweDkxLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlNiwgMHg5MSwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZlLCAweDkxLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OTEsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZhLCAweDk0LCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4NywgMHg5MSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5MSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg2LCAweDkxLCAweDAwLCAweDRjLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg5MiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDkyLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4OTIsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDkxLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNiwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDI2LCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI2LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNlLCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTIsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTIsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YWYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTIsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg5MiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDFlLCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkMywgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMywgMHg5MiwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzAsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGMwLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTYsIDB4OTEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDkxLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHgwMCwgMHg0YywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZCwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDMxLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzZCwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzEsIDB4OTIsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDMxLCAweDkyLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZDUsIDB4OTIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0YiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkNSwgMHg5MiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZDUsIDB4OTIsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ1LCAweDkyLCAweDAwLCAweDRjLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4OTIsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWYsIDB4OTIsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZiwgMHg5MiwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGY2LCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmNiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTgsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE5LCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxOCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUwLCAweDkyLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYywgMHg5MiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDkyLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYywgMHg5MiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVjLCAweDkyLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYywgMHg5MiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg5MiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDkyLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVjLCAweDkyLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZlLCAweDkxLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE1LCAweDkyLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmMiwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YjgsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDk0LCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDk0LCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg5NCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NWYsIDB4OTQsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDkxLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGYyLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg5NCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OTQsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNSwgMHg5MiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGIwLCAweDk0LCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg5NCwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3ZiwgMHg5NCwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTQsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdmLCAweDk0LCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5NCwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE1LCAweDkyLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJjLCAweDkxLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTEsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI1LCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDkxLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGIwLCAweDk0LCAweDAwLCAweDRhLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5NCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YiwgMHg5NCwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4OTQsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiNiwgMHg5NCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVkLCAweDk0LCAweDAwLCAweDRhLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGI2LCAweDk0LCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTQsIDB4MDAsIDB4NGEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTEsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNSwgMHg5MSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDJlLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4OGEsIDB4MDAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YmEsIDB4OGQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MWYsIDB4MDAsIDB4MGYsCi0JMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHgyMSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGNhLCAweDhkLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhjYSwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YzcsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGNiLCAweDhkLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsCi0JMHgxMywgMHg4NiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgyZSwgMHg0YiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDBhLCAweDhhLCAweDAwLCAweDA0LCAweGU2LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweGExLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4MDYsIDB4MDcsIDB4NDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNywgMHhkMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgyZSwgMHg1YywKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKLQkweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDRiLAotCTB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTUsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZSwgMHgzNCwKLQkweDk3LCAweDg0LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDRiLCAweGU0LCAweGU1LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDEsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDJlLCAweDQwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweGZjLCAweDhkLCAweDIwLCAweDRiLAotCTB4OTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmOSwgMHg4ZCwgMHgwMCwgMHg0MSwgMHg5NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAzLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4OGUsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwYiwgMHg4ZSwgMHhhMiwgMHg0YywgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDBjLCAweDhlLCAweDAwLCAweDRjLCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDBkLCAweDhlLCAweDIwLCAweGYwLAotCTB4NTYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4NTYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDEzLCAweDhlLCAweGE4LCAweDQ0LAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHg0NiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDFiLCAweDhlLCAweGE4LCAweDQ0LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgzOCwgMHgwMCwgMHgyZSwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDIzLCAweDhlLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OGUsIDB4MjIsIDB4NDQsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDIwLCAweGEyLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgyYSwgMHg4ZSwgMHgyMywgMHgwYiwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4NDMsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OGUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgyZSwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDNhLCAweDhlLCAweGEyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2UsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg4NiwgMHgwMCwgMHgyZiwgMHg0OSwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4ZSwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OGUsIDB4YTIsIDB4NDYsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDQ1LCAweDhlLCAweDAwLCAweDQwLCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDJmLCAweDQ2LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4OGUsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCi0JMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLAotCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MTQsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHg4ZSwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHg4ZSwgMHgyMiwgMHgwYSwKLQkweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsCi0JMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhlNywgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg1NywgMHg4ZSwgMHhhMCwgMHg0MywgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDRkLCAweDhlLCAweDAwLCAweDQxLCAweDE1LCAweGQwLCAweDAwLCAweDAwLAotCTB4NzAsIDB4OGUsIDB4MjIsIDB4MGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsCi0JMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweGU3LCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDhlLCAweDIyLCAweDQxLCAweDE1LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OGUsIDB4YTAsIDB4NDMsCi0JMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDExLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZSwgMHg5NywgMHgwMCwgMHg0NywKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NWYsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDZjLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4OGUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg1MSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg3OCwgMHg4ZSwgMHgwMCwgMHg0OCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDM0LCAweDAwLCAweDJlLCAweDQxLCAweGY1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg4ZSwgMHgyMiwgMHg0NSwKLQkweDIzLCAweDdjLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNlLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDgyLCAweDhlLCAweDIyLCAweDQ4LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwYSwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyYSwgMHg0YSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAotCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OGUsIDB4MjMsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDRjLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MjAsIDB4NDEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDIxLCAweDk5LCAweDAwLCAweGYwLCAweDI0LCAweDMwLCAweDAxLCAweDAwLCAweDk5LCAweDhlLCAweGEyLCAweDQ0LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTcsIDB4OGUsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHg5NiwgMHgwMCwgMHg0MCwgMHgzYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4ZSwgMHhhMiwgMHgwOCwKLQkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDk5LCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmQsIDB4OGUsIDB4YTIsIDB4MDgsCi0JMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU0LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDIwLCAweDAxLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4NjksIDB4OTYsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OGUsIDB4MjIsIDB4NGEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDY5LCAweDk2LCAweDAwLCAweGYzLAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHg2MCwgMHgwMCwKLQkweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDg1LCAweDExLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsCi0JMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OGUsIDB4MDAsIDB4NDksIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4YSwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDNiLCAweDMwLCAweDAxLCAweDAwLCAweGI4LCAweDhlLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDhlLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDQ2LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDJkLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NjgsIDB4ZjIsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDM3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4NDAsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGNiLCAweDhlLCAweDIwLCAweDk0LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTcsIDB4MDAsIDB4OTQsIDB4ZTUsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHhjYywgMHg4ZSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNSwgMHg5NywgMHgwMCwgMHg0MCwKLQkweGU0LCAweDMxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OGUsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsCi0JMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHhkYywgMHg4ZSwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGQ2LCAweDhlLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkMywgMHg4ZSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4OTUsIDB4MDAsIDB4NDMsCi0JMHgyMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4ZSwgMHgyMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUwLCAweDhlLCAweGEzLCAweDAxLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZTEsIDB4OGUsIDB4MDAsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4ZSwgMHgyMCwgMHgwMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGU3LCAweDhlLCAweDAwLCAweDAyLAotCTB4ZjAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4OGUsIDB4YTMsIDB4MDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhlNywgMHg4ZSwgMHg2OCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGU5LCAweDhlLCAweDgwLCAweDA4LCAweGYwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MWUsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDFmLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGViLCAweDhlLCAweGE4LCAweDEzLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OGYsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg0NCwgMHgwMCwgMHgyZCwgMHgwMiwgMHgwYywgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHg4ZiwgMHhhMiwgMHgwMiwKLQkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweGY5LCAweDhlLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OGUsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY0LCAweDhlLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgyZCwgMHg1YywKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDJkLCAweGYwLCAweDM4LCAweGIwLCAweDAxLCAweDAwLAotCTB4NGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmYsIDB4ZjIsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4ZiwgMHgyMiwgMHgwMSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA2LCAweDhmLCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJkLCAweGYwLAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg0YSwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDQ0LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDBmLCAweDhmLCAweGE4LCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgzOCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4ZiwgMHgyMiwgMHgwNiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MWIsIDB4OGYsIDB4YTIsIDB4MDIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4OGYsIDB4MGQsCi0JMHg0MiwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAotCTB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGUsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZSwgMHgwMCwgMHgwMiwKLQkweDM2LCAweGQwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDI3LCAweDhmLCAweDAwLCAweDVmLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweDQ2LAotCTB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgyNiwgMHg4ZiwgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MmQsIDB4OGYsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDJhLCAweDhmLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmYiwgMHg5NSwgMHgwMCwgMHgxMCwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDM0LCAweDhmLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzMSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweDJmLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4ZiwgMHg5MCwgMHhmMiwKLQkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDQyLCAweDhmLCAweDIyLCAweDQ5LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHgxOCwgMHg4YywgMHgwMSwgMHgwMCwgMHhmNSwgMHg5NywgMHgwMCwgMHg0YywKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDUyLCAweDhmLCAweDAwLCAweDAwLCAweDkyLCAweGIwLCAweDAwLCAweDAwLAotCTB4NDksIDB4OGYsIDB4MjIsIDB4NDAsIDB4YWYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MWUsCi0JMHg5NCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDcyLCAweDk4LCAweDAwLCAweDQwLCAweDA1LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDhmLCAweGEyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHg1MiwgMHg4ZiwgMHgwMCwgMHgwMCwgMHg5MiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4ZiwgMHg0MywgMHg0OCwKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAwLCAweDFlLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NGUsIDB4OGYsIDB4MjgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OGYsIDB4MjIsIDB4NDgsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDVhLCAweDhmLCAweDI4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYiwgMHgwMCwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NywgMHg4ZiwgMHgyMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4OGYsIDB4YTIsIDB4NDEsCi0JMHgzYiwgMHg1MCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg4ZiwgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDFlLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OGYsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYiwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg4ZiwgMHgyMiwgMHg1ZiwKLQkweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDRiLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YWEsIDB4OGEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4OGYsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDY1LCAweDhmLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg2MiwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDY1LCAweDhmLCAweDQwLCAweDA1LCAweDQ4LCAweDMxLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsIDB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4NmIsIDB4OGYsIDB4ODUsIDB4Y2EsCi0JMHg5NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5OSwgMHgxOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKLQkweDBlLCAweDAwLCAweDAwLCAweDBmLCAweDFlLCAweDhjLCAweDAxLCAweDAwLCAweDcyLCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MTgsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgwMCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YzcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzIsIDB4OGYsIDB4YTIsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI1LCAweDk3LCAweDAwLCAweDQwLCAweDBkLCAweDMwLCAweDAxLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg4ZiwgMHg5MCwgMHg0YywKLQkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4N2EsIDB4OGYsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDY4LCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHg4MSwgMHg4ZiwgMHgyNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDgyLCAweDhmLCAweDAwLCAweDk0LCAweGU1LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4NjIsIDB4NDAsIDB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsCi0JMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDg4LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5NCwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDQwLCAweDAwLCAweDA4LCAweDk0LCAweGRjLCAweDAxLCAweDAwLCAweDcyLCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OGYsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHg5NSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4OGYsIDB4NDMsIDB4NDgsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDlhLCAweDhmLCAweDI4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDk1LCAweDhmLCAweDIyLCAweDQ4LAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MWIsIDB4MDgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgxYiwgMHg0NywKLQkweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OGYsIDB4YTAsIDB4NDMsCi0JMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLAotCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHhhYSwgMHg4ZiwgMHhhMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgyMiwgMHg0NCwKLQkweDgzLCAweDcwLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MWYsIDB4ZjAsCi0JMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0YiwgMHg5OSwgMHgwMCwgMHg0OCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGFhLCAweDhhLCAweDIzLCAweDQxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGFhLCAweDhhLCAweDAwLCAweDQ3LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAotCTB4ZWUsIDB4OTcsIDB4MDAsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4ZSwgMHhhMiwgMHg0MCwKLQkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweGI4LCAweDhmLCAweDIyLCAweDQ3LCAweDhmLCAweDdjLCAweDAwLCAweDAwLAotCTB4N2UsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MjcsIDB4OTAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHg1ZCwgMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwKLQkweDM3LCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGRjLCAweDAxLCAweDAwLAotCTB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTQsIDB4MDAsIDB4NGEsCi0JMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDhmLCAweGEyLCAweDUwLCAweDhmLCAweDUwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg4ZiwgMHhhMCwgMHg0MywKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MjAsIDB4NDcsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDhmLCAweDg0LCAweDAxLCAweDAwLCAweGRlLCAweDhmLCAweDIyLCAweDQ3LAotCTB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhkZSwgMHg4ZiwgMHgxZiwgMHhmMCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4ZDcsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDcsIDB4OGYsIDB4NDIsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwKLQkweDY5LCAweDkzLCAweDAxLCAweDAwLCAweGRjLCAweDhmLCAweDIzLCAweDQxLCAweDBkLCAweDZjLCAweDAwLCAweDAwLAotCTB4YjksIDB4OGYsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTksIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhhYSwgMHg4YSwgMHgwMCwgMHg0OCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGNmLCAweDhkLCAweDIyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhhMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweGE2LCAweDAwLCAweDJkLCAweDQ5LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmQsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgyLCAweGY4LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OGYsIDB4YTAsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4ZiwgMHhhMywgMHg0MCwKLQkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZWYsIDB4OGYsIDB4MjAsIDB4NGMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4NiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEyLCAweDAwLCAweDIwLCAweDQyLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4NDAsCi0JMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDVmLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgyMiwgMHg0NiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsIDB4OTYsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0YSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGY1LCAweDk3LCAweDAwLCAweDQ2LCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MjIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg4NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwKLQkweDgwLCAweGNjLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4OTcsIDB4MDAsIDB4NDcsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAotCTB4MTMsIDB4OTAsIDB4OTAsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsCi0JMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGNmLCAweDhkLCAweDIyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGNmLCAweDhkLCAweDAwLCAweDQxLAotCTB4ZTUsIDB4YzEsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDNkLCAweDk5LCAweDAwLCAweDQwLAotCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgyMywgMHg5MCwgMHg4MCwgMHhmMywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGU3LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGQsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDExLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4OTAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDUxLCAweDgzLCAweGQwLCAweDAxLCAweDAwLAotCTB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCi0JMHg4NCwgMHhjYywgMHgwMSwgMHgwMCwgMHgzMCwgMHg5MCwgMHg5ZiwgMHg0MiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDQyLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHg5MCwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDMzLCAweDkwLCAweGE4LCAweDRiLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OSwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzNSwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywKLQkweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MmIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg0NywgMHg5MCwgMHhhMCwgMHgxNCwKLQkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MGUsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDUwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDUwLCAweDkwLCAweDIyLCAweDRhLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgzMCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg1MCwgMHg5MCwgMHhhNCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NmUsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTgsIDB4MDAsIDB4MzAsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg5MCwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDViLCAweDkwLCAweDIyLCAweDRhLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDVhLCAweDkwLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTAsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgyMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwKLQkweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsCi0JMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHg2NiwgMHg5MCwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDY4LCAweDkwLCAweDIyLCAweDQzLAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4M2UsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTAsIDB4MjQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDcwLCAweDkwLCAweDAwLCAweDk0LCAweGU1LCAweGIxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDYyLCAweDQwLAotCTB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDc2LCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg5MCwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwOCwKLQkweDk0LCAweGRjLCAweDAxLCAweDAwLCAweDcyLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4N2IsIDB4OTAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5MCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDkwLCAweDQzLCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDA4LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OTAsIDB4YTgsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgzNSwgMHgwMCwgMHgxYiwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDg3LCAweDkwLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDY5LCAweDk2LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLAotCTB4MjcsIDB4OTAsIDB4MjIsIDB4NGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDY5LCAweDk2LCAweDAwLCAweGYzLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDc1LCAweDhlLCAweDIyLCAweDRhLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKLQkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweGYzLCAweDkwLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MGMsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OGUsIDB4MjIsIDB4MDYsCi0JMHg5MCwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLAotCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmEsIDB4NTAsIDB4ZTcsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5MCwgMHhhMCwgMHg0MywKLQkweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OTQsIDB4MDAsIDB4MTAsIDB4ODYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg5MCwgMHg0MiwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDlmLCAweDhlLCAweDFhLCAweDVkLAotCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MmQsIDB4MTAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1YywgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJmLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NmIsIDB4ZmIsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OTAsIDB4YTAsIDB4NDMsCi0JMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAotCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4YjEsIDB4OTAsIDB4YTAsIDB4NDMsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNlLCAweDk0LCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4OTAsIDB4NDIsIDB4MDUsCi0JMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFhLCAweDVkLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHhhMywgMHg4ZiwgMHgyMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWQsIDB4OGYsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGJmLCAweDkwLCAweDQ3LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAotCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTAsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg2YiwgMHg4NCwgMHgxZiwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZSwgMHg5MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWYsIDB4NDIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5MCwgMHhhOCwgMHhiMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDQ2LCAweDk3LCAweDAwLCAweDEwLCAweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDkwLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDIsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTAsIDB4MDAsIDB4NTAsCi0JMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYywgMHg5MCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYyLCAweDRiLCAweDEyLCAweDk0LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0YSwKLQkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NWUsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MDAsIDB4MDUsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGRhLCAweDkwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHhlNiwgMHg5MCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWYsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGVmLCAweDkwLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5NywgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NiwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGY1LCAweDkwLCAweDIwLCAweDA5LCAweDk2LCAweDZjLCAweDAwLCAweDAwLAotCTB4ZjUsIDB4OTAsIDB4MWYsIDB4MDksIDB4OTYsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDk3LCAweDAwLCAweDU3LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmYiwgMHg5MCwgMHgyMiwgMHhmMywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHg0MiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NTIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDIsCi0JMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDUyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MCwKLQkweDk1LCAweDZjLCAweDAwLCAweDAwLCAweDA2LCAweDkxLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweDUyLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDExLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDAwLCAweGE2LAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTEsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwOCwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDJhLCAweGMwLCAweDAxLCAweDAwLCAweGY4LCAweDk3LCAweDAwLCAweDA4LCAweDgwLCAweDMwLCAweDAxLCAweDAwLAotCTB4MTgsIDB4OTEsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTgsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk4LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjAsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFkLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsCi0JMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhmOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MmIsIDB4OTEsIDB4MjIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgzZCwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDJjLCAweDkxLCAweDAwLCAweDQyLCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweDQ1LAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ODcsIDB4OTEsIDB4ODMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4NywgMHg5MSwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDNmLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4M2IsIDB4OTEsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCi0JMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGUzLCAweDg5LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDM4LCAweDkxLCAweGEyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHgxNSwKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MywgMHg5MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NmYsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5MSwgMHhhMCwgMHgwYiwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAotCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NGIsIDB4OTEsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDE1LCAweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDBiLAotCTB4OTksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4NTAsIDB4OTksIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHg2MiwgMHgwMSwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweGYwLCAweDIyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgyMywgMHg4MCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZiwgMHg0MSwgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweDAwLCAweDExLCAweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQ3LAotCTB4ZTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTEsIDB4MjMsIDB4MGIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHhlNSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4MDAsCi0JMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYxLCAweDkxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHg5NSwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDZkLCAweDkxLCAweDI2LCAweDExLCAweDAwLCAweDMwLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDJmLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZjQsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHhlNCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGY4LCAweDk3LCAweDAwLCAweDAwLCAweDJhLCAweDQwLCAweDAxLCAweDAwLCAweDc5LCAweDkxLCAweDIyLCAweDQ0LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDdhLCAweDkxLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAwLCAweDAwLAotCTB4ZGEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjMsIDB4MDAsIDB4YTYsCi0JMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDgyLCAweDkxLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3ZiwgMHg5MSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTEsIDB4MjIsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGJhLCAweDhkLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgyZCwgMHgxNSwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDE1LAotCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1YiwgMHg5NywgMHgwMCwgMHg0MCwKLQkweDM1LCAweGIwLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4Y2IsIDB4OTEsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIyLCAweDAwLCAweDIwLCAweDA2LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGExLCAweDkxLCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5MSwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OTEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzQsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHhiMiwgMHg5MSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMSwgMHg5NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc0LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YmYsIDB4OTEsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhlMiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5MSwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YjEsIDB4OTEsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDIxLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4YmIsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiYywgMHg5MSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJlLCAweDkxLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YzAsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM3LCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUyLCAweDk1LCAweDAwLCAweDQwLAotCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzgsIDB4OTEsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5MSwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5MSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZDYsIDB4OTEsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkNywgMHg5MSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDBhLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYywgMHg5MSwgMHgwMywgMHgxZSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGRkLCAweDkxLCAweDAwLCAweDQxLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGUxLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OTEsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg0ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5MSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGNjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGZiLCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGQ4LCAweDk4LCAweDAwLCAweGYwLCAweDg0LCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGQsIDB4MjIsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGJmLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjYsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZSwgMHg5MSwgMHhhMiwgMHg0MCwKLQkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGI2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MjQsIDB4MDAsIDB4MjAsIDB4MGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MGMsIDB4OTIsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHg5OCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDBjLCAweDkyLCAweDIwLCAweDAxLCAweDk4LCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDksIDB4OTIsIDB4YTgsIDB4MDAsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFjLCAweDAwLCAweDJmLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmYsIDB4MTUsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMSwKLQkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4OGUsIDB4OTEsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZSwgMHg5MSwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHhmMCwKLQkweDg0LCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4MmMsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweGRjLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY1LCAweDk3LCAweDAwLCAweDQ4LAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg5MiwgMHhhOCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjcsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJkLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4M2YsIDB4OTIsIDB4MDAsIDB4MDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmEsIDB4OGQsIDB4ODcsIDB4NDIsCi0JMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZiwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweGJhLCAweDhkLCAweDAwLCAweDQwLCAweGU3LCAweDkxLCAweDAwLCAweDAwLCAweDJmLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg1MSwgMHg5NSwgMHgwMCwgMHg0MCwgMHhlNywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5MiwgMHgyMiwgMHgwMCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM4LCAweDkyLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweGYyLAotCTB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZSwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4NDQsIDB4OTIsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OTIsIDB4YTIsIDB4NDIsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGY5LCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTIsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDRjLCAweDkyLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNlLCAweDkyLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1MiwgMHg5MiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHg0ZCwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTIsIDB4MjIsIDB4NDIsIDB4OTYsIDB4MTQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMCwgMHg2OCwgMHg0MCwKLQkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVkLCAweDkyLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDYxLCAweDkyLCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NSwgMHg5MiwgMHg0NywgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDZhLCAweDkyLCAweDIyLCAweDQ3LAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODQsIDB4MWYsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDA5LCAweDk2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5MiwgMHhhOCwgMHg0MCwKLQkweGUxLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4OTksIDB4M2YsIDB4NDIsIDB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NzYsIDB4OTIsIDB4NDcsIDB4MDUsCi0JMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2UsIDB4OTIsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDdjLCAweDkyLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MGIsCi0JMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwgMHg1MSwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDk2LCAweDkyLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweDk2LCAweDAwLCAweDVmLAotCTB4MDEsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHg5MiwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NiwgMHgwMCwgMHg1MiwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ODAsIDB4OTIsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLAotCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NGMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGExLCAweDk3LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LAotCTB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5MiwgMHgzMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDgxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgxMCwgMHgwZiwgMHg5NCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweGQxLCAweDk5LCAweDAwLCAweDVmLCAweDk1LCAweDA0LCAweDAxLCAweDAwLCAweDU1LCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OTIsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHhhOCwgMHg5MiwgMHg0MywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg0MSwKLQkweDMxLCAweGQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5NSwgMHgwMCwgMHg0MSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLAotCTB4YjQsIDB4OTIsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5MiwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGI1LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHg4OSwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwMCwgMHgyMiwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjUsIDB4OTcsIDB4MDAsIDB4NGEsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTYsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNjLCAweDkyLCAweDIyLCAweDQ3LAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NTEsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHhjYywgMHg5MiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjNywgMHg5MiwgMHhhMiwgMHg0MCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4Y2MsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDc0LCAweDk2LCAweDAwLCAweGYyLCAweDAyLCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDk2LCAweDAwLCAweDRiLAotCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmNSwgMHg5NywgMHgwMCwgMHg0OCwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5NiwgMHgwMCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweGQxLCAweDkyLCAweDg3LCAweDQyLCAweDE5LCAweDEwLCAweDAwLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGRjLCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTgsIDB4MDAsIDB4ZjAsCi0JMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDQ1LCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDIyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZTUsIDB4OTIsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4OTcsIDB4MDAsIDB4NDcsCi0JMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA3LCAweDg0LCAweDk0LCAweDAxLCAweDAwLAotCTB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDk1LCAweDAwLCAweDQxLCAweGU3LCAweDQxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MGEsCi0JMHgyYywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDBiLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAxLCAweDkzLCAweDI2LCAweDQ3LAotCTB4OTcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHg5MywgMHgyMywgMHg0YiwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgzMywgMHg5OCwgMHgwMCwgMHg0YiwKLQkweDA0LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDMzLCAweDk4LCAweDAwLCAweDRiLCAweDA0LCAweDUwLCAweDAxLCAweDAwLCAweDAyLCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHg5MywgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNiwgMHg5MywgMHg4NCwgMHg0OCwKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDgsIDB4OTMsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDksIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MTYsIDB4OTMsIDB4MjIsIDB4MDYsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4OTcsIDB4MDAsIDB4NDUsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5MiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OTMsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg5MiwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgxYywgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MjIsIDB4OTMsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5MywgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDI2LCAweDkzLCAweGEyLCAweDQ3LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgzNCwgMHg5MywgMHgyMiwgMHg0YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDJjLCAweDkzLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDkzLCAweDIyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzMSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4MTYsCi0JMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5MywgMHgyMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGY0LCAweDk4LCAweDAwLCAweDQwLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDcsIDB4OTMsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwKLQkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4MDgsCi0JMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHg5MywgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDE5LCAweDk4LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTgsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTcsIDB4MDAsIDB4NWUsCi0JMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg5MywgMHgyMCwgMHgxNiwKLQkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTMsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0JMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDViLCAweDkzLCAweDg0LCAweDQ1LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDVjLCAweDkzLCAweDAwLCAweDBhLAotCTB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1YiwgMHg5NywgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY0LCAweDkzLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzMsIDB4OTMsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg3NCwgMHg5MywgMHgyMiwgMHg0MCwgMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCi0JMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDZiLCAweDkzLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODQsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLAotCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTMsIDB4MDAsIDB4NWMsCi0JMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDk1LCAweDAwLCAweDQwLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTMsIDB4MjMsIDB4MGQsIDB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MywgMHgyMiwgMHg0NiwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4ODAsIDB4OTMsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDkzLCAweGE4LCAweDQ2LCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZWEsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDg1LCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4YiwgMHg5MywgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDhmLCAweDkzLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4OTMsIDB4YTIsIDB4NDcsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGE0LCAweDkzLCAweDIyLCAweDRhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OTMsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTMsIDB4MjIsIDB4NDIsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MywgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHg5ZCwgMHg5MywgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKLQkweDExLCAweDkwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLAotCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTEsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJhLCAweDE1LAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhhNywgMHg5MywgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY0LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTMsIDB4MjIsIDB4NDcsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiMSwgMHg5MywgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGFjLCAweDkzLCAweGEyLCAweGYzLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAotCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHg5MywgMHgyMiwgMHg0MCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDExLCAweDkwLCAweDAxLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MmQsIDB4MDAsCi0JMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDkxLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGY0LCAweDk4LCAweDAwLCAweDQxLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OTMsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5MywgMHgyMywgMHgwZCwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTMsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMSwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDJiLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHhjYiwgMHg5MywgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDkzLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDIyLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTMsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGQzLCAweDkzLCAweDIyLCAweDQwLAotCTB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTcsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsCi0JMHhkYiwgMHg5MywgMHgyMiwgMHg0MCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhkOSwgMHg5MywgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhlYSwgMHg5MywgMHgwMCwgMHg1ZSwKLQkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGRlLCAweDkzLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5MywgMHgyMiwgMHg0MCwgMHgxYiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDE5LCAweDk4LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGVhLCAweDkzLCAweDIyLCAweDQwLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKLQkweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGU4LCAweDkzLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhlYiwgMHg5MywgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAotCTB4ZjIsIDB4OTMsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTEsCi0JMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk4LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweGExLCAweDk3LCAweDAwLCAweDVlLAotCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5NiwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQxLAotCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5NCwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDEsIDB4OTQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA3LCAweDk0LCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDFhLCAweGQwLCAweDAxLCAweDAwLCAweDBkLCAweDk0LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTUsIDB4OTQsIDB4MjIsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHg5MywgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDk4LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDEwLCAweDk0LCAweDIyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmIsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg5NCwgMHgyMywgMHgwZCwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDhkLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTQsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg5NSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MjcsIDB4OTQsIDB4MjYsIDB4NDcsCi0JMHg5NywgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDI3LCAweDk0LCAweDIzLCAweDRiLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDMzLCAweDk4LCAweDAwLCAweDRiLAotCTB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLQkweDE2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MzMsIDB4OTgsIDB4MDAsIDB4NGIsIDB4MDQsIDB4NTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMywgMHg5OCwgMHgwMCwgMHgwNiwgMHgwNCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDJkLCAweDk0LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmMsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwKLQkweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MzQsIDB4OTQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5NCwgMHgyMiwgMHgwNiwKLQkweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDI0LCAweDk3LCAweDAwLCAweDQ1LCAweDFmLCAweDAwLCAweDAxLCAweDAwLAotCTB4MWIsIDB4OTQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDM5LCAweDk0LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4OTQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZWEsIDB4OTYsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDQyLCAweDk0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0OCwgMHg5NCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDRiLCAweDk0LCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKLQkweDU5LCAweDk0LCAweDIyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDUxLCAweDk0LCAweGEyLCAweDE2LAotCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLAotCTB4NTUsIDB4OTQsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGM5LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLAotCTB4MmEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg4ZCwgMHgwMCwgMHgxNiwgMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgzNSwgMHg5MywgMHhhMiwgMHgxNiwKLQkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OGQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NSwgMHgwMCwgMHg0YSwgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDkzLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAwLCAweDAwLCAweDhhLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjMsIDB4OTQsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2NiwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDk2LCAweDAwLCAweDE1LCAweDk0LCAweDMwLCAweDAxLCAweDAwLAotCTB4N2IsIDB4OTYsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHg5NCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGFmLCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQ1LAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmZSwgMHg5MSwgMHgwMCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NDksIDB4OTMsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YSwgMHg5NCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg3MywgMHg5NCwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc3LCAweDk0LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NzQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3NywgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDg5LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiNiwgMHg5NiwgMHgwMCwgMHg0NywgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ5LCAweDkzLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLAotCTB4YmYsIDB4OTUsIDB4MDAsIDB4NDcsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OTQsIDB4YTIsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5NCwgMHhhMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTMsIDB4ODksIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg3NCwgMHg5NiwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5NiwgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZjksIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NywgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDg5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweDIwLCAweDA4LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHg5NSwgMHgwMCwgMHgxMCwgMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDEzLCAweGIwLCAweDAwLCAweDAwLCAweGJmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4OWMsIDB4OTQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCi0JMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDk1LCAweDk0LCAweDM3LCAweDVjLAotCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHg5NCwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4OTksIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODksIDB4MTcsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiMywgMHg5NiwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGVhLCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAotCTB4NmYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4NCwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDNmLCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2YsIDB4OTEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDg3LCAweDkxLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweGIzLCAweDk0LCAweGEyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhlZiwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NiwgMHgwMCwgMHg0YSwKLQkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDZmLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NDksIDB4OTMsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZlLCAweDkxLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MzcsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzMsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJmLCAweDk0LCAweDg1LCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4NDgsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4YzEsIDB4OTQsIDB4OWMsIDB4MTcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0YywgMHgwMywgMHhkMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDM0LCAweGMzLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDExLAotCTB4MTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5NCwgMHgwMCwgMHg1MCwgMHg0MywgMHhjMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGNhLCAweDk0LCAweDIyLCAweDQwLCAweGU1LCAweDZkLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ZTUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDIzLCAweGQwLCAweDAwLCAweDAwLCAweGM2LCAweDk0LCAweDAwLCAweDUwLAotCTB4NDMsIDB4ZDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4OTUsIDB4MDAsIDB4NDEsIDB4ZTEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZDcsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHgwMSwgMHg4YywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLAotCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhlMSwgMHg5NCwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmYiwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGUzLCAweDk0LCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OGQsIDB4OTgsIDB4MDAsIDB4NDcsCi0JMHgxOSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGQ4LCAweDk4LCAweDAwLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmOCwgMHg5NCwgMHhhMiwgMHg0YiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg0YiwgMHg5NSwgMHhhMiwgMHg0YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAotCTB4ZmIsIDB4OTQsIDB4YTIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4NDYsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg5NCwgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGYzLCAweDk0LCAweDIyLCAweGYwLAotCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MWYsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0ZiwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDhhLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4NDksIDB4OTUsIDB4MjAsIDB4NDIsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4OTQsIDB4MjIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDU4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGZhLCAweDk0LCAweDIyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1YiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4OTQsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OTUsIDB4MjMsIDB4ZjAsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNSwgMHg5NSwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDRhLCAweDk1LCAweGEyLCAweDQyLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDRhLCAweDk1LCAweGEyLCAweDQxLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1MSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDRhLCAweDk1LCAweDFmLCAweDEyLCAweDg0LCAweDUwLCAweDAwLCAweDAwLAotCTB4NGEsIDB4OTUsIDB4YTAsIDB4MDEsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDMzLCAweDk1LCAweGEyLCAweDQ2LCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjUsIDB4OTUsIDB4MjIsIDB4ZjAsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxMSwgMHg5NSwgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgyMiwgMHg5NSwgMHgwMywgMHgxZSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDEwLCAweDk1LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNiwgMHg5NSwgMHgyMiwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDE5LCAweDk1LCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDE1LCAweDk1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1NiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg5NSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDFmLCAweDk1LCAweDIwLCAweDkxLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDFlLCAweDk1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgyNywgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg5NSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjQsIDB4OTUsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmUsIDB4OTUsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgyYiwgMHg5NSwgMHhhMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NSwgMHhhMiwgMHhmMiwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OTUsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDJiLCAweDk1LCAweGEwLCAweDkxLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjksIDB4OTUsIDB4MjIsIDB4NDMsIDB4M2QsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzMiwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTUsIDB4YTIsIDB4ZjAsCi0JMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDM5LCAweDk1LCAweGEyLCAweGYyLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQwLAotCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHg5NSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOSwgMHg5NSwgMHgyMCwgMHg5MSwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDJiLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NDAsIDB4OTUsIDB4MjAsIDB4MGEsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2YsIDB4OTUsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDQ1LCAweDk1LCAweDIyLCAweDBhLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4OTUsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg0NCwgMHg5NSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4NDcsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDRkLCAweDk1LCAweDAwLCAweDQzLCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDRkLCAweDk1LCAweDAwLCAweDQxLAotCTB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0ZCwgMHg5NSwgMHgwMCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg5NSwgMHgwMCwgMHg0YywKLQkweDk1LCAweGIwLCAweDAwLCAweDAwLCAweGY1LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTAsIDB4OTUsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDJkLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTUsIDB4YTIsIDB4ZjMsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyYSwgMHg0MSwKLQkweGU3LCAweGQxLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLCAweDg1LCAweGUwLCAweDAxLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OTUsIDB4MjIsIDB4NWEsCi0JMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDVjLCAweDk1LCAweDAwLCAweDVhLCAweDAxLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMCwgMHhhNSwgMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTksIDB4MDAsIDB4ZjAsCi0JMHg4YywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg5NSwgMHgyMiwgMHg0MCwgMHgwZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDY2LCAweDk1LCAweGEyLCAweDRiLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4NjcsIDB4OTUsIDB4MjIsIDB4ZjAsIDB4MTgsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5NiwgMHgwMCwgMHgwNywKLQkweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDZmLCAweDg0LCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NmIsIDB4OTUsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg2ZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MzIsIDB4OTYsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHg5NSwgMHgzMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDc3LCAweDk1LCAweGExLCAweGFkLCAweDk1LCAweDIwLCAweDAwLCAweDAwLCAweDg1LCAweDk1LCAweDEzLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NGEsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwZiwKLQkweDVlLCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDVmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsCi0JMHg0OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDU4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LAotCTB4NGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4ODYsIDB4MDAsIDB4NDAsIDB4NWQsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQxLCAweDk3LCAweGIwLCAweDAwLCAweDAwLAotCTB4ODIsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4NiwgMHg5NSwgMHg0NCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGMyLAotCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTUsIDB4YTIsIDB4NDUsIDB4MjUsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHg5NSwgMHgzMSwgMHgyMCwgMHg4NSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg5NSwgMHgyMiwgMHgxMiwKLQkweDQ4LCAweDdmLCAweDAwLCAweDAwLCAweDUxLCAweDk4LCAweDExLCAweDEyLCAweDQ4LCAweDAzLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDk1LCAweDMxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LAotCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTEsIDB4OTUsIDB4MjIsIDB4MTIsIDB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHg1MSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDllLCAweDk1LCAweDBiLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4NDgsIDB4ODMsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTUsIDB4MjIsIDB4NTAsCi0JMHg4NSwgMHg3MCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDUxLCAweDk3LCAweDAwLCAweGYyLCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweGQxLCAweDk5LCAweDAwLCAweDEyLAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKLQkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQyLCAweDEwLCAweGY0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjcsIDB4M2YsIDB4NDMsIDB4MTEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg4YSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhMSwgMHg5NSwgMHgzMCwgMHhhMSwgMHgwYywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGE0LCAweDk1LCAweDIyLCAweDQ1LCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDkxLCAweDk1LCAweDEwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDUsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDg1LCAweDgwLCAweDAxLCAweDAwLAotCTB4NWUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTEsIDB4OTcsIDB4MDAsIDB4ZjIsCi0JMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTUsIDB4MjIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGIzLCAweDk1LCAweGE4LCAweDA1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEyLAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NGIsIDB4OTYsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwKLQkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDQyLCAweDg0LCAweDg4LCAweDAxLCAweDAwLAotCTB4YmMsIDB4OTUsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmQsIDB4OTUsIDB4MDAsIDB4NDIsCi0JMHg2OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGJkLCAweDk1LCAweDMxLCAweDVhLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDQyLAotCTB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YmYsIDB4OTUsIDB4MzUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5NSwgMHgyOCwgMHhiMSwKLQkweDJjLCAweDMwLCAweDAwLCAweDAwLCAweGMwLCAweDk1LCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg5NSwgMHhhOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDk1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdmLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2IsIDB4OTUsIDB4MjgsIDB4YjEsIDB4MTAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhjNywgMHg5NSwgMHg5ZiwgMHhiYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDExLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDI0LCAweDExLCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGNkLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDk0LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OTUsIDB4MzIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhkNywgMHg5NSwgMHgyMiwgMHhmOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwKLQkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDkyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4OTIsIDB4NDgsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGRiLCAweDk1LCAweDI4LCAweGIxLCAweDkyLCAweDMwLCAweDAwLCAweDAwLCAweGQ3LCAweDk1LCAweDIyLCAweDRjLAotCTB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTIsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5NSwgMHhhOCwgMHhiMSwKLQkweDkwLCAweDMwLCAweDAwLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweDQ4LCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDkyLCAweDQ5LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKLQkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGU4LCAweDk1LCAweDIyLCAweDFhLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg5NSwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsIDB4ODIsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHhmMCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKLQkweDAwLCAweGVjLCAweDAwLCAweDAwLCAweGYxLCAweDk1LCAweDIyLCAweDBkLCAweDAwLCAweDZjLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NSwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGY2LCAweDk1LCAweDgzLCAweDFlLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgyZCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZCwgMHgxMSwgMHgxMCwgMHhjMSwgMHgwMCwgMHgwMCwKLQkweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDQzLCAweGMxLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDUwLAotCTB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHg5NiwgMHgyMiwgMHg0MCwgMHhmNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDQzLCAweGQxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweGU1LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNywgMHg5NiwgMHgyMiwgMHgxMSwgMHgxZSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA5LCAweDk2LCAweGEwLCAweGYwLCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDA5LCAweDk2LCAweDAwLCAweDQxLAotCTB4MTcsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTYsIDB4YTAsIDB4ZjQsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwKLQkweDIzLCAweGQwLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDUyLCAweDQzLCAweGQxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4OTYsIDB4MzAsIDB4NDcsCi0JMHgxNywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5NiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDkwLCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTYsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg0MSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MTQsIDB4OTYsIDB4NDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4OTksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5NiwgMHhhMiwgMHg0NSwgMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAxLCAweDk3LCAweDNmLCAweDQxLCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MzEsIDB4OTYsIDB4MDAsIDB4M2IsIDB4ZTcsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTYsIDB4MzAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg5NiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDk2LCAweGEyLCAweDBiLAotCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5OCwgMHg0MiwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHgwZCwKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDEsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMSwgMHhhMiwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDRhLCAweDQ0LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNlLCAweDQxLAotCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNiLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDcsCi0JMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDg2LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDQzLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgzNSwgMHg5NiwgMHg0MCwgMHgwOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkYiwgMHg5OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQxLCAweDk2LCAweDIyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAotCTB4M2QsIDB4OTYsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGYsCi0JMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgzYSwgMHg5NiwgMHgzMSwgMHg1ZiwgMHg5NywgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDExLCAweDRiLCAweDQ4LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NmEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTYsIDB4MzAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDQ5LCAweDk2LCAweGEyLCAweDNiLAotCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5NiwgMHgxOCwgMHg0YSwKLQkweDQ0LCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTYsIDB4MjIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHgwZiwgMHg5OCwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDVlLCAweDk0LCAweDAxLCAweDAwLCAweDUxLCAweDk2LCAweDAwLCAweDA1LAotCTB4NGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4YTcsIDB4NWUsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHg5NiwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGRiLCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU5LCAweDk2LCAweDIyLCAweDQ1LAotCTB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhkOSwgMHg5OSwgMHgwMCwgMHg0YSwgMHg0NCwgMHgxMywgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwKLQkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsCi0JMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2MSwgMHg5NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5NiwgMHhhMiwgMHgzYiwKLQkweDg5LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDlkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OTksIDB4MDAsIDB4MTIsCi0JMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg5NiwgMHgwMCwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZTYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmYsIDB4NGYsIDB4OTUsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHg0YiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDQzLCAweDg1LCAweDZjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ZTMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MmQsIDB4NDQsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYyLCAweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDUxLCAweDk1LCAweDAwLCAweDEwLAotCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0YywgMHgwMiwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweDc4LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OTYsIDB4MjIsIDB4NDEsIDB4MDMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MSwgMHg5NiwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2MsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3YywgMHg5NiwgMHgwMCwgMHg1YywKLQkweDAxLCAweDgwLCAweDAwLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4MDYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweGM3LCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTYsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MSwKLQkweDgyLCAweGNjLCAweDAxLCAweDAwLCAweDhkLCAweDk2LCAweGFhLCAweDQxLCAweDNiLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwNCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweGFlLCAweDk2LCAweDI2LCAweDQ2LCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDAzLAotCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDEsIDB4MjAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhZCwgMHg5NiwgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OTYsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHhhYywgMHg5NiwgMHgyMiwgMHg0MSwgMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhhYSwgMHg5NiwgMHhhMiwgMHg0MSwKLQkweDIzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhNSwgMHg5NiwgMHhhOCwgMHg0NiwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg5YSwgMHg5NiwgMHgwMCwgMHg1MCwKLQkweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4MWEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5NiwgMHgyMiwgMHg0MCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDVjLAotCTB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTYsIDB4MDAsIDB4NDEsIDB4M2IsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHg1ZiwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGJiLCAweDk2LCAweDhjLCAweGY4LCAweDhlLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsIDB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJlLCAweGY4LCAweDBjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MmEsIDB4NGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM4LCAweDk2LCAweDIwLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgyMCwgMHhmMCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyMCwgMHg0YSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDIwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4YjMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MmQsIDB4NDIsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGNlLCAweDk2LCAweGEyLCAweGE1LAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhkMSwgMHg5NiwgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsCi0JMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGQ2LCAweDk2LCAweGEwLCAweGE1LCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDEsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkYiwgMHg5NiwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDk4LCAweGRjLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDRjLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4ODAsIDB4MDAsCi0JMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsIDB4MDUsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHhlNywgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkMCwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweGY2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg2MywgMHhmMywgMHg5NiwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmZSwgMHg5NiwgMHg5ZiwgMHg0MSwKLQkweDg1LCAweDUwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGNjLCAweDAxLCAweDAwLAotCTB4MmQsIDB4MDAsIDB4YTAsIDB4NDIsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDAsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMywgMHg5NywgMHg1MiwgMHg0MywgMHg4MSwgMHg2MCwgMHgwMCwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDk3LCAweDAwLCAweDQxLAotCTB4ODAsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDk1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDUsIDB4OTcsIDB4OWUsIDB4YmIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OTcsIDB4YTIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQxLCAweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDE1LAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKLQkweDM4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDNjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2EsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4OTcsIDB4OWMsIDB4MTcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxNCwgMHg5NywgMHhhMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDFlLAotCTB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTcsIDB4YTIsIDB4NDgsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMywgMHg5NywgMHhhMiwgMHg4YSwKLQkweGYxLCAweDZkLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLCAweDAyLCAweGNjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4M2UsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjQsCi0JMHgyOCwgMHhjYywgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDFlLCAweDk3LCAweDIwLCAweGYwLCAweDNlLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMywKLQkweDNhLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDcsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweGYwLAotCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmYsIDB4ZjIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNiwgMHgxNCwgMHhlYywgMHgwMCwgMHgwMCwgMHgyYiwgMHg5NywgMHgyMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDJhLCAweGVjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJhLCAweDRjLCAweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzNSwgMHg5NywgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDEsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYiwgMHg5NywgMHg0NSwgMHg0MiwKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4M2MsIDB4OTcsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDAxLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDIsIDB4OTcsIDB4NDUsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MywgMHg5NywgMHhhOCwgMHgwMCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA5LAotCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5NywgMHg0NiwgMHg0MiwKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGM5LCAweDAxLCAweDAwLAotCTB4NGUsIDB4OTcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDUyLCAweDk3LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDVhLCAweDk3LCAweDIyLCAweGYzLAotCTB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg1NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDZhLCAweDk3LCAweDgyLCAweDQxLAotCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTcsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHg5NCwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDY1LCAweDk3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg5NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg5NywgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMiwgMHg5NSwgMHgwMCwgMHg0MywKLQkweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4NmMsIDB4OTcsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OTcsIDB4MDAsIDB4MDYsCi0JMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDZmLCAweDk3LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MGIsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHg3NCwgMHg5NywgMHgyNiwgMHg0NywgMHg5NywgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDc0LCAweDk3LCAweDIzLCAweDRiLCAweDA0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTgsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NywgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDc4LCAweDk3LCAweGEyLCAweDAyLCAweDJhLCAweDUwLCAweDAwLCAweDAwLCAweDllLCAweDk3LCAweGEyLCAweDQ1LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTcsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg4MywgMHg5NywgMHgwMCwgMHgwMiwgMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHg5NywgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4ODIsIDB4OTcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDdlLCAweDk3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHg5NywgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NywgMHgyMiwgMHgxNSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAotCTB4OWQsIDB4OTcsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTcsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDhmLCAweDk3LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg5NywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFiLCAweDg0LCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDAwLCAweDJmLCAweDVjLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg1YywgMHg5NywgMHgyMCwgMHgxNSwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCi0JMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDlhLCAweDk3LCAweGE4LCAweDQ2LAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4OTcsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHg5NywgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg5NywgMHhhMiwgMHg0NCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGRhLCAweDk0LCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4YTcsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgyNywgMHhlYywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDk1LCAweDAwLCAweDQxLAotCTB4YTMsIDB4NDEsIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTcsIDB4MDAsIDB4NDEsIDB4MjcsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiMiwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDk4LCAweDAwLCAweDQwLCAweDJiLCAweDMwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDA2LAotCTB4MTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YzQsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NmMsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4NDAsCi0JMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGMzLCAweDk3LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLAotCTB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhjMywgMHg5NywgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGU0LCAweDk3LCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZDAsIDB4OTcsIDB4YTIsIDB4MDYsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2QsIDB4OTcsIDB4MjIsIDB4NDgsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjOCwgMHg5NywgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MzEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgyZCwgMHg0OCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyMCwgMHg0NSwKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGQwLCAweDk3LCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAwLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTcsIDB4YTAsIDB4NDgsCi0JMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLAotCTB4ZmMsIDB4YzksIDB4MDEsIDB4MDAsIDB4M2IsIDB4OTgsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHg5NywgMHgyMiwgMHg0YSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhkYSwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGRmLCAweDk3LCAweDY0LCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkZiwgMHg5NywgMHhhMiwgMHhmMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDhjLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDYsCi0JMHgzMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NiwgMHgwYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGJjLCAweDAwLCAweDJkLCAweDQ2LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweGYyLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwgMHgzYiwgMHg5OCwgMHgwMCwgMHgzMCwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRhLCAweDE5LCAweGZjLCAweDAwLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsCi0JMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGVkLCAweDk3LCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGYyLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLAotCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NGMsIDB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0YSwgMHgxOCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LAotCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ZTgsIDB4NWYsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg3YSwgMHgwMSwgMHgyZSwgMHhmZSwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDhiLCAweDAwLCAweDJkLCAweGY2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDBhLCAweDk4LCAweDIyLCAweDQzLAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwKLQkweDgyLCAweGM4LCAweDAxLCAweDAwLCAweDBlLCAweDk4LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsCi0JMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDk4LCAweDQyLCAweDMwLCAweDNkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDllLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDEsIDB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ5LCAweDk4LCAweGY0LCAweDAxLCAweDAwLAotCTB4MTgsIDB4OTgsIDB4MjYsIDB4MzAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTgsIDB4OTAsIDB4NGMsCi0JMHg5MiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDgwLCAweDQ5LCAweGVjLCAweGE5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDEsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWQsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYSwgMHg5OCwgMHgyMiwgMHg1ZiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDI5LCAweDk4LCAweGEyLCAweDQwLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKLQkweDk3LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjksIDB4OTgsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDk4LCAweGEyLCAweDVmLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLAotCTB4MTksIDB4N2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk2LCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAyLAotCTB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweGYwLCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDQxLCAweDk4LCAweDIwLCAweDRjLAotCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0MSwgMHg5OCwgMHgyMCwgMHhmMiwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDJkLCAweDE0LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDAsIDB4MmQsIDB4MTQsCi0JMHg5OCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5OCwgMHgyMCwgMHg0YywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTgsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMCwgMHgyMCwgMHgxNCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDAwLCAweDI1LCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4ZjMsIDB4ODAsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDIsCi0JMHg4MiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OCwgMHhhMCwgMHg0MCwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLAotCTB4ODIsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4YTAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1MiwgMHg5OCwgMHgwMCwgMHgxMiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4ODAsIDB4NGIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDUwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg1NiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4NDAsIDB4NWIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDYwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg2NSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4NmIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDcwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg3NSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4YzAsIDB4N2EsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDcyLCAweDk4LCAweDQzLCAweDU3LCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDdlLCAweDk4LCAweGEyLCAweDU3LAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2UsIDB4OTgsIDB4YTIsIDB4NDAsIDB4ODEsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0YSwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDc2LCAweDk4LCAweGE4LCAweDRhLCAweDgwLCAweDMzLCAweDAwLCAweDAwLAotCTB4N2IsIDB4OTgsIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3OSwgMHg5OCwgMHhhOCwgMHg0YiwgMHhhYywgMHgzMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFiLCAweGE1LCAweDgyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJlLAotCTB4ODMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4MiwgMHg5OCwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdlLCAweDk4LCAweDIyLCAweDU3LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OWIsIDB4MjAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg5OCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDliLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGE4LCAweDAwLCAweDJkLCAweDFjLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLAotCTB4OGEsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OGIsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGE0LCAweDAwLCAweDJkLCAweDQ1LCAweGUwLCAweGQxLCAweDAxLCAweDAwLAotCTB4OTcsIDB4OTgsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmUsIDB4MDAsIDB4MmYsIDB4YWIsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5OCwgMHgwMCwgMHgxNCwgMHg4MiwgMHg1MCwgMHgwMSwgMHgwMCwKLQkweDljLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDljLCAweDk4LCAweDIyLCAweGYyLAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg5YywgMHg5OCwgMHg5ZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YTgsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4MzAsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDk0LCAweDAwLCAweDJkLCAweGYyLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk4LCAweDIzLCAweGYwLAotCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg5OCwgMHgyMCwgMHg1MCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNSwgMHg5OCwgMHhhMywgMHg5MiwKLQkweDg3LCAweDZjLCAweDAwLCAweDAwLCAweGE1LCAweDk4LCAweDAwLCAweDQ0LCAweDEwLCAweGM5LCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGEsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDksCi0JMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwOCwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDk4LCAweDAwLCAweDA3LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA3LAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDcsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5OCwgMHgwMCwgMHgwNiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNiwKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDYsCi0JMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDk4LCAweDAwLCAweDA1LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDA1LAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MDUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5OCwgMHgwMCwgMHgwNSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5OCwgMHgwMCwgMHg0NCwKLQkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBmLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGUsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGQsCi0JMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDk4LCAweDAwLCAweDBjLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBjLAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGMsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYywKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsCi0JMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5OCwgMHgwMCwgMHgwYiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDk4LCAweDAwLCAweDBiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGM2LCAweDk4LCAweDAwLCAweDBiLAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTgsIDB4MDAsIDB4MGIsIDB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMywKLQkweDgwLCAweGUwLCAweDAxLCAweDAwLCAweGNiLCAweDk4LCAweDIzLCAweDQwLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAotCTB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg5OCwgMHhhMiwgMHhmMCwgMHgzOCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDljLCAweDAwLCAweDIwLCAweDQyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDYsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGY0LCAweDAxLCAweDAwLAotCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4ZDUsIDB4OTgsIDB4MjMsIDB4NDEsCi0JMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDg5LCAweDBjLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4ZjIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MSwgMHgyNCwgMHhlYywgMHgwMCwgMHgwMCwgMHhkZiwgMHg5OCwgMHhhNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDQyLCAweDM4LCAweGVjLCAweDAwLCAweDAwLAotCTB4ZGYsIDB4OTgsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5OCwgMHhhMywgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTUsIDB4OTgsIDB4MjIsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHgyMCwgMHgxZCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyZCwgMHg1ZiwKLQkweDEzLCAweDk0LCAweDAxLCAweDAwLCAweGU1LCAweDk4LCAweDIzLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MjAsIDB4MTIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHhhMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhlZSwgMHg5OCwgMHg5ZiwgMHg0MSwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDhjLCAweGQwLCAweDAxLCAweDAwLAotCTB4ZWYsIDB4OTgsIDB4MDAsIDB4NDEsIDB4MjQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmMSwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZjgsIDB4OTgsIDB4YTIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDk4LCAweDJmLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweGUzLCAweDg5LCAweDAwLCAweDQxLAotCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ZjgsIDB4M2UsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5ZiwgMHgxMiwgMHhlMCwgMHhlZCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMCwgMHgyMCwgMHhhYiwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweGEwLCAweDFmLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDEsIDB4OTksIDB4YTMsIDB4NWYsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhlNywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDE1LCAweDk5LCAweDIyLCAweGYyLCAweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQzLAotCTB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHgwMCwgMHgyZCwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MCwKLQkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDA5LCAweDk5LCAweDFmLCAweDQzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MGEsIDB4OTksIDB4YTIsIDB4NDAsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDEsCi0JMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHg5OSwgMHg5ZiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJlLCAweDQyLCAweDgwLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsIDB4ODgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTksIDB4MWYsIDB4NDQsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5OSwgMHhhMiwgMHg0MCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDE4LCAweDk5LCAweDYyLCAweDQxLCAweDg5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDYyLCAweDQxLAotCTB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg2MiwgMHg0MSwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGEyLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4MmUsIDB4NDMsIDB4ODcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5OSwgMHgyMCwgMHg0MywgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQzLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDQzLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NDMsIDB4ZTQsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMSwgMHhlMiwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYyLCAweDJlLCAweGIwLCAweDAxLCAweDAwLAotCTB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDk5LCAweGEyLCAweDEyLCAweDk4LCAweDZjLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDJkLCAweGYyLAotCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTksIDB4YTAsIDB4ZjIsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDJkLCAweDEyLCAweDg2LCAweGQwLCAweDAxLCAweDAwLAotCTB4MmUsIDB4OTksIDB4YTMsIDB4NDEsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OTksIDB4MDAsIDB4ZjAsCi0JMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDAwLCAweDJkLCAweDQzLCAweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDk5LCAweDlmLCAweDQyLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzNCwgMHg5OSwgMHhhMywgMHg0MiwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNSwgMHg5OSwgMHgwMCwgMHgwYSwKLQkweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MzcsIDB4OTksIDB4YTAsIDB4MTcsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTcsCi0JMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg5OSwgMHgyMiwgMHg0MCwgMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEwLCAweDBhLCAweDBjLCAweGVjLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTksIDB4YTAsIDB4NDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDg3LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDQ4LCAweDk5LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5OSwgMHgyMiwgMHg0OSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg5OSwgMHgyMiwgMHg0MCwgMHhhZiwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDcyLCAweDk4LCAweDAwLCAweDA4LAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OTksIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhYSwgMHg5NywgMHgwMCwgMHg0NiwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDU4LCAweDk5LCAweDQzLCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NWQsIDB4OTksIDB4MjgsIDB4NDAsCi0JMHg4NywgMHgzMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg5OSwgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweGFhLCAweDk3LCAweDFiLCAweDQ2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDk5LCAweDIyLCAweDVmLAotCTB4MTEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHg1ZSwgMHg5OSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGIxLCAweDk5LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQ5LAotCTB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsIDB4MDYsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLAotCTB4NjUsIDB4OTksIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweGEyLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NmUsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiNiwgMHg5OSwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDJlLCAweDA4LCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzQsIDB4OTksIDB4YTIsIDB4NDEsCi0JMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk3LCAweDJlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOCwgMHgyZSwgMHgwNSwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4N2MsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTUsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjAsIDB4NDEsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODYsIDB4OTksIDB4YTIsIDB4NDEsCi0JMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDZmLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OTksIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHhjMywgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDM5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDM3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgzMywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDNmLCAweGIzLCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLAotCTB4MjksIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJkLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAotCTB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsIDB4M2MsIDB4OGIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywKLQkweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDU5LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1MywgMHhiMywgMHgwMSwgMHgwMCwKLQkweGE3LCAweDk5LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGE3LCAweDk5LCAweGEyLCAweDUxLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OTksIDB4MDAsIDB4NDAsIDB4MWQsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwKLQkweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LCAweDNhLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0ZCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLCAweDAxLCAweDAxLCAweDAwLCAweDhhLAotCTB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwgMHg1NywgMHhiNSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDIwLCAweGU0LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDRiLCAweDk2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsIDB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwgMHgyMCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk5LCAweDJlLCAweDBhLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YmIsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGJmLCAweDk5LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmYsIDB4OTksIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNSwgMHg5OSwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5OSwgMHg4NSwgMHg0MSwKLQkweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4Y2UsIDB4OTksIDB4NDQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsCi0JMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg5YywgMHg0YiwgMHg4MiwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweGQxLCAweDk5LCAweDQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4YTYsIDB4ODIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg5OSwgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwKLQkweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweGMyLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ODAsIDB4NGIsCi0JMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDgwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLAotCTB4OTQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2EsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweGRmLCAweDk5LCAweDgwLCAweGE1LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4OTksIDB4MDAsIDB4YTUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlMSwgMHg5OSwgMHg4MCwgMHhhNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDAxLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGVhLCAweDk5LCAweDIwLCAweDRmLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhlYSwgMHg5OSwgMHgyMCwgMHg0YiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGVhLCAweDk5LCAweDIwLCAweDQ3LCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMywgMHg5MCwgMHgwMCwgMHg0MSwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDJmLCAweDRjLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhlZSwgMHg5OSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHhhNSwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweGYxLCAweDk5LCAweGEyLCAweGE1LCAweDgwLCAweDZjLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5OSwgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDkwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OTksIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3MCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgyMCwgMHhhOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweGZhLCAweDk5LCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4OTksIDB4MWYsIDB4OTEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2OCwgMHgwMCwgMHg5MCwgMHgyMCwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweGUwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgyMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDI1LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MjYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAyLCAweDAxLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDUsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwNywgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzOSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ4LCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDIsIDB4YTIsIDB4ZjgsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MjIsIDB4ZjAsCi0JMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAotCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxZSwgMHg5YSwgMHgwMCwgMHg0MCwKLQkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDI0LCAweDlhLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OWEsIDB4MDAsIDB4MDUsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDMxLCAweDlhLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweDMzLCAweDlhLCAweDAwLCAweDQ0LAotCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKLQkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweDI5LCAweDlhLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4OWEsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4YjEsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjNSwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDVhLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAotCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgyOSwgMHg5YSwgMHgyMiwgMHg0MSwKLQkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDJkLCAweDlhLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4MjksIDB4OWEsIDB4MDAsIDB4YzIsCi0JMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDI5LCAweDlhLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAotCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NmEsIDB4ODQsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI2LCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGI2LCAweDlmLCAweDAwLCAweDg4LAotCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjYsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgwMCwgMHg4OCwKLQkweDlhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAxLCAweDAwLAotCTB4YjYsIDB4OWYsIDB4NDEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjksIDB4OWYsIDB4MjIsIDB4NDAsCi0JMHg3YiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiNiwgMHg5ZiwgMHgxOSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE5LCAweDQxLCAweDdiLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LAotCTB4YzQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHhhMiwgMHhjOCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDlmLCAweDAwLCAweDRkLCAweDlhLCAweGNjLCAweDAxLCAweDAwLAotCTB4YzIsIDB4OWYsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHg5ZiwgMHhhMiwgMHg0MSwgMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDlmLCAweDgwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQ5LAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHhjOSwgMHg5ZiwgMHgwMCwgMHg0MiwgMHhjZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4YzksIDB4OWYsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDlhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MSwgMHg0ZCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkMSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDE5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGUyLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUzLAotCTB4NDMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwKLQkweDQwLCAweGIxLCAweDAxLCAweDAwLCAweGQ5LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZhLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4OWEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNSwgMHg5YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCi0JMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQl9LAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2dicmN2dWNvZGUuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL2dicmN2dWNvZGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZhNWE0Yy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9nYnJjdnVjb2RlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5Ny0yMDAyIEFsYWNyaXRlY2gsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAotICoKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCi0gKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCi0gKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBHQl9SQ1ZVQ09ERV9WRVJTX1NUUklORwkiMS4yIgotI2RlZmluZSBHQl9SQ1ZVQ09ERV9WRVJTX0RBVEUgIAkiMjAwNi8wMy8yNyAxNToxMjoxNSIKLQotc3RhdGljIHUzMiBHQlJjdlVDb2RlTGVuID0gNTEyOwotCi1zdGF0aWMgdTggR0JSY3ZVQ29kZVsyNTYwXSA9Ci17Ci0weDQ3LCAweDc1LCAweDAxLCAweDAwLCAweDA0LCAweGEwLCAweDEzLCAweDAxLCAweDAwLCAweDFjLCAweGI3LCAweDViLCAweDA5LAotMHgzMCwgMHgwMCwgMHhiNiwgMHg1ZiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxOCwgMHgzYiwKLTB4NzgsIDB4M2EsIDB4MDAsIDB4MWMsIDB4YTIsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDcsIDB4MWQsIDB4MDEsIDB4NzAsCi0weDE4LCAweGIzLCAweDdiLCAweGE5LCAweGFhLCAweDFlLCAweGI0LCAweDdiLCAweDAxLCAweDBjLCAweDFjLCAweGI1LCAweDdiLAotMHgxZCwgMHgwNiwgMHgxYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2NCwgMHgwOCwgMHgwYywgMHgzMSwgMHg1NiwgMHg3MCwgMHgwNCwKLTB4MGMsIDB4MzEsIDB4NTYsIDB4ODAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NGEsIDB4OTAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NDYsCi0weGEwLCAweDAwLCAweDA5LCAweDI1LCAweDUxLCAweGMwLCAweDA0LCAweDBjLCAweDMxLCAweDRlLCAweGIwLCAweDAwLCAweGU5LAotMHgyNCwgMHg1MSwgMHhjMCwgMHgwNCwgMHhjYywgMHhiMywgMHgwMCwgMHgxYywgMHgxYywgMHhlYiwgMHgyZCwgMHgwMSwgMHgwMCwKLTB4MWMsIDB4MDYsIDB4NTYsIDB4NDIsIDB4ZDQsIDB4MDgsIDB4MDcsIDB4OWQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsCi0weDAyLCAweDAwLCAweDEwLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDA2LCAweDU2LCAweDVhLCAweGMwLCAweDA0LAotMHhhMCwgMHgzMCwgMHg2YywgMHgwMywgMHgwMCwgMHhhYywgMHgzMCwgMHg2ZCwgMHgwMywgMHgwMCwgMHhjZCwgMHgwMywgMHgzYSwKLTB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NjAsIDB4OGUsIDB4NDEsIDB4NTQsIDB4MDksIDB4MjksCi0weDI1LCAweDZkLCAweDAzLCAweDAwLCAweDgwLCAweDhlLCAweDQxLCAweDU0LCAweDA5LCAweDhjLCAweDMwLCAweDhkLCAweDAwLAotMHgwNCwgMHg0NywgMHgxYywgMHgwMSwgMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHgwMCwgMHgwMCwKLTB4NjAsIDB4MDAsIDB4MDQsIDB4NDcsIDB4MWMsIDB4NjEsIDB4YzAsIDB4MDQsIDB4NDcsIDB4MWMsIDB4NmQsIDB4MDMsIDB4MDAsCi0weDZjLCAweDMwLCAweDAxLCAweDAwLCAweDFjLCAweDRkLCAweDM0LCAweDAyLCAweDAwLCAweDFjLCAweDdiLCAweGI3LCAweDAyLAotMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhjOCwgMHg4MywgMHgzNywgMHgwMCwgMHgxYywgMHg4MCwKLTB4MDEsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDQsIDB4YTAsIDB4MGYsIDB4NDAsIDB4NTQsCi0weDA5LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDdiLCAweGZiLCAweGYyLCAweDAwLCAweDFjLCAweGNjLCAweDMzLAotMHgwZCwgMHgwMCwgMHgxYywgMHhiNCwgMHg3YiwgMHhmZCwgMHgwMywgMHgxYywgMHg4MCwgMHgwZSwgMHg0MCwgMHg1NCwgMHgwOSwKLTB4ZTAsIDB4ZmIsIDB4MDUsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDMsIDB4MDAsIDB4YjMsIDB4MGYsIDB4NDEsCi0weDU0LCAweDA5LCAweDAwLCAweDAwLCAweGU4LCAweDcwLCAweDA0LCAweDAwLCAweDAwLCAweGU4LCAweDgwLCAweDA0LCAweDAwLAotMHgwMCwgMHhhMCwgMHg5MywgMHgwMCwgMHg2MSwgMHg3NiwgMHhhMSwgMHhjMywgMHgwNCwgMHhjMCwgMHg4ZCwgMHg0MSwgMHg1NCwKLTB4MDksIDB4ZTAsIDB4N2IsIDB4MDAsIDB4YzAsIDB4MWYsIDB4YTAsIDB4ZmQsIDB4YzEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MzMsCi0weDA1LCAweDAwLCAweDFjLCAweGQ0LCAweDAzLCAweDAwLCAweDNjLCAweDFjLCAweGQ0LCAweGQzLCAweDFiLCAweDAwLCAweDFjLAotMHhjMCwgMHhkMywgMHg1MiwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg3NCwgMHgxMywgMHgwNCwgMHg4ZSwgMHg4ZSwgMHg0MiwKLTB4NTQsIDB4MDksIDB4NWIsIDB4ODAsIDB4NzYsIDB4MTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsCi0weDAwLCAweDkwLCAweDAxLCAweDAwLCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDQxLCAweDU0LAotMHgwOSwgMHhjMCwgMHgwMywgMHhmYywgMHg3ZiwgMHgxYywgMHhhMCwgMHgwMSwgMHg5YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4YTAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YzAsIDB4MDMsIDB4ZmMsIDB4MDMsIDB4MWMsCi0weGY1LCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDI2LCAweDdhLCAweGY2LCAweDA1LCAweDFjLCAweGEwLCAweDBmLCAweDQxLAotMHg1NCwgMHgwOSwgMHhiMywgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHhiNSwgMHgwMiwgMHgwMiwgMHgwMCwgMHgxYywgMHhhMCwKLTB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4N2EsIDB4MDYsIDB4MDIsIDB4MDAsIDB4MWMsIDB4YjUsIDB4MDIsIDB4MDIsIDB4MDAsCi0weDFjLCAweDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LCAweGFmLCAweDAzLCAweDAxLCAweDAwLCAweDFjLCAweDdhLCAweDBlLAotMHg0MiwgMHg1NCwgMHgwOSwgMHhiNSwgMHgwMiwgMHgwMiwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxYywKLTB4YTAsIDB4M2QsIDB4YTYsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MTEsIDB4MDQsIDB4ZDQsIDB4ZDMsIDB4NTIsCi0weDAwLCAweDFjLCAweGI1LCAweDNlLCAweGFlLCAweDAxLCAweDAwLCAweDIwLCAweGZiLCAweGZkLCAweGZmLCAweDFmLCAweDgwLAotMHgyYywgMHg4NCwgMHgwMywgMHgwMCwgMHhiOSwgMHgzYSwgMHg5YSwgMHgwMSwgMHgwMCwgMHg3NSwgMHgzYiwgMHgwMiwgMHgwMCwKLTB4MWMsIDB4YTcsIDB4MWMsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ZGIsIDB4ODMsIDB4MTYsIDB4MDAsIDB4MWMsIDB4YzcsIDB4MWQsCi0weDFkLCAweGMxLCAweDA0LCAweGI5LCAweDNiLCAweDg5LCAweGMxLCAweDA0LCAweDhiLCAweDJjLCAweDAxLCAweDAwLCAweDFjLAotMHg2YiwgMHgyYywgMHgzMSwgMHhjMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgxMSwgMHgwMCwgMHhjYiwgMHgyYywgMHg3NSwKLTB4YzEsIDB4MDQsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4NTQsCi0weGQwLCAweDAyLCAweDAwLCAweDFjLCAweDQ5LCAweDI1LCAweGFkLCAweDAxLCAweDAwLCAweGFiLCAweDJjLCAweDdkLCAweGMxLAotMHgwNCwgMHhhNywgMHgxZCwgMHg2ZCwgMHgwMywgMHgwMCwgMHhjYywgMHgzMywgMHgwOSwgMHgwMCwgMHgxYywgMHhlYiwgMHgyZCwKLTB4MDEsIDB4MDAsIDB4MWMsIDB4ZWEsIDB4MjksIDB4MDEsIDB4MDAsIDB4MWMsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksCi0weGFlLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweGQ0LCAweDA3LCAweGZjLAotMHgwMywgMHgxYywgMHg5OSwgMHgzYSwgMHgwMiwgMHgwMCwgMHgxYywgMHhiYiwgMHgzOCwgMHgwMiwgMHgwMCwgMHgxYywgMHgwMCwKLTB4MzgsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDEsIDB4MDQsIDB4ZGIsIDB4M2IsIDB4N2UsIDB4MDAsCi0weDFjLCAweGM3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweDI2LCAweDdhLCAweDBhLCAweDA2LCAweDFjLCAweDI3LCAweDFkLAotMHgwMSwgMHgwMCwgMHgxYywgMHhiMywgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwKLTB4NTMsIDB4MGYsIDB4NDIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4NDIsCi0weDU0LCAweDA5LCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LCAweGEwLAotMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwNiwgMHgwMiwgMHgwMCwgMHgxYywgMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwKLTB4MDksIDB4YWYsIDB4MDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsCi0weDQyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDQyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LAotMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHg0MiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHg0MiwKLTB4NTQsIDB4MDksIDB4MDAsIDB4M2QsIDB4MDIsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTIsIDB4MDAsIDB4Y2IsCi0weDJjLCAweDAxLCAweDAwLCAweDFjLCAweDc1LCAweDNiLCAweDAyLCAweDAwLCAweDFjLCAweGE3LCAweDFjLCAweDAxLCAweDAwLAotMHgxMCwgMHhhNiwgMHg3YiwgMHhmMSwgMHgwNSwgMHgxYywgMHgwMCwgMHgwMCwgMHg4OCwgMHhjMiwgMHgwNCwgMHhhNiwgMHg3YiwKLTB4ZjEsIDB4MDUsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MDQsIDB4Y2IsIDB4MmYsIDB4MDUsIDB4MDAsIDB4MWMsCi0weDYwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweGM3LCAweDFjLCAweGUxLCAweDAyLCAweDAwLCAweDUzLCAweDBmLCAweDQyLAotMHg1NCwgMHgwOSwgMHhjMCwgMHg4MywgMHhmMSwgMHgzMiwgMHgxYywgMHgwMCwgMHgwMCwgMHg1YywgMHgwMiwgMHgwNCwgMHg0NiwKLTB4N2EsIDB4ZGEsIDB4MDUsIDB4MWMsIDB4N2EsIDB4MGUsIDB4NDIsIDB4NTQsIDB4MDksIDB4YzAsIDB4ODMsIDB4ZjEsIDB4MzIsCi0weDFjLCAweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDA0LCAweDQwLCAweGZhLCAweDE1LCAweDAwLCAweDFjLCAweDAwLCAweDAwLAotMHhhMCwgMHgwMiwgMHgwNCwgMHg0NiwgMHg3YSwgMHhkYSwgMHgwNSwgMHgxYywgMHhhMCwgMHgwZiwgMHg0MSwgMHg1NCwgMHgwOSwKLTB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4NDEsCi0weDU0LCAweDA5LCAweGIzLCAweDdiLCAweDAxLCAweGMwLCAweDFmLCAweDc0LCAweDBlLCAweDQwLCAweDU0LCAweDA5LCAweGMwLAotMHgwMywgMHg5YywgMHgwMCwgMHgxYywgMHg4MCwgMHgwMCwgMHhmMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MTIsIDB4MDUsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4ZDMsCi0weDJiLCAweDAwLCAweDFjLCAweGQ0LCAweGQzLCAweDUyLCAweDAwLCAweDFjLCAweDgwLCAweDc2LCAweDk1LCAweDEzLCAweDA0LAotMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHhhNiwgMHg3YiwgMHhhOSwgMHgwMywgMHgxMCwgMHhjNywgMHg5YywgMHgwMCwKLTB4MDAsIDB4MWMsIDB4ODAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDIsIDB4MDQsIDB4MDAsCi0weDAwLCAweDZjLCAweGMzLCAweDA0LCAweGFiLCAweDJkLCAweGYxLCAweDEyLCAweDA1LCAweDA3LCAweDFkLCAweGNkLCAweGMyLAotMHgwNCwgMHg4YiwgMHgyZCwgMHgwMSwgMHgwMCwgMHgxYywgMHg2OSwgMHgyNSwgMHgwMSwgMHgwMCwgMHgxYywgMHhhNiwgMHg3YiwKLTB4YTksIDB4MDMsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDksIDB4MDAsIDB4MWMsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsCi0weDAwLCAweDAwLCAweDYwLCAweDAzLCAweDAwLCAweDUzLCAweDBmLCAweDQyLCAweDU0LCAweDA5LCAweDQ2LCAweDdhLCAweGRhLAotMHgwNSwgMHgxYywgMHg3YSwgMHgwZSwgMHg0MiwgMHg1NCwgMHgwOSwgMHg0MCwgMHhmYSwgMHgxNSwgMHgwMCwgMHgxYywgMHgwMCwKLTB4MDAsIDB4MjgsIDB4MDMsIDB4MDQsIDB4NDYsIDB4N2EsIDB4ZGEsIDB4MDUsIDB4MWMsIDB4YjUsIDB4MGYsIDB4NDEsIDB4NTQsCi0weDA5LCAweGEwLCAweDBmLCAweDQxLCAweDU0LCAweDA5LCAweDczLCAweGVjLCAweDQyLCAweDAzLCAweDA0LCAweDYwLCAweDJjLAotMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHgwMCwgMHhjNywgMHgxYywgMHgwMSwgMHgwMCwgMHgxYywKLTB4MDAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MDUsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YzAsIDB4ZDcsIDB4MjIsCi0weDAwLCAweDFjLCAweDc1LCAweDU2LCAweDk2LCAweDEzLCAweDA0LCAweDYwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweGU3LAotMHgxYywgMHg1ZCwgMHgwMywgMHgwNCwgMHhlNywgMHg5YywgMHgwMCwgMHgwMCwgMHgxYywgMHhhNiwgMHg3YiwgMHhhOSwgMHgwMywKLTB4MTAsIDB4ODAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDZjLCAweGMzLCAweDA0LCAweGI5LCAweDdiLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGEwLCAweGMzLCAweDA0LAotMHhjYiwgMHhhZiwgMHhmYywgMHgwNywgMHgxYywgMHhjYiwgMHgyZiwgMHgwMSwgMHgwNCwgMHgxYywgMHhjNywgMHg5ZiwgMHg4MCwKLTB4MDMsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4ZmMsIDB4MDcsIDB4MWMsIDB4Y2IsCi0weDJmLCAweDBkLCAweDA0LCAweDFjLCAweGM3LCAweDlmLCAweDgwLCAweDAzLCAweDFjLCAweDAwLCAweDAwLCAweGEwLCAweGMzLAotMHgwNCwgMHhjYiwgMHhhZiwgMHgwMCwgMHhmOCwgMHgxZCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwMCwgMHgxZCwgMHgwMCwgMHgwMCwKLTB4YTAsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MTMsIDB4MDUsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsCi0weGMwLCAweDFkLCAweGYwLCAweGQzLCAweDA4LCAweDI3LCAweDlkLCAweGY4LCAweDAzLCAweDAwLCAweGEwLCAweGVlLCAweDU2LAotMHhkNCwgMHgwMCwgMHhmYiwgMHg3NSwgMHgxOSwgMHgxNCwgMHgwNCwgMHgyMCwgMHg3YiwgMHgwNiwgMHgwMCwgMHgxYywgMHhjMCwKLTB4MWMsIDB4MmMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ZDMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ZjQsCi0weDAwLCAweGMwLCAweGVmLCAweGYyLCAweDAwLCAweDFjLCAweDIwLCAweDI1LCAweDZjLCAweDE0LCAweDA0LCAweDYwLCAweGI3LAotMHhlNiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgxNSwgMHgwMCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywKLTB4Y2MsIDB4MzMsIDB4MDUsIDB4MDIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YzUsIDB4MDQsIDB4NjAsIDB4YjcsIDB4MWUsCi0weDA1LCAweDA0LCAweDAwLCAweDAwLCAweDFjLCAweDE1LCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGM0LCAweDA0LCAweGMwLAotMHgxZCwgMHhhYywgMHhmMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhjNCwgMHgwNCwgMHgwNywgMHg5ZCwgMHgwMCwgMHgwMCwKLTB4MWMsIDB4MWIsIDB4NzQsIDB4MGQsIDB4ZjQsIDB4MDQsIDB4YTAsIDB4MGYsIDB4NDEsIDB4NTQsIDB4MDksIDB4ZTAsIDB4N2IsCi0weDAwLCAweGZjLCAweDFmLCAweDM5LCAweDdmLCAweDAyLCAweDAwLCAweDFjLCAweDA3LCAweDFkLCAweGIxLCAweGMzLCAweDA0LAotMHhhNiwgMHg3YiwgMHhjMSwgMHgwMywgMHgxYywgMHgwMCwgMHgwMCwgMHg3OCwgMHhjNCwgMHgwNCwgMHhlMCwgMHgxYywgMHgwMCwKLTB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4MDAsIDB4ZjgsIDB4MWQsIDB4Y2IsCi0weDJmLCAweDAxLCAweDEwLCAweDFkLCAweDAwLCAweDAwLCAweGMwLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweGMwLCAweDAzLAotMHgwNCwgMHhjYiwgMHhhZiwgMHgwMCwgMHhmOCwgMHgxZCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgxOCwgMHgxZCwgMHhjNywgMHg5ZiwKLTB4MDAsIDB4MGIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4YzMsIDB4MDQsIDB4ZmIsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MWMsCi0weDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDAxLAotMHgwMiwgMHgxYywgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMywgMHgwNCwgMHhhMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHhhMCwKLTB4ZWUsIDB4YjYsIDB4MDMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4ZmMsIDB4MDcsIDB4MWMsIDB4Y2IsIDB4MmYsIDB4MDksIDB4MDQsCi0weDFjLCAweGZiLCAweDc1LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGMwLCAweGMzLCAweDA0LCAweGNjLCAweGIzLAotMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwMSwgMHgwMiwgMHgxYywgMHgwMCwgMHgwMCwgMHgxYywgMHhjNSwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4ODgsIDB4MzQsIDB4MDUsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MTUsCi0weDAyLCAweDFjLCAweDQ3LCAweDlkLCAweDY0LCAweGM0LCAweDA0LCAweDAwLCAweDAwLCAweDg4LCAweDQ0LCAweDAwLCAweDgwLAotMHgxZCwgMHg4YywgMHg1NCwgMHgwNCwgMHg4NywgMHgxZCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHhjZSwgMHg3NiwgMHgwMSwgMHgwMCwKLTB4MWMsIDB4ZWYsIDB4NzYsIDB4YWQsIDB4YzQsIDB4MDQsIDB4YTQsIDB4NzcsIDB4OWQsIDB4MjQsIDB4MDksIDB4ZTQsIDB4NzYsCi0weDAxLCAweDAwLCAweDFjLCAweGM0LCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweGE4LCAweDU0LCAweDA0LAotMHhkNywgMHg3NiwgMHgwMSwgMHg1MCwgMHgxOCwgMHhmNiwgMHg3NiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MzAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4Y2MsIDB4MzAsIDB4NTEsIDB4YzUsIDB4MDQsIDB4ZWIsCi0weDJkLCAweDAxLCAweDAwLCAweDFjLCAweGVhLCAweDI5LCAweDAxLCAweDAwLCAweDFjLCAweGMwLCAweDU5LCAweDAxLCAweDAwLAotMHgxYywgMHhmNSwgMHg3NywgMHgzOSwgMHhjNSwgMHgwNCwgMHhlMCwgMHgzMCwgMHhlYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg0YywKLTB4YzAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NGMsIDB4MDQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4MDAsCi0weGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDA5LCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGM1LAotMHhjNCwgMHgwNCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgxOSwgMHgwMiwgMHgxYywgMHhlYiwKLTB4MmQsIDB4YzUsIDB4YzQsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4Y2MsIDB4MzMsIDB4MGQsIDB4MDIsCi0weDFjLCAweGViLCAweDJkLCAweGM1LCAweGM0LCAweDA0LCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLAotMHgxMSwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhjNSwgMHhjNCwgMHgwNCwgMHgwMCwgMHg3YiwgMHgwMCwgMHg4MCwgMHgxYywKLTB4YWUsIDB4NzcsIDB4NTEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsIDB4ZDMsIDB4OGIsIDB4MDAsCi0weGZjLCAweDFmLCAweDYwLCAweDdhLCAweDNjLCAweDAwLCAweDFjLCAweDYwLCAweDRjLCAweGQwLCAweDA0LCAweDAwLCAweGMwLAotMHgyZiwgMHgyMCwgMHgwNSwgMHgxZiwgMHhlMCwgMHgzMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyNSwgMHhjMCwgMHgwNCwKLTB4MDAsIDB4YjUsIDB4NWIsIDB4YzEsIDB4MDQsIDB4MDQsIDB4NjksIDB4MjYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NmEsIDB4MmIsCi0weDAxLCAweDAwLCAweDFjLCAweDgwLCAweDFkLCAweDAwLCAweDAwLCAweDFjLCAweGE5LCAweDI1LCAweDUxLCAweDA1LCAweDAwLAotMHhlZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhhZiwgMHg3NywgMHgxMSwgMHgwNSwgMHgwMCwgMHhiNCwgMHg1ZiwgMHgwMSwKLTB4NDAsIDB4MTgsIDB4MDcsIDB4OWQsIDB4NTQsIDB4NTUsIDB4MDQsIDB4YjcsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OTYsCi0weDc2LCAweDAxLCAweDAwLCAweDFjLCAweDQ3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGE0LCAweDMzLCAweDAxLCAweDYwLAotMHgxOCwgMHhhNCwgMHgyZiwgMHgwMSwgMHg2MCwgMHgxOCwgMHg2NCwgMHg3NywgMHgwMSwgMHg2MCwgMHgxOCwgMHgyNCwgMHg3NywKLTB4MDEsIDB4NjAsIDB4MTgsIDB4NDQsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NjQsIDB4ODgsIDB4MDMsIDB4MDAsIDB4MWMsCi0weGE0LCAweDNmLCAweDAxLCAweDAwLCAweDFjLCAweGE0LCAweDNiLCAweDAxLCAweDAwLCAweDFjLCAweDUzLCAweDc3LCAweDAxLAotMHgwMCwgMHgxYywgMHhkMywgMHhjZiwgMHgzYiwgMHgwMCwgMHgxYywgMHg1MywgMHg0ZiwgMHgwMiwgMHgwMCwgMHgxYywgMHhkMywKLTB4Y2YsIDB4MDAsIDB4MDAsIDB4MWYsIDB4ZGEsIDB4Y2YsIDB4MGIsIDB4MDAsIDB4MWMsIDB4ZDUsIDB4NTcsIDB4MGYsIDB4MDAsCi0weDFjLCAweGQzLCAweGQzLCAweDM3LCAweDAwLCAweDFjLCAweGQ0LCAweDUzLCAweDBmLCAweDAwLCAweDFjLCAweGUwLCAweDI5LAotMHgwMCwgMHgwMCwgMHgxYywgMHhmNSwgMHhkNSwgMHhjMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHg1NSwgMHgwNCwKLTB4NzcsIDB4NTYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NTYsIDB4NTMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDEwLCAweDE4LCAweDAwLCAweDAwLCAweDA0LCAweGMwLCAweDA0LCAweGY1LCAweDU1LCAweDAxLCAweDAwLCAweDFjLCAweDAwLAotMHgwMCwgMHhjNCwgMHg1NSwgMHgwNCwgMHg3NywgMHg1NiwgMHgwMSwgMHgwMCwgMHgxYywgMHg1NiwgMHg1MywgMHgwMSwgMHgwMCwKLTB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YzAsIDB4MDQsIDB4Y2IsIDB4MmYsCi0weDAxLCAweDE4LCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDEwLCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDA4LCAweDEwLAotMHhjYiwgMHgyZiwgMHgwMSwgMHgwOCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgyMCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwKLTB4MDAsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MjgsIDB4MTAsIDB4ODksIDB4MjUsIDB4NmQsIDB4YzIsIDB4MDQsIDB4MDAsCi0weDAwLCAweDA0LCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLAotMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2YywgMHhjMiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4MDQsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsCi0weDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDQwLCAweDFjLCAweDY4LCAweGMwLCAweDA0LCAweDQwLCAweDFjLCAweDk4LAotMHhjMCwgMHgwNCwgMHhhNywgMHg3NywgMHg2ZCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhjMCwgMHhjMCwgMHgwNCwgMHgyNywKLTB4MWQsIDB4ZWQsIDB4YzAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NmMsIDB4YzMsCi0weDA0LCAweDAwLCAweDAwLCAweDZjLCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDNjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhjNiwgMHgwNCwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc2RiZ2Rvd25sb2FkLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc2RiZ2Rvd25sb2FkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxOWUwMDcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjg1MCArMCwwIEBACi0jZGVmaW5lIE9BU0lTX1VDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCi0jZGVmaW5lIE9BU0lTX1VDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjExOjIyIgotI2RlZmluZSBPQVNJU19VQ09ERV9IT1NUSUZfSUQgIAkzCi0KLXN0YXRpYyBzMzIgT051bVNlY3Rpb25zID0gMHgyOwotc3RhdGljIHUzMiBPU2VjdGlvblNpemVbXSA9Ci17Ci0JMHgwMDAwNDAwMCwgMHgwMDAxMDAwMCwKLX07Ci0KLXN0YXRpYyB1MzIgT1NlY3Rpb25TdGFydFtdID0KLXsKLQkweDAwMDAwMDAwLCAweDAwMDA4MDAwLAotfTsKLQotc3RhdGljIHU4IE9hc2lzVUNvZGVbMl1bNjU1MzZdID0KLXsKLQl7Ci0JMHgxNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCi0JMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHhhMiwgMHg0MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDA5LCAweDAwLCAweGEyLCAweDQ5LCAweGRkLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHhhMiwgMHg0MCwKLQkweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4ZiwgMHg5OCwgMHgxOCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDk4LCAweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk4LAotCTB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHg0MCwgMHg5OCwKLQkweDgwLCAweDk0LCAweDAwLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTksIDB4MDAsIDB4MjksIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDBlLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHgyOSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDI1LCAweDAwLCAweDI5LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjUsIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGRkLCAweDgxLCAweDAxLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmEsIDB4MDAsIDB4MTQsIDB4YmMsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZSwgMHgwMCwgMHgxMywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDU0LCAweDk1LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLAotCTB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGZkLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZmLCAweGIzLCAweDAxLCAweDAwLAotCTB4MzMsIDB4MDAsIDB4MTgsIDB4ZWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHhhMiwgMHg0MSwgMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDk5LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDk0LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgzOSwgMHgwMCwgMHg5OCwgMHhlZSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4M2IsIDB4MDAsIDB4ODAsIDB4ZjMsIDB4ZGUsIDB4MzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgzZSwgMHgwMCwgMHg4MywgMHhmMywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGYwLCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDAxLCAweDgwLCAweDAwLCAweDQwLAotCTB4MmUsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDI0LCAweGIxLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDE4LCAweGVlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDUsIDB4MDAsIDB4OTUsIDB4ZTgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZTgsCi0JMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGY4LCAweGVlLCAweDhiLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNywgMHg4MSwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGY4LAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhmMCwgMHhkNiwgMHg4ZCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhmMCwKLQkweGYwLCAweGRiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgxLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAwLCAweDAwLCAweGY4LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHgwMiwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDJjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHhmOCwgMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDAwLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGQ4LCAweGIxLCAweDAxLCAweDAwLCAweDY4LCAweDAwLCAweDIyLCAweGZhLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkZSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGZhLAotCTB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGZhLCAweDgwLCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZDYsIDB4ZTUsIDB4MDEsIDB4MDAsCi0JMHg0OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweGQ2LCAweGU1LCAweDAxLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZDYsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZmIsCi0JMHg3YSwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhkYywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDRjLCAweGRkLCAweDkxLCAweDAwLCAweDAwLCAweDdjLCAweDAwLCAweDk1LCAweGU4LAotCTB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4ZTksIDB4ZmEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4MCwgMHgyMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGUsIDB4MDAsIDB4MDksIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg4YywgMHgwMCwgMHgwOCwgMHhmOSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMCwgMHgxZiwgMHhmZCwKLQkweGY5LCAweDMzLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDllLCAweGZkLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsCi0JMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmNywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAotCTB4MTksIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDAsIDB4MGEsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MCwgMHhmYiwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmZCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDcsIDB4NDIsIDB4ZjksIDB4ZjMsIDB4OGYsIDB4MDEsIDB4MDAsIDB4OTcsIDB4MDAsIDB4YTIsIDB4ZmYsCi0JMHhmNywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweGZmLCAweGZiLCAweGVmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGZjLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiYiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweGZkLCAweDdmLCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2UsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhmZCwgMHg3ZiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgxMywgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAyLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAzLCAweDAxLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg5YSwgMHgxMywgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgyOSwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4NjcsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NSwgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ2LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmIsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHg4OCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDhjLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDYsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHhjZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4ZCwgMHhmMCwgMHgwMSwgMHgwMCwKLQkweGM5LCAweDAwLCAweDgyLCAweDQxLCAweDg5LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwKLQkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweDA4LCAweDgzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDQsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwOCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg5NCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhNSwgMHhhNSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDRlLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDMsIDB4ODQsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4OCwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDk2LAotCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4MDAsIDB4YTIsIDB4NDEsIDB4OGQsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwKLQkweDI1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDg5LCAweGUwLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODIsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTQsCi0JMHg4YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsCi0JMHhlYywgMHgwMCwgMHgwOCwgMHg0MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHgwMCwgMHgwMCwgMHg5NCwKLQkweDI0LCAweGIxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDk0LCAweDI0LCAweGY1LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjIsIDB4MDAsIDB4YTAsIDB4NDQsCi0JMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDk0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGVmLCAweDAwLCAweDIwLCAweDQ0LAotCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0MiwKLQkweDg5LCAweGQwLCAweDAwLCAweDAwLCAweGY3LCAweDAwLCAweGEwLCAweGZhLCAweDhhLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4MDAsIDB4YTMsIDB4NDIsCi0JMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDhhLCAweGY0LCAweDAxLCAweDAwLCAweGZjLCAweDAwLCAweDkwLCAweDQ0LAotCTB4OGEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0NSwgMHg4YSwgMHhhOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MCwKLQkweDhiLCAweGUwLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLCAweDI1LCAweDk5LCAweDAxLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmIsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MywgMHgxNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDJhLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAotCTB4ZjksIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MTksIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MCwgMHg5NCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkZCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDJiLCAweDQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk0LCAweDgwLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjksIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgyYiwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMSwgMHg5ZiwgMHg5NCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAyLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDUxLAotCTB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDkzLCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDAxLCAweGEyLCAweDQxLCAweDkzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxNSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFiLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDc0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3NywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4N2EsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3YywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDdkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdlLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGExLCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2IsIDB4MDEsIDB4MjAsIDB4NDgsIDB4YTEsIDB4NTEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg0NywgMHgwMSwgMHgyMiwgMHg0YiwKLQkweDc0LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4NjAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjEsCi0JMHg3ZSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQ1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDgwLCAweDQwLAotCTB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4YWEsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHhhYSwKLQkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHhiZiwgMHhiMywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMSwgMHgyMiwgMHhjYywKLQkweDg1LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MywgMHgwMSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDg1LCAweDkzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweGE0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGJjLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTQsIDB4MmYsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsCi0JMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAwLCAweDAwLCAweGRkLCAweDgxLCAweDg4LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NzMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHg4NiwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDg3LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ODgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDhiLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhkLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YzQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YzUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDgzLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGI4LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsCi0JMHhkNSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNiwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ3LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLAotCTB4NzIsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MjgsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTEsIDB4NDksCi0JMHhmZCwgMHg5MywgMHgyOCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MiwgMHg0YSwgMHhmZCwgMHg5MywgMHgyYSwgMHgwMCwKLQkweDU1LCAweDAxLCAweDU1LCAweDQ5LCAweGZkLCAweDgzLCAweDJhLCAweDAwLCAweDU1LCAweDAxLCAweDU2LCAweDRhLAotCTB4ZmQsIDB4ODMsIDB4MmEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4OTEsIDB4ODEsIDB4ODAsIDB4MzAsIDB4MmEsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyYSwgMHgwMCwgMHg1MCwgMHgwMSwgMHg5MSwgMHg4MiwKLQkweDgwLCAweDMwLCAweDJhLCAweDAwLCAweDU1LCAweDAxLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDJhLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODksIDB4YjAsIDB4MmIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGIzLCAweDAxLCAweDIyLCAweGRlLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg5MiwgMHgwMSwgMHhhMiwgMHg0NCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDlhLCAweDAxLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAotCTB4OTYsIDB4MDEsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NDEsCi0JMHhiZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDUwLCAweDAxLCAweGEwLCAweDBmLCAweGJkLCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhiNSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4MTksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZmYsCi0JMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGZmLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MTQsIDB4MDAsIDB4YTQsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHhhYSwgMHgwMSwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg1LCAweGMwLCAweDAxLCAweDAwLCAweGE4LCAweDAxLCAweGEyLCAweDRjLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4YjQsIDB4MDEsIDB4MjIsIDB4ZDIsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4MDEsIDB4MjIsIDB4NDEsCi0JMHhhNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhhMiwgMHhlMCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGMxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4ODksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDIsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQ0LCAweGUwLCAweGIxLCAweDAwLCAweDAwLAotCTB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4NDksIDB4YzEsIDB4MDAsIDB4MDAsIDB4YWYsIDB4MDEsIDB4MDAsIDB4NWIsCi0JMHg4OSwgMHg5MCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg5ZiwgMHgwMCwgMHhhMCwgMHg5ZSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDQwLAotCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiZSwgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAotCTB4YjksIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NDMsCi0JMHhiZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQwLCAweGY4LCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAwLCAweDAwLCAweGM2LCAweDAxLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGRkLCAweDgxLCAweGY0LCAweDAxLCAweDAwLCAweGNiLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhkMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwMSwgMHgwMCwgMHhkZSwKLQkweGExLCAweGIzLCAweDAwLCAweDAwLCAweGUzLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwMSwgMHgwMCwgMHhkZiwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGJhLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAotCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YTUsIDB4ZTcsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGRiLCAweDAxLCAweDIyLCAweDQ0LCAweGMxLCAweDUzLCAweDAwLCAweDAwLAotCTB4ZGEsIDB4MDEsIDB4ODQsIDB4NDEsIDB4ODEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQ1LCAweDAxLCAweDAwLCAweDQxLCAweGExLCAweGMxLCAweDAwLCAweDAwLCAweGRhLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDliLCAweDAxLCAweDAwLAotCTB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4ZDMsCi0JMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHhlMCwgMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweGEzLCAweDliLCAweDAxLCAweDAwLCAweDUzLCAweDAxLCAweDAwLCAweGRlLAotCTB4YTEsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhhMiwgMHhiYSwKLQkweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweGRlLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZTgsIDB4MDEsIDB4YTgsIDB4YjEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDZiLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDYwLCAweDAyLCAweDAwLCAweDRkLAotCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlMywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweGU1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGU5LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZWIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHhmNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmNywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGY5LCAweGIzLCAweDAxLCAweDAwLCAweGY5LCAweDAxLCAweDIyLCAweDQwLAotCTB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgwMiwgMHgwMCwgMHhjNywgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDYwLCAweDAyLCAweDAwLCAweDQyLCAweDgzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTksCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGViLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg1LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGI5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJhLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMiwgMHhiOCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDBlLCAweDAyLCAweGI5LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDIsIDB4YmEsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAyLCAweGJiLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDIsIDB4YmMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNiwgMHgwMiwgMHhiZCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MTgsIDB4MDIsIDB4YmUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMiwgMHhiZiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDFjLCAweDAyLCAweGM4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxZSwgMHgwMiwgMHhjOSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDIwLCAweDAyLCAweGNhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDIsIDB4Y2IsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAyLCAweGNjLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4MDIsIDB4Y2QsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMiwgMHhjZSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MmEsIDB4MDIsIDB4Y2YsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMiwgMHhmMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDJlLCAweDAyLCAweGYxLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMiwgMHhmMiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDAyLCAweGYzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDIsIDB4ZjQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDM2LCAweDAyLCAweGY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDIsIDB4ZjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzYSwgMHgwMiwgMHhmNywgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDIsIDB4ZjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzZSwgMHgwMiwgMHhmOSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU5LCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQwLCAweDAyLCAweGZhLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg0MiwgMHgwMiwgMHhmYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YiwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ0LCAweDAyLCAweGZjLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4MDIsIDB4ZmQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDAyLCAweGZlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4MDIsIDB4ZmYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDliLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZSwgMHgwNiwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweGQzLCAweGE3LCAweGNiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY1LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGViLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVlLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZkLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZGIsIDB4MDEsIDB4MDAsIDB4YzcsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg2NiwgMHgwMiwgMHgwMCwgMHg0OCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDUxLCAweDQwLCAweDFhLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg2MywgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMiwgMHg0OSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQwLCAweDFjLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NGUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDVmLCAweDAyLCAweDRhLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLAotCTB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZDgsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweGQyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsCi0JMHhkYywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhkZSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGRhLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LAotCTB4OGUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZTYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHhlYywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwKLQkweGZhLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUwLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTIsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsCi0JMHhlNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlOCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGVhLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAotCTB4ZjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhmOCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNywKLQkweGE5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDQwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ODQsIDB4MDIsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGRkLCAweDgxLCAweGY0LCAweDAxLCAweDAwLCAweDg4LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg4ZCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk4LCAweDAyLCAweDAwLCAweDQ2LCAweGEzLCAweGIzLCAweDAwLCAweDAwLAotCTB4OWIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YTEsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZiwgMHgwMiwgMHgyMywgMHg1MCwgMHhhNSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweDAwLCAweDQyLAotCTB4YTUsIDB4NjMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgyZCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGJhLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweGExLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTcsIDB4MDIsIDB4MjIsIDB4NDQsCi0JMHhhNSwgMHg1MywgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMiwgMHgwMCwgMHg0MSwgMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweGRkLCAweGExLCAweGIxLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweDAwLCAweGRlLAotCTB4YTEsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweGJmLCAweGIzLCAweDAxLCAweDAwLCAweDUwLCAweDAxLCAweGEyLCAweGQyLCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsCi0JMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHgwMiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweDAwLCAweDU0LAotCTB4YTUsIDB4MzMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgyZCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweGQwLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHhkNiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFjLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDYwLCAweDAyLCAweDAwLCAweDQ2LAotCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg5ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwKLQkweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWIsCi0JMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MmUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGRkLCAweDgxLCAweGY0LCAweDAxLCAweDAwLCAweGJkLCAweDAyLCAweDAwLCAweDQwLAotCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4YzMsIDB4MDIsIDB4MDAsIDB4MDUsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjYiwgMHgwMiwgMHgwMCwgMHgwNSwKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZDAsIDB4MDIsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4MDIsIDB4MDAsIDB4NDQsCi0JMHhhNSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNCwgMHhlNywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDgxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGMxLAotCTB4ZjAsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHgwMiwgMHgwMCwgMHg0MSwgMHhjMSwgMHhjMywgMHgwMCwgMHgwMCwgMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhhNCwgMHhlNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg5MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweGM5LCAweGYwLCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDIyLCAweDQxLAotCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg4NSwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwMCwgMHhjMiwKLQkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGRlLCAweDk1LCAweDg5LCAweDAxLCAweDAwLAotCTB4YzgsIDB4MDIsIDB4MDAsIDB4Y2EsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHhhOSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDEsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlMiwgMHgwMiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDkzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LAotCTB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMSwgMHgwMiwgMHgwMCwgMHhkNCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4Y2MsCi0JMHg4NSwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZhLCAweDAyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGY5LCAweDAyLCAweGEyLCAweGYyLAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2MsIDB4ODUsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4NDEsCi0JMHg5OSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMywgMHgyMiwgMHg0NCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDEyLCAweDAzLCAweDIyLCAweDQ4LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDBjLCAweDAzLCAweDIyLCAweDRjLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDMsIDB4MjIsIDB4NTAsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxNywgMHgwMywgMHgyMiwgMHg1NCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMywgMHgyMiwgMHg1OCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDFlLCAweDAzLCAweDIyLCAweDVjLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsCi0JMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ZjMsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDMsIDB4YTIsIDB4NDIsIDB4MDUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgyMiwgMHhjYSwKLQkweDA3LCAweDE0LCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQ1LCAweGYzLCAweDkzLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MjAsIDB4NDMsIDB4OTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4ODAsIDB4Y2EsCi0JMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgyMiwgMHgwMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDlmLCAweDAwLCAweGNiLCAweGRiLCAweDkxLCAweDAwLCAweDAwLCAweDU3LCAweDAxLCAweDAwLCAweGJjLAotCTB4YWIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4YjEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMywgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweDgxLCAweDg4LCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweGEyLCAweDQwLCAweDc0LCAweDdkLCAweDAwLCAweDAwLAotCTB4NjAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDMsIDB4YTgsIDB4YjEsCi0JMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDlmLCAweDAwLCAweGNhLCAweDc5LCAweGIzLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhjYiwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIyLCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMywgMHg5MSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDhhLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MmIsIDB4MDMsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHgwMywgMHg1NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4Y2QsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4M2QsIDB4MDMsIDB4OTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODksCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDNiLCAweDAzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDNkLCAweDAzLCAweDU1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgxNCwgMHgyZiwgMHg0MCwgMHg5OSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDU3LCAweDAxLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4ZjgsCi0JMHg4MCwgMHg5OCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NGQsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1MywgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDU1LCAweDAzLCAweDFmLCAweDkxLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ4LCAweDg0LCAweDg0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHg4ZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDVhLCAweDAzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQ3LAotCTB4OGUsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDMsIDB4MDAsIDB4NWMsIDB4OGYsIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHhlMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgxNSwgMHgyZCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJkLCAweGYwLCAweDg4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0NSwgMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDhiLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ODIsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDhkLCAweGMwLCAweDAxLCAweDAwLCAweDc0LCAweDAzLCAweDIyLCAweDVmLCAweDhkLCAweDZjLCAweDAwLCAweDAwLAotCTB4NjUsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4NDMsIDB4ODYsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhNiwgMHg0MSwgMHg4NSwgMHg1MCwgMHgwMSwgMHgwMCwgMHg3MCwgMHgwMywgMHgwMCwgMHg0MSwKLQkweDgzLCAweGUwLCAweDAwLCAweDAwLCAweDZlLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmYsIDB4NDYsCi0JMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0NSwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDhiLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODUsIDB4MDMsIDB4YTAsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg4MywgMHgwMywgMHgwMCwgMHg0MSwgMHg4MiwgMHhlOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKLQkweDhlLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDM5LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDFhLCAweDE1LCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NzAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDM5LCAweDAwLCAweDQwLCAweGUxLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NzAsIDB4MTUsIDB4MDAsIDB4NDMsIDB4NjIsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg5NSwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg5NywgMHgwMywgMHgyMiwgMHg1YSwKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4OTgsIDB4MDMsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NDIsCi0JMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgxNSwgMHgyZCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJkLCAweGYwLCAweDg4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg5MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMCwgMHg0OCwgMHg5MCwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDkzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAotCTB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMywgMHgyMiwgMHg0MCwKLQkweDgyLCAweDZjLCAweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTgsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhiNSwgMHgwMywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGE3LCAweDAzLCAweGEyLCAweDQxLCAweDkzLCAweDUwLCAweDAwLCAweDAwLCAweGE1LCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4NDcsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg5ZiwgMHgwMCwgMHg0NywKLQkweDgwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQ3LCAweDhlLCAweGM4LCAweDAxLCAweDAwLAotCTB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg1MCwgMHhiMywgMHgwMSwgMHgwMCwgMHhiYiwgMHgwMywgMHgyMCwgMHgxOCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGE2LCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NTUsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhiZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsIDB4NTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg1MCwgMHhkMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0ZiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDRlLCAweGQzLCAweDAxLCAweDAwLCAweDZlLCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODIsIDB4MDMsIDB4MDAsIDB4NDIsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjNywgMHgwMywgMHgyMiwgMHhhNywKLQkweDhmLCAweDZjLCAweDAwLCAweDAwLCAweDVhLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YzQsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhjOCwgMHgxNCwgMHgyZSwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGVlLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4YTAsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlMSwgMHg5ZiwgMHgwMCwgMHhjYSwKLQkweGE3LCAweDMzLCAweDAxLCAweDAwLCAweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDMsIDB4MjIsIDB4NDIsCi0JMHg3NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMywgMHgyMiwgMHg0MSwgMHg3NSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDAzLCAweDFlLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGRjLCAweDAzLCAweDFmLCAweGNhLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MiwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGNkLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQxLCAweDc1LCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LAotCTB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQ1LCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweDMwLCAweDAxLCAweDAwLAotCTB4NDUsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDUsIDB4MDEsIDB4MDAsIDB4NGMsCi0JMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweGNhLCAweGU1LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHgxNCwgMHgyZSwgMHg0MCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweGEwLCAweGIzLCAweDAxLCAweDAwLCAweDE1LCAweDA0LCAweDAwLCAweDQzLCAweGIyLCAweDMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4ZGEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4YiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ODgsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHg0MywKLQkweGIyLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhhNSwgMHhjMywgMHgwMSwgMHgwMCwgMHgwYiwgMHgwNCwgMHgyMiwgMHg0NCwgMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDBiLCAweDA0LCAweDIyLCAweDQ0LCAweDhiLCAweDUwLCAweDAwLCAweDAwLCAweGZhLCAweDAzLCAweGEyLCAweDUwLAotCTB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHhlMSwgMHg5ZiwgMHgwMCwgMHhiYiwKLQkweDg1LCAweDMwLCAweDAxLCAweDAwLCAweGNjLCAweDE0LCAweDJlLCAweGQyLCAweDk1LCAweGMzLCAweDAxLCAweDAwLAotCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDA0LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDA3LCAweDA0LCAweGEyLCAweGYyLAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhhNSwgMHhlMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGE3LCAweGIzLCAweDAxLCAweDAwLCAweGUxLCAweDlmLCAweDAwLCAweGJiLCAweDg1LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRiLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4OTQsIDB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwKLQkweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLAotCTB4ZGQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTQsCi0JMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHgyNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNiwgMHhjMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4YzQsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDA1LCAweDgyLCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDQsIDB4ODAsIDB4OTQsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDQwLAotCTB4MmQsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgzMSwgMHgwNCwgMHgwMCwgMHgxMiwKLQkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4YzAsIDB4NDksIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NGIsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0ZCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDRmLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDUwLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg1NCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg1NiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDU3LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4ODAsIDB4NTksIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NWIsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg1ZCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDVlLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDYwLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NjIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg2NCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg2NSwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDY3LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4NDAsIDB4NjksIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg2YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDZlLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDcwLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg3MywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3NSwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDc3LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4NzksIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4N2EsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDdlLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OSwgMHgwNCwgMHgwMCwgMHgxMiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4NiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDhhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4OGMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OGUsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDkyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk0LCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5OCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5YSwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDljLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4OWUsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGE0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhhYSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhYywgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGFlLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjIsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGI4LCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YmEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiYywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiZSwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDgwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODIsIDB4MDQsIDB4ODUsIDB4NDEsCi0JMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4NywgMHgwNCwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDYwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ODAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHhmMCwgMHg0YiwgMHg4MiwgMHg4OSwgMHgwMSwgMHgwMCwgMHg5MywgMHgwNCwgMHg2MCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4ZjAsIDB4YTYsIDB4ODIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTYsIDB4MDQsIDB4NjAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4NCwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGYwLCAweGMyLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ODAsIDB4NGIsIDB4OTIsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhNiwKLQkweDkyLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDk0LCAweDg5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4Y2EsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5OCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDk4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDg4LCAweDk0LCAweDAxLCAweDAwLCAweGE2LCAweDA0LCAweDQ3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWQsIDB4MDQsIDB4MjIsIDB4MjAsIDB4ODcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YTYsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxZiwgMHg4MCwgMHg4NiwgMHhiMywgMHgwMSwgMHgwMCwgMHhiMCwgMHgwNCwgMHgyMiwgMHg0ZiwKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiMSwgMHgwNCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGI4LCAweDA0LCAweDIyLCAweDRiLCAweDg5LCAweDdjLCAweDAwLCAweDAwLCAweGI2LCAweDA0LCAweDIyLCAweDRmLAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwNCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDIwLCAweDg3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDk5LCAweGIwLCAweDAxLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4YzEsIDB4MDQsIDB4YTgsIDB4YjEsIDB4NTIsIDB4MzMsIDB4MDAsIDB4MDAsIDB4YzYsIDB4MDQsIDB4MjIsIDB4NGIsCi0JMHg1MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDA0LCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweGMxLCAweDA0LCAweGEyLCAweDQxLAotCTB4OTksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NGYsIDB4NzcsIDB4ZmQsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4MDAsIDB4NGMsCi0JMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwNCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDA0LCAweDIyLCAweDIwLCAweDg3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGQ2LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWYsIDB4ODAsIDB4ODYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDQsIDB4MjIsIDB4NGYsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4MDQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhlOCwgMHgwNCwgMHgyMiwgMHg0YSwgMHg4OSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlNiwgMHgwNCwgMHgyMiwgMHg0ZiwKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGYwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4MDQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMCwgMHg4NywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGYxLCAweDA0LCAweGE4LCAweGIxLCAweDUyLCAweDMzLCAweDAwLCAweDAwLCAweGY2LCAweDA0LCAweDIyLCAweDRhLAotCTB4NTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHgwNCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhmMSwgMHgwNCwgMHhhMiwgMHg0MSwKLQkweDk5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRmLCAweDc3LCAweGZkLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDdiLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDUsIDB4YTgsIDB4YjEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDUsIDB4MWQsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDA1LCAweGEyLCAweDQwLAotCTB4ODYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4OWMsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwgMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg1MCwKLQkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDUsIDB4NTIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDA1LCAweDAwLCAweDQ4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDA1LAotCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgxYiwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgwMCwgMHg0MSwKLQkweGUxLCAweGMxLCAweDFhLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDFiLCAweDAwLAotCTB4MTksIDB4MDUsIDB4MjIsIDB4NTQsIDB4ODEsIDB4N2MsIDB4MWEsIDB4MDAsIDB4MTQsIDB4MDUsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgxYSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhiMywgMHg2NywgMHhkZiwgMHgxYiwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDFiLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MWIsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgyNywgMHgwNSwgMHgwZiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwKLQkweDg4LCAweDg4LCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDUwLCAweDQ3LCAweDMxLCAweDAxLCAweDAwLAotCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODgsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDUsIDB4OTksIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDIxLCAweDA1LCAweDliLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDUsIDB4MWYsIDB4NDQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQ4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDUsIDB4MDAsIDB4NTgsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDZmLCAweDAwLCAweDAwLCAweDQzLCAweDg2LCAweDg4LCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDI2LCAweDA1LAotCTB4NDcsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg0NCwgMHhmMCwgMHg0MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MDEsIDB4MDAsIDB4MDcsCi0JMHg5MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg5NywgMHhlYywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDA1LCAweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDUsIDB4YTIsIDB4NDAsCi0JMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDQ1LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwKLQkweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsIDB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLAotCTB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwNSwgMHhhMiwgMHg0MSwgMHg4ZiwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQ1LCAweGQxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGRhLAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZGEsCi0JMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDdhLCAweDA1LCAweDIyLCAweDQ1LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDQwLCAweDE2LCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGIsIDB4OWYsIDB4MDAsIDB4NDAsIDB4NDksIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc4LCAweDA1LCAweGEyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAotCTB4N2QsIDB4MDUsIDB4MjIsIDB4MjAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4N2EsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgxZiwgMHgwMCwKLQkweDdkLCAweDA1LCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDFlLCAweDAwLCAweDdhLCAweDA1LCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MWUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjcsIDB4OTMsIDB4MWYsIDB4MDAsCi0JMHhkZiwgMHg5ZiwgMHgwMCwgMHg1OCwgMHg2NywgMHg5MywgMHgxZSwgMHgwMCwgMHg1NCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDFmLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKLQkweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQ2LCAweDAwLCAweDAwLCAweDQwLCAweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsCi0JMHg0OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDRhLCAweGIyLCAweDMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmNywgMHhmNSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5NSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDA1LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDJhLCAweDAwLCAweDAwLCAweDQwLAotCTB4YTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHhlMSwgMHg5ZiwgMHgwMCwgMHhiYiwKLQkweDg1LCAweDMwLCAweDAxLCAweDAwLCAweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiOCwgMHgwNSwgMHgyMiwgMHg0NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweGEyLCAweDgwLCAweGRjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTcsIDB4MDUsIDB4YTgsIDB4YmIsIDB4ZTEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYSwgMHgwNSwgMHhhMiwgMHg0MSwKLQkweDgzLCAweDUwLCAweDAwLCAweDAwLCAweGE5LCAweDA1LCAweGEyLCAweGYyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAotCTB4NGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDUsIDB4YTIsIDB4NDAsCi0JMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGIxLCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOCwgMHgwNSwgMHhhMiwgMHhmYSwKLQkweGI0LCAweDZmLCAweDAwLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLAotCTB4YjgsIDB4MDUsIDB4YTIsIDB4ZmEsIDB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsCi0JMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHhiYiwgMHgwNSwgMHgyMiwgMHhmYSwgMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweGI4LCAweDA1LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLAotCTB4NjcsIDB4OTMsIDB4MjEsIDB4MDAsIDB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MjAsIDB4MDAsCi0JMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgyMSwgMHgwMCwgMHhkYiwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDMxLCAweDIxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDIxLCAweDAwLAotCTB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ZmEsCi0JMHg4ZSwgMHhiMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweGI0LCAweGIzLCAweDAxLCAweDAwLCAweGM5LCAweDA1LCAweGEyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZmMsIDB4MTUsIDB4MjAsIDB4MjAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgyNCwgMHgwMCwgMHhkYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgyNSwgMHgwMCwKLQkweGNlLCAweDA1LCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDI0LCAweDAwLCAweGNiLCAweDA1LCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjcsIDB4OTMsIDB4MjUsIDB4MDAsCi0JMHhkZiwgMHg5ZiwgMHgwMCwgMHg1OCwgMHg2NywgMHg5MywgMHgyNCwgMHgwMCwgMHgzOCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDI1LCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDI1LCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDMsIDB4MDUsIDB4MjIsIDB4NTAsCi0JMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZjLCAweDE1LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHg0YSwgMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4YjQsIDB4ZjcsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZTksIDB4MDUsIDB4MjIsIDB4NTAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHhlYSwgMHgwNSwgMHgwMCwgMHg1MCwgMHhiNSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGI1LCAweGIzLCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZTAsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgzMSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMiwgMHgzMywgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM0LCAweDM1LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MzYsIDB4MzcsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzgsIDB4MzksIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0MSwgMHg0MiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDQzLCAweDQ0LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ1LCAweDQ2LCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDcsIDB4NDgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0OSwgMHg0YSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY3LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmMsIDB4MDUsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MmUsIDB4MDYsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDA1LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MmQsIDB4MDYsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhhOSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDA2LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3MiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MywKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweGY5LCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDA2LCAweDIyLCAweDcwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQxLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NDUsIDB4NjcsIDB4MDAsIDB4YTYsIDB4ZTAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MjMsIDB4MDAsIDB4NzAsCi0JMHhlMSwgMHg5YSwgMHgwMSwgMHgwMCwgMHhjZCwgMHhlZiwgMHgwMCwgMHhhNiwgMHhlMiwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDg5LCAweGFiLCAweDAwLCAweDcxLCAweGUzLCAweDlhLCAweDAxLCAweDAwLCAweGJhLCAweDk4LCAweDAwLCAweGE2LAotCTB4ZTQsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZmUsIDB4ZGMsIDB4MDAsIDB4NzIsIDB4ZTUsIDB4OWEsIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHgxMCwgMHgwMCwgMHhhNiwgMHhlNiwgMHhiMiwgMHgwMSwgMHgwMCwgMHg3NiwgMHg1NCwgMHgwMCwgMHg3MywKLQkweGU3LCAweDlhLCAweDAxLCAweDAwLCAweGQyLCAweGMzLCAweDAwLCAweGE2LCAweGU4LCAweGIyLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4ZTEsIDB4MDAsIDB4NzQsIDB4ZTksIDB4OWEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjUsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHgxNiwgMHgwMCwgMHg0YSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmYywgMHgxNiwgMHgyYSwgMHg0NywKLQkweGU3LCAweGI1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDRhLCAweGU4LCAweGU1LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgzZCwgMHg0NiwgMHg4ZCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAotCTB4NDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgyZSwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKLQkweGViLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweGVkLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ZWYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsCi0JMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHhmMywgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg0YiwgMHgwNiwgMHhhMCwgMHg1MCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDk5LCAweDg0LCAweDAxLCAweDAwLAotCTB4NTAsIDB4MDMsIDB4MDAsIDB4NGMsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDk5LCAweDg0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDRjLAotCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODYsIDB4YTQsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKLQkweDk5LCAweDg0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODYsIDB4YTQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg0MCwgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDIwLCAweDg4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4NDEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDAsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHg3NSwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwgMHgxYiwgMHgwMCwgMHgwMCwgMHg3NSwKLQkweDg1LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg0LCAweDk0LCAweDAxLCAweDAwLAotCTB4NTUsIDB4MDYsIDB4YTMsIDB4NTMsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHg4OSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDhiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4OGIsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwNiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgyNywgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDVhLCAweDA2LCAweGFhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCi0JMHg4OSwgMHhhNCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwNiwgMHgwMCwgMHg3OCwgMHg4OSwgMHhhNCwgMHgwMCwgMHgwMCwKLQkweDNiLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDU3LCAweDA2LCAweGFhLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHg4OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwKLQkweDhiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCi0JMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDA2LCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2YiwgMHgwNiwgMHhhMywgMHg1MywKLQkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDgyLCAweDVhLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLAotCTB4OTksIDB4NzksIDB4MDAsIDB4NDIsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyNywgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDcwLCAweDA2LCAweGFhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGQ5LCAweDZlLCAweDAwLCAweGE2LAotCTB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTEsIDB4ZWIsIDB4MDAsIDB4NDIsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHg3OCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDc1LCAweDA2LCAweGFhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4OGYsIDB4MDAsIDB4YTYsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4YmMsIDB4MDAsIDB4NDIsCi0JMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDYyLCAweGNhLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGQ2LCAweGMxLCAweDAwLCAweDQyLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhmMywgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywKLQkweGYxLCAweGIyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NzYsIDB4ZWYsIDB4ZjYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHhlZSwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGVhLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGYsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHgwNiwgMHgyYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwKLQkweGUxLCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweGUzLCAweGMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ZTUsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsCi0JMHhlNywgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHhlOSwgMHhjMiwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDA2LCAweDgxLCAweDQxLCAweDhkLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDQwLCAweDE2LCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZGIsIDB4OWYsIDB4MDAsIDB4NDAsIDB4NDksIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI5LCAweDA2LCAweDIyLCAweDQwLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjksIDB4MDYsIDB4YTIsIDB4NDAsCi0JMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg1ZSwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDE2LCAweDIwLCAweGY2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4OWQsIDB4MDYsIDB4MjIsIDB4NGYsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg5ZiwgMHgwNiwgMHgyMiwgMHg0MCwKLQkweDhmLCAweDdjLCAweDAwLCAweDAwLCAweGEzLCAweDA2LCAweDAwLCAweDU0LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAotCTB4YTEsIDB4MDYsIDB4MjIsIDB4NDIsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhhMywgMHgwNiwgMHgyMiwgMHg0MSwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUzLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGI3LCAweDA2LCAweDIyLCAweDUxLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIyLCAweDA2LCAweGEyLCAweDQwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLAotCTB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDgsCi0JMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDRiLCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweGI1LCAweGIzLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGI2LCAweDA2LCAweDIyLCAweDQwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweGJhLCAweDA2LCAweDAwLCAweDU0LAotCTB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHgxYywgMHgwMCwgMHgwMCwgMHhmZSwgMHg3ZiwgMHhkOSwgMHgwMSwgMHgwMCwgMHhiYSwgMHgwNiwgMHhhNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhlNywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwNiwgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTksIDB4OWYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LCAweDBhLCAweGM4LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LAotCTB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwNywgMHgyMiwgMHgwMSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4YTQsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhkOSwgMHgwNiwgMHhhMywgMHgwNywgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGRhLCAweDA2LCAweDY4LCAweDAxLCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA3LAotCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4MDYsIDB4MjIsIDB4NDAsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhlNiwgMHgwNiwgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgyMywgMHgwNywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHgwNiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwNiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIzLCAweDA3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGVlLCAweDA2LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MTksCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDAwLCAweDAwLCAweGYyLCAweDNhLCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4M2IsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDIsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHgwNiwgMHgyMywgMHgxYSwKLQkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDAzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MjMsIDB4MDcsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MWQsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzMCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDMxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwNywgMHgyMiwgMHgxYSwKLQkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDIzLCAweDA3LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4MTQsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4MTQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgxNywgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHgxYSwKLQkweDEwLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwNywgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDEwLCAweDA3LCAweDYwLCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDEyLAotCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGQsIDB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE3LCAweDA3LCAweGE4LCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDcsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHgwNywgMHgyMiwgMHgwZCwgMHgyNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDFlLCAweDA3LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MjMsIDB4MDcsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDFmLCAweDA3LCAweGE4LCAweDVjLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzZiwgMHgwNywgMHhhMiwgMHgwZCwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNywgMHgyMiwgMHg0NiwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDcsIDB4MjIsIDB4ZjIsCi0JMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDI5LCAweDA3LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA2LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMywgMHgwNywgMHgxZiwgMHhmMCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGQzLCAweDA2LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDVmLAotCTB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDMsIDB4MDYsIDB4MjMsIDB4MDcsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2MsIDB4MDcsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHhkMywgMHgwNiwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMywgMHgwNiwgMHgwMCwgMHgwZCwKLQkweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDVmLCAweDA3LCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MmQsIDB4MWQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHhmMywgMHgzOCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwZCwgMHgwMCwgMHgyMCwgMHg1MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJkLCAweDQwLCAweDNmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDE0LCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDFkLAotCTB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1MiwgMHgwNywgMHhhMCwgMHhmYywgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDUwLCAweDA3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxOCwgMHg5MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1YywgMHgwNywgMHhhMCwgMHhmYywKLQkweDkwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGMwLCAweDAxLCAweDAwLAotCTB4NWEsIDB4MDcsIDB4YTIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ODAsIDB4YjAsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MmQsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhjOSwgMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKLQkweDQ4LCAweGMxLCAweDJkLCAweDAwLCAweDY0LCAweDA3LCAweDQzLCAweDMwLCAweDNkLCAweDA3LCAweDJjLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OWUsIDB4ODUsIDB4YjAsIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsCi0JMHgzZCwgMHhjMywgMHgyZCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MiwgMHhlYywgMHhiMSwgMHgyZCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJlLCAweDFkLAotCTB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MTgsIDB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHgwNywgMHhhMCwgMHg0MSwKLQkweDgwLCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmUsIDB4MzAsCi0JMHg4MSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg3MiwgMHgwNywgMHg5MCwgMHg0MCwgMHg5MiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLAotCTB4OTMsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMCwgMHgxOSwgMHhlOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwKLQkweDE2LCAweGMwLCAweDAxLCAweDAwLCAweDc4LCAweDA3LCAweGEwLCAweDE5LCAweDE2LCAweDQ0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MmYsIDB4MWUsCi0JMHgzMiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3ZCwgMHgwNywgMHhhMiwgMHg0MCwgMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDdjLCAweDA3LCAweGEwLCAweDFjLCAweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4MzgsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZSwgMHgxZSwKLQkweDk4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDFhLCAweDk4LCAweGMwLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDcsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDg5LCAweDA3LCAweDIyLCAweGYyLAotCTB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4NiwgMHgwNywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDFhLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4OTEsIDB4MDcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OWIsIDB4MDcsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDliLCAweDA3LCAweDIyLCAweGYyLAotCTB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5OCwgMHgwNywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWIsIDB4OWYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmYsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLCAweGExLCAweDA3LCAweDkwLCAweGYyLAotCTB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNCwKLQkweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDJhLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MmIsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGFjLCAweDA3LCAweDIyLCAweGYyLCAweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhhOSwgMHgwNywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE3LCAweDEwLCAweGRjLCAweDAxLCAweDAwLAotCTB4YzksIDB4MDcsIDB4MjIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDcsIDB4YTIsIDB4NDQsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGIzLCAweDA3LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LAotCTB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMSwgMHgwMCwgMHhlNiwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI3LCAweDA3LCAweGEyLCAweDQxLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4M2UsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YzksIDB4MDcsIDB4MjIsIDB4NDAsCi0JMHgxNSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiYSwgMHgwNywgMHgyMCwgMHgxZSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDNjLCAweGIwLCAweDAxLCAweDAwLCAweGU1LCAweDlmLCAweDAwLCAweDFlLAotCTB4MjQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YmYsIDB4MDcsIDB4MjIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDIzLCAweDA3LCAweDAwLCAweDQwLCAweDE3LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4OWYsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTUsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiYywgMHgwNywgMHhhMiwgMHgwOCwgMHgyZSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDgwLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwNCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHg5ZiwgMHgwMCwgMHgxZiwKLQkweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZTIsIDB4OWYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwNCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweGU2LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNlLCAweDA3LCAweGEyLCAweDQxLAotCTB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4MDcsIDB4MDAsIDB4MWUsIDB4M2UsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweGU4LCAweDlmLCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZTIsIDB4OWYsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNywgMHgwNywgMHgwMCwgMHhiYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQl9LAotCXsKLQkweDMxLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM0LCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzUsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHg4MCwgMHg4MSwgMHg4MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGU0LCAweDg3LCAweGEyLCAweDQwLCAweDkxLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDk1LCAweDJhLCAweGM4LCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVlLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4MCwgMHgxMSwgMHg4MSwKLQkweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MWEsIDB4ODAsIDB4MTEsIDB4ODIsIDB4OTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4NywgMHgwMCwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDIzLCAweDgwLCAweGEyLCAweDQyLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MCwgMHgxMSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHg1MSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDgwLCAweDExLCAweDgyLCAweDgyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODAsIDB4NTIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODAsIDB4MDAsIDB4NDgsCi0JMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwgMHgyNywgMHg4MCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDI2LCAweDgwLCAweGEyLCAweDUzLCAweDA3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDUzLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgyOSwgMHg4MCwgMHhhMiwgMHg1MiwgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg1MiwKLQkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyZSwgMHhhMiwgMHg1MiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGY0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHg0YywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4YzYsIDB4ODIsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODIsIDB4MDUsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4ZGUsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDliLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDljLCAweGIzLCAweDAxLCAweDAwLAotCTB4NDgsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTgsIDB4OTUsIDB4MjAsIDB4NDQsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDI0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweGVlLAotCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHg0NCwgMHg4MCwgMHhhMiwgMHg0MywgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDM2LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDA2LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDUsIDB4MTAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwOSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDYwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ODgsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGIxLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDYwLCAweDk1LCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhkZCwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDkxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDdiLCAweGIzLCAweDAxLCAweDAwLAotCTB4OTksIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMywgMHgwMSwgMHgwMCwgMHg1YywgMHg5NSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDkwLCAweDA2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MmYsIDB4ODEsIDB4MDEsIDB4MDAsCi0JMHhhMiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4YzYsIDB4ODIsIDB4MDAsIDB4NDEsIDB4ZTEsIDB4YzEsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxOSwgMHgwNSwgMHgyMiwgMHg1NCwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDZjLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGI0LAotCTB4NjksIDB4ZGYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg4MCwgMHgyMiwgMHg0MCwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDdhLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODEsIDB4MDAsIDB4NTgsCi0JMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg1NCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MywgMHg4MSwgMHgwMCwgMHg1OCwKLQkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDQwLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDZlLCAweGZhLCAweDhlLCAweGIwLCAweDAxLCAweDAwLCAweGMxLCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDk2LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDU1LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OTYsIDB4ODAsIDB4MjIsIDB4NDAsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg5MywgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKLQkweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDQzLCAweDgxLCAweDAwLCAweDU4LCAweDY5LCAweDkzLCAweDAwLCAweDAwLAotCTB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ1LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkNywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3MiwgMHgwMSwgMHgwMCwgMHg0MSwKLQkweDgxLCAweGMwLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDUxLCAweDQ5LCAweGZkLCAweDkzLCAweDAwLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4NTIsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTUsIDB4NDksCi0JMHhmZCwgMHg4MywgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NiwgMHg0YSwgMHhmZCwgMHg4MywgMHgwMCwgMHgwMCwKLQkweDUwLCAweDAxLCAweDkxLCAweDgxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4OTEsIDB4ODIsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweGI0LCAweDgwLCAweDQzLCAweDMwLCAweDNkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDllLAotCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsIDB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMCwgMHg0MiwgMHhlYywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwKLQkweDkxLCAweDZmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNCwgMHg4MCwgMHhhMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweGQwLCAweGUxLCAweGIxLCAweDAwLCAweDAwLAotCTB4YzEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCi0JMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweGM5LCAweDgwLCAweGEyLCAweDQyLAotCTB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4YTEsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHgwNCwKLQkweDgwLCAweDk0LCAweDAwLCAweDAwLCAweDgwLCAweDE1LCAweDNmLCAweDQyLCAweDk3LCAweGUzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDMsCi0JMHgwMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGNiLCAweDk5LCAweGNiLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLAotCTB4ZjMsIDB4ODMsIDB4MDEsIDB4MDAsIDB4ZDMsIDB4ODAsIDB4YTIsIDB4NDIsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwKLQkweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGExLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhkYSwgMHg4MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHgwMCwgMHgyMCwKLQkweDQyLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDA1LCAweDZjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4Y2IsIDB4ZGIsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDEsCi0JMHg4YiwgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGUwLCAweDgwLCAweGE4LCAweGIxLCAweDhjLCAweDMzLCAweDAwLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTIsIDB4ODAsIDB4YTgsIDB4YjEsIDB4OTQsIDB4MzMsIDB4MDAsIDB4MDAsCi0JMHhlOCwgMHg4MCwgMHgxNCwgMHhjNiwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHhjNiwKLQkweDgzLCAweGY0LCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDIyLCAweDRmLCAweDgzLCAweDA0LCAweDAwLCAweDAwLAotCTB4YzQsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4YzYsCi0JMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NywgMHhhMywgMHgwMSwgMHgwMCwKLQkweGM0LCAweDgwLCAweDFmLCAweDVjLCAweDk3LCAweDUzLCAweDAwLCAweDAwLCAweDZkLCAweDgyLCAweDFlLCAweGM2LAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4MjIsIDB4NDgsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHhmMiwgMHg4MCwgMHgyMiwgMHg1OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHgyMiwgMHg0OCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDg0LCAweGNjLCAweDAxLCAweDAwLAotCTB4ZjIsIDB4ODAsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4MCwgMHhhMiwgMHhjNiwgMHg4ZiwgMHgwNiwgMHgwMCwgMHgwMCwKLQkweGM0LCAweDgwLCAweDFlLCAweGM2LCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQzLAotCTB4ODEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4ODAsIDB4MDAsIDB4NDAsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCi0JMHg0NCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM5LCAweDgyLCAweDAwLCAweGNhLCAweDYzLCAweGIzLCAweDAwLCAweDAwLAotCTB4NzUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ODEsIDB4MDAsIDB4NGQsCi0JMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg4MSwgMHgwMCwgMHg0ZSwgMHg2MSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDRjLCAweDgxLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU1LCAweDgxLCAweDAwLCAweDRjLAotCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmOCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NiwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweGY0LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NGMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHg5YiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDkwLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDk0LCAweDgxLCAweDAwLCAweDQwLAotCTB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4OWIsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg5YywgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDllLCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAotCTB4OWYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ODEsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGFlLCAweDgyLCAweDAwLCAweGJiLCAweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDNhLCAweDgyLCAweDAwLCAweGNhLAotCTB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDMsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhlOCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsCi0JMHg3NywgMHhiMywgMHgwMCwgMHgwMCwgMHg1NiwgMHg4MSwgMHgwMCwgMHg0ZCwgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVlLCAweDgxLCAweDAwLCAweDRlLCAweDYxLCAweGIxLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweDAwLCAweGJiLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4MDAsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0YywgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg4MSwgMHgwMCwgMHhiYiwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4NGQsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwNSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDI2LCAweDgxLCAweDIyLCAweDQyLCAweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDI4LCAweDgxLCAweDIyLCAweDQxLAotCTB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MmEsIDB4ODEsIDB4MWUsIDB4Y2EsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyYywgMHg4MSwgMHgxZiwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweGM5LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweDQyLCAweDhmLCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4Y2QsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDEsCi0JMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIyLCAweDgzLCAweDAwLCAweDQwLCAweDhmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGE2LAotCTB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwKLQkweDhmLCAweGIzLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MmYsIDB4OWMsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHgzOSwgMHgzMywgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyZiwgMHg5YiwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQ2LCAweDgxLCAweDAwLCAweDQwLCAweDM3LCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDlhLAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzUsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgyZiwgMHg5OSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDMzLCAweDMzLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGFlLCAweDQ3LCAweGM5LCAweDAxLCAweDAwLAotCTB4YzQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDAwLCAweDQwLAotCTB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg2MywgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg4MSwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDNlLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NDEsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwKLQkweDQ0LCAweDgxLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQzLCAweDgxLCAweDAwLCAweDU4LAotCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjAsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MSwgMHhhMiwgMHg0MCwKLQkweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHhlMSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg0YywgMHg4MSwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDUyLCAweDgxLCAweDI4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MjIsIDB4NWMsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHg4MCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDYzLCAweGIxLCAweDAxLCAweDAwLAotCTB4NTIsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MTcsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDU3LCAweDgxLCAweDAwLCAweGJiLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4NjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDEsIDB4NzYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OSwgMHg4MSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDYzLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDYxLCAweDgxLCAweDAwLCAweGJiLCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweDUwLCAweDk1LCAweDJmLCAweDQwLAotCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjUsIDB4ODEsIDB4MjIsIDB4NDAsIDB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHhjNCwgMHg4MCwgMHhhMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4MCwgMHgyMiwgMHg0MCwKLQkweDk1LCAweDZmLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDYwLCAweDQwLCAweDk1LCAweDgzLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MjIsIDB4NDAsCi0JMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjNCwgMHg4MCwgMHhhMiwgMHg0MCwgMHg4NSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGM0LCAweDgwLCAweGEyLCAweDRlLCAweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDY5LCAweDgxLCAweDM2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg4MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDZjLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmUsIDB4ODEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDc0LCAweDgxLCAweDIyLCAweDQxLCAweDQzLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweGNhLAotCTB4OTUsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4NjgsIDB4ODEsIDB4MDAsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg3NywgMHg4MSwgMHhhMiwgMHg0MiwKLQkweDY3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDY3LCAweGIzLCAweDAxLCAweDAwLAotCTB4NzcsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2NSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MywgMHg4MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFhLCAweGNhLCAweDY5LCAweDk3LCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDI2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4ODEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwgMHhjNCwgMHg4MCwgMHgyMCwgMHg0MywKLQkweDk1LCAweDZmLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDgwLCAweGNhLCAweDY3LCAweDMzLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MjIsIDB4NDAsIDB4NjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4YTIsIDB4NDgsCi0JMHhkYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg2ZiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKLQkweDg1LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM1LCAweDgwLCAweDIyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDk1LCAweDkzLCAweDAxLCAweDAwLCAweDhjLCAweDgxLCAweGEyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCi0JMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGMzLCAweGIxLCAweDAxLCAweDAwLCAweDhmLCAweDgxLCAweDIyLCAweDViLAotCTB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmZCwgMHgwMCwgMHhjYSwKLQkweDk1LCAweDliLCAweDAxLCAweDAwLCAweDBkLCAweDAxLCAweDAwLCAweGNhLCAweGM1LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsCi0JMHhjNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhkZiwgMHg2ZiwgMHgwMCwgMHhjYSwgMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDk1LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAotCTB4YzcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgwZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDk1LCAweDgzLCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLCAweGM3LCAweGIxLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4Y2EsCi0JMHhjYiwgMHhiMSwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjZCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgzLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQyLAotCTB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDA5LCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4YTQsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDEsCi0JMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhNiwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweGE2LCAweDA4LCAweGIxLCAweDAxLCAweDAwLCAweGE4LCAweDgxLCAweDlmLCAweDg1LAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODMsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg4MSwgMHgyMiwgMHgzMCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHhhNywgMHg4MSwgMHhhMiwgMHg0ZiwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDIsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweGM0LCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAotCTB4YmQsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGJhLCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDBjLCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAotCTB4YzIsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHhjZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDAxLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDBjLCAweDAwLCAweDQzLAotCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgxOCwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NDEsCi0JMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQxLAotCTB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAotCTB4NDAsIDB4MTMsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZDgsIDB4ODEsIDB4MjIsIDB4NDMsCi0JMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGQ1LCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmMywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAotCTB4ZGEsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4NDEsCi0JMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmMywgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywKLQkweDgzLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGMyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg4MywgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAotCTB4ZWMsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGVmLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDQwLCAweDEzLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4ODEsIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGM4LCAweDE0LCAweDJlLCAweGJiLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGY5LCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHg4MiwgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxNywgMHg4MiwgMHgyMiwgMHg0NCwKLQkweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDExLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODIsIDB4MjIsIDB4NGEsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDgyLCAweDIyLCAweDRkLCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODIsIDB4MjIsIDB4NGYsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4MiwgMHgyMiwgMHg0ZSwKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MWYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4MCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MTIsIDB4ODIsIDB4MjIsIDB4NDUsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MiwgMHgyMiwgMHg0NCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDE2LCAweDgyLCAweDIyLCAweDQzLAotCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZiwgMHg4MiwgMHgyMiwgMHg0MiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDIzLCAweDgyLCAweDIyLCAweDRiLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMiwgMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweGNhLAotCTB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgyOSwgMHg4MiwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MmIsIDB4ODIsIDB4OWYsIDB4ODUsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MiwgMHgxNCwgMHhmNywgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDgyLCAweGEyLCAweDQ5LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzMsIDB4ODIsIDB4MTUsIDB4ZjgsIDB4ODEsIDB4MTQsIDB4MDAsIDB4MDAsCi0JMHgzMywgMHg4MiwgMHhhMiwgMHg0YSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDM1LCAweDgyLCAweGEyLCAweGM4LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlZiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDM3LCAweDgyLCAweDQyLCAweDQwLCAweGYxLCAweDMzLCAweDAwLCAweDAwLCAweDQzLCAweDgxLCAweDAwLCAweDQwLAotCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MDAsIDB4YmIsIDB4NmIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgwMCwgMHhiYiwgMHhiMSwgMHhiMywgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDQzLCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGEsIDB4ODIsIDB4YTIsIDB4NTQsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDUxLCAweDgyLCAweGEyLCAweDA2LAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAotCTB4NTcsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDVhLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAotCTB4NjAsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAotCTB4NmMsIDB4ODIsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDgwLCAweGEyLCAweDQyLCAweDk3LCAweDZmLCAweDAwLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4NDIsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg3OCwgMHg4MiwgMHgyMiwgMHg0NCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHgyMiwgMHg0OCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDdhLCAweDgyLCAweDIyLCAweDRjLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4ODUsIDB4ODIsIDB4MjIsIDB4NTAsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODIsIDB4MjIsIDB4NTQsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHgyMiwgMHg1OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDhkLCAweDgyLCAweDIyLCAweDVjLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYzLCAweDgzLCAweDAxLCAweDAwLAotCTB4N2UsIDB4ODIsIDB4YTIsIDB4NDIsIDB4MDUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgyMiwgMHhjYSwgMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgzLCAweDAwLCAweDQ2LCAweGYzLCAweDkzLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDIwLCAweDQzLAotCTB4OTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4ODAsIDB4Y2EsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgyMiwgMHgwMSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4MCwgMHhhMiwgMHg0OCwKLQkweGRiLCAweDdkLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNiLCAweGRiLCAweDkxLCAweDAwLCAweDAwLAotCTB4NTcsIDB4MDEsIDB4MDAsIDB4YmMsIDB4YWIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsCi0JMHhiMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweGZmLCAweDAwLCAweDAwLCAweGNhLCAweDgxLCAweDg4LCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweGEyLCAweDQwLAotCTB4NzQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg4YSwgMHg4MiwgMHhhOCwgMHhiMSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4OSwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDgzLCAweDAwLCAweGNhLCAweDc5LCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHhjYiwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDgyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg5YiwgMHg4MiwgMHg5MSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YSwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4OTksIDB4ODIsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OWIsIDB4ODIsIDB4NTYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGI2LCAweDAzLCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGNkLCAweDgzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YTAsIDB4ODIsIDB4YTIsIDB4NDEsCi0JMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGFiLCAweDgyLCAweDkxLCAweDgxLAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODksIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHhhOSwgMHg4MiwgMHhhNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFiLCAweDgyLCAweDU1LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQxLAotCTB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4YjEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgxNCwgMHgyZiwgMHg0MCwgMHg5OSwgMHhiMywgMHgwMSwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDk0LCAweDJlLCAweDQzLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjIsIDB4ODIsIDB4YTIsIDB4NDEsCi0JMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFjLCAweDk0LCAweDJlLCAweDQzLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjYsIDB4ODIsIDB4YTIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGEzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4NjAsIDB4MTUsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg0MSwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NDAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4NDEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHg0MiwKLQkweDgxLCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAotCTB4YmMsIDB4ODIsIDB4YTAsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmMsIDB4ODIsIDB4MDAsIDB4NTAsCi0JMHg4NSwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MywgMHhhMiwgMHg0MSwgMHgwMSwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweGNmLCAweDgyLCAweDIyLCAweDU4LCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDc4LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODIsIDB4YTgsIDB4YjEsIDB4OWMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4YzAsIDB4MDAsIDB4YTYsIDB4MWUsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MGUsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4MiwgMHgzMywgMHhjNCwgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGQyLCAweDgyLCAweGExLCAweGFkLCAweDlkLCAweDIwLCAweDAwLCAweDAwLCAweGM2LCAweDgyLCAweDEzLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NGUsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgzOCwgMHg0NSwgMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZiwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVlLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MDUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODIsIDB4MjIsIDB4YWIsCi0JMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYiwgMHg4MiwgMHhhMiwgMHg0MCwgMHgwMSwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDgyLCAweDIyLCAweDVmLCAweDU3LCAweDdkLCAweDAwLCAweDAwLCAweDBmLCAweDg4LCAweDAwLCAweDVmLAotCTB4MWYsIDB4YjQsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4ODIsIDB4MjIsIDB4NWUsIDB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg3ZCwgMHg4OCwgMHgwMCwgMHg1ZiwgMHgxZiwgMHhiNCwgMHgwMCwgMHgwMCwgMHhlMywgMHg4MiwgMHgyMiwgMHg1NCwKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDc0LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZGQsIDB4ODIsIDB4YTgsIDB4YjEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgxZiwgMHhiNCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4NCwgMHhhMiwgMHg1ZiwgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDkyLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGU1LCAweDgyLCAweGEyLCAweDVmLAotCTB4NTksIDB4MjcsIDB4MDAsIDB4MDAsIDB4ZTcsIDB4ODIsIDB4YTIsIDB4NWMsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhlZSwgMHg4MiwgMHhhMiwgMHg1ZSwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4MiwgMHgyMiwgMHg1YywKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweGZiLCAweDgyLCAweDM3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTgsIDB4ODIsIDB4YTgsIDB4YjEsCi0JMHgzNiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGVhLCAweDgyLCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzQsIDB4ODUsIDB4MTcsIDB4NWYsIDB4MWYsIDB4YjQsIDB4MDAsIDB4MDAsCi0JMHhmYiwgMHg4MiwgMHgzNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGVmLCAweDgyLCAweGE4LCAweGIxLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZjcsIDB4ODIsIDB4NTIsIDB4MjEsIDB4MTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDEsCi0JMHgyZiwgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxZiwgMHhiNCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDNmLCAweDAwLCAweDA5LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4MDEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4NGYsIDB4ODMsIDB4MDAsIDB4MzQsIDB4MTMsIDB4ODQsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgzZiwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDFmLCAweGI0LCAweDAxLCAweDAwLCAweGMyLCAweDgzLCAweDAwLCAweDQzLCAweDAxLCAweGYwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZmIsIDB4ODIsIDB4MzMsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZSwgMHg1YSwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDRlLCAweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDQwLAotCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MDYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg4MiwgMHgxMywgMHg0ZSwgMHg1YSwgMHg5MywgMHgwMCwgMHgwMCwgMHhlNCwgMHg4NywgMHhhMiwgMHg0OCwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDA1LCAweDgzLCAweDAyLCAweGU2LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDYsIDB4ODMsIDB4ODMsIDB4ZTUsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OGUsIDB4ODIsIDB4MDAsIDB4NDIsCi0JMHg5NywgMHhiMywgMHgwMCwgMHgwMCwgMHg5ZSwgMHg4MiwgMHgwMCwgMHg0MiwgMHg5NywgMHhiMywgMHgwMCwgMHgwMCwKLQkweDA5LCAweDgzLCAweDIyLCAweDQ2LCAweGYzLCAweDdmLCAweDAwLCAweDAwLCAweDBjLCAweDgzLCAweGEyLCAweDQxLAotCTB4ZjMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YzYsIDB4ODAsIDB4MDAsIDB4NDIsIDB4OTcsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHg4MywgMHgyMiwgMHg0NCwgMHhmMywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MywgMHhhMiwgMHg0MSwKLQkweGYzLCAweDdmLCAweDAwLCAweDAwLCAweGM2LCAweDgwLCAweDAwLCAweDZmLCAweDk3LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4YWMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ODMsIDB4MjIsIDB4NWEsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDBlLCAweDgzLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGNmLAotCTB4MTEsIDB4YzksIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODMsIDB4YTIsIDB4NDAsIDB4OTMsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgxNywgMHg4MywgMHgyMiwgMHg0NCwgMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MywgMHg0MiwgMHhhNSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDE2LCAweDgzLCAweGEyLCAweDQwLCAweDkzLCAweDdmLCAweDAwLCAweDAwLAotCTB4MzgsIDB4ODMsIDB4MWEsIDB4NDAsIDB4OTMsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkZiwgMHg4MCwgMHhhMiwgMHg0MCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweGRmLCAweDg3LCAweDIyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweGQ2LCAweDg3LCAweDIyLCAweDQwLAotCTB4NjUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4YTIsIDB4NWIsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0OSwgMHgzMywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4MywgMHgyMiwgMHg0OCwKLQkweDMzLCAweDdkLCAweDAwLCAweDAwLCAweGZmLCAweDAxLCAweDAwLCAweDk5LCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OTgsIDB4MmYsIDB4NDAsCi0JMHgzMywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM2LCAweDgyLCAweDAwLCAweDQwLAotCTB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGM2LCAweDgyLCAweDAwLCAweDVmLCAweDFmLCAweDgwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NWYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg4MiwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NWYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzMiwgMHg4MywgMHgzMywgMHg0MCwgMHgxZiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDRlLCAweDVhLCAweDdmLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDRlLAotCTB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4NDAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgwNiwgMHg2YywgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgxMywgMHg0ZSwKLQkweDVhLCAweDkzLCAweDAwLCAweDAwLCAweDNhLCAweDgzLCAweGEwLCAweGNlLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4NGQsIDB4ODMsIDB4YTAsIDB4Y2QsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsCi0JMHg5YywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDRkLCAweDgzLCAweDIyLCAweGI1LCAweDgxLCAweDE0LCAweDAwLCAweDAwLCAweDgwLCAweDE1LCAweDJmLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2UsIDB4ODMsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHhiNCwgMHg2NSwgMHg5NywgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNSwgMHgyZSwgMHg0MCwKLQkweDY5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDgzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGIxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI1LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4MywgMHhhOCwgMHhhMSwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDE3LCAweDgzLCAweDAwLCAweDg4LCAweDllLCAweGIzLCAweDAwLCAweDAwLAotCTB4MTcsIDB4ODMsIDB4YTIsIDB4NDEsIDB4NjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ODMsIDB4MDAsIDB4NmYsCi0JMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg4MywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDE3LCAweDgzLCAweDFhLCAweDQwLCAweDkzLCAweDgzLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YSwgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKLQkweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDAwLCAweDA5LCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MGMsIDB4ODgsIDB4MDEsIDB4MDAsIDB4NWMsIDB4ODMsIDB4YTYsIDB4NDIsCi0JMHgxMywgMHg2MCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg5NiwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDU3LCAweDgzLCAweDYxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4ODMsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhhMywgMHg5NiwgMHg3MSwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4MywgMHgwMCwgMHg1OCwKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDg3LCAweDk2LCAweDAwLCAweDk1LCAweDAzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDA0LCAweDAwLCAweDE3LCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGE2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4YzEsIDB4MDAsIDB4MTcsIDB4OTYsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDY4LCAweDgzLCAweDIzLCAweDRiLCAweGU0LCAweDZkLCAweDAwLCAweDAwLAotCTB4NjgsIDB4ODMsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDZiLCAweDgzLCAweDgzLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NmQsIDB4ODMsIDB4ODUsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0NywgMHhjMSwgMHgwMSwgMHgwMCwgMHg3MiwgMHg4MywgMHgyMiwgMHg1NSwKLQkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDQzLCAweGQxLCAweDAxLCAweDAwLAotCTB4MGYsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHg3MywgMHg4MywgMHgwMCwgMHg0YiwgMHg0NCwgMHhjMSwgMHgwMCwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweGY2LAotCTB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhmMCwKLQkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDFhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MjgsIDB4M2MsIDB4NDYsCi0JMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDdmLCAweDgzLCAweGEyLCAweGY4LCAweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDhmLCAweDgzLCAweDIyLCAweDQxLAotCTB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHg3YiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YywgMHg4MywgMHhhMiwgMHhmOCwKLQkweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDgzLCAweGEyLCAweGY4LCAweDEwLCAweDZjLCAweDAwLCAweDAwLAotCTB4N2MsIDB4ODMsIDB4YTIsIDB4ZjAsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OGQsIDB4ODMsIDB4MjIsIDB4NTgsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDg0LCAweDgzLCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg4LCAweDgzLCAweGEyLCAweGYzLAotCTB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ZTYsIDB4OTUsIDB4MDEsIDB4MDAsCi0JMHg4ZCwgMHg4MywgMHg3NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDc1LCAweGYzLCAweDBjLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YiwgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDhkLCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDk1LCAweDgzLCAweDc3LCAweDQxLAotCTB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4OTMsIDB4ODMsIDB4MjIsIDB4NTgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDkxLCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4OTMsIDB4ODMsIDB4NjcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ODMsIDB4NzcsIDB4NDEsCi0JMHgyZCwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDk1LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGE2LCAweDgzLCAweDIyLCAweDQxLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OWIsIDB4ODMsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4MywgMHgyMiwgMHg1ZiwKLQkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDQ4LCAweDk2LCAweDAwLCAweDVmLCAweDAxLCAweDEwLCAweDAxLCAweDAwLAotCTB4YTEsIDB4ODMsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDlmLCAweDk1LCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGE2LCAweDk1LCAweDAwLCAweDRiLAotCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAotCTB4YjUsIDB4ODMsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNSwgMHg4MywgMHgyMiwgMHgyMCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGIwLCAweDgzLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NywgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0YiwgMHhlMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YjksIDB4ODMsIDB4ODIsIDB4ZjAsIDB4MTgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDUsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMCwgMHgwMCwgMHhhNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGJmLCAweDgzLCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLCAweDM0LCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg1NSwgMHg5NywgMHgwMCwgMHg0YiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg0YiwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDU3LCAweDk2LCAweDAwLCAweDAzLCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAotCTB4YTksIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLAotCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg1MCwKLQkweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhjZSwgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGM5LCAweDAxLCAweDAwLCAweGQwLCAweDgzLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDJlLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg0MSwgMHgwMCwgMHhhNiwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgyZSwgMHg0NywKLQkweDk3LCAweDkwLCAweDAxLCAweDAwLCAweGU2LCAweDgzLCAweDIyLCAweDE3LCAweDk2LCAweDA0LCAweDAwLCAweDAwLAotCTB4ZTQsIDB4ODMsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ODMsIDB4MjMsIDB4YTIsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHg1MiwgMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDAwLAotCTB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODQsIDB4MDAsIDB4NWMsCi0JMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MywgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGYxLCAweDgzLCAweDIyLCAweDVmLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4ZWQsIDB4ODMsIDB4NjIsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHg4MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDcyLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MGYsIDB4MDAsIDB4ZjYsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHhmNSwgMHg4MywgMHhhMiwgMHhhNiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MywgMHgwMCwgMHhmMiwKLQkweDNhLCAweGIwLCAweDAwLCAweDAwLCAweGYxLCAweDg0LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4NCwgMHgyMiwgMHg0YSwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAzLCAweDg0LCAweDIyLCAweDQ4LCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDNkLCAweDQyLCAweDgxLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDMsIDB4ODQsIDB4YTIsIDB4NDIsIDB4ZTAsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4ODQsIDB4YTIsIDB4NGIsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHg4NCwgMHg2OSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywKLQkweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDQxLCAweDQ3LCAweGMzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTAsIDB4YTEsIDB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODQsIDB4MjIsIDB4YTEsCi0JMHgwOSwgMHg2YywgMHgwMCwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA4LCAweDg0LCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDQ2LCAweDg0LCAweGEzLCAweDkyLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAzLCAweDg4LCAweDI3LCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MTMsIDB4ODQsIDB4MjIsIDB4NWMsIDB4MTcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODQsIDB4MDAsIDB4MDAsCi0JMHgyYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDE4LCAweDg0LCAweGEyLCAweDQzLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NTgsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzNCwgMHg4NCwgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDhjLCAweGNjLCAweDAxLCAweDAwLCAweDU4LCAweDk3LCAweDAwLCAweDRjLCAweDAzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweDJjLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDIxLCAweDg0LCAweGE4LCAweDU0LCAweDE3LCAweDEwLCAweDAwLCAweDAwLAotCTB4MzQsIDB4ODQsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMywgMHg4NCwgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDAxLCAweDhjLCAweGNjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzksIDB4OTcsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzQsIDB4ODQsIDB4MjgsIDB4NTQsIDB4MTcsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3OSwgMHg5NywgMHgwMCwgMHg0MywKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDM2LCAweDg0LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsCi0JMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NCwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgzYSwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NDEsIDB4ODQsIDB4MjIsIDB4NDMsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDQ0LCAweDg0LCAweGEyLCAweDVmLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTMsIDB4MDAsIDB4MDEsIDB4MzgsIDB4NDMsIDB4MDEsIDB4MDAsCi0JMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMywgMHg4OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQ4LCAweDg0LCAweGEyLCAweDRiLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4ZWUsIDB4ODQsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyNywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyZCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweDRiLCAweDg0LCAweDM1LCAweDAxLAotCTB4ODYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHg4NCwgMHgyOCwgMHhiMSwgMHgzMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4NCwgMHgyMiwgMHg0ZCwKLQkweDc1LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDgwLCAweGIyLCAweDAxLCAweDAwLAotCTB4ZGIsIDB4ODQsIDB4YTcsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwKLQkweGVkLCAweDg0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDZkLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTQsIDB4ODQsIDB4YTgsIDB4YjEsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg4NCwgMHhhNywgMHg0MCwKLQkweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDQzLCAweGMzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhkZSwgMHgwNywgMHgwMCwgMHg0MywgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDg0LCAweGFhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDYzLCAweDg0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2UsIDB4NDMsIDB4MjcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDI3LCAweGMwLCAweDAxLCAweDAwLAotCTB4NGMsIDB4ODQsIDB4YTMsIDB4MGIsIDB4ODcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsCi0JMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDAzLCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MmQsIDB4NDAsIDB4MzksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2ZCwgMHg4NCwgMHhhMiwgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDE2LCAweDMwLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZGUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NzAsIDB4ODQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4MjUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDM3LCAweDk4LCAweDAxLCAweDAwLCAweDc1LCAweDg0LCAweDIzLCAweDAxLCAweDM2LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODQsIDB4ODIsIDB4NDEsCi0JMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg3OSwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGVkLCAweDk0LCAweDAwLCAweDQzLCAweDIzLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDkxLCAweDg0LCAweDIyLCAweDQ1LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwYiwgMHgyNSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDg4LCAweDg0LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4MDMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyNSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHg0YywKLQkweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM3LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODQsIDB4MDAsIDB4NDUsCi0JMHgxZiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg5MywgMHg4NCwgMHhhMywgMHgxMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDk0LCAweDg0LCAweDY4LCAweDFiLCAweDI4LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLAotCTB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4OTcsIDB4ODQsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4YmYsIDB4ODQsIDB4MjIsIDB4MTQsCi0JMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI0LCAweGQwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDE0LAotCTB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjcsIDB4ODQsIDB4YTIsIDB4MTQsIDB4MzYsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhhNywgMHg4NCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGE1LCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhhMiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDJiLCAweDgwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDUwLCAweDJiLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MzcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YWQsIDB4ODQsIDB4MjMsIDB4MDEsCi0JMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDg0LCAweDIyLCAweDFiLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDE1LCAweGUwLCAweDhkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGI4LCAweDg0LCAweDAwLCAweDAzLCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LAotCTB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODQsIDB4YTIsIDB4NDAsIDB4MjUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzOSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHgxMywKLQkweDM4LCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDNkLCAweDQzLCAweDM5LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MjUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4NCwgMHgwMCwgMHhmMCwgMHgzMCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzYsIDB4ODQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOSwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGMzLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGNhLCAweDg0LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU2LAotCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHhjZCwgMHg4NCwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweGQwLCAweDg0LCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MjAsIDB4MWQsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4NCwgMHhhMywgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDg0LCAweDYwLCAweDVmLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAwLCAweDBiLAotCTB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTMsIDB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwKLQkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAzLCAweDg4LCAweGEyLCAweDVmLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MywgMHgwMCwgMHgwMSwgMHgzOCwgMHg0MywgMHgwMSwgMHgwMCwKLQkweDAzLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDAzLAotCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGQsIDB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVkLCAweDg0LCAweDIyLCAweDEzLAotCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZTgsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlYSwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDg0LCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YTYsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwKLQkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLAotCTB4MTIsIDB4OTUsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODUsIDB4MjIsIDB4NDEsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDg1LCAweDIyLCAweDVmLAotCTB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODUsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NSwgMHgyMiwgMHgyMCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDBmLCAweDg1LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMiwgMHg5NywgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0YiwgMHhlMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MTksIDB4ODUsIDB4MjIsIDB4M2EsIDB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWUsIDB4ODUsIDB4YTIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg0MCwKLQkweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDE3LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDg3LCAweDk2LCAweDAwLCAweDk1LCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI4LCAweDIwLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MmIsIDB4ODUsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTUsIDB4OTcsIDB4MDAsIDB4NGIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg0YywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDg1LCAweDgzLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MmYsIDB4ODUsIDB4ODUsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHhmNiwKLQkweDAyLCAweGNjLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweGExLCAweDJhLCAweGM4LCAweDAxLCAweDAwLAotCTB4NTcsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTksIDB4OTMsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDM5LCAweDg1LCAweDY0LCAweDQ3LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2EsIDB4ODUsIDB4YTgsIDB4MWIsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHg3NCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGUwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDA1LAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4MDksIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YiwgMHg4NSwgMHgwMSwgMHhmYiwKLQkweDA4LCAweDMwLCAweDAwLCAweDAwLCAweGQ1LCAweDg1LCAweDg3LCAweGZiLCAweDIyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDk1LCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLCAweDVjLCAweDg1LCAweDIyLCAweDQxLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODUsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YiwgMHg4NSwgMHgyMiwgMHg1ZiwKLQkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA0LCAweDdlLCAweDg5LCAweDAxLCAweDAwLAotCTB4NTEsIDB4ODUsIDB4YTYsIDB4NWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmIsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgwNSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDU4LCAweDg1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MjYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2OSwgMHg4NSwgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDZhLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDY5LCAweDg1LCAweDIyLCAweDIwLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjYsIDB4ODUsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5NSwgMHgwMCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweGMyLCAweDk3LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDZkLCAweDg1LCAweDIxLCAweDA0LAotCTB4ODAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4ODUsIDB4MDAsIDB4NDAsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCi0JMHhhMSwgMHg4OCwgMHgwMCwgMHg0YiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5YywgMHg4NSwgMHgwMCwgMHg0MywKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweDg1LCAweDAwLCAweGZiLCAweDIyLCAweGIwLCAweDAwLCAweDAwLAotCTB4YTEsIDB4ODgsIDB4MDAsIDB4NDEsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NGUsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MSwgMHg4NSwgMHgwMCwgMHg1YSwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDc2LCAweDg1LCAweDAwLCAweDQ3LCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGExLCAweDg4LCAweDAwLCAweDUzLAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NTYsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MGEsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDAwLCAweDAwLCAweDExLCAweDhhLCAweGU0LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweGYyLAotCTB4OGEsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg2OSwgMHg4OSwgMHhhMCwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg4NCwgMHg4NSwgMHhhMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgzLCAweDg1LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NjksIDB4ODksIDB4MDAsIDB4NTMsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NTQsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZCwgMHg4NSwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDg3LCAweDg1LCAweGEyLCAweDBhLCAweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDVkLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHg4NSwgMHhhMCwgMHg5MSwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDY5LCAweDg5LCAweDAwLCAweDVlLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg4NSwgMHgyMCwgMHg5MSwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDY5LCAweDg5LCAweDAwLCAweDU0LCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MGEsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzZCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDk5LCAweDAwLCAweGYyLCAweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjksIDB4ODksIDB4YTAsIDB4MGEsIDB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2OSwgMHg4OSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YTEsIDB4ODgsIDB4YTAsIDB4NDIsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHhhMSwgMHg4OCwgMHgwMCwgMHg1NCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIzLCAweDQwLAotCTB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4YWEsIDB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwOSwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg4NSwgMHgyMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDBhLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg1YywKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweGMwLCAweDg1LCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4YmIsIDB4ODUsIDB4YTIsIDB4NTQsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YjMsIDB4ODUsIDB4MjIsIDB4NTUsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGFhLCAweDg1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDUzLAotCTB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDBjLCAweGJjLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4YmIsIDB4ODUsIDB4MjIsIDB4NDMsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsCi0JMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHhhYSwgMHg4NSwgMHhhMiwgMHg0MywgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDdjLCAweDk2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGJjLCAweDg1LCAweDQ2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmYsIDB4ODUsIDB4YTAsIDB4ZjAsIDB4MzAsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHhiMSwgMHg4NSwgMHgxZSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg0MSwKLQkweDMxLCAweGMzLCAweDAxLCAweDAwLCAweDc5LCAweDk0LCAweDAwLCAweDQwLCAweDI1LCAweDMwLCAweDAxLCAweDAwLAotCTB4YzQsIDB4ODUsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5NSwgMHgwMCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDE4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDBjLCAweGUwLCAweDk5LCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsCi0JMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhjYywgMHg4NSwgMHgzMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4YTEsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODUsIDB4MjIsIDB4NDYsIDB4MjMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHhkYywgMHg4NSwgMHgyMiwgMHg0MCwKLQkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4ZGUsIDB4ODUsIDB4MjIsIDB4NDEsIDB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg4NSwgMHgyMiwgMHg0MiwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAotCTB4MDksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4ODUsIDB4NjYsIDB4MWIsIDB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg0MSwKLQkweDQxLCAweGMzLCAweDAxLCAweDAwLCAweDEzLCAweDg2LCAweDIzLCAweDkyLCAweDE1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MTMsIDB4ODYsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTksIDB4ODYsIDB4MjIsIDB4NGIsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI3LCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDBhLAotCTB4MjQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgxMSwgMHg4NiwgMHgyMiwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGEzLCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDEyLCAweDI0LCAweGNjLCAweDAxLCAweDAwLAotCTB4ZWEsIDB4ODUsIDB4YWEsIDB4NDEsIDB4MjcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4NDksCi0JMHgyNywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDBiLCAweDg2LCAweDI2LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweGY4LCAweDg1LCAweGEyLCAweDQwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4ODYsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDIsCi0JMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgyMSwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDUwLCAweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGZkLCAweDg1LCAweGEyLCAweDQ0LAotCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgyMCwKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODYsIDB4YTgsIDB4NDIsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YTMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4ODUsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwYiwgMHg4NiwgMHgyMiwgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDgsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgyNCwgMHg4NiwgMHgwMCwgMHgxNywKLQkweDEwLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MTksIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjksIDB4OTQsIDB4MDAsIDB4OTIsCi0JMHgyNSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzMSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLAotCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTksIDB4ODYsIDB4MjIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgyNCwgMHg4NiwgMHgwMCwgMHg0MSwgMHgyNywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4NzgsIDB4OTgsIDB4MDAsIDB4MGEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWMsIDB4MGYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEwLCAweDlmLAotCTB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODYsIDB4MjIsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxYywgMHhjYywgMHgwMSwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQxLCAweDNmLCAweGMzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgzOCwgMHg4NiwgMHgyYSwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MmQsIDB4ODYsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHg4NiwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyZCwgMHg4NiwgMHhhMywgMHgwNywKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODYsIDB4YTMsIDB4NDAsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgzMiwgMHg4NiwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4MGUsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzYsIDB4ODYsIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDAzLCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMSwgMHgyZCwgMHg0MCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxOSwgMHg4NywgMHgyMiwgMHgwZiwKLQkweDQyLCAweDA1LCAweDAwLCAweDAwLCAweDRiLCAweDg2LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0NiwgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4NiwgMHgyMiwgMHgwNywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDQyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDIsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTEsCi0JMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDA2LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NTQsIDB4MjksIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDBlLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsCi0JMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzZSwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGFhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAzLAotCTB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGMsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDI0LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZlLCAweDdmLCAweDAwLCAweDA1LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGEyLAotCTB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3OSwgMHg4NiwgMHgyMiwgMHgwMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKLQkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4NjYsIDB4ODYsIDB4YTMsIDB4MDcsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHg2NywgMHg4NiwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAotCTB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLAotCTB4NzMsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzMsIDB4ODYsIDB4MjIsIDB4NDIsCi0JMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTksIDB4ODYsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3MCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODYsIDB4YTgsIDB4NDAsCi0JMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDk5LCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LAotCTB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4NiwgMHhhMywgMHgxMiwKLQkweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDdmLCAweDg2LCAweDYwLCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGQsCi0JMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDk5LCAweDAwLCAweDA4LCAweDk4LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA4LAotCTB4M2UsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODcsIDB4ODYsIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHg4NiwgMHgyMiwgMHgwZCwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDhkLCAweDg2LCAweDIyLCAweDBkLCAweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTIsIDB4ODYsIDB4MDAsIDB4MGQsIDB4MjQsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweGEyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg5NCwgMHg4NiwgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDk5LCAweDg2LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg5NSwgMHg4NiwgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4YjksIDB4ODYsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODYsIDB4YTIsIDB4MGQsCi0JMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4NiwgMHgyMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDMwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YTMsIDB4ODYsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGEwLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDA2LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHgwZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHg4NiwgMHhhMiwgMHg1ZiwKLQkweDBmLCAweDdjLCAweDAwLCAweDAwLCAweDYwLCAweDg2LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODYsIDB4MjMsIDB4MDcsCi0JMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiNSwgMHg4NiwgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDYwLCAweDg2LCAweDAwLCAweDAzLCAweDBjLCAweGIwLCAweDAwLCAweDAwLCAweDYwLCAweDg2LCAweDAwLCAweDBkLAotCTB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MTQsIDB4MGEsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHhmZSwgMHg3ZiwgMHgwMCwgMHgwNSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGE0LCAweDg2LCAweDA2LCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4YTEsIDB4ODYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmEsIDB4ZjIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4NiwgMHgyMiwgMHg0MCwgMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4ZjYsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHhjNSwgMHg4NiwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDQzLCAweGMxLCAweDAxLCAweDAwLCAweGM3LCAweDg2LCAweDIyLCAweDBiLCAweGVkLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YTEsCi0JMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhMSwgMHg4NiwgMHgwNiwgMHgwMCwgMHgwMCwKLQkweDBmLCAweDAwLCAweDAwLCAweGZhLCAweDk0LCAweDg4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ1LAotCTB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMSwgMHg4NiwgMHgyMiwgMHg0NywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDQzLCAweDBlLCAweDUwLCAweDAwLCAweDAwLAotCTB4ZDEsIDB4ODYsIDB4YTAsIDB4NDYsIDB4MGYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNSwgMHg4NiwgMHgyMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDBmLCAweGEyLAotCTB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4ODYsIDB4MDAsIDB4NDAsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDk1LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODYsIDB4YTAsIDB4NDEsCi0JMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGUwLCAweDg2LCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGUwLCAweDg2LCAweGEwLCAweDQzLAotCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODYsIDB4MjAsIDB4NDUsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhlMCwgMHg4NiwgMHhhMCwgMHg0MSwgMHgwZSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDBmLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg5LCAweGMwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4ODYsIDB4YTIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODYsIDB4MjIsIDB4NDgsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5MiwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQ4LCAweDkwLCAweDg4LCAweDAxLCAweDAwLCAweGU3LCAweDg2LCAweDkwLCAweDQ4LAotCTB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKLQkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDQzLCAweDgwLCAweGNjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHg0MiwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhMSwgMHg4NiwgMHgwNiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDk5LCAweDAwLCAweDE3LAotCTB4OTgsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTcsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDE0LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHhlMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMiwgMHg4NywgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKLQkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDEsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGZlLCAweDg2LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHg4NywgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDg1LCAweDg3LCAweDAwLCAweDE3LCAweDEwLCAweGIwLCAweDAwLCAweDAwLAotCTB4MGQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg4NywgMHhhMCwgMHgwNywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwZCwgMHg4NywgMHg5MCwgMHhmMiwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgyYiwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDE3LCAweDg3LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ODUsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjEsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFlLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjYsIDB4ODcsIDB4MjIsIDB4MDcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQyLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGExLAotCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDJiLCAweDg3LCAweDIyLCAweDQwLCAweDMxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTgsCi0JMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDg3LCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NTIsCi0JMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKLQkweDE1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LCAweDIzLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzZiwgMHg4NywgMHhhMywgMHgxMiwgMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDQwLCAweDg3LCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDEyLAotCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTksIDB4MDAsIDB4MDgsIDB4OTgsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDNlLCAweDk2LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQ3LCAweDg3LCAweGE4LCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ODcsIDB4MjIsIDB4MGQsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg0ZCwgMHg4NywgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDUyLCAweDg3LCAweDAwLCAweDBkLCAweDI0LCAweGQwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDIwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAotCTB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NTQsIDB4ODcsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1OSwgMHg4NywgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NTUsIDB4ODcsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDc4LCAweDg3LCAweGEyLCAweDBkLAotCTB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjUsIDB4ODcsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDYzLCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ODcsIDB4YTIsIDB4NWYsCi0JMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzOSwgMHg4NywgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDVmLCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDM5LCAweDg3LCAweDIzLCAweDA3LAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NzUsIDB4ODcsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHgzOSwgMHg4NywgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHg4NywgMHgwMCwgMHgwZCwKLQkweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ODMsIDB4ODcsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDEwLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDgzLCAweDg3LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4NywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHgyYiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4OWYsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg4YywgMHg4NywgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweDI3LCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OGQsIDB4OTgsIDB4MDAsIDB4NDEsIDB4M2YsIDB4NDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDBmLCAweDMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAxLCAweDg0LCAweDAxLCAweDAwLAotCTB4OTgsIDB4ODcsIDB4MjIsIDB4NTAsIDB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDEyLCAweDk1LCAweDAwLCAweDA3LAotCTB4MTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4ODcsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg5ZSwgMHg4NywgMHgyMiwgMHg0MiwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGEyLCAweDg3LCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAwLCAweDAwLCAweGIwLCAweDg3LCAweGEyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwKLQkweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NmEsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMCwgMHg4NywgMHgyMiwgMHgyMCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGFkLCAweDg3LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTUsIDB4MDAsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsCi0JMHhjMiwgMHg5NywgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LCAweDk2LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGExLCAweDg4LCAweGEyLCAweDVmLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDQzLAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4ZSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDkwLCAweDg4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDQzLCAweDhmLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTMsIDB4NDMsIDB4OTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzEsIDB4ODcsIDB4MjIsIDB4NDgsCi0JMHg4ZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGMxLCAweDg3LCAweDFmLCAweGYwLAotCTB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4ODcsIDB4MjMsIDB4NDEsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhMSwgMHg4OCwgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4OCwgMHgwMCwgMHg0OCwKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4ODcsIDB4MjIsIDB4MGEsCi0JMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg5MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGExLCAweDg4LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweDQ1LAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4ODcsIDB4MjIsIDB4ZjAsIDB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhhMywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHhmMywKLQkweDgyLCAweGUwLCAweDAxLCAweDAwLCAweGNjLCAweDg3LCAweGEzLCAweDQxLCAweDJjLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU4LCAweDAxLCAweDAwLCAweGExLCAweDg4LCAweDIwLCAweDRjLAotCTB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4NDEsIDB4OTgsIDB4ZTgsIDB4MDEsIDB4MDAsCi0JMHhhMSwgMHg4OCwgMHgyMCwgMHhmMCwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgyMiwgMHgwYSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAotCTB4ZWQsIDB4ODcsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ODgsIDB4MDAsIDB4NDksCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGRhLCAweDg3LCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDEzLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxYSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHhkYiwgMHg4NywgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4ODcsIDB4OWYsIDB4ODUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4MywgMHgyMiwgMHg0MCwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweDk5LCAweDAxLCAweDAwLCAweGUxLCAweDg3LCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHg4MywgMHgxYSwgMHg1YiwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHhlNywgMHg4NywgMHgyMiwgMHg0NiwKLQkweGYzLCAweDdmLCAweDAwLCAweDAwLCAweGU3LCAweDg3LCAweGEyLCAweDQxLCAweGYzLCAweDdmLCAweDAwLCAweDAwLAotCTB4YzYsIDB4ODAsIDB4MDAsIDB4NDIsIDB4OTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4Y2IsCi0JMHg4MSwgMHhjOCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg4NywgMHgyMiwgMHg0MCwgMHhmMiwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDgwLCAweDAwLCAweDZmLCAweDk3LCAweDMzLCAweDAxLCAweDAwLCAweGVjLCAweDg3LCAweDIyLCAweDQwLAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ODAsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4NywgMHg5YywgMHgwZiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4ZjQsIDB4ODcsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGYxLCAweDg3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4OTQsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhmNSwgMHg4NywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDkzLCAweDkzLCAweDAxLCAweDAwLCAweDJlLCAweDk0LCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZSwgMHg5NCwgMHgyMiwgMHgwMiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4M2UsIDB4OTQsIDB4MWEsIDB4MDIsCi0JMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgwYSwgMHg4OCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDBhLCAweDg4LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4OCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MmYsIDB4ODMsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ODgsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAxLCAweDAwLCAweDJmLCAweDgzLCAweDAwLCAweDQwLAotCTB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsIDB4NTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NiwgMHg5NSwgMHgyZiwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MCwKLQkweGU3LCAweDZkLCAweDAwLCAweDAwLCAweGI4LCAweDk0LCAweDI5LCAweDQxLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZWYsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHgwYywgMHg1NSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDI5LCAweDAwLCAweDAwLCAweDQwLCAweDBkLCAweDk4LCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAotCTB4MTIsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwNywKLQkweDE2LCAweDg4LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDEwLCAweDM0LCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MzQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODgsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4OCwgMHg2MCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKLQkweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDJiLCAweDg4LCAweDA1LCAweGMyLCAweDI0LCAweDMwLCAweDAwLCAweDAwLAotCTB4NTgsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4OCwgMHg3MCwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDBjLCAweDgyLCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQxLAotCTB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgzYSwgMHg4OCwgMHhhMCwgMHg0OCwKLQkweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MWEsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MzQsIDB4ODgsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDFhLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDMxLCAweDg4LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4OCwgMHgwMCwgMHhmOCwKLQkweDE4LCAweDMwLCAweDAxLCAweDAwLCAweDM1LCAweDg4LCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsIDB4MzQsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHgxMSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDFhLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxYSwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNlLCAweDg4LCAweGE4LCAweDA5LCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MjMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgzNSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDRmLCAweDg4LCAweDIyLCAweDQxLCAweDBkLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MGYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ODgsIDB4YTAsIDB4YWEsIDB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDEyLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDEzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODgsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwOSwgMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDFmLCAweDg4LCAweDgzLCAweDQxLCAweDE3LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MWIsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHg1YSwgMHg4OCwgMHgyMywgMHg0MCwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDM1LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDFhLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4NTcsIDB4ODgsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDU0LCAweDg4LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHg4OCwgMHgwMCwgMHhmOCwgMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4OCwgMHhhMiwgMHg0MSwKLQkweDIzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGMwLCAweDAxLCAweDAwLAotCTB4NWQsIDB4ODgsIDB4YTAsIDB4YWEsIDB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyMCwgMHgwNywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU2LCAweDk1LCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGMsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgwYywKLQkweDdlLCAweDg5LCAweDAxLCAweDAwLCAweDc5LCAweDg4LCAweDI2LCAweDU0LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4NmMsIDB4ODgsIDB4ODcsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwYywgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDBmLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4OTksIDB4MDEsIDB4MDAsIDB4NmMsIDB4ODgsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1NCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg4OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDg4LCAweDIyLCAweDQ2LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MmEsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MGMsCi0JMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBkLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg2ZCwgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3OSwgMHg4OCwgMHgyMiwgMHg0OSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NTQsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg3OSwgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg5NCwgMHgyZiwgMHg1NSwKLQkweGYxLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MmYsIDB4ODMsIDB4YTIsIDB4NDEsIDB4ZTUsIDB4NTEsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MSwgMHg4OCwgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDg0LCAweDg4LCAweGEyLCAweDkzLCAweDU3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4NTcsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YWIsIDB4MjcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHg4MywgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyZiwgMHg4MywgMHgyMiwgMHg1MSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDJmLCAweDgzLCAweGEyLCAweDQxLCAweDFkLCAweDUzLCAweDAwLCAweDAwLAotCTB4NTAsIDB4NDYsIDB4MDAsIDB4NDAsIDB4MWQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweDkwLCAweDg4LCAweDIyLCAweDQwLAotCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwNCwgMHgwMCwgMHg0MSwgMHhiNSwgMHg1MywgMHgwMSwgMHgwMCwgMHgyZiwgMHg4MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNiwgMHgyMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDU1LCAweDgyLCAweDAwLCAweDQwLCAweGI1LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsCi0JMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDBhLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRhLAotCTB4YjQsIDB4ZjcsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKLQkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4ZjIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDIsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDA4LCAweGIwLCAweDAxLCAweDAwLCAweGFiLCAweDg4LCAweDIyLCAweDUwLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwNCwKLQkweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQ4LCAweDA5LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4NTcsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweGIxLCAweDg4LCAweDAwLCAweDRiLAotCTB4MTAsIDB4YzksIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OGIsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OGMsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OGMsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1MiwgMHg4YywgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg4YywgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDUyLCAweDhjLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDk5LCAweDhjLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZSwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRjLCAweDhjLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDk1LCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDk1LCAweDhkLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiNSwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGQsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4ZCwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDBjLCAweDhlLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4ZSwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFmLCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjEsIDB4OGUsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyMSwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMSwgMHg4ZSwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyYywgMHg4ZSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDNlLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDJkLCAweDhlLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2UsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDhlLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDM0LCAweDhlLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OGQsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MywgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDkzLCAweDhkLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDIsIDB4OGUsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OGUsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4ZSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0YiwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1OCwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZSwgMHg4ZSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNjLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4M2IsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4YywgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNiLCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGUsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDkzLCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMyLCAweDhlLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzYiwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjIsCi0JMHgwZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA3LCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4YSwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwNCwKLQkweDhhLCAweDE0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDRlLCAweDA5LCAweDZjLCAweDAwLCAweDAwLAotCTB4MmEsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgyMCwgMHg0NywgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4OTYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OTYsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3YSwgMHg4OSwgMHgwMCwgMHg0YiwKLQkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGY2LCAweDhlLCAweDAwLCAweDQ5LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OGYsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4ZiwgMHgwMCwgMHg0MiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NmEsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHg4ZiwgMHgwMCwgMHg0YSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDcxLCAweDhmLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDhmLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0MSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4M2EsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDNhLCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzYSwgMHg4ZiwgMHgwMCwgMHg0OSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgwMCwgMHg0YSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNhLCAweDhmLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4M2EsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NGQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0NSwgMHg5MCwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDRiLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OTAsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDUzLCAweDkwLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZhLCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDcsIDB4OGYsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2NCwgMHg4ZiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRjLCAweDhmLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4ZiwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ODEsIDB4OTAsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4OTAsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGM2LCAweDhiLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MSwgMHg5MCwgMHgwMCwgMHg0YiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4OGYsIDB4MDAsIDB4NDEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhYywgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDhmLCAweDkwLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4OTAsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhYywgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDhmLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGJiLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4YmIsIDB4OTAsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MSwgMHgwMCwgMHg0MCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDRlLCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDAsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTAsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDRlLCAweDkxLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDU3LCAweDkxLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ODcsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTEsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTAsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MCwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQ1LCAweDkwLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4OTAsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YWIsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OWQsIDB4OTAsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4ZSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDhlLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGFiLCAweDkwLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDlkLCAweDkwLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4OGUsIDB4OTAsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGUsIDB4OTAsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg5MCwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5MSwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5MSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDVhLCAweDkxLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1YSwgMHg5MSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5MSwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NWEsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVhLCAweDkxLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NywgMHg5MSwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDdhLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDk2LCAweDkyLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTIsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDk2LCAweDkyLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4YmYsIDB4OTIsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg5MiwgMHgwMCwgMHg0YSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiZiwgMHg5MiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGJkLCAweDkyLCAweDAwLCAweDRhLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2NywgMHg5MSwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NCwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDRiLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTEsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDc0LCAweDkxLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDc0LCAweDkxLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTEsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3NCwgMHg5MSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OTEsIDB4MDAsIDB4NGMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHg5MCwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDUzLCAweDkwLCAweDAwLCAweDRjLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3ZCwgMHg5MywgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTMsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDkzLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTMsIDB4MDAsIDB4NGIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4OTMsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTMsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5MywgMHgwMCwgMHg0YywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MywgMHg5MCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDBmLCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg1MywgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OTMsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDBmLCAweDkzLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDE2LCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDdhLCAweDkwLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2ZSwgMHg5MywgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTYsIDB4OTMsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZkLCAweDkyLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmQsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTAsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQ0LCAweDkzLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0NCwgMHg5MywgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDcsIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YSwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NjcsIDB4OTMsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDZhLCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDcsIDB4OGYsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2NywgMHg5MywgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHg5MywgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5MCwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NmUsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg5MywgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDdhLCAweDkwLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTMsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDkzLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc3LCAweDkzLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHg5MiwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4OTMsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZkLCAweDkyLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDcxLCAweDhmLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDcxLCAweDhmLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDYyLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDJlLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODcsIDB4MDAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOSwgMHg5NywgMHgwMCwgMHgzYSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MWYsIDB4MDAsIDB4MGYsCi0JMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDhiLCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg4YiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZDUsIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4NSwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGQ5LCAweDhiLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsCi0JMHgxYSwgMHg4NSwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKLQkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDUsIDB4MDAsIDB4MmUsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODcsIDB4MDAsIDB4MDQsCi0JMHhlNiwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHgwNiwKLQkweDA3LCAweDQwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDcsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4MmUsIDB4NWMsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwKLQkweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0YiwKLQkweDk0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDk1LCAweGYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmUsIDB4MzQsCi0JMHg5NywgMHg4NCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlNCwgMHhlNSwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDAxLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAotCTB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4YTcsIDB4ODcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDQzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDA1LCAweDhjLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgyZSwgMHg0MCwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZCwgMHg4YywgMHgyMCwgMHg0YiwKLQkweDk0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MGEsIDB4OGMsIDB4MDAsIDB4NDEsIDB4OTUsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4YywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLAotCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4YTEsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxYiwgMHg4YywgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZSwgMHg4YywgMHhhMiwgMHg0YywKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDFmLCAweDhjLCAweDAwLCAweDRjLCAweGZkLCAweDkzLCAweDAwLCAweDAwLAotCTB4MjAsIDB4OGMsIDB4MjAsIDB4ZjAsIDB4NTYsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg1NiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhkOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MywKLQkweDgxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OGMsIDB4YTgsIDB4NDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0NiwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4NjgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzQsIDB4OGMsIDB4YTgsIDB4NDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OGMsIDB4MjIsIDB4NDMsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDhjLCAweDIyLCAweDQ0LCAweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg2OCwgMHgwMSwgMHgyMCwgMHhhMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDQzLCAweDhjLCAweDIzLCAweDBiLCAweGU1LCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAxLCAweDAwLCAweDQzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4YywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NWMsIDB4MDAsIDB4MmUsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYyLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1NSwgMHg4YywgMHhhMiwgMHg0OSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4NTksIDB4OGMsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MmYsIDB4NDksCi0JMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1OSwgMHg4YywgMHhhMiwgMHhmMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OGMsIDB4YTIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4YywgMHgwMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDJmLCAweDQ2LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAotCTB4NjAsIDB4OGMsIDB4YTIsIDB4ZjIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDRlLCAweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDM5LCAweDAwLCAweDQwLAotCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MDYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDBjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCi0JMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywgMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDE0LCAweGY0LCAweDAxLCAweDAwLCAweDkwLCAweDhjLCAweDI2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NzYsIDB4OGMsIDB4MjIsIDB4MGEsIDB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHgxMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MTUsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDc1LCAweDhjLCAweGEwLCAweDQzLAotCTB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2YiwgMHg4YywgMHgwMCwgMHg0MSwgMHgxNSwgMHhkMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg4YywgMHgyMiwgMHgwYSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA4LCAweDEyLCAweDZjLCAweDAwLCAweDAwLAotCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDE1LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4YywgMHgyMiwgMHg0MSwKLQkweDE1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDExLCAweGMwLCAweDAxLCAweDAwLAotCTB4ODMsIDB4OGMsIDB4YTAsIDB4NDMsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwNiwgMHgxMCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNkLCAweDQzLCAweDExLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5NywgMHgwMCwgMHg0NywKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MmIsIDB4OTQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDhjLCAweDhjLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2YsIDB4OGMsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1MSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjMsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDExLCAweDAwLCAweDQwLCAweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ4LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OWQsIDB4OGMsIDB4MDAsIDB4NDgsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDJlLCAweDQxLCAweGY1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGE0LCAweDhjLCAweDIyLCAweDQ1LCAweDIzLCAweDdjLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweGYwLAotCTB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHhmMCwKLQkweDhjLCAweDZjLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MzUsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MmQsIDB4ZjMsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDU4LCAweDAwLCAweDNlLCAweDQzLCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweGFiLCAweDhjLCAweDIyLCAweDQ4LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwYSwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyYSwgMHg0YSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDAsIDB4MjAsIDB4MWIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAotCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YjksIDB4OGMsIDB4MjMsIDB4MDEsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDRjLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MjAsIDB4NDEsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDk4LCAweDAwLCAweGYwLCAweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGMyLCAweDhjLCAweGEyLCAweDQ0LAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzAsIDB4OGMsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhiNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgzYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlYSwgMHg4YywgMHhhMiwgMHgwOCwKLQkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweGMyLCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZWEsIDB4OGMsIDB4YTIsIDB4MDgsCi0JMHgzYywgMHgzMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU0LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDAwLCAweDIwLCAweDAxLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4OGYsIDB4OTUsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OGMsIDB4MjIsIDB4NGEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjZSwgMHg4YywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDhmLCAweDk1LCAweDAwLCAweGYzLAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDMsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4ODUsIDB4MTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4ZjAsIDB4OGMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZGMsIDB4OGMsIDB4MDAsIDB4NDksIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OGMsIDB4MjIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHgzYiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGU1LCAweDhjLCAweGEyLCAweDA4LCAweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDVmLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhiOSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlNSwgMHg4YywgMHhhMiwgMHgwOCwKLQkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MmQsIDB4MTAsCi0JMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDJkLCAweGYyLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0NiwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDJkLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4NjgsIDB4ZjIsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDM3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MzYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4NDAsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDgxLCAweGQwLCAweDAxLCAweDAwLCAweDEyLCAweDk3LCAweDAwLCAweDQwLCAweGU0LCAweDMxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZjYsIDB4OGMsIDB4YTgsIDB4NDAsCi0JMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDhkLCAweDgyLCAweDQxLAotCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZmUsIDB4OGMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwYywgMHg4ZCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4ZCwgMHhhMywgMHgwMSwKLQkweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDA5LCAweDhkLCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OGQsIDB4MjAsIDB4MDIsCi0JMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDhkLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDBlLCAweDhkLCAweGEzLCAweDAxLAotCTB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGYsIDB4OGQsIDB4MDAsIDB4MDYsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwKLQkweDE2LCAweDk0LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDE2LCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4M2UsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE0LCAweDhkLCAweGE4LCAweDEzLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4NTEsIDB4OGQsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg0NCwgMHgwMCwgMHgyZCwgMHgwMiwgMHgwYywgMHhkMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg4ZCwgMHhhMiwgMHgwMiwKLQkweDAyLCAweDUwLCAweDAwLCAweDAwLCAweDIyLCAweDhkLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjEsIDB4OGQsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDFkLCAweDhkLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMCwgMHgyZCwgMHg1YywKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDQ4LCAweDAwLCAweDJkLCAweGYwLCAweDM4LCAweGIwLCAweDAxLCAweDAwLAotCTB4NGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmYsIDB4ZjIsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzZSwgMHg4ZCwgMHgyMiwgMHgwMSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGE0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMwLCAweDhkLCAweDIyLCAweDQ2LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyZiwgMHg4ZCwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MmMsIDB4OGQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDM4LCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHhlMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDRhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDQsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzksIDB4OGQsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHgzZSwgMHg4ZCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLQkweDM4LCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NGMsIDB4OGQsIDB4MjIsIDB4MDYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg4ZCwgMHhhMiwgMHgwMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDhmLCAweDBkLAotCTB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg1YywgMHhlMSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwKLQkweDZhLCAweDA2LCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGY4LCAweDEwLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg4YywgMHgwMCwgMHhhMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweGZhLCAweDhjLCAweDAwLCAweDAyLAotCTB4MzYsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHgwMCwgMHgyMCwgMHgwMSwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NTgsIDB4OGQsIDB4MDAsIDB4NWYsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDIsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwMiwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDM3LCAweDAwLCAweDJkLCAweDQ2LCAweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLAotCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NTcsIDB4OGQsIDB4YTAsIDB4NDMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4NWUsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDViLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NSwgMHg4ZCwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDYwLCAweDAxLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg4ZCwgMHg5MCwgMHhmMiwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MDAsIDB4YTYsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgyYSwgMHg5NCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg4ZCwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweGQwLCAweDAwLCAweDFlLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDcyLCAweDhkLCAweDI4LCAweDQwLAotCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4OGQsIDB4MjIsIDB4NDgsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg3NSwgMHg4ZCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDhkLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NzIsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDAsCi0JMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg3ZCwgMHg4ZCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDNiLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDQ4LAotCTB4M2IsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhjMywgMHg5NCwgMHgwMCwgMHhmOCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YSwgMHg4ZCwgMHhhMiwgMHg0MSwKLQkweDNiLCAweDUwLCAweDAwLCAweDAwLCAweDgxLCAweDhkLCAweDAwLCAweDQ5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MWUsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4MSwgMHg4ZCwgMHgwMCwgMHg0OSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFkLCAweDQ3LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDg0LCAweDhkLCAweDIyLCAweDVmLAotCTB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhhNywgMHg4OCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YiwgMHg4ZCwgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4OGIsIDB4OGQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDg4LCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4OGQsIDB4NDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywgMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4ZCwgMHg4NSwgMHhjYSwKLQkweDk0LCAweDMwLCAweDAwLCAweDAwLCAweDg3LCAweDk4LCAweDE4LCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAotCTB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsIDB4MWUsIDB4OGMsIDB4MDEsIDB4MDAsIDB4YjQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgxOCwgMHgwMCwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQ3LCAweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MjIsIDB4NDcsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhiOSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5OCwgMHg4ZCwgMHhhMiwgMHgwOCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTIsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDhiLCAweDAwLCAweDJkLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLCAweDllLCAweDhkLCAweDkwLCAweDRjLAotCTB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHg4ZCwgMHgyMiwgMHg0MywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDQ1LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLAotCTB4NjgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4ZjIsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHg2MiwgMHg0MCwgMHg3ZSwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4OGQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OGQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDhkLCAweDQ1LCAweDQ4LAotCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhiNCwgMHg4ZCwgMHgyOCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4ZCwgMHgyMiwgMHg0OCwKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDFkLCAweDA4LCAweDAwLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MWQsIDB4NDcsCi0JMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDM1LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4YmEsIDB4OGQsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCi0JMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwgMHhjOCwgMHg4ZCwgMHhhMiwgMHg0MSwgMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDhiLCAweDIyLCAweDQ0LCAweDgzLCAweDcwLCAweDAwLCAweDAwLCAweGE4LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywKLQkweGU3LCAweGUxLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDFmLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAotCTB4ODcsIDB4OTgsIDB4MDAsIDB4NDgsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTcsIDB4ODgsIDB4MjMsIDB4NDEsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHhhNywgMHg4OCwgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDM0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLAotCTB4ZTYsIDB4NmQsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDAsIDB4YmUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5NywgMHgwMCwgMHg0NywgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YTUsIDB4OGMsIDB4YTIsIDB4NDAsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZGIsIDB4OGQsIDB4MjIsIDB4NDcsCi0JMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGE1LCAweDhjLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQ2LAotCTB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OGUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZCwgMHg1ZCwKLQkweDA1LCAweGI0LCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDg2LCAweGRjLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4OGMsIDB4OTMsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGVmLCAweDhkLCAweGEyLCAweDUwLCAweDhmLCAweDUwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg3ZSwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4OGQsIDB4YTAsIDB4NDMsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyMCwgMHg0NywgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDIyLCAweDQ3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQ3LAotCTB4MGMsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OGYsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHg4ZSwgMHgyMiwgMHg0NywgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywKLQkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDA5LCAweDhlLCAweDFmLCAweGYwLCAweDI0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMiwgMHg4ZSwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4ZSwgMHg0MiwgMHg0MCwKLQkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4NWQsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OGUsIDB4MjMsIDB4NDEsCi0JMHgwZCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkZCwgMHg4ZCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDg3LCAweDk4LCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweGE3LCAweDg4LCAweDAwLCAweDQ4LAotCTB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MjIsIDB4NDAsIDB4OGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGE2LCAweDAwLCAweDJkLCAweDQ5LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGYyLAotCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgyLCAweGY4LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4MWEsIDB4OGUsIDB4YTAsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgxYSwgMHg4ZSwgMHhhMywgMHg0MCwgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDFjLCAweDhlLCAweDIwLCAweDRjLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg4NiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MiwKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDksIDB4OTcsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHg1YywKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4ZjAsCi0JMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MjIsIDB4NDYsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwKLQkweDk2LCAweGNjLCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTcsIDB4MDAsIDB4NDYsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGRkLCAweDhiLCAweDIyLCAweDQ5LCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg4YiwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0YSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDk3LCAweDAwLCAweDQ3LCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmIsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGRkLCAweDhiLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ2LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0OSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NjIsIDB4ZjIsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NDYsIDB4OGUsIDB4OTAsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHg2MiwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGE0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGRkLCAweDhiLCAweDIyLCAweDQwLAotCTB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDEsIDB4ZTUsIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHgwOSwgMHg5NywgMHgwMCwgMHg0ZCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4ZSwgMHg4MCwgMHhmMywKLQkweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGU3LCAweDgxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhkZCwgMHg4YiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYzLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwKLQkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweGI5LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NmUsIDB4OGUsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDUxLCAweDgzLCAweGQwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODQsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHg2NiwgMHg4ZSwgMHg5ZiwgMHg0MiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MiwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NjgsIDB4OGUsIDB4MzcsIDB4NWMsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDY5LCAweDhlLCAweGE4LCAweDRiLCAweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmIsIDB4OGUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhlZCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4YWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZCwgMHhmMywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYzLCAweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDU4LCAweDAwLCAweDNlLCAweDQzLAotCTB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyMCwgMHgwMCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgyYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5NywgMHgwMCwgMHg0MCwgMHgwZCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDE2LCAweGMwLCAweDAxLCAweDAwLCAweDdmLCAweDhlLCAweGEwLCAweDE0LAotCTB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwZSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKLQkweGY4LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweDE0LCAweGY4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4NTAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OGUsIDB4MjIsIDB4NGEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0MywgMHg4NiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDMwLCAweDAwLCAweDBiLCAweDE2LCAweGM4LCAweDAxLCAweDAwLCAweDg4LCAweDhlLCAweGE0LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg2ZSwgMHg0MywgMHg4NiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5NywgMHgwMCwgMHgzMCwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDhjLCAweDhlLCAweGEwLCAweDQxLCAweDE3LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTMsIDB4OGUsIDB4MjIsIDB4NGEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDAwLCAweDJkLCAweGFiLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTIsIDB4OGUsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4NDEsIDB4MzEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5OSwgMHg4ZSwgMHgwNiwgMHgwYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGEwLCAweDAwLCAweDIwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDA5LCAweDQ2LAotCTB4MTksIDB4MTAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHg5OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHg1MCwKLQkweDE3LCAweGYwLCAweDAxLCAweDAwLCAweDllLCAweDhlLCAweDkwLCAweDRjLCAweDE2LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OGUsIDB4MjIsIDB4NDMsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDE3LCAweGE0LCAweDAxLCAweDAwLCAweDY4LCAweDAxLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MmUsIDB4ZjIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHg2MiwgMHg0MCwgMHg3ZSwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywKLQkweDgxLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4OGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OGUsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGFlLCAweDhlLCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4NTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OGUsIDB4YTgsIDB4NDAsCi0JMHgwNSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgzNSwgMHgwMCwgMHgxZCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweGI1LCAweDhlLCAweGEwLCAweDQzLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMywKLQkweDllLCAweDA2LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGU3LCAweDkxLCAweDAxLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDVmLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5NSwgMHgwMCwgMHhmMywKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweDVkLCAweDhlLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4Y2UsIDB4OGMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg5NSwgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDk3LCAweDhjLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGNlLCAweDhjLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDkwLCAweDg4LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweGY0LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4OGMsIDB4MjIsIDB4MDYsCi0JMHg5MCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDVjLCAweDAwLCAweDNkLCAweDQzLCAweDEzLCAweGUwLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweGYwLAotCTB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgyYSwgMHg1MCwKLQkweGU3LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweDQxLCAweDEzLCAweGMwLCAweDAxLCAweDAwLAotCTB4ZDUsIDB4OGUsIDB4YTAsIDB4NDMsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OSwgMHg5MywgMHgwMCwgMHgxMCwgMHg4NiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQ3LCAweDhlLCAweDQyLCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHhjOCwgMHg4YywgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKLQkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDJkLCAweDEwLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0YSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDM1LCAweDAwLCAweDJmLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDZiLCAweGZiLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGUsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzNSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDEyLCAweGM4LCAweDAxLCAweDAwLAotCTB4ZTcsIDB4OGUsIDB4YTAsIDB4NDMsIDB4MTMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDhjLCAweDkzLCAweDAwLCAweDRhLCAweGYwLCAweDMxLCAweDAxLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4OGUsIDB4NDIsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwKLQkweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjMsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NjMsIDB4ZjMsCi0JMHg4MiwgMHhjYywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHg0MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGJmLCAweDhkLCAweDIyLCAweDQxLCAweDllLCAweDA2LCAweDAwLCAweDAwLCAweDM1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4ZCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjcsIDB4OGUsIDB4NjUsIDB4ZjIsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsCi0JMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHhmYywgMHg4ZSwgMHgyMiwgMHg0NywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDI3LCAweDgzLCAweDc1LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGY2LCAweDhlLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3NSwgMHg0MiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGZlLCAweDhlLCAweGE4LCAweGIxLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAotCTB4YTMsIDB4OTYsIDB4MDAsIDB4MTAsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGMwLCAweGE4LCAweDNkLCAweDQ2LCAweDBkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4OGYsIDB4MjIsIDB4NDAsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMiwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4ZiwgMHgwMCwgMHg1MCwKLQkweDQzLCAweGMxLCAweDAwLCAweDAwLCAweDE0LCAweDhmLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjIsIDB4NGIsIDB4MTIsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDk0LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDRhLAotCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1ZSwgMHgwMSwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHgwNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OGYsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDA5LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MWEsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDFlLCAweDhmLCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDNmLCAweDAwLCAweDAwLCAweGYzLAotCTB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3NSwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjcsIDB4OGYsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDk3LCAweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk2LAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OGYsIDB4MjAsIDB4MDksIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHg4ZiwgMHgxZiwgMHgwOSwgMHg5NiwgMHgyNCwgMHgwMCwgMHgwMCwgMHgyNywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDI4LCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDksIDB4OTcsIDB4MDAsIDB4NTcsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM0LCAweDhmLCAweDIyLCAweGYzLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4NDIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1MiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQyLCAweDE5LCAweDgwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4M2EsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg1MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgyMiwgMHg0MCwgMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgyNCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4NDIsIDB4OGYsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4NTIsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI1LCAweDk4LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4NGUsIDB4OGYsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OGYsIDB4YTIsIDB4MTYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgyMywgMHgwMCwgMHhhNiwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1MSwgMHg4ZiwgMHg4MywgMHgxZSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDBiLCAweDE2LCAweGRjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4OTcsIDB4MDAsIDB4MDgsCi0JMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg4ZiwgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDc5LCAweDk3LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDk4LCAweDkzLCAweDAwLCAweDQwLAotCTB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTcsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg4ZiwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NWEsIDB4OGYsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZhLCAweDk2LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjEsIDB4OGYsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDY5LCAweDhmLCAweDIyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4M2QsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg4ZiwgMHgwMCwgMHg0MiwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwKLQkweDJiLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsCi0JMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHgwMSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGRjLCAweDhmLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGRjLCAweDhmLCAweDAwLCAweDQ0LAotCTB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDg0LCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ODQsIDB4OGYsIDB4YTIsIDB4MTYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGYsIDB4YTIsIDB4NDIsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGEwLCAweDk4LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLAotCTB4ODksIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4OGYsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweDE1LCAweDk0LCAweDMwLCAweDAxLCAweDAwLAotCTB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA5LCAweDk3LCAweDAwLCAweDNhLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4NywgMHg4ZiwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgzNiwgMHg5NiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDg4LCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzAsIDB4OGYsIDB4MjIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDhmLCAweGEwLCAweDBiLCAweDk5LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQ0LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDAsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDhmLCAweGE4LCAweDAwLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDk4LCAweGM4LCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDBiLCAweDk5LCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NmEsIDB4NTAsIDB4OTksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4MGIsCi0JMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHg2MiwgMHgwMSwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweGYwLAotCTB4MjIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgyMywgMHg4MCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZiwgMHg0MSwKLQkweGU3LCAweGUxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsCi0JMHg5OSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwMCwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDExLAotCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MTEsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgyMCwgMHg0NywgMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg4ZiwgMHgyMywgMHgwYiwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweGU1LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDAzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAotCTB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NTgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGIyLCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweGJlLCAweDhmLCAweDI2LCAweDExLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk5LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDk4LCAweGQwLCAweDAxLCAweDAwLAotCTB4NTgsIDB4OTcsIDB4MDAsIDB4NGMsIDB4MDIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwMywgMHg5OCwgMHgwMSwgMHgwMCwgMHhjOCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDAwLCAweDJmLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDE1LAotCTB4ZjQsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTQsIDB4Y2QsIDB4MDEsIDB4MDAsCi0JMHhjMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDBiLCAweGU1LCAweDZkLCAweDAwLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NTgsIDB4OTcsIDB4MDAsIDB4MDAsCi0JMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4ZiwgMHgyMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGFjLCAweDAwLCAweDJmLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjZSwgMHg4ZiwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMCwgMHgwMCwgMHg5OCwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDYzLCAweDAwLCAweGE2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NjAsIDB4OTcsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkNiwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZDMsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwKLQkweDA1LCAweDEwLCAweDAxLCAweDAwLCAweGQ5LCAweDhmLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGRjLCAweDhmLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRmLAotCTB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDJkLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGUwLCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDIzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAotCTB4YjgsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5MCwgMHhhMiwgMHg0NSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDIwLCAweDBiLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYSwgMHg4ZiwgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OGYsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY2LCAweDhmLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MWYsIDB4OTAsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg5MCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDZkLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU0LCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MWEsIDB4OTAsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAzLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTAsIDB4MjIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDBhLCAweDkwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4OTAsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHg4MywgMHgwMCwgMHg0MCwKLQkweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDZkLCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NDksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhlMSwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNywgMHg5MCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MTksIDB4OTAsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHg4MywgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDkwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjMsIDB4OTAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDI1LCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MmYsIDB4OTAsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMywgMHg5MCwgMHgyMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGUxLCAweDk0LCAweDAwLCAweDQwLCAweDExLCAweDMwLCAweDAxLCAweDAwLAotCTB4MzQsIDB4OTAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHgwYSwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzYSwgMHg5MCwgMHgwMywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzYiwgMHg5MCwgMHgwMCwgMHg0MSwKLQkweDg3LCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MjYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDkwLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDMsIDB4OTAsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHg5NywgMHgwMCwgMHg0ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDE5LCAweDgwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4Y2QsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDRiLCAweDkwLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDRhLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5NywgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTgsIDB4MDAsIDB4ZjAsCi0JMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGNkLCAweDhiLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1NywgMHg5MCwgMHgyMiwgMHg0MCwKLQkweGU3LCAweDZkLCAweDAwLCAweDAwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4NjIsIDB4OTAsIDB4YTIsIDB4NDAsIDB4ZTUsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgyMCwgMHgwYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAwLCAweDIwLCAweDEzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDIwLCAweDA2LAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDIwLCAweDBhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4Y2QsIDB4OGIsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZCwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGVjLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk3LCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzAsIDB4OTAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwKLQkweDk4LCAweDUwLCAweDAwLCAweDAwLCAweDcwLCAweDkwLCAweDIwLCAweDAxLCAweDk4LCAweDZjLCAweDAwLCAweDAwLAotCTB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NDYsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg2ZCwgMHg5MCwgMHhhOCwgMHgwMCwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmYsIDB4MTUsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDAxLAotCTB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhlNiwgMHg4ZiwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAxLCAweDAwLCAweGU2LCAweDhmLCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDI2LCAweDk2LCAweDAwLCAweGYwLAotCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MmUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjMsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGM2LCAweDhiLCAweDAwLCAweDQyLCAweDE5LCAweDgwLCAweDAwLCAweDAwLCAweDE2LCAweDk2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTcsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDhhLCAweDkwLCAweGE4LCAweDQwLCAweDEzLCAweDMwLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4OTAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4ZiwgMHg5MCwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwKLQkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MjYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGFkLCAweDkwLCAweDAwLCAweDA5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAotCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OGIsIDB4ODcsIDB4NDIsIDB4MTksIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgyZiwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwKLQkweGU3LCAweDkxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YWIsIDB4OTAsIDB4MjIsIDB4NDcsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDE3LCAweDk0LCAweDAwLCAweDQwLCAweGU3LCAweDMxLCAweDAxLCAweDAwLCAweGFiLCAweDkwLCAweDIyLCAweDAwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTAsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWYsIDB4OTUsIDB4MDAsIDB4ZjIsCi0JMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGFjLCAweDkwLCAweDAwLCAweDQwLAotCTB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiMiwgMHg5MCwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiMSwgMHg5MCwgMHhhMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YjIsIDB4OTAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg1MSwgMHg5MSwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YmEsIDB4OTAsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGI3LCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4OTEsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGMxLCAweDkwLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGMxLCAweDkwLCAweGEyLCAweDE2LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGQyLCAweDkwLCAweDIyLCAweDQyLCAweDk2LCAweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjgsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGNlLCAweDkwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZDMsIDB4OTAsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQ3LCAweDkwLCAweDY1LCAweGYyLCAweDEyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAotCTB4MTMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTAsIDB4MjIsIDB4NDcsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgyNywgMHg4MywgMHg3NSwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHg5MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4NzUsIDB4MDksIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU0LCAweDkwLCAweGE4LCAweDQwLCAweGUxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksIDB4M2YsIDB4NDIsCi0JMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHg5MCwgMHg2NSwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDNmLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHg5MCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZWUsIDB4OTAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg2MiwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDJmLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ3LAotCTB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwZCwgMHg5MSwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5NiwgMHgwMCwgMHg1ZiwKLQkweDAxLCAweDEwLCAweDAxLCAweDAwLCAweGY0LCAweDkwLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZSwgMHg5MCwgMHhhOCwgMHgwMCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIwLCAweDMxLCAweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDlmLCAweDk1LCAweDAwLCAweDUyLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHg5MCwgMHgyMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OTUsIDB4MDAsIDB4NGIsCi0JMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5MCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDYwLCAweDk3LCAweDAwLCAweDQwLCAweDAzLCAweDMwLCAweDAxLCAweDAwLCAweDE3LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MGMsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0YywgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0ZCwKLQkweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAotCTB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDA3LCAweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LAotCTB4MTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgxOSwgMHg5MSwgMHgzMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwYiwKLQkweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDgxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGIsCi0JMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDEwLCAweDBmLCAweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDkzLCAweDA0LCAweDAwLCAweDVmLAotCTB4OTUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyNywgMHg5MSwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgyMywgMHg5MSwgMHg0NiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI2LCAweDkxLCAweGEyLCAweDQwLCAweDMxLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsCi0JMHgzMSwgMHhkMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTUsIDB4OTQsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDNhLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4M2EsIDB4OTEsIDB4YTIsIDB4MTYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCi0JMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDMyLCAweDkxLCAweDM3LCAweDVjLAotCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHg5MSwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDMzLCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzcsIDB4OTEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDc0LCAweDAwLCAweDIyLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTcsIDB4MDAsIDB4NGEsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNiwgMHg5NiwgMHgwMCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweGMxLCAweDkwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg0ZSwgMHg5MSwgMHgyMiwgMHg0NywgMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDE3LCAweDk0LCAweDAwLCAweDQwLAotCTB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4OTEsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg0OSwgMHg5MSwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDRlLCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHhmMiwgMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTcsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNiwgMHg5NiwgMHgwMCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAotCTB4NTUsIDB4OTEsIDB4ODcsIDB4NDIsIDB4MTksIDB4MTAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsCi0JMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDk3LCAweDAwLCAweDQyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg1YywKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZSwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDAwLCAweDJkLCAweGYwLAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTgsIDB4MDAsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0NSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDksIDB4OTcsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGFlLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDZkLCAweDkxLCAweGEyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OTEsIDB4YTIsIDB4MTYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwOSwgMHg5NywgMHgwMCwgMHg0NywgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwKLQkweDA0LCAweGRjLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4MDAsIDB4YTYsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA3LAotCTB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQxLCAweGU3LCAweDQxLCAweDAxLCAweDAwLAotCTB4Y2QsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGVjLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTMsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MGEsCi0JMHgyYywgMHg1MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDk3LCAweDAwLCAweDA2LAotCTB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OTEsIDB4YTIsIDB4NDgsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg4OCwgMHg5MSwgMHg4NCwgMHg0OCwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDhhLCAweDkxLCAweDAwLCAweDBhLCAweGUwLCAweGMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTMsIDB4MDAsIDB4MDEsCi0JMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDhiLCAweDkxLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDk4LCAweDkxLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAotCTB4NzMsIDB4OTYsIDB4MDAsIDB4NDUsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTEsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDk0LCAweDkxLCAweGE4LCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4MywgMHg5MSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWUsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGE0LCAweDkxLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4OTEsIDB4MjIsIDB4NDQsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDkxLCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiNywgMHg5MSwgMHgyMiwgMHg0YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFmLCAweDkxLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweGIzLCAweDkxLCAweDIyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiNCwgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OGIsIDB4MDAsIDB4MTYsCi0JMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjZCwgMHg5MSwgMHgyMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhiZCwgMHg5MSwgMHhhMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjZSwgMHg5MSwgMHgyMiwgMHg0MCwKLQkweDJkLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDJiLCAweDAwLCAweGE2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4NTgsIDB4OTcsIDB4MDAsIDB4MDgsIDB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg5MSwgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg5NywgMHgwMCwgMHg0MywKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YzcsIDB4OTEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDk3LCAweDAwLCAweDA3LAotCTB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsCi0JMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhkYywgMHg5MSwgMHgyMCwgMHgxNiwgMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZDksIDB4OTEsIDB4YTgsIDB4NDYsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsCi0JMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg5MSwgMHg4NCwgMHg0NSwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweGU3LCAweDkxLCAweDAwLCAweDBhLCAweGUwLCAweGMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MzUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGYwLCAweDkxLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlYywgMHg5MSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTIsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwNSwgMHg5MiwgMHgyMiwgMHg0MCwgMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsCi0JMHgxYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg5MiwgMHgwMCwgMHg1YywgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVmLCAweDFiLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LAotCTB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4OTgsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMCwgMHgwYiwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTMsIDB4NDMsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTEsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDkyLCAweDIzLCAweDBkLCAweDJjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTIsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMywgMHg5MiwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4OTIsIDB4YTgsIDB4NDYsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDQwLAotCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHg0MSwKLQkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTgsIDB4OTIsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDkyLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg5MiwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0ZiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDIyLCAweDkyLCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCi0JMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDM4LCAweDkyLCAweDIyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDI5LCAweDkyLCAweGEyLCAweDE2LAotCTB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MzQsIDB4OTIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmQsIDB4OTIsIDB4YTIsIDB4ZjMsCi0JMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg1LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNlLCAweDQxLAotCTB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MzEsIDB4OTIsIDB4MjIsIDB4NDAsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxMSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDM2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDE2LAotCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4M2IsIDB4OTIsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLAotCTB4NGUsIDB4OTIsIDB4MjIsIDB4NDcsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTAsIDB4OTEsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHg0OCwgMHg5MiwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDQxLCAweDkyLCAweGEyLCAweGYzLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAotCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHg5MiwgMHgyMiwgMHg0MCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDExLCAweDkwLCAweDAxLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwOCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAxLCAweDJkLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDYwLCAweDAxLCAweDJkLCAweGYwLAotCTB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNywgMHg0MCwKLQkweDExLCAweDZjLCAweDAwLCAweDAwLCAweDg0LCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTMsIDB4OTEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTgsIDB4MDAsIDB4NDEsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1NywgMHg5MiwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDU3LCAweDkyLCAweGEyLCAweDE2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDQsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMSwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDJiLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg5MiwgMHgyMywgMHgwZCwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDYzLCAweDkyLCAweGE4LCAweDAwLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDIyLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHg5MiwgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzIsIDB4OTIsIDB4MjIsIDB4NDAsIDB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg1OCwgMHg5NywgMHgwMCwgMHgwMSwgMHg4NCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg5MiwgMHgyMiwgMHg0MCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg0MywgMHg4MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg5MiwgMHhhOCwgMHgxMSwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4OGEsIDB4OTIsIDB4MDAsIDB4NWUsIDB4MTcsIDB4OTAsIDB4MDAsIDB4MDAsIDB4N2UsIDB4OTIsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDg0LCAweGQwLCAweDAxLCAweDAwLCAweDgzLCAweDkyLCAweDIyLCAweDQwLAotCTB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzksIDB4OTcsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHg4YSwgMHg5MiwgMHgyMiwgMHg0MCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDEyLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGExLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODgsIDB4OTIsIDB4YTgsIDB4MTEsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDhiLCAweDkyLCAweGE4LCAweDBhLCAweDAyLCAweDMwLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHg5MiwgMHg5MiwgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDExLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTcsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsCi0JMHhmYSwgMHg5NiwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4OGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwYywgMHg0NywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDI2LCAweDk2LCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAotCTB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4OTEsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDkyLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhhNCwgMHg5MiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YWEsIDB4OTIsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDFhLCAweGQwLCAweDAxLCAweDAwLCAweGIxLCAweDkyLCAweGEyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjUsIDB4OTgsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5MiwgMHgyNywgMHgwOCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJkLCAweDkxLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4OTgsIDB4MDAsIDB4NDEsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsCi0JMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHhiNSwgMHg5MiwgMHgyNywgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDU3LCAweDkyLCAweDAwLCAweDAwLCAweDJhLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OTIsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4M2EsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4YiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGJmLCAweDkyLCAweDAwLCAweDRhLAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjksIDB4OTQsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDliLCAweDk3LCAweDAwLCAweDA2LCAweDA0LCAweDMwLCAweDAxLCAweDAwLCAweGNjLCAweDkyLCAweGEyLCAweDQ0LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDk4LCAweDkzLCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTksIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDMsIDB4OTIsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGNmLCAweDkyLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweDkyLCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAotCTB4NzMsIDB4OTYsIDB4MDAsIDB4NDUsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzUsIDB4OTIsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGQ4LCAweDkyLCAweGE4LCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjNSwgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTYsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGUxLCAweDkyLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNywgMHg5MiwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDgwLCAweDk3LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZWEsIDB4OTIsIDB4MjIsIDB4NDQsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTcsIDB4MDAsIDB4NGYsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTIsIDB4MjIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhmMSwgMHg5MiwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4YzYsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsCi0JMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5MiwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDM2LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY2LCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHgyYSwgMHgxNSwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGM2LCAweDhiLCAweDAwLCAweDE2LCAweGU0LCAweGIxLCAweDAwLCAweDAwLAotCTB4YjgsIDB4OTEsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGNkLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQxLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsIDB4MmIsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjksIDB4OTQsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTEsIDB4MDAsIDB4MTAsCi0JMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDkzLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGIsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg5ZiwgMHg5NSwgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhNiwgMHg5NSwgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MGQsIDB4OTMsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDksIDB4OTcsIDB4MDAsIDB4M2EsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5NywgMHgwMCwgMHg0NSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDYyLCAweDkwLCAweDAwLCAweDQ1LAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlYywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEzLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLAotCTB4OTcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTEsIDB4MDAsIDB4MDEsCi0JMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTMsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyNiwgMHg5MywgMHhhMiwgMHgxNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwKLQkweDA0LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTMsIDB4MzcsIDB4NWMsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDkzLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMywgMHg5MywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGVkLCAweDg3LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NTgsIDB4MDEsIDB4MjAsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MjAsIDB4MTYsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlYywgMHg5NSwgMHgwMCwgMHg0NywgMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEzLCAweDBhLCAweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDk3LCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTEsIDB4MDAsIDB4MDEsIDB4MmMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFlLCAweDk0LCAweDAwLCAweDQ3LCAweDFmLCAweDEwLCAweDAxLCAweDAwLAotCTB4M2QsIDB4OTMsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2QsIDB4OTMsIDB4YTIsIDB4MTYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzOSwgMHg5MywgMHhhMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsIDB4ODksIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NSwgMHgwMCwgMHgxNSwKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweGE2LCAweDk1LCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDA5LCAweDk3LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGVkLCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MjAsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHgwMSwgMHgyMCwgMHgxNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0ZiwKLQkweDJiLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ0LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTQsIDB4MDAsIDB4MTAsCi0JMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHg5MSwgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGFlLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDUyLCAweDkzLCAweGEyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OTMsIDB4YTIsIDB4MTYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDAzLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLAotCTB4NGEsIDB4OTMsIDB4MzcsIDB4NWMsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg5MywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDc3LCAweDdkLCAweDAwLCAweDAwLCAweDRiLCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0ZiwgMHg5MywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgxNywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDhlLCAweGIwLCAweDAxLCAweDAwLCAweGU2LCAweDk1LCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NiwgMHgwMCwgMHg0MSwKLQkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDk3LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTAsIDB4OTEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5MywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OTMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg4MywgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDg0LCAweDhmLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4OTcsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODQsIDB4OGYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg4MywgMHgxZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDRmLCAweDJiLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ1LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHhmMCwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMCwgMHgwMSwKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweGRjLCAweDhmLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NzIsIDB4OTMsIDB4YTIsIDB4NDEsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDc3LCAweDkxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ4LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTUsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMywgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHg5NywgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDkxLCAweDAwLCAweDAxLCAweDJjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGYsCi0JMHgyYiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGY5LCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4OTEsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0NiwKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDYyLCAweDkwLCAweDAwLCAweDQ1LCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MzcsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgzMywgMHhjMywgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGQyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg2LCAweDkzLCAweDg1LCAweDE3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDgsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHg4OCwgMHg5MywgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0YywKLQkweDAzLCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDM0LCAweGMzLCAweDAxLCAweDAwLAotCTB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2IsIDB4OTQsIDB4MDAsIDB4NDEsIDB4ZTEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHg0MywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTUsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHhhNSwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAotCTB4YjAsIDB4MDAsIDB4MmYsIDB4MDEsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4ZjAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweGFjLCAweDAwLCAweDJmLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDAxLAotCTB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YTMsIDB4OTMsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgyZiwgMHg5OCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE1LCAweDkzLCAweDIyLCAweDQ3LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTAsIDB4MDEsIDB4MDAsIDB4Y2UsIDB4OTcsIDB4MDAsIDB4NDcsCi0JMHgxOSwgMHgxMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyZCwgMHg0NCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA1LCAweDk4LCAweDAwLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg5MywgMHhhMiwgMHg0YiwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwZiwgMHg5NCwgMHhhMiwgMHg0YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGJhLCAweDkzLCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAotCTB4YmQsIDB4OTMsIDB4YTIsIDB4MDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4NDYsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiMywgMHg5MywgMHgxZiwgMHgxYywgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGI1LCAweDkzLCAweDIyLCAweGYwLAotCTB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTQsIDB4MWYsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0ZiwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDhhLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MGQsIDB4OTQsIDB4MjAsIDB4NDIsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YjksIDB4OTMsIDB4MjIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDU4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGJjLCAweDkzLCAweDIyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg1YiwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4YzEsIDB4OTMsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTMsIDB4MjMsIDB4ZjAsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGM5LCAweDkzLCAweGEyLCAweGYwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OTQsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwZSwgMHg5NCwgMHhhMiwgMHg0MSwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhjOCwgMHg5MywgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUxLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4OTQsIDB4MWYsIDB4MTIsCi0JMHg4NCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwZSwgMHg5NCwgMHhhMCwgMHgwMSwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGJhLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OTMsIDB4YTIsIDB4NDYsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlOSwgMHg5MywgMHgyMiwgMHhmMCwKLQkweDE0LCAweDMwLCAweDAwLCAweDAwLCAweGQ1LCAweDkzLCAweDIwLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZTYsIDB4OTMsIDB4MDMsIDB4MWUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OTMsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGRhLCAweDkzLCAweDIyLCAweDBhLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OTMsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhkOSwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU2LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZGMsIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4ODIsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OTMsIDB4MjAsIDB4OTEsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhlMiwgMHg5MywgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDI3LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4ZTUsIDB4OTMsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGU4LCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDQwLAotCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4OCwgMHgwMCwgMHgyZCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMiwgMHg5MywgMHhhMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGVmLCAweDkzLCAweGEyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLAotCTB4ZWYsIDB4OTMsIDB4YTIsIDB4ZjIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGYxLCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhlZiwgMHg5MywgMHhhMCwgMHg5MSwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhlZCwgMHg5MywgMHgyMiwgMHg0MywKLQkweDNkLCAweDdjLCAweDAwLCAweDAwLCAweGY2LCAweDkzLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk0LCAweGEyLCAweGYwLCAweDE0LCAweDMwLCAweDAwLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmQsIDB4OTMsIDB4YTIsIDB4ZjIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGVmLCAweDkzLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZWQsIDB4OTMsIDB4MjAsIDB4OTEsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWYsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NCwgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAzLCAweDk0LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHg5NCwgMHgyMiwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhkZCwgMHg5MywgMHhhMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDA4LCAweDk0LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTUsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTYsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NCwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4OTQsIDB4MDAsIDB4NDMsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMSwgMHg5NCwgMHgwMCwgMHg0MSwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHg5NCwgMHgwMCwgMHg0MiwKLQkweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDExLCAweDk0LCAweDAwLCAweDQ0LCAweDk1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTEsIDB4OTQsIDB4MDAsIDB4NGMsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0YSwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDE2LCAweDk0LCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGIsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKLQkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDJkLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4OTQsIDB4YTIsIDB4ZjMsCi0JMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDJkLCAweDAwLCAweDJhLCAweDQxLCAweGU3LCAweGQxLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDNkLCAweDQxLAotCTB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDAsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg5NCwgMHgyMiwgMHg1YSwgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDIzLCAweDk0LCAweDAwLCAweDVhLCAweDAxLCAweDgwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsCi0JMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NCwgMHhhMCwgMHhhNSwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDAsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhhNSwKLQkweDg1LCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLAotCTB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3OCwgMHg5OCwgMHgwMCwgMHhmMCwgMHg4YywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDVmLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDNiLCAweDk0LCAweDIyLCAweDQwLAotCTB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA3LCAweDk4LCAweDZjLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsCi0JMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzOCwgMHg5NCwgMHhhMiwgMHg0YiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDM5LCAweDk0LCAweDIyLCAweGYwLCAweDE4LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTUsIDB4MDAsIDB4MDcsIDB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgyZiwgMHg4MywgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzZCwgMHg5NCwgMHgyMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGE1LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4MmYsIDB4ODMsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NWYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsIDB4MGYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywKLQkweDk2LCAweDZjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBjLCAweDk2LCAweGY0LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2QsIDB4OTUsIDB4MDAsIDB4MDcsCi0JMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyZiwgMHg4MywgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDVmLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKLQkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDk2LCAweGY0LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDcsIDB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGMsCi0JMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywgMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDNkLCAweDk1LCAweDAwLCAweDA3LCAweDEwLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4OTQsIDB4MzMsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1NywgMHg5NCwgMHhhMSwgMHhhZCwgMHg5NSwgMHgyMCwgMHgwMCwgMHgwMCwgMHg2OSwgMHg5NCwgMHgxMywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEzLCAweDRhLCAweDVhLCAweDgzLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MzksIDB4NDUsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsCi0JMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1ZSwgMHg1ZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDFmLCAweDAwLCAweDAwLCAweDBmLCAweDVlLCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLAotCTB4NWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4NWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKLQkweDQ4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDRhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg0ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxOSwgMHg4NSwgMHgwMCwgMHg0MCwgMHg1ZCwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQ0LCAweDVmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NDAsIDB4MDUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OTksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2YywgMHg5NCwgMHg2MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDRiLCAweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweGMyLAotCTB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzksIDB4OTQsIDB4YTIsIDB4NDUsIDB4MjUsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg3MCwgMHg5NCwgMHgzMSwgMHgyMCwgMHg4NSwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5NCwgMHgyMiwgMHgxMiwKLQkweDQ4LCAweDdmLCAweDAwLCAweDAwLCAweDU4LCAweDA0LCAweDExLCAweDEyLCAweDQ4LCAweDAzLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgxZSwgMHg5NCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDVmLAotCTB4OGIsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg3OSwgMHg5NCwgMHgzMSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDdhLCAweDk0LCAweDIyLCAweDEyLCAweDQ4LCAweDdmLCAweDAwLCAweDAwLAotCTB4NTgsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MTcsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgxMiwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDg5LCAweDk0LCAweDBiLCAweGYwLAotCTB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MTIsIDB4NDgsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHg4NiwgMHg5NCwgMHgyMiwgMHg1MCwgMHg4NSwgMHg3MCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGFlLCAweDk2LCAweDAwLCAweGYyLCAweDk2LCAweDMwLCAweDAxLCAweDAwLAotCTB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsIDB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDRiLCAweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQyLAotCTB4MTAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHhiNywgMHgzZiwgMHg0MywgMHgxMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDhhLCAweDg4LCAweDAxLCAweDAwLCAweDhkLCAweDk0LCAweDMwLCAweGExLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAotCTB4OTAsIDB4OTQsIDB4MjIsIDB4NDUsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4N2EsIDB4OTQsIDB4MTAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHg0NSwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LAotCTB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHg0YiwgMHg4NSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGFlLCAweDk2LCAweDAwLCAweGYyLCAweDk2LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDljLCAweDk0LCAweDIyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhNywKLQkweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTQsIDB4YTgsIDB4MDUsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDE0LCAweDAwLCAweDRiLCAweDk2LCAweGRjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLAotCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg4NCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxZiwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDg0LCAweDg4LCAweDAxLCAweDAwLCAweGFhLCAweDk0LCAweDIyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWIsIDB4OTQsIDB4MDAsIDB4NDIsIDB4NjgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5NCwgMHgzMSwgMHg1YSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDQyLCAweDQ4LCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkxLCAweDQyLAotCTB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MzUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiNCwgMHg5NCwgMHgyOCwgMHhiMSwKLQkweDJjLCAweDMwLCAweDAwLCAweDAwLCAweGFmLCAweDk0LCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsCi0JMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGI0LCAweDk0LCAweGE4LCAweGIxLCAweDEwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjcsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGJmLCAweDk0LCAweDI4LCAweGIxLCAweDEwLCAweDMwLCAweDAwLCAweDAwLAotCTB4YjksIDB4OTQsIDB4OWYsIDB4YmEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVjLAotCTB4MTEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsIDB4MTEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwOCwgMHg0OCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyNCwKLQkweDExLCAweDg0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLCAweDAxLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWEsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDAsCi0JMHg0OCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjOCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhYywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDMyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZDQsIDB4OTQsIDB4MjIsIDB4ZjgsIDB4OTYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg5MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDI3LCAweDQ5LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHg5MiwgMHg0OCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGQ4LCAweDk0LCAweDI4LCAweGIxLCAweDkyLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZDQsIDB4OTQsIDB4MjIsIDB4NGMsIDB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTIsIDB4NDAsCi0JMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDk0LCAweGE4LCAweGIxLCAweDkwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjcsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHg0OCwgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDkwLCAweGQwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDRiLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTIsIDB4NDksCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDgyLCAweDhjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKLQkweDAxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLCAweDAwLCAweGVjLCAweDAwLCAweDAwLAotCTB4ZWEsIDB4OTQsIDB4MjIsIDB4MWEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4MDAsCi0JMHgzNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweGU0LCAweDk0LCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YywKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsIDB4MDEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MSwgMHgwMCwgMHhlYywgMHgwMCwgMHgwMCwKLQkweGY2LCAweDk0LCAweDIyLCAweDBkLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweGMzLCAweDk0LCAweDAwLCAweDAwLAotCTB4MWEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHg5NCwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGZiLCAweDk0LCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmQsIDB4MDEsCi0JMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDIyLCAweDAwLCAweDJkLCAweGYwLCAweDI2LCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweGYyLAotCTB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4ZjAsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4NjAsIDB4OTcsIDB4MmUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHg5NSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2UsIDB4NDMsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgwYiwgMHhlOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5NywgMHgzZiwgMHg0MywKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCi0JMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDE3LCAweDNkLCAweDQzLAotCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4ODAsIDB4YTEsIDB4MTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywgMHgxNiwgMHg2YywgMHgwMCwgMHgwMCwgMHgxYSwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBiLCAweDhhLCAweGU0LCAweDAxLCAweDAwLAotCTB4MDIsIDB4OTksIDB4MDAsIDB4MGQsIDB4OGEsIDB4MTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNywgMHg5NSwgMHgzMCwgMHg0NywgMHgxNywgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDFhLCAweDk1LCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDQyLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgxZSwgMHg5NSwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDQxLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MWYsIDB4OTUsIDB4NDAsIDB4MDcsCi0JMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDI5LCAweDk1LCAweGEyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLCAweDAxLCAweDk3LCAweDNmLCAweDQxLAotCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZSwgMHg0MCwKLQkweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTUsIDB4MDAsIDB4M2IsCi0JMHhlNywgMHhiMSwgMHgwMCwgMHgwMCwgMHgyOSwgMHg5NSwgMHgzMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDMzLCAweDk1LCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MmYsIDB4OTUsIDB4YTIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MiwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIxLCAweGEyLCAweDk1LCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDRhLAotCTB4NDQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2UsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDlkLCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywgMHg5MiwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDgsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMCwgMHg0MywKLQkweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA4LCAweDgyLCAweDg4LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsCi0JMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5NSwgMHg0MCwgMHgwOCwgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDlkLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDUyLCAweDk1LCAweDIyLCAweDQ1LAotCTB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NGQsIDB4OTUsIDB4MjIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHg0OSwgMHg5NSwgMHgzMSwgMHg1ZiwKLQkweDk3LCAweDA0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDRiLCAweDQ4LCAweDdmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTEsIDB4NGIsIDB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5NSwgMHgzMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQxLCAweGU2LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwKLQkweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4OTcsIDB4M2QsIDB4NDAsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsCi0JMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1YiwgMHg5NSwgMHhhMiwgMHgzYiwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAotCTB4OTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NGEsIDB4NDQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHg1YywgMHg5NSwgMHgxOCwgMHg0YSwgMHg0NCwgMHg5MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDNmLCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLAotCTB4MTYsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OGEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NGIsCi0JMHg4YSwgMHgxNCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDVmLCAweDVmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVlLAotCTB4NWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDQsIDB4MDAsIDB4MmYsIDB4N2UsIDB4ZDksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHg5NSwgMHgyMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDBmLCAweDk4LCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NmEsIDB4OTUsIDB4MDAsIDB4MDUsCi0JMHg0YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHhhNywgMHg1ZSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDRiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVlLAotCTB4NWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDgsIDB4NGUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NmQsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzMsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwNywgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDcyLCAweDk1LCAweDQwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDlkLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4OTUsIDB4MjIsIDB4NDUsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YSwKLQkweDQ0LCAweDdmLCAweDAwLCAweDAwLCAweDliLCAweDA0LCAweDAwLCAweDRhLCAweDQ0LCAweDEzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTcsIDB4M2YsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LAotCTB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHg1ZSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHhhYSwKLQkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDBmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg5NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDc4LCAweDk1LCAweGEyLCAweDNiLCAweDg5LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LAotCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDRhLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NGIsCi0JMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg5MywgMHgwNCwgMHgwMCwgMHgxMiwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDNkLCAweDk1LCAweDAwLCAweDVhLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVhLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ZTYsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyNCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDJmLCAweDRmLCAweDk1LCAweDg0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4NGIsCi0JMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGUzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJkLCAweDQ0LAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMiwKLQkweDAyLCAweDMwLCAweDAwLCAweDAwLCAweDE3LCAweDk0LCAweDAwLCAweDEwLCAweDMyLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4NDIsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgzMiwgMHgwMCwgMHhhMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAotCTB4OTksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDRjLCAweDAyLCAweGQwLCAweDAwLCAweDAwLAotCTB4YTMsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCi0JMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg5NSwgMHgyMiwgMHg0MSwgMHgwMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGFjLCAweDk1LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTUsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKLQkweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDY4LCAweDAxLCAweDJkLCAweDA2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDk1LCAweDIyLCAweDQwLCAweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDA4LAotCTB4MzgsIDB4OTYsIDB4MDEsIDB4MDAsIDB4M2EsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5OSwgMHgwMCwgMHgwOCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MSwKLQkweDgyLCAweGNjLCAweDAxLCAweDAwLCAweGI5LCAweDk1LCAweGFhLCAweDQxLCAweDNiLCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMywgMHg0OCwgMHgzYiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDFkLCAweDA0LCAweGNjLCAweDAxLCAweDAwLCAweGUwLCAweDk1LCAweDI2LCAweDQ2LAotCTB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0YywKLQkweDQyLCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAotCTB4NjQsIDB4MDEsIDB4MjAsIDB4ZjAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4OTUsIDB4MjIsIDB4NDEsCi0JMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDg2LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIyLCAweDQ0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZDEsIDB4OTUsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4OTUsIDB4MjIsIDB4NDEsCi0JMHgwNSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhkYywgMHg5NSwgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGExLCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhkNywgMHg5NSwgMHhhOCwgMHg0NiwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHgyMywgMHg4MywgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NSwgMHgwMCwgMHg1MCwgMHg0OSwgMHhjMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLAotCTB4MWEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5NSwgMHgyMiwgMHg0MCwKLQkweDNiLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLAotCTB4YzMsIDB4OTQsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4OTUsIDB4MDAsIDB4NDEsCi0JMHgzYiwgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZCwgMHg0NywgMHg4MCwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDJmLCAweDVmLCAweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGYwLAotCTB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMywgMHhmMCwgMHg4YywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg5NSwgMHg4YywgMHhmOCwgMHg4ZSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAotCTB4MTQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZSwgMHhmOCwKLQkweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJhLCAweDRhLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4MWIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZSwgMHg5NSwgMHgyMCwgMHgwYSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjAsIDB4ZjAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMCwgMHgyMCwgMHg0YSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgyMCwgMHg0YiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDk1LCAweDAwLCAweDQwLCAweDEzLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MmQsIDB4NDIsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDA1LCAweDk2LCAweGEyLCAweGE1LAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHg5NiwgMHhhMiwgMHg0MCwgMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsCi0JMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDBkLCAweDk2LCAweGEwLCAweGE1LCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MjAsIDB4NDEsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHg5NiwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwKLQkweDk4LCAweGRjLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDRjLCAweGU0LCAweGY1LCAweDAxLCAweDAwLAotCTB4MTMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4Y2IsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0MCwKLQkweGUxLCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NWQsCi0JMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgyMywgMHg5NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGNiLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLCAweDA1LCAweDkwLCAweDAwLCAweDAwLAotCTB4MzMsIDB4OTYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsCi0JMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg4MiwgMHgwYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgzZCwgMHg5NiwgMHg5ZiwgMHg0MSwgMHg4NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNSwKLQkweDg1LCAweGNjLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQyLCAweGU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTMsIDB4YTUsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2QsIDB4NDEsCi0JMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg5OCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDQ0LCAweDk2LCAweDIyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDVhLAotCTB4OTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4OTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHgwMCwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDAwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MjEsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwMCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGEyLCAweDAwLCAweDZhLCAweDA2LCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDAwLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTYsIDB4NTIsIDB4NDMsIDB4ODEsIDB4NjAsIDB4MDAsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHg1MCwgMHg5NiwgMHgwMCwgMHg0MSwKLQkweDgwLCAweDk0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDUxLCAweDk2LCAweDllLCAweGJiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDU2LCAweDk2LCAweGEyLCAweDQwLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDJiLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MjQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCi0JMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweDNhLCAweGIwLCAweDAxLCAweDAwLCAweDZiLCAweDk2LCAweDljLCAweDE3LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NjAsIDB4OTYsIDB4YTIsIDB4NGEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgxZSwKLQkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDVmLCAweDk2LCAweGEyLCAweDQ4LCAweDk5LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWYsIDB4OTYsIDB4YTIsIDB4OGEsCi0JMHhmMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDNlLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGY0LAotCTB4MjgsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2YSwgMHg5NiwgMHgyMCwgMHhmMCwgMHgzZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAotCTB4YmYsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjMsCi0JMHgzYSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDBjLCAweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA3LAotCTB4OTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgyYSwgMHgwYywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA2LCAweDE0LCAweGVjLCAweDAwLCAweDAwLCAweDdhLCAweDk2LCAweDIyLCAweDQ1LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MmEsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmEsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDg0LCAweDk2LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4OTUsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4OGYsIDB4OTYsIDB4NjIsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg5NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGM5LCAweDAxLCAweDAwLCAweDkyLCAweDk2LCAweGE4LCAweDAwLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHhhMiwgMHg5NSwgMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OTYsIDB4NjIsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5NiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YTAsIDB4OTYsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHg0YSwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGMwLCAweGE4LCAweDNkLCAweDQ2LAotCTB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4YTEsIDB4ZjAsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwOSwgMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGE4LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4YWEsIDB4OTYsIDB4NjMsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweGYzLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLAotCTB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4YWYsIDB4OTYsIDB4NjUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiNywgMHg5NiwgMHgyMiwgMHhmMywgMHg3NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDk0LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweGU3LCAweDg1LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzUsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI0LCAweDk2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjNywgMHg5NiwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwgMHhiYywgMHg5NiwgMHhhMiwgMHg0NCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDk4LCAweDkzLCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzIsIDB4OTYsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGJmLCAweDk2LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDMyLCAweGIwLCAweDAxLCAweDAwLCAweGM3LCAweDk2LCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZTEsIDB4OTQsIDB4MDAsIDB4NDMsIDB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg5NiwgMHhhMywgMHgxNSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweGNhLCAweDk2LCAweDAwLCAweDA2LCAweDA0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTYsIDB4MjAsIDB4MDIsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YiwgMHg5NywgMHgwMCwgMHgwNSwKLQkweDQ4LCAweDMxLCAweDAxLCAweDAwLCAweGY3LCAweDk2LCAweDIyLCAweDAyLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAotCTB4ZDAsIDB4OTYsIDB4YTIsIDB4MDIsIDB4MmEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4OTYsIDB4YTIsIDB4NDUsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhkMiwgMHg5NiwgMHgyMiwgMHgwMiwgMHgwYywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGRiLCAweDk2LCAweDAwLCAweDAyLCAweDE2LCAweGMwLCAweDAwLCAweDAwLCAweGRhLCAweDk2LCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhkYSwgMHg5NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZDYsIDB4OTYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDczLCAweDk2LCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweGY3LCAweDk2LCAweDIyLCAweDE1LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhmNiwgMHg5NiwgMHhhMiwgMHgwMiwgMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhlNywgMHg5NiwgMHgyMiwgMHg0NiwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZTcsIDB4OTYsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGUzLCAweDk2LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjMsIDB4ODMsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MmYsIDB4NWMsCi0JMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDFiLCAweDk4LCAweDAxLCAweDAwLCAweGI5LCAweDk2LCAweDIwLCAweDE1LAotCTB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDA4LCAweGUwLCAweDhkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhmMywgMHg5NiwgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweGI5LCAweDk2LCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweGI5LCAweDk2LCAweDAwLCAweDAyLAotCTB4MTAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4ZjksIDB4OTYsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg5OCwgMHg5MywgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwKLQkweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1YywKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAxLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHgyNywgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGMzLCAweDk0LCAweDAwLCAweDQxLCAweGEzLCAweDQxLCAweDAxLCAweDAwLCAweDA1LCAweDk3LCAweDAwLCAweDQxLAotCTB4MjcsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MzYsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDgwLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDE0LCAweGJiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDBlLCAweDk3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHg2NCwgMHg5NywgMHgwMCwgMHg0MCwgMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZCwgMHgwNiwKLQkweDE2LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDE2LCAweGM0LCAweDAxLCAweDAwLAotCTB4MTgsIDB4OTcsIDB4YTAsIDB4ZjAsIDB4MTYsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDZjLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDQwLAotCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZjAsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgyMSwgMHg5NywgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHg0MywKLQkweDg2LCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDBiLCAweDE2LCAweGM4LCAweDAxLCAweDAwLAotCTB4MjEsIDB4OTcsIDB4YTQsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg0NCwgMHg5NywgMHgyMiwgMHgwNiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDJmLCAweDk3LCAweGEyLCAweDA2LCAweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDJjLCAweDk3LCAweDIyLCAweDQ4LAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MjYsIDB4OTcsIDB4YTAsIDB4NDEsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDMxLCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MmQsIDB4NDgsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NDUsCi0JMHhlNywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyMCwgMHg0NSwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDk3LCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQzLAotCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OTcsIDB4YTAsIDB4NDgsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLCAweGZjLCAweGM5LCAweDAxLCAweDAwLAotCTB4YTgsIDB4OTcsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYSwgMHg5NywgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgzOSwgMHg5NywgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDNlLCAweDk3LCAweDY0LCAweGYwLCAweDgyLCAweGIwLCAweDAwLCAweDAwLAotCTB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4M2UsIDB4OTcsIDB4YTIsIDB4ZjIsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDhjLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDYsIDB4MzAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4NiwgMHgwYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg0OSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweDJkLCAweDQ2LCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4YTAsIDB4ZjIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MywgMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDk3LCAweDAwLCAweDMwLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRhLAotCTB4MTksIDB4ZmMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhjYywgMHgwMCwgMHgyZCwgMHhhYiwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDRkLCAweDk3LCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgxYiwKLQkweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDUyLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ZjAsIDB4MDAsIDB4MGMsIDB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NGMsCi0JMHg5NSwgMHg2MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YSwgMHgxOCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAxLAotCTB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4NWYsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg3YSwgMHgwMSwgMHgyZSwgMHhmZSwKLQkweDkyLCAweGIwLCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweGY2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NmEsIDB4OTcsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAwLCAweDZlLCAweDA2LCAweDgyLCAweGM4LCAweDAxLCAweDAwLCAweDZlLCAweDk3LCAweDIyLCAweDRhLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHg0YywgMHg4MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDkyLCAweGMwLCAweDAxLCAweDAwLCAweDZmLCAweDk3LCAweDQzLCAweDMwLCAweDNkLCAweDA3LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjYsIDB4OWUsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsCi0JMHgzZCwgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDA2LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4OTgsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTcsIDB4MjYsIDB4MzAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHg3OCwgMHg5NywgMHg5MCwgMHg0YywgMHg5MiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDkzLCAweGMwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDQ5LCAweGVjLCAweGE5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDEsCi0JMHhmMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MTUsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg3ZCwgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgyMCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4OGYsIDB4OTcsIDB4MjIsIDB4NWYsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTcsIDB4YTIsIDB4NDAsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4OTcsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4YywgMHg5NywgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDU0LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4ODgsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjUsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHg0MCwgMHg4YSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDIxLCAweDgxLCAweDg0LCAweDAwLCAweDAwLCAweDkyLCAweDk3LCAweGEyLCAweDVmLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDMsIDB4MTksIDB4N2MsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDQwLCAweDhhLCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NiwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg5NywgMHg5NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHgwOCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4YTAsIDB4OTcsIDB4YTIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDUsIDB4MDAsIDB4MDIsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAyLAotCTB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YTUsIDB4OTcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwgMHg0OCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweGIwLCAweDAwLCAweDAwLCAweGExLCAweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGE2LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiMSwgMHg5NywgMHgyMCwgMHg0YywKLQkweDg0LCAweDZjLCAweDAwLCAweDAwLCAweDg4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4YjEsIDB4OTcsIDB4MjAsIDB4ZjIsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5OCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk4LCAweGIwLCAweDAxLCAweDAwLCAweGEzLCAweDAwLCAweDJkLCAweDE0LAotCTB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YjYsIDB4OTcsIDB4MjAsIDB4NGMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgzMCwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAotCTB4YmEsIDB4OTcsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMCwgMHgyMCwgMHgxNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDk4LCAweDAwLCAweDI1LCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGYzLAotCTB4ODAsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDIsIDB4ODIsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHhjMCwgMHg5NywgMHhhMCwgMHg0MCwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLCAweDgyLCAweGVjLCAweDAwLCAweDAwLAotCTB4OTgsIDB4MDAsIDB4YTAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgzNywgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDk5LCAweDAwLCAweDA1LCAweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LCAweDk2LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGNiLCAweDk3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDFjLAotCTB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ZjAsIDB4OGEsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4YiwgMHhlYywgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4YTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4ZDksIDB4OTcsIDB4OWMsIDB4MTcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGJlLCAweDAwLCAweDJmLCAweGFiLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDk4LCAweDAwLCAweDE0LAotCTB4ODIsIDB4NTAsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkZSwgMHg5NywgMHgyMiwgMHhmMiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDk3LCAweDlmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAotCTB4YmUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTgsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDljLCAweDAwLCAweDJkLCAweDMwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweGYwLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmMiwgMHg5NywgMHgyMywgMHhmMCwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHhlNiwgMHg5NywgMHgyMywgMHg5MiwKLQkweDg3LCAweDZjLCAweDAwLCAweDAwLCAweGM5LCAweDA0LCAweDAwLCAweGE2LCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZTgsIDB4OTcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHg4OSwgMHgwMCwgMHg0YSwgMHg5NCwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGU4LCAweDk3LCAweDY4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDQwLAotCTB4YmQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4YjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHgwMCwgMHgyZCwgMHg0MiwgMHhiMiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMywKLQkweDgwLCAweGUwLCAweDAxLCAweDAwLCAweGVkLCAweDk3LCAweGQ0LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzgsIDB4ZGEsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OTcsIDB4MjMsIDB4NDAsCi0JMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMCwgMHgyMCwgMHg5ZCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGY3LCAweDk3LCAweDAwLCAweDQwLCAweDg0LCAweGIwLCAweDAwLCAweDAwLCAweGJmLCAweDAwLCAweDJkLCAweDQzLAotCTB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsIDB4ODAsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhmNywgMHg5NywgMHgyMywgMHg0MCwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg5NCwgMHgwMCwgMHgyMCwgMHg5ZCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmIsIDB4OTcsIDB4YTIsIDB4ZjAsIDB4MzgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MjAsIDB4NDIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQ2LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgyLCAweDg4LCAweDAxLCAweDAwLCAweDAxLCAweDk4LCAweDIzLCAweDQxLCAweDgwLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODksIDB4MGMsCi0JMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg4NiwgMHgwYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGJjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweGYyLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4NDEsIDB4MjQsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHgwZCwgMHg5OCwgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MiwKLQkweDM4LCAweGVjLCAweDAwLCAweDAwLCAweDBkLCAweDk4LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MGYsIDB4OTgsIDB4YTMsIDB4ZjAsCi0JMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTMsIDB4OTgsIDB4MjIsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhiNCwgMHgwMCwgMHgyMCwgMHgxZCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyZCwgMHg1ZiwKLQkweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDEzLCAweDk4LCAweDIzLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MDAsIDB4MjAsIDB4MWQsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MjAsIDB4MTIsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNCwgMHgwMCwgMHhhMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDI3LCAweDA0LCAweDAwLCAweDQwLCAweDg5LCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweDk5LCAweDAwLCAweDQyLAotCTB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MWYsIDB4OTgsIDB4OWYsIDB4NDEsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg4YywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDQxLCAweDI0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjIsIDB4OTgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE3LCAweDA4LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDMyLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4MDgsIDB4OGEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgyYywgMHg5OCwgMHhhMiwgMHg0MCwgMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhjMywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4YTAsIDB4OTgsIDB4MmYsIDB4NDAsIDB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsCi0JMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHhhMSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGY4LAotCTB4M2UsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4MTIsIDB4ZTAsIDB4ZWQsIDB4MDAsIDB4MDAsCi0JMHhjOCwgMHgwMCwgMHgyMCwgMHhhYiwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHhhMCwgMHgxZiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDA1LCAweDQ4LCAweDZkLCAweDAwLCAweDAwLAotCTB4MzgsIDB4OTgsIDB4YTMsIDB4NWYsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHhlNywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDRjLCAweDk4LCAweDIyLCAweGYyLCAweDg2LCAweDMwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDQzLAotCTB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHgwMCwgMHgyZCwgMHg0MiwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MCwKLQkweDg2LCAweGMwLCAweDAxLCAweDAwLCAweDQwLCAweDk4LCAweDFmLCAweDQzLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDEsIDB4OTgsIDB4YTIsIDB4NDAsIDB4ODcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDEsCi0JMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg0NSwgMHg5OCwgMHg5ZiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg0LCAweGY0LCAweDAxLCAweDAwLCAweGI4LCAweDAwLCAweDJlLCAweDQyLCAweDgwLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsIDB4ODgsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NGIsIDB4OTgsIDB4MWYsIDB4NDQsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OCwgMHhhMiwgMHg0MCwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDRmLCAweDk4LCAweDYyLCAweDQxLCAweDg5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDYyLCAweDQxLAotCTB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHg2MiwgMHg0MSwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHhhNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGEyLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4YmMsIDB4MDAsIDB4MmUsIDB4NDMsIDB4ODcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5OCwgMHgyMCwgMHg0MywgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQzLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAxLCAweDAwLCAweDQzLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NDMsIDB4ZTQsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMSwgMHhlMiwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNSwKLQkweDQ4LCAweDZkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjIsCi0JMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGJhLCAweDAwLCAweDJkLCAweGYwLAotCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTgsIDB4YTIsIDB4MTIsIDB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhiYywgMHgwMCwgMHgyZCwgMHhmMiwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5OCwgMHhhMCwgMHhmMiwKLQkweDk4LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4OWMsIDB4MDAsIDB4MjAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MmQsIDB4MTIsCi0JMHg4NiwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2NywgMHg5OCwgMHhhMywgMHg0MSwgMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDY4LCAweDk4LCAweDAwLCAweGYwLCAweDg0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MmQsIDB4NDMsIDB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHg2YiwgMHg5OCwgMHg5ZiwgMHg0MiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDZkLCAweDk4LCAweGEzLCAweDQyLCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4NmUsIDB4OTgsIDB4MDAsIDB4MGEsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5OCwgMHhhMCwgMHgxNywgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDE3LCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDc1LCAweDk4LCAweDIyLCAweDQwLAotCTB4MGQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MGEsIDB4MGMsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg5OCwgMHhhMCwgMHg0MSwKLQkweDBjLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAxLCAweDAwLAotCTB4MjksIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTksIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGNiLCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAzLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDg3LCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwKLQkweDA1LCAweDkwLCAweDAwLCAweDAwLCAweDg0LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4MDUsIDB4NDgsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MGMsCi0JMHg5NiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHgwNywgMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDJhLCAweDBjLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzZSwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHg5OSwgMHgwMCwgMHgwOCwKLQkweDhhLCAweDMwLCAweDAxLCAweDAwLCAweDhmLCAweDk4LCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTUsIDB4OTgsIDB4MjgsIDB4NDAsCi0JMHg4NywgMHgzMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHg5OCwgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDQwLCAweDI3LCAweDZjLCAweDAwLCAweDAwLCAweDA0LCAweDk3LCAweDFkLCAweDQ2LAotCTB4ODcsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4OTgsIDB4MjIsIDB4NWYsIDB4MTEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyMiwgMHgxNSwgMHg2MiwgMHgzMSwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5OCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmYsIDB4NGMsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDliLCAweDk4LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDkzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZWYsIDB4OTgsIDB4MDAsIDB4NDksIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHgwNiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwMCwgMHgwMywgMHgwNiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGQwLAotCTB4YTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhhMiwgMHg5OCwgMHhhMCwgMHg1NCwgMHg5MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4YTIsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHhhYiwgMHg5OCwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ5LCAweGIzLCAweDAxLCAweDAwLCAweGY1LCAweDk4LCAweDAwLCAweDQwLAotCTB4NDksIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDIsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiNSwgMHgyZSwgMHgwOCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGIyLCAweDk4LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MmUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGI2LCAweDk4LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MmUsIDB4MDUsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHhhMiwgMHg0MSwKLQkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDU3LCAweDk1LCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg5NSwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDk0LCAweDIwLCAweDQxLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGJhLCAweDk0LCAweDIwLCAweDQxLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGM0LCAweDk4LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2ZiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM4LCAweDk4LCAweDg1LCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDM1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDMzLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgzZiwgMHhiMywgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNSwgMHgwMCwgMHg0MCwgMHgyNSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDQyLCAweDAwLCAweDAwLCAweDQwLCAweDRiLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MmYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweGIzLCAweDAxLCAweDAwLCAweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDliLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZWYsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHhmMSwgMHg5MywgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhhNSwgMHgzYywgMHg4YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLAotCTB4NDUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg1NywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDI3LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDUzLCAweGIzLCAweDAxLCAweDAwLAotCTB4ZTQsIDB4OTgsIDB4YTIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OTgsIDB4YTIsIDB4NTEsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhlNSwgMHg5OCwgMHgwMCwgMHg0MCwgMHgxZCwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDUwLCAweDQ2LCAweDAwLCAweDQwLCAweDFkLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweGE2LAotCTB4ODgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4YTYsIDB4M2EsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhjMCwgMHgwMCwgMHg5ZCwgMHgzYiwgMHg5YiwgMHgwMSwgMHgwMCwgMHhiNCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDIzLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDRkLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MGEsIDB4MDAsIDB4YTYsIDB4MTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDAsIDB4OGEsCi0JMHgxNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVlLAotCTB4NTcsIDB4YjUsIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MjAsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwNiwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0MywgMHgwMCwgMHg0YiwKLQkweDk2LCAweGM4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDEwLCAweDIwLCAweGRjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MjAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTcsCi0JMHgyMSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgyZSwgMHgwYSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGY2LCAweDk4LCAweGEyLCAweDQxLAotCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhhOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGZhLCAweDk4LCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZlLCAweDk4LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGZlLCAweDk4LCAweGEyLCAweDQxLAotCTB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg5OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDk4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDk5LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDk5LCAweDZhLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDBiLCAweDk5LCAweDIyLCAweDRmLAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDk5LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MTMsIDB4OTksIDB4MjIsIDB4NGEsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MTEsIDB4OTksIDB4MjIsIDB4NGYsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDExLCAweDk5LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBmLCAweDk4LCAweGY0LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4YTIsIDB4NWYsIDB4OTksIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwKLQkweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLAotCTB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsCi0JMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDQxLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjIsIDB4OWYsIDB4MjIsIDB4NDAsIDB4N2IsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxOSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQxLCAweDdiLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4YzQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsCi0JMHhjNiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhhMiwgMHhjOCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDA4LCAweDE0LCAweDAwLCAweDQwLCAweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweGE4LCAweDlmLCAweDAwLCAweDRkLAotCTB4OWEsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OWYsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHhiOSwgMHg5ZiwgMHhhMiwgMHg0MSwKLQkweDliLCAweDUwLCAweDAwLCAweDAwLCAweGJmLCAweDlmLCAweDgwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NTIsIDB4NDksIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhjMiwgMHg5ZiwgMHgwMCwgMHg0MiwgMHhjZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDUxLCAweDRhLCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OWYsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDE5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDlhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsCi0JMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0ZCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGNhLCAweDlmLCAweDAwLCAweDQwLCAweDE5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDksIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwKLQkweDEwLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUyLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4NDMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsCi0JMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ4LCAweDRmLCAweDQwLCAweGIxLCAweDAxLCAweDAwLCAweGQyLCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4Y2IsCi0JMHg4MSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHhmMiwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDU1LCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQzLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NDEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlZCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDIzLCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDI3LCAweDgzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4ZCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3OSwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc4LCAweDk4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ODcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwYSwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGIxLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE5LCAweDk5LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JfSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc2Rvd25sb2FkLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9vYXNpc2Rvd25sb2FkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MzhjMjMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNkb3dubG9hZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjg0OCArMCwwIEBACi0jZGVmaW5lIE9BU0lTX1VDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCi0jZGVmaW5lIE9BU0lTX1VDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEwOjM3IgotI2RlZmluZSBPQVNJU19VQ09ERV9IT1NUSUZfSUQgIAkzCi0KLXN0YXRpYyBzMzIgT051bVNlY3Rpb25zID0gMHgyOwotc3RhdGljIHUzMiBPU2VjdGlvblNpemVbXSA9IHsKLQkweDAwMDA0MDAwLCAweDAwMDEwMDAwLAotfTsKLQotc3RhdGljIHUzMiBPU2VjdGlvblN0YXJ0W10gPSB7Ci0JMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKLX07Ci0KLXN0YXRpYyB1OCBPYXNpc1VDb2RlWzJdWzY1NTM2XSA9Ci17Ci0JewotCTB4MTUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LAotCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4YTIsIDB4NDAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgwOSwgMHgwMCwgMHhhMiwgMHg0OSwgMHhkZCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDQwLCAweGQxLCAweGIxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDBiLCAweDAwLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OGYsIDB4OTgsIDB4MTgsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5OCwKLQkweDgwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4NDAsIDB4OTgsCi0JMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGE1LCAweDk5LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDI5LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4MTQsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwZSwgMHgwMCwgMHg5MywgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MjksIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwMCwgMHgxNCwgMHhiYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDEyLCAweDAwLCAweDkzLCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyOSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDE0LCAweGJjLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4OTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhkZCwgMHg4MSwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDMzLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJhLCAweDAwLCAweDE0LCAweGJjLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4MDAsIDB4MTMsIDB4YmMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0MCwKLQkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmZCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmZiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDMzLCAweDAwLCAweDE4LCAweGVlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4ZTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MzksIDB4MDAsIDB4OTgsIDB4ZWUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNiLCAweDAwLCAweDgwLCAweGYzLCAweGRlLCAweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDAsIDB4ODMsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDJlLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHgwMCwgMHgxOCwgMHhlZSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQ1LCAweDAwLCAweDk1LCAweGU4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweGU4LAotCTB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweGVjLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlZSwgMHg4YiwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAxLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDQwLCAweGQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4OGQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZjAsCi0JMHhmMCwgMHhkYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDNjLCAweDAxLCAweDAwLCAweDQwLAotCTB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAotCTB4M2MsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhkNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ2LCAweGIxLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweGYwLAotCTB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4ZjgsIDB4ODAsIDB4ZDgsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwMCwgMHgyNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgxLCAweGQwLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQwLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhkOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMCwgMHgyMiwgMHhmYSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgxLCAweGUwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZGUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmYSwgMHg4MCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY2LCAweDgxLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZDYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGQ1LCAweDk5LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLAotCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHhkNiwgMHhlNSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhkNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweGZiLCAweGQ2LCAweGU1LCAweDAxLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweGZiLAotCTB4N2EsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZGMsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3YywgMHgwMCwgMHgwMCwgMHg0YywgMHhkZCwgMHg5MSwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHg5NSwgMHhlOCwKLQkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweGU5LCAweGZhLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZDEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDAwLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg1LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDhlLCAweDAwLCAweDA5LCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4OGMsIDB4MDAsIDB4MDgsIDB4ZjksIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4MWYsIDB4ZmQsCi0JMHhmOSwgMHgzMywgMHgwMCwgMHgwMCwgMHg4YiwgMHgwMCwgMHg5ZSwgMHhmZCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYzLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LAotCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHhmMywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKLQkweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDAwLCAweDBhLCAweGY5LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDAsIDB4ZmIsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ZmQsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHhmOSwgMHhmMywgMHg4ZiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDA3LCAweDQyLCAweGY5LCAweGYzLCAweDhmLCAweDAxLCAweDAwLCAweDk3LCAweDAwLCAweGEyLCAweGZmLAotCTB4ZjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHhmZiwgMHhmYiwgMHhlZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmYywKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NiwgMHhmZCwgMHg3ZiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDk0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweGNlLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4ZmQsIDB4N2YsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5NCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweDdmLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMSwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4OWEsIDB4MTMsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MjksIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDY3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweGZkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGUyLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDUsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDYsIDB4ODgsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDQ2LCAweDgwLCAweDg4LCAweDAxLCAweDAwLCAweGE1LCAweGE1LCAweGEyLCAweDQwLAotCTB4ODAsIDB4Y2UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OGQsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHhjOSwgMHgwMCwgMHg4MiwgMHg0MSwgMHg4OSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGZkLCAweDgzLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsCi0JMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDQ1LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyYiwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQ2LCAweDgwLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4OTQsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YTUsIDB4YTUsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHg0ZSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDg0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODgsIDB4MDAsIDB4NDEsIDB4MmMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg5NiwKLQkweDgwLCAweGIyLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweGEyLCAweDQxLCAweDhkLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCi0JMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4OSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDgyLCAweDE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDk0LAotCTB4OGEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweDQ0LCAweDJiLCAweDQxLCAweDAxLCAweDAwLAotCTB4ZWMsIDB4MDAsIDB4MDgsIDB4NDEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4MDAsIDB4MDAsIDB4OTQsCi0JMHgyNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyNCwgMHhmNSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDk0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweGYyLCAweDAwLCAweGEwLCAweDQ0LAotCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MmIsIDB4NDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZiwgMHgwMCwgMHgyMCwgMHg0NCwKLQkweDg5LCAweDUwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweGY0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsCi0JMHg4OSwgMHhkMCwgMHgwMCwgMHgwMCwgMHhmNywgMHgwMCwgMHhhMCwgMHhmYSwgMHg4YSwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLCAweGY1LCAweDAwLCAweGEzLCAweDQyLAotCTB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4YSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhmYywgMHgwMCwgMHg5MCwgMHg0NCwKLQkweDhhLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhiLCAweGMwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDUsIDB4OGEsIDB4YTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTAsCi0JMHg4YiwgMHhlMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg5NCwgMHgyYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweGY5LCAweDliLCAweDAxLCAweDAwLCAweGRkLCAweDAwLCAweDAwLCAweGZjLCAweDE5LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgyYiwgMHg0MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGY5LCAweGMzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MmIsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4OWYsIDB4OTQsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHgwMCwgMHg1MSwKLQkweDkzLCAweGIwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweDAwLCAweDRkLCAweDkzLCAweGIwLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDEsIDB4MDAsIDB4NDksIDB4OTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMSwgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDcxLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDcyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3NCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NzcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDdhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdiLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg3ZCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3ZSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDdmLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhMSwgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDNiLCAweDAxLCAweDIwLCAweDQ4LCAweGExLCAweDUxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NDcsIDB4MDEsIDB4MjIsIDB4NGIsCi0JMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDAwLCAweDAwLCAweDRiLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIxLAotCTB4N2UsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg0NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGFhLCAweDk2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4YWEsCi0JMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4OWYsIDB4MDAsIDB4NDAsIDB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NWEsIDB4MDEsIDB4MjIsIDB4Y2MsCi0JMHg4NSwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHgxNCwgMHgwMCwgMHg0MCwgMHhhMSwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjMsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmEsCi0JMHhhNCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiYywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDE0LCAweDJmLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LAotCTB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDczLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLAotCTB4ODYsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDg4LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhmLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjYsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGM0LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4MywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhiOCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDI4LCAweDAwLCAweGQ0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDI4LCAweDAwLAotCTB4ZDUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MjgsIDB4MDAsIDB4ZDYsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwgMHhkNywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyOCwgMHgwMCwKLQkweDcyLCAweDAxLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDI4LCAweDAwLCAweDU1LCAweDAxLCAweDUxLCAweDQ5LAotCTB4ZmQsIDB4OTMsIDB4MjgsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTIsIDB4NGEsIDB4ZmQsIDB4OTMsIDB4MmEsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHg1NSwgMHg0OSwgMHhmZCwgMHg4MywgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1NiwgMHg0YSwKLQkweGZkLCAweDgzLCAweDJhLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgxLCAweDgwLCAweDMwLCAweDJhLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MmEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4OTEsIDB4ODIsCi0JMHg4MCwgMHgzMCwgMHgyYSwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgyYSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg5LCAweGIwLCAweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQwLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhiMywgMHgwMSwgMHgyMiwgMHhkZSwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweGMwLCAweDAxLCAweDAwLAotCTB4OTIsIDB4MDEsIDB4YTIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg0OSwgMHhkMSwgMHgwMSwgMHgwMCwgMHg5YSwgMHgwMSwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDk2LCAweDAxLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQxLAotCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YmYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg1MCwgMHgwMSwgMHhhMCwgMHgwZiwgMHhiZCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGMxLCAweDAxLCAweDAwLAotCTB4YjUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTksIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmZiwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRlLCAweDE5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGZmLAotCTB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZmYsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHhmZiwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDE0LCAweDAwLCAweGE0LCAweDgwLCAweGNjLCAweDAxLCAweDAwLAotCTB4YWEsIDB4MDEsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHhhMiwgMHg0YywgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGI0LCAweDAxLCAweDIyLCAweGQyLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDIyLCAweDQxLAotCTB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4ZTAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhjMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDg5LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQyLCAweDgwLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMSwgMHgwMCwgMHg0NCwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGIxLCAweDAxLCAweDAwLCAweDQ4LCAweDQ5LCAweGMxLCAweDAwLCAweDAwLCAweGFmLCAweDAxLCAweDAwLCAweDViLAotCTB4ODksIDB4OTAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4OWYsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDIzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4YmUsIDB4MDEsIDB4MjIsIDB4ZGUsIDB4ZTEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGI5LCAweDAxLCAweGEyLCAweDQ0LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweDQzLAotCTB4YmYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0MCwgMHhmOCwgMHg4MCwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwKLQkweDgwLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHgwMSwgMHgwMCwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJlLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhjYiwgMHgwMSwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAotCTB4ZDEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTMsIDB4MDEsIDB4MDAsIDB4ZGUsCi0JMHhhMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhlMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGViLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDEsIDB4MDAsIDB4ZGYsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwKLQkweGExLCAweGIxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGQyLCAweGE1LCAweGU3LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMSwgMHgyMiwgMHg0NCwgMHhjMSwgMHg1MywgMHgwMCwgMHgwMCwKLQkweGRhLCAweDAxLCAweDg0LCAweDQxLCAweDgxLCAweDQwLCAweDAwLCAweDAwLCAweGRlLCAweDAxLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkNSwgMHgwMSwgMHgwMCwgMHg0MSwgMHhhMSwgMHhjMSwgMHgwMCwgMHgwMCwgMHhkYSwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4YTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGRhLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweGQzLAotCTB4YTcsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4ZTAsIDB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMywgMHg5YiwgMHgwMSwgMHgwMCwgMHg1MywgMHgwMSwgMHgwMCwgMHhkZSwKLQkweGExLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGJmLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YTIsIDB4YmEsCi0JMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGU4LCAweDAxLCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDUyLCAweDAxLCAweDAwLCAweDQwLAotCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YmEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg2YiwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0ZCwKLQkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGUxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHhlNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlOSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGViLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZjcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmOSwgMHhiMywgMHgwMSwgMHgwMCwgMHhmOSwgMHgwMSwgMHgyMiwgMHg0MCwKLQkweDhmLCAweDZmLCAweDAwLCAweDAwLCAweDc4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4NjAsIDB4MDIsIDB4MDAsIDB4YzcsIDB4ODMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0MiwgMHg4MywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU5LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFiLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDIsIDB4YjgsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMiwgMHhiOSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDEwLCAweDAyLCAweGJhLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMiwgMHhiYiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDAyLCAweGJjLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDIsIDB4YmQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDAyLCAweGJlLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDIsIDB4YmYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMiwgMHhjOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MWUsIDB4MDIsIDB4YzksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMiwgMHhjYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDIyLCAweDAyLCAweGNiLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgyNCwgMHgwMiwgMHhjYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDI2LCAweDAyLCAweGNkLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDIsIDB4Y2UsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDJhLCAweDAyLCAweGNmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZjAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMiwgMHhmMSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDIsIDB4ZjIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMiwgMHhmMywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUzLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweGY0LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHgwMiwgMHhmNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDM4LCAweDAyLCAweGY2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2EsIDB4MDIsIDB4ZjcsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDAyLCAweGY4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAotCTB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4M2UsIDB4MDIsIDB4ZjksIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OSwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMiwgMHhmYSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDgxLCAweDkwLCAweDAxLCAweDAwLAotCTB4NDIsIDB4MDIsIDB4ZmIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsCi0JMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwgMHg0NCwgMHgwMiwgMHhmYywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDQ2LCAweDAyLCAweGZkLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg0OCwgMHgwMiwgMHhmZSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwKLQkweDgxLCAweDkwLCAweDAxLCAweDAwLCAweDRhLCAweDAyLCAweGZmLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODEsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhNSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTQsIDB4MmUsIDB4MDYsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHhkMywgMHhhNywgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjQsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlYiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGRiLCAweDAxLCAweDAwLCAweGM3LCAweGUxLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjYsIDB4MDIsIDB4MDAsIDB4NDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHgxYSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4NjMsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MDIsIDB4NDksIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MiwgMHg0MCwgMHgxYywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDRlLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg1ZiwgMHgwMiwgMHg0YSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKLQkweDllLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGQ4LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4ZDAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhkNCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGQ2LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLAotCTB4ZGMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4ZGUsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhkYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwKLQkweDhlLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLCAweGU2LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ZWMsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTksCi0JMHhmYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlMCwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGUyLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LAotCTB4ZTQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZTgsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHhlYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwKLQkweGY0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweGY2LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4ZjgsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzcsCi0JMHhhOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDg0LCAweDAyLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDEwLCAweGIxLCAweDAwLCAweDAwLAotCTB4OGQsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMiwgMHgwMCwgMHg0NiwgMHhhMywgMHhiMywgMHgwMCwgMHgwMCwKLQkweDliLCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGExLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDIsIDB4MjMsIDB4NTAsIDB4YTUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhhNSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg0MiwKLQkweGE1LCAweDYzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhiYSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHhhMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk3LCAweDAyLCAweDIyLCAweDQ0LAotCTB4YTUsIDB4NTMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YTEsIDB4YzEsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHgwMCwgMHhkZCwgMHhhMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHhkZSwKLQkweGExLCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHhiZiwgMHhiMywgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMSwgMHhhMiwgMHhkMiwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLAotCTB4NjMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OWUsIDB4MDIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg1NSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHgwMCwgMHg1NCwKLQkweGE1LCAweDMzLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZDAsIDB4MTQsIDB4MmQsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHhkMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGQ0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ZDYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMiwgMHgwMCwgMHg0NiwKLQkweDgzLCAweDMwLCAweDAxLCAweDAwLCAweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4OWUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsCi0JMHg0MywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOSwgMHg0NSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGVhLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGViLAotCTB4YTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQwLCAweDE0LCAweDJlLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAotCTB4YTMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg4MSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHgwMiwgMHgwMCwgMHg0MCwKLQkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGMzLCAweDAyLCAweDAwLCAweDA1LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAotCTB4NTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDIsIDB4MDAsIDB4MDUsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGQwLCAweDAyLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAwLCAweDAwLCAweGQyLCAweDAyLCAweDAwLCAweDQ0LAotCTB4YTUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhjMSwKLQkweGYwLCAweDg5LCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDIyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4YzQsIDB4MDIsIDB4MDAsIDB4NDEsIDB4YzEsIDB4YzMsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4MDIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQwLAotCTB4YTQsIDB4ZTcsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHhjOSwgMHhmMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHhjOCwgMHgwMiwgMHgyMiwgMHg0MSwKLQkweDgxLCAweDUwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDQxLCAweGMxLCAweGMzLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZGUsIDB4ODUsIDB4ODksIDB4MDEsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4YzIsCi0JMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHhkZSwgMHg5NSwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweGM4LCAweDAyLCAweDAwLCAweGNhLCAweGUwLCAweGIxLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LCAweGE3LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4YTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQxLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTIsIDB4MDIsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjYywgMHg4NSwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwKLQkweGE5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4YWUsIDB4MDMsIDB4MDAsIDB4Y2IsIDB4YTMsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg0NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQzLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4ZDQsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGNjLAotCTB4ODUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmYSwgMHgwMiwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmOSwgMHgwMiwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGNjLCAweDg1LCAweDgzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQxLAotCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxMiwgMHgwMywgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMywgMHgyMiwgMHg0YywKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDE2LCAweDAzLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MTcsIDB4MDMsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDMsIDB4MjIsIDB4NTgsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxZSwgMHgwMywgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAotCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDEwLCAweDAzLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4Y2EsCi0JMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0NSwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKLQkweGRkLCAweDlmLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGRkLCAweDlmLCAweDgwLCAweGNhLAotCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OWYsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKLQkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDFiLCAweDAzLCAweGE4LCAweGIxLAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4Y2IsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMywgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDMsIDB4OTEsIDB4ODIsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgwLCAweGNlLCAweDAxLCAweDAwLCAweDJiLCAweDAzLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MmQsIDB4MDMsIDB4NTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAotCTB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OWYsIDB4MDAsIDB4NDEsIDB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGNkLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MzIsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDNkLCAweDAzLCAweDkxLCAweDgxLCAweDgyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHgzYiwgMHgwMywgMHhhNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgzZCwgMHgwMywgMHg1NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI1LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MDAsIDB4NDAsCi0JMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGQ4LCAweDlmLCAweDAwLCAweDQxLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MTQsIDB4MmYsIDB4NDAsIDB4OTksIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHg1NywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0OSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweGY4LAotCTB4ODAsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODgsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDIzLCAweDkxLCAweDAxLCAweDAwLCAweDRkLCAweDAzLCAweDFmLCAweDkxLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgxZiwgMHg5MSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4MjMsIDB4OTEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4MDMsIDB4MWYsIDB4OTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgyMywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NSwgMHgwMywgMHgxZiwgMHg5MSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweDQwLCAweDIwLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0OCwgMHg4NCwgMHg4NCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4OGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1YSwgMHgwMywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0NywKLQkweDhlLCAweGM4LCAweDAxLCAweDAwLCAweDU4LCAweDAzLCAweDAwLCAweDVjLCAweDhmLCAweDgwLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDgyLCAweDk0LCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3NCwgMHgwMywgMHgyMiwgMHg1ZiwgMHg4ZCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDY1LCAweDAzLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLCAweDYzLCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDQzLCAweDg2LCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDEsIDB4ODUsIDB4NTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDAsIDB4NDEsCi0JMHg4MywgMHhlMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDg1LCAweGUwLCAweDAxLCAweDAwLCAweGQwLCAweDE0LCAweDJmLCAweDQ2LAotCTB4ODQsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjAsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDUsIDB4ODAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4YiwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDg1LCAweDAzLCAweGEwLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4ODMsIDB4MDMsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHg4ZSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDAzLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHgxYSwgMHgxNSwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDcwLCAweDE1LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgzOSwgMHgwMCwgMHg0MCwgMHhlMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDcwLCAweDE1LCAweDAwLCAweDQzLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAotCTB4OTUsIDB4MDMsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MDMsIDB4MjIsIDB4NWEsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3YSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDk4LCAweDAzLCAweGE4LCAweGIxLCAweDdlLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQyLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDMsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MTUsIDB4MmQsIDB4NDAsCi0JMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgxNCwgMHgyZCwgMHhmMCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LAotCTB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4NDgsIDB4OTAsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYSwKLQkweDhhLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDMsIDB4MjIsIDB4NDAsCi0JMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OGQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4YjUsIDB4MDMsIDB4MjIsIDB4NWYsIDB4OGQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhNywgMHgwMywgMHhhMiwgMHg0MSwgMHg5MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhNSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGZmLCAweDA3LCAweDAwLCAweDQ3LCAweDg0LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4OWYsIDB4MDAsIDB4NDcsCi0JMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHg0NywgMHg4ZSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NTAsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDMsIDB4MjAsIDB4MTgsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLAotCTB4YmUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDEwLCAweDAwLCAweDQwLCAweDU1LCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NTAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NGYsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg0ZSwgMHhkMywgMHgwMSwgMHgwMCwgMHg2ZSwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDgyLCAweDAzLCAweDAwLCAweDQyLCAweDgwLCAweDMwLCAweDAxLCAweDAwLAotCTB4YjAsIDB4MDMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzcsIDB4MDMsIDB4MjIsIDB4YTcsCi0JMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHg1YSwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzgsIDB4MTQsIDB4MmUsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweGEwLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4Y2EsCi0JMHhhNywgMHgzMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDAzLCAweDIyLCAweDQyLAotCTB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDMsIDB4MjIsIDB4NDEsIDB4NzUsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHgwMywgMHgxZSwgMHhjYSwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkYywgMHgwMywgMHgxZiwgMHhjYSwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGM5LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZGQsIDB4OWYsIDB4MDAsIDB4NDIsIDB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg3NSwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLAotCTB4NzUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4MDAsIDB4YTYsIDB4YzYsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweGM2LCAweGIxLCAweDAxLCAweDAwLCAweGRkLCAweDlmLCAweDAwLCAweDQwLCAweDc1LCAweGIzLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMSwgMHgwMCwgMHg0ZCwgMHg5MywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDQ1LCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweDMwLCAweDAxLCAweDAwLCAweDQ1LCAweDAxLCAweDAwLCAweDRjLAotCTB4OTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhkZCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZCwgMHg5ZiwgMHgwMCwgMHhjYSwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4MTQsIDB4MmUsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsCi0JMHhhMCwgMHhiMywgMHgwMSwgMHgwMCwgMHgxNSwgMHgwNCwgMHgwMCwgMHg0MywgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweGRhLCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODksIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4OSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg4LCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4YTUsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDMsCi0JMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4YTUsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDQsIDB4MjIsIDB4NDQsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwYiwgMHgwNCwgMHgyMiwgMHg0NCwgMHg4YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhmYSwgMHgwMywgMHhhMiwgMHg1MCwKLQkweGE1LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGE1LCAweGUzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCi0JMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgxNCwgMHgyZSwgMHhkMiwgMHg5NSwgMHhjMywgMHgwMSwgMHgwMCwKLQkweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwNCwgMHhhMiwgMHg0MSwgMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwNCwgMHhhMiwgMHhmMiwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGZhLCAweDAzLCAweDAwLCAweDQwLCAweGE1LCAweGIzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4YTUsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHhhNywgMHhiMywgMHgwMSwgMHgwMCwgMHhlMSwgMHg5ZiwgMHgwMCwgMHhiYiwgMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksIDB4MmIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDk0LCAweGI0LCAweDhiLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDksCi0JMHgyYiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwgMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk0LAotCTB4YjQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQ5LCAweDJiLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4MjcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDYsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MmQsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkZSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAyLCAweGM0LCAweDAwLCAweDQxLCAweDJjLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNSwgMHg4MiwgMHgwMCwgMHg0MSwgMHgyYywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDA0LCAweDgwLCAweDk0LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDJkLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4MDQsIDB4MDAsIDB4MTIsCi0JMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDQ5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDRiLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NGQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg0ZiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1MCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4NDAsIDB4NTQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NTYsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg1NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDU5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDViLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NWQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHg1ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4NjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NjUsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDY5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDZiLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YzAsIDB4NmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg2ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3MCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDcyLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4YzAsIDB4NzMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzUsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg3NywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDc5LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweGMwLCAweDdhLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4N2MsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg3ZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NTksIDB4MDQsIDB4MDAsIDB4MTIsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDg0LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODYsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDhjLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDhlLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5MiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5NCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDk2LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTgsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OWEsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5YywgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDllLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGEwLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhhNCwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE4LCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YWEsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhhZSwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGIwLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGIyLCAweDgwLCAweDQwLAotCTB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjQsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiNiwgMHg4MCwgMHg0MCwgMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MCwgMHg0MCwKLQkweDBiLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGJhLCAweDgwLCAweDQwLCAweDBiLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YmMsIDB4ODAsIDB4NDAsIDB4MGIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YmUsIDB4ODAsIDB4NDAsCi0JMHgwYiwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDgyLCAweDA0LCAweDg1LCAweDQxLAotCTB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLAotCTB4ODcsIDB4MDQsIDB4ODUsIDB4NDEsIDB4OTcsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHg2MCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDgwLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4ZjAsIDB4NGIsIDB4ODIsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4NjAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweGYwLCAweGE2LCAweDgyLCAweGIxLCAweDAxLCAweDAwLCAweDk2LCAweDA0LCAweDYwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhmMCwgMHhjMiwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwKLQkweDkwLCAweGIxLCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDgwLCAweDRiLCAweDkyLCAweDg5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4OTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTYsCi0JMHg5MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg5NCwgMHg4OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweGNhLCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4OTgsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweDk5LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDk4LCAweDk0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4OTksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHg4OCwgMHg5NCwgMHgwMSwgMHgwMCwgMHhhNiwgMHgwNCwgMHg0NywgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFkLCAweDA0LCAweDIyLCAweDIwLCAweDg3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFmLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGE2LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWYsIDB4ODAsIDB4ODYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDQsIDB4MjIsIDB4NGYsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjEsIDB4MDQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiOCwgMHgwNCwgMHgyMiwgMHg0YiwgMHg4OSwgMHg3YywgMHgwMCwgMHgwMCwgMHhiNiwgMHgwNCwgMHgyMiwgMHg0ZiwKLQkweDc3LCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YjYsIDB4MDQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMCwgMHg4NywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg5OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGMxLCAweDA0LCAweGE4LCAweGIxLCAweDUyLCAweDMzLCAweDAwLCAweDAwLCAweGM2LCAweDA0LCAweDIyLCAweDRiLAotCTB4NTMsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhjNCwgMHgwNCwgMHhhOCwgMHhiMSwgMHg3ZSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwNCwgMHhhMiwgMHg0MSwKLQkweDk5LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDRmLCAweDc3LCAweGZkLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRlLCAweDk4LCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTgsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg5OSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg5OCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDk5LCAweGUwLCAweDAxLCAweDAwLCAweGQ2LCAweDA0LCAweDAwLCAweDRjLAotCTB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDQsIDB4NDcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHgwNCwgMHgyMiwgMHgyMCwgMHg4NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHhkNiwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFmLCAweDgwLCAweDg2LCAweGIzLCAweDAxLCAweDAwLCAweGUwLCAweDA0LCAweDIyLCAweDRmLAotCTB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGUxLCAweDA0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZTgsIDB4MDQsIDB4MjIsIDB4NGEsIDB4ODksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDQsIDB4MjIsIDB4NGYsCi0JMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGU2LCAweDA0LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjAsIDB4ODcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4NmYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhmMSwgMHgwNCwgMHhhOCwgMHhiMSwgMHg1MiwgMHgzMywgMHgwMCwgMHgwMCwgMHhmNiwgMHgwNCwgMHgyMiwgMHg0YSwKLQkweDUzLCAweDdmLCAweDAwLCAweDAwLCAweDZmLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZjQsIDB4MDQsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDQsIDB4YTIsIDB4NDEsCi0JMHg5OSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0ZiwgMHg3NywgMHhmZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDA1LCAweGE4LCAweGIxLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDEyLCAweDA1LCAweDFkLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4NDksIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNSwgMHhhMiwgMHg0MCwKLQkweDg2LCAweDA0LCAweDAwLCAweDAwLCAweGRlLCAweDlmLCAweDljLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDAsIDB4ODgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NTAsCi0JMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4OCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDBjLCAweDA1LCAweDUyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQwLAotCTB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHgwNSwKLQkweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MWIsIDB4MDAsIDB4ZGUsIDB4OWYsIDB4MDAsIDB4NDEsCi0JMHhlMSwgMHhjMSwgMHgxYSwgMHgwMCwgMHg3OCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgxYiwgMHgwMCwKLQkweDE5LCAweDA1LCAweDIyLCAweDU0LCAweDgxLCAweDdjLCAweDFhLCAweDAwLCAweDE0LCAweDA1LCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MWEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YjMsIDB4NjcsIDB4ZGYsIDB4MWIsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHg0NCwgMHg5MywgMHg5MywgMHgxYiwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDFiLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAotCTB4MjcsIDB4MDUsIDB4MGYsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4N2YsIDB4MDAsIDB4NDAsCi0JMHg4OCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg1MCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDM2LCAweDAwLCAweDAwLCAweDQ0LCAweDg4LCAweGNjLCAweDAxLCAweDAwLCAweDFmLCAweDA1LCAweDk5LCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODksIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgyMSwgMHgwNSwgMHg5YiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDg5LCAweGQwLCAweDAxLCAweDAwLCAweDIzLCAweDA1LCAweDFmLCAweDQ0LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwNSwgMHgwMCwgMHg0OCwgMHg0NywgMHgzMSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDA1LCAweDAwLCAweDU4LCAweDQ3LCAweDMxLCAweDAxLCAweDAwLCAweGRlLCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHg2ZiwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHhkZSwgMHg5ZiwgMHgyNiwgMHgwNSwKLQkweDQ3LCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLAotCTB4ZGUsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDQsIDB4ZjAsIDB4NDEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKLQkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDRjLCAweDAxLCAweDAwLCAweDA3LAotCTB4OTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4OTcsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgwNSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDQ0LCAweDA1LCAweGEyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHg0NSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDIsCi0JMHhiMywgMHg0MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQyLCAweGIzLCAweDQzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhkYSwKLQkweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDUwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NTAsIDB4MDUsIDB4YTIsIDB4NDEsIDB4OGYsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0NSwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGZkLCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLAotCTB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZSwgMHhkYSwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsCi0JMHhmZCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGRhLAotCTB4ZmQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg3YSwgMHgwNSwgMHgyMiwgMHg0NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDdkLCAweDA1LCAweDIyLCAweDIwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLCAweDdhLCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MWYsIDB4MDAsCi0JMHg3ZCwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgxZSwgMHgwMCwgMHg3YSwgMHgwNSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDFmLCAweDAwLAotCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MWUsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgxZiwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4ZjQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0NiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhiMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGY1LCAweDAxLCAweDAwLAotCTB4NDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0YSwgMHhiMiwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGRhLCAweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGRhLAotCTB4ZjcsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4OTUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHgwNSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGE1LCAweDliLCAweDAxLCAweDAwLCAweDQwLCAweDE2LCAweDAwLCAweDQwLCAweGExLCAweDliLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YTcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4OWYsIDB4MDAsIDB4YmIsCi0JMHg4NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YjgsIDB4MDUsIDB4MjIsIDB4NDUsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHhhMiwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGE3LCAweDA1LCAweGE4LCAweGJiLCAweGUxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4MDUsIDB4YTIsIDB4NDEsCi0JMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHhhOSwgMHgwNSwgMHhhMiwgMHhmMiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDRjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDA1LCAweGEyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YjMsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhiMSwgMHgwNSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGIzLCAweDliLCAweDAxLCAweDAwLCAweGYwLCAweDE1LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDUsIDB4YTIsIDB4ZmEsCi0JMHhiNCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MiwgMHhiMywgMHg0MywgMHgwMSwgMHgwMCwKLQkweGI4LCAweDA1LCAweGEyLCAweGZhLCAweGI0LCAweDZmLCAweDAwLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQyLAotCTB4YjMsIDB4NDMsIDB4MDEsIDB4MDAsIDB4YmIsIDB4MDUsIDB4MjIsIDB4ZmEsIDB4YjQsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHhiOCwgMHgwNSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweDY3LCAweDkzLCAweDIxLCAweDAwLCAweGRmLCAweDlmLCAweDAwLCAweDU4LCAweDY3LCAweDkzLCAweDIwLCAweDAwLAotCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MjEsIDB4MDAsIDB4ZGIsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHgzMSwgMHgyMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgyMSwgMHgwMCwKLQkweDVjLCAweDE2LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGZhLAotCTB4OGUsIDB4YjAsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLCAweGY0LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhiNCwgMHhiMywgMHgwMSwgMHgwMCwgMHhjOSwgMHgwNSwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGZjLCAweDE1LCAweDIwLCAweDIwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGNlLCAweDA1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MjQsIDB4MDAsIDB4ZGEsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MjUsIDB4MDAsCi0JMHhjZSwgMHgwNSwgMHgyMiwgMHg0MCwgMHg5NywgMHg2YywgMHgyNCwgMHgwMCwgMHhjYiwgMHgwNSwgMHg0MiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY3LCAweDkzLCAweDI1LCAweDAwLAotCTB4ZGYsIDB4OWYsIDB4MDAsIDB4NTgsIDB4NjcsIDB4OTMsIDB4MjQsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgyNSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgyNSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQzLCAweDA1LCAweDIyLCAweDUwLAotCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmNiwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweGYyLCAweGI0LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MTUsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHhmMiwgMHhiNCwgMHgzMywgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweGZhLCAweDE1LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4ZjIsIDB4YjQsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHhmYywgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsIDB4YjQsIDB4OGIsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDRhLCAweGI0LCAweGY3LCAweDAxLCAweDAwLCAweDIwLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU5LCAweDA1LCAweDIyLCAweDUwLCAweGI1LCAweDZmLCAweDAwLCAweDAwLAotCTB4ZWEsIDB4MDUsIDB4MDAsIDB4NTAsIDB4YjUsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGUwLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MzAsIDB4MzEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MzMsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgzNSwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDM2LCAweDM3LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDM4LCAweDM5LCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDEsIDB4NDIsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg0MywgMHg0NCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg0NiwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDQ3LCAweDQ4LCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4NDksIDB4NGEsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGZjLCAweDA1LCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDgwLCAweDE2LCAweDJlLCAweDA2LAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgzLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDE2LCAweDJkLCAweDA2LCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4ZjYsIDB4YTksIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwNiwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwKLQkweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcxLCAweGY5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzMsCi0JMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDU0LCAweDAwLCAweDAwLCAweDQwLCAweDk1LCAweDk4LCAweDAxLCAweDAwLCAweGRjLCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHgwNiwgMHgyMiwgMHg3MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQ1LCAweDY3LCAweDAwLCAweGE2LCAweGUwLCAweGIyLCAweDAxLCAweDAwLCAweDAxLCAweDIzLCAweDAwLCAweDcwLAotCTB4ZTEsIDB4OWEsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4ZWYsIDB4MDAsIDB4YTYsIDB4ZTIsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHg4OSwgMHhhYiwgMHgwMCwgMHg3MSwgMHhlMywgMHg5YSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg5OCwgMHgwMCwgMHhhNiwKLQkweGU0LCAweGIyLCAweDAxLCAweDAwLCAweGZlLCAweGRjLCAweDAwLCAweDcyLCAweGU1LCAweDlhLCAweDAxLCAweDAwLAotCTB4MzIsIDB4MTAsIDB4MDAsIDB4YTYsIDB4ZTYsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzYsIDB4NTQsIDB4MDAsIDB4NzMsCi0JMHhlNywgMHg5YSwgMHgwMSwgMHgwMCwgMHhkMiwgMHhjMywgMHgwMCwgMHhhNiwgMHhlOCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGYwLCAweGUxLCAweDAwLCAweDc0LCAweGU5LCAweDlhLCAweDAxLCAweDAwLCAweDgwLCAweDE2LCAweDAwLCAweDRhLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY3LCAweGIxLCAweDAxLCAweDAwLCAweDI1LCAweDA2LCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4ODAsIDB4MTYsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZmMsIDB4MTYsIDB4MmEsIDB4NDcsCi0JMHhlNywgMHhiNSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0YSwgMHhlOCwgMHhlNSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTYsIDB4M2QsIDB4NDYsIDB4OGQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywKLQkweDQwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAotCTB4MmUsIDB4MDYsIDB4YTIsIDB4NDEsIDB4ODksIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHhlYiwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhlZCwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGVmLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAotCTB4ZjEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgwLCAweDg4LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLCAweGEyLCAweGM5LCAweDAxLCAweDAwLAotCTB4NGIsIDB4MDYsIDB4YTAsIDB4NTAsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDUwLCAweDAzLCAweDAwLCAweDRjLCAweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLAotCTB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywKLQkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg5OSwgMHg4NCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwMywgMHgwMCwgMHg0YywgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDg2LCAweGE0LCAweDAxLCAweDAwLCAweDUwLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NDAsIDB4YTQsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4OCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDQxLCAweGYwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQwLCAweDk0LCAweDAxLCAweDAwLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ODksIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MWIsIDB4MDAsIDB4MDAsIDB4NzUsCi0JMHg4NSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDA2LCAweGEzLCAweDUzLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhiLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDhiLCAweDg0LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDYsIDB4MDAsIDB4NDUsIDB4ODgsIDB4OTQsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAotCTB4ODksIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDYsIDB4MDAsIDB4NzgsIDB4ODksIDB4YTQsIDB4MDAsIDB4MDAsCi0JMHgzYiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1NywgMHgwNiwgMHhhYSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4ODksIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzYsCi0JMHg4YiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4YiwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDg4LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc3LAotCTB4OGIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OGIsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwNiwgMHgwMCwgMHg0NSwgMHg4OCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweDg1LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODQsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmIsIDB4MDYsIDB4YTMsIDB4NTMsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg4MiwgMHg1YSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDc5LCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkOSwgMHg2ZSwgMHgwMCwgMHhhNiwKLQkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGExLCAweGViLCAweDAwLCAweDQyLCAweDg0LCAweGM4LCAweDAxLCAweDAwLAotCTB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2IsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg3NSwgMHgwNiwgMHhhYSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDhmLCAweDAwLCAweGE2LCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweGRjLCAweGJjLCAweDAwLCAweDQyLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg2MiwgMHhjYSwgMHgwMCwgMHhhNiwgMHg4NCwgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNiwgMHhjMSwgMHgwMCwgMHg0MiwKLQkweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDc4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjMsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsCi0JMHhmMSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg3NiwgMHg4OSwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDAwLCAweDc2LCAweGVmLCAweGY2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZWUsIDB4OTYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsIDB4ZWQsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlYSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDRmLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4MzcsIDB4MDYsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzUsCi0JMHhlMSwgMHhjMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NiwgMHhlMywgMHhjMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDc3LCAweGU1LCAweGMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LAotCTB4ZTcsIDB4YzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzksIDB4ZTksIDB4YzIsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHgwNiwgMHg4MSwgMHg0MSwgMHg4ZCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGRiLCAweDlmLCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTUsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiOSwgMHgwNiwgMHgyMiwgMHg0MCwgMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGRhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGI5LCAweDA2LCAweGEyLCAweDQwLAotCTB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg3YywgMHgxNiwgMHgyMCwgMHhmNiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDMxLCAweGIzLCAweDAxLCAweDAwLCAweDlkLCAweDA2LCAweDIyLCAweDRmLCAweDhmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTEsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4OWYsIDB4MDYsIDB4MjIsIDB4NDAsCi0JMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhhMywgMHgwNiwgMHgwMCwgMHg1NCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweGExLCAweDA2LCAweDIyLCAweDQyLCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MjIsIDB4NDEsIDB4OGYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHhiNywgMHgwNiwgMHgyMiwgMHg1MSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiMiwgMHgwNiwgMHhhMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDFlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDA0LCAweDAwLCAweDQ4LAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4NDgsCi0JMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHhiNSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDIwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhiNiwgMHgwNiwgMHgyMiwgMHg0MCwgMHhiNSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwNiwgMHgwMCwgMHg1NCwKLQkweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAotCTB4MWMsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4ZDksIDB4MDEsIDB4MDAsIDB4YmEsIDB4MDYsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZTcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDYsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU5LCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDNjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwYSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDBjLCAweGM4LCAweDAxLCAweDAwLCAweGVhLCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDcsIDB4MjIsIDB4MDEsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZDksIDB4MDYsIDB4YTMsIDB4MDcsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkYSwgMHgwNiwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwNywKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDAyLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLCAweGVjLCAweDA2LCAweDIyLCAweDQwLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTYsIDB4MDYsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MjMsIDB4MDcsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MDYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4YTgsIDB4NDAsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNiwgMHhhOCwgMHg0MCwgMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDE5LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgzYSwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDNiLCAweGUwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZmEsIDB4MDYsIDB4MjMsIDB4MWEsCi0JMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgwMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDIzLCAweDA3LCAweDAwLCAweDAxLCAweDM0LCAweGMwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDFkLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MzAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgzMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDcsIDB4MjIsIDB4MWEsCi0JMHgwMiwgMHg1MCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHgwMSwgMHgzNCwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDAwLCAweDAwLCAweDE5LCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDJkLCAweDE0LAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgxNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKLQkweDE0LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MTIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MjMsIDB4MDcsIDB4MDAsIDB4MWEsCi0JMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDcsIDB4YTMsIDB4MTIsIDB4MGUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgxMCwgMHgwNywgMHg2MCwgMHgwNywgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxMiwKLQkweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDBkLCAweDE2LCAweDk0LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAyLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4ODYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwNywgMHhhOCwgMHg1YywKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweDIyLCAweDBkLCAweDE0LCAweDUwLCAweDAwLCAweDAwLAotCTB4NDAsIDB4MDcsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwNywgMHgyMiwgMHg0MiwgMHgyMywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDIzLCAweDA3LCAweDAwLCAweDQxLCAweDIzLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHgwNywgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4M2YsIDB4MDcsIDB4YTIsIDB4MGQsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MDcsIDB4MjIsIDB4NDYsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDJjLCAweDA3LCAweDIyLCAweGYyLAotCTB4NjQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyOSwgMHgwNywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGUzLCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHhlMSwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzMsIDB4MDcsIDB4MWYsIDB4ZjAsIDB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhkMywgMHgwNiwgMHgwMCwgMHg0YywgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwKLQkweDBmLCAweDgwLCAweDAxLCAweDAwLCAweGQzLCAweDA2LCAweDIzLCAweDA3LCAweDE0LCAweDZjLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDNjLCAweDA3LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4ZDMsIDB4MDYsIDB4MDAsIDB4MDMsIDB4MGMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDYsIDB4MDAsIDB4MGQsCi0JMHgxOCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgwNywgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE5LCAweDBhLCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJkLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDksIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MzgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MGQsIDB4MDAsIDB4MjAsIDB4NTAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY0LCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxZCwKLQkweDk0LCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkxLCAweGIwLCAweDAxLCAweDAwLAotCTB4NTIsIDB4MDcsIDB4YTAsIDB4ZmMsIDB4OTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg1MCwgMHgwNywgMHhhMiwgMHg0MSwgMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDE4LCAweDk0LCAweGY0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmQsIDB4MTgsIDB4OTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDcsIDB4YTAsIDB4ZmMsCi0JMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDVhLCAweDA3LCAweGEyLCAweDQxLCAweDk1LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDgwLCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDJkLCAweDAwLAotCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHg0OCwgMHhjMSwgMHgyZCwgMHgwMCwgMHg2NCwgMHgwNywgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgyYywgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDllLCAweDg1LCAweGIwLCAweDJkLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLAotCTB4M2QsIDB4YzMsIDB4MmQsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MmQsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgyZSwgMHgxZCwKLQkweDgyLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDE4LCAweDgyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NmUsIDB4MDcsIDB4YTAsIDB4NDEsCi0JMHg4MCwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweDBhLCAweDAwLCAweDJlLCAweDMwLAotCTB4ODEsIDB4ODQsIDB4MDEsIDB4MDAsIDB4NzIsIDB4MDcsIDB4OTAsIDB4NDAsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwKLQkweDkzLCAweGE0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ4LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4MTksIDB4ZTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsCi0JMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwNywgMHhhMCwgMHgxOSwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBkLCAweDAwLCAweDJmLCAweDFlLAotCTB4MzIsIDB4YzAsIDB4MDEsIDB4MDAsIDB4N2QsIDB4MDcsIDB4YTIsIDB4NDAsIDB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg3YywgMHgwNywgMHhhMCwgMHgxYywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYzLCAweGYzLCAweDM4LCAweDk0LCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MWUsCi0JMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxYSwgMHg5OCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDhiLCAweDA3LCAweDIyLCAweDQ2LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg4OSwgMHgwNywgMHgyMiwgMHhmMiwKLQkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ODYsIDB4MDcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVmLAotCTB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDkxLCAweDA3LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDliLCAweDA3LCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg5YiwgMHgwNywgMHgyMiwgMHhmMiwKLQkweDY0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MDcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlMywgMHg5ZiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGViLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDJmLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgxNywgMHhmMCwgMHgwMSwgMHgwMCwgMHhhMSwgMHgwNywgMHg5MCwgMHhmMiwKLQkweDE2LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwNywgMHgyMiwgMHhmMiwgMHg2NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4YTksIDB4MDcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4OWYsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGM5LCAweDA3LCAweDIyLCAweDQwLCAweDE1LCAweDZjLCAweDAwLCAweDAwLCAweGI0LCAweDA3LCAweGEyLCAweDQ0LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhiMywgMHgwNywgMHgyMiwgMHg5ZiwgMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGNjLCAweDAxLCAweDAwLCAweGU0LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4M2YsIDB4YzMsIDB4MDEsIDB4MDAsIDB4ZTYsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNywgMHgwNywgMHhhMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAxLCAweDAwLCAweGM5LCAweDA3LCAweDIyLCAweDQwLAotCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmEsIDB4MDcsIDB4MjAsIDB4MWUsIDB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgzYywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg5ZiwgMHgwMCwgMHgxZSwKLQkweDI0LCAweDMwLCAweDAxLCAweDAwLCAweGJmLCAweDA3LCAweDIyLCAweDA4LCAweDJlLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgyMywgMHgwNywgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDlmLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDlmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDcsIDB4YTIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4OWYsIDB4MDAsIDB4MWYsCi0JMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHhlNiwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjZSwgMHgwNywgMHhhMiwgMHg0MSwKLQkweDg3LCAweDdjLCAweDAwLCAweDAwLCAweGNmLCAweDA3LCAweDAwLCAweDFlLCAweDNlLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlOCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDlmLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjcsIDB4MDcsIDB4MDAsIDB4YmMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMywgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAzLCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JfSwKLQl7Ci0JMHgzMSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzNCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDM1LCAweDgwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODAsIDB4ODEsIDB4ODAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZSwgMHg4NywgMHhhMiwgMHg0MCwgMHg5MSwgMHg2ZiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDkwLCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDJlLCAweGEyLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjQsIDB4ODksIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHg5NSwgMHgyYSwgMHhjOCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlZSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODAsIDB4MTEsIDB4ODEsCi0JMHg5OCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDFhLCAweDgwLCAweDExLCAweDgyLCAweDk4LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4ODcsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMywgMHg4MCwgMHhhMiwgMHg0MiwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjIsIDB4ODAsIDB4MTEsIDB4ODEsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODAsIDB4NTEsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMiwgMHg4MCwgMHgxMSwgMHg4MiwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDIyLCAweDgwLCAweDUyLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJjLCAweDgwLCAweDAwLCAweDQ4LAotCTB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyNiwgMHg4MCwgMHhhMiwgMHg1MywgMHgwNywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHg1MywKLQkweDA3LCAweDkwLCAweDAxLCAweDAwLCAweDJhLCAweDgwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAwLCAweDAwLAotCTB4MjksIDB4ODAsIDB4YTIsIDB4NTIsIDB4MDcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4NTIsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MywgMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4ZjMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4NWMsIDB4OTUsIDB4MmUsIDB4YTIsIDB4NTIsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmNCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDQ1LCAweGIxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGMsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDA1LCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDA1LCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweGRlLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGZkLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZmQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5YiwgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDU4LCAweDk1LCAweDIwLCAweDQ0LAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgyNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHhlZSwKLQkweDk2LCAweDg4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk3LCAweGYwLCAweDAxLCAweDAwLAotCTB4NDQsIDB4ODAsIDB4YTIsIDB4NDMsIDB4OTcsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMCwgMHhhNiwgMHgzNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE0LCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwNiwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY1LCAweDk5LCAweDAxLCAweDAwLCAweDA1LCAweDEwLCAweDAwLCAweDQwLCAweGY1LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDksIDB4MDAsIDB4NDAsIDB4ZjUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDg4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGEwLCAweDAzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YTIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg5YSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHg5NSwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDk1LCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDksIDB4ZGQsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5MSwgMHhiMywgMHgwMSwgMHgwMCwgMHhlMCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIzLCAweDAxLCAweDAwLCAweDVjLCAweDk1LCAweDIwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHgwNiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDJmLCAweDgxLCAweDAxLCAweDAwLCAweDhkLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZTUsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweGRkLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDQxLCAweGUxLCAweGMxLCAweDAwLCAweDAwLCAweDc4LCAweDE4LCAweDAwLCAweDQwLAotCTB4NDksIDB4OTksIDB4MDEsIDB4MDAsIDB4MTksIDB4MDUsIDB4MjIsIDB4NTQsIDB4ODEsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg2YywgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHhiNCwKLQkweDY5LCAweGRmLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTgsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NDAsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4N2QsIDB4ODAsIDB4MjIsIDB4NDAsCi0JMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHg3YSwgMHg4MCwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRmLCAweDY5LCAweDkzLCAweDAxLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDU4LAotCTB4NjksIDB4OTMsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHhmNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgwLCAweDgwLCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4NjksIDB4OTMsIDB4MDEsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NTgsCi0JMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGY2LCAweDE1LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4NWMsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHhmYSwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg5NiwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk2LCAweDgwLCAweDIyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLAotCTB4OTMsIDB4ODAsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsCi0JMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg1OCwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDM4LCAweDA1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDFlLCAweDAwLCAweDAwLCAweDQ4LAotCTB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDAyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNSwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDlmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZDcsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzIsIDB4MDEsIDB4MDAsIDB4NDEsCi0JMHg4MSwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg1MSwgMHg0OCwgMHhmZCwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDU1LCAweDAxLCAweDUyLCAweDQ4LCAweGZkLCAweDkzLCAweDAwLCAweDAwLCAweDU1LCAweDAxLCAweDU1LCAweDQ5LAotCTB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4NTYsIDB4NGEsIDB4ZmQsIDB4ODMsIDB4MDAsIDB4MDAsCi0JMHg1MCwgMHgwMSwgMHg5MSwgMHg4MSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHgwMSwgMHg0NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDkxLCAweDgyLCAweDgwLCAweDMwLCAweDAwLCAweDAwLAotCTB4NTUsIDB4MDEsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHhiNCwgMHg4MCwgMHg0MywgMHgzMCwgMHgzZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZSwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDQxLCAweDNkLCAweGMzLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDIsIDB4ZWMsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZSwgMHgwMywgMHgwMCwgMHhjYiwgMHhhMywgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDQ2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDIwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4ZDAsIDB4ZTEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YmYsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg5OCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDgwLCAweDAwLCAweDQwLCAweDhiLCAweGIzLCAweDAwLCAweDAwLCAweGIxLCAweDAzLCAweDAwLCAweDQwLAotCTB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODAsIDB4YTIsIDB4NDIsIDB4OTcsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHhhMSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDA0LCAweDgwLCAweDk0LCAweDAwLCAweDAwLAotCTB4ODAsIDB4MTUsIDB4M2YsIDB4NDIsIDB4OTcsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMywgMHgwMiwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA3LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAotCTB4OTksIDB4Y2IsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4ZjMsIDB4ODMsIDB4MDEsIDB4MDAsCi0JMHhkMSwgMHg4MCwgMHhhMiwgMHg0MiwgMHg5NywgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwKLQkweGYzLCAweDkzLCAweDAxLCAweDAwLCAweGFlLCAweDAzLCAweDAwLCAweGNiLCAweGEzLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg4MCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY5LCAweDAyLCAweDAwLCAweDIwLCAweDQyLCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4NDEsIDB4MDUsIDB4NmMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4Y2IsCi0JMHhkYiwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDYwLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGRlLCAweDgwLCAweGE4LCAweGIxLAotCTB4OGMsIDB4MzMsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhlMCwgMHg4MCwgMHhhOCwgMHhiMSwgMHg5NCwgMHgzMywgMHgwMCwgMHgwMCwgMHhlNiwgMHg4MCwgMHgxNCwgMHhjNiwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweGM2LCAweDgzLCAweGY0LCAweDAxLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MjIsIDB4NGYsIDB4ODMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YzIsIDB4ODAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMSwgMHgwMCwgMHhjNiwgMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGM2LCAweDk3LCAweGEzLCAweDAxLCAweDAwLCAweGMyLCAweDgwLCAweDFmLCAweDVjLAotCTB4OTcsIDB4NTMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4ODIsIDB4MWUsIDB4YzYsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHg0MywgMHg4MSwgMHhmMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDEwLCAweGM5LCAweDAwLCAweDAwLCAweDM5LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NmEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4ODIsIDB4MDAsIDB4Y2EsCi0JMHg2MywgMHhiMywgMHgwMCwgMHgwMCwgMHg2MSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQ4LCAweDgxLCAweDAwLCAweDRkLCAweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDUyLCAweDgxLCAweDAwLCAweDRlLAotCTB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0OCwgMHg4MSwgMHgwMCwgMHg0YywgMHg4MywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGUzLCAweDgxLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLAotCTB4NzEsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGYwLCAweDAzLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLAotCTB4OWIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg3ZiwgMHg4MSwgMHgwMCwgMHg0MCwgMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4NiwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweGMxLCAweGIxLCAweDAwLCAweDAwLCAweDg3LCAweDgxLCAweDAwLCAweDQwLCAweGMxLCAweGIxLCAweDAwLCAweDAwLAotCTB4ODgsIDB4ODEsIDB4MDAsIDB4NDAsIDB4YzEsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ODksIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHhjMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDhhLCAweDgxLCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDE4LCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTcsIDB4ODIsIDB4MDAsIDB4YmIsIDB4YWIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgyNSwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjZiwgMHhiMywgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMywgMHgwMCwgMHg0MCwKLQkweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGU4LCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MjYsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweDc3LCAweGIzLCAweDAwLCAweDAwLCAweDQ5LCAweDgxLCAweDAwLCAweDRkLAotCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MDAsIDB4NGUsIDB4NjEsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg0MSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHg4MSwgMHgwMCwgMHg0YywKLQkweDgzLCAweGIwLCAweDAwLCAweDAwLCAweDQxLCAweDgxLCAweDAwLCAweGJiLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MjQsIDB4ODEsIDB4MDAsIDB4YmIsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHg0ZCwgMHhiMywgMHgwMCwgMHgwMCwKLQkweDcwLCAweDA1LCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAwLCAweDAwLCAweGEwLCAweDA1LCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ODEsIDB4MjIsIDB4NDIsIDB4OGYsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgxZSwgMHg4MSwgMHgyMiwgMHg0MSwgMHg4ZiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MSwgMHgxZSwgMHhjYSwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDgxLCAweDFmLCAweGNhLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDIsCi0JMHg4ZiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhjZCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDgyLCAweDAwLCAweDQxLCAweDhmLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAotCTB4Y2YsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MSwgMHgwMCwgMHhhNiwgMHhjNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGE2LCAweGM2LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4OGYsIDB4YjMsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MTgsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgyZiwgMHg5YywgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNiLCAweDgxLCAweDAwLCAweDQwLCAweDM5LCAweDMzLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDJmLCAweDliLAotCTB4ODksIDB4YjAsIDB4MDEsIDB4MDAsIDB4M2IsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzcsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHg5YSwgMHg4OSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzYiwgMHg4MSwgMHgwMCwgMHg0MCwKLQkweDM1LCAweDMzLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDJmLCAweDk5LCAweDg5LCAweGIwLCAweDAxLCAweDAwLAotCTB4M2IsIDB4ODEsIDB4MDAsIDB4NDAsIDB4MzMsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YWUsCi0JMHg0NywgMHhjOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4ZTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhZSwKLQkweDYzLCAweGRkLCAweDAxLCAweDAwLCAweDM2LCAweDgxLCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MzMsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ODEsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwKLQkweGY0LCAweDgyLCAweDFhLCAweDQ0LCAweDkzLCAweDkzLCAweDAwLCAweDAwLCAweDM5LCAweDgxLCAweDQyLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4ODEsIDB4MDAsIDB4NTgsIDB4NjksIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMCwgMHhkMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGEyLCAweDQwLCAweGUxLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHhlMSwgMHhkMSwgMHgwMSwgMHgwMCwKLQkweDQxLCAweDgxLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDUsIDB4ODEsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg0MiwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwKLQkweDYzLCAweGIxLCAweDAxLCAweDAwLCAweDQ1LCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NGEsIDB4ODEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4MSwgMHgwMCwgMHhiYiwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHgyOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDRkLCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NTAsIDB4OTUsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTMsIDB4ODEsIDB4MDAsIDB4YmIsCi0JMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg5NSwgMHgyZiwgMHg0MCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU1LCAweDgxLCAweDIyLCAweDQwLCAweDk1LCAweDdmLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDYwLCAweDQwLAotCTB4OTUsIDB4ODMsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg1NiwgMHg4MSwgMHgzNiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDU3LCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTksIDB4ODEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2MywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDViLCAweDgxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4NDEsIDB4NDMsIDB4NTEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwOCwgMHgwMCwgMHhjYSwgMHg5NSwgMHhjYiwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4MSwgMHgwMCwgMHg0MSwKLQkweDg1LCAweGMwLCAweDAwLCAweDAwLCAweDYzLCAweDgxLCAweGEyLCAweDQyLCAweDY3LCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NjcsIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ODEsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2NSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDkzLCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweGNhLAotCTB4NjksIDB4OTcsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg2OCwgMHg4MSwgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgxYSwgMHg0NCwKLQkweDkzLCAweDkzLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4ODAsIDB4Y2EsIDB4NjcsIDB4MzMsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4NDAsCi0JMHg2NSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg2ZiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwKLQkweDg1LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDM1LCAweDgwLCAweDIyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDk1LCAweDkzLCAweDAxLCAweDAwLCAweDc3LCAweDgxLCAweGEyLCAweDQ0LCAweDIxLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsCi0JMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGMzLCAweGIxLCAweDAxLCAweDAwLCAweDdhLCAweDgxLCAweDIyLCAweDViLAotCTB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYiwgMHhmZCwgMHgwMCwgMHhjYSwKLQkweDk1LCAweDliLCAweDAxLCAweDAwLCAweDBkLCAweDAxLCAweDAwLCAweGNhLCAweGM1LCAweDMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4OTUsIDB4ODMsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsCi0JMHhjNSwgMHhiMSwgMHgwMCwgMHgwMCwgMHhkZiwgMHg2ZiwgMHgwMCwgMHhjYSwgMHg5NSwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDk1LCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLAotCTB4YzcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4NWYsIDB4OTUsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgwZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDk1LCAweDgzLCAweDAxLCAweDAwLCAweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGM3LCAweGIxLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4YzksIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsCi0JMHhjYiwgMHhiMSwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhjZCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDgyLCAweDAwLCAweGNhLCAweGNmLCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQyLAotCTB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4OTgsIDB4MTQsIDB4MDAsIDB4NDAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHhlMSwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDA5LCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4OGYsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDEsCi0JMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5MSwgMHg4MSwgMHhhMiwgMHg1ZSwgMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDgwLCAweDAwLCAweGE2LCAweDA4LCAweGIxLCAweDAxLCAweDAwLCAweDkzLCAweDgxLCAweDlmLCAweDg1LAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODMsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHhjOCwgMHg4MSwgMHgyMiwgMHgzMCwgMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHg5MiwgMHg4MSwgMHhhMiwgMHg0ZiwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDIsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4NCwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAzLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweGM0LCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAotCTB4YTgsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDFjLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGE1LCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhiYSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwMSwgMHgwMCwgMHhhNiwKLQkweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDUwLCAweDBjLCAweDAwLCAweDQzLCAweDg2LCAweDk4LCAweDAxLCAweDAwLAotCTB4YWQsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHhiYSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDAxLCAweDAwLCAweGE2LCAweDg2LCAweGIwLCAweDAxLCAweDAwLCAweDYwLCAweDBjLCAweDAwLCAweDQzLAotCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YmEsIDB4ODEsIDB4YTIsIDB4NDMsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHgyMSwgMHhiMywgMHgwMSwgMHgwMCwgMHgxOCwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NzcsIDB4MDAsIDB4NDEsCi0JMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMCwgMHg0MSwgMHg4MiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQxLAotCTB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweGJiLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLAotCTB4NDAsIDB4MTMsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzMsIDB4ODEsIDB4MjIsIDB4NDMsCi0JMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLCAweGMwLCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4NDEsIDB4MDgsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhkZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAotCTB4YzUsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4NDEsCi0JMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHhkZSwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDIxLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ODMsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZSwgMHg4MywgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NywKLQkweDgzLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGMyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsCi0JMHg4MywgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhjMiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODIsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDAwLCAweDQxLCAweDgyLCAweGRjLCAweDAxLCAweDAwLAotCTB4ZDcsIDB4ODEsIDB4YTIsIDB4NWUsIDB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgwOCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGRhLCAweDgxLCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDQwLCAweDEzLCAweDAwLCAweDQxLAotCTB4MDgsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyZSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweGE2LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4ODEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZTEsIDB4ODEsIDB4YTIsIDB4NWUsCi0JMHgwYiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwOCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGM4LCAweDE0LCAweDJlLCAweGJiLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGU0LCAweDgxLCAweGEyLCAweDVlLAotCTB4MGIsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmMywgMHg4MSwgMHgyMiwgMHg0MywgMHgyMSwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMiwgMHg4MiwgMHgyMiwgMHg0NCwKLQkweDIxLCAweDZmLCAweDAwLCAweDAwLCAweDExLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MjIsIDB4NGEsCi0JMHg4MywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweGVlLCAweDgxLCAweDIyLCAweDRkLCAweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODEsIDB4MjIsIDB4NGYsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmMiwgMHg4MSwgMHgyMiwgMHg0ZSwKLQkweDgzLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDg3LCAweDkwLCAweDAxLCAweDAwLAotCTB4MGEsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDgwLCAweDAwLCAweGE2LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGEsIDB4ODIsIDB4MjIsIDB4NDIsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHgxYywgMHg4MCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZmQsIDB4ODEsIDB4MjIsIDB4NDUsIDB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg4NywgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4MSwgMHgyMiwgMHg0NCwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAxLCAweDgyLCAweDIyLCAweDQzLAotCTB4ODMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwYSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDgyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDEsIDB4ODAsIDB4MDAsIDB4YTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTMsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4MiwgMHgyMiwgMHg0MiwgMHg4MywgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDBlLCAweDgyLCAweDIyLCAweDRiLCAweDgzLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHg3ZiwgMHgwMCwgMHhhMiwgMHhhMCwgMHg4YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweGE1LCAweGIzLCAweDAxLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweGNhLAotCTB4YTcsIDB4MzMsIDB4MDEsIDB4MDAsIDB4MzYsIDB4ODEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MiwgMHhkYywgMHgwMSwgMHgwMCwgMHgxNCwgMHg4MiwgMHhhMiwgMHg1ZSwKLQkweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDA4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MTYsIDB4ODIsIDB4OWYsIDB4ODUsIDB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4MiwgMHgxNCwgMHhmNywgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDFiLCAweDgyLCAweGEyLCAweDQ5LCAweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MWUsIDB4ODIsIDB4MTUsIDB4ZjgsIDB4ODEsIDB4MTQsIDB4MDAsIDB4MDAsCi0JMHgxZSwgMHg4MiwgMHhhMiwgMHg0YSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDIwLCAweDgyLCAweGEyLCAweGM4LCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4NDAsCi0JMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlZiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDIyLCAweDgyLCAweDQyLCAweDQwLCAweGYxLCAweDMzLCAweDAwLCAweDAwLCAweDM4LCAweDgxLCAweDAwLCAweDQwLAotCTB4NjgsIDB4OTcsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4YmIsIDB4NmIsIDB4YjMsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgwMCwgMHhiYiwgMHhiMSwgMHhiMywgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGZmLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDE4LCAweGIxLCAweDAxLCAweDAwLCAweDJiLCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGY2LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDViLCAweDQzLCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4ODIsIDB4YTIsIDB4NTQsCi0JMHg4MywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLCAweDNjLCAweDgyLCAweGEyLCAweDA2LAotCTB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNiwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgyZSwgMHgwNiwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAotCTB4NDIsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQ1LCAweDgyLCAweGEyLCAweDQxLCAweDgzLCAweDUwLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTUsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OWYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgxNiwgMHgyZCwgMHgwNiwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxNiwgMHgwMCwgMHg0MCwKLQkweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweDVjLCAweDAwLCAweDAwLCAweGZiLCAweGY2LCAweGE5LCAweDAxLCAweDAwLAotCTB4NGIsIDB4ODIsIDB4YTIsIDB4NDEsIDB4ODMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDcyLCAweGY5LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDczLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5NSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhkYywgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweGIwLCAweDAxLCAweDAwLAotCTB4NTcsIDB4ODIsIDB4MjIsIDB4NzAsIDB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI2LCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDQyLAotCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NjIsIDB4ODIsIDB4MjIsIDB4NDQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg2YSwgMHg4MiwgMHgyMiwgMHg0OCwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg2NCwgMHg4MiwgMHgyMiwgMHg0YywKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDZlLCAweDgyLCAweDIyLCAweDUwLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4NmYsIDB4ODIsIDB4MjIsIDB4NTQsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ODIsIDB4MjIsIDB4NTgsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3NiwgMHg4MiwgMHgyMiwgMHg1YywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDUwLCAweDAxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLAotCTB4MDksIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweGYzLCAweDgzLCAweDAxLCAweDAwLCAweDY4LCAweDgyLCAweGEyLCAweDQyLCAweDA1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4Y2EsCi0JMHgwNywgMHgxNCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg4MiwgMHgwMCwgMHg0NiwgMHhmMywgMHg5MywgMHgwMCwgMHgwMCwKLQkweGY0LCAweDgyLCAweDIwLCAweDQzLCAweDk1LCAweDZmLCAweDAwLCAweDAwLCAweGY0LCAweDgyLCAweDgwLCAweGNhLAotCTB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MjIsIDB4MDEsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgwMCwgMHhjYiwgMHhkYiwgMHg5MSwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMSwgMHgwMCwgMHhiYywKLQkweGFiLCAweGIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweGIxLCAweGIzLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4Y2EsIDB4Y2YsIDB4YjMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4Y2EsCi0JMHg4MSwgMHg4OCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg4MiwgMHhhMiwgMHg0MCwgMHg3NCwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDYwLCAweDAwLCAweDIwLCAweDQwLCAweDYwLCAweDk5LCAweDAxLCAweDAwLCAweDczLCAweDgyLCAweGE4LCAweGIxLAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NzIsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg4MiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweGNiLCAweDgzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NzksIDB4ODIsIDB4YTIsIDB4NDEsCi0JMHg4MSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDQ1LCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDg0LCAweDgyLCAweDkxLCAweDgyLAotCTB4ODIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg4MiwgMHg4MiwgMHhhNiwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDg0LCAweDgyLCAweDU2LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwgMHhhMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLCAweGQ4LCAweDlmLCAweDAwLCAweDQxLAotCTB4OGIsIDB4YjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhjZCwgMHg4MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDg5LCAweDgyLCAweGEyLCAweDQxLCAweDgxLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5NCwgMHg4MiwgMHg5MSwgMHg4MSwgMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDQwLAotCTB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4OTIsIDB4ODIsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg5NCwgMHg4MiwgMHg1NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiNiwgMHgwMywgMHgwMCwgMHg0MCwKLQkweGExLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUyLCAweDA3LCAweDkwLCAweDAxLCAweDAwLAotCTB4YjYsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTMsCi0JMHgwNywgMHg5MCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5ZiwgMHgwMCwgMHg0MSwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwKLQkweGIxLCAweDAzLCAweDAwLCAweDQwLCAweGExLCAweDk5LCAweDAxLCAweDAwLCAweGM0LCAweDE0LCAweDJmLCAweDQwLAotCTB4OTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4NTcsIDB4MDEsIDB4MDAsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHg5NCwgMHgyZSwgMHg0MywgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDliLCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLAotCTB4NTAsIDB4OTUsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MmUsIDB4NDMsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDlmLCAweDgyLCAweGEyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4MDMsIDB4MDAsIDB4NDAsIDB4YTMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNSwgMHgwMCwgMHg0MCwKLQkweDg1LCAweDk4LCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQwLCAweDQwLCAweGU0LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTksIDB4NDEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHg0MSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg0MCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDQxLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhhMywgMHhjMSwgMHgwMSwgMHgwMCwgMHhhNSwgMHg4MiwgMHhhMCwgMHg0MiwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGE1LCAweDgyLCAweDAwLCAweDUwLCAweDg1LCAweGMwLCAweDAwLCAweDAwLAotCTB4ZGQsIDB4ODIsIDB4YTIsIDB4NDEsIDB4MDEsIDB4N2QsIDB4MDAsIDB4MDAsIDB4YjUsIDB4ODIsIDB4MjIsIDB4NTgsCi0JMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDgyLCAweGE4LCAweGIxLCAweDljLCAweDMwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LAotCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MTAsIDB4YzksIDB4MDAsIDB4MDAsCi0JMHhiNSwgMHg4MiwgMHgzMywgMHhjNCwgMHg4MSwgMHgzMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MiwgMHhhMSwgMHhhZCwKLQkweDlkLCAweDIwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDEzLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTMsIDB4NGUsIDB4NWEsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsCi0JMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHg4MiwgMHgyMiwgMHhhYiwgMHg4MCwgMHgwNCwgMHgwMCwgMHgwMCwKLQkweGJlLCAweDgyLCAweGEyLCAweDQwLCAweDAxLCAweDdkLCAweDAwLCAweDAwLCAweGMwLCAweDgyLCAweDIyLCAweDVmLAotCTB4NTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjMCwgMHg4MiwgMHgyMiwgMHg1ZSwgMHg1NywgMHg3ZCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM1LCAweDgyLCAweDIyLCAweDU0LCAweDczLCAweDdkLCAweDAwLCAweDAwLAotCTB4NzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODIsIDB4YTgsIDB4YjEsCi0JMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4NCwgMHhhMiwgMHg1ZiwgMHgwMSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGNhLCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM3LCAweDgyLCAweGEyLCAweDVmLAotCTB4NTksIDB4MjcsIDB4MDAsIDB4MDAsIDB4YzksIDB4ODIsIDB4YTIsIDB4NWMsIDB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHhkMCwgMHg4MiwgMHhhMiwgMHg1ZSwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4MiwgMHgyMiwgMHg1YywKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweGRiLCAweDgyLCAweDM3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4N2MsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4Y2EsIDB4ODIsIDB4YTgsIDB4YjEsCi0JMHgzNiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg3YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGNjLCAweDgyLCAweGE4LCAweGIxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDAwLAotCTB4MDIsIDB4ODgsIDB4MDEsIDB4MDAsIDB4YjksIDB4ODQsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhkYiwgMHg4MiwgMHgzNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg3ZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGQxLCAweDgyLCAweGE4LCAweGIxLCAweDEyLCAweDMwLCAweDAwLCAweDAwLAotCTB4ZDgsIDB4ODIsIDB4NTIsIDB4MjEsIDB4MTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NDEsCi0JMHgyZiwgMHhjMywgMHgwMSwgMHgwMCwgMHhmZiwgMHgzZiwgMHgwMCwgMHgwOSwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDAxLCAweGYwLCAweDAxLCAweDAwLCAweDExLCAweDgzLCAweDAwLCAweDM0LAotCTB4MTMsIDB4ODQsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4M2YsIDB4MTQsIDB4MDksIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsCi0JMHg2ZiwgMHg4MywgMHgwMCwgMHg0MywgMHgwMSwgMHhmMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGRiLCAweDgyLCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MTMsIDB4NGUsIDB4NWEsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MGUsIDB4ODcsIDB4YTIsIDB4NDgsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHhhMiwgMHhhYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGUzLCAweDgyLCAweDIyLCAweDVhLCAweDczLCAweDdkLCAweDAwLCAweDAwLCAweDdhLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZTAsIDB4ODIsIDB4YTgsIDB4YjEsIDB4N2UsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHhjZiwgMHgxMSwgMHhjOSwgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHhhMiwgMHg0MCwKLQkweDkzLCAweDdmLCAweDAwLCAweDAwLCAweGU5LCAweDgyLCAweDIyLCAweDQ0LCAweDkzLCAweDdmLCAweDAwLCAweDAwLAotCTB4ZTUsIDB4ODIsIDB4NDIsIDB4YTUsIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4ODIsIDB4YTIsIDB4NDAsCi0JMHg5MywgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmYiwgMHg4MiwgMHgxYSwgMHg0MCwgMHg5MywgMHg5MywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFhLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweGRkLCAweDgwLCAweGEyLCAweDQwLAotCTB4NzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDksIDB4ODcsIDB4MjIsIDB4NDQsIDB4MjEsIDB4NmYsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4NywgMHgyMiwgMHg0MCwgMHg2NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhhMiwgMHg1YiwKLQkweDczLCAweDdkLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweGEyLCAweDQ5LCAweDMzLCAweDdkLCAweDAwLCAweDAwLAotCTB4ZjMsIDB4ODIsIDB4MjIsIDB4NDgsIDB4MzMsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4OTksCi0JMHg4MCwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MSwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDk4LCAweDJmLCAweDQwLCAweDMzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4ZGQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4YiwgMHhiMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHgzMywgMHg0MCwgMHgxZiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDEzLCAweDRlLCAweDVhLCAweDkzLCAweDAwLCAweDAwLCAweGZkLCAweDgyLCAweGEwLCAweGNlLAotCTB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ODMsIDB4YTAsIDB4Y2QsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg5YywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDBmLCAweDgzLCAweDIyLCAweGI1LCAweDgxLCAweDE0LCAweDAwLCAweDAwLAotCTB4ODAsIDB4MTUsIDB4MmYsIDB4NDAsIDB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDEsIDB4ODMsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhiNCwgMHg2NSwgMHg5NywgMHgwMSwgMHgwMCwKLQkweGQwLCAweDE1LCAweDJlLCAweDQwLCAweDY5LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDQ0LAotCTB4OTMsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4YTIsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMSwKLQkweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI1LCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwYSwgMHg4MywgMHhhOCwgMHhhMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweGU5LCAweDgyLCAweDAwLCAweDg4LCAweDllLCAweGIzLCAweDAwLCAweDAwLCAweGU5LCAweDgyLCAweGEyLCAweDQxLAotCTB4NjcsIDB4NmYsIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODIsIDB4MDAsIDB4NmYsIDB4ZGIsIDB4OTEsIDB4MDAsIDB4MDAsCi0JMHgwZiwgMHg4MywgMHg0MiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhlOSwgMHg4MiwgMHgxYSwgMHg0MCwKLQkweDkzLCAweDgzLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDAwLCAweDA5LCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MGMsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MWEsIDB4ODMsIDB4YTYsIDB4NDIsCi0JMHgxMywgMHg2MCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NCwgMHgwMCwgMHg5NSwgMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDE1LCAweDgzLCAweDYxLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTYsIDB4ODMsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxZiwgMHg5NCwgMHg3MSwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4MywgMHgwMCwgMHg1OCwKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDA1LCAweDk0LCAweDAwLCAweDk1LCAweDAzLCAweDMwLCAweDAxLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDIyLCAweDgzLCAweDIzLCAweDRiLAotCTB4ZTQsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MjIsIDB4ODMsIDB4MjIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZiwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDI1LCAweDgzLCAweDgzLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MjYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjcsIDB4ODMsIDB4ODUsIDB4MTcsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHg0NywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDJjLCAweDgzLCAweDIyLCAweDU1LCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NDMsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4MywgMHgwMCwgMHg0YiwKLQkweDQ0LCAweGMxLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4ZjYsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4YTEsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDI4LCAweGYwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgyOCwgMHgzYywgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHg0NCwKLQkweDk1LCAweGIwLCAweDAxLCAweDAwLCAweDM5LCAweDgzLCAweGEyLCAweGY4LCAweDBlLCAweDMwLCAweDAwLCAweDAwLAotCTB4NDksIDB4ODMsIDB4MjIsIDB4NDEsIDB4OTUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NTAsCi0JMHg0OSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzNSwgMHg4MywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDM2LCAweDgzLCAweGEyLCAweGY4LCAweDE2LCAweDZjLCAweDAwLCAweDAwLCAweDM2LCAweDgzLCAweGEyLCAweGY4LAotCTB4MTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzYsIDB4ODMsIDB4YTIsIDB4ZjAsIDB4MWEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg0NywgMHg4MywgMHgyMiwgMHg1OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKLQkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDNlLCAweDgzLCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDIsIDB4ODMsIDB4YTIsIDB4ZjMsIDB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHhlNiwgMHg5NSwgMHgwMSwgMHgwMCwgMHg0NywgMHg4MywgMHg3NSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDNmLCAweDAwLCAweDc1LCAweGYzLAotCTB4MGMsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NSwgMHg4MywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQ3LCAweDgzLCAweDY3LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NGYsIDB4ODMsIDB4NzcsIDB4NDEsIDB4MmQsIDB4YzMsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4MjIsIDB4NTgsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRiLCAweDgzLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NGQsIDB4ODMsIDB4NjcsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHg3YywgMHg4MywgMHg3NywgMHg0MSwgMHgyZCwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKLQkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweGQ4LCAweDkyLCAweDAwLCAweDA3LCAweDE2LCAweDMwLCAweDAxLCAweDAwLAotCTB4NWQsIDB4ODMsIDB4MjIsIDB4NDEsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ODMsIDB4MjIsIDB4NDIsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDVjLCAweDgzLCAweDIyLCAweDVmLCAweDBmLCAweDdjLCAweDAwLCAweDAwLCAweGNjLCAweDkzLCAweDAwLCAweDVmLAotCTB4MDEsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4ODMsIDB4MjIsIDB4NDAsIDB4OTUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NSwgMHg4MywgMHhhMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDUzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDY1LCAweDgzLCAweDIyLCAweDIwLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NjIsIDB4ODMsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgzMywgMHg5MywgMHgwMCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDAwLCAweDQyLCAweDYxLCAweDMxLCAweDAxLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDY4LCAweDgzLCAweDgyLCAweGYwLCAweDE4LCAweDMwLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQ1LAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2YywgMHg4MywgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0YiwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDRiLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZDgsIDB4OTMsIDB4MDAsIDB4MDMsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YjQsIDB4OTEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJlLCAweDEwLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDUwLAotCTB4MDMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwKLQkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDc3LCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NzksIDB4ODMsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDQxLCAweDAwLCAweGE2LCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweGVlLCAweDA3LCAweDJlLCAweDQ3LAotCTB4OTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4ODMsIDB4MjIsIDB4MTcsIDB4OTYsIDB4MDQsIDB4MDAsIDB4MDAsCi0JMHg4ZCwgMHg4MywgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4ZCwgMHg4MywgMHgyMywgMHhhMiwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4NDEsIDB4OTcsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MDAsCi0JMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLAotCTB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhhYywgMHg4MywgMHgwMCwgMHg1YywKLQkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGExLCAweDgzLCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4OWEsIDB4ODMsIDB4MjIsIDB4NWYsCi0JMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg5NiwgMHg4MywgMHg2MiwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDk3LCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4NzIsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwZiwgMHgwMCwgMHhmNiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDllLCAweDgzLCAweGEyLCAweGE2LCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDgzLCAweDAwLCAweGYyLAotCTB4M2EsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4ODQsIDB4YTIsIDB4NGIsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGFjLCAweDgzLCAweDIyLCAweDRhLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAotCTB4YWMsIDB4ODMsIDB4MjIsIDB4NDgsIDB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MmQsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzZiwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4NiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDFmLCAweDAwLCAweDAwLCAweDQzLCAweDg0LCAweDg4LCAweDAxLCAweDAwLCAweDA1LCAweDAwLCAweDAwLCAweDQzLAotCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4OTgsIDB4OTQsIDB4M2QsIDB4NDIsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHg4MywgMHhhMiwgMHg0MiwgMHhlMCwgMHg3ZCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4NCwgMHhhMiwgMHg0YiwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4ODMsIDB4NjksIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMywgMHgwOSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDc5LCAweDQxLCAweDQ3LCAweGMzLCAweDAxLCAweDAwLCAweGIyLCAweDgzLCAweDIyLCAweGExLAotCTB4MDksIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MywgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhlYiwgMHg4MywgMHhhMywgMHg5MiwKLQkweDAzLCAweDZjLCAweDAwLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQwLCAweDk1LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NDMsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MmEsIDB4ODcsIDB4MjIsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4MywgMHgyMiwgMHg1YywgMHgxNywgMHg3YywgMHgwMCwgMHgwMCwKLQkweGI5LCAweDgzLCAweDAwLCAweDAwLCAweDJhLCAweGIwLCAweDAwLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLAotCTB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhiZCwgMHg4MywgMHhhMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ5LCAweDgzLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4NGMsCi0JMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg0NiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZjAsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YzYsIDB4ODMsIDB4YTgsIDB4NTQsCi0JMHgxNywgMHgxMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4MywgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweGQ4LCAweDgzLCAweDIyLCAweDQzLAotCTB4MmYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4OGMsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlZCwgMHg5NCwgMHgwMCwgMHg0MywKLQkweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDAyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDE1LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhkOSwgMHg4MywgMHgyOCwgMHg1NCwKLQkweDE3LCAweDEwLCAweDAwLCAweDAwLCAweGQ1LCAweDgzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZWQsIDB4OTQsIDB4MDAsIDB4NDMsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4ZGIsIDB4ODMsIDB4MjIsIDB4NTAsCi0JMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHgxNywgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDE3LCAweDk4LCAweDg4LCAweDAxLCAweDAwLCAweGRlLCAweDgzLCAweGEyLCAweDQxLAotCTB4OTksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGRmLCAweDgzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4MywgMHgyMiwgMHg0MywgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDE2LCAweDgwLCAweDAwLCAweDAzLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsIDB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHhlOSwgMHg4MywgMHhhMiwgMHg1ZiwgMHgyZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5MCwgMHg5MSwgMHgwMCwgMHgwMSwKLQkweDM4LCAweDQzLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmEsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZWQsIDB4ODMsIDB4YTIsIDB4NGIsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHg4NCwgMHg4NCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZWYsIDB4ODMsIDB4MzUsIDB4MDEsIDB4ODYsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhmNiwgMHg4MywgMHgyOCwgMHhiMSwKLQkweDMwLCAweDMwLCAweDAwLCAweDAwLCAweGYwLCAweDgzLCAweDIyLCAweDRkLCAweDc1LCAweDdkLCAweDAwLCAweDAwLAotCTB4NzQsIDB4ODQsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHg4MywgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGY2LCAweDgzLCAweGE4LCAweGIxLAotCTB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ODMsIDB4YTIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg0MywgMHhjMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwKLQkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDJjLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZGUsIDB4MDcsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4YWEsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDQwLCAweDAwLCAweDNlLCAweDQzLCAweDI3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmMCwgMHg4MywgMHhhMywgMHgwYiwKLQkweDg3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQwLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyZCwgMHg0MCwgMHgzOSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDBjLCAweDg0LCAweGEyLCAweDQwLCAweDI3LCAweDZjLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDA4LAotCTB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZGUsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MjUsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwZiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDEyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MjUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHgzMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGVlLCAweDA3LCAweDAwLCAweDQwLCAweDM3LCAweDk4LCAweDAxLCAweDAwLCAweDE0LCAweDg0LCAweDIzLCAweDAxLAotCTB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxZiwgMHg4NCwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDFiLCAweDg0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxOCwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDkyLCAweDAwLCAweDQzLAotCTB4MjMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MmUsIDB4ODQsIDB4MjIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgyNSwgMHg4NCwgMHhhOCwgMHgxNSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAzLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MjUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4NGMsCi0JMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNywgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGMwLCAweDAxLCAweDAwLCAweDE0LCAweDg0LCAweDAwLCAweDQ1LAotCTB4MWYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODQsIDB4YTMsIDB4MTIsIDB4MzYsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzMSwgMHg4NCwgMHg2OCwgMHgxYiwgMHgyOCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgxMiwKLQkweDI4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDM0LCAweDg0LCAweGE4LCAweDE1LCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDVhLCAweDg0LCAweDIyLCAweDE0LAotCTB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyNCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZCwgMHgxNCwKLQkweDEyLCAweGMwLCAweDAxLCAweDAwLCAweDUzLCAweDg0LCAweGEyLCAweDE0LCAweDM2LCAweDUwLCAweDAwLCAweDAwLAotCTB4NDQsIDB4ODQsIDB4MjIsIDB4NWMsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MiwgMHg4NCwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4M2YsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgyYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDQ5LCAweDg0LCAweDIzLCAweDAxLCAweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4MzYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NTQsIDB4ODQsIDB4MjIsIDB4MWIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1YywKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTUsCi0JMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDUwLCAweDg0LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ODQsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NCwgMHhhMiwgMHg0MCwKLQkweDI1LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDM5LCAweGMwLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MzksIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsCi0JMHgyNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDg0LCAweDAwLCAweGYwLCAweDMwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODQsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxOSwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDVkLCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHgyYiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxOCwgMHgwMCwgMHgyZSwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDY0LCAweDg0LCAweDIyLCAweDUwLCAweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU2LAotCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHg2NywgMHg4NCwgMHhhMiwgMHg0MSwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NSwKLQkweDE3LCAweDkwLCAweDAxLCAweDAwLCAweDZhLCAweDg0LCAweDIyLCAweDQzLCAweDJmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4MDAsIDB4MjAsIDB4MWQsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YywgMHg4NCwgMHhhMywgMHg0MCwgMHgyNywgMHg2YywgMHgwMCwgMHgwMCwKLQkweDZlLCAweDg0LCAweDYwLCAweDVmLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAwLCAweDBiLAotCTB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MTMsIDB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NywgMHhhMiwgMHg1ZiwKLQkweDJmLCAweDdjLCAweDAwLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTAsIDB4OTEsIDB4MDAsIDB4MDEsCi0JMHgzOCwgMHg0MywgMHgwMSwgMHgwMCwgMHgyYSwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3NiwgMHg4NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDc4LCAweDg0LCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4ODMsIDB4ODQsIDB4MjIsIDB4MTMsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4M2QsIDB4NDMsCi0JMHg4MywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2UsIDB4ODQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4NCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDdhLCAweDg0LCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4YTYsCi0JMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDUyLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyYSwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweGY0LCAweDAxLCAweDAwLAotCTB4M2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHgwMCwgMHgwNywgMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDk1LCAweDg0LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDkzLCAweDg0LCAweDIyLCAweDQyLAotCTB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5NCwgMHg4NCwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDBmLCAweGIwLCAweDAwLCAweDAwLCAweDlkLCAweDg0LCAweGEyLCAweDVhLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4NTMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4OWQsIDB4ODQsIDB4MjIsIDB4MjAsCi0JMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHg5YSwgMHg4NCwgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDMzLCAweDkzLCAweDAwLCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjUsIDB4OTUsIDB4MDAsIDB4NDIsIDB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywKLQkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4ODQsIDB4MjIsIDB4M2EsCi0JMHgwMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDAxLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhNywgMHg4NCwgMHhhMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDAxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MWUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDUsIDB4OTQsIDB4MDAsIDB4OTUsCi0JMHgwMywgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDIyLCAweDAwLCAweDJkLCAweGYwLAotCTB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MjAsIDB4MDAsIDB4YTYsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHg4NCwgMHgyMiwgMHgxNywgMHg5NiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0YiwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDRjLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4YjIsIDB4ODQsIDB4ODMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4NCwgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDQzLCAweGMxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweGY2LAotCTB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YTEsIDB4MmEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHhkOCwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiNCwgMHg5MSwgMHgwMCwgMHg0MSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmUsIDB4ODQsIDB4NjQsIDB4NDcsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4NCwgMHhhOCwgMHgxYiwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDc0LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmQsIDB4MDMsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4NCwgMHgwMSwgMHhmYiwgMHgwOCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDM3LCAweDg1LCAweDg3LCAweGZiLCAweDIyLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLAotCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwNywgMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHhkOCwgMHg5MiwgMHgwMCwgMHgwNywKLQkweDE2LCAweDMwLCAweDAxLCAweDAwLCAweGRhLCAweDg0LCAweDIyLCAweDQxLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4Y2UsIDB4ODQsIDB4MjIsIDB4NDIsIDB4ODEsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4NCwgMHgyMiwgMHg1ZiwgMHgwZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDM4LCAweDAwLCAweDAwLCAweDA0LCAweDdlLCAweDg5LCAweDAxLCAweDAwLCAweGQyLCAweDg0LCAweGE2LCAweDVmLAotCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkNywgMHg4NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MGMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MCwgMHgwNSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4ODQsIDB4YTIsIDB4NWEsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg1MywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhlMiwgMHg4NCwgMHgyMiwgMHgyMCwKLQkweDg1LCAweDZjLCAweDAwLCAweDAwLCAweGRmLCAweDg0LCAweDljLCAweDBmLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzMsIDB4OTMsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg5NSwgMHgwMCwgMHg0MiwgMHg2MSwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDkwLCAweDA0LCAweDAwLCAweDA3LAotCTB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4NCwgMHgyMSwgMHgwNCwKLQkweDgwLCAweDIwLCAweDAwLCAweDAwLCAweGU3LCAweDg0LCAweDAwLCAweDQwLCAweDEwLCAweGM5LCAweDAwLCAweDAwLAotCTB4YmQsIDB4ODcsIDB4MDAsIDB4NGIsIDB4ODEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODUsIDB4MDAsIDB4NDMsCi0JMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHg4NSwgMHgwMCwgMHhmYiwgMHgyMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGJkLCAweDg3LCAweDAwLCAweDQxLCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDRlLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ODUsIDB4MDAsIDB4NWEsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlZiwgMHg4NCwgMHgwMCwgMHg0NywgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg1MywKLQkweDgxLCAweGIwLCAweDAwLCAweDAwLCAweGJkLCAweDg3LCAweDAwLCAweDU2LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4YTAsIDB4MGEsCi0JMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4NCwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY0LCAweDg0LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDUzLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NTQsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmZSwgMHg4NCwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4NCwgMHhhMiwgMHgwYSwKLQkweGU0LCAweDZkLCAweDAwLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDVkLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0JMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhmYywgMHg4NCwgMHhhMCwgMHg5MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDdiLCAweDg4LCAweDAwLCAweDVlLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDAwLCAweDQwLAotCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4NSwgMHgyMCwgMHg5MSwgMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4OCwgMHgwMCwgMHg1NCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4N2IsIDB4ODgsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YiwgMHg4OCwgMHhhMCwgMHgwYSwgMHhlNCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDI0LCAweDAwLCAweDAwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweDdiLCAweDg4LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhmNCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHhhMCwgMHg0MiwKLQkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGJkLCAweDg3LCAweDAwLCAweDU0LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHgxYSwgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLCAweDEzLCAweDg1LCAweDIyLCAweDBiLAotCTB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4MjUsIDB4ODUsIDB4MjIsIDB4NTAsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YTIsIDB4NTQsCi0JMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4NSwgMHgyMiwgMHg1NSwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDgyLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDEwLCAweDg1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODUsIDB4MjIsIDB4NTMsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRiLCAweDgwLCAweGY0LCAweDAxLCAweDAwLAotCTB4MGMsIDB4YmMsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjAsIDB4ODUsIDB4MjIsIDB4NDMsCi0JMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHg0YiwgMHg4MCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDg1LCAweGEyLCAweDQzLCAweDgwLCAweDZjLCAweDAwLCAweDAwLCAweDdjLCAweDk2LCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MjEsIDB4ODUsIDB4NDYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgyNCwgMHg4NSwgMHhhMCwgMHhmMCwgMHgzMCwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgxNiwgMHg4NSwgMHgxZSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFlLCAweDQxLCAweDMxLCAweGMzLCAweDAxLCAweDAwLAotCTB4NWQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MjUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjksIDB4ODUsIDB4OWMsIDB4MGYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDMzLCAweDkzLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDE0LCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDE4LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDBjLCAweGUwLCAweDk5LCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDQsIDB4MDAsIDB4MDcsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsCi0JMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4NSwgMHgzMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweGExLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweGJkLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MjgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQxLCAweDg1LCAweDIyLCAweDQ2LCAweDIzLCAweDdjLCAweDAwLCAweDAwLCAweDNkLCAweDg1LCAweDIyLCAweDQwLAotCTB4ODcsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgzZiwgMHg4NSwgMHgyMiwgMHg0MSwgMHg4NywgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDQxLCAweDg1LCAweDIyLCAweDQyLCAweDg3LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4ODUsIDB4NjYsIDB4MWIsCi0JMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDc2LCAweDQxLCAweDQxLCAweGMzLCAweDAxLCAweDAwLCAweDcwLCAweDg1LCAweDIzLCAweDkyLAotCTB4MTUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NzAsIDB4ODUsIDB4YTIsIDB4NDUsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg3NCwgMHg4NSwgMHgyMiwgMHg0YiwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGEyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg2ZSwgMHg4NSwgMHgyMiwgMHgwOCwgMHg0MCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDEyLAotCTB4MjQsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NGEsIDB4ODUsIDB4YWEsIDB4NDEsIDB4MjcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgxMywgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHg2YSwgMHg4NSwgMHgyNiwgMHg0MCwKLQkweDIzLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLAotCTB4NjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgxNywgMHgwMCwgMHgwMCwgMHhkMCwgMHhhMiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDU3LCAweDg1LCAweGEyLCAweDQwLCAweDgzLCAweDZjLCAweDAwLCAweDAwLCAweDYzLCAweDg1LCAweDAwLCAweDQxLAotCTB4ODMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDIsIDB4NDQsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgyMSwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHg1MCwKLQkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweDVjLCAweDg1LCAweGEyLCAweDQ0LCAweDIzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgyMCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NWYsIDB4ODUsIDB4YTgsIDB4NDIsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGEzLCAweGMxLCAweDAxLCAweDAwLAotCTB4NTUsIDB4ODUsIDB4YTIsIDB4NDEsIDB4ODEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NmEsIDB4ODUsIDB4MjIsIDB4NDAsCi0JMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY3LCAweDg1LCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlZSwgMHgwNywgMHgwMCwgMHg0MCwKLQkweDI1LCAweDk4LCAweDAxLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLAotCTB4N2QsIDB4ODUsIDB4MDAsIDB4MTcsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4N2UsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3NCwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDk0LCAweDkyLCAweDAwLCAweDkyLCAweDI1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MzEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NzQsIDB4ODUsIDB4MjIsIDB4MDgsIDB4MmUsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg3ZCwgMHg4NSwgMHgwMCwgMHg0MSwgMHgyNywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4YzYsIDB4OTUsIDB4MDAsIDB4MGEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgwZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDg1LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDg4LAotCTB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgwMCwgMHg0MSwgMHgzZiwgMHhjMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDBmLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4OTEsIDB4ODUsIDB4MmEsIDB4NDAsIDB4ODEsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDg2LCAweDg1LCAweGEyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDg2LCAweDg1LCAweGEyLCAweDQ3LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4ODUsIDB4YTMsIDB4MDcsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg4MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHg4OSwgMHg4NSwgMHhhMywgMHg0MCwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGNkLCAweDAxLCAweDAwLAotCTB4OGIsIDB4ODUsIDB4MDAsIDB4NDAsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwZSwgMHhjYywgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDhmLCAweDg1LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMSwgMHgyZCwgMHg0MCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDViLCAweDg2LCAweDIyLCAweDBmLCAweDQyLCAweDA1LCAweDAwLCAweDAwLCAweGEyLCAweDg1LCAweDljLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4NSwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4OWEsIDB4ODUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGEyLCAweDg1LCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDIsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweGMwLCAweDA2LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4NTQsCi0JMHgyOSwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MGUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MGEsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHhhNCwgMHgwYywgMHhjOCwgMHgwMSwgMHgwMCwgMHhkNiwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDAyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MjQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLCAweGZlLCAweDdmLCAweDAwLCAweDA1LAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjYiwgMHg4NSwgMHgyMiwgMHgwMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwKLQkweDIzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE0LCAweDgwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjgsIDB4ODUsIDB4YTMsIDB4MDcsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiOSwgMHg4NSwgMHg2OCwgMHgwMSwgMHgxYSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDA3LCAweDFhLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAotCTB4MDIsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDBhLCAweGMwLCAweDAxLCAweDAwLAotCTB4YzUsIDB4ODUsIDB4MjIsIDB4NDAsIDB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YzUsIDB4ODUsIDB4MjIsIDB4NDIsCi0JMHgyMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTksIDB4ODUsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhjMiwgMHg4NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YzcsIDB4ODUsIDB4YTgsIDB4NDAsCi0JMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU5LCAweDg1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDQ0LAotCTB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHhkMCwgMHg4NSwgMHhhMywgMHgxMiwKLQkweDBlLCAweDZjLCAweDAwLCAweDAwLCAweGQxLCAweDg1LCAweDYwLCAweDA3LCAweDFhLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGQsCi0JMHgxNiwgMHg5NCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwYiwgMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQzLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4ODUsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODYsIDB4MjIsIDB4MGQsCi0JMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkZSwgMHg4NSwgMHgyMiwgMHgwZCwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBkLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweGUyLCAweDg1LCAweDAwLCAweDBkLAotCTB4MjQsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MmIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHhhMiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDEwLCAweGM4LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLCAweDI1LCAweDk4LCAweDAxLCAweDAwLAotCTB4ZTQsIDB4ODUsIDB4MjIsIDB4NDIsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZTksIDB4ODUsIDB4MDAsIDB4NDEsCi0JMHgyMywgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGU1LCAweDg1LCAweGE4LCAweDVjLAotCTB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNywgMHg4NiwgMHgyMiwgMHgwZCwKLQkweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDA2LCAweDg2LCAweGEyLCAweDBkLCAweDBlLCAweDUwLCAweDAwLCAweDAwLAotCTB4ZjUsIDB4ODUsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgzMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGYzLCAweDg1LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHg4NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDgwLCAweDAwLCAweDAzLCAweDQ2LCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4ZTEsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDYsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxOCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGZhLCAweDg1LCAweDFmLCAweGYwLAotCTB4MGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YjIsIDB4ODUsIDB4MDAsIDB4NGMsIDB4MGQsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHg1ZiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHhiMiwgMHg4NSwgMHgyMywgMHgwNywKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMywgMHg4NiwgMHhhOCwgMHg0NiwKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGIyLCAweDg1LCAweDAwLCAweDAzLCAweDBjLCAweGIwLCAweDAwLCAweDAwLAotCTB4YjIsIDB4ODUsIDB4MDAsIDB4MGQsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MmUsIDB4MTQsCi0JMHgwYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweGZlLCAweDdmLCAweDAwLCAweDA1LCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJhLCAweGYyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGQsIDB4ODYsIDB4MjIsIDB4NDAsIDB4MzEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgzOCwgMHg5NiwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDgxLCAweDAwLCAweGY2LCAweDgwLCAweGNlLCAweDAxLCAweDAwLAotCTB4MTEsIDB4ODYsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg0MywgMHhjMSwgMHgwMSwgMHgwMCwgMHgxMywgMHg4NiwgMHgyMiwgMHgwYiwgMHhlZCwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGExLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGExLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHg0YSwgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNiwKLQkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDFiLCAweDg2LCAweDIyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MWYsIDB4NDMsIDB4MGUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4ODYsIDB4YTAsIDB4NDYsCi0JMHgwZiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDFmLCAweDg2LCAweDIyLCAweDQ4LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGYsIDB4YTIsIDB4NDIsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgyMiwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4OSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHhhMiwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDg5LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4OTUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyNSwgMHg4NiwgMHhhMCwgMHg0MSwgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDkxLCAweGMwLCAweDAxLCAweDAwLCAweDJhLCAweDg2LCAweDIyLCAweDQ3LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MmEsIDB4ODYsIDB4YTAsIDB4NDMsIDB4ODksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgyYSwgMHg4NiwgMHgyMCwgMHg0NSwgMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgyYSwgMHg4NiwgMHhhMCwgMHg0MSwKLQkweDBlLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODksIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4ODYsIDB4YTIsIDB4NDEsCi0JMHg5NSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzMywgMHg4NiwgMHgyMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQ4LCAweDkyLCAweGY0LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDQ4LAotCTB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsIDB4MzEsIDB4ODYsIDB4OTAsIDB4NDgsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHhhMiwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDIwLCAweDkzLCAweGE0LCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MTQsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDEyLCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGNkLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLAotCTB4ODAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg4NiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDQ0LCAweDg2LCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MTAsCi0JMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwgMHg0MywgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDQ3LCAweDg2LCAweGEyLCAweDQ3LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4Y2MsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODYsIDB4MDAsIDB4MTcsCi0JMHgxMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkMywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDRiLCAweDg2LCAweGEwLCAweDA3LAotCTB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDE3LCAweGYwLCAweDAxLCAweDAwLCAweDRmLCAweDg2LCAweDkwLCAweGYyLCAweDE2LCAweDQwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCi0JMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgyYSwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDJiLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg1OSwgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4NTYsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxNywgMHgxMCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweGMwLCAweDg2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDYzLCAweDg2LCAweDljLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg2MywgMHg4NiwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NjAsIDB4ODYsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDY4LCAweDg2LCAweDIyLCAweDA3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDIsIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHhhMSwgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwKLQkweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDJlLCAweDAzLCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmQsIDB4ODYsIDB4MjIsIDB4NDAsCi0JMHgzMSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDEwLAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODYsIDB4YTgsIDB4NDAsCi0JMHgyMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDJkLCAweDUyLCAweDExLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDAwLCAweGE0LCAweDBjLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4NDQsIDB4MjMsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweDgwLCAweDg2LCAweGEzLCAweDEyLCAweDBlLCAweDZjLCAweDAwLCAweDAwLCAweDgxLCAweDg2LCAweDY4LCAweDA3LAotCTB4MWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwKLQkweDNlLCAweDk2LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDg2LCAweDg2LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGI1LCAweDg2LCAweDIyLCAweDBkLAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OGMsIDB4ODYsIDB4MjIsIDB4MGQsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4NiwgMHgwMCwgMHgwZCwKLQkweDI0LCAweGQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDJiLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4YTIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgyNSwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDkyLCAweDg2LCAweDIyLCAweDQyLCAweDIzLCAweDZjLCAweDAwLCAweDAwLCAweDk3LCAweDg2LCAweDAwLCAweDQxLAotCTB4MjMsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MywgMHg4NiwgMHhhOCwgMHg1YywKLQkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MGQsCi0JMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiNCwgMHg4NiwgMHhhMiwgMHgwZCwgMHgwZSwgMHg1MCwgMHgwMCwgMHgwMCwKLQkweGEzLCAweDg2LCAweDIyLCAweDQ2LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHhhMSwgMHg4NiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4OWUsIDB4ODYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NiwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweGUxLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJkLCAweDA2LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHg4NiwgMHgxZiwgMHhmMCwKLQkweDBlLCAweDMwLCAweDAwLCAweDAwLCAweDdiLCAweDg2LCAweDAwLCAweDRjLCAweDBkLCAweGMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4NWYsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODYsIDB4MjMsIDB4MDcsCi0JMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YjEsIDB4ODYsIDB4YTgsIDB4NDYsCi0JMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg3YiwgMHg4NiwgMHgwMCwgMHgwMywgMHgwYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDdiLCAweDg2LCAweDAwLCAweDBkLCAweDE4LCAweGMwLCAweDAwLCAweDAwLCAweGJlLCAweDg2LCAweDIyLCAweDVjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgzYywgMHg0NCwgMHgyMywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgxMCwKLQkweDQ4LCAweGMxLCAweDAxLCAweDAwLCAweGJlLCAweDg2LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhiYiwgMHg4NiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LAotCTB4MTAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4ODYsIDB4MDAsIDB4NDAsIDB4MmIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGM1LCAweDg2LCAweDIyLCAweDlmLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MWMsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZjUsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkNywgMHg5NSwgMHgwMCwgMHg0MSwgMHgzZiwgMHg0MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4MGYsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgyYSwgMHg4NywgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDBlLCAweGY0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAxLCAweDg0LCAweDAxLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MWEsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OTIsIDB4MDAsIDB4MDcsCi0JMHgxNiwgMHgzMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4NiwgMHgyMiwgMHg0MSwgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGQyLCAweDg2LCAweDIyLCAweDQyLCAweDgxLCAweDZjLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4ODYsIDB4MjIsIDB4NWYsIDB4MGYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYywgMHg4NiwgMHhhMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDUzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZGMsIDB4ODYsIDB4MjIsIDB4MjAsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZDksIDB4ODYsIDB4OWMsIDB4MGYsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDMzLCAweDkzLCAweDAwLCAweDVjLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDI1LCAweDk1LCAweDAwLCAweDQyLAotCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5MCwgMHgwNCwgMHgwMCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YmQsIDB4ODcsIDB4YTIsIDB4NWYsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0MywgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDM3LCAweDAwLCAweDJkLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGYzLAotCTB4OGUsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTAsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHhlYiwgMHg4NiwgMHgyMiwgMHg0OCwgMHg4ZSwgMHg2YywgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLCAweGU3LCAweGUxLCAweDAxLCAweDAwLAotCTB4ZWIsIDB4ODYsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4ODYsIDB4MjMsIDB4NDEsCi0JMHg4ZiwgMHg2YywgMHgwMCwgMHgwMCwgMHhiZCwgMHg4NywgMHgwMCwgMHg0NywgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGJkLCAweDg3LCAweDAwLCAweDQ4LCAweDgxLCAweGIwLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHg4NiwgMHgyMiwgMHgwYSwgMHg5MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHhhYSwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDkxLCAweDMwLCAweDAxLCAweDAwLCAweGJkLCAweDg3LCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4YjAsIDB4MDAsIDB4MmQsIDB4NDUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZmMsIDB4ODYsIDB4MjIsIDB4ZjAsCi0JMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhMywgMHgwMCwgMHgyZCwgMHgzMCwgMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGFjLCAweDAwLCAweDJkLCAweGYzLCAweDgyLCAweGUwLCAweDAxLCAweDAwLCAweGY2LCAweDg2LCAweGEzLCAweDQxLAotCTB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5OCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDgyLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDk4LCAweGU4LCAweDAxLCAweDAwLAotCTB4YmQsIDB4ODcsIDB4MjAsIDB4NGMsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4MmQsIDB4NDEsCi0JMHg5OCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg4NywgMHgyMCwgMHhmMCwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDE0LCAweDg3LCAweDIyLCAweDBhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDAwLCAweDBjLAotCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhiZCwgMHg4NywgMHgwMCwgMHg0OSwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHhhNiwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDg3LCAweDIyLCAweDQzLCAweDIxLCAweDZmLCAweDAwLCAweDAwLAotCTB4MTMsIDB4ODAsIDB4MDAsIDB4NDAsIDB4ODAsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4MCwgMHgwMCwgMHg0MCwgMHg4MCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDA1LCAweDg3LCAweGEyLCAweDVlLCAweDBiLCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDcsIDB4ODcsIDB4OWYsIDB4ODUsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwYiwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlYywgMHg4MiwgMHgyMiwgMHg0MCwKLQkweDU3LCAweDdkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDU3LCAweDk5LCAweDAxLCAweDAwLAotCTB4MGIsIDB4ODcsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHhkZCwgMHg4MiwgMHgxYSwgMHg1YiwgMHg2OSwgMHg5MywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGNiLCAweDgxLCAweGM4LCAweDAxLCAweDAwLCAweDExLCAweDg3LCAweDIyLCAweDQwLAotCTB4ZjIsIDB4N2YsIDB4MDAsIDB4MDAsIDB4YzQsIDB4ODAsIDB4MDAsIDB4NmYsIDB4OTcsIDB4MzMsIDB4MDEsIDB4MDAsCi0JMHgxMywgMHg4NywgMHgyMiwgMHg0MCwgMHg3MywgMHg3ZCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg4MCwgMHgwMCwgMHg0MSwKLQkweDhiLCAweGIzLCAweDAwLCAweDAwLCAweDBlLCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MWIsIDB4ODcsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxYiwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTgsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHg5MiwgMHgyMiwgMHgwMiwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDFjLCAweDg3LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MmYsIDB4OTIsIDB4MWEsIDB4MDIsCi0JMHg2OCwgMHg5NywgMHgwMCwgMHgwMCwgMHgyNiwgMHg4NywgMHg5YywgMHgwZiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDI2LCAweDg3LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgyMywgMHg4NywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MzksIDB4OTIsIDB4MjIsIDB4MDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MjcsIDB4ODcsIDB4NDIsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwKLQkweDM5LCAweDkyLCAweDFhLCAweDAyLCAweDY4LCAweDk3LCAweDAwLCAweDAwLCAweDMxLCAweDg3LCAweDljLCAweDBmLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgzMSwgMHg4NywgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4MmUsIDB4ODcsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHgyMiwgMHgwMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDMyLCAweDg3LCAweDQyLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4OTcsIDB4MDEsIDB4MDAsCi0JMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhhNiwKLQkweDU2LCAweGIxLCAweDAxLCAweDAwLCAweDU2LCAweDk1LCAweDJmLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4ODIsIDB4ODcsIDB4YTIsIDB4NDAsIDB4ZTcsIDB4NmQsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OTQsIDB4MjksIDB4NDEsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhlZiwgMHg5MywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDBlLCAweGIwLCAweDAxLCAweDAwLCAweDI5LCAweDAwLCAweDAwLCAweDQwLAotCTB4MGQsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTIsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKLQkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MTAsIDB4MzQsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHgzNCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDE4LCAweDAwLCAweDQwLCAweDExLCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDBkLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjYsIDB4ODcsIDB4MjIsIDB4MGIsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHg0NywgMHg4NywgMHg2MCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKLQkweDg0LCAweDg5LCAweDAxLCAweDAwLCAweDRlLCAweDg3LCAweDA1LCAweGMyLCAweDI0LCAweDMwLCAweDAwLCAweDAwLAotCTB4NTgsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg4NywgMHg3MCwgMHhmMCwgMHgxOCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDY2LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4NWQsIDB4ODcsIDB4YTAsIDB4NDgsIDB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgzNSwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDU3LCAweDg3LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1NCwgMHg4NywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDIwLCAweDk4LCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODMsIDB4ODcsIDB4MDAsIDB4ZjgsIDB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg1OCwgMHg4NywgMHhhMiwgMHg0MSwgMHgyMywgMHg1MCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgxMCwKLQkweDM0LCAweGQ4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDM0LCAweDk0LCAweDAxLCAweDAwLAotCTB4MjAsIDB4MTgsIDB4MDAsIDB4NDAsIDB4MTEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MWEsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg2MSwgMHg4NywgMHhhOCwgMHgwOSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDIzLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDM1LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4NzIsIDB4ODcsIDB4MjIsIDB4NDEsCi0JMHgwZCwgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDZlLCAweDg3LCAweGEwLCAweGFhLCAweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDcsIDB4MTIsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDFiLCAweGIwLCAweDAxLCAweDAwLCAweDQ1LCAweDg3LCAweDAwLCAweDQxLCAweDE3LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4MTIsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NDUsIDB4ODcsIDB4ODMsIDB4NDEsCi0JMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxNywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQ1LCAweDg3LCAweDAwLCAweDQxLCAweDFiLCAweGMwLCAweDAwLCAweDAwLCAweDdkLCAweDg3LCAweDIzLCAweDQwLAotCTB4MjMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MzUsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxYSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg3YSwgMHg4NywgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NzcsIDB4ODcsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDIwLCAweDk4LCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDgzLCAweDg3LCAweDAwLCAweGY4LAotCTB4MTgsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2IsIDB4ODcsIDB4YTIsIDB4NDEsIDB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgwZiwgMHhjMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4NywgMHhhMCwgMHhhYSwKLQkweDBmLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDBmLCAweGIwLCAweDAxLCAweDAwLAotCTB4YjgsIDB4OTQsIDB4MjAsIDB4MDcsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHgwZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDBjLCAweDgwLCAweGQ4LCAweDAxLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDBjLAotCTB4N2UsIDB4ODksIDB4MDEsIDB4MDAsIDB4OTUsIDB4ODcsIDB4MjYsIDB4NTQsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHg4YiwgMHg4NywgMHg4NywgMHgwYywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDhiLCAweDg3LCAweDI4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4OGIsIDB4ODcsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4ODcsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5MCwgMHg4NywgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDBkLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsCi0JMHg4YywgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NSwgMHg4NywgMHgyMiwgMHg0OSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NTQsCi0JMHg3NywgMHg3ZCwgMHgwMSwgMHgwMCwgMHg5MCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQwLCAweDYyLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NTQsIDB4NzcsIDB4N2QsIDB4MDEsIDB4MDAsCi0JMHg5NSwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHg5NCwgMHgyZiwgMHg1NSwKLQkweGYxLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweGE2LCAweDU2LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZjksIDB4ODIsIDB4YTIsIDB4NDEsIDB4ZTUsIDB4NTEsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg4NywgMHg0NCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGEwLCAweDg3LCAweGEyLCAweDkzLCAweDU3LCAweDZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4NTcsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YWIsIDB4MjcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHhmOSwgMHg4MiwgMHgyMiwgMHg1MCwgMHhmZCwgMHg3ZiwgMHgwMCwgMHgwMCwgMHhmOSwgMHg4MiwgMHgyMiwgMHg1MSwKLQkweGZkLCAweDdmLCAweDAwLCAweDAwLCAweGY5LCAweDgyLCAweGEyLCAweDQxLCAweDFkLCAweDUzLCAweDAwLCAweDAwLAotCTB4NTAsIDB4NDYsIDB4MDAsIDB4NDAsIDB4MWQsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGFjLCAweDg3LCAweDIyLCAweDQwLAotCTB4YjUsIDB4NmYsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwNCwgMHgwMCwgMHg0MSwgMHhiNSwgMHg1MywgMHgwMSwgMHgwMCwgMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweGZkLCAweDgzLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MTYsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHg0OSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgxZSwgMHgwMCwgMHgwMCwgMHg0OCwgMHhiMiwgMHhjYiwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLAotCTB4OTEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHhiNSwgMHgzMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgxNiwgMHgyMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDgyLCAweDAwLCAweDQwLCAweGI1LCAweDMzLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4NDgsIDB4YjIsIDB4Y2IsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGEsCi0JMHhiNCwgMHg4YiwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDBhLCAweDAwLCAweDAwLCAweDQ4LCAweGIyLCAweGNiLCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDRhLAotCTB4YjQsIDB4ZjcsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhmOSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDA4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGMzLCAweDg3LCAweDAwLCAweDRiLCAweDEwLCAweGM5LCAweDAwLCAweDAwLCAweGU2LCAweDhhLCAweDAwLCAweDQxLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDhiLCAweDAwLCAweDQxLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDRjLCAweDhiLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4OGIsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0YywgMHg4YiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg4YiwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDhiLCAweDhiLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI0LCAweDhiLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4OGIsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4ZCwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGM0LCAweDhiLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhiLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzMsIDB4OGMsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MywgMHg4YywgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDczLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OGMsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4YjEsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YjEsIDB4OGMsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGIxLCAweDhjLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg4YywgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYSwgMHg4YywgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYSwgMHg4YywgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGVjLCAweDhjLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGMsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlYywgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlYywgMHg4YywgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OGMsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGY1LCAweDhjLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA1LCAweDhkLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZjLCAweDhjLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ1LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQxLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4NzEsIDB4OGMsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4OGMsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3MSwgMHg4YywgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDcsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OGQsIDB4MDAsIDB4NDQsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4OGQsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OGQsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg3YiwgMHg4ZCwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg4YiwgMHgwMCwgMHg0NCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDAzLCAweDhkLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OGQsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhiOCwgMHg4YiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZCwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDk0LCAweDhkLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlNCwgMHg4YSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDhmLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4OGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4YiwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDdmLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGI4LCAweDhiLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGQsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4ZiwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDhmLCAweGIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4MDgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MjAsIDB4NDcsCi0JMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDk2LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4OTYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg4MywgMHg4OCwgMHgwMCwgMHg0YiwgMHgxMCwgMHhjOSwgMHgwMCwgMHgwMCwgMHhhYywgMHg4ZCwgMHgwMCwgMHg0OSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGU1LCAweDhkLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWIsIDB4OGQsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmOSwgMHg4ZCwgMHgwMCwgMHg0MiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNSwgMHg4ZSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDc1LCAweDhlLCAweDAwLCAweDQ0LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4ZSwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlZSwgMHg4ZCwgMHgwMCwgMHg0MSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQzLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NDUsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGVlLCAweDhkLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OGQsIDB4MDAsIDB4NDksIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlZSwgMHg4ZCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlZSwgMHg4ZCwgMHgwMCwgMHg0YiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGVlLCAweDhkLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDhlLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDhlLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWMsIDB4OGUsIDB4MDAsIDB4NDUsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHg4ZSwgMHgwMCwgMHg0NSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTEsIDB4MDAsIDB4NDYsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4ZSwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY5LCAweDhkLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTUsIDB4OGUsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDc1LCAweDhlLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDFkLCAweDhlLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NzQsIDB4OGUsIDB4MDAsIDB4NGMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA5LCAweDhmLCAweDAwLCAweDQ0LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDksIDB4OGYsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwOSwgMHg4ZiwgMHgwMCwgMHg0YiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZWUsIDB4OGQsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTQsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzYiwgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDNiLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg5ZCwgMHg4ZiwgMHgwMCwgMHg0MCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDhmLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MGMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYSwgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGMxLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMxLCAweDhmLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhhZSwgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDBjLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4YWUsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDhlLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg4ZSwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHg4ZSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGQ0LCAweDhlLCAweDAwLCAweDRjLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDJiLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MWYsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDJiLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHg4ZiwgMHgwMCwgMHg0OCwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGYsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQyLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjMywgMHg4ZiwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDRiLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGMzLCAweDhmLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhjMywgMHg4ZiwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGMzLCAweDhmLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzMsIDB4OGYsIDB4MDAsIDB4NGMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhjMywgMHg4ZiwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4ZiwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGRkLCAweDhmLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHg5MCwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZDgsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGQ4LCAweDkwLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGZiLCAweDkwLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhmYSwgMHg5MCwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4OTAsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZhLCAweDkwLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4Y2UsIDB4OGYsIDB4MDAsIDB4NDEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDhmLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NDQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDhmLCAweDAwLCAweDRiLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGEsIDB4OGYsIDB4MDAsIDB4NDMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg4ZiwgMHgwMCwgMHg0NSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGRhLCAweDhmLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGRhLCAweDhmLCAweDAwLCAweDQ3LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4OGYsIDB4MDAsIDB4NDgsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4ZGEsIDB4OGYsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGUsIDB4MDAsIDB4NGMsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGUwLCAweDhlLCAweDAwLCAweDRjLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4ZiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MzYsIDB4OTEsIDB4MDAsIDB4NDIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MSwgMHgwMCwgMHg0NCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MzYsIDB4OTEsIDB4MDAsIDB4NGIsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDkxLCAweDAwLCAweDQ1LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MzYsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0OCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzNiwgMHg5MSwgMHgwMCwgMHg0YywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OGUsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4OGUsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4NDEsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDQxLCAweDkxLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg5MSwgMHgwMCwgMHg0MywKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAzLCAweDhmLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTEsIDB4MDAsIDB4NGEsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQ1LCAweDkxLCAweDAwLCAweDRkLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDU2LCAweDkxLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MSwgMHgwMCwgMHg0YSwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NTYsIDB4OTEsIDB4MDAsIDB4NDMsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDM0LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDY3LCAweDkxLCAweDAwLCAweDQzLAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDMsIDB4OGYsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg2NywgMHg5MSwgMHgwMCwgMHg0MywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4OTEsIDB4MDAsIDB4NGQsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweGY5LCAweDhkLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OGUsIDB4MDAsIDB4NDIsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg1LCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg4ZSwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweGY5LCAweDhkLCAweDAwLCAweDQ2LCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MTMsIDB4OGUsIDB4MDAsIDB4NDcsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4OGUsIDB4MDAsIDB4NDgsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODUsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OTEsIDB4MDAsIDB4NGEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDg3LCAweDkxLCAweDAwLCAweDRhLCAweDA5LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMywgMHg4ZiwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDQyLCAweDkxLCAweDAwLCAweDQ2LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg5MSwgMHgwMCwgMHg0NiwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDhkLCAweDkxLCAweDAwLCAweDQyLCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4OTEsIDB4MDAsIDB4NGEsCi0JMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4OGQsIDB4OTEsIDB4MDAsIDB4NDYsIDB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg4ZSwgMHgwMCwgMHg0NywgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDhlLCAweDAwLCAweDQ4LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MSwgMHgwMCwgMHg0YSwKLQkweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLAotCTB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0JMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZCwgMHg4ZSwgMHgwMCwgMHg0ZCwgMHgwOSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDEzLCAweDhlLCAweDAwLCAweDQ3LCAweDA5LCAweGIwLCAweDAwLCAweDAwLCAweDEzLCAweDhlLCAweDAwLCAweDQ4LAotCTB4MDksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDg1LCAweGIwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweDg1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsIDB4ODUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MmUsIDB4NGIsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgxZiwgMHg4NywgMHgwMCwgMHgwNCwgMHhlNiwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweGNmLCAweDhhLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZiwgMHgxZiwgMHgwMCwgMHgwZiwKLQkweDFlLCAweDhjLCAweDAxLCAweDAwLCAweGVlLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZGYsIDB4OGEsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweGRmLCAweDhhLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhkYywgMHg4YSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGEzLCAweDg0LCAweDIyLCAweDAyLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4OGEsIDB4NDIsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMiwgMHg2OCwgMHg5NywgMHgwMSwgMHgwMCwKLQkweGEzLCAweDg0LCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDA1LCAweDAwLCAweDJlLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MWYsIDB4ODcsIDB4MDAsIDB4MDQsIDB4ZTYsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHgwNiwgMHgwNywgMHg0MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA3LCAweGQwLCAweDAxLCAweDAwLCAweGQ0LCAweDAwLCAweDJlLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsCi0JMHg5NiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZlLAotCTB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4OTYsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NGIsCi0JMHg5NCwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg5NSwgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDk2LCAweGMwLCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDM0LAotCTB4OTcsIDB4ODQsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTQsIDB4ZTUsIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDg2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgwOSwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmUsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4OGIsIDB4MjAsIDB4NGIsCi0JMHg5NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDBlLCAweDhiLCAweDAwLCAweDQxLCAweDk1LCAweGMwLCAweDAwLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MTgsIDB4OGIsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDE0LCAweDhiLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4OCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgxZCwgMHg4YiwgMHg0NCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDIwLCAweDhiLCAweGEyLCAweDRjLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4MjEsIDB4OGIsIDB4MDAsIDB4NGMsIDB4ZmQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MjIsIDB4OGIsIDB4MjAsIDB4ZjAsCi0JMHg1NiwgMHg2ZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg1NiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDFjLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg3MCwgMHgwMCwgMHgwMCwgMHgwNSwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4OGIsIDB4YTgsIDB4NDQsCi0JMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4YywgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDQ2LCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg2NCwgMHgwMCwgMHgwMCwgMHg0MywgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MzAsIDB4OGIsIDB4YTgsIDB4NDQsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywgMHg4NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDM4LCAweDAwLCAweDJlLCAweGE3LCAweDg3LCAweGMwLCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4OGIsIDB4MjIsIDB4NDMsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg0NSwgMHhjMSwgMHgwMSwgMHgwMCwgMHgzYiwgMHg4YiwgMHgyMiwgMHg0NCwKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MjAsIDB4YTIsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDNmLCAweDhiLCAweDIzLCAweDBiLCAweGU1LCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHg1MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMSwgMHgwMCwgMHg0MywKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0NCwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVjLCAweDAwLCAweDJlLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MywgMHg5NCwgMHgwMCwgMHg0MSwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4NGYsIDB4OGIsIDB4YTIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1MywgMHg4YiwgMHgwMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDg2LCAweDAwLCAweDJmLCAweDQ5LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDUzLCAweDhiLCAweGEyLCAweGYyLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHg1NiwgMHg4YiwgMHhhMiwgMHg0NiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4NWEsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MmYsIDB4NDYsCi0JMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg1YSwgMHg4YiwgMHhhMiwgMHhmMiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzNCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmYiwKLQkweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZiLCAweDEwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHgxNiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywgMHgxNCwgMHhmNCwgMHgwMSwgMHgwMCwKLQkweDg1LCAweDhiLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDZkLCAweDhiLCAweDIyLCAweDBhLAotCTB4MTYsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwKLQkweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDcwLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDZjLCAweDhiLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGIsIDB4MDAsIDB4NDEsIDB4MTUsIDB4ZDAsIDB4MDAsIDB4MDAsCi0JMHg4NSwgMHg4YiwgMHgyMiwgMHgwYSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywKLQkweDEzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OGIsIDB4MjIsIDB4NDEsIDB4MTUsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxMSwgMHhjMCwgMHgwMSwgMHgwMCwgMHg3OSwgMHg4YiwgMHhhMCwgMHg0MywKLQkweDExLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDExLCAweGIwLCAweDAxLCAweDAwLAotCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgzLCAweGIwLCAweDAxLCAweDAwLCAweGMyLCAweDk0LCAweDAwLCAweDQ3LAotCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgyYywgMHg5MiwgMHgwMCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLAotCTB4ODEsIDB4OGIsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsCi0JMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg4YiwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwKLQkweDM3LCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDUxLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzNCwgMHgwMCwgMHgyZSwgMHg0MSwgMHhmNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwKLQkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDhkLCAweDhiLCAweDAwLCAweDQ4LCAweDE5LCAweDkwLCAweDAwLCAweDAwLAotCTB4MzQsIDB4MDAsIDB4MmUsIDB4NDEsIDB4ZjUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTEsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDkyLCAweDhiLCAweDIyLCAweDQ1LAotCTB4MjMsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmYsIDB4ZjAsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwgMHg4YywgMHhjMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM1LCAweDAwLCAweDJkLCAweGYwLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAotCTB4NTgsIDB4MDAsIDB4M2UsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OGIsIDB4MjIsIDB4NDgsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4ZCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDBhLCAweDhjLCAweGMwLCAweDAxLCAweDAwLCAweDM4LCAweDAwLCAweDJhLCAweDRhLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM4LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4ZjgsCi0JMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHg4YiwgMHgyMywgMHgwMSwgMHgxNCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGMsIDB4MDAsIDB4MjAsIDB4ZjAsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0NCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMCwgMHgyMCwgMHg0MSwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGE4LCAweDAwLCAweDJkLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4YWEsIDB4OTUsIDB4MDAsIDB4ZjAsIDB4MjQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OGIsIDB4YTIsIDB4NDQsCi0JMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwgMHhhYywgMHg4YiwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDU3LCAweDkzLCAweDAwLCAweDQwLCAweDNiLCAweDMwLCAweDAxLCAweDAwLCAweGQyLCAweDhiLCAweGEyLCAweDA4LAotCTB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OGIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhkMiwgMHg4YiwgMHhhMiwgMHgwOCwKLQkweDNjLCAweDMwLCAweDAwLCAweDAwLCAweDUwLCAweDAwLCAweDIwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NTQsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MjAsIDB4MDEsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHg5MywgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4ZCwgMHg4YiwgMHgyMiwgMHg0YSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzYsIDB4OTMsIDB4MDAsIDB4ZjMsCi0JMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDYwLCAweDAwLAotCTB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4ODUsIDB4MTEsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyZiwgMHhmMCwKLQkweDhjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGYwLCAweDhjLCAweGMwLCAweDAxLCAweDAwLAotCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NWYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNCwgMHg4YiwgMHgwMCwgMHg0OSwgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweGM5LCAweDhiLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDU3LCAweDkzLCAweDAwLCAweDQwLAotCTB4M2IsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2QsIDB4OGIsIDB4YTIsIDB4MDgsIDB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg5NCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4Y2QsIDB4OGIsIDB4YTIsIDB4MDgsIDB4M2MsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NWYsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDUwLCAweDAwLCAweDJkLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLCAweDU0LCAweDAwLCAweDJkLCAweGYwLAotCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGUsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgyZCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDE0LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwLCAweDhjLCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4NDYsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MmQsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHg2OCwgMHhmMiwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MzcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzNiwgMHhkMCwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHg0MCwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4ODEsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ODksIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGRlLCAweDhiLCAweGE4LCAweDQwLCAweDIzLCAweDMwLCAweDAwLCAweDAwLCAweGNlLCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhlYywgMHg4YiwgMHg4MiwgMHg0MSwgMHgyMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGU5LCAweDhiLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhlNiwgMHg4YiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGY0LCAweDhiLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4OGIsIDB4YTMsIDB4MDEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4OGIsIDB4MDAsIDB4MDYsCi0JMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGYzLCAweDhiLCAweDIwLCAweDAyLCAweDM2LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OGIsIDB4MDAsIDB4MDIsIDB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHhmNiwgMHg4YiwgMHhhMywgMHgwMSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHhmNywgMHg4YiwgMHgwMCwgMHgwNiwKLQkweDA0LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDA0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MTYsIDB4OTQsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MGIsCi0JMHgxNiwgMHhkOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgzZSwgMHg5NiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhmYywgMHg4YiwgMHhhOCwgMHgxMywgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHgzMywgMHg4YywgMHgyMiwgMHgwMiwKLQkweDE0LCAweDUwLCAweDAwLCAweDAwLCAweDQ0LCAweDAwLCAweDJkLCAweDAyLCAweDBjLCAweGQwLCAweDAxLCAweDAwLAotCTB4MjMsIDB4OGMsIDB4YTIsIDB4MDIsIDB4MDIsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4OGMsIDB4MjIsIDB4NWMsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA5LCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4NDQsIDB4MDAsIDB4MmQsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgzOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0YywgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDM4LCAweDAwLCAweDJmLCAweGYyLCAweDAyLCAweGIwLCAweDAxLCAweDAwLCAweDI0LCAweDhjLCAweDIyLCAweDAxLAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OGMsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZCwgMHgwMywKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDE2LCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxMywgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDJmLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweGUxLCAweGMxLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4NGEsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHg4YywgMHhhOCwgMHg1YywgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4YywgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDM4LCAweGMwLCAweDAxLCAweDAwLAotCTB4MmUsIDB4OGMsIDB4MjIsIDB4MDYsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgzMywgMHhjMCwgMHgwMSwgMHgwMCwgMHgyYywgMHg4YywgMHhhMiwgMHgwMiwgMHgzNiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDhmLCAweDBkLCAweDQyLCAweDMxLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MTAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhmMCwgMHgwNywgMHgwMCwgMHg0MCwgMHgzNywgMHg5OCwgMHgwMSwgMHgwMCwgMHhlMiwgMHg4YiwgMHgwMCwgMHhhMSwKLQkweDFhLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAotCTB4ZTIsIDB4OGIsIDB4MDAsIDB4MDIsIDB4MzYsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDAsIDB4MjAsIDB4MWMsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1NCwgMHgwMCwgMHgyMCwgMHgxMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDRlLCAweDAwLCAweDIwLCAweDAxLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDIwLCAweDBhLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4OGMsIDB4MDAsIDB4NWYsIDB4MDEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzNywgMHgwMCwgMHgyZCwgMHg0NiwgMHgwMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDgwLCAweGY0LCAweDAxLCAweDAwLCAweDM3LCAweDhjLCAweGEwLCAweDQzLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDNlLCAweDhjLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ2LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgzYiwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGQzLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NDUsIDB4OGMsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDQyLCAweDhjLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2MCwgMHgwMSwgMHgyZiwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwKLQkweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDE3LCAweGYwLCAweDAxLCAweDAwLAotCTB4NGEsIDB4OGMsIDB4OTAsIDB4ZjIsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NiwgMHgyMCwgMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDAwLCAweGE2LCAweDJhLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLAotCTB4MmEsIDB4OTQsIDB4MDEsIDB4MDAsIDB4NGQsIDB4OGMsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHhkMCwgMHgwMCwgMHgxZSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg4YywgMHgyOCwgMHg0MCwKLQkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDRlLCAweDhjLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4NTUsIDB4OGMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg4YywgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDUyLCAweDhjLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDAwLAotCTB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NWIsIDB4OGMsIDB4MjIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHhmOCwKLQkweDAwLCAweDMwLCAweDAxLCAweDAwLCAweDU4LCAweDhjLCAweGEyLCAweDQxLCAweDNiLCAweDUwLCAweDAwLCAweDAwLAotCTB4NWYsIDB4OGMsIDB4MDAsIDB4NDksIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MWUsCi0JMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDVmLCAweDhjLCAweDAwLCAweDQ5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFkLCAweDQ3LAotCTB4MTksIDB4ODAsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGMsIDB4MjIsIDB4NWYsIDB4MDEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4NywgMHgwMCwgMHgwMCwKLQkweDgwLCAweGIwLCAweDAwLCAweDAwLCAweDY5LCAweDhjLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjksIDB4OGMsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDY2LCAweDhjLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg2OSwgMHg4YywgMHg0MCwgMHgwNSwgMHg0OCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKLQkweDk0LCAweDg5LCAweDAxLCAweDAwLCAweDZmLCAweDhjLCAweDg1LCAweGNhLCAweDk0LCAweDMwLCAweDAwLCAweDAwLAotCTB4ZDQsIDB4OTUsIDB4MTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MGYsCi0JMHgxZSwgMHg4YywgMHgwMSwgMHgwMCwgMHhlMCwgMHg4NiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDk0LCAweDE4LCAweDAwLCAweDgwLCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQ3LAotCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhlNCwgMHg4YSwgMHgyMiwgMHg0NywgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg5NCwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDc2LCAweDhjLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODksIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgwZCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMSwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGZmLCAweGZmLCAweDAwLCAweDBiLCAweDk4LCAweDg4LCAweDAxLCAweDAwLCAweDhiLCAweDAwLCAweDJkLCAweDUwLAotCTB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OGMsIDB4OTAsIDB4NGMsIDB4MTYsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHg3ZSwgMHg4YywgMHgyMiwgMHg0MywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ1LCAweGMxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsIDB4MTcsIDB4YTQsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1YywgMHgwMSwgMHgyZSwgMHhmMiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDAwLCAweDYyLCAweDQwLCAweDdlLCAweGNkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LAotCTB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDU4LCAweDAxLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4OCwgMHg4YywgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGMsIDB4OGMsIDB4NDUsIDB4NDgsIDB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg4YywgMHgyOCwgMHg0MCwKLQkweDA1LCAweDMwLCAweDAwLCAweDAwLCAweDhkLCAweDhjLCAweDIyLCAweDQ4LCAweDc3LCAweDdkLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MWQsIDB4MDgsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgxZCwgMHg0NywgMHgxOSwgMHg4MCwgMHgwMCwgMHgwMCwKLQkweDM1LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweGYzLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OGMsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDJmLCAweGYwLCAweDI0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4YTIsIDB4OGMsIDB4YTIsIDB4NDEsCi0JMHg5ZSwgMHgwNiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0NCwgMHg4MywgMHg3MCwgMHgwMCwgMHgwMCwKLQkweDM2LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDU4LCAweDAwLCAweDNkLCAweDQzLAotCTB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MWYsIDB4ZjAsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhkNCwgMHg5NSwgMHgwMCwgMHg0OCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4NywgMHgyMywgMHg0MSwKLQkweDgzLCAweDZjLCAweDAwLCAweDAwLCAweGJmLCAweDg3LCAweDAwLCAweDQ3LCAweDgxLCAweGIwLCAweDAwLCAweDAwLAotCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDI4LCAweDAwLCAweDAwLCAweDQwLCAweDgzLCAweDk4LCAweDAxLCAweDAwLCAweGMyLCAweDk0LCAweDAwLCAweDQ3LAotCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgwMywgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhlLCAweGIwLCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5MywgMHg4YiwgMHhhMiwgMHg0MCwgMHg4ZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGIwLCAweDhjLCAweDIyLCAweDQ3LCAweDhmLCAweDdjLCAweDAwLCAweDAwLCAweDkzLCAweDhiLCAweDAwLCAweDQ4LAotCTB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4MWYsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgzNiwgMHgwMCwgMHgyZCwgMHg1ZCwgMHgwNSwgMHhiNCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZCwgMHhmMywKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDhlLCAweGIwLCAweDAxLCAweDAwLAotCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGRjLCAweDAxLCAweDAwLCAweDQwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTEsIDB4MDAsIDB4NGEsIDB4ZjAsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4YywgMHhhMiwgMHg1MCwKLQkweDhmLCAweDUwLCAweDAwLCAweDAwLCAweDM0LCAweDAwLCAweDIwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsCi0JMHg4MSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg4YywgMHhhMCwgMHg0MywgMHg4MSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDIwLCAweDQ3LAotCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MjIsIDB4NDcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0NywgMHgwYywgMHhmNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKLQkweDhmLCAweDg0LCAweDAxLCAweDAwLCAweGQ2LCAweDhjLCAweDIyLCAweDQ3LCAweDBjLCAweDZjLCAweDAwLCAweDAwLAotCTB4NTgsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ODEsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4ZDYsIDB4OGMsIDB4MWYsIDB4ZjAsCi0JMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGNmLCAweDhjLCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjYywgMHg4YywgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4Y2YsIDB4OGMsIDB4NDIsIDB4NDAsIDB4MDUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDhjLCAweDIzLCAweDQxLCAweDBkLCAweDZjLCAweDAwLCAweDAwLCAweGIxLCAweDhjLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHhiZiwgMHg4NywgMHgwMCwgMHg0OCwgMHg4MSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0MCwKLQkweDhmLCAweDZjLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YTIsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGE2LCAweDAwLCAweDJkLCAweDQ5LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweGYyLAotCTB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4YjgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHg4MCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgyLCAweGY4LCAweDAxLCAweDAwLCAweDE5LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweDk4LCAweDAxLCAweDAwLAotCTB4ZTUsIDB4OGMsIDB4YTAsIDB4NDAsIDB4ODIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHg5OCwgMHgwMSwgMHgwMCwgMHhlNSwgMHg4YywgMHhhMywgMHg0MCwgMHg4MiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGU3LCAweDhjLCAweDIwLCAweDRjLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHg4NiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMiwgMHgwMCwgMHgyMCwgMHg0MiwKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ODMsIDB4OTQsIDB4MDAsIDB4NTAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4OGQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzYsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgyZiwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHhmMCwKLQkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0NiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYyLCAweGYyLAotCTB4OTYsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4YTYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhmNCwgMHg5NCwgMHgwMCwgMHg0YSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0NiwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MjIsIDB4NDksIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODYsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHhmMiwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwKLQkweGU0LCAweDhhLCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDRhLAotCTB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDcsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDYyLCAweGYyLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDBiLCAweDhkLCAweDkwLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4NjIsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhhNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhlNCwgMHg4YSwgMHgyMiwgMHg0MCwKLQkweGU1LCAweDZkLCAweDAwLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDQxLCAweGU1LCAweGMxLCAweDAwLCAweDAwLAotCTB4ODMsIDB4OTQsIDB4MDAsIDB4NGQsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDhkLCAweGIwLCAweDAxLCAweDAwLCAweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDg3LCAweDMwLCAweDAxLCAweDAwLAotCTB4OGIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MWIsIDB4OGQsIDB4ODAsIDB4ZjMsCi0JMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGU0LCAweDhhLCAweDAwLCAweDVjLAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDUsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmNSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHg0MCwKLQkweGU1LCAweDk5LCAweDAxLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MzAsIDB4OGQsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDUxLCAweDgzLCAweGQwLCAweDAxLCAweDAwLCAweDM0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODQsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgyOCwgMHg4ZCwgMHg5ZiwgMHg0MiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MiwKLQkweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAzLCAweGYwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MmEsIDB4OGQsIDB4MzcsIDB4NWMsCi0JMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDhkLCAweGE4LCAweDRiLCAweDE5LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgxNywgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYwLCAweDk0LCAweGIwLCAweDAxLCAweDAwLAotCTB4YWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZSwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDE4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHgwMCwgMHgyMCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJiLCAweGIwLCAweDAxLCAweDAwLAotCTB4ZDgsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MGQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHgxNiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgzZiwgMHg4ZCwgMHhhMCwgMHgxNCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDBlLCAweDAwLCAweDAwLCAweGEyLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiMCwgMHgwMCwgMHgyZCwgMHgxNCwgMHhmOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg1MCwgMHgwMCwgMHg0MCwKLQkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDQ4LCAweDhkLCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MzAsIDB4MDAsIDB4NDMsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsCi0JMHgxNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg4ZCwgMHhhNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDZlLCAweDQzLAotCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MGYsIDB4OTUsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHg0YywgMHg4ZCwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDUzLCAweDhkLCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsCi0JMHhmOSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDUyLCAweDhkLCAweGEwLCAweGYwLCAweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg5MCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg0MSwKLQkweDMxLCAweGMwLCAweDAxLCAweDAwLCAweGJjLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4NTksIDB4OGQsIDB4MDYsIDB4MGMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MjAsIDB4ZjIsCi0JMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwOSwgMHg0NiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDljLCAweDAxLCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDBiLAotCTB4OTgsIDB4ODgsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NTAsIDB4MTcsIDB4ZjAsIDB4MDEsIDB4MDAsCi0JMHg1ZSwgMHg4ZCwgMHg5MCwgMHg0YywgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDYwLCAweDhkLCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MjAsCi0JMHgxNywgMHhhNCwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDVjLCAweDAxLCAweDJlLCAweGYyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDYyLCAweDQwLAotCTB4N2UsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4ODEsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgxMCwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweGYwLCAweDhkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4NTgsIDB4MDEsIDB4MDAsIDB4MDUsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDZhLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2ZSwgMHg4ZCwgMHg0NSwgMHg0OCwgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMCwgMHgwOCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDZmLCAweDhkLCAweGE4LCAweDQwLCAweDA1LCAweDMwLCAweDAwLCAweDAwLAotCTB4MzUsIDB4MDAsIDB4MWQsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsCi0JMHg4NCwgMHhjOCwgMHgwMSwgMHgwMCwgMHg3NSwgMHg4ZCwgMHhhMCwgMHg0MywgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHg4YiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwKLQkweGU3LCAweDkxLCAweDAxLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDVmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZTQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHgzNiwgMHg5MywgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDFmLCAweDhkLCAweDIyLCAweDRhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDhiLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzNiwgMHg5MywgMHgwMCwgMHhmMywgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg4YSwgMHg4YiwgMHgyMiwgMHg0YSwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGJhLCAweDhiLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MzYsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmIsCi0JMHgxMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwZiwgMHgwMCwgMHgwMCwgMHhmMywgMHg5MCwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweGYzLCAweDBjLCAweGY0LCAweDAxLCAweDAwLCAweGI0LCAweDhiLCAweDIyLCAweDA2LAotCTB4OTAsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4MTMsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgyZiwgMHhmMCwKLQkweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDJhLCAweDUwLCAweGU3LCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4NDEsIDB4MTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4OGYsIDB4OGQsIDB4YTAsIDB4NDMsCi0JMHgxMywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDkxLCAweDAwLCAweDEwLCAweDg2LCAweDMwLCAweDAxLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4OGQsIDB4NDIsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5MywgMHg5MywgMHgwMSwgMHgwMCwgMHhiNCwgMHg4YiwgMHgxYSwgMHg1ZCwKLQkweDY5LCAweDkzLCAweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDJkLCAweDEwLCAweDg2LCAweGIwLCAweDAxLCAweDAwLAotCTB4NWMsIDB4MDAsIDB4M2QsIDB4NDMsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzNSwgMHgwMCwgMHgyZiwgMHhmMCwgMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDZiLCAweGZiLCAweDg0LCAweGM4LCAweDAxLCAweDAwLCAweDljLCAweDhkLCAweGEwLCAweDQzLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MywgMHhmMywKLQkweDEyLCAweGM4LCAweDAxLCAweDAwLCAweDlmLCAweDhkLCAweGEwLCAweDQzLCAweDEzLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHg5YiwgMHg5MSwgMHgwMCwgMHg0YSwgMHhmMCwgMHgzMSwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweGEyLCAweDhkLCAweDQyLCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4OTMsIDB4OTMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHg1ZCwgMHg2OSwgMHg5MywgMHgwMSwgMHgwMCwgMHgzNywgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDExLCAweDAwLCAweDYzLCAweGYzLCAweDgyLCAweGNjLCAweDAxLCAweDAwLAotCTB4OWIsIDB4OGMsIDB4MjIsIDB4NDEsIDB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzUsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg1OCwgMHgwMCwgMHgzZCwgMHg0MywgMHhlNywgMHhlMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweGE1LCAweDhjLCAweDAwLCAweGYwLAotCTB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4MmQsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhZCwgMHg4ZCwgMHg2NSwgMHhmMiwgMHgxMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwKLQkweDEzLCAweGYwLCAweDAxLCAweDAwLCAweGIyLCAweDhkLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4ZjUsIDB4ODIsIDB4NzUsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OGQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDc1LCAweDQyLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDAwLCAweDAwLCAweDQwLAotCTB4NjEsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjQsIDB4OGQsIDB4YTgsIDB4YjEsIDB4MGMsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgxZiwgMHg5NCwgMHgwMCwgMHgxMCwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJlLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YzAsIDB4YTgsIDB4M2QsIDB4NDYsIDB4MGQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhiZSwgMHg4ZCwgMHgyMiwgMHg0MCwgMHhlMSwgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAyLCAweDQxLCAweDk3LCAweDQwLCAweDAwLCAweDAwLCAweGJiLCAweDhkLCAweDAwLCAweDUwLAotCTB4NDMsIDB4YzEsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4OGQsIDB4MjIsIDB4NGIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MiwgMHg0YiwgMHgxMiwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwNywKLQkweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4OTQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NGEsCi0JMHg0NCwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDVlLCAweDAxLCAweDAwLCAweDRiLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDA1LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHhjOCwgMHg4ZCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDksCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDAwLCAweDAwLCAweDA1LCAweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkMCwgMHg4ZCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4OGQsIDB4NjUsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDc1LCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OGQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg4ZCwgMHgyMiwgMHg0YiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGRiLCAweDhkLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4OTcsIDB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTYsCi0JMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4ZCwgMHgyMCwgMHgwOSwgMHg5NiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGUzLCAweDhkLCAweDFmLCAweDA5LCAweDk2LCAweDI0LCAweDAwLCAweDAwLCAweGY1LCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4OGQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4MywgMHg5NCwgMHgwMCwgMHg1NywgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4ZTksIDB4OGQsIDB4MjIsIDB4ZjMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NDIsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweGY0LCAweDk0LCAweDAwLCAweDUyLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQyLAotCTB4MTksIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHg5NCwgMHgwMCwgMHg1MiwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MjIsIDB4NDAsCi0JMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHhmNCwgMHg4ZCwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDE0LCAweDg3LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHg1MiwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4N2QsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg4ZCwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDg3LCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMywgMHgwMCwgMHhhNiwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDhlLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDgsIDB4MDAsIDB4MGIsIDB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHgyYSwgMHhjMCwgMHgwMSwgMHgwMCwgMHhjYywgMHg5NCwgMHgwMCwgMHgwOCwgMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDA2LCAweDhlLCAweDAwLCAweDVlLCAweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGVkLCAweDk0LCAweDAwLCAweDQzLAotCTB4NjEsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTEsIDB4MDAsIDB4NDAsIDB4OGQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg5NCwgMHgwMCwgMHgwNywgMHgxNiwgMHgxNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDBlLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwYiwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLAotCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDE5LCAweDhlLCAweDIyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4M2QsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHgxYSwgMHg4ZSwgMHgwMCwgMHg0MiwgMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHg0NSwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDc1LCAweDhlLCAweDgzLCAweDFlLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NzUsIDB4OGUsIDB4MDAsIDB4NDQsIDB4MTksIDB4OTAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZCwgMHg4ZSwgMHhhMiwgMHgwOCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDI5LCAweDhlLCAweGEyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLAotCTB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4YTAsIDB4OTgsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwNSwgMHgwMCwgMHg0MSwgMHg4OSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg4ZSwgMHhhMiwgMHg0MSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4MTUsCi0JMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwgMHgwMiwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGM2LCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHg4MywgMHg5NCwgMHgwMCwgMHgzYSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDhlLCAweDIyLCAweDQyLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MzEsIDB4OGUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDVkLCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDE1LAotCTB4OTgsIDB4YzgsIDB4MDEsIDB4MDAsIDB4NWQsIDB4OGUsIDB4YTAsIDB4MGIsIDB4OTksIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDM5LCAweDhlLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHg5OCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwYiwKLQkweDk5LCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZhLCAweDUwLCAweDk5LCAweGMwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4NjIsIDB4MDEsIDB4ODAsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgyZCwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLAotCTB4MjMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2YsIDB4NDEsIDB4ZTcsIDB4ZTEsIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHgwMCwgMHgwMCwgMHgxMSwgMHhlNCwgMHhmNSwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0NywKLQkweGU3LCAweGI1LCAweDAxLCAweDAwLCAweDRhLCAweDhlLCAweDIzLCAweDBiLCAweDgxLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4ZTUsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsCi0JMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDAyLCAweGQwLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDAwLAotCTB4MmEsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg4ZSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4MCwgMHhjZSwgMHgwMSwgMHgwMCwgMHg1YiwgMHg4ZSwgMHgyNiwgMHgxMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDJhLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LAotCTB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5OSwgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDk4LCAweGQwLCAweDAxLCAweDAwLCAweGNjLCAweDk0LCAweDAwLCAweDRjLCAweDAyLCAweDMwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NjIsIDB4OGUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZiwgMHgwOCwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGMwLCAweDAwLCAweDAwLCAweDE1LCAweGY0LCAweGM5LCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZTQsIDB4Y2QsIDB4MDEsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDMsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHhjYywgMHg5NCwgMHgwMCwgMHgwMCwgMHgyYSwgMHg0MCwgMHgwMSwgMHgwMCwgMHg2NywgMHg4ZSwgMHgyMiwgMHg0NCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDJmLCAweDQwLCAweDEzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg2OCwgMHg4ZSwgMHgwMCwgMHgwMSwgMHhlMCwgMHhkMSwgMHgwMCwgMHgwMCwKLQkweGE3LCAweDkxLCAweDAwLCAweDQwLCAweDhkLCAweDMwLCAweDAxLCAweDAwLCAweDgwLCAweDYzLCAweDAwLCAweGE2LAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4OTQsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg4ZSwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4NmQsIDB4OGUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDc1LCAweDk0LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweDczLCAweDhlLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4YSwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg3NSwgMHg4ZSwgMHgwMCwgMHg0YSwKLQkweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGIwLCAweDAxLCAweDAwLAotCTB4MjQsIDB4MDAsIDB4MmQsIDB4MTUsIDB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyZCwgMHhmMCwgMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDE0LCAweDAwLCAweDJmLCAweGYyLCAweDBjLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLAotCTB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwKLQkweDFhLCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzQsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGI5LCAweDhlLCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDI0LCAweDAwLCAweDIwLCAweDBiLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MjAsIDB4MTMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHgwMCwgMHgyMCwgMHgwNiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg4ZiwgMHg4ZSwgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDgwLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4OGYsIDB4OGUsIDB4MjIsIDB4NDAsCi0JMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDhiLCAweDhlLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweGIyLCAweDhlLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4YTAsIDB4OGUsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZWUsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGFkLCAweDhlLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHg5NiwgMHg4ZSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDljLCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4YWYsIDB4OTIsIDB4MDAsIDB4NDAsIDB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OGUsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDlmLCAweDhlLCAweDIyLCAweDA5LCAweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhlZSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzZCwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4YTMsIDB4OGUsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGE5LCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGFmLCAweDkyLCAweDAwLCAweDQwLAotCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YWEsIDB4OGUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhhYywgMHg4ZSwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGFlLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhiNSwgMHg4ZSwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDExLCAweDMwLCAweDAxLCAweDAwLCAweGI2LCAweDhlLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjgsIDB4OGUsIDB4MjIsIDB4MDksCi0JMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE5LAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4YzAsIDB4OGUsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGJjLCAweDhlLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGFmLCAweDkyLCAweDAwLCAweDQwLAotCTB4MTEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YzUsIDB4OGUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyZCwgMHgwYSwKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2EsIDB4OGUsIDB4MDMsIDB4MWUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYiwgMHg4ZSwgMHgwMCwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDIxLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweGQyLCAweDhlLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHhhMiwgMHg0YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGJhLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4OGUsIDB4OWMsIDB4MTcsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhjYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHg4NCwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJkLCAweDk1LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2MSwgMHg5NSwgMHgwMCwgMHhmMCwgMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweGU0LCAweDhlLCAweDIyLCAweDQwLCAweGU3LCAweDZkLCAweDAwLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4ZWMsIDB4OGUsIDB4YTIsIDB4NDAsCi0JMHhlNSwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg4MywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAwLCAweDIwLCAweDBiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDIwLCAweDEzLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjAsIDB4MDYsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHgyMCwgMHgwYSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgyMiwgMHgwOSwKLQkweDgwLCAweDMwLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDQwLCAweDEzLCAweDMwLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzYywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGZhLCAweDhlLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4OTksIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MWYsIDB4MTUsIDB4OTgsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhmYSwgMHg4ZSwgMHgyMCwgMHgwMSwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweDQ4LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJlLCAweDQ2LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGEwLCAweDAwLCAweDAwLCAweGE0LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweGY3LCAweDhlLCAweGE4LCAweDAwLAotCTB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhhYywgMHgwMCwgMHgyZiwgMHgwMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDE0LCAweDAwLCAweDJmLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ODAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDEsCi0JMHg4MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDdjLCAweDhlLCAweDIyLCAweDA5LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGY0LCAweDk0LCAweDAwLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4N2MsIDB4OGUsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDEzLCAweDAwLCAweDAwLCAweDQwLCAweDg3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDMsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4ZjAsCi0JMHg4NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweDJjLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MDAsCi0JMHhhOSwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjOSwgMHg5NCwgMHgwMCwgMHg0OCwKLQkweDk1LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4OGYsIDB4YTgsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDE1LCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDE0LCAweDhmLCAweDAwLCAweDQwLAotCTB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgwMCwgMHgyZCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGYwLCAweDg0LCAweDMwLCAweDAwLCAweDAwLAotCTB4MTMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODcsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDJkLCAweDhmLCAweDAwLCAweDA5LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweGNmLCAweDhhLCAweDg3LCAweDQyLAotCTB4MTksIDB4MTAsIDB4MDAsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmYsIDB4NDcsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHhlNywgMHg5MSwgMHgwMCwgMHgwMCwgMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDJiLCAweDhmLCAweDIyLCAweDQ3LCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4MWUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ZTcsIDB4MzEsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OGYsIDB4MjIsIDB4MDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHg4ZiwgMHhhMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJiLCAweDhmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHgwMCwgMHgyZCwgMHhmMiwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg0MSwgMHg5MywgMHgwMCwgMHhmMiwKLQkweDAyLCAweDMwLCAweDAxLCAweDAwLCAweDQ4LCAweDkzLCAweDAwLCAweDRiLCAweDAyLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmMsIDB4OGYsIDB4MDAsIDB4NDAsCi0JMHgwMSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDhmLCAweDIyLCAweDAwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDMxLCAweDhmLCAweGEyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzMiwgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGJjLCAweDhmLCAweDIyLCAweDVjLCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzYSwgMHg4ZiwgMHgyMiwgMHg0MCwgMHhlMywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzcsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhiYywgMHg4ZiwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NDAsIDB4OGYsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4NGQsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MiwgMHgwMCwgMHgwMiwgMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDE0LCAweDg3LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDc0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDRlLCAweDhmLCAweDIyLCAweDQyLCAweDk2LCAweDE0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4NjQsIDB4MDAsIDB4NjgsIDB4NDAsCi0JMHg5NywgMHg5OCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDA1LAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0YiwgMHg4ZiwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0ZiwgMHg4ZiwgMHhhOCwgMHg1YywgMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDJkLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTMsIDB4OGYsIDB4NjUsIDB4ZjIsIDB4MTIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHgxMywgMHhmMCwgMHgwMSwgMHgwMCwgMHg1OCwgMHg4ZiwgMHgyMiwgMHg0NywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweGY1LCAweDgyLCAweDc1LCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4NTIsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsCi0JMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHg3NSwgMHgwOSwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4YTgsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjAsIDB4OGYsIDB4YTgsIDB4NDAsCi0JMHhlMSwgMHgzMSwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDk5LCAweDNmLCAweDQyLCAweDEzLCAweGYwLCAweDAxLCAweDAwLCAweDY0LCAweDhmLCAweDY1LCAweDA1LAotCTB4NDgsIDB4MzEsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDZjLCAweDhmLCAweDIyLCAweDRiLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2YSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDYyLCAweDAwLCAweDBiLAotCTB4MTYsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHg4NCwgMHg4ZiwgMHgyMiwgMHgwMCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhjYywgMHg5MywgMHgwMCwgMHg1ZiwKLQkweDAxLCAweDEwLCAweDAxLCAweDAwLCAweDZlLCAweDhmLCAweDIyLCAweDQwLCAweDk1LCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzYsIDB4OGYsIDB4YTgsIDB4MDAsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDA0LCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NDEsIDB4OTMsIDB4MDAsIDB4NTIsCi0JMHg5NSwgMHgzMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDZlLCAweDhmLCAweDIyLCAweDQxLCAweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDBjLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDZlLCAweDhmLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLAotCTB4ZDQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHgwYywgMHg5NiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYzLCAweDRjLCAweDk3LCAweGYwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg3NSwgMHg5NCwgMHgwMCwgMHg1ZSwgMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwNywKLQkweDFhLCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDAwLCAweDAwLCAweDA3LCAweDE2LCAweDg4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4OGUsIDB4OGYsIDB4MzAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHhlNiwgMHg4MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGI3LCAweDAwLCAweDBkLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLAotCTB4ZTYsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MTAsIDB4MGYsIDB4OTQsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHg5MywgMHgwNCwgMHgwMCwgMHg1ZiwgMHg5NSwgMHgwNCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDk4LCAweDhmLCAweDIyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4OTYsIDB4OGYsIDB4NDYsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4NDEsCi0JMHgzMSwgMHhkMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODUsIDB4OTIsIDB4MDAsIDB4NDEsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGE5LCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGEyLCAweDhmLCAweDM3LCAweDVjLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTYsIDB4OGYsIDB4MjgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhMywgMHg4ZiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGE2LCAweDhmLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MTQsIDB4ODcsIDB4MTcsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NzQsIDB4MDAsIDB4MjIsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM5LCAweDk0LCAweDAwLCAweDRhLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGE5LCAweDkzLCAweDAwLCAweDVjLAotCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OGYsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyZiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiYSwgMHg4ZiwgMHgyMiwgMHg0NywKLQkweGU3LCAweDdkLCAweDAwLCAweDAwLCAweDFlLCAweDkyLCAweDAwLCAweDQwLCAweGU3LCAweDMxLCAweDAxLCAweDAwLAotCTB4YmEsIDB4OGYsIDB4MjIsIDB4MDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OGYsIDB4YTIsIDB4NDAsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGJhLCAweDhmLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MzIsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0MSwgMHg5MywgMHgwMCwgMHhmMiwgMHgwMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4YzksIDB4OTQsIDB4MDAsIDB4NDgsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4YTksIDB4OTMsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgxMCwgMHgwMSwgMHgwMCwgMHhiZiwgMHg4ZiwgMHg4NywgMHg0MiwgMHgxOSwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDhiLCAweDAwLCAweDJmLCAweDQ3LCAweDE5LCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZTcsIDB4OTEsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDIsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhhOSwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLAotCTB4YmEsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MmQsIDB4OTUsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAwLCAweDJkLCAweGYwLCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDYxLCAweDk1LCAweDAwLCAweGYwLAotCTB4ODQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhmNCwgMHg5NCwgMHgwMCwgMHg0NSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLAotCTB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGQzLCAweDhmLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDgzLCAweDk0LCAweDAwLCAweDQ3LAotCTB4ODAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsIDB4MDQsIDB4ZGMsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweGUxLCAweDAwLCAweGE2LCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwNywgMHg4NCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDc1LCAweDk0LCAweDAwLCAweDVlLCAweDA1LCAweDEwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MSwgMHhlNywgMHg0MSwgMHgwMSwgMHgwMCwgMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgyYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDFmLCAweDBhLAotCTB4MmMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4OTUsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHhlYSwgMHg4ZiwgMHhhMiwgMHg0OCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHhlOCwgMHg4ZiwgMHg4NCwgMHg0OCwKLQkweDFmLCAweDEwLCAweDAwLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLAotCTB4ZWEsIDB4OGYsIDB4MDAsIDB4MGEsIDB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0JMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhNywgMHg5MSwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZWIsIDB4OGYsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLCAweDEwLCAweGMwLCAweDAxLCAweDAwLAotCTB4ZjgsIDB4OGYsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4OTMsIDB4MDAsIDB4NDUsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg4ZiwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4OGYsIDB4YTgsIDB4NWMsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwgMHhlMywgMHg4ZiwgMHgwMCwgMHgwNSwKLQkweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDFiLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDgsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGI3LCAweDkzLCAweDAwLCAweDQxLCAweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhmZSwgMHg4ZiwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDQsIDB4OTAsIDB4MjIsIDB4MDksIDB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHg5MCwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY0LCAweDk0LCAweDAwLCAweDRmLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDA4LCAweDkwLCAweGEyLCAweDQ3LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTksIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHgxNiwgMHg5MCwgMHgyMiwgMHg0YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDBlLCAweDkwLCAweGEyLCAweDE2LCAweDAyLCAweDMwLCAweDAwLCAweDAwLAotCTB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDJkLCAweDAwLCAweDJkLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDEyLCAweDkwLCAweDIyLCAweDQyLAotCTB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxMywgMHg5MCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLAotCTB4MzIsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4MTYsCi0JMHhlNCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgyOCwgMHg5MCwgMHgyMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDJhLCAweGIwLCAweDAxLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQwLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MjksIDB4OTAsIDB4MjIsIDB4NDAsIDB4MTEsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHhhYywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgyYiwgMHgwMSwKLQkweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LCAweDE2LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4MDgsCi0JMHg4MCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMSwgMHg5MCwgMHgwMCwgMHg1ZSwgMHgxNywgMHg5MCwgMHgwMCwgMHgwMCwKLQkweGVkLCAweDk0LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4OTQsIDB4MDAsIDB4MDcsIDB4MTYsIDB4MTQsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OTQsIDB4MDAsIDB4NWUsCi0JMHgwNSwgMHgxMCwgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDJmLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MWIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgxZiwgMHgxNSwgMHgxYSwgMHg1MCwgMHgwMCwgMHgwMCwgMHgzNiwgMHg5MCwgMHgyMCwgMHgxNiwKLQkweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDcwLCAweDAwLCAweDAwLCAweDAzLCAweDQ4LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweGE0LAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTAsIDB4YTgsIDB4NDYsIDB4MWYsIDB4MTAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweDEwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDEwLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCi0JMHgyYywgMHhkMCwgMHgwMSwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHg0MCwgMHgyMywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDNkLCAweDkwLCAweDg0LCAweDQ1LCAweDFmLCAweDEwLCAweDAwLCAweDAwLCAweDNlLCAweDkwLCAweDAwLCAweDBhLAotCTB4ZTAsIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgzNCwgMHg5NCwgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDQ2LCAweDkwLCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg0MiwgMHg5MCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NTUsIDB4OTAsIDB4YTIsIDB4MDIsIDB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHg1NiwgMHg5MCwgMHgyMiwgMHg0MCwgMHgyZCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsCi0JMHhlMCwgMHg4ZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRkLCAweDkwLCAweGE4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYywgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweGYwLCAweDEwLCAweGM4LCAweDAxLCAweDAwLAotCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTAsIDB4MDAsIDB4NWMsCi0JMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMCwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGFmLCAweDkyLCAweDAwLCAweDQwLCAweDFmLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NWEsIDB4OTAsIDB4MjMsIDB4MGQsIDB4MmMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg5MCwgMHgyMiwgMHg0NiwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDcwLCAweDgwLCAweDAwLCAweDAzLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4NjIsIDB4OTAsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDVlLCAweDkwLCAweGE4LCAweDQ2LCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgwMCwgMHgyZCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAxLCAweDAwLAotCTB4YjcsIDB4OTMsIDB4MDAsIDB4NDEsIDB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDY3LCAweDkwLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg2ZCwgMHg5MCwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDcxLCAweDkwLCAweDIyLCAweDQ0LCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4OTQsIDB4MDAsIDB4NGYsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NzEsIDB4OTAsIDB4YTIsIDB4NDcsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDg2LCAweDkwLCAweDIyLCAweDRhLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4NzcsIDB4OTAsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ODIsIDB4OTAsIDB4MjIsIDB4NDIsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHg3YiwgMHg5MCwgMHhhMiwgMHhmMywgMHg4NCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE1LCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2UsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHg3ZiwgMHg5MCwgMHgyMiwgMHg0MCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwKLQkweDExLCAweDkwLCAweDAxLCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDA4LCAweGU0LCAweGY1LCAweDAxLCAweDAwLAotCTB4YzYsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODMsIDB4OTAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg5NiwgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDJlLCAweDAwLCAweDJhLCAweGQwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJhLCAweDE1LAotCTB4ZTQsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4MTYsIDB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsCi0JMHg4OSwgMHg5MCwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGQ2LCAweDkwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MmQsIDB4MDAsIDB4MmQsIDB4MDgsIDB4MmEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTYsIDB4OTAsIDB4MjIsIDB4NDcsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg5MywgMHg5MCwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDhlLCAweDkwLCAweGEyLCAweGYzLCAweDg0LCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE1LAotCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4ODUsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwgMHg4NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHg5MiwgMHg5MCwgMHgyMiwgMHg0MCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDExLCAweDkwLCAweDAxLCAweDAwLAotCTB4MGIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsIDB4NTgsIDB4MDEsIDB4MmQsIDB4MDAsCi0JMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMSwgMHgyZCwgMHhmMCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDJkLCAweDhlLCAweDAwLCAweGYwLCAweDJjLCAweGIwLCAweDAwLCAweDAwLCAweDdkLCAweDk1LCAweDAwLCAweDQxLAotCTB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OWQsIDB4OTAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHg5YiwgMHg5MCwgMHgyMywgMHgwZCwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4OTAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMCwgMHgyZiwgMHgwMSwgMHgxNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGIwLCAweDAwLCAweDJiLCAweDAxLCAweGUwLCAweGMxLCAweDAxLCAweDAwLCAweDAwLCAweDJiLCAweDAwLCAweGE2LAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHhhZCwgMHg5MCwgMHgyMywgMHgwZCwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGE2LCAweDkwLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDIyLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDIzLCAweDgwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YjAsIDB4OTAsIDB4MjMsIDB4MGQsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGI1LCAweDkwLCAweDIyLCAweDQwLAotCTB4MWIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4OTQsIDB4MDAsIDB4MDEsIDB4ODQsIDB4NTAsIDB4MDEsIDB4MDAsCi0JMHhiZCwgMHg5MCwgMHgyMiwgMHg0MCwgMHg4NSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDgwLCAweGMwLCAweDAxLCAweDAwLCAweDEwLCAweDgwLCAweDAwLCAweDEwLCAweDQ2LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGYsIDB4NDMsIDB4ODEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhiYiwgMHg5MCwgMHhhOCwgMHgxMSwgMHhlMCwgMHgzMSwgMHgwMCwgMHgwMCwgMHhjYywgMHg5MCwgMHgwMCwgMHg1ZSwKLQkweDE3LCAweDkwLCAweDAwLCAweDAwLCAweGMwLCAweDkwLCAweDIzLCAweDBkLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHg4NCwgMHhkMCwgMHgwMSwgMHgwMCwgMHhjNSwgMHg5MCwgMHgyMiwgMHg0MCwgMHgxYiwgMHg2YywgMHgwMCwgMHgwMCwKLQkweGVkLCAweDk0LCAweDAwLCAweDQzLCAweDYxLCAweDMxLCAweDAxLCAweDAwLCAweGNjLCAweDkwLCAweDIyLCAweDQwLAotCTB4ODUsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwKLQkweDQzLCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhMSwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweGNhLCAweDkwLCAweGE4LCAweDExLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHhjZCwgMHg5MCwgMHhhOCwgMHgwYSwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwKLQkweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDA1LCAweDQ4LCAweDMxLCAweDAxLCAweDAwLAotCTB4ZDQsIDB4OTAsIDB4MjMsIDB4MGQsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MTEsCi0JMHgwMCwgMHg4YywgMHgwMSwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweGQ0LCAweDk0LCAweDAwLCAweDA3LCAweDE2LCAweDE0LCAweDAxLCAweDAwLCAweDc1LCAweDk0LCAweDAwLCAweDVlLAotCTB4MDUsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHhkNCwgMHg4YSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHg4ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MywgMHgwMCwgMHg0MCwgMHgxMywgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDg1LCAweGIwLCAweDAxLCAweDAwLCAweGI3LCAweDkzLCAweDAwLCAweDQxLAotCTB4ODcsIDB4MzAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlNywgMHg5MCwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZTMsIDB4OTAsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweGU5LCAweDkwLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDFhLCAweGQwLCAweDAxLCAweDAwLCAweGVmLCAweDkwLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4N2QsIDB4OTUsIDB4MDAsIDB4NDAsIDB4OTUsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjcsIDB4OTAsIDB4MjIsIDB4MDgsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxYSwgMHg5MCwgMHgwMCwgMHgwMCwgMHgyYSwgMHhjMCwgMHgwMCwgMHgwMCwKLQkweDdkLCAweDk1LCAweDAwLCAweDQxLCAweDk1LCAweDMwLCAweDAxLCAweDAwLCAweGYyLCAweDkwLCAweDIyLCAweDA4LAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OWQsIDB4OTAsIDB4MDAsIDB4MDAsIDB4MmEsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHhmNSwgMHg5MCwgMHgyMywgMHgwZCwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDk3LCAweGMwLCAweDAxLCAweDAwLAotCTB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjZiwgMHg4YSwgMHgyMiwgMHg0MiwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDgzLCAweDk0LCAweDAwLCAweDNhLCAweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZmIsIDB4OTAsIDB4MDAsIDB4NGEsIDB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsCi0JMHhjMSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwKLQkweDEwLCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDMyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDcsIDB4OTUsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4OTEsIDB4YTIsIDB4NDQsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgxYiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDJjLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotCTB4MDIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTcsIDB4OTEsIDB4MDAsIDB4MDEsIDB4OGMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5MSwgMHgyMiwgMHg0MCwKLQkweGUzLCAweDZkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OTEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyLAotCTB4MTAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4OTEsIDB4MjIsIDB4MDIsIDB4MTQsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHhmMSwgMHg5MywgMHgwMCwgMHg0NSwgMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmZCwgMHg5MCwgMHgyMiwgMHg1YywKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4OTEsIDB4YTgsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGZkLCAweDkwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDJkLCAweDQwLAotCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiNywgMHg5MywgMHgwMCwgMHg0MSwKLQkweDg3LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MTksIDB4OTEsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhZiwgMHg4MiwgMHgwMCwgMHg4OCwgMHgxYywgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDFmLCAweDkxLCAweDIyLCAweDA5LAotCTB4ODAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsCi0JMHgyMiwgMHg5MSwgMHgyMiwgMHg0NCwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0ZiwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDE5LCAweDgwLCAweDAxLCAweDAwLAotCTB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MDAsIDB4MzAsIDB4OTEsIDB4MjIsIDB4NGEsCi0JMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgyOCwgMHg5MSwgMHhhMiwgMHgxNiwgMHgwMiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDJmLCAweDAwLCAweDIwLCAweDQwLAotCTB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4Y2YsIDB4OGEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHgyZCwgMHgwOCwgMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyYywgMHg5MSwgMHgyMiwgMHg0MiwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGM2LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4OTYsIDB4OTMsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyYSwgMHhkMCwgMHgwMSwgMHgwMCwKLQkweDMyLCAweDAwLCAweDJhLCAweDE1LCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweGNmLCAweDhhLCAweDAwLCAweDE2LAotCTB4ZTQsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTAsIDB4YTIsIDB4MTYsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGQ0LCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YzEsIDB4OTIsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4MTAsCi0JMHgzMiwgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHgwMCwgMHgyMCwgMHg0MCwgMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDNhLCAweDkxLCAweGEyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4M2QsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg0MSwgMHg5MywgMHgwMCwgMHgxNSwgMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHg0OCwgMHg5MywgMHgwMCwgMHg0YiwKLQkweDAyLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4M2YsIDB4OTEsIDB4MjIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsCi0JMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0NSwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGNmLCAweDhhLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGVjLCAweDhlLCAweDAwLCAweDQ1LAotCTB4MWYsIDB4OTAsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYiwgMHg5MCwgMHgwMCwgMHgwMSwKLQkweDJjLCAweGIwLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4NTEsIDB4OTEsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCi0JMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgwMywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGMwLCAweDAxLCAweDAwLCAweDRhLCAweDkxLCAweDM3LCAweDVjLAotCTB4NjEsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0ZSwgMHg5MSwgMHgyOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4NGUsIDB4OTEsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MTcsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgzLCAweDkzLCAweDAwLCAweDQ3LAotCTB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsIDB4M2MsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgyYiwgMHg5MCwgMHgwMCwgMHgwMSwgMHgyYywgMHhiMCwgMHgwMCwgMHgwMCwgMHg4YywgMHg5MiwgMHgwMCwgMHg0NywKLQkweDFmLCAweDEwLCAweDAxLCAweDAwLCAweDYzLCAweDkxLCAweGEyLCAweDA4LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4NWYsIDB4OTEsIDB4YTIsIDB4NDIsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MDIsCi0JMHgwNCwgMHhkYywgMHgwMSwgMHgwMCwgMHhhMCwgMHg5OCwgMHgwMCwgMHg0MCwgMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDMwLCAweDA1LCAweDAwLCAweDQxLCAweDg5LCAweDMwLCAweDAxLCAweDAwLCAweDQxLCAweDkzLCAweDAwLCAweDE1LAotCTB4OTQsIDB4MzAsIDB4MDEsIDB4MDAsIDB4NDgsIDB4OTMsIDB4MDAsIDB4NGIsIDB4MDIsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgxNCwgMHg4NywgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4ODMsIDB4OTQsIDB4MDAsIDB4M2EsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHgyMCwgMHgwOCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDYwLCAweDAxLCAweDIwLCAweDE2LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweGMxLCAweDkyLCAweDAwLCAweDEwLAotCTB4MzIsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MmIsIDB4OTAsIDB4MDAsIDB4NDAsIDB4MTMsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg4YywgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3MywgMHg5MSwgMHhhMiwgMHgwOCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDgyLCAweDAwLCAweDAyLCAweDA0LCAweGRjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDMsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCi0JMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg2YywgMHg5MSwgMHgzNywgMHg1YywgMHg2MSwgMHgzMSwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDFiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDcwLCAweDkxLCAweDI4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4NmQsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3MCwgMHg5MSwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDE0LCAweDg3LCAweDE3LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4YywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDhlLCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDkzLCAweDAwLCAweDQwLAotCTB4MTMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiNywgMHg5MywgMHgwMCwgMHg0MSwgMHg4NywgMHgzMCwgMHgwMSwgMHgwMCwgMHgzYywgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLAotCTB4ODIsIDB4OTEsIDB4MjIsIDB4NDAsIDB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDdlLCAweDkxLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LAotCTB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgyZCwgMHg4ZSwgMHgyMiwgMHgwOSwgMHg4MCwgMHgzMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDEzLCAweDMwLCAweDAxLCAweDAwLCAweDJkLCAweDhlLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzUsIDB4OGUsIDB4MDAsIDB4NDQsCi0JMHgxOSwgMHg5MCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLCAweGRkLCAweDhmLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ODMsIDB4OTMsIDB4MDAsIDB4NGEsIDB4MWYsIDB4MTAsIDB4MDEsIDB4MDAsCi0JMHgzYywgMHg5MywgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHgyYiwgMHg5MCwgMHgwMCwgMHgwMSwKLQkweDJjLCAweGIwLCAweDAwLCAweDAwLCAweGMxLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MmIsIDB4OTAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OGUsIDB4MDAsIDB4NDUsCi0JMHgxZiwgMHg5MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgzNywgMHhjMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDMzLCAweGMzLCAweDAxLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAxLAotCTB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg5NiwgMHg5MSwgMHg4NSwgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0OCwKLQkweDAzLCAweGQwLCAweDAwLCAweDAwLCAweDk4LCAweDkxLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4NGMsIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsCi0JMHgzNCwgMHhjMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg5ZCwgMHg5MiwgMHgwMCwgMHg0MSwgMHhlMSwgMHgzMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MywKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDksCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywgMHhlMCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhhNCwgMHg5MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYSwgMHgwMCwgMHgyMCwgMHg0MCwKLQkweGU1LCAweGIxLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweDAxLCAweDhjLCAweGQwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4ZTAsIDB4YzEsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmYsIDB4NDAsCi0JMHgxMywgMHhiMCwgMHgwMSwgMHgwMCwgMHhjYywgMHgwMCwgMHgyZCwgMHgwMSwgMHhlMCwgMHhjMSwgMHgwMSwgMHgwMCwKLQkweGFlLCAweDkxLCAweDljLCAweDE3LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDg0LCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4YjAsIDB4OTEsIDB4MjIsIDB4NDcsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHgxMywgMHg5MCwgMHgwMSwgMHgwMCwgMHgyZCwgMHg5NSwgMHgwMCwgMHg0NywKLQkweDE5LCAweDEwLCAweDAxLCAweDAwLCAweGMwLCAweDAwLCAweDJkLCAweDQ0LCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4YzQsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NjEsIDB4OTUsIDB4MDAsIDB4ZjAsCi0JMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHgwNSwgMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM1LCAweDkxLCAweGEyLCAweDRiLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDE4LCAweDkyLCAweGEyLCAweDRjLAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4YzUsIDB4OTEsIDB4MWYsIDB4MWMsIDB4ZTAsIDB4NmQsIDB4MDAsIDB4MDAsCi0JMHhjOCwgMHg5MSwgMHhhMiwgMHgwMSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHg0NiwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGJlLCAweDkxLCAweDFmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLAotCTB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YzAsIDB4OTEsIDB4MjIsIDB4ZjAsCi0JMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHgxNSwgMHg5MiwgMHgxZiwgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDQwLCAweDgwLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRmLAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OGEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgxNiwgMHg5MiwgMHgyMCwgMHg0MiwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHhjNCwgMHg5MSwgMHgyMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU5LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NTgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzcsIDB4OTEsIDB4MjIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1YywgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDViLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4ODQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhjYywgMHg5MSwgMHhhMiwgMHg0MiwgMHgyNCwgMHg2YywgMHgwMCwgMHgwMCwgMHhkNSwgMHg5MSwgMHgyMywgMHhmMCwKLQkweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGQyLCAweDkxLCAweGEyLCAweGYwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLAotCTB4MTcsIDB4OTIsIDB4YTIsIDB4NDIsIDB4MjQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MTcsIDB4OTIsIDB4YTIsIDB4NDEsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhkMSwgMHg5MSwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDUxLCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDUyLAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTcsIDB4OTIsIDB4MWYsIDB4MTIsIDB4ODQsIDB4NTAsIDB4MDAsIDB4MDAsCi0JMHgxNywgMHg5MiwgMHhhMCwgMHgwMSwgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHhjNSwgMHg5MSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhiLCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTIsIDB4YTIsIDB4NDYsIDB4ZTcsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHhmMiwgMHg5MSwgMHgyMiwgMHhmMCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweGRlLCAweDkxLCAweDIwLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLCAweGVmLCAweDkxLCAweDAzLCAweDFlLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZGQsIDB4OTEsIDB4YTIsIDB4NDAsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0NCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGUzLCAweDkxLCAweDIyLCAweDBhLCAweDAyLCAweDZjLCAweDAwLCAweDAwLAotCTB4ZTYsIDB4OTEsIDB4YTIsIDB4NDEsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4OTEsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1NSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDU2LCAweDhmLCAweGIwLCAweDAxLCAweDAwLCAweGU1LCAweDkxLCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDMsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0OCwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDgyLCAweGQwLCAweDAxLCAweDAwLAotCTB4ZWMsIDB4OTEsIDB4MjAsIDB4OTEsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4OTEsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgyNiwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDI3LCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLCAweGVlLCAweDkxLCAweGEyLCAweDQwLAotCTB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MWYsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgyMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHg4ZiwgMHg5OCwgMHgwMSwgMHgwMCwgMHhmMSwgMHg5MSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDgwLCAweDQwLCAweDhmLCAweDk4LCAweDAxLCAweDAwLAotCTB4MjMsIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MmQsIDB4NDQsCi0JMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYiwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGY4LCAweDkxLCAweGEyLCAweDQzLCAweDNkLCAweDdjLCAweDAwLCAweDAwLCAweGY4LCAweDkxLCAweGEyLCAweGYyLAotCTB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwgMHhmYSwgMHg5MSwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDgsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTEsIDB4YTAsIDB4OTEsCi0JMHgwMywgMHg2YywgMHgwMCwgMHgwMCwgMHhmNiwgMHg5MSwgMHgyMiwgMHg0MywgMHgzZCwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGZmLCAweDkxLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDgwLCAweDQwLAotCTB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDAsIDB4OGYsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgwOSwgMHg5MiwgMHhhMiwgMHhmMCwKLQkweDE0LCAweDMwLCAweDAwLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDYsIDB4OTIsIDB4YTIsIDB4ZjIsIDB4MDIsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTIsIDB4NDAsCi0JMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0OSwgMHg4ZiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGY4LCAweDkxLCAweDIyLCAweDQxLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweGY2LCAweDkxLCAweDIwLCAweDkxLAotCTB4MDMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTEsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwZCwgMHg5MiwgMHgyMCwgMHgwYSwgMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHgwYywgMHg5MiwgMHhhMiwgMHg0MCwKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ0LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDksIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTIsIDB4OTIsIDB4MjIsIDB4MGEsCi0JMHgwMiwgMHg2YywgMHgwMCwgMHgwMCwgMHhlNiwgMHg5MSwgMHhhMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDExLCAweDkyLCAweGEyLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU1LAotCTB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTYsIDB4OGYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHg5MiwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MywKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQ4LCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MWEsIDB4OTIsIDB4MDAsIDB4NDMsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MWEsIDB4OTIsIDB4MDAsIDB4NDEsCi0JMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxYSwgMHg5MiwgMHgwMCwgMHg0MiwgMHg5NSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDFhLCAweDkyLCAweDAwLCAweDQ0LCAweDk1LCAweGIwLCAweDAwLCAweDAwLCAweDFhLCAweDkyLCAweDAwLCAweDRjLAotCTB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YzksIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgxZCwgMHg5MiwgMHhhMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0YiwKLQkweDhmLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRjLCAweDhmLCAweGIwLCAweDAxLCAweDAwLAotCTB4MmQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmYsIDB4ZjMsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyMiwgMHg5MiwgMHhhMiwgMHhmMywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDAxLCAweGIwLCAweDAxLCAweDAwLCAweDJkLCAweDAwLCAweDJhLCAweDQxLAotCTB4ZTcsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4ZDQsIDB4MDAsIDB4M2QsIDB4NDEsIDB4ODUsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwYiwgMHgwMCwgMHgwMCwgMHhmMiwgMHgwMCwgMHhlNCwgMHgwMSwgMHgwMCwgMHgyOCwgMHg5MiwgMHgyMiwgMHg1YSwKLQkweDAxLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4MjksIDB4OTIsIDB4MDAsIDB4NWEsIDB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg4NSwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEwLCAweGE1LCAweDg1LCAweDZjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQwLAotCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHhmMCwKLQkweDhjLCAweGIwLCAweDAwLCAweDAwLCAweDM2LCAweDkyLCAweDIyLCAweDQwLCAweDBmLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzMsIDB4OTIsIDB4YTIsIDB4NGIsCi0JMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHgzNCwgMHg5MiwgMHgyMiwgMHhmMCwgMHgxOCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDRiLCAweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGZmLCAweDkyLCAweDAwLCAweDA3LAotCTB4MTAsIDB4MzAsIDB4MDEsIDB4MDAsIDB4ZjksIDB4ODIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgzOCwgMHg5MiwgMHgyMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHg4NSwgMHg5MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMwLCAweDAxLCAweDAwLCAweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHhmZiwgMHg5MiwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweGY5LCAweDgyLCAweDAwLCAweDQwLCAweDA1LCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHhmZiwgMHg5MiwgMHgwMCwgMHgwNywgMHgxMCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDA1LCAweGIwLCAweDAxLCAweDAwLCAweDQxLCAweDkyLCAweDMzLCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4NDQsIDB4OTIsIDB4YTEsIDB4YWQsIDB4OTUsIDB4MjAsIDB4MDAsIDB4MDAsIDB4NTIsIDB4OTIsIDB4MTMsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0YSwgMHg1YSwgMHg4MywgMHgwMSwgMHgwMCwKLQkweDMwLCAweDAwLCAweDM5LCAweDQ1LCAweDk1LCAweGUwLCAweDAxLCAweDAwLCAweDFmLCAweDAwLCAweDAwLCAweDBmLAotCTB4NWUsIDB4ZDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWEsIDB4NWYsIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKLQkweDQ4LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LCAweDRhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4NTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg0ZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhMiwgMHg4NCwgMHgwMCwgMHg0MCwgMHg1ZCwgMHg5OCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDEsIDB4OTcsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHg0ZiwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDk3LCAweGIwLCAweDAxLCAweDAwLCAweDUzLCAweDkyLCAweDYwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4NGIsIDB4ODQsIDB4ODksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4YzIsCi0JMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZCwgMHg5MiwgMHhhMiwgMHg0NSwgMHgyNSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDU3LCAweDkyLCAweDMxLCAweDIwLCAweDg1LCAweDMwLCAweDAwLCAweDAwLCAweDVlLCAweDkyLCAweDIyLCAweDEyLAotCTB4NDgsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDQsIDB4MTEsIDB4MTIsIDB4NDgsIDB4MDMsIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVhLCAweDFmLCAweDkwLCAweDAxLCAweDAwLAotCTB4NWQsIDB4OTIsIDB4MzEsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsCi0JMHgyNCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg5MiwgMHgyMiwgMHgxMiwgMHg0OCwgMHg3ZiwgMHgwMCwgMHgwMCwKLQkweDU4LCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDJmLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NmIsIDB4OTIsIDB4MGIsIDB4ZjAsIDB4ODQsIDB4MzAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMSwgMHgxMiwgMHg0OCwgMHg4MywgMHgwMSwgMHgwMCwgMHg2OCwgMHg5MiwgMHgyMiwgMHg1MCwKLQkweDg1LCAweDcwLCAweDAwLCAweDAwLCAweDVlLCAweDAxLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MmEsIDB4OTQsIDB4MDAsIDB4ZjIsIDB4OTYsIDB4MzAsIDB4MDEsIDB4MDAsIDB4OTMsIDB4MDQsIDB4MDAsIDB4MTIsCi0JMHg5NCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YSwgMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDEyLCAweDk2LCAweGU0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDRiLAotCTB4MWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MTAsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiNywgMHgzZiwgMHg0MywgMHgxMSwgMHhmMCwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwKLQkweDhhLCAweDg4LCAweDAxLCAweDAwLCAweDZlLCAweDkyLCAweDMwLCAweGExLCAweDBjLCAweDMwLCAweDAwLCAweDAwLAotCTB4NzEsIDB4OTIsIDB4MjIsIDB4NDUsIDB4ZTYsIDB4N2QsIDB4MDAsIDB4MDAsIDB4NWUsIDB4OTIsIDB4MTAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHg0NSwgMHhlNiwgMHg5MSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDEwLCAweDEyLCAweDQ4LCAweDgzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4NGIsIDB4ODUsIDB4ODAsIDB4MDEsIDB4MDAsCi0JMHg1ZSwgMHgwMSwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyYSwgMHg5NCwgMHgwMCwgMHhmMiwKLQkweDk2LCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4ZDgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MmUsIDB4MDAsIDB4MmQsIDB4MDUsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MiwgMHgyMiwgMHg0MCwgMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDgwLCAweGM4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHhhNywgMHg4NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4ODAsIDB4OTIsIDB4YTgsIDB4MDUsIDB4ZTAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MTIsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg0YiwgMHg5NiwgMHhkYywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDRiLCAweDFlLCAweDk0LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDBmLAotCTB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MWYsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ODQsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHg4OSwgMHg5MiwgMHgyMiwgMHg0MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHg4YSwgMHg5MiwgMHgwMCwgMHg0MiwKLQkweDY4LCAweGIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLCAweDZhLCAweGIxLCAweDAxLCAweDAwLAotCTB4OGEsIDB4OTIsIDB4MzEsIDB4NWEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTEsIDB4NDIsCi0JMHg0OCwgMHg5MywgMHgwMSwgMHgwMCwgMHg4YywgMHg5MiwgMHgzNSwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDZkLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDkxLCAweDkyLCAweDI4LCAweGIxLAotCTB4MmMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4OGQsIDB4OTIsIDB4MjIsIDB4NGQsIDB4NzUsIDB4N2QsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5NSwgMHg0MCwgMHgxMSwgMHhiMCwgMHgwMSwgMHgwMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDYxLCAweDk5LCAweDAxLCAweDAwLCAweDkxLCAweDkyLCAweGE4LCAweGIxLCAweDEwLCAweDMwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg2MSwgMHg5OSwgMHgwMSwgMHgwMCwgMHg5OCwgMHg5MiwgMHgyOCwgMHhiMSwgMHgxMCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDk0LCAweDkyLCAweDlmLCAweGJhLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjQsIDB4MTEsIDB4ODQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4OWEsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWMsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg0NywgMHg5OSwgMHgwMSwgMHgwMCwgMHg5ZSwgMHg5MiwgMHgzMiwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGE0LCAweDkyLCAweDIyLCAweGY4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweGY4LAotCTB4OTAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHg5MiwgMHg0OCwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLAotCTB4YTgsIDB4OTIsIDB4MjgsIDB4YjEsIDB4OTIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4OTIsIDB4MjIsIDB4NGMsCi0JMHg3NSwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgxMiwgMHg0MCwgMHg5MSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDZjLCAweDAwLCAweDAwLCAweDQwLCAweDYxLCAweDk5LCAweDAxLCAweDAwLCAweGE4LCAweDkyLCAweGE4LCAweGIxLAotCTB4OTAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NDgsIDB4OTYsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg5MCwgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweGYwLCAweGNkLCAweDAxLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTIsIDB4NDksIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgwOCwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLAotCTB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4YjUsIDB4OTIsIDB4MjIsIDB4MWEsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgzNCwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGIxLCAweDkyLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MmQsIDB4MTAsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHgwNywgMHgwMCwgMHgxNSwgMHg4MiwgMHg4YywgMHgwMSwgMHgwMCwKLQkweGZmLCAweDA3LCAweDAwLCAweGYwLCAweDAwLCAweDhjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQxLAotCTB4MDAsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4YmUsIDB4OTIsIDB4MjIsIDB4MGQsIDB4MDAsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHg5OSwgMHg5MiwgMHgwMCwgMHgwMCwgMHgxYSwgMHgzMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDQ5LCAweGMxLCAweDAxLCAweDAwLCAweGJhLCAweDkyLCAweGEyLCAweDQxLCAweDIzLCAweDUwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YzMsIDB4OTIsIDB4ODMsIDB4MWUsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDI0LCAweDAwLCAweDJkLCAweDAxLCAweDJjLCAweGIwLCAweDAxLCAweDAwLCAweDI4LCAweDAwLCAweDJkLCAweGYwLAotCTB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgxNCwgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4NjAsIDB4OTcsIDB4MmUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjYSwgMHg5MiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDY0LCAweDk3LCAweDNlLCAweDQzLCAweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2UsIDB4NDMsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgwYiwgMHhlOCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg2NCwgMHg5NywgMHgzZiwgMHg0MywKLQkweDlkLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDE2LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDAsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NjQsIDB4OTcsIDB4M2YsIDB4NDMsCi0JMHg5ZCwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgxNiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLCAweDYwLCAweDE3LCAweDNkLCAweDQzLAotCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4ODAsIDB4YTEsIDB4MTYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHhiNSwgMHgwMCwgMHgwZCwgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhkOSwgMHg5MiwgMHgzMCwgMHg0NywKLQkweDE3LCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDkyLCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OTAsIDB4NDIsIDB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4MGQsCi0JMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5MiwgMHhhMiwgMHgwYiwgMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDBiLCAweGU2LCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDQxLAotCTB4ODEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhlMSwgMHg5MiwgMHg0MCwgMHgwNywgMHg5NiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAxLCAweDAwLCAweGViLCAweDkyLCAweGEyLCAweDQ1LCAweDk1LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDEsIDB4OTcsIDB4M2YsIDB4NDEsIDB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDk3LCAweDNlLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLAotCTB4ZTYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4OTcsIDB4M2UsIDB4NDAsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHhmZSwgMHg5MiwgMHgwMCwgMHgzYiwgMHhlNywgMHhiMSwgMHgwMCwgMHgwMCwgMHhlYiwgMHg5MiwgMHgzMCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGY1LCAweDkyLCAweGEyLCAweDBiLCAweGU2LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4YjUsIDB4MDAsIDB4MGQsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTIsIDB4YTIsIDB4MGIsCi0JMHhlNiwgMHg3ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDk4LCAweDQyLCAweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweGI3LCAweDAwLCAweDBkLAotCTB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZTYsIDB4OTEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MSwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIxLCAweGEyLCAweDk1LCAweDIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTAsIDB4NGEsIDB4NDQsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4OTcsIDB4M2UsIDB4NDEsCi0JMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZSwgMHhmNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRlLCAweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNlLCAweDQwLAotCTB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2IsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwNywKLQkweDkyLCAweDg5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjcsIDB4MDAsIDB4NDMsCi0JMHg0NiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwOCwgMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwKLQkweDAyLCAweDkzLCAweDQwLCAweDA4LCAweDk2LCAweDMwLCAweDAwLCAweDAwLCAweDlkLCAweDA0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MGUsIDB4OTMsIDB4MjIsIDB4NDUsIDB4OTUsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHgwYSwgMHg5MywgMHgyMiwgMHg1YSwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwZiwKLQkweDk2LCAweGY0LCAweDAxLCAweDAwLCAweDA3LCAweDkzLCAweDMxLCAweDVmLCAweDk3LCAweDA0LCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTEsIDB4NGIsIDB4NDgsIDB4OTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2YSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYSwgMHg5MywgMHgzMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweGU2LCAweDgxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg5NywgMHgzZiwgMHg0MSwgMHg5NSwgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMywKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDQwLCAweDk3LCAweDNkLCAweDQwLCAweDk3LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NjMsIDB4ZjMsIDB4ODgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MTYsIDB4OTMsIDB4YTIsIDB4M2IsCi0JMHg4OSwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YSwgMHg5MCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDAwLCAweGE2LCAweDkyLCAweGIxLCAweDAxLCAweDAwLCAweDE3LCAweDkzLCAweDE4LCAweDRhLAotCTB4NDQsIDB4OTMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHgzMCwgMHgwMCwgMHgzOSwgMHg0NSwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgxYywgMHg5MywgMHgyMiwgMHg1YSwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDFmLCAweDA0LCAweDAwLCAweDBmLCAweDk4LCAweGQ4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NWUsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MWUsIDB4OTMsIDB4MDAsIDB4MDUsCi0JMHg0YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHgxZiwgMHgwNCwgMHgwMCwgMHhhNywgMHg1ZSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDRiLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgxZiwgMHg5MywgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDIyLCAweDkzLCAweDQwLCAweDA3LCAweDk2LCAweDMwLCAweDAwLCAweDAwLAotCTB4OWQsIDB4MDQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MjYsIDB4OTMsIDB4MjIsIDB4NDUsCi0JMHg5NSwgMHg3YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDliLCAweDA0LCAweDAwLCAweDRhLCAweDQ0LCAweDEzLCAweDAxLCAweDAwLCAweDAwLCAweDk3LCAweDNmLCAweDQxLAotCTB4OTUsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg5NywgMHgzZCwgMHg0MCwgMHg5NywgMHhlMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MywgMHhmMywKLQkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDMwLCAweDAwLCAweDM4LCAweDQ1LCAweDk3LCAweGUwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MGYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDJlLCAweDkzLCAweGE4LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDI3LCAweDkzLCAweGEyLCAweDNiLAotCTB4ODksIDB4NmMsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MzgsIDB4NDUsIDB4OWQsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5OCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHg5MywgMHgwNCwgMHgwMCwgMHgxMiwKLQkweDk0LCAweDMwLCAweDAxLCAweDAwLCAweGZmLCAweDkyLCAweDAwLCAweDVhLCAweDFmLCAweDAwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NWEsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MTEsIDB4MDAsIDB4MDAsIDB4NGEsCi0JMHhlNiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgzNCwgMHgwMCwgMHgyZiwgMHg0ZiwgMHg5NSwgMHg4NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDYzLCAweDRiLAotCTB4ODQsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4NDMsIDB4ODUsIDB4NmMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhlMywgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgzMCwgMHgwMCwgMHgyZCwgMHg0NCwKLQkweDFmLCAweDkwLCAweDAxLCAweDAwLCAweDMyLCAweDAwLCAweDJkLCAweGYyLCAweDJhLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4ZjIsIDB4MDIsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MWUsIDB4OTIsIDB4MDAsIDB4MTAsCi0JMHgzMiwgMHgzMCwgMHgwMSwgMHgwMCwgMHgzMiwgMHgwMCwgMHhhMCwgMHg0MCwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQwLAotCTB4OTksIDB4OTgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGEsIDB4MDIsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMywgMHhkMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDk3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGEzLCAweDRjLCAweDAyLCAweGQwLCAweDAwLCAweDAwLAotCTB4NDUsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsCi0JMHgzNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg1NSwgMHg5MywgMHgyMiwgMHg0MSwgMHgwMywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLAotCTB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGIxLCAweDAxLCAweDAwLCAweDRlLCAweDkzLCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YywgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDQ5LCAweDkzLCAweDAwLCAweDVjLAotCTB4MDEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxYiwgMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHgyZCwgMHgwNiwKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDgyLCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDYsIDB4YzksIDB4MDEsIDB4MDAsIDB4OTQsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MywgMHgyMiwgMHg0MCwgMHgxMSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDY4LCAweDA4LCAweDM4LCAweDk2LCAweDAxLCAweDAwLCAweGYwLCAweDA3LCAweDAwLCAweDQxLAotCTB4ODIsIDB4Y2MsIDB4MDEsIDB4MDAsIDB4NWEsIDB4OTMsIDB4YWEsIDB4NDEsIDB4M2IsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxMCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywKLQkweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDFkLCAweDA0LCAweGNjLCAweDAxLCAweDAwLAotCTB4N2IsIDB4OTMsIDB4MjYsIDB4NDYsIDB4MjMsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHgxMiwgMHhjOCwgMHgwMSwgMHgwMCwgMHg2NCwgMHgwMSwgMHgyMCwgMHhmMCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDdhLCAweDkzLCAweDIyLCAweDQxLCAweDA1LCAweDUwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAzLAotCTB4NDgsIDB4YzksIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODYsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHg0NCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4YTQsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg2YywgMHg5MywgMHhhOCwgMHg0NiwgMHgxZiwgMHgxMCwgMHgwMCwgMHgwMCwKLQkweDc5LCAweDkzLCAweDIyLCAweDQxLCAweDA1LCAweDUwLCAweDAwLCAweDAwLCAweDc3LCAweDkzLCAweGEyLCAweDQxLAotCTB4MjMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTEsIDB4MWEsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDcyLCAweDkzLCAweGE4LCAweDQ2LCAweDIzLCAweDMwLCAweDAwLCAweDAwLAotCTB4YWYsIDB4ODIsIDB4MDAsIDB4ODgsIDB4MWMsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHg0MiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDEzLCAweGMwLCAweDAxLCAweDAwLCAweDY3LCAweDkzLCAweDAwLCAweDUwLAotCTB4NDksIDB4YzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwNCwgMHg4MCwgMHgwMCwgMHgwMywgMHgxYSwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDdiLCAweDkzLCAweDIyLCAweDQwLCAweDNiLCAweDZjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OTksIDB4OTIsIDB4MDAsIDB4NWMsCi0JMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3YywgMHg5MywgMHgwMCwgMHg0MSwgMHgzYiwgMHhkMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDhkLCAweDQ3LCAweDgwLCAweDMyLCAweDAxLCAweDAwLCAweGIwLCAweDAwLCAweDJmLCAweDVmLAotCTB4MTMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4ZjAsIDB4OGMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwKLQkweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDhjLCAweGIwLCAweDAxLCAweDAwLAotCTB4ODgsIDB4OTMsIDB4OGMsIDB4ZjgsIDB4OGUsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsCi0JMHgxOSwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgyMiwgMHhmOCwgMHgxNCwgMHgzMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDE2LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LAotCTB4MjYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MmUsIDB4ZjgsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwYywgMHgwMCwgMHgyYSwgMHg0YSwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkweGUwLCAweGM5LCAweDAxLCAweDAwLCAweDEwLCAweDAwLCAweDIwLCAweDFiLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4OTUsIDB4OTMsIDB4MjAsIDB4MGEsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsCi0JMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDIwLCAweGYwLCAweGU0LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDIwLCAweDRhLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MjAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg4MCwgMHg5MywgMHgwMCwgMHg0MCwgMHgxMywgMHhiMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMCwgMHgyZCwgMHg0MiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweDJlLCAweDAwLCAweDJmLCAweGYzLCAweDgyLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWIsIDB4OTMsIDB4YTIsIDB4YTUsCi0JMHg5NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MSwgMHg5NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDllLCAweDkzLCAweGEyLCAweDQwLCAweDk3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHg0MSwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHhkNCwgMHgwMCwgMHgzZSwgMHg0MSwKLQkweDgzLCAweGUwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDgzLCAweGMwLCAweDAxLCAweDAwLAotCTB4YTMsIDB4OTMsIDB4YTAsIDB4YTUsIDB4ODMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgyYywgMHgwMCwgMHgyMCwgMHg0MSwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGE4LCAweDkzLCAweDIyLCAweDQwLCAweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLAotCTB4OTgsIDB4ZGMsIDB4MDEsIDB4MDAsIDB4MGIsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZTQsIDB4ZjUsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgxZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHgwYiwgMHgwMCwgMHg4MCwgMHgwMCwKLQkweGU0LCAweGY1LCAweDAxLCAweDAwLCAweDlkLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDYwLCAweDQxLCAweDg3LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg1ZCwgMHgwNSwgMHg5MCwgMHgwMCwgMHgwMCwKLQkweGI0LCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDlkLCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDVkLCAweDA1LCAweDkwLCAweDAwLCAweDAwLAotCTB4YzMsIDB4OTMsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MmQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwgMHgyZSwgMHgwMCwgMHgyZiwgMHhmMywgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAxLCAweDAwLCAweDYzLCAweGYzLCAweDk2LCAweGM4LCAweDAxLCAweDAwLCAweGNiLCAweDkzLCAweDlmLCAweDQxLAotCTB4ODUsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YTUsIDB4ODUsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgyZCwgMHgwMCwgMHhhMCwgMHg0MiwgMHhlNiwgMHhiMSwgMHgwMSwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgyZCwgMHgwMCwKLQkweDgwLCAweGIwLCAweDAxLCAweDAwLCAweGQwLCAweDkzLCAweDUyLCAweDQzLCAweDgxLCAweDYwLCAweDAwLCAweDAwLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4ZDEsIDB4OTMsIDB4MDAsIDB4NDEsCi0JMHg4MCwgMHg5NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1ZiwgMHg4MSwgMHg5MCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVlLCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4OTUsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHhkMiwgMHg5MywgMHg5ZSwgMHhiYiwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhkNywgMHg5MywgMHhhMiwgMHg0MCwKLQkweDFmLCAweDdjLCAweDAwLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NDEsIDB4OTUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTUsCi0JMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGZjLCAweDI0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZjLAotCTB4MzgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4M2MsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmZSwgMHgzYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhlYywgMHg5MywgMHg5YywgMHgxNywKLQkweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGUxLCAweDkzLCAweGEyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MWYsIDB4OTAsIDB4MDEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MWUsCi0JMHg5OCwgMHhmNCwgMHgwMSwgMHgwMCwgMHhlMCwgMHg5MywgMHhhMiwgMHg0OCwgMHg5OSwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDE1LCAweDQyLCAweGIxLCAweDAxLCAweDAwLCAweGUwLCAweDkzLCAweGEyLCAweDhhLAotCTB4ZjEsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4Y2MsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmYywgMHgzZSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHhmNCwKLQkweDI4LCAweGNjLCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLAotCTB4ZWIsIDB4OTMsIDB4MjAsIDB4ZjAsIDB4M2UsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHgxZiwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHgyYiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGJmLCAweDAwLCAweDJkLCAweDA1LCAweDQ4LCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYzLAotCTB4M2EsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwNywgMHgwMCwgMHgyYSwgMHgwYywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MWMsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHgyNiwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwYywgMHgwMCwgMHgyZiwgMHhmMiwgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA2LCAweDE0LCAweGVjLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDIyLCAweDQ1LAotCTB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTMsIDB4MDYsIDB4MmEsIDB4ZWMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDk2LCAweGIwLCAweDAxLCAweDAwLCAweDBjLCAweDAwLCAweDJkLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmEsIDB4NGMsIDB4ZTEsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0NywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAyLCAweDk0LCAweGE4LCAweDVjLCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwKLQkweDQwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDBjLCAweDk0LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MGQsIDB4OTQsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDBmLCAweDk0LCAweGE4LCAweDAwLCAweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhmMCwgMHhjZCwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMywKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweGM5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4NTAsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDE5LCAweDk0LCAweDYyLCAweDQyLCAweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MWEsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgxYywgMHg5NCwgMHhhOCwgMHgwMCwKLQkweGUwLCAweDMxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYyLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLAotCTB4MzAsIDB4ODAsIDB4MDAsIDB4NGEsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHhhOCwgMHgzZCwgMHg0NiwgMHgwZCwgMHhlMCwgMHgwMSwgMHgwMCwKLQkweGZmLCAweDdmLCAweDAwLCAweGExLCAweGYwLCAweDg5LCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDA5LAotCTB4OTYsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTcsIDB4ZTAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHhhOCwgMHg5NywgMHhjMCwgMHgwMSwgMHgwMCwgMHgyNiwgMHg5NCwgMHg2MywgMHg0MiwKLQkweDYxLCAweDMxLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGM5LCAweDAxLCAweDAwLAotCTB4MjcsIDB4OTQsIDB4YTgsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHg5OSwgMHgzZiwgMHg0MiwgMHg5NywgMHhmMCwgMHgwMSwgMHgwMCwKLQkweDJiLCAweDk0LCAweDY1LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDMzLCAweDk0LCAweDIyLCAweGYzLAotCTB4NzQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4M2YsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4OTQsIDB4ODgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhlNywgMHg4NSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHg1NSwKLQkweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweDYyLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MzAsIDB4OTQsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNSwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDM2LCAweGIwLCAweDAxLCAweDAwLCAweDQzLCAweDk0LCAweDgyLCAweDQxLAotCTB4MjMsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4OTQsIDB4YTIsIDB4NDQsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHhhNywgMHg5MSwgMHgwMCwgMHgwMSwgMHg4YywgMHgzMCwgMHgwMSwgMHgwMCwgMHgyMCwgMHg4MCwgMHgwMCwgMHgxMCwKLQkweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDNlLCAweDk0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHgzYiwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4MjMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MzIsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg0MywgMHg5NCwgMHgyMiwgMHg0MSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwgMHhhZiwgMHg5MiwgMHgwMCwgMHg0MywKLQkweDIzLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDIzLCAweGIwLCAweDAxLCAweDAwLAotCTB4NDUsIDB4OTQsIDB4YTMsIDB4MTUsIDB4MGMsIDB4NmMsIDB4MDAsIDB4MDAsIDB4NDYsIDB4OTQsIDB4MDAsIDB4MDYsCi0JMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNSwgMHgwNCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDQ4LCAweDk0LCAweDIwLCAweDAyLCAweDFhLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBkLAotCTB4MDQsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDcsIDB4OTUsIDB4MDAsIDB4MDUsIDB4NDgsIDB4MzEsIDB4MDEsIDB4MDAsCi0JMHg3MiwgMHg5NCwgMHgyMiwgMHgwMiwgMHgxNCwgMHg1MCwgMHgwMCwgMHgwMCwgMHg0YywgMHg5NCwgMHhhMiwgMHgwMiwKLQkweDJhLCAweDUwLCAweDAwLCAweDAwLCAweDcyLCAweDk0LCAweGEyLCAweDQ1LCAweDFmLCAweDdjLCAweDAwLCAweDAwLAotCTB4NGUsIDB4OTQsIDB4MjIsIDB4MDIsIDB4MGMsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NTcsIDB4OTQsIDB4MDAsIDB4MDIsCi0JMHgxNiwgMHhjMCwgMHgwMCwgMHgwMCwgMHg1NiwgMHg5NCwgMHgyMiwgMHg1YywgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDMwLCAweDgwLCAweDAwLCAweDEwLCAweDQyLCAweGM5LCAweDAxLCAweDAwLCAweDU2LCAweDk0LCAweDIyLCAweDQwLAotCTB4ZTMsIDB4NmQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDcsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1MiwgMHg5NCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZjEsIDB4OTMsIDB4MDAsIDB4NWMsCi0JMHgxZiwgMHgwMCwgMHgwMSwgMHgwMCwgMHg3MiwgMHg5NCwgMHgyMiwgMHgxNSwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDMzLCAweGMwLCAweDAxLCAweDAwLCAweDcxLCAweDk0LCAweGEyLCAweDAyLAotCTB4MWEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4NjMsIDB4OTQsIDB4MjIsIDB4NDYsIDB4MWYsIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg3MCwgMHg4MCwgMHgwMCwgMHgwMywgMHg0MiwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwKLQkweDFmLCAweDgwLCAweDAxLCAweDAwLCAweDYzLCAweDk0LCAweDIyLCAweDQwLCAweGUzLCAweDZkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0JMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwgMHg1ZiwgMHg5NCwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGFmLCAweDgyLCAweDAwLCAweDg4LCAweDFjLCAweGIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA1LAotCTB4NDgsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MGMsIDB4ODAsIDB4MDAsIDB4MDMsIDB4NDIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhjOCwgMHgwMSwgMHgwMCwgMHgyZiwgMHgwMCwgMHgyZiwgMHg1YywKLQkweDExLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ3LCAweGU3LCAweDkxLCAweDAxLCAweDAwLAotCTB4ZjAsIDB4MDcsIDB4MDAsIDB4NDAsIDB4MWIsIDB4OTgsIDB4MDEsIDB4MDAsIDB4MzUsIDB4OTQsIDB4MjAsIDB4MTUsCi0JMHgxYSwgMHg2YywgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMCwgMHgwMCwgMHgwMywgMHg0OCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDIyLCAweDUwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4MDAsIDB4MDgsIDB4ZTAsIDB4OGQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHhhNCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDZlLCAweDk0LCAweGE4LCAweDQ2LCAweDFmLCAweDEwLCAweDAwLCAweDAwLAotCTB4MzUsIDB4OTQsIDB4MDAsIDB4MDUsIDB4NDgsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MzUsIDB4OTQsIDB4MDAsIDB4MDIsCi0JMHgxMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg5NCwgMHhhMiwgMHg0NCwgMHgxZiwgMHg3YywgMHgwMCwgMHgwMCwKLQkweGE3LCAweDkxLCAweDAwLCAweDAxLCAweDhjLCAweDMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFiLAotCTB4MTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwOCwKLQkweGYwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE2LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDVjLCAweDFmLCAweDkwLCAweDAwLCAweDAwLCAweDdiLCAweDk0LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4YTIsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHgyNywgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwKLQkweDAwLCAweGIwLCAweDAxLCAweDAwLCAweDk5LCAweDkyLCAweDAwLCAweDQxLCAweGEzLCAweDQxLCAweDAxLCAweDAwLAotCTB4N2YsIDB4OTQsIDB4MDAsIDB4NDEsIDB4MjcsIDB4ZDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwgMHg4MCwgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDQwLAotCTB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg4NiwgMHg5NCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhkOCwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDJiLCAweDMwLCAweDAxLCAweDAwLCAweGFjLCAweDAwLCAweDJkLCAweDA2LCAweDE2LCAweGMwLCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjAsIDB4MTYsIDB4YzQsIDB4MDEsIDB4MDAsIDB4OGUsIDB4OTQsIDB4YTAsIDB4ZjAsCi0JMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweDBlLCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGYwLAotCTB4MzAsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4MDAsIDB4MmQsIDB4NDAsIDB4ODcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg2YywgMHhmMCwgMHgyOCwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5NywgMHg5NCwgMHgyMiwgMHg0YSwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDQzLCAweDg2LCAweGM4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MzAsIDB4MDAsIDB4MGIsIDB4MTYsIDB4YzgsIDB4MDEsIDB4MDAsIDB4OTcsIDB4OTQsIDB4YTQsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGI4LCAweDk0LCAweDIyLCAweDA2LCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweGE0LCAweDk0LCAweGEyLCAweDA2LAotCTB4MTQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YTEsIDB4OTQsIDB4MjIsIDB4NDgsIDB4MTksIDB4N2MsIDB4MDAsIDB4MDAsCi0JMHg5YywgMHg5NCwgMHhhMCwgMHg0MSwgMHgxNywgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDMxLCAweGMwLCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDAsIDB4MjAsIDB4MTgsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGIsIDB4MDAsIDB4MmQsIDB4NDgsCi0JMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyMCwgMHg0NSwgMHhlNywgMHg5MSwgMHgwMSwgMHgwMCwKLQkweGE0LCAweDk0LCAweDAwLCAweDQwLCAweDg3LCAweDkwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDQzLAotCTB4ODYsIDB4OTgsIDB4MDEsIDB4MDAsIDB4YTQsIDB4OTQsIDB4YTAsIDB4NDgsIDB4MTcsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDQzLCAweDk5LCAweDAxLCAweDAwLCAweDEwLCAweDUwLCAweDAwLCAweDQzLCAweGZjLCAweGM5LCAweDAxLCAweDAwLAotCTB4MGYsIDB4OTUsIDB4MDAsIDB4MzAsIDB4ODEsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhZiwgMHg5NCwgMHgyMiwgMHg0YSwgMHgxOSwgMHg3YywgMHgwMCwgMHgwMCwKLQkweDA4LCAweDAwLCAweDAwLCAweGEyLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweGNjLCAweDAwLCAweDJkLCAweGFiLAotCTB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWIsIDB4MTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHhhZSwgMHg5NCwgMHhhMCwgMHhmMCwgMHgxNiwgMHg0NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweGIzLCAweDk0LCAweDY0LCAweGYwLCAweDgyLCAweGIwLCAweDAwLCAweDAwLAotCTB4YTQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YjMsIDB4OTQsIDB4YTIsIDB4ZjIsCi0JMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDhjLCAweDAwLCAweDIwLCAweDE4LCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDYsIDB4MzAsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4NiwgMHgwYywgMHg4MCwgMHhiMiwgMHgwMCwgMHgwMCwgMHhiYywgMHgwMCwgMHgyZCwgMHg0NiwKLQkweDE5LCAweDkwLCAweDAxLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweGYyLCAweGU0LCAweGIxLCAweDAxLCAweDAwLAotCTB4YjAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTAsIDB4NTAsIDB4MDAsIDB4NDMsCi0JMHhmYywgMHhjOSwgMHgwMSwgMHgwMCwgMHgwZiwgMHg5NSwgMHgwMCwgMHgzMCwgMHg4MSwgMHgzMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGEyLCAweDRhLCAweDE5LCAweGZjLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweGEyLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MmQsIDB4YWIsIDB4ZjksIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHhhYiwgMHgxNywgMHhjMCwgMHgwMSwgMHgwMCwgMHhjMSwgMHg5NCwgMHhhMCwgMHhmMCwKLQkweDE2LCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE3LCAweGMwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4ZTQsIDB4ZjAsIDB4ODIsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAzLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCTB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgxYiwgMHhlMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAwLCAweDBjLCAweDdlLCAweDg5LCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTYsIDB4NGMsIDB4OTUsIDB4NjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NGEsCi0JMHgxOCwgMHg5NCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxMCwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDA0LCAweDAwLCAweDIyLCAweDAxLCAweGYwLCAweDMxLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ZjAsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwKLQkweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LCAweGUwLCAweGIxLCAweDAwLCAweDAwLAotCTB4ZDEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDVmLAotCTB4MTcsIDB4OTAsIDB4MDEsIDB4MDAsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg3YSwgMHgwMSwgMHgyZSwgMHhmZSwgMHg5MiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg4YiwgMHgwMCwgMHgyZCwgMHhmNiwKLQkweDE2LCAweGIwLCAweDAxLCAweDAwLCAweGRlLCAweDk0LCAweDIyLCAweDQzLCAweGU3LCAweDdkLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NDUsIDB4YzEsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4YTYsCi0JMHgyYSwgMHhiMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwMCwgMHg2ZSwgMHgwNiwgMHg4MiwgMHhjOCwgMHgwMSwgMHgwMCwKLQkweGUyLCAweDk0LCAweDIyLCAweDRhLCAweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQyLAotCTB4NDUsIDB4ZDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmUsIDB4NGMsIDB4ODMsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHhlMywgMHg5NCwgMHg0MywgMHgzMCwKLQkweDNkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY2LCAweDllLCAweDgzLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MWIsIDB4NDEsIDB4M2QsIDB4YzMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsCi0JMHg5MiwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDQ5LCAweDk4LCAweGY0LCAweDAxLCAweDAwLCAweGVjLCAweDk0LCAweDI2LCAweDMwLAotCTB4OTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4OTQsIDB4OTAsIDB4NGMsIDB4OTIsIDB4NDAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHg5MywgMHhjMCwgMHgwMSwgMHgwMCwgMHhmZiwgMHhmZiwgMHg4MCwgMHg0OSwKLQkweGVjLCAweGE5LCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDEwLCAweDQ0LCAweGM5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MjIsIDB4MDEsIDB4ZjAsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDEwLCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDE1LAotCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhmZSwgMHg5NCwgMHgyMiwgMHg1ZiwgMHg4MSwgMHg3YywgMHgwMCwgMHgwMCwgMHhmZCwgMHg5NCwgMHhhMiwgMHg0MCwKLQkweDE5LCAweDdjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDE5LCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsCi0JMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZiwgMHg5NywgMHg5NCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDRiLCAweDYyLCAweGIxLCAweDAxLCAweDAwLCAweGZkLCAweDk0LCAweDI4LCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDAsIDB4MDAsIDB4ZmEsIDB4OTQsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgyMSwgMHg4MSwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg5NSwgMHhhMiwgMHg1ZiwKLQkweDgxLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEyLCAweDQzLCAweDE5LCAweDdjLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg5NiwgMHhlNCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk2LCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRiLAotCTB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgxOSwKLQkweDQ0LCAweGM5LCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDIyLCAweDAyLCAweGYwLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4ZjAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTMsCi0JMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MywgMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweDE5LCAweDYyLCAweGRkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDA4LAotCTB4ZTAsIDB4YjEsIDB4MDAsIDB4MDAsIDB4MGMsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg3YywgMHgwMCwgMHgyZCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDk4LCAweGY0LCAweDAxLCAweDAwLCAweDE1LCAweDk1LCAweDIwLCAweDRjLCAweDg0LCAweDZjLCAweDAwLCAweDAwLAotCTB4ODgsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsIDB4MTUsIDB4OTUsIDB4MjAsIDB4ZjIsCi0JMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDk4LCAweDAwLCAweDJkLCAweDE0LCAweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLAotCTB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YTMsIDB4MDAsIDB4MmQsIDB4MTQsIDB4OTgsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgxYSwgMHg5NSwgMHgyMCwgMHg0YywgMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywKLQkweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAotCTB4MWQsIDB4OTUsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwgMHhkMCwgMHgwMCwgMHgyMCwgMHgxNCwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDk4LCAweDAwLCAweDI1LCAweDQyLCAweDgwLCAweGIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZlLCAweGYzLAotCTB4ODAsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4NDIsIDB4ODIsIDB4YzAsIDB4MDAsIDB4MDAsCi0JMHgyMywgMHg5NSwgMHhhMCwgMHg0MCwgMHgxNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwKLQkweDE3LCAweGMwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweGYwLCAweDgyLCAweGVjLCAweDAwLCAweDAwLAotCTB4OTgsIDB4MDAsIDB4YTAsIDB4NDEsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4MTAsCi0JMHg0OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhhOCwgMHgwMSwgMHgwMCwgMHg0MCwgMHhmMSwgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDA1LCAweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDA3LAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4YTcsIDB4OTcsIDB4YzAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDJhLCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4YTgsIDB4MDAsIDB4MmQsIDB4MWMsIDB4OGEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWYsIDB4ZjAsCi0JMHg4YSwgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHg0MCwgMHg4YiwgMHhlYywgMHgwMCwgMHgwMCwKLQkweDhhLCAweDAwLCAweDIwLCAweDQwLCAweGU3LCAweGIxLCAweDAxLCAweDAwLCAweGI0LCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4YTQsIDB4MDAsIDB4MmQsIDB4NDUsIDB4ZTAsIDB4ZDEsIDB4MDEsIDB4MDAsCi0JMHgzNywgMHg5NSwgMHg5YywgMHgxNywgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiZSwgMHgwMCwgMHgyZiwgMHhhYiwKLQkweDgzLCAweGIwLCAweDAxLCAweDAwLCAweDg4LCAweDk1LCAweDAwLCAweDE0LCAweDgyLCAweDUwLCAweDAxLCAweDAwLAotCTB4M2MsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4OTUsIDB4MjIsIDB4ZjIsCi0JMHg4MiwgMHgzMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDNjLCAweDk1LCAweDlmLCAweDFjLCAweGUwLCAweDZkLCAweDAwLCAweDAwLCAweGJlLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDcsIDB4OTksIDB4MDEsIDB4MDAsIDB4ODgsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsCi0JMHhhOCwgMHgwMCwgMHgyMCwgMHgxYywgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyZCwgMHgzMCwKLQkweDgxLCAweGIwLCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweGYwLCAweDg0LCAweGIwLCAweDAxLCAweDAwLAotCTB4OTQsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4ODYsIDB4YjAsIDB4MDEsIDB4MDAsIDB4NGYsIDB4OTUsIDB4MjMsIDB4ZjAsCi0JMHg4NCwgMHg2YywgMHgwMCwgMHgwMCwgMHg0NCwgMHg5NSwgMHgyMywgMHg5MiwgMHg4NywgMHg2YywgMHgwMCwgMHgwMCwKLQkweGM5LCAweDA0LCAweDAwLCAweGE2LCAweDk0LCAweGIwLCAweDAxLCAweDAwLCAweDQ2LCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4OTQsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHg2MCwgMHg4OSwgMHgwMCwgMHg0YSwgMHg5NCwgMHg5OCwgMHgwMSwgMHgwMCwgMHg0NiwgMHg5NSwgMHg2OCwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLCAweGIwLCAweGIxLCAweDAxLCAweDAwLAotCTB4YmYsIDB4MDAsIDB4MmQsIDB4NDIsIDB4YjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MmQsIDB4ZjMsCi0JMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg0YSwgMHg5NSwgMHhkNCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDc4LCAweGRhLCAweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDU0LCAweDk1LCAweDIzLCAweDQwLAotCTB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsIDB4ZTEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg1NCwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhiZiwgMHgwMCwgMHgyZCwgMHg0MywKLQkweDg0LCAweGMwLCAweDAxLCAweDAwLCAweDkwLCAweDAwLCAweDJkLCAweGYzLCAweDgwLCAweGUwLCAweDAxLCAweDAwLAotCTB4NTQsIDB4OTUsIDB4MjMsIDB4NDAsIDB4ODQsIDB4NmMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDAsIDB4MjAsIDB4OWQsCi0JMHhlMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDU4LCAweDk1LCAweGEyLCAweGYwLCAweDM4LCAweDZjLCAweDAwLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQyLAotCTB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWYsIDB4MTMsIDB4OTQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHg0NiwgMHgxOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg5YywgMHgwMCwgMHgyMCwgMHg0MiwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDM3LCAweDAwLCAweDAwLCAweDQwLCAweDQzLCAweDk5LCAweDAxLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4ZjMsIDB4ODAsIDB4ZjQsIDB4MDEsIDB4MDAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ZjMsCi0JMHg4MiwgMHg4OCwgMHgwMSwgMHgwMCwgMHg1ZSwgMHg5NSwgMHgyMywgMHg0MSwgMHg4MCwgMHg2YywgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBjLAotCTB4ODAsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHhhMCwgMHgwMCwgMHhhMCwgMHhmMiwgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHg0MSwKLQkweDI0LCAweGVjLCAweDAwLCAweDAwLCAweDY4LCAweDk1LCAweGE2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4NDIsIDB4MzgsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4NjgsIDB4OTUsIDB4YTYsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHg5OSwgMHgwMSwgMHgwMCwKLQkweDZhLCAweDk1LCAweGEzLCAweGYwLCAweDNhLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDMsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHg2ZSwgMHg5NSwgMHgyMiwgMHhmMCwgMHgzYSwgMHg2YywgMHgwMCwgMHgwMCwgMHhiNCwgMHgwMCwgMHgyMCwgMHgxZCwKLQkweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDVmLCAweDEzLCAweDk0LCAweDAxLCAweDAwLAotCTB4NmUsIDB4OTUsIDB4MjMsIDB4ZjAsIDB4M2EsIDB4NmMsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MjAsIDB4MWQsCi0JMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgyMCwgMHgxMiwgMHhlMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGM0LCAweDAwLCAweGEwLCAweDFjLCAweGUwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDAzLAotCTB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NywgMHg5OCwgMHgwMSwgMHgwMCwgMHg3NywgMHg5NSwgMHg5ZiwgMHg0MSwKLQkweDI0LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDhjLCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4OGMsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4OTUsIDB4MDAsIDB4NDEsCi0JMHgyNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4ZCwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGM2LCAweDk1LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LAotCTB4NjEsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg3YSwgMHg5NSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDhjLCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDgsIDB4ODAsIDB4MzIsIDB4MDEsIDB4MDAsIDB4ODEsIDB4OTUsIDB4YTIsIDB4NDAsCi0JMHg5NSwgMHg2YywgMHgwMCwgMHgwMCwgMHg5OSwgMHg5MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDgyLCAweDAwLCAweGE2LCAweDA0LCAweGIwLCAweDAxLCAweDAwLCAweGEwLCAweDk4LCAweDJmLCAweDQwLAotCTB4MTEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDUsIDB4MDAsIDB4NDEsIDB4ODksIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg5ZiwgMHhmOCwgMHgzZSwgMHhlYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZiwgMHgxMiwKLQkweGUwLCAweGVkLCAweDAwLCAweDAwLCAweGM4LCAweDAwLCAweDIwLCAweGFiLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4Y2MsIDB4MDAsIDB4YTAsIDB4MWYsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4OGEsIDB4OTUsIDB4YTMsIDB4NWYsCi0JMHhlNywgMHg2ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MSwgMHhlNywgMHhjMSwgMHgwMSwgMHgwMCwKLQkweGE2LCAweDAwLCAweDAwLCAweDQwLCAweDQ3LCAweDk5LCAweDAxLCAweDAwLCAweDllLCAweDk1LCAweDIyLCAweGYyLAotCTB4ODYsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDMsIDB4ODQsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHg0MSwgMHg4MCwgMHhjYywgMHgwMSwgMHgwMCwgMHhiOCwgMHgwMCwgMHgyZCwgMHg0MiwKLQkweDgwLCAweGQwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYyLCAweDQwLCAweDg2LCAweGMwLCAweDAxLCAweDAwLAotCTB4OTIsIDB4OTUsIDB4MWYsIDB4NDMsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsIDB4OTMsIDB4OTUsIDB4YTIsIDB4NDAsCi0JMHg4NywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MiwgMHg0MSwgMHg4NywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDk3LCAweDk1LCAweDlmLCAweDQwLCAweDgwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4ODUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MiwgMHg4MCwgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDg4LCAweGIwLCAweDAxLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDQ0LCAweDg0LCAweGY0LCAweDAxLCAweDAwLAotCTB4YjgsIDB4MDAsIDB4MmUsIDB4NDIsIDB4ODAsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjIsIDB4NDAsCi0JMHg4OCwgMHhjMCwgMHgwMSwgMHgwMCwgMHg5ZCwgMHg5NSwgMHgxZiwgMHg0NCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweGExLCAweDk1LCAweGEyLCAweDQwLCAweDg5LCAweDZjLCAweDAwLCAweDAwLCAweGExLCAweDk1LCAweDYyLCAweDQxLAotCTB4ODksIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MDAsIDB4NjIsIDB4NDEsIDB4ODYsIDB4ZTQsIDB4MDEsIDB4MDAsCi0JMHhiOCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0NSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHg2MiwgMHg0MSwKLQkweDg4LCAweGU0LCAweDAxLCAweDAwLCAweGE0LCAweDAwLCAweDIwLCAweDQwLCAweGU1LCAweGIxLCAweDAxLCAweDAwLAotCTB4YTIsIDB4MDAsIDB4MjAsIDB4NDAsIDB4ZTcsIDB4YjEsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MmUsIDB4NDMsCi0JMHg4NywgMHhmMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg4NiwgMHhjMCwgMHgwMSwgMHgwMCwKLQkweGE3LCAweDk1LCAweDIwLCAweDQzLCAweDg3LCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQzLAotCTB4ZTUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MDAsIDB4NDMsIDB4ODAsIDB4Y2UsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHg0MywgMHhlNCwgMHgzMSwgMHgwMSwgMHgwMCwgMHg0MCwgMHgwMSwgMHhlMiwgMHg0MCwKLQkweDg3LCAweDk4LCAweDAxLCAweDAwLCAweDg4LCAweDAwLCAweDJkLCAweDQ0LCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4OTAsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4MmUsIDB4YjAsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MDAsIDB4MmQsIDB4ZjAsCi0JMHg4NiwgMHhiMCwgMHgwMSwgMHgwMCwgMHg5MCwgMHgwMCwgMHgyZCwgMHhmMCwgMHg4MiwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGJhLCAweDAwLCAweDJkLCAweGYwLCAweDk4LCAweGIwLCAweDAxLCAweDAwLCAweGI0LCAweDk1LCAweGEyLCAweDEyLAotCTB4OTgsIDB4NmMsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MmQsIDB4ZjIsIDB4OTgsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHhiNCwgMHg5NSwgMHhhMCwgMHhmMiwgMHg5OCwgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNywKLQkweDgyLCAweGIwLCAweDAxLCAweDAwLCAweDljLCAweDAwLCAweDIwLCAweDQxLCAweGUwLCAweGIxLCAweDAxLCAweDAwLAotCTB4YjQsIDB4MDAsIDB4MmQsIDB4MTIsIDB4ODYsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YjcsIDB4OTUsIDB4YTMsIDB4NDEsCi0JMHhlMCwgMHg2ZCwgMHgwMCwgMHgwMCwgMHhiOCwgMHg5NSwgMHgwMCwgMHhmMCwgMHg4NCwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDg0LCAweGIwLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDJkLCAweDQzLAotCTB4ODQsIDB4ZDAsIDB4MDEsIDB4MDAsIDB4YmIsIDB4OTUsIDB4OWYsIDB4NDIsIDB4ODAsIDB4MzIsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4NSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhiZCwgMHg5NSwgMHhhMywgMHg0MiwKLQkweDE0LCAweDZjLCAweDAwLCAweDAwLCAweGJlLCAweDk1LCAweDAwLCAweDBhLCAweDBjLCAweGIwLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDIsIDB4MGMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4YzAsIDB4OTUsIDB4YTAsIDB4MTcsCi0JMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxNywgMHgwYywgMHhiMCwgMHgwMSwgMHgwMCwKLQkweGM1LCAweDk1LCAweDIyLCAweDQwLCAweDBkLCAweDZjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBhLAotCTB4MGMsIDB4ZWMsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ODIsIDB4ZjQsIDB4MDEsIDB4MDAsCi0JMHhjNSwgMHg5NSwgMHhhMCwgMHg0MSwgMHgwYywgMHg2YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMiwgMHhmMCwKLQkweDgwLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIwLCAweDAxLCAweDAwLAotCTB4OWQsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDMsCi0JMHg0NCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NiwgMHhmMCwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYxLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDQxLAotCTB4ODcsIDB4OTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTAsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwKLQkweGYwLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ5LCAweGYwLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDMsIDB4ZTAsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsCi0JMHg2MSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg2MiwgMHhkZCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweGE4LCAweDVkLCAweDA1LCAweDkwLCAweDAwLCAweDAwLCAweGQxLCAweDk1LCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmUsIDB4NGIsIDB4MTksIDB4OTAsIDB4MDEsIDB4MDAsCi0JMHgwNSwgMHgwMCwgMHgyYSwgMHgwYywgMHhlNCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwNCwKLQkweGU2LCAweGIxLCAweDAxLCAweDAwLCAweGQ3LCAweDk1LCAweDQ1LCAweDQ4LCAweDYxLCAweDMxLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4MDgsIDB4NjIsIDB4ZGQsIDB4MDEsIDB4MDAsIDB4ZGMsIDB4OTUsIDB4MjgsIDB4NDAsCi0JMHg4NywgMHgzMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHg5NSwgMHgyMiwgMHg0OCwgMHg3NywgMHg3ZCwgMHgwMCwgMHgwMCwKLQkweDdlLCAweDk0LCAweDFkLCAweDQ2LCAweDg3LCAweGIwLCAweDAwLCAweDAwLCAweGRmLCAweDk1LCAweDIyLCAweDVmLAotCTB4MTEsIDB4N2MsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjIsIDB4MTUsIDB4NjIsIDB4MzEsIDB4MDAsIDB4MDAsCi0JMHhkZCwgMHg5NSwgMHhhOCwgMHg0MCwgMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MTQsIDB4MmYsIDB4NGMsIDB4ODMsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhlMiwgMHg5NSwgMHhhMiwgMHg0MSwgMHg4MywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NDksIDB4YjEsIDB4MDEsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTEsIDB4OTksIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg5MywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDFmLCAweGIwLCAweDAxLCAweDAwLCAweDM1LCAweDk2LCAweDAwLCAweDQ5LCAweDk2LCAweDMwLCAweDAxLCAweDAwLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4NDksIDB4MDYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDMsCi0JMHgwNiwgMHhjOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDIwLCAweDAwLCAweDAwLCAweGQwLCAweGEwLCAweGM5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLAotCTB4OTMsIDB4YzAsIDB4MDEsIDB4MDAsIDB4ZTksIDB4OTUsIDB4YTAsIDB4NTQsIDB4OTMsIDB4NmMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgwNSwgMHg5NywgMHhiMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg0MCwKLQkweDQ5LCAweDk5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGUxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDIsIDB4MDAsIDB4YTIsIDB4NDQsIDB4YzksIDB4MDEsIDB4MDAsIDB4ZjIsIDB4OTUsIDB4YTIsIDB4NDEsCi0JMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDNiLCAweDk2LCAweDAwLCAweDQwLCAweDQ5LCAweDMxLCAweDAxLCAweDAwLCAweGM4LCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4MzIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MmUsIDB4MDgsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmOSwgMHg5NSwgMHhhMiwgMHg0MSwKLQkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTcsIDB4MmUsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHhmZCwgMHg5NSwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQ5LCAweGIxLCAweDAxLCAweDAwLCAweDQwLCAweDE4LCAweDJlLCAweDA1LAotCTB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHgwMSwgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHg1NywgMHg5NSwgMHgyMCwgMHg0MCwKLQkweGU3LCAweGIxLCAweDAxLCAweDAwLCAweDMwLCAweDk0LCAweDAwLCAweDQwLCAweDQ1LCAweDk5LCAweDAxLCAweDAwLAotCTB4NjQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZTUsIDB4OTksIDB4MDEsIDB4MDAsIDB4NTYsIDB4OTUsIDB4MjAsIDB4NDAsCi0JMHhlNywgMHhiMSwgMHgwMSwgMHgwMCwgMHhiOCwgMHg5NCwgMHgyMCwgMHg0MSwgMHhlNSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweGJhLCAweDk0LCAweDIwLCAweDQxLCAweGU1LCAweGIxLCAweDAxLCAweDAwLCAweDk4LCAweDk0LCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4OTcsIDB4OTgsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwYiwgMHg5NiwgMHhhMiwgMHg0MSwKLQkweDk3LCAweDUwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDk3LCAweGIwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NmYsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsCi0JMHg2OCwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwZiwgMHg5NiwgMHg4NSwgMHg0MSwgMHg5NywgMHg0MCwgMHgwMCwgMHgwMCwKLQkweDgwLCAweDA0LCAweDAwLCAweDQwLCAweDgxLCAweDMyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MzksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MzcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgzNSwgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDMzLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDQxLCAweGIzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4M2YsIDB4YjMsIDB4MDEsIDB4MDAsIDB4ZWUsIDB4MDUsIDB4MDAsIDB4NDAsCi0JMHgyNSwgMHg5YiwgMHgwMSwgMHgwMCwgMHg0MiwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0YiwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDJmLCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4MmQsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NDcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg0MywgMHhiMywgMHgwMSwgMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDJiLCAweDliLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweGVmLCAweDkzLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4ZjEsIDB4OTMsIDB4MDEsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YTUsCi0JMHgzYywgMHg4YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg1YiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDQ1LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLAotCTB4NTksIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4NTcsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgyNywgMHhiMywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDUzLCAweGIzLCAweDAxLCAweDAwLCAweDJiLCAweDk2LCAweGEyLCAweDUwLCAweGZkLCAweDdmLCAweDAwLCAweDAwLAotCTB4MmIsIDB4OTYsIDB4YTIsIDB4NTEsIDB4ZmQsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTYsIDB4MDAsIDB4NDAsCi0JMHgxZCwgMHhiMywgMHgwMCwgMHgwMCwgMHg1MCwgMHg0NiwgMHgwMCwgMHg0MCwgMHgxZCwgMHg5YiwgMHgwMSwgMHgwMCwKLQkweDAwLCAweGMwLCAweDAwLCAweGE2LCAweDg4LCAweGIzLCAweDAxLCAweDAwLCAweGZmLCAweDNmLCAweDAwLCAweGE2LAotCTB4M2EsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4OWQsIDB4M2IsIDB4OWIsIDB4MDEsIDB4MDAsCi0JMHhiNCwgMHgwNSwgMHgwMCwgMHg0MCwgMHgyMywgMHg5YiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDRkLCAweGIzLCAweDAxLCAweDAwLCAweDA4LCAweDBhLCAweDAwLCAweGE2LCAweDE0LCAweGIzLCAweDAxLCAweDAwLAotCTB4MDEsIDB4MDEsIDB4MDAsIDB4OGEsIDB4MTUsIDB4OWIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YTYsCi0JMHg1NiwgMHhiMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1ZSwgMHg1NywgMHhiNSwgMHgwMSwgMHgwMCwKLQkweDE4LCAweDAwLCAweDAwLCAweDRiLCAweDIwLCAweGU0LCAweDAxLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDRiLAotCTB4OTYsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4NDMsIDB4MDAsIDB4NGIsIDB4OTYsIDB4YzgsIDB4MDEsIDB4MDAsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgyMCwgMHhkYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YiwKLQkweDIwLCAweDk0LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDU3LCAweDIxLCAweDkwLCAweDAxLCAweDAwLAotCTB4MDAsIDB4OTksIDB4MmUsIDB4MGEsIDB4OTcsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHhmMSwgMHhiMSwgMHgwMSwgMHgwMCwgMHgzYywgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAzLCAweDAwLCAweDQwLCAweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweGE5LCAweDAwLCAweDQwLAotCTB4NDUsIDB4OTksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjEsIDB4YjEsIDB4MDEsIDB4MDAsCi0JMHg0MCwgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDk3LCAweDk4LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDYxLCAweGIxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NjIsIDB4YjEsIDB4MDEsIDB4MDAsIDB4NDQsIDB4OTYsIDB4YTgsIDB4NDAsCi0JMHg4MSwgMHgzMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHg5NiwgMHhhMiwgMHg0MSwgMHg5NywgMHg1MCwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDgwLCAweDQwLCAweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsCi0JMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhZSwgMHg5ZiwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMCwgMHgwMCwKLQkweGFlLCAweDlmLCAweDAwLCAweDg4LCAweDlhLCAweGIwLCAweDAwLCAweDAwLCAweGFlLCAweDlmLCAweDAwLCAweDg4LAotCTB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4ODgsIDB4OWEsIDB4YjAsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwgMHhhZSwgMHg5ZiwgMHg0MSwgMHg0MCwKLQkweDgxLCAweDMyLCAweDAwLCAweDAwLCAweGIyLCAweDlmLCAweDIyLCAweDQwLCAweDdiLCAweDZmLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4YWUsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg0MSwgMHg3YiwgMHhiMywgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGE0LCAweGM0LCAweGIzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGExLAotCTB4YzYsIDB4YjMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4YTIsIDB4YzgsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwOCwgMHgxNCwgMHgwMCwgMHg0MCwgMHg0OSwgMHg5OSwgMHgwMSwgMHgwMCwgMHhhOCwgMHg5ZiwgMHgwMCwgMHg0ZCwKLQkweDlhLCAweGNjLCAweDAxLCAweDAwLCAweGJiLCAweDlmLCAweDI2LCAweDQwLCAweDgxLCAweDMyLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4NGMsIDB4NDksIDB4YzEsIDB4MDEsIDB4MDAsIDB4YjksIDB4OWYsIDB4YTIsIDB4NDEsCi0JMHg5YiwgMHg1MCwgMHgwMCwgMHgwMCwgMHhiZiwgMHg5ZiwgMHg4MCwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwMCwgMHgwMCwKLQkweDAwLCAweDAwLCAweDUyLCAweDQ5LCAweGZkLCAweDkzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRhLAotCTB4ZmQsIDB4OTMsIDB4MDEsIDB4MDAsIDB4YzIsIDB4OWYsIDB4MDAsIDB4NDIsIDB4Y2QsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHg0YSwgMHhmZCwgMHg5MywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwKLQkweGZkLCAweDkzLCAweDAxLCAweDAwLCAweGMyLCAweDlmLCAweDAwLCAweDQzLCAweGNiLCAweDkzLCAweDAwLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4NTAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDEsIDB4MDAsIDB4ZDIsIDB4OWYsIDB4MDAsIDB4NDAsCi0JMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhiMCwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweGYwLAotCTB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4NGQsIDB4ODAsIDB4YjIsIDB4MDEsIDB4MDAsCi0JMHhjYSwgMHg5ZiwgMHgwMCwgMHg0MCwgMHgxOSwgMHg5OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0YywgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDQ5LCAweGQxLCAweDAxLCAweDAwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4YjAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsCi0JMHgxMCwgMHhiMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMiwgMHg0OSwgMHhiMSwgMHgwMSwgMHgwMCwKLQkweDAwLCAweDAwLCAweDAwLCAweGUzLCAweDQzLCAweGIxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LAotCTB4NDUsIDB4YjEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4N2IsIDB4YjMsIDB4MDEsIDB4MDAsCi0JMHgwMCwgMHgwMCwgMHg0OCwgMHg0ZiwgMHg0MCwgMHhiMSwgMHgwMSwgMHgwMCwgMHhkMiwgMHg5ZiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGNiLAotCTB4ODEsIDB4YzgsIDB4MDEsIDB4MDAsIDB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4OTMsIDB4MDAsIDB4MDAsCi0JMHg0MCwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwNSwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDE4LCAweDA2LCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZjQsIDB4ODIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4YWYsIDB4ODIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgzOCwgMHg4MSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDM2LCAweDgxLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGI4LCAweDgwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ODcsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHhhZiwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhmNSwgMHg4MiwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDk0LCAweDkyLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4ZDcsIDB4OTUsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4NWQsIDB4OTIsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHhjNiwgMHg5NSwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDMzLCAweDkzLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweGQ2LCAweDkyLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4OTIsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHg5YSwgMHg4MiwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsCi0JMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwKLQkweDA0LCAweDAwLCAweDAwLCAweDQwLCAweDgxLCAweGIyLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDQwLAotCTB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ODEsIDB4YjIsIDB4MDAsIDB4MDAsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwgMHg4MSwgMHhiMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg0MCwKLQkweDgxLCAweGIyLCAweDAwLCAweDAwLAotCX0sCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjM1MzFmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL29hc2lzcmN2dWNvZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0jZGVmaW5lIE9BU0lTX1JDVlVDT0RFX1ZFUlNfU1RSSU5HCSIxLjIiCi0jZGVmaW5lIE9BU0lTX1JDVlVDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEwOjI4IgotCi1zdGF0aWMgdTMyIE9hc2lzUmN2VUNvZGVMZW4gPSA1MTI7Ci0KLXN0YXRpYyB1OCBPYXNpc1JjdlVDb2RlWzI1NjBdID0KLXsKLTB4NDcsIDB4NzUsIDB4MDEsIDB4MDAsIDB4MDQsIDB4YTAsIDB4MTMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YjcsIDB4NWIsIDB4MDksCi0weDMwLCAweDAwLCAweGI2LCAweDVmLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDE4LCAweDNiLAotMHg3OCwgMHgzYSwgMHgwMCwgMHgxYywgMHhhMiwgMHg3NywgMHgwMSwgMHgwMCwgMHgxYywgMHgwNywgMHgxZCwgMHgwMSwgMHg3MCwKLTB4MTgsIDB4YWQsIDB4N2IsIDB4ZjEsIDB4ZmYsIDB4MWMsIDB4YjMsIDB4N2IsIDB4YTksIDB4YWEsIDB4MWUsIDB4YjQsIDB4N2IsCi0weDAxLCAweDBjLCAweDFjLCAweGI1LCAweDdiLCAweDBkLCAweDA2LCAweDFjLCAweDAwLCAweDAwLCAweDMwLCAweDY0LCAweDA4LAotMHgwYywgMHgzMSwgMHg1YSwgMHg3MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg1YSwgMHg4MCwgMHgwNCwgMHgwYywgMHgzMSwgMHg0ZSwKLTB4OTAsIDB4MDQsIDB4MGMsIDB4MzEsIDB4NGEsIDB4YTAsIDB4MDAsIDB4MDksIDB4MjUsIDB4NTUsIDB4YzAsIDB4MDQsIDB4MGMsCi0weDMxLCAweDUyLCAweGIwLCAweDAwLCAweGU5LCAweDI0LCAweDU1LCAweGMwLCAweDA0LCAweGNjLCAweGIzLCAweDAwLCAweDFjLAotMHgxYywgMHhlYiwgMHgyZCwgMHgwMSwgMHgwMCwgMHgxYywgMHgwNiwgMHg1NiwgMHgzMiwgMHhkNCwgMHgwOCwgMHgwNywgMHg5ZCwKLTB4MDAsIDB4MDAsIDB4MWMsIDB4N2IsIDB4YjcsIDB4MDIsIDB4MDAsIDB4MTAsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksCi0weDA2LCAweDU2LCAweDVlLCAweGMwLCAweDA0LCAweGEwLCAweDMwLCAweDU0LCAweDAzLCAweDAwLCAweGFjLCAweDMwLCAweDU1LAotMHgwMywgMHgwMCwgMHhjZCwgMHgwMywgMHgzYSwgMHgwMCwgMHgxYywgMHg3YiwgMHhiNywgMHgwMiwgMHgwMCwgMHgxYywgMHg2MCwKLTB4OGUsIDB4MzEsIDB4NTQsIDB4MDksIDB4MjksIDB4MjUsIDB4NTUsIDB4MDMsIDB4MDAsIDB4ODAsIDB4OGUsIDB4MzEsIDB4NTQsCi0weDA5LCAweDhjLCAweDMwLCAweDkxLCAweDAwLCAweDA0LCAweDQ3LCAweDFjLCAweDAxLCAweDAwLCAweDFjLCAweGEwLCAweDBmLAotMHgzMSwgMHg1NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwNCwgMHg0NywgMHgxYywgMHg2NSwgMHhjMCwgMHgwNCwKLTB4NDcsIDB4MWMsIDB4NTUsIDB4MDMsIDB4MDAsIDB4NmMsIDB4MzAsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NGQsIDB4MzQsIDB4MDIsCi0weDAwLCAweDFjLCAweDdiLCAweGI3LCAweDAyLCAweDAwLCAweDFjLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGM4LAotMHg4MywgMHgzNywgMHgwMCwgMHgxYywgMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMCwKLTB4MDQsIDB4YTAsIDB4MGYsIDB4MzAsIDB4NTQsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4N2IsIDB4ZmIsCi0weGYyLCAweDAwLCAweDFjLCAweGNjLCAweDMzLCAweDBkLCAweDAwLCAweDFjLCAweGI0LCAweDdiLCAweGZkLCAweDAzLCAweDFjLAotMHg4MCwgMHgwZSwgMHgzMCwgMHg1NCwgMHgwOSwgMHhlMCwgMHhmYiwgMHgwNSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHg4YywKLTB4MDMsIDB4MDAsIDB4YjMsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4MDAsIDB4MDAsIDB4ZWMsIDB4NzAsIDB4MDQsIDB4MDAsCi0weDAwLCAweGVjLCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDhjLCAweDkzLCAweDAwLCAweDYxLCAweDc2LCAweDhkLCAweGMzLAotMHgwNCwgMHhjMCwgMHg4ZCwgMHgzMSwgMHg1NCwgMHgwOSwgMHhlMCwgMHg3YiwgMHgwMCwgMHhjMCwgMHgxZiwgMHhhMCwgMHhmZCwKLTB4YzUsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MzMsIDB4MDUsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4MDMsIDB4MDAsIDB4M2MsIDB4MWMsCi0weGQ0LCAweGQzLCAweDFiLCAweDAwLCAweDFjLCAweGMwLCAweGQzLCAweDUyLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDVjLAotMHgxMywgMHgwNCwgMHg4ZSwgMHg4ZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHg1YiwgMHg4MCwgMHg1ZSwgMHgxMywgMHgwNCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MDEsIDB4MDAsIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsCi0weDA5LCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGMwLCAweDAzLCAweGZjLCAweDdmLCAweDFjLCAweGEwLCAweDAxLAotMHhhMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwMSwgMHgwMCwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwKLTB4YzAsIDB4MDMsIDB4ZmMsIDB4MDMsIDB4MWMsIDB4ZjUsIDB4NzcsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MjYsIDB4N2EsIDB4ZTYsCi0weDA1LCAweDFjLCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGIzLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweGI1LAotMHgwMiwgMHgwMiwgMHgwMCwgMHgxYywgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHg3YSwgMHg3ZSwgMHgwMiwgMHgwMCwKLTB4MWMsIDB4YjUsIDB4MDIsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4YWYsIDB4MDMsCi0weDAxLCAweDAwLCAweDFjLCAweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LCAweGI1LCAweDAyLCAweDAyLCAweDAwLCAweDFjLAotMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxYywgMHhhMCwgMHgzZCwgMHhhYSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhYywKLTB4MTEsIDB4MDQsIDB4ZDQsIDB4ZDMsIDB4NTIsIDB4MDAsIDB4MWMsIDB4YjUsIDB4M2UsIDB4YjIsIDB4MDEsIDB4MDAsIDB4MjAsCi0weGZiLCAweGZkLCAweGZmLCAweDFmLCAweDgwLCAweDJjLCAweDZjLCAweDAzLCAweDAwLCAweGI5LCAweDNhLCAweDllLCAweDAxLAotMHgwMCwgMHg3NSwgMHgzYiwgMHgwMiwgMHgwMCwgMHgxYywgMHhhNywgMHgxYywgMHgwMSwgMHgwMCwgMHgxMCwgMHhkYiwgMHg4MywKLTB4MTYsIDB4MDAsIDB4MWMsIDB4YzcsIDB4MWQsIDB4MjEsIDB4YzEsIDB4MDQsIDB4YjksIDB4M2IsIDB4OGQsIDB4YzEsIDB4MDQsCi0weDhiLCAweDJjLCAweDAxLCAweDAwLCAweDFjLCAweDZiLCAweDJjLCAweDM1LCAweGMxLCAweDA0LCAweDAwLCAweDAwLCAweDc4LAotMHgxMSwgMHgwMCwgMHhjYiwgMHgyYywgMHg3OSwgMHhjMSwgMHgwNCwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwKLTB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4NTQsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NDksIDB4MjUsIDB4YjEsIDB4MDEsCi0weDAwLCAweGFiLCAweDJjLCAweDgxLCAweGMxLCAweDA0LCAweGE3LCAweDFkLCAweDU1LCAweDAzLCAweDAwLCAweGNjLCAweDMzLAotMHgwOSwgMHgwMCwgMHgxYywgMHhlYiwgMHgyZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhlYSwgMHgyOSwgMHgwMSwgMHgwMCwgMHgxYywKLTB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YWUsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4MzEsCi0weDU0LCAweDA5LCAweGQ0LCAweDA3LCAweGZjLCAweDAzLCAweDFjLCAweDk5LCAweDNhLCAweDAyLCAweDAwLCAweDFjLCAweGJiLAotMHgzOCwgMHgwMiwgMHgwMCwgMHgxYywgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhmYywgMHgwMSwKLTB4MDQsIDB4ZGIsIDB4M2IsIDB4N2UsIDB4MDAsIDB4MWMsIDB4YzcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MjYsIDB4N2EsCi0weGZhLCAweDA1LCAweDFjLCAweDI3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGIzLCAweDBmLCAweDMxLCAweDU0LCAweDA5LAotMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHgzMiwKLTB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksIDB4NTMsCi0weDBmLCAweDMyLCAweDU0LCAweDA5LCAweGEwLCAweDBmLCAweDMxLCAweDU0LCAweDA5LCAweDdhLCAweDA2LCAweDAyLCAweDAwLAotMHgxYywgMHg1MywgMHgwZiwgMHgzMiwgMHg1NCwgMHgwOSwgMHhhZiwgMHgwMywgMHgwMSwgMHgwMCwgMHgxYywgMHg3YSwgMHgwZSwKLTB4MzIsIDB4NTQsIDB4MDksIDB4NTMsIDB4MGYsIDB4MzIsIDB4NTQsIDB4MDksIDB4N2EsIDB4MGUsIDB4MzIsIDB4NTQsIDB4MDksCi0weDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweDdhLCAweDBlLCAweDMyLCAweDU0LCAweDA5LCAweDUzLCAweDBmLCAweDMyLAotMHg1NCwgMHgwOSwgMHg3YSwgMHgwZSwgMHgzMiwgMHg1NCwgMHgwOSwgMHgwMCwgMHgzZCwgMHgwMiwgMHgwMCwgMHgxYywgMHgwMCwKLTB4MDAsIDB4NTgsIDB4MTIsIDB4MDAsIDB4Y2IsIDB4MmMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NzUsIDB4M2IsIDB4MDIsIDB4MDAsCi0weDFjLCAweGE3LCAweDFjLCAweDAxLCAweDAwLCAweDEwLCAweGNiLCAweDJmLCAweDA1LCAweDAwLCAweDFjLCAweDYwLCAweDJjLAotMHgwMCwgMHgwMCwgMHgxYywgMHhjNywgMHgxYywgMHhjOSwgMHgwMiwgMHgwMCwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwKLTB4NTMsIDB4MDcsIDB4MDIsIDB4MDAsIDB4MWMsIDB4NDYsIDB4N2EsIDB4Y2EsIDB4MDUsIDB4MWMsIDB4N2EsIDB4MGUsIDB4MzIsCi0weDU0LCAweDA5LCAweDQwLCAweGZhLCAweDE5LCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDg4LCAweDAyLCAweDA0LCAweDQ2LAotMHg3YSwgMHhjYSwgMHgwNSwgMHgxYywgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwgMHgwOSwgMHhhMCwgMHgwZiwgMHgzMSwgMHg1NCwKLTB4MDksIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YjMsIDB4N2IsCi0weDAxLCAweGMwLCAweDFmLCAweDc0LCAweDBlLCAweDMwLCAweDU0LCAweDA5LCAweGMwLCAweDAzLCAweDljLCAweDAwLCAweDFjLAotMHg4MCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHhhYywKLTB4MTIsIDB4MDUsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZDQsIDB4ZDMsIDB4MmIsIDB4MDAsIDB4MWMsIDB4ZDQsCi0weGQzLCAweDUyLCAweDAwLCAweDFjLCAweDgwLCAweDc2LCAweDdkLCAweDEzLCAweDA0LCAweDAwLCAweDAwLCAweGUwLCAweDAyLAotMHgwMCwgMHhhNiwgMHg3YiwgMHg5NSwgMHgwMywgMHgxMCwgMHhjNywgMHg5YywgMHgwMCwgMHgwMCwgMHgxYywgMHg4MCwgMHgyYywKLTB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsCi0weGFiLCAweDJkLCAweGQ5LCAweDEyLCAweDA1LCAweDA3LCAweDFkLCAweGI1LCAweGMyLCAweDA0LCAweDhiLCAweDJkLCAweDAxLAotMHgwMCwgMHgxYywgMHg2OSwgMHgyNSwgMHgwMSwgMHgwMCwgMHgxYywgMHhhNiwgMHg3YiwgMHg5NSwgMHgwMywgMHgxMCwgMHhjYiwKLTB4MmYsIDB4MDksIDB4MDAsIDB4MWMsIDB4NjAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDMsCi0weDAwLCAweDUzLCAweDBmLCAweDMyLCAweDU0LCAweDA5LCAweDQ2LCAweDdhLCAweGNhLCAweDA1LCAweDFjLCAweDdhLCAweDBlLAotMHgzMiwgMHg1NCwgMHgwOSwgMHg0MCwgMHhmYSwgMHgxOSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgwNCwKLTB4NDYsIDB4N2EsIDB4Y2EsIDB4MDUsIDB4MWMsIDB4YjUsIDB4MGYsIDB4MzEsIDB4NTQsIDB4MDksIDB4YTAsIDB4MGYsIDB4MzEsCi0weDU0LCAweDA5LCAweDczLCAweGVjLCAweDJhLCAweDAzLCAweDA0LCAweDYwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweDAwLAotMHgwMCwgMHgyOCwgMHgwMywgMHgwMCwgMHhjNywgMHgxYywgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHgyOCwgMHgxMywKLTB4MDUsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsIDB4MWMsIDB4YzAsIDB4ZDcsIDB4MjIsIDB4MDAsIDB4MWMsIDB4NzUsIDB4NTYsCi0weDdlLCAweDEzLCAweDA0LCAweDYwLCAweDJjLCAweDAwLCAweDAwLCAweDFjLCAweGU3LCAweDFjLCAweDQ1LCAweDAzLCAweDA0LAotMHhlNywgMHg5YywgMHgwMCwgMHgwMCwgMHgxYywgMHhhNiwgMHg3YiwgMHg5NSwgMHgwMywgMHgxMCwgMHg4MCwgMHgyYywgMHgwMCwKLTB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsIDB4MDQsIDB4YjksCi0weDdiLCAweDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDhjLCAweGMzLCAweDA0LCAweGNiLCAweGFmLCAweGZjLCAweDA3LAotMHgxYywgMHhjYiwgMHgyZiwgMHgwMSwgMHgwNCwgMHgxYywgMHhjNywgMHg5ZiwgMHg4MCwgMHgwMywgMHgxYywgMHgwMCwgMHgwMCwKLTB4OGMsIDB4YzMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4ZmMsIDB4MDcsIDB4MWMsIDB4Y2IsIDB4MmYsIDB4MGQsIDB4MDQsIDB4MWMsCi0weGM3LCAweDlmLCAweDgwLCAweDAzLCAweDFjLCAweDAwLCAweDAwLCAweDhjLCAweGMzLCAweDA0LCAweGNiLCAweGFmLCAweDAwLAotMHhmOCwgMHgxZCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwMCwgMHgxZCwgMHhhNiwgMHg3YiwgMHg5NSwgMHgwMywgMHgxYywgMHhjNywKLTB4OWMsIDB4OGMsIDB4YzMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MTMsIDB4MDUsIDB4MDcsIDB4MWQsIDB4MDEsIDB4MDAsCi0weDFjLCAweGMwLCAweDFkLCAweGRjLCAweGQzLCAweDA4LCAweDI3LCAweDlkLCAweGU0LCAweDAzLCAweDAwLCAweGEwLCAweGVlLAotMHg0NiwgMHhkNCwgMHgwMCwgMHhmYiwgMHg3NSwgMHgwOSwgMHgxNCwgMHgwNCwgMHgyMCwgMHg3YiwgMHgwNiwgMHgwMCwgMHgxYywKLTB4YzAsIDB4MWMsIDB4MWMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4ZDMsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGY0LCAweDAwLCAweGMwLCAweGVmLCAweGYyLCAweDAwLCAweDFjLCAweDIwLCAweDI1LCAweDVjLCAweDE0LCAweDA0LCAweDYwLAotMHhiNywgMHhkMiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgxNSwgMHgwMCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywKLTB4MWMsIDB4Y2MsIDB4MzMsIDB4MDUsIDB4MDIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YzUsIDB4MDQsIDB4NjAsIDB4YjcsCi0weDBlLCAweDA1LCAweDA0LCAweDAwLCAweDAwLCAweDBjLCAweDE1LCAweDA0LCAweDAwLCAweDAwLCAweDVjLCAweGM0LCAweDA0LAotMHhjMCwgMHgxZCwgMHg5OCwgMHhmMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg2OCwgMHhjNCwgMHgwNCwgMHgwNywgMHg5ZCwgMHgwMCwKLTB4MDAsIDB4MWMsIDB4MWIsIDB4NzQsIDB4ZmQsIDB4ZjMsIDB4MDQsIDB4YTYsIDB4N2IsIDB4ZjEsIDB4MDMsIDB4MWMsIDB4YTAsCi0weDBmLCAweDY5LCAweDU0LCAweDA5LCAweGUwLCAweDdiLCAweDAwLCAweGZjLCAweDFmLCAweDM5LCAweDdmLCAweDAyLCAweDAwLAotMHgxYywgMHgwNywgMHgxZCwgMHg5ZCwgMHhjMywgMHgwNCwgMHhhNiwgMHg3YiwgMHhhZCwgMHgwMywgMHgxYywgMHgwMCwgMHgwMCwKLTB4NjgsIDB4YzQsIDB4MDQsIDB4ZTAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDQsCi0weGNiLCAweGFmLCAweDAwLCAweGY4LCAweDFkLCAweGNiLCAweDJmLCAweDAxLCAweDEwLCAweDFkLCAweDAwLCAweDAwLCAweGFjLAotMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwMywgMHgwNCwgMHhjYiwgMHhhZiwgMHgwMCwgMHhmOCwgMHgxZCwgMHhjYiwKLTB4MmYsIDB4MDEsIDB4MTgsIDB4MWQsIDB4YzcsIDB4OWYsIDB4MDAsIDB4MGIsIDB4MWMsIDB4MDAsIDB4MDAsIDB4YWMsIDB4YzMsCi0weDA0LCAweGZiLCAweDc1LCAweDAxLCAweDAwLCAweDFjLCAweDA3LCAweDFkLCAweDAxLCAweDAwLCAweDFjLCAweGNjLCAweGIzLAotMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwMSwgMHgwMiwgMHgxYywgMHgwMCwgMHgwMCwgMHhhYywgMHhjMywgMHgwNCwKLTB4YTAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YTAsIDB4ZWUsIDB4YTIsIDB4MDMsIDB4MDQsIDB4Y2IsIDB4YWYsIDB4ZmMsCi0weDA3LCAweDFjLCAweGNiLCAweDJmLCAweDA5LCAweDA0LCAweDFjLCAweGZiLCAweDc1LCAweDAxLCAweDAwLCAweDFjLCAweDAwLAotMHgwMCwgMHhhYywgMHhjMywgMHgwNCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgwMSwgMHgwMiwKLTB4MWMsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YzUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MzQsIDB4MDUsIDB4Y2MsIDB4YjMsCi0weGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLCAweDE1LCAweDAyLCAweDFjLCAweDQ3LCAweDlkLCAweDU0LCAweGM0LCAweDA0LAotMHgwMCwgMHgwMCwgMHg3OCwgMHg0NCwgMHgwMCwgMHg4MCwgMHgxZCwgMHg3YywgMHg1NCwgMHgwNCwgMHg4NywgMHgxZCwgMHg4ZCwKLTB4MDQsIDB4MDAsIDB4Y2UsIDB4NzYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZWYsIDB4NzYsIDB4OWQsIDB4YzQsIDB4MDQsIDB4YTQsCi0weDc3LCAweDhkLCAweDI0LCAweDA5LCAweGU0LCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweGM0LCAweDc2LCAweDAxLCAweDAwLAotMHgxYywgMHgwMCwgMHgwMCwgMHg5OCwgMHg1NCwgMHgwNCwgMHhkNywgMHg3NiwgMHgwMSwgMHg1MCwgMHgxOCwgMHhmNiwgMHg3NiwKLTB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsCi0weGNjLCAweDMwLCAweDQ1LCAweGM1LCAweDA0LCAweGViLCAweDJkLCAweDAxLCAweDAwLCAweDFjLCAweGVhLCAweDI5LCAweDAxLAotMHgwMCwgMHgxYywgMHhjMCwgMHg1OSwgMHgwMSwgMHgwMCwgMHgxYywgMHhmNSwgMHg3NywgMHgyOSwgMHhjNSwgMHgwNCwgMHhlMCwKLTB4MzAsIDB4ZGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NGMsIDB4YjAsIDB4MDQsIDB4MDAsIDB4MjAsIDB4NGMsIDB4ZjQsIDB4MDQsCi0weDAwLCAweDAwLCAweDAwLCAweGU4LCAweDA0LCAweDAwLCAweGNjLCAweGIzLCAweGZjLCAweDAzLCAweDFjLCAweGNjLCAweDMzLAotMHgwOSwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhiNSwgMHhjNCwgMHgwNCwgMHhjYywgMHhiMywgMHhmYywgMHgwMywgMHgxYywKLTB4Y2MsIDB4MzMsIDB4MTksIDB4MDIsIDB4MWMsIDB4ZWIsIDB4MmQsIDB4YjUsIDB4YzQsIDB4MDQsIDB4Y2MsIDB4YjMsIDB4ZmMsCi0weDAzLCAweDFjLCAweGNjLCAweDMzLCAweDBkLCAweDAyLCAweDFjLCAweGViLCAweDJkLCAweGI1LCAweGM0LCAweDA0LCAweGNjLAotMHhiMywgMHhmYywgMHgwMywgMHgxYywgMHhjYywgMHgzMywgMHgxMSwgMHgwMiwgMHgxYywgMHhlYiwgMHgyZCwgMHhiNSwgMHhjNCwKLTB4MDQsIDB4MDAsIDB4N2IsIDB4MDAsIDB4ODAsIDB4MWMsIDB4YWUsIDB4NzcsIDB4NDUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDA0LCAweGMwLCAweDA0LCAweGQzLCAweDhiLCAweDAwLCAweGZjLCAweDFmLCAweDYwLCAweDdhLCAweDNjLCAweDAwLCAweDFjLAotMHg2MCwgMHg0YywgMHhjMCwgMHgwNCwgMHgwMCwgMHhjMCwgMHgyZiwgMHgyMCwgMHgwNSwgMHgxZiwgMHhlMCwgMHgzMCwgMHhiMCwKLTB4MDQsIDB4MDAsIDB4ODAsIDB4MjUsIDB4YjAsIDB4MDQsIDB4MDAsIDB4YjUsIDB4NWIsIDB4YjEsIDB4MDQsIDB4MDQsIDB4NjksCi0weDI2LCAweDAxLCAweDAwLCAweDFjLCAweDZhLCAweDJiLCAweDAxLCAweDAwLCAweDFjLCAweDgwLCAweDFkLCAweDAwLCAweDAwLAotMHgxYywgMHhhOSwgMHgyNSwgMHg0NSwgMHgwNSwgMHgwMCwgMHhlZSwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhhZiwgMHg3NywKLTB4MDEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MjQsIDB4MDQsIDB4YjQsIDB4NWYsIDB4MDEsIDB4NDAsIDB4MTgsCi0weDA3LCAweDlkLCAweDQ4LCAweDU1LCAweDA0LCAweGI3LCAweDc2LCAweDAxLCAweDAwLCAweDFjLCAweDk2LCAweDc2LCAweDAxLAotMHgwMCwgMHgxYywgMHg0NywgMHgxZCwgMHgwMSwgMHgwMCwgMHgxYywgMHhhNCwgMHgzMywgMHgwMSwgMHg2MCwgMHgxOCwgMHhhNCwKLTB4MmYsIDB4MDEsIDB4NjAsIDB4MTgsIDB4NjQsIDB4NzcsIDB4MDEsIDB4NjAsIDB4MTgsIDB4MjQsIDB4NzcsIDB4MDEsIDB4NjAsCi0weDE4LCAweDQ0LCAweDc3LCAweDAxLCAweDAwLCAweDFjLCAweDY0LCAweDg4LCAweDAzLCAweDAwLCAweDFjLCAweGE0LCAweDNmLAotMHgwMSwgMHgwMCwgMHgxYywgMHhhNCwgMHgzYiwgMHgwMSwgMHgwMCwgMHgxYywgMHg1MywgMHg3YiwgMHgwMCwgMHhjMCwgMHgxYywKLTB4ZDMsIDB4Y2YsIDB4MWIsIDB4MDAsIDB4MWMsIDB4NTMsIDB4NGYsIDB4MDIsIDB4MDAsIDB4MWMsIDB4ZGEsIDB4Y2YsIDB4MDAsCi0weGMwLCAweDFmLCAweGQ1LCAweDU3LCAweDBmLCAweDAwLCAweDFjLCAweGQzLCAweGQzLCAweDM3LCAweDAwLCAweDFjLCAweGQ0LAotMHg1MywgMHgwZiwgMHgwMCwgMHgxYywgMHhlMCwgMHgyOSwgMHgwMCwgMHgwMCwgMHgxYywgMHhmNSwgMHhkNSwgMHhiMCwgMHgwNSwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4NTUsIDB4MDQsIDB4NzcsIDB4NTYsIDB4MDEsIDB4MDAsIDB4MWMsIDB4NTYsIDB4NTMsCi0weDAxLCAweDAwLCAweDFjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDE4LCAweDAwLCAweDAwLCAweDA0LCAweGMwLCAweDA0LAotMHhmNSwgMHg1NSwgMHgwMSwgMHgwMCwgMHgxYywgMHgwMCwgMHgwMCwgMHhiNCwgMHg1NSwgMHgwNCwgMHg3NywgMHg1NiwgMHgwMSwKLTB4MDAsIDB4MWMsIDB4NTYsIDB4NTMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MTgsIDB4MDAsCi0weDAwLCAweDA0LCAweGMwLCAweDA0LCAweGNiLCAweDJmLCAweDAxLCAweDE4LCAweDEwLCAweGNiLCAweDJmLCAweDAxLCAweDEwLAotMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwOCwgMHgxMCwgMHhjYiwgMHgyZiwgMHgwMSwgMHgwOCwgMHgxMCwgMHhjYiwgMHgyZiwKLTB4MDEsIDB4MjAsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MjgsIDB4MTAsIDB4Y2IsIDB4MmYsIDB4MDEsIDB4MDAsIDB4MTAsCi0weDg5LCAweDI1LCAweDYxLCAweGMyLCAweDA0LCAweDAwLCAweDAwLCAweGVjLCAweGMyLCAweDA0LCAweDAwLCAweDAwLCAweDU0LAotMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg1NCwgMHhjMywgMHgwNCwgMHgwMCwKLTB4MDAsIDB4NjAsIDB4YzIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4YzIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsIDB4YzMsCi0weDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDQwLCAweDFjLAotMHg2YywgMHhjMCwgMHgwNCwgMHg0MCwgMHgxYywgMHg5YywgMHhjMCwgMHgwNCwgMHhhNywgMHg3NywgMHg1NSwgMHhjMywgMHgwNCwKLTB4MDAsIDB4MDAsIDB4YzQsIDB4YzAsIDB4MDQsIDB4MjcsIDB4MWQsIDB4ZjEsIDB4YzAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NTQsCi0weGMzLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDAwLCAweDAwLCAweDU0LCAweGMzLCAweDA0LCAweDAwLAotMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLAotMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsCi0weDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAotMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywKLTB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsCi0weDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LAotMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwKLTB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsCi0weDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLAotMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwKLTB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsCi0weDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLAotMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjNiwgMHgwNCwKLTB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsIDB4YzYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MmMsCi0weGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LCAweDAwLCAweDAwLCAweDJjLCAweGM2LCAweDA0LAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaAppbmRleCBhOGVhNTlkLi5jY2Y3NjI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oCkBAIC00NiwzMCArNDYsMTAgQEAKICNkZWZpbmUgT0FTSVNfVUNPREVfVkVSU19EQVRFICAJIjIwMDYvMDMvMjcgMTU6MTA6MzciCiAjZGVmaW5lIE9BU0lTX1VDT0RFX0hPU1RJRl9JRCAgCTMKIAotc3RhdGljIHMzMiBPTnVtU2VjdGlvbnMgPSAweDI7Ci1zdGF0aWMgdTMyIE9TZWN0aW9uU2l6ZVtdID0gewotCTB4MDAwMDQwMDAsIDB4MDAwMTAwMDAsCi19OwotCi1zdGF0aWMgdTMyIE9TZWN0aW9uU3RhcnRbXSA9IHsKLQkweDAwMDAwMDAwLCAweDAwMDA4MDAwLAotfTsKLQogI2RlZmluZSBNT0pBVkVfVUNPREVfVkVSU19TVFJJTkcJIjEuMiIKICNkZWZpbmUgTU9KQVZFX1VDT0RFX1ZFUlNfREFURSAgCSIyMDA2LzAzLzI3IDE1OjEyOjIyIgogI2RlZmluZSBNT0pBVkVfVUNPREVfSE9TVElGX0lEICAJMwogCi1zdGF0aWMgczMyIE1OdW1TZWN0aW9ucyA9IDB4MjsKLXN0YXRpYyB1MzIgTVNlY3Rpb25TaXplW10gPQotewotCTB4MDAwMDgwMDAsIDB4MDAwMTAwMDAsCi19OwotCi1zdGF0aWMgdTMyIE1TZWN0aW9uU3RhcnRbXSA9Ci17Ci0JMHgwMDAwMDAwMCwgMHgwMDAwODAwMCwKLX07Ci0KICNkZWZpbmUgR0JfUkNWVUNPREVfVkVSU19TVFJJTkcJIjEuMiIKICNkZWZpbmUgR0JfUkNWVUNPREVfVkVSU19EQVRFICAJIjIwMDYvMDMvMjcgMTU6MTI6MTUiCiBzdGF0aWMgdTMyIE9hc2lzUmN2VUNvZGVMZW4gPSA1MTI7CkBAIC0yMDEsMTcgKzE4MSw2IEBACiAKICNkZWZpbmUgU0xJQ19NQVhfQ0FSRFMgICAgICAgICAgICAgIDMyCiAjZGVmaW5lIFNMSUNfTUFYX1BPUlRTICAgICAgICAgICAgICA0ICAgICAgICAvKiBNYXggIyBvZiBwb3J0cyBwZXIgY2FyZCAgICovCi0jaWYgU0xJQ19EVU1QX0VOQUJMRUQKLS8qCi1EdW1wIGJ1ZmZlciBzaXplCi0KLVRoaXMgY2Fubm90IGJlIGJpZ2dlciB0aGFuIHRoZSBtYXggRE1BIHNpemUgdGhlIGNhcmQgc3VwcG9ydHMsCi1naXZlbiB0aGUgY3VycmVudCBjb2RlIHN0cnVjdHVyZSBpbiB0aGUgaG9zdCBhbmQgdWNvZGUuCi1Nb2phdmUgc3VwcG9ydHMgMTZLLCBPYXNpcyBzdXBwb3J0cyAxNkstMSwgc28KLWp1c3Qgc2V0IHRoaXMgYXQgMTVLLCBzaG91bGRudCBtYWtlIHRoYXQgbXVjaCBvZiBhIGRpZmYuCi0qLwotI2RlZmluZSBEVU1QX0JVRl9TSVpFICAgICAgICAgICAgICAgMHgzQzAwCi0jZW5kaWYKIAogCiBzdHJ1Y3QgbWNhc3RfYWRkcmVzcyB7CkBAIC0zNjcsMzAgKzMzNiw2IEBACiAgICAgdTMyICAgICAgICAgICAgIG1heF9pc3JfeG1pdHM7CiAgICAgdTMyICAgICAgICAgICAgIHJjdl9pbnRlcnJ1cHRfeWllbGRzOwogICAgIHUzMiAgICAgICAgICAgICB0eF9wYWNrZXRzOwotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0gICAgdTMyICAgICAgICAgICAgIGR1bXBzdGF0dXM7ICAgICAgICAgICAvKiBSZXN1bHQgb2YgZHVtcCBVUFIgKi8KLSAgICB2b2lkICpjbWRidWZmZXI7Ci0KLSAgICB1bG9uZyAgICAgICAgICAgICAgIGNtZGJ1ZmZlcl9waHlzOwotICAgIHUzMiAgICAgICAgICAgICBjbWRidWZmZXJfcGh5c2w7Ci0gICAgdTMyICAgICAgICAgICAgIGNtZGJ1ZmZlcl9waHlzaDsKLQotICAgIHUzMiAgICAgICAgICAgICBkdW1wX2NvdW50OwotICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqZHVtcF90YXNrX2lkOwotICAgIHUzMiAgICAgICAgICAgICBkdW1wX3dhaXRfY291bnQ7Ci0gICAgdWludCAgICAgICAgICAgICAgICBkdW1wdGhyZWFkX3J1bm5pbmc7IC8qIGhhcyBhIGR1bXAgdGhyZWFkIGJlZW4gaW5pdCdkICAqLwotICAgIHVpbnQgICAgICAgICAgICAgICAgZHVtcF9yZXF1ZXN0ZWQ7ICAgICAvKiAwIG5vLCAxID0gcmVxc3RkIDI9Y3VyciAzPWRvbmUgKi8KLSAgICB1MzIgICAgICAgICAgICAgZHVtcHRpbWVfc3RhcnQ7Ci0gICAgdTMyICAgICAgICAgICAgIGR1bXB0aW1lX2NvbXBsZXRlOwotICAgIHUzMiAgICAgICAgICAgICBkdW1wdGltZV9kZWx0YTsKLSAgICB2b2lkICpkdW1wYnVmZmVyOwotICAgIHVsb25nICAgICAgICAgICAgICAgZHVtcGJ1ZmZlcl9waHlzOwotICAgIHUzMiAgICAgICAgICAgICBkdW1wYnVmZmVyX3BoeXNsOwotICAgIHUzMiAgICAgICAgICAgICBkdW1wYnVmZmVyX3BoeXNoOwotICAgIHdhaXRfcXVldWVfaGVhZF90ICAgZHVtcF93cTsKLSAgICBzdHJ1Y3QgZmlsZSAgICAgICAgKmR1bXBoYW5kbGU7Ci0gICAgbW1fc2VnbWVudF90ICAgICAgICBkdW1wZmlsZV9mczsKLSNlbmRpZgogICAgIHUzMiAgICAgICAgICAgICBkZWJ1Z19peDsKICAgICB1c2hvcnQgICAgICAgICAgICAgIHJlZ190eXBlWzMyXTsKICAgICB1c2hvcnQgICAgICAgICAgICAgIHJlZ19vZmZzZXRbMzJdOwpAQCAtNTE2LDggKzQ2MSw2IEBACiAgICAgdWludCAgICAgICAgICAgICAgICB1cHJfYnVzeTsKICAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgIHBpbmd0aW1lcjsKICAgICB1MzIgICAgICAgICAgICAgcGluZ3RpbWVyc2V0OwotICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgc3RhdHN0aW1lcjsKLSAgICB1MzIgICAgICAgICAgICAgc3RhdHN0aW1lcnNldDsKICAgICBzdHJ1Y3QgdGltZXJfbGlzdCAgIGxvYWR0aW1lcjsKICAgICB1MzIgICAgICAgICAgICAgbG9hZHRpbWVyc2V0OwogICAgIHN0cnVjdCBkZW50cnkgICAgICAqZGVidWdmc19lbnRyeTsKQEAgLTU3MCwyNSArNTEzLDYgQEAKICAgICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIH07CiAKLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotI2RlZmluZSBTTElDX0RVTVBfUkVRVUVTVEVEICAgICAgMQotI2RlZmluZSBTTElDX0RVTVBfSU5fUFJPR1JFU1MgICAgMgotI2RlZmluZSBTTElDX0RVTVBfRE9ORSAgICAgICAgICAgMwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIE1pY3JvY29kZSBjcmFzaCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuICBUaGlzCi0gKiBzdHJ1Y3R1cmUgaXMgd3JpdHRlbiBvdXQgdG8gdGhlIGNhcmQncyBTUkFNIHdoZW4gdGhlIG1pY3JvY29kZSBwYW5pYydzLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IHNsaWNfY3Jhc2hfaW5mbyB7Ci0gICAgdXNob3J0ICBjcHVfaWQ7Ci0gICAgdXNob3J0ICBjcmFzaF9wYzsKLX07Ci0KLSNkZWZpbmUgQ1JBU0hfSU5GT19PRkZTRVQgICAweDE1NUMKLQotI2VuZGlmCiAKICNkZWZpbmUgVVBEQVRFX1NUQVRTKGxhcmdlc3RhdCwgbmV3c3RhdCwgb2xkc3RhdCkgICAgICAgICAgICAgICAgICAgICAgICBcCiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNjA1LDExICs1MjksMTEgQEAKIAogI2RlZmluZSBFVEhFUl9FUV9BRERSKF9BZGRyQSwgX0FkZHJCLCBfUmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX1Jlc3VsdCA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9SZXN1bHQgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoKih1MzIgKikoX0FkZHJBKSAhPSAqKHUzMiAqKShfQWRkckIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCV9SZXN1bHQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCV9SZXN1bHQgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICgqKHUxNiAqKSgmKChfQWRkckEpWzRdKSkgIT0gKih1MTYgKikoJigoX0FkZHJCKVs0XSkpKSAgICAgICAgXAotCV9SZXN1bHQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCV9SZXN1bHQgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19JQTY0KQpAQCAtNjIyLDggKzU0Niw4IEBACiAjZGVmaW5lICAgU0xJQ19HRVRfQUREUl9ISUdIKF9hZGRyKSAgKHUzMikwCiAjZW5kaWYKIAotI2RlZmluZSBGTFVTSCAgICAgICBUUlVFCi0jZGVmaW5lIERPTlRfRkxVU0ggIEZBTFNFCisjZGVmaW5lIEZMVVNICQl0cnVlCisjZGVmaW5lIERPTlRfRkxVU0gJZmFsc2UKIAogI2RlZmluZSBTSU9DU0xJQ0RVTVBDQVJEICAgICAgICAgKFNJT0NERVZQUklWQVRFKzkpCiAjZGVmaW5lIFNJT0NTTElDU0VUSU5UQUdHICAgICAgICAoU0lPQ0RFVlBSSVZBVEUrMTApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljX29zLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljX29zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YzY3ODQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY19vcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IChjKTIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCi0gKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCi0gKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogRklMRU5BTUU6IHNsaWNfb3MuaAotICoKLSAqIFRoZXNlIGFyZSB0aGUgTGludXgtc3BlY2lmaWMgZGVmaW5pdGlvbnMgcmVxdWlyZWQgZm9yIHRoZSBTTElDT1NTCi0gKiBkcml2ZXIsIHdoaWNoIHNob3VsZCBhbGxvdyBmb3IgZ3JlYXRlciBwb3J0YWJpbGl0eSB0byBvdGhlciBPU2VzLgotICovCi0jaWZuZGVmIF9TTElDX09TX1NQRUNJRklDX0hfCi0jZGVmaW5lIF9TTElDX09TX1NQRUNJRklDX0hfCi0KLSNkZWZpbmUgRkFMU0UgICAgICAgICAgICAgICAoMCkKLSNkZWZpbmUgVFJVRSAgICAgICAgICAgICAgICAoMSkKLQotI2RlZmluZSBTTElDX1NFQ1NfVE9fSklGRlMoeCkgICgoeCkgKiBIWikKLSNkZWZpbmUgU0xJQ19NU19UT19KSUZGSUVTKHgpICAoU0xJQ19TRUNTX1RPX0pJRkZTKCh4KSkgLyAxMDAwKQotCi0jaWZkZWYgREVCVUdfUkVHSVNURVJfVFJBQ0UKLSNkZWZpbmUgV1JJVEVfUkVHKHJlZywgdmFsdWUsIGZsdXNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJYWRhcHRlci0+Y2FyZC0+cmVnX3R5cGVbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXhdID0gMDsgICBcCi0JCWFkYXB0ZXItPmNhcmQtPnJlZ19vZmZzZXRbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXhdID0gXAotCQkoKHVuc2lnbmVkIGNoYXIgKikoJnJlZykpIC0gXAotCQkoKHVuc2lnbmVkIGNoYXIgKilhZGFwdGVyLT5zbGljX3JlZ3MpOyBcCi0JCWFkYXB0ZXItPmNhcmQtPnJlZ192YWx1ZVthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCsrXSA9IHZhbHVlOyAgXAotCQlpZiAoYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXggPT0gMzIpIFwKLQkJCWFkYXB0ZXItPmNhcmQtPmRlYnVnX2l4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgXAotCQlzbGljX3JlZzMyX3dyaXRlKCgmcmVnKSwgKHZhbHVlKSwgKGZsdXNoKSk7ICAgICAgICAgICAgXAotCX0KLSNkZWZpbmUgV1JJVEVfUkVHNjQoYSwgcmVnLCB2YWx1ZSwgcmVnaCwgdmFsaCwgZmx1c2gpICAgICAgICAgICAgICAgICAgICAgICAgXAotCXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJYWRhcHRlci0+Y2FyZC0+cmVnX3R5cGVbYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXhdID0gMTsgICAgICAgIFwKLQkJYWRhcHRlci0+Y2FyZC0+cmVnX29mZnNldFthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peF0gPSBcCi0JCSgodW5zaWduZWQgY2hhciAqKSgmcmVnKSkgLSBcCi0JCSgodW5zaWduZWQgY2hhciAqKWFkYXB0ZXItPnNsaWNfcmVncyk7IFwKLQkJYWRhcHRlci0+Y2FyZC0+cmVnX3ZhbHVlW2FkYXB0ZXItPmNhcmQtPmRlYnVnX2l4XSA9IHZhbHVlOyAgIFwKLQkJYWRhcHRlci0+Y2FyZC0+cmVnX3ZhbHVlaFthZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCsrXSA9IHZhbGg7ICBcCi0JCWlmIChhZGFwdGVyLT5jYXJkLT5kZWJ1Z19peCA9PSAzMikgXAotCQkJYWRhcHRlci0+Y2FyZC0+ZGVidWdfaXggPSAwOyAgICAgICAgICAgICAgICAgICAgICBcCi0JCXNsaWNfcmVnNjRfd3JpdGUoKGEpLCAoJnJlZyksICh2YWx1ZSksICgmcmVnaCksICh2YWxoKSwgXAotCQkJCShmbHVzaCkpO1wKLQl9Ci0jZWxzZQotI2RlZmluZSBXUklURV9SRUcocmVnLCB2YWx1ZSwgZmx1c2gpIFwKLQlzbGljX3JlZzMyX3dyaXRlKCgmcmVnKSwgKHZhbHVlKSwgKGZsdXNoKSkKLSNkZWZpbmUgV1JJVEVfUkVHNjQoYSwgcmVnLCB2YWx1ZSwgcmVnaCwgdmFsaCwgZmx1c2gpIFwKLQlzbGljX3JlZzY0X3dyaXRlKChhKSwgKCZyZWcpLCAodmFsdWUpLCAoJnJlZ2gpLCAodmFsaCksIChmbHVzaCkpCi0jZW5kaWYKLQotI2VuZGlmICAvKiBfU0xJQ19PU19TUEVDSUZJQ19IXyAgKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2J1aWxkLmggYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljYnVpbGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUwNWUwNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljYnVpbGQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KLSAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKLSAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBGSUxFTkFNRTogc2xpY2J1aWxkLmgKLSAqCi0gKiBUaGUgZm9sbG93aW5nIGNvbnRhaW5zIHRoZSBjb21waWxlciBkaXJlY3RpdmUgc3dpdGNoZXMgdXNlZCBmb3IKLSAqIGRpZmZlcmVudCBTTElDIGJ1aWxkIG9wdGlvbnMuICBUaGV5IGNhbiBhbGwgYmUgc2V0IGluIHRoZSBNYWtlZmlsZQotICogYnV0IHRoZSBkZWZhdWx0cyBhcmUgZGVmaW5lZCBoZXJlLgotICovCi0jaWZuZGVmIF9TTElDX0JVSUxEX0hfCi0jZGVmaW5lIF9TTElDX0JVSUxEX0hfCi0KLSNpZm5kZWYgU0xJQ19QUk9EVUNUSU9OX0JVSUxECi0jZGVmaW5lIFNMSUNfUFJPRFVDVElPTl9CVUlMRAkJCTEKLSNlbmRpZgotI2lmbmRlZiBTTElDX0ZBSUxVUkVfUkVTRVQKLSNkZWZpbmUgU0xJQ19GQUlMVVJFX1JFU0VUCQkJMQotI2VuZGlmCi0jZGVmaW5lIERCRyAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jaWZuZGVmIFNMSUNfQVNTRVJUX0VOQUJMRUQKLSNkZWZpbmUgU0xJQ19BU1NFUlRfRU5BQkxFRAkJCTEKLSNlbmRpZgotI2lmbmRlZiBTTElDX01DQVNUX0VOQUJMRUQKLSNkZWZpbmUgU0xJQ19NQ0FTVF9FTkFCTEVECQkJMQotI2VuZGlmCi0jaWZuZGVmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKLSNkZWZpbmUgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAkJCTEKLSNlbmRpZgotI2lmbmRlZiBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECi0jZGVmaW5lIFNMSUNfR0VUX1NUQVRTX1RJTUVSX0VOQUJMRUQJCTAKLSNlbmRpZgotI2lmbmRlZiBTTElDX1BJTkdfVElNRVJfRU5BQkxFRAotI2RlZmluZSBTTElDX1BJTkdfVElNRVJfRU5BQkxFRAkJMQotI2VuZGlmCi0jaWZuZGVmIFNMSUNfSU9DVExfU1VQUE9SVF9FTkFCTEVECi0jZGVmaW5lIFNMSUNfSU9DVExfU1VQUE9SVF9FTkFCTEVECQkxCi0jZW5kaWYKLSNpZm5kZWYgQVRLX0RFQlVHCi0jZGVmaW5lIEFUS19ERUJVRwkJCQkxCi0jZW5kaWYKLSNpZm5kZWYgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQKLSNkZWZpbmUgU0xJQ19QT1dFUl9NQU5BR0VNRU5UX0VOQUJMRUQJCTAKLSNlbmRpZgotI2lmbmRlZiBTTElDX0lOVEVSUlVQVF9QUk9DRVNTX0xJTUlUCi0jZGVmaW5lIFNMSUNfSU5URVJSVVBUX1BST0NFU1NfTElNSVQJCTEKLSNlbmRpZgotI2lmbmRlZiBMSU5VWF9GUkVFU19BREFQVEVSX1JFU09VUkNFUwotI2RlZmluZSBMSU5VWF9GUkVFU19BREFQVEVSX1JFU09VUkNFUwkJMQotI2VuZGlmCi0jaWZuZGVmIFNMSUNfT0ZGTE9BRF9JUF9DSEVDS1NVTQotI2RlZmluZSBTTElDX09GRkxPQURfSVBfQ0hFQ0tTVU0JCTEKLSNlbmRpZgotI2lmbmRlZiBTTElDX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAotI2RlZmluZSBTTElDX1BPV0VSX01BTkFHRU1FTlRfRU5BQkxFRAkJMAotI2VuZGlmCi0jaWZuZGVmIFNUQVRTX1RJTUVSX0lOVEVSVkFMCi0jZGVmaW5lIFNUQVRTX1RJTUVSX0lOVEVSVkFMCQkJMgotI2VuZGlmCi0jaWZuZGVmIFBJTkdfVElNRVJfSU5URVJWQUwKLSNkZWZpbmUgUElOR19USU1FUl9JTlRFUlZBTAkJCTEKLSNlbmRpZgotCi0jZW5kaWYgICAvKiBfU0xJQ19CVUlMRF9IXyAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkYmcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkYmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU0ZTQ0Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljZGJnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgQWxhY3JpdGVjaCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqIFRoZSB2aWV3cyBhbmQgY29uY2x1c2lvbnMgY29udGFpbmVkIGluIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgotICogYXJlIHRob3NlIG9mIHRoZSBhdXRob3JzIGFuZCBzaG91bGQgbm90IGJlIGludGVycHJldGVkIGFzIHJlcHJlc2VudGluZwotICogb2ZmaWNpYWwgcG9saWNpZXMsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgb2YgQWxhY3JpdGVjaCwgSW5jLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIEZJTEVOQU1FOiBzbGljZGJnLmgKLSAqCi0gKiBBbGwgZGVidWcgYW5kIGFzc2VydGlvbi1iYXNlZCBkZWZpbml0aW9ucyBhbmQgbWFjcm9zIGFyZSBpbmNsdWRlZAotICogaW4gdGhpcyBmaWxlIGZvciB0aGUgU0xJQ09TUyBkcml2ZXIuCi0gKi8KLSNpZm5kZWYgX1NMSUNfREVCVUdfSF8KLSNkZWZpbmUgX1NMSUNfREVCVUdfSF8KLQotI2lmZGVmIFNMSUNfREVGQVVMVF9MT0dfTEVWRUwKLSNlbHNlCi0jZGVmaW5lIFNMSUNMRVZFTCAgIEtFUk5fREVCVUcKLSNlbmRpZgotI2RlZmluZSBTTElDX0RJU1BMQVkgICAgICAgICAgICAgIHByaW50awotI2RlZmluZSBEQkdfRVJST1IobiwgYXJncy4uLikgICBTTElDX0RJU1BMQVkoS0VSTl9FTUVSRyBuLCAjI2FyZ3MpCi0KLSNkZWZpbmUgU0xJQ19ERUJVR19NRVNTQUdFIDEKLSNpZiBTTElDX0RFQlVHX01FU1NBR0UKLS8qI2RlZmluZSBEQkdfTVNHKG4sIGFyZ3MuLi4pICAgICAgU0xJQ19ESVNQTEFZKFNMSUNMRVZFTCBuLCAjI2FyZ3MpKi8KLSNkZWZpbmUgREJHX01TRyhuLCBhcmdzLi4uKQotI2Vsc2UKLSNkZWZpbmUgREJHX01TRyhuLCBhcmdzLi4uKQotI2VuZGlmCi0KLSNpZmRlZiBBU1NFUlQKLSN1bmRlZiBBU1NFUlQKLSNlbmRpZgotCi0jaWYgU0xJQ19BU1NFUlRfRU5BQkxFRAotI2lmZGVmIENPTkZJR19YODZfNjQKLSNkZWZpbmUgVkFMSURfQUREUkVTUyhwKSAgKDEpCi0jZWxzZQotI2RlZmluZSBWQUxJRF9BRERSRVNTKHApICAoKCh1MzIpKHApICYgMHg4MDAwMDAwMCkgfHwgKCh1MzIpKHApID09IDApKQotI2VuZGlmCi0jaWZuZGVmIEFTU0VSVAotI2RlZmluZSBBU1NFUlQoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWlmICghKGEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCURCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMgIGxpbmUgJWRcbiIsXAotCQlfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJc2xpY19hc3NlcnRfZmFpbCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotI2VuZGlmCi0jaWZuZGVmIEFTU0VSVE1TRwotI2RlZmluZSBBU1NFUlRNU0coYSxtc2cpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCURCR19FUlJPUigiQVNTRVJUKCkgRmFpbHVyZTogZmlsZSAlcywgZnVuY3Rpb24gJXMiXAotCQkJImxpbmUgJWQ6ICVzXG4iLFwKLQkJCV9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18sIChtc2cpKTsgICAgICAgICAgICBcCi0JCXNsaWNfYXNzZXJ0X2ZhaWwoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9Ci0jZW5kaWYKLSNlbHNlCi0jaWZuZGVmIEFTU0VSVAotI2RlZmluZSBBU1NFUlQoYSkKLSNlbmRpZgotI2lmbmRlZiBBU1NFUlRNU0cKLSNkZWZpbmUgQVNTRVJUTVNHKGEsIG1zZykKLSNlbmRpZgotI2VuZGlmIC8qIFNMSUNfQVNTRVJUX0VOQUJMRUQgICovCi0KLSNlbmRpZiAgLyogIF9TTElDX0RFQlVHX0hfICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2R1bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNkdW1wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYTliNDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2R1bXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0vKgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKLSAqICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFMQUNSSVRFQ0gsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTEFDUklURUNILCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqIE5PIExJQ0VOU0UgVE8gQU5ZIEFMQUNSSVRFQ0ggUEFURU5UIENMQUlNIElTIEdSQU5URUQgQlkgQU5ZIENPUFlSSUdIVAotICogTElDRU5TRSBUTyBUSElTIE9SIE9USEVSIFNPRlRXQVJFLiBUSElTIFNPRlRXQVJFIE1BWSBCRSBDT1ZFUkVEIEJZCi0gKiBBTEFDUklURUNIIFBBVEVOVFMgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBVLlMuIFBBVEVOVCBOT1MuIDYsMjI2LDY4MCwKLSAqIDYsMjQ3LDA2MCwgNiwzMzQsMTUzLCA2LDM4OSw0NzksIDYsMzkzLDQ4NywgNiw0MjcsMTcxLCA2LDQyNywxNzMKLSAqIGFuZCA2LDQzNCw2MjAuCi0gKiBUSElTIFNPRlRXQVJFIElTIE5PVCBTVUJKRUNUIFRPIFRIRSBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSAoR1BMKS4KLSAqCi0gKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kCi0gKiBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZQotICogaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIKLSAqIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCi0gKi8KLSNpZm5kZWYgX1NMSUNfRFVNUF9IXwotI2RlZmluZSBfU0xJQ19EVU1QX0hfCi0KLSNkZWZpbmUgREVCVUdfU1VDQ0VTUyAgIDAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogVXRpbGl0eSBwcm9jZXNzb3IgcmVnaXN0ZXIgbG9jYXRpb25zCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFVUSUxJVFlfUkVTRVQgICAgICAgMHgwCi0jZGVmaW5lIFVUSUxJVFlfSVNQX0FERFIgICAgMHg0ICAgICAvKiBJbnRlcnJ1cHQgc3RhdHVzIFBvaW50ZXIgKi8KLSNkZWZpbmUgVVRJTElUWV9JU1JfQUREUiAgICAweDggICAgIC8qIEludGVycnVwdCBzdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgVVRJTElUWV9JQ1JfQUREUiAgICAweGMgICAgIC8qIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFVUSUxJVFlfQ1BSX0FERFIgICAgMHgxMCAgICAvKiBDb21tYW5kIFBvaW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgVVRJTElUWV9EUFJfQUREUiAgICAweDE0ICAgIC8qIERhdGEgUG9pbnRlciBSZWdpc3RlciAqLwotI2RlZmluZSBVVElMSVRZX0RNUF9UUlEgICAgIDB4MTggICAgLyogRHVtcCBxdWV1ZSBvbnRvIEFMVSBmb3IgYW5hbHlzZXIgKi8KLSNkZWZpbmUgVVRJTElUWV9VUFBfQUREUiAgICAweDFjICAgIC8qIEJpdHMgNjMtMzIgb2YgY21kL2RhdGEgcG9pbnRlciAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBJTklDIHN0YXR1cyByZWdpc3RlciBiaXRzCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBTTElDX0lTUl9DQyAgICAgICAgIDB4MTAwMDAwMDAgIC8qIENvbW1hbmQgY29tcGxldGUgLSBzeW5jaHJvbm91cyAqLwotI2RlZmluZSBTTElDX0lTUl9FUlIgICAgICAgIDB4MDEwMDAwMDAgIC8qIENvbW1hbmQgRXJyb3IgLSBzeW5jaHJvbm91cyAqLwotI2RlZmluZSBTTElDX0lTUl9DTURfTUFTSyAgIDB4MTEwMDAwMDAgIC8qIENvbW1hbmQgc3RhdHVzIG1hc2sgKi8KLSNkZWZpbmUgU0xJQ19JU1JfVFBIICAgICAgICAweDAwMDgwMDAwICAvKiBUcmFuc21pdCBwcm9jZXNzb3IgaGFsdGVkIC0gYXN5bmMgKi8KLSNkZWZpbmUgU0xJQ19JU1JfUlBIICAgICAgICAweDAwMDQwMDAwICAvKiBSZWNlaXZlIHByb2Nlc3NvciBoYWx0ZWQgLSBhc3luYyAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBJTklDIENvbnRyb2wgcmVnaXN0ZXIgdmFsdWVzCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBTTElDX0lDUl9PRkYgICAgICAgIDAgICAgICAgICAgIC8qIEludGVycnVwdHMgZGlzYWJsZWQgKi8KLSNkZWZpbmUgU0xJQ19JQ1JfT04gICAgICAgICAxICAgICAgICAgICAvKiBJbnRlcnJ1cHRzIGVuYWJsZWQgKi8KLSNkZWZpbmUgU0xJQ19JQ1JfTUFTSyAgICAgICAyICAgICAgICAgICAvKiBJbnRlcnJ1cHRzIG1hc2tlZCAqLwotCi0jZGVmaW5lIFdSSVRFX0RSRUcocmVnLCB2YWx1ZSwgZmx1c2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3cml0ZWwoKHZhbHVlKSwgKHJlZykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChmbHVzaCkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQltYigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb21tYW5kIEZvcm1hdAotICoKLSAqIEVhY2ggY29tbWFuZCBjb250YWlucyBhIGNvbW1hbmQgYnl0ZSB3aGljaCBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6Ci0gKgotICogIGJpdHM6ICAgNy0zICAgICAyICAgICAgIDEtMAotICogICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiAgICAgIGNvbW1hbmQgICAgIEFsdC4gUHJvYyAgIFByb2Nlc3NvcgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBNYWNybyB0byBjcmVhdGUgdGhlIGNvbW1hbmQgYnl0ZSBnaXZlbiB0aGUgY29tbWFuZCwgQWx0LiBQcm9jLCBhbmQKLSAqIFByb2Nlc3NvciB2YWx1ZXMuICBOb3RlIHRoYXQgdGhlIG1hY3JvIGFzc3VtZXMgdGhhdCB0aGUgdmFsdWVzIGFyZQotICogcHJlc2hpZnRlZC4gIFRoYXQgaXMsIHRoZSB2YWx1ZXMgZm9yIGFsdC4gcHJvYyBhcmUgMCBmb3IgdHJhbnNtaXQgYW5kCi0gKiA0IGZvciByZWNlaXZlLgotICovCi0jZGVmaW5lIENPTU1BTkRfQllURShjb21tYW5kLCBhbHRfcHJvYywgcHJvYykgKChjb21tYW5kKSB8IChhbHRfcHJvYykgfCAocHJvYykpCi0KLS8qCi0gKiBDb21tYW5kIHZhbHVlcwotICovCi0jZGVmaW5lIENNRF9IQUxUICAgICAgICAweDAgICAgIC8qIFNlbmQgYSBoYWx0IHRvIHRoZSBJTklDICovCi0jZGVmaW5lIENNRF9SVU4gICAgICAgICAweDggICAgIC8qIFN0YXJ0IHRoZSBoYWx0ZWQgSU5JQyAqLwotI2RlZmluZSBDTURfU1RFUCAgICAgICAgMHgxMCAgICAvKiBTaW5nbGUgc3RlcCB0aGUgaW5pYyAqLwotI2RlZmluZSBDTURfQlJFQUsgICAgICAgMHgxOCAgICAvKiBTZXQgYSBicmVha3BvaW50IC0gOCBieXRlIGNvbW1hbmQgKi8KLSNkZWZpbmUgQ01EX1JFU0VUX0JSRUFLIDB4MjAgICAgLyogUmVzZXQgYSBicmVha3BvaW50IC0gOCBieXRlIGNtZCAqLwotI2RlZmluZSBDTURfRFVNUCAgICAgICAgMHgyOCAgICAvKiBEdW1wIElOSUMgbWVtb3J5IC0gOCBieXRlIGNvbW1hbmQgKi8KLSNkZWZpbmUgQ01EX0xPQUQgICAgICAgIDB4MzAgICAgLyogTG9hZCBJTklDIG1lbW9yeSAtIDggYnl0ZSBjb21tYW5kICovCi0jZGVmaW5lIENNRF9NQVAgICAgICAgICAweDM4ICAgIC8qIE1hcCBvdXQgYSBST00gaW5zdHJ1Y3Rpb24gLSA4IEJDICovCi0jZGVmaW5lIENNRF9DQU1fT1BTICAgICAweDM4ICAgIC8qIHBlcmZvcm0gb3BzIG9uIHNwZWNpZmljIENBTSAqLwotI2RlZmluZSBDTURfWE1UICAgICAgICAgMHg0MCAgICAvKiBUcmFuc21pdCBmcmFtZSAqLwotI2RlZmluZSBDTURfUkNWICAgICAgICAgMHg0OCAgICAvKiBSZWNlaXZlIGZyYW1lICovCi0KLS8qCi0gKiBBbHQuIFByb2MgdmFsdWVzCi0gKgotICogV2hlbiB0aGUgcHJvYyB2YWx1ZSBpcyBzZXQgdG8gdGhlIHV0aWxpdHkgcHJvY2Vzc29yLCB0aGUgQWx0LiBQcm9jCi0gKiBzcGVjaWZpZXMgd2hpY2ggcHJvY2Vzc29yIGhhbmRsZXMgdGhlIGRlYnVnZ2luZy4KLSAqLwotI2RlZmluZSBBTFRfUFJPQ19UUkFOU01JVCAgIDB4MAotI2RlZmluZSBBTFRfUFJPQ19SRUNFSVZFICAgIDB4NAotCi0vKgotICogUHJvYyB2YWx1ZXMKLSAqLwotI2RlZmluZSBQUk9DX0lOVkFMSUQgICAgICAgIDB4MAotI2RlZmluZSBQUk9DX05PTkUgICAgICAgICAgIDB4MCAgLyogR2lnYWJpdCB1c2UgKi8KLSNkZWZpbmUgUFJPQ19UUkFOU01JVCAgICAgICAweDEKLSNkZWZpbmUgUFJPQ19SRUNFSVZFICAgICAgICAweDIKLSNkZWZpbmUgUFJPQ19VVElMSVRZICAgICAgICAweDMKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIDggYnl0ZSBjb21tYW5kIHN0cnVjdHVyZSBkZWZpbml0aW9ucwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBCcmVhayBhbmQgUmVzZXQgQnJlYWsgY29tbWFuZCBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IEJSRUFLIHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICBjb21tYW5kOyAgICAvKiBDb21tYW5kIHdvcmQgZGVmaW5lZCBhYm92ZSAqLwotICAgIHVuc2lnbmVkIGNoYXIgICAgIHJlc3ZkOwotICAgIHVzaG9ydCAgICBjb3VudDsgICAgICAvKiBOdW1iZXIgb2YgZXhlY3V0aW9ucyBiZWZvcmUgYnJlYWsgKi8KLSAgICB1MzIgICBhZGRyOyAgICAgICAvKiBBZGRyZXNzIG9mIGJyZWFrIHBvaW50ICovCi19OwotCi0vKgotICogRHVtcCBhbmQgTG9hZCBjb21tYW5kIHN0cnVjdHVyZQotICovCi1zdHJ1Y3QgZHVtcF9jbWQgewotICAgIHVuc2lnbmVkIGNoYXIgICAgIGNtZDsgICAgICAgIC8qIENvbW1hbmQgd29yZCBkZWZpbmVkIGFib3ZlICovCi0gICAgdW5zaWduZWQgY2hhciAgICAgZGVzYzsgICAgICAgLyogRGVzY3JpcHRvciB2YWx1ZXMgLSBkZWZpbmVkIGJlbG93ICovCi0gICAgdXNob3J0ICAgIGNvdW50OyAgICAgIC8qIG51bWJlciBvZiA0IGJ5dGUgd29yZHMgdG8gYmUgdHJhbnNmZXJyZWQgKi8KLSAgICB1MzIgICBhZGRyOyAgICAgICAvKiBzdGFydCBhZGRyZXNzIG9mIGR1bXAgb3IgbG9hZCAqLwotfTsKLQotLyoKLSAqIFJlY2VpdmUgb3IgVHJhbnNtaXQgYSBmcmFtZS4KLSAqLwotc3RydWN0IFJDVl9PUl9YTVRfRlJBTUUgewotICAgIHVuc2lnbmVkIGNoYXIgICAgIGNvbW1hbmQ7ICAgIC8qIENvbW1hbmQgd29yZCBkZWZpbmVkIGFib3ZlICovCi0gICAgdW5zaWduZWQgY2hhciAgICAgTWFjSWQ7ICAgICAgLyogTWFjIElEIG9mIGludGVyZmFjZSAtIHRyYW5zbWl0IG9ubHkgKi8KLSAgICB1c2hvcnQgICAgY291bnQ7ICAgICAgLyogTGVuZ3RoIG9mIGZyYW1lIGluIGJ5dGVzICovCi0gICAgdTMyICAgcGFkOyAgICAgICAgLyogbm90IHVzZWQgKi8KLX07Ci0KLS8qCi0gKiBWYWx1ZXMgb2YgZGVzYyBmaWVsZCBpbiBEVU1QX09SX0xPQUQgc3RydWN0dXJlCi0gKi8KLSNkZWZpbmUgREVTQ19SRklMRSAgICAgICAgICAweDAgICAgIC8qIFJlZ2lzdGVyIGZpbGUgKi8KLSNkZWZpbmUgREVTQ19TUkFNICAgICAgICAgICAweDEgICAgIC8qIFNSQU0gKi8KLSNkZWZpbmUgREVTQ19EUkFNICAgICAgICAgICAweDIgICAgIC8qIERSQU0gKi8KLSNkZWZpbmUgREVTQ19RVUVVRSAgICAgICAgICAweDMgICAgIC8qIHF1ZXVlcyAqLwotI2RlZmluZSBERVNDX1JFRyAgICAgICAgICAgIDB4NCAgICAgLyogR2VuZXJhbCByZWdpc3RlcnMgKHBjLCBzdGF0dXMsIGV0YykgKi8KLSNkZWZpbmUgREVTQ19TRU5TRSAgICAgICAgICAweDUgICAgIC8qIFNlbnNlIHJlZ2lzdGVyICovCi0KLS8qIERlc2NyaXB0b3IgZmllbGQgZGVmaW5pdGlvbnMgZm9yIENNRF9EVU1QX0NBTSAqLwotI2RlZmluZSBEVU1QX0NBTV9BICAgICAgICAgICAgICAwCi0jZGVmaW5lIERVTVBfQ0FNX0IgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAvKiB1bnVzZWQgYXQgcHJlc2VudCAqLwotI2RlZmluZSBEVU1QX0NBTV9DICAgICAgICAgICAgICAyCi0jZGVmaW5lIERVTVBfQ0FNX0QgICAgICAgICAgICAgIDMKLSNkZWZpbmUgU0VBUkNIX0NBTV9BICAgICAgICAgICAgNAotI2RlZmluZSBTRUFSQ0hfQ0FNX0MgICAgICAgICAgICA1Ci0KLS8qCi0gKiBNYXAgY29tbWFuZCB0byByZXBsYWNlIGEgY29tbWFuZCBpbiBST00gd2l0aCBhIGNvbW1hbmQgaW4gV0NTCi0gKi8KLXN0cnVjdCBNQVAgewotICAgIHVuc2lnbmVkIGNoYXIgICBjb21tYW5kOyAgICAvKiBDb21tYW5kIHdvcmQgZGVmaW5lZCBhYm92ZSAqLwotICAgIHVuc2lnbmVkIGNoYXIgICBub3RfdXNlZFszXTsKLSAgICB1c2hvcnQgIG1hcF90bzsgICAgIC8qIEluc3RydWN0aW9uIGFkZHJlc3MgaW4gV0NTICovCi0gICAgdXNob3J0ICBtYXBfb3V0OyAgICAvKiBJbnN0cnVjdGlvbiBhZGRyZXNzIGluIFJPTSAqLwotfTsKLQotLyoKLSAqIE1pc2MgZGVmaW5pdGlvbnMKLSAqLwotI2RlZmluZSBTTElDX01BWF9RVUVVRSAgICAgICAzMiAvKiBUb3RhbCAjIG9mIHF1ZXVlcyBvbiB0aGUgSU5JQyAoMC0zMSkqLwotI2RlZmluZSBTTElDXzRNQVhfUkVHICAgICAgIDUxMiAvKiBUb3RhbCAjIG9mIDQtcG9ydCBmaWxlLXJlZ2lzdGVycyAgICAqLwotI2RlZmluZSBTTElDXzFNQVhfUkVHICAgICAgIDM4NCAvKiBUb3RhbCAjIG9mIGZpbGUtcmVnaXN0ZXJzICAgICAgICAgICAqLwotI2RlZmluZSBTTElDX0dCTUFYX1JFRyAgICAgMTAyNCAvKiBUb3RhbCAjIG9mIEdiaXQgZmlsZS1yZWdpc3RlcnMgICAgICAqLwotI2RlZmluZSBTTElDX05VTV9SRUcgICAgICAgICAzMiAvKiBub24tZmlsZS1yZWdpc3RlcnMgPSBOVU1fUkVHIGluIHRtLXNpbWJhLmggKi8KLSNkZWZpbmUgU0xJQ19HQl9DQU1BX1NaRSAgICAgMzIKLSNkZWZpbmUgU0xJQ19HQl9DQU1CX1NaRSAgICAgMTYKLSNkZWZpbmUgU0xJQ19HQl9DQU1BQl9TWkUgICAgMzIKLSNkZWZpbmUgU0xJQ19HQl9DQU1DX1NaRSAgICAgMTYKLSNkZWZpbmUgU0xJQ19HQl9DQU1EX1NaRSAgICAgMTYKLSNkZWZpbmUgU0xJQ19HQl9DQU1DRF9TWkUgICAgMzIKLQotLyoKLSAqIENvcmVkdW1wIGhlYWRlciBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IENPUkVfUSB7Ci0gICAgdTMyICAgcXVldWVPZmY7ICAgICAgICAgICAvKiBPZmZzZXQgb2YgcXVldWUgKi8KLSAgICB1MzIgICBxdWV1ZXNpemU7ICAgICAgICAgIC8qIHNpemUgb2YgcXVldWUgKi8KLX07Ci0KLSNkZWZpbmUgRFJJVkVSX05BTUVfU0laRSAgICAzMgotCi1zdHJ1Y3Qgc2xpY2NvcmVfaGRyIHsKLSAgICB1bnNpZ25lZCBjaGFyIGRyaXZlcl92ZXJzaW9uW0RSSVZFUl9OQU1FX1NJWkVdOyAvKiBEcml2ZXIgdmVyc2lvbiBzdHJpbmcgKi8KLSAgICB1MzIgICBSY3ZSZWdPZmY7ICAgICAgICAgIC8qIE9mZnNldCBvZiByZWNlaXZlIHJlZ2lzdGVycyAqLwotICAgIHUzMiAgIFJjdlJlZ3NpemU7ICAgICAgICAgLyogc2l6ZSBvZiByZWNlaXZlIHJlZ2lzdGVycyAqLwotICAgIHUzMiAgIFhtdFJlZ09mZjsgICAgICAgICAgLyogT2Zmc2V0IG9mIHRyYW5zbWl0IHJlZ2lzdGVycyAqLwotICAgIHUzMiAgIFhtdFJlZ3NpemU7ICAgICAgICAgLyogc2l6ZSBvZiB0cmFuc21pdCByZWdpc3RlcnMgKi8KLSAgICB1MzIgICBGaWxlUmVnT2ZmOyAgICAgICAgIC8qIE9mZnNldCBvZiByZWdpc3RlciBmaWxlICovCi0gICAgdTMyICAgRmlsZVJlZ3NpemU7ICAgICAgICAvKiBzaXplIG9mIHJlZ2lzdGVyIGZpbGUgKi8KLSAgICB1MzIgICBTcmFtT2ZmOyAgICAgICAgICAgIC8qIE9mZnNldCBvZiBTcmFtICovCi0gICAgdTMyICAgU3JhbXNpemU7ICAgICAgICAgICAvKiBzaXplIG9mIFNyYW0gKi8KLSAgICB1MzIgICBEcmFtT2ZmOyAgICAgICAgICAgIC8qIE9mZnNldCBvZiBEcmFtICovCi0gICAgdTMyICAgRHJhbXNpemU7ICAgICAgICAgICAvKiBzaXplIG9mIERyYW0gKi8KLSAgICBDT1JFX1EgICAgcXVldWVzW1NMSUNfTUFYX1FVRVVFXTsgLyogc2l6ZSBhbmQgb2Zmc2V0cyBvZiBxdWV1ZXMgKi8KLSAgICB1MzIgICBDYW1BTU9mZjsgICAgICAgICAgIC8qIE9mZnNldCBvZiBDQU0gQSBjb250ZW50cyAqLwotICAgIHUzMiAgIENhbUFTaXplOyAgICAgICAgICAgLyogU2l6ZSBvZiBDYW0gQSAqLwotICAgIHUzMiAgIENhbUJNT2ZmOyAgICAgICAgICAgLyogT2Zmc2V0IG9mIENBTSBCIGNvbnRlbnRzICovCi0gICAgdTMyICAgQ2FtQlNpemU7ICAgICAgICAgICAvKiBTaXplIG9mIENhbSBCICovCi0gICAgdTMyICAgQ2FtQ01PZmY7ICAgICAgICAgICAvKiBPZmZzZXQgb2YgQ0FNIEMgY29udGVudHMgKi8KLSAgICB1MzIgICBDYW1DU2l6ZTsgICAgICAgICAgIC8qIFNpemUgb2YgQ2FtIEMgKi8KLSAgICB1MzIgICBDYW1ETU9mZjsgICAgICAgICAgIC8qIE9mZnNldCBvZiBDQU0gRCBjb250ZW50cyAqLwotICAgIHUzMiAgIENhbURTaXplOyAgICAgICAgICAgLyogU2l6ZSBvZiBDYW0gRCAqLwotfTsKLQotLyoKLSAqIGRlZmluaXRpb25zIG5lZWRlZCBmb3Igb3VyIGtlcm5lbC1tb2RlIGdkYiBzdHViLgotICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBEZWZpbml0aW9ucyAmIFR5cGVkZWZzCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIEJVRk1BWCAgICAgIDB4MjAwMDAgLyogMTI4ayAtIHNpemUgb2YgaW5wdXQvb3V0cHV0IGJ1ZmZlciAqLwotI2RlZmluZSBCVUZNQVhQMiAgICA1ICAgICAgIC8qIDIqKjUgKDMyKSA0SyBwYWdlcyAqLwotCi0jZGVmaW5lIElPQ1RMX1NJTUJBX0JSRUFLICAgICAgICAgICBfSU9XKCdzJywgMCwgdW5zaWduZWQgbG9uZykKLS8qICNkZWZpbmUgSU9DVExfU0lNQkFfSU5JVCAgICAgICAgICAgIF9JT1coJ3MnLCAxLCB1bnNpZ25lZCBsb25nKSAqLwotI2RlZmluZSBJT0NUTF9TSU1CQV9LSUxMX1RHVF9QUk9DICAgX0lPVygncycsIDIsIHVuc2lnbmVkIGxvbmcpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEdsb2JhbCB2YXJpYWJsZXMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgVEhSRUFEUkVDRUlWRSAgIDEgICAvKiBiaXQgMCBvZiBTdG9wcGVkVGhyZWFkcyAqLwotI2RlZmluZSBUSFJFQURUUkFOU01JVCAgMiAgIC8qIGJpdCAxIG9mIFN0b3BwZWRUaHJlYWRzICovCi0jZGVmaW5lIFRIUkVBREJPVEggICAgICAzICAgLyogYml0IDAgYW5kIDEuLiAqLwotCi0jZW5kaWYgIC8qICBfU0xJQ19EVU1QX0ggICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljaHcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNody5oCmluZGV4IGQwM2U5MGIuLjYyNzVkNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNody5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNody5oCkBAIC00MSwzMDAgKzQxLDI4NiBAQAogI2lmbmRlZiBfX1NMSUNIV19IX18KICNkZWZpbmUgX19TTElDSFdfSF9fCiAKLSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTEFDUklURUNIICAgIDB4MTM5QQotI2RlZmluZSBTTElDXzFHQl9ERVZJQ0VfSUQgICAgICAgICAgMHgwMDA1Ci0jZGVmaW5lIFNMSUNfMkdCX0RFVklDRV9JRCAgICAgICAgICAweDAwMDcgIC8qT2FzaXMgRGV2aWNlIElEICovCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUxBQ1JJVEVDSAkweDEzOUEKKyNkZWZpbmUgU0xJQ18xR0JfREVWSUNFX0lECQkweDAwMDUKKyNkZWZpbmUgU0xJQ18yR0JfREVWSUNFX0lECQkweDAwMDcJLyogT2FzaXMgRGV2aWNlIElEICovCiAKLSNkZWZpbmUgU0xJQ18xR0JfQ0lDQURBX1NVQlNZU19JRCAgIDB4MDAwOAorI2RlZmluZSBTTElDXzFHQl9DSUNBREFfU1VCU1lTX0lECTB4MDAwOAogCi0jZGVmaW5lIFNMSUNfTkJSX01BQ1MgICAgICA0CisjZGVmaW5lIFNMSUNfTkJSX01BQ1MJCTQKIAotI2RlZmluZSBTTElDX1JDVkJVRl9TSVpFICAgICAgICAyMDQ4Ci0jZGVmaW5lIFNMSUNfUkNWQlVGX0hFQURTSVpFICAgIDM0Ci0jZGVmaW5lIFNMSUNfUkNWQlVGX1RBSUxTSVpFICAgIDAKLSNkZWZpbmUgU0xJQ19SQ1ZCVUZfREFUQVNJWkUgICAgKFNMSUNfUkNWQlVGX1NJWkUgLSAoU0xJQ19SQ1ZCVUZfSEVBRFNJWkUgK1wKLQkJCQkJU0xJQ19SQ1ZCVUZfVEFJTFNJWkUpKQorI2RlZmluZSBTTElDX1JDVkJVRl9TSVpFCTIwNDgKKyNkZWZpbmUgU0xJQ19SQ1ZCVUZfSEVBRFNJWkUJMzQKKyNkZWZpbmUgU0xJQ19SQ1ZCVUZfVEFJTFNJWkUJMAorI2RlZmluZSBTTElDX1JDVkJVRl9EQVRBU0laRQkoU0xJQ19SQ1ZCVUZfU0laRSAtCQlcCisJCQkJIChTTElDX1JDVkJVRl9IRUFEU0laRSArCVwKKwkJCQkgIFNMSUNfUkNWQlVGX1RBSUxTSVpFKSkKIAotI2RlZmluZSBWR0JTVEFUX1hQRVJSICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFZHQlNUQVRfWEVSUlNIRlQgICAgICAgIDI1Ci0jZGVmaW5lIFZHQlNUQVRfWENTRVJSICAgICAgICAgIDB4MjMKLSNkZWZpbmUgVkdCU1RBVF9YVUZMT1cgICAgICAgICAgMHgyMgotI2RlZmluZSBWR0JTVEFUX1hITEVOICAgICAgICAgICAweDIwCi0jZGVmaW5lIFZHQlNUQVRfTkVURVJSICAgICAgICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgVkdCU1RBVF9ORVJSU0hGVCAgICAgICAgMTYKLSNkZWZpbmUgVkdCU1RBVF9ORVJSTVNLICAgICAgICAgMHgxZmYKLSNkZWZpbmUgVkdCU1RBVF9OQ1NFUlIgICAgICAgICAgMHgxMDMKLSNkZWZpbmUgVkdCU1RBVF9OVUZMT1cgICAgICAgICAgMHgxMDIKLSNkZWZpbmUgVkdCU1RBVF9OSExFTiAgICAgICAgICAgMHgxMDAKLSNkZWZpbmUgVkdCU1RBVF9MTktFUlIgICAgICAgICAgMHgwMDAwMDA4MAotI2RlZmluZSBWR0JTVEFUX0xFUlJNU0sgICAgICAgICAweGZmCi0jZGVmaW5lIFZHQlNUQVRfTERFQVJMWSAgICAgICAgIDB4ODYKLSNkZWZpbmUgVkdCU1RBVF9MQk9GTE8gICAgICAgICAgMHg4NQotI2RlZmluZSBWR0JTVEFUX0xDT0RFUlIgICAgICAgICAweDg0Ci0jZGVmaW5lIFZHQlNUQVRfTERCTE5CTCAgICAgICAgIDB4ODMKLSNkZWZpbmUgVkdCU1RBVF9MQ1JDRVJSICAgICAgICAgMHg4MgotI2RlZmluZSBWR0JTVEFUX0xPRkxPICAgICAgICAgICAweDgxCi0jZGVmaW5lIFZHQlNUQVRfTFVGTE8gICAgICAgICAgIDB4ODAKLSNkZWZpbmUgSVJIRERSX0ZMRU5fTVNLICAgICAgICAgMHgwMDAwZmZmZgotI2RlZmluZSBJUkhERFJfU1ZBTElEICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIElSSEREUl9FUlIgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgVlJIU1RBVF84MDJPRSAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBWUkhTVEFUX1RQT0ZMTyAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFZSSFNUQVRCXzgwMlVFICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfUkNWRSAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBWUkhTVEFUQl9CVUZGICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX0NBUlJFICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfTE9OR0UgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBWUkhTVEFUQl9QUkVBICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX0NSQyAgICAgICAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfRFJCTCAgICAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBWUkhTVEFUQl9DT0RFICAgICAgICAgICAweDAwMjAwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX1RQQ1NVTSAgICAgICAgIDB4MDAxMDAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfVFBITEVOICAgICAgICAgMHgwMDA4MDAwMAotI2RlZmluZSBWUkhTVEFUQl9JUENTVU0gICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFZSSFNUQVRCX0lQTEVSUiAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgVlJIU1RBVEJfSVBIRVJSICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBTTElDX01BWDY0X0JDTlQgICAgICAgICAyMwotI2RlZmluZSBTTElDX01BWDMyX0JDTlQgICAgICAgICAyNgotI2RlZmluZSBJSENNRF9YTVRfUkVRICAgICAgICAgICAweDAxCi0jZGVmaW5lIElIRkxHX0lGU0hGVCAgICAgICAgICAgIDIKLSNkZWZpbmUgU0xJQ19SU1BCVUZfU0laRSAgICAgICAgMzIKKyNkZWZpbmUgVkdCU1RBVF9YUEVSUgkJMHg0MDAwMDAwMAorI2RlZmluZSBWR0JTVEFUX1hFUlJTSEZUCTI1CisjZGVmaW5lIFZHQlNUQVRfWENTRVJSCQkweDIzCisjZGVmaW5lIFZHQlNUQVRfWFVGTE9XCQkweDIyCisjZGVmaW5lIFZHQlNUQVRfWEhMRU4JCTB4MjAKKyNkZWZpbmUgVkdCU1RBVF9ORVRFUlIJCTB4MDEwMDAwMDAKKyNkZWZpbmUgVkdCU1RBVF9ORVJSU0hGVAkxNgorI2RlZmluZSBWR0JTVEFUX05FUlJNU0sJCTB4MWZmCisjZGVmaW5lIFZHQlNUQVRfTkNTRVJSCQkweDEwMworI2RlZmluZSBWR0JTVEFUX05VRkxPVwkJMHgxMDIKKyNkZWZpbmUgVkdCU1RBVF9OSExFTgkJMHgxMDAKKyNkZWZpbmUgVkdCU1RBVF9MTktFUlIJCTB4MDAwMDAwODAKKyNkZWZpbmUgVkdCU1RBVF9MRVJSTVNLCQkweGZmCisjZGVmaW5lIFZHQlNUQVRfTERFQVJMWQkJMHg4NgorI2RlZmluZSBWR0JTVEFUX0xCT0ZMTwkJMHg4NQorI2RlZmluZSBWR0JTVEFUX0xDT0RFUlIJCTB4ODQKKyNkZWZpbmUgVkdCU1RBVF9MREJMTkJMCQkweDgzCisjZGVmaW5lIFZHQlNUQVRfTENSQ0VSUgkJMHg4MgorI2RlZmluZSBWR0JTVEFUX0xPRkxPCQkweDgxCisjZGVmaW5lIFZHQlNUQVRfTFVGTE8JCTB4ODAKKyNkZWZpbmUgSVJIRERSX0ZMRU5fTVNLCQkweDAwMDBmZmZmCisjZGVmaW5lIElSSEREUl9TVkFMSUQJCTB4ODAwMDAwMDAKKyNkZWZpbmUgSVJIRERSX0VSUgkJMHgxMDAwMDAwMAorI2RlZmluZSBWUkhTVEFUXzgwMk9FCQkweDgwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRfVFBPRkxPCQkweDEwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCXzgwMlVFCQkweDgwMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX1JDVkUJCTB4NDAwMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfQlVGRgkJMHgyMDAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9DQVJSRQkJMHgwODAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9MT05HRQkJMHgwMjAwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9QUkVBCQkweDAxMDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0NSQwkJMHgwMDgwMDAwMAorI2RlZmluZSBWUkhTVEFUQl9EUkJMCQkweDAwNDAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0NPREUJCTB4MDAyMDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfVFBDU1VNCQkweDAwMTAwMDAwCisjZGVmaW5lIFZSSFNUQVRCX1RQSExFTgkJMHgwMDA4MDAwMAorI2RlZmluZSBWUkhTVEFUQl9JUENTVU0JCTB4MDAwNDAwMDAKKyNkZWZpbmUgVlJIU1RBVEJfSVBMRVJSCQkweDAwMDIwMDAwCisjZGVmaW5lIFZSSFNUQVRCX0lQSEVSUgkJMHgwMDAxMDAwMAorI2RlZmluZSBTTElDX01BWDY0X0JDTlQJCTIzCisjZGVmaW5lIFNMSUNfTUFYMzJfQkNOVAkJMjYKKyNkZWZpbmUgSUhDTURfWE1UX1JFUQkJMHgwMQorI2RlZmluZSBJSEZMR19JRlNIRlQJCTIKKyNkZWZpbmUgU0xJQ19SU1BCVUZfU0laRQkzMgogCi0jZGVmaW5lIFNMSUNfUkVTRVRfTUFHSUMgICAgICAgIDB4REVBRAotI2RlZmluZSBJQ1JfSU5UX09GRiAgICAgICAgICAgICAwCi0jZGVmaW5lIElDUl9JTlRfT04gICAgICAgICAgICAgIDEKLSNkZWZpbmUgSUNSX0lOVF9NQVNLICAgICAgICAgICAgMgorI2RlZmluZSBTTElDX1JFU0VUX01BR0lDCTB4REVBRAorI2RlZmluZSBJQ1JfSU5UX09GRgkJMAorI2RlZmluZSBJQ1JfSU5UX09OCQkxCisjZGVmaW5lIElDUl9JTlRfTUFTSwkJMgogCi0jZGVmaW5lIElTUl9FUlIgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgSVNSX1JDViAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBJU1JfQ01EICAgICAgICAgICAgICAgICAweDIwMDAwMDAwCi0jZGVmaW5lIElTUl9JTyAgICAgICAgICAgICAgICAgIDB4NjAwMDAwMDAKLSNkZWZpbmUgSVNSX1VQQyAgICAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBJU1JfTEVWRU5UICAgICAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIElTUl9STUlTUyAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgSVNSX1VQQ0VSUiAgICAgICAgICAgICAgMHgwMTAwMDAwMAotI2RlZmluZSBJU1JfWERST1AgICAgICAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIElTUl9VUENCU1kgICAgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgSVNSX0VWTVNLICAgICAgICAgICAgICAgMHhmZmZmMDAwMAotI2RlZmluZSBJU1JfUElOR01BU0sgICAgICAgICAgICAweDAwNzAwMDAwCi0jZGVmaW5lIElTUl9QSU5HRFNNQVNLICAgICAgICAgIDB4MDA3MTAwMDAKLSNkZWZpbmUgSVNSX1VQQ01BU0sgICAgICAgICAgICAgMHgxMTAwMDAwMAotI2RlZmluZSBTTElDX1dDU19TVEFSVCAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFNMSUNfV0NTX0NPTVBBUkUgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgU0xJQ19SQ1ZXQ1NfQkVHSU4gICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBTTElDX1JDVldDU19GSU5JU0ggICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFNMSUNfUE1fTUFYUEFUVEVSTlMgICAgIDYKLSNkZWZpbmUgU0xJQ19QTV9QQVRURVJOU0laRSAgICAgMTI4Ci0jZGVmaW5lIFNMSUNfUE1DQVBTX1dBS0VPTkxBTiAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUlJQ1JfUkVHX1BDUiAgICAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBNSUlDUl9SRUdfNCAgICAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIE1JSUNSX1JFR185ICAgICAgICAgICAgIDB4MDAwOTAwMDAKLSNkZWZpbmUgTUlJQ1JfUkVHXzE2ICAgICAgICAgICAgMHgwMDEwMDAwMAotI2RlZmluZSBQQ1JfUkVTRVQgICAgICAgICAgICAgICAweDgwMDAKLSNkZWZpbmUgUENSX1BPV0VSRE9XTiAgICAgICAgICAgMHgwODAwCi0jZGVmaW5lIFBDUl9TUEVFRF8xMDAgICAgICAgICAgIDB4MjAwMAotI2RlZmluZSBQQ1JfU1BFRURfMTAwMCAgICAgICAgICAweDAwNDAKLSNkZWZpbmUgUENSX0FVVE9ORUcgICAgICAgICAgICAgMHgxMDAwCi0jZGVmaW5lIFBDUl9BVVRPTkVHX1JTVCAgICAgICAgIDB4MDIwMAotI2RlZmluZSBQQ1JfRFVQTEVYX0ZVTEwgICAgICAgICAweDAxMDAKLSNkZWZpbmUgUFNSX0xJTktVUCAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIElTUl9FUlIJCQkweDgwMDAwMDAwCisjZGVmaW5lIElTUl9SQ1YJCQkweDQwMDAwMDAwCisjZGVmaW5lIElTUl9DTUQJCQkweDIwMDAwMDAwCisjZGVmaW5lIElTUl9JTwkJCTB4NjAwMDAwMDAKKyNkZWZpbmUgSVNSX1VQQwkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgSVNSX0xFVkVOVAkJMHgwODAwMDAwMAorI2RlZmluZSBJU1JfUk1JU1MJCTB4MDIwMDAwMDAKKyNkZWZpbmUgSVNSX1VQQ0VSUgkJMHgwMTAwMDAwMAorI2RlZmluZSBJU1JfWERST1AJCTB4MDA4MDAwMDAKKyNkZWZpbmUgSVNSX1VQQ0JTWQkJMHgwMDAyMDAwMAorI2RlZmluZSBJU1JfRVZNU0sJCTB4ZmZmZjAwMDAKKyNkZWZpbmUgSVNSX1BJTkdNQVNLCQkweDAwNzAwMDAwCisjZGVmaW5lIElTUl9QSU5HRFNNQVNLCQkweDAwNzEwMDAwCisjZGVmaW5lIElTUl9VUENNQVNLCQkweDExMDAwMDAwCisjZGVmaW5lIFNMSUNfV0NTX1NUQVJUCQkweDgwMDAwMDAwCisjZGVmaW5lIFNMSUNfV0NTX0NPTVBBUkUJMHg0MDAwMDAwMAorI2RlZmluZSBTTElDX1JDVldDU19CRUdJTgkweDQwMDAwMDAwCisjZGVmaW5lIFNMSUNfUkNWV0NTX0ZJTklTSAkweDgwMDAwMDAwCisjZGVmaW5lIFNMSUNfUE1fTUFYUEFUVEVSTlMJNgorI2RlZmluZSBTTElDX1BNX1BBVFRFUk5TSVpFCTEyOAorI2RlZmluZSBTTElDX1BNQ0FQU19XQUtFT05MQU4JMHgwMDAwMDAwMQorI2RlZmluZSBNSUlDUl9SRUdfUENSCQkweDAwMDAwMDAwCisjZGVmaW5lIE1JSUNSX1JFR180CQkweDAwMDQwMDAwCisjZGVmaW5lIE1JSUNSX1JFR185CQkweDAwMDkwMDAwCisjZGVmaW5lIE1JSUNSX1JFR18xNgkJMHgwMDEwMDAwMAorI2RlZmluZSBQQ1JfUkVTRVQJCTB4ODAwMAorI2RlZmluZSBQQ1JfUE9XRVJET1dOCQkweDA4MDAKKyNkZWZpbmUgUENSX1NQRUVEXzEwMAkJMHgyMDAwCisjZGVmaW5lIFBDUl9TUEVFRF8xMDAwCQkweDAwNDAKKyNkZWZpbmUgUENSX0FVVE9ORUcJCTB4MTAwMAorI2RlZmluZSBQQ1JfQVVUT05FR19SU1QJCTB4MDIwMAorI2RlZmluZSBQQ1JfRFVQTEVYX0ZVTEwJCTB4MDEwMAorI2RlZmluZSBQU1JfTElOS1VQCQkweDAwMDQKIAotI2RlZmluZSBQQVJfQURWMTAwRkQgICAgICAgICAgICAweDAxMDAKLSNkZWZpbmUgUEFSX0FEVjEwMEhEICAgICAgICAgICAgMHgwMDgwCi0jZGVmaW5lIFBBUl9BRFYxMEZEICAgICAgICAgICAgIDB4MDA0MAotI2RlZmluZSBQQVJfQURWMTBIRCAgICAgICAgICAgICAweDAwMjAKLSNkZWZpbmUgUEFSX0FTWU1QQVVTRSAgICAgICAgICAgMHgwQzAwCi0jZGVmaW5lIFBBUl84MDJfMyAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBQQVJfQURWMTAwRkQJCTB4MDEwMAorI2RlZmluZSBQQVJfQURWMTAwSEQJCTB4MDA4MAorI2RlZmluZSBQQVJfQURWMTBGRAkJMHgwMDQwCisjZGVmaW5lIFBBUl9BRFYxMEhECQkweDAwMjAKKyNkZWZpbmUgUEFSX0FTWU1QQVVTRQkJMHgwQzAwCisjZGVmaW5lIFBBUl84MDJfMwkJMHgwMDAxCiAKLSNkZWZpbmUgUEFSX0FEVjEwMDBYRkQgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lIFBBUl9BRFYxMDAwWEhEICAgICAgICAgIDB4MDA0MAotI2RlZmluZSBQQVJfQVNZTVBBVVNFX0ZJQkVSICAgICAweDAxODAKKyNkZWZpbmUgUEFSX0FEVjEwMDBYRkQJCTB4MDAyMAorI2RlZmluZSBQQVJfQURWMTAwMFhIRAkJMHgwMDQwCisjZGVmaW5lIFBBUl9BU1lNUEFVU0VfRklCRVIJMHgwMTgwCiAKLSNkZWZpbmUgUEdDX0FEVjEwMDBGRCAgICAgICAgICAgMHgwMjAwCi0jZGVmaW5lIFBHQ19BRFYxMDAwSEQgICAgICAgICAgIDB4MDEwMAotI2RlZmluZSBTRUVRX0xJTktGQUlMICAgICAgICAgICAweDQwMDAKLSNkZWZpbmUgU0VFUV9TUEVFRCAgICAgICAgICAgICAgMHgwMDgwCi0jZGVmaW5lIFNFRVFfRFVQTEVYICAgICAgICAgICAgIDB4MDA0MAotI2RlZmluZSBUREtfRFVQTEVYICAgICAgICAgICAgICAweDA4MDAKLSNkZWZpbmUgVERLX1NQRUVEICAgICAgICAgICAgICAgMHgwNDAwCi0jZGVmaW5lIE1SVl9SRUcxNl9YT1ZFUk9OICAgICAgIDB4MDA2OAotI2RlZmluZSBNUlZfUkVHMTZfWE9WRVJPRkYgICAgICAweDAwMDgKLSNkZWZpbmUgTVJWX1NQRUVEXzEwMDAgICAgICAgICAgMHg4MDAwCi0jZGVmaW5lIE1SVl9TUEVFRF8xMDAgICAgICAgICAgIDB4NDAwMAotI2RlZmluZSBNUlZfU1BFRURfMTAgICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUgTVJWX0ZVTExEVVBMRVggICAgICAgICAgMHgyMDAwCi0jZGVmaW5lIE1SVl9MSU5LVVAgICAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBQR0NfQURWMTAwMEZECQkweDAyMDAKKyNkZWZpbmUgUEdDX0FEVjEwMDBIRAkJMHgwMTAwCisjZGVmaW5lIFNFRVFfTElOS0ZBSUwJCTB4NDAwMAorI2RlZmluZSBTRUVRX1NQRUVECQkweDAwODAKKyNkZWZpbmUgU0VFUV9EVVBMRVgJCTB4MDA0MAorI2RlZmluZSBUREtfRFVQTEVYCQkweDA4MDAKKyNkZWZpbmUgVERLX1NQRUVECQkweDA0MDAKKyNkZWZpbmUgTVJWX1JFRzE2X1hPVkVST04JMHgwMDY4CisjZGVmaW5lIE1SVl9SRUcxNl9YT1ZFUk9GRgkweDAwMDgKKyNkZWZpbmUgTVJWX1NQRUVEXzEwMDAJCTB4ODAwMAorI2RlZmluZSBNUlZfU1BFRURfMTAwCQkweDQwMDAKKyNkZWZpbmUgTVJWX1NQRUVEXzEwCQkweDAwMDAKKyNkZWZpbmUgTVJWX0ZVTExEVVBMRVgJCTB4MjAwMAorI2RlZmluZSBNUlZfTElOS1VQCQkweDA0MDAKIAotI2RlZmluZSBHSUdfTElOS1VQICAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgR0lHX0ZVTExEVVBMRVggICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIEdJR19TUEVFRF9NQVNLICAgICAgICAgIDB4MDAwQwotI2RlZmluZSBHSUdfU1BFRURfMTAwMCAgICAgICAgICAweDAwMDgKLSNkZWZpbmUgR0lHX1NQRUVEXzEwMCAgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIEdJR19TUEVFRF8xMCAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBHSUdfTElOS1VQCQkweDAwMDEKKyNkZWZpbmUgR0lHX0ZVTExEVVBMRVgJCTB4MDAwMgorI2RlZmluZSBHSUdfU1BFRURfTUFTSwkJMHgwMDBDCisjZGVmaW5lIEdJR19TUEVFRF8xMDAwCQkweDAwMDgKKyNkZWZpbmUgR0lHX1NQRUVEXzEwMAkJMHgwMDA0CisjZGVmaW5lIEdJR19TUEVFRF8xMAkJMHgwMDAwCiAKLSNkZWZpbmUgTUNSX1JFU0VUICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBNQ1JfQ1JDRU4gICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIE1DUl9GVUxMRCAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgTUNSX1BBRCAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBNQ1JfUkVUUllMQVRFICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIE1DUl9CT0xfU0hJRlQgICAgICAgICAgIDIxCi0jZGVmaW5lIE1DUl9JUEcxX1NISUZUICAgICAgICAgIDE0Ci0jZGVmaW5lIE1DUl9JUEcyX1NISUZUICAgICAgICAgIDcKLSNkZWZpbmUgTUNSX0lQRzNfU0hJRlQgICAgICAgICAgMAotI2RlZmluZSBHTUNSX1JFU0VUICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIEdNQ1JfR0JJVCAgICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgR01DUl9GVUxMRCAgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBHTUNSX0dBUEJCX1NISUZUICAgICAgICAxNAotI2RlZmluZSBHTUNSX0dBUFIxX1NISUZUICAgICAgICA3Ci0jZGVmaW5lIEdNQ1JfR0FQUjJfU0hJRlQgICAgICAgIDAKLSNkZWZpbmUgR01DUl9HQVBCQl8xMDAwICAgICAgICAgMHg2MAotI2RlZmluZSBHTUNSX0dBUFIxXzEwMDAgICAgICAgICAweDJDCi0jZGVmaW5lIEdNQ1JfR0FQUjJfMTAwMCAgICAgICAgIDB4NDAKLSNkZWZpbmUgR01DUl9HQVBCQl8xMDAgICAgICAgICAgMHg3MAotI2RlZmluZSBHTUNSX0dBUFIxXzEwMCAgICAgICAgICAweDJDCi0jZGVmaW5lIEdNQ1JfR0FQUjJfMTAwICAgICAgICAgIDB4NDAKLSNkZWZpbmUgWENSX1JFU0VUICAgICAgICAgICAgICAgMHg4MDAwMDAwMAotI2RlZmluZSBYQ1JfWE1URU4gICAgICAgICAgICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIFhDUl9QQVVTRUVOICAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgWENSX0xPQURSTkcgICAgICAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBSQ1JfUkVTRVQgICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFJDUl9SQ1ZFTiAgICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgUkNSX1JDVkFMTCAgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBSQ1JfUkNWQkFEICAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIFJDUl9DVExFTiAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgUkNSX0FERFJBRU4gICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBHWENSX1JFU0VUICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIEdYQ1JfWE1URU4gICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgR1hDUl9QQVVTRUVOICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBHUkNSX1JFU0VUICAgICAgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIEdSQ1JfUkNWRU4gICAgICAgICAgICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgR1JDUl9SQ1ZBTEwgICAgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBHUkNSX1JDVkJBRCAgICAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIEdSQ1JfQ1RMRU4gICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgR1JDUl9BRERSQUVOICAgICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBHUkNSX0hBU0hTSVpFX1NISUZUICAgICAxNwotI2RlZmluZSBHUkNSX0hBU0hTSVpFICAgICAgICAgICAxNAorI2RlZmluZSBNQ1JfUkVTRVQJCTB4ODAwMDAwMDAKKyNkZWZpbmUgTUNSX0NSQ0VOCQkweDQwMDAwMDAwCisjZGVmaW5lIE1DUl9GVUxMRAkJMHgxMDAwMDAwMAorI2RlZmluZSBNQ1JfUEFECQkJMHgwMjAwMDAwMAorI2RlZmluZSBNQ1JfUkVUUllMQVRFCQkweDAxMDAwMDAwCisjZGVmaW5lIE1DUl9CT0xfU0hJRlQJCTIxCisjZGVmaW5lIE1DUl9JUEcxX1NISUZUCQkxNAorI2RlZmluZSBNQ1JfSVBHMl9TSElGVAkJNworI2RlZmluZSBNQ1JfSVBHM19TSElGVAkJMAorI2RlZmluZSBHTUNSX1JFU0VUCQkweDgwMDAwMDAwCisjZGVmaW5lIEdNQ1JfR0JJVAkJMHgyMDAwMDAwMAorI2RlZmluZSBHTUNSX0ZVTExECQkweDEwMDAwMDAwCisjZGVmaW5lIEdNQ1JfR0FQQkJfU0hJRlQJMTQKKyNkZWZpbmUgR01DUl9HQVBSMV9TSElGVAk3CisjZGVmaW5lIEdNQ1JfR0FQUjJfU0hJRlQJMAorI2RlZmluZSBHTUNSX0dBUEJCXzEwMDAJCTB4NjAKKyNkZWZpbmUgR01DUl9HQVBSMV8xMDAwCQkweDJDCisjZGVmaW5lIEdNQ1JfR0FQUjJfMTAwMAkJMHg0MAorI2RlZmluZSBHTUNSX0dBUEJCXzEwMAkJMHg3MAorI2RlZmluZSBHTUNSX0dBUFIxXzEwMAkJMHgyQworI2RlZmluZSBHTUNSX0dBUFIyXzEwMAkJMHg0MAorI2RlZmluZSBYQ1JfUkVTRVQJCTB4ODAwMDAwMDAKKyNkZWZpbmUgWENSX1hNVEVOCQkweDQwMDAwMDAwCisjZGVmaW5lIFhDUl9QQVVTRUVOCQkweDIwMDAwMDAwCisjZGVmaW5lIFhDUl9MT0FEUk5HCQkweDEwMDAwMDAwCisjZGVmaW5lIFJDUl9SRVNFVAkJMHg4MDAwMDAwMAorI2RlZmluZSBSQ1JfUkNWRU4JCTB4NDAwMDAwMDAKKyNkZWZpbmUgUkNSX1JDVkFMTAkJMHgyMDAwMDAwMAorI2RlZmluZSBSQ1JfUkNWQkFECQkweDEwMDAwMDAwCisjZGVmaW5lIFJDUl9DVExFTgkJMHgwODAwMDAwMAorI2RlZmluZSBSQ1JfQUREUkFFTgkJMHgwMjAwMDAwMAorI2RlZmluZSBHWENSX1JFU0VUCQkweDgwMDAwMDAwCisjZGVmaW5lIEdYQ1JfWE1URU4JCTB4NDAwMDAwMDAKKyNkZWZpbmUgR1hDUl9QQVVTRUVOCQkweDIwMDAwMDAwCisjZGVmaW5lIEdSQ1JfUkVTRVQJCTB4ODAwMDAwMDAKKyNkZWZpbmUgR1JDUl9SQ1ZFTgkJMHg0MDAwMDAwMAorI2RlZmluZSBHUkNSX1JDVkFMTAkJMHgyMDAwMDAwMAorI2RlZmluZSBHUkNSX1JDVkJBRAkJMHgxMDAwMDAwMAorI2RlZmluZSBHUkNSX0NUTEVOCQkweDA4MDAwMDAwCisjZGVmaW5lIEdSQ1JfQUREUkFFTgkJMHgwMjAwMDAwMAorI2RlZmluZSBHUkNSX0hBU0hTSVpFX1NISUZUCTE3CisjZGVmaW5lIEdSQ1JfSEFTSFNJWkUJCTE0CiAKLSNkZWZpbmUgU0xJQ19FRVBST01fSUQgICAgICAgIDB4QTVBNQotI2RlZmluZSBTTElDX1NSQU1fU0laRTJHQiAgICAgKDY0ICogMTAyNCkKLSNkZWZpbmUgU0xJQ19TUkFNX1NJWkUxR0IgICAgICgzMiAqIDEwMjQpCi0jZGVmaW5lIFNMSUNfSE9TVElEX0RFRkFVTFQgICAweEZGRkYgICAgICAvKiB1bmluaXRpYWxpemVkIGhvc3RpZCAqLwotI2RlZmluZSBTTElDX05CUl9NQUNTICAgICAgICAgNAotCi0jaWZuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFICAwCi0jZWxzZQotI3VuZGVmICBGQUxTRQotI2RlZmluZSBGQUxTRSAgMAotI2VuZGlmCi0KLSNpZm5kZWYgVFJVRQotI2RlZmluZSBUUlVFICAgMQotI2Vsc2UKLSN1bmRlZiAgVFJVRQotI2RlZmluZSBUUlVFICAgMQotI2VuZGlmCisjZGVmaW5lIFNMSUNfRUVQUk9NX0lECQkweEE1QTUKKyNkZWZpbmUgU0xJQ19TUkFNX1NJWkUyR0IJKDY0ICogMTAyNCkKKyNkZWZpbmUgU0xJQ19TUkFNX1NJWkUxR0IJKDMyICogMTAyNCkKKyNkZWZpbmUgU0xJQ19IT1NUSURfREVGQVVMVAkweEZGRkYJCS8qIHVuaW5pdGlhbGl6ZWQgaG9zdGlkICovCisjZGVmaW5lIFNMSUNfTkJSX01BQ1MJCTQKIAogc3RydWN0IHNsaWNfcmN2YnVmIHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICBwYWQxWzZdOwotICAgIHVzaG9ydCAgICBwYWQyOwotICAgIHUzMiAgIHBhZDM7Ci0gICAgdTMyICAgcGFkNDsKLSAgICB1MzIgICBidWZmZXI7Ci0gICAgdTMyICAgbGVuZ3RoOwotICAgIHUzMiAgIHN0YXR1czsKLSAgICB1MzIgICBwYWQ1OwotICAgIHVzaG9ydCAgICBwYWQ2OwotICAgIHVuc2lnbmVkIGNoYXIgICAgIGRhdGFbU0xJQ19SQ1ZCVUZfREFUQVNJWkVdOworCXU4IHBhZDFbNl07CisJdTE2IHBhZDI7CisJdTMyIHBhZDM7CisJdTMyIHBhZDQ7CisJdTMyIGJ1ZmZlcjsKKwl1MzIgbGVuZ3RoOworCXUzMiBzdGF0dXM7CisJdTMyIHBhZDU7CisJdTE2IHBhZDY7CisJdTggZGF0YVtTTElDX1JDVkJVRl9EQVRBU0laRV07CiB9OwogCi0gc3RydWN0IHNsaWNfaGRkcl93ZHMgewotICB1bmlvbiB7Ci0gICAgc3RydWN0IHsKLQl1MzIgICAgZnJhbWVfc3RhdHVzOwotCXUzMiAgICBmcmFtZV9zdGF0dXNfYjsKLQl1MzIgICAgdGltZV9zdGFtcDsKLQl1MzIgICAgY2hlY2tzdW07Ci0gICAgfSBoZHJzXzE0cG9ydDsKLSAgICBzdHJ1Y3QgewotCXUzMiAgICBmcmFtZV9zdGF0dXM7Ci0JdXNob3J0ICAgICBCeXRlQ250OwotCXVzaG9ydCAgICAgVHBDaGtzdW07Ci0JdXNob3J0ICAgICBDdHhIYXNoOwotCXVzaG9ydCAgICAgTWFjSGFzaDsKLQl1MzIgICAgQnVmTG5rOwotICAgIH0gaGRyc19nYml0OwotICB9IHUwOworc3RydWN0IHNsaWNfaGRkcl93ZHMgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiBmcmFtZV9zdGF0dXM7CisJCQl1MzIgZnJhbWVfc3RhdHVzX2I7CisJCQl1MzIgdGltZV9zdGFtcDsKKwkJCXUzMiBjaGVja3N1bTsKKwkJfSBoZHJzXzE0cG9ydDsKKwkJc3RydWN0IHsKKwkJCXUzMiBmcmFtZV9zdGF0dXM7CisJCQl1MTYgQnl0ZUNudDsKKwkJCXUxNiBUcENoa3N1bTsKKwkJCXUxNiBDdHhIYXNoOworCQkJdTE2IE1hY0hhc2g7CisJCQl1MzIgQnVmTG5rOworCQl9IGhkcnNfZ2JpdDsKKwl9IHUwOwogfTsKIAotI2RlZmluZSBmcmFtZV9zdGF0dXMxNCAgICAgICAgdTAuaGRyc18xNHBvcnQuZnJhbWVfc3RhdHVzCi0jZGVmaW5lIGZyYW1lX3N0YXR1c19iMTQgICAgICB1MC5oZHJzXzE0cG9ydC5mcmFtZV9zdGF0dXNfYgotI2RlZmluZSBmcmFtZV9zdGF0dXNHQiAgICAgICAgdTAuaGRyc19nYml0LmZyYW1lX3N0YXR1cworI2RlZmluZSBmcmFtZV9zdGF0dXMxNAkJdTAuaGRyc18xNHBvcnQuZnJhbWVfc3RhdHVzCisjZGVmaW5lIGZyYW1lX3N0YXR1c19iMTQJdTAuaGRyc18xNHBvcnQuZnJhbWVfc3RhdHVzX2IKKyNkZWZpbmUgZnJhbWVfc3RhdHVzR0IJCXUwLmhkcnNfZ2JpdC5mcmFtZV9zdGF0dXMKIAogc3RydWN0IHNsaWNfaG9zdDY0c2cgewotCXUzMiAgICAgICAgcGFkZHJsOwotCXUzMiAgICAgICAgcGFkZHJoOwotCXUzMiAgICAgICAgbGVuZ3RoOworCXUzMiBwYWRkcmw7CisJdTMyIHBhZGRyaDsKKwl1MzIgbGVuZ3RoOwogfTsKIAogc3RydWN0IHNsaWNfaG9zdDY0X2NtZCB7Ci0gICAgdTMyICAgICAgIGhvc3RoYW5kbGU7Ci0gICAgdTMyICAgICAgIFJTVkQ7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgIGNvbW1hbmQ7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgIGZsYWdzOwotICAgIHVuaW9uIHsKLQl1c2hvcnQgICAgICAgICAgcnN2MTsKLQl1c2hvcnQgICAgICAgICAgcnN2MjsKLSAgICB9IHUwOwotICAgIHVuaW9uIHsKLQlzdHJ1Y3QgewotCQl1MzIgICAgICAgICAgICB0b3RsZW47Ci0JCXN0cnVjdCBzbGljX2hvc3Q2NHNnICAgIGJ1ZnNbU0xJQ19NQVg2NF9CQ05UXTsKLQl9IHNsaWNfYnVmZmVyczsKLSAgICB9IHU7CisJdTMyIGhvc3RoYW5kbGU7CisJdTMyIFJTVkQ7CisJdTggY29tbWFuZDsKKwl1OCBmbGFnczsKKwl1bmlvbiB7CisJCXUxNiByc3YxOworCQl1MTYgcnN2MjsKKwl9IHUwOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXUzMiB0b3RsZW47CisJCQlzdHJ1Y3Qgc2xpY19ob3N0NjRzZyBidWZzW1NMSUNfTUFYNjRfQkNOVF07CisJCX0gc2xpY19idWZmZXJzOworCX0gdTsKIH07CiAKIHN0cnVjdCBzbGljX3JzcGJ1ZiB7Ci0gICAgdTMyICAgaG9zdGhhbmRsZTsKLSAgICB1MzIgICBwYWQwOwotICAgIHUzMiAgIHBhZDE7Ci0gICAgdTMyICAgc3RhdHVzOwotICAgIHUzMiAgIHBhZDJbNF07Ci0KKwl1MzIgaG9zdGhhbmRsZTsKKwl1MzIgcGFkMDsKKwl1MzIgcGFkMTsKKwl1MzIgc3RhdHVzOworCXUzMiBwYWQyWzRdOwogfTsKIAogc3RydWN0IHNsaWNfcmVncyB7Ci0JdTMyCXNsaWNfcmVzZXQ7CQkvKiBSZXNldCBSZWdpc3RlciAqLworCXUzMglzbGljX3Jlc2V0OwkvKiBSZXNldCBSZWdpc3RlciAqLwogCXUzMglwYWQwOwogCi0JdTMyCXNsaWNfaWNyOwkJLyogSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKwl1MzIJc2xpY19pY3I7CS8qIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyICovCiAJdTMyCXBhZDI7CiAjZGVmaW5lIFNMSUNfSUNSCQkweDAwMDgKIAotCXUzMglzbGljX2lzcDsJCS8qIEludGVycnVwdCBzdGF0dXMgcG9pbnRlciAqLworCXUzMglzbGljX2lzcDsJLyogSW50ZXJydXB0IHN0YXR1cyBwb2ludGVyICovCiAJdTMyCXBhZDE7CiAjZGVmaW5lIFNMSUNfSVNQCQkweDAwMTAKIAotICAgIHUzMglzbGljX2lzcjsJCS8qIEludGVycnVwdCBzdGF0dXMgKi8KKwl1MzIJc2xpY19pc3I7CS8qIEludGVycnVwdCBzdGF0dXMgKi8KIAl1MzIJcGFkMzsKICNkZWZpbmUgU0xJQ19JU1IJCTB4MDAxOAogCi0gICAgdTMyCXNsaWNfaGJhcjsJCS8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyByZWcgKi8KLQl1MzIJCXBhZDQ7CisJdTMyCXNsaWNfaGJhcjsJLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzIHJlZyAqLworCXUzMglwYWQ0OwogCS8qIDMxLTggLSBwaHkgYWRkciBvZiBzZXQgb2YgY29udGlndW91cyBoZHIgYnVmZmVycwogCSAgICA3LTAgLSBudW1iZXIgb2YgYnVmZmVycyBwYXNzZWQKIAkgICBCdWZmZXJzIGFyZSAyNTYgYnl0ZXMgbG9uZyBvbiAyNTYtYnl0ZSBib3VuZGFyaWVzLiAqLwogI2RlZmluZSBTTElDX0hCQVIJCTB4MDAyMAogI2RlZmluZSBTTElDX0hCQVJfQ05UX01TSwkweDAwMDAwMEZGCiAKLSAgICB1MzIJc2xpY19kYmFyOwkvKiBEYXRhIGJ1ZmZlciBoYW5kbGUgJiBhZGRyZXNzIHJlZyAqLwotCXUzMgkJcGFkNTsKKwl1MzIJc2xpY19kYmFyOwkvKiBEYXRhIGJ1ZmZlciBoYW5kbGUgJiBhZGRyZXNzIHJlZyAqLworCXUzMglwYWQ1OwogCiAJLyogNCBzZXRzIG9mIHJlZ2lzdGVyczsgQnVmZmVycyBhcmUgMksgYnl0ZXMgbG9uZyAyIHBlciA0SyBwYWdlLiAqLwogI2RlZmluZSBTTElDX0RCQVIJCTB4MDAyOAogI2RlZmluZSBTTElDX0RCQVJfU0laRQkJMjA0OAogCi0gICAgdTMyCXNsaWNfY2JhcjsJCSAJLyogWG10IENtZCBidWYgYWRkciByZWdzLiovCisJdTMyCXNsaWNfY2JhcjsJLyogWG10IENtZCBidWYgYWRkciByZWdzLiovCiAJLyogMSBwZXIgWE1UIGludGVyZmFjZQogCSAgIDMxLTUgLSBwaHkgYWRkciBvZiBob3N0IGNvbW1hbmQgYnVmZmVyCiAJICAgIDQtMCAtIGxlbmd0aCBvZiBjbWQgaW4gbXVsdGlwbGVzIG9mIDMyIGJ5dGVzCkBAIC0zNDMsMTMgKzMyOSwxMyBAQAogI2RlZmluZSBTTElDX0NCQVJfTEVOX01TSwkweDAwMDAwMDFGCiAjZGVmaW5lIFNMSUNfQ0JBUl9BTElHTgkJMHgwMDAwMDAyMAogCi0JdTMyCXNsaWNfd2NzOwkJLyogd3JpdGUgY29udHJvbCBzdG9yZSovCisJdTMyCXNsaWNfd2NzOwkvKiB3cml0ZSBjb250cm9sIHN0b3JlKi8KICNkZWZpbmUJU0xJQ19XQ1MJCTB4MDAzNAogI2RlZmluZSBTTElDX1dDU19TVEFSVAkJMHg4MDAwMDAwMAkvKlN0YXJ0IHRoZSBTTElDIChKdW1wIHRvIFdDUykqLwogI2RlZmluZSBTTElDX1dDU19DT01QQVJFCTB4NDAwMDAwMDAJLyogQ29tcGFyZSB3aXRoIHZhbHVlIGluIFdDUyovCiAKLSAgICB1MzIJc2xpY19yYmFyOwkJLyogUmVzcG9uc2UgYnVmZmVyIGFkZHJlc3MgcmVnLiovCi0JdTMyCQlwYWQ3OworCXUzMglzbGljX3JiYXI7CS8qIFJlc3BvbnNlIGJ1ZmZlciBhZGRyZXNzIHJlZy4qLworCXUzMglwYWQ3OwogCSAvKjMxLTggLSBwaHkgYWRkciBvZiBzZXQgb2YgY29udGlndW91cyByZXNwb25zZSBidWZmZXJzCiAJICA3LTAgLSBudW1iZXIgb2YgYnVmZmVycyBwYXNzZWQKIAkgQnVmZmVycyBhcmUgMzIgYnl0ZXMgbG9uZyBvbiAzMi1ieXRlIGJvdW5kYXJpZXMuKi8KQEAgLTM1NywyMTUgKzM0MywyMTQgQEAKICNkZWZpbmUgU0xJQ19SQkFSX0NOVF9NU0sJMHgwMDAwMDBGRgogI2RlZmluZSBTTElDX1JCQVJfU0laRQkJMzIKIAotCXUzMglzbGljX3N0YXRzOwkJLyogcmVhZCBzdGF0aXN0aWNzIChVUFIpICovCi0JdTMyCQlwYWQ4OworCXUzMglzbGljX3N0YXRzOwkvKiByZWFkIHN0YXRpc3RpY3MgKFVQUikgKi8KKwl1MzIJcGFkODsKICNkZWZpbmUJU0xJQ19SU1RBVAkJMHgwMDQwCiAKLQl1MzIJc2xpY19ybHNyOwkJCS8qIHJlYWQgbGluayBzdGF0dXMgKi8KLQl1MzIJCXBhZDk7CisJdTMyCXNsaWNfcmxzcjsJLyogcmVhZCBsaW5rIHN0YXR1cyAqLworCXUzMglwYWQ5OwogI2RlZmluZSBTTElDX0xTVEFUCQkweDAwNDgKIAotCXUzMglzbGljX3dtY2ZnOwkJCS8qIFdyaXRlIE1hYyBDb25maWcgKi8KLQl1MzIJCXBhZDEwOworCXUzMglzbGljX3dtY2ZnOwkvKiBXcml0ZSBNYWMgQ29uZmlnICovCisJdTMyCXBhZDEwOwogI2RlZmluZQlTTElDX1dNQ0ZHCQkweDAwNTAKIAotCXUzMglzbGljX3dwaHk7CQkJLyogV3JpdGUgcGh5IHJlZ2lzdGVyICovCi0JdTMyCQlwYWQxMTsKKwl1MzIJc2xpY193cGh5OwkvKiBXcml0ZSBwaHkgcmVnaXN0ZXIgKi8KKwl1MzIJcGFkMTE7CiAjZGVmaW5lIFNMSUNfV1BIWQkJMHgwMDU4CiAKLQl1MzIJc2xpY19yY2JhcjsJCQkvKlJjdiBDbWQgYnVmIGFkZHIgcmVnKi8KLQl1MzIJCXBhZDEyOworCXUzMglzbGljX3JjYmFyOwkvKiBSY3YgQ21kIGJ1ZiBhZGRyIHJlZyAqLworCXUzMglwYWQxMjsKICNkZWZpbmUJU0xJQ19SQ0JBUgkJMHgwMDYwCiAKLQl1MzIJc2xpY19yY29uZmlnOwkJLyogUmVhZCBTTElDIENvbmZpZyovCi0JdTMyCQlwYWQxMzsKKwl1MzIJc2xpY19yY29uZmlnOwkvKiBSZWFkIFNMSUMgQ29uZmlnKi8KKwl1MzIJcGFkMTM7CiAjZGVmaW5lIFNMSUNfUkNPTkZJRwkweDAwNjgKIAotCXUzMglzbGljX2ludGFnZzsJCS8qIEludGVycnVwdCBhZ2dyZWdhdGlvbiB0aW1lKi8KLQl1MzIJCXBhZDE0OworCXUzMglzbGljX2ludGFnZzsJLyogSW50ZXJydXB0IGFnZ3JlZ2F0aW9uIHRpbWUgKi8KKwl1MzIJcGFkMTQ7CiAjZGVmaW5lIFNMSUNfSU5UQUdHCQkweDAwNzAKIAotCXUzMglzbGljX3d4Y2ZnOwkJLyogV3JpdGUgWE1JVCBjb25maWcgcmVnKi8KLQl1MzIJCXBhZDE2OworCXUzMglzbGljX3d4Y2ZnOwkvKiBXcml0ZSBYTUlUIGNvbmZpZyByZWcqLworCXUzMglwYWQxNjsKICNkZWZpbmUJU0xJQ19XWENGRwkJMHgwMDc4CiAKLQl1MzIJc2xpY193cmNmZzsJCS8qIFdyaXRlIFJDViBjb25maWcgcmVnKi8KLQl1MzIJCXBhZDE3OworCXUzMglzbGljX3dyY2ZnOwkvKiBXcml0ZSBSQ1YgY29uZmlnIHJlZyovCisJdTMyCXBhZDE3OwogI2RlZmluZQlTTElDX1dSQ0ZHCQkweDAwODAKIAotCXUzMglzbGljX3dyYWRkcmFsOwkJLyogV3JpdGUgcmN2IGFkZHIgYSBsb3cqLwotCXUzMgkJcGFkMTg7CisJdTMyCXNsaWNfd3JhZGRyYWw7CS8qIFdyaXRlIHJjdiBhZGRyIGEgbG93Ki8KKwl1MzIJcGFkMTg7CiAjZGVmaW5lCVNMSUNfV1JBRERSQUwJMHgwMDg4CiAKLQl1MzIJc2xpY193cmFkZHJhaDsJCS8qIFdyaXRlIHJjdiBhZGRyIGEgaGlnaCovCi0JdTMyCQlwYWQxOTsKKwl1MzIJc2xpY193cmFkZHJhaDsJLyogV3JpdGUgcmN2IGFkZHIgYSBoaWdoKi8KKwl1MzIJcGFkMTk7CiAjZGVmaW5lCVNMSUNfV1JBRERSQUgJMHgwMDkwCiAKLQl1MzIJc2xpY193cmFkZHJibDsJCS8qIFdyaXRlIHJjdiBhZGRyIGIgbG93Ki8KLQl1MzIJCXBhZDIwOworCXUzMglzbGljX3dyYWRkcmJsOwkvKiBXcml0ZSByY3YgYWRkciBiIGxvdyovCisJdTMyCXBhZDIwOwogI2RlZmluZQlTTElDX1dSQUREUkJMCTB4MDA5OAogCi0JdTMyCXNsaWNfd3JhZGRyYmg7CQkvKiBXcml0ZSByY3YgYWRkciBiIGhpZ2gqLworCXUzMglzbGljX3dyYWRkcmJoOwkvKiBXcml0ZSByY3YgYWRkciBiIGhpZ2gqLwogCXUzMgkJcGFkMjE7CiAjZGVmaW5lCVNMSUNfV1JBRERSQkgJMHgwMGEwCiAKLQl1MzIJc2xpY19tY2FzdGxvdzsJCS8qIExvdyBiaXRzIG9mIG1jYXN0IG1hc2sqLworCXUzMglzbGljX21jYXN0bG93OwkvKiBMb3cgYml0cyBvZiBtY2FzdCBtYXNrKi8KIAl1MzIJCXBhZDIyOwogI2RlZmluZQlTTElDX01DQVNUTE9XCTB4MDBhOAogCi0JdTMyCXNsaWNfbWNhc3RoaWdoOwkJLyogSGlnaCBiaXRzIG9mIG1jYXN0IG1hc2sqLworCXUzMglzbGljX21jYXN0aGlnaDsJLyogSGlnaCBiaXRzIG9mIG1jYXN0IG1hc2sqLwogCXUzMgkJcGFkMjM7CiAjZGVmaW5lCVNMSUNfTUNBU1RISUdICTB4MDBiMAogCi0JdTMyCXNsaWNfcGluZzsJCQkvKiBQaW5nIHRoZSBjYXJkKi8KLQl1MzIJCXBhZDI0OworCXUzMglzbGljX3Bpbmc7CS8qIFBpbmcgdGhlIGNhcmQqLworCXUzMglwYWQyNDsKICNkZWZpbmUgU0xJQ19QSU5HCQkweDAwYjgKIAotCXUzMglzbGljX2R1bXBfY21kOwkJLyogRHVtcCBjb21tYW5kICovCi0JdTMyCQlwYWQyNTsKKwl1MzIJc2xpY19kdW1wX2NtZDsJLyogRHVtcCBjb21tYW5kICovCisJdTMyCXBhZDI1OwogI2RlZmluZSBTTElDX0RVTVBfQ01ECTB4MDBjMAogCi0JdTMyCXNsaWNfZHVtcF9kYXRhOwkJLyogRHVtcCBkYXRhIHBvaW50ZXIgKi8KLQl1MzIJCXBhZDI2OworCXUzMglzbGljX2R1bXBfZGF0YTsJLyogRHVtcCBkYXRhIHBvaW50ZXIgKi8KKwl1MzIJcGFkMjY7CiAjZGVmaW5lIFNMSUNfRFVNUF9EQVRBCTB4MDBjOAogCiAJdTMyCXNsaWNfcGNpc3RhdHVzOwkvKiBSZWFkIGNhcmQncyBwY2lfc3RhdHVzIHJlZ2lzdGVyICovCi0JdTMyCQlwYWQyNzsKKwl1MzIJcGFkMjc7CiAjZGVmaW5lCVNMSUNfUENJU1RBVFVTCTB4MDBkMAogCi0JdTMyCXNsaWNfd3Job3N0aWQ7CQkvKiBXcml0ZSBob3N0aWQgZmllbGQgKi8KKwl1MzIJc2xpY193cmhvc3RpZDsJLyogV3JpdGUgaG9zdGlkIGZpZWxkICovCiAJdTMyCQlwYWQyODsKICNkZWZpbmUgU0xJQ19XUkhPU1RJRAkJIDB4MDBkOAogI2RlZmluZSBTTElDX1JESE9TVElEXzFHQgkgMHgxNTU0CiAjZGVmaW5lIFNMSUNfUkRIT1NUSURfMkdCCSAweDE1NTQKIAogCXUzMglzbGljX2xvd19wb3dlcjsJLyogUHV0IGNhcmQgaW4gYSBsb3cgcG93ZXIgc3RhdGUgKi8KLQl1MzIJCXBhZDI5OworCXUzMglwYWQyOTsKICNkZWZpbmUgU0xJQ19MT1dfUE9XRVIJMHgwMGUwCiAKIAl1MzIJc2xpY19xdWllc2NlOwkvKiBmb3JjZSBzbGljIGludG8gcXVpZXNjZW50IHN0YXRlCi0JCQkJCSBiZWZvcmUgc29mdCByZXNldCAqLwotCXUzMgkJcGFkMzA7CisJCQkJICAgYmVmb3JlIHNvZnQgcmVzZXQgKi8KKwl1MzIJcGFkMzA7CiAjZGVmaW5lIFNMSUNfUVVJRVNDRQkweDAwZTgKIAotCXUzMglzbGljX3Jlc2V0X2lmYWNlOwkvKiByZXNldCBpbnRlcmZhY2UgcXVldWVzICovCi0JdTMyCQlwYWQzMTsKKwl1MzIJc2xpY19yZXNldF9pZmFjZTsvKiByZXNldCBpbnRlcmZhY2UgcXVldWVzICovCisJdTMyCXBhZDMxOwogI2RlZmluZSBTTElDX1JFU0VUX0lGQUNFIDB4MDBmMAogCi0gICAgdTMyCXNsaWNfYWRkcl91cHBlcjsJLyogQml0cyA2My0zMiBmb3IgaG9zdCBpL2YgYWRkcnMgKi8KLQl1MzIJCXBhZDMyOworCXUzMglzbGljX2FkZHJfdXBwZXI7LyogQml0cyA2My0zMiBmb3IgaG9zdCBpL2YgYWRkcnMgKi8KKwl1MzIJcGFkMzI7CiAjZGVmaW5lIFNMSUNfQUREUl9VUFBFUgkweDAwZjggLypSZWdpc3RlciBpcyBvbmx5IHdyaXR0ZW4gd2hlbiBpdCBoYXMgY2hhbmdlZCovCiAKLSAgICB1MzIJc2xpY19oYmFyNjQ7CQkvKiA2NCBiaXQgSGVhZGVyIGJ1ZmZlciBhZGRyZXNzIHJlZyAqLwotCXUzMgkJcGFkMzM7CisJdTMyCXNsaWNfaGJhcjY0OwkvKiA2NCBiaXQgSGVhZGVyIGJ1ZmZlciBhZGRyZXNzIHJlZyAqLworCXUzMglwYWQzMzsKICNkZWZpbmUgU0xJQ19IQkFSNjQJCTB4MDEwMAogCi0gICAgdTMyCXNsaWNfZGJhcjY0OwkvKiA2NCBiaXQgRGF0YSBidWZmZXIgaGFuZGxlICYgYWRkcmVzcyByZWcgKi8KLQl1MzIJCXBhZDM0OworCXUzMglzbGljX2RiYXI2NDsJLyogNjQgYml0IERhdGEgYnVmZmVyIGhhbmRsZSAmIGFkZHJlc3MgcmVnICovCisJdTMyCXBhZDM0OwogI2RlZmluZSBTTElDX0RCQVI2NAkJMHgwMTA4CiAKLSAgICB1MzIJc2xpY19jYmFyNjQ7CSAJLyogNjQgYml0IFhtdCBDbWQgYnVmIGFkZHIgcmVncy4gKi8KLQl1MzIJCXBhZDM1OworCXUzMglzbGljX2NiYXI2NDsgCS8qIDY0IGJpdCBYbXQgQ21kIGJ1ZiBhZGRyIHJlZ3MuICovCisJdTMyCXBhZDM1OwogI2RlZmluZSBTTElDX0NCQVI2NAkJMHgwMTEwCiAKLSAgICB1MzIJc2xpY19yYmFyNjQ7CQkvKiA2NCBiaXQgUmVzcG9uc2UgYnVmZmVyIGFkZHJlc3MgcmVnLiovCi0JdTMyCQlwYWQzNjsKKwl1MzIJc2xpY19yYmFyNjQ7CS8qIDY0IGJpdCBSZXNwb25zZSBidWZmZXIgYWRkcmVzcyByZWcuKi8KKwl1MzIJcGFkMzY7CiAjZGVmaW5lIFNMSUNfUkJBUjY0CQkweDAxMTgKIAotCXUzMglzbGljX3JjYmFyNjQ7CQkvKiA2NCBiaXQgUmN2IENtZCBidWYgYWRkciByZWcqLwotCXUzMgkJcGFkMzc7CisJdTMyCXNsaWNfcmNiYXI2NDsJLyogNjQgYml0IFJjdiBDbWQgYnVmIGFkZHIgcmVnKi8KKwl1MzIJcGFkMzc7CiAjZGVmaW5lCVNMSUNfUkNCQVI2NAkweDAxMjAKIAotCXUzMglzbGljX3N0YXRzNjQ7CQkvKnJlYWQgc3RhdGlzdGljcyAoNjQgYml0IFVQUikqLwotCXUzMgkJcGFkMzg7CisJdTMyCXNsaWNfc3RhdHM2NDsJLyogcmVhZCBzdGF0aXN0aWNzICg2NCBiaXQgVVBSKSAqLworCXUzMglwYWQzODsKICNkZWZpbmUJU0xJQ19SU1RBVDY0CTB4MDEyOAogCiAJdTMyCXNsaWNfcmN2X3djczsJLypEb3dubG9hZCBHaWdhYml0IFJDViBzZXF1ZW5jZXIgdWNvZGUqLwotCXUzMgkJcGFkMzk7CisJdTMyCXBhZDM5OwogI2RlZmluZSBTTElDX1JDVl9XQ1MJMHgwMTMwCiAjZGVmaW5lIFNMSUNfUkNWV0NTX0JFR0lOCTB4NDAwMDAwMDAKICNkZWZpbmUgU0xJQ19SQ1ZXQ1NfRklOSVNICTB4ODAwMDAwMDAKIAotCXUzMglzbGljX3dydmxhbmlkOwkJLyogV3JpdGUgVmxhbklkIGZpZWxkICovCi0JdTMyCQlwYWQ0MDsKKwl1MzIJc2xpY193cnZsYW5pZDsJLyogV3JpdGUgVmxhbklkIGZpZWxkICovCisJdTMyCXBhZDQwOwogI2RlZmluZSBTTElDX1dSVkxBTklECTB4MDEzOAogCi0JdTMyCXNsaWNfcmVhZF94Zl9pbmZvOyAgLyogUmVhZCBUcmFuc2Zvcm1lciBpbmZvICovCi0JdTMyCQlwYWQ0MTsKKwl1MzIJc2xpY19yZWFkX3hmX2luZm87CS8qIFJlYWQgVHJhbnNmb3JtZXIgaW5mbyAqLworCXUzMglwYWQ0MTsKICNkZWZpbmUgU0xJQ19SRUFEX1hGX0lORk8gCTB4MDE0MAogCi0JdTMyCXNsaWNfd3JpdGVfeGZfaW5mbzsgLyogV3JpdGUgVHJhbnNmb3JtZXIgaW5mbyAqLwotCXUzMgkJcGFkNDI7CisJdTMyCXNsaWNfd3JpdGVfeGZfaW5mbzsJLyogV3JpdGUgVHJhbnNmb3JtZXIgaW5mbyAqLworCXUzMglwYWQ0MjsKICNkZWZpbmUgU0xJQ19XUklURV9YRl9JTkZPIAkweDAxNDgKIAotCXUzMglSU1ZEMTsgICAgICAgICAgICAgIC8qIFRPRSBPbmx5ICovCi0JdTMyCQlwYWQ0MzsKKwl1MzIJUlNWRDE7CQkvKiBUT0UgT25seSAqLworCXUzMglwYWQ0MzsKIAotCXUzMglSU1ZEMjsgCSAgICAgICAgICAgIC8qIFRPRSBPbmx5ICovCi0JdTMyCQlwYWQ0NDsKKwl1MzIJUlNWRDI7CQkvKiBUT0UgT25seSAqLworCXUzMglwYWQ0NDsKIAotCXUzMglSU1ZEMzsgICAgICAgICAgICAgIC8qIFRPRSBPbmx5ICovCi0JdTMyCQlwYWQ0NTsKKwl1MzIJUlNWRDM7CQkvKiBUT0UgT25seSAqLworCXUzMglwYWQ0NTsKIAotCXUzMglSU1ZENDsgICAgICAgICAgICAgIC8qIFRPRSBPbmx5ICovCi0JdTMyCQlwYWQ0NjsKKwl1MzIJUlNWRDQ7CQkvKiBUT0UgT25seSAqLworCXUzMglwYWQ0NjsKIAogCXUzMglzbGljX3RpY2tzX3Blcl9zZWM7IC8qIFdyaXRlIGNhcmQgdGlja3MgcGVyIHNlY29uZCAqLwotCXUzMgkJcGFkNDc7CisJdTMyCXBhZDQ3OwogI2RlZmluZSBTTElDX1RJQ0tTX1BFUl9TRUMJMHgwMTcwCi0KIH07CiAKIGVudW0gVVBSX1JFUVVFU1QgewotICAgIFNMSUNfVVBSX1NUQVRTLAotICAgIFNMSUNfVVBSX1JMU1IsCi0gICAgU0xJQ19VUFJfV0NGRywKLSAgICBTTElDX1VQUl9SQ09ORklHLAotICAgIFNMSUNfVVBSX1JQSFksCi0gICAgU0xJQ19VUFJfRU5MQiwKLSAgICBTTElDX1VQUl9FTkNULAotICAgIFNMSUNfVVBSX1BEV04sCi0gICAgU0xJQ19VUFJfUElORywKLSAgICBTTElDX1VQUl9EVU1QLAorCVNMSUNfVVBSX1NUQVRTLAorCVNMSUNfVVBSX1JMU1IsCisJU0xJQ19VUFJfV0NGRywKKwlTTElDX1VQUl9SQ09ORklHLAorCVNMSUNfVVBSX1JQSFksCisJU0xJQ19VUFJfRU5MQiwKKwlTTElDX1VQUl9FTkNULAorCVNMSUNfVVBSX1BEV04sCisJU0xJQ19VUFJfUElORywKKwlTTElDX1VQUl9EVU1QLAogfTsKIAogc3RydWN0IGluaWNwbV93YWtlcGF0dGVybiB7Ci0gICAgdTMyICAgIHBhdHRlcm5sZW5ndGg7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgIHBhdHRlcm5bU0xJQ19QTV9QQVRURVJOU0laRV07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgIG1hc2tbU0xJQ19QTV9QQVRURVJOU0laRV07CisJdTMyIHBhdHRlcm5sZW5ndGg7CisJdTggcGF0dGVybltTTElDX1BNX1BBVFRFUk5TSVpFXTsKKwl1OCBtYXNrW1NMSUNfUE1fUEFUVEVSTlNJWkVdOwogfTsKIAogc3RydWN0IGluaWNwbV9zdGF0ZSB7Ci0gICAgdTMyICAgICAgICAgICAgICAgICBwb3dlcmNhcHM7Ci0gICAgdTMyICAgICAgICAgICAgICAgICBwb3dlcnN0YXRlOwotICAgIHUzMiAgICAgICAgICAgICAgICAgd2FrZV9saW5rc3RhdHVzOwotICAgIHUzMiAgICAgICAgICAgICAgICAgd2FrZV9tYWdpY3BhY2tldDsKLSAgICB1MzIgICAgICAgICAgICAgICAgIHdha2VfZnJhbWVwYXR0ZXJuOwotICAgIHN0cnVjdCBpbmljcG1fd2FrZXBhdHRlcm4gICAgd2FrZXBhdHRlcm5bU0xJQ19QTV9NQVhQQVRURVJOU107CisJdTMyIHBvd2VyY2FwczsKKwl1MzIgcG93ZXJzdGF0ZTsKKwl1MzIgd2FrZV9saW5rc3RhdHVzOworCXUzMiB3YWtlX21hZ2ljcGFja2V0OworCXUzMiB3YWtlX2ZyYW1lcGF0dGVybjsKKwlzdHJ1Y3QgaW5pY3BtX3dha2VwYXR0ZXJuIHdha2VwYXR0ZXJuW1NMSUNfUE1fTUFYUEFUVEVSTlNdOwogfTsKIAogc3RydWN0IHNsaWNwbV9wYWNrZXRfcGF0dGVybiB7Ci0gICAgdTMyICAgICBwcmlvcml0eTsKLSAgICB1MzIgICAgIHJlc2VydmVkOwotICAgIHUzMiAgICAgbWFza3NpemU7Ci0gICAgdTMyICAgICBwYXR0ZXJub2Zmc2V0OwotICAgIHUzMiAgICAgcGF0dGVybnNpemU7Ci0gICAgdTMyICAgICBwYXR0ZXJuZmxhZ3M7CisJdTMyIHByaW9yaXR5OworCXUzMiByZXNlcnZlZDsKKwl1MzIgbWFza3NpemU7CisJdTMyIHBhdHRlcm5vZmZzZXQ7CisJdTMyIHBhdHRlcm5zaXplOworCXUzMiBwYXR0ZXJuZmxhZ3M7CiB9OwogCiBlbnVtIHNsaWNwbV9wb3dlcl9zdGF0ZSB7Ci0gICAgc2xpY3BtX3N0YXRlX3Vuc3BlY2lmaWVkID0gMCwKLSAgICBzbGljcG1fc3RhdGVfZDAsCi0gICAgc2xpY3BtX3N0YXRlX2QxLAotICAgIHNsaWNwbV9zdGF0ZV9kMiwKLSAgICBzbGljcG1fc3RhdGVfZDMsCi0gICAgc2xpY3BtX3N0YXRlX21heGltdW0KKwlzbGljcG1fc3RhdGVfdW5zcGVjaWZpZWQgPSAwLAorCXNsaWNwbV9zdGF0ZV9kMCwKKwlzbGljcG1fc3RhdGVfZDEsCisJc2xpY3BtX3N0YXRlX2QyLAorCXNsaWNwbV9zdGF0ZV9kMywKKwlzbGljcG1fc3RhdGVfbWF4aW11bQogfTsKIAogc3RydWN0IHNsaWNwbV93YWtldXBfY2FwYWJpbGl0aWVzIHsKLSAgICBlbnVtIHNsaWNwbV9wb3dlcl9zdGF0ZSAgbWluX21hZ2ljX3BhY2tldF93YWtldXA7Ci0gICAgZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgIG1pbl9wYXR0ZXJuX3dha2V1cDsKLSAgICBlbnVtIHNsaWNwbV9wb3dlcl9zdGF0ZSAgbWluX2xpbmtfY2hhbmdlX3dha2V1cDsKKwllbnVtIHNsaWNwbV9wb3dlcl9zdGF0ZSBtaW5fbWFnaWNfcGFja2V0X3dha2V1cDsKKwllbnVtIHNsaWNwbV9wb3dlcl9zdGF0ZSBtaW5fcGF0dGVybl93YWtldXA7CisJZW51bSBzbGljcG1fcG93ZXJfc3RhdGUgbWluX2xpbmtfY2hhbmdlX3dha2V1cDsKIH07CiAKIHN0cnVjdCBzbGljX3BucF9jYXBhYmlsaXRpZXMgewpAQCAtNjEyLDEzNiArNTk3LDEzNSBAQAogfTsKIAogc3RydWN0IHNsaWNfc3RhdHMgewotICAgIHVuaW9uIHsKLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgeG10X3N0YXRzICB4bXQxMDA7Ci0JCXN0cnVjdCByY3Zfc3RhdHMgIHJjdjEwMDsKLQl9IHN0YXRzXzEwMDsKLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgeG10X3N0YXRzZ2IgICAgIHhtdEdCOwotCQlzdHJ1Y3QgcmN2X3N0YXRzZ2IgICAgIHJjdkdCOwotCX0gc3RhdHNfR0I7Ci0gICAgfSB1OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCB4bXRfc3RhdHMgeG10MTAwOworCQkJc3RydWN0IHJjdl9zdGF0cyByY3YxMDA7CisJCX0gc3RhdHNfMTAwOworCQlzdHJ1Y3QgeworCQkJc3RydWN0IHhtdF9zdGF0c2diIHhtdEdCOworCQkJc3RydWN0IHJjdl9zdGF0c2diIHJjdkdCOworCQl9IHN0YXRzX0dCOworCX0gdTsKIH07CiAKLSNkZWZpbmUgeG1pdF90Y3Bfc2VnczEwMCAgICAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfdGNwX3NlZ3MKLSNkZWZpbmUgeG1pdF90Y3BfYnl0ZXMxMDAgICAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfdGNwX2J5dGVzCi0jZGVmaW5lIHhtaXRfYnl0ZXMxMDAgICAgICAgICAgICAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X2J5dGVzCi0jZGVmaW5lIHhtaXRfY29sbGlzaW9uczEwMCAgICAgICAgIHUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X2NvbGxpc2lvbnMKLSNkZWZpbmUgeG1pdF91bmljYXN0czEwMCAgICAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfdW5pY2FzdHMKLSNkZWZpbmUgeG1pdF9vdGhlcl9lcnJvcjEwMCAgICAgICAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfb3RoZXJfZXJyb3IKLSNkZWZpbmUgeG1pdF9leGNlc3NfY29sbGlzaW9uczEwMCAgdS5zdGF0c18xMDAueG10MTAwLnhtaXRfZXhjZXNzX2NvbGxpc2lvbnMKLSNkZWZpbmUgcmN2X3RjcF9zZWdzMTAwICAgICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl90Y3Bfc2VncwotI2RlZmluZSByY3ZfdGNwX2J5dGVzMTAwICAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X3RjcF9ieXRlcwotI2RlZmluZSByY3ZfYnl0ZXMxMDAgICAgICAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X2J5dGVzCi0jZGVmaW5lIHJjdl91bmljYXN0czEwMCAgICAgICAgICAgIHUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfdW5pY2FzdHMKLSNkZWZpbmUgcmN2X290aGVyX2Vycm9yMTAwICAgICAgICAgdS5zdGF0c18xMDAucmN2MTAwLnJjdl9vdGhlcl9lcnJvcgotI2RlZmluZSByY3ZfZHJvcHMxMDAgICAgICAgICAgICAgICB1LnN0YXRzXzEwMC5yY3YxMDAucmN2X2Ryb3BzCi0jZGVmaW5lIHhtaXRfdGNwX3NlZ3NfZ2IgICAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF90Y3Bfc2VncwotI2RlZmluZSB4bWl0X3RjcF9ieXRlc19nYiAgICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfdGNwX2J5dGVzCi0jZGVmaW5lIHhtaXRfYnl0ZXNfZ2IgICAgICAgICAgICAgIHUuc3RhdHNfR0IueG10R0IueG1pdF9ieXRlcwotI2RlZmluZSB4bWl0X2NvbGxpc2lvbnNfZ2IgICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfY29sbGlzaW9ucwotI2RlZmluZSB4bWl0X3VuaWNhc3RzX2diICAgICAgICAgICB1LnN0YXRzX0dCLnhtdEdCLnhtaXRfdW5pY2FzdHMKLSNkZWZpbmUgeG1pdF9vdGhlcl9lcnJvcl9nYiAgICAgICAgdS5zdGF0c19HQi54bXRHQi54bWl0X290aGVyX2Vycm9yCi0jZGVmaW5lIHhtaXRfZXhjZXNzX2NvbGxpc2lvbnNfZ2IgIHUuc3RhdHNfR0IueG10R0IueG1pdF9leGNlc3NfY29sbGlzaW9ucworI2RlZmluZSB4bWl0X3RjcF9zZWdzMTAwCQl1LnN0YXRzXzEwMC54bXQxMDAueG1pdF90Y3Bfc2VncworI2RlZmluZSB4bWl0X3RjcF9ieXRlczEwMAkJdS5zdGF0c18xMDAueG10MTAwLnhtaXRfdGNwX2J5dGVzCisjZGVmaW5lIHhtaXRfYnl0ZXMxMDAJCQl1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9ieXRlcworI2RlZmluZSB4bWl0X2NvbGxpc2lvbnMxMDAJCXUuc3RhdHNfMTAwLnhtdDEwMC54bWl0X2NvbGxpc2lvbnMKKyNkZWZpbmUgeG1pdF91bmljYXN0czEwMAkJdS5zdGF0c18xMDAueG10MTAwLnhtaXRfdW5pY2FzdHMKKyNkZWZpbmUgeG1pdF9vdGhlcl9lcnJvcjEwMAkJdS5zdGF0c18xMDAueG10MTAwLnhtaXRfb3RoZXJfZXJyb3IKKyNkZWZpbmUgeG1pdF9leGNlc3NfY29sbGlzaW9uczEwMAl1LnN0YXRzXzEwMC54bXQxMDAueG1pdF9leGNlc3NfY29sbGlzaW9ucworI2RlZmluZSByY3ZfdGNwX3NlZ3MxMDAJCQl1LnN0YXRzXzEwMC5yY3YxMDAucmN2X3RjcF9zZWdzCisjZGVmaW5lIHJjdl90Y3BfYnl0ZXMxMDAJCXUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfdGNwX2J5dGVzCisjZGVmaW5lIHJjdl9ieXRlczEwMAkJCXUuc3RhdHNfMTAwLnJjdjEwMC5yY3ZfYnl0ZXMKKyNkZWZpbmUgcmN2X3VuaWNhc3RzMTAwCQkJdS5zdGF0c18xMDAucmN2MTAwLnJjdl91bmljYXN0cworI2RlZmluZSByY3Zfb3RoZXJfZXJyb3IxMDAJCXUuc3RhdHNfMTAwLnJjdjEwMC5yY3Zfb3RoZXJfZXJyb3IKKyNkZWZpbmUgcmN2X2Ryb3BzMTAwCQkJdS5zdGF0c18xMDAucmN2MTAwLnJjdl9kcm9wcworI2RlZmluZSB4bWl0X3RjcF9zZWdzX2diCQl1LnN0YXRzX0dCLnhtdEdCLnhtaXRfdGNwX3NlZ3MKKyNkZWZpbmUgeG1pdF90Y3BfYnl0ZXNfZ2IJCXUuc3RhdHNfR0IueG10R0IueG1pdF90Y3BfYnl0ZXMKKyNkZWZpbmUgeG1pdF9ieXRlc19nYgkJCXUuc3RhdHNfR0IueG10R0IueG1pdF9ieXRlcworI2RlZmluZSB4bWl0X2NvbGxpc2lvbnNfZ2IJCXUuc3RhdHNfR0IueG10R0IueG1pdF9jb2xsaXNpb25zCisjZGVmaW5lIHhtaXRfdW5pY2FzdHNfZ2IJCXUuc3RhdHNfR0IueG10R0IueG1pdF91bmljYXN0cworI2RlZmluZSB4bWl0X290aGVyX2Vycm9yX2diCQl1LnN0YXRzX0dCLnhtdEdCLnhtaXRfb3RoZXJfZXJyb3IKKyNkZWZpbmUgeG1pdF9leGNlc3NfY29sbGlzaW9uc19nYgl1LnN0YXRzX0dCLnhtdEdCLnhtaXRfZXhjZXNzX2NvbGxpc2lvbnMKIAotI2RlZmluZSByY3ZfdGNwX3NlZ3NfZ2IgICAgICAgICAgICB1LnN0YXRzX0dCLnJjdkdCLnJjdl90Y3Bfc2VncwotI2RlZmluZSByY3ZfdGNwX2J5dGVzX2diICAgICAgICAgICB1LnN0YXRzX0dCLnJjdkdCLnJjdl90Y3BfYnl0ZXMKLSNkZWZpbmUgcmN2X2J5dGVzX2diICAgICAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfYnl0ZXMKLSNkZWZpbmUgcmN2X3VuaWNhc3RzX2diICAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdW5pY2FzdHMKLSNkZWZpbmUgcmN2X290aGVyX2Vycm9yX2diICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3Zfb3RoZXJfZXJyb3IKLSNkZWZpbmUgcmN2X2Ryb3BzX2diICAgICAgICAgICAgICAgdS5zdGF0c19HQi5yY3ZHQi5yY3ZfZHJvcHMKKyNkZWZpbmUgcmN2X3RjcF9zZWdzX2diCQkJdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdGNwX3NlZ3MKKyNkZWZpbmUgcmN2X3RjcF9ieXRlc19nYgkJdS5zdGF0c19HQi5yY3ZHQi5yY3ZfdGNwX2J5dGVzCisjZGVmaW5lIHJjdl9ieXRlc19nYgkJCXUuc3RhdHNfR0IucmN2R0IucmN2X2J5dGVzCisjZGVmaW5lIHJjdl91bmljYXN0c19nYgkJCXUuc3RhdHNfR0IucmN2R0IucmN2X3VuaWNhc3RzCisjZGVmaW5lIHJjdl9vdGhlcl9lcnJvcl9nYgkJdS5zdGF0c19HQi5yY3ZHQi5yY3Zfb3RoZXJfZXJyb3IKKyNkZWZpbmUgcmN2X2Ryb3BzX2diCQkJdS5zdGF0c19HQi5yY3ZHQi5yY3ZfZHJvcHMKIAogc3RydWN0IHNsaWNfY29uZmlnX21hYyB7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgbWFjYWRkckFbNl07CisJdTggbWFjYWRkckFbNl07CiB9OwogCi0jZGVmaW5lIEFUS19GUlVfRk9STUFUICAgICAgICAweDAwCi0jZGVmaW5lIFZFTkRPUjFfRlJVX0ZPUk1BVCAgICAweDAxCi0jZGVmaW5lIFZFTkRPUjJfRlJVX0ZPUk1BVCAgICAweDAyCi0jZGVmaW5lIFZFTkRPUjNfRlJVX0ZPUk1BVCAgICAweDAzCi0jZGVmaW5lIFZFTkRPUjRfRlJVX0ZPUk1BVCAgICAweDA0Ci0jZGVmaW5lIE5PX0ZSVV9GT1JNQVQgICAgICAgICAweEZGCisjZGVmaW5lIEFUS19GUlVfRk9STUFUCQkweDAwCisjZGVmaW5lIFZFTkRPUjFfRlJVX0ZPUk1BVAkweDAxCisjZGVmaW5lIFZFTkRPUjJfRlJVX0ZPUk1BVAkweDAyCisjZGVmaW5lIFZFTkRPUjNfRlJVX0ZPUk1BVAkweDAzCisjZGVmaW5lIFZFTkRPUjRfRlJVX0ZPUk1BVAkweDA0CisjZGVmaW5lIE5PX0ZSVV9GT1JNQVQJCTB4RkYKIAogc3RydWN0IGF0a19mcnUgewotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIGFzc2VtYmx5WzZdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHJldmlzaW9uWzJdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHNlcmlhbFsxNF07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzNdOworCXU4IGFzc2VtYmx5WzZdOworCXU4IHJldmlzaW9uWzJdOworCXU4IHNlcmlhbFsxNF07CisJdTggcGFkWzNdOwogfTsKIAogc3RydWN0IHZlbmRvcjFfZnJ1IHsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBjb21tb2RpdHk7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgYXNzZW1ibHlbNF07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgcmV2aXNpb25bMl07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgc3VwcGxpZXJbMl07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgZGF0ZVsyXTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBzZXF1ZW5jZVszXTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYWRbMTNdOworCXU4IGNvbW1vZGl0eTsKKwl1OCBhc3NlbWJseVs0XTsKKwl1OCByZXZpc2lvblsyXTsKKwl1OCBzdXBwbGllclsyXTsKKwl1OCBkYXRlWzJdOworCXU4IHNlcXVlbmNlWzNdOworCXU4IHBhZFsxM107CiB9OwogCiBzdHJ1Y3QgdmVuZG9yMl9mcnUgewotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHBhcnRbOF07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgc3VwcGxpZXJbNV07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgZGF0ZVszXTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBzZXF1ZW5jZVs0XTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYWRbN107CisJdTggcGFydFs4XTsKKwl1OCBzdXBwbGllcls1XTsKKwl1OCBkYXRlWzNdOworCXU4IHNlcXVlbmNlWzRdOworCXU4IHBhZFs3XTsKIH07CiAKIHN0cnVjdCB2ZW5kb3IzX2ZydSB7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgYXNzZW1ibHlbNl07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgcmV2aXNpb25bMl07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgc2VyaWFsWzE0XTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYWRbM107CisJdTggYXNzZW1ibHlbNl07CisJdTggcmV2aXNpb25bMl07CisJdTggc2VyaWFsWzE0XTsKKwl1OCBwYWRbM107CiB9OwogCiBzdHJ1Y3QgdmVuZG9yNF9mcnUgewotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIG51bWJlcls4XTsKLSAgICB1bnNpZ25lZCBjaGFyICAgICAgICBwYXJ0WzhdOwotICAgIHVuc2lnbmVkIGNoYXIgICAgICAgIHZlcnNpb25bOF07Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgcGFkWzNdOworCXU4IG51bWJlcls4XTsKKwl1OCBwYXJ0WzhdOworCXU4IHZlcnNpb25bOF07CisJdTggcGFkWzNdOwogfTsKIAogdW5pb24gb2VtZnJ1IHsKLSAgICBzdHJ1Y3QgdmVuZG9yMV9mcnUgICB2ZW5kb3IxX2ZydTsKLSAgICBzdHJ1Y3QgdmVuZG9yMl9mcnUgICB2ZW5kb3IyX2ZydTsKLSAgICBzdHJ1Y3QgdmVuZG9yM19mcnUgICB2ZW5kb3IzX2ZydTsKLSAgICBzdHJ1Y3QgdmVuZG9yNF9mcnUgICB2ZW5kb3I0X2ZydTsKKwlzdHJ1Y3QgdmVuZG9yMV9mcnUgdmVuZG9yMV9mcnU7CisJc3RydWN0IHZlbmRvcjJfZnJ1IHZlbmRvcjJfZnJ1OworCXN0cnVjdCB2ZW5kb3IzX2ZydSB2ZW5kb3IzX2ZydTsKKwlzdHJ1Y3QgdmVuZG9yNF9mcnUgdmVuZG9yNF9mcnU7CiB9OwogCiAvKgotICAgU0xJQyBFRVBST00gc3RydWN0dXJlIGZvciBNb2phdmUKLSovCisgKiBTTElDIEVFUFJPTSBzdHJ1Y3R1cmUgZm9yIE1vamF2ZQorICovCiBzdHJ1Y3Qgc2xpY19lZXByb20gewotCXVzaG9ydAkJSWQ7CQkvKiAwMCBFRVBST00vRkxBU0ggTWFnaWMgY29kZSAnQTVBNScqLwotCXVzaG9ydAkJRWVjb2RlU2l6ZTsJLyogMDEgU2l6ZSBvZiBFRVBST00gQ29kZXMgKGJ5dGVzICogNCkqLwotCXVzaG9ydAkJRmxhc2hTaXplOwkvKiAwMiBGbGFzaCBzaXplICovCi0JdXNob3J0CQlFZXByb21TaXplOwkvKiAwMyBFRVBST00gU2l6ZSAqLwotCXVzaG9ydAkJVmVuZG9ySWQ7CS8qIDA0IFZlbmRvciBJRCAqLwotCXVzaG9ydAkJRGV2aWNlSWQ7CS8qIDA1IERldmljZSBJRCAqLwotCXVuc2lnbmVkIGNoYXIJCVJldmlzaW9uSWQ7CS8qIDA2IFJldmlzaW9uIElEICovCi0JdW5zaWduZWQgY2hhcgkJQ2xhc3NDb2RlWzNdOwkvKiAwNyBDbGFzcyBDb2RlICovCi0JdW5zaWduZWQgY2hhcgkJRGJnSW50UGluOwkvKiAwOCBEZWJ1ZyBJbnRlcnJ1cHQgcGluICovCi0JdW5zaWduZWQgY2hhcgkJTmV0SW50UGluMDsJLyogICAgTmV0d29yayBJbnRlcnJ1cHQgUGluICovCi0JdW5zaWduZWQgY2hhcgkJTWluR3JhbnQ7CS8qIDA5IE1pbmltdW0gZ3JhbnQgKi8KLQl1bnNpZ25lZCBjaGFyCQlNYXhMYXQ7CQkvKiAgICBNYXhpbXVtIExhdGVuY3kgKi8KLQl1c2hvcnQJCVBjaVN0YXR1czsJLyogMTAgUENJIFN0YXR1cyAqLwotCXVzaG9ydAkJU3ViU3lzVklkOwkvKiAxMSBTdWJzeXN0ZW0gVmVuZG9yIElkICovCi0JdXNob3J0CQlTdWJTeXNJZDsJLyogMTIgU3Vic3lzdGVtIElEICovCi0JdXNob3J0CQlEYmdEZXZJZDsJLyogMTMgRGVidWcgRGV2aWNlIElkICovCi0JdXNob3J0CQlEcmFtUm9tRm47CS8qIDE0IERyYW0vUm9tIGZ1bmN0aW9uICovCi0JdXNob3J0CQlEU2l6ZTJQY2k7CS8qIDE1IERSQU0gc2l6ZSB0byBQQ0kgKGJ5dGVzICogNjRLKSAqLwotCXVzaG9ydAlSU2l6ZTJQY2k7CS8qIDE2IFJPTSBleHRlbnNpb24gc2l6ZSB0byBQQ0kgKGJ5dGVzICogNGspICovCi0JdW5zaWduZWQgY2hhciBOZXRJbnRQaW4xOy8qIDE3IE5ldHdvcmsgSW50ZXJmYWNlIFBpbiAxCisJdTE2IElkOwkJCS8qIDAwIEVFUFJPTS9GTEFTSCBNYWdpYyBjb2RlICdBNUE1JyovCisJdTE2IEVlY29kZVNpemU7CQkvKiAwMSBTaXplIG9mIEVFUFJPTSBDb2RlcyAoYnl0ZXMgKiA0KSovCisJdTE2IEZsYXNoU2l6ZTsJCS8qIDAyIEZsYXNoIHNpemUgKi8KKwl1MTYgRWVwcm9tU2l6ZTsJCS8qIDAzIEVFUFJPTSBTaXplICovCisJdTE2IFZlbmRvcklkOwkJLyogMDQgVmVuZG9yIElEICovCisJdTE2IERldmljZUlkOwkJLyogMDUgRGV2aWNlIElEICovCisJdTggUmV2aXNpb25JZDsJCS8qIDA2IFJldmlzaW9uIElEICovCisJdTggQ2xhc3NDb2RlWzNdOwkvKiAwNyBDbGFzcyBDb2RlICovCisJdTggRGJnSW50UGluOwkJLyogMDggRGVidWcgSW50ZXJydXB0IHBpbiAqLworCXU4IE5ldEludFBpbjA7CQkvKiAgICBOZXR3b3JrIEludGVycnVwdCBQaW4gKi8KKwl1OCBNaW5HcmFudDsJCS8qIDA5IE1pbmltdW0gZ3JhbnQgKi8KKwl1OCBNYXhMYXQ7CQkvKiAgICBNYXhpbXVtIExhdGVuY3kgKi8KKwl1MTYgUGNpU3RhdHVzOwkJLyogMTAgUENJIFN0YXR1cyAqLworCXUxNiBTdWJTeXNWSWQ7CQkvKiAxMSBTdWJzeXN0ZW0gVmVuZG9yIElkICovCisJdTE2IFN1YlN5c0lkOwkJLyogMTIgU3Vic3lzdGVtIElEICovCisJdTE2IERiZ0RldklkOwkJLyogMTMgRGVidWcgRGV2aWNlIElkICovCisJdTE2IERyYW1Sb21GbjsJCS8qIDE0IERyYW0vUm9tIGZ1bmN0aW9uICovCisJdTE2IERTaXplMlBjaTsJCS8qIDE1IERSQU0gc2l6ZSB0byBQQ0kgKGJ5dGVzICogNjRLKSAqLworCXUxNiBSU2l6ZTJQY2k7CQkvKiAxNiBST00gZXh0ZW5zaW9uIHNpemUgdG8gUENJIChieXRlcyAqIDRrKSAqLworCXU4IE5ldEludFBpbjE7CQkvKiAxNyBOZXR3b3JrIEludGVyZmFjZSBQaW4gMQogCQkJCSAgICAoc2ltYmEvbGVvbmUgb25seSkgKi8KLQl1bnNpZ25lZCBjaGFyIE5ldEludFBpbjI7IC8qTmV0d29yayBJbnRlcmZhY2UgUGluIDIgKHNpbWJhL2xlb25lIG9ubHkpKi8KKwl1OCBOZXRJbnRQaW4yOwkJLyogTmV0d29yayBJbnRlcmZhY2UgUGluIDIgKHNpbWJhL2xlb25lIG9ubHkpKi8KIAl1bmlvbiB7Ci0JCXVuc2lnbmVkIGNoYXIgTmV0SW50UGluMzsvKjE4IE5ldHdvcmsgSW50ZXJmYWNlIFBpbiAzCi0JCQkJCSAgIChzaW1iYSBvbmx5KSovCi0JCXVuc2lnbmVkIGNoYXIgRnJlZVRpbWU7LypGcmVlVGltZSBzZXR0aW5nIChsZW9uZS9tb2phdmUgb25seSkgKi8KKwkJdTggTmV0SW50UGluMzsJLyogMTggTmV0d29yayBJbnRlcmZhY2UgUGluIDMgKHNpbWJhIG9ubHkpICovCisJCXU4IEZyZWVUaW1lOwkvKiBGcmVlVGltZSBzZXR0aW5nIChsZW9uZS9tb2phdmUgb25seSkgKi8KIAl9IHUxOwotCXVuc2lnbmVkIGNoYXIJVEJJY3RsOwkvKiAgICAxMC1iaXQgaW50ZXJmYWNlIGNvbnRyb2wgKE1vamF2ZSBvbmx5KSAqLwotCXVzaG9ydAkJRHJhbVNpemU7CS8qIDE5IERSQU0gc2l6ZSAoYnl0ZXMgKiA2NGspICovCisJdTggVEJJY3RsOwkJLyogMTAtYml0IGludGVyZmFjZSBjb250cm9sIChNb2phdmUgb25seSkgKi8KKwl1MTYgRHJhbVNpemU7CQkvKiAxOSBEUkFNIHNpemUgKGJ5dGVzICogNjRrKSAqLwogCXVuaW9uIHsKIAkJc3RydWN0IHsKIAkJCS8qIE1hYyBJbnRlcmZhY2UgU3BlY2lmaWMgcG9ydGlvbnMgKi8KQEAgLTc1MCw2NyArNzM0LDY0IEBACiAJCXN0cnVjdCB7CiAJCQkvKiB1c2UgYWJvdmUgc3RydWN0IGZvciBNQUMgYWNjZXNzICovCiAJCQlzdHJ1Y3Qgc2xpY19jb25maWdfbWFjCXBhZFtTTElDX05CUl9NQUNTIC0gMV07Ci0JCQl1c2hvcnQJCURldmljZUlkMjsJLyogRGV2aWNlIElEIGZvciAybmQKLQkJCQkJCQkJUENJIGZ1bmN0aW9uICovCi0JCQl1bnNpZ25lZCBjaGFyCUludFBpbjI7CS8qIEludGVycnVwdCBwaW4gZm9yCi0JCQkJCQkJICAgMm5kIFBDSSBmdW5jdGlvbiAqLwotCQkJdW5zaWduZWQgY2hhcglDbGFzc0NvZGUyWzNdOwkvKiBDbGFzcyBDb2RlIGZvciAybmQKLQkJCQkJCQkJUENJIGZ1bmN0aW9uICovCisJCQl1MTYgRGV2aWNlSWQyOwkvKiBEZXZpY2UgSUQgZm9yIDJuZCBQQ0kgZnVuY3Rpb24gKi8KKwkJCXU4IEludFBpbjI7CS8qIEludGVycnVwdCBwaW4gZm9yIDJuZCBQQ0kgZnVuY3Rpb24gKi8KKwkJCXU4IENsYXNzQ29kZTJbM107IC8qIENsYXNzIENvZGUgZm9yIDJuZCBQQ0kgZnVuY3Rpb24gKi8KIAkJfSBtb2phdmU7CS8qIDJuZCBmdW5jdGlvbiBhY2Nlc3MgZm9yIGdpZ2FiaXQgYm9hcmQgKi8KIAl9IHUyOwotCXVzaG9ydAkJQ2ZnQnl0ZTY7CS8qIENvbmZpZyBCeXRlIDYgKi8KLQl1c2hvcnQJCVBNRUNhcGFiOwkvKiBQb3dlciBNZ21lbnQgY2FwYWJpbGl0aWVzICovCi0JdXNob3J0CQlOd0Nsa0N0cmxzOwkvKiBOZXR3b3JrQ2xvY2tDb250cm9scyAqLwotCXVuc2lnbmVkIGNoYXIJRnJ1Rm9ybWF0OwkvKiBBbGFjcml0ZWNoIEZSVSBmb3JtYXQgdHlwZSAqLwotCXN0cnVjdCBhdGtfZnJ1ICAgQXRrRnJ1OwkvKiBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLwotCXVuc2lnbmVkIGNoYXIJT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCi0JdW5pb24gb2VtZnJ1ICAgIE9lbUZydTsgICAgICAgICAvKiBvcHRpb25hbCBPRU0gRlJVIGluZm9ybWF0aW9uICovCi0JdW5zaWduZWQgY2hhcglQYWRbNF07CS8qIFBhZCB0byAxMjggYnl0ZXMgLSBpbmNsdWRlcyAyIGNrc3VtIGJ5dGVzCi0JCQkJICooaWYgT0VNIEZSVSBpbmZvIGV4aXN0cykgYW5kIHR3byB1bnVzYWJsZQorCXUxNiBDZmdCeXRlNjsJCS8qIENvbmZpZyBCeXRlIDYgKi8KKwl1MTYgUE1FQ2FwYWI7CQkvKiBQb3dlciBNZ21lbnQgY2FwYWJpbGl0aWVzICovCisJdTE2IE53Q2xrQ3RybHM7CQkvKiBOZXR3b3JrQ2xvY2tDb250cm9scyAqLworCXU4IEZydUZvcm1hdDsJCS8qIEFsYWNyaXRlY2ggRlJVIGZvcm1hdCB0eXBlICovCisJc3RydWN0IGF0a19mcnUgIEF0a0ZydTsJLyogQWxhY3JpdGVjaCBGUlUgaW5mb3JtYXRpb24gKi8KKwl1OCBPZW1GcnVGb3JtYXQ7CS8qIG9wdGlvbmFsIE9FTSBGUlUgZm9ybWF0IHR5cGUgKi8KKwl1bmlvbiBvZW1mcnUgT2VtRnJ1OwkvKiBvcHRpb25hbCBPRU0gRlJVIGluZm9ybWF0aW9uICovCisJdTgJUGFkWzRdOwkJLyogUGFkIHRvIDEyOCBieXRlcyAtIGluY2x1ZGVzIDIgY2tzdW0gYnl0ZXMKKwkJCQkgKiAoaWYgT0VNIEZSVSBpbmZvIGV4aXN0cykgYW5kIHR3byB1bnVzYWJsZQogCQkJCSAqIGJ5dGVzIGF0IHRoZSBlbmQgKi8KIH07CiAKIC8qIFNMSUMgRUVQUk9NIHN0cnVjdHVyZSBmb3IgT2FzaXMgKi8KIHN0cnVjdCBvc2xpY19lZXByb20gewotCXVzaG9ydAkJSWQ7CQkvKiAwMCBFRVBST00vRkxBU0ggTWFnaWMgY29kZSAnQTVBNScgKi8KLQl1c2hvcnQJCUVlY29kZVNpemU7CS8qIDAxIFNpemUgb2YgRUVQUk9NIENvZGVzIChieXRlcyAqIDQpKi8KLQl1c2hvcnQJCUZsYXNoQ29uZmlnMDsJLyogMDIgRmxhc2ggQ29uZmlnIGZvciBTUEkgZGV2aWNlIDAgKi8KLQl1c2hvcnQJCUZsYXNoQ29uZmlnMTsJLyogMDMgRmxhc2ggQ29uZmlnIGZvciBTUEkgZGV2aWNlIDEgKi8KLQl1c2hvcnQJCVZlbmRvcklkOwkvKiAwNCBWZW5kb3IgSUQgKi8KLQl1c2hvcnQJCURldmljZUlkOwkvKiAwNSBEZXZpY2UgSUQgKGZ1bmN0aW9uIDApICovCi0JdW5zaWduZWQgY2hhcglSZXZpc2lvbklkOwkvKiAwNiBSZXZpc2lvbiBJRCAqLwotCXVuc2lnbmVkIGNoYXIJQ2xhc3NDb2RlWzNdOwkvKiAwNyBDbGFzcyBDb2RlIGZvciBQQ0kgZnVuY3Rpb24gMCAqLwotCXVuc2lnbmVkIGNoYXIJSW50UGluMTsJLyogMDggSW50ZXJydXB0IHBpbiBmb3IgUENJIGZ1bmN0aW9uIDEqLwotCXVuc2lnbmVkIGNoYXIJQ2xhc3NDb2RlMlszXTsJLyogMDkgQ2xhc3MgQ29kZSBmb3IgUENJIGZ1bmN0aW9uIDEgKi8KLQl1bnNpZ25lZCBjaGFyCUludFBpbjI7CS8qIDEwIEludGVycnVwdCBwaW4gZm9yIFBDSSBmdW5jdGlvbiAyKi8KLQl1bnNpZ25lZCBjaGFyCUludFBpbjA7CS8qICAgIEludGVycnVwdCBwaW4gZm9yIFBDSSBmdW5jdGlvbiAwKi8KLQl1bnNpZ25lZCBjaGFyCQlNaW5HcmFudDsJLyogMTEgTWluaW11bSBncmFudCAqLwotCXVuc2lnbmVkIGNoYXIJCU1heExhdDsJCS8qICAgIE1heGltdW0gTGF0ZW5jeSAqLwotCXVzaG9ydAkJU3ViU3lzVklkOwkvKiAxMiBTdWJzeXN0ZW0gVmVuZG9yIElkICovCi0JdXNob3J0CQlTdWJTeXNJZDsJLyogMTMgU3Vic3lzdGVtIElEICovCi0JdXNob3J0CQlGbGFzaFNpemU7CS8qIDE0IEZsYXNoIHNpemUgKGJ5dGVzIC8gNEspICovCi0JdXNob3J0CQlEU2l6ZTJQY2k7CS8qIDE1IERSQU0gc2l6ZSB0byBQQ0kgKGJ5dGVzIC8gNjRLKSAqLwotCXVzaG9ydAkJUlNpemUyUGNpOwkvKiAxNiBGbGFzaCAoUk9NIGV4dGVuc2lvbikgc2l6ZSB0bwotCQkJCQkJUENJIChieXRlcyAvIDRLKSAqLwotCXVzaG9ydAkJRGV2aWNlSWQxOwkvKiAxNyBEZXZpY2UgSWQgKGZ1bmN0aW9uIDEpICovCi0JdXNob3J0CQlEZXZpY2VJZDI7CS8qIDE4IERldmljZSBJZCAoZnVuY3Rpb24gMikgKi8KLQl1c2hvcnQJCUNmZ0J5dGU2OwkvKiAxOSBEZXZpY2UgU3RhdHVzIENvbmZpZyBCeXRlcyA2LTcgKi8KLQl1c2hvcnQJCVBNRUNhcGFiOwkvKiAyMCBQb3dlciBNZ21lbnQgY2FwYWJpbGl0aWVzICovCi0JdW5zaWduZWQgY2hhcgkJTVNJQ2FwYWI7CS8qIDIxIE1TSSBjYXBhYmlsaXRpZXMgKi8KLQl1bnNpZ25lZCBjaGFyCQlDbG9ja0RpdmlkZXI7CS8qICAgIENsb2NrIGRpdmlkZXIgKi8KLQl1c2hvcnQJCVBjaVN0YXR1c0xvdzsJLyogMjIgUENJIFN0YXR1cyBiaXRzIDE1OjAgKi8KLQl1c2hvcnQJCVBjaVN0YXR1c0hpZ2g7CS8qIDIzIFBDSSBTdGF0dXMgYml0cyAzMToxNiAqLwotCXVzaG9ydAkJRHJhbUNvbmZpZ0xvdzsJLyogMjQgRFJBTSBDb25maWd1cmF0aW9uIGJpdHMgMTU6MCAqLwotCXVzaG9ydAkJRHJhbUNvbmZpZ0hpZ2g7CS8qIDI1IERSQU0gQ29uZmlndXJhdGlvbiBiaXRzIDMxOjE2ICovCi0JdXNob3J0CQlEcmFtU2l6ZTsJLyogMjYgRFJBTSBzaXplIChieXRlcyAvIDY0SykgKi8KLQl1c2hvcnQJCUdwaW9UYmlDdGw7LyogMjcgR1BJTy9UQkkgY29udHJvbHMgZm9yIGZ1bmN0aW9ucyAxLzAgKi8KLQl1c2hvcnQJCUVlcHJvbVNpemU7CQkvKiAyOCBFRVBST00gU2l6ZSAqLworCXUxNiBJZDsJCQkvKiAwMCBFRVBST00vRkxBU0ggTWFnaWMgY29kZSAnQTVBNScgKi8KKwl1MTYgRWVjb2RlU2l6ZTsJCS8qIDAxIFNpemUgb2YgRUVQUk9NIENvZGVzIChieXRlcyAqIDQpKi8KKwl1MTYgRmxhc2hDb25maWcwOwkvKiAwMiBGbGFzaCBDb25maWcgZm9yIFNQSSBkZXZpY2UgMCAqLworCXUxNiBGbGFzaENvbmZpZzE7CS8qIDAzIEZsYXNoIENvbmZpZyBmb3IgU1BJIGRldmljZSAxICovCisJdTE2IFZlbmRvcklkOwkJLyogMDQgVmVuZG9yIElEICovCisJdTE2IERldmljZUlkOwkJLyogMDUgRGV2aWNlIElEIChmdW5jdGlvbiAwKSAqLworCXU4IFJldmlzaW9uSWQ7CQkvKiAwNiBSZXZpc2lvbiBJRCAqLworCXU4IENsYXNzQ29kZVszXTsJLyogMDcgQ2xhc3MgQ29kZSBmb3IgUENJIGZ1bmN0aW9uIDAgKi8KKwl1OCBJbnRQaW4xOwkJLyogMDggSW50ZXJydXB0IHBpbiBmb3IgUENJIGZ1bmN0aW9uIDEqLworCXU4IENsYXNzQ29kZTJbM107CS8qIDA5IENsYXNzIENvZGUgZm9yIFBDSSBmdW5jdGlvbiAxICovCisJdTggSW50UGluMjsJCS8qIDEwIEludGVycnVwdCBwaW4gZm9yIFBDSSBmdW5jdGlvbiAyKi8KKwl1OCBJbnRQaW4wOwkJLyogICAgSW50ZXJydXB0IHBpbiBmb3IgUENJIGZ1bmN0aW9uIDAqLworCXU4IE1pbkdyYW50OwkJLyogMTEgTWluaW11bSBncmFudCAqLworCXU4IE1heExhdDsJCS8qICAgIE1heGltdW0gTGF0ZW5jeSAqLworCXUxNiBTdWJTeXNWSWQ7CQkvKiAxMiBTdWJzeXN0ZW0gVmVuZG9yIElkICovCisJdTE2IFN1YlN5c0lkOwkJLyogMTMgU3Vic3lzdGVtIElEICovCisJdTE2IEZsYXNoU2l6ZTsJCS8qIDE0IEZsYXNoIHNpemUgKGJ5dGVzIC8gNEspICovCisJdTE2IERTaXplMlBjaTsJCS8qIDE1IERSQU0gc2l6ZSB0byBQQ0kgKGJ5dGVzIC8gNjRLKSAqLworCXUxNiBSU2l6ZTJQY2k7CQkvKiAxNiBGbGFzaCAoUk9NIGV4dGVuc2lvbikgc2l6ZSB0byBQQ0kKKwkJCQkJKGJ5dGVzIC8gNEspICovCisJdTE2IERldmljZUlkMTsJCS8qIDE3IERldmljZSBJZCAoZnVuY3Rpb24gMSkgKi8KKwl1MTYgRGV2aWNlSWQyOwkJLyogMTggRGV2aWNlIElkIChmdW5jdGlvbiAyKSAqLworCXUxNiBDZmdCeXRlNjsJCS8qIDE5IERldmljZSBTdGF0dXMgQ29uZmlnIEJ5dGVzIDYtNyAqLworCXUxNiBQTUVDYXBhYjsJCS8qIDIwIFBvd2VyIE1nbWVudCBjYXBhYmlsaXRpZXMgKi8KKwl1OCBNU0lDYXBhYjsJCS8qIDIxIE1TSSBjYXBhYmlsaXRpZXMgKi8KKwl1OCBDbG9ja0RpdmlkZXI7CS8qICAgIENsb2NrIGRpdmlkZXIgKi8KKwl1MTYgUGNpU3RhdHVzTG93OwkvKiAyMiBQQ0kgU3RhdHVzIGJpdHMgMTU6MCAqLworCXUxNiBQY2lTdGF0dXNIaWdoOwkvKiAyMyBQQ0kgU3RhdHVzIGJpdHMgMzE6MTYgKi8KKwl1MTYgRHJhbUNvbmZpZ0xvdzsJLyogMjQgRFJBTSBDb25maWd1cmF0aW9uIGJpdHMgMTU6MCAqLworCXUxNiBEcmFtQ29uZmlnSGlnaDsJLyogMjUgRFJBTSBDb25maWd1cmF0aW9uIGJpdHMgMzE6MTYgKi8KKwl1MTYgRHJhbVNpemU7CQkvKiAyNiBEUkFNIHNpemUgKGJ5dGVzIC8gNjRLKSAqLworCXUxNiBHcGlvVGJpQ3RsOwkJLyogMjcgR1BJTy9UQkkgY29udHJvbHMgZm9yIGZ1bmN0aW9ucyAxLzAgKi8KKwl1MTYgRWVwcm9tU2l6ZTsJCS8qIDI4IEVFUFJPTSBTaXplICovCiAJc3RydWN0IHNsaWNfY29uZmlnX21hYyBNYWNJbmZvWzJdOwkvKiAyOSBNQUMgYWRkcmVzc2VzICgyIHBvcnRzKSAqLwotCXVuc2lnbmVkIGNoYXIJRnJ1Rm9ybWF0OwkvKiAzNSBBbGFjcml0ZWNoIEZSVSBmb3JtYXQgdHlwZSAqLworCXU4IEZydUZvcm1hdDsJCS8qIDM1IEFsYWNyaXRlY2ggRlJVIGZvcm1hdCB0eXBlICovCiAJc3RydWN0IGF0a19mcnUJQXRrRnJ1OwkvKiBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLwotCXVuc2lnbmVkIGNoYXIJT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCi0JdW5pb24gb2VtZnJ1ICAgIE9lbUZydTsgICAgICAgICAvKiBvcHRpb25hbCBPRU0gRlJVIGluZm9ybWF0aW9uICovCi0JdW5zaWduZWQgY2hhcglQYWRbNF07CS8qIFBhZCB0byAxMjggYnl0ZXMgLSBpbmNsdWRlcyAyIGNoZWNrc3VtIGJ5dGVzCisJdTggT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdW5pb24gb2VtZnJ1IE9lbUZydTsJLyogb3B0aW9uYWwgT0VNIEZSVSBpbmZvcm1hdGlvbiAqLworCXU4IFBhZFs0XTsJCS8qIFBhZCB0byAxMjggYnl0ZXMgLSBpbmNsdWRlcyAyIGNoZWNrc3VtIGJ5dGVzCiAJCQkJICogKGlmIE9FTSBGUlUgaW5mbyBleGlzdHMpIGFuZCB0d28gdW51c2FibGUKIAkJCQkgKiBieXRlcyBhdCB0aGUgZW5kCiAJCQkJICovCkBAIC04MTksMjQgKzgwMCwyNSBAQAogI2RlZmluZQlNQVhfRUVDT0RFX1NJWkUJc2l6ZW9mKHN0cnVjdCBzbGljX2VlcHJvbSkKICNkZWZpbmUgTUlOX0VFQ09ERV9TSVpFCTB4NjIJLyogY29kZSBzaXplIHdpdGhvdXQgb3B0aW9uYWwgT0VNIEZSVSBzdHVmZiAqLwogCi0vKiBTTElDIENPTkZJRyBzdHJ1Y3R1cmUKLQotIFRoaXMgc3RydWN0dXJlIGxpdmVzIGluIHRoZSBDQVJEIHN0cnVjdHVyZSBhbmQgaXMgdmFsaWQgZm9yIGFsbAotIGJvYXJkIHR5cGVzLiAgSXQgaXMgZmlsbGVkIGluIGZyb20gdGhlIGFwcHJvcHJpYXRlIEVFUFJPTSBzdHJ1Y3R1cmUKLSBieSBTbGljR2V0Q29uZmlnRGF0YSgpLgotKi8KKy8qCisgKiBTTElDIENPTkZJRyBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBsaXZlcyBpbiB0aGUgQ0FSRCBzdHJ1Y3R1cmUgYW5kIGlzIHZhbGlkIGZvciBhbGwgYm9hcmQgdHlwZXMuCisgKiBJdCBpcyBmaWxsZWQgaW4gZnJvbSB0aGUgYXBwcm9wcmlhdGUgRUVQUk9NIHN0cnVjdHVyZSBieQorICogU2xpY0dldENvbmZpZ0RhdGEoKQorICovCiBzdHJ1Y3Qgc2xpY19jb25maWcgewogCWJvb2wgRWVwcm9tVmFsaWQ7CS8qIFZhbGlkIEVFUFJPTSBmbGFnIChjaGVja3N1bSBnb29kPykgKi8KLQl1c2hvcnQJCURyYW1TaXplOwkvKiBEUkFNIHNpemUgKGJ5dGVzIC8gNjRLKSAqLworCXUxNiBEcmFtU2l6ZTsJCS8qIERSQU0gc2l6ZSAoYnl0ZXMgLyA2NEspICovCiAJc3RydWN0IHNsaWNfY29uZmlnX21hYyBNYWNJbmZvW1NMSUNfTkJSX01BQ1NdOyAvKiBNQUMgYWRkcmVzc2VzICovCi0JdW5zaWduZWQgY2hhcgkJRnJ1Rm9ybWF0OwkvKiBBbGFjcml0ZWNoIEZSVSBmb3JtYXQgdHlwZSAqLworCXU4IEZydUZvcm1hdDsJCS8qIEFsYWNyaXRlY2ggRlJVIGZvcm1hdCB0eXBlICovCiAJc3RydWN0IGF0a19mcnUJQXRrRnJ1OwkvKiBBbGFjcml0ZWNoIEZSVSBpbmZvcm1hdGlvbiAqLwotCXVuc2lnbmVkIGNoYXIJT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCisJdTggT2VtRnJ1Rm9ybWF0OwkvKiBvcHRpb25hbCBPRU0gRlJVIGZvcm1hdCB0eXBlICovCiAJdW5pb24gewotCQlzdHJ1Y3QgdmVuZG9yMV9mcnUgICB2ZW5kb3IxX2ZydTsKLQkJc3RydWN0IHZlbmRvcjJfZnJ1ICAgdmVuZG9yMl9mcnU7Ci0JCXN0cnVjdCB2ZW5kb3IzX2ZydSAgIHZlbmRvcjNfZnJ1OwotCQlzdHJ1Y3QgdmVuZG9yNF9mcnUgICB2ZW5kb3I0X2ZydTsKKwkJc3RydWN0IHZlbmRvcjFfZnJ1IHZlbmRvcjFfZnJ1OworCQlzdHJ1Y3QgdmVuZG9yMl9mcnUgdmVuZG9yMl9mcnU7CisJCXN0cnVjdCB2ZW5kb3IzX2ZydSB2ZW5kb3IzX2ZydTsKKwkJc3RydWN0IHZlbmRvcjRfZnJ1IHZlbmRvcjRfZnJ1OwogCX0gT2VtRnJ1OwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2luYy5oIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY2luYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTI4OGM0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNpbmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQUxBQ1JJVEVDSCwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFMQUNSSVRFQ0gsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uCi0gKiBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nCi0gKiBvZmZpY2lhbCBwb2xpY2llcywgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBvZiBBbGFjcml0ZWNoLCBJbmMuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogRklMRU5BTUU6IHNsaWNpbmMuaAotICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgb3RoZXIgaW5jbHVkZSBmaWxlcyBhbmQgcHJvdG90eXBlIGRlZmluaXRpb25zCi0gKiBmb3IgdGhlIFNMSUNPU1MgZHJpdmVyLgotICovCi0jaWZuZGVmIF9TTElDX0lOQ0xVREVfSF8KLSNkZWZpbmUgX1NMSUNfSU5DTFVERV9IXwotCi0jaW5jbHVkZSAic2xpY19vcy5oIgotI2luY2x1ZGUgInNsaWNkYmcuaCIKLSNpbmNsdWRlICJzbGljaHcuaCIKLSNpbmNsdWRlICJzbGljLmgiCi0KLXN0YXRpYyBpbnQgc2xpY19lbnRyeV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAgICAgKnBjaWRldiwKLQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICAqZW50KTsKLXN0YXRpYyB2b2lkIHNsaWNfZW50cnlfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpOwotCi1zdGF0aWMgdm9pZCBzbGljX2luaXRfZHJpdmVyKHZvaWQpOwotc3RhdGljIGludCAgc2xpY19lbnRyeV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCAgc2xpY19lbnRyeV9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCAgc2xpY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKLXN0YXRpYyBpbnQgIHNsaWNfeG1pdF9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHNsaWNfeG1pdF9mYWlsKHN0cnVjdCBhZGFwdGVyICAgICphZGFwdGVyLAotCQkJc3RydWN0IHNrX2J1ZmYgICAqc2tiLAotCQkJdm9pZCAqY21kLAotCQkJdTMyICAgICAgICAgICBza2J0eXBlLAotCQkJdTMyICAgICAgICAgICBzdGF0dXMpOwotc3RhdGljIHZvaWQgc2xpY19jb25maWdfcGNpKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpOwotc3RhdGljIHN0cnVjdCBza19idWZmICpzbGljX3JjdnF1ZXVlX2dldG5leHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWczMl93cml0ZSh2b2lkIF9faW9tZW0gKnJlZywgdTMyIHZhbHVlLCB1aW50IGZsdXNoKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGljX3JlZzY0X3dyaXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB2b2lkIF9faW9tZW0gKnJlZywKLQl1MzIgdmFsdWUsIHZvaWQgX19pb21lbSAqcmVnaCwgdTMyIHBhZGRyaCwgdWludCBmbHVzaCk7Ci0KLSNpZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNsaWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotI2VuZGlmCi0KLXN0YXRpYyBpbnQgc2xpY19tYWNfc2V0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKTsKLXN0YXRpYyB2b2lkIHNsaWNfcmN2X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19saW5rX2V2ZW50X2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY194bWl0X2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBpc3IpOwotc3RhdGljIGludCAgIHNsaWNfcnNwcXVldWVfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50ICAgc2xpY19yc3BxdWV1ZV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCAgc2xpY19yc3BxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBzdHJ1Y3Qgc2xpY19yc3BidWYgKnNsaWNfcnNwcXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCAgc2xpY19jbWRxbWVtX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgIHNsaWNfY21kcW1lbV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB1MzIgKnNsaWNfY21kcW1lbV9hZGRwYWdlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgICBzbGljX2NtZHFfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCAgc2xpY19jbWRxX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgIHNsaWNfY21kcV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCAgc2xpY19jbWRxX2FkZGNtZHBhZ2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqcGFnZSk7Ci1zdGF0aWMgdm9pZCAgc2xpY19jbWRxX2dldGRvbmUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgIHNsaWNfY21kcV9wdXRkb25lX2lycShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJCXN0cnVjdCBzbGljX2hvc3RjbWQgKmNtZCk7Ci1zdGF0aWMgc3RydWN0IHNsaWNfaG9zdGNtZCAqc2xpY19jbWRxX2dldGZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCAgIHNsaWNfcmN2cXVldWVfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50ICAgc2xpY19yY3ZxdWV1ZV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50ICAgc2xpY19yY3ZxdWV1ZV9maWxsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB1MzIgc2xpY19yY3ZxdWV1ZV9yZWluc2VydChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgdm9pZCAgc2xpY19yY3ZxdWV1ZV9mcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfcmN2X2hhbmRsZV9lcnJvcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJCQkJc3RydWN0IHNsaWNfcmN2YnVmICpyY3ZidWYpOwotc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX3NldF9od2FkZHIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCBzbGljX2NhcmRfaW5pdChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfaW50YWdnX3NldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIHZhbHVlKTsKLXN0YXRpYyBpbnQgIHNsaWNfY2FyZF9kb3dubG9hZChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdTMyIHNsaWNfY2FyZF9sb2NhdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotCi1zdGF0aWMgdm9pZCBzbGljX2lmX3N0b3BfcXVldWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19pZl9zdGFydF9xdWV1ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50ICBzbGljX2lmX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIGludCAgc2xpY19hZGFwdGVyX2FsbG9jcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfYWRhcHRlcl9mcmVlcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfbGlua19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBsaW5rc3BlZWQsCi0JCQl1MzIgbGlua2R1cGxleCk7Ci1zdGF0aWMgdm9pZCBzbGljX3VubWFwX21taW9fc3BhY2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19jYXJkX2NsZWFudXAoc3RydWN0IHNsaWNjYXJkICpjYXJkKTsKLXN0YXRpYyB2b2lkIHNsaWNfaW5pdF9jbGVhbnVwKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfc29mdF9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgYm9vbCBzbGljX21hY19maWx0ZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCi0JCQlzdHJ1Y3QgZXRoZXJfaGVhZGVyICpldGhlcl9mcmFtZSk7Ci1zdGF0aWMgdm9pZCBzbGljX21hY19hZGRyZXNzX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgdm9pZCBzbGljX21hY19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc2xpY19tY2FzdF9zZXRfbWFzayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Ci1zdGF0aWMgaW50IHNsaWNfbWNhc3RfYWRkX2xpc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgc2xpY19tY2FzdF9nZXRfbWFjX2hhc2goY2hhciAqbWFjYWRkcik7Ci1zdGF0aWMgdm9pZCAgc2xpY19tY2FzdF9zZXRfYml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBjaGFyICphZGRyZXNzKTsKLXN0YXRpYyB2b2lkIHNsaWNfY29uZmlnX3NldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgYm9vbCBsaW5rY2hhbmdlKTsKLXN0YXRpYyB2b2lkIHNsaWNfY29uZmlnX2NsZWFyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfY29uZmlnX2dldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGNvbmZpZywKLQkJCXUzMiBjb25maWdoKTsKLXN0YXRpYyB2b2lkIHNsaWNfdGltZXJfbG9hZF9jaGVjayh1bG9uZyBjb250ZXh0KTsKLXN0YXRpYyB2b2lkIHNsaWNfdGltZXJfcGluZyh1bG9uZyBkZXYpOwotc3RhdGljIHZvaWQgc2xpY19hc3NlcnRfZmFpbCh2b2lkKTsKLXN0YXRpYyB1c2hvcnQgc2xpY19lZXByb21fY2tzdW0oY2hhciAqbSwgaW50IGxlbik7Ci0vKiB1cHIgKi8KLXN0YXRpYyB2b2lkIHNsaWNfdXByX3N0YXJ0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyB2b2lkIHNsaWNfbGlua191cHJfY29tcGxldGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBJc3IpOwotc3RhdGljIGludCAgc2xpY191cHJfcmVxdWVzdChzdHJ1Y3QgYWRhcHRlciAgICAqYWRhcHRlciwKLQkJCXUzMiAgICAgICAgICAgIHVwcl9yZXF1ZXN0LAotCQkJdTMyICAgICAgICAgICAgdXByX2RhdGEsCi0JCQl1MzIgICAgICAgICAgICB1cHJfZGF0YV9oLAotCQkJdTMyICAgICAgICAgICAgdXByX2J1ZmZlciwKLQkJCXUzMiAgICAgICAgICAgIHVwcl9idWZmZXJfaCk7Ci1zdGF0aWMgaW50ICBzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBhZGFwdGVyICAgICAgKmFkYXB0ZXIsCi0JCQkJdTMyICAgICAgICAgICAgdXByX3JlcXVlc3QsCi0JCQkJdTMyICAgICAgICAgICAgdXByX2RhdGEsCi0JCQkJdTMyICAgICAgICAgICAgdXByX2RhdGFfaCwKLQkJCQl1MzIgICAgICAgICAgICB1cHJfYnVmZmVyLAotCQkJCXUzMiAgICAgICAgICAgIHVwcl9idWZmZXJfaCk7Ci1zdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgc2xpY19tY2FzdF9pbml0X2NyYzMyKHZvaWQpOwotCi0jaWYgU0xJQ19EVU1QX0VOQUJMRUQKLXN0YXRpYyBpbnQgICBzbGljX2R1bXBfdGhyZWFkKHZvaWQgKmNvbnRleHQpOwotc3RhdGljIHVpbnQgIHNsaWNfaW5pdF9kdW1wX3RocmVhZChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpOwotc3RhdGljIHVuc2lnbmVkIGNoYXIgc2xpY19nZXRfZHVtcF9pbmRleChjaGFyICpwYXRoKTsKLXN0YXRpYyB1MzIgc2xpY19kdW1wX2NhcmQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCBib29sIHJlc3VtZSk7Ci1zdGF0aWMgdTMyIHNsaWNfZHVtcF9oYWx0KHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKTsKLXN0YXRpYyB1MzIgc2xpY19kdW1wX3JlZyhzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHVuc2lnbmVkIGNoYXIgcHJvYyk7Ci1zdGF0aWMgdTMyIHNsaWNfZHVtcF9kYXRhKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGFkZHIsCi0JCQl1c2hvcnQgY291bnQsIHVuc2lnbmVkIGNoYXIgZGVzYyk7Ci1zdGF0aWMgdTMyIHNsaWNfZHVtcF9xdWV1ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBidWZfcGh5cywKLQkJCXUzMiBidWZfcGh5c2gsIHUzMiBxdWV1ZSk7Ci1zdGF0aWMgdTMyIHNsaWNfZHVtcF9sb2FkX3F1ZXVlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGRhdGEsCi0JCQkJdTMyIHF1ZXVlKTsKLXN0YXRpYyB1MzIgc2xpY19kdW1wX2NhbShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHUzMiBhZGRyLAotCQkJdTMyIGNvdW50LCB1bnNpZ25lZCBjaGFyIGRlc2MpOwotCi1zdGF0aWMgdTMyIHNsaWNfZHVtcF9yZXN1bWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1bnNpZ25lZCBjaGFyIHByb2MpOwotc3RhdGljIHUzMiBzbGljX2R1bXBfc2VuZF9jbWQoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1MzIgY21kX3BoeXMsCi0JCQkJdTMyIGNtZF9waHlzaCwgdTMyIGJ1Zl9waHlzLAotCQkJCXUzMiBidWZfcGh5c2gpOwotCi0jZGVmaW5lIGNyZWF0ZV9maWxlKHgpICAgICAgICAgU1RBVFVTX1NVQ0NFU1MKLSNkZWZpbmUgd3JpdGVfZmlsZSh3LCB4LCB5LCB6KSBTVEFUVVNfU1VDQ0VTUwotI2RlZmluZSBjbG9zZV9maWxlKHgpICAgICAgICAgIFNUQVRVU19TVUNDRVNTCi0jZGVmaW5lIHJlYWRfZmlsZSh3LCB4LCB5LCB6KSAgU1RBVFVTX1NVQ0NFU1MKLSNkZWZpbmUgb3Blbl9maWxlKHgpICAgICAgICAgICBTVEFUVVNfU1VDQ0VTUwotCi0vKiBQQUdFX1NJWkUgKiAxNiAqLwotI2RlZmluZSBEVU1QX1BBR0VfU0laRSAgICAgICAgIDB4RkZGRgotI2RlZmluZSBEVU1QX1BBR0VfU0laRV9IQUxGICAgIDB4N0ZGRQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfU0xJQ19JTkNMVURFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMKaW5kZXggYmY3ZGE4Zi4uOTUzNjg0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwpAQCAtNTUsMTkgKzU1LDEwIEBACiAgKi8KIAogCi0jZGVmaW5lIFNMSUNfRFVNUF9FTkFCTEVEICAgICAgICAgICAgICAgMAogI2RlZmluZSBLTFVER0VfRk9SXzRHQl9CT1VOREFSWSAgICAgICAgIDEKICNkZWZpbmUgREVCVUdfTUlDUk9DT0RFICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFNMSUNfUFJPRFVDVElPTl9CVUlMRAkgICAgICAgIDEKLSNkZWZpbmUgU0xJQ19GQUlMVVJFX1JFU0VUCSAgICAgICAgICAgIDEKICNkZWZpbmUgREJHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFNMSUNfQVNTRVJUX0VOQUJMRUQJCSAgICAgICAgMQotI2RlZmluZSBTTElDX0dFVF9TVEFUU19FTkFCTEVECQkJMQotI2RlZmluZSBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECTAKLSNkZWZpbmUgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQJCSAgICAxCi0jZGVmaW5lIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECTAKICNkZWZpbmUgU0xJQ19JTlRFUlJVUFRfUFJPQ0VTU19MSU1JVAkxCi0jZGVmaW5lIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCTEKICNkZWZpbmUgU0xJQ19PRkZMT0FEX0lQX0NIRUNLU1VNCQkxCiAjZGVmaW5lIFNUQVRTX1RJTUVSX0lOVEVSVkFMCQkJMgogI2RlZmluZSBQSU5HX1RJTUVSX0lOVEVSVkFMCQkJICAgIDEKQEAgLTEwMiwyMCArOTMsNzMgQEAKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jZGVmaW5lIFNMSUNfRVRIVE9PTF9TVVBQT1JUICAgICAxCi0KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSAic2xpY2luYy5oIgorI2luY2x1ZGUgInNsaWNody5oIgorI2luY2x1ZGUgInNsaWMuaCIKIAotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0jaW5jbHVkZSAic2xpY2R1bXAuaCIKLSNlbmRpZgorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgc2xpY19lbnRyeV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzbGljX2VudHJ5X2hhbHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IHNsaWNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CitzdGF0aWMgaW50IHNsaWNfeG1pdF9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIHNsaWNfeG1pdF9mYWlsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgdm9pZCAqY21kLCB1MzIgc2tidHlwZSwgdTMyIHN0YXR1cyk7CitzdGF0aWMgdm9pZCBzbGljX2NvbmZpZ19wY2koc3RydWN0IHBjaV9kZXYgKnBjaWRldik7CitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNsaWNfcmN2cXVldWVfZ2V0bmV4dChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHNsaWNfbWFjX3NldF9hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnB0cik7CitzdGF0aWMgdm9pZCBzbGljX2xpbmtfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX3Vwcl9yZXF1ZXN0X2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgaXNyKTsKK3N0YXRpYyBpbnQgc2xpY19yc3BxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfcnNwcXVldWVfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgc3RydWN0IHNsaWNfcnNwYnVmICpzbGljX3JzcHF1ZXVlX2dldG5leHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBzbGljX2NtZHFfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2NtZHFfZnJlZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2NtZHFfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jbWRxX2FkZGNtZHBhZ2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqcGFnZSk7CitzdGF0aWMgdm9pZCBzbGljX2NtZHFfZ2V0ZG9uZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2NtZHFfcHV0ZG9uZV9pcnEoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICBzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQpOworc3RhdGljIHN0cnVjdCBzbGljX2hvc3RjbWQgKnNsaWNfY21kcV9nZXRmcmVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgc2xpY19yY3ZxdWV1ZV9pbml0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgc2xpY19yY3ZxdWV1ZV9maWxsKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB1MzIgc2xpY19yY3ZxdWV1ZV9yZWluc2VydChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitzdGF0aWMgdm9pZCBzbGljX3JjdnF1ZXVlX2ZyZWUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX3NldF9od2FkZHIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIGludCBzbGljX2NhcmRfaW5pdChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfaW50YWdnX3NldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIHZhbHVlKTsKK3N0YXRpYyBpbnQgc2xpY19jYXJkX2Rvd25sb2FkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB1MzIgc2xpY19jYXJkX2xvY2F0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHNsaWNfaWZfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHNsaWNfYWRhcHRlcl9hbGxvY3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzbGljX2xpbmtfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgbGlua3NwZWVkLAorCQkJICAgICB1MzIgbGlua2R1cGxleCk7CitzdGF0aWMgdm9pZCBzbGljX3VubWFwX21taW9fc3BhY2Uoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jYXJkX2NsZWFudXAoc3RydWN0IHNsaWNjYXJkICpjYXJkKTsKK3N0YXRpYyB2b2lkIHNsaWNfc29mdF9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgYm9vbCBzbGljX21hY19maWx0ZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgc3RydWN0IGV0aGVyX2hlYWRlciAqZXRoZXJfZnJhbWUpOworc3RhdGljIHZvaWQgc2xpY19tYWNfYWRkcmVzc19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19tYWNfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X21hc2soc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBib29sIGxpbmtjaGFuZ2UpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfY2xlYXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19jb25maWdfZ2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgY29uZmlnLAorCQkJICAgIHUzMiBjb25maWdoKTsKK3N0YXRpYyB2b2lkIHNsaWNfdGltZXJfbG9hZF9jaGVjayh1bG9uZyBjb250ZXh0KTsKK3N0YXRpYyB2b2lkIHNsaWNfYXNzZXJ0X2ZhaWwodm9pZCk7CitzdGF0aWMgdXNob3J0IHNsaWNfZWVwcm9tX2Nrc3VtKGNoYXIgKm0sIGludCBsZW4pOworc3RhdGljIHZvaWQgc2xpY191cHJfc3RhcnQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOworc3RhdGljIHZvaWQgc2xpY19saW5rX3Vwcl9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIElzcik7CitzdGF0aWMgaW50ICBzbGljX3Vwcl9yZXF1ZXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgdXByX3JlcXVlc3QsCisJCQkgICAgIHUzMiB1cHJfZGF0YSwgdTMyIHVwcl9kYXRhX2gsIHUzMiB1cHJfYnVmZmVyLAorCQkJICAgICB1MzIgdXByX2J1ZmZlcl9oKTsKK3N0YXRpYyB2b2lkIHNsaWNfbWNhc3Rfc2V0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLSNkZWZpbmUgU0xJQ19QT1dFUl9NQU5BR0VNRU5UICAwCiAKIHN0YXRpYyB1aW50IHNsaWNfZmlyc3RfaW5pdCA9IDE7CiBzdGF0aWMgY2hhciAqc2xpY19iYW5uZXIgPSAiQWxhY3JpdGVjaCBTTElDIFRlY2hub2xvZ3kodG0pIFNlcnZlciAiXAotCQkiYW5kIFN0b3JhZ2UgQWNjZWxlcmF0b3IgKE5vbi1BY2NlbGVyYXRlZClcbiI7CisJCSJhbmQgU3RvcmFnZSBBY2NlbGVyYXRvciAoTm9uLUFjY2VsZXJhdGVkKSI7CiAKIHN0YXRpYyBjaGFyICpzbGljX3Byb2NfdmVyc2lvbiA9ICIyLjAuMzUxICAyMDA2LzA3LzE0IDEyOjI2OjAwIjsKIHN0YXRpYyBjaGFyICpzbGljX3Byb2R1Y3RfbmFtZSA9ICJTTElDIFRlY2hub2xvZ3kodG0pIFNlcnZlciAiXApAQCAtMTI5LDggKzE3Myw2IEBACiBzdGF0aWMgc3RydWN0IGJhc2VfZHJpdmVyIHNsaWNfZ2xvYmFsID0geyB7fSwgMCwgMCwgMCwgMSwgTlVMTCwgTlVMTCB9Owogc3RhdGljIGludCBpbnRhZ2dfZGVsYXkgPSAxMDA7CiBzdGF0aWMgdTMyIGR5bmFtaWNfaW50YWdnOwotc3RhdGljIGludCBlcnJvcm1zZzsKLXN0YXRpYyBpbnQgZ29vZG1zZzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmN2X2NvdW50Owogc3RhdGljIHN0cnVjdCBkZW50cnkgKnNsaWNfZGVidWdmczsKIApAQCAtMTY0LDYgKzIwNiwyMSBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2xpY19wY2lfdGJsKTsKIAorI2lmZGVmIEFTU0VSVAorI3VuZGVmIEFTU0VSVAorI2VuZGlmCisKKyNpZm5kZWYgQVNTRVJUCisjZGVmaW5lIEFTU0VSVChhKSBkbyB7CQkJCQkJCVwKKwlpZiAoIShhKSkgewkJCQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAic2xpY29zcyBBU1NFUlQoKSBGYWlsdXJlOiBmdW5jdGlvbiAlcyIJXAorCQkJImxpbmUgJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CQlcCisJCXNsaWNfYXNzZXJ0X2ZhaWwoKTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorI2VuZGlmCisKKwogI2RlZmluZSBTTElDX0dFVF9TTElDX0hBTkRMRShfYWRhcHRlciwgX3BzbGljX2hhbmRsZSkgICAgICAgICAgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHNwaW5fbG9ja19pcnFzYXZlKCZfYWRhcHRlci0+aGFuZGxlX2xvY2subG9jaywgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTk1LDE3ICsyNTIsMTYgQEAKIHN0YXRpYyB2b2lkIHNsaWNfZGVidWdfY2FyZF9jcmVhdGUoc3RydWN0IHNsaWNjYXJkICpjYXJkKTsKIHN0YXRpYyB2b2lkIHNsaWNfZGVidWdfY2FyZF9kZXN0cm95KHN0cnVjdCBzbGljY2FyZCAqY2FyZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGljX3JlZzMyX3dyaXRlKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUsIHVpbnQgZmx1c2gpCitzdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWczMl93cml0ZSh2b2lkIF9faW9tZW0gKnJlZywgdTMyIHZhbHVlLCBib29sIGZsdXNoKQogewogCXdyaXRlbCh2YWx1ZSwgcmVnKTsKIAlpZiAoZmx1c2gpCiAJCW1iKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzbGljX3JlZzY0X3dyaXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAotCQkJICAgICAgIHZvaWQgX19pb21lbSAqcmVnLAotCQkJICAgICAgIHUzMiB2YWx1ZSwKLQkJCSAgICAgICB2b2lkIF9faW9tZW0gKnJlZ2gsIHUzMiBwYWRkcmgsIHVpbnQgZmx1c2gpCitzdGF0aWMgaW5saW5lIHZvaWQgc2xpY19yZWc2NF93cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdm9pZCBfX2lvbWVtICpyZWcsCisJCQkJICAgIHUzMiB2YWx1ZSwgdm9pZCBfX2lvbWVtICpyZWdoLCB1MzIgcGFkZHJoLAorCQkJCSAgICBib29sIGZsdXNoKQogewogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKIAkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOwpAQCAtMjIzLDQzICsyNzksMTIgQEAKIHN0YXRpYyB2b2lkIHNsaWNfaW5pdF9kcml2ZXIodm9pZCkKIHsKIAlpZiAoc2xpY19maXJzdF9pbml0KSB7Ci0JCURCR19NU0coInNsaWNvc3M6ICVzIHNsaWNfZmlyc3RfaW5pdCBzZXQgamlmZmllc1slbHhdXG4iLAotCQkJX19mdW5jX18sIGppZmZpZXMpOwogCQlzbGljX2ZpcnN0X2luaXQgPSAwOwogCQlzcGluX2xvY2tfaW5pdCgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jayk7CiAJCXNsaWNfZGVidWdfaW5pdCgpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgc2xpY19kYmdfbWFjYWRkcnMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JREJHX01TRygiICAoJXMpIGN1cnIgJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCi0JCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMF0sCi0JCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdLCBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSwKLQkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbM10sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzRdLAotCQlhZGFwdGVyLT5jdXJybWFjYWRkcls1XSk7Ci0JREJHX01TRygiICAoJXMpIG1hYyAgJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCi0JCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bWFjYWRkclswXSwKLQkJYWRhcHRlci0+bWFjYWRkclsxXSwgYWRhcHRlci0+bWFjYWRkclsyXSwKLQkJYWRhcHRlci0+bWFjYWRkclszXSwgYWRhcHRlci0+bWFjYWRkcls0XSwgYWRhcHRlci0+bWFjYWRkcls1XSk7Ci0JcmV0dXJuOwotfQotCi0jaWZkZWYgREVCVUdfUkVHSVNURVJfVFJBQ0UKLXN0YXRpYyB2b2lkIHNsaWNfZGJnX3JlZ2lzdGVyX3RyYWNlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLAotCQkJCQlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCi17Ci0JdWludCBpOwotCi0JREJHX0VSUk9SKCJEdW1wIFJlZ2lzdGVyIFdyaXRlIFRyYWNlOiBjdXJyX2l4ID09ICVkXG4iLCBjYXJkLT5kZWJ1Z19peCk7Ci0JZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKLQkJREJHX0VSUk9SKCIlMmQgJWQgJTR4ICV4ICV4XG4iLAotCQkJICBpLCBjYXJkLT5yZWdfdHlwZVtpXSwgY2FyZC0+cmVnX29mZnNldFtpXSwKLQkJCSAgY2FyZC0+cmVnX3ZhbHVlW2ldLCBjYXJkLT5yZWdfdmFsdWVoW2ldKTsKLQl9Ci19Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgc2xpY19pbml0X2FkYXB0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX3RibF9lbnRyeSwKQEAgLTI2OCw5ICsyOTMsNyBAQAogCXVzaG9ydCBpbmRleDsKIAlzdHJ1Y3Qgc2xpY19oYW5kbGUgKnBzbGljX2hhbmRsZTsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KG5ldGRldik7Ci0vKgotICAgIERCR19NU0coInNsaWNvc3M6ICVzICglcylcbiAgICBuZXRkZXYgWyVwXVxuICAgIGFkYXB0ZXJbJXBdXG4gICAgIgotCSAgICAicGNpZGV2IFslcF1cbiIsIF9fZnVuY19fLCBuZXRkZXYtPm5hbWUsIG5ldGRldiwgYWRhcHRlciwgcGNpZGV2KTsqLworCiAvKglhZGFwdGVyLT5wY2lkZXYgPSBwY2lkZXY7Ki8KIAlhZGFwdGVyLT52ZW5kaWQgPSBwY2lfdGJsX2VudHJ5LT52ZW5kb3I7CiAJYWRhcHRlci0+ZGV2aWQgPSBwY2lfdGJsX2VudHJ5LT5kZXZpY2U7CkBAIC0zMTAsMTkgKzMzMywxMSBAQAogCQlwc2xpY19oYW5kbGUtPm5leHQgPSBhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXM7CiAJCWFkYXB0ZXItPnBmcmVlX3NsaWNfaGFuZGxlcyA9IHBzbGljX2hhbmRsZTsKIAl9Ci0vKgotICAgIERCR19NU0coIi4uLi4uLi4uLlxuaXhbJWRdIHBoYW5kbGVbJXBdIHBmcmVlWyVwXSBuZXh0WyVwXVxuIiwKLQlpbmRleCwgcHNsaWNfaGFuZGxlLCBhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXMsIHBzbGljX2hhbmRsZS0+bmV4dCk7Ki8KIAlhZGFwdGVyLT5wc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKikKIAkJCQkJcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAogCQkJCQlzaXplb2Yoc3RydWN0IHNsaWNfc2htZW0pLAogCQkJCQkmYWRhcHRlci0+CiAJCQkJCXBoeXNfc2htZW0pOwotLyoKLSAgICAgIERCR19NU0coInNsaWNvc3M6ICVzICglcylcbiAgIHBzaG1lbSAgICBbJXBdXG4gICBwaHlzX3NobWVtWyVwXVxuIlwKLQkJInNsaWNfcmVncyBbJXBdXG4iLCBfX2Z1bmNfXywgbmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5wc2htZW0sCi0JCSh2b2lkICopYWRhcHRlci0+cGh5c19zaG1lbSwgYWRhcHRlci0+c2xpY19yZWdzKTsKLSovCiAJQVNTRVJUKGFkYXB0ZXItPnBzaG1lbSk7CiAKIAltZW1zZXQoYWRhcHRlci0+cHNobWVtLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfc2htZW0pKTsKQEAgLTMzNSw3ICszNTAsNyBAQAogewogCXN0YXRpYyBpbnQgY2FyZHNfZm91bmQ7CiAJc3RhdGljIGludCBkaWRfdmVyc2lvbjsKLQlpbnQgZXJyOworCWludCBlcnIgPSAtRU5PREVWOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXI7CiAJdm9pZCBfX2lvbWVtICptZW1tYXBwZWRfaW9hZGRyID0gTlVMTDsKQEAgLTM0NCw1NCArMzU5LDM2IEBACiAJdWxvbmcgbW1pb19sZW4gPSAwOwogCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IE5VTEw7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAyLjYgVkVSU0lPTiBFTlRFUiBqaWZmaWVzWyVseF0gY3B1ICVkXG4iLAotCQlfX2Z1bmNfXywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQogCXNsaWNfZ2xvYmFsLmR5bmFtaWNfaW50YWdnID0gZHluYW1pY19pbnRhZ2c7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2lkZXYpOwogCi0JREJHX01TRygiQ2FsbCBwY2lfZW5hYmxlX2RldmljZSglcCkgIHN0YXR1c1sleF1cbiIsIHBjaWRldiwgZXJyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJaWYgKHNsaWNfZGVidWcgPiAwICYmIGRpZF92ZXJzaW9uKysgPT0gMCkgewotCQlwcmludGsoc2xpY19iYW5uZXIpOwotCQlwcmludGsoc2xpY19wcm9jX3ZlcnNpb24pOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIHNsaWNfYmFubmVyKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCBzbGljX3Byb2NfdmVyc2lvbik7CiAJfQogCiAJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwY2lkZXYsIERNQV82NEJJVF9NQVNLKTsKLQlpZiAoIWVycikgewotCQlEQkdfTVNHKCJwY2lfc2V0X2RtYV9tYXNrKERNQV82NEJJVF9NQVNLKSBzdWNjZXNzZnVsXG4iKTsKLQl9IGVsc2UgeworCWlmIChlcnIpIHsKIAkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwY2lkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQkJaWYgKGVycikgewotCQkJREJHX01TRwotCQkJICAgICgiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZyAgZXJyWyV4XVxuIiwKLQkJCSAgICAgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQkJREJHX01TRygicGNpX3NldF9kbWFfbWFzayhETUFfMzJCSVRfTUFTSykgc3VjY2Vzc2Z1bFxuIik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9wY2k7CiAJfQogCi0JREJHX01TRygiQ2FsbCBwY2lfcmVxdWVzdF9yZWdpb25zXG4iKTsKLQogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpZGV2LCBEUlZfTkFNRSk7Ci0JaWYgKGVycikgewotCQlEQkdfTVNHKCJwY2lfcmVxdWVzdF9yZWdpb25zIEZBSUxFRCBlcnJbJXhdXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9wY2k7CiAKLQlEQkdfTVNHKCJjYWxsIHBjaV9zZXRfbWFzdGVyXG4iKTsKIAlwY2lfc2V0X21hc3RlcihwY2lkZXYpOwogCi0JREJHX01TRygiY2FsbCBhbGxvY19ldGhlcmRldlxuIik7CiAJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBhZGFwdGVyKSk7CiAJaWYgKCFuZXRkZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X2V4aXRfc2xpY19wcm9iZTsKIAl9Ci0JREJHX01TRygiYWxsb2NfZXRoZXJkZXYgZm9yIHNsaWMgbmV0ZGV2WyVwXVxuIiwgbmV0ZGV2KTsKIAogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBjaWRldi0+ZGV2KTsKIApAQCAtNDAzLDI0ICs0MDAsMTUgQEAKIAltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CiAJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiBjYWxsIGlvcmVtYXAobW1pb19zdGFydFslbHhdLCBtbWlvX2xlblslbHhdKVxuIiwKLQkJbW1pb19zdGFydCwgbW1pb19sZW4pOwogCi0vKiAgbWVtbWFwcGVkX2lvYWRkciA9ICAodTMyKWlvcmVtYXBfbm9jYWNoZShtbWlvX3N0YXJ0LCBtbWlvX2xlbik7Ki8KKy8qCW1lbW1hcHBlZF9pb2FkZHIgPSAgKHUzMilpb3JlbWFwX25vY2FjaGUobW1pb19zdGFydCwgbW1pb19sZW4pOyovCiAJbWVtbWFwcGVkX2lvYWRkciA9IGlvcmVtYXAobW1pb19zdGFydCwgbW1pb19sZW4pOwotCURCR19NU0coInNsaWNvc3M6ICVzIE1FTU1BUFBFRF9JT0FERFIgWyVwXVxuIiwgX19mdW5jX18sCi0JCW1lbW1hcHBlZF9pb2FkZHIpOwogCWlmICghbWVtbWFwcGVkX2lvYWRkcikgewotCQlEQkdfRVJST1IoIiVzIGNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCi0JCQkgIF9fZnVuY19fLCBtbWlvX2xlbiwgbW1pb19zdGFydCk7Ci0JCWdvdG8gZXJyX291dF9mcmVlX21taW9fcmVnaW9uOworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgImNhbm5vdCByZW1hcCBNTUlPIHJlZ2lvbiAlbHggQCAlbHhcbiIsCisJCQltbWlvX2xlbiwgbW1pb19zdGFydCk7CisJCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKIAl9CiAKLQlEQkdfTVNHCi0JICAgICgic2xpY29zczogJXMgZm91bmQgQWxhY3JpdGVjaCBTTElDT1NTIFBDSSwgTU1JTyBhdCAlcCwgIlwKLQkgICAgInN0YXJ0WyVseF0gbGVuWyVseF0sIElSUSAlZC5cbiIsCi0JICAgICBfX2Z1bmNfXywgbWVtbWFwcGVkX2lvYWRkciwgbW1pb19zdGFydCwgbW1pb19sZW4sIHBjaWRldi0+aXJxKTsKLQogCXNsaWNfY29uZmlnX3BjaShwY2lkZXYpOwogCiAJc2xpY19pbml0X2RyaXZlcigpOwpAQCAtNDMwLDcgKzQxOCw3IEBACiAKIAlzdGF0dXMgPSBzbGljX2NhcmRfbG9jYXRlKGFkYXB0ZXIpOwogCWlmIChzdGF0dXMpIHsKLQkJREJHX0VSUk9SKCIlcyBjYW5ub3QgbG9jYXRlIGNhcmRcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJjYW5ub3QgbG9jYXRlIGNhcmRcbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKIAl9CiAKQEAgLTQ0MSwyMiArNDI5LDEzIEBACiAJCWFkYXB0ZXItPmFsbG9jYXRlZCA9IDE7CiAJfQogCi0JREJHX01TRygic2xpY29zczogJXMgICAgY2FyZDogICAgICAgICAgICAgJXBcbiIsIF9fZnVuY19fLAotCQlhZGFwdGVyLT5jYXJkKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAgICBjYXJkLT5hZGFwdGVyWyVkXSA9PSBbJXBdXG4iLCBfX2Z1bmNfXywKLQkJKHVpbnQpIGFkYXB0ZXItPnBvcnQsIGFkYXB0ZXIpOwotCURCR19NU0coInNsaWNvc3M6ICVzICAgIGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCBbJWRdXG4iLCBfX2Z1bmNfXywKLQkJY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAgICBjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQgWyVkXVxuIiwgX19mdW5jX18sCi0JCWNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCk7Ci0KIAlzdGF0dXMgPSBzbGljX2NhcmRfaW5pdChjYXJkLCBhZGFwdGVyKTsKIAogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKIAkJY2FyZC0+c3RhdGUgPSBDQVJEX0ZBSUw7CiAJCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfRkFJTDsKIAkJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19ET1dOOwotCQlEQkdfRVJST1IoInNsaWNfY2FyZF9pbml0IEZBSUxFRCBzdGF0dXNbJXhdXG4iLCBzdGF0dXMpOworCQlkZXZfZXJyKCZwY2lkZXYtPmRldiwgIkZBSUxFRCBzdGF0dXNbJXhdXG4iLCBzdGF0dXMpOwogCX0gZWxzZSB7CiAJCXNsaWNfYWRhcHRlcl9zZXRfaHdhZGRyKGFkYXB0ZXIpOwogCX0KQEAgLTQ2OCw5ICs0NDcsNyBAQAogCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gc2xpY194bWl0X3N0YXJ0OwogCW5ldGRldi0+ZG9faW9jdGwgPSBzbGljX2lvY3RsOwogCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gc2xpY19tYWNfc2V0X2FkZHJlc3M7Ci0jaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAogCW5ldGRldi0+Z2V0X3N0YXRzID0gc2xpY19nZXRfc3RhdHM7Ci0jZW5kaWYKIAluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNsaWNfbWNhc3Rfc2V0X2xpc3Q7CiAKIAlzbGljX2RlYnVnX2FkYXB0ZXJfY3JlYXRlKGFkYXB0ZXIpOwpAQCAtNDc4LDM1ICs0NTUsMjUgQEAKIAlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCURCR19FUlJPUigiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLlxuIik7CiAJCWdvdG8gZXJyX291dF91bm1hcDsKIAl9CiAKLQlEQkdfTVNHCi0JICAgICgic2xpY29zczogYWRkciAweCVseCwgaXJxICVkLCBNQUMgYWRkciAiXAotCSAgICAgIiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYXG4iLAotCSAgICAgbW1pb19zdGFydCwgLypwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKSwgKi8gcGNpZGV2LT5pcnEsCi0JICAgICBuZXRkZXYtPmRldl9hZGRyWzBdLCBuZXRkZXYtPmRldl9hZGRyWzFdLCBuZXRkZXYtPmRldl9hZGRyWzJdLAotCSAgICAgbmV0ZGV2LT5kZXZfYWRkclszXSwgbmV0ZGV2LT5kZXZfYWRkcls0XSwgbmV0ZGV2LT5kZXZfYWRkcls1XSk7Ci0KIAljYXJkc19mb3VuZCsrOwotCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgc3RhdHVzWyV4XSBqaWZmaWVzWyVseF0gY3B1ICVkXG4iLAotCQlfX2Z1bmNfXywgc3RhdHVzLCBqaWZmaWVzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJcmV0dXJuIHN0YXR1czsKIAogZXJyX291dF91bm1hcDoKIAlpb3VubWFwKG1lbW1hcHBlZF9pb2FkZHIpOwotCiBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb246CiAJcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKLQorZXJyX291dF9mcmVlX25ldGRldjoKKwlmcmVlX25ldGRldihuZXRkZXYpOwogZXJyX291dF9leGl0X3NsaWNfcHJvYmU6CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lkZXYpOwotCURCR19FUlJPUigiJXMgRVhJVCBqaWZmaWVzWyVseF0gY3B1ICVkXG4iLCBfX2Z1bmNfXywgamlmZmllcywKLQkJICBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0JcmV0dXJuIC1FTk9ERVY7CitlcnJfb3V0X2Rpc2FibGVfcGNpOgorCXBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgc2xpY19lbnRyeV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01MTgsMTYgKzQ4NSw2IEBACiAKIAlBU1NFUlQoYWRhcHRlcik7CiAJQVNTRVJUKGNhcmQpOwotCURCR19NU0cKLQkgICAgKCJzbGljb3NzOiAlcyBhZGFwdGVyLT5hY3RpdmF0ZWRbJWRdIGNhcmQtPmFkYXB0ZXJzWyV4XSAiXAotCSAgICAgImFsbG9jZFsleF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5hY3RpdmF0ZWQsCi0JICAgICBjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQsCi0JICAgICBjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpOwotCURCR19NU0cKLQkgICAgKCJzbGljb3NzOiAlcyAoJXMpOiBbamlmZmllc1slbHhdIGNwdSAlZF0gZGV2WyVwXSBhZGFwdFslcF0gIlwKLQkgICAgICJwb3J0WyVkXSBjYXJkWyVwXVxuIiwKLQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGppZmZpZXMsIHNtcF9wcm9jZXNzb3JfaWQoKSwKLQkgICAgIGFkYXB0ZXItPm5ldGRldiwgYWRhcHRlciwgYWRhcHRlci0+cG9ydCwgY2FyZCk7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CiAKQEAgLTU1NCwyOSArNTExLDE0IEBACiAJCX0KIAkJcmV0dXJuIHN0YXR1czsKIAl9Ci0JREJHX01TRygic2xpY29zczogJXMgc2V0IGNhcmQtPm1hc3RlclslcF0gYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLAotCQljYXJkLT5tYXN0ZXIsIGFkYXB0ZXIpOwogCWlmICghY2FyZC0+bWFzdGVyKQogCQljYXJkLT5tYXN0ZXIgPSBhZGFwdGVyOwotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0JaWYgKCEoY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nKSkKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+ZHVtcF93cSk7Ci0jZW5kaWYKIAogCWlmIChsb2NrZWQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKIAkJCQkJc2xpY19nbG9iYWwuZHJpdmVyX2xvY2suZmxhZ3MpOwogCQlsb2NrZWQgPSAwOwogCX0KLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotCWlmICghKGNhcmQtPmR1bXB0aHJlYWRfcnVubmluZykpIHsKLQkJREJHX01TRygiYXR0ZW1wdCB0byBpbml0aWFsaXplIGR1bXAgdGhyZWFkXG4iKTsKLQkJc3RhdHVzID0gc2xpY19pbml0X2R1bXBfdGhyZWFkKGNhcmQpOwotCQkvKgotCQlFdmVuIGlmIHRoZSBkdW1wIHRocmVhZCBmYWlscywgd2Ugd2lsbCBjb250aW51ZSBhdCB0aGlzIHBvaW50Ci0JCSovCi0JfQotI2VuZGlmCiAKIAlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiB9CkBAIC01OTEsMjIgKzUzMywxNSBAQAogCXN0cnVjdCBtY2FzdF9hZGRyZXNzICptY2FkZHIsICptbGlzdDsKIAogCUFTU0VSVChhZGFwdGVyKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBkZXZbJXBdIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgZGV2LAotCQlhZGFwdGVyKTsKIAlzbGljX2FkYXB0ZXJfZnJlZXJlc291cmNlcyhhZGFwdGVyKTsKIAlzbGljX3VubWFwX21taW9fc3BhY2UoYWRhcHRlcik7Ci0JREJHX01TRygic2xpY29zczogJXMgdW5yZWdpc3Rlcl9uZXRkZXZcbiIsIF9fZnVuY19fKTsKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCiAJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOwogCW1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOwogCi0JREJHX01TRygic2xpY29zczogJXMgcmVsX3JlZ2lvbigwKSBzdGFydFsleF0gbGVuWyV4XVxuIiwgX19mdW5jX18sCi0JCW1taW9fc3RhcnQsIG1taW9fbGVuKTsKIAlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOwogCi0JREJHX01TRygic2xpY29zczogJXMgaW91bm1hcCBkZXYtPmJhc2VfYWRkclsleF1cbiIsIF9fZnVuY19fLAotCQkodWludCkgZGV2LT5iYXNlX2FkZHIpOwogCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyKTsKIAkvKiBmcmVlIG11bHRpY2FzdCBhZGRyZXNzZXMgKi8KIAltbGlzdCA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7CkBAIC02MjAsMTAgKzU1NSw2IEBACiAJQVNTRVJUKGNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCk7CiAJY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkLS07CiAJYWRhcHRlci0+YWxsb2NhdGVkID0gMDsKLQlEQkdfTVNHCi0JICAgICgic2xpY29zczogJXMgaW5pdFsleF0gYWxsb2NbJXhdIGNhcmRbJXBdIGFkYXB0ZXJbJXBdXG4iLAotCSAgICAgX19mdW5jX18sIGNhcmQtPmFkYXB0ZXJzX2FjdGl2YXRlZCwgY2FyZC0+YWRhcHRlcnNfYWxsb2NhdGVkLAotCSAgICAgY2FyZCwgYWRhcHRlcik7CiAJaWYgKCFjYXJkLT5hZGFwdGVyc19hbGxvY2F0ZWQpIHsKIAkJc3RydWN0IHNsaWNjYXJkICpjdXJyX2NhcmQgPSBzbGljX2dsb2JhbC5zbGljX2NhcmQ7CiAJCWlmIChjdXJyX2NhcmQgPT0gY2FyZCkgewpAQCAtNjM4LDEwICs1NjksOCBAQAogCQlzbGljX2dsb2JhbC5udW1fc2xpY19jYXJkcy0tOwogCQlzbGljX2NhcmRfY2xlYW51cChjYXJkKTsKIAl9Ci0JREJHX01TRygic2xpY29zczogJXMgZGVhbGxvY2F0ZSBkZXZpY2VcbiIsIF9fZnVuY19fKTsKIAlrZnJlZShkZXYpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpZGV2KTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUXG4iLCBfX2Z1bmNfXyk7CiB9CiAKIHN0YXRpYyBpbnQgc2xpY19lbnRyeV9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC02NTMsNzUgKzU4MiwzNSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5sb2NrLAogCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKIAlBU1NFUlQoY2FyZCk7Ci0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBFTlRFUlxuIiwgX19mdW5jX18sIGRldi0+bmFtZSk7Ci0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBhY3R2dGRbJWRdIGFsbG9jWyVkXSBzdGF0ZVsleF0gYWRhcHRbJXBdXG4iLAotCQlfX2Z1bmNfXywgZGV2LT5uYW1lLCBjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQsCi0JCWNhcmQtPmFkYXB0ZXJzX2FsbG9jYXRlZCwgY2FyZC0+c3RhdGUsIGFkYXB0ZXIpOwotCXNsaWNfaWZfc3RvcF9xdWV1ZShhZGFwdGVyKTsKKwluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CiAJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9ET1dOOwogCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKIAlhZGFwdGVyLT51cHJfbGlzdCA9IE5VTEw7CiAJYWRhcHRlci0+dXByX2J1c3kgPSAwOwogCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSAwOwotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgc2V0IGFkYXB0ZXJbJXBdIHN0YXRlIHRvIEFEQVBUX0RPV04oJWQpXG4iLAotCQlfX2Z1bmNfXywgZGV2LT5uYW1lLCBhZGFwdGVyLCBhZGFwdGVyLT5zdGF0ZSk7CiAJQVNTRVJUKGNhcmQtPmFkYXB0ZXJbYWRhcHRlci0+Y2FyZGluZGV4XSA9PSBhZGFwdGVyKTsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PRkYsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09GRiwgRkxVU0gpOwogCWFkYXB0ZXItPmFsbF9yZWdfd3JpdGVzKys7CiAJYWRhcHRlci0+aWNyX3JlZ193cml0ZXMrKzsKIAlzbGljX2NvbmZpZ19jbGVhcihhZGFwdGVyKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIGRldlslcF0gYWRhcHRbJXBdIGNhcmRbJXBdXG4iLAotCQlfX2Z1bmNfXywgZGV2LT5uYW1lLCBkZXYsIGFkYXB0ZXIsIGNhcmQpOwogCWlmIChhZGFwdGVyLT5hY3RpdmF0ZWQpIHsKIAkJY2FyZC0+YWRhcHRlcnNfYWN0aXZhdGVkLS07CiAJCXNsaWNfZ2xvYmFsLm51bV9zbGljX3BvcnRzX2FjdGl2ZS0tOwogCQlhZGFwdGVyLT5hY3RpdmF0ZWQgPSAwOwogCX0KICNpZmRlZiBBVVRPTUFUSUNfUkVTRVQKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3Jlc2V0X2lmYWNlLCAwLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3Jlc2V0X2lmYWNlLCAwLCBGTFVTSCk7CiAjZW5kaWYKIAkvKgotCSAqICBSZXNldCB0aGUgYWRhcHRlcidzIHJzcCwgY21kLCBhbmQgcmN2IHF1ZXVlcworCSAqICBSZXNldCB0aGUgYWRhcHRlcidzIGNtZCBxdWV1ZXMKIAkgKi8KIAlzbGljX2NtZHFfcmVzZXQoYWRhcHRlcik7Ci0Jc2xpY19yc3BxdWV1ZV9yZXNldChhZGFwdGVyKTsKLQlzbGljX3JjdnF1ZXVlX3Jlc2V0KGFkYXB0ZXIpOwogCiAjaWZkZWYgQVVUT01BVElDX1JFU0VUCi0JaWYgKCFjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQpIHsKLQotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0JCWlmIChjYXJkLT5kdW1wdGhyZWFkX3J1bm5pbmcpIHsKLQkJCXVpbnQgc3RhdHVzOwotCQkJREJHX01TRygiYXR0ZW1wdCB0byB0ZXJtaW5hdGUgZHVtcCB0aHJlYWQgcGlkWyV4XVxuIiwKLQkJCQljYXJkLT5kdW1wX3Rhc2tfaWQpOwotCQkJc3RhdHVzID0ga2lsbF9wcm9jKGNhcmQtPmR1bXBfdGFza19pZC0+cGlkLCBTSUdLSUxMLCAxKTsKLQotCQkJaWYgKCFzdGF0dXMpIHsKLQkJCQlpbnQgY291bnQgPSAxMCAqIDEwMDsKLQkJCQl3aGlsZSAoY2FyZC0+ZHVtcHRocmVhZF9ydW5uaW5nICYmIC0tY291bnQpIHsKLQkJCQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JCQkJCXNjaGVkdWxlX3RpbWVvdXQoMSk7Ci0JCQkJfQotCi0JCQkJaWYgKCFjb3VudCkgewotCQkJCQlEQkdfTVNHCi0JCQkJCSAgICAoInNsaWNtb24gdGhyZWFkIGNsZWFudXAgRkFJTEVEIFwKLQkJCQkJICAgICBwaWRbJXhdXG4iLAotCQkJCQkgICAgIGNhcmQtPmR1bXBfdGFza19pZC0+cGlkKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIGluaXRpYXRlIENBUkRfSEFMVFxuIiwgX19mdW5jX18sCi0JCQlkZXYtPm5hbWUpOwotCisJaWYgKCFjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQpCiAJCXNsaWNfY2FyZF9pbml0KGNhcmQsIGFkYXB0ZXIpOwotCX0KICNlbmRpZgogCi0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBFWElUXG4iLCBfX2Z1bmNfXywgZGV2LT5uYW1lKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUXG4iLCBfX2Z1bmNfXyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xpY19nbG9iYWwuZHJpdmVyX2xvY2subG9jaywKIAkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwpAQCAtNzI5LDY5ICs2MTgsMjcgQEAKIAogc3RhdGljIGludCBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiB7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBldGh0b29sX2NtZCBlZGF0YTsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKwl1MzIgZGF0YVs3XTsKKwl1MzIgaW50YWdnOworCiAJQVNTRVJUKHJxKTsKLS8qCi0gICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBjbWRbJXhdIHJxWyVwXSBkZXZbJXBdXG4iLCBfX2Z1bmNfXywgY21kLCBycSwgZGV2KTsKLSovCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NTTElDU0VUSU5UQUdHOgotCQl7Ci0JCQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKQotCQkJCQkJCW5ldGRldl9wcml2KGRldik7Ci0JCQl1MzIgZGF0YVs3XTsKLQkJCXUzMiBpbnRhZ2c7Ci0KLQkJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkgewotCQkJCURCR19FUlJPUgotCQkJCSAgICAoImNvcHlfZnJvbV91c2VyIEZBSUxFRCBnZXR0aW5nIGluaXRpYWwgXAotCQkJCSAgICAgcGFyYW1zXG4iKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQkJCWludGFnZyA9IGRhdGFbMF07Ci0JCQlwcmludGsoS0VSTl9FTUVSRwotCQkJICAgICAgICIlczogc2V0IGludGVycnVwdCBhZ2dyZWdhdGlvbiB0byAlZFxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywgaW50YWdnKTsKLQkJCXNsaWNfaW50YWdnX3NldChhZGFwdGVyLCBpbnRhZ2cpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLSNpZmRlZiBTTElDX1VTRVJfUkVRVUVTVF9EVU1QX0VOQUJMRUQKLQljYXNlIFNJT0NTTElDRFVNUENBUkQ6Ci0JCXsKLQkJCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkJCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKLQotCQkJQVNTRVJUKGFkYXB0ZXIpOwotCQkJQVNTRVJUKGFkYXB0ZXItPmNhcmQpCi0JCQljYXJkID0gYWRhcHRlci0+Y2FyZDsKLQotCQkJREJHX0lPQ1RMKCJzbGljX2lvY3RsICBTSU9DU0xJQ19EVU1QX0NBUkRcbiIpOwotCi0JCQlpZiAoY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPT0gU0xJQ19EVU1QX0RPTkUpIHsKLQkJCQlwcmludGsoU0xJQ0xFVkVMCi0JCQkJICAgICAgICJTTElDIENhcmQgZHVtcCB0byBiZSBvdmVyd3JpdHRlblxuIik7Ci0JCQkJY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPSBTTElDX0RVTVBfUkVRVUVTVEVEOwotCQkJfSBlbHNlIGlmICgoY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPT0gU0xJQ19EVU1QX1JFUVVFU1RFRCkKLQkJCQkgICB8fCAoY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPT0KLQkJCQkgICAgICAgU0xJQ19EVU1QX0lOX1BST0dSRVNTKSkgewotCQkJCXByaW50ayhTTElDTEVWRUwKLQkJCQkgICAgICAgIlNMSUMgQ2FyZCBkdW1wIFJlcXVlc3RlZCBidXQgYWxyZWFkeSBcCi0JCQkJCWluIHByb2dyZXNzLi4uIGlnbm9yZVxuIik7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhTTElDTEVWRUwKLQkJCQkgICAgICAgIlNMSUMgQ2FyZCAjJWQgRHVtcCBSZXF1ZXN0ZWRcbiIsCi0JCQkJICAgICAgIGNhcmQtPmNhcmRudW0pOwotCQkJCWNhcmQtPmR1bXBfcmVxdWVzdGVkID0gU0xJQ19EVU1QX1JFUVVFU1RFRDsKLQkJCX0KLQkJCXJldHVybiAwOwotCQl9Ci0jZW5kaWYKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIHJxLT5pZnJfZGF0YSwgMjgpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWludGFnZyA9IGRhdGFbMF07CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IHNldCBpbnRlcnJ1cHQgYWdncmVnYXRpb24gdG8gJWRcbiIsCisJCQlfX2Z1bmNfXywgaW50YWdnKTsKKwkJc2xpY19pbnRhZ2dfc2V0KGFkYXB0ZXIsIGludGFnZyk7CisJCXJldHVybiAwOwogCiAjaWZkZWYgU0xJQ19UUkFDRV9EVU1QX0VOQUJMRUQKIAljYXNlIFNJT0NTTElDVFJBQ0VEVU1QOgogCQl7Ci0JCQl1bG9uZyBkYXRhWzddOwotCQkJdWxvbmcgdmFsdWU7Ci0KKwkJCXUzMiB2YWx1ZTsKIAkJCURCR19JT0NUTCgic2xpY19pb2N0bCAgU0lPQ1NMSUNfVFJBQ0VfRFVNUFxuIik7CiAKIAkJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkgewpAQCAtODI0LDEwNCArNjcxLDc2IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogI2VuZGlmCi0jaWYgU0xJQ19FVEhUT09MX1NVUFBPUlQKIAljYXNlIFNJT0NFVEhUT09MOgotCQl7Ci0JCQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKQotCQkJCQkJCW5ldGRldl9wcml2KGRldik7Ci0JCQlzdHJ1Y3QgZXRodG9vbF9jbWQgZGF0YTsKLQkJCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOworCQlBU1NFUlQoYWRhcHRlcik7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZWNtZCwgcnEtPmlmcl9kYXRhLCBzaXplb2YoZWNtZCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJCUFTU0VSVChhZGFwdGVyKTsKLS8qICAgICAgICAgICAgICAgICAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIFNJT0NFVEhUT09MXG4iLCBfX2Z1bmNfXyk7ICovCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoJmVjbWQsIHJxLT5pZnJfZGF0YSwgc2l6ZW9mKGVjbWQpKSkKKwkJaWYgKGVjbWQuY21kID09IEVUSFRPT0xfR1NFVCkgeworCQkJZWRhdGEuc3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJCQkgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKKwkJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAorCQkJCQkgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CisJCQkJCSAgIFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX01JSSk7CisJCQllZGF0YS5wb3J0ID0gUE9SVF9NSUk7CisJCQllZGF0YS50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CisJCQllZGF0YS5waHlfYWRkcmVzcyA9IDA7CisJCQlpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTAwTUIpCisJCQkJZWRhdGEuc3BlZWQgPSBTUEVFRF8xMDA7CisJCQllbHNlIGlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xME1CKQorCQkJCWVkYXRhLnNwZWVkID0gU1BFRURfMTA7CisJCQllbHNlCisJCQkJZWRhdGEuc3BlZWQgPSAwOworCisJCQlpZiAoYWRhcHRlci0+bGlua2R1cGxleCA9PSBMSU5LX0ZVTExEKQorCQkJCWVkYXRhLmR1cGxleCA9IERVUExFWF9GVUxMOworCQkJZWxzZQorCQkJCWVkYXRhLmR1cGxleCA9IERVUExFWF9IQUxGOworCisJCQllZGF0YS5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CisJCQllZGF0YS5tYXh0eHBrdCA9IDE7CisJCQllZGF0YS5tYXhyeHBrdCA9IDE7CisJCQlpZiAoY29weV90b191c2VyKHJxLT5pZnJfZGF0YSwgJmVkYXRhLCBzaXplb2YoZWRhdGEpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQkJaWYgKGVjbWQuY21kID09IEVUSFRPT0xfR1NFVCkgewotCQkJCWRhdGEuc3VwcG9ydGVkID0KLQkJCQkgICAgKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAotCQkJCSAgICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8Ci0JCQkJICAgICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8Ci0JCQkJICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8Ci0JCQkJICAgICBTVVBQT1JURURfQXV0b25lZyB8IFNVUFBPUlRFRF9NSUkpOwotCQkJCWRhdGEucG9ydCA9IFBPUlRfTUlJOwotCQkJCWRhdGEudHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwotCQkJCWRhdGEucGh5X2FkZHJlc3MgPSAwOwotCQkJCWlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xMDBNQikKLQkJCQkJZGF0YS5zcGVlZCA9IFNQRUVEXzEwMDsKLQkJCQllbHNlIGlmIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gTElOS18xME1CKQotCQkJCQlkYXRhLnNwZWVkID0gU1BFRURfMTA7CisJCX0gZWxzZSBpZiAoZWNtZC5jbWQgPT0gRVRIVE9PTF9TU0VUKSB7CisJCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQkJcmV0dXJuIC1FUEVSTTsKKworCQkJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwME1CKQorCQkJCWVkYXRhLnNwZWVkID0gU1BFRURfMTAwOworCQkJZWxzZSBpZiAoYWRhcHRlci0+bGlua3NwZWVkID09IExJTktfMTBNQikKKwkJCQllZGF0YS5zcGVlZCA9IFNQRUVEXzEwOworCQkJZWxzZQorCQkJCWVkYXRhLnNwZWVkID0gMDsKKworCQkJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKKwkJCQllZGF0YS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwkJCWVsc2UKKwkJCQllZGF0YS5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKworCQkJZWRhdGEuYXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCQkJZWRhdGEubWF4dHhwa3QgPSAxOworCQkJZWRhdGEubWF4cnhwa3QgPSAxOworCQkJaWYgKChlY21kLnNwZWVkICE9IGVkYXRhLnNwZWVkKSB8fAorCQkJICAgIChlY21kLmR1cGxleCAhPSBlZGF0YS5kdXBsZXgpKSB7CisJCQkJdTMyIHNwZWVkOworCQkJCXUzMiBkdXBsZXg7CisKKwkJCQlpZiAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMCkKKwkJCQkJc3BlZWQgPSAwOwogCQkJCWVsc2UKLQkJCQkJZGF0YS5zcGVlZCA9IDA7Ci0KLQkJCQlpZiAoYWRhcHRlci0+bGlua2R1cGxleCA9PSBMSU5LX0ZVTExEKQotCQkJCQlkYXRhLmR1cGxleCA9IERVUExFWF9GVUxMOworCQkJCQlzcGVlZCA9IFBDUl9TUEVFRF8xMDA7CisJCQkJaWYgKGVjbWQuZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJCQlkdXBsZXggPSBQQ1JfRFVQTEVYX0ZVTEw7CiAJCQkJZWxzZQotCQkJCQlkYXRhLmR1cGxleCA9IERVUExFWF9IQUxGOwotCi0JCQkJZGF0YS5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCQkJZGF0YS5tYXh0eHBrdCA9IDE7Ci0JCQkJZGF0YS5tYXhyeHBrdCA9IDE7Ci0JCQkJaWYgKGNvcHlfdG9fdXNlcgotCQkJCSAgICAocnEtPmlmcl9kYXRhLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkJCX0gZWxzZSBpZiAoZWNtZC5jbWQgPT0gRVRIVE9PTF9TU0VUKSB7Ci0JCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJCQlyZXR1cm4gLUVQRVJNOwotCi0JCQkJaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwME1CKQotCQkJCQlkYXRhLnNwZWVkID0gU1BFRURfMTAwOwotCQkJCWVsc2UgaWYgKGFkYXB0ZXItPmxpbmtzcGVlZCA9PSBMSU5LXzEwTUIpCi0JCQkJCWRhdGEuc3BlZWQgPSBTUEVFRF8xMDsKLQkJCQllbHNlCi0JCQkJCWRhdGEuc3BlZWQgPSAwOwotCi0JCQkJaWYgKGFkYXB0ZXItPmxpbmtkdXBsZXggPT0gTElOS19GVUxMRCkKLQkJCQkJZGF0YS5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJCQllbHNlCi0JCQkJCWRhdGEuZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0KLQkJCQlkYXRhLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKLQkJCQlkYXRhLm1heHR4cGt0ID0gMTsKLQkJCQlkYXRhLm1heHJ4cGt0ID0gMTsKLQkJCQlpZiAoKGVjbWQuc3BlZWQgIT0gZGF0YS5zcGVlZCkgfHwKLQkJCQkgICAgKGVjbWQuZHVwbGV4ICE9IGRhdGEuZHVwbGV4KSkgewotCQkJCQl1MzIgc3BlZWQ7Ci0JCQkJCXUzMiBkdXBsZXg7Ci0KLQkJCQkJaWYgKGVjbWQuc3BlZWQgPT0gU1BFRURfMTApIHsKLQkJCQkJCXNwZWVkID0gMDsKLQkJCQkJCVNMSUNfRElTUExBWQotCQkJCQkJICAgICgiJXM6IHNsaWMgRVRIVE9PTCBzZXQgXAotCQkJCQkJICAgICBsaW5rIHNwZWVkPT0xME1CIiwKLQkJCQkJCSAgICAgZGV2LT5uYW1lKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXNwZWVkID0gUENSX1NQRUVEXzEwMDsKLQkJCQkJCVNMSUNfRElTUExBWQotCQkJCQkJICAgICgiJXM6IHNsaWMgRVRIVE9PTCBzZXQgXAotCQkJCQkJICAgIGxpbmsgc3BlZWQ9PTEwME1CIiwKLQkJCQkJCSAgICAgZGV2LT5uYW1lKTsKLQkJCQkJfQotCQkJCQlpZiAoZWNtZC5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIHsKLQkJCQkJCWR1cGxleCA9IFBDUl9EVVBMRVhfRlVMTDsKLQkJCQkJCVNMSUNfRElTUExBWQotCQkJCQkJICAgICgiOiBkdXBsZXg9PUZVTExcbiIpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJZHVwbGV4ID0gMDsKLQkJCQkJCVNMSUNfRElTUExBWQotCQkJCQkJICAgICgiOiBkdXBsZXg9PUhBTEZcbiIpOwotCQkJCQl9Ci0JCQkJCXNsaWNfbGlua19jb25maWcoYWRhcHRlciwKLQkJCQkJCQkgc3BlZWQsIGR1cGxleCk7Ci0JCQkJCXNsaWNfbGlua19ldmVudF9oYW5kbGVyKGFkYXB0ZXIpOwotCQkJCX0KKwkJCQkJZHVwbGV4ID0gMDsKKwkJCQlzbGljX2xpbmtfY29uZmlnKGFkYXB0ZXIsIHNwZWVkLCBkdXBsZXgpOworCQkJCXNsaWNfbGlua19ldmVudF9oYW5kbGVyKGFkYXB0ZXIpOwogCQkJfQotCQkJcmV0dXJuIDA7CiAJCX0KLSNlbmRpZgorCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgotLyogICAgICAgICAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIFVOU1VQUE9SVEVEWyV4XVxuIiwgX19mdW5jX18sIGNtZCk7ICovCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiB9CkBAIC05NzAsMTEgKzc4OSw2IEBACiAKIAljYXJkID0gYWRhcHRlci0+Y2FyZDsKIAlBU1NFUlQoY2FyZCk7Ci0vKgotICAgIERCR19FUlJPUigieG1pdF9zdGFydCAoJXMpIEVOVEVSIHNrYlslcF0gbGVuWyVkXSBsaW5rc3RhdGVbJXhdIHN0YXRlWyV4XVxuIiwKLQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIHNrYiwgc2tiLT5sZW4sIGFkYXB0ZXItPmxpbmtzdGF0ZSwKLQkgYWRhcHRlci0+c3RhdGUpOwotKi8KIAlpZiAoKGFkYXB0ZXItPmxpbmtzdGF0ZSAhPSBMSU5LX1VQKSB8fAogCSAgICAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfVVApIHx8IChjYXJkLT5zdGF0ZSAhPSBDQVJEX1VQKSkgewogCQlzdGF0dXMgPSBYTUlUX0ZBSUxfTElOS19TVEFURTsKQEAgLTEwMTUsMTQgKzgyOSwxMyBAQAogCX0KICNlbmRpZgogCWlmIChoY21kLT5wYWRkcmggPT0gMCkgewotCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2NiYXIsCi0JCQkgIChoY21kLT5wYWRkcmwgfCBoY21kLT5jbWRzaXplKSwgRE9OVF9GTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19jYmFyLAorCQkJCSAoaGNtZC0+cGFkZHJsIHwgaGNtZC0+Y21kc2l6ZSksIERPTlRfRkxVU0gpOwogCX0gZWxzZSB7Ci0JCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2NiYXI2NCwKLQkJCSAgICAoaGNtZC0+cGFkZHJsIHwgaGNtZC0+Y21kc2l6ZSksCi0JCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkgICAgaGNtZC0+cGFkZHJoLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLCAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2NiYXI2NCwKKwkJCQkgKGhjbWQtPnBhZGRybCB8IGhjbWQtPmNtZHNpemUpLAorCQkJCSAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJIGhjbWQtPnBhZGRyaCwgRE9OVF9GTFVTSCk7CiAJfQogeG1pdF9kb25lOgogCXJldHVybiAwOwpAQCAtMTAzNiwyOSArODQ5LDI5IEBACiAJCSAgICB2b2lkICpjbWQsIHUzMiBza2J0eXBlLCB1MzIgc3RhdHVzKQogewogCWlmIChhZGFwdGVyLT54bWl0cV9mdWxsKQotCQlzbGljX2lmX3N0b3BfcXVldWUoYWRhcHRlcik7CisJCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKIAlpZiAoKGNtZCA9PSBOVUxMKSAmJiAoc3RhdHVzIDw9IFhNSVRfRkFJTF9IT1NUQ01EX0ZBSUwpKSB7CiAJCXN3aXRjaCAoc3RhdHVzKSB7CiAJCWNhc2UgWE1JVF9GQUlMX0xJTktfU1RBVEU6Ci0JCQlEQkdfRVJST1IKLQkJCSAgICAoIiglcykgcmVqZWN0IHhtaXQgc2tiWyVwOiAleF0gbGlua3N0YXRlWyVzXSBcCi0JCQkgICAgIGFkYXB0ZXJbJXM6JWRdIGNhcmRbJXM6JWRdXG4iLAotCQkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIHNrYiwgc2tiLT5wa3RfdHlwZSwKLQkJCSAgICAgU0xJQ19MSU5LU1RBVEUoYWRhcHRlci0+bGlua3N0YXRlKSwKLQkJCSAgICAgU0xJQ19BREFQVEVSX1NUQVRFKGFkYXB0ZXItPnN0YXRlKSwgYWRhcHRlci0+c3RhdGUsCi0JCQkgICAgIFNMSUNfQ0FSRF9TVEFURShhZGFwdGVyLT5jYXJkLT5zdGF0ZSksCi0JCQkgICAgIGFkYXB0ZXItPmNhcmQtPnN0YXRlKTsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSJyZWplY3QgeG1pdCBza2JbJXA6ICV4XSBsaW5rc3RhdGVbJXNdICIKKwkJCQkiYWRhcHRlclslczolZF0gY2FyZFslczolZF1cbiIsCisJCQkJc2tiLCBza2ItPnBrdF90eXBlLAorCQkJCVNMSUNfTElOS1NUQVRFKGFkYXB0ZXItPmxpbmtzdGF0ZSksCisJCQkJU0xJQ19BREFQVEVSX1NUQVRFKGFkYXB0ZXItPnN0YXRlKSwKKwkJCQlhZGFwdGVyLT5zdGF0ZSwKKwkJCQlTTElDX0NBUkRfU1RBVEUoYWRhcHRlci0+Y2FyZC0+c3RhdGUpLAorCQkJCWFkYXB0ZXItPmNhcmQtPnN0YXRlKTsKIAkJCWJyZWFrOwogCQljYXNlIFhNSVRfRkFJTF9aRVJPX0xFTkdUSDoKLQkJCURCR19FUlJPUgotCQkJICAgICgieG1pdF9zdGFydCBza2ItPmxlbiA9PSAwIHNrYlslcF0gdHlwZVsleF0hISEhIFxuIiwKLQkJCSAgICAgc2tiLCBza2ItPnBrdF90eXBlKTsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSJ4bWl0X3N0YXJ0IHNrYi0+bGVuID09IDAgc2tiWyVwXSB0eXBlWyV4XVxuIiwKKwkJCQlza2IsIHNrYi0+cGt0X3R5cGUpOwogCQkJYnJlYWs7CiAJCWNhc2UgWE1JVF9GQUlMX0hPU1RDTURfRkFJTDoKLQkJCURCR19FUlJPUgotCQkJICAgICgieG1pdF9zdGFydCBza2JbJXBdIHR5cGVbJXhdIE5vIGhvc3QgY29tbWFuZHMgXAotCQkJICAgICBhdmFpbGFibGUgISEhISBcbiIsCi0JCQkgICAgIHNrYiwgc2tiLT5wa3RfdHlwZSk7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCQkieG1pdF9zdGFydCBza2JbJXBdIHR5cGVbJXhdIE5vIGhvc3QgY29tbWFuZHMgIgorCQkJCSJhdmFpbGFibGVcbiIsIHNrYiwgc2tiLT5wa3RfdHlwZSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCUFTU0VSVCgwKTsKQEAgLTExODMsMTEgKzk5Niw2IEBACiAKIAkJaWYgKCFzbGljX21hY19maWx0ZXIoYWRhcHRlciwgKHN0cnVjdCBldGhlcl9oZWFkZXIgKikKIAkJCQkJcmN2YnVmLT5kYXRhKSkgewotI2lmIDAKLQkJCURCR19NU0cKLQkJCSAgICAoInNsaWNvc3M6ICVzICglcykgZHJvcCBmcmFtZSBkdWUgdG8gbWFjIGZpbHRlclxuIiwKLQkJCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7Ci0jZW5kaWYKIAkJCXNsaWNfcmN2cXVldWVfcmVpbnNlcnQoYWRhcHRlciwgc2tiKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xMjQyLDEyICsxMDUwLDYgQEAKIAkJQVNTRVJUKGhjbWQpOwogCQlBU1NFUlQoaGNtZC0+cHNsaWNfaGFuZGxlID09CiAJCSAgICAgICAmYWRhcHRlci0+c2xpY19oYW5kbGVzW3NsaWNfaGFuZGxlX3dvcmQuaGFuZGxlX2luZGV4XSk7Ci0vKgotICAgICAgREJHX0VSUk9SKCJ4bWl0X2NvbXBsZXRlICglcykgICBoY21kWyVwXSAgaG9zdGhhbmRsZVsleF1cbiIsCi0JCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgaGNtZCwgaGNtZC0+Y21kNjQuaG9zdGhhbmRsZSk7Ci0gICAgICBEQkdfRVJST1IoIiAgICBza2JbJXBdIGxlbiAlZCAgaGNtZHR5cGVbJXhdXG4iLCBoY21kLT5za2IsCi0JCWhjbWQtPnNrYi0+bGVuLCBoY21kLT50eXBlKTsKLSovCiAJCWlmIChoY21kLT50eXBlID09IFNMSUNfQ01EX0RVTUIpIHsKIAkJCWlmIChoY21kLT5za2IpCiAJCQkJZGV2X2tmcmVlX3NrYl9pcnEoaGNtZC0+c2tiKTsKQEAgLTEyNjcsNyArMTA2OSw4IEBACiAJdTMyIGlzcjsKIAogCWlmICgoYWRhcHRlci0+cHNobWVtKSAmJiAoYWRhcHRlci0+cHNobWVtLT5pc3IpKSB7Ci0JCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX01BU0ssIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ljciwKKwkJCQkgSUNSX0lOVF9NQVNLLCBGTFVTSCk7CiAJCWlzciA9IGFkYXB0ZXItPmlzcmNvcHkgPSBhZGFwdGVyLT5wc2htZW0tPmlzcjsKIAkJYWRhcHRlci0+cHNobWVtLT5pc3IgPSAwOwogCQlhZGFwdGVyLT5udW1faXNycysrOwpAQCAtMTI5OSwyOSArMTEwMiwxOCBAQAogCQkJCQkJCWlmICghY291bnQpCiAJCQkJCQkJCWJyZWFrOwogCQkJCQkJfQotCQkJCQkJREJHX01TRwotCQkJCQkJICAgICgiKCVzKTogWyV4XSBJU1JfUk1JU1MgXAotCQkJCQkJICAgICBpbml0aWFsWyV4XSBwcmVbJXhdIFwKLQkJCQkJCSAgICAgZXJyb3JzWyV4XSBcCi0JCQkJCQkgICAgIHBvc3RfY291bnRbJXhdXG4iLAotCQkJCQkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCi0JCQkJCQkgICAgIGlzciwgcmN2X2NvdW50LCBwcmVfY291bnQsCi0JCQkJCQkgICAgIGVycm9ycywgcmN2cS0+Y291bnQpOwogCQkJCQl9IGVsc2UgaWYgKGlzciAmIElTUl9YRFJPUCkgewotCQkJCQkJREJHX0VSUk9SCi0JCQkJCQkgICAgKCJpc3IgJiBJU1JfRVJSIFsleF0gXAotCQkJCQkJICAgICBJU1JfWERST1AgXG4iLAotCQkJCQkJICAgICBpc3IpOworCQkJCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJCQkJImlzciAmIElTUl9FUlIgWyV4XSAiCisJCQkJCQkJIklTUl9YRFJPUCBcbiIsIGlzcik7CiAJCQkJCX0gZWxzZSB7Ci0JCQkJCQlEQkdfRVJST1IKLQkJCQkJCSAgICAoImlzciAmIElTUl9FUlIgWyV4XVxuIiwKLQkJCQkJCSAgICAgaXNyKTsKKwkJCQkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCQkJCSJpc3IgJiBJU1JfRVJSIFsleF1cbiIsCisJCQkJCQkJaXNyKTsKIAkJCQkJfQogCQkJCX0KIAogCQkJCWlmIChpc3IgJiBJU1JfTEVWRU5UKSB7Ci0JCQkJCS8qREJHX01TRygiJXMgKCVzKSAgSVNSX0xFVkVOVCBcbiIsCi0JCQkJCSAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOyovCiAJCQkJCWFkYXB0ZXItPmxpbmtldmVudF9pbnRlcnJ1cHRzKys7CiAJCQkJCXNsaWNfbGlua19ldmVudF9oYW5kbGVyKGFkYXB0ZXIpOwogCQkJCX0KQEAgLTEzNTksNyArMTE1MSw3IEBACiAJCWFkYXB0ZXItPmlzcmNvcHkgPSAwOwogCQlhZGFwdGVyLT5hbGxfcmVnX3dyaXRlcyArPSAyOwogCQlhZGFwdGVyLT5pc3JfcmVnX3dyaXRlcysrOwotCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2lzciwgMCwgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaXNyLCAwLCBGTFVTSCk7CiAJfSBlbHNlIHsKIAkJYWRhcHRlci0+ZmFsc2VfaW50ZXJydXB0cysrOwogCX0KQEAgLTEzODksMTEgKzExODEsNiBAQAogCXBzaG1lbSA9IChzdHJ1Y3Qgc2xpY19zaG1lbSAqKWFkYXB0ZXItPnBoeXNfc2htZW07CiAKICNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCi0vKgotICAgIERCR19NU0coInNsaWNfZXZlbnRfaGFuZGxlciAgcHNobWVtLT5saW5rc3RhdHVzWyV4XSAgcHNobWVtWyVwXVxuICAgXAotCSZsaW5rc3RhdHVzWyVwXSAmaXNyWyVwXVxuIiwgYWRhcHRlci0+cHNobWVtLT5saW5rc3RhdHVzLCBwc2htZW0sCi0JJnBzaG1lbS0+bGlua3N0YXR1cywgJnBzaG1lbS0+aXNyKTsKLSovCiAJc3RhdHVzID0gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLAogCQkJCSAgU0xJQ19VUFJfUkxTUiwKIAkJCQkgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmxpbmtzdGF0dXMpLApAQCAtMTQxMSw0NiArMTE5OCwyOSBAQAogCiBzdGF0aWMgdm9pZCBzbGljX2luaXRfY2xlYW51cChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBhZGFwdGVyWyVwXSAiLCBfX2Z1bmNfXywgYWRhcHRlcik7CiAJaWYgKGFkYXB0ZXItPmludHJyZWdpc3RlcmVkKSB7Ci0JCURCR19NU0coIkZSRUVfSVJRICIpOwogCQlhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCA9IDA7CiAJCWZyZWVfaXJxKGFkYXB0ZXItPm5ldGRldi0+aXJxLCBhZGFwdGVyLT5uZXRkZXYpOwogCiAJfQogCWlmIChhZGFwdGVyLT5wc2htZW0pIHsKLQkJREJHX01TRygiRlJFRV9TSE1FTSAiKTsKLQkJREJHX01TRygiYWRhcHRlclslcF0gcG9ydCAlZCBwc2htZW1bJXBdIEZyZWVTaG1lbSAiLAotCQkJYWRhcHRlciwgYWRhcHRlci0+cG9ydCwgKHZvaWQgKikgYWRhcHRlci0+cHNobWVtKTsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCiAJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2xpY19zaG1lbSksCiAJCQkJICAgIGFkYXB0ZXItPnBzaG1lbSwgYWRhcHRlci0+cGh5c19zaG1lbSk7CiAJCWFkYXB0ZXItPnBzaG1lbSA9IE5VTEw7CiAJCWFkYXB0ZXItPnBoeXNfc2htZW0gPSAoZG1hX2FkZHJfdCkgTlVMTDsKIAl9Ci0jaWYgU0xJQ19HRVRfU1RBVFNfVElNRVJfRU5BQkxFRAotCWlmIChhZGFwdGVyLT5zdGF0c3RpbWVyc2V0KSB7Ci0JCURCR19NU0coInN0YXRzdGltZXIgIik7Ci0JCWFkYXB0ZXItPnN0YXRzdGltZXJzZXQgPSAwOwotCQlkZWxfdGltZXIoJmFkYXB0ZXItPnN0YXRzdGltZXIpOwotCX0KLSNlbmRpZgotI2lmICFTTElDX0RVTVBfRU5BQkxFRCAmJiBTTElDX1BJTkdfVElNRVJfRU5BQkxFRAotLyojaWYgU0xJQ19EVU1QX0VOQUJMRUQgJiYgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQqLworCiAJaWYgKGFkYXB0ZXItPnBpbmd0aW1lcnNldCkgewotCQlEQkdfTVNHKCJwaW5ndGltZXIgIik7CiAJCWFkYXB0ZXItPnBpbmd0aW1lcnNldCA9IDA7CiAJCWRlbF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKIAl9Ci0jZW5kaWYKKwogCXNsaWNfcnNwcXVldWVfZnJlZShhZGFwdGVyKTsKIAlzbGljX2NtZHFfZnJlZShhZGFwdGVyKTsKIAlzbGljX3JjdnF1ZXVlX2ZyZWUoYWRhcHRlcik7Ci0KLQlEQkdfTVNHKCJcbiIpOwogfQogCi0jaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzbGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE0NzAsNyArMTI0MCw2IEBACiAJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgPSAwOwogCXJldHVybiAmYWRhcHRlci0+c3RhdHM7CiB9Ci0jZW5kaWYKIAogLyoKICAqICBBbGxvY2F0ZSBhIG1jYXN0X2FkZHJlc3Mgc3RydWN0dXJlIHRvIGhvbGQgdGhlIG11bHRpY2FzdCBhZGRyZXNzLgpAQCAtMTQ5MSw3ICsxMjYwLDcgQEAKIAl9CiAKIAkvKiBEb2Vzbid0IGFscmVhZHkgZXhpc3QuICBBbGxvY2F0ZSBhIHN0cnVjdHVyZSB0byBob2xkIGl0ICovCi0JbWNhZGRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1jYXN0X2FkZHJlc3MpLCBHRlBfQVRPTUlDKTsKKwltY2FkZHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWNhc3RfYWRkcmVzcyksIEdGUF9LRVJORUwpOwogCWlmIChtY2FkZHIgPT0gTlVMTCkKIAkJcmV0dXJuIDE7CiAKQEAgLTE2MDgsOCArMTM3Nyw2IEBACiAJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OwogCX0KIAotCURCR19NU0coIiVzIGEtPmRldmZsYWdzX3ByZXZbJXhdIGRldi0+ZmxhZ3NbJXhdIHN0YXR1c1sleF1cbiIsCi0JCV9fZnVuY19fLCBhZGFwdGVyLT5kZXZmbGFnc19wcmV2LCBkZXYtPmZsYWdzLCBzdGF0dXMpOwogCWlmIChhZGFwdGVyLT5kZXZmbGFnc19wcmV2ICE9IGRldi0+ZmxhZ3MpIHsKIAkJYWRhcHRlci0+bWFjb3B0cyA9IE1BQ19ESVJFQ1RFRDsKIAkJaWYgKGRldi0+ZmxhZ3MpIHsKQEAgLTE2MjMsOSArMTM5MCw3IEBACiAJCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfTUNBU1Q7CiAJCX0KIAkJYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IGRldi0+ZmxhZ3M7Ci0JCURCR19NU0coIiVzIGNhbGwgc2xpY19jb25maWdfc2V0IGFkYXB0ZXItPm1hY29wdHNbJXhdXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXItPm1hY29wdHMpOwotCQlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgVFJVRSk7CisJCXNsaWNfY29uZmlnX3NldChhZGFwdGVyLCB0cnVlKTsKIAl9IGVsc2UgewogCQlpZiAoc3RhdHVzID09IFNUQVRVU19TVUNDRVNTKQogCQkJc2xpY19tY2FzdF9zZXRfbWFzayhhZGFwdGVyKTsKQEAgLTE2MzcsMzYgKzE0MDIsMjMgQEAKIHsKIAlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKIAotCURCR19NU0coIiVzIEVOVEVSICglcykgbWFjb3B0c1sleF0gbWFza1slbGx4XVxuIiwgX19mdW5jX18sCi0JCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgKHVpbnQpIGFkYXB0ZXItPm1hY29wdHMsCi0JCWFkYXB0ZXItPm1jYXN0bWFzayk7Ci0KIAlpZiAoYWRhcHRlci0+bWFjb3B0cyAmIChNQUNfQUxMTUNBU1QgfCBNQUNfUFJPTUlTQykpIHsKIAkJLyogVHVybiBvbiBhbGwgbXVsdGljYXN0IGFkZHJlc3Nlcy4gV2UgaGF2ZSB0byBkbyB0aGlzIGZvcgogCQkgKiBwcm9taXNjdW91cyBtb2RlIGFzIHdlbGwgYXMgQUxMTUNBU1QgbW9kZS4gIEl0IHNhdmVzIHRoZQogCQkgKiBNaWNyb2NvZGUgZnJvbSBoYXZpbmcgdG8ga2VlcCBzdGF0ZSBhYm91dCB0aGUgTUFDCiAJCSAqIGNvbmZpZ3VyYXRpb24uCiAJCSAqLwotLyogICAgICAgICAgICAgIERCR19NU0coInNsaWNvc3M6ICVzIG1hY29wdHMgPSBNQUNfQUxMTUNBU1QgfCBNQUNfUFJPTUlTQ1xuXAotCQlTTFVUIE1PREUhISFcbiIsX19mdW5jX18pOyAqLwotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX21jYXN0bG93LCAweEZGRkZGRkZGLCBGTFVTSCk7Ci0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfbWNhc3RoaWdoLCAweEZGRkZGRkZGLCBGTFVTSCk7Ci0vKiAgICAgICAgREJHX01TRygiJXMgKCVzKSBXUklURSB0byBzbGljX3JlZ3Mgc2xpY19tY2FzdGxvdyZoaWdoIDB4RkZGRkZGRkZcbiIsCi0JCV9mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSk7ICovCisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19tY2FzdGxvdywgMHhGRkZGRkZGRiwgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfbWNhc3RoaWdoLCAweEZGRkZGRkZGLAorCQkJCSBGTFVTSCk7CiAJfSBlbHNlIHsKIAkJLyogQ29tbWl0IG91ciBtdWx0aWNhc3QgbWFzdCB0byB0aGUgU0xJQyBieSB3cml0aW5nIHRvIHRoZQogCQkgKiBtdWx0aWNhc3QgYWRkcmVzcyBtYXNrIHJlZ2lzdGVycwogCQkgKi8KLQkJREJHX01TRygiJXMgKCVzKSBXUklURSBtY2FzdGxvd1sleF0gbWNhc3RoaWdoWyV4XVxuIiwKLQkJCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCi0JCQkoKHVsb25nKSAoYWRhcHRlci0+bWNhc3RtYXNrICYgMHhGRkZGRkZGRikpLAotCQkJKCh1bG9uZykgKChhZGFwdGVyLT5tY2FzdG1hc2sgPj4gMzIpICYgMHhGRkZGRkZGRikpKTsKLQotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX21jYXN0bG93LAotCQkJICAodTMyKSAoYWRhcHRlci0+bWNhc3RtYXNrICYgMHhGRkZGRkZGRiksIEZMVVNIKTsKLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19tY2FzdGhpZ2gsCi0JCQkgICh1MzIpICgoYWRhcHRlci0+bWNhc3RtYXNrID4+IDMyKSAmIDB4RkZGRkZGRkYpLAotCQkJICBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19tY2FzdGxvdywKKwkJCSh1MzIpKGFkYXB0ZXItPm1jYXN0bWFzayAmIDB4RkZGRkZGRkYpLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19tY2FzdGhpZ2gsCisJCQkodTMyKSgoYWRhcHRlci0+bWNhc3RtYXNrID4+IDMyKSAmIDB4RkZGRkZGRkYpLCBGTFVTSCk7CiAJfQogfQogCkBAIC0xNjgwLDUzICsxNDMyLDExIEBACiAJQVNTRVJUKGFkYXB0ZXIpOwogCWNhcmQgPSBhZGFwdGVyLT5jYXJkOwogCUFTU0VSVChjYXJkKTsKLSNpZiAhU0xJQ19EVU1QX0VOQUJMRUQKLS8qI2lmIFNMSUNfRFVNUF9FTkFCTEVEKi8KLQlpZiAoKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSAmJiAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9VUCkpIHsKLQkJaW50IHN0YXR1czsKIAotCQlpZiAoY2FyZC0+cGluZ3N0YXR1cyAhPSBJU1JfUElOR01BU0spIHsKLQkJCWlmIChlcnJvcm1zZysrIDwgNSkgewotCQkJCURCR19NU0cKLQkJCQkgICAgKCIlcyAoJXMpIENBUkQgSEFTIENSQVNIRUQgIFBJTkdfc3RhdHVzID09IFwKLQkJCQkgICAgICV4IEVSUk9STVNHIyAlZFxuIiwKLQkJCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCi0JCQkJICAgICBjYXJkLT5waW5nc3RhdHVzLCBlcnJvcm1zZyk7Ci0JCQl9Ci0JCQkvKiAgIEFTU0VSVChjYXJkLT5waW5nc3RhdHVzID09IElTUl9QSU5HTUFTSyk7ICovCi0JCX0gZWxzZSB7Ci0JCQlpZiAoZ29vZG1zZysrIDwgNSkgewotCQkJCURCR19NU0cKLQkJCQkgICAgKCJzbGljb3NzOiAlcyAoJXMpIFBJTkdfc3RhdHVzID09ICV4IFwKLQkJCQkgICAgIEdPT0QhISEhISEhISBtc2cjICVkXG4iLAotCQkJCSAgICAgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwKLQkJCQkgICAgIGNhcmQtPnBpbmdzdGF0dXMsIGVycm9ybXNnKTsKLQkJCX0KLQkJfQotCQljYXJkLT5waW5nc3RhdHVzID0gMDsKLQkJc3RhdHVzID0gc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLCBTTElDX1VQUl9QSU5HLCAwLCAwLCAwLCAwKTsKLQotCQlBU1NFUlQoc3RhdHVzID09IDApOwotCX0gZWxzZSB7Ci0JCURCR19NU0coInNsaWNvc3MgJXMgKCVzKSBhZGFwdGVyWyVwXSBOT1QgVVAhISEhXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlcik7Ci0JfQotI2VuZGlmCi0JYWRhcHRlci0+cGluZ3RpbWVyLmV4cGlyZXMgPQotCSAgICBqaWZmaWVzICsgU0xJQ19TRUNTX1RPX0pJRkZTKFBJTkdfVElNRVJfSU5URVJWQUwpOworCWFkYXB0ZXItPnBpbmd0aW1lci5leHBpcmVzID0gamlmZmllcyArIChQSU5HX1RJTUVSX0lOVEVSVkFMICogSFopOwogCWFkZF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKIH0KIAotc3RhdGljIHZvaWQgc2xpY19pZl9zdG9wX3F1ZXVlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCW5ldGlmX3N0b3BfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgc2xpY19pZl9zdGFydF9xdWV1ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQluZXRpZl9zdGFydF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOwotfQotCiAvKgogICogIHNsaWNfaWZfaW5pdAogICoKQEAgLTE3NDIsMTQgKzE0NTIsMTEgQEAKIAlpbnQgc3RhdHVzID0gMDsKIAogCUFTU0VSVChjYXJkKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVOVEVSIHN0YXRlc1slZDolZDolZDolZF0gZmxhZ3NbJXhdXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAotCQlhZGFwdGVyLT5xdWV1ZXNfaW5pdGlhbGl6ZWQsIGFkYXB0ZXItPnN0YXRlLCBhZGFwdGVyLT5saW5rc3RhdGUsCi0JCWNhcmQtPnN0YXRlLCBkZXYtPmZsYWdzKTsKIAogCS8qIGFkYXB0ZXIgc2hvdWxkIGJlIGRvd24gYXQgdGhpcyBwb2ludCAqLwogCWlmIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9ET1dOKSB7Ci0JCURCR19FUlJPUigic2xpY19pZl9pbml0IGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX0RPV05cbiIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9ET1dOXG4iLAorCQkJX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJQVNTRVJUKGFkYXB0ZXItPmxpbmtzdGF0ZSA9PSBMSU5LX0RPV04pOwpAQCAtMTc1Nyw1NCArMTQ2NCwzNSBAQAogCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOwogCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7CiAJaWYgKGRldi0+ZmxhZ3MpIHsKLQkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBTZXQgTUFDIG9wdGlvbnM6ICIsIF9fZnVuY19fLAotCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKLQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKSB7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkKIAkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0JDQVNUOwotCQkJREJHX01TRygiQkNBU1QgIik7Ci0JCX0KLQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQogCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfUFJPTUlTQzsKLQkJCURCR19NU0coIlBST01JU0MgIik7Ci0JCX0KLQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCiAJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19BTExNQ0FTVDsKLQkJCURCR19NU0coIkFMTF9NQ0FTVCAiKTsKLQkJfQotCQlpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpIHsKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKQogCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfTUNBU1Q7Ci0JCQlEQkdfTVNHKCJNQ0FTVCAiKTsKLQkJfQotCQlEQkdfTVNHKCJcbiIpOwogCX0KIAlzdGF0dXMgPSBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoYWRhcHRlcik7CiAJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlEQkdfRVJST1IKLQkJICAgICgic2xpY19pZl9pbml0OiBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMgRkFJTEVEICV4XG4iLAotCQkgICAgIHN0YXR1cyk7CisJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJIiVzOiBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMgRkFJTEVEICV4XG4iLAorCQkJX19mdW5jX18sIHN0YXR1cyk7CiAJCXNsaWNfYWRhcHRlcl9mcmVlcmVzb3VyY2VzKGFkYXB0ZXIpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAogCWlmICghYWRhcHRlci0+cXVldWVzX2luaXRpYWxpemVkKSB7Ci0JCURCR19NU0coInNsaWNvc3M6ICVzIGNhbGwgc2xpY19yc3BxdWV1ZV9pbml0XG4iLCBfX2Z1bmNfXyk7CiAJCWlmIChzbGljX3JzcHF1ZXVlX2luaXQoYWRhcHRlcikpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQkJREJHX01TRwotCQkgICAgKCJzbGljb3NzOiAlcyBjYWxsIHNsaWNfY21kcV9pbml0IGFkYXB0ZXJbJXBdIHBvcnQgJWQgXG4iLAotCQkgICAgIF9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5wb3J0KTsKIAkJaWYgKHNsaWNfY21kcV9pbml0KGFkYXB0ZXIpKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCURCR19NU0cKLQkJICAgICgic2xpY29zczogJXMgY2FsbCBzbGljX3JjdnF1ZXVlX2luaXQgYWRhcHRlclslcF0gXAotCQkgICAgIHBvcnQgJWQgXG4iLCBfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+cG9ydCk7CiAJCWlmIChzbGljX3JjdnF1ZXVlX2luaXQoYWRhcHRlcikpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJYWRhcHRlci0+cXVldWVzX2luaXRpYWxpemVkID0gMTsKIAl9Ci0JREJHX01TRygic2xpY29zczogJXMgZGlzYWJsZSBpbnRlcnJ1cHRzKHNsaWMpXG4iLCBfX2Z1bmNfXyk7CiAKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PRkYsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09GRiwgRkxVU0gpOwogCW1kZWxheSgxKTsKIAogCWlmICghYWRhcHRlci0+aXNwX2luaXRpYWxpemVkKSB7CkBAIC0xODE0LDEzICsxNTAyLDEzIEBACiAJCQkJCWFkYXB0ZXItPmJpdDY0cmVnbG9jay5mbGFncyk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpCi0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCSAgU0xJQ19HRVRfQUREUl9ISUdIKCZwc2htZW0tPmlzciksIERPTlRfRkxVU0gpOwotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2lzcCwKLQkJCSAgU0xJQ19HRVRfQUREUl9MT1coJnBzaG1lbS0+aXNyKSwgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkgU0xJQ19HRVRfQUREUl9ISUdIKCZwc2htZW0tPmlzciksIERPTlRfRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaXNwLAorCQkJCSBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5pc3IpLCBGTFVTSCk7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19YODYpCi0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgKHUzMikgMCwgRE9OVF9GTFVTSCk7Ci0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaXNwLCAodTMyKSAmcHNobWVtLT5pc3IsIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIDAsIERPTlRfRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaXNwLCAodTMyKSZwc2htZW0tPmlzciwgRkxVU0gpOwogI2Vsc2UKIAkJU3RvcCBDb21waWxhdGlvbnMKICNlbmRpZgpAQCAtMTgzMyw2NiArMTUyMSw0NCBAQAogCWlmICghY2FyZC0+bG9hZHRpbWVyc2V0KSB7CiAJCWluaXRfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7CiAJCWNhcmQtPmxvYWR0aW1lci5leHBpcmVzID0KLQkJICAgIGppZmZpZXMgKyBTTElDX1NFQ1NfVE9fSklGRlMoU0xJQ19MT0FEVElNRVJfUEVSSU9EKTsKKwkJICAgIGppZmZpZXMgKyAoU0xJQ19MT0FEVElNRVJfUEVSSU9EICogSFopOwogCQljYXJkLT5sb2FkdGltZXIuZGF0YSA9ICh1bG9uZykgY2FyZDsKIAkJY2FyZC0+bG9hZHRpbWVyLmZ1bmN0aW9uID0gJnNsaWNfdGltZXJfbG9hZF9jaGVjazsKIAkJYWRkX3RpbWVyKCZjYXJkLT5sb2FkdGltZXIpOwogCiAJCWNhcmQtPmxvYWR0aW1lcnNldCA9IDE7CiAJfQotI2lmIFNMSUNfR0VUX1NUQVRTX1RJTUVSX0VOQUJMRUQKLQlpZiAoIWFkYXB0ZXItPnN0YXRzdGltZXJzZXQpIHsKLQkJREJHX01TRygic2xpY29zczogJXMgc3RhcnQgZ2V0c3RhdHNfdGltZXIoc2xpYylcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCWluaXRfdGltZXIoJmFkYXB0ZXItPnN0YXRzdGltZXIpOwotCQlhZGFwdGVyLT5zdGF0c3RpbWVyLmV4cGlyZXMgPQotCQkgICAgamlmZmllcyArIFNMSUNfU0VDU19UT19KSUZGUyhTVEFUU19USU1FUl9JTlRFUlZBTCk7Ci0JCWFkYXB0ZXItPnN0YXRzdGltZXIuZGF0YSA9ICh1bG9uZykgYWRhcHRlci0+bmV0ZGV2OwotCQlhZGFwdGVyLT5zdGF0c3RpbWVyLmZ1bmN0aW9uID0gJnNsaWNfdGltZXJfZ2V0X3N0YXRzOwotCQlhZGRfdGltZXIoJmFkYXB0ZXItPnN0YXRzdGltZXIpOwotCQlhZGFwdGVyLT5zdGF0c3RpbWVyc2V0ID0gMTsKLQl9Ci0jZW5kaWYKLSNpZiAhU0xJQ19EVU1QX0VOQUJMRUQgJiYgU0xJQ19QSU5HX1RJTUVSX0VOQUJMRUQKLS8qI2lmIFNMSUNfRFVNUF9FTkFCTEVEICYmIFNMSUNfUElOR19USU1FUl9FTkFCTEVEKi8KKwogCWlmICghYWRhcHRlci0+cGluZ3RpbWVyc2V0KSB7Ci0JCURCR19NU0coInNsaWNvc3M6ICVzIHN0YXJ0IGNhcmRfcGluZ190aW1lcihzbGljKVxuIiwKLQkJCV9fZnVuY19fKTsKIAkJaW5pdF90aW1lcigmYWRhcHRlci0+cGluZ3RpbWVyKTsKIAkJYWRhcHRlci0+cGluZ3RpbWVyLmV4cGlyZXMgPQotCQkgICAgamlmZmllcyArIFNMSUNfU0VDU19UT19KSUZGUyhQSU5HX1RJTUVSX0lOVEVSVkFMKTsKKwkJICAgIGppZmZpZXMgKyAoUElOR19USU1FUl9JTlRFUlZBTCAqIEhaKTsKIAkJYWRhcHRlci0+cGluZ3RpbWVyLmRhdGEgPSAodWxvbmcpIGRldjsKIAkJYWRhcHRlci0+cGluZ3RpbWVyLmZ1bmN0aW9uID0gJnNsaWNfdGltZXJfcGluZzsKIAkJYWRkX3RpbWVyKCZhZGFwdGVyLT5waW5ndGltZXIpOwogCQlhZGFwdGVyLT5waW5ndGltZXJzZXQgPSAxOwogCQlhZGFwdGVyLT5jYXJkLT5waW5nc3RhdHVzID0gSVNSX1BJTkdNQVNLOwogCX0KLSNlbmRpZgogCiAJLyoKIAkgKiAgICBjbGVhciBhbnkgcGVuZGluZyBldmVudHMsIHRoZW4gZW5hYmxlIGludGVycnVwdHMKIAkgKi8KLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTkFCTEUgaW50ZXJydXB0cyhzbGljKVxuIiwgX19mdW5jX18pOwogCWFkYXB0ZXItPmlzcmNvcHkgPSAwOwogCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2lzciwgMCwgRkxVU0gpOwotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfaWNyLCBJQ1JfSU5UX09OLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzciwgMCwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19pY3IsIElDUl9JTlRfT04sIEZMVVNIKTsKIAotCURCR19NU0coInNsaWNvc3M6ICVzIGNhbGwgc2xpY19saW5rX2NvbmZpZyhzbGljKVxuIiwgX19mdW5jX18pOwogCXNsaWNfbGlua19jb25maWcoYWRhcHRlciwgTElOS19BVVRPU1BFRUQsIExJTktfQVVUT0QpOwogCXNsaWNfbGlua19ldmVudF9oYW5kbGVyKGFkYXB0ZXIpOwogCi0JREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOwogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KIAogc3RhdGljIHZvaWQgc2xpY191bm1hcF9tbWlvX3NwYWNlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewotI2lmIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCiAJaWYgKGFkYXB0ZXItPnNsaWNfcmVncykKIAkJaW91bm1hcChhZGFwdGVyLT5zbGljX3JlZ3MpOwogCWFkYXB0ZXItPnNsaWNfcmVncyA9IE5VTEw7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGludCBzbGljX2FkYXB0ZXJfYWxsb2NyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCkBAIC0xOTAwLDEzICsxNTY2LDYgQEAKIAlpZiAoIWFkYXB0ZXItPmludHJyZWdpc3RlcmVkKSB7CiAJCWludCByZXR2YWw7CiAKLQkJREJHX01TRwotCQkgICAgKCJzbGljb3NzOiAlcyBBbGxvY0FkYXB0UnNyY3MgYWRhcHRlclslcF0gc2htZW1bJXBdIFwKLQkJICAgICBwaHlzX3NobWVtWyVwXSBkZXYtPmlycVsleF0gJXhcbiIsCi0JCSAgICAgX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPnBzaG1lbSwKLQkJICAgICAodm9pZCAqKWFkYXB0ZXItPnBoeXNfc2htZW0sIGFkYXB0ZXItPm5ldGRldi0+aXJxLAotCQkgICAgIE5SX0lSUVMpOwotCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmxvY2ssCiAJCQkJCXNsaWNfZ2xvYmFsLmRyaXZlcl9sb2NrLmZsYWdzKTsKIApAQCAtMTkxOSwxNiArMTU3OCwxMiBAQAogCQkJCQlzbGljX2dsb2JhbC5kcml2ZXJfbG9jay5mbGFncyk7CiAKIAkJaWYgKHJldHZhbCkgewotCQkJREJHX0VSUk9SKCJzbGljb3NzOiByZXF1ZXN0X2lycSAoJXMpIEZBSUxFRCBbJXhdXG4iLAotCQkJCSAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCByZXR2YWwpOworCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkJInJlcXVlc3RfaXJxICglcykgRkFJTEVEIFsleF1cbiIsCisJCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCByZXR2YWwpOwogCQkJcmV0dXJuIHJldHZhbDsKIAkJfQogCQlhZGFwdGVyLT5pbnRycmVnaXN0ZXJlZCA9IDE7Ci0JCURCR19NU0cKLQkJICAgICgic2xpY29zczogJXMgQWxsb2NBZGFwdFJzcmNzIGFkYXB0ZXJbJXBdIHNobWVtWyVwXSBcCi0JCSAgICAgcHNobWVtWyVwXSBkZXYtPmlycVsleF1cbiIsCi0JCSAgICAgX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPnBzaG1lbSwKLQkJICAgICAodm9pZCAqKWFkYXB0ZXItPnBzaG1lbSwgYWRhcHRlci0+bmV0ZGV2LT5pcnEpOwogCX0KIAlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiB9CkBAIC0xOTM5LDIyICsxNTk0LDE3IEBACiAJdTE2IG5ld19jb21tYW5kOwogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jb21tYW5kKTsKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAgUENJIGNvbW1hbmRbJTQuNHhdXG4iLCBfX2Z1bmNfXywgcGNpX2NvbW1hbmQpOwogCiAJbmV3X2NvbW1hbmQgPSBwY2lfY29tbWFuZCB8IFBDSV9DT01NQU5EX01BU1RFUgogCSAgICB8IFBDSV9DT01NQU5EX01FTU9SWQogCSAgICB8IFBDSV9DT01NQU5EX0lOVkFMSURBVEUKIAkgICAgfCBQQ0lfQ09NTUFORF9QQVJJVFkgfCBQQ0lfQ09NTUFORF9TRVJSIHwgUENJX0NPTU1BTkRfRkFTVF9CQUNLOwotCWlmIChwY2lfY29tbWFuZCAhPSBuZXdfY29tbWFuZCkgewotCQlEQkdfTVNHKCIlcyAtLSBVcGRhdGluZyBQQ0kgQ09NTUFORCByZWdpc3RlciAlNC40eC0+JTQuNHguXG4iLAotCQkJX19mdW5jX18sIHBjaV9jb21tYW5kLCBuZXdfY29tbWFuZCk7CisJaWYgKHBjaV9jb21tYW5kICE9IG5ld19jb21tYW5kKQogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpZGV2LCBQQ0lfQ09NTUFORCwgbmV3X2NvbW1hbmQpOwotCX0KIH0KIAogc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX2ZyZWVyZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JREJHX01TRygic2xpY29zczogJXMgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKIAlzbGljX2luaXRfY2xlYW51cChhZGFwdGVyKTsKIAltZW1zZXQoJmFkYXB0ZXItPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKIAlhZGFwdGVyLT5lcnJvcl9pbnRlcnJ1cHRzID0gMDsKQEAgLTE5NjcsNyArMTYxNyw2IEBACiAJYWRhcHRlci0+cmN2X2Jyb2FkY2FzdHMgPSAwOwogCWFkYXB0ZXItPnJjdl9tdWx0aWNhc3RzID0gMDsKIAlhZGFwdGVyLT5yY3ZfdW5pY2FzdHMgPSAwOwotCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVRcbiIsIF9fZnVuY19fKTsKIH0KIAogLyoKQEAgLTE5NzksMjEgKzE2MjgsMTUgQEAKIHN0YXRpYyB2b2lkIHNsaWNfbGlua19jb25maWcoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCiAJCSAgICAgIHUzMiBsaW5rc3BlZWQsIHUzMiBsaW5rZHVwbGV4KQogeworCXUzMiBfX2lvbWVtICp3cGh5OwogCXUzMiBzcGVlZDsKIAl1MzIgZHVwbGV4OwogCXUzMiBwaHlfY29uZmlnOwogCXUzMiBwaHlfYWR2cmVnOwogCXUzMiBwaHlfZ2N0bHJlZzsKIAotCWlmIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9VUCkgewotCQlEQkdfTVNHCi0JCSAgICAoIiVzICglcykgQURBUFQgTm90IHVwIHlldCwgUmV0dXJuISBzcGVlZFsleF0gZHVwbGV4WyV4XVxuIiwKLQkJICAgICBfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBsaW5rc3BlZWQsCi0JCSAgICAgbGlua2R1cGxleCk7CisJaWYgKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKQogCQlyZXR1cm47Ci0JfQotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgc2xpY19saW5rX2NvbmZpZzogc3BlZWRbJXhdIGR1cGxleFsleF1cbiIsCi0JCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGxpbmtzcGVlZCwgbGlua2R1cGxleCk7CiAKIAlBU1NFUlQoKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMUdCX0RFVklDRV9JRCkKIAkgICAgICAgfHwgKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMkdCX0RFVklDRV9JRCkpOwpAQCAtMjAwMyw2ICsxNjQ2LDggQEAKIAlpZiAobGlua2R1cGxleCA+IExJTktfQVVUT0QpCiAJCWxpbmtkdXBsZXggPSBMSU5LX0FVVE9EOwogCisJd3BoeSA9ICZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeTsKKwogCWlmICgobGlua3NwZWVkID09IExJTktfQVVUT1NQRUVEKSB8fCAobGlua3NwZWVkID09IExJTktfMTAwME1CKSkgewogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBBREFQVF9GTEFHU19GSUJFUk1FRElBKSB7CiAJCQkvKiAgV2UndmUgZ290IGEgZmliZXIgZ2lnYWJpdCBpbnRlcmZhY2UsIGFuZCByZWdpc3RlcgpAQCAtMjAxMyw4ICsxNjU4LDcgQEAKIAkJCXBoeV9hZHZyZWcgPSAoTUlJQ1JfUkVHXzQgfCAoUEFSX0FEVjEwMDBYRkQpKTsKIAkJCS8qIGVuYWJsZSBQQVVTRSBmcmFtZXMgICAgICAgICovCiAJCQlwaHlfYWR2cmVnIHw9IFBBUl9BU1lNUEFVU0VfRklCRVI7Ci0JCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9hZHZyZWcsCi0JCQkJICBGTFVTSCk7CisJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9hZHZyZWcsIEZMVVNIKTsKIAogCQkJaWYgKGxpbmtzcGVlZCA9PSBMSU5LX0FVVE9TUEVFRCkgewogCQkJCS8qIHJlc2V0IHBoeSwgZW5hYmxlIGF1dG8tbmVnICAqLwpAQCAtMjAyMiwxNCArMTY2NiwxMiBAQAogCQkJCSAgICAoTUlJQ1JfUkVHX1BDUiB8CiAJCQkJICAgICAoUENSX1JFU0VUIHwgUENSX0FVVE9ORUcgfAogCQkJCSAgICAgIFBDUl9BVVRPTkVHX1JTVCkpOwotCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwKLQkJCQkJICBwaHlfY29uZmlnLCBGTFVTSCk7CisJCQkJc2xpY19yZWczMl93cml0ZSh3cGh5LCBwaHlfY29uZmlnLCBGTFVTSCk7CiAJCQl9IGVsc2UgewkvKiBmb3JjZWQgMTAwMCBNYiBGRCovCiAJCQkJLyogcG93ZXIgZG93biBwaHkgdG8gYnJlYWsgbGluawogCQkJCSAgIHRoaXMgbWF5IG5vdCB3b3JrKSAqLwogCQkJCXBoeV9jb25maWcgPSAoTUlJQ1JfUkVHX1BDUiB8IFBDUl9QT1dFUkRPV04pOwotCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwKLQkJCQkJICBwaHlfY29uZmlnLCBGTFVTSCk7CisJCQkJc2xpY19yZWczMl93cml0ZSh3cGh5LCBwaHlfY29uZmlnLCBGTFVTSCk7CiAJCQkJLyogd2FpdCwgTWFydmVsbCBzYXlzIDEgc2VjLAogCQkJCSAgIHRyeSB0byBnZXQgYXdheSB3aXRoIDEwIG1zICAqLwogCQkJCW1kZWxheSgxMCk7CkBAIC0yMDQwLDggKzE2ODIsNyBAQAogCQkJCSAgICAoTUlJQ1JfUkVHX1BDUiB8CiAJCQkJICAgICAoUENSX1JFU0VUIHwgUENSX1NQRUVEXzEwMDAgfAogCQkJCSAgICAgIFBDUl9EVVBMRVhfRlVMTCkpOwotCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwKLQkJCQkJICBwaHlfY29uZmlnLCBGTFVTSCk7CisJCQkJc2xpY19yZWczMl93cml0ZSh3cGh5LCBwaHlfY29uZmlnLCBGTFVTSCk7CiAJCQl9CiAJCX0gZWxzZSB7CS8qIGNvcHBlciBnaWdhYml0ICovCiAKQEAgLTIwNjUsMzUgKzE3MDYsMzAgQEAKIAkJCXBoeV9hZHZyZWcgfD0gUEFSX0FTWU1QQVVTRTsKIAkJCS8qIHJlcXVpcmVkIGJ5IHRoZSBDaWNhZGEgUEhZICAqLwogCQkJcGh5X2FkdnJlZyB8PSBQQVJfODAyXzM7Ci0JCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksIHBoeV9hZHZyZWcsCi0JCQkJICBGTFVTSCk7CisJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9hZHZyZWcsIEZMVVNIKTsKIAkJCS8qIGFkdmVydGlzZSBGRCBvbmx5IEAxMDAwIE1iICAqLwogCQkJcGh5X2djdGxyZWcgPSAoTUlJQ1JfUkVHXzkgfCAoUEdDX0FEVjEwMDBGRCkpOwotCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfZ2N0bHJlZywKLQkJCQkgIEZMVVNIKTsKKwkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2djdGxyZWcsIEZMVVNIKTsKIAogCQkJaWYgKGFkYXB0ZXItPnN1YnN5c2lkICE9IFNMSUNfMUdCX0NJQ0FEQV9TVUJTWVNfSUQpIHsKIAkJCQkvKiBpZiBhIE1hcnZlbGwgUEhZCiAJCQkJICAgZW5hYmxlIGF1dG8gY3Jvc3NvdmVyICovCiAJCQkJcGh5X2NvbmZpZyA9CiAJCQkJICAgIChNSUlDUl9SRUdfMTYgfCAoTVJWX1JFRzE2X1hPVkVST04pKTsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCi0JCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogCiAJCQkJLyogcmVzZXQgcGh5LCBlbmFibGUgYXV0by1uZWcgICovCiAJCQkJcGh5X2NvbmZpZyA9CiAJCQkJICAgIChNSUlDUl9SRUdfUENSIHwKIAkJCQkgICAgIChQQ1JfUkVTRVQgfCBQQ1JfQVVUT05FRyB8CiAJCQkJICAgICAgUENSX0FVVE9ORUdfUlNUKSk7Ci0JCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LAotCQkJCQkgIHBoeV9jb25maWcsIEZMVVNIKTsKKwkJCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKIAkJCX0gZWxzZSB7CS8qIGl0J3MgYSBDaWNhZGEgUEhZICAqLwogCQkJCS8qIGVuYWJsZSBhbmQgcmVzdGFydCBhdXRvLW5lZyAoZG9uJ3QgcmVzZXQpICAqLwogCQkJCXBoeV9jb25maWcgPQogCQkJCSAgICAoTUlJQ1JfUkVHX1BDUiB8CiAJCQkJICAgICAoUENSX0FVVE9ORUcgfCBQQ1JfQVVUT05FR19SU1QpKTsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3dwaHksCi0JCQkJCSAgcGh5X2NvbmZpZywgRkxVU0gpOworCQkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTIxMTEsMTMgKzE3NDcsMTIgQEAKIAkJCS8qIGlmIGEgTWFydmVsbCBQSFkKIAkJCSAgIGRpc2FibGUgYXV0byBjcm9zc292ZXIgICovCiAJCQlwaHlfY29uZmlnID0gKE1JSUNSX1JFR18xNiB8IChNUlZfUkVHMTZfWE9WRVJPRkYpKTsKLQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywKLQkJCQkgIEZMVVNIKTsKKwkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogCQl9CiAKIAkJLyogcG93ZXIgZG93biBwaHkgdG8gYnJlYWsgbGluayAodGhpcyBtYXkgbm90IHdvcmspICAqLwogCQlwaHlfY29uZmlnID0gKE1JSUNSX1JFR19QQ1IgfCAoUENSX1BPV0VSRE9XTiB8IHNwZWVkIHwgZHVwbGV4KSk7Ci0JCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKHdwaHksIHBoeV9jb25maWcsIEZMVVNIKTsKIAogCQkvKiB3YWl0LCBNYXJ2ZWxsIHNheXMgMSBzZWMsIHRyeSB0byBnZXQgYXdheSB3aXRoIDEwIG1zICovCiAJCW1kZWxheSgxMCk7CkBAIC0yMTI4LDQzICsxNzYzLDE3IEBACiAJCQkgICBzb2Z0IHJlc2V0IHBoeSwgcG93ZXJ1cCAqLwogCQkJcGh5X2NvbmZpZyA9CiAJCQkgICAgKE1JSUNSX1JFR19QQ1IgfCAoUENSX1JFU0VUIHwgc3BlZWQgfCBkdXBsZXgpKTsKLQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywKLQkJCQkgIEZMVVNIKTsKKwkJCXNsaWNfcmVnMzJfd3JpdGUod3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOwogCQl9IGVsc2UgewkvKiBpdCdzIGEgQ2ljYWRhIFBIWSAgKi8KIAkJCS8qIGRpc2FibGUgYXV0by1uZWcsIHNldCBzcGVlZCwgcG93ZXJ1cCAgKi8KIAkJCXBoeV9jb25maWcgPSAoTUlJQ1JfUkVHX1BDUiB8IChzcGVlZCB8IGR1cGxleCkpOwotCQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfY29uZmlnLAotCQkJCSAgRkxVU0gpOworCQkJc2xpY19yZWczMl93cml0ZSh3cGh5LCBwaHlfY29uZmlnLCBGTFVTSCk7CiAJCX0KIAl9Ci0KLQlEQkdfTVNHCi0JICAgICgic2xpY29zczogJXMgKCVzKSBFWElUIHNsaWNfbGlua19jb25maWcgOiBzdGF0ZVslZF0gXAotCSAgICBwaHlfY29uZmlnWyV4XVxuIiwgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+c3RhdGUsCi0JICAgIHBoeV9jb25maWcpOwogfQogCiBzdGF0aWMgdm9pZCBzbGljX2NhcmRfY2xlYW51cChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCiB7Ci0JREJHX01TRygic2xpY29zczogJXMgRU5URVJcbiIsIF9fZnVuY19fKTsKLQotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0JaWYgKGNhcmQtPmR1bXBidWZmZXIpIHsKLQkJY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzID0gMDsKLQkJY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzbCA9IDA7Ci0JCWNhcmQtPmR1bXBidWZmZXJfcGh5c2ggPSAwOwotCQlrZnJlZShjYXJkLT5kdW1wYnVmZmVyKTsKLQkJY2FyZC0+ZHVtcGJ1ZmZlciA9IE5VTEw7Ci0JfQotCWlmIChjYXJkLT5jbWRidWZmZXIpIHsKLQkJY2FyZC0+Y21kYnVmZmVyX3BoeXMgPSAwOwotCQljYXJkLT5jbWRidWZmZXJfcGh5c2wgPSAwOwotCQljYXJkLT5jbWRidWZmZXJfcGh5c2ggPSAwOwotCQlrZnJlZShjYXJkLT5jbWRidWZmZXIpOwotCQljYXJkLT5jbWRidWZmZXIgPSBOVUxMOwotCX0KLSNlbmRpZgotCiAJaWYgKGNhcmQtPmxvYWR0aW1lcnNldCkgewogCQljYXJkLT5sb2FkdGltZXJzZXQgPSAwOwogCQlkZWxfdGltZXIoJmNhcmQtPmxvYWR0aW1lcik7CkBAIC0yMTczLDcgKzE3ODIsNiBAQAogCXNsaWNfZGVidWdfY2FyZF9kZXN0cm95KGNhcmQpOwogCiAJa2ZyZWUoY2FyZCk7Ci0JREJHX01TRygic2xpY29zczogJXMgRVhJVFxuIiwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgaW50IHNsaWNfY2FyZF9kb3dubG9hZF9nYnJjdihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKQEAgLTIxODMsMTUgKzE3OTEsMTYgQEAKIAlpbnQgcmV0OwogCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOwogCXUzMiBjb2RlYWRkcjsKLQl1bnNpZ25lZCBjaGFyICppbnN0cnVjdGlvbiA9IE5VTEw7CisJdTMyIGluc3RydWN0aW9uOworCWludCBpbmRleCA9IDA7CiAJdTMyIHJjdnVjb2RlbGVuID0gMDsKIAogCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKIAljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKLQkJZmlsZSA9ICJvYXNpc19yY3YuYmluIjsKKwkJZmlsZSA9ICJzbGljb3NzL29hc2lzcmN2dWNvZGUuc3lzIjsKIAkJYnJlYWs7CiAJY2FzZSBTTElDXzFHQl9ERVZJQ0VfSUQ6Ci0JCWZpbGUgPSAiZ2JfcmN2LmJpbiI7CisJCWZpbGUgPSAic2xpY29zcy9nYnJjdnVjb2RlLnN5cyI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUFTU0VSVCgwKTsKQEAgLTIyMDAsMTIgKzE4MDksMTMgQEAKIAogCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaWxlLCAmYWRhcHRlci0+cGNpZGV2LT5kZXYpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTTElDT1NTOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwgZmlsZSk7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJIlNMSUNPU1M6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzXG4iLCBmaWxlKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpbnN0cnVjdGlvbiA9ICh1bnNpZ25lZCBjaGFyICopZnctPmRhdGE7Ci0JcmN2dWNvZGVsZW4gPSBmdy0+c2l6ZTsKKwlyY3Z1Y29kZWxlbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCWluZGV4ICs9IDQ7CiAJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgewogCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgogCQlpZiAocmN2dWNvZGVsZW4gIT0gT2FzaXNSY3ZVQ29kZUxlbikKQEAgLTIyMTksMjkgKzE4MjksMjggQEAKIAkJQVNTRVJUKDApOwogCQlicmVhazsKIAl9Ci0KIAkvKiBzdGFydCBkb3dubG9hZCAqLwotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgU0xJQ19SQ1ZXQ1NfQkVHSU4sIEZMVVNIKTsKLQorCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLCBTTElDX1JDVldDU19CRUdJTiwgRkxVU0gpOwogCS8qIGRvd25sb2FkIHRoZSByY3Ygc2VxdWVuY2VyIHVjb2RlICovCiAJZm9yIChjb2RlYWRkciA9IDA7IGNvZGVhZGRyIDwgcmN2dWNvZGVsZW47IGNvZGVhZGRyKyspIHsKIAkJLyogd3JpdGUgb3V0IGluc3RydWN0aW9uIGFkZHJlc3MgKi8KLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLCBjb2RlYWRkciwgRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgY29kZWFkZHIsIEZMVVNIKTsKIAorCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQlpbmRleCArPSA0OwogCQkvKiB3cml0ZSBvdXQgdGhlIGluc3RydWN0aW9uIGRhdGEgbG93IGFkZHIgKi8KLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLAotCQkJICAodTMyKSAqKHUzMiAqKSBpbnN0cnVjdGlvbiwgRkxVU0gpOwotCQlpbnN0cnVjdGlvbiArPSA0OworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKIAorCQlpbnN0cnVjdGlvbiA9ICoodTggKikoZnctPmRhdGEgKyBpbmRleCk7CisJCWluZGV4Kys7CiAJCS8qIHdyaXRlIG91dCB0aGUgaW5zdHJ1Y3Rpb24gZGF0YSBoaWdoIGFkZHIgKi8KLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLCAodTMyKSAqaW5zdHJ1Y3Rpb24sCi0JCQkgIEZMVVNIKTsKLQkJaW5zdHJ1Y3Rpb24gKz0gMTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3Jjdl93Y3MsICh1OClpbnN0cnVjdGlvbiwKKwkJCQkgRkxVU0gpOwogCX0KIAogCS8qIGRvd25sb2FkIGZpbmlzaGVkICovCiAJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19yY3Zfd2NzLCBTTElDX1JDVldDU19GSU5JU0gsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfcmN2X3djcywgU0xJQ19SQ1ZXQ1NfRklOSVNILCBGTFVTSCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyNTQsNDEgKzE4NjMsMjEgQEAKIAlpbnQgdGhpc3NlY3Rpb25zaXplOwogCWludCBjb2RlYWRkcjsKIAlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKLQl1MzIgKmluc3RydWN0aW9uID0gTlVMTDsKLQl1MzIgKmxhc3RpbnN0cnVjdCA9IE5VTEw7Ci0JdTMyICpzdGFydGluc3RydWN0ID0gTlVMTDsKLQl1bnNpZ25lZCBjaGFyICpuZXh0aW5zdHJ1Y3Q7CisJdTMyIGluc3RydWN0aW9uOwogCXUzMiBiYXNlYWRkcmVzczsKIAl1MzIgZmFpbHVyZTsKIAl1MzIgaTsKIAl1MzIgbnVtc2VjdHMgPSAwOwogCXUzMiBzZWN0c2l6ZVszXTsKIAl1MzIgc2VjdHN0YXJ0WzNdOwotCi0vKiAgICAgIERCR19NU0cgKCJzbGljb3NzOiAlcyAoJXMpIGFkYXB0ZXJbJXBdIGNhcmRbJXBdIGRldmlkWyV4XSBcCi0JamlmZmllc1slbHhdIGNwdSAlZFxuIiwgX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlciwKLQkgICAgYWRhcHRlci0+Y2FyZCwgYWRhcHRlci0+ZGV2aWQsamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsgKi8KKwlpbnQgdWNvZGVfc3RhcnQsIGluZGV4ID0gMDsKIAogCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKIAljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKLS8qICAgICAgREJHX01TRyAoInNsaWNvc3M6ICVzIGRldmlkPT1TTElDXzJHQl9ERVZJQ0VfSUQgc2VjdGlvbnNbJXhdXG4iLAotCV9fZnVuY19fLCAodWludCkgT051bVNlY3Rpb25zKTsgKi8KLQkJZmlsZSA9ICJzbGljX29hc2lzLmJpbiI7Ci0JCW51bXNlY3RzID0gT051bVNlY3Rpb25zOwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtc2VjdHM7IGkrKykgewotCQkJc2VjdHNpemVbaV0gPSBPU2VjdGlvblNpemVbaV07Ci0JCQlzZWN0c3RhcnRbaV0gPSBPU2VjdGlvblN0YXJ0W2ldOwotCQl9CisJCWZpbGUgPSAic2xpY29zcy9vYXNpc2Rvd25sb2FkLnN5cyI7CiAJCWJyZWFrOwogCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgotLyogICAgICAgICAgICAgIERCR19NU0cgKCJzbGljb3NzOiAlcyBkZXZpZD09U0xJQ18xR0JfREVWSUNFX0lEIHNlY3Rpb25zWyV4XVxuIiwKLQkJX19mdW5jX18sICh1aW50KSBNTnVtU2VjdGlvbnMpOyAqLwotCQlmaWxlID0gInNsaWNfbW9qYXZlLmJpbiI7Ci0JCW51bXNlY3RzID0gTU51bVNlY3Rpb25zOwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtc2VjdHM7IGkrKykgewotCQkJc2VjdHNpemVbaV0gPSBNU2VjdGlvblNpemVbaV07Ci0JCQlzZWN0c3RhcnRbaV0gPSBNU2VjdGlvblN0YXJ0W2ldOwotCQl9CisJCWZpbGUgPSAic2xpY29zcy9nYmRvd25sb2FkLnN5cyI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUFTU0VSVCgwKTsKQEAgLTIyOTYsMTMxICsxODg1LDg0IEBACiAJfQogCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaWxlLCAmYWRhcHRlci0+cGNpZGV2LT5kZXYpOwogCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTTElDT1NTOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwgZmlsZSk7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJIlNMSUNPU1M6IEZhaWxlZCB0byBsb2FkIGZpcm13YXJlICVzXG4iLCBmaWxlKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0KKwludW1zZWN0cyA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCWluZGV4ICs9IDQ7CiAJQVNTRVJUKG51bXNlY3RzIDw9IDMpOwotCisJZm9yIChpID0gMDsgaSA8IG51bXNlY3RzOyBpKyspIHsKKwkJc2VjdHNpemVbaV0gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJaW5kZXggKz0gNDsKKwl9CisJZm9yIChpID0gMDsgaSA8IG51bXNlY3RzOyBpKyspIHsKKwkJc2VjdHN0YXJ0W2ldID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJCWluZGV4ICs9IDQ7CisJfQorCXVjb2RlX3N0YXJ0ID0gaW5kZXg7CisJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwlpbmRleCArPSA0OwogCWZvciAoc2VjdGlvbiA9IDA7IHNlY3Rpb24gPCBudW1zZWN0czsgc2VjdGlvbisrKSB7Ci0JCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKLQkJY2FzZSBTTElDXzJHQl9ERVZJQ0VfSUQ6Ci0JCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikoZnctPmRhdGEgKyAoU0VDVElPTl9TSVpFICoKLQkJCQkJCQkJc2VjdGlvbikpOwotCQkJYmFzZWFkZHJlc3MgPSBzZWN0c3RhcnRbc2VjdGlvbl07Ci0JCQl0aGlzc2VjdGlvbnNpemUgPSBzZWN0c2l6ZVtzZWN0aW9uXSA+PiAzOwotCQkJbGFzdGluc3RydWN0ID0KLQkJCSAgICAodTMyICopKGZ3LT5kYXRhICsgKFNFQ1RJT05fU0laRSAqIHNlY3Rpb24pICsKLQkJCQkJc2VjdHNpemVbc2VjdGlvbl0gLSA4KTsKLQkJCWJyZWFrOwotCQljYXNlIFNMSUNfMUdCX0RFVklDRV9JRDoKLQkJCWluc3RydWN0aW9uID0gKHUzMiAqKShmdy0+ZGF0YSArIChTRUNUSU9OX1NJWkUgKgotCQkJCQkJCQlzZWN0aW9uKSk7Ci0JCQliYXNlYWRkcmVzcyA9IHNlY3RzdGFydFtzZWN0aW9uXTsKLQkJCXRoaXNzZWN0aW9uc2l6ZSA9IHNlY3RzaXplW3NlY3Rpb25dID4+IDM7Ci0JCQlsYXN0aW5zdHJ1Y3QgPQotCQkJICAgICh1MzIgKikoZnctPmRhdGEgKyAoU0VDVElPTl9TSVpFICogc2VjdGlvbikgKwotCQkJCQlzZWN0c2l6ZVtzZWN0aW9uXSAtIDgpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlBU1NFUlQoMCk7Ci0JCQlicmVhazsKLQkJfQotCiAJCWJhc2VhZGRyZXNzID0gc2VjdHN0YXJ0W3NlY3Rpb25dOwogCQl0aGlzc2VjdGlvbnNpemUgPSBzZWN0c2l6ZVtzZWN0aW9uXSA+PiAzOwogCiAJCWZvciAoY29kZWFkZHIgPSAwOyBjb2RlYWRkciA8IHRoaXNzZWN0aW9uc2l6ZTsgY29kZWFkZHIrKykgewotCQkJc3RhcnRpbnN0cnVjdCA9IGluc3RydWN0aW9uOwotCQkJbmV4dGluc3RydWN0ID0gKCh1bnNpZ25lZCBjaGFyICopaW5zdHJ1Y3Rpb24pICsgODsKIAkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCi0JCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3djcywgYmFzZWFkZHJlc3MgKyBjb2RlYWRkciwKLQkJCQkgIEZMVVNIKTsKKwkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193Y3MsCisJCQkJCSBiYXNlYWRkcmVzcyArIGNvZGVhZGRyLCBGTFVTSCk7CiAJCQkvKiBXcml0ZSBvdXQgaW5zdHJ1Y3Rpb24gdG8gbG93IGFkZHIgKi8KLQkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd2NzLCAqaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCQlpbnN0cnVjdGlvbiA9ICh1MzIgKikoKHVuc2lnbmVkIGNoYXIgKilpbnN0cnVjdGlvbiArIDQpOwotI2Vsc2UKLQkJCWluc3RydWN0aW9uKys7Ci0jZW5kaWYKKwkJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193Y3MsIGluc3RydWN0aW9uLCBGTFVTSCk7CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsKKwogCQkJLyogV3JpdGUgb3V0IGluc3RydWN0aW9uIHRvIGhpZ2ggYWRkciAqLwotCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsICppbnN0cnVjdGlvbiwgRkxVU0gpOwotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJCWluc3RydWN0aW9uID0gKHUzMiAqKSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uICsgNCk7Ci0jZWxzZQotCQkJaW5zdHJ1Y3Rpb24rKzsKLSNlbmRpZgorCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3djcywgaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKKwkJCWluc3RydWN0aW9uID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJCQlpbmRleCArPSA0OwogCQl9CiAJfQotCisJaW5kZXggPSB1Y29kZV9zdGFydDsKIAlmb3IgKHNlY3Rpb24gPSAwOyBzZWN0aW9uIDwgbnVtc2VjdHM7IHNlY3Rpb24rKykgewotCQlzd2l0Y2ggKGFkYXB0ZXItPmRldmlkKSB7Ci0JCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgotCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopZnctPmRhdGEgKyAoU0VDVElPTl9TSVpFICoKLQkJCQkJCQkJc2VjdGlvbik7Ci0JCQlicmVhazsKLQkJY2FzZSBTTElDXzFHQl9ERVZJQ0VfSUQ6Ci0JCQlpbnN0cnVjdGlvbiA9ICh1MzIgKilmdy0+ZGF0YSArIChTRUNUSU9OX1NJWkUgKgotCQkJCQkJCQlzZWN0aW9uKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQVNTRVJUKDApOwotCQkJYnJlYWs7Ci0JCX0KLQorCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOwogCQliYXNlYWRkcmVzcyA9IHNlY3RzdGFydFtzZWN0aW9uXTsKIAkJaWYgKGJhc2VhZGRyZXNzIDwgMHg4MDAwKQogCQkJY29udGludWU7CiAJCXRoaXNzZWN0aW9uc2l6ZSA9IHNlY3RzaXplW3NlY3Rpb25dID4+IDM7CiAKLS8qICAgICAgICBEQkdfTVNHICgic2xpY29zczogQ09NUEFSRSBzZWN0b25bJXhdIGJhc2VhZGRyWyV4XSBzZWN0bnNpemVbJXhdXG4iLAotCQkodWludClzZWN0aW9uLGJhc2VhZGRyZXNzLHRoaXNzZWN0aW9uc2l6ZSk7Ki8KLQogCQlmb3IgKGNvZGVhZGRyID0gMDsgY29kZWFkZHIgPCB0aGlzc2VjdGlvbnNpemU7IGNvZGVhZGRyKyspIHsKIAkJCS8qIFdyaXRlIG91dCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCi0JCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3djcywKLQkJCQkgIFNMSUNfV0NTX0NPTVBBUkUgfCAoYmFzZWFkZHJlc3MgKyBjb2RlYWRkciksCi0JCQkJICBGTFVTSCk7CisJCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd2NzLAorCQkJCVNMSUNfV0NTX0NPTVBBUkUgfCAoYmFzZWFkZHJlc3MgKyBjb2RlYWRkciksCisJCQkJRkxVU0gpOwogCQkJLyogV3JpdGUgb3V0IGluc3RydWN0aW9uIHRvIGxvdyBhZGRyICovCi0JCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3djcywgKmluc3RydWN0aW9uLCBGTFVTSCk7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCQkJaW5zdHJ1Y3Rpb24gPSAodTMyICopKCh1bnNpZ25lZCBjaGFyICopaW5zdHJ1Y3Rpb24gKyA0KTsKLSNlbHNlCi0JCQlpbnN0cnVjdGlvbisrOwotI2VuZGlmCisJCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd2NzLCBpbnN0cnVjdGlvbiwKKwkJCQkJIEZMVVNIKTsKKwkJCWluc3RydWN0aW9uID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJCQlpbmRleCArPSA0OwogCQkJLyogV3JpdGUgb3V0IGluc3RydWN0aW9uIHRvIGhpZ2ggYWRkciAqLwotCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193Y3MsICppbnN0cnVjdGlvbiwgRkxVU0gpOwotI2lmZGVmIENPTkZJR19YODZfNjQKLQkJCWluc3RydWN0aW9uID0gKHUzMiAqKSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9uICsgNCk7Ci0jZWxzZQotCQkJaW5zdHJ1Y3Rpb24rKzsKLSNlbmRpZgorCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3djcywgaW5zdHJ1Y3Rpb24sCisJCQkJCSBGTFVTSCk7CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsKKwogCQkJLyogQ2hlY2sgU1JBTSBsb2NhdGlvbiB6ZXJvLiBJZiBpdCBpcyBub24temVyby4gQWJvcnQuKi8KLQkJCWZhaWx1cmUgPSByZWFkbCgodTMyIF9faW9tZW0gKikmc2xpY19yZWdzLT5zbGljX3Jlc2V0KTsKKy8qCQkJZmFpbHVyZSA9IHJlYWRsKCh1MzIgX19pb21lbSAqKSZzbGljX3JlZ3MtPnNsaWNfcmVzZXQpOwogCQkJaWYgKGZhaWx1cmUpIHsKLQkJCQlEQkdfTVNHCi0JCQkJICAgICgic2xpY29zczogJXMgRkFJTFVSRSBFWElUIGNvZGVhZGRyWyV4XSBcCi0JCQkJICAgIHRoaXNzZWN0aW9uc2l6ZVsleF0gZmFpbHVyZVsleF1cbiIsCi0JCQkJICAgICBfX2Z1bmNfXywgY29kZWFkZHIsIHRoaXNzZWN0aW9uc2l6ZSwKLQkJCQkgICAgIGZhaWx1cmUpOwogCQkJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCQkJCXJldHVybiAtRUlPOwotCQkJfQorCQkJfSovCiAJCX0KIAl9Ci0vKiAgICBEQkdfTVNHICgic2xpY29zczogQ29tcGFyZSBkb25lXG4iKTsqLwogCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCS8qIEV2ZXJ5dGhpbmcgT0ssIGtpY2sgb2ZmIHRoZSBjYXJkICovCiAJbWRlbGF5KDEwKTsKLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3djcywgU0xJQ19XQ1NfU1RBUlQsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd2NzLCBTTElDX1dDU19TVEFSVCwgRkxVU0gpOwogCiAJLyogc3RhbGwgZm9yIDIwIG1zLCBsb25nIGVub3VnaCBmb3IgdWNvZGUgdG8gaW5pdCBjYXJkCiAJICAgYW5kIHJlYWNoIG1haW5sb29wICovCiAJbWRlbGF5KDIwKTsKIAotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRVhJVCBhZGFwdGVyWyVwXSBjYXJkWyVwXVxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlciwgYWRhcHRlci0+Y2FyZCk7Ci0KIAlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiB9CiAKQEAgLTI0MjgsMTkgKzE5NzAsMTAgQEAKIHsKIAlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOwogCi0vKiAgREJHX01TRyAoIiVzIEVOVEVSIGNhcmQtPmNvbmZpZ19zZXRbJXhdIHBvcnRbJWRdIHBoeXNwb3J0WyVkXSBmdW5jdCNbJWRdXG4iLAotICAgIF9fZnVuY19fLCBjYXJkLT5jb25maWdfc2V0LCBhZGFwdGVyLT5wb3J0LCBhZGFwdGVyLT5waHlzcG9ydCwKLSAgICBhZGFwdGVyLT5mdW5jdGlvbm51bWJlcik7Ci0KLSAgICBzbGljX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsgKi8KLQogCWlmICgoYWRhcHRlci0+Y2FyZCkgJiYgKGNhcmQtPmNvbmZpZ19zZXQpKSB7CiAJCW1lbWNweShhZGFwdGVyLT5tYWNhZGRyLAogCQkgICAgICAgY2FyZC0+Y29uZmlnLk1hY0luZm9bYWRhcHRlci0+ZnVuY3Rpb25udW1iZXJdLm1hY2FkZHJBLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzbGljX2NvbmZpZ19tYWMpKTsKLS8qICAgICAgREJHX01TRyAoIiVzIEFGVEVSIGNvcHlpbmcgZnJvbSBjb25maWcubWFjaW5mbyBpbnRvIGN1cnJtYWNhZGRyXG4iLAotCV9fZnVuY19fKTsKLQlzbGljX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsqLwogCQlpZiAoIShhZGFwdGVyLT5jdXJybWFjYWRkclswXSB8fCBhZGFwdGVyLT5jdXJybWFjYWRkclsxXSB8fAogCQkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkclsyXSB8fCBhZGFwdGVyLT5jdXJybWFjYWRkclszXSB8fAogCQkgICAgICBhZGFwdGVyLT5jdXJybWFjYWRkcls0XSB8fCBhZGFwdGVyLT5jdXJybWFjYWRkcls1XSkpIHsKQEAgLTI0NTEsMTUgKzE5ODQsMTEgQEAKIAkJCSAgICAgICA2KTsKIAkJfQogCX0KLS8qICBEQkdfTVNHICgiJXMgRVhJVCBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+cG9ydCk7Ci0gICAgc2xpY19kYmdfbWFjYWRkcnMoYWRhcHRlcik7ICovCiB9CiAKIHN0YXRpYyB2b2lkIHNsaWNfaW50YWdnX3NldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIHZhbHVlKQogewotCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOwotCi0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pbnRhZ2csIHZhbHVlLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ludGFnZywgdmFsdWUsIEZMVVNIKTsKIAlhZGFwdGVyLT5jYXJkLT5sb2FkbGV2ZWxfY3VycmVudCA9IHZhbHVlOwogfQogCkBAIC0yNDg1LDEwICsyMDE0LDYgQEAKIAlzdHJ1Y3QgYXRrX2ZydSAqcGF0a2ZydTsKIAl1bmlvbiBvZW1mcnUgKnBvZW1mcnU7CiAKLQlEQkdfTVNHCi0JICAgICgic2xpY29zczogJXMgRU5URVIgY2FyZFslcF0gYWRhcHRlclslcF0gY2FyZC0+c3RhdGVbJXhdIFwKLQkgICAgc2l6ZVslZF1cbiIsIF9fZnVuY19fLCBjYXJkLCBhZGFwdGVyLCBjYXJkLT5zdGF0ZSwgY2FyZC0+Y2FyZF9zaXplKTsKLQogCS8qIFJlc2V0IGV2ZXJ5dGhpbmcgZXhjZXB0IFBDSSBjb25maWd1cmF0aW9uIHNwYWNlICovCiAJc2xpY19zb2Z0X3Jlc2V0KGFkYXB0ZXIpOwogCkBAIC0yNDk2LDkgKzIwMjEsOSBAQAogCXN0YXR1cyA9IHNsaWNfY2FyZF9kb3dubG9hZChhZGFwdGVyKTsKIAogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHX0VSUk9SKCJTTElDIGRvd25sb2FkIGZhaWxlZCBidXMgJWQgc2xvdCAlZFxuIiwKLQkJCSAgKHVpbnQpIGFkYXB0ZXItPmJ1c251bWJlciwKLQkJCSAgKHVpbnQpIGFkYXB0ZXItPnNsb3RudW1iZXIpOworCQlkZXZfZXJyKCZhZGFwdGVyLT5wY2lkZXYtPmRldiwKKwkJCSJkb3dubG9hZCBmYWlsZWQgYnVzICVkIHNsb3QgJWRcbiIsCisJCQlhZGFwdGVyLT5idXNudW1iZXIsIGFkYXB0ZXItPnNsb3RudW1iZXIpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIApAQCAtMjUxMCwzMyArMjAzNSwyNCBAQAogCQlwaHlzX2NvbmZpZ2wgPSBTTElDX0dFVF9BRERSX0xPVyhwaHlzX2NvbmZpZyk7CiAJCXBoeXNfY29uZmlnaCA9IFNMSUNfR0VUX0FERFJfSElHSChwaHlzX2NvbmZpZyk7CiAKLQkJREJHX01TRygic2xpY29zczogJXMgRWVwcm9tIGluZm8gIGFkYXB0ZXIgWyVwXVxuICAgICIKLQkJCSJzaXplICAgICAgICBbJXhdXG4gICAgcGVlcHJvbSAgICAgWyVwXVxuICAgICIKLQkJCSJwaHlzX2NvbmZpZyBbJXBdXG4gICAgcGh5c19jb25maWdsWyV4XVxuICAgICIKLQkJCSJwaHlzX2NvbmZpZ2hbJXhdXG4iLAotCQkJX19mdW5jX18sIGFkYXB0ZXIsCi0JCQkodTMyKXNpemVvZihzdHJ1Y3Qgc2xpY19lZXByb20pLAotCQkJcGVlcHJvbSwgKHZvaWQgKikgcGh5c19jb25maWcsIHBoeXNfY29uZmlnbCwKLQkJCXBoeXNfY29uZmlnaCk7CiAJCWlmICghcGVlcHJvbSkgewotCQkJREJHX0VSUk9SCi0JCQkgICAgKCJTTElDIGVlcHJvbSByZWFkIGZhaWxlZCB0byBnZXQgbWVtb3J5IGJ1cyAlZCBcCi0JCQkgICAgc2xvdCAlZFxuIiwKLQkJCSAgICAgKHVpbnQpIGFkYXB0ZXItPmJ1c251bWJlciwKLQkJCSAgICAgKHVpbnQpIGFkYXB0ZXItPnNsb3RudW1iZXIpOworCQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCisJCQkJImVlcHJvbSByZWFkIGZhaWxlZCB0byBnZXQgbWVtb3J5ICIKKwkJCQkiYnVzICVkIHNsb3QgJWRcbiIsIGFkYXB0ZXItPmJ1c251bWJlciwKKwkJCQlhZGFwdGVyLT5zbG90bnVtYmVyKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9IGVsc2UgewogCQkJbWVtc2V0KHBlZXByb20sIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19lZXByb20pKTsKIAkJfQotCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PRkYsIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2ljciwgSUNSX0lOVF9PRkYsIEZMVVNIKTsKIAkJbWRlbGF5KDEpOwogCQlwc2htZW0gPSAoc3RydWN0IHNsaWNfc2htZW0gKilhZGFwdGVyLT5waHlzX3NobWVtOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5iaXQ2NHJlZ2xvY2subG9jaywKIAkJCQkJYWRhcHRlci0+Yml0NjRyZWdsb2NrLmZsYWdzKTsKLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCAwLCBET05UX0ZMVVNIKTsKLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3AsCi0JCQkgIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmlzciksIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIDAsIERPTlRfRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfaXNwLAorCQkJCSBTTElDX0dFVF9BRERSX0xPVygmcHNobWVtLT5pc3IpLCBGTFVTSCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmJpdDY0cmVnbG9jay5sb2NrLAogCQkJCQlhZGFwdGVyLT5iaXQ2NHJlZ2xvY2suZmxhZ3MpOwogCkBAIC0yNTQ0LDQxICsyMDYwLDMzIEBACiAKIAkJZm9yICg7OykgewogCQkJaWYgKGFkYXB0ZXItPnBzaG1lbS0+aXNyKSB7Ci0JCQkJREJHX01TRygiJXMgc2htZW1bJXBdIHNobWVtLT5pc3JbJXhdXG4iLAotCQkJCQlfX2Z1bmNfXywgYWRhcHRlci0+cHNobWVtLAotCQkJCQlhZGFwdGVyLT5wc2htZW0tPmlzcik7Ci0KIAkJCQlpZiAoYWRhcHRlci0+cHNobWVtLT5pc3IgJiBJU1JfVVBDKSB7CiAJCQkJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKLQkJCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKLQkJCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfaXNwLAotCQkJCQkJICAgIDAsCi0JCQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkJCQkgICAgMCwgRkxVU0gpOwotCQkJCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX2lzciwgMCwKLQkJCQkJCSAgRkxVU0gpOworCQkJCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsCisJCQkJCQkmc2xpY19yZWdzLT5zbGljX2lzcCwgMCwKKwkJCQkJCSZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkJCTAsIEZMVVNIKTsKKwkJCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzciwKKwkJCQkJCQkgMCwgRkxVU0gpOwogCiAJCQkJCXNsaWNfdXByX3JlcXVlc3RfY29tcGxldGUoYWRhcHRlciwgMCk7CiAJCQkJCWJyZWFrOwogCQkJCX0gZWxzZSB7CiAJCQkJCWFkYXB0ZXItPnBzaG1lbS0+aXNyID0gMDsKLQkJCQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19pc3IsIDAsCi0JCQkJCQkgIEZMVVNIKTsKKwkJCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX2lzciwKKwkJCQkJCQkgMCwgRkxVU0gpOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJbWRlbGF5KDEpOwogCQkJCWkrKzsKIAkJCQlpZiAoaSA+IDUwMDApIHsKLQkJCQkJREJHX0VSUk9SCi0JCQkJCSAgICAoIlNMSUM6ICVkIGNvbmZpZyBkYXRhIGZldGNoIHRpbWVkXAotCQkJCQkgICAgICBvdXQhXG4iLCBhZGFwdGVyLT5wb3J0KTsKLQkJCQkJREJHX01TRygiJXMgc2htZW1bJXBdIHNobWVtLT5pc3JbJXhdXG4iLAotCQkJCQkJX19mdW5jX18sIGFkYXB0ZXItPnBzaG1lbSwKLQkJCQkJCWFkYXB0ZXItPnBzaG1lbS0+aXNyKTsKLQkJCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKLQkJCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfaXNwLCAwLAotCQkJCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJCQkJICAgIDAsIEZMVVNIKTsKKwkJCQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCisJCQkJCQkiJWQgY29uZmlnIGRhdGEgZmV0Y2ggdGltZWQgb3V0IVxuIiwKKwkJCQkJCWFkYXB0ZXItPnBvcnQpOworCQkJCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsCisJCQkJCQkmc2xpY19yZWdzLT5zbGljX2lzcCwgMCwKKwkJCQkJCSZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkJCTAsIEZMVVNIKTsKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJfQogCQkJfQpAQCAtMjYxNCw3ICsyMTIyLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJY2FyZC0+Y29uZmlnLkVlcHJvbVZhbGlkID0gRkFMU0U7CisJCWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCA9IGZhbHNlOwogCiAJCS8qICBzZWUgaWYgdGhlIEVFUFJPTSBpcyB2YWxpZCBieSBjaGVja2luZyBpdCdzIGNoZWNrc3VtICovCiAJCWlmICgoZWVjb2Rlc2l6ZSA8PSBNQVhfRUVDT0RFX1NJWkUpICYmCkBAIC0yNjMzLDcgKzIxNDEsNyBAQAogCQkJICAgIHdlIHdvdWxkbid0IG5lZWQgdGhpcyBzaGl0CiAJCQkqLwogCQkJaWYgKGVlX2Noa3N1bSA9PSBjYWxjX2Noa3N1bSkKLQkJCQljYXJkLT5jb25maWcuRWVwcm9tVmFsaWQgPSBUUlVFOworCQkJCWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCA9IHRydWU7CiAJCX0KIAkJLyogIGNvcHkgaW4gdGhlIERSQU0gc2l6ZSAqLwogCQljYXJkLT5jb25maWcuRHJhbVNpemUgPSBkcmFtc2l6ZTsKQEAgLTI2NDMsOCArMjE1MSw2IEBACiAJCQltZW1jcHkoJmNhcmQtPmNvbmZpZy5NYWNJbmZvW2ldLAogCQkJICAgICAgICZwbWFjW2ldLCBzaXplb2Yoc3RydWN0IHNsaWNfY29uZmlnX21hYykpOwogCQl9Ci0vKiAgICAgIERCR19NU0cgKCIlcyBFRVBST00gQ2hlY2tzdW0gR29vZD8gJWQgIE1hY0FkZHJlc3NcbiIsX19mdW5jX18sCi0JCWNhcmQtPmNvbmZpZy5FZXByb21WYWxpZCk7ICovCiAKIAkJLyogIGNvcHkgdGhlIEFsYWNyaXRlY2ggRlJVIGluZm9ybWF0aW9uICovCiAJCWNhcmQtPmNvbmZpZy5GcnVGb3JtYXQgPSBmcnVmb3JtYXQ7CkBAIC0yNjU0LDIwICsyMTYwLDE0IEBACiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAogCQkJCSAgICBzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSwKIAkJCQkgICAgcGVlcHJvbSwgcGh5c19jb25maWcpOwotCQlEQkdfTVNHCi0JCSAgICAoInNsaWNvc3M6ICVzIGFkYXB0ZXIlZCBbJXBdIHNpemVbJXhdIEZSRUUgcGVlcHJvbVslcF0gXAotCQkgICAgIHBoeXNfY29uZmlnWyVwXVxuIiwKLQkJICAgICBfX2Z1bmNfXywgYWRhcHRlci0+cG9ydCwgYWRhcHRlciwKLQkJICAgICAodTMyKSBzaXplb2Yoc3RydWN0IHNsaWNfZWVwcm9tKSwgcGVlcHJvbSwKLQkJICAgICAodm9pZCAqKSBwaHlzX2NvbmZpZyk7CiAKIAkJaWYgKCghY2FyZC0+Y29uZmlnLkVlcHJvbVZhbGlkKSAmJgogCQkgICAgKGFkYXB0ZXItPnJlZ19wYXJhbXMuZmFpbF9vbl9iYWRfZWVwcm9tKSkgewotCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKLQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2lzcCwKLQkJCQkgICAgMCwgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIDAsIEZMVVNIKTsKLQkJCURCR19FUlJPUgotCQkJICAgICgidW5zdXBwb3J0ZWQgQ09ORklHVVJBVElPTiAgRUVQUk9NIGludmFsaWRcbiIpOworCQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLCAmc2xpY19yZWdzLT5zbGljX2lzcCwgMCwKKwkJCQkJICZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkJIDAsIEZMVVNIKTsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJCSJ1bnN1cHBvcnRlZCBDT05GSUdVUkFUSU9OIEVFUFJPTSBpbnZhbGlkXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTI2NzUsNzQgKzIxNzUsMjYgQEAKIAl9CiAKIAlpZiAoc2xpY19jYXJkX2Rvd25sb2FkX2dicmN2KGFkYXB0ZXIpKSB7Ci0JCURCR19FUlJPUigiJXMgdW5hYmxlIHRvIGRvd25sb2FkIEdCIHJlY2VpdmUgbWljcm9jb2RlXG4iLAotCQkJICBfX2Z1bmNfXyk7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBjaWRldi0+ZGV2LAorCQkJInVuYWJsZSB0byBkb3dubG9hZCBHQiByZWNlaXZlIG1pY3JvY29kZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZykgewotCQlEQkdfTVNHCi0JCSAgICAoIkR5bmFtaWMgSW50ZXJydXB0IEFnZ3JlZ2F0aW9uW0VOQUJMRURdOiBzbGljJWQgXAotCQkgICAgIFNFVCBpbnRhZ2cgdG8gJWRcbiIsCi0JCSAgICAgY2FyZC0+Y2FyZG51bSwgMCk7CisJaWYgKHNsaWNfZ2xvYmFsLmR5bmFtaWNfaW50YWdnKQogCQlzbGljX2ludGFnZ19zZXQoYWRhcHRlciwgMCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXNsaWNfaW50YWdnX3NldChhZGFwdGVyLCBpbnRhZ2dfZGVsYXkpOwotCQlEQkdfTVNHCi0JCSAgICAoIkR5bmFtaWMgSW50ZXJydXB0IEFnZ3JlZ2F0aW9uW0RJU0FCTEVEXTogc2xpYyVkIFwKLQkJICAgICBTRVQgaW50YWdnIHRvICVkXG4iLAotCQkgICAgIGNhcmQtPmNhcmRudW0sIGludGFnZ19kZWxheSk7Ci0JfQogCiAJLyoKIAkgKiAgSW5pdGlhbGl6ZSBwaW5nIHN0YXR1cyB0byAib2siCiAJICovCiAJY2FyZC0+cGluZ3N0YXR1cyA9IElTUl9QSU5HTUFTSzsKIAotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0JaWYgKCFjYXJkLT5kdW1wYnVmZmVyKSB7Ci0JCWNhcmQtPmR1bXBidWZmZXIgPSBrbWFsbG9jKERVTVBfUEFHRV9TSVpFLCBHRlBfQVRPTUlDKTsKLQotCQlBU1NFUlQoY2FyZC0+ZHVtcGJ1ZmZlcik7Ci0JCWlmIChjYXJkLT5kdW1wYnVmZmVyID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JLyoKLQkgKiAgU21lYXIgdGhlIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlIGFuZCB0aGVuIG9idGFpbgotCSAqICB0aGUgUEhZU0lDQUwgYWRkcmVzcyBvZiB0aGlzIHN0cnVjdHVyZQotCSAqLwotCW1lbXNldChjYXJkLT5kdW1wYnVmZmVyLCAwLCBEVU1QX1BBR0VfU0laRSk7Ci0JY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzID0gdmlydF90b19idXMoY2FyZC0+ZHVtcGJ1ZmZlcik7Ci0JY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzaCA9IFNMSUNfR0VUX0FERFJfSElHSChjYXJkLT5kdW1wYnVmZmVyX3BoeXMpOwotCWNhcmQtPmR1bXBidWZmZXJfcGh5c2wgPSBTTElDX0dFVF9BRERSX0xPVyhjYXJkLT5kdW1wYnVmZmVyX3BoeXMpOwotCi0JLyoKLQkgKiAgQWxsb2NhdGUgQ09NTUFORCBCVUZGRVIKLQkgKi8KLQlpZiAoIWNhcmQtPmNtZGJ1ZmZlcikgewotCQljYXJkLT5jbWRidWZmZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHVtcF9jbWQpLCBHRlBfQVRPTUlDKTsKLQotCQlBU1NFUlQoY2FyZC0+Y21kYnVmZmVyKTsKLQkJaWYgKGNhcmQtPmNtZGJ1ZmZlciA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCS8qCi0JICogIFNtZWFyIHRoZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZSBhbmQgdGhlbiBvYnRhaW4KLQkgKiAgdGhlIFBIWVNJQ0FMIGFkZHJlc3Mgb2YgdGhpcyBzdHJ1Y3R1cmUKLQkgKi8KLQltZW1zZXQoY2FyZC0+Y21kYnVmZmVyLCAwLCBzaXplb2Yoc3RydWN0IGR1bXBfY21kKSk7Ci0JY2FyZC0+Y21kYnVmZmVyX3BoeXMgPSB2aXJ0X3RvX2J1cyhjYXJkLT5jbWRidWZmZXIpOwotCWNhcmQtPmNtZGJ1ZmZlcl9waHlzaCA9IFNMSUNfR0VUX0FERFJfSElHSChjYXJkLT5jbWRidWZmZXJfcGh5cyk7Ci0JY2FyZC0+Y21kYnVmZmVyX3BoeXNsID0gU0xJQ19HRVRfQUREUl9MT1coY2FyZC0+Y21kYnVmZmVyX3BoeXMpOwotI2VuZGlmCi0KIAkvKgogCSAqIExhc3RseSwgbWFyayBvdXIgY2FyZCBzdGF0ZSBhcyB1cCBhbmQgcmV0dXJuIHN1Y2Nlc3MKIAkgKi8KIAljYXJkLT5zdGF0ZSA9IENBUkRfVVA7CiAJY2FyZC0+cmVzZXRfaW5fcHJvZ3Jlc3MgPSAwOwotCURCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgY2FyZFslcF0gYWRhcHRlclslcF0gY2FyZC0+c3RhdGVbJXhdXG4iLAotCQlfX2Z1bmNfXywgY2FyZCwgYWRhcHRlciwgY2FyZC0+c3RhdGUpOwogCiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQpAQCAtMjc1NiwxMCArMjIwOCw2IEBACiAJdWludCBpOwogCXVpbnQgcmRob3N0aWRfb2Zmc2V0ID0gMDsKIAotCURCR19NU0coInNsaWNvc3M6ICVzIGFkYXB0ZXJbJXBdIHNsb3RbJXhdIGJ1c1sleF0gcG9ydFsleF1cbiIsCi0JCV9fZnVuY19fLCBhZGFwdGVyLCBhZGFwdGVyLT5zbG90bnVtYmVyLCBhZGFwdGVyLT5idXNudW1iZXIsCi0JCWFkYXB0ZXItPnBvcnQpOwotCiAJc3dpdGNoIChhZGFwdGVyLT5kZXZpZCkgewogCWNhc2UgU0xJQ18yR0JfREVWSUNFX0lEOgogCQlyZGhvc3RpZF9vZmZzZXQgPSBTTElDX1JESE9TVElEXzJHQjsKQEAgLTI3NzUsMTEgKzIyMjMsOSBAQAogCWhvc3RpZF9yZWcgPQogCSAgICAodTE2IF9faW9tZW0gKikgKCgodTggX19pb21lbSAqKSAoYWRhcHRlci0+c2xpY19yZWdzKSkgKwogCSAgICByZGhvc3RpZF9vZmZzZXQpOwotCURCR19NU0coInNsaWNvc3M6ICVzICpob3N0aWRfcmVnWyVwXSA9PSAiLCBfX2Z1bmNfXywgaG9zdGlkX3JlZyk7CiAKIAkvKiByZWFkIHRoZSAxNiBiaXQgaG9zdGlkIGZyb20gU1JBTSAqLwogCWNhcmRfaG9zdGlkID0gKHVzaG9ydCkgcmVhZHcoaG9zdGlkX3JlZyk7Ci0JREJHX01TRygiIGNhcmRfaG9zdGlkWyV4XVxuIiwgY2FyZF9ob3N0aWQpOwogCiAJLyogSW5pdGlhbGl6ZSBhIG5ldyBjYXJkIHN0cnVjdHVyZSBpZiBuZWVkIGJlICovCiAJaWYgKGNhcmRfaG9zdGlkID09IFNMSUNfSE9TVElEX0RFRkFVTFQpIHsKQEAgLTI3ODksMTcgKzIyMzUsNiBAQAogCiAJCWNhcmQtPm5leHQgPSBzbGljX2dsb2JhbC5zbGljX2NhcmQ7CiAJCXNsaWNfZ2xvYmFsLnNsaWNfY2FyZCA9IGNhcmQ7Ci0jaWYgREJHCi0JCWlmIChhZGFwdGVyLT5kZXZpZCA9PSBTTElDXzJHQl9ERVZJQ0VfSUQpIHsKLQkJCURCR19NU0cKLQkJCSAgICAoIlNMSUNPU1MgPT0+IEluaXRpYWxpemUgMiBQb3J0IEdpZ2FiaXQgU2VydmVyIFwKLQkJCSAgICAgYW5kIFN0b3JhZ2UgQWNjZWxlcmF0b3JcbiIpOwotCQl9IGVsc2UgewotCQkJREJHX01TRwotCQkJICAgICgiU0xJQ09TUyA9PT4gSW5pdGlhbGl6ZSAxIFBvcnQgR2lnYWJpdCBTZXJ2ZXIgXAotCQkJICAgICBhbmQgU3RvcmFnZSBBY2NlbGVyYXRvclxuIik7Ci0JCX0KLSNlbmRpZgogCQljYXJkLT5idXNudW1iZXIgPSBhZGFwdGVyLT5idXNudW1iZXI7CiAJCWNhcmQtPnNsb3RudW1iZXIgPSBhZGFwdGVyLT5zbG90bnVtYmVyOwogCkBAIC0yODEyLDIzICsyMjQ3LDExIEBACiAJCQl9CiAJCX0KIAkJc2xpY19nbG9iYWwubnVtX3NsaWNfY2FyZHMrKzsKLQkJREJHX01TRygiXG5DQVJETlVNID09ICVkICBUb3RhbCAlZCAgQ2FyZFslcF1cblxuIiwKLQkJCWNhcmQtPmNhcmRudW0sIHNsaWNfZ2xvYmFsLm51bV9zbGljX2NhcmRzLCBjYXJkKTsKIAogCQlzbGljX2RlYnVnX2NhcmRfY3JlYXRlKGNhcmQpOwogCX0gZWxzZSB7Ci0JCURCR19NU0cKLQkJICAgICgic2xpY29zczogJXMgQ0FSRCBhbHJlYWR5IGFsbG9jYXRlZCwgZmluZCB0aGUgXAotCQkgICAgIGNvcnJlY3QgY2FyZFxuIiwgX19mdW5jX18pOwogCQkvKiBDYXJkIGV4aXN0cywgZmluZCB0aGUgY2FyZCB0aGlzIGFkYXB0ZXIgYmVsb25ncyB0byAqLwogCQl3aGlsZSAoY2FyZCkgewotCQkJREJHX01TRwotCQkJICAgICgic2xpY29zczogJXMgY2FyZFslcF0gc2xvdFsleF0gYnVzWyV4XSBcCi0JCQkgICAgICBhZGFwdHBvcnRbJXBdIGhvc3RpZFsleF0gY2FyZG51bVsleF1cbiIsCi0JCQkgICAgIF9fZnVuY19fLCBjYXJkLCBjYXJkLT5zbG90bnVtYmVyLAotCQkJICAgICBjYXJkLT5idXNudW1iZXIsIGNhcmQtPmFkYXB0ZXJbYWRhcHRlci0+cG9ydF0sCi0JCQkgICAgIGNhcmRfaG9zdGlkLCBjYXJkLT5jYXJkbnVtKTsKLQogCQkJaWYgKGNhcmQtPmNhcmRudW0gPT0gY2FyZF9ob3N0aWQpCiAJCQkJYnJlYWs7CiAJCQljYXJkID0gY2FyZC0+bmV4dDsKQEAgLTI4NjEsMTQgKzIyODQsOSBAQAogCX0KIAlpZiAoIXBoeXNjYXJkKSB7CiAJCS8qIG5vIHN0cnVjdHVyZSBhbGxvY2F0ZWQgZm9yIHRoaXMgcGh5c2ljYWwgY2FyZCB5ZXQgKi8KLQkJcGh5c2NhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGh5c2NhcmQpLCBHRlBfQVRPTUlDKTsKKwkJcGh5c2NhcmQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcGh5c2NhcmQpLCBHRlBfS0VSTkVMKTsKIAkJQVNTRVJUKHBoeXNjYXJkKTsKIAotCQlEQkdfTVNHCi0JCSAgICAoIlxuJXMgQWxsb2NhdGUgYSBQSFlTSUNBTGNhcmQ6XG4gICAgUEhZU0lDQUxfQ2FyZFslcF1cblwKLQkJICAgICBMb2dpY2FsQ2FyZCAgWyVwXVxuICAgIGFkYXB0ZXIgICAgICBbJXBdXG4iLAotCQkgICAgIF9fZnVuY19fLCBwaHlzY2FyZCwgY2FyZCwgYWRhcHRlcik7Ci0KIAkJcGh5c2NhcmQtPm5leHQgPSBzbGljX2dsb2JhbC5waHlzX2NhcmQ7CiAJCXNsaWNfZ2xvYmFsLnBoeXNfY2FyZCA9IHBoeXNjYXJkOwogCQlwaHlzY2FyZC0+YWRhcHRlcnNfYWxsb2NkID0gMTsKQEAgLTI4ODEsOCArMjI5OSw2IEBACiAJQVNTRVJUKHBoeXNjYXJkLT5hZGFwdGVyW2FkYXB0ZXItPnBoeXNwb3J0XSA9PSBOVUxMKTsKIAlwaHlzY2FyZC0+YWRhcHRlclthZGFwdGVyLT5waHlzcG9ydF0gPSBhZGFwdGVyOwogCWFkYXB0ZXItPnBoeXNjYXJkID0gcGh5c2NhcmQ7Ci0JREJHX01TRygiICAgIFBIWVNJQ0FMX1BvcnQgJWQgICAgTG9naWNhbF9Qb3J0ICAlZFxuIiwgYWRhcHRlci0+cGh5c3BvcnQsCi0JCWFkYXB0ZXItPnBvcnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODkwLDE2ICsyMzA2LDEyIEBACiBzdGF0aWMgdm9pZCBzbGljX3NvZnRfcmVzZXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaWYgKGFkYXB0ZXItPmNhcmQtPnN0YXRlID09IENBUkRfVVApIHsKLQkJREJHX01TRygic2xpY29zczogJXMgUVVJRVNDRSBhZGFwdGVyWyVwXSBjYXJkWyVwXSBkZXZpZFsleF1cbiIsCi0JCQlfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+Y2FyZCwgYWRhcHRlci0+ZGV2aWQpOwotCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3F1aWVzY2UsIDAsIEZMVVNIKTsKKwkJc2xpY19yZWczMl93cml0ZSgmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3F1aWVzY2UsIDAsIEZMVVNIKTsKIAkJbWRlbGF5KDEpOwogCX0KLS8qICAgICAgREJHX01TRyAoInNsaWNvc3M6ICVzICglcykgYWRhcHRlclslcF0gY2FyZFslcF0gZGV2aWRbJXhdXG4iLAotCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIsIGFkYXB0ZXItPmNhcmQsCi0JICAgYWRhcHRlci0+ZGV2aWQpOyAqLwogCi0JV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19yZXNldCwgU0xJQ19SRVNFVF9NQUdJQywgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19yZXNldCwgU0xJQ19SRVNFVF9NQUdJQywKKwkJCSBGTFVTSCk7CiAJbWRlbGF5KDEpOwogfQogCkBAIC0yOTA5LDEwICsyMzIxLDYgQEAKIAl1MzIgUmNyUmVzZXQ7CiAJX19pb21lbSBzdHJ1Y3Qgc2xpY19yZWdzICpzbGljX3JlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHNsaWNfaW50ZXJmYWNlX2VuYWJsZVslcF0oJWQpXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLAotCQlhZGFwdGVyLT5jYXJkaW5kZXgpOwotCiAJaWYgKGxpbmtjaGFuZ2UpIHsKIAkJLyogU2V0dXAgTUFDICovCiAJCXNsaWNfbWFjX2NvbmZpZyhhZGFwdGVyKTsKQEAgLTI5MjgsOSArMjMzNiw3IEBACiAJCQkgR1hDUl9YTVRFTiB8CS8qIEVuYWJsZSB0cmFuc21pdCAgKi8KIAkJCSBHWENSX1BBVVNFRU4pOwkvKiBFbmFibGUgcGF1c2UgICAgICovCiAKLQkJREJHX01TRygic2xpY29zczogRkRYIGFkYXB0WyVwXSBzZXQgeG10Y2ZnIHRvIFsleF1cbiIsIGFkYXB0ZXIsCi0JCQl2YWx1ZSk7Ci0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193eGNmZywgdmFsdWUsIEZMVVNIKTsKIAogCQkvKiBTZXR1cCByY3ZjZmcgbGFzdCAqLwogCQl2YWx1ZSA9IChSY3JSZXNldCB8CS8qIFJlc2V0LCBpZiBsaW5rY2hhbmdlICovCkBAIC0yOTQzLDkgKzIzNDksNyBAQAogCQl2YWx1ZSA9IChHWENSX1JFU0VUIHwJLyogQWx3YXlzIHJlc2V0ICAgICAqLwogCQkJIEdYQ1JfWE1URU4pOwkvKiBFbmFibGUgdHJhbnNtaXQgICovCiAKLQkJREJHX01TRygic2xpY29zczogSERYIGFkYXB0WyVwXSBzZXQgeG10Y2ZnIHRvIFsleF1cbiIsIGFkYXB0ZXIsCi0JCQl2YWx1ZSk7Ci0JCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193eGNmZywgdmFsdWUsIEZMVVNIKTsKIAogCQkvKiBTZXR1cCByY3ZjZmcgbGFzdCAqLwogCQl2YWx1ZSA9IChSY3JSZXNldCB8CS8qIFJlc2V0LCBpZiBsaW5rY2hhbmdlICovCkBAIC0yOTYyLDggKzIzNjYsNyBAQAogCWlmIChhZGFwdGVyLT5tYWNvcHRzICYgTUFDX1BST01JU0MpCiAJCXZhbHVlIHw9IEdSQ1JfUkNWQUxMOwogCi0JREJHX01TRygic2xpY29zczogYWRhcHRbJXBdIHNldCByY3ZjZmcgdG8gWyV4XVxuIiwgYWRhcHRlciwgdmFsdWUpOwotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3JjZmcsIHZhbHVlLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dyY2ZnLCB2YWx1ZSwgRkxVU0gpOwogfQogCiAvKgpAQCAtMjk3OSwxOCArMjM4MiwxOCBAQAogCXZhbHVlID0gKEdYQ1JfUkVTRVQgfAkvKiBBbHdheXMgcmVzZXQgKi8KIAkJIEdYQ1JfUEFVU0VFTik7CS8qIEVuYWJsZSBwYXVzZSAqLwogCi0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193eGNmZywgdmFsdWUsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3hjZmcsIHZhbHVlLCBGTFVTSCk7CiAKIAl2YWx1ZSA9IChHUkNSX1JFU0VUIHwJLyogQWx3YXlzIHJlc2V0ICAgICAgKi8KIAkJIEdSQ1JfQ1RMRU4gfAkvKiBFbmFibGUgQ1RMIGZyYW1lcyAqLwogCQkgR1JDUl9BRERSQUVOIHwJLyogQWRkcmVzcyBBIGVuYWJsZSAgKi8KIAkJIChHUkNSX0hBU0hTSVpFIDw8IEdSQ1JfSEFTSFNJWkVfU0hJRlQpKTsKIAotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3JjZmcsIHZhbHVlLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dyY2ZnLCB2YWx1ZSwgRkxVU0gpOwogCiAJLyogcG93ZXIgZG93biBwaHkgKi8KIAlwaHlfY29uZmlnID0gKE1JSUNSX1JFR19QQ1IgfCAoUENSX1BPV0VSRE9XTikpOwotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3BoeSwgcGh5X2NvbmZpZywgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cGh5LCBwaHlfY29uZmlnLCBGTFVTSCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNsaWNfY29uZmlnX2dldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGNvbmZpZywKQEAgLTMwMTIsMTggKzI0MTUsMTQgQEAKIAogCXZhbHVlID0gKih1MzIgKikgJmFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdOwogCXZhbHVlID0gbnRvaGwodmFsdWUpOwotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYWwsIHZhbHVlLCBGTFVTSCk7Ci0JV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY193cmFkZHJibCwgdmFsdWUsIEZMVVNIKTsKKwlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYWwsIHZhbHVlLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dyYWRkcmJsLCB2YWx1ZSwgRkxVU0gpOwogCiAJdmFsdWUyID0gKHUzMikgKChhZGFwdGVyLT5jdXJybWFjYWRkclswXSA8PCA4IHwKIAkJCSAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0pICYgMHhGRkZGKTsKIAotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYWgsIHZhbHVlMiwgRkxVU0gpOwotCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfd3JhZGRyYmgsIHZhbHVlMiwgRkxVU0gpOwotCi0JREJHX01TRygiJXMgdmFsdWUxWyV4XSB2YWx1ZTJbJXhdIENhbGwgc2xpY19tY2FzdF9zZXRfbWFza1xuIiwKLQkJX19mdW5jX18sIHZhbHVlLCB2YWx1ZTIpOwotCXNsaWNfZGJnX21hY2FkZHJzKGFkYXB0ZXIpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193cmFkZHJhaCwgdmFsdWUyLCBGTFVTSCk7CisJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3dyYWRkcmJoLCB2YWx1ZTIsIEZMVVNIKTsKIAogCS8qIFdyaXRlIG91ciBtdWx0aWNhc3QgbWFzayBvdXQgdG8gdGhlIGNhcmQuICBUaGlzIGlzIGRvbmUgKi8KIAkvKiBoZXJlIGluIGFkZGl0aW9uIHRvIHRoZSBzbGljX21jYXN0X2FkZHJfc2V0IHJvdXRpbmUgICAgICovCkBAIC0zMDU4LDcgKzI0NTcsNyBAQAogCX0KIAogCS8qIHdyaXRlIG1hYyBjb25maWcgKi8KLQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3dtY2ZnLCB2YWx1ZSwgRkxVU0gpOworCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY193bWNmZywgdmFsdWUsIEZMVVNIKTsKIAogCS8qIHNldHVwIG1hYyBhZGRyZXNzZXMgKi8KIAlzbGljX21hY19hZGRyZXNzX2NvbmZpZyhhZGFwdGVyKTsKQEAgLTMwNzIsMTggKzI0NzEsMTUgQEAKIAl1MTYgKmRob3N0MiA9ICh1MTYgKikmZXRoZXJfZnJhbWUtPmV0aGVyX2Rob3N0WzRdOwogCWJvb2wgZXF1YWxhZGRyOwogCi0JaWYgKG9wdHMgJiBNQUNfUFJPTUlTQykgewotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIFBST01JU0NVT1VTLiBBY2NlcHQgZnJhbWVcbiIsCi0JCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKLQkJcmV0dXJuIFRSVUU7Ci0JfQorCWlmIChvcHRzICYgTUFDX1BST01JU0MpCisJCXJldHVybiB0cnVlOwogCiAJaWYgKCgqZGhvc3Q0ID09IDB4RkZGRkZGRkYpICYmICgqZGhvc3QyID09IDB4RkZGRikpIHsKIAkJaWYgKG9wdHMgJiBNQUNfQkNBU1QpIHsKIAkJCWFkYXB0ZXItPnJjdl9icm9hZGNhc3RzKys7Ci0JCQlyZXR1cm4gVFJVRTsKKwkJCXJldHVybiB0cnVlOwogCQl9IGVsc2UgewotCQkJcmV0dXJuIEZBTFNFOworCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJfQogCkBAIC0zMDkxLDcgKzI0ODcsNyBAQAogCQlpZiAob3B0cyAmIE1BQ19BTExNQ0FTVCkgewogCQkJYWRhcHRlci0+cmN2X211bHRpY2FzdHMrKzsKIAkJCWFkYXB0ZXItPnN0YXRzLm11bHRpY2FzdCsrOwotCQkJcmV0dXJuIFRSVUU7CisJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCQlpZiAob3B0cyAmIE1BQ19NQ0FTVCkgewogCQkJc3RydWN0IG1jYXN0X2FkZHJlc3MgKm1jYWRkciA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7CkBAIC0zMTAzLDIwICsyNDk5LDIwIEBACiAJCQkJaWYgKGVxdWFsYWRkcikgewogCQkJCQlhZGFwdGVyLT5yY3ZfbXVsdGljYXN0cysrOwogCQkJCQlhZGFwdGVyLT5zdGF0cy5tdWx0aWNhc3QrKzsKLQkJCQkJcmV0dXJuIFRSVUU7CisJCQkJCXJldHVybiB0cnVlOwogCQkJCX0KIAkJCQltY2FkZHIgPSBtY2FkZHItPm5leHQ7CiAJCQl9Ci0JCQlyZXR1cm4gRkFMU0U7CisJCQlyZXR1cm4gZmFsc2U7CiAJCX0gZWxzZSB7Ci0JCQlyZXR1cm4gRkFMU0U7CisJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CiAJaWYgKG9wdHMgJiBNQUNfRElSRUNURUQpIHsKIAkJYWRhcHRlci0+cmN2X3VuaWNhc3RzKys7Ci0JCXJldHVybiBUUlVFOworCQlyZXR1cm4gdHJ1ZTsKIAl9Ci0JcmV0dXJuIEZBTFNFOworCXJldHVybiBmYWxzZTsKIAogfQogCkBAIC0zMTI1LDgwICsyNTIxLDI4IEBACiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHB0cjsKIAotCURCR19NU0coIiVzIEVOVEVSICglcylcbiIsIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwotCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZiAoIWFkYXB0ZXIpCiAJCXJldHVybiAtRUJVU1k7Ci0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBjdXJyICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5jdXJybWFjYWRkclswXSwKLQkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdLAotCQlhZGFwdGVyLT5jdXJybWFjYWRkclszXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0sCi0JCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKTsKKwogCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKIAltZW1jcHkoYWRhcHRlci0+Y3Vycm1hY2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgbmV3ICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5jdXJybWFjYWRkclswXSwKLQkJYWRhcHRlci0+Y3Vycm1hY2FkZHJbMV0sIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzJdLAotCQlhZGFwdGVyLT5jdXJybWFjYWRkclszXSwgYWRhcHRlci0+Y3Vycm1hY2FkZHJbNF0sCi0JCWFkYXB0ZXItPmN1cnJtYWNhZGRyWzVdKTsKIAotCXNsaWNfY29uZmlnX3NldChhZGFwdGVyLCBUUlVFKTsKKwlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgdHJ1ZSk7CiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiAgc2xpY190aW1lcl9nZXRfc3RhdHMKLSAqCi0gKiBUaW1lciBmdW5jdGlvbiB1c2VkIHRvIHN1Y2sgdGhlIHN0YXRpc3RpY3Mgb3V0IG9mIHRoZSBjYXJkIGV2ZXJ5Ci0gKiA1MCBzZWNvbmRzIG9yIHdoYXRldmVyIFNUQVRTX1RJTUVSX0lOVEVSVkFMIGlzIHNldCB0by4KLSAqCi0gKi8KLSNpZiBTTElDX0dFVF9TVEFUU19USU1FUl9FTkFCTEVECi1zdGF0aWMgdm9pZCBzbGljX3RpbWVyX2dldF9zdGF0cyh1bG9uZyBkZXYpCi17Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXI7Ci0Jc3RydWN0IHNsaWNjYXJkICpjYXJkOwotCXN0cnVjdCBzbGljX3NobWVtICpwc2htZW07Ci0KLQlBU1NFUlQoZGV2KTsKLQlhZGFwdGVyID0gbmV0ZGV2X3ByaXYoKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2KTsKLQlBU1NFUlQoYWRhcHRlcik7Ci0JY2FyZCA9IGFkYXB0ZXItPmNhcmQ7Ci0JQVNTRVJUKGNhcmQpOwotCi0JaWYgKChjYXJkLT5zdGF0ZSA9PSBDQVJEX1VQKSAmJgotCSAgICAoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfVVApICYmIChhZGFwdGVyLT5saW5rc3RhdGUgPT0gTElOS19VUCkpIHsKLQkJcHNobWVtID0gKHN0cnVjdCBzbGljX3NobWVtICopYWRhcHRlci0+cGh5c19zaG1lbTsKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0JCXNsaWNfdXByX3JlcXVlc3QoYWRhcHRlciwKLQkJCQkgU0xJQ19VUFJfU1RBVFMsCi0JCQkJIFNMSUNfR0VUX0FERFJfTE9XKCZwc2htZW0tPmluaWNzdGF0cyksCi0JCQkJIFNMSUNfR0VUX0FERFJfSElHSCgmcHNobWVtLT5pbmljc3RhdHMpLCAwLCAwKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1g4NikKLQkJc2xpY191cHJfcmVxdWVzdChhZGFwdGVyLAotCQkJCSBTTElDX1VQUl9TVEFUUywKLQkJCQkgKHUzMikgJnBzaG1lbS0+aW5pY3N0YXRzLCAwLCAwLCAwKTsKLSNlbHNlCi0JCVN0b3AgY29tcGlsYXRpb247Ci0jZW5kaWYKLQl9IGVsc2UgewotLyoJCURCR19NU0cgKCJzbGljb3NzOiAlcyBhZGFwdGVyWyVwXSBsaW5rc3RhdGVbJXhdIE5PVCBVUCFcbiIsCi0JCQlfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+bGlua3N0YXRlKTsgKi8KLQl9Ci0JYWRhcHRlci0+c3RhdHN0aW1lci5leHBpcmVzID0gamlmZmllcyArCi0JICAgIFNMSUNfU0VDU19UT19KSUZGUyhTVEFUU19USU1FUl9JTlRFUlZBTCk7Ci0JYWRkX3RpbWVyKCZhZGFwdGVyLT5zdGF0c3RpbWVyKTsKLX0KLSNlbmRpZgogc3RhdGljIHZvaWQgc2xpY190aW1lcl9sb2FkX2NoZWNrKHVsb25nIGNhcmRhZGRyKQogewogCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IChzdHJ1Y3Qgc2xpY2NhcmQgKiljYXJkYWRkcjsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNhcmQtPm1hc3RlcjsKKwl1MzIgX19pb21lbSAqaW50YWdnOwogCXUzMiBsb2FkID0gY2FyZC0+ZXZlbnRzOwogCXUzMiBsZXZlbCA9IDA7CiAKKwlpbnRhZ2cgPSAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ludGFnZzsKKwogCWlmICgoYWRhcHRlcikgJiYgKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSAmJgogCSAgICAoY2FyZC0+c3RhdGUgPT0gQ0FSRF9VUCkgJiYgKHNsaWNfZ2xvYmFsLmR5bmFtaWNfaW50YWdnKSkgewogCQlpZiAoYWRhcHRlci0+ZGV2aWQgPT0gU0xJQ18xR0JfREVWSUNFX0lEKSB7CkBAIC0zMjIwLDggKzI1NjQsNyBAQAogCQkJfQogCQkJaWYgKGNhcmQtPmxvYWRsZXZlbF9jdXJyZW50ICE9IGxldmVsKSB7CiAJCQkJY2FyZC0+bG9hZGxldmVsX2N1cnJlbnQgPSBsZXZlbDsKLQkJCQlXUklURV9SRUcoYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2ludGFnZywKLQkJCQkJICBsZXZlbCwgRkxVU0gpOworCQkJCXNsaWNfcmVnMzJfd3JpdGUoaW50YWdnLCBsZXZlbCwgRkxVU0gpOwogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKGxvYWQgPiBTTElDX0xPQURfNSkKQEAgLTMyMzgsMTQgKzI1ODEsMTIgQEAKIAkJCQlsZXZlbCA9IFNMSUNfSU5UQUdHXzA7CiAJCQlpZiAoY2FyZC0+bG9hZGxldmVsX2N1cnJlbnQgIT0gbGV2ZWwpIHsKIAkJCQljYXJkLT5sb2FkbGV2ZWxfY3VycmVudCA9IGxldmVsOwotCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaW50YWdnLAotCQkJCQkgIGxldmVsLCBGTFVTSCk7CisJCQkJc2xpY19yZWczMl93cml0ZShpbnRhZ2csIGxldmVsLCBGTFVTSCk7CiAJCQl9CiAJCX0KIAl9CiAJY2FyZC0+ZXZlbnRzID0gMDsKLQljYXJkLT5sb2FkdGltZXIuZXhwaXJlcyA9Ci0JICAgIGppZmZpZXMgKyBTTElDX1NFQ1NfVE9fSklGRlMoU0xJQ19MT0FEVElNRVJfUEVSSU9EKTsKKwljYXJkLT5sb2FkdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoU0xJQ19MT0FEVElNRVJfUEVSSU9EICogSFopOwogCWFkZF90aW1lcigmY2FyZC0+bG9hZHRpbWVyKTsKIH0KIApAQCAtMzI1Niw3ICsyNTk3LDggQEAKIAljcHVpZCA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAljdXJyX3BpZCA9IGN1cnJlbnQtPnBpZDsKIAotCURCR19FUlJPUigiJXMgQ1BVICMgJWQgLS0tLSBQSUQgIyAlZFxuIiwgX19mdW5jX18sIGNwdWlkLCBjdXJyX3BpZCk7CisJcHJpbnRrKEtFUk5fRVJSICIlcyBDUFUgIyAlZCAtLS0tIFBJRCAjICVkXG4iLAorCSAgICAgICBfX2Z1bmNfXywgY3B1aWQsIGN1cnJfcGlkKTsKIH0KIAogc3RhdGljIGludCBzbGljX3Vwcl9xdWV1ZV9yZXF1ZXN0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLApAQCAtMzI2OSwxMSArMjYxMSw5IEBACiAJc3RydWN0IHNsaWNfdXByICp1cHJxdWV1ZTsKIAogCXVwciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbGljX3VwciksIEdGUF9BVE9NSUMpOwotCWlmICghdXByKSB7Ci0JCURCR19NU0coIiVzIENPVUxEIE5PVCBBTExPQ0FURSBVUFIgTUVNXG4iLCBfX2Z1bmNfXyk7Ci0KKwlpZiAoIXVwcikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCiAJdXByLT5hZGFwdGVyID0gYWRhcHRlci0+cG9ydDsKIAl1cHItPnVwcl9yZXF1ZXN0ID0gdXByX3JlcXVlc3Q7CiAJdXByLT51cHJfZGF0YSA9IHVwcl9kYXRhOwpAQCAtMzMyMiwxMCArMjY2Miw2IEBACiAJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKIAlzdHJ1Y3Qgc2xpY191cHIgKnVwcjsKIAotLyogICAgaWYgKGNhcmQtPmR1bXBfcmVxdWVzdGVkKSB7Ci0JREJHX01TRygiRU5URVIgc2xpY191cHJfcmVxdWVzdF9jb21wbGV0ZSBEdW1wIGluIHByb2dyZXNzIElTUlsleF1cbiIsCi0JCWlzcik7Ci0gICAgICB9ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnVwcl9sb2NrLmxvY2ssIGFkYXB0ZXItPnVwcl9sb2NrLmZsYWdzKTsKIAl1cHIgPSBhZGFwdGVyLT51cHJfbGlzdDsKIAlpZiAoIXVwcikgewpAQCAtMzM0MSwzOCArMjY3NywxOSBAQAogCXN3aXRjaCAodXByLT51cHJfcmVxdWVzdCkgewogCWNhc2UgU0xJQ19VUFJfU1RBVFM6CiAJCXsKLSNpZiBTTElDX0dFVF9TVEFUU19FTkFCTEVECiAJCQlzdHJ1Y3Qgc2xpY19zdGF0cyAqc2xpY3N0YXRzID0KIAkJCSAgICAoc3RydWN0IHNsaWNfc3RhdHMgKikgJmFkYXB0ZXItPnBzaG1lbS0+aW5pY3N0YXRzOwogCQkJc3RydWN0IHNsaWNfc3RhdHMgKm5ld3N0YXRzID0gc2xpY3N0YXRzOwogCQkJc3RydWN0IHNsaWNfc3RhdHMgICpvbGQgPSAmYWRhcHRlci0+aW5pY3N0YXRzX3ByZXY7CiAJCQlzdHJ1Y3Qgc2xpY25ldF9zdGF0cyAqc3RzdCA9ICZhZGFwdGVyLT5zbGljX3N0YXRzOwotI2VuZGlmCisKIAkJCWlmIChpc3IgJiBJU1JfVVBDRVJSKSB7Ci0JCQkJREJHX0VSUk9SCi0JCQkJICAgICgiU0xJQ19VUFJfU1RBVFMgY29tbWFuZCBmYWlsZWQgaXNyWyV4XVxuIiwKLQkJCQkgICAgIGlzcik7CisJCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkJCSJTTElDX1VQUl9TVEFUUyBjb21tYW5kIGZhaWxlZCBpc3JbJXhdXG4iLAorCQkJCQlpc3IpOwogCiAJCQkJYnJlYWs7CiAJCQl9Ci0jaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAotLyoJCQlEQkdfTVNHICgic2xpY29zczogJXMgcmN2ICVseDolbHg6JWx4OiVseDolbHggJWx4ICVseCAiCi0JCQkJInhtdCAlbHg6JWx4OiVseDolbHg6JWx4ICVseCAlbHhcbiIsCi0JCQkJIF9fZnVuY19fLAotCQkJICAgICBzbGljc3RhdHMtPnJjdl91bmljYXN0czEwMCwKLQkJCSAgICAgc2xpY3N0YXRzLT5yY3ZfYnl0ZXMxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+cmN2X2J5dGVzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnJjdl90Y3BfYnl0ZXMxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+cmN2X3RjcF9zZWdzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnJjdl9vdGhlcl9lcnJvcjEwMCwKLQkJCSAgICAgc2xpY3N0YXRzLT5yY3ZfZHJvcHMxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+eG1pdF91bmljYXN0czEwMCwKLQkJCSAgICAgc2xpY3N0YXRzLT54bWl0X2J5dGVzMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnhtaXRfYnl0ZXMxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+eG1pdF90Y3BfYnl0ZXMxMDAsCi0JCQkgICAgIHNsaWNzdGF0cy0+eG1pdF90Y3Bfc2VnczEwMCwKLQkJCSAgICAgc2xpY3N0YXRzLT54bWl0X290aGVyX2Vycm9yMTAwLAotCQkJICAgICBzbGljc3RhdHMtPnhtaXRfY29sbGlzaW9uczEwMCk7Ki8KIAkJCVVQREFURV9TVEFUU19HQihzdHN0LT50Y3AueG1pdF90Y3Bfc2VncywKIAkJCQkJbmV3c3RhdHMtPnhtaXRfdGNwX3NlZ3NfZ2IsCiAJCQkJCW9sZC0+eG1pdF90Y3Bfc2Vnc19nYik7CkBAIC0zNDMxLDcgKzI3NDgsNiBAQAogCQkJCSAgICAgb2xkLT5yY3ZfZHJvcHNfZ2IpOwogCQkJfQogCQkJbWVtY3B5KG9sZCwgbmV3c3RhdHMsIHNpemVvZihzdHJ1Y3Qgc2xpY19zdGF0cykpOwotI2VuZGlmCiAJCQlicmVhazsKIAkJfQogCWNhc2UgU0xJQ19VUFJfUkxTUjoKQEAgLTM0NTQsMTEgKzI3NzAsNiBAQAogCWNhc2UgU0xJQ19VUFJfUElORzoKIAkJY2FyZC0+cGluZ3N0YXR1cyB8PSAoaXNyICYgSVNSX1BJTkdEU01BU0spOwogCQlicmVhazsKLSNpZiBTTElDX0RVTVBfRU5BQkxFRAotCWNhc2UgU0xJQ19VUFJfRFVNUDoKLQkJY2FyZC0+ZHVtcHN0YXR1cyB8PSAoaXNyICYgSVNSX1VQQ01BU0spOwotCQlicmVhazsKLSNlbmRpZgogCWRlZmF1bHQ6CiAJCUFTU0VSVCgwKTsKIAl9CkBAIC0zNDg3LDc0ICsyNzk4LDI5IEBACiAJc3dpdGNoICh1cHItPnVwcl9yZXF1ZXN0KSB7CiAJY2FzZSBTTElDX1VQUl9TVEFUUzoKIAkJaWYgKHVwci0+dXByX2RhdGFfaCA9PSAwKSB7Ci0JCQlXUklURV9SRUcoc2xpY19yZWdzLT5zbGljX3N0YXRzLCB1cHItPnVwcl9kYXRhLCBGTFVTSCk7CisJCQlzbGljX3JlZzMyX3dyaXRlKCZzbGljX3JlZ3MtPnNsaWNfc3RhdHMsIHVwci0+dXByX2RhdGEsCisJCQkJCSBGTFVTSCk7CiAJCX0gZWxzZSB7Ci0JCQlXUklURV9SRUc2NChhZGFwdGVyLAotCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfc3RhdHM2NCwKLQkJCQkgICAgdXByLT51cHJfZGF0YSwKLQkJCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkJICAgIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOworCQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLCAmc2xpY19yZWdzLT5zbGljX3N0YXRzNjQsCisJCQkJCSB1cHItPnVwcl9kYXRhLAorCQkJCQkgJnNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAorCQkJCQkgdXByLT51cHJfZGF0YV9oLCBGTFVTSCk7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIFNMSUNfVVBSX1JMU1I6Ci0JCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkgICAgc2xpY19yZWdzLT5zbGljX3Jsc3IsCi0JCQkgICAgdXByLT51cHJfZGF0YSwKLQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwgdXByLT51cHJfZGF0YV9oLCBGTFVTSCk7CisJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19ybHNyLCB1cHItPnVwcl9kYXRhLAorCQkJCSAmc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIHVwci0+dXByX2RhdGFfaCwKKwkJCQkgRkxVU0gpOwogCQlicmVhazsKIAogCWNhc2UgU0xJQ19VUFJfUkNPTkZJRzoKLQkJREJHX01TRygiJXMgU0xJQ19VUFJfUkNPTkZJRyEhISFcbiIsIF9fZnVuY19fKTsKLQkJREJHX01TRygiV1JJVEVfUkVHNjQgYWRhcHRlclslcF1cbiIKLQkJCSIgICAgYS0+c2xpY19yZWdzWyVwXSBzbGljX3JlZ3NbJXBdXG4iCi0JCQkiICAgICZzbGljX3Jjb25maWdbJXBdICZzbGljX2FkZHJfdXBwZXJbJXBdXG4iCi0JCQkiICAgIHVwclslcF1cbiIKLQkJCSIgICAgdXByZGF0YVsleF0gdXByZGF0YWhbJXhdXG4iLAotCQkJYWRhcHRlciwgYWRhcHRlci0+c2xpY19yZWdzLCBzbGljX3JlZ3MsCi0JCQkmc2xpY19yZWdzLT5zbGljX3Jjb25maWcsICZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCXVwciwgdXByLT51cHJfZGF0YSwgdXByLT51cHJfZGF0YV9oKTsKLQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKLQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfcmNvbmZpZywKLQkJCSAgICB1cHItPnVwcl9kYXRhLAotCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLCB1cHItPnVwcl9kYXRhX2gsIEZMVVNIKTsKKwkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLCAmc2xpY19yZWdzLT5zbGljX3Jjb25maWcsCisJCQkJIHVwci0+dXByX2RhdGEsICZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQkgdXByLT51cHJfZGF0YV9oLCBGTFVTSCk7CiAJCWJyZWFrOwotI2lmIFNMSUNfRFVNUF9FTkFCTEVECi0JY2FzZSBTTElDX1VQUl9EVU1QOgotI2lmIDAKLQkJREJHX01TRygiJXMgU0xJQ19VUFJfRFVNUCEhISFcbiIsIF9fZnVuY19fKTsKLQkJREJHX01TRygiV1JJVEVfUkVHNjQgYWRhcHRlclslcF1cbiIKLQkJCSAiICAgIHVwcl9idWZmZXJbJXhdICAgdXByX2J1ZmZlcmhbJXhdXG4iCi0JCQkgIiAgICB1cHJfZGF0YVsleF0gICAgIHVwcl9kYXRhaFsleF1cbiIKLQkJCSAiICAgIGNtZGJ1ZmZbJXBdIGNtZGJ1ZmZQWyVwXVxuIgotCQkJICIgICAgZHVtcGJ1ZmZbJXBdIGR1bXBidWZmUFslcF1cbiIsCi0JCQkgYWRhcHRlciwgdXByLT51cHJfYnVmZmVyLCB1cHItPnVwcl9idWZmZXJfaCwKLQkJCSB1cHItPnVwcl9kYXRhLCB1cHItPnVwcl9kYXRhX2gsCi0JCQkgYWRhcHRlci0+Y2FyZC0+Y21kYnVmZmVyLAotCQkJICh2b2lkICopYWRhcHRlci0+Y2FyZC0+Y21kYnVmZmVyX3BoeXMsCi0JCQkgYWRhcHRlci0+Y2FyZC0+ZHVtcGJ1ZmZlciwgKAotCQkJIHZvaWQgKilhZGFwdGVyLT5jYXJkLT5kdW1wYnVmZmVyX3BoeXMpOwotCi0JCXB0cjEgPSAoY2hhciAqKXNsaWNfcmVnczsKLQkJcHRyMiA9IChjaGFyICopKCZzbGljX3JlZ3MtPnNsaWNfZHVtcF9jbWQpOwotCQljbWRvZmZzZXQgPSBwdHIyIC0gcHRyMTsKLQkJREJHX01TRygic2xpY19kdW1wX2NtZCByZWdpc3RlciBvZmZzZXQgWyV4XVxuIiwgY21kb2Zmc2V0KTsKLSNlbmRpZgotCQlpZiAodXByLT51cHJfYnVmZmVyIHx8IHVwci0+dXByX2J1ZmZlcl9oKSB7Ci0JCQlXUklURV9SRUc2NChhZGFwdGVyLAotCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfZHVtcF9kYXRhLAotCQkJCSAgICB1cHItPnVwcl9idWZmZXIsCi0JCQkJICAgIHNsaWNfcmVncy0+c2xpY19hZGRyX3VwcGVyLAotCQkJCSAgICB1cHItPnVwcl9idWZmZXJfaCwgRkxVU0gpOwotCQl9Ci0JCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkgICAgc2xpY19yZWdzLT5zbGljX2R1bXBfY21kLAotCQkJICAgIHVwci0+dXByX2RhdGEsCi0JCQkgICAgc2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIHVwci0+dXByX2RhdGFfaCwgRkxVU0gpOwotCQlicmVhazsKLSNlbmRpZgogCWNhc2UgU0xJQ19VUFJfUElORzoKLQkJV1JJVEVfUkVHKHNsaWNfcmVncy0+c2xpY19waW5nLCAxLCBGTFVTSCk7CisJCXNsaWNfcmVnMzJfd3JpdGUoJnNsaWNfcmVncy0+c2xpY19waW5nLCAxLCBGTFVTSCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUFTU0VSVCgwKTsKQEAgLTM1NjgsMTAgKzI4MzQsNiBAQAogCXVuc2lnbmVkIGNoYXIgbGlua3NwZWVkOwogCXVuc2lnbmVkIGNoYXIgbGlua2R1cGxleDsKIAotCURCR19NU0coIiVzOiAlcyBJU1JbJXhdIGxpbmtzdGF0dXNbJXhdXG4gICBhZGFwdGVyWyVwXSglZClcbiIsCi0JCV9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGlzciwgbGlua3N0YXR1cywgYWRhcHRlciwKLQkJYWRhcHRlci0+Y2FyZGluZGV4KTsKLQogCWlmICgoaXNyICYgSVNSX1VQQ0VSUikgfHwgKGlzciAmIElTUl9VUENCU1kpKSB7CiAJCXN0cnVjdCBzbGljX3NobWVtICpwc2htZW07CiAKQEAgLTM1OTksNTAgKzI4NjEsMzMgQEAKIAkgICAgICAgfHwgKGFkYXB0ZXItPmRldmlkID09IFNMSUNfMkdCX0RFVklDRV9JRCkpOwogCiAJbGlua3VwID0gbGlua3N0YXR1cyAmIEdJR19MSU5LVVAgPyBMSU5LX1VQIDogTElOS19ET1dOOwotCWlmIChsaW5rc3RhdHVzICYgR0lHX1NQRUVEXzEwMDApIHsKKwlpZiAobGlua3N0YXR1cyAmIEdJR19TUEVFRF8xMDAwKQogCQlsaW5rc3BlZWQgPSBMSU5LXzEwMDBNQjsKLQkJREJHX01TRygic2xpY29zczogJXMgKCVzKSBHSUdBQklUIFNwZWVkPT0xMDAwTUIgICIsCi0JCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKLQl9IGVsc2UgaWYgKGxpbmtzdGF0dXMgJiBHSUdfU1BFRURfMTAwKSB7CisJZWxzZSBpZiAobGlua3N0YXR1cyAmIEdJR19TUEVFRF8xMDApCiAJCWxpbmtzcGVlZCA9IExJTktfMTAwTUI7Ci0JCURCR19NU0coInNsaWNvc3M6ICVzICglcykgR0lHQUJJVCBTcGVlZD09MTAwTUIgICIsIF9fZnVuY19fLAotCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJbGlua3NwZWVkID0gTElOS18xME1COwotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEdJR0FCSVQgU3BlZWQ9PTEwTUIgICIsIF9fZnVuY19fLAotCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKLQl9Ci0JaWYgKGxpbmtzdGF0dXMgJiBHSUdfRlVMTERVUExFWCkgewotCQlsaW5rZHVwbGV4ID0gTElOS19GVUxMRDsKLQkJREJHX01TRygiIER1cGxleCA9PSBGVUxMXG4iKTsKLQl9IGVsc2UgewotCQlsaW5rZHVwbGV4ID0gTElOS19IQUxGRDsKLQkJREJHX01TRygiIER1cGxleCA9PSBIQUxGXG4iKTsKLQl9CiAKLQlpZiAoKGFkYXB0ZXItPmxpbmtzdGF0ZSA9PSBMSU5LX0RPV04pICYmIChsaW5rdXAgPT0gTElOS19ET1dOKSkgewotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHBoeXNwb3J0KCVkKSBsaW5rIHN0aWxsIGRvd25cbiIsCi0JCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5waHlzcG9ydCk7CisJaWYgKGxpbmtzdGF0dXMgJiBHSUdfRlVMTERVUExFWCkKKwkJbGlua2R1cGxleCA9IExJTktfRlVMTEQ7CisJZWxzZQorCQlsaW5rZHVwbGV4ID0gTElOS19IQUxGRDsKKworCWlmICgoYWRhcHRlci0+bGlua3N0YXRlID09IExJTktfRE9XTikgJiYgKGxpbmt1cCA9PSBMSU5LX0RPV04pKQogCQlyZXR1cm47Ci0JfQogCiAJLyogbGluayB1cCBldmVudCwgYnV0IG5vdGhpbmcgaGFzIGNoYW5nZWQgKi8KIAlpZiAoKGFkYXB0ZXItPmxpbmtzdGF0ZSA9PSBMSU5LX1VQKSAmJgogCSAgICAobGlua3VwID09IExJTktfVVApICYmCiAJICAgIChhZGFwdGVyLT5saW5rc3BlZWQgPT0gbGlua3NwZWVkKSAmJgotCSAgICAoYWRhcHRlci0+bGlua2R1cGxleCA9PSBsaW5rZHVwbGV4KSkgewotCQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIHBvcnQoJWQpIGxpbmsgc3RpbGwgdXBcbiIsCi0JCQlfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyLT5waHlzcG9ydCk7CisJICAgIChhZGFwdGVyLT5saW5rZHVwbGV4ID09IGxpbmtkdXBsZXgpKQogCQlyZXR1cm47Ci0JfQogCiAJLyogbGluayBoYXMgY2hhbmdlZCBhdCB0aGlzIHBvaW50ICovCiAKIAkvKiBsaW5rIGhhcyBnb25lIGZyb20gdXAgdG8gZG93biAqLwogCWlmIChsaW5rdXAgPT0gTElOS19ET1dOKSB7CiAJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKLQkJREJHX01TRygic2xpY29zczogJXMgJWQgTGlua0Rvd24hXG4iLCBfX2Z1bmNfXywKLQkJCWFkYXB0ZXItPnBoeXNwb3J0KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzY1MiwzMCArMjg5NywxMCBAQAogCiAJaWYgKGFkYXB0ZXItPmxpbmtzdGF0ZSAhPSBMSU5LX1VQKSB7CiAJCS8qIHNldHVwIHRoZSBtYWMgKi8KLQkJREJHX01TRygiJXMgY2FsbCBzbGljX2NvbmZpZ19zZXRcbiIsIF9fZnVuY19fKTsKLQkJc2xpY19jb25maWdfc2V0KGFkYXB0ZXIsIFRSVUUpOworCQlzbGljX2NvbmZpZ19zZXQoYWRhcHRlciwgdHJ1ZSk7CiAJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfVVA7Ci0JCURCR19NU0coIlxuKCVzKSBMaW5rIFVQOiBDQUxMIHNsaWNfaWZfc3RhcnRfcXVldWUiLAotCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKLQkJc2xpY19pZl9zdGFydF9xdWV1ZShhZGFwdGVyKTsKKwkJbmV0aWZfc3RhcnRfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKIAl9Ci0jaWYgMQotCXN3aXRjaCAobGlua3NwZWVkKSB7Ci0JY2FzZSBMSU5LXzEwMDBNQjoKLQkJREJHX01TRwotCQkgICAgKCJcbiglcykgTElOSyBVUCE6IEdJR0FCSVQgU1BFRUQgPT0gMTAwME1CICBkdXBsZXhbJXhdXG4iLAotCQkgICAgIGFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bGlua2R1cGxleCk7Ci0JCWJyZWFrOwotCWNhc2UgTElOS18xMDBNQjoKLQkJREJHX01TRygiXG4oJXMpIExJTksgVVAhOiBTUEVFRCA9PSAxMDBNQiAgZHVwbGV4WyV4XVxuIiwKLQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bGlua2R1cGxleCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURCR19NU0coIlxuKCVzKSBMSU5LIFVQITogU1BFRUQgPT0gMTBNQiAgZHVwbGV4WyV4XVxuIiwKLQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlci0+bGlua2R1cGxleCk7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgogfQogCiAvKgpAQCAtMzc4NywyMCArMzAxMiwxOCBAQAogCV9faW9tZW0gc3RydWN0IHNsaWNfcmVncyAqc2xpY19yZWdzID0gYWRhcHRlci0+c2xpY19yZWdzOwogCXUzMiBwYWRkcmggPSAwOwogCi0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sCi0JCWFkYXB0ZXItPm5ldGRldi0+bmFtZSwgYWRhcHRlcik7CiAJQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOwogCW1lbXNldChyc3BxLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfcnNwcXVldWUpKTsKIAogCXJzcHEtPm51bV9wYWdlcyA9IFNMSUNfUlNQUV9QQUdFU19HQjsKIAogCWZvciAoaSA9IDA7IGkgPCByc3BxLT5udW1fcGFnZXM7IGkrKykgewotCQlyc3BxLT52YWRkcltpXSA9Ci0JCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIFBBR0VfU0laRSwKLQkJCQkJICZyc3BxLT5wYWRkcltpXSk7CisJCXJzcHEtPnZhZGRyW2ldID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorCQkJCQkJICAgICAgUEFHRV9TSVpFLAorCQkJCQkJICAgICAgJnJzcHEtPnBhZGRyW2ldKTsKIAkJaWYgKCFyc3BxLT52YWRkcltpXSkgewotCQkJREJHX0VSUk9SCi0JCQkgICAgKCJyc3BxdWV1ZV9pbml0X2ZhaWxlZCAgcGNpX2FsbG9jX2NvbnNpc3RlbnRcbiIpOworCQkJZGV2X2VycigmYWRhcHRlci0+cGNpZGV2LT5kZXYsCisJCQkJInBjaV9hbGxvY19jb25zaXN0ZW50IGZhaWxlZFxuIik7CiAJCQlzbGljX3JzcHF1ZXVlX2ZyZWUoYWRhcHRlcik7CiAJCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7CiAJCX0KQEAgLTM4MTEsNDcgKzMwMzQsMjEgQEAKIAkJICAgICAgICh1MzIpIHJzcHEtPnBhZGRyW2ldKTsKICNlbmRpZgogCQltZW1zZXQocnNwcS0+dmFkZHJbaV0sIDAsIFBBR0VfU0laRSk7Ci0vKiAgICAgICAgICAgICAgREJHX01TRygic2xpY29zczogJXMgVVBMT0FEIFJTUEJVRkYgUGFnZSBwYWdlaXhbJXhdIHBhZGRyWyVwXSAiCi0JCQkidmFkZHJbJXBdXG4iLAotCQkJX19mdW5jX18sIGksICh2b2lkICopcnNwcS0+cGFkZHJbaV0sIHJzcHEtPnZhZGRyW2ldKTsgKi8KIAogCQlpZiAocGFkZHJoID09IDApIHsKLQkJCVdSSVRFX1JFRyhzbGljX3JlZ3MtPnNsaWNfcmJhciwKLQkJCQkgIChyc3BxLT5wYWRkcltpXSB8IFNMSUNfUlNQUV9CVUZTSU5QQUdFKSwKLQkJCQkgIERPTlRfRkxVU0gpOworCQkJc2xpY19yZWczMl93cml0ZSgmc2xpY19yZWdzLT5zbGljX3JiYXIsCisJCQkJKHJzcHEtPnBhZGRyW2ldIHwgU0xJQ19SU1BRX0JVRlNJTlBBR0UpLAorCQkJCURPTlRfRkxVU0gpOwogCQl9IGVsc2UgewotCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKLQkJCQkgICAgc2xpY19yZWdzLT5zbGljX3JiYXI2NCwKLQkJCQkgICAgKHJzcHEtPnBhZGRyW2ldIHwgU0xJQ19SU1BRX0JVRlNJTlBBR0UpLAotCQkJCSAgICBzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCQkgICAgcGFkZHJoLCBET05UX0ZMVVNIKTsKKwkJCXNsaWNfcmVnNjRfd3JpdGUoYWRhcHRlciwgJnNsaWNfcmVncy0+c2xpY19yYmFyNjQsCisJCQkJKHJzcHEtPnBhZGRyW2ldIHwgU0xJQ19SU1BRX0JVRlNJTlBBR0UpLAorCQkJCSZzbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKKwkJCQlwYWRkcmgsIERPTlRfRkxVU0gpOwogCQl9CiAJfQogCXJzcHEtPm9mZnNldCA9IDA7CiAJcnNwcS0+cGFnZWluZGV4ID0gMDsKIAlyc3BxLT5yc3BidWYgPSAoc3RydWN0IHNsaWNfcnNwYnVmICopcnNwcS0+dmFkZHJbMF07Ci0JREJHX01TRygic2xpY29zczogJXMgKCVzKSBFWElUIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywKLQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBhZGFwdGVyKTsKLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgc2xpY19yc3BxdWV1ZV9yZXNldChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKLXsKLQlzdHJ1Y3Qgc2xpY19yc3BxdWV1ZSAqcnNwcSA9ICZhZGFwdGVyLT5yc3BxdWV1ZTsKLQotCURCR19NU0coInNsaWNvc3M6ICVzICglcykgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLAotCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIpOwotCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKLQlBU1NFUlQocnNwcSk7Ci0KLQlEQkdfTVNHKCJzbGljb3NzOiBOb3RoaW5nIHRvIGRvLiByc3BxWyVwXVxuIgotCQkiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRbJXhdXG4iCi0JCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VpeFsleF1cbiIKLQkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNwYnVmWyVwXVxuIiwKLQkJcnNwcSwgcnNwcS0+b2Zmc2V0LCByc3BxLT5wYWdlaW5kZXgsIHJzcHEtPnJzcGJ1Zik7Ci0KLQlEQkdfTVNHKCJzbGljb3NzOiAlcyAoJXMpIEVYSVQgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLAotCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGFkYXB0ZXIpOwogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KIApAQCAtMzg2MCwxNCArMzA1Nyw4IEBACiAJaW50IGk7CiAJc3RydWN0IHNsaWNfcnNwcXVldWUgKnJzcHEgPSAmYWRhcHRlci0+cnNwcXVldWU7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBhZGFwdGVyWyVwXSBwb3J0ICVkIHJzcHFbJXBdIEZyZWVSU1BRXG4iLAotCQlfX2Z1bmNfXywgYWRhcHRlciwgYWRhcHRlci0+cGh5c3BvcnQsIHJzcHEpOwogCWZvciAoaSA9IDA7IGkgPCByc3BxLT5udW1fcGFnZXM7IGkrKykgewogCQlpZiAocnNwcS0+dmFkZHJbaV0pIHsKLQkJCURCR19NU0cKLQkJCSAgICAoInNsaWNvc3M6ICBwY2lfZnJlZV9jb25zaXN0ZW50IHJzcHEtPnZhZGRyWyVwXSBcCi0JCQkgICAgcGFkZHJbJXBdXG4iLAotCQkJICAgICByc3BxLT52YWRkcltpXSwgKHZvaWQgKikgcnNwcS0+cGFkZHJbaV0pOwogCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIFBBR0VfU0laRSwKIAkJCQkJICAgIHJzcHEtPnZhZGRyW2ldLCByc3BxLT5wYWRkcltpXSk7CiAJCX0KQEAgLTM5MDAsMTEgKzMwOTEsOSBAQAogI2VuZGlmCiAJfSBlbHNlIHsKIAkJQVNTRVJUKHJzcHEtPm9mZnNldCA9PSBTTElDX1JTUFFfQlVGU0lOUEFHRSk7Ci0JCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX3JiYXI2NCwKLQkJCSAgICAocnNwcS0+Ci0JCQkgICAgIHBhZGRyW3JzcHEtPnBhZ2VpbmRleF0gfCBTTElDX1JTUFFfQlVGU0lOUEFHRSksCi0JCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIDAsIERPTlRfRkxVU0gpOworCQlzbGljX3JlZzY0X3dyaXRlKGFkYXB0ZXIsICZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfcmJhcjY0LAorCQkJKHJzcHEtPnBhZGRyW3JzcHEtPnBhZ2VpbmRleF0gfCBTTElDX1JTUFFfQlVGU0lOUEFHRSksCisJCQkmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsIDAsIERPTlRfRkxVU0gpOwogCQlyc3BxLT5wYWdlaW5kZXggPSAoKytyc3BxLT5wYWdlaW5kZXgpICUgcnNwcS0+bnVtX3BhZ2VzOwogCQlyc3BxLT5vZmZzZXQgPSAwOwogCQlyc3BxLT5yc3BidWYgPSAoc3RydWN0IHNsaWNfcnNwYnVmICopCkBAIC0zOTMyLDEyICszMTIxLDggQEAKIAlzdHJ1Y3Qgc2xpY19jbWRxbWVtICpjbWRxbWVtID0gJmFkYXB0ZXItPmNtZHFtZW07CiAJaW50IGk7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAoJXMpIGFkYXB0ZXJbJXBdIHBvcnQgJWQgcnNwcVslcF0gRnJlZSBDTURRIE1lbW9yeVxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNwb3J0LCBjbWRxbWVtKTsKIAlmb3IgKGkgPSAwOyBpIDwgU0xJQ19DTURRX01BWFBBR0VTOyBpKyspIHsKIAkJaWYgKGNtZHFtZW0tPnBhZ2VzW2ldKSB7Ci0JCQlEQkdfTVNHKCJzbGljb3NzOiAlcyBEZWFsbG9jYXRlIHBhZ2UgIENtZFFQYWdlWyVwXVxuIiwKLQkJCQlfX2Z1bmNfXywgKHZvaWQgKikgY21kcW1lbS0+cGFnZXNbaV0pOwogCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCiAJCQkJCSAgICBQQUdFX1NJWkUsCiAJCQkJCSAgICAodm9pZCAqKSBjbWRxbWVtLT5wYWdlc1tpXSwKQEAgLTM5NzIsNyArMzE1Nyw2IEBACiAJaW50IGk7CiAJdTMyICpwYWdlYWRkcjsKIAotCURCR19NU0coInNsaWNvc3M6ICVzIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7CiAJQVNTRVJUKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX0RPV04pOwogCW1lbXNldCgmYWRhcHRlci0+Y21kcV9hbGwsIDAsIHNpemVvZihzdHJ1Y3Qgc2xpY19jbWRxdWV1ZSkpOwogCW1lbXNldCgmYWRhcHRlci0+Y21kcV9mcmVlLCAwLCBzaXplb2Yoc3RydWN0IHNsaWNfY21kcXVldWUpKTsKQEAgLTM5OTQsNyArMzE3OCw2IEBACiAJCXNsaWNfY21kcV9hZGRjbWRwYWdlKGFkYXB0ZXIsIHBhZ2VhZGRyKTsKIAl9CiAJYWRhcHRlci0+c2xpY19oYW5kbGVfaXggPSAxOwotCURCR19NU0coInNsaWNvc3M6ICVzIHJlc2V0IHNsaWNfaGFuZGxlX2l4IHRvIE9ORVxuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQpAQCAtNDAwMyw4ICszMTg2LDYgQEAKIHsKIAlzdHJ1Y3Qgc2xpY19ob3N0Y21kICpjbWQ7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBhZGFwdGVyWyVwXSBwb3J0ICVkIEZyZWVDb21tYW5kc0Zyb20gQ01EUVxuIiwKLQkJX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNwb3J0KTsKIAljbWQgPSBhZGFwdGVyLT5jbWRxX2FsbC5oZWFkOwogCXdoaWxlIChjbWQpIHsKIAkJaWYgKGNtZC0+YnVzeSkgewpAQCAtNDAzMCw3ICszMjExLDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUzMiBvdXRzdGFuZGluZzsKIAotCURCR19NU0coIiVzIEVOVEVSIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmxvY2ssCiAJCQlhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5mbGFncyk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmxvY2ssCkBAIC00MDQyLDExICszMjIyLDggQEAKIAkJaWYgKGhjbWQtPmJ1c3kpIHsKIAkJCXNrYiA9IGhjbWQtPnNrYjsKIAkJCUFTU0VSVChza2IpOwotCQkJREJHX01TRygic2xpY29zczogJXMgaGNtZFslcF0gc2tiWyVwXSAiLCBfX2Z1bmNfXywKLQkJCQloY21kLCBza2IpOwogCQkJaGNtZC0+YnVzeSA9IDA7CiAJCQloY21kLT5za2IgPSBOVUxMOwotCQkJREJHX01TRygiIEZyZWUgU0tCXG4iKTsKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCX0KIAkJaGNtZCA9IGhjbWQtPm5leHRfYWxsOwpAQCAtNDA2NSwxNCArMzI0MiwxNCBAQAogCQloY21kID0gaGNtZC0+bmV4dF9hbGw7CiAJfQogCWlmIChhZGFwdGVyLT5jbWRxX2ZyZWUuY291bnQgIT0gYWRhcHRlci0+Y21kcV9hbGwuY291bnQpIHsKLQkJREJHX0VSUk9SKCIlcyBmcmVlX2NvdW50ICVkICE9IGFsbCBjb3VudCAlZFxuIiwgX19mdW5jX18sCi0JCQkgIGFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudCwgYWRhcHRlci0+Y21kcV9hbGwuY291bnQpOworCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCSJmcmVlX2NvdW50ICVkICE9IGFsbCBjb3VudCAlZFxuIiwKKwkJCWFkYXB0ZXItPmNtZHFfZnJlZS5jb3VudCwgYWRhcHRlci0+Y21kcV9hbGwuY291bnQpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRxX2RvbmUubG9jay5sb2NrLAogCQkJCWFkYXB0ZXItPmNtZHFfZG9uZS5sb2NrLmZsYWdzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRxX2ZyZWUubG9jay5sb2NrLAogCQkJCWFkYXB0ZXItPmNtZHFfZnJlZS5sb2NrLmZsYWdzKTsKLQlEQkdfTVNHKCIlcyBFWElUIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHNsaWNfY21kcV9hZGRjbWRwYWdlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgKnBhZ2UpCkBAIC00MDkwLDggKzMyNjcsNiBAQAogCiAJY21kYWRkciA9IHBhZ2U7CiAJY21kID0gKHN0cnVjdCBzbGljX2hvc3RjbWQgKiljbWRhZGRyOwotLyogIERCR19NU0coIkNNRFEgUGFnZSBhZGRyWyVwXSBpeFslZF0gcGZyZWVbJXBdXG4iLCBjbWRhZGRyLCBzbGljX2hhbmRsZV9peCwKLSAgICBhZGFwdGVyLT5wZnJlZV9zbGljX2hhbmRsZXMpOyAqLwogCWNtZGNudCA9IDA7CiAKIAlwaHlzX2FkZHIgPSB2aXJ0X3RvX2J1cygodm9pZCAqKXBhZ2UpOwpAQCAtNDExNyw3ICszMjkyLDcgQEAKIAogCQljbWQtPnBzbGljX2hhbmRsZSA9IHBzbGljX2hhbmRsZTsKIAkJY21kLT5jbWQ2NC5ob3N0aGFuZGxlID0gcHNsaWNfaGFuZGxlLT50b2tlbi5oYW5kbGVfdG9rZW47Ci0JCWNtZC0+YnVzeSA9IEZBTFNFOworCQljbWQtPmJ1c3kgPSBmYWxzZTsKIAkJY21kLT5wYWRkcmwgPSBwaHlzX2FkZHJsOwogCQljbWQtPnBhZGRyaCA9IHBoeXNfYWRkcmg7CiAJCWNtZC0+bmV4dF9hbGwgPSBwcmV2OwpAQCAtNDEzMywxMyArMzMwOCwxMSBAQAogCWNtZHEgPSAmYWRhcHRlci0+Y21kcV9hbGw7CiAJY21kcS0+Y291bnQgKz0gY21kY250OwkvKiAgU0xJQ19DTURRX0NNRFNJTlBBR0U7ICAgbW9va3RvZG8gKi8KIAl0YWlsLT5uZXh0X2FsbCA9IGNtZHEtPmhlYWQ7Ci0JQVNTRVJUKFZBTElEX0FERFJFU1MocHJldikpOwogCWNtZHEtPmhlYWQgPSBwcmV2OwogCWNtZHEgPSAmYWRhcHRlci0+Y21kcV9mcmVlOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbWRxLT5sb2NrLmxvY2ssIGNtZHEtPmxvY2suZmxhZ3MpOwogCWNtZHEtPmNvdW50ICs9IGNtZGNudDsJLyogIFNMSUNfQ01EUV9DTURTSU5QQUdFOyAgIG1vb2t0b2RvICovCiAJdGFpbC0+bmV4dCA9IGNtZHEtPmhlYWQ7Ci0JQVNTRVJUKFZBTElEX0FERFJFU1MocHJldikpOwogCWNtZHEtPmhlYWQgPSBwcmV2OwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtZHEtPmxvY2subG9jaywgY21kcS0+bG9jay5mbGFncyk7CiB9CkBAIC00MTg0LDcgKzMzNTcsNiBAQAogCiAJQVNTRVJUKGZyZWVfY21kcS0+aGVhZCA9PSBOVUxMKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZG9uZV9jbWRxLT5sb2NrLmxvY2ssIGRvbmVfY21kcS0+bG9jay5mbGFncyk7Ci0JQVNTRVJUKFZBTElEX0FERFJFU1MoZG9uZV9jbWRxLT5oZWFkKSk7CiAKIAlmcmVlX2NtZHEtPmhlYWQgPSBkb25lX2NtZHEtPmhlYWQ7CiAJZnJlZV9jbWRxLT5jb3VudCA9IGRvbmVfY21kcS0+Y291bnQ7CkBAIC00MjAxLDkgKzMzNzMsNyBAQAogCiAJc3Bpbl9sb2NrKCZjbWRxLT5sb2NrLmxvY2spOwogCWNtZC0+YnVzeSA9IDA7Ci0JQVNTRVJUKFZBTElEX0FERFJFU1MoY21kcS0+aGVhZCkpOwogCWNtZC0+bmV4dCA9IGNtZHEtPmhlYWQ7Ci0JQVNTRVJUKFZBTElEX0FERFJFU1MoY21kKSk7CiAJY21kcS0+aGVhZCA9IGNtZDsKIAljbWRxLT5jb3VudCsrOwogCWlmICgoYWRhcHRlci0+eG1pdHFfZnVsbCkgJiYgKGNtZHEtPmNvdW50ID4gMTApKQpAQCAtNDIxNiw3ICszMzg2LDYgQEAKIAlpbnQgaSwgY291bnQ7CiAJc3RydWN0IHNsaWNfcmN2cXVldWUgKnJjdnEgPSAmYWRhcHRlci0+cmN2cXVldWU7CiAKLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUiBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOwogCUFTU0VSVChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKTsKIAlyY3ZxLT50YWlsID0gTlVMTDsKIAlyY3ZxLT5oZWFkID0gTlVMTDsKQEAgLTQyMzMsMjUgKzM0MDIsNiBAQAogCQlzbGljX3JjdnF1ZXVlX2ZyZWUoYWRhcHRlcik7CiAJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKIAl9Ci0JREJHX01TRygic2xpY29zczogJXMgRVhJVCBhZGFwdGVyWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXIpOwotCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGludCBzbGljX3JjdnF1ZXVlX3Jlc2V0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBzbGljX3JjdnF1ZXVlICpyY3ZxID0gJmFkYXB0ZXItPnJjdnF1ZXVlOwotCi0JREJHX01TRygic2xpY29zczogJXMgRU5URVIgYWRhcHRlclslcF1cbiIsIF9fZnVuY19fLCBhZGFwdGVyKTsKLQlBU1NFUlQoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfRE9XTik7Ci0JQVNTRVJUKHJjdnEpOwotCi0JREJHX01TRygic2xpY29zczogTm90aGluZyB0byBkby4gcmN2cVslcF1cbiIKLQkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRbJXhdXG4iCi0JCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRbJXBdXG4iCi0JCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxbJXBdXG4iLAotCQlyY3ZxLCByY3ZxLT5jb3VudCwgcmN2cS0+aGVhZCwgcmN2cS0+dGFpbCk7Ci0KLQlEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlcik7CiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogfQogCkBAIC00MjkwLDggKzM0NDAsOCBAQAogCQkJc2tiID0gTlVMTDsKIAkJfQogCX0gZWxzZSB7Ci0JCURCR19FUlJPUigiUmN2USBFbXB0eSEhIGFkYXB0ZXJbJXBdIHJjdnFbJXBdIGNvdW50WyV4XVxuIiwKLQkJCSAgYWRhcHRlciwgcmN2cSwgcmN2cS0+Y291bnQpOworCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCSJSY3ZRIEVtcHR5ISEgcmN2cVslcF0gY291bnRbJXhdXG4iLCByY3ZxLCByY3ZxLT5jb3VudCk7CiAJCXNrYiA9IE5VTEw7CiAJfQogCXdoaWxlIChyY3ZxLT5jb3VudCA8IFNMSUNfUkNWUV9GSUxMVEhSRVNIKSB7CkBAIC00MzExLDYgKzM0NjEsNyBAQAogCXUzMiBwYWRkcmg7CiAJc3RydWN0IHNsaWNfcmN2cXVldWUgKnJjdnEgPSAmYWRhcHRlci0+cmN2cXVldWU7CiAJaW50IGkgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhZGFwdGVyLT5uZXRkZXYtPmRldjsKIAogCXdoaWxlIChpIDwgU0xJQ19SQ1ZRX0ZJTExFTlRSSUVTKSB7CiAJCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmOwpAQCAtNDMzMyw0NCArMzQ4NCw0NSBAQAogCQkJc2tiLT5uZXh0ID0gTlVMTDsKICNpZmRlZiBLTFVER0VfRk9SXzRHQl9CT1VOREFSWQogCQkJaWYgKHBhZGRybCA9PSAwKSB7Ci0JCQkJREJHX0VSUk9SCi0JCQkJICAgICgiJXM6IExPVyAzMmJpdHMgUEhZU0lDQUwgQUREUkVTUyA9PSAwICIKLQkJCQkgICAgICJza2JbJXBdICAgUFJPQkxFTVxuIgotCQkJCSAgICAgIiAgICAgICAgIHNrYmRhdGFbJXBdXG4iCi0JCQkJICAgICAiICAgICAgICAgc2tibGVuWyV4XVxuIgotCQkJCSAgICAgIiAgICAgICAgIHBhZGRyWyVwXVxuIgotCQkJCSAgICAgIiAgICAgICAgIHBhZGRybFsleF1cbiIKLQkJCQkgICAgICIgICAgICAgICBwYWRkcmhbJXhdXG4iLCBfX2Z1bmNfXywgc2tiLAotCQkJCSAgICAgc2tiLT5kYXRhLCBza2ItPmxlbiwgcGFkZHIsIHBhZGRybCwKLQkJCQkgICAgIHBhZGRyaCk7Ci0JCQkJREJHX0VSUk9SKCIgICAgICAgICByY3ZxLT5oZWFkWyVwXVxuIgotCQkJCQkgICIgICAgICAgICByY3ZxLT50YWlsWyVwXVxuIgotCQkJCQkgICIgICAgICAgICByY3ZxLT5jb3VudFsleF1cbiIsCi0JCQkJCSAgcmN2cS0+aGVhZCwgcmN2cS0+dGFpbCwgcmN2cS0+Y291bnQpOwotCQkJCURCR19FUlJPUigiU0tJUCBUSElTIFNLQiEhISEhISEhXG4iKTsKKwkJCQlkZXZfZXJyKGRldiwgIiVzOiBMT1cgMzJiaXRzIFBIWVNJQ0FMIEFERFJFU1MgPT0gMFxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJCWRldl9lcnIoZGV2LCAic2tiWyVwXSBQUk9CTEVNXG4iLCBza2IpOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgc2tiZGF0YVslcF1cbiIsIHNrYi0+ZGF0YSk7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICBza2JsZW5bJXhdXG4iLCBza2ItPmxlbik7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICBwYWRkclslcF1cbiIsIHBhZGRyKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHBhZGRybFsleF1cbiIsIHBhZGRybCk7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICBwYWRkcmhbJXhdXG4iLCBwYWRkcmgpOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcmN2cS0+aGVhZFslcF1cbiIsIHJjdnEtPmhlYWQpOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcmN2cS0+dGFpbFslcF1cbiIsIHJjdnEtPnRhaWwpOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcmN2cS0+Y291bnRbJXhdXG4iLCByY3ZxLT5jb3VudCk7CisJCQkJZGV2X2VycihkZXYsICJTS0lQIFRISVMgU0tCISEhISEhISFcbiIpOwogCQkJCWdvdG8gcmV0cnlfcmN2cWZpbGw7CiAJCQl9CiAjZWxzZQogCQkJaWYgKHBhZGRybCA9PSAwKSB7Ci0JCQkJREJHX0VSUk9SCi0JCQkJICAgICgiXG5cbiVzOiBMT1cgMzJiaXRzIFBIWVNJQ0FMIEFERFJFU1MgPT0gMCAiCi0JCQkJICAgICAic2tiWyVwXSAgR0lWRSBUTyBDQVJEIEFOWVdBWVxuIgotCQkJCSAgICAgIiAgICAgICAgIHNrYmRhdGFbJXBdXG4iCi0JCQkJICAgICAiICAgICAgICAgcGFkZHJbJXBdXG4iCi0JCQkJICAgICAiICAgICAgICAgcGFkZHJsWyV4XVxuIgotCQkJCSAgICAgIiAgICAgICAgIHBhZGRyaFsleF1cbiIsIF9fZnVuY19fLCBza2IsCi0JCQkJICAgICBza2ItPmRhdGEsIHBhZGRyLCBwYWRkcmwsIHBhZGRyaCk7CisJCQkJZGV2X2VycihkZXYsICIlczogTE9XIDMyYml0cyBQSFlTSUNBTCBBRERSRVNTID09IDBcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCQlkZXZfZXJyKGRldiwgInNrYlslcF0gUFJPQkxFTVxuIiwgc2tiKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHNrYmRhdGFbJXBdXG4iLCBza2ItPmRhdGEpOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgc2tibGVuWyV4XVxuIiwgc2tiLT5sZW4pOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcGFkZHJbJXBdXG4iLCBwYWRkcik7CisJCQkJZGV2X2VycihkZXYsICIgICAgICAgICBwYWRkcmxbJXhdXG4iLCBwYWRkcmwpOworCQkJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcGFkZHJoWyV4XVxuIiwgcGFkZHJoKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHJjdnEtPmhlYWRbJXBdXG4iLCByY3ZxLT5oZWFkKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHJjdnEtPnRhaWxbJXBdXG4iLCByY3ZxLT50YWlsKTsKKwkJCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHJjdnEtPmNvdW50WyV4XVxuIiwgcmN2cS0+Y291bnQpOworCQkJCWRldl9lcnIoZGV2LCAiR0lWRSBUTyBDQVJEIEFOWVdBWVxuIik7CiAJCQl9CiAjZW5kaWYKIAkJCWlmIChwYWRkcmggPT0gMCkgewotCQkJCVdSSVRFX1JFRyhhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaGJhciwKLQkJCQkJICAodTMyKSBwYWRkcmwsIERPTlRfRkxVU0gpOworCQkJCXNsaWNfcmVnMzJfd3JpdGUoJmFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19oYmFyLAorCQkJCQkJICh1MzIpcGFkZHJsLCBET05UX0ZMVVNIKTsKIAkJCX0gZWxzZSB7Ci0JCQkJV1JJVEVfUkVHNjQoYWRhcHRlciwKLQkJCQkJICAgIGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19oYmFyNjQsCi0JCQkJCSAgICAodTMyKSBwYWRkcmwsCi0JCQkJCSAgICBhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfYWRkcl91cHBlciwKLQkJCQkJICAgICh1MzIpIHBhZGRyaCwgRE9OVF9GTFVTSCk7CisJCQkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLAorCQkJCQkmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXI2NCwKKwkJCQkJcGFkZHJsLAorCQkJCQkmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJCXBhZGRyaCwgRE9OVF9GTFVTSCk7CiAJCQl9CiAJCQlpZiAocmN2cS0+aGVhZCkKIAkJCQlyY3ZxLT50YWlsLT5uZXh0ID0gc2tiOwpAQCAtNDM4MCwxMCArMzUzMiw5IEBACiAJCQlyY3ZxLT5jb3VudCsrOwogCQkJaSsrOwogCQl9IGVsc2UgewotCQkJREJHX0VSUk9SCi0JCQkgICAgKCIlcyBzbGljX3JjdnF1ZXVlX2ZpbGwgY291bGQgb25seSBnZXQgWyVkXSAiCi0JCQkgICAgICJza2J1ZmZzXG4iLAotCQkJICAgICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsIGkpOworCQkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkJInNsaWNfcmN2cXVldWVfZmlsbCBjb3VsZCBvbmx5IGdldCBbJWRdIHNrYnVmZnNcbiIsCisJCQkJaSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTQzOTcsNiArMzU0OCw3IEBACiAJdTMyIHBhZGRybDsKIAl1MzIgcGFkZHJoOwogCXN0cnVjdCBzbGljX3JjdmJ1ZiAqcmN2YnVmID0gKHN0cnVjdCBzbGljX3JjdmJ1ZiAqKXNrYi0+aGVhZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKIAlBU1NFUlQoc2tiLT5sZW4gPT0gU0xJQ19SQ1ZCVUZfSEVBRFNJWkUpOwogCkBAIC00NDA5LDI2ICszNTYxLDI2IEBACiAJcGFkZHJoID0gU0xJQ19HRVRfQUREUl9ISUdIKHBhZGRyKTsKIAogCWlmIChwYWRkcmwgPT0gMCkgewotCQlEQkdfRVJST1IKLQkJICAgICgiJXM6IExPVyAzMmJpdHMgUEhZU0lDQUwgQUREUkVTUyA9PSAwIHNrYlslcF0gICBQUk9CTEVNXG4iCi0JCSAgICAgIiAgICAgICAgIHNrYmRhdGFbJXBdXG4iICIgICAgICAgICBza2JsZW5bJXhdXG4iCi0JCSAgICAgIiAgICAgICAgIHBhZGRyWyVwXVxuIiAiICAgICAgICAgcGFkZHJsWyV4XVxuIgotCQkgICAgICIgICAgICAgICBwYWRkcmhbJXhdXG4iLCBfX2Z1bmNfXywgc2tiLCBza2ItPmRhdGEsCi0JCSAgICAgc2tiLT5sZW4sIHBhZGRyLCBwYWRkcmwsIHBhZGRyaCk7Ci0JCURCR19FUlJPUigiICAgICAgICAgcmN2cS0+aGVhZFslcF1cbiIKLQkJCSAgIiAgICAgICAgIHJjdnEtPnRhaWxbJXBdXG4iCi0JCQkgICIgICAgICAgICByY3ZxLT5jb3VudFsleF1cbiIsIHJjdnEtPmhlYWQsIHJjdnEtPnRhaWwsCi0JCQkgIHJjdnEtPmNvdW50KTsKKwkJZGV2ID0gJmFkYXB0ZXItPm5ldGRldi0+ZGV2OworCQlkZXZfZXJyKGRldiwgIiVzOiBMT1cgMzJiaXRzIFBIWVNJQ0FMIEFERFJFU1MgPT0gMFxuIiwKKwkJCV9fZnVuY19fKTsKKwkJZGV2X2VycihkZXYsICJza2JbJXBdIFBST0JMRU1cbiIsIHNrYik7CisJCWRldl9lcnIoZGV2LCAiICAgICAgICAgc2tiZGF0YVslcF1cbiIsIHNrYi0+ZGF0YSk7CisJCWRldl9lcnIoZGV2LCAiICAgICAgICAgc2tibGVuWyV4XVxuIiwgc2tiLT5sZW4pOworCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHBhZGRyWyVwXVxuIiwgcGFkZHIpOworCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHBhZGRybFsleF1cbiIsIHBhZGRybCk7CisJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcGFkZHJoWyV4XVxuIiwgcGFkZHJoKTsKKwkJZGV2X2VycihkZXYsICIgICAgICAgICByY3ZxLT5oZWFkWyVwXVxuIiwgcmN2cS0+aGVhZCk7CisJCWRldl9lcnIoZGV2LCAiICAgICAgICAgcmN2cS0+dGFpbFslcF1cbiIsIHJjdnEtPnRhaWwpOworCQlkZXZfZXJyKGRldiwgIiAgICAgICAgIHJjdnEtPmNvdW50WyV4XVxuIiwgcmN2cS0+Y291bnQpOwogCX0KIAlpZiAocGFkZHJoID09IDApIHsKLQkJV1JJVEVfUkVHKGFkYXB0ZXItPnNsaWNfcmVncy0+c2xpY19oYmFyLCAodTMyKSBwYWRkcmwsCi0JCQkgIERPTlRfRkxVU0gpOworCQlzbGljX3JlZzMyX3dyaXRlKCZhZGFwdGVyLT5zbGljX3JlZ3MtPnNsaWNfaGJhciwgKHUzMilwYWRkcmwsCisJCQkJIERPTlRfRkxVU0gpOwogCX0gZWxzZSB7Ci0JCVdSSVRFX1JFRzY0KGFkYXB0ZXIsCi0JCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXI2NCwKLQkJCSAgICBwYWRkcmwsCi0JCQkgICAgYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCi0JCQkgICAgcGFkZHJoLCBET05UX0ZMVVNIKTsKKwkJc2xpY19yZWc2NF93cml0ZShhZGFwdGVyLCAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2hiYXI2NCwKKwkJCQkgcGFkZHJsLCAmYWRhcHRlci0+c2xpY19yZWdzLT5zbGljX2FkZHJfdXBwZXIsCisJCQkJIHBhZGRyaCwgRE9OVF9GTFVTSCk7CiAJfQogCWlmIChyY3ZxLT5oZWFkKQogCQlyY3ZxLT50YWlsLT5uZXh0ID0gc2tiOwpAQCAtNDQ0OSw3ICszNjAxLDcgQEAKIAl1bnNpZ25lZCBjaGFyICpvZW1mcnUgPSAodW5zaWduZWQgY2hhciAqKSgmY2FyZC0+Y29uZmlnLk9lbUZydSk7CiAjZW5kaWYKIAotCXNlcV9wcmludGYoc2VxLCAiZHJpdmVyX3ZlcnNpb24gICAgICAgICAgIDogJXMiLCBzbGljX3Byb2NfdmVyc2lvbik7CisJc2VxX3ByaW50ZihzZXEsICJkcml2ZXJfdmVyc2lvbiAgICAgICAgICAgOiAlc1xuIiwgc2xpY19wcm9jX3ZlcnNpb24pOwogCXNlcV9wcmludGYoc2VxLCAiTWljcm9jb2RlIHZlcnNpb25zOiAgICAgICAgICAgXG4iKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgICBHaWdhYml0IChnYikgICAgICAgICA6ICVzICVzXG4iLAogCQkgICAgTU9KQVZFX1VDT0RFX1ZFUlNfU1RSSU5HLCBNT0pBVkVfVUNPREVfVkVSU19EQVRFKTsKQEAgLTQ4ODIsMTAzMCArNDAzNCw2IEBACiAJfQogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gID09PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PSAgICAgICBTTElDICBEVU1QICBNQU5BR0VNRU5UICAgICAgICBTRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PSBEdW1wIHJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jaWYgU0xJQ19EVU1QX0VOQUJMRUQKLQotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi12b2lkICpzbGljX2R1bXBfaGFuZGxlOwkJLyogdGhyZWFkIGhhbmRsZSAqLwotCi0vKgotICogVGhlc2UgYXJlIHRoZSBvbmx5IHRoaW5ncyB5b3Ugc2hvdWxkIGRvIG9uIGEgY29yZS1maWxlOiB1c2Ugb25seSB0aGVzZQotICogZnVuY3Rpb25zIHRvIHdyaXRlIG91dCBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvLgotICovCi1zdGF0aWMgaW50IHNsaWNfZHVtcF9zZWVrKHN0cnVjdCBmaWxlICpTTElDaGFuZGxlLCB1MzIgZmlsZV9vZmZzZXQpCi17Ci0JaWYgKFNMSUNoYW5kbGUtPmZfcG9zICE9IGZpbGVfb2Zmc2V0KSB7Ci0JCS8qREJHX01TRygic2xpY19kdW1wX3NlZWsgIG5vdyBuZWVkZWQgWyV4IDogJXhdXG4iLAotCQkJKHUzMilTTElDaGFuZGxlLT5mX3BvcywgKHUzMilmaWxlX29mZnNldCk7ICovCi0JCWlmIChTTElDaGFuZGxlLT5mX29wLT5sbHNlZWspIHsKLQkJCWlmIChTTElDaGFuZGxlLT5mX29wLT4KLQkJCSAgICBsbHNlZWsoU0xJQ2hhbmRsZSwgZmlsZV9vZmZzZXQsIDApICE9IGZpbGVfb2Zmc2V0KQotCQkJCXJldHVybiAwOwotCQl9IGVsc2UgewotCQkJU0xJQ2hhbmRsZS0+Zl9wb3MgPSBmaWxlX29mZnNldDsKLQkJfQotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBzbGljX2R1bXBfd3JpdGUoc3RydWN0IHNsaWNjYXJkICpjYXJkLAotCQkJICAgY29uc3Qgdm9pZCAqYWRkciwgaW50IHNpemUsIHUzMiBmaWxlX29mZnNldCkKLXsKLQlpbnQgciA9IDE7Ci0JdTMyIHJlc3VsdCA9IDA7Ci0Jc3RydWN0IGZpbGUgKlNMSUNoYW5kbGUgPSBjYXJkLT5kdW1waGFuZGxlOwotCi0jaWZkZWYgSElTVE9SSUNBTAkJLyogbGVnYWN5ICovCi0JZG93bigmU0xJQ2hhbmRsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfc2VtKTsKLSNlbmRpZgotCWlmIChzaXplKSB7Ci0JCXNsaWNfZHVtcF9zZWVrKFNMSUNoYW5kbGUsIGZpbGVfb2Zmc2V0KTsKLQotCQlyZXN1bHQgPQotCQkgICAgU0xJQ2hhbmRsZS0+Zl9vcC0+d3JpdGUoU0xJQ2hhbmRsZSwgYWRkciwgc2l6ZSwKLQkJCQkJICAgICZTTElDaGFuZGxlLT5mX3Bvcyk7Ci0KLQkJciA9IHJlc3VsdCA9PSBzaXplOwotCX0KLQotCWNhcmQtPmR1bXB0aW1lX2NvbXBsZXRlID0gamlmZmllczsKLQljYXJkLT5kdW1wdGltZV9kZWx0YSA9IGNhcmQtPmR1bXB0aW1lX2NvbXBsZXRlIC0gY2FyZC0+ZHVtcHRpbWVfc3RhcnQ7Ci0JY2FyZC0+ZHVtcHRpbWVfc3RhcnQgPSBqaWZmaWVzOwotCi0jaWZkZWYgSElTVE9SSUNBTAotCXVwKCZTTElDaGFuZGxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9zZW0pOwotI2VuZGlmCi0JaWYgKCFyKSB7Ci0JCURCR19FUlJPUigiJXM6IGFkZHJbJXBdIHNpemVbJXhdIHJlc3VsdFsleF0gZmlsZV9vZmZzZXRbJXhdXG4iLAotCQkJICBfX2Z1bmNfXywgYWRkciwgc2l6ZSwgcmVzdWx0LCBmaWxlX29mZnNldCk7Ci0JfQotCXJldHVybiByOwotfQotCi1zdGF0aWMgdWludCBzbGljX2luaXRfZHVtcF90aHJlYWQoc3RydWN0IHNsaWNjYXJkICpjYXJkKQotewotCWNhcmQtPmR1bXBfdGFza19pZCA9IGt0aHJlYWRfcnVuKHNsaWNfZHVtcF90aHJlYWQsICh2b2lkICopY2FyZCwgMCk7Ci0KLS8qICBEQkdfTVNHKCJjcmVhdGUgc2xpY19kdW1wX3RocmVhZCBkdW1wX3BpZFsleF1cbiIsIGNhcmQtPmR1bXBfcGlkKTsgKi8KLQlpZiAoSVNfRVJSKGNhcmQtPmR1bXBfdGFza19pZCkpIHsKLQkJREJHX01TRygiY3JlYXRlIHNsaWNfZHVtcF90aHJlYWQgRkFJTEVEIFxuIik7Ci0JCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKLQl9Ci0KLQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgc2xpY19kdW1wX3RocmVhZCh2b2lkICpjb250ZXh0KQotewotCXN0cnVjdCBzbGljY2FyZCAqY2FyZCA9IChzdHJ1Y3Qgc2xpY2NhcmQgKiljb250ZXh0OwotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBhZGFwdGVyICpkdW1wX2FkYXB0ZXIgPSBOVUxMOwotCXUzMiBkdW1wX2NvbXBsZXRlID0gMDsKLQl1MzIgZGVsYXkgPSBTTElDX1NFQ1NfVE9fSklGRlMoUElOR19USU1FUl9JTlRFUlZBTCk7Ci0Jc3RydWN0IHNsaWNfcmVncyAqcHJlZ3M7Ci0JdTMyIGk7Ci0Jc3RydWN0IHNsaWNfdXByICp1cHIsICp1cHJuZXh0OwotCXUzMiBkdW1wX2NhcmQ7Ci0KLQlBU1NFUlQoY2FyZCk7Ci0KLQljYXJkLT5kdW1wdGhyZWFkX3J1bm5pbmcgPSAxOwotCi0jaWZkZWYgSElTVE9SSUNBTAotCWxvY2tfa2VybmVsKCk7Ci0JLyoKLQkgKiBUaGlzIHRocmVhZCBkb2Vzbid0IG5lZWQgYW55IHVzZXItbGV2ZWwgYWNjZXNzLAotCSAqIHNvIGdldCByaWQgb2YgYWxsIG91ciByZXNvdXJjZXMKLQkgKi8KLQlleGl0X2ZpbGVzKGN1cnJlbnQpOwkvKiBkYWVtb25pemUgZG9lc24ndCBkbyBleGl0X2ZpbGVzICovCi0JY3VycmVudC0+ZmlsZXMgPSBpbml0X3Rhc2suZmlsZXM7Ci0JYXRvbWljX2luYygmY3VycmVudC0+ZmlsZXMtPmNvdW50KTsKLSNlbmRpZgotCi0JZGFlbW9uaXplKCIlcyIsICJzbGljbW9uIik7Ci0KLQkvKiBTZXR1cCBhIG5pY2UgbmFtZSAqLwotCXN0cmNweShjdXJyZW50LT5jb21tLCAic2xpY21vbiIpOwotCURCR19FUlJPUgotCSAgICAoInNsaWNfZHVtcF90aHJlYWRbc2xpY21vbl0gZGFlbW9uIGlzIGFsaXZlIGNhcmRbJXBdIHBpZFsleF1cbiIsCi0JICAgICBjYXJkLCBjYXJkLT5kdW1wX3Rhc2tfaWQtPnBpZCk7Ci0KLQkvKgotCSAqICAgIFNlbmQgbWUgYSBzaWduYWwgdG8gZ2V0IG1lIHRvIGRpZSAoZm9yIGRlYnVnZ2luZykKLQkgKi8KLQlkbyB7Ci0JCS8qCi0JCSAqIElmIGNhcmQgc3RhdGUgaXMgbm90IHNldCB0byB1cCwgc2tpcAotCQkgKi8KLQkJaWYgKGNhcmQtPnN0YXRlICE9IENBUkRfVVApIHsKLQkJCWlmIChjYXJkLT5hZGFwdGVyc19hY3RpdmF0ZWQpCi0JCQkJZ290byB3YWl0OwotCQkJZWxzZQotCQkJCWdvdG8gZW5kX3RocmVhZDsKLQkJfQotCQkvKgotCQkgKiAgICBDaGVjayB0aGUgcmVzdWx0cyBvZiBvdXIgbGFzdCBwaW5nLgotCQkgKi8KLQkJZHVtcF9jYXJkID0gMDsKLSNpZmRlZiBTTElDX0ZBSUxVUkVfRFVNUAotCQlpZiAoY2FyZC0+cGluZ3N0YXR1cyAhPSBJU1JfUElOR01BU0spIHsKLQkJCURCR19NU0cKLQkJCSAgICAoIlxuW3NsaWNtb25dICBDQVJEICMlZCBUSU1FRCBPVVQgLSBzdGF0dXMgIgotCQkJICAgICAiJXg6IERVTVAgVEhFIENBUkQhXG4iLAotCQkJICAgICBjYXJkLT5jYXJkbnVtLCBjYXJkLT5waW5nc3RhdHVzKTsKLQkJCWR1bXBfY2FyZCA9IDE7Ci0JCX0KLSNlbHNlCi0JCS8qCi0JCSAqICBDYXVzZSBhIGNhcmQgUkVTRVQgaW5zdGVhZD8KLQkJICovCi0JCWlmIChjYXJkLT5waW5nc3RhdHVzICE9IElTUl9QSU5HTUFTSykgewotCQkJLyogdG9kby4gZG8gd2Ugd2FudCB0byByZXNldCB0aGUgY2FyZCBpbiBwcm9kdWN0aW9uICovCi0JCQkvKiBEQkdfTVNHKCJcbltzbGljbW9uXSAgQ0FSRCAjJWQgVElNRUQgT1VUIC0gIgotCQkJICAgc3RhdHVzICV4OiBSRVNFVCBUSEUgQ0FSRCFcbiIsIGNhcmQtPmNhcmRudW0sCi0JCQkgICBjYXJkLT5waW5nc3RhdHVzKTsgKi8KLQkJCURCR19FUlJPUgotCQkJICAgICgiXG5bc2xpY21vbl0gIENBUkQgIyVkIFRJTUVEIE9VVCAtIHN0YXR1cyAleDogIgotCQkJICAgICAiRFVNUCBUSEUgQ0FSRCFcbiIsCi0JCQkgICAgIGNhcmQtPmNhcmRudW0sIGNhcmQtPnBpbmdzdGF0dXMpOwotCQkJZHVtcF9jYXJkID0gMTsKLQkJfQotI2VuZGlmCi0JCWlmICgoZHVtcF9jYXJkKQotCQkgICAgfHwgKGNhcmQtPmR1bXBfcmVxdWVzdGVkID09IFNMSUNfRFVNUF9SRVFVRVNURUQpKSB7Ci0JCQlpZiAoY2FyZC0+ZHVtcF9yZXF1ZXN0ZWQgPT0gU0xJQ19EVU1QX1JFUVVFU1RFRCkgewotCQkJCURCR19FUlJPUgotCQkJICAgICgiW3NsaWNtb25dOiBEdW1wIGNhcmQgUmVxdWVzdGVkOiBDYXJkICV4XG4iLAotCQkJCSAgICAgY2FyZC0+Y2FyZG51bSk7Ci0JCQl9Ci0JCQlpZiAoY2FyZC0+cGluZ3N0YXR1cyAhPSBJU1JfUElOR01BU0spIHsKLQkJCQl1c2hvcnQgY3B1aWQgPSAwOwotCQkJCXVzaG9ydCBjcmFzaHBjID0gMDsKLQotCQkJCWlmIChjYXJkLT5hZGFwdGVyWzBdKSB7Ci0JCQkJCWlmICgoY2FyZC0+YWRhcHRlclswXSktPm1lbW9yeWxlbmd0aCA+PQotCQkJCQkgICAgQ1JBU0hfSU5GT19PRkZTRVQgKwotCQkJCQkgICAgc2l6ZW9mKHNsaWNfY3Jhc2hfaW5mbykpIHsKLQkJCQkJCWNoYXIgKmNyYXNocHRyOwotCQkJCQkJcF9zbGljX2NyYXNoX2luZm8gY3Jhc2hpbmZvOwotCi0JCQkJCQljcmFzaHB0ciA9Ci0JCQkJCQkgICAgKChjaGFyICopY2FyZC0+YWRhcHRlclswXS0+Ci0JCQkJCQkgICAgIHNsaWNfcmVncykgKwotCQkJCQkJICAgIENSQVNIX0lORk9fT0ZGU0VUOwotCQkJCQkJY3Jhc2hpbmZvID0KLQkJCQkJCSAgICAocF9zbGljX2NyYXNoX2luZm8pCi0JCQkJCQkgICAgY3Jhc2hwdHI7Ci0JCQkJCQljcHVpZCA9IGNyYXNoaW5mby0+Y3B1X2lkOwotCQkJCQkJY3Jhc2hwYyA9IGNyYXNoaW5mby0+Y3Jhc2hfcGM7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJREJHX0VSUk9SCi0JCQkJICAgICgiW3NsaWNtb25dOiBEdW1wIGNhcmQ6IENhcmQgJXggY3Jhc2hlZCAiCi0JCQkJICAgICAiYW5kIGZhaWxlZCB0byBhbnN3ZXIgUElORy4gIgotCQkJCSAgICAgIkNQVUlEWyV4XSBQQ1sleF1cbiAiLAotCQkJCSAgICAgY2FyZC0+Y2FyZG51bSwgY3B1aWQsIGNyYXNocGMpOwotCQkJfQotCi0JCQljYXJkLT5kdW1wX3JlcXVlc3RlZCA9IFNMSUNfRFVNUF9JTl9QUk9HUkVTUzsKLQotCQkJLyoKLQkJCSAqIFNldCB0aGUgY2FyZCBzdGF0ZSB0byBET1dOIGFuZCB0aGUgYWRhcHRlciBzdGF0ZXMKLQkJCSAqIHRvIFJFU0VULlRoZXkgd2lsbCBjaGVjayB0aGlzIGluIFNpbWJhQ2hlY2tGb3JIYW5nCi0JCQkgKiBhbmQgaW5pdGlhdGUgaW50ZXJmYWNlIHJlc2V0ICh3aGljaCBpbiB0dXJuIHdpbGwKLQkJCSAqIHJlaW5pdGlhbGl6ZSB0aGUgY2FyZCkuCi0JCQkgKi8KLQkJCWNhcmQtPnN0YXRlID0gQ0FSRF9ET1dOOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+Y2FyZF9zaXplOyBpKyspIHsKLQkJCQlhZGFwdGVyID0gY2FyZC0+YWRhcHRlcltpXTsKLQkJCQlpZiAoYWRhcHRlcikgewotCQkJCQlzbGljX2lmX3N0b3BfcXVldWUoYWRhcHRlcik7Ci0KLQkJCQkJaWYgKGFkYXB0ZXItPnN0YXRlID09IEFEQVBUX1VQKSB7Ci0JCQkJCQlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX1JFU0VUOwotCQkJCQkJYWRhcHRlci0+bGlua3N0YXRlID0gTElOS19ET1dOOwotCQkJCQkJREJHX0VSUk9SCi0JCQkJCQkgICAgKCJbc2xpY21vbl06IFNMSUMgQ2FyZFslZF0gIgotCQkJCQkJICAgICAiUG9ydFslZF0gYWRhcHRlclslcF0gIgotCQkJCQkJICAgICAiZG93blxuIiwKLQkJCQkJCSAgICAgKHVpbnQpIGNhcmQtPmNhcmRudW0sCi0JCQkJCQkgICAgICh1aW50KSBpLCBhZGFwdGVyKTsKLQkJCQkJfQotI2lmIFNMSUNfR0VUX1NUQVRTX1RJTUVSX0VOQUJMRUQKLQkJCQkJLyogZnJlZSBzdGF0cyB0aW1lciAqLwotCQkJCQlpZiAoYWRhcHRlci0+c3RhdHN0aW1lcnNldCkgewotCQkJCQkJYWRhcHRlci0+c3RhdHN0aW1lcnNldCA9IDA7Ci0JCQkJCQlkZWxfdGltZXIoJmFkYXB0ZXItPnN0YXRzdGltZXIpOwotCQkJCQl9Ci0jZW5kaWYKLQkJCQl9Ci0JCQl9Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5jYXJkX3NpemU7IGkrKykgewotCQkJCWFkYXB0ZXIgPSBjYXJkLT5hZGFwdGVyW2ldOwotCQkJCWlmICgoYWRhcHRlcikgJiYgKGFkYXB0ZXItPmFjdGl2YXRlZCkpIHsKLQkJCQkJcHJlZ3MgPSBhZGFwdGVyLT5zbGljX3JlZ3M7Ci0JCQkJCWR1bXBfYWRhcHRlciA9IGFkYXB0ZXI7Ci0KLQkJCQkJLyoKLQkJCQkJICogSWYgdGhlIGR1bXAgc3RhdHVzIGlzIHplcm8sIHRoZW4KLQkJCQkJICogdGhlIHV0aWxpdHkgcHJvY2Vzc29yIGhhcyBjcmFzaGVkLgotCQkJCQkgKiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBhbnkgcGVuZGluZwotCQkJCQkgKiB1dGlsaXR5cHJvY2Vzc29yIHJlcXVlc3RzIHdpbGwgbm90Ci0JCQkJCSAqIGNvbXBsZXRlIGFuZCBvdXIgZHVtcCBjb21tYW5kcyB3aWxsCi0JCQkJCSAqIG5vdCBiZSBpc3N1ZWQuCi0JCQkJCSAqCi0JCQkJCSAqIFRvIGF2b2lkIHRoaXMgd2Ugd2lsbCBjbGVhciBhbnkKLQkJCQkJICogcGVuZGluZyB1dGlsaXR5IHByb2Nlc3NvciByZXF1ZXN0cwotCQkJCQkgKiBub3cuCi0JCQkJCSAqLwotCQkJCQlpZiAoIWNhcmQtPnBpbmdzdGF0dXMpIHsKLQkJCQkJCXNwaW5fbG9ja19pcnFzYXZlKAotCQkJCQkJICAgICZhZGFwdGVyLT51cHJfbG9jay5sb2NrLAotCQkJCQkJICAgIGFkYXB0ZXItPnVwcl9sb2NrLmZsYWdzKTsKLQkJCQkJCXVwciA9IGFkYXB0ZXItPnVwcl9saXN0OwotCQkJCQkJd2hpbGUgKHVwcikgewotCQkJCQkJCXVwcm5leHQgPSB1cHItPm5leHQ7Ci0JCQkJCQkJa2ZyZWUodXByKTsKLQkJCQkJCQl1cHIgPSB1cHJuZXh0OwotCQkJCQkJfQotCQkJCQkJYWRhcHRlci0+dXByX2xpc3QgPSAwOwotCQkJCQkJYWRhcHRlci0+dXByX2J1c3kgPSAwOwotCQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKLQkJCQkJCSAgICAmYWRhcHRlci0+dXByX2xvY2subG9jaywKLQkJCQkJCSAgICBhZGFwdGVyLT51cHJfbG9jay5mbGFncyk7Ci0JCQkJCX0KLQotCQkJCQlzbGljX2R1bXBfY2FyZChjYXJkLCBGQUxTRSk7Ci0JCQkJCWR1bXBfY29tcGxldGUgPSAxOwotCQkJCX0KLQotCQkJCWlmIChkdW1wX2NvbXBsZXRlKSB7Ci0JCQkJCURCR19FUlJPUigiU0xJQyBEdW1wIENvbXBsZXRlXG4iKTsKLQkJCQkJLyogIE9ubHkgZHVtcCB0aGUgY2FyZCBvbmUgdGltZSAqLwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChkdW1wX2FkYXB0ZXIpIHsKLQkJCQlEQkdfRVJST1IKLQkJCQkgICAgKCJzbGljIGR1bXAgY29tcGxldGVkLiAiCi0JCQkJICAgICAiUmVlbmFibGUgaW50ZXJmYWNlc1xuIik7Ci0JCQkJc2xpY19jYXJkX2luaXQoY2FyZCwgZHVtcF9hZGFwdGVyKTsKLQotCQkJCS8qCi0JCQkJICogIFJlZW5hYmxlIHRoZSBhZGFwdGVycyB0aGF0IHdlcmUgcmVzZXQKLQkJCQkgKi8KLQkJCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+Y2FyZF9zaXplOyBpKyspIHsKLQkJCQkJYWRhcHRlciA9IGNhcmQtPmFkYXB0ZXJbaV07Ci0JCQkJCWlmIChhZGFwdGVyKSB7Ci0JCQkJCQlpZiAoYWRhcHRlci0+c3RhdGUgPT0KLQkJCQkJCSAgICBBREFQVF9SRVNFVCkgewotCQkJCQkJCURCR19FUlJPUgotCQkJCQkJCSAgICAoInNsaWNkdW1wOiBTTElDICIKLQkJCQkJICAgIkNhcmRbJWRdIFBvcnRbJWRdIGFkYXB0ZXJbJXBdICIKLQkJCQkJICAgImJyaW5nIFVQXG4iLAotCQkJCQkJCSAgICAgKHVpbnQpIGNhcmQtPgotCQkJCQkJCSAgICAgY2FyZG51bSwgKHVpbnQpIGksCi0JCQkJCQkJICAgICBhZGFwdGVyKTsKLQkJCQkJCQlhZGFwdGVyLT5zdGF0ZSA9Ci0JCQkJCQkJICAgIEFEQVBUX0RPV047Ci0JCQkJCQkJYWRhcHRlci0+bGlua3N0YXRlID0KLQkJCQkJCQkgICAgTElOS19ET1dOOwotCQkJCQkJCXNsaWNfZW50cnlfb3BlbgotCQkJCQkJCSAgICAoYWRhcHRlci0+bmV0ZGV2KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQotCQkJCWNhcmQtPmR1bXBfcmVxdWVzdGVkID0gU0xJQ19EVU1QX0RPTkU7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCS8qIGlmIHBpbmdzdGF0dXMgIT0gSVNSX1BJTkdNQVNLKSB8fCBkdW1wX3JlcXVlc3RlZC4uLkVMU0UKLQkJICogICAgV2UgcmVjZWl2ZWQgYSB2YWxpZCBwaW5nIHJlc3BvbnNlLgotCQkgKiAgICBDbGVhciB0aGUgUGluZ3N0YXR1cyBmaWVsZCwgZmluZCBhIHZhbGlkIGFkYXB0ZXIKLQkJICogICAgc3RydWN0dXJlIGFuZCBzZW5kIGFub3RoZXIgcGluZy4KLQkJICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+Y2FyZF9zaXplOyBpKyspIHsKLQkJCQlhZGFwdGVyID0gY2FyZC0+YWRhcHRlcltpXTsKLQkJCQlpZiAoYWRhcHRlciAmJiAoYWRhcHRlci0+c3RhdGUgPT0gQURBUFRfVVApKSB7Ci0JCQkJCWNhcmQtPnBpbmdzdGF0dXMgPSAwOwotCQkJCQlzbGljX3Vwcl9yZXF1ZXN0KGFkYXB0ZXIsIFNMSUNfVVBSX1BJTkcsCi0JCQkJCQkJIDAsIDAsIDAsIDApOwotCQkJCQlicmVhazsJLyogT25seSBpc3N1ZSBvbmUgcGVyIGNhcmQgKi8KLQkJCQl9Ci0JCQl9Ci0JCX0KLXdhaXQ6Ci0JCVNMSUNfSU5URVJSVVBUSUJMRV9TTEVFUF9PTl9USU1FT1VUKGNhcmQtPmR1bXBfd3EsIGRlbGF5KTsKLQl9IHdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOwotCi1lbmRfdGhyZWFkOgotLyogIERCR19NU0coIltzbGljbW9uXSBzbGljX2R1bXBfdGhyZWFkIGNhcmRbJXBdIHBpZFsleF0gRU5ESU5HXG4iLAotICAgIGNhcmQsIGNhcmQtPmR1bXBfcGlkKTsgKi8KLQljYXJkLT5kdW1wdGhyZWFkX3J1bm5pbmcgPSAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZWFkIGEgc2luZ2xlIGJ5dGUgZnJvbSBvdXIgZHVtcCBpbmRleCBmaWxlLiAgVGhpcwotICogdmFsdWUgaXMgdXNlZCBhcyBvdXIgc3VmZml4IGZvciBvdXIgZHVtcCBwYXRoLiAgVGhlCi0gKiB2YWx1ZSBpcyBpbmNyZW1lbnRlZCBhbmQgd3JpdHRlbiBiYWNrIHRvIHRoZSBmaWxlCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHNsaWNfZ2V0X2R1bXBfaW5kZXgoY2hhciAqcGF0aCkKLXsKLQl1bnNpZ25lZCBjaGFyIGluZGV4ID0gMDsKLSNpZmRlZiBTTElDX0RVTVBfSU5ERVhfU1VQUE9SVAotCXUzMiBzdGF0dXM7Ci0Jdm9pZCAqRmlsZUhhbmRsZTsKLQl1MzIgb2Zmc2V0OwotCi0Jb2Zmc2V0ID0gMDsKLQotCS8qCi0JICogT3BlbiB0aGUgaW5kZXggZmlsZS4gIElmIG9uZSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXQKLQkgKi8KLQlzdGF0dXMgPSBjcmVhdGVfZmlsZSgmRmlsZUhhbmRsZSk7Ci0KLQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQotCQlyZXR1cm4gKHVuc2lnbmVkIGNoYXIpIDA7Ci0KLQlzdGF0dXMgPSByZWFkX2ZpbGUoRmlsZUhhbmRsZSwgJmluZGV4LCAxLCAmb2Zmc2V0KTsKLQotCWluZGV4Kys7Ci0KLQlzdGF0dXMgPSB3cml0ZV9maWxlKEZpbGVIYW5kbGUsICZpbmRleCwgMSwgJm9mZnNldCk7Ci0KLQljbG9zZV9maWxlKEZpbGVIYW5kbGUpOwotI2Vsc2UKLQlpbmRleCA9IDA7Ci0jZW5kaWYKLQlyZXR1cm4gaW5kZXg7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZSAqc2xpY19kdW1wX29wZW5fZmlsZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCi17Ci0Jc3RydWN0IGZpbGUgKlNMSUNoYW5kbGUgPSBOVUxMOwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IE5VTEw7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7Ci0JY2hhciBTTElDZmlsZVs1MF07Ci0KLQljYXJkLT5kdW1wZmlsZV9mcyA9IGdldF9mcygpOwotCi0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0KLQltZW1zZXQoU0xJQ2ZpbGUsIDAsIHNpemVvZihTTElDZmlsZSkpOwotCXNwcmludGYoU0xJQ2ZpbGUsICIvdmFyL3RtcC9zbGljJWQtZHVtcC0lZCIsIGNhcmQtPmNhcmRudW0sCi0JCSh1aW50KSBjYXJkLT5kdW1wX2NvdW50KTsKLQljYXJkLT5kdW1wX2NvdW50Kys7Ci0KLQlTTElDaGFuZGxlID0KLQkgICAgZmlscF9vcGVuKFNMSUNmaWxlLCBPX0NSRUFUIHwgT19SRFdSIHwgT19TWU5DIHwgT19MQVJHRUZJTEUsIDA2NjYpOwotCi0JREJHX01TRygiW3NsaWNtb25dOiBEdW1wIENhcmQgIyVkIHRvIGZpbGU6ICVzIFxuIiwgY2FyZC0+Y2FyZG51bSwKLQkJU0xJQ2ZpbGUpOwotCi0vKiAgREJHX01TRygiW3NsaWNtb25dIGZpbHBfb3BlbiAlcyBTTElDaGFuZGxlWyVwXVxuIiwgU0xJQ2ZpbGUsIFNMSUNoYW5kbGUpOyovCi0KLQlpZiAoSVNfRVJSKFNMSUNoYW5kbGUpKQotCQlnb3RvIGVuZF9zbGljZHVtcDsKLQotCWRlbnRyeSA9IFNMSUNoYW5kbGUtPmZfZGVudHJ5OwotCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCi0vKiAgREJHX01TRygiW3NsaWNtb25dIGlub2RlWyVwXSBpX25saW5rWyV4XSBpX21vZGVbJXhdIGlfb3BbJXBdIGlfZm9wWyVwXVxuIgotCQkiZl9vcC0+d3JpdGVbJXBdXG4iLAotCQlpbm9kZSwgaW5vZGUtPmlfbmxpbmssIGlub2RlLT5pX21vZGUsIGlub2RlLT5pX29wLAotCQlpbm9kZS0+aV9mb3AsIFNMSUNoYW5kbGUtPmZfb3AtPndyaXRlKTsgKi8KLQlpZiAoaW5vZGUtPmlfbmxpbmsgPiAxKQotCQlnb3RvIGNsb3NlX3NsaWNkdW1wOwkvKiBtdWx0aXBsZSBsaW5rcyAtIGRvbid0IGR1bXAgKi8KLSNpZmRlZiBISVNUT1JJQ0FMCi0JaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQotCQlnb3RvIGNsb3NlX3NsaWNkdW1wOwotI2VuZGlmCi0JaWYgKCFpbm9kZS0+aV9vcCB8fCAhaW5vZGUtPmlfZm9wKQotCQlnb3RvIGNsb3NlX3NsaWNkdW1wOwotCi0JaWYgKCFTTElDaGFuZGxlLT5mX29wLT53cml0ZSkKLQkJZ290byBjbG9zZV9zbGljZHVtcDsKLQotCS8qCi0JICogIElmIHdlIGdvdCBoZXJlIHdlIGhhdmUgU1VDQ0VTU0ZVTExZIE9QRU5FRCB0aGUgZHVtcCBmaWxlCi0JICovCi0vKiAgREJHX01TRygib3BlbmVkICVzIFNMSUNoYW5kbGVbJXBdXG4iLCBTTElDZmlsZSwgU0xJQ2hhbmRsZSk7ICovCi0JcmV0dXJuIFNMSUNoYW5kbGU7Ci0KLWNsb3NlX3NsaWNkdW1wOgotCURCR19NU0coIltzbGljbW9uXSBzbGljX2R1bXBfb3Blbl9maWxlIGZhaWxlZCBjbG9zZSBTTElDaGFuZGxlWyVwXVxuIiwKLQkJU0xJQ2hhbmRsZSk7Ci0JZmlscF9jbG9zZShTTElDaGFuZGxlLCBOVUxMKTsKLQotZW5kX3NsaWNkdW1wOgotCXNldF9mcyhjYXJkLT5kdW1wZmlsZV9mcyk7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgc2xpY19kdW1wX2Nsb3NlX2ZpbGUoc3RydWN0IHNsaWNjYXJkICpjYXJkKQotewotCi0vKiAgREJHX01TRygiW3NsaWNtb25dIHNsaWNfZHVtcF9DTE9TRV9maWxlIGNsb3NlIFNMSUNoYW5kbGVbJXBdXG4iLAotICAgY2FyZC0+ZHVtcGhhbmRsZSk7ICovCi0KLQlmaWxwX2Nsb3NlKGNhcmQtPmR1bXBoYW5kbGUsIE5VTEwpOwotCi0Jc2V0X2ZzKGNhcmQtPmR1bXBmaWxlX2ZzKTsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfY2FyZChzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsIGJvb2wgcmVzdW1lKQotewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gY2FyZC0+bWFzdGVyOwotCXUzMiBzdGF0dXM7Ci0JdTMyIHF1ZXVlOwotCXUzMiBsZW4sIG9mZnNldDsKLQl1MzIgc3JhbV9zaXplLCBkcmFtX3NpemUsIHJlZ3M7Ci0Jc3RydWN0IHNsaWNjb3JlX2hkciBjb3JlaGRyOwotCXUzMiBmaWxlX29mZnNldDsKLQljaGFyICpuYW1lc3RyOwotCXUzMiBpOwotCXUzMiBtYXhfcXVldWVzID0gMDsKLQl1MzIgcmVzdWx0OwotCi0JY2FyZC0+ZHVtcGhhbmRsZSA9IHNsaWNfZHVtcF9vcGVuX2ZpbGUoY2FyZCk7Ci0KLQlpZiAoY2FyZC0+ZHVtcGhhbmRsZSA9PSBOVUxMKSB7Ci0JCURCR19NU0coIltzbGljbW9uXSBDYW50IGNyZWF0ZSBEdW1wIGZpbGUgLSBkdW1wIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlpZiAoIWNhcmQtPmR1bXBidWZmZXIpIHsKLQkJREJHX01TRygiW3NsaWNtb25dIEluc3VmZmljaWVudCBtZW1vcnkgZm9yIGR1bXBcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JaWYgKCFjYXJkLT5jbWRidWZmZXIpIHsKLQkJREJHX01TRygiW3NsaWNtb25dIEluc3VmZmljaWVudCBjbWQgbWVtb3J5IGZvciBkdW1wXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyoKLQkgKiBXcml0ZSB0aGUgZmlsZSB2ZXJzaW9uIHRvIHRoZSBjb3JlIGhlYWRlci4KLQkgKi8KLQluYW1lc3RyID0gc2xpY19wcm9jX3ZlcnNpb247Ci0JZm9yIChpID0gMDsgaSA8IChEUklWRVJfTkFNRV9TSVpFIC0gMSk7IGkrKywgbmFtZXN0cisrKSB7Ci0JCWlmICghbmFtZXN0cikKLQkJCWJyZWFrOwotCQljb3JlaGRyLmRyaXZlcl92ZXJzaW9uW2ldID0gKm5hbWVzdHI7Ci0JfQotCWNvcmVoZHIuZHJpdmVyX3ZlcnNpb25baV0gPSAwOwotCi0JZmlsZV9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHNsaWNjb3JlX2hkcik7Ci0KLQkvKgotCSAqIElzc3VlIHRoZSBmb2xsb3dpbmcgZGVidWcgY29tbWFuZHMgdG8gdGhlIFNMSUM6Ci0JICogICAgICAgIC0gSGFsdCBib3RoIHJlY2VpdmUgYW5kIHRyYW5zbWl0Ci0JICogICAgICAgIC0gRHVtcCByZWNlaXZlIHJlZ2lzdGVycwotCSAqICAgICAgICAtIER1bXAgdHJhbnNtaXQgcmVnaXN0ZXJzCi0JICogICAgICAgIC0gRHVtcCBzcmFtCi0JICogICAgICAgIC0gRHVtcCBkcmFtCi0JICogICAgICAgIC0gRHVtcCBxdWV1ZXMKLQkgKi8KLQlEQkdfTVNHKCJzbGljRHVtcCBIQUxUIFJlY2VpdmUgUHJvY2Vzc29yXG4iKTsKLQljYXJkLT5kdW1wdGltZV9zdGFydCA9IGppZmZpZXM7Ci0KLQlzdGF0dXMgPSBzbGljX2R1bXBfaGFsdChjYXJkLCBQUk9DX1JFQ0VJVkUpOwotCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHX0VSUk9SCi0JCSAgICAoIkNhbnQgaGFsdCByZWNlaXZlIHNlcXVlbmNlciAtIGR1bXAgZmFpbGVkIHN0YXR1c1sleF1cbiIsCi0JCSAgICAgc3RhdHVzKTsKLQkJZ290byBkb25lOwotCX0KLQotCURCR19NU0coInNsaWNEdW1wIEhBTFQgVHJhbnNtaXQgUHJvY2Vzc29yXG4iKTsKLQlzdGF0dXMgPSBzbGljX2R1bXBfaGFsdChjYXJkLCBQUk9DX1RSQU5TTUlUKTsKLQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCURCR19FUlJPUigiQ2FudCBoYWx0IHRyYW5zbWl0IHNlcXVlbmNlciAtIGR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCS8qIER1bXAgcmVjZWl2ZSByZWdzICovCi0Jc3RhdHVzID0gc2xpY19kdW1wX3JlZyhjYXJkLCBQUk9DX1JFQ0VJVkUpOwotCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJREJHX0VSUk9SKCJDYW50IGR1bXAgcmVjZWl2ZSByZWdpc3RlcnMgLSBkdW1wIGZhaWxlZFxuIik7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlEQkdfTVNHKCJzbGljRHVtcCBXcml0ZSBSZWNlaXZlIFJFR1MgbGVuWyV4XSBvZmZzZXRbJXhdXG4iLAotCQkoU0xJQ19OVU1fUkVHICogNCksIGZpbGVfb2Zmc2V0KTsKLQotCXJlc3VsdCA9Ci0JICAgIHNsaWNfZHVtcF93cml0ZShjYXJkLCBjYXJkLT5kdW1wYnVmZmVyLCBTTElDX05VTV9SRUcgKiA0LAotCQkJICAgIGZpbGVfb2Zmc2V0KTsKLQlpZiAoIXJlc3VsdCkgewotCQlEQkdfRVJST1IKLQkJICAgICgiQ2FudCB3cml0ZSByY3YgcmVnaXN0ZXJzIHRvIGR1bXAgZmlsZSAtIGR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCWNvcmVoZHIuUmN2UmVnT2ZmID0gZmlsZV9vZmZzZXQ7Ci0JY29yZWhkci5SY3ZSZWdzaXplID0gU0xJQ19OVU1fUkVHICogNDsKLQlmaWxlX29mZnNldCArPSBTTElDX05VTV9SRUcgKiA0OwotCi0JLyogRHVtcCB0cmFuc21pdCByZWdzICovCi0Jc3RhdHVzID0gc2xpY19kdW1wX3JlZyhjYXJkLCBQUk9DX1RSQU5TTUlUKTsKLQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCURCR19FUlJPUigiQ2FudCBkdW1wIHRyYW5zbWl0IHJlZ2lzdGVycyAtIGR1bXAgZmFpbGVkXG4iKTsKLQkJZ290byBkb25lOwotCX0KLQotCURCR19NU0coInNsaWNEdW1wIFdyaXRlIFhNSVQgUkVHUyBsZW5bJXhdIG9mZnNldFsleF1cbiIsCi0JCShTTElDX05VTV9SRUcgKiA0KSwgZmlsZV9vZmZzZXQpOwotCi0JcmVzdWx0ID0KLQkgICAgc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIFNMSUNfTlVNX1JFRyAqIDQsCi0JCQkgICAgZmlsZV9vZmZzZXQpOwotCWlmICghcmVzdWx0KSB7Ci0JCURCR19FUlJPUgotCQkgICAgKCJDYW50IHdyaXRlIHhtdCByZWdpc3RlcnMgdG8gZHVtcCBmaWxlIC0gZHVtcCBmYWlsZWRcbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JY29yZWhkci5YbXRSZWdPZmYgPSBmaWxlX29mZnNldDsKLQljb3JlaGRyLlhtdFJlZ3NpemUgPSBTTElDX05VTV9SRUcgKiA0OwotCWZpbGVfb2Zmc2V0ICs9IFNMSUNfTlVNX1JFRyAqIDQ7Ci0KLQlyZWdzID0gU0xJQ19HQk1BWF9SRUc7Ci0KLQljb3JlaGRyLkZpbGVSZWdPZmYgPSBmaWxlX29mZnNldDsKLQljb3JlaGRyLkZpbGVSZWdzaXplID0gcmVncyAqIDQ7Ci0KLQlmb3IgKG9mZnNldCA9IDA7IHJlZ3M7KSB7Ci0JCWxlbiA9IE1JTihyZWdzLCAxNik7CS8qIENhbiBvbmx5IHhmciAxNiByZWdzIGF0IGEgdGltZSAqLwotCi0JCXN0YXR1cyA9IHNsaWNfZHVtcF9kYXRhKGNhcmQsIG9mZnNldCwgKHVzaG9ydCkgbGVuLCBERVNDX1JGSUxFKTsKLQotCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQlEQkdfRVJST1IoIkNhbnQgZHVtcCByZWdpc3RlciBmaWxlIC0gZHVtcCBmYWlsZWRcbiIpOwotCQkJZ290byBkb25lOwotCQl9Ci0KLQkJREJHX01TRygic2xpY0R1bXAgV3JpdGUgUmVnaXN0ZXJGaWxlIGxlblsleF0gb2Zmc2V0WyV4XVxuIiwKLQkJCShsZW4gKiA0KSwgZmlsZV9vZmZzZXQpOwotCi0JCXJlc3VsdCA9Ci0JCSAgICBzbGljX2R1bXBfd3JpdGUoY2FyZCwgY2FyZC0+ZHVtcGJ1ZmZlciwgbGVuICogNCwKLQkJCQkgICAgZmlsZV9vZmZzZXQpOwotCQlpZiAoIXJlc3VsdCkgewotCQkJREJHX0VSUk9SCi0JCQkgICAgKCJDYW50IHdyaXRlIHJlZ2lzdGVyIGZpbGUgdG8gZHVtcCBmaWxlIC0gIgotCQkJICAgICAiZHVtcCBmYWlsZWRcbiIpOwotCQkJZ290byBkb25lOwotCQl9Ci0KLQkJZmlsZV9vZmZzZXQgKz0gbGVuICogNDsKLQkJb2Zmc2V0ICs9IGxlbjsKLQkJcmVncyAtPSBsZW47Ci0JfQotCi0JZHJhbV9zaXplID0gY2FyZC0+Y29uZmlnLkRyYW1TaXplICogMHgxMDAwMDsKLQotCXN3aXRjaCAoYWRhcHRlci0+ZGV2aWQpIHsKLQljYXNlIFNMSUNfMkdCX0RFVklDRV9JRDoKLQkJc3JhbV9zaXplID0gU0xJQ19TUkFNX1NJWkUyR0I7Ci0JCWJyZWFrOwotCWNhc2UgU0xJQ18xR0JfREVWSUNFX0lEOgotCQlzcmFtX3NpemUgPSBTTElDX1NSQU1fU0laRTFHQjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc3JhbV9zaXplID0gMDsKLQkJQVNTRVJUKDApOwotCQlicmVhazsKLQl9Ci0KLQljb3JlaGRyLlNyYW1PZmYgPSBmaWxlX29mZnNldDsKLQljb3JlaGRyLlNyYW1zaXplID0gc3JhbV9zaXplOwotCi0JZm9yIChvZmZzZXQgPSAwOyBzcmFtX3NpemU7KSB7Ci0JCWxlbiA9IE1JTihzcmFtX3NpemUsIERVTVBfQlVGX1NJWkUpOwotCQlzdGF0dXMgPSBzbGljX2R1bXBfZGF0YShjYXJkLCBvZmZzZXQsICh1c2hvcnQpIGxlbiwgREVTQ19TUkFNKTsKLQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJREJHX0VSUk9SCi0JCQkgICAgKCJbc2xpY21vbl0gQ2FudCBkdW1wIFNSQU0gYXQgb2Zmc2V0ICV4IC0gIgotCQkJICAgICAiZHVtcCBmYWlsZWRcbiIsICh1aW50KSBvZmZzZXQpOwotCQkJZ290byBkb25lOwotCQl9Ci0KLQkJREJHX01TRygiW3NsaWNtb25dIHNsaWNEdW1wIFdyaXRlIFNSQU0gIGxlblsleF0gb2Zmc2V0WyV4XVxuIiwKLQkJCWxlbiwgZmlsZV9vZmZzZXQpOwotCi0JCXJlc3VsdCA9Ci0JCSAgICBzbGljX2R1bXBfd3JpdGUoY2FyZCwgY2FyZC0+ZHVtcGJ1ZmZlciwgbGVuLCBmaWxlX29mZnNldCk7Ci0JCWlmICghcmVzdWx0KSB7Ci0JCQlEQkdfRVJST1IKLQkJCSAgICAoIltzbGljbW9uXSBDYW50IHdyaXRlIFNSQU0gdG8gZHVtcCBmaWxlIC0gIgotCQkJICAgICAiZHVtcCBmYWlsZWRcbiIpOwotCQkJZ290byBkb25lOwotCQl9Ci0KLQkJZmlsZV9vZmZzZXQgKz0gbGVuOwotCQlvZmZzZXQgKz0gbGVuOwotCQlzcmFtX3NpemUgLT0gbGVuOwotCX0KLQotCWNvcmVoZHIuRHJhbU9mZiA9IGZpbGVfb2Zmc2V0OwotCWNvcmVoZHIuRHJhbXNpemUgPSBkcmFtX3NpemU7Ci0KLQlmb3IgKG9mZnNldCA9IDA7IGRyYW1fc2l6ZTspIHsKLQkJbGVuID0gTUlOKGRyYW1fc2l6ZSwgRFVNUF9CVUZfU0laRSk7Ci0KLQkJc3RhdHVzID0gc2xpY19kdW1wX2RhdGEoY2FyZCwgb2Zmc2V0LCAodXNob3J0KSBsZW4sIERFU0NfRFJBTSk7Ci0JCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKLQkJCURCR19FUlJPUgotCQkJICAgICgiW3NsaWNtb25dIENhbnQgZHVtcCBkcmFtIGF0IG9mZnNldCAleCAtICIKLQkJCSAgICAgImR1bXAgZmFpbGVkXG4iLCAodWludCkgb2Zmc2V0KTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCURCR19NU0coInNsaWNEdW1wIFdyaXRlIERSQU0gIGxlblsleF0gb2Zmc2V0WyV4XVxuIiwgbGVuLAotCQkJZmlsZV9vZmZzZXQpOwotCi0JCXJlc3VsdCA9Ci0JCSAgICBzbGljX2R1bXBfd3JpdGUoY2FyZCwgY2FyZC0+ZHVtcGJ1ZmZlciwgbGVuLCBmaWxlX29mZnNldCk7Ci0JCWlmICghcmVzdWx0KSB7Ci0JCQlEQkdfRVJST1IKLQkJCSAgICAoIltzbGljbW9uXSBDYW50IHdyaXRlIERSQU0gdG8gZHVtcCBmaWxlIC0gIgotCQkJICAgICAiZHVtcCBmYWlsZWRcbiIpOwotCQkJZ290byBkb25lOwotCQl9Ci0KLQkJZmlsZV9vZmZzZXQgKz0gbGVuOwotCQlvZmZzZXQgKz0gbGVuOwotCQlkcmFtX3NpemUgLT0gbGVuOwotCX0KLQotCW1heF9xdWV1ZXMgPSBTTElDX01BWF9RVUVVRTsKLQotCWZvciAocXVldWUgPSAwOyBxdWV1ZSA8IG1heF9xdWV1ZXM7IHF1ZXVlKyspIHsKLQkJdTMyICpxYXJyYXkgPSAodTMyICopIGNhcmQtPmR1bXBidWZmZXI7Ci0JCXUzMiBxYXJyYXlfcGh5c2wgPSBjYXJkLT5kdW1wYnVmZmVyX3BoeXNsOwotCQl1MzIgcWFycmF5X3BoeXNoID0gY2FyZC0+ZHVtcGJ1ZmZlcl9waHlzaDsKLQkJdTMyIHFzdGFydDsKLQkJdTMyIHFkZWx0YTsKLQkJdTMyIHF0b3RhbCA9IDA7Ci0KLQkJREJHX01TRygiW3NsaWNtb25dIFN0YXJ0IER1bXAgb2YgUVVFVUUgIzB4JXhcbiIsICh1aW50KSBxdWV1ZSk7Ci0KLQkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCAoRFVNUF9CVUZfU0laRSA+PiAyKTsgb2Zmc2V0KyspIHsKLQkJCXFzdGFydCA9IGppZmZpZXM7Ci0JCQlxZGVsdGEgPSAwOwotCi0JCQlzdGF0dXMgPSBzbGljX2R1bXBfcXVldWUoY2FyZCwKLQkJCQkJCSBxYXJyYXlfcGh5c2wsCi0JCQkJCQkgcWFycmF5X3BoeXNoLCBxdWV1ZSk7Ci0JCQlxYXJyYXlfcGh5c2wgKz0gNDsKLQotCQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlicmVhazsKLQotCQkJaWYgKGppZmZpZXMgPiBxc3RhcnQpIHsKLQkJCQlxZGVsdGEgPSBqaWZmaWVzIC0gcXN0YXJ0OwotCQkJCXF0b3RhbCArPSBxZGVsdGE7Ci0JCQl9Ci0JCX0KLQotCQlpZiAob2Zmc2V0KQotCQkJcWRlbHRhID0gcXRvdGFsIC8gb2Zmc2V0OwotCQllbHNlCi0JCQlxZGVsdGEgPSAwOwotCi0vKiAgICAgICAgREJHX01TRygiICAgc2xpY0R1bXAgV3JpdGUgUVVFVUUgIzB4JXggbGVuWyV4XSBvZmZzZXRbJXhdICIKLQkJImF2Z2ppZmZzWyV4XVxuIiwgcXVldWUsIChvZmZzZXQqNCksIGZpbGVfb2Zmc2V0LCBxZGVsdGEpOyAqLwotCi0JCXJlc3VsdCA9Ci0JCSAgICBzbGljX2R1bXBfd3JpdGUoY2FyZCwgY2FyZC0+ZHVtcGJ1ZmZlciwgb2Zmc2V0ICogNCwKLQkJCQkgICAgZmlsZV9vZmZzZXQpOwotCi0JCWlmICghcmVzdWx0KSB7Ci0JCQlEQkdfRVJST1IKLQkJCSAgICAoIltzbGljbW9uXSBDYW50IHdyaXRlIFFVRVVFUyB0byBkdW1wIGZpbGUgLSAiCi0JCQkgICAgICJkdW1wIGZhaWxlZFxuIik7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KLQotCQljb3JlaGRyLnF1ZXVlc1txdWV1ZV0ucXVldWVPZmYgPSBmaWxlX29mZnNldDsKLQkJY29yZWhkci5xdWV1ZXNbcXVldWVdLnF1ZXVlc2l6ZSA9IG9mZnNldCAqIDQ7Ci0JCWZpbGVfb2Zmc2V0ICs9IG9mZnNldCAqIDQ7Ci0KLS8qICAgICAgREJHX01TRygiICAgIFJlbG9hZCBRVUVVRSAjMHgleCBlbGVtZW50c1sleF1cbiIsICh1aW50KXF1ZXVlLCBvZmZzZXQpOyovCi0JCS8qCi0JCSAqIEZpbGwgdGhlIHF1ZXVlIGJhY2sgdXAKLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgewotCQkJcXN0YXJ0ID0gamlmZmllczsKLQkJCXFkZWx0YSA9IDA7Ci0KLQkJCXN0YXR1cyA9IHNsaWNfZHVtcF9sb2FkX3F1ZXVlKGNhcmQsIHFhcnJheVtpXSwgcXVldWUpOwotCQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKLQkJCQlicmVhazsKLQotCQkJaWYgKGppZmZpZXMgPiBxc3RhcnQpIHsKLQkJCQlxZGVsdGEgPSBqaWZmaWVzIC0gcXN0YXJ0OwotCQkJCXF0b3RhbCArPSBxZGVsdGE7Ci0JCQl9Ci0JCX0KLQotCQlpZiAob2Zmc2V0KQotCQkJcWRlbHRhID0gcXRvdGFsIC8gb2Zmc2V0OwotCQllbHNlCi0JCQlxZGVsdGEgPSAwOwotCi0vKiAgICAgIERCR19NU0coIiAgIFJlbG9hZCBET05FIGF2Z2ppZmZzWyV4XVxuIiwgcWRlbHRhKTsgKi8KLQotCQlyZXN1bWUgPSAxOwotCX0KLQotCWxlbiA9IFNMSUNfR0JfQ0FNQUJfU1pFICogNDsKLQlzdGF0dXMgPSBzbGljX2R1bXBfY2FtKGNhcmQsIDAsIGxlbiwgRFVNUF9DQU1fQSk7Ci0JaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlEQkdfRVJST1IoIltzbGljbW9uXSBDYW4ndCBkdW1wIENBTV9BIC0gZHVtcCBmYWlsZWRcbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JcmVzdWx0ID0gc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiwgZmlsZV9vZmZzZXQpOwotCWlmIChyZXN1bHQpIHsKLQkJREJHX0VSUk9SCi0JCSAgICAoIltzbGljbW9uXSBDYW4ndCB3cml0ZSBDQU1fQSBkYXRhIHRvIGR1bXAgZmlsZSAtICIKLQkJICAgICAiZHVtcCBmYWlsZWRcbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCWNvcmVoZHIuQ2FtQU1PZmYgPSBmaWxlX29mZnNldDsKLQljb3JlaGRyLkNhbUFTaXplID0gbGVuOwotCWZpbGVfb2Zmc2V0ICs9IGxlbjsKLQotCWxlbiA9IFNMSUNfR0JfQ0FNQ0RfU1pFICogNDsKLQlzdGF0dXMgPSBzbGljX2R1bXBfY2FtKGNhcmQsIDAsIGxlbiwgRFVNUF9DQU1fQyk7Ci0JaWYgKHN0YXR1cykgewotCQlEQkdfRVJST1IoIltzbGljbW9uXSBDYW4ndCBkdW1wIENBTV9DIC0gZHVtcCBmYWlsZWRcbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JcmVzdWx0ID0gc2xpY19kdW1wX3dyaXRlKGNhcmQsIGNhcmQtPmR1bXBidWZmZXIsIGxlbiwgZmlsZV9vZmZzZXQpOwotCWlmIChyZXN1bHQpIHsKLQkJREJHX0VSUk9SCi0JCSAgICAoIltzbGljbW9uXSBDYW4ndCB3cml0ZSBDQU1fQyBkYXRhIHRvIGR1bXAgZmlsZSAtICIKLQkJICAgICAiZHVtcCBmYWlsZWRcbiIpOwotCQlnb3RvIGRvbmU7Ci0JfQotCWNvcmVoZHIuQ2FtQ01PZmYgPSBmaWxlX29mZnNldDsKLQljb3JlaGRyLkNhbUNTaXplID0gbGVuOwotCWZpbGVfb2Zmc2V0ICs9IGxlbjsKLQotZG9uZToKLQkvKgotCSAqIFdyaXRlIG91dCB0aGUgY29yZSBoZWFkZXIKLQkgKi8KLQlmaWxlX29mZnNldCA9IDA7Ci0JREJHX01TRygiW3NsaWNtb25dIFdyaXRlIENvcmVIZWFkZXIgbGVuWyV4XSBvZmZzZXRbJXhdXG4iLAotCQkodWludCkgc2l6ZW9mKHN0cnVjdCBzbGljY29yZV9oZHIpLCBmaWxlX29mZnNldCk7Ci0KLQlyZXN1bHQgPQotCSAgICBzbGljX2R1bXBfd3JpdGUoY2FyZCwgJmNvcmVoZHIsIHNpemVvZihzdHJ1Y3Qgc2xpY2NvcmVfaGRyKSwKLQkJCSAgICBmaWxlX29mZnNldCk7Ci0JREJHX01TRygiW3NsaWNtb25dIGNvcmVoZHIgIHhvZmZbJXhdIHhzelsleF1cbiIKLQkJIiAgICByb2ZmWyV4XSByc3pbJXhdIGZpbGVvZmZbJXhdIGZpbGVzelsleF1cbiIKLQkJIiAgICBzcmFtb2ZmWyV4XSBzcmFtc3pbJXhdLCBkcmFtb2ZmWyV4XSBkcmFtc3pbJXhdXG4iCi0JCSIgICAgY29yZWhkcl9vZmZzZXRbJXhdXG4iLCBjb3JlaGRyLlhtdFJlZ09mZiwKLQkJY29yZWhkci5YbXRSZWdzaXplLCBjb3JlaGRyLlJjdlJlZ09mZiwgY29yZWhkci5SY3ZSZWdzaXplLAotCQljb3JlaGRyLkZpbGVSZWdPZmYsIGNvcmVoZHIuRmlsZVJlZ3NpemUsIGNvcmVoZHIuU3JhbU9mZiwKLQkJY29yZWhkci5TcmFtc2l6ZSwgY29yZWhkci5EcmFtT2ZmLCBjb3JlaGRyLkRyYW1zaXplLAotCQkodWludCkgc2l6ZW9mKHN0cnVjdCBzbGljY29yZV9oZHIpKTsKLQlmb3IgKGkgPSAwOyBpIDwgbWF4X3F1ZXVlczsgaSsrKSB7Ci0JCURCR19NU0coIltzbGljbW9uXSAgUVVFVUUgMHgleCAgb2Zmc2V0WyV4XSBzaXplWyV4XVxuIiwKLQkJCSh1aW50KSBpLCBjb3JlaGRyLnF1ZXVlc1tpXS5xdWV1ZU9mZiwKLQkJCWNvcmVoZHIucXVldWVzW2ldLnF1ZXVlc2l6ZSk7Ci0KLQl9Ci0KLQlzbGljX2R1bXBfY2xvc2VfZmlsZShjYXJkKTsKLQotCWlmIChyZXN1bWUpIHsKLQkJREJHX01TRygic2xpY0R1bXAgUkVTVEFSVCBSRUNFSVZFIGFuZCBYTUlUIFBST0NFU1NPUlNcblxuIik7Ci0JCXNsaWNfZHVtcF9yZXN1bWUoY2FyZCwgUFJPQ19SRUNFSVZFKTsKLQkJc2xpY19kdW1wX3Jlc3VtZShjYXJkLCBQUk9DX1RSQU5TTUlUKTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgdTMyIHNsaWNfZHVtcF9oYWx0KHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKQotewotCXVuc2lnbmVkIGNoYXIgKmNtZCA9IGNhcmQtPmNtZGJ1ZmZlcjsKLQotCSpjbWQgPSBDT01NQU5EX0JZVEUoQ01EX0hBTFQsIDAsIHByb2MpOwotCi0JcmV0dXJuIHNsaWNfZHVtcF9zZW5kX2NtZChjYXJkLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzbCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2gsIDAsIDApOwotfQotCi1zdGF0aWMgdTMyIHNsaWNfZHVtcF9yZXN1bWUoc3RydWN0IHNsaWNjYXJkICpjYXJkLCB1bnNpZ25lZCBjaGFyIHByb2MpCi17Ci0JdW5zaWduZWQgY2hhciAqY21kID0gY2FyZC0+Y21kYnVmZmVyOwotCi0JKmNtZCA9IENPTU1BTkRfQllURShDTURfUlVOLCAwLCBwcm9jKTsKLQotCXJldHVybiBzbGljX2R1bXBfc2VuZF9jbWQoY2FyZCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2wsCi0JCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNoLCAwLCAwKTsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfcmVnKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdW5zaWduZWQgY2hhciBwcm9jKQotewotCXN0cnVjdCBkdW1wX2NtZCAqZHVtcCA9IChzdHJ1Y3QgZHVtcF9jbWQgKiljYXJkLT5jbWRidWZmZXI7Ci0KLQlkdW1wLT5jbWQgPSBDT01NQU5EX0JZVEUoQ01EX0RVTVAsIDAsIHByb2MpOwotCWR1bXAtPmRlc2MgPSBERVNDX1JFRzsKLQlkdW1wLT5jb3VudCA9IDA7Ci0JZHVtcC0+YWRkciA9IDA7Ci0KLQlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCi0JCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwKLQkJCQkgICBjYXJkLT5kdW1wYnVmZmVyX3BoeXNsLAotCQkJCSAgIGNhcmQtPmR1bXBidWZmZXJfcGh5c2gpOwotfQotCi1zdGF0aWMgdTMyIHNsaWNfZHVtcF9kYXRhKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwKLQkJICAgICAgIHUzMiBhZGRyLCB1c2hvcnQgY291bnQsIHVuc2lnbmVkIGNoYXIgZGVzYykKLXsKLQlzdHJ1Y3QgZHVtcF9jbWQgKmR1bXAgPSAoc3RydWN0IGR1bXBfY21kICopY2FyZC0+Y21kYnVmZmVyOwotCi0JZHVtcC0+Y21kID0gQ09NTUFORF9CWVRFKENNRF9EVU1QLCAwLCBQUk9DX1JFQ0VJVkUpOwotCWR1bXAtPmRlc2MgPSBkZXNjOwotCWR1bXAtPmNvdW50ID0gY291bnQ7Ci0JZHVtcC0+YWRkciA9IGFkZHI7Ci0KLQlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCi0JCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwKLQkJCQkgICBjYXJkLT5kdW1wYnVmZmVyX3BoeXNsLAotCQkJCSAgIGNhcmQtPmR1bXBidWZmZXJfcGh5c2gpOwotfQotCi1zdGF0aWMgdTMyIHNsaWNfZHVtcF9xdWV1ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsCi0JCQl1MzIgYWRkciwgdTMyIGJ1Zl9waHlzaCwgdTMyIHF1ZXVlKQotewotCXN0cnVjdCBkdW1wX2NtZCAqZHVtcCA9IChzdHJ1Y3QgZHVtcF9jbWQgKiljYXJkLT5jbWRidWZmZXI7Ci0KLQlkdW1wLT5jbWQgPSBDT01NQU5EX0JZVEUoQ01EX0RVTVAsIDAsIFBST0NfUkVDRUlWRSk7Ci0JZHVtcC0+ZGVzYyA9IERFU0NfUVVFVUU7Ci0JZHVtcC0+Y291bnQgPSAxOwotCWR1bXAtPmFkZHIgPSBxdWV1ZTsKLQotCXJldHVybiBzbGljX2R1bXBfc2VuZF9jbWQoY2FyZCwKLQkJCQkgICBjYXJkLT5jbWRidWZmZXJfcGh5c2wsCi0JCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNoLAotCQkJCSAgIGFkZHIsIGNhcmQtPmR1bXBidWZmZXJfcGh5c2gpOwotfQotCi1zdGF0aWMgdTMyIHNsaWNfZHVtcF9sb2FkX3F1ZXVlKHN0cnVjdCBzbGljY2FyZCAqY2FyZCwgdTMyIGRhdGEsCi0JCQkJdTMyIHF1ZXVlKQotewotCXN0cnVjdCBkdW1wX2NtZCAqbG9hZCA9IChzdHJ1Y3QgZHVtcF9jbWQgKikgY2FyZC0+Y21kYnVmZmVyOwotCi0JbG9hZC0+Y21kID0gQ09NTUFORF9CWVRFKENNRF9MT0FELCAwLCBQUk9DX1JFQ0VJVkUpOwotCWxvYWQtPmRlc2MgPSBERVNDX1FVRVVFOwotCWxvYWQtPmNvdW50ID0gKHVzaG9ydCkgcXVldWU7Ci0JbG9hZC0+YWRkciA9IGRhdGE7Ci0KLQlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCi0JCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwgMCwgMCk7Ci19Ci0KLXN0YXRpYyB1MzIgc2xpY19kdW1wX2NhbShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQsCi0JCSAgICAgIHUzMiBhZGRyLCB1MzIgY291bnQsIHVuc2lnbmVkIGNoYXIgZGVzYykKLXsKLQlzdHJ1Y3QgZHVtcF9jbWQgKmR1bXAgPSAoc3RydWN0IGR1bXBfY21kICopY2FyZC0+Y21kYnVmZmVyOwotCi0JZHVtcC0+Y21kID0gQ09NTUFORF9CWVRFKENNRF9DQU1fT1BTLCAwLCBQUk9DX05PTkUpOwotCWR1bXAtPmRlc2MgPSBkZXNjOwotCWR1bXAtPmNvdW50ID0gY291bnQ7Ci0JZHVtcC0+YWRkciA9IDA7Ci0KLQlyZXR1cm4gc2xpY19kdW1wX3NlbmRfY21kKGNhcmQsCi0JCQkJICAgY2FyZC0+Y21kYnVmZmVyX3BoeXNsLAotCQkJCSAgIGNhcmQtPmNtZGJ1ZmZlcl9waHlzaCwKLQkJCQkgICBhZGRyLCBjYXJkLT5kdW1wYnVmZmVyX3BoeXNoKTsKLX0KLQotc3RhdGljIHUzMiBzbGljX2R1bXBfc2VuZF9jbWQoc3RydWN0IHNsaWNjYXJkICpjYXJkLAotCQkJICAgdTMyIGNtZF9waHlzbCwKLQkJCSAgIHUzMiBjbWRfcGh5c2gsCi0JCQkgICB1MzIgYnVmX3BoeXNsLCB1MzIgYnVmX3BoeXNoKQotewotCXVsb25nIHRpbWVvdXQgPSBTTElDX01TX1RPX0pJRkZJRVMoNTAwKTsJLyogNTAwIG1zZWMgKi8KLQl1MzIgYXR0ZW1wdHMgPSA1OwotCXUzMiBkZWxheSA9IFNMSUNfTVNfVE9fSklGRklFUygxMCk7CS8qIDEwIG1zZWMgKi8KLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNhcmQtPm1hc3RlcjsKLQotCUFTU0VSVChhZGFwdGVyKTsKLQlkbyB7Ci0JCS8qCi0JCSAqIFplcm8gdGhlIER1bXBzdGF0dXMgZmllbGQgb2YgdGhlIGFkYXB0ZXIgc3RydWN0dXJlCi0JCSAqLwotCQljYXJkLT5kdW1wc3RhdHVzID0gMDsKLQkJLyoKLQkJICogSXNzdWUgdGhlIGR1bXAgY29tbWFuZCB2aWEgYSB1dGlsaXR5IHByb2Nlc3NvciByZXF1ZXN0LgotCQkgKgotCQkgKiBLbHVkZ2U6IFdlIHVzZSB0aGUgSW5mb3JtYXRpb25idWZmZXIgcGFyYW1ldGVyIHRvIGhvbGQKLQkJICogdGhlIGJ1ZmZlciBhZGRyZXNzCi0JCSAqLwotCQlzbGljX3Vwcl9yZXF1ZXN0KGFkYXB0ZXIsIFNMSUNfVVBSX0RVTVAsIGNtZF9waHlzbCwgY21kX3BoeXNoLAotCQkJCSBidWZfcGh5c2wsIGJ1Zl9waHlzaCk7Ci0KLQkJdGltZW91dCArPSBqaWZmaWVzOwotCQkvKgotCQkgKiBTcGluIHVudGlsIGNvbXBsZXRpb24gb3IgdGltZW91dC4KLQkJICovCi0JCXdoaWxlICghY2FyZC0+ZHVtcHN0YXR1cykgewotCQkJaW50IG51bV9zbGVlcHMgPSAwOwotCi0JCQlpZiAoamlmZmllcyA+IHRpbWVvdXQpIHsKLQkJCQkvKgotCQkJCSAqICBDb21wbGV0ZSB0aGUgdGltZWQtb3V0IERVTVAgVVBSIHJlcXVlc3QuCi0JCQkJICovCi0JCQkJc2xpY191cHJfcmVxdWVzdF9jb21wbGV0ZShhZGFwdGVyLCAwKTsKLQkJCQlEQkdfRVJST1IKLQkJCQkgICAgKCIlczogVElNRUQgT1VUIG51bV9zbGVlcHNbJXhdICIKLQkJCQkgICAgICJzdGF0dXNbJXhdXG4iLAotCQkJCSAgICAgX19mdW5jX18sIG51bV9zbGVlcHMsIFNUQVRVU19GQUlMVVJFKTsKLQotCQkJCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKLQkJCX0KLQkJCW51bV9zbGVlcHMrKzsKLQkJCVNMSUNfSU5URVJSVVBUSUJMRV9TTEVFUF9PTl9USU1FT1VUKGNhcmQtPmR1bXBfd3EsCi0JCQkJCQkJICAgIGRlbGF5KTsKLQkJfQotCi0JCWlmIChjYXJkLT5kdW1wc3RhdHVzICYgSVNSX1VQQ0VSUikgewotCQkJLyoKLQkJCSAqIEVycm9yIChvciBxdWV1ZSBlbXB0eSkKLQkJCSAqLwotLyogICAgICAgICAgREJHX0VSUk9SKCJbc2xpY21vbl0gJXM6IERVTVBfU1RBVFVTICYgSVNSX1VQQ0VSUiBzdGF0dXNbJXhdXG4iLAotCQlfX2Z1bmNfXywgU1RBVFVTX0ZBSUxVUkUpOyAqLwotCi0JCQlyZXR1cm4gU1RBVFVTX0ZBSUxVUkU7Ci0JCX0gZWxzZSBpZiAoY2FyZC0+ZHVtcHN0YXR1cyAmIElTUl9VUENCU1kpIHsKLQkJCS8qCi0JCQkgKiBSZXRyeQotCQkJICovCi0JCQlEQkdfRVJST1IoIiVzOiBJU1JfVVBDQlVTWSBhdHRlbXB0WyV4XVxuIiwgX19mdW5jX18sCi0JCQkJICBhdHRlbXB0cyk7Ci0KLQkJCWF0dGVtcHRzLS07Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogc3VjY2VzcwotCQkJICovCi0JCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7Ci0JCX0KLQotCX0gd2hpbGUgKGF0dGVtcHRzKTsKLQotCURCR19FUlJPUigiJXM6IEdBVkUgVVAgQUZURVIgU0VWRVJBTCBBVFRFTVBUUyBzdGF0dXNbJXhdXG4iLAotCQkgIF9fZnVuY19fLCBTVEFUVVNfRkFJTFVSRSk7Ci0KLQkvKgotCSAqIEdhdmUgdXAgYWZ0ZXIgc2V2ZXJhbCBhdHRlbXB0cwotCSAqLwotCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKLX0KLQotI2VuZGlmCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gID09PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PSAgICAgICoqKiBFTkQgKioqKiBFTkQgKioqKiBFTkQgKioqKiBFTkQgKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PSAgICAgICBTTElDICBEVU1QICBNQU5BR0VNRU5UICAgICAgICBTRUNUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT09Ci0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKiogICBNT0RVTEUgSU5JVElBVElPTiAvIFRFUk1JTkFUSU9OIEZVTkNUSU9OUyAgICoqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01OTE1LDQ2ICs0MDQzLDI1IEBACiAJLmlkX3RhYmxlID0gc2xpY19wY2lfdGJsLAogCS5wcm9iZSA9IHNsaWNfZW50cnlfcHJvYmUsCiAJLnJlbW92ZSA9IHNsaWNfZW50cnlfcmVtb3ZlLAotI2lmIFNMSUNfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECi0JLnN1c3BlbmQgPSBzbGljcG1fc3VzcGVuZCwKLQkucmVzdW1lID0gc2xpY3BtX3Jlc3VtZSwKLSNlbmRpZgotLyogICAgLnNodXRkb3duICAgPSAgICAgc2xpY19zaHV0ZG93biwgIE1PT0tfSU5WRVNUSUdBVEUgKi8KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNsaWNfbW9kdWxlX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpZGV2OwotCWludCByZXQ7Ci0KLS8qICAgICAgREJHX01TRygic2xpY29zczogJXMgRU5URVIgY3B1ICVkXG4iLCBfX2Z1bmNfXywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsgKi8KLQogCXNsaWNfaW5pdF9kcml2ZXIoKTsKIAogCWlmIChkZWJ1ZyA+PSAwICYmIHNsaWNfZGVidWcgIT0gZGVidWcpCi0JCXByaW50ayhTTElDTEVWRUwgInNsaWNvc3M6IGRlYnVnIGxldmVsIGlzICVkLlxuIiwgZGVidWcpOworCQlwcmludGsoS0VSTl9ERUJVRyBLQlVJTERfTU9ETkFNRSAiOiBkZWJ1ZyBsZXZlbCBpcyAlZC5cbiIsCisJCSAgICAgICBkZWJ1Zyk7CiAJaWYgKGRlYnVnID49IDApCiAJCXNsaWNfZGVidWcgPSBkZWJ1ZzsKIAotCXBjaWRldiA9IChzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKXNsaWNfZHJpdmVyLmlkX3RhYmxlOwotLyogICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBjYWxsIHBjaV9tb2R1bGVfaW5pdCBqaWZmaWVzWyVseF0gY3B1ICMlZFxuIiwKLQlfX2Z1bmNfXywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsgKi8KLQotCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNsaWNfZHJpdmVyKTsKLQotLyogIERCR19NU0coInNsaWNvc3M6ICVzIEVYSVQgYWZ0ZXIgY2FsbCBwY2lfbW9kdWxlX2luaXQgamlmZmllc1slbHhdICIKLQkgICAgImNwdSAjJWQgc3RhdHVzWyV4XVxuIixfX2Z1bmNfXywgamlmZmllcywKLQkgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLCByZXQpOyAqLwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2xpY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2xpY19tb2R1bGVfY2xlYW51cCh2b2lkKQogewotLyogICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBFTlRFUlxuIiwgX19mdW5jX18pOyAqLwogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2xpY19kcml2ZXIpOwogCXNsaWNfZGVidWdfY2xlYW51cCgpOwotLyogICAgICBEQkdfTVNHKCJzbGljb3NzOiAlcyBFWElUXG4iLCBfX2Z1bmNfXyk7ICovCiB9CiAKIG1vZHVsZV9pbml0KHNsaWNfbW9kdWxlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDNmNDZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L0tjb25maWcKQEAgLTAsMCArMSw4IEBACitjb25maWcgU1RMQzQ1WFgKKwl0cmlzdGF0ZSAic3RsYzQ1NTAvNDU2MCBzdXBwb3J0IgorCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBTUElfTUFTVEVSCisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIGRyaXZlciBmb3Igc3RsYzQ1NTAgYW5kIHN0bGM0NTYwIGNoaXBzZXRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKKwkgIGNhbGxlZCBzdGxjNDV4eC4gIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VlMzI5MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfU1RMQzQ1WFgpCSs9IHN0bGM0NXh4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5jIGIvZHJpdmVycy9zdGFnaW5nL3N0bGM0NXh4L3N0bGM0NXh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjZWQ1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5jCkBAIC0wLDAgKzEsMjYwNiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHN0bGM0NXh4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJzdGxjNDV4eC5oIgorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorCisjaW5jbHVkZSAic3RsYzQ1eHhfbG1hYy5oIgorCisvKgorICogZ3Bpb3Mgc2hvdWxkIGJlIGhhbmRsZWQgaW4gYm9hcmQgZmlsZXMgYW5kIHByb3ZpZGVkIHZpYSBwbGF0Zm9ybSBkYXRhLAorICogYnV0IGJlY2F1c2UgaXQncyBjdXJyZW50bHkgaW1wb3NzaWJsZSBmb3Igc3RsYzQ1eHggdG8gaGF2ZSBhIGhlYWRlciBmaWxlCisgKiBpbiBpbmNsdWRlL2xpbnV4LCBsZXQncyB1c2UgbW9kdWxlIHBhcmFtYXRlcnMgZm9yIG5vdworICovCitzdGF0aWMgaW50IHN0bGM0NXh4X2dwaW9fcG93ZXIgPSA5NzsKK21vZHVsZV9wYXJhbShzdGxjNDV4eF9ncGlvX3Bvd2VyLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzdGxjNDV4eF9ncGlvX3Bvd2VyLCAic3RsYzQ1eHggZ3BpbyBudW1iZXIgZm9yIHBvd2VyIGxpbmUiKTsKKworc3RhdGljIGludCBzdGxjNDV4eF9ncGlvX2lycSA9IDg3OworbW9kdWxlX3BhcmFtKHN0bGM0NXh4X2dwaW9faXJxLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzdGxjNDV4eF9ncGlvX2lycSwgInN0bGM0NXh4IGdwaW8gbnVtYmVyIGZvciBpcnEgbGluZSIpOworCitzdGF0aWMgY29uc3QgdTggZGVmYXVsdF9jYWxfY2hhbm5lbHNbXSA9IHsKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDksCisJMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwKKwkweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGUwLCAweDAwLCAweGUwLCAweDAwLAorCTB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsCisJMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwKKwkweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAorCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksCisJMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwKKwkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAorCTB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsCisJMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKKwkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLAorCTB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsCisJMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKKwkweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LAorCTB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwKKwkweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLAorCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCisJMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsCisJMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsCisJMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwKKwkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAorCTB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsCisJMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKKwkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLAorCTB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKKwkweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLAorCTB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCisJMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwKKwkweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLAorCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCisJMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwKKwkweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAorCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc2LAorCTB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsCisJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCTB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsCisJMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKKwkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LAorCTB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsCisJMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKKwkweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLAorCTB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwKKwkweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLAorCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCisJMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwKKwkweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsCisJMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwKKwkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAorCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDdiLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLAorCTB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsCisJMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLAorCTB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsCisJMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKKwkweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLAorCTB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCisJMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwKKwkweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLAorCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwKKwkweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAorCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsCisJMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywKKwkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsCisJMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKKwkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLAorCTB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDgwLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsCisJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwKKwkweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLAorCTB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsCisJMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwKKwkweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCisJMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwKKwkweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAorCTB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsCisJMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwKKwkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLAorCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsCisJMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKKwkweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAorCTB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsCisJMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwKKwkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NSwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwKKwkweGZmLCAweGQ4LCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsCisJMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwKKwkweGFiLCAweGY2LCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLAorCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCisJMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgyMiwgMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwKKwkweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAorCTB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsCisJMHgwMCwgMHhjYSwgMHg3OSwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwKKwkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLAorCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsCisJMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKKwkweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAorCTB4YTcsIDB4MDAsIDB4YTksIDB4M2QsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsCisJMHgxNywgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwKKwkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLAorCTB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCisJMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKKwkweDk2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwKKwkweDgwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHg4YSwgMHgwOSwgMHgwMCwgMHgwMCwgMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLAorCTB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwKKwkweDQyLCAweGMwLCAweDQyLCAweGMwLCAweDQyLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAorCTB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsCisJMHgwMSwgMHgzNywgMHhhOSwgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywKKwkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLAorCTB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsCisJMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHhjMCwgMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKKwkweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LAorCTB4ZDAsIDB4MDAsIDB4NWQsIDB4NTQsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsCisJMHgyMSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwKKwkweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLAorCTB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCisJMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwKKwkweGEwLCAweDdhLCAweDAwLCAweDA2LCAweDJjLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLAorCTB4YzAsIDB4MGQsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsCisJMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGYsIDB4MDksIDB4MDAsIDB4MDAsCisJMHhjOSwgMHhmZiwgMHhkOCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwKKwkweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCTB4ZjAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsCisJMHgwMSwgMHhhYiwgMHhmNiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwKKwkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLAorCTB4Y2IsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsIDB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsCisJMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHhjMCwgMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKKwkweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLAorCTB4ZmIsIDB4MDAsIDB4Y2EsIDB4NzksIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsCisJMHgyYiwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwKKwkweDAwLCAweGI0LCAweDAwLCAweGI0LCAweDAwLCAweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLAorCTB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCisJMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwKKwkweGFhLCAweGE3LCAweDAwLCAweGE5LCAweDNkLCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LAorCTB4YzAsIDB4MTcsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsCisJMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywKKwkweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLAorCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsCisJMHgwMCwgMHg5NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4OTQsIDB4MDksIDB4MDAsIDB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLAorCTB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsCisJMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHhjMCwgMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKKwkweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLAorCTB4MjIsIDB4MDEsIDB4MzcsIDB4YTksIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsCisJMHgzMywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywKKwkweDAwLCAweGJjLCAweDAwLCAweGJjLCAweDAwLCAweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLAorCTB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwKKwkweGI0LCAweGQwLCAweDAwLCAweDVkLCAweDU0LCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLAorCTB4YzAsIDB4MjEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsCisJMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwKKwkweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsCisJMHgwMCwgMHhhMCwgMHg3YSwgMHgwMCwgMHgwNiwgMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwKKwkweDBkLCAweGMwLCAweDBkLCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LAorCTB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk5LCAweDA5LCAweDAwLAorCTB4MDAsIDB4YzksIDB4ZmYsIDB4ZDgsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsCisJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwKKwkweDAwLCAweGYwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCTB4NTQsIDB4MDEsIDB4YWIsIDB4ZjYsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsCisJMHg0MiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwKKwkweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDAwLCAweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLAorCTB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsCisJMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwKKwkweGJjLCAweGZiLCAweDAwLCAweGNhLCAweDc5LCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLAorCTB4YzAsIDB4MmIsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsCisJMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwKKwkweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLAorCTB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsCisJMHgwMCwgMHhhYSwgMHhhNywgMHgwMCwgMHhhOSwgMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwKKwkweDE3LCAweGMwLCAweDE3LCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLAorCTB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsCisJMHgyYywgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwKKwkweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLAorCTB4OTYsIDB4MDAsIDB4OTYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDllLCAweDA5LCAweDAwLCAweDAwLCAweGM5LCAweGZmLCAweGQ4LCAweGZmLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsCisJMHgwMSwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhkMCwgMHgwMCwKKwkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweDU0LCAweDAxLCAweGFiLCAweGY2LCAweGMwLAorCTB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4YzAsIDB4NDIsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4Y2IsCisJMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwgMHhjYiwgMHgwMCwKKwkweGNiLCAweDIyLCAweDAxLCAweDM3LCAweGE5LCAweGMwLCAweDMzLCAweGMwLCAweDMzLCAweGMwLCAweDMzLAorCTB4YzAsIDB4MzMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsIDB4YmMsIDB4MDAsCisJMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHgwMCwgMHhiYywgMHhmYiwgMHgwMCwgMHhjYSwgMHg3OSwKKwkweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweGMwLCAweDJiLCAweDAwLCAweGI0LCAweDAwLAorCTB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsIDB4MDAsIDB4YjQsCisJMHgwMCwgMHhiNCwgMHhkMCwgMHgwMCwgMHg1ZCwgMHg1NCwgMHhjMCwgMHgyMSwgMHhjMCwgMHgyMSwgMHhjMCwKKwkweDIxLCAweGMwLCAweDIxLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLCAweDAwLCAweGFhLAorCTB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4MDAsIDB4YWEsIDB4YTcsIDB4MDAsIDB4YTksCisJMHgzZCwgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHhjMCwgMHgxNywgMHgwMCwgMHhhMCwKKwkweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLCAweGEwLCAweDAwLAorCTB4YTAsIDB4MDAsIDB4YTAsIDB4N2EsIDB4MDAsIDB4MDYsIDB4MmMsIDB4YzAsIDB4MGQsIDB4YzAsIDB4MGQsCisJMHhjMCwgMHgwZCwgMHhjMCwgMHgwZCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5NiwgMHgwMCwKKwkweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDk2LCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwIH07CisKK3N0YXRpYyBjb25zdCB1OCBkZWZhdWx0X2NhbF9yc3NpW10gPSB7CisJMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwKKwkweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsCisJMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwKKwkweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MGEsIDB4MDEsIDB4NzIsIDB4ZmUsIDB4MWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsCisJMHg3MiwgMHhmZSwgMHgxYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMSwgMHg3MiwgMHhmZSwgMHgxYSwKKwkweDAwLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCitzdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9lZGNmKHN0cnVjdCBzdGxjNDV4eCAqc3RsYyk7CitzdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9zZXR1cChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpOworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2NhbihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpOworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfcHNtKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBlbmFibGUpOworc3RhdGljIGludCBzdGxjNDV4eF90eF9udWxsZnVuYyhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgcG93ZXJzYXZlKTsKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfcHNwb2xsKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBwb3dlcnNhdmUpOworCitzdGF0aWMgc3NpemVfdCBzdGxjNDV4eF9zeXNmc19zaG93X2NhbF9yc3NpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNzaXplX3QgbGVuOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJbGVuID0gUEFHRV9TSVpFOworCisJbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOworCisJaWYgKHN0bGMtPmNhbF9yc3NpKQorCQloZXhfZHVtcF90b19idWZmZXIoc3RsYy0+Y2FsX3Jzc2ksIFJTU0lfQ0FMX0FSUkFZX0xFTiwgMTYsCisJCQkJICAgMiwgYnVmLCBsZW4sIDApOworCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworCisJbGVuID0gc3RybGVuKGJ1Zik7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBzdGxjNDV4eF9zeXNmc19zdG9yZV9jYWxfcnNzaShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlpZiAoY291bnQgIT0gUlNTSV9DQUxfQVJSQVlfTEVOKSB7CisJCXN0bGM0NXh4X2Vycm9yKCJpbnZhbGlkIGNhbF9yc3NpIGxlbmd0aDogJXp1IiwgY291bnQpOworCQljb3VudCA9IDA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlrZnJlZShzdGxjLT5jYWxfcnNzaSk7CisKKwlzdGxjLT5jYWxfcnNzaSA9IGttZW1kdXAoYnVmLCBSU1NJX0NBTF9BUlJBWV9MRU4sIEdGUF9LRVJORUwpOworCisJaWYgKCFzdGxjLT5jYWxfcnNzaSkgeworCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY2FsX3Jzc2kiKTsKKwkJY291bnQgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisgb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc2hvd19jYWxfY2hhbm5lbHMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCQljaGFyICpidWYpCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3NpemVfdCBsZW47CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlsZW4gPSBQQUdFX1NJWkU7CisKKwltdXRleF9sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlpZiAoc3RsYy0+Y2FsX2NoYW5uZWxzKQorCQloZXhfZHVtcF90b19idWZmZXIoc3RsYy0+Y2FsX2NoYW5uZWxzLCBDSEFOTkVMX0NBTF9BUlJBWV9MRU4sCisJCQkJICAgMTYsIDIsIGJ1ZiwgbGVuLCAwKTsKKworCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworCisJbGVuID0gc3RybGVuKGJ1Zik7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBzdGxjNDV4eF9zeXNmc19zdG9yZV9jYWxfY2hhbm5lbHMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOworCisJaWYgKGNvdW50ICE9IENIQU5ORUxfQ0FMX0FSUkFZX0xFTikgeworCQlzdGxjNDV4eF9lcnJvcigiaW52YWxpZCBjYWxfY2hhbm5lbHMgc2l6ZTogJXp1ICIsIGNvdW50KTsKKwkJY291bnQgPSAwOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJa2ZyZWUoc3RsYy0+Y2FsX2NoYW5uZWxzKTsKKworCXN0bGMtPmNhbF9jaGFubmVscyA9IGttZW1kdXAoYnVmLCBjb3VudCwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXN0bGMtPmNhbF9jaGFubmVscykgeworCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY2FsX2NoYW5uZWxzIik7CisJCWNvdW50ID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc3RsYzQ1eHhfc3lzZnNfc2hvd190eF9idWYoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OworCXNzaXplX3QgbGVuID0gMDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcygpIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnN0bGMtPnR4X3NlbnQsIHR4X2xpc3QpIHsKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiMHgleDogMHgleC0weCV4XG4iLAorCQkJICAgICAgIGVudHJ5LT5oYW5kbGUsIGVudHJ5LT5zdGFydCwKKwkJCSAgICAgICBlbnRyeS0+ZW5kKTsKKwl9CisKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKKworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihjYWxfcnNzaSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHN0bGM0NXh4X3N5c2ZzX3Nob3dfY2FsX3Jzc2ksCisJCSAgIHN0bGM0NXh4X3N5c2ZzX3N0b3JlX2NhbF9yc3NpKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjYWxfY2hhbm5lbHMsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzdGxjNDV4eF9zeXNmc19zaG93X2NhbF9jaGFubmVscywKKwkJICAgc3RsYzQ1eHhfc3lzZnNfc3RvcmVfY2FsX2NoYW5uZWxzKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih0eF9idWYsIFNfSVJVR08sIHN0bGM0NXh4X3N5c2ZzX3Nob3dfdHhfYnVmLCBOVUxMKTsKKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfc3BpX3JlYWQoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkgICAgICB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0WzJdOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCisJLyogV2UgZmlyc3QgcHVzaCB0aGUgYWRkcmVzcyAqLworCWFkZHIgPSAoYWRkciA8PCA4KSB8IEFERFJfUkVBRF9CSVRfMTU7CisKKwlzcGlfbWVzc2FnZV9pbml0KCZtKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHQpKTsKKworCXRbMF0udHhfYnVmID0gJmFkZHI7CisJdFswXS5sZW4gPSAyOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisKKwl0WzFdLnJ4X2J1ZiA9IGJ1ZjsKKwl0WzFdLmxlbiA9IGxlbjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOworCisJc3BpX3N5bmMoc3RsYy0+c3BpLCAmbSk7Cit9CisKKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfc3BpX3dyaXRlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyIHRbM107CisJc3RydWN0IHNwaV9tZXNzYWdlIG07CisJdTE2IGxhc3Rfd29yZDsKKworCS8qIFdlIGZpcnN0IHB1c2ggdGhlIGFkZHJlc3MgKi8KKwlhZGRyID0gYWRkciA8PCA4OworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7CisKKwl0WzBdLnR4X2J1ZiA9ICZhZGRyOworCXRbMF0ubGVuID0gMjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFswXSwgJm0pOworCisJdFsxXS50eF9idWYgPSBidWY7CisJdFsxXS5sZW4gPSBsZW47CisJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMV0sICZtKTsKKworCWlmIChsZW4gJSAyKSB7CisJCWxhc3Rfd29yZCA9ICgodTggKilidWYpW2xlbiAtIDFdOworCisJCXRbMl0udHhfYnVmID0gJmxhc3Rfd29yZDsKKwkJdFsyXS5sZW4gPSAyOworCQlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsyXSwgJm0pOworCX0KKworCXNwaV9zeW5jKHN0bGMtPnNwaSwgJm0pOworfQorCitzdGF0aWMgdTE2IHN0bGM0NXh4X3JlYWQxNihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1MTYgdmFsOworCisJc3RsYzQ1eHhfc3BpX3JlYWQoc3RsYywgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOworCisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHUzMiBzdGxjNDV4eF9yZWFkMzIoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJdTMyIHZhbDsKKworCXN0bGM0NXh4X3NwaV9yZWFkKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3dyaXRlMTYoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiB2YWwpCit7CisJc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIGFkZHIsICZ2YWwsIHNpemVvZih2YWwpKTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfd3JpdGUzMihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHVuc2lnbmVkIGxvbmcgYWRkciwgdTMyIHZhbCkKK3sKKwlzdGxjNDV4eF9zcGlfd3JpdGUoc3RsYywgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOworfQorCitzdHJ1Y3Qgc3RsYzQ1eHhfc3BpX3JlZyB7CisJdTE2IGFkZHJlc3M7CisJdTE2IGxlbmd0aDsKKwljaGFyICpuYW1lOworfTsKKworLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCitzdGF0aWMgdm9pZCBzdGxjNDV4eF90eGJ1ZmZlcl9kdW1wKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyOworCWNoYXIgKmJ1ZiwgKnBvczsKKwlpbnQgYnVmX2xlbiwgbCwgY291bnQ7CisKKwlpZiAoIShERUJVR19MRVZFTCAmIERFQlVHX1RYQlVGRkVSKSkKKwkJcmV0dXJuOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7CisKKwlidWZfbGVuID0gNTAwOworCWJ1ZiA9IGttYWxsb2MoYnVmX2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWYpCisJCXJldHVybjsKKworCXBvcyA9IGJ1ZjsKKwljb3VudCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR4YnVmZmVyLCAmc3RsYy0+dHhidWZmZXIsIGJ1ZmZlcl9saXN0KSB7CisJCWwgPSBzbnByaW50Zihwb3MsIGJ1Zl9sZW4sICIweCV4LTB4JXgsIiwKKwkJCSAgICAgdHhidWZmZXItPnN0YXJ0LCB0eGJ1ZmZlci0+ZW5kKTsKKwkJLyogZHJvcCB0aGUgbnVsbCBieXRlICovCisJCXBvcyArPSBsOworCQlidWZfbGVuIC09IGw7CisJCWNvdW50Kys7CisJfQorCisJaWYgKGNvdW50ID09IDApCisJCSpwb3MgPSAnXDAnOworCWVsc2UKKwkJKi0tcG9zID0gJ1wwJzsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYQlVGRkVSLCAidHhidWZmZXI6IGluIGJ1ZmZlciAlZCByZWdpb25zOiAlcyIsCisJCSAgICAgICBjb3VudCwgYnVmKTsKKworCWtmcmVlKGJ1Zik7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLworc3RhdGljIGludCBzdGxjNDV4eF90eGJ1ZmZlcl9maW5kKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgdHhidWZmZXIgKnR4YnVmZmVyOworCWludCBwb3M7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCXBvcyA9IEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJUOworCisJaWYgKGxpc3RfZW1wdHkoJnN0bGMtPnR4YnVmZmVyKSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIHRoZSBlbnRyaWVzIGluIHR4YnVmZmVyIG11c3QgYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBhcmUgaW4KKwkgKiB0aGUgcmVhbCBidWZmZXIKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR4YnVmZmVyLCAmc3RsYy0+dHhidWZmZXIsIGJ1ZmZlcl9saXN0KSB7CisJCWlmIChwb3MgKyBsZW4gPCB0eGJ1ZmZlci0+c3RhcnQpCisJCQlicmVhazsKKwkJcG9zID0gQUxJR04odHhidWZmZXItPmVuZCArIDEsIDQpOworCX0KKworCWlmIChwb3MgKyBsZW4gPiBGSVJNV0FSRV9UWEJVRkZFUl9FTkQpCisJCS8qIG5vdCBlbm91Z2ggcm9vbSAqLworCQlwb3MgPSAtMTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYQlVGRkVSLCAidHhidWZmZXI6IGZpbmQgJXp1IEI6IDB4JXgiLCBsZW4sIHBvcyk7CisKK291dDoKKwlyZXR1cm4gcG9zOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X3R4YnVmZmVyX2FkZChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsCisJCQkJIHN0cnVjdCB0eGJ1ZmZlciAqdHhidWZmZXIpCit7CisJc3RydWN0IHR4YnVmZmVyICpyLCAqcHJldiA9IE5VTEw7CisKKwlpZiAobGlzdF9lbXB0eSgmc3RsYy0+dHhidWZmZXIpKSB7CisJCWxpc3RfYWRkKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QsICZzdGxjLT50eGJ1ZmZlcik7CisJCXJldHVybiAwOworCX0KKworCXIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzdGxjLT50eGJ1ZmZlciwgc3RydWN0IHR4YnVmZmVyLCBidWZmZXJfbGlzdCk7CisKKwlpZiAodHhidWZmZXItPnN0YXJ0IDwgci0+c3RhcnQpIHsKKwkJLyogYWRkIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgKi8KKwkJbGlzdF9hZGQoJnR4YnVmZmVyLT5idWZmZXJfbGlzdCwgJnN0bGMtPnR4YnVmZmVyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJldiA9IE5VTEw7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyLCAmc3RsYy0+dHhidWZmZXIsIGJ1ZmZlcl9saXN0KSB7CisJCS8qIHNraXAgZmlyc3QgZW50cnksIHdlIGNoZWNrZWQgZm9yIHRoYXQgYWJvdmUgKi8KKwkJaWYgKCFwcmV2KSB7CisJCQlwcmV2ID0gcjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogZG91YmxlLWNoZWNrIG92ZXJsYXBzICovCisJCVdBUk5fT05fT05DRSh0eGJ1ZmZlci0+c3RhcnQgPj0gci0+c3RhcnQgJiYKKwkJCSAgICAgdHhidWZmZXItPnN0YXJ0IDw9IHItPmVuZCk7CisJCVdBUk5fT05fT05DRSh0eGJ1ZmZlci0+ZW5kID49IHItPnN0YXJ0ICYmCisJCQkgICAgIHR4YnVmZmVyLT5lbmQgPD0gci0+ZW5kKTsKKworCQlpZiAocHJldi0+ZW5kIDwgdHhidWZmZXItPnN0YXJ0ICYmCisJCSAgICB0eGJ1ZmZlci0+ZW5kIDwgci0+c3RhcnQpIHsKKwkJCS8qIGluc2VydCBhdCB0aGlzIHNwb3QgKi8KKwkJCWxpc3RfYWRkX3RhaWwoJnR4YnVmZmVyLT5idWZmZXJfbGlzdCwgJnItPmJ1ZmZlcl9saXN0KTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJcHJldiA9IHI7CisJfQorCisJLyogbm90IGZvdW5kICovCisJbGlzdF9hZGRfdGFpbCgmdHhidWZmZXItPmJ1ZmZlcl9saXN0LCAmc3RsYy0+dHhidWZmZXIpOworCisJcmV0dXJuIDA7CisKK30KKworLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCitzdGF0aWMgc3RydWN0IHR4YnVmZmVyICpzdGxjNDV4eF90eGJ1ZmZlcl9hbGxvYyhzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsCisJCQkJCQkgc2l6ZV90IGZyYW1lX2xlbikKK3sKKwlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5ID0gTlVMTDsKKwlzaXplX3QgbGVuOworCWludCBwb3M7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCWxlbiA9IEZJUk1XQVJFX1RYQlVGRkVSX0hFQURFUiArIGZyYW1lX2xlbiArIEZJUk1XQVJFX1RYQlVGRkVSX1RSQUlMRVI7CisJcG9zID0gc3RsYzQ1eHhfdHhidWZmZXJfZmluZChzdGxjLCBsZW4pOworCisJaWYgKHBvcyA8IDApCisJCXJldHVybiBOVUxMOworCisJV0FSTl9PTl9PTkNFKHBvcyArIGxlbiA+IEZJUk1XQVJFX1RYQlVGRkVSX0VORCk7CisJV0FSTl9PTl9PTkNFKHBvcyA8IEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJUKTsKKworCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0FUT01JQyk7CisJZW50cnktPnN0YXJ0ID0gcG9zOworCWVudHJ5LT5mcmFtZV9zdGFydCA9IHBvcyArIEZJUk1XQVJFX1RYQlVGRkVSX0hFQURFUjsKKwllbnRyeS0+ZW5kID0gZW50cnktPnN0YXJ0ICsgbGVuIC0gMTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYQlVGRkVSLCAidHhidWZmZXI6IGFsbG9jYXRlZCAweCV4LTB4JXgiLAorCQkgICAgICAgZW50cnktPnN0YXJ0LCBlbnRyeS0+ZW5kKTsKKworCXN0bGM0NXh4X3R4YnVmZmVyX2FkZChzdGxjLCBlbnRyeSk7CisKKwlzdGxjNDV4eF90eGJ1ZmZlcl9kdW1wKHN0bGMpOworCisJcmV0dXJuIGVudHJ5OworfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIHR4X2xvY2sgKi8KK3N0YXRpYyB2b2lkIHN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RydWN0IHN0bGM0NXh4ICpzdGxjLAorCQkJCSAgIHN0cnVjdCB0eGJ1ZmZlciAqdHhidWZmZXIpCit7CisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzKCkiLCBfX2Z1bmNfXyk7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWEJVRkZFUiwgInR4YnVmZmVyOiBmcmVlZCAweCV4LTB4JXgiLAorCQkgICAgICAgdHhidWZmZXItPnN0YXJ0LCB0eGJ1ZmZlci0+ZW5kKTsKKworCWxpc3RfZGVsKCZ0eGJ1ZmZlci0+YnVmZmVyX2xpc3QpOworCWtmcmVlKHR4YnVmZmVyKTsKK30KKworCitzdGF0aWMgaW50IHN0bGM0NXh4X3dhaXRfYml0KHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgdTE2IHJlZywgdTMyIG1hc2ssCisJCQkgICAgIHUzMiBleHBlY3RlZCkKK3sKKwlpbnQgaTsKKwljaGFyIGJ1ZmZlcls0XTsKKworCWZvciAoaSA9IDA7IGkgPCAyMDAwOyBpKyspIHsKKwkJc3RsYzQ1eHhfc3BpX3JlYWQoc3RsYywgcmVnLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwkJaWYgKCgoKih1MzIgKilidWZmZXIpICYgbWFzaykgPT0gZXhwZWN0ZWQpCisJCQlyZXR1cm4gMTsKKwkJbXNsZWVwKDEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IHJldDsKKworCS8qIEZJWE1FOiBzaG91bGQgZHJpdmVyIHVzZSBpdCdzIG93biBzdHJ1Y3QgZGV2aWNlPyAqLworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCAiMzgyNi5hcm0iLCAmc3RsYy0+c3BpLT5kZXYpOworCisJaWYgKHJldCA8IDApIHsKKwkJc3RsYzQ1eHhfZXJyb3IoInJlcXVlc3RfZmlybXdhcmUoKSBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZnctPnNpemUgJSA0KSB7CisJCXN0bGM0NXh4X2Vycm9yKCJmaXJtd2FyZSBzaXplIGlzIG5vdCBtdWx0aXBsZSBvZiAzMmJpdDogJXp1IiwKKwkJCSAgICAgICBmdy0+c2l6ZSk7CisJCXJldHVybiAtRUlMU0VROyAvKiBJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UgICovOworCX0KKworCWlmIChmdy0+c2l6ZSA8IDEwMDApIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZpcm13YXJlIGlzIHRvbyBzbWFsbDogJXp1IiwgZnctPnNpemUpOworCQlyZXR1cm4gLUVJTFNFUTsKKwl9CisKKwlzdGxjLT5mdyA9IGttZW1kdXAoZnctPmRhdGEsIGZ3LT5zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0bGMtPmZ3KSB7CisJCXN0bGM0NXh4X2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBmaXJtd2FyZSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzdGxjLT5md19sZW4gPSBmdy0+c2l6ZTsKKworCXJlbGVhc2VfZmlybXdhcmUoZncpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdHJ1Y3Qgc19kbWFfcmVncyBkbWFfcmVnczsKKwl1bnNpZ25lZCBsb25nIGZ3X2xlbiwgZndfYWRkcjsKKwlsb25nIF9md19sZW47CisJaW50IHJldDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCWlmICghc3RsYy0+ZncpIHsKKwkJcmV0ID0gc3RsYzQ1eHhfcmVxdWVzdF9maXJtd2FyZShzdGxjKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCS8qIHN0b3AgdGhlIGRldmljZSAqLworCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfREVWX0NUUkxfU1RBVCwKKwkJCSBTUElfQ1RSTF9TVEFUX0hPU1RfT1ZFUlJJREUgfCBTUElfQ1RSTF9TVEFUX0hPU1RfUkVTRVQKKwkJCSB8IFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEKTsKKworCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7CisKKwlzdGxjNDV4eF93cml0ZTE2KHN0bGMsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsCisJCQkgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFCisJCQkgfCBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRCk7CisKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCisJZndfYWRkciA9IEZJUk1XQVJFX0FERFJFU1M7CisJZndfbGVuID0gc3RsYy0+ZndfbGVuOworCisJd2hpbGUgKGZ3X2xlbiA+IDApIHsKKwkJX2Z3X2xlbiA9IChmd19sZW4gPiBTUElfTUFYX1BBQ0tFVF9TSVpFKQorCQkJPyBTUElfTUFYX1BBQ0tFVF9TSVpFIDogZndfbGVuOworCQlkbWFfcmVncy5jbWQgPSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFOworCQlkbWFfcmVncy5sZW4gPSBjcHVfdG9fbGUxNihfZndfbGVuKTsKKwkJZG1hX3JlZ3MuYWRkciA9IGNwdV90b19sZTMyKGZ3X2FkZHIpOworCisJCWZ3X2xlbiAtPSBfZndfbGVuOworCQlmd19hZGRyICs9IF9md19sZW47CisKKwkJc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwgZG1hX3JlZ3MuY21kKTsKKworCQlpZiAoc3RsYzQ1eHhfd2FpdF9iaXQoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsCisJCQkJICAgICAgSE9TVF9BTExPV0VELCBIT1NUX0FMTE9XRUQpID09IDApIHsKKwkJCXN0bGM0NXh4X2Vycm9yKCJmd191cGxvYWQgbm90IGFsbG93ZWQgdG8gRE1BIHdyaXRlIik7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCisJCXN0bGM0NXh4X3dyaXRlMTYoc3RsYywgU1BJX0FEUlNfRE1BX1dSSVRFX0xFTiwgZG1hX3JlZ3MubGVuKTsKKwkJc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19ETUFfV1JJVEVfQkFTRSwgZG1hX3JlZ3MuYWRkcik7CisKKwkJc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIFNQSV9BRFJTX0RNQV9EQVRBLCBzdGxjLT5mdywgX2Z3X2xlbik7CisKKwkJLyogRklYTUU6IEkgdGhpbmsgdGhpcyBkb2Vzbid0IHdvcmsgaWYgZmlybXdhcmUgaXMgbGFyZ2UsCisJCSAqIHRoaXMgbG9vcCBnb2VzIHRvIHNlY29uZCByb3VuZC4gZnctPmRhdGEgaXMgbm90CisJCSAqIGluY3JlYXNlZCBhdCBhbGwhICovCisJfQorCisJQlVHX09OKGZ3X2xlbiAhPSAwKTsKKworCS8qIGVuYWJsZSBob3N0IGludGVycnVwdHMgKi8KKwlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5UX0VOLCBTUElfSE9TVF9JTlRTX0RFRkFVTFQpOworCisJLyogYm9vdCB0aGUgZGV2aWNlICovCisJc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ERVZfQ1RSTF9TVEFULAorCQkJIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8IFNQSV9DVFJMX1NUQVRfSE9TVF9SRVNFVAorCQkJIHwgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVCk7CisKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCisJc3RsYzQ1eHhfd3JpdGUxNihzdGxjLCBTUElfQURSU19ERVZfQ1RSTF9TVEFULAorCQkJIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8IFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QpOworCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbGVyIG11c3QgaG9sZCB0eF9sb2NrICovCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9jaGVja190eHNlbnQoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnksICpuOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuLCAmc3RsYy0+dHhfc2VudCwgdHhfbGlzdCkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBlbnRyeS0+bGlmZXRpbWUpKSB7CisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCXN0bGM0NXh4X3dhcm5pbmcoImZyYW1lIDB4JXggbGlmZXRpbWUgZXhjZWVkZWQiLAorCQkJCQkJIGVudHJ5LT5zdGFydCk7CisJCQlsaXN0X2RlbCgmZW50cnktPnR4X2xpc3QpOworCQkJc2tiX3B1bGwoZW50cnktPnNrYiwgZW50cnktPmhlYWRlcl9sZW4pOworCQkJaWVlZTgwMjExX3R4X3N0YXR1cyhzdGxjLT5odywgZW50cnktPnNrYik7CisJCQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfcG93ZXJfb2ZmKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlkaXNhYmxlX2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSkpOworCWdwaW9fc2V0X3ZhbHVlKHN0bGM0NXh4X2dwaW9fcG93ZXIsIDApOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9wb3dlcl9vbihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJZ3Bpb19zZXRfdmFsdWUoc3RsYzQ1eHhfZ3Bpb19wb3dlciwgMSk7CisJZW5hYmxlX2lycShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSkpOworCisJLyoKKwkgKiBuZWVkIHRvIHdhaXQgYSB3aGlsZSBiZWZvcmUgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCwgdGhlIGxlbmd0aAorCSAqIGlzIGp1c3QgYSBndWVzcworCSAqLworCW1zbGVlcCgxMCk7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgdHhfbG9jayAqLworc3RhdGljIHZvaWQgc3RsYzQ1eHhfZmx1c2hfcXVldWVzKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdHJ1Y3QgdHhidWZmZXIgKmVudHJ5OworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9zZW50KSkgeworCQllbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoJnN0bGMtPnR4X3NlbnQsCisJCQkJCSBzdHJ1Y3QgdHhidWZmZXIsIHR4X2xpc3QpOworCQlsaXN0X2RlbCgmZW50cnktPnR4X2xpc3QpOworCQlkZXZfa2ZyZWVfc2tiKGVudHJ5LT5za2IpOworCQlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKKwl9CisKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9zZW50KSk7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnN0bGMtPnR4X3BlbmRpbmcpKSB7CisJCWVudHJ5ID0gbGlzdF9maXJzdF9lbnRyeSgmc3RsYy0+dHhfcGVuZGluZywKKwkJCQkJIHN0cnVjdCB0eGJ1ZmZlciwgdHhfbGlzdCk7CisJCWxpc3RfZGVsKCZlbnRyeS0+dHhfbGlzdCk7CisJCWRldl9rZnJlZV9za2IoZW50cnktPnNrYik7CisJCXN0bGM0NXh4X3R4YnVmZmVyX2ZyZWUoc3RsYywgZW50cnkpOworCX0KKworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnN0bGMtPnR4X3BlbmRpbmcpKTsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZzdGxjLT50eGJ1ZmZlcikpOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF93b3JrX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHN0bGM0NXh4LAorCQkJCQkgICAgIHdvcmtfcmVzZXQpOworCisJbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOworCisJaWYgKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFU0VUKQorCQlnb3RvIG91dDsKKworCXN0bGM0NXh4X3Bvd2VyX29mZihzdGxjKTsKKworCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworCisJLyogd2FpdCB0aGF0IGFsbCB3b3JrX3N0cnVjdHMgaGF2ZSBmaW5pc2hlZCwgd2UgY2FuJ3QgaG9sZAorCSAqIHN0bGMtPm11dGV4IHRvIGF2b2lkIGRlYWRsb2NrICovCisJY2FuY2VsX3dvcmtfc3luYygmc3RsYy0+d29yayk7CisKKwkvKiBGSVhNRTogZmluZCBvdXQgZ29vZCB2YWx1ZSB0byB3YWl0IGZvciBjaGlwIHBvd2VyIGRvd24gKi8KKwltc2xlZXAoMTAwKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCS8qIEZJWE1FOiB3ZSBzaG91bGQgZ3JhY2VmdWxseSBoYW5kbGUgaWYgdGhlIHN0YXRlIGhhcyBjaGFuZ2VkCisJICogYWZ0ZXIgcmUtYWNxdWlyaW5nIG11dGV4ICovCisJV0FSTl9PTihzdGxjLT5md19zdGF0ZSAhPSBGV19TVEFURV9SRVNFVCk7CisKKwlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCXN0bGM0NXh4X2ZsdXNoX3F1ZXVlcyhzdGxjKTsKKwlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwlzdGxjLT5md19zdGF0ZSA9IEZXX1NUQVRFX1JFU0VUVElORzsKKworCXN0bGM0NXh4X3Bvd2VyX29uKHN0bGMpOworCXN0bGM0NXh4X3VwbG9hZF9maXJtd2FyZShzdGxjKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworfQorCisvKiBjYWxsZXIgbXVzdCBob2xkIG11dGV4ICovCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9yZXNldChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJc3RsYzQ1eHhfd2FybmluZygicmVzZXR0aW5nIGZpcm13YXJlIik7CisJc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRVNFVDsKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc3RsYy0+aHcpOworCXF1ZXVlX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwgJnN0bGMtPndvcmtfcmVzZXQpOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF93b3JrX3R4X3RpbWVvdXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc3RsYzQ1eHgsCisJCQkJCSAgICAgd29ya190eF90aW1lb3V0LndvcmspOworCisJc3RsYzQ1eHhfd2FybmluZygidHggdGltZW91dCIpOworCisJbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOworCisJaWYgKHN0bGMtPmZ3X3N0YXRlICE9IEZXX1NUQVRFX1JFQURZKQorCQlnb3RvIG91dDsKKworCXN0bGM0NXh4X3Jlc2V0KHN0bGMpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X2ludF9hY2soc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1MzIgdmFsKQoreworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRfQUNLLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF93YWtldXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1MzIgaW50czsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCS8qIHdha2UgdGhlIGNoaXAgKi8KKwlzdGxjNDV4eF93cml0ZTMyKHN0bGMsIFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTLCBTUElfVEFSR0VUX0lOVF9XQUtFVVApOworCisJLyogQW5kIHdhaXQgZm9yIHRoZSBSRUFEWSBpbnRlcnJ1cHQgKi8KKwl0aW1lb3V0ID0gamlmZmllcyArIEhaOworCisJaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCXdoaWxlICghKGludHMgJiBTUElfSE9TVF9JTlRfUkVBRFkpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJCWdvdG8gb3V0OworCQlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisJfQorCisJc3RsYzQ1eHhfaW50X2FjayhzdGxjLCBTUElfSE9TVF9JTlRfUkVBRFkpOworCitvdXQ6CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9zbGVlcChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJc3RsYzQ1eHhfd3JpdGUzMihzdGxjLCBTUElfQURSU19BUk1fSU5URVJSVVBUUywgU1BJX1RBUkdFVF9JTlRfU0xFRVApOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9pbnRfcmVhZHkoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXN0bGM0NXh4X3dyaXRlMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRfRU4sCisJCQkgU1BJX0hPU1RfSU5UX1VQREFURSB8IFNQSV9IT1NUX0lOVF9TV19VUERBVEUpOworCisJc3dpdGNoIChzdGxjLT5md19zdGF0ZSkgeworCWNhc2UgRldfU1RBVEVfQk9PVElORzoKKwkJc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRUFEWTsKKwkJY29tcGxldGUoJnN0bGMtPmZ3X2NvbXApOworCQlicmVhazsKKwljYXNlIEZXX1NUQVRFX1JFU0VUVElORzoKKwkJc3RsYy0+Zndfc3RhdGUgPSBGV19TVEFURV9SRUFEWTsKKworCQlzdGxjNDV4eF90eF9zY2FuKHN0bGMpOworCQlzdGxjNDV4eF90eF9zZXR1cChzdGxjKTsKKwkJc3RsYzQ1eHhfdHhfZWRjZihzdGxjKTsKKworCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc3RsYy0+aHcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfdHhhY2soc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOworCXN0cnVjdCBzX2xtb190eCAqdHg7CisJc3RydWN0IHR4YnVmZmVyICplbnRyeTsKKwlpbnQgZm91bmQgPSAwOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJY29udHJvbCA9IChzdHJ1Y3Qgc19sbV9jb250cm9sICopIHNrYi0+ZGF0YTsKKwl0eCA9IChzdHJ1Y3Qgc19sbW9fdHggKikgKGNvbnRyb2wgKyAxKTsKKworCWlmIChsaXN0X2VtcHR5KCZzdGxjLT50eF9zZW50KSkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJc3RsYzQ1eHhfd2FybmluZygibm8gZnJhbWVzIHdhaXRpbmcgZm9yICIKKwkJCQkJICJhY2tub3dsZWRnZW1lbnQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZzdGxjLT50eF9zZW50LCB0eF9saXN0KSB7CisJCWlmIChjb250cm9sLT5oYW5kbGUgPT0gZW50cnktPmhhbmRsZSkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlzdGxjNDV4eF93YXJuaW5nKCJjb3VsZG4ndCBmaW5kIGZyYW1lIGZvciB0eCBhY2sgMHgleCIsCisJCQkJCSBjb250cm9sLT5oYW5kbGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfVFgsICJUWCBBQ0sgMHgleCIsIGVudHJ5LT5oYW5kbGUpOworCisJaWYgKGVudHJ5LT5zdGF0dXNfbmVlZGVkKSB7CisJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGVudHJ5LT5za2IpOworCisJCWlmICghKHR4LT5mbGFncyAmIExNX1RYX0ZBSUxFRCkpIHsKKwkJCS8qIGZyYW1lIHdhcyBhY2tlZCAqLworCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCQkJaW5mby0+c3RhdHVzLmFja19zaWduYWwgPSB0eC0+cmNwaSAvIDIgLSAxMTA7CisJCX0KKworCQlza2JfcHVsbChlbnRyeS0+c2tiLCBlbnRyeS0+aGVhZGVyX2xlbik7CisKKwkJaWVlZTgwMjExX3R4X3N0YXR1cyhzdGxjLT5odywgZW50cnktPnNrYik7CisJfQorCisJbGlzdF9kZWwoJmVudHJ5LT50eF9saXN0KTsKKworCXN0bGM0NXh4X2NoZWNrX3R4c2VudChzdGxjKTsKKwlpZiAobGlzdF9lbXB0eSgmc3RsYy0+dHhfc2VudCkpCisJCS8qIHRoZXJlIGFyZSBubyBwZW5kaW5nIGZyYW1lcywgd2UgY2FuIHN0b3AgdGhlIHR4IHRpbWVvdXQKKwkJICogdGltZXIgKi8KKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmc3RsYy0+d29ya190eF90aW1lb3V0KTsKKworCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwlzdGxjNDV4eF90eGJ1ZmZlcl9mcmVlKHN0bGMsIGVudHJ5KTsKKworCWlmIChzdGxjLT50eF9xdWV1ZV9zdG9wcGVkICYmCisJICAgIHN0bGM0NXh4X3R4YnVmZmVyX2ZpbmQoc3RsYywgTUFYX0ZSQU1FX0xFTikgIT0gLTEpIHsKKwkJc3RsYzQ1eHhfZGVidWcoREVCVUdfUVVFVUUsICJyb29tIGluIHR4IGJ1ZmZlciwgd2FraW5nIHF1ZXVlcyIpOworCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc3RsYy0+aHcpOworCQlzdGxjLT50eF9xdWV1ZV9zdG9wcGVkID0gMDsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGxjNDV4eF9yeF9jb250cm9sKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOworCWludCByZXQgPSAwOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJY29udHJvbCA9IChzdHJ1Y3Qgc19sbV9jb250cm9sICopIHNrYi0+ZGF0YTsKKworCXN3aXRjaCAoY29udHJvbC0+b2lkKSB7CisJY2FzZSBMTV9PSURfVFg6CisJCXJldCA9IHN0bGM0NXh4X3J4X3R4YWNrKHN0bGMsIHNrYik7CisJCWJyZWFrOworCWNhc2UgTE1fT0lEX1NFVFVQOgorCWNhc2UgTE1fT0lEX1NDQU46CisJY2FzZSBMTV9PSURfVFJBUDoKKwljYXNlIExNX09JRF9FRENGOgorCWNhc2UgTE1fT0lEX0tFWUNBQ0hFOgorCWNhc2UgTE1fT0lEX1BTTToKKwljYXNlIExNX09JRF9TVEFUUzoKKwljYXNlIExNX09JRF9MRUQ6CisJZGVmYXVsdDoKKwkJc3RsYzQ1eHhfd2FybmluZygidW5oYW5kbGVkIHJ4IGNvbnRyb2wgb2lkICVkXG4iLAorCQkJCSBjb250cm9sLT5vaWQpOworCQlicmVhazsKKwl9CisKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBjb3BpZWQgZnJvbSBtYWM4MDIxMSAqLworc3RhdGljIHZvaWQgc3RsYzQ1eHhfcGFyc2VfZWxlbXModTggKnN0YXJ0LCBzaXplX3QgbGVuLAorCQkJCSBzdHJ1Y3Qgc3RsYzQ1eHhfaWVfdGltICoqdGltLAorCQkJCSBzaXplX3QgKnRpbV9sZW4pCit7CisJc2l6ZV90IGxlZnQgPSBsZW47CisJdTggKnBvcyA9IHN0YXJ0OworCisJd2hpbGUgKGxlZnQgPj0gMikgeworCQl1OCBpZCwgZWxlbjsKKworCQlpZCA9ICpwb3MrKzsKKwkJZWxlbiA9ICpwb3MrKzsKKwkJbGVmdCAtPSAyOworCisJCWlmIChlbGVuID4gbGVmdCkKKwkJCXJldHVybjsKKworCQlzd2l0Y2ggKGlkKSB7CisJCWNhc2UgV0xBTl9FSURfVElNOgorCQkJKnRpbSA9IChzdHJ1Y3Qgc3RsYzQ1eHhfaWVfdGltICopIHBvczsKKwkJCSp0aW1fbGVuID0gZWxlbjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlsZWZ0IC09IGVsZW47CisJCXBvcyArPSBlbGVuOworCX0KK30KKworLyoKKyAqIG1hYzgwMjExIGRvZXNuJ3QgaGF2ZSBzdXBwb3J0IGZvciBhc2tpbmcgZnJhbWVzIHdpdGggUFMtUG9sbCwgc28gbGV0J3MKKyAqIGltcGxlbWVudCBpbiB0aGUgZHJpdmVyIGZvciBub3cuIFdlIGhhdmUgdG8gYWRkIHN1cHBvcnQgdG8gbWFjODAyMTEKKyAqIGxhdGVyLgorICovCitzdGF0aWMgaW50IHN0bGM0NXh4X2NoZWNrX21vcmVfZGF0YShzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNfbG1fZGF0YV9pbiAqZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX2luICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXNpemVfdCBsZW47CisJdTE2IGZjOworCisJaGRyID0gKHZvaWQgKikgc2tiLT5kYXRhICsgc2l6ZW9mKCpkYXRhKTsKKwlsZW4gPSBza2ItPmxlbiAtIHNpemVvZigqZGF0YSk7CisKKwkvKiBtaW5pbXVtIGZyYW1lIGxlbmd0aCBpcyB0aGUgbnVsbCBmcmFtZSBsZW5ndGggMjQgYnl0ZXMgKi8KKwlpZiAobGVuIDwgMjQpIHsKKwkJc3RsYzQ1eHhfd2FybmluZygiaW52YWxpZCBmcmFtZSBsZW5ndGggd2hlbiBjaGVja2luZyBmb3IgIgorCQkJCSAibW9yZSBkYXRhIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwlpZiAoIShmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykpCisJCS8qIHRoaXMgaXMgbm90IGZyb20gRFMgKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGhkci0+YWRkcjEsIHN0bGMtPm1hY19hZGRyKSAhPSAwKQorCQkvKiB0aGUgZnJhbWUgd2FzIG5vdCBmb3IgdXMgKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoIShmYyAmIElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKSkgeworCQkvKiBBUCBoYXMgbm8gbW9yZSBmcmFtZXMgYnVmZmVyZWQgZm9yIHVzICovCisJCXN0bGM0NXh4X2RlYnVnKERFQlVHX1BTTSwgImFsbCBidWZmZXJlZCBmcmFtZXMgcmV0cmlldmVkIik7CisJCXN0bGMtPnBzcG9sbGluZyA9IGZhbHNlOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBNT1JFREFUQSBiaXQgaXMgc2V0LCBsZXQncyBhc2sgZm9yIGEgbmV3IGZyYW1lIGZyb20gdGhlIEFQICovCisJc3RsYzQ1eHhfdHhfcHNwb2xsKHN0bGMsIHN0bGMtPnBzbSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG1hYzgwMjExIGNhbm5vdCByZWFkIFRJTSBmcm9tIGJlYWNvbnMsIHNvIGxldCdzIGFkZCBhIGhhY2sgdG8gdGhlCisgKiBkcml2ZXIuIFdlIGhhdmUgdG8gYWRkIHN1cHBvcnQgdG8gbWFjODAyMTEgbGF0ZXIuCisgKi8KK3N0YXRpYyBpbnQgc3RsYzQ1eHhfcnhfZGF0YV9iZWFjb24oc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzX2xtX2RhdGFfaW4gKmRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9pbiAqKSBza2ItPmRhdGE7CisJc2l6ZV90IGxlbiA9IHNrYi0+bGVuLCB0aW1fbGVuID0gMCwgYmFzZWxlbiwgcHZibWFwX2xlbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJc3RydWN0IHN0bGM0NXh4X2llX3RpbSAqdGltID0gTlVMTDsKKwlpbnQgYm1hcF9vZmZzZXQsIGluZGV4LCBhaWRfYml0OworCisJbWdtdCA9ICh2b2lkICopIHNrYi0+ZGF0YSArIHNpemVvZigqZGF0YSk7CisKKwliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CisJaWYgKGJhc2VsZW4gPiBsZW4pIHsKKwkJc3RsYzQ1eHhfd2FybmluZygiaW52YWxpZCBiYXNlbGVuIGluIGJlYWNvbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdGxjNDV4eF9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwgJnRpbSwKKwkJCSAgICAgJnRpbV9sZW4pOworCisJaWYgKCF0aW0pIHsKKwkJc3RsYzQ1eHhfd2FybmluZygiZGlkbid0IGZpbmQgdGltIGZyb20gYSBiZWFjb24iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYm1hcF9vZmZzZXQgPSB0aW0tPmJtYXBfY29udHJvbCAmIDB4ZmU7CisJaW5kZXggPSBzdGxjLT5haWQgLyA4IC0gYm1hcF9vZmZzZXQ7CisKKwlwdmJtYXBfbGVuID0gdGltX2xlbiAtIDM7CisJaWYgKGluZGV4ID4gcHZibWFwX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhaWRfYml0ID0gISEodGltLT5wdmJtYXBbaW5kZXhdICYgKDEgPDwgc3RsYy0+YWlkICUgOCkpOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAiZmMgMHgleCBkdXJhdGlvbiAlZCBzZXEgJWQgZHRpbSAldSAiCisJCSAgICAgICAiYm1hcF9jb250cm9sIDB4JXggYWlkX2JpdCAlZCIsCisJCSAgICAgICBtZ210LT5mcmFtZV9jb250cm9sLCBtZ210LT5kdXJhdGlvbiwgbWdtdC0+c2VxX2N0cmwgPj4gNCwKKwkJICAgICAgIHRpbS0+ZHRpbV9jb3VudCwgdGltLT5ibWFwX2NvbnRyb2wsIGFpZF9iaXQpOworCisJaWYgKCFhaWRfYml0KQorCQlyZXR1cm4gMDsKKworCXN0bGMtPnBzcG9sbGluZyA9IHRydWU7CisJc3RsYzQ1eHhfdHhfcHNwb2xsKHN0bGMsIHN0bGMtPnBzbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGxjNDV4eF9yeF9kYXRhKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IHNfbG1fZGF0YV9pbiAqZGF0YSA9IChzdHJ1Y3Qgc19sbV9kYXRhX2luICopIHNrYi0+ZGF0YTsKKwlpbnQgYWxpZ24gPSAwOworCXU4ICpwLCBhbGlnbl9sZW47CisJdTE2IGxlbjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCWlmIChzdGxjLT5wc20pIHsKKwkJaWYgKGRhdGEtPmZsYWdzICYgTE1fSU5fQkVBQ09OKQorCQkJc3RsYzQ1eHhfcnhfZGF0YV9iZWFjb24oc3RsYywgc2tiKTsKKwkJZWxzZSBpZiAoc3RsYy0+cHNwb2xsaW5nICYmIChkYXRhLT5mbGFncyAmIExNX0lOX0RBVEEpKQorCQkJc3RsYzQ1eHhfY2hlY2tfbW9yZV9kYXRhKHN0bGMsIHNrYik7CisJfQorCisJbWVtc2V0KCZzdGF0dXMsIDAsIHNpemVvZihzdGF0dXMpKTsKKworCXN0YXR1cy5mcmVxID0gZGF0YS0+ZnJlcXVlbmN5OworCXN0YXR1cy5zaWduYWwgPSBkYXRhLT5yY3BpIC8gMiAtIDExMDsKKworCS8qIGxldCdzIGFzc3VtZSB0aGF0IG1heGltdW0gcmNwaSB2YWx1ZSBpcyAxNDAgKD0gMzUgZEJtKSAqLworCXN0YXR1cy5xdWFsID0gZGF0YS0+cmNwaSAqIDEwMCAvIDE0MDsKKworCXN0YXR1cy5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKworCS8qCisJICogRklYTUU6IHRoaXMgZ2l2ZXMgd2FybmluZyBmcm9tIF9faWVlZTgwMjExX3J4KCkKKwkgKgorCSAqIHN0YXR1cy5yYXRlX2lkeCA9IGRhdGEtPnJhdGU7CisJICovCisKKwlsZW4gPSBkYXRhLT5sZW5ndGg7CisKKwlpZiAoZGF0YS0+ZmxhZ3MgJiBMTV9GTEFHX0FMSUdOKQorCQlhbGlnbiA9IDE7CisKKwlza2JfcHVsbChza2IsIHNpemVvZigqZGF0YSkpOworCisJaWYgKGFsaWduKSB7CisJCXAgPSBza2ItPmRhdGE7CisJCWFsaWduX2xlbiA9ICpwOworCQlza2JfcHVsbChza2IsIGFsaWduX2xlbik7CisJfQorCisJc2tiX3RyaW0oc2tiLCBsZW4pOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfUlgsICJyeCBkYXRhIDB4JXAgJWQgQiIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCXN0bGM0NXh4X2R1bXAoREVCVUdfUlhfQ09OVEVOVCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwlpZWVlODAyMTFfcngoc3RsYy0+aHcsIHNrYiwgJnN0YXR1cyk7CisKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfcngoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgcmV0OworCXUxNiBsZW47CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlzdGxjNDV4eF93YWtldXAoc3RsYyk7CisKKwkvKiBkdW1teSByZWFkIHRvIGZsdXNoIFNQSSBETUEgY29udHJvbGxlciBidWcgKi8KKwlzdGxjNDV4eF9yZWFkMTYoc3RsYywgU1BJX0FEUlNfR0VOX1BVUlBfMSk7CisKKwlsZW4gPSBzdGxjNDV4eF9yZWFkMTYoc3RsYywgU1BJX0FEUlNfRE1BX0RBVEEpOworCisJaWYgKGxlbiA9PSAwKSB7CisJCXN0bGM0NXh4X3dhcm5pbmcoInJ4IHJlcXVlc3Qgb2YgemVybyBieXRlcyIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7CisJaWYgKCFza2IpIHsKKwkJc3RsYzQ1eHhfd2FybmluZygiY291bGQgbm90IGFsbG9jIHNrYiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzdGxjNDV4eF9zcGlfcmVhZChzdGxjLCBTUElfQURSU19ETUFfREFUQSwgc2tiX3B1dChza2IsIGxlbiksIGxlbik7CisKKwlzdGxjNDV4eF9zbGVlcChzdGxjKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1JYLCAicnggZnJhbWUgMHglcCAlZCBCIiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJc3RsYzQ1eHhfZHVtcChERUJVR19SWF9DT05URU5ULCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCWNvbnRyb2wgPSAoc3RydWN0IHNfbG1fY29udHJvbCAqKSBza2ItPmRhdGE7CisKKwlpZiAoY29udHJvbC0+ZmxhZ3MgJiBMTV9GTEFHX0NPTlRST0wpCisJCXJldCA9IHN0bGM0NXh4X3J4X2NvbnRyb2woc3RsYywgc2tiKTsKKwllbHNlCisJCXJldCA9IHN0bGM0NXh4X3J4X2RhdGEoc3RsYywgc2tiKTsKKworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGlycXJldHVybl90IHN0bGM0NXh4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpjb25maWcpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvbmZpZzsKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0lSUSwgIklSUSIpOworCisJcXVldWVfd29yayhzdGxjLT5ody0+d29ya3F1ZXVlLCAmc3RsYy0+d29yayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfZnJhbWUoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCB1MzIgYWRkcmVzcywKKwkJCSAgICAgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzX2RtYV9yZWdzIGRtYV9yZWdzOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgaW50czsKKworCXN0bGMtPnR4X2ZyYW1lcysrOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfVFgsICJ0eCBmcmFtZSAweCVwICV6dSBCIiwgYnVmLCBsZW4pOworCXN0bGM0NXh4X2R1bXAoREVCVUdfVFhfQ09OVEVOVCwgYnVmLCBsZW4pOworCisJc3RsYzQ1eHhfd2FrZXVwKHN0bGMpOworCisJZG1hX3JlZ3MuY21kICA9IFNQSV9ETUFfV1JJVEVfQ1RSTF9FTkFCTEU7CisJZG1hX3JlZ3MubGVuICA9IGNwdV90b19sZTE2KGxlbik7CisJZG1hX3JlZ3MuYWRkciA9IGNwdV90b19sZTMyKGFkZHJlc3MpOworCisJc3RsYzQ1eHhfc3BpX3dyaXRlKHN0bGMsIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMLCAmZG1hX3JlZ3MsCisJCQkgICBzaXplb2YoZG1hX3JlZ3MpKTsKKworCXN0bGM0NXh4X3NwaV93cml0ZShzdGxjLCBTUElfQURSU19ETUFfREFUQSwgYnVmLCBsZW4pOworCisJdGltZW91dCA9IGppZmZpZXMgKyAyICogSFo7CisJaW50cyA9IHN0bGM0NXh4X3JlYWQzMihzdGxjLCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCXdoaWxlICghKGludHMgJiBTUElfSE9TVF9JTlRfV1JfUkVBRFkpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlzdGxjNDV4eF93YXJuaW5nKCJXUl9SRUFEWSB0aW1lb3V0Iik7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwl9CisKKwlzdGxjNDV4eF9pbnRfYWNrKHN0bGMsIFNQSV9IT1NUX0lOVF9XUl9SRUFEWSk7CisKKwlzdGxjNDV4eF9zbGVlcChzdGxjKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfd3FfdHgoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZzdGxjLT50eF9wZW5kaW5nKSkgeworCQllbnRyeSA9IGxpc3RfZW50cnkoc3RsYy0+dHhfcGVuZGluZy5uZXh0LAorCQkJCSAgIHN0cnVjdCB0eGJ1ZmZlciwgdHhfbGlzdCk7CisKKwkJbGlzdF9kZWxfaW5pdCgmZW50cnktPnR4X2xpc3QpOworCisJCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKworCQlyZXQgPSBzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBlbnRyeS0+ZnJhbWVfc3RhcnQsCisJCQkJCWVudHJ5LT5za2ItPmRhdGEsIGVudHJ5LT5za2ItPmxlbik7CisKKwkJc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJLyogZnJhbWUgdHJhbnNmZXIgdG8gZmlybXdhcmUgYnVmZmVyIGZhaWxlZCAqLworCQkJLyogRklYTUU6IHJlcG9ydCB0aGlzIHRvIG1hYzgwMjExICovCisJCQlkZXZfa2ZyZWVfc2tiKGVudHJ5LT5za2IpOworCQkJc3RsYzQ1eHhfdHhidWZmZXJfZnJlZShzdGxjLCBlbnRyeSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWxpc3RfYWRkKCZlbnRyeS0+dHhfbGlzdCwgJnN0bGMtPnR4X3NlbnQpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsoc3RsYy0+aHctPndvcmtxdWV1ZSwKKwkJCQkgICAmc3RsYy0+d29ya190eF90aW1lb3V0LAorCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoVFhfVElNRU9VVCkpOworCX0KKworb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHN0bGM0NXh4LCB3b3JrKTsKKwl1MzIgaW50czsKKwlpbnQgcmV0OworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOworCisJaWYgKHN0bGMtPmZ3X3N0YXRlID09IEZXX1NUQVRFX09GRiAmJgorCSAgICBzdGxjLT5md19zdGF0ZSA9PSBGV19TVEFURV9SRVNFVCkKKwkJZ290byBvdXQ7CisKKwlpbnRzID0gc3RsYzQ1eHhfcmVhZDMyKHN0bGMsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisJc3RsYzQ1eHhfZGVidWcoREVCVUdfQkgsICJiZWdpbiBob3N0X2ludHMgMHglMDh4IiwgaW50cyk7CisKKwlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9SRUFEWSkgeworCQlzdGxjNDV4eF9pbnRfcmVhZHkoc3RsYyk7CisJCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1JFQURZKTsKKwl9CisKKwlpZiAoc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpCisJCWdvdG8gb3V0OworCisJaWYgKGludHMgJiBTUElfSE9TVF9JTlRfVVBEQVRFKSB7CisJCXN0bGM0NXh4X2ludF9hY2soc3RsYywgU1BJX0hPU1RfSU5UX1VQREFURSk7CisJCXJldCA9IHN0bGM0NXh4X3J4KHN0bGMpOworCQlpZiAocmV0IDwgMCkgeworCQkJc3RsYzQ1eHhfcmVzZXQoc3RsYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9TV19VUERBVEUpIHsKKwkJc3RsYzQ1eHhfaW50X2FjayhzdGxjLCBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKTsKKwkJcmV0ID0gc3RsYzQ1eHhfcngoc3RsYyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlzdGxjNDV4eF9yZXNldChzdGxjKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJcmV0ID0gc3RsYzQ1eHhfd3FfdHgoc3RsYyk7CisJaWYgKHJldCA8IDApIHsKKwkJc3RsYzQ1eHhfcmVzZXQoc3RsYyk7CisJCWdvdG8gb3V0OworCX0KKworCWludHMgPSBzdGxjNDV4eF9yZWFkMzIoc3RsYywgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19CSCwgImVuZCBob3N0X2ludHMgMHglMDh4IiwgaW50cyk7CisKK291dDoKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfZWRjZihzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMpCit7CisJc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKKwlzdHJ1Y3Qgc19sbW9fZWRjZiAqZWRjZjsKKwlzaXplX3QgbGVuLCBlZGNmX2xlbjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCWVkY2ZfbGVuID0gc2l6ZW9mKCplZGNmKTsKKwlsZW4gPSBzaXplb2YoKmNvbnRyb2wpICsgZWRjZl9sZW47CisJY29udHJvbCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwllZGNmID0gKHN0cnVjdCBzX2xtb19lZGNmICopIChjb250cm9sICsgMSk7CisKKwljb250cm9sLT5mbGFncyA9IExNX0ZMQUdfQ09OVFJPTCB8IExNX0NUUkxfT1BTRVQ7CisJY29udHJvbC0+bGVuZ3RoID0gZWRjZl9sZW47CisJY29udHJvbC0+b2lkID0gTE1fT0lEX0VEQ0Y7CisKKwllZGNmLT5zbG90dGltZSA9IDB4MTQ7CisJZWRjZi0+c2lmcyA9IDEwOworCWVkY2YtPmVvZnBhZCA9IDY7CisJZWRjZi0+bWF4YnVyc3QgPSAxNTAwOworCisJZWRjZi0+cXVldWVzWzBdLmFpZnMgPSAyOworCWVkY2YtPnF1ZXVlc1swXS5wYWQwID0gMTsKKwllZGNmLT5xdWV1ZXNbMF0uY3dtaW4gPSAzOworCWVkY2YtPnF1ZXVlc1swXS5jd21heCA9IDc7CisJZWRjZi0+cXVldWVzWzBdLnR4b3AgPSA0NzsKKwllZGNmLT5xdWV1ZXNbMV0uYWlmcyA9IDI7CisJZWRjZi0+cXVldWVzWzFdLnBhZDAgPSAwOworCWVkY2YtPnF1ZXVlc1sxXS5jd21pbiA9IDc7CisJZWRjZi0+cXVldWVzWzFdLmN3bWF4ID0gMTU7CisJZWRjZi0+cXVldWVzWzFdLnR4b3AgPSA5NDsKKwllZGNmLT5xdWV1ZXNbMl0uYWlmcyA9IDM7CisJZWRjZi0+cXVldWVzWzJdLnBhZDAgPSAwOworCWVkY2YtPnF1ZXVlc1syXS5jd21pbiA9IDE1OworCWVkY2YtPnF1ZXVlc1syXS5jd21heCA9IDEwMjM7CisJZWRjZi0+cXVldWVzWzJdLnR4b3AgPSAwOworCWVkY2YtPnF1ZXVlc1szXS5haWZzID0gNzsKKwllZGNmLT5xdWV1ZXNbM10ucGFkMCA9IDA7CisJZWRjZi0+cXVldWVzWzNdLmN3bWluID0gMTU7CisJZWRjZi0+cXVldWVzWzNdLmN3bWF4ID0gMTAyMzsKKwllZGNmLT5xdWV1ZXNbM10udHhvcCA9IDA7CisJZWRjZi0+cXVldWVzWzRdLmFpZnMgPSAxMzsKKwllZGNmLT5xdWV1ZXNbNF0ucGFkMCA9IDk5OworCWVkY2YtPnF1ZXVlc1s0XS5jd21pbiA9IDM0Mzc7CisJZWRjZi0+cXVldWVzWzRdLmN3bWF4ID0gNTEyOworCWVkY2YtPnF1ZXVlc1s0XS50eG9wID0gMTI7CisJZWRjZi0+cXVldWVzWzVdLmFpZnMgPSAxNDI7CisJZWRjZi0+cXVldWVzWzVdLnBhZDAgPSAxMDk7CisJZWRjZi0+cXVldWVzWzVdLmN3bWluID0gODc1NjsKKwllZGNmLT5xdWV1ZXNbNV0uY3dtYXggPSA2OworCWVkY2YtPnF1ZXVlc1s1XS50eG9wID0gMDsKKwllZGNmLT5xdWV1ZXNbNl0uYWlmcyA9IDQ7CisJZWRjZi0+cXVldWVzWzZdLnBhZDAgPSAwOworCWVkY2YtPnF1ZXVlc1s2XS5jd21pbiA9IDA7CisJZWRjZi0+cXVldWVzWzZdLmN3bWF4ID0gNTg3MDU7CisJZWRjZi0+cXVldWVzWzZdLnR4b3AgPSAyNTcxNjsKKwllZGNmLT5xdWV1ZXNbN10uYWlmcyA9IDA7CisJZWRjZi0+cXVldWVzWzddLnBhZDAgPSAwOworCWVkY2YtPnF1ZXVlc1s3XS5jd21pbiA9IDA7CisJZWRjZi0+cXVldWVzWzddLmN3bWF4ID0gMDsKKwllZGNmLT5xdWV1ZXNbN10udHhvcCA9IDA7CisKKwlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIGNvbnRyb2wsIGxlbik7CisKKwlrZnJlZShjb250cm9sKTsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfc2V0dXAoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCXN0cnVjdCBzX2xtX2NvbnRyb2wgKmNvbnRyb2w7CisJc3RydWN0IHNfbG1vX3NldHVwICpzZXR1cDsKKwlzaXplX3QgbGVuLCBzZXR1cF9sZW47CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlzZXR1cF9sZW4gPSBzaXplb2YoKnNldHVwKTsKKwlsZW4gPSBzaXplb2YoKmNvbnRyb2wpICsgc2V0dXBfbGVuOworCWNvbnRyb2wgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJc2V0dXAgPSAoc3RydWN0IHNfbG1vX3NldHVwICopIChjb250cm9sICsgMSk7CisKKwljb250cm9sLT5mbGFncyA9IExNX0ZMQUdfQ09OVFJPTCB8IExNX0NUUkxfT1BTRVQ7CisJY29udHJvbC0+bGVuZ3RoID0gc2V0dXBfbGVuOworCWNvbnRyb2wtPm9pZCA9IExNX09JRF9TRVRVUDsKKworCXNldHVwLT5mbGFncyA9IExNX1NFVFVQX0lORlJBOworCXNldHVwLT5hbnRlbm5hID0gMjsKKwlzZXR1cC0+cnhfYWxpZ24gPSAwOworCXNldHVwLT5yeF9idWZmZXIgPSBGSVJNV0FSRV9SWEJVRkZFUl9TVEFSVDsKKwlzZXR1cC0+cnhfbXR1ID0gRklSTVdBUkVfTVRVOworCXNldHVwLT5mcm9udGVuZCA9IDU7CisJc2V0dXAtPnRpbWVvdXQgPSAwOworCXNldHVwLT50cnVuY2F0ZSA9IDQ4ODk2OworCXNldHVwLT5icmF0ZW1hc2sgPSAweGZmZmZmZmZmOworCXNldHVwLT5yZWZfY2xvY2sgPSA2NDQyNDUwOTQ7CisJc2V0dXAtPmxwZl9iYW5kd2lkdGggPSA2NTUzNTsKKwlzZXR1cC0+b3NjX3N0YXJ0X2RlbGF5ID0gNjU1MzU7CisKKwltZW1jcHkoc2V0dXAtPm1hY2FkZHIsIHN0bGMtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHNldHVwLT5ic3NpZCwgc3RsYy0+YnNzaWQsIEVUSF9BTEVOKTsKKworCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIEZJUk1XQVJFX0NPTkZJR19TVEFSVCwgY29udHJvbCwgbGVuKTsKKworCWtmcmVlKGNvbnRyb2wpOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF90eF9zY2FuKHN0cnVjdCBzdGxjNDV4eCAqc3RsYykKK3sKKwlzdHJ1Y3Qgc19sbV9jb250cm9sICpjb250cm9sOworCXN0cnVjdCBzX2xtb19zY2FuICpzY2FuOworCXNpemVfdCBsZW4sIHNjYW5fbGVuOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJc2Nhbl9sZW4gPSBzaXplb2YoKnNjYW4pOworCWxlbiA9IHNpemVvZigqY29udHJvbCkgKyBzY2FuX2xlbjsKKwljb250cm9sID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCXNjYW4gPSAoc3RydWN0IHNfbG1vX3NjYW4gKikgKGNvbnRyb2wgKyAxKTsKKworCWNvbnRyb2wtPmZsYWdzID0gTE1fRkxBR19DT05UUk9MIHwgTE1fQ1RSTF9PUFNFVDsKKwljb250cm9sLT5sZW5ndGggPSBzY2FuX2xlbjsKKwljb250cm9sLT5vaWQgPSBMTV9PSURfU0NBTjsKKworCXNjYW4tPmZsYWdzID0gTE1fU0NBTl9FWElUOworCXNjYW4tPmJyYXRlbWFzayA9IDB4MTVmOworCXNjYW4tPmFsb2Z0WzBdID0gMzsKKwlzY2FuLT5hbG9mdFsxXSA9IDM7CisJc2Nhbi0+YWxvZnRbMl0gPSAxOworCXNjYW4tPmFsb2Z0WzNdID0gMDsKKwlzY2FuLT5hbG9mdFs0XSA9IDA7CisJc2Nhbi0+YWxvZnRbNV0gPSAwOworCXNjYW4tPmFsb2Z0WzZdID0gMDsKKwlzY2FuLT5hbG9mdFs3XSA9IDA7CisKKwltZW1jcHkoJnNjYW4tPnJzc2ljYWwsICZzdGxjLT5jYWxfcnNzaVsoc3RsYy0+Y2hhbm5lbCAtIDEpICoKKwkJCQkJICAgICAgIFJTU0lfQ0FMX0xFTl0sCisJICAgICAgIFJTU0lfQ0FMX0xFTik7CisJbWVtY3B5KCZzY2FuLT5jaGFubmVsLCAmc3RsYy0+Y2FsX2NoYW5uZWxzWyhzdGxjLT5jaGFubmVsIC0gMSkgKgorCQkJCQkJICAgQ0hBTk5FTF9DQUxfTEVOXSwKKwkgICAgICAgQ0hBTk5FTF9DQUxfTEVOKTsKKworCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIEZJUk1XQVJFX0NPTkZJR19TVEFSVCwgY29udHJvbCwgbGVuKTsKKworCWtmcmVlKGNvbnRyb2wpOworfQorCisvKgorICogY2FsbGVyIG11c3QgaG9sZCBtdXRleAorICovCitzdGF0aWMgaW50IHN0bGM0NXh4X3R4X3BzcG9sbChzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMsIGJvb2wgcG93ZXJzYXZlKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwc3BvbGw7CisJaW50IHBheWxvYWRfbGVuLCBwYWRkaW5nLCBpOworCXN0cnVjdCBzX2xtX2RhdGFfb3V0ICpkYXRhOworCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwljaGFyICpwYXlsb2FkOworCXUxNiBmYzsKKworCXNrYiA9IGRldl9hbGxvY19za2Ioc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tICsgMTYpOworCWlmICghc2tiKSB7CisJCXN0bGM0NXh4X3dhcm5pbmcoImZhaWxlZCB0byBhbGxvY2F0ZSBwc3BvbGwgZnJhbWUiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNrYl9yZXNlcnZlKHNrYiwgc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tKTsKKworCXBzcG9sbCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMTYpOworCW1lbXNldChwc3BvbGwsIDAsIDE2KTsKKwlmYyA9IElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMOworCWlmIChwb3dlcnNhdmUpCisJCWZjIHw9IElFRUU4MDIxMV9GQ1RMX1BNOworCXBzcG9sbC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKKwlwc3BvbGwtPmR1cmF0aW9uX2lkID0gY3B1X3RvX2xlMTYoc3RsYy0+YWlkKTsKKworCS8qIGFpZCBpbiBQUy1Qb2xsIGhhcyBpdHMgdHdvIE1TQnMgZWFjaCBzZXQgdG8gMSAqLworCXBzcG9sbC0+ZHVyYXRpb25faWQgfD0gY3B1X3RvX2xlMTYoMSA8PCAxNSkgfCBjcHVfdG9fbGUxNigxIDw8IDE0KTsKKworCW1lbWNweShwc3BvbGwtPmFkZHIxLCBzdGxjLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShwc3BvbGwtPmFkZHIyLCBzdGxjLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAic2VuZGluZyBQUy1Qb2xsIGZyYW1lIHRvICVzIChwb3dlcnNhdmUgJWQsICIKKwkJICAgICAgICJmYyAweCV4LCBhaWQgJWQpIiwgcHJpbnRfbWFjKG1hYywgcHNwb2xsLT5hZGRyMSksCisJCSAgICAgICBwb3dlcnNhdmUsIGZjLCBzdGxjLT5haWQpOworCisJc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKworCWVudHJ5ID0gc3RsYzQ1eHhfdHhidWZmZXJfYWxsb2Moc3RsYywgc2tiLT5sZW4pOworCisJc3Bpbl91bmxvY2tfYmgoJnN0bGMtPnR4X2xvY2spOworCisJaWYgKCFlbnRyeSkgeworCQkvKgorCQkgKiBUaGUgcXVldWUgc2hvdWxkIGJlIHN0b3BwZWQgYmVmb3JlIHRoZSBmaXJtd2FyZSBidWZmZXIKKwkJICogaXMgZnVsbCwgc28gZmlybXdhcmUgYnVmZmVyIHNob3VsZCBhbHdheXMgaGF2ZSBlbm91Z2gKKwkJICogc3BhY2UuCisJCSAqCisJCSAqIEJ1dCBJJ20gdG9vIGxhenkgYW5kIG9taXQgaXQgZm9yIG5vdy4KKwkJICovCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlzdGxjNDV4eF93YXJuaW5nKCJmaXJtd2FyZSB0eCBidWZmZXIgZnVsbCBpcyBmdWxsICIKKwkJCQkJICJmb3IgbnVsbCBmcmFtZSIpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwlwYXlsb2FkID0gc2tiLT5kYXRhOworCXBheWxvYWRfbGVuID0gc2tiLT5sZW47CisJcGFkZGluZyA9IChpbnQpIChza2ItPmRhdGEgLSBzaXplb2YoKmRhdGEpKSAmIDM7CisJZW50cnktPmhlYWRlcl9sZW4gPSBzaXplb2YoKmRhdGEpICsgcGFkZGluZzsKKworCWVudHJ5LT5za2IgPSBza2I7CisJZW50cnktPnN0YXR1c19uZWVkZWQgPSBmYWxzZTsKKwllbnRyeS0+aGFuZGxlID0gKHUzMikgc2tiOworCWVudHJ5LT5saWZldGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFRYX0ZSQU1FX0xJRkVUSU1FKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAidHggZGF0YSAweCV4ICgweCVwIHBheWxvYWQgJWQgQiAiCisJCSAgICAgICAicGFkZGluZyAlZCBoZWFkZXJfbGVuICVkKSIsCisJCSAgICAgICBlbnRyeS0+aGFuZGxlLCBwYXlsb2FkLCBwYXlsb2FkX2xlbiwgcGFkZGluZywKKwkJICAgICAgIGVudHJ5LT5oZWFkZXJfbGVuKTsKKwlzdGxjNDV4eF9kdW1wKERFQlVHX1RYX0NPTlRFTlQsIHBheWxvYWQsIHBheWxvYWRfbGVuKTsKKworCWRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9vdXQgKikgc2tiX3B1c2goc2tiLCBlbnRyeS0+aGVhZGVyX2xlbik7CisKKwltZW1zZXQoZGF0YSwgMCwgZW50cnktPmhlYWRlcl9sZW4pOworCisJaWYgKHBhZGRpbmcpCisJCWRhdGEtPmZsYWdzID0gTE1fRkxBR19BTElHTjsKKworCWRhdGEtPmZsYWdzID0gTE1fT1VUX0JVUlNUOworCWRhdGEtPmxlbmd0aCA9IHBheWxvYWRfbGVuOworCWRhdGEtPmhhbmRsZSA9IGVudHJ5LT5oYW5kbGU7CisJZGF0YS0+YWlkID0gMTsKKwlkYXRhLT5ydHNfcmV0cmllcyA9IDc7CisJZGF0YS0+cmV0cmllcyA9IDc7CisJZGF0YS0+YWxvZnRfY3RybCA9IDA7CisJZGF0YS0+Y3J5cHRfb2Zmc2V0ID0gNTg7CisJZGF0YS0+a2V5dHlwZSA9IDA7CisJZGF0YS0+a2V5bGVuID0gMDsKKwlkYXRhLT5xdWV1ZSA9IExNX1FVRVVFX0RBVEEzOworCWRhdGEtPmJhY2tsb2cgPSAzMjsKKwlkYXRhLT5hbnRlbm5hID0gMjsKKwlkYXRhLT5jdHMgPSAzOworCWRhdGEtPnBvd2VyID0gMTI3OworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZGF0YS0+YWxvZnRbaV0gPSAwOworCisJLyoKKwkgKiBjaGVjayBpZiB0aGVyZSdzIGVub3VnaCBzcGFjZSBpbiB0eCBidWZmZXIKKwkgKgorCSAqIEZJWE1FOiBpZ25vcmVkIGZvciBub3cKKwkgKi8KKworCXN0bGM0NXh4X3R4X2ZyYW1lKHN0bGMsIGVudHJ5LT5zdGFydCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwlsaXN0X2FkZCgmZW50cnktPnR4X2xpc3QsICZzdGxjLT50eF9zZW50KTsKKworCXJldHVybiAwOworfQorCisvKgorICogY2FsbGVyIG11c3QgaG9sZCBtdXRleAorICoKKyAqIHNoYW1lbGVzc2x5IHN0b2xlbiBmcm9tIG1hYzgwMjExL2llZWU4MDIxMV9zZW5kX251bGxmdW5jCisgKi8KK3N0YXRpYyBpbnQgc3RsYzQ1eHhfdHhfbnVsbGZ1bmMoc3RydWN0IHN0bGM0NXh4ICpzdGxjLCBib29sIHBvd2Vyc2F2ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqbnVsbGZ1bmM7CisJaW50IHBheWxvYWRfbGVuLCBwYWRkaW5nLCBpOworCXN0cnVjdCBzX2xtX2RhdGFfb3V0ICpkYXRhOworCXN0cnVjdCB0eGJ1ZmZlciAqZW50cnk7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwljaGFyICpwYXlsb2FkOworCXUxNiBmYzsKKworCXNrYiA9IGRldl9hbGxvY19za2Ioc3RsYy0+aHctPmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOworCWlmICghc2tiKSB7CisJCXN0bGM0NXh4X3dhcm5pbmcoImZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIG51bGwgZnJhbWVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBzdGxjLT5ody0+ZXh0cmFfdHhfaGVhZHJvb20pOworCisJbnVsbGZ1bmMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQobnVsbGZ1bmMsIDAsIDI0KTsKKwlmYyA9IElFRUU4MDIxMV9GVFlQRV9EQVRBIHwgSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwKKwkgICAgIElFRUU4MDIxMV9GQ1RMX1RPRFM7CisKKwlpZiAocG93ZXJzYXZlKQorCQlmYyB8PSBJRUVFODAyMTFfRkNUTF9QTTsKKworCW51bGxmdW5jLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOworCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIHN0bGMtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMiwgc3RsYy0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobnVsbGZ1bmMtPmFkZHIzLCBzdGxjLT5ic3NpZCwgRVRIX0FMRU4pOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAic2VuZGluZyBOdWxsIGZyYW1lIHRvICVzIChwb3dlcnNhdmUgJWQsICIKKwkJICAgICAgICJmYyAweCV4KSIsCisJCSAgICAgICBwcmludF9tYWMobWFjLCBudWxsZnVuYy0+YWRkcjEpLCBwb3dlcnNhdmUsIGZjKTsKKworCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwllbnRyeSA9IHN0bGM0NXh4X3R4YnVmZmVyX2FsbG9jKHN0bGMsIHNrYi0+bGVuKTsKKworCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKworCWlmICghZW50cnkpIHsKKwkJLyoKKwkJICogVGhlIHF1ZXVlIHNob3VsZCBiZSBzdG9wcGVkIGJlZm9yZSB0aGUgZmlybXdhcmUgYnVmZmVyCisJCSAqIGlzIGZ1bGwsIHNvIGZpcm13YXJlIGJ1ZmZlciBzaG91bGQgYWx3YXlzIGhhdmUgZW5vdWdoCisJCSAqIHNwYWNlLgorCQkgKgorCQkgKiBCdXQgSSdtIHRvbyBsYXp5IGFuZCBvbWl0IGl0IGZvciBub3cuCisJCSAqLworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJc3RsYzQ1eHhfd2FybmluZygiZmlybXdhcmUgdHggYnVmZmVyIGZ1bGwgaXMgZnVsbCAiCisJCQkJCSAiZm9yIG51bGwgZnJhbWUiKTsKKwkJcmV0dXJuIC1FTk9TUEM7CisJfQorCisJcGF5bG9hZCA9IHNrYi0+ZGF0YTsKKwlwYXlsb2FkX2xlbiA9IHNrYi0+bGVuOworCXBhZGRpbmcgPSAoaW50KSAoc2tiLT5kYXRhIC0gc2l6ZW9mKCpkYXRhKSkgJiAzOworCWVudHJ5LT5oZWFkZXJfbGVuID0gc2l6ZW9mKCpkYXRhKSArIHBhZGRpbmc7CisKKwllbnRyeS0+c2tiID0gc2tiOworCWVudHJ5LT5zdGF0dXNfbmVlZGVkID0gZmFsc2U7CisJZW50cnktPmhhbmRsZSA9ICh1MzIpIHNrYjsKKwllbnRyeS0+bGlmZXRpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUWF9GUkFNRV9MSUZFVElNRSk7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19UWCwgInR4IGRhdGEgMHgleCAoMHglcCBwYXlsb2FkICVkIEIgIgorCQkgICAgICAgInBhZGRpbmcgJWQgaGVhZGVyX2xlbiAlZCkiLAorCQkgICAgICAgZW50cnktPmhhbmRsZSwgcGF5bG9hZCwgcGF5bG9hZF9sZW4sIHBhZGRpbmcsCisJCSAgICAgICBlbnRyeS0+aGVhZGVyX2xlbik7CisJc3RsYzQ1eHhfZHVtcChERUJVR19UWF9DT05URU5ULCBwYXlsb2FkLCBwYXlsb2FkX2xlbik7CisKKwlkYXRhID0gKHN0cnVjdCBzX2xtX2RhdGFfb3V0ICopIHNrYl9wdXNoKHNrYiwgZW50cnktPmhlYWRlcl9sZW4pOworCisJbWVtc2V0KGRhdGEsIDAsIGVudHJ5LT5oZWFkZXJfbGVuKTsKKworCWlmIChwYWRkaW5nKQorCQlkYXRhLT5mbGFncyA9IExNX0ZMQUdfQUxJR047CisKKwlkYXRhLT5mbGFncyA9IExNX09VVF9CVVJTVDsKKwlkYXRhLT5sZW5ndGggPSBwYXlsb2FkX2xlbjsKKwlkYXRhLT5oYW5kbGUgPSBlbnRyeS0+aGFuZGxlOworCWRhdGEtPmFpZCA9IDE7CisJZGF0YS0+cnRzX3JldHJpZXMgPSA3OworCWRhdGEtPnJldHJpZXMgPSA3OworCWRhdGEtPmFsb2Z0X2N0cmwgPSAwOworCWRhdGEtPmNyeXB0X29mZnNldCA9IDU4OworCWRhdGEtPmtleXR5cGUgPSAwOworCWRhdGEtPmtleWxlbiA9IDA7CisJZGF0YS0+cXVldWUgPSBMTV9RVUVVRV9EQVRBMzsKKwlkYXRhLT5iYWNrbG9nID0gMzI7CisJZGF0YS0+YW50ZW5uYSA9IDI7CisJZGF0YS0+Y3RzID0gMzsKKwlkYXRhLT5wb3dlciA9IDEyNzsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWRhdGEtPmFsb2Z0W2ldID0gMDsKKworCS8qCisJICogY2hlY2sgaWYgdGhlcmUncyBlbm91Z2ggc3BhY2UgaW4gdHggYnVmZmVyCisJICoKKwkgKiBGSVhNRTogaWdub3JlZCBmb3Igbm93CisJICovCisKKwlzdGxjNDV4eF90eF9mcmFtZShzdGxjLCBlbnRyeS0+c3RhcnQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJbGlzdF9hZGQoJmVudHJ5LT50eF9saXN0LCAmc3RsYy0+dHhfc2VudCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbGVyIG11c3QgaG9sZCBtdXRleCAqLworc3RhdGljIHZvaWQgc3RsYzQ1eHhfdHhfcHNtKHN0cnVjdCBzdGxjNDV4eCAqc3RsYywgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IHNfbG1fY29udHJvbCAqY29udHJvbDsKKwlzdHJ1Y3Qgc19sbW9fcHNtICpwc207CisJc2l6ZV90IGxlbiwgcHNtX2xlbjsKKworCVdBUk5fT04oIXN0bGMtPmFzc29jaWF0ZWQpOworCVdBUk5fT04oc3RsYy0+YWlkIDwgMSk7CisJV0FSTl9PTihzdGxjLT5haWQgPiAyMDA3KTsKKworCXBzbV9sZW4gPSBzaXplb2YoKnBzbSk7CisJbGVuID0gc2l6ZW9mKCpjb250cm9sKSArIHBzbV9sZW47CisJY29udHJvbCA9IGt6YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlwc20gPSAoc3RydWN0IHNfbG1vX3BzbSAqKSAoY29udHJvbCArIDEpOworCisJY29udHJvbC0+ZmxhZ3MgPSBMTV9GTEFHX0NPTlRST0wgfCBMTV9DVFJMX09QU0VUOworCWNvbnRyb2wtPmxlbmd0aCA9IHBzbV9sZW47CisJY29udHJvbC0+b2lkID0gTE1fT0lEX1BTTTsKKworCWlmIChlbmFibGUpCisJCXBzbS0+ZmxhZ3MgfD0gTE1fUFNNOworCisJcHNtLT5haWQgPSBzdGxjLT5haWQ7CisKKwlwc20tPmJlYWNvbl9yY3BpX3NraXBfbWF4ID0gNjA7CisKKwlwc20tPmludGVydmFsc1swXS5pbnRlcnZhbCA9IDE7CisJcHNtLT5pbnRlcnZhbHNbMF0ucGVyaW9kcyA9IDE7CisJcHNtLT5pbnRlcnZhbHNbMV0uaW50ZXJ2YWwgPSAxOworCXBzbS0+aW50ZXJ2YWxzWzFdLnBlcmlvZHMgPSAxOworCXBzbS0+aW50ZXJ2YWxzWzJdLmludGVydmFsID0gMTsKKwlwc20tPmludGVydmFsc1syXS5wZXJpb2RzID0gMTsKKwlwc20tPmludGVydmFsc1szXS5pbnRlcnZhbCA9IDE7CisJcHNtLT5pbnRlcnZhbHNbM10ucGVyaW9kcyA9IDE7CisKKwlwc20tPm5yID0gMDsKKwlwc20tPmV4Y2x1ZGVbMF0gPSAwOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfUFNNLCAic2VuZGluZyBMTV9PSURfUFNNIChhaWQgJWQsIGludGVydmFsICVkKSIsCisJCSAgICAgICBwc20tPmFpZCwgcHNtLT5pbnRlcnZhbHNbMF0uaW50ZXJ2YWwpOworCisJc3RsYzQ1eHhfdHhfZnJhbWUoc3RsYywgRklSTVdBUkVfQ09ORklHX1NUQVJULCBjb250cm9sLCBsZW4pOworCisJa2ZyZWUoY29udHJvbCk7Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjID0gaHctPnByaXY7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKKwlpbnQgcGF5bG9hZF9sZW4sIHBhZGRpbmcsIGk7CisJc3RydWN0IHNfbG1fZGF0YV9vdXQgKmRhdGE7CisJc3RydWN0IHR4YnVmZmVyICplbnRyeTsKKwljaGFyICpwYXlsb2FkOworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJc3Bpbl9sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKworCWVudHJ5ID0gc3RsYzQ1eHhfdHhidWZmZXJfYWxsb2Moc3RsYywgc2tiLT5sZW4pOworCWlmICghZW50cnkpIHsKKwkJLyogdGhlIHF1ZXVlIHNob3VsZCBiZSBzdG9wcGVkIGJlZm9yZSB0aGUgZmlybXdhcmUgYnVmZmVyCisJCSAqIGlzIGZ1bGwsIHNvIGZpcm13YXJlIGJ1ZmZlciBzaG91bGQgYWx3YXlzIGhhdmUgZW5vdWdoCisJCSAqIHNwYWNlICovCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlzdGxjNDV4eF93YXJuaW5nKCJmaXJtd2FyZSBidWZmZXIgZnVsbCIpOworCQlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJcGF5bG9hZCA9IHNrYi0+ZGF0YTsKKwlwYXlsb2FkX2xlbiA9IHNrYi0+bGVuOworCXBhZGRpbmcgPSAoaW50KSAoc2tiLT5kYXRhIC0gc2l6ZW9mKCpkYXRhKSkgJiAzOworCWVudHJ5LT5oZWFkZXJfbGVuID0gc2l6ZW9mKCpkYXRhKSArIHBhZGRpbmc7CisKKwllbnRyeS0+c2tiID0gc2tiOworCWVudHJ5LT5zdGF0dXNfbmVlZGVkID0gdHJ1ZTsKKwllbnRyeS0+aGFuZGxlID0gKHUzMikgc2tiOworCWVudHJ5LT5saWZldGltZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFRYX0ZSQU1FX0xJRkVUSU1FKTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX1RYLCAidHggZGF0YSAweCV4ICgweCVwIHBheWxvYWQgJWQgQiAiCisJCSAgICAgICAicGFkZGluZyAlZCBoZWFkZXJfbGVuICVkKSIsCisJCSAgICAgICBlbnRyeS0+aGFuZGxlLCBwYXlsb2FkLCBwYXlsb2FkX2xlbiwgcGFkZGluZywKKwkJICAgICAgIGVudHJ5LT5oZWFkZXJfbGVuKTsKKwlzdGxjNDV4eF9kdW1wKERFQlVHX1RYX0NPTlRFTlQsIHBheWxvYWQsIHBheWxvYWRfbGVuKTsKKworCWRhdGEgPSAoc3RydWN0IHNfbG1fZGF0YV9vdXQgKikgc2tiX3B1c2goc2tiLCBlbnRyeS0+aGVhZGVyX2xlbik7CisKKwltZW1zZXQoZGF0YSwgMCwgZW50cnktPmhlYWRlcl9sZW4pOworCisJaWYgKHBhZGRpbmcpCisJCWRhdGEtPmZsYWdzID0gTE1fRkxBR19BTElHTjsKKworCWRhdGEtPmZsYWdzID0gTE1fT1VUX0JVUlNUOworCWRhdGEtPmxlbmd0aCA9IHBheWxvYWRfbGVuOworCWRhdGEtPmhhbmRsZSA9IGVudHJ5LT5oYW5kbGU7CisJZGF0YS0+YWlkID0gMTsKKwlkYXRhLT5ydHNfcmV0cmllcyA9IDc7CisJZGF0YS0+cmV0cmllcyA9IDc7CisJZGF0YS0+YWxvZnRfY3RybCA9IDA7CisJZGF0YS0+Y3J5cHRfb2Zmc2V0ID0gNTg7CisJZGF0YS0+a2V5dHlwZSA9IDA7CisJZGF0YS0+a2V5bGVuID0gMDsKKwlkYXRhLT5xdWV1ZSA9IDI7CisJZGF0YS0+YmFja2xvZyA9IDMyOworCWRhdGEtPmFudGVubmEgPSAyOworCWRhdGEtPmN0cyA9IDM7CisJZGF0YS0+cG93ZXIgPSAxMjc7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXJhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoc3RsYy0+aHcsIGluZm8pOworCQlkYXRhLT5hbG9mdFtpXSA9IHJhdGUtPmh3X3ZhbHVlOworCX0KKworCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT50eF9saXN0LCAmc3RsYy0+dHhfcGVuZGluZyk7CisKKwkvKiBjaGVjayBpZiB0aGVyZSdzIGVub3VnaCBzcGFjZSBpbiB0eCBidWZmZXIgKi8KKwlpZiAoc3RsYzQ1eHhfdHhidWZmZXJfZmluZChzdGxjLCBNQVhfRlJBTUVfTEVOKSA9PSAtMSkgeworCQlzdGxjNDV4eF9kZWJ1ZyhERUJVR19RVUVVRSwgInR4IGJ1ZmZlciBmdWxsLCBzdG9wcGluZyBxdWV1ZXMiKTsKKwkJc3RsYy0+dHhfcXVldWVfc3RvcHBlZCA9IDE7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzdGxjLT5odyk7CisJfQorCisJcXVldWVfd29yayhzdGxjLT5ody0+d29ya3F1ZXVlLCAmc3RsYy0+d29yayk7CisKKwlzcGluX3VubG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgaW50IHN0bGM0NXh4X29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgcmV0ID0gMDsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfQk9PVElORzsKKwlzdGxjLT5jaGFubmVsID0gMTsKKworCXN0bGM0NXh4X3Bvd2VyX29uKHN0bGMpOworCisJcmV0ID0gc3RsYzQ1eHhfdXBsb2FkX2Zpcm13YXJlKHN0bGMpOworCWlmIChyZXQgPCAwKSB7CisJCXN0bGM0NXh4X3Bvd2VyX29mZihzdGxjKTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXN0bGMtPnR4X3F1ZXVlX3N0b3BwZWQgPSAwOworCisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7CisKKwl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygyMDAwKTsKKwl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJnN0bGMtPmZ3X2NvbXAsCisJCQkJCQkJICAgIHRpbWVvdXQpOworCWlmICghdGltZW91dCkgeworCQlzdGxjNDV4eF9lcnJvcigiZmlybXdhcmUgYm9vdCBmYWlsZWQiKTsKKwkJc3RsYzQ1eHhfcG93ZXJfb2ZmKHN0bGMpOworCQlyZXQgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfQk9PVCwgImZpcm13YXJlIGJvb3RlZCIpOworCisJLyogRklYTUU6IHNob3VsZCB3ZSB0YWtlIG11dGV4IGp1c3QgYWZ0ZXIgd2FpdF9mb3JfY29tcGxldGlvbigpPyAqLworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCVdBUk5fT04oc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpOworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmc3RsYy0+bXV0ZXgpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc3RsYzQ1eHhfb3Bfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBody0+cHJpdjsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnN0bGMtPm11dGV4KTsKKworCVdBUk5fT04oc3RsYy0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpOworCisJc3RsYzQ1eHhfcG93ZXJfb2ZmKHN0bGMpOworCisJLyogRklYTUU6IG1ha2Ugc3VyZSB0aGF0IGFsbCB3b3JrX3N0cnVjdHMgaGF2ZSBjb21wbGV0ZWQgKi8KKworCXNwaW5fbG9ja19iaCgmc3RsYy0+dHhfbG9jayk7CisJc3RsYzQ1eHhfZmx1c2hfcXVldWVzKHN0bGMpOworCXNwaW5fdW5sb2NrX2JoKCZzdGxjLT50eF9sb2NrKTsKKworCXN0bGMtPmZ3X3N0YXRlID0gRldfU1RBVEVfT0ZGOworCisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJc3dpdGNoIChjb25mLT50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJbWVtY3B5KHN0bGMtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfb3BfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9pZl9jb25mICpjb25mKQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOworCisJbWVtY3B5KHN0bGMtPmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOworCXN0bGM0NXh4X3R4X3NldHVwKHN0bGMpOworCisJbXV0ZXhfdW5sb2NrKCZzdGxjLT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGxjNDV4eF9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OworCisJc3RsYzQ1eHhfZGVidWcoREVCVUdfRlVOQywgIiVzIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmc3RsYy0+bXV0ZXgpOworCisJc3RsYy0+Y2hhbm5lbCA9IGh3LT5jb25mLmNoYW5uZWwtPmh3X3ZhbHVlOworCXN0bGM0NXh4X3R4X3NjYW4oc3RsYyk7CisJc3RsYzQ1eHhfdHhfc2V0dXAoc3RsYyk7CisJc3RsYzQ1eHhfdHhfZWRjZihzdGxjKTsKKworCWlmICgoaHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgIT0gc3RsYy0+cHNtKSB7CisJCXN0bGMtPnBzbSA9IGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFM7CisJCWlmIChzdGxjLT5hc3NvY2lhdGVkKSB7CisJCQlzdGxjNDV4eF90eF9wc20oc3RsYywgc3RsYy0+cHNtKTsKKwkJCXN0bGM0NXh4X3R4X251bGxmdW5jKHN0bGMsIHN0bGMtPnBzbSk7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnN0bGMtPm11dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCAqdG90YWxfZmxhZ3MsCisJCQkJICAgICAgaW50IG1jX2NvdW50LAorCQkJCSAgICAgIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQoreworCSp0b3RhbF9mbGFncyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0bGM0NXh4X29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKKwkJCQkJIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBzdGxjNDV4eCAqc3RsYyA9IGh3LT5wcml2OworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgeworCQlzdGxjLT5hc3NvY2lhdGVkID0gaW5mby0+YXNzb2M7CisJCWlmIChpbmZvLT5hc3NvYykKKwkJCXN0bGMtPmFpZCA9IGluZm8tPmFpZDsKKwkJZWxzZQorCQkJc3RsYy0+YWlkID0gLTE7CisKKwkJaWYgKHN0bGMtPnBzbSkgeworCQkJc3RsYzQ1eHhfdHhfcHNtKHN0bGMsIHN0bGMtPnBzbSk7CisJCQlzdGxjNDV4eF90eF9udWxsZnVuYyhzdGxjLCBzdGxjLT5wc20pOworCQl9CisJfQorfQorCisKKy8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBzdGxjNDV4eF9yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwgIC5od192YWx1ZSA9IDAsICAgIC5od192YWx1ZV9zaG9ydCA9IDAsIH0sCisJeyAuYml0cmF0ZSA9IDIwLCAgLmh3X3ZhbHVlID0gMSwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gMSwgfSwKKwl7IC5iaXRyYXRlID0gNTUsICAuaHdfdmFsdWUgPSAyLCAgICAuaHdfdmFsdWVfc2hvcnQgPSAyLCB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IDMsICAgIC5od192YWx1ZV9zaG9ydCA9IDMsIH0sCisJeyAuYml0cmF0ZSA9IDYwLCAgLmh3X3ZhbHVlID0gNCwgICAgLmh3X3ZhbHVlX3Nob3J0ID0gNCwgfSwKKwl7IC5iaXRyYXRlID0gOTAsICAuaHdfdmFsdWUgPSA1LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA1LCB9LAorCXsgLmJpdHJhdGUgPSAxMjAsIC5od192YWx1ZSA9IDYsICAgIC5od192YWx1ZV9zaG9ydCA9IDYsIH0sCisJeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gNywgICAgLmh3X3ZhbHVlX3Nob3J0ID0gNywgfSwKKwl7IC5iaXRyYXRlID0gMjQwLCAuaHdfdmFsdWUgPSA4LCAgICAuaHdfdmFsdWVfc2hvcnQgPSA4LCB9LAorCXsgLmJpdHJhdGUgPSAzNjAsIC5od192YWx1ZSA9IDksICAgIC5od192YWx1ZV9zaG9ydCA9IDksIH0sCisJeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gMTAsICAgLmh3X3ZhbHVlX3Nob3J0ID0gMTAsIH0sCisJeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTEsICAgLmh3X3ZhbHVlX3Nob3J0ID0gMTEsIH0sCit9OworCisvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgc3RsYzQ1eHhfY2hhbm5lbHNbXSA9IHsKKwl7IC5od192YWx1ZSA9IDEsIC5jZW50ZXJfZnJlcSA9IDI0MTJ9LAorCXsgLmh3X3ZhbHVlID0gMiwgLmNlbnRlcl9mcmVxID0gMjQxN30sCisJeyAuaHdfdmFsdWUgPSAzLCAuY2VudGVyX2ZyZXEgPSAyNDIyfSwKKwl7IC5od192YWx1ZSA9IDQsIC5jZW50ZXJfZnJlcSA9IDI0Mjd9LAorCXsgLmh3X3ZhbHVlID0gNSwgLmNlbnRlcl9mcmVxID0gMjQzMn0sCisJeyAuaHdfdmFsdWUgPSA2LCAuY2VudGVyX2ZyZXEgPSAyNDM3fSwKKwl7IC5od192YWx1ZSA9IDcsIC5jZW50ZXJfZnJlcSA9IDI0NDJ9LAorCXsgLmh3X3ZhbHVlID0gOCwgLmNlbnRlcl9mcmVxID0gMjQ0N30sCisJeyAuaHdfdmFsdWUgPSA5LCAuY2VudGVyX2ZyZXEgPSAyNDUyfSwKKwl7IC5od192YWx1ZSA9IDEwLCAuY2VudGVyX2ZyZXEgPSAyNDU3fSwKKwl7IC5od192YWx1ZSA9IDExLCAuY2VudGVyX2ZyZXEgPSAyNDYyfSwKKwl7IC5od192YWx1ZSA9IDEyLCAuY2VudGVyX2ZyZXEgPSAyNDY3fSwKKwl7IC5od192YWx1ZSA9IDEzLCAuY2VudGVyX2ZyZXEgPSAyNDcyfSwKK307CisKKy8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc3RsYzQ1eHhfYmFuZF8yZ2h6ID0geworCS5jaGFubmVscyA9IHN0bGM0NXh4X2NoYW5uZWxzLAorCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShzdGxjNDV4eF9jaGFubmVscyksCisJLmJpdHJhdGVzID0gc3RsYzQ1eHhfcmF0ZXMsCisJLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKHN0bGM0NXh4X3JhdGVzKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBzdGxjNDV4eF9vcHMgPSB7CisJLnN0YXJ0ID0gc3RsYzQ1eHhfb3Bfc3RhcnQsCisJLnN0b3AgPSBzdGxjNDV4eF9vcF9zdG9wLAorCS5hZGRfaW50ZXJmYWNlID0gc3RsYzQ1eHhfb3BfYWRkX2ludGVyZmFjZSwKKwkucmVtb3ZlX2ludGVyZmFjZSA9IHN0bGM0NXh4X29wX3JlbW92ZV9pbnRlcmZhY2UsCisJLmNvbmZpZyA9IHN0bGM0NXh4X29wX2NvbmZpZywKKwkuY29uZmlnX2ludGVyZmFjZSA9IHN0bGM0NXh4X29wX2NvbmZpZ19pbnRlcmZhY2UsCisJLmNvbmZpZ3VyZV9maWx0ZXIgPSBzdGxjNDV4eF9vcF9jb25maWd1cmVfZmlsdGVyLAorCS50eCA9IHN0bGM0NXh4X29wX3R4LAorCS5ic3NfaW5mb19jaGFuZ2VkID0gc3RsYzQ1eHhfb3BfYnNzX2luZm9fY2hhbmdlZCwKK307CisKK3N0YXRpYyBpbnQgc3RsYzQ1eHhfcmVnaXN0ZXJfbWFjODAyMTEoc3RydWN0IHN0bGM0NXh4ICpzdGxjKQoreworCS8qIEZJWE1FOiBTRVRfSUVFRTgwMjExX1BFUk1fQUREUigpIHJlcXVpcmVzIGRlZmF1bHRfbWFjX2FkZHIKKwkgICB0byBiZSBub24tY29uc3QgZm9yIHNvbWUgc3RyYW5nZSByZWFzb24gKi8KKwlzdGF0aWMgdTggZGVmYXVsdF9tYWNfYWRkcltFVEhfQUxFTl0gPSB7CisJCTB4MDAsIDB4MDIsIDB4ZWUsIDB4YzAsIDB4ZmYsIDB4ZWUKKwl9OworCWludCByZXQ7CisKKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihzdGxjLT5odywgZGVmYXVsdF9tYWNfYWRkcik7CisKKwlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoc3RsYy0+aHcpOworCWlmIChyZXQpIHsKKwkJc3RsYzQ1eHhfZXJyb3IoInVuYWJsZSB0byByZWdpc3RlciBtYWM4MDIxMSBodzogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdGxjNDV4eF9kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3RsYzQ1eHhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzdGxjNDV4eCIsCisJLmlkCQk9IC0xLAorCisJLyogZGV2aWNlIG1vZGVsIGluc2lzdHMgdG8gaGF2ZSBhIHJlbGVhc2UgZnVuY3Rpb24gKi8KKwkuZGV2ICAgICAgICAgICAgPSB7CisJCS5yZWxlYXNlID0gc3RsYzQ1eHhfZGV2aWNlX3JlbGVhc2UsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHN0bGM0NXh4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IHN0bGM0NXh4ICpzdGxjOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCWludCByZXQ7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwkvKiBtYWM4MDIxMSBhbGxvYyAqLworCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqc3RsYyksICZzdGxjNDV4eF9vcHMpOworCWlmICghaHcpIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImNvdWxkIG5vdCBhbGxvYyBpZWVlODAyMTFfaHciKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogbWFjODAyMTEgY2xlYXJzIGh3LT5wcml2ICovCisJc3RsYyA9IGh3LT5wcml2OworCisJc3RsYy0+aHcgPSBodzsKKwlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCBzdGxjKTsKKwlzdGxjLT5zcGkgPSBzcGk7CisKKwlzcGktPmJpdHNfcGVyX3dvcmQgPSAxNjsKKwlzcGktPm1heF9zcGVlZF9oeiA9IDI0MDAwMDAwOworCisJcmV0ID0gc3BpX3NldHVwKHNwaSk7CisJaWYgKHJldCA8IDApCisJCXN0bGM0NXh4X2Vycm9yKCJzcGlfc2V0dXAgZmFpbGVkIik7CisKKwlyZXQgPSBncGlvX3JlcXVlc3Qoc3RsYzQ1eHhfZ3Bpb19wb3dlciwgInN0bGM0NXh4IHBvd2VyIik7CisJaWYgKHJldCA8IDApIHsKKwkJc3RsYzQ1eHhfZXJyb3IoInBvd2VyIEdQSU8gcmVxdWVzdCBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBncGlvX3JlcXVlc3Qoc3RsYzQ1eHhfZ3Bpb19pcnEsICJzdGxjNDV4eCBpcnEiKTsKKwlpZiAocmV0IDwgMCkgeworCQlzdGxjNDV4eF9lcnJvcigiaXJxIEdQSU8gcmVxdWVzdCBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0bGM0NXh4X2dwaW9fcG93ZXIsIDApOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KHN0bGM0NXh4X2dwaW9faXJxKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKHN0bGM0NXh4X2dwaW9faXJxKSwKKwkJCSAgc3RsYzQ1eHhfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAic3RsYzQ1eHgiLAorCQkJICBzdGxjLT5zcGkpOworCWlmIChyZXQgPCAwKQorCQkvKiBGSVhNRTogaGFuZGxlIHRoZSBlcnJvciAqLworCQlzdGxjNDV4eF9lcnJvcigicmVxdWVzdF9pcnEoKSBmYWlsZWQiKTsKKworCXNldF9pcnFfdHlwZShncGlvX3RvX2lycShzdGxjNDV4eF9ncGlvX2lycSksCisJCSAgICAgSVJRX1RZUEVfRURHRV9SSVNJTkcpOworCisJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpKTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc3RsYzQ1eHhfZGV2aWNlKTsKKwlpZiAocmV0KSB7CisJCXN0bGM0NXh4X2Vycm9yKCJDb3VsZG4ndCByZWdpc3RlciB3bGFuX29tYXAgZGV2aWNlLiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlkZXZfc2V0X2RydmRhdGEoJnN0bGM0NXh4X2RldmljZS5kZXYsIHN0bGMpOworCisJSU5JVF9XT1JLKCZzdGxjLT53b3JrLCBzdGxjNDV4eF93b3JrKTsKKwlJTklUX1dPUksoJnN0bGMtPndvcmtfcmVzZXQsIHN0bGM0NXh4X3dvcmtfcmVzZXQpOworCUlOSVRfREVMQVlFRF9XT1JLKCZzdGxjLT53b3JrX3R4X3RpbWVvdXQsIHN0bGM0NXh4X3dvcmtfdHhfdGltZW91dCk7CisJbXV0ZXhfaW5pdCgmc3RsYy0+bXV0ZXgpOworCWluaXRfY29tcGxldGlvbigmc3RsYy0+ZndfY29tcCk7CisJc3Bpbl9sb2NrX2luaXQoJnN0bGMtPnR4X2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZzdGxjLT50eGJ1ZmZlcik7CisJSU5JVF9MSVNUX0hFQUQoJnN0bGMtPnR4X3BlbmRpbmcpOworCUlOSVRfTElTVF9IRUFEKCZzdGxjLT50eF9zZW50KTsKKworCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAorCQlJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCUlFRUU4MDIxMV9IV19OT0lTRV9EQk07CisJLyogZm91ciBieXRlcyBmb3IgcGFkZGluZyAqLworCWh3LT5leHRyYV90eF9oZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3Qgc19sbV9kYXRhX291dCkgKyA0OworCisJLyogdW5pdCB1cyAqLworCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTAwMDsKKworCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOworCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmc3RsYzQ1eHhfYmFuZF8yZ2h6OworCisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZzcGktPmRldik7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKGRlZmF1bHRfY2FsX3Jzc2kpICE9IFJTU0lfQ0FMX0FSUkFZX0xFTik7CisJQlVJTERfQlVHX09OKHNpemVvZihkZWZhdWx0X2NhbF9jaGFubmVscykgIT0gQ0hBTk5FTF9DQUxfQVJSQVlfTEVOKTsKKworCXN0bGMtPmNhbF9yc3NpID0ga21lbWR1cChkZWZhdWx0X2NhbF9yc3NpLCBSU1NJX0NBTF9BUlJBWV9MRU4sCisJCQkJIEdGUF9LRVJORUwpOworCXN0bGMtPmNhbF9jaGFubmVscyA9IGttZW1kdXAoZGVmYXVsdF9jYWxfY2hhbm5lbHMsCisJCQkJICAgICBDSEFOTkVMX0NBTF9BUlJBWV9MRU4sCisJCQkJICAgICBHRlBfS0VSTkVMKTsKKworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3RsYzQ1eHhfZGV2aWNlLmRldiwgJmRldl9hdHRyX2NhbF9yc3NpKTsKKwlpZiAocmV0IDwgMCkgeworCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBmaWxlIGNhbF9yc3NpIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmc3RsYzQ1eHhfZGV2aWNlLmRldiwgJmRldl9hdHRyX2NhbF9jaGFubmVscyk7CisJaWYgKHJldCA8IDApIHsKKwkJc3RsYzQ1eHhfZXJyb3IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZSBjYWxfY2hhbm5lbHMiKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZzdGxjNDV4eF9kZXZpY2UuZGV2LCAmZGV2X2F0dHJfdHhfYnVmKTsKKwlpZiAocmV0IDwgMCkgeworCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBmaWxlIHR4X2J1ZiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBzdGxjNDV4eF9yZWdpc3Rlcl9tYWM4MDIxMShzdGxjKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlzdGxjNDV4eF9pbmZvKCJ2IiBEUklWRVJfVkVSU0lPTiAiIGxvYWRlZCIpOworCisJc3RsYzQ1eHhfaW5mbygiY29uZmlnIGJ1ZmZlciAweCV4LTB4JXgiLAorCQkgICAgICBGSVJNV0FSRV9DT05GSUdfU1RBUlQsIEZJUk1XQVJFX0NPTkZJR19FTkQpOworCXN0bGM0NXh4X2luZm8oInR4IDB4JXgtMHgleCwgcnggMHgleC0weCV4IiwKKwkJICAgICAgRklSTVdBUkVfVFhCVUZGRVJfU1RBUlQsIEZJUk1XQVJFX1RYQlVGRkVSX0VORCwKKwkJICAgICAgRklSTVdBUkVfUlhCVUZGRVJfU1RBUlQsIEZJUk1XQVJFX1JYQlVGRkVSX0VORCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzdGxjNDV4eF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgc3RsYzQ1eHggKnN0bGMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKKworCXN0bGM0NXh4X2RlYnVnKERFQlVHX0ZVTkMsICIlcyIsIF9fZnVuY19fKTsKKworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZzdGxjNDV4eF9kZXZpY2UpOworCisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoc3RsYy0+aHcpOworCisJZnJlZV9pcnEoZ3Bpb190b19pcnEoc3RsYzQ1eHhfZ3Bpb19pcnEpLCBzcGkpOworCisJZ3Bpb19mcmVlKHN0bGM0NXh4X2dwaW9fcG93ZXIpOworCWdwaW9fZnJlZShzdGxjNDV4eF9ncGlvX2lycSk7CisKKwkvKiBGSVhNRTogZnJlZSBjYWxfY2hhbm5lbHMgYW5kIGNhbF9yc3NpPyAqLworCisJa2ZyZWUoc3RsYy0+ZncpOworCisJbXV0ZXhfZGVzdHJveSgmc3RsYy0+bXV0ZXgpOworCisJLyogZnJlZXMgYWxzbyBzdGxjICovCisJaWVlZTgwMjExX2ZyZWVfaHcoc3RsYy0+aHcpOworCXN0bGMgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHN0bGM0NXh4X3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLyogdXNlIGN4MzExMHggbmFtZSBiZWNhdXNlIGJvYXJkLW44MDAuYyB1c2VzIHRoYXQgZm9yIHRoZQorCQkgKiBTUEkgcG9ydCAqLworCQkubmFtZQkJPSAiY3gzMTEweCIsCisJCS5idXMJCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisKKwkucHJvYmUJCT0gc3RsYzQ1eHhfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzdGxjNDV4eF9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc3RsYzQ1eHhfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZzdGxjNDV4eF9zcGlfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlzdGxjNDV4eF9lcnJvcigiZmFpbGVkIHRvIHJlZ2lzdGVyIFNQSSBkcml2ZXI6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHN0bGM0NXh4X2V4aXQodm9pZCkKK3sKKwlzdGxjNDV4eF9kZWJ1ZyhERUJVR19GVU5DLCAiJXMiLCBfX2Z1bmNfXyk7CisKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnN0bGM0NXh4X3NwaV9kcml2ZXIpOworCisJc3RsYzQ1eHhfaW5mbygidW5sb2FkZWQiKTsKK30KKworbW9kdWxlX2luaXQoc3RsYzQ1eHhfaW5pdCk7Cittb2R1bGVfZXhpdChzdGxjNDV4eF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bub2tpYS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguaCBiL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTZiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHguaApAQCAtMCwwICsxLDI4MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHN0bGM0NXh4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBDb250YWN0OiBLYWxsZSBWYWxvIDxrYWxsZS52YWxvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworI2luY2x1ZGUgInN0bGM0NXh4X2xtYWMuaCIKKworI2RlZmluZSBEUklWRVJfTkFNRSAic3RsYzQ1eHgiCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjEuMyIKKworI2RlZmluZSBEUklWRVJfUFJFRklYIERSSVZFUl9OQU1FICI6ICIKKworZW51bSB7CisJREVCVUdfTk9ORSA9IDAsCisJREVCVUdfRlVOQyA9IDEgPDwgMCwKKwlERUJVR19JUlEgPSAxIDw8IDEsCisJREVCVUdfQkggPSAxIDw8IDIsCisJREVCVUdfUlggPSAxIDw8IDMsCisJREVCVUdfUlhfQ09OVEVOVCA9IDEgPDwgNSwKKwlERUJVR19UWCA9IDEgPDwgNiwKKwlERUJVR19UWF9DT05URU5UID0gMSA8PCA4LAorCURFQlVHX1RYQlVGRkVSID0gMSA8PCA5LAorCURFQlVHX1FVRVVFID0gMSA8PCAxMCwKKwlERUJVR19CT09UID0gMSA8PCAxMSwKKwlERUJVR19QU00gPSAxIDw8IDEyLAorCURFQlVHX0FMTCA9IH4wLAorfTsKKworI2RlZmluZSBERUJVR19MRVZFTCBERUJVR19OT05FCisvKiAjZGVmaW5lIERFQlVHX0xFVkVMIERFQlVHX0FMTCAqLworLyogI2RlZmluZSBERUJVR19MRVZFTCAoREVCVUdfVFggfCBERUJVR19SWCB8IERFQlVHX0lSUSkgKi8KKy8qICNkZWZpbmUgREVCVUdfTEVWRUwgKERFQlVHX1RYIHwgREVCVUdfTUVNUkVHSU9OIHwgREVCVUdfUVVFVUUpICovCisvKiAjZGVmaW5lIERFQlVHX0xFVkVMIChERUJVR19NRU1SRUdJT04gfCBERUJVR19RVUVVRSkgKi8KKworI2RlZmluZSBzdGxjNDV4eF9lcnJvcihmbXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0VSUiBEUklWRVJfUFJFRklYICJFUlJPUiAiIGZtdCAiXG4iLCAjI2FyZykKKworI2RlZmluZSBzdGxjNDV4eF93YXJuaW5nKGZtdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfUFJFRklYICJXQVJOSU5HICIgZm10ICJcbiIsICMjYXJnKQorCisjZGVmaW5lIHN0bGM0NXh4X2luZm8oZm10LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9QUkVGSVggZm10ICJcbiIsICMjYXJnKQorCisjZGVmaW5lIHN0bGM0NXh4X2RlYnVnKGxldmVsLCBmbXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAobGV2ZWwgJiBERUJVR19MRVZFTCkgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgRFJJVkVSX1BSRUZJWCBmbXQgIlxuIiwgIyNhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBzdGxjNDV4eF9kdW1wKGxldmVsLCBidWYsIGxlbikJCVwKKwlkbyB7IFwKKwkJaWYgKGxldmVsICYgREVCVUdfTEVWRUwpIFwKKwkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIFwKKwkJCQkgICAgICAgMTYsIDEsIGJ1ZiwgbGVuLCAxKTsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIE1BQzJTVFIoYSkgKChhKVswXSwgKGEpWzFdLCAoYSlbMl0sIChhKVszXSwgKGEpWzRdLCAoYSlbNV0pCisjZGVmaW5lIE1BQ1NUUiAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCisKKy8qIEJpdCAxNSBpcyByZWFkL3dyaXRlIGJpdDsgT04gPSBSRUFELCBPRkYgPSBXUklURSAqLworI2RlZmluZSBBRERSX1JFQURfQklUXzE1ICAweDgwMDAKKworI2RlZmluZSBTUElfQURSU19BUk1fSU5URVJSVVBUUyAgICAgMHgwMAorI2RlZmluZSBTUElfQURSU19BUk1fSU5UX0VOCSAgICAweDA0CisKKyNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTICAgIDB4MDgKKyNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRfRU4JICAgIDB4MGMKKyNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRfQUNLCSAgICAweDEwCisKKyNkZWZpbmUgU1BJX0FEUlNfR0VOX1BVUlBfMSAgIAkgICAgMHgxNAorI2RlZmluZSBTUElfQURSU19HRU5fUFVSUF8yICAgCSAgICAweDE4CisKKy8qIGhpZ2ggd29yZCAqLworI2RlZmluZSBTUElfQURSU19ERVZfQ1RSTF9TVEFUICAgICAgMHgyNgorCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9EQVRBICAgICAgCSAgICAweDI4CisKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwgICAgIDB4MmMKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0xFTiAgICAgIDB4MmUKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UgICAgIDB4MzAKKworI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9DVFJMICAgICAgMHgzNAorI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9MRU4gICAgICAgMHgzNgorI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9CQVNFICAgICAgMHgzOAorCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSAweDgwMDAKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9TVEFSVF9IQUxURUQgIDB4NDAwMAorI2RlZmluZSBTUElfQ1RSTF9TVEFUX1JBTV9CT09UICAgICAgMHgyMDAwCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9SRVNFVCAgICAweDEwMDAKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9IT1NUX0NQVV9FTiAgIDB4MDgwMAorCisjZGVmaW5lIFNQSV9ETUFfV1JJVEVfQ1RSTF9FTkFCTEUgICAweDAwMDEKKyNkZWZpbmUgU1BJX0RNQV9SRUFEX0NUUkxfRU5BQkxFICAgIDB4MDAwMQorI2RlZmluZSBIT1NUX0FMTE9XRUQgICAgICAgICAgICAgICAgKDEgPDwgNykKKworI2RlZmluZSBGSVJNV0FSRV9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMAorCisjZGVmaW5lIFNQSV9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAgICAgICAgICAvKiBtc2VjICovCisKKyNkZWZpbmUgU1BJX01BWF9UWF9QQUNLRVRTICAgICAgICAgICAgICAgICAgICAgIDMyCisKKyNkZWZpbmUgU1BJX01BWF9QQUNLRVRfU0laRSAgICAgICAgICAgICAgICAgICAgIDMyNzY3CisKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfV0FLRVVQICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfU0xFRVAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfUkRET05FICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBTUElfVEFSR0VUX0lOVF9DVFMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorI2RlZmluZSBTUElfVEFSR0VUX0lOVF9EUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwMAorCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9SRUFEWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9XUl9SRUFEWSAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9TV19VUERBVEUgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNQSV9IT1NUX0lOVF9VUERBVEUgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisKKy8qIGNsZWFyIHRvIHNlbmQgKi8KKyNkZWZpbmUgU1BJX0hPU1RfSU5UX0NUUwkgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorCisvKiBkYXRhIHJlYWR5ICovCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9EUgkgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisKKyNkZWZpbmUgU1BJX0hPU1RfSU5UU19ERUZBVUxUIFwKKwkoU1BJX0hPU1RfSU5UX1JFQURZIHwgU1BJX0hPU1RfSU5UX1VQREFURSB8IFNQSV9IT1NUX0lOVF9TV19VUERBVEUpCisKKyNkZWZpbmUgVEFSR0VUX0JPT1RfU0xFRVAgNTAKKworLyogVGhlIGZpcm13YXJlIGJ1ZmZlciBpcyBkaXZpZGVkIGludG8gdGhyZWUgYXJlYXM6CisgKgorICogbyBjb25maWcgYXJlYSAoZm9yIGNvbnRyb2wgY29tbWFuZHMpCisgKiBvIHR4IGJ1ZmZlcgorICogbyByeCBidWZmZXIKKyAqLworI2RlZmluZSBGSVJNV0FSRV9CVUZGRVJfU1RBUlQgMHgyMDIwMAorI2RlZmluZSBGSVJNV0FSRV9CVUZGRVJfRU5EIDB4MjdjNjAKKyNkZWZpbmUgRklSTVdBUkVfQlVGRkVSX0xFTiAoRklSTVdBUkVfQlVGRkVSX0VORCAtIEZJUk1XQVJFX0JVRkZFUl9TVEFSVCkKKyNkZWZpbmUgRklSTVdBUkVfTVRVIDMyNDAKKyNkZWZpbmUgRklSTVdBUkVfQ09ORklHX1BBWUxPQURfTEVOIDEwMjQKKyNkZWZpbmUgRklSTVdBUkVfQ09ORklHX1NUQVJUIEZJUk1XQVJFX0JVRkZFUl9TVEFSVAorI2RlZmluZSBGSVJNV0FSRV9DT05GSUdfTEVOIChzaXplb2Yoc3RydWN0IHNfbG1fY29udHJvbCkgKyBcCisJCQkgICAgIEZJUk1XQVJFX0NPTkZJR19QQVlMT0FEX0xFTikKKyNkZWZpbmUgRklSTVdBUkVfQ09ORklHX0VORCAoRklSTVdBUkVfQ09ORklHX1NUQVJUICsgRklSTVdBUkVfQ09ORklHX0xFTiAtIDEpCisjZGVmaW5lIEZJUk1XQVJFX1JYQlVGRkVSX0xFTiAoNSAqIEZJUk1XQVJFX01UVSArIDEwMjQpCisjZGVmaW5lIEZJUk1XQVJFX1JYQlVGRkVSX1NUQVJUIChGSVJNV0FSRV9CVUZGRVJfRU5EIC0gRklSTVdBUkVfUlhCVUZGRVJfTEVOKQorI2RlZmluZSBGSVJNV0FSRV9SWEJVRkZFUl9FTkQgKEZJUk1XQVJFX1JYQlVGRkVSX1NUQVJUICsgXAorCQkJICAgICAgIEZJUk1XQVJFX1JYQlVGRkVSX0xFTiAtIDEpCisjZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX1NUQVJUIChGSVJNV0FSRV9CVUZGRVJfU1RBUlQgKyBGSVJNV0FSRV9DT05GSUdfTEVOKQorI2RlZmluZSBGSVJNV0FSRV9UWEJVRkZFUl9MRU4gKEZJUk1XQVJFX0JVRkZFUl9MRU4gLSBGSVJNV0FSRV9DT05GSUdfTEVOIC0gXAorCQkJICAgICAgIEZJUk1XQVJFX1JYQlVGRkVSX0xFTikKKyNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfRU5EIChGSVJNV0FSRV9UWEJVRkZFUl9TVEFSVCArIFwKKwkJCSAgICAgICBGSVJNV0FSRV9UWEJVRkZFUl9MRU4gLSAxKQorCisjZGVmaW5lIEZJUk1XQVJFX1RYQlVGRkVSX0hFQURFUiAxMDAKKyNkZWZpbmUgRklSTVdBUkVfVFhCVUZGRVJfVFJBSUxFUiA0CisKKy8qIEZJWE1FOiBjb21lIHVwIHdpdGggYSBwcm9wZXIgdmFsdWUgKi8KKyNkZWZpbmUgTUFYX0ZSQU1FX0xFTiAyNTAwCisKKy8qIHVuaXQgaXMgbXMgKi8KKyNkZWZpbmUgVFhfRlJBTUVfTElGRVRJTUUgMjAwMAorI2RlZmluZSBUWF9USU1FT1VUIDQwMDAKKworI2RlZmluZSBTVVBQT1JURURfQ0hBTk5FTFMgMTMKKworLyogRklYTUUgKi8KKy8qICNkZWZpbmUgQ0hBTk5FTF9DQUxfTEVOIG9mZnNldG9mKHN0cnVjdCBzX2xtb19zY2FuLCBicmF0ZW1hc2spIC0gXCAqLworLyogCW9mZnNldG9mKHN0cnVjdCBzX2xtb19zY2FuLCBjaGFubmVsKSAqLworI2RlZmluZSBDSEFOTkVMX0NBTF9MRU4gMjkyCisjZGVmaW5lIENIQU5ORUxfQ0FMX0FSUkFZX0xFTiAoU1VQUE9SVEVEX0NIQU5ORUxTICogQ0hBTk5FTF9DQUxfTEVOKQorLyogRklYTUUgKi8KKy8qICNkZWZpbmUgUlNTSV9DQUxfTEVOIHNpemVvZihzdHJ1Y3Qgc19sbW9fc2NhbikgLSBcICovCisvKiAJb2Zmc2V0b2Yoc3RydWN0IHNfbG1vX3NjYW4sIHJzc2ljYWwpICovCisjZGVmaW5lIFJTU0lfQ0FMX0xFTiA4CisjZGVmaW5lIFJTU0lfQ0FMX0FSUkFZX0xFTiAoU1VQUE9SVEVEX0NIQU5ORUxTICogUlNTSV9DQUxfTEVOKQorCitzdHJ1Y3Qgc19kbWFfcmVncyB7CisJdW5zaWduZWQgc2hvcnQgY21kOworCXVuc2lnbmVkIHNob3J0IGxlbjsKKwl1bnNpZ25lZCBsb25nIGFkZHI7Cit9OworCitzdHJ1Y3Qgc3RsYzQ1eHhfaWVfdGltIHsKKwl1OCBkdGltX2NvdW50OworCXU4IGR0aW1fcGVyaW9kOworCXU4IGJtYXBfY29udHJvbDsKKwl1OCBwdmJtYXBbMjUxXTsKK307CisKK3N0cnVjdCB0eGJ1ZmZlciB7CisJLyogY2FuIGJlIHJlbW92ZWQgd2hlbiBzd2l0Y2hlZCB0byBza2IgcXVldWUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHR4X2xpc3Q7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJ1ZmZlcl9saXN0OworCisJaW50IHN0YXJ0OworCWludCBmcmFtZV9zdGFydDsKKwlpbnQgZW5kOworCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgaGFuZGxlOworCisJYm9vbCBzdGF0dXNfbmVlZGVkOworCisJaW50IGhlYWRlcl9sZW47CisKKwkvKiB1bml0IGppZmZpZXMgKi8KKwl1bnNpZ25lZCBsb25nIGxpZmV0aW1lOworfTsKKworZW51bSBmd19zdGF0ZSB7CisJRldfU1RBVEVfT0ZGLAorCUZXX1NUQVRFX0JPT1RJTkcsCisJRldfU1RBVEVfUkVBRFksCisJRldfU1RBVEVfUkVTRVQsCisJRldfU1RBVEVfUkVTRVRUSU5HLAorfTsKKworc3RydWN0IHN0bGM0NXh4IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3Jlc2V0OworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29ya190eF90aW1lb3V0OworCXN0cnVjdCBtdXRleCBtdXRleDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBmd19jb21wOworCisKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggbWFjX2FkZHJbRVRIX0FMRU5dOworCWludCBjaGFubmVsOworCisJdTggKmNhbF9yc3NpOworCXU4ICpjYWxfY2hhbm5lbHM7CisKKwllbnVtIGZ3X3N0YXRlIGZ3X3N0YXRlOworCisJc3BpbmxvY2tfdCB0eF9sb2NrOworCisJLyogcHJvdGVjdGVkIGJ5IHR4X2xvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHR4YnVmZmVyOworCisJLyogcHJvdGVjdGVkIGJ5IHR4X2xvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHR4X3BlbmRpbmc7CisKKwkvKiBwcm90ZWN0ZWQgYnkgdHhfbG9jayAqLworCWludCB0eF9xdWV1ZV9zdG9wcGVkOworCisJLyogcHJvdGVjdGVkIGJ5IG11dGV4ICovCisJc3RydWN0IGxpc3RfaGVhZCB0eF9zZW50OworCisJaW50IHR4X2ZyYW1lczsKKworCXU4ICpmdzsKKwlpbnQgZndfbGVuOworCisJYm9vbCBwc207CisJYm9vbCBhc3NvY2lhdGVkOworCWludCBhaWQ7CisJYm9vbCBwc3BvbGxpbmc7Cit9OworCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zdGxjNDV4eC9zdGxjNDV4eF9sbWFjLmggYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHhfbG1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNWRiODAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RsYzQ1eHgvc3RsYzQ1eHhfbG1hYy5oCkBAIC0wLDAgKzEsNDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBUaGlzIGlzIHRoZSBMTUFDIEFQSSBpbnRlcmZhY2UgaGVhZGVyIGZpbGUgZm9yIFNUTEM0NTYwLiAgICAgICAgCSoKKyogIENvcHlyaWdodCAoQykgMjAwNyBDb25leGFudCBTeXN0ZW1zLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgICAgICAgICoKKyogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAgICAgICoKKyogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCSoKKyogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICoKKyogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCSoKKyogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICoKKyogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICoKKyogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LioKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19sbWFjX2hfXworI2RlZmluZSBfX2xtYWNfaF9fCisKKyNkZWZpbmUgTE1fVE9QX1ZBUklBTlQgICAgICAweDA1MDYKKyNkZWZpbmUgTE1fQk9UVE9NX1ZBUklBTlQgICAweDA1MDYKKworLyoKKyAqIExNQUMgLSBVTUFDIGludGVyZmFjZSBkZWZpbml0aW9uOgorICovCisKKyNkZWZpbmUgTE1fRkxBR19DT05UUk9MICAgICAweDgwMDAKKyNkZWZpbmUgTE1fRkxBR19BTElHTiAgICAgICAweDQwMDAKKworI2RlZmluZSBMTV9DVFJMX09QU0VUICAgICAgIDB4MDAwMQorCisjZGVmaW5lIExNX09VVF9QUk9NSVNDICAgICAgMHgwMDAxCisjZGVmaW5lIExNX09VVF9USU1FU1RBTVAgICAgMHgwMDAyCisjZGVmaW5lIExNX09VVF9TRVFOUiAgICAgICAgMHgwMDA0CisjZGVmaW5lIExNX09VVF9CVVJTVCAgICAgICAgMHgwMDEwCisjZGVmaW5lIExNX09VVF9OT0NBTkNFTCAgICAgMHgwMDIwCisjZGVmaW5lIExNX09VVF9DTEVBUlRJTSAgICAgMHgwMDQwCisjZGVmaW5lIExNX09VVF9ISVRDSEhJS0UgICAgMHgwMDgwCisjZGVmaW5lIExNX09VVF9DT01QUkVTUyAgICAgMHgwMTAwCisjZGVmaW5lIExNX09VVF9DT05DQVQgICAgICAgMHgwMjAwCisjZGVmaW5lIExNX09VVF9QQ1NfQUNDRVBUICAgMHgwNDAwCisjZGVmaW5lIExNX09VVF9XQUlURU9TUCAgICAgMHgwODAwCisKKworI2RlZmluZSBMTV9BTE9GVF9TUCAgICAgICAgIDB4MTAKKyNkZWZpbmUgTE1fQUxPRlRfQ1RTICAgICAgICAweDIwCisjZGVmaW5lIExNX0FMT0ZUX1JUUyAgICAgICAgMHg0MAorI2RlZmluZSBMTV9BTE9GVF9NQVNLICAgICAgIDB4MWYKKyNkZWZpbmUgTE1fQUxPRlRfUkFURSAgICAgICAweDBmCisKKyNkZWZpbmUgTE1fSU5fRkNTX0dPT0QgICAgICAweDAwMDEKKyNkZWZpbmUgTE1fSU5fTUFUQ0hfTUFDICAgICAweDAwMDIKKyNkZWZpbmUgTE1fSU5fTUNCQyAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgTE1fSU5fQkVBQ09OICAgICAgICAweDAwMDgKKyNkZWZpbmUgTE1fSU5fTUFUQ0hfQlNTICAgICAweDAwMTAKKyNkZWZpbmUgTE1fSU5fQkNBU1RfQlNTICAgICAweDAwMjAKKyNkZWZpbmUgTE1fSU5fREFUQSAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgTE1fSU5fVFJVTkNBVEVEICAgICAweDAwODAKKworI2RlZmluZSBMTV9JTl9UUkFOU1BBUkVOVCAgIDB4MDIwMAorCisjZGVmaW5lIExNX1FVRVVFX0JFQUNPTiAgICAgMAorI2RlZmluZSBMTV9RVUVVRV9TQ0FOICAgICAgIDEKKyNkZWZpbmUgTE1fUVVFVUVfTUdUICAgICAgICAyCisjZGVmaW5lIExNX1FVRVVFX01DQkMgICAgICAgMworI2RlZmluZSBMTV9RVUVVRV9EQVRBICAgICAgIDQKKyNkZWZpbmUgTE1fUVVFVUVfREFUQTAgICAgICA0CisjZGVmaW5lIExNX1FVRVVFX0RBVEExICAgICAgNQorI2RlZmluZSBMTV9RVUVVRV9EQVRBMiAgICAgIDYKKyNkZWZpbmUgTE1fUVVFVUVfREFUQTMgICAgICA3CisKKyNkZWZpbmUgTE1fU0VUVVBfSU5GUkEgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIExNX1NFVFVQX0lCU1MgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBMTV9TRVRVUF9UUkFOU1BBUkVOVCAgICAweDAwMDgKKyNkZWZpbmUgTE1fU0VUVVBfUFJPTUlTQ1VPVVMgICAgMHgwMDEwCisjZGVmaW5lIExNX1NFVFVQX0hJQkVSTkFURSAgICAgIDB4MDAyMAorI2RlZmluZSBMTV9TRVRVUF9OT0FDSyAgICAgICAgICAweDAwNDAKKyNkZWZpbmUgTE1fU0VUVVBfUlhfRElTQUJMRUQgICAgMHgwMDgwCisKKyNkZWZpbmUgTE1fQU5URU5OQV8wICAgICAgICAgICAgMAorI2RlZmluZSBMTV9BTlRFTk5BXzEgICAgICAgICAgICAxCisjZGVmaW5lIExNX0FOVEVOTkFfRElWRVJTSVRZICAgIDIKKworI2RlZmluZSBMTV9UWF9GQUlMRUQgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgTE1fVFhfUFNNICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIExNX1RYX1BTTV9DQU5DRUxMRUQJMHgwMDA0CisKKyNkZWZpbmUgTE1fU0NBTl9FWElUICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIExNX1NDQU5fVFJBUCAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBMTV9TQ0FOX0FDVElWRSAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgTE1fU0NBTl9GSUxURVIgICAgICAgICAgMHgwMDA4CisKKyNkZWZpbmUgTE1fUFNNICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIExNX1BTTV9EVElNICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBMTV9QU01fTUNCQyAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgTE1fUFNNX0NIRUNLU1VNICAgICAgICAgMHgwMDA4CisjZGVmaW5lIExNX1BTTV9TS0lQX01PUkVfREFUQSAgIDB4MDAxMAorI2RlZmluZSBMTV9QU01fQkVBQ09OX1RJTUVPVVQgICAweDAwMjAKKyNkZWZpbmUgTE1fUFNNX0hGT1NMRUVQICAgICAgICAgMHgwMDQwCisjZGVmaW5lIExNX1BTTV9BVVRPU1dJVENIX1NMRUVQIDB4MDA4MAorI2RlZmluZQlMTV9QU01fTFBJVAkJMHgwMTAwCisjZGVmaW5lIExNX1BTTV9CRl9VQ0FTVF9TS0lQICAgIDB4MDIwMAorI2RlZmluZSBMTV9QU01fQkZfTUNBU1RfU0tJUCAgICAweDA0MDAKKworLyogaGZvc2xlZXAgKi8KKyNkZWZpbmUgTE1fUFNNX1NMRUVQX09QVElPTl9NQVNLIChMTV9QU01fQVVUT1NXSVRDSF9TTEVFUCB8IExNX1BTTV9IRk9TTEVFUCkKKyNkZWZpbmUgTE1fUFNNX1NMRUVQX09QVElPTl9TSElGVCAgICAgICA2CisvKiBoZm9zbGVlcGVuZCAqLworI2RlZmluZSBMTV9QU01fQkZfT1BUSU9OX01BU0sgKExNX1BTTV9CRl9NQ0FTVF9TS0lQIHwgTE1fUFNNX0JGX1VDQVNUX1NLSVApCisjZGVmaW5lIExNX1BTTV9CRl9PUFRJT05fU0hJRlQgIDkKKworCisjZGVmaW5lIExNX1BSSVZBQ0NfV0VQICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTE1fUFJJVkFDQ19US0lQICAgICAgICAgMHgwMgorI2RlZmluZSBMTV9QUklWQUNDX01JQ0hBRUwgICAgICAweDA0CisjZGVmaW5lIExNX1BSSVZBQ0NfQ0NYX0tQICAgICAgIDB4MDgKKyNkZWZpbmUgTE1fUFJJVkFDQ19DQ1hfTUlDICAgICAgMHgxMAorI2RlZmluZSBMTV9QUklWQUNDX0FFU19DQ01QICAgICAweDIwCisKKy8qIHNpemUgb2Ygc19sbV9kZXNjciBpbiB3b3JkcyAqLworI2RlZmluZSBMTV9ERVNDUl9TSVpFX1dPUkRTICAgICAxMQorCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKworZW51bSB7CisgICAgTE1fTU9ERV9DTElFTlQgPSAwLAorICAgIExNX01PREVfQVAKK307CisKK3N0cnVjdCBzX2xtX2Rlc2NyIHsKKyAgICB1aW50MTZfdCBtb2RlczsKKyAgICB1aW50MTZfdCBmbGFnczsKKyAgICB1aW50MzJfdCBidWZmZXJfc3RhcnQ7CisgICAgdWludDMyX3QgYnVmZmVyX2VuZDsKKyAgICB1aW50OF90IGhlYWRlcjsKKyAgICB1aW50OF90IHRyYWlsZXI7CisgICAgdWludDhfdCB0eF9xdWV1ZXM7CisgICAgdWludDhfdCB0eF9kZXB0aDsKKyAgICB1aW50OF90IHByaXZhY3k7CisgICAgdWludDhfdCByeF9rZXljYWNoZTsKKyAgICB1aW50OF90IHRpbV9zaXplOworICAgIHVpbnQ4X3QgcGFkMTsKKyAgICB1aW50OF90IHJhdGVzWzE2XTsKKyAgICB1aW50MzJfdCBsaW5rOworCXVpbnQxNl90IG10dTsKK307CisKKworc3RydWN0IHNfbG1fY29udHJvbCB7CisgICAgdWludDE2X3QgZmxhZ3M7CisgICAgdWludDE2X3QgbGVuZ3RoOworICAgIHVpbnQzMl90IGhhbmRsZTsKKyAgICB1aW50MTZfdCBvaWQ7CisgICAgdWludDE2X3QgcGFkOworICAgIC8qIHVpbnQ4X3QgZGF0YVtdOyAqLworfTsKKworZW51bSB7CisgICAgTE1fUFJJVl9OT05FID0gMCwKKyAgICBMTV9QUklWX1dFUCwKKyAgICBMTV9QUklWX1RLSVAsCisgICAgTE1fUFJJVl9US0lQTUlDSEFFTCwKKyAgICBMTV9QUklWX0NDWF9XRVBNSUMsCisgICAgTE1fUFJJVl9DQ1hfS1BNSUMsCisgICAgTE1fUFJJVl9DQ1hfS1AsCisgICAgTE1fUFJJVl9BRVNfQ0NNUAorfTsKKworZW51bSB7CisgICAgTE1fREVDUllQVF9OT05FLAorICAgIExNX0RFQ1JZUFRfT0ssCisgICAgTE1fREVDUllQVF9OT0tFWSwKKyAgICBMTV9ERUNSWVBUX05PTUlDSEFFTCwKKyAgICBMTV9ERUNSWVBUX05PQ0tJUE1JQywKKyAgICBMTV9ERUNSWVBUX0ZBSUxfV0VQLAorICAgIExNX0RFQ1JZUFRfRkFJTF9US0lQLAorICAgIExNX0RFQ1JZUFRfRkFJTF9NSUNIQUVMLAorICAgIExNX0RFQ1JZUFRfRkFJTF9DS0lQS1AsCisgICAgTE1fREVDUllQVF9GQUlMX0NLSVBNSUMsCisgICAgTE1fREVDUllQVF9GQUlMX0FFU0NDTVAKK307CisKK3N0cnVjdCBzX2xtX2RhdGFfb3V0IHsKKyAgICB1aW50MTZfdCBmbGFnczsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDMyX3QgaGFuZGxlOworICAgIHVpbnQxNl90IGFpZDsKKyAgICB1aW50OF90IHJ0c19yZXRyaWVzOworICAgIHVpbnQ4X3QgcmV0cmllczsKKyAgICB1aW50OF90IGFsb2Z0WzhdOworICAgIHVpbnQ4X3QgYWxvZnRfY3RybDsKKyAgICB1aW50OF90IGNyeXB0X29mZnNldDsKKyAgICB1aW50OF90IGtleXR5cGU7CisgICAgdWludDhfdCBrZXlsZW47CisgICAgdWludDhfdCBrZXlbMTZdOworICAgIHVpbnQ4X3QgcXVldWU7CisgICAgdWludDhfdCBiYWNrbG9nOworICAgIHVpbnQxNl90IGR1cmF0aW9uc1s0XTsKKyAgICB1aW50OF90IGFudGVubmE7CisgICAgdWludDhfdCBjdHM7CisgICAgaW50MTZfdCBwb3dlcjsKKyAgICB1aW50OF90IHBhZFsyXTsKKyAgICAvKnVpbnQ4X3QgZGF0YVtdOyovCit9OworCisjZGVmaW5lIExNX1JDUElfSU5WQUxJRCAgICAgICAgICgweGZmKQorCitzdHJ1Y3Qgc19sbV9kYXRhX2luIHsKKyAgICB1aW50MTZfdCBmbGFnczsKKyAgICB1aW50MTZfdCBsZW5ndGg7CisgICAgdWludDE2X3QgZnJlcXVlbmN5OworICAgIHVpbnQ4X3QgYW50ZW5uYTsKKyAgICB1aW50OF90IHJhdGU7CisgICAgdWludDhfdCByY3BpOworICAgIHVpbnQ4X3Qgc3E7CisgICAgdWludDhfdCBkZWNyeXB0OworICAgIHVpbnQ4X3QgcnNzaV9yYXc7CisgICAgdWludDMyX3QgY2xvY2tbMl07CisgICAgLyp1aW50OF90IGRhdGFbXTsqLworfTsKKwordW5pb24gdV9sbV9kYXRhIHsKKyAgICBzdHJ1Y3Qgc19sbV9kYXRhX291dCBvdXQ7CisgICAgc3RydWN0IHNfbG1fZGF0YV9pbiBpbjsKK307CisKK2VudW0geworICAgIExNX09JRF9TRVRVUAk9IDAsCisgICAgTE1fT0lEX1NDQU4JCT0gMSwKKyAgICBMTV9PSURfVFJBUAkJPSAyLAorICAgIExNX09JRF9FRENGCQk9IDMsCisgICAgTE1fT0lEX0tFWUNBQ0hFCT0gNCwKKyAgICBMTV9PSURfUFNNCQk9IDYsCisgICAgTE1fT0lEX1RYQ0FOQ0VMCT0gNywKKyAgICBMTV9PSURfVFgJCT0gOCwKKyAgICBMTV9PSURfQlVSU1QJPSA5LAorICAgIExNX09JRF9TVEFUUwk9IDEwLAorICAgIExNX09JRF9MRUQJCT0gMTMsCisgICAgTE1fT0lEX1RJTUVSCT0gMTUsCisgICAgTE1fT0lEX05BVgkJPSAyMCwKKyAgICBMTV9PSURfUENTCQk9IDIyLAorICAgIExNX09JRF9CVF9CQUxBTkNFUiAgPSAyOCwKKyAgICBMTV9PSURfR1JPVVBfQUREUkVTU19UQUJMRQk9IDMwLAorICAgIExNX09JRF9BUlBUQUJMRSAgICAgPSAzMSwKKyAgICBMTV9PSURfQlRfT1BUSU9OUyA9IDM1Cit9OworCitlbnVtIHsKKyAgICBMTV9GUk9OVEVORF9VTktOT1dOID0gMCwKKyAgICBMTV9GUk9OVEVORF9EVUVUVEUzLAorICAgIExNX0ZST05URU5EX0RVRVRURTIsCisgICAgTE1fRlJPTlRFTkRfRlJJU0JFRSwKKyAgICBMTV9GUk9OVEVORF9DUk9TU0JPVywKKyAgICBMTV9GUk9OVEVORF9MT05HQk9XCit9OworCisKKyNkZWZpbmUgSU5WQUxJRF9MUEZfQkFORFdJRFRIICAgMHhmZmZmCisjZGVmaW5lIElOVkFMSURfT1NDX1NUQVJUX0RFTEFZIDB4ZmZmZgorCitzdHJ1Y3Qgc19sbW9fc2V0dXAgeworICAgIHVpbnQxNl90IGZsYWdzOworICAgIHVpbnQ4X3QgIG1hY2FkZHJbNl07CisgICAgdWludDhfdCAgYnNzaWRbNl07CisgICAgdWludDhfdCAgYW50ZW5uYTsKKyAgICB1aW50OF90ICByeF9hbGlnbjsKKyAgICB1aW50MzJfdCByeF9idWZmZXI7CisgICAgdWludDE2X3QgcnhfbXR1OworICAgIHVpbnQxNl90IGZyb250ZW5kOworICAgIHVpbnQxNl90IHRpbWVvdXQ7CisgICAgdWludDE2X3QgdHJ1bmNhdGU7CisgICAgdWludDMyX3QgYnJhdGVtYXNrOworICAgIHVpbnQ4X3QgIHNic3Nfb2Zmc2V0OworICAgIHVpbnQ4X3QgIG1jYXN0X3dpbmRvdzsKKyAgICB1aW50OF90ICByeF9yc3NpX3RocmVzaG9sZDsKKyAgICB1aW50OF90ICByeF9lZF90aHJlc2hvbGQ7CisgICAgdWludDMyX3QgcmVmX2Nsb2NrOworICAgIHVpbnQxNl90IGxwZl9iYW5kd2lkdGg7CisgICAgdWludDE2X3Qgb3NjX3N0YXJ0X2RlbGF5OworfTsKKworCitzdHJ1Y3Qgc19sbW9fc2NhbiB7CisgICAgdWludDE2X3QgZmxhZ3M7CisgICAgdWludDE2X3QgZHdlbGw7CisgICAgdWludDhfdCBjaGFubmVsWzI5Ml07CisgICAgdWludDMyX3QgYnJhdGVtYXNrOworICAgIHVpbnQ4X3QgIGFsb2Z0WzhdOworICAgIHVpbnQ4X3QgIHJzc2ljYWxbOF07Cit9OworCisKK2VudW0geworICAgIExNX1RSQVBfU0NBTiA9IDAsCisgICAgTE1fVFJBUF9USU1FUiwKKyAgICBMTV9UUkFQX0JFQUNPTl9UWCwKKyAgICBMTV9UUkFQX0ZBQV9SQURJT19PTiwKKyAgICBMTV9UUkFQX0ZBQV9SQURJT19PRkYsCisgICAgTE1fVFJBUF9SQURBUiwKKyAgICBMTV9UUkFQX05PX0JFQUNPTiwKKyAgICBMTV9UUkFQX1RCVFQsCisgICAgTE1fVFJBUF9TQ09fRU5URVIsCisgICAgTE1fVFJBUF9TQ09fRVhJVAorfTsKKworc3RydWN0IHNfbG1vX3RyYXAgeworICAgIHVpbnQxNl90IGV2ZW50OworICAgIHVpbnQxNl90IGZyZXF1ZW5jeTsKK307CisKK3N0cnVjdCBzX2xtb190aW1lciB7CisgICAgdWludDMyX3QgaW50ZXJ2YWw7Cit9OworCitzdHJ1Y3Qgc19sbW9fbmF2IHsKKyAgICB1aW50MzJfdCBwZXJpb2Q7Cit9OworCisKK3N0cnVjdCBzX2xtb19lZGNmX3F1ZXVlOworCitzdHJ1Y3Qgc19sbW9fZWRjZiB7CisgICAgdWludDhfdCAgZmxhZ3M7CisgICAgdWludDhfdCAgc2xvdHRpbWU7CisgICAgdWludDhfdCAgc2lmczsKKyAgICB1aW50OF90ICBlb2ZwYWQ7CisgICAgc3RydWN0IHNfbG1vX2VkY2ZfcXVldWUgeworCSAgICB1aW50OF90ICBhaWZzOworCSAgICB1aW50OF90ICBwYWQwOworCSAgICB1aW50MTZfdCBjd21pbjsKKwkgICAgdWludDE2X3QgY3dtYXg7CisJICAgIHVpbnQxNl90IHR4b3A7CisgICAgfSBxdWV1ZXNbOF07CisgICAgdWludDhfdCAgbWFwcGluZ1s0XTsKKyAgICB1aW50MTZfdCBtYXhidXJzdDsKKyAgICB1aW50MTZfdCByb3VuZF90cmlwX2RlbGF5OworfTsKKworc3RydWN0IHNfbG1vX2tleWNhY2hlIHsKKyAgICB1aW50OF90IGVudHJ5OworICAgIHVpbnQ4X3Qga2V5aWQ7CisgICAgdWludDhfdCBhZGRyZXNzWzZdOworICAgIHVpbnQ4X3QgcGFkWzJdOworICAgIHVpbnQ4X3Qga2V5dHlwZTsKKyAgICB1aW50OF90IGtleWxlbjsKKyAgICB1aW50OF90IGtleVsyNF07Cit9OworCisKK3N0cnVjdCBzX2xtX2ludGVydmFsOworCitzdHJ1Y3Qgc19sbW9fcHNtIHsKKyAgICB1aW50MTZfdCAgICBmbGFnczsKKyAgICB1aW50MTZfdCAgICBhaWQ7CisgICAgc3RydWN0IHNfbG1faW50ZXJ2YWwgeworCSAgICB1aW50MTZfdCBpbnRlcnZhbDsKKwkgICAgdWludDE2X3QgcGVyaW9kczsKKyAgICB9IGludGVydmFsc1s0XTsKKyAgICAvKiB1aW50MTZfdCAgICBwYWQ7ICovCisgICAgdWludDhfdCAgICAgYmVhY29uX3JjcGlfc2tpcF9tYXg7CisgICAgdWludDhfdCAgICAgcmNwaV9kZWx0YV90aHJlc2hvbGQ7CisgICAgdWludDhfdCAgICAgbnI7CisgICAgdWludDhfdCAgICAgZXhjbHVkZVsxXTsKK307CisKKyNkZWZpbmUgTUNfRklMVEVSX0FERFJFU1NfTlVNICAgNAorCitzdHJ1Y3Qgc19sbW9fZ3JvdXBfYWRkcmVzc190YWJsZSB7CisgICAgdWludDE2X3QgICAgZmlsdGVyX2VuYWJsZTsKKyAgICB1aW50MTZfdCAgICBudW1fYWRkcmVzczsKKyAgICB1aW50OF90ICAgICBtYWNhZGRyX2xpc3RbTUNfRklMVEVSX0FERFJFU1NfTlVNXVs2XTsKK307CisKK3N0cnVjdCBzX2xtb190eGNhbmNlbCB7CisgICAgdWludDMyX3QgYWRkcmVzc1sxXTsKK307CisKKworc3RydWN0IHNfbG1vX3R4IHsKKyAgICB1aW50OF90ICBmbGFnczsKKyAgICB1aW50OF90ICByZXRyaWVzOworICAgIHVpbnQ4X3QgIHJjcGk7CisgICAgdWludDhfdCAgc3E7CisgICAgdWludDE2X3Qgc2VxY3RybDsKKyAgICB1aW50OF90ICBhbnRlbm5hOworICAgIHVpbnQ4X3QgIHBhZDsKK307CisKK3N0cnVjdCBzX2xtb19idXJzdCB7CisgICAgdWludDhfdCAgZmxhZ3M7CisgICAgdWludDhfdCAgcXVldWU7CisgICAgdWludDhfdCAgYmFja2xvZzsKKyAgICB1aW50OF90ICBwYWQ7CisgICAgdWludDE2X3QgZHVyYXRpb25zWzMyXTsKK307CisKK3N0cnVjdCBzX2xtb19zdGF0cyB7CisgICAgdWludDMyX3QgdmFsaWQ7CisgICAgdWludDMyX3QgZmNzOworICAgIHVpbnQzMl90IGFib3J0OworICAgIHVpbnQzMl90IHBoeWFib3J0OworICAgIHVpbnQzMl90IHJ0c19zdWNjZXNzOworICAgIHVpbnQzMl90IHJ0c19mYWlsOworICAgIHVpbnQzMl90IHRpbWVzdGFtcDsKKyAgICB1aW50MzJfdCB0aW1lX3R4OworICAgIHVpbnQzMl90IG5vaXNlZmxvb3I7CisgICAgdWludDMyX3Qgc2FtcGxlX25vaXNlWzhdOworICAgIHVpbnQzMl90IHNhbXBsZV9jY2E7CisgICAgdWludDMyX3Qgc2FtcGxlX3R4OworfTsKKworCitzdHJ1Y3Qgc19sbW9fbGVkIHsKKyAgICB1aW50MTZfdCBmbGFnczsKKyAgICB1aW50MTZfdCBtYXNrWzJdOworICAgIHVpbnQxNl90IGRlbGF5LypbMl0qLzsKK307CisKKworc3RydWN0IHNfbG1vX2J0X2JhbGFuY2VyIHsKKyAgICB1aW50MTZfdCBwcmlvX3RocmVzaDsKKyAgICB1aW50MTZfdCBhY2xfdGhyZXNoOworfTsKKworCitzdHJ1Y3Qgc19sbW9fYXJwX3RhYmxlIHsKKyAgICB1aW50MTZfdCAgICBmaWx0ZXJfZW5hYmxlOworICAgIHVpbnQzMl90ICAgIGlwYWRkcjsKK307CisKKyNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCisKKyNlbmRpZiAvKiBfX2xtYWNfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL0tjb25maWcKaW5kZXggNmU2Y2YwYi4uYzVjYmRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvS2NvbmZpZwpAQCAtOCw0ICs4LDQgQEAKIAkgIDEwR2JlIG5ldHdvcmsgY2FyZHMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZQotCSAgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHN4Zy4KKwkgIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzeGdfbmljLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvTWFrZWZpbGUKaW5kZXggZWM0OGZhYS4uOGUwNTMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL01ha2VmaWxlCkBAIC0xICsxLDMgQEAKLW9iai0kKENPTkZJR19TWEcpCSs9IHN4Zy5vCitvYmotJChDT05GSUdfU1hHKQkrPSBzeGdfbmljLm8KKworc3hnX25pYy15IDo9IHN4Zy5vIHN4Z19ldGh0b29sLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc2FoYXJhZGJnZG93bmxvYWQuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc2FoYXJhZGJnZG93bmxvYWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg4NjViYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3NhaGFyYWRiZ2Rvd25sb2FkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0ODU0ICswLDAgQEAKLSNkZWZpbmUgU0FIQVJBX1VDT0RFX1ZFUlNfU1RSSU5HCSIkUmV2aXNpb246IDEuMSAkIgotI2RlZmluZSBTQUhBUkFfVUNPREVfVkVSU19EQVRFICAJIiREYXRlOiAyMDA4LzA2LzI3IDEyOjU4OjI3ICQiCi0jZGVmaW5lIFNBSEFSQV9VQ09ERV9IT1NUSUZfSUQgIAkzCi0KLXN0YXRpYyB1MzIgU051bVNlY3Rpb25zID0gMHgyOwotc3RhdGljIHUzMiBTU2VjdGlvblNpemVbXSA9Ci17Ci0JMHgwMDAwZTI3NCwgMHgwMDAwMDAwYywKLX07Ci0KLXN0YXRpYyB1MzIgU1NlY3Rpb25TdGFydFtdID0KLXsKLQkweDAwMDAwMDAwLCAweDAwMDAxZmZmLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgU2FoYXJhVUNvZGVbMl1bNTc5NzJdID0KLXsKLXsKLQkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDgyLCAweDRkLCAweDI5LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4YjIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweGZlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDAyLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MjMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4NDAsIDB4MmIsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDI1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MjksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDFlLCAweDgwLCAweGU5LCAweDlhLAotCTB4MDAsIDB4MDAsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZiwgMHg4MCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDJlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDBmLCAweDgwLCAweDI4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGYsIDB4ODAsIDB4MjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDQwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg4MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDIsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHg0MCwgMHgwMiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDgwLCAweDAyLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHgwMCwgMHgwMywgMHg5MiwKLQkweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBmLCAweDQwLCAweDAzLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4ODAsIDB4MDMsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwZiwgMHhjMCwgMHgwMywgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDVmLCAweDNmLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ZmYsIDB4ZmMsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxMiwgMHg4MCwgMHhmZCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4OGEsIDB4MTEsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ZmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxMiwgMHg4MCwgMHhmZCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAzLCAweGMwLCAweDAxLCAweDMyLAotCTB4MzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODQsIDB4ODIsIDB4NGQsIDB4MjgsIDB4MWEsCi0JMHgwMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHg1ZiwgMHgwYSwgMHhmNiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDRiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg0OSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwZSwgMHg4MCwgMHgxOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQyLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGMwLCAweDIwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg0MCwgMHgyMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDdlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDg1LCAweDIxLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NGIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MDIsIDB4YzAsIDB4MjIsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg0MywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDQwLCAweDE4LCAweDlkLAotCTB4MDAsIDB4MDAsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHgwMCwgMHgwMCwgMHg0OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweDAwLCAweDkwLCAweDcyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4MDAsIDB4ZTksIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3YywgMHgxZSwgMHhjMCwgMHhlNywgMHg5YSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDEzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4YjgsIDB4MDEsIDB4MDAsIDB4OTQsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweGIyLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTcsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg2OSwgMHgwNSwgMHgwMCwgMHgxMCwgMHgwMSwgMHhmOCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBhLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDAwLCAweGIyLAotCTB4MjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHgxOCwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweDAxLCAweDAwLCAweDJiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NTcsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4ODEsIDB4ZmMsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyYiwgMHhiYywKLQkweDAyLCAweDAwLCAweDU3LCAweDAwLCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4NWEsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4YjAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDVjLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDRhLCAweGQwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweGZhLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDU0LCAweDAwLCAweDAzLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDQwLCAweDE4LCAweGJkLAotCTB4MDgsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTMsIDB4NDAsIDB4MDEsIDB4OTksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHgwMCwgMHgxNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDY3LCAweDAwLCAweDAzLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDgwLCAweGJkLAotCTB4MDAsIDB4MDAsIDB4NzYsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHgzOSwKLQkweDc2LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NmIsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4MDgsIDB4ODAsIDB4MjIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2NSwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4NSwgMHg4MCwgMHhiYywKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAotCTB4NjMsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg2OCwgMHg4YiwgMHg4MCwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGI4LCAweGZmLCAweDg1LCAweDMwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MjEsIDB4ZmYsIDB4MzgsCi0JMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NywgMHg0ZCwgMHg4MCwgMHgzYSwKLQkweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDBkLCAweDgwLCAweDNhLAotCTB4MDAsIDB4YzQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1NCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDEyLCAweDgwLCAweDJkLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4NDgsIDB4NDEsIDB4ODAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHg4NiwgMHg5OCwgMHg2NywgMHhjMCwgMHg4MiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDYzLCAweDAwLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NjIsIDB4OGIsIDB4ODAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDA4LCAweDgwLCAweDcwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4N2MsIDB4MDAsIDB4OTAsIDB4OTksIDB4ODYsIDB4MmMsIDB4MjgsIDB4ZGUsIDB4ODIsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgxOCwgMHhjMCwgMHg4MiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDA4LCAweGM1LCAweDgyLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzUsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg2OCwgMHg4YiwgMHg4MCwgMHg5NCwKLQkweDA4LCAweDAwLCAweDgxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDQwLCAweDAxLCAweDk5LAotCTB4MDgsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MGMsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NTMsIDB4NDAsIDB4MDEsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwNSwgMHg4MCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4M2QsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4MCwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHgwMCwgMHg4MCwgMHhkNywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDYyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4M2EsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHgzYSwgMHg4MCwgMHhiYywKLQkweDAwLCAweDkwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDBkLCAweDgwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAyLCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDBkLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDIsIDB4YTQsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOCwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDQsIDB4MDgsIDB4ODAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5NiwgMHgwMCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg1YywgMHgwOCwgMHgwMCwgMHg3MiwgMHhiMiwKLQkweDg3LCAweDAwLCAweDk1LCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDg1LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZDgsIDB4YzEsIDB4ODIsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhhNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg4OCwgMHhjMSwgMHg4MiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDllLCAweDAwLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDdkLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDUsIDB4ODAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHgwNSwgMHg4MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDFmLCAweGMwLCAweGY1LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg0MywgMHg2MCwgMHgzZCwgMHhiMywKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAotCTB4OWEsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwZiwgMHg5NywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4NSwgMHhiMCwKLQkweDEwLCAweDAwLCAweGE1LCAweDAwLCAweDg3LCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDE2LCAweGI4LAotCTB4MDEsIDB4MDAsIDB4YTUsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4OTcsIDB4YmMsCi0JMHg4NywgMHgwMCwgMHhhZiwgMHgwMCwgMHg4NywgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHhjZCwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweGE0LCAweDAwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZDgsIDB4YzEsIDB4ODIsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhhNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg4OCwgMHhjMSwgMHg4MiwgMHg5NCwKLQkweDAwLCAweDAwLCAweGFmLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMwLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4OTgsIDB4YzEsIDB4ODIsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhhZCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHhjMSwgMHg4MiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGFmLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweGZjLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4YTgsIDB4NDIsIDB4M2QsIDB4NzIsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgxOCwgMHg5OSwgMHhiMSwgMHhmMiwgMHhjMCwgMHg3YywgMHgzMCwKLQkweDAwLCAweDAwLCAweGQ2LCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjMSwgMHg4MiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGE5LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweGZjLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHg4MCwgMHgwMCwgMHg4MCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhjMiwgMHhjZCwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweGM2LCAweDAwLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4Y2QsIDB4ODUsIDB4MzAsCi0JMHg4MCwgMHgwMCwgMHhjNiwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKLQkweGEwLCAweDAwLCAweGM2LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YmQsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODAsIDB4ZmMsIDB4YjYsCi0JMHg4NywgMHgwMCwgMHhiZCwgMHgwMCwgMHg4NywgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHhjZCwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweGI5LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YmQsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhiZCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDYxLCAweDE2LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhiOCwgMHhjMSwgMHg4MiwgMHg5NCwKLQkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDUyLCAweDgwLCAweGZjLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzQsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGM0LCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NzksIDB4ZTEsIDB4MTYsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweGQ2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGM4LCAweGMxLCAweDgyLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDgsIDB4MDAsIDB4MDQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhhOCwgMHhjMSwgMHg4MiwgMHg5NCwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDE3LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4ZDYsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhkNiwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAwLCAweDA4LCAweDg5LCAweDhkLCAweDcyLCAweDMwLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDAsIDB4YTksIDB4ZGMsIDB4MTcsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgyMiwgMHgwMCwgMHg5MCwgMHgzNywKLQkweDAwLCAweDAwLCAweGQ2LCAweDAwLCAweDgwLCAweDAwLCAweDg2LCAweDgwLCAweDIyLCAweDI0LCAweDdjLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDUsIDB4ODAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDUsIDB4ODAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHgwNSwgMHg4MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NDMsIDB4NjAsIDB4M2QsIDB4YjMsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKLQkweGQyLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg1OSwgMHgwMCwgMHg4MCwgMHhkNywKLQkweDAwLCAweDAwLCAweGRkLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDYwLCAweDA4LCAweDQwLCAweDIzLCAweGIyLAotCTB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4MCwgMHhkMiwKLQkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwOCwgMHgwMCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweGMwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4ODAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGU0LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCi0JMHhlMCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweGMwLCAweGY0LCAweDAwLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHhjMCwgMHhmNSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDUsIDB4ODAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDUsIDB4ODAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2OCwgMHgwMiwgMHgwNSwgMHg4MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNiwgMHgwMCwgMHgwMCwgMHgyOSwgMHhjMSwgMHg3MiwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5NywgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDE3LCAweDIwLCAweDkwLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4YzEsIDB4ODIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg1NywgMHgwMCwgMHg4MCwgMHg5NywKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweGEwLCAweDA0LCAweDM5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHgwNSwgMHg4MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDUsIDB4ODAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHg4MSwgMHg4MCwgMHgzNCwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDUsIDB4OTAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHgwMCwgMHgyOCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDExLCAweDAxLCAweGYwLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NTksIDB4YzAsIDB4NmUsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMSwgMHg3OCwgMHgxOSwgMHhjMCwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRlLCAweDA0LCAweDAxLCAweGVjLCAweDA2LCAweGJkLCAweDk3LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MWUsIDB4NDAsIDB4ZWYsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHgwOSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDM2LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NzcsIDB4YzAsIDB4MjksIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgxNywgMHgzZCwgMHg5MCwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweGY0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDgzLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NzIsIDB4MDAsIDB4MmIsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgzZCwgMHgzMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweGE0LCAweDAxLCAweDgwLCAweDM4LCAweDAwLCAweDgwLCAweDIyLCAweGMwLCAweDcyLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MDEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgyYywgMHgwMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MWYsIDB4ODAsIDB4ZmYsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg3MiwgMHgwMCwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDg5LCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweGRjLCAweDQzLCAweDYwLCAweDNkLCAweGIzLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDMsIDB4MzksCi0JMHgyOCwgMHgwMSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweGNkLCAweDg1LCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgyNCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDcyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg3MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsIDB4YmQsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDA4LCAweDgwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4M2QsIDB4MDEsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NjIsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgzYywgMHgwMCwgMHgxNCwgMHgyOCwgMHg4MCwgMHg3MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDA2LCAweDMyLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NzcsIDB4NGEsIDB4MDksIDB4MzksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDY0LCAweDAxLCAweDA0LCAweDM4LCAweDAwLCAweDc4LCAweGQ5LCAweGM1LCAweDcyLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4NDEsIDB4MDEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTcsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDQzLCAweDAxLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDgwLCAweDk3LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZCwgMHhiYywKLQkweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDNjLCAweGI4LCAweDFjLCAweDE3LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MjgsIDB4YzAsIDB4ODMsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYSwgMHgwMCwgMHgyYywgMHgwOCwgMHhjMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGI4LCAweGUwLCAweDgzLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MjksIDB4MDAsIDB4MjAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweDc4LCAweGEwLCAweDgxLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZDgsIDB4ZTAsIDB4ODEsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwMSwgMHgwNiwgMHgzYSwgMHgwMCwgMHg4MCwgMHhiMiwgMHg1YywgMHg4MywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNhLCAweDAwLCAweDAwLCAweDg5LCAweGMxLCAweDcyLCAweDM3LAotCTB4MDcsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDQsIDB4NzksIDB4MGEsIDB4MDQsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MSwgMHg5MCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDU0LCAweDAxLCAweDAwLCAweDNhLCAweDAwLCAweDJjLCAweDA3LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2EsIDB4MDAsIDB4MmMsIDB4ZDcsIDB4ZTAsIDB4NzIsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NjQsIDB4ODMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhhMCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjAsIDB4ODAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg1ZSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweDEyLCAweGU0LCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHhkNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmOSwgMHg0MSwgMHg5MCwgMHhmNCwKLQkweDAwLCAweDAwLCAweDYxLCAweDAxLCAweDA0LCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NDksIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZDgsIDB4ZTAsIDB4ODYsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4NCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDQ5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MTksIDB4MDAsIDB4MjAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwNywgMHgwMCwgMHg2NiwgMHgwMSwgMHgyYiwgMHgwMSwgMHgwMCwgMHgwNCwgMHg3OSwgMHgwYSwgMHgwMiwgMHhiOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNiLCAweDAwLCAweDAwLCAweDA0LCAweDE5LCAweDQxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTcsIDB4YTAsIDB4ODEsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhhMCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDYwLCAweDgzLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjAsIDB4ODAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg3MCwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ0LCAweDEyLCAweGU0LCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NzEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHhkNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmOSwgMHg0MSwgMHg5MCwgMHhmNCwKLQkweDAwLCAweDAwLCAweDg0LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4NjQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGY5LCAweDQxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MTIsIDB4ZTQsIDB4MzgsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDQsIDB4MDksIDB4ODAsIDB4NzMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwOCwgMHg4OSwgMHg4MCwgMHg3MywgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg2LCAweDMyLAotCTB4NDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4OGMsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg3ZiwgMHgwMSwgMHgyOSwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwNywgMHhjMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDgyLCAweDAxLCAweDI4LCAweDEwLCAweDAwLCAweDhjLCAweDA3LCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg4YywgMHhmNywgMHhlMCwgMHg4MiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDgyLCAweDAxLCAweDI4LCAweDE4LCAweDAwLCAweDgwLCAweDA3LCAweDQwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ODMsIDB4MDEsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MDcsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4NCwgMHgyNywgMHhlNCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDcyLCAweDAwLCAweDg1LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4ODcsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4NDMsIDB4NjAsIDB4M2QsIDB4YjMsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKLQkweDgzLCAweDAxLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHg1MiwgMHg4MSwgMHgyYywgMHhiNCwKLQkweDAwLCAweDAwLCAweDg5LCAweDAxLCAweGYyLCAweDAxLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MDEsIDB4ZjAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MzgsIDB4ODEsIDB4ODAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgxZSwgMHg0MCwgMHhlZiwgMHgzYywKLQkweDAwLCAweDAwLCAweDkzLCAweDAxLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4M2IsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZSwgMHgwMSwgMHhiOSwgMHgwMCwgMHgwMCwgMHg3OCwgMHhjOSwgMHgzYiwgMHgzYSwgMHhiYywKLQkweDAwLCAweDAwLCAweDkyLCAweDAxLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTksIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHhlMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE5LCAweDAwLCAweDAwLCAweGYwLCAweDBlLCAweDAwLCAweDNhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhiYSwgMHg4MywgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGJkLCAweDk3LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4ZjQsIDB4YmQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHg5NywgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDBlLCAweDgwLCAweDgzLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4N2EsIDB4ZTgsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhlOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc5LCAweGMwLCAweDI5LCAweDM3LAotCTB4NjAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODksIDB4MGQsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhlOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweGU4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDc4LCAweDA4LCAweDgwLCAweDcyLCAweDMyLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4NTQsIDB4YTgsIDB4NWMsIDB4MTYsIDB4MzgsCi0JMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgyYywgMHhhOCwgMHhkYywgMHgxNiwgMHgzOCwKLQkweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDg4LCAweDRkLCAweDg1LCAweDNhLAotCTB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgxNCwgMHhhOSwgMHg5YywgMHg4NywgMHhkOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDcyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NzIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDNjLCAweDAwLCAweDE0LCAweDE4LCAweDgwLCAweDcyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YmIsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDA2LCAweDMyLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NzcsIDB4NGEsIDB4MDksIDB4MzksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDc4LCAweGMwLCAweDI5LCAweDM3LAotCTB4MDIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODgsIDB4NGQsIDB4ODYsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDA4LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzcsIDB4YTAsIDB4ODEsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxYywgMHhkOCwgMHhlMCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ZDgsIDB4NjAsIDB4ODYsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweGMwLCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZDIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MTIsIDB4ODAsIDB4MmQsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGNiLCAweDAxLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZDgsIDB4YTAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHhkOCwgMHhlMCwgMHg4NiwgMHg5YSwKLQkweDAwLCAweDAwLCAweDMyLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDA4LCAweDgwLCAweDJkLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MDEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGQ3LCAweDAxLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhlOCwgMHgwMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MjIsIDB4NDAsIDB4ODUsIDB4M2EsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0MCwgMHg4OCwgMHhjZCwgMHg3NCwgMHgzNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDI4LCAweDAwLCAweDg0LCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgxNCwgMHgwMCwgMHhlOCwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxYywgMHg4OCwgMHgwZCwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjEsIDB4ODUsIDB4M2EsCi0JMHg4MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweGQ4LCAweDYwLCAweDg2LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4ZDIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhlYSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhkOCwgMHhhMCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweGVjLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGQ4LCAweGUwLCAweDg2LCAweDlhLAotCTB4MDAsIDB4MDAsIDB4MzIsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MjIsIDB4YzAsIDB4ODIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHhiOCwgMHg2MCwgMHg4NSwgMHgzYywKLQkweDA0LCAweDAwLCAweGYyLCAweDAxLCAweDgxLCAweDAwLCAweDAwLCAweDYwLCAweDg4LCAweGNkLCAweDc0LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MjgsIDB4ZjgsIDB4YTAsIDB4NzUsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHhmMywgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHg3NCwgMHgwOCwgMHg4MCwgMHg3NSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDI4LCAweGY4LCAweGEwLCAweDc1LCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4YTEsIDB4ODIsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhmMiwgMHg2MCwgMHgyYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDQ4LCAweDA4LCAweDAwLCAweDc1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4N2MsIDB4MDgsIDB4ODAsIDB4NzUsIDB4MzIsCi0JMHgwOSwgMHgwMCwgMHhmOSwgMHgwMSwgMHgwNCwgMHgxYSwgMHgwMCwgMHg3MCwgMHg4OCwgMHhjZCwgMHg3NCwgMHhiMCwKLQkweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDRjLCAweDg3LCAweGNkLCAweDc0LCAweDMxLAotCTB4N2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjQsIDB4ODgsIDB4NGQsIDB4ODYsIDB4MzEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgyOCwgMHg0MCwgMHg4NiwgMHgzYSwKLQkweDIzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4ODIsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwMCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAxLCAweDAyLCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweDA4LCAweDgwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDIsIDB4ODAsIDB4MmMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgyNywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4Y2QsIDB4ODUsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHhlOCwgMHhhMSwgMHg4MiwgMHgzZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDIyLCAweGMwLCAweDgyLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDgsIDB4ZTEsIDB4ODEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwYiwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHgwMCwgMHg4NiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDU4LCAweDA3LCAweDQwLCAweDg3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4OGYsIDB4MDEsIDB4MDAsIDB4NzQsIDB4MTgsIDB4NDAsIDB4ODcsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDBkLCAweDAyLCAweDAwLCAweDA0LCAweDAwLCAweDU4LCAweGY3LCAweGEwLCAweDg2LCAweDlhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjksIDB4YTAsIDB4ODYsIDB4M2EsCi0JMHgyOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg1OCwgMHg4NywgMHg4ZCwgMHg5NywgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDIyLCAweDQwLCAweDg1LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4NTAsIDB4MDcsIDB4ODAsIDB4ODQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgxMSwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHhhMCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDRjLCAweGM3LCAweGUxLCAweDc0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4NzgsIDB4YTAsIDB4ODQsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgxNCwgMHgwMiwgMHg5MCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhmOSwgMHhhMSwgMHg4NiwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDE5LCAweDgwLCAweDk3LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4NTgsIDB4MDcsIDB4ODAsIDB4OTcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHg1OCwgMHhhMSwgMHg4NiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDMyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjcsIDB4NjAsIDB4ODUsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDg2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4MDIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NTcsIDB4MjEsIDB4ODAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg1NywgMHg2MSwgMHg4NiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDFmLCAweDAyLCAweDEyLCAweDAwLCAweDAwLCAweDRjLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHhjMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MTksIDB4MDAsIDB4MjAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgyMSwgMHg4MCwgMHgzYSwKLQkweDA3LCAweDAwLCAweDI3LCAweDAyLCAweDJiLCAweDAxLCAweDAwLCAweDA0LCAweDc5LCAweDBhLCAweDAyLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2IsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDEsIDB4OTAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NywgMHhhMCwgMHg4MSwgMHgzZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGQ4LCAweGEwLCAweDgyLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4NDEsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MWMsIDB4ZDgsIDB4ZTAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg2MCwgMHg4MywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MzIsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDNmLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4M2QsIDB4MDIsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzYSwgMHgwMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHgzNSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4NjcsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzNSwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4YzAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgzMiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwOCwgMHg4MCwgMHgyZCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDI1LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ZjksIDB4NDEsIDB4OTAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDQzLCAweDAyLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg0YiwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxOCwgMHgwMCwgMHg4OCwgMHhiYywKLQkweDAwLCAweDAwLCAweDQzLCAweDAyLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDRmLCAweDAyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDAwLCAweDg2LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg4OSwgMHg4MCwgMHg3MSwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4ODAsIDB4NzEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1MywgMHgwMiwgMHg5MCwgMHgxOSwgMHgwMCwgMHgwNCwgMHhlOSwgMHg1YywgMHg5MCwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDE5LCAweDQwLCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDcsIDB4ODAsIDB4ODYsIDB4MzIsCi0JMHg0MSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHg4YywgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4OGMsIDB4MDcsIDB4NDAsIDB4ODUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4MCwgMHgwNywgMHg0NSwgMHg5MCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDVhLCAweDAyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDAwLCAweDg2LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NWIsIDB4MDIsIDB4MDAsIDB4MTIsIDB4MDAsIDB4ODQsIDB4MjcsIDB4ZTQsIDB4ODIsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMCwgMHg4NCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDVmLCAweDAyLCAweDI3LCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NWYsIDB4MDIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NDIsIDB4NjAsIDB4M2QsIDB4YjMsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMywgMHgzOSwKLQkweDViLCAweDAyLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1YywgMHg1MiwgMHg4MSwgMHgyYywgMHhiNCwKLQkweDAwLCAweDAwLCAweDY0LCAweDAyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDY3LCAweDAyLCAweDA0LCAweDAxLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MzIsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDgsIDB4ODAsIDB4MmQsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhmZCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGZkLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDZjLCAweGQ4LCAweGUwLCAweDg2LCAweDlhLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzYsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgxOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQwLCAweDgxLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDUsIDB4ODEsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDcyLCAweDAyLCAweDA0LCAweDA2LCAweDAxLCAweDgwLCAweDAyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4ZTAsIDB4NmUsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwNywgMHgwMSwgMHhlYywgMHg1NiwgMHhlMCwgMHg2ZSwgMHgzYSwKLQkweDA4LCAweGMwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweGNkLCAweDM5LCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMywgMHhiOCwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHhiZCwKLQkweDc3LCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDgyLCAweDBkLCAweDkwLCAweDNhLAotCTB4MmUsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDJiLCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MzcsIDB4MDAsIDB4OTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgzOCwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg4NiwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg1MiwgMHg0MCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDYyLCAweDQwLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDUsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDA4LCAweGMwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweGNkLCAweDM5LCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MTQsIDB4NTksIDB4YzAsIDB4NmUsIDB4ZDcsCi0JMHgwMiwgMHgwMCwgMHg4ZiwgMHgwMiwgMHgwNCwgMHhiOCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKLQkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGI5LCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMSwgMHhlYywgMHgwNiwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDkxLCAweDAyLCAweGI1LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTUsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MzYsIDB4MGIsIDB4NmEsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgwMSwgMHhlOCwgMHgwNiwgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4ODUsIDB4MmYsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0MCwgMHg4MSwgMHhkMiwKLQkweDAwLCAweDAwLCAweGExLCAweDAyLCAweDgwLCAweDAwLCAweDgwLCAweDgwLCAweDMyLCAweDBiLCAweDZhLCAweGI2LAotCTB4MTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHhiOCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHg2ZSwgMHhkMiwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMiwgMHgwNCwgMHgwMiwgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAyLCAweDAxLCAweGVjLCAweDU2LCAweGUwLCAweDZlLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDMsIDB4MDEsIDB4ZWMsIDB4NTYsIDB4ZTAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweGMwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgyMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzOSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHhiYywKLQkweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZDIsCi0JMHgxNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDIwLCAweDAxLCAweDE0LCAweDA5LCAweDAwLCAweDZlLCAweGQyLAotCTB4MWIsIDB4MDAsIDB4YWYsIDB4MDIsIDB4MzgsIDB4MDEsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgxNCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhkMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NzksIDB4MGIsIDB4MTQsIDB4MzgsCi0JMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgxNCwgMHhhOSwgMHg1YiwgMHg5MSwgMHhkOSwKLQkweDAwLCAweDAwLCAweGJlLCAweDAyLCAweDM4LCAweDI4LCAweDAwLCAweDE4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YjYsIDB4MDIsIDB4MDQsIDB4MjEsIDB4MDEsIDB4MDgsIDB4NjksIDB4MjQsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAzLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YmEsIDB4MDIsIDB4MDIsIDB4MzAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhiOSwgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDA0LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDUsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGJkLCAweDAyLCAweDA2LCAweDAzLCAweDAxLCAweDgwLCAweDEyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MGEsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwYiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweGMxLCAweDAyLCAweDA0LCAweDIxLCAweDAxLCAweDA4LCAweDY5LCAweDI0LCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweGMzLCAweDAyLCAweDAyLCAweDMwLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDkwLCAweGJjLAotCTB4MDQsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjNSwgMHgwMiwgMHg5ZiwgMHgzMSwgMHgwMSwgMHgwYywgMHg2OSwgMHgyNCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YzksIDB4MDIsIDB4MDQsIDB4MzEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDIwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MjEsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjZCwgMHgwMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzMiwgMHhhNCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDA2LCAweDAzLCAweDAxLCAweDgwLCAweDEyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MjIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgyMywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweGNmLCAweDAyLCAweDA2LCAweDAzLCAweDAxLCAweDgwLCAweDEyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MjAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgyMSwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDBjLCAweDAwLCAweDAwLCAweGY4LCAweDYzLCAweDQwLCAweDAxLCAweGI5LAotCTB4MTAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4YzUsIDB4MDEsIDB4MDAsIDB4Y2MsIDB4MDIsIDB4MjAsIDB4MTUsIDB4OTgsCi0JMHgwOCwgMHgwMCwgMHgzOCwgMHgwMywgMHgwYywgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MywgMHg0MCwgMHgwMSwgMHhiOSwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGM1LCAweDAxLCAweDAwLCAweGNjLCAweDAyLCAweDIwLCAweDE1LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4N2UsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDUsIDB4ODAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDU5LCAweDAwLCAweDgwLCAweGQ3LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDA4LCAweDA1LCAweDgwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhmYSwgMHg4NSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGZhLCAweDg1LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZGYsIDB4MDIsIDB4MzYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwZSwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDAyLCAweDAwLCAweGE5LCAweGRiLCAweDg1LCAweDM5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDIsIDB4YTQsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMiwgMHg4YywgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDk0LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MDIsIDB4OTgsIDB4MjgsIDB4ODAsIDB4NmUsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgzOCwgMHgyMiwgMHgxNCwgMHgzNywKLQkweDAwLCAweDAwLCAweGViLCAweDAyLCAweDA0LCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MTQsIDB4MDgsIDB4ODAsIDB4NmUsIDB4MzIsCi0JMHgwNSwgMHgwMCwgMHhlZSwgMHgwMiwgMHgwMCwgMHgzMCwgMHgwMiwgMHgwMCwgMHg3OCwgMHhlMSwgMHg2ZSwgMHg5OSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4NzgsIDB4MDksIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg3NywgMHhhMSwgMHg5NywgMHgzOSwKLQkweDAwLCAweDAwLCAweGYwLCAweDAyLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDE0LCAweDEwLCAweGY0LCAweDAyLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDBkLCAweDcyLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4YzAsIDB4MDIsIDB4ZjIsCi0JMHgwZCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDA5LCAweDAwLCAweDgwLCAweDUyLCAweGJkLCAweDcyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZmIsIDB4MDIsIDB4MzMsIDB4MTUsIDB4MDAsIDB4YTQsIDB4MDIsIDB4YzAsIDB4NzIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgzMywgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhiMiwgMHgwMSwgMHg3MiwgMHhiNiwKLQkweDAxLCAweDAxLCAweDA4LCAweDBhLCAweDAwLCAweDI4LCAweDAwLCAweDgwLCAweGMyLCAweDBkLCAweDc0LCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4MGIsIDB4MzEsIDB4MDAsIDB4N2MsIDB4MDgsIDB4MDAsIDB4NzUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgzMywgMHgwMywgMHg5ZiwgMHhmMCwgMHgwMSwgMHg4MCwgMHg4MiwgMHhkYiwgMHg4NywgMHhiYywKLQkweDAwLCAweDAwLCAweGZjLCAweDAyLCAweDAwLCAweDM4LCAweDAwLCAweDg4LCAweDE4LCAweDAwLCAweDc1LCAweDljLAotCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjIsIDB4MDEsIDB4NzIsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHg0OCwgMHgwOCwgMHgwMCwgMHg3NSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDcwLCAweDA4LCAweDAwLCAweDc1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4NzQsIDB4MzgsIDB4YTIsIDB4NzUsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMSwgMHgwMywgMHg4MywgMHgxYiwgMHgwMCwgMHg3OCwgMHgwOCwgMHhjMCwgMHg3NCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGMyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4ZjIsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODAsIDB4ODcsIDB4YjYsCi0JMHgyZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDg0LCAweGQyLAotCTB4MzQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4NywgMHhkMiwKLQkweDAwLCAweDAwLCAweDE1LCAweDAzLCAweDlmLCAweDc4LCAweDAxLCAweDgwLCAweGMyLCAweDIxLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MGEsIDB4MDMsIDB4OWYsIDB4OTksIDB4MDEsIDB4NjQsIDB4ODgsIDB4MWIsIDB4ODcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgxNiwgMHgwMywgMHg5ZiwgMHg2OCwgMHgwMSwgMHg2NCwgMHg4OCwgMHg1YiwgMHg4NiwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTYsIDB4MDAsIDB4YTQsIDB4MDIsIDB4YzAsIDB4NzIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhhNCwgMHhiMiwgMHg1YiwgMHgyYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMyLCAweDAyLCAweDc4LCAweDA5LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MTcsIDB4MDMsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ZTgsIDB4YTUsIDB4NzUsIDB4YmMsCi0JMHgwZiwgMHgwMCwgMHgzMywgMHgwMywgMHgwYiwgMHgwMSwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDE1LCAweDAzLCAweDA0LCAweGExLCAweDAxLCAweDgwLCAweDgyLCAweDliLCAweDg0LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4OWYsIDB4OTgsIDB4MDEsIDB4ODAsIDB4YzIsIDB4MjEsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwNiwgMHhiMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg1YiwgMHg4NywgMHhiYywKLQkweDAwLCAweDAwLCAweDMyLCAweDAzLCAweDBiLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDIsIDB4ZDQsIDB4MDEsIDB4ODAsIDB4OTIsIDB4ZmIsIDB4NmUsIDB4YmMsCi0JMHgxNSwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDE2LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MWMsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyOCwgMHg3MiwgMHg2MSwgMHg4MCwgMHhiOSwKLQkweDAwLCAweDAwLCAweDFhLCAweDAzLCAweDA0LCAweGExLCAweDAxLCAweDgwLCAweDgyLCAweDliLCAweDg0LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MjEsIDB4MDMsIDB4MDYsIDB4YTgsIDB4MDEsIDB4ODAsIDB4ODIsIDB4NWIsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgxZSwgMHgwMywgMHgwNCwgMHhhOSwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDMxLCAweDAzLCAweDA0LCAweGE5LCAweDAxLCAweDgwLCAweDgyLCAweDliLCAweDg0LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MzEsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4ODAsIDB4YmMsCi0JMHgxMywgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDMxLCAweDAzLCAweDlmLCAweGEwLCAweDAxLCAweDc4LCAweDI5LCAweDIxLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MzEsIDB4MDMsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4YTAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgxNSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDJjLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgyNywgMHgwMywgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg2MCwgMHg4MCwgMHhiYywKLQkweDA2LCAweDAwLCAweDlkLCAweDA1LCAweDJjLCAweDAxLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweGIyLAotCTB4MDAsIDB4YzAsIDB4MjksIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4YjAsCi0JMHgwNiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDI5LCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDYwLCAweDgwLCAweGJjLAotCTB4MDksIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgyYiwgMHgwMywgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDA3LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDgsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgzOCwgMHgwMSwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDJmLCAweDAzLCAweDAyLCAweDBjLCAweDAyLCAweDgwLCAweGEyLCAweDViLCAweDgwLCAweGJjLAotCTB4MWYsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgxZSwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDM0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDQwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDM0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAxLCAweDkyLAotCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg5MiwgMHhkMiwKLQkweDBkLCAweDAwLCAweDU4LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgxMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgyYSwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgyMCwgMHgxNSwgMHhiOCwKLQkweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MWQsIDB4MDAsIDB4NDksIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4ZTAsIDB4MDAsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDFkLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgxNCwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweGE4LCAweDA1LCAweDI4LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4MmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4NjAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDM1LCAweDAwLCAweDU0LCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHg4MSwgMHhkMiwKLQkweDAwLCAweDAwLCAweGRjLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MmIsIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg5MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NWEsIDB4MDMsIDB4MWQsIDB4NDEsIDB4MDIsIDB4NWMsIDB4ZjgsIDB4MDEsIDB4NjgsIDB4YjQsCi0JMHg0MSwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHg5MSwKLQkweDM1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4NTksIDB4YzAsIDB4ODUsIDB4ZDcsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgyYywgMHgwMiwgMHgwMCwgMHhhOSwgMHhkYiwgMHg4NSwgMHgzOSwKLQkweDAwLCAweDAwLCAweGUxLCAweDAyLCAweDEyLCAweDAxLCAweDAwLCAweDU0LCAweDAyLCAweGE0LCAweDM4LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg2NCwgMHgwMywgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDYwLCAweDExLCAweDAwLCAweDc4LCAweDAxLCAweDYwLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MmYsIDB4MDAsIDB4OTMsIDB4MDUsIDB4ZDcsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg2NSwgMHgwMywgMHgwNiwgMHhhOSwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDZkLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDQsIDB4YTgsIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMiwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHgzZSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAxLCAweDA4LCAweDg5LCAweDliLCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDMsIDB4OWYsIDB4ODgsIDB4MDEsIDB4MDgsIDB4ODksIDB4OWIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMiwgMHgwNCwgMHhmOSwgMHhiYSwgMHg2ZSwgMHgzNywKLQkweDAwLCAweDAwLCAweDZjLCAweDAzLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweGE0LCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MTksIDB4ODAsIDB4OTAsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHg3MCwgMHgwMywgMHgwMiwgMHgwMSwgMHgwMiwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5MCwgMHhiYywKLQkweDMwLCAweDAwLCAweDkzLCAweDA1LCAweGQ3LCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NzAsIDB4MDMsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgxMiwgMHg3MCwgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHhiMCwKLQkweDMxLCAweDAwLCAweDkzLCAweDA1LCAweGQ3LCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDA4LCAweGMwLCAweDc0LCAweDAyLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweGNkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4ODEsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHgyYywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4NjAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHg4MCwgMHgwMSwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZGMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgyYiwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDkzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDg5LCAweDRkLCAweDgxLCAweGQ3LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4MmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODAsIDB4MzIsIDB4MGIsIDB4NmEsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDAzLCAweDA0LCAweDIwLCAweDAxLCAweDgwLCAweDUyLCAweDIwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDksIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgyNSwgMHgwMCwgMHg5ZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDI0LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MWUsIDB4ODAsIDB4ZWQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YywgMHgwMywgMHhiNywgMHgwMCwgMHgwMCwgMHhkOCwgMHgwZSwgMHhjMCwgMHhlZCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhmLCAweDAzLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDNiLCAweGVlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MWUsIDB4MDAsIDB4ZWUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNywgMHgwMCwgMHgwMCwgMHhkMCwgMHgwZSwgMHgwMCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDkzLCAweDAzLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDgwLCAweGZjLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OTMsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4ZmMsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg5MywgMHgwMywgMHgwNCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgxZSwgMHgwMCwgMHhlYiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc0LCAweDg2LCAweGNjLCAweDAyLCAweDgwLCAweDZjLCAweDMyLAotCTB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5NywgMHgwMywgMHg4MCwgMHgwMSwgMHg4MCwgMHg4MCwgMHgzMiwgMHgwYiwgMHg2YSwgMHhiNiwKLQkweDM1LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OTksIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4YzUsIDB4MmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg5YSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDEyLCAweGMwLCAweDJjLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OTUsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NCwgMHg4NiwgMHhjOCwgMHgwNiwgMHhjMCwgMHgyYywgMHgzMiwKLQkweDA4LCAweDAwLCAweGIwLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGMzLCAweDQwLCAweDAxLCAweDk5LAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4MDMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg1NSwgMHgwMSwgMHg4MCwgMHhiMiwgMHgxYiwgMHgyYiwgMHhiYywKLQkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDA5LCAweDAwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhMywgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDU1LCAweDAxLCAweDgwLCAweGIyLCAweDFiLCAweDJiLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHhhZCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhhZCwgMHgwMywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiYywKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweDM5LAotCTB4YjAsIDB4MDMsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAyLCAweDk5LAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHhhYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDA5LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDA2LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDA3LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGMyLCAweDAzLCAweDhiLCAweDAxLCAweDAwLCAweGEwLCAweDEyLCAweDAwLCAweDJhLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGM1LCAweDAzLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJhLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRjLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YzgsIDB4MDMsIDB4ODUsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MTIsIDB4YzAsIDB4MjksIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDBiLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxMywgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwNiwgMHgzMiwKLQkweDBmLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MTQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHhiNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDE1LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MWQsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwNCwgMHgzMiwKLQkweDFlLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4NzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxZiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDAwLCAweDMyLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHhlMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDE3LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxYiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MWMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDE2LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxYSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDIwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MTksIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDBiLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweGZlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDAyLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHg2NCwgMHgwMiwgMHgzOSwKLQkweDAwLCAweDAwLCAweGZiLCAweDAzLCAweDg1LCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDkwLCAweGJhLAotCTB4MjUsIDB4MjYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZjMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGMzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDkzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ODMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg0MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDMzLCAweDQwLCAweDAxLCAweDM5LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAzLCAweDgwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4M2YsIDB4ODAsIDB4ZmMsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDAwLCAweDMyLAotCTB4NGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMywgMHg0MCwgMHgzOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweDAxLCAweDMwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MTMsIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ZDAsIDB4MTIsIDB4MDAsIDB4MmQsIDB4YmMsCi0JMHg1MCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAzLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAxLCAweGU0LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGUsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDEyLCAweDAwLCAweDJkLCAweDNhLAotCTB4NGMsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4MmQsIDB4YmMsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHhhZSwgMHgwZCwgMHgwMiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODYsIDB4Y2MsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YSwgMHg4NiwgMHhjYywgMHgwNywgMHg4MCwgMHgwMCwgMHgzYSwKLQkweDAwLCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDgwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4NDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOSwgMHg0MCwgMHg5MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDI2LCAweDA0LCAweDEyLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGMwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4OTcsIDB4YjYsCi0JMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhlOSwgMHhlNSwgMHgwMCwgMHhiOCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDQ1LCAweDkwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MjQsIDB4MDQsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4ODIsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDAzLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MmMsIDB4MDQsIDB4OGUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MjgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgyNiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKLQkweDBlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDBlLCAweDAwLCAweDM2LCAweDMyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YjksIDB4MDUsIDB4MzYsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHg3MywgMHg4MCwgMHg5NywgMHgzNCwKLQkweDA5LCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDczLCAweDgwLCAweDk3LCAweDM0LAotCTB4MDksIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHhmZSwgMHhjYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDBhLCAweDAwLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4M2IsIDB4MDQsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgzOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDNiLCAweDA0LCAweDEyLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4M2UsIDB4MDQsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgzZCwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKLQkweDAyLCAweDAwLCAweDM5LCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweDc4LCAweDA5LCAweDI0LCAweDE3LCAweGI4LAotCTB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjQsIDB4MTYsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHgzOSwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHg5NywgMHhiYywKLQkweGZlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4ZmUsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDMsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDQ0LCAweDA0LCAweDEyLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NDcsIDB4MDQsIDB4OWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg0NiwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDAyLCAweDAwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDA2LCAweDAwLCAweDU5LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDA5LCAweDY0LCAweDE2LCAweDk4LAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg5NywgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDMzLCAweDAwLCAweDc0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MTEsIDB4MDAsIDB4NzQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgzOSwgMHgwMCwgMHg3NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4N2YsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDgsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3ZiwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDVhLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDgyLCAweGNkLCAweDkwLCAweDNhLAotCTB4MGQsIDB4MDAsIDB4N2MsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4ZTQsIDB4MTYsIDB4OTgsCi0JMHgwZCwgMHgwMCwgMHg4ZSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHg5OCwKLQkweDBkLCAweDAwLCAweDk3LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweGU0LCAweDE2LCAweDk4LAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHg5MCwgMHg5ZCwKLQkweDAwLCAweDAwLCAweGIzLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YmQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhjNywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGQxLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDkwLCAweDlkLAotCTB4MDAsIDB4MDAsIDB4ZDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHg5MCwgMHg5ZCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhmMywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweGQ4LCAweDAwLCAweGY1LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGRjLCAweDBmLCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGVkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDM5LCAweDQwLCAweDkwLCAweDk3LAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhlZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDBlLCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4NSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYywgMHgwZSwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDEwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDgsIDB4MDAsIDB4MTUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MWYsIDB4MjQsIDB4MTYsIDB4OTgsCi0JMHgwMCwgMHgwMCwgMHgyNywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDBkLCAweDAwLCAweDMyLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweGU0LCAweDE2LCAweDk4LAotCTB4MDAsIDB4MDAsIDB4MzMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwYywgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDg5LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweDQ1LCAweDkwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgzZiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHgwMCwgMHhiMCwKLQkweDAyLCAweDAwLCAweDgwLCAweDA0LCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4NmIsIDB4NDEsIDB4OTAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwMywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhiMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweGIwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgyMiwgMHgwMCwgMHgyYiwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweDAxLCAweDAwLCAweDM0LAotCTB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4MmEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhiMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGQwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHgzOSwKLQkweGIwLCAweDAzLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDgsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4OTksCi0JMHgwMCwgMHgwMCwgMHg5MSwgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCi0JMHgwMiwgMHgwMCwgMHg5MSwgMHgwNCwgMHhiMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHhiOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBiLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGQsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgzYiwgMHg0MCwgMHhiMCwgMHgzMSwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDJiLCAweGJjLAotCTB4ZjEsIDB4MGYsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MGUsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDAyLCAweDAwLCAweDk4LCAweDA0LCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4OWIsIDB4MDQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4YjAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgzYiwgMHg0MCwgMHhiMCwgMHgzMywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweGNkLCAweDRhLCAweGQwLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgxYiwgMHhlNCwgMHhiMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGIwLCAweDAzLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4OTAsIDB4YjIsCi0JMHgxZiwgMHgwMCwgMHhiMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMSwgMHg0MCwgMHgwMCwgMHg5OSwKLQkweDAwLCAweDAwLCAweGEwLCAweDA0LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweGY4LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHhmYywgMHhiNiwKLQkweDAwLCAweDAwLCAweGE3LCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwOSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDQwLCAweDkwLCAweDMyLAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwZiwgMHg4MSwgMHhmYywgMHg5NCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDcyLCAweDQyLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4NDIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHg2NCwgMHg5MCwgMHhiNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDczLCAweDAwLCAweDkwLCAweDNjLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGI2LCAweDA0LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDQyLCAweDg1LCAweDkwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDBmLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDBmLCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODUsIDB4OTAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg4MCwgMHg5MCwgMHgzMiwKLQkweDAzLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MGUsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDA0LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGUsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjYSwgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4NSwgMHg5MCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDgwLCAweDkwLCAweDMyLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDA2LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MGYsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwZiwgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDQyLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjQsIDB4OTAsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHhkNSwgMHgwNCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0MiwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4MDAsIDB4OTAsIDB4MzIsCi0JMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDFmLCAweDQwLCAweDkwLCAweDljLAotCTB4MDAsIDB4MDAsIDB4ZGIsIDB4MDQsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweGZkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODUsIDB4OTAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHg4MCwgMHg5MCwgMHgzMiwKLQkweDA3LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MDMsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NDIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHg2NCwgMHg5MCwgMHhiNSwKLQkweDAwLCAweDAwLCAweGU1LCAweDA0LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDQyLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHg5MCwgMHgzMiwKLQkweDExLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MWYsIDB4NDAsIDB4OTAsIDB4OWMsCi0JMHgwMCwgMHgwMCwgMHhlYiwgMHgwNCwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4YzAsIDB4ZmQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwZSwgMHg4MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDBlLCAweDQwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4OTAsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwZiwgMHhhNCwgMHg5NywgMHg5YSwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDBlLCAweDgwLCAweGVlLCAweDlkLAotCTB4MDAsIDB4MDAsIDB4ZjIsIDB4MDQsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDFlLCAweDQwLCAweDkwLCAweDljLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4OTAsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4NiwgMHhjMCwgMHgwNywgMHg0MCwgMHg5MCwgMHg5MiwKLQkweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweGU0LCAweDE2LCAweDM4LAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhmYSwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgyNCwgMHhmNiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDNmLCAweDgwLCAweGZjLCAweDM0LAotCTB4NDAsIDB4ODAsIDB4ZmMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDc5LCAweDAxLCAweDAwLCAweDM0LAotCTB4MDIsIDB4MDAsIDB4ZmMsIDB4MDQsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhhYiwgMHhlNCwgMHhiMCwgMHgzMiwKLQkweDFmLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDExLCAweDQwLCAweDAwLCAweDk5LAotCTB4ZWEsIDB4MDUsIDB4MDUsIDB4MDUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NGQsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYywgMHgwZiwgMHgwMCwgMHgxNSwgMHgzMiwKLQkweDAwLCAweGZlLCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAotCTB4ZjAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHg5OCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDBiLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDRmLCAweDgwLCAweGZjLCAweDk1LAotCTB4MzYsIDB4MjMsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NGQsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlYywgMHgwZiwgMHg4MCwgMHgxNCwgMHgzMiwKLQkweDAwLCAweGY4LCAweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAotCTB4YzAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHg5OCwgMHgyNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDRmLCAweDgwLCAweGZjLCAweDM0LAotCTB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4OGYsIDB4NGQsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg2MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDdhLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YTksIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDEyLCAweDA1LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4NmYsIDB4ODAsIDB4ZmMsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgxNCwgMHgwNSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHg5MCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDVmLCAweDgwLCAweGZjLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgxNywgMHgwNSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg0MCwgMHg5MCwgMHhiMCwKLQkweDgwLCAweDAxLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDhmLCAweDhkLCAweGZjLCAweDkxLAotCTB4MDAsIDB4MDAsIDB4MTksIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4NDAsIDB4OTAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg3ZiwgMHg4MCwgMHhmYywgMHg5NSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDdmLCAweDgwLCAweGZjLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MWMsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4OTAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgxZCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4ZiwgMHg4MCwgMHhmYywgMHg5NSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDhmLCAweDgwLCAweGZjLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjIsIDB4NDAsIDB4OTAsIDB4YjYsCi0JMHhmMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4YywgMHgwZSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDIyLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDFmLCAweDgxLCAweGZjLCAweDk1LAotCTB4MGUsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MGUsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgxZiwgMHg4MSwgMHhmYywgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDAyLCAweGY1LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4ZjUsIDB4YmQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHgyNSwgMHhmNSwgMHhiNSwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRjLCAweDFmLCAweDI0LCAweDE2LCAweDM4LAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MWYsIDB4MDAsIDB4ZjUsIDB4OWMsCi0JMHg4MCwgMHgwMSwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHhmYywgMHhiMCwKLQkweDAwLCAweDAwLCAweDJiLCAweDA1LCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHhjMCwgMHhmZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweGY1LCAweDNhLAotCTB4OGMsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDhkLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZWMsIDB4MDMsIDB4NDAsIDB4OTAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDM0LCAweDA1LCAweGIyLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4ZTQsIDB4NmUsIDB4M2EsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MywgMHg0MCwgMHgwMSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDY5LCAweDA1LCAweDE3LCAweDEwLCAweDAxLCAweGY4LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDYsIDB4MDAsIDB4M2YsIDB4MDUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjAsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHgzMiwKLQkweDAwLCAweGMwLCAweGQzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDM2LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4NiwgMHhjOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg0NiwgMHgwNSwgMHgwNCwgMHgxOSwgMHg4NiwgMHg4MCwgMHgwMiwgMHg4MCwgMHg2YywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMSwgMHgwOCwgMHgwMCwgMHgwNCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDE1LCAweDg2LCAweDJjLCAweDA5LCAweGMwLCAweDZjLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NGMsIDB4MDUsIDB4MjIsIDB4MWQsIDB4ODYsIDB4YzgsIDB4MDYsIDB4YzAsIDB4OTIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgwNSwgMHgwMCwgMHgxOCwgMHg4NiwgMHhjOCwgMHgwNiwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMiwgMHg0OCwgMHgwMCwgMHgwNCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDE2LCAweDg2LCAweDJjLCAweDA5LCAweGMwLCAweDZjLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NGMsIDB4MDUsIDB4MjEsIDB4MWQsIDB4ODYsIDB4YzgsIDB4MDYsIDB4YzAsIDB4OTIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg4NiwgMHhjOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDgwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NTQsIDB4MDUsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhkMywgMHgwZSwgMHgwMCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhkYywKLQkweDAwLCAweDAwLCAweDUyLCAweDA1LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NTQsIDB4MDUsIDB4ODEsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODAsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg1NCwgMHgwNSwgMHgwMCwgMHgxOCwgMHg4NiwgMHhjOCwgMHgwNiwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDU0LCAweDA1LCAweDgyLCAweDAwLCAweDAwLCAweGY4LCAweDEyLCAweDgwLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgwYSwgMHgzMiwKLQkweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHg2OSwgMHgwNSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOSwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDg2LCAweDA0LCAweDE5LCAweDgwLCAweDZjLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4MGMsIDB4ZjcsIDB4N2YsIDB4OTAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweDM0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHg4NiwgMHg4MCwgMHg3MiwgMHg4MiwgMHg2YywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDg2LCAweGE4LCAweDQyLCAweDgwLCAweDZjLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4NzgsIDB4MDUsIDB4MTIsIDB4MDAsIDB4NzAsIDB4MzgsIDB4MDIsIDB4MDAsIDB4N2MsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwYiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweGUwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgzYywgMHgwMiwgMHgwMCwgMHg3ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDcwLCAweDMwLCAweDAyLCAweDAwLCAweDdlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzAsIDB4MzQsIDB4MDIsIDB4MDAsIDB4N2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2YiwgMHgwNSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHhiMiwgMHg4MiwgMHgyYSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE3LCAweDAwLCAweDAwLCAweGQwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDYsIDB4MDAsIDB4M2YsIDB4MDUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmYsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgzOSwgMHgwNSwgMHgwNCwgMHgwMywgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDJmLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4YTIsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3YSwgMHgwNSwgMHgwNCwgMHgwMywgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDgzLCAweDA1LCAweDAwLCAweDEwLCAweDg2LCAweGM4LCAweDQ2LCAweDgwLCAweDJhLCAweDk2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4ODYsIDB4YzgsIDB4NDYsIDB4ODAsIDB4MmEsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwNSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAzLCAweDAwLCAweDgwLCAweDA1LCAweDIyLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MDUsIDB4MDAsIDB4MTgsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4MywgMHgwNSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMyLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDAsIDB4YzAsIDB4ZDMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4MzYsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHgzYywKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4MmYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHhhMiwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDA1LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweGMwLCAweGVkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MGUsIDB4ODAsIDB4MDIsIDB4MzIsCi0JMHg0MCwgMHg3ZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgwZSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDBlLCAweDgwLCAweDA3LCAweDMyLAotCTB4NjQsIDB4MDAsIDB4OGYsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MGUsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHg2NCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhlZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDBlLCAweDQwLCAweDAwLCAweDMyLAotCTB4YTAsIDB4OGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MGUsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwZSwgMHhjMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNjLCAweDBlLCAweDgwLCAweDAyLCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MzMsIDB4N2IsIDB4ZWMsIDB4MzksCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDZlLCAweGMwLCAweGVjLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MGUsIDB4YzAsIDB4ZWQsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg2NSwgMHgwMSwgMHg4MCwgMHhhMiwgMHhkYiwgMHgyYywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MWMsIDB4MDEsIDB4ODAsIDB4NTIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgyYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKLQkweDNkLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAotCTB4MzUsIDB4MDAsIDB4OWMsIDB4MDUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ODEsIDB4YmMsCi0JMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDJiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDg5LCAweGNkLCAweDgxLCAweDNjLAotCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4MTQsIDB4NTksIDB4ZTQsIDB4NmUsIDB4ZDksCi0JMHhhNCwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHg4MiwgMHhjZCwgMHg4MSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NjUsIDB4MDEsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4MmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxOCwgMHgwMSwgMHg4MCwgMHg5MiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDJiLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDgxLCAweGJjLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHgxNCwgMHg3OSwgMHhlMCwgMHg2ZSwgMHhkOSwKLQkweGE0LCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDgyLCAweGNkLCAweDgxLCAweDNhLAotCTB4ZTEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhlYSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweGYzLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4ZmMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgwNSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDBlLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4MTcsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgyMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDI5LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4MzIsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgzYiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDQ0LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NGQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg1NiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDVmLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NjgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg3MSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDdhLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4ODMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg4YywgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDk1LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4OWUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhhNywgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweGIwLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4YjksIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhjMiwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweGNiLCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4ZDQsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhkZCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweGU2LCAweDA2LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4ZWYsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHhmOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDAxLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4MGEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgxMywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDFjLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4MjUsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHgyZSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDM3LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NDAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg0OSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDU3LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHg1MiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDU3LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NWMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg2MSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDY2LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4NmIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg3MCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDc1LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4N2EsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg3ZiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDg0LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4ODksIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg4ZSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDkzLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweDg4LCAweDgyLCAweGNkLCAweDZlLCAweDNhLAotCTB4OTgsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDEsIDB4ODgsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4M2EsCi0JMHg5ZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxYywgMHgwMSwgMHg4OCwgMHg4MiwgMHhjZCwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDVmLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGQ0LCAweDAyLCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NzEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzYiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDc5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ODgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZGEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGRhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGRhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGVhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGVhLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU4LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4NiwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ3LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg3ZCwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ3LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg3ZCwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGQ3LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZTksIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZTksIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU5LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YzEsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhiOCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGMxLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGMxLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDgxLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODEsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDgxLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODYsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4MSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDgxLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NzYsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3NiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDc2LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDc2LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YzksIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDQ3LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NGIsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDRiLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDRiLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDIsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NGMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDRjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDRjLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NTEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg1MSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDUxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDUxLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NjQsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg2NCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDY0LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDY0LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDdlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDdlLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4ZiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhMCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhMCwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YjUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhiNSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGI1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg3NSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDc1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDc1LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4Y2MsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDIsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ODgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGM0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ODgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGM0LCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDJhLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDJhLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDM0LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDM0LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MzEsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4NDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhmMywgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhiNiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweGI2LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MGEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDFhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YjQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhjMywgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGMzLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZTUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZTgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGVhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDQwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg0MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGY4LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ZjgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4YzAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyZSwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MGYsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDA3LCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDgwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHgwMCwgMHgwMSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHg4MCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDIyLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweGMwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4MDAsIDB4MDEsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhlZiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOCwgMHhjMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDAwLCAweDAxLCAweDkyLAotCTB4MDgsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MTgsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4OTksCi0JMHgwOCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgwMCwgMHgxOCwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHg5OSwKLQkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDgsIDB4MDAsIDB4YTcsIDB4MDcsIDB4MWQsIDB4MTksIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDA4LCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDFjLCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDk5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MGYsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBlLCAweDAxLCAweGVjLCAweDA2LCAweGMwLCAweDZlLCAweDM1LAotCTB4NTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHgwMCwgMHgyZCwgMHgzNywKLQkweGI0LCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDk3LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4OTksIDB4YzAsIDB4MmMsIDB4MzcsCi0JMHhiNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg5NywgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDg3LCAweGJmLCAweDk3LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDAwLCAweDc4LCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YjcsIDB4MDcsIDB4YjcsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTcsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhiYSwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MCwgMHhmYywgMHhiNiwKLQkweDAwLCAweDAwLCAweGJiLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweGZmLCAweDgwLCAweGZjLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YmMsIDB4MDcsIDB4OWYsIDB4OTksIDB4MDAsIDB4ODAsIDB4ODIsIDB4MWIsIDB4ZWUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMCwgMHhlMCwgMHgwZSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE3LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHgxYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDQwLCAweDAwLCAweGMxLCAweDA3LCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDkxLCAweGJjLAotCTB4MDAsIDB4NDAsIDB4YzIsIDB4MDcsIDB4MDAsIDB4MTgsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4MmMsIDB4OTIsCi0JMHgwMCwgMHg2MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMiwgMHhlMCwgMHhhNiwgMHhjZCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDA5LCAweDgwLCAweDAzLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YzUsIDB4MDcsIDB4ODAsIDB4ZDcsIDB4MDEsIDB4ODAsIDB4MzIsIDB4YzAsIDB4NmUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OSwgMHgwMCwgMHg5MiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAxLCAweDE4LCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4MjQsIDB4MDksIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGQzLCAweDA3LCAweDgwLCAweDBlLCAweDAxLCAweDgwLCAweDEyLCAweGMwLCAweDZlLCAweGI2LAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OSwgMHgwMSwgMHg5MiwgMHgzYSwKLQkweDAwLCAweDAwLCAweGNmLCAweDA3LCAweDgwLCAweGQ2LCAweDAxLCAweDgwLCAweDQyLCAweGMwLCAweDZlLCAweGI2LAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDIsIDB4ZTAsIDB4YTYsIDB4Y2QsIDB4OTEsIDB4MzIsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwMiwgMHhlOCwgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDI4LCAweDAwLCAweGRkLCAweDA3LCAweDAwLCAweDMyLCAweDAyLCAweGVjLCAweDA2LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDMsIDB4MDEsIDB4MDAsIDB4MWMsIDB4ZDksIDB4YzEsIDB4OTEsIDB4MzQsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhhNiwgMHhjZCwgMHg5MSwgMHgzMiwKLQkweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDAyLCAweGU4LCAweDA2LCAweDAwLCAweDM2LCAweDMyLAotCTB4MzQsIDB4MDAsIDB4ZGQsIDB4MDcsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwMiwgMHhlYywgMHgwNiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg5LCAweDBkLCAweDkyLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4ZDksIDB4MDcsIDB4ODAsIDB4ZDYsIDB4MDEsIDB4ODAsIDB4NDIsIDB4YzAsIDB4NmUsIDB4YjYsCi0JMHgwMCwgMHg4NiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhhNiwgMHhjZCwgMHg5MSwgMHgzMiwKLQkweDA0LCAweGEwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDAyLCAweGU4LCAweDA2LCAweDAwLCAweDM2LCAweDMyLAotCTB4MTQsIDB4MDAsIDB4ZGQsIDB4MDcsIDB4MDAsIDB4MzIsIDB4MDIsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMywgMHgwMSwgMHgwMCwgMHgxYywgMHhkOSwgMHhjMSwgMHg5MSwgMHgzNCwKLQkweDAwLCAweDg2LCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAyLCAweGUwLCAweGE2LCAweGNkLCAweDkxLCAweDMyLAotCTB4MDQsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgyMCwgMHgwMCwgMHhkZCwgMHgwNywgMHgwMCwgMHgzMiwgMHgwMiwgMHhlYywgMHgwNiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweGVjLCAweDg2LCAweGNkLCAweDkxLCAweDNhLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZTgsIDB4ODYsIDB4MjQsIDB4OTAsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMiwgMHhlMCwgMHg5NiwgMHgyNCwgMHgxNCwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAxLCAweGUwLCAweDA2LCAweDgwLCAweDkxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTMsIDB4MDcsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAotCTB4MDAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhjMCwgMHgyYywgMHgzNywKLQkweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweDhkLCAweDk3LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4ODcsIDB4YmYsIDB4OTcsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHhmZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGM5LCAweDAxLCAweDgwLCAweDAyLCAweDgwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ODAsIDB4ODMsIDB4MzIsCi0JMHgwMSwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweGMwLCAweGY5LCAweDA3LCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgyYywgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwOCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDUwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDcsIDB4ODAsIDB4ZDcsIDB4MDEsIDB4MmMsIDB4MDksIDB4YzAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHhkNywgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHg2ZSwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweGVjLCAweDA2LCAweDQwLCAweGVkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ODAsIDB4ZWUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMiwgMHgwOCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHhjMCwgMHg5MiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDgyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDQsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDM0LAotCTB4M2IsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDA3LCAweDAxLCAweDgwLCAweDEyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGEwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxMSwgMHgwMCwgMHg3OCwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDBmLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweGM4LCAweDAyLCAweDAwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MTIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgxZSwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDEyLCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDYwLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDFmLCAweDgwLCAweGZmLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MTcsIDB4MDgsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgzYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4MTQsIDB4MDgsIDB4ODAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgxMiwgMHgwOCwgMHgxMiwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwMCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDEwLCAweDA4LCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDA4LCAweDgwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YTAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZCwgMHhiYywKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAyLCAweDAwLCAweDc4LCAweGUxLCAweDZlLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MjAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHg3OCwgMHhjYSwgMHhlOSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDA4LCAweDQwLCAweDgwLCAweDMyLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NzksIDB4MjEsIDB4MmYsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMiwgMHg0NCwgMHhlMiwgMHgyNSwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDkwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZDgsIDB4YTAsIDB4ODEsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg4MiwgMHgwOCwgMHgwNCwgMHhiMCwgMHgwMCwgMHhlMCwgMHhkNiwgMHgyMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4NTAsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDM0LCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTIsIDB4ZTAsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg0MSwgMHgwOCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGY5LCAweDgxLCAweDgzLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDQsIDB4ZTIsIDB4ZTUsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgzOSwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDVjLCAweDEwLCAweDAwLCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgzYiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4M2YsIDB4MDgsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDNhLCAweDA4LCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NDYsIDB4MDgsIDB4MmEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjAsIDB4ODAsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHg0NSwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCi0JMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweGUwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhmMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDE4LCAweDgxLCAweDgzLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzUsCi0JMHgwOCwgMHhhMCwgMHgyOCwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjksIDB4ODEsIDB4ODMsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlMiwgMHhlNSwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDU4LCAweDA4LCAweDI4LCAweDAwLCAweDAwLCAweDZjLCAweGQ4LCAweGUwLCAweDg2LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4NWIsIDB4MTAsIDB4MDAsIDB4YTAsIDB4MDEsIDB4NTAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgxZCwgMHhmOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDU4LCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDVjLCAweDA4LCAweDA0LCAweGEwLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4NDAsIDB4ODEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg5MCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDZlLCAweDA4LCAweDAwLCAweDk4LCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg0LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NjIsIDB4MDgsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg1ZiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MWQsIDB4MDAsIDB4NjIsIDB4MDgsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDVlLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgwLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4ZTAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHhlOCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGYwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NmEsIDB4MDgsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODAsIDB4MmYsIDB4MzUsCi0JMHgwOCwgMHhhMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHhjZCwgMHgzOSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg5MCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGJjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NzQsIDB4MDgsIDB4MmEsIDB4NWQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4ODAsIDB4ZWUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg3MSwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MWQsIDB4MDAsIDB4NzQsIDB4MDgsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDcwLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGUyLCAweDgwLCAweDJmLCAweDk0LAotCTB4MTAsIDB4MDQsIDB4NzcsIDB4MDgsIDB4MzcsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4YjEsCi0JMHgzYiwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDcyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MWMsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweDdkLCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4N2MsIDB4MDgsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMywgMHhiYywKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDgwLCAweDY3LCAweGExLCAweDczLCAweDM5LAotCTB4MzAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4YTIsIDB4OGQsIDB4MmMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweGUwLCAweDgzLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MmEsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjksIDB4ODEsIDB4ODMsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHhlMiwgMHhlNSwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MDgsIDB4MWQsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MTgsIDB4ODEsIDB4ODMsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4ZCwgMHgwOCwgMHgwNCwgMHgwNiwgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDQyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDgsIDB4YzAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4Y2QsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg5MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDVjLCAweDEwLCAweDAwLCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5MiwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4YWUsIDB4MDgsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg5NSwgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHhhYywgMHgwOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg2MSwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweGE0LCAweDA4LCAweDgwLCAweGI4LCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDZlLCAweGIyLAotCTB4NDAsIDB4MDAsIDB4OWMsIDB4MDgsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MGQsIDB4OTAsIDB4YmMsCi0JMHg4MCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHgwZCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDljLCAweDA4LCAweDAyLCAweGIwLCAweDAwLCAweDgwLCAweDgyLCAweDFiLCAweDg0LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGIyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4ZDYsIDB4MDEsIDB4ODAsIDB4NTIsIDB4YzAsIDB4NmUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHhlYywgMHg1NiwgMHhjMCwgMHg2ZSwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweDE4LCAweDAwLCAweDg2LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjcsIDB4MDEsIDB4NzgsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDQwLCAweDAwLCAweGFlLCAweDA4LCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YTAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMCwgMHg4MCwgMHhmYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAwLCAweDAwLCAweDNjLCAweDE4LCAweDIwLCAweDg0LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YjAsIDB4MDAsIDB4M2MsIDB4ODgsIDB4ZGIsIDB4ODMsIDB4YmUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHgwMSwgMHg3OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGY3LCAweDIwLCAweDc4LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4NzgsIDB4MDEsIDB4ZTAsIDB4ZjYsIDB4MjAsIDB4ODYsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgyNSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhmOCwgMHg2MCwgMHg4MCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MmUsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDAwLCAweDAzLCAweGJjLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MTgsIDB4MDAsIDB4ODAsIDB4NjcsIDB4YTEsIDB4NzMsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYSwgMHg1YywgMHgwMSwgMHhlYywgMHgwNiwgMHg4MCwgMHhlZSwgMHgzMiwKLQkweDMwLCAweDAwLCAweGFhLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweGEyLCAweDhkLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhjMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDFhLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGMyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4YjgsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YzIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhiYiwgMHgwOCwgMHgwMCwgMHhkMCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGMyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4YmIsIDB4MDgsIDB4MDQsIDB4ZDEsIDB4MDEsIDB4ODAsIDB4MDIsIDB4ODAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNiwgMHgwMSwgMHhlYywgMHgyNiwgMHhjMCwgMHg2ZSwgMHgzNCwKLQkweDAwLCAweDAwLCAweGJkLCAweDA4LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDkyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzAsIDB4MDgsIDB4MDAsIDB4YzgsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg5MiwgMHg4MSwgMHgyZiwgMHgzNSwKLQkweDAwLCAweDAwLCAweGMwLCAweDA4LCAweDA0LCAweGM5LCAweDAxLCAweDgwLCAweDAyLCAweDgwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4MzQsCi0JMHgxMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4OWEsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4NDIsIDB4ODEsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMiwgMHgwMCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGM3LCAweDA4LCAweDEyLCAweDAxLCAweDAwLCAweDVjLCAweDA4LCAweDgwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDIsIDB4ODAsIDB4MmMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgxZiwgMHg4MCwgMHhmZiwgMHg5YSwKLQkweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDc5LCAweDIxLCAweDJmLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZjksIDB4ODEsIDB4OTcsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMiwgMHg0NCwgMHhlMiwgMHgyNSwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAxLCAweDUwLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDEsIDB4NjAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMiwgMHgwYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAxLCAweDFjLCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NzcsIDB4MTAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhmOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRhLCAweDVjLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhkNCwgMHgwOCwgMHgyMywgMHgyOSwgMHgwMiwgMHgwNCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHhiMiwKLQkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDgsIDB4MDAsIDB4ZDgsIDB4MDgsIDB4MWQsIDB4MWMsIDB4MDEsIDB4ZTgsIDB4NzYsIDB4MjAsIDB4ODEsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHhkOCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhmOSwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweGRjLCAweDA4LCAweDlkLCAweDAxLCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDcsIDB4YzAsIDB4OTEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4ODAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg4MCwgMHg4NywgMHg4ZCwgMHg4NSwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDA3LCAweDAwLCAweDg2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ODUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMywgMHgwOCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MzAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NWMsIDB4YTIsIDB4OGQsIDB4MmMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDEyLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDhkLCAweDJmLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4MDEsIDB4NzgsIDB4MDksIDB4ODAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHhkYywgMHhkMSwgMHgwMSwgMHhlOCwgMHgwNiwgMHg4MCwgMHg5NywgMHg5MiwKLQkweDEyLCAweDAwLCAweGFhLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg0ZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwOSwgMHg0MCwgMHg4MSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDJmLCAweDBlLCAweDAwLCAweGE4LCAweDAxLCAweDIwLCAweDA5LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgzMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDQyLCAweDgxLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MzUsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4ODEsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4ZjYsIDB4MDgsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDlkLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDcyLCAweGUwLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg0NywgMHgxMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHgyOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MDgsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg0MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDFmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4MmYsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHgwOCwgMHgwOCwgMHg1YiwgMHgwMSwgMHhlYywgMHgwNiwgMHhmYiwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVhLCAweDAxLCAweGVjLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MzQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwNiwgMHgwOSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MGQsIDB4MDksIDB4MDgsIDB4YzksIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YmIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDMyLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4ODAsIDB4MDEsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDBkLCAweDA5LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwZCwgMHgwOSwgMHgwOCwgMHhkMSwgMHgwMSwgMHhlOCwgMHgwNiwgMHhiYiwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MzIsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHgwMSwgMHhmMiwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgxNywgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDA3LCAweDAxLCAweDgwLCAweDEyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MTMsIDB4MDksIDB4MTIsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgxNiwgMHgwOSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg1YywgMHgwOCwgMHg4MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDAyLCAweDgwLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MWYsIDB4ODAsIDB4ZmYsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NzksIDB4MjEsIDB4MmYsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhmOSwgMHg4MSwgMHg5NywgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAyLCAweDQ0LCAweGUyLCAweDI1LCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4YTAsIDB4MDEsIDB4NTAsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYiwgMHg3OSwgMHgwMSwgMHg2MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDVjLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA4LCAweDAwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgxZiwgMHgwOSwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MzAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4YTIsIDB4OGQsIDB4MmMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweGRhLCAweDVjLCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweGVlLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4OWYsIDB4NDEsIDB4MDEsIDB4ODAsIDB4NTIsIDB4MjAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgwOSwgMHg5ZiwgMHg5OCwgMHgwMSwgMHg4MCwgMHg1MiwgMHgyMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHgyYiwgMHgwOSwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweGFhLCAweDA3LCAweDMxLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgzYSwgMHgwMCwgMHhhYSwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTAsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjgsIDB4MDksIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGFhLCAweDA3LCAweGQ1LCAweDQxLCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDgxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDYwLCAweDExLCAweDAwLCAweDc4LCAweDAxLCAweDYwLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwMiwgMHg3OCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDM1LCAweDA5LCAweDA0LCAweGQ0LCAweDAxLCAweDgwLCAweDEyLCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MTksIDB4ODAsIDB4OTcsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5MCwgMHgwMSwgMHhlMCwgMHhlNiwgMHgyNSwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDYwLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhYSwgMHgwNywgMHgwMCwgMHg5MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAyLCAweDAwLCAweDNmLCAweDA5LCAweDA0LCAweGI5LCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NDEsIDB4MDksIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4ZmMsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg0NCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDQxLCAweDA5LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgwLCAweGZjLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NDQsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHhmNSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDQyLCAweGJkLCAweDk3LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OTksIDB4YjEsIDB4ZjIsIDB4YzAsIDB4N2MsIDB4MzAsCi0JMHgwMCwgMHhjMCwgMHg0OCwgMHgwOSwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDA4LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NTAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwNywgMHgwMSwgMHhlYywgMHgxNiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweGEyLCAweDAwLCAweDJkLCAweDM3LAotCTB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHg5OSwgMHhlMSwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDRkLCAweDA5LCAweDA0LCAweDAxLCAweDAwLCAweDc4LCAweDE5LCAweDgwLCAweDk3LCAweGJjLAotCTB4MDIsIDB4MDAsIDB4NTksIDB4MDksIDB4MDQsIDB4YjksIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhkNiwgMHgwMSwgMHgwMCwgMHg3OCwgMHhjOSwgMHhjZCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDAwLCAweDUxLCAweDA5LCAweGI2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4ODAsIDB4OTcsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1MywgMHgwOSwgMHgxMiwgMHgwOCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDU0LCAweDA5LCAweDEyLCAweDE4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NTUsIDB4MDksIDB4MTIsIDB4MTAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg1NCwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgyYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDAxLCAweGU4LCAweDA2LCAweGMwLCAweDJjLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MGUsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTQsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg0YywgMHhkNiwgMHgwMSwgMHgwMCwgMHg3OCwgMHhjOSwgMHhjZCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDAwLCAweDVhLCAweDA5LCAweGI2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4ODAsIDB4OTcsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1YywgMHgwOSwgMHgxMiwgMHgwOCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDVkLCAweDA5LCAweDEyLCAweDMwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NWUsIDB4MDksIDB4MTIsIDB4MzgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1ZiwgMHgwOSwgMHgxMiwgMHg0MCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDYwLCAweDA5LCAweDEyLCAweDQ4LCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NjEsIDB4MDksIDB4MTIsIDB4MTAsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg2MiwgMHgwOSwgMHgxMiwgMHgxOCwgMHgwMCwgMHg2NCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDYzLCAweDA5LCAweDEyLCAweDIwLCAweDAwLCAweDY0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NjQsIDB4MDksIDB4MTIsIDB4MjgsIDB4MDAsIDB4NjQsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNiwgMHg1NCwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgyYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY0LCAweDAxLCAweGU4LCAweDA2LCAweGMwLCAweDJjLCAweDMyLAotCTB4MDMsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MGUsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDZiLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDgwLCAweDNkLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHgwOSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhkYywgMHg1MywgMHg2MCwgMHgzZCwgMHhiMywKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAzLCAweDM5LAotCTB4NmEsIDB4MDksIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDIsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4NzQsIDB4MDksIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDE0LCAweDAwLCAweDlkLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDJjLCAweDMyLAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4ODIsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweGNhLCAweDAxLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgyYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDdkLCAweDA5LCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MjksIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDJjLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDA5LCAweGMwLCAweDg1LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgyMywgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKLQkweDNjLCAweDAwLCAweGExLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyYywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHgwOSwgMHhjMCwgMHg4NSwgMHhkMiwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4OGMsIDB4MDksIDB4MzgsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YywgMHgwOSwgMHgxZSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4ZiwgMHgwOSwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDgyLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyNCwgMHgwOCwgMHgwMCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweGMwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4ODAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHhjMCwgMHg5OSwgMHgwOSwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAotCTB4MjAsIDB4ODAsIDB4OWMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ1LCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMSwgMHgwZSwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHhmYSwKLQkweDAwLCAweDAwLCAweGEyLCAweDA5LCAweDM4LCAweDAxLCAweDAwLCAweDJjLCAweGY4LCAweDAxLCAweDBiLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDksIDB4MDIsIDB4MGQsIDB4MDIsIDB4ODAsIDB4YTIsIDB4NWIsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHhjOCwgMHhjMSwgMHg4MiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweGE4LCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4M2IsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHhhNywgMHgwOSwgMHgyNywgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM3LCAweDAwLCAweDAwLCAweDJjLCAweGU4LCAweGMwLCAweDgyLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4NDAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODcsIDB4MzIsCi0JMHgwOCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHhmOSwKLQkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YWIsIDB4MDksIDB4MjMsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4ODEsIDB4YjIsCi0JMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGFkLCAweDA5LCAweDFkLCAweDIxLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwOSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgxMCwgMHgwMCwgMHhiNiwgMHgwOSwgMHgyYywgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhlMCwgMHgyYywgMHhiOSwKLQkweDAwLCAweDAwLCAweGI4LCAweDA5LCAweDhlLCAweDM5LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YjgsIDB4MDksIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODcsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhiOCwgMHgwOSwgMHg4ZSwgMHgzOSwgMHgwMCwgMHgwMCwgMHhiNywgMHhjMSwgMHg4MiwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YmEsIDB4MDksIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGMwLCAweDA5LCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweGI4LCAweDA5LCAweDlmLCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhjOCwgMHgwOSwgMHgxZSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHhhOCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAxLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDAwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4M2IsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweGNlLCAweDA5LCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFjLCAweDQwLCAweDAyLCAweDgwLCAweDA2LCAweGMwLCAweDg1LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDJjLCAweDEwLCAweGQ2LCAweDAxLCAweDAwLCAweDJjLCAweDA5LCAweGMwLCAweDg1LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4ZDIsIDB4MDEsIDB4MDAsIDB4OTQsIDB4MWUsIDB4NDAsIDB4ZTksIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgyMCwgMHgwMCwgMHgxOCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZWUsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDUxLCAweDAxLCAweDgwLCAweDAyLCAweDgwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjEsIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMCwgMHhlOCwgMHgwNiwgMHg0MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGU0LCAweDA5LCAweDFmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4ZTEsIDB4MDksIDB4OWUsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDJhLCAweDMxLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4MzksCi0JMHhhNCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MGMsIDB4MDAsIDB4ZWIsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhlYiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDA4LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MjAsIDB4MDAsIDB4MTgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGVlLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MzAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDI1LCAweDBhLCAweDM4LCAweDAwLCAweDAwLCAweGE0LCAweDA4LCAweDgwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MjUsIDB4MGEsIDB4MDQsIDB4MjgsIDB4MDEsIDB4MDQsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHg1MCwgMHgwMSwgMHgwNCwgMHhhOCwgMHg1YiwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA4LCAweDIwLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwYSwgMHgwYSwgMHgwOCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgxOCwgMHhhMCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAxLCAweGUwLCAweGE2LCAweDIwLCAweDAwLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhmYiwgMHgwOSwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4M2QsIDB4MDAsIDB4MGMsIDB4MDcsIDB4ODAsIDB4ODMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOCwgMHg0MCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDA4LCAweDBhLCAweDA0LCAweDAyLCAweDAxLCAweGVjLCAweDE2LCAweGMwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4M2EsCi0JMHgwMCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDY2LCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHg2YywgMHgxOCwgMHgyMCwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MGYsIDB4MGEsIDB4MDAsIDB4MzgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4ODAsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2MCwgMHgwMCwgMHg2YywgMHgxOCwgMHgyMCwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MTEsIDB4MGEsIDB4OWYsIDB4MDEsIDB4MDAsIDB4MDQsIDB4NjgsIDB4NjAsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgxOCwgMHgyMCwgMHgwMCwgMHg5YywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MTQsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDcwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MGQsIDB4MGEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4NjAsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDAsIDB4YTAsIDB4MGQsIDB4MGEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDFmLCAweDBhLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MWYsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4YTAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDAsIDB4YTAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweGUwLCAweDA2LCAweGMwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MjcsIDB4MGEsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODQsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgxMCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDRjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgyYSwgMHgwYSwgMHgwMCwgMHg1MCwgMHgwMSwgMHgzYywgMHhhOCwgMHg1YiwgMHg4MCwgMHg5YywKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDAwLCAweDMwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4MGEsIDB4M2UsIDB4NTEsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ODAsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHgwMCwgMHgwMCwgMHhmOCwgMHhmMiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweGVjLCAweDA2LCAweGMwLCAweGVlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4ODcsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDRjLCAweDBmLCAweDYwLCAweDMwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4N2IsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4M2EsIDB4MGEsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGYsIDB4MDAsIDB4MDAsIDB4YTQsIDB4YTgsIDB4NjAsIDB4OGEsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweGMwLCAweDNlLCAweDBhLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRmLCAweDAwLCAweDAwLCAweGE0LCAweGE4LCAweDYwLCAweDhhLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGRlLCAweGE4LCAweDAxLCAweDIwLCAweDk5LCAweDIyLCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDIsIDB4ODAsIDB4ODIsIDB4MWIsIDB4OTIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg0MiwgMHgwYSwgMHgyZiwgMHgyMCwgMHgwMSwgMHhlMCwgMHg5NiwgMHgyMiwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDJmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4NGEsIDB4MGEsIDB4MWYsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg0NSwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4MywgMHhiYywKLQkweDAwLCAweDAwLCAweDRhLCAweDBhLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweGY2LCAweDYwLCAweDgwLCAweDljLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4NzgsIDB4MzksIDB4OWEsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDgsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MTQsIDB4MzksIDB4OWEsIDB4ZmUsIDB4ZDgsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg2OCwgMHgxMiwgMHg5YSwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDRmLCAweDBhLCAweDJhLCAweGE5LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkyLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxZCwgMHgwMCwgMHg0ZiwgMHgwYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDRiLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDUyLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDJmLCAweGI2LAotCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDMyLAotCTB4MDAsIDB4YzAsIDB4NjEsIDB4MGEsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg4MiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDU4LCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDgxLCAweGJjLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxOCwgMHgwMCwgMHg1YSwgMHgwYSwgMHgyZSwgMHg0OSwgMHgwMSwgMHhlMCwgMHhlNiwgMHhhMCwgMHg4MiwgMHhiOSwKLQkweDAwLCAweDAwLCAweDViLCAweDBhLCAweDAwLCAweDVlLCAweDAxLCAweGVjLCAweDc2LCAweDAwLCAweDAwLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgyMCwgMHg4MCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHhmMiwKLQkweDFiLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MGMsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ODUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweGMyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4OWUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4ODAsIDB4ODUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4Y2IsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg2NywgMHgwYSwgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDZlLCAweDBhLCAweDNkLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4MGEsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGIwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4NzIsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgyYSwgMHgwMCwgMHg3OCwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NzUsIDB4MGEsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg3OCwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NzgsIDB4MGEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDllLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDgwLCAweDg1LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ODAsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMSwgMHgwMSwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDMxLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MTIsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjZSwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweGMwLCAweDg2LCAweDBhLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MjAsIDB4ODAsIDB4OWMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4ZiwgMHgwYSwgMHgzZiwgMHgwMCwgMHgwMCwgMHgzYywgMHgwOCwgMHg0MCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhmLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGUsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMSwgMHhlYywgMHgwNiwgMHhjMCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZGEsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweGQ4LCAweGEwLCAweDgxLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDliLCAweDBhLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhZSwgMHgwYSwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgxMiwgMHg4MCwgMHgyZCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4YTcsIDB4MGEsIDB4MjgsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhNSwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGExLCAweDBhLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4YTUsIDB4MGEsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHhhNSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweGEzLCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgzYywgMHgwZSwgMHhkYSwgMHg1YiwgMHgwMSwgMHhlYywgMHgwNiwgMHg0MCwgMHhlZCwgMHhmMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4YWMsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGE3LCAweDBhLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YWYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MjAsIDB4ODAsIDB4ZmEsCi0JMHgwMCwgMHgwMCwgMHg5MCwgMHgwYSwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4YmMsIDB4MGEsIDB4MjgsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhiYSwgMHgwYSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweGI2LCAweDBhLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4YmEsIDB4MGEsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHhiYSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweGI4LCAweDBhLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgzYywgMHgwZSwgMHhkYSwgMHg1YiwgMHgwMSwgMHhlYywgMHgwNiwgMHg0MCwgMHhlZCwgMHhmMiwKLQkweDAwLCAweDAwLCAweGUwLCAweDBhLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzAsIDB4MGEsIDB4MDQsIDB4MjEsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4ODEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDAsIDB4ZTgsIDB4MDYsIDB4NDAsIDB4ODEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwYSwgMHgyYSwgMHgxMSwgMHgwMCwgMHhlMCwgMHhkNiwgMHhlMCwgMHg4NiwgMHhiYSwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MWQsIDB4MDAsIDB4YzYsIDB4MGEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgwYSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxOCwgMHgwMCwgMHg4OCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDA4LCAweDAwLCAweGNhLCAweDBhLCAweDIzLCAweDE5LCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweGI5LAotCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjZSwgMHgwYSwgMHgxZCwgMHgxOCwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGNlLCAweDBhLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGM2LCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGY5LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4ZDMsIDB4MGEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4ODgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhkMiwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDc4LCAweDE5LCAweDIwLCAweDZlLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4YTUsIDB4ODIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDg4LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAxLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTQsIDB4MGEsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGU1LCAweDBhLCAweGM5LCAweDAxLCAweDAwLCAweDE0LCAweDA4LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlZiwgMHgwYSwgMHgyOCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweGVlLCAweDBhLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZWEsIDB4MGEsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHhlZSwgMHgwYSwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKLQkweDAwLCAweDAwLCAweGVlLCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MGEsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgzYywgMHgwZSwgMHhkYSwgMHg1YiwgMHgwMSwgMHhlYywgMHgwNiwgMHg0MCwgMHhlZCwgMHhmMiwKLQkweDAwLCAweDIwLCAweDAwLCAweDgwLCAweGRmLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZjMsIDB4MGEsIDB4M2QsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhmMywgMHgwYSwgMHgzNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHg4MSwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4Y2IsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODEsIDB4MmYsIDB4ZjUsCi0JMHgwOCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHhmOSwKLQkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4ZjgsIDB4MGEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGZkLCAweDBhLCAweDI5LCAweDA4LCAweDAxLCAweGU0LCAweDA2LCAweGMwLCAweDJkLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDIsIDB4MGIsIDB4MWQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMiwgMHgwYiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDIsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHgwYSwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MWQsIDB4MDAsIDB4MDEsIDB4MGIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHhmZSwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHg5YywKLQkweDJhLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YzcsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHgwNSwgMHgwYiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDMxLCAweDAwLCAweDgwLCAweDgyLCAweDliLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTIsIDB4YTAsIDB4ODIsIDB4YmMsCi0JMHgyNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDEwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweGE5LCAweDYwLCAweDgwLCAweGQ5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHgxNSwgMHgwYiwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDljLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHgzMSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgyMCwgMHgwYiwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweGE4LCAweDYwLCAweDgwLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDgsIDB4NDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgzYiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOCwgMHg4MCwgMHg4MiwgMHhmMiwKLQkweDAwLCAweDAwLCAweDIxLCAweDBiLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgyMCwgMHg4MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDI2LCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDI4LCAweDY4LCAweGEwLCAweDgyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhhZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDE3LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDgxLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDIwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YzcsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDJlLCAweDBiLCAweDNkLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MmUsIDB4MGIsIDB4MzQsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhiMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDA0LCAweDA4LCAweDgwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4MGIsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGVmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MzQsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YmMsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDNhLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDM4LCAweDgwLCAweDg3LCAweGY1LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4YTUsIDB4MDIsIDB4MjMsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODAsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzMiwgMHg4MCwgMHgyZiwgMHgzNSwKLQkweDNjLCAweDAwLCAweGE1LCAweDAyLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDNmLCAweDBiLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MzEsIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg0MSwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDgyLCAweDRiLCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGE4LCAweDhkLCAweDgwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHg1YywgMHgwYiwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGE4LCAweDhkLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMiwgMHgwMCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDQwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MDAsIDB4ODYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1MywgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDRmLCAweDBiLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4NTMsIDB4MGIsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg1MywgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweDUxLCAweDBiLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg4MCwgMHhkMiwKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgxZiwgMHhjMCwgMHhmNSwgMHgzYSwKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDAwLCAweDMwLCAweDAwLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDE3LCAweGUwLCAweDJjLCAweDM5LAotCTB4MDAsIDB4MTAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgxMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4NmEsIDB4MGIsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgzYywgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGMzLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4NmUsIDB4MGIsIDB4MWQsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg3MSwgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NzEsIDB4MGIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHg3NCwgMHgwYiwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHhjYSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDdlLCAweDBiLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4N2EsIDB4MGIsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg3ZSwgMHgwYiwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKLQkweDAwLCAweDAwLCAweDdlLCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4N2MsIDB4MGIsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4MCwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4NiwgMHhiYywKLQkweDAwLCAweDAwLCAweDBhLCAweDExLCAweDAwLCAweDkwLCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4M2YsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHg4NywgMHgwYiwgMHgzMywgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDg3LCAweDBiLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGIyLCAweDAxLCAweDcyLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ODcsIDB4MGIsIDB4OWYsIDB4ZjAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4ZGIsIDB4ODcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4NywgMHgwYiwgMHg5ZiwgMHhmOCwgMHgwMSwgMHg4MCwgMHgyMiwgMHgyMSwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweGVlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODcsIDB4MzIsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDhkLCAweDBiLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGQyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MGIsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjZCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDNiLCAweDAwLCAweDhkLCAweDBiLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg5ZCwgMHgwYiwgMHgyNywgMHgwOSwgMHgwMSwgMHhlNCwgMHgwNiwgMHhjMCwgMHgyZCwgMHhiMiwKLQkweDAwLCAweGMwLCAweDk1LCAweDBiLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDIwLCAweDgwLCAweGE0LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDkyLAotCTB4MmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHgxNCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDg4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwNywgMHhjMCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDQwLCAweDAwLCAweDgwLCAweGNhLCAweDM5LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweGExLCAweDBiLCAweDFkLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YTEsIDB4MGIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgyOSwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgxLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4YzcsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4YWUsIDB4MGIsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGExLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDcyLCAweGUwLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGVlLCAweDEwLCAweDAwLCAweDIwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MzAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwOCwgMHg4MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDEwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4MDAsIDB4MTgsIDB4MDAsIDB4NGMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhiNiwgMHgwYiwgMHgwMCwgMHg1MCwgMHgwMSwgMHgzYywgMHhhOCwgMHg1YiwgMHg4MCwgMHg5YywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ODAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlZSwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhhMCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZDgsIDB4YTAsIDB4ODEsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHhkNCwgMHgwYiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhkOCwgMHhlMCwgMHg4MywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YzUsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMiwgMHhjMCwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGNkLCAweDBiLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGNiLCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwYiwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGQyLCAweDBiLCAweDJhLCAweDAxLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGIsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHhiNywgMHgwZSwgMHgwMCwgMHg2MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweGJhLCAweDBiLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDllLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweGRiLCAweDBiLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhkNSwgMHgwYiwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg3OCwgMHgzOSwgMHg5YSwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwOCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHg0MCwgMHgwMiwgMHgxNCwgMHgzOSwgMHg5YSwgMHhmZSwgMHhkOCwKLQkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDQwLCAweDAyLCAweDY4LCAweDEyLCAweDlhLCAweGZlLCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAwLCAweDAwLCAweDZjLCAweGQ4LCAweGUwLCAweDg2LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhlNiwgMHgwYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwOCwgMHg0MCwgMHg4MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YjksIDB4MGIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhlYywgMHgwYiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGViLCAweDBiLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhiYSwgMHgwYiwgMHg0ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NywgMHhlMCwgMHg4MywgMHg5ZSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MDEsIDB4MzgsIDB4MDgsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4ZjYsIDB4MGIsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHgzYSwKLQkweDAwLCAweGMwLCAweGY3LCAweDBiLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweDhkLCAweDM5LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweDIwLCAweDk5LCAweDIyLCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDIsIDB4ODAsIDB4ODIsIDB4MWIsIDB4OTIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhmYiwgMHgwYiwgMHgyZiwgMHgyMCwgMHgwMSwgMHhlMCwgMHg5NiwgMHgyMiwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDJmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MGIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhmZSwgMHgwYiwgMHg5ZiwgMHgzMSwgMHgwMSwgMHhlMCwgMHg5NiwgMHgyMiwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDcsIDB4MGMsIDB4MDAsIDB4NTAsIDB4MDEsIDB4ZTgsIDB4ZjYsIDB4NjAsIDB4ODAsIDB4OWMsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg3OCwgMHgzOSwgMHg5YSwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwOCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHg0MCwgMHgwMiwgMHgxNCwgMHgzOSwgMHg5YSwgMHhmZSwgMHhkOCwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDY4LCAweDEyLCAweDlhLCAweGZlLCAweDM4LAotCTB4MDAsIDB4MDAsIDB4MDYsIDB4MGMsIDB4OWYsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4OTYsIDB4MjIsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4OTIsIDB4MzIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDBjLCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4MDgsIDB4MGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweGNiLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDE0LCAweDBjLCAweDIzLCAweDAxLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJhLAotCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDE1LCAweDBjLCAweDBiLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MWMsIDB4MGMsIDB4M2QsIDB4MDEsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4ODUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgxYywgMHgwYywgMHgzNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHg4MSwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHgyMCwgMHgwYywgMHgyOSwgMHgzMSwgMHgwMSwgMHgwYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDJhLCAweDAwLCAweGEyLCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyNywgMHgwZSwgMHgwMCwgMHgwYywgMHgwMiwgMHgwMCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDI0LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4MDIsIDB4ZTQsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDI3LCAweDBjLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDksIDB4NDAsIDB4ODEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg0ZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDJmLCAweDBlLCAweDAwLCAweGE4LCAweDAxLCAweDIwLCAweDA5LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4MGMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyNywgMHgwZSwgMHgwMCwgMHgwYywgMHgwMiwgMHgwMCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweGE0LCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YjAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDkwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDc4LCAweDBiLCAweDE2LCAweDM4LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4NzgsIDB4MGIsIDB4MTYsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhhOCwgMHgwMCwgMHgyZCwgMHgzNywKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDg4LCAweDBkLCAweDhiLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4YjQsIDB4MDgsIDB4ODAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg0NSwgMHgwYywgMHgwNCwgMHgzMSwgMHgwMSwgMHg5MCwgMHgwOCwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDgyLCAweDhkLCAweDhhLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4YzIsIDB4YTIsIDB4MmMsIDB4M2EsCi0JMHgxOCwgMHgwMCwgMHg0MywgMHgwYywgMHg4NiwgMHg0MSwgMHgwMiwgMHg3OCwgMHg4OCwgMHgwZCwgMHg3OCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweGUyLCAweDhhLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDEsIDB4MDIsIDB4ODAsIDB4YjIsIDB4M2YsIDB4NzgsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgzYywgMHgwYywgMHg5ZiwgMHgwMSwgMHgwMCwgMHhhOCwgMHgxOCwgMHg4MCwgMHg4YSwgMHhiYywKLQkweGI3LCAweDAwLCAweDNjLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDQsIDB4YjgsIDB4M2YsIDB4NzgsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhkOCwgMHg2MiwgMHg4MCwgMHg5YywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDBjLCAweDAyLCAweDgwLCAweGEyLCAweDFiLCAweDg5LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4MiwgMHg4ZCwgMHg4YSwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweGMyLCAweGEyLCAweDJjLCAweDNhLAotCTB4MTgsIDB4MDAsIDB4NGUsIDB4MGMsIDB4ODYsIDB4NDEsIDB4MDIsIDB4NzgsIDB4ODgsIDB4MGQsIDB4NzgsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHhlMiwgMHg4YSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQxLCAweDAyLCAweDgwLCAweGIyLCAweDNmLCAweDc4LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4NDcsIDB4MGMsIDB4OWYsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MTgsIDB4ODAsIDB4OGEsIDB4YmMsCi0JMHhiNywgMHgwMCwgMHg0NywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwOCwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDUxLCAweDBjLCAweDI4LCAweDQwLCAweDAyLCAweDA0LCAweGI4LCAweDNmLCAweDc4LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4MDAsIDB4MDQsIDB4ZDgsIDB4NjIsIDB4ODAsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDU1LCAweDBjLCAweDAyLCAweDAxLCAweDAwLCAweDkwLCAweDE4LCAweDIwLCAweDg5LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg0NywgMHgwYywgMHg5ZiwgMHgwMSwgMHgwMCwgMHhhOCwgMHgxOCwgMHg4MCwgMHg4YSwgMHhiYywKLQkweGI3LCAweDAwLCAweDQ3LCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MTgsIDB4MjAsIDB4ODksIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgwNCwgMHg0OCwgMHg2MiwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDkwLCAweDAwLCAweDAwLCAweGI0LCAweDQ4LCAweDYyLCAweDhiLCAweGJhLAotCTB4MDMsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDgsIDB4MWUsIDB4ZmYsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgyMiwgMHg4MCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDg5LCAweDBjLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweGUyLCAweDhhLCAweGJjLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4OGQsIDB4OGEsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHhjMiwgMHhhMiwgMHgyYywgMHgzYSwKLQkweDE4LCAweDAwLCAweDg3LCAweDBjLCAweDg2LCAweDQwLCAweDAyLCAweDc4LCAweDg4LCAweDBkLCAweDc4LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NDAsIDB4MDIsIDB4MDQsIDB4YjgsIDB4M2YsIDB4NzgsIDB4YjAsCi0JMHgwMywgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgwOCwgMHgxZSwgMHhmZiwgMHhiOCwKLQkweDM4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4MDAsIDB4ODAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHg2NywgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweGMwLCAweDcyLCAweDBjLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDIsIDB4ODAsIDB4ODEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzYywgMHgwMiwgMHgwMCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDMwLCAweDAyLCAweDQwLCAweDgyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MzQsIDB4MDIsIDB4MDAsIDB4ODYsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHg2NCwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4YjgsIDB4MWIsIDB4ODAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2NCwgMHgzMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDg2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODIsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgxNywgMHhlMCwgMHgyYywgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweGY3LCAweDAxLCAweDBiLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4ODEsIDB4MGMsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4ODcsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHhiNywgMHgwMSwgMHg3MCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OTMsIDB4MGMsIDB4MDIsIDB4MGMsIDB4MDIsIDB4ODAsIDB4YTIsIDB4MWIsIDB4ODksIDB4YmMsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGQxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAzLCAweDAwLCAweDM4LCAweGYyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDVhLCAweDBjLCAweDlmLCAweDAxLCAweDAwLCAweGE4LCAweDE4LCAweDgwLCAweDhhLCAweGJjLAotCTB4YjcsIDB4MDAsIDB4NWEsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgyNywgMHgwMCwgMHg4YywgMHgwYywgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweDc4LCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4YTIsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4ZSwgMHgwYywgMHgyMywgMHg1NSwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiMiwKLQkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OTAsIDB4MGMsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweGM3LCAweDAxLCAweDcwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDMsIDB4MDAsIDB4MzgsIDB4ZjIsCi0JMHgwOCwgMHgwMCwgMHg5NywgMHgwYywgMHgyMywgMHgxOSwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHhiOSwKLQkweDNjLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OTksIDB4MGMsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweDljLCAweDBjLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MjksIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMiwgMHg4MSwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzYsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ZjksIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHhhMCwgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwMywgMHhjYSwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweGMwLCAweGFkLCAweDBjLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4ODIsIDB4YjYsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDM4LCAweDA4LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWUsIDB4MDEsIDB4ZWMsIDB4NjYsIDB4MDAsIDB4MDAsIDB4MzQsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMSwgMHhlMCwgMHhlNiwgMHhhMCwgMHg4MiwgMHgzOSwKLQkweDFiLCAweDAwLCAweGExLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgyMCwgMHgwMCwgMHg4NCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweGM3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4YzAsIDB4YjYsIDB4MGMsIDB4MTgsIDB4MDEsIDB4MDAsIDB4MGMsIDB4YTgsIDB4Y2QsIDB4M2UsIDB4YjIsCi0JMHgyMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDlkLCAweDAzLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDcyLCAweGUwLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMiwgMHhmMiwKLQkweDAwLCAweDAwLCAweGJkLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDA4LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweGMwLCAweGJkLCAweDBjLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MjAsIDB4ODAsIDB4OWMsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhhMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDI4LCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MjAsIDB4MDAsIDB4ODQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjNywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOCwgMHgwMSwgMHgwMCwgMHhmNCwKLQkweDAwLCAweDAwLCAweGMyLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDg1LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGM2LCAweDBjLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4NDEsIDB4MDIsIDB4ODAsIDB4MDYsIDB4YzAsIDB4ODUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxYywgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDRjLCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDFhLCAweDBkLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MjIsIDB4MGQsIDB4MWYsIDB4MjAsIDB4MDEsIDB4MDgsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgwZCwgMHgwNCwgMHgzMCwgMHgwMSwgMHgwOCwgMHg4OSwgMHg5YiwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweGQyLCAweDBjLCAweDA0LCAweDMxLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjAsCi0JMHgwMCwgMHgwMCwgMHhkMCwgMHgwYywgMHgwMCwgMHg1MCwgMHgwMSwgMHg0OCwgMHgwOCwgMHg4MCwgMHg2ZSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MjgsIDB4NjEsIDB4ODAsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHhlYiwgMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyMSwgMHg4MCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4MDAsIDB4MzAsIDB4MDEsIDB4NDgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHhkNiwgMHgwYywgMHgwMCwgMHg1MCwgMHgwMSwgMHgwNCwgMHhhOCwgMHg1YiwgMHg4MCwgMHg5YywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4MDEsIDB4MDAsIDB4YTgsIDB4MWIsIDB4ODAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHhlOCwgMHgwYywgMHgwNywgMHgwMCwgMHgwMCwgMHg0OCwgMHgxOCwgMHhhMCwgMHg4NCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTAsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDUsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YTAsIDB4ZmUsIDB4ZDgsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhhMCwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4ZTEsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGU4LCAweDBjLCAweDA3LCAweDAwLCAweDAwLCAweDQ4LCAweDE4LCAweGEwLCAweDg0LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhhMCwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwNSwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhhMCwgMHhmZSwgMHhkOCwKLQkweDA1LCAweDAwLCAweGRlLCAweDBjLCAweDAwLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGEwLCAweGZlLCAweDk4LAotCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MTgsIDB4YTAsIDB4ODQsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHg2MSwgMHg4MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDIxLCAweDgwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhmNCwgMHgwYywgMHgxMiwgMHgwMSwgMHgwMCwgMHg2MCwgMHgwOCwgMHg0MCwgMHgyMywgMHhiMiwKLQkweDAzLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDAwLCAweDM4LCAweDFhLCAweGZmLCAweGI4LAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4NjAsIDB4ODAsIDB4MzksCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHg0MSwgMHgwMiwgMHg4YywgMHhlNiwgMHhhMSwgMHg5NywgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDgwLCAweDg0LCAweDMyLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgyOCwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhmZSwgMHgwYywgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweGVkLCAweDBjLCAweDEyLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDA4LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDUwLCAweGYyLCAweGMxLCAweDM4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDgyLCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MTcsIDB4ZTAsIDB4MmMsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwZCwgMHgwZCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg4NywgMHhiNiwKLQkweDAwLCAweDEwLCAweDAwLCAweDgwLCAweDAwLCAweDM4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MGUsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgxMCwgMHgwMCwgMHg4OCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDUsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YTAsIDB4ZmUsIDB4ZDgsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhhMCwgMHhmZSwgMHgzOCwKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGEwLCAweGZlLCAweDM4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4ODAsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4ZWIsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEzLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDUsIDB4MDAsIDB4MWQsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YTAsIDB4ZmUsIDB4OTgsCi0JMHgwMCwgMHgwMCwgMHgyMiwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDA1LCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGEwLCAweGZlLCAweGQ4LAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTAsIDB4ZmUsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MWEsIDB4MGQsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDRjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4MDAsIDB4MmQsIDB4MzcsCi0JMHhiNCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHg5NywgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDk5LCAweGMwLCAweDJjLCAweDM3LAotCTB4YjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ODksIDB4OGQsIDB4OTcsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhiZiwgMHg5NywgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgyYiwgMHgwZCwgMHhiNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDIwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY0LCAweGEyLCAweGNkLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDM5LCAweDBkLCAweDEyLCAweDAxLCAweDAwLCAweDYwLCAweDA4LCAweDQwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgyOCwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MDgsIDB4MDAsIDB4MjMsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwOCwgMHhjMCwgMHgyMywgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDE4LCAweDA4LCAweDgwLCAweDIzLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHg0MywgMHgwZCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDM4LCAweDAyLCAweDgwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDIsIDB4MDAsIDB4ODIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0MCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweGVkLCAweDBjLCAweDEyLCAweDAxLCAweDAwLCAweDM0LCAweDAyLCAweDAwLCAweDg2LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhhMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDQ2LCAweDBkLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwZCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgwMCwgMHhhOCwgMHgxYiwgMHg4MCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg1OCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHg4MCwgMHgwMiwgMHhmMiwKLQkweDAwLCAweDAwLCAweDJiLCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDIsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg0ZiwgMHgwZCwgMHg5YSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHhiNCwKLQkweDEwLCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDhkLCAweDJmLCAweDMxLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4YzAsIDB4NmUsIDB4MzQsCi0JMHgyZCwgMHgwMCwgMHhhMiwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4YTksIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1YSwgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDU2LCAweDBkLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4NWEsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg1YSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweDU4LCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4NWMsIDB4MGQsIDB4MDQsIDB4OTgsIDB4MDEsIDB4NjQsIDB4ODgsIDB4MWIsIDB4ODcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwYSwgMHgxMSwgMHgwMCwgMHg5MCwgMHgwMSwgMHgwOCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzUsIDB4ODUsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg4NSwgMHhiMCwKLQkweDMwLCAweDAwLCAweGE0LCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg2YywgMHgwZCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg4NSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDY4LCAweDBkLCAweDFmLCAweDQwLCAweDAyLCAweDg0LCAweGU2LCAweDAxLCAweDAwLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4NmMsIDB4MGQsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MjIsIDB4ODEsIDB4MmYsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHg2YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHg5NSwKLQkweDAwLCAweDAwLCAweDZhLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg4MCwgMHgwMiwgMHg0MCwgMHg2OCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjNSwgMHg4NSwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgzNiwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg3OSwgMHgwZCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDdkLCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4N2QsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHg3YiwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDg4LCAweDBkLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4MiwgMHgwZCwgMHgxZiwgMHg0MCwgMHgwMiwgMHg4NCwgMHhlNiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDg2LCAweDBkLCAweDFkLCAweDAxLCAweDAwLCAweGY4LCAweDIyLCAweDgxLCAweDJmLCAweGI0LAotCTB4MDAsIDB4MDAsIDB4ODYsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4OTUsCi0JMHgwMCwgMHgwMCwgMHg4NCwgMHgwZCwgMHgxZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDMwLCAweDAwLCAweDg4LCAweDBkLCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNCwgMHhkNSwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDA5LCAweGM1LCAweDg1LCAweDMwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGM1LCAweDg1LCAweGQwLAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NjgsIDB4MDIsIDB4YzUsIDB4ODUsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGEyLCAweDA3LCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg5MywgMHgwZCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NTgsIDB4MDEsIDB4ODAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhhMiwgMHgwNywgMHgwOCwgMHg1OSwgMHgwMSwgMHhlYywgMHgwNiwgMHhmYiwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDgwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHg5YywgMHgwZCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweGVjLCAweDA2LCAweGZiLCAweDZlLCAweDNhLAotCTB4MjAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg5ZCwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg3MiwgMHhlMCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODEsIDB4MmYsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHg5ZiwgMHgwZCwgMHgwNiwgMHgwMywgMHgwMSwgMHg4MCwgMHgxMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDE4LCAweDAwLCAweDlkLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDA4LCAweDAwLCAweDM2LCAweDkyLAotCTB4MTksIDB4MDAsIDB4OWQsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDgsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhmMiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4OGQsIDB4MmYsIDB4MzEsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDIwLCAweDAwLCAweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NSwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGM3LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU4LCAweDAxLCAweDAwLCAweGY0LAotCTB4MDAsIDB4MDAsIDB4YWQsIDB4MGQsIDB4MDQsIDB4MDIsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4YzAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOSwgMHgwMSwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4YzAsIDB4YWQsIDB4MGQsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweGNhLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4YWQsIDB4MGQsIDB4OWYsIDB4MDEsIDB4MDAsIDB4MTQsIDB4MTgsIDB4NDAsIDB4ODEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhiMiwgMHgwZCwgMHgzZCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHg4NSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGIyLCAweDBkLCAweDM0LCAweDAwLCAweDAwLCAweGY4LCAweGQyLCAweDgxLCAweDJmLCAweGI1LAotCTB4MzQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhhNCwgMHgwNywgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDJhLCAweDAwLCAweGE0LCAweDA3LCAweDEyLCAweDAxLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU0LCAweDU0LCAweDAxLCAweGIwLCAweDAyLCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4MzIsCi0JMHgwMCwgMHhjMCwgMHhiYywgMHgwZCwgMHgxOCwgMHgwMSwgMHgwMCwgMHgwYywgMHhhOCwgMHhjZCwgMHgzZSwgMHhiMiwKLQkweDIwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA4LCAweDgwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OWQsIDB4MDMsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MmMsIDB4NzIsIDB4ZTAsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDIwLCAweDAwLCAweDgwLCAweGRmLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDM3LCAweDMyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDEsIDB4MzgsIDB4ODgsIDB4MWIsIDB4MTYsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkZSwgMHg0OCwgMHgwMSwgMHgyOCwgMHg4OCwgMHgwNCwgMHg2ZSwgMHgzMCwKLQkweDAwLCAweDAwLCAweGMxLCAweDBkLCAweDgwLCAweDVmLCAweDAxLCAweDgwLCAweDcyLCAweGMwLCAweDZlLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzMsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHhjMywgMHgwZCwgMHg4MCwgMHg1ZiwgMHgwMSwgMHg4MCwgMHg2MiwgMHhjMCwgMHg2ZSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweGE5LCAweDgxLCAweDkyLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4Y2IsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4ZjQsCi0JMHgwMCwgMHgwMCwgMHhjNiwgMHgwZCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YzksIDB4MGQsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhjOSwgMHgwZCwgMHgzNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhkMiwgMHg4MSwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweGIyLCAweDgwLCAweDJmLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MDcsIDB4MDQsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgyYSwgMHgwMCwgMHhhNCwgMHgwNywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4ODAsIDB4MDEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweGMwLCAweGQyLCAweDBkLCAweDE4LCAweDAxLCAweDAwLCAweDBjLCAweGE4LCAweGNkLCAweDNlLCAweGIyLAotCTB4MDAsIDB4ODIsIDB4MDAsIDB4MDAsIDB4ZDYsIDB4MDEsIDB4MDAsIDB4MDgsIDB4MDgsIDB4ODAsIDB4MzYsIDB4MzIsCi0JMHgxZCwgMHgwMCwgMHhhMSwgMHgwMywgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YzIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg4MCwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU2LCAweDAxLCAweDc4LCAweDA5LCAweGMwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgxMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGVlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MGMsIDB4MDcsIDB4ODAsIDB4OTcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweGYwLCAweGUxLCAweDBkLCAweDFkLCAweDQwLCAweDAyLCAweDAwLCAweGE4LCAweDBkLCAweDY4LCAweGIxLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxZSwgMHg0MCwgMHgwMiwgMHg4NCwgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDA1LCAweDgwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4ZGUsIDB4MGQsIDB4YjYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHhjMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2NCwgMHhhMiwgMHgwZCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGRhLCAweDBkLCAweGE2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZTEsIDB4MGQsIDB4YjUsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNSwgMHgwMCwgMHg4MCwgMHhhMCwgMHgzNiwgMHgwYiwgMHg2YSwgMHgzNSwKLQkweDAwLCAweDAwLCAweGU2LCAweDBkLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1NCwgMHgwMSwgMHhiMCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4ZTksIDB4MDEsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhlZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMiwKLQkweDAwLCAweDAwLCAweGViLCAweDBkLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGJjLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgzOSwgMHgwYiwgMHgyZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweGYzLCAweDgxLCAweDk3LCAweDM0LAotCTB4MDAsIDB4MDAsIDB4ZjEsIDB4MGQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI5LCAweDA1LCAweDMwLCAweDMwLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDMsIDB4YTQsIDB4MDMsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzNCwgMHgzMywgMHgwYiwgMHgyZiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGE0LCAweDAzLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhiOSwgMHgwNSwgMHgzMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4OGEsIDB4MDIsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHg4MCwgMHg5NywgMHgzMiwKLQkweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4MjksIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGZmLCAweDBkLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDJmLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDAsIDB4MmMsIDB4MzIsCi0JMHhkOSwgMHgwMiwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHg5NywgMHhiYywKLQkweDQ2LCAweDAzLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHhmMSwgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDE4LCAweDBlLCAweDAyLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDQyLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4YzEsIDB4ODUsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgxOCwgMHgwZSwgMHgxZiwgMHg0MCwgMHgwMiwgMHgwOCwgMHhiOSwgMHhiZiwgMHg2OCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDA4LCAweDBlLCAweDgwLCAweDQxLCAweDAyLCAweDgwLCAweGUyLCAweDgxLCAweDY4LCAweGI2LAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NzksIDB4NjEsIDB4ODAsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkMiwgMHgyMSwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYSwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDAyLCAweDg4LCAweGU2LCAweDIxLCAweDkxLCAweDc5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MTksIDB4YTAsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgxOCwgMHgwZSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHhkMiwgMHhmZiwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDBjLCAweDBlLCAweDJjLCAweDQxLCAweDAyLCAweDc4LCAweGY5LCAweDgxLCAweDY4LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YjksIDB4ODEsIDB4OTcsIDB4MzQsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDU5LCAweGMwLCAweDg1LCAweGQ3LAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MjksIDB4MWEsIDB4ZmYsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMiwgMHgwMCwgMHhiOSwgMHgxYiwgMHg5MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDQxLCAweDAyLCAweDg4LCAweDE2LCAweGEwLCAweDk3LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDUsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MjcsIDB4MjQsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4YSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDU4LCAweGYyLCAweGMxLCAweDM4LCAweDc0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwOCwgMHgwMCwgMHgyMywgMHgwZSwgMHgxZSwgMHgwMSwgMHgwMCwgMHgzNCwgMHg3OSwgMHg2MSwgMHg4MCwgMHhiOSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDM4LCAweDAwLCAweDAwLCAweDU0LCAweDFmLCAweDQwLCAweGY1LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4NDAsIDB4MDIsIDB4MDAsIDB4MDksIDB4NDAsIDB4NjgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhiOSwgMHgzZiwgMHg5MCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAxLCAweGUwLCAweDI2LCAweDI0LCAweDZlLCAweDNhLAotCTB4MDgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4YTQsIDB4ZmUsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwNSwgMHg5MCwgMHhkMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweDA1LCAweDkwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4MDUsIDB4OTAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDIsIDB4MjEsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZSwgMHg0MSwgMHgwMiwgMHg4NCwgMHhlNiwgMHg2MSwgMHg5MywgMHg3OSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyMCwgMHgwMSwgMHg4MCwgMHg4MiwgMHhkYiwgMHg5MCwgMHg3YywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIwLCAweDAxLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHhkYiwgMHg5MCwgMHg3YywKLQkweDAwLCAweDAwLCAweDJkLCAweDBlLCAweDA2LCAweDIxLCAweDAxLCAweDgwLCAweDgyLCAweDFiLCAweDkwLCAweGJjLAotCTB4MjYsIDB4MDAsIDB4MmUsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgyNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDEyLCAweDAwLCAweDJjLCAweDNhLAotCTB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHgwMCwgMHg5MiwgMHhkMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmYsIDB4YTAsIDB4MDEsIDB4NzgsIDB4ODksIDB4MWIsIDB4OTIsIDB4N2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwMSwgMHg3OCwgMHg4OSwgMHg5YiwgMHg5NywgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAyLCAweDAwLCAweGY5LCAweGJhLCAweDZlLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MzksIDB4MGUsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzOSwgMHgwZSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweDhkLCAweDk3LCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDEsIDB4MDIsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTcsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHhmMiwgMHg4MCwgMHgyZiwgMHg3NCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZGEsIDB4NWIsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4NDAsIDB4ZWQsIDB4MzIsCi0JMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQwLCAweDg5LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4NDIsIDB4MGUsIDB4MDgsIDB4NWQsIDB4MDEsIDB4ZWMsIDB4MTYsIDB4NDAsIDB4ODksIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg0MiwgMHgwZSwgMHgwYiwgMHg1ZCwgMHgwMSwgMHhlYywgMHgwNiwgMHgwMCwgMHgwMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDQyLCAweDBlLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YjIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk4LCAweDAxLCAweDc4LCAweDg5LCAweDFiLCAweDg3LCAweDNjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YTEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg0NywgMHgwZSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHg4NiwgMHhiYywKLQkweDAwLCAweDAwLCAweDBhLCAweDExLCAweDAwLCAweDkwLCAweDAxLCAweDA4LCAweDA5LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDEsIDB4ZTAsIDB4MTYsIDB4MjAsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgzZiwgMHgxMSwgMHgzMywgMHgwMSwgMHgwMCwgMHhmOCwgMHg4MiwgMHg4MCwgMHgyZiwgMHhiNCwKLQkweDAwLCAweDAwLCAweDNmLCAweDExLCAweDlmLCAweGYwLCAweDAxLCAweDgwLCAweDgyLCAweGRiLCAweDg3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4M2YsIDB4MTEsIDB4OWYsIDB4ZjgsIDB4MDEsIDB4ODAsIDB4MjIsIDB4MjEsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHhlZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDAxLCAweGUwLCAweDA2LCAweGMwLCAweDg3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4M2YsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA4LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkxLCAweGJjLAotCTB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHgxNCwgMHhhOSwgMHg5YiwgMHg5MSwgMHhkOSwKLQkweDE1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MTQsIDB4ODksIDB4MGQsIDB4NmUsIDB4MzcsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgzMCwgMHgwMSwgMHgxNCwgMHg4OSwgMHg1YiwgMHg5MSwgMHhkMiwKLQkweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4MmQsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgyMSwgMHgwMSwgMHg4MCwgMHg4MiwgMHg5YiwgMHg5MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAxLCAweDc4LCAweDA5LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDIsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3MSwgMHgwZSwgMHgwNCwgMHgyMSwgMHgwMSwgMHgzMCwgMHg2OSwgMHgyNCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweDAwLCAweGE5LCAweDliLCAweDkxLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4NjYsIDB4MGUsIDB4MWYsIDB4NDAsIDB4MDIsIDB4MjQsIDB4MDksIDB4NDAsIDB4NjgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg1YywgMHgwZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHg0MSwgMHg5MiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGI5LCAweDdmLCAweDkyLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4M2MsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHhhNCwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwOCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg5OSwgMHhhNCwgMHhmZSwgMHhkOCwKLQkweDA4LCAweDAwLCAweDVjLCAweDBlLCAweDEyLCAweDAxLCAweDAwLCAweDY4LCAweDkyLCAweGE0LCAweGZlLCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDZiLCAweDBlLCAweDM4LCAweDUwLCAweDAxLCAweDc4LCAweDA5LCAweDgwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4NmIsIDB4MGUsIDB4MDQsIDB4MjgsIDB4MDEsIDB4ODAsIDB4MDIsIDB4MDAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgyOCwgMHgwMSwgMHg3OCwgMHhlOSwgMHgyNSwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA4LCAweDAxLCAweDAwLCAweDc4LCAweDY5LCAweGE0LCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4NjYsIDB4MjQsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHgwZSwgMHgzOCwgMHgyMCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg5MywgMHhiMiwKLQkweDAwLCAweDAwLCAweDZmLCAweDBlLCAweDAwLCAweDI4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4NzcsIDB4MGUsIDB4MzgsIDB4NTEsIDB4MDEsIDB4MDAsIDB4YTksIDB4OWIsIDB4OTEsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHg3NSwgMHgwZSwgMHgwNCwgMHg0MSwgMHgwMiwgMHgwOCwgMHhiOSwgMHhmZiwgMHg2OCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDQxLCAweDAyLCAweDgwLCAweGUyLCAweGMxLCAweDY4LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4NzIsIDB4MGUsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4NCwgMHgwZSwgMHg5ZiwgMHgzMSwgMHgwMSwgMHhlMCwgMHg2NiwgMHgyNCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDg0LCAweDBlLCAweDAwLCAweDMwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4ODEsIDB4MGUsIDB4MDQsIDB4MjgsIDB4MDEsIDB4MDQsIDB4MDksIDB4MDAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHg1MCwgMHgwMSwgMHg4MCwgMHhhMiwgMHg1YiwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDdmLCAweDBlLCAweDlmLCAweDAxLCAweDAwLCAweDAwLCAweDE5LCAweDI0LCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4NjYsIDB4MjQsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgyNCwgMHgwMCwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDAxLCAweGU4LCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4OTMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGUsIDB4MGUsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4NCwgMHgwZSwgMHgwNCwgMHg0MSwgMHgwMiwgMHgwOCwgMHhiOSwgMHhmZiwgMHg2OCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDQxLCAweDAyLCAweDgwLCAweGUyLCAweGMxLCAweDY4LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ODEsIDB4MGUsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHg4OCwgMHgwZSwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMiwgMHgyNCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhlLCAweDBlLCAweDgwLCAweDQwLCAweDAyLCAweDgwLCAweGYyLCAweGMxLCAweDY4LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDIsIDB4OGMsIDB4YjYsIDB4YzEsIDB4NjgsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHg4ZSwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHg5NCwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDc4LCAweDM5LCAweDlhLCAweGZlLCAweDM4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg5MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDczLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDgwLCAweDk3LCAweGQyLAotCTB4MDgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4NDAsIDB4MDIsIDB4NjgsIDB4MTIsIDB4OWEsIDB4ZmUsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHg4MSwgMHgwZSwgMHgwNCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgyOSwgMHgyNCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NzksIDB4MGIsIDB4MTYsIDB4MzgsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg3OSwgMHgwYiwgMHgxNiwgMHgzOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDQyLCAweGU0LCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YTksIDB4MDAsIDB4MmQsIDB4MzcsCi0JMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg4OSwgMHg0ZCwgMHg5MCwgMHgzYSwKLQkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDgyLCAweDBkLCAweDkxLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MTIsIDB4YTQsIDB4MmEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg5OSwgMHgwZSwgMHg4MCwgMHg0MCwgMHgwMiwgMHg4MCwgMHhlMiwgMHgwMSwgMHg3YywgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQwLCAweDAyLCAweDc4LCAweGI5LCAweDNmLCAweDdjLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTksIDB4YTUsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg5YiwgMHgwZSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHgxMCwgMHgxOSwgMHgwMCwgMHg5MSwgMHhiYywKLQkweGI3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OTQsIDB4MGUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ZTQsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhjOSwgMHgyNCwgMHg5MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweGE0LCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4NjYsIDB4MjQsIDB4NmUsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDIwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDkzLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDE4LCAweDAwLCAweGE1LCAweDBlLCAweDFmLCAweDQxLCAweDAyLCAweDc4LCAweDg4LCAweGNkLCAweDY4LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MTIsIDB4MDAsIDB4MmMsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHhhOCwgMHgwZSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg2MiwgMHg4MCwgMHg4NywgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDQxLCAweDAyLCAweDgwLCAweGIyLCAweGZmLCAweDY4LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4MDAsIDB4NDAsIDB4MDIsIDB4ODAsIDB4MDIsIDB4NDAsIDB4NjgsIDB4OTIsCi0JMHgwMywgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHg0MCwgMHgwMiwgMHgwMCwgMHgzOCwgMHgxYSwgMHhmZiwgMHhiOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDFmLCAweDQwLCAweDAyLCAweDA0LCAweGI4LCAweGZmLCAweDY4LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDIsIDB4MDAsIDB4YjgsIDB4MWIsIDB4ODAsIDB4M2EsCi0JMHgyZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDAwLCAweDgwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGI2LCAweDBlLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YjMsIDB4MGUsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAotCTB4MWQsIDB4MDAsIDB4YjYsIDB4MGUsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHhiMCwgMHgwZSwgMHg5ZiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgxOCwgMHgwMCwgMHg4OCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg2OCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDcwLCAweDAwLCAweDE4LCAweDA4LCAweDAwLCAweDZlLCAweGIyLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhhOSwgMHg2MCwgMHg4MSwgMHhkOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweGEwLCAweDgxLCAweDdjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHhjMSwgMHgwZSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YzEsIDB4MGUsIDB4MWIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg2MiwgMHhlMCwgMHg4MywgMHg3YywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweDE0LCAweDE4LCAweDQwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODAsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0MCwgMHhhMiwgMHg4ZCwgMHgzOSwgMHg3MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHhlNCwgMHgwNiwgMHhjMCwgMHgyZCwgMHgzMiwKLQkweGVlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAxLCAweGUwLCAweDg2LCAweDhkLCAweDJmLCAweDMxLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4YjMsIDB4ZTQsIDB4MzksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhjZCwgMHgwZSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YjksIDB4MDUsIDB4MzAsIDB4MzAsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMywgMHhhNSwgMHgwMywgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDM0LCAweDMzLCAweDBiLCAweDJmLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4NzgsIDB4ZDksIDB4MDEsIDB4MzAsIDB4NzYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGI5LCAweDA1LCAweDMwLCAweDMwLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ZTMsIDB4YTUsIDB4MDMsIDB4NzksCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGQ4LCAweDBlLCAweDIwLCAweDAwLCAweDAxLCAweDJjLCAweDA5LCAweGMwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZDksIDB4MGUsIDB4MDAsIDB4MTYsIDB4ODYsIDB4Y2MsIDB4MDYsIDB4YzAsIDB4OTIsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHg4NiwgMHhjYywgMHgwNiwgMHhjMCwgMHg5MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweDYyLCAweDhlLCAweDkyLCAweDUyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGRmLCAweDBlLCAweDA0LCAweDAwLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NDIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHhkZiwgMHgwZSwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHgwMiwgMHgwMCwgMHgzNiwgMHg5MiwKLQkweDYwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweGIxLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDMsIDB4MDAsIDB4MzgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMiwgMHgwMCwgMHgzMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDIyLCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDI0LCAweGQ4LCAweDAxLCAweDMwLCAweGI2LAotCTB4ZTQsIDB4MGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ODIsIDB4NGQsIDB4ODIsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweGRmLCAweDBlLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGMwLCAweDAyLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MGYsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlYywgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0OCwgMHgwNSwgMHgzMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MGUsIDB4MzIsIDB4MGYsIDB4MDEsIDB4YmMsIDB4MDgsIDB4YzAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMSwgMHhkYywgMHgwMiwgMHg0MCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGYwLCAweDBlLCAweDFmLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZjYsIDB4MGUsIDB4MWQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHhlMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAotCTB4MjAsIDB4Y2QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHg4NywgMHhhMCwgMHhlYSwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweGVhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDgsIDB4MDIsIDB4YzAsIDB4MzgsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhlMCwgMHgyNiwgMHgwMSwgMHg2ZSwgMHgzNSwKLQkweDAwLCAweDAwLCAweGZiLCAweDBlLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDhiLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MGUsIDB4ODIsIDB4MzIsCi0JMHgwMCwgMHhlMCwgMHgwMywgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHhhMiwgMHgwZCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4MDAsIDB4MzIsCi0JMHhiNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDAwLCAweDJkLCAweDM3LAotCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4OTcsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg5OSwgMHgwMCwgMHg4MiwgMHgzNywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDEwLCAweDAwLCAweDAwLCAweDg3LCAweGJmLCAweDk3LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4ODksIDB4NjAsIDB4MzgsIDB4MzIsCi0JMHgxZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHhhNCwgMHgxNywgMHgzOCwKLQkweDAwLCAweDAwLCAweDA5LCAweDBmLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDhiLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MGEsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZjMsIDB4NDEsIDB4OTAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwZiwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDMyLCAweDgwLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4MDUsIDB4MzAsIDB4MzAsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgwMywgMHhhNCwgMHgwMywgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE5LCAweGNlLCAweDJjLCAweDMyLAotCTB4MDAsIDB4ZTAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4MGQsIDB4OTAsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAxLCAweGRjLCAweDAyLCAweDQwLCAweDZlLCAweDMyLAotCTB4MWQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YTQsIDB4MTcsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgzMiwgMHg4MCwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDEwLCAweDAxLCAweDgwLCAweDIyLCAweDAxLCAweDZlLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MTgsIDB4MGYsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgyMCwgMHgwZiwgMHgxZCwgMHgxMCwgMHgwMSwgMHhmOCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweGUwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4MDAsIDB4MmQsIDB4MzcsCi0JMHgyMCwgMHhjZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4NywgMHg4ZCwgMHg5NywgMHgzYSwKLQkweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDM3LCAweDhiLCAweGVhLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ZWEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDEsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHhlZSwgMHhmZiwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyZiwgMHhiMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4ZWUsIDB4ZmYsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTEsIDB4MDEsIDB4ODAsIDB4ODIsIDB4MGQsIDB4NmUsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMSwgMHhmOCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDAxLCAweGRjLCAweDAyLCAweDQwLCAweDZlLCAweDcyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDg5LCAweDRkLCAweDBkLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4MGIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MmIsIDB4MGYsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NGMsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweDJjLCAweDBmLCAweDEyLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTksIDB4MDIsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgyOCwgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHgwNCwgMHgxOSwgMHg0MCwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgzYiwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDM1LCAweDBmLCAweDEyLCAweDAxLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgzYSwgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDIyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ODgsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgzNSwgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHhlOCwgMHgwMiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDM0LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NmMsIDB4ODgsIDB4MWMsIDB4ODMsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA4LCAweDUwLCAweDAwLCAweDE4LCAweGM4LCAweDIwLCAweDcyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ODEsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHgzYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDIwLCAweDg4LCAweDAxLCAweDgyLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDM2LCAweGJjLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NzcsIDB4NGEsIDB4MDksIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHg3MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDg2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4YzAsIDB4ODQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhhMywgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhkOCwgMHhhMCwgMHg4MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA5LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4ZDgsIDB4YTAsIDB4ODEsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg2NywgMHgwZiwgMHgwNCwgMHgwMCwgMHgwMCwgMHgzYywgMHhkOCwgMHhlMCwgMHg4MywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NTgsIDB4MGYsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMiwgMHhjMCwgMHgzOCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDYwLCAweDBmLCAweDUxLCAweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDJkLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDVlLCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDcyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg1OSwgMHgwZiwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweGU4LCAweDAyLCAweGMwLCAweDIxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NzIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDY1LCAweDBmLCAweDJhLCAweDAxLCAweDAwLCAweDAwLCAweGQ4LCAweDIwLCAweDgwLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4NjQsIDB4MGYsIDB4MTIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDg0LCAweDMyLAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwMCwgMHgwMCwgMHhiNywgMHgwZSwgMHgwMCwgMHg2MCwgMHgwMCwgMHg2YywgMHgwOCwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDRkLCAweDBmLCAweDRkLCAweDAwLCAweDAwLCAweDAwLCAweDY3LCAweGUwLCAweDgzLCAweDllLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgxOCwgMHgwMCwgMHgzNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHgwYSwgMHgwMywgMHhmOSwKLQkweDFkLCAweDAwLCAweDZlLCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg2OCwgMHgwZiwgMHg2NywgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MWQsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YTQsIDB4MTcsIDB4YjgsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgwMiwgMHg3OCwgMHgzOSwgMHg5YSwgMHhmZSwgMHgzOCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4YmEsIDB4OTcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg4MCwgMHg5NywgMHhkMiwKLQkweDA4LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDQwLCAweDAyLCAweDY4LCAweDEyLCAweDlhLCAweGZlLCAweGI4LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MGIsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDAwLCAweDAwLCAweDg2LCAweDBmLCAweDFmLCAweDAwLCAweDAwLCAweDZjLCAweGQ4LCAweGUwLCAweDg2LCAweGJhLAotCTB4MDAsIDB4MDAsIDB4YTMsIDB4MGUsIDB4NTEsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHg3OSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHgwOCwgMHg0MCwgMHg4MCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDg2LCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDdlLCAweDBmLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGUyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4N2UsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MzIsIDB4ODAsIDB4ODcsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhlMiwgMHg4MCwgMHgyZiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDRjLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDgxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ODQsIDB4MGYsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4MywgMHgwZiwgMHgxMiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4NDAsIDB4ODQsIDB4MzIsCi0JMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweGI3LCAweDBlLCAweDAwLCAweDYwLCAweDAwLCAweDZjLCAweDA4LCAweDAwLCAweDZlLCAweGYyLAotCTB4MDAsIDB4MDAsIDB4NGQsIDB4MGYsIDB4NGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NjcsIDB4ZTAsIDB4ODMsIDB4OWUsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGE3LCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHhhOCwgMHg2MCwgMHg4YSwgMHgzYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDIxLCAweDAxLCAweDgwLCAweDgyLCAweDViLCAweDhhLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGQsIDB4MGYsIDB4MmYsIDB4YTgsIDB4MDEsIDB4MjAsIDB4OTksIDB4MjIsIDB4NmUsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHgyZiwgMHgwZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhmMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAyLCAweDgwLCAweDgyLCAweDFiLCAweDkyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4OTIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHgwMSwgMHhlOCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDkyLCAweDBmLCAweDIzLCAweDIxLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweGIyLAotCTB4M2MsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MmMsIDB4ODIsIDB4Y2QsIDB4MmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgzMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDljLCAweDBmLCAweDA0LCAweDIxLCAweDAwLCAweGUwLCAweDA2LCAweDgwLCAweDgxLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg5YSwgMHgwZiwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDk5LCAweDBmLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHgzMiwKLQkweDFkLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweGE0LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4YjcsIDB4MGUsIDB4MDAsIDB4NjAsIDB4MDAsIDB4NmMsIDB4MDgsIDB4MDAsIDB4NmUsIDB4ZjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDAwLCAweGU4LCAweDA2LCAweDQwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MTAsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4YzAsIDB4ODYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgxOSwgMHgwMCwgMHhlMCwgMHgwNiwgMHhjMCwgMHg4NCwgMHg3MiwKLQkweDAwLCAweDAwLCAweGExLCAweDBmLCAweDEyLCAweDAxLCAweDAwLCAweDAwLCAweDA5LCAweGMwLCAweDIxLCAweGIyLAotCTB4MTgsIDB4MDAsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDMsIDB4ZjksCi0JMHgxZCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhhNCwgMHgxNywgMHhiOCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweDc1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ZDgsIDB4ZTAsIDB4ODMsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHhjMSwgMHgzOCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxMiwgMHgwMCwgMHgyYywgMHgzYSwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHgwOSwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4ZWUsIDB4MDUsIDB4YWYsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4NGQsIDB4ZjUsIDB4YmMsCi0JMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGIxLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA5LCAweGMwLCAweDA5LCAweDkyLAotCTB4MDAsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg4MCwgMHgwOSwgMHgzMiwKLQkweDFlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYwLCAweGMwLCAweDg3LCAweGNkLCAweDAwLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4NjAsIDB4YzAsIDB4MDcsIDB4ODAsIDB4OTcsIDB4MzIsCi0JMHgwMCwgMHgzMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHgyYSwgMHgzYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDVjLCAweDUyLCAweDgxLCAweDk3LCAweGI0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MjQsIDB4OTAsIDB4M2EsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHgwZCwgMHg5MCwgMHgzNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDE5LCAweDQwLCAweDkwLCAweDNjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4NTIsIDB4ODIsIDB4MmEsIDB4M2EsCi0JMHgwMCwgMHgwOCwgMHhiMSwgMHgwZiwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4ZCwgMHgyYSwgMHhiYywKLQkweDAwLCAweDAwLCAweGMyLCAweDBmLCAweDA2LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MjAsIDB4YjIsCi0JMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjMCwgMHg4NywgMHhjZCwgMHgwMCwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweGMwLCAweDA3LCAweDgwLCAweDk3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NWMsIDB4NTIsIDB4ODEsIDB4MmEsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOSwgMHgyNCwgMHg5MCwgMHgzYSwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDg5LCAweDBkLCAweDkwLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4YmIsIDB4MGYsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MDQsIDB4MTksIDB4NDAsIDB4OTAsIDB4YmMsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg4OSwgMHgwZCwgMHg5MCwgMHgzNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBlLCAweDgwLCAweDk3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MDIsIDB4ODAsIDB4OTcsIDB4YjIsCi0JMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyNCwgMHg4OSwgMHgwZCwgMHg5MCwgMHgzNiwKLQkweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDg5LCAweDRkLCAweDkyLCAweDNjLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4NGQsIDB4OTIsIDB4MzYsCi0JMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyYywgMHg4OSwgMHg0ZCwgMHg5MiwgMHgzMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDE4LCAweDliLCAweDgxLCAweGIyLCAweGU0LCAweDc4LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4OWIsIDB4OGQsIDB4YjcsIDB4ZTQsIDB4NzgsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhNCwgMHgwZSwgMHg4MCwgMHg5NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI5LCAweDI0LCAweDkwLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NTksIDB4MDAsIDB4OTAsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgwZiwgMHg5NSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHgyNCwgMHg5MCwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhlYywgMHgwZiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg3OCwgMHhkOSwgMHgwMSwgMHgzMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweGMwLCAweDI5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4YjIsIDB4NDUsIDB4MjgsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHhkZCwgMHgwZiwgMHg4NiwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwOSwgMHg4MCwgMHgyZiwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDA5LCAweDQwLCAweDgxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAyLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4ODAsIDB4OTIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhkYywgMHgwZiwgMHgwNCwgMHgwNywgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweGU3LCAweDBmLCAweGMzLCAweDA3LCAweDAxLCAweGVjLCAweGI2LCAweGU0LCAweDZlLCAweDlhLAotCTB4MDAsIDB4MDAsIDB4ZTcsIDB4MGYsIDB4MDAsIDB4MDYsIDB4MDEsIDB4ZWMsIDB4YjYsIDB4ZTQsIDB4NmUsIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg1MiwgMHg4MCwgMHg5MCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDA5LCAweDA1LCAweDgwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmNCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDhhLCAweDAyLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4ODAsIDB4OTIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMiwgMHhjMSwgMHg5MiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGZhLCAweDkyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4OTIsIDB4ZmEsIDB4OTIsIDB4YmMsCi0JMHg0NCwgMHgwMCwgMHgyYywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHhkMiwKLQkweDIxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4OTIsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGVjLCAweDBmLCAweDA0LCAweDAxLCAweDAwLCAweDc4LCAweGQ5LCAweDAxLCAweDMwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZDQsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4YjIsIDB4NDUsIDB4MjgsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgyMiwgMHg4MCwgMHg5NywgMHg3YywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHhjMCwgMHhlOCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDAyLCAweGMwLCAweGU4LCAweDMyLAotCTB4MDIsIDB4MDAsIDB4ZjEsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhhYiwgMHhlNCwgMHhiMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGY2LCAweDBmLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDRhLCAweGQwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweGY5LCAweDBmLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweGY4LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDA0LCAweGNkLCAweDRhLCAweGQwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YzIsIDB4NGEsIDB4ZDAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgzNCwgMHhiMCwgMHhiYSwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGMyLCAweDRhLCAweGQwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4ZmQsIDB4MGYsIDB4YjAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDUyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MjIsIDB4MDAsIDB4MmIsIDB4YjcsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHg4NCwgMHhjMCwgMHgzNywgMHhhYywgMHhiMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDBjLCAweDBiLCAweDAwLCAweDAwLCAweDMyLAotCTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4YTksIDB4NGQsIDB4YjAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwOCwgMHgxMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhiMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweGIwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4NjksIDB4ODEsIDB4OTcsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NCwgMHgwOCwgMHgwYiwgMHgwMCwgMHg3YywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LCAweDI1LCAweDAxLCAweDMyLAotCTB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4MmEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhiMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGQwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4NTQsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDBlLCAweDEwLCAweGIwLCAweDAwLCAweDAwLCAweGEwLCAweDAyLCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YWIsIDB4ZTQsIDB4YjAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgxMywgMHgxMCwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhkMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHgxNiwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHhmOCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweGY4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwZCwgMHg0MCwgMHhkMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGQwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MWQsIDB4MTAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MzQsIDB4YjAsIDB4YmEsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHhkMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDFhLCAweDEwLCAweGIwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MGQsIDB4NDAsIDB4ZDAsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgyOCwgMHgwOSwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDAwLCAweDAwLCAweDFkLCAweDEwLCAweGIwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDAwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4ODQsIDB4YzAsIDB4MzcsIDB4YWMsIDB4YjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwYywgMHgwYiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweGE5LCAweDRkLCAweGIwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MjUsIDB4MTAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4YjAsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgxMiwgMHg0MCwgMHhiMCwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDY5LCAweDgxLCAweDk3LCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDgsIDB4MGIsIDB4MDAsIDB4N2MsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNywgMHgyNSwgMHgwMSwgMHgzMiwKLQkweDAwLCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDg3LCAweDhkLCAweDJhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4YjAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhkMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweGYyLCAweGMxLCAweDM4LCAweDU0LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDQxLCAweDAyLCAweDgwLCAweDA2LCAweGMwLCAweDkyLCAweDUyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4OTIsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NzMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTcsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhjNSwgMHg5MiwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBiLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4M2EsCi0JMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweGMwLCAweDkyLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTQsIDB4MDEsIDB4YjAsIDB4MDIsIDB4YzAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHg4MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwOCwgMHgwOCwgMHg4MCwgMHgzNiwgMHg1MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MzgsIDB4ODAsIDB4ODcsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHg4NywgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDZlLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHhlMCwgMHgxNiwgMHgyMCwgMHg2ZSwgMHgzYywKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweGQyLCAweDAxLCAweDAwLCAweDc4LCAweGU5LCAweGU1LCAweDgzLCAweDM5LAotCTB4MTgsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4NDEsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4YTEsIDB4OTcsIDB4YjksCi0JMHgwMCwgMHgwMCwgMHg0MywgMHgxMCwgMHgzNiwgMHg1MSwgMHgwMSwgMHhlOCwgMHgxNiwgMHhlMCwgMHg4MywgMHhiYywKLQkweDAwLCAweDAwLCAweDQzLCAweDEwLCAweDFkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NjIsIDB4ODEsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHg0NSwgMHgxMCwgMHgzOCwgMHgyMSwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDgwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzEsIDB4MDAsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDJjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTIsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkNSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDJjLCAweDMyLAotCTB4MDAsIDB4NDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHg0MSwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHg5MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDgsIDB4ZTgsIDB4MDEsIDB4MDAsIDB4NzQsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4NjIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHg5MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDJjLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2EsIDB4M2QsIDB4MDAsIDB4MGMsIDB4MDcsIDB4ODAsIDB4ODMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg0OCwgMHgwMiwgMHhjMCwgMHg4MCwgMHg3MiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg1NywgMHgwMSwgMHg4MCwgMHgwMiwgMHhjMCwgMHg2ZSwgMHg3YywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU3LCAweDAxLCAweGVjLCAweDA2LCAweDgwLCAweDkyLCAweDcyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhkMSwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwMywgMHgwMCwgMHgzOCwgMHhmMiwKLQkweDMzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MTksIDB4YTAsIDB4MmMsIDB4ZDksCi0JMHgwMCwgMHgwMCwgMHg2MCwgMHgxMCwgMHg5ZCwgMHgxMSwgMHgwMiwgMHgwYywgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDYxLCAweDEwLCAweDAwLCAweGYwLCAweDAxLCAweDFjLCAweDA5LCAweDAwLCAweDZlLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDEsIDB4MWMsIDB4MDksIDB4MDAsIDB4NmUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2MywgMHgxMCwgMHgyYywgMHhjZCwgMHgwMSwgMHgxOCwgMHgwOSwgMHg4MCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGM5LCAweGMxLCAweDkwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4NjcsIDB4MTAsIDB4M2IsIDB4MjksIDB4MDIsIDB4MDQsIDB4MDksIDB4ODAsIDB4NmUsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHhkNiwgMHgwMSwgMHg4MCwgMHg1MiwgMHhjMCwgMHg2ZSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ2LCAweDAxLCAweGVjLCAweDU2LCAweGMwLCAweDZlLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YjksIDB4YzEsIDB4OTAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg3NywgMHgxMCwgMHgwMCwgMHhhOCwgMHgwMSwgMHgwOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDZiLCAweDEwLCAweDlkLCAweDAxLCAweDAwLCAweDgwLCAweDE3LCAweGUwLCAweDkwLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDcsIDB4YzAsIDB4OTEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg2ZSwgMHgxMCwgMHgwMCwgMHgzOCwgMHgwMCwgMHg4MCwgMHgwNywgMHgwMCwgMHhlZSwgMHg5MiwKLQkweDAwLCAweDAwLCAweDZlLCAweDEwLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweGMwLCAweDkxLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ZWUsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHg4NiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDcxLCAweDEwLCAweDM5LCAweDA4LCAweDAwLCAweDgwLCAweDA3LCAweGMwLCAweDg1LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YzIsIDB4ODEsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHhjOSwgMHgwMSwgMHhlOCwgMHgwNiwgMHg4MCwgMHg5MSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM4LCAweDExLCAweDAwLCAweDgwLCAweDA3LCAweDQwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NzQsIDB4MTAsIDB4M2IsIDB4MjEsIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ODYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkYiwgMHgwMCwgMHgwMCwgMHg2MCwgMHgxOCwgMHgwMCwgMHg4NiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDc4LCAweDAxLCAweGUwLCAweDE2LCAweDIwLCAweDg2LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjksIDB4MDAsIDB4ODAsIDB4MDcsIDB4MDAsIDB4ODUsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDdiLCAweDEwLCAweDAyLCAweDBjLCAweDAyLCAweDgwLCAweGEyLCAweDliLCAweDkwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NzgsIDB4MjksIDB4MDAsIDB4NmUsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHg3YiwgMHgxMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhlMiwgMHhhNSwgMHg5MCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDEsIDB4NzgsIDB4NDksIDB4MjEsIDB4NmUsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHhlOSwgMHhhNSwgMHg5MCwgMHgzZiwKLQkweDAwLCAweDAwLCAweDgyLCAweDEwLCAweDA0LCAweDIwLCAweDAyLCAweDA4LCAweDg5LCAweDliLCAweDkwLCAweGJlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDIsIDB4NTgsIDB4YjgsIDB4OWIsIDB4OTAsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg0OSwgMHhhMSwgMHg5MCwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDlmLCAweDg4LCAweDAxLCAweDgwLCAweDgyLCAweDliLCAweDk3LCAweDdjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODksIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTcsIDB4NzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMiwgMHg1OCwgMHhiOCwgMHg5YiwgMHg5MCwgMHg3NiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGIsIDB4MTAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4OSwgMHgxMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHg3OCwgMHgwOSwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YiwgMHgxMCwgMHhjYSwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHg5MiwKLQkweDE1LCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDc4LCAweGU5LCAweDY1LCAweDE3LCAweGI4LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4YTIsIDB4ODAsIDB4MmYsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg0MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDJkLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NmMsIDB4ODgsIDB4MWMsIDB4ODMsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHgwMCwgMHg0YywgMHgwOCwgMHgwMCwgMHg3MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA4LCAweDUwLCAweDAwLCAweDE4LCAweGM4LCAweDIwLCAweDcyLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NjIsIDB4YTAsIDB4ODIsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg5ZiwgMHgwMCwgMHgwMCwgMHgxNCwgMHgxOCwgMHg0MCwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAyLCAweDAwLCAweDAwLCAweDIwLCAweDg4LCAweDAxLCAweDgyLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDM2LCAweGJjLAotCTB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4NzcsIDB4NGEsIDB4MDksIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHg4MiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDE5LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhkOCwgMHgwMiwgMHg0MCwgMHg4NCwgMHg3MiwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MmIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlMiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjMCwgMHg4NSwgMHhkMiwKLQkweDAwLCAweDAwLCAweGE2LCAweDEwLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweGYyLCAweGMxLCAweDg1LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4YTIsIDB4MTAsIDB4MWYsIDB4NDAsIDB4MDIsIDB4ODQsIDB4ZTYsIDB4MDEsIDB4MDAsIDB4YjQsCi0JMHgwMCwgMHgwMCwgMHhhNiwgMHgxMCwgMHgxZCwgMHgwMSwgMHgwMCwgMHhmOCwgMHgyMiwgMHg4MSwgMHgyZiwgMHhiNCwKLQkweDAwLCAweDAwLCAweGE2LCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDYyLCAweDgxLCAweDJmLCAweDk1LAotCTB4MDAsIDB4MDAsIDB4YTQsIDB4MTAsIDB4MWQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg2MiwgMHg4MSwgMHgyZiwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAyLCAweDgwLCAweDAyLCAweDQwLCAweDY4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MWYsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4YjAsCi0JMHgwMCwgMHgwMCwgMHg3MywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHhjNSwgMHg4NSwgMHhkMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDY4LCAweDAyLCAweGM1LCAweDg1LCAweGIwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NzgsIDB4MDksIDB4YzUsIDB4ODUsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwMiwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhiYSwgMHg5NywgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA2LCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweGJhLCAweDk3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MWYsIDB4YzAsIDB4ZjUsIDB4N2EsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHg3MCwKLQkweDI5LCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MDIsIDB4ODEsIDB4MmYsIDB4NzQsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDgwLCAweGE4LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJmLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4YjcsIDB4MTAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZDIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGJhLCAweDEwLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzIsIDB4ODEsIDB4MmYsIDB4MzQsCi0JMHgzYiwgMHgwMCwgMHhiYSwgMHgxMCwgMHgxMiwgMHgwMSwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4YmEsIDB4MTAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgzMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGJkLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDQyLCAweDgxLCAweDJmLCAweDk0LAotCTB4MDAsIDB4MDAsIDB4YmQsIDB4MTAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YjIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgzNCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgyYywgMHg4MiwgMHhjZCwgMHgyZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDQyLCAweDgxLCAweDJmLCAweDM0LAotCTB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OGQsIDB4MmYsIDB4NzAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4ZCwgMHgyZiwgMHg3MCwKLQkweDNhLCAweDAwLCAweDhhLCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDJjLCAweDgyLCAweGNkLCAweDJlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4MTIsIDB4ODEsIDB4MmYsIDB4NzQsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweGEyLCAweDgwLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NjUsIDB4MDEsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4MmMsIDB4YmMsCi0JMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMSwgMHhlOCwgMHg3NiwgMHgyMCwgMHg4MSwgMHgzOSwKLQkweGVlLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDgyLCAweDhkLCAweDJmLCAweDcxLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhjYiwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgzOCwgMHgwOCwgMHhjMCwgMHg2ZSwgMHhmMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQ4LCAweDAyLCAweGMwLCAweDgwLCAweDcyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGNkLCAweDEwLCAweDA0LCAweDM4LCAweDAxLCAweDc4LCAweDA5LCAweDAwLCAweDZlLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDExLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDgyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZDEsIDB4MTAsIDB4MmUsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTcsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHhlOSwgMHg4MSwgMHg5MiwgMHgzNCwKLQkweDAwLCAweDAwLCAweGQ1LCAweDEwLCAweDI3LCAweDMxLCAweDAwLCAweDAwLCAweDA3LCAweGMwLCAweDJjLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ODcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNywgMHgwMCwgMHgwMCwgMHgyOCwgMHhlOSwgMHg4MCwgMHg5MiwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDMyLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzksIDB4MDAsIDB4MDAsIDB4ZTcsIDB4YTAsIDB4OTIsIDB4NzksCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDAsIDB4OTAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHhlNCwgMHgzOCwgMHhiMiwKLQkweDE4LCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDczLCAweDBhLCAweDAzLCAweGY5LAotCTB4MDAsIDB4MDAsIDB4ZGYsIDB4MTAsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4MmQsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweGRhLCAweDEwLCAweDY3LCAweDAwLCAweDAwLCAweGY4LCAweGEyLCAweDgwLCAweDJmLCAweGI1LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MDIsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg3MiwgMHg4MCwgMHgyZCwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGQ4LCAweDAyLCAweDQwLCAweDAwLCAweDcyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgxYiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg3OSwgMHgwYSwgMHg5MSwgMHgzOSwKLQkweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDM5LCAweDBiLCAweDkxLCAweDM5LAotCTB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NTksIDB4MGEsIDB4OTEsIDB4MzksCi0JMHgwOSwgMHgwMCwgMHhlNSwgMHgxMCwgMHhmMSwgMHgwMSwgMHgwMCwgMHgxMCwgMHg2OSwgMHgwYiwgMHg5MSwgMHhiOSwKLQkweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDg2LCAweGE4LCAweDgyLCAweDhkLCAweDZjLCAweDM3LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4OTEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHhlMCwgMHgwNywgMHg0MCwgMHg5MSwgMHgzMiwKLQkweDAwLCAweDgwLCAweGViLCAweDEwLCAweDAyLCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDhkLCAweDJhLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4ZWMsIDB4MTAsIDB4ZTEsIDB4MjQsIDB4ODYsIDB4YzgsIDB4MDYsIDB4MDAsIDB4MDAsIDB4OTIsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMSwgMHgyNCwgMHg4NiwgMHhjOCwgMHg4NiwgMHg4ZCwgMHgyYSwgMHgzNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhmNCwgMHgxMCwgMHgwNCwgMHgzMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg5YiwgMHg4MSwgMHhiYywKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDBkLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4OWYsIDB4M2MsIDB4MDAsIDB4MTQsIDB4MjgsIDB4ODAsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGNhLCAweDAxLCAweDAwLCAweGY4LCAweDAyLCAweDgwLCAweDJmLCAweDM1LAotCTB4MDAsIDB4YTAsIDB4OGEsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YTIsIDB4OGQsIDB4MzksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhmNiwgMHgxMCwgMHg4MCwgMHgzOSwgMHgwMCwgMHg4MCwgMHhlMiwgMHg4MCwgMHg2ZSwgMHhiNiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDM4LCAweDAwLCAweDgwLCAweGYyLCAweDgwLCAweDZlLCAweGI2LAotCTB4MDAsIDB4ZTAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4YTIsIDB4OGQsIDB4MmYsIDB4YjAsCi0JMHgwMCwgMHhlMCwgMHhmZCwgMHgxMCwgMHgwNCwgMHgzOCwgMHgwMCwgMHg3OCwgMHg4OSwgMHg4ZCwgMHg2ZSwgMHhiMCwKLQkweDEwLCAweDAwLCAweGZkLCAweDEwLCAweDlmLCAweDAxLCAweDAwLCAweGY4LCAweGUyLCAweGE1LCAweDJmLCAweGI5LAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4ZWUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg4MSwgMHgyZiwgMHhiNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU4LCAweDAxLCAweGVjLCAweDA2LCAweGMwLCAweGVlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgyOCwgMHgwMCwgMHgxOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHg3MiwKLQkweDAwLCAweDAwLCAweDRmLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGYwLAotCTB4MDAsIDB4MDAsIDB4MmYsIDB4MGUsIDB4MDAsIDB4YTgsIDB4MDEsIDB4MjAsIDB4MDksIDB4MDAsIDB4NmUsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDA0LCAweGE5LCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4YjAsIDB4MDAsIDB4ODAsIDB4ODIsIDB4OWIsIDB4ODEsIDB4N2MsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwZCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDlmLCAweGJjLCAweDAwLCAweDE0LCAweDI4LCAweDgwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTIsIDB4ODAsIDB4MmYsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjYSwgMHgwMSwgMHgwMCwgMHhmOCwgMHg0MiwgMHg4MCwgMHgyZiwgMHgzNSwKLQkweDA4LCAweGEwLCAweDAwLCAweDAwLCAweDEyLCAweDAxLCAweDAwLCAweDQwLCAweGEyLCAweGNkLCAweDM5LCAweDcyLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4ODAsIDB4OTAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwZiwgMHgxMSwgMHgzMywgMHhjZCwgMHgwMSwgMHhiYywgMHgwOCwgMHg4MCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDRlLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDI5LCAweDIyLCAweGVlLCAweGRjLAotCTB4MDAsIDB4MDAsIDB4MTQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgxNCwgMHgxMSwgMHgwNCwgMHhiOCwgMHgwMSwgMHgyOCwgMHgwOSwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDE0LCAweDExLCAweDlmLCAweDcxLCAweDAxLCAweDgwLCAweGMyLCAweDIxLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4YTksIDB4MjQsIDB4ZWUsIDB4M2MsCi0JMHgwMCwgMHgwMCwgMHg0ZSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgxOSwgMHg4MCwgMHg5MiwgMHhkZiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDAsIDB4MDAsIDB4MjgsIDB4MTEsIDB4MDYsIDB4ODAsIDB4MDEsIDB4ODAsIDB4ODIsIDB4OWIsIDB4OTAsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MCwgMHhiYywKLQkweGVlLCAweDA1LCAweDIwLCAweDExLCAweDA2LCAweDBjLCAweDAyLCAweDgwLCAweDgyLCAweDhkLCAweDZlLCAweGJjLAotCTB4MDAsIDB4OTAsIDB4NGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgxYSwgMHgxMSwgMHhiOCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDE4LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHhlMCwgMHg5NiwgMHgyMSwgMHg2ZSwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYxLCAweDk4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMCwgMHgwMCwgMHg3OCwgMHg0OSwgMHg0MCwgMHgzYywgMHgzNywKLQkweDAwLCAweDAwLCAweDJkLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweGU5LCAweGE1LCAweDkwLCAweDlhLAotCTB4NjAsIDB4ODksIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyMywgMHgxMSwgMHhiOCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhiMCwKLQkweDAwLCAweDAwLCAweDIxLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzQsIDB4MDMsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHhlMCwgMHg5NiwgMHgyMSwgMHg2ZSwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYxLCAweDk4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyZCwgMHgxMSwgMHhhOCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgxOSwgMHg4ZiwgMHg5MCwgMHg5YSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDc4LCAweDk5LCAweGExLCAweDg5LCAweDNlLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ZTksIDB4YTUsIDB4OTAsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMSwgMHhlMCwgMHg5NiwgMHgyMSwgMHg2ZSwgMHgzYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDYxLCAweDk4LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDQsIDB4MDEsIDB4ZWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgzMCwgMHgxMSwgMHgwNiwgMHgwMCwgMHgwMCwgMHg4MCwgMHg3MiwgMHhhMiwgMHg5MCwgMHhiYywKLQkweDAwLCAweGMwLCAweGZmLCAweDNmLCAweDAwLCAweDgwLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4YzAsIDB4ODksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgzNiwgMHgxMSwgMHgwNCwgMHg3OSwgMHgwMSwgMHg4MCwgMHg4MiwgMHgxYiwgMHg4NywgMHhiYywKLQkweDAwLCAweDAwLCAweDM0LCAweDExLCAweDA0LCAweGIwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhmOCwgMHg5MiwgMHg4MSwgMHgyZiwgMHg3NSwKLQkweDAwLCAweDAwLCAweDNjLCAweDExLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDUyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4M2MsIDB4MTEsIDB4ZDUsIDB4NDEsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4MDAsIDB4ODcsIDB4OTIsCi0JMHgwMCwgMHgwMCwgMHgzOSwgMHgxMSwgMHgzYywgMHg5MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHg5MCwgMHhiMiwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDkyLCAweDgxLCAweDJmLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4MDEsIDB4ZTgsIDB4MDYsIDB4YzAsIDB4OGIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5NSwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHgyZiwgMHg3MiwKLQkweDAwLCAweDAwLCAweDNkLCAweDExLCAweDlmLCAweDQxLCAweDAxLCAweDgwLCAweDgyLCAweDFiLCAweDg3LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOSwgMHg5MCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGY4LCAweDcyLCAweDgwLCAweDJmLCAweDc0LAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgyNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwOSwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweDA5LCAweDQwLCAweDg3LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4NDcsIDB4MTEsIDB4OWYsIDB4ZDgsIDB4MDEsIDB4ODAsIDB4MjIsIDB4MjEsIDB4NmUsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg3MCwKLQkweDAwLCAweDAwLCAweDQ3LCAweDExLCAweDlmLCAweGUwLCAweDAxLCAweDgwLCAweGMyLCAweDIxLCAweDZlLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NzAsCi0JMHgwMCwgMHgwMCwgMHg0NywgMHgxMSwgMHg5ZiwgMHhiMCwgMHgwMSwgMHg4MCwgMHhkMiwgMHgyMSwgMHg2ZSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDcwLAotCTB4MDAsIDB4MDAsIDB4NDksIDB4MTEsIDB4MDYsIDB4NjgsIDB4MDEsIDB4ODAsIDB4ODIsIDB4NWIsIDB4ODcsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2OCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg0MCwgMHg4NywgMHgzMiwKLQkweDAwLCAweDAwLCAweDRiLCAweDExLCAweDM3LCAweGIwLCAweDAxLCAweGUwLCAweDA2LCAweDQwLCAweDg3LCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4ZDIsIDB4ODAsIDB4MmYsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMSwgMHhlMCwgMHgwNiwgMHg4MCwgMHg4NCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUxLCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDg3LCAweDcyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHg4MCwgMHg5MiwgMHhiYywKLQkweDAwLCAweDAwLCAweDViLCAweDExLCAweDA0LCAweGMxLCAweDAxLCAweDg0LCAweDAyLCAweDAwLCAweDZlLCAweGIyLAotCTB4MDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4ZTgsIDB4ODYsIDB4OGQsIDB4OTIsIDB4MzcsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMSwgMHhlOCwgMHg4NiwgMHg4ZCwgMHg5MiwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDMwLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4MmMsIDB4ODksIDB4OGQsIDB4NmUsIDB4MzYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjNCwgMHgwMSwgMHgyYywgMHhhOSwgMHhkYiwgMHg5MiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDI5LCAweGMwLCAweDkyLCAweDM2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MmMsIDB4MTksIDB4ZmIsIDB4OTIsIDB4M2YsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgyOSwgMHg4MCwgMHg5MiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweGE5LCAweGU0LCAweDkyLCAweDNmLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NmYsIDB4Y2MsIDB4MDEsIDB4ZTgsIDB4MjYsIDB4ZmIsIDB4OTIsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOSwgMHgwMSwgMHhlMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHg1MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDk0LCAweDAyLCAweDgwLCAweDkyLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDEsIDB4ZTAsIDB4MDYsIDB4NDAsIDB4MjgsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2ZiwgMHhjYywgMHgwMSwgMHhlOCwgMHg4NiwgMHhjZCwgMHgyYSwgMHgzNiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI5LCAweDAxLCAweGUwLCAweDA2LCAweDAwLCAweDAwLCAweDUyLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHgwNCwgMHhiMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHg2ZSwgMHhiMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDAxLCAweGJjLCAweDA4LCAweDAwLCAweDZlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDEsIDB4YmMsIDB4ODgsIDB4ZGIsIDB4OGIsIDB4M2UsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwMSwgMHhiYywgMHg4OCwgMHhkYiwgMHg4YiwgMHgzYSwKLQkweDAwLCAweDAwLCAweDZhLCAweDExLCAweDlmLCAweDAwLCAweDAwLCAweGJjLCAweDg4LCAweGUxLCAweDhiLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4NmEsIDB4MTEsIDB4MDQsIDB4MGMsIDB4MDIsIDB4NDAsIDB4YTgsIDB4ZGIsIDB4OGIsIDB4YmUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMCwgMHgwNCwgMHg4OCwgMHgxYiwgMHg4NCwgMHgzZSwKLQkweDAwLCAweDAwLCAweDY5LCAweDExLCAweDA0LCAweGIxLCAweDAwLCAweDgwLCAweDgyLCAweDViLCAweDgwLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4YzIsIDB4ODAsIDB4MmYsIDB4NzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwYywgMHgwMiwgMHg4MCwgMHhhMiwgMHg1YiwgMHg4MCwgMHg3YywKLQkweDI5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4YzAsIDB4OGIsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgxMiwgMHgwMCwgMHgyYywgMHgzYSwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDQsIDB4NjUsIDB4MDEsIDB4ODAsIDB4YTIsIDB4ZGIsIDB4MmMsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHg4YSwgMHgxMSwgMHg4MCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhhMiwgMHg4MCwgMHgyZiwgMHhiNiwKLQkweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAxLCAweGU4LCAweDc2LCAweDIwLCAweDgxLCAweDM5LAotCTB4ZWUsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZjgsIDB4ODIsIDB4OGQsIDB4MmYsIDB4NzEsCi0JMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE0LCAweGQ5LCAweDRhLCAweDkxLCAweDM5LAotCTB4MzksIDB4MDAsIDB4ZTIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDksIDB4MDAsIDB4MzYsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHgwOSwgMHg0NSwgMHg5MSwgMHgzMCwKLQkweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDg5LCAweDRkLCAweDkxLCAweDM2LAotCTB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2MsIDB4ODksIDB4Y2QsIDB4OTMsIDB4M2MsCi0JMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhjOCwgMHg4MiwgMHhjZCwgMHg5MywgMHgzNiwKLQkweDA3LCAweDAwLCAweDc5LCAweDExLCAweGYzLCAweDAxLCAweDAwLCAweDQwLCAweDg5LCAweGNkLCAweDkzLCAweGIwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4ODAsIDB4MTgsIDB4OWIsIDB4ODEsIDB4MDIsIDB4ZTUsIDB4NzgsIDB4YjYsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMywgMHgxOCwgMHg5YiwgMHg4ZCwgMHgwNywgMHhlNSwgMHg3OCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxNCwgMHhkOSwgMHg0YSwgMHg5MSwgMHgzOSwKLQkweDNhLCAweDAwLCAweGUyLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDA5LCAweDAwLCAweDM2LCAweGQyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MDksIDB4NDUsIDB4OTEsIDB4MzAsCi0JMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzYywgMHg4OSwgMHg0ZCwgMHg5MSwgMHgzNiwKLQkweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNjLCAweDg5LCAweGNkLCAweDkzLCAweDNjLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YzgsIDB4ODIsIDB4Y2QsIDB4OTMsIDB4MzYsCi0JMHgwNywgMHgwMCwgMHg4NCwgMHgxMSwgMHhmMywgMHgwMSwgMHgwMCwgMHg0MCwgMHg4OSwgMHhjZCwgMHg5MywgMHhiMCwKLQkweDAwLCAweDAwLCAweDhhLCAweDExLCAweDgwLCAweDE5LCAweDliLCAweDgxLCAweDAyLCAweGU1LCAweDc4LCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTMsIDB4MTgsIDB4OWIsIDB4OGQsIDB4MDcsIDB4ZTUsIDB4NzgsIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjQsIDB4MGYsIDB4NDAsIDB4ZmIsIDB4OTQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwZiwgMHg0MCwgMHgyYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDBmLCAweDAwLCAweDI4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MGYsIDB4MDAsIDB4MjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiOCwgMHgwZiwgMHg0MCwgMHgxOCwgMHgzMiwKLQkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4NWYsIDB4Y2EsIDB4ZjksIDB4MzUsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHgwMywgMHhjMCwgMHhmOSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU0LCAweDAzLCAweDAwLCAweDAwLCAweDMyLAotCTB4NDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTgsIDB4MGYsIDB4ODAsIDB4MmEsIDB4MzIsCi0JMHg0YywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDk4LCAweDExLCAweDk3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDBmLCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMSwgMHg4NCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHgwMCwgMHgzNiwgMHhkMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDgwLCAweDJhLCAweDMyLAotCTB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBmLCAweDAwLCAweDdlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweGMwLCAweGZhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4ZjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHhmYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweGZhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YWMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4ZmEsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHhmYiwgMHgzMiwKLQkweDAxLCAweDAwLCAweGNmLCAweDExLCAweDA0LCAweDAxLCAweDAwLCAweGI0LCAweDhmLCAweDRkLCAweGZiLCAweGIwLAotCTB4NDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4YWIsIDB4Y2QsIDB4YjAsIDB4MzIsCi0JMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg1YiwgMHhjYSwgMHhiMCwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweGZlLCAweGIwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YWEsIDB4MTEsIDB4MTIsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhiZSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGY4LCAweDAzLCAweDAwLCAweDAxLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2YsIDB4NTIsCi0JMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmOCwgMHg3MywgMHg4YSwgMHgwMiwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDUzLCAweDBhLCAweDE2LCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHg0MCwgMHg5MCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDBmLCAweDgwLCAweDkwLCAweDMyLAotCTB4YTIsIDB4NjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHhiOSwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDUwLCAweDgzLCAweDBkLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDgsIDB4ODMsIDB4MGQsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0NCwgMHg1MywgMHgwYSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4YzAsIDB4ZjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHgwMCwgMHhmYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDA5LCAweDQwLCAweGZhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YzksIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHgzOSwKLQkweDAwLCAweDAwLCAweGMwLCAweDExLCAweDgwLCAweDAxLCAweDAwLCAweDgwLCAweDEyLCAweDQwLCAweGIwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2IsIDB4NDAsIDB4YjAsIDB4MzMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNSwKLQkweDAwLCAweDAwLCAweGM0LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDBiLCAweDQwLCAweDkwLCAweDkyLAotCTB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4YzIsIDB4MGEsIDB4MDAsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHhjNCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHg2YiwgMHg0MSwgMHg5MCwgMHg5NCwKLQkweDAwLCAweDAwLCAweGM0LCAweDExLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDA5LCAweDQwLCAweDIwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YzUsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHhlNCwgMHgxNiwgMHgzOCwKLQkweDAwLCAweDAwLCAweGM5LCAweDExLCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4YzgsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDIsIDB4MDAsIDB4YzQsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4YmMsIDB4MGYsIDB4MjQsIDB4MTcsIDB4YjgsCi0JMHgwNiwgMHgwMCwgMHhjMiwgMHgxMSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwZiwgMHg2NCwgMHgxNiwgMHhiOCwKLQkweDAwLCAweDAwLCAweGJkLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDIyLCAweGMwLCAweGZiLCAweGJjLAotCTB4MjAsIDB4MDAsIDB4YzQsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZmIsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHhkNywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweGQxLCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg4LCAweDgyLCAweGNkLCAweGY5LCAweDNhLAotCTB4MDAsIDB4MDAsIDB4YjcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHhmNywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGY4LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4ZmMsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwNCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDVkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4MDAsIDB4MDMsIDB4MzIsCi0JMHg0MCwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDJhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGRlLCAweDExLCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4ODAsIDB4OTAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhkZSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0MCwgMHhmMiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ZTAsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHg3ZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBmLCAweDAwLCAweDdlLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGYsIDB4MDAsIDB4N2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhmYSwgMHg1MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4NGMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwNywgMHg4MCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweGFkLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4YjMsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHhjYiwgMHhjMSwgMHhiMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhlZiwgMHgwZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgyOCwgMHgwOSwgMHhjMCwgMHhiMCwgMHhkMiwKLQkweDAwLCAweDAwLCAweGViLCAweDExLCAweDA0LCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDgwLCAweDkyLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZWYsIDB4MTEsIDB4MTIsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMiwgMHgwMCwgMHhmMiwgMHgxMSwgMHgwNCwgMHgwMSwgMHgwMCwgMHhiNCwgMHg4ZiwgMHg0ZCwgMHhmYiwgMHhiMCwKLQkweDAwLCAweDAwLCAweGM0LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4OTMsIDB4NDAsIDB4MDEsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiNCwgMHgxZiwgMHg0MCwgMHhmYiwgMHgzNSwKLQkweGZlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHhlYiwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg4YiwgMHhjMSwgMHhiMCwgMHg5NCwKLQkweDAwLCAweDAwLCAweGJiLCAweDEyLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDQwLCAweGZhLCAweDkyLAotCTB4MDAsIDB4MDAsIDB4YWQsIDB4MTIsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4ZmEsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHhmOSwgMHgxMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHg1MCwgMHhmMiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweGI0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4YmQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHhiMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDEyLCAweDAwLCAweDJhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4ZmYsIDB4MTEsIDB4MDQsIDB4MDEsIDB4MDAsIDB4OWMsIDB4MWYsIDB4YzAsIDB4ZjksIDB4YmMsCi0JMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGJhLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MGMsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4ZmEsIDB4YjIsCi0JMHgwMCwgMHhjYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDBlLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4MWIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODQsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgzYywgMHgzMiwKLQkweDAwLCAweDAwLCAweDA4LCAweDEyLCAweDhlLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweDI4LCAweGIyLAotCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhmNywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweGNjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE0LCAweDhmLCAweDRkLCAweGZhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4ZjcsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4OTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDEwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDBmLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MjAsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwOCwgMHgwMCwgMHgxMCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAotCTB4MGUsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDBiLCAweDAwLCAweDE0LCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGY5LCAweGJjLAotCTB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwZiwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDIwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MjcsIDB4MDAsIDB4MTgsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZjksIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAotCTB4MGYsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyMCwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDIwLCAweDAwLCAweDFkLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGY5LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlNCwgMHgwMywgMHhjMCwgMHhmOSwgMHgzMiwKLQkweDBkLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDAzLCAweDAwLCAweDM3LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4YzAsIDB4ZmEsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgzZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweDVhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4YzAsIDB4ZjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgzZSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweDNhLAotCTB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4YWMsIDB4OGYsIDB4Y2QsIDB4ZjksIDB4NTAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgyYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgxMiwgMHgwMCwgMHgyYiwgMHgzYSwKLQkweDBmLCAweDAwLCAweDJiLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweDBkLCAweDJiLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4M2UsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgwMiwgMHhjMCwgMHhmOSwgMHg1MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDNhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4M2EsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgzYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDNhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDNkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4M2QsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgzNiwgMHgxMiwgMHg4NCwgMHgwMSwgMHgwMCwgMHhiMCwgMHgxMiwgMHgwMCwgMHgyYiwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweGIwLCAweDAyLCAweGMwLCAweGY5LCAweDUyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwOCwgMHg3MywgMHgzZSwgMHgwMCwgMHgzOSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDMwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MWYsIDB4YzAsIDB4ZjksIDB4M2EsCi0JMHg3MCwgMHgwMCwgMHgzYiwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmOSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweDAzLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MzAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDMwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHgwZiwgMHhjMCwgMHgyOSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweGMwLCAweGY5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGYsIDB4YzAsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHhmYSwgMHgzMiwKLQkweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDJjLCAweDczLCAweDdlLCAweGZhLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MzAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg0NCwgMHgxMiwgMHg4NSwgMHgwMSwgMHgwMCwgMHg5YywgMHgxZiwgMHhjMCwgMHhmOSwgMHhiYSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDUwLAotCTB4MDEsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgyNSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDBlLCAweDAwLCAweDUzLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDgwLCAweDgyLCAweGNkLCAweGZhLCAweGJjLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NGQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4M2YsIDB4YzAsIDB4ZjksIDB4OWEsCi0JMHgxYywgMHgwMCwgMHg0ZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHhmYSwgMHhiYywKLQkweDAyLCAweDAwLCAweDI1LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDhmLCAweGNkLCAweGY5LCAweGRhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4NTAsCi0JMHgwMSwgMHgwMCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHgwMCwgMHgzNywgMHgzMiwKLQkweDAwLCAweDAwLCAweDI1LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MGUsIDB4MDAsIDB4NWIsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZmEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDU3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweDlhLAotCTB4MjYsIDB4MDAsIDB4NTcsIDB4MTIsIDB4MDQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ODIsIDB4Y2QsIDB4ZmEsIDB4YmMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDBmLCAweDQwLCAweDI5LCAweDMyLAotCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTgsIDB4MDIsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHg0YywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweDU2LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4MjksIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgxOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDBmLCAweDAwLCAweDAwLCAweDMyLAotCTB4YTIsIDB4NjAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTgsIDB4MDMsIDB4MDAsIDB4MzcsIDB4MzIsCi0JMHg2YiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1YywgMHgwMywgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDBmLCAweDgwLCAweDJhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4NmIsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MjksIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1MCwgMHg4MywgMHgzZSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ4LCAweDgzLCAweDNlLCAweDAwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDQsIDB4NTMsIDB4MGEsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHg2YywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4OCwgMHgwZiwgMHg0MCwgMHgyYiwgMHg5MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDkwLCAweDBmLCAweDAwLCAweDI4LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OTQsIDB4MGYsIDB4MDAsIDB4MjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5OCwgMHgwZiwgMHg4MCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGE4LCAweDAyLCAweGMwLCAweGY5LCAweDMyLAotCTB4NzEsIDB4MTIsIDB4OTcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MGYsIDB4MDAsIDB4MzYsIDB4OTIsCi0JMHgwNywgMHgwMCwgMHg3NCwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHg0ZCwgMHgyOSwgMHhiYywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweDFmLCAweDAwLCAweGZhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4NjgsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4ODAsIDB4MmEsIDB4OTIsCi0JMHhjMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhYywgMHgwZiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDljLCAweDAyLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4ODQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgxZiwgMHgwMCwgMHg3YSwgMHgxMiwgMHgwNCwgMHgwMCwgMHgwMCwgMHg4MCwgMHg4MiwgMHhjZCwgMHgyOSwgMHhiYywKLQkweGMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGFjLCAweDhmLCAweGNkLCAweGZhLCAweDNhLAotCTB4MDAsIDB4MDAsIDB4NzYsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MTIsIDB4YzAsIDB4MjksIDB4OWEsCi0JMHgwMCwgMHgwMCwgMHgzYSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweDMwLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweGQwLAotCTB4MDAsIDB4MDAsIDB4ODIsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NTIsIDB4OGEsIDB4ZmEsIDB4YmMsCi0JMHhhMiwgMHg2MCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg1OCwgMHgwMywgMHgwMCwgMHgzNywgMHgzMiwKLQkweDgyLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTAsIDB4YTMsIDB4M2UsIDB4MDAsIDB4MzQsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0OCwgMHhhMywgMHgzZSwgMHgwMCwgMHgzNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDUzLCAweDBhLCAweDAwLCAweDM0LAotCTB4MDAsIDB4Y2MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHhmNywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGM0LCAweDAyLCAweGMwLCAweGZhLCAweDMyLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwZiwgMHg0MCwgMHgyZiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDhiLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OGEsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDAsIDB4MmYsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg4NywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgyYywgMHg5MiwKLQkweDAwLCAweDAwLCAweDg3LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MmMsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyYywgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweDJjLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4MmQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgyZCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDJkLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MmQsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHhmYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDJmLCAweDMyLAotCTB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjgsIDB4NzMsIDB4MGEsIDB4MDIsIDB4MzksCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgzZiwgMHg1MiwKLQkweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQ0LCAweDAzLCAweDAwLCAweDM2LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4MDAsIDB4ZjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgyOCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweGY4LCAweDMyLAotCTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4MDAsIDB4MzYsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiYywgMHgwZiwgMHhjMCwgMHgyYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweGEwLCAweDEyLCAweDA0LCAweDAwLCAweDAwLCAweDljLCAweDFmLCAweGMwLCAweGY5LCAweGJjLAotCTB4MDAsIDB4MDAsIDB4OWYsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4YzAsIDB4MmIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHg5YywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgyOCwgMHg5MiwKLQkweDAwLCAweDAwLCAweDljLCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDM2LCAweDkyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4ZjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg0MCwgMHgyOSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDgwLCAweDI5LCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4YzAsIDB4MjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHgwMCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDQwLCAweDJhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4ODAsIDB4ZjksIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHhjMCwgMHgyYSwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweDAwLCAweDJiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDcsIDB4NDAsIDB4MmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhlMCwgMHgwNywgMHg4MCwgMHgyYiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGUwLCAweDA3LCAweGMwLCAweGZiLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODgsIDB4MDIsIDB4MDAsIDB4ZmIsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5YywgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ4LCAweDAyLCAweDAwLCAweDAwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YjEsIDB4MTIsIDB4OWYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4OTAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMSwgMHgwMCwgMHgwMCwgMHgwNywgMHg0MCwgMHg5MCwgMHg1MiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDcsIDB4NDAsIDB4OTAsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHhiMywgMHgxMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg0OCwgMHhmMiwgMHgwMSwgMHgwMCwgMHhiNCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YjUsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MGYsIDB4YzAsIDB4MjEsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg1MCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI0LCAweDBmLCAweDQwLCAweGZiLCAweDM1LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHg0YywgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgwMiwgMHgwMCwgMHgzNiwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDA3LCAweDgwLCAweDJhLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4YWQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4ZDAsCi0JMHgwMCwgMHgwMCwgMHhiMywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHhkMCwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBjLCAweGNiLCAweGMxLCAweGIwLCAweDM0LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OWMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhkOCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweGM0LCAweDEyLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDA5LCAweGMwLCAweGIwLCAweGQyLAotCTB4MDAsIDB4MDAsIDB4YmUsIDB4MTIsIDB4MDQsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDIsIDB4ODAsIDB4OTIsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjMiwgMHgxMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHg5YywgMHgwZiwgMHhjMCwgMHgyMSwgMHhiMiwKLQkweDAwLCAweDAwLCAweGM0LCAweDExLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgMHhjMiwgMHgwYSwgMHgwMCwgMHgzOSwKLQkweDAwLCAweDAwLCAweGM4LCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweDI4LCAweDA5LCAweDM0LCAweGIwLCAweGJhLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MjgsIDB4MDksIDB4MDAsIDB4MDAsIDB4NTIsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhOCwgMHgyMiwgMHgwMCwgMHgyYiwgMHgzNywKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg0LCAweGMwLCAweDM3LCAweGFjLCAweGIwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MzIsCi0JMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg3OCwgMHhhOSwgMHg0ZCwgMHhiMCwgMHgzMCwKLQkweDAwLCAweDAwLCAweGQ4LCAweDEyLCAweDgwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDQwLCAweGIwLCAweGI2LAotCTB4MDAsIDB4MDAsIDB4Y2QsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwMCwgMHgwMCwgMHhjZSwgMHgxMiwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwNCwgMHgwOSwgMHg0MCwgMHgyMCwgMHhiMiwKLQkweDAwLCAweDAwLCAweGQxLCAweDEyLCAweDlmLCAweDAxLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDkwLCAweGIyLAotCTB4MDAsIDB4MDAsIDB4ZDAsIDB4MTIsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDksIDB4NDAsIDB4MjAsIDB4YjIsCi0JMHgwZCwgMHgwMCwgMHhjZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgwMiwgMHhlNCwgMHgxNiwgMHhiOCwKLQkweDAyLCAweDAwLCAweGNkLCAweDEyLCAweDA0LCAweDAxLCAweDAwLCAweGJjLCAweDBmLCAweDI0LCAweDE3LCAweGI4LAotCTB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YmMsIDB4MGYsIDB4NjQsIDB4MTYsIDB4MzgsCi0JMHgwMCwgMHgwMCwgMHhjZCwgMHgxMiwgMHgwNCwgMHgwMSwgMHgwMCwgMHg4MCwgMHgyMiwgMHhjMCwgMHhmYiwgMHhiYywKLQkweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGEwLCAweGMyLCAweDBhLCAweDAwLCAweDM5LAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDQsIDB4M2IsIDB4NDAsIDB4YjAsIDB4MzMsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwgMHhjZCwgMHg0YSwgMHhkMCwgMHgzNSwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGU3LCAweDI1LCAweDAxLCAweDMyLAotCTB4MDAsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ODcsIDB4OGQsIDB4MmEsIDB4M2EsCi0JMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwNywgMHgwMCwgMHhiMCwgMHgzMiwKLQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDE4LCAweDAwLCAweDAwLCAweDA3LCAweDAwLCAweGQwLCAweDMyLAotCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MDEsIDB4MDAsIDB4NDgsIDB4ZjIsIDB4YzEsIDB4MzgsIDB4NTQsCi0JMHgwMCwgMHgwMCwgMHhkYywgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMiwgMHgwMCwgMHgwMCwgMHg5MCwKLQkweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotfSwKLXsKLQkweDAwLCAweDAwLCAweDM2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAyLCAweDAwLCAweDAwLCAweDkwLAotfSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5jIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuYwppbmRleCAxZTBjZmNkLi4wMDUwYTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmMKQEAgLTMwLDYgKzMwLDggQEAKICAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKICAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KICAqCisgKiBQYXJ0cyBkZXZlbG9wZWQgYnkgTGluU3lzU29mdCBTYWhhcmEgdGVhbQorICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTQ2LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC02MSwxMDEgKzY0LDEyMiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogCi0jZGVmaW5lIFNMSUNfRFVNUF9FTkFCTEVECQkwCiAjZGVmaW5lIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQJCTAKICNkZWZpbmUgTElOVVhfRlJFRVNfQURBUFRFUl9SRVNPVVJDRVMJMQogI2RlZmluZSBTWEdfT0ZGTE9BRF9JUF9DSEVDS1NVTQkJMAogI2RlZmluZSBTWEdfUE9XRVJfTUFOQUdFTUVOVF9FTkFCTEVECTAKICNkZWZpbmUgVlBDSQkJCQkwCi0jZGVmaW5lIERCRwkJCQkxCiAjZGVmaW5lIEFUS19ERUJVRwkJCTEKKyNkZWZpbmUgU1hHX1VDT0RFX0RFQlVHCQkwCisKIAogI2luY2x1ZGUgInN4Z19vcy5oIgogI2luY2x1ZGUgInN4Z2h3LmgiCiAjaW5jbHVkZSAic3hnaGlmLmgiCiAjaW5jbHVkZSAic3hnLmgiCiAjaW5jbHVkZSAic3hnZGJnLmgiCi0KLSNpbmNsdWRlICJzeGdwaHljb2RlLmgiCi0jaW5jbHVkZSAic2FoYXJhZGJnZG93bmxvYWQuaCIKKyNpbmNsdWRlICJzeGdwaHljb2RlLTEuMi5oIgogCiBzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9idWZmZXJfbWVtb3J5KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHUzMiBTaXplLAotCQkJCSAgICAgIGVudW0gU1hHX0JVRkZFUl9UWVBFIEJ1ZmZlclR5cGUpOwotc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHZvaWQgKlJjdkJsb2NrLAotCQkJCQkgICBkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKLQkJCQkJICAgdTMyIExlbmd0aCk7CisJCQkJICAgICAgZW51bSBzeGdfYnVmZmVyX3R5cGUgQnVmZmVyVHlwZSk7CitzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAorCQkJCQkJdm9pZCAqUmN2QmxvY2ssCisJCQkJCQlkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzcywKKwkJCQkJCXUzMiBMZW5ndGgpOwogc3RhdGljIHZvaWQgc3hnX2FsbG9jYXRlX3NnbF9idWZmZXJfY29tcGxldGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKLQkJCQkJICAgICBzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSICpTeGdTZ2wsCisJCQkJCSAgICAgc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAqU3hnU2dsLAogCQkJCQkgICAgIGRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzLAogCQkJCQkgICAgIHUzMiBMZW5ndGgpOwogCiBzdGF0aWMgdm9pZCBzeGdfbWNhc3RfaW5pdF9jcmMzMih2b2lkKTsKLQotc3RhdGljIGludCBzeGdfZW50cnlfb3BlbihwX25ldF9kZXZpY2UgZGV2KTsKLXN0YXRpYyBpbnQgc3hnX2VudHJ5X2hhbHQocF9uZXRfZGV2aWNlIGRldik7Ci1zdGF0aWMgaW50IHN4Z19pb2N0bChwX25ldF9kZXZpY2UgZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKLXN0YXRpYyBpbnQgc3hnX3NlbmRfcGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwX25ldF9kZXZpY2UgZGV2KTsKK3N0YXRpYyBpbnQgc3hnX2VudHJ5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IHN4Z19zZWNvbmRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7CitzdGF0aWMgaW50IHN4Z19lbnRyeV9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzeGdfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CitzdGF0aWMgaW50IHN4Z19zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHN4Z190cmFuc21pdF9wYWNrZXQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgdm9pZCBzeGdfZHVtYl9zZ2woc3RydWN0IFNDQVRURVJfR0FUSEVSX0xJU1QgKnBTZ2wsIHN0cnVjdCBTWEdfU0NBVFRFUl9HQVRIRVIgKlN4Z1NnbCk7CitzdGF0aWMgaW50IHN4Z19kdW1iX3NnbChzdHJ1Y3Qgc3hnX3g2NF9zZ2wgKnBTZ2wsCisJCQkJc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAqU3hnU2dsKTsKIAotc3RhdGljIHZvaWQgc3hnX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBzeGdfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCBpbnQgKndvcmtfZG9uZSwKKwkJCQkJIGludCBidWRnZXQpOworc3RhdGljIHZvaWQgc3hnX2ludGVycnVwdChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgc3hnX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsKIHN0YXRpYyBpbnQgc3hnX3Byb2Nlc3NfaXNyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHUzMiBNZXNzYWdlSWQpOwotc3RhdGljIHUzMiBzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgUnNzSWQpOworc3RhdGljIHUzMiBzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgUnNzSWQsCisJCQkgaW50ICpzeGdfbmFwaV9jb250aW51ZSwgaW50ICp3b3JrX2RvbmUsIGludCBidWRnZXQpOwogc3RhdGljIHZvaWQgc3hnX2NvbXBsZXRlX3Nsb3dfc2VuZChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqc3hnX3Nsb3dfcmVjZWl2ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCBzdHJ1Y3QgU1hHX0VWRU5UICpFdmVudCk7CitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnN4Z19zbG93X3JlY2VpdmUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKKwkJCQkJc3RydWN0IHN4Z19ldmVudCAqRXZlbnQpOwogc3RhdGljIHZvaWQgc3hnX3Byb2Nlc3NfcmN2X2Vycm9yKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHUzMiBFcnJvclN0YXR1cyk7CiBzdGF0aWMgYm9vbCBzeGdfbWFjX2ZpbHRlcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAogCQkJICAgc3RydWN0IGV0aGVyX2hlYWRlciAqRXRoZXJIZHIsIHVzaG9ydCBsZW5ndGgpOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzeGdfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKK3ZvaWQgc3hnX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwordm9pZCBzeGdfZnJlZV9yY3ZibG9ja3Moc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7Cit2b2lkIHN4Z19mcmVlX3NnbF9idWZmZXJzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwordm9pZCBzeGdfdW5tYXBfcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwordm9pZCBzeGdfZnJlZV9tY2FzdF9hZGRycyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3ZvaWQgc3hnX2NvbGxlY3Rfc3RhdGlzdGljcyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgc3hnX3JlZ2lzdGVyX2ludGVycnVwdChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHN4Z19yZW1vdmVfaXNyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOworc3RhdGljIGlycXJldHVybl90IHN4Z19pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAotI2lmIFNMSUNfR0VUX1NUQVRTX0VOQUJMRUQKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3hnX2dldF9zdGF0cyhwX25ldF9kZXZpY2UgZGV2KTsKLSNlbmRpZgorc3RhdGljIHZvaWQgc3hnX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBzeGdfdXBkYXRlX2xpbmtfc3RhdHVzIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiAjZGVmaW5lIFhYWFRPRE8gMAogCiAjaWYgWFhYVE9ETwotc3RhdGljIGludCBzeGdfbWFjX3NldF9hZGRyZXNzKHBfbmV0X2RldmljZSBkZXYsIHZvaWQgKnB0cik7Ci1zdGF0aWMgdm9pZCBzeGdfbWNhc3Rfc2V0X2xpc3QocF9uZXRfZGV2aWNlIGRldik7CitzdGF0aWMgaW50IHN4Z19tYWNfc2V0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKTsKICNlbmRpZgorc3RhdGljIHZvaWQgc3hnX21jYXN0X3NldF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgdm9pZCBzeGdfYWRhcHRlcl9zZXRfaHdhZGRyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwotCi1zdGF0aWMgdm9pZCBzeGdfdW5tYXBfbW1pb19zcGFjZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKIAogc3RhdGljIGludCBzeGdfaW5pdGlhbGl6ZV9hZGFwdGVyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwogc3RhdGljIHZvaWQgc3hnX3N0b2NrX3Jjdl9idWZmZXJzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwogc3RhdGljIHZvaWQgc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCiAJCQkJCSAgIHVuc2lnbmVkIGNoYXIgSW5kZXgpOworaW50IHN4Z19jaGFuZ2VfbXR1IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSk7CiBzdGF0aWMgaW50IHN4Z19pbml0aWFsaXplX2xpbmsoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CiBzdGF0aWMgaW50IHN4Z19waHlfaW5pdChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKIHN0YXRpYyB2b2lkIHN4Z19saW5rX2V2ZW50KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwogc3RhdGljIGVudW0gU1hHX0xJTktfU1RBVEUgc3hnX2dldF9saW5rX3N0YXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpOwotc3RhdGljIHZvaWQgc3hnX2xpbmtfc3RhdGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgZW51bSBTWEdfTElOS19TVEFURSBMaW5rU3RhdGUpOworc3RhdGljIHZvaWQgc3hnX2xpbmtfc3RhdGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKKwkJCQllbnVtIFNYR19MSU5LX1NUQVRFIExpbmtTdGF0ZSk7CiBzdGF0aWMgaW50IHN4Z193cml0ZV9tZGlvX3JlZyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAogCQkJICAgICAgdTMyIERldkFkZHIsIHUzMiBSZWdBZGRyLCB1MzIgVmFsdWUpOwogc3RhdGljIGludCBzeGdfcmVhZF9tZGlvX3JlZyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAogCQkJICAgICB1MzIgRGV2QWRkciwgdTMyIFJlZ0FkZHIsIHUzMiAqcFZhbHVlKTsKK3N0YXRpYyB2b2lkIHN4Z19zZXRfbWNhc3RfYWRkcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBzeGdfZmlyc3RfaW5pdCA9IDE7CiBzdGF0aWMgY2hhciAqc3hnX2Jhbm5lciA9Ci0gICAgIkFsYWNyaXRlY2ggU0xJQyBUZWNobm9sb2d5KHRtKSBTZXJ2ZXIgYW5kIFN0b3JhZ2UgMTBHYmUgQWNjZWxlcmF0b3IgKE5vbi1BY2NlbGVyYXRlZClcbiI7CisgICAgIkFsYWNyaXRlY2ggU0xJQyBUZWNobm9sb2d5KHRtKSBTZXJ2ZXIgYW5kIFN0b3JhZ2UgXAorCSAxMEdiZSBBY2NlbGVyYXRvciAoTm9uLUFjY2VsZXJhdGVkKVxuIjsKIAogc3RhdGljIGludCBzeGdfZGVidWcgPSAxOwogc3RhdGljIGludCBkZWJ1ZyA9IC0xOwotc3RhdGljIHBfbmV0X2RldmljZSBoZWFkX25ldGRldmljZSA9IE5VTEw7CitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmhlYWRfbmV0ZGV2aWNlID0gTlVMTDsKIAotc3RhdGljIHN0cnVjdCBzeGdiYXNlX2RyaXZlcl90IHN4Z19nbG9iYWwgPSB7CitzdGF0aWMgc3RydWN0IHN4Z2Jhc2VfZHJpdmVyIHN4Z19nbG9iYWwgPSB7CiAJLmR5bmFtaWNfaW50YWdnID0gMSwKIH07CiBzdGF0aWMgaW50IGludGFnZ19kZWxheSA9IDEwMDsKIHN0YXRpYyB1MzIgZHluYW1pY19pbnRhZ2cgPSAwOwogCi0jZGVmaW5lIERSVl9OQU1FCSJzeGciCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAuMSIKK2NoYXIgc3hnX2RyaXZlcl9uYW1lW10gPSAic3hnX25pYyI7CiAjZGVmaW5lIERSVl9BVVRIT1IJIkFsYWNyaXRlY2gsIEluYy4gRW5naW5lZXJpbmciCi0jZGVmaW5lIERSVl9ERVNDUklQVElPTgkiQWxhY3JpdGVjaCBTTElDIFRlY2hvbm9sb2d5KHRtKSBOb24tQWNjZWxlcmF0ZWQgMTBHYmUgRHJpdmVyIgotI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQgMjAwMC0yMDA4IEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIgorI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCQkJCQkJXAorCSJBbGFjcml0ZWNoIFNMSUMgVGVjaG9ub2xvZ3kodG0pIE5vbi1BY2NlbGVyYXRlZCAxMEdiZSBEcml2ZXIiCisjZGVmaW5lIERSVl9DT1BZUklHSFQJCQkJCQkJXAorCSJDb3B5cmlnaHQgMjAwMC0yMDA4IEFsYWNyaXRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuIgogCiBNT0RVTEVfQVVUSE9SKERSVl9BVVRIT1IpOwogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7CkBAIC0xNzMsMTIgKzE5Nyw2IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzeGdfcGNpX3RibCk7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiBzdGF0aWMgaW5saW5lIHZvaWQgc3hnX3JlZzMyX3dyaXRlKHZvaWQgX19pb21lbSAqcmVnLCB1MzIgdmFsdWUsIGJvb2wgZmx1c2gpCiB7CiAJd3JpdGVsKHZhbHVlLCByZWcpOwpAQCAtMjI1LDE3ICsyNDMsMTQzIEBACiB9CiAKIC8qIFNYRyBHbG9iYWxzICovCi1zdGF0aWMgc3RydWN0IFNYR19EUklWRVIgU3hnRHJpdmVyOworc3RhdGljIHN0cnVjdCBzeGdfZHJpdmVyIFN4Z0RyaXZlcjsKIAogI2lmZGVmICBBVEtEQkcKLXN0YXRpYyBzdHJ1Y3Qgc3hnX3RyYWNlX2J1ZmZlcl90IExTeGdUcmFjZUJ1ZmZlcjsKK3N0YXRpYyBzdHJ1Y3Qgc3hnX3RyYWNlX2J1ZmZlciBMU3hnVHJhY2VCdWZmZXI7CiAjZW5kaWYgLyogQVRLREJHICovCi1zdGF0aWMgc3RydWN0IHN4Z190cmFjZV9idWZmZXJfdCAqU3hnVHJhY2VCdWZmZXIgPSBOVUxMOworc3RhdGljIHN0cnVjdCBzeGdfdHJhY2VfYnVmZmVyICpTeGdUcmFjZUJ1ZmZlciA9IE5VTEw7CisKKy8qCisgKiBNU0kgUmVsYXRlZCBBUEkncworICovCitpbnQgc3hnX3JlZ2lzdGVyX2ludHIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitpbnQgc3hnX2VuYWJsZV9tc2lfeChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKK2ludCBzeGdfYWRkX21zaV9pc3Ioc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7Cit2b2lkIHN4Z19yZW1vdmVfbXNpeF9pc3Ioc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcik7CitpbnQgc3hnX3NldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKTsKKworaW50IHN4Z19zZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc3hnX2VuYWJsZV9tc2lfeChhZGFwdGVyKTsKKwlpZiAocmV0ICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCWFkYXB0ZXItPm1zaV9lbmFibGVkID0gRkFMU0U7CisJCURCR19FUlJPUigic3hnX3NldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eSBNU0ktWCBEaXNhYmxlXG4iKTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5tc2lfZW5hYmxlZCA9IFRSVUU7CisJCURCR19FUlJPUigic3hnX3NldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eSBNU0ktWCBFbmFibGVcbiIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgc3hnX3JlZ2lzdGVyX2ludHIoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChhZGFwdGVyLT5tc2lfZW5hYmxlZCkgeworCQlyZXQgPSBzeGdfYWRkX21zaV9pc3IoYWRhcHRlcik7CisJfQorCWVsc2UgeworCQlEQkdfRVJST1IoIk1TSS1YIEVuYWJsZSBGYWlsZWQuIFVzaW5nIFBpbiBJTlRcbiIpOworCQlyZXQgPSBzeGdfcmVnaXN0ZXJfaW50ZXJydXB0KGFkYXB0ZXIpOworCQlpZiAocmV0ICE9IFNUQVRVU19TVUNDRVNTKSB7CisJCQlEQkdfRVJST1IoInN4Z19yZWdpc3Rlcl9pbnRlcnJ1cHQgRmFpbGVkXG4iKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgc3hnX2VuYWJsZV9tc2lfeChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQoreworCWludCByZXQ7CisKKwlhZGFwdGVyLT5ucl9tc2l4X2VudHJpZXMgPSAxOworCWFkYXB0ZXItPm1zaV9lbnRyaWVzID0gIGttYWxsb2MoYWRhcHRlci0+bnJfbXNpeF9lbnRyaWVzICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KSxHRlBfS0VSTkVMKTsKKwlpZiAoIWFkYXB0ZXItPm1zaV9lbnRyaWVzKSB7CisJCURCR19FUlJPUigiJXM6TVNJIEVudHJpZXMgbWVtb3J5IGFsbG9jYXRpb24gRmFpbGVkXG4iLF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChhZGFwdGVyLT5tc2lfZW50cmllcywgMCwgYWRhcHRlci0+bnJfbXNpeF9lbnRyaWVzICoKKwkJc2l6ZW9mKHN0cnVjdCBtc2l4X2VudHJ5KSk7CisKKwlyZXQgPSBwY2lfZW5hYmxlX21zaXgoYWRhcHRlci0+cGNpZGV2LCBhZGFwdGVyLT5tc2lfZW50cmllcywKKwkJCQlhZGFwdGVyLT5ucl9tc2l4X2VudHJpZXMpOworCWlmIChyZXQpIHsKKwkJREJHX0VSUk9SKCJFbmFibGluZyBNU0ktWCB3aXRoICVkIHZlY3RvcnMgZmFpbGVkXG4iLAorCQkJCWFkYXB0ZXItPm5yX21zaXhfZW50cmllcyk7CisJCS8qU2hvdWxkIHRyeSB3aXRoIGxlc3MgdmVjdG9yIHJldHVybmVkLiovCisJCWtmcmVlKGFkYXB0ZXItPm1zaV9lbnRyaWVzKTsKKwkJcmV0dXJuIFNUQVRVU19GQUlMVVJFOyAvKk1TSS1YIEVuYWJsZSBmYWlsZWQuKi8KKwl9CisJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Cit9CisKK2ludCBzeGdfYWRkX21zaV9pc3Ioc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwlpbnQgcmV0LGk7CisKKwlpZiAoIWFkYXB0ZXItPmludHJyZWdpc3RlcmVkKSB7CisJCWZvciAoaT0wOyBpPGFkYXB0ZXItPm5yX21zaXhfZW50cmllczsgaSsrKSB7CisJCQlyZXQgPSByZXF1ZXN0X2lycSAoYWRhcHRlci0+bXNpX2VudHJpZXNbaV0udmVjdG9yLAorCQkJCQlzeGdfaXNyLAorCQkJCQlJUlFGX1NIQVJFRCwKKwkJCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lLAorCQkJCQlhZGFwdGVyLT5uZXRkZXYpOworCQkJaWYgKHJldCkgeworCQkJCURCR19FUlJPUigic3hnOiBNU0ktWCByZXF1ZXN0X2lycSAoJXMpICIKKwkJCQkJIkZBSUxFRCBbJXhdXG4iLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCisJCQkJCSByZXQpOworCQkJCXJldHVybiAocmV0KTsKKwkJCX0KKwkJfQorCX0KKwlhZGFwdGVyLT5tc2lfZW5hYmxlZCA9IFRSVUU7CisJYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQgPSAxOworCWFkYXB0ZXItPkludFJlZ2lzdGVyZWQgPSBUUlVFOworCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOworfQorCit2b2lkIHN4Z19yZW1vdmVfbXNpeF9pc3Ioc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwlpbnQgaSx2ZWN0b3I7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCWZvcihpPTA7IGk8IGFkYXB0ZXItPm5yX21zaXhfZW50cmllcztpKyspCisJeworCQl2ZWN0b3IgPSBhZGFwdGVyLT5tc2lfZW50cmllc1tpXS52ZWN0b3I7CisJCURCR19FUlJPUigiJXMgOiBGcmVlaW5nIElSUSB2ZWN0b3IjJWRcbiIsX19GVU5DVElPTl9fLHZlY3Rvcik7CisJCWZyZWVfaXJxKHZlY3RvcixuZXRkZXYpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBzeGdfcmVtb3ZlX2lzcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJaWYgKGFkYXB0ZXItPm1zaV9lbmFibGVkKQorCQlzeGdfcmVtb3ZlX21zaXhfaXNyKGFkYXB0ZXIpOworCWVsc2UKKwkJZnJlZV9pcnEoYWRhcHRlci0+bmV0ZGV2LT5pcnEsIG5ldGRldik7Cit9CisKK3ZvaWQgc3hnX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJaWYgKGFkYXB0ZXItPm1zaV9lbmFibGVkKSB7CisJCXBjaV9kaXNhYmxlX21zaXgoYWRhcHRlci0+cGNpZGV2KTsKKwkJa2ZyZWUoYWRhcHRlci0+bXNpX2VudHJpZXMpOworCQlhZGFwdGVyLT5tc2lfZW50cmllcyA9IE5VTEw7CisJfQorCXJldHVybjsKK30KIAogLyoKICAqIHN4Z19kb3dubG9hZF9taWNyb2NvZGUKICAqCi0gKiBEb3dubG9hZCBNaWNyb2NvZGUgdG8gU2FoYXJhIGFkYXB0ZXIKKyAqIERvd25sb2FkIE1pY3JvY29kZSB0byBTYWhhcmEgYWRhcHRlciB1c2luZyB0aGUgTGludXgKKyAqIEZpcm13YXJlIG1vZHVsZSB0byBnZXQgdGhlIHVjb2RlLnN5cyBmaWxlLgogICoKICAqIEFyZ3VtZW50cyAtCiAgKgkJYWRhcHRlcgkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCkBAIC0yNDQsOTggKzM4OCwxNDEgQEAKICAqIFJldHVybgogICoJaW50CiAgKi8KLXN0YXRpYyBib29sIHN4Z19kb3dubG9hZF9taWNyb2NvZGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgZW51bSBTWEdfVUNPREVfU0VMIFVjb2RlU2VsKQorc3RhdGljIGJvb2wgc3hnX2Rvd25sb2FkX21pY3JvY29kZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAorCQkJCQkJZW51bSBTWEdfVUNPREVfU0VMIFVjb2RlU2VsKQogewotCXN0cnVjdCBTWEdfSFdfUkVHUyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY29uc3QgY2hhciAqZmlsZSA9ICIiOworCXN0cnVjdCBzeGdfaHdfcmVncyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCWludCByZXQ7CisJaW50IHVjb2RlX3N0YXJ0OwogCXUzMiBTZWN0aW9uOwogCXUzMiBUaGlzU2VjdGlvblNpemU7Ci0JdTMyICpJbnN0cnVjdGlvbiA9IE5VTEw7CisJdTMyIGluc3RydWN0aW9uID0gMDsKIAl1MzIgQmFzZUFkZHJlc3MsIEFkZHJlc3NPZmZzZXQsIEFkZHJlc3M7Ci0vKiAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICBGYWlsdXJlOyAqLworCS8qIHUzMiBGYWlsdXJlOyAqLwogCXUzMiBWYWx1ZVJlYWQ7CiAJdTMyIGk7Ci0JdTMyIG51bVNlY3Rpb25zID0gMDsKKwl1MzIgaW5kZXggPSAwOworCXUzMiBudW1fc2VjdGlvbnMgPSAwOwogCXUzMiBzZWN0aW9uU2l6ZVsxNl07CiAJdTMyIHNlY3Rpb25TdGFydFsxNl07CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJEbmxkVWNvZCIsCiAJCSAgYWRhcHRlciwgMCwgMCwgMCk7Ci0JREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSXG4iLCBfX2Z1bmNfXyk7CiAKLQlzd2l0Y2ggKFVjb2RlU2VsKSB7Ci0JY2FzZSBTWEdfVUNPREVfU0FIQVJBOgkvKiBTYWhhcmEgb3BlcmF0aW9uYWwgdWNvZGUgKi8KLQkJbnVtU2VjdGlvbnMgPSBTTnVtU2VjdGlvbnM7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1TZWN0aW9uczsgaSsrKSB7Ci0JCQlzZWN0aW9uU2l6ZVtpXSA9IFNTZWN0aW9uU2l6ZVtpXTsKLQkJCXNlY3Rpb25TdGFydFtpXSA9IFNTZWN0aW9uU3RhcnRbaV07Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCSAgICAgICAiOiBXb2FoLCBiaWcgZXJyb3Igd2l0aCB0aGUgbWljcm9jb2RlIVxuIik7Ci0JCWJyZWFrOworCS8qCisJICogIFRoaXMgcm91dGluZSBpcyBvbmx5IGltcGxlbWVudGVkIHRvIGRvd25sb2FkIHRoZSBtaWNyb2NvZGUKKwkgKiAgZm9yIHRoZSBSZXZpc2lvbiBCIFNhaGFyYSBjaGlwLiAgUmV2IEEgYW5kIERpYWdub3N0aWMKKwkgKiAgbWljcm9jb2RlIGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLiAgSWYgUmV2IEEgb3IKKwkgKiAgZGlhZ25vc3RpYyB1Y29kZSBpcyByZXF1aXJlZCwgdGhpcyByb3V0aW5lIHdpbGwgb2J2aW91c2x5CisJICogIG5lZWQgdG8gY2hhbmdlLiAgQWxzbywgZXZlbnR1YWxseSBuZWVkIHRvIGFkZCBzdXBwb3J0IGZvcgorCSAqICBSZXYgQiBjaGVja2VkIHZlcnNpb24gb2YgdWNvZGUuICBUaGF0J3MgZWFzeSBlbm91Z2ggb25jZQorCSAqICB0aGUgZnJlZSB2ZXJzaW9uIG9mIFJldiBCIHdvcmtzLgorCSAqLworCUFTU0VSVChVY29kZVNlbCA9PSBTWEdfVUNPREVfU1lTVEVNKTsKKwlBU1NFUlQoYWRhcHRlci0+YXNpY3R5cGUgPT0gU0FIQVJBX1JFVl9CKTsKKyNpZiBTWEdfVUNPREVfREVCVUcKKwlmaWxlID0gInN4Zy9zYWhhcmFkYmdkb3dubG9hZEIuc3lzIjsKKyNlbHNlCisJZmlsZSA9ICJzeGcvc2FoYXJhZG93bmxvYWRCLnN5cyI7CisjZW5kaWYKKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZmlsZSwgJmFkYXB0ZXItPnBjaWRldi0+ZGV2KTsKKwlpZiAocmV0KSB7CisJCURCR19FUlJPUigiJXMgU1hHX05JQzogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgJXNcbiIsIF9fZnVuY19fLGZpbGUpOworCQlyZXR1cm4gcmV0OwogCX0KIAotCURCR19FUlJPUigic3hnOiBSRVNFVCBUSEUgQ0FSRFxuIik7CisJLyoKKwkgKiAgVGhlIG1pY3JvY29kZSAuc3lzIGZpbGUgY29udGFpbnMgc3RhcnRzIHdpdGggYSA0IGJ5dGUgd29yZCBjb250YWluaW5nCisJICogIHRoZSBudW1iZXIgb2Ygc2VjdGlvbnMuIFRoYXQgaXMgZm9sbG93ZWQgYnkgIm51bV9zZWN0aW9ucyIgNCBieXRlCisJICogIHdvcmRzIGNvbnRhaW5pbmcgZWFjaCAic2VjdGlvbiIgc2l6ZS4gIFRoYXQgaXMgZm9sbG93ZWQgbnVtX3NlY3Rpb25zCisJICogIDQgYnl0ZSB3b3JkcyBjb250YWluaW5nIGVhY2ggc2VjdGlvbiAic3RhcnQiIGFkZHJlc3MuCisJICoKKwkgKiAgRm9sbG93aW5nIHRoZSBhYm92ZSBoZWFkZXIsIHRoZSAuc3lzIGZpbGUgY29udGFpbnMgbnVtX3NlY3Rpb25zLAorCSAqICB3aGVyZSBlYWNoIHNlY3Rpb24gc2l6ZSBpcyBzcGVjaWZpZWQsIG5ld2xpbmUgZGVsaW5lYXRldGQgMTIgYnl0ZQorCSAqICBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb25zLgorCSAqLworCW51bV9zZWN0aW9ucyA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCWluZGV4ICs9IDQ7CisJQVNTRVJUKG51bV9zZWN0aW9ucyA8PSAzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NlY3Rpb25zOyBpKyspIHsKKwkJc2VjdGlvblNpemVbaV0gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwkJaW5kZXggKz0gNDsKKwl9CisJZm9yIChpID0gMDsgaSA8IG51bV9zZWN0aW9uczsgaSsrKSB7CisJCXNlY3Rpb25TdGFydFtpXSA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQlpbmRleCArPSA0OworCX0KKwogCS8qIEZpcnN0LCByZXNldCB0aGUgY2FyZCAqLwogCVdSSVRFX1JFRyhId1JlZ3MtPlJlc2V0LCAweERFQUQsIEZMVVNIKTsKKwl1ZGVsYXkoNTApOworCUh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKIAotCS8qIERvd25sb2FkIGVhY2ggc2VjdGlvbiBvZiB0aGUgbWljcm9jb2RlIGFzIHNwZWNpZmllZCBpbiAqLwotCS8qIGl0cyBkb3dubG9hZCBmaWxlLiAgVGhlICpkb3dubG9hZC5jIGZpbGUgaXMgZ2VuZXJhdGVkIHVzaW5nICovCi0JLyogdGhlIHNhaGFyYW9ianRvYyBmYWNpbGl0eSB3aGljaCBjb252ZXJ0cyB0aGUgbWV0YXN0ZXAgLm9iaiAqLwotCS8qIGZpbGUgdG8gYSAuYyBmaWxlIHdoaWNoIGNvbnRhaW5zIGEgdHdvIGRpbWVudGlvbmFsIGFycmF5LiAqLwotCWZvciAoU2VjdGlvbiA9IDA7IFNlY3Rpb24gPCBudW1TZWN0aW9uczsgU2VjdGlvbisrKSB7Ci0JCURCR19FUlJPUigic3hnOiBTRUNUSU9OICMgJWRcbiIsIFNlY3Rpb24pOwotCQlzd2l0Y2ggKFVjb2RlU2VsKSB7Ci0JCWNhc2UgU1hHX1VDT0RFX1NBSEFSQToKLQkJCUluc3RydWN0aW9uID0gKHUzMiAqKSAmIFNhaGFyYVVDb2RlW1NlY3Rpb25dWzBdOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlBU1NFUlQoMCk7Ci0JCQlicmVhazsKLQkJfQorCS8qCisJICogRG93bmxvYWQgZWFjaCBzZWN0aW9uIG9mIHRoZSBtaWNyb2NvZGUgYXMgc3BlY2lmaWVkIGluCisJICogc2VjdGlvblNpemVbaW5kZXhdIHRvIHNlY3Rpb25TdGFydFtpbmRleF0gYWRkcmVzcy4gIEFzCisJICogZGVzY3JpYmVkIGFib3ZlLCB0aGUgLnN5cyBmaWxlIGNvbnRhaW5zIDEyIGJ5dGUgd29yZAorCSAqIG1pY3JvY29kZSBpbnN0cnVjdGlvbnMuIFRoZSAqZG93bmxvYWQuc3lzIGZpbGUgaXMgZ2VuZXJhdGVkCisJICogdXNpbmcgdGhlIG9ianRvc3lzLmV4ZSB1dGlsaXR5IHRoYXQgd2FzIGJ1aWx0IGZvciBTYWhhcmEKKwkgKiBtaWNyb2NvZGUuCisJICovCisJLyogU2VlIHVzYWdlIG9mIHRoaXMgYmVsb3cgd2hlbiB3ZSByZWFkIGJhY2sgZm9yIHBhcml0eSAqLworCXVjb2RlX3N0YXJ0ID0gaW5kZXg7CisJaW5zdHJ1Y3Rpb24gPSAqKHUzMiAqKShmdy0+ZGF0YSArIGluZGV4KTsKKwlpbmRleCArPSA0OworCisJZm9yIChTZWN0aW9uID0gMDsgU2VjdGlvbiA8IG51bV9zZWN0aW9uczsgU2VjdGlvbisrKSB7CiAJCUJhc2VBZGRyZXNzID0gc2VjdGlvblN0YXJ0W1NlY3Rpb25dOwotCQlUaGlzU2VjdGlvblNpemUgPSBzZWN0aW9uU2l6ZVtTZWN0aW9uXSAvIDEyOwkvKiBTaXplIGluIGluc3RydWN0aW9ucyAqLworCQkvKiBTaXplIGluIGluc3RydWN0aW9ucyAqLworCQlUaGlzU2VjdGlvblNpemUgPSBzZWN0aW9uU2l6ZVtTZWN0aW9uXSAvIDEyOwogCQlmb3IgKEFkZHJlc3NPZmZzZXQgPSAwOyBBZGRyZXNzT2Zmc2V0IDwgVGhpc1NlY3Rpb25TaXplOwogCQkgICAgIEFkZHJlc3NPZmZzZXQrKykgeworCQkJdTMyIGZpcnN0X2luc3RyID0gMDsgIC8qIFNlZSBjb21tZW50IGJlbG93ICovCisKIAkJCUFkZHJlc3MgPSBCYXNlQWRkcmVzcyArIEFkZHJlc3NPZmZzZXQ7CiAJCQlBU1NFUlQoKEFkZHJlc3MgJiB+TUlDUk9DT0RFX0FERFJFU1NfTUFTSykgPT0gMCk7Ci0JCQkvKiBXcml0ZSBpbnN0cnVjdGlvbiBiaXRzIDMxIC0gMCAqLwotCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhTG93LCAqSW5zdHJ1Y3Rpb24sIEZMVVNIKTsKLQkJCS8qIFdyaXRlIGluc3RydWN0aW9uIGJpdHMgNjMtMzIgKi8KLQkJCVdSSVRFX1JFRyhId1JlZ3MtPlVjb2RlRGF0YU1pZGRsZSwgKihJbnN0cnVjdGlvbiArIDEpLAotCQkJCSAgRkxVU0gpOwotCQkJLyogV3JpdGUgaW5zdHJ1Y3Rpb24gYml0cyA5NS02NCAqLwotCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhSGlnaCwgKihJbnN0cnVjdGlvbiArIDIpLAotCQkJCSAgRkxVU0gpOworCQkJLyogV3JpdGUgaW5zdHJ1Y3Rpb24gYml0cyAzMSAtIDAgKGxvdykgKi8KKwkJCWZpcnN0X2luc3RyID0gaW5zdHJ1Y3Rpb247CisJCQlXUklURV9SRUcoSHdSZWdzLT5VY29kZURhdGFMb3csIGluc3RydWN0aW9uLCBGTFVTSCk7CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsgIC8qIEFkdmFuY2UgdG8gdGhlICJuZXh0IiBpbnN0cnVjdGlvbiAqLworCisJCQkvKiBXcml0ZSBpbnN0cnVjdGlvbiBiaXRzIDYzLTMyIChtaWRkbGUpICovCisJCQlXUklURV9SRUcoSHdSZWdzLT5VY29kZURhdGFNaWRkbGUsIGluc3RydWN0aW9uLCBGTFVTSCk7CisJCQlpbnN0cnVjdGlvbiA9ICoodTMyICopKGZ3LT5kYXRhICsgaW5kZXgpOworCQkJaW5kZXggKz0gNDsgIC8qIEFkdmFuY2UgdG8gdGhlICJuZXh0IiBpbnN0cnVjdGlvbiAqLworCisJCQkvKiBXcml0ZSBpbnN0cnVjdGlvbiBiaXRzIDk1LTY0IChoaWdoKSAqLworCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhSGlnaCwgaW5zdHJ1Y3Rpb24sIEZMVVNIKTsKKwkJCWluc3RydWN0aW9uID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJCQlpbmRleCArPSA0OyAgLyogQWR2YW5jZSB0byB0aGUgIm5leHQiIGluc3RydWN0aW9uICovCisKIAkJCS8qIFdyaXRlIGluc3RydWN0aW9uIGFkZHJlc3Mgd2l0aCB0aGUgV1JJVEUgYml0IHNldCAqLwogCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVBZGRyLAogCQkJCSAgKEFkZHJlc3MgfCBNSUNST0NPREVfQUREUkVTU19XUklURSksIEZMVVNIKTsKLQkJCS8qIFNhaGFyYSBidWcgaW4gdGhlIHVjb2RlIGRvd25sb2FkIGxvZ2ljIC0gdGhlIHdyaXRlIHRvIERhdGFMb3cgKi8KLQkJCS8qIGZvciB0aGUgbmV4dCBpbnN0cnVjdGlvbiBjb3VsZCBnZXQgY29ycnVwdGVkLiAgVG8gYXZvaWQgdGhpcywgKi8KLQkJCS8qIHdyaXRlIHRvIERhdGFMb3cgYWdhaW4gZm9yIHRoaXMgaW5zdHJ1Y3Rpb24gKHdoaWNoIG1heSBnZXQgKi8KLQkJCS8qIGNvcnJ1cHRlZCwgYnV0IGl0IGRvZXNuJ3QgbWF0dGVyKSwgdGhlbiBpbmNyZW1lbnQgdGhlIGFkZHJlc3MgKi8KLQkJCS8qIGFuZCB3cml0ZSB0aGUgZGF0YSBmb3IgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gdG8gRGF0YUxvdy4gIFRoYXQgKi8KLQkJCS8qIHdyaXRlIHNob3VsZCBzdWNjZWVkLiAqLwotCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhTG93LCAqSW5zdHJ1Y3Rpb24sIFRSVUUpOwotCQkJLyogQWR2YW5jZSAzIHUzMlMgdG8gc3RhcnQgb2YgbmV4dCBpbnN0cnVjdGlvbiAqLwotCQkJSW5zdHJ1Y3Rpb24gKz0gMzsKKwkJCS8qCisJCQkgKiBTYWhhcmEgYnVnIGluIHRoZSB1Y29kZSBkb3dubG9hZCBsb2dpYyAtIHRoZSB3cml0ZSB0byBEYXRhTG93CisJCQkgKiBmb3IgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gY291bGQgZ2V0IGNvcnJ1cHRlZC4gIFRvIGF2b2lkIHRoaXMsCisJCQkgKiB3cml0ZSB0byBEYXRhTG93IGFnYWluIGZvciB0aGlzIGluc3RydWN0aW9uICh3aGljaCBtYXkgZ2V0CisJCQkgKiBjb3JydXB0ZWQsIGJ1dCBpdCBkb2Vzbid0IG1hdHRlciksIHRoZW4gaW5jcmVtZW50IHRoZSBhZGRyZXNzCisJCQkgKiBhbmQgd3JpdGUgdGhlIGRhdGEgZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uIHRvIERhdGFMb3cuICBUaGF0CisJCQkgKiB3cml0ZSBzaG91bGQgc3VjY2VlZC4KKwkJCSAqLworCQkJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVEYXRhTG93LCBmaXJzdF9pbnN0ciwgRkxVU0gpOwogCQl9CiAJfQotCS8qIE5vdyByZXBlYXQgdGhlIGVudGlyZSBvcGVyYXRpb24gcmVhZGluZyB0aGUgaW5zdHJ1Y3Rpb24gYmFjayBhbmQgKi8KLQkvKiBjaGVja2luZyBmb3IgcGFyaXR5IGVycm9ycyAqLwotCWZvciAoU2VjdGlvbiA9IDA7IFNlY3Rpb24gPCBudW1TZWN0aW9uczsgU2VjdGlvbisrKSB7Ci0JCURCR19FUlJPUigic3hnOiBjaGVjayBTRUNUSU9OICMgJWRcbiIsIFNlY3Rpb24pOwotCQlzd2l0Y2ggKFVjb2RlU2VsKSB7Ci0JCWNhc2UgU1hHX1VDT0RFX1NBSEFSQToKLQkJCUluc3RydWN0aW9uID0gKHUzMiAqKSAmIFNhaGFyYVVDb2RlW1NlY3Rpb25dWzBdOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlBU1NFUlQoMCk7Ci0JCQlicmVhazsKLQkJfQorCS8qCisJICogTm93IHJlcGVhdCB0aGUgZW50aXJlIG9wZXJhdGlvbiByZWFkaW5nIHRoZSBpbnN0cnVjdGlvbiBiYWNrIGFuZAorCSAqIGNoZWNraW5nIGZvciBwYXJpdHkgZXJyb3JzCisJICovCisJaW5kZXggPSB1Y29kZV9zdGFydDsKKworCWZvciAoU2VjdGlvbiA9IDA7IFNlY3Rpb24gPCBudW1fc2VjdGlvbnM7IFNlY3Rpb24rKykgewogCQlCYXNlQWRkcmVzcyA9IHNlY3Rpb25TdGFydFtTZWN0aW9uXTsKLQkJVGhpc1NlY3Rpb25TaXplID0gc2VjdGlvblNpemVbU2VjdGlvbl0gLyAxMjsJLyogU2l6ZSBpbiBpbnN0cnVjdGlvbnMgKi8KKwkJLyogU2l6ZSBpbiBpbnN0cnVjdGlvbnMgKi8KKwkJVGhpc1NlY3Rpb25TaXplID0gc2VjdGlvblNpemVbU2VjdGlvbl0gLyAxMjsKIAkJZm9yIChBZGRyZXNzT2Zmc2V0ID0gMDsgQWRkcmVzc09mZnNldCA8IFRoaXNTZWN0aW9uU2l6ZTsKIAkJICAgICBBZGRyZXNzT2Zmc2V0KyspIHsKIAkJCUFkZHJlc3MgPSBCYXNlQWRkcmVzcyArIEFkZHJlc3NPZmZzZXQ7CkBAIC0zNDgsNjIgKzUzNSw3MCBAQAogCQkJCURCR19FUlJPUigic3hnOiAlcyBQQVJJVFkgRVJST1JcbiIsCiAJCQkJCSAgX19mdW5jX18pOwogCi0JCQkJcmV0dXJuIChGQUxTRSk7CS8qIFBhcml0eSBlcnJvciAqLworCQkJCXJldHVybiBGQUxTRTsJLyogUGFyaXR5IGVycm9yICovCiAJCQl9CiAJCQlBU1NFUlQoKFZhbHVlUmVhZCAmIE1JQ1JPQ09ERV9BRERSRVNTX01BU0spID09IEFkZHJlc3MpOwogCQkJLyogUmVhZCB0aGUgaW5zdHJ1Y3Rpb24gYmFjayBhbmQgY29tcGFyZSAqLworCQkJLyogRmlyc3QgaW5zdHJ1Y3Rpb24gKi8KKwkJCWluc3RydWN0aW9uID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJCQlpbmRleCArPSA0OwogCQkJUkVBRF9SRUcoSHdSZWdzLT5VY29kZURhdGFMb3csIFZhbHVlUmVhZCk7Ci0JCQlpZiAoVmFsdWVSZWFkICE9ICpJbnN0cnVjdGlvbikgeworCQkJaWYgKFZhbHVlUmVhZCAhPSBpbnN0cnVjdGlvbikgewogCQkJCURCR19FUlJPUigic3hnOiAlcyBNSVNDT01QQVJFIExPV1xuIiwKIAkJCQkJICBfX2Z1bmNfXyk7Ci0JCQkJcmV0dXJuIChGQUxTRSk7CS8qIE1pc2NvbXBhcmUgKi8KKwkJCQlyZXR1cm4gRkFMU0U7CS8qIE1pc2NvbXBhcmUgKi8KIAkJCX0KKwkJCWluc3RydWN0aW9uID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJCQlpbmRleCArPSA0OwogCQkJUkVBRF9SRUcoSHdSZWdzLT5VY29kZURhdGFNaWRkbGUsIFZhbHVlUmVhZCk7Ci0JCQlpZiAoVmFsdWVSZWFkICE9ICooSW5zdHJ1Y3Rpb24gKyAxKSkgeworCQkJaWYgKFZhbHVlUmVhZCAhPSBpbnN0cnVjdGlvbikgewogCQkJCURCR19FUlJPUigic3hnOiAlcyBNSVNDT01QQVJFIE1JRERMRVxuIiwKIAkJCQkJICBfX2Z1bmNfXyk7Ci0JCQkJcmV0dXJuIChGQUxTRSk7CS8qIE1pc2NvbXBhcmUgKi8KKwkJCQlyZXR1cm4gRkFMU0U7CS8qIE1pc2NvbXBhcmUgKi8KIAkJCX0KKwkJCWluc3RydWN0aW9uID0gKih1MzIgKikoZnctPmRhdGEgKyBpbmRleCk7CisJCQlpbmRleCArPSA0OwogCQkJUkVBRF9SRUcoSHdSZWdzLT5VY29kZURhdGFIaWdoLCBWYWx1ZVJlYWQpOwotCQkJaWYgKFZhbHVlUmVhZCAhPSAqKEluc3RydWN0aW9uICsgMikpIHsKKwkJCWlmIChWYWx1ZVJlYWQgIT0gaW5zdHJ1Y3Rpb24pIHsKIAkJCQlEQkdfRVJST1IoInN4ZzogJXMgTUlTQ09NUEFSRSBISUdIXG4iLAogCQkJCQkgIF9fZnVuY19fKTsKLQkJCQlyZXR1cm4gKEZBTFNFKTsJLyogTWlzY29tcGFyZSAqLworCQkJCXJldHVybiBGQUxTRTsJLyogTWlzY29tcGFyZSAqLwogCQkJfQotCQkJLyogQWR2YW5jZSAzIHUzMlMgdG8gc3RhcnQgb2YgbmV4dCBpbnN0cnVjdGlvbiAqLwotCQkJSW5zdHJ1Y3Rpb24gKz0gMzsKIAkJfQogCX0KIAorCS8qIGRvd25sb2FkIGZpbmlzaGVkICovCisJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJLyogRXZlcnl0aGluZyBPSywgR28uICovCiAJV1JJVEVfUkVHKEh3UmVncy0+VWNvZGVBZGRyLCBNSUNST0NPREVfQUREUkVTU19HTywgRkxVU0gpOwogCi0JLyogUG9sbCB0aGUgQ2FyZFVwIHJlZ2lzdGVyIHRvIHdhaXQgZm9yIG1pY3JvY29kZSB0byBpbml0aWFsaXplICovCi0JLyogR2l2ZSB1cCBhZnRlciAxMCwwMDAgYXR0ZW1wcyAoNTAwbXMpLiAqLworCS8qCisJICogUG9sbCB0aGUgQ2FyZFVwIHJlZ2lzdGVyIHRvIHdhaXQgZm9yIG1pY3JvY29kZSB0byBpbml0aWFsaXplCisJICogR2l2ZSB1cCBhZnRlciAxMCwwMDAgYXR0ZW1wcyAoNTAwbXMpLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CiAJCXVkZWxheSg1MCk7CiAJCVJFQURfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5DYXJkVXAsIFZhbHVlUmVhZCk7CiAJCWlmIChWYWx1ZVJlYWQgPT0gMHhDQUZFKSB7Ci0JCQlEQkdfRVJST1IoInN4ZzogJXMgQk9PIFlBIDB4Q0FGRVxuIiwgX19mdW5jX18pOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAJaWYgKGkgPT0gMTAwMDApIHsKLQkJREJHX0VSUk9SKCJzeGc6ICVzIFRJTUVPVVRcbiIsIF9fZnVuY19fKTsKKwkJREJHX0VSUk9SKCJzeGc6ICVzIFRJTUVPVVQgYnJpbmdpbmcgdXAgY2FyZCAtIHZlcmlmeSBNSUNST0NPREVcbiIsIF9fZnVuY19fKTsKIAotCQlyZXR1cm4gKEZBTFNFKTsJLyogVGltZW91dCAqLworCQlyZXR1cm4gRkFMU0U7CS8qIFRpbWVvdXQgKi8KIAl9Ci0JLyogTm93IHdyaXRlIHRoZSBMb2FkU3luYyByZWdpc3Rlci4gIFRoaXMgaXMgdXNlZCB0byAqLwotCS8qIHN5bmNocm9uaXplIHdpdGggdGhlIGNhcmQgc28gaXQgY2FuIHNjcmliYmxlIG9uIHRoZSBtZW1vcnkgKi8KLQkvKiB0aGF0IGNvbnRhaW5lZCAweENBRkUgZnJvbSB0aGUgIkNhcmRVcCIgc3RlcCBhYm92ZSAqLwotCWlmIChVY29kZVNlbCA9PSBTWEdfVUNPREVfU0FIQVJBKSB7CisJLyoKKwkgKiBOb3cgd3JpdGUgdGhlIExvYWRTeW5jIHJlZ2lzdGVyLiAgVGhpcyBpcyB1c2VkIHRvCisJICogc3luY2hyb25pemUgd2l0aCB0aGUgY2FyZCBzbyBpdCBjYW4gc2NyaWJibGUgb24gdGhlIG1lbW9yeQorCSAqIHRoYXQgY29udGFpbmVkIDB4Q0FGRSBmcm9tIHRoZSAiQ2FyZFVwIiBzdGVwIGFib3ZlCisJICovCisJaWYgKFVjb2RlU2VsID09IFNYR19VQ09ERV9TWVNURU0pIHsKIAkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5Mb2FkU3luYywgMCwgRkxVU0gpOwogCX0KIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhEbmxkVWNkIiwKIAkJICBhZGFwdGVyLCAwLCAwLCAwKTsKLQlEQkdfRVJST1IoInN4ZzogJXMgRVhJVFxuIiwgX19mdW5jX18pOwotCiAJcmV0dXJuIChUUlVFKTsKIH0KIApAQCAtNDExLDE4ICs2MDYsMTYgQEAKICAqIHN4Z19hbGxvY2F0ZV9yZXNvdXJjZXMgLSBBbGxvY2F0ZSBtZW1vcnkgYW5kIGxvY2tzCiAgKgogICogQXJndW1lbnRzIC0KLSAqCWFkYXB0ZXIJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQorICoJYWRhcHRlcgktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKICAqCi0gKiBSZXR1cm4KLSAqCWludAorICogUmV0dXJuIC0gaW50CiAgKi8KIHN0YXRpYyBpbnQgc3hnX2FsbG9jYXRlX3Jlc291cmNlcyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewotCWludCBzdGF0dXM7Ci0JdTMyIGk7CisJaW50IHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOwogCXUzMiBSc3NJZHMsIElzckNvdW50OwotLyogICAgICBzdHJ1Y3QgU1hHX1hNVF9SSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqWG10UmluZzsgKi8KLS8qICAgICAgc3RydWN0IFNYR19SQ1ZfUklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJjdlJpbmc7ICovCisJLyogc3RydWN0IHN4Z194bXRfcmluZwkqWG10UmluZzsgKi8KKwkvKiBzdHJ1Y3Qgc3hnX3Jjdl9yaW5nCSpSY3ZSaW5nOyAqLwogCiAJREJHX0VSUk9SKCIlcyBFTlRFUlxuIiwgX19mdW5jX18pOwogCkBAIC00MzIsNyArNjI1LDcgQEAKIAkvKiBXaW5kb3dzIHRlbGxzIHVzIGhvdyBtYW55IENQVXMgaXQgcGxhbnMgdG8gdXNlIGZvciAqLwogCS8qIFJTUyAqLwogCVJzc0lkcyA9IFNYR19SU1NfQ1BVX0NPVU5UKGFkYXB0ZXIpOwotCUlzckNvdW50ID0gYWRhcHRlci0+TXNpRW5hYmxlZCA/IFJzc0lkcyA6IDE7CisJSXNyQ291bnQgPSBhZGFwdGVyLT5tc2lfZW5hYmxlZCA/IFJzc0lkcyA6IDE7CiAKIAlEQkdfRVJST1IoIiVzIFNldHVwIHRoZSBzcGlubG9ja3NcbiIsIF9fZnVuY19fKTsKIApAQCAtNDQyLDYgKzYzNSw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+Qml0NjRSZWdMb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+QWRhcHRlckxvY2spOworCWF0b21pY19zZXQoJmFkYXB0ZXItPnBlbmRpbmdfYWxsb2NhdGlvbnMsIDApOwogCiAJREJHX0VSUk9SKCIlcyBTZXR1cCB0aGUgbGlzdHNcbiIsIF9fZnVuY19fKTsKIApAQCAtNDUxLDYyICs2NDUsODIgQEAKIAlJbml0aWFsaXplTGlzdEhlYWQoJmFkYXB0ZXItPkZyZWVTZ2xCdWZmZXJzKTsKIAlJbml0aWFsaXplTGlzdEhlYWQoJmFkYXB0ZXItPkFsbFNnbEJ1ZmZlcnMpOwogCi0JLyogTWFyayB0aGVzZSBiYXNpYyBhbGxvY2F0aW9ucyBkb25lLiAgVGhpcyBmbGFncyBlc3NlbnRpYWxseSAqLwotCS8qIHRlbGxzIHRoZSBTeGdGcmVlUmVzb3VyY2VzIHJvdXRpbmUgdGhhdCBpdCBjYW4gZ3JhYiBzcGlubG9ja3MgKi8KLQkvKiBhbmQgcmVmZXJlbmNlIGxpc3RoZWFkcy4gKi8KKwkvKgorCSAqIE1hcmsgdGhlc2UgYmFzaWMgYWxsb2NhdGlvbnMgZG9uZS4gIFRoaXMgZmxhZ3MgZXNzZW50aWFsbHkKKwkgKiB0ZWxscyB0aGUgU3hnRnJlZVJlc291cmNlcyByb3V0aW5lIHRoYXQgaXQgY2FuIGdyYWIgc3BpbmxvY2tzCisJICogYW5kIHJlZmVyZW5jZSBsaXN0aGVhZHMuCisJICovCiAJYWRhcHRlci0+QmFzaWNBbGxvY2F0aW9ucyA9IFRSVUU7Ci0JLyogTWFpbiBhbGxvY2F0aW9uIGxvb3AuICBTdGFydCB3aXRoIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieSAqLwotCS8qIHRoZSBtaWNyb2NvZGUgYW5kIGJhY2sgb2ZmIGlmIG1lbW9yeSBhbGxvY2F0aW9uICovCi0JLyogZmFpbHMuICBJZiB3ZSBoaXQgYSBtaW5pbXVtLCBmYWlsLiAqLworCS8qCisJICogTWFpbiBhbGxvY2F0aW9uIGxvb3AuICBTdGFydCB3aXRoIHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBieQorCSAqIHRoZSBtaWNyb2NvZGUgYW5kIGJhY2sgb2ZmIGlmIG1lbW9yeSBhbGxvY2F0aW9uCisJICogZmFpbHMuICBJZiB3ZSBoaXQgYSBtaW5pbXVtLCBmYWlsLgorCSAqLwogCiAJZm9yICg7OykgewogCQlEQkdfRVJST1IoIiVzIEFsbG9jYXRlIFhtdFJpbmdzIHNpemVbJXhdXG4iLCBfX2Z1bmNfXywKLQkJCSAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBTWEdfWE1UX1JJTkcpICogMSkpOworCQkJICAodW5zaWduZWQgaW50KShzaXplb2Yoc3RydWN0IHN4Z194bXRfcmluZykgKiAxKSk7CiAKLQkJLyogU3RhcnQgd2l0aCBiaWcgaXRlbXMgZmlyc3QgLSByZWNlaXZlIGFuZCB0cmFuc21pdCByaW5ncy4gIEF0IHRoZSBtb21lbnQgKi8KLQkJLyogSSdtIGdvaW5nIHRvIGtlZXAgdGhlIHJpbmcgc2l6ZSBmaXhlZCBhbmQgYWRqdXN0IHRoZSBudW1iZXIgb2YgKi8KLQkJLyogVENCcyBpZiB3ZSBmYWlsLiAgTGF0ZXIgd2UgbWlnaHQgY29uc2lkZXIgcmVkdWNpbmcgdGhlIHJpbmcgc2l6ZSBhcyB3ZWxsLi4gKi8KKwkJLyoKKwkJICogU3RhcnQgd2l0aCBiaWcgaXRlbXMgZmlyc3QgLSByZWNlaXZlIGFuZCB0cmFuc21pdCByaW5ncy4KKwkJICogQXQgdGhlIG1vbWVudCBJJ20gZ29pbmcgdG8ga2VlcCB0aGUgcmluZyBzaXplIGZpeGVkIGFuZAorCQkgKiBhZGp1c3QgdGhlIFRDQnMgaWYgd2UgZmFpbC4gIExhdGVyIHdlIG1pZ2h0CisJCSAqIGNvbnNpZGVyIHJlZHVjaW5nIHRoZSByaW5nIHNpemUgYXMgd2VsbC4uCisJCSAqLwogCQlhZGFwdGVyLT5YbXRSaW5ncyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKLQkJCQkJCQkgc2l6ZW9mKHN0cnVjdCBTWEdfWE1UX1JJTkcpICoKLQkJCQkJCQkgMSwKLQkJCQkJCQkgJmFkYXB0ZXItPlBYbXRSaW5ncyk7CisJCQkJCQkgc2l6ZW9mKHN0cnVjdCBzeGdfeG10X3JpbmcpICoKKwkJCQkJCSAxLAorCQkJCQkJICZhZGFwdGVyLT5QWG10UmluZ3MpOwogCQlEQkdfRVJST1IoIiVzIFhtdFJpbmdzWyVwXVxuIiwgX19mdW5jX18sIGFkYXB0ZXItPlhtdFJpbmdzKTsKIAogCQlpZiAoIWFkYXB0ZXItPlhtdFJpbmdzKSB7CiAJCQlnb3RvIHBlcl90Y2JfYWxsb2NhdGlvbl9mYWlsZWQ7CiAJCX0KLQkJbWVtc2V0KGFkYXB0ZXItPlhtdFJpbmdzLCAwLCBzaXplb2Yoc3RydWN0IFNYR19YTVRfUklORykgKiAxKTsKKwkJbWVtc2V0KGFkYXB0ZXItPlhtdFJpbmdzLCAwLCBzaXplb2Yoc3RydWN0IHN4Z194bXRfcmluZykgKiAxKTsKIAogCQlEQkdfRVJST1IoIiVzIEFsbG9jYXRlIFJjdlJpbmdzIHNpemVbJXhdXG4iLCBfX2Z1bmNfXywKLQkJCSAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBTWEdfUkNWX1JJTkcpICogMSkpOworCQkJICAodW5zaWduZWQgaW50KShzaXplb2Yoc3RydWN0IHN4Z19yY3ZfcmluZykgKiAxKSk7CiAJCWFkYXB0ZXItPlJjdlJpbmdzID0KIAkJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKLQkJCQkJIHNpemVvZihzdHJ1Y3QgU1hHX1JDVl9SSU5HKSAqIDEsCisJCQkJCSBzaXplb2Yoc3RydWN0IHN4Z19yY3ZfcmluZykgKiAxLAogCQkJCQkgJmFkYXB0ZXItPlBSY3ZSaW5ncyk7CiAJCURCR19FUlJPUigiJXMgUmN2UmluZ3NbJXBdXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+UmN2UmluZ3MpOwogCQlpZiAoIWFkYXB0ZXItPlJjdlJpbmdzKSB7CiAJCQlnb3RvIHBlcl90Y2JfYWxsb2NhdGlvbl9mYWlsZWQ7CiAJCX0KLQkJbWVtc2V0KGFkYXB0ZXItPlJjdlJpbmdzLCAwLCBzaXplb2Yoc3RydWN0IFNYR19SQ1ZfUklORykgKiAxKTsKKwkJbWVtc2V0KGFkYXB0ZXItPlJjdlJpbmdzLCAwLCBzaXplb2Yoc3RydWN0IHN4Z19yY3ZfcmluZykgKiAxKTsKKwkJYWRhcHRlci0+dWNvZGVfc3RhdHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3hnX3Vjb2RlX3N0YXRzKSwgR0ZQX0FUT01JQyk7CisJCWFkYXB0ZXItPnB1Y29kZV9zdGF0cyA9IHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBjaWRldiwKKwkJCQkJCWFkYXB0ZXItPnVjb2RlX3N0YXRzLAorCQkJCQkJc2l6ZW9mKHN0cnVjdCBzeGdfdWNvZGVfc3RhdHMpLAorCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKy8vCQltZW1zZXQoYWRhcHRlci0+dWNvZGVfc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3Qgc3hnX3Vjb2RlX3N0YXRzKSk7CiAJCWJyZWFrOwogCiAJICAgICAgcGVyX3RjYl9hbGxvY2F0aW9uX2ZhaWxlZDoKIAkJLyogYW4gYWxsb2NhdGlvbiBmYWlsZWQuICBGcmVlIGFueSBzdWNjZXNzZnVsIGFsbG9jYXRpb25zLiAqLwogCQlpZiAoYWRhcHRlci0+WG10UmluZ3MpIHsKIAkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAotCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBTWEdfWE1UX1JJTkcpICogNDA5NiwKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc3hnX3htdF9yaW5nKSAqIDEsCiAJCQkJCSAgICBhZGFwdGVyLT5YbXRSaW5ncywKIAkJCQkJICAgIGFkYXB0ZXItPlBYbXRSaW5ncyk7CiAJCQlhZGFwdGVyLT5YbXRSaW5ncyA9IE5VTEw7CiAJCX0KIAkJaWYgKGFkYXB0ZXItPlJjdlJpbmdzKSB7CiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKLQkJCQkJICAgIHNpemVvZihzdHJ1Y3QgU1hHX1JDVl9SSU5HKSAqIDQwOTYsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IHN4Z19yY3ZfcmluZykgKiAxLAogCQkJCQkgICAgYWRhcHRlci0+UmN2UmluZ3MsCiAJCQkJCSAgICBhZGFwdGVyLT5QUmN2UmluZ3MpOwogCQkJYWRhcHRlci0+UmN2UmluZ3MgPSBOVUxMOwogCQl9CiAJCS8qIExvb3AgYXJvdW5kIGFuZCB0cnkgYWdhaW4uLi4uICovCisJCWlmIChhZGFwdGVyLT51Y29kZV9zdGF0cykgeworCQkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wY2lkZXYsCisJCQkJCXNpemVvZihzdHJ1Y3Qgc3hnX3Vjb2RlX3N0YXRzKSwKKwkJCQkJYWRhcHRlci0+cHVjb2RlX3N0YXRzLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJYWRhcHRlci0+dWNvZGVfc3RhdHMgPSBOVUxMOworCQl9CisKIAl9CiAKIAlEQkdfRVJST1IoIiVzIEluaXRpYWxpemUgUkNWIFpFUk8gYW5kIFhNVCBaRVJPIHJpbmdzXG4iLCBfX2Z1bmNfXyk7CkBAIC01MTUsNTMgKzcyOSwzNyBAQAogCVNYR19JTklUSUFMSVpFX1JJTkcoYWRhcHRlci0+WG10UmluZ1plcm9JbmZvLCBTWEdfWE1UX1JJTkdfU0laRSk7CiAKIAkvKiBTYW5pdHkgY2hlY2sgcmVjZWl2ZSBkYXRhIHN0cnVjdHVyZSBmb3JtYXQgKi8KLQlBU1NFUlQoKGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID09IFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRSkgfHwKLQkgICAgICAgKGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID09IFNYR19SQ1ZfSlVNQk9fQlVGRkVSX1NJWkUpKTsKLQlBU1NFUlQoc2l6ZW9mKHN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0spID09CisJLyogQVNTRVJUKChhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9PSBTWEdfUkNWX0RBVEFfQlVGRkVSX1NJWkUpIHx8CisJICAgICAgIChhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSA9PSBTWEdfUkNWX0pVTUJPX0JVRkZFUl9TSVpFKSk7ICovCisJQVNTRVJUKHNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrKSA9PQogCSAgICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfU0laRSk7CiAKLQkvKiBBbGxvY2F0ZSByZWNlaXZlIGRhdGEgYnVmZmVycy4gIFdlIGFsbG9jYXRlIGEgYmxvY2sgb2YgYnVmZmVycyBhbmQgKi8KLQkvKiBhIGNvcnJlc3BvbmRpbmcgZGVzY3JpcHRvciBibG9jayBhdCBvbmNlLiAgU2VlIHN4Z2h3Lmg6U1hHX1JDVl9CTE9DSyAqLwotCWZvciAoaSA9IDA7IGkgPCBTWEdfSU5JVElBTF9SQ1ZfREFUQV9CVUZGRVJTOwotCSAgICAgaSArPSBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgewotCQlzeGdfYWxsb2NhdGVfYnVmZmVyX21lbW9yeShhZGFwdGVyLAotCQkJCQkgICBTWEdfUkNWX0JMT0NLX1NJWkUoYWRhcHRlci0+Ci0JCQkJCQkJICAgICAgUmVjZWl2ZUJ1ZmZlclNpemUpLAotCQkJCQkgICBTWEdfQlVGRkVSX1RZUEVfUkNWKTsKLQl9Ci0JLyogTkJMIHJlc291cmNlIGFsbG9jYXRpb24gY2FuIGZhaWwgaW4gdGhlICdBbGxvY2F0ZUNvbXBsZXRlJyByb3V0aW5lLCB3aGljaCAqLwotCS8qIGRvZXNuJ3QgcmV0dXJuIHN0YXR1cy4gIE1ha2Ugc3VyZSB3ZSBnb3QgdGhlIG51bWJlciBvZiBidWZmZXJzIHdlIHJlcXVlc3RlZCAqLwotCWlmIChhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQgPCBTWEdfSU5JVElBTF9SQ1ZfREFUQV9CVUZGRVJTKSB7Ci0JCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBUmVzRjYiLAotCQkJICBhZGFwdGVyLCBhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQsIFNYR19NQVhfRU5UUklFUywKLQkJCSAgMCk7Ci0JCXJldHVybiAoU1RBVFVTX1JFU09VUkNFUyk7Ci0JfQotCiAJREJHX0VSUk9SKCIlcyBBbGxvY2F0ZSBFdmVudFJpbmdzIHNpemVbJXhdXG4iLCBfX2Z1bmNfXywKLQkJICAodW5zaWduZWQgaW50KShzaXplb2Yoc3RydWN0IFNYR19FVkVOVF9SSU5HKSAqIFJzc0lkcykpOworCQkgICh1bnNpZ25lZCBpbnQpKHNpemVvZihzdHJ1Y3Qgc3hnX2V2ZW50X3JpbmcpICogUnNzSWRzKSk7CiAKIAkvKiBBbGxvY2F0ZSBldmVudCBxdWV1ZXMuICovCiAJYWRhcHRlci0+RXZlbnRSaW5ncyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKLQkJCQkJCSAgIHNpemVvZihzdHJ1Y3QgU1hHX0VWRU5UX1JJTkcpICoKLQkJCQkJCSAgIFJzc0lkcywKLQkJCQkJCSAgICZhZGFwdGVyLT5QRXZlbnRSaW5ncyk7CisJCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc3hnX2V2ZW50X3JpbmcpICoKKwkJCQkJICAgUnNzSWRzLAorCQkJCQkgICAmYWRhcHRlci0+UEV2ZW50UmluZ3MpOwogCiAJaWYgKCFhZGFwdGVyLT5FdmVudFJpbmdzKSB7Ci0JCS8qIENhbGxlciB3aWxsIGNhbGwgU3hnRnJlZUFkYXB0ZXIgdG8gY2xlYW4gdXAgYWJvdmUgYWxsb2NhdGlvbnMgKi8KKwkJLyogQ2FsbGVyIHdpbGwgY2FsbCBTeGdGcmVlQWRhcHRlciB0byBjbGVhbiB1cCBhYm92ZQorCQkgKiBhbGxvY2F0aW9ucyAqLwogCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y4IiwKIAkJCSAgYWRhcHRlciwgU1hHX01BWF9FTlRSSUVTLCAwLCAwKTsKIAkJc3RhdHVzID0gU1RBVFVTX1JFU09VUkNFUzsKIAkJZ290byBwZXJfdGNiX2FsbG9jYXRpb25fZmFpbGVkOwogCX0KLQltZW1zZXQoYWRhcHRlci0+RXZlbnRSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBTWEdfRVZFTlRfUklORykgKiBSc3NJZHMpOworCW1lbXNldChhZGFwdGVyLT5FdmVudFJpbmdzLCAwLCBzaXplb2Yoc3RydWN0IHN4Z19ldmVudF9yaW5nKSAqIFJzc0lkcyk7CiAKIAlEQkdfRVJST1IoIiVzIEFsbG9jYXRlIElTUiBzaXplWyV4XVxuIiwgX19mdW5jX18sIElzckNvdW50KTsKIAkvKiBBbGxvY2F0ZSBJU1IgKi8KIAlhZGFwdGVyLT5Jc3IgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCiAJCQkJCSAgICBJc3JDb3VudCwgJmFkYXB0ZXItPlBJc3IpOwogCWlmICghYWRhcHRlci0+SXNyKSB7Ci0JCS8qIENhbGxlciB3aWxsIGNhbGwgU3hnRnJlZUFkYXB0ZXIgdG8gY2xlYW4gdXAgYWJvdmUgYWxsb2NhdGlvbnMgKi8KKwkJLyogQ2FsbGVyIHdpbGwgY2FsbCBTeGdGcmVlQWRhcHRlciB0byBjbGVhbiB1cCBhYm92ZQorCQkgKiBhbGxvY2F0aW9ucyAqLwogCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQVJlc0Y5IiwKIAkJCSAgYWRhcHRlciwgU1hHX01BWF9FTlRSSUVTLCAwLCAwKTsKIAkJc3RhdHVzID0gU1RBVFVTX1JFU09VUkNFUzsKQEAgLTU4OCw4ICs3ODYsNyBAQAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbGNSZXNTIiwKIAkJICBhZGFwdGVyLCBTWEdfTUFYX0VOVFJJRVMsIDAsIDApOwogCi0JREJHX0VSUk9SKCIlcyBFWElUXG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKQEAgLTU5OSw3ICs3OTYsNiBAQAogICoKICAqIEFyZ3VtZW50cyAtCiAgKgkJcGNpZGV2CQkJLSBBIHBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCi0gKgogICovCiBzdGF0aWMgdm9pZCBzeGdfY29uZmlnX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQogewpAQCAtNjA5LDEyICs4MDUsMTkgQEAKIAlwY2lfcmVhZF9jb25maWdfd29yZChwY2lkZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NvbW1hbmQpOwogCURCR19FUlJPUigic3hnOiAlcyAgUENJIGNvbW1hbmRbJTQuNHhdXG4iLCBfX2Z1bmNfXywgcGNpX2NvbW1hbmQpOwogCS8qIFNldCB0aGUgY29tbWFuZCByZWdpc3RlciAqLwotCW5ld19jb21tYW5kID0gcGNpX2NvbW1hbmQgfCAoUENJX0NPTU1BTkRfTUVNT1JZIHwJLyogTWVtb3J5IFNwYWNlIEVuYWJsZSAqLwotCQkJCSAgICAgUENJX0NPTU1BTkRfTUFTVEVSIHwJLyogQnVzIG1hc3RlciBlbmFibGUgKi8KLQkJCQkgICAgIFBDSV9DT01NQU5EX0lOVkFMSURBVEUgfAkvKiBNZW1vcnkgd3JpdGUgYW5kIGludmFsaWRhdGUgKi8KLQkJCQkgICAgIFBDSV9DT01NQU5EX1BBUklUWSB8CS8qIFBhcml0eSBlcnJvciByZXNwb25zZSAqLwotCQkJCSAgICAgUENJX0NPTU1BTkRfU0VSUiB8CS8qIFN5c3RlbSBFUlIgKi8KLQkJCQkgICAgIFBDSV9DT01NQU5EX0ZBU1RfQkFDSyk7CS8qIEZhc3QgYmFjay10by1iYWNrICovCisJbmV3X2NvbW1hbmQgPSBwY2lfY29tbWFuZCB8ICgKKwkJCQkgICAgIC8qIE1lbW9yeSBTcGFjZSBFbmFibGUgKi8KKwkJCQkgICAgIFBDSV9DT01NQU5EX01FTU9SWSB8CisJCQkJICAgICAvKiBCdXMgbWFzdGVyIGVuYWJsZSAqLworCQkJCSAgICAgUENJX0NPTU1BTkRfTUFTVEVSIHwKKwkJCSAgICAgCSAgICAgLyogTWVtb3J5IHdyaXRlIGFuZCBpbnZhbGlkYXRlICovCisJCQkJICAgICBQQ0lfQ09NTUFORF9JTlZBTElEQVRFIHwKKwkJCQkgICAgIC8qIFBhcml0eSBlcnJvciByZXNwb25zZSAqLworCQkJCSAgICAgUENJX0NPTU1BTkRfUEFSSVRZIHwKKwkJCQkgICAgIC8qIFN5c3RlbSBFUlIgKi8KKwkJCQkgICAgIFBDSV9DT01NQU5EX1NFUlIgfAorCQkJCSAgICAgLyogRmFzdCBiYWNrLXRvLWJhY2sgKi8KKwkJCQkgICAgIFBDSV9DT01NQU5EX0ZBU1RfQkFDSyk7CiAJaWYgKHBjaV9jb21tYW5kICE9IG5ld19jb21tYW5kKSB7CiAJCURCR19FUlJPUigiJXMgLS0gVXBkYXRpbmcgUENJIENPTU1BTkQgcmVnaXN0ZXIgJTQuNHgtPiU0LjR4LlxuIiwKIAkJCSAgX19mdW5jX18sIHBjaV9jb21tYW5kLCBuZXdfY29tbWFuZCk7CkBAIC02MjIsNiArODI1LDc3IEBACiAJfQogfQogCisvKgorICogc3hnX3JlYWRfY29uZmlnCisgKiAJQGFkYXB0ZXIgOiBQb2ludGVyIHRvIHRoZSBhZGFwdGVyIHN0cnVjdHVyZSBmb3IgdGhlIGNhcmQKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSBFRVBST00vRkxBU0gKKyAqLworc3RhdGljIGlubGluZSBpbnQgc3hnX3JlYWRfY29uZmlnKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJLyogc3RydWN0IHN4Z19jb25maWcJZGF0YTsgKi8KKyAgCXN0cnVjdCBzeGdfY29uZmlnCSpjb25maWc7CisJc3RydWN0IHN3X2NmZ19kYXRhCSpkYXRhOworCWRtYV9hZGRyX3QJCXBfYWRkcjsKKwl1bnNpZ25lZCBsb25nCQlzdGF0dXM7CisJdW5zaWduZWQgbG9uZwkJaTsKKyAJY29uZmlnID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorIAkJCQkJc2l6ZW9mKHN0cnVjdCBzeGdfY29uZmlnKSwgJnBfYWRkcik7CisKKyAgCWlmKCFjb25maWcpIHsKKwkJLyoKKwkJICogV2UgY2FudCBnZXQgZXZlbiB0aGlzIG11Y2ggbWVtb3J5LiBSYWlzZSBhIGhlbGwKKyAJCSAqIEdldCBvdXQgb2YgaGVyZQorIAkJICovCisJCXByaW50ayhLRVJOX0VSUiIlcyA6IENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJlYWRpbmcgXAorCQkJCSBFRVBST01cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRhdGEgPSAmY29uZmlnLT5Td0NmZzsKKworICAgIC8qIEluaXRpYWxpemUgKHJlZmxlY3RpdmUgbWVtb3J5KSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkNvbmZpZ1N0YXQsIFNYR19DRkdfVElNRU9VVCwgVFJVRSk7CisKKyAgICAvKiBTZW5kIHJlcXVlc3QgdG8gZmV0Y2ggY29uZmlndXJhdGlvbiBkYXRhICovCisJV1JJVEVfUkVHNjQoYWRhcHRlciwgYWRhcHRlci0+VWNvZGVSZWdzWzBdLkNvbmZpZywgcF9hZGRyLCAwKTsKKwlmb3IoaT0wOyBpPDEwMDA7IGkrKykgeworCQlSRUFEX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uQ29uZmlnU3RhdCwgc3RhdHVzKTsKKwkJaWYgKHN0YXR1cyAhPSBTWEdfQ0ZHX1RJTUVPVVQpCisJCQlicmVhazsKKwkJbWRlbGF5KDEpOwkJCS8qIERvIHdlIHJlYWxseSBuZWVkIHRoaXMgKi8KKwl9CisKKwlzd2l0Y2goc3RhdHVzKSB7CisJLyogQ29uZmlnIHJlYWQgZnJvbSBFRVBST00gc3VjY2VlZGVkICovCisJY2FzZSBTWEdfQ0ZHX0xPQURfRUVQUk9NOgorCS8qIENvbmZpZyByZWFkIGZyb20gRmxhc2ggc3VjY2VlZGVkICovCisJY2FzZSBTWEdfQ0ZHX0xPQURfRkxBU0g6CisJCS8qCisJCSAqIENvcHkgdGhlIE1BQyBhZGRyZXNzIHRvIGFkYXB0ZXIgc3RydWN0dXJlCisJCSAqIFRPRE86IFdlIGFyZSBub3QgZG9pbmcgdGhlIHJlbWFpbmluZyBwYXJ0IDogRlJVLCBldGMKKwkJICovCisJCW1lbWNweShhZGFwdGVyLT5tYWNhZGRyLCBkYXRhLT5NYWNBZGRyWzBdLk1hY0FkZHIsCisJCQlzaXplb2Yoc3RydWN0IHN4Z19jb25maWdfbWFjKSk7CisJCWJyZWFrOworCWNhc2UgU1hHX0NGR19USU1FT1VUOgorCWNhc2UgU1hHX0NGR19MT0FEX0lOVkFMSUQ6CisJY2FzZSBTWEdfQ0ZHX0xPQURfRVJST1I6CisJZGVmYXVsdDoJLyogRml4IGRlZmF1bHQgaGFuZGxlciBsYXRlciAqLworCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzICA6IFdlIGNvdWxkIG5vdCByZWFkIHRoZSBjb25maWcgXAorCQkJd29yZC4gU3RhdHVzID0gJWxkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWJyZWFrOworCX0KKwlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwgc2l6ZW9mKHN0cnVjdCBzd19jZmdfZGF0YSksIGRhdGEsCisJCQkJcF9hZGRyKTsKKwlpZiAoYWRhcHRlci0+bmV0ZGV2KSB7CisJCW1lbWNweShhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5jdXJybWFjYWRkciwgNik7CisJCW1lbWNweShhZGFwdGVyLT5uZXRkZXYtPnBlcm1fYWRkciwgYWRhcHRlci0+Y3Vycm1hY2FkZHIsIDYpOworCX0KKwlzeGdfZGJnX21hY2FkZHJzKGFkYXB0ZXIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKwogc3RhdGljIGludCBzeGdfZW50cnlfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwKIAkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfdGJsX2VudHJ5KQogewpAQCAtNjMzLDYgKzkwNyw3IEBACiAJdTMyIHN0YXR1cyA9IDA7CiAJdWxvbmcgbW1pb19zdGFydCA9IDA7CiAJdWxvbmcgbW1pb19sZW4gPSAwOworCXVuc2lnbmVkIGNoYXIgcmV2aXNpb25faWQ7CiAKIAlEQkdfRVJST1IoInN4ZzogJXMgMi42IFZFUlNJT04gRU5URVIgamlmZmllc1slbHhdIGNwdSAlZFxuIiwKIAkJICBfX2Z1bmNfXywgamlmZmllcywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKQEAgLTY1NCw5ICs5MjksMTEgQEAKIAogCWlmIChzeGdfZGVidWcgPiAwICYmIGRpZF92ZXJzaW9uKysgPT0gMCkgewogCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgc3hnX2Jhbm5lcik7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBEUlZfVkVSU0lPTik7CisJCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBTWEdfRFJWX1ZFUlNJT04pOwogCX0KIAorCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaWRldiwgUENJX1JFVklTSU9OX0lELCAmcmV2aXNpb25faWQpOworCiAJaWYgKCEoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwY2lkZXYsIERNQV82NEJJVF9NQVNLKSkpIHsKIAkJREJHX0VSUk9SKCJwY2lfc2V0X2RtYV9tYXNrKERNQV82NEJJVF9NQVNLKSBzdWNjZXNzZnVsXG4iKTsKIAl9IGVsc2UgewpAQCAtNjcxLDcgKzk0OCw3IEBACiAKIAlEQkdfRVJST1IoIkNhbGwgcGNpX3JlcXVlc3RfcmVnaW9uc1xuIik7CiAKLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaWRldiwgRFJWX05BTUUpOworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpZGV2LCBzeGdfZHJpdmVyX25hbWUpOwogCWlmIChlcnIpIHsKIAkJREJHX0VSUk9SKCJwY2lfcmVxdWVzdF9yZWdpb25zIEZBSUxFRCBlcnJbJXhdXG4iLCBlcnIpOwogCQlyZXR1cm4gZXJyOwpAQCAtNjkyLDYgKzk2OSwxNSBAQAogCiAJcGNpX3NldF9kcnZkYXRhKHBjaWRldiwgbmV0ZGV2KTsKIAlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpZiAocmV2aXNpb25faWQgPT0gMSkgeworCQlhZGFwdGVyLT5hc2ljdHlwZSA9IFNBSEFSQV9SRVZfQTsKKwl9IGVsc2UgaWYgKHJldmlzaW9uX2lkID09IDIpIHsKKwkJYWRhcHRlci0+YXNpY3R5cGUgPSBTQUhBUkFfUkVWX0I7CisJfSBlbHNlIHsKKwkJQVNTRVJUKDApOworCQlEQkdfRVJST1IoIiVzIFVuZXhwZWN0ZWQgcmV2aXNpb24gSUQgJXhcbiIsIF9fRlVOQ1RJT05fXywgcmV2aXNpb25faWQpOworCQlnb3RvIGVycl9vdXRfZXhpdF9zeGdfcHJvYmU7CisJfQogCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKIAlhZGFwdGVyLT5wY2lkZXYgPSBwY2lkZXY7CiAKQEAgLTcwNywxMiArOTkzLDEyIEBACiAJaWYgKCFtZW1tYXBwZWRfaW9hZGRyKSB7CiAJCURCR19FUlJPUigiJXMgY2Fubm90IHJlbWFwIE1NSU8gcmVnaW9uICVseCBAICVseFxuIiwKIAkJCSAgX19mdW5jX18sIG1taW9fbGVuLCBtbWlvX3N0YXJ0KTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb247CisJCWdvdG8gZXJyX291dF9mcmVlX21taW9fcmVnaW9uXzA7CiAJfQogCi0JREJHX0VSUk9SCi0JICAgICgic3hnOiAlcyBmb3VuZCBBbGFjcml0ZWNoIFNYRyBQQ0ksIE1NSU8gYXQgJXAsIHN0YXJ0WyVseF0gbGVuWyVseF0sIElSUSAlZC5cbiIsCi0JICAgICBfX2Z1bmNfXywgbWVtbWFwcGVkX2lvYWRkciwgbW1pb19zdGFydCwgbW1pb19sZW4sIHBjaWRldi0+aXJxKTsKKwlEQkdfRVJST1IoInN4ZzogJXMgZm91bmQgQWxhY3JpdGVjaCBTWEcgUENJLCBNTUlPIGF0ICVwLCBzdGFydFslbHhdIFwKKwkgICAgICBsZW5bJWx4XSwgSVJRICVkLlxuIiwgX19mdW5jX18sIG1lbW1hcHBlZF9pb2FkZHIsIG1taW9fc3RhcnQsCisJCQkJCSAgICAgIG1taW9fbGVuLCBwY2lkZXYtPmlycSk7CiAKIAlhZGFwdGVyLT5Id1JlZ3MgPSAodm9pZCAqKW1lbW1hcHBlZF9pb2FkZHI7CiAJYWRhcHRlci0+YmFzZV9hZGRyID0gbWVtbWFwcGVkX2lvYWRkcjsKQEAgLTcyOSw3ICsxMDE1LDcgQEAKIAlpZiAoIW1lbW1hcHBlZF9pb2FkZHIpIHsKIAkJREJHX0VSUk9SKCIlcyBjYW5ub3QgcmVtYXAgTU1JTyByZWdpb24gJWx4IEAgJWx4XG4iLAogCQkJICBfX2Z1bmNfXywgbW1pb19sZW4sIG1taW9fc3RhcnQpOwotCQlnb3RvIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbjsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbW1pb19yZWdpb25fMjsKIAl9CiAKIAlEQkdfRVJST1IoInN4ZzogJXMgZm91bmQgQWxhY3JpdGVjaCBTWEcgUENJLCBNTUlPIGF0ICVwLCAiCkBAIC03MzksOCArMTAyNSwxMCBAQAogCWFkYXB0ZXItPlVjb2RlUmVncyA9ICh2b2lkICopbWVtbWFwcGVkX2lvYWRkcjsKIAogCWFkYXB0ZXItPlN0YXRlID0gU1hHX1NUQVRFX0lOSVRJQUxJWklORzsKLQkvKiBNYWludGFpbiBhIGxpc3Qgb2YgYWxsIGFkYXB0ZXJzIGFuY2hvcmVkIGJ5ICovCi0JLyogdGhlIGdsb2JhbCBTeGdEcml2ZXIgc3RydWN0dXJlLiAqLworCS8qCisJICogTWFpbnRhaW4gYSBsaXN0IG9mIGFsbCBhZGFwdGVycyBhbmNob3JlZCBieQorCSAqIHRoZSBnbG9iYWwgU3hnRHJpdmVyIHN0cnVjdHVyZS4KKwkgKi8KIAlhZGFwdGVyLT5OZXh0ID0gU3hnRHJpdmVyLkFkYXB0ZXJzOwogCVN4Z0RyaXZlci5BZGFwdGVycyA9IGFkYXB0ZXI7CiAJYWRhcHRlci0+QWRhcHRlcklEID0gKytTeGdEcml2ZXIuQWRhcHRlcklEOwpAQCAtNzU4LDEwICsxMDQ2LDEyIEBACiAJCWFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID0gU1hHX1JDVl9EQVRBX0JVRkZFUl9TSVpFOwogCX0KIAotLyogICAgc3RhdHVzID0gU1hHX1JFQURfRUVQUk9NKGFkYXB0ZXIpOyAqLwotLyogICAgaWYgKCFzdGF0dXMpIHsgKi8KLS8qICAgICAgICBnb3RvIHN4Z19pbml0X2JhZDsgKi8KLS8qICAgIH0gKi8KKwkvKgorCSAqICAgIHN0YXR1cyA9IFNYR19SRUFEX0VFUFJPTShhZGFwdGVyKTsKKwkgKiAgICBpZiAoIXN0YXR1cykgeworCSAqICAgICAgICBnb3RvIHN4Z19pbml0X2JhZDsKKwkgKiAgICB9CisJICovCiAKIAlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2NvbmZpZ19wY2lcbiIsIF9fZnVuY19fKTsKIAlzeGdfY29uZmlnX3BjaShwY2lkZXYpOwpAQCAtNzc0LDE2ICsxMDY0LDEzIEBACiAJYWRhcHRlci0+dmVuZGlkID0gcGNpX3RibF9lbnRyeS0+dmVuZG9yOwogCWFkYXB0ZXItPmRldmlkID0gcGNpX3RibF9lbnRyeS0+ZGV2aWNlOwogCWFkYXB0ZXItPnN1YnN5c2lkID0gcGNpX3RibF9lbnRyeS0+c3ViZGV2aWNlOwotCWFkYXB0ZXItPmJ1c251bWJlciA9IHBjaWRldi0+YnVzLT5udW1iZXI7CiAJYWRhcHRlci0+c2xvdG51bWJlciA9ICgocGNpZGV2LT5kZXZmbiA+PiAzKSAmIDB4MUYpOwogCWFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyID0gKHBjaWRldi0+ZGV2Zm4gJiAweDcpOwogCWFkYXB0ZXItPm1lbW9yeWxlbmd0aCA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCAwKTsKIAlhZGFwdGVyLT5pcnEgPSBwY2lkZXYtPmlycTsKIAlhZGFwdGVyLT5uZXh0X25ldGRldmljZSA9IGhlYWRfbmV0ZGV2aWNlOwogCWhlYWRfbmV0ZGV2aWNlID0gbmV0ZGV2OwotLyogICAgICBhZGFwdGVyLT5jaGlwaWQgPSBjaGlwX2lkeDsgKi8KIAlhZGFwdGVyLT5wb3J0ID0gMDsJLyphZGFwdGVyLT5mdW5jdGlvbm51bWJlcjsgKi8KLQlhZGFwdGVyLT5jYXJkaW5kZXggPSBhZGFwdGVyLT5wb3J0OwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGFuZCBvdGhlciByZXNvdXJjZXMgKi8KIAlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2FsbG9jYXRlX3Jlc291cmNlc1xuIiwgX19mdW5jX18pOwpAQCAtNzk1LDEwICsxMDgyLDExIEBACiAJfQogCiAJREJHX0VSUk9SKCJzeGc6ICVzIEVOVEVSIHN4Z19kb3dubG9hZF9taWNyb2NvZGVcbiIsIF9fZnVuY19fKTsKLQlpZiAoc3hnX2Rvd25sb2FkX21pY3JvY29kZShhZGFwdGVyLCBTWEdfVUNPREVfU0FIQVJBKSkgeworCWlmIChzeGdfZG93bmxvYWRfbWljcm9jb2RlKGFkYXB0ZXIsIFNYR19VQ09ERV9TWVNURU0pKSB7CiAJCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfYWRhcHRlcl9zZXRfaHdhZGRyXG4iLAogCQkJICBfX2Z1bmNfXyk7Ci0JCXN4Z19hZGFwdGVyX3NldF9od2FkZHIoYWRhcHRlcik7CisJCXN4Z19yZWFkX2NvbmZpZyhhZGFwdGVyKTsKKwkJc3RhdHVzID0gc3hnX2FkYXB0ZXJfc2V0X2h3YWRkcihhZGFwdGVyKTsKIAl9IGVsc2UgewogCQlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0ZBSUw7CiAJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKQEAgLTgxMSw0MCArMTA5OSw2MyBAQAogCW5ldGRldi0+c3RvcCA9IHN4Z19lbnRyeV9oYWx0OwogCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gc3hnX3NlbmRfcGFja2V0czsKIAluZXRkZXYtPmRvX2lvY3RsID0gc3hnX2lvY3RsOworCW5ldGRldi0+Y2hhbmdlX210dSA9IHN4Z19jaGFuZ2VfbXR1OwogI2lmIFhYWFRPRE8KIAluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHN4Z19tYWNfc2V0X2FkZHJlc3M7Ci0jaWYgU0xJQ19HRVRfU1RBVFNfRU5BQkxFRAorI2VuZGlmCiAJbmV0ZGV2LT5nZXRfc3RhdHMgPSBzeGdfZ2V0X3N0YXRzOwotI2VuZGlmCiAJbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzeGdfbWNhc3Rfc2V0X2xpc3Q7Ci0jZW5kaWYKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmc3hnX25pY19ldGh0b29sX29wcyk7CisgCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9JUFY2X0NTVU07CisJZXJyID0gc3hnX3NldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKKwlpZiAoZXJyICE9IFNUQVRVU19TVUNDRVNTKQorCQlEQkdfRVJST1IoIkNhbm5vdCBlbmFibGUgTVNJLVggY2FwYWJpbGl0eVxuIik7CiAKIAlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKLS8qICBzdHJjcHkobmV0ZGV2LT5uYW1lLCBwY2lfbmFtZShwY2lkZXYpKTsgKi8KKwkvKiAgc3RyY3B5KG5ldGRldi0+bmFtZSwgcGNpX25hbWUocGNpZGV2KSk7ICovCiAJaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KSkpIHsKIAkJREJHX0VSUk9SKCJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmcuICVzXG4iLAogCQkJICBuZXRkZXYtPm5hbWUpOwogCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJfQogCisJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSwKKwkJc3hnX3BvbGwsIFNYR19ORVRERVZfV0VJR0hUKTsKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gMiAqIEhaOworCWluaXRfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKKwlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9ICZzeGdfd2F0Y2hkb2c7CisJYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOworCUlOSVRfV09SSygmYWRhcHRlci0+dXBkYXRlX2xpbmtfc3RhdHVzLCBzeGdfdXBkYXRlX2xpbmtfc3RhdHVzKTsKKwogCURCR19FUlJPUgotCSAgICAoInN4ZzogJXMgYWRkciAweCVseCwgaXJxICVkLCBNQUMgYWRkciAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKKwkgICAgKCJzeGc6ICVzIGFkZHIgMHglbHgsIGlycSAlZCwgTUFDIGFkZHIgXAorCQklMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKIAkgICAgIG5ldGRldi0+bmFtZSwgbmV0ZGV2LT5iYXNlX2FkZHIsIHBjaWRldi0+aXJxLCBuZXRkZXYtPmRldl9hZGRyWzBdLAogCSAgICAgbmV0ZGV2LT5kZXZfYWRkclsxXSwgbmV0ZGV2LT5kZXZfYWRkclsyXSwgbmV0ZGV2LT5kZXZfYWRkclszXSwKIAkgICAgIG5ldGRldi0+ZGV2X2FkZHJbNF0sIG5ldGRldi0+ZGV2X2FkZHJbNV0pOwogCi0vKnN4Z19pbml0X2JhZDogKi8KKwkvKiBzeGdfaW5pdF9iYWQ6ICovCiAJQVNTRVJUKHN0YXR1cyA9PSBGQUxTRSk7Ci0vKiAgICAgIHN4Z19mcmVlX2FkYXB0ZXIoYWRhcHRlcik7ICovCisJLyogc3hnX2ZyZWVfYWRhcHRlcihhZGFwdGVyKTsgKi8KIAogCURCR19FUlJPUigic3hnOiAlcyBFWElUIHN0YXR1c1sleF0gamlmZmllc1slbHhdIGNwdSAlZFxuIiwgX19mdW5jX18sCiAJCSAgc3RhdHVzLCBqaWZmaWVzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXJldHVybiBzdGF0dXM7CiAKICAgICAgIGVycl9vdXRfdW5tYXA6Ci0JaW91bm1hcCgodm9pZCAqKW1lbW1hcHBlZF9pb2FkZHIpOworCXN4Z19mcmVlX3Jlc291cmNlcyhhZGFwdGVyKTsKIAotICAgICAgZXJyX291dF9mcmVlX21taW9fcmVnaW9uOgorICAgICAgZXJyX291dF9mcmVlX21taW9fcmVnaW9uXzI6CisKKwltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMik7CisgICAgICAgIG1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDIpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisKKyAgICAgIGVycl9vdXRfZnJlZV9tbWlvX3JlZ2lvbl8wOgorCisgICAgICAgIG1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAwKTsKKyAgICAgICAgbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CisKIAlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOwogCiAgICAgICBlcnJfb3V0X2V4aXRfc3hnX3Byb2JlOgpAQCAtODUyLDEzICsxMTYzLDE2IEBACiAJREJHX0VSUk9SKCIlcyBFWElUIGppZmZpZXNbJWx4XSBjcHUgJWRcbiIsIF9fZnVuY19fLCBqaWZmaWVzLAogCQkgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGNpZGV2KTsKKyAgICAgICAgREJHX0VSUk9SKCJzeGc6ICVzIGRlYWxsb2NhdGUgZGV2aWNlXG4iLCBfX0ZVTkNUSU9OX18pOworICAgICAgICBrZnJlZShuZXRkZXYpOworCXByaW50aygiRXhpdCAlcywgU3hnIGRyaXZlciBsb2FkaW5nIGZhaWxlZC4uXG4iLCBfX0ZVTkNUSU9OX18pOworCiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogTElORSBCQVNFIEludGVycnVwdCByb3V0aW5lcy4uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgorICogTElORSBCQVNFIEludGVycnVwdCByb3V0aW5lcy4uCiAgKgogICogc3hnX2Rpc2FibGVfaW50ZXJydXB0CiAgKgpAQCAtODc3LDEwICsxMTkxLDcgQEAKIAkJICBhZGFwdGVyLCBhZGFwdGVyLT5JbnRlcnJ1cHRzRW5hYmxlZCwgMCwgMCk7CiAJLyogRm9yIG5vdywgUlNTIGlzIGRpc2FibGVkIHdpdGggbGluZSBiYXNlZCBpbnRlcnJ1cHRzICovCiAJQVNTRVJUKGFkYXB0ZXItPlJzc0VuYWJsZWQgPT0gRkFMU0UpOwotCUFTU0VSVChhZGFwdGVyLT5Nc2lFbmFibGVkID09IEZBTFNFKTsKLQkvKiAqLwogCS8qIFR1cm4gb2ZmIGludGVycnVwdHMgYnkgd3JpdGluZyB0byB0aGUgaWNyIHJlZ2lzdGVyLiAqLwotCS8qICovCiAJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5JY3IsIFNYR19JQ1IoMCwgU1hHX0lDUl9ESVNBQkxFKSwgVFJVRSk7CiAKIAlhZGFwdGVyLT5JbnRlcnJ1cHRzRW5hYmxlZCA9IDA7CkBAIC04OTAsNyArMTIwMSw2IEBACiB9CiAKIC8qCi0gKgogICogc3hnX2VuYWJsZV9pbnRlcnJ1cHQKICAqCiAgKiBFbmFibGVJbnRlcnJ1cHQgSGFuZGxlcgpAQCAtOTA4LDEwICsxMjE4LDcgQEAKIAkJICBhZGFwdGVyLCBhZGFwdGVyLT5JbnRlcnJ1cHRzRW5hYmxlZCwgMCwgMCk7CiAJLyogRm9yIG5vdywgUlNTIGlzIGRpc2FibGVkIHdpdGggbGluZSBiYXNlZCBpbnRlcnJ1cHRzICovCiAJQVNTRVJUKGFkYXB0ZXItPlJzc0VuYWJsZWQgPT0gRkFMU0UpOwotCUFTU0VSVChhZGFwdGVyLT5Nc2lFbmFibGVkID09IEZBTFNFKTsKLQkvKiAqLwogCS8qIFR1cm4gb24gaW50ZXJydXB0cyBieSB3cml0aW5nIHRvIHRoZSBpY3IgcmVnaXN0ZXIuICovCi0JLyogKi8KIAlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkljciwgU1hHX0lDUigwLCBTWEdfSUNSX0VOQUJMRSksIFRSVUUpOwogCiAJYWRhcHRlci0+SW50ZXJydXB0c0VuYWJsZWQgPSAxOwpAQCAtOTIxLDUwICsxMjI4LDUxIEBACiB9CiAKIC8qCi0gKgogICogc3hnX2lzciAtIFByb2Nlc3MgYW4gbGluZS1iYXNlZCBpbnRlcnJ1cHQKICAqCiAgKiBBcmd1bWVudHM6Ci0gKiAJCUNvbnRleHQJCQktIE91ciBhZGFwdGVyIHN0cnVjdHVyZQorICogCQlDb250ZXh0CQktIE91ciBhZGFwdGVyIHN0cnVjdHVyZQogICoJCVF1ZXVlRGVmYXVsdCAJLSBPdXRwdXQgcGFyYW1ldGVyIHRvIHF1ZXVlIHRvIGRlZmF1bHQgQ1BVCi0gKgkJVGFyZ2V0Q3B1cwkJLSBPdXRwdXQgYml0bWFwIHRvIHNjaGVkdWxlIERQQydzCisgKgkJVGFyZ2V0Q3B1cwktIE91dHB1dCBiaXRtYXAgdG8gc2NoZWR1bGUgRFBDJ3MKICAqCi0gKiBSZXR1cm4gVmFsdWU6Ci0gKiAJVFJVRSBpZiBvdXIgaW50ZXJydXB0CisgKiBSZXR1cm4gVmFsdWU6IFRSVUUgaWYgb3VyIGludGVycnVwdAogICovCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc3hnX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0JcF9uZXRfZGV2aWNlIGRldiA9IChwX25ldF9kZXZpY2UpIGRldl9pZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pZDsKIAlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgbmV0ZGV2X3ByaXYoZGV2KTsKLS8qICAgICAgdTMyICAgICAgICAgICAgICAgICBDcHVNYXNrID0gMCwgaTsgKi8KIAorCWlmKGFkYXB0ZXItPnN0YXRlICE9IEFEQVBUX1VQKQorCQlyZXR1cm4gSVJRX05PTkU7CiAJYWRhcHRlci0+U3RhdHMuTnVtSW50cysrOwogCWlmIChhZGFwdGVyLT5Jc3JbMF0gPT0gMCkgewotCQkvKiBUaGUgU0xJQyBkcml2ZXIgdXNlZCB0byBleHBlcmllbmNlIGEgbnVtYmVyIG9mIHNwdXJpb3VzIGludGVycnVwdHMgKi8KLQkJLyogZHVlIHRvIHRoZSBkZWxheSBhc3NvY2lhdGVkIHdpdGggdGhlIG1hc2tpbmcgb2YgdGhlIGludGVycnVwdCAqLwotCQkvKiAod2UnZCBib3VuY2UgYmFjayBpbiBoZXJlKS4gIElmIHdlIHNlZSB0aGF0IGFnYWluIHdpdGggU2FoYXJhLCAqLwotCQkvKiBhZGQgYSBSRUFEX1JFRyBvZiB0aGUgSWNyIHJlZ2lzdGVyIGFmdGVyIHRoZSBXUklURV9SRUcgYmVsb3cuICovCisJCS8qCisJCSAqIFRoZSBTTElDIGRyaXZlciB1c2VkIHRvIGV4cGVyaWVuY2UgYSBudW1iZXIgb2Ygc3B1cmlvdXMKKwkJICogaW50ZXJydXB0cyBkdWUgdG8gdGhlIGRlbGF5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFza2luZyBvZgorCQkgKiB0aGUgaW50ZXJydXB0ICh3ZSdkIGJvdW5jZSBiYWNrIGluIGhlcmUpLiAgSWYgd2Ugc2VlIHRoYXQKKwkJICogYWdhaW4gd2l0aCBTYWhhcmEsYWRkIGEgUkVBRF9SRUcgb2YgdGhlIEljciByZWdpc3RlciBhZnRlcgorCQkgKiB0aGUgV1JJVEVfUkVHIGJlbG93LgorCQkgKi8KIAkJYWRhcHRlci0+U3RhdHMuRmFsc2VJbnRzKys7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9Ci0JLyogKi8KLQkvKiBNb3ZlIHRoZSBJc3IgY29udGVudHMgYW5kIGNsZWFyIHRoZSB2YWx1ZSBpbiAqLwotCS8qIHNoYXJlZCBtZW1vcnksIGFuZCBtYXNrIGludGVycnVwdHMgKi8KLQkvKiAqLwotCWFkYXB0ZXItPklzckNvcHlbMF0gPSBhZGFwdGVyLT5Jc3JbMF07Ci0JYWRhcHRlci0+SXNyWzBdID0gMDsKLQlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkljciwgU1hHX0lDUigwLCBTWEdfSUNSX01BU0spLCBUUlVFKTsKLS8qICAgICAgQVNTRVJUKGFkYXB0ZXItPklzckRwY3NQZW5kaW5nID09IDApOyAqLworCS8qCisJICogTW92ZSB0aGUgSXNyIGNvbnRlbnRzIGFuZCBjbGVhciB0aGUgdmFsdWUgaW4KKwkgKiBzaGFyZWQgbWVtb3J5LCBhbmQgbWFzayBpbnRlcnJ1cHRzCisJICovCisJLyogQVNTRVJUKGFkYXB0ZXItPklzckRwY3NQZW5kaW5nID09IDApOyAqLwogI2lmIFhYWFRPRE8JCQkvKiBSU1MgU3R1ZmYgKi8KLQkvKiBJZiBSU1MgaXMgZW5hYmxlZCBhbmQgdGhlIElTUiBzcGVjaWZpZXMgKi8KLQkvKiBTWEdfSVNSX0VWRU5ULCB0aGVuIHNjaGVkdWxlIERQQydzICovCi0JLyogYmFzZWQgb24gZXZlbnQgcXVldWVzLiAqLworCS8qCisJICogSWYgUlNTIGlzIGVuYWJsZWQgYW5kIHRoZSBJU1Igc3BlY2lmaWVzIFNYR19JU1JfRVZFTlQsIHRoZW4KKwkgKiBzY2hlZHVsZSBEUEMncyBiYXNlZCBvbiBldmVudCBxdWV1ZXMuCisJICovCiAJaWYgKGFkYXB0ZXItPlJzc0VuYWJsZWQgJiYgKGFkYXB0ZXItPklzckNvcHlbMF0gJiBTWEdfSVNSX0VWRU5UKSkgewogCQlmb3IgKGkgPSAwOwogCQkgICAgIGkgPCBhZGFwdGVyLT5Sc3NTeXN0ZW1JbmZvLT5Qcm9jZXNzb3JJbmZvLlJzc0NwdUNvdW50OwogCQkgICAgIGkrKykgewotCQkJc3RydWN0IFhHX0VWRU5UX1JJTkcgKkV2ZW50UmluZyA9ICZhZGFwdGVyLT5FdmVudFJpbmdzW2ldOwotCQkJc3RydWN0IFNYR19FVkVOVCAqRXZlbnQgPQorCQkJc3RydWN0IHN4Z19ldmVudF9yaW5nICpFdmVudFJpbmcgPQorCQkJCQkJJmFkYXB0ZXItPkV2ZW50UmluZ3NbaV07CisJCQlzdHJ1Y3Qgc3hnX2V2ZW50ICpFdmVudCA9CiAJCQkgICAgJkV2ZW50UmluZy0+UmluZ1thZGFwdGVyLT5OZXh0RXZlbnRbaV1dOwogCQkJdW5zaWduZWQgY2hhciBDcHUgPQogCQkJICAgIGFkYXB0ZXItPlJzc1N5c3RlbUluZm8tPlJzc0lkVG9DcHVbaV07CkBAIC05NzQsOCArMTI4MiwxMCBAQAogCQkJfQogCQl9CiAJfQotCS8qIE5vdywgZWl0aGVyIHNjaGVkdWxlIHRoZSBDUFVzIHNwZWNpZmllZCBieSB0aGUgQ3B1TWFzaywgKi8KLQkvKiBvciBxdWV1ZSBkZWZhdWx0ICovCisJLyoKKwkgKiBOb3csIGVpdGhlciBzY2hlZHVsZSB0aGUgQ1BVcyBzcGVjaWZpZWQgYnkgdGhlIENwdU1hc2ssCisJICogb3IgcXVldWUgZGVmYXVsdAorCSAqLwogCWlmIChDcHVNYXNrKSB7CiAJCSpRdWV1ZURlZmF1bHQgPSBGQUxTRTsKIAl9IGVsc2UgewpAQCAtOTg0LDM0ICsxMjk0LDQxIEBACiAJfQogCSpUYXJnZXRDcHVzID0gQ3B1TWFzazsKICNlbmRpZgotCS8qICovCi0JLyogIFRoZXJlIGFyZSBubyBEUENzIGluIExpbnV4LCBzbyBjYWxsIHRoZSBoYW5kbGVyIG5vdyAqLwotCS8qICovCi0Jc3hnX2hhbmRsZV9pbnRlcnJ1cHQoYWRhcHRlcik7CisJc3hnX2ludGVycnVwdChhZGFwdGVyKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIHZvaWQgc3hnX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3N0YXRpYyB2b2lkIHN4Z19pbnRlcnJ1cHQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLS8qICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAgIFJzc0lkICAgPSAwOyAqLwotCXUzMiBOZXdJc3I7CisJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5JY3IsIFNYR19JQ1IoMCwgU1hHX0lDUl9NQVNLKSwgVFJVRSk7CiAKLQlpZiAoYWRhcHRlci0+U3RhdHMuUmN2Tm9CdWZmZXIgPCA1KSB7Ci0JCURCR19FUlJPUigiRW50ZXIgc3hnX2hhbmRsZV9pbnRlcnJ1cHQgSVNSWyV4XVxuIiwKLQkJCSAgYWRhcHRlci0+SXNyQ29weVswXSk7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKKwkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIGludCAqd29ya19kb25lLAorCQkJCQkgaW50IGJ1ZGdldCkKK3sKKwkvKiB1bnNpZ25lZCBjaGFyICAgICAgICAgICBSc3NJZCAgID0gMDsgKi8KKwl1MzIgTmV3SXNyOworCWludCBzeGdfbmFwaV9jb250aW51ZSA9IDE7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSG5kbEludHIiLAogCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPklzckNvcHlbMF0sIDAsIDApOwogCS8qIEZvciBub3csIFJTUyBpcyBkaXNhYmxlZCB3aXRoIGxpbmUgYmFzZWQgaW50ZXJydXB0cyAqLwogCUFTU0VSVChhZGFwdGVyLT5Sc3NFbmFibGVkID09IEZBTFNFKTsKLQlBU1NFUlQoYWRhcHRlci0+TXNpRW5hYmxlZCA9PSBGQUxTRSk7Ci0JQVNTRVJUKGFkYXB0ZXItPklzckNvcHlbMF0pOwotLyovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KKworCWFkYXB0ZXItPklzckNvcHlbMF0gPSBhZGFwdGVyLT5Jc3JbMF07CisJYWRhcHRlci0+SXNyWzBdID0gMDsKIAogCS8qIEFsd2F5cyBwcm9jZXNzIHRoZSBldmVudCBxdWV1ZS4gKi8KLQlzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZShhZGFwdGVyLAotCQkJCShhZGFwdGVyLT5Sc3NFbmFibGVkID8gLypSc3NJZCAqLyAwIDogMCkpOworCXdoaWxlIChzeGdfbmFwaV9jb250aW51ZSkKKwl7CisJCXN4Z19wcm9jZXNzX2V2ZW50X3F1ZXVlKGFkYXB0ZXIsCisJCQkJKGFkYXB0ZXItPlJzc0VuYWJsZWQgPyAvKlJzc0lkICovIDAgOiAwKSwKKwkJCQkgJnN4Z19uYXBpX2NvbnRpbnVlLCB3b3JrX2RvbmUsIGJ1ZGdldCk7CisJfQogCiAjaWYgWFhYVE9ETwkJCS8qIFJTUyBzdHVmZiAqLwogCWlmICgtLWFkYXB0ZXItPklzckRwY3NQZW5kaW5nKSB7CkBAIC0xMDIyLDMwICsxMzM5LDMxIEBACiAJCXJldHVybjsKIAl9CiAjZW5kaWYKLQkvKiAqLwogCS8qIExhc3QgKG9yIG9ubHkpIERQQyBwcm9jZXNzZXMgdGhlIElTUiBhbmQgY2xlYXJzIHRoZSBpbnRlcnJ1cHQuICovCi0JLyogKi8KIAlOZXdJc3IgPSBzeGdfcHJvY2Vzc19pc3IoYWRhcHRlciwgMCk7Ci0JLyogKi8KIAkvKiBSZWVuYWJsZSBpbnRlcnJ1cHRzICovCi0JLyogKi8KIAlhZGFwdGVyLT5Jc3JDb3B5WzBdID0gMDsKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbGVhcklzciIsCiAJCSAgYWRhcHRlciwgTmV3SXNyLCAwLCAwKTsKIAotCWlmIChhZGFwdGVyLT5TdGF0cy5SY3ZOb0J1ZmZlciA8IDUpIHsKLQkJREJHX0VSUk9SCi0JCSAgICAoIkV4aXQgc3hnX2hhbmRsZV9pbnRlcnJ1cHQyIGFmdGVyIGVuYWJsaW5nIGludGVycnVwdFxuIik7Ci0JfQotCi0JV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5Jc3IsIE5ld0lzciwgVFJVRSk7Ci0KIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYSG5kbEludCIsCiAJCSAgYWRhcHRlciwgMCwgMCwgMCk7CiB9CitzdGF0aWMgaW50IHN4Z19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBhZGFwdGVyX3QsIG5hcGkpOworCWludCB3b3JrX2RvbmUgPSAwOworCisJc3hnX2hhbmRsZV9pbnRlcnJ1cHQoYWRhcHRlciwgJndvcmtfZG9uZSwgYnVkZ2V0KTsKKworCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5Jc3IsIDAsIFRSVUUpOworCX0KKwlyZXR1cm4gd29ya19kb25lOworfQogCiAvKgotICoKICAqIHN4Z19wcm9jZXNzX2lzciAtIFByb2Nlc3MgYW4gaW50ZXJydXB0LiAgQ2FsbGVkIGZyb20gdGhlIGxpbmUtYmFzZWQgYW5kCiAgKgkJCW1lc3NhZ2UgYmFzZWQgaW50ZXJydXB0IERQQyByb3V0aW5lcwogICoKQEAgLTEwNzIsMjQgKzEzOTAsMjggQEAKIAkJfQogCQkvKiBObyBob3N0IGJ1ZmZlciAqLwogCQlpZiAoSXNyICYgU1hHX0lTUl9STUlTUykgewotCQkJLyogVGhlcmUgaXMgYSBidW5jaCBvZiBjb2RlIGluIHRoZSBTTElDIGRyaXZlciB3aGljaCAqLwotCQkJLyogYXR0ZW1wdHMgdG8gcHJvY2VzcyBtb3JlIHJlY2VpdmUgZXZlbnRzIHBlciBEUEMgKi8KLQkJCS8qIGlmIHdlIHN0YXJ0IHRvIGZhbGwgYmVoaW5kLiAgV2UnbGwgcHJvYmFibHkgKi8KLQkJCS8qIG5lZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIgaGVyZSwgYnV0IGhvbGQgKi8KLQkJCS8qIG9mZiBmb3Igbm93LiAgSSBkb24ndCB3YW50IHRvIG1ha2UgdGhlIGNvZGUgbW9yZSAqLwotCQkJLyogY29tcGxpY2F0ZWQgdGhhbiBzdHJpY3RseSBuZWVkZWQuICovCi0JCQlhZGFwdGVyLT5TdGF0cy5SY3ZOb0J1ZmZlcisrOwotCQkJaWYgKGFkYXB0ZXItPlN0YXRzLlJjdk5vQnVmZmVyIDwgNSkgeworCQkJLyoKKwkJCSAqIFRoZXJlIGlzIGEgYnVuY2ggb2YgY29kZSBpbiB0aGUgU0xJQyBkcml2ZXIgd2hpY2gKKwkJCSAqIGF0dGVtcHRzIHRvIHByb2Nlc3MgbW9yZSByZWNlaXZlIGV2ZW50cyBwZXIgRFBDCisJCQkgKiBpZiB3ZSBzdGFydCB0byBmYWxsIGJlaGluZC4gIFdlJ2xsIHByb2JhYmx5ZAorCQkJICogbmVlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxhciBoZXJlLCBidXQgaG9sZAorCQkJICogb2ZmIGZvciBub3cuICBJIGRvbid0IHdhbnQgdG8gbWFrZSB0aGUgY29kZSBtb3JlCisJCQkgKiBjb21wbGljYXRlZCB0aGFuIHN0cmljdGx5IG5lZWRlZC4KKwkJCSAqLworCQkJYWRhcHRlci0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworIAkJCWlmIChhZGFwdGVyLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzPCA1KSB7CiAJCQkJREJHX0VSUk9SKCIlczogU1hHX0lTUl9FUlIgIFJNSVNTISFcbiIsCiAJCQkJCSAgX19mdW5jX18pOwogCQkJfQogCQl9CiAJCS8qIENhcmQgY3Jhc2ggKi8KIAkJaWYgKElzciAmIFNYR19JU1JfREVBRCkgewotCQkJLyogU2V0IGFzaWRlIHRoZSBjcmFzaCBpbmZvIGFuZCBzZXQgdGhlIGFkYXB0ZXIgc3RhdGUgdG8gUkVTRVQgKi8KLQkJCWFkYXB0ZXItPkNyYXNoQ3B1ID0KLQkJCSAgICAodW5zaWduZWQgY2hhcikoKElzciAmIFNYR19JU1JfQ1BVKSA+PgotCQkJCQkgICAgU1hHX0lTUl9DUFVfU0hJRlQpOworCQkJLyoKKwkJCSAqIFNldCBhc2lkZSB0aGUgY3Jhc2ggaW5mbyBhbmQgc2V0IHRoZSBhZGFwdGVyIHN0YXRlCisgCQkJICogdG8gUkVTRVQKKyAJCQkgKi8KKwkJCWFkYXB0ZXItPkNyYXNoQ3B1ID0gKHVuc2lnbmVkIGNoYXIpCisJCQkJKChJc3IgJiBTWEdfSVNSX0NQVSkgPj4gU1hHX0lTUl9DUFVfU0hJRlQpOwogCQkJYWRhcHRlci0+Q3Jhc2hMb2NhdGlvbiA9ICh1c2hvcnQpIChJc3IgJiBTWEdfSVNSX0NSQVNIKTsKIAkJCWFkYXB0ZXItPkRlYWQgPSBUUlVFOwogCQkJREJHX0VSUk9SKCIlczogSVNSX0RFQUQgJXgsIENQVTogJWRcbiIsIF9fZnVuY19fLApAQCAtMTA5NywxOCArMTQxOSwxOCBAQAogCQl9CiAJCS8qIEV2ZW50IHJpbmcgZnVsbCAqLwogCQlpZiAoSXNyICYgU1hHX0lTUl9FUkZVTEwpIHsKLQkJCS8qIFNhbWUgaXNzdWUgYXMgUk1JU1MsIHJlYWxseS4gIFRoaXMgbWVhbnMgdGhlICovCi0JCQkvKiBob3N0IGlzIGZhbGxpbmcgYmVoaW5kIHRoZSBjYXJkLiAgTmVlZCB0byBpbmNyZWFzZSAqLwotCQkJLyogZXZlbnQgcmluZyBzaXplLCBwcm9jZXNzIG1vcmUgZXZlbnRzIHBlciBpbnRlcnJ1cHQsICovCi0JCQkvKiBhbmQvb3IgcmVkdWNlL3JlbW92ZSBpbnRlcnJ1cHQgYWdncmVnYXRpb24uICovCisJCQkvKgorCQkJICogU2FtZSBpc3N1ZSBhcyBSTUlTUywgcmVhbGx5LiAgVGhpcyBtZWFucyB0aGUKKwkJCSAqIGhvc3QgaXMgZmFsbGluZyBiZWhpbmQgdGhlIGNhcmQuICBOZWVkIHRvIGluY3JlYXNlCisJCQkgKiBldmVudCByaW5nIHNpemUsIHByb2Nlc3MgbW9yZSBldmVudHMgcGVyIGludGVycnVwdCwKKwkJCSAqIGFuZC9vciByZWR1Y2UvcmVtb3ZlIGludGVycnVwdCBhZ2dyZWdhdGlvbi4KKwkJCSAqLwogCQkJYWRhcHRlci0+U3RhdHMuRXZlbnRSaW5nRnVsbCsrOwogCQkJREJHX0VSUk9SKCIlczogU1hHX0lTUl9FUlIgIEVWRU5UIFJJTkcgRlVMTCEhXG4iLAogCQkJCSAgX19mdW5jX18pOwogCQl9CiAJCS8qIFRyYW5zbWl0IGRyb3AgLSBubyBEUkFNIGJ1ZmZlcnMgb3IgWE1UIGVycm9yICovCiAJCWlmIChJc3IgJiBTWEdfSVNSX1hEUk9QKSB7Ci0JCQlhZGFwdGVyLT5TdGF0cy5YbXREcm9wcysrOwotCQkJYWRhcHRlci0+U3RhdHMuWG10RXJyb3JzKys7CiAJCQlEQkdfRVJST1IoIiVzOiBTWEdfSVNSX0VSUiAgWERST1AhIVxuIiwgX19mdW5jX18pOwogCQl9CiAJfQpAQCAtMTExOCwxOCArMTQ0MCwyNCBAQAogCX0KIAkvKiBEdW1wICovCiAJaWYgKElzciAmIFNYR19JU1JfVVBDKSB7Ci0JCUFTU0VSVChhZGFwdGVyLT5EdW1wQ21kUnVubmluZyk7CS8qIE1heWJlIGNoYW5nZSB3aGVuIGRlYnVnIGlzIGFkZGVkLi4gKi8KKwkJLyogTWF5YmUgY2hhbmdlIHdoZW4gZGVidWcgaXMgYWRkZWQuLiAqLworLy8JCUFTU0VSVChhZGFwdGVyLT5EdW1wQ21kUnVubmluZyk7CiAJCWFkYXB0ZXItPkR1bXBDbWRSdW5uaW5nID0gRkFMU0U7CiAJfQogCS8qIExpbmsgZXZlbnQgKi8KIAlpZiAoSXNyICYgU1hHX0lTUl9MSU5LKSB7Ci0JCXN4Z19saW5rX2V2ZW50KGFkYXB0ZXIpOworCQlpZiAoYWRhcHRlci0+c3RhdGUgIT0gQURBUFRfRE9XTikgeworCQkJYWRhcHRlci0+bGlua19zdGF0dXNfY2hhbmdlZCA9IDE7CisJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT51cGRhdGVfbGlua19zdGF0dXMpOworCQl9CiAJfQogCS8qIERlYnVnIC0gYnJlYWtwb2ludCBoaXQgKi8KIAlpZiAoSXNyICYgU1hHX0lTUl9CUkVBSykgewotCQkvKiBBdCB0aGUgbW9tZW50IEFHREIgaXNuJ3Qgd3JpdHRlbiB0byBzdXBwb3J0IGludGVyYWN0aXZlICovCi0JCS8qIGRlYnVnIHNlc3Npb25zLiAgV2hlbiBpdCBpcywgdGhpcyBpbnRlcnJ1cHQgd2lsbCBiZSB1c2VkICovCi0JCS8qIHRvIHNpZ25hbCBBR0RCIHRoYXQgaXQgaGFzIGhpdCBhIGJyZWFrcG9pbnQuICBGb3Igbm93LCBBU1NFUlQuICovCisJCS8qCisJCSAqIEF0IHRoZSBtb21lbnQgQUdEQiBpc24ndCB3cml0dGVuIHRvIHN1cHBvcnQgaW50ZXJhY3RpdmUKKwkJICogZGVidWcgc2Vzc2lvbnMuICBXaGVuIGl0IGlzLCB0aGlzIGludGVycnVwdCB3aWxsIGJlIHVzZWQgdG8KKwkJICogc2lnbmFsIEFHREIgdGhhdCBpdCBoYXMgaGl0IGEgYnJlYWtwb2ludC4gIEZvciBub3csIEFTU0VSVC4KKwkJICovCiAJCUFTU0VSVCgwKTsKIAl9CiAJLyogSGVhcnRiZWF0IHJlc3BvbnNlICovCkBAIC0xMTQzLDcgKzE0NzEsMzMgQEAKIH0KIAogLyoKKyAqIHN4Z19yY3ZfY2hlY2tzdW0gLSBTZXQgdGhlIGNoZWNrc3VtIGZvciByZWNlaXZlZCBwYWNrZXQKICAqCisgKiBBcmd1ZW1lbnRzOgorICogCQlAYWRhcHRlciAtIEFkYXB0ZXIgc3RydWN0dXJlIG9uIHdoaWNoIHBhY2tldCBpcyByZWNlaXZlZAorICogCQlAc2tiIC0gUGFja2V0IHdoaWNoIGlzIHJlY2VpZXZlZAorICogCQlARXZlbnQgLSBFdmVudCByZWFkIGZyb20gaGFyZHdhcmUKKyAqLworCit2b2lkIHN4Z19yY3ZfY2hlY2tzdW0oc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSBzdHJ1Y3Qgc3hnX2V2ZW50ICpFdmVudCkKK3sKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJaWYgKGxpa2VseShhZGFwdGVyLT5mbGFncyAmIFNYR19SQ1ZfSVBfQ1NVTV9FTkFCTEVEKSkgeworCQlpZiAobGlrZWx5KGFkYXB0ZXItPmZsYWdzICYgU1hHX1JDVl9UQ1BfQ1NVTV9FTkFCTEVEKQorCQkJJiYgKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfVENQSVApKSB7CisJCQlpZighKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfVENQQkFEKSkKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQlpZighKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfSVBCQUQpKQorCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJfSBlbHNlIGlmKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfSVBPTkxZKSB7CisJCQlpZighKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfSVBCQUQpKQorCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCX0KKwl9Cit9CisKKy8qCiAgKiBzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZSAtIFByb2Nlc3Mgb3VyIGV2ZW50IHF1ZXVlCiAgKgogICogQXJndW1lbnRzOgpAQCAtMTE1Myw0NiArMTUwNyw1MiBAQAogICogUmV0dXJuIFZhbHVlOgogICogCU5vbmUuCiAgKi8KLXN0YXRpYyB1MzIgc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIFJzc0lkKQorc3RhdGljIHUzMiBzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCB1MzIgUnNzSWQsCisJCQkgaW50ICpzeGdfbmFwaV9jb250aW51ZSwgaW50ICp3b3JrX2RvbmUsIGludCBidWRnZXQpCiB7Ci0Jc3RydWN0IFNYR19FVkVOVF9SSU5HICpFdmVudFJpbmcgPSAmYWRhcHRlci0+RXZlbnRSaW5nc1tSc3NJZF07Ci0Jc3RydWN0IFNYR19FVkVOVCAqRXZlbnQgPSAmRXZlbnRSaW5nLT5SaW5nW2FkYXB0ZXItPk5leHRFdmVudFtSc3NJZF1dOworCXN0cnVjdCBzeGdfZXZlbnRfcmluZyAqRXZlbnRSaW5nID0gJmFkYXB0ZXItPkV2ZW50UmluZ3NbUnNzSWRdOworCXN0cnVjdCBzeGdfZXZlbnQgKkV2ZW50ID0gJkV2ZW50UmluZy0+UmluZ1thZGFwdGVyLT5OZXh0RXZlbnRbUnNzSWRdXTsKIAl1MzIgRXZlbnRzUHJvY2Vzc2VkID0gMCwgQmF0Y2hlcyA9IDA7Ci0JdTMyIG51bV9za2JzID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogI2lmZGVmIExJTlVYX0hBTkRMRVNfUkNWX0lORElDQVRJT05fTElTVFMKIAlzdHJ1Y3Qgc2tfYnVmZiAqcHJldl9za2IgPSBOVUxMOwogCXN0cnVjdCBza19idWZmICpJbmRpY2F0aW9uTGlzdFtTWEdfUkNWX0FSUkFZU0laRV07CiAJdTMyIEluZGV4OwotCXN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiAqUmN2RGF0YUJ1ZmZlckhkcjsKKwlzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgKlJjdkRhdGFCdWZmZXJIZHI7CiAjZW5kaWYKIAl1MzIgUmV0dXJuU3RhdHVzID0gMDsKKwlpbnQgc3hnX3Jjdl9kYXRhX2J1ZmZlcnMgPSBTWEdfUkNWX0RBVEFfQlVGRkVSUzsKIAogCUFTU0VSVCgoYWRhcHRlci0+U3RhdGUgPT0gU1hHX1NUQVRFX1JVTk5JTkcpIHx8CiAJICAgICAgIChhZGFwdGVyLT5TdGF0ZSA9PSBTWEdfU1RBVEVfUEFVU0lORykgfHwKIAkgICAgICAgKGFkYXB0ZXItPlN0YXRlID09IFNYR19TVEFURV9QQVVTRUQpIHx8CiAJICAgICAgIChhZGFwdGVyLT5TdGF0ZSA9PSBTWEdfU1RBVEVfSEFMVElORykpOwotCS8qIFdlIG1heSBzdGlsbCBoYXZlIHVucHJvY2Vzc2VkIGV2ZW50cyBvbiB0aGUgcXVldWUgaWYgKi8KLQkvKiB0aGUgY2FyZCBjcmFzaGVkLiAgRG9uJ3QgcHJvY2VzcyB0aGVtLiAqLworCS8qCisJICogV2UgbWF5IHN0aWxsIGhhdmUgdW5wcm9jZXNzZWQgZXZlbnRzIG9uIHRoZSBxdWV1ZSBpZgorCSAqIHRoZSBjYXJkIGNyYXNoZWQuICBEb24ndCBwcm9jZXNzIHRoZW0uCisJICovCiAJaWYgKGFkYXB0ZXItPkRlYWQpIHsKIAkJcmV0dXJuICgwKTsKIAl9Ci0JLyogSW4gdGhlb3J5IHRoZXJlIHNob3VsZCBvbmx5IGJlIGEgc2luZ2xlIHByb2Nlc3NvciB0aGF0ICovCi0JLyogYWNjZXNzZXMgdGhpcyBxdWV1ZSwgYW5kIG9ubHkgYXQgaW50ZXJydXB0LURQQyB0aW1lLiAgU28gKi8KLQkvKiB3ZSBzaG91bGRuJ3QgbmVlZCBhIGxvY2sgZm9yIGFueSBvZiB0aGlzLiAqLworCS8qCisJICogIEluIHRoZW9yeSB0aGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBwcm9jZXNzb3IgdGhhdAorCSAqIGFjY2Vzc2VzIHRoaXMgcXVldWUsIGFuZCBvbmx5IGF0IGludGVycnVwdC1EUEMgdGltZS4gIFNvLworCSAqIHdlIHNob3VsZG4ndCBuZWVkIGEgbG9jayBmb3IgYW55IG9mIHRoaXMuCisJICovCiAJd2hpbGUgKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfVkFMSUQpIHsKKwkJKCpzeGdfbmFwaV9jb250aW51ZSkgPSAxOwogCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJFdmVudCIsCiAJCQkgIEV2ZW50LCBFdmVudC0+Q29kZSwgRXZlbnQtPlN0YXR1cywKIAkJCSAgYWRhcHRlci0+TmV4dEV2ZW50KTsKIAkJc3dpdGNoIChFdmVudC0+Q29kZSkgewogCQljYXNlIEVWRU5UX0NPREVfQlVGRkVSUzoKLQkJCUFTU0VSVCghKEV2ZW50LT5Db21tYW5kSW5kZXggJiAweEZGMDApKTsJLyogU1hHX1JJTkdfSU5GTyBIZWFkICYgVGFpbCA9PSB1bnNpZ25lZCBjaGFyICovCi0JCQkvKiAqLworCQkJLyogc3RydWN0IHN4Z19yaW5nX2luZm8gSGVhZCAmIFRhaWwgPT0gdW5zaWduZWQgY2hhciAqLworCQkJQVNTRVJUKCEoRXZlbnQtPkNvbW1hbmRJbmRleCAmIDB4RkYwMCkpOwogCQkJc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzKGFkYXB0ZXIsCiAJCQkJCQkgICAgICAgRXZlbnQtPkNvbW1hbmRJbmRleCk7Ci0JCQkvKiAqLwogCQkJYnJlYWs7CiAJCWNhc2UgRVZFTlRfQ09ERV9TTE9XUkNWOgorCQkJKCp3b3JrX2RvbmUpKys7CiAJCQktLWFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQ7CiAJCQlpZiAoKHNrYiA9IHN4Z19zbG93X3JlY2VpdmUoYWRhcHRlciwgRXZlbnQpKSkgewogCQkJCXUzMiByeF9ieXRlczsKQEAgLTEyMDAsNTEgKzE1NjAsNjEgQEAKIAkJCQkvKiBBZGQgaXQgdG8gb3VyIGluZGljYXRpb24gbGlzdCAqLwogCQkJCVNYR19BRERfUkNWX1BBQ0tFVChhZGFwdGVyLCBza2IsIHByZXZfc2tiLAogCQkJCQkJICAgSW5kaWNhdGlvbkxpc3QsIG51bV9za2JzKTsKLQkJCQkvKiAgSW4gTGludXgsIHdlIGp1c3QgcGFzcyB1cCBlYWNoIHNrYiB0byB0aGUgcHJvdG9jb2wgYWJvdmUgYXQgdGhpcyBwb2ludCwgKi8KLQkJCQkvKiAgdGhlcmUgaXMgbm8gY2FwYWJpbGl0eSBvZiBhbiBpbmRpY2F0aW9uIGxpc3QuICovCisJCQkJLyoKKwkJCQkgKiBMaW51eCwgd2UganVzdCBwYXNzIHVwIGVhY2ggc2tiIHRvIHRoZQorCQkJCSAqIHByb3RvY29sIGFib3ZlIGF0IHRoaXMgcG9pbnQsIHRoZXJlIGlzIG5vCisJCQkJICogY2FwYWJpbGl0eSBvZiBhbiBpbmRpY2F0aW9uIGxpc3QuCisJCQkJICovCiAjZWxzZQotLyogQ0hFQ0sgICAgICAgICAgICBza2JfcHVsbChza2IsIElOSUNfUkNWQlVGX0hFQURTSVpFKTsgKi8KLQkJCQlyeF9ieXRlcyA9IEV2ZW50LT5MZW5ndGg7CS8qIChyY3ZidWYtPmxlbmd0aCAmIElSSEREUl9GTEVOX01TSyk7ICovCi0JCQkJc2tiX3B1dChza2IsIHJ4X2J5dGVzKTsKKwkJCQkvKiBDSEVDSyBza2JfcHVsbChza2IsIElOSUNfUkNWQlVGX0hFQURTSVpFKTsgKi8KKwkJCQkvKiAocmN2YnVmLT5sZW5ndGggJiBJUkhERFJfRkxFTl9NU0spOyAqLworCQkJCXJ4X2J5dGVzID0gRXZlbnQtPkxlbmd0aDsKIAkJCQlhZGFwdGVyLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCQkJYWRhcHRlci0+c3RhdHMucnhfYnl0ZXMgKz0gcnhfYnl0ZXM7Ci0jaWYgU1hHX09GRkxPQURfSVBfQ0hFQ0tTVU0KLQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotI2VuZGlmCisJCQkJc3hnX3Jjdl9jaGVja3N1bShhZGFwdGVyLCBza2IsIEV2ZW50KTsKIAkJCQlza2ItPmRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQkJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBza2ItPmRldik7Ci0JCQkJbmV0aWZfcngoc2tiKTsKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogI2VuZGlmCiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCURCR19FUlJPUigiJXM6IEVSUk9SICBJbnZhbGlkIEV2ZW50Q29kZSAlZFxuIiwKIAkJCQkgIF9fZnVuY19fLCBFdmVudC0+Q29kZSk7Ci0vKiAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoMCk7ICovCisJCS8qIEFTU0VSVCgwKTsgKi8KIAkJfQotCQkvKiBTZWUgaWYgd2UgbmVlZCB0byByZXN0b2NrIGNhcmQgcmVjZWl2ZSBidWZmZXJzLiAqLwotCQkvKiBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0byBub3RlIGhlcmU6ICovCi0JCS8qICAgICAgRmlyc3QgLSBUaGlzIHRlc3QgaXMgbm90IFNNUCBzYWZlLiAgVGhlICovCi0JCS8qICAgICAgICAgICAgICBhZGFwdGVyLT5CdWZmZXJzT25DYXJkIGZpZWxkIGlzIHByb3RlY3RlZCB2aWEgYXRvbWljIGludGVybG9ja2VkIGNhbGxzLCBidXQgKi8KLQkJLyogICAgICAgICAgICAgIHdlIGRvIG5vdCBwcm90ZWN0IGl0IHdpdGggcmVzcGVjdCB0byB0aGVzZSB0ZXN0cy4gIFRoZSBvbmx5IHdheSB0byBkbyB0aGF0ICovCi0JCS8qICAgICAgaXMgd2l0aCBhIGxvY2ssIGFuZCBJIGRvbid0IHdhbnQgdG8gZ3JhYiBhIGxvY2sgZXZlcnkgdGltZSB3ZSBhZGp1c3QgdGhlICovCi0JCS8qICAgICAgQnVmZmVyc09uQ2FyZCBjb3VudC4gIEluc3RlYWQsIHdlIGFsbG93IHRoZSBidWZmZXIgcmVwbGVuaXNobWVudCB0byBiZSBvZmYgKi8KLQkJLyogICAgICBvbmNlIGluIGEgd2hpbGUuICBUaGUgd29yc3QgdGhhdCBjYW4gaGFwcGVuIGlzIHRoZSBjYXJkIGlzIGdpdmVuIG9uZSAqLwotCQkvKiAgICAgIG1vcmUtb3ItbGVzcyBkZXNjcmlwdG9yIGJsb2NrIHRoYW4gdGhlIGFyYml0cmFyeSB2YWx1ZSB3ZSd2ZSBjaG9zZW4uICovCi0JCS8qICAgICAgTm8gYmlnIGRlYWwgKi8KLQkJLyogICAgICBJbiBzaG9ydCBETyBOT1QgQUREIEEgTE9DSyBIRVJFLCBPUiBXSEVSRSBSY3ZCdWZmZXJzT25DYXJkIGlzIGFkanVzdGVkLiAqLwotCQkvKiAgICAgIFNlY29uZCAtIFdlIGV4cGVjdCB0aGlzIHRlc3QgdG8gcmFyZWx5IGV2YWx1YXRlIHRvIHRydWUuICBXZSBhdHRlbXB0IHRvICovCi0JCS8qICAgICAgcmVmaWxsIGRlc2NyaXB0b3IgYmxvY2tzIGFzIHRoZXkgYXJlIHJldHVybmVkIHRvIHVzICovCi0JCS8qICAgICAgKHN4Z19jb21wbGV0ZV9kZXNjcmlwdG9yX2Jsb2NrcyksIHNvIFRoZSBvbmx5IHRpbWUgdGhpcyBzaG91bGQgZXZhbHVhdGUgKi8KLQkJLyogICAgICB0byB0cnVlIGlzIHdoZW4gc3hnX2NvbXBsZXRlX2Rlc2NyaXB0b3JfYmxvY2tzIGZhaWxlZCB0byBhbGxvY2F0ZSAqLwotCQkvKiAgICAgICAgICAgICAgcmVjZWl2ZSBidWZmZXJzLiAqLwotCQlpZiAoYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCA8IFNYR19SQ1ZfREFUQV9CVUZGRVJTKSB7CisJCS8qCisJCSAqIFNlZSBpZiB3ZSBuZWVkIHRvIHJlc3RvY2sgY2FyZCByZWNlaXZlIGJ1ZmZlcnMuCisJCSAqIFRoZXJlIGFyZSB0d28gdGhpbmdzIHRvIG5vdGUgaGVyZToKKwkJICogIEZpcnN0IC0gVGhpcyB0ZXN0IGlzIG5vdCBTTVAgc2FmZS4gIFRoZQorCQkgKiAgICBhZGFwdGVyLT5CdWZmZXJzT25DYXJkIGZpZWxkIGlzIHByb3RlY3RlZCB2aWEgYXRvbWljCisJCSAqICAgIGludGVybG9ja2VkIGNhbGxzLCBidXQgd2UgZG8gbm90IHByb3RlY3QgaXQgd2l0aCByZXNwZWN0CisJCSAqICAgIHRvIHRoZXNlIHRlc3RzLiAgVGhlIG9ubHkgd2F5IHRvIGRvIHRoYXQgaXMgd2l0aCBhIGxvY2ssCisJCSAqICAgIGFuZCBJIGRvbid0IHdhbnQgdG8gZ3JhYiBhIGxvY2sgZXZlcnkgdGltZSB3ZSBhZGp1c3QgdGhlCisJCSAqICAgIEJ1ZmZlcnNPbkNhcmQgY291bnQuICBJbnN0ZWFkLCB3ZSBhbGxvdyB0aGUgYnVmZmVyCisJCSAqICAgIHJlcGxlbmlzaG1lbnQgdG8gYmUgb2ZmIG9uY2UgaW4gYSB3aGlsZS4gVGhlIHdvcnN0IHRoYXQKKwkJICogICAgY2FuIGhhcHBlbiBpcyB0aGUgY2FyZCBpcyBnaXZlbiBvbiBtb3JlLW9yLWxlc3MgZGVzY3JpcHRvcgorCQkgKiAgICBibG9jayB0aGFuIHRoZSBhcmJpdHJhcnkgdmFsdWUgd2UndmUgY2hvc2VuLiBObyBiaWcgZGVhbAorCQkgKiAgICBJbiBzaG9ydCBETyBOT1QgQUREIEEgTE9DSyBIRVJFLCBPUiBXSEVSRSBSY3ZCdWZmZXJzT25DYXJkCisJCSAqICAgIGlzIGFkanVzdGVkLgorCQkgKiAgU2Vjb25kIC0gV2UgZXhwZWN0IHRoaXMgdGVzdCB0byByYXJlbHkKKwkJICogICAgZXZhbHVhdGUgdG8gdHJ1ZS4gIFdlIGF0dGVtcHQgdG8gcmVmaWxsIGRlc2NyaXB0b3IgYmxvY2tzCisJCSAqICAgIGFzIHRoZXkgYXJlIHJldHVybmVkIHRvIHVzIChzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3MpCisJCSAqICAgIHNvIFRoZSBvbmx5IHRpbWUgdGhpcyBzaG91bGQgZXZhbHVhdGUgdG8gdHJ1ZSBpcyB3aGVuCisJCSAqICAgIHN4Z19jb21wbGV0ZV9kZXNjcmlwdG9yX2Jsb2NrcyBmYWlsZWQgdG8gYWxsb2NhdGUKKwkJICogICAgcmVjZWl2ZSBidWZmZXJzLgorCQkgKi8KKwkJaWYgKGFkYXB0ZXItPkp1bWJvRW5hYmxlZCkKKwkJCXN4Z19yY3ZfZGF0YV9idWZmZXJzID0gU1hHX0pVTUJPX1JDVl9EQVRBX0JVRkZFUlM7CisKKwkJaWYgKGFkYXB0ZXItPlJjdkJ1ZmZlcnNPbkNhcmQgPCBzeGdfcmN2X2RhdGFfYnVmZmVycykgewogCQkJc3hnX3N0b2NrX3Jjdl9idWZmZXJzKGFkYXB0ZXIpOwogCQl9Ci0JCS8qIEl0J3MgbW9yZSBlZmZpY2llbnQgdG8ganVzdCBzZXQgdGhpcyB0byB6ZXJvLiAqLwotCQkvKiBCdXQgY2xlYXJpbmcgdGhlIHRvcCBiaXQgc2F2ZXMgcG90ZW50aWFsIGRlYnVnIGluZm8uLi4gKi8KKwkJLyoKKwkJICogSXQncyBtb3JlIGVmZmljaWVudCB0byBqdXN0IHNldCB0aGlzIHRvIHplcm8uCisJCSAqIEJ1dCBjbGVhcmluZyB0aGUgdG9wIGJpdCBzYXZlcyBwb3RlbnRpYWwgZGVidWcgaW5mby4uLgorCQkgKi8KIAkJRXZlbnQtPlN0YXR1cyAmPSB+RVZFTlRfU1RBVFVTX1ZBTElEOwotCQkvKiBBZHZhbmN0IHRvIHRoZSBuZXh0IGV2ZW50ICovCisJCS8qIEFkdmFuY2UgdG8gdGhlIG5leHQgZXZlbnQgKi8KIAkJU1hHX0FEVkFOQ0VfSU5ERVgoYWRhcHRlci0+TmV4dEV2ZW50W1Jzc0lkXSwgRVZFTlRfUklOR19TSVpFKTsKIAkJRXZlbnQgPSAmRXZlbnRSaW5nLT5SaW5nW2FkYXB0ZXItPk5leHRFdmVudFtSc3NJZF1dOwogCQlFdmVudHNQcm9jZXNzZWQrKzsKQEAgLTEyNTMsOSArMTYyMywxMSBAQAogCQkJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1tSc3NJZF0uRXZlbnRSZWxlYXNlLAogCQkJCSAgRVZFTlRfUklOR19CQVRDSCwgRkFMU0UpOwogCQkJRXZlbnRzUHJvY2Vzc2VkID0gMDsKLQkJCS8qIElmIHdlJ3ZlIHByb2Nlc3NlZCBvdXIgYmF0Y2ggbGltaXQsIGJyZWFrIG91dCBvZiB0aGUgKi8KLQkJCS8qIGxvb3AgYW5kIHJldHVybiBTWEdfSVNSX0VWRU5UIHRvIGFycmFuZ2UgZm9yIHVzIHRvICovCi0JCQkvKiBiZSBjYWxsZWQgYWdhaW4gKi8KKwkJCS8qCisJCQkgKiBJZiB3ZSd2ZSBwcm9jZXNzZWQgb3VyIGJhdGNoIGxpbWl0LCBicmVhayBvdXQgb2YgdGhlCisJCQkgKiBsb29wIGFuZCByZXR1cm4gU1hHX0lTUl9FVkVOVCB0byBhcnJhbmdlIGZvciB1cyB0bworCQkJICogYmUgY2FsbGVkIGFnYWluCisJCQkgKi8KIAkJCWlmIChCYXRjaGVzKysgPT0gRVZFTlRfQkFUQ0hfTElNSVQpIHsKIAkJCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwKIAkJCQkJICBUUkFDRV9OT0lTWSwgIkV2dExpbWl0IiwgQmF0Y2hlcywKQEAgLTEyNjQsMTYgKzE2MzYsMjIgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJfQorCQlpZiAoKndvcmtfZG9uZSA+PSBidWRnZXQpIHsKKwkJCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbUnNzSWRdLkV2ZW50UmVsZWFzZSwKKwkJCQkgIEV2ZW50c1Byb2Nlc3NlZCwgRkFMU0UpOworCQkJRXZlbnRzUHJvY2Vzc2VkID0gMDsKKwkJCSgqc3hnX25hcGlfY29udGludWUpID0gMDsKKwkJCWJyZWFrOworCQl9CiAJfQorCWlmICghKEV2ZW50LT5TdGF0dXMgJiBFVkVOVF9TVEFUVVNfVkFMSUQpKQorCQkoKnN4Z19uYXBpX2NvbnRpbnVlKSA9IDA7CisKICNpZmRlZiBMSU5VWF9IQU5ETEVTX1JDVl9JTkRJQ0FUSU9OX0xJU1RTCi0JLyogKi8KIAkvKiBJbmRpY2F0ZSBhbnkgcmVjZWl2ZWQgZHVtYi1uaWMgZnJhbWVzICovCi0JLyogKi8KIAlTWEdfSU5ESUNBVEVfUEFDS0VUUyhhZGFwdGVyLCBJbmRpY2F0aW9uTGlzdCwgbnVtX3NrYnMpOwogI2VuZGlmCi0JLyogKi8KIAkvKiBSZWxlYXNlIGV2ZW50cyBiYWNrIHRvIHRoZSBjYXJkLiAqLwotCS8qICovCiAJaWYgKEV2ZW50c1Byb2Nlc3NlZCkgewogCQlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzW1Jzc0lkXS5FdmVudFJlbGVhc2UsCiAJCQkgIEV2ZW50c1Byb2Nlc3NlZCwgRkFMU0UpOwpAQCAtMTI4OSwyNyArMTY2NywzNSBAQAogICoKICAqIEFyZ3VtZW50cyAtCiAgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKLQogICogUmV0dXJuCiAgKglOb25lCiAgKi8KIHN0YXRpYyB2b2lkIHN4Z19jb21wbGV0ZV9zbG93X3NlbmQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgU1hHX1hNVF9SSU5HICpYbXRSaW5nID0gJmFkYXB0ZXItPlhtdFJpbmdzWzBdOwotCXN0cnVjdCBTWEdfUklOR19JTkZPICpYbXRSaW5nSW5mbyA9ICZhZGFwdGVyLT5YbXRSaW5nWmVyb0luZm87CisJc3RydWN0IHN4Z194bXRfcmluZyAqWG10UmluZyA9ICZhZGFwdGVyLT5YbXRSaW5nc1swXTsKKwlzdHJ1Y3Qgc3hnX3JpbmdfaW5mbyAqWG10UmluZ0luZm8gPSAmYWRhcHRlci0+WG10UmluZ1plcm9JbmZvOwogCXUzMiAqQ29udGV4dFR5cGU7Ci0Jc3RydWN0IFNYR19DTUQgKlhtdENtZDsKKwlzdHJ1Y3Qgc3hnX2NtZCAqWG10Q21kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXVuc2lnbmVkIGxvbmcgc2dsX2ZsYWdzID0gMDsKKwl1bnNpZ25lZCBpbnQgcHJvY2Vzc2VkX2NvdW50ID0gMDsKIAotCS8qIE5PVEUgLSBUaGlzIGxvY2sgaXMgZHJvcHBlZCBhbmQgcmVncmFiYmVkIGluIHRoaXMgbG9vcC4gKi8KLQkvKiBUaGlzIG1lYW5zIHR3byBkaWZmZXJlbnQgcHJvY2Vzc29ycyBjYW4gYm90aCBiZSBydW5uaW5nICovCi0JLyogdGhyb3VnaCB0aGlzIGxvb3AuIEJlICp2ZXJ5KiBjYXJlZnVsLiAqLwotCXNwaW5fbG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCS8qCisJICogTk9URSAtIFRoaXMgbG9jayBpcyBkcm9wcGVkIGFuZCByZWdyYWJiZWQgaW4gdGhpcyBsb29wLgorCSAqIFRoaXMgbWVhbnMgdHdvIGRpZmZlcmVudCBwcm9jZXNzb3JzIGNhbiBib3RoIGJlIHJ1bm5pbmcvCisJICogdGhyb3VnaCB0aGlzIGxvb3AuIEJlICp2ZXJ5KiBjYXJlZnVsLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5YbXRaZXJvTG9jaywgZmxhZ3MpOworCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQ21wU25kcyIsCiAJCSAgYWRhcHRlciwgWG10UmluZ0luZm8tPkhlYWQsIFhtdFJpbmdJbmZvLT5UYWlsLCAwKTsKIAotCXdoaWxlIChYbXRSaW5nSW5mby0+VGFpbCAhPSAqYWRhcHRlci0+WG10UmluZ1plcm9JbmRleCkgewotCQkvKiBMb2NhdGUgdGhlIGN1cnJlbnQgQ21kIChyaW5nIGRlc2NyaXB0b3IgZW50cnkpLCBhbmQgKi8KLQkJLyogYXNzb2NpYXRlZCBTR0wsIGFuZCBhZHZhbmNlIHRoZSB0YWlsICovCisJd2hpbGUgKChYbXRSaW5nSW5mby0+VGFpbCAhPSAqYWRhcHRlci0+WG10UmluZ1plcm9JbmRleCkKKwkJJiYgcHJvY2Vzc2VkX2NvdW50KysgPCBTWEdfQ09NUExFVEVfU0xPV19TRU5EX0xJTUlUKSAgeworCQkvKgorCQkgKiBMb2NhdGUgdGhlIGN1cnJlbnQgQ21kIChyaW5nIGRlc2NyaXB0b3IgZW50cnkpLCBhbmQKKwkJICogYXNzb2NpYXRlZCBTR0wsIGFuZCBhZHZhbmNlIHRoZSB0YWlsCisJCSAqLwogCQlTWEdfUkVUVVJOX0NNRChYbXRSaW5nLCBYbXRSaW5nSW5mbywgWG10Q21kLCBDb250ZXh0VHlwZSk7CiAJCUFTU0VSVChDb250ZXh0VHlwZSk7CiAJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkNtcFNuZCIsCkBAIC0xMzIxLDMwICsxNzA3LDQ1IEBACiAJCWNhc2UgU1hHX1NHTF9EVU1COgogCQkJewogCQkJCXN0cnVjdCBza19idWZmICpza2I7CisJCQkJc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAqU3hnU2dsID0KKwkJCQkJKHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgKilDb250ZXh0VHlwZTsKKwkJCQlkbWE2NF9hZGRyX3QgRmlyc3RTZ2VBZGRyZXNzOworCQkJCXUzMiBGaXJzdFNnZUxlbmd0aDsKKwogCQkJCS8qIER1bWItbmljIHNlbmQuICBDb21tYW5kIGNvbnRleHQgaXMgdGhlIGR1bWItbmljIFNHTCAqLwogCQkJCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKUNvbnRleHRUeXBlOworCQkJCXNrYiA9IFN4Z1NnbC0+RHVtYlBhY2tldDsKKwkJCQlGaXJzdFNnZUFkZHJlc3MgPSBYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUFkZHJlc3M7CisJCQkJRmlyc3RTZ2VMZW5ndGggPSBYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUxlbmd0aDsKIAkJCQkvKiBDb21wbGV0ZSB0aGUgc2VuZCAqLwogCQkJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLAogCQkJCQkgIFRSQUNFX0lNUE9SVEFOVCwgIkRtU25kQ21wIiwgc2tiLCAwLAogCQkJCQkgIDAsIDApOwogCQkJCUFTU0VSVChhZGFwdGVyLT5TdGF0cy5YbXRRTGVuKTsKLQkJCQlhZGFwdGVyLT5TdGF0cy5YbXRRTGVuLS07CS8qIHdpdGhpbiBYbXRaZXJvTG9jayAqLwotCQkJCWFkYXB0ZXItPlN0YXRzLlhtdE9rKys7Ci0JCQkJLyogTm93IGRyb3AgdGhlIGxvY2sgYW5kIGNvbXBsZXRlIHRoZSBzZW5kIGJhY2sgdG8gKi8KLQkJCQkvKiBNaWNyb3NvZnQuICBXZSBuZWVkIHRvIGRyb3AgdGhlIGxvY2sgYmVjYXVzZSAqLwotCQkJCS8qIE1pY3Jvc29mdCBjYW4gY29tZSBiYWNrIHdpdGggYSBjaGltbmV5IHNlbmQsIHdoaWNoICovCi0JCQkJLyogcmVzdWx0cyBpbiBhIGRvdWJsZSB0cmlwIGluIFN4Z1RjcE91cHV0ICovCi0JCQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKLQkJCQlTWEdfQ09NUExFVEVfRFVNQl9TRU5EKGFkYXB0ZXIsIHNrYik7CisJCQkJLyoKKwkJCQkgKiBOb3cgZHJvcCB0aGUgbG9jayBhbmQgY29tcGxldGUgdGhlIHNlbmQKKwkJCQkgKiBiYWNrIHRvIE1pY3Jvc29mdC4gIFdlIG5lZWQgdG8gZHJvcCB0aGUgbG9jaworCQkJCSAqIGJlY2F1c2UgTWljcm9zb2Z0IGNhbiBjb21lIGJhY2sgd2l0aCBhCisJCQkJICogY2hpbW5leSBzZW5kLCB3aGljaCByZXN1bHRzIGluIGEgZG91YmxlIHRyaXAKKwkJCQkgKiBpbiBTeGdUY3BPdXB1dAorCQkJCSAqLworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoCisJCQkJCSZhZGFwdGVyLT5YbXRaZXJvTG9jaywgZmxhZ3MpOworCisJCQkJU3hnU2dsLT5EdW1iUGFja2V0ID0gTlVMTDsKKwkJCQlTWEdfQ09NUExFVEVfRFVNQl9TRU5EKGFkYXB0ZXIsIHNrYiwKKwkJCQkJCQlGaXJzdFNnZUFkZHJlc3MsCisJCQkJCQkJRmlyc3RTZ2VMZW5ndGgpOworCQkJCVNYR19GUkVFX1NHTF9CVUZGRVIoYWRhcHRlciwgU3hnU2dsLCBOVUxMKTsKIAkJCQkvKiBhbmQgcmVhY3F1aXJlLi4gKi8KLQkJCQlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKIAkJCX0KIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJQVNTRVJUKDApOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBTbmQiLAogCQkgIGFkYXB0ZXIsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCwgMCk7CiB9CkBAIC0xMzU2LDIyICsxNzU3LDI3IEBACiAgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKICAqCUV2ZW50CQktIFJlY2VpdmUgZXZlbnQKICAqCi0gKiBSZXR1cm4KLSAqCSBza2IKKyAqIFJldHVybiAtIHNrYgogICovCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnN4Z19zbG93X3JlY2VpdmUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgc3RydWN0IFNYR19FVkVOVCAqRXZlbnQpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnN4Z19zbG93X3JlY2VpdmUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKKwkJCQkJCXN0cnVjdCBzeGdfZXZlbnQgKkV2ZW50KQogewotCXN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiAqUmN2RGF0YUJ1ZmZlckhkcjsKKwl1MzIgQnVmZmVyU2l6ZSA9IGFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplOworCXN0cnVjdCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciAqUmN2RGF0YUJ1ZmZlckhkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqUGFja2V0OworCXN0YXRpYyBpbnQgcmVhZF9jb3VudGVyID0gMDsKIAotCVJjdkRhdGFCdWZmZXJIZHIgPSAoc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSKikgRXZlbnQtPkhvc3RIYW5kbGU7CisJUmN2RGF0YUJ1ZmZlckhkciA9IChzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgKikgRXZlbnQtPkhvc3RIYW5kbGU7CisJaWYocmVhZF9jb3VudGVyKysgJiAweDEwMCkKKwl7CisJCXN4Z19jb2xsZWN0X3N0YXRpc3RpY3MoYWRhcHRlcik7CisJCXJlYWRfY291bnRlciA9IDA7CisJfQogCUFTU0VSVChSY3ZEYXRhQnVmZmVySGRyKTsKIAlBU1NFUlQoUmN2RGF0YUJ1ZmZlckhkci0+U3RhdGUgPT0gU1hHX0JVRkZFUl9PTkNBUkQpOwotCUFTU0VSVChTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpID09Ci0JICAgICAgIFJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzKTsKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfSU1QT1JUQU5ULCAiU2xvd1JjdiIsIEV2ZW50LAogCQkgIFJjdkRhdGFCdWZmZXJIZHIsIFJjdkRhdGFCdWZmZXJIZHItPlN0YXRlLAotCQkgIFJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzKTsKKwkJICAvKlJjdkRhdGFCdWZmZXJIZHItPlZpcnR1YWxBZGRyZXNzKi8gMCk7CiAJLyogRHJvcCByY3YgZnJhbWVzIGluIG5vbi1ydW5uaW5nIHN0YXRlICovCiAJc3dpdGNoIChhZGFwdGVyLT5TdGF0ZSkgewogCWNhc2UgU1hHX1NUQVRFX1JVTk5JTkc6CkBAIC0xMzg1LDE0ICsxNzkxLDE2IEBACiAJCWdvdG8gZHJvcDsKIAl9CiAKKwkvKgorCSAqIG1lbWNweShTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpLAorCSAqIAkJUmN2RGF0YUJ1ZmZlckhkci0+VmlydHVhbEFkZHJlc3MsIEV2ZW50LT5MZW5ndGgpOworCSAqLworCiAJLyogQ2hhbmdlIGJ1ZmZlciBzdGF0ZSB0byBVUFNUUkVBTSAqLwogCVJjdkRhdGFCdWZmZXJIZHItPlN0YXRlID0gU1hHX0JVRkZFUl9VUFNUUkVBTTsKIAlpZiAoRXZlbnQtPlN0YXR1cyAmIEVWRU5UX1NUQVRVU19SQ1ZFUlIpIHsKIAkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiUmN2RXJyb3IiLAogCQkJICBFdmVudCwgRXZlbnQtPlN0YXR1cywgRXZlbnQtPkhvc3RIYW5kbGUsIDApOwotCQkvKiBYWFhUT0RPIC0gUmVtb3ZlIHRoaXMgcHJpbnQgbGF0ZXIgKi8KLQkJREJHX0VSUk9SKCJTWEc6IFJlY2VpdmUgZXJyb3IgJXhcbiIsICoodTMyICopCi0JCQkgIFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oUmN2RGF0YUJ1ZmZlckhkcikpOwogCQlzeGdfcHJvY2Vzc19yY3ZfZXJyb3IoYWRhcHRlciwgKih1MzIgKikKIAkJCQkgICAgICBTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OCiAJCQkJICAgICAgKFJjdkRhdGFCdWZmZXJIZHIpKTsKQEAgLTE0MDAsOCArMTgwOCw5IEBACiAJfQogI2lmIFhYWFRPRE8JCQkvKiBWTEFOIHN0dWZmICovCiAJLyogSWYgdGhlcmUncyBhIFZMQU4gdGFnLCBleHRyYWN0IGl0IGFuZCB2YWxpZGF0ZSBpdCAqLwotCWlmICgoKHN0cnVjdCBldGhlcl9oZWFkZXIqKSAoU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSkpLT4KLQkgICAgRXRoZXJUeXBlID09IEVUSEVSVFlQRV9WTEFOKSB7CisJaWYgKCgoc3RydWN0IGV0aGVyX2hlYWRlciAqKQorCQkoU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSkpLT5FdGhlclR5cGUKKwkJCQkJCQk9PSBFVEhFUlRZUEVfVkxBTikgewogCQlpZiAoU3hnRXh0cmFjdFZsYW5IZWFkZXIoYWRhcHRlciwgUmN2RGF0YUJ1ZmZlckhkciwgRXZlbnQpICE9CiAJCSAgICBTVEFUVVNfU1VDQ0VTUykgewogCQkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLApAQCAtMTQxMiwzMyArMTgyMSw0MSBAQAogCQl9CiAJfQogI2VuZGlmCi0JLyogKi8KIAkvKiBEdW1iLW5pYyBmcmFtZS4gIFNlZSBpZiBpdCBwYXNzZXMgb3VyIG1hYyBmaWx0ZXIgYW5kIHVwZGF0ZSBzdGF0cyAqLwotCS8qICovCi0JaWYgKCFzeGdfbWFjX2ZpbHRlcihhZGFwdGVyLCAoc3RydWN0IGV0aGVyX2hlYWRlciopCi0JCQkgICAgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSwKLQkJCSAgICBFdmVudC0+TGVuZ3RoKSkgeworCisJaWYgKCFzeGdfbWFjX2ZpbHRlcihhZGFwdGVyLAorCSAgICAoc3RydWN0IGV0aGVyX2hlYWRlciAqKShTWEdfUkVDRUlWRV9EQVRBX0xPQ0FUSU9OKFJjdkRhdGFCdWZmZXJIZHIpKSwKKwkgICAgRXZlbnQtPkxlbmd0aCkpIHsKIAkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiUmN2RmlsdHIiLAotCQkJICBFdmVudCwgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSwKLQkJCSAgRXZlbnQtPkxlbmd0aCwgMCk7Ci0JCWdvdG8gZHJvcDsKKwkJCSAgICBFdmVudCwgU1hHX1JFQ0VJVkVfREFUQV9MT0NBVElPTihSY3ZEYXRhQnVmZmVySGRyKSwKKwkJCSAgICBFdmVudC0+TGVuZ3RoLCAwKTsKKwkgIGdvdG8gZHJvcDsKIAl9CiAKIAlQYWNrZXQgPSBSY3ZEYXRhQnVmZmVySGRyLT5TeGdEdW1iUmN2UGFja2V0OworCVNYR19BREpVU1RfUkNWX1BBQ0tFVChQYWNrZXQsIFJjdkRhdGFCdWZmZXJIZHIsIEV2ZW50KTsKKwlQYWNrZXQtPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoUGFja2V0LCBhZGFwdGVyLT5uZXRkZXYpOwogCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX0lNUE9SVEFOVCwgIkR1bWJSY3YiLAogCQkgIFJjdkRhdGFCdWZmZXJIZHIsIFBhY2tldCwgRXZlbnQtPkxlbmd0aCwgMCk7Ci0JLyogKi8KIAkvKiBMYXN0bHkgYWRqdXN0IHRoZSByZWNlaXZlIHBhY2tldCBsZW5ndGguICovCi0JLyogKi8KLQlTWEdfQURKVVNUX1JDVl9QQUNLRVQoUGFja2V0LCBSY3ZEYXRhQnVmZmVySGRyLCBFdmVudCk7Ci0KKwlSY3ZEYXRhQnVmZmVySGRyLT5TeGdEdW1iUmN2UGFja2V0ID0gTlVMTDsKKwlSY3ZEYXRhQnVmZmVySGRyLT5QaHlzaWNhbEFkZHJlc3MgPSAoZG1hX2FkZHJfdClOVUxMOworCVNYR19BTExPQ0FURV9SQ1ZfUEFDS0VUKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIsIEJ1ZmZlclNpemUpOworCWlmIChSY3ZEYXRhQnVmZmVySGRyLT5za2IpCisJeworCQlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKKwkJU1hHX0ZSRUVfUkNWX0RBVEFfQlVGRkVSKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOworCQkvLyBhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkICsrOworCQlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOworCX0KIAlyZXR1cm4gKFBhY2tldCk7CiAKICAgICAgIGRyb3A6CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRHJvcFJjdiIsCiAJCSAgUmN2RGF0YUJ1ZmZlckhkciwgRXZlbnQtPkxlbmd0aCwgMCwgMCk7Ci0JYWRhcHRlci0+U3RhdHMuUmN2RGlzY2FyZHMrKzsKKwlhZGFwdGVyLT5zdGF0cy5yeF9kcm9wcGVkKys7CisvLwlhZGFwdGVyLT5TdGF0cy5SY3ZEaXNjYXJkcysrOwogCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOwogCVNYR19GUkVFX1JDVl9EQVRBX0JVRkZFUihhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKIAlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOwpAQCAtMTQ1MywxNCArMTg3MCwxMyBAQAogICoJCWFkYXB0ZXIJCS0gQWRhcHRlciBzdHJ1Y3R1cmUKICAqCQlFcnJvclN0YXR1cwktIDQtYnl0ZSByZWNlaXZlIGVycm9yIHN0YXR1cwogICoKLSAqIFJldHVybiBWYWx1ZToKLSAqIAlOb25lCisgKiBSZXR1cm4gVmFsdWUJCTogTm9uZQogICovCiBzdGF0aWMgdm9pZCBzeGdfcHJvY2Vzc19yY3ZfZXJyb3Ioc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgdTMyIEVycm9yU3RhdHVzKQogewogCXUzMiBFcnJvcjsKIAotCWFkYXB0ZXItPlN0YXRzLlJjdkVycm9ycysrOworCWFkYXB0ZXItPnN0YXRzLnJ4X2Vycm9ycysrOwogCiAJaWYgKEVycm9yU3RhdHVzICYgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0VSUk9SKSB7CiAJCUVycm9yID0gRXJyb3JTdGF0dXMgJiBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTUFTSzsKQEAgLTE1MzIsMTMgKzE5NDgsMTMgQEAKICAqCQlwZXRoZXIJCS0gRXRoZXJuZXQgaGVhZGVyCiAgKgkJbGVuZ3RoCQktIEZyYW1lIGxlbmd0aAogICoKLSAqIFJldHVybiBWYWx1ZToKLSAqIAlUUlVFIGlmIHRoZSBmcmFtZSBpcyB0byBiZSBhbGxvd2VkCisgKiBSZXR1cm4gVmFsdWUgOiBUUlVFIGlmIHRoZSBmcmFtZSBpcyB0byBiZSBhbGxvd2VkCiAgKi8KLXN0YXRpYyBib29sIHN4Z19tYWNfZmlsdGVyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsIHN0cnVjdCBldGhlcl9oZWFkZXIgKkV0aGVySGRyLAotCQkJICAgdXNob3J0IGxlbmd0aCkKK3N0YXRpYyBib29sIHN4Z19tYWNfZmlsdGVyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCisJCXN0cnVjdCBldGhlcl9oZWFkZXIgKkV0aGVySGRyLCB1c2hvcnQgbGVuZ3RoKQogewogCWJvb2wgRXF1YWxBZGRyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAKIAlpZiAoU1hHX01VTFRJQ0FTVF9QQUNLRVQoRXRoZXJIZHIpKSB7CiAJCWlmIChTWEdfQlJPQURDQVNUX1BBQ0tFVChFdGhlckhkcikpIHsKQEAgLTE1NDYsOCArMTk2Miw2IEBACiAJCQlpZiAoYWRhcHRlci0+TWFjRmlsdGVyICYgTUFDX0JDQVNUKSB7CiAJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJjYXN0UGt0cysrOwogCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCY2FzdEJ5dGVzICs9IGxlbmd0aDsKLQkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2UGt0cysrOwotCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCeXRlcyArPSBsZW5ndGg7CiAJCQkJcmV0dXJuIChUUlVFKTsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTE1NTUsMTUgKzE5NjksMTIgQEAKIAkJCWlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfQUxMTUNBU1QpIHsKIAkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2TWNhc3RQa3RzKys7CiAJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdk1jYXN0Qnl0ZXMgKz0gbGVuZ3RoOwotCQkJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7Ci0JCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJ5dGVzICs9IGxlbmd0aDsKIAkJCQlyZXR1cm4gKFRSVUUpOwogCQkJfQogCQkJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIE1BQ19NQ0FTVCkgewotCQkJCXN0cnVjdCBTWEdfTVVMVElDQVNUX0FERFJFU1MgKk11bHRpY2FzdEFkZHJzID0KLQkJCQkgICAgYWRhcHRlci0+TXVsdGljYXN0QWRkcnM7Ci0JCQkJd2hpbGUgKE11bHRpY2FzdEFkZHJzKSB7Ci0JCQkJCUVUSEVSX0VRX0FERFIoTXVsdGljYXN0QWRkcnMtPkFkZHJlc3MsCisJCQkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QgPSBkZXYtPm1jX2xpc3Q7CisJCQkJd2hpbGUgKG1jbGlzdCkgeworCQkJCQlFVEhFUl9FUV9BRERSKG1jbGlzdC0+ZGFfYWRkciwKIAkJCQkJCSAgICAgIEV0aGVySGRyLT5ldGhlcl9kaG9zdCwKIAkJCQkJCSAgICAgIEVxdWFsQWRkcik7CiAJCQkJCWlmIChFcXVhbEFkZHIpIHsKQEAgLTE1NzEsMzIgKzE5ODIsMjYgQEAKIAkJCQkJCSAgICBEdW1iUmN2TWNhc3RQa3RzKys7CiAJCQkJCQlhZGFwdGVyLT5TdGF0cy4KIAkJCQkJCSAgICBEdW1iUmN2TWNhc3RCeXRlcyArPSBsZW5ndGg7Ci0JCQkJCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2UGt0cysrOwotCQkJCQkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdkJ5dGVzICs9Ci0JCQkJCQkgICAgbGVuZ3RoOwogCQkJCQkJcmV0dXJuIChUUlVFKTsKIAkJCQkJfQotCQkJCQlNdWx0aWNhc3RBZGRycyA9IE11bHRpY2FzdEFkZHJzLT5OZXh0OworCQkJCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CiAJCQkJfQogCQkJfQogCQl9CiAJfSBlbHNlIGlmIChhZGFwdGVyLT5NYWNGaWx0ZXIgJiBNQUNfRElSRUNURUQpIHsKLQkJLyogTm90IGJyb2FkY2FzdCBvciBtdWx0aWNhc3QuICBNdXN0IGJlIGRpcmVjdGVkIGF0IHVzIG9yICovCi0JCS8qIHRoZSBjYXJkIGlzIGluIHByb21pc2N1b3VzIG1vZGUuICBFaXRoZXIgd2F5LCBjb25zaWRlciBpdCAqLwotCQkvKiBvdXJzIGlmIE1BQ19ESVJFQ1RFRCBpcyBzZXQgKi8KKwkJLyoKKwkJICogTm90IGJyb2FkY2FzdCBvciBtdWx0aWNhc3QuICBNdXN0IGJlIGRpcmVjdGVkIGF0IHVzIG9yCisJCSAqIHRoZSBjYXJkIGlzIGluIHByb21pc2N1b3VzIG1vZGUuICBFaXRoZXIgd2F5LCBjb25zaWRlciBpdAorCQkgKiBvdXJzIGlmIE1BQ19ESVJFQ1RFRCBpcyBzZXQKKwkJICovCiAJCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZVY2FzdFBrdHMrKzsKIAkJYWRhcHRlci0+U3RhdHMuRHVtYlJjdlVjYXN0Qnl0ZXMgKz0gbGVuZ3RoOwotCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2UGt0cysrOwotCQlhZGFwdGVyLT5TdGF0cy5EdW1iUmN2Qnl0ZXMgKz0gbGVuZ3RoOwogCQlyZXR1cm4gKFRSVUUpOwogCX0KIAlpZiAoYWRhcHRlci0+TWFjRmlsdGVyICYgTUFDX1BST01JU0MpIHsKIAkJLyogV2hhdGV2ZXIgaXQgaXMsIGtlZXAgaXQuICovCi0JCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZQa3RzKys7Ci0JCWFkYXB0ZXItPlN0YXRzLkR1bWJSY3ZCeXRlcyArPSBsZW5ndGg7CiAJCXJldHVybiAoVFJVRSk7CiAJfQotCWFkYXB0ZXItPlN0YXRzLlJjdkRpc2NhcmRzKys7CiAJcmV0dXJuIChGQUxTRSk7CiB9CiAKQEAgLTE2MjcsNyArMjAzMiw2IEBACiAJCWFkYXB0ZXItPmludHJyZWdpc3RlcmVkID0gMTsKIAkJYWRhcHRlci0+SW50UmVnaXN0ZXJlZCA9IFRSVUU7CiAJCS8qIERpc2FibGUgUlNTIHdpdGggbGluZS1iYXNlZCBpbnRlcnJ1cHRzICovCi0JCWFkYXB0ZXItPk1zaUVuYWJsZWQgPSBGQUxTRTsKIAkJYWRhcHRlci0+UnNzRW5hYmxlZCA9IEZBTFNFOwogCQlEQkdfRVJST1IoInN4ZzogJXMgQWxsb2NBZGFwdFJzcmNzIGFkYXB0ZXJbJXBdIGRldi0+aXJxWyV4XVxuIiwKIAkJCSAgX19mdW5jX18sIGFkYXB0ZXIsIGFkYXB0ZXItPm5ldGRldi0+aXJxKTsKQEAgLTE2NjMsMTIgKzIwNjcsMTIgQEAKICAqLwogc3RhdGljIGludCBzeGdfaWZfaW5pdChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewotCXBfbmV0X2RldmljZSBkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlpbnQgc3RhdHVzID0gMDsKIAotCURCR19FUlJPUigic3hnOiAlcyAoJXMpIEVOVEVSIHN0YXRlc1slZDolZDolZF0gZmxhZ3NbJXhdXG4iLAorCURCR19FUlJPUigic3hnOiAlcyAoJXMpIEVOVEVSIHN0YXRlc1slZDolZF0gZmxhZ3NbJXhdXG4iLAogCQkgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCi0JCSAgYWRhcHRlci0+cXVldWVzX2luaXRpYWxpemVkLCBhZGFwdGVyLT5zdGF0ZSwKKwkJICBhZGFwdGVyLT5zdGF0ZSwKIAkJICBhZGFwdGVyLT5saW5rc3RhdGUsIGRldi0+ZmxhZ3MpOwogCiAJLyogYWRhcHRlciBzaG91bGQgYmUgZG93biBhdCB0aGlzIHBvaW50ICovCkBAIC0xNjc5LDMxICsyMDgzLDMxIEBACiAJQVNTRVJUKGFkYXB0ZXItPmxpbmtzdGF0ZSA9PSBMSU5LX0RPV04pOwogCiAJYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IGRldi0+ZmxhZ3M7Ci0JYWRhcHRlci0+bWFjb3B0cyA9IE1BQ19ESVJFQ1RFRDsKKwlhZGFwdGVyLT5NYWNGaWx0ZXIgPSBNQUNfRElSRUNURUQ7CiAJaWYgKGRldi0+ZmxhZ3MpIHsKIAkJREJHX0VSUk9SKCJzeGc6ICVzICglcykgU2V0IE1BQyBvcHRpb25zOiAiLCBfX2Z1bmNfXywKIAkJCSAgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKSB7Ci0JCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19CQ0FTVDsKKwkJCWFkYXB0ZXItPk1hY0ZpbHRlciB8PSBNQUNfQkNBU1Q7CiAJCQlEQkdfRVJST1IoIkJDQVNUICIpOwogCQl9CiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX1BST01JU0M7CisJCQlhZGFwdGVyLT5NYWNGaWx0ZXIgfD0gTUFDX1BST01JU0M7CiAJCQlEQkdfRVJST1IoIlBST01JU0MgIik7CiAJCX0KIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKLQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX0FMTE1DQVNUOworCQkJYWRhcHRlci0+TWFjRmlsdGVyIHw9IE1BQ19BTExNQ0FTVDsKIAkJCURCR19FUlJPUigiQUxMX01DQVNUICIpOwogCQl9CiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgewotCQkJYWRhcHRlci0+bWFjb3B0cyB8PSBNQUNfTUNBU1Q7CisJCQlhZGFwdGVyLT5NYWNGaWx0ZXIgfD0gTUFDX01DQVNUOwogCQkJREJHX0VSUk9SKCJNQ0FTVCAiKTsKIAkJfQogCQlEQkdfRVJST1IoIlxuIik7CiAJfQotCXN0YXR1cyA9IHN4Z19yZWdpc3Rlcl9pbnRlcnJ1cHQoYWRhcHRlcik7CisJc3RhdHVzID0gc3hnX3JlZ2lzdGVyX2ludHIoYWRhcHRlcik7CiAJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQlEQkdfRVJST1IoInN4Z19pZl9pbml0OiBzeGdfcmVnaXN0ZXJfaW50ZXJydXB0IEZBSUxFRCAleFxuIiwKKwkJREJHX0VSUk9SKCJzeGdfaWZfaW5pdDogc3hnX3JlZ2lzdGVyX2ludHIgRkFJTEVEICV4XG4iLAogCQkJICBzdGF0dXMpOwogCQlzeGdfZGVyZWdpc3Rlcl9pbnRlcnJ1cHQoYWRhcHRlcik7CiAJCXJldHVybiAoc3RhdHVzKTsKQEAgLTE3MTEsMTggKzIxMTUsOTAgQEAKIAogCWFkYXB0ZXItPnN0YXRlID0gQURBUFRfVVA7CiAKLQkvKgotCSAqICAgIGNsZWFyIGFueSBwZW5kaW5nIGV2ZW50cywgdGhlbiBlbmFibGUgaW50ZXJydXB0cwotCSAqLworCS8qICAgIGNsZWFyIGFueSBwZW5kaW5nIGV2ZW50cywgdGhlbiBlbmFibGUgaW50ZXJydXB0cyAqLwogCURCR19FUlJPUigic3hnOiAlcyBFTkFCTEUgaW50ZXJydXB0cyhzbGljKVxuIiwgX19mdW5jX18pOwogCiAJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7CiB9CiAKLXN0YXRpYyBpbnQgc3hnX2VudHJ5X29wZW4ocF9uZXRfZGV2aWNlIGRldikKK3ZvaWQgc3hnX3NldF9pbnRlcnJ1cHRfYWdncmVnYXRpb24oc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwkvKgorCSAqIFRvcCBiaXQgZGlzYWJsZXMgYWdncmVnYXRpb24gb24geG10IChTWEdfQUdHX1hNVF9ESVNBQkxFKS4KKwkgKiBNYWtlIHN1cmUgTWF4IGlzIGxlc3MgdGhhbiAweDgwMDAuCisJICovCisJYWRhcHRlci0+bWF4X2FnZ3JlZ2F0aW9uID0gU1hHX01BWF9BR0dfREVGQVVMVDsKKwlhZGFwdGVyLT5taW5fYWdncmVnYXRpb24gPSBTWEdfTUlOX0FHR19ERUZBVUxUOworCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uQWdncmVnYXRpb24sCisJCSgoYWRhcHRlci0+bWF4X2FnZ3JlZ2F0aW9uIDw8IFNYR19NQVhfQUdHX1NISUZUKSB8CisJCQlhZGFwdGVyLT5taW5fYWdncmVnYXRpb24pLAorCQkJVFJVRSk7Cit9CisKK3N0YXRpYyBpbnQgc3hnX2VudHJ5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgc3RhdHVzOworCXN0YXRpYyBpbnQgdHVybjsKKwlpbnQgc3hnX2luaXRpYWxfcmN2X2RhdGFfYnVmZmVycyA9IFNYR19JTklUSUFMX1JDVl9EQVRBX0JVRkZFUlM7CisJaW50IGk7CisKKwlpZiAoYWRhcHRlci0+SnVtYm9FbmFibGVkID09IFRSVUUpIHsKKwkJc3hnX2luaXRpYWxfcmN2X2RhdGFfYnVmZmVycyA9CisJCQkJCVNYR19JTklUSUFMX0pVTUJPX1JDVl9EQVRBX0JVRkZFUlM7CisJCVNYR19JTklUSUFMSVpFX1JJTkcoYWRhcHRlci0+UmN2UmluZ1plcm9JbmZvLAorCQkJCQlTWEdfSlVNQk9fUkNWX1JJTkdfU0laRSk7CisJfQorCisJLyoKKwkqIEFsbG9jYXRlIHJlY2VpdmUgZGF0YSBidWZmZXJzLiAgV2UgYWxsb2NhdGUgYSBibG9jayBvZiBidWZmZXJzIGFuZAorCSogYSBjb3JyZXNwb25kaW5nIGRlc2NyaXB0b3IgYmxvY2sgYXQgb25jZS4gIFNlZSBzeGdody5oOlNYR19SQ1ZfQkxPQ0sKKwkqLworCisJZm9yIChpID0gMDsgaSA8IHN4Z19pbml0aWFsX3Jjdl9kYXRhX2J1ZmZlcnM7CisJCQlpICs9IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLKQorCXsKKwkJc3RhdHVzID0gc3hnX2FsbG9jYXRlX2J1ZmZlcl9tZW1vcnkoYWRhcHRlciwKKwkJU1hHX1JDVl9CTE9DS19TSVpFKFNYR19SQ1ZfREFUQV9IRFJfU0laRSksCisJCQkJCVNYR19CVUZGRVJfVFlQRV9SQ1YpOworCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQorCQkJcmV0dXJuIHN0YXR1czsKKwl9CisJLyoKKwkgKiBOQkwgcmVzb3VyY2UgYWxsb2NhdGlvbiBjYW4gZmFpbCBpbiB0aGUgJ0FsbG9jYXRlQ29tcGxldGUnIHJvdXRpbmUsCisJICogd2hpY2ggZG9lc24ndCByZXR1cm4gc3RhdHVzLiAgTWFrZSBzdXJlIHdlIGdvdCB0aGUgbnVtYmVyIG9mIGJ1ZmZlcnMKKwkgKiB3ZSByZXF1ZXN0ZWQKKwkgKi8KKworCWlmIChhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQgPCBzeGdfaW5pdGlhbF9yY3ZfZGF0YV9idWZmZXJzKSB7CisJCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBUmVzRjYiLAorCQkJYWRhcHRlciwgYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50LCBTWEdfTUFYX0VOVFJJRVMsCisJCQkwKTsKKwkJcmV0dXJuIChTVEFUVVNfUkVTT1VSQ0VTKTsKKwl9CisJLyoKKwkgKiBUaGUgbWljcm9jb2RlIGV4cGVjdHMgaXQgdG8gYmUgZG93bmxvYWRlZCBvbiBldmVyeSBvcGVuLgorCSAqLworCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfZG93bmxvYWRfbWljcm9jb2RlXG4iLCBfX0ZVTkNUSU9OX18pOworCWlmIChzeGdfZG93bmxvYWRfbWljcm9jb2RlKGFkYXB0ZXIsIFNYR19VQ09ERV9TWVNURU0pKSB7CisJCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfYWRhcHRlcl9zZXRfaHdhZGRyXG4iLAorCQkJCV9fRlVOQ1RJT05fXyk7CisJCXN4Z19yZWFkX2NvbmZpZyhhZGFwdGVyKTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX0ZBSUw7CisJCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKwkJREJHX0VSUk9SKCJzeGdfZG93bmxvYWRfbWljcm9jb2RlIEZBSUxFRCBzdGF0dXNbJXhdXG4iLAorCQkJCXN0YXR1cyk7CisJfQorCW1zbGVlcCg1KTsKKworCWlmICh0dXJuKSB7CisJCXN4Z19zZWNvbmRfb3BlbihhZGFwdGVyLT5uZXRkZXYpOworCisJCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKKwl9CisKKwl0dXJuKys7CiAKIAlBU1NFUlQoYWRhcHRlcik7CiAJREJHX0VSUk9SKCJzeGc6ICVzIGFkYXB0ZXItPmFjdGl2YXRlZFslZF1cbiIsIF9fZnVuY19fLApAQCAtMTc2Miw2ICsyMjM4LDggQEAKIAkJcmV0dXJuIChzdGF0dXMpOwogCX0KIAlEQkdfRVJST1IoInN4ZzogJXMgRU5BQkxFIEFMTCBJTlRFUlJVUFRTXG4iLCBfX2Z1bmNfXyk7CisJc3hnX3NldF9pbnRlcnJ1cHRfYWdncmVnYXRpb24oYWRhcHRlcik7CisJbmFwaV9lbmFibGUoJmFkYXB0ZXItPm5hcGkpOwogCiAJLyogRW5hYmxlIGludGVycnVwdHMgKi8KIAlTWEdfRU5BQkxFX0FMTF9JTlRFUlJVUFRTKGFkYXB0ZXIpOwpAQCAtMTc3Miw3MSArMjI1MCwxNjIgQEAKIAlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiB9CiAKK2ludCBzeGdfc2Vjb25kX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlcl90KikgbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgc3RhdHVzID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKwluZXRpZl9zdGFydF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworICAgICAgICBhZGFwdGVyLT5zdGF0ZSA9IEFEQVBUX1VQOworICAgICAgICBhZGFwdGVyLT5saW5rc3RhdGUgPSBMSU5LX1VQOworCisJc3RhdHVzID0gc3hnX2luaXRpYWxpemVfYWRhcHRlcihhZGFwdGVyKTsKKwlzeGdfc2V0X2ludGVycnVwdF9hZ2dyZWdhdGlvbihhZGFwdGVyKTsKKwluYXBpX2VuYWJsZSgmYWRhcHRlci0+bmFwaSk7CisgICAgICAgIC8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzICovCisgICAgICAgIFNYR19FTkFCTEVfQUxMX0lOVEVSUlVQVFMoYWRhcHRlcik7CisKKwlzeGdfcmVnaXN0ZXJfaW50cihhZGFwdGVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKKwltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKKwlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKKworfQorCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgc3hnX2VudHJ5X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KQogewotCXBfbmV0X2RldmljZSBkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpZGV2KTsKLQl1MzIgbW1pb19zdGFydCA9IDA7Ci0JdW5zaWduZWQgaW50IG1taW9fbGVuID0gMDsKKyAgICAgICAgdTMyIG1taW9fc3RhcnQgPSAwOworICAgICAgICB1MzIgbW1pb19sZW4gPSAwOworCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lkZXYpOwogCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKSBuZXRkZXZfcHJpdihkZXYpOwogCi0JQVNTRVJUKGFkYXB0ZXIpOwotCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBkZXZbJXBdIGFkYXB0ZXJbJXBdXG4iLCBfX2Z1bmNfXywgZGV2LAotCQkgIGFkYXB0ZXIpOwotCXN4Z19kZXJlZ2lzdGVyX2ludGVycnVwdChhZGFwdGVyKTsKLQlzeGdfdW5tYXBfbW1pb19zcGFjZShhZGFwdGVyKTsKLQlEQkdfRVJST1IoInN4ZzogJXMgdW5yZWdpc3Rlcl9uZXRkZXZcbiIsIF9fZnVuY19fKTsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJLyogRGVhbGxvY2F0ZSBSZXNvdXJjZXMgKi8KIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCXN4Z19yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKKwlzeGdfZnJlZV9yZXNvdXJjZXMoYWRhcHRlcik7CiAKLQltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7Ci0JbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CisJQVNTRVJUKGFkYXB0ZXIpOwogCi0JREJHX0VSUk9SKCJzeGc6ICVzIHJlbF9yZWdpb24oMCkgc3RhcnRbJXhdIGxlblsleF1cbiIsIF9fZnVuY19fLAotCQkgIG1taW9fc3RhcnQsIG1taW9fbGVuKTsKLQlyZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOworICAgICAgICBtbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CisgICAgICAgIG1taW9fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIDApOwogCi0JREJHX0VSUk9SKCJzeGc6ICVzIGlvdW5tYXAgZGV2LT5iYXNlX2FkZHJbJXhdXG4iLCBfX2Z1bmNfXywKLQkJICAodW5zaWduZWQgaW50KWRldi0+YmFzZV9hZGRyKTsKLQlpb3VubWFwKChjaGFyICopZGV2LT5iYXNlX2FkZHIpOworICAgICAgICBEQkdfRVJST1IoInN4ZzogJXMgcmVsX3JlZ2lvbigwKSBzdGFydFsleF0gbGVuWyV4XVxuIiwgX19GVU5DVElPTl9fLAorICAgICAgICAgICAgICAgICAgbW1pb19zdGFydCwgbW1pb19sZW4pOworICAgICAgICByZWxlYXNlX21lbV9yZWdpb24obW1pb19zdGFydCwgbW1pb19sZW4pOworCisgICAgICAgIG1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCAyKTsKKyAgICAgICAgbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMik7CisKKyAgICAgICAgREJHX0VSUk9SKCJzeGc6ICVzIHJlbF9yZWdpb24oMikgc3RhcnRbJXhdIGxlblsleF1cbiIsIF9fRlVOQ1RJT05fXywKKyAgICAgICAgICAgICAgICAgIG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKyAgICAgICAgcmVsZWFzZV9tZW1fcmVnaW9uKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOwogCiAJREJHX0VSUk9SKCJzeGc6ICVzIGRlYWxsb2NhdGUgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CiAJa2ZyZWUoZGV2KTsKIAlEQkdfRVJST1IoInN4ZzogJXMgRVhJVFxuIiwgX19mdW5jX18pOwogfQogCi1zdGF0aWMgaW50IHN4Z19lbnRyeV9oYWx0KHBfbmV0X2RldmljZSBkZXYpCitzdGF0aWMgaW50IHN4Z19lbnRyeV9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlcl90ICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHN4Z19od19yZWdzICpId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7CisJaW50IGk7CisJdTMyIFJzc0lkcywgSXNyQ291bnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCVJzc0lkcyA9IFNYR19SU1NfQ1BVX0NPVU5UKGFkYXB0ZXIpOworCUlzckNvdW50ID0gYWRhcHRlci0+bXNpX2VuYWJsZWQgPyBSc3NJZHMgOiAxOworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZzeGdfZ2xvYmFsLmRyaXZlcl9sb2NrLCBzeGdfZ2xvYmFsLmZsYWdzKTsKLQlEQkdfRVJST1IoInN4ZzogJXMgKCVzKSBFTlRFUlxuIiwgX19mdW5jX18sIGRldi0+bmFtZSk7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGFkYXB0ZXItPm5ldGRldik7CisJU1hHX0RJU0FCTEVfQUxMX0lOVEVSUlVQVFMoYWRhcHRlcik7CiAJYWRhcHRlci0+c3RhdGUgPSBBREFQVF9ET1dOOwogCWFkYXB0ZXItPmxpbmtzdGF0ZSA9IExJTktfRE9XTjsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN4Z19nbG9iYWwuZHJpdmVyX2xvY2ssIHN4Z19nbG9iYWwuZmxhZ3MpOworCXN4Z19kZXJlZ2lzdGVyX2ludGVycnVwdChhZGFwdGVyKTsKKwlXUklURV9SRUcoSHdSZWdzLT5SZXNldCwgMHhERUFELCBGTFVTSCk7CisJbWRlbGF5KDUwMDApOworCisJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7CisKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLlJjdkNtZCwgMCwgdHJ1ZSk7CiAJYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiA9IDA7CiAJREJHX0VSUk9SKCJzeGc6ICVzICglcykgc2V0IGFkYXB0ZXJbJXBdIHN0YXRlIHRvIEFEQVBUX0RPV04oJWQpXG4iLAogCQkgIF9fZnVuY19fLCBkZXYtPm5hbWUsIGFkYXB0ZXIsIGFkYXB0ZXItPnN0YXRlKTsKIAotCURCR19FUlJPUigic3hnOiAlcyAoJXMpIEVYSVRcbiIsIF9fZnVuY19fLCBkZXYtPm5hbWUpOwotCURCR19FUlJPUigic3hnOiAlcyBFWElUXG4iLCBfX2Z1bmNfXyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3hnX2dsb2JhbC5kcml2ZXJfbG9jaywgc3hnX2dsb2JhbC5mbGFncyk7CisJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisJLyogRnJlZSBhbGwgdGhlIGJsb2NrcyBhbmQgdGhlIGJ1ZmZlcnMsIG1vdmVkIGZyb20gcmVtb3ZlKCkgcm91dGluZSAqLworCWlmICghKElzTGlzdEVtcHR5KCZhZGFwdGVyLT5BbGxSY3ZCbG9ja3MpKSkgeworCQlzeGdfZnJlZV9yY3ZibG9ja3MoYWRhcHRlcik7CisJfQorCisKKwlJbml0aWFsaXplTGlzdEhlYWQoJmFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJzKTsKKwlJbml0aWFsaXplTGlzdEhlYWQoJmFkYXB0ZXItPkZyZWVSY3ZCbG9ja3MpOworCUluaXRpYWxpemVMaXN0SGVhZCgmYWRhcHRlci0+QWxsUmN2QmxvY2tzKTsKKwlJbml0aWFsaXplTGlzdEhlYWQoJmFkYXB0ZXItPkZyZWVTZ2xCdWZmZXJzKTsKKwlJbml0aWFsaXplTGlzdEhlYWQoJmFkYXB0ZXItPkFsbFNnbEJ1ZmZlcnMpOworCisJYWRhcHRlci0+RnJlZVJjdkJ1ZmZlckNvdW50ID0gMDsKKwlhZGFwdGVyLT5GcmVlUmN2QmxvY2tDb3VudCA9IDA7CisJYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCA9IDA7CisJYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCA9IDA7CisJYWRhcHRlci0+UGVuZGluZ1JjdkNvdW50ID0gMDsKKworCW1lbXNldChhZGFwdGVyLT5SY3ZSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X3JpbmcpICogMSk7CisJbWVtc2V0KGFkYXB0ZXItPkV2ZW50UmluZ3MsIDAsIHNpemVvZihzdHJ1Y3Qgc3hnX2V2ZW50X3JpbmcpICogUnNzSWRzKTsKKwltZW1zZXQoYWRhcHRlci0+SXNyLCAwLCBzaXplb2YodTMyKSAqIElzckNvdW50KTsKKwlmb3IgKGkgPSAwOyBpIDwgU1hHX01BWF9SSU5HX1NJWkU7IGkrKykKKwkJYWRhcHRlci0+UmN2UmluZ1plcm9JbmZvLkNvbnRleHRbaV0gPSBOVUxMOworCVNYR19JTklUSUFMSVpFX1JJTkcoYWRhcHRlci0+UmN2UmluZ1plcm9JbmZvLCBTWEdfUkNWX1JJTkdfU0laRSk7CisJU1hHX0lOSVRJQUxJWkVfUklORyhhZGFwdGVyLT5YbXRSaW5nWmVyb0luZm8sIFNYR19YTVRfUklOR19TSVpFKTsKKworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKKwlhZGFwdGVyLT5BbGxTZ2xCdWZmZXJDb3VudCA9IDA7CisJYWRhcHRlci0+RnJlZVNnbEJ1ZmZlckNvdW50ID0gMDsKKwlhZGFwdGVyLT5QZW5kaW5nWG10Q291bnQgPSAwOworCW1lbXNldChhZGFwdGVyLT5YbXRSaW5ncywgMCwgc2l6ZW9mKHN0cnVjdCBzeGdfeG10X3JpbmcpICogMSk7CisJbWVtc2V0KGFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgsIDAsIHNpemVvZih1MzIpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5YbXRaZXJvTG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMDsgaSA8IFNYR19NQVhfUlNTOyBpKyspIHsKKwkJYWRhcHRlci0+TmV4dEV2ZW50W2ldID0gMDsKKwl9CisJYXRvbWljX3NldCgmYWRhcHRlci0+cGVuZGluZ19hbGxvY2F0aW9ucywgMCk7CisJYWRhcHRlci0+aW50cnJlZ2lzdGVyZWQgPSAwOworCXN4Z19yZW1vdmVfaXNyKGFkYXB0ZXIpOworCURCR19FUlJPUigic3hnOiAlcyAoJXMpIEVYSVRcbiIsIF9fRlVOQ1RJT05fXywgZGV2LT5uYW1lKTsKIAlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKIH0KIAotc3RhdGljIGludCBzeGdfaW9jdGwocF9uZXRfZGV2aWNlIGRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3N0YXRpYyBpbnQgc3hnX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiB7CiAJQVNTRVJUKHJxKTsKLS8qICAgICAgREJHX0VSUk9SKCJzeGc6ICVzIGNtZFsleF0gcnFbJXBdIGRldlslcF1cbiIsIF9fZnVuY19fLCBjbWQsIHJxLCBkZXYpOyAqLworLyogICAgICBEQkdfRVJST1IoInN4ZzogJXMgY21kWyV4XSBycVslcF0gZGV2WyVwXVxuIiwgX19mdW5jX18sIGNtZCwgcnEsIGRldik7Ki8KIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ1NMSUNTRVRJTlRBR0c6CiAJCXsKLS8qICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKSBuZXRkZXZfcHJpdihkZXYpOyAqLworCQkJLyogc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlcl90ICopCisJCQkgKiBuZXRkZXZfcHJpdihkZXYpOworCQkJICovCiAJCQl1MzIgZGF0YVs3XTsKIAkJCXUzMiBpbnRhZ2c7CiAKIAkJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkgewotCQkJCURCR19FUlJPUgotCQkJCSAgICAoImNvcHlfZnJvbV91c2VyIEZBSUxFRCAgZ2V0dGluZyBpbml0aWFsIHBhcmFtc1xuIik7CisJCQkJREJHX0VSUk9SKCJjb3B5X2Zyb21fdXNlciBGQUlMRUQgIGdldHRpbmcgXAorCQkJCQkgaW5pdGlhbCBwYXJhbXNcbiIpOwogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQogCQkJaW50YWdnID0gZGF0YVswXTsKQEAgLTE4NDcsNyArMjQxNiw3IEBACiAJCX0KIAogCWRlZmF1bHQ6Ci0vKiAgICAgICAgICAgICAgREJHX0VSUk9SKCJzeGc6ICVzIFVOU1VQUE9SVEVEWyV4XVxuIiwgX19mdW5jX18sIGNtZCk7ICovCisJCS8qIERCR19FUlJPUigic3hnOiAlcyBVTlNVUFBPUlRFRFsleF1cbiIsIF9fZnVuY19fLCBjbWQpOyAqLwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCXJldHVybiAwOwpAQCAtMTg1NiwyMyArMjQyNSwyNSBAQAogI2RlZmluZSBOT1JNQUxfRVRIRlJBTUUgICAgIDAKIAogLyoKLSAqCiAgKiBzeGdfc2VuZF9wYWNrZXRzIC0gU2VuZCBhIHNrYiBwYWNrZXQKICAqCiAgKiBBcmd1bWVudHM6Ci0gKgkJCXNrYiAgICAgICAgICAgICAgICAgICAgIC0gVGhlIHBhY2tldCB0byBzZW5kCi0gKgkJCWRldiAgICAgICAgICAgICAgICAgICAgIC0gT3VyIGxpbnV4IG5ldCBkZXZpY2UgdGhhdCByZWZzIG91ciBhZGFwdGVyCisgKgkJCXNrYiAtIFRoZSBwYWNrZXQgdG8gc2VuZAorICoJCQlkZXYgLSBPdXIgbGludXggbmV0IGRldmljZSB0aGF0IHJlZnMgb3VyIGFkYXB0ZXIKICAqCiAgKiBSZXR1cm46CiAgKgkJMCAgIHJlZ2FyZGxlc3Mgb2Ygb3V0Y29tZSAgICBYWFhUT0RPIHJlZmVyIHRvIGUxMDAwIGRyaXZlcgogICovCi1zdGF0aWMgaW50IHN4Z19zZW5kX3BhY2tldHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgcF9uZXRfZGV2aWNlIGRldikKK3N0YXRpYyBpbnQgc3hnX3NlbmRfcGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKIAotCURCR19FUlJPUigic3hnOiAlcyBFTlRFUiBzeGdfc2VuZF9wYWNrZXRzIHNrYlslcF1cbiIsIF9fZnVuY19fLAotCQkgIHNrYik7CisJLyoKKwkgKiBEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX3NlbmRfcGFja2V0cyBza2JbJXBdXG4iLCBfX0ZVTkNUSU9OX18sCisJICoJICBza2IpOworCSAqLworCiAJLyogQ2hlY2sgdGhlIGFkYXB0ZXIgc3RhdGUgKi8KIAlzd2l0Y2ggKGFkYXB0ZXItPlN0YXRlKSB7CiAJY2FzZSBTWEdfU1RBVEVfSU5JVElBTElaSU5HOgpAQCAtMTkwOSwxNyArMjQ4MCwxOCBAQAogCS8qIHJlamVjdCAmIGNvbXBsZXRlIGFsbCB0aGUgcGFja2V0cyBpZiB0aGV5IGNhbnQgYmUgc2VudCAqLwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKICNpZiBYWFhUT0RPCi0vKiAgICAgIHN4Z19zZW5kX3BhY2tldHNfZmFpbChhZGFwdGVyLCBza2IsIHN0YXR1cyk7ICovCisJLyogc3hnX3NlbmRfcGFja2V0c19mYWlsKGFkYXB0ZXIsIHNrYiwgc3RhdHVzKTsgKi8KICNlbHNlCiAJCVNYR19EUk9QX0RVTUJfU0VORChhZGFwdGVyLCBza2IpOwogCQlhZGFwdGVyLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKICNlbmRpZgogCX0KIAlEQkdfRVJST1IoInN4ZzogJXMgRVhJVCBzeGdfc2VuZF9wYWNrZXRzIHN0YXR1c1sleF1cbiIsIF9fZnVuY19fLAogCQkgIHN0YXR1cyk7CiAKICAgICAgIHhtaXRfZG9uZToKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKgpAQCAtMTkzMSwzMyArMjUwMywzNSBAQAogICoJCWFkYXB0ZXIJCQktIFBvaW50ZXIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlCiAgKiAgICAgIHNrYiAgICAgICAgICAgICAtIFRoZSBwYWNrZXQgdG8gYmUgc2VudAogICoKLSAqIFJldHVybiAtCi0gKiAJCVNUQVRVUyBvZiBzZW5kCisgKiBSZXR1cm4gLSBTVEFUVVMgb2Ygc2VuZAogICovCiBzdGF0aWMgaW50IHN4Z190cmFuc21pdF9wYWNrZXQoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgU0NBVFRFUl9HQVRIRVJfTElTVCAqcFNnbDsKLQlzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSICpTeGdTZ2w7Ci0Jdm9pZCAqU2dsQnVmZmVyOwotCXUzMiBTZ2xCdWZmZXJMZW5ndGg7CisJc3RydWN0IHN4Z194NjRfc2dsICAgICAgICAgKnBTZ2w7CisJc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAgKlN4Z1NnbDsKKwl1bnNpZ25lZCBsb25nIHNnbF9mbGFnczsKKwkvKiB2b2lkICpTZ2xCdWZmZXI7ICovCisJLyogdTMyIFNnbEJ1ZmZlckxlbmd0aDsgKi8KIAotCS8qIFRoZSB2YXN0IG1ham9yaXR5IG9mIHdvcmsgaXMgZG9uZSBpbiB0aGUgc2hhcmVkICovCi0JLyogc3hnX2R1bWJfc2dsIHJvdXRpbmUuICovCisJLyoKKwkgKiBUaGUgdmFzdCBtYWpvcml0eSBvZiB3b3JrIGlzIGRvbmUgaW4gdGhlIHNoYXJlZAorCSAqIHN4Z19kdW1iX3NnbCByb3V0aW5lLgorCSAqLwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkR1bWJTZW5kIiwKIAkJICBhZGFwdGVyLCBza2IsIDAsIDApOwogCiAJLyogQWxsb2NhdGUgYSBTR0wgYnVmZmVyICovCi0JU1hHX0dFVF9TR0xfQlVGRkVSKGFkYXB0ZXIsIFN4Z1NnbCk7CisJU1hHX0dFVF9TR0xfQlVGRkVSKGFkYXB0ZXIsIFN4Z1NnbCwgMCk7CiAJaWYgKCFTeGdTZ2wpIHsKIAkJYWRhcHRlci0+U3RhdHMuTm9TZ2xCdWYrKzsKLQkJYWRhcHRlci0+U3RhdHMuWG10RXJyb3JzKys7CisJCWFkYXB0ZXItPnN0YXRzLnR4X2Vycm9ycysrOwogCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJTbmRQa3RGMSIsCiAJCQkgIGFkYXB0ZXIsIHNrYiwgMCwgMCk7CiAJCXJldHVybiAoU1RBVFVTX1JFU09VUkNFUyk7CiAJfQogCUFTU0VSVChTeGdTZ2wtPmFkYXB0ZXIgPT0gYWRhcHRlcik7Ci0JU2dsQnVmZmVyID0gU1hHX1NHTF9CVUZGRVIoU3hnU2dsKTsKLQlTZ2xCdWZmZXJMZW5ndGggPSBTWEdfU0dMX0JVRl9TSVpFOworCS8qU2dsQnVmZmVyID0gU1hHX1NHTF9CVUZGRVIoU3hnU2dsKTsKKwlTZ2xCdWZmZXJMZW5ndGggPSBTWEdfU0dMX0JVRl9TSVpFOyAqLwogCVN4Z1NnbC0+VmxhblRhZy5WbGFuVGNpID0gMDsKIAlTeGdTZ2wtPlZsYW5UYWcuVmxhblRwaWQgPSAwOwogCVN4Z1NnbC0+VHlwZSA9IFNYR19TR0xfRFVNQjsKQEAgLTE5NjUsOSArMjUzOSw3IEBACiAJcFNnbCA9IE5VTEw7CiAKIAkvKiBDYWxsIHRoZSBjb21tb24gc3hnX2R1bWJfc2dsIHJvdXRpbmUgdG8gY29tcGxldGUgdGhlIHNlbmQuICovCi0Jc3hnX2R1bWJfc2dsKHBTZ2wsIFN4Z1NnbCk7Ci0JLyogUmV0dXJuIHN1Y2Nlc3MgICBzeGdfZHVtYl9zZ2wgKG9yIHNvbWV0aGluZyBsYXRlcikgd2lsbCBjb21wbGV0ZSBpdC4gKi8KLQlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKKwlyZXR1cm4gKHN4Z19kdW1iX3NnbChwU2dsLCBTeGdTZ2wpKTsKIH0KIAogLyoKQEAgLTE5NzUsMjQgKzI1NDcsMjcgQEAKICAqCiAgKiBBcmd1bWVudHM6CiAgKgkJcFNnbCAgICAgLQotICoJCVN4Z1NnbCAgIC0gU1hHX1NDQVRURVJfR0FUSEVSCisgKgkJU3hnU2dsICAgLSBzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyCiAgKgogICogUmV0dXJuIFZhbHVlOgotICogCU5vbmUuCisgKiAJU3RhdHVzIG9mIHNlbmQgb3BlcmF0aW9uLgogICovCi1zdGF0aWMgdm9pZCBzeGdfZHVtYl9zZ2woc3RydWN0IFNDQVRURVJfR0FUSEVSX0xJU1QgKnBTZ2wsIHN0cnVjdCBTWEdfU0NBVFRFUl9HQVRIRVIgKlN4Z1NnbCkKK3N0YXRpYyBpbnQgc3hnX2R1bWJfc2dsKHN0cnVjdCBzeGdfeDY0X3NnbCAqcFNnbCwKKwkJCQlzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyICpTeGdTZ2wpCiB7CiAJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IFN4Z1NnbC0+YWRhcHRlcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gU3hnU2dsLT5EdW1iUGFja2V0OwogCS8qIEZvciBub3csIGFsbCBkdW1iLW5pYyBzZW5kcyBnbyBvbiBSU1MgcXVldWUgemVybyAqLwotCXN0cnVjdCBTWEdfWE1UX1JJTkcgKlhtdFJpbmcgPSAmYWRhcHRlci0+WG10UmluZ3NbMF07Ci0Jc3RydWN0IFNYR19SSU5HX0lORk8gKlhtdFJpbmdJbmZvID0gJmFkYXB0ZXItPlhtdFJpbmdaZXJvSW5mbzsKLQlzdHJ1Y3QgU1hHX0NNRCAqWG10Q21kID0gTlVMTDsKLS8qICAgICAgdTMyICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4ID0gMDsgKi8KKwlzdHJ1Y3Qgc3hnX3htdF9yaW5nICpYbXRSaW5nID0gJmFkYXB0ZXItPlhtdFJpbmdzWzBdOworCXN0cnVjdCBzeGdfcmluZ19pbmZvICpYbXRSaW5nSW5mbyA9ICZhZGFwdGVyLT5YbXRSaW5nWmVyb0luZm87CisJc3RydWN0IHN4Z19jbWQgKlhtdENtZCA9IE5VTEw7CisJLyogdTMyIEluZGV4ID0gMDsgKi8KIAl1MzIgRGF0YUxlbmd0aCA9IHNrYi0+bGVuOwotLyogIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmTGVuOyAqLwotLyogICAgICB1MzIgICAgICAgICAgICAgICAgICAgICAgICAgU2dsT2Zmc2V0OyAqLworCS8qIHVuc2lnbmVkIGludCBCdWZMZW47ICovCisJLyogdTMyIFNnbE9mZnNldDsgKi8KIAl1NjQgcGh5c19hZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBxdWV1ZV9pZD0wOwogCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRHVtYlNnbCIsCiAJCSAgcFNnbCwgU3hnU2dsLCAwLCAwKTsKQEAgLTIwMDEsMjUgKzI1NzYsNjcgQEAKIAlTeGdTZ2wtPnBTZ2wgPSBwU2dsOwogCiAJLyogU2FuaXR5IGNoZWNrIHRoYXQgb3VyIFNHTCBmb3JtYXQgaXMgYXMgd2UgZXhwZWN0LiAqLwotCUFTU0VSVChzaXplb2YoU1hHX1g2NF9TR0UpID09IHNpemVvZihTQ0FUVEVSX0dBVEhFUl9FTEVNRU5UKSk7CisJQVNTRVJUKHNpemVvZihzdHJ1Y3Qgc3hnX3g2NF9zZ2UpID09IHNpemVvZihzdHJ1Y3Qgc3hnX3g2NF9zZ2UpKTsKIAkvKiBTaG91bGRuJ3QgYmUgYSB2bGFuIHRhZyBvbiB0aGlzIGZyYW1lICovCiAJQVNTRVJUKFN4Z1NnbC0+VmxhblRhZy5WbGFuVGNpID09IDApOwogCUFTU0VSVChTeGdTZ2wtPlZsYW5UYWcuVmxhblRwaWQgPT0gMCk7CiAKLQkvKiBGcm9tIGhlcmUgYmVsb3cgd2Ugd29yayB3aXRoIHRoZSBTR0wgcGxhY2VkIGluIG91ciAqLwotCS8qIGJ1ZmZlci4gKi8KKwkvKgorCSAqIEZyb20gaGVyZSBiZWxvdyB3ZSB3b3JrIHdpdGggdGhlIFNHTCBwbGFjZWQgaW4gb3VyCisJICogYnVmZmVyLgorCSAqLwogCiAJU3hnU2dsLT5TZ2wuTnVtYmVyT2ZFbGVtZW50cyA9IDE7CisJLyoKKwkgKiBTZXQgdWNvZGUgUXVldWUgSUQgYmFzZWQgb24gYm90dG9tIGJpdHMgb2YgZGVzdGluYXRpb24gVENQIHBvcnQuCisJICogVGhpcyBRdWV1ZSBJRCBzcGxpdHMgc2xvd3BhdGgvZHVtYi1uaWMgcGFja2V0IHByb2Nlc3NpbmcgYWNyb3NzCisJICogbXVsdGlwbGUgdGhyZWFkcyBvbiB0aGUgY2FyZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLiAgSXQgaXMgc3BsaXQKKwkgKiB1c2luZyB0aGUgVENQIHBvcnQgdG8gYXZvaWQgb3V0LW9mLW9yZGVyIHBhY2tldHMgdGhhdCBjYW4gcmVzdWx0CisgICAgICAgICAqIGZyb20gbXVsdGl0aHJlYWRlZCBwcm9jZXNzaW5nLiAgV2UgdXNlIHRoZSBkZXN0aW5hdGlvbiBwb3J0IGJlY2F1c2UKKyAgICAgICAgICogd2UgZXhwZWN0IHRvIGJlIHJ1biBvbiBhIHNlcnZlciwgc28gaW4gbmVhcmx5IGFsbCBjYXNlcyB0aGUgbG9jYWwKKyAgICAgICAgICogcG9ydCBpcyBsaWtlbHkgdG8gYmUgY29uc3RhbnQgKHdlbGwta25vd24gc2VydmVyIHBvcnQpIGFuZCB0aGUKKyAgICAgICAgICogcmVtb3RlIHBvcnQgaXMgbGlrZWx5IHRvIGJlIHJhbmRvbS4gIFRoZSBleGNlcHRpb24gdG8gdGhpcyBpcyBpU0NTSSwKKyAgICAgICAgICogaW4gd2hpY2ggY2FzZSB3ZSB1c2UgdGhlIHNwb3J0IGluc3RlYWQuICBOb3RlCisgICAgICAgICAqIHRoYXQgb3JpZ2luYWwgYXR0ZW1wdCBhdCBYT1InaW5nIHNvdXJjZSBhbmQgZGVzdCBwb3J0IHJlc3VsdGVkIGluCisgICAgICAgICAqIHBvb3IgYmFsYW5jZSBvbiBOVFRUQ1AvaW9tZXRlciBhcHBsaWNhdGlvbnMgc2luY2UgdGhleSB0ZW5kIHRvCisgICAgICAgICAqIGxpbmUgdXAgKGV2ZW4tZXZlbiwgb2RkLW9kZC4uKS4KKyAgICAgICAgICovCisKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBoZHIgKmlwOworCisgICAgICAgICAgICAgICAgaXAgPSBpcF9oZHIoc2tiKTsKKwkJaWYgKChpcC0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApJiYoRGF0YUxlbmd0aCA+PSBzaXplb2YoCisJCQkJCQkJc3RydWN0IHRjcGhkcikpKXsKKwkJCXF1ZXVlX2lkID0gKChudG9ocyh0Y3BfaGRyKHNrYiktPmRlc3QpID09IElTQ1NJX1BPUlQpID8KKwkJCQkJKG50b2hzICh0Y3BfaGRyKHNrYiktPnNvdXJjZSkgJgorCQkJCQkJU1hHX0xBUkdFX1NFTkRfUVVFVUVfTUFTSyk6CisJCQkJCQkobnRvaHModGNwX2hkcihza2IpLT5kZXN0KSAmCisJCQkJCQlTWEdfTEFSR0VfU0VORF9RVUVVRV9NQVNLKSk7CisJCX0KKwl9IGVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKKwkJaWYgKChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IElQUFJPVE9fVENQKSAmJiAoRGF0YUxlbmd0aCA+PQorCQkJCQkJIHNpemVvZihzdHJ1Y3QgdGNwaGRyKSkgKSB7CisJCQlxdWV1ZV9pZCA9ICgobnRvaHModGNwX2hkcihza2IpLT5kZXN0KSA9PSBJU0NTSV9QT1JUKSA/CisJCQkJCShudG9ocyAodGNwX2hkcihza2IpLT5zb3VyY2UpICYKKwkJCQkJU1hHX0xBUkdFX1NFTkRfUVVFVUVfTUFTSyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG50b2hzKHRjcF9oZHIoc2tiKS0+ZGVzdCkgJgorCQkJCQlTWEdfTEFSR0VfU0VORF9RVUVVRV9NQVNLKSk7CisJCX0KKwl9CiAKIAkvKiBHcmFiIHRoZSBzcGlubG9jayBhbmQgYWNxdWlyZSBhIGNvbW1hbmQgKi8KLQlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKIAlTWEdfR0VUX0NNRChYbXRSaW5nLCBYbXRSaW5nSW5mbywgWG10Q21kLCBTeGdTZ2wpOwogCWlmIChYbXRDbWQgPT0gTlVMTCkgewotCQkvKiBDYWxsIHN4Z19jb21wbGV0ZV9zbG93X3NlbmQgdG8gc2VlIGlmIHdlIGNhbiAqLwotCQkvKiBmcmVlIHVwIGFueSBYbXRSaW5nWmVybyBlbnRyaWVzIGFuZCB0aGVuIHRyeSBhZ2FpbiAqLwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+WG10WmVyb0xvY2spOworCQkvKgorCQkgKiBDYWxsIHN4Z19jb21wbGV0ZV9zbG93X3NlbmQgdG8gc2VlIGlmIHdlIGNhbgorCQkgKiBmcmVlIHVwIGFueSBYbXRSaW5nWmVybyBlbnRyaWVzIGFuZCB0aGVuIHRyeSBhZ2FpbgorCQkgKi8KKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5YbXRaZXJvTG9jaywgZmxhZ3MpOwogCQlzeGdfY29tcGxldGVfc2xvd19zZW5kKGFkYXB0ZXIpOwotCQlzcGluX2xvY2soJmFkYXB0ZXItPlhtdFplcm9Mb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CiAJCVNYR19HRVRfQ01EKFhtdFJpbmcsIFhtdFJpbmdJbmZvLCBYbXRDbWQsIFN4Z1NnbCk7CiAJCWlmIChYbXRDbWQgPT0gTlVMTCkgewogCQkJYWRhcHRlci0+U3RhdHMuWG10WmVyb0Z1bGwrKzsKQEAgLTIwMjksOCArMjY0Niw4IEBACiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiRHVtYkNtZCIsCiAJCSAgWG10Q21kLCBYbXRSaW5nSW5mby0+SGVhZCwgWG10UmluZ0luZm8tPlRhaWwsIDApOwogCS8qIFVwZGF0ZSBzdGF0cyAqLwotCWFkYXB0ZXItPlN0YXRzLkR1bWJYbXRQa3RzKys7Ci0JYWRhcHRlci0+U3RhdHMuRHVtYlhtdEJ5dGVzICs9IERhdGFMZW5ndGg7CisJYWRhcHRlci0+c3RhdHMudHhfcGFja2V0cysrOworCWFkYXB0ZXItPnN0YXRzLnR4X2J5dGVzICs9IERhdGFMZW5ndGg7CiAjaWYgWFhYVE9ETwkJCS8qIFN0YXRzIHN0dWZmICovCiAJaWYgKFNYR19NVUxUSUNBU1RfUEFDS0VUKEV0aGVySGRyKSkgewogCQlpZiAoU1hHX0JST0FEQ0FTVF9QQUNLRVQoRXRoZXJIZHIpKSB7CkBAIC0yMDQ1LDcwICsyNjYyLDkyIEBACiAJCWFkYXB0ZXItPlN0YXRzLkR1bWJYbXRVY2FzdEJ5dGVzICs9IERhdGFMZW5ndGg7CiAJfQogI2VuZGlmCi0JLyogRmlsbCBpbiB0aGUgY29tbWFuZCAqLwotCS8qIENvcHkgb3V0IHRoZSBmaXJzdCBTR0UgdG8gdGhlIGNvbW1hbmQgYW5kIGFkanVzdCBmb3Igb2Zmc2V0ICovCi0JcGh5c19hZGRyID0KLQkgICAgcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCS8qCisJICogRmlsbCBpbiB0aGUgY29tbWFuZAorCSAqIENvcHkgb3V0IHRoZSBmaXJzdCBTR0UgdG8gdGhlIGNvbW1hbmQgYW5kIGFkanVzdCBmb3Igb2Zmc2V0CisJICovCisJcGh5c19hZGRyID0gcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGNpZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJICAgUENJX0RNQV9UT0RFVklDRSk7Ci0JWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0gU1hHX0dFVF9BRERSX0hJR0gocGh5c19hZGRyKTsKLQlYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUFkZHJlc3MgPSBYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUFkZHJlc3MgPDwgMzI7Ci0JWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0KLQkgICAgWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzIHwgU1hHX0dFVF9BRERSX0xPVyhwaHlzX2FkZHIpOwotLyogICAgICBYbXRDbWQtPkJ1ZmZlci5GaXJzdFNnZUFkZHJlc3MgPSBTeGdTZ2wtPlNnbC5FbGVtZW50c1tJbmRleF0uQWRkcmVzczsgKi8KLS8qICAgICAgWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzLkxvd1BhcnQgKz0gTWRsT2Zmc2V0OyAqLworCisJLyoKKwkgKiBTQUhBUkEgU0dMIFdPUktBUk9VTkQKKwkgKiBTZWUgaWYgdGhlIFNHTCBzdHJhZGRsZXMgYSA2NGsgYm91bmRhcnkuICBJZiBzbywgc2tpcCB0bworCSAqIHRoZSBzdGFydCBvZiB0aGUgbmV4dCA2NGsgYm91bmRhcnkgYW5kIGNvbnRpbnVlCisgCSAqLworCisJaWYgKChhZGFwdGVyLT5hc2ljdHlwZSA9PSBTQUhBUkFfUkVWX0EpICYmCisJCShTWEdfSU5WQUxJRF9TR0wocGh5c19hZGRyLHNrYi0+ZGF0YV9sZW4pKSkKKwl7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPlhtdFplcm9Mb2NrLCBmbGFncyk7CisJCS8qIFNpbGVudGx5IGRyb3AgdGhpcyBwYWNrZXQgKi8KKwkJcHJpbnRrKEtFUk5fRU1FUkciRHJvcHBlZCBhIHBhY2tldCBmb3IgNjRrIGJvdW5kYXJ5IHByb2JsZW1cbiIpOworCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CisJfQorCW1lbXNldChYbXRDbWQsICdcMCcsIHNpemVvZigqWG10Q21kKSk7CisJWG10Q21kLT5CdWZmZXIuRmlyc3RTZ2VBZGRyZXNzID0gcGh5c19hZGRyOwogCVhtdENtZC0+QnVmZmVyLkZpcnN0U2dlTGVuZ3RoID0gRGF0YUxlbmd0aDsKLQkvKiBTZXQgYSBwb2ludGVyIHRvIHRoZSByZW1haW5pbmcgU0dMIGVudHJpZXMgKi8KLS8qICAgICAgWG10Q21kLT5TZ2wgPSBTeGdTZ2wtPlBoeXNpY2FsQWRkcmVzczsgKi8KLQkvKiBBZHZhbmNlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBTeGdTZ2wgc3RydWN0dXJlIHRvICovCi0JLyogdGhlIHNlY29uZCBTR0UgKi8KLS8qICAgICAgU2dsT2Zmc2V0ID0gKHUzMikoKHUzMiAqKSgmU3hnU2dsLT5TZ2wuRWxlbWVudHNbSW5kZXgrMV0pIC0gKi8KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1MzIgKilTeGdTZ2wpOyAqLwotLyogICAgICBYbXRDbWQtPlNnbC5Mb3dQYXJ0ICs9IFNnbE9mZnNldDsgKi8KIAlYbXRDbWQtPkJ1ZmZlci5TZ2VPZmZzZXQgPSAwOwotCS8qIE5vdGUgLSBUb3RhbExlbmd0aCBtaWdodCBiZSBvdmVyd3JpdHRlbiB3aXRoIE1TUyBiZWxvdy4uICovCiAJWG10Q21kLT5CdWZmZXIuVG90YWxMZW5ndGggPSBEYXRhTGVuZ3RoOwotCVhtdENtZC0+U2dFbnRyaWVzID0gMTsJLyoodXNob3J0KShTeGdTZ2wtPlNnbC5OdW1iZXJPZkVsZW1lbnRzIC0gSW5kZXgpOyAqLworCVhtdENtZC0+U2dFbnRyaWVzID0gMTsKIAlYbXRDbWQtPkZsYWdzID0gMDsKLQkvKiAqLwotCS8qIEFkdmFuY2UgdHJhbnNtaXQgY21kIGRlc2NyaXB0ZXIgYnkgMS4gKi8KLQkvKiBOT1RFIC0gU2VlIGNvbW1lbnRzIGluIFN4Z1RjcE91dHB1dCB3aGVyZSB3ZSB3cml0ZSAqLwotCS8qIHRvIHRoZSBYbXRDbWQgcmVnaXN0ZXIgcmVnYXJkaW5nIENQVSBJRCB2YWx1ZXMgYW5kL29yICovCi0JLyogbXVsdGlwbGUgY29tbWFuZHMuICovCi0JLyogKi8KLQkvKiAqLwotCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uWG10Q21kLCAxLCBUUlVFKTsKLQkvKiAqLwotCS8qICovCisKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHNldCB0aGUgQ2hlY2t1bSBpbiBJUCAgaGVhZGVyIHRvIDAuIFRoaXMgaXMKKwkJICogcmVxdWlyZWQgYnkgaGFyZHdhcmUuCisJCSAqLworCQlpcF9oZHIoc2tiKS0+Y2hlY2sgPSAweDA7CisJCVhtdENtZC0+Q3N1bUZsYWdzLkZsYWdzIHw9IFNYR19TTE9XQ01EX0NTVU1fSVA7CisJCVhtdENtZC0+Q3N1bUZsYWdzLkZsYWdzIHw9IFNYR19TTE9XQ01EX0NTVU1fVENQOworCQkvKiBEb250IGtub3cgaWYgbGVuZ3RoIHdpbGwgcmVxdWlyZSBhIGNoYW5nZSBpbiBjYXNlIG9mIFZMQU4gKi8KKwkJWG10Q21kLT5Dc3VtRmxhZ3MuTWFjTGVuID0gRVRIX0hMRU47CisJCVhtdENtZC0+Q3N1bUZsYWdzLklwSGwgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikgPj4KKwkJCQkJCQlTWEdfTldfSERSX0xFTl9TSElGVDsKKwl9CisJLyoKKwkgKiBBZHZhbmNlIHRyYW5zbWl0IGNtZCBkZXNjcmlwdGVyIGJ5IDEuCisJICogTk9URSAtIFNlZSBjb21tZW50cyBpbiBTeGdUY3BPdXRwdXQgd2hlcmUgd2Ugd3JpdGUKKwkgKiB0byB0aGUgWG10Q21kIHJlZ2lzdGVyIHJlZ2FyZGluZyBDUFUgSUQgdmFsdWVzIGFuZC9vcgorCSAqIG11bHRpcGxlIGNvbW1hbmRzLgorCSAqIFRvcCAxNiBiaXRzIHNwZWNpZnkgcXVldWVfaWQuICBTZWUgY29tbWVudHMgYWJvdXQgcXVldWVfaWQgYWJvdmUKKwkgKi8KKwkvKiBGb3VyIHF1ZXVlcyBhdCB0aGUgbW9tZW50ICovCisJQVNTRVJUKChxdWV1ZV9pZCAmIH5TWEdfTEFSR0VfU0VORF9RVUVVRV9NQVNLKSA9PSAwKTsKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLlhtdENtZCwgKChxdWV1ZV9pZCA8PCAxNikgfCAxKSwgVFJVRSk7CiAJYWRhcHRlci0+U3RhdHMuWG10UUxlbisrOwkvKiBTdGF0cyB3aXRoaW4gbG9jayAqLwotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYRHVtU2dsMiIsCiAJCSAgWG10Q21kLCBwU2dsLCBTeGdTZ2wsIDApOwotCXJldHVybjsKKwlyZXR1cm4gIFNUQVRVU19TVUNDRVNTOwogCiAgICAgICBhYm9ydGNtZDoKLQkvKiBOT1RFIC0gT25seSBqdW1wIHRvIHRoaXMgbGFiZWwgQUZURVIgZ3JhYmJpbmcgdGhlICovCi0JLyogWG10WmVyb0xvY2ssIGFuZCBETyBOT1QgRFJPUCBJVCBiZXR3ZWVuIHRoZSAqLwotCS8qIGNvbW1hbmQgYWxsb2NhdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBhYm9ydC4gKi8KKwkvKgorCSAqIE5PVEUgLSBPbmx5IGp1bXAgdG8gdGhpcyBsYWJlbCBBRlRFUiBncmFiYmluZyB0aGUKKwkgKiBYbXRaZXJvTG9jaywgYW5kIERPIE5PVCBEUk9QIElUIGJldHdlZW4gdGhlCisJICogY29tbWFuZCBhbGxvY2F0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGFib3J0LgorCSAqLwogCWlmIChYbXRDbWQpIHsKIAkJU1hHX0FCT1JUX0NNRChYbXRSaW5nSW5mbyk7CiAJfQotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5YbXRaZXJvTG9jayk7Ci0KLS8qIGZhaWxzZ2w6ICovCi0JLyogSnVtcCB0byB0aGlzIGxhYmVsIGlmIGZhaWx1cmUgb2NjdXJzIGJlZm9yZSB0aGUgKi8KLQkvKiBYbXRaZXJvTG9jayBpcyBncmFiYmVkICovCi0JYWRhcHRlci0+U3RhdHMuWG10RXJyb3JzKys7Ci0JU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX0lNUE9SVEFOVCwgIkR1bVNHRmFsIiwKLQkJICBwU2dsLCBTeGdTZ2wsIFhtdFJpbmdJbmZvLT5IZWFkLCBYbXRSaW5nSW5mby0+VGFpbCk7Ci0KLQlTWEdfQ09NUExFVEVfRFVNQl9TRU5EKGFkYXB0ZXIsIFN4Z1NnbC0+RHVtYlBhY2tldCk7CS8qIFN4Z1NnbC0+RHVtYlBhY2tldCBpcyB0aGUgc2tiICovCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIExpbmsgbWFuYWdlbWVudCBmdW5jdGlvbnMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+WG10WmVyb0xvY2ssIGZsYWdzKTsKIAogLyoKKyAqIGZhaWxzZ2w6CisgKiAJSnVtcCB0byB0aGlzIGxhYmVsIGlmIGZhaWx1cmUgb2NjdXJzIGJlZm9yZSB0aGUKKyAqCVhtdFplcm9Mb2NrIGlzIGdyYWJiZWQKKyAqLworCWFkYXB0ZXItPnN0YXRzLnR4X2Vycm9ycysrOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJEdW1TR0ZhbCIsCisJCSAgcFNnbCwgU3hnU2dsLCBYbXRSaW5nSW5mby0+SGVhZCwgWG10UmluZ0luZm8tPlRhaWwpOworCS8qIFN4Z1NnbC0+RHVtYlBhY2tldCBpcyB0aGUgc2tiICovCisJLy8gU1hHX0NPTVBMRVRFX0RVTUJfU0VORChhZGFwdGVyLCBTeGdTZ2wtPkR1bWJQYWNrZXQpOworCisgCXJldHVybiBTVEFUVVNfRkFJTFVSRTsKK30KKworLyoKKyAqIExpbmsgbWFuYWdlbWVudCBmdW5jdGlvbnMKKyAqCiAgKiBzeGdfaW5pdGlhbGl6ZV9saW5rIC0gSW5pdGlhbGl6ZSB0aGUgbGluayBzdHVmZgogICoKICAqIEFyZ3VtZW50cyAtCkBAIC0yMTE5LDEwICsyNzU4LDExIEBACiAgKi8KIHN0YXRpYyBpbnQgc3hnX2luaXRpYWxpemVfbGluayhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewotCXN0cnVjdCBTWEdfSFdfUkVHUyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXN0cnVjdCBzeGdfaHdfcmVncyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOwogCXUzMiBWYWx1ZTsKIAl1MzIgQ29uZmlnRGF0YTsKIAl1MzIgTWF4RnJhbWU7CisJdTMyIEF4Z01hY1JlZzE7CiAJaW50IHN0YXR1czsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkluaXRMaW5rIiwKQEAgLTIxNDAsMTUgKzI3ODAsMTcgQEAKIAkvKiBSZXNldCBhbGwgTUFDIG1vZHVsZXMgKi8KIAlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcwLCBBWEdNQUNfQ0ZHMF9TVUJfUkVTRVQsIFRSVUUpOwogCi0JLyogTGluayBhZGRyZXNzIDAgKi8KLQkvKiBYWFhUT0RPIC0gVGhpcyBhc3N1bWVzIHRoZSBNQUMgYWRkcmVzcyAoMGE6MGI6MGM6MGQ6MGU6MGYpICovCi0JLyogaXMgc3RvcmVkIHdpdGggdGhlIGZpcnN0IG5pYmJsZSAoMGEpIGluIHRoZSBieXRlIDAgKi8KLQkvKiBvZiB0aGUgTWFjIGFkZHJlc3MuICBQb3NzaWJseSByZXZlcnNlPyAqLwotCVZhbHVlID0gKih1MzIgKikgYWRhcHRlci0+TWFjQWRkcjsKKwkvKgorCSAqIExpbmsgYWRkcmVzcyAwCisJICogWFhYVE9ETyAtIFRoaXMgYXNzdW1lcyB0aGUgTUFDIGFkZHJlc3MgKDBhOjBiOjBjOjBkOjBlOjBmKQorCSAqIGlzIHN0b3JlZCB3aXRoIHRoZSBmaXJzdCBuaWJibGUgKDBhKSBpbiB0aGUgYnl0ZSAwCisJICogb2YgdGhlIE1hYyBhZGRyZXNzLiAgUG9zc2libHkgcmV2ZXJzZT8KKwkgKi8KKwlWYWx1ZSA9ICoodTMyICopIGFkYXB0ZXItPm1hY2FkZHI7CiAJV1JJVEVfUkVHKEh3UmVncy0+TGlua0FkZHJlc3MwTG93LCBWYWx1ZSwgVFJVRSk7CiAJLyogYWxzbyB3cml0ZSB0aGUgTUFDIGFkZHJlc3MgdG8gdGhlIE1BQy4gIEVuZGlhbiBpcyByZXZlcnNlZC4gKi8KIAlXUklURV9SRUcoSHdSZWdzLT5NYWNBZGRyZXNzTG93LCBudG9obChWYWx1ZSksIFRSVUUpOwotCVZhbHVlID0gKCoodTE2ICopICYgYWRhcHRlci0+TWFjQWRkcls0XSAmIDB4MDAwMEZGRkYpOworCVZhbHVlID0gKCoodTE2ICopICYgYWRhcHRlci0+bWFjYWRkcls0XSAmIDB4MDAwMEZGRkYpOwogCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtBZGRyZXNzMEhpZ2gsIFZhbHVlIHwgTElOS19BRERSRVNTX0VOQUJMRSwgVFJVRSk7CiAJLyogZW5kaWFuIHN3YXAgZm9yIHRoZSBNQUMgKHB1dCBoaWdoIGJ5dGVzIGluIGJpdHMgWzMxOjE2XSwgc3dhcHBlZCkgKi8KIAlWYWx1ZSA9IG50b2hsKFZhbHVlKTsKQEAgLTIxNjcsNDcgKzI4MDksNzYgQEAKIAlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcwLCAwLCBUUlVFKTsKIAogCS8qIENvbmZpZ3VyZSBNQUMgKi8KLQlXUklURV9SRUcoSHdSZWdzLT5NYWNDb25maWcxLCAoQVhHTUFDX0NGRzFfWE1UX1BBVVNFIHwJLyogQWxsb3cgc2VuZGluZyBvZiBwYXVzZSAqLwotCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9YTVRfRU4gfAkvKiBFbmFibGUgWE1UICovCi0JCQkJICAgICAgIEFYR01BQ19DRkcxX1JDVl9QQVVTRSB8CS8qIEVuYWJsZSBkZXRlY3Rpb24gb2YgcGF1c2UgKi8KLQkJCQkgICAgICAgQVhHTUFDX0NGRzFfUkNWX0VOIHwJLyogRW5hYmxlIHJlY2VpdmUgKi8KLQkJCQkgICAgICAgQVhHTUFDX0NGRzFfU0hPUlRfQVNTRVJUIHwJLyogc2hvcnQgZnJhbWUgZGV0ZWN0aW9uICovCi0JCQkJICAgICAgIEFYR01BQ19DRkcxX0NIRUNLX0xFTiB8CS8qIFZlcmlmeSBmcmFtZSBsZW5ndGggKi8KLQkJCQkgICAgICAgQVhHTUFDX0NGRzFfR0VOX0ZDUyB8CS8qIEdlbmVyYXRlIEZDUyAqLwotCQkJCSAgICAgICBBWEdNQUNfQ0ZHMV9QQURfNjQpLAkvKiBQYWQgZnJhbWVzIHRvIDY0IGJ5dGVzICovCi0JCSAgVFJVRSk7CisJQXhnTWFjUmVnMSA9ICggIC8qIEVuYWJsZSBYTVQgKi8KKwkJCUFYR01BQ19DRkcxX1hNVF9FTiB8CisJCQkvKiBFbmFibGUgcmVjZWl2ZSAqLworCQkJQVhHTUFDX0NGRzFfUkNWX0VOIHwKKwkJCS8qIHNob3J0IGZyYW1lIGRldGVjdGlvbiAqLworCQkJQVhHTUFDX0NGRzFfU0hPUlRfQVNTRVJUIHwKKwkJCS8qIFZlcmlmeSBmcmFtZSBsZW5ndGggKi8KKwkJCUFYR01BQ19DRkcxX0NIRUNLX0xFTiB8CisJCQkvKiBHZW5lcmF0ZSBGQ1MgKi8KKwkJCUFYR01BQ19DRkcxX0dFTl9GQ1MgfAorCQkJLyogUGFkIGZyYW1lcyB0byA2NCBieXRlcyAqLworCQkJQVhHTUFDX0NGRzFfUEFEXzY0KTsKKworIAlpZiAoYWRhcHRlci0+WG10RmNFbmFibGVkKSB7CisJCUF4Z01hY1JlZzEgfD0gIEFYR01BQ19DRkcxX1hNVF9QQVVTRTsgIC8qIEFsbG93IHNlbmRpbmcgb2YgcGF1c2UgKi8KKyAJfQorIAlpZiAoYWRhcHRlci0+UmN2RmNFbmFibGVkKSB7CisJCUF4Z01hY1JlZzEgfD0gIEFYR01BQ19DRkcxX1JDVl9QQVVTRTsgIC8qIEVuYWJsZSBkZXRlY3Rpb24gb2YgcGF1c2UgKi8KKyAJfQorCisgCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0NvbmZpZzEsIEF4Z01hY1JlZzEsIFRSVUUpOwogCiAJLyogU2V0IEFYR01BQyBtYXggZnJhbWUgbGVuZ3RoIGlmIGp1bWJvLiAgTm90IG5lZWRlZCBmb3Igc3RhbmRhcmQgTVRVICovCiAJaWYgKGFkYXB0ZXItPkp1bWJvRW5hYmxlZCkgewogCQlXUklURV9SRUcoSHdSZWdzLT5NYWNNYXhGcmFtZUxlbiwgQVhHTUFDX01BWEZSQU1FX0pVTUJPLCBUUlVFKTsKIAl9Ci0JLyogQU1JSU0gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAtICovCi0JLyogVGhlIHZhbHVlIHBsYWNlZCBpbiB0aGUgQVhHTUFDX0FNSUlNX0NGR19IQUxGX0NMT0NLIHBvcnRpb24gKi8KLQkvKiAoYm90dG9tIGJpdHMpIG9mIHRoaXMgcmVnaXN0ZXIgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlICovCi0JLyogTURDIGZyZXF1ZW5jeSBhcyBzcGVjaWZpZWQgaW4gdGhlIEEtWEdNQUMgRGVzaWduIERvY3VtZW50LiAqLwotCS8qIFRoaXMgdmFsdWUgbXVzdCBub3QgYmUgemVyby4gIFRoZSBmb2xsb3dpbmcgdmFsdWUgKDYyIG9yIDB4M0UpICovCi0JLyogaXMgYmFzZWQgb24gb3VyIE1BQyB0cmFuc21pdCBjbG9jayBmcmVxdWVuY3kgKE1UQ0xLKSBvZiAzMTIuNSBNSHouICovCi0JLyogR2l2ZW4gYSBtYXhpbXVtIE1ESU8gY2xvY2sgZnJlcXVlbmN5IG9mIDIuNSBNSHogKHNlZSB0aGUgUEhZIHNwZWMpLCAqLwotCS8qIHdlIGdldDogIDMxMi41LygyKihYKzEpKSA8IDIuNSAgPT0+IFggPSA2Mi4gKi8KLQkvKiBUaGlzIHZhbHVlIGhhcHBlbnMgdG8gYmUgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcmVnaXN0ZXIsICovCi0JLyogc28gd2UgcmVhbGx5IGRvbid0IGhhdmUgdG8gZG8gdGhpcy4gKi8KLQlXUklURV9SRUcoSHdSZWdzLT5NYWNBbWlpbUNvbmZpZywgMHgwMDAwMDAzRSwgVFJVRSk7CisJLyoKKwkgKiBBTUlJTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0KKwkgKiBUaGUgdmFsdWUgcGxhY2VkIGluIHRoZSBBWEdNQUNfQU1JSU1fQ0ZHX0hBTEZfQ0xPQ0sgcG9ydGlvbgorCSAqIChib3R0b20gYml0cykgb2YgdGhpcyByZWdpc3RlciBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgTURDIGZyZXF1ZW5jeQorCSAqIGFzIHNwZWNpZmllZCBpbiB0aGUgQS1YR01BQyBEZXNpZ24gRG9jdW1lbnQuIFRoaXMgdmFsdWUgbXVzdCBub3QgYmUKKwkgKiB6ZXJvLiAgVGhlIGZvbGxvd2luZyB2YWx1ZSAoNjIgb3IgMHgzRSkgaXMgYmFzZWQgb24gb3VyIE1BQyB0cmFuc21pdAorCSAqIGNsb2NrIGZyZXF1ZW5jeSAoTVRDTEspIG9mIDMxMi41IE1Iei4gR2l2ZW4gYSBtYXhpbXVtIE1ESU8gY2xvY2sKKwkgKiBmcmVxdWVuY3kgb2YgMi41IE1IeiAoc2VlIHRoZSBQSFkgc3BlYyksIHdlIGdldDoKKwkgKiAJMzEyLjUvKDIqKFgrMSkpIDwgMi41ICA9PT4gWCA9IDYyLgorCSAqIFRoaXMgdmFsdWUgaGFwcGVucyB0byBiZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyByZWdpc3Rlciwgc28gd2UKKwkgKiByZWFsbHkgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzLgorCSAqLworCWlmIChhZGFwdGVyLT5hc2ljdHlwZSA9PSBTQUhBUkFfUkVWX0IpIHsKKwkJV1JJVEVfUkVHKEh3UmVncy0+TWFjQW1paW1Db25maWcsIDB4MDAwMDAwMUYsIFRSVUUpOworCX0gZWxzZSB7CisJCVdSSVRFX1JFRyhId1JlZ3MtPk1hY0FtaWltQ29uZmlnLCAweDAwMDAwMDNFLCBUUlVFKTsKKwl9CiAKIAkvKiBQb3dlciB1cCBhbmQgZW5hYmxlIFBIWSBhbmQgWEFVSS9YR1hTL1NlcmRlcyBsb2dpYyAqLwogCVdSSVRFX1JFRyhId1JlZ3MtPkxpbmtTdGF0dXMsCi0JCSAgKExTX1BIWV9DTFJfUkVTRVQgfAotCQkgICBMU19YR1hTX0VOQUJMRSB8Ci0JCSAgIExTX1hHWFNfQ1RMIHwgTFNfUEhZX0NMS19FTiB8IExTX0FUVE5fQUxBUk0pLCBUUlVFKTsKKwkJICAgKExTX1BIWV9DTFJfUkVTRVQgfAorCQkgICAgTFNfWEdYU19FTkFCTEUgfAorCQkgICAgTFNfWEdYU19DVEwgfAorCQkgICAgTFNfUEhZX0NMS19FTiB8CisJCSAgICBMU19BVFROX0FMQVJNKSwKKwkJICAgIFRSVUUpOwogCURCR19FUlJPUigiQWZ0ZXIgUG93ZXIgVXAgYW5kIGVuYWJsZSBQSFkgaW4gc3hnX2luaXRpYWxpemVfbGlua1xuIik7CiAKLQkvKiBQZXIgaW5mb3JtYXRpb24gZ2l2ZW4gYnkgQWVsdXJvcywgd2FpdCAxMDAgbXMgYWZ0ZXIgcmVtb3ZpbmcgcmVzZXQuICovCi0JLyogSXQncyBub3QgZW5vdWdoIHRvIHdhaXQgZm9yIHRoZSBzZWxmLWNsZWFyaW5nIHJlc2V0IGJpdCBpbiByZWcgMCB0byBjbGVhci4gKi8KKwkvKgorCSAqIFBlciBpbmZvcm1hdGlvbiBnaXZlbiBieSBBZWx1cm9zLCB3YWl0IDEwMCBtcyBhZnRlciByZW1vdmluZyByZXNldC4KKwkgKiBJdCdzIG5vdCBlbm91Z2ggdG8gd2FpdCBmb3IgdGhlIHNlbGYtY2xlYXJpbmcgcmVzZXQgYml0IGluIHJlZyAwIHRvCisJICogY2xlYXIuCisJICovCiAJbWRlbGF5KDEwMCk7CiAKLQkvKiBWZXJpZnkgdGhlIFBIWSBoYXMgY29tZSB1cCBieSBjaGVja2luZyB0aGF0IHRoZSBSZXNldCBiaXQgaGFzIGNsZWFyZWQuICovCi0Jc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLyogUEhZIFBNQS9QTUQgbW9kdWxlICovCi0JCQkJICAgUEhZX1BNQV9DT05UUk9MMSwJLyogUE1BL1BNRCBjb250cm9sIHJlZ2lzdGVyICovCi0JCQkJICAgJlZhbHVlKTsKKwkvKiBWZXJpZnkgdGhlIFBIWSBoYXMgY29tZSB1cCBieSBjaGVja2luZyB0aGF0IHRoZSBSZXNldCBiaXQgaGFzCisJICogY2xlYXJlZC4KKwkgKi8KKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLAorCQkJCU1JSU1fREVWX1BIWV9QTUEsIC8qIFBIWSBQTUEvUE1EIG1vZHVsZSAqLworCQkJCVBIWV9QTUFfQ09OVFJPTDEsIC8qIFBNQS9QTUQgY29udHJvbCByZWdpc3RlciAqLworCQkJCSZWYWx1ZSk7CisJREJHX0VSUk9SKCJBZnRlciBzeGdfcmVhZF9tZGlvX3JlZyBWYWx1ZVsleF0gZmFpbD0leFxuIiwgVmFsdWUsCisJCQkJCSAoVmFsdWUgJiBQTUFfQ09OVFJPTDFfUkVTRVQpKTsKIAlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQogCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKIAlpZiAoVmFsdWUgJiBQTUFfQ09OVFJPTDFfUkVTRVQpCS8qIHJlc2V0IGNvbXBsZXRlIGlmIGJpdCBpcyAwICovCkBAIC0yMjI4LDE2ICsyODk5LDI2IEBACiAJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOwogCiAJLyogRW5hYmxlIHRoZSBMaW5rIEFsYXJtICovCi0Jc3RhdHVzID0gc3hnX3dyaXRlX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9QTUEsCS8qIFBIWSBQTUEvUE1EIG1vZHVsZSAqLwotCQkJCSAgICBMQVNJX0NPTlRST0wsCS8qIExBU0kgY29udHJvbCByZWdpc3RlciAqLwotCQkJCSAgICBMQVNJX0NUTF9MU19BTEFSTV9FTkFCTEUpOwkvKiBlbmFibGUgbGluayBhbGFybSBiaXQgKi8KKworCS8qIE1JSU1fREVWX1BIWV9QTUEJCS0gUEhZIFBNQS9QTUQgbW9kdWxlCisJICogTEFTSV9DT05UUk9MCQkJLSBMQVNJIGNvbnRyb2wgcmVnaXN0ZXIKKwkgKiBMQVNJX0NUTF9MU19BTEFSTV9FTkFCTEUJLSBlbmFibGUgbGluayBhbGFybSBiaXQKKwkgKi8KKwlzdGF0dXMgPSBzeGdfd3JpdGVfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwKKwkJCQkgICAgTEFTSV9DT05UUk9MLAorCQkJCSAgICBMQVNJX0NUTF9MU19BTEFSTV9FTkFCTEUpOwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOwogCiAJLyogWFhYVE9ETyAtIHRlbXBvcmFyeSAtIHZlcmlmeSBiaXQgaXMgc2V0ICovCi0Jc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwJLyogUEhZIFBNQS9QTUQgbW9kdWxlICovCi0JCQkJICAgTEFTSV9DT05UUk9MLAkvKiBMQVNJIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKworCS8qIE1JSU1fREVWX1BIWV9QTUEJCS0gUEhZIFBNQS9QTUQgbW9kdWxlCisJICogTEFTSV9DT05UUk9MCQkJLSBMQVNJIGNvbnRyb2wgcmVnaXN0ZXIKKwkgKi8KKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAorCQkJCSAgIExBU0lfQ09OVFJPTCwKIAkJCQkgICAmVmFsdWUpOworCiAJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKIAkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CiAJaWYgKCEoVmFsdWUgJiBMQVNJX0NUTF9MU19BTEFSTV9FTkFCTEUpKSB7CkBAIC0yMjUzLDYgKzI5MzQsMTEgQEAKIAkJICAgICAgUkNWX0NPTkZJR19UWklQVjQgfAogCQkgICAgICBSQ1ZfQ09ORklHX0hBU0hfMTYgfAogCQkgICAgICBSQ1ZfQ09ORklHX1NPQ0tFVCB8IFJDVl9DT05GSUdfQlVGU0laRShNYXhGcmFtZSkpOworCisJaWYgKGFkYXB0ZXItPmFzaWN0eXBlID09IFNBSEFSQV9SRVZfQikgeworCQlDb25maWdEYXRhIHw9IChSQ1ZfQ09ORklHX0hJUFJJQ1RMICB8CisJCQkJUkNWX0NPTkZJR19ORVdTVEFUVVNGTVQpOworCX0KIAlXUklURV9SRUcoSHdSZWdzLT5SY3ZDb25maWcsIENvbmZpZ0RhdGEsIFRSVUUpOwogCiAJV1JJVEVfUkVHKEh3UmVncy0+WG10Q29uZmlnLCBYTVRfQ09ORklHX0VOQUJMRSwgVFJVRSk7CkBAIC0yMjc3LDIxICsyOTYzLDI1IEBACiBzdGF0aWMgaW50IHN4Z19waHlfaW5pdChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewogCXUzMiBWYWx1ZTsKLQlzdHJ1Y3QgUEhZX1VDT0RFICpwOworCXN0cnVjdCBwaHlfdWNvZGUgKnA7CiAJaW50IHN0YXR1czsKIAogCURCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fZnVuY19fKTsKIAotCS8qIFJlYWQgYSByZWdpc3RlciB0byBpZGVudGlmeSB0aGUgUEhZIHR5cGUgKi8KLQlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KLQkJCQkgICAweEMyMDUsCS8qIFBIWSBJRCByZWdpc3RlciAoPykgKi8KLQkJCQkgICAmVmFsdWUpOwkvKiAgICBYWFhUT0RPIC0gYWRkIGRlZiAqLworCS8qIE1JSU1fREVWX1BIWV9QTUEgLSBQSFkgUE1BL1BNRCBtb2R1bGUKKwkgKiAweEMyMDUgLSBQSFkgSUQgcmVnaXN0ZXIgKD8pCisJICogJlZhbHVlIC0gWFhYVE9ETyAtIGFkZCBkZWYKKwkgKi8KKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAorCQkJCSAgIDB4QzIwNSwKKwkJCQkgICAmVmFsdWUpOwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCXJldHVybiAoU1RBVFVTX0ZBSUxVUkUpOwogCi0JaWYgKFZhbHVlID09IDB4MDAxMikgewkvKiAweDAwMTIgPT0gQUVMMjAwNUMgUEhZKD8pIC0gWFhYVE9ETyAtIGFkZCBkZWYgKi8KLQkJREJHX0VSUk9SCi0JCSAgICAoIkFFTDIwMDVDIFBIWSBkZXRlY3RlZC4gIERvd25sb2FkaW5nIFBIWSBtaWNyb2NvZGUuXG4iKTsKKwlpZiAoVmFsdWUgPT0gMHgwMDEyKSB7CisJCS8qIDB4MDAxMiA9PSBBRUwyMDA1QyBQSFkoPykgLSBYWFhUT0RPIC0gYWRkIGRlZiAqLworCQlEQkdfRVJST1IoIkFFTDIwMDVDIFBIWSBkZXRlY3RlZC4gIERvd25sb2FkaW5nIFBIWSBcCisJCQkJIG1pY3JvY29kZS5cbiIpOwogCiAJCS8qIEluaXRpYWxpemUgQUVMMjAwNUMgUEhZIGFuZCBkb3dubG9hZCBQSFkgbWljcm9jb2RlICovCiAJCWZvciAocCA9IFBoeVVjb2RlOyBwLT5BZGRyICE9IDB4RkZGRjsgcCsrKSB7CkBAIC0yMjk5LDEwICsyOTg5LDEzIEBACiAJCQkJLyogaWYgYWRkcmVzcyA9PSAwLCBkYXRhID09IHNsZWVwIHRpbWUgaW4gbXMgKi8KIAkJCQltZGVsYXkocC0+RGF0YSk7CiAJCQl9IGVsc2UgewotCQkJCS8qIHdyaXRlIHRoZSBnaXZlbiBkYXRhIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyAqLwotCQkJCXN0YXR1cyA9IHN4Z193cml0ZV9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KLQkJCQkJCQkgICAgcC0+QWRkciwJLyogUEhZIGFkZHJlc3MgKi8KLQkJCQkJCQkgICAgcC0+RGF0YSk7CS8qIFBIWSBkYXRhICovCisJCQkvKiB3cml0ZSB0aGUgZ2l2ZW4gZGF0YSB0byB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgKi8KKwkJCQlzdGF0dXMgPSBzeGdfd3JpdGVfbWRpb19yZWcoYWRhcHRlciwKKwkJCQkJCQlNSUlNX0RFVl9QSFlfUE1BLAorCQkJCQkJCS8qIFBIWSBhZGRyZXNzICovCisJCQkJCQkJICAgIHAtPkFkZHIsCisJCQkJCQkJLyogUEhZIGRhdGEgKi8KKwkJCQkJCQkgICAgcC0+RGF0YSk7CiAJCQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKIAkJCQkJcmV0dXJuIChTVEFUVVNfRkFJTFVSRSk7CiAJCQl9CkBAIC0yMzI0LDExICszMDE3LDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIHN4Z19saW5rX2V2ZW50KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IFNYR19IV19SRUdTICpId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7CisJc3RydWN0IHN4Z19od19yZWdzICpId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAllbnVtIFNYR19MSU5LX1NUQVRFIExpbmtTdGF0ZTsKIAlpbnQgc3RhdHVzOwogCXUzMiBWYWx1ZTsKIAorCWlmIChhZGFwdGVyLT5zdGF0ZSA9PSBBREFQVF9ET1dOKQorCQlyZXR1cm47CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiTGlua0V2bnQiLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwogCURCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fZnVuY19fKTsKQEAgLTIzMzYsMzUgKzMwMzIsNTcgQEAKIAkvKiBDaGVjayB0aGUgTGluayBTdGF0dXMgcmVnaXN0ZXIuICBXZSBzaG91bGQgaGF2ZSBhIExpbmsgQWxhcm0uICovCiAJUkVBRF9SRUcoSHdSZWdzLT5MaW5rU3RhdHVzLCBWYWx1ZSk7CiAJaWYgKFZhbHVlICYgTFNfTElOS19BTEFSTSkgewotCQkvKiBXZSBnb3QgYSBMaW5rIFN0YXR1cyBhbGFybS4gIEZpcnN0LCBwYXVzZSB0byBsZXQgdGhlICovCi0JCS8qIGxpbmsgc3RhdGUgc2V0dGxlIChpdCBjYW4gYm91bmNlIGEgbnVtYmVyIG9mIHRpbWVzKSAqLworCQkvKgorCQkgKiBXZSBnb3QgYSBMaW5rIFN0YXR1cyBhbGFybS4gIEZpcnN0LCBwYXVzZSB0byBsZXQgdGhlCisJCSAqIGxpbmsgc3RhdGUgc2V0dGxlIChpdCBjYW4gYm91bmNlIGEgbnVtYmVyIG9mIHRpbWVzKQorCQkgKi8KIAkJbWRlbGF5KDEwKTsKIAogCQkvKiBOb3cgY2xlYXIgdGhlIGFsYXJtIGJ5IHJlYWRpbmcgdGhlIExBU0kgc3RhdHVzIHJlZ2lzdGVyLiAqLwotCQlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KLQkJCQkJICAgTEFTSV9TVEFUVVMsCS8qIExBU0kgc3RhdHVzIHJlZ2lzdGVyICovCisJCS8qIE1JSU1fREVWX1BIWV9QTUEgLSBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KKwkJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwKKwkJCQkJLyogTEFTSSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJCQkJICAgTEFTSV9TVEFUVVMsCiAJCQkJCSAgICZWYWx1ZSk7CiAJCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpIHsKIAkJCURCR19FUlJPUigiRXJyb3IgcmVhZGluZyBMQVNJIFN0YXR1cyBNRElPIHJlZ2lzdGVyIVxuIik7CiAJCQlzeGdfbGlua19zdGF0ZShhZGFwdGVyLCBTWEdfTElOS19ET1dOKTsKLS8qICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgwKTsgKi8KKwkJLyogQVNTRVJUKDApOyAqLwogCQl9Ci0JCUFTU0VSVChWYWx1ZSAmIExBU0lfU1RBVFVTX0xTX0FMQVJNKTsKKwkJLyoKKwkJICogV2UgdXNlZCB0byBhc3NlcnQgdGhhdCB0aGUgTEFTSV9MU19BTEFSTSBiaXQgd2FzIHNldCwgYXMKKwkJICogaXQgc2hvdWxkIGJlLiAgQnV0IHRoZXJlIGFwcGVhcnMgdG8gYmUgY2FzZXMgZHVyaW5nCisJCSAqIGluaXRpYWxpemF0aW9uICh3aGVuIHRoZSBQSFkgaXMgcmVzZXQgYW5kIHJlLWluaXRpYWxpemVkKQorCQkgKiB3aGVuIHdlIGdldCBhIGxpbmsgYWxhcm0sIGJ1dCB0aGUgc3RhdHVzIGJpdCBpcyAwIHdoZW4gd2UKKwkJICogcmVhZCBpdC4gIFJhdGhlciB0aGFuIHRyeWluZyB0byBhc3N1cmUgdGhpcyBuZXZlciBoYXBwZW5zCisJCSAqIChhbmQgbnZlciBiZWluZyBjZXJ0YWluKSwganVzdCBpZ25vcmUgaXQuCisKKwkJICogQVNTRVJUKFZhbHVlICYgTEFTSV9TVEFUVVNfTFNfQUxBUk0pOworCQkgKi8KIAogCQkvKiBOb3cgZ2V0IGFuZCBzZXQgdGhlIGxpbmsgc3RhdGUgKi8KIAkJTGlua1N0YXRlID0gc3hnX2dldF9saW5rX3N0YXRlKGFkYXB0ZXIpOwogCQlzeGdfbGlua19zdGF0ZShhZGFwdGVyLCBMaW5rU3RhdGUpOwogCQlEQkdfRVJST1IoIlNYRzogTGluayBBbGFybSBvY2N1cnJlZC4gIExpbmsgaXMgJXNcbiIsCiAJCQkgICgoTGlua1N0YXRlID09IFNYR19MSU5LX1VQKSA/ICJVUCIgOiAiRE9XTiIpKTsKKwkJaWYgKExpbmtTdGF0ZSA9PSBTWEdfTElOS19VUCkgeworCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOworCQkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOworCQl9IGVsc2UgeworCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CisJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCQl9CiAJfSBlbHNlIHsKLQkJLyogWFhYVE9ETyAtIEFzc3VtaW5nIExpbmsgQXR0ZW50aW9uIGlzIG9ubHkgYmVpbmcgZ2VuZXJhdGVkIGZvciB0aGUgKi8KLQkJLyogTGluayBBbGFybSBwaW4gKGFuZCBub3QgZm9yIGEgWEFVSSBMaW5rIFN0YXR1cyBjaGFuZ2UpLCB0aGVuIGl0J3MgKi8KLQkJLyogaW1wb3NzaWJsZSB0byBnZXQgaGVyZS4gIFlldCB3ZSd2ZSBnb3R0ZW4gaGVyZSB0d2ljZSAodW5kZXIgZXh0cmVtZSAqLwotCQkvKiBjb25kaXRpb25zIC0gYm91bmNpbmcgdGhlIGxpbmsgdXAgYW5kIGRvd24gbWFueSB0aW1lcyBhIHNlY29uZCkuICovCi0JCS8qIE5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gKi8KKwkJLyoKKwkgCSAqIFhYWFRPRE8gLSBBc3N1bWluZyBMaW5rIEF0dGVudGlvbiBpcyBvbmx5IGJlaW5nIGdlbmVyYXRlZAorCSAJICogZm9yIHRoZSBMaW5rIEFsYXJtIHBpbiAoYW5kIG5vdCBmb3IgYSBYQVVJIExpbmsgU3RhdHVzIGNoYW5nZSkKKwkgCSAqICwgdGhlbiBpdCdzIGltcG9zc2libGUgdG8gZ2V0IGhlcmUuICBZZXQgd2UndmUgZ290dGVuIGhlcmUKKwkgCSAqIHR3aWNlICh1bmRlciBleHRyZW1lIGNvbmRpdGlvbnMgLSBib3VuY2luZyB0aGUgbGluayB1cCBhbmQKKwkgCSAqIGRvd24gbWFueSB0aW1lcyBhIHNlY29uZCkuIE5lZWRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KKwkgCSAqLwogCQlEQkdfRVJST1IoIlNYRzogc3hnX2xpbmtfZXZlbnQ6IENhbid0IGdldCBoZXJlIVxuIik7CiAJCURCR19FUlJPUigiU1hHOiBMaW5rIFN0YXR1cyA9PSAweCUwOFguXG4iLCBWYWx1ZSk7Ci0vKiAgICAgICAgICAgICAgQVNTRVJUKDApOyAqLworCQkvKiBBU1NFUlQoMCk7ICovCiAJfQogCURCR19FUlJPUigiRVhJVCAlc1xuIiwgX19mdW5jX18pOwogCkBAIC0yMzg5LDEwICszMTA3LDE1IEBACiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiR2V0TGluayIsCiAJCSAgYWRhcHRlciwgMCwgMCwgMCk7CiAKLQkvKiBQZXIgdGhlIFhlbnBhayBzcGVjIChhbmQgdGhlIElFRUUgMTBHYiBzcGVjPyksIHRoZSBsaW5rIGlzIHVwIGlmICovCi0JLyogdGhlIGZvbGxvd2luZyAzIGJpdHMgKGZyb20gMyBkaWZmZXJlbnQgTURJTyByZWdpc3RlcnMpIGFyZSBhbGwgdHJ1ZS4gKi8KLQlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUE1BLAkvKiBQSFkgUE1BL1BNRCBtb2R1bGUgKi8KLQkJCQkgICBQSFlfUE1BX1JDVl9ERVQsCS8qIFBNQS9QTUQgUmVjZWl2ZSBTaWduYWwgRGV0ZWN0IHJlZ2lzdGVyICovCisJLyoKKwkgKiBQZXIgdGhlIFhlbnBhayBzcGVjIChhbmQgdGhlIElFRUUgMTBHYiBzcGVjPyksIHRoZSBsaW5rIGlzIHVwIGlmCisJICogdGhlIGZvbGxvd2luZyAzIGJpdHMgKGZyb20gMyBkaWZmZXJlbnQgTURJTyByZWdpc3RlcnMpIGFyZSBhbGwgdHJ1ZS4KKwkgKi8KKworCS8qIE1JSU1fREVWX1BIWV9QTUEgLSAgUEhZIFBNQS9QTUQgbW9kdWxlICovCisJc3RhdHVzID0gc3hnX3JlYWRfbWRpb19yZWcoYWRhcHRlciwgTUlJTV9ERVZfUEhZX1BNQSwKKwkJCQkvKiBQTUEvUE1EIFJlY2VpdmUgU2lnbmFsIERldGVjdCByZWdpc3RlciAqLworCQkJCSAgIFBIWV9QTUFfUkNWX0RFVCwKIAkJCQkgICAmVmFsdWUpOwogCWlmIChzdGF0dXMgIT0gU1RBVFVTX1NVQ0NFU1MpCiAJCWdvdG8gYmFkOwpAQCAtMjQwMSw4ICszMTI0LDEwIEBACiAJaWYgKCEoVmFsdWUgJiBQTUFfUkNWX0RFVEVDVCkpCiAJCXJldHVybiAoU1hHX0xJTktfRE9XTik7CiAKLQlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUENTLAkvKiBQSFkgUENTIG1vZHVsZSAqLwotCQkJCSAgIFBIWV9QQ1NfMTBHX1NUQVRVUzEsCS8qIFBDUyAxMEdCQVNFLVIgU3RhdHVzIDEgcmVnaXN0ZXIgKi8KKwkvKiBNSUlNX0RFVl9QSFlfUENTIC0gUEhZIFBDUyBtb2R1bGUgKi8KKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfUENTLAorCQkJCS8qIFBDUyAxMEdCQVNFLVIgU3RhdHVzIDEgcmVnaXN0ZXIgKi8KKwkJCQkgICBQSFlfUENTXzEwR19TVEFUVVMxLAogCQkJCSAgICZWYWx1ZSk7CiAJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKIAkJZ290byBiYWQ7CkBAIC0yNDExLDggKzMxMzYsOSBAQAogCWlmICghKFZhbHVlICYgUENTXzEwQl9CTE9DS19MT0NLKSkKIAkJcmV0dXJuIChTWEdfTElOS19ET1dOKTsKIAotCXN0YXR1cyA9IHN4Z19yZWFkX21kaW9fcmVnKGFkYXB0ZXIsIE1JSU1fREVWX1BIWV9YUywJLyogUEhZIFhTIG1vZHVsZSAqLwotCQkJCSAgIFBIWV9YU19MQU5FX1NUQVRVUywJLyogWFMgTGFuZSBTdGF0dXMgcmVnaXN0ZXIgKi8KKwlzdGF0dXMgPSBzeGdfcmVhZF9tZGlvX3JlZyhhZGFwdGVyLCBNSUlNX0RFVl9QSFlfWFMsLyogUEhZIFhTIG1vZHVsZSAqLworCQkJCS8qIFhTIExhbmUgU3RhdHVzIHJlZ2lzdGVyICovCisJCQkJICAgUEhZX1hTX0xBTkVfU1RBVFVTLAogCQkJCSAgICZWYWx1ZSk7CiAJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykKIAkJZ290byBiYWQ7CkBAIC0yNDI3LDcgKzMxNTMsNyBAQAogCXJldHVybiAoU1hHX0xJTktfVVApOwogCiAgICAgICBiYWQ6Ci0JLyogQW4gZXJyb3Igb2NjdXJyZWQgcmVhZGluZyBhbiBNRElPIHJlZ2lzdGVyLiAgVGhpcyBzaG91bGRuJ3QgaGFwcGVuLiAqLworCS8qIEFuIGVycm9yIG9jY3VycmVkIHJlYWRpbmcgYW4gTURJTyByZWdpc3Rlci4gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLiAqLwogCURCR19FUlJPUigiRXJyb3IgcmVhZGluZyBhbiBNRElPIHJlZ2lzdGVyIVxuIik7CiAJQVNTRVJUKDApOwogCXJldHVybiAoU1hHX0xJTktfRE9XTik7CkBAIC0yNDQ4LDYgKzMxNzQsMzcgQEAKIH0KIAogLyoKKyAqIHN4Z19jaGFuZ2VfbXR1IC0gQ2hhbmdlIHRoZSBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKKyAqICAqIEByZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICovCitpbnQgc3hnX2NoYW5nZV9tdHUgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKCEoKG5ld19tdHUgPT0gU1hHX0RFRkFVTFRfTVRVKSB8fCAobmV3X210dSA9PSBTWEdfSlVNQk9fTVRVKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYobmV3X210dSA9PSBuZXRkZXYtPm10dSkKKwkJcmV0dXJuIDA7CisKKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CisKKwlpZiAobmV3X210dSA9PSBTWEdfSlVNQk9fTVRVKSB7CisJCWFkYXB0ZXItPkp1bWJvRW5hYmxlZCA9IFRSVUU7CisJCWFkYXB0ZXItPkZyYW1lU2l6ZSA9IEpVTUJPTUFYRlJBTUU7CisJCWFkYXB0ZXItPlJlY2VpdmVCdWZmZXJTaXplID0gU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5KdW1ib0VuYWJsZWQgPSBGQUxTRTsKKwkJYWRhcHRlci0+RnJhbWVTaXplID0gRVRIRVJNQVhGUkFNRTsKKwkJYWRhcHRlci0+UmVjZWl2ZUJ1ZmZlclNpemUgPSBTWEdfUkNWX0RBVEFfQlVGRkVSX1NJWkU7CisJfQorCisJc3hnX2VudHJ5X2hhbHQobmV0ZGV2KTsKKwlzeGdfZW50cnlfb3BlbihuZXRkZXYpOworCXJldHVybiAwOworfQorCisvKgogICogc3hnX2xpbmtfc3RhdGUgLSBTZXQgdGhlIGxpbmsgc3RhdGUgYW5kIGlmIG5lY2Vzc2FyeSwgaW5kaWNhdGUuCiAgKglUaGlzIHJvdXRpbmUgdGhlIGNlbnRyYWwgcG9pbnQgb2YgcHJvY2Vzc2luZyBmb3IgYWxsIGxpbmsgc3RhdGUgY2hhbmdlcy4KICAqCU5vdGhpbmcgZWxzZSBpbiB0aGUgZHJpdmVyIHNob3VsZCBhbHRlciB0aGUgbGluayBzdGF0ZSBvciBwZXJmb3JtCkBAIC0yNDYwLDI3ICszMjE3LDMyIEBACiAgKiBSZXR1cm4KICAqCU5vbmUKICAqLwotc3RhdGljIHZvaWQgc3hnX2xpbmtfc3RhdGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwgZW51bSBTWEdfTElOS19TVEFURSBMaW5rU3RhdGUpCitzdGF0aWMgdm9pZCBzeGdfbGlua19zdGF0ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAorCQkJCWVudW0gU1hHX0xJTktfU1RBVEUgTGlua1N0YXRlKQogewogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9JTVBPUlRBTlQsICJMbmtJTkRDVCIsCiAJCSAgYWRhcHRlciwgTGlua1N0YXRlLCBhZGFwdGVyLT5MaW5rU3RhdGUsIGFkYXB0ZXItPlN0YXRlKTsKIAogCURCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fZnVuY19fKTsKIAotCS8qIEhvbGQgdGhlIGFkYXB0ZXIgbG9jayBkdXJpbmcgdGhpcyByb3V0aW5lLiAgTWF5YmUgbW92ZSAqLwotCS8qIHRoZSBsb2NrIHRvIHRoZSBjYWxsZXIuICovCi0Jc3Bpbl9sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisJLyoKKwkgKiBIb2xkIHRoZSBhZGFwdGVyIGxvY2sgZHVyaW5nIHRoaXMgcm91dGluZS4gIE1heWJlIG1vdmUKKwkgKiB0aGUgbG9jayB0byB0aGUgY2FsbGVyLgorCSAqLworCS8qIElNUCBUT0RPIDogQ2hlY2sgaWYgd2UgY2FuIHN1cnZpdmUgd2l0aG91dCB0YWtpbmcgdGhpcyBsb2NrICovCisvLwlzcGluX2xvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKIAlpZiAoTGlua1N0YXRlID09IGFkYXB0ZXItPkxpbmtTdGF0ZSkgewogCQkvKiBOb3RoaW5nIGNoYW5nZWQuLiAqLwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOwotCQlEQkdfRVJST1IoIkVYSVQgIzAgJXNcbiIsIF9fZnVuY19fKTsKKy8vCQlzcGluX3VubG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCQlEQkdfRVJST1IoIkVYSVQgIzAgJXMuIExpbmsgc3RhdHVzID0gJWRcbiIsCisJCQkJCSBfX2Z1bmNfXywgTGlua1N0YXRlKTsKIAkJcmV0dXJuOwogCX0KIAkvKiBTYXZlIHRoZSBhZGFwdGVyIHN0YXRlICovCiAJYWRhcHRlci0+TGlua1N0YXRlID0gTGlua1N0YXRlOwogCiAJLyogRHJvcCB0aGUgbG9jayBhbmQgaW5kaWNhdGUgbGluayBzdGF0ZSAqLwotCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisvLwlzcGluX3VubG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOwogCURCR19FUlJPUigiRVhJVCAjMSAlc1xuIiwgX19mdW5jX18pOwogCiAJc3hnX2luZGljYXRlX2xpbmtfc3RhdGUoYWRhcHRlciwgTGlua1N0YXRlKTsKQEAgLTI1MDEsMTQgKzMyNjMsMTYgQEAKIHN0YXRpYyBpbnQgc3hnX3dyaXRlX21kaW9fcmVnKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCiAJCQkgICAgICB1MzIgRGV2QWRkciwgdTMyIFJlZ0FkZHIsIHUzMiBWYWx1ZSkKIHsKLQlzdHJ1Y3QgU1hHX0hXX1JFR1MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKLQl1MzIgQWRkck9wOwkJLyogQWRkcmVzcyBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpICovCi0JdTMyIFdyaXRlT3A7CQkvKiBXcml0ZSBvcGVyYXRpb24gKHdyaXR0ZW4gdG8gTUlJTSBmaWVsZCByZWcpICovCi0JdTMyIENtZDsJCS8qIENvbW1hbmQgKHdyaXR0ZW4gdG8gTUlJTSBjb21tYW5kIHJlZykgKi8KKwlzdHJ1Y3Qgc3hnX2h3X3JlZ3MgKkh3UmVncyA9IGFkYXB0ZXItPkh3UmVnczsKKwkvKiBBZGRyZXNzIG9wZXJhdGlvbiAod3JpdHRlbiB0byBNSUlNIGZpZWxkIHJlZykgKi8KKwl1MzIgQWRkck9wOworCS8qIFdyaXRlIG9wZXJhdGlvbiAod3JpdHRlbiB0byBNSUlNIGZpZWxkIHJlZykgKi8KKwl1MzIgV3JpdGVPcDsKKwl1MzIgQ21kOy8qIENvbW1hbmQgKHdyaXR0ZW4gdG8gTUlJTSBjb21tYW5kIHJlZykgKi8KIAl1MzIgVmFsdWVSZWFkOwogCXUzMiBUaW1lb3V0OwogCi0vKiAgREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19mdW5jX18pOyAqLworCS8qIERCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fZnVuY19fKTsgKi8KIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIldydE1ESU8iLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwpAQCAtMjU3MSw3ICszMzM1LDcgQEAKIAkJfQogCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOwogCi0vKiAgREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX2Z1bmNfXyk7ICovCisJLyogREJHX0VSUk9SKCJFWElUICVzXG4iLCBfX2Z1bmNfXyk7ICovCiAKIAlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKIH0KQEAgLTI1ODMsNyArMzM0Nyw3IEBACiAgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKICAqICBEZXZBZGRyICAgICAtIE1ESU8gZGV2aWNlIG51bWJlciBiZWluZyBhZGRyZXNzZWQKICAqICBSZWdBZGRyICAgICAtIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIHRoZSBzcGVjaWZpZWQgTURJTyBkZXZpY2UKLSAqICBwVmFsdWUJCS0gcG9pbnRlciB0byB3aGVyZSB0byBwdXQgZGF0YSByZWFkIGZyb20gdGhlIE1ESU8gcmVnaXN0ZXIKKyAqICBwVmFsdWUJLSBwb2ludGVyIHRvIHdoZXJlIHRvIHB1dCBkYXRhIHJlYWQgZnJvbSB0aGUgTURJTyByZWdpc3RlcgogICoKICAqIFJldHVybgogICoJc3RhdHVzCkBAIC0yNTkxLDE2ICszMzU1LDE2IEBACiBzdGF0aWMgaW50IHN4Z19yZWFkX21kaW9fcmVnKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCiAJCQkgICAgIHUzMiBEZXZBZGRyLCB1MzIgUmVnQWRkciwgdTMyICpwVmFsdWUpCiB7Ci0Jc3RydWN0IFNYR19IV19SRUdTICpId1JlZ3MgPSBhZGFwdGVyLT5Id1JlZ3M7Ci0JdTMyIEFkZHJPcDsJCS8qIEFkZHJlc3Mgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKSAqLwotCXUzMiBSZWFkT3A7CQkvKiBSZWFkIG9wZXJhdGlvbiAod3JpdHRlbiB0byBNSUlNIGZpZWxkIHJlZykgKi8KLQl1MzIgQ21kOwkJLyogQ29tbWFuZCAod3JpdHRlbiB0byBNSUlNIGNvbW1hbmQgcmVnKSAqLworCXN0cnVjdCBzeGdfaHdfcmVncyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXUzMiBBZGRyT3A7CS8qIEFkZHJlc3Mgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKSAqLworCXUzMiBSZWFkT3A7CS8qIFJlYWQgb3BlcmF0aW9uICh3cml0dGVuIHRvIE1JSU0gZmllbGQgcmVnKSAqLworCXUzMiBDbWQ7CS8qIENvbW1hbmQgKHdyaXR0ZW4gdG8gTUlJTSBjb21tYW5kIHJlZykgKi8KIAl1MzIgVmFsdWVSZWFkOwogCXUzMiBUaW1lb3V0OwogCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiV3J0TURJTyIsCiAJCSAgYWRhcHRlciwgMCwgMCwgMCk7Ci0vKiAgREJHX0VSUk9SKCJFTlRFUiAlc1xuIiwgX19mdW5jX18pOyAqLworCURCR19FUlJPUigiRU5URVIgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKiBFbnN1cmUgdmFsdWVzIGRvbid0IGV4Y2VlZCBmaWVsZCB3aWR0aCAqLwogCURldkFkZHIgJj0gMHgwMDFGOwkvKiA1LWJpdCBmaWVsZCAqLwpAQCAtMjYzNiw2ICszNDAwLDggQEAKIAkJdWRlbGF5KDEwMCk7CS8qIFRpbWVvdXQgaW4gMTAwdXMgdW5pdHMgKi8KIAkJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUluZGljYXRvciwgVmFsdWVSZWFkKTsKIAkJaWYgKC0tVGltZW91dCA9PSAwKSB7CisgICAgICAgICAgICBEQkdfRVJST1IoIkVYSVQgJXMgd2l0aCBTVEFUVVNfRkFJTFVSRSAxXG4iLCBfX0ZVTkNUSU9OX18pOworCiAJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKIAkJfQogCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOwpAQCAtMjY1NSw2ICszNDIxLDggQEAKIAkJdWRlbGF5KDEwMCk7CS8qIFRpbWVvdXQgaW4gMTAwdXMgdW5pdHMgKi8KIAkJUkVBRF9SRUcoSHdSZWdzLT5NYWNBbWlpbUluZGljYXRvciwgVmFsdWVSZWFkKTsKIAkJaWYgKC0tVGltZW91dCA9PSAwKSB7CisgICAgICAgICAgICBEQkdfRVJST1IoIkVYSVQgJXMgd2l0aCBTVEFUVVNfRkFJTFVSRSAyXG4iLCBfX0ZVTkNUSU9OX18pOworCiAJCQlyZXR1cm4gKFNUQVRVU19GQUlMVVJFKTsKIAkJfQogCX0gd2hpbGUgKFZhbHVlUmVhZCAmIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kpOwpAQCAtMjY2Myw3ICszNDMxLDcgQEAKIAlSRUFEX1JFRyhId1JlZ3MtPk1hY0FtaWltRmllbGQsICpwVmFsdWUpOwogCSpwVmFsdWUgJj0gMHhGRkZGOwkvKiBkYXRhIGlzIGluIHRoZSBsb3dlciAxNiBiaXRzICovCiAKLS8qICBEQkdfRVJST1IoIkVYSVQgJXNcbiIsIF9fZnVuY19fKTsgKi8KKwlEQkdfRVJST1IoIkVYSVQgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlyZXR1cm4gKFNUQVRVU19TVUNDRVNTKTsKIH0KQEAgLTI2NzIsMjIgKzM0NDAsMjEgQEAKICAqIEZ1bmN0aW9ucyB0byBvYnRhaW4gdGhlIENSQyBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZXN0aW5hdGlvbiBtYWMgYWRkcmVzcy4KICAqIFRoaXMgaXMgYSBzdGFuZGFyZCBldGhlcm5ldCBDUkMgaW4gdGhhdCBpdCBpcyBhIDMyLWJpdCwgcmVmbGVjdGVkIENSQyB1c2luZwogICogdGhlIHBvbHlub21pYWw6Ci0gKiAgIHheMzIgKyB4XjI2ICsgeF4yMyArIHheMjIgKyB4XjE2ICsgeF4xMiArIHheMTEgKyB4XjEwICsgeF44ICsgeF43ICsgeF41ICsgeF40ICsgeF4yICsgeF4xLgorICogICB4XjMyICsgeF4yNiArIHheMjMgKyB4XjIyICsgeF4xNiArIHheMTIgKyB4XjExICsgeF4xMCArIHheOCArIHheNyArIHheNQorICogICAgKyB4XjQgKyB4XjIgKyB4XjEuCiAgKgotICogQWZ0ZXIgdGhlIENSQyBmb3IgdGhlIDYgYnl0ZXMgaXMgZ2VuZXJhdGVkIChidXQgYmVmb3JlIHRoZSB2YWx1ZSBpcyBjb21wbGVtZW50ZWQpLAotICogd2UgbXVzdCB0aGVuIHRyYW5zcG9zZSB0aGUgdmFsdWUgYW5kIHJldHVybiBiaXRzIDMwLTIzLgotICoKKyAqIEFmdGVyIHRoZSBDUkMgZm9yIHRoZSA2IGJ5dGVzIGlzIGdlbmVyYXRlZCAoYnV0IGJlZm9yZSB0aGUgdmFsdWUgaXMKKyAqIGNvbXBsZW1lbnRlZCksIHdlIG11c3QgdGhlbiB0cmFuc3Bvc2UgdGhlIHZhbHVlIGFuZCByZXR1cm4gYml0cyAzMC0yMy4KICAqLwotc3RhdGljIHUzMiBzeGdfY3JjX3RhYmxlWzI1Nl07CS8qIFRhYmxlIG9mIENSQydzIGZvciBhbGwgcG9zc2libGUgYnl0ZSB2YWx1ZXMgKi8KK3N0YXRpYyB1MzIgc3hnX2NyY190YWJsZVsyNTZdOy8qIFRhYmxlIG9mIENSQydzIGZvciBhbGwgcG9zc2libGUgYnl0ZSB2YWx1ZXMgKi8KK3N0YXRpYyB1MzIgc3hnX2NyY19pbml0OwkvKiBJcyB0YWJsZSBpbml0aWFsaXplZCAqLwogCi0vKgotICogIENvbnRydWN0IHRoZSBDUkMzMiB0YWJsZQotICovCisvKiBDb250cnVjdCB0aGUgQ1JDMzIgdGFibGUgKi8KIHN0YXRpYyB2b2lkIHN4Z19tY2FzdF9pbml0X2NyYzMyKHZvaWQpCiB7Ci0JdTMyIGM7CQkJLyogIENSQyBzaGl0IHJlZyAgICAgICAgICAgICAgICAgKi8KLQl1MzIgZSA9IDA7CQkvKiAgUG9seSBYLW9yIHBhdHRlcm4gICAgICAgICAgICAqLwotCWludCBpOwkJCS8qICBjb3VudGVyICAgICAgICAgICAgICAgICAgICAgICovCisJdTMyIGM7CQkJLyogIENSQyBzaGl0IHJlZyAqLworCXUzMiBlID0gMDsJCS8qICBQb2x5IFgtb3IgcGF0dGVybiAqLworCWludCBpOwkJCS8qICBjb3VudGVyICovCiAJaW50IGs7CQkJLyogIGJ5dGUgYmVpbmcgc2hpZnRlZCBpbnRvIGNyYyAgKi8KIAogCXN0YXRpYyBpbnQgcFtdID0geyAwLCAxLCAyLCA0LCA1LCA3LCA4LCAxMCwgMTEsIDEyLCAxNiwgMjIsIDIzLCAyNiB9OwpAQCAtMjcwNSw4ICszNDcyLDYgQEAKIAl9CiB9CiAKLSNpZiBYWFhUT0RPCi1zdGF0aWMgdTMyIHN4Z19jcmNfaW5pdDsJLyogSXMgdGFibGUgaW5pdGlhbGl6ZWQgKi8KIC8qCiAgKiAgUmV0dXJuIHRoZSBNQUMgaGFzdCBhcyBkZXNjcmliZWQgYWJvdmUuCiAgKi8KQEAgLTI3MzcsMjUgKzM1MDIsMzEgQEAKIAogc3RhdGljIHZvaWQgc3hnX21jYXN0X3NldF9tYXNrKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IFNYR19VQ09ERV9SRUdTICpzeGdfcmVncyA9IGFkYXB0ZXItPlVjb2RlUmVnczsKKwlzdHJ1Y3Qgc3hnX3Vjb2RlX3JlZ3MgKnN4Z19yZWdzID0gYWRhcHRlci0+VWNvZGVSZWdzOwogCi0JREJHX0VSUk9SKCIlcyBFTlRFUiAoJXMpIG1hY29wdHNbJXhdIG1hc2tbJWxseF1cbiIsIF9fZnVuY19fLAorCURCR19FUlJPUigiJXMgRU5URVIgKCVzKSBNYWNGaWx0ZXJbJXhdIG1hc2tbJWxseF1cbiIsIF9fRlVOQ1RJT05fXywKIAkJICBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsICh1bnNpZ25lZCBpbnQpYWRhcHRlci0+TWFjRmlsdGVyLAogCQkgIGFkYXB0ZXItPk11bHRpY2FzdE1hc2spOwogCiAJaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIChNQUNfQUxMTUNBU1QgfCBNQUNfUFJPTUlTQykpIHsKLQkJLyogVHVybiBvbiBhbGwgbXVsdGljYXN0IGFkZHJlc3Nlcy4gV2UgaGF2ZSB0byBkbyB0aGlzIGZvciBwcm9taXNjdW91cwotCQkgKiBtb2RlIGFzIHdlbGwgYXMgQUxMTUNBU1QgbW9kZS4gIEl0IHNhdmVzIHRoZSBNaWNyb2NvZGUgZnJvbSBoYXZpbmcKLQkJICogdG8ga2VlcCBzdGF0ZSBhYm91dCB0aGUgTUFDIGNvbmZpZ3VyYXRpb24uCisJCS8qCisJCSAqIFR1cm4gb24gYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMuIFdlIGhhdmUgdG8gZG8gdGhpcyBmb3IKKwkJICogcHJvbWlzY3VvdXMgbW9kZSBhcyB3ZWxsIGFzIEFMTE1DQVNUIG1vZGUuICBJdCBzYXZlcyB0aGUKKwkJICogTWljcm9jb2RlIGZyb20gaGF2aW5nIGtlZXAgc3RhdGUgYWJvdXQgdGhlIE1BQyBjb25maWd1cmF0aW9uCiAJCSAqLwotLyogICAgICAgICAgICAgIERCR19FUlJPUigic3hnOiAlcyBtYWNvcHRzID0gTUFDX0FMTE1DQVNUIHwgTUFDX1BST01JU0NcbiAgICAgIFNMVVQgTU9ERSEhIVxuIixfX2Z1bmNfXyk7ICovCisJCS8qIERCR19FUlJPUigic3hnOiAlcyBNYWNGaWx0ZXIgPSBNQUNfQUxMTUNBU1QgfCBNQUNfUFJPTUlTQ1xuIFwKKwkJICogCQkJCVNMVVQgTU9ERSEhIVxuIixfX2Z1bmNfXyk7CisJCSAqLwogCQlXUklURV9SRUcoc3hnX3JlZ3MtPk1jYXN0TG93LCAweEZGRkZGRkZGLCBGTFVTSCk7CiAJCVdSSVRFX1JFRyhzeGdfcmVncy0+TWNhc3RIaWdoLCAweEZGRkZGRkZGLCBGTFVTSCk7Ci0vKiAgICAgICAgREJHX0VSUk9SKCIlcyAoJXMpIFdSSVRFIHRvIHNsaWNfcmVncyBzbGljX21jYXN0bG93JmhpZ2ggMHhGRkZGRkZGRlxuIixfX2Z1bmNfXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsgKi8KKwkJLyogREJHX0VSUk9SKCIlcyAoJXMpIFdSSVRFIHRvIHNsaWNfcmVncyBzbGljX21jYXN0bG93JmhpZ2ggXAorCQkgKiAweEZGRkZGRkZGXG4iLF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQkgKi8KIAogCX0gZWxzZSB7Ci0JCS8qIENvbW1pdCBvdXIgbXVsdGljYXN0IG1hc3QgdG8gdGhlIFNMSUMgYnkgd3JpdGluZyB0byB0aGUgbXVsdGljYXN0Ci0JCSAqIGFkZHJlc3MgbWFzayByZWdpc3RlcnMKKwkJLyoKKwkJICogQ29tbWl0IG91ciBtdWx0aWNhc3QgbWFzdCB0byB0aGUgU0xJQyBieSB3cml0aW5nIHRvIHRoZQorCQkgKiBtdWx0aWNhc3QgYWRkcmVzcyBtYXNrIHJlZ2lzdGVycwogCQkgKi8KIAkJREJHX0VSUk9SKCIlcyAoJXMpIFdSSVRFIG1jYXN0bG93WyVseF0gbWNhc3RoaWdoWyVseF1cbiIsCiAJCQkgIF9fZnVuY19fLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUsCkBAIC0yNzcxLDM4ICszNTQyLDYgQEAKIAl9CiB9CiAKLS8qCi0gKiAgQWxsb2NhdGUgYSBtY2FzdF9hZGRyZXNzIHN0cnVjdHVyZSB0byBob2xkIHRoZSBtdWx0aWNhc3QgYWRkcmVzcy4KLSAqICBMaW5rIGl0IGluLgotICovCi1zdGF0aWMgaW50IHN4Z19tY2FzdF9hZGRfbGlzdChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCBjaGFyICphZGRyZXNzKQotewotCXBfbWNhc3RfYWRkcmVzc190IG1jYWRkciwgbWxpc3Q7Ci0JYm9vbCBlcXVhbGFkZHI7Ci0KLQkvKiBDaGVjayB0byBzZWUgaWYgaXQgYWxyZWFkeSBleGlzdHMgKi8KLQltbGlzdCA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7Ci0Jd2hpbGUgKG1saXN0KSB7Ci0JCUVUSEVSX0VRX0FERFIobWxpc3QtPmFkZHJlc3MsIGFkZHJlc3MsIGVxdWFsYWRkcik7Ci0JCWlmIChlcXVhbGFkZHIpIHsKLQkJCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOwotCQl9Ci0JCW1saXN0ID0gbWxpc3QtPm5leHQ7Ci0JfQotCi0JLyogRG9lc24ndCBhbHJlYWR5IGV4aXN0LiAgQWxsb2NhdGUgYSBzdHJ1Y3R1cmUgdG8gaG9sZCBpdCAqLwotCW1jYWRkciA9IGttYWxsb2Moc2l6ZW9mKG1jYXN0X2FkZHJlc3NfdCksIEdGUF9BVE9NSUMpOwotCWlmIChtY2FkZHIgPT0gTlVMTCkKLQkJcmV0dXJuIDE7Ci0KLQltZW1jcHkobWNhZGRyLT5hZGRyZXNzLCBhZGRyZXNzLCA2KTsKLQotCW1jYWRkci0+bmV4dCA9IGFkYXB0ZXItPm1jYXN0YWRkcnM7Ci0JYWRhcHRlci0+bWNhc3RhZGRycyA9IG1jYWRkcjsKLQotCXJldHVybiAoU1RBVFVTX1NVQ0NFU1MpOwotfQotCiBzdGF0aWMgdm9pZCBzeGdfbWNhc3Rfc2V0X2JpdChzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCBjaGFyICphZGRyZXNzKQogewogCXVuc2lnbmVkIGNoYXIgY3JjcG9seTsKQEAgLTI4MTAsNyArMzU0OSw4IEBACiAJLyogR2V0IHRoZSBDUkMgcG9seW5vbWlhbCBmb3IgdGhlIG1hYyBhZGRyZXNzICovCiAJY3JjcG9seSA9IHN4Z19tY2FzdF9nZXRfbWFjX2hhc2goYWRkcmVzcyk7CiAKLQkvKiBXZSBvbmx5IGhhdmUgc3BhY2Ugb24gdGhlIFNMSUMgZm9yIDY0IGVudHJpZXMuICBMb3AKKwkvKgorCSAqIFdlIG9ubHkgaGF2ZSBzcGFjZSBvbiB0aGUgU0xJQyBmb3IgNjQgZW50cmllcy4gIExvcAogCSAqIG9mZiB0aGUgdG9wIHR3byBiaXRzLiAoMl42ID0gNjQpCiAJICovCiAJY3JjcG9seSAmPSAweDNGOwpAQCAtMjgxOSw3NiArMzU1OSwxMTkgQEAKIAlhZGFwdGVyLT5NdWx0aWNhc3RNYXNrIHw9ICh1NjQpIDEgPDwgY3JjcG9seTsKIH0KIAotc3RhdGljIHZvaWQgc3hnX21jYXN0X3NldF9saXN0KHBfbmV0X2RldmljZSBkZXYpCisvKgorICogICBGdW5jdGlvbiB0YWtlcyBNQUMgYWRkcmVzc2VzIGZyb20gZGV2X21jX2xpc3QgYW5kIGdlbmVyYXRlcyB0aGUgTWFzaworICovCisKK3N0YXRpYyB2b2lkIHN4Z19zZXRfbWNhc3RfYWRkcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQoreworICAgICAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKKyAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPm5ldGRldjsKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgaWYgKGFkYXB0ZXItPk1hY0ZpbHRlciAmIChNQUNfQUxMTUNBU1QgfCBNQUNfTUNBU1QpKSB7CisgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IGkgPCBkZXYtPm1jX2NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3hnX21jYXN0X3NldF9iaXQoYWRhcHRlcixtY2xpc3QtPmRhX2FkZHIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzeGdfbWNhc3Rfc2V0X21hc2soYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHN4Z19tY2FzdF9zZXRfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXJfdCAqKSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKLQlpbnQgaTsKLQljaGFyICphZGRyZXNzZXM7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gZGV2LT5tY19saXN0OwotCWludCBtY19jb3VudCA9IGRldi0+bWNfY291bnQ7CiAKIAlBU1NFUlQoYWRhcHRlcik7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwkJYWRhcHRlci0+TWFjRmlsdGVyIHw9IE1BQ19QUk9NSVNDOworICAgICAgICBpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpCisgICAgICAgICAgICAgICAgYWRhcHRlci0+TWFjRmlsdGVyIHw9IE1BQ19NQ0FTVDsKKyAgICAgICAgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisgICAgICAgICAgICAgICAgYWRhcHRlci0+TWFjRmlsdGVyIHw9IE1BQ19BTExNQ0FTVDsKIAotCWZvciAoaSA9IDE7IGkgPD0gbWNfY291bnQ7IGkrKykgewotCQlhZGRyZXNzZXMgPSAoY2hhciAqKSZtY19saXN0LT5kbWlfYWRkcjsKLQkJaWYgKG1jX2xpc3QtPmRtaV9hZGRybGVuID09IDYpIHsKLQkJCXN0YXR1cyA9IHN4Z19tY2FzdF9hZGRfbGlzdChhZGFwdGVyLCBhZGRyZXNzZXMpOwotCQkJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3RhdHVzID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCXN4Z19tY2FzdF9zZXRfYml0KGFkYXB0ZXIsIGFkZHJlc3Nlcyk7Ci0JCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OwotCX0KLQotCURCR19FUlJPUigiJXMgYS0+ZGV2ZmxhZ3NfcHJldlsleF0gZGV2LT5mbGFnc1sleF0gc3RhdHVzWyV4XVxuIiwKLQkJICBfX2Z1bmNfXywgYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiwgZGV2LT5mbGFncywgc3RhdHVzKTsKLQlpZiAoYWRhcHRlci0+ZGV2ZmxhZ3NfcHJldiAhPSBkZXYtPmZsYWdzKSB7Ci0JCWFkYXB0ZXItPm1hY29wdHMgPSBNQUNfRElSRUNURUQ7Ci0JCWlmIChkZXYtPmZsYWdzKSB7Ci0JCQlpZiAoZGV2LT5mbGFncyAmIElGRl9CUk9BRENBU1QpIHsKLQkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19CQ0FTVDsKLQkJCX0KLQkJCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19QUk9NSVNDOwotCQkJfQotCQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKLQkJCQlhZGFwdGVyLT5tYWNvcHRzIHw9IE1BQ19BTExNQ0FTVDsKLQkJCX0KLQkJCWlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgewotCQkJCWFkYXB0ZXItPm1hY29wdHMgfD0gTUFDX01DQVNUOwotCQkJfQotCQl9Ci0JCWFkYXB0ZXItPmRldmZsYWdzX3ByZXYgPSBkZXYtPmZsYWdzOwotCQlEQkdfRVJST1IoIiVzIGNhbGwgc3hnX2NvbmZpZ19zZXQgYWRhcHRlci0+bWFjb3B0c1sleF1cbiIsCi0JCQkgIF9fZnVuY19fLCBhZGFwdGVyLT5tYWNvcHRzKTsKLQkJc3hnX2NvbmZpZ19zZXQoYWRhcHRlciwgVFJVRSk7Ci0JfSBlbHNlIHsKLQkJaWYgKHN0YXR1cyA9PSBTVEFUVVNfU1VDQ0VTUykgewotCQkJc3hnX21jYXN0X3NldF9tYXNrKGFkYXB0ZXIpOwotCQl9Ci0JfQotCXJldHVybjsKKwkvL1hYWCBoYW5kbGUgb3RoZXIgZmxhZ3MgYXMgd2VsbAorCXN4Z19zZXRfbWNhc3RfYWRkcihhZGFwdGVyKTsKIH0KLSNlbmRpZgogCi1zdGF0aWMgdm9pZCBzeGdfdW5tYXBfbW1pb19zcGFjZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQordm9pZCBzeGdfZnJlZV9zZ2xfYnVmZmVycyhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewotI2lmIExJTlVYX0ZSRUVTX0FEQVBURVJfUkVTT1VSQ0VTCi0vKiAgICAgIGlmIChhZGFwdGVyLT5SZWdzKSB7ICovCi0vKiAgICAgICAgICAgICAgaW91bm1hcChhZGFwdGVyLT5SZWdzKTsgKi8KLS8qICAgICAgfSAqLwotLyogICAgICBhZGFwdGVyLT5zbGljX3JlZ3MgPSBOVUxMOyAqLwotI2VuZGlmCisgICAgICAgIHN0cnVjdCBsaXN0X2VudHJ5ICAgICAgICAgICAgICAgKnBsZTsKKyAgICAgICAgc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciAgICAgICAqU2dsOworCisgICAgICAgIHdoaWxlKCEoSXNMaXN0RW1wdHkoJmFkYXB0ZXItPkFsbFNnbEJ1ZmZlcnMpKSkgeworIAkJcGxlID0gUmVtb3ZlSGVhZExpc3QoJmFkYXB0ZXItPkFsbFNnbEJ1ZmZlcnMpOworIAkJU2dsID0gY29udGFpbmVyX29mKHBsZSwgc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciwgQWxsTGlzdCk7CisgCQlrZnJlZShTZ2wpOworICAgICAgICAgICAgICAgIGFkYXB0ZXItPkFsbFNnbEJ1ZmZlckNvdW50LS07CisgICAgICAgIH0KIH0KIAotI2lmIFhYWFRPRE8KK3ZvaWQgc3hnX2ZyZWVfcmN2YmxvY2tzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJdTMyCQkJCWk7CisgICAgICAgCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRlbXBfUmN2QmxvY2s7CisgICAgICAgCXN0cnVjdCBsaXN0X2VudHJ5ICAgICAgICAgICAgICAgKnBsZTsKKyAgICAgICAJc3RydWN0IHN4Z19yY3ZfYmxvY2tfaGRyICAgICAgICAqUmN2QmxvY2tIZHI7CisJc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyCSpSY3ZEYXRhQnVmZmVySGRyOworICAgICAgICBBU1NFUlQoKGFkYXB0ZXItPnN0YXRlID09IFNYR19TVEFURV9JTklUSUFMSVpJTkcpIHx8CisgICAgICAgICAgICAgICAgICAgIChhZGFwdGVyLT5zdGF0ZSA9PSBTWEdfU1RBVEVfSEFMVElORykpOworICAgICAgICB3aGlsZSghKElzTGlzdEVtcHR5KCZhZGFwdGVyLT5BbGxSY3ZCbG9ja3MpKSkgeworCisgICAgICAgICAgICAgICAgIHBsZSA9IFJlbW92ZUhlYWRMaXN0KCZhZGFwdGVyLT5BbGxSY3ZCbG9ja3MpOworICAgICAgICAgICAgICAgICBSY3ZCbG9ja0hkciA9IGNvbnRhaW5lcl9vZihwbGUsIHN0cnVjdCBzeGdfcmN2X2Jsb2NrX2hkciwgQWxsTGlzdCk7CisKKyAgICAgICAgICAgICAgICBpZihSY3ZCbG9ja0hkci0+VmlydHVhbEFkZHJlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfUmN2QmxvY2sgPSBSY3ZCbG9ja0hkci0+VmlydHVhbEFkZHJlc3M7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7IGk8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKyssIHRlbXBfUmN2QmxvY2sgKz0gU1hHX1JDVl9EQVRBX0hEUl9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJjdkRhdGFCdWZmZXJIZHIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgKil0ZW1wX1JjdkJsb2NrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWEdfRlJFRV9SQ1ZfUEFDS0VUKFJjdkRhdGFCdWZmZXJIZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTWEdfUkNWX0JMT0NLX1NJWkUoU1hHX1JDVl9EQVRBX0hEUl9TSVpFKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmN2QmxvY2tIZHItPlZpcnR1YWxBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSY3ZCbG9ja0hkci0+UGh5c2ljYWxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICBhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50LS07CisJfQorCUFTU0VSVChhZGFwdGVyLT5BbGxSY3ZCbG9ja0NvdW50ID09IDApOworCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhGclJCbGsiLAorCQkJYWRhcHRlciwgMCwgMCwgMCk7Cit9Cit2b2lkIHN4Z19mcmVlX21jYXN0X2FkZHJzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCit7CisJc3RydWN0IHN4Z19tdWx0aWNhc3RfYWRkcmVzcyAgICAqYWRkcmVzczsKKyAgICAgICAgd2hpbGUoYWRhcHRlci0+TXVsdGljYXN0QWRkcnMpIHsKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gYWRhcHRlci0+TXVsdGljYXN0QWRkcnM7CisgICAgICAgICAgICAgICAgYWRhcHRlci0+TXVsdGljYXN0QWRkcnMgPSBhZGRyZXNzLT5OZXh0OworCQlrZnJlZShhZGRyZXNzKTsKKyAgICAgICAgIH0KKworICAgICAgICBhZGFwdGVyLT5NdWx0aWNhc3RNYXNrPSAwOworfQorCit2b2lkIHN4Z191bm1hcF9yZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwlpZihhZGFwdGVyLT5Id1JlZ3MpIHsKKyAgICAgICAgCWlvdW5tYXAoKHZvaWQgKilhZGFwdGVyLT5Id1JlZ3MpOworICAgICAgICAgfQorICAgICAgICBpZihhZGFwdGVyLT5VY29kZVJlZ3MpIHsKKwkJaW91bm1hcCgodm9pZCAqKWFkYXB0ZXItPlVjb2RlUmVncyk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCA9PSAwKTsKKyAgICAgICAgU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEZyUkJsayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLCAwLCAwLCAwKTsKK30KKworCisKIC8qCi0gKiBTeGdGcmVlUmVzb3VyY2VzIC0gRnJlZSBldmVyeXRoaW5nIGFsbG9jYXRlZCBpbiBTeGdBbGxvY2F0ZVJlc291cmNlcworICogc3hnX2ZyZWVfcmVzb3VyY2VzIC0gRnJlZSBldmVyeXRoaW5nIGFsbG9jYXRlZCBpbiBTeGdBbGxvY2F0ZVJlc291cmNlcwogICoKICAqIEFyZ3VtZW50cyAtCiAgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKQEAgLTI4OTYsOTQgKzM2NzksNzYgQEAKICAqIFJldHVybgogICoJbm9uZQogICovCi12b2lkIFN4Z0ZyZWVSZXNvdXJjZXMoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3ZvaWQgc3hnX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCiB7CiAJdTMyIFJzc0lkcywgSXNyQ291bnQ7Ci0JUFRDUF9PQkpFQ1QgVGNwT2JqZWN0OwotCXUzMiBpOwotCUJPT0xFQU4gVGltZXJDYW5jZWxsZWQ7Ci0KLQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJGcmVlUmVzIiwKLQkJICBhZGFwdGVyLCBhZGFwdGVyLT5NYXhUY2JzLCAwLCAwKTsKLQogCVJzc0lkcyA9IFNYR19SU1NfQ1BVX0NPVU5UKGFkYXB0ZXIpOwotCUlzckNvdW50ID0gYWRhcHRlci0+TXNpRW5hYmxlZCA/IFJzc0lkcyA6IDE7CisJSXNyQ291bnQgPSBhZGFwdGVyLT5tc2lfZW5hYmxlZCA/IFJzc0lkcyA6IDE7CiAKIAlpZiAoYWRhcHRlci0+QmFzaWNBbGxvY2F0aW9ucyA9PSBGQUxTRSkgewotCQkvKiBObyBhbGxvY2F0aW9ucyBoYXZlIGJlZW4gbWFkZSwgaW5jbHVkaW5nIHNwaW5sb2NrcywgKi8KLQkJLyogb3IgbGlzdGhlYWQgaW5pdGlhbGl6YXRpb25zLiAgUmV0dXJuLiAqLworCQkvKgorCQkgKiBObyBhbGxvY2F0aW9ucyBoYXZlIGJlZW4gbWFkZSwgaW5jbHVkaW5nIHNwaW5sb2NrcywKKwkJICogb3IgbGlzdGhlYWQgaW5pdGlhbGl6YXRpb25zLiAgUmV0dXJuLgorCQkgKi8KIAkJcmV0dXJuOwogCX0KIAogCWlmICghKElzTGlzdEVtcHR5KCZhZGFwdGVyLT5BbGxSY3ZCbG9ja3MpKSkgewotCQlTeGdGcmVlUmN2QmxvY2tzKGFkYXB0ZXIpOworCQlzeGdfZnJlZV9yY3ZibG9ja3MoYWRhcHRlcik7CiAJfQogCWlmICghKElzTGlzdEVtcHR5KCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzKSkpIHsKLQkJU3hnRnJlZVNnbEJ1ZmZlcnMoYWRhcHRlcik7CisJCXN4Z19mcmVlX3NnbF9idWZmZXJzKGFkYXB0ZXIpOwogCX0KLQkvKiBGcmVlIGV2ZW50IHF1ZXVlcy4gKi8KLQlpZiAoYWRhcHRlci0+RXZlbnRSaW5ncykgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBTWEdfRVZFTlRfUklORykgKiBSc3NJZHMsCi0JCQkJICAgIGFkYXB0ZXItPkV2ZW50UmluZ3MsIGFkYXB0ZXItPlBFdmVudFJpbmdzKTsKLQl9Ci0JaWYgKGFkYXB0ZXItPklzcikgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKLQkJCQkgICAgc2l6ZW9mKHUzMikgKiBJc3JDb3VudCwKLQkJCQkgICAgYWRhcHRlci0+SXNyLCBhZGFwdGVyLT5QSXNyKTsKLQl9CisKIAlpZiAoYWRhcHRlci0+WG10UmluZ1plcm9JbmRleCkgewogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwKIAkJCQkgICAgc2l6ZW9mKHUzMiksCiAJCQkJICAgIGFkYXB0ZXItPlhtdFJpbmdaZXJvSW5kZXgsCiAJCQkJICAgIGFkYXB0ZXItPlBYbXRSaW5nWmVyb0luZGV4KTsKIAl9Ci0JaWYgKGFkYXB0ZXItPkluZGlyZWN0aW9uVGFibGUpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCi0JCQkJICAgIFNYR19NQVhfUlNTX1RBQkxFX1NJWkUsCi0JCQkJICAgIGFkYXB0ZXItPkluZGlyZWN0aW9uVGFibGUsCi0JCQkJICAgIGFkYXB0ZXItPlBJbmRpcmVjdGlvblRhYmxlKTsKKyAgICAgICAgaWYgKGFkYXB0ZXItPklzcikgeworICAgICAgICAgICAgICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHUzMikgKiBJc3JDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPklzciwgYWRhcHRlci0+UElzcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWRhcHRlci0+RXZlbnRSaW5ncykgeworICAgICAgICAgICAgICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzeGdfZXZlbnRfcmluZykgKiBSc3NJZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5FdmVudFJpbmdzLCBhZGFwdGVyLT5QRXZlbnRSaW5ncyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFkYXB0ZXItPlJjdlJpbmdzKSB7CisgICAgICAgICAgICAgICAgcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9yaW5nKSAqIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPlJjdlJpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5QUmN2UmluZ3MpOworICAgICAgICAgICAgICAgIGFkYXB0ZXItPlJjdlJpbmdzID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKGFkYXB0ZXItPlhtdFJpbmdzKSB7CisgICAgICAgICAgICAgICAgcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc3hnX3htdF9yaW5nKSAqIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPlhtdFJpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5QWG10UmluZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+WG10UmluZ3MgPSBOVUxMOworICAgICAgICB9CisKKwlpZiAoYWRhcHRlci0+dWNvZGVfc3RhdHMpIHsKKwkJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wY2lkZXYsCisJCQkJc2l6ZW9mKHN0cnVjdCBzeGdfdWNvZGVfc3RhdHMpLAorCQkJCSBhZGFwdGVyLT5wdWNvZGVfc3RhdHMsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCWFkYXB0ZXItPnVjb2RlX3N0YXRzID0gTlVMTDsKIAl9CiAKLQlTWEdfRlJFRV9QQUNLRVRfUE9PTChhZGFwdGVyLT5QYWNrZXRQb29sSGFuZGxlKTsKLQlTWEdfRlJFRV9CVUZGRVJfUE9PTChhZGFwdGVyLT5CdWZmZXJQb29sSGFuZGxlKTsKIAogCS8qIFVubWFwIHJlZ2lzdGVyIHNwYWNlcyAqLwotCVN4Z1VubWFwUmVzb3VyY2VzKGFkYXB0ZXIpOworCXN4Z191bm1hcF9yZXNvdXJjZXMoYWRhcHRlcik7CiAKLQkvKiBEZXJlZ2lzdGVyIERNQSAqLwotCWlmIChhZGFwdGVyLT5EbWFIYW5kbGUpIHsKLQkJU1hHX0RFUkVHSVNURVJfRE1BKGFkYXB0ZXItPkRtYUhhbmRsZSk7Ci0JfQotCS8qIERlcmVnaXN0ZXIgaW50ZXJydXB0ICovCi0JU3hnRGVyZWdpc3RlckludGVycnVwdChhZGFwdGVyKTsKLQotCS8qIFBvc3NpYmx5IGZyZWUgc3lzdGVtIGluZm8gKDUuMiBvbmx5KSAqLwotCVNYR19SRUxFQVNFX1NZU1RFTV9JTkZPKGFkYXB0ZXIpOwotCi0JU3hnRGlhZ0ZyZWVSZXNvdXJjZXMoYWRhcHRlcik7Ci0KLQlTeGdGcmVlTUNhc3RBZGRycyhhZGFwdGVyKTsKLQotCWlmIChTWEdfVElNRVJfQUxMT0NBVEVEKGFkYXB0ZXItPlJlc2V0VGltZXIpKSB7Ci0JCVNYR19DQU5DRUxfVElNRVIoYWRhcHRlci0+UmVzZXRUaW1lciwgVGltZXJDYW5jZWxsZWQpOwotCQlTWEdfRlJFRV9USU1FUihhZGFwdGVyLT5SZXNldFRpbWVyKTsKLQl9Ci0JaWYgKFNYR19USU1FUl9BTExPQ0FURUQoYWRhcHRlci0+UnNzVGltZXIpKSB7Ci0JCVNYR19DQU5DRUxfVElNRVIoYWRhcHRlci0+UnNzVGltZXIsIFRpbWVyQ2FuY2VsbGVkKTsKLQkJU1hHX0ZSRUVfVElNRVIoYWRhcHRlci0+UnNzVGltZXIpOwotCX0KLQlpZiAoU1hHX1RJTUVSX0FMTE9DQVRFRChhZGFwdGVyLT5PZmZsb2FkVGltZXIpKSB7Ci0JCVNYR19DQU5DRUxfVElNRVIoYWRhcHRlci0+T2ZmbG9hZFRpbWVyLCBUaW1lckNhbmNlbGxlZCk7Ci0JCVNYR19GUkVFX1RJTUVSKGFkYXB0ZXItPk9mZmxvYWRUaW1lcik7Ci0JfQorCXN4Z19mcmVlX21jYXN0X2FkZHJzKGFkYXB0ZXIpOwogCiAJYWRhcHRlci0+QmFzaWNBbGxvY2F0aW9ucyA9IEZBTFNFOwogCi0JU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEZyZWVSZXMiLAotCQkgIGFkYXB0ZXIsIGFkYXB0ZXItPk1heFRjYnMsIDAsIDApOwogfQotI2VuZGlmCiAKIC8qCiAgKiBzeGdfYWxsb2NhdGVfY29tcGxldGUgLQpAQCAtMzAwMCwzMSArMzc2NSwzNCBAQAogICogUmV0dXJuCiAgKglOb25lLgogICovCi1zdGF0aWMgdm9pZCBzeGdfYWxsb2NhdGVfY29tcGxldGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKK3N0YXRpYyBpbnQgc3hnX2FsbG9jYXRlX2NvbXBsZXRlKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCiAJCQkJICB2b2lkICpWaXJ0dWFsQWRkcmVzcywKIAkJCQkgIGRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzLAotCQkJCSAgdTMyIExlbmd0aCwgZW51bSBTWEdfQlVGRkVSX1RZUEUgQ29udGV4dCkKKwkJCQkgIHUzMiBMZW5ndGgsIGVudW0gc3hnX2J1ZmZlcl90eXBlIENvbnRleHQpCiB7CisJaW50IHN0YXR1cyA9IDA7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiQWxsb2NDbXAiLAogCQkgIGFkYXB0ZXIsIFZpcnR1YWxBZGRyZXNzLCBMZW5ndGgsIENvbnRleHQpOwotCUFTU0VSVChhZGFwdGVyLT5BbGxvY2F0aW9uc1BlbmRpbmcpOwotCS0tYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nOworCUFTU0VSVChhdG9taWNfcmVhZCgmYWRhcHRlci0+cGVuZGluZ19hbGxvY2F0aW9ucykpOworCWF0b21pY19kZWMoJmFkYXB0ZXItPnBlbmRpbmdfYWxsb2NhdGlvbnMpOwogCiAJc3dpdGNoIChDb250ZXh0KSB7CiAKIAljYXNlIFNYR19CVUZGRVJfVFlQRV9SQ1Y6Ci0JCXN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZShhZGFwdGVyLAorCQlzdGF0dXMgPSBzeGdfYWxsb2NhdGVfcmN2YmxvY2tfY29tcGxldGUoYWRhcHRlciwKIAkJCQkJICAgICAgIFZpcnR1YWxBZGRyZXNzLAogCQkJCQkgICAgICAgUGh5c2ljYWxBZGRyZXNzLCBMZW5ndGgpOwogCQlicmVhazsKIAljYXNlIFNYR19CVUZGRVJfVFlQRV9TR0w6Ci0JCXN4Z19hbGxvY2F0ZV9zZ2xfYnVmZmVyX2NvbXBsZXRlKGFkYXB0ZXIsIChzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSKikKKwkJc3hnX2FsbG9jYXRlX3NnbF9idWZmZXJfY29tcGxldGUoYWRhcHRlciwgKHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgKikKIAkJCQkJCSBWaXJ0dWFsQWRkcmVzcywKIAkJCQkJCSBQaHlzaWNhbEFkZHJlc3MsIExlbmd0aCk7CiAJCWJyZWFrOwogCX0KIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJYQWxvY0NtcCIsCiAJCSAgYWRhcHRlciwgVmlydHVhbEFkZHJlc3MsIExlbmd0aCwgQ29udGV4dCk7CisKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAvKgpAQCAtMzA0MCw3ICszODA4LDcgQEAKICAqCWludAogICovCiBzdGF0aWMgaW50IHN4Z19hbGxvY2F0ZV9idWZmZXJfbWVtb3J5KHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCi0JCQkJICAgICAgdTMyIFNpemUsIGVudW0gU1hHX0JVRkZFUl9UWVBFIEJ1ZmZlclR5cGUpCisJCQkJICAgICAgdTMyIFNpemUsIGVudW0gc3hnX2J1ZmZlcl90eXBlIEJ1ZmZlclR5cGUpCiB7CiAJaW50IHN0YXR1czsKIAl2b2lkICpCdWZmZXI7CkBAIC0zMDQ4LDM5ICszODE2LDQwIEBACiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbGxvY01lbSIsCiAJCSAgYWRhcHRlciwgU2l6ZSwgQnVmZmVyVHlwZSwgMCk7Ci0JLyogR3JhYiB0aGUgYWRhcHRlciBsb2NrIGFuZCBjaGVjayB0aGUgc3RhdGUuICovCi0JLyogSWYgd2UncmUgaW4gYW55dGhpbmcgb3RoZXIgdGhhbiBJTklUSUFMSVpJTkcgb3IgKi8KLQkvKiBSVU5OSU5HIHN0YXRlLCBmYWlsLiAgVGhpcyBpcyB0byBwcmV2ZW50ICovCi0JLyogYWxsb2NhdGlvbnMgaW4gYW4gaW1wcm9wZXIgZHJpdmVyIHN0YXRlICovCi0Jc3Bpbl9sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7CisJLyoKKwkgKiBHcmFiIHRoZSBhZGFwdGVyIGxvY2sgYW5kIGNoZWNrIHRoZSBzdGF0ZS4gSWYgd2UncmUgaW4gYW55dGhpbmcgb3RoZXIKKwkgKiB0aGFuIElOSVRJQUxJWklORyBvciBSVU5OSU5HIHN0YXRlLCBmYWlsLiAgVGhpcyBpcyB0byBwcmV2ZW50CisJICogYWxsb2NhdGlvbnMgaW4gYW4gaW1wcm9wZXIgZHJpdmVyIHN0YXRlCisJICovCiAKLQkvKiBJbmNyZW1lbnQgdGhlIEFsbG9jYXRpb25zUGVuZGluZyBjb3VudCB3aGlsZSBob2xkaW5nICovCi0JLyogdGhlIGxvY2suICBQYXVzZSBwcm9jZXNzaW5nIHJlbGllcyBvbiB0aGlzICovCi0JKythZGFwdGVyLT5BbGxvY2F0aW9uc1BlbmRpbmc7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPkFkYXB0ZXJMb2NrKTsKKyAJYXRvbWljX2luYygmYWRhcHRlci0+cGVuZGluZ19hbGxvY2F0aW9ucyk7CiAKLQkvKiBBdCBpbml0aWFsaXphdGlvbiB0aW1lIGFsbG9jYXRlIHJlc291cmNlcyBzeW5jaHJvbm91c2x5LiAqLwotCUJ1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBjaWRldiwgU2l6ZSwgJnBCdWZmZXIpOworCWlmKEJ1ZmZlclR5cGUgIT0gU1hHX0JVRkZFUl9UWVBFX1NHTCkKKwkJQnVmZmVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGNpZGV2LCBTaXplLCAmcEJ1ZmZlcik7CisJZWxzZSB7CisJCUJ1ZmZlciA9IGt6YWxsb2MoU2l6ZSwgR0ZQX0FUT01JQyk7CisJCXBCdWZmZXIgPSAoZG1hX2FkZHJfdClOVUxMOworCX0KIAlpZiAoQnVmZmVyID09IE5VTEwpIHsKLQkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5BZGFwdGVyTG9jayk7Ci0JCS8qIERlY3JlbWVudCB0aGUgQWxsb2NhdGlvbnNQZW5kaW5nIGNvdW50IHdoaWxlIGhvbGRpbmcgKi8KLQkJLyogdGhlIGxvY2suICBQYXVzZSBwcm9jZXNzaW5nIHJlbGllcyBvbiB0aGlzICovCi0JCS0tYWRhcHRlci0+QWxsb2NhdGlvbnNQZW5kaW5nOwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+QWRhcHRlckxvY2spOworCQkvKgorCQkgKiBEZWNyZW1lbnQgdGhlIEFsbG9jYXRpb25zUGVuZGluZyBjb3VudCB3aGlsZSBob2xkaW5nCisJCSAqIHRoZSBsb2NrLiAgUGF1c2UgcHJvY2Vzc2luZyByZWxpZXMgb24gdGhpcworCQkgKi8KKyAJCWF0b21pY19kZWMoJmFkYXB0ZXItPnBlbmRpbmdfYWxsb2NhdGlvbnMpOwogCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbGNNZW1GMSIsCiAJCQkgIGFkYXB0ZXIsIFNpemUsIEJ1ZmZlclR5cGUsIDApOwogCQlyZXR1cm4gKFNUQVRVU19SRVNPVVJDRVMpOwogCX0KLQlzeGdfYWxsb2NhdGVfY29tcGxldGUoYWRhcHRlciwgQnVmZmVyLCBwQnVmZmVyLCBTaXplLCBCdWZmZXJUeXBlKTsKLQlzdGF0dXMgPSBTVEFUVVNfU1VDQ0VTUzsKKwlzdGF0dXMgPSBzeGdfYWxsb2NhdGVfY29tcGxldGUoYWRhcHRlciwgQnVmZmVyLCBwQnVmZmVyLCBTaXplLCBCdWZmZXJUeXBlKTsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbG9jTWVtIiwKIAkJICBhZGFwdGVyLCBTaXplLCBCdWZmZXJUeXBlLCBzdGF0dXMpOwotCXJldHVybiAoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAvKgotICogc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlIC0gQ29tcGxldGUgYSByZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2sgYWxsb2NhdGlvbgorICogc3hnX2FsbG9jYXRlX3JjdmJsb2NrX2NvbXBsZXRlIC0gQ29tcGxldGUgYSByZWNlaXZlIGRlc2NyaXB0b3IKKyAqIAkJCQkJYmxvY2sgYWxsb2NhdGlvbgogICoKICAqIEFyZ3VtZW50cyAtCiAgKglhZGFwdGVyCQkJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQpAQCAtMzA4OSw5ICszODU4LDggQEAKICAqCUxlbmd0aAkJCQktIE1lbW9yeSBsZW5ndGgKICAqCiAgKiBSZXR1cm4KLSAqCiAgKi8KLXN0YXRpYyB2b2lkIHN4Z19hbGxvY2F0ZV9yY3ZibG9ja19jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAorc3RhdGljIGludCBzeGdfYWxsb2NhdGVfcmN2YmxvY2tfY29tcGxldGUoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKIAkJCQkJICAgdm9pZCAqUmN2QmxvY2ssCiAJCQkJCSAgIGRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzLAogCQkJCQkgICB1MzIgTGVuZ3RoKQpAQCAtMzA5OSwxMSArMzg2NywxMSBAQAogCXUzMiBpOwogCXUzMiBCdWZmZXJTaXplID0gYWRhcHRlci0+UmVjZWl2ZUJ1ZmZlclNpemU7CiAJdTY0IFBhZGRyOwotCXN0cnVjdCBTWEdfUkNWX0JMT0NLX0hEUiAqUmN2QmxvY2tIZHI7Ci0JdW5zaWduZWQgY2hhciAqUmN2RGF0YUJ1ZmZlcjsKLQlzdHJ1Y3QgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgKlJjdkRhdGFCdWZmZXJIZHI7Ci0Jc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyAqUmN2RGVzY3JpcHRvckJsb2NrOwotCXN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSICpSY3ZEZXNjcmlwdG9yQmxvY2tIZHI7CisJdm9pZCAqdGVtcF9SY3ZCbG9jazsKKwlzdHJ1Y3Qgc3hnX3Jjdl9ibG9ja19oZHIgKlJjdkJsb2NrSGRyOworCXN0cnVjdCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciAqUmN2RGF0YUJ1ZmZlckhkcjsKKwlzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrICpSY3ZEZXNjcmlwdG9yQmxvY2s7CisJc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9ja19oZHIgKlJjdkRlc2NyaXB0b3JCbG9ja0hkcjsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkFsUmN2QmxrIiwKIAkJICBhZGFwdGVyLCBSY3ZCbG9jaywgTGVuZ3RoLCAwKTsKQEAgLTMxMTMsNDIgKzM4ODEsMzMgQEAKIAltZW1zZXQoUmN2QmxvY2ssIDAsIExlbmd0aCk7CiAJQVNTRVJUKChCdWZmZXJTaXplID09IFNYR19SQ1ZfREFUQV9CVUZGRVJfU0laRSkgfHwKIAkgICAgICAgKEJ1ZmZlclNpemUgPT0gU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRSkpOwotCUFTU0VSVChMZW5ndGggPT0gU1hHX1JDVl9CTE9DS19TSVpFKEJ1ZmZlclNpemUpKTsKLQkvKiBGaXJzdCwgaW5pdGlhbGl6ZSB0aGUgY29udGFpbmVkIHBvb2wgb2YgcmVjZWl2ZSBkYXRhICovCi0JLyogYnVmZmVycy4gIFRoaXMgaW5pdGlhbGl6YXRpb24gcmVxdWlyZXMgTkJML05CL01ETCBhbGxvY2F0aW9ucywgKi8KLQkvKiBJZiBhbnkgb2YgdGhlbSBmYWlsLCBmcmVlIHRoZSBibG9jayBhbmQgcmV0dXJuIHdpdGhvdXQgKi8KLQkvKiBxdWV1ZWluZyB0aGUgc2hhcmVkIG1lbW9yeSAqLwotCVJjdkRhdGFCdWZmZXIgPSBSY3ZCbG9jazsKLSNpZiAwCi0JZm9yIChpID0gMCwgUGFkZHIgPSAqUGh5c2ljYWxBZGRyZXNzOwotCSAgICAgaSA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOwotCSAgICAgaSsrLCBQYWRkci5Mb3dQYXJ0ICs9IEJ1ZmZlclNpemUsIFJjdkRhdGFCdWZmZXIgKz0gQnVmZmVyU2l6ZSkKLSNlbmRpZgotCQlmb3IgKGkgPSAwLCBQYWRkciA9IFBoeXNpY2FsQWRkcmVzczsKLQkJICAgICBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7Ci0JCSAgICAgaSsrLCBQYWRkciArPSBCdWZmZXJTaXplLCBSY3ZEYXRhQnVmZmVyICs9IEJ1ZmZlclNpemUpIHsKLQkJCS8qICovCi0JCQlSY3ZEYXRhQnVmZmVySGRyID0KLQkJCSAgICAoc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSKikgKFJjdkRhdGFCdWZmZXIgKwotCQkJCQkJCVNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVAotCQkJCQkJCShCdWZmZXJTaXplKSk7Ci0JCQlSY3ZEYXRhQnVmZmVySGRyLT5WaXJ0dWFsQWRkcmVzcyA9IFJjdkRhdGFCdWZmZXI7Ci0JCQlSY3ZEYXRhQnVmZmVySGRyLT5QaHlzaWNhbEFkZHJlc3MgPSBQYWRkcjsKLQkJCVJjdkRhdGFCdWZmZXJIZHItPlN0YXRlID0gU1hHX0JVRkZFUl9VUFNUUkVBTTsJLyogRm9yIEZSRUUgbWFjcm8gYXNzZXJ0aW9uICovCi0JCQlSY3ZEYXRhQnVmZmVySGRyLT5TaXplID0KLQkJCSAgICBTWEdfUkNWX0JVRkZFUl9EQVRBX1NJWkUoQnVmZmVyU2l6ZSk7CisJQVNTRVJUKExlbmd0aCA9PSBTWEdfUkNWX0JMT0NLX1NJWkUoU1hHX1JDVl9EQVRBX0hEUl9TSVpFKSk7CisJLyoKKwkgKiBGaXJzdCwgaW5pdGlhbGl6ZSB0aGUgY29udGFpbmVkIHBvb2wgb2YgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMuCisJICogVGhpcyBpbml0aWFsaXphdGlvbiByZXF1aXJlcyBOQkwvTkIvTURMIGFsbG9jYXRpb25zLCBpZiBhbnkgb2YgdGhlbQorCSAqIGZhaWwsIGZyZWUgdGhlIGJsb2NrIGFuZCByZXR1cm4gd2l0aG91dCBxdWV1ZWluZyB0aGUgc2hhcmVkIG1lbW9yeQorCSAqLworCS8vUmN2RGF0YUJ1ZmZlciA9IFJjdkJsb2NrOworCXRlbXBfUmN2QmxvY2sgPSBSY3ZCbG9jazsKKwlmb3IgKGkgPSAwOyBpIDwgU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0s7CisJCSBpKyssIHRlbXBfUmN2QmxvY2sgKz0gU1hHX1JDVl9EQVRBX0hEUl9TSVpFKSB7CisJCVJjdkRhdGFCdWZmZXJIZHIgPSAoc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICopCisJCQkJCXRlbXBfUmN2QmxvY2s7CisJCS8qIEZvciBGUkVFIG1hY3JvIGFzc2VydGlvbiAqLworCQlSY3ZEYXRhQnVmZmVySGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfVVBTVFJFQU07CisJCVNYR19BTExPQ0FURV9SQ1ZfUEFDS0VUKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIsIEJ1ZmZlclNpemUpOworCQlpZiAoUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldCA9PSBOVUxMKQorCQkJZ290byBmYWlsOwogCi0JCQlTWEdfQUxMT0NBVEVfUkNWX1BBQ0tFVChhZGFwdGVyLCBSY3ZEYXRhQnVmZmVySGRyKTsKLQkJCWlmIChSY3ZEYXRhQnVmZmVySGRyLT5TeGdEdW1iUmN2UGFja2V0ID09IE5VTEwpCi0JCQkJZ290byBmYWlsOworCX0KIAotCQl9CisJLyoKKwkgKiBQbGFjZSB0aGlzIGVudGlyZSBibG9jayBvZiBtZW1vcnkgb24gdGhlIEFsbFJjdkJsb2NrcyBxdWV1ZSBzbyBpdAorCSAqIGNhbiBiZSBmcmVlIGxhdGVyCisJICovCiAKLQkvKiBQbGFjZSB0aGlzIGVudGlyZSBibG9jayBvZiBtZW1vcnkgb24gdGhlIEFsbFJjdkJsb2NrcyBxdWV1ZSBzbyBpdCBjYW4gYmUgKi8KLQkvKiBmcmVlIGxhdGVyICovCi0JUmN2QmxvY2tIZHIgPQotCSAgICAoc3RydWN0IFNYR19SQ1ZfQkxPQ0tfSERSKikgKCh1bnNpZ25lZCBjaGFyICopUmN2QmxvY2sgKwotCQkJCSAgU1hHX1JDVl9CTE9DS19IRFJfT0ZGU0VUKEJ1ZmZlclNpemUpKTsKKwlSY3ZCbG9ja0hkciA9IChzdHJ1Y3Qgc3hnX3Jjdl9ibG9ja19oZHIgKikgKCh1bnNpZ25lZCBjaGFyICopUmN2QmxvY2sgKworCQkJU1hHX1JDVl9CTE9DS19IRFJfT0ZGU0VUKFNYR19SQ1ZfREFUQV9IRFJfU0laRSkpOwogCVJjdkJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzcyA9IFJjdkJsb2NrOwogCVJjdkJsb2NrSGRyLT5QaHlzaWNhbEFkZHJlc3MgPSBQaHlzaWNhbEFkZHJlc3M7CiAJc3Bpbl9sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CkBAIC0zMTU2LDE0ICszOTE1LDE1IEBACiAJSW5zZXJ0VGFpbExpc3QoJmFkYXB0ZXItPkFsbFJjdkJsb2NrcywgJlJjdkJsb2NrSGRyLT5BbGxMaXN0KTsKIAlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOwogCi0JLyogTm93IGZyZWUgdGhlIGNvbnRhaW5lZCByZWNlaXZlIGRhdGEgYnVmZmVycyB0aGF0IHdlIGluaXRpYWxpemVkIGFib3ZlICovCi0JUmN2RGF0YUJ1ZmZlciA9IFJjdkJsb2NrOworCS8qIE5vdyBmcmVlIHRoZSBjb250YWluZWQgcmVjZWl2ZSBkYXRhIGJ1ZmZlcnMgdGhhdCB3ZQorCSAqIGluaXRpYWxpemVkIGFib3ZlICovCisJdGVtcF9SY3ZCbG9jayA9IFJjdkJsb2NrOwogCWZvciAoaSA9IDAsIFBhZGRyID0gUGh5c2ljYWxBZGRyZXNzOwogCSAgICAgaSA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLOwotCSAgICAgaSsrLCBQYWRkciArPSBCdWZmZXJTaXplLCBSY3ZEYXRhQnVmZmVyICs9IEJ1ZmZlclNpemUpIHsKLQkJUmN2RGF0YUJ1ZmZlckhkciA9IChzdHJ1Y3QgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIqKSAoUmN2RGF0YUJ1ZmZlciArCi0JCQkJCQkJICAgICAgIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSX09GRlNFVAotCQkJCQkJCSAgICAgICAoQnVmZmVyU2l6ZSkpOworCSAgICAgaSsrLCBQYWRkciArPSBTWEdfUkNWX0RBVEFfSERSX1NJWkUsCisJICAgICB0ZW1wX1JjdkJsb2NrICs9IFNYR19SQ1ZfREFUQV9IRFJfU0laRSkgeworCQlSY3ZEYXRhQnVmZmVySGRyID0KKwkJCShzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgKil0ZW1wX1JjdkJsb2NrOwogCQlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKIAkJU1hHX0ZSRUVfUkNWX0RBVEFfQlVGRkVSKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOwogCQlzcGluX3VubG9jaygmYWRhcHRlci0+UmN2UUxvY2spOwpAQCAtMzE3MSwxMyArMzkzMSwxMyBAQAogCiAJLyogTG9jYXRlIHRoZSBkZXNjcmlwdG9yIGJsb2NrIGFuZCBwdXQgaXQgb24gYSBzZXBhcmF0ZSBmcmVlIHF1ZXVlICovCiAJUmN2RGVzY3JpcHRvckJsb2NrID0KLQkgICAgKHN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sqKSAoKHVuc2lnbmVkIGNoYXIgKilSY3ZCbG9jayArCisJICAgIChzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrICopICgodW5zaWduZWQgY2hhciAqKVJjdkJsb2NrICsKIAkJCQkJIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19PRkZTRVQKLQkJCQkJIChCdWZmZXJTaXplKSk7CisJCQkJCSAoU1hHX1JDVl9EQVRBX0hEUl9TSVpFKSk7CiAJUmN2RGVzY3JpcHRvckJsb2NrSGRyID0KLQkgICAgKHN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSKikgKCh1bnNpZ25lZCBjaGFyICopUmN2QmxvY2sgKworCSAgICAoc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9ja19oZHIgKikgKCh1bnNpZ25lZCBjaGFyICopUmN2QmxvY2sgKwogCQkJCQkgICAgIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFJfT0ZGU0VUCi0JCQkJCSAgICAgKEJ1ZmZlclNpemUpKTsKKwkJCQkJICAgICAoU1hHX1JDVl9EQVRBX0hEUl9TSVpFKSk7CiAJUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzcyA9IFJjdkRlc2NyaXB0b3JCbG9jazsKIAlSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlBoeXNpY2FsQWRkcmVzcyA9IFBhZGRyOwogCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOwpAQCAtMzE4NSwxNyArMzk0NSwxNSBAQAogCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEFsUkJsayIsCiAJCSAgYWRhcHRlciwgUmN2QmxvY2ssIExlbmd0aCwgMCk7Ci0JcmV0dXJuOwotICAgICAgZmFpbDoKKwlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CitmYWlsOgogCS8qIEZyZWUgYW55IGFsbG9jYXRlZCByZXNvdXJjZXMgKi8KIAlpZiAoUmN2QmxvY2spIHsKLQkJUmN2RGF0YUJ1ZmZlciA9IFJjdkJsb2NrOworCQl0ZW1wX1JjdkJsb2NrID0gUmN2QmxvY2s7CiAJCWZvciAoaSA9IDA7IGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKLQkJICAgICBpKyssIFJjdkRhdGFCdWZmZXIgKz0gQnVmZmVyU2l6ZSkgeworCQkgICAgIGkrKywgdGVtcF9SY3ZCbG9jayArPSBTWEdfUkNWX0RBVEFfSERSX1NJWkUpIHsKIAkJCVJjdkRhdGFCdWZmZXJIZHIgPQotCQkJICAgIChzdHJ1Y3QgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIqKSAoUmN2RGF0YUJ1ZmZlciArCi0JCQkJCQkJU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFJfT0ZGU0VUCi0JCQkJCQkJKEJ1ZmZlclNpemUpKTsKKwkJCSAgICAoc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICopdGVtcF9SY3ZCbG9jazsKIAkJCVNYR19GUkVFX1JDVl9QQUNLRVQoUmN2RGF0YUJ1ZmZlckhkcik7CiAJCX0KIAkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsCkBAIC0zMjA2LDYgKzM5NjQsMTAgQEAKIAkJICBhZGFwdGVyLCBhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQsCiAJCSAgYWRhcHRlci0+RnJlZVJjdkJsb2NrQ291bnQsIGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQpOwogCWFkYXB0ZXItPlN0YXRzLk5vTWVtKys7CisJLyogQXMgYWxsb2NhdGlvbiBmYWlsZWQsIGZyZWUgYWxsIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJsb2Nrcy4uKi8KKwkvL3N4Z19mcmVlX3JjdmJsb2NrcyhhZGFwdGVyKTsKKworCXJldHVybiBTVEFUVVNfUkVTT1VSQ0VTOwogfQogCiAvKgpAQCAtMzIxMyw0NiArMzk3NSw2NSBAQAogICoKICAqIEFyZ3VtZW50cyAtCiAgKglhZGFwdGVyCQkJCS0gQSBwb2ludGVyIHRvIG91ciBhZGFwdGVyIHN0cnVjdHVyZQotICoJU3hnU2dsCQkJCS0gU1hHX1NDQVRURVJfR0FUSEVSIGJ1ZmZlcgorICoJU3hnU2dsCQkJCS0gc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciBidWZmZXIKICAqCVBoeXNpY2FsQWRkcmVzcwkJLSBQaHlzaWNhbCBhZGRyZXNzCiAgKglMZW5ndGgJCQkJLSBNZW1vcnkgbGVuZ3RoCiAgKgogICogUmV0dXJuCi0gKgogICovCiBzdGF0aWMgdm9pZCBzeGdfYWxsb2NhdGVfc2dsX2J1ZmZlcl9jb21wbGV0ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAotCQkJCQkgICAgIHN0cnVjdCBTWEdfU0NBVFRFUl9HQVRIRVIgKlN4Z1NnbCwKKwkJCQkJICAgICBzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyICpTeGdTZ2wsCiAJCQkJCSAgICAgZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3MsCiAJCQkJCSAgICAgdTMyIExlbmd0aCkKIHsKKwl1bnNpZ25lZCBsb25nIHNnbF9mbGFnczsKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJBbFNnbENtcCIsCiAJCSAgYWRhcHRlciwgU3hnU2dsLCBMZW5ndGgsIDApOwotCXNwaW5fbG9jaygmYWRhcHRlci0+U2dsUUxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5TZ2xRTG9jaywgc2dsX2ZsYWdzKTsKIAlhZGFwdGVyLT5BbGxTZ2xCdWZmZXJDb3VudCsrOwotCW1lbXNldChTeGdTZ2wsIDAsIHNpemVvZihzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSKikpOwotCVN4Z1NnbC0+UGh5c2ljYWxBZGRyZXNzID0gUGh5c2ljYWxBZGRyZXNzOwkvKiAqUGh5c2ljYWxBZGRyZXNzOyAqLwotCVN4Z1NnbC0+YWRhcHRlciA9IGFkYXB0ZXI7CS8qIEluaXRpYWxpemUgYmFja3BvaW50ZXIgb25jZSAqLworCS8qIFBoeXNpY2FsQWRkcmVzczsgKi8KKwlTeGdTZ2wtPlBoeXNpY2FsQWRkcmVzcyA9IFBoeXNpY2FsQWRkcmVzczsKKwkvKiBJbml0aWFsaXplIGJhY2twb2ludGVyIG9uY2UgKi8KKwlTeGdTZ2wtPmFkYXB0ZXIgPSBhZGFwdGVyOwogCUluc2VydFRhaWxMaXN0KCZhZGFwdGVyLT5BbGxTZ2xCdWZmZXJzLCAmU3hnU2dsLT5BbGxMaXN0KTsKLQlzcGluX3VubG9jaygmYWRhcHRlci0+U2dsUUxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPlNnbFFMb2NrLCBzZ2xfZmxhZ3MpOwogCVN4Z1NnbC0+U3RhdGUgPSBTWEdfQlVGRkVSX0JVU1k7CiAJU1hHX0ZSRUVfU0dMX0JVRkZFUihhZGFwdGVyLCBTeGdTZ2wsIE5VTEwpOwogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlhBbFNnbCIsCiAJCSAgYWRhcHRlciwgU3hnU2dsLCBMZW5ndGgsIDApOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY2hhciB0ZW1wX21hY19hZGRyZXNzWzZdID0KLSAgICB7IDB4MDAsIDB4YWIsIDB4Y2QsIDB4ZWYsIDB4MTIsIDB4NjkgfTsKIAotc3RhdGljIHZvaWQgc3hnX2FkYXB0ZXJfc2V0X2h3YWRkcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQorc3RhdGljIGludCBzeGdfYWRhcHRlcl9zZXRfaHdhZGRyKHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIpCiB7Ci0vKiAgREJHX0VSUk9SICgiJXMgRU5URVIgY2FyZC0+Y29uZmlnX3NldFsleF0gcG9ydFslZF0gcGh5c3BvcnRbJWRdIGZ1bmN0I1slZF1cbiIsIF9fZnVuY19fLCAqLwotLyogICAgICAgICAgICAgY2FyZC0+Y29uZmlnX3NldCwgYWRhcHRlci0+cG9ydCwgYWRhcHRlci0+cGh5c3BvcnQsIGFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyKTsgKi8KLS8qICovCi0vKiAgc3hnX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsgKi8KKwkvKgorCSAqICBEQkdfRVJST1IgKCIlcyBFTlRFUiBjYXJkLT5jb25maWdfc2V0WyV4XSBwb3J0WyVkXSBwaHlzcG9ydFslZF0gXAorCSAqICBmdW5jdCNbJWRdXG4iLCBfX2Z1bmNfXywgY2FyZC0+Y29uZmlnX3NldCwKKwkgKiAgYWRhcHRlci0+cG9ydCwgYWRhcHRlci0+cGh5c3BvcnQsIGFkYXB0ZXItPmZ1bmN0aW9ubnVtYmVyKTsKKwkgKgorCSAqICBzeGdfZGJnX21hY2FkZHJzKGFkYXB0ZXIpOworCSAqLworCS8qIERCR19FUlJPUiAoIiVzIEFGVEVSIGNvcHlpbmcgZnJvbSBjb25maWcubWFjaW5mbyBpbnRvIGN1cnJtYWNhZGRyXG4iLAorCSAqCSAgIAkJX19GVU5DVElPTl9fKTsKKwkgKi8KIAotCW1lbWNweShhZGFwdGVyLT5tYWNhZGRyLCB0ZW1wX21hY19hZGRyZXNzLCBzaXplb2Yoc3RydWN0IFNYR19DT05GSUdfTUFDKSk7Ci0vKiAgICAgIERCR19FUlJPUiAoIiVzIEFGVEVSIGNvcHlpbmcgZnJvbSBjb25maWcubWFjaW5mbyBpbnRvIGN1cnJtYWNhZGRyXG4iLCBfX2Z1bmNfXyk7ICovCi0vKiAgICAgIHN4Z19kYmdfbWFjYWRkcnMoYWRhcHRlcik7ICovCisJLyogc3hnX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsgKi8KKworCXN0cnVjdCBuZXRfZGV2aWNlICogZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWlmKCFkZXYpCisJeworCQlwcmludGsoInN4ZzogRGV2IGlzIE51bGxcbiIpOworCX0KKworICAgICAgICBEQkdfRVJST1IoIiVzIEVOVEVSICglcylcbiIsIF9fRlVOQ1RJT05fXywgYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKKworICAgICAgICBpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWFkYXB0ZXIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworICAgICAgICB9CisKIAlpZiAoIShhZGFwdGVyLT5jdXJybWFjYWRkclswXSB8fAogCSAgICAgIGFkYXB0ZXItPmN1cnJtYWNhZGRyWzFdIHx8CiAJICAgICAgYWRhcHRlci0+Y3Vycm1hY2FkZHJbMl0gfHwKQEAgLTMyNjIsMTQgKzQwNDMsMTYgQEAKIAl9CiAJaWYgKGFkYXB0ZXItPm5ldGRldikgewogCQltZW1jcHkoYWRhcHRlci0+bmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+Y3Vycm1hY2FkZHIsIDYpOworCQltZW1jcHkoYWRhcHRlci0+bmV0ZGV2LT5wZXJtX2FkZHIsIGFkYXB0ZXItPmN1cnJtYWNhZGRyLCA2KTsKIAl9Ci0vKiAgREJHX0VSUk9SICgiJXMgRVhJVCBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+cG9ydCk7ICovCisJLyogREJHX0VSUk9SICgiJXMgRVhJVCBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgYWRhcHRlci0+cG9ydCk7ICovCiAJc3hnX2RiZ19tYWNhZGRycyhhZGFwdGVyKTsKIAorCXJldHVybiAwOwogfQogCiAjaWYgWFhYVE9ETwotc3RhdGljIGludCBzeGdfbWFjX3NldF9hZGRyZXNzKHBfbmV0X2RldmljZSBkZXYsIHZvaWQgKnB0cikKK3N0YXRpYyBpbnQgc3hnX21hY19zZXRfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwdHIpCiB7CiAJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlcl90ICopIG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcHRyOwpAQCAtMzMwMCwzNCArNDA4MywzNCBAQAogfQogI2VuZGlmCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqICBTWEcgRFJJVkVSIEZVTkNUSU9OUyAgKGJlbG93KSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogLyoKKyAqIFNYRyBEUklWRVIgRlVOQ1RJT05TICAoYmVsb3cpCisgKgogICogc3hnX2luaXRpYWxpemVfYWRhcHRlciAtIEluaXRpYWxpemUgYWRhcHRlcgogICoKICAqIEFyZ3VtZW50cyAtCiAgKglhZGFwdGVyCQktIEEgcG9pbnRlciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUKICAqCi0gKiBSZXR1cm4KLSAqCWludAorICogUmV0dXJuIC0gaW50CiAgKi8KIHN0YXRpYyBpbnQgc3hnX2luaXRpYWxpemVfYWRhcHRlcihzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyKQogewogCXUzMiBSc3NJZHMsIElzckNvdW50OwogCXUzMiBpOwogCWludCBzdGF0dXM7CisJaW50IHN4Z19yY3ZfcmluZ19zaXplID0gU1hHX1JDVl9SSU5HX1NJWkU7CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJJbml0QWRwdCIsCiAJCSAgYWRhcHRlciwgMCwgMCwgMCk7CiAKIAlSc3NJZHMgPSAxOwkJLyogIFhYWFRPRE8gIFNYR19SU1NfQ1BVX0NPVU5UKGFkYXB0ZXIpOyAqLwotCUlzckNvdW50ID0gYWRhcHRlci0+TXNpRW5hYmxlZCA/IFJzc0lkcyA6IDE7CisJSXNyQ291bnQgPSBhZGFwdGVyLT5tc2lfZW5hYmxlZCA/IFJzc0lkcyA6IDE7CiAKLQkvKiBTYW5pdHkgY2hlY2sgU1hHX1VDT0RFX1JFR1Mgc3RydWN0dXJlIGRlZmluaXRpb24gdG8gKi8KLQkvKiBtYWtlIHN1cmUgdGhlIGxlbmd0aCBpcyBjb3JyZWN0ICovCi0JQVNTRVJUKHNpemVvZihzdHJ1Y3QgU1hHX1VDT0RFX1JFR1MpID09IFNYR19SRUdJU1RFUl9TSVpFX1BFUl9DUFUpOworCS8qCisJICogU2FuaXR5IGNoZWNrIFNYR19VQ09ERV9SRUdTIHN0cnVjdHVyZSBkZWZpbml0aW9uIHRvCisJICogbWFrZSBzdXJlIHRoZSBsZW5ndGggaXMgY29ycmVjdAorCSAqLworCUFTU0VSVChzaXplb2Yoc3RydWN0IHN4Z191Y29kZV9yZWdzKSA9PSBTWEdfUkVHSVNURVJfU0laRV9QRVJfQ1BVKTsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwogCVNYR19ESVNBQkxFX0FMTF9JTlRFUlJVUFRTKGFkYXB0ZXIpOwpAQCAtMzM3MCwxOSArNDE1MywyNCBAQAogCS8qIFJlY2VpdmUgcmluZyBiYXNlIGFuZCBzaXplICovCiAJV1JJVEVfUkVHNjQoYWRhcHRlciwKIAkJICAgIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5SY3ZCYXNlLCBhZGFwdGVyLT5QUmN2UmluZ3MsIDApOwotCVdSSVRFX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uUmN2U2l6ZSwgU1hHX1JDVl9SSU5HX1NJWkUsIFRSVUUpOworCWlmIChhZGFwdGVyLT5KdW1ib0VuYWJsZWQgPT0gVFJVRSkKKwkJc3hnX3Jjdl9yaW5nX3NpemUgPSBTWEdfSlVNQk9fUkNWX1JJTkdfU0laRTsKKwlXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLlJjdlNpemUsIHN4Z19yY3ZfcmluZ19zaXplLCBUUlVFKTsKIAogCS8qIFBvcHVsYXRlIHRoZSBjYXJkIHdpdGggcmVjZWl2ZSBidWZmZXJzICovCiAJc3hnX3N0b2NrX3Jjdl9idWZmZXJzKGFkYXB0ZXIpOwogCi0JLyogSW5pdGlhbGl6ZSBjaGVja3N1bSBvZmZsb2FkIGNhcGFiaWxpdGllcy4gIEF0IHRoZSBtb21lbnQgKi8KLQkvKiB3ZSBhbHdheXMgZW5hYmxlIElQIGFuZCBUQ1AgcmVjZWl2ZSBjaGVja3N1bXMgb24gdGhlIGNhcmQuICovCi0JLyogRGVwZW5kaW5nIG9uIHRoZSBjaGVja3N1bSBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieSB0aGUgKi8KLQkvKiB1c2VyLCB3ZSBjYW4gY2hvb3NlIHRvIHJlcG9ydCBvciBpZ25vcmUgdGhlIGNoZWNrc3VtICovCi0JLyogaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdGhlIGNhcmQuICovCisJLyoKKwkgKiBJbml0aWFsaXplIGNoZWNrc3VtIG9mZmxvYWQgY2FwYWJpbGl0aWVzLiAgQXQgdGhlIG1vbWVudCB3ZSBhbHdheXMKKwkgKiBlbmFibGUgSVAgYW5kIFRDUCByZWNlaXZlIGNoZWNrc3VtcyBvbiB0aGUgY2FyZC4gRGVwZW5kaW5nIG9uIHRoZQorCSAqIGNoZWNrc3VtIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB3ZSBjYW4gY2hvb3NlIHRvCisJICogcmVwb3J0IG9yIGlnbm9yZSB0aGUgY2hlY2tzdW0gaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdGhlIGNhcmQuCisJICovCiAJV1JJVEVfUkVHKGFkYXB0ZXItPlVjb2RlUmVnc1swXS5SZWNlaXZlQ2hlY2tzdW0sCiAJCSAgU1hHX1JDVl9UQ1BfQ1NVTV9FTkFCTEVEIHwgU1hHX1JDVl9JUF9DU1VNX0VOQUJMRUQsIFRSVUUpOwogCisJYWRhcHRlci0+ZmxhZ3MgfD0gKFNYR19SQ1ZfVENQX0NTVU1fRU5BQkxFRCB8IFNYR19SQ1ZfSVBfQ1NVTV9FTkFCTEVEICk7CisKIAkvKiBJbml0aWFsaXplIHRoZSBNQUMsIFhBVUkgKi8KIAlEQkdfRVJST1IoInN4ZzogJXMgRU5URVIgc3hnX2luaXRpYWxpemVfbGlua1xuIiwgX19mdW5jX18pOwogCXN0YXR1cyA9IHN4Z19pbml0aWFsaXplX2xpbmsoYWRhcHRlcik7CkBAIC0zMzkxLDEwICs0MTc5LDE2IEBACiAJaWYgKHN0YXR1cyAhPSBTVEFUVVNfU1VDQ0VTUykgewogCQlyZXR1cm4gKHN0YXR1cyk7CiAJfQotCS8qIEluaXRpYWxpemUgRGVhZCB0byBGQUxTRS4gKi8KLQkvKiBTbGljQ2hlY2tGb3JIYW5nIG9yIFNsaWNEdW1wVGhyZWFkIHdpbGwgdGFrZSBpdCBmcm9tIGhlcmUuICovCisJLyoKKwkgKiBJbml0aWFsaXplIERlYWQgdG8gRkFMU0UuCisJICogU2xpY0NoZWNrRm9ySGFuZyBvciBTbGljRHVtcFRocmVhZCB3aWxsIHRha2UgaXQgZnJvbSBoZXJlLgorCSAqLwogCWFkYXB0ZXItPkRlYWQgPSBGQUxTRTsKIAlhZGFwdGVyLT5QaW5nT3V0c3RhbmRpbmcgPSBGQUxTRTsKKwlhZGFwdGVyLT5YbXRGY0VuYWJsZWQgPSBUUlVFOworCWFkYXB0ZXItPlJjdkZjRW5hYmxlZCA9IFRSVUU7CisKKwlhZGFwdGVyLT5TdGF0ZSA9IFNYR19TVEFURV9SVU5OSU5HOwogCiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWEluaXQiLAogCQkgIGFkYXB0ZXIsIDAsIDAsIDApOwpAQCAtMzQxMywxNSArNDIwNywxNCBAQAogICoJc3RhdHVzCiAgKi8KIHN0YXRpYyBpbnQgc3hnX2ZpbGxfZGVzY3JpcHRvcl9ibG9jayhzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLAotCQkJCSAgICAgc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIKLQkJCQkgICAgICpSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpCisJICAgICBzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkciAqUmN2RGVzY3JpcHRvckJsb2NrSGRyKQogewogCXUzMiBpOwotCXN0cnVjdCBTWEdfUklOR19JTkZPICpSY3ZSaW5nSW5mbyA9ICZhZGFwdGVyLT5SY3ZSaW5nWmVyb0luZm87Ci0Jc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSICpSY3ZEYXRhQnVmZmVySGRyOwotCXN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgKlJjdkRlc2NyaXB0b3JCbG9jazsKLQlzdHJ1Y3QgU1hHX0NNRCAqUmluZ0Rlc2NyaXB0b3JDbWQ7Ci0Jc3RydWN0IFNYR19SQ1ZfUklORyAqUmluZ1plcm8gPSAmYWRhcHRlci0+UmN2UmluZ3NbMF07CisJc3RydWN0IHN4Z19yaW5nX2luZm8gKlJjdlJpbmdJbmZvID0gJmFkYXB0ZXItPlJjdlJpbmdaZXJvSW5mbzsKKwlzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgKlJjdkRhdGFCdWZmZXJIZHI7CisJc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jayAqUmN2RGVzY3JpcHRvckJsb2NrOworCXN0cnVjdCBzeGdfY21kICpSaW5nRGVzY3JpcHRvckNtZDsKKwlzdHJ1Y3Qgc3hnX3Jjdl9yaW5nICpSaW5nWmVybyA9ICZhZGFwdGVyLT5SY3ZSaW5nc1swXTsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkZpbEJsayIsCiAJCSAgYWRhcHRlciwgYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCwKQEAgLTM0MjksOCArNDIyMiwxMCBAQAogCiAJQVNTRVJUKFJjdkRlc2NyaXB0b3JCbG9ja0hkcik7CiAKLQkvKiBJZiB3ZSBkb24ndCBoYXZlIHRoZSByZXNvdXJjZXMgdG8gZmlsbCB0aGUgZGVzY3JpcHRvciBibG9jaywgKi8KLQkvKiByZXR1cm4gZmFpbHVyZSAqLworCS8qCisJICogSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcmVzb3VyY2VzIHRvIGZpbGwgdGhlIGRlc2NyaXB0b3IgYmxvY2ssCisJICogcmV0dXJuIGZhaWx1cmUKKwkgKi8KIAlpZiAoKGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCA8IFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLKSB8fAogCSAgICBTWEdfUklOR19GVUxMKFJjdlJpbmdJbmZvKSkgewogCQlhZGFwdGVyLT5TdGF0cy5Ob01lbSsrOwpAQCAtMzQ0MSwyNyArNDIzNiw0MCBAQAogCQkgICAgUmN2UmluZ0luZm8sIFJpbmdEZXNjcmlwdG9yQ21kLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOwogCUFTU0VSVChSaW5nRGVzY3JpcHRvckNtZCk7CiAJUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfT05DQVJEOwotCVJjdkRlc2NyaXB0b3JCbG9jayA9Ci0JICAgIChzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKikgUmN2RGVzY3JpcHRvckJsb2NrSGRyLT5WaXJ0dWFsQWRkcmVzczsKKwlSY3ZEZXNjcmlwdG9yQmxvY2sgPSAoc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jayAqKQorCQkJCSBSY3ZEZXNjcmlwdG9yQmxvY2tIZHItPlZpcnR1YWxBZGRyZXNzOwogCiAJLyogRmlsbCBpbiB0aGUgZGVzY3JpcHRvciBibG9jayAqLwogCWZvciAoaSA9IDA7IGkgPCBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsgaSsrKSB7CiAJCVNYR19HRVRfUkNWX0RBVEFfQlVGRkVSKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIpOwogCQlBU1NFUlQoUmN2RGF0YUJ1ZmZlckhkcik7CisvLwkJQVNTRVJUKFJjdkRhdGFCdWZmZXJIZHItPlN4Z0R1bWJSY3ZQYWNrZXQpOworCQlpZiAoIVJjdkRhdGFCdWZmZXJIZHItPlN4Z0R1bWJSY3ZQYWNrZXQpIHsKKwkJCVNYR19BTExPQ0FURV9SQ1ZfUEFDS0VUKGFkYXB0ZXIsIFJjdkRhdGFCdWZmZXJIZHIsCisJCQkJCQlhZGFwdGVyLT5SZWNlaXZlQnVmZmVyU2l6ZSk7CisJCQlpZihSY3ZEYXRhQnVmZmVySGRyLT5za2IpCisJCQkJUmN2RGF0YUJ1ZmZlckhkci0+U3hnRHVtYlJjdlBhY2tldCA9CisJCQkJCQlSY3ZEYXRhQnVmZmVySGRyLT5za2I7CisJCQllbHNlCisJCQkJZ290byBub19tZW1vcnk7CisJCX0KIAkJU1hHX1JFSU5JQVRJQUxJWkVfUEFDS0VUKFJjdkRhdGFCdWZmZXJIZHItPlN4Z0R1bWJSY3ZQYWNrZXQpOwogCQlSY3ZEYXRhQnVmZmVySGRyLT5TdGF0ZSA9IFNYR19CVUZGRVJfT05DQVJEOwogCQlSY3ZEZXNjcmlwdG9yQmxvY2stPkRlc2NyaXB0b3JzW2ldLlZpcnR1YWxBZGRyZXNzID0KLQkJICAgICh2b2lkICopUmN2RGF0YUJ1ZmZlckhkcjsKKwkJCQkJICAgICh2b2lkICopUmN2RGF0YUJ1ZmZlckhkcjsKKwogCQlSY3ZEZXNjcmlwdG9yQmxvY2stPkRlc2NyaXB0b3JzW2ldLlBoeXNpY2FsQWRkcmVzcyA9CiAJCSAgICBSY3ZEYXRhQnVmZmVySGRyLT5QaHlzaWNhbEFkZHJlc3M7CiAJfQogCS8qIEFkZCB0aGUgZGVzY3JpcHRvciBibG9jayB0byByZWNlaXZlIGRlc2NyaXB0b3IgcmluZyAwICovCiAJUmluZ0Rlc2NyaXB0b3JDbWQtPlNnbCA9IFJjdkRlc2NyaXB0b3JCbG9ja0hkci0+UGh5c2ljYWxBZGRyZXNzOwogCi0JLyogUmN2QnVmZmVyc09uQ2FyZCBpcyBub3QgcHJvdGVjdGVkIHZpYSB0aGUgcmVjZWl2ZSBsb2NrIChzZWUgKi8KLQkvKiBzeGdfcHJvY2Vzc19ldmVudF9xdWV1ZSkgV2UgZG9uJ3Qgd2FudCB0byBncmFwIGEgbG9jayBldmVyeSB0aW1lIGEgKi8KLQkvKiBidWZmZXIgaXMgcmV0dXJuZWQgdG8gdXMsIHNvIHdlIHVzZSBhdG9taWMgaW50ZXJsb2NrZWQgZnVuY3Rpb25zICovCi0JLyogaW5zdGVhZC4gKi8KKwkvKgorCSAqIFJjdkJ1ZmZlcnNPbkNhcmQgaXMgbm90IHByb3RlY3RlZCB2aWEgdGhlIHJlY2VpdmUgbG9jayAoc2VlCisJICogc3hnX3Byb2Nlc3NfZXZlbnRfcXVldWUpIFdlIGRvbid0IHdhbnQgdG8gZ3JhcCBhIGxvY2sgZXZlcnkgdGltZSBhCisJICogYnVmZmVyIGlzIHJldHVybmVkIHRvIHVzLCBzbyB3ZSB1c2UgYXRvbWljIGludGVybG9ja2VkIGZ1bmN0aW9ucworCSAqIGluc3RlYWQuCisJICovCiAJYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCArPSBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSzsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkRzY0JsayIsCkBAIC0zNDczLDYgKzQyODEsMjMgQEAKIAkJICBhZGFwdGVyLCBhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkLAogCQkgIGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCwgYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCk7CiAJcmV0dXJuIChTVEFUVVNfU1VDQ0VTUyk7Citub19tZW1vcnk6CisJZm9yICg7IGkgPj0gMCA7IGktLSkgeworCQlpZiAoUmN2RGVzY3JpcHRvckJsb2NrLT5EZXNjcmlwdG9yc1tpXS5WaXJ0dWFsQWRkcmVzcykgeworCQkJUmN2RGF0YUJ1ZmZlckhkciA9IChzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgKikKKwkJCQkJICAgIFJjdkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcnNbaV0uCisJCQkJCQkJCVZpcnR1YWxBZGRyZXNzOworCQkJUmN2RGVzY3JpcHRvckJsb2NrLT5EZXNjcmlwdG9yc1tpXS5QaHlzaWNhbEFkZHJlc3MgPQorCQkJCQkgICAgKGRtYV9hZGRyX3QpTlVMTDsKKwkJCVJjdkRlc2NyaXB0b3JCbG9jay0+RGVzY3JpcHRvcnNbaV0uVmlydHVhbEFkZHJlc3M9TlVMTDsKKwkJfQorCQlTWEdfRlJFRV9SQ1ZfREFUQV9CVUZGRVIoYWRhcHRlciwgUmN2RGF0YUJ1ZmZlckhkcik7CisJfQorCVJjdkRlc2NyaXB0b3JCbG9ja0hkci0+U3RhdGUgPSBTWEdfQlVGRkVSX0ZSRUU7CisJU1hHX1JFVFVSTl9DTUQoUmluZ1plcm8sIFJjdlJpbmdJbmZvLCBSaW5nRGVzY3JpcHRvckNtZCwKKwkJCVJjdkRlc2NyaXB0b3JCbG9ja0hkcik7CisKKwlyZXR1cm4gKC1FTk9NRU0pOwogfQogCiAvKgpAQCAtMzQ4NiwzNCArNDMxMSw0MiBAQAogICovCiBzdGF0aWMgdm9pZCBzeGdfc3RvY2tfcmN2X2J1ZmZlcnMoc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiAqUmN2RGVzY3JpcHRvckJsb2NrSGRyOworCXN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyICpSY3ZEZXNjcmlwdG9yQmxvY2tIZHI7CisJaW50IHN4Z19yY3ZfZGF0YV9idWZmZXJzID0gU1hHX1JDVl9EQVRBX0JVRkZFUlM7CisJaW50IHN4Z19taW5fcmN2X2RhdGFfYnVmZmVycyA9IFNYR19NSU5fUkNWX0RBVEFfQlVGRkVSUzsKIAogCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIlN0b2NrQnVmIiwKIAkJICBhZGFwdGVyLCBhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkLAogCQkgIGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCwgYWRhcHRlci0+QWxsUmN2QmxvY2tDb3VudCk7Ci0JLyogRmlyc3QsIHNlZSBpZiB3ZSd2ZSBnb3QgbGVzcyB0aGFuIG91ciBtaW5pbXVtIHRocmVzaG9sZCBvZiAqLwotCS8qIHJlY2VpdmUgYnVmZmVycywgdGhlcmUgaXNuJ3QgYW4gYWxsb2NhdGlvbiBpbiBwcm9ncmVzcywgYW5kICovCi0JLyogd2UgaGF2ZW4ndCBleGNlZWRlZCBvdXIgbWF4aW11bS4uIGdldCBhbm90aGVyIGJsb2NrIG9mIGJ1ZmZlcnMgKi8KLQkvKiBOb25lIG9mIHRoaXMgbmVlZHMgdG8gYmUgU01QIHNhZmUuICBJdCdzIHJvdW5kIG51bWJlcnMuICovCi0JaWYgKChhZGFwdGVyLT5GcmVlUmN2QnVmZmVyQ291bnQgPCBTWEdfTUlOX1JDVl9EQVRBX0JVRkZFUlMpICYmCisJLyoKKwkgKiBGaXJzdCwgc2VlIGlmIHdlJ3ZlIGdvdCBsZXNzIHRoYW4gb3VyIG1pbmltdW0gdGhyZXNob2xkIG9mCisJICogcmVjZWl2ZSBidWZmZXJzLCB0aGVyZSBpc24ndCBhbiBhbGxvY2F0aW9uIGluIHByb2dyZXNzLCBhbmQKKwkgKiB3ZSBoYXZlbid0IGV4Y2VlZGVkIG91ciBtYXhpbXVtLi4gZ2V0IGFub3RoZXIgYmxvY2sgb2YgYnVmZmVycworCSAqIE5vbmUgb2YgdGhpcyBuZWVkcyB0byBiZSBTTVAgc2FmZS4gIEl0J3Mgcm91bmQgbnVtYmVycy4KKwkgKi8KKwlpZiAoYWRhcHRlci0+SnVtYm9FbmFibGVkID09IFRSVUUpCisJCXN4Z19taW5fcmN2X2RhdGFfYnVmZmVycyA9IFNYR19NSU5fSlVNQk9fUkNWX0RBVEFfQlVGRkVSUzsKKwlpZiAoKGFkYXB0ZXItPkZyZWVSY3ZCdWZmZXJDb3VudCA8IHN4Z19taW5fcmN2X2RhdGFfYnVmZmVycykgJiYKIAkgICAgKGFkYXB0ZXItPkFsbFJjdkJsb2NrQ291bnQgPCBTWEdfTUFYX1JDVl9CTE9DS1MpICYmCi0JICAgIChhZGFwdGVyLT5BbGxvY2F0aW9uc1BlbmRpbmcgPT0gMCkpIHsKKwkgICAgKGF0b21pY19yZWFkKCZhZGFwdGVyLT5wZW5kaW5nX2FsbG9jYXRpb25zKSA9PSAwKSkgewogCQlzeGdfYWxsb2NhdGVfYnVmZmVyX21lbW9yeShhZGFwdGVyLAotCQkJCQkgICBTWEdfUkNWX0JMT0NLX1NJWkUoYWRhcHRlci0+Ci0JCQkJCQkJICAgICAgUmVjZWl2ZUJ1ZmZlclNpemUpLAorCQkJCQkgICBTWEdfUkNWX0JMT0NLX1NJWkUKKwkJCQkJICAgKFNYR19SQ1ZfREFUQV9IRFJfU0laRSksCiAJCQkJCSAgIFNYR19CVUZGRVJfVFlQRV9SQ1YpOwogCX0KIAkvKiBOb3cgZ3JhYiB0aGUgUmN2UUxvY2sgbG9jayBhbmQgcHJvY2VlZCAqLwogCXNwaW5fbG9jaygmYWRhcHRlci0+UmN2UUxvY2spOwotCXdoaWxlIChhZGFwdGVyLT5SY3ZCdWZmZXJzT25DYXJkIDwgU1hHX1JDVl9EQVRBX0JVRkZFUlMpIHsKLQkJc3RydWN0IExJU1RfRU5UUlkgKl9wbGU7CisJaWYgKGFkYXB0ZXItPkp1bWJvRW5hYmxlZCkKKwkJc3hnX3Jjdl9kYXRhX2J1ZmZlcnMgPSBTWEdfSlVNQk9fUkNWX0RBVEFfQlVGRkVSUzsKKwl3aGlsZSAoYWRhcHRlci0+UmN2QnVmZmVyc09uQ2FyZCA8IHN4Z19yY3ZfZGF0YV9idWZmZXJzKSB7CisJCXN0cnVjdCBsaXN0X2VudHJ5ICpfcGxlOwogCiAJCS8qIEdldCBhIGRlc2NyaXB0b3IgYmxvY2sgKi8KIAkJUmN2RGVzY3JpcHRvckJsb2NrSGRyID0gTlVMTDsKIAkJaWYgKGFkYXB0ZXItPkZyZWVSY3ZCbG9ja0NvdW50KSB7CiAJCQlfcGxlID0gUmVtb3ZlSGVhZExpc3QoJmFkYXB0ZXItPkZyZWVSY3ZCbG9ja3MpOwogCQkJUmN2RGVzY3JpcHRvckJsb2NrSGRyID0KLQkJCSAgICBjb250YWluZXJfb2YoX3BsZSwgc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIsCisJCQkgICAgY29udGFpbmVyX29mKF9wbGUsIHN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyLAogCQkJCQkgRnJlZUxpc3QpOwogCQkJYWRhcHRlci0+RnJlZVJjdkJsb2NrQ291bnQtLTsKIAkJCVJjdkRlc2NyaXB0b3JCbG9ja0hkci0+U3RhdGUgPSBTWEdfQlVGRkVSX0JVU1k7CkBAIC0zNTUzLDEwICs0Mzg2LDEwIEBACiBzdGF0aWMgdm9pZCBzeGdfY29tcGxldGVfZGVzY3JpcHRvcl9ibG9ja3Moc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciwKIAkJCQkJICAgdW5zaWduZWQgY2hhciBJbmRleCkKIHsKLQlzdHJ1Y3QgU1hHX1JDVl9SSU5HICpSaW5nWmVybyA9ICZhZGFwdGVyLT5SY3ZSaW5nc1swXTsKLQlzdHJ1Y3QgU1hHX1JJTkdfSU5GTyAqUmN2UmluZ0luZm8gPSAmYWRhcHRlci0+UmN2UmluZ1plcm9JbmZvOwotCXN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSICpSY3ZEZXNjcmlwdG9yQmxvY2tIZHI7Ci0Jc3RydWN0IFNYR19DTUQgKlJpbmdEZXNjcmlwdG9yQ21kOworCXN0cnVjdCBzeGdfcmN2X3JpbmcgKlJpbmdaZXJvID0gJmFkYXB0ZXItPlJjdlJpbmdzWzBdOworCXN0cnVjdCBzeGdfcmluZ19pbmZvICpSY3ZSaW5nSW5mbyA9ICZhZGFwdGVyLT5SY3ZSaW5nWmVyb0luZm87CisJc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9ja19oZHIgKlJjdkRlc2NyaXB0b3JCbG9ja0hkcjsKKwlzdHJ1Y3Qgc3hnX2NtZCAqUmluZ0Rlc2NyaXB0b3JDbWQ7CiAKIAlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJDbXBSQmxrcyIsCiAJCSAgYWRhcHRlciwgSW5kZXgsIFJjdlJpbmdJbmZvLT5IZWFkLCBSY3ZSaW5nSW5mby0+VGFpbCk7CkBAIC0zNTY0LDEyICs0Mzk3LDEzIEBACiAJLyogTm93IGdyYWIgdGhlIFJjdlFMb2NrIGxvY2sgYW5kIHByb2NlZWQgKi8KIAlzcGluX2xvY2soJmFkYXB0ZXItPlJjdlFMb2NrKTsKIAlBU1NFUlQoSW5kZXggIT0gUmN2UmluZ0luZm8tPlRhaWwpOwotCXdoaWxlIChSY3ZSaW5nSW5mby0+VGFpbCAhPSBJbmRleCkgewotCQkvKiAqLwotCQkvKiBMb2NhdGUgdGhlIGN1cnJlbnQgQ21kIChyaW5nIGRlc2NyaXB0b3IgZW50cnkpLCBhbmQgKi8KLQkJLyogYXNzb2NpYXRlZCByZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2ssIGFuZCBhZHZhbmNlICovCi0JCS8qIHRoZSB0YWlsICovCi0JCS8qICovCisJd2hpbGUgKHN4Z19yaW5nX2dldF9mb3J3YXJkX2RpZmYoUmN2UmluZ0luZm8sIEluZGV4LAorCQkJCQlSY3ZSaW5nSW5mby0+VGFpbCkgPiAzKSB7CisJCS8qCisJCSAqIExvY2F0ZSB0aGUgY3VycmVudCBDbWQgKHJpbmcgZGVzY3JpcHRvciBlbnRyeSksIGFuZAorCQkgKiBhc3NvY2lhdGVkIHJlY2VpdmUgZGVzY3JpcHRvciBibG9jaywgYW5kIGFkdmFuY2UKKwkJICogdGhlIHRhaWwKKwkJICovCiAJCVNYR19SRVRVUk5fQ01EKFJpbmdaZXJvLAogCQkJICAgICAgIFJjdlJpbmdJbmZvLAogCQkJICAgICAgIFJpbmdEZXNjcmlwdG9yQ21kLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOwpAQCAtMzU3OSwyMyArNDQxMyw2NiBAQAogCiAJCS8qIENsZWFyIHRoZSBTR0wgZmllbGQgKi8KIAkJUmluZ0Rlc2NyaXB0b3JDbWQtPlNnbCA9IDA7Ci0JCS8qIEF0dGVtcHQgdG8gcmVmaWxsIGl0IGFuZCBoYW5kIGl0IHJpZ2h0IGJhY2sgdG8gdGhlICovCi0JCS8qIGNhcmQuICBJZiB3ZSBmYWlsIHRvIHJlZmlsbCBpdCwgZnJlZSB0aGUgZGVzY3JpcHRvciBibG9jayAqLwotCQkvKiBoZWFkZXIuICBUaGUgY2FyZCB3aWxsIGJlIHJlc3RvY2tlZCBsYXRlciB2aWEgdGhlICovCi0JCS8qIFJjdkJ1ZmZlcnNPbkNhcmQgdGVzdCAqLwotCQlpZiAoc3hnX2ZpbGxfZGVzY3JpcHRvcl9ibG9jayhhZGFwdGVyLCBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpID09Ci0JCSAgICBTVEFUVVNfRkFJTFVSRSkgeworCQkvKgorCQkgKiBBdHRlbXB0IHRvIHJlZmlsbCBpdCBhbmQgaGFuZCBpdCByaWdodCBiYWNrIHRvIHRoZQorCQkgKiBjYXJkLiAgSWYgd2UgZmFpbCB0byByZWZpbGwgaXQsIGZyZWUgdGhlIGRlc2NyaXB0b3IgYmxvY2sKKwkJICogaGVhZGVyLiAgVGhlIGNhcmQgd2lsbCBiZSByZXN0b2NrZWQgbGF0ZXIgdmlhIHRoZQorCQkgKiBSY3ZCdWZmZXJzT25DYXJkIHRlc3QKKwkJICovCisJCWlmIChzeGdfZmlsbF9kZXNjcmlwdG9yX2Jsb2NrKGFkYXB0ZXIsCisJCQkgUmN2RGVzY3JpcHRvckJsb2NrSGRyKSA9PSBTVEFUVVNfRkFJTFVSRSkKIAkJCVNYR19GUkVFX1JDVl9ERVNDUklQVE9SX0JMT0NLKGFkYXB0ZXIsCiAJCQkJCQkgICAgICBSY3ZEZXNjcmlwdG9yQmxvY2tIZHIpOwotCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5SY3ZRTG9jayk7CiAJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiWENSQmxrcyIsCiAJCSAgYWRhcHRlciwgSW5kZXgsIFJjdlJpbmdJbmZvLT5IZWFkLCBSY3ZSaW5nSW5mby0+VGFpbCk7CiB9CiAKKy8qCisgKiBSZWFkIHRoZSBzdGF0aXN0aWNzIHdoaWNoIHRoZSBjYXJkIGhhcyBiZWVuIG1haW50YWluaW5nLgorICovCit2b2lkIHN4Z19jb2xsZWN0X3N0YXRpc3RpY3Moc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlcikKK3sKKwlpZihhZGFwdGVyLT51Y29kZV9zdGF0cykKKwkJV1JJVEVfUkVHNjQoYWRhcHRlciwgYWRhcHRlci0+VWNvZGVSZWdzWzBdLkdldFVjb2RlU3RhdHMsCisJCQkJYWRhcHRlci0+cHVjb2RlX3N0YXRzLCAwKTsKKwlhZGFwdGVyLT5zdGF0cy5yeF9maWZvX2Vycm9ycyA9IGFkYXB0ZXItPnVjb2RlX3N0YXRzLT5FUkRyb3BzOworCWFkYXB0ZXItPnN0YXRzLnJ4X292ZXJfZXJyb3JzID0gYWRhcHRlci0+dWNvZGVfc3RhdHMtPk5CRHJvcHM7CisJYWRhcHRlci0+c3RhdHMudHhfZmlmb19lcnJvcnMgPSBhZGFwdGVyLT51Y29kZV9zdGF0cy0+WERyb3BzOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN4Z19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCit7CisJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisKKwlzeGdfY29sbGVjdF9zdGF0aXN0aWNzKGFkYXB0ZXIpOworCXJldHVybiAoJmFkYXB0ZXItPnN0YXRzKTsKK30KKworc3RhdGljIHZvaWQgc3hnX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyX3QgKikgZGF0YTsKKworCWlmIChhZGFwdGVyLT5zdGF0ZSAhPSBBREFQVF9ET1dOKSB7CisJCXN4Z19saW5rX2V2ZW50KGFkYXB0ZXIpOworCQkvKiBSZXNldCB0aGUgdGltZXIgKi8KKwkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgcm91bmRfamlmZmllcyhqaWZmaWVzICsgMiAqIEhaKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzeGdfdXBkYXRlX2xpbmtfc3RhdHVzIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlcl90ICopY29udGFpbmVyX29mCisJCQkJKHdvcmssIHN0cnVjdCBhZGFwdGVyX3QsIHVwZGF0ZV9saW5rX3N0YXR1cyk7CisJaWYgKGxpa2VseShhZGFwdGVyLT5saW5rX3N0YXR1c19jaGFuZ2VkKSkgeworCQlzeGdfbGlua19ldmVudChhZGFwdGVyKTsKKwkJYWRhcHRlci0+bGlua19zdGF0dXNfY2hhbmdlZCA9IDA7CisJfQorfQorCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3hnX2RyaXZlciA9IHsKLQkubmFtZSA9IERSVl9OQU1FLAorCS5uYW1lID0gc3hnX2RyaXZlcl9uYW1lLAogCS5pZF90YWJsZSA9IHN4Z19wY2lfdGJsLAogCS5wcm9iZSA9IHN4Z19lbnRyeV9wcm9iZSwKIAkucmVtb3ZlID0gc3hnX2VudHJ5X3JlbW92ZSwKQEAgLTM2MDMsNyArNDQ4MCw3IEBACiAJLnN1c3BlbmQgPSBzeGdwbV9zdXNwZW5kLAogCS5yZXN1bWUgPSBzeGdwbV9yZXN1bWUsCiAjZW5kaWYKLS8qICAgIC5zaHV0ZG93biAgID0gICAgIHNsaWNfc2h1dGRvd24sICBNT09LX0lOVkVTVElHQVRFICovCisJLyogLnNodXRkb3duICAgPSAgICAgc2xpY19zaHV0ZG93biwgIE1PT0tfSU5WRVNUSUdBVEUgKi8KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHN4Z19tb2R1bGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnLmgKaW5kZXggNjUzY2YzYi4uZjA3YWE3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Zy5oCkBAIC00MiwzNTcgKzQyLDM2OSBAQAogI2lmbmRlZiBfX1NYR19EUklWRVJfSF9fCiAjZGVmaW5lIF9fU1hHX0RSSVZFUl9IX18KIAotI2RlZmluZSBwX25ldF9kZXZpY2Ugc3RydWN0IG5ldF9kZXZpY2UgKgotLy8gU1hHX1NUQVRTIC0gUHJvYmFibHkgbW92ZSB0aGVzZSB0byBzb21lcGxhY2Ugd2hlcmUKLS8vIHRoZSBzbGljc3RhdCAoc3hnc3RhdD8pIHByb2dyYW0gY2FuIGdldCB0aGVtLgotc3RydWN0IFNYR19TVEFUUyB7Ci0JLy8gWG10Ci0JdTMyCQkJCVhtdE5CTDsJCQkJLy8gT2ZmbG9hZCBzZW5kIE5CTCBjb3VudAotCXU2NAkJCQlEdW1iWG10Qnl0ZXM7CQkvLyBEdW1ibmljIHNlbmQgYnl0ZXMKLQl1NjQJCQkJU2xvd1htdEJ5dGVzOwkJLy8gU2xvd3BhdGggc2VuZCBieXRlcwotCXU2NAkJCQlGYXN0WG10Qnl0ZXM7CQkvLyBGYXN0cGF0aCBzZW5kIGJ5dGVzCi0JdTY0CQkJCUR1bWJYbXRQa3RzOwkJLy8gRHVtYm5pYyBzZW5kIHBhY2tldHMKLQl1NjQJCQkJU2xvd1htdFBrdHM7CQkvLyBTbG93cGF0aCBzZW5kIHBhY2tldHMKLQl1NjQJCQkJRmFzdFhtdFBrdHM7CQkvLyBGYXN0cGF0aCBzZW5kIHBhY2tldHMKLSAgICB1NjQJCQkJRHVtYlhtdFVjYXN0UGt0czsJLy8gZGlyZWN0ZWQgcGFja2V0cwotICAgIHU2NAkJCQlEdW1iWG10TWNhc3RQa3RzOwkvLyBNdWx0aWNhc3QgcGFja2V0cwotICAgIHU2NAkJCQlEdW1iWG10QmNhc3RQa3RzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9GUkFNRVNfUkNWCi0gICAgdTY0CQkJCUR1bWJYbXRVY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1hNSVQKLSAgICB1NjQJCQkJRHVtYlhtdE1jYXN0Qnl0ZXM7CS8vIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1hNSVQKLSAgICB1NjQJCQkJRHVtYlhtdEJjYXN0Qnl0ZXM7CS8vIE9JRF9HRU5fQlJPQURDQVNUX0JZVEVTX1hNSVQKLSAgICB1NjQJCQkJWG10RXJyb3JzOwkJCS8vIE9JRF9HRU5fWE1JVF9FUlJPUgotICAgIHU2NAkJCQlYbXREaXNjYXJkczsJCS8vIE9JRF9HRU5fWE1JVF9ESVNDQVJEUwotCXU2NAkJCQlYbXRPazsJCQkJLy8gT0lEX0dFTl9YTUlUX09LCi0JdTY0CQkJCVhtdFFMZW47CQkJLy8gT0lEX0dFTl9UUkFOU01JVF9RVUVVRV9MRU5HVEgKLQl1NjQJCQkJWG10WmVyb0Z1bGw7CQkvLyBUcmFuc21pdCByaW5nIHplcm8gZnVsbAotCS8vIFJjdgotCXUzMgkJCQlSY3ZOQkw7CQkJCS8vIE9mZmxvYWQgcmVjaWV2ZSBOQkwgY291bnQKLQl1NjQJCQkJRHVtYlJjdkJ5dGVzOwkJLy8gZHVtYm5pYyByZWN2IGJ5dGVzCi0gICAgdTY0ICAgICAgICAgICAgIER1bWJSY3ZVY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDVgotICAgIHU2NCAgICAgICAgICAgICBEdW1iUmN2TWNhc3RCeXRlczsJLy8gT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfUkNWCi0gICAgdTY0ICAgICAgICAgICAgIER1bWJSY3ZCY2FzdEJ5dGVzOwkvLyBPSURfR0VOX0JST0FEQ0FTVF9CWVRFU19SQ1YKLQl1NjQJCQkJU2xvd1JjdkJ5dGVzOwkJLy8gU2xvd3BhdGggcmVjdiBieXRlcwotCXU2NAkJCQlGYXN0UmN2Qnl0ZXM7CQkvLyBGYXN0cGF0aCByZWN2IGJ5dGVzCi0gICAgdTY0CQkJCUR1bWJSY3ZQa3RzOwkJLy8gT0lEX0dFTl9ESVJFQ1RFRF9GUkFNRVNfUkNWCi0JdTY0CQkJCUR1bWJSY3ZUY3BQa3RzOwkJLy8gU2VlIFN4Z0NvbGxlY3RTdGF0cwotICAgIHU2NAkJCQlEdW1iUmN2VWNhc3RQa3RzOwkvLyBkaXJlY3RlZCBwYWNrZXRzCi0gICAgdTY0CQkJCUR1bWJSY3ZNY2FzdFBrdHM7CS8vIE11bHRpY2FzdCBwYWNrZXRzCi0gICAgdTY0CQkJCUR1bWJSY3ZCY2FzdFBrdHM7CS8vIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1YKLQl1NjQJCQkJU2xvd1JjdlBrdHM7CQkvLyBPSURfR0VOX0RJUkVDVEVEX0ZSQU1FU19SQ1YKLSAgICB1NjQJCQkJUmN2RXJyb3JzOwkJCS8vIE9JRF9HRU5fUkNWX0VSUk9SCi0gICAgdTY0CQkJCVJjdkRpc2NhcmRzOwkJLy8gT0lEX0dFTl9SQ1ZfRElTQ0FSRFMKLQl1NjQJCQkJUmN2Tm9CdWZmZXI7CQkvLyBPSURfR0VOX1JDVl9OT19CVUZGRVIKLSAgICB1NjQgCQkJUGRxRnVsbDsJCQkvLyBQcm9jZXNzZWQgRGF0YSBRdWV1ZSBGdWxsCi0JdTY0CQkJCUV2ZW50UmluZ0Z1bGw7CQkvLyBFdmVudCByaW5nIGZ1bGwKLQkvLyBWZXJib3NlIHN0YXRzCi0JdTY0CQkJCU1heFNlbmRzOwkJCS8vIE1heCBzZW5kcyBvdXRzdGFuZGluZwotCXU2NAkJCQlOb1NnbEJ1ZjsJCQkvLyBTR0wgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZQotCXU2NAkJCQlTZ2xGYWlsOwkJCS8vIE5ESVMgU0dMIGZhaWx1cmUKLQl1NjQJCQkJU2dsQXN5bmM7CQkJLy8gTkRJUyBTR0wgZmFpbHVyZQotCXU2NAkJCQlOb01lbTsJCQkJLy8gTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQotCXU2NAkJCQlOdW1JbnRzOwkJCS8vIEludGVycnVwdHMKLQl1NjQJCQkJRmFsc2VJbnRzOwkJCS8vIEludGVycnVwdCB3aXRoIElTUiA9PSAwCi0JdTY0CQkJCVhtdERyb3BzOwkJCS8vIE5vIHNhaGFyYSBEUkFNIGJ1ZmZlciBmb3IgeG10Ci0JLy8gU2FoYXJhIHJlY2VpdmUgc3RhdHVzCi0JdTY0CQkJCVRyYW5zcG9ydENzdW07CQkvLyBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfQ1NVTQotCXU2NAkJCQlUcmFuc3BvcnRVZmxvdzsJCS8vIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9VRkxPVwotCXU2NAkJCQlUcmFuc3BvcnRIZHJMZW47CS8vIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU4KLQl1NjQJCQkJTmV0d29ya0NzdW07CQkvLyBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0NTVU06Ci0JdTY0CQkJCU5ldHdvcmtVZmxvdzsJCS8vIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVUZMT1c6Ci0JdTY0CQkJCU5ldHdvcmtIZHJMZW47CQkvLyBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0hEUkxFTjoKLQl1NjQJCQkJUGFyaXR5OwkJCQkvLyBTWEdfUkNWX1NUQVRVU19QQVJJVFkKLQl1NjQJCQkJTGlua1Bhcml0eTsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX1BBUklUWToKLQl1NjQJCQkJTGlua0Vhcmx5OwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfRUFSTFk6Ci0JdTY0CQkJCUxpbmtCdWZPZmxvdzsJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfQlVGT0ZMT1c6Ci0JdTY0CQkJCUxpbmtDb2RlOwkJCS8vIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ09ERToKLQl1NjQJCQkJTGlua0RyaWJibGU7CQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX0RSSUJCTEU6Ci0JdTY0CQkJCUxpbmtDcmM7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19DUkM6Ci0JdTY0CQkJCUxpbmtPZmxvdzsJCQkvLyBTWEdfUkNWX1NUQVRVU19MSU5LX09GTE9XOgotCXU2NAkJCQlMaW5rVWZsb3c7CQkJLy8gU1hHX1JDVl9TVEFUVVNfTElOS19VRkxPVzoKKyNkZWZpbmUgU0xJQ19EVU1QX0VOQUJMRUQJCTAKKworI2RlZmluZSBTWEdfRFJWX05BTUUJInN4ZyIJCS8qIFRCRDogVGhpcyBtaWdodCBiZSByZW1vdmVkIGV2ZW50dWFsbHkgKi8KKyNkZWZpbmUgU1hHX0RSVl9WRVJTSU9OCSIxLjAuMSIKKworZXh0ZXJuIGNoYXIgc3hnX2RyaXZlcl9uYW1lW107CisKKyNkZWZpbmUgU1hHX05FVERFVl9XRUlHSFQgNjQKKworLyoKKyAqIHN0cnVjdCBzeGdfc3RhdHMgLSBQcm9iYWJseSBtb3ZlIHRoZXNlIHRvIHNvbWVwbGFjZSB3aGVyZQorICogdGhlIHNsaWNzdGF0IChzeGdzdGF0PykgcHJvZ3JhbSBjYW4gZ2V0IHRoZW0uCisgKi8KK3N0cnVjdCBzeGdfc3RhdHMgeworCS8qIFhtdCAqLworCXU2NAlEdW1iWG10VWNhc3RQa3RzOwkvKiBkaXJlY3RlZCBwYWNrZXRzICovCisJdTY0CUR1bWJYbXRNY2FzdFBrdHM7CS8qIE11bHRpY2FzdCBwYWNrZXRzICovCisJdTY0CUR1bWJYbXRCY2FzdFBrdHM7CS8qIE9JRF9HRU5fQlJPQURDQVNUX0ZSQU1FU19SQ1YgKi8KKwl1NjQJRHVtYlhtdFVjYXN0Qnl0ZXM7CS8qIE9JRF9HRU5fRElSRUNURURfQllURVNfWE1JVCAqLworCXU2NAlEdW1iWG10TWNhc3RCeXRlczsJLyogT0lEX0dFTl9NVUxUSUNBU1RfQllURVNfWE1JVCAqLworCXU2NAlEdW1iWG10QmNhc3RCeXRlczsJLyogT0lEX0dFTl9CUk9BRENBU1RfQllURVNfWE1JVCAqLworCXU2NAlYbXRRTGVuOwkJLyogT0lEX0dFTl9UUkFOU01JVF9RVUVVRV9MRU5HVEggKi8KKwl1NjQJWG10WmVyb0Z1bGw7CQkvKiBUcmFuc21pdCByaW5nIHplcm8gZnVsbCAqLworCS8qIFJjdiAqLworCXU2NCAgCUR1bWJSY3ZVY2FzdEJ5dGVzOwkvKiBPSURfR0VOX0RJUkVDVEVEX0JZVEVTX1JDViAqLworCXU2NCAgICAJRHVtYlJjdk1jYXN0Qnl0ZXM7CS8qIE9JRF9HRU5fTVVMVElDQVNUX0JZVEVTX1JDViAqLworCXU2NCAgIAlEdW1iUmN2QmNhc3RCeXRlczsJLyogT0lEX0dFTl9CUk9BRENBU1RfQllURVNfUkNWICovCisJdTY0CUR1bWJSY3ZVY2FzdFBrdHM7CS8qIGRpcmVjdGVkIHBhY2tldHMgKi8KKwl1NjQJRHVtYlJjdk1jYXN0UGt0czsJLyogTXVsdGljYXN0IHBhY2tldHMgKi8KKwl1NjQJRHVtYlJjdkJjYXN0UGt0czsJLyogT0lEX0dFTl9CUk9BRENBU1RfRlJBTUVTX1JDViAqLworCXU2NCAJUGRxRnVsbDsJCS8qIFByb2Nlc3NlZCBEYXRhIFF1ZXVlIEZ1bGwgKi8KKwl1NjQJRXZlbnRSaW5nRnVsbDsJCS8qIEV2ZW50IHJpbmcgZnVsbCAqLworCS8qIFZlcmJvc2Ugc3RhdHMgKi8KKwl1NjQJTm9TZ2xCdWY7CQkvKiBTR0wgYnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZSAqLworCXU2NAlOb01lbTsJCQkvKiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlICovCisJdTY0CU51bUludHM7CQkvKiBJbnRlcnJ1cHRzICovCisJdTY0CUZhbHNlSW50czsJCS8qIEludGVycnVwdCB3aXRoIElTUiA9PSAwICovCisJLyogU2FoYXJhIHJlY2VpdmUgc3RhdHVzICovCisJdTY0CVRyYW5zcG9ydENzdW07CQkvKiBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfQ1NVTSAqLworCXU2NAlUcmFuc3BvcnRVZmxvdzsJCS8qIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9VRkxPVyAqLworCXU2NAlUcmFuc3BvcnRIZHJMZW47CS8qIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9IRFJMRU4gKi8KKwl1NjQJTmV0d29ya0NzdW07CQkvKiBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0NTVU06ICovCisJdTY0CU5ldHdvcmtVZmxvdzsJCS8qIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVUZMT1c6ICovCisJdTY0CU5ldHdvcmtIZHJMZW47CQkvKiBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0hEUkxFTjogKi8KKwl1NjQJUGFyaXR5OwkJCS8qIFNYR19SQ1ZfU1RBVFVTX1BBUklUWSAqLworCXU2NAlMaW5rUGFyaXR5OwkJLyogU1hHX1JDVl9TVEFUVVNfTElOS19QQVJJVFk6ICovCisJdTY0CUxpbmtFYXJseTsJCS8qIFNYR19SQ1ZfU1RBVFVTX0xJTktfRUFSTFk6ICovCisJdTY0CUxpbmtCdWZPZmxvdzsJCS8qIFNYR19SQ1ZfU1RBVFVTX0xJTktfQlVGT0ZMT1c6ICovCisJdTY0CUxpbmtDb2RlOwkJLyogU1hHX1JDVl9TVEFUVVNfTElOS19DT0RFOiAqLworCXU2NAlMaW5rRHJpYmJsZTsJCS8qIFNYR19SQ1ZfU1RBVFVTX0xJTktfRFJJQkJMRTogKi8KKwl1NjQJTGlua0NyYzsJCS8qIFNYR19SQ1ZfU1RBVFVTX0xJTktfQ1JDOiAqLworCXU2NAlMaW5rT2Zsb3c7CQkvKiBTWEdfUkNWX1NUQVRVU19MSU5LX09GTE9XOiAqLworCXU2NAlMaW5rVWZsb3c7CQkvKiBTWEdfUkNWX1NUQVRVU19MSU5LX1VGTE9XOiAqLwogfTsKIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRFVNQi1OSUMgU2VuZCBwYXRoIGRlZmluaXRpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERVTUItTklDIFNlbmQgcGF0aCBkZWZpbml0aW9ucyAqLwogCi0jZGVmaW5lIFNYR19DT01QTEVURV9EVU1CX1NFTkQoX3BBZGFwdCwgX3NrYikgeyAgICAgICAgICAgICAgICAgICAgIAkJICAgIAlcCi0JQVNTRVJUKF9za2IpOwkJCQkJCQkJCQkJCQkgICAgCQkJXAotICAgIGRldl9rZnJlZV9za2JfaXJxKF9za2IpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBTWEdfQ09NUExFVEVfRFVNQl9TRU5EKF9wQWRhcHQsIF9za2IsIF9waHlzX2FkZHIsIF9zaXplKSB7CQlcCisJQVNTRVJUKF9za2IpOwkJCQkJCQkJXAorCXBjaV91bm1hcF9zaW5nbGUoX3BBZGFwdC0+cGNpZGV2LCBfc2l6ZSwgX3BoeXNfYWRkciwgUENJX0RNQV9UT0RFVklDRSk7CVwKKwlkZXZfa2ZyZWVfc2tiX2lycShfc2tiKTsgICAgICAgICAgICAgICAgICAgIAkJCQlcCiB9CiAKLSNkZWZpbmUgU1hHX0RST1BfRFVNQl9TRU5EKF9wQWRhcHQsIF9za2IpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAJCSAgICAJXAotCUFTU0VSVChfc2tiKTsJCQkJCQkJCQkJCQkJICAgIAkJCVwKLSAgICBkZXZfa2ZyZWVfc2tiKF9za2IpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU1hHX0RST1BfRFVNQl9TRU5EKF9wQWRhcHQsIF9za2IpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKwlBU1NFUlQoX3NrYik7CQkJCQkJCVwKIH0KIAotLy8gTG9jYXRlIGN1cnJlbnQgcmVjZWl2ZSBoZWFkZXIgYnVmZmVyIGxvY2F0aW9uLiAgVXNlIHRoaXMKLS8vIGluc3RlYWQgb2YgUmN2RGF0YUhkci0+VmlydHVhbEFkZHJlc3Mgc2luY2UgdGhlIGRhdGEKLS8vIG1heSBoYXZlIGJlZW4gb2Zmc2V0IGJ5IFNYR19BRFZBTkNFX01ETF9PRkZTRVQKKy8qCisgKiBMb2NhdGUgY3VycmVudCByZWNlaXZlIGhlYWRlciBidWZmZXIgbG9jYXRpb24uICBVc2UgdGhpcworICogaW5zdGVhZCBvZiBSY3ZEYXRhSGRyLT5WaXJ0dWFsQWRkcmVzcyBzaW5jZSB0aGUgZGF0YQorICogbWF5IGhhdmUgYmVlbiBvZmZzZXQgYnkgU1hHX0FEVkFOQ0VfTURMX09GRlNFVAorICovCiAjZGVmaW5lIFNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04oX1JjdkRhdGFIZHIpICAgICAgICAoX1JjdkRhdGFIZHIpLT5za2ItPmRhdGEKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRHVtYi1OSUMgcmVjZWl2ZSBwcm9jZXNzaW5nCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8gRGVmaW5lIGFuIFNYR19QQUNLRVQgYXMgYW4gTkRJU19QQUNLRVQKKy8qIER1bWItTklDIHJlY2VpdmUgcHJvY2Vzc2luZyAqLworLyogRGVmaW5lIGFuIFNYR19QQUNLRVQgYXMgYW4gTkRJU19QQUNLRVQgKi8KICNkZWZpbmUgUFNYR19QQUNLRVQgICAgICAgc3RydWN0IHNrX2J1ZmYgKgotLy8gSW5kaWNhdGlvbnMgYXJyYXkgc2l6ZQorLyogSW5kaWNhdGlvbnMgYXJyYXkgc2l6ZSAqLwogI2RlZmluZSBTWEdfUkNWX0FSUkFZU0laRQk2NAogCi0jZGVmaW5lIFNYR19BTExPQ0FURV9SQ1ZfUEFDS0VUKF9wQWRhcHQsIF9SY3ZEYXRhQnVmZmVySGRyKSB7CQkJCVwKLQlzdHJ1Y3Qgc2tfYnVmZiAqIHNrYjsJCQkJCQkJCQkJCQkgICAgXAotICAgIHNrYiA9IGFsbG9jX3NrYigyMDQ4LCBHRlBfQVRPTUlDKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoc2tiKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgCShfUmN2RGF0YUJ1ZmZlckhkciktPnNrYiA9IHNrYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBza2ItPm5leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgCShfUmN2RGF0YUJ1ZmZlckhkciktPnNrYiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU1hHX0FMTE9DQVRFX1JDVl9QQUNLRVQoX3BBZGFwdCwgX1JjdkRhdGFCdWZmZXJIZHIsIEJ1ZmZlclNpemUpIHtcCisgICAgc3RydWN0IHNrX2J1ZmYgKiBza2I7CQkJCQkJXAorICAgIHNrYiA9IG5ldGRldl9hbGxvY19za2IoX3BBZGFwdC0+bmV0ZGV2LCBCdWZmZXJTaXplKTsgICAgICAgICAgICAgICAgXAorICAgIGlmIChza2IpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIAkoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IgPSBza2I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorICAgICAgICBza2ItPm5leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCV9SY3ZEYXRhQnVmZmVySGRyLT5QaHlzaWNhbEFkZHJlc3MgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wY2lkZXYsXAorCSAgICBfUmN2RGF0YUJ1ZmZlckhkci0+c2tiLT5kYXRhLCBCdWZmZXJTaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwlcCisJaWYgKFNYR19JTlZBTElEX1NHTChfUmN2RGF0YUJ1ZmZlckhkci0+UGh5c2ljYWxBZGRyZXNzLEJ1ZmZlclNpemUpKSAgXAorCQlwcmludGsoS0VSTl9FTUVSRyAiU1hHX0FMTE9DQVRFX1JDVl9QQUNLRVQ6IFJDViBwYWNrZXQiIFwKKwkJCQkJIm5vbi02NGsgYm91bmRhcnkgYWxpZ25lZFxuIik7CVwKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAJKF9SY3ZEYXRhQnVmZmVySGRyKS0+c2tiID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKIH0KIAotI2RlZmluZSBTWEdfRlJFRV9SQ1ZfUEFDS0VUKF9SY3ZEYXRhQnVmZmVySGRyKSB7CQkJCQkJCVwKLQlpZigoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IpIHsJCQkJCQkJCQkJCVwKLQkJZGV2X2tmcmVlX3NrYigoX1JjdkRhdGFCdWZmZXJIZHIpLT5za2IpOwkJCQkJCSAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBTWEdfRlJFRV9SQ1ZfUEFDS0VUKF9SY3ZEYXRhQnVmZmVySGRyKSB7CQkJXAorCWlmKChfUmN2RGF0YUJ1ZmZlckhkciktPnNrYikgewkJCQkJXAorCQlkZXZfa2ZyZWVfc2tiKChfUmN2RGF0YUJ1ZmZlckhkciktPnNrYik7CQlcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCiB9CiAKLS8vIE1hY3JvIHRvIGFkZCBhIE5ESVNfUEFDS0VUIHRvIGFuIGluZGljYXRpb24gYXJyYXkKLS8vIElmIHdlIGZpbGwgdXAgb3VyIGFycmF5IG9mIHBhY2tldCBwb2ludGVycywgdGhlbiBpbmRpY2F0ZSB0aGlzCi0vLyBibG9jayB1cCBub3cgYW5kIHN0YXJ0IG9uIGEgbmV3IG9uZS4KLSNkZWZpbmUJU1hHX0FERF9SQ1ZfUEFDS0VUKF9wQWRhcHQsIF9QYWNrZXQsIF9QcmV2UGFja2V0LCBfSW5kaWNhdGlvbkxpc3QsIF9OdW1QYWNrZXRzKSB7IFwKLQkoX0luZGljYXRpb25MaXN0KVtfTnVtUGFja2V0c10gPSAoX1BhY2tldCk7CQkJCQkJCQkJCVwKLQkoX051bVBhY2tldHMpKys7CQkJCQkJCQkJCQkJCQkJCVwKLQlpZigoX051bVBhY2tldHMpID09IFNYR19SQ1ZfQVJSQVlTSVpFKSB7CQkJCQkJCQkJCVwKLQkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5kaWNSY3YiLAkJCQlcCi0JCQkJICAgKF9OdW1QYWNrZXRzKSwgMCwgMCwgMCk7CQkJCQkJCQkJCQlcCi0gICAgICAgIG5ldGlmX3J4KChfSW5kaWNhdGlvbkxpc3QpLChfTnVtUGFja2V0cykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCShfTnVtUGFja2V0cykgPSAwOwkJCQkJCQkJCQkJCQkJCVwKLQl9CQkJCQkJCQkJCQkJCQkJCQkJCQlcCisvKgorICogTWFjcm8gdG8gYWRkIGEgTkRJU19QQUNLRVQgdG8gYW4gaW5kaWNhdGlvbiBhcnJheQorICogSWYgd2UgZmlsbCB1cCBvdXIgYXJyYXkgb2YgcGFja2V0IHBvaW50ZXJzLCB0aGVuIGluZGljYXRlIHRoaXMKKyAqIGJsb2NrIHVwIG5vdyBhbmQgc3RhcnQgb24gYSBuZXcgb25lLgorICovCisjZGVmaW5lCVNYR19BRERfUkNWX1BBQ0tFVChfcEFkYXB0LCBfUGFja2V0LCBfUHJldlBhY2tldCwgX0luZGljYXRpb25MaXN0LCBcCisJCQkJX051bVBhY2tldHMpIHsgCQkJCVwKKwkoX0luZGljYXRpb25MaXN0KVtfTnVtUGFja2V0c10gPSAoX1BhY2tldCk7CQkJXAorCShfTnVtUGFja2V0cykrKzsJCQkJCQlcCisJaWYoKF9OdW1QYWNrZXRzKSA9PSBTWEdfUkNWX0FSUkFZU0laRSkgewkJCVwKKwkJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiSW5kaWNSY3YiLAlcCisJCQkJICAgKF9OdW1QYWNrZXRzKSwgMCwgMCwgMCk7CQlcCisgICAgICAgIG5ldGlmX3J4KChfSW5kaWNhdGlvbkxpc3QpLChfTnVtUGFja2V0cykpOyAgICAgICAgICAgICAgICAgICAgIAlcCisJCShfTnVtUGFja2V0cykgPSAwOwkJCQkJXAorCX0JCQkJCQkJCVwKIH0KIAotI2RlZmluZSBTWEdfSU5ESUNBVEVfUEFDS0VUUyhfcEFkYXB0LCBfSW5kaWNhdGlvbkxpc3QsIF9OdW1QYWNrZXRzKSB7CQkJXAotCWlmKF9OdW1QYWNrZXRzKSB7CQkJCQkJCQkJCQkJCQkJXAotCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJJbmRpY1JjdiIsCQkJXAotCQkJCSAgIChfTnVtUGFja2V0cyksIDAsIDAsIDApOwkJCQkJCQkJCQlcCi0gICAgICAgIG5ldGlmX3J4KChfSW5kaWNhdGlvbkxpc3QpLChfTnVtUGFja2V0cykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJKF9OdW1QYWNrZXRzKSA9IDA7CQkJCQkJCQkJCQkJCQlcCi0JfQkJCQkJCQkJCQkJCQkJCQkJCQlcCisjZGVmaW5lIFNYR19JTkRJQ0FURV9QQUNLRVRTKF9wQWRhcHQsIF9JbmRpY2F0aW9uTGlzdCwgX051bVBhY2tldHMpIHsJXAorCWlmKF9OdW1QYWNrZXRzKSB7CQkJCQkJXAorCQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJJbmRpY1JjdiIsCVwKKwkJCQkgICAoX051bVBhY2tldHMpLCAwLCAwLCAwKTsJCVwKKyAgICAgICAgbmV0aWZfcngoKF9JbmRpY2F0aW9uTGlzdCksKF9OdW1QYWNrZXRzKSk7ICAgICAgICAgICAgICAgICAgICAgCVwKKwkJKF9OdW1QYWNrZXRzKSA9IDA7CQkJCQlcCisJfQkJCQkJCQkJXAogfQogCi0jZGVmaW5lIFNYR19SRUlOSUFUSUFMSVpFX1BBQ0tFVChfUGFja2V0KQkJCQkJCQkJCQlcCi0Je30gIC8qX05kaXNSZWluaXRpYWxpemVQYWNrZXQoX1BhY2tldCkqLyAgLyogIHRoaXMgaXMgbm90IG5lY2Vzc2FyeSB3aXRoIGFuIHNrYiAqLworI2RlZmluZSBTWEdfUkVJTklBVElBTElaRV9QQUNLRVQoX1BhY2tldCkJCQkJXAorCXt9ICAvKl9OZGlzUmVpbml0aWFsaXplUGFja2V0KF9QYWNrZXQpKi8KKwkJIC8qICB0aGlzIGlzIG5vdCBuZWNlc3Nhcnkgd2l0aCBhbiBza2IgKi8KIAotLy8gRGVmaW5pdGlvbnMgdG8gaW5pdGlhbGl6ZSBEdW1iLW5pYyBSZWNlaXZlIE5CTHMKLSNkZWZpbmUgU1hHX1JDVl9QQUNLRVRfQlVGRkVSX0hEUihfUGFja2V0KSAoKChQU1hHX1JDVl9OQkxfUkVTRVJWRUQpKChfUGFja2V0KS0+TWluaXBvcnRSZXNlcnZlZEV4KSktPlJjdkRhdGFCdWZmZXJIZHIpCisvKiBEZWZpbml0aW9ucyB0byBpbml0aWFsaXplIER1bWItbmljIFJlY2VpdmUgTkJMcyAqLworI2RlZmluZSBTWEdfUkNWX1BBQ0tFVF9CVUZGRVJfSERSKF9QYWNrZXQpICgoKHN0cnVjdCBzeGdfcmN2X25ibF9yZXNlcnZlZCAqKVwKKwkJCSgoX1BhY2tldCktPk1pbmlwb3J0UmVzZXJ2ZWRFeCkpLT5SY3ZEYXRhQnVmZmVySGRyKQogCi0jZGVmaW5lIFNYR19SQ1ZfU0VUX0NIRUNLU1VNX0lORk8oX1BhY2tldCwgX0NwaSkJXAotCU5ESVNfUEVSX1BBQ0tFVF9JTkZPX0ZST01fUEFDS0VUKChfUGFja2V0KSwgVGNwSXBDaGVja3N1bVBhY2tldEluZm8pID0gKFBWT0lEKShfQ3BpKQorI2RlZmluZSBTWEdfUkNWX1NFVF9DSEVDS1NVTV9JTkZPKF9QYWNrZXQsIF9DcGkpCQkJCVwKKwlORElTX1BFUl9QQUNLRVRfSU5GT19GUk9NX1BBQ0tFVCgoX1BhY2tldCksIAkJCQlcCisJCQlUY3BJcENoZWNrc3VtUGFja2V0SW5mbykgPSAoUFZPSUQpKF9DcGkpCiAKICNkZWZpbmUgU1hHX1JDVl9TRVRfVE9FUExJVFooX1BhY2tldCwgX1RvZXBsaXR6LCBfVHlwZSwgX0Z1bmN0aW9uKSB7CQlcCi0JTkRJU19QQUNLRVRfU0VUX0hBU0hfVkFMVUUoKF9QYWNrZXQpLCAoX1RvZXBsaXR6KSk7CQkJCQkJXAotCU5ESVNfUEFDS0VUX1NFVF9IQVNIX1RZUEUoKF9QYWNrZXQpLCAoX1R5cGUpKTsJCQkJCQkJXAotCU5ESVNfUEFDS0VUX1NFVF9IQVNIX0ZVTkNUSU9OKChfUGFja2V0KSwgKF9GdW5jdGlvbikpOwkJCQkJXAorCU5ESVNfUEFDS0VUX1NFVF9IQVNIX1ZBTFVFKChfUGFja2V0KSwgKF9Ub2VwbGl0eikpOwkJCVwKKwlORElTX1BBQ0tFVF9TRVRfSEFTSF9UWVBFKChfUGFja2V0KSwgKF9UeXBlKSk7CQkJCVwKKwlORElTX1BBQ0tFVF9TRVRfSEFTSF9GVU5DVElPTigoX1BhY2tldCksIChfRnVuY3Rpb24pKTsJCQlcCiB9CiAKLSNkZWZpbmUgU1hHX1JDVl9TRVRfVkxBTl9JTkZPKF9QYWNrZXQsIF9WbGFuSWQsIF9Qcmlvcml0eSkgewkJCQkJXAotCU5ESVNfUEFDS0VUXzgwMjFRX0lORk8JX1BhY2tldDgwMjFxSW5mbzsJCQkJCQkJCQlcCi0JX1BhY2tldDgwMjFxSW5mby5UYWdIZWFkZXIuVmxhbklkID0gKF9WbGFuSWQpOwkJCQkJCQkJXAotCV9QYWNrZXQ4MDIxcUluZm8uVGFnSGVhZGVyLlVzZXJQcmlvcml0eSA9IChfUHJpb3JpdHkpOwkJCQkJCVwKKyNkZWZpbmUgU1hHX1JDVl9TRVRfVkxBTl9JTkZPKF9QYWNrZXQsIF9WbGFuSWQsIF9Qcmlvcml0eSkgewkJCVwKKwlORElTX1BBQ0tFVF84MDIxUV9JTkZPCV9QYWNrZXQ4MDIxcUluZm87CQkJCVwKKwlfUGFja2V0ODAyMXFJbmZvLlRhZ0hlYWRlci5WbGFuSWQgPSAoX1ZsYW5JZCk7CQkJCVwKKwlfUGFja2V0ODAyMXFJbmZvLlRhZ0hlYWRlci5Vc2VyUHJpb3JpdHkgPSAoX1ByaW9yaXR5KTsJCQlcCiAJTkRJU19QRVJfUEFDS0VUX0lORk9fRlJPTV9QQUNLRVQoKF9QYWNrZXQpLCBJZWVlODAyMVFOZXRCdWZmZXJMaXN0SW5mbykgPSAJXAotCQlfUGFja2V0ODAyMXFJbmZvLlZhbHVlOwkJCQkJCQkJCQkJCQlcCisJCV9QYWNrZXQ4MDIxcUluZm8uVmFsdWU7CQkJCQkJXAogfQogCi0jZGVmaW5lIFNYR19BREpVU1RfUkNWX1BBQ0tFVChfUGFja2V0LCBfUmN2RGF0YUJ1ZmZlckhkciwgX0V2ZW50KSB7CQkJXAotCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkR1bWJSY3YiLAkJCVwKLQkJCSAgIChfUmN2RGF0YUJ1ZmZlckhkciksIChfUGFja2V0KSwJCQkJCQkJCVwKLQkJCSAgIChfRXZlbnQpLT5TdGF0dXMsIDApOwkgICAgICAgICAgICAgICAgICAgIAkJCQlcCi0JQVNTRVJUKChfRXZlbnQpLT5MZW5ndGggPD0gKF9SY3ZEYXRhQnVmZmVySGRyKS0+U2l6ZSk7CQkJCQlcCi0gICAgUGFja2V0LT5sZW4gPSAoX0V2ZW50KS0+TGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBTWEdfQURKVVNUX1JDVl9QQUNLRVQoX1BhY2tldCwgX1JjdkRhdGFCdWZmZXJIZHIsIF9FdmVudCkgewkJXAorCVNYR19UUkFDRShUUkFDRV9TWEcsIFN4Z1RyYWNlQnVmZmVyLCBUUkFDRV9OT0lTWSwgIkR1bWJSY3YiLAkJXAorCQkJICAgKF9SY3ZEYXRhQnVmZmVySGRyKSwgKF9QYWNrZXQpLAkJCVwKKwkJCSAgIChfRXZlbnQpLT5TdGF0dXMsIDApOwkgICAgICAgICAgICAgICAgICAgIAlcCisJLyogQVNTRVJUKChfRXZlbnQpLT5MZW5ndGggPD0gKF9SY3ZEYXRhQnVmZmVySGRyKS0+U2l6ZSk7ICovCQlcCisJc2tiX3B1dChQYWNrZXQsIChfRXZlbnQpLT5MZW5ndGgpOwkJCQkJXAogfQogCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBNYWNyb3MgdG8gZnJlZSBhIHJlY2VpdmUgZGF0YSBidWZmZXIgYW5kIHJlY2VpdmUgZGF0YSBkZXNjcmlwdG9yIGJsb2NrCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBOT1RFIC0gTG9jayBtdXN0IGJlIGhlbGQgd2l0aCBSQ1YgbWFjcm9zCi0jZGVmaW5lIFNYR19HRVRfUkNWX0RBVEFfQlVGRkVSKF9wQWRhcHQsIF9IZHIpIHsJCQkJCQkJCVwKLQlzdHJ1Y3QgTElTVF9FTlRSWSAgICAgCQkJCSpfcGxlOwkJCQkJCQkJCQlcCi0JX0hkciA9IE5VTEw7CQkJCQkJCQkJCQkJCQkJCVwKLQlpZigoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCkgewkJCQkJCQkJCQkJXAotCQlBU1NFUlQoIShJc0xpc3RFbXB0eSgmKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVycykpKTsJCQkJCQlcCi0JCV9wbGUgPSBSZW1vdmVIZWFkTGlzdCgmKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVycyk7CSAgICAJCQkJXAotCQkoX0hkcikgPSBjb250YWluZXJfb2YoX3BsZSwgc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSLCBGcmVlTGlzdCk7CSAgICAgICAgXAotCQkoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudC0tOwkJCQkJCQkJCQlcCi0JCUFTU0VSVCgoX0hkciktPlN0YXRlID09IFNYR19CVUZGRVJfRlJFRSk7CQkJCQkJCQlcCi0JfQkJCQkJCQkJCQkJCQkJCQkJCQlcCisvKgorICogTWFjcm9zIHRvIGZyZWUgYSByZWNlaXZlIGRhdGEgYnVmZmVyIGFuZCByZWNlaXZlIGRhdGEgZGVzY3JpcHRvciBibG9jaworICogTk9URSAtIExvY2sgbXVzdCBiZSBoZWxkIHdpdGggUkNWIG1hY3JvcworICovCisjZGVmaW5lIFNYR19HRVRfUkNWX0RBVEFfQlVGRkVSKF9wQWRhcHQsIF9IZHIpIHsJCQkJXAorCXN0cnVjdCBsaXN0X2VudHJ5ICpfcGxlOwkJCQkJCVwKKwlfSGRyID0gTlVMTDsJCQkJCQkJCVwKKwlpZigoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCkgewkJCQkJXAorCQlBU1NFUlQoIShJc0xpc3RFbXB0eSgmKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVycykpKTsJCVwKKwkJX3BsZSA9IFJlbW92ZUhlYWRMaXN0KCYoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJzKTsJICAgIAlcCisJCShfSGRyKSA9IGNvbnRhaW5lcl9vZihfcGxlLCBzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIsIAlcCisJCQkJCQlGcmVlTGlzdCk7CSAgICAgICAgCVwKKwkJKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQtLTsJCQkJXAorCQlBU1NFUlQoKF9IZHIpLT5TdGF0ZSA9PSBTWEdfQlVGRkVSX0ZSRUUpOwkJCVwKKwl9CQkJCQkJCQkJXAogfQogCi0jZGVmaW5lIFNYR19GUkVFX1JDVl9EQVRBX0JVRkZFUihfcEFkYXB0LCBfSGRyKSB7CQkJCQkJCVwKLQlTWEdfVFJBQ0UoVFJBQ0VfU1hHLCBTeGdUcmFjZUJ1ZmZlciwgVFJBQ0VfTk9JU1ksICJSdG5ESGRyIiwJCQlcCi0JCQkgICAoX0hkciksIChfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50LAkJCQkJCVwKLQkJCSAgIChfSGRyKS0+U3RhdGUsIChfSGRyKS0+VmlydHVhbEFkZHJlc3MpOwkJCQkJCVwKLS8qCVNYR19SRVNUT1JFX01ETF9PRkZTRVQoX0hkcik7CSovCQkJCQkJCQkJCVwKLQkoX3BBZGFwdCktPkZyZWVSY3ZCdWZmZXJDb3VudCsrOwkJCQkJCQkJCQlcCi0JQVNTRVJUKCgoX3BBZGFwdCktPkFsbFJjdkJsb2NrQ291bnQgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgPj0gKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQpOyBcCi0JQVNTRVJUKChfSGRyKS0+U3RhdGUgIT0gU1hHX0JVRkZFUl9GUkVFKTsJCQkJCQkJCVwKLQkoX0hkciktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJCQkJCQkJCQlcCi0JSW5zZXJ0VGFpbExpc3QoJihfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlcnMsICYoKF9IZHIpLT5GcmVlTGlzdCkpOwkJXAorI2RlZmluZSBTWEdfRlJFRV9SQ1ZfREFUQV9CVUZGRVIoX3BBZGFwdCwgX0hkcikgewkJCQlcCisJU1hHX1RSQUNFKFRSQUNFX1NYRywgU3hnVHJhY2VCdWZmZXIsIFRSQUNFX05PSVNZLCAiUnRuREhkciIsCQlcCisJCQkgICAoX0hkciksIChfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50LAkJXAorCQkJICAgKF9IZHIpLT5TdGF0ZSwgMC8qKF9IZHIpLT5WaXJ0dWFsQWRkcmVzcyovKTsJCVwKKy8qCVNYR19SRVNUT1JFX01ETF9PRkZTRVQoX0hkcik7CSovCQkJCQlcCisJKF9wQWRhcHQpLT5GcmVlUmN2QnVmZmVyQ291bnQrKzsJCQkJCVwKKwlBU1NFUlQoKChfcEFkYXB0KS0+QWxsUmN2QmxvY2tDb3VudCAqIFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLKSAJXAorCQkJCT49IChfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlckNvdW50KTsgCQlcCisJQVNTRVJUKChfSGRyKS0+U3RhdGUgIT0gU1hHX0JVRkZFUl9GUkVFKTsJCQkJXAorCShfSGRyKS0+U3RhdGUgPSBTWEdfQlVGRkVSX0ZSRUU7CQkJCQlcCisJSW5zZXJ0VGFpbExpc3QoJihfcEFkYXB0KS0+RnJlZVJjdkJ1ZmZlcnMsICYoKF9IZHIpLT5GcmVlTGlzdCkpOwlcCiB9CiAKLSNkZWZpbmUgU1hHX0ZSRUVfUkNWX0RFU0NSSVBUT1JfQkxPQ0soX3BBZGFwdCwgX0hkcikgewkJCQkJCVwKLQlBU1NFUlQoKF9IZHIpLT5TdGF0ZSAhPSBTWEdfQlVGRkVSX0ZSRUUpOwkJCQkJCQkJXAotCShfSGRyKS0+U3RhdGUgPSBTWEdfQlVGRkVSX0ZSRUU7CQkJCQkJCQkJCVwKLQkoX3BBZGFwdCktPkZyZWVSY3ZCbG9ja0NvdW50Kys7CQkJCQkJCQkJCQlcCisjZGVmaW5lIFNYR19GUkVFX1JDVl9ERVNDUklQVE9SX0JMT0NLKF9wQWRhcHQsIF9IZHIpIHsJCQkJXAorCUFTU0VSVCgoX0hkciktPlN0YXRlICE9IFNYR19CVUZGRVJfRlJFRSk7CQkJCVwKKwkoX0hkciktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJCQkJXAorCShfcEFkYXB0KS0+RnJlZVJjdkJsb2NrQ291bnQrKzsJCQkJCQlcCiAJQVNTRVJUKChfcEFkYXB0KS0+QWxsUmN2QmxvY2tDb3VudCA+PSAoX3BBZGFwdCktPkZyZWVSY3ZCbG9ja0NvdW50KTsJXAotCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVSY3ZCbG9ja3MsICYoX0hkciktPkZyZWVMaXN0KTsJCQlcCisJSW5zZXJ0VGFpbExpc3QoJihfcEFkYXB0KS0+RnJlZVJjdkJsb2NrcywgJihfSGRyKS0+RnJlZUxpc3QpOwkJXAogfQogCi0vLyBTR0wgbWFjcm9zCi0jZGVmaW5lIFNYR19GUkVFX1NHTF9CVUZGRVIoX3BBZGFwdCwgX1NnbCwgX05CKSB7CVwKLQlzcGluX2xvY2soJihfcEFkYXB0KS0+U2dsUUxvY2spOwkJXAotCShfcEFkYXB0KS0+RnJlZVNnbEJ1ZmZlckNvdW50Kys7CQlcCi0JQVNTRVJUKChfcEFkYXB0KS0+QWxsU2dsQnVmZmVyQ291bnQgPj0gKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVyQ291bnQpO1wKLQlBU1NFUlQoISgoX1NnbCktPlN0YXRlICYgU1hHX0JVRkZFUl9GUkVFKSk7CVwKLQkoX1NnbCktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJXAotCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJzLCAmKF9TZ2wpLT5GcmVlTGlzdCk7CVwKLQlzcGluX3VubG9jaygmKF9wQWRhcHQpLT5TZ2xRTG9jayk7CQlcCisvKiBTR0wgbWFjcm9zICovCisjZGVmaW5lIFNYR19GUkVFX1NHTF9CVUZGRVIoX3BBZGFwdCwgX1NnbCwgX05CKSB7CQkJCVwKKwlzcGluX2xvY2tfaXJxc2F2ZSgmKF9wQWRhcHQpLT5TZ2xRTG9jaywgc2dsX2ZsYWdzKTsJCQlcCisJKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVyQ291bnQrKzsJCQkJCVwKKwlBU1NFUlQoKF9wQWRhcHQpLT5BbGxTZ2xCdWZmZXJDb3VudCA+PSAoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJDb3VudCk7CVwKKwlBU1NFUlQoISgoX1NnbCktPlN0YXRlICYgU1hHX0JVRkZFUl9GUkVFKSk7CQkJCVwKKwkoX1NnbCktPlN0YXRlID0gU1hHX0JVRkZFUl9GUkVFOwkJCQkJXAorCUluc2VydFRhaWxMaXN0KCYoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJzLCAmKF9TZ2wpLT5GcmVlTGlzdCk7CQlcCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKF9wQWRhcHQpLT5TZ2xRTG9jaywgc2dsX2ZsYWdzKTsJCVwKIH0KIAotLy8gR2V0IGFuIFNHTCBidWZmZXIgZnJvbSB0aGUgZnJlZSBxdWV1ZS4gIFRoZSBmaXJzdCBwYXJ0IG9mIHRoaXMgbWFjcm8KLS8vIGF0dGVtcHRzIHRvIGtlZXAgYWhlYWQgb2YgYnVmZmVyIGRlcGxldGlvbiBieSBhbGxvY2F0aW5nIG1vcmUgd2hlbgotLy8gd2UgaGl0IGEgbWluaW11bSB0aHJlc2hvbGQuICBOb3RlIHRoYXQgd2UgZG9uJ3QgZ3JhYiB0aGUgbG9jawotLy8gdW50aWwgYWZ0ZXIgdGhhdC4gIFdlJ3JlIGRlYWxpbmcgd2l0aCByb3VuZCBudW1iZXJzIGhlcmUsIHNvIHdlIGRvbid0IG5lZWQgdG8sCi0vLyBhbmQgbm90IGdyYWJiaW5nIGl0IGF2b2lkcyBhIHBvc3NpYmxlIGRvdWJsZS10cmlwLgotI2RlZmluZSBTWEdfR0VUX1NHTF9CVUZGRVIoX3BBZGFwdCwgX1NnbCkgewkJCQlcCi0Jc3RydWN0IExJU1RfRU5UUlkgKl9wbGU7CQkJCQkJXAorLyoKKyAqIEdldCBhbiBTR0wgYnVmZmVyIGZyb20gdGhlIGZyZWUgcXVldWUuICBUaGUgZmlyc3QgcGFydCBvZiB0aGlzIG1hY3JvCisgKiBhdHRlbXB0cyB0byBrZWVwIGFoZWFkIG9mIGJ1ZmZlciBkZXBsZXRpb24gYnkgYWxsb2NhdGluZyBtb3JlIHdoZW4KKyAqIHdlIGhpdCBhIG1pbmltdW0gdGhyZXNob2xkLiAgTm90ZSB0aGF0IHdlIGRvbid0IGdyYWIgdGhlIGxvY2sKKyAqIHVudGlsIGFmdGVyIHRoYXQuICBXZSdyZSBkZWFsaW5nIHdpdGggcm91bmQgbnVtYmVycyBoZXJlLCBzbyB3ZSBkb24ndCBuZWVkIHRvLAorICogYW5kIG5vdCBncmFiYmluZyBpdCBhdm9pZHMgYSBwb3NzaWJsZSBkb3VibGUtdHJpcC4KKyAqLworI2RlZmluZSBTWEdfR0VUX1NHTF9CVUZGRVIoX3BBZGFwdCwgX1NnbCwgX2lycSkgewkJCVwKKwlzdHJ1Y3QgbGlzdF9lbnRyeSAqX3BsZTsJCQkJCVwKIAlpZiAoKF9wQWRhcHQtPkZyZWVTZ2xCdWZmZXJDb3VudCA8IFNYR19NSU5fU0dMX0JVRkZFUlMpICYmCVwKIAkgICAoX3BBZGFwdC0+QWxsU2dsQnVmZmVyQ291bnQgPCBTWEdfTUFYX1NHTF9CVUZGRVJTKSAmJglcCi0JICAgKF9wQWRhcHQtPkFsbG9jYXRpb25zUGVuZGluZyA9PSAwKSkgewkJCVwKKwkgICAoYXRvbWljX3JlYWQoJl9wQWRhcHQtPnBlbmRpbmdfYWxsb2NhdGlvbnMpID09IDApKSB7CQlcCiAJCXN4Z19hbGxvY2F0ZV9idWZmZXJfbWVtb3J5KF9wQWRhcHQsCQkJXAotCQkJKHNpemVvZihzdHJ1Y3QgU1hHX1NDQVRURVJfR0FUSEVSKSArIFNYR19TR0xfQlVGX1NJWkUpLFwKKwkJCShzaXplb2Yoc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlcikgKyBTWEdfU0dMX0JVRl9TSVpFKSxcCiAJCQlTWEdfQlVGRkVSX1RZUEVfU0dMKTsJCQkJXAogCX0JCQkJCQkJCVwKIAlfU2dsID0gTlVMTDsJCQkJCQkJXAotCXNwaW5fbG9jaygmKF9wQWRhcHQpLT5TZ2xRTG9jayk7CQkJCVwKKwlpZighX2lycSkJCQkJCQkJXAorCQlzcGluX2xvY2tfaXJxc2F2ZSgmKF9wQWRhcHQpLT5TZ2xRTG9jaywgc2dsX2ZsYWdzKTsJXAorCWVsc2UJCQkJCQkJCVwKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJihfcEFkYXB0KS0+U2dsUUxvY2ssIHNnbF9mbGFncyk7CVwKIAlpZigoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJDb3VudCkgewkJCQlcCiAJCUFTU0VSVCghKElzTGlzdEVtcHR5KCYoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJzKSkpOwlcCiAJCV9wbGUgPSBSZW1vdmVIZWFkTGlzdCgmKF9wQWRhcHQpLT5GcmVlU2dsQnVmZmVycyk7CVwKLQkJKF9TZ2wpID0gY29udGFpbmVyX29mKF9wbGUsIHN0cnVjdCBTWEdfU0NBVFRFUl9HQVRIRVIsIEZyZWVMaXN0KTsgXAorCQkoX1NnbCkgPSBjb250YWluZXJfb2YoX3BsZSwgc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciwgCVwKKwkJCQkJCUZyZWVMaXN0KTsgCQlcCiAgICAgICAgICAgICAoX3BBZGFwdCktPkZyZWVTZ2xCdWZmZXJDb3VudC0tOwkJCQlcCiAJCUFTU0VSVCgoX1NnbCktPlN0YXRlID09IFNYR19CVUZGRVJfRlJFRSk7CQlcCiAJCShfU2dsKS0+U3RhdGUgPSBTWEdfQlVGRkVSX0JVU1k7CQkJXAogCQkoX1NnbCktPnBTZ2wgPSBOVUxMOwkJCQkJXAogCX0JCQkJCQkJCVwKLQlzcGluX3VubG9jaygmKF9wQWRhcHQpLT5TZ2xRTG9jayk7CQkJCVwKKwlpZighX2lycSkJCQkJCQkJXAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoX3BBZGFwdCktPlNnbFFMb2NrLCBzZ2xfZmxhZ3MpO1wKKwllbHNlCQkJCQkJCQlcCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihfcEFkYXB0KS0+U2dsUUxvY2ssIHNnbF9mbGFncyk7XAogfQogCi0vLwotLy8gU1hHX01VTFRJQ0FTVF9BRERSRVNTCi0vLwotLy8gTGlua2VkIGxpc3Qgb2YgbXVsdGljYXN0IGFkZHJlc3Nlcy4KLXN0cnVjdCBTWEdfTVVMVElDQVNUX0FERFJFU1MgewotCXVuc2lnbmVkIGNoYXIJCQkJCQkJQWRkcmVzc1s2XTsKLQlzdHJ1Y3QgU1hHX01VTFRJQ0FTVF9BRERSRVNTCSpOZXh0OworLyoKKyAqIHN0cnVjdCBzeGdfbXVsdGljYXN0X2FkZHJlc3MKKyAqIExpbmtlZCBsaXN0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMuCisgKi8KK3N0cnVjdCBzeGdfbXVsdGljYXN0X2FkZHJlc3MgeworCXVuc2lnbmVkIGNoYXIJCQlBZGRyZXNzWzZdOworCXN0cnVjdCBzeGdfbXVsdGljYXN0X2FkZHJlc3MJKk5leHQ7CiB9OwogCi0vLyBTdHJ1Y3R1cmUgdG8gbWFpbnRhaW4gY2hpbW5leSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlciBxdWV1ZXMuCi0vLyBUaGlzIHN0cnVjdHVyZSBtYWludGFpbnMgTkVUX0JVRkZFUl9MSVNUIHF1ZXVlcyB0aGF0IGFyZQotLy8gZ2l2ZW4gdG8gdXMgdmlhIHRoZSBDaGltbmV5IE1pbmlwb3J0VGNwT2ZmbG9hZFNlbmQgYW5kCi0vLyBNaW5pcG9ydFRjcE9mZmxvYWRSZWNlaXZlIHJvdXRpbmVzLiAgVGhpcyBzdHJ1Y3R1cmUgRE9FUyBOT1QKLS8vIG1hbmFnZSBvdXIgZGF0YSBidWZmZXIgcXVldWUKLXN0cnVjdCBTWEdfQlVGRkVSX1FVRVVFIHsKLQl1MzIJCQkJCQlUeXBlOwkJCS8vIFNsb3cgb3IgZmFzdCAtIFNlZSBiZWxvdwotCXUzMgkJCQkJCURpcmVjdGlvbjsJCS8vIFhtdCBvciBSY3YKLQl1MzIJCQkJCQlCeXRlczsJCQkvLyBCeXRlIGNvdW50Ci0JdTMyICogICAgICAgIAkJCUhlYWQ7CQkJLy8gU2VuZCBxdWV1ZSBoZWFkCi0JdTMyICogICAgICAgIAkJCVRhaWw7CQkJLy8gU2VuZCBxdWV1ZSB0YWlsCi0vLwlQTkVUX0JVRkZFUl9MSVNUCQkJTmV4dE5CTDsJCS8vIFNob3J0IGN1dCAtIG5leHQgTkJMCi0vLwlQTkVUX0JVRkZFUgkJCQkJTmV4dE5COwkJCS8vIFNob3J0IGN1dCAtIG5leHQgTkIKKy8qCisgKiBTdHJ1Y3R1cmUgdG8gbWFpbnRhaW4gY2hpbW5leSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlciBxdWV1ZXMuCisgKiBUaGlzIHN0cnVjdHVyZSBtYWludGFpbnMgTkVUX0JVRkZFUl9MSVNUIHF1ZXVlcyB0aGF0IGFyZQorICogZ2l2ZW4gdG8gdXMgdmlhIHRoZSBDaGltbmV5IE1pbmlwb3J0VGNwT2ZmbG9hZFNlbmQgYW5kCisgKiBNaW5pcG9ydFRjcE9mZmxvYWRSZWNlaXZlIHJvdXRpbmVzLiAgVGhpcyBzdHJ1Y3R1cmUgRE9FUyBOT1QKKyAqIG1hbmFnZSBvdXIgZGF0YSBidWZmZXIgcXVldWUKKyAqLworc3RydWN0IHN4Z19idWZmZXJfcXVldWUgeworCXUzMglUeXBlOwkJCS8qIFNsb3cgb3IgZmFzdCAtIFNlZSBiZWxvdyAqLworCXUzMglEaXJlY3Rpb247CQkvKiBYbXQgb3IgUmN2ICovCisJdTMyCUJ5dGVzOwkJCS8qIEJ5dGUgY291bnQgKi8KKwl1MzIgKiAgCUhlYWQ7CQkJLyogU2VuZCBxdWV1ZSBoZWFkICovCisJdTMyICogIAlUYWlsOwkJCS8qIFNlbmQgcXVldWUgdGFpbCAqLworLyoJUE5FVF9CVUZGRVJfTElTVAlOZXh0TkJMOyovCS8qIFNob3J0IGN1dCAtIG5leHQgTkJMICovCisvKglQTkVUX0JVRkZFUgkJTmV4dE5COwkqLwkvKiBTaG9ydCBjdXQgLSBuZXh0IE5CICovCiB9OwogCiAjZGVmaW5lCQlTWEdfU0xPV19TRU5EX0JVRkZFUgkwCiAjZGVmaW5lCQlTWEdfRkFTVF9TRU5EX0JVRkZFUgkxCiAjZGVmaW5lIAlTWEdfUkVDRUlWRV9CVUZGRVIJCTIKIAotI2RlZmluZSBTWEdfSU5JVF9CVUZGRVIoX0J1ZmZlciwgX1R5cGUpIHsgCQkJCQkJXAotCShfQnVmZmVyKS0+VHlwZSA9IChfVHlwZSk7CQkJCQkJCQkJXAotCWlmKChfVHlwZSkgPT0gU1hHX1JFQ0VJVkVfQlVGRkVSKSB7CQkJCQkJCVwKLQkJKF9CdWZmZXIpLT5EaXJlY3Rpb24gPSAwOwkJCQkJCQkJXAotCX0gZWxzZSB7CQkJCQkJCQkJCQkJCVwKKyNkZWZpbmUgU1hHX0lOSVRfQlVGRkVSKF9CdWZmZXIsIF9UeXBlKSB7IAkJCQlcCisJKF9CdWZmZXIpLT5UeXBlID0gKF9UeXBlKTsJCQkJCVwKKwlpZigoX1R5cGUpID09IFNYR19SRUNFSVZFX0JVRkZFUikgewkJCQlcCisJCShfQnVmZmVyKS0+RGlyZWN0aW9uID0gMDsJCQkJXAorCX0gZWxzZSB7CQkJCQkJCVwKIAkJKF9CdWZmZXIpLT5EaXJlY3Rpb24gPSBORElTX1NHX0xJU1RfV1JJVEVfVE9fREVWSUNFOwlcCi0JfQkJCQkJCQkJCQkJCQkJCVwKLQkoX0J1ZmZlciktPkJ5dGVzID0gMDsJCQkJCQkJCQkJXAotCShfQnVmZmVyKS0+SGVhZCA9IE5VTEw7CQkJCQkJCQkJCVwKLQkoX0J1ZmZlciktPlRhaWwgPSBOVUxMOwkJCQkJCQkJCQlcCisJfQkJCQkJCQkJXAorCShfQnVmZmVyKS0+Qnl0ZXMgPSAwOwkJCQkJCVwKKwkoX0J1ZmZlciktPkhlYWQgPSBOVUxMOwkJCQkJCVwKKwkoX0J1ZmZlciktPlRhaWwgPSBOVUxMOwkJCQkJCVwKIH0KIAogCi0jZGVmaW5lIFNYR19SU1NfQ1BVX0NPVU5UKF9wQWRhcHQpIAkJCQkJCQkJXAorI2RlZmluZSBTWEdfUlNTX0NQVV9DT1VOVChfcEFkYXB0KSAJCQkJCVwKIAkoKF9wQWRhcHQpLT5Sc3NFbmFibGVkIAk/ICBOUl9DUFVTIDogMSkKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIERSSVZFUiBhbmQgQURBUFRFUiBzdHJ1Y3R1cmVzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERSSVZFUiBhbmQgQURBUFRFUiBzdHJ1Y3R1cmVzICovCiAKLS8vIEFkYXB0ZXIgc3RhdGVzIC0gVGhlc2Ugc3RhdGVzIGNsb3NlbHkgbWF0Y2ggdGhlIGFkYXB0ZXIgc3RhdGVzCi0vLyBkb2N1bWVudGVkIGluIHRoZSBEREsgKHdpdGggYSBmZXcgZXhjZXB0aW9ucykuCisvKgorICogQWRhcHRlciBzdGF0ZXMgLSBUaGVzZSBzdGF0ZXMgY2xvc2VseSBtYXRjaCB0aGUgYWRhcHRlciBzdGF0ZXMKKyAqIGRvY3VtZW50ZWQgaW4gdGhlIERESyAod2l0aCBhIGZldyBleGNlcHRpb25zKS4KKyAqLwogZW51bSBTWEdfU1RBVEUgewotCVNYR19TVEFURV9JTklUSUFMSVpJTkcsCQkJLy8gSW5pdGlhbGl6aW5nCi0JU1hHX1NUQVRFX0JPT1RESUFHLAkJCQkvLyBCb290LURpYWdub3N0aWMgbW9kZQotCVNYR19TVEFURV9QQVVTSU5HLAkJCQkvLyBQYXVzaW5nCi0JU1hHX1NUQVRFX1BBVVNFRCwJCQkJLy8gUGF1c2VkCi0JU1hHX1NUQVRFX1JVTk5JTkcsCQkJCS8vIFJ1bm5pbmcKLQlTWEdfU1RBVEVfUkVTRVRUSU5HLAkJCS8vIFJlc2V0IGluIHByb2dyZXNzCi0JU1hHX1NUQVRFX1NMRUVQLAkJCQkvLyBTbGVlcGluZwotCVNYR19TVEFURV9ESUFHLAkJCQkJLy8gRGlhZ25vc3RpYyBtb2RlCi0JU1hHX1NUQVRFX0hBTFRJTkcsCQkJCS8vIEhhbHRpbmcKLQlTWEdfU1RBVEVfSEFMVEVELAkJCQkvLyBEb3duIG9yIG5vdC1pbml0aWFsaXplZAotCVNYR19TVEFURV9TSFVURE9XTgkJCQkvLyBzaHV0ZG93bgorCVNYR19TVEFURV9JTklUSUFMSVpJTkcsCQkJLyogSW5pdGlhbGl6aW5nICovCisJU1hHX1NUQVRFX0JPT1RESUFHLAkJCS8qIEJvb3QtRGlhZ25vc3RpYyBtb2RlICovCisJU1hHX1NUQVRFX1BBVVNJTkcsCQkJLyogUGF1c2luZyAqLworCVNYR19TVEFURV9QQVVTRUQsCQkJLyogUGF1c2VkICovCisJU1hHX1NUQVRFX1JVTk5JTkcsCQkJLyogUnVubmluZyAqLworCVNYR19TVEFURV9SRVNFVFRJTkcsCQkJLyogUmVzZXQgaW4gcHJvZ3Jlc3MgKi8KKwlTWEdfU1RBVEVfU0xFRVAsCQkJLyogU2xlZXBpbmcgKi8KKwlTWEdfU1RBVEVfRElBRywJCQkJLyogRGlhZ25vc3RpYyBtb2RlICovCisJU1hHX1NUQVRFX0hBTFRJTkcsCQkJLyogSGFsdGluZyAqLworCVNYR19TVEFURV9IQUxURUQsCQkJLyogRG93biBvciBub3QtaW5pdGlhbGl6ZWQgKi8KKwlTWEdfU1RBVEVfU0hVVERPV04JCQkvKiBzaHV0ZG93biAqLwogfTsKIAotLy8gTGluayBzdGF0ZQorLyogTGluayBzdGF0ZSAqLwogZW51bSBTWEdfTElOS19TVEFURSB7CiAJU1hHX0xJTktfRE9XTiwKIAlTWEdfTElOS19VUAogfTsKIAotLy8gTGluayBpbml0aWFsaXphdGlvbiB0aW1lb3V0IGluIDEwMHVzIHVuaXRzCi0jZGVmaW5lIFNYR19MSU5LX1RJTUVPVVQJMTAwMDAwCQkvLyAxMCBTZWNvbmRzIC0gUkVEVUNFIQorLyogTGluayBpbml0aWFsaXphdGlvbiB0aW1lb3V0IGluIDEwMHVzIHVuaXRzICovCisjZGVmaW5lIFNYR19MSU5LX1RJTUVPVVQJMTAwMDAwCQkvKiAxMCBTZWNvbmRzIC0gUkVEVUNFISAqLwogCiAKLS8vIE1pY3JvY29kZSBmaWxlIHNlbGVjdGlvbiBjb2RlcworLyogTWljcm9jb2RlIGZpbGUgc2VsZWN0aW9uIGNvZGVzICovCiBlbnVtIFNYR19VQ09ERV9TRUwgewotCVNYR19VQ09ERV9TQUhBUkEsCQkJCS8vIFNhaGFyYSB1Y29kZQotCVNYR19VQ09ERV9TRElBR0NQVSwJCQkJLy8gU2FoYXJhIENQVSBkaWFnbm9zdGljIHVjb2RlCi0JU1hHX1VDT0RFX1NESUFHU1lTCQkJCS8vIFNhaGFyYSBzeXN0ZW0gZGlhZ25vc3RpYyB1Y29kZQorCVNYR19VQ09ERV9TWVNURU0sCS8qIFN5c3RlbSAob3BlcmF0aW9uYWwpIHV1Y29kZSAqLworCVNYR19VQ09ERV9TRElBR0NQVSwJLyogU3lzdGVtIENQVSBkaWFnbm9zdGljIHVjb2RlICovCisJU1hHX1VDT0RFX1NESUFHU1lTCS8qIFN5c3RlbSBkaWFnbm9zdGljIHVjb2RlICovCiB9OwogCiAKICNkZWZpbmUgU1hHX0RJU0FCTEVfQUxMX0lOVEVSUlVQVFMoX3BhZGFwdCkgc3hnX2Rpc2FibGVfaW50ZXJydXB0KF9wYWRhcHQpCiAjZGVmaW5lIFNYR19FTkFCTEVfQUxMX0lOVEVSUlVQVFMoX3BhZGFwdCkgc3hnX2VuYWJsZV9pbnRlcnJ1cHQoX3BhZGFwdCkKIAotLy8gVGhpcyBwcm9iYWJseSBsaXZlcyBpbiBhIHByb3RvLmggZmlsZS4gIE1vdmUgbGF0ZXIKKy8qIFRoaXMgcHJvYmFibHkgbGl2ZXMgaW4gYSBwcm90by5oIGZpbGUuICBNb3ZlIGxhdGVyICovCiAjZGVmaW5lIFNYR19NVUxUSUNBU1RfUEFDS0VUKF9wZXRoZXIpICgoX3BldGhlciktPmV0aGVyX2Rob3N0WzBdICYgMHgwMSkKLSNkZWZpbmUgU1hHX0JST0FEQ0FTVF9QQUNLRVQoX3BldGhlcikgKCgqKHUzMiAqKShfcGV0aGVyKS0+ZXRoZXJfZGhvc3QgPT0gMHhGRkZGRkZGRikgJiYgXAotCQkJCSgqKHUxNiAqKSYoX3BldGhlciktPmV0aGVyX2Rob3N0WzRdID09IDB4RkZGRikpCisjZGVmaW5lIFNYR19CUk9BRENBU1RfUEFDS0VUKF9wZXRoZXIpIAkJCQkJXAorCQkoKCoodTMyICopKF9wZXRoZXIpLT5ldGhlcl9kaG9zdCA9PSAweEZGRkZGRkZGKSAmJiAJXAorCQkoKih1MTYgKikmKF9wZXRoZXIpLT5ldGhlcl9kaG9zdFs0XSA9PSAweEZGRkYpKQogCi0vLyBGb3IgRGJnUHJpbnRzCisvKiBGb3IgRGJnUHJpbnRzICovCiAjZGVmaW5lIFNYR19JRCAgICAgIERQRkxUUl9JSFZORVRXT1JLX0lECiAjZGVmaW5lIFNYR19FUlJPUiAgIERQRkxUUl9FUlJPUl9MRVZFTAogCi0vLwotLy8gU1hHX0RSSVZFUiBzdHJ1Y3R1cmUgLQotLy8KLS8vIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzeGcgZHJpdmVyLiAgVGhlcmUgaXMgb25seQotLy8gb25lIG9mIHRoZXNlLCBhbmQgaXQgaXMgZGVmaW5lZCBhcyBhIGdsb2JhbC4KLXN0cnVjdCBTWEdfRFJJVkVSIHsKLQlzdHJ1Y3QgYWRhcHRlcl90CSpBZGFwdGVyczsJCS8vIExpbmtlZCBsaXN0IG9mIGFkYXB0ZXJzCi0JdXNob3J0CQkJCUFkYXB0ZXJJRDsJCS8vIE1haW50YWluIHVuaXF1ZSBhZGFwdGVyIElECisvKgorICogc3RydWN0IHN4Z19kcml2ZXIgc3RydWN0dXJlIC0KKyAqCisgKiBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3hnIGRyaXZlci4gIFRoZXJlIGlzIG9ubHkKKyAqIG9uZSBvZiB0aGVzZSwgYW5kIGl0IGlzIGRlZmluZWQgYXMgYSBnbG9iYWwuCisgKi8KKworc3RydWN0IHN4Z19kcml2ZXIgeworCXN0cnVjdCBhZGFwdGVyX3QJKkFkYXB0ZXJzOwkvKiBMaW5rZWQgbGlzdCBvZiBhZGFwdGVycyAqLworCXVzaG9ydAkJCUFkYXB0ZXJJRDsJLyogTWFpbnRhaW4gdW5pcXVlIGFkYXB0ZXIgSUQgKi8KIH07CiAKICNpZmRlZiBTVEFUVVNfU1VDQ0VTUwogI3VuZGVmIFNUQVRVU19TVUNDRVNTCiAjZW5kaWYKIAorLyogVE9ETzogV2UgbmVlZCB0byB0cnkgYW5kIHVzZSBORVRERVZfVFhfKiBiZWZvcmUgcG9zdGluZyB0aGlzIG91dCAqLwogI2RlZmluZSBTVEFUVVNfU1VDQ0VTUyAgICAgICAgICAgICAgMAogI2RlZmluZSBTVEFUVVNfUEVORElORyAgICAgICAgICAgICAgMAogI2RlZmluZSBTVEFUVVNfRkFJTFVSRSAgICAgICAgICAgICAtMQpAQCAtNDA0LDM0ICs0MTYsMzYgQEAKICNkZWZpbmUgU0xJQ19NQVhfQ0FSRFMgICAgICAgICAgICAgIDMyCiAjZGVmaW5lIFNMSUNfTUFYX1BPUlRTICAgICAgICAgICAgICA0ICAgICAgICAvKiBNYXggIyBvZiBwb3J0cyBwZXIgY2FyZCAgICovCiAjaWYgU0xJQ19EVU1QX0VOQUJMRUQKLS8vIER1bXAgYnVmZmVyIHNpemUKLS8vCi0vLyBUaGlzIGNhbm5vdCBiZSBiaWdnZXIgdGhhbiB0aGUgbWF4IERNQSBzaXplIHRoZSBjYXJkIHN1cHBvcnRzLAotLy8gZ2l2ZW4gdGhlIGN1cnJlbnQgY29kZSBzdHJ1Y3R1cmUgaW4gdGhlIGhvc3QgYW5kIHVjb2RlLgotLy8gTW9qYXZlIHN1cHBvcnRzIDE2SywgT2FzaXMgc3VwcG9ydHMgMTZLLTEsIHNvCi0vLyBqdXN0IHNldCB0aGlzIGF0IDE1Sywgc2hvdWxkbnQgbWFrZSB0aGF0IG11Y2ggb2YgYSBkaWZmLgotI2RlZmluZSBEVU1QX0JVRl9TSVpFICAgICAgICAgICAgICAgMHgzQzAwCisKKy8qCisgKiBEdW1wIGJ1ZmZlciBzaXplCisgKiBUaGlzIGNhbm5vdCBiZSBiaWdnZXIgdGhhbiB0aGUgbWF4IERNQSBzaXplIHRoZSBjYXJkIHN1cHBvcnRzLAorICogZ2l2ZW4gdGhlIGN1cnJlbnQgY29kZSBzdHJ1Y3R1cmUgaW4gdGhlIGhvc3QgYW5kIHVjb2RlLgorICogTW9qYXZlIHN1cHBvcnRzIDE2SywgT2FzaXMgc3VwcG9ydHMgMTZLLTEsIHNvCisgKiBqdXN0IHNldCB0aGlzIGF0IDE1Sywgc2hvdWxkbnQgbWFrZSB0aGF0IG11Y2ggb2YgYSBkaWZmLgorICovCisjZGVmaW5lIERVTVBfQlVGX1NJWkUJMHgzQzAwCiAjZW5kaWYKIAogI2RlZmluZSBNSU4oYSwgYikgKCh1MzIpKGEpIDwgKHUzMikoYikgPyAoYSkgOiAoYikpCiAjZGVmaW5lIE1BWChhLCBiKSAoKHUzMikoYSkgPiAodTMyKShiKSA/IChhKSA6IChiKSkKIAotc3RydWN0IG1jYXN0X2FkZHJlc3NfdCB7Ci0gICAgdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NbNl07Ci0gICAgc3RydWN0IG1jYXN0X2FkZHJlc3NfdCAgICpuZXh0Oworc3RydWN0IG1jYXN0X2FkZHJlc3MgeworICAgIHVuc2lnbmVkIGNoYXIJICAgYWRkcmVzc1s2XTsKKyAgICBzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAgICpuZXh0OwogfTsKIAotI2RlZmluZSBDQVJEX0RPV04gICAgICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgQ0FSRF9VUCAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIENBUkRfRkFJTCAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBDQVJEX0RJQUcgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgQ0FSRF9TTEVFUCAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIENBUkRfRE9XTiAgICAgICAgCQkweDAwMDAwMDAwCisjZGVmaW5lIENBUkRfVVAgICAgICAgICAgCQkweDAwMDAwMDAxCisjZGVmaW5lIENBUkRfRkFJTAkgICAgICAgIAkweDAwMDAwMDAyCisjZGVmaW5lIENBUkRfRElBRyAgICAgICAJCTB4MDAwMDAwMDMKKyNkZWZpbmUgQ0FSRF9TTEVFUCAgICAgICAJCTB4MDAwMDAwMDQKIAotI2RlZmluZSBBREFQVF9ET1dOICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgQURBUFRfVVAgICAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFEQVBUX0ZBSUwgICAgICAgICAgICAgMHgwMgotI2RlZmluZSBBREFQVF9SRVNFVCAgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgQURBUFRfU0xFRVAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFEQVBUX0RPV04JICAgICAgICAgICAgIAkweDAwCisjZGVmaW5lIEFEQVBUX1VQICAgICAgICAJICAgICAgIAkweDAxCisjZGVmaW5lIEFEQVBUX0ZBSUwgICAgICAgICAgICAgCQkweDAyCisjZGVmaW5lIEFEQVBUX1JFU0VUICAgICAgICAgICAgCQkweDAzCisjZGVmaW5lIEFEQVBUX1NMRUVQICAgICAgICAgICAgCQkweDA0CiAKICNkZWZpbmUgQURBUFRfRkxBR1NfQk9PVFRJTUUgICAgICAgICAgICAweDAwMDEKICNkZWZpbmUgQURBUFRfRkxBR1NfSVM2NEJJVCAgICAgICAgICAgICAweDAwMDIKQEAgLTQ0MywyOSArNDU3LDMwIEBACiAjZGVmaW5lIEFEQVBUX0ZMQUdTX1NUQVRTX1RJTUVSX1NFVCAgICAgMHgwMDgwCiAjZGVmaW5lIEFEQVBUX0ZMQUdTX1JFU0VUX1RJTUVSX1NFVCAgICAgMHgwMTAwCiAKLSNkZWZpbmUgTElOS19ET1dOICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIExJTktfQ09ORklHICAgICAgICAgICAgMHgwMQotI2RlZmluZSBMSU5LX1VQICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgTElOS19ET1dOCQkJMHgwMAorI2RlZmluZSBMSU5LX0NPTkZJRyAgCQkJMHgwMQorI2RlZmluZSBMSU5LX1VQICAgIAkJCTB4MDIKIAotI2RlZmluZSBMSU5LXzEwTUIgICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgTElOS18xMDBNQiAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIExJTktfQVVUT1NQRUVEICAgICAgICAgMHgwMgotI2RlZmluZSBMSU5LXzEwMDBNQiAgICAgICAgICAgIDB4MDMKLSNkZWZpbmUgTElOS18xMDAwME1CICAgICAgICAgICAweDA0CisjZGVmaW5lIExJTktfMTBNQiAgICAJCQkweDAwCisjZGVmaW5lIExJTktfMTAwTUIgICAgICAgICAJCTB4MDEKKyNkZWZpbmUgTElOS19BVVRPU1BFRUQgIAkJMHgwMgorI2RlZmluZSBMSU5LXzEwMDBNQiAgICAgICAgCQkweDAzCisjZGVmaW5lIExJTktfMTAwMDBNQiAgICAgICAgICAJCTB4MDQKIAotI2RlZmluZSBMSU5LX0hBTEZEICAgICAgICAgICAgIDB4MDAKLSNkZWZpbmUgTElOS19GVUxMRCAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIExJTktfQVVUT0QgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBMSU5LX0hBTEZEICAgICAgIAkJMHgwMAorI2RlZmluZSBMSU5LX0ZVTExEICAgICAJCQkweDAxCisjZGVmaW5lIExJTktfQVVUT0QgCQkJMHgwMgogCi0jZGVmaW5lIE1BQ19ESVJFQ1RFRCAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBNQUNfQkNBU1QgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTUFDX01DQVNUICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIE1BQ19QUk9NSVNDICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBNQUNfTE9PUEJBQ0sgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgTUFDX0FMTE1DQVNUICAgICAweDAwMDAwMDIwCisjZGVmaW5lIE1BQ19ESVJFQ1RFRCAJCQkweDAwMDAwMDAxCisjZGVmaW5lIE1BQ19CQ0FTVCAJCQkweDAwMDAwMDAyCisjZGVmaW5lIE1BQ19NQ0FTVCAgCQkJMHgwMDAwMDAwNAorI2RlZmluZSBNQUNfUFJPTUlTQyAgCQkJMHgwMDAwMDAwOAorI2RlZmluZSBNQUNfTE9PUEJBQ0sgICAJCQkweDAwMDAwMDEwCisjZGVmaW5lIE1BQ19BTExNQ0FTVCAgCQkJMHgwMDAwMDAyMAogCiAjZGVmaW5lIFNMSUNfRFVQTEVYKHgpICAgICgoeD09TElOS19GVUxMRCkgPyAiRkRYIiA6ICJIRFgiKQotI2RlZmluZSBTTElDX1NQRUVEKHgpICAgICAoKHg9PUxJTktfMTAwTUIpID8gIjEwME1iIiA6ICgoeD09TElOS18xMDAwTUIpID8gIjEwMDBNYiIgOiAiIDEwTWIiKSkKKyNkZWZpbmUgU0xJQ19TUEVFRCh4KSAgICAgKCh4PT1MSU5LXzEwME1CKSA/ICIxMDBNYiIgOiAJCQlcCisJCQkJKCh4PT1MSU5LXzEwMDBNQikgPyAiMTAwME1iIiA6ICIgMTBNYiIpKQogI2RlZmluZSBTTElDX0xJTktTVEFURSh4KSAoKHg9PUxJTktfRE9XTikgPyAiRG93biIgOiAiVXAgICIpCiAjZGVmaW5lIFNMSUNfQURBUFRFUl9TVEFURSh4KSAoKHg9PUFEQVBUX1VQKSA/ICJVUCIgOiAiRG93biIpCiAjZGVmaW5lIFNMSUNfQ0FSRF9TVEFURSh4KSAgICAoKHg9PUNBUkRfVVApID8gIlVQIiA6ICJEb3duIikKQEAgLTQ4MSwzMiArNDk2LDM2IEBACiAjZGVmaW5lIE5VTV9DRkdfU1BBQ0VTICAgICAgMgogI2RlZmluZSBOVU1fQ0ZHX1JFR1MgICAgICAgIDY0CiAKLXN0cnVjdCBwaHlzY2FyZF90IHsKLSAgICBzdHJ1Y3QgYWRhcHRlcl90ICAqYWRhcHRlcltTTElDX01BWF9QT1JUU107Ci0gICAgc3RydWN0IHBoeXNjYXJkX3QgKm5leHQ7CisvKgorICogV2Ugc3BsaXQgTFNTIHNlbmRzIGFjcm9zcyBmb3VyIG1pY3JvY29kZSBxdWV1ZXMgZGVyaXZlZCBmcm9tCisgKiBkZXN0aW5hdGlvbiBUQ1AgcG9ydCAoaWYgVENQL0lQKS4KKyAqLworI2RlZmluZSBTWEdfTEFSR0VfU0VORF9RVUVVRV9NQVNLICAgIDB4MworI2RlZmluZSBJU0NTSV9QT1JUIAkgICAgICAgICAgICAgMHhiYzBjICAgICAgICAgICAgICAgICAgLyogMzI2MCAqLworCitzdHJ1Y3QgcGh5c2NhcmQgeworICAgIHN0cnVjdCBhZGFwdGVyX3QJCSphZGFwdGVyW1NMSUNfTUFYX1BPUlRTXTsKKyAgICBzdHJ1Y3QgcGh5c2NhcmQJCSpuZXh0OwogICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBhZGFwdGVyc19hbGxvY2Q7CiB9OwogCi1zdHJ1Y3Qgc3hnYmFzZV9kcml2ZXJfdCB7CitzdHJ1Y3Qgc3hnYmFzZV9kcml2ZXIgewogCXNwaW5sb2NrX3QJZHJpdmVyX2xvY2s7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsJLyogaXJxc2F2ZSBmb3Igc3BpbmxvY2sgKi8KIAl1MzIJCW51bV9zeGdfY2FyZHM7CiAJdTMyCQludW1fc3hnX3BvcnRzOwogCXUzMgkJbnVtX3N4Z19wb3J0c19hY3RpdmU7CiAJdTMyCQlkeW5hbWljX2ludGFnZzsKLQlzdHJ1Y3QgcGh5c2NhcmRfdAkqcGh5c19jYXJkOworCXN0cnVjdCBwaHlzY2FyZAkqcGh5c19jYXJkOwogfTsKIAogCiBzdHJ1Y3QgYWRhcHRlcl90IHsKIAl2b2lkICogICAgICAgICAgICAgICBpZnA7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIHBvcnQ7Ci0Jc3RydWN0IHBoeXNjYXJkX3QgICAgICAgICpwaHlzY2FyZDsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgCW5hcGk7CisJc3RydWN0IHBoeXNjYXJkICAgICAgICAqcGh5c2NhcmQ7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIHBoeXNwb3J0OwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBjYXJkaW5kZXg7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGNhcmRfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgY2hpcGlkOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBidXNudW1iZXI7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIHNsb3RudW1iZXI7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGZ1bmN0aW9ubnVtYmVyOwogCXVzaG9ydCAgICAgICAgICAgICAgdmVuZGlkOwpAQCAtNTE0LDMyICs1MzMsMjMgQEAKIAl1c2hvcnQgICAgICAgICAgICAgIHN1YnN5c2lkOwogCXUzMiAgICAgICAgICAgICBpcnE7CiAKLQl2b2lkICogICAgICAgICAgICAgICBzeGdfYWRhcHRlcjsKLQl1MzIgICAgICAgICAgICAgbkJ1c3lTZW5kOwotCiAJdm9pZCBfX2lvbWVtICoJYmFzZV9hZGRyOwogCXUzMiAgICAgICAgICAgICBtZW1vcnlsZW5ndGg7CiAJdTMyICAgICAgICAgICAgIGRyYW1iYXNlOwogCXUzMiAgICAgICAgICAgICBkcmFtbGVuZ3RoOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICBxdWV1ZXNfaW5pdGlhbGl6ZWQ7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGFsbG9jYXRlZDsKKwllbnVtIGFzaWNfdHlwZQlhc2ljdHlwZTsgICAgICAvKiB0eXBlIG9mIEFTSUMgKGNoaXApICovCiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGFjdGl2YXRlZDsKIAl1MzIgICAgICAgICAgICAgaW50cnJlZ2lzdGVyZWQ7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGlzcF9pbml0aWFsaXplZDsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgZ2VubnVtYmVyOwotCXUzMiAgICAgICAgICAgICBjdXJhZGRydXBwZXI7Ci0JdTMyICAgICAgICAgICAgIGlzcmNvcHk7CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIHN0YXRlOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgICBsaW5rc3RhdGU7Ci0JdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGxpbmtzcGVlZDsKLQl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICAgbGlua2R1cGxleDsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgZmxhZ3M7CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIG1hY2FkZHJbNl07CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgICAgIGN1cnJtYWNhZGRyWzZdOwogCXUzMiAgICAgICAgICAgICBtYWNvcHRzOwogCXVzaG9ydCAgICAgICAgICAgICAgZGV2ZmxhZ3NfcHJldjsKIAl1NjQgICAgICAgICAgICAgbWNhc3RtYXNrOwotCXN0cnVjdCBtY2FzdF9hZGRyZXNzX3QgICAqbWNhc3RhZGRyczsKKwlzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAgICptY2FzdGFkZHJzOwogCXN0cnVjdCB0aW1lcl9saXN0ICAgcGluZ3RpbWVyOwogCXUzMiAgICAgICAgICAgICBwaW5ndGltZXJzZXQ7CiAJc3RydWN0IHRpbWVyX2xpc3QgICBzdGF0c3RpbWVyOwpAQCAtNTc0LDEzNSArNTg0LDE0MCBAQAogCXUzMiAgICAgICAgICAgICByY3ZfaW50ZXJydXB0X3lpZWxkczsKIAl1MzIgICAgICAgICAgICAgaW50YWdnX3BlcmlvZDsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQl1MzIgKgkJCQkJTWluaXBvcnRIYW5kbGU7CQkvLyBPdXIgbWluaXBvcnQgaGFuZGxlCi0JZW51bSBTWEdfU1RBVEUJCQkJCVN0YXRlOwkJCQkvLyBBZGFwdGVyIHN0YXRlCi0JZW51bSBTWEdfTElOS19TVEFURQkJCQlMaW5rU3RhdGU7CQkJLy8gTGluayBzdGF0ZQotCXU2NAkJCQkJCUxpbmtTcGVlZDsJCQkvLyBMaW5rIFNwZWVkCi0JdTMyCQkJCQkJUG93ZXJTdGF0ZTsJCQkvLyBORElTIHBvd2VyIHN0YXRlCi0Jc3RydWN0IGFkYXB0ZXJfdCAgIAkJKk5leHQ7CQkJCS8vIExpbmtlZCBsaXN0Ci0JdXNob3J0CQkJCQkJQWRhcHRlcklEOwkJCS8vIDEuLm4KLQl1bnNpZ25lZCBjaGFyCQkJCQkJTWFjQWRkcls2XTsJCQkvLyBPdXIgcGVybWFuZW50IEhXIG1hYyBhZGRyZXNzCi0JdW5zaWduZWQgY2hhcgkJCQkJCUN1cnJNYWNBZGRyWzZdOwkJLy8gT3VyIEN1cnJlbnQgbWFjIGFkZHJlc3MKLQlwX25ldF9kZXZpY2UgICAgICAgICAgICAgICAgbmV0ZGV2OwotCXBfbmV0X2RldmljZSAgICAgICAgICAgICAgICBuZXh0X25ldGRldmljZTsKLQlzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAgICogcGNpZGV2OworCXUzMiAqCQkJTWluaXBvcnRIYW5kbGU7CQkvKiBPdXIgbWluaXBvcnQgaGFuZGxlICovCisJZW51bSBTWEdfU1RBVEUgCQlTdGF0ZTsJCQkvKiBBZGFwdGVyIHN0YXRlICovCisJZW51bSBTWEdfTElOS19TVEFURSAJTGlua1N0YXRlOwkJLyogTGluayBzdGF0ZSAqLworCXU2NAkJCUxpbmtTcGVlZDsJCS8qIExpbmsgU3BlZWQgKi8KKwl1MzIJCQlQb3dlclN0YXRlOwkJLyogTkRJUyBwb3dlciBzdGF0ZSAqLworCXN0cnVjdCBhZGFwdGVyX3QgIAkqTmV4dDsJCQkvKiBMaW5rZWQgbGlzdCAqLworCXVzaG9ydAkJCUFkYXB0ZXJJRDsJCS8qIDEuLm4gKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqICAgICAgICAgbmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICogICAgICAgICBuZXh0X25ldGRldmljZTsKKwlzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAgICpwY2lkZXY7CiAKLQlzdHJ1Y3QgU1hHX01VTFRJQ0FTVF9BRERSRVNTCQkqTXVsdGljYXN0QWRkcnM7CQkvLyBNdWx0aWNhc3QgbGlzdAotCXU2NCAgICAgCQkJCU11bHRpY2FzdE1hc2s7CQkvLyBNdWx0aWNhc3QgbWFzawotCXUzMiAqCQkJCQlJbnRlcnJ1cHRIYW5kbGU7CS8vIFJlZ2lzdGVyIEludGVycnVwdCBoYW5kbGUKLQl1MzIJCQkJCQlJbnRlcnJ1cHRMZXZlbDsJCS8vIEZyb20gUmVzb3VyY2UgbGlzdAotCXUzMgkJCQkJCUludGVycnVwdFZlY3RvcjsJLy8gRnJvbSBSZXNvdXJjZSBsaXN0Ci0Jc3BpbmxvY2tfdAlBZGFwdGVyTG9jazsJLyogU2VyaWFsaXplIGFjY2VzcyBhZGFwdGVyIHJvdXRpbmVzICovCi0Jc3BpbmxvY2tfdAlCaXQ2NFJlZ0xvY2s7CS8qIEZvciB3cml0aW5nIDY0LWJpdCBhZGRyZXNzZXMgKi8KLQlzdHJ1Y3QgU1hHX0hXX1JFR1MJCQkqSHdSZWdzOwkJCQkvLyBTYWhhcmEgSFcgUmVnaXN0ZXIgTWVtb3J5IChCQVIwLzEpCi0Jc3RydWN0IFNYR19VQ09ERV9SRUdTCQkJKlVjb2RlUmVnczsJCQkvLyBNaWNyb2NvZGUgUmVnaXN0ZXIgTWVtb3J5IChCQVIyLzMpCi0Jc3RydWN0IFNYR19UQ0JfUkVHUwkJCSpUY2JSZWdzOwkJCS8vIFNhbWUgYXMgVWNvZGUgcmVncyAtIFNlZSBzeGdody5oCi0JdXNob3J0CQkJCQkJUmVzZXREcGNDb3VudDsJCS8vIEZvciB0aW1lb3V0Ci0JdXNob3J0CQkJCQkJUnNzRHBjQ291bnQ7CQkvLyBGb3IgdGltZW91dAotCXVzaG9ydAkJCQkJCVZlbmRvcklEOwkJCS8vIFZlbmRvciBJRAotCXVzaG9ydAkJCQkJCURldmljZUlEOwkJCS8vIERldmljZSBJRAotCXVzaG9ydAkJCQkJCVN1YlN5c3RlbUlEOwkJLy8gU3ViLVN5c3RlbSBJRAotCXVzaG9ydAkJCQkJCUZyYW1lU2l6ZTsJCQkvLyBNYXhpbXVtIGZyYW1lIHNpemUKLQl1MzIgKgkJCQkJRG1hSGFuZGxlOwkJCS8vIE5ESVMgRE1BIGhhbmRsZQotCXUzMiAqCQkJCQlQYWNrZXRQb29sSGFuZGxlOwkvLyBVc2VkIHdpdGggTkRJUyA1LjIgb25seS4gIERvbid0IGlmZGVmIG91dAotCXUzMiAqCQkJCQlCdWZmZXJQb29sSGFuZGxlOwkvLyBVc2VkIHdpdGggTkRJUyA1LjIgb25seS4gIERvbid0IGlmZGVmIG91dAotCXUzMgkJCQkJCU1hY0ZpbHRlcjsJCQkvLyBORElTIE1BQyBGaWx0ZXIKLQl1c2hvcnQJCQkJCQlJcElkOwkJCQkvLyBGb3Igc2xvd3BhdGgKLQlzdHJ1Y3QgU1hHX0VWRU5UX1JJTkcJCQkqRXZlbnRSaW5nczsJCQkvLyBIb3N0IGV2ZW50IHJpbmdzLiAgMS9DUFUgdG8gMTYgbWF4Ci0JZG1hX2FkZHJfdCAgICAgICAgICAgICAgCVBFdmVudFJpbmdzOwkJLy8gUGh5c2ljYWwgYWRkcmVzcwotCXUzMgkJCQkJCU5leHRFdmVudFtTWEdfTUFYX1JTU107CS8vIEN1cnJlbnQgbG9jYXRpb24gaW4gcmluZwotCWRtYV9hZGRyX3QgICAgICAgICAgCQlQVGNiQnVmZmVyczsJCS8vIFRDQiBCdWZmZXJzIC0gcGh5c2ljYWwgYWRkcmVzcwotCWRtYV9hZGRyX3QJICAgICAgICAgICAgCVBUY2JDb21wQnVmZmVyczsJLy8gVENCIENvbXBvc2l0ZSBCdWZmZXJzIC0gcGh5cyBhZGRyCi0Jc3RydWN0IFNYR19YTVRfUklORwkJCQkqWG10UmluZ3M7CQkJLy8gVHJhbnNtaXQgcmluZ3MKLQlkbWFfYWRkcl90CQkgICAgICAgICAgICBQWG10UmluZ3M7CQkJLy8gVHJhbnNtaXQgcmluZ3MgLSBwaHlzaWNhbCBhZGRyZXNzCi0Jc3RydWN0IFNYR19SSU5HX0lORk8JCQkJWG10UmluZ1plcm9JbmZvOwkvLyBUcmFuc21pdCByaW5nIDAgaW5mbworCXN0cnVjdCBzeGdfbXVsdGljYXN0X2FkZHJlc3MJKk11bHRpY2FzdEFkZHJzOyAvKiBNdWx0aWNhc3QgbGlzdCAqLworCXU2NCAgICAgCQlNdWx0aWNhc3RNYXNrOwkJLyogTXVsdGljYXN0IG1hc2sgKi8KKwl1MzIgCQkJKkludGVycnVwdEhhbmRsZTsJLyogUmVnaXN0ZXIgSW50ZXJydXB0IGhhbmRsZSAqLworCXUzMgkJCUludGVycnVwdExldmVsOwkJLyogRnJvbSBSZXNvdXJjZSBsaXN0ICovCisJdTMyCQkJSW50ZXJydXB0VmVjdG9yOwkvKiBGcm9tIFJlc291cmNlIGxpc3QgKi8KKwlzcGlubG9ja190CQlBZGFwdGVyTG9jazsJLyogU2VyaWFsaXplIGFjY2VzcyBhZGFwdGVyIHJvdXRpbmVzICovCisJc3BpbmxvY2tfdAkJQml0NjRSZWdMb2NrOwkvKiBGb3Igd3JpdGluZyA2NC1iaXQgYWRkcmVzc2VzICovCisJc3RydWN0IHN4Z19od19yZWdzCSpId1JlZ3M7CS8qIFNhaGFyYSBIVyBSZWdpc3RlciBNZW1vcnkgKEJBUjAvMSkgKi8KKwlzdHJ1Y3Qgc3hnX3Vjb2RlX3JlZ3MJKlVjb2RlUmVnczsJLyogTWljcm9jb2RlIFJlZ2lzdGVyIE1lbW9yeSAoQkFSMi8zKSAqLworCXN0cnVjdCBzeGdfdGNiX3JlZ3MJKlRjYlJlZ3M7CS8qIFNhbWUgYXMgVWNvZGUgcmVncyAtIFNlZSBzeGdody5oICovCisJdXNob3J0ICAgICAgICAgCUZyYW1lU2l6ZTsJLyogTWF4aW11bSBmcmFtZSBzaXplICovCisJdTMyICoJCURtYUhhbmRsZTsJLyogTkRJUyBETUEgaGFuZGxlICovCisJdTMyICoJCVBhY2tldFBvb2xIYW5kbGU7CS8qIFVzZWQgd2l0aCBORElTIDUuMiBvbmx5LiAgRG9uJ3QgaWZkZWYgb3V0ICovCisJdTMyICoJCUJ1ZmZlclBvb2xIYW5kbGU7CS8qIFVzZWQgd2l0aCBORElTIDUuMiBvbmx5LiAgRG9uJ3QgaWZkZWYgb3V0ICovCisJdTMyCQlNYWNGaWx0ZXI7CQkvKiBORElTIE1BQyBGaWx0ZXIgKi8KKwlzdHJ1Y3Qgc3hnX2V2ZW50X3JpbmcJKkV2ZW50UmluZ3M7CS8qIEhvc3QgZXZlbnQgcmluZ3MuICAxL0NQVSB0byAxNiBtYXggKi8KKwlkbWFfYWRkcl90ICAgICAgICAgICAgIAlQRXZlbnRSaW5nczsJLyogUGh5c2ljYWwgYWRkcmVzcyAqLworCXUzMgkJTmV4dEV2ZW50W1NYR19NQVhfUlNTXTsJLyogQ3VycmVudCBsb2NhdGlvbiBpbiByaW5nICovCisJZG1hX2FkZHJfdCAgICAgCVBUY2JCdWZmZXJzOwkJLyogVENCIEJ1ZmZlcnMgLSBwaHlzaWNhbCBhZGRyZXNzICovCisJZG1hX2FkZHJfdAlQVGNiQ29tcEJ1ZmZlcnM7CS8qIFRDQiBDb21wb3NpdGUgQnVmZmVycyAtIHBoeXMgYWRkciAqLworCXN0cnVjdCBzeGdfeG10X3JpbmcJKlhtdFJpbmdzOwkvKiBUcmFuc21pdCByaW5ncyAqLworCWRtYV9hZGRyX3QJCVBYbXRSaW5nczsJLyogVHJhbnNtaXQgcmluZ3MgLSBwaHlzaWNhbCBhZGRyZXNzICovCisJc3RydWN0IHN4Z19yaW5nX2luZm8JWG10UmluZ1plcm9JbmZvOwkvKiBUcmFuc21pdCByaW5nIDAgaW5mbyAqLworCiAJc3BpbmxvY2tfdAlYbXRaZXJvTG9jazsJLyogVHJhbnNtaXQgcmluZyAwIGxvY2sgKi8KLQl1MzIgKgkJCQkJWG10UmluZ1plcm9JbmRleDsJLy8gU2hhcmVkIFhNVCByaW5nIDAgaW5kZXgKLQlkbWFfYWRkcl90ICAgICAgICAgIAkJUFhtdFJpbmdaZXJvSW5kZXg7CS8vIFNoYXJlZCBYTVQgcmluZyAwIGluZGV4IC0gcGh5c2ljYWwKLQlzdHJ1Y3QgTElTVF9FTlRSWQkJCQkJRnJlZVByb3RvY29sSGVhZGVyczsvLyBGcmVlIHByb3RvY29sIGhlYWRlcnMKLQl1MzIJCQkJCQlGcmVlUHJvdG9IZHJDb3VudDsJLy8gQ291bnQKLQl2b2lkICoJCQkJCQlQcm90b2NvbEhlYWRlcnM7CS8vIEJsb2NrIG9mIHByb3RvY29sIGhlYWRlcgotCWRtYV9hZGRyX3QJICAgICAgICAgICAgCVBQcm90b2NvbEhlYWRlcnM7CS8vIEJsb2NrIG9mIHByb3RvY29sIGhlYWRlcnMgLSBwaHlzCisJdTMyICoJCVhtdFJpbmdaZXJvSW5kZXg7CS8qIFNoYXJlZCBYTVQgcmluZyAwIGluZGV4ICovCisJZG1hX2FkZHJfdCAgICAgCVBYbXRSaW5nWmVyb0luZGV4OwkvKiBTaGFyZWQgWE1UIHJpbmcgMCBpbmRleCAtIHBoeXNpY2FsICovCisJc3RydWN0IGxpc3RfZW50cnkJRnJlZVByb3RvY29sSGVhZGVyczsvKiBGcmVlIHByb3RvY29sIGhlYWRlcnMgKi8KKwl1MzIJCUZyZWVQcm90b0hkckNvdW50OwkvKiBDb3VudCAqLworCXZvaWQgKgkJUHJvdG9jb2xIZWFkZXJzOwkvKiBCbG9jayBvZiBwcm90b2NvbCBoZWFkZXIgKi8KKwlkbWFfYWRkcl90CVBQcm90b2NvbEhlYWRlcnM7CS8qIEJsb2NrIG9mIHByb3RvY29sIGhlYWRlcnMgLSBwaHlzICovCiAKLQlzdHJ1Y3QgU1hHX1JDVl9SSU5HCQkqUmN2UmluZ3M7CQkJLy8gUmVjZWl2ZSByaW5ncwotCWRtYV9hZGRyX3QJICAgICAgICAgICAgCVBSY3ZSaW5nczsJCQkvLyBSZWNlaXZlIHJpbmdzIC0gcGh5c2ljYWwgYWRkcmVzcwotCXN0cnVjdCBTWEdfUklOR19JTkZPCQkJCVJjdlJpbmdaZXJvSW5mbzsJLy8gUmVjZWl2ZSByaW5nIDAgaW5mbworCXN0cnVjdCBzeGdfcmN2X3JpbmcJKlJjdlJpbmdzOwkvKiBSZWNlaXZlIHJpbmdzICovCisJZG1hX2FkZHJfdAlQUmN2UmluZ3M7CQkvKiBSZWNlaXZlIHJpbmdzIC0gcGh5c2ljYWwgYWRkcmVzcyAqLworCXN0cnVjdCBzeGdfdWNvZGVfc3RhdHMJKnVjb2RlX3N0YXRzOwkJLyogVWNvZGUgU3RhdHMgICovCisJLyogVWNvZGUgU3RhdHMgLSBwaHlzaWNhbCBhZGRyZXNzICovCisJZG1hX2FkZHJfdAkgICAgICAgIHB1Y29kZV9zdGF0czsKIAotCXUzMiAqCQkJCQlJc3I7CQkJCS8vIEludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIKLQlkbWFfYWRkcl90CSAgICAgICAgICAgIAlQSXNyOwkJCQkvLyBJU1IgLSBwaHlzaWNhbCBhZGRyZXNzCi0JdTMyCQkJCQkJSXNyQ29weVtTWEdfTUFYX1JTU107CS8vIENvcHkgb2YgSVNSCi0JdXNob3J0CQkJCQkJSW50ZXJydXB0c0VuYWJsZWQ7CS8vIEJpdG1hc2sgb2YgZW5hYmxlZCB2ZWN0b3JzCi0JdW5zaWduZWQgY2hhciAqCQkJCQkJSW5kaXJlY3Rpb25UYWJsZTsJLy8gUlNTIGluZGlyZWN0aW9uIHRhYmxlCi0JZG1hX2FkZHJfdAkgICAgICAgICAgICAJUEluZGlyZWN0aW9uVGFibGU7CS8vIFBoeXNpY2FsIGFkZHJlc3MKLQl1c2hvcnQJCQkJCQlSc3NUYWJsZVNpemU7CQkvLyBGcm9tIE5ESVNfUkVDRUlWRV9TQ0FMRV9QQVJBTUVURVJTCi0JdXNob3J0CQkJCQkJSGFzaEtleVNpemU7CQkvLyBGcm9tIE5ESVNfUkVDRUlWRV9TQ0FMRV9QQVJBTUVURVJTCi0JdW5zaWduZWQgY2hhcgkJCQkJCUhhc2hTZWNyZXRLZXlbNDBdOwkvLyByc3Mga2V5Ci0JdTMyCQkJCQkJSGFzaEluZm9ybWF0aW9uOwotCS8vIFJlY2VpdmUgYnVmZmVyIHF1ZXVlcwotCXNwaW5sb2NrX3QJUmN2UUxvY2s7CS8qIFJlY2VpdmUgUXVldWUgTG9jayAqLwotCXN0cnVjdCBMSVNUX0VOVFJZCQkJCQlGcmVlUmN2QnVmZmVyczsJCS8vIEZyZWUgU1hHX0RBVEFfQlVGRkVSIHF1ZXVlCi0Jc3RydWN0IExJU1RfRU5UUlkJCQkJCUZyZWVSY3ZCbG9ja3M7CQkvLyBGcmVlIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSyBRCi0Jc3RydWN0IExJU1RfRU5UUlkJCQkJCUFsbFJjdkJsb2NrczsJCS8vIEFsbCBTWEdfUkNWX0JMT0NLcwotCXVzaG9ydAkJCQkJCUZyZWVSY3ZCdWZmZXJDb3VudDsJLy8gTnVtYmVyIG9mIGZyZWUgcmN2IGRhdGEgYnVmZmVycwotCXVzaG9ydAkJCQkJCUZyZWVSY3ZCbG9ja0NvdW50OwkvLyAjIG9mIGZyZWUgcmN2IGRlc2NyaXB0b3IgYmxvY2tzCi0JdXNob3J0CQkJCQkJQWxsUmN2QmxvY2tDb3VudDsJLy8gTnVtYmVyIG9mIHRvdGFsIHJlY2VpdmUgYmxvY2tzCi0JdXNob3J0CQkJCQkJUmVjZWl2ZUJ1ZmZlclNpemU7CS8vIFNYR19SQ1ZfREFUQS9KVU1CT19CVUZGRVJfU0laRSBvbmx5Ci0JdTMyCQkJCQkJQWxsb2NhdGlvbnNQZW5kaW5nOwkvLyBSZWNlaXZlIGFsbG9jYXRpb24gcGVuZGluZwotCXUzMgkJCQkJCVJjdkJ1ZmZlcnNPbkNhcmQ7CS8vIFNYR19EQVRBX0JVRkZFUlMgb3duZWQgYnkgY2FyZAotCS8vIFNHTCBidWZmZXJzCisJc3RydWN0IHN4Z19yaW5nX2luZm8JUmN2UmluZ1plcm9JbmZvOwkvKiBSZWNlaXZlIHJpbmcgMCBpbmZvICovCisKKwl1MzIgKgkJSXNyOwkJLyogSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworCWRtYV9hZGRyX3QJUElzcjsJCS8qIElTUiAtIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwl1MzIJCUlzckNvcHlbU1hHX01BWF9SU1NdOwkvKiBDb3B5IG9mIElTUiAqLworCXVzaG9ydAkJSW50ZXJydXB0c0VuYWJsZWQ7CS8qIEJpdG1hc2sgb2YgZW5hYmxlZCB2ZWN0b3JzICovCisJdW5zaWduZWQgY2hhciAJKkluZGlyZWN0aW9uVGFibGU7CS8qIFJTUyBpbmRpcmVjdGlvbiB0YWJsZSAqLworCWRtYV9hZGRyX3QJUEluZGlyZWN0aW9uVGFibGU7CS8qIFBoeXNpY2FsIGFkZHJlc3MgKi8KKwl1c2hvcnQJCVJzc1RhYmxlU2l6ZTsJCS8qIEZyb20gTkRJU19SRUNFSVZFX1NDQUxFX1BBUkFNRVRFUlMgKi8KKwl1c2hvcnQJCUhhc2hLZXlTaXplOwkJLyogRnJvbSBORElTX1JFQ0VJVkVfU0NBTEVfUEFSQU1FVEVSUyAqLworCXVuc2lnbmVkIGNoYXIJSGFzaFNlY3JldEtleVs0MF07CS8qIHJzcyBrZXkgKi8KKwl1MzIJCUhhc2hJbmZvcm1hdGlvbjsKKwkvKiBSZWNlaXZlIGJ1ZmZlciBxdWV1ZXMgKi8KKwlzcGlubG9ja190ICAgICAgUmN2UUxvY2s7ICAgICAgIAkvKiBSZWNlaXZlIFF1ZXVlIExvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9lbnRyeQlGcmVlUmN2QnVmZmVyczsJCS8qIEZyZWUgU1hHX0RBVEFfQlVGRkVSIHF1ZXVlICovCisJc3RydWN0IGxpc3RfZW50cnkJRnJlZVJjdkJsb2NrczsJCS8qIEZyZWUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLIFEgKi8KKwlzdHJ1Y3QgbGlzdF9lbnRyeQlBbGxSY3ZCbG9ja3M7CQkvKiBBbGwgU1hHX1JDVl9CTE9DS3MgKi8KKwl1c2hvcnQJCUZyZWVSY3ZCdWZmZXJDb3VudDsJLyogTnVtYmVyIG9mIGZyZWUgcmN2IGRhdGEgYnVmZmVycyAqLworCXVzaG9ydAkJRnJlZVJjdkJsb2NrQ291bnQ7CS8qICMgb2YgZnJlZSByY3YgZGVzY3JpcHRvciBibG9ja3MgKi8KKwl1c2hvcnQJCUFsbFJjdkJsb2NrQ291bnQ7CS8qIE51bWJlciBvZiB0b3RhbCByZWNlaXZlIGJsb2NrcyAqLworCXVzaG9ydAkJUmVjZWl2ZUJ1ZmZlclNpemU7CS8qIFNYR19SQ1ZfREFUQS9KVU1CT19CVUZGRVJfU0laRSBvbmx5ICovCisJLyogQ29udmVydGVkIHRoaXMgdG8gYSBhdG9taWMgdmFyaWFibGUKKwl1MzIJCQlBbGxvY2F0aW9uc1BlbmRpbmc7CSovCisJYXRvbWljX3QJCXBlbmRpbmdfYWxsb2NhdGlvbnM7CisJdTMyCQlBbGxvY2F0aW9uc1BlbmRpbmc7CS8qIFJlY2VpdmUgYWxsb2NhdGlvbiBwZW5kaW5nICovCisJdTMyCQlSY3ZCdWZmZXJzT25DYXJkOwkvKiBTWEdfREFUQV9CVUZGRVJTIG93bmVkIGJ5IGNhcmQgKi8KKwkvKiBTR0wgYnVmZmVycyAqLwogCXNwaW5sb2NrX3QJU2dsUUxvY2s7CS8qIFNHTCBRdWV1ZSBMb2NrICovCi0Jc3RydWN0IExJU1RfRU5UUlkJCQkJCUZyZWVTZ2xCdWZmZXJzOwkJLy8gRnJlZSBTWEdfU0NBVFRFUl9HQVRIRVIKLQlzdHJ1Y3QgTElTVF9FTlRSWQkJCQkJQWxsU2dsQnVmZmVyczsJCS8vIEFsbCBTWEdfU0NBVFRFUl9HQVRIRVIKLQl1c2hvcnQJCQkJCQlGcmVlU2dsQnVmZmVyQ291bnQ7CS8vIE51bWJlciBvZiBmcmVlIFNHTCBidWZmZXJzCi0JdXNob3J0CQkJCQkJQWxsU2dsQnVmZmVyQ291bnQ7CS8vIE51bWJlciBvZiB0b3RhbCBTR0wgYnVmZmVycwotCXUzMgkJCQkJCUN1cnJlbnRUaW1lOwkJLy8gVGljayBjb3VudAotCXUzMgkJCQkJCUZhc3RwYXRoQ29ubmVjdGlvbnM7Ly8gIyBvZiBmYXN0cGF0aCBjb25uZWN0aW9ucwotCS8vIFZhcmlvdXMgc2luZ2xlLWJpdCBmbGFnczoKLQl1MzIJCQkJCQlCYXNpY0FsbG9jYXRpb25zOjE7CS8vIExvY2tzIGFuZCBsaXN0aGVhZHMKLQl1MzIJCQkJCQlJbnRSZWdpc3RlcmVkOjE7CS8vIEludGVycnVwdCByZWdpc3RlcmVkCi0JdTMyCQkJCQkJUGluZ091dHN0YW5kaW5nOjE7CS8vIFBpbmcgb3V0c3RhbmRpbmcgdG8gY2FyZAotCXUzMgkJCQkJCURlYWQ6MTsJCQkJLy8gQ2FyZCBkZWFkCi0JdTMyCQkJCQkJRHVtcERyaXZlcjoxOwkJLy8gT0lEX1NMSUNfRFJJVkVSX0RVTVAgcmVxdWVzdAotCXUzMgkJCQkJCUR1bXBDYXJkOjE7CQkJLy8gT0lEX1NMSUNfQ0FSRF9EVU1QIHJlcXVlc3QKLQl1MzIJCQkJCQlEdW1wQ21kUnVubmluZzoxOwkvLyBEdW1wIGNvbW1hbmQgaW4gcHJvZ3Jlc3MKLQl1MzIJCQkJCQlEZWJ1Z1J1bm5pbmc6MTsJCS8vIEFHREIgZGVidWcgaW4gcHJvZ3Jlc3MKLQl1MzIJCQkJCQlKdW1ib0VuYWJsZWQ6MTsJCS8vIEp1bWJvIGZyYW1lcyBlbmFibGVkCi0JdTMyCQkJCQkJTXNpRW5hYmxlZDoxOwkJLy8gTVNJIGludGVycnVwdCBlbmFibGVkCi0JdTMyCQkJCQkJUnNzRW5hYmxlZDoxOwkJLy8gUlNTIEVuYWJsZWQKLQl1MzIJCQkJCQlGYWlsT25CYWRFZXByb206MTsJLy8gRmFpbCBvbiBCYWQgRWVwcm9tCi0JdTMyCQkJCQkJRGlhZ1N0YXJ0OjE7CQkvLyBJbml0IGFkYXB0ZXIgZm9yIGRpYWdub3N0aWMgc3RhcnQKLQkvLyBTdGF0cwotCXUzMgkJCQkJCVBlbmRpbmdSY3ZDb3VudDsJLy8gT3V0c3RhbmRpbmcgcmN2IGluZGljYXRpb25zCi0JdTMyCQkJCQkJUGVuZGluZ1htdENvdW50OwkvLyBPdXRzdGFuZGluZyBzZW5kIHJlcXVlc3RzCi0Jc3RydWN0IFNYR19TVEFUUwkJCQlTdGF0czsJCQkJLy8gU3RhdGlzdGljcwotCXUzMgkJCQkJCVJlYXNzQnVmczsJCQkvLyBOdW1iZXIgb2YgcmVhc3NlbWJseSBidWZmZXJzCi0JLy8gQ2FyZCBDcmFzaCBJbmZvCi0JdXNob3J0CQkJCQkJQ3Jhc2hMb2NhdGlvbjsJCS8vIE1pY3JvY29kZSBjcmFzaCBsb2NhdGlvbgotCXVuc2lnbmVkIGNoYXIJCQkJCQlDcmFzaENwdTsJCQkvLyBTYWhhcmEgQ1BVIElECi0JLy8gRGlhZ25vc3RpY3MKLQkvLwlQRElBR19DTUQJCQkJCURpYWdDbWRzOwkJCS8vIExpc3Qgb2YgZnJlZSBkaWFnbm9zdGljIGNvbW1hbmRzCi0JLy8JUERJQUdfQlVGRkVSCQkJCURpYWdCdWZmZXJzOwkJLy8gTGlzdCBvZiBmcmVlIGRpYWdub3N0aWMgYnVmZmVycwotCS8vCVBESUFHX1JFUQkJCQkJRGlhZ1JlcVE7CQkJLy8gTGlzdCBvZiBvdXRzdGFuZGluZyAoYXN5bmNocm9ub3VzKSBkaWFnIHJlcXVlc3RzCi0JLy8JdTMyCQkJCQkJRGlhZ0NtZFRpbWVvdXQ7CQkvLyBUaW1lIG91dCBmb3IgZGlhZyBjbWRzIChzZWNvbmRzKSBYWFhUT0RPIC0gcmVwbGFjZSB3aXRoIFNYR19QQVJBTSB2YXI/Ci0JLy8JdW5zaWduZWQgY2hhcgkJCQkJCURpYWdEbWFEZXNjW0RNQV9DUFVfQ1RYU107CQkvLyBGcmVlIERNQSBkZXNjcmlwdG9ycyBiaXQgZmllbGQgKDMyIENQVSBjdHggKiA4IERNQSBjdHgpCi0KLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQkvLyBQdXQgcHJlcHJvY2Vzc29yLWNvbmRpdGlvbmFsIGZpZWxkcyBhdCB0aGUgZW5kIHNvIHdlIGRvbid0Ci0JLy8gaGF2ZSB0byByZWNvbXBpbGUgc3hnZGJnIGV2ZXJ5dGltZSB3ZSByZWNvbmZpZ3VyZSB0aGUgZHJpdmVyCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0Jdm9pZCAqCQkJCQkJUGVuZGluZ1NldFJzczsJCS8vIFBlbmRpbmcgUlNTIHBhcmFtZXRlciBjaGFuZ2UKLQl1MzIJCQkJCQlJUHY0SGRyU2l6ZTsJCS8vIFNoYXJlZCA1LjIvNi4wIGVuY2FwIHBhcmFtCi0JdW5zaWduZWQgY2hhciAqICAgICAgICAgIAkJCUludGVycnVwdEluZm87CQkvLyBBbGxvY2F0ZWQgYnkgdXMgZHVyaW5nIEFkZERldmljZQorCXN0cnVjdCBsaXN0X2VudHJ5CUZyZWVTZ2xCdWZmZXJzOwkJLyogRnJlZSBzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyICovCisJc3RydWN0IGxpc3RfZW50cnkJQWxsU2dsQnVmZmVyczsJCS8qIEFsbCBzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyICovCisJdXNob3J0CQlGcmVlU2dsQnVmZmVyQ291bnQ7CS8qIE51bWJlciBvZiBmcmVlIFNHTCBidWZmZXJzICovCisJdXNob3J0CQlBbGxTZ2xCdWZmZXJDb3VudDsJLyogTnVtYmVyIG9mIHRvdGFsIFNHTCBidWZmZXJzICovCisJdTMyCQlDdXJyZW50VGltZTsJCS8qIFRpY2sgY291bnQgKi8KKwl1MzIJCUZhc3RwYXRoQ29ubmVjdGlvbnM7LyogIyBvZiBmYXN0cGF0aCBjb25uZWN0aW9ucyAqLworCS8qIFZhcmlvdXMgc2luZ2xlLWJpdCBmbGFnczogKi8KKwl1MzIJCUJhc2ljQWxsb2NhdGlvbnM6MTsJLyogTG9ja3MgYW5kIGxpc3RoZWFkcyAqLworCXUzMgkJSW50UmVnaXN0ZXJlZDoxOwkvKiBJbnRlcnJ1cHQgcmVnaXN0ZXJlZCAqLworCXUzMgkJUGluZ091dHN0YW5kaW5nOjE7CS8qIFBpbmcgb3V0c3RhbmRpbmcgdG8gY2FyZCAqLworCXUzMgkJRGVhZDoxOwkJCQkvKiBDYXJkIGRlYWQgKi8KKwl1MzIJCUR1bXBEcml2ZXI6MTsJCS8qIE9JRF9TTElDX0RSSVZFUl9EVU1QIHJlcXVlc3QgKi8KKwl1MzIJCUR1bXBDYXJkOjE7CQkJLyogT0lEX1NMSUNfQ0FSRF9EVU1QIHJlcXVlc3QgKi8KKwl1MzIJCUR1bXBDbWRSdW5uaW5nOjE7CS8qIER1bXAgY29tbWFuZCBpbiBwcm9ncmVzcyAqLworCXUzMgkJRGVidWdSdW5uaW5nOjE7CQkvKiBBR0RCIGRlYnVnIGluIHByb2dyZXNzICovCisJdTMyCQlKdW1ib0VuYWJsZWQ6MTsJCS8qIEp1bWJvIGZyYW1lcyBlbmFibGVkICovCisJdTMyCQltc2lfZW5hYmxlZDoxOwkJLyogTVNJIGludGVycnVwdCBlbmFibGVkICovCisJdTMyCQlSc3NFbmFibGVkOjE7CQkvKiBSU1MgRW5hYmxlZCAqLworCXUzMgkJRmFpbE9uQmFkRWVwcm9tOjE7CS8qIEZhaWwgb24gQmFkIEVlcHJvbSAqLworCXUzMgkJRGlhZ1N0YXJ0OjE7CQkvKiBJbml0IGFkYXB0ZXIgZm9yIGRpYWdub3N0aWMgc3RhcnQgKi8KKyAJdTMyIAkJWG10RmNFbmFibGVkOjE7CisgCXUzMiAJCVJjdkZjRW5hYmxlZDoxOworCS8qIFN0YXRzICovCisJdTMyCQlQZW5kaW5nUmN2Q291bnQ7CS8qIE91dHN0YW5kaW5nIHJjdiBpbmRpY2F0aW9ucyAqLworCXUzMgkJUGVuZGluZ1htdENvdW50OwkvKiBPdXRzdGFuZGluZyBzZW5kIHJlcXVlc3RzICovCisJc3RydWN0IHN4Z19zdGF0cwlTdGF0czsJCQkJLyogU3RhdGlzdGljcyAqLworCXUzMgkJUmVhc3NCdWZzOwkJCS8qIE51bWJlciBvZiByZWFzc2VtYmx5IGJ1ZmZlcnMgKi8KKwkvKiBDYXJkIENyYXNoIEluZm8gKi8KKwl1c2hvcnQJCUNyYXNoTG9jYXRpb247CQkvKiBNaWNyb2NvZGUgY3Jhc2ggbG9jYXRpb24gKi8KKwl1bnNpZ25lZCBjaGFyCUNyYXNoQ3B1OwkJCS8qIFNhaGFyYSBDUFUgSUQgKi8KKwkvKiBEaWFnbm9zdGljcyAqLworCS8qCVBESUFHX0NNRAlEaWFnQ21kczsgKi8JCQkvKiBMaXN0IG9mIGZyZWUgZGlhZ25vc3RpYyBjb21tYW5kcyAqLworCS8qCVBESUFHX0JVRkZFUglEaWFnQnVmZmVyczsgKi8JCS8qIExpc3Qgb2YgZnJlZSBkaWFnbm9zdGljIGJ1ZmZlcnMgKi8KKwkvKglQRElBR19SRVEJRGlhZ1JlcVE7ICovCQkJLyogTGlzdCBvZiBvdXRzdGFuZGluZyAoYXN5bmNocm9ub3VzKSBkaWFnIHJlcXVlc3RzICovCisJLyoJdTMyCQlEaWFnQ21kVGltZW91dDsgKi8JCS8qIFRpbWUgb3V0IGZvciBkaWFnIGNtZHMgKHNlY29uZHMpIFhYWFRPRE8gLSByZXBsYWNlIHdpdGggU1hHX1BBUkFNIHZhcj8gKi8KKwkvKgl1bnNpZ25lZCBjaGFyCURpYWdEbWFEZXNjW0RNQV9DUFVfQ1RYU107ICovCQkvKiBGcmVlIERNQSBkZXNjcmlwdG9ycyBiaXQgZmllbGQgKDMyIENQVSBjdHggKiA4IERNQSBjdHgpICovCisJLyoKKwkgKiBQdXQgcHJlcHJvY2Vzc29yLWNvbmRpdGlvbmFsIGZpZWxkcyBhdCB0aGUgZW5kIHNvIHdlIGRvbid0CisJICogaGF2ZSB0byByZWNvbXBpbGUgc3hnZGJnIGV2ZXJ5dGltZSB3ZSByZWNvbmZpZ3VyZSB0aGUgZHJpdmVyCisJICovCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2KQotCXUzMgkJCQkJCUFkZHJVcHBlcjsJCQkvLyBVcHBlciAzMiBiaXRzIG9mIDY0LWJpdCByZWdpc3RlcgorCXUzMgkJQWRkclVwcGVyOwkJCS8qIFVwcGVyIDMyIGJpdHMgb2YgNjQtYml0IHJlZ2lzdGVyICovCiAjZW5kaWYKLQkvLyNpZiBTWEdfRkFJTFVSRV9EVU1QCi0JLy8JTkRJU19FVkVOVAkJCQkJRHVtcFRocmVhZEV2ZW50OwkvLyBzeW5jcm9uaXplIGR1bXAgdGhyZWFkCi0JLy8JQk9PTEVBTgkJCQkJCUR1bXBUaHJlYWRSdW5uaW5nOwkvLyB0ZXJtaW5hdGlvbiBmbGFnCi0JLy8JUFNYR19EVU1QX0NNRAkJCQlEdW1wQnVmZmVyOwkJCS8vIDY4ayAtIENtZCBhbmQgQnVmZmVyCi0JLy8JZG1hX2FkZHJfdAkJUER1bXBCdWZmZXI7CQkvLyBQaHlzaWNhbCBhZGRyZXNzCi0JLy8jZW5kaWYgLy8gU1hHX0ZBSUxVUkVfRFVNUAotCisJdW5zaWduZWQgc2hvcnQgbWF4X2FnZ3JlZ2F0aW9uOworCXVuc2lnbmVkIHNob3J0IG1pbl9hZ2dyZWdhdGlvbjsKKwkvKiNpZiBTWEdfRkFJTFVSRV9EVU1QICovCisJLyoJTkRJU19FVkVOVAlEdW1wVGhyZWFkRXZlbnQ7ICovCS8qIHN5bmNyb25pemUgZHVtcCB0aHJlYWQgKi8KKwkvKglCT09MRUFOCQlEdW1wVGhyZWFkUnVubmluZzsgKi8JLyogdGVybWluYXRpb24gZmxhZyAqLworCS8qCVBTWEdfRFVNUF9DTUQJRHVtcEJ1ZmZlcjsgKi8JCQkvKiA2OGsgLSBDbWQgYW5kIEJ1ZmZlciAqLworCS8qCWRtYV9hZGRyX3QJUER1bXBCdWZmZXI7ICovCQkvKiBQaHlzaWNhbCBhZGRyZXNzICovCisJLyojZW5kaWYgKi8gLyogU1hHX0ZBSUxVUkVfRFVNUCAqLworCS8qTVNJLVggcmVsYXRlZCBkYXRhIGVsZW1lbnRzKi8KKwl1MzIgbnJfbXNpeF9lbnRyaWVzOworCXN0cnVjdCBtc2l4X2VudHJ5ICptc2lfZW50cmllczsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdXBkYXRlX2xpbmtfc3RhdHVzOworCXUzMiAJbGlua19zdGF0dXNfY2hhbmdlZDsKIH07CiAKICNpZiBTTElDX0RVTVBfRU5BQkxFRApAQCAtNzEwLDEyICs3MjUsMTAgQEAKICNkZWZpbmUgU0xJQ19EVU1QX0lOX1BST0dSRVNTICAgIDIKICNkZWZpbmUgU0xJQ19EVU1QX0RPTkUgICAgICAgICAgIDMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCisvKgogICogTWljcm9jb2RlIGNyYXNoIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gIFRoaXMKICAqIHN0cnVjdHVyZSBpcyB3cml0dGVuIG91dCB0byB0aGUgY2FyZCdzIFNSQU0gd2hlbiB0aGUgbWljcm9jb2RlIHBhbmljJ3MuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgKi8KIHN0cnVjdCBzbGljX2NyYXNoX2luZm8gewogICAgIHVzaG9ydCAgY3B1X2lkOwogICAgIHVzaG9ydCAgY3Jhc2hfcGM7CkBAIC03MzgsMjEgKzc1MSwyNSBAQAogICAgIChsYXJnZXN0YXQpICs9ICgobmV3c3RhdCkgLSAob2xkc3RhdCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIAotI2RlZmluZSBFVEhFUl9FUV9BRERSKF9BZGRyQSwgX0FkZHJCLCBfUmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX1Jlc3VsdCA9IFRSVUU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgqKHUzMiAqKShfQWRkckEpICE9ICoodTMyICopKF9BZGRyQikpICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX1Jlc3VsdCA9IEZBTFNFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCoodTE2ICopKCYoKF9BZGRyQSlbNF0pKSAhPSAqKHUxNiAqKSgmKChfQWRkckIpWzRdKSkpICAgICAgICBcCi0gICAgICAgIF9SZXN1bHQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBFVEhFUl9FUV9BRERSKF9BZGRyQSwgX0FkZHJCLCBfUmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9SZXN1bHQgPSBUUlVFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgqKHUzMiAqKShfQWRkckEpICE9ICoodTMyICopKF9BZGRyQikpICAgICAgICAgICAgICAgICAgICAgIAlcCisgICAgICAgIF9SZXN1bHQgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCoodTE2ICopKCYoKF9BZGRyQSlbNF0pKSAhPSAqKHUxNiAqKSgmKChfQWRkckIpWzRdKSkpICAgICAgICAJXAorICAgICAgICBfUmVzdWx0ID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCiAjZGVmaW5lIEVUSEVSTUFYRlJBTUUgICAxNTE0CiAjZGVmaW5lIEpVTUJPTUFYRlJBTUUgICA5MDE0CiAKKyNkZWZpbmUgU1hHX0pVTUJPX01UVSA5MDAwCisjZGVmaW5lIFNYR19ERUZBVUxUX01UVSAxNTAwCisKICNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX0lBNjQpCiAjZGVmaW5lICAgU1hHX0dFVF9BRERSX0xPVyhfYWRkcikgICh1MzIpKCh1NjQpKF9hZGRyKSAmIDB4MDAwMDAwMDBGRkZGRkZGRikKLSNkZWZpbmUgICBTWEdfR0VUX0FERFJfSElHSChfYWRkcikgICh1MzIpKCgodTY0KShfYWRkcikgPj4gMzIpICYgMHgwMDAwMDAwMEZGRkZGRkZGKQorI2RlZmluZSAgIFNYR19HRVRfQUREUl9ISUdIKF9hZGRyKSAgCQkJCQlcCisJCQkodTMyKSgoKHU2NCkoX2FkZHIpID4+IDMyKSAmIDB4MDAwMDAwMDBGRkZGRkZGRikKICNlbHNlCiAjZGVmaW5lICAgU1hHX0dFVF9BRERSX0xPVyhfYWRkcikgICAodTMyKV9hZGRyCiAjZGVmaW5lICAgU1hHX0dFVF9BRERSX0hJR0goX2FkZHIpICAodTMyKTAKQEAgLTc2MSw4ICs3NzgsMTAgQEAKICNkZWZpbmUgRkxVU0ggICAgICAgVFJVRQogI2RlZmluZSBET05UX0ZMVVNIICBGQUxTRQogCi0jZGVmaW5lIFNJT0NTTElDRFVNUENBUkQgICAgICAgICBTSU9DREVWUFJJVkFURSs5Ci0jZGVmaW5lIFNJT0NTTElDU0VUSU5UQUdHICAgICAgICBTSU9DREVWUFJJVkFURSsxMAotI2RlZmluZSBTSU9DU0xJQ1RSQUNFRFVNUCAgICAgICAgU0lPQ0RFVlBSSVZBVEUrMTEKKyNkZWZpbmUgU0lPQ1NMSUNEVU1QQ0FSRCAgICAgICAgIChTSU9DREVWUFJJVkFURSs5KQorI2RlZmluZSBTSU9DU0xJQ1NFVElOVEFHRyAgICAgICAgKFNJT0NERVZQUklWQVRFKzEwKQorI2RlZmluZSBTSU9DU0xJQ1RSQUNFRFVNUCAgICAgICAgKFNJT0NERVZQUklWQVRFKzExKQogCitleHRlcm4gc3RydWN0IGV0aHRvb2xfb3BzIHN4Z19uaWNfZXRodG9vbF9vcHM7CisjZGVmaW5lIFNYR19DT01QTEVURV9TTE9XX1NFTkRfTElNSVQJMTI4CiAjZW5kaWYgLyogIF9fU1hHX0RSSVZFUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX2V0aHRvb2wuYyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2Y3NjVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdfZXRodG9vbC5jCkBAIC0wLDAgKzEsMzI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwOCBBbGFjcml0ZWNoLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTEFDUklURUNILCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQUxBQ1JJVEVDSCwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiBUaGUgdmlld3MgYW5kIGNvbmNsdXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24KKyAqIGFyZSB0aG9zZSBvZiB0aGUgYXV0aG9ycyBhbmQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyByZXByZXNlbnRpbmcKKyAqIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIG9mIEFsYWNyaXRlY2gsIEluYy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBGSUxFTkFNRTogc3hnX2V0aHRvb2wuYworICoKKyAqIFRoZSBldGh0b29sIHN1cHBvcnQgZm9yIFNYRyBkcml2ZXIgZm9yIEFsYWNyaXRlY2gncyAxMEdiZSBwcm9kdWN0cy4KKyAqCisgKiBOT1RFOiBUaGlzIGlzIHRoZSBzdGFuZGFyZCwgbm9uLWFjY2VsZXJhdGVkIHZlcnNpb24gb2YgQWxhY3JpdGVjaCdzCisgKiAgICAgICBJUy1OSUMgZHJpdmVyLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgInN4Z19vcy5oIgorI2luY2x1ZGUgInN4Z2h3LmgiCisjaW5jbHVkZSAic3hnaGlmLmgiCisjaW5jbHVkZSAic3hnLmgiCisKK3N0cnVjdCBzeGdfbmljX3N0YXRzIHsKKyAgICAgICAgY2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dOworICAgICAgICBpbnQgc2l6ZW9mX3N0YXQ7CisgICAgICAgIGludCBzdGF0X29mZnNldDsKK307CisKKyNkZWZpbmUgU1hHX05JQ19TVEFUUyhtKSBzaXplb2YoKChzdHJ1Y3QgYWRhcHRlcl90ICopMCktPm0pLCBcCisJCQkJb2Zmc2V0b2Yoc3RydWN0IGFkYXB0ZXJfdCwgbSkKKworI2RlZmluZSBVU0VSX1ZJRVdBQkxFX0VFUFJPTV9TSVpFCTI4CisKK3N0YXRpYyBzdHJ1Y3Qgc3hnX25pY19zdGF0cyBzeGdfbmljX2dzdHJpbmdzX3N0YXRzW10gPSB7CisJeyJ4bWl0X3JpbmdfMF9mdWxsIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5YbXRaZXJvRnVsbCl9LAorCisJLyogTWF5IGJlIHdpbGwgbmVlZCBpbiBmdXR1cmUgKi8KKy8qCXsiZHVtYl94bWl0X2Jyb2FkY2FzdF9wYWNrZXRzIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5EdW1iWG10QmNhc3RQa3RzKX0sCisJeyJkdW1iX3htaXRfYnJvYWRjYXN0X2J5dGVzIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5EdW1iWG10QmNhc3RCeXRlcyl9LAorCXsiZHVtYl94bWl0X3VuaWNhc3RfcGFja2V0cyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRHVtYlhtdFVjYXN0UGt0cyl9LAorCXsiZHVtYl94bWl0X3VuaWNhc3RfYnl0ZXMiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkR1bWJYbXRVY2FzdEJ5dGVzKX0sCisqLworCXsieG1pdF9xdWV1ZV9sZW5ndGgiLCBTWEdfTklDX1NUQVRTKFN0YXRzLlhtdFFMZW4pfSwKKwl7Im1lbW9yeV9hbGxvY2F0aW9uX2ZhaWx1cmUiLCBTWEdfTklDX1NUQVRTKFN0YXRzLk5vTWVtKX0sCisJeyJJbnRlcnJ1cHRzIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5OdW1JbnRzKX0sCisJeyJmYWxzZV9pbnRlcnJ1cHRzIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5GYWxzZUludHMpfSwKKwl7InByb2Nlc3NlZF9kYXRhX3F1ZXVlX2Z1bGwiLCBTWEdfTklDX1NUQVRTKFN0YXRzLlBkcUZ1bGwpfSwKKwl7ImV2ZW50X3JpbmdfZnVsbCIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRXZlbnRSaW5nRnVsbCl9LAorCXsidHJhbnNwb3J0X2NoZWNrc3VtX2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5UcmFuc3BvcnRDc3VtKX0sCisJeyJ0cmFuc3BvcnRfdW5kZXJmbG93X2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5UcmFuc3BvcnRVZmxvdyl9LAorCXsidHJhbnNwb3J0X2hlYWRlcl9sZW5ndGhfZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLlRyYW5zcG9ydEhkckxlbil9LAorCXsibmV0d29ya19jaGVja3N1bV9lcnJvciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuTmV0d29ya0NzdW0pfSwKKwl7Im5ldHdvcmtfdW5kZXJmbG93X2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5OZXR3b3JrVWZsb3cpfSwKKwl7Im5ldHdvcmtfaGVhZGVyX2xlbmd0aF9lcnJvciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuTmV0d29ya0hkckxlbil9LAorCXsicmVjZWl2ZV9wYXJpdHlfZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLlBhcml0eSl9LAorCXsibGlua19wYXJpdHlfZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkxpbmtQYXJpdHkpfSwKKwl7ImxpbmsvZGF0YSBlYXJseV9lcnJvciIsIFNYR19OSUNfU1RBVFMoU3RhdHMuTGlua0Vhcmx5KX0sCisJeyJidWZmZXJfb3ZlcmZsb3dfZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkxpbmtCdWZPZmxvdyl9LAorCXsibGlua19jb2RlX2Vycm9yIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5MaW5rQ29kZSl9LAorCXsiZHJpYmJsZSBuaWJibGUiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkxpbmtEcmliYmxlKX0sCisJeyJDUkNfZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkxpbmtDcmMpfSwKKwl7Imxpbmtfb3ZlcmZsb3dfZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkxpbmtPZmxvdyl9LAorCXsibGlua191bmRlcmZsb3dfZXJyb3IiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkxpbmtVZmxvdyl9LAorCisJLyogTWF5IGJlIG5lZWQgaW4gZnV0dXJlICovCisvKgl7ImR1bWJfcmN2X2Jyb2FkY2FzdF9wYWNrZXRzIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5EdW1iUmN2QmNhc3RQa3RzKX0sCisJeyJkdW1iX3Jjdl9icm9hZGNhc3RfYnl0ZXMiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkR1bWJSY3ZCY2FzdEJ5dGVzKX0sCisqLwl7ImR1bWJfcmN2X211bHRpY2FzdF9wYWNrZXRzIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5EdW1iUmN2TWNhc3RQa3RzKX0sCisJeyJkdW1iX3Jjdl9tdWx0aWNhc3RfYnl0ZXMiLCBTWEdfTklDX1NUQVRTKFN0YXRzLkR1bWJSY3ZNY2FzdEJ5dGVzKX0sCisvKgl7ImR1bWJfcmN2X3VuaWNhc3RfcGFja2V0cyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRHVtYlJjdlVjYXN0UGt0cyl9LAorCXsiZHVtYl9yY3ZfdW5pY2FzdF9ieXRlcyIsIFNYR19OSUNfU1RBVFMoU3RhdHMuRHVtYlJjdlVjYXN0Qnl0ZXMpfSwKKyovCisJeyJub19zZ2xfYnVmZmVyIiwgU1hHX05JQ19TVEFUUyhTdGF0cy5Ob1NnbEJ1Zil9LAorfTsKKworI2RlZmluZSBTWEdfTklDX1NUQVRTX0xFTglBUlJBWV9TSVpFKHN4Z19uaWNfZ3N0cmluZ3Nfc3RhdHMpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzeGdfcmVnMzJfd3JpdGUodm9pZCBfX2lvbWVtICpyZWcsIHUzMiB2YWx1ZSwgYm9vbCBmbHVzaCkKK3sKKyAgICAgICAgd3JpdGVsKHZhbHVlLCByZWcpOworICAgICAgICBpZiAoZmx1c2gpCisgICAgICAgICAgICAgICAgbWIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN4Z19yZWc2NF93cml0ZShzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyLCB2b2lkIF9faW9tZW0gKnJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTY0IHZhbHVlLCB1MzIgY3B1KQoreworICAgICAgICB1MzIgdmFsdWVfaGlnaCA9ICh1MzIpICh2YWx1ZSA+PiAzMik7CisgICAgICAgIHUzMiB2YWx1ZV9sb3cgPSAodTMyKSAodmFsdWUgJiAweDAwMDAwMDAwRkZGRkZGRkYpOworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5CaXQ2NFJlZ0xvY2ssIGZsYWdzKTsKKyAgICAgICAgd3JpdGVsKHZhbHVlX2hpZ2gsICh2b2lkIF9faW9tZW0gKikoJmFkYXB0ZXItPlVjb2RlUmVnc1tjcHVdLlVwcGVyKSk7CisgICAgICAgIHdyaXRlbCh2YWx1ZV9sb3csIHJlZyk7CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPkJpdDY0UmVnTG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZAorc3hnX25pY19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cm5jcHkoZHJ2aW5mby0+ZHJpdmVyLCBzeGdfZHJpdmVyX25hbWUsIDMyKTsKKwlzdHJuY3B5KGRydmluZm8tPnZlcnNpb24sIFNYR19EUlZfVkVSU0lPTiwgMzIpOworLy8Jc3RybmNweShkcnZpbmZvLT5md192ZXJzaW9uLCBTQUhBUkFfVUNPREVfVkVSU19TVFJJTkcsIDMyKTsKKwlzdHJuY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShhZGFwdGVyLT5wY2lkZXYpLCAzMik7CisJLyogVE9ETyA6IFJlYWQgdGhlIG1ham9yIGFuZCBtaW5vciBudW1iZXIgb2YgZmlybXdhcmUuIElzIHRoaXMKKyAJICogZnJvbSB0aGUgRkxBU0gvRUVQUk9NIG9yIGRvd25sb2FkIGZpbGUgPworIAkgKi8KKwkvKiBMSU5TWVMgOiBDaGVjayBpZiB0aGlzIGlzIGNvcnJlY3Qgb3IgaWYgbm90IGZpbmQgdGhlIHJpZ2h0IHZhbHVlCisgCSAqIEFsc28gY2hlY2sgd2hhdCBpcyB0aGUgcmlnaHQgRUVQUk9NIGxlbmd0aCA6IEVFUFJPTV9TSVpFX1hGTVIgb3IgRUVQUk9NX1NJWkVfTk9fWEZNUgorIAkgKi8KK30KKworc3RhdGljIGludCBzeGdfbmljX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQoreworCS8qIE5vIHNldHRpbmdzIGFyZSBhcHBsaWNhYmxlIGFzIHdlIHN1cHBvcnQgb25seSAxMEdiL0ZJQlJFX21lZGlhICovCisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgdm9pZAorc3hnX25pY19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIGRhdGEpCit7CisJaW50IGluZGV4OworCisJc3dpdGNoKHN0cmluZ3NldCkgeworCWNhc2UgRVRIX1NTX1RFU1Q6CisJCWJyZWFrOworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBTWEdfTklDX1NUQVRTX0xFTjsgaW5kZXgrKykgeworICAgICAgICAgICAgICAgIAltZW1jcHkoZGF0YSArIGluZGV4ICogRVRIX0dTVFJJTkdfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgCXN4Z19uaWNfZ3N0cmluZ3Nfc3RhdHNbaW5kZXhdLnN0YXRfc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlFVEhfR1NUUklOR19MRU4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzeGdfbmljX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQlzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqIGRhdGEpCit7CisgICAgICAgIHN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IFNYR19OSUNfU1RBVFNfTEVOOyBpbmRleCsrKSB7CisgICAgICAgICAgICAgICAgY2hhciAqcCA9IChjaGFyICopYWRhcHRlciArCisJCQkJc3hnX25pY19nc3RyaW5nc19zdGF0c1tpbmRleF0uc3RhdF9vZmZzZXQ7CisgICAgICAgICAgICAgICAgZGF0YVtpbmRleF0gPSAoc3hnX25pY19nc3RyaW5nc19zdGF0c1tpbmRleF0uc2l6ZW9mX3N0YXQgPT0KKwkJICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHU2NCkpID8gKih1NjQgKikgcCA6ICoodTMyICopIHA7CisgICAgICAgIH0KK30KKworc3RhdGljIGludCBzeGdfbmljX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBzc2V0KQoreworICAgICAgICBzd2l0Y2ggKHNzZXQpIHsKKyAgICAgICAgY2FzZSBFVEhfU1NfU1RBVFM6CisgICAgICAgCQlyZXR1cm4gU1hHX05JQ19TVEFUU19MRU47CisJZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CisgICAgICAgIH0KK30KKworc3RhdGljIGludCBzeGdfbmljX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlzdHJ1Y3QgYWRhcHRlcl90ICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworICAgICAgICBlY21kLT5zdXBwb3J0ZWQgPSBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsOworICAgICAgICBlY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CQkvL1ZTUyBjaGVjayBUaGlzCisgICAgICAgIGVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsJLy9WU1MgY2hlY2sgVGhpcworCisJLyogRm9yIEZpYnJlIENoYW5uZWwgKi8KKwllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0ZJQlJFOworICAgICAgICBlY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFEVkVSVElTRURfRklCUkUpOworCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCisKKwkvKiBMaW5rIFNwZWVkICovCisJaWYoYWRhcHRlci0+TGlua1N0YXRlICYgU1hHX0xJTktfVVApIHsKKwkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwMDsJLy9hZGFwdGVyLT5MaW5rU3BlZWQ7CisJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBzeGdfbmljX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcmV0dXJuICgoYWRhcHRlci0+ZmxhZ3MgJiBTWEdfUkNWX0lQX0NTVU1fRU5BQkxFRCkgJiYKKwkJIChhZGFwdGVyLT5mbGFncyAmIFNYR19SQ1ZfVENQX0NTVU1fRU5BQkxFRCkpOworfQorCitzdGF0aWMgaW50IHN4Z19uaWNfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaWYgKGRhdGEpCisJCWFkYXB0ZXItPmZsYWdzIHw9IFNYR19SQ1ZfSVBfQ1NVTV9FTkFCTEVEOworCWVsc2UKKwkJYWRhcHRlci0+ZmxhZ3MgJj0gflNYR19SQ1ZfSVBfQ1NVTV9FTkFCTEVEOworCS8qCisJICogV2UgZG9udCBuZWVkIHRvIHdyaXRlIHRvIHRoZSBjYXJkIHRvIGRvIGNoZWNrc3Vtcy4KKwkgKiBJdCBkb2VzIGl0IGFueXdheXMuCisJICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3hnX25pY19nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKFNYR19IV1JFR19NRU1TSVpFICsgU1hHX1VDT0RFUkVHX01FTVNJWkUpOworfQorCitzdGF0aWMgdm9pZCBzeGdfbmljX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQlzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpwKQoreworCXN0cnVjdCBhZGFwdGVyX3QgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBzeGdfaHdfcmVncyAqSHdSZWdzID0gYWRhcHRlci0+SHdSZWdzOworCXN0cnVjdCBzeGdfdWNvZGVfcmVncyAqVWNvZGVSZWdzID0gYWRhcHRlci0+VWNvZGVSZWdzOworCXUzMiAqYnVmZiA9IHA7CisKKwltZW1zZXQocCwgMCwgKHNpemVvZihzdHJ1Y3Qgc3hnX2h3X3JlZ3MpK3NpemVvZihzdHJ1Y3Qgc3hnX3Vjb2RlX3JlZ3MpKSk7CisJbWVtY3B5KGJ1ZmYsIEh3UmVncywgc2l6ZW9mKHN0cnVjdCBzeGdfaHdfcmVncykpOworCW1lbWNweSgoYnVmZitzaXplb2Yoc3RydWN0IHN4Z19od19yZWdzKSksIFVjb2RlUmVncywgc2l6ZW9mKHN0cnVjdCBzeGdfdWNvZGVfcmVncykpOworfQorCitzdGF0aWMgaW50IHN4Z19uaWNfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlyZXR1cm4gKFVTRVJfVklFV0FCTEVfRUVQUk9NX1NJWkUpOworfQorCitzdGF0aWMgaW50IHN4Z19uaWNfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqYnl0ZXMpCit7CisJc3RydWN0IGFkYXB0ZXJfdCAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHN3X2NmZ19kYXRhICpkYXRhOworCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIGksIHN0YXR1czsKKwlkbWFfYWRkcl90IHBfYWRkcjsKKworCWRhdGEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wY2lkZXYsIHNpemVvZihzdHJ1Y3Qgc3dfY2ZnX2RhdGEpLAorCQkJCQkgJnBfYWRkcik7CisJaWYoIWRhdGEpIHsKKyAgICAgICAgICAgICAgICAvKgorCQkgKiBXZSBjYW50IGdldCBldmVuIHRoaXMgbXVjaCBtZW1vcnkuIFJhaXNlIGEgaGVsbAorICAgICAgICAgICAgICAgICAqIEdldCBvdXQgb2YgaGVyZQorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiIlcyA6IENvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJlYWRpbmcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFRVBST01cbiIsIF9fRlVOQ1RJT05fXyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgIH0KKworICAgICAgICBXUklURV9SRUcoYWRhcHRlci0+VWNvZGVSZWdzWzBdLkNvbmZpZ1N0YXQsIFNYR19DRkdfVElNRU9VVCwgVFJVRSk7CisgICAgICAgIFdSSVRFX1JFRzY0KGFkYXB0ZXIsIGFkYXB0ZXItPlVjb2RlUmVnc1swXS5Db25maWcsIHBfYWRkciwgMCk7CisJZm9yKGk9MDsgaTwxMDAwOyBpKyspIHsKKyAgICAgICAgICAgICAgICBSRUFEX1JFRyhhZGFwdGVyLT5VY29kZVJlZ3NbMF0uQ29uZmlnU3RhdCwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IFNYR19DRkdfVElNRU9VVCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG1kZWxheSgxKTsgICAgICAvKiBEbyB3ZSByZWFsbHkgbmVlZCB0aGlzICovCisgICAgICAgIH0KKworCW1lbXNldChieXRlcywgMCwgZWVwcm9tLT5sZW4pOworICAgICAgICBtZW1jcHkoYnl0ZXMsIGRhdGEtPk1hY0FkZHJbMF0uTWFjQWRkciwgc2l6ZW9mKHN0cnVjdCBzeGdfY29uZmlnX21hYykpOworICAgICAgICBtZW1jcHkoYnl0ZXMrNiwgZGF0YS0+QXRrRnJ1LlBhcnROdW0sIDYpOworICAgICAgICBtZW1jcHkoYnl0ZXMrMTIsIGRhdGEtPkF0a0ZydS5SZXZpc2lvbiwgMik7CisgICAgICAgIG1lbWNweShieXRlcysxNCwgZGF0YS0+QXRrRnJ1LlNlcmlhbCwgMTQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBldGh0b29sX29wcyBzeGdfbmljX2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MgPSBzeGdfbmljX2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzID0gc3hnX25pY19zZXRfc2V0dGluZ3MsCisJLmdldF9kcnZpbmZvID0gc3hnX25pY19nZXRfZHJ2aW5mbywKKwkuZ2V0X3JlZ3NfbGVuID0gc3hnX25pY19nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzID0gc3hnX25pY19nZXRfcmVncywKKwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAorLy8JLmdldF93b2wgPSBzeGdfbmljX2dldF93b2wsCisJLmdldF9lZXByb21fbGVuID0gc3hnX25pY19nZXRfZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbSA9IHN4Z19uaWNfZ2V0X2VlcHJvbSwKKy8vCS5nZXRfcGF1c2VwYXJhbSA9IHN4Z19uaWNfZ2V0X3BhdXNlcGFyYW0sCisvLwkuc2V0X3BhdXNlcGFyYW0gPSBzeGdfbmljX3NldF9wYXVzZXBhcmFtLAorCS5zZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3Bfc2V0X3R4X2NzdW0sCisJLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKKy8vCS5nZXRfdHNvID0gc3hnX25pY19nZXRfdHNvLAorLy8JLnNldF90c28gPSBzeGdfbmljX3NldF90c28sCisvLwkuc2VsZl90ZXN0ID0gc3hnX25pY19kaWFnX3Rlc3QsCisJLmdldF9zdHJpbmdzID0gc3hnX25pY19nZXRfc3RyaW5ncywKKwkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBzeGdfbmljX2dldF9ldGh0b29sX3N0YXRzLAorCS5nZXRfc3NldF9jb3VudCA9IHN4Z19uaWNfZ2V0X3NzZXRfY291bnQsCisJLmdldF9yeF9jc3VtID0gc3hnX25pY19nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0gPSBzeGdfbmljX3NldF9yeF9jc3VtLAorLy8JLmdldF9jb2FsZXNjZSA9IHN4Z19uaWNfZ2V0X2ludHJfY29hbGVzY2UsCisvLwkuc2V0X2NvYWxlc2NlID0gc3hnX25pY19zZXRfaW50cl9jb2FsZXNjZSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19vcy5oIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdfb3MuaAppbmRleCA2ZDNmMjNmLi42OGUxYTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z19vcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnX29zLmgKQEAgLTQ0LDM0ICs0NCwzNCBAQAogI2RlZmluZSBGQUxTRQkoMCkKICNkZWZpbmUgVFJVRQkoMSkKIAotc3RydWN0IExJU1RfRU5UUlkgewotCXN0cnVjdCBMSVNUX0VOVFJZICpubGVfZmxpbms7Ci0Jc3RydWN0IExJU1RfRU5UUlkgKm5sZV9ibGluazsKK3N0cnVjdCBsaXN0X2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9lbnRyeSAqbmxlX2ZsaW5rOworCXN0cnVjdCBsaXN0X2VudHJ5ICpubGVfYmxpbms7CiB9OwogCi0jZGVmaW5lIEluaXRpYWxpemVMaXN0SGVhZChsKSAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEluaXRpYWxpemVMaXN0SGVhZChsKSAgICAgICAgICAgICAgICAgICAJCQlcCiAgICAgICAgIChsKS0+bmxlX2ZsaW5rID0gKGwpLT5ubGVfYmxpbmsgPSAobCkKIAotI2RlZmluZSBJc0xpc3RFbXB0eShoKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBJc0xpc3RFbXB0eShoKSAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJXAogICAgICAgICAoKGgpLT5ubGVfZmxpbmsgPT0gKGgpKQogCi0jZGVmaW5lIFJlbW92ZUVudHJ5TGlzdChlKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbGlzdF9lbnRyeSAgICAgICAgICAgICAgKmI7ICAgICBcCi0gICAgICAgICAgICAgICAgbGlzdF9lbnRyeSAgICAgICAgICAgICAgKmY7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZiA9IChlKS0+bmxlX2ZsaW5rOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYiA9IChlKS0+bmxlX2JsaW5rOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYi0+bmxlX2ZsaW5rID0gZjsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZi0+bmxlX2JsaW5rID0gYjsgICAgICAgICAgICAgICBcCisjZGVmaW5lIFJlbW92ZUVudHJ5TGlzdChlKSAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgbGlzdF9lbnRyeSAgICAgICAgICAgICAgKmI7ICAgICAJCQlcCisgICAgICAgICAgICAgICAgbGlzdF9lbnRyeSAgICAgICAgICAgICAgKmY7ICAgICAJCQlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgZiA9IChlKS0+bmxlX2ZsaW5rOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgYiA9IChlKS0+bmxlX2JsaW5rOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgYi0+bmxlX2ZsaW5rID0gZjsgICAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgZi0+bmxlX2JsaW5rID0gYjsgICAgICAgICAgICAgICAJCQlcCiAgICAgICAgIH0gd2hpbGUgKDApCiAKIC8qIFRoZXNlIHR3byBoYXZlIHRvIGJlIGlubGluZWQgc2luY2UgdGhleSByZXR1cm4gdGhpbmdzLiAqLwogCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IExJU1RfRU5UUlkgKlJlbW92ZUhlYWRMaXN0KHN0cnVjdCBMSVNUX0VOVFJZICpsKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9lbnRyeSAqUmVtb3ZlSGVhZExpc3Qoc3RydWN0IGxpc3RfZW50cnkgKmwpCiB7Ci0Jc3RydWN0IExJU1RfRU5UUlkgKmY7Ci0Jc3RydWN0IExJU1RfRU5UUlkgKmU7CisJc3RydWN0IGxpc3RfZW50cnkgKmY7CisJc3RydWN0IGxpc3RfZW50cnkgKmU7CiAKIAllID0gbC0+bmxlX2ZsaW5rOwogCWYgPSBlLT5ubGVfZmxpbms7CkBAIC04MSwxMCArODEsMTAgQEAKIAlyZXR1cm4gKGUpOwogfQogCi1zdGF0aWMgX19pbmxpbmUgc3RydWN0IExJU1RfRU5UUlkgKlJlbW92ZVRhaWxMaXN0KHN0cnVjdCBMSVNUX0VOVFJZICpsKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbGlzdF9lbnRyeSAqUmVtb3ZlVGFpbExpc3Qoc3RydWN0IGxpc3RfZW50cnkgKmwpCiB7Ci0Jc3RydWN0IExJU1RfRU5UUlkgKmI7Ci0Jc3RydWN0IExJU1RfRU5UUlkgKmU7CisJc3RydWN0IGxpc3RfZW50cnkgKmI7CisJc3RydWN0IGxpc3RfZW50cnkgKmU7CiAKIAllID0gbC0+bmxlX2JsaW5rOwogCWIgPSBlLT5ubGVfYmxpbms7CkBAIC05NCw1NCArOTQsNTYgQEAKIAlyZXR1cm4gKGUpOwogfQogCi0jZGVmaW5lIEluc2VydFRhaWxMaXN0KGwsIGUpICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc3RydWN0IExJU1RfRU5UUlkgICAgICAgKmI7ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYiA9IChsKS0+bmxlX2JsaW5rOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKGUpLT5ubGVfZmxpbmsgPSAobCk7ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKGUpLT5ubGVfYmxpbmsgPSBiOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgYi0+bmxlX2ZsaW5rID0gKGUpOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKGwpLT5ubGVfYmxpbmsgPSAoZSk7ICAgICAgICAgICBcCisjZGVmaW5lIEluc2VydFRhaWxMaXN0KGwsIGUpICAgICAgICAgICAgICAgICAgICAJCQlcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfZW50cnkgICAgICAgKmI7ICAgICAJCQlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgYiA9IChsKS0+bmxlX2JsaW5rOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgKGUpLT5ubGVfZmxpbmsgPSAobCk7ICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgKGUpLT5ubGVfYmxpbmsgPSBiOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgYi0+bmxlX2ZsaW5rID0gKGUpOyAgICAgICAgICAgICAJCQlcCisgICAgICAgICAgICAgICAgKGwpLT5ubGVfYmxpbmsgPSAoZSk7ICAgICAgICAgICAJCQlcCiAgICAgICAgIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgSW5zZXJ0SGVhZExpc3QobCwgZSkgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgTElTVF9FTlRSWSAgICAgICAqZjsgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBmID0gKGwpLT5ubGVfZmxpbms7ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoZSktPm5sZV9mbGluayA9IGY7ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoZSktPm5sZV9ibGluayA9IGw7ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBmLT5ubGVfYmxpbmsgPSAoZSk7ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAobCktPm5sZV9mbGluayA9IChlKTsgICAgICAgICAgIFwKKyNkZWZpbmUgSW5zZXJ0SGVhZExpc3QobCwgZSkgICAgICAgICAgICAgICAgICAgIAkJCVwKKyAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCVwKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9lbnRyeSAgICAgICAqZjsgICAgIAkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCVwKKyAgICAgICAgICAgICAgICBmID0gKGwpLT5ubGVfZmxpbms7ICAgICAgICAgICAgIAkJCVwKKyAgICAgICAgICAgICAgICAoZSktPm5sZV9mbGluayA9IGY7ICAgICAgICAgICAgIAkJCVwKKyAgICAgICAgICAgICAgICAoZSktPm5sZV9ibGluayA9IGw7ICAgICAgICAgICAgIAkJCVwKKyAgICAgICAgICAgICAgICBmLT5ubGVfYmxpbmsgPSAoZSk7ICAgICAgICAgICAgIAkJCVwKKyAgICAgICAgICAgICAgICAobCktPm5sZV9mbGluayA9IChlKTsgICAgICAgICAgIAkJCVwKICAgICAgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBBVEtfREVCVUcgIDEKIAogI2lmIEFUS19ERUJVRwotI2RlZmluZSBTTElDX1RJTUVTVEFNUCh2YWx1ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRpbWV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRvX2dldHRpbWVvZmRheSgmdGltZXYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB2YWx1ZSA9IHRpbWV2LnR2X3NlYyoxMDAwMDAwICsgdGltZXYudHZfdXNlYzsgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU0xJQ19USU1FU1RBTVAodmFsdWUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdGltZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorICAgICAgICBkb19nZXR0aW1lb2ZkYXkoJnRpbWV2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorICAgICAgICB2YWx1ZSA9IHRpbWV2LnR2X3NlYyoxMDAwMDAwICsgdGltZXYudHZfdXNlYzsgICAgICAgICAgICAgICAgICAJXAogfQogI2Vsc2UKICNkZWZpbmUgU0xJQ19USU1FU1RBTVAodmFsdWUpCiAjZW5kaWYKIAotLyoqKioqKioqKioqKioqKioqKiAgU1hHIERFRklORVMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU1hHIERFRklORVMgKi8KIAogI2lmZGVmICBBVEtEQkcKLSNkZWZpbmUgU1hHX1RJTUVTVEFNUCh2YWx1ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRpbWV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRvX2dldHRpbWVvZmRheSgmdGltZXYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB2YWx1ZSA9IHRpbWV2LnR2X3NlYyoxMDAwMDAwICsgdGltZXYudHZfdXNlYzsgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgU1hHX1RJTUVTVEFNUCh2YWx1ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgIHRpbWV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgdmFsdWUgPSB0aW1ldi50dl9zZWMqMTAwMDAwMCArIHRpbWV2LnR2X3VzZWM7ICAgICAgICAgICAgICAgICAgCVwKIH0KICNlbHNlCiAjZGVmaW5lIFNYR19USU1FU1RBTVAodmFsdWUpCiAjZW5kaWYKIAotI2RlZmluZSBXUklURV9SRUcocmVnLHZhbHVlLGZsdXNoKSAgICAgICAgICAgICAgICAgIHN4Z19yZWczMl93cml0ZSgoJnJlZyksICh2YWx1ZSksIChmbHVzaCkpCi0jZGVmaW5lIFdSSVRFX1JFRzY0KGEscmVnLHZhbHVlLGNwdSkgICAgICAgICAgICAgICAgc3hnX3JlZzY0X3dyaXRlKChhKSwoJnJlZyksKHZhbHVlKSwoY3B1KSkKKyNkZWZpbmUgV1JJVEVfUkVHKHJlZyx2YWx1ZSxmbHVzaCkJCQkJCVwKKwkJCQlzeGdfcmVnMzJfd3JpdGUoKCZyZWcpLCAodmFsdWUpLCAoZmx1c2gpKQorI2RlZmluZSBXUklURV9SRUc2NChhLHJlZyx2YWx1ZSxjcHUpCQkJCQlcCisJCQkJc3hnX3JlZzY0X3dyaXRlKChhKSwoJnJlZyksKHZhbHVlKSwoY3B1KSkKICNkZWZpbmUgUkVBRF9SRUcocmVnLHZhbHVlKSAgICh2YWx1ZSkgPSByZWFkbCgodm9pZCBfX2lvbWVtICopKCZyZWcpKQogCiAjZW5kaWYgLyogX1NMSUNfT1NfU1BFQ0lGSUNfSF8gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2RiZy5oIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdkYmcuaAppbmRleCBiYjU4ZGRmLi5lNjEzYTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2RiZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnZGJnLmgKQEAgLTQ0LDIyICs0NCwyMyBAQAogI2RlZmluZSBfU1hHX0RFQlVHX0hfCiAKICNkZWZpbmUgQVRLREJHICAxCi0jZGVmaW5lIEFUS19UUkFDRV9FTkFCTEVEIDEKKyNkZWZpbmUgQVRLX1RSQUNFX0VOQUJMRUQgMAogCi0jZGVmaW5lIERCR19FUlJPUihuLCBhcmdzLi4uKQlwcmludGsoS0VSTl9FTUVSRyBuLCAjI2FyZ3MpCisjZGVmaW5lIERCR19FUlJPUihuLCBhcmdzLi4uKQlwcmludGsoS0VSTl9XQVJOSU5HIG4sICMjYXJncykKIAogI2lmZGVmIEFTU0VSVAogI3VuZGVmIEFTU0VSVAogI2VuZGlmCiAKKyNkZWZpbmUgU1hHX0FTU0VSVF9FTkFCTEVECiAjaWZkZWYgU1hHX0FTU0VSVF9FTkFCTEVECiAjaWZuZGVmIEFTU0VSVAotI2RlZmluZSBBU1NFUlQoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICghKGEpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgREJHX0VSUk9SKCJBU1NFUlQoKSBGYWlsdXJlOiBmaWxlICVzLCBmdW5jdGlvbiAlcyAgbGluZSAlZFxuIixcCi0gICAgICAgICAgICAgICAgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBBU1NFUlQoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoIShhKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgREJHX0VSUk9SKCJBU1NFUlQoKSBGYWlsdXJlOiBmaWxlICVzLCBmdW5jdGlvbiAlcyAgbGluZSAlZFxuIiwgXAorICAgICAgICAgICAgICAgIF9fRklMRV9fLCBfX2Z1bmNfXywgX19MSU5FX18pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KICNlbmRpZgogI2Vsc2UKQEAgLTc4LDcgKzc5LDcgQEAKIGV4dGVybiB1bG9uZyBBVEtUaW1lckRpdjsKIAogLyoKLSAqIHRyYWNlX2VudHJ5X3QgLQorICogdHJhY2VfZW50cnkgLQogICoKICAqIFRoaXMgc3RydWN0dXJlIGRlZmluZXMgYW4gZW50cnkgaW4gdGhlIHRyYWNlIGJ1ZmZlci4gIFRoZQogICogZmlyc3QgZmV3IGZpZWxkcyBtZWFuIHRoZSBzYW1lIGZyb20gZW50cnkgdG8gZW50cnksIHdoaWxlCkBAIC04NiwzNCArODcsMzQgQEAKICAqIG5lZWRzIG9mIHRoZSB0cmFjZSBlbnRyeS4gIFR5cGljYWxseSB0aGV5IGFyZSBmdW5jdGlvbiBjYWxsCiAgKiBwYXJhbWV0ZXJzLgogICovCi1zdHJ1Y3QgdHJhY2VfZW50cnlfdCB7Ci0gICAgICAgIGNoYXIgICAgICBuYW1lWzhdOyAgICAgICAgLyogOCBjaGFyYWN0ZXIgbmFtZSAtIGxpa2UgJ3MnaSdtJ2InYSdyJ2MndicgKi8KLSAgICAgICAgdTMyICAgdGltZTsgICAgICAgICAgIC8qIEN1cnJlbnQgY2xvY2sgdGljICovCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgIGNwdTsgICAgICAgICAgICAvKiBDdXJyZW50IENQVSAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyICAgICBpcnFsOyAgICAgICAgICAgLyogQ3VycmVudCBJUlFMICovCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgIGRyaXZlcjsgICAgICAgICAvKiBUaGUgZHJpdmVyIHdoaWNoIGFkZGVkIHRoZSB0cmFjZSBjYWxsICovCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgICAgIHBhZDI7ICAgICAgICAgICAvKiBwYWQgdG8gNCBieXRlIGJvdW5kYXJ5IC0gd2lsbCBwcm9iYWJseSBnZXQgdXNlZCAqLwotICAgICAgICB1MzIgICBhcmcxOyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzEgKi8KLSAgICAgICAgdTMyICAgYXJnMjsgICAgICAgICAgIC8qIENhbGxlciBhcmcyICovCi0gICAgICAgIHUzMiAgIGFyZzM7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnMyAqLwotICAgICAgICB1MzIgICBhcmc0OyAgICAgICAgICAgLyogQ2FsbGVyIGFyZzQgKi8KK3N0cnVjdCB0cmFjZV9lbnRyeSB7CisgICAgICAgIGNoYXIgICAgICAJbmFtZVs4XTsvKiA4IGNoYXJhY3RlciBuYW1lIC0gbGlrZSAncydpJ20nYidhJ3InYyd2JyAqLworICAgICAgICB1MzIgICAJCXRpbWU7ICAvKiBDdXJyZW50IGNsb2NrIHRpYyAqLworICAgICAgICB1bnNpZ25lZCBjaGFyICAgY3B1OyAgIC8qIEN1cnJlbnQgQ1BVICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBpcnFsOyAgLyogQ3VycmVudCBJUlFMICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBkcml2ZXI7LyogVGhlIGRyaXZlciB3aGljaCBhZGRlZCB0aGUgdHJhY2UgY2FsbCAqLworCS8qIHBhZCB0byA0IGJ5dGUgYm91bmRhcnkgLSB3aWxsIHByb2JhYmx5IGdldCB1c2VkICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIgICBwYWQyOworICAgICAgICB1MzIJCWFyZzE7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnMSAqLworICAgICAgICB1MzIJCWFyZzI7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnMiAqLworICAgICAgICB1MzIJCWFyZzM7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnMyAqLworICAgICAgICB1MzIJCWFyZzQ7ICAgICAgICAgICAvKiBDYWxsZXIgYXJnNCAqLwogfTsKIAotLyoKLSAqIERyaXZlciB0eXBlcyBmb3IgZHJpdmVyIGZpZWxkIGluIHRyYWNlX2VudHJ5X3QKLSAqLworLyogRHJpdmVyIHR5cGVzIGZvciBkcml2ZXIgZmllbGQgaW4gc3RydWN0IHRyYWNlX2VudHJ5ICovCiAjZGVmaW5lIFRSQUNFX1NYRyAgICAgICAgICAgICAxCiAjZGVmaW5lIFRSQUNFX1ZQQ0kgICAgICAgICAgICAyCiAjZGVmaW5lIFRSQUNFX1NMSUMgICAgICAgICAgICAzCiAKICNkZWZpbmUgVFJBQ0VfRU5UUklFUyAgIDEwMjQKIAotc3RydWN0IHN4Z190cmFjZV9idWZmZXJfdCB7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAgICAgICAgICAvKiBhaWQgZm9yIHdpbmRiZyBleHRlbnNpb24gKi8KLSAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBpbjsgICAgICAgICAgICAgICAgICAgIC8qIFdoZXJlIHRvIGFkZCAqLwotICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIGxldmVsOyAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBUcmFjZSBsZXZlbCAqLwotCXNwaW5sb2NrX3QJbG9jazsgICAgICAgICAgICAgICAgICAvKiBGb3IgTVAgdHJhY2luZyAqLwotICAgICAgICBzdHJ1Y3QgdHJhY2VfZW50cnlfdCAgICAgICAgICAgZW50cmllc1tUUkFDRV9FTlRSSUVTXTsvKiBUaGUgY2lyY3VsYXIgYnVmZmVyICovCitzdHJ1Y3Qgc3hnX3RyYWNlX2J1ZmZlciB7CisJLyogYWlkIGZvciB3aW5kYmcgZXh0ZW5zaW9uICovCisJdW5zaWduZWQgaW50ICAgICAgICAgICAgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICBpbjsgICAgICAgICAgICAgICAgICAgIC8qIFdoZXJlIHRvIGFkZCAqLworCXVuc2lnbmVkIGludCAgICAgICAgICAgIGxldmVsOyAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBUcmFjZSBsZXZlbCAqLworCXNwaW5sb2NrX3QJCWxvY2s7ICAgICAgICAgICAgICAgICAgLyogRm9yIE1QIHRyYWNpbmcgKi8KKwlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50cmllc1tUUkFDRV9FTlRSSUVTXTsvKiBUaGUgY2lyY3VsYXIgYnVmZmVyICovCiB9OwogCiAvKgpAQCAtMTI4LDE1ICsxMjksMTEgQEAKICNkZWZpbmUgVFJBQ0VfTk9JU1kgICAgICAgICAgICAgMTAgIC8qIEV2ZXJ5dGhpbmcgaW4gdGhlIHdvcmxkICovCiAKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUaGUgbWFjcm9zIHRoZW1zZWx2ZXMgLQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBUaGUgbWFjcm9zIHRoZW1zZWx2ZXMgKi8KICNpZiBBVEtfVFJBQ0VfRU5BQkxFRAogI2RlZmluZSBTWEdfVFJBQ0VfSU5JVChidWZmZXIsIHRsZXZlbCkJCQkJXAogewkJCQkJCQkJXAotCW1lbXNldCgoYnVmZmVyKSwgMCwgc2l6ZW9mKHN0cnVjdCBzeGdfdHJhY2VfYnVmZmVyX3QpKTsJXAorCW1lbXNldCgoYnVmZmVyKSwgMCwgc2l6ZW9mKHN0cnVjdCBzeGdfdHJhY2VfYnVmZmVyKSk7CVwKIAkoYnVmZmVyKS0+bGV2ZWwgPSAodGxldmVsKTsJCQkJXAogCShidWZmZXIpLT5zaXplID0gVFJBQ0VfRU5UUklFUzsJCQkJXAogCXNwaW5fbG9ja19pbml0KCYoYnVmZmVyKS0+bG9jayk7CQkJXApAQCAtMTQ1LDQwICsxNDIsMzggQEAKICNkZWZpbmUgU1hHX1RSQUNFX0lOSVQoYnVmZmVyLCB0bGV2ZWwpCiAjZW5kaWYKIAotLyoKLSAqIFRoZSB0cmFjZSBtYWNyby4gIFRoaXMgaXMgYWN0aXZlIG9ubHkgaWYgQVRLX1RSQUNFX0VOQUJMRUQgaXMgc2V0LgotICovCisvKlRoZSB0cmFjZSBtYWNyby4gIFRoaXMgaXMgYWN0aXZlIG9ubHkgaWYgQVRLX1RSQUNFX0VOQUJMRUQgaXMgc2V0LiAqLwogI2lmIEFUS19UUkFDRV9FTkFCTEVECiAjZGVmaW5lIFNYR19UUkFDRSh0ZHJpdmVyLCBidWZmZXIsIHRsZXZlbCwgdG5hbWUsIGExLCBhMiwgYTMsIGE0KSB7ICAgICAgICBcCi0gICAgICAgIGlmICgoYnVmZmVyKSAmJiAoKGJ1ZmZlciktPmxldmVsID49ICh0bGV2ZWwpKSkgeyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgdHJhY2VfaXJxbCA9IDA7ICAgIC8qID8/Pz8/PyBGSVggVEhJUyAgKi8gICAgXAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIHRyYWNlX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdHJhY2VfZW50cnlfdAkqdHJhY2VfZW50cnk7CQkJCVwKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdGltZXY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc3Bpbl9sb2NrKCYoYnVmZmVyKS0+bG9jayk7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJhY2VfZW50cnkgPSAmKGJ1ZmZlciktPmVudHJpZXNbKGJ1ZmZlciktPmluXTsgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBkb19nZXR0aW1lb2ZkYXkoJnRpbWV2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbWVtc2V0KHRyYWNlX2VudHJ5LT5uYW1lLCAwLCA4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0cmFjZV9sZW4gPSBzdHJsZW4odG5hbWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRyYWNlX2xlbiA9IHRyYWNlX2xlbiA+IDggPyA4IDogdHJhY2VfbGVuOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbWVtY3B5KHRyYWNlX2VudHJ5LT5uYW1lLCAodG5hbWUpLCB0cmFjZV9sZW4pOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+dGltZSA9IHRpbWV2LnR2X3VzZWM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5jcHUgPSAodW5zaWduZWQgY2hhcikoc21wX3Byb2Nlc3Nvcl9pZCgpICYgMHhGRik7ICAgICAgIFwKLSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+ZHJpdmVyID0gKHRkcml2ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5pcnFsID0gdHJhY2VfaXJxbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmFyZzEgPSAodWxvbmcpKGExKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+YXJnMiA9ICh1bG9uZykoYTIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5hcmczID0gKHVsb25nKShhMyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmFyZzQgPSAodWxvbmcpKGE0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIChidWZmZXIpLT5pbisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKChidWZmZXIpLT5pbiA9PSBUUkFDRV9FTlRSSUVTKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXIpLT5pbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJihidWZmZXIpLT5sb2NrKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoKGJ1ZmZlcikgJiYgKChidWZmZXIpLT5sZXZlbCA+PSAodGxldmVsKSkpIHsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIHRyYWNlX2lycWwgPSAwOy8qID8/Pz8/PyBGSVggVEhJUyAqL1wKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICB0cmFjZV9sZW47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgc3RydWN0IHRyYWNlX2VudHJ5CSp0cmFjZV9lbnRyeTsJCQkgICAgXAorICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICB0aW1ldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYoc3Bpbl90cnlsb2NrKCYoYnVmZmVyKS0+bG9jaykpCXsJCSAgICAgXAorCSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeSA9ICYoYnVmZmVyKS0+ZW50cmllc1soYnVmZmVyKS0+aW5dOyAgICAgIFwKKyAgICAgICAgCSAgICAgICAgZG9fZ2V0dGltZW9mZGF5KCZ0aW1ldik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAgICAgICAgICBtZW1zZXQodHJhY2VfZW50cnktPm5hbWUsIDAsIDgpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgCSAgICAgICAgdHJhY2VfbGVuID0gc3RybGVuKHRuYW1lKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgIHRyYWNlX2xlbiA9IHRyYWNlX2xlbiA+IDggPyA4IDogdHJhY2VfbGVuOyAgICAgICAgICAgXAorICAgICAgICAJICAgICAgICBtZW1jcHkodHJhY2VfZW50cnktPm5hbWUsICh0bmFtZSksIHRyYWNlX2xlbik7ICAgICAgIFwKKwkgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPnRpbWUgPSB0aW1ldi50dl91c2VjOyAgICAgICAgICAgICAgICAgICBcCisJCQl0cmFjZV9lbnRyeS0+Y3B1ID0gKHVuc2lnbmVkIGNoYXIpKHNtcF9wcm9jZXNzb3JfaWQoKSAmIDB4RkYpO1wKKwkgICAgICAgICAgICAgICAgdHJhY2VfZW50cnktPmRyaXZlciA9ICh0ZHJpdmVyKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIAkgICAgICAgIHRyYWNlX2VudHJ5LT5pcnFsID0gdHJhY2VfaXJxbDsgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgICAgICAgICAgICB0cmFjZV9lbnRyeS0+YXJnMSA9ICh1bG9uZykoYTEpOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgCSAgICAgICAgdHJhY2VfZW50cnktPmFyZzIgPSAodWxvbmcpKGEyKTsgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgIHRyYWNlX2VudHJ5LT5hcmczID0gKHVsb25nKShhMyk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAJICAgICAgICB0cmFjZV9lbnRyeS0+YXJnNCA9ICh1bG9uZykoYTQpOyAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIAkgICAgICAgIChidWZmZXIpLT5pbisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIAlpZiAoKGJ1ZmZlciktPmluID09IFRSQUNFX0VOVFJJRVMpICAgICAgICAgICAgICAgICAgIFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyKS0+aW4gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJc3Bpbl91bmxvY2soJihidWZmZXIpLT5sb2NrKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgCSAgICAgICAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9CQkJCQkJCQkgICAgIFwKIH0KICNlbHNlCiAjZGVmaW5lIFNYR19UUkFDRSh0ZHJpdmVyLCBidWZmZXIsIHRsZXZlbCwgdG5hbWUsIGExLCBhMiwgYTMsIGE0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdoaWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaGlmLmgKaW5kZXggYTRlOTQ2OC4uZTE5MGQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdoaWYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2hpZi5oCkBAIC0xLDQgKzEsNCBAQAotLyoKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBDb3B5cmlnaHQgqSAxOTk3LTIwMDcgQWxhY3JpdGVjaCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCiAgKgogICogJElkOiBzeGdoaWYuaCx2IDEuNSAyMDA4LzA3LzI0IDE5OjE4OjIyIGNocmlzIEV4cCAkCkBAIC03LDEyOSArNywxMzQgQEAKICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIHRoZQogICogQWxhY3JpdGVjaCBTYWhhcmEgaG9zdCBpbnRlcmZhY2UKLSAqLworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFVDT0RFIFJlZ2lzdGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdHJ1Y3QgU1hHX1VDT0RFX1JFR1MgewotCS8vIEFkZHJlc3MgMCAtIDB4M0YgPSBDb21tYW5kIGNvZGVzIDAtMTUgZm9yIFRDQiAwLiAgRXhjb2RlIDAKLQl1MzIgSWNyOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMCAtIEludCBjb250cm9sCi0JdTMyIFJzdmRSZWcxOwkJLy8gQ29kZSA9IDEgLSBUT0UgLU5BCi0JdTMyIFJzdmRSZWcyOwkJLy8gQ29kZSA9IDIgLSBUT0UgLU5BCi0JdTMyIFJzdmRSZWczOwkJLy8gQ29kZSA9IDMgLSBUT0UgLU5BCi0JdTMyIFJzdmRSZWc0OwkJLy8gQ29kZSA9IDQgLSBUT0UgLU5BCi0JdTMyIFJzdmRSZWc1OwkJLy8gQ29kZSA9IDUgLSBUT0UgLU5BCi0JdTMyIENhcmRVcDsJCS8vIENvZGUgPSA2IC0gTWljcm9jb2RlIGluaXRpYWxpemVkIHdoZW4gMQotCXUzMiBSc3ZkUmVnNzsJCS8vIENvZGUgPSA3IC0gVE9FIC1OQQotCXUzMiBDb2RlTm90VXNlZFs4XTsJLy8gQ29kZXMgOC0xNSBub3QgdXNlZC4gIEV4Q29kZSA9IDAKLQkvLyBUaGlzIGJyaW5ncyB1cyB0byBFeENvZGUgMSBhdCBhZGRyZXNzIDB4NDAgPSBJbnRlcnJ1cHQgc3RhdHVzIHBvaW50ZXIKLQl1MzIgSXNwOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMQotCXUzMiBQYWRFeDFbMTVdOwkJLy8gQ29kZXMgMS0xNSBub3QgdXNlZCB3aXRoIGV4dGVuZGVkIGNvZGVzCi0JLy8gRXhDb2RlIDIgPSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyCi0JdTMyIElzcjsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIKKyNkZWZpbmUgREJHCQkJCTEKKworLyogVUNPREUgUmVnaXN0ZXJzICovCitzdHJ1Y3Qgc3hnX3Vjb2RlX3JlZ3MgeworCS8qIEFkZHJlc3MgMCAtIDB4M0YgPSBDb21tYW5kIGNvZGVzIDAtMTUgZm9yIFRDQiAwLiAgRXhjb2RlIDAgKi8KKwl1MzIJSWNyOwkJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMCAtIEludCBjb250cm9sICovCisJdTMyCVJzdmRSZWcxOwkvKiBDb2RlID0gMSAtIFRPRSAtTkEgKi8KKwl1MzIJUnN2ZFJlZzI7CS8qIENvZGUgPSAyIC0gVE9FIC1OQSAqLworCXUzMglSc3ZkUmVnMzsJLyogQ29kZSA9IDMgLSBUT0UgLU5BICovCisJdTMyCVJzdmRSZWc0OwkvKiBDb2RlID0gNCAtIFRPRSAtTkEgKi8KKwl1MzIJUnN2ZFJlZzU7CS8qIENvZGUgPSA1IC0gVE9FIC1OQSAqLworCXUzMglDYXJkVXA7CQkvKiBDb2RlID0gNiAtIE1pY3JvY29kZSBpbml0aWFsaXplZCB3aGVuIDEgKi8KKwl1MzIJUnN2ZFJlZzc7CS8qIENvZGUgPSA3IC0gVE9FIC1OQSAqLworCXUzMglDb25maWdTdGF0OyAgICAgLyogQ29kZSA9IDggLSBDb25maWd1cmF0aW9uIGRhdGEgbG9hZCBzdGF0dXMgKi8KKwl1MzIgIAlSc3ZkUmVnOTsJLyogQ29kZSA9IDkgLSBUT0UgLU5BICovCisJdTMyCUNvZGVOb3RVc2VkWzZdOwkvKiBDb2RlcyAxMC0xNSBub3QgdXNlZC4gIEV4Q29kZSA9IDAgKi8KKwkvKiBUaGlzIGJyaW5ncyB1cyB0byBFeENvZGUgMSBhdCBhZGRyZXNzIDB4NDAgPSBJbnRlcnJ1cHQgc3RhdHVzIHBvaW50ZXIgKi8KKwl1MzIJSXNwOwkJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMSAqLworCXUzMglQYWRFeDFbMTVdOwkvKiBDb2RlcyAxLTE1IG5vdCB1c2VkIHdpdGggZXh0ZW5kZWQgY29kZXMgKi8KKwkvKiBFeENvZGUgMiA9IEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKwl1MzIJSXNyOwkJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMiAqLwogCXUzMiBQYWRFeDJbMTVdOwotCS8vIEV4Q29kZSAzID0gRXZlbnQgYmFzZSByZWdpc3Rlci4gIExvY2F0aW9uIG9mIGV2ZW50IHJpbmdzCi0JdTMyIEV2ZW50QmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMKKwkvKiBFeENvZGUgMyA9IEV2ZW50IGJhc2UgcmVnaXN0ZXIuICBMb2NhdGlvbiBvZiBldmVudCByaW5ncyAqLworCXUzMglFdmVudEJhc2U7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMgKi8KIAl1MzIgUGFkRXgzWzE1XTsKLQkvLyBFeENvZGUgNCA9IEV2ZW50IHJpbmcgc2l6ZQotCXUzMiBFdmVudFNpemU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA0CisJLyogRXhDb2RlIDQgPSBFdmVudCByaW5nIHNpemUgKi8KKwl1MzIJRXZlbnRTaXplOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA0ICovCiAJdTMyIFBhZEV4NFsxNV07Ci0JLy8gRXhDb2RlIDUgPSBUQ0IgQnVmZmVycyBiYXNlIGFkZHJlc3MKLQl1MzIgVGNiQmFzZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDUKKwkvKiBFeENvZGUgNSA9IFRDQiBCdWZmZXJzIGJhc2UgYWRkcmVzcyAqLworCXUzMglUY2JCYXNlOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA1ICovCiAJdTMyIFBhZEV4NVsxNV07Ci0JLy8gRXhDb2RlIDYgPSBUQ0IgQ29tcG9zaXRlIEJ1ZmZlcnMgYmFzZSBhZGRyZXNzCi0JdTMyIFRjYkNvbXBCYXNlOwkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA2CisJLyogRXhDb2RlIDYgPSBUQ0IgQ29tcG9zaXRlIEJ1ZmZlcnMgYmFzZSBhZGRyZXNzICovCisJdTMyCVRjYkNvbXBCYXNlOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA2ICovCiAJdTMyIFBhZEV4NlsxNV07Ci0JLy8gRXhDb2RlIDcgPSBUcmFuc21pdCByaW5nIGJhc2UgYWRkcmVzcwotCXUzMiBYbXRCYXNlOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNworCS8qIEV4Q29kZSA3ID0gVHJhbnNtaXQgcmluZyBiYXNlIGFkZHJlc3MgKi8KKwl1MzIJWG10QmFzZTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gNyAqLwogCXUzMiBQYWRFeDdbMTVdOwotCS8vIEV4Q29kZSA4ID0gVHJhbnNtaXQgcmluZyBzaXplCi0JdTMyIFhtdFNpemU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA4CisJLyogRXhDb2RlIDggPSBUcmFuc21pdCByaW5nIHNpemUgKi8KKwl1MzIJWG10U2l6ZTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gOCAqLwogCXUzMiBQYWRFeDhbMTVdOwotCS8vIEV4Q29kZSA5ID0gUmVjZWl2ZSByaW5nIGJhc2UgYWRkcmVzcwotCXUzMiBSY3ZCYXNlOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gOQorCS8qIEV4Q29kZSA5ID0gUmVjZWl2ZSByaW5nIGJhc2UgYWRkcmVzcyAqLworCXUzMglSY3ZCYXNlOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSA5ICovCiAJdTMyIFBhZEV4OVsxNV07Ci0JLy8gRXhDb2RlIDEwID0gUmVjZWl2ZSByaW5nIHNpemUKLQl1MzIgUmN2U2l6ZTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEwCisJLyogRXhDb2RlIDEwID0gUmVjZWl2ZSByaW5nIHNpemUgKi8KKwl1MzIJUmN2U2l6ZTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTAgKi8KIAl1MzIgUGFkRXgxMFsxNV07Ci0JLy8gRXhDb2RlIDExID0gUmVhZCBFRVBST00gQ29uZmlnCi0JdTMyIENvbmZpZzsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDExCisJLyogRXhDb2RlIDExID0gUmVhZCBFRVBST00vRmxhc2ggQ29uZmlnICovCisJdTMyCUNvbmZpZzsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDExICovCiAJdTMyIFBhZEV4MTFbMTVdOwotCS8vIEV4Q29kZSAxMiA9IE11bHRpY2FzdCBiaXRzIDMxOjAKLQl1MzIgTWNhc3RMb3c7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMgorCS8qIEV4Q29kZSAxMiA9IE11bHRpY2FzdCBiaXRzIDMxOjAgKi8KKwl1MzIJTWNhc3RMb3c7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEyICovCiAJdTMyIFBhZEV4MTJbMTVdOwotCS8vIEV4Q29kZSAxMyA9IE11bHRpY2FzdCBiaXRzIDYzOjMyCi0JdTMyIE1jYXN0SGlnaDsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDEzCisJLyogRXhDb2RlIDEzID0gTXVsdGljYXN0IGJpdHMgNjM6MzIgKi8KKwl1MzIJTWNhc3RIaWdoOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxMyAqLwogCXUzMiBQYWRFeDEzWzE1XTsKLQkvLyBFeENvZGUgMTQgPSBQaW5nCi0JdTMyIFBpbmc7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNAorCS8qIEV4Q29kZSAxNCA9IFBpbmcgKi8KKwl1MzIJUGluZzsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE0ICovCiAJdTMyIFBhZEV4MTRbMTVdOwotCS8vIEV4Q29kZSAxNSA9IExpbmsgTVRVCi0JdTMyIExpbmtNdHU7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNQorCS8qIEV4Q29kZSAxNSA9IExpbmsgTVRVICovCisJdTMyCUxpbmtNdHU7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE1ICovCiAJdTMyIFBhZEV4MTVbMTVdOwotCS8vIEV4Q29kZSAxNiA9IERvd25sb2FkIHN5bmNocm9uaXphdGlvbgotCXUzMiBMb2FkU3luYzsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE2CisJLyogRXhDb2RlIDE2ID0gRG93bmxvYWQgc3luY2hyb25pemF0aW9uICovCisJdTMyCUxvYWRTeW5jOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNiAqLwogCXUzMiBQYWRFeDE2WzE1XTsKLQkvLyBFeENvZGUgMTcgPSBVcHBlciBEUkFNIGFkZHJlc3MgYml0cyBvbiAzMi1iaXQgc3lzdGVtcwotCXUzMiBVcHBlcjsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE3CisJLyogRXhDb2RlIDE3ID0gVXBwZXIgRFJBTSBhZGRyZXNzIGJpdHMgb24gMzItYml0IHN5c3RlbXMgKi8KKwl1MzIJVXBwZXI7CQkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxNyAqLwogCXUzMiBQYWRFeDE3WzE1XTsKLQkvLyBFeENvZGUgMTggPSBTbG93cGF0aCBTZW5kIEluZGV4IEFkZHJlc3MKLQl1MzIgU1BTZW5kSW5kZXg7CS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDE4CisJLyogRXhDb2RlIDE4ID0gU2xvd3BhdGggU2VuZCBJbmRleCBBZGRyZXNzICovCisJdTMyCVNQU2VuZEluZGV4OwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxOCAqLwogCXUzMiBQYWRFeDE4WzE1XTsKLQl1MzIgUnN2ZFhGOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMTkKKwkvKiBFeENvZGUgMTkgPSBHZXQgdWNvZGUgc3RhdGlzdGljcyAqLworCXUzMglHZXRVY29kZVN0YXRzOwkvKiBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAxOSAqLwogCXUzMiBQYWRFeDE5WzE1XTsKLQkvLyBFeENvZGUgMjAgPSBBZ2dyZWdhdGlvbgotCXUzMiBBZ2dyZWdhdGlvbjsJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjAKKwkvKiBFeENvZGUgMjAgPSBBZ2dyZWdhdGlvbiAtIFNlZSBzeGdtaXNjLmM6U3hnU2V0SW50ZXJydXB0QWdncmVnYXRpb24gKi8KKwl1MzIJQWdncmVnYXRpb247CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDIwICovCiAJdTMyIFBhZEV4MjBbMTVdOwotCS8vIEV4Q29kZSAyMSA9IFJlY2VpdmUgTURMIHB1c2ggdGltZXIKLQl1MzIgUHVzaFRpY2tzOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjEKKwkvKiBFeENvZGUgMjEgPSBSZWNlaXZlIE1ETCBwdXNoIHRpbWVyICovCisJdTMyCVB1c2hUaWNrczsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjEgKi8KIAl1MzIgUGFkRXgyMVsxNV07Ci0JLy8gRXhDb2RlIDIyID0gVE9FIE5BCi0JdTMyIEFja0ZyZXF1ZW5jeTsJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjIKKwkvKiBFeENvZGUgMjIgPSBBQ0sgRnJlcXVlbmN5ICovCisJdTMyCUFja0ZyZXF1ZW5jeTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjIgKi8KIAl1MzIgUGFkRXgyMlsxNV07Ci0JLy8gRXhDb2RlIDIzID0gVE9FIE5BCisJLyogRXhDb2RlIDIzID0gVE9FIE5BICovCiAJdTMyIFJzdmRSZWcyMzsKIAl1MzIgUGFkRXgyM1sxNV07Ci0JLy8gRXhDb2RlIDI0ID0gVE9FIE5BCisJLyogRXhDb2RlIDI0ID0gVE9FIE5BICovCiAJdTMyIFJzdmRSZWcyNDsKIAl1MzIgUGFkRXgyNFsxNV07Ci0JLy8gRXhDb2RlIDI1ID0gVE9FIE5BCi0JdTMyIFJzdmRSZWcyNTsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI1CisJLyogRXhDb2RlIDI1ID0gVE9FIE5BICovCisJdTMyCVJzdmRSZWcyNTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjUgKi8KIAl1MzIgUGFkRXgyNVsxNV07Ci0JLy8gRXhDb2RlIDI2ID0gUmVjZWl2ZSBjaGVja3N1bSByZXF1aXJlbWVudHMKLQl1MzIgUmVjZWl2ZUNoZWNrc3VtOwkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyNgorCS8qIEV4Q29kZSAyNiA9IFJlY2VpdmUgY2hlY2tzdW0gcmVxdWlyZW1lbnRzICovCisJdTMyCVJlY2VpdmVDaGVja3N1bTsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjYgKi8KIAl1MzIgUGFkRXgyNlsxNV07Ci0JLy8gRXhDb2RlIDI3ID0gUlNTIFJlcXVpcmVtZW50cwotCXUzMiBSc3M7CQkvLyBDb2RlID0gMCAoZXh0ZW5kZWQpLCBFeENvZGUgPSAyNworCS8qIEV4Q29kZSAyNyA9IFJTUyBSZXF1aXJlbWVudHMgKi8KKwl1MzIJUnNzOwkJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjcgKi8KIAl1MzIgUGFkRXgyN1sxNV07Ci0JLy8gRXhDb2RlIDI4ID0gUlNTIFRhYmxlCi0JdTMyIFJzc1RhYmxlOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjgKKwkvKiBFeENvZGUgMjggPSBSU1MgVGFibGUgKi8KKwl1MzIJUnNzVGFibGU7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI4ICovCiAJdTMyIFBhZEV4MjhbMTVdOwotCS8vIEV4Q29kZSAyOSA9IEV2ZW50IHJpbmcgcmVsZWFzZSBlbnRyaWVzCi0JdTMyIEV2ZW50UmVsZWFzZTsJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMjkKKwkvKiBFeENvZGUgMjkgPSBFdmVudCByaW5nIHJlbGVhc2UgZW50cmllcyAqLworCXUzMglFdmVudFJlbGVhc2U7CS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDI5ICovCiAJdTMyIFBhZEV4MjlbMTVdOwotCS8vIEV4Q29kZSAzMCA9IE51bWJlciBvZiByZWNlaXZlIGJ1ZmZlcmxpc3QgY29tbWFuZHMgb24gcmluZyAwCi0JdTMyIFJjdkNtZDsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMwCisJLyogRXhDb2RlIDMwID0gTnVtYmVyIG9mIHJlY2VpdmUgYnVmZmVybGlzdCBjb21tYW5kcyBvbiByaW5nIDAgKi8KKwl1MzIJUmN2Q21kOwkJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMzAgKi8KIAl1MzIgUGFkRXgzMFsxNV07Ci0JLy8gRXhDb2RlIDMxID0gc2xvd3BhdGggdHJhbnNtaXQgY29tbWFuZCAtIERhdGFbMzE6MF0gPSAxCi0JdTMyIFhtdENtZDsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMxCisJLyogRXhDb2RlIDMxID0gc2xvd3BhdGggdHJhbnNtaXQgY29tbWFuZCAtIERhdGFbMzE6MF0gPSAxICovCisJdTMyCVhtdENtZDsJCS8qIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMxICovCiAJdTMyIFBhZEV4MzFbMTVdOwotCS8vIEV4Q29kZSAzMiA9IER1bXAgY29tbWFuZAotCXUzMiBEdW1wQ21kOwkJLy8gQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMzIKKwkvKiBFeENvZGUgMzIgPSBEdW1wIGNvbW1hbmQgKi8KKwl1MzIJRHVtcENtZDsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMzIgKi8KIAl1MzIgUGFkRXgzMlsxNV07Ci0JLy8gRXhDb2RlIDMzID0gRGVidWcgY29tbWFuZAotCXUzMiBEZWJ1Z0NtZDsJCS8vIENvZGUgPSAwIChleHRlbmRlZCksIEV4Q29kZSA9IDMzCisJLyogRXhDb2RlIDMzID0gRGVidWcgY29tbWFuZCAqLworCXUzMglEZWJ1Z0NtZDsJLyogQ29kZSA9IDAgKGV4dGVuZGVkKSwgRXhDb2RlID0gMzMgKi8KIAl1MzIgUGFkRXgzM1sxNV07Ci0JLy8gVGhlcmUgYXJlIDEyOCBwb3NzaWJsZSBleHRlbmRlZCBjb21tYW5kcyAtIGVhY2ggb2YgYWNjb3VudCBmb3IgMTYKLQkvLyB3b3JkcyAoaW5jbHVkaW5nIHRoZSBub24tcmVsZXZlbnQgYmFzZSBjb21tYW5kIGNvZGVzIDEtMTUpLgotCS8vIFBhZCBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGVzZSBoZXJlIHRvIGJyaW5nIHVzIHRvIHRoZSBuZXh0IENQVQotCS8vIGJhc2UuICBBcyBleHRlbmRlZCBjb2RlcyBhcmUgYWRkZWQsIHJlZHVjZSB0aGUgZmlyc3QgYXJyYXkgdmFsdWUgaW4KLQkvLyB0aGUgZm9sbG93aW5nIGZpZWxkCi0JdTMyIFBhZFRvTmV4dENwdVs5NF1bMTZdOwkvLyA5NCA9IDEyOCAtIDM0ICgzNCA9IEV4Y29kZXMgMCAtIDMzKQorCS8qCisJICogVGhlcmUgYXJlIDEyOCBwb3NzaWJsZSBleHRlbmRlZCBjb21tYW5kcyAtIGVhY2ggb2YgYWNjb3VudCBmb3IgMTYKKwkgKiB3b3JkcyAoaW5jbHVkaW5nIHRoZSBub24tcmVsZXZlbnQgYmFzZSBjb21tYW5kIGNvZGVzIDEtMTUpLgorCSAqIFBhZCBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGVzZSBoZXJlIHRvIGJyaW5nIHVzIHRvIHRoZSBuZXh0IENQVQorCSAqIGJhc2UuICBBcyBleHRlbmRlZCBjb2RlcyBhcmUgYWRkZWQsIHJlZHVjZSB0aGUgZmlyc3QgYXJyYXkgdmFsdWUgaW4KKwkgKiB0aGUgZm9sbG93aW5nIGZpZWxkCisJICovCisJdTMyIFBhZFRvTmV4dENwdVs5NF1bMTZdOwkvKiA5NCA9IDEyOCAtIDM0ICgzNCA9IEV4Y29kZXMgMCAtIDMzKSovCiB9OwogCi0vLyBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAoMCkgdmFsdWVzCisvKiBJbnRlcnJ1cHQgY29udHJvbCByZWdpc3RlciAoMCkgdmFsdWVzICovCiAjZGVmaW5lIFNYR19JQ1JfRElTQUJMRQkJCQkJMHgwMDAwMDAwMAogI2RlZmluZSBTWEdfSUNSX0VOQUJMRQkJCQkJMHgwMDAwMDAwMQogI2RlZmluZSBTWEdfSUNSX01BU0sJCQkJCTB4MDAwMDAwMDIKQEAgLTEzOSw0NyArMTQ0LDY1IEBACiAJKCgoKF9NZXNzYWdlSWQpIDw8IFNYR19JQ1JfTVNHSURfU0hJRlQpICYJXAogCSAgU1hHX0lDUl9NU0dJRF9NQVNLKSB8IChfRGF0YSkpCiAKLS8vIFRoZSBNaWNyb2NvZGUgc3VwcG9ydHMgdXAgdG8gMTYgUlNTIHF1ZXVlcwotI2RlZmluZSBTWEdfTUFYX1JTUwkJCQkxNgotI2RlZmluZSBTWEdfTUFYX1JTU19UQUJMRV9TSVpFCTI1NgkvLyAyNTYtYnl0ZSBtYXgKKyNkZWZpbmUgU1hHX01JTl9BR0dfREVGQVVMVAkweDAwMTAJLyogTWluaW11bSBhZ2dyZWdhdGlvbiBkZWZhdWx0ICovCisjZGVmaW5lIFNYR19NQVhfQUdHX0RFRkFVTFQJMHgwMDQwCS8qIE1heGltdW0gYWdncmVnYXRpb24gZGVmYXVsdCAqLworI2RlZmluZSBTWEdfTUFYX0FHR19TSElGVAkxNgkvKiBNYXhpbXVtIGluIHRvcCAxNiBiaXRzIG9mIHJlZ2lzdGVyICovCisvKiBEaXNhYmxlIGludGVycnVwdCBhZ2dyZWdhdGlvbiBvbiB4bXQgKi8KKyNkZWZpbmUgU1hHX0FHR19YTVRfRElTQUJMRQkweDgwMDAwMDAwCiAKLSNkZWZpbmUgU1hHX1JTU19UQ1A2CQkJCTB4MDAwMDAwMDEJLy8gUlNTIFRDUCBvdmVyIElQdjYKLSNkZWZpbmUgU1hHX1JTU19UQ1A0CQkJCTB4MDAwMDAwMDIJLy8gUlNTIFRDUCBvdmVyIElQdjQKLSNkZWZpbmUgU1hHX1JTU19MRUdBQ1kJCQkJMHgwMDAwMDAwNAkvLyBMaW5lLWJhc2UgaW50ZXJydXB0cwotI2RlZmluZSBTWEdfUlNTX1RBQkxFX1NJWkUJCQkweDAwMDBGRjAwCS8vIFRhYmxlIHNpemUgbWFzaworLyogVGhlIE1pY3JvY29kZSBzdXBwb3J0cyB1cCB0byAxNiBSU1MgcXVldWVzIChSZXZCKSAqLworI2RlZmluZSBTWEdfTUFYX1JTUwkJCTE2CisjZGVmaW5lIFNYR19NQVhfUlNTX1JFVkEJCTgKKworI2RlZmluZSBTWEdfTUFYX1JTU19UQUJMRV9TSVpFCTI1NgkJLyogMjU2LWJ5dGUgbWF4ICovCisKKyNkZWZpbmUgU1hHX1JTU19SRVZBX1RDUDYJMHgwMDAwMDAwMQkvKiBSU1MgVENQIG92ZXIgSVB2NiAqLworI2RlZmluZSBTWEdfUlNTX1JFVkFfVENQNAkweDAwMDAwMDAyCS8qIFJTUyBUQ1Agb3ZlciBJUHY0ICovCisjZGVmaW5lIFNYR19SU1NfSVAJCTB4MDAwMDAwMDEJLyogUlNTIFRDUCBvdmVyIElQdjYgKi8KKyNkZWZpbmUgU1hHX1JTU19UQ1AJCTB4MDAwMDAwMDIJLyogUlNTIFRDUCBvdmVyIElQdjQgKi8KKyNkZWZpbmUgU1hHX1JTU19MRUdBQ1kJCTB4MDAwMDAwMDQJLyogTGluZS1iYXNlIGludGVycnVwdHMgKi8KKyNkZWZpbmUgU1hHX1JTU19UQUJMRV9TSVpFCTB4MDAwMEZGMDAJLyogVGFibGUgc2l6ZSBtYXNrICovCisKICNkZWZpbmUgU1hHX1JTU19UQUJMRV9TSElGVAkJCTgKLSNkZWZpbmUJU1hHX1JTU19CQVNFX0NQVQkJCTB4MDBGRjAwMDAJLy8gQmFzZSBDUFUgKG5vdCB1c2VkKQorI2RlZmluZQlTWEdfUlNTX0JBU0VfQ1BVCTB4MDBGRjAwMDAJLyogQmFzZSBDUFUgKG5vdCB1c2VkKSAqLwogI2RlZmluZSBTWEdfUlNTX0JBU0VfU0hJRlQJCQkxNgogCi0jZGVmaW5lIFNYR19SQ1ZfSVBfQ1NVTV9FTkFCTEVECQkweDAwMDAwMDAxCS8vIEV4Q29kZSAyNiAoUmVjZWl2ZUNoZWNrc3VtKQotI2RlZmluZSBTWEdfUkNWX1RDUF9DU1VNX0VOQUJMRUQJMHgwMDAwMDAwMgkvLyBFeENvZGUgMjYgKFJlY2VpdmVDaGVja3N1bSkKKyNkZWZpbmUgU1hHX1JDVl9JUF9DU1VNX0VOQUJMRUQJCTB4MDAwMDAwMDEJLyogRXhDb2RlIDI2IChSZWNlaXZlQ2hlY2tzdW0pICovCisjZGVmaW5lIFNYR19SQ1ZfVENQX0NTVU1fRU5BQkxFRAkweDAwMDAwMDAyCS8qIEV4Q29kZSAyNiAoUmVjZWl2ZUNoZWNrc3VtKSAqLwogCiAjZGVmaW5lIFNYR19YTVRfQ1BVSURfU0hJRlQJCQkxNgogCi0jaWYgVlBDSQotI2RlZmluZSBTWEdfQ0hFQ0tfRk9SX0hBTkdfVElNRQkJMzAwMAotI2Vsc2UKKy8qCisgKiBTdGF0dXMgcmV0dXJuZWQgYnkgdWNvZGUgaW4gdGhlIENvbmZpZ1N0YXQgcmVnIChzZWUgYWJvdmUpIHdoZW4gYXR0ZW1wdGVkCisgKiB0byBsb2FkIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIHRoZSBFRVBST00vRmxhc2guCisgKi8KKyNkZWZpbmUJU1hHX0NGR19USU1FT1VUCQkxCS8qIGluaXQgdmFsdWUgLSB0aW1lb3V0IGlmIHVuY2hhbmdlZCAqLworI2RlZmluZQlTWEdfQ0ZHX0xPQURfRUVQUk9NCTIJLyogY29uZmlnIGRhdGEgbG9hZGVkIGZyb20gRUVQUk9NICovCisjZGVmaW5lCVNYR19DRkdfTE9BRF9GTEFTSAkzCS8qIGNvbmZpZyBkYXRhIGxvYWRlZCBmcm9tIGZsYXNoICovCisjZGVmaW5lCVNYR19DRkdfTE9BRF9JTlZBTElECTQJLyogbm8gdmFsaWQgY29uZmlnIGRhdGEgZm91bmQgKi8KKyNkZWZpbmUJU1hHX0NGR19MT0FEX0VSUk9SCTUJLyogaGFyZHdhcmUgZXJyb3IgKi8KKwogI2RlZmluZSBTWEdfQ0hFQ0tfRk9SX0hBTkdfVElNRQkJNQotI2VuZGlmCiAKIC8qCiAgKiBUQ0IgcmVnaXN0ZXJzIC0gVGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgcmVnaXN0ZXIgbWVtb3J5IGFyZWEgYXMgVUNPREVfUkVHUwogICogYWJvdmUsIGJ1dCBkZWZpbmVkIGRpZmZlcmVudGx5LiAgQml0cyAxNzowNiBvZiB0aGUgYWRkcmVzcyBkZWZpbmUgdGhlIFRDQiwKICAqIHdoaWNoIG1lYW5zIGVhY2ggVENCIGFyZWEgb2NjdXBpZXMgMHg0MCAoNjQpIGJ5dGVzLCBvciAxNiB1MzJTLiAgV2hhdCByZWFsbHkKICAqIGlzIGhhcHBlbmluZyBpcyB0aGF0IHRoZXNlIHJlZ2lzdGVycyBvY2N1cHkgdGhlICJQYWRFeFsxNV0iIGFyZWFzIGluIHRoZQotICogU1hHX1VDT0RFX1JFR1MgZGVmaW5pdGlvbiBhYm92ZQorICogc3RydWN0IHN4Z191Y29kZV9yZWdzIGRlZmluaXRpb24gYWJvdmUKICAqLwotc3RydWN0IFNYR19UQ0JfUkVHUyB7Ci0JdTMyIEV4Q29kZTsJCS8qIEV4dGVuZGVkIGNvZGVzIC0gc2VlIFNYR19VQ09ERV9SRUdTICovCi0JdTMyIFhtdDsJCS8qIENvZGUgPSAxIC0gIyBvZiBYbXQgZGVzY3JpcHRvcnMgYWRkZWQgdG8gcmluZyAqLwotCXUzMiBSY3Y7CQkvKiBDb2RlID0gMiAtICMgb2YgUmN2IGRlc2NyaXB0b3JzIGFkZGVkIHRvIHJpbmcgKi8KLQl1MzIgUnN2ZDE7CQkvKiBDb2RlID0gMyAtIFRPRSBOQSAqLwotCXUzMiBSc3ZkMjsJCS8qIENvZGUgPSA0IC0gVE9FIE5BICovCi0JdTMyIFJzdmQzOwkJLyogQ29kZSA9IDUgLSBUT0UgTkEgKi8KLQl1MzIgSW52YWxpZDsJCS8qIENvZGUgPSA2IC0gUmVzZXJ2ZWQgZm9yICJDYXJkVXAiIHNlZSBhYm92ZSAqLwotCXUzMiBSc3ZkNDsJCS8qIENvZGUgPSA3IC0gVE9FIE5BICovCi0JdTMyIFJzdmQ1OwkJLyogQ29kZSA9IDggLSBUT0UgTkEgKi8KLQl1MzIgUGFkWzddOwkJLyogQ29kZXMgOC0xNSAtIE5vdCB1c2VkLiAqLworc3RydWN0IHN4Z190Y2JfcmVncyB7CisJdTMyIEV4Q29kZTsJLyogRXh0ZW5kZWQgY29kZXMgLSBzZWUgU1hHX1VDT0RFX1JFR1MgKi8KKwl1MzIgWG10OwkvKiBDb2RlID0gMSAtICMgb2YgWG10IGRlc2NyaXB0b3JzIGFkZGVkIHRvIHJpbmcgKi8KKwl1MzIgUmN2OwkvKiBDb2RlID0gMiAtICMgb2YgUmN2IGRlc2NyaXB0b3JzIGFkZGVkIHRvIHJpbmcgKi8KKwl1MzIgUnN2ZDE7CS8qIENvZGUgPSAzIC0gVE9FIE5BICovCisJdTMyIFJzdmQyOwkvKiBDb2RlID0gNCAtIFRPRSBOQSAqLworCXUzMiBSc3ZkMzsJLyogQ29kZSA9IDUgLSBUT0UgTkEgKi8KKwl1MzIgSW52YWxpZDE7CS8qIENvZGUgPSA2IC0gUmVzZXJ2ZWQgZm9yICJDYXJkVXAiIHNlZSBhYm92ZSAqLworCXUzMiBSc3ZkNDsJLyogQ29kZSA9IDcgLSBUT0UgTkEgKi8KKwl1MzIgSW52YWxpZDI7CS8qIENvZGUgPSA4IC0gUmVzZXJ2ZWQgZm9yICJDb25maWdTdGF0IiBzZWUgYWJvdmUgKi8KKwl1MzIgUnN2ZDU7CS8qIENvZGUgPSA5IC0gVE9FIE5BICovCisJdTMyIFBhZFs2XTsJLyogQ29kZXMgMTAtMTUgLSBOb3QgdXNlZC4gKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIwNiwyOSArMjI5LDI2IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8LS0tfC1DcHVJZCBvZiBjcmFzaAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8LS0tLS8KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFNYR19JU1JfRVJSCQkweDgwMDAwMDAwCS8vIEVycm9yCi0jZGVmaW5lIFNYR19JU1JfRVZFTlQJCTB4NDAwMDAwMDAJLy8gRXZlbnQgcmluZyBldmVudAotI2RlZmluZSBTWEdfSVNSX05PTkUxCQkweDIwMDAwMDAwCS8vIE5vdCB1c2VkCi0jZGVmaW5lIFNYR19JU1JfVVBDCQkweDEwMDAwMDAwCS8vIER1bXAvZGVidWcgY29tbWFuZCBjb21wbGV0ZQotI2RlZmluZSBTWEdfSVNSX0xJTksJCTB4MDgwMDAwMDAJLy8gTGluayBldmVudAotI2RlZmluZSBTWEdfSVNSX1BEUUYJCTB4MDQwMDAwMDAJLy8gUHJvY2Vzc2VkIGRhdGEgcXVldWUgZnVsbAotI2RlZmluZSBTWEdfSVNSX1JNSVNTCQkweDAyMDAwMDAwCS8vIERyb3AgLSBubyBob3N0IGJ1ZgotI2RlZmluZSBTWEdfSVNSX0JSRUFLCQkweDAxMDAwMDAwCS8vIEJyZWFrcG9pbnQgaGl0Ci0jZGVmaW5lIFNYR19JU1JfUElORwkJMHgwMDgwMDAwMAkvLyBIZWFydGJlYXQgcmVzcG9uc2UKLSNkZWZpbmUgU1hHX0lTUl9ERUFECQkweDAwNDAwMDAwCS8vIENhcmQgY3Jhc2gKLSNkZWZpbmUgU1hHX0lTUl9FUkZVTEwJCTB4MDAyMDAwMDAJLy8gRXZlbnQgcmluZyBmdWxsCi0jZGVmaW5lIFNYR19JU1JfWERST1AJCTB4MDAxMDAwMDAJLy8gWE1UIERyb3AgLSBubyBEUkFNIGJ1ZnMgb3IgWE1UIGVycgotI2RlZmluZSBTWEdfSVNSX1NQU0VORAkJMHgwMDA4MDAwMAkvLyBTbG93IHNlbmQgY29tcGxldGUKLSNkZWZpbmUgU1hHX0lTUl9DUFUJCTB4MDAwNzAwMDAJLy8gRGVhZCBDUFUgbWFzawotI2RlZmluZSBTWEdfSVNSX0NQVV9TSElGVAkJMTYJLy8gRGVhZCBDUFUgc2hpZnQKLSNkZWZpbmUgU1hHX0lTUl9DUkFTSAkJMHgwMDAwRkZGRgkvLyBDcmFzaCBhZGRyZXNzIG1hc2sKKyNkZWZpbmUgU1hHX0lTUl9FUlIJCTB4ODAwMDAwMDAJLyogRXJyb3IgKi8KKyNkZWZpbmUgU1hHX0lTUl9FVkVOVAkJMHg0MDAwMDAwMAkvKiBFdmVudCByaW5nIGV2ZW50ICovCisjZGVmaW5lIFNYR19JU1JfTk9ORTEJCTB4MjAwMDAwMDAJLyogTm90IHVzZWQgKi8KKyNkZWZpbmUgU1hHX0lTUl9VUEMJCTB4MTAwMDAwMDAJLyogRHVtcC9kZWJ1ZyBjb21tYW5kIGNvbXBsZXRlKi8KKyNkZWZpbmUgU1hHX0lTUl9MSU5LCQkweDA4MDAwMDAwCS8qIExpbmsgZXZlbnQgKi8KKyNkZWZpbmUgU1hHX0lTUl9QRFFGCQkweDA0MDAwMDAwCS8qIFByb2Nlc3NlZCBkYXRhIHF1ZXVlIGZ1bGwgKi8KKyNkZWZpbmUgU1hHX0lTUl9STUlTUwkJMHgwMjAwMDAwMAkvKiBEcm9wIC0gbm8gaG9zdCBidWYgKi8KKyNkZWZpbmUgU1hHX0lTUl9CUkVBSwkJMHgwMTAwMDAwMAkvKiBCcmVha3BvaW50IGhpdCAqLworI2RlZmluZSBTWEdfSVNSX1BJTkcJCTB4MDA4MDAwMDAJLyogSGVhcnRiZWF0IHJlc3BvbnNlICovCisjZGVmaW5lIFNYR19JU1JfREVBRAkJMHgwMDQwMDAwMAkvKiBDYXJkIGNyYXNoICovCisjZGVmaW5lIFNYR19JU1JfRVJGVUxMCQkweDAwMjAwMDAwCS8qIEV2ZW50IHJpbmcgZnVsbCAqLworI2RlZmluZSBTWEdfSVNSX1hEUk9QCQkweDAwMTAwMDAwCS8qIFhNVCBEcm9wIC0gbm8gRFJBTSBidWZzIG9yIFhNVCBlcnIgKi8KKyNkZWZpbmUgU1hHX0lTUl9TUFNFTkQJCTB4MDAwODAwMDAJLyogU2xvdyBzZW5kIGNvbXBsZXRlICovCisjZGVmaW5lIFNYR19JU1JfQ1BVCQkweDAwMDcwMDAwCS8qIERlYWQgQ1BVIG1hc2sgKi8KKyNkZWZpbmUgU1hHX0lTUl9DUFVfU0hJRlQJMTYJCS8qIERlYWQgQ1BVIHNoaWZ0ICovCisjZGVmaW5lIFNYR19JU1JfQ1JBU0gJCTB4MDAwMEZGRkYJLyogQ3Jhc2ggYWRkcmVzcyBtYXNrICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCiAgKiBFdmVudCBSaW5nIGVudHJ5CiAgKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCiAgKiAgMzEgICAgICAgICAgICAgICAgICAxNSAgICAgICAgICAgICAgICAgMAogICogIC5fX19fX19fX19fX19fX19fX19fLl9fX19fX19fX19fX19fX19fX18uCiAgKiAgfDwtLS0tLS0tLS0tLS0gICAgUGFkIDAgICAgLS0tLS0tLS0tLS0tPnwKQEAgLTI3MCwxOTYgKzI5MCwyMjMgQEAKICAqICAgIHx8LS0tLS0tLSBJU1RDUElQCiAgKiAgICB8LS0tLS0tLS0gU0NFUlIKICAqCi0gKi8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjcHJhZ21hIHBhY2socHVzaCwgMSkKLXN0cnVjdCBTWEdfRVZFTlQgewotCXUzMiBQYWRbMV07CQkvLyBub3QgdXNlZAotCXUzMiBTbmRVbmE7CQkvLyBTbmRVbmEgdmFsdWUKLQl1MzIgUmVzaWQ7CQkvLyByZWNlaXZlIE1ETCByZXNpZAorc3RydWN0IHN4Z19ldmVudCB7CisJdTMyCQkJUGFkWzFdOwkJLyogbm90IHVzZWQgKi8KKwl1MzIJCQlTbmRVbmE7CQkvKiBTbmRVbmEgdmFsdWUgKi8KKwl1MzIJCQlSZXNpZDsJCS8qIHJlY2VpdmUgTURMIHJlc2lkICovCiAJdW5pb24gewotCQl2b2lkICpIb3N0SGFuZGxlOwkvLyBSZWNlaXZlIGhvc3QgaGFuZGxlCi0JCXUzMiBSc3ZkMTsJLy8gVE9FIE5BCisJCXZvaWQgKgkJSG9zdEhhbmRsZTsJLyogUmVjZWl2ZSBob3N0IGhhbmRsZSAqLworCQl1MzIJCVJzdmQxOwkJLyogVE9FIE5BICovCiAJCXN0cnVjdCB7CiAJCQl1MzIgTm90VXNlZDsKLQkJCXUzMiBSc3ZkMjsJLy8gVE9FIE5BCisJCQl1MzIJUnN2ZDI7CQkvKiBUT0UgTkEgKi8KIAkJfSBGbHVzaDsKIAl9OwotCXUzMiBUb2VwbGl0ejsJCS8vIFJTUyBUb2VwbGl0eiBoYXNoCisJdTMyCQkJVG9lcGxpdHo7CS8qIFJTUyBUb2VwbGl0eiBoYXNoICovCiAJdW5pb24gewotCQl1c2hvcnQgUnN2ZDM7CS8vIFRPRSBOQQotCQl1c2hvcnQgSGRyT2Zmc2V0OwkvLyBTbG93cGF0aAorCQl1c2hvcnQJCVJzdmQzOwkJLyogVE9FIE5BICovCisJCXVzaG9ydAkJSGRyT2Zmc2V0OwkvKiBTbG93cGF0aCAqLwogCX07Ci0JdXNob3J0IExlbmd0aDsJCS8vCi0JdW5zaWduZWQgY2hhciBSc3ZkNDsJLy8gVE9FIE5BCi0JdW5zaWduZWQgY2hhciBDb2RlOwkvLyBFdmVudCBjb2RlCi0JdW5zaWduZWQgY2hhciBDb21tYW5kSW5kZXg7CS8vIE5ldyByaW5nIGluZGV4Ci0JdW5zaWduZWQgY2hhciBTdGF0dXM7CS8vIEV2ZW50IHN0YXR1cworCXVzaG9ydAkJCUxlbmd0aDsKKwl1bnNpZ25lZCBjaGFyIAlSc3ZkNDsJCS8qIFRPRSBOQSAqLworCXVuc2lnbmVkIGNoYXIgCUNvZGU7CQkvKiBFdmVudCBjb2RlICovCisJdW5zaWduZWQgY2hhcglDb21tYW5kSW5kZXg7CS8qIE5ldyByaW5nIGluZGV4ICovCisJdW5zaWduZWQgY2hhcglTdGF0dXM7CQkvKiBFdmVudCBzdGF0dXMgKi8KIH07CiAjcHJhZ21hIHBhY2socG9wKQogCi0vLyBFdmVudCBjb2RlIGRlZmluaXRpb25zCi0jZGVmaW5lIEVWRU5UX0NPREVfQlVGRkVSUwkweDAxCS8vIFJlY2VpdmUgYnVmZmVyIGxpc3QgY29tbWFuZCAocmluZyAwKQotI2RlZmluZSBFVkVOVF9DT0RFX1NMT1dSQ1YJMHgwMgkvLyBTbG93cGF0aCByZWNlaXZlCi0jZGVmaW5lIEVWRU5UX0NPREVfVU5VU0VECTB4MDQJLy8gV2FzIHNsb3dwYXRoIGNvbW1hbmRzIGNvbXBsZXRlCisvKiBFdmVudCBjb2RlIGRlZmluaXRpb25zICovCisjZGVmaW5lIEVWRU5UX0NPREVfQlVGRkVSUwkweDAxCS8qIFJlY2VpdmUgYnVmZmVyIGxpc3QgY29tbWFuZCAocmluZyAwKSAqLworI2RlZmluZSBFVkVOVF9DT0RFX1NMT1dSQ1YJMHgwMgkvKiBTbG93cGF0aCByZWNlaXZlICovCisjZGVmaW5lIEVWRU5UX0NPREVfVU5VU0VECTB4MDQJLyogV2FzIHNsb3dwYXRoIGNvbW1hbmRzIGNvbXBsZXRlICovCiAKLS8vIFN0YXR1cyB2YWx1ZXMKLSNkZWZpbmUgRVZFTlRfU1RBVFVTX1ZBTElECTB4ODAJLy8gRW50cnkgdmFsaWQKKy8qIFN0YXR1cyB2YWx1ZXMgKi8KKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1ZBTElECTB4ODAJLyogRW50cnkgdmFsaWQgKi8KIAotLy8gU2xvd3BhdGggc3RhdHVzCi0jZGVmaW5lIEVWRU5UX1NUQVRVU19FUlJPUgkweDQwCS8vIENvbXBsZXRlZCB3aXRoIGVycm9yLiBJbmRleCBpbiBuZXh0IGJ5dGUKLSNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQNAkweDIwCS8vIFRDUElQdjQgZnJhbWUKLSNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUEJBRAkweDEwCS8vIEJhZCBUQ1AgY2hlY2tzdW0KLSNkZWZpbmUgRVZFTlRfU1RBVFVTX0lQQkFECTB4MDgJLy8gQmFkIElQIGNoZWNrc3VtCi0jZGVmaW5lIEVWRU5UX1NUQVRVU19SQ1ZFUlIJMHgwNAkvLyBTbG93cGF0aCByZWNlaXZlIGVycm9yCi0jZGVmaW5lIEVWRU5UX1NUQVRVU19JUE9OTFkJMHgwMgkvLyBJUCBmcmFtZQotI2RlZmluZSBFVkVOVF9TVEFUVVNfVENQSVA2CTB4MDEJLy8gVENQSVB2NiBmcmFtZQotI2RlZmluZSBFVkVOVF9TVEFUVVNfVENQSVAJMHgyMQkvLyBDb21iaW5hdGlvbiBvZiB2NCBhbmQgdjYKKy8qIFNsb3dwYXRoIHN0YXR1cyAqLworI2RlZmluZSBFVkVOVF9TVEFUVVNfRVJST1IJMHg0MAkvKiBDb21wbGV0ZWQgd2l0aCBlcnJvci4gSW5kZXggaW4gbmV4dCBieXRlICovCisjZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BJUDQJMHgyMAkvKiBUQ1BJUHY0IGZyYW1lICovCisjZGVmaW5lIEVWRU5UX1NUQVRVU19UQ1BCQUQJMHgxMAkvKiBCYWQgVENQIGNoZWNrc3VtICovCisjZGVmaW5lIEVWRU5UX1NUQVRVU19JUEJBRAkweDA4CS8qIEJhZCBJUCBjaGVja3N1bSAqLworI2RlZmluZSBFVkVOVF9TVEFUVVNfUkNWRVJSCTB4MDQJLyogU2xvd3BhdGggcmVjZWl2ZSBlcnJvciAqLworI2RlZmluZSBFVkVOVF9TVEFUVVNfSVBPTkxZCTB4MDIJLyogSVAgZnJhbWUgKi8KKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQNgkweDAxCS8qIFRDUElQdjYgZnJhbWUgKi8KKyNkZWZpbmUgRVZFTlRfU1RBVFVTX1RDUElQCTB4MjEJLyogQ29tYmluYXRpb24gb2YgdjQgYW5kIHY2ICovCiAKLS8vIEV2ZW50IHJpbmcKLS8vIFNpemUgbXVzdCBiZSBwb3dlciBvZiAyLCBiZXR3ZWVuIDEyOCBhbmQgMTZrCi0jZGVmaW5lIEVWRU5UX1JJTkdfU0laRQkJNDA5NgkvLyA/PwotI2RlZmluZSBFVkVOVF9SSU5HX0JBVENICTE2CS8vIEhhbmQgZW50cmllcyBiYWNrIDE2IGF0IGEgdGltZS4KLSNkZWZpbmUgRVZFTlRfQkFUQ0hfTElNSVQJMjU2CS8vIFN0b3AgcHJvY2Vzc2luZyBldmVudHMgYWZ0ZXIgMjU2ICgxNiAqIDE2KQorLyoKKyAqIEV2ZW50IHJpbmcKKyAqIFNpemUgbXVzdCBiZSBwb3dlciBvZiAyLCBiZXR3ZWVuIDEyOCBhbmQgMTZrCisgKi8KKyNkZWZpbmUgRVZFTlRfUklOR19TSVpFCQk0MDk2CisjZGVmaW5lIEVWRU5UX1JJTkdfQkFUQ0gJMTYJLyogSGFuZCBlbnRyaWVzIGJhY2sgMTYgYXQgYSB0aW1lLiAqLworLyogU3RvcCBwcm9jZXNzaW5nIGV2ZW50cyBhZnRlciA0MDk2ICgyNTYgKiAxNikgKi8KKyNkZWZpbmUgRVZFTlRfQkFUQ0hfTElNSVQJMjU2CiAKLXN0cnVjdCBTWEdfRVZFTlRfUklORyB7Ci0Jc3RydWN0IFNYR19FVkVOVCBSaW5nW0VWRU5UX1JJTkdfU0laRV07CitzdHJ1Y3Qgc3hnX2V2ZW50X3JpbmcgeworCXN0cnVjdCBzeGdfZXZlbnQgUmluZ1tFVkVOVF9SSU5HX1NJWkVdOwogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRDQiBCdWZmZXJzCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vIE1heGltdW0gbnVtYmVyIG9mIFRDQlMgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlL21pY3JvY29kZQorLyogVENCIEJ1ZmZlcnMgKi8KKy8qIE1heGltdW0gbnVtYmVyIG9mIFRDQlMgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlL21pY3JvY29kZSAqLwogI2RlZmluZSBTWEdfTUFYX1RDQgkJNDA5NgotLy8gTWluaW11bSBUQ0JzIGJlZm9yZSB3ZSBmYWlsIGluaXRpYWxpemF0aW9uCisvKiBNaW5pbXVtIFRDQnMgYmVmb3JlIHdlIGZhaWwgaW5pdGlhbGl6YXRpb24gKi8KICNkZWZpbmUgU1hHX01JTl9UQ0IJCTUxMgotLy8gVENCIEhhc2gKLS8vIFRoZSBidWNrZXQgaXMgZGV0ZXJtaW5lZCBieSBiaXRzIDExOjQgb2YgdGhlIHRvZXBsaXR6IGlmIHdlIHN1cHBvcnQgNGsKLS8vIG9mZmxvYWRlZCBjb25uZWN0aW9ucywgMTA6NCBpZiB3ZSBzdXBwb3J0IDJrIGFuZCBzbyBvbi4KKy8qCisgKiBUQ0IgSGFzaAorICogVGhlIGJ1Y2tldCBpcyBkZXRlcm1pbmVkIGJ5IGJpdHMgMTE6NCBvZiB0aGUgdG9lcGxpdHogaWYgd2Ugc3VwcG9ydCA0aworICogb2ZmbG9hZGVkIGNvbm5lY3Rpb25zLCAxMDo0IGlmIHdlIHN1cHBvcnQgMmsgYW5kIHNvIG9uLgorICovCiAjZGVmaW5lIFNYR19UQ0JfQlVDS0VUX1NISUZUCTQKLSNkZWZpbmUgU1hHX1RDQl9QRVJfQlVDS0VUCQkxNgotI2RlZmluZSBTWEdfVENCX0JVQ0tFVF9NQVNLCQkweEZGMAkvLyBCdWNrZXQgcG9ydGlvbiBvZiBUQ0IgSUQKLSNkZWZpbmUgU1hHX1RDQl9FTEVNRU5UX01BU0sJMHgwMEYJLy8gRWxlbWVudCB3aXRoaW4gYnVja2V0Ci0jZGVmaW5lIFNYR19UQ0JfQlVDS0VUUwkJCTI1NgkvLyAyNTYgKiAxNiA9IDRrCisjZGVmaW5lIFNYR19UQ0JfUEVSX0JVQ0tFVAkxNgorI2RlZmluZSBTWEdfVENCX0JVQ0tFVF9NQVNLCTB4RkYwCS8qIEJ1Y2tldCBwb3J0aW9uIG9mIFRDQiBJRCAqLworI2RlZmluZSBTWEdfVENCX0VMRU1FTlRfTUFTSwkweDAwRgkvKiBFbGVtZW50IHdpdGhpbiBidWNrZXQgKi8KKyNkZWZpbmUgU1hHX1RDQl9CVUNLRVRTCQkyNTYJCS8qIDI1NiAqIDE2ID0gNGsgKi8KIAotI2RlZmluZSBTWEdfVENCX0JVRkZFUl9TSVpFCTUxMgkvLyBBU1NFUlQgZm9ybWF0IGlzIGNvcnJlY3QKKyNkZWZpbmUgU1hHX1RDQl9CVUZGRVJfU0laRQk1MTIJLyogQVNTRVJUIGZvcm1hdCBpcyBjb3JyZWN0ICovCiAKLSNkZWZpbmUgU1hHX1RDQl9SQ1ZRX1NJWkUJCTczNgorI2RlZmluZSBTWEdfVENCX1JDVlFfU0laRQk3MzYKIAogI2RlZmluZSBTWEdfVENCX0NPTVBPU0lURV9CVUZGRVJfU0laRQkxMDI0CiAKLSNkZWZpbmUgU1hHX0xPQ0FURV9UQ1BfRlJBTUVfSERSKF9UY3BPYmplY3QsIF9JUHY2KQkJCQkJCQlcCi0JKCgoX1RjcE9iamVjdCktPlZsYW5JZCkgPwkJCQkJCQkJCQkJCVwKLQkgKChfSVB2NikgPwkJLyogVmxhbiBmcmFtZSBoZWFkZXIgPSB5ZXMgKi8JCQkJCQkJXAotCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuSGFzVmxhbi5UY3BJcDYuU3hnVGNwCQkJOglcCi0JICAmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwLlN4Z1RjcCkJCQk6IAlcCi0JICgoX0lQdjYpID8JCS8qIFZsYW4gZnJhbWUgaGVhZGVyID0gTm8gKi8JCQkJCQkJXAotCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuTm9WbGFuLlRjcElwNi5TeGdUY3AJCQkJOiAJXAorI2RlZmluZSBTWEdfTE9DQVRFX1RDUF9GUkFNRV9IRFIoX1RjcE9iamVjdCwgX0lQdjYpCQkJXAorCSgoKF9UY3BPYmplY3QpLT5WbGFuSWQpID8JCQkJCVwKKwkgKChfSVB2NikgPwkJLyogVmxhbiBmcmFtZSBoZWFkZXIgPSB5ZXMgKi8JCVwKKwkgICYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXA2LlN4Z1RjcDoJXAorCSAgJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuSGFzVmxhbi5UY3BJcC5TeGdUY3ApOiAJXAorCSAoKF9JUHY2KSA/CQkvKiBWbGFuIGZyYW1lIGhlYWRlciA9IE5vICovCQlcCisJICAmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5Ob1ZsYW4uVGNwSXA2LlN4Z1RjcAk6IAlcCiAJICAmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5Ob1ZsYW4uVGNwSXAuU3hnVGNwKSkKIAotI2RlZmluZSBTWEdfTE9DQVRFX0lQX0ZSQU1FX0hEUihfVGNwT2JqZWN0KQkJCQkJCQkJCVwKLQkoX1RjcE9iamVjdCktPlZsYW5JZCA/CQkJCQkJCQkJCQkJCVwKLQkmKF9UY3BPYmplY3QpLT5Db21wQnVmZmVyLT5GcmFtZS5IYXNWbGFuLlRjcElwLklwCQkJCTogCQlcCisjZGVmaW5lIFNYR19MT0NBVEVfSVBfRlJBTUVfSERSKF9UY3BPYmplY3QpCQkJCVwKKwkoX1RjcE9iamVjdCktPlZsYW5JZCA/CQkJCQkJXAorCSYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXAuSXA6IAkJXAogCSYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLk5vVmxhbi5UY3BJcC5JcAogCi0jZGVmaW5lIFNYR19MT0NBVEVfSVA2X0ZSQU1FX0hEUihfVGNwT2JqZWN0KQkJCQkJCQkJXAotCShfVGNwT2JqZWN0KS0+VmxhbklkID8JCQkJCQkJCQkJCQkJXAotCSYoX1RjcE9iamVjdCktPkNvbXBCdWZmZXItPkZyYW1lLkhhc1ZsYW4uVGNwSXA2LklwCQkJCToJCVwKKyNkZWZpbmUgU1hHX0xPQ0FURV9JUDZfRlJBTUVfSERSKFRjcE9iamVjdCkJCQkJXAorCShfVGNwT2JqZWN0KS0+VmxhbklkID8JCQkJCQlcCisJJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuSGFzVmxhbi5UY3BJcDYuSXA6CQlcCiAJJihfVGNwT2JqZWN0KS0+Q29tcEJ1ZmZlci0+RnJhbWUuTm9WbGFuLlRjcElwNi5JcAogCiAjaWYgREJHCi0vLyBIb3JyaWJsZSBrbHVkZ2UgdG8gZGlzdGluZ3Vpc2ggZHVtYi1uaWMsIHNsb3dwYXRoLCBhbmQKLS8vIGZhc3RwYXRoIHRyYWZmaWMuICBEZWNyZW1lbnQgdGhlIEhvcExpbWl0IGJ5IG9uZQotLy8gZm9yIHNsb3dwYXRoLCB0d28gZm9yIGZhc3RwYXRoLiAgVGhpcyBhc3N1bWVzIHRoZSBsaW1pdCBpcyBtZWFzdXJhYmx5Ci0vLyBncmVhdGVyIHRoYW4gdHdvLCB3aGljaCBJIHRoaW5rIGlzIHJlYXNvbmFibGUuCi0vLyBPYnZpb3VzbHkgdGhpcyBpcyBEQkcgb25seS4gIE1heWJlIHJlbW92ZSBsYXRlciwgb3IgI2lmIDAgc28gd2UKLS8vIGNhbiBzZXQgaXQgd2hlbiBuZWVkZWQKLSNkZWZpbmUgU1hHX0RCR19IT1BfTElNSVQoX1RjcE9iamVjdCwgX0Zhc3RQYXRoKSB7CQkJCQkJCQlcCi0JUElQVjZfSERSCQlfSXA2RnJhbWVIZHI7CQkJCQkJCQkJCQkJXAotCWlmKChfVGNwT2JqZWN0KS0+SVB2NikgewkJCQkJCQkJCQkJCQlcCi0JCV9JcDZGcmFtZUhkciA9IFNYR19MT0NBVEVfSVA2X0ZSQU1FX0hEUigoX1RjcE9iamVjdCkpOwkJCQkJXAotCQlpZihfRmFzdFBhdGgpIHsJCQkJCQkJCQkJCQkJCQlcCi0JCQlfSXA2RnJhbWVIZHItPkhvcExpbWl0ID0gKF9UY3BPYmplY3QpLT5DYWNoZWQuVHRsT3JIb3BMaW1pdCAtIDI7CVwKLQkJfSBlbHNlIHsJCQkJCQkJCQkJCQkJCQkJXAotCQkJX0lwNkZyYW1lSGRyLT5Ib3BMaW1pdCA9IChfVGNwT2JqZWN0KS0+Q2FjaGVkLlR0bE9ySG9wTGltaXQgLSAxOwlcCi0JCX0JCQkJCQkJCQkJCQkJCQkJCQlcCi0JfQkJCQkJCQkJCQkJCQkJCQkJCQlcCisvKgorICogSG9ycmlibGUga2x1ZGdlIHRvIGRpc3Rpbmd1aXNoIGR1bWItbmljLCBzbG93cGF0aCwgYW5kCisgKiBmYXN0cGF0aCB0cmFmZmljLiAgRGVjcmVtZW50IHRoZSBIb3BMaW1pdCBieSBvbmUKKyAqIGZvciBzbG93cGF0aCwgdHdvIGZvciBmYXN0cGF0aC4gIFRoaXMgYXNzdW1lcyB0aGUgbGltaXQgaXMgbWVhc3VyYWJseQorICogZ3JlYXRlciB0aGFuIHR3bywgd2hpY2ggSSB0aGluayBpcyByZWFzb25hYmxlLgorICogT2J2aW91c2x5IHRoaXMgaXMgREJHIG9ubHkuICBNYXliZSByZW1vdmUgbGF0ZXIsIG9yICNpZiAwIHNvIHdlCisgKiBjYW4gc2V0IGl0IHdoZW4gbmVlZGVkCisgKi8KKyNkZWZpbmUgU1hHX0RCR19IT1BfTElNSVQoX1RjcE9iamVjdCwgX0Zhc3RQYXRoKSB7CQkJXAorCVBJUFY2X0hEUgkJX0lwNkZyYW1lSGRyOwkJCQlcCisJaWYgKChfVGNwT2JqZWN0KS0+SVB2NikgewkJCQkJXAorCQlfSXA2RnJhbWVIZHIgPSBTWEdfTE9DQVRFX0lQNl9GUkFNRV9IRFIoKF9UY3BPYmplY3QpKTsJXAorCQlpZiAoX0Zhc3RQYXRoKSB7CQkJCQlcCisJCQlfSXA2RnJhbWVIZHItPkhvcExpbWl0ID0gCQkJXAorCQkJCShfVGNwT2JqZWN0KS0+Q2FjaGVkLlR0bE9ySG9wTGltaXQgLSAyOwlcCisJCX0gZWxzZSB7CQkJCQkJXAorCQkJX0lwNkZyYW1lSGRyLT5Ib3BMaW1pdCA9IAkJCVwKKwkJCQkoX1RjcE9iamVjdCktPkNhY2hlZC5UdGxPckhvcExpbWl0IC0gMTsJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCiB9CiAjZWxzZQotLy8gRG8gbm90aGluZyB3aXRoIGZyZWUgYnVpbGQKKy8qIERvIG5vdGhpbmcgd2l0aCBmcmVlIGJ1aWxkICovCiAjZGVmaW5lIFNYR19EQkdfSE9QX0xJTUlUKF9UY3BPYmplY3QsIF9GYXN0UGF0aCkKICNlbmRpZgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSZWNlaXZlIGFuZCB0cmFuc21pdCByaW5ncwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJlY2VpdmUgYW5kIHRyYW5zbWl0IHJpbmdzICovCiAjZGVmaW5lIFNYR19NQVhfUklOR19TSVpFCTI1NgotI2RlZmluZSBTWEdfWE1UX1JJTkdfU0laRQkxMjgJLy8gU3RhcnQgd2l0aCAxMjgKLSNkZWZpbmUgU1hHX1JDVl9SSU5HX1NJWkUJMTI4CS8vIFN0YXJ0IHdpdGggMTI4CisjZGVmaW5lIFNYR19YTVRfUklOR19TSVpFCTEyOAkJLyogU3RhcnQgd2l0aCAxMjggKi8KKyNkZWZpbmUgU1hHX1JDVl9SSU5HX1NJWkUJMTI4CQkvKiBTdGFydCB3aXRoIDEyOCAqLwogI2RlZmluZSBTWEdfTUFYX0VOVFJJRVMgICAgIDQwOTYKKyNkZWZpbmUgU1hHX0pVTUJPX1JDVl9SSU5HX1NJWkUgICAgICAgMzIKIAotLy8gU3RydWN0dXJlIGFuZCBtYWNyb3MgdG8gbWFuYWdlIGEgcmluZwotc3RydWN0IFNYR19SSU5HX0lORk8gewotCXVuc2lnbmVkIGNoYXIgSGVhZDsJLy8gV2hlcmUgd2UgYWRkIGVudHJpZXMgLSBOb3RlIHVuc2lnbmVkIGNoYXI6UklOR19TSVpFCi0JdW5zaWduZWQgY2hhciBUYWlsOwkvLyBXaGVyZSB3ZSBwdWxsIG9mZiBjb21wbGV0ZWQgZW50cmllcwotCXVzaG9ydCBTaXplOwkJLy8gUmluZyBzaXplIC0gTXVzdCBiZSBtdWx0aXBsZSBvZiAyCi0Jdm9pZCAqQ29udGV4dFtTWEdfTUFYX1JJTkdfU0laRV07CS8vIFNoYWRvdyByaW5nCisvKiBTdHJ1Y3R1cmUgYW5kIG1hY3JvcyB0byBtYW5hZ2UgYSByaW5nICovCitzdHJ1Y3Qgc3hnX3JpbmdfaW5mbyB7CisJLyogV2hlcmUgd2UgYWRkIGVudHJpZXMgLSBOb3RlIHVuc2lnbmVkIGNoYXI6UklOR19TSVpFICovCisJdW5zaWduZWQgY2hhciBIZWFkOworCXVuc2lnbmVkIGNoYXIgVGFpbDsJLyogV2hlcmUgd2UgcHVsbCBvZmYgY29tcGxldGVkIGVudHJpZXMgKi8KKwl1c2hvcnQJU2l6ZTsJCS8qIFJpbmcgc2l6ZSAtIE11c3QgYmUgbXVsdGlwbGUgb2YgMiAqLworCXZvaWQgKglDb250ZXh0W1NYR19NQVhfUklOR19TSVpFXTsJLyogU2hhZG93IHJpbmcgKi8KIH07CiAKLSNkZWZpbmUgU1hHX0lOSVRJQUxJWkVfUklORyhfcmluZywgX3NpemUpIHsJCQkJCQkJXAotCShfcmluZykuSGVhZCA9IDA7CQkJCQkJCQkJCQkJXAotCShfcmluZykuVGFpbCA9IDA7CQkJCQkJCQkJCQkJXAotCShfcmluZykuU2l6ZSA9IChfc2l6ZSk7CQkJCQkJCQkJCQlcCisjZGVmaW5lIFNYR19JTklUSUFMSVpFX1JJTkcoX3JpbmcsIF9zaXplKSB7CQkJCVwKKwkoX3JpbmcpLkhlYWQgPSAwOwkJCQkJCVwKKwkoX3JpbmcpLlRhaWwgPSAwOwkJCQkJCVwKKwkoX3JpbmcpLlNpemUgPSAoX3NpemUpOwkJCQkJCVwKIH0KLSNkZWZpbmUgU1hHX0FEVkFOQ0VfSU5ERVgoX2luZGV4LCBfc2l6ZSkgKChfaW5kZXgpID0gKChfaW5kZXgpICsgMSkgJiAoKF9zaXplKSAtIDEpKQotI2RlZmluZSBTWEdfUFJFVklPVVNfSU5ERVgoX2luZGV4LCBfc2l6ZSkgKCgoX2luZGV4KSAtIDEpICYoKF9zaXplKSAtIDEpKQorCisjZGVmaW5lIFNYR19BRFZBTkNFX0lOREVYKF9pbmRleCwgX3NpemUpIAkJCQlcCisJCQkoKF9pbmRleCkgPSAoKF9pbmRleCkgKyAxKSAmICgoX3NpemUpIC0gMSkpCisjZGVmaW5lIFNYR19QUkVWSU9VU19JTkRFWChfaW5kZXgsIF9zaXplKSAJCQkJXAorCQkJKCgoX2luZGV4KSAtIDEpICYoKF9zaXplKSAtIDEpKQogI2RlZmluZSBTWEdfUklOR19FTVBUWShfcmluZykgKChfcmluZyktPkhlYWQgPT0gKF9yaW5nKS0+VGFpbCkKLSNkZWZpbmUgU1hHX1JJTkdfRlVMTChfcmluZykgKCgoKF9yaW5nKS0+SGVhZCArIDEpICYgKChfcmluZyktPlNpemUgLSAxKSkgPT0gKF9yaW5nKS0+VGFpbCkKLSNkZWZpbmUgU1hHX1JJTkdfQURWQU5DRV9IRUFEKF9yaW5nKSBTWEdfQURWQU5DRV9JTkRFWCgoX3JpbmcpLT5IZWFkLCAoKF9yaW5nKS0+U2l6ZSkpCi0jZGVmaW5lIFNYR19SSU5HX1JFVFJFQVRfSEVBRChfcmluZykgKChfcmluZyktPkhlYWQgPQkJCQlcCi0JCQkJCQkJCQkgIFNYR19QUkVWSU9VU19JTkRFWCgoX3JpbmcpLT5IZWFkLCAoX3JpbmcpLT5TaXplKSkKLSNkZWZpbmUgU1hHX1JJTkdfQURWQU5DRV9UQUlMKF9yaW5nKSB7CQkJCQkJCQlcCi0JQVNTRVJUKChfcmluZyktPlRhaWwgIT0gKF9yaW5nKS0+SGVhZCk7CQkJCQkJCVwKLQlTWEdfQURWQU5DRV9JTkRFWCgoX3JpbmcpLT5UYWlsLCAoKF9yaW5nKS0+U2l6ZSkpOwkJCQlcCisjZGVmaW5lIFNYR19SSU5HX0ZVTEwoX3JpbmcpIAkJCQkJCVwKKwkJKCgoKF9yaW5nKS0+SGVhZCArIDEpICYgKChfcmluZyktPlNpemUgLSAxKSkgPT0gKF9yaW5nKS0+VGFpbCkKKyNkZWZpbmUgU1hHX1JJTkdfQURWQU5DRV9IRUFEKF9yaW5nKSAJCQkJCVwKKwkJU1hHX0FEVkFOQ0VfSU5ERVgoKF9yaW5nKS0+SGVhZCwgKChfcmluZyktPlNpemUpKQorI2RlZmluZSBTWEdfUklOR19SRVRSRUFUX0hFQUQoX3JpbmcpICgoX3JpbmcpLT5IZWFkID0JCQlcCisJCVNYR19QUkVWSU9VU19JTkRFWCgoX3JpbmcpLT5IZWFkLCAoX3JpbmcpLT5TaXplKSkKKyNkZWZpbmUgU1hHX1JJTkdfQURWQU5DRV9UQUlMKF9yaW5nKSB7CQkJCQlcCisJQVNTRVJUKChfcmluZyktPlRhaWwgIT0gKF9yaW5nKS0+SGVhZCk7CQkJCVwKKwlTWEdfQURWQU5DRV9JTkRFWCgoX3JpbmcpLT5UYWlsLCAoKF9yaW5nKS0+U2l6ZSkpOwkJXAogfQotLy8gU2V0IGNtZCB0byB0aGUgbmV4dCBhdmFpbGFibGUgcmluZyBlbnRyeSwgc2V0IHRoZSBzaGFkb3cgY29udGV4dAotLy8gZW50cnkgYW5kIGFkdmFuY2UgdGhlIHJpbmcuCi0vLyBUaGUgYXBwcm9wcmlhdGUgbG9jayBtdXN0IGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgbWFjcm8KLSNkZWZpbmUgU1hHX0dFVF9DTUQoX3JpbmcsIF9yaW5naW5mbywgX2NtZCwgX2NvbnRleHQpIHsJCQkJXAotCWlmKFNYR19SSU5HX0ZVTEwoX3JpbmdpbmZvKSkgewkJCQkJCQkJCVwKLQkJKF9jbWQpID0gTlVMTDsJCQkJCQkJCQkJCQlcCi0JfSBlbHNlIHsJCQkJCQkJCQkJCQkJCVwKLQkJKF9jbWQpID0gJihfcmluZyktPkRlc2NyaXB0b3JzWyhfcmluZ2luZm8pLT5IZWFkXTsJCQlcCisvKgorICogU2V0IGNtZCB0byB0aGUgbmV4dCBhdmFpbGFibGUgcmluZyBlbnRyeSwgc2V0IHRoZSBzaGFkb3cgY29udGV4dAorICogZW50cnkgYW5kIGFkdmFuY2UgdGhlIHJpbmcuCisgKiBUaGUgYXBwcm9wcmlhdGUgbG9jayBtdXN0IGJlIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgbWFjcm8KKyAqLworI2RlZmluZSBTWEdfR0VUX0NNRChfcmluZywgX3JpbmdpbmZvLCBfY21kLCBfY29udGV4dCkgewkJCVwKKwlpZihTWEdfUklOR19GVUxMKF9yaW5naW5mbykpIHsJCQkJCVwKKwkJKF9jbWQpID0gTlVMTDsJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQkoX2NtZCkgPSAmKF9yaW5nKS0+RGVzY3JpcHRvcnNbKF9yaW5naW5mbyktPkhlYWRdOwlcCiAJCShfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5IZWFkXSA9ICh2b2lkICopKF9jb250ZXh0KTtcCi0JCVNYR19SSU5HX0FEVkFOQ0VfSEVBRChfcmluZ2luZm8pOwkJCQkJCQlcCi0JfQkJCQkJCQkJCQkJCQkJCQlcCisJCVNYR19SSU5HX0FEVkFOQ0VfSEVBRChfcmluZ2luZm8pOwkJCVwKKwl9CQkJCQkJCQlcCiB9CiAKLS8vIEFib3J0IHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBjb21tYW5kIGJ5IHJldHJlYXRpbmcgdGhlIGhlYWQuCi0vLyBOT1RFIC0gVGhlIGFwcG9wcmlhdGUgbG9jayBNVVNUIE5PVCBCRSBEUk9QUEVEIGJldHdlZW4gdGhlIFNYR19HRVRfQ01ECi0vLyBhbmQgU1hHX0FCT1JUX0NNRCBjYWxscy4KLSNkZWZpbmUgU1hHX0FCT1JUX0NNRChfcmluZ2luZm8pIHsJCQkJCQkJCQlcCi0JQVNTRVJUKCEoU1hHX1JJTkdfRU1QVFkoX3JpbmdpbmZvKSkpOwkJCQkJCQlcCi0JU1hHX1JJTkdfUkVUUkVBVF9IRUFEKF9yaW5naW5mbyk7CQkJCQkJCQlcCi0JKF9yaW5naW5mbyktPkNvbnRleHRbKF9yaW5naW5mbyktPkhlYWRdID0gTlVMTDsJCQkJCVwKKy8qCisgKiBBYm9ydCB0aGUgcHJldmlvdXNseSBhbGxvY2F0ZWQgY29tbWFuZCBieSByZXRyZWF0aW5nIHRoZSBoZWFkLgorICogTk9URSAtIFRoZSBhcHBvcHJpYXRlIGxvY2sgTVVTVCBOT1QgQkUgRFJPUFBFRCBiZXR3ZWVuIHRoZSBTWEdfR0VUX0NNRAorICogYW5kIFNYR19BQk9SVF9DTUQgY2FsbHMuCisgKi8KKyNkZWZpbmUgU1hHX0FCT1JUX0NNRChfcmluZ2luZm8pIHsJCQkJCVwKKwlBU1NFUlQoIShTWEdfUklOR19FTVBUWShfcmluZ2luZm8pKSk7CQkJCVwKKwlTWEdfUklOR19SRVRSRUFUX0hFQUQoX3JpbmdpbmZvKTsJCQkJXAorCShfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5IZWFkXSA9IE5VTEw7CQkJXAogfQogCi0vLyBGb3IgdGhlIGdpdmVuIHJpbmcsIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRhaWwgY21kIGFuZCBjb250ZXh0LAotLy8gY2xlYXIgdGhlIGNvbnRleHQgYW5kIGFkdmFuY2UgdGhlIHRhaWwKLSNkZWZpbmUgU1hHX1JFVFVSTl9DTUQoX3JpbmcsIF9yaW5naW5mbywgX2NtZCwgX2NvbnRleHQpIHsJCQlcCi0JKF9jbWQpID0gJihfcmluZyktPkRlc2NyaXB0b3JzWyhfcmluZ2luZm8pLT5UYWlsXTsJCQkJXAorLyoKKyAqIEZvciB0aGUgZ2l2ZW4gcmluZywgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdGFpbCBjbWQgYW5kIGNvbnRleHQsCisgKiBjbGVhciB0aGUgY29udGV4dCBhbmQgYWR2YW5jZSB0aGUgdGFpbAorICovCisjZGVmaW5lIFNYR19SRVRVUk5fQ01EKF9yaW5nLCBfcmluZ2luZm8sIF9jbWQsIF9jb250ZXh0KSB7CQlcCisJKF9jbWQpID0gJihfcmluZyktPkRlc2NyaXB0b3JzWyhfcmluZ2luZm8pLT5UYWlsXTsJCVwKIAkoX2NvbnRleHQpID0gKF9yaW5naW5mbyktPkNvbnRleHRbKF9yaW5naW5mbyktPlRhaWxdOyAgICAgICAJXAotCShfcmluZ2luZm8pLT5Db250ZXh0WyhfcmluZ2luZm8pLT5UYWlsXSA9IE5VTEw7CQkJCQlcCi0JU1hHX1JJTkdfQURWQU5DRV9UQUlMKF9yaW5naW5mbyk7CQkJCQkJCQlcCisJKF9yaW5naW5mbyktPkNvbnRleHRbKF9yaW5naW5mbyktPlRhaWxdID0gTlVMTDsJCQlcCisJU1hHX1JJTkdfQURWQU5DRV9UQUlMKF9yaW5naW5mbyk7CQkJCVwKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKKy8qCisgKiBGb3IgYSBnaXZlbiByaW5nIGZpbmQgb3V0IGhvdyBtdWNoIHRoZSBmaXJzdCBwb2ludGVyIGlzIGFoZWFkIG9mCisgKiB0aGUgc2Vjb25kIHBvaW50ZXIuICJhaGVhZCIgcmVjb2duaXNlcyB0aGUgZmFjdCB0aGF0IHRoZSByaW5nIGNhbiB3cmFwCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHN4Z19yaW5nX2dldF9mb3J3YXJkX2RpZmYgKHN0cnVjdCBzeGdfcmluZ19pbmZvICpyaW5naW5mbywKKwkJCQkJCWludCBhLCBpbnQgYikgeworCWlmICgoYSA8IDAgfHwgYSA+IHJpbmdpbmZvLT5TaXplICkgfHwgKGIgPCAwIHx8IGIgPiByaW5naW5mby0+U2l6ZSkpCisJCXJldHVybiAtMTsKKwlpZiAoYSA+IGIpCS8qIF9hIGlzIGxhZ2dpbmcgX2IgYW5kIF9iIGhhcyBub3Qgd3JhcHBlZCBhcm91bmQgKi8KKwkJcmV0dXJuIChhIC0gYik7CisJZWxzZQorCQlyZXR1cm4gKChyaW5naW5mby0+U2l6ZSAtIChiIC0gYSkpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSG9zdCBDb21tYW5kIEJ1ZmZlciAtIGNvbW1hbmRzIHRvIElOSUMgdmlhIHRoZSBDbWQgUmluZ3MKICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKICAqICAzMSAgICAgICAgICAgICAgICAgIDE1ICAgICAgICAgICAgICAgICAwCiAgKiAgLl9fX19fX19fX19fX19fX19fX18uX19fX19fX19fX19fX19fX19fXy4KICAqICB8PC0tLS0tLS0tLS0tLS0tIFNnbCBMb3cgLS0tLS0tLS0tLS0tLS0+fApAQCAtNDc5LDQyICs1MjYsNDMgQEAKICAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDI0CQkweDE4CiAgKiAgfDwtLS0tLSBMQ250IC0tLS0tLT58PC0tLS0tIEZsYWdzIC0tLS0tPnwKICAqICB8X19fX19fX19ffF9fX19fX19fX3xfX19fX19fX198X19fX19fX19ffDI4CQkweDFjCi0gKi8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI3ByYWdtYSBwYWNrKHB1c2gsIDEpCi1zdHJ1Y3QgU1hHX0NNRCB7Ci0JZG1hX2FkZHJfdCBTZ2w7CQkvLyBQaHlzaWNhbCBhZGRyZXNzIG9mIFNHTAorc3RydWN0IHN4Z19jbWQgeworCWRtYTY0X2FkZHJfdAlTZ2w7CQkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIFNHTCAqLwogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCWRtYTY0X2FkZHJfdCBGaXJzdFNnZUFkZHJlc3M7CS8vIEFkZHJlc3Mgb2YgZmlyc3QgU0dFCi0JCQl1MzIgRmlyc3RTZ2VMZW5ndGg7CS8vIExlbmd0aCBvZiBmaXJzdCBTR0UKKwkJCWRtYTY0X2FkZHJfdCBGaXJzdFNnZUFkZHJlc3M7IC8qIEFkZHJlc3Mgb2YgZmlyc3QgU0dFICovCisJCQl1MzIgCSAgICAgRmlyc3RTZ2VMZW5ndGg7ICAvKiBMZW5ndGggb2YgZmlyc3QgU0dFICovCiAJCQl1bmlvbiB7Ci0JCQkJdTMyIFJzdmQxOwkvLyBUT0UgTkEKLQkJCQl1MzIgU2dlT2Zmc2V0OwkvLyBTbG93cGF0aCAtIDJuZCBTR0Ugb2Zmc2V0Ci0JCQkJdTMyIFJlc2lkOwkvLyBNREwgY29tcGxldGlvbiAtIGNsb2JiZXJzIHVwZGF0ZQorCQkJCXUzMiAgUnN2ZDE7CSAgIC8qIFRPRSBOQSAqLworCQkJCXUzMiAgU2dlT2Zmc2V0OyAvKiBTbG93cGF0aCAtIDJuZCBTR0Ugb2Zmc2V0ICovCisJCQkJLyogTURMIGNvbXBsZXRpb24gLSBjbG9iYmVycyB1cGRhdGUgKi8KKwkJCQl1MzIgIFJlc2lkOwogCQkJfTsKIAkJCXVuaW9uIHsKLQkJCQl1MzIgVG90YWxMZW5ndGg7CS8vIFRvdGFsIHRyYW5zZmVyIGxlbmd0aAotCQkJCXUzMiBNc3M7CS8vIExTTyBNU1MKKwkJCQl1MzIgIFRvdGFsTGVuZ3RoOyAvKiBUb3RhbCB0cmFuc2ZlciBsZW5ndGggKi8KKwkJCQl1MzIgIE1zczsJICAvKiBMU08gTVNTICovCiAJCQl9OwogCQl9IEJ1ZmZlcjsKIAl9OwogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCXVuc2lnbmVkIGNoYXIgRmxhZ3M6NDsJLy8gc2xvd3BhdGggZmxhZ3MKLQkJCXVuc2lnbmVkIGNoYXIgSXBIbDo0OwkvLyBJcCBoZWFkZXIgbGVuZ3RoICg+PjIpCi0JCQl1bnNpZ25lZCBjaGFyIE1hY0xlbjsJLy8gTWFjIGhlYWRlciBsZW4KKwkJCXVuc2lnbmVkIGNoYXIgRmxhZ3M6NDsJLyogc2xvd3BhdGggZmxhZ3MgKi8KKwkJCXVuc2lnbmVkIGNoYXIgSXBIbDo0OwkvKiBJcCBoZWFkZXIgbGVuZ3RoICg+PjIpICovCisJCQl1bnNpZ25lZCBjaGFyIE1hY0xlbjsJLyogTWFjIGhlYWRlciBsZW4gKi8KIAkJfSBDc3VtRmxhZ3M7CiAJCXN0cnVjdCB7Ci0JCQl1c2hvcnQgRmxhZ3M6NDsJLy8gc2xvd3BhdGggZmxhZ3MKLQkJCXVzaG9ydCBUY3BIZHJPZmY6NzsJLy8gVENQCi0JCQl1c2hvcnQgTWFjTGVuOjU7CS8vIE1hYyBoZWFkZXIgbGVuCisJCQl1c2hvcnQJRmxhZ3M6NDsJLyogc2xvd3BhdGggZmxhZ3MgKi8KKwkJCXVzaG9ydAlUY3BIZHJPZmY6NzsJLyogVENQICovCisJCQl1c2hvcnQJTWFjTGVuOjU7CS8qIE1hYyBoZWFkZXIgbGVuICovCiAJCX0gTHNvRmxhZ3M7Ci0JCXVzaG9ydCBGbGFnczsJLy8gZmxhZ3MKKwkJdXNob3J0CQlGbGFnczsJCS8qIGZsYWdzICovCiAJfTsKIAl1bmlvbiB7Ci0JCXVzaG9ydCBTZ0VudHJpZXM7CS8vIFNHIGVudHJ5IGNvdW50IGluY2x1ZGluZyBmaXJzdCBzZ2UKKwkJdXNob3J0CVNnRW50cmllczsJLyogU0cgZW50cnkgY291bnQgaW5jbHVkaW5nIGZpcnN0IHNnZSAqLwogCQlzdHJ1Y3QgewotCQkJdW5zaWduZWQgY2hhciBTdGF0dXM7CS8vIENvcGllZCBmcm9tIGV2ZW50IHN0YXR1cworCQkJdW5zaWduZWQgY2hhciBTdGF0dXM7CS8qIENvcGllZCBmcm9tIGV2ZW50IHN0YXR1cyAqLwogCQkJdW5zaWduZWQgY2hhciBOb3RVc2VkOwogCQl9IFN0YXR1czsKIAl9OwpAQCAtNTIyLDEzICs1NzAsMTMgQEAKICNwcmFnbWEgcGFjayhwb3ApCiAKICNwcmFnbWEgcGFjayhwdXNoLCAxKQotc3RydWN0IFZMQU5fSERSIHsKK3N0cnVjdCB2bGFuX2hkciB7CiAJdXNob3J0IFZsYW5UY2k7CiAJdXNob3J0IFZsYW5UcGlkOwogfTsKICNwcmFnbWEgcGFjayhwb3ApCiAKLS8qCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNsb3dwYXRoIEZsYWdzOgogICoKICAqCkBAIC01NTgsMzYgKzYwNiwzNiBAQAogICogIHwgICAgICBMQ250ICAgICAgICAgfE1BQyBobGVuIHxIbGVufEZsZ3N8CiAgKiAgfF9fX19fX19fX19fX19fX19fX198X19fX3xfX19ffF9fX198X19fX3wKICAqCi0gKi8KLS8vIFNsb3dwYXRoIENNRCBmbGFncwotI2RlZmluZSBTWEdfU0xPV0NNRF9DU1VNX0lQCQkJMHgwMQkvLyBDaGVja3N1bSBJUAotI2RlZmluZSBTWEdfU0xPV0NNRF9DU1VNX1RDUAkJMHgwMgkvLyBDaGVja3N1bSBUQ1AKLSNkZWZpbmUgU1hHX1NMT1dDTURfTFNPCQkJCTB4MDQJLy8gTGFyZ2Ugc2VnbWVudCBzZW5kCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBTbG93cGF0aCBDTUQgZmxhZ3MgKi8KKyNkZWZpbmUgU1hHX1NMT1dDTURfQ1NVTV9JUAkJMHgwMQkvKiBDaGVja3N1bSBJUCAqLworI2RlZmluZSBTWEdfU0xPV0NNRF9DU1VNX1RDUAkJMHgwMgkvKiBDaGVja3N1bSBUQ1AgKi8KKyNkZWZpbmUgU1hHX1NMT1dDTURfTFNPCQkJMHgwNAkvKiBMYXJnZSBzZWdtZW50IHNlbmQgKi8KIAotc3RydWN0IFNYR19YTVRfUklORyB7Ci0Jc3RydWN0IFNYR19DTUQgRGVzY3JpcHRvcnNbU1hHX1hNVF9SSU5HX1NJWkVdOworc3RydWN0IHN4Z194bXRfcmluZyB7CisJc3RydWN0IHN4Z19jbWQgRGVzY3JpcHRvcnNbU1hHX1hNVF9SSU5HX1NJWkVdOwogfTsKIAotc3RydWN0IFNYR19SQ1ZfUklORyB7Ci0Jc3RydWN0IFNYR19DTUQgRGVzY3JpcHRvcnNbU1hHX1JDVl9SSU5HX1NJWkVdOworc3RydWN0IHN4Z19yY3ZfcmluZyB7CisJc3RydWN0IHN4Z19jbWQgRGVzY3JpcHRvcnNbU1hHX1JDVl9SSU5HX1NJWkVdOwogfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLyoKICAqIFNoYXJlIG1lbW9yeSBidWZmZXIgdHlwZXMgLSBVc2VkIHRvIGlkZW50aWZ5IGFzeW5jaHJvbm91cwogICogc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotZW51bSBTWEdfQlVGRkVSX1RZUEUgewotCVNYR19CVUZGRVJfVFlQRV9SQ1YsCS8vIFJlY2VpdmUgYnVmZmVyCi0JU1hHX0JVRkZFUl9UWVBFX1NHTAkvLyBTR0wgYnVmZmVyCisgKi8KK2VudW0gc3hnX2J1ZmZlcl90eXBlIHsKKwlTWEdfQlVGRkVSX1RZUEVfUkNWLAkJLyogUmVjZWl2ZSBidWZmZXIgKi8KKwlTWEdfQlVGRkVSX1RZUEVfU0dMCQkvKiBTR0wgYnVmZmVyICovCiB9OwogCi0vLyBTdGF0ZSBmb3IgU1hHIGJ1ZmZlcnMKKy8qIFN0YXRlIGZvciBTWEcgYnVmZmVycyAqLwogI2RlZmluZSBTWEdfQlVGRkVSX0ZSRUUJCTB4MDEKICNkZWZpbmUgU1hHX0JVRkZFUl9CVVNZCQkweDAyCiAjZGVmaW5lIFNYR19CVUZGRVJfT05DQVJECTB4MDQKICNkZWZpbmUgU1hHX0JVRkZFUl9VUFNUUkVBTQkweDA4CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiBSZWNlaXZlIGRhdGEgYnVmZmVycwogICoKICAqIFJlY2VpdmUgZGF0YSBidWZmZXJzIGFyZSBnaXZlbiB0byB0aGUgU2FoYXJhIGNhcmQgMTI4IGF0IGEgdGltZS4KQEAgLTU5NywyNjIgKzY0NSwzNzAgQEAKICAqIERNQSBkYXRhIGludG8sIGFuZCBhIHZpcnR1YWwgYWRkcmVzcywgd2hpY2ggaXMgZ2l2ZW4gYmFjawogICogdG8gdGhlIGhvc3QgaW4gdGhlICJIb3N0SGFuZGxlIiBwb3J0aW9uIG9mIGFuIGV2ZW50LgogICogVGhlIHJlY2VpdmUgZGVzY3JpcHRvciBkYXRhIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGJlbG93Ci0gKiBhcyBTWEdfUkNWX0RBVEFfREVTQ1JJUFRPUiwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGJsb2NrCi0gKiBpcyBkZWZpbmVkIGFzIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSy4KKyAqIGFzIHN4Z19yY3ZfZGF0YV9kZXNjcmlwdG9yLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYmxvY2sKKyAqIGlzIGRlZmluZWQgYXMgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrLgogICoKICAqIFRoaXMgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrIGlzIGdpdmVuIHRvIHRoZSBjYXJkIGJ5IGZpbGxpbmcKLSAqIGluIHRoZSBTZ2wgZmllbGQgb2YgYSBTWEdfQ01EIGVudHJ5IGZyb20gcEFkYXB0LT5SY3ZSaW5nc1swXQorICogaW4gdGhlIFNnbCBmaWVsZCBvZiBhIHN4Z19jbWQgZW50cnkgZnJvbSBwQWRhcHQtPlJjdlJpbmdzWzBdCiAgKiB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSByZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2suCiAgKgogICogQm90aCB0aGUgcmVjZWl2ZSBidWZmZXJzIGFuZCB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrcwogICogcmVxdWlyZSBhZGRpdGlvbmFsIGRhdGEgc3RydWN0dXJlcyB0byBtYWludGFpbiB0aGVtCiAgKiBvbiBhIGZyZWUgcXVldWUgYW5kIGNvbnRhaW4gb3RoZXIgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZW0uCi0gKiBUaG9zZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgYXMgdGhlIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSCi0gKiBhbmQgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiByZXNwZWN0aXZlbHkuCisgKiBUaG9zZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgYXMgdGhlIHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyCisgKiBhbmQgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkciByZXNwZWN0aXZlbHkuCiAgKgogICogU2luY2UgYm90aCB0aGUgcmVjZWl2ZSBidWZmZXJzIGFuZCB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrCiAgKiBtdXN0IGJlIGFjY2Vzc2libGUgYnkgdGhlIGNhcmQsIGJvdGggbXVzdCBiZSBhbGxvY2F0ZWQgb3V0IG9mCiAgKiBzaGFyZWQgbWVtb3J5LiAgVG8gZW5zdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgYSBkZXNjcmlwdG9yCiAgKiBibG9jayBhdmFpbGFibGUgZm9yIGV2ZXJ5IDEyOCBidWZmZXJzLCB3ZSBhbGxvY2F0ZSBhbGwgb2YKICAqIHRoZXNlIHJlc291cmNlcyB0b2dldGhlciBpbiBhIHNpbmdsZSBibG9jay4gIFRoaXMgZW50aXJlCi0gKiBibG9jayBpcyBtYW5hZ2VkIGJ5IGEgU1hHX1JDVl9CTE9DS19IRFIsIHdobydzIHNvbGUgcHVycG9zZQorICogYmxvY2sgaXMgbWFuYWdlZCBieSBhIHN0cnVjdCBzeGdfcmN2X2Jsb2NrX2hkciwgd2hvJ3Mgc29sZSBwdXJwb3NlCiAgKiBpcyB0byBtYWludGFpbiBhZGRyZXNzIGluZm9ybWF0aW9uIHNvIHRoYXQgdGhlIGVudGlyZSBibG9jawogICogY2FuIGJlIGZyZWUgbGF0ZXIuCiAgKgogICogRnVydGhlciBjb21wbGljYXRpbmcgbWF0dGVycyBpcyB0aGUgZmFjdCB0aGF0IHRoZSByZWNlaXZlCiAgKiBidWZmZXJzIG11c3QgYmUgdmFyaWFibGUgaW4gbGVuZ3RoIGluIG9yZGVyIHRvIGFjY29tb2RhdGUKICAqIGp1bWJvIGZyYW1lIGNvbmZpZ3VyYXRpb25zLiAgV2UgY29uZmlndXJlIHRoZSBidWZmZXIKLSAqIGxlbmd0aCBzbyB0aGF0IHRoZSBidWZmZXIgYW5kIGl0J3MgY29ycmVzcG9uZGluZyBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUgotICogc3RydWN0dXJlIGFkZCB1cCB0byBhbiBldmVuIGJvdW5kYXJ5LiAgVGhlbiB3ZSBwbGFjZSB0aGUKLSAqIHJlbWFpbmluZyBkYXRhIHN0cnVjdHVyZXMgYWZ0ZXIgMTI4IG9mIHRoZW0gYXMgc2hvd24gaW4KLSAqIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbToKKyAqIGxlbmd0aCBzbyB0aGF0IHRoZSBidWZmZXIgYW5kIGl0J3MgY29ycmVzcG9uZGluZyBzdHJ1Y3QKKyAqIHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyIHN0cnVjdHVyZSBhZGQgdXAgdG8gYW4gZXZlbgorICogYm91bmRhcnkuICBUaGVuIHdlIHBsYWNlIHRoZSByZW1haW5pbmcgZGF0YSBzdHJ1Y3R1cmVzIGFmdGVyIDEyOAorICogIG9mIHRoZW0gYXMgc2hvd24gaW4gdGhlIGZvbGxvd2luZyBkaWFncmFtOgogICoKICAqICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICogfCAgICBWYXJpYWJsZSBsZW5ndGggcmVjZWl2ZSBidWZmZXIgIzEgICAgfAogICogfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffAogICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogfCAgICAgICBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiAjMSAgICAgICAgfAorICogfCAgICAgICBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciAjMSAgICAgICAgfAogICogfF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19ffCA8PT0gRXZlbiAyayBvciAxMGsgYm91bmRhcnkKICAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAqIHwgICAgICAgICAuLi4gcmVwZWF0IDItMTI4IC4uICAgICAgICAgICAgIHwKICAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKICAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqIHwgICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgICAgICAgICAgIHwKLSAqIHwgIENvbnRhaW5zIFNYR19SQ1ZfREFUQV9ERVNDUklQVE9SICogMTI4IHwKKyAqIHwgICAgICBzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrICAgIHwKKyAqIHwgIENvbnRhaW5zIHN4Z19yY3ZfZGF0YV9kZXNjcmlwdG9yICogMTI4IHwKICAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKICAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqIHwgICAgICBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSICAgICAgIHwKKyAqIHwgICBzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrX2hkciAgIHwKICAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKICAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqIHwgICAgICAgICAgU1hHX1JDVl9CTE9DS19IRFIgICAgICAgICAgICAgIHwKKyAqIHwgICAgICBzdHJ1Y3Qgc3hnX3Jjdl9ibG9ja19oZHIgICAgICAgICAgIHwKICAqIHxfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX3wKICAqCiAgKiBNZW1vcnkgY29uc3VtcHRpb246CiAgKgkgIE5vbi1qdW1ibzoKLSAqICAgICAgQnVmZmVycyBhbmQgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgPSAyayAqIDEyOCA9IDI1NmsKLSAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLID0gMmsKLSAqICAgICsgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUiA9IH4zMgotICogICAgKyBTWEdfUkNWX0JMT0NLX0hEUiA9IH4zMgorICogICAgICBCdWZmZXJzIGFuZCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciA9IDJrICogMTI4ID0gMjU2aworICogICAgKyBzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrID0gMmsKKyAqICAgICsgc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9ja19oZHIgPSB+MzIKKyAqICAgICsgc3RydWN0IHN4Z19yY3ZfYmxvY2tfaGRyID0gfjMyCiAgKiAgICA9PiBUb3RhbCA9IH4yNThrL2Jsb2NrCiAgKgogICoJICBKdW1ibzoKLSAqICAgICAgQnVmZmVycyBhbmQgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgPSAxMGsgKiAxMjggPSAxMjgwawotICogICAgKyBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0sgPSAyawotICogICAgKyBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSID0gfjMyCi0gKiAgICArIFNYR19SQ1ZfQkxPQ0tfSERSID0gfjMyCisgKiAgICAgIEJ1ZmZlcnMgYW5kIHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyID0gMTBrICogMTI4ID0gMTI4MGsKKyAqICAgICsgc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jayA9IDJrCisgKiAgICArIHN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyID0gfjMyCisgKiAgICArIHN0cnVjdCBzeGdfcmN2X2Jsb2NrX2hkciA9IH4zMgogICogICAgPT4gVG90YWwgPSB+MTI4MmsvYmxvY2sKICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBTWEdfUkNWX0RBVEFfQlVGRkVSUwkJCTQwOTYJLy8gQW1vdW50IHRvIGdpdmUgdG8gdGhlIGNhcmQKLSNkZWZpbmUgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUwk4MTkyCS8vIEluaXRpYWwgcG9vbCBvZiBidWZmZXJzCi0jZGVmaW5lIFNYR19NSU5fUkNWX0RBVEFfQlVGRkVSUwkJMjA0OAkvLyBNaW5pbXVtIGFtb3VudCBhbmQgd2hlbiB0byBnZXQgbW9yZQotI2RlZmluZSBTWEdfTUFYX1JDVl9CTE9DS1MJCQkJMTI4CS8vID0gMTYzODQgcmVjZWl2ZSBidWZmZXJzCisgKi8KKyNkZWZpbmUgU1hHX1JDVl9EQVRBX0JVRkZFUlMJCTgxOTIJLyogQW1vdW50IHRvIGdpdmUgdG8gdGhlIGNhcmQgKi8KKyNkZWZpbmUgU1hHX0lOSVRJQUxfUkNWX0RBVEFfQlVGRkVSUwkxNjM4NAkvKiBJbml0aWFsIHBvb2wgb2YgYnVmZmVycyAqLworLyogTWluaW11bSBhbW91bnQgYW5kIHdoZW4gdG8gZ2V0IG1vcmUgKi8KKyNkZWZpbmUgU1hHX01JTl9SQ1ZfREFUQV9CVUZGRVJTCTQwOTYKKyNkZWZpbmUgU1hHX01BWF9SQ1ZfQkxPQ0tTCQkyNTYJLyogPSAzMmsgcmVjZWl2ZSBidWZmZXJzICovCisvKiBBbW91bnQgdG8gZ2l2ZSB0byB0aGUgY2FyZCBpbiBjYXNlIG9mIGp1bWJvIGZyYW1lcyAqLworI2RlZmluZSBTWEdfSlVNQk9fUkNWX0RBVEFfQlVGRkVSUwkJMjA0OAorLyogSW5pdGlhbCBwb29sIG9mIGJ1ZmZlcnMgaW4gY2FzZSBvZiBqdW1ibyBidWZmZXJzICovCisjZGVmaW5lIFNYR19JTklUSUFMX0pVTUJPX1JDVl9EQVRBX0JVRkZFUlMJNDA5NgorI2RlZmluZSBTWEdfTUlOX0pVTUJPX1JDVl9EQVRBX0JVRkZFUlMJCTEwMjQKIAotLy8gUmVjZWl2ZSBidWZmZXIgaGVhZGVyCi1zdHJ1Y3QgU1hHX1JDVl9EQVRBX0JVRkZFUl9IRFIgewotCWRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzOwkvLyBCdWZmZXIgcGh5c2ljYWwgYWRkcmVzcwotCS8vIE5vdGUgLSBETyBOT1QgVVNFIHRoZSBWaXJ0dWFsQWRkcmVzcyBmaWVsZCB0byBsb2NhdGUgZGF0YS4KLQkvLyBVc2UgdGhlIHN4Zy5oOlNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04gbWFjcm8gaW5zdGVhZC4KLQl2b2lkICpWaXJ0dWFsQWRkcmVzczsJLy8gU3RhcnQgb2YgYnVmZmVyCi0Jc3RydWN0IExJU1RfRU5UUlkgRnJlZUxpc3Q7CS8vIEZyZWUgcXVldWUgb2YgYnVmZmVycwotCXN0cnVjdCBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiAqTmV4dDsJLy8gRmFzdHBhdGggZGF0YSBidWZmZXIgcXVldWUKLQl1MzIgU2l6ZTsJCS8vIEJ1ZmZlciBzaXplCi0JdTMyIEJ5dGVPZmZzZXQ7CQkvLyBTZWUgU1hHX1JFU1RPUkVfTURMX09GRlNFVAotCXVuc2lnbmVkIGNoYXIgU3RhdGU7CS8vIFNlZSBTWEdfQlVGRkVSIHN0YXRlIGFib3ZlCi0JdW5zaWduZWQgY2hhciBTdGF0dXM7CS8vIEV2ZW50IHN0YXR1cyAodG8gbG9nIFBVU0gpCi0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsJLy8gRG91YmxlIG1hcHBlZCAobmJsIGFuZCBwa3QpCisvKiBSZWNlaXZlIGJ1ZmZlciBoZWFkZXIgKi8KK3N0cnVjdCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkciB7CisJZG1hNjRfYWRkcl90CVBoeXNpY2FsQWRkcmVzczsJLyogQnVmZmVyIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwkvKgorCSAqIE5vdGUgLSBETyBOT1QgVVNFIHRoZSBWaXJ0dWFsQWRkcmVzcyBmaWVsZCB0byBsb2NhdGUgZGF0YS4KKwkgKiBVc2UgdGhlIHN4Zy5oOlNYR19SRUNFSVZFX0RBVEFfTE9DQVRJT04gbWFjcm8gaW5zdGVhZC4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9lbnRyeQlGcmVlTGlzdDsJLyogRnJlZSBxdWV1ZSBvZiBidWZmZXJzICovCisJdW5zaWduZWQgY2hhcgkJU3RhdGU7CQkvKiBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZSAqLworCXN0cnVjdCBza19idWZmICAgICAgICAgICogc2tiOwkJLyogRG91YmxlIG1hcHBlZCAobmJsIGFuZCBwa3QpKi8KIH07CiAKLS8vIFN4Z1Nsb3dSZWNlaXZlIHVzZXMgdGhlIFBBQ0tFVCAoc2tiKSBjb250YWluZWQKLS8vIGluIHRoZSBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUiB3aGVuIGluZGljYXRpbmcgZHVtYi1uaWMgZGF0YQorLyoKKyAqIFN4Z1Nsb3dSZWNlaXZlIHVzZXMgdGhlIFBBQ0tFVCAoc2tiKSBjb250YWluZWQKKyAqIGluIHRoZSBzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2J1ZmZlcl9oZHIgd2hlbiBpbmRpY2F0aW5nIGR1bWItbmljIGRhdGEKKyAqLwogI2RlZmluZSBTeGdEdW1iUmN2UGFja2V0CSAgICAgICAgc2tiCiAKLSNkZWZpbmUgU1hHX1JDVl9EQVRBX0hEUl9TSVpFCQkJMjU2CS8vIFNwYWNlIGZvciBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUgotI2RlZmluZSBTWEdfUkNWX0RBVEFfQlVGRkVSX1NJWkUJCTIwNDgJLy8gTm9uIGp1bWJvID0gMmsgaW5jbHVkaW5nIEhEUgotI2RlZmluZSBTWEdfUkNWX0pVTUJPX0JVRkZFUl9TSVpFCQkxMDI0MAkvLyBqdW1ibyA9IDEwayBpbmNsdWRpbmcgSERSCisvKiBTcGFjZSBmb3Igc3RydWN0IHN4Z19yY3ZfZGF0YV9idWZmZXJfaGRyICovCisjZGVmaW5lIFNYR19SQ1ZfREFUQV9IRFJfU0laRQkJc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X2RhdGFfYnVmZmVyX2hkcikKKy8qIE5vbiBqdW1ibyA9IDJrIGluY2x1ZGluZyBIRFIgKi8KKyNkZWZpbmUgU1hHX1JDVl9EQVRBX0JVRkZFUl9TSVpFCTIwNDgKKy8qIGp1bWJvID0gMTBrIGluY2x1ZGluZyBIRFIgKi8KKyNkZWZpbmUgU1hHX1JDVl9KVU1CT19CVUZGRVJfU0laRQkxMDI0MAogCi0vLyBSZWNlaXZlIGRhdGEgZGVzY3JpcHRvcgotc3RydWN0IFNYR19SQ1ZfREFUQV9ERVNDUklQVE9SIHsKKy8qIFJlY2VpdmUgZGF0YSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc3hnX3Jjdl9kYXRhX2Rlc2NyaXB0b3IgewogCXVuaW9uIHsKLQkJc3RydWN0IHNrX2J1ZmYgKlZpcnR1YWxBZGRyZXNzOwkvLyBIb3N0IGhhbmRsZQotCQl1NjQgRm9yY2VUbzhCeXRlczsJLy8gRm9yY2UgeDg2IHRvIDgtYnl0ZSBib3VuZGFyeQorCQlzdHJ1Y3Qgc2tfYnVmZiAqVmlydHVhbEFkZHJlc3M7CS8qIEhvc3QgaGFuZGxlICovCisJCXU2NAkJRm9yY2VUbzhCeXRlczsJLypGb3JjZSB4ODYgdG8gOC1ieXRlIGJvdW5kYXJ5Ki8KIAl9OwotCWRtYV9hZGRyX3QgUGh5c2ljYWxBZGRyZXNzOworCWRtYTY0X2FkZHJfdCBQaHlzaWNhbEFkZHJlc3M7CiB9OwogCi0vLyBSZWNlaXZlIGRlc2NyaXB0b3IgYmxvY2sKKy8qIFJlY2VpdmUgZGVzY3JpcHRvciBibG9jayAqLwogI2RlZmluZSBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSwkJMTI4Ci0jZGVmaW5lIFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19TSVpFCQkyMDQ4CS8vIEZvciBzYW5pdHkgY2hlY2sKKyNkZWZpbmUgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX1NJWkUJCTIwNDgJLyogRm9yIHNhbml0eSBjaGVjayAqLwogCi1zdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLIHsKLQlzdHJ1Y3QgU1hHX1JDVl9EQVRBX0RFU0NSSVBUT1IgRGVzY3JpcHRvcnNbU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0tdOworc3RydWN0IHN4Z19yY3ZfZGVzY3JpcHRvcl9ibG9jayB7CisJc3RydWN0IHN4Z19yY3ZfZGF0YV9kZXNjcmlwdG9yIERlc2NyaXB0b3JzW1NYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLXTsKIH07CiAKLS8vIFJlY2VpdmUgZGVzY3JpcHRvciBibG9jayBoZWFkZXIKLXN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSIHsKLQl2b2lkICpWaXJ0dWFsQWRkcmVzczsJLy8gU3RhcnQgb2YgMmsgYnVmZmVyCi0JZG1hX2FkZHJfdCBQaHlzaWNhbEFkZHJlc3M7CS8vIC4uYW5kIGl0J3MgcGh5c2ljYWwgYWRkcmVzcwotCXN0cnVjdCBMSVNUX0VOVFJZIEZyZWVMaXN0OwkvLyBGcmVlIHF1ZXVlIG9mIGRlc2NyaXB0b3IgYmxvY2tzCi0JdW5zaWduZWQgY2hhciBTdGF0ZTsJLy8gU2VlIFNYR19CVUZGRVIgc3RhdGUgYWJvdmUKKy8qIFJlY2VpdmUgZGVzY3JpcHRvciBibG9jayBoZWFkZXIgKi8KK3N0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyIHsKKwl2b2lkIAkJKlZpcnR1YWxBZGRyZXNzOwkvKiBzdGFydCBvZiAyayBidWZmZXIgKi8KKwlkbWE2NF9hZGRyX3QJCVBoeXNpY2FsQWRkcmVzczsvKiBhbmQgaXQncyBwaHlzaWNhbCBhZGRyZXNzICovCisJc3RydWN0IGxpc3RfZW50cnkJRnJlZUxpc3Q7LyogZnJlZSBxdWV1ZSBvZiBkZXNjcmlwdG9yIGJsb2NrcyAqLworCXVuc2lnbmVkIGNoYXIJU3RhdGU7CS8qIHNlZSBzeGdfYnVmZmVyIHN0YXRlIGFib3ZlICovCiB9OwogCi0vLyBSZWNlaXZlIGJsb2NrIGhlYWRlcgotc3RydWN0IFNYR19SQ1ZfQkxPQ0tfSERSIHsKLQl2b2lkICpWaXJ0dWFsQWRkcmVzczsJLy8gU3RhcnQgb2YgdmlydHVhbCBtZW1vcnkKLQlkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzczsJLy8gLi5hbmQgaXQncyBwaHlzaWNhbCBhZGRyZXNzCi0Jc3RydWN0IExJU1RfRU5UUlkgQWxsTGlzdDsJLy8gUXVldWUgb2YgYWxsIFNYR19SQ1ZfQkxPQ0tTCisvKiBSZWNlaXZlIGJsb2NrIGhlYWRlciAqLworc3RydWN0IHN4Z19yY3ZfYmxvY2tfaGRyIHsKKwl2b2lkCQkqVmlydHVhbEFkZHJlc3M7CS8qIFN0YXJ0IG9mIHZpcnR1YWwgbWVtb3J5ICovCisJZG1hNjRfYWRkcl90CQlQaHlzaWNhbEFkZHJlc3M7LyogLi5hbmQgaXQncyBwaHlzaWNhbCBhZGRyZXNzKi8KKwlzdHJ1Y3QgbGlzdF9lbnRyeQlBbGxMaXN0OwkvKiBRdWV1ZSBvZiBhbGwgU1hHX1JDVl9CTE9DS1MqLwogfTsKIAotLy8gTWFjcm9zIHRvIGRldGVybWluZSBkYXRhIHN0cnVjdHVyZSBvZmZzZXRzIGludG8gcmVjZWl2ZSBibG9jawotI2RlZmluZSBTWEdfUkNWX0JMT0NLX1NJWkUoX0J1ZmZlcnNpemUpIAkJCQkJXAorLyogTWFjcm9zIHRvIGRldGVybWluZSBkYXRhIHN0cnVjdHVyZSBvZmZzZXRzIGludG8gcmVjZWl2ZSBibG9jayAqLworI2RlZmluZSBTWEdfUkNWX0JMT0NLX1NJWkUoX0J1ZmZlcnNpemUpIAkJCQlcCiAJKCgoX0J1ZmZlcnNpemUpICogU1hHX1JDVl9ERVNDUklQVE9SU19QRVJfQkxPQ0spICsJCVwKLQkgKHNpemVvZihzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLKSkgICAgICAgICAgICAgICsJCVwKLQkgKHNpemVvZihzdHJ1Y3QgU1hHX1JDVl9ERVNDUklQVE9SX0JMT0NLX0hEUikpICAgICAgICAgICsJCVwKLQkgKHNpemVvZihzdHJ1Y3QgU1hHX1JDVl9CTE9DS19IRFIpKSkKKwkgKHNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrKSkgICAgICAgICAgICAgICsJXAorCSAoc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyKSkgICAgICAgICAgKwlcCisJIChzaXplb2Yoc3RydWN0IHN4Z19yY3ZfYmxvY2tfaGRyKSkpCiAjZGVmaW5lIFNYR19SQ1ZfQlVGRkVSX0RBVEFfU0laRShfQnVmZmVyc2l6ZSkJCQkJXAogCSgoX0J1ZmZlcnNpemUpIC0gU1hHX1JDVl9EQVRBX0hEUl9TSVpFKQogI2RlZmluZSBTWEdfUkNWX0RBVEFfQlVGRkVSX0hEUl9PRkZTRVQoX0J1ZmZlcnNpemUpCQkJXAogCSgoX0J1ZmZlcnNpemUpIC0gU1hHX1JDVl9EQVRBX0hEUl9TSVpFKQotI2RlZmluZSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfT0ZGU0VUKF9CdWZmZXJzaXplKQkJXAorI2RlZmluZSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfT0ZGU0VUKF9CdWZmZXJzaXplKQkJCVwKIAkoKF9CdWZmZXJzaXplKSAqIFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLKQotI2RlZmluZSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSX09GRlNFVChfQnVmZmVyc2l6ZSkJXAorI2RlZmluZSBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0tfSERSX09GRlNFVChfQnVmZmVyc2l6ZSkJCVwKIAkoKChfQnVmZmVyc2l6ZSkgKiBTWEdfUkNWX0RFU0NSSVBUT1JTX1BFUl9CTE9DSykgKwkJXAotCSAoc2l6ZW9mKHN0cnVjdCBTWEdfUkNWX0RFU0NSSVBUT1JfQkxPQ0spKSkKKwkgKHNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrKSkpCiAjZGVmaW5lIFNYR19SQ1ZfQkxPQ0tfSERSX09GRlNFVChfQnVmZmVyc2l6ZSkJCQkJXAogCSgoKF9CdWZmZXJzaXplKSAqIFNYR19SQ1ZfREVTQ1JJUFRPUlNfUEVSX0JMT0NLKSArCQlcCi0JIChzaXplb2Yoc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DSykpICAgICAgICAgICAgICArCQlcCi0JIChzaXplb2Yoc3RydWN0IFNYR19SQ1ZfREVTQ1JJUFRPUl9CTE9DS19IRFIpKSkKKwkgKHNpemVvZihzdHJ1Y3Qgc3hnX3Jjdl9kZXNjcmlwdG9yX2Jsb2NrKSkgICAgICAgICAgICAgICsJXAorCSAoc2l6ZW9mKHN0cnVjdCBzeGdfcmN2X2Rlc2NyaXB0b3JfYmxvY2tfaGRyKSkpCiAKLS8vIFVzZSB0aGUgbWluaXBvcnQgcmVzZXJ2ZWQgcG9ydGlvbiBvZiB0aGUgTkJMIHRvIGxvY2F0ZQotLy8gb3VyIFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSIHN0cnVjdHVyZS4KLXN0cnVjdCBTWEdfUkNWX05CTF9SRVNFUlZFRCB7Ci0Jc3RydWN0IFNYR19SQ1ZfREFUQV9CVUZGRVJfSERSICpSY3ZEYXRhQnVmZmVySGRyOwotCXZvaWQgKkF2YWlsYWJsZTsKKy8qIFNjYXR0ZXIgZ2F0aGVyIGxpc3QgYnVmZmVyICovCisjZGVmaW5lIFNYR19JTklUSUFMX1NHTF9CVUZGRVJTCTgxOTIJLyogSW5pdGlhbCBwb29sIG9mIFNHTCBidWZmZXJzICovCisjZGVmaW5lIFNYR19NSU5fU0dMX0JVRkZFUlMJMjA0OAkvKiBNaW5pbXVtIGFtb3VudCBhbmQgd2hlbiB0byBnZXQgbW9yZSovCisvKiBNYXhpbXVtIHRvIGFsbG9jYXRlIChub3RlIEFEQVBUOnVzaG9ydCkgKi8KKyNkZWZpbmUgU1hHX01BWF9TR0xfQlVGRkVSUwkxNjM4NAorCisvKgorICogU1hHX1NHTF9QT09MX1BST1BFUlRJRVMgLSBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGRlZmluZSBhIHBvb2wgb2YgU0dMCisgKiBidWZmZXJzLiBUaGVzZSBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgb3V0IG9mIHNoYXJlZCBtZW1vcnkgYW5kIHVzZWQgdG8KKyAqIGNvbnRhaW4gYSBwaHlzaWNhbCBzY2F0dGVyIGdhdGhlciBsaXN0IHN0cnVjdHVyZSB0aGF0IGlzIHNoYXJlZAorICogd2l0aCB0aGUgY2FyZC4KKyAqCisgKiBXZSBzcGxpdCBvdXIgU0dMIGJ1ZmZlcnMgaW50byBtdWx0aXBsZSBwb29scyBiYXNlZCBvbiBzaXplLiAgVGhlIG1vdGl2YXRpb24KKyAqIGlzIHRoYXQgc29tZSBhcHBsaWNhdGlvbnMgcGVyZm9ybSB2ZXJ5IGxhcmdlIEkvT3MgKDFNQiBmb3IgZXhhbXBsZSksIHNvCisgKiB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gYWxsb2NhdGUgYW4gU0dMIHRvIGFjY29tbW9kYXRlIHN1Y2ggYSByZXF1ZXN0LgorICogQnV0IHN1Y2ggYW4gU0dMIHdvdWxkIHJlcXVpcmUgMjU2IDI0LWJ5dGUgU0cgZW50cmllcyAtIH42ay4KKyAqIEdpdmVuIHRoYXQgdGhlIHZhc3QgbWFqb3JpdHkgb2YgSS9PcyBhcmUgbXVjaCBzbWFsbGVyIHRoYW4gMU0sIGFsbG9jYXRpbmcKKyAqIGEgc2luZ2xlIHBvb2wgb2YgU0dMIGJ1ZmZlcnMgd291bGQgYmUgYSBob3JyaWJseSBpbmVmZmljaWVudCB1c2Ugb2YKKyAqIG1lbW9yeS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbmNsdWRlcyB0d28gZmllbGRzIHJlbGF0aW5nIHRvIGl0cyBzaXplLgorICogVGhlIE5CU2l6ZSBmaWVsZCBzcGVjaWZpZXMgdGhlIGxhcmdlc3QgTkVUX0JVRkZFUiB0aGF0IGNhbiBiZSBoYW5kbGVkCisgKiBieSB0aGUgcGFydGljdWxhciBwb29sLiAgVGhlIFNHRW50cmllcyBmaWVsZCBkZWZpbmVzIHRoZSBzaXplLCBpbgorICogZW50cmllcywgb2YgdGhlIFNHTCBmb3IgdGhhdCBwb29sLiAgVGhlIFNHRW50cmllcyBpcyBkZXRlcm1pbmVkIGJ5CisgKiBkaXZpZGluZyB0aGUgTkJTaXplIGJ5IHRoZSBleHBlY3RlZCBwYWdlIHNpemUgKDRrKSwgYW5kIHRoZW4gcGFkZGluZworICogaXQgYnkgc29tZSBhcHByb3ByaWF0ZSBhbW91bnQgYXMgaW5zdXJhbmNlICgyMCUgb3Igc28uLj8/KS4KKyAqLworc3RydWN0IHN4Z19zZ2xfcG9vbF9wcm9wZXJ0aWVzIHsKKwl1MzIJTkJTaXplOwkJLyogTGFyZ2VzdCBORVRfQlVGRkVSIHNpemUgZm9yIHRoaXMgcG9vbCAqLworCXVzaG9ydAlTR0VudHJpZXM7CS8qIE51bWJlciBvZiBlbnRyaWVzIGluIFNHTCAqLworCXVzaG9ydAlJbml0aWFsQnVmZmVyczsJLyogTnVtYmVyIHRvIGFsbG9jYXRlIGF0IGluaXRpYWxpemF0aW9udGltZSAqLworCXVzaG9ydAlNaW5CdWZmZXJzOwkvKiBXaGVuIHRvIGdldCBtb3JlICovCisJdXNob3J0CU1heEJ1ZmZlcnM7CS8qIFdoZW4gdG8gc3RvcCAqLworCXVzaG9ydAlQZXJDcHVUaHJlc2hvbGQ7LyogU2VlIHN4Z2guaDpTWEdfUkVTT1VSQ0VTICovCiB9OwogCi0jZGVmaW5lIFNYR19SQ1ZfTkJMX0JVRkZFUl9IRFIoX05CTCkgKCgoUFNYR19SQ1ZfTkJMX1JFU0VSVkVEKU5FVF9CVUZGRVJfTElTVF9NSU5JUE9SVF9SRVNFUlZFRChfTkJMKSktPlJjdkRhdGFCdWZmZXJIZHIpCisvKgorICogQXQgdGhlIG1vbWVudCBJJ20gZ29pbmcgdG8gc3RhdGljYWxseSBpbml0aWFsaXplIDQgcG9vbHM6CisgKgkxMDBrIGJ1ZmZlciBwb29sOiBUaGUgdmFzdCBtYWpvcml0eSBvZiB0aGUgZXhwZWN0ZWQgYnVmZmVycyBhcmUgZXhwZWN0ZWQKKyAqCQkJdG8gYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMGsuICBBdCAzMCBlbnRyaWVzIHBlciBhbmQKKyAqIAkJCThrIGluaXRpYWwgYnVmZmVycyBhbW91bnRzIHRvIH40TUIgb2YgbWVtb3J5CisgKiAgICAgICAgICAgICAgICAgTk9URSAtIFRoaXMgdXNlZCB0byBiZSA2NEsgd2l0aCAyMCBlbnRyaWVzLCBidXQgZHVyaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICAgIFdIUUwgTkRJUyA2LjAgVGVzdGluZyAoMmNfbWluaTZzdHJlc3MpIE1TIGRvZXMgdGhlaXIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgYmVzdCB0byBzZW5kIGFic3VyZCBOQkwncyB3aXRoIHJpZGljdWxvdXMgU0dMcywgd2UKKyAqICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZSByZWNlaXZlZCA0MDBieXRlIHNlbmRzIGNvbnRhaW5lZCBpbiBTR0wncyB0aGF0CisgKiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmUgMjggZW50cmllcworICoJICAxTSBidWZmZXIgcG9vbDogQnVmZmVycyBiZXR3ZWVuIDY0ayBhbmQgMU0uICBBbGxvY2F0ZSAyNTYgaW5pdGlhbAorICoJICAJCSAgYnVmZmVycyB3aXRoIDMwMCBlbnRyaWVzIGVhY2ggPT4gfjJNQiBvZiBtZW1vcnkKKyAqCSAgNU0gYnVmZmVyIHBvb2w6IE5vdCBleHBlY3RlZCBvZnRlbiwgaWYgYXQgYWxsLiAgMzIgaW5pdGlhbCBidWZmZXJzCisgKgkJCSAgYXQgMTUwMCBlbnRyaWVzIGVhY2ggPT4gfjFNQiBvZiBtZW1vcnkKKyAqIDEwTSBidWZmZXIgcG9vbDogTm90IGV4cGVjdGVkIGF0IGFsbCwgZXhjZXB0IHVuZGVyIHBhdGhlbG9naWNhbCBjb25kaXRpb25zLgorICogCQkgICAgQWxsb2NhdGUgb25lIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuCisgKiAJCSAgTm90ZSAtIDEwTSBpcyB0aGUgY3VycmVudCBsaW1pdCBvZiB3aGF0IHdlIGNhbiByZWFsaXN0aWNhbGx5CisgKiAJCSAgCSBzdXBwb3J0IGR1ZSB0byB0aGUgc2FoYXJhIFNHTCBidWcgZGVzY3JpYmVkIGluIHRoZQorICogCQkgIAkgU0FIQVJBIFNHTCBXT1JLQVJPVU5EIGJlbG93LiBXZSB3aWxsIGxpa2VseSBhZGp1c3QgdGhlCisgKiAJCSAgCSBudW1iZXIgb2YgcG9vbHMgYW5kL29yIHBvb2wgcHJvcGVydGllcyBvdmVyIHRpbWUuCisgKi8KKyNkZWZpbmUgU1hHX05VTV9TR0xfUE9PTFMJNAorI2RlZmluZSBJTklUSUFMSVpFX1NHTF9QT09MX1BST1BFUlRJRVMJCQkJCVwKK3N0cnVjdCBzeGdfc2dsX3Bvb2xfcHJvcGVydGllcyBTeGdTZ2xQb29sUHJvcGVydGllc1tTWEdfTlVNX1NHTF9QT09MU10gPVwKK3sgCQkJCQkJCQkJXAorCXsgIDEwMjQwMCwgICAzMCwgODE5MiwgMjA0OCwgMTYzODQsIDI1Nn0sCQkJXAorCXsgMTA0ODU3NiwgIDMwMCwgIDI1NiwgIDEyOCwgIDEwMjQsIDE2fSwJCQlcCisJeyA1MjUyODgwLCAxNTAwLCAgIDMyLCAgIDE2LCAgIDUxMiwgMH0sCQkJCVwKKwl7MTA0ODU3NjAsIDI3MDAsICAgIDIsICAgIDQsICAgIDMyLCAwfSwJCQkJXAorfTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU2NhdHRlciBnYXRoZXIgbGlzdCBidWZmZXIKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFNYR19JTklUSUFMX1NHTF9CVUZGRVJTCQk4MTkyCS8vIEluaXRpYWwgcG9vbCBvZiBTR0wgYnVmZmVycwotI2RlZmluZSBTWEdfTUlOX1NHTF9CVUZGRVJTCQkJMjA0OAkvLyBNaW5pbXVtIGFtb3VudCBhbmQgd2hlbiB0byBnZXQgbW9yZQotI2RlZmluZSBTWEdfTUFYX1NHTF9CVUZGRVJTCQkJMTYzODQJLy8gTWF4aW11bSB0byBhbGxvY2F0ZSAobm90ZSBBREFQVDp1c2hvcnQpCitleHRlcm4gc3RydWN0IHN4Z19zZ2xfcG9vbF9wcm9wZXJ0aWVzIFN4Z1NnbFBvb2xQcm9wZXJ0aWVzW107CiAKLS8vIFNlbGYgaWRlbnRpZnlpbmcgc3RydWN0dXJlIHR5cGUKKyNkZWZpbmUgU1hHX01BWF9TR0xfQlVGRkVSX1NJWkUJCQkJCQlcCisJU3hnU2dsUG9vbFByb3BlcnRpZXNbU1hHX05VTV9TR0xfUE9PTFMgLSAxXS5OQlNpemUKKworLyoKKyAqIFNBSEFSQSBTR0wgV09SS0FST1VORCEhCisgKiBUaGUgY3VycmVudCBTYWhhcmEgY2FyZCB1c2VzIGEgMTYtYml0IGNvdW50ZXIgd2hlbiBhZHZhbmNpbmcKKyAqIFNHTCBhZGRyZXNzIGxvY2F0aW9ucy4gIFRoaXMgbWVhbnMgdGhhdCBpZiBhbiBTR0wgY3Jvc3NlcworICogYSA2NGsgYm91bmRhcnksIHRoZSBoYXJkd2FyZSB3aWxsIGFjdHVhbGx5IHNraXAgYmFjayB0bworICogdGhlIHN0YXJ0IG9mIHRoZSBwcmV2aW91cyA2NGsgYm91bmRhcnksIHdpdGggb2J2aW91c2x5CisgKiB1bmRlc2lyYWJsZSByZXN1bHRzLgorICoKKyAqIFdlIGN1cnJlbnRseSB3b3JrYXJvdW5kIHRoaXMgaXNzdWUgYnkgYWxsb2NhdGluZyBTR0wgYnVmZmVycworICogaW4gNjRrIGJsb2NrcyBhbmQgc2tpcHBpbmcgb3ZlciBidWZmZXJzIHRoYXQgc3RyYWRkbGUgdGhlIGJvdW5kYXJ5LgorICovCisjZGVmaW5lIFNYR19JTlZBTElEX1NHTChwaHlzX2FkZHIsbGVuKSBcCisJKCgocGh5c19hZGRyID4+IDE2KSAhPSAoIChwaHlzX2FkZHIgKyBsZW4pID4+IDE2ICkpKQorCisvKgorICogQWxsb2NhdGUgU0dMcyBpbiBibG9ja3Mgc28gd2UgY2FuIHNraXAgb3ZlciBpbnZhbGlkIGVudHJpZXMuCisgKiBXZSBhbGxvY2F0aW9uIDY0ayB3b3J0aCBvZiBTR0wgYnVmZmVycywgaW5jbHVkaW5nIHRoZQorICogc3RydWN0IHN4Z19zZ2xfYmxvY2tfaGRyLCBwbHVzIG9uZSBmb3IgcGFkZGluZworICovCisjZGVmaW5lIFNYR19TR0xfQkxPQ0tfU0laRQkJCQk2NTUzNgorI2RlZmluZSBTWEdfU0dMX0FMTE9DQVRJT05fU0laRShfUG9vbCkJCQkJCVwKKwlTWEdfU0dMX0JMT0NLX1NJWkUgKyBTWEdfU0dMX1NJWkUoX1Bvb2wpCisKK3N0cnVjdCBzeGdfc2dsX2Jsb2NrX2hkciB7CisJdXNob3J0CQkJUG9vbDsJCS8qIEFzc29jaWF0ZWQgU0dMIHBvb2wgKi8KKwkvKiBzdHJ1Y3Qgc3hnX3NjYXR0ZXJfZ2F0aGVyIGJsb2NrcyAqLworCXN0cnVjdCBsaXN0X2VudHJ5CUxpc3Q7CisJZG1hNjRfYWRkcl90ICAgICAgICAJUGh5c2ljYWxBZGRyZXNzOy8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KK307CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb24gZGVub3RlcyB0aGUgbWF4aW11bSBibG9jayBvZiBtZW1vcnkgdGhhdCB0aGUKKyAqIGNhcmQgY2FuIERNQSB0by5JdCBpcyBzcGVjaWZpZWQgaW4gdGhlIGNhbGwgdG8gTmRpc01SZWdpc3RlclNjYXR0ZXJHYXRoZXJEbWEuCisgKiBGb3Igbm93LCB1c2UgdGhlIHNhbWUgdmFsdWUgYXMgdXNlZCBpbiB0aGUgU2xpYy9PYXNpcyBkcml2ZXIsIHdoaWNoCisgKiBpcyAxMjhNLiAgVGhhdCBzaG91bGQgY292ZXIgYW55IGV4cGVjdGVkIE1ETCB0aGF0IEkgY2FuIHRoaW5rIG9mLgorICovCisjZGVmaW5lIFNYR19NQVhfUEhZU19NQVAJKDEwMjQgKiAxMDI0ICogMTI4KQorCisvKiBTZWxmIGlkZW50aWZ5aW5nIHN0cnVjdHVyZSB0eXBlICovCiBlbnVtIFNYR19TR0xfVFlQRSB7Ci0JU1hHX1NHTF9EVU1CLAkJLy8gRHVtYiBOSUMgU0dMCi0JU1hHX1NHTF9TTE9XLAkJLy8gU2xvd3BhdGggcHJvdG9jb2wgaGVhZGVyIC0gc2VlIGJlbG93Ci0JU1hHX1NHTF9DSElNTkVZCQkvLyBDaGltbmV5IG9mZmxvYWQgU0dMCisJU1hHX1NHTF9EVU1CLAkJLyogRHVtYiBOSUMgU0dMICovCisJU1hHX1NHTF9TTE9XLAkJLyogU2xvd3BhdGggcHJvdG9jb2wgaGVhZGVyIC0gc2VlIGJlbG93ICovCisJU1hHX1NHTF9DSElNTkVZCQkvKiBDaGltbmV5IG9mZmxvYWQgU0dMICovCiB9OwogCi0vLyBOb3RlIC0gdGhlIGRlc2NyaXB0aW9uIGJlbG93IGlzIE1pY3Jvc29mdCBzcGVjaWZpYwotLy8KLS8vIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbiBzcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IHRvIGFsbG9jYXRlCi0vLyBmb3IgdGhlIFNDQVRURVJfR0FUSEVSX0xJU1QgcG9ydGlvbiBvZiB0aGUgU1hHX1NDQVRURVJfR0FUSEVSIGRhdGEgc3RydWN0dXJlLgotLy8gVGhlIGZvbGxvd2luZyBjb25zaWRlcmF0aW9ucyBhcHBseSB3aGVuIHNldHRpbmcgdGhpcyB2YWx1ZToKLS8vIC0gRmlyc3QsIHRoZSBTYWhhcmEgY2FyZCBpcyBkZXNpZ25lZCB0byByZWFkIHRoZSBNaWNyb3NvZnQgU0dMIHN0cnVjdHVyZQotLy8gICAgICAgc3RyYWlnaHQgb3V0IG9mIGhvc3QgbWVtb3J5LiAgVGhpcyBtZWFucyB0aGF0IHRoZSBTR0wgbXVzdCByZXNpZGUgaW4KLS8vICAgICAgIHNoYXJlZCBtZW1vcnkuICBJZiB0aGUgbGVuZ3RoIGhlcmUgaXMgc21hbGxlciB0aGFuIHRoZSBTR0wgZm9yIHRoZQotLy8gICAgICAgTkVUX0JVRkZFUiwgdGhlbiBORElTIHdpbGwgYWxsb2NhdGUgaXRzIG93biBidWZmZXIuICBUaGUgYnVmZmVyCi0vLyAgICAgICB0aGF0IE5ESVMgYWxsb2NhdGVzIGlzIG5vdCBpbiBzaGFyZWQgbWVtb3J5LCBzbyB3aGVuIHRoaXMgaGFwcGVucywKLS8vICAgICAgIHRoZSBTR0wgd2lsbCBuZWVkIHRvIGJlIGNvcGllZCB0byBhIHNldCBvZiBTWEdfU0NBVFRFUl9HQVRIRVIgYnVmZmVycy4KLS8vICAgICAgIEluIG90aGVyIHdvcmRzLi4gd2UgZG9uJ3Qgd2FudCB0aGlzIHZhbHVlIHRvIGJlIHRvbyBzbWFsbC4KLS8vIC0gT24gdGhlIG90aGVyIGhhbmQuLiB3ZSdyZSBhbGxvY2F0aW5nIHVwIHRvIDE2ayBvZiB0aGVzZSB0aGluZ3MuICBJZgotLy8gICAgICAgd2UgbWFrZSB0aGlzIHRvbyBiaWcsIHdlIHN0YXJ0IHRvIGNvbnN1bWUgYSB0b24gb2YgbWVtb3J5Li4KLS8vIEF0IHRoZSBtb21lbnQsIEknbSBnb2luZyB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIFNHIGVudHJpZXMgdG8gMTUwLgotLy8gSWYgZWFjaCBlbnRyeSBtYXBzIHJvdWdobHkgNGssIHRoZW4gdGhpcyBzaG91bGQgY292ZXIgcm91Z2hseSA2MDBrQgotLy8gTkVUX0JVRkZFUnMuICBGdXJ0aGVybW9yZSwgc2luY2UgZWFjaCBlbnRyeSBpcyAyNCBieXRlcywgdGhlIHRvdGFsCi0vLyBTR0UgcG9ydGlvbiBvZiB0aGUgc3RydWN0dXJlIGNvbnN1bWVzIDM2MDAgYnl0ZXMsIHdoaWNoIHNob3VsZCBhbGxvdwotLy8gdGhlIGVudGlyZSBTWEdfU0NBVFRFUl9HQVRIRVIgc3RydWN0dXJlIHRvIHJlc2lkZSBjb21mb3J0YWJseSB3aXRoaW4KLS8vIGEgNGsgYmxvY2ssIHByb3ZpZGluZyB0aGUgcmVtYWluaW5nIGZpZWxkcyBzdGF5IHVuZGVyIDUwMCBieXRlcy4KLS8vCi0vLyBTbyB3aXRoIDE1MCBlbnRyaWVzLCB0aGUgU1hHX1NDQVRURVJfR0FUSEVSIHN0cnVjdHVyZSBiZWNvbWVzIHJvdWdobHkKLS8vIDRrLiAgQXQgMTZrIG9mIHRoZW0sIHRoYXQgYW1vdW50cyB0byA2NE0gb2Ygc2hhcmVkIG1lbW9yeS4gIEEgdG9uLCBidXQKLS8vIG1hbmFnZWFibGUuCi0jZGVmaW5lIFNYR19TR0xfRU5UUklFUwkJMTUwCi0KLS8vIFRoZSB1Y29kZSBleHBlY3RzIGFuIE5ESVMgU0dMIHN0cnVjdHVyZSB0aGF0Ci0vLyBpcyBmb3JtYXR0ZWQgZm9yIGFuIHg2NCBzeXN0ZW0uICBXaGVuIHJ1bm5pbmcKLS8vIG9uIGFuIHg2NCBzeXN0ZW0sIHdlIGNhbiBzaW1wbHkgaGFuZCB0aGUgTkRJUyBTR0wKLS8vIHRvIHRoZSBjYXJkIGRpcmVjdGx5LiAgRm9yIHg4NiBzeXN0ZW1zIHdlIG11c3QgcmVjb25zdHJ1Y3QKLS8vIHRoZSBTR0wuICBUaGUgZm9sbG93aW5nIHN0cnVjdHVyZSBkZWZpbmVzIGFuIHg2NAotLy8gZm9ybWF0dGVkIFNHTCBlbnRyeQotc3RydWN0IFNYR19YNjRfU0dFIHsKLQlkbWE2NF9hZGRyX3QgQWRkcmVzczsJLy8gc2FtZSBhcyB3ZG0uaAotCXUzMiBMZW5ndGg7CQkvLyBzYW1lIGFzIHdkbS5oCi0JdTMyIENvbXBpbGVyUGFkOwkvLyBUaGUgY29tcGlsZXIgcGFkcyB0byA4LWJ5dGVzCi0JdTY0IFJlc2VydmVkOwkJLy8gdTMyICogaW4gd2RtLmguICBGb3JjZSB0byA4IGJ5dGVzCisvKgorICogVGhlIHVjb2RlIGV4cGVjdHMgYW4gTkRJUyBTR0wgc3RydWN0dXJlIHRoYXQKKyAqIGlzIGZvcm1hdHRlZCBmb3IgYW4geDY0IHN5c3RlbS4gIFdoZW4gcnVubmluZworICogb24gYW4geDY0IHN5c3RlbSwgd2UgY2FuIHNpbXBseSBoYW5kIHRoZSBORElTIFNHTAorICogdG8gdGhlIGNhcmQgZGlyZWN0bHkuICBGb3IgeDg2IHN5c3RlbXMgd2UgbXVzdCByZWNvbnN0cnVjdAorICogdGhlIFNHTC4gIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGRlZmluZXMgYW4geDY0CisgKiBmb3JtYXR0ZWQgU0dMIGVudHJ5CisgKi8KK3N0cnVjdCBzeGdfeDY0X3NnZSB7CisJZG1hNjRfYWRkcl90ICAgIEFkZHJlc3M7CS8qIHNhbWUgYXMgd2RtLmggKi8KKwl1MzIJCUxlbmd0aDsJCS8qIHNhbWUgYXMgd2RtLmggKi8KKwl1MzIJCUNvbXBpbGVyUGFkOwkvKiBUaGUgY29tcGlsZXIgcGFkcyB0byA4LWJ5dGVzICovCisJdTY0CQlSZXNlcnZlZDsJLyogdTMyICogaW4gd2RtLmguICBGb3JjZSB0byA4IGJ5dGVzICovCiB9OwogCi1zdHJ1Y3QgU0NBVFRFUl9HQVRIRVJfRUxFTUVOVCB7Ci0JZG1hNjRfYWRkcl90IEFkZHJlc3M7CS8vIHNhbWUgYXMgd2RtLmgKLQl1MzIgTGVuZ3RoOwkJLy8gc2FtZSBhcyB3ZG0uaAotCXUzMiBDb21waWxlclBhZDsJLy8gVGhlIGNvbXBpbGVyIHBhZHMgdG8gOC1ieXRlcwotCXU2NCBSZXNlcnZlZDsJCS8vIHUzMiAqIGluIHdkbS5oLiAgRm9yY2UgdG8gOCBieXRlcwotfTsKLQotc3RydWN0IFNDQVRURVJfR0FUSEVSX0xJU1QgeworLyoKKyAqIE91ciBTR0wgc3RydWN0dXJlIC0gRXNzZW50aWFsbHkgdGhlIHNhbWUgYXMKKyAqIHdkbS5oOlNDQVRURVJfR0FUSEVSX0xJU1QuICBOb3RlIHRoZSB2YXJpYWJsZSBudW1iZXIgb2YKKyAqIGVsZW1lbnRzIGJhc2VkIG9uIHRoZSBwb29sIHNwZWNpZmllZCBhYm92ZQorICovCitzdHJ1Y3Qgc3hnX3g2NF9zZ2wgewogCXUzMiBOdW1iZXJPZkVsZW1lbnRzOwogCXUzMiAqUmVzZXJ2ZWQ7Ci0Jc3RydWN0IFNDQVRURVJfR0FUSEVSX0VMRU1FTlQgRWxlbWVudHNbXTsKKwlzdHJ1Y3Qgc3hnX3g2NF9zZ2UJCUVsZW1lbnRzWzFdOyAgIC8qIFZhcmlhYmxlICovCiB9OwogCi0vLyBUaGUgY2FyZCBkb2Vzbid0IGNhcmUgYWJvdXQgYW55dGhpbmcgZXhjZXB0IGVsZW1lbnRzLCBzbwotLy8gd2UgY2FuIGxlYXZlIHRoZSB1MzIgKiByZXNlcnZlZCBmaWVsZCBhbG9uZSBpbiB0aGUgZm9sbG93aW5nCi0vLyBTR0wgc3RydWN0dXJlLiAgQnV0IHJlZGVmaW5lIGZyb20gd2RtLmg6U0NBVFRFUl9HQVRIRVJfTElTVCBzbwotLy8gd2UgY2FuIHNwZWNpZnkgU1hHX1g2NF9TR0UgYW5kIGRlZmluZSBhIGZpeGVkIG51bWJlciBvZiBlbGVtZW50cwotc3RydWN0IFNYR19YNjRfU0dMIHsKLQl1MzIgTnVtYmVyT2ZFbGVtZW50czsKLQl1MzIgKlJlc2VydmVkOwotCXN0cnVjdCBTWEdfWDY0X1NHRSBFbGVtZW50c1tTWEdfU0dMX0VOVFJJRVNdOworc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlciB7CisJZW51bSBTWEdfU0dMX1RZUEUJVHlwZTsJCS8qIEZJUlNUISBEdW1iLW5pYyBvciBvZmZsb2FkICovCisJdXNob3J0CQkJUG9vbDsJCS8qIEFzc29jaWF0ZWQgU0dMIHBvb2wgKi8KKwl1c2hvcnQJCQlFbnRyaWVzOwkvKiBTR0wgdG90YWwgZW50cmllcyAqLworCXZvaWQgKiAgIAkJYWRhcHRlcjsJLyogQmFjayBwb2ludGVyIHRvIGFkYXB0ZXIgKi8KKwkvKiBGcmVlIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgYmxvY2tzICovCisJc3RydWN0IGxpc3RfZW50cnkJRnJlZUxpc3Q7CisJLyogQWxsIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXIgYmxvY2tzICovCisJc3RydWN0IGxpc3RfZW50cnkJQWxsTGlzdDsKKwlkbWE2NF9hZGRyX3QJCVBoeXNpY2FsQWRkcmVzczsvKiBwaHlzaWNhbCBhZGRyZXNzICovCisJdW5zaWduZWQgY2hhcgkJU3RhdGU7CQkvKiBTZWUgU1hHX0JVRkZFUiBzdGF0ZSBhYm92ZSAqLworCXVuc2lnbmVkIGNoYXIJCUNtZEluZGV4OwkvKiBDb21tYW5kIHJpbmcgaW5kZXggKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAgICAgICAgIAkqRHVtYlBhY2tldDsJLyogQXNzb2NpYXRlZCBQYWNrZXQgKi8KKwkvKiBGb3IgYXN5bmNocm9ub3VzIGNvbXBsZXRpb25zICovCisJdTMyCQkJRGlyZWN0aW9uOworCXUzMgkJCUN1ck9mZnNldDsJLyogQ3VycmVudCBTR0wgb2Zmc2V0ICovCisJdTMyCQkJU2dsUmVmOwkJLyogU0dMIHJlZmVyZW5jZSBjb3VudCAqLworCXN0cnVjdCB2bGFuX2hkcgkJVmxhblRhZzsJLyogVkxBTiB0YWcgdG8gYmUgaW5zZXJ0ZWQgaW50byBTR0wgKi8KKwlzdHJ1Y3Qgc3hnX3g2NF9zZ2wgICAgIAkqcFNnbDsJCS8qIFNHTCBBZGRyLiBQb3NzaWJseSAmU2dsICovCisJc3RydWN0IHN4Z194NjRfc2dsCVNnbDsJCS8qIFNHTCBoYW5kZWQgdG8gY2FyZCAqLwogfTsKIAotc3RydWN0IFNYR19TQ0FUVEVSX0dBVEhFUiB7Ci0JZW51bSBTWEdfU0dMX1RZUEUgVHlwZTsJLy8gRklSU1QhIER1bWItbmljIG9yIG9mZmxvYWQKLQl2b2lkICphZGFwdGVyOwkJLy8gQmFjayBwb2ludGVyIHRvIGFkYXB0ZXIKLQlzdHJ1Y3QgTElTVF9FTlRSWSBGcmVlTGlzdDsJLy8gRnJlZSBTWEdfU0NBVFRFUl9HQVRIRVIgYmxvY2tzCi0Jc3RydWN0IExJU1RfRU5UUlkgQWxsTGlzdDsJLy8gQWxsIFNYR19TQ0FUVEVSX0dBVEhFUiBibG9ja3MKLQlkbWFfYWRkcl90IFBoeXNpY2FsQWRkcmVzczsJLy8gcGh5c2ljYWwgYWRkcmVzcwotCXVuc2lnbmVkIGNoYXIgU3RhdGU7CS8vIFNlZSBTWEdfQlVGRkVSIHN0YXRlIGFib3ZlCi0JdW5zaWduZWQgY2hhciBDbWRJbmRleDsJLy8gQ29tbWFuZCByaW5nIGluZGV4Ci0Jc3RydWN0IHNrX2J1ZmYgKkR1bWJQYWNrZXQ7CS8vIEFzc29jaWF0ZWQgUGFja2V0Ci0JdTMyIERpcmVjdGlvbjsJCS8vIEZvciBhc3luY2hyb25vdXMgY29tcGxldGlvbnMKLQl1MzIgQ3VyT2Zmc2V0OwkJLy8gQ3VycmVudCBTR0wgb2Zmc2V0Ci0JdTMyIFNnbFJlZjsJCS8vIFNHTCByZWZlcmVuY2UgY291bnQKLQlzdHJ1Y3QgVkxBTl9IRFIgVmxhblRhZzsJLy8gVkxBTiB0YWcgdG8gYmUgaW5zZXJ0ZWQgaW50byBTR0wKLQlzdHJ1Y3QgU0NBVFRFUl9HQVRIRVJfTElTVCAqcFNnbDsJLy8gU0dMIEFkZHIuIFBvc3NpYmx5ICZTZ2wKLQlzdHJ1Y3QgU1hHX1g2NF9TR0wgU2dsOwkvLyBTR0wgaGFuZGVkIHRvIGNhcmQKLX07CisvKgorICogTm90ZSAtIHRoZSAiLSAxIiBpcyBiZWNhdXNlIHN0cnVjdCBzeGdfc2NhdHRlcl9nYXRoZXI9PnN0cnVjdCBzeGdfeDY0X3NnbAorICogaW5jbHVkZXMgMSBTR0UuLgorICovCisjZGVmaW5lIFNYR19TR0xfU0laRShfUG9vbCkgCQkJCQkJXAorCShzaXplb2Yoc3RydWN0IHN4Z19zY2F0dGVyX2dhdGhlcikgKwkJCQlcCisJICgoU3hnU2dsUG9vbFByb3BlcnRpZXNbX1Bvb2xdLlNHRW50cmllcyAtIDEpICogCQlcCisJCQkJc2l6ZW9mKHN0cnVjdCBzeGdfeDY0X3NnZSkpKQogCisvKiBGb3JjZSBORElTIHRvIGdpdmUgdXMgaXQncyBvd24gYnVmZmVyIHNvIHdlIGNhbiByZWZvcm1hdCB0byBvdXIgb3duICovCisjZGVmaW5lIFNYR19TR0xfQlVGRkVSKF9TeGdTZ2wpICAgICAgICAgICAgICAgICBOVUxMCisjZGVmaW5lIFNYR19TR0xfQlVGRkVSX0xFTkdUSChfU3hnU2dsKSAgICAgICAgICAwCisjZGVmaW5lIFNYR19TR0xfQlVGX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAwCisKKy8qCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotI2RlZmluZSBTWEdfU0dMX0JVRkZFUihfU3hnU2dsKQkJKCZfU3hnU2dsLT5TZ2wpCi0jZGVmaW5lIFNYR19TR0xfQlVGX1NJWkUJCQlzaXplb2Yoc3RydWN0IFNYR19YNjRfU0dMKQorI2RlZmluZSBTWEdfU0dMX0JVRkZFUihfU3hnU2dsKQkJICAgICgmX1N4Z1NnbC0+U2dsKQorI2RlZmluZSBTWEdfU0dMX0JVRkZFUl9MRU5HVEgoX1N4Z1NnbCkJKChfU3hnU2dsKS0+RW50cmllcyAqIAkJXAorCQkJCQlzaXplb2Yoc3RydWN0IHN4Z194NjRfc2dlKSkKKyNkZWZpbmUgU1hHX1NHTF9CVUZfU0laRQkJCSAgICBzaXplb2Yoc3RydWN0IHN4Z194NjRfc2dsKQogI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2KQogLy8gRm9yY2UgTkRJUyB0byBnaXZlIHVzIGl0J3Mgb3duIGJ1ZmZlciBzbyB3ZSBjYW4gcmVmb3JtYXQgdG8gb3VyIG93bgotI2RlZmluZSBTWEdfU0dMX0JVRkZFUihfU3hnU2dsKQkJTlVMTAorI2RlZmluZSBTWEdfU0dMX0JVRkZFUihfU3hnU2dsKQkJICAgICAgICBOVUxMCisjZGVmaW5lIFNYR19TR0xfQlVGRkVSX0xFTkdUSChfU3hnU2dsKQkJMAogI2RlZmluZSBTWEdfU0dMX0JVRl9TSVpFCQkJMAogI2Vsc2UKICNlcnJvciBzdGFnaW5nOiBzeGc6IGRyaXZlciBpcyBmb3IgWDg2IG9ubHkhCiAjZW5kaWYKKyovCisvKiBNaWNyb2NvZGUgc3RhdGlzdGljcyAqLworc3RydWN0IHN4Z191Y29kZV9zdGF0cyB7CisJdTMyICBSUERRT2Zsb3c7CQkvKiBQRFEgb3ZlcmZsb3cgKHVuZnJhbWVkIGllIGRxICYgZHJvcCAxc3QpICovCisJdTMyICBYRHJvcHM7CQkvKiBYbXQgZHJvcHMgZHVlIHRvIG5vIHhtdCBidWZmZXIgKi8KKwl1MzIgIEVSRHJvcHM7CQkvKiBSY3YgZHJvcHMgZHVlIHRvIEVSIGZ1bGwgKi8KKwl1MzIgIE5CRHJvcHM7CQkvKiBSY3YgZHJvcHMgZHVlIHRvIG91dCBvZiBob3N0IGJ1ZmZlcnMgKi8KKwl1MzIgIFBRRHJvcHM7CQkvKiBSY3YgZHJvcHMgZHVlIHRvIFBEUSBmdWxsICovCisJLyogUmN2IGRyb3BzIGR1ZSB0byBiYWQgZnJhbWU6IG5vIGxpbmsgYWRkciBtYXRjaCwgZnJsZW4gPiBtYXggKi8KKwl1MzIgIEJGRHJvcHM7CisJdTMyICBVUERyb3BzOwkJLyogUmN2IGRyb3BzIGR1ZSB0byBVUEZxIGZ1bGwgKi8KKwl1MzIgIFhOb0J1ZnM7CQkvKiBYbXQgZHJvcCBkdWUgdG8gbm8gRFJBTSBYbWl0IGJ1ZmZlciBvciBQeHlCdWYgKi8KK307CisKKy8qCisgKiBNYWNyb3MgZm9yIGhhbmRsaW5nIHRoZSBPZmZsb2FkIGVuZ2luZSB2YWx1ZXMKKyAqLworLyogTnVtYmVyIG9mIHBvc2l0aW9ucyB0byBzaGlmdCBOZXR3b3JrIEhlYWRlciBMZW5ndGggYmVmb3JlIHBhc3NpbmcgdG8gY2FyZCAqLworI2RlZmluZSBTWEdfTldfSERSX0xFTl9TSElGVAkJMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdody5oIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdody5oCmluZGV4IGIwZWZmZjkuLjgxZjgxZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hnaHcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvc3hnL3N4Z2h3LmgKQEAgLTEsNCArMSw0IEBACi0vKgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIENvcHlyaWdodCCpIDE5OTctMjAwNyBBbGFjcml0ZWNoLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKICAqCiAgKiAkSWQ6IHN4Z2h3LmgsdiAxLjIgMjAwOC8wNy8yNCAxNzoyNDoyMyBjaHJpcyBFeHAgJApAQCAtNyw2ODIgKzcsODk0IEBACiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIHN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIGZvciB0aGUKICAqIEFsYWNyaXRlY2ggU2FoYXJhIGhhcmR3YXJlCi0gKi8KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29uZmlndXJhdGlvbiBzcGFjZQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBQQ0kgQ29uZmlndXJhdGlvbiBzcGFjZSAqLwogLyogIFBDSSBWZW5kb3IgSUQgKi8KICNkZWZpbmUgU1hHX1ZFTkRPUl9JRAkJCTB4MTM5QQkvKiBBbGFjcml0ZWNoJ3MgVmVuZG9yIElEICovCiAKLS8vICBQQ0kgRGV2aWNlIElECisvKiAgUENJIERldmljZSBJRCAqLwogI2RlZmluZSBTWEdfREVWSUNFX0lECQkJMHgwMDA5CS8qIFNhaGFyYSBEZXZpY2UgSUQgKi8KIAotLy8KLS8vIFN1YnN5c3RlbSBJRHMuCi0vLwotLy8gVGhlIHN1YnN5c3RlbSBJRCB2YWx1ZSBpcyBicm9rZW4gaW50byBiaXQgZmllbGRzIGFzIGZvbGxvd3M6Ci0vLwkJQml0cyBbMTU6MTJdIC0gRnVuY3Rpb24KLS8vCQlCaXRzIFsxMTo4XSAgLSBPRU0gYW5kL29yIG9wZXJhdGluZyBzeXN0ZW0uCi0vLwkJQml0cyBbNzowXSAgIC0gQmFzZSBTSUQuCi0vLwotLy8gU1NJRCBmaWVsZCAoYml0KSBtYXNrcwotI2RlZmluZSBTU0lEX0JBU0VfTUFTSwkJCQkJMHgwMEZGCS8vIEJhc2Ugc3Vic3lzdGVtIElEIG1hc2sKLSNkZWZpbmUgU1NJRF9PRU1fTUFTSwkJCQkJMHgwRjAwCS8vIFN1YnN5c3RlbSBPRU0gbWFzawotI2RlZmluZSBTU0lEX0ZVTkNfTUFTSwkJCQkJMHhGMDAwCS8vIFN1YnN5c3RlbSBmdW5jdGlvbiBtYXNrCiAKLS8vIEJhc2UgU1NJRCdzCi0jZGVmaW5lIFNTSURfU0FIQVJBX1BST1RPCQkJCTB4MDAxOAkvLyAxMDAwMjIgU2FoYXJhIHByb3RvdHlwZSAoWGVuUGFrKSBib2FyZAotI2RlZmluZSBTU0lEX1NBSEFSQV9GSUJFUgkJCQkweDAwMTkJLy8gMTAwMDIzIFNhaGFyYSAxLXBvcnQgZmliZXIgYm9hcmQKLSNkZWZpbmUgU1NJRF9TQUhBUkFfQ09QUEVSCQkJCTB4MDAxQQkvLyAxMDAwMjQgU2FoYXJhIDEtcG9ydCBjb3BwZXIgYm9hcmQKKy8qIFR5cGUgb2YgQVNJQyBpbiB1c2UgKi8KK2VudW0gYXNpY190eXBlIHsKKwlTQUhBUkFfUkVWX0EsCisJU0FIQVJBX1JFVl9CCit9OwogCi0vLyBVc2VmdWwgU1NJRCBtYWNyb3MKLSNkZWZpbmUJU1NJRF9CQVNFKHNzaWQpCQkJKChzc2lkKSAmIFNTSURfQkFTRV9NQVNLKQkJLy8gaXNvbGF0ZSBiYXNlIFNTSUQgYml0cwotI2RlZmluZQlTU0lEX09FTShzc2lkKQkJCSgoc3NpZCkgJiBTU0lEX09FTV9NQVNLKQkJLy8gaXNvbGF0ZSBTU0lEIE9FTSBiaXRzCi0jZGVmaW5lCVNTSURfRlVOQyhzc2lkKQkJCSgoc3NpZCkgJiBTU0lEX0ZVTkNfTUFTSykJCS8vIGlzb2xhdGUgU1NJRCBmdW5jdGlvbiBiaXRzCisvKiBUeXBlIG9mIFhjdnIgaW4gZmliZXIgY2FyZCAqLworZW51bSB4Y3ZyX3R5cGUgeworCVhDVlJfVU5LTk9XTiwKKwlYQ1ZSX05PTkUsCisJWENWUl9TUiwKKwlYQ1ZSX0xSLAorCVhDVlJfTFJNLAorCVhDVlJfQ1IKK307CisvKgorICogU3Vic3lzdGVtIElEcy4KKyAqCisgKiBUaGUgc3Vic3lzdGVtIElEIHZhbHVlIGlzIGJyb2tlbiBpbnRvIGJpdCBmaWVsZHMgYXMgZm9sbG93czoKKyAqCQlCaXRzIFsxNToxMl0gLSBGdW5jdGlvbgorICoJCUJpdHMgWzExOjhdICAtIE9FTSBhbmQvb3Igb3BlcmF0aW5nIHN5c3RlbS4KKyAqCQlCaXRzIFs3OjBdICAgLSBCYXNlIFNJRC4KKyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogSFcgUmVnaXN0ZXIgU3BhY2UKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBTWEdfSFdSRUdfTUVNU0laRQkweDQwMDAJCS8vIDE2aworLyogU1NJRCBmaWVsZCAoYml0KSBtYXNrcyAqLworI2RlZmluZSBTU0lEX0JBU0VfTUFTSwkJMHgwMEZGCS8qIEJhc2Ugc3Vic3lzdGVtIElEIG1hc2sgKi8KKyNkZWZpbmUgU1NJRF9PRU1fTUFTSwkJMHgwRjAwCS8qIFN1YnN5c3RlbSBPRU0gbWFzayAqLworI2RlZmluZSBTU0lEX0ZVTkNfTUFTSwkJMHhGMDAwCS8qIFN1YnN5c3RlbSBmdW5jdGlvbiBtYXNrICovCisKKy8qIEJhc2UgU1NJRCdzICovCisvKiAxMDAwMjIgU2FoYXJhIHByb3RvdHlwZSAoWGVuUGFrKSBib2FyZCAqLworI2RlZmluZSBTU0lEX1NBSEFSQV9QUk9UTwkweDAwMTgKKyNkZWZpbmUgU1NJRF9TQUhBUkFfRklCRVIJMHgwMDE5CS8qIDEwMDAyMyBTYWhhcmEgMS1wb3J0IGZpYmVyIGJvYXJkICovCisjZGVmaW5lIFNTSURfU0FIQVJBX0NPUFBFUgkweDAwMUEJLyogMTAwMDI0IFNhaGFyYSAxLXBvcnQgY29wcGVyIGJvYXJkICovCisKKy8qIFVzZWZ1bCBTU0lEIG1hY3JvcyAqLworLyogaXNvbGF0ZSBiYXNlIFNTSUQgYml0cyAqLworI2RlZmluZQlTU0lEX0JBU0Uoc3NpZCkJCSgoc3NpZCkgJiBTU0lEX0JBU0VfTUFTSykKKy8qIGlzb2xhdGUgU1NJRCBPRU0gYml0cyAqLworI2RlZmluZQlTU0lEX09FTShzc2lkKQkJKChzc2lkKSAmIFNTSURfT0VNX01BU0spCisvKiBpc29sYXRlIFNTSUQgZnVuY3Rpb24gYml0cyAqLworI2RlZmluZQlTU0lEX0ZVTkMoc3NpZCkJCSgoc3NpZCkgJiBTU0lEX0ZVTkNfTUFTSykKKworCisvKiBIVyBSZWdpc3RlciBTcGFjZSAqLworI2RlZmluZSBTWEdfSFdSRUdfTUVNU0laRQkweDQwMDAJCS8qIDE2ayAqLwogCiAjcHJhZ21hIHBhY2socHVzaCwgMSkKLXN0cnVjdCBTWEdfSFdfUkVHUyB7Ci0JdTMyCQlSZXNldDsJCQkJLy8gV3JpdGUgMHhkZWFkIHRvIGludm9rZSBzb2Z0IHJlc2V0Ci0JdTMyCQlQYWQxOwkJCQkvLyBObyByZWdpc3RlciBkZWZpbmVkIGF0IG9mZnNldCA0Ci0JdTMyCQlJbnRlcnJ1cHRNYXNrMDsJCS8vIERlYXNzZXJ0IGxlZ2FjeSBpbnRlcnJ1cHQgb24gZnVuY3Rpb24gMAotCXUzMgkJSW50ZXJydXB0TWFzazE7CQkvLyBEZWFzc2VydCBsZWdhY3kgaW50ZXJydXB0IG9uIGZ1bmN0aW9uIDEKLQl1MzIJCVVjb2RlRGF0YUxvdzsJCS8vIFN0b3JlIG1pY3JvY29kZSBpbnN0cnVjdGlvbiBiaXRzIDMxLTAKLQl1MzIJCVVjb2RlRGF0YU1pZGRsZTsJLy8gU3RvcmUgbWljcm9jb2RlIGluc3RydWN0aW9uIGJpdHMgNjMtMzIKLQl1MzIJCVVjb2RlRGF0YUhpZ2g7CQkvLyBTdG9yZSBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb24gYml0cyA5NS02NAotCXUzMgkJVWNvZGVBZGRyOwkJCS8vIFN0b3JlIG1pY3JvY29kZSBhZGRyZXNzIC0gU2VlIGZsYWdzIGJlbG93Ci0JdTMyCQlQYWRUbzB4ODBbMjRdOwkJLy8gUGFkIHRvIFhjdiBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwotCXUzMgkJTWFjQ29uZmlnMDsJCQkvLyAweDgwIC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMAotCXUzMgkJTWFjQ29uZmlnMTsJCQkvLyAweDg0IC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQotCXUzMgkJTWFjQ29uZmlnMjsJCQkvLyAweDg4IC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMgotCXUzMgkJTWFjQ29uZmlnMzsJCQkvLyAweDhDIC0gQVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMwotCXUzMgkJTWFjQWRkcmVzc0xvdzsJCS8vIDB4OTAgLSBBWEdNQUMgTUFDIFN0YXRpb24gQWRkcmVzcyAtIG9jdGV0cyAxLTQKLQl1MzIJCU1hY0FkZHJlc3NIaWdoOwkJLy8gMHg5NCAtIEFYR01BQyBNQUMgU3RhdGlvbiBBZGRyZXNzIC0gb2N0ZXRzIDUtNgotCXUzMgkJTWFjUmVzZXJ2ZWQxWzJdOwkvLyAweDk4IC0gQVhHTUFDIFJlc2VydmVkCi0JdTMyCQlNYWNNYXhGcmFtZUxlbjsJCS8vIDB4QTAgLSBBWEdNQUMgTWF4aW11bSBGcmFtZSBMZW5ndGgKLQl1MzIJCU1hY1Jlc2VydmVkMlsyXTsJLy8gMHhBNCAtIEFYR01BQyBSZXNlcnZlZAotCXUzMgkJTWFjUmV2aXNpb247CQkvLyAweEFDIC0gQVhHTUFDIFJldmlzaW9uIExldmVsIFJlZ2lzdGVyCi0JdTMyCQlNYWNSZXNlcnZlZDNbNF07CS8vIDB4QjAgLSBBWEdNQUMgUmVzZXJ2ZWQKLQl1MzIJCU1hY0FtaWltQ21kOwkJLy8gMHhDMCAtIEFYR01BQyBBTUlJTSBDb21tYW5kIFJlZ2lzdGVyCi0JdTMyCQlNYWNBbWlpbUZpZWxkOwkJLy8gMHhDNCAtIEFYR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgotCXUzMgkJTWFjQW1paW1Db25maWc7CQkvLyAweEM4IC0gQVhHTUFDIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIKLQl1MzIJCU1hY0FtaWltTGluazsJCS8vIDB4Q0MgLSBBWEdNQUMgQU1JSU0gTGluayBGYWlsIFZlY3RvciBSZWdpc3RlcgotCXUzMgkJTWFjQW1paW1JbmRpY2F0b3I7CS8vIDB4RDAgLSBBWEdNQUMgQU1JSU0gSW5kaWNhdG9yIFJlZ2lzdG9yCi0JdTMyCQlQYWRUbzB4MTAwWzExXTsJCS8vIDB4RDQgLSAweDEwMCAtIFBhZAotCXUzMgkJWG10Q29uZmlnOwkJCS8vIDB4MTAwIC0gVHJhbnNtaXQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgotCXUzMgkJUmN2Q29uZmlnOwkJCS8vIDB4MTA0IC0gUmVjZWl2ZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKLQl1MzIJCUxpbmtBZGRyZXNzMExvdzsJLy8gMHgxMDggLSBMaW5rIGFkZHJlc3MgMAotCXUzMgkJTGlua0FkZHJlc3MwSGlnaDsJLy8gMHgxMEMgLSBMaW5rIGFkZHJlc3MgMAotCXUzMgkJTGlua0FkZHJlc3MxTG93OwkvLyAweDExMCAtIExpbmsgYWRkcmVzcyAxCi0JdTMyCQlMaW5rQWRkcmVzczFIaWdoOwkvLyAweDExNCAtIExpbmsgYWRkcmVzcyAxCi0JdTMyCQlMaW5rQWRkcmVzczJMb3c7CS8vIDB4MTE4IC0gTGluayBhZGRyZXNzIDIKLQl1MzIJCUxpbmtBZGRyZXNzMkhpZ2g7CS8vIDB4MTFDIC0gTGluayBhZGRyZXNzIDIKLQl1MzIJCUxpbmtBZGRyZXNzM0xvdzsJLy8gMHgxMjAgLSBMaW5rIGFkZHJlc3MgMwotCXUzMgkJTGlua0FkZHJlc3MzSGlnaDsJLy8gMHgxMjQgLSBMaW5rIGFkZHJlc3MgMwotCXUzMgkJVG9lcGxpdHpLZXlbMTBdOwkvLyAweDEyOCAtIDB4MTUwIC0gVG9lcGxpdHoga2V5Ci0JdTMyCQlTb2NrZXRLZXlbMTBdOwkJLy8gMHgxNTAgLSAweDE3OCAtIFNvY2tldCBLZXkKLQl1MzIJCUxpbmtTdGF0dXM7CQkJLy8gMHgxNzggLSBMaW5rIHN0YXR1cwotCXUzMgkJQ2xlYXJTdGF0czsJCQkvLyAweDE3QyAtIENsZWFyIFN0YXRzCi0JdTMyCQlYbXRFcnJvcnNMb3c7CQkvLyAweDE4MCAtIFRyYW5zbWl0IHN0YXRzIC0gZXJyb3JzCi0JdTMyCQlYbXRFcnJvcnNIaWdoOwkJLy8gMHgxODQgLSBUcmFuc21pdCBzdGF0cyAtIGVycm9ycwotCXUzMgkJWG10RnJhbWVzTG93OwkJLy8gMHgxODggLSBUcmFuc21pdCBzdGF0cyAtIGZyYW1lIGNvdW50Ci0JdTMyCQlYbXRGcmFtZXNIaWdoOwkJLy8gMHgxOEMgLSBUcmFuc21pdCBzdGF0cyAtIGZyYW1lIGNvdW50Ci0JdTMyCQlYbXRCeXRlc0xvdzsJCS8vIDB4MTkwIC0gVHJhbnNtaXQgc3RhdHMgLSBieXRlIGNvdW50Ci0JdTMyCQlYbXRCeXRlc0hpZ2g7CQkvLyAweDE5NCAtIFRyYW5zbWl0IHN0YXRzIC0gYnl0ZSBjb3VudAotCXUzMgkJWG10VGNwU2VnbWVudHNMb3c7CS8vIDB4MTk4IC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1Agc2VnbWVudHMKLQl1MzIJCVhtdFRjcFNlZ21lbnRzSGlnaDsJLy8gMHgxOUMgLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBzZWdtZW50cwotCXUzMgkJWG10VGNwQnl0ZXNMb3c7CQkvLyAweDFBMCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIGJ5dGVzCi0JdTMyCQlYbXRUY3BCeXRlc0hpZ2g7CS8vIDB4MUE0IC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1AgYnl0ZXMKLQl1MzIJCVJjdkVycm9yc0xvdzsJCS8vIDB4MUE4IC0gUmVjZWl2ZSBzdGF0cyAtIGVycm9ycwotCXUzMgkJUmN2RXJyb3JzSGlnaDsJCS8vIDB4MUFDIC0gUmVjZWl2ZSBzdGF0cyAtIGVycm9ycwotCXUzMgkJUmN2RnJhbWVzTG93OwkJLy8gMHgxQjAgLSBSZWNlaXZlIHN0YXRzIC0gZnJhbWUgY291bnQKLQl1MzIJCVJjdkZyYW1lc0hpZ2g7CQkvLyAweDFCNCAtIFJlY2VpdmUgc3RhdHMgLSBmcmFtZSBjb3VudAotCXUzMgkJUmN2Qnl0ZXNMb3c7CQkvLyAweDFCOCAtIFJlY2VpdmUgc3RhdHMgLSBieXRlIGNvdW50Ci0JdTMyCQlSY3ZCeXRlc0hpZ2g7CQkvLyAweDFCQyAtIFJlY2VpdmUgc3RhdHMgLSBieXRlIGNvdW50Ci0JdTMyCQlSY3ZUY3BTZWdtZW50c0xvdzsJLy8gMHgxQzAgLSBSZWNlaXZlIHN0YXRzIC0gVENQIHNlZ21lbnRzCi0JdTMyCQlSY3ZUY3BTZWdtZW50c0hpZ2g7CS8vIDB4MUM0IC0gUmVjZWl2ZSBzdGF0cyAtIFRDUCBzZWdtZW50cwotCXUzMgkJUmN2VGNwQnl0ZXNMb3c7CQkvLyAweDFDOCAtIFJlY2VpdmUgc3RhdHMgLSBUQ1AgYnl0ZXMKLQl1MzIJCVJjdlRjcEJ5dGVzSGlnaDsJLy8gMHgxQ0MgLSBSZWNlaXZlIHN0YXRzIC0gVENQIGJ5dGVzCi0JdTMyCQlQYWRUbzB4MjAwWzEyXTsJCS8vIDB4MUQwIC0gMHgyMDAgLSBQYWQKLQl1MzIJCVNvZnR3YXJlWzE5MjBdOwkJLy8gMHgyMDAgLSAweDIwMDAgLSBTb2Z0d2FyZSBkZWZpbmVkIChub3QgdXNlZCkKLQl1MzIJCU1zaXhUYWJsZVsxMDI0XTsJLy8gMHgyMDAwIC0gMHgzMDAwIC0gTVNJWCBUYWJsZQotCXUzMgkJTXNpeEJpdEFycmF5WzEwMjRdOwkvLyAweDMwMDAgLSAweDQwMDAgLSBNU0lYIFBlbmRpbmcgQml0IEFycmF5CitzdHJ1Y3Qgc3hnX2h3X3JlZ3MgeworCXUzMglSZXNldDsJCS8qIFdyaXRlIDB4ZGVhZCB0byBpbnZva2Ugc29mdCByZXNldCAqLworCXUzMglQYWQxOwkJLyogTm8gcmVnaXN0ZXIgZGVmaW5lZCBhdCBvZmZzZXQgNCAqLworCXUzMglJbnRlcnJ1cHRNYXNrMDsJLyogRGVhc3NlcnQgbGVnYWN5IGludGVycnVwdCBvbiBmdW5jdGlvbiAwICovCisJdTMyCUludGVycnVwdE1hc2sxOwkvKiBEZWFzc2VydCBsZWdhY3kgaW50ZXJydXB0IG9uIGZ1bmN0aW9uIDEgKi8KKwl1MzIJVWNvZGVEYXRhTG93OwkvKiBTdG9yZSBtaWNyb2NvZGUgaW5zdHJ1Y3Rpb24gYml0cyAzMS0wICovCisJdTMyCVVjb2RlRGF0YU1pZGRsZTsJLyogU3RvcmUgbWljcm9jb2RlIGluc3RydWN0aW9uIGJpdHMgNjMtMzIgKi8KKwl1MzIJVWNvZGVEYXRhSGlnaDsJLyogU3RvcmUgbWljcm9jb2RlIGluc3RydWN0aW9uIGJpdHMgOTUtNjQgKi8KKwl1MzIJVWNvZGVBZGRyOwkvKiBTdG9yZSBtaWNyb2NvZGUgYWRkcmVzcyAtIFNlZSBmbGFncyBiZWxvdyAqLworCXUzMglQYWRUbzB4ODBbMjRdOwkvKiBQYWQgdG8gWGN2IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCisJdTMyCU1hY0NvbmZpZzA7CS8qIDB4ODAgLSBBWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCisJdTMyCU1hY0NvbmZpZzE7CS8qIDB4ODQgLSBBWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisJdTMyCU1hY0NvbmZpZzI7CS8qIDB4ODggLSBBWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyICovCisJdTMyCU1hY0NvbmZpZzM7CS8qIDB4OEMgLSBBWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAzICovCisJdTMyCU1hY0FkZHJlc3NMb3c7CS8qIDB4OTAgLSBBWEdNQUMgTUFDIFN0YXRpb24gQWRkcmVzcyAtIG9jdGV0cyAxLTQgKi8KKwl1MzIJTWFjQWRkcmVzc0hpZ2g7CS8qIDB4OTQgLSBBWEdNQUMgTUFDIFN0YXRpb24gQWRkcmVzcyAtIG9jdGV0cyA1LTYgKi8KKwl1MzIJTWFjUmVzZXJ2ZWQxWzJdOwkvKiAweDk4IC0gQVhHTUFDIFJlc2VydmVkICovCisJdTMyCU1hY01heEZyYW1lTGVuOwkvKiAweEEwIC0gQVhHTUFDIE1heGltdW0gRnJhbWUgTGVuZ3RoICovCisJdTMyCU1hY1Jlc2VydmVkMlsyXTsJLyogMHhBNCAtIEFYR01BQyBSZXNlcnZlZCAqLworCXUzMglNYWNSZXZpc2lvbjsJLyogMHhBQyAtIEFYR01BQyBSZXZpc2lvbiBMZXZlbCBSZWdpc3RlciAqLworCXUzMglNYWNSZXNlcnZlZDNbNF07CS8qIDB4QjAgLSBBWEdNQUMgUmVzZXJ2ZWQgKi8KKwl1MzIJTWFjQW1paW1DbWQ7CS8qIDB4QzAgLSBBWEdNQUMgQU1JSU0gQ29tbWFuZCBSZWdpc3RlciAqLworCXUzMglNYWNBbWlpbUZpZWxkOwkvKiAweEM0IC0gQVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyICovCisJdTMyCU1hY0FtaWltQ29uZmlnOwkvKiAweEM4IC0gQVhHTUFDIEFNSUlNIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKwl1MzIJTWFjQW1paW1MaW5rOwkvKiAweENDIC0gQVhHTUFDIEFNSUlNIExpbmsgRmFpbCBWZWN0b3IgUmVnaXN0ZXIgKi8KKwl1MzIJTWFjQW1paW1JbmRpY2F0b3I7CS8qIDB4RDAgLSBBWEdNQUMgQU1JSU0gSW5kaWNhdG9yIFJlZ2lzdG9yICovCisJdTMyCVBhZFRvMHgxMDBbMTFdOwkJLyogMHhENCAtIDB4MTAwIC0gUGFkICovCisJdTMyCVhtdENvbmZpZzsJLyogMHgxMDAgLSBUcmFuc21pdCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisJdTMyCVJjdkNvbmZpZzsJLyogMHgxMDQgLSBSZWNlaXZlIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLworCXUzMglMaW5rQWRkcmVzczBMb3c7CS8qIDB4MTA4IC0gTGluayBhZGRyZXNzIDAgKi8KKwl1MzIJTGlua0FkZHJlc3MwSGlnaDsJLyogMHgxMEMgLSBMaW5rIGFkZHJlc3MgMCAqLworCXUzMglMaW5rQWRkcmVzczFMb3c7CS8qIDB4MTEwIC0gTGluayBhZGRyZXNzIDEgKi8KKwl1MzIJTGlua0FkZHJlc3MxSGlnaDsJLyogMHgxMTQgLSBMaW5rIGFkZHJlc3MgMSAqLworCXUzMglMaW5rQWRkcmVzczJMb3c7CS8qIDB4MTE4IC0gTGluayBhZGRyZXNzIDIgKi8KKwl1MzIJTGlua0FkZHJlc3MySGlnaDsJLyogMHgxMUMgLSBMaW5rIGFkZHJlc3MgMiAqLworCXUzMglMaW5rQWRkcmVzczNMb3c7CS8qIDB4MTIwIC0gTGluayBhZGRyZXNzIDMgKi8KKwl1MzIJTGlua0FkZHJlc3MzSGlnaDsJLyogMHgxMjQgLSBMaW5rIGFkZHJlc3MgMyAqLworCXUzMglUb2VwbGl0ektleVsxMF07CS8qIDB4MTI4IC0gMHgxNTAgLSBUb2VwbGl0eiBrZXkgKi8KKwl1MzIJU29ja2V0S2V5WzEwXTsJCS8qIDB4MTUwIC0gMHgxNzggLSBTb2NrZXQgS2V5ICovCisJdTMyCUxpbmtTdGF0dXM7CQkvKiAweDE3OCAtIExpbmsgc3RhdHVzICovCisJdTMyCUNsZWFyU3RhdHM7CQkvKiAweDE3QyAtIENsZWFyIFN0YXRzICovCisJdTMyCVhtdEVycm9yc0xvdzsJCS8qIDB4MTgwIC0gVHJhbnNtaXQgc3RhdHMgLSBlcnJvcnMgKi8KKwl1MzIJWG10RXJyb3JzSGlnaDsJCS8qIDB4MTg0IC0gVHJhbnNtaXQgc3RhdHMgLSBlcnJvcnMgKi8KKwl1MzIJWG10RnJhbWVzTG93OwkvKiAweDE4OCAtIFRyYW5zbWl0IHN0YXRzIC0gZnJhbWUgY291bnQgKi8KKwl1MzIJWG10RnJhbWVzSGlnaDsJLyogMHgxOEMgLSBUcmFuc21pdCBzdGF0cyAtIGZyYW1lIGNvdW50ICovCisJdTMyCVhtdEJ5dGVzTG93OwkvKiAweDE5MCAtIFRyYW5zbWl0IHN0YXRzIC0gYnl0ZSBjb3VudCAqLworCXUzMglYbXRCeXRlc0hpZ2g7CS8qIDB4MTk0IC0gVHJhbnNtaXQgc3RhdHMgLSBieXRlIGNvdW50ICovCisJdTMyCVhtdFRjcFNlZ21lbnRzTG93OwkvKiAweDE5OCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIHNlZ21lbnRzICovCisJdTMyCVhtdFRjcFNlZ21lbnRzSGlnaDsJLyogMHgxOUMgLSBUcmFuc21pdCBzdGF0cyAtIFRDUCBzZWdtZW50cyAqLworCXUzMglYbXRUY3BCeXRlc0xvdzsJCS8qIDB4MUEwIC0gVHJhbnNtaXQgc3RhdHMgLSBUQ1AgYnl0ZXMgKi8KKwl1MzIJWG10VGNwQnl0ZXNIaWdoOwkvKiAweDFBNCAtIFRyYW5zbWl0IHN0YXRzIC0gVENQIGJ5dGVzICovCisJdTMyCVJjdkVycm9yc0xvdzsJCS8qIDB4MUE4IC0gUmVjZWl2ZSBzdGF0cyAtIGVycm9ycyAqLworCXUzMglSY3ZFcnJvcnNIaWdoOwkJLyogMHgxQUMgLSBSZWNlaXZlIHN0YXRzIC0gZXJyb3JzICovCisJdTMyCVJjdkZyYW1lc0xvdzsJCS8qIDB4MUIwIC0gUmVjZWl2ZSBzdGF0cyAtIGZyYW1lIGNvdW50ICovCisJdTMyCVJjdkZyYW1lc0hpZ2g7CQkvKiAweDFCNCAtIFJlY2VpdmUgc3RhdHMgLSBmcmFtZSBjb3VudCAqLworCXUzMglSY3ZCeXRlc0xvdzsJCS8qIDB4MUI4IC0gUmVjZWl2ZSBzdGF0cyAtIGJ5dGUgY291bnQgKi8KKwl1MzIJUmN2Qnl0ZXNIaWdoOwkJLyogMHgxQkMgLSBSZWNlaXZlIHN0YXRzIC0gYnl0ZSBjb3VudCAqLworCXUzMglSY3ZUY3BTZWdtZW50c0xvdzsJLyogMHgxQzAgLSBSZWNlaXZlIHN0YXRzIC0gVENQIHNlZ21lbnRzICovCisJdTMyCVJjdlRjcFNlZ21lbnRzSGlnaDsJLyogMHgxQzQgLSBSZWNlaXZlIHN0YXRzIC0gVENQIHNlZ21lbnRzICovCisJdTMyCVJjdlRjcEJ5dGVzTG93OwkJLyogMHgxQzggLSBSZWNlaXZlIHN0YXRzIC0gVENQIGJ5dGVzICovCisJdTMyCVJjdlRjcEJ5dGVzSGlnaDsJLyogMHgxQ0MgLSBSZWNlaXZlIHN0YXRzIC0gVENQIGJ5dGVzICovCisJdTMyCVBhZFRvMHgyMDBbMTJdOwkJLyogMHgxRDAgLSAweDIwMCAtIFBhZCAqLworCXUzMglTb2Z0d2FyZVsxOTIwXTsJCS8qIDB4MjAwIC0gMHgyMDAwIC0gU29mdHdhcmUgZGVmaW5lZCAobm90IHVzZWQpICovCisJdTMyCU1zaXhUYWJsZVsxMDI0XTsJLyogMHgyMDAwIC0gMHgzMDAwIC0gTVNJWCBUYWJsZSAqLworCXUzMglNc2l4Qml0QXJyYXlbMTAyNF07CS8qIDB4MzAwMCAtIDB4NDAwMCAtIE1TSVggUGVuZGluZyBCaXQgQXJyYXkgKi8KIH07CiAjcHJhZ21hIHBhY2socG9wKQogCi0vLyBNaWNyb2NvZGUgQWRkcmVzcyBGbGFncwotI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19HTwkJMHg4MDAwMDAwMAkvLyBTdGFydCBtaWNyb2NvZGUKLSNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfV1JJVEUJCTB4NDAwMDAwMDAJLy8gU3RvcmUgbWljcm9jb2RlCi0jZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1JFQUQJCTB4MjAwMDAwMDAJLy8gUmVhZCBtaWNyb2NvZGUKLSNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfUEFSSVRZCTB4MTAwMDAwMDAJLy8gUGFyaXR5IGVycm9yIGRldGVjdGVkCi0jZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX01BU0sJCTB4MDAwMDFGRkYJLy8gQWRkcmVzcyBiaXRzCisvKiBNaWNyb2NvZGUgQWRkcmVzcyBGbGFncyAqLworI2RlZmluZQlNSUNST0NPREVfQUREUkVTU19HTwkJMHg4MDAwMDAwMAkvKiBTdGFydCBtaWNyb2NvZGUgKi8KKyNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfV1JJVEUJCTB4NDAwMDAwMDAJLyogU3RvcmUgbWljcm9jb2RlICovCisjZGVmaW5lCU1JQ1JPQ09ERV9BRERSRVNTX1JFQUQJCTB4MjAwMDAwMDAJLyogUmVhZCBtaWNyb2NvZGUgKi8KKyNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfUEFSSVRZCTB4MTAwMDAwMDAvKiBQYXJpdHkgZXJyb3IgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUJTUlDUk9DT0RFX0FERFJFU1NfTUFTSwkJMHgwMDAwMUZGRgkvKiBBZGRyZXNzIGJpdHMgKi8KIAotLy8gTGluayBBZGRyZXNzIFJlZ2lzdGVycwotI2RlZmluZSBMSU5LX0FERFJFU1NfRU5BQkxFCQkJMHg4MDAwMDAwMAkvLyBBcHBsaWVkIHRvIGxpbmsgYWRkcmVzcyBoaWdoCisvKiBMaW5rIEFkZHJlc3MgUmVnaXN0ZXJzICovCisvKiBBcHBsaWVkIHRvIGxpbmsgYWRkcmVzcyBoaWdoICovCisjZGVmaW5lIExJTktfQUREUkVTU19FTkFCTEUJMHg4MDAwMDAwMAogCi0vLyBNaWNyb3NvZnQgcmVnaXN0ZXIgc3BhY2Ugc2l6ZQotI2RlZmluZSBTWEdfVUNPREVSRUdfTUVNU0laRQkweDQwMDAwCQkvLyAyNTZrCisvKiBNaWNyb3NvZnQgcmVnaXN0ZXIgc3BhY2Ugc2l6ZSAqLworI2RlZmluZSBTWEdfVUNPREVSRUdfTUVNU0laRQkweDQwMDAwCQkvKiAyNTZrICovCiAKLS8vIFNhaGFyYSBtaWNyb2NvZGUgcmVnaXN0ZXIgYWRkcmVzcyBmb3JtYXQuICBUaGUgY29tbWFuZCBjb2RlLAotLy8gZXh0ZW5kZWQgY29tbWFuZCBjb2RlLCBhbmQgYXNzb2NpYXRlZCBwcm9jZXNzb3IgYXJlIGVuY29kZWQgaW4KLS8vIHRoZSBhZGRyZXNzIGJpdHMgYXMgZm9sbG93cwotI2RlZmluZSBTWEdfQUREUkVTU19DT0RFX1NISUZUCQkyCQkJLy8gQmFzZSBjb21tYW5kIGNvZGUKKy8qCisgKiBTYWhhcmEgbWljcm9jb2RlIHJlZ2lzdGVyIGFkZHJlc3MgZm9ybWF0LiAgVGhlIGNvbW1hbmQgY29kZSwKKyAqIGV4dGVuZGVkIGNvbW1hbmQgY29kZSwgYW5kIGFzc29jaWF0ZWQgcHJvY2Vzc29yIGFyZSBlbmNvZGVkIGluCisgKiB0aGUgYWRkcmVzcyBiaXRzIGFzIGZvbGxvd3MKKyAqLworI2RlZmluZSBTWEdfQUREUkVTU19DT0RFX1NISUZUCQkyCQkvKiBCYXNlIGNvbW1hbmQgY29kZSAqLwogI2RlZmluZSBTWEdfQUREUkVTU19DT0RFX01BU0sJCTB4MDAwMDAwM0MKLSNkZWZpbmUgU1hHX0FERFJFU1NfRVhDT0RFX1NISUZUCTYJCQkvLyBFeHRlbmRlZCAob3Igc3ViKSBjb21tYW5kIGNvZGUKKy8qIEV4dGVuZGVkIChvciBzdWIpIGNvbW1hbmQgY29kZSAqLworI2RlZmluZSBTWEdfQUREUkVTU19FWENPREVfU0hJRlQJNgogI2RlZmluZSBTWEdfQUREUkVTU19FWENPREVfTUFTSwkJMHgwMDAwMUZDMAotI2RlZmluZQlTWEdfQUREUkVTU19DUFVJRF9TSElGVAkJMTMJCQkvLyBDUFUKKyNkZWZpbmUJU1hHX0FERFJFU1NfQ1BVSURfU0hJRlQJCTEzCQkvKiBDUFUgKi8KICNkZWZpbmUgU1hHX0FERFJFU1NfQ1BVSURfTUFTSwkJMHgwMDAzRTAwMAotI2RlZmluZSBTWEdfUkVHSVNURVJfU0laRV9QRVJfQ1BVCTB4MDAwMDIwMDAJLy8gVXNlZCB0byBzYW5pdHkgY2hlY2sgVUNPREVfUkVHUyBzdHJ1Y3R1cmUKKy8qIFVzZWQgdG8gc2FuaXR5IGNoZWNrIFVDT0RFX1JFR1Mgc3RydWN0dXJlICovCisjZGVmaW5lIFNYR19SRUdJU1RFUl9TSVpFX1BFUl9DUFUJMHgwMDAwMjAwMAogCi0vLyBTYWhhcmEgcmVjZWl2ZSBzZXF1ZW5jZXIgc3RhdHVzIHZhbHVlcwotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BVFROCQkJMHg4MDAwMDAwMAkvLyBBdHRlbnRpb24KLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX01BU0sJCTB4M0YwMDAwMDAJLy8gVHJhbnNwb3J0IG1hc2sKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0VSUk9SCQkweDIwMDAwMDAwCS8vIFRyYW5zcG9ydCBlcnJvcgotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfQ1NVTQkJMHgyMzAwMDAwMAkvLyBUcmFuc3BvcnQgY2tzdW0gZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX1VGTE9XCQkweDIyMDAwMDAwCS8vIFRyYW5zcG9ydCB1bmRlcmZsb3cKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0hEUkxFTgkJMHgyMDAwMDAwMAkvLyBUcmFuc3BvcnQgaGVhZGVyIGxlbmd0aAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRkxBR1MJCTB4MTAwMDAwMDAJLy8gVHJhbnNwb3J0IGZsYWdzIGRldGVjdGVkCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9PUFRTCQkweDA4MDAwMDAwCS8vIFRyYW5zcG9ydCBvcHRpb25zIGRldGVjdGVkCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9TRVNTX01BU0sJMHgwNzAwMDAwMAkvLyBUcmFuc3BvcnQgRERQCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9ERFAJCTB4MDYwMDAwMDAJLy8gVHJhbnNwb3J0IEREUAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfaVNDU0kJCTB4MDUwMDAwMDAJLy8gVHJhbnNwb3J0IGlTQ1NJCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9ORlMJCTB4MDQwMDAwMDAJLy8gVHJhbnNwb3J0IE5GUwotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRlRQCQkweDAzMDAwMDAwCS8vIFRyYW5zcG9ydCBGVFAKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0hUVFAJCTB4MDIwMDAwMDAJLy8gVHJhbnNwb3J0IEhUVFAKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX1NNQgkJMHgwMTAwMDAwMAkvLyBUcmFuc3BvcnQgU01CCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUFTSwkJMHgwMEZGMDAwMAkvLyBOZXR3b3JrIG1hc2sKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19FUlJPUgkJMHgwMDgwMDAwMAkvLyBOZXR3b3JrIGVycm9yCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfQ1NVTQkJMHgwMDgzMDAwMAkvLyBOZXR3b3JrIGNrc3VtIGVycm9yCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVUZMT1cJCTB4MDA4MjAwMDAJLy8gTmV0d29yayB1bmRlcmZsb3cgZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19IRFJMRU4JCTB4MDA4MDAwMDAJLy8gTmV0d29yayBoZWFkZXIgbGVuZ3RoCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfT0ZMT1cJCTB4MDA0MDAwMDAJLy8gTmV0d29yayBvdmVyZmxvdyBkZXRlY3RlZAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX01DQVNUCQkweDAwMjAwMDAwCS8vIE5ldHdvcmsgbXVsdGljYXN0IGRldGVjdGVkCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfT1BUSU9OUwkJMHgwMDEwMDAwMAkvLyBOZXR3b3JrIG9wdGlvbnMgZGV0ZWN0ZWQKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19PRkZTRVQJCTB4MDAwODAwMDAJLy8gTmV0d29yayBvZmZzZXQgZGV0ZWN0ZWQKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19GUkFHTUVOVAkJMHgwMDA0MDAwMAkvLyBOZXR3b3JrIGZyYWdtZW50IGRldGVjdGVkCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVFJBTlNfTUFTSwkweDAwMDMwMDAwCS8vIE5ldHdvcmsgdHJhbnNwb3J0IHR5cGUgbWFzawotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1VEUAkJMHgwMDAyMDAwMAkvLyBVRFAKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19UQ1AJCTB4MDAwMTAwMDAJLy8gVENQCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0lQT05MWQkJCTB4MDAwMDgwMDAJLy8gSVAtb25seSBub3QgVENQCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1BLVF9QUkkJCQkweDAwMDA2MDAwCS8vIFJlY2VpdmUgcHJpb3JpdHkKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEtUX1BSSV9TSEZUCQkJMTMJLy8gUmVjZWl2ZSBwcmlvcml0eSBzaGlmdAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19QQVJJVFkJCQkweDAwMDAxMDAwCS8vIE1BQyBSZWNlaXZlIFJBTSBwYXJpdHkgZXJyb3IKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19NQVNLCQkweDAwMDAwRjAwCS8vIExpbmsgYWRkcmVzcyBkZXRlY3Rpb24gbWFzawotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0QJCTB4MDAwMDBCMDAJLy8gTGluayBhZGRyZXNzIEQKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19DCQkweDAwMDAwQTAwCS8vIExpbmsgYWRkcmVzcyBDCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQgkJMHgwMDAwMDkwMAkvLyBMaW5rIGFkZHJlc3MgQgotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0EJCTB4MDAwMDA4MDAJLy8gTGluayBhZGRyZXNzIEEKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19CQ0FTVAkJMHgwMDAwMDMwMAkvLyBMaW5rIGFkZHJlc3MgYnJvYWRjYXN0Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfTUNBU1QJCTB4MDAwMDAyMDAJLy8gTGluayBhZGRyZXNzIG11bHRpY2FzdAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0NNQ0FTVAkJMHgwMDAwMDEwMAkvLyBMaW5rIGNvbnRyb2wgbXVsdGljYXN0Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfTUFTSwkJMHgwMDAwMDBGRgkvLyBMaW5rIHN0YXR1cyBtYXNrCi0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfRVJST1IJCTB4MDAwMDAwODAJLy8gTGluayBlcnJvcgotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX01BU0sJCTB4MDAwMDAwRkYJLy8gTGluayBzdGF0dXMgbWFzawotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1BBUklUWQkJMHgwMDAwMDA4NwkvLyBSY3ZNYWNRIHBhcml0eSBlcnJvcgotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0VBUkxZCQkweDAwMDAwMDg2CS8vIERhdGEgZWFybHkKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19CVUZPRkxPVwkJMHgwMDAwMDA4NQkvLyBCdWZmZXIgb3ZlcmZsb3cKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DT0RFCQkweDAwMDAwMDg0CS8vIExpbmsgY29kZSBlcnJvcgotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0RSSUJCTEUJCTB4MDAwMDAwODMJLy8gRHJpYmJsZSBuaWJibGUKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DUkMJCQkweDAwMDAwMDgyCS8vIENSQyBlcnJvcgotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX09GTE9XCQkweDAwMDAwMDgxCS8vIExpbmsgb3ZlcmZsb3cKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19VRkxPVwkJMHgwMDAwMDA4MAkvLyBMaW5rIHVuZGVyZmxvdwotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LXzgwMjMJCTB4MDAwMDAwMjAJLy8gODAyLjMKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19TTkFQCQkweDAwMDAwMDEwCS8vIFNuYXAKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19WTEFOCQkweDAwMDAwMDA4CS8vIFZMQU4KLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19UWVBFX01BU0sJCTB4MDAwMDAwMDcJLy8gTmV0d29yayB0eXBlIG1hc2sKLSNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DT05UUk9MCQkweDAwMDAwMDAzCS8vIENvbnRyb2wgcGFja2V0Ci0jZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfSVBWNgkJMHgwMDAwMDAwMgkvLyBJUHY2IHBhY2tldAotI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0lQVjQJCTB4MDAwMDAwMDEJLy8gSVB2NCBwYWNrZXQKKy8qIFNhaGFyYSByZWNlaXZlIHNlcXVlbmNlciBzdGF0dXMgdmFsdWVzICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FUVE4JCQkweDgwMDAwMDAwIC8qIEF0dGVudGlvbiAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfTUFTSwkJMHgzRjAwMDAwMCAvKiBUcmFuc3BvcnQgbWFzayAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRVJST1IJCTB4MjAwMDAwMDAgLyogVHJhbnNwb3J0IGVycm9yICovCisvKiBUcmFuc3BvcnQgY2tzdW0gZXJyb3IgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0NTVU0JCTB4MjMwMDAwMDAKKy8qIFRyYW5zcG9ydCB1bmRlcmZsb3cgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX1VGTE9XCQkweDIyMDAwMDAwCisgLyogVHJhbnNwb3J0IGhlYWRlciBsZW5ndGggKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0hEUkxFTgkJMHgyMDAwMDAwMAorLyogVHJhbnNwb3J0IGZsYWdzIGRldGVjdGVkICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9GTEFHUwkJMHgxMDAwMDAwMAorIC8qIFRyYW5zcG9ydCBvcHRpb25zIGRldGVjdGVkICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9PUFRTCQkweDA4MDAwMDAwCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9TRVNTX01BU0sJMHgwNzAwMDAwMCAvKiBUcmFuc3BvcnQgRERQICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9ERFAJCTB4MDYwMDAwMDAgLyogVHJhbnNwb3J0IEREUCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfaVNDU0kJCTB4MDUwMDAwMDAgLyogVHJhbnNwb3J0IGlTQ1NJICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX1RSQU5TUE9SVF9ORlMJCTB4MDQwMDAwMDAgLyogVHJhbnNwb3J0IE5GUyAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19UUkFOU1BPUlRfRlRQCQkweDAzMDAwMDAwIC8qIFRyYW5zcG9ydCBGVFAgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX0hUVFAJCTB4MDIwMDAwMDAgLyogVHJhbnNwb3J0IEhUVFAgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfVFJBTlNQT1JUX1NNQgkJMHgwMTAwMDAwMCAvKiBUcmFuc3BvcnQgU01CICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfTUFTSwkJMHgwMEZGMDAwMCAvKiBOZXR3b3JrIG1hc2sgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19FUlJPUgkJMHgwMDgwMDAwMCAvKiBOZXR3b3JrIGVycm9yICovCisvKiBOZXR3b3JrIGNrc3VtIGVycm9yICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfQ1NVTQkJMHgwMDgzMDAwMAorLyogTmV0d29yayB1bmRlcmZsb3cgZXJyb3IgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19VRkxPVwkJMHgwMDgyMDAwMAorIC8qIE5ldHdvcmsgaGVhZGVyIGxlbmd0aCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX0hEUkxFTgkJMHgwMDgwMDAwMAorIC8qIE5ldHdvcmsgb3ZlcmZsb3cgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19PRkxPVwkJMHgwMDQwMDAwMAorLyogTmV0d29yayBtdWx0aWNhc3QgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19NQ0FTVAkJMHgwMDIwMDAwMAorLyogTmV0d29yayBvcHRpb25zIGRldGVjdGVkICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfT1BUSU9OUwkJMHgwMDEwMDAwMAorLyogTmV0d29yayBvZmZzZXQgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19PRkZTRVQJCTB4MDAwODAwMDAKKy8qIE5ldHdvcmsgZnJhZ21lbnQgZGV0ZWN0ZWQgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTkVUV09SS19GUkFHTUVOVAkJMHgwMDA0MDAwMAorLyogTmV0d29yayB0cmFuc3BvcnQgdHlwZSBtYXNrICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVFJBTlNfTUFTSwkweDAwMDMwMDAwCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX05FVFdPUktfVURQCQkweDAwMDIwMDAwIC8qIFVEUCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19ORVRXT1JLX1RDUAkJMHgwMDAxMDAwMCAvKiBUQ1AgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfSVBPTkxZCQkJMHgwMDAwODAwMCAvKiBJUC1vbmx5IG5vdCBUQ1AgKi8KKy8qIFJlY2VpdmUgcHJpb3JpdHkgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEtUX1BSSQkJCTB4MDAwMDYwMDAKKy8qIFJlY2VpdmUgcHJpb3JpdHkgc2hpZnQgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfUEtUX1BSSV9TSEZUCQkxMworLyogTUFDIFJlY2VpdmUgUkFNIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19QQVJJVFkJCQkweDAwMDAxMDAwCisvKiBMaW5rIGFkZHJlc3MgZGV0ZWN0aW9uIG1hc2sgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19NQVNLCQkweDAwMDAwRjAwCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNhaGFyYSByZWNlaXZlIGFuZCB0cmFuc21pdCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUJUkNWX0NPTkZJR19SRVNFVAkJMHg4MDAwMDAwMAkvLyBSY3ZDb25maWcgcmVnaXN0ZXIgcmVzZXQKLSNkZWZpbmUJUkNWX0NPTkZJR19FTkFCTEUJCTB4NDAwMDAwMDAJLy8gRW5hYmxlIHRoZSByZWNlaXZlIGxvZ2ljCi0jZGVmaW5lCVJDVl9DT05GSUdfRU5QQVJTRQkJMHgyMDAwMDAwMAkvLyBFbmFibGUgdGhlIHJlY2VpdmUgcGFyc2VyCi0jZGVmaW5lCVJDVl9DT05GSUdfU09DS0VUCQkweDEwMDAwMDAwCS8vIEVuYWJsZSB0aGUgc29ja2V0IGRldGVjdG9yCi0jZGVmaW5lCVJDVl9DT05GSUdfUkNWQkFECQkweDA4MDAwMDAwCS8vIFJlY2VpdmUgYWxsIGJhZCBmcmFtZXMKLSNkZWZpbmUJUkNWX0NPTkZJR19DT05UUk9MCQkweDA0MDAwMDAwCS8vIFJlY2VpdmUgYWxsIGNvbnRyb2wgZnJhbWVzCi0jZGVmaW5lCVJDVl9DT05GSUdfUkNWUEFVU0UJCTB4MDIwMDAwMDAJLy8gRW5hYmxlIHBhdXNlIHRyYW5zbWl0IHdoZW4gYXR0bgotI2RlZmluZQlSQ1ZfQ09ORklHX1RaSVBWNgkJMHgwMTAwMDAwMAkvLyBJbmNsdWRlIFRDUCBwb3J0IHcvIElQdjYgdG9lcGxpdHoKLSNkZWZpbmUJUkNWX0NPTkZJR19UWklQVjQJCTB4MDA4MDAwMDAJLy8gSW5jbHVkZSBUQ1AgcG9ydCB3LyBJUHY0IHRvZXBsaXR6Ci0jZGVmaW5lCVJDVl9DT05GSUdfRkxVU0gJCTB4MDA0MDAwMDAJLy8gRmx1c2ggYnVmZmVycwotI2RlZmluZQlSQ1ZfQ09ORklHX1BSSU9SSVRZX01BU0sJMHgwMDMwMDAwMAkvLyBQcmlvcml0eSBsZXZlbAotI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfTUFTSwkJMHgwMDAzMDAwMAkvLyBIYXNoIGRlcHRoCi0jZGVmaW5lCVJDVl9DT05GSUdfSEFTSF84CQkweDAwMDAwMDAwCS8vIEhhc2ggZGVwdGggOAotI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfMTYJCTB4MDAwMTAwMDAJLy8gSGFzaCBkZXB0aCAxNgotI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfNAkJMHgwMDAyMDAwMAkvLyBIYXNoIGRlcHRoIDQKLSNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzIJCTB4MDAwMzAwMDAJLy8gSGFzaCBkZXB0aCAyCi0jZGVmaW5lCVJDVl9DT05GSUdfQlVGTEVOX01BU0sJCTB4MDAwMEZGRjAJLy8gQnVmZmVyIGxlbmd0aCBiaXRzIDE1OjQuIGllIG11bHRpcGxlIG9mIDE2LgotI2RlZmluZSBSQ1ZfQ09ORklHX1NLVF9ESVMJCTB4MDAwMDAwMDgJLy8gRGlzYWJsZSBzb2NrZXQgZGV0ZWN0aW9uIG9uIGF0dG4KLS8vIE1hY3JvIHRvIGRldGVybWluZSBSQ1ZfQ09ORklHX0JVRkxFTiBiYXNlZCBvbiBtYXhpbXVtIGZyYW1lIHNpemUuCi0vLyBXZSBhZGQgMTggYnl0ZXMgZm9yIFNhaGFyYSByZWNlaXZlIHN0YXR1cyBhbmQgcGFkZGluZywgcGx1cyA0IGJ5dGVzIGZvciBDUkMsCi0vLyBhbmQgcm91bmQgdXAgdG8gbmVhcmVzdCAxNiBieXRlIGJvdW5kYXJ5Ci0jZGVmaW5lIFJDVl9DT05GSUdfQlVGU0laRShfTWF4RnJhbWUpICgoKChfTWF4RnJhbWUpICsgMjIpICsgMTUpICYgUkNWX0NPTkZJR19CVUZMRU5fTUFTSykKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19ECQkweDAwMDAwQjAwIC8qIExpbmsgYWRkcmVzcyBEICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQwkJMHgwMDAwMEEwMCAvKiBMaW5rIGFkZHJlc3MgQyAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19BRERSRVNTX0IJCTB4MDAwMDA5MDAgLyogTGluayBhZGRyZXNzIEIgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19BCQkweDAwMDAwODAwIC8qIExpbmsgYWRkcmVzcyBBICovCisvKiBMaW5rIGFkZHJlc3MgYnJvYWRjYXN0ICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfQkNBU1QJCTB4MDAwMDAzMDAKKyAvKiBMaW5rIGFkZHJlc3MgbXVsdGljYXN0ICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0FERFJFU1NfTUNBU1QJCTB4MDAwMDAyMDAKKy8qIExpbmsgY29udHJvbCBtdWx0aWNhc3QgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfQUREUkVTU19DTUNBU1QJCTB4MDAwMDAxMDAKKy8qIExpbmsgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19NQVNLCQkweDAwMDAwMEZGCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfRVJST1IJCTB4MDAwMDAwODAgLyogTGluayBlcnJvciAqLworLyogTGluayBzdGF0dXMgbWFzayAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX01BU0sJCTB4MDAwMDAwRkYKKy8qIFJjdk1hY1EgcGFyaXR5IGVycm9yICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfUEFSSVRZCQkweDAwMDAwMDg3CisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfRUFSTFkJCTB4MDAwMDAwODYgLyogRGF0YSBlYXJseSAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0JVRk9GTE9XCQkweDAwMDAwMDg1IC8qIEJ1ZmZlciBvdmVyZmxvdyAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0NPREUJCTB4MDAwMDAwODQgLyogTGluayBjb2RlIGVycm9yICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfRFJJQkJMRQkJMHgwMDAwMDA4MyAvKiBEcmliYmxlIG5pYmJsZSAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0NSQwkJCTB4MDAwMDAwODIgLyogQ1JDIGVycm9yICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfT0ZMT1cJCTB4MDAwMDAwODEgLyogTGluayBvdmVyZmxvdyAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1VGTE9XCQkweDAwMDAwMDgwIC8qIExpbmsgdW5kZXJmbG93ICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfODAyMwkJMHgwMDAwMDAyMCAvKiA4MDIuMyAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1NOQVAJCTB4MDAwMDAwMTAgLyogU25hcCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX1ZMQU4JCTB4MDAwMDAwMDggLyogVkxBTiAqLworLyogTmV0d29yayB0eXBlIG1hc2sgKi8KKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19UWVBFX01BU0sJCTB4MDAwMDAwMDcKKyNkZWZpbmUgU1hHX1JDVl9TVEFUVVNfTElOS19DT05UUk9MCQkweDAwMDAwMDAzIC8qIENvbnRyb2wgcGFja2V0ICovCisjZGVmaW5lIFNYR19SQ1ZfU1RBVFVTX0xJTktfSVBWNgkJMHgwMDAwMDAwMiAvKiBJUHY2IHBhY2tldCAqLworI2RlZmluZSBTWEdfUkNWX1NUQVRVU19MSU5LX0lQVjQJCTB4MDAwMDAwMDEgLyogSVB2NCBwYWNrZXQgKi8KIAotI2RlZmluZQlYTVRfQ09ORklHX1JFU0VUCQkweDgwMDAwMDAwCS8vIFhtdENvbmZpZyByZWdpc3RlciByZXNldAotI2RlZmluZQlYTVRfQ09ORklHX0VOQUJMRQkJMHg0MDAwMDAwMAkvLyBFbmFibGUgdHJhbnNtaXQgbG9naWMKLSNkZWZpbmUJWE1UX0NPTkZJR19NQUNfUEFSSVRZCQkweDIwMDAwMDAwCS8vIEluaGliaXQgTUFDIFJBTSBwYXJpdHkgZXJyb3IKLSNkZWZpbmUJWE1UX0NPTkZJR19CVUZfUEFSSVRZCQkweDEwMDAwMDAwCS8vIEluaGliaXQgRDJGIGJ1ZmZlciBwYXJpdHkgZXJyb3IKLSNkZWZpbmUJWE1UX0NPTkZJR19NRU1fUEFSSVRZCQkweDA4MDAwMDAwCS8vIEluaGliaXQgMVQgU1JBTSBwYXJpdHkgZXJyb3IKLSNkZWZpbmUJWE1UX0NPTkZJR19JTlZFUlRfUEFSSVRZCTB4MDQwMDAwMDAJLy8gSW52ZXJ0IE1BQyBSQU0gcGFyaXR5Ci0jZGVmaW5lCVhNVF9DT05GSUdfSU5JVElBTF9JUElECQkweDAwMDBGRkZGCS8vIEluaXRpYWwgSVBJRAorLyogU2FoYXJhIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCisvKiBSY3ZDb25maWcgcmVnaXN0ZXIgcmVzZXQgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19SRVNFVAkJMHg4MDAwMDAwMAorLyogRW5hYmxlIHRoZSByZWNlaXZlIGxvZ2ljICovCisjZGVmaW5lCVJDVl9DT05GSUdfRU5BQkxFCQkweDQwMDAwMDAwCisvKiBFbmFibGUgdGhlIHJlY2VpdmUgcGFyc2VyICovCisjZGVmaW5lCVJDVl9DT05GSUdfRU5QQVJTRQkJMHgyMDAwMDAwMAorLyogRW5hYmxlIHRoZSBzb2NrZXQgZGV0ZWN0b3IgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19TT0NLRVQJCTB4MTAwMDAwMDAKKyNkZWZpbmUJUkNWX0NPTkZJR19SQ1ZCQUQJCTB4MDgwMDAwMDAgLyogUmVjZWl2ZSBhbGwgYmFkIGZyYW1lcyAqLworLyogUmVjZWl2ZSBhbGwgY29udHJvbCBmcmFtZXMgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19DT05UUk9MCQkweDA0MDAwMDAwCisvKiBFbmFibGUgcGF1c2UgdHJhbnNtaXQgd2hlbiBhdHRuICovCisjZGVmaW5lCVJDVl9DT05GSUdfUkNWUEFVU0UJCTB4MDIwMDAwMDAKKy8qIEluY2x1ZGUgVENQIHBvcnQgdy8gSVB2NiB0b2VwbGl0eiAqLworI2RlZmluZQlSQ1ZfQ09ORklHX1RaSVBWNgkJMHgwMTAwMDAwMAorLyogSW5jbHVkZSBUQ1AgcG9ydCB3LyBJUHY0IHRvZXBsaXR6ICovCisjZGVmaW5lCVJDVl9DT05GSUdfVFpJUFY0CQkweDAwODAwMDAwCisjZGVmaW5lCVJDVl9DT05GSUdfRkxVU0gJCTB4MDA0MDAwMDAgLyogRmx1c2ggYnVmZmVycyAqLworI2RlZmluZQlSQ1ZfQ09ORklHX1BSSU9SSVRZX01BU0sJMHgwMDMwMDAwMCAvKiBQcmlvcml0eSBsZXZlbCAqLworI2RlZmluZQlSQ1ZfQ09ORklHX0NPTk5fTUFTSwkJMHgwMDBDMDAwMCAvKiBOdW1iZXIgb2YgY29ubmVjdGlvbnMgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19DT05OXzRLCQkweDAwMDAwMDAwIC8qIDRrIGNvbm5lY3Rpb25zICovCisjZGVmaW5lCVJDVl9DT05GSUdfQ09OTl8ySwkJMHgwMDA0MDAwMCAvKiAyayBjb25uZWN0aW9ucyAqLworI2RlZmluZQlSQ1ZfQ09ORklHX0NPTk5fMUsJCTB4MDAwODAwMDAgLyogMWsgY29ubmVjdGlvbnMgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19DT05OXzUxMgkJMHgwMDBDMDAwMCAvKiA1MTIgY29ubmVjdGlvbnMgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIX01BU0sJCTB4MDAwMzAwMDAgLyogSGFzaCBkZXB0aCAqLworI2RlZmluZQlSQ1ZfQ09ORklHX0hBU0hfOAkJMHgwMDAwMDAwMCAvKiBIYXNoIGRlcHRoIDggKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzE2CQkweDAwMDEwMDAwIC8qIEhhc2ggZGVwdGggMTYgKi8KKyNkZWZpbmUJUkNWX0NPTkZJR19IQVNIXzQJCTB4MDAwMjAwMDAgLyogSGFzaCBkZXB0aCA0ICovCisjZGVmaW5lCVJDVl9DT05GSUdfSEFTSF8yCQkweDAwMDMwMDAwIC8qIEhhc2ggZGVwdGggMiAqLworLyogQnVmZmVyIGxlbmd0aCBiaXRzIDE1OjQuIGllIG11bHRpcGxlIG9mIDE2LiAqLworI2RlZmluZQlSQ1ZfQ09ORklHX0JVRkxFTl9NQVNLCQkweDAwMDBGRkUwCisvKiBEaXNhYmxlIHNvY2tldCBkZXRlY3Rpb24gb24gYXR0biAqLworI2RlZmluZSBSQ1ZfQ09ORklHX1NLVF9ESVMJCTB4MDAwMDAwMDgKKyNkZWZpbmUgUkNWX0NPTkZJR19ISVBSSUNUTCAgICAgMHgwMDAwMDAwMiAvKiBDdHJsIGZyYW1lcyBvbiBoaWdoLXByaW9pcnR5IFJjdlEgKi8KKyNkZWZpbmUgUkNWX0NPTkZJR19ORVdTVEFUVVNGTVQgMHgwMDAwMDAwMSAvKiBVc2UgUmV2QiBzdGF0dXMgZm9ybWF0ICovCisvKgorICogTWFjcm8gdG8gZGV0ZXJtaW5lIFJDVl9DT05GSUdfQlVGTEVOIGJhc2VkIG9uIG1heGltdW0gZnJhbWUgc2l6ZS4KKyAqIFdlIGFkZCAxOCBieXRlcyBmb3IgU2FoYXJhIHJlY2VpdmUgc3RhdHVzIGFuZCBwYWRkaW5nLCBwbHVzIDQgYnl0ZXMgZm9yIENSQywKKyAqIGFuZCByb3VuZCB1cCB0byBuZWFyZXN0IDMyIGJ5dGUgYm91bmRhcnkKKyAqLworI2RlZmluZSBSQ1ZfQ09ORklHX0JVRlNJWkUoX01heEZyYW1lKQkJCQkJXAorCQkoKCgoX01heEZyYW1lKSArIDIyKSArIDMxKSAmIFJDVl9DT05GSUdfQlVGTEVOX01BU0spCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIEEtWEdNQUMgUmVnaXN0ZXJzIC0gT2NjdXB5IDB4ODAgLSAweEQ0IG9mIHRoZSBTWEdfSFdfUkVHUworLyogWG10Q29uZmlnIHJlZ2lzdGVyIHJlc2V0ICovCisjZGVmaW5lCVhNVF9DT05GSUdfUkVTRVQJCTB4ODAwMDAwMDAKKyNkZWZpbmUJWE1UX0NPTkZJR19FTkFCTEUJCTB4NDAwMDAwMDAgLyogRW5hYmxlIHRyYW5zbWl0IGxvZ2ljICovCisvKiBJbmhpYml0IE1BQyBSQU0gcGFyaXR5IGVycm9yICovCisjZGVmaW5lCVhNVF9DT05GSUdfTUFDX1BBUklUWQkJMHgyMDAwMDAwMAorLyogSW5oaWJpdCBEMkYgYnVmZmVyIHBhcml0eSBlcnJvciAqLworI2RlZmluZQlYTVRfQ09ORklHX0JVRl9QQVJJVFkJCTB4MTAwMDAwMDAKKy8qIEluaGliaXQgMVQgU1JBTSBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUJWE1UX0NPTkZJR19NRU1fUEFSSVRZCQkweDA4MDAwMDAwCisjZGVmaW5lCVhNVF9DT05GSUdfSU5WRVJUX1BBUklUWQkweDA0MDAwMDAwIC8qIEludmVydCBNQUMgUkFNIHBhcml0eSAqLworI2RlZmluZQlYTVRfQ09ORklHX0lOSVRJQUxfSVBJRAkJMHgwMDAwRkZGRiAvKiBJbml0aWFsIElQSUQgKi8KKworLyoKKyAqIEEtWEdNQUMgUmVnaXN0ZXJzIC0gT2NjdXB5IDB4ODAgLSAweEQ0IG9mIHRoZSBzdHJ1Y3Qgc3hnX2h3X3JlZ3MKICAqCiAgKiBGdWxsIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gYXhnbWFjLnBkZgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vIEEtWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwCi0jZGVmaW5lIEFYR01BQ19DRkcwX1NVQl9SRVNFVAkJMHg4MDAwMDAwMAkJLy8gU3ViIG1vZHVsZSByZXNldAotI2RlZmluZSBBWEdNQUNfQ0ZHMF9SQ05UUkxfUkVTRVQJMHgwMDQwMDAwMAkJLy8gUmVjZWl2ZSBjb250cm9sIHJlc2V0Ci0jZGVmaW5lIEFYR01BQ19DRkcwX1JGVU5DX1JFU0VUCQkweDAwMjAwMDAwCQkvLyBSZWNlaXZlIGZ1bmN0aW9uIHJlc2V0Ci0jZGVmaW5lIEFYR01BQ19DRkcwX1RDTlRSTF9SRVNFVAkweDAwMDQwMDAwCQkvLyBUcmFuc21pdCBjb250cm9sIHJlc2V0Ci0jZGVmaW5lIEFYR01BQ19DRkcwX1RGVU5DX1JFU0VUCQkweDAwMDIwMDAwCQkvLyBUcmFuc21pdCBmdW5jdGlvbiByZXNldAotI2RlZmluZSBBWEdNQUNfQ0ZHMF9NSUlfUkVTRVQJCTB4MDAwMTAwMDAJCS8vIE1JSSBNYW5hZ2VtZW50IHJlc2V0CisgKi8KKy8qIEEtWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCisjZGVmaW5lIEFYR01BQ19DRkcwX1NVQl9SRVNFVAkJMHg4MDAwMDAwMCAvKiBTdWIgbW9kdWxlIHJlc2V0ICovCisjZGVmaW5lIEFYR01BQ19DRkcwX1JDTlRSTF9SRVNFVAkweDAwNDAwMDAwIC8qIFJlY2VpdmUgY29udHJvbCByZXNldCAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMF9SRlVOQ19SRVNFVAkJMHgwMDIwMDAwMCAvKiBSZWNlaXZlIGZ1bmN0aW9uIHJlc2V0ICovCisjZGVmaW5lIEFYR01BQ19DRkcwX1RDTlRSTF9SRVNFVAkweDAwMDQwMDAwIC8qIFRyYW5zbWl0IGNvbnRyb2wgcmVzZXQgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzBfVEZVTkNfUkVTRVQJCTB4MDAwMjAwMDAgLyogVHJhbnNtaXQgZnVuY3Rpb24gcmVzZXQgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzBfTUlJX1JFU0VUCQkweDAwMDEwMDAwIC8qIE1JSSBNYW5hZ2VtZW50IHJlc2V0ICovCiAKLS8vIEEtWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCi0jZGVmaW5lIEFYR01BQ19DRkcxX1hNVF9QQVVTRQkJMHg4MDAwMDAwMAkJLy8gQWxsb3cgdGhlIHNlbmRpbmcgb2YgUGF1c2UgZnJhbWVzCi0jZGVmaW5lIEFYR01BQ19DRkcxX1hNVF9FTgkJMHg0MDAwMDAwMAkJLy8gRW5hYmxlIHRyYW5zbWl0Ci0jZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9QQVVTRQkJMHgyMDAwMDAwMAkJLy8gQWxsb3cgdGhlIGRldGVjdGlvbiBvZiBQYXVzZSBmcmFtZXMKLSNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0VOCQkweDEwMDAwMDAwCQkvLyBFbmFibGUgcmVjZWl2ZQotI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTVRfU1RBVEUJCTB4MDQwMDAwMDAJCS8vIEN1cnJlbnQgdHJhbnNtaXQgc3RhdGUgLSBSRUFEIE9OTFkKLSNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX1NUQVRFCQkweDAxMDAwMDAwCQkvLyBDdXJyZW50IHJlY2VpdmUgc3RhdGUgLSBSRUFEIE9OTFkKLSNkZWZpbmUgQVhHTUFDX0NGRzFfWE9GRl9TSE9SVAkJMHgwMDAwMTAwMAkJLy8gT25seSBwYXVzZSBmb3IgNjQgc2xvdCBvbiBYT0ZGCi0jZGVmaW5lIEFYR01BQ19DRkcxX1hNR19GQ1MxCQkweDAwMDAwNDAwCQkvLyBEZWxheSB0cmFuc21pdCBGQ1MgMSA0LWJ5dGUgd29yZAotI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMgkJMHgwMDAwMDgwMAkJLy8gRGVsYXkgdHJhbnNtaXQgRkNTIDIgNC1ieXRlIHdvcmRzCi0jZGVmaW5lIEFYR01BQ19DRkcxX1hNR19GQ1MzCQkweDAwMDAwQzAwCQkvLyBEZWxheSB0cmFuc21pdCBGQ1MgMyA0LWJ5dGUgd29yZHMKLSNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0ZDUzEJCTB4MDAwMDAxMDAJCS8vIERlbGF5IHJlY2VpdmUgRkNTIDEgNC1ieXRlIHdvcmQKLSNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0ZDUzIJCTB4MDAwMDAyMDAJCS8vIERlbGF5IHJlY2VpdmUgRkNTIDIgNC1ieXRlIHdvcmRzCi0jZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MzCQkweDAwMDAwMzAwCQkvLyBEZWxheSByZWNlaXZlIEZDUyAzIDQtYnl0ZSB3b3JkcwotI2RlZmluZSBBWEdNQUNfQ0ZHMV9QS1RfT1ZFUlJJREUJMHgwMDAwMDA4MAkJLy8gUGVyLXBhY2tldCBvdmVycmlkZSBlbmFibGUKLSNkZWZpbmUgQVhHTUFDX0NGRzFfU1dBUAkJMHgwMDAwMDA0MAkJLy8gQnl0ZSBzd2FwIGVuYWJsZQotI2RlZmluZSBBWEdNQUNfQ0ZHMV9TSE9SVF9BU1NFUlQJMHgwMDAwMDAyMAkJLy8gQVNTRVJUIHNyZHJwZnJtIG9uIHNob3J0IGZyYW1lICg8NjQpCi0jZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9TVFJJQ1QJCTB4MDAwMDAwMTAJCS8vIFJDViBvbmx5IDgwMi4zQUUgd2hlbiBDTEVBUgotI2RlZmluZSBBWEdNQUNfQ0ZHMV9DSEVDS19MRU4JCTB4MDAwMDAwMDgJCS8vIFZlcmlmeSBmcmFtZSBsZW5ndGgKLSNkZWZpbmUgQVhHTUFDX0NGRzFfR0VOX0ZDUwkJMHgwMDAwMDAwNAkJLy8gR2VuZXJhdGUgRkNTCi0jZGVmaW5lIEFYR01BQ19DRkcxX1BBRF9NQVNLCQkweDAwMDAwMDAzCQkvLyBNYXNrIGZvciBwYWQgYml0cwotI2RlZmluZSBBWEdNQUNfQ0ZHMV9QQURfNjQJCTB4MDAwMDAwMDEJCS8vIFBhZCBmcmFtZXMgdG8gNjQgYnl0ZXMKLSNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEX1ZMQU4JCTB4MDAwMDAwMDIJCS8vIERldGVjdCBWTEFOIGFuZCBwYWQgdG8gNjggYnl0ZXMKLSNkZWZpbmUgQVhHTUFDX0NGRzFfUEFEXzY4CQkweDAwMDAwMDAzCQkvLyBQYWQgdG8gNjggYnl0ZXMKKy8qIEEtWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCisvKiBBbGxvdyB0aGUgc2VuZGluZyBvZiBQYXVzZSBmcmFtZXMgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE1UX1BBVVNFCQkweDgwMDAwMDAwCisjZGVmaW5lIEFYR01BQ19DRkcxX1hNVF9FTgkJMHg0MDAwMDAwMCAvKiBFbmFibGUgdHJhbnNtaXQgKi8KKy8qIEFsbG93IHRoZSBkZXRlY3Rpb24gb2YgUGF1c2UgZnJhbWVzICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9QQVVTRQkJMHgyMDAwMDAwMAorI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfRU4JCTB4MTAwMDAwMDAgLyogRW5hYmxlIHJlY2VpdmUgKi8KKy8qIEN1cnJlbnQgdHJhbnNtaXQgc3RhdGUgLSBSRUFEIE9OTFkgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE1UX1NUQVRFCQkweDA0MDAwMDAwCisvKiBDdXJyZW50IHJlY2VpdmUgc3RhdGUgLSBSRUFEIE9OTFkgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX1NUQVRFCQkweDAxMDAwMDAwCisvKiBPbmx5IHBhdXNlIGZvciA2NCBzbG90IG9uIFhPRkYgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE9GRl9TSE9SVAkJMHgwMDAwMTAwMAorLyogRGVsYXkgdHJhbnNtaXQgRkNTIDEgNC1ieXRlIHdvcmQgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfWE1HX0ZDUzEJCTB4MDAwMDA0MDAKKy8qIERlbGF5IHRyYW5zbWl0IEZDUyAyIDQtYnl0ZSB3b3JkcyAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9YTUdfRkNTMgkJMHgwMDAwMDgwMAorLyogRGVsYXkgdHJhbnNtaXQgRkNTIDMgNC1ieXRlIHdvcmRzICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1hNR19GQ1MzCQkweDAwMDAwQzAwCisvKiBEZWxheSByZWNlaXZlIEZDUyAxIDQtYnl0ZSB3b3JkICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1JDVl9GQ1MxCQkweDAwMDAwMTAwCisvKiBEZWxheSByZWNlaXZlIEZDUyAyIDQtYnl0ZSB3b3JkcyAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9SQ1ZfRkNTMgkJMHgwMDAwMDIwMAorLyogRGVsYXkgcmVjZWl2ZSBGQ1MgMyA0LWJ5dGUgd29yZHMgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX0ZDUzMJCTB4MDAwMDAzMDAKKy8qIFBlci1wYWNrZXQgb3ZlcnJpZGUgZW5hYmxlICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1BLVF9PVkVSUklERQkweDAwMDAwMDgwCisjZGVmaW5lIEFYR01BQ19DRkcxX1NXQVAJCTB4MDAwMDAwNDAgLyogQnl0ZSBzd2FwIGVuYWJsZSAqLworLyogQVNTRVJUIHNyZHJwZnJtIG9uIHNob3J0IGZyYW1lICg8NjQpICovCisjZGVmaW5lIEFYR01BQ19DRkcxX1NIT1JUX0FTU0VSVAkweDAwMDAwMDIwCisvKiBSQ1Ygb25seSA4MDIuM0FFIHdoZW4gQ0xFQVIgKi8KKyNkZWZpbmUgQVhHTUFDX0NGRzFfUkNWX1NUUklDVAkJMHgwMDAwMDAxMAorI2RlZmluZSBBWEdNQUNfQ0ZHMV9DSEVDS19MRU4JCTB4MDAwMDAwMDggLyogVmVyaWZ5IGZyYW1lIGxlbmd0aCAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9HRU5fRkNTCQkweDAwMDAwMDA0IC8qIEdlbmVyYXRlIEZDUyAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9QQURfTUFTSwkJMHgwMDAwMDAwMyAvKiBNYXNrIGZvciBwYWQgYml0cyAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9QQURfNjQJCTB4MDAwMDAwMDEgLyogUGFkIGZyYW1lcyB0byA2NCBieXRlcyAqLworLyogRGV0ZWN0IFZMQU4gYW5kIHBhZCB0byA2OCBieXRlcyAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMV9QQURfVkxBTgkJMHgwMDAwMDAwMgorI2RlZmluZSBBWEdNQUNfQ0ZHMV9QQURfNjgJCTB4MDAwMDAwMDMgLyogUGFkIHRvIDY4IGJ5dGVzICovCiAKLS8vIEEtWEdNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyCi0jZGVmaW5lIEFYR01BQ19DRkcyX0dFTl9QQVVTRQkJMHg4MDAwMDAwMAkJLy8gR2VuZXJhdGUgc2luZ2xlIHBhdXNlIGZyYW1lICh0ZXN0KQotI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9NQU5VQUwJCTB4MDgwMDAwMDAJCS8vIE1hbnVhbCBsaW5rIGZhdWx0IHNlcXVlbmNlCi0jZGVmaW5lIEFYR01BQ19DRkcyX0xGX0FVVE8JCTB4MDQwMDAwMDAJCS8vIEF1dG8gbGluayBmYXVsdCBzZXF1ZW5jZQotI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9SRU1PVEUJCTB4MDIwMDAwMDAJCS8vIFJlbW90ZSBsaW5rIGZhdWx0IChSRUFEIE9OTFkpCi0jZGVmaW5lIEFYR01BQ19DRkcyX0xGX0xPQ0FMCQkweDAxMDAwMDAwCQkvLyBMb2NhbCBsaW5rIGZhdWx0IChSRUFEIE9OTFkpCi0jZGVmaW5lIEFYR01BQ19DRkcyX0lQR19NQVNLCQkweDAwMUYwMDAwCQkvLyBJbnRlciBwYWNrZXQgZ2FwCisvKiBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMiAqLworLyogR2VuZXJhdGUgc2luZ2xlIHBhdXNlIGZyYW1lICh0ZXN0KSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMl9HRU5fUEFVU0UJCTB4ODAwMDAwMDAKKy8qIE1hbnVhbCBsaW5rIGZhdWx0IHNlcXVlbmNlICovCisjZGVmaW5lIEFYR01BQ19DRkcyX0xGX01BTlVBTAkJMHgwODAwMDAwMAorLyogQXV0byBsaW5rIGZhdWx0IHNlcXVlbmNlICovCisjZGVmaW5lIEFYR01BQ19DRkcyX0xGX0FVVE8JCTB4MDQwMDAwMDAKKy8qIFJlbW90ZSBsaW5rIGZhdWx0IChSRUFEIE9OTFkpICovCisjZGVmaW5lIEFYR01BQ19DRkcyX0xGX1JFTU9URQkJMHgwMjAwMDAwMAorLyogTG9jYWwgbGluayBmYXVsdCAoUkVBRCBPTkxZKSAqLworI2RlZmluZSBBWEdNQUNfQ0ZHMl9MRl9MT0NBTAkJMHgwMTAwMDAwMAorI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdfTUFTSwkJMHgwMDFGMDAwMCAvKiBJbnRlciBwYWNrZXQgZ2FwICovCiAjZGVmaW5lIEFYR01BQ19DRkcyX0lQR19TSElGVAkJCTE2Ci0jZGVmaW5lIEFYR01BQ19DRkcyX1BBVVNFX1hNVAkJMHgwMDAwODAwMAkJLy8gUGF1c2UgdHJhbnNtaXQgbW9kdWxlCi0jZGVmaW5lIEFYR01BQ19DRkcyX0lQR19FWFRFTgkJMHgwMDAwMDAyMAkJLy8gRW5hYmxlIElQRyBleHRlbnNpb24gYWxnb3JpdGhtCi0jZGVmaW5lIEFYR01BQ19DRkcyX0lQR0VYX01BU0sJCTB4MDAwMDAwMUYJCS8vIElQRyBleHRlbnNpb24KKyNkZWZpbmUgQVhHTUFDX0NGRzJfUEFVU0VfWE1UCQkweDAwMDA4MDAwIC8qIFBhdXNlIHRyYW5zbWl0IG1vZHVsZSAqLworLyogRW5hYmxlIElQRyBleHRlbnNpb24gYWxnb3JpdGhtICovCisjZGVmaW5lIEFYR01BQ19DRkcyX0lQR19FWFRFTgkJMHgwMDAwMDAyMAorI2RlZmluZSBBWEdNQUNfQ0ZHMl9JUEdFWF9NQVNLCQkweDAwMDAwMDFGIC8qIElQRyBleHRlbnNpb24gKi8KIAotLy8gQS1YR01BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDMKLSNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RST1AJCTB4RkZGRjAwMDAJCS8vIFJlY2VpdmUgZnJhbWUgZHJvcCBmaWx0ZXIKLSNkZWZpbmUgQVhHTUFDX0NGRzNfUkNWX0RPTlRfQ0FSRQkweDAwMDBGRkZGCQkvLyBSZWNlaXZlIGZyYW1lIGRvbid0IGNhcmUgZmlsdGVyCisvKiBBLVhHTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMyAqLworLyogUmVjZWl2ZSBmcmFtZSBkcm9wIGZpbHRlciAqLworI2RlZmluZSBBWEdNQUNfQ0ZHM19SQ1ZfRFJPUAkJMHhGRkZGMDAwMAorLyogUmVjZWl2ZSBmcmFtZSBkb24ndCBjYXJlIGZpbHRlciAqLworI2RlZmluZSBBWEdNQUNfQ0ZHM19SQ1ZfRE9OVF9DQVJFCTB4MDAwMEZGRkYKIAotLy8gQS1YR01BQyBTdGF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLSBPY3RldHMgMS00Ci0jZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfT05FCQkweEZGMDAwMDAwCQkvLyBGaXJzdCBvY3RldAotI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX1RXTwkJMHgwMEZGMDAwMAkJLy8gU2Vjb25kIG9jdGV0Ci0jZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfVEhSRUUJMHgwMDAwRkYwMAkJLy8gVGhpcmQgb2N0ZXQKLSNkZWZpbmUgQVhHTUFDX1NBUkxPV19PQ1RFVF9GT1VSCTB4MDAwMDAwRkYJCS8vIEZvdXJ0aCBvY3RldAorLyogQS1YR01BQyBTdGF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLSBPY3RldHMgMS00ICovCisjZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfT05FCQkweEZGMDAwMDAwCS8qIEZpcnN0IG9jdGV0ICovCisjZGVmaW5lIEFYR01BQ19TQVJMT1dfT0NURVRfVFdPCQkweDAwRkYwMDAwCS8qIFNlY29uZCBvY3RldCAqLworI2RlZmluZSBBWEdNQUNfU0FSTE9XX09DVEVUX1RIUkVFCTB4MDAwMEZGMDAJLyogVGhpcmQgb2N0ZXQgKi8KKyNkZWZpbmUgQVhHTUFDX1NBUkxPV19PQ1RFVF9GT1VSCTB4MDAwMDAwRkYJLyogRm91cnRoIG9jdGV0ICovCiAKLS8vIEEtWEdNQUMgU3RhdGlvbiBBZGRyZXNzIFJlZ2lzdGVyIC0gT2N0ZXRzIDUtNgotI2RlZmluZSBBWEdNQUNfU0FSSElHSF9PQ1RFVF9GSVZFCTB4RkYwMDAwMDAJCS8vIEZpZnRoIG9jdGV0Ci0jZGVmaW5lIEFYR01BQ19TQVJISUdIX09DVEVUX1NJWAkweDAwRkYwMDAwCQkvLyBTaXh0aCBvY3RldAorLyogQS1YR01BQyBTdGF0aW9uIEFkZHJlc3MgUmVnaXN0ZXIgLSBPY3RldHMgNS02ICovCisjZGVmaW5lIEFYR01BQ19TQVJISUdIX09DVEVUX0ZJVkUJMHhGRjAwMDAwMAkvKiBGaWZ0aCBvY3RldCAqLworI2RlZmluZSBBWEdNQUNfU0FSSElHSF9PQ1RFVF9TSVgJMHgwMEZGMDAwMAkvKiBTaXh0aCBvY3RldCAqLwogCi0vLyBBLVhHTUFDIE1heGltdW0gZnJhbWUgbGVuZ3RoIHJlZ2lzdGVyCi0jZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9YTVQJCTB4M0ZGRjAwMDAJCS8vIE1heGltdW0gdHJhbnNtaXQgZnJhbWUgbGVuZ3RoCisvKiBBLVhHTUFDIE1heGltdW0gZnJhbWUgbGVuZ3RoIHJlZ2lzdGVyICovCisvKiBNYXhpbXVtIHRyYW5zbWl0IGZyYW1lIGxlbmd0aCAqLworI2RlZmluZSBBWEdNQUNfTUFYRlJBTUVfWE1UCQkweDNGRkYwMDAwCiAjZGVmaW5lIEFYR01BQ19NQVhGUkFNRV9YTVRfU0hJRlQJMTYKLSNkZWZpbmUgQVhHTUFDX01BWEZSQU1FX1JDVgkJMHgwMDAwRkZGRgkJLy8gTWF4aW11bSByZWNlaXZlIGZyYW1lIGxlbmd0aAotLy8gVGhpcyByZWdpc3RlciBkb2Vzbid0IG5lZWQgdG8gYmUgd3JpdHRlbiBmb3Igc3RhbmRhcmQgTVRVLgotLy8gRm9yIGp1bWJvLCBJJ2xsIGp1c3Qgc3RhdGljYWxseSBkZWZpbmUgdGhlIHZhbHVlIGhlcmUuICBUaGlzCi0vLyB2YWx1ZSBzZXRzIHRoZSByZWNlaXZlIGJ5dGUgY291bnQgdG8gOTAzNiAoMHgyMzRDKSBhbmQgdGhlCi0vLyB0cmFuc21pdCBXT1JEIGNvdW50IHRvIDIyNTkgKDB4OEQzKS4gIFRoZXNlIHZhbHVlcyBpbmNsdWRlIDIyCi0vLyBieXRlcyBvZiBwYWRkaW5nIGJleW9uZCB0aGUganVtYm8gTVRVIG9mIDkwMTQKKy8qIE1heGltdW0gcmVjZWl2ZSBmcmFtZSBsZW5ndGggKi8KKyNkZWZpbmUgQVhHTUFDX01BWEZSQU1FX1JDVgkJMHgwMDAwRkZGRgorLyoKKyAqIFRoaXMgcmVnaXN0ZXIgZG9lc24ndCBuZWVkIHRvIGJlIHdyaXR0ZW4gZm9yIHN0YW5kYXJkIE1UVS4KKyAqIEZvciBqdW1ibywgSSdsbCBqdXN0IHN0YXRpY2FsbHkgZGVmaW5lIHRoZSB2YWx1ZSBoZXJlLiAgVGhpcworICogdmFsdWUgc2V0cyB0aGUgcmVjZWl2ZSBieXRlIGNvdW50IHRvIDkwMzYgKDB4MjM0QykgYW5kIHRoZQorICogdHJhbnNtaXQgV09SRCBjb3VudCB0byAyMjU5ICgweDhEMykuICBUaGVzZSB2YWx1ZXMgaW5jbHVkZSAyMgorICogYnl0ZXMgb2YgcGFkZGluZyBiZXlvbmQgdGhlIGp1bWJvIE1UVSBvZiA5MDE0CisgKi8KICNkZWZpbmUgQVhHTUFDX01BWEZSQU1FX0pVTUJPCQkweDA4RDMyMzRDCiAKLS8vIEEtWEdNQUMgUmV2aXNpb24gbGV2ZWwKLSNkZWZpbmUgQVhHTUFDX1JFVklTSU9OX01BU0sJCTB4MDAwMEZGRkYJCS8vIFJldmlzaW9uIGxldmVsCisvKiBBLVhHTUFDIFJldmlzaW9uIGxldmVsICovCisjZGVmaW5lIEFYR01BQ19SRVZJU0lPTl9NQVNLCQkweDAwMDBGRkZGCS8qIFJldmlzaW9uIGxldmVsICovCiAKLS8vIEEtWEdNQUMgQU1JSU0gQ29tbWFuZCBSZWdpc3RlcgotI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX1NUQVJUCQkweDAwMDAwMDA4CQkvLyBDb21tYW5kIHN0YXJ0Ci0jZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTUFTSwkJMHgwMDAwMDAwNwkJLy8gQ29tbWFuZAotI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX0xFR0FDWV9XUklURQkJMQkJLy8gMTAvMTAwLzEwMDAgTWJwcyBQaHkgV3JpdGUKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9MRUdBQ1lfUkVBRAkJMgkJLy8gMTAvMTAwLzEwMDAgTWJwcyBQaHkgUmVhZAotI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01PTklUT1JfU0lOR0xFCQkzCQkvLyBNb25pdG9yIHNpbmdsZSBQSFkKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9NT05JVE9SX01VTFRJUExFCTQJCS8vIE1vbml0b3IgbXVsdGlwbGUgY29udGlndW91cyBQSFlzCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfMTBHX09QRVJBVElPTgkJNQkJLy8gUHJlc2VudCBBTUlJTSBGaWVsZCBSZWcKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9DTEVBUl9MSU5LX0ZBSUwJNgkJLy8gQ2xlYXIgTGluayBGYWlsIEJpdCBpbiBNSUlNCisvKiBBLVhHTUFDIEFNSUlNIENvbW1hbmQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9TVEFSVAkJMHgwMDAwMDAwOAkvKiBDb21tYW5kIHN0YXJ0ICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTUFTSwkJMHgwMDAwMDAwNwkvKiBDb21tYW5kICovCisvKiAxMC8xMDAvMTAwMCBNYnBzIFBoeSBXcml0ZSAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX0xFR0FDWV9XUklURQkJMQorLyogMTAvMTAwLzEwMDAgTWJwcyBQaHkgUmVhZCAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX0xFR0FDWV9SRUFECQkyCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DTURfTU9OSVRPUl9TSU5HTEUJCTMJLyogTW9uaXRvciBzaW5nbGUgUEhZICovCisvKiBNb25pdG9yIG11bHRpcGxlIGNvbnRpZ3VvdXMgUEhZcyAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fQ01EX01PTklUT1JfTVVMVElQTEUJNAorLyogUHJlc2VudCBBTUlJTSBGaWVsZCBSZWcgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF8xMEdfT1BFUkFUSU9OCQk1CisvKiBDbGVhciBMaW5rIEZhaWwgQml0IGluIE1JSU0gKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NNRF9DTEVBUl9MSU5LX0ZBSUwJNgogCi0vLyBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9TVAkJMHhDMDAwMDAwMAkJLy8gMi1iaXQgU1QgZmllbGQKKy8qIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX1NUCQkweEMwMDAwMDAwCS8qIDItYml0IFNUIGZpZWxkICovCiAjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9TVF9TSElGVAkJMzAKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX09QCQkweDMwMDAwMDAwCQkvLyAyLWJpdCBPUCBmaWVsZAorI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfT1AJCTB4MzAwMDAwMDAJLyogMi1iaXQgT1AgZmllbGQgKi8KICNkZWZpbmUgQVhHTUFDX0FNSUlNX0ZJRUxEX09QX1NISUZUCQkyOAotI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9BRERSCTB4MEY4MDAwMDAJCS8vIFBvcnQgYWRkcmVzcyBmaWVsZCAoaHN0cGh5YWR4IGluIHNwZWMpCisvKiBQb3J0IGFkZHJlc3MgZmllbGQgKGhzdHBoeWFkeCBpbiBzcGVjKSAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9BRERSIAkweDBGODAwMDAwCiAjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9QT1JUX1NISUZUCQkyMwotI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREVWX0FERFIJMHgwMDdDMDAwMAkJLy8gRGV2aWNlIGFkZHJlc3MgZmllbGQgKGhzdHJlZ2FkeCBpbiBzcGVjKQorLyogRGV2aWNlIGFkZHJlc3MgZmllbGQgKGhzdHJlZ2FkeCBpbiBzcGVjKSAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREVWX0FERFIJMHgwMDdDMDAwMAogI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfREVWX1NISUZUCQkxOAotI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfVEEJCTB4MDAwMzAwMDAJCS8vIDItYml0IFRBIGZpZWxkCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9UQQkJMHgwMDAzMDAwMAkvKiAyLWJpdCBUQSBmaWVsZCAqLwogI2RlZmluZSBBWEdNQUNfQU1JSU1fRklFTERfVEFfU0hJRlQJCTE2Ci0jZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9EQVRBCQkweDAwMDBGRkZGCQkvLyBEYXRhIGZpZWxkCisjZGVmaW5lIEFYR01BQ19BTUlJTV9GSUVMRF9EQVRBCQkweDAwMDBGRkZGCS8qIERhdGEgZmllbGQgKi8KIAotLy8gVmFsdWVzIGZvciB0aGUgQVhHTUFDX0FNSUlNX0ZJRUxEX09QIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyCi0jZGVmaW5lCU1JSU1fT1BfQUREUgkJCQkwCQkvLyBNSUlNIEFkZHJlc3Mgc2V0IG9wZXJhdGlvbgotI2RlZmluZQlNSUlNX09QX1dSSVRFCQkJCTEJCS8vIE1JSU0gV3JpdGUgcmVnaXN0ZXIgb3BlcmF0aW9uCi0jZGVmaW5lCU1JSU1fT1BfUkVBRAkJCQkyCQkvLyBNSUlNIFJlYWQgcmVnaXN0ZXIgb3BlcmF0aW9uCisvKiBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfT1AgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0gRmllbGQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTUlJTV9PUF9BRERSCQkwCS8qIE1JSU0gQWRkcmVzcyBzZXQgb3BlcmF0aW9uICovCisjZGVmaW5lCU1JSU1fT1BfV1JJVEUJCTEJLyogTUlJTSBXcml0ZSByZWdpc3RlciBvcGVyYXRpb24gKi8KKyNkZWZpbmUJTUlJTV9PUF9SRUFECQkyCS8qIE1JSU0gUmVhZCByZWdpc3RlciBvcGVyYXRpb24gKi8KICNkZWZpbmUJTUlJTV9PUF9BRERSX1NISUZUCShNSUlNX09QX0FERFIgPDwgQVhHTUFDX0FNSUlNX0ZJRUxEX09QX1NISUZUKQogCi0vLyBWYWx1ZXMgZm9yIHRoZSBBWEdNQUNfQU1JSU1fRklFTERfUE9SVF9BRERSIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyCi0jZGVmaW5lCU1JSU1fUE9SVF9OVU0JCQkJMQkJLy8gQWxsIFNhaGFyYSBNSUlNIG1vZHVsZXMgdXNlIHBvcnQgMQorLyoKKyAqIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9QT1JUX0FERFIgZmllbGQgaW4gdGhlIEEtWEdNQUMgQU1JSU0KKyAqIEZpZWxkIFJlZ2lzdGVyCisgKi8KKyNkZWZpbmUJTUlJTV9QT1JUX05VTQkJMQkvKiBBbGwgU2FoYXJhIE1JSU0gbW9kdWxlcyB1c2UgcG9ydCAxICovCiAKLS8vIFZhbHVlcyBmb3IgdGhlIEFYR01BQ19BTUlJTV9GSUVMRF9ERVZfQUREUiBmaWVsZCBpbiB0aGUgQS1YR01BQyBBTUlJTSBGaWVsZCBSZWdpc3RlcgotI2RlZmluZQlNSUlNX0RFVl9QSFlfUE1BCQkJMQkJLy8gUEhZIFBNQS9QTUQgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlcgotI2RlZmluZQlNSUlNX0RFVl9QSFlfUENTCQkJMwkJLy8gUEhZIFBDUyBtb2R1bGUgTUlJTSBkZXZpY2UgbnVtYmVyCi0jZGVmaW5lCU1JSU1fREVWX1BIWV9YUwkJCQk0CQkvLyBQSFkgWFMgbW9kdWxlIE1JSU0gZGV2aWNlIG51bWJlcgotI2RlZmluZQlNSUlNX0RFVl9YR1hTCQkJCTUJCS8vIFhHWFMgTUlJTSBkZXZpY2UgbnVtYmVyCisvKgorICogVmFsdWVzIGZvciB0aGUgQVhHTUFDX0FNSUlNX0ZJRUxEX0RFVl9BRERSIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNCisgKiBGaWVsZCBSZWdpc3RlcgorICovCisvKiBQSFkgUE1BL1BNRCBtb2R1bGUgTUlJTSBkZXZpY2UgbnVtYmVyICovCisjZGVmaW5lCU1JSU1fREVWX1BIWV9QTUEJMQorLyogUEhZIFBDUyBtb2R1bGUgTUlJTSBkZXZpY2UgbnVtYmVyICovCisjZGVmaW5lCU1JSU1fREVWX1BIWV9QQ1MJMworLyogUEhZIFhTIG1vZHVsZSBNSUlNIGRldmljZSBudW1iZXIgKi8KKyNkZWZpbmUJTUlJTV9ERVZfUEhZX1hTCQk0CisjZGVmaW5lCU1JSU1fREVWX1hHWFMJCTUJLyogWEdYUyBNSUlNIGRldmljZSBudW1iZXIgKi8KIAotLy8gVmFsdWVzIGZvciB0aGUgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNIEZpZWxkIFJlZ2lzdGVyCi0jZGVmaW5lCU1JSU1fVEFfMTBHQgkJCQkyCQkvLyBzZXQgdG8gMiBmb3IgMTAgR0Igb3BlcmF0aW9uCisvKgorICogVmFsdWVzIGZvciB0aGUgQVhHTUFDX0FNSUlNX0ZJRUxEX1RBIGZpZWxkIGluIHRoZSBBLVhHTUFDIEFNSUlNIEZpZWxkCisgKiBSZWdpc3RlcgorICovCisjZGVmaW5lCU1JSU1fVEFfMTBHQgkJMgkvKiBzZXQgdG8gMiBmb3IgMTAgR0Igb3BlcmF0aW9uICovCiAKLS8vIEEtWEdNQUMgQU1JSU0gQ29uZmlndXJhdGlvbiBSZWdpc3RlcgotI2RlZmluZSBBWEdNQUNfQU1JSU1fQ0ZHX05PUFJFQU0JMHgwMDAwMDA4MAkJLy8gQnlwYXNzIHByZWFtYmxlIG9mIG1uZ210IGZyYW1lCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9DRkdfSEFMRl9DTE9DSwkweDAwMDAwMDdGCQkvLyBoYWxmLWNsb2NrIGR1cmF0aW9uIG9mIE1EQyBvdXRwdXQKKy8qIEEtWEdNQUMgQU1JSU0gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworLyogQnlwYXNzIHByZWFtYmxlIG9mIG1uZ210IGZyYW1lICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9DRkdfTk9QUkVBTQkweDAwMDAwMDgwCisvKiBoYWxmLWNsb2NrIGR1cmF0aW9uIG9mIE1EQyBvdXRwdXQgKi8KKyNkZWZpbmUgQVhHTUFDX0FNSUlNX0NGR19IQUxGX0NMT0NLCTB4MDAwMDAwN0YKIAotLy8gQS1YR01BQyBBTUlJTSBJbmRpY2F0b3IgUmVnaXN0ZXIKLSNkZWZpbmUgQVhHTUFDX0FNSUlNX0lORENfTElOSwkJMHgwMDAwMDAxMAkJLy8gTGluayBzdGF0dXMgZnJvbSBsZWdhY3kgUEhZIG9yIE1NRAotI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19NUEhZCQkweDAwMDAwMDA4CQkvLyBNdWx0aXBsZSBwaHkgb3BlcmF0aW9uIGluIHByb2dyZXNzCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX1NQSFkJCTB4MDAwMDAwMDQJCS8vIFNpbmdsZSBwaHkgb3BlcmF0aW9uIGluIHByb2dyZXNzCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX01PTgkJMHgwMDAwMDAwMgkJLy8gU2luZ2xlIG9yIG11bHRpcGxlIG1vbml0b3IgY21kCi0jZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kJCTB4MDAwMDAwMDEJCS8vIFNldCB1bnRpbCBjbWQgb3BlcmF0aW9uIGNvbXBsZXRlCisvKiBBLVhHTUFDIEFNSUlNIEluZGljYXRvciBSZWdpc3RlciAqLworLyogTGluayBzdGF0dXMgZnJvbSBsZWdhY3kgUEhZIG9yIE1NRCAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19MSU5LCQkweDAwMDAwMDEwCisvKiBNdWx0aXBsZSBwaHkgb3BlcmF0aW9uIGluIHByb2dyZXNzICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX01QSFkJCTB4MDAwMDAwMDgKKy8qIFNpbmdsZSBwaHkgb3BlcmF0aW9uIGluIHByb2dyZXNzICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX1NQSFkJCTB4MDAwMDAwMDQKKy8qIFNpbmdsZSBvciBtdWx0aXBsZSBtb25pdG9yIGNtZCAqLworI2RlZmluZSBBWEdNQUNfQU1JSU1fSU5EQ19NT04JCTB4MDAwMDAwMDIKKy8qIFNldCB1bnRpbCBjbWQgb3BlcmF0aW9uIGNvbXBsZXRlICovCisjZGVmaW5lIEFYR01BQ19BTUlJTV9JTkRDX0JVU1kJCTB4MDAwMDAwMDEKIAotLy8gTGluayBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXIKLSNkZWZpbmUJTFNfUEhZX0NMUl9SRVNFVAkJMHg4MDAwMDAwMAkJLy8gQ2xlYXIgcmVzZXQgc2lnbmFsIHRvIFBIWQotI2RlZmluZQlMU19TRVJERVNfUE9XRVJfRE9XTgkJMHg0MDAwMDAwMAkJLy8gUG93ZXIgZG93biB0aGUgU2FoYXJhIFNlcmRlcwotI2RlZmluZQlMU19YR1hTX0VOQUJMRQkJCTB4MjAwMDAwMDAJCS8vIEVuYWJsZSB0aGUgWEFVSSBYR1hTIGxvZ2ljCi0jZGVmaW5lCUxTX1hHWFNfQ1RMCQkJMHgxMDAwMDAwMAkJLy8gSG9sZCBYQVVJIFhHWFMgbG9naWMgcmVzZXQgdW50aWwgU2VyZGVzIGlzIHVwCi0jZGVmaW5lCUxTX1NFUkRFU19ET1dOCQkJMHgwODAwMDAwMAkJLy8gV2hlbiAwLCBYQVVJIFNlcmRlcyBpcyB1cCBhbmQgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUKLSNkZWZpbmUJTFNfVFJBQ0VfRE9XTgkJCTB4MDQwMDAwMDAJCS8vIFdoZW4gMCwgVHJhY2UgU2VyZGVzIGlzIHVwIGFuZCBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZQotI2RlZmluZQlMU19QSFlfQ0xLXzI1TUhaCQkweDAyMDAwMDAwCQkvLyBTZXQgUEhZIGNsb2NrIHRvIDI1IE1IeiAoZWxzZSAxNTYuMTI1IE1IeikKLSNkZWZpbmUJTFNfUEhZX0NMS19FTgkJCTB4MDEwMDAwMDAJCS8vIEVuYWJsZSBjbG9jayB0byBQSFkKLSNkZWZpbmUJTFNfWEFVSV9MSU5LX1VQCQkJMHgwMDAwMDAxMAkJLy8gWEFVSSBsaW5rIGlzIHVwCi0jZGVmaW5lCUxTX1hBVUlfTElOS19DSE5HCQkweDAwMDAwMDA4CQkvLyBYQVVJIGxpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkCi0jZGVmaW5lCUxTX0xJTktfQUxBUk0JCQkweDAwMDAwMDA0CQkvLyBMaW5rIGFsYXJtIHBpbgotI2RlZmluZQlMU19BVFROX0NUUkxfTUFTSwkJMHgwMDAwMDAwMwkJLy8gTWFzayBsaW5rIGF0dGVudGlvbiBjb250cm9sIGJpdHMKLSNkZWZpbmUJTFNfQVRUTl9BTEFSTQkJCTB4MDAwMDAwMDAJCS8vIDAwID0+IEF0dG4gb24gbGluayBhbGFybQotI2RlZmluZQlMU19BVFROX0FMQVJNX09SX1NUQVRfQ0hORwkweDAwMDAwMDAxCQkvLyAwMSA9PiBBdHRuIG9uIGxpbmsgYWxhcm0gb3Igc3RhdHVzIGNoYW5nZQotI2RlZmluZQlMU19BVFROX1NUQVRfQ0hORwkJMHgwMDAwMDAwMgkJLy8gMTAgPT4gQXR0biBvbiBsaW5rIHN0YXR1cyBjaGFuZ2UKLSNkZWZpbmUJTFNfQVRUTl9OT05FCQkJMHgwMDAwMDAwMwkJLy8gMTEgPT4gbm8gQXR0bgorLyogTGluayBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJTFNfUEhZX0NMUl9SRVNFVAkweDgwMDAwMDAwCS8qIENsZWFyIHJlc2V0IHNpZ25hbCB0byBQSFkgKi8KKyNkZWZpbmUJTFNfU0VSREVTX1BPV0VSX0RPV04JMHg0MDAwMDAwMAkvKiBQb3dlciBkb3duIHRoZSBTYWhhcmEgU2VyZGVzICovCisjZGVmaW5lCUxTX1hHWFNfRU5BQkxFCQkweDIwMDAwMDAwCS8qIEVuYWJsZSB0aGUgWEFVSSBYR1hTIGxvZ2ljICovCisvKiBIb2xkIFhBVUkgWEdYUyBsb2dpYyByZXNldCB1bnRpbCBTZXJkZXMgaXMgdXAgKi8KKyNkZWZpbmUJTFNfWEdYU19DVEwJCTB4MTAwMDAwMDAKKy8qIFdoZW4gMCwgWEFVSSBTZXJkZXMgaXMgdXAgYW5kIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlICovCisjZGVmaW5lCUxTX1NFUkRFU19ET1dOCQkweDA4MDAwMDAwCisvKiBXaGVuIDAsIFRyYWNlIFNlcmRlcyBpcyB1cCBhbmQgaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUgKi8KKyNkZWZpbmUJTFNfVFJBQ0VfRE9XTgkJMHgwNDAwMDAwMAorLyogU2V0IFBIWSBjbG9jayB0byAyNSBNSHogKGVsc2UgMTU2LjEyNSBNSHopICovCisjZGVmaW5lCUxTX1BIWV9DTEtfMjVNSFoJMHgwMjAwMDAwMAorI2RlZmluZQlMU19QSFlfQ0xLX0VOCQkweDAxMDAwMDAwCS8qIEVuYWJsZSBjbG9jayB0byBQSFkgKi8KKyNkZWZpbmUJTFNfWEFVSV9MSU5LX1VQCQkweDAwMDAwMDEwCS8qIFhBVUkgbGluayBpcyB1cCAqLworLyogWEFVSSBsaW5rIHN0YXR1cyBoYXMgY2hhbmdlZCAqLworI2RlZmluZQlMU19YQVVJX0xJTktfQ0hORwkweDAwMDAwMDA4CisjZGVmaW5lCUxTX0xJTktfQUxBUk0JCTB4MDAwMDAwMDQJLyogTGluayBhbGFybSBwaW4gKi8KKy8qIE1hc2sgbGluayBhdHRlbnRpb24gY29udHJvbCBiaXRzICovCisjZGVmaW5lCUxTX0FUVE5fQ1RSTF9NQVNLCTB4MDAwMDAwMDMKKyNkZWZpbmUJTFNfQVRUTl9BTEFSTQkJMHgwMDAwMDAwMAkvKiAwMCA9PiBBdHRuIG9uIGxpbmsgYWxhcm0gKi8KKy8qIDAxID0+IEF0dG4gb24gbGluayBhbGFybSBvciBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lCUxTX0FUVE5fQUxBUk1fT1JfU1RBVF9DSE5HCTB4MDAwMDAwMDEKKy8qIDEwID0+IEF0dG4gb24gbGluayBzdGF0dXMgY2hhbmdlICovCisjZGVmaW5lCUxTX0FUVE5fU1RBVF9DSE5HCTB4MDAwMDAwMDIKKyNkZWZpbmUJTFNfQVRUTl9OT05FCQkweDAwMDAwMDAzCS8qIDExID0+IG5vIEF0dG4gKi8KIAotLy8gTGluayBBZGRyZXNzIEhpZ2ggUmVnaXN0ZXJzCi0jZGVmaW5lCUxJTktfQUREUl9FTkFCTEUJCTB4ODAwMDAwMDAJCS8vIEVuYWJsZSB0aGlzIGxpbmsgYWRkcmVzcworLyogTGluayBBZGRyZXNzIEhpZ2ggUmVnaXN0ZXJzICovCisjZGVmaW5lCUxJTktfQUREUl9FTkFCTEUJMHg4MDAwMDAwMAkvKiBFbmFibGUgdGhpcyBsaW5rIGFkZHJlc3MgKi8KIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKgogICogWEdYUyBYQVVJIFhHTUlJIEV4dGVuZGVyIHJlZ2lzdGVycwogICoKICAqIEZ1bGwgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBteGd4cy5wZGYKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLyBYR1hTIFJlZ2lzdGVyIE1hcAotI2RlZmluZSBYR1hTX0FERFJFU1NfQ09OVFJPTDEJCTB4MDAwMAkJCS8vIFhTIENvbnRyb2wgMQotI2RlZmluZSBYR1hTX0FERFJFU1NfU1RBVFVTMQkJMHgwMDAxCQkJLy8gWFMgU3RhdHVzIDEKLSNkZWZpbmUgWEdYU19BRERSRVNTX0RFVklEX0xPVwkJMHgwMDAyCQkJLy8gWFMgRGV2aWNlIElEIChsb3cpCi0jZGVmaW5lIFhHWFNfQUREUkVTU19ERVZJRF9ISUdICQkweDAwMDMJCQkvLyBYUyBEZXZpY2UgSUQgKGhpZ2gpCi0jZGVmaW5lIFhHWFNfQUREUkVTU19TUEVFRAkJMHgwMDA0CQkJLy8gWFMgU3BlZWQgYWJpbGl0eQotI2RlZmluZSBYR1hTX0FERFJFU1NfREVWX0xPVwkJMHgwMDA1CQkJLy8gWFMgRGV2aWNlcyBpbiBwYWNrYWdlCi0jZGVmaW5lIFhHWFNfQUREUkVTU19ERVZfSElHSAkJMHgwMDA2CQkJLy8gWFMgRGV2aWNlcyBpbiBwYWNrYWdlCi0jZGVmaW5lIFhHWFNfQUREUkVTU19TVEFUVVMyCQkweDAwMDgJCQkvLyBYUyBTdGF0dXMgMgotI2RlZmluZSBYR1hTX0FERFJFU1NfUEtHSURfbE9XCQkweDAwMEUJCQkvLyBYUyBQYWNrYWdlIElkZW50aWZpZXIKLSNkZWZpbmUgWEdYU19BRERSRVNTX1BLR0lEX0hJR0gJCTB4MDAwRgkJCS8vIFhTIFBhY2thZ2UgSWRlbnRpZmllcgotI2RlZmluZSBYR1hTX0FERFJFU1NfTEFORV9TVEFUVVMJMHgwMDE4CQkJLy8gMTBHIFhHWFMgTGFuZSBTdGF0dXMKLSNkZWZpbmUgWEdYU19BRERSRVNTX1RFU1RfQ1RSTAkJMHgwMDE5CQkJLy8gMTBHIFhHWFMgVGVzdCBDb250cm9sCi0jZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9MTzEJCTB4ODAwMAkJCS8vIFZlbmRvci1TcGVjaWZpYyBSZXNldCBMbyAxCi0jZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9MTzIJCTB4ODAwMQkJCS8vIFZlbmRvci1TcGVjaWZpYyBSZXNldCBMbyAyCi0jZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9ISTEJCTB4ODAwMgkJCS8vIFZlbmRvci1TcGVjaWZpYyBSZXNldCBIaSAxCi0jZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9ISTIJCTB4ODAwMwkJCS8vIFZlbmRvci1TcGVjaWZpYyBSZXNldCBIaSAyCisgKi8KKy8qIFhHWFMgUmVnaXN0ZXIgTWFwICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19DT05UUk9MMQkweDAwMDAJCS8qIFhTIENvbnRyb2wgMSAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfU1RBVFVTMQkweDAwMDEJCS8qIFhTIFN0YXR1cyAxICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19ERVZJRF9MT1cJMHgwMDAyCQkvKiBYUyBEZXZpY2UgSUQgKGxvdykgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX0RFVklEX0hJR0gJMHgwMDAzCQkvKiBYUyBEZXZpY2UgSUQgKGhpZ2gpICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19TUEVFRAkweDAwMDQJCS8qIFhTIFNwZWVkIGFiaWxpdHkgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX0RFVl9MT1cJMHgwMDA1CQkvKiBYUyBEZXZpY2VzIGluIHBhY2thZ2UgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX0RFVl9ISUdICTB4MDAwNgkJLyogWFMgRGV2aWNlcyBpbiBwYWNrYWdlICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19TVEFUVVMyCTB4MDAwOAkJLyogWFMgU3RhdHVzIDIgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX1BLR0lEX2xPVwkweDAwMEUJCS8qIFhTIFBhY2thZ2UgSWRlbnRpZmllciAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfUEtHSURfSElHSAkweDAwMEYJCS8qIFhTIFBhY2thZ2UgSWRlbnRpZmllciAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfTEFORV9TVEFUVVMJMHgwMDE4CS8qIDEwRyBYR1hTIExhbmUgU3RhdHVzICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19URVNUX0NUUkwJMHgwMDE5CQkvKiAxMEcgWEdYUyBUZXN0IENvbnRyb2wgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX1JFU0VUX0xPMQkweDgwMDAJCS8qIFZlbmRvci1TcGVjaWZpYyBSZXNldCBMbyAxICovCisjZGVmaW5lIFhHWFNfQUREUkVTU19SRVNFVF9MTzIJMHg4MDAxCQkvKiBWZW5kb3ItU3BlY2lmaWMgUmVzZXQgTG8gMiAqLworI2RlZmluZSBYR1hTX0FERFJFU1NfUkVTRVRfSEkxCTB4ODAwMgkJLyogVmVuZG9yLVNwZWNpZmljIFJlc2V0IEhpIDEgKi8KKyNkZWZpbmUgWEdYU19BRERSRVNTX1JFU0VUX0hJMgkweDgwMDMJCS8qIFZlbmRvci1TcGVjaWZpYyBSZXNldCBIaSAyICovCiAKLS8vIFhTIENvbnRyb2wgMSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19DT05UUk9MMV9SRVNFVAkJMHg4MDAwCQkJLy8gUmVzZXQgLSBzZWxmIGNsZWFyaW5nCi0jZGVmaW5lIFhHWFNfQ09OVFJPTDFfTE9PUEJBQ0sJCTB4NDAwMAkJCS8vIEVuYWJsZSBsb29wYmFjawotI2RlZmluZSBYR1hTX0NPTlRST0wxX1NQRUVEMQkJMHgyMDAwCQkJLy8gMCA9IHVuc3BlY2lmaWVkLCAxID0gMTBHYisKLSNkZWZpbmUgWEdYU19DT05UUk9MMV9MT1dQT1dFUgkJMHgwNDAwCQkJLy8gMSA9IExvdyBwb3dlciBtb2RlCi0jZGVmaW5lIFhHWFNfQ09OVFJPTDFfU1BFRUQyCQkweDAwNDAJCQkvLyBTYW1lIGFzIFNQRUVEMSAoPykKLSNkZWZpbmUgWEdYU19DT05UUk9MMV9TUEVFRAkJMHgwMDNDCQkJLy8gRXZlcnl0aGluZyByZXNlcnZlZCBleGNlcHQgemVybyAoPykKKy8qIFhTIENvbnRyb2wgMSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWEdYU19DT05UUk9MMV9SRVNFVAkweDgwMDAJCS8qIFJlc2V0IC0gc2VsZiBjbGVhcmluZyAqLworI2RlZmluZSBYR1hTX0NPTlRST0wxX0xPT1BCQUNLCTB4NDAwMAkJLyogRW5hYmxlIGxvb3BiYWNrICovCisjZGVmaW5lIFhHWFNfQ09OVFJPTDFfU1BFRUQxCTB4MjAwMAkJLyogMCA9IHVuc3BlY2lmaWVkLCAxID0gMTBHYisgKi8KKyNkZWZpbmUgWEdYU19DT05UUk9MMV9MT1dQT1dFUgkweDA0MDAJCS8qIDEgPSBMb3cgcG93ZXIgbW9kZSAqLworI2RlZmluZSBYR1hTX0NPTlRST0wxX1NQRUVEMgkweDAwNDAJCS8qIFNhbWUgYXMgU1BFRUQxICg/KSAqLworLyogRXZlcnl0aGluZyByZXNlcnZlZCBleGNlcHQgemVybyAoPykgKi8KKyNkZWZpbmUgWEdYU19DT05UUk9MMV9TUEVFRAkweDAwM0MKIAotLy8gWFMgU3RhdHVzIDEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lIFhHWFNfU1RBVFVTMV9GQVVMVAkJMHgwMDgwCQkJLy8gRmF1bHQgZGV0ZWN0ZWQKLSNkZWZpbmUgWEdYU19TVEFUVVMxX0xJTksJCTB4MDAwNAkJCS8vIDEgPSBMaW5rIHVwCi0jZGVmaW5lIFhHWFNfU1RBVFVTMV9MT1dQT1dFUgkJMHgwMDAyCQkJLy8gMSA9IExvdyBwb3dlciBzdXBwb3J0ZWQKKy8qIFhTIFN0YXR1cyAxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBYR1hTX1NUQVRVUzFfRkFVTFQJMHgwMDgwCQkvKiBGYXVsdCBkZXRlY3RlZCAqLworI2RlZmluZSBYR1hTX1NUQVRVUzFfTElOSwkweDAwMDQJCS8qIDEgPSBMaW5rIHVwICovCisjZGVmaW5lIFhHWFNfU1RBVFVTMV9MT1dQT1dFUgkweDAwMDIJCS8qIDEgPSBMb3cgcG93ZXIgc3VwcG9ydGVkICovCiAKLS8vIFhTIFNwZWVkIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZSBYR1hTX1NQRUVEXzEwRwkJCTB4MDAwMQkJCS8vIDEgPSAxMEcgY2FwYWJsZQorLyogWFMgU3BlZWQgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFhHWFNfU1BFRURfMTBHCQkweDAwMDEJCS8qIDEgPSAxMEcgY2FwYWJsZSAqLwogCi0vLyBYUyBEZXZpY2VzIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZSBYR1hTX0RFVklDRVNfRFRFCQkweDAwMjAJCQkvLyBEVEUgWFMgUHJlc2VudAotI2RlZmluZSBYR1hTX0RFVklDRVNfUEhZCQkweDAwMTAJCQkvLyBQSFkgWFMgUHJlc2VudAotI2RlZmluZSBYR1hTX0RFVklDRVNfUENTCQkweDAwMDgJCQkvLyBQQ1MgUHJlc2VudAotI2RlZmluZSBYR1hTX0RFVklDRVNfV0lTCQkweDAwMDQJCQkvLyBXSVMgUHJlc2VudAotI2RlZmluZSBYR1hTX0RFVklDRVNfUE1ECQkweDAwMDIJCQkvLyBQTUQvUE1BIFByZXNlbnQKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX0NMQVVTRTIyCQkweDAwMDEJCQkvLyBDbGF1c2UgMjIgcmVnaXN0ZXJzIHByZXNlbnQKKy8qIFhTIERldmljZXMgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFhHWFNfREVWSUNFU19EVEUJMHgwMDIwCQkvKiBEVEUgWFMgUHJlc2VudCAqLworI2RlZmluZSBYR1hTX0RFVklDRVNfUEhZCTB4MDAxMAkJLyogUEhZIFhTIFByZXNlbnQgKi8KKyNkZWZpbmUgWEdYU19ERVZJQ0VTX1BDUwkweDAwMDgJCS8qIFBDUyBQcmVzZW50ICovCisjZGVmaW5lIFhHWFNfREVWSUNFU19XSVMJMHgwMDA0CQkvKiBXSVMgUHJlc2VudCAqLworI2RlZmluZSBYR1hTX0RFVklDRVNfUE1ECTB4MDAwMgkJLyogUE1EL1BNQSBQcmVzZW50ICovCisjZGVmaW5lIFhHWFNfREVWSUNFU19DTEFVU0UyMgkweDAwMDEJCS8qIENsYXVzZSAyMiByZWdpc3RlcnMgcHJlc2VudCovCiAKLS8vIFhTIERldmljZXMgSGlnaCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19ERVZJQ0VTX1ZFTkRPUjIJCTB4ODAwMAkJCS8vIFZlbmRvciBzcGVjaWZpYyBkZXZpY2UgMgotI2RlZmluZSBYR1hTX0RFVklDRVNfVkVORE9SMQkJMHg0MDAwCQkJLy8gVmVuZG9yIHNwZWNpZmljIGRldmljZSAxCisvKiBYUyBEZXZpY2VzIEhpZ2ggcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIFhHWFNfREVWSUNFU19WRU5ET1IyCTB4ODAwMAkJLyogVmVuZG9yIHNwZWNpZmljIGRldmljZSAyICovCisjZGVmaW5lIFhHWFNfREVWSUNFU19WRU5ET1IxCTB4NDAwMAkJLyogVmVuZG9yIHNwZWNpZmljIGRldmljZSAxICovCiAKLS8vIFhTIFN0YXR1cyAyIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZSBYR1hTX1NUQVRVUzJfREVWX01BU0sJCTB4QzAwMAkJCS8vIERldmljZSBwcmVzZW50IG1hc2sKLSNkZWZpbmUgWEdYU19TVEFUVVMyX0RFVl9SRVNQT05ECTB4ODAwMAkJCS8vIERldmljZSByZXNwb25kaW5nCi0jZGVmaW5lIFhHWFNfU1RBVFVTMl9YTVRfRkFVTFQJCTB4MDgwMAkJCS8vIFRyYW5zbWl0IGZhdWx0Ci0jZGVmaW5lIFhHWFNfU1RBVFVTMl9SQ1ZfRkFVTFQJCTB4MDQwMAkJCS8vIFJlY2VpdmUgZmF1bHQKKy8qIFhTIFN0YXR1cyAyIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBYR1hTX1NUQVRVUzJfREVWX01BU0sJMHhDMDAwCQkvKiBEZXZpY2UgcHJlc2VudCBtYXNrICovCisjZGVmaW5lIFhHWFNfU1RBVFVTMl9ERVZfUkVTUE9ORAkweDgwMDAJLyogRGV2aWNlIHJlc3BvbmRpbmcgKi8KKyNkZWZpbmUgWEdYU19TVEFUVVMyX1hNVF9GQVVMVAkweDA4MDAJCS8qIFRyYW5zbWl0IGZhdWx0ICovCisjZGVmaW5lIFhHWFNfU1RBVFVTMl9SQ1ZfRkFVTFQJMHgwNDAwCQkvKiBSZWNlaXZlIGZhdWx0ICovCiAKLS8vIFhTIFBhY2thZ2UgSUQgSGlnaCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX09SRwkJMHhGQzAwCQkJLy8gT3JnYW5pemF0aW9uYWxseSBVbmlxdWUKLSNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX01GRwkJMHgwM0YwCQkJLy8gTWFudWZhY3R1cmVyIE1vZGVsCi0jZGVmaW5lIFhHWFNfUEtHSURfSElHSF9SRVYJCTB4MDAwRgkJCS8vIFJldmlzaW9uIE51bWJlcgorLyogWFMgUGFja2FnZSBJRCBIaWdoIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBYR1hTX1BLR0lEX0hJR0hfT1JHCTB4RkMwMAkJLyogT3JnYW5pemF0aW9uYWxseSBVbmlxdWUgKi8KKyNkZWZpbmUgWEdYU19QS0dJRF9ISUdIX01GRwkweDAzRjAJCS8qIE1hbnVmYWN0dXJlciBNb2RlbCAqLworI2RlZmluZSBYR1hTX1BLR0lEX0hJR0hfUkVWCTB4MDAwRgkJLyogUmV2aXNpb24gTnVtYmVyICovCiAKLS8vIFhTIExhbmUgU3RhdHVzIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZSBYR1hTX0xBTkVfUEhZCQkJMHgxMDAwCQkJLy8gUEhZL0RURSBsYW5lIGFsaWdubWVudCBzdGF0dXMKLSNkZWZpbmUgWEdYU19MQU5FX1BBVFRFUk4JCTB4MDgwMAkJCS8vIFBhdHRlcm4gdGVzdGluZyBhYmlsaXR5Ci0jZGVmaW5lIFhHWFNfTEFORV9MT09QQkFDSwkJMHgwNDAwCQkJLy8gUEhZIGxvb3BiYWNrIGFiaWxpdHkKLSNkZWZpbmUgWEdYU19MQU5FX1NZTkMzCQkJMHgwMDA4CQkJLy8gTGFuZSAzIHN5bmMKLSNkZWZpbmUgWEdYU19MQU5FX1NZTkMyCQkJMHgwMDA0CQkJLy8gTGFuZSAyIHN5bmMKLSNkZWZpbmUgWEdYU19MQU5FX1NZTkMxCQkJMHgwMDAyCQkJLy8gTGFuZSAxIHN5bmMKLSNkZWZpbmUgWEdYU19MQU5FX1NZTkMwCQkJMHgwMDAxCQkJLy8gTGFuZSAwIHN5bmMKKy8qIFhTIExhbmUgU3RhdHVzIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBYR1hTX0xBTkVfUEhZCQkweDEwMDAJLyogUEhZL0RURSBsYW5lIGFsaWdubWVudCBzdGF0dXMgKi8KKyNkZWZpbmUgWEdYU19MQU5FX1BBVFRFUk4JMHgwODAwCQkvKiBQYXR0ZXJuIHRlc3RpbmcgYWJpbGl0eSAqLworI2RlZmluZSBYR1hTX0xBTkVfTE9PUEJBQ0sJMHgwNDAwCQkvKiBQSFkgbG9vcGJhY2sgYWJpbGl0eSAqLworI2RlZmluZSBYR1hTX0xBTkVfU1lOQzMJCTB4MDAwOAkJLyogTGFuZSAzIHN5bmMgKi8KKyNkZWZpbmUgWEdYU19MQU5FX1NZTkMyCQkweDAwMDQJCS8qIExhbmUgMiBzeW5jICovCisjZGVmaW5lIFhHWFNfTEFORV9TWU5DMQkJMHgwMDAyCQkvKiBMYW5lIDEgc3luYyAqLworI2RlZmluZSBYR1hTX0xBTkVfU1lOQzAJCTB4MDAwMQkJLyogTGFuZSAwIHN5bmMgKi8KIAotLy8gWFMgVGVzdCBDb250cm9sIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9FTkFCTEUJMHgwMDA0CQkJLy8gVGVzdCBwYXR0ZXJuIGVuYWJsZWQKLSNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fTUFTSwkJMHgwMDAzCQkJLy8gVGVzdCBwYXR0ZXJucwotI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9SU1ZECQkweDAwMDMJCQkvLyBUZXN0IHBhdHRlcm4gLSByZXNlcnZlZAotI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9NSVgJCTB4MDAwMgkJCS8vIFRlc3QgcGF0dGVybiAtIG1peGVkCi0jZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX0xPVwkJMHgwMDAxCQkJLy8gVGVzdCBwYXR0ZXJuIC0gbG93Ci0jZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX0hJR0gJCTB4MDAwMQkJCS8vIFRlc3QgcGF0dGVybiAtIGhpZ2gKKy8qIFhTIFRlc3QgQ29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fRU5BQkxFCTB4MDAwNAkvKiBUZXN0IHBhdHRlcm4gZW5hYmxlZCAqLworI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9NQVNLCTB4MDAwMwkJLyogVGVzdCBwYXR0ZXJucyAqLworI2RlZmluZSBYR1hTX1RFU1RfUEFUVEVSTl9SU1ZECTB4MDAwMwkJLyogVGVzdCBwYXR0ZXJuIC0gcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fTUlYCTB4MDAwMgkJLyogVGVzdCBwYXR0ZXJuIC0gbWl4ZWQgKi8KKyNkZWZpbmUgWEdYU19URVNUX1BBVFRFUk5fTE9XCTB4MDAwMQkJLyogVGVzdCBwYXR0ZXJuIC0gbG93ICovCisjZGVmaW5lIFhHWFNfVEVTVF9QQVRURVJOX0hJR0gJMHgwMDAxCQkvKiBUZXN0IHBhdHRlcm4gLSBoaWdoICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8qCiAgKiBFeHRlcm5hbCBNRElPIEJ1cyBSZWdpc3RlcnMKICAqCiAgKiBGdWxsIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gUEhZL1hFTlBBSy9JRUVFIHNwZWNzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8gTEFTSSAoTGluayBBbGFybSBTdGF0dXMgSW50ZXJydXB0KSBSZWdpc3RlcnMgKGxvY2F0ZWQgaW4gTUlJTV9ERVZfUEhZX1BNQSBkZXZpY2UpCi0jZGVmaW5lIExBU0lfUlhfQUxBUk1fQ09OVFJPTAkJMHg5MDAwCQkJLy8gTEFTSSBSWF9BTEFSTSBDb250cm9sCi0jZGVmaW5lIExBU0lfVFhfQUxBUk1fQ09OVFJPTAkJMHg5MDAxCQkJLy8gTEFTSSBUWF9BTEFSTSBDb250cm9sCi0jZGVmaW5lIExBU0lfQ09OVFJPTAkJCTB4OTAwMgkJCS8vIExBU0kgQ29udHJvbAotI2RlZmluZSBMQVNJX1JYX0FMQVJNX1NUQVRVUwkJMHg5MDAzCQkJLy8gTEFTSSBSWF9BTEFSTSBTdGF0dXMKLSNkZWZpbmUgTEFTSV9UWF9BTEFSTV9TVEFUVVMJCTB4OTAwNAkJCS8vIExBU0kgVFhfQUxBUk0gU3RhdHVzCi0jZGVmaW5lIExBU0lfU1RBVFVTCQkJMHg5MDA1CQkJLy8gTEFTSSBTdGF0dXMKKyAqLworLyoKKyAqIExBU0kgKExpbmsgQWxhcm0gU3RhdHVzIEludGVycnVwdCkgUmVnaXN0ZXJzIChsb2NhdGVkIGluCisgKiBNSUlNX0RFVl9QSFlfUE1BIGRldmljZSkKKyAqLworI2RlZmluZSBMQVNJX1JYX0FMQVJNX0NPTlRST0wJMHg5MDAwCQkvKiBMQVNJIFJYX0FMQVJNIENvbnRyb2wgKi8KKyNkZWZpbmUgTEFTSV9UWF9BTEFSTV9DT05UUk9MCTB4OTAwMQkJLyogTEFTSSBUWF9BTEFSTSBDb250cm9sICovCisjZGVmaW5lIExBU0lfQ09OVFJPTAkJMHg5MDAyCQkvKiBMQVNJIENvbnRyb2wgKi8KKyNkZWZpbmUgTEFTSV9SWF9BTEFSTV9TVEFUVVMJMHg5MDAzCQkvKiBMQVNJIFJYX0FMQVJNIFN0YXR1cyAqLworI2RlZmluZSBMQVNJX1RYX0FMQVJNX1NUQVRVUwkweDkwMDQJCS8qIExBU0kgVFhfQUxBUk0gU3RhdHVzICovCisjZGVmaW5lIExBU0lfU1RBVFVTCQkweDkwMDUJCS8qIExBU0kgU3RhdHVzICovCiAKLS8vIExBU0lfQ09OVFJPTCBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUJTEFTSV9DVExfUlhfQUxBUk1fRU5BQkxFCTB4MDAwNAkJCS8vIEVuYWJsZSBSWF9BTEFSTSBpbnRlcnJ1cHRzCi0jZGVmaW5lCUxBU0lfQ1RMX1RYX0FMQVJNX0VOQUJMRQkweDAwMDIJCQkvLyBFbmFibGUgVFhfQUxBUk0gaW50ZXJydXB0cwotI2RlZmluZQlMQVNJX0NUTF9MU19BTEFSTV9FTkFCTEUJMHgwMDAxCQkJLy8gRW5hYmxlIExpbmsgU3RhdHVzIGludGVycnVwdHMKKy8qIExBU0lfQ09OVFJPTCBiaXQgZGVmaW5pdGlvbnMgKi8KKy8qIEVuYWJsZSBSWF9BTEFSTSBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUxBU0lfQ1RMX1JYX0FMQVJNX0VOQUJMRQkweDAwMDQKKy8qIEVuYWJsZSBUWF9BTEFSTSBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUxBU0lfQ1RMX1RYX0FMQVJNX0VOQUJMRQkweDAwMDIKKy8qIEVuYWJsZSBMaW5rIFN0YXR1cyBpbnRlcnJ1cHRzICovCisjZGVmaW5lCUxBU0lfQ1RMX0xTX0FMQVJNX0VOQUJMRQkweDAwMDEKIAotLy8gTEFTSV9TVEFUVVMgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lCUxBU0lfU1RBVFVTX1JYX0FMQVJNCQkweDAwMDQJCQkvLyBSWF9BTEFSTSBzdGF0dXMKLSNkZWZpbmUJTEFTSV9TVEFUVVNfVFhfQUxBUk0JCTB4MDAwMgkJCS8vIFRYX0FMQVJNIHN0YXR1cwotI2RlZmluZQlMQVNJX1NUQVRVU19MU19BTEFSTQkJMHgwMDAxCQkJLy8gTGluayBTdGF0dXMKKy8qIExBU0lfU1RBVFVTIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZQlMQVNJX1NUQVRVU19SWF9BTEFSTQkweDAwMDQJCS8qIFJYX0FMQVJNIHN0YXR1cyAqLworI2RlZmluZQlMQVNJX1NUQVRVU19UWF9BTEFSTQkweDAwMDIJCS8qIFRYX0FMQVJNIHN0YXR1cyAqLworI2RlZmluZQlMQVNJX1NUQVRVU19MU19BTEFSTQkweDAwMDEJCS8qIExpbmsgU3RhdHVzICovCiAKLS8vIFBIWSByZWdpc3RlcnMgLSBQTUEvUE1EIChkZXZpY2UgMSkKLSNkZWZpbmUJUEhZX1BNQV9DT05UUk9MMQkJMHgwMDAwCQkJLy8gUE1BL1BNRCBDb250cm9sIDEKLSNkZWZpbmUJUEhZX1BNQV9TVEFUVVMxCQkJMHgwMDAxCQkJLy8gUE1BL1BNRCBTdGF0dXMgMQotI2RlZmluZQlQSFlfUE1BX1JDVl9ERVQJCQkweDAwMEEJCQkvLyBQTUEvUE1EIFJlY2VpdmUgU2lnbmFsIERldGVjdAotCQkvLyBvdGhlciBQTUEvUE1EIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkCisvKiBQSFkgcmVnaXN0ZXJzIC0gUE1BL1BNRCAoZGV2aWNlIDEpICovCisjZGVmaW5lCVBIWV9QTUFfQ09OVFJPTDEJMHgwMDAwCQkvKiBQTUEvUE1EIENvbnRyb2wgMSAqLworI2RlZmluZQlQSFlfUE1BX1NUQVRVUzEJCTB4MDAwMQkJLyogUE1BL1BNRCBTdGF0dXMgMSAqLworI2RlZmluZQlQSFlfUE1BX1JDVl9ERVQJCTB4MDAwQQkvKiBQTUEvUE1EIFJlY2VpdmUgU2lnbmFsIERldGVjdCAqLworCQkvKiBvdGhlciBQTUEvUE1EIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkICovCiAKLS8vIFBIWSByZWdpc3RlcnMgLSBQQ1MgKGRldmljZSAzKQotI2RlZmluZQlQSFlfUENTX0NPTlRST0wxCQkweDAwMDAJCQkvLyBQQ1MgQ29udHJvbCAxCi0jZGVmaW5lCVBIWV9QQ1NfU1RBVFVTMQkJCTB4MDAwMQkJCS8vIFBDUyBTdGF0dXMgMQotI2RlZmluZQlQSFlfUENTXzEwR19TVEFUVVMxCQkweDAwMjAJCQkvLyBQQ1MgMTBHQkFTRS1SIFN0YXR1cyAxCi0JCS8vIG90aGVyIFBDUyByZWdpc3RlcnMgZXhpc3QgYW5kIGNhbiBiZSBkZWZpbmVkIGFzIG5lZWRlZAorLyogUEhZIHJlZ2lzdGVycyAtIFBDUyAoZGV2aWNlIDMpICovCisjZGVmaW5lCVBIWV9QQ1NfQ09OVFJPTDEJMHgwMDAwCQkvKiBQQ1MgQ29udHJvbCAxICovCisjZGVmaW5lCVBIWV9QQ1NfU1RBVFVTMQkJMHgwMDAxCQkvKiBQQ1MgU3RhdHVzIDEgKi8KKyNkZWZpbmUJUEhZX1BDU18xMEdfU1RBVFVTMQkweDAwMjAJCS8qIFBDUyAxMEdCQVNFLVIgU3RhdHVzIDEgKi8KKwkJLyogb3RoZXIgUENTIHJlZ2lzdGVycyBleGlzdCBhbmQgY2FuIGJlIGRlZmluZWQgYXMgbmVlZGVkICovCiAKLS8vIFBIWSByZWdpc3RlcnMgLSBYUyAoZGV2aWNlIDQpCi0jZGVmaW5lCVBIWV9YU19DT05UUk9MMQkJCTB4MDAwMAkJCS8vIFhTIENvbnRyb2wgMQotI2RlZmluZQlQSFlfWFNfU1RBVFVTMQkJCTB4MDAwMQkJCS8vIFhTIFN0YXR1cyAxCi0jZGVmaW5lCVBIWV9YU19MQU5FX1NUQVRVUwkJMHgwMDE4CQkJLy8gWFMgTGFuZSBTdGF0dXMKLQkJLy8gb3RoZXIgWFMgcmVnaXN0ZXJzIGV4aXN0IGFuZCBjYW4gYmUgZGVmaW5lZCBhcyBuZWVkZWQKKy8qIFBIWSByZWdpc3RlcnMgLSBYUyAoZGV2aWNlIDQpICovCisjZGVmaW5lCVBIWV9YU19DT05UUk9MMQkJMHgwMDAwCQkvKiBYUyBDb250cm9sIDEgKi8KKyNkZWZpbmUJUEhZX1hTX1NUQVRVUzEJCTB4MDAwMQkJLyogWFMgU3RhdHVzIDEgKi8KKyNkZWZpbmUJUEhZX1hTX0xBTkVfU1RBVFVTCTB4MDAxOAkJLyogWFMgTGFuZSBTdGF0dXMgKi8KKwkJLyogb3RoZXIgWFMgcmVnaXN0ZXJzIGV4aXN0IGFuZCBjYW4gYmUgZGVmaW5lZCBhcyBuZWVkZWQgKi8KIAotLy8gUEhZX1BNQV9DT05UUk9MMSByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUJUE1BX0NPTlRST0wxX1JFU0VUCQkweDgwMDAJCQkvLyBQTUEvUE1EIHJlc2V0CisvKiBQSFlfUE1BX0NPTlRST0wxIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZQlQTUFfQ09OVFJPTDFfUkVTRVQJMHg4MDAwCQkvKiBQTUEvUE1EIHJlc2V0ICovCiAKLS8vIFBIWV9QTUFfUkNWX0RFVCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKLSNkZWZpbmUJUE1BX1JDVl9ERVRFQ1QJCQkweDAwMDEJCQkvLyBQTUEvUE1EIHJlY2VpdmUgc2lnbmFsIGRldGVjdAorLyogUEhZX1BNQV9SQ1ZfREVUIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZQlQTUFfUkNWX0RFVEVDVAkJMHgwMDAxCS8qIFBNQS9QTUQgcmVjZWl2ZSBzaWduYWwgZGV0ZWN0ICovCiAKLS8vIFBIWV9QQ1NfMTBHX1NUQVRVUzEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCi0jZGVmaW5lCVBDU18xMEJfQkxPQ0tfTE9DSwkJMHgwMDAxCQkJLy8gUENTIDEwR0JBU0UtUiBsb2NrZWQgdG8gcmVjZWl2ZSBibG9ja3MKKy8qIFBIWV9QQ1NfMTBHX1NUQVRVUzEgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lCVBDU18xMEJfQkxPQ0tfTE9DSwkweDAwMDEJLyogUENTIDEwR0JBU0UtUiBsb2NrZWQgdG8gcmVjZWl2ZSBibG9ja3MgKi8KIAotLy8gUEhZX1hTX0xBTkVfU1RBVFVTIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZQlYU19MQU5FX0FMSUdOCQkJMHgxMDAwCQkJLy8gWFMgdHJhbnNtaXQgbGFuZXMgYWxpZ25lZAorLyogUEhZX1hTX0xBTkVfU1RBVFVTIHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZQlYU19MQU5FX0FMSUdOCQkweDEwMDAJCS8qIFhTIHRyYW5zbWl0IGxhbmVzIGFsaWduZWQgKi8KIAotLy8gUEhZIE1pY3JvY29kZSBkb3dubG9hZCBkYXRhIHN0cnVjdHVyZQotc3RydWN0IFBIWV9VQ09ERSB7CisjZGVmaW5lIFhDVlJfVkVORE9SX0xFTgkJMTYgIC8qIHhjdnIgdmVuZG9yIGxlbiAqLworI2RlZmluZSBYQ1ZSX01PREVMX0xFTgkJMTYgIC8qIHhjdnIgbW9kZWwgbGVuICovCisKKy8qIFBIWSBNaWNyb2NvZGUgZG93bmxvYWQgZGF0YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBwaHlfdWNvZGUgewogCXVzaG9ydAlBZGRyOwogCXVzaG9ydAlEYXRhOwogfTsKIAorLyogU2xvdyBCdXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvKiBNb2R1bGUgMCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgR1BJT19MX0lOCQkweDE1CQkvKiBHUElPIGlucHV0IChsb3cpICovCisjZGVmaW5lIEdQSU9fTF9PVVQJCTB4MTYJCS8qIEdQSU8gb3V0cHV0IChsb3cpICovCisjZGVmaW5lIEdQSU9fTF9ESVIJCTB4MTcJCS8qIEdQSU8gZGlyZWN0aW9uIChsb3cpICovCisjZGVmaW5lIEdQSU9fSF9JTgkJMHgxOQkJLyogR1BJTyBpbnB1dCAoaGlnaCkgKi8KKyNkZWZpbmUgR1BJT19IX09VVAkJMHgxQQkJLyogR1BJTyBvdXRwdXQgKGhpZ2gpICovCisjZGVmaW5lIEdQSU9fSF9ESVIJCTB4MUIJCS8qIEdQSU8gZGlyZWN0aW9uIChoaWdoKSAqLworCisvKiBEZWZpbml0aW9ucyBmb3Igb3RoZXIgc2xvdyBidXMgcmVnaXN0ZXJzIGNhbiBiZSBhZGRlZCBhcyBuZWVkZWQgKi8KKworCisvKgogICogVHJhbnNtaXQgU2VxdWVuY2VyIENvbW1hbmQgRGVzY3JpcHRvciBkZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vLyBUaGlzIGRlc2NyaXB0b3IgbXVzdCBiZSBwbGFjZWQgaW4gR1JBTS4gIFRoZSBhZGRyZXNzIG9mIHRoaXMgZGVzY3JpcHRvcgotLy8gKGFsb25nIHdpdGggYSBjb3VwbGUgb2YgY29udHJvbCBiaXRzKSBpcyBwdXNoZWQgb250byB0aGUgUHhoQ21kUSBvciBQeGxDbWRRCi0vLyAoUHJveHkgaGlnaCBvciBsb3cgY29tbWFuZCBxdWV1ZSkuICBUaGlzIGRhdGEgaXMgcmVhZCBieSB0aGUgUHJveHkgU2VxdWVuY2VyLAotLy8gd2hpY2ggcHVzaGVzIGl0IG9udG8gdGhlIFhtdENtZFEsIHdoaWNoIGlzIChldmVudHVhbGx5KSByZWFkIGJ5IHRoZSBUcmFuc21pdAotLy8gU2VxdWVuY2VyLCBjYXVzaW5nIGEgcGFja2V0IHRvIGJlIHRyYW5zbWl0dGVkLiAgTm90IGFsbCBmaWVsZHMgYXJlIHZhbGlkIGZvcgotLy8gYWxsIGNvbW1hbmRzIC0gc2VlIHRoZSBTYWhhcmEgc3BlYyBmb3IgZGV0YWlscy4gIE5vdGUgdGhhdCB0aGlzIHN0cnVjdHVyZSBpcwotLy8gb25seSB2YWxpZCB3aGVuIGNvbXBpbGVkIG9uIGEgbGl0dGxlIGVuZGlhbiBtYWNoaW5lLgorICoKKyAqIFRoaXMgZGVzY3JpcHRvciBtdXN0IGJlIHBsYWNlZCBpbiBHUkFNLiAgVGhlIGFkZHJlc3Mgb2YgdGhpcyBkZXNjcmlwdG9yCisgKiAoYWxvbmcgd2l0aCBhIGNvdXBsZSBvZiBjb250cm9sIGJpdHMpIGlzIHB1c2hlZCBvbnRvIHRoZSBQeGhDbWRRIG9yIFB4bENtZFEKKyAqIChQcm94eSBoaWdoIG9yIGxvdyBjb21tYW5kIHF1ZXVlKS4gIFRoaXMgZGF0YSBpcyByZWFkIGJ5IHRoZSBQcm94eSBTZXF1ZW5jZXIsCisgKiB3aGljaCBwdXNoZXMgaXQgb250byB0aGUgWG10Q21kUSwgd2hpY2ggaXMgKGV2ZW50dWFsbHkpIHJlYWQgYnkgdGhlIFRyYW5zbWl0CisgKiBTZXF1ZW5jZXIsIGNhdXNpbmcgYSBwYWNrZXQgdG8gYmUgdHJhbnNtaXR0ZWQuICBOb3QgYWxsIGZpZWxkcyBhcmUgdmFsaWQgZm9yCisgKiBhbGwgY29tbWFuZHMgLSBzZWUgdGhlIFNhaGFyYSBzcGVjIGZvciBkZXRhaWxzLiAgTm90ZSB0aGF0IHRoaXMgc3RydWN0dXJlIGlzCisgKiBvbmx5IHZhbGlkIHdoZW4gY29tcGlsZWQgb24gYSBsaXR0bGUgZW5kaWFuIG1hY2hpbmUuCisgKi8KICNwcmFnbWEgcGFjayhwdXNoLCAxKQotc3RydWN0IFhNVF9ERVNDIHsKLQl1c2hvcnQJWG10TGVuOwkJCS8vIHdvcmQgMCwgYml0cyBbMTU6MF0gLSAgdHJhbnNtaXQgbGVuZ3RoCi0JdW5zaWduZWQgY2hhcglYbXRDdGw7CQkJLy8gd29yZCAwLCBiaXRzIFsyMzoxNl0gLSB0cmFuc21pdCBjb250cm9sIGJ5dGUKLQl1bnNpZ25lZCBjaGFyCUNtZDsJCQkvLyB3b3JkIDAsIGJpdHMgWzMxOjI0XSAtIHRyYW5zbWl0IGNvbW1hbmQgcGx1cyBtaXNjLgotCXUzMglYbXRCdWZJZDsJCS8vIHdvcmQgMSwgYml0cyBbMzE6MF0gLSAgdHJhbnNtaXQgYnVmZmVyIElECi0JdW5zaWduZWQgY2hhcglUY3BTdHJ0OwkJLy8gd29yZCAyLCBiaXRzIFs3OjBdIC0gICBieXRlIGFkZHJlc3Mgb2YgVENQIGhlYWRlcgotCXVuc2lnbmVkIGNoYXIJSXBTdHJ0OwkJCS8vIHdvcmQgMiwgYml0cyBbMTU6OF0gLSAgYnl0ZSBhZGRyZXNzIG9mIElQIGhlYWRlcgotCXVzaG9ydAlJcENrU3VtOwkJLy8gd29yZCAyLCBiaXRzIFszMToxNl0gLSBwYXJ0aWFsIElQIGNoZWNrc3VtCi0JdXNob3J0CVRjcENrU3VtOwkJLy8gd29yZCAzLCBiaXRzIFsxNTowXSAtICBwYXJ0aWFsIFRDUCBjaGVja3N1bQotCXVzaG9ydAlSc3ZkMTsJCQkvLyB3b3JkIDMsIGJpdHMgWzMxOjE2XSAtIFBBRAotCXUzMglSc3ZkMjsJCQkvLyB3b3JkIDQsIGJpdHMgWzMxOjBdIC0gIFBBRAotCXUzMglSc3ZkMzsJCQkvLyB3b3JkIDUsIGJpdHMgWzMxOjBdIC0gIFBBRAotCXUzMglSc3ZkNDsJCSAgICAvLyB3b3JkIDYsIGJpdHMgWzMxOjBdIC0gIFBBRAotCXUzMglSc3ZkNTsJCSAgICAvLyB3b3JkIDcsIGJpdHMgWzMxOjBdIC0gIFBBRAorc3RydWN0IHhtdF9kZXNjIHsKKwl1c2hvcnQJICAgICAgICBYbXRMZW47CSAgICAvKiB3b3JkIDAsIGJpdHMgWzE1OjBdIC0gIHRyYW5zbWl0IGxlbmd0aCAqLworCS8qIHdvcmQgMCwgYml0cyBbMjM6MTZdIC0gdHJhbnNtaXQgY29udHJvbCBieXRlICovCisJdW5zaWduZWQgY2hhcglYbXRDdGw7CisJLyogd29yZCAwLCBiaXRzIFszMToyNF0gLSB0cmFuc21pdCBjb21tYW5kIHBsdXMgbWlzYy4gKi8KKwl1bnNpZ25lZCBjaGFyCUNtZDsKKwkvKiB3b3JkIDEsIGJpdHMgWzMxOjBdIC0gIHRyYW5zbWl0IGJ1ZmZlciBJRCAqLworCXUzMglYbXRCdWZJZDsKKwkvKiB3b3JkIDIsIGJpdHMgWzc6MF0gLSAgIGJ5dGUgYWRkcmVzcyBvZiBUQ1AgaGVhZGVyICovCisJdW5zaWduZWQgY2hhcglUY3BTdHJ0OworCS8qIHdvcmQgMiwgYml0cyBbMTU6OF0gLSAgYnl0ZSBhZGRyZXNzIG9mIElQIGhlYWRlciAqLworCXVuc2lnbmVkIGNoYXIJSXBTdHJ0OworCS8qIHdvcmQgMiwgYml0cyBbMzE6MTZdIC0gcGFydGlhbCBJUCBjaGVja3N1bSAqLworCXVzaG9ydAlJcENrU3VtOworCS8qIHdvcmQgMywgYml0cyBbMTU6MF0gLSAgcGFydGlhbCBUQ1AgY2hlY2tzdW0gKi8KKwl1c2hvcnQJVGNwQ2tTdW07CisJdXNob3J0CVJzdmQxOwkJICAgIC8qIHdvcmQgMywgYml0cyBbMzE6MTZdIC0gUEFEICovCisJdTMyCVJzdmQyOwkJICAgIC8qIHdvcmQgNCwgYml0cyBbMzE6MF0gLSAgUEFEICovCisJdTMyCVJzdmQzOwkJICAgIC8qIHdvcmQgNSwgYml0cyBbMzE6MF0gLSAgUEFEICovCisJdTMyCVJzdmQ0OwkJICAgIC8qIHdvcmQgNiwgYml0cyBbMzE6MF0gLSAgUEFEICovCisJdTMyCVJzdmQ1OwkJICAgIC8qIHdvcmQgNywgYml0cyBbMzE6MF0gLSAgUEFEICovCiB9OwogI3ByYWdtYSBwYWNrKHBvcCkKIAotLy8gWE1UX0RFU0MgQ21kIGJ5dGUgZGVmaW5pdGlvbnMKLQkJLy8gY29tbWFuZCBjb2RlcwotI2RlZmluZSBYTVRfREVTQ19DTURfUkFXX1NFTkQJCTAJCS8vIHJhdyBzZW5kIGRlc2NyaXB0b3IKLSNkZWZpbmUgWE1UX0RFU0NfQ01EX0NTVU1fSU5TRVJUCTEJCS8vIGNoZWNrc3VtIGluc2VydCBkZXNjcmlwdG9yCi0jZGVmaW5lIFhNVF9ERVNDX0NNRF9GT1JNQVQJCTIJCS8vIGZvcm1hdCBkZXNjcmlwdG9yCi0jZGVmaW5lIFhNVF9ERVNDX0NNRF9QUklNRQkJMwkJLy8gcHJpbWUgZGVzY3JpcHRvcgotI2RlZmluZSBYTVRfREVTQ19DTURfQ09ERV9TSEZUCQk2CQkvLyBjb21hbmQgY29kZSBzaGlmdCAoc2hpZnQgdG8gYml0cyBbMzE6MzBdIGluIHdvcmQgMCkKLQkJLy8gc2hpZnRlZCBjb21tYW5kIGNvZGVzCi0jZGVmaW5lIFhNVF9SQVdfU0VORAkJKFhNVF9ERVNDX0NNRF9SQVdfU0VORCAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQotI2RlZmluZSBYTVRfQ1NVTV9JTlNFUlQJCShYTVRfREVTQ19DTURfQ1NVTV9JTlNFUlQgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKLSNkZWZpbmUgWE1UX0ZPUk1BVAkJCShYTVRfREVTQ19DTURfRk9STUFUICAgICAgPDwgWE1UX0RFU0NfQ01EX0NPREVfU0hGVCkKLSNkZWZpbmUgWE1UX1BSSU1FCQkJKFhNVF9ERVNDX0NNRF9QUklNRSAgICAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQorLyogc3RydWN0IHhtdF9kZXNjIENtZCBieXRlIGRlZmluaXRpb25zICovCisJCS8qIGNvbW1hbmQgY29kZXMgKi8KKyNkZWZpbmUgWE1UX0RFU0NfQ01EX1JBV19TRU5ECQkwCS8qIHJhdyBzZW5kIGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUgWE1UX0RFU0NfQ01EX0NTVU1fSU5TRVJUCTEJLyogY2hlY2tzdW0gaW5zZXJ0IGRlc2NyaXB0b3IgKi8KKyNkZWZpbmUgWE1UX0RFU0NfQ01EX0ZPUk1BVAkJMgkvKiBmb3JtYXQgZGVzY3JpcHRvciAqLworI2RlZmluZSBYTVRfREVTQ19DTURfUFJJTUUJCTMJLyogcHJpbWUgZGVzY3JpcHRvciAqLworLyogY29tYW5kIGNvZGUgc2hpZnQgKHNoaWZ0IHRvIGJpdHMgWzMxOjMwXSBpbiB3b3JkIDApICovCisjZGVmaW5lIFhNVF9ERVNDX0NNRF9DT0RFX1NIRlQJCTYKKwkJLyogc2hpZnRlZCBjb21tYW5kIGNvZGVzICovCisjZGVmaW5lIFhNVF9SQVdfU0VORAkoWE1UX0RFU0NfQ01EX1JBV19TRU5EICAgIDw8IFhNVF9ERVNDX0NNRF9DT0RFX1NIRlQpCisjZGVmaW5lIFhNVF9DU1VNX0lOU0VSVAkoWE1UX0RFU0NfQ01EX0NTVU1fSU5TRVJUIDw8IFhNVF9ERVNDX0NNRF9DT0RFX1NIRlQpCisjZGVmaW5lIFhNVF9GT1JNQVQJKFhNVF9ERVNDX0NNRF9GT1JNQVQgICAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQorI2RlZmluZSBYTVRfUFJJTUUJKFhNVF9ERVNDX0NNRF9QUklNRSAgICAgICA8PCBYTVRfREVTQ19DTURfQ09ERV9TSEZUKQogCi0vLyBYTVRfREVTQyBDb250cm9sIEJ5dGUgKFhtdEN0bCkgZGVmaW5pdGlvbnMKLS8vIE5PVEU6ICBUaGVzZSBiaXRzIGRvIG5vdCB3b3JrIG9uIFNhaGFyYSAoUmV2IEEpIQotI2RlZmluZQlYTVRfQ1RMX1BBVVNFX0ZSQU1FCQkweDgwCS8vIGN1cnJlbnQgZnJhbWUgaXMgYSBwYXVzZSBjb250cm9sIGZyYW1lIChmb3Igc3RhdGlzdGljcykKLSNkZWZpbmUJWE1UX0NUTF9DT05UUk9MX0ZSQU1FCQkweDQwCS8vIGN1cnJlbnQgZnJhbWUgaXMgYSBjb250cm9sIGZyYW1lIChmb3Igc3RhdGlzdGljcykKLSNkZWZpbmUJWE1UX0NUTF9QRVJfUEtUX1FVQUwJCTB4MjAJLy8gcGVyIHBhY2tldCBxdWFsaWZpZXIKLSNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV9OT05FCQkweDAwCS8vIGRvIG5vdCBwYWQgZnJhbWUKLSNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV82NAkJMHgwOAkvLyBwYWQgZnJhbWUgdG8gNjQgYnl0ZXMKLSNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV9WTEFOXzY4CTB4MTAJLy8gcGFkIGZyYW1lIHRvIDY0IGJ5dGVzLCBhbmQgVkxBTiBmcmFtZXMgdG8gNjggYnl0ZXMKLSNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV82OAkJMHgxOAkvLyBwYWQgZnJhbWUgdG8gNjggYnl0ZXMKLSNkZWZpbmUJWE1UX0NUTF9HRU5fRkNTCQkJMHgwNAkvLyBnZW5lcmF0ZSBGQ1MgKENSQykgZm9yIHRoaXMgZnJhbWUKLSNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMAkJMHgwMAkvLyBkbyBub3QgZGVsYXkgRkNTIGNhbGN1dGlvbgotI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18xCQkweDAxCS8vIGRlbGF5IEZDUyBjYWxjdWxhdGlvbiBieSAxICg0LWJ5dGUpIHdvcmQKLSNkZWZpbmUJWE1UX0NUTF9ERUxBWV9GQ1NfMgkJMHgwMgkvLyBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMiAoNC1ieXRlKSB3b3JkcwotI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18zCQkweDAzCS8vIGRlbGF5IEZDUyBjYWxjdWxhdGlvbiBieSAzICg0LWJ5dGUpIHdvcmRzCisvKgorICogc3RydWN0IHhtdF9kZXNjIENvbnRyb2wgQnl0ZSAoWG10Q3RsKSBkZWZpbml0aW9ucworICogTk9URTogIFRoZXNlIGJpdHMgZG8gbm90IHdvcmsgb24gU2FoYXJhIChSZXYgQSkhCisgKi8KKy8qIGN1cnJlbnQgZnJhbWUgaXMgYSBwYXVzZSBjb250cm9sIGZyYW1lIChmb3Igc3RhdGlzdGljcykgKi8KKyNkZWZpbmUJWE1UX0NUTF9QQVVTRV9GUkFNRQkJMHg4MAorLyogY3VycmVudCBmcmFtZSBpcyBhIGNvbnRyb2wgZnJhbWUgKGZvciBzdGF0aXN0aWNzKSAqLworI2RlZmluZQlYTVRfQ1RMX0NPTlRST0xfRlJBTUUJCTB4NDAKKyNkZWZpbmUJWE1UX0NUTF9QRVJfUEtUX1FVQUwJCTB4MjAJLyogcGVyIHBhY2tldCBxdWFsaWZpZXIgKi8KKyNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV9OT05FCQkweDAwCS8qIGRvIG5vdCBwYWQgZnJhbWUgKi8KKyNkZWZpbmUJWE1UX0NUTF9QQURfTU9ERV82NAkJMHgwOAkvKiBwYWQgZnJhbWUgdG8gNjQgYnl0ZXMgKi8KKy8qIHBhZCBmcmFtZSB0byA2NCBieXRlcywgYW5kIFZMQU4gZnJhbWVzIHRvIDY4IGJ5dGVzICovCisjZGVmaW5lCVhNVF9DVExfUEFEX01PREVfVkxBTl82OAkweDEwCisjZGVmaW5lCVhNVF9DVExfUEFEX01PREVfNjgJCTB4MTgJLyogcGFkIGZyYW1lIHRvIDY4IGJ5dGVzICovCisvKiBnZW5lcmF0ZSBGQ1MgKENSQykgZm9yIHRoaXMgZnJhbWUgKi8KKyNkZWZpbmUJWE1UX0NUTF9HRU5fRkNTCQkJMHgwNAorI2RlZmluZQlYTVRfQ1RMX0RFTEFZX0ZDU18wCQkweDAwCS8qIGRvIG5vdCBkZWxheSBGQ1MgY2FsY3V0aW9uICovCisvKiBkZWxheSBGQ1MgY2FsY3VsYXRpb24gYnkgMSAoNC1ieXRlKSB3b3JkICovCisjZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzEJCTB4MDEKKy8qIGRlbGF5IEZDUyBjYWxjdWxhdGlvbiBieSAyICg0LWJ5dGUpIHdvcmRzICovCisjZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzIJCTB4MDIKKy8qIGRlbGF5IEZDUyBjYWxjdWxhdGlvbiBieSAzICg0LWJ5dGUpIHdvcmRzICovCisjZGVmaW5lCVhNVF9DVExfREVMQVlfRkNTXzMJCTB4MDMKIAotLy8gWE1UX0RFU0MgWG10QnVmSWQgZGVmaW5pdGlvbgotI2RlZmluZSBYTVRfQlVGX0lEX1NIRlQJCTgJLy8gVGhlIFhtdCBidWZmZXIgSUQgaXMgZm9ybWVkIGJ5IGRpdmlkaW5nCi0JCQkJCS8vIHRoZSBidWZmZXIgKERSQU0pIGFkZHJlc3MgYnkgMjU2IChvciA8PCA4KQorLyogc3RydWN0IHhtdF9kZXNjIFhtdEJ1ZklkIGRlZmluaXRpb24gKi8KKy8qCisgKiBUaGUgWG10IGJ1ZmZlciBJRCBpcyBmb3JtZWQgYnkgZGl2aWRpbmcgdGhlIGJ1ZmZlciAoRFJBTSkgYWRkcmVzcworICogYnkgMjU2IChvciA8PCA4KQorICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogUmVjZWl2ZXIgU2VxdWVuY2VyIERlZmluaXRpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFhNVF9CVUZfSURfU0hGVAkJOAogCi0vLyBSZWNlaXZlIEV2ZW50IFF1ZXVlIChxdWV1ZXMgMyAtIDYpIGJpdCBkZWZpbml0aW9ucwotI2RlZmluZQlSQ1ZfRVZUUV9SQkZJRF9NQVNLCQkweDAwMDBGRkZGCS8vIGJpdCBtYXNrIGZvciB0aGUgUmVjZWl2ZSBCdWZmZXIgSUQKKy8qIFJlY2VpdmVyIFNlcXVlbmNlciBEZWZpbml0aW9ucyAqLwogCi0vLyBSZWNlaXZlIEJ1ZmZlciBJRCBkZWZpbml0aW9uCi0jZGVmaW5lIFJDVl9CVUZfSURfU0hGVAkJNQkvLyBUaGUgUmN2IGJ1ZmZlciBJRCBpcyBmb3JtZWQgYnkgZGl2aWRpbmcKLQkJCQkJLy8gdGhlIGJ1ZmZlciAoRFJBTSkgYWRkcmVzcyBieSAzMiAob3IgPDwgNSkKKy8qIFJlY2VpdmUgRXZlbnQgUXVldWUgKHF1ZXVlcyAzIC0gNikgYml0IGRlZmluaXRpb25zICovCisvKiBiaXQgbWFzayBmb3IgdGhlIFJlY2VpdmUgQnVmZmVyIElEICovCisjZGVmaW5lCVJDVl9FVlRRX1JCRklEX01BU0sJMHgwMDAwRkZGRgogCi0vLyBGb3JtYXQgb2YgdGhlIDE4IGJ5dGUgUmVjZWl2ZSBCdWZmZXIgcmV0dXJuZWQgYnkgdGhlCi0vLyBSZWNlaXZlIFNlcXVlbmNlciBmb3IgcmVjZWl2ZWQgcGFja2V0cworLyogUmVjZWl2ZSBCdWZmZXIgSUQgZGVmaW5pdGlvbiAqLworLyoKKyAqIFRoZSBSY3YgYnVmZmVyIElEIGlzIGZvcm1lZCBieSBkaXZpZGluZyB0aGUgYnVmZmVyIChEUkFNKSBhZGRyZXNzCisgKiBieSAzMiAob3IgPDwgNSkKKyAqLworI2RlZmluZSBSQ1ZfQlVGX0lEX1NIRlQJCTUKKworLyoKKyAqIEZvcm1hdCBvZiB0aGUgMTggYnl0ZSBSZWNlaXZlIEJ1ZmZlciByZXR1cm5lZCBieSB0aGUKKyAqIFJlY2VpdmUgU2VxdWVuY2VyIGZvciByZWNlaXZlZCBwYWNrZXRzCisgKi8KICNwcmFnbWEgcGFjayhwdXNoLCAxKQotc3RydWN0IFJDVl9CVUZfSERSIHsKLQl1MzIJU3RhdHVzOwkJCQkvLyBTdGF0dXMgd29yZCBmcm9tIFJjdiBTZXEgUGFyc2VyCi0JdXNob3J0CUxlbmd0aDsJCQkJLy8gUmN2IHBhY2tldCBieXRlIGNvdW50CitzdHJ1Y3QgcmN2X2J1Zl9oZHIgeworCXUzMglTdGF0dXM7CQkvKiBTdGF0dXMgd29yZCBmcm9tIFJjdiBTZXEgUGFyc2VyICovCisJdXNob3J0CUxlbmd0aDsJCS8qIFJjdiBwYWNrZXQgYnl0ZSBjb3VudCAqLwogCXVuaW9uIHsKLQkJdXNob3J0CQlUY3BDc3VtOwkvLyBUQ1AgY2hlY2tzdW0KKwkJdXNob3J0CQlUY3BDc3VtOwkvKiBUQ1AgY2hlY2tzdW0gKi8KIAkJc3RydWN0IHsKLQkJCXVuc2lnbmVkIGNoYXIJVGNwQ3N1bUw7CS8vIGxvd2VyIDggYml0cyBvZiB0aGUgVENQIGNoZWNrc3VtCi0JCQl1bnNpZ25lZCBjaGFyCUxpbmtIYXNoOwkvLyBMaW5rIGhhc2ggKG11bHRpY2FzdCBmcmFtZXMgb25seSkKKwkJCS8qIGxvd2VyIDggYml0cyBvZiB0aGUgVENQIGNoZWNrc3VtICovCisJCQl1bnNpZ25lZCBjaGFyCVRjcENzdW1MOworCQkJLyogTGluayBoYXNoIChtdWx0aWNhc3QgZnJhbWVzIG9ubHkpICovCisJCQl1bnNpZ25lZCBjaGFyCUxpbmtIYXNoOwogCQl9OwogCX07Ci0JdXNob3J0CVNrdEhhc2g7CQkJLy8gU29ja2V0IGhhc2gKLQl1bnNpZ25lZCBjaGFyCVRjcEhkck9mZnNldDsJCS8vIFRDUCBoZWFkZXIgb2Zmc2V0IGludG8gcGFja2V0Ci0JdW5zaWduZWQgY2hhcglJcEhkck9mZnNldDsJCS8vIElQIGhlYWRlciBvZmZzZXQgaW50byBwYWNrZXQKLQl1MzIJVHB6SGFzaDsJCQkvLyBUb2VwbGl0eiBoYXNoCi0JdXNob3J0CVJlc2VydmVkOwkJCS8vIFJlc2VydmVkCisJdXNob3J0CVNrdEhhc2g7CQkvKiBTb2NrZXQgaGFzaCAqLworCXVuc2lnbmVkIGNoYXIJVGNwSGRyT2Zmc2V0OwkvKiBUQ1AgaGVhZGVyIG9mZnNldCBpbnRvIHBhY2tldCAqLworCXVuc2lnbmVkIGNoYXIJSXBIZHJPZmZzZXQ7CS8qIElQIGhlYWRlciBvZmZzZXQgaW50byBwYWNrZXQgKi8KKwl1MzIJICAgICAgIAlUcHpIYXNoOwkvKiBUb2VwbGl0eiBoYXNoICovCisJdXNob3J0CSAgICAgICAgUmVzZXJ2ZWQ7CS8qIFJlc2VydmVkICovCiB9OwogI3ByYWdtYSBwYWNrKHBvcCkKIAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFF1ZXVlIGRlZmluaXRpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBRdWV1ZSBkZWZpbml0aW9ucyAqLwogCiAvKiBJbmdyZXNzIChyZWFkIG9ubHkpIHF1ZXVlIG51bWJlcnMgKi8KLSNkZWZpbmUgUFhZX0JVRl9RCQkwCQkvKiBQcm94eSBCdWZmZXIgUXVldWUgKi8KLSNkZWZpbmUgSFNUX0VWVF9RCQkxCQkvKiBIb3N0IEV2ZW50IFF1ZXVlICovCi0jZGVmaW5lIFhNVF9CVUZfUQkJMgkJLyogVHJhbnNtaXQgQnVmZmVyIFF1ZXVlICovCi0jZGVmaW5lIFNLVF9FVkxfUQkJMwkJLyogUmN2U3FyIFNvY2tldCBFdmVudCBMb3cgUHJpb3JpdHkgUXVldWUgKi8KLSNkZWZpbmUgUkNWX0VWTF9RCQk0CQkvKiBSY3ZTcXIgUmN2IEV2ZW50IExvdyBQcmlvcml0eSBRdWV1ZSAqLwotI2RlZmluZSBTS1RfRVZIX1EJCTUJCS8qIFJjdlNxciBTb2NrZXQgRXZlbnQgSGlnaCBQcmlvcml0eSBRdWV1ZSAqLwotI2RlZmluZSBSQ1ZfRVZIX1EJCTYJCS8qIFJjdlNxciBSY3YgRXZlbnQgSGlnaCBQcmlvcml0eSBRdWV1ZSAqLwotI2RlZmluZSBETUFfUlNQX1EJCTcJCS8qIERtYSBSZXNwb25zZSBRdWV1ZSAtIG9uZSBwZXIgQ1BVIGNvbnRleHQgKi8KKyNkZWZpbmUgUFhZX0JVRl9RCTAJLyogUHJveHkgQnVmZmVyIFF1ZXVlICovCisjZGVmaW5lIEhTVF9FVlRfUQkxCS8qIEhvc3QgRXZlbnQgUXVldWUgKi8KKyNkZWZpbmUgWE1UX0JVRl9RCTIJLyogVHJhbnNtaXQgQnVmZmVyIFF1ZXVlICovCisjZGVmaW5lIFNLVF9FVkxfUQkzCS8qIFJjdlNxciBTb2NrZXQgRXZlbnQgTG93IFByaW9yaXR5IFF1ZXVlICovCisjZGVmaW5lIFJDVl9FVkxfUQk0CS8qIFJjdlNxciBSY3YgRXZlbnQgTG93IFByaW9yaXR5IFF1ZXVlICovCisjZGVmaW5lIFNLVF9FVkhfUQk1CS8qIFJjdlNxciBTb2NrZXQgRXZlbnQgSGlnaCBQcmlvcml0eSBRdWV1ZSAqLworI2RlZmluZSBSQ1ZfRVZIX1EJNgkvKiBSY3ZTcXIgUmN2IEV2ZW50IEhpZ2ggUHJpb3JpdHkgUXVldWUgKi8KKyNkZWZpbmUgRE1BX1JTUF9RCTcJLyogRG1hIFJlc3BvbnNlIFF1ZXVlIC0gb25lIHBlciBDUFUgY29udGV4dCAqLwogLyogTG9jYWwgKHJlYWQvd3JpdGUpIHF1ZXVlIG51bWJlcnMgKi8KLSNkZWZpbmUgTE9DQUxfQV9RCQk4CQkvKiBTcGFyZSBsb2NhbCBRdWV1ZSAqLwotI2RlZmluZSBMT0NBTF9CX1EJCTkJCS8qIFNwYXJlIGxvY2FsIFF1ZXVlICovCi0jZGVmaW5lIExPQ0FMX0NfUQkJMTAJCS8qIFNwYXJlIGxvY2FsIFF1ZXVlICovCi0jZGVmaW5lIEZTTV9FVlRfUQkJMTEJCS8qIEZpbml0ZS1TdGF0ZS1NYWNoaW5lIEV2ZW50IFF1ZXVlICovCi0jZGVmaW5lIFNCRl9QQUxfUQkJMTIJCS8qIFN5c3RlbSBCdWZmZXIgUGh5c2ljYWwgQWRkcmVzcyAobG93KSBRdWV1ZSAqLwotI2RlZmluZSBTQkZfUEFIX1EJCTEzCQkvKiBTeXN0ZW0gQnVmZmVyIFBoeXNpY2FsIEFkZHJlc3MgKGhpZ2gpIFF1ZXVlICovCi0jZGVmaW5lIFNCRl9WQUxfUQkJMTQJCS8qIFN5c3RlbSBCdWZmZXIgVmlydHVhbCBBZGRyZXNzIChsb3cpIFF1ZXVlICovCi0jZGVmaW5lIFNCRl9WQUhfUQkJMTUJCS8qIFN5c3RlbSBCdWZmZXIgVmlydHVhbCBBZGRyZXNzIChoaWdoKSBRdWV1ZSAqLworI2RlZmluZSBMT0NBTF9BX1EJOAkvKiBTcGFyZSBsb2NhbCBRdWV1ZSAqLworI2RlZmluZSBMT0NBTF9CX1EJOQkvKiBTcGFyZSBsb2NhbCBRdWV1ZSAqLworI2RlZmluZSBMT0NBTF9DX1EJMTAJLyogU3BhcmUgbG9jYWwgUXVldWUgKi8KKyNkZWZpbmUgRlNNX0VWVF9RCTExCS8qIEZpbml0ZS1TdGF0ZS1NYWNoaW5lIEV2ZW50IFF1ZXVlICovCisjZGVmaW5lIFNCRl9QQUxfUQkxMgkvKiBTeXN0ZW0gQnVmZmVyIFBoeXNpY2FsIEFkZHJlc3MgKGxvdykgUXVldWUgKi8KKyNkZWZpbmUgU0JGX1BBSF9RCTEzCS8qIFN5c3RlbSBCdWZmZXIgUGh5c2ljYWwgQWRkcmVzcyAoaGlnaCkgUXVldWUqLworI2RlZmluZSBTQkZfVkFMX1EJMTQJLyogU3lzdGVtIEJ1ZmZlciBWaXJ0dWFsIEFkZHJlc3MgKGxvdykgUXVldWUgKi8KKyNkZWZpbmUgU0JGX1ZBSF9RCTE1CS8qIFN5c3RlbSBCdWZmZXIgVmlydHVhbCBBZGRyZXNzIChoaWdoKSBRdWV1ZSAqLwogLyogRWdyZXNzICh3cml0ZSBvbmx5KSBxdWV1ZSBudW1iZXJzICovCi0jZGVmaW5lIEgyR19DTURfUQkJMTYJCS8qIEhvc3QgdG8gR2xiUmFtIERNQSBDb21tYW5kIFF1ZXVlICovCi0jZGVmaW5lIEgyRF9DTURfUQkJMTcJCS8qIEhvc3QgdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZSAqLwotI2RlZmluZSBHMkhfQ01EX1EJCTE4CQkvKiBHbGJSYW0gdG8gSG9zdCBETUEgQ29tbWFuZCBRdWV1ZSAqLwotI2RlZmluZSBHMkRfQ01EX1EJCTE5CQkvKiBHbGJSYW0gdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZSAqLwotI2RlZmluZSBEMkhfQ01EX1EJCTIwCQkvKiBEUkFNIHRvIEhvc3QgRE1BIENvbW1hbmQgUXVldWUgKi8KLSNkZWZpbmUgRDJHX0NNRF9RCQkyMQkJLyogRFJBTSB0byBHbGJSYW0gRE1BIENvbW1hbmQgUXVldWUgKi8KLSNkZWZpbmUgRDJEX0NNRF9RCQkyMgkJLyogRFJBTSB0byBEUkFNIERNQSBDb21tYW5kIFF1ZXVlICovCi0jZGVmaW5lIFBYTF9DTURfUQkJMjMJCS8qIExvdyBQcmlvcml0eSBQcm94eSBDb21tYW5kIFF1ZXVlICovCi0jZGVmaW5lIFBYSF9DTURfUQkJMjQJCS8qIEhpZ2ggUHJpb3JpdHkgUHJveHkgQ29tbWFuZCBRdWV1ZSAqLwotI2RlZmluZSBSU1FfQ01EX1EJCTI1CQkvKiBSZWNlaXZlIFNlcXVlbmNlciBDb21tYW5kIFF1ZXVlICovCi0jZGVmaW5lIFJDVl9CVUZfUQkJMjYJCS8qIFJlY2VpdmUgQnVmZmVyIFF1ZXVlICovCisjZGVmaW5lIEgyR19DTURfUQkxNgkvKiBIb3N0IHRvIEdsYlJhbSBETUEgQ29tbWFuZCBRdWV1ZSAqLworI2RlZmluZSBIMkRfQ01EX1EJMTcJLyogSG9zdCB0byBEUkFNIERNQSBDb21tYW5kIFF1ZXVlICovCisjZGVmaW5lIEcySF9DTURfUQkxOAkvKiBHbGJSYW0gdG8gSG9zdCBETUEgQ29tbWFuZCBRdWV1ZSAqLworI2RlZmluZSBHMkRfQ01EX1EJMTkJLyogR2xiUmFtIHRvIERSQU0gRE1BIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgRDJIX0NNRF9RCTIwCS8qIERSQU0gdG8gSG9zdCBETUEgQ29tbWFuZCBRdWV1ZSAqLworI2RlZmluZSBEMkdfQ01EX1EJMjEJLyogRFJBTSB0byBHbGJSYW0gRE1BIENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgRDJEX0NNRF9RCTIyCS8qIERSQU0gdG8gRFJBTSBETUEgQ29tbWFuZCBRdWV1ZSAqLworI2RlZmluZSBQWExfQ01EX1EJMjMJLyogTG93IFByaW9yaXR5IFByb3h5IENvbW1hbmQgUXVldWUgKi8KKyNkZWZpbmUgUFhIX0NNRF9RCTI0CS8qIEhpZ2ggUHJpb3JpdHkgUHJveHkgQ29tbWFuZCBRdWV1ZSAqLworI2RlZmluZSBSU1FfQ01EX1EJMjUJLyogUmVjZWl2ZSBTZXF1ZW5jZXIgQ29tbWFuZCBRdWV1ZSAqLworI2RlZmluZSBSQ1ZfQlVGX1EJMjYJLyogUmVjZWl2ZSBCdWZmZXIgUXVldWUgKi8KIAogLyogQml0IGRlZmluaXRpb25zIGZvciB0aGUgUHJveHkgQ29tbWFuZCBxdWV1ZXMgKFBYTF9DTURfUSBhbmQgUFhIX0NNRF9RKSAqLwotI2RlZmluZSBQWFlfQ09QWV9FTgkJMHgwMDIwMDAwMAkJLyogZW5hYmxlIGNvcHkgb2YgeG10IGRlc2NyaXB0b3IgdG8geG10IGNvbW1hbmQgcXVldWUgKi8KLSNkZWZpbmUgUFhZX1NJWkVfMTYJCTB4MDAwMDAwMDAJCS8qIGNvcHkgMTYgYnl0ZXMgKi8KLSNkZWZpbmUgUFhZX1NJWkVfMzIJCTB4MDAxMDAwMDAJCS8qIGNvcHkgMzIgYnl0ZXMgKi8KKy8qIGVuYWJsZSBjb3B5IG9mIHhtdCBkZXNjcmlwdG9yIHRvIHhtdCBjb21tYW5kIHF1ZXVlICovCisjZGVmaW5lIFBYWV9DT1BZX0VOCTB4MDAyMDAwMDAKKyNkZWZpbmUgUFhZX1NJWkVfMTYJMHgwMDAwMDAwMAkvKiBjb3B5IDE2IGJ5dGVzICovCisjZGVmaW5lIFBYWV9TSVpFXzMyCTB4MDAxMDAwMDAJLyogY29weSAzMiBieXRlcyAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNYRyBFRVBST00vRmxhc2ggQ29uZmlndXJhdGlvbiBEZWZpbml0aW9ucwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogU1hHIEVFUFJPTS9GbGFzaCBDb25maWd1cmF0aW9uIERlZmluaXRpb25zICovCisKKy8qIExvY2F0aW9uIG9mIGNvbmZpZ3VyYXRpb24gZGF0YSBpbiBFRVBST00gb3IgRmxhc2ggKi8KKy8qIHN0YXJ0IGFkZHIgZm9yIGNvbmZpZyBpbmZvIGluIEVFUFJPTSAqLworI2RlZmluZQlFRVBST01fQ09ORklHX1NUQVJUX0FERFIJMHgwMAorLyogc3RhcnQgYWRkciBmb3IgY29uZmlnIGluZm8gaW4gRmxhc2ggKi8KKyNkZWZpbmUJRkxBU0hfQ09ORklHX1NUQVJUX0FERFIJCTB4ODAKKworLyogQ29uZmlndXJhdGlvbiBkYXRhIHNlY3Rpb24gZGVmaW5lcyAqLworI2RlZmluZQlIV19DRkdfU0VDVElPTl9TSVpFCTUxMgkvKiBzaXplIG9mIEgvVyBzZWN0aW9uICovCisjZGVmaW5lCUhXX0NGR19TRUNUSU9OX1NJWkVfQQkyNTYJLyogc2l6ZSBvZiBIL1cgc2VjdGlvbiAoU2FoYXJhIHJldiBBKSAqLworLyogc3RhcnRpbmcgbG9jYXRpb24gKG9mZnNldCkgb2YgUy9XIHNlY3Rpb24gKi8KKyNkZWZpbmUJU1dfQ0ZHX1NFQ1RJT05fU1RBUlQJNTEyCisvKiBzdGFydGluZyBsb2NhdGlvbiAob2Zmc2V0KSBvZiBTL1cgc2VjdGlvbiAoU2FoYXJhIHJldiBBKSAqLworI2RlZmluZQlTV19DRkdfU0VDVElPTl9TVEFSVF9BCTI1NgorI2RlZmluZQlTV19DRkdfU0VDVElPTl9TSVpFCTEyOAkvKiBzaXplIG9mIFMvVyBzZWN0aW9uICovCisvKgorICogSC9XIGNvbmZpZ3VyYXRpb24gZGF0YSBtYWdpYyB3b3JkIEdvZXMgaW4gQWRkciBmaWVsZCBvZiBmaXJzdAorICogc3RydWN0IGh3X2NmZ19kYXRhIGVudHJ5CisgKi8KKyNkZWZpbmUJSFdfQ0ZHX01BR0lDX1dPUkQJMHhBNUE1CisvKgorICogSC9XIGNvbmZpZ3VyYXRpb24gZGF0YSB0ZXJtaW5hdG9yICBHb2VzIGluIEFkZHIgZmllbGQgb2YgbGFzdAorICogc3RydWN0IGh3X2NmZ19kYXRhIGVudHJ5CisgKi8KKyNkZWZpbmUJSFdfQ0ZHX1RFUk1JTkFUT1IJMHhGRkZGCisKKyNkZWZpbmUJU1dfQ0ZHX01BR0lDX1dPUkQJMHg1QTVBCS8qIFMvVyBjb25maWd1cmF0aW9uIGRhdGEgbWFnaWMgd29yZCAqLworCiAjcHJhZ21hIHBhY2socHVzaCwgMSkKLQotLyogKi8KLXN0cnVjdCBIV19DRkdfREFUQSB7Ci0JdXNob3J0CQlBZGRyOwotCXVuaW9uIHsKLQkJdXNob3J0CURhdGE7Ci0JCXVzaG9ydAlDaGVja3N1bTsKLQl9OworLyoKKyAqIFN0cnVjdHVyZSBmb3IgYW4gZWxlbWVudCBvZiBIL1cgY29uZmlndXJhdGlvbiBkYXRhLgorICogUmVhZCBieSB0aGUgU2FoYXJhIGhhcmR3YXJlCisgKi8KK3N0cnVjdCBod19jZmdfZGF0YSB7CisJdXNob3J0CUFkZHI7CisJdXNob3J0CURhdGE7CiB9OwogCi0vKiAqLwotI2RlZmluZQlOVU1fSFdfQ0ZHX0VOVFJJRVMJKCgxMjgvc2l6ZW9mKHN0cnVjdCBIV19DRkdfREFUQSkpIC0gNCkKKy8qCisgKiBOdW1iZXIgb2Ygc3RydWN0IGh3X2NmZ19kYXRhIHN0cnVjdHVyZXMgdG8gcHV0IGluIHRoZSBjb25maWd1cmF0aW9uIGRhdGEKKyAqIGRhdGEgc3RydWN0dXJlIChzdHJ1Y3Qgc3hnX2NvbmZpZyBvciBzdHJ1Y3Qgc3hnX2NvbmZpZ19hKS4gIFRoZSBudW1iZXIgaXMKKyAqIGNvbXB1dGVkIHRvIGZpbGwgdGhlIGVudGlyZSBIL1cgY29uZmlnIHNlY3Rpb24gb2YgdGhlIHN0cnVjdHVyZS4KKyAqLworI2RlZmluZQlOVU1fSFdfQ0ZHX0VOVFJJRVMJCQkJCQlcCisJCQkoSFdfQ0ZHX1NFQ1RJT05fU0laRSAvIHNpemVvZihzdHJ1Y3QgaHdfY2ZnX2RhdGEpKQorI2RlZmluZQlOVU1fSFdfQ0ZHX0VOVFJJRVNfQQkJCQkJCVwKKwkJCShIV19DRkdfU0VDVElPTl9TSVpFX0EgLyBzaXplb2Yoc3RydWN0IGh3X2NmZ19kYXRhKSkKIAotLyogTUFDIGFkZHJlc3MgKi8KLXN0cnVjdCBTWEdfQ09ORklHX01BQyB7Ci0JdW5zaWduZWQgY2hhcgkJTWFjQWRkcls2XTsJCQkvKiBNQUMgQWRkcmVzcyAqLworLyogTUFDIGFkZHJlc3Mgc3RydWN0dXJlICovCitzdHJ1Y3Qgc3hnX2NvbmZpZ19tYWMgeworCXVuc2lnbmVkIGNoYXIJTWFjQWRkcls2XTsJLyogTUFDIEFkZHJlc3MgKi8KIH07CiAKLS8qICovCi1zdHJ1Y3QgQVRLX0ZSVSB7CisvKiBGUlUgZGF0YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBhdGtfZnJ1IHsKIAl1bnNpZ25lZCBjaGFyCQlQYXJ0TnVtWzZdOwogCXVuc2lnbmVkIGNoYXIJCVJldmlzaW9uWzJdOwogCXVuc2lnbmVkIGNoYXIJCVNlcmlhbFsxNF07CkBAIC02OTcsMzggKzkwOSwxMTIgQEAKICNkZWZpbmUgRU1DX0ZSVV9GT1JNQVQJCTB4MDAwNQogI2RlZmluZSBOT19GUlVfRk9STUFUCQkweEZGRkYKIAotLyogRUVQUk9NL0ZsYXNoIEZvcm1hdCAqLwotc3RydWN0IFNYR19DT05GSUcgewotCS8qICovCi0JLyogU2VjdGlvbiAxICgxMjggYnl0ZXMpICovCi0JLyogKi8KLQl1c2hvcnQJCQlNYWdpY1dvcmQ7CQkJLyogRUVQUk9NL0ZMQVNIIE1hZ2ljIGNvZGUgJ0E1QTUnICovCi0JdXNob3J0CQkJU3BpQ2xrczsJCQkvKiBTUEkgYnVzIGNsb2NrIGRpdmlkZXJzICovCi0Jc3RydWN0IEhXX0NGR19EQVRBCQlId0NmZ1tOVU1fSFdfQ0ZHX0VOVFJJRVNdOwotCS8qICovCi0JLyogKi8KLQkvKiAqLwotCXVzaG9ydAkJCVZlcnNpb247CQkJLyogRUVQUk9NIGZvcm1hdCB2ZXJzaW9uICovCi0Jc3RydWN0IFNYR19DT05GSUdfTUFDCU1hY0FkZHJbNF07CQkJLyogc3BhY2UgZm9yIDQgTUFDIGFkZHJlc3NlcyAqLwotCXN0cnVjdCBBVEtfRlJVCQkJQXRrRnJ1OwkJCQkvKiBGUlUgaW5mb3JtYXRpb24gKi8KLQl1c2hvcnQJCQlPZW1GcnVGb3JtYXQ7CQkvKiBPRU0gRlJVIGZvcm1hdCB0eXBlICovCi0JdW5zaWduZWQgY2hhcgkJCU9lbUZydVs3Nl07CQkJLyogT0VNIEZSVSBpbmZvcm1hdGlvbiAob3B0aW9uYWwpICovCi0JdXNob3J0CQkJQ2hlY2tzdW07CQkJLyogQ2hlY2tzdW0gb2Ygc2VjdGlvbiAyICovCi0JLyogQ1MgaW5mbyBYWFhUT0RPICovCisjZGVmaW5lCUFUS19PRU1fQVNTWV9TSVpFCTEwCS8qIGFzc3kgbnVtIGlzIDkgY2hhcnMgcGx1cyBcMCAqLworCisvKiBPRU0gRlJVIHN0cnVjdHVyZSBmb3IgQWxhY3JpdGVjaCAqLworc3RydWN0IGF0a19vZW0geworCXVuc2lnbmVkIGNoYXIgQXNzeVtBVEtfT0VNX0FTU1lfU0laRV07CiB9OworCisjZGVmaW5lCU9FTV9FRVBST01fRlJVU0laRQk3NAkvKiBzaXplIG9mIE9FTSBmcnUgaW5mbyAtIHNpemUgKi8KKy8qIGNob3NlbiB0byBmaWxsIG91dCB0aGUgUy9XIHNlY3Rpb24gKi8KKwordW5pb24gb2VtX2ZydSB7CQkJLyogT0VNIEZSVSBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGNoYXIgT2VtRnJ1W09FTV9FRVBST01fRlJVU0laRV07CisJc3RydWN0IGF0a19vZW0gQXRrT2VtOworfTsKKworLyogU3RydWN0dXJlIHRvIGhvbGQgdGhlIFMvVyBjb25maWd1cmF0aW9uIGRhdGEuICovCitzdHJ1Y3Qgc3dfY2ZnX2RhdGEgeworCXVzaG9ydAkJCU1hZ2ljV29yZDsJLyogTWFnaWMgd29yZCBmb3Igc2VjdGlvbiAyICovCisJdXNob3J0CQkJVmVyc2lvbjsJLyogRm9ybWF0IHZlcnNpb24gKi8KKwlzdHJ1Y3Qgc3hnX2NvbmZpZ19tYWMJTWFjQWRkcls0XTsJLyogc3BhY2UgZm9yIDQgTUFDIGFkZHJlc3NlcyAqLworCXN0cnVjdCBhdGtfZnJ1CQlBdGtGcnU7CQkvKiBGUlUgaW5mb3JtYXRpb24gKi8KKwl1c2hvcnQJCQlPZW1GcnVGb3JtYXQ7CS8qIE9FTSBGUlUgZm9ybWF0IHR5cGUgKi8KKwl1bmlvbiBvZW1fZnJ1CQlPZW1GcnU7CQkvKiBPRU0gRlJVIGluZm9ybWF0aW9uICovCisJdXNob3J0CQkJQ2hlY2tzdW07CS8qIENoZWNrc3VtIG9mIHNlY3Rpb24gMiAqLworfTsKKworCisvKiBFRVBST00vRmxhc2ggRm9ybWF0ICovCitzdHJ1Y3Qgc3hnX2NvbmZpZyB7CisJLyogSC9XIFNlY3Rpb24gLSBSZWFkIGJ5IFNhaGFyYSBoYXJkd2FyZSAoNTEyIGJ5dGVzKSAqLworCXN0cnVjdCBod19jZmdfZGF0YQkJSHdDZmdbTlVNX0hXX0NGR19FTlRSSUVTXTsKKwkvKiBTL1cgU2VjdGlvbiAtIE90aGVyIGNvbmZpZ3VyYXRpb24gZGF0YSAoMTI4IGJ5dGVzKSAqLworCXN0cnVjdCBzd19jZmdfZGF0YQlTd0NmZzsKK307CisKKyNpZmRlZiBXSU5ET1dTX0NPTVBJTEVSCisvKgorICogIFRoZSBmb2xsb3dpbmcgbWFjcm8gaXMgc29tZXRoaW5nIG9mIGEga2x1ZGdlLCBidXQgaXQgaXMgdGhlIG9ubHkgd2F5CisgKiB0aGF0IEkgY291bGQgZmluZCB0byBjYXRjaCBjZXJ0YWluIHByb2dyYW1taW5nIGVycm9ycyBhdCBjb21waWxlIHRpbWUuCisgKiBJZiB0aGUgYXNzZXJ0ZWQgY29uZGl0aW9uIGlzIHRydWUsIHRoZW4gbm90aGluZyBoYXBwZW5zLiAgSWYgZmFsc2UsIHRoZW4KKyAqIHRoZSBjb21waWxlciB0cmllcyB0byB0eXBlZGVmIGFuIGFycmF5IHdpdGggLTEgbWVtYmVycywgd2hpY2ggZ2VuZXJhdGVzCisgKiBhbiBlcnJvci4gIFVuZm9ydHVuYXRlbHksIHRoZSBlcnJvciBtZXNzYWdlIGlzIG1lYW5pbmdsZXNzLCBidXQgYXQgbGVhc3QKKyAqIGl0IGNhdGNoZXMgdGhlIHByb2JsZW0uICBUaGlzIG1hY3JvIHdvdWxkIGJlIHVubmVjZXNzYXJ5IGlmIHRoZSBjb21waWxlcgorICogYWxsb3dlZCB0aGUgc2l6ZW9mIGFuZCBvZmZzZXRvZiBtYWNyb3MgdG8gYmUgdXNlZCBpbiB0aGUgI2lmIGRpcmVjdGl2ZS4KKyAqLworI2RlZmluZSBjb21waWxlX3RpbWVfYXNzZXJ0KGNvbmQpIFwKKyAgICB0eXBlZGVmIGNoYXIgY29tcF9lcnJvclsoY29uZCkgPyAxIDogLTFdCisKKy8qCisgKiBBIGNvbXBpbGVyIGVycm9yIG9uIGVpdGhlciBvZiB0aGUgbmV4dCB0d28gbGluZXMgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cnVjdCBzeGdfY29uZmlnCisgKiBzdHJ1Y3R1cmUgd2FzIGJ1aWx0IGluY29ycmVjdGx5LiAgVW5mb3J0dW5hdGVseSwgdGhlIGVycm9yIG1lc3NhZ2UgcHJvZHVjZWQKKyAqIGlzIG1lYW5pbmdsZXNzLiAgQnV0IHRoaXMgaXMgYXBwYXJlbnRseSB0aGUgb25seSB3YXkgdG8gY2F0Y2ggdGhpcyBwcm9ibGVtCisgKiBhdCBjb21waWxlIHRpbWUuCisgKi8KK2NvbXBpbGVfdGltZV9hc3NlcnQgKG9mZnNldG9mKHN0cnVjdCBzeGdfY29uZmlnLCBTd0NmZykgPT0gU1dfQ0ZHX1NFQ1RJT05fU1RBUlQpOworY29tcGlsZV90aW1lX2Fzc2VydCAoc2l6ZW9mKHN0cnVjdCBzeGdfY29uZmlnKSA9PSBIV19DRkdfU0VDVElPTl9TSVpFCisJCQkJCQkJKyBTV19DRkdfU0VDVElPTl9TSVpFKTsKKworY29tcGlsZV90aW1lX2Fzc2VydCAob2Zmc2V0b2Yoc3RydWN0IHN4Z19jb25maWdfYSwgU3dDZmcpCisJCQkJCQkgPT0gU1dfQ0ZHX1NFQ1RJT05fU1RBUlRfQSk7Citjb21waWxlX3RpbWVfYXNzZXJ0IChzaXplb2Yoc3RydWN0IHN4Z19jb25maWdfYSkgPT0gSFdfQ0ZHX1NFQ1RJT05fU0laRV9BCisJCQkJCQkgKyBTV19DRkdfU0VDVElPTl9TSVpFKTsKKyNlbmRpZgorLyoKKyAqIFN0cnVjdHVyZSB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gYmV0d2VlbiBkcml2ZXIgYW5kIHVzZXItbW9kZQorICogY29udHJvbCBhcHBsaWNhdGlvbgorICovCitzdHJ1Y3QgYWRhcHRfdXNlcmluZm8geworCWJvb2wJCSAgICBMaW5rVXA7CisJLyogdXNlIExpbmtVcCAtIGFueSBuZWVkIGZvciBvdGhlciBzdGF0ZXM/ICovCisJLyogdTMyICAJICAgIExpbmtTdGF0ZTsgKi8KKwl1MzIgCQkgICAgTGlua1NwZWVkOwkJLyogbm90IGN1cnJlbnRseSBuZWVkZWQgKi8KKwl1MzIgCQkgICAgTGlua0R1cGxleDsJCS8qIG5vdCBjdXJyZW50bHkgbmVlZGVkICovCisgCWVudW0geGN2cl90eXBlCSAgICBYY3ZyVHlwZTsJCS8qIHR5cGUgb2YgeGN2ciBvbiBmaWJlciBjYXJkICovCisJLyogZmliZXIgY2FyZCB4Y3ZyIHZlbmRvciAqLworCXVuc2lnbmVkIGNoYXIJCVhjdnJWZW5kb3JbWENWUl9WRU5ET1JfTEVOXTsKKwl1bnNpZ25lZCBjaGFyCQlYY3ZyTW9kZVtYQ1ZSX01PREVMX0xFTl07CisJdTMyIAkJICAgIFBvcnQ7CQkvKiBub3QgY3VycmVudGx5IG5lZWRlZCAqLworCXUzMiAJCSAgICBQaHlzUG9ydDsJCS8qIG5vdCBjdXJyZW50bHkgbmVlZGVkICovCisJdXNob3J0CQkgICAgUGNpTGFuZXM7CisJdW5zaWduZWQgY2hhcglNYWNBZGRyWzZdOworCXVuc2lnbmVkIGNoYXIgICBDdXJyTWFjQWRkcls2XTsKKwlzdHJ1Y3QgYXRrX2ZydQkgICAgQXRrRnJ1OworCXVzaG9ydCAgCSAgICBPZW1GcnVGb3JtYXQ7CisJdW5pb24gb2VtX2ZydQkgICAgT2VtRnJ1OworfTsKKwogI3ByYWdtYSBwYWNrKHBvcCkKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBNaXNjZWxsYW5lb3VzIEhhcmR3YXJlIGRlZmluaXRpb25zCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNaXNjZWxsYW5lb3VzIEhhcmR3YXJlIGRlZmluaXRpb25zICovCiAKLS8vIFNhaGFyYSAoQVNJQyBsZXZlbCkgZGVmaW5lcwotI2RlZmluZSBTQUhBUkFfR1JBTV9TSVpFCQkweDAyMDAwMAkJLy8gR1JBTSBzaXplIC0gMTI4IEtCCi0jZGVmaW5lIFNBSEFSQV9EUkFNX1NJWkUJCTB4MjAwMDAwCQkvLyBEUkFNIHNpemUgLSAyIE1CCi0jZGVmaW5lIFNBSEFSQV9RUkFNX1NJWkUJCTB4MDA0MDAwCQkvLyBRUkFNIHNpemUgLSAxNksgZW50cmllcyAoNjQgS0IpCi0jZGVmaW5lIFNBSEFSQV9XQ1NfU0laRQkJCTB4MDAyMDAwCQkvLyBXQ1MgLSA4SyBpbnN0cnVjdGlvbnMgKHggMTA4IGJpdHMpCisvKiBIYXJkd2FyZSBUeXBlIGRlZmluaXRpb25zICAqLwogCi0vLyBBcmFiaWEgKGJvYXJkIGxldmVsKSBkZWZpbmVzCi0jZGVmaW5lCUZMQVNIX1NJWkUJCQkweDA4MDAwMAkJLy8gNTEyIEtCICg0IE1iKQotI2RlZmluZQlFRVBST01fU0laRV9YRk1SCQk1MTIJCQkvLyB0cnVlIEVFUFJPTSBzaXplIChieXRlcyksIGluY2x1ZGluZyB4Zm1yIGFyZWEKLSNkZWZpbmUJRUVQUk9NX1NJWkVfTk9fWEZNUgkJMjU2CQkJLy8gRUVQUk9NIHNpemUgZXhjbHVkaW5nIHhmbXIgYXJlYQorLyogU2FoYXJhIChBU0lDIGxldmVsKSBkZWZpbmVzICovCisjZGVmaW5lIFNBSEFSQV9HUkFNX1NJWkUJMHgwMjAwMDAJLyogR1JBTSBzaXplIC0gMTI4IEtCICovCisjZGVmaW5lIFNBSEFSQV9EUkFNX1NJWkUJMHgyMDAwMDAJLyogRFJBTSBzaXplIC0gMiBNQiAqLworLyogUVJBTSBzaXplIC0gMTZLIGVudHJpZXMgKDY0IEtCKSAqLworI2RlZmluZSBTQUhBUkFfUVJBTV9TSVpFCTB4MDA0MDAwCisvKiBXQ1MgLSA4SyBpbnN0cnVjdGlvbnMgKHggMTA4IGJpdHMpICovCisjZGVmaW5lIFNBSEFSQV9XQ1NfU0laRQkJMHgwMDIwMDAKKworLyogQXJhYmlhIChib2FyZCBsZXZlbCkgZGVmaW5lcyAqLworI2RlZmluZQlGTEFTSF9TSVpFCQkweDA4MDAwMAkvKiA1MTIgS0IgKDQgTWIpICovCisvKiBFRVBST00gc2l6ZSAoYnl0ZXMpLCBpbmNsdWRpbmcgeGZtciBhcmVhICovCisjZGVmaW5lCUVFUFJPTV9TSVpFX1hGTVIJMTAyNAorLyogRUVQUk9NIHNpemUgZXhjbHVkaW5nIHhmbXIgYXJlYSAoNTEyICsgMTI4KSAqLworI2RlZmluZQlFRVBST01fU0laRV9OT19YRk1SCTY0MAorLyogRUVQUk9NIHNpemUgZm9yIFNhaGFyYSByZXYgQSAqLworI2RlZmluZQlFRVBST01fU0laRV9SRVZfQQk1MTIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hncGh5Y29kZS0xLjIuaCBiL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hncGh5Y29kZS0xLjIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTQ0OGI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdwaHljb2RlLTEuMi5oCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0ID8gMTk5Ny0yMDA4IEFsYWNyaXRlY2gsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZAorICoKKyAqICRJZDogc3hncGh5Y29kZS5oLHYgMS4yIDIwMDgvMTAvMDIgMDE6NDQ6MDcgRXhwICQKKyAqCisgKiBzeGdwaHljb2RlLmg6CisgKgorICogVGhpcyBmaWxlIFBIWSBtaWNyb2NvZGUgYW5kIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIGRhdGEuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBIWSBNaWNyb2NvZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8KKy8vIFRoZSBmb2xsb3dpbmcgY29udGFpbnMgYm90aCBQSFkgbWljcm9jb2RlIGFuZCBQSFkgcmVnaXN0ZXIKKy8vIGluaXRpYWxpemF0aW9uIGRhdGEuICBJdCBpcyBzcGVjaWZpYyB0byBib3RoIHRoZSBQSFkgYW5kIHRoZQorLy8gdHlwZSBvZiB0cmFuc2NlaXZlci4KKy8vCisKKy8vIERvd25sb2FkIGZvciBBRUwyMDA1QyBQSFkgd2l0aCBTUi9MUiB0cmFuc2NlaXZlciAoMTBHQkFTRS1TUiBvciAxMEdCQVNFLUxSKQorLy8gQUVMMjAwNSBTUiBmaXJtd2FyZSByZXYgMTggKG1pY3JvSW5pdF9tZGlvX1NSX0FFTDIwMDVDXzE4LnR4KS4KK3N0YXRpYyBzdHJ1Y3QgcGh5X3Vjb2RlCVBoeVVjb2RlW10gPSB7CisJLy8gTk9URTogIEFuIGFkZHJlc3Mgb2YgMCBpcyBhIHNwZWNpYWwgY2FzZS4gIFdoZW4gdGhlIGRvd25sb2FkIHJvdXRpbmUKKwkvLyBzZWVzIGFuIGFkZHJlc3Mgb2YgMCwgaXQgZG9lcyBub3Qgd3JpdGUgdG8gdGhlIFBIWS4gIEluc3RlYWQsIGl0IGRlbGF5cworCS8vIHRoZSBkb3dubG9hZC4gIFRoZSBsZW5ndGggb2YgdGhlIGRlbGF5IChpbiBtcykgaXMgZ2l2ZW4gaW4gdGhlIGRhdGEgZmllbGQuCisJLy8gRGVsYXlzIGFyZSByZXF1aXJlZCBhdCBjZXJ0YWluIHBvaW50cy4KKworCS8vIFBsYXRmb3JtLXNwZWNpZmljIE1ESU8gUGF0Y2hlczoKKwkvLyAoaW5jbHVkZSBwYXRjaGVzIGZvciAxMEcgUlggcG9sYXJpdHkgZmxpcCwgNTBNaHogU3ludGgsIGV0YykKKwkvLyBBZGRyCQlEYXRhCisJezB4YzAxNywJMHhmZWIwfSwJLy8gZmxpcCBSWF9MT1MgcG9sYXJpdHkgKG1hbmRhdG9yeSBwYXRjaCBmb3IgU0ZQKyBhcHBsaWNhdGlvbnMpCisJezB4QzAwMSwJMHgwNDI4fSwJLy8gZmxpcCBSWCBzZXJpYWwgcG9sYXJpdHkKKworCXsweGMwMTMsCTB4ZjM0MX0sCS8vIGludmVydCBseG1pdCBjbG9jayAobWFuZGF0b3J5IHBhdGNoKQorCXsweGMyMTAsCTB4ODAwMH0sCS8vIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpCisJezB4YzIxMCwJMHg4MTAwfSwJLy8gcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkKKwl7MHhjMjEwLAkweDgwMDB9LAkvLyByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKQorCXsweGMyMTAsCTB4MDAwMH0sCS8vIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpCisJezB4MDAwMCwJMHgwMDMyfSwJLy8gd2FpdCBmb3IgNTBtcyBmb3IgZGF0YXBhdGggcmVzZXQgdG8gY29tcGxldGUuIChtYW5kYXRvcnkgcGF0Y2gpCisKKwkvLyBUcmFuc2NlaXZlci1zcGVjaWZpYyBNRElPIFBhdGNoZXM6CisJezB4YzAwMywJMHgwMTgxfSwJLy8gKGJpdCA3KSBlbmFibGUgdGhlIENEUiBpbmMgc2V0dGluZyBpbiAxLkMwMDUgKG1hbmRhdG9yeSBwYXRjaCBmb3IgU1IgY29kZSkKKwl7MHhjMDEwLAkweDQ0OGF9LAkvLyAoYml0IDE0KSBtYXNrIG91dCBoaWdoIEJFUiBpbnB1dCBmcm9tIHRoZSBMT1Mgc2lnbmFsIGluIDEuMDAwQSAobWFuZGF0b3J5IHBhdGNoIGZvciBTUiBjb2RlKQorCisJLy8gVHJhbnNjZWl2ZXItc3BlY2lmaWMgTWljcm9jb250cm9sbGVyIEluaXRpYWxpemF0aW9uOgorCXsweGMwNGEsCTB4NTIwMH0sCS8vIGFjdGl2YXRlIG1pY3JvY29udHJvbGxlciBhbmQgcGF1c2UKKwl7MHgwMDAwLAkweDAwMzJ9LAkvLyB3YWl0IDUwbXMgZm9yIG1pY3JvY29udHJvbGxlciBiZWZvcmUgd3JpdGluZyBpbiBjb2RlLgorCisJLy8gY29kZSBibG9jayBzdGFydHMgaGVyZToKKwl7MHhjYzAwLAkweDJmZjR9LAl7MHhjYzAxLAkweDNjZDR9LAl7MHhjYzAyLAkweDIwMTV9LAl7MHhjYzAzLAkweDMxMjV9LAorCXsweGNjMDQsCTB4NjUyNH0sCXsweGNjMDUsCTB4MjdmZn0sCXsweGNjMDYsCTB4MzAwZn0sCXsweGNjMDcsCTB4MmM4Yn0sCisJezB4Y2MwOCwJMHgzMDBifSwJezB4Y2MwOSwJMHg0MDA5fSwJezB4Y2MwYSwJMHg0MDBlfSwJezB4Y2MwYiwJMHgyZjEyfSwKKwl7MHhjYzBjLAkweDMwMDJ9LAl7MHhjYzBkLAkweDEwMDJ9LAl7MHhjYzBlLAkweDIxMTJ9LAl7MHhjYzBmLAkweDMwMTJ9LAorCXsweGNjMTAsCTB4MTAwMn0sCXsweGNjMTEsCTB4MjU3Mn0sCXsweGNjMTIsCTB4MzAxMn0sCXsweGNjMTMsCTB4MTAwMn0sCisJezB4Y2MxNCwJMHhkMDFlfSwJezB4Y2MxNSwJMHgyNzcyfSwJezB4Y2MxNiwJMHgzMDEyfSwJezB4Y2MxNywJMHgxMDAyfSwKKwl7MHhjYzE4LAkweDIwMDR9LAl7MHhjYzE5LAkweDNjODR9LAl7MHhjYzFhLAkweDY0MzZ9LAl7MHhjYzFiLAkweDIwMDd9LAorCXsweGNjMWMsCTB4M2Y4N30sCXsweGNjMWQsCTB4ODY3Nn0sCXsweGNjMWUsCTB4NDBiN30sCXsweGNjMWYsCTB4YTc0Nn0sCisJezB4Y2MyMCwJMHg0MDQ3fSwJezB4Y2MyMSwJMHg1NjczfSwJezB4Y2MyMiwJMHgyOTgyfSwJezB4Y2MyMywJMHgzMDAyfSwKKwl7MHhjYzI0LAkweDEzZDJ9LAl7MHhjYzI1LAkweDhiYmR9LAl7MHhjYzI2LAkweDI4MDJ9LAl7MHhjYzI3LAkweDMwMTJ9LAorCXsweGNjMjgsCTB4MTAwMn0sCXsweGNjMjksCTB4MjAzMn0sCXsweGNjMmEsCTB4MzAxMn0sCXsweGNjMmIsCTB4MTAwMn0sCisJezB4Y2MyYywJMHg1Y2MzfSwJezB4Y2MyZCwJMHgwMzE0fSwJezB4Y2MyZSwJMHgyOTQyfSwJezB4Y2MyZiwJMHgzMDAyfSwKKwl7MHhjYzMwLAkweDEwMDJ9LAl7MHhjYzMxLAkweGQwMTl9LAl7MHhjYzMyLAkweDJmZDJ9LAl7MHhjYzMzLAkweDMwMDJ9LAorCXsweGNjMzQsCTB4MTAwMn0sCXsweGNjMzUsCTB4MmEwNH0sCXsweGNjMzYsCTB4M2M3NH0sCXsweGNjMzcsCTB4NjQzNX0sCisJezB4Y2MzOCwJMHgyZmE0fSwJezB4Y2MzOSwJMHgzY2Q0fSwJezB4Y2MzYSwJMHg2NjI0fSwJezB4Y2MzYiwJMHg1NTYzfSwKKwl7MHhjYzNjLAkweDJkNDJ9LAl7MHhjYzNkLAkweDMwMDJ9LAl7MHhjYzNlLAkweDEzZDJ9LAl7MHhjYzNmLAkweDQ2NGR9LAorCXsweGNjNDAsCTB4MjgwMn0sCXsweGNjNDEsCTB4MzAxMn0sCXsweGNjNDIsCTB4MTAwMn0sCXsweGNjNDMsCTB4MmZkMn0sCisJezB4Y2M0NCwJMHgzMDAyfSwJezB4Y2M0NSwJMHgxMDAyfSwJezB4Y2M0NiwJMHgyZmI0fSwJezB4Y2M0NywJMHgzY2Q0fSwKKwl7MHhjYzQ4LAkweDY2MjR9LAl7MHhjYzQ5LAkweDU1NjN9LAl7MHhjYzRhLAkweDJkNDJ9LAl7MHhjYzRiLAkweDMwMDJ9LAorCXsweGNjNGMsCTB4MTNkMn0sCXsweGNjNGQsCTB4MmU3Mn0sCXsweGNjNGUsCTB4MzAwMn0sCXsweGNjNGYsCTB4MTAwMn0sCisJezB4Y2M1MCwJMHgyZjcyfSwJezB4Y2M1MSwJMHgzMDAyfSwJezB4Y2M1MiwJMHgxMDAyfSwJezB4Y2M1MywJMHgwMDA0fSwKKwl7MHhjYzU0LAkweDI5NDJ9LAl7MHhjYzU1LAkweDMwMDJ9LAl7MHhjYzU2LAkweDEwMDJ9LAl7MHhjYzU3LAkweDIwMzJ9LAorCXsweGNjNTgsCTB4MzAxMn0sCXsweGNjNTksCTB4MTAwMn0sCXsweGNjNWEsCTB4NWNjM30sCXsweGNjNWIsCTB4MDMxN30sCisJezB4Y2M1YywJMHgyZjEyfSwJezB4Y2M1ZCwJMHgzMDAyfSwJezB4Y2M1ZSwJMHgxMDAyfSwJezB4Y2M1ZiwJMHgyOTQyfSwKKwl7MHhjYzYwLAkweDMwMDJ9LAl7MHhjYzYxLAkweDEwMDJ9LAl7MHhjYzYyLAkweDIyY2R9LAl7MHhjYzYzLAkweDMwMWR9LAorCXsweGNjNjQsCTB4MjgwMn0sCXsweGNjNjUsCTB4MzAxMn0sCXsweGNjNjYsCTB4MTAwMn0sCXsweGNjNjcsCTB4MjBiMn0sCisJezB4Y2M2OCwJMHgzMDEyfSwJezB4Y2M2OSwJMHgxMDAyfSwJezB4Y2M2YSwJMHg1YWEzfSwJezB4Y2M2YiwJMHgyZGMyfSwKKwl7MHhjYzZjLAkweDMwMDJ9LAl7MHhjYzZkLAkweDEzMTJ9LAl7MHhjYzZlLAkweDJkMDJ9LAl7MHhjYzZmLAkweDMwMDJ9LAorCXsweGNjNzAsCTB4MTAwMn0sCXsweGNjNzEsCTB4MjgwN30sCXsweGNjNzIsCTB4MzFhN30sCXsweGNjNzMsCTB4MjBjNH0sCisJezB4Y2M3NCwJMHgzYzI0fSwJezB4Y2M3NSwJMHg2NzI0fSwJezB4Y2M3NiwJMHgxMDAyfSwJezB4Y2M3NywJMHgyODA3fSwKKwl7MHhjYzc4LAkweDMxODd9LAl7MHhjYzc5LAkweDIwYzR9LAl7MHhjYzdhLAkweDNjMjR9LAl7MHhjYzdiLAkweDY3MjR9LAorCXsweGNjN2MsCTB4MTAwMn0sCXsweGNjN2QsCTB4MjUxNH0sCXsweGNjN2UsCTB4M2M2NH0sCXsweGNjN2YsCTB4NjQzNn0sCisJezB4Y2M4MCwJMHhkZmY0fSwJezB4Y2M4MSwJMHg2NDM2fSwJezB4Y2M4MiwJMHgxMDAyfSwJezB4Y2M4MywJMHg0MGE0fSwKKwl7MHhjYzg0LAkweDY0M2N9LAl7MHhjYzg1LAkweDQwMTZ9LAl7MHhjYzg2LAkweDhjNmN9LAl7MHhjYzg3LAkweDJiMjR9LAorCXsweGNjODgsCTB4M2MyNH0sCXsweGNjODksCTB4NjQzNX0sCXsweGNjOGEsCTB4MTAwMn0sCXsweGNjOGIsCTB4MmIyNH0sCisJezB4Y2M4YywJMHgzYzI0fSwJezB4Y2M4ZCwJMHg2NDNhfSwJezB4Y2M4ZSwJMHg0MDI1fSwJezB4Y2M4ZiwJMHg4YTVhfSwKKwl7MHhjYzkwLAkweDEwMDJ9LAl7MHhjYzkxLAkweDI2ZDF9LAl7MHhjYzkyLAkweDMwMTF9LAl7MHhjYzkzLAkweDEwMDF9LAorCXsweGNjOTQsCTB4YzdhMH0sCXsweGNjOTUsCTB4MDEwMH0sCXsweGNjOTYsCTB4YzUwMn0sCXsweGNjOTcsCTB4NTNhY30sCisJezB4Y2M5OCwJMHhjNTAzfSwJezB4Y2M5OSwJMHhkNWQ1fSwJezB4Y2M5YSwJMHhjNjAwfSwJezB4Y2M5YiwJMHgyYTZkfSwKKwl7MHhjYzljLAkweGM2MDF9LAl7MHhjYzlkLAkweDJhNGN9LAl7MHhjYzllLAkweGM2MDJ9LAl7MHhjYzlmLAkweDAxMTF9LAorCXsweGNjYTAsCTB4YzYwY30sCXsweGNjYTEsCTB4NTkwMH0sCXsweGNjYTIsCTB4YzcxMH0sCXsweGNjYTMsCTB4MDcwMH0sCisJezB4Y2NhNCwJMHhjNzE4fSwJezB4Y2NhNSwJMHgwNzAwfSwJezB4Y2NhNiwJMHhjNzIwfSwJezB4Y2NhNywJMHg0NzAwfSwKKwl7MHhjY2E4LAkweGM4MDF9LAl7MHhjY2E5LAkweDdmNTB9LAl7MHhjY2FhLAkweGM4MDJ9LAl7MHhjY2FiLAkweDc3NjB9LAorCXsweGNjYWMsCTB4YzgwM30sCXsweGNjYWQsCTB4N2ZjZX0sCXsweGNjYWUsCTB4YzgwNH0sCXsweGNjYWYsCTB4NTcwMH0sCisJezB4Y2NiMCwJMHhjODA1fSwJezB4Y2NiMSwJMHg1ZjExfSwJezB4Y2NiMiwJMHhjODA2fSwJezB4Y2NiMywJMHg0NzUxfSwKKwl7MHhjY2I0LAkweGM4MDd9LAl7MHhjY2I1LAkweDU3ZTF9LAl7MHhjY2I2LAkweGM4MDh9LAl7MHhjY2I3LAkweDI3MDB9LAorCXsweGNjYjgsCTB4YzgwOX0sCXsweGNjYjksCTB4MDAwMH0sCXsweGNjYmEsCTB4YzgyMX0sCXsweGNjYmIsCTB4MDAwMn0sCisJezB4Y2NiYywJMHhjODIyfSwJezB4Y2NiZCwJMHgwMDE0fSwJezB4Y2NiZSwJMHhjODMyfSwJezB4Y2NiZiwJMHgxMTg2fSwKKwl7MHhjY2MwLAkweGM4NDd9LAl7MHhjY2MxLAkweDFlMDJ9LAl7MHhjY2MyLAkweGMwMTN9LAl7MHhjY2MzLAkweGYzNDF9LAorCXsweGNjYzQsCTB4YzAxYX0sCXsweGNjYzUsCTB4MDQ0Nn0sCXsweGNjYzYsCTB4YzAyNH0sCXsweGNjYzcsCTB4MTAwMH0sCisJezB4Y2NjOCwJMHhjMDI1fSwJezB4Y2NjOSwJMHgwYTAwfSwJezB4Y2NjYSwJMHhjMDI2fSwJezB4Y2NjYiwJMHgwYzBjfSwKKwl7MHhjY2NjLAkweGMwMjd9LAl7MHhjY2NkLAkweDBjMGN9LAl7MHhjY2NlLAkweGMwMjl9LAl7MHhjY2NmLAkweDAwYTB9LAorCXsweGNjZDAsCTB4YzAzMH0sCXsweGNjZDEsCTB4MGEwMH0sCXsweGNjZDIsCTB4YzAzY30sCXsweGNjZDMsCTB4MDAxY30sCisJezB4Y2NkNCwJMHhjMDA1fSwJezB4Y2NkNSwJMHg3YTA2fSwJezB4Y2NkNiwJMHgwMDAwfSwJezB4Y2NkNywJMHgyNmQxfSwKKwl7MHhjY2Q4LAkweDMwMTF9LAl7MHhjY2Q5LAkweDEwMDF9LAl7MHhjY2RhLAkweGM2MjB9LAl7MHhjY2RiLAkweDAwMDB9LAorCXsweGNjZGMsCTB4YzYyMX0sCXsweGNjZGQsCTB4MDAzZn0sCXsweGNjZGUsCTB4YzYyMn0sCXsweGNjZGYsCTB4MDAwMH0sCisJezB4Y2NlMCwJMHhjNjIzfSwJezB4Y2NlMSwJMHgwMDAwfSwJezB4Y2NlMiwJMHhjNjI0fSwJezB4Y2NlMywJMHgwMDAwfSwKKwl7MHhjY2U0LAkweGM2MjV9LAl7MHhjY2U1LAkweDAwMDB9LAl7MHhjY2U2LAkweGM2Mjd9LAl7MHhjY2U3LAkweDAwMDB9LAorCXsweGNjZTgsCTB4YzYyOH0sCXsweGNjZTksCTB4MDAwMH0sCXsweGNjZWEsCTB4YzYyY30sCXsweGNjZWIsCTB4MDAwMH0sCisJezB4Y2NlYywJMHgwMDAwfSwJezB4Y2NlZCwJMHgyODA2fSwJezB4Y2NlZSwJMHgzY2I2fSwJezB4Y2NlZiwJMHhjMTYxfSwKKwl7MHhjY2YwLAkweDYxMzR9LAl7MHhjY2YxLAkweDYxMzV9LAl7MHhjY2YyLAkweDU0NDN9LAl7MHhjY2YzLAkweDAzMDN9LAorCXsweGNjZjQsCTB4NjUyNH0sCXsweGNjZjUsCTB4MDAwYn0sCXsweGNjZjYsCTB4MTAwMn0sCXsweGNjZjcsCTB4MjEwNH0sCisJezB4Y2NmOCwJMHgzYzI0fSwJezB4Y2NmOSwJMHgyMTA1fSwJezB4Y2NmYSwJMHgzODA1fSwJezB4Y2NmYiwJMHg2NTI0fSwKKwl7MHhjY2ZjLAkweGRmZjR9LAl7MHhjY2ZkLAkweDQwMDV9LAl7MHhjY2ZlLAkweDY1MjR9LAl7MHhjY2ZmLAkweDEwMDJ9LAorCXsweGNkMDAsCTB4NWRkM30sCXsweGNkMDEsCTB4MDMwNn0sCXsweGNkMDIsCTB4MmZmN30sCXsweGNkMDMsCTB4MzhmN30sCisJezB4Y2QwNCwJMHg2MGI3fSwJezB4Y2QwNSwJMHhkZmZkfSwJezB4Y2QwNiwJMHgwMDBhfSwJezB4Y2QwNywJMHgxMDAyfSwKKwl7MHhjZDA4LAkweDAwMDB9LAorCS8vIGVuZCBvZiBjb2RlIGJsb2NrCisKKwkvLyBVbnBhdXNlIHRoZSBtaWNyb2NvbnRyb2xsZXIgdG8gc3RhcnQgcHJvZ3JhbQorCXsweGNhMDAsCTB4MDA4MH0sCisJezB4Y2ExMiwJMHgwMDAwfSwKKwl7MHgwMDAwLAkweDAwMEF9LAkvLyB3YWl0IDEwbXMganVzdCB0byBiZSBzYWZlCisKKwkvLyBDb25maWd1cmUgdGhlIExFRCdzCisJezB4YzIxNCwJMHgwMDk5fSwJLy8gY29uZmlndXJlIHRoZSBMRUQgZHJpdmVycyAoZm9yIFNhaGFyYSByZXYgQikKKwl7MHhjMjE2LAkweDA0MDB9LAkvLyBjb25maWd1cmUgdGhlIG9uZSBMRUQKKwl7MHhjMjE3LAkweDAwMDB9LAkvLyBkb24ndCBkcml2ZSB0aGUgMm5kIExFRCAoaWYgaXQgZXhpc3RzKQorCisJezB4ZmZmZiwJMHhmZmZmfQkJLy8gdGFibGUgdGVybWluYXRvcgorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hncGh5Y29kZS5oIGIvZHJpdmVycy9zdGFnaW5nL3N4Zy9zeGdwaHljb2RlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2N2YzNTZlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zeGcvc3hncGh5Y29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwOCBBbGFjcml0ZWNoLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAqCi0gKiBzeGdwaHljb2RlLmg6Ci0gKgotICogVGhpcyBmaWxlIFBIWSBtaWNyb2NvZGUgYW5kIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uIGRhdGEuCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFBIWSBNaWNyb2NvZGUKLSAqCi0gKiBUaGUgZm9sbG93aW5nIGNvbnRhaW5zIGJvdGggUEhZIG1pY3JvY29kZSBhbmQgUEhZIHJlZ2lzdGVyCi0gKiBpbml0aWFsaXphdGlvbiBkYXRhLiAgSXQgaXMgc3BlY2lmaWMgdG8gYm90aCB0aGUgUEhZIGFuZCB0aGUKLSAqIHR5cGUgb2YgdHJhbnNjZWl2ZXIuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBEb3dubG9hZCBmb3IgQUVMMjAwNUMgUEhZIHdpdGggU1IvTFIgdHJhbnNjZWl2ZXIgKDEwR0JBU0UtU1Igb3IgMTBHQkFTRS1MUikKLSAqLwotc3RhdGljIHN0cnVjdCBQSFlfVUNPREUgUGh5VWNvZGVbXSA9IHsKLQkvKgotCSAqIE5PVEU6ICBBbiBhZGRyZXNzIG9mIDAgaXMgYSBzcGVjaWFsIGNhc2UuICBXaGVuIHRoZSBkb3dubG9hZCByb3V0aW5lCi0JICogc2VlcyBhbiBhZGRyZXNzIG9mIDAsIGl0IGRvZXMgbm90IHdyaXRlIHRvIHRoZSBQSFkuICBJbnN0ZWFkLCBpdAotCSAqIGRlbGF5cyB0aGUgZG93bmxvYWQuICBUaGUgbGVuZ3RoIG9mIHRoZSBkZWxheSAoaW4gbXMpIGlzIGdpdmVuIGluCi0JICogdGhlIGRhdGEgZmllbGQuCi0JICoKLQkgKiBEZWxheXMgYXJlIHJlcXVpcmVkIGF0IGNlcnRhaW4gcG9pbnRzLgotCSAqLwotCi0JLyoKLQkgKiBQbGF0Zm9ybS1zcGVjaWZpYyBNRElPIFBhdGNoZXM6Ci0JICogKGluY2x1ZGUgcGF0Y2hlcyBmb3IgMTBHIFJYIHBvbGFyaXR5IGZsaXAsIDUwTWh6IFN5bnRoLCBldGMpCi0JICovCi0JLyogQWRkciwgRGF0YSAqLwotCXsweGMwMTcsIDB4ZmViMH0sCS8qIGZsaXAgUlhfTE9TIHBvbGFyaXR5IChtYW5kYXRvcnkgKi8KLQkvKiAgcGF0Y2ggZm9yIFNGUCsgYXBwbGljYXRpb25zKSAqLwotCXsweEMwMDEsIDB4MDQyOH0sCS8qIGZsaXAgUlggc2VyaWFsIHBvbGFyaXR5ICovCi0KLQl7MHhjMDEzLCAweGYzNDF9LAkvKiBpbnZlcnQgbHhtaXQgY2xvY2sgKG1hbmRhdG9yeSBwYXRjaCkgKi8KLQl7MHhjMjEwLCAweDgwMDB9LAkvKiByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKSAqLwotCXsweGMyMTAsIDB4ODEwMH0sCS8qIHJlc2V0IGRhdGFwYXRoIChtYW5kYXRvcnkgcGF0Y2gpICovCi0JezB4YzIxMCwgMHg4MDAwfSwJLyogcmVzZXQgZGF0YXBhdGggKG1hbmRhdG9yeSBwYXRjaCkgKi8KLQl7MHhjMjEwLCAweDAwMDB9LAkvKiByZXNldCBkYXRhcGF0aCAobWFuZGF0b3J5IHBhdGNoKSAqLwotCXsweDAwMDAsIDB4MDAzMn0sCS8qIHdhaXQgZm9yIDUwbXMgZm9yIGRhdGFwYXRoIHJlc2V0IHRvICovCi0JLyogY29tcGxldGUuIChtYW5kYXRvcnkgcGF0Y2gpICovCi0KLQkvKiBDb25maWd1cmUgdGhlIExFRCdzICovCi0JezB4YzIxNCwgMHgwMDk5fSwJLyogY29uZmlndXJlIHRoZSBMRUQgZHJpdmVycyAqLwotCXsweGMyMTYsIDB4NWY1Zn0sCS8qIGNvbmZpZ3VyZSB0aGUgQWN0aXZpdHkgTEVEICovCi0JezB4YzIxNywgMHgzM2ZmfSwJLyogY29uZmlndXJlIHRoZSBMaW5rIExFRCAqLwotCi0JLyogVHJhbnNjZWl2ZXItc3BlY2lmaWMgTURJTyBQYXRjaGVzOiAqLwotCXsweGMwMTAsIDB4NDQ4YX0sCS8qIChiaXQgMTQpIG1hc2sgb3V0IGhpZ2ggQkVSIGlucHV0IGZyb20gdGhlICovCi0JLyogTE9TIHNpZ25hbCBpbiAxLjAwMEEgKi8KLQkvKiAobWFuZGF0b3J5IHBhdGNoIGZvciBTUiBjb2RlKSAqLwotCXsweGMwMDMsIDB4MDE4MX0sCS8qIChiaXQgNykgZW5hYmxlIHRoZSBDRFIgaW5jIHNldHRpbmcgaW4gKi8KLQkvKiAxLkMwMDUgKG1hbmRhdG9yeSBwYXRjaCBmb3IgU1IgY29kZSkgKi8KLQotCS8qIFRyYW5zY2VpdmVyLXNwZWNpZmljIE1pY3JvY29udHJvbGxlciBJbml0aWFsaXphdGlvbjogKi8KLQl7MHhjMDRhLCAweDUyMDB9LAkvKiBhY3RpdmF0ZSBtaWNyb2NvbnRyb2xsZXIgYW5kIHBhdXNlICovCi0JezB4MDAwMCwgMHgwMDMyfSwJLyogd2FpdCA1MG1zIGZvciBtaWNyb2NvbnRyb2xsZXIgYmVmb3JlICovCi0JLyogd3JpdGluZyBpbiBjb2RlLiAqLwotCi0JLyogY29kZSBibG9jayBzdGFydHMgaGVyZTogKi8KLQl7MHhjYzAwLCAweDIwMDl9LAotCXsweGNjMDEsIDB4MzAwOX0sCi0JezB4Y2MwMiwgMHgyN2ZmfSwKLQl7MHhjYzAzLCAweDMwMGZ9LAotCXsweGNjMDQsIDB4MjAwY30sCi0JezB4Y2MwNSwgMHgzMDBjfSwKLQl7MHhjYzA2LCAweDIwYzR9LAotCXsweGNjMDcsIDB4M2MwNH0sCi0JezB4Y2MwOCwgMHg2NDM3fSwKLQl7MHhjYzA5LCAweDIwYzR9LAotCXsweGNjMGEsIDB4M2MwNH0sCi0JezB4Y2MwYiwgMHg2NDM3fSwKLQl7MHhjYzBjLCAweDI1YzR9LAotCXsweGNjMGQsIDB4M2M1NH0sCi0JezB4Y2MwZSwgMHg2NzI0fSwKLQl7MHhjYzBmLCAweDI1YzR9LAotCXsweGNjMTAsIDB4M2M1NH0sCi0JezB4Y2MxMSwgMHg2NzI0fSwKLQl7MHhjYzEyLCAweDIwNDJ9LAotCXsweGNjMTMsIDB4MzAxMn0sCi0JezB4Y2MxNCwgMHgxMDAyfSwKLQl7MHhjYzE1LCAweDI0ODJ9LAotCXsweGNjMTYsIDB4MzAxMn0sCi0JezB4Y2MxNywgMHgxMDAyfSwKLQl7MHhjYzE4LCAweDJhMzJ9LAotCXsweGNjMTksIDB4MzAwMn0sCi0JezB4Y2MxYSwgMHgxMDAyfSwKLQl7MHhjYzFiLCAweDIwMGR9LAotCXsweGNjMWMsIDB4MzA0ZH0sCi0JezB4Y2MxZCwgMHgyODYyfSwKLQl7MHhjYzFlLCAweDMwMTJ9LAotCXsweGNjMWYsIDB4MTAwMn0sCi0JezB4Y2MyMCwgMHgyOTgyfSwKLQl7MHhjYzIxLCAweDMwMDJ9LAotCXsweGNjMjIsIDB4MTAwMn0sCi0JezB4Y2MyMywgMHg2MjhmfSwKLQl7MHhjYzI0LCAweDIwYTR9LAotCXsweGNjMjUsIDB4MzAwNH0sCi0JezB4Y2MyNiwgMHg2NDM4fSwKLQl7MHhjYzI3LCAweDIwYTR9LAotCXsweGNjMjgsIDB4MzAwNH0sCi0JezB4Y2MyOSwgMHg2NDM4fSwKLQl7MHhjYzJhLCAweDIwMTV9LAotCXsweGNjMmIsIDB4MzAwNX0sCi0JezB4Y2MyYywgMHg1ODUzfSwKLQl7MHhjYzJkLCAweDJiZDJ9LAotCXsweGNjMmUsIDB4MzAwMn0sCi0JezB4Y2MyZiwgMHgxMzQyfSwKLQl7MHhjYzMwLCAweDIwMGN9LAotCXsweGNjMzEsIDB4MzAwY30sCi0JezB4Y2MzMiwgMHgyZmY3fSwKLQl7MHhjYzMzLCAweDMwZjd9LAotCXsweGNjMzQsIDB4MjBjNH0sCi0JezB4Y2MzNSwgMHgzYzA0fSwKLQl7MHhjYzM2LCAweDY3MjR9LAotCXsweGNjMzcsIDB4MjBjNH0sCi0JezB4Y2MzOCwgMHgzYzA0fSwKLQl7MHhjYzM5LCAweDY3MjR9LAotCXsweGNjM2EsIDB4MmQzMn0sCi0JezB4Y2MzYiwgMHgzMDAyfSwKLQl7MHhjYzNjLCAweDEwMDJ9LAotCXsweGNjM2QsIDB4MjAwOH0sCi0JezB4Y2MzZSwgMHgzMDA4fSwKLQl7MHhjYzNmLCAweDVjODN9LAotCXsweGNjNDAsIDB4MmQ1Mn0sCi0JezB4Y2M0MSwgMHgzMDAyfSwKLQl7MHhjYzQyLCAweDEzNTJ9LAotCXsweGNjNDMsIDB4MjAwOH0sCi0JezB4Y2M0NCwgMHgzMDA4fSwKLQl7MHhjYzQ1LCAweDVjODN9LAotCXsweGNjNDYsIDB4MmQzMn0sCi0JezB4Y2M0NywgMHgzMDAyfSwKLQl7MHhjYzQ4LCAweDEzNTJ9LAotCXsweGNjNDksIDB4MjAxY30sCi0JezB4Y2M0YSwgMHgzMDBjfSwKLQl7MHhjYzRiLCAweDIwMGR9LAotCXsweGNjNGMsIDB4MzEwZH0sCi0JezB4Y2M0ZCwgMHgyODYyfSwKLQl7MHhjYzRlLCAweDMwMTJ9LAotCXsweGNjNGYsIDB4MTAwMn0sCi0JezB4Y2M1MCwgMHgyZWQyfSwKLQl7MHhjYzUxLCAweDMwMDJ9LAotCXsweGNjNTIsIDB4MTM0Mn0sCi0JezB4Y2M1MywgMHg2ZjcyfSwKLQl7MHhjYzU0LCAweDEwMDJ9LAotCXsweGNjNTUsIDB4NjI4Zn0sCi0JezB4Y2M1NiwgMHgyNTE0fSwKLQl7MHhjYzU3LCAweDNjNjR9LAotCXsweGNjNTgsIDB4NjQzNn0sCi0JezB4Y2M1OSwgMHgyNTE0fSwKLQl7MHhjYzVhLCAweDNjNjR9LAotCXsweGNjNWIsIDB4NjQzNn0sCi0JezB4Y2M1YywgMHgyZmE0fSwKLQl7MHhjYzVkLCAweDNjZDR9LAotCXsweGNjNWUsIDB4NjYyNH0sCi0JezB4Y2M1ZiwgMHgyZmE0fSwKLQl7MHhjYzYwLCAweDNjZDR9LAotCXsweGNjNjEsIDB4NjYyNH0sCi0JezB4Y2M2MiwgMHgyZjQ1fSwKLQl7MHhjYzYzLCAweDMwMTV9LAotCXsweGNjNjQsIDB4NTY1M30sCi0JezB4Y2M2NSwgMHgyZWIyfSwKLQl7MHhjYzY2LCAweDMwMDJ9LAotCXsweGNjNjcsIDB4MTNkMn0sCi0JezB4Y2M2OCwgMHgyZWQyfSwKLQl7MHhjYzY5LCAweDMwMDJ9LAotCXsweGNjNmEsIDB4MTAwMn0sCi0JezB4Y2M2YiwgMHg2ZjcyfSwKLQl7MHhjYzZjLCAweDEwMDJ9LAotCXsweGNjNmQsIDB4NjI4Zn0sCi0JezB4Y2M2ZSwgMHgyNjAyfSwKLQl7MHhjYzZmLCAweDMwMTJ9LAotCXsweGNjNzAsIDB4MTAwMn0sCi0JezB4Y2M3MSwgMHgyMDBkfSwKLQl7MHhjYzcyLCAweDMyMGR9LAotCXsweGNjNzMsIDB4Mjg2Mn0sCi0JezB4Y2M3NCwgMHgzMDEyfSwKLQl7MHhjYzc1LCAweDEwMDJ9LAotCXsweGNjNzYsIDB4MjVjNH0sCi0JezB4Y2M3NywgMHgzYzU0fSwKLQl7MHhjYzc4LCAweDY0Mzd9LAotCXsweGNjNzksIDB4MjVjNH0sCi0JezB4Y2M3YSwgMHgzYzU0fSwKLQl7MHhjYzdiLCAweDY0Mzd9LAotCXsweGNjN2MsIDB4MjBjNH0sCi0JezB4Y2M3ZCwgMHgzYzA0fSwKLQl7MHhjYzdlLCAweDY3MjR9LAotCXsweGNjN2YsIDB4MjBjNH0sCi0JezB4Y2M4MCwgMHgzYzA0fSwKLQl7MHhjYzgxLCAweDY3MjR9LAotCXsweGNjODIsIDB4NmY3Mn0sCi0JezB4Y2M4MywgMHgxMDAyfSwKLQl7MHhjYzg0LCAweDYyOGZ9LAotCXsweGNjODUsIDB4MjZmMn0sCi0JezB4Y2M4NiwgMHgzMDEyfSwKLQl7MHhjYzg3LCAweDEwMDJ9LAotCXsweGNjODgsIDB4YzUwM30sCi0JezB4Y2M4OSwgMHhkNWQ1fSwKLQl7MHhjYzhhLCAweGM2MDB9LAotCXsweGNjOGIsIDB4MmE2ZH0sCi0JezB4Y2M4YywgMHhjNjAxfSwKLQl7MHhjYzhkLCAweDJhNGN9LAotCXsweGNjOGUsIDB4YzYwMn0sCi0JezB4Y2M4ZiwgMHgwMTExfSwKLQl7MHhjYzkwLCAweGM2MGN9LAotCXsweGNjOTEsIDB4NTkwMH0sCi0JezB4Y2M5MiwgMHhjNzEwfSwKLQl7MHhjYzkzLCAweDA3MDB9LAotCXsweGNjOTQsIDB4YzcxOH0sCi0JezB4Y2M5NSwgMHgwNzAwfSwKLQl7MHhjYzk2LCAweGM3MjB9LAotCXsweGNjOTcsIDB4NDcwMH0sCi0JezB4Y2M5OCwgMHhjODAxfSwKLQl7MHhjYzk5LCAweDdmNTB9LAotCXsweGNjOWEsIDB4YzgwMn0sCi0JezB4Y2M5YiwgMHg3NzYwfSwKLQl7MHhjYzljLCAweGM4MDN9LAotCXsweGNjOWQsIDB4N2ZjZX0sCi0JezB4Y2M5ZSwgMHhjODA0fSwKLQl7MHhjYzlmLCAweDU3MDB9LAotCXsweGNjYTAsIDB4YzgwNX0sCi0JezB4Y2NhMSwgMHg1ZjExfSwKLQl7MHhjY2EyLCAweGM4MDZ9LAotCXsweGNjYTMsIDB4NDc1MX0sCi0JezB4Y2NhNCwgMHhjODA3fSwKLQl7MHhjY2E1LCAweDU3ZTF9LAotCXsweGNjYTYsIDB4YzgwOH0sCi0JezB4Y2NhNywgMHgyNzAwfSwKLQl7MHhjY2E4LCAweGM4MDl9LAotCXsweGNjYTksIDB4MDAwMH0sCi0JezB4Y2NhYSwgMHhjODIxfSwKLQl7MHhjY2FiLCAweDAwMDJ9LAotCXsweGNjYWMsIDB4YzgyMn0sCi0JezB4Y2NhZCwgMHgwMDE0fSwKLQl7MHhjY2FlLCAweGM4MzJ9LAotCXsweGNjYWYsIDB4MTE4Nn0sCi0JezB4Y2NiMCwgMHhjODQ3fSwKLQl7MHhjY2IxLCAweDFlMDJ9LAotCXsweGNjYjIsIDB4YzAxM30sCi0JezB4Y2NiMywgMHhmMzQxfSwKLQl7MHhjY2I0LCAweGMwMWF9LAotCXsweGNjYjUsIDB4MDQ0Nn0sCi0JezB4Y2NiNiwgMHhjMDI0fSwKLQl7MHhjY2I3LCAweDEwMDB9LAotCXsweGNjYjgsIDB4YzAyNX0sCi0JezB4Y2NiOSwgMHgwYTAwfSwKLQl7MHhjY2JhLCAweGMwMjZ9LAotCXsweGNjYmIsIDB4MGMwY30sCi0JezB4Y2NiYywgMHhjMDI3fSwKLQl7MHhjY2JkLCAweDBjMGN9LAotCXsweGNjYmUsIDB4YzAyOX0sCi0JezB4Y2NiZiwgMHgwMGEwfSwKLQl7MHhjY2MwLCAweGMwMzB9LAotCXsweGNjYzEsIDB4MGEwMH0sCi0JezB4Y2NjMiwgMHhjMDNjfSwKLQl7MHhjY2MzLCAweDAwMWN9LAotCXsweGNjYzQsIDB4YzAwNX0sCi0JezB4Y2NjNSwgMHg3YTA2fSwKLQl7MHhjY2M2LCAweDAwMDB9LAotCXsweGNjYzcsIDB4MDAwMH0sCi0JezB4Y2NjOCwgMHg2MjhmfSwKLQl7MHhjY2M5LCAweDI2ZjJ9LAotCXsweGNjY2EsIDB4MzAxMn0sCi0JezB4Y2NjYiwgMHgxMDAyfSwKLQl7MHhjY2NjLCAweGM2MjB9LAotCXsweGNjY2QsIDB4MDAwMH0sCi0JezB4Y2NjZSwgMHhjNjIxfSwKLQl7MHhjY2NmLCAweDAwM2Z9LAotCXsweGNjZDAsIDB4YzYyMn0sCi0JezB4Y2NkMSwgMHgwMDAwfSwKLQl7MHhjY2QyLCAweGM2MjN9LAotCXsweGNjZDMsIDB4MDAwMH0sCi0JezB4Y2NkNCwgMHhjNjI0fSwKLQl7MHhjY2Q1LCAweDAwMDB9LAotCXsweGNjZDYsIDB4YzYyNX0sCi0JezB4Y2NkNywgMHgwMDAwfSwKLQl7MHhjY2Q4LCAweGM2Mjd9LAotCXsweGNjZDksIDB4MDAwMH0sCi0JezB4Y2NkYSwgMHhjNjI4fSwKLQl7MHhjY2RiLCAweDAwMDB9LAotCXsweGNjZGMsIDB4YzYyY30sCi0JezB4Y2NkZCwgMHgwMDAwfSwKLQl7MHhjY2RlLCAweDAwMDB9LAotCXsweGNjZGYsIDB4MDAwMH0sCi0JezB4Y2NlMCwgMHg2MjhmfSwKLQl7MHhjY2UxLCAweGQwMTl9LAotCXsweGNjZTIsIDB4MjZmMn0sCi0JezB4Y2NlMywgMHgzMDEyfSwKLQl7MHhjY2U0LCAweDEwMDJ9LAotCXsweGNjZTUsIDB4YzIxMH0sCi0JezB4Y2NlNiwgMHg4MDAwfSwKLQl7MHhjY2U3LCAweGMyMTB9LAotCXsweGNjZTgsIDB4ODAxMH0sCi0JezB4Y2NlOSwgMHhjMjEwfSwKLQl7MHhjY2VhLCAweDgwMDB9LAotCXsweGNjZWIsIDB4YzIxMH0sCi0JezB4Y2NlYywgMHgwMDAwfSwKLQl7MHhjY2VkLCAweDAwMDB9LAotCXsweGNjZWUsIDB4MDAwMH0sCi0JezB4Y2NlZiwgMHg4MjIxfSwKLQl7MHhjY2YwLCAweDI3NTJ9LAotCXsweGNjZjEsIDB4MzAxMn0sCi0JezB4Y2NmMiwgMHgxMDAyfSwKLQl7MHhjY2YzLCAweDZmNzJ9LAotCXsweGNjZjQsIDB4MTAwMn0sCi0JezB4Y2NmNSwgMHgyODA2fSwKLQl7MHhjY2Y2LCAweDMwMDZ9LAotCXsweGNjZjcsIDB4MjAwN30sCi0JezB4Y2NmOCwgMHgzY2M3fSwKLQl7MHhjY2Y5LCAweGUxNjF9LAotCXsweGNjZmEsIDB4YzE3MX0sCi0JezB4Y2NmYiwgMHg2MTM0fSwKLQl7MHhjY2ZjLCAweDYxMzV9LAotCXsweGNjZmQsIDB4NTQ1M30sCi0JezB4Y2NmZSwgMHgyODU4fSwKLQl7MHhjY2ZmLCAweDMwMTh9LAotCXsweGNkMDAsIDB4MTM0OH0sCi0JezB4Y2QwMSwgMHg2NTI0fSwKLQl7MHhjZDAyLCAweDI3Yjh9LAotCXsweGNkMDMsIDB4MzAxOH0sCi0JezB4Y2QwNCwgMHgxMDA4fSwKLQl7MHhjZDA1LCAweDEwMDJ9LAotCXsweGNkMDYsIDB4NjI4Zn0sCi0JezB4Y2QwNywgMHg1ZGQzfSwKLQl7MHhjZDA4LCAweDI5MDZ9LAotCXsweGNkMDksIDB4MzAxNn0sCi0JezB4Y2QwYSwgMHgxMzA2fSwKLQl7MHhjZDBiLCAweDJmZjd9LAotCXsweGNkMGMsIDB4MzBmN30sCi0JezB4Y2QwZCwgMHg2MGI3fSwKLQl7MHhjZDBlLCAweGRmZmR9LAotCXsweGNkMGYsIDB4MDAwOH0sCi0JezB4Y2QxMCwgMHg2ZjcyfSwKLQl7MHhjZDExLCAweDEwMDJ9LAotCXsweGNkMTIsIDB4MDAwMH0sCi0JezB4Y2RmZiwgMHgwYTAxfSwKLQkvKiBlbmQgb2YgY29kZSBibG9jayAqLwotCi0JLyogVW5wYXVzZSB0aGUgbWljcm9jb250cm9sbGVyIHRvIHN0YXJ0IHByb2dyYW0gKi8KLQl7MHhjYTAwLCAweDAwODB9LAotCXsweGNhMTIsIDB4MDAwMH0sCi0JezB4MDAwMCwgMHgwMDBBfSwJLyogd2FpdCAxMG1zIGp1c3QgdG8gYmUgc2FmZSAqLwotCXsweGZmZmYsIDB4ZmZmZn0JLyogdGFibGUgdGVybWluYXRvciAqLwotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91YzIzMjIvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy91YzIzMjIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTBjNmU3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91YzIzMjIvS2NvbmZpZwpAQCAtMCwwICsxLDEwIEBACitjb25maWcgVVNCX1NFUklBTF9BVEVOMjAxMQorCXRyaXN0YXRlICJBVEVOIDIwMTEgVVNCIHRvIHNlcmlhbCBkZXZpY2Ugc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwlkZWZhdWx0IE4KKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIEFURU4gMjAxMSBkdWFsIHBvcnQgVVNCIHRvIHNlcmlhbAorCSAgYWRhcHRlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgYXRlbjIwMTEuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdWMyMzIyL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWMxOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmotJChDT05GSUdfVVNCX1NFUklBTF9BVEVOMjAxMSkJKz0gYXRlbjIwMTEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3VjMjMyMi9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxODlhNjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdWMyMzIyL1RPRE8KQEAgLTAsMCArMSw3IEBACitUT0RPOgorCS0gY2hlY2twYXRjaC5wbCBjbGVhbnVwcworCS0gcmVtb3ZlIGRlYWQgYW5kIHVzZWxlc3MgY29kZSAoYXVkaXRpbmcgdGhlIHR0eSBpb2N0bHMgdG8KKwkgIHZlcmlmeSB0aGF0IHRoZXkgcmVhbGx5IGFyZSBjb3JyZWN0IGFuZCBuZWVkZWQuKQorCitQbGVhc2Ugc2VuZCBhbnkgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPiBhbmQKK1J1c3NlbGwgTGFuZyA8Z3N2aWV3QGdob3N0Z3VtLmNvbS5hdT4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdWMyMzIyL2F0ZW4yMDExLmMgYi9kcml2ZXJzL3N0YWdpbmcvdWMyMzIyL2F0ZW4yMDExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViNzA1NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91YzIzMjIvYXRlbjIwMTEuYwpAQCAtMCwwICsxLDI0NTIgQEAKKy8qCisgKiBBdGVuIDIwMTEgVVNCIHNlcmlhbCBkcml2ZXIgZm9yIDQgcG9ydCBkZXZpY2VzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIEluc2lkZSBPdXQgTmV0d29ya3MKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyLCAyMDA5IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm92ZWxsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CisKKworI2RlZmluZSBaTFBfUkVHMQkJMHgzQQkvKiBaZXJvX0ZsYWdfUmVnMSA1OCAqLworI2RlZmluZSBaTFBfUkVHMgkJMHgzQgkvKiBaZXJvX0ZsYWdfUmVnMiA1OSAqLworI2RlZmluZSBaTFBfUkVHMwkJMHgzQwkvKiBaZXJvX0ZsYWdfUmVnMyA2MCAqLworI2RlZmluZSBaTFBfUkVHNAkJMHgzRAkvKiBaZXJvX0ZsYWdfUmVnNCA2MSAqLworI2RlZmluZSBaTFBfUkVHNQkJMHgzRQkvKiBaZXJvX0ZsYWdfUmVnNSA2MiAqLworCisvKiBJbnRlcnJ1cHQgUm90aW51ZSBEZWZpbmVzCSovCisjZGVmaW5lIFNFUklBTF9JSVJfUkxTCQkweDA2CisjZGVmaW5lIFNFUklBTF9JSVJfUkRBCQkweDA0CisjZGVmaW5lIFNFUklBTF9JSVJfQ1RJCQkweDBjCisjZGVmaW5lIFNFUklBTF9JSVJfVEhSCQkweDAyCisjZGVmaW5lIFNFUklBTF9JSVJfTVMJCTB4MDAKKworLyogRW11bGF0aW9uIG9mIHRoZSBiaXQgbWFzayBvbiB0aGUgTElORSBTVEFUVVMgUkVHSVNURVIuICAqLworI2RlZmluZSBTRVJJQUxfTFNSX0RSCQkweDAwMDEKKyNkZWZpbmUgU0VSSUFMX0xTUl9PRQkJMHgwMDAyCisjZGVmaW5lIFNFUklBTF9MU1JfUEUJCTB4MDAwNAorI2RlZmluZSBTRVJJQUxfTFNSX0ZFCQkweDAwMDgKKyNkZWZpbmUgU0VSSUFMX0xTUl9CSQkJMHgwMDEwCisjZGVmaW5lIFNFUklBTF9MU1JfVEhSRQkJMHgwMDIwCisjZGVmaW5lIFNFUklBTF9MU1JfVEVNVAkJMHgwMDQwCisjZGVmaW5lIFNFUklBTF9MU1JfRklGT0VSUgkweDAwODAKKworLyogTVNSIGJpdCBkZWZpbmVzKHBsYWNlIGhvbGRlcnMpICovCisjZGVmaW5lIEFURU5fTVNSX0RFTFRBX0NUUwkweDEwCisjZGVmaW5lIEFURU5fTVNSX0RFTFRBX0RTUgkweDIwCisjZGVmaW5lIEFURU5fTVNSX0RFTFRBX1JJCTB4NDAKKyNkZWZpbmUgQVRFTl9NU1JfREVMVEFfQ0QJMHg4MAorCisvKiBTZXJpYWwgUG9ydCByZWdpc3RlciBBZGRyZXNzICovCisjZGVmaW5lIFJFQ0VJVkVfQlVGRkVSX1JFR0lTVEVSCQkoKF9fdTE2KSgweDAwKSkKKyNkZWZpbmUgVFJBTlNNSVRfSE9MRElOR19SRUdJU1RFUgkoKF9fdTE2KSgweDAwKSkKKyNkZWZpbmUgSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUgkoKF9fdTE2KSgweDAxKSkKKyNkZWZpbmUgSU5URVJSVVBUX0lERU5UX1JFR0lTVEVSCSgoX191MTYpKDB4MDIpKQorI2RlZmluZSBGSUZPX0NPTlRST0xfUkVHSVNURVIJCSgoX191MTYpKDB4MDIpKQorI2RlZmluZSBMSU5FX0NPTlRST0xfUkVHSVNURVIJCSgoX191MTYpKDB4MDMpKQorI2RlZmluZSBNT0RFTV9DT05UUk9MX1JFR0lTVEVSCQkoKF9fdTE2KSgweDA0KSkKKyNkZWZpbmUgTElORV9TVEFUVVNfUkVHSVNURVIJCSgoX191MTYpKDB4MDUpKQorI2RlZmluZSBNT0RFTV9TVEFUVVNfUkVHSVNURVIJCSgoX191MTYpKDB4MDYpKQorI2RlZmluZSBTQ1JBVENIX1BBRF9SRUdJU1RFUgkJKChfX3UxNikoMHgwNykpCisjZGVmaW5lIERJVklTT1JfTEFUQ0hfTFNCCQkoKF9fdTE2KSgweDAwKSkKKyNkZWZpbmUgRElWSVNPUl9MQVRDSF9NU0IJCSgoX191MTYpKDB4MDEpKQorCisjZGVmaW5lIFNQMV9SRUdJU1RFUgkJCSgoX191MTYpKDB4MDApKQorI2RlZmluZSBDT05UUk9MMV9SRUdJU1RFUgkJKChfX3UxNikoMHgwMSkpCisjZGVmaW5lIENMS19NVUxUSV9SRUdJU1RFUgkJKChfX3UxNikoMHgwMikpCisjZGVmaW5lIENMS19TVEFSVF9WQUxVRV9SRUdJU1RFUgkoKF9fdTE2KSgweDAzKSkKKyNkZWZpbmUgRENSMV9SRUdJU1RFUgkJCSgoX191MTYpKDB4MDQpKQorI2RlZmluZSBHUElPX1JFR0lTVEVSCQkJKChfX3UxNikoMHgwNykpCisKKyNkZWZpbmUgU0VSSUFMX0xDUl9ETEFCCQkJKChfX3UxNikoMHgwMDgwKSkKKworLyoKKyAqIFVSQiBQT09MIHJlbGF0ZWQgZGVmaW5lcworICovCisjZGVmaW5lIE5VTV9VUkJTCQkJMTYJLyogVVJCIENvdW50ICovCisjZGVmaW5lIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRQkzMgkvKiBVUkIgU2l6ZSAgKi8KKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FURU5JTlRMCQkweDA1NTcKKyNkZWZpbmUgQVRFTklOVExfREVWSUNFX0lEXzIwMTEJCTB4MjAxMQorI2RlZmluZSBBVEVOSU5UTF9ERVZJQ0VfSURfNzgyMAkJMHg3ODIwCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0FURU5JTlRMLCBBVEVOSU5UTF9ERVZJQ0VfSURfMjAxMSkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVEVOSU5UTCwgQVRFTklOVExfREVWSUNFX0lEXzc4MjApIH0sCisJeyB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYWxsIG9mIHRoZSBsb2NhbCBwb3J0IGluZm9ybWF0aW9uICovCitzdHJ1Y3QgQVRFTklOVExfcG9ydCB7CisJaW50CQlwb3J0X251bTsgICAgICAgICAgLypBY3R1YWwgcG9ydCBudW1iZXIgaW4gdGhlIGRldmljZSgxLDIsZXRjKSovCisJX191OAkJYnVsa19vdXRfZW5kcG9pbnQ7ICAgCS8qIHRoZSBidWxrIG91dCBlbmRwb2ludCBoYW5kbGUgKi8KKwl1bnNpZ25lZCBjaGFyCSpidWxrX291dF9idWZmZXI7ICAgICAJLyogYnVmZmVyIHVzZWQgZm9yIHRoZSBidWxrIG91dCBlbmRwb2ludCAqLworCXN0cnVjdCB1cmIJKndyaXRlX3VyYjsJICAgICAJLyogd3JpdGUgVVJCIGZvciB0aGlzIHBvcnQgKi8KKwlfX3U4CQlidWxrX2luX2VuZHBvaW50OwkvKiB0aGUgYnVsayBpbiBlbmRwb2ludCBoYW5kbGUgKi8KKwl1bnNpZ25lZCBjaGFyCSpidWxrX2luX2J1ZmZlcjsJLyogdGhlIGJ1ZmZlciB3ZSB1c2UgZm9yIHRoZSBidWxrIGluIGVuZHBvaW50ICovCisJc3RydWN0IHVyYgkqcmVhZF91cmI7CSAgICAgCS8qIHJlYWQgVVJCIGZvciB0aGlzIHBvcnQgKi8KKwlfX3U4CQlzaGFkb3dMQ1I7CQkvKiBsYXN0IExDUiB2YWx1ZSByZWNlaXZlZCAqLworCV9fdTgJCXNoYWRvd01DUjsJCS8qIGxhc3QgTUNSIHZhbHVlIHJlY2VpdmVkICovCisJY2hhcgkJb3BlbjsKKwljaGFyCQljaGFzZVJlc3BvbnNlUGVuZGluZzsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2NoYXNlOwkJLyogZm9yIGhhbmRsaW5nIHNsZWVwaW5nIHdoaWxlIHdhaXRpbmcgZm9yIGNoYXNlIHRvIGZpbmlzaCAqLworCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfY29tbWFuZDsJCS8qIGZvciBoYW5kbGluZyBzbGVlcGluZyB3aGlsZSB3YWl0aW5nIGZvciBjb21tYW5kIHRvIGZpbmlzaCAqLworCXN0cnVjdCBhc3luY19pY291bnQJaWNvdW50OworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnBvcnQ7CQkJLyogbG9vcCBiYWNrIHRvIHRoZSBvd25lciBvZiB0aGlzIG9iamVjdCAqLworCS8qT2Zmc2V0cyovCisJX191OAkJU3BSZWdPZmZzZXQ7CisJX191OAkJQ29udHJvbFJlZ09mZnNldDsKKwlfX3U4CQlEY3JSZWdPZmZzZXQ7CisJLyogZm9yIHByb2Nlc3NpbmcgY29udHJvbCBVUkJTIGluIGludGVycnVwdCBjb250ZXh0ICovCisJc3RydWN0IHVyYiAJKmNvbnRyb2xfdXJiOworCWNoYXIJCSpjdHJsX2J1ZjsKKwlpbnQJCU1zckxzcjsKKworCXN0cnVjdCB1cmIJKndyaXRlX3VyYl9wb29sW05VTV9VUkJTXTsKKwkvKiB3ZSBwYXNzIGEgcG9pbnRlciB0byB0aGlzIGFzIHRoZSBhcmd1ZW1lbnQgc2VudCB0byBjeXByZXNzX3NldF90ZXJtaW9zIG9sZF90ZXJtaW9zICovCisJc3RydWN0IGt0ZXJtaW9zCXRtcF90ZXJtaW9zOyAgICAgICAgLyogc3RvcmVzIHRoZSBvbGQgdGVybWlvcyBzZXR0aW5ncyAqLworCXNwaW5sb2NrX3QgCWxvY2s7ICAgICAgICAgICAgICAgICAgIC8qIHByaXZhdGUgbG9jayAqLworfTsKKworLyogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgYWxsIG9mIHRoZSBpbmRpdmlkdWFsIHNlcmlhbCBkZXZpY2UgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBBVEVOSU5UTF9zZXJpYWwgeworCV9fdTgJCWludGVycnVwdF9pbl9lbmRwb2ludDsJCS8qIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQgaGFuZGxlICovCisJdW5zaWduZWQgY2hhcgkqaW50ZXJydXB0X2luX2J1ZmZlcjsJCS8qIHRoZSBidWZmZXIgd2UgdXNlIGZvciB0aGUgaW50ZXJydXB0IGVuZHBvaW50ICovCisJc3RydWN0IHVyYgkqaW50ZXJydXB0X3JlYWRfdXJiOwkvKiBvdXIgaW50ZXJydXB0IHVyYiAqLworCV9fdTgJCWJ1bGtfaW5fZW5kcG9pbnQ7CS8qIHRoZSBidWxrIGluIGVuZHBvaW50IGhhbmRsZSAqLworCXVuc2lnbmVkIGNoYXIJKmJ1bGtfaW5fYnVmZmVyOwkJLyogdGhlIGJ1ZmZlciB3ZSB1c2UgZm9yIHRoZSBidWxrIGluIGVuZHBvaW50ICovCisJc3RydWN0IHVyYiAJKnJlYWRfdXJiOwkJLyogb3VyIGJ1bGsgcmVhZCB1cmIgKi8KKwlfX3U4CQlidWxrX291dF9lbmRwb2ludDsJLyogdGhlIGJ1bGsgb3V0IGVuZHBvaW50IGhhbmRsZSAqLworCXN0cnVjdCB1c2Jfc2VyaWFsCSpzZXJpYWw7CS8qIGxvb3AgYmFjayB0byB0aGUgb3duZXIgb2YgdGhpcyBvYmplY3QgKi8KKwlpbnQJQVRFTjIwMTFfc3BlY3RydW1fMm9yNHBvcnRzOyAJLyogdGhpcyBzYXlzIHRoZSBudW1iZXIgb2YgcG9ydHMgaW4gdGhlIGRldmljZSAqLworCS8qIEluZGljYXRlcyBhYm91dCB0aGUgbm8ub2Ygb3BlbmVkIHBvcnRzIG9mIGFuIGluZGl2aWR1YWwgVVNCLXNlcmlhbCBhZGFwYXRlci4gKi8KKwl1bnNpZ25lZCBpbnQJTm9PZk9wZW5Qb3J0czsKKwkvKiBhIGZsYWcgZm9yIFN0YXR1cyBlbmRwb2ludCBwb2xsaW5nICovCisJdW5zaWduZWQgY2hhcglzdGF0dXNfcG9sbGluZ19zdGFydGVkOworfTsKKworc3RhdGljIHZvaWQgQVRFTjIwMTFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCQkgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcyk7CitzdGF0aWMgdm9pZCBBVEVOMjAxMV9jaGFuZ2VfcG9ydF9zZXR0aW5ncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCQkgIHN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0LAorCQkJCQkgIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQml0IGRlZmluaXRpb25zIGZvciBlYWNoIHJlZ2lzdGVyICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBMQ1JfQklUU181CQkweDAwCS8qIDUgYml0cy9jaGFyICovCisjZGVmaW5lIExDUl9CSVRTXzYJCTB4MDEJLyogNiBiaXRzL2NoYXIgKi8KKyNkZWZpbmUgTENSX0JJVFNfNwkJMHgwMgkvKiA3IGJpdHMvY2hhciAqLworI2RlZmluZSBMQ1JfQklUU184CQkweDAzCS8qIDggYml0cy9jaGFyICovCisjZGVmaW5lIExDUl9CSVRTX01BU0sJCTB4MDMJLyogTWFzayBmb3IgYml0cy9jaGFyIGZpZWxkICovCisKKyNkZWZpbmUgTENSX1NUT1BfMQkJMHgwMAkvKiAxIHN0b3AgYml0ICovCisjZGVmaW5lIExDUl9TVE9QXzFfNQkJMHgwNAkvKiAxLjUgc3RvcCBiaXRzIChpZiA1ICAgYml0cy9jaGFyKSAqLworI2RlZmluZSBMQ1JfU1RPUF8yCQkweDA0CS8qIDIgc3RvcCBiaXRzICAgKGlmIDYtOCBiaXRzL2NoYXIpICovCisjZGVmaW5lIExDUl9TVE9QX01BU0sJCTB4MDQJLyogTWFzayBmb3Igc3RvcCBiaXRzIGZpZWxkICovCisKKyNkZWZpbmUgTENSX1BBUl9OT05FCQkweDAwCS8qIE5vIHBhcml0eSAqLworI2RlZmluZSBMQ1JfUEFSX09ERAkJMHgwOAkvKiBPZGQgcGFyaXR5ICovCisjZGVmaW5lIExDUl9QQVJfRVZFTgkJMHgxOAkvKiBFdmVuIHBhcml0eSAqLworI2RlZmluZSBMQ1JfUEFSX01BUksJCTB4MjgJLyogRm9yY2UgcGFyaXR5IGJpdCB0byAxICovCisjZGVmaW5lIExDUl9QQVJfU1BBQ0UJCTB4MzgJLyogRm9yY2UgcGFyaXR5IGJpdCB0byAwICovCisjZGVmaW5lIExDUl9QQVJfTUFTSwkJMHgzOAkvKiBNYXNrIGZvciBwYXJpdHkgZmllbGQgKi8KKworI2RlZmluZSBMQ1JfU0VUX0JSRUFLCQkweDQwCS8qIFNldCBCcmVhayBjb25kaXRpb24gKi8KKyNkZWZpbmUgTENSX0RMX0VOQUJMRQkJMHg4MAkvKiBFbmFibGUgYWNjZXNzIHRvIGRpdmlzb3IgbGF0Y2ggKi8KKworI2RlZmluZSBNQ1JfRFRSCQkJMHgwMQkvKiBBc3NlcnQgRFRSICovCisjZGVmaW5lIE1DUl9SVFMJCQkweDAyCS8qIEFzc2VydCBSVFMgKi8KKyNkZWZpbmUgTUNSX09VVDEJCTB4MDQJLyogTG9vcGJhY2sgb25seTogU2V0cyBzdGF0ZSBvZiBSSSAqLworI2RlZmluZSBNQ1JfTUFTVEVSX0lFCQkweDA4CS8qIEVuYWJsZSBpbnRlcnJ1cHQgb3V0cHV0cyAqLworI2RlZmluZSBNQ1JfTE9PUEJBQ0sJCTB4MTAJLyogU2V0IGludGVybmFsIChkaWdpdGFsKSBsb29wYmFjayBtb2RlICovCisjZGVmaW5lIE1DUl9YT05fQU5ZCQkweDIwCS8qIEVuYWJsZSBhbnkgY2hhciB0byBleGl0IFhPRkYgbW9kZSAqLworCisjZGVmaW5lIEFURU4yMDExX01TUl9DVFMJMHgxMAkvKiBDdXJyZW50IHN0YXRlIG9mIENUUyAqLworI2RlZmluZSBBVEVOMjAxMV9NU1JfRFNSCTB4MjAJLyogQ3VycmVudCBzdGF0ZSBvZiBEU1IgKi8KKyNkZWZpbmUgQVRFTjIwMTFfTVNSX1JJCQkweDQwCS8qIEN1cnJlbnQgc3RhdGUgb2YgUkkgKi8KKyNkZWZpbmUgQVRFTjIwMTFfTVNSX0NECQkweDgwCS8qIEN1cnJlbnQgc3RhdGUgb2YgQ0QgKi8KKworCitzdGF0aWMgaW50IGRlYnVnOworCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICIyLjAiCisjZGVmaW5lIERSSVZFUl9ERVNDICJBVEVOSU5UTCAyMDExIFVTQiBTZXJpYWwgQWRhcHRlciIKKworLyoKKyAqIERlZmluZXMgdXNlZCBmb3Igc2VuZGluZyBjb21tYW5kcyB0byBwb3J0CisgKi8KKworI2RlZmluZSBBVEVOX1dEUl9USU1FT1VUCSg1MCkJLyogZGVmYXVsdCB1cmIgdGltZW91dCAqLworCisvKiBSZXF1ZXN0cyAqLworI2RlZmluZSBBVEVOX1JEX1JUWVBFCQkweEMwCisjZGVmaW5lIEFURU5fV1JfUlRZUEUJCTB4NDAKKyNkZWZpbmUgQVRFTl9SRFJFUQkJMHgwRAorI2RlZmluZSBBVEVOX1dSUkVRCQkweDBFCisjZGVmaW5lIEFURU5fQ1RSTF9USU1FT1VUCTUwMAorI2RlZmluZSBWRU5ET1JfUkVBRF9MRU5HVEgJKDB4MDEpCisKKy8qIHNldCB0byAxIGZvciBSUzQ4NSBtb2RlIGFuZCAwIGZvciBSUzIzMiBtb2RlICovCisvKiBGSVhNRSBtYWtlIHRoaXMgc29tZWhvdyBkeW5hbWljIGFuZCBub3QgYnVpbGQgdGltZSBzcGVjaWZpYyAqLworc3RhdGljIGludCBSUzQ4NW1vZGU7CisKK3N0YXRpYyBpbnQgc2V0X3JlZ19zeW5jKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTE2IHJlZywgX191MTYgdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwl2YWwgPSB2YWwgJiAweDAwZmY7CisKKwlkYmcoIiVzOiBpcyAleCwgdmFsdWUgJXgiLCBfX2Z1bmNfXywgcmVnLCB2YWwpOworCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBBVEVOX1dSUkVRLAorCQkJICAgICAgIEFURU5fV1JfUlRZUEUsIHZhbCwgcmVnLCBOVUxMLCAwLAorCQkJICAgICAgIEFURU5fV0RSX1RJTUVPVVQpOworfQorCitzdGF0aWMgaW50IGdldF9yZWdfc3luYyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3UxNiByZWcsIF9fdTE2ICp2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgQVRFTl9SRFJFUSwKKwkJCSAgICAgIEFURU5fUkRfUlRZUEUsIDAsIHJlZywgdmFsLCBWRU5ET1JfUkVBRF9MRU5HVEgsCisJCQkgICAgICBBVEVOX1dEUl9USU1FT1VUKTsKKwlkYmcoIiVzOiBvZmZzZXQgaXMgJXgsIHJldHVybiB2YWwgJXgiLCBfX2Z1bmNfXywgcmVnLCAqdmFsKTsKKwkqdmFsID0gKCp2YWwpICYgMHgwMGZmOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3VhcnRfcmVnKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTE2IHJlZywgX191MTYgdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlzdHJ1Y3QgQVRFTklOVExfc2VyaWFsICphX3NlcmlhbDsKKwlfX3UxNiBtaW5vcjsKKworCWFfc2VyaWFsID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCW1pbm9yID0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwlpZiAobWlub3IgPT0gU0VSSUFMX1RUWV9OT19NSU5PUikKKwkJbWlub3IgPSAwOworCXZhbCA9IHZhbCAmIDB4MDBmZjsKKworCS8qCisJICogRm9yIHRoZSBVQVJUIGNvbnRyb2wgcmVnaXN0ZXJzLAorCSAqIHRoZSBhcHBsaWNhdGlvbiBudW1iZXIgbmVlZCB0byBiZSBPcidlZAorCSAqLworCWlmIChhX3NlcmlhbC0+QVRFTjIwMTFfc3BlY3RydW1fMm9yNHBvcnRzID09IDQpCisJCXZhbCB8PSAoKChfX3UxNilwb3J0LT5udW1iZXIgLSBtaW5vcikgKyAxKSA8PCA4OworCWVsc2UgeworCQlpZiAoKChfX3UxNikgcG9ydC0+bnVtYmVyIC0gbWlub3IpID09IDApCisJCQl2YWwgfD0gKCgoX191MTYpcG9ydC0+bnVtYmVyIC0gbWlub3IpICsgMSkgPDwgODsKKwkJZWxzZQorCQkJdmFsIHw9ICgoKF9fdTE2KXBvcnQtPm51bWJlciAtIG1pbm9yKSArIDIpIDw8IDg7CisJfQorCWRiZygiJXM6IGFwcGxpY2F0aW9uIG51bWJlciBpcyAleCIsIF9fZnVuY19fLCB2YWwpOworCisJcmV0dXJuIHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBBVEVOX1dSUkVRLAorCQkJICAgICAgIEFURU5fV1JfUlRZUEUsIHZhbCwgcmVnLCBOVUxMLCAwLAorCQkJICAgICAgIEFURU5fV0RSX1RJTUVPVVQpOworfQorCitzdGF0aWMgaW50IGdldF91YXJ0X3JlZyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBfX3UxNiByZWcsIF9fdTE2ICp2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCWludCByZXQgPSAwOworCV9fdTE2IHd2YWw7CisJc3RydWN0IEFURU5JTlRMX3NlcmlhbCAqYV9zZXJpYWw7CisJX191MTYgbWlub3IgPSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCisJYV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJaWYgKG1pbm9yID09IFNFUklBTF9UVFlfTk9fTUlOT1IpCisJCW1pbm9yID0gMDsKKworCS8qIHd2YWwgaXMgc2FtZSBhcyBhcHBsaWNhdGlvbiBudW1iZXIgKi8KKwlpZiAoYV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9PSA0KQorCQl3dmFsID0gKCgoX191MTYpcG9ydC0+bnVtYmVyIC0gbWlub3IpICsgMSkgPDwgODsKKwllbHNlIHsKKwkJaWYgKCgoX191MTYpIHBvcnQtPm51bWJlciAtIG1pbm9yKSA9PSAwKQorCQkJd3ZhbCA9ICgoKF9fdTE2KSBwb3J0LT5udW1iZXIgLSBtaW5vcikgKyAxKSA8PCA4OworCQllbHNlCisJCQl3dmFsID0gKCgoX191MTYpIHBvcnQtPm51bWJlciAtIG1pbm9yKSArIDIpIDw8IDg7CisJfQorCWRiZygiJXM6IGFwcGxpY2F0aW9uIG51bWJlciBpcyAleCIsIF9fZnVuY19fLCB3dmFsKTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgQVRFTl9SRFJFUSwKKwkJCSAgICAgIEFURU5fUkRfUlRZUEUsIHd2YWwsIHJlZywgdmFsLCBWRU5ET1JfUkVBRF9MRU5HVEgsCisJCQkgICAgICBBVEVOX1dEUl9USU1FT1VUKTsKKwkqdmFsID0gKCp2YWwpICYgMHgwMGZmOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX25ld01zcihzdHJ1Y3QgQVRFTklOVExfcG9ydCAqcG9ydCwgX191OCBuZXdNc3IpCit7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisJc3RydWN0IGFzeW5jX2ljb3VudCAqaWNvdW50OworCUFURU4yMDExX3BvcnQgPSBwb3J0OworCWljb3VudCA9ICZBVEVOMjAxMV9wb3J0LT5pY291bnQ7CisJaWYgKG5ld01zciAmCisJICAgIChBVEVOX01TUl9ERUxUQV9DVFMgfCBBVEVOX01TUl9ERUxUQV9EU1IgfCBBVEVOX01TUl9ERUxUQV9SSSB8CisJICAgICBBVEVOX01TUl9ERUxUQV9DRCkpIHsKKwkJaWNvdW50ID0gJkFURU4yMDExX3BvcnQtPmljb3VudDsKKworCQkvKiB1cGRhdGUgaW5wdXQgbGluZSBjb3VudGVycyAqLworCQlpZiAobmV3TXNyICYgQVRFTl9NU1JfREVMVEFfQ1RTKQorCQkJaWNvdW50LT5jdHMrKzsKKwkJaWYgKG5ld01zciAmIEFURU5fTVNSX0RFTFRBX0RTUikKKwkJCWljb3VudC0+ZHNyKys7CisJCWlmIChuZXdNc3IgJiBBVEVOX01TUl9ERUxUQV9DRCkKKwkJCWljb3VudC0+ZGNkKys7CisJCWlmIChuZXdNc3IgJiBBVEVOX01TUl9ERUxUQV9SSSkKKwkJCWljb3VudC0+cm5nKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX25ld0xzcihzdHJ1Y3QgQVRFTklOVExfcG9ydCAqcG9ydCwgX191OCBuZXdMc3IpCit7CisJc3RydWN0IGFzeW5jX2ljb3VudCAqaWNvdW50OworCisJZGJnKCIlcyAtICUwMngiLCBfX2Z1bmNfXywgbmV3THNyKTsKKworCWlmIChuZXdMc3IgJiBTRVJJQUxfTFNSX0JJKSB7CisJCS8qCisJCSAqIFBhcml0eSBhbmQgRnJhbWluZyBlcnJvcnMgb25seSBjb3VudCBpZiB0aGV5IG9jY3VyIGV4Y2x1c2l2ZQorCQkgKiBvZiBhIGJyZWFrIGJlaW5nIHJlY2VpdmVkLgorCQkgKi8KKwkJbmV3THNyICY9IChfX3U4KSAoU0VSSUFMX0xTUl9PRSB8IFNFUklBTF9MU1JfQkkpOworCX0KKworCS8qIHVwZGF0ZSBpbnB1dCBsaW5lIGNvdW50ZXJzICovCisJaWNvdW50ID0gJnBvcnQtPmljb3VudDsKKwlpZiAobmV3THNyICYgU0VSSUFMX0xTUl9CSSkKKwkJaWNvdW50LT5icmsrKzsKKwlpZiAobmV3THNyICYgU0VSSUFMX0xTUl9PRSkKKwkJaWNvdW50LT5vdmVycnVuKys7CisJaWYgKG5ld0xzciAmIFNFUklBTF9MU1JfUEUpCisJCWljb3VudC0+cGFyaXR5Kys7CisJaWYgKG5ld0xzciAmIFNFUklBTF9MU1JfRkUpCisJCWljb3VudC0+ZnJhbWUrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV9jb250cm9sX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCV9fdTggcmVndmFsID0gMHgwOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlBVEVOMjAxMV9wb3J0ID0gKHN0cnVjdCBBVEVOSU5UTF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJZGJnKCIlcyB1cmIgYnVmZmVyIHNpemUgaXMgJWQiLCBfX2Z1bmNfXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlkYmcoIiVzIEFURU4yMDExX3BvcnQtPk1zckxzciBpcyAlZCBwb3J0ICVkIiwgX19mdW5jX18sCisJCUFURU4yMDExX3BvcnQtPk1zckxzciwgQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0pOworCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlyZWd2YWwgPSAoX191OCkgZGF0YVswXTsKKwlkYmcoIiVzIGRhdGEgaXMgJXgiLCBfX2Z1bmNfXywgcmVndmFsKTsKKwlpZiAoQVRFTjIwMTFfcG9ydC0+TXNyTHNyID09IDApCisJCWhhbmRsZV9uZXdNc3IoQVRFTjIwMTFfcG9ydCwgcmVndmFsKTsKKwllbHNlIGlmIChBVEVOMjAxMV9wb3J0LT5Nc3JMc3IgPT0gMSkKKwkJaGFuZGxlX25ld0xzcihBVEVOMjAxMV9wb3J0LCByZWd2YWwpOworCitleGl0OgorCXJldHVybjsKK30KKworc3RhdGljIGludCBBVEVOMjAxMV9nZXRfcmVnKHN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOLCBfX3UxNiBXdmFsLCBfX3UxNiByZWcsCisJCQkgICAgX191MTYgKnZhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gQVRFTi0+cG9ydC0+c2VyaWFsLT5kZXY7CisJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqZHIgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IE5VTEw7CisJaW50IHJldCA9IDA7CisJYnVmZmVyID0gKF9fdTggKikgQVRFTi0+Y3RybF9idWY7CisKKwlkciA9ICh2b2lkICopKGJ1ZmZlciArIDIpOworCWRyLT5iUmVxdWVzdFR5cGUgPSBBVEVOX1JEX1JUWVBFOworCWRyLT5iUmVxdWVzdCA9IEFURU5fUkRSRVE7CisJZHItPndWYWx1ZSA9IGNwdV90b19sZTE2KFd2YWwpOworCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNihyZWcpOworCWRyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoMik7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihBVEVOLT5jb250cm9sX3VyYiwgZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwKKwkJCSAgICAgKHVuc2lnbmVkIGNoYXIgKilkciwgYnVmZmVyLCAyLAorCQkJICAgICBBVEVOMjAxMV9jb250cm9sX2NhbGxiYWNrLCBBVEVOKTsKKwlBVEVOLT5jb250cm9sX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IDI7CisJcmV0ID0gdXNiX3N1Ym1pdF91cmIoQVRFTi0+Y29udHJvbF91cmIsIEdGUF9BVE9NSUMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX2ludGVycnVwdF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IHJlc3VsdDsKKwlpbnQgbGVuZ3RoOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCXN0cnVjdCBBVEVOSU5UTF9zZXJpYWwgKkFURU4yMDExX3NlcmlhbDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCV9fdTE2IERhdGE7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlfX3U4IHNwWzVdLCBzdDsKKwlpbnQgaTsKKwlfX3UxNiB3dmFsOworCWludCBtaW5vcjsKKworCWRiZygiJXMiLCAiIDogRW50ZXJpbmciKTsKKworCUFURU4yMDExX3NlcmlhbCA9IChzdHJ1Y3QgQVRFTklOVExfc2VyaWFsICopdXJiLT5jb250ZXh0OworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19mdW5jX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisJCWdvdG8gZXhpdDsKKwl9CisJbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCXNlcmlhbCA9IEFURU4yMDExX3NlcmlhbC0+c2VyaWFsOworCisJLyogQVRFTklOVEwgZ2V0IDUgYnl0ZXMKKwkgKiBCeXRlIDEgSUlSIFBvcnQgMSAocG9ydC5udW1iZXIgaXMgMCkKKwkgKiBCeXRlIDIgSUlSIFBvcnQgMiAocG9ydC5udW1iZXIgaXMgMSkKKwkgKiBCeXRlIDMgSUlSIFBvcnQgMyAocG9ydC5udW1iZXIgaXMgMikKKwkgKiBCeXRlIDQgSUlSIFBvcnQgNCAocG9ydC5udW1iZXIgaXMgMykKKwkgKiBCeXRlIDUgRklGTyBzdGF0dXMgZm9yIGJvdGggKi8KKworCWlmIChsZW5ndGggJiYgbGVuZ3RoID4gNSkgeworCQlkYmcoIiVzIiwgIldyb25nIGRhdGEgISEhIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBNQVRSSVggKi8KKwlpZiAoQVRFTjIwMTFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPT0gNCkgeworCQlzcFswXSA9IChfX3U4KSBkYXRhWzBdOworCQlzcFsxXSA9IChfX3U4KSBkYXRhWzFdOworCQlzcFsyXSA9IChfX3U4KSBkYXRhWzJdOworCQlzcFszXSA9IChfX3U4KSBkYXRhWzNdOworCQlzdCA9IChfX3U4KSBkYXRhWzRdOworCX0gZWxzZSB7CisJCXNwWzBdID0gKF9fdTgpIGRhdGFbMF07CisJCXNwWzFdID0gKF9fdTgpIGRhdGFbMl07CisJCS8qIHNwWzJdPShfX3U4KWRhdGFbMl07ICovCisJCS8qIHNwWzNdPShfX3U4KWRhdGFbM107ICovCisJCXN0ID0gKF9fdTgpIGRhdGFbNF07CisKKwl9CisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0pOworCQltaW5vciA9IHNlcmlhbC0+bWlub3I7CisJCWlmIChtaW5vciA9PSBTRVJJQUxfVFRZX05PX01JTk9SKQorCQkJbWlub3IgPSAwOworCQlpZiAoKEFURU4yMDExX3NlcmlhbC0+QVRFTjIwMTFfc3BlY3RydW1fMm9yNHBvcnRzID09IDIpCisJCSAgICAmJiAoaSAhPSAwKSkKKwkJCXd2YWwgPQorCQkJICAgICgoKF9fdTE2KSBzZXJpYWwtPnBvcnRbaV0tPm51bWJlciAtCisJCQkgICAgICAoX191MTYpIChtaW5vcikpICsgMikgPDwgODsKKwkJZWxzZQorCQkJd3ZhbCA9CisJCQkgICAgKCgoX191MTYpIHNlcmlhbC0+cG9ydFtpXS0+bnVtYmVyIC0KKwkJCSAgICAgIChfX3UxNikgKG1pbm9yKSkgKyAxKSA8PCA4OworCQlpZiAoQVRFTjIwMTFfcG9ydC0+b3BlbiAhPSAwKSB7CisJCQlpZiAoc3BbaV0gJiAweDAxKSB7CisJCQkJZGJnKCJTUCVkIE5vIEludGVycnVwdCAhISEiLCBpKTsKKwkJCX0gZWxzZSB7CisJCQkJc3dpdGNoIChzcFtpXSAmIDB4MGYpIHsKKwkJCQljYXNlIFNFUklBTF9JSVJfUkxTOgorCQkJCQlkYmcoIlNlcmlhbCBQb3J0ICVkOiBSZWNlaXZlciBzdGF0dXMgZXJyb3Igb3IgYWRkcmVzcyBiaXQgZGV0ZWN0ZWQgaW4gOS1iaXQgbW9kZSIsIGkpOworCQkJCQlBVEVOMjAxMV9wb3J0LT5Nc3JMc3IgPSAxOworCQkJCQlBVEVOMjAxMV9nZXRfcmVnKEFURU4yMDExX3BvcnQsIHd2YWwsCisJCQkJCQkJIExJTkVfU1RBVFVTX1JFR0lTVEVSLAorCQkJCQkJCSAmRGF0YSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU0VSSUFMX0lJUl9NUzoKKwkJCQkJZGJnKCJTZXJpYWwgUG9ydCAlZDogTW9kZW0gc3RhdHVzIGNoYW5nZSIsIGkpOworCQkJCQlBVEVOMjAxMV9wb3J0LT5Nc3JMc3IgPSAwOworCQkJCQlBVEVOMjAxMV9nZXRfcmVnKEFURU4yMDExX3BvcnQsIHd2YWwsCisJCQkJCQkJIE1PREVNX1NUQVRVU19SRUdJU1RFUiwKKwkJCQkJCQkgJkRhdGEpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCX0KK2V4aXQ6CisJaWYgKEFURU4yMDExX3NlcmlhbC0+c3RhdHVzX3BvbGxpbmdfc3RhcnRlZCA9PSAwKQorCQlyZXR1cm47CisKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKKwkJCSIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYlxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgQVRFTjIwMTFfYnVsa19pbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBjaGFyICpkYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgQVRFTklOVExfc2VyaWFsICpBVEVOMjAxMV9zZXJpYWw7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIm5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlBVEVOMjAxMV9wb3J0ID0gKHN0cnVjdCBBVEVOSU5UTF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopQVRFTjIwMTFfcG9ydC0+cG9ydDsKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlkYmcoIiVzIiwgIkVudGVyaW5nLi4uIik7CisKKwlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJQVRFTjIwMTFfc2VyaWFsID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZBVEVOMjAxMV9wb3J0LT5wb3J0LT5wb3J0KTsKKwkJaWYgKHR0eSkgeworCQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCX0KKworCQlBVEVOMjAxMV9wb3J0LT5pY291bnQucnggKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCQlkYmcoIkFURU4yMDExX3BvcnQtPmljb3VudC5yeCBpcyAlZDoiLAorCQkJQVRFTjIwMTFfcG9ydC0+aWNvdW50LnJ4KTsKKwl9CisKKwlpZiAoIUFURU4yMDExX3BvcnQtPnJlYWRfdXJiKSB7CisJCWRiZygiJXMiLCAiVVJCIEtJTExFRCAhISEiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQlBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoc3RhdHVzKQorCQkJZGJnKCJ1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCwgc3RhdHVzID0gJWQiLCBzdGF0dXMpOworCX0KK30KKworc3RhdGljIHZvaWQgQVRFTjIwMTFfYnVsa19vdXRfZGF0YV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIm5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6JWQiLCB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwl9CisKKwlBVEVOMjAxMV9wb3J0ID0gKHN0cnVjdCBBVEVOSU5UTF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4iKTsKKworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJkFURU4yMDExX3BvcnQtPnBvcnQtPnBvcnQpOworCisJaWYgKHR0eSAmJiBBVEVOMjAxMV9wb3J0LT5vcGVuKSB7CisJCS8qIHRlbGwgdGhlIHR0eSBkcml2ZXIgdGhhdCBzb21ldGhpbmcgaGFzIGNoYW5nZWQgKi8KKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOworCX0KKworCS8qIHNjaGVkdWxlX3dvcmsoJkFURU4yMDExX3BvcnQtPnBvcnQtPndvcmspOyAqLworCXR0eV9rcmVmX3B1dCh0dHkpOworCit9CisKKyNpZmRlZiBBVEVOU2VyaWFsUHJvYmUKK3N0YXRpYyBpbnQgQVRFTjIwMTFfc2VyaWFsX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsCisJCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKworCS8qbmVlZCB0byBpbXBsZW1lbnQgdGhlIG1vZGVfcmVnIHJlYWRpbmcgYW5kIHVwZGF0aW5nXAorCSAgIHN0cnVjdHVyZXMgdXNiX3NlcmlhbF8gZGV2aWNlX3R5cGVcCisJICAgKGkuZSBudW1fcG9ydHMsIG51bV9idWxraW4sYnVsa291dCBldGMpICovCisJLyogQWxzbyB3ZSBjYW4gdXBkYXRlIHRoZSBjaGFuZ2VzICBhdHRhY2ggKi8KKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IEFURU4yMDExX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgcmVzcG9uc2U7CisJaW50IGo7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJX191MTYgRGF0YTsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBBVEVOSU5UTF9zZXJpYWwgKkFURU4yMDExX3NlcmlhbDsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwlzdHJ1Y3Qga3Rlcm1pb3MgdG1wX3Rlcm1pb3M7CisJaW50IG1pbm9yOworCisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJQVRFTjIwMTFfc2VyaWFsID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCWlmIChBVEVOMjAxMV9zZXJpYWwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBpbmNyZW1lbnQgdGhlIG51bWJlciBvZiBvcGVuZWQgcG9ydHMgY291bnRlciBoZXJlICovCisJQVRFTjIwMTFfc2VyaWFsLT5Ob09mT3BlblBvcnRzKys7CisKKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcG9ydC0+d3JpdGVfdXJiLT5waXBlKTsKKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcG9ydC0+cmVhZF91cmItPnBpcGUpOworCisJLyogSW5pdGlhbGlzaW5nIHRoZSB3cml0ZSB1cmIgcG9vbCAqLworCWZvciAoaiA9IDA7IGogPCBOVU1fVVJCUzsgKytqKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJCUFURU4yMDExX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gdXJiOworCisJCWlmICh1cmIgPT0gTlVMTCkgeworCQkJZXJyKCJObyBtb3JlIHVyYnM/Pz8iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9CisJCSAgICBrbWFsbG9jKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCWVycigiJXMtb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgX19mdW5jX18pOworCQkJY29udGludWU7CisJCX0KKwl9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSW5pdGlhbGl6ZSBBVEVOMjAxMSAtLSBXcml0ZSBJbml0IHZhbHVlcyB0byBjb3JyZXNwb25kaW5nIFJlZ2lzdGVycworICoKKyAqIFJlZ2lzdGVyIEluZGV4CisgKiAxIDogSUVSCisgKiAyIDogRkNSCisgKiAzIDogTENSCisgKiA0IDogTUNSCisgKgorICogMHgwOCA6IFNQMS8yIENvbnRyb2wgUmVnCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE5FRUQgdG8gY2hlY2sgdGhlIGZhbGxvd2luZyBCbG9jayAqLworCisJRGF0YSA9IDB4MDsKKwlzdGF0dXMgPSBnZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+U3BSZWdPZmZzZXQsICZEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoIlJlYWRpbmcgU3ByZWcgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisJRGF0YSB8PSAweDgwOworCXN0YXR1cyA9IHNldF9yZWdfc3luYyhwb3J0LCBBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJ3cml0aW5nIFNwcmVnIGZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJRGF0YSAmPSB+MHg4MDsKKwlzdGF0dXMgPSBzZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+U3BSZWdPZmZzZXQsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygid3JpdGluZyBTcHJlZyBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworLyogRW5kIG9mIGJsb2NrIHRvIGJlIGNoZWNrZWQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKkNIRUNLKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisJaWYgKFJTNDg1bW9kZSA9PSAwKQorCQlEYXRhID0gMHhDMDsKKwllbHNlCisJCURhdGEgPSAweDAwOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBTQ1JBVENIX1BBRF9SRUdJU1RFUiwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJXcml0aW5nIFNDUkFUQ0hfUEFEX1JFR0lTVEVSIGZhaWxlZCBzdGF0dXMtMHgleCIsIHN0YXR1cyk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UKKwkJZGJnKCJTQ1JBVENIX1BBRF9SRUdJU1RFUiBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWQiLCBzdGF0dXMpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKipDSEVDSyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCURhdGEgPSAweDA7CisJc3RhdHVzID0gZ2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsICZEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoIlJlYWRpbmcgQ29udHJvbHJlZyBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlEYXRhIHw9IDB4MDg7CQkvKiBEcml2ZXIgZG9uZSBiaXQgKi8KKwlEYXRhIHw9IDB4MjA7CQkvKiByeF9kaXNhYmxlICovCisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPQorCSAgICBzZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJ3cml0aW5nIENvbnRyb2xyZWcgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisJLyoKKwkgKiBkbyByZWdpc3RlciBzZXR0aW5ncyBoZXJlCisJICogU2V0IGFsbCByZWdzIHRvIHRoZSBkZXZpY2UgZGVmYXVsdCB2YWx1ZXMuCisJICogRmlyc3QgRGlzYWJsZSBhbGwgaW50ZXJydXB0cy4KKwkgKi8KKworCURhdGEgPSAweDAwOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBJTlRFUlJVUFRfRU5BQkxFX1JFR0lTVEVSLCBEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoImRpc2FibGVpbmcgaW50ZXJydXB0cyBmYWlsZWQiKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBTZXQgRklGT19DT05UUk9MX1JFR0lTVEVSIHRvIHRoZSBkZWZhdWx0IHZhbHVlICovCisJRGF0YSA9IDB4MDA7CisJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIEZJRk9fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJXcml0aW5nIEZJRk9fQ09OVFJPTF9SRUdJU1RFUiAgZmFpbGVkIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlEYXRhID0gMHhjZjsJCS8qIGNoayAqLworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBGSUZPX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygiV3JpdGluZyBGSUZPX0NPTlRST0xfUkVHSVNURVIgIGZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJRGF0YSA9IDB4MDM7CQkvKiBMQ1JfQklUU184ICovCisJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSID0gRGF0YTsKKworCURhdGEgPSAweDBiOwkJLyogTUNSX0RUUnxNQ1JfUlRTfE1DUl9NQVNURVJfSUUgKi8KKwlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSID0gRGF0YTsKKworI2lmZGVmIENoZWNrCisJRGF0YSA9IDB4MDA7CisJc3RhdHVzID0gZ2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgJkRhdGEpOworCUFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiA9IERhdGE7CisKKwlEYXRhIHw9IFNFUklBTF9MQ1JfRExBQjsJLyogZGF0YSBsYXRjaCBlbmFibGUgaW4gTENSIDB4ODAgKi8KKwlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKworCURhdGEgPSAweDBjOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBESVZJU09SX0xBVENIX0xTQiwgRGF0YSk7CisKKwlEYXRhID0gMHgwOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBESVZJU09SX0xBVENIX01TQiwgRGF0YSk7CisKKwlEYXRhID0gMHgwMDsKKwlzdGF0dXMgPSBnZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCAmRGF0YSk7CisKKy8qICAgICAgRGF0YSA9IEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUjsgKi8JLyogZGF0YSBsYXRjaCBkaXNhYmxlICovCisJRGF0YSA9IERhdGEgJiB+U0VSSUFMX0xDUl9ETEFCOworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCUFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiA9IERhdGE7CisjZW5kaWYKKwkvKiBjbGVhcmluZyBCdWxraW4gYW5kIEJ1bGtvdXQgRmlmbyAqLworCURhdGEgPSAweDA7CisJc3RhdHVzID0gZ2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0LCAmRGF0YSk7CisKKwlEYXRhID0gRGF0YSB8IDB4MGM7CisJc3RhdHVzID0gc2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0LCBEYXRhKTsKKworCURhdGEgPSBEYXRhICYgfjB4MGM7CisJc3RhdHVzID0gc2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0LCBEYXRhKTsKKwkvKiBGaW5hbGx5IGVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCURhdGEgPSAweDA7CisJRGF0YSA9IDB4MGM7CisJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIElOVEVSUlVQVF9FTkFCTEVfUkVHSVNURVIsIERhdGEpOworCisJLyogY2xlYXJpbmcgcnhfZGlzYWJsZSAqLworCURhdGEgPSAweDA7CisJc3RhdHVzID0gZ2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsICZEYXRhKTsKKwlEYXRhID0gRGF0YSAmIH4weDIwOworCXN0YXR1cyA9IHNldF9yZWdfc3luYyhwb3J0LCBBVEVOMjAxMV9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCBEYXRhKTsKKworCS8qIHJ4X25lZ2F0ZSAqLworCURhdGEgPSAweDA7CisJc3RhdHVzID0gZ2V0X3JlZ19zeW5jKHBvcnQsIEFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsICZEYXRhKTsKKwlEYXRhID0gRGF0YSB8IDB4MTA7CisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBzZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgRGF0YSk7CisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgKgorCSAqIHRoZSBkYXRhIHRocm91Z2gsb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggICAgICAqCisJICogaGlnaCBkYXRhIHJhdGVzIChsaWtlIHdpdGggT0hDSSkgZGF0YSBjYW4gZ2V0IGxvc3QuICAgICAgICovCisKKwlpZiAodHR5KQorCQl0dHktPmxvd19sYXRlbmN5ID0gMTsKKwkvKgorCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBzZXQgdXAgb3VyIGVuZHBvaW50IGluZm8geWV0CisJICogKGNhbid0IHNldCBpdCB1cCBpbiBBVEVOMjAxMV9zdGFydHVwIGFzIHRoZSBzdHJ1Y3R1cmVzCisJICogd2VyZSBub3Qgc2V0IHVwIGF0IHRoYXQgdGltZS4pCisJICovCisJaWYgKEFURU4yMDExX3NlcmlhbC0+Tm9PZk9wZW5Qb3J0cyA9PSAxKSB7CisJCS8qIHN0YXJ0IHRoZSBzdGF0dXMgcG9sbGluZyBoZXJlICovCisJCUFURU4yMDExX3NlcmlhbC0+c3RhdHVzX3BvbGxpbmdfc3RhcnRlZCA9IDE7CisJCS8qIElmIG5vdCB5ZXQgc2V0LCBTZXQgaGVyZSAqLworCQlBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9pbl9idWZmZXIgPQorCQkgICAgc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fYnVmZmVyOworCQlBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9pbl9lbmRwb2ludCA9CisJCSAgICBzZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7CisJCUFURU4yMDExX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiID0KKwkJICAgIHNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYjsKKworCQkvKiBzZXQgdXAgaW50ZXJydXB0IHVyYiAqLworCQl1c2JfZmlsbF9pbnRfdXJiKEFURU4yMDExX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiLAorCQkJCSBzZXJpYWwtPmRldiwKKwkJCQkgdXNiX3JjdmludHBpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQlBVEVOMjAxMV9zZXJpYWwtPgorCQkJCQkJaW50ZXJydXB0X2luX2VuZHBvaW50KSwKKwkJCQkgQVRFTjIwMTFfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fYnVmZmVyLAorCQkJCSBBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYi0+CisJCQkJIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJIEFURU4yMDExX2ludGVycnVwdF9jYWxsYmFjaywgQVRFTjIwMTFfc2VyaWFsLAorCQkJCSBBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYi0+aW50ZXJ2YWwpOworCisJCS8qIHN0YXJ0IGludGVycnVwdCByZWFkIGZvciBBVEVOMjAxMSAgICAgICAgICAgICAgICoKKwkJICogd2lsbCBjb250aW51ZSBhcyBsb25nIGFzIEFURU4yMDExIGlzIGNvbm5lY3RlZCAgKi8KKworCQlyZXNwb25zZSA9CisJCSAgICB1c2Jfc3VibWl0X3VyYihBVEVOMjAxMV9zZXJpYWwtPmludGVycnVwdF9yZWFkX3VyYiwKKwkJCQkgICBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3BvbnNlKSB7CisJCQlkYmcoIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwKKwkJCQlfX2Z1bmNfXywgcmVzcG9uc2UpOworCQl9CisKKwl9CisKKwkvKgorCSAqIFNlZSBpZiB3ZSd2ZSBzZXQgdXAgb3VyIGVuZHBvaW50IGluZm8geWV0CisJICogKGNhbid0IHNldCBpdCB1cCBpbiBBVEVOMjAxMV9zdGFydHVwIGFzIHRoZQorCSAqIHN0cnVjdHVyZXMgd2VyZSBub3Qgc2V0IHVwIGF0IHRoYXQgdGltZS4pCisJICovCisKKwlkYmcoInBvcnQgbnVtYmVyIGlzICVkIiwgcG9ydC0+bnVtYmVyKTsKKwlkYmcoInNlcmlhbCBudW1iZXIgaXMgJWQiLCBwb3J0LT5zZXJpYWwtPm1pbm9yKTsKKwlkYmcoIkJ1bGtpbiBlbmRwb2ludCBpcyAlZCIsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKTsKKwlkYmcoIkJ1bGtPdXQgZW5kcG9pbnQgaXMgJWQiLCBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpOworCWRiZygiSW50ZXJydXB0IGVuZHBvaW50IGlzICVkIiwKKwkJcG9ydC0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyk7CisJZGJnKCJwb3J0J3MgbnVtYmVyIGluIHRoZSBkZXZpY2UgaXMgJWQiLCBBVEVOMjAxMV9wb3J0LT5wb3J0X251bSk7CisJQVRFTjIwMTFfcG9ydC0+YnVsa19pbl9idWZmZXIgPSBwb3J0LT5idWxrX2luX2J1ZmZlcjsKKwlBVEVOMjAxMV9wb3J0LT5idWxrX2luX2VuZHBvaW50ID0gcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3M7CisJQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIgPSBwb3J0LT5yZWFkX3VyYjsKKwlBVEVOMjAxMV9wb3J0LT5idWxrX291dF9lbmRwb2ludCA9IHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzczsKKworCW1pbm9yID0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwlpZiAobWlub3IgPT0gU0VSSUFMX1RUWV9OT19NSU5PUikKKwkJbWlub3IgPSAwOworCisJLyogc2V0IHVwIG91ciBidWxrIGluIHVyYiAqLworCWlmICgoQVRFTjIwMTFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPT0gMikKKwkgICAgJiYgKCgoX191MTYpIHBvcnQtPm51bWJlciAtIChfX3UxNikgKG1pbm9yKSkgIT0gMCkpIHsKKwkJdXNiX2ZpbGxfYnVsa191cmIoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkJICAocG9ydC0+CisJCQkJCQkgICBidWxrX2luX2VuZHBvaW50QWRkcmVzcyArCisJCQkJCQkgICAyKSksIHBvcnQtPmJ1bGtfaW5fYnVmZmVyLAorCQkJCSAgQVRFTjIwMTFfcG9ydC0+cmVhZF91cmItPgorCQkJCSAgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkgIEFURU4yMDExX2J1bGtfaW5fY2FsbGJhY2ssIEFURU4yMDExX3BvcnQpOworCX0gZWxzZQorCQl1c2JfZmlsbF9idWxrX3VyYihBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYiwKKwkJCQkgIHNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkJICBwb3J0LT4KKwkJCQkJCSAgYnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJCSAgcG9ydC0+YnVsa19pbl9idWZmZXIsCisJCQkJICBBVEVOMjAxMV9wb3J0LT5yZWFkX3VyYi0+CisJCQkJICB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCSAgQVRFTjIwMTFfYnVsa19pbl9jYWxsYmFjaywgQVRFTjIwMTFfcG9ydCk7CisKKwlkYmcoIkFURU4yMDExX29wZW46IGJ1bGtpbiBlbmRwb2ludCBpcyAlZCIsCisJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKTsKKwlyZXNwb25zZSA9IHVzYl9zdWJtaXRfdXJiKEFURU4yMDExX3BvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVzcG9uc2UpIHsKKwkJZXJyKCIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmIiLCBfX2Z1bmNfXywKKwkJICAgIHJlc3BvbnNlKTsKKwl9CisKKwkvKiBpbml0aWFsaXplIG91ciB3YWl0IHF1ZXVlcyAqLworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJkFURU4yMDExX3BvcnQtPndhaXRfY2hhc2UpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJkFURU4yMDExX3BvcnQtPndhaXRfY29tbWFuZCk7CisKKwkvKiBpbml0aWFsaXplIG91ciBpY291bnQgc3RydWN0dXJlICovCisJbWVtc2V0KCYoQVRFTjIwMTFfcG9ydC0+aWNvdW50KSwgMHgwMCwgc2l6ZW9mKEFURU4yMDExX3BvcnQtPmljb3VudCkpOworCisJLyogaW5pdGlhbGl6ZSBvdXIgcG9ydCBzZXR0aW5ncyAqLworCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiA9IE1DUl9NQVNURVJfSUU7CS8qIE11c3Qgc2V0IHRvIGVuYWJsZSBpbnRzISAqLworCUFURU4yMDExX3BvcnQtPmNoYXNlUmVzcG9uc2VQZW5kaW5nID0gMDsKKwkvKiBzZW5kIGEgb3BlbiBwb3J0IGNvbW1hbmQgKi8KKwlBVEVOMjAxMV9wb3J0LT5vcGVuID0gMTsKKwkvKiBBVEVOMjAxMV9jaGFuZ2VfcG9ydF9zZXR0aW5ncyhBVEVOMjAxMV9wb3J0LG9sZF90ZXJtaW9zKTsgKi8KKwkvKiBTZXR1cCB0ZXJtaW9zICovCisJQVRFTjIwMTFfc2V0X3Rlcm1pb3ModHR5LCBwb3J0LCAmdG1wX3Rlcm1pb3MpOworCUFURU4yMDExX3BvcnQtPmljb3VudC50eCA9IDA7CisJQVRFTjIwMTFfcG9ydC0+aWNvdW50LnJ4ID0gMDsKKworCWRiZygidXNiX3NlcmlhbCBzZXJpYWw6JXggICAgICAgQVRFTjIwMTFfcG9ydDoleFxuQVRFTjIwMTFfc2VyaWFsOiV4ICAgICAgdXNiX3NlcmlhbF9wb3J0IHBvcnQ6JXgiLAorCSAgICAgKHVuc2lnbmVkIGludClzZXJpYWwsICh1bnNpZ25lZCBpbnQpQVRFTjIwMTFfcG9ydCwKKwkgICAgICh1bnNpZ25lZCBpbnQpQVRFTjIwMTFfc2VyaWFsLCAodW5zaWduZWQgaW50KXBvcnQpOworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCBBVEVOMjAxMV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlpbnQgaTsKKwlpbnQgY2hhcnMgPSAwOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCisJLyogZGJnKCIlcyIsIiBBVEVOMjAxMV9jaGFyc19pbl9idWZmZXI6ZW50ZXJpbmcgLi4uLi4uLi4uLi4iKTsgKi8KKworCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkgeworCQlkYmcoIiVzIiwgIkFURU4yMDExX2JyZWFrOmxlYXZpbmcgLi4uLi4uLi4uLi4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKQorCQlpZiAoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpCisJCQljaGFycyArPSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fZnVuY19fLCBjaGFycyk7CisJcmV0dXJuIGNoYXJzOworCit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX2Jsb2NrX3VudGlsX3R4X2VtcHR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCSAgc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQpCit7CisJaW50IHRpbWVvdXQgPSBIWiAvIDEwOworCWludCB3YWl0ID0gMzA7CisJaW50IGNvdW50OworCisJd2hpbGUgKDEpIHsKKwkJY291bnQgPSBBVEVOMjAxMV9jaGFyc19pbl9idWZmZXIodHR5KTsKKworCQkvKiBDaGVjayBmb3IgQnVmZmVyIHN0YXR1cyAqLworCQlpZiAoY291bnQgPD0gMCkKKwkJCXJldHVybjsKKworCQkvKiBCbG9jayB0aGUgdGhyZWFkIGZvciBhIHdoaWxlICovCisJCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmQVRFTjIwMTFfcG9ydC0+d2FpdF9jaGFzZSwKKwkJCQkJICAgICAgIHRpbWVvdXQpOworCisJCS8qIE5vIGFjdGl2aXR5Li4gY291bnQgZG93biBzZWN0aW9uICovCisJCXdhaXQtLTsKKwkJaWYgKHdhaXQgPT0gMCkgeworCQkJZGJnKCIlcyAtIFRJTUVPVVQiLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQkvKiBSZXNldCB0aW1vdXQgdmFsdWUgYmFjayB0byBzZWNvbmRzICovCisJCQl3YWl0ID0gMzA7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkgICBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCBBVEVOSU5UTF9zZXJpYWwgKkFURU4yMDExX3NlcmlhbDsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwlpbnQgbm9fdXJiczsKKwlfX3UxNiBEYXRhOworCisJZGJnKCIlcyIsICJBVEVOMjAxMV9jbG9zZTplbnRlcmluZy4uLiIpOworCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKworCS8qIHRha2UgdGhlIEFkcGF0ZXIgYW5kIHBvcnQncyBwcml2YXRlIGRhdGEgKi8KKwlBVEVOMjAxMV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpZiAoKEFURU4yMDExX3NlcmlhbCA9PSBOVUxMKSB8fCAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJaWYgKHNlcmlhbC0+ZGV2KSB7CisJCS8qIGZsdXNoIGFuZCBibG9jayh3YWl0KSB1bnRpbCB0eCBpcyBlbXB0eSAqLworCQlBVEVOMjAxMV9ibG9ja191bnRpbF90eF9lbXB0eSh0dHksIEFURU4yMDExX3BvcnQpOworCX0KKwkvKiBraWxsIHRoZSBwb3J0cyBVUkIncyAqLworCWZvciAobm9fdXJicyA9IDA7IG5vX3VyYnMgPCBOVU1fVVJCUzsgbm9fdXJicysrKQorCQl1c2Jfa2lsbF91cmIoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbbm9fdXJic10pOworCS8qIEZyZWVpbmcgV3JpdGUgVVJCcyAqLworCWZvciAobm9fdXJicyA9IDA7IG5vX3VyYnMgPCBOVU1fVVJCUzsgKytub191cmJzKSB7CisJCWtmcmVlKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYl9wb29sW25vX3VyYnNdLT50cmFuc2Zlcl9idWZmZXIpOworCQl1c2JfZnJlZV91cmIoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbbm9fdXJic10pOworCX0KKwkvKiBXaGlsZSBjbG9zaW5nIHBvcnQsIHNodXRkb3duIGFsbCBidWxrIHJlYWQsIHdyaXRlICAqCisJICogYW5kIGludGVycnVwdCByZWFkIGlmIHRoZXkgZXhpc3RzICAgICAgICAgICAgICAgICAgKi8KKwlpZiAoc2VyaWFsLT5kZXYpIHsKKwkJaWYgKEFURU4yMDExX3BvcnQtPndyaXRlX3VyYikgeworCQkJZGJnKCIlcyIsICJTaHV0ZG93biBidWxrIHdyaXRlIik7CisJCQl1c2Jfa2lsbF91cmIoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiKTsKKwkJfQorCQlpZiAoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIpIHsKKwkJCWRiZygiJXMiLCAiU2h1dGRvd24gYnVsayByZWFkIik7CisJCQl1c2Jfa2lsbF91cmIoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIpOworCQl9CisJCWlmICgoJkFURU4yMDExX3BvcnQtPmNvbnRyb2xfdXJiKSkgeworCQkJZGJnKCIlcyIsICJTaHV0ZG93biBjb250cm9sIHJlYWQiKTsKKwkJCS8qIHVzYl9raWxsX3VyYiAoQVRFTjIwMTFfcG9ydC0+Y29udHJvbF91cmIpOyAqLworCisJCX0KKwl9CisJLyogaWYoQVRFTjIwMTFfcG9ydC0+Y3RybF9idWYgIT0gTlVMTCkgKi8KKwkJLyoga2ZyZWUoQVRFTjIwMTFfcG9ydC0+Y3RybF9idWYpOyAqLworCS8qIGRlY3JlbWVudCB0aGUgbm8ub2Ygb3BlbiBwb3J0cyBjb3VudGVyIG9mIGFuIGluZGl2aWR1YWwgVVNCLXNlcmlhbCBhZGFwdGVyLiAqLworCUFURU4yMDExX3NlcmlhbC0+Tm9PZk9wZW5Qb3J0cy0tOworCWRiZygiTm9PZk9wZW5Qb3J0cyBpbiBjbG9zZSVkOmluIHBvcnQlZCIsCisJCUFURU4yMDExX3NlcmlhbC0+Tm9PZk9wZW5Qb3J0cywgcG9ydC0+bnVtYmVyKTsKKwlpZiAoQVRFTjIwMTFfc2VyaWFsLT5Ob09mT3BlblBvcnRzID09IDApIHsKKwkJLyogc3RvcCB0aGUgc3R1cyBwb2xsaW5nIGhlcmUgKi8KKwkJQVRFTjIwMTFfc2VyaWFsLT5zdGF0dXNfcG9sbGluZ19zdGFydGVkID0gMDsKKwkJaWYgKEFURU4yMDExX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiKSB7CisJCQlkYmcoIiVzIiwgIlNodXRkb3duIGludGVycnVwdF9yZWFkX3VyYiIpOworCQkJLyogQVRFTjIwMTFfc2VyaWFsLT5pbnRlcnJ1cHRfaW5fYnVmZmVyPU5VTEw7ICovCisJCQkvKiB1c2Jfa2lsbF91cmIgKEFURU4yMDExX3NlcmlhbC0+aW50ZXJydXB0X3JlYWRfdXJiKTsgKi8KKwkJfQorCX0KKwlpZiAoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiKSB7CisJCS8qIGlmIHRoaXMgdXJiIGhhZCBhIHRyYW5zZmVyIGJ1ZmZlciBhbHJlYWR5IChvbGQgdHgpIGZyZWUgaXQgKi8KKwkJa2ZyZWUoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl1c2JfZnJlZV91cmIoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiKTsKKwl9CisKKwkvKiBjbGVhciB0aGUgTUNSICYgSUVSICovCisJRGF0YSA9IDB4MDA7CisJc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCURhdGEgPSAweDAwOworCXNldF91YXJ0X3JlZyhwb3J0LCBJTlRFUlJVUFRfRU5BQkxFX1JFR0lTVEVSLCBEYXRhKTsKKworCUFURU4yMDExX3BvcnQtPm9wZW4gPSAwOworCWRiZygiJXMiLCAiTGVhdmluZyAuLi4uLi4uLi4uLi4iKTsKKworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV9ibG9ja191bnRpbF9jaGFzZV9yZXNwb25zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJCQkJc3RydWN0IEFURU5JTlRMX3BvcnQKKwkJCQkJCSpBVEVOMjAxMV9wb3J0KQoreworCWludCB0aW1lb3V0ID0gMSAqIEhaOworCWludCB3YWl0ID0gMTA7CisJaW50IGNvdW50OworCisJd2hpbGUgKDEpIHsKKwkJY291bnQgPSBBVEVOMjAxMV9jaGFyc19pbl9idWZmZXIodHR5KTsKKworCQkvKiBDaGVjayBmb3IgQnVmZmVyIHN0YXR1cyAqLworCQlpZiAoY291bnQgPD0gMCkgeworCQkJQVRFTjIwMTFfcG9ydC0+Y2hhc2VSZXNwb25zZVBlbmRpbmcgPSAwOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogQmxvY2sgdGhlIHRocmVhZCBmb3IgYSB3aGlsZSAqLworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJkFURU4yMDExX3BvcnQtPndhaXRfY2hhc2UsCisJCQkJCSAgICAgICB0aW1lb3V0KTsKKwkJLyogTm8gYWN0aXZpdHkuLiBjb3VudCBkb3duIHNlY3Rpb24gKi8KKwkJd2FpdC0tOworCQlpZiAod2FpdCA9PSAwKSB7CisJCQlkYmcoIiVzIC0gVElNRU9VVCIsIF9fZnVuY19fKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCS8qIFJlc2V0IHRpbW91dCB2YWx1ZSBiYWNrIHRvIHNlY29uZHMgKi8KKwkJCXdhaXQgPSAxMDsKKwkJfQorCX0KKworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgY2hhciBkYXRhOworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IEFURU5JTlRMX3NlcmlhbCAqQVRFTjIwMTFfc2VyaWFsOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uLiIpOworCWRiZygiQVRFTjIwMTFfYnJlYWs6IFN0YXJ0Iik7CisKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlBVEVOMjAxMV9zZXJpYWwgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmICgoQVRFTjIwMTFfc2VyaWFsID09IE5VTEwpIHx8IChBVEVOMjAxMV9wb3J0ID09IE5VTEwpKQorCQlyZXR1cm47CisKKwkvKiBmbHVzaCBhbmQgY2hhc2UgKi8KKwlBVEVOMjAxMV9wb3J0LT5jaGFzZVJlc3BvbnNlUGVuZGluZyA9IDE7CisKKwlpZiAoc2VyaWFsLT5kZXYpIHsKKwkJLyogZmx1c2ggYW5kIGJsb2NrIHVudGlsIHR4IGlzIGVtcHR5ICovCisJCUFURU4yMDExX2Jsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlKHR0eSwgQVRFTjIwMTFfcG9ydCk7CisJfQorCisJaWYgKGJyZWFrX3N0YXRlID09IC0xKQorCQlkYXRhID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSIHwgTENSX1NFVF9CUkVBSzsKKwllbHNlCisJCWRhdGEgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgJiB+TENSX1NFVF9CUkVBSzsKKworCUFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiA9IGRhdGE7CisJZGJnKCJBVEVOMjAxMV9icmVhayBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgaXMgJXgiLAorCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IpOworCXNldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUik7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgQVRFTjIwMTFfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCWludCBpOworCWludCByb29tID0gMDsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKworCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkgeworCQlkYmcoIiVzIiwgIkFURU4yMDExX2JyZWFrOmxlYXZpbmcgLi4uLi4uLi4uLi4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBOVU1fVVJCUzsgKytpKQorCQlpZiAoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCisJCQlyb29tICs9IFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRTsKKworCWRiZygiJXMgLSByZXR1cm5zICVkIiwgX19mdW5jX18sIHJvb20pOworCXJldHVybiByb29tOworCit9CisKK3N0YXRpYyBpbnQgQVRFTjIwMTFfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGNvdW50KQoreworCWludCBzdGF0dXM7CisJaW50IGk7CisJaW50IGJ5dGVzX3NlbnQgPSAwOworCWludCB0cmFuc2Zlcl9zaXplOworCWludCBtaW5vcjsKKworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IEFURU5JTlRMX3NlcmlhbCAqQVRFTjIwMTFfc2VyaWFsOworCXN0cnVjdCB1cmIgKnVyYjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjdXJyZW50X3Bvc2l0aW9uID0gZGF0YTsKKwl1bnNpZ25lZCBjaGFyICpkYXRhMTsKKwlkYmcoIiVzIiwgImVudGVyaW5nIC4uLi4uLi4uLi4uIik7CisKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlBVEVOMjAxMV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpIHsKKwkJZGJnKCIlcyIsICJBVEVOMjAxMV9wb3J0IGlzIE5VTEwiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCUFURU4yMDExX3NlcmlhbCA9IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlpZiAoQVRFTjIwMTFfc2VyaWFsID09IE5VTEwpIHsKKwkJZGJnKCIlcyIsICJBVEVOMjAxMV9zZXJpYWwgaXMgTlVMTCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogdHJ5IHRvIGZpbmQgYSBmcmVlIHVyYiBpbiB0aGUgbGlzdCAqLworCXVyYiA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgeworCQlpZiAoQVRFTjIwMTFfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJCXVyYiA9IEFURU4yMDExX3BvcnQtPndyaXRlX3VyYl9wb29sW2ldOworCQkJZGJnKCJVUkI6JWQiLCBpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHVyYiA9PSBOVUxMKSB7CisJCWRiZygiJXMgLSBubyBtb3JlIGZyZWUgdXJicyIsIF9fZnVuY19fKTsKKwkJZ290byBleGl0OworCX0KKworCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0KKwkJICAgIGttYWxsb2MoVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKKworCQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkgeworCQkJZXJyKCIlcyBubyBtb3JlIGtlcm5lbCBtZW1vcnkuLi4iLCBfX2Z1bmNfXyk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisJdHJhbnNmZXJfc2l6ZSA9IG1pbihjb3VudCwgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFKTsKKworCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9wb3NpdGlvbiwgdHJhbnNmZXJfc2l6ZSk7CisJLyogdXNiX3NlcmlhbF9kZWJ1Z19kYXRhIChfX0ZJTEVfXywgX19mdW5jX18sIHRyYW5zZmVyX3NpemUsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsgKi8KKworCS8qIGZpbGwgdXJiIHdpdGggZGF0YSBhbmQgc3VibWl0ICAqLworCW1pbm9yID0gcG9ydC0+c2VyaWFsLT5taW5vcjsKKwlpZiAobWlub3IgPT0gU0VSSUFMX1RUWV9OT19NSU5PUikKKwkJbWlub3IgPSAwOworCWlmICgoQVRFTjIwMTFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPT0gMikKKwkgICAgJiYgKCgoX191MTYpIHBvcnQtPm51bWJlciAtIChfX3UxNikgKG1pbm9yKSkgIT0gMCkpIHsKKwkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBBVEVOMjAxMV9zZXJpYWwtPnNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3NuZGJ1bGtwaXBlKEFURU4yMDExX3NlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJCQkgIChwb3J0LT4KKwkJCQkJCSAgIGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcykgKworCQkJCQkJICAyKSwgdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJICB0cmFuc2Zlcl9zaXplLAorCQkJCSAgQVRFTjIwMTFfYnVsa19vdXRfZGF0YV9jYWxsYmFjaywKKwkJCQkgIEFURU4yMDExX3BvcnQpOworCX0gZWxzZQorCisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwKKwkJCQkgIEFURU4yMDExX3NlcmlhbC0+c2VyaWFsLT5kZXYsCisJCQkJICB1c2Jfc25kYnVsa3BpcGUoQVRFTjIwMTFfc2VyaWFsLT5zZXJpYWwtPmRldiwKKwkJCQkJCSAgcG9ydC0+CisJCQkJCQkgIGJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkJICB1cmItPnRyYW5zZmVyX2J1ZmZlciwgdHJhbnNmZXJfc2l6ZSwKKwkJCQkgIEFURU4yMDExX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2ssCisJCQkJICBBVEVOMjAxMV9wb3J0KTsKKworCWRhdGExID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJZGJnKCJidWxrb3V0IGVuZHBvaW50IGlzICVkIiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKTsKKwkvKiBmb3IoaT0wO2kgPCB1cmItPmFjdHVhbF9sZW5ndGg7aSsrKSAqLworCQkvKiBkYmcoIkRhdGEgaXMgJWMgIixkYXRhMVtpXSk7ICovCisKKwkvKiBzZW5kIGl0IGRvd24gdGhlIHBpcGUgKi8KKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCisJaWYgKHN0YXR1cykgeworCQllcnIoIiVzIC0gdXNiX3N1Ym1pdF91cmIod3JpdGUgYnVsaykgZmFpbGVkIHdpdGggc3RhdHVzID0gJWQiLAorCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCWJ5dGVzX3NlbnQgPSBzdGF0dXM7CisJCWdvdG8gZXhpdDsKKwl9CisJYnl0ZXNfc2VudCA9IHRyYW5zZmVyX3NpemU7CisJQVRFTjIwMTFfcG9ydC0+aWNvdW50LnR4ICs9IHRyYW5zZmVyX3NpemU7CisJZGJnKCJBVEVOMjAxMV9wb3J0LT5pY291bnQudHggaXMgJWQ6IiwgQVRFTjIwMTFfcG9ydC0+aWNvdW50LnR4KTsKKworZXhpdDoKKwlyZXR1cm4gYnl0ZXNfc2VudDsKK30KKworc3RhdGljIHZvaWQgQVRFTjIwMTFfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwlpbnQgc3RhdHVzOworCisJZGJnKCItIHBvcnQgJWQiLCBwb3J0LT5udW1iZXIpOworCisJQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICghQVRFTjIwMTFfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIiwgInBvcnQgbm90IG9wZW5lZCIpOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uICIpOworCisJaWYgKCF0dHkpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBhdmFpbGFibGUiLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZW5kIHRoZSBzdG9wIGNoYXJhY3RlciAqLworCWlmIChJX0lYT0ZGKHR0eSkpIHsKKwkJdW5zaWduZWQgY2hhciBzdG9wX2NoYXIgPSBTVE9QX0NIQVIodHR5KTsKKwkJc3RhdHVzID0gQVRFTjIwMTFfd3JpdGUodHR5LCBwb3J0LCAmc3RvcF9jaGFyLCAxKTsKKwkJaWYgKHN0YXR1cyA8PSAwKQorCQkJcmV0dXJuOworCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgUlRTL0NUUywgdG9nZ2xlIHRoYXQgbGluZSAqLworCWlmICh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTKSB7CisJCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiAmPSB+TUNSX1JUUzsKKwkJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsCisJCQkJICAgICAgQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm47CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBBVEVOMjAxMV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCWlmICghQVRFTjIwMTFfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uICIpOworCisJaWYgKCF0dHkpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBhdmFpbGFibGUiLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFhPTi9YT0ZGLCBzZW5kIHRoZSBzdGFydCBjaGFyYWN0ZXIgKi8KKwlpZiAoSV9JWE9GRih0dHkpKSB7CisJCXVuc2lnbmVkIGNoYXIgc3RhcnRfY2hhciA9IFNUQVJUX0NIQVIodHR5KTsKKwkJc3RhdHVzID0gQVRFTjIwMTFfd3JpdGUodHR5LCBwb3J0LCAmc3RhcnRfY2hhciwgMSk7CisJCWlmIChzdGF0dXMgPD0gMCkKKwkJCXJldHVybjsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFJUUy9DVFMsIHRvZ2dsZSB0aGF0IGxpbmUgKi8KKwlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgeworCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1IgfD0gTUNSX1JUUzsKKwkJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsCisJCQkJICAgICAgQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm47CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IEFURU4yMDExX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCXVuc2lnbmVkIGludCByZXN1bHQ7CisJX191MTYgbXNyOworCV9fdTE2IG1jcjsKKwkvKiB1bnNpZ25lZCBpbnQgbWNyOyAqLworCWludCBzdGF0dXMgPSAwOworCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzdGF0dXMgPSBnZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fU1RBVFVTX1JFR0lTVEVSLCAmbXNyKTsKKwlzdGF0dXMgPSBnZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgJm1jcik7CisJLyogbWNyID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSOyAqLworCS8qIENPTU1FTlQyOiB0aGUgRmFsbG93aW5nIHRocmVlIGxpbmUgYXJlIGNvbW1lbnRlZCBmb3IgdXBkYXRpbmcgb25seSBNU1IgdmFsdWVzICovCisJcmVzdWx0ID0gKChtY3IgJiBNQ1JfRFRSKSA/IFRJT0NNX0RUUiA6IDApCisJICAgIHwgKChtY3IgJiBNQ1JfUlRTKSA/IFRJT0NNX1JUUyA6IDApCisJICAgIHwgKChtY3IgJiBNQ1JfTE9PUEJBQ0spID8gVElPQ01fTE9PUCA6IDApCisJICAgIHwgKChtc3IgJiBBVEVOMjAxMV9NU1JfQ1RTKSA/IFRJT0NNX0NUUyA6IDApCisJICAgIHwgKChtc3IgJiBBVEVOMjAxMV9NU1JfQ0QpID8gVElPQ01fQ0FSIDogMCkKKwkgICAgfCAoKG1zciAmIEFURU4yMDExX01TUl9SSSkgPyBUSU9DTV9SSSA6IDApCisJICAgIHwgKChtc3IgJiBBVEVOMjAxMV9NU1JfRFNSKSA/IFRJT0NNX0RTUiA6IDApOworCisJZGJnKCIlcyAtIDB4JTA0WCIsIF9fZnVuY19fLCByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBBVEVOMjAxMV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0OworCXVuc2lnbmVkIGludCBtY3I7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlBVEVOMjAxMV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltY3IgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1I7CisJaWYgKGNsZWFyICYgVElPQ01fUlRTKQorCQltY3IgJj0gfk1DUl9SVFM7CisJaWYgKGNsZWFyICYgVElPQ01fRFRSKQorCQltY3IgJj0gfk1DUl9EVFI7CisJaWYgKGNsZWFyICYgVElPQ01fTE9PUCkKKwkJbWNyICY9IH5NQ1JfTE9PUEJBQ0s7CisKKwlpZiAoc2V0ICYgVElPQ01fUlRTKQorCQltY3IgfD0gTUNSX1JUUzsKKwlpZiAoc2V0ICYgVElPQ01fRFRSKQorCQltY3IgfD0gTUNSX0RUUjsKKwlpZiAoc2V0ICYgVElPQ01fTE9PUCkKKwkJbWNyIHw9IE1DUl9MT09QQkFDSzsKKworCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiA9IG1jcjsKKworCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBtY3IpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygic2V0dGluZyBNT0RFTV9DT05UUk9MX1JFR0lTVEVSIEZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgY2ZsYWc7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKworCWRiZygiQVRFTjIwMTFfc2V0X3Rlcm1pb3M6IFNUQVJUIik7CisKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlBVEVOMjAxMV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKCFBVEVOMjAxMV9wb3J0LT5vcGVuKSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzIiwgInNldHRpbmcgdGVybWlvcyAtICIpOworCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwlpZiAoIWNmbGFnKSB7CisJCWRiZygiJXMgJXMiLCBfX2Z1bmNfXywgImNmbGFnIGlzIE5VTEwiKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmICgoY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcpICYmCisJCSAgICAoUkVMRVZBTlRfSUZMQUcodHR5LT50ZXJtaW9zLT5jX2lmbGFnKSA9PQorCQkgICAgIFJFTEVWQU5UX0lGTEFHKG9sZF90ZXJtaW9zLT5jX2lmbGFnKSkpIHsKKwkJCWRiZygiJXMiLCAiTm90aGluZyB0byBjaGFuZ2UiKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWRiZygiJXMgLSBjbGZhZyAlMDh4IGlmbGFnICUwOHgiLCBfX2Z1bmNfXywKKwkgICAgdHR5LT50ZXJtaW9zLT5jX2NmbGFnLCBSRUxFVkFOVF9JRkxBRyh0dHktPnRlcm1pb3MtPmNfaWZsYWcpKTsKKworCWlmIChvbGRfdGVybWlvcykgeworCQlkYmcoIiVzIC0gb2xkIGNsZmFnICUwOHggb2xkIGlmbGFnICUwOHgiLCBfX2Z1bmNfXywKKwkJICAgIG9sZF90ZXJtaW9zLT5jX2NmbGFnLCBSRUxFVkFOVF9JRkxBRyhvbGRfdGVybWlvcy0+Y19pZmxhZykpOworCX0KKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBjaGFuZ2UgdGhlIHBvcnQgc2V0dGluZ3MgdG8gdGhlIG5ldyBvbmVzIHNwZWNpZmllZCAqLworCisJQVRFTjIwMTFfY2hhbmdlX3BvcnRfc2V0dGluZ3ModHR5LCBBVEVOMjAxMV9wb3J0LCBvbGRfdGVybWlvcyk7CisKKwlpZiAoIUFURU4yMDExX3BvcnQtPnJlYWRfdXJiKSB7CisJCWRiZygiJXMiLCAiVVJCIEtJTExFRCAhISEhISIpOworCQlyZXR1cm47CisJfQorCisJaWYgKEFURU4yMDExX3BvcnQtPnJlYWRfdXJiLT5zdGF0dXMgIT0gLUVJTlBST0dSRVNTKSB7CisJCUFURU4yMDExX3BvcnQtPnJlYWRfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoc3RhdHVzKSB7CisJCQlkYmcKKwkJCSAgICAoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCwgc3RhdHVzID0gJWQiLAorCQkJICAgICBzdGF0dXMpOworCQl9CisJfQorCXJldHVybjsKK30KKworc3RhdGljIGludCBnZXRfbHNyX2luZm8oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJCXN0cnVjdCBBVEVOSU5UTF9wb3J0ICpBVEVOMjAxMV9wb3J0LAorCQkJdW5zaWduZWQgaW50IF9fdXNlciAqdmFsdWUpCit7CisJaW50IGNvdW50OworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCisJY291bnQgPSBBVEVOMjAxMV9jaGFyc19pbl9idWZmZXIodHR5KTsKKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoIiVzIC0tIEVtcHR5IiwgX19mdW5jX18pOworCQlyZXN1bHQgPSBUSU9DU0VSX1RFTVQ7CisJfQorCisJaWYgKGNvcHlfdG9fdXNlcih2YWx1ZSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfbnVtYmVyX2J5dGVzX2F2YWlsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJICBzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydCwKKwkJCQkgIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQoreworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCisJaWYgKCF0dHkpCisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisKKwlyZXN1bHQgPSB0dHktPnJlYWRfY250OworCisJZGJnKCIlcyglZCkgPSAlZCIsIF9fZnVuY19fLCBBVEVOMjAxMV9wb3J0LT5wb3J0LT5udW1iZXIsIHJlc3VsdCk7CisJaWYgKGNvcHlfdG9fdXNlcih2YWx1ZSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgc2V0X21vZGVtX2luZm8oc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQoreworCXVuc2lnbmVkIGludCBtY3I7CisJdW5zaWduZWQgaW50IGFyZzsKKwlfX3UxNiBEYXRhOworCWludCBzdGF0dXM7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKworCWlmIChBVEVOMjAxMV9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKUFURU4yMDExX3BvcnQtPnBvcnQ7CisKKwltY3IgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1I7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFyZywgdmFsdWUsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVElPQ01CSVM6CisJCWlmIChhcmcgJiBUSU9DTV9SVFMpCisJCQltY3IgfD0gTUNSX1JUUzsKKwkJaWYgKGFyZyAmIFRJT0NNX0RUUikKKwkJCW1jciB8PSBNQ1JfUlRTOworCQlpZiAoYXJnICYgVElPQ01fTE9PUCkKKwkJCW1jciB8PSBNQ1JfTE9PUEJBQ0s7CisJCWJyZWFrOworCisJY2FzZSBUSU9DTUJJQzoKKwkJaWYgKGFyZyAmIFRJT0NNX1JUUykKKwkJCW1jciAmPSB+TUNSX1JUUzsKKwkJaWYgKGFyZyAmIFRJT0NNX0RUUikKKwkJCW1jciAmPSB+TUNSX1JUUzsKKwkJaWYgKGFyZyAmIFRJT0NNX0xPT1ApCisJCQltY3IgJj0gfk1DUl9MT09QQkFDSzsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NNU0VUOgorCQkvKiB0dXJuIG9mZiB0aGUgUlRTIGFuZCBEVFIgYW5kIExPT1BCQUNLCisJCSAqIGFuZCB0aGVuIG9ubHkgdHVybiBvbiB3aGF0IHdhcyBhc2tlZCB0byAqLworCQltY3IgJj0gfihNQ1JfUlRTIHwgTUNSX0RUUiB8IE1DUl9MT09QQkFDSyk7CisJCW1jciB8PSAoKGFyZyAmIFRJT0NNX1JUUykgPyBNQ1JfUlRTIDogMCk7CisJCW1jciB8PSAoKGFyZyAmIFRJT0NNX0RUUikgPyBNQ1JfRFRSIDogMCk7CisJCW1jciB8PSAoKGFyZyAmIFRJT0NNX0xPT1ApID8gTUNSX0xPT1BCQUNLIDogMCk7CisJCWJyZWFrOworCX0KKworCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiA9IG1jcjsKKworCURhdGEgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1I7CisJc3RhdHVzID0gc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygic2V0dGluZyBNT0RFTV9DT05UUk9MX1JFR0lTVEVSIEZhaWxlZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X21vZGVtX2luZm8oc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQsCisJCQkgIHVuc2lnbmVkIGludCBfX3VzZXIgKnZhbHVlKQoreworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCV9fdTE2IG1zcjsKKwl1bnNpZ25lZCBpbnQgbWNyID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBnZXRfdWFydF9yZWcoQVRFTjIwMTFfcG9ydC0+cG9ydCwgTU9ERU1fU1RBVFVTX1JFR0lTVEVSLCAmbXNyKTsKKwlyZXN1bHQgPSAoKG1jciAmIE1DUl9EVFIpID8gVElPQ01fRFRSIDogMCkJLyogMHgwMDIgKi8KKwkgICAgfCgobWNyICYgTUNSX1JUUykgPyBUSU9DTV9SVFMgOiAwKQkvKiAweDAwNCAqLworCSAgICB8KChtc3IgJiBBVEVOMjAxMV9NU1JfQ1RTKSA/IFRJT0NNX0NUUyA6IDApCS8qIDB4MDIwICovCisJICAgIHwoKG1zciAmIEFURU4yMDExX01TUl9DRCkgPyBUSU9DTV9DQVIgOiAwKQkvKiAweDA0MCAqLworCSAgICB8KChtc3IgJiBBVEVOMjAxMV9NU1JfUkkpID8gVElPQ01fUkkgOiAwKQkvKiAweDA4MCAqLworCSAgICB8KChtc3IgJiBBVEVOMjAxMV9NU1JfRFNSKSA/IFRJT0NNX0RTUiA6IDApOwkvKiAweDEwMCAqLworCisJZGJnKCIlcyAtLSAleCIsIF9fZnVuY19fLCByZXN1bHQpOworCisJaWYgKGNvcHlfdG9fdXNlcih2YWx1ZSwgJnJlc3VsdCwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfc2VyaWFsX2luZm8oc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQsCisJCQkgICBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKnJldGluZm8pCit7CisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgdG1wOworCisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFyZXRpbmZvKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7CisKKwl0bXAudHlwZSA9IFBPUlRfMTY1NTBBOworCXRtcC5saW5lID0gQVRFTjIwMTFfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKwlpZiAodG1wLmxpbmUgPT0gU0VSSUFMX1RUWV9OT19NSU5PUikKKwkJdG1wLmxpbmUgPSAwOworCXRtcC5wb3J0ID0gQVRFTjIwMTFfcG9ydC0+cG9ydC0+bnVtYmVyOworCXRtcC5pcnEgPSAwOworCXRtcC5mbGFncyA9IEFTWU5DX1NLSVBfVEVTVCB8IEFTWU5DX0FVVE9fSVJROworCXRtcC54bWl0X2ZpZm9fc2l6ZSA9IE5VTV9VUkJTICogVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFOworCXRtcC5iYXVkX2Jhc2UgPSA5NjAwOworCXRtcC5jbG9zZV9kZWxheSA9IDUgKiBIWjsKKwl0bXAuY2xvc2luZ193YWl0ID0gMzAgKiBIWjsKKworCWlmIChjb3B5X3RvX3VzZXIocmV0aW5mbywgJnRtcCwgc2l6ZW9mKCpyZXRpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IEFURU4yMDExX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgQVRFTklOVExfcG9ydCAqQVRFTjIwMTFfcG9ydDsKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNub3c7CisJc3RydWN0IGFzeW5jX2ljb3VudCBjcHJldjsKKwlzdHJ1Y3Qgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCBpY291bnQ7CisJaW50IEFURU5yZXQgPSAwOworCXVuc2lnbmVkIGludCBfX3VzZXIgKnVzZXJfYXJnID0gKHVuc2lnbmVkIGludCBfX3VzZXIgKilhcmc7CisKKwlBVEVOMjAxMV9wb3J0ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCisJaWYgKEFURU4yMDExX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJZGJnKCIlcyAtIHBvcnQgJWQsIGNtZCA9IDB4JXgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwkJLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgKi8KKworCWNhc2UgVElPQ0lOUToKKwkJZGJnKCIlcyAoJWQpIFRJT0NJTlEiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJcmV0dXJuIGdldF9udW1iZXJfYnl0ZXNfYXZhaWwodHR5LCBBVEVOMjAxMV9wb3J0LCB1c2VyX2FyZyk7CisJCWJyZWFrOworCisJY2FzZSBUSU9DT1VUUToKKwkJZGJnKCIlcyAoJWQpIFRJT0NPVVRRIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiBwdXRfdXNlcihBVEVOMjAxMV9jaGFyc19pbl9idWZmZXIodHR5KSwgdXNlcl9hcmcpOworCQlicmVhazsKKworCWNhc2UgVElPQ1NFUkdFVExTUjoKKwkJZGJnKCIlcyAoJWQpIFRJT0NTRVJHRVRMU1IiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJcmV0dXJuIGdldF9sc3JfaW5mbyh0dHksIEFURU4yMDExX3BvcnQsIHVzZXJfYXJnKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFRJT0NNQklTOgorCWNhc2UgVElPQ01CSUM6CisJY2FzZSBUSU9DTVNFVDoKKwkJZGJnKCIlcyAoJWQpIFRJT0NNU0VUL1RJT0NNQklDL1RJT0NNU0VUIiwgX19mdW5jX18sCisJCSAgICBwb3J0LT5udW1iZXIpOworCQlBVEVOcmV0ID0gc2V0X21vZGVtX2luZm8oQVRFTjIwMTFfcG9ydCwgY21kLCB1c2VyX2FyZyk7CisJCXJldHVybiBBVEVOcmV0OworCisJY2FzZSBUSU9DTUdFVDoKKwkJZGJnKCIlcyAoJWQpIFRJT0NNR0VUIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiBnZXRfbW9kZW1faW5mbyhBVEVOMjAxMV9wb3J0LCB1c2VyX2FyZyk7CisKKwljYXNlIFRJT0NHU0VSSUFMOgorCQlkYmcoIiVzICglZCkgVElPQ0dTRVJJQUwiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJcmV0dXJuIGdldF9zZXJpYWxfaW5mbyhBVEVOMjAxMV9wb3J0LAorCQkJCSAgICAgICAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgX191c2VyICopYXJnKTsKKworCWNhc2UgVElPQ1NTRVJJQUw6CisJCWRiZygiJXMgKCVkKSBUSU9DU1NFUklBTCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCQlicmVhazsKKworCWNhc2UgVElPQ01JV0FJVDoKKwkJZGJnKCIlcyAoJWQpIFRJT0NNSVdBSVQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwkJY3ByZXYgPSBBVEVOMjAxMV9wb3J0LT5pY291bnQ7CisJCXdoaWxlICgxKSB7CisJCQkvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovCisJCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJCWNub3cgPSBBVEVOMjAxMV9wb3J0LT5pY291bnQ7CisJCQlpZiAoY25vdy5ybmcgPT0gY3ByZXYucm5nICYmIGNub3cuZHNyID09IGNwcmV2LmRzciAmJgorCQkJICAgIGNub3cuZGNkID09IGNwcmV2LmRjZCAmJiBjbm93LmN0cyA9PSBjcHJldi5jdHMpCisJCQkJcmV0dXJuIC1FSU87CS8qIG5vIGNoYW5nZSA9PiBlcnJvciAqLworCQkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHwKKwkJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8CisJCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgJiYgKGNub3cuZGNkICE9IGNwcmV2LmRjZCkpIHx8CisJCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi5jdHMpKSkgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJY3ByZXYgPSBjbm93OworCQl9CisJCS8qIE5PVFJFQUNIRUQgKi8KKwkJYnJlYWs7CisKKwljYXNlIFRJT0NHSUNPVU5UOgorCQljbm93ID0gQVRFTjIwMTFfcG9ydC0+aWNvdW50OworCQlpY291bnQuY3RzID0gY25vdy5jdHM7CisJCWljb3VudC5kc3IgPSBjbm93LmRzcjsKKwkJaWNvdW50LnJuZyA9IGNub3cucm5nOworCQlpY291bnQuZGNkID0gY25vdy5kY2Q7CisJCWljb3VudC5yeCA9IGNub3cucng7CisJCWljb3VudC50eCA9IGNub3cudHg7CisJCWljb3VudC5mcmFtZSA9IGNub3cuZnJhbWU7CisJCWljb3VudC5vdmVycnVuID0gY25vdy5vdmVycnVuOworCQlpY291bnQucGFyaXR5ID0gY25vdy5wYXJpdHk7CisJCWljb3VudC5icmsgPSBjbm93LmJyazsKKwkJaWNvdW50LmJ1Zl9vdmVycnVuID0gY25vdy5idWZfb3ZlcnJ1bjsKKworCQlkYmcoIiVzICglZCkgVElPQ0dJQ09VTlQgUlg9JWQsIFRYPSVkIiwgX19mdW5jX18sCisJCSAgICBwb3J0LT5udW1iZXIsIGljb3VudC5yeCwgaWNvdW50LnR4KTsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZpY291bnQsIHNpemVvZihpY291bnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgQVRFTjIwMTFfY2FsY19iYXVkX3JhdGVfZGl2aXNvcihpbnQgYmF1ZFJhdGUsIGludCAqZGl2aXNvciwKKwkJCQkJICAgX191MTYgKmNsa19zZWxfdmFsKQoreworCWRiZygiJXMgLSAlZCIsIF9fZnVuY19fLCBiYXVkUmF0ZSk7CisKKwlpZiAoYmF1ZFJhdGUgPD0gMTE1MjAwKSB7CisJCSpkaXZpc29yID0gMTE1MjAwIC8gYmF1ZFJhdGU7CisJCSpjbGtfc2VsX3ZhbCA9IDB4MDsKKwl9CisJaWYgKChiYXVkUmF0ZSA+IDExNTIwMCkgJiYgKGJhdWRSYXRlIDw9IDIzMDQwMCkpIHsKKwkJKmRpdmlzb3IgPSAyMzA0MDAgLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHgxMDsKKwl9IGVsc2UgaWYgKChiYXVkUmF0ZSA+IDIzMDQwMCkgJiYgKGJhdWRSYXRlIDw9IDQwMzIwMCkpIHsKKwkJKmRpdmlzb3IgPSA0MDMyMDAgLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHgyMDsKKwl9IGVsc2UgaWYgKChiYXVkUmF0ZSA+IDQwMzIwMCkgJiYgKGJhdWRSYXRlIDw9IDQ2MDgwMCkpIHsKKwkJKmRpdmlzb3IgPSA0NjA4MDAgLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHgzMDsKKwl9IGVsc2UgaWYgKChiYXVkUmF0ZSA+IDQ2MDgwMCkgJiYgKGJhdWRSYXRlIDw9IDgwNjQwMCkpIHsKKwkJKmRpdmlzb3IgPSA4MDY0MDAgLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHg0MDsKKwl9IGVsc2UgaWYgKChiYXVkUmF0ZSA+IDgwNjQwMCkgJiYgKGJhdWRSYXRlIDw9IDkyMTYwMCkpIHsKKwkJKmRpdmlzb3IgPSA5MjE2MDAgLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHg1MDsKKwl9IGVsc2UgaWYgKChiYXVkUmF0ZSA+IDkyMTYwMCkgJiYgKGJhdWRSYXRlIDw9IDE1NzI4NjQpKSB7CisJCSpkaXZpc29yID0gMTU3Mjg2NCAvIGJhdWRSYXRlOworCQkqY2xrX3NlbF92YWwgPSAweDYwOworCX0gZWxzZSBpZiAoKGJhdWRSYXRlID4gMTU3Mjg2NCkgJiYgKGJhdWRSYXRlIDw9IDMxNDU3MjgpKSB7CisJCSpkaXZpc29yID0gMzE0NTcyOCAvIGJhdWRSYXRlOworCQkqY2xrX3NlbF92YWwgPSAweDcwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBBVEVOMjAxMV9zZW5kX2NtZF93cml0ZV9iYXVkX3JhdGUoc3RydWN0IEFURU5JTlRMX3BvcnQKKwkJCQkJICAgICAqQVRFTjIwMTFfcG9ydCwgaW50IGJhdWRSYXRlKQoreworCWludCBkaXZpc29yID0gMDsKKwlpbnQgc3RhdHVzOworCV9fdTE2IERhdGE7CisJdW5zaWduZWQgY2hhciBudW1iZXI7CisJX191MTYgY2xrX3NlbF92YWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwlpbnQgbWlub3I7CisKKwlpZiAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKilBVEVOMjAxMV9wb3J0LT5wb3J0OworCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uICIpOworCisJbWlub3IgPSBBVEVOMjAxMV9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCWlmIChtaW5vciA9PSBTRVJJQUxfVFRZX05PX01JTk9SKQorCQltaW5vciA9IDA7CisJbnVtYmVyID0gQVRFTjIwMTFfcG9ydC0+cG9ydC0+bnVtYmVyIC0gbWlub3I7CisKKwlkYmcoIiVzIC0gcG9ydCA9ICVkLCBiYXVkID0gJWQiLCBfX2Z1bmNfXywKKwkgICAgQVRFTjIwMTFfcG9ydC0+cG9ydC0+bnVtYmVyLCBiYXVkUmF0ZSk7CisJLyogcmVzZXQgY2xrX3VhcnRfc2VsIGluIHNwcmVnT2Zmc2V0ICovCisJaWYgKGJhdWRSYXRlID4gMTE1MjAwKSB7CisjaWZkZWYgSFdfZmxvd19jb250cm9sCisJCS8qCisJCSAqIE5PVEU6IG5lZWQgdG8gc2VlIHRoZSBwdGhlciByZWdpc3RlciB0byBtb2RpZnkKKwkJICogc2V0dGluZyBoL3cgZmxvdyBjb250cm9sIGJpdCB0byAxOworCQkgKi8KKwkJLyogRGF0YSA9IEFURU4yMDExX3BvcnQtPnNoYWRvd01DUjsgKi8KKwkJRGF0YSA9IDB4MmI7CisJCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiA9IERhdGE7CisJCXN0YXR1cyA9IHNldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiV3JpdGluZyBzcHJlZyBmYWlsZWQgaW4gc2V0X3NlcmlhbF9iYXVkIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKyNlbmRpZgorCisJfSBlbHNlIHsKKyNpZmRlZiBIV19mbG93X2NvbnRyb2wKKwkJLyogc2V0dGluZyBoL3cgZmxvdyBjb250cm9sIGJpdCB0byAwOyAqLworCQkvKiBEYXRhID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSOyAqLworCQlEYXRhID0gMHhiOworCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1IgPSBEYXRhOworCQlzdGF0dXMgPSBzZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcoIldyaXRpbmcgc3ByZWcgZmFpbGVkIGluIHNldF9zZXJpYWxfYmF1ZCIpOworCQkJcmV0dXJuIC0xOworCQl9CisjZW5kaWYKKworCX0KKworCWlmICgxKQkJCS8qIGJhdWRSYXRlIDw9IDExNTIwMCkgKi8geworCQljbGtfc2VsX3ZhbCA9IDB4MDsKKwkJRGF0YSA9IDB4MDsKKwkJc3RhdHVzID0KKwkJICAgIEFURU4yMDExX2NhbGNfYmF1ZF9yYXRlX2Rpdmlzb3IoYmF1ZFJhdGUsICZkaXZpc29yLAorCQkJCQkJICAgICZjbGtfc2VsX3ZhbCk7CisJCXN0YXR1cyA9IGdldF9yZWdfc3luYyhwb3J0LCBBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCwgJkRhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGJnKCJyZWFkaW5nIHNwcmVnIGZhaWxlZCBpbiBzZXRfc2VyaWFsX2JhdWQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlEYXRhID0gKERhdGEgJiAweDhmKSB8IGNsa19zZWxfdmFsOworCQlzdGF0dXMgPSBzZXRfcmVnX3N5bmMocG9ydCwgQVRFTjIwMTFfcG9ydC0+U3BSZWdPZmZzZXQsIERhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGJnKCJXcml0aW5nIHNwcmVnIGZhaWxlZCBpbiBzZXRfc2VyaWFsX2JhdWQiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQkvKiBDYWxjdWxhdGUgdGhlIERpdmlzb3IgKi8KKworCQlpZiAoc3RhdHVzKSB7CisJCQllcnIoIiVzIC0gYmFkIGJhdWQgcmF0ZSIsIF9fZnVuY19fKTsKKwkJCWRiZygiJXMiLCAiYmFkIGJhdWQgcmF0ZSIpOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCQkvKiBFbmFibGUgYWNjZXNzIHRvIGRpdmlzb3IgbGF0Y2ggKi8KKwkJRGF0YSA9IEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiB8IFNFUklBTF9MQ1JfRExBQjsKKwkJQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSID0gRGF0YTsKKwkJc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisKKwkJLyogV3JpdGUgdGhlIGRpdmlzb3IgKi8KKwkJRGF0YSA9ICh1bnNpZ25lZCBjaGFyKShkaXZpc29yICYgMHhmZik7CisJCWRiZygic2V0X3NlcmlhbF9iYXVkIFZhbHVlIHRvIHdyaXRlIERMTCBpcyAleCIsIERhdGEpOworCQlzZXRfdWFydF9yZWcocG9ydCwgRElWSVNPUl9MQVRDSF9MU0IsIERhdGEpOworCisJCURhdGEgPSAodW5zaWduZWQgY2hhcikoKGRpdmlzb3IgJiAweGZmMDApID4+IDgpOworCQlkYmcoInNldF9zZXJpYWxfYmF1ZCBWYWx1ZSB0byB3cml0ZSBETE0gaXMgJXgiLCBEYXRhKTsKKwkJc2V0X3VhcnRfcmVnKHBvcnQsIERJVklTT1JfTEFUQ0hfTVNCLCBEYXRhKTsKKworCQkvKiBEaXNhYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoICovCisJCURhdGEgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgJiB+U0VSSUFMX0xDUl9ETEFCOworCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgPSBEYXRhOworCQlzZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX2NoYW5nZV9wb3J0X3NldHRpbmdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCSAgc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQsCisJCQkJCSAgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlpbnQgYmF1ZDsKKwl1bnNpZ25lZCBjZmxhZzsKKwl1bnNpZ25lZCBpZmxhZzsKKwlfX3U4IGxEYXRhOworCV9fdTggbFBhcml0eTsKKwlfX3U4IGxTdG9wOworCWludCBzdGF0dXM7CisJX191MTYgRGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisKKwlpZiAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKilBVEVOMjAxMV9wb3J0LT5wb3J0OworCisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgQVRFTjIwMTFfcG9ydC0+cG9ydC0+bnVtYmVyKTsKKworCWlmICghQVRFTjIwMTFfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJaWYgKCghdHR5KSB8fCAoIXR0eS0+dGVybWlvcykpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBzdHJ1Y3R1cmVzIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uICIpOworCisJbERhdGEgPSBMQ1JfQklUU184OworCWxTdG9wID0gTENSX1NUT1BfMTsKKwlsUGFyaXR5ID0gTENSX1BBUl9OT05FOworCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJaWZsYWcgPSB0dHktPnRlcm1pb3MtPmNfaWZsYWc7CisKKwkvKiBDaGFuZ2UgdGhlIG51bWJlciBvZiBiaXRzICovCisKKwkvKiBDT01NRU5UMTogdGhlIGJlbG93IExpbmUiaWYoY2ZsYWcgJiBDU0laRSkiIGlzIGFkZGVkIGZvciB0aGUgZXJyb3JzIHdlIGdldCBmb3Igc2VyaWFsIGxvb3AgZGF0YSB0ZXN0IGkuZSBzZXJpYWxfbG9vcGJhY2sucGwgLXYgKi8KKwkvKiBpZihjZmxhZyAmIENTSVpFKSAqLworCXsKKwkJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJCWNhc2UgQ1M1OgorCQkJbERhdGEgPSBMQ1JfQklUU181OworCQkJYnJlYWs7CisKKwkJY2FzZSBDUzY6CisJCQlsRGF0YSA9IExDUl9CSVRTXzY7CisJCQlicmVhazsKKworCQljYXNlIENTNzoKKwkJCWxEYXRhID0gTENSX0JJVFNfNzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQljYXNlIENTODoKKwkJCWxEYXRhID0gTENSX0JJVFNfODsKKwkJCWJyZWFrOworCQl9CisJfQorCS8qIENoYW5nZSB0aGUgUGFyaXR5IGJpdCAqLworCWlmIChjZmxhZyAmIFBBUkVOQikgeworCQlpZiAoY2ZsYWcgJiBQQVJPREQpIHsKKwkJCWxQYXJpdHkgPSBMQ1JfUEFSX09ERDsKKwkJCWRiZygiJXMgLSBwYXJpdHkgPSBvZGQiLCBfX2Z1bmNfXyk7CisJCX0gZWxzZSB7CisJCQlsUGFyaXR5ID0gTENSX1BBUl9FVkVOOworCQkJZGJnKCIlcyAtIHBhcml0eSA9IGV2ZW4iLCBfX2Z1bmNfXyk7CisJCX0KKworCX0gZWxzZSB7CisJCWRiZygiJXMgLSBwYXJpdHkgPSBub25lIiwgX19mdW5jX18pOworCX0KKworCWlmIChjZmxhZyAmIENNU1BBUikKKwkJbFBhcml0eSA9IGxQYXJpdHkgfCAweDIwOworCisJLyogQ2hhbmdlIHRoZSBTdG9wIGJpdCAqLworCWlmIChjZmxhZyAmIENTVE9QQikgeworCQlsU3RvcCA9IExDUl9TVE9QXzI7CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAyIiwgX19mdW5jX18pOworCX0gZWxzZSB7CisJCWxTdG9wID0gTENSX1NUT1BfMTsKKwkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDEiLCBfX2Z1bmNfXyk7CisJfQorCisJLyogVXBkYXRlIHRoZSBMQ1Igd2l0aCB0aGUgY29ycmVjdCB2YWx1ZSAqLworCUFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiAmPQorCSAgICB+KExDUl9CSVRTX01BU0sgfCBMQ1JfU1RPUF9NQVNLIHwgTENSX1BBUl9NQVNLKTsKKwlBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IgfD0gKGxEYXRhIHwgbFBhcml0eSB8IGxTdG9wKTsKKworCWRiZworCSAgICAoIkFURU4yMDExX2NoYW5nZV9wb3J0X3NldHRpbmdzIEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiBpcyAleCIsCisJICAgICBBVEVOMjAxMV9wb3J0LT5zaGFkb3dMQ1IpOworCS8qIERpc2FibGUgSW50ZXJydXB0cyAqLworCURhdGEgPSAweDAwOworCXNldF91YXJ0X3JlZyhwb3J0LCBJTlRFUlJVUFRfRU5BQkxFX1JFR0lTVEVSLCBEYXRhKTsKKworCURhdGEgPSAweDAwOworCXNldF91YXJ0X3JlZyhwb3J0LCBGSUZPX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJRGF0YSA9IDB4Y2Y7CisJc2V0X3VhcnRfcmVnKHBvcnQsIEZJRk9fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisKKwkvKiBTZW5kIHRoZSB1cGRhdGVkIExDUiB2YWx1ZSB0byB0aGUgQVRFTjIwMTEgKi8KKwlEYXRhID0gQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSOworCisJc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisKKwlEYXRhID0gMHgwMGI7CisJQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSID0gRGF0YTsKKwlzZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJRGF0YSA9IDB4MDBiOworCXNldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKworCS8qIHNldCB1cCB0aGUgTUNSIHJlZ2lzdGVyIGFuZCBzZW5kIGl0IHRvIHRoZSBBVEVOMjAxMSAqLworCisJQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSID0gTUNSX01BU1RFUl9JRTsKKwlpZiAoY2ZsYWcgJiBDQkFVRCkKKwkJQVRFTjIwMTFfcG9ydC0+c2hhZG93TUNSIHw9IChNQ1JfRFRSIHwgTUNSX1JUUyk7CisKKwlpZiAoY2ZsYWcgJiBDUlRTQ1RTKQorCQlBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1IgfD0gKE1DUl9YT05fQU5ZKTsKKwllbHNlCisJCUFURU4yMDExX3BvcnQtPnNoYWRvd01DUiAmPSB+KE1DUl9YT05fQU5ZKTsKKworCURhdGEgPSBBVEVOMjAxMV9wb3J0LT5zaGFkb3dNQ1I7CisJc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJLyogRGV0ZXJtaW5lIGRpdmlzb3IgYmFzZWQgb24gYmF1ZCByYXRlICovCisJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisKKwlpZiAoIWJhdWQpIHsKKwkJLyogcGljayBhIGRlZmF1bHQsIGFueSBkZWZhdWx0Li4uICovCisJCWRiZygiJXMiLCAiUGlja2VkIGRlZmF1bHQgYmF1ZC4uLiIpOworCQliYXVkID0gOTYwMDsKKwl9CisKKwlkYmcoIiVzIC0gYmF1ZCByYXRlID0gJWQiLCBfX2Z1bmNfXywgYmF1ZCk7CisJc3RhdHVzID0gQVRFTjIwMTFfc2VuZF9jbWRfd3JpdGVfYmF1ZF9yYXRlKEFURU4yMDExX3BvcnQsIGJhdWQpOworCisJLyogRW5hYmxlIEludGVycnVwdHMgKi8KKwlEYXRhID0gMHgwYzsKKwlzZXRfdWFydF9yZWcocG9ydCwgSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUiwgRGF0YSk7CisKKwlpZiAoQVRFTjIwMTFfcG9ydC0+cmVhZF91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJQVRFTjIwMTFfcG9ydC0+cmVhZF91cmItPmRldiA9IHNlcmlhbC0+ZGV2OworCisJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKEFURU4yMDExX3BvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKworCQlpZiAoc3RhdHVzKSB7CisJCQlkYmcKKwkJCSAgICAoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCwgc3RhdHVzID0gJWQiLAorCQkJICAgICBzdGF0dXMpOworCQl9CisJfQorCWRiZworCSAgICAoIkFURU4yMDExX2NoYW5nZV9wb3J0X3NldHRpbmdzIEFURU4yMDExX3BvcnQtPnNoYWRvd0xDUiBpcyBFbmQgJXgiLAorCSAgICAgQVRFTjIwMTFfcG9ydC0+c2hhZG93TENSKTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBBVEVOMjAxMV9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCisJX191MTYgRGF0YSA9IDB4MDA7CisJaW50IHJldCA9IDA7CisJaW50IEFURU4yMDExXzJvcjRwb3J0czsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgICBBVEVOX1JEUkVRLCBBVEVOX1JEX1JUWVBFLCAwLCBHUElPX1JFR0lTVEVSLAorCQkJICAgICAgJkRhdGEsIFZFTkRPUl9SRUFEX0xFTkdUSCwgQVRFTl9XRFJfVElNRU9VVCk7CisKKy8qIGdob3N0Z3VtOiBoZXJlIGlzIHdoZXJlIHRoZSBwcm9ibGVtIGFwcGVhcnMgdG8gYmV0ICovCisvKiBXaGljaCBvZiB0aGUgZm9sbG93aW5nIGFyZSBuZWVkZWQ/ICovCisvKiBHcmVnIHVzZWQgdGhlIHNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzPTIgKi8KKy8qIEJ1dCB0aGUgY29kZSBpbiB0aGUgQVRFTjIwMTFfb3BlbiByZWxpZXMgb24gc2VyaWFsLT5udW1fcG9ydHM9MiAqLworCWlmICgoRGF0YSAmIDB4MDEpID09IDApIHsKKwkJQVRFTjIwMTFfMm9yNHBvcnRzID0gMjsKKwkJc2VyaWFsLT50eXBlLT5udW1fcG9ydHMgPSAyOworCQlzZXJpYWwtPm51bV9wb3J0cyA9IDI7CisJfQorCS8qIGVsc2UgaWYoc2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMgPT0gOSkgKi8KKwllbHNlIHsKKwkJQVRFTjIwMTFfMm9yNHBvcnRzID0gNDsKKwkJc2VyaWFsLT50eXBlLT5udW1fcG9ydHMgPSA0OworCQlzZXJpYWwtPm51bV9wb3J0cyA9IDQ7CisKKwl9CisKKwlyZXR1cm4gQVRFTjIwMTFfMm9yNHBvcnRzOworfQorCitzdGF0aWMgaW50IEFURU4yMDExX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgQVRFTklOVExfc2VyaWFsICpBVEVOMjAxMV9zZXJpYWw7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKKwlpbnQgaSwgc3RhdHVzOworCWludCBtaW5vcjsKKworCV9fdTE2IERhdGE7CisJZGJnKCIlcyIsICIgQVRFTjIwMTFfc3RhcnR1cCA6ZW50ZXJpbmcuLi4uLi4uLi4uIik7CisKKwlpZiAoIXNlcmlhbCkgeworCQlkYmcoIiVzIiwgIkludmFsaWQgSGFuZGxlciIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGV2ID0gc2VyaWFsLT5kZXY7CisKKwlkYmcoIiVzIiwgIkVudGVyaW5nLi4uIik7CisKKwkvKiBjcmVhdGUgb3VyIHByaXZhdGUgc2VyaWFsIHN0cnVjdHVyZSAqLworCUFURU4yMDExX3NlcmlhbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBBVEVOSU5UTF9zZXJpYWwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoQVRFTjIwMTFfc2VyaWFsID09IE5VTEwpIHsKKwkJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIHJlc2V0dGluZyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgZmllbGQgdmFsdWVzIHRvIHplcm8gKi8KKwltZW1zZXQoQVRFTjIwMTFfc2VyaWFsLCAwLCBzaXplb2Yoc3RydWN0IEFURU5JTlRMX3NlcmlhbCkpOworCisJQVRFTjIwMTFfc2VyaWFsLT5zZXJpYWwgPSBzZXJpYWw7CisJLyogaW5pdGlsaXplIHN0YXR1cyBwb2xsaW5nIGZsYWcgdG8gMCAqLworCUFURU4yMDExX3NlcmlhbC0+c3RhdHVzX3BvbGxpbmdfc3RhcnRlZCA9IDA7CisKKwl1c2Jfc2V0X3NlcmlhbF9kYXRhKHNlcmlhbCwgQVRFTjIwMTFfc2VyaWFsKTsKKwlBVEVOMjAxMV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9CisJICAgIEFURU4yMDExX2NhbGNfbnVtX3BvcnRzKHNlcmlhbCk7CisJLyogd2Ugc2V0IHVwIHRoZSBwb2ludGVycyB0byB0aGUgZW5kcG9pbnRzIGluIHRoZSBBVEVOMjAxMV9vcGVuICoKKwkgKiBmdW5jdGlvbiwgYXMgdGhlIHN0cnVjdHVyZXMgYXJlbid0IGNyZWF0ZWQgeWV0LiAgICAgICAgICAgICAqLworCisJLyogc2V0IHVwIHBvcnQgcHJpdmF0ZSBzdHJ1Y3R1cmVzICovCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKKwkJQVRFTjIwMTFfcG9ydCA9CisJCSAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgQVRFTklOVExfcG9ydCksIEdGUF9LRVJORUwpOworCQlpZiAoQVRFTjIwMTFfcG9ydCA9PSBOVUxMKSB7CisJCQllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fZnVuY19fKTsKKwkJCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBOVUxMKTsKKwkJCWtmcmVlKEFURU4yMDExX3NlcmlhbCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQltZW1zZXQoQVRFTjIwMTFfcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBBVEVOSU5UTF9wb3J0KSk7CisKKwkJLyoKKwkJICogSW5pdGlhbGl6ZSBhbGwgcG9ydCBpbnRlcnJ1cHQgZW5kIHBvaW50IHRvIHBvcnQgMAorCQkgKiBpbnQgZW5kcG9pbnQuIE91ciBkZXZpY2UgaGFzIG9ubHkgb25lIGludGVycnVwdCBlbmQgcG9pbnQKKwkJICogY29tbWFuIHRvIGFsbCBwb3J0CisJCSAqLworCQkvKiBzZXJpYWwtPnBvcnRbaV0tPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MgPSBzZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7ICovCisKKwkJQVRFTjIwMTFfcG9ydC0+cG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgQVRFTjIwMTFfcG9ydCk7CisKKwkJbWlub3IgPSBzZXJpYWwtPnBvcnRbaV0tPnNlcmlhbC0+bWlub3I7CisJCWlmIChtaW5vciA9PSBTRVJJQUxfVFRZX05PX01JTk9SKQorCQkJbWlub3IgPSAwOworCQlBVEVOMjAxMV9wb3J0LT5wb3J0X251bSA9CisJCSAgICAoKHNlcmlhbC0+cG9ydFtpXS0+bnVtYmVyIC0gbWlub3IpICsgMSk7CisKKwkJaWYgKEFURU4yMDExX3BvcnQtPnBvcnRfbnVtID09IDEpIHsKKwkJCUFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0ID0gMHgwOworCQkJQVRFTjIwMTFfcG9ydC0+Q29udHJvbFJlZ09mZnNldCA9IDB4MTsKKwkJCUFURU4yMDExX3BvcnQtPkRjclJlZ09mZnNldCA9IDB4NDsKKwkJfSBlbHNlIGlmICgoQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0gPT0gMikKKwkJCSAgICYmIChBVEVOMjAxMV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9PQorCQkJICAgICAgIDQpKSB7CisJCQlBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCA9IDB4ODsKKwkJCUFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQgPSAweDk7CisJCQlBVEVOMjAxMV9wb3J0LT5EY3JSZWdPZmZzZXQgPSAweDE2OworCQl9IGVsc2UgaWYgKChBVEVOMjAxMV9wb3J0LT5wb3J0X251bSA9PSAyKQorCQkJICAgJiYgKEFURU4yMDExX3NlcmlhbC0+QVRFTjIwMTFfc3BlY3RydW1fMm9yNHBvcnRzID09CisJCQkgICAgICAgMikpIHsKKwkJCUFURU4yMDExX3BvcnQtPlNwUmVnT2Zmc2V0ID0gMHhhOworCQkJQVRFTjIwMTFfcG9ydC0+Q29udHJvbFJlZ09mZnNldCA9IDB4YjsKKwkJCUFURU4yMDExX3BvcnQtPkRjclJlZ09mZnNldCA9IDB4MTk7CisJCX0gZWxzZSBpZiAoKEFURU4yMDExX3BvcnQtPnBvcnRfbnVtID09IDMpCisJCQkgICAmJiAoQVRFTjIwMTFfc2VyaWFsLT5BVEVOMjAxMV9zcGVjdHJ1bV8yb3I0cG9ydHMgPT0KKwkJCSAgICAgICA0KSkgeworCQkJQVRFTjIwMTFfcG9ydC0+U3BSZWdPZmZzZXQgPSAweGE7CisJCQlBVEVOMjAxMV9wb3J0LT5Db250cm9sUmVnT2Zmc2V0ID0gMHhiOworCQkJQVRFTjIwMTFfcG9ydC0+RGNyUmVnT2Zmc2V0ID0gMHgxOTsKKwkJfSBlbHNlIGlmICgoQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0gPT0gNCkKKwkJCSAgICYmIChBVEVOMjAxMV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9PQorCQkJICAgICAgIDQpKSB7CisJCQlBVEVOMjAxMV9wb3J0LT5TcFJlZ09mZnNldCA9IDB4YzsKKwkJCUFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQgPSAweGQ7CisJCQlBVEVOMjAxMV9wb3J0LT5EY3JSZWdPZmZzZXQgPSAweDFjOworCQl9CisKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgQVRFTjIwMTFfcG9ydCk7CisKKwkJLyogZW5hYmxlIHJ4X2Rpc2FibGUgYml0IGluIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKworCQlzdGF0dXMgPSBnZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJCSAgICAgIEFURU4yMDExX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsICZEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiUmVhZGluZyBDb250cm9sUmVnIGZhaWxlZCBzdGF0dXMtMHgleCIsCisJCQkJc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZworCQkJICAgICgiQ29udHJvbFJlZyBSZWFkaW5nIHN1Y2Nlc3MgdmFsIGlzICV4LCBzdGF0dXMlZCIsCisJCQkgICAgIERhdGEsIHN0YXR1cyk7CisJCURhdGEgfD0gMHgwODsJLyogc2V0dGluZyBkcml2ZXIgZG9uZSBiaXQgKi8KKwkJRGF0YSB8PSAweDA0OwkvKiBzcDFfYml0IHRvIGhhdmUgY3RzIGNoYW5nZSByZWZsZWN0IGluIG1vZGVtIHN0YXR1cyByZWcgKi8KKworCQkvKiBEYXRhIHw9IDB4MjA7ICovCS8qIHJ4X2Rpc2FibGUgYml0ICovCisJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJICAgICAgQVRFTjIwMTFfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcKKwkJCSAgICAoIldyaXRpbmcgQ29udHJvbFJlZyBmYWlsZWQocnhfZGlzYWJsZSkgc3RhdHVzLTB4JXgiLAorCQkJICAgICBzdGF0dXMpOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJZGJnCisJCQkgICAgKCJDb250cm9sUmVnIFdyaXRpbmcgc3VjY2VzcyhyeF9kaXNhYmxlKSBzdGF0dXMlZCIsCisJCQkgICAgIHN0YXR1cyk7CisKKwkJLyoKKwkJICogV3JpdGUgZGVmYXVsdCB2YWx1ZXMgaW4gRENSIChpLmUgMHgwMSBpbiBEQ1IwLCAweDA1IGluIERDUjIKKwkJICogYW5kIDB4MjQgaW4gRENSMworCQkgKi8KKwkJRGF0YSA9IDB4MDE7CisJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJICAgICAgKF9fdTE2KShBVEVOMjAxMV9wb3J0LT5EY3JSZWdPZmZzZXQgKyAwKSwKKwkJCQkgICAgICBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiV3JpdGluZyBEQ1IwIGZhaWxlZCBzdGF0dXMtMHgleCIsIHN0YXR1cyk7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlkYmcoIkRDUjAgV3JpdGluZyBzdWNjZXNzIHN0YXR1cyVkIiwgc3RhdHVzKTsKKworCQlEYXRhID0gMHgwNTsKKwkJc3RhdHVzID0gc2V0X3JlZ19zeW5jKHNlcmlhbC0+cG9ydFtpXSwKKwkJCQkgICAgICAoX191MTYpKEFURU4yMDExX3BvcnQtPkRjclJlZ09mZnNldCArIDEpLAorCQkJCSAgICAgIERhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGJnKCJXcml0aW5nIERDUjEgZmFpbGVkIHN0YXR1cy0weCV4Iiwgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZygiRENSMSBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWQiLCBzdGF0dXMpOworCisJCURhdGEgPSAweDI0OworCQlzdGF0dXMgPSBzZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJCSAgICAgIChfX3UxNikoQVRFTjIwMTFfcG9ydC0+RGNyUmVnT2Zmc2V0ICsgMiksCisJCQkJICAgICAgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcoIldyaXRpbmcgRENSMiBmYWlsZWQgc3RhdHVzLTB4JXgiLCBzdGF0dXMpOworCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJZGJnKCJEQ1IyIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZCIsIHN0YXR1cyk7CisKKwkJLyogd3JpdGUgdmFsdWVzIGluIGNsa3N0YXJ0MHgwIGFuZCBjbGttdWx0aSAweDIwICovCisJCURhdGEgPSAweDA7CisJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sIENMS19TVEFSVF9WQUxVRV9SRUdJU1RFUiwKKwkJCQkgICAgICBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZworCQkJICAgICgiV3JpdGluZyBDTEtfU1RBUlRfVkFMVUVfUkVHSVNURVIgZmFpbGVkIHN0YXR1cy0weCV4IiwKKwkJCSAgICAgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZworCQkJICAgICgiQ0xLX1NUQVJUX1ZBTFVFX1JFR0lTVEVSIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZCIsCisJCQkgICAgIHN0YXR1cyk7CisKKwkJRGF0YSA9IDB4MjA7CisJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sIENMS19NVUxUSV9SRUdJU1RFUiwKKwkJCQkgICAgICBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZworCQkJICAgICgiV3JpdGluZyBDTEtfTVVMVElfUkVHSVNURVIgZmFpbGVkIHN0YXR1cy0weCV4IiwKKwkJCSAgICAgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZygiQ0xLX01VTFRJX1JFR0lTVEVSIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZCIsCisJCQkJc3RhdHVzKTsKKworCQkvKiBaZXJvIExlbmd0aCBmbGFnIHJlZ2lzdGVyICovCisJCWlmICgoQVRFTjIwMTFfcG9ydC0+cG9ydF9udW0gIT0gMSkKKwkJICAgICYmIChBVEVOMjAxMV9zZXJpYWwtPkFURU4yMDExX3NwZWN0cnVtXzJvcjRwb3J0cyA9PSAyKSkgeworCisJCQlEYXRhID0gMHhmZjsKKwkJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJCSAgICAgIChfX3UxNikoWkxQX1JFRzEgKyAoKF9fdTE2KUFURU4yMDExX3BvcnQtPnBvcnRfbnVtKSksCisJCQkJCSAgICAgIERhdGEpOworCQkJZGJnKCJaTElQIG9mZnNldCV4IiwKKwkJCQkoX191MTYpIChaTFBfUkVHMSArCisJCQkJCSAoKF9fdTE2KSBBVEVOMjAxMV9wb3J0LT5wb3J0X251bSkpKTsKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJZGJnCisJCQkJICAgICgiV3JpdGluZyBaTFBfUkVHJWQgZmFpbGVkIHN0YXR1cy0weCV4IiwKKwkJCQkgICAgIGkgKyAyLCBzdGF0dXMpOworCQkJCWJyZWFrOworCQkJfSBlbHNlCisJCQkJZGJnKCJaTFBfUkVHJWQgV3JpdGluZyBzdWNjZXNzIHN0YXR1cyVkIiwKKwkJCQkJaSArIDIsIHN0YXR1cyk7CisJCX0gZWxzZSB7CisJCQlEYXRhID0gMHhmZjsKKwkJCXN0YXR1cyA9IHNldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJCSAgICAgIChfX3UxNikoWkxQX1JFRzEgKyAoKF9fdTE2KUFURU4yMDExX3BvcnQtPnBvcnRfbnVtKSAtIDB4MSksCisJCQkJCSAgICAgIERhdGEpOworCQkJZGJnKCJaTElQIG9mZnNldCV4IiwKKwkJCQkoX191MTYpIChaTFBfUkVHMSArCisJCQkJCSAoKF9fdTE2KSBBVEVOMjAxMV9wb3J0LT5wb3J0X251bSkgLQorCQkJCQkgMHgxKSk7CisJCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJCWRiZworCQkJCSAgICAoIldyaXRpbmcgWkxQX1JFRyVkIGZhaWxlZCBzdGF0dXMtMHgleCIsCisJCQkJICAgICBpICsgMSwgc3RhdHVzKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZQorCQkJCWRiZygiWkxQX1JFRyVkIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZCIsCisJCQkJCWkgKyAxLCBzdGF0dXMpOworCisJCX0KKwkJQVRFTjIwMTFfcG9ydC0+Y29udHJvbF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOworCQlBVEVOMjAxMV9wb3J0LT5jdHJsX2J1ZiA9IGttYWxsb2MoMTYsIEdGUF9LRVJORUwpOworCisJfQorCisJLyogWmVybyBMZW5ndGggZmxhZyBlbmFibGUgKi8KKwlEYXRhID0gMHgwZjsKKwlzdGF0dXMgPSBzZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0WzBdLCBaTFBfUkVHNSwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJXcml0aW5nIFpMUF9SRUc1IGZhaWxlZCBzdGF0dXMtMHgleCIsIHN0YXR1cyk7CisJCXJldHVybiAtMTsKKwl9IGVsc2UKKwkJZGJnKCJaTFBfUkVHNSBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWQiLCBzdGF0dXMpOworCisJLyogc2V0dGluZyBjb25maWd1cmF0aW9uIGZlYXR1cmUgdG8gb25lICovCisJdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJKF9fdTgpIDB4MDMsIDB4MDAsIDB4MDEsIDB4MDAsIE5VTEwsIDB4MDAsIDUgKiBIWik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIEFURU4yMDExX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisJc3RydWN0IEFURU5JTlRMX3BvcnQgKkFURU4yMDExX3BvcnQ7CisKKwkvKiBjaGVjayBmb3IgdGhlIHBvcnRzIHRvIGJlIGNsb3NlZCxjbG9zZSB0aGUgcG9ydHMgYW5kIGRpc2Nvbm5lY3QgKi8KKworCS8qIGZyZWUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGZvciBzZXJpYWwgcG9ydCAgKgorCSAqIHN0b3AgcmVhZHMgYW5kIHdyaXRlcyBvbiBhbGwgcG9ydHMgICAgICAgICAgICAgICAgKi8KKworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7CisJCUFURU4yMDExX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldKTsKKwkJa2ZyZWUoQVRFTjIwMTFfcG9ydC0+Y3RybF9idWYpOworCQl1c2Jfa2lsbF91cmIoQVRFTjIwMTFfcG9ydC0+Y29udHJvbF91cmIpOworCQlrZnJlZShBVEVOMjAxMV9wb3J0KTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJfQorCisJLyogZnJlZSBwcml2YXRlIHN0cnVjdHVyZSBhbGxvY2F0ZWQgZm9yIHNlcmlhbCBkZXZpY2UgKi8KKworCWtmcmVlKHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKSk7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGF0ZW5fc2VyaWFsX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPQkJImF0ZW4yMDExIiwKKwkJfSwKKwkuZGVzY3JpcHRpb24gPQkJRFJJVkVSX0RFU0MsCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5vcGVuID0JCQlBVEVOMjAxMV9vcGVuLAorCS5jbG9zZSA9CQlBVEVOMjAxMV9jbG9zZSwKKwkud3JpdGUgPQkJQVRFTjIwMTFfd3JpdGUsCisJLndyaXRlX3Jvb20gPQkJQVRFTjIwMTFfd3JpdGVfcm9vbSwKKwkuY2hhcnNfaW5fYnVmZmVyID0JQVRFTjIwMTFfY2hhcnNfaW5fYnVmZmVyLAorCS50aHJvdHRsZSA9CQlBVEVOMjAxMV90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlBVEVOMjAxMV91bnRocm90dGxlLAorCS5jYWxjX251bV9wb3J0cyA9CUFURU4yMDExX2NhbGNfbnVtX3BvcnRzLAorCisJLmlvY3RsID0JCUFURU4yMDExX2lvY3RsLAorCS5zZXRfdGVybWlvcyA9CQlBVEVOMjAxMV9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0JCUFURU4yMDExX2JyZWFrLAorCS50aW9jbWdldCA9CQlBVEVOMjAxMV90aW9jbWdldCwKKwkudGlvY21zZXQgPQkJQVRFTjIwMTFfdGlvY21zZXQsCisJLmF0dGFjaCA9CQlBVEVOMjAxMV9zdGFydHVwLAorCS5zaHV0ZG93biA9CQlBVEVOMjAxMV9zaHV0ZG93biwKKwkucmVhZF9idWxrX2NhbGxiYWNrID0JQVRFTjIwMTFfYnVsa19pbl9jYWxsYmFjaywKKwkucmVhZF9pbnRfY2FsbGJhY2sgPQlBVEVOMjAxMV9pbnRlcnJ1cHRfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXRlbl9kcml2ZXIgPSB7CisJLm5hbWUgPQkJImF0ZW4yMDExIiwKKwkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CWlkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXRlbl9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCS8qIFJlZ2lzdGVyIHdpdGggdGhlIHVzYiBzZXJpYWwgKi8KKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZhdGVuX3NlcmlhbF9kcml2ZXIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IgorCSAgICAgICBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CisKKwkvKiBSZWdpc3RlciB3aXRoIHRoZSB1c2IgKi8KKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmF0ZW5fZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmF0ZW5fc2VyaWFsX2RyaXZlcik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRlbl9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmF0ZW5fZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmF0ZW5fc2VyaWFsX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGF0ZW5faW5pdCk7Cittb2R1bGVfZXhpdChhdGVuX2V4aXQpOworCisvKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKaW5kZXggMmViNjEzNy4uMWM3MTA2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5wcml2X2xvY2ssIGZsYWdzKTsKIAotCXByaXYgPSBrbWVtX2NhY2hlX2FsbG9jKHN0dWJfcHJpdl9jYWNoZSwgR0ZQX0FUT01JQyk7CisJcHJpdiA9IGttZW1fY2FjaGVfemFsbG9jKHN0dWJfcHJpdl9jYWNoZSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFwcml2KSB7CiAJCWRldl9lcnIoJnNkZXYtPmludGVyZmFjZS0+ZGV2LCAiYWxsb2Mgc3R1Yl9wcml2XG4iKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2Rldi0+cHJpdl9sb2NrLCBmbGFncyk7CkBAIC0zNDIsOCArMzQyLDYgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JbWVtc2V0KHByaXYsIDAsIHNpemVvZihzdHJ1Y3Qgc3R1Yl9wcml2KSk7Ci0KIAlwcml2LT5zZXFudW0gPSBwZHUtPmJhc2Uuc2VxbnVtOwogCXByaXYtPnNkZXYgPSBzZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYwppbmRleCAwZmQzM2E2Li5lNGM3MTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKQEAgLTMxLDggKzMxLDcgQEAKIAljaGFyICpzID0gb3V0OwogCWludCBpID0gMDsKIAotCWlmICghdGhlX2NvbnRyb2xsZXIgfHwgIW91dCkKLQkJQlVHKCk7CisJQlVHX09OKCF0aGVfY29udHJvbGxlciB8fCAhb3V0KTsKIAogCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3NfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzX2YuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQzM2I1YS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9ic3NfZi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotI2lmbmRlZiBfX1dJTkJPTkRfQlNTX0ZfSAotI2RlZmluZSBfX1dJTkJPTkRfQlNTX0ZfSAotCi0jaW5jbHVkZSAiY29yZS5oIgotCi1zdHJ1Y3QgUE1LSURfSW5mb3JtYXRpb25fRWxlbWVudDsKLQotLy8KLS8vIEJTUyBkZXNjcmlwdG9yIERhdGFCYXNlIG1hbmFnZW1lbnQgZ2xvYmFsIGZ1bmN0aW9uCi0vLwotCi12b2lkIHZCU1NkZXNjcmlwdGlvbkluaXQoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci12b2lkIHZCU1Nmb3VuZExpc3Qoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci11OCBib0NoYW5GaWx0ZXIoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTggQ2hhbk5vKTsKLXUxNiB3QlNTYWxsb2NhdGVFbnRyeShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyKTsKLXUxNiB3QlNTR2V0RW50cnkoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci12b2lkIHZTaW1wbGVIb3VzZUtlZXBpbmcoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci11MTYgd0JTU2hvdXNlS2VlcGluZyhzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyKTsKLXZvaWQgQ2xlYXJCU1NkZXNjcHQoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTE2IGkpOwotdTE2IHdCU1NmaW5kQnNzSUQoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTggKnBiQnNzaWQpOwotdTE2IHdCU1NmaW5kRGVkaWNhdGVDYW5kaWRhdGUoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgc3RydWN0IFNTSURfRWxlbWVudCAqcHNTc2lkLCB1OCAqcGJCc3NpZCk7Ci11MTYgd0JTU2ZpbmRNQUNhZGRyKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHU4ICpwYk1hY0FkZHIpOwotdTE2IHdCU1NzZWFyY2hNQUNhZGRyKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHU4ICpwYk1hY0FkZHIsIHU4IGJhbmQpOwotdTE2IHdCU1NhZGRTY2FuRGF0YShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiwgdTE2LCBwc1JYREFUQSk7Ci11MTYgd0JTU1VwZGF0ZVNjYW5EYXRhKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHUxNiB3QnNzSWR4LCBwc1JYREFUQSBwc1JjdkRhdGEpOwotdTE2IHdCU1NjcmVhdGVJQlNTZGF0YShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhKTsKLXZvaWQgRGVzaXJlZFJhdGUyQlNTZGVzY3JpcHRvcihzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhLAotCQkJCQkJCSB1OCAqcEJhc2ljUmF0ZVNldCwgdTggQmFzaWNSYXRlQ291bnQsCi0JCQkJCQkJIHU4ICpwT3BlcmF0aW9uUmF0ZVNldCwgdTggT3BlcmF0aW9uUmF0ZUNvdW50KTsKLXZvaWQgRGVzaXJlZFJhdGUySW5mb0VsZW1lbnQoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTgJKmFkZHIsIHUxNiAqaUZpbGRPZmZzZXQsCi0JCQkJCQkJIHU4ICpwQmFzaWNSYXRlU2V0LCB1OCBCYXNpY1JhdGVDb3VudCwKLQkJCQkJCQkgdTggKnBPcGVyYXRpb25SYXRlU2V0LCB1OCBPcGVyYXRpb25SYXRlQ291bnQpOwotdm9pZCBCU1NBZGRJQlNTZGF0YShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCBQV0JfQlNTREVTQ1JJUFRJT04gcHNEZXNEYXRhKTsKLXVuc2lnbmVkIGNoYXIgYm9DbXBNYWNBZGRyKCB1OCAqLCB1OCAqKTsKLXVuc2lnbmVkIGNoYXIgYm9DbXBTU0lEKHN0cnVjdCBTU0lEX0VsZW1lbnQgKnBzU1NJRDEsIHN0cnVjdCBTU0lEX0VsZW1lbnQgKnBzU1NJRDIpOwotdTE2IHdCU1NmaW5kU1NJRChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCBzdHJ1Y3QgU1NJRF9FbGVtZW50ICpwc1NzaWQpOwotdTE2IHdSb2FtaW5nUXVlcnkoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci12b2lkIHZSYXRlVG9CaXRtYXAoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgdTE2IGluZGV4KTsKLXU4IGJSYXRlVG9CaXRtYXBJbmRleChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1OCBiUmF0ZSk7Ci11OCBiQml0bWFwVG9SYXRlKHU4IGkpOwotdW5zaWduZWQgY2hhciBib0lzRVJQc3RhKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHUxNiBpKTsKLXVuc2lnbmVkIGNoYXIgYm9DaGVja0Nvbm5lY3Qoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci11bnNpZ25lZCBjaGFyIGJvQ2hlY2tTaWduYWwoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci12b2lkIEFkZElCU1NJZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLFBXQl9CU1NERVNDUklQVElPTiBwc0Rlc0RhdGEgKTsvL2FkZGVkIGJ5IHdzIGZvciBXUEFfTm9uZTA2LzAxLzA0Ci12b2lkIEJzc1NjYW5VcFRvRGF0ZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyKTsKLXZvaWQgQnNzVXBUb0RhdGUoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcik7Ci12b2lkIFJhdGVTb3J0KHU4ICpSYXRlQXJyYXksIHU4IG51bSwgdTggbW9kZSk7Ci12b2lkIFJhdGVSZVNvcnRGb3JTUmF0ZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1OCAqUmF0ZUFycmF5LCB1OCBudW0pOwotdm9pZCBBc3NlbWJsZV9JRShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1MTYgd0Jzc0lkeCk7Ci12b2lkIFNldE1heFR4UmF0ZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyKTsKLQotdm9pZCBDcmVhdGVXcGFJRShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiBhZGFwdGVyLCB1MTYqIGlGaWxkT2Zmc2V0LCB1OCAqbXNnLCBzdHJ1Y3QgIE1hbmFnZW1lbnRfRnJhbWUqIG1zZ0hlYWRlciwKLQkJCQkgc3RydWN0IEFzc29jaWF0aW9uX1JlcXVlc3RfRnJhbWVfQm9keSogbXNnQm9keSwgdTE2IGlNU2luZGV4KTsgLy9hZGRlZCBieSBXUyAwNS8xNC8wNQotCi0jaWZkZWYgX1dQQTJfCi12b2lkIENyZWF0ZVJzbklFKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHUxNiogaUZpbGRPZmZzZXQsIHU4ICptc2csIHN0cnVjdCAgTWFuYWdlbWVudF9GcmFtZSogbXNnSGVhZGVyLAotCQkJCSBzdHJ1Y3QgQXNzb2NpYXRpb25fUmVxdWVzdF9GcmFtZV9Cb2R5KiBtc2dCb2R5LCB1MTYgaU1TaW5kZXgpOy8vYWRkZWQgYnkgV1MgMDUvMTQvMDUKLQotdTE2IFNlYXJjaFBta2lkKHN0cnVjdCB3YnNvZnRfcHJpdiAqIGFkYXB0ZXIsIHN0cnVjdCAgTWFuYWdlbWVudF9GcmFtZSogbXNnSGVhZGVyLAotCQkJCSAgIHN0cnVjdCBQTUtJRF9JbmZvcm1hdGlvbl9FbGVtZW50ICogQXNzb1JlcV9QTUtJRCApOwotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzZHNjcHQuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2Jzc2RzY3B0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNzFkNGUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvYnNzZHNjcHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0jaWZuZGVmIF9fV0lOQk9ORF9CU1NEU0NQVF9ICi0jZGVmaW5lIF9fV0lOQk9ORF9CU1NEU0NQVF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSAibWRzX3MuaCIKLSNpbmNsdWRlICJtbG1lX3MuaCIKLQotLy8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwotLy8JYnNzZHNjcHQuYwotLy8JCUJTUyBkZXNjcmlwdG9yIGRhdGEgYmFzZQotLy8JaGlzdG9yeSA6Ci0vLwotLy8JRGVzY3JpcHRpb246Ci0vLwkJQlNTIGRlc2NyaXB0b3IgZGF0YSBiYXNlIHdpbGwgc3RvcmUgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBzdGF0aW9ucyBhdCB0aGUKLS8vCQlzdXJyb3VuZGluZyBlbnZpcm9ubWVudC4gVGhlIGZpcnN0IGVudHJ5KCBwc0JTUygwKSApIHdpbGwgbm90IGJlIHVzZWQgYW5kIHRoZQotLy8JCXNlY29uZCBvbmUoIHBzQlNTKDEpICkgd2lsbCBiZSB1c2VkIGZvciB0aGUgYnJvYWRjYXN0IGFkZHJlc3MuCi0vLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0KLS8vI2RlZmluZSBNQVhfQUNDX1JTU0lfQ09VTlQJCTEwCi0jZGVmaW5lIE1BWF9BQ0NfUlNTSV9DT1VOVAkJNgotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vCi0vLyBCU1MgRGVzY3JpcHRpb24gc2V0IEVsZW1lbnQgLCB0byBzdG9yZSBzY2FuIHJlY2VpdmVkIEJlYWNvbiBpbmZvcm1hdGlvbgotLy8KLS8vIE91cidzIGRpZmZlcnMgc2xpZ2h0bHkgZnJvbSB0aGUgc3BlY3MuIFRoZSBzcGVjaWZ5IGEgUEhZX1BhcmFtZXRlcl9TZXQuCi0vLyBTaW5jZSB3ZSdyZSBvbmx5IGRvaW5nIGEgRFMgZGVzaWduIHJpZ2h0IG5vdywgd2UganVzdCBoYXZlIGEgRFMgc3RydWN0dXJlLgotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi10eXBlZGVmIHN0cnVjdCBCU1NEZXNjcmlwdGlvbkVsZW1lbnQKLXsKLQl1MzIJCVNsb3RWYWxpZDsKLQl1MzIJCVBvd2VyU2F2ZU1vZGU7Ci0JUlhMQVlFUjEJUnhMYXllcjE7Ci0KLSAgICB1OAkJYWJQZWVyQWRkcmVzc1sgTUFDX0FERFJfTEVOR1RIICsgMiBdOyAvLyBwZWVyIE1BQyBBZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNlc3Npb24uIDYtT0NURVQgdmFsdWUKLSAgICB1MzIJCWR3QmdTY2FuU3RhbXA7CQkvLyBCZ1NjYW4gU2VxdWVuY2UgQ291bnRlciBzdGFtcCwgcmVjb3JkIHBzUk9BTS0+ZHdTY2FuQ291bnRlci4KLQotCXUxNgkJQmVhY29uX1BlcmlvZDsKLQl1MTYJCXdBVElNX1dpbmRvdzsKLQotICAgIHU4CQlhYkJzc0lEWyBNQUNfQUREUl9MRU5HVEggKyAyIF07CQkJCS8vIDZCCi0KLSAgICB1OAkJYkJzc1R5cGU7Ci0gICAgdTgJCURUSU1fUGVyaW9kOyAgICAgICAgLy8gMSBvY3RldCB1c3VhbGx5IGZyb20gVElNIGVsZW1lbnQsIGlmIHByZXNlbnQKLQl1OAkJYm9JblRpbWVySGFuZGxlcjsKLQl1OAkJYm9FUlA7CQkJLy8gYW5hbHlzaXMgRVJQIG9yIChleHRlbmRlZCkgc3VwcG9ydGVkIHJhdGUgZWxlbWVudAotCi0JdTgJCVRpbWVzdGFtcFs4XTsKLQl1OAkJQmFzaWNSYXRlWzMyXTsKLQl1OAkJT3BlcmF0aW9uYWxSYXRlWzMyXTsKLQl1MzIJCWR3QmFzaWNSYXRlQml0bWFwOwkJCS8vYml0IG1hcCwgcmV0cmlldmUgZnJvbSBTdXBwb3J0ZWRSYXRlU2V0Ci0JdTMyCQlkd09wZXJhdGlvbmFsUmF0ZUJpdG1hcDsJLy9iaXQgbWFwLCByZXRyaWV2ZSBmcm9tIFN1cHBvcnRlZFJhdGVTZXQgYW5kCi0JCQkJCQkJCQkJLy8gRXh0ZW5kZWRTdXBwb3J0ZWRSYXRlU2V0Ci0JLy8gRm9yIFJTU0kgY2FsY3VsYXRpbmcKLQl1MzIJCUhhbFJzc2lbTUFYX0FDQ19SU1NJX0NPVU5UXTsgLy8gRW5jb2RlLiBJdCBtdXN0IHVzZSBNQUNSTyBvZiBIQUwgdG8gZ2V0IHRoZSBMTkEgYW5kIEFHQyBkYXRhCi0JdTMyCQlIYWxSc3NpSW5kZXg7Ci0KLQkvLy8vRnJvbSBiZWFjb24vcHJvYmUgcmVzcG9uc2UKLSAgICBzdHJ1Y3QgU1NJRF9FbGVtZW50IFNTSUQ7CQkJCS8vIDM0QgotCXU4CXJlc2VydmVkXzFbIDIgXTsKLQotICAgIHN0cnVjdCBDYXBhYmlsaXR5X0luZm9ybWF0aW9uX0VsZW1lbnQgICBDYXBhYmlsaXR5SW5mb3JtYXRpb247ICAvLyAyQgotCXU4CXJlc2VydmVkXzJbIDIgXTsKLQotICAgIHN0cnVjdCBDRl9QYXJhbWV0ZXJfU2V0X0VsZW1lbnQgICAgQ0ZfUGFyYW1ldGVyX1NldDsJCS8vIDhCCi0gICAgc3RydWN0IElCU1NfUGFyYW1ldGVyX1NldF9FbGVtZW50ICBJQlNTX1BhcmFtZXRlcl9TZXQ7CQkvLyA0QgotICAgIHN0cnVjdCBUSU1fRWxlbWVudCAgICAgICAgICAgICAgICAgVElNX0VsZW1lbnRfU2V0OyAJCQkvLyAyNTZCCi0KLSAgICBzdHJ1Y3QgRFNfUGFyYW1ldGVyX1NldF9FbGVtZW50ICAgIERTX1BhcmFtZXRlcl9TZXQ7CQkvLyAzQgotCXU4CXJlc2VydmVkXzM7Ci0KLQlzdHJ1Y3QgRVJQX0luZm9ybWF0aW9uX0VsZW1lbnQJCUVSUF9JbmZvcm1hdGlvbl9TZXQ7CS8vIDNCCi0JdTgJcmVzZXJ2ZWRfNDsKLQotICAgIHN0cnVjdCBTdXBwb3J0ZWRfUmF0ZXNfRWxlbWVudCAgICAgU3VwcG9ydGVkUmF0ZVNldDsJCQkvLyAxMEIKLQl1OAlyZXNlcnZlZF81WzJdOwotCi0Jc3RydWN0IEV4dGVuZGVkX1N1cHBvcnRlZF9SYXRlc19FbGVtZW50CUV4dGVuZGVkU3VwcG9ydGVkUmF0ZVNldDsJLy8gMjU3QgotCXU4CXJlc2VydmVkXzZbM107Ci0KLQl1OAliYW5kOwotCXU4CXJlc2VydmVkXzdbM107Ci0KLQkvLyBmb3IgTUxNRSBtb2R1bGUKLSAgICB1MTYJCXdTdGF0ZTsJCQkvLyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3lzdGVtCi0JdTE2CQl3SW5kZXg7CQkJLy8gVEhJUyBCU1MgZWxlbWVudCBlbnRyeSBpbmRleAotCi0Jdm9pZCoJcHNhZGFwdGVyOwkJLy8gcG9pbnRlciB0byBUSElTIGFkYXB0ZXIKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsgIC8vIE1MTUUgdGltZXIKLQotICAgIC8vIEF1dGhlbnRpY2F0aW9uCi0gICAgdTE2CQl3QXV0aEFsZ287ICAgICAgLy8gcGVlciBNQUMgTUxNRSB1c2UgQXV0aCBhbGdvcml0aG0sIGRlZmF1bHQgT1BFTl9BVVRICi0gICAgdTE2CQl3QXV0aFNlcU51bTsgICAgLy8gY3VycmVudCBsb2NhbCBNQUMgc2VuZG91dCBBdXRoUmVxIHNlcXVlbmNlIG51bWJlcgotCi0JdTgJCWF1dGhfY2hhbGxlbmdlVGV4dFsxMjhdOwotCi0JLy8vL0ZvciBYUDoKLSAgICB1MzIJCWllc19sZW47CQkvLyBpbmZvcm1hdGlvbiBlbGVtZW50IGxlbmd0aAotICAgIHU4CQlpZXNbMjU2XTsJCS8vIGluZm9ybWF0aW9uIGVsZW1lbnQKLQotCS8vLy9Gb3IgV1BBCi0JdTgJUnNuSWVfVHlwZVsyXTsJCS8vYWRkZWQgYnkgd3MgZm9yIGRpc3Rpbmd1aXNoIFdQQSBhbmQgV1BBMiAwNS8xNC8wNAotCXU4CVJzbkllX2xlbjsKLSAgICB1OAlSc25fTnVtOwotCi0gICAgLy8gdG8gcmVjb3JkIHRoZSByc24gY2lwaGVyIHN1aXRlcyxhZGRkZWQgYnkgd3MgMDkvMDUvMDQKLQlTVUlURV9TRUxFQ1RPUgkJCWdyb3VwX2NpcGhlcjsgLy8gNEIKLQlTVUlURV9TRUxFQ1RPUgkJCXBhaXJ3aXNlX2tleV9jaXBoZXJfc3VpdGVzW1dMQU5fTUFYX1BBSVJXSVNFX0NJUEhFUl9TVUlURV9DT1VOVF07Ci0JU1VJVEVfU0VMRUNUT1IJCQlhdXRoX2tleV9tZ3Rfc3VpdGVzW1dMQU5fTUFYX0FVVEhfS0VZX01HVF9TVUlURV9MSVNUX0NPVU5UXTsKLQotCXUxNgkJCQkJcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9jb3VudDsKLQl1MTYJCQkJCWF1dGhfa2V5X21ndF9zdWl0ZV9jb3VudDsKLQotCXU4CQkJCQlwYWlyd2lzZV9rZXlfY2lwaGVyX3N1aXRlX3NlbGVjdGVkOwotCXU4CQkJCQlhdXRoX2tleV9tZ3Rfc3VpdGVfc2VsZWN0ZWQ7Ci0JdTgJCQkJCXJlc2VydmVkXzhbMl07Ci0KLQlzdHJ1Y3QgUlNOX0NhcGFiaWxpdHlfRWxlbWVudCAgcnNuX2NhcGFiaWxpdGllczsgLy8gMkIKLQl1OAkJCQkJcmVzZXJ2ZWRfOVsyXTsKLQotICAgIC8vdG8gcmVjb3JkIHRoZSByc24gY2lwaGVyIHN1aXRlcyBmb3IgV1BBMgotICAgICNpZmRlZiBfV1BBMl8KLQl1MzIJCQkJCXByZV9hdXRoOwkJLy9hZGRlZCBieSBXUyBmb3IgZGlzdGluZ3Vpc2ggZm9yIDA1LzA0LzA0Ci0gICAgU1VJVEVfU0VMRUNUT1IJCQl3cGEyX2dyb3VwX2NpcGhlcjsgLy8gNEIKLQlTVUlURV9TRUxFQ1RPUgkJCXdwYTJfcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZXNbV0xBTl9NQVhfUEFJUldJU0VfQ0lQSEVSX1NVSVRFX0NPVU5UXTsKLQlTVUlURV9TRUxFQ1RPUgkJCXdwYTJfYXV0aF9rZXlfbWd0X3N1aXRlc1tXTEFOX01BWF9BVVRIX0tFWV9NR1RfU1VJVEVfTElTVF9DT1VOVF07Ci0KLQl1MTYJCQkJCXdwYTJfcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9jb3VudDsKLQl1MTYJCQkJCXdwYTJfYXV0aF9rZXlfbWd0X3N1aXRlX2NvdW50OwotCi0JdTgJCQkJCXdwYTJfcGFpcndpc2Vfa2V5X2NpcGhlcl9zdWl0ZV9zZWxlY3RlZDsKLQl1OAkJCQkJd3BhMl9hdXRoX2tleV9tZ3Rfc3VpdGVfc2VsZWN0ZWQ7Ci0JdTgJCQkJCXJlc2VydmVkXzEwWzJdOwotCi0Jc3RydWN0IFJTTl9DYXBhYmlsaXR5X0VsZW1lbnQgIHdwYTJfcnNuX2NhcGFiaWxpdGllczsgLy8gMkIKLQl1OAkJCQkJcmVzZXJ2ZWRfMTFbMl07Ci0gICAgI2VuZGlmIC8vZW5kaWYgX1dQQTJfCi0KLQkvL0ZvciBSZXBsYXkgcHJvdGVjdGlvbgotLy8JdTgJCVBhaXJ3aXNlVFNDWzZdOwotLy8JdTgJCUdyb3VwVFNDWzZdOwotCi0JLy8vL0ZvciB1cC10by1kYXRlCi0JdTMyCQlTY2FuVGltZVN0YW1wOwkvL2ZvciB0aGUgZGVjaXNpb24gd2hldGhlciB0aGUgc3RhdGlvbi9BUChtYXkgZXhpc3QgYXQKLQkJCQkJCQkvL2RpZmZlcmVudCBjaGFubmVscykgaGFzIGxlZnQuIEl0IG11c3QgYmUgZGV0ZWN0ZWQgYnkKLQkJCQkJCQkvL3NjYW5uaW5nLiBMb2NhbCBkZXZpY2UgbWF5IGNvbm5lY3RlZCBvciBkaXNjb25uZWN0ZWQuCi0JdTMyCQlCc3NUaW1lU3RhbXA7CS8vT25seSBmb3IgdGhlIGRlY2lzaW9uIHdoZXRoZXIgdGhlIHN0YXRpb24vQVAoZXhpc3QgaW4KLQkJCQkJCQkvL3RoZSBzYW1lIGNoYW5uZWwsIGFuZCBubyBzY2FubmluZykgaWYgbG9jYWwgZGV2aWNlIGhhcwotCQkJCQkJCS8vY29ubmVjdGVkIHN1Y2Nlc3NmdWxseS4KLQotCS8vIDIwMDYxMTA4IEFkZCBmb3Igc3RvcmluZyBXUFNfSUUuIFtFIGlkXVtMZW5ndGhdW09VSV1bRGF0YV0KLQl1OAkJV1BTX0lFX0RhdGFbTUFYX0lFX0FQUEVORF9TSVpFXTsKLQl1MTYJCVdQU19JRV9sZW5ndGg7Ci0JdTE2CQlXUFNfSUVfbGVuZ3RoX3RtcDsgLy8gRm9yIHZlcmlmeSB0aGVyZSBpcyBhbiBXUFNfSUUgaW4gQmVhY29uIG9yIHByb2JlIHJlc3BvbnNlCi0KLX0gV0JfQlNTREVTQ1JJUFRJT04sICpQV0JfQlNTREVTQ1JJUFRJT047Ci0KLSNkZWZpbmUgd0JTU0Nvbm5lY3RlZFNUQShhZGFwdGVyKSAgICAgICAgICAgICBcCi0gICAgKCh1MTYpKGFkYXB0ZXIpLT5zTG9jYWxQYXJhLndDb25uZWN0ZWRTVEFpbmRleCkKLQotI2RlZmluZSBwc0JTUyhpKQkJCSgmKGFkYXB0ZXItPmFzQlNTRGVzY3JpcHRFbGVtZW50WyhpKV0pKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2NvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0ZDk2MDQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vLwotLy8gY29tbW9uLmgKLS8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgdGhlIE9TIGRlcGVuZGFudCBkZWZpbml0aW9uIGFuZCBmdW5jdGlvbi4KLS8vIEV2ZXJ5IE9TIGhhcyB0aGlzIGZpbGUgaW5kaXZpZHVhbC4KLS8vCi0KLSNkZWZpbmUgRGVidWdVc2JkU3RhdHVzSW5mb3JtYXRpb24oIF9BICkKLQotI2lmbmRlZiBDT01NT05fREVGCi0jZGVmaW5lIENPTU1PTl9ERUYKLQotLy8jZGVmaW5lIERFQlVHX0VOQUJMRUQgIDEKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQ29tbW9uIGZ1bmN0aW9uIGRlZmluaXRpb24KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNkZWZpbmUgREVCVUdfRU5BQkxFRAotI2RlZmluZSBFVEhfTEVOR1RIX09GX0FERFJFU1MJNgotI2lmZGVmIERFQlVHX0VOQUJMRUQKLSNkZWZpbmUgV0JERUJVRyggX00gKQlwcmludGsgX00KLSNlbHNlCi0jZGVmaW5lIFdCREVCVUcoIF9NICkJMAotI2VuZGlmCi0KLSNlbmRpZiAvLyBDT01NT05fREVGCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2NvcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2NvcmUuaAppbmRleCBmZTE0MmExLi5lYjRjMDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9jb3JlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvY29yZS5oCkBAIC0zLDkgKzMsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KIAotI2luY2x1ZGUgImJzc2RzY3B0LmgiCi0jaW5jbHVkZSAibXRvLmgiCisjaW5jbHVkZSAibWxtZV9zLmgiCiAjaW5jbHVkZSAid2JoYWxfcy5oIgorI2luY2x1ZGUgIm10by5oIgogCiAjZGVmaW5lIFdCTElOVVhfUEFDS0VUX0FSUkFZX1NJWkUgKEVUSEVSTkVUX1RYX0RFU0NSSVBUT1JTKjQpCiAKQEAgLTE1LDEyICsxNSwxMSBAQAogCXUzMiBhZGFwdGVySW5kZXg7CS8vIDIwMDYwNzAzLjQgQWRkIGZvciB1c2luZyBwYWRhcHRlckNvbnRleHQgZ2xvYmFsIGFkYXB0ZXIgcG9pbnQKIAogCVdCX0xPQ0FMREVTQ1JJUFQgc0xvY2FsUGFyYTsJLy8gTXlzZWxmIGNvbm5lY3RlZCBwYXJhbWV0ZXJzCi0JUFdCX0JTU0RFU0NSSVBUSU9OIGFzQlNTRGVzY3JpcHRFbGVtZW50OwogCiAJTUxNRV9GUkFNRSBzTWxtZUZyYW1lOwkvLyBjb25uZWN0IHRvIHBlZXJTVEEgcGFyYW1ldGVycwogCiAJTVRPX1BBUkFNRVRFUlMgc010b1BhcmE7CS8vIE1UT19zdHJ1Y3QgLi4uCi0JaHdfZGF0YV90IHNId0RhdGE7CS8vRm9yIEhBTAorCXN0cnVjdCBod19kYXRhIHNId0RhdGE7CS8vRm9yIEhBTAogCU1EUyBNZHM7CiAKIAlzcGlubG9ja190IFNwaW5Mb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvZHNfdGtpcC5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvZHNfdGtpcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzVjNGU3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2RzX3RraXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSNpZm5kZWYgX19XSU5CT05EX0RTX1RLSVBfSAotI2RlZmluZSBfX1dJTkJPTkRfRFNfVEtJUF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0vLyBSb3RhdGlvbiBmdW5jdGlvbnMgb24gMzIgYml0IHZhbHVlcwotI2RlZmluZSBST0wzMiggQSwgbiApIFwKLSAgICAoICgoQSkgPDwgKG4pKSB8ICggKChBKT4+KDMyLShuKSkpICAmICggKDFVTCA8PCAobikpIC0gMSApICkgKQotCi0jZGVmaW5lIFJPUjMyKCBBLCBuICkgICBST0wzMiggKEEpLCAzMi0obikgKQotCi0KLXR5cGVkZWYgc3RydWN0IHRraXAKLXsKLSAgICB1MzIJSzAsIEsxOwkJLy8gS2V5Ci0JdW5pb24KLQl7Ci0JCXN0cnVjdCAvLyBDdXJyZW50IHN0YXRlCi0JCXsKLQkJCXUzMglMOwotCQkJdTMyCVI7Ci0JCX07Ci0JCXU4CUxSWzhdOwotCX07Ci0JdW5pb24KLQl7Ci0JCXUzMglNOwkJLy8gTWVzc2FnZSBhY2N1bXVsYXRvciAoc2luZ2xlIHdvcmQpCi0JCXU4CU1iWzRdOwotCX07Ci0JczMyCQlieXRlc19pbl9NOwkvLyAjIGJ5dGVzIGluIE0KLX0gdGtpcF90OwotCi0vL3ZvaWQgX2FwcGVuZF9kYXRhKCB1OCAqcERhdGEsIHUxNiBzaXplLCB0a2lwX3QgKnAgKTsKLXZvaWQgTWRzX01pY0dldCggIHZvaWQqIGFkYXB0ZXIsICB2b2lkKiBwUnhMYXllcjEsICB1OCAqcEtleSwgIHU4ICpwTWljICk7Ci12b2lkIE1kc19NaWNGaWxsKCAgdm9pZCogYWRhcHRlciwgIHZvaWQqIHBEZXMsICB1OCAqWG1pdEJ1ZkFkZHJlc3MgKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9nbF84MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvZ2xfODAyMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEyNDRjNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9nbF84MDIxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLSNpZm5kZWYgX19HTF84MDIxMV9IX18KLSNkZWZpbmUgX19HTF84MDIxMV9IX18KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qKioqKioqKioqKioqKioqKiogQ09OU1RBTlQgQU5EIE1BQ1JPIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBCU1MgVHlwZSAqLwotZW51bSB7Ci0gICAgV0xBTl9CU1NUWVBFX0lORlJBU1RSVUNUVVJFICAgICAgICAgPSAwLAotICAgIFdMQU5fQlNTVFlQRV9JTkRFUEVOREVOVCwKLSAgICBXTEFOX0JTU1RZUEVfQU5ZX0JTUywKLX07Ci0KLQotCi0vKiBQcmVhbWJsZV9UeXBlLCBzZWUgPFNGUy04MDIuMTFHLU1JQi0yMDM+ICovCi10eXBlZGVmIGVudW0gcHJlYW1ibGVfdHlwZSB7Ci0gICAgV0xBTl9QUkVBTUJMRV9UWVBFX1NIT1JULAotICAgIFdMQU5fUFJFQU1CTEVfVFlQRV9MT05HLAotfSAgICBwcmVhbWJsZV90eXBlX2U7Ci0KLQotLyogU2xvdF9UaW1lX1R5cGUsIHNlZSA8U0ZTLTgwMi4xMUctTUlCLTIwOD4gKi8KLXR5cGVkZWYgZW51bSBzbG90X3RpbWVfdHlwZSB7Ci0gICAgV0xBTl9TTE9UX1RJTUVfVFlQRV9MT05HLAotICAgIFdMQU5fU0xPVF9USU1FX1RZUEVfU0hPUlQsCi19ICAgIHNsb3RfdGltZV90eXBlX2U7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogRW5jcnlwdGlvbiBNb2RlICovCi10eXBlZGVmIGVudW0gewotICAgIFdFUF9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAsCi0gICAgV0VQXzY0LAotICAgIFdFUF8xMjgsCi0KLSAgICBFTkNSWVBUX0RJU0FCTEUsCi0gICAgRU5DUllQVF9XRVAsCi0gICAgRU5DUllQVF9XRVBfTk9LRVksCi0gICAgRU5DUllQVF9US0lQLAotICAgIEVOQ1JZUFRfVEtJUF9OT0tFWSwKLSAgICBFTkNSWVBUX0NDTVAsCi0gICAgRU5DUllQVF9DQ01QX05PS0VZLAotfSAgICBlbmNyeXB0aW9uX21vZGVfZTsKLQotdHlwZWRlZiBlbnVtIF9XTEFOX1JBRElPIHsKLSAgICBXTEFOX1JBRElPX09OLAotICAgIFdMQU5fUkFESU9fT0ZGLAotICAgIFdMQU5fUkFESU9fTUFYLCAvLyBub3QgYSByZWFsIHR5cGUsIGRlZmluZWQgYXMgYW4gdXBwZXIgYm91bmQKLX0gV0xBTl9SQURJTzsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fUkFESU9fU1RBVFVTIHsKLQlXTEFOX1JBRElPIEhXU3RhdHVzOwotCVdMQU5fUkFESU8gU1dTdGF0dXM7Ci19IFdMQU5fUkFESU9fU1RBVFVTOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIDIwMDQxMDIxIDEuMS44MS4xMDAwIHliamlhbmcKLS8vIGFkZCBmb3IgcmFkaW8gbm90aWZpY2F0aW9uCi10eXBlZGVmCi12b2lkICgqUkFESU9fTk9USUZJQ0FUSU9OX0hBTkRMRVIpKAotCXZvaWQgKkRhdGEsCi0Jdm9pZCAqUmFkaW9TdGF0dXNCdWZmZXIsCi0JdTMyIFJhZGlvU3RhdHVzQnVmZmVyTGVuCi0JKTsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dMQU5fUkFESU9fTk9USUZJQ0FUSU9OCi17Ci0gICAgUkFESU9fTk9USUZJQ0FUSU9OX0hBTkRMRVIgUmFkaW9DaGFuZ2VIYW5kbGVyOwotICAgIHZvaWQgKkRhdGE7Ci19IFdMQU5fUkFESU9fTk9USUZJQ0FUSU9OOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIDIwMDQxMTAyIDEuMS45MS4xMDAwIHliamlhbmcKLS8vIGFkZCBmb3IgT0lEXzgwMl8xMV9DVVNUX1JFR0lPTl9DQVBBQklMSVRJRVMgYW5kIE9JRF84MDJfMTFfT0lEX1JFR0lPTgotdHlwZWRlZiBlbnVtIF9XTEFOX1JFR0lPTl9DT0RFCi17Ci0JV0xBTl9SRUdJT05fVU5LTk9XTiwKLQlXTEFOX1JFR0lPTl9FVVJPUEUsCi0JV0xBTl9SRUdJT05fSkFQQU4sCi0JV0xBTl9SRUdJT05fVVNBLAotCVdMQU5fUkVHSU9OX0ZSQU5DRSwKLQlXTEFOX1JFR0lPTl9TUEFJTiwKLQlXTEFOX1JFR0lPTl9JU1JBRUwsCi0JV0xBTl9SRUdJT05fTUFYLCAvLyBub3QgYSByZWFsIHR5cGUsIGRlZmluZWQgYXMgYW4gdXBwZXIgYm91bmQKLX0gV0xBTl9SRUdJT05fQ09ERTsKLQotI2RlZmluZSBSRUdJT05fTkFNRV9NQVhfTEVOR1RIICAgMjU2Ci0KLXR5cGVkZWYgc3RydWN0IF9XTEFOX1JFR0lPTl9DSEFOTkVMUwotewotCXUzMiBMZW5ndGg7Ci0JdTMyIE5hbWVMZW5ndGg7Ci0JdTggTmFtZVtSRUdJT05fTkFNRV9NQVhfTEVOR1RIXTsKLQlXTEFOX1JFR0lPTl9DT0RFIENvZGU7Ci0JdTMyIEZyZXF1ZW5jeVsxXTsKLX0gV0xBTl9SRUdJT05fQ0hBTk5FTFM7Ci0KLXR5cGVkZWYgc3RydWN0IF9XTEFOX1JFR0lPTl9DQVBBQklMSVRJRVMKLXsKLQl1MzIgTnVtYmVyT2ZJdGVtczsKLQlXTEFOX1JFR0lPTl9DSEFOTkVMUyBSZWdpb25bMV07Ci19IFdMQU5fUkVHSU9OX0NBUEFCSUxJVElFUzsKLQotdHlwZWRlZiBzdHJ1Y3QgX3JlZ2lvbl9uYW1lX21hcCB7Ci0JV0xBTl9SRUdJT05fQ09ERSByZWdpb247Ci0JdTggKm5hbWU7Ci0JdTMyICpjaGFubmVsczsKLX0gcmVnaW9uX25hbWVfbWFwOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgTUFDMlNUUihhKSAoYSlbMF0sIChhKVsxXSwgKGEpWzJdLCAoYSlbM10sIChhKVs0XSwgKGEpWzVdCi0jZGVmaW5lIE1BQ1NUUiAiJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlgiCi0KLS8vIFRPRE86IDA2Mjcga2V2aW4KLSNkZWZpbmUgTUlDMlNUUihhKSAoYSlbMF0sIChhKVsxXSwgKGEpWzJdLCAoYSlbM10sIChhKVs0XSwgKGEpWzVdLCAoYSlbNl0sIChhKVs3XQotI2RlZmluZSBNSUNTVFIgIiUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCIKLQotI2RlZmluZSBNSUNLRVkyU1RSKGEpICAgTUlDMlNUUihhKQotI2RlZmluZSBNSUNLRVlTVFIgICAgICAgTUlDU1RSCi0KLQotI2VuZGlmIC8qIF9fR0xfODAyMTFfSF9fICovCi0vKioqIGVuZCBvZiBmaWxlICoqKi8KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9pb2N0bHMuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2lvY3Rscy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGIzNWRjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2lvY3Rscy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjc4ICswLDAgQEAKLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gIElPQ1RMUy5IIC0KLS8vCi0vLyAgRGVzY3JpcHRpb246Ci0vLyAgICBEZWZpbmUgdGhlIElPQ1RMIGNvZGVzLgotLy8KLS8vICBSZXZpc2lvbiBoaXN0b3J5OgotLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8gIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmbmRlZiBfSU9DVExTX0gKLSNkZWZpbmUgX0lPQ1RMU19ICi0KLS8vIFBENDMgS2VlcCBpdCAtIFVzZWQgd2l0aCB0aGUgV2luMzMgYXBwbGljYXRpb24KLS8vICNpbmNsdWRlIDx3aW5pb2N0bC5oPgotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyAyMDA0MDEwOCBBREQgdGhlIGZvbGxvdyBmb3IgdGVzdAotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotI2RlZmluZSBJTkZPUk1BVElPTl9MRU5HVEggc2l6ZW9mKHVuc2lnbmVkIGludCkKLQotI2RlZmluZSBXQjMyX0lPQ1RMX0lOREVYICAweDA5MDAgLy/CrcOXwqfEj8S9SMWkS8W5xbDFvWUvLwotCi0jZGVmaW5lIFdiMzJfUmVnaXN0ZXJSZWFkCQkJQ1RMX0NPREUoCVwKLQkJCUZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAwLAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzMl9SZWdpc3RlcldyaXRlCQkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxLAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzMl9TZW5kUGFja2V0CQkJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMiwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzJfUXVlcnlTZW5kUmVzdWx0CQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDMsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjMyX1NldEZyYWdtZW50VGhyZXNob2xkCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgNCwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzJfU2V0TGlua1N0YXR1cwkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA1LAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzMl9TZXRCdWxrSW4JCQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDYsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjMyX0xvb3BiYWNrVGVzdAkJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgNywJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzVfRUVQcm9tUmVhZAkJCQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDgsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjM1X0VFUHJvbVdyaXRlCQkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyA5LAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzNV9GbGFzaFJlYWREYXRhCQkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxMCwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzVfRmxhc2hXcml0ZQkJCQlDVExfQ09ERSgJXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwJCQkJXAotICAgICAgICAgICAgV0IzMl9JT0NUTF9JTkRFWCArIDExLAkJCQlcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsCQkJCQlcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgV2IzNV9GbGFzaFdyaXRlQnVyc3QJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTIsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjM1X1R4QnVyc3RTdGFydAkJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTMsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBXYjM1X1R4QnVyc3RTdG9wCQkJQ1RMX0NPREUoCVwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sCQkJCVwKLSAgICAgICAgICAgIFdCMzJfSU9DVExfSU5ERVggKyAxNCwJCQkJXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELAkJCQkJXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIFdiMzVfVHhCdXJzdFN0YXR1cwkJCUNUTF9DT0RFKAlcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLAkJCQlcCi0gICAgICAgICAgICBXQjMyX0lPQ1RMX0lOREVYICsgMTUsCQkJCVwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwJCQkJCVwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gRm9yIElPQ1RMIGludGVyZmFjZQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNkZWZpbmUgTElOS05BTUVfU1RSSU5HICAgICAiXFxEb3NEZXZpY2VzXFxXMzVVTkQiCi0jZGVmaW5lIE5UREVWSUNFX1NUUklORyAgICAgIlxcRGV2aWNlXFxXMzVVTkQiCi0jZGVmaW5lIEFQUExJQ0FUSU9OX0xJTksJIlxcXFwuXFxXMzVVTkQiCi0KLSNkZWZpbmUgV0JfSU9DVExfSU5ERVggICAgICAweDA4MDAKLSNkZWZpbmUgV0JfSU9DVExfVFNfSU5ERVggICBXQl9JT0NUTF9JTkRFWCArIDYwCi0jZGVmaW5lIFdCX0lPQ1RMX0RVVF9JTkRFWCAgV0JfSU9DVExfVFNfSU5ERVggKyA0MAotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBJT0NUTFMgZGVmaW5lZCBmb3IgRFVUIChEZXZpY2UgVW5kZXIgVGVzdCkKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9NQUNfQUREUkVTUwotLy8gUXVlcnk6IFJldHVybiB0aGUgZG90MTFTdGF0aW9uSUQKLS8vIFNldCAgOiBTZXQgdGhlIGRvdDExU3RhdGlvbklELiBEZW1vIG9ubHkuCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX01BQ19BRERSRVNTICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMSwgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9CU1NfREVTQ1JJUFRJT04KLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGluZm8uIG9mIHRoZSBjdXJyZW50IGNvbm5lY3RlZCBCU1MuCi0vLyBTZXQgIDogTm9uZS4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTX0RFU0NSSVBUSU9OICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMiwgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURQotLy8gUXVlcnk6IFJldHVybiB0aGUgY3VycmVudCB0cmFuc21pc3Npb24gcmF0ZS4KLS8vIFNldCAgOiBTZXQgdGhlIHRyYW5zbWlzc2lvbiByYXRlIG9mIHRoZSBUeCBwYWNrZXRzLgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9UWF9SQVRFICAgICAgICAgICAgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMywgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0NVUlJFTlRfU1RBX1NUQVRFCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBjdXJyZW50IFNUQSBzdGF0ZS4gKFdCX1NUQVNUQVRFIHR5cGUpCi0vLyBTZXQgIDogTm9uZS4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1VSUkVOVF9TVEFfU1RBVEUgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8vLy8vLy8vLy8gMTAvMzEvMDInIEFkZGVkIC8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1NUQVJUX0lCU1NfUkVRVUVTVAotLy8gUXVlcnk6IE5vbmUuCi0vLyBTZXQgIDogU3RhcnQgYSBuZXcgSUJTUwotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9TVEFSVF9JQlNTX1JFUVVFU1QgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgNSwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0pPSU5fUkVRVUVTVAotLy8gUXVlcnk6IE5vbmUuCi0vLyBTZXQgIDogU3luY2hyb25pemUgd2l0aCB0aGUgc2VsZWN0ZWQgQlNTCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0pPSU5fUkVRVUVTVCAgICAgICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA2LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVVUSEVOX1JFUVVFU1QKLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6IEF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBCU1MKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVVUSEVOX1JFUVVFU1QgICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9ERUFVVEhFTl9SRVFVRVNUCi0vLyBRdWVyeTogTm9uZS4KLS8vIFNldCAgOiBEZUF1dGhlbnRpY2F0ZSB3aXRoZSB0aGUgQlNTCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0RFQVVUSEVOX1JFUVVFU1QgICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyA4LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVNTT0NfUkVRVUVTVAotLy8gUXVlcnk6IE5vbmUuCi0vLyBTZXQgIDogQXNzb2NpYXRlIHdpdGhlIHRoZSBCU1MKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQVNTT0NfUkVRVUVTVCAgICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDksICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9SRUFTU09DX1JFUVVFU1QKLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6IFJlQXNzb2NpYXRlIHdpdGhlIHRoZSBCU1MKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUkVBU1NPQ19SRVFVRVNUICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEwLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0RJU0FTU09DX1JFUVVFU1QKLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6IERpc0Fzc29jaWF0ZSB3aXRoZSB0aGUgQlNTCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0RJU0FTU09DX1JFUVVFU1QgICAgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxMSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfRlJBR19USFJFU0hPTEQKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGRvdDExRnJhZ21lbnRUaHJlc2hvbGQKLS8vIFNldCAgOiBTZXQgdGhlIGRvdDExRnJhZ21lbnRUaHJlc2hvbGQKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRlJBR19USFJFU0hPTEQgICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDEyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9SVFNfVEhSRVNIT0xECi0vLyBRdWVyeTogUmV0dXJuIHRoZSBkb3QxMVJUU1RocmVzaG9sZAotLy8gU2V0ICA6IFNldCB0aGUgZG90MTFSVFNUaHJlc29sZAotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9SVFNfVEhSRVNIT0xEICAgICAgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTMsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1dFUF9LRVlNT0RFCi0vLyBRdWVyeTogR2V0IHRoZSBXRVAga2V5IG1vZGUuCi0vLyBTZXQgIDogU2V0IHRoZSBXRVAga2V5IG1vZGU6IGRpc2FibGUvNjQgYml0cy8xMjggYml0cwotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZTU9ERSAgICAgICAgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTQsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1dFUF9LRVlWQUxVRQotLy8gUXVlcnk6IE5vbmUuCi0vLyBTZXQgIDogZmlsbCBpbiB0aGUgV0VQIGtleSB2YWx1ZQotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9XRVBfS0VZVkFMVUUgICAgICAgIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTUsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1JFU0VUCi0vLyBRdWVyeTogTm9uZS4KLS8vIFNldCAgOiBSZXNldCBTL1cgYW5kIEgvVwotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9SRVNFVCAgICAgICAgICBDVExfQ09ERSggICAgICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMTYsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1BPV0VSX1NBVkUKLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6IFNldCBQb3dlciBTYXZlIE1vZGUKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUE9XRVJfU0FWRSAgICBDVExfQ09ERSggICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE3LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9CU1NJRF9MSVNUX1NDQU4KLS8vIFF1ZXJ5OiBOb25lLgotLy8gU2V0ICA6Ci0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0JTU0lEX0xJU1RfU0NBTiBDVExfQ09ERSggICAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAxOCwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTSURfTElTVAotLy8gUXVlcnk6IFJldHVybiB0aGUgQlNTIGluZm8gb2YgQlNTcyBpbiB0aGUgbGFzdCBzY2FubmluZyBwcm9jZXNzCi0vLyBTZXQgIDogTm9uZS4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQlNTSURfTElTVCAgICBDVExfQ09ERSggICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDE5LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9TVEFUSVNUSUNTCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBzdGF0aXN0aWNzIG9mIFR4L1J4LgotLy8gU2V0ICA6IE5vbmUuCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX1NUQVRJU1RJQ1MgICAgQ1RMX0NPREUoICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyMCwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQUNDRVBUX0JFQUNPTgotLy8gUXVlcnk6IFJldHVybiB0aGUgY3VycmVudCBtb2RlIHRvIGFjY2VwdCBiZWFjb24gb3Igbm90LgotLy8gU2V0ICA6IEVuYWJsZSBvciBkaXNhYmxlIGFsbG93aW5nIHRoZSBIVy1NQUMgdG8gcGFzcyB0aGUgYmVhY29uIHRvIHRoZSBTVy1NQUMKLS8vIEFyZ3VtZW50czogdW5zaWduZWQgY2hhcgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9BQ0NFUFRfQkVBQ09OICBDVExfQ09ERSggICAgICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjEsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1JPQU1JTkcKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIHJvYW1pbmcgZnVuY3Rpb24gc3RhdHVzCi0vLyBTZXQgIDogRW5hYmxlL0Rpc2FibGUgdGhlIHJvYW1pbmcgZnVuY3Rpb24uCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUk9BTUlORyAgICAgICAgQ1RMX0NPREUoICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDIyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9EVE8KLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIERUTyhEYXRhIFRocm91Z2hwdXQgT3B0aW1pemF0aW9uKQotLy8gICAgICAgIGZ1bmN0aW9uIHN0YXR1cyAoVFJVRSBvciBGQUxTRSkKLS8vIFNldCAgOiBFbmFibGUvRGlzYWJsZSB0aGUgRFRPIGZ1bmN0aW9uLgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9EVE8gICAgICAgICAgICBDVExfQ09ERSggICAgICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjMsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0FOVEVOTkFfRElWRVJTSVRZCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBhbnRlbm5hIGRpdmVyc2l0eSBzdGF0dXMuIChUUlVFL09OIG9yIEZBTFNFL09GRikKLS8vIFNldCAgOiBFbmFibGUvRGlzYWJsZSB0aGUgYW50ZW5uYSBkaXZlcnNpdHkuCi0vLwotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfRFVUX0FOVEVOTkFfRElWRVJTSVRZIENUTF9DT0RFKCAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyNCwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vLS0tLS0tLS0tLS0tLS0gbmV3IGFkZGVkIGZvciBhK2IrZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfTUFDX09QRVJBVElPTl9NT0RFCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBNQUMgb3BlcmF0aW9uIG1vZGUuIChNT0RFXzgwMl8xMV9CRywgTU9ERV84MDJfMTFfQSwKLS8vCQkJIE1PREVfODAyXzExX0FCRywgTU9ERV84MDJfMTFfQkdfSUJTUykKLS8vIFNldCAgOiBTZXQgdGhlIE1BQyBvcGVyYXRpb24gbW9kZS4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfTUFDX09QRVJBVElPTl9NT0RFIENUTF9DT0RFKCAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAyNSwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURV9SRURFRklORUQKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIGN1cnJlbnQgdHggcmF0ZSB3aGljaCBmb2xsb3dzIHRoZSBkZWZpbml0aW9uIGluIHNwZWMuIChmb3IKLS8vCQkJZXhhbXBsZSwgNS41TSA9PiAweDBiKQotLy8gU2V0ICA6IE5vbmUKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURV9SRURFRklORUQgQ1RMX0NPREUoICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDI2LCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9QUkVBTUJMRV9NT0RFCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBwcmVhbWJsZSBtb2RlLiAoYXV0byBvciBsb25nKQotLy8gU2V0ICA6IFNldCB0aGUgcHJlYW1ibGUgbW9kZS4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfUFJFQU1CTEVfTU9ERSBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjcsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1NMT1RfVElNRV9NT0RFCi0vLyBRdWVyeTogUmV0dXJuIHRoZSBzbG90IHRpbWUgbW9kZS4gKGF1dG8gb3IgbG9uZykKLS8vIFNldCAgOiBTZXQgdGhlIHNsb3QgdGltZSBtb2RlLgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9TTE9UX1RJTUVfTU9ERSBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjgsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUwotLy8gUXVlcnk6Ci0vLyBTZXQgIDogTk9ORQotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUyBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMjksICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX1RYX1JBVEVfTU9ERQotLy8gUXVlcnk6IFJldHVybiB0aGUgdHggcmF0ZSBtb2RlLiAoUkFURV9BVVRPLCBSQVRFXzFNLCAuLiwgUkFURV81NE0sIFJBVEVfTUFYKQotLy8gU2V0ICA6IFNldCB0aGUgdHggcmF0ZSBtb2RlLiAgKFJBVEVfQVVUTywgUkFURV8xTSwgLi4sIFJBVEVfNTRNLCBSQVRFX01BWCkKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfVFhfUkFURV9NT0RFIENUTF9DT0RFKCAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAzMCwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfRFRPX1BBUkEKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIERUTyBwYXJhbWV0ZXJzCi0vLyBTZXQgIDogU2V0IHRoZSBEVE8gcGFyYW1ldGVycwotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9EVE9fUEFSQSBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzEsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfRFVUX0VWRU5UX0xPRwotLy8gUXVlcnk6IFJldHVybiBldmVudCBsb2cKLS8vIFNldCAgOiBSZXNldCBldmVudCBsb2cKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfRVZFTlRfTE9HIENUTF9DT0RFKCAgICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9EVVRfSU5ERVggKyAzMiwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNSU4KLS8vIFF1ZXJ5OiBOT05FKEl0IHdpbGwgYmUgb2J0YWluZWQgYnkgSU9DVExfV0JfODAyXzExX0RVVF9BRFZBTkNFX1NUQVRVUykKLS8vIFNldCAgOiBTZXQgQ1dNaW4gdmFsdWUKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9EVVRfQ1dNSU4gQ1RMX0NPREUoICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX0RVVF9JTkRFWCArIDMzLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX0RVVF9DV01BWAotLy8gUXVlcnk6IE5PTkUoSXQgd2lsbCBiZSBvYnRhaW5lZCBieSBJT0NUTF9XQl84MDJfMTFfRFVUX0FEVkFOQ0VfU1RBVFVTKQotLy8gU2V0ICA6IFNldCBDV01heCB2YWx1ZQotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX0RVVF9DV01BWCBDVExfQ09ERSggICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfRFVUX0lOREVYICsgMzQsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gSU9DVExzIGZvciBUZXN0aW5nCi0KLS8vIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfQ1hYX1JFRwotLy8gUXVlcnk6IE5vbmUKLS8vIFNldCAgOiBXcml0ZSB0aGUgdmFsdWUgdG8gb25lIG9mIEN4eCByZWdpc3Rlci4KLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfQ1hYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX1RTX0dFVF9DWFhfUkVHCi0vLyBRdWVyeTogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgQ3h4IHJlZ2lzdGVyLgotLy8gU2V0ICA6IFdyaXRlIHRoZSByZWcgbm8uICgweDAwLCAweDA0LCAweDA4IGV0YykKLS8vCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19HRVRfQ1hYX1JFRyAgQ1RMX0NPREUoICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gSU9DVExfV0JfODAyXzExX1RTX1NFVF9EWFhfUkVHCi0vLyBRdWVyeTogTm9uZQotLy8gU2V0ICA6IFdyaXRlIHRoZSB2YWx1ZSB0byBvbmUgb2YgRHh4IHJlZ2lzdGVyLgotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1NFVF9EWFhfUkVHICBDVExfQ09ERSggICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLyBJT0NUTF9XQl84MDJfMTFfVFNfR0VUX0RYWF9SRUcKLS8vIFF1ZXJ5OiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBEeHggcmVnaXN0ZXIuCi0vLyBTZXQgIDogV3JpdGUgdGhlIHJlZyBuby4gKDB4MDAsIDB4MDQsIDB4MDggZXRjKQotLy8KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0dFVF9EWFhfUkVHICBDVExfQ09ERSggICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAzLCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gW1RTXQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19UWF9SQVRFICAgICAgICAgICAgICBDVExfQ09ERSggICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDQsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0NVUlJFTlRfQ0hBTk5FTCAgICAgIENUTF9DT0RFKCAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgNSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfRU5BQkxFX1NFUU5PICAgICAgICAgQ1RMX0NPREUoICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA2LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19FTkFMQkVfQUNLRURQQUNLRVQgICBDVExfQ09ERSggICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDcsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0lOSElCSVRfQ1JDICAgICAgICAgIENUTF9DT0RFKCAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgOCwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfUkVTRVRfUkNWX0NPVU5URVIgICAgQ1RMX0NPREUoICAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyA5LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfVFhfVFJJR0dFUiAgICAgICBDVExfQ09ERSggICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEwLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0ZBSUxFRF9UWF9DT1VOVCAgICAgICBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTEsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gW1RTMV0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1RYX1BPV0VSICAgICAgICAgICAgIENUTF9DT0RFKCAgIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfTU9ERV9FTkFCTEUJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDEzLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX01PREVfRElTQUJMRQkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfQU5URU5OQQkJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE1LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0FEQVBURVJfSU5GTwkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTYsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfTUFDX0FERFJFU1MJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDE3LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0JTU0lECQkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMTgsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfUkZfUEFSQU1FVEVSCQkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAxOSwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19GSUxURVIJCQkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyMCwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19DQUxJQlJBVElPTgkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjEsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfQlNTX01PREUJCQkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyMiwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TRVRfU1NJRAkJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDIzLCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX0lCU1NfQ0hBTk5FTAkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjQsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotLy8gc2V0L3F1ZXJ5IHRoZSBzbG90IHRpbWUgdmFsdWUoc2hvcnQgb3IgbG9uZyBzbG90IHRpbWUpCi0jZGVmaW5lIElPQ1RMX1dCXzgwMl8xMV9UU19TTE9UX1RJTUUJCQkgQ1RMX0NPREUoICBcCi0gICAgICAgICAgICBGSUxFX0RFVklDRV9VTktOT1dOLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBXQl9JT0NUTF9UU19JTkRFWCArIDI1LCAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBNRVRIT0RfQlVGRkVSRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBGSUxFX0FOWV9BQ0NFU1MpCi0KLSNkZWZpbmUgSU9DVExfV0JfODAyXzExX1RTX1NMT1RfVElNRQkJCSBDVExfQ09ERSggIFwKLSAgICAgICAgICAgIEZJTEVfREVWSUNFX1VOS05PV04sICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdCX0lPQ1RMX1RTX0lOREVYICsgMjUsICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIE1FVEhPRF9CVUZGRVJFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIEZJTEVfQU5ZX0FDQ0VTUykKLQotI2RlZmluZSBJT0NUTF9XQl84MDJfMTFfVFNfUlhfU1RBVElTVElDUwkJIENUTF9DT0RFKCAgXAotICAgICAgICAgICAgRklMRV9ERVZJQ0VfVU5LTk9XTiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgV0JfSU9DVExfVFNfSU5ERVggKyAyNiwgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgTUVUSE9EX0JVRkZFUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgRklMRV9BTllfQUNDRVNTKQotCi0jZW5kaWYgIC8vICNpZm5kZWYgX0lPQ1RMU19ICi0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHMuYwppbmRleCBlNDMxNDA2Li5jN2FmMDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHMuYwpAQCAtMSw5ICsxLDcgQEAKLSNpbmNsdWRlICJkc190a2lwLmgiCi0jaW5jbHVkZSAiZ2xfODAyMTEuaCIKICNpbmNsdWRlICJtZHNfZi5oIgogI2luY2x1ZGUgIm1sbWV0eHJ4X2YuaCIKLSNpbmNsdWRlICJtdG9fZi5oIgotI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorI2luY2x1ZGUgIm10by5oIgorI2luY2x1ZGUgInN5c2RlZi5oIgogI2luY2x1ZGUgIndiaGFsX2YuaCIKICNpbmNsdWRlICJ3YmxpbnV4X2YuaCIKIApAQCAtMzc0LDcgKzM3Miw3IEBACiAKIAlwRGVzLT5UeFJhdGUgPSBjdG1wMTsKIAkjaWZkZWYgX1BFX1RYX0RVTVBfCi0JV0JERUJVRygoIlR4IHJhdGUgPSV4XG4iLCBjdG1wMSkpOworCXByaW50aygiVHggcmF0ZSA9JXhcbiIsIGN0bXAxKTsKIAkjZW5kaWYKIAogCXBUMDEtPlQwMV9tb2R1bGF0aW9uX3R5cGUgPSAoY3RtcDElMykgPyAwIDogMTsKQEAgLTQxOCwxNCArNDE2LDE0IEBACiB2b2lkCiBNZHNfVHgoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlcikKIHsKLQlwaHdfZGF0YV90CXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3QgaHdfZGF0YSAqCXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKIAlQTURTCQlwTWRzID0gJmFkYXB0ZXItPk1kczsKIAlERVNDUklQVE9SCVR4RGVzOwogCVBERVNDUklQVE9SCXBUeERlcyA9ICZUeERlczsKIAl1OAkJKlhtaXRCdWZBZGRyZXNzOwogCXUxNgkJWG1pdEJ1ZlNpemUsIFBhY2tldFNpemUsIHN0bXAsIEN1cnJlbnRTaXplLCBGcmFnbWVudFRocmVzaG9sZDsKIAl1OAkJRmlsbEluZGV4LCBUeERlc0luZGV4LCBGcmFnbWVudENvdW50LCBGaWxsQ291bnQ7Ci0JdW5zaWduZWQgY2hhcglCdWZmZXJGaWxsZWQgPSBmYWxzZSwgTUlDQWRkID0gMDsKKwl1bnNpZ25lZCBjaGFyCUJ1ZmZlckZpbGxlZCA9IGZhbHNlOwogCiAKIAlpZiAocE1kcy0+VHhQYXVzZSkKQEAgLTQ0Miw3ICs0NDAsNyBAQAogCQlGaWxsSW5kZXggPSBwTWRzLT5UeEZpbGxJbmRleDsKIAkJaWYgKHBNZHMtPlR4T3duZXJbRmlsbEluZGV4XSkgeyAvLyBJcyBvd25lZCBieSBzb2Z0d2FyZSAwOlllcyAxOk5vCiAjaWZkZWYgX1BFX1RYX0RVTVBfCi0JCQlXQkRFQlVHKCgiW01kc19UeF0gVHggT3duZXIgaXMgSC9XLlxuIikpOworCQkJcHJpbnRrKCJbTWRzX1R4XSBUeCBPd25lciBpcyBIL1cuXG4iKTsKICNlbmRpZgogCQkJYnJlYWs7CiAJCX0KQEAgLTQ4OCw3ICs0ODYsNyBAQAogCQkJLy8gRm9yIHNwZWVkIHVwIEtleSBzZXR0aW5nCiAJCQlpZiAocFR4RGVzLT5FYXBGaXgpIHsKICNpZmRlZiBfUEVfVFhfRFVNUF8KLQkJCQlXQkRFQlVHKCgiMzU6IEVQQSA0dGggZnJhbWUgZGV0ZWN0ZWQuIFNpemUgPSAlZFxuIiwgUGFja2V0U2l6ZSkpOworCQkJCXByaW50aygiMzU6IEVQQSA0dGggZnJhbWUgZGV0ZWN0ZWQuIFNpemUgPSAlZFxuIiwgUGFja2V0U2l6ZSk7CiAjZW5kaWYKIAkJCQlwSHdEYXRhLT5Jc0tleVByZVNldCA9IDE7CiAJCQl9CkBAIC00OTksMTIgKzQ5Nyw2IEBACiAJCQkvLyBTZXQgUlRTL0NUUyBhbmQgTm9ybWFsIGR1cmF0aW9uIGZpZWxkIGludG8gYnVmZmVyCiAJCQlNZHNfRHVyYXRpb25TZXQoYWRhcHRlciwgcFR4RGVzLCBYbWl0QnVmQWRkcmVzcyk7CiAKLQkJCS8vCi0JCQkvLyBDYWxjdWxhdGlvbiBNSUMgZnJvbSBidWZmZXIgd2hpY2ggbWF5YmUgZnJhZ21lbnQsIHRoZW4gZmlsbCBpbnRvIHRlbXBvcmFyeSBhZGRyZXNzIDggYnl0ZQotCQkJLy8gOTMxMTMwLjUuZQotCQkJaWYgKE1JQ0FkZCkKLQkJCQlNZHNfTWljRmlsbCggYWRhcHRlciwgcFR4RGVzLCBYbWl0QnVmQWRkcmVzcyApOwotCiAJCQkvL1NoaWZ0IHRvIHRoZSBuZXh0IGFkZHJlc3MKIAkJCVhtaXRCdWZTaXplICs9IEN1cnJlbnRTaXplOwogCQkJWG1pdEJ1ZkFkZHJlc3MgKz0gQ3VycmVudFNpemU7CkBAIC01NjEsNyArNTUzLDcgQEAKIE1kc19TZW5kQ29tcGxldGUoc3RydWN0IHdic29mdF9wcml2ICogYWRhcHRlciwgUFQwMl9ERVNDUklQVE9SIHBUMDIpCiB7CiAJUE1EUwlwTWRzID0gJmFkYXB0ZXItPk1kczsKLQlwaHdfZGF0YV90CXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3QgaHdfZGF0YSAqCXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKIAl1OAlQYWNrZXRJZCA9ICh1OClwVDAyLT5UMDJfVHhfUGt0SUQ7CiAJdW5zaWduZWQgY2hhcglTZW5kT0sgPSB0cnVlOwogCXU4CVJldHJ5Q291bnQsIFR4UmF0ZTsKQEAgLTU4NSw3ICs1NzcsNyBAQAogCQkJCWVsc2UKIAkJCQkJcEh3RGF0YS0+dHhfcmV0cnlfY291bnRbN10gKz0gUmV0cnlDb3VudDsKIAkJCQkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCi0JCQkJV0JERUJVRygoImR0b190eF9yZXRyeV9jb3VudCA9JWRcbiIsIHBId0RhdGEtPmR0b190eF9yZXRyeV9jb3VudCkpOworCQkJCXByaW50aygiZHRvX3R4X3JldHJ5X2NvdW50ID0lZFxuIiwgcEh3RGF0YS0+ZHRvX3R4X3JldHJ5X2NvdW50KTsKIAkJCQkjZW5kaWYKIAkJCQlNVE9fU2V0VHhDb3VudChhZGFwdGVyLCBUeFJhdGUsIFJldHJ5Q291bnQpOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmgKaW5kZXggZWJmNjFlMy4uOWZmZWMxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfcy5oCkBAIC05LDYgKzksMTIgQEAKICNpbmNsdWRlICJtYWNfc3RydWN0dXJlcy5oIgogI2luY2x1ZGUgInNjYW5fcy5oIgogCisvKiBQcmVhbWJsZV9UeXBlLCBzZWUgPFNGUy04MDIuMTFHLU1JQi0yMDM+ICovCitlbnVtIHsKKwlXTEFOX1BSRUFNQkxFX1RZUEVfU0hPUlQsCisJV0xBTl9QUkVBTUJMRV9UWVBFX0xPTkcsCit9OworCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogI2RlZmluZSBNQVhfVVNCX1RYX0RFU0NSSVBUT1IJCTE1CQkvLyBJUzg5QzM1IGFiaWxpdHkKICNkZWZpbmUgTUFYX1VTQl9UWF9CVUZGRVJfTlVNQkVSCTQJCS8vIFZpcnR1YWwgcHJlLWJ1ZmZlciBudW1iZXIgb2YgTUFYX1VTQl9UWF9CVUZGRVIKQEAgLTE3LDI2ICsyMyw4IEBACiAjZGVmaW5lIEFVVEhfUkVRVUVTVF9QQUlSV0lTRV9FUlJPUgkJCTAJCS8vIF9GIGZsYWcgc2V0dGluZwogI2RlZmluZSBBVVRIX1JFUVVFU1RfR1JPVVBfRVJST1IJCQkxCQkvLyBfRiBmbGFnIHNldHRpbmcKIAotLy8gRm9yIHZhcmlhYmxlIHNldHRpbmcKLSNkZWZpbmUgQ1VSUkVOVF9CU1NfVFlQRQkJCQlwc0JTUyhwc0xPQ0FMLT53Q29ubmVjdGVkU1RBaW5kZXgpLT5iQnNzVHlwZQotI2RlZmluZSBDVVJSRU5UX1dFUF9NT0RFCQkJCXBzU01FLT5fZG90MTFQcml2YWN5SW52b2tlZAotI2RlZmluZSBDVVJSRU5UX0JTU0lECQkJCQlwc0JTUyhwc0xPQ0FMLT53Q29ubmVjdGVkU1RBaW5kZXgpLT5hYkJzc0lECi0jZGVmaW5lIENVUlJFTlRfREVTSVJFRF9XUEFfRU5BQkxFCQkoKHBzU01FLT5iRGVzaXJlZEF1dGhNb2RlPT1XUEFfQVVUSCl8fChwc1NNRS0+YkRlc2lyZWRBdXRoTW9kZT09V1BBUFNLX0FVVEgpKQotI2lmZGVmIF9XUEEyXwotI2RlZmluZSBDVVJSRU5UX0RFU0lSRURfV1BBMl9FTkFCTEUJCSgocHNTTUUtPmJEZXNpcmVkQXV0aE1vZGU9PVdQQTJfQVVUSCl8fChwc1NNRS0+YkRlc2lyZWRBdXRoTW9kZT09V1BBMlBTS19BVVRIKSkKLSNlbmRpZiAvL2VuZCBkZWYgX1dQQTJfCi0jZGVmaW5lIENVUlJFTlRfUEFJUldJU0VfS0VZX09LCQkJcHNTTUUtPnBhaXJ3aXNlX2tleV9vawotLy9bMjAwNDA3MTIgV1NdCi0jZGVmaW5lIENVUlJFTlRfR1JPVVBfS0VZX09LCQkJcHNTTUUtPmdyb3VwX2tleV9vawotI2RlZmluZSBDVVJSRU5UX1BBSVJXSVNFX0tFWQkJCXBzU01FLT50eF9taWNfa2V5Ci0jZGVmaW5lIENVUlJFTlRfR1JPVVBfS0VZCQkJCXBzU01FLT5ncm91cF90eF9taWNfa2V5Ci0jZGVmaW5lIENVUlJFTlRfRU5DUllQVF9TVEFUVVMJCQlwc1NNRS0+ZW5jcnlwdF9zdGF0dXMKLSNkZWZpbmUgQ1VSUkVOVF9XRVBfSUQJCQkJCWFkYXB0ZXItPnNTbWVQYXJhLl9kb3QxMVdFUERlZmF1bHRLZXlJRAotI2RlZmluZSBDVVJSRU5UX0NPTlRST0xfUE9SVF9CTE9DSwkJKCBwc1NNRS0+d3BhX29rIT0xIHx8IChhZGFwdGVyLT5NZHMuYm9Db3VudGVyTWVhc3VyZUJsb2NrPT0xICYmIChDVVJSRU5UX0VOQ1JZUFRfU1RBVFVTPT1FTkNSWVBUX1RLSVApKSApCiAjZGVmaW5lIENVUlJFTlRfRlJBR01FTlRfVEhSRVNIT0xECQkoYWRhcHRlci0+TWRzLlR4RnJhZ21lbnRUaHJlc2hvbGQgJiB+MHgxKQogI2RlZmluZSBDVVJSRU5UX1BSRUFNQkxFX01PREUJCQlwc0xPQ0FMLT5ib1Nob3J0UHJlYW1ibGU/V0xBTl9QUkVBTUJMRV9UWVBFX1NIT1JUOldMQU5fUFJFQU1CTEVfVFlQRV9MT05HCi0jZGVmaW5lIENVUlJFTlRfVFhfUkFURQkJCQkJYWRhcHRlci0+c0xvY2FsUGFyYS5DdXJyZW50VHhSYXRlCi0jZGVmaW5lIENVUlJFTlRfRkFMTF9CQUNLX1RYX1JBVEUJCWFkYXB0ZXItPnNMb2NhbFBhcmEuQ3VycmVudFR4RmFsbGJhY2tSYXRlCiAjZGVmaW5lIENVUlJFTlRfVFhfUkFURV9GT1JfTU5HCQkJYWRhcHRlci0+c0xvY2FsUGFyYS5DdXJyZW50VHhSYXRlRm9yTW5nCiAjZGVmaW5lIENVUlJFTlRfUFJPVEVDVF9NRUNIQU5JU00JCXBzTE9DQUwtPmJvUHJvdGVjdE1lY2hhbmlzbQogI2RlZmluZSBDVVJSRU5UX1JUU19USFJFU0hPTEQJCQlhZGFwdGVyLT5NZHMuVHhSVFNUaHJlc2hvbGQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfbWliLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1lX21pYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTg5MjJlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfbWliLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vICBNTE1FTUlCLkggLQotLy8KLS8vICBEZXNjcmlwdGlvbjoKLS8vICAgIEdldCBhbmQgU2V0IHNvbWUgb2YgTUxNRSBNSUIgYXR0cmlidXRlcy4KLS8vCi0vLyAgUmV2aXNpb24gaGlzdG9yeToKLS8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gICAgICAgICAgIDIwMDMwMTE3ICBQRDQzIEF1c3RpbiBMaXUKLS8vICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbCByZWxlYXNlCi0vLwotLy8gIENvcHlyaWdodCAoYykgMjAwMyBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmbmRlZiBfTUxNRV9NSUJfSAotI2RlZmluZSBfTUxNRV9NSUJfSAotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIE1MTUVTZXRFeGNsdWRlVW5lbmNyeXB0ZWQgLS0KLS8vCi0vLyBEZXNjcmlwdGlvbjoKLS8vICAgU2V0IHRoZSBkb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCB2YWx1ZS4KLS8vCi0vLyBBcmd1bWVudHM6Ci0vLyAgIGFkYXB0ZXIgICAgICAgIC0gVGhlIHBvaW50ZXIgdG8gdGhlIG1pbmlwb3J0IGFkYXB0ZXIgY29udGV4dC4KLS8vICAgRXhVbmVuY3J5cHRlZCAgLSB1bnNpZ25lZCBjaGFyIHR5cGUuIFRoZSB2YWx1ZSB0byBiZSBzZXQuCi0vLwotLy8gUmV0dXJuIHZhbHVlczoKLS8vICAgTm9uZS4KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotI2RlZmluZSBNTE1FU2V0RXhjbHVkZVVuZW5jcnlwdGVkKGFkYXB0ZXIsIEV4VW5lbmNyeXB0ZWQpICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGFkYXB0ZXIpLT5zTG9jYWxQYXJhLkV4Y2x1ZGVVbmVuY3J5cHRlZCA9IEV4VW5lbmNyeXB0ZWQ7ICAgICAgICAgICAgIFwKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBNTE1FR2V0RXhjbHVkZVVuZW5jcnlwdGVkIC0tCi0vLwotLy8gRGVzY3JpcHRpb246Ci0vLyAgIEdldCB0aGUgZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQgdmFsdWUuCi0vLwotLy8gQXJndW1lbnRzOgotLy8gICBhZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCi0vLwotLy8gUmV0dXJuIHZhbHVlczoKLS8vICAgdW5zaWduZWQgY2hhciB0eXBlLiBUaGUgY3VycmVudCBkb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCB2YWx1ZS4KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotI2RlZmluZSBNTE1FR2V0RXhjbHVkZVVuZW5jcnlwdGVkKGFkYXB0ZXIpICgodW5zaWduZWQgY2hhcikgKGFkYXB0ZXIpLT5zTG9jYWxQYXJhLkV4Y2x1ZGVVbmVuY3J5cHRlZCkKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBNTE1FU2V0TWF4UmVjZWl2ZUxpZmVUaW1lIC0tCi0vLwotLy8gRGVzY3JpcHRpb246Ci0vLyAgIFNldCB0aGUgZG90MTFNYXhSZWNlaXZlTGlmZVRpbWUgdmFsdWUuCi0vLwotLy8gQXJndW1lbnRzOgotLy8gICBhZGFwdGVyICAgICAgICAtIFRoZSBwb2ludGVyIHRvIHRoZSBtaW5pcG9ydCBhZGFwdGVyIGNvbnRleHQuCi0vLyAgIFJlY2VpdmVMaWZlVGltZS0gdTMyIHR5cGUuIFRoZSB2YWx1ZSB0byBiZSBzZXQuCi0vLwotLy8gUmV0dXJuIHZhbHVlczoKLS8vICAgTm9uZS4KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotI2RlZmluZSBNTE1FU2V0TWF4UmVjZWl2ZUxpZmVUaW1lKGFkYXB0ZXIsIFJlY2VpdmVMaWZlVGltZSkgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoYWRhcHRlciktPk1kcy5NYXhSZWNlaXZlVGltZSA9IFJlY2VpdmVMaWZlVGltZTsgICAgICAgICAgICAgICAgXAotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIE1MTUVTZXRNYXhSZWNlaXZlTGlmZVRpbWUgLS0KLS8vCi0vLyBEZXNjcmlwdGlvbjoKLS8vICAgR2V0IHRoZSBkb3QxMU1heFJlY2VpdmVMaWZlVGltZSB2YWx1ZS4KLS8vCi0vLyBBcmd1bWVudHM6Ci0vLyAgIGFkYXB0ZXIgICAgICAgIC0gVGhlIHBvaW50ZXIgdG8gdGhlIG1pbmlwb3J0IGFkYXB0ZXIgY29udGV4dC4KLS8vCi0vLyBSZXR1cm4gdmFsdWVzOgotLy8gICB1MzIgdHlwZS4gVGhlIGN1cnJlbnQgZG90MTFNYXhSZWNlaXZlTGlmZVRpbWUgdmFsdWUuCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNkZWZpbmUgTUxNRUdldE1heFJlY2VpdmVMaWZlVGltZShhZGFwdGVyKSAoKHUzMikgKGFkYXB0ZXIpLT5NZHMuTWF4UmVjZWl2ZVRpbWUpCi0KLSNlbmRpZgotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1ldHhyeC5jCmluZGV4IDA3ODAyYWYuLjY0M2NlYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWV0eHJ4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWxtZXR4cnguYwpAQCAtMTUsNyArMTUsNyBAQAogLy8KIC8vICBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwMiBXaW5ib25kIEVsZWN0cm9uaWNzIENvcnAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSNpbmNsdWRlICJvc19jb21tb24uaCIKKyNpbmNsdWRlICJzeXNkZWYuaCIKIAogI2luY2x1ZGUgIm1kc19mLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmMKaW5kZXggZGUxMWEwNS4uOTRhMDYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmMKQEAgLTIyLDkgKzIyLDggQEAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAvLyBMQTIwMDQwMjEwX0RUTyBrZXZpbgotI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorI2luY2x1ZGUgInN5c2RlZi5oIgogI2luY2x1ZGUgInNtZV9hcGkuaCIKLSNpbmNsdWRlICJnbF84MDIxMS5oIgogI2luY2x1ZGUgIndiaGFsX2YuaCIKIAogLy8gRGVjbGFyZSBTUTMgdG8gcmF0ZSBhbmQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgdGFibGUKQEAgLTUxLDIwICs1MCwxNCBAQAogc3RhdGljIGludCBQZXJpb2RUb3RhbFR4UGt0ID0gMDsKIHN0YXRpYyBpbnQgUGVyaW9kVG90YWxUeFBrdFJldHJ5ID0gMDsKIAotdHlwZWRlZiBzdHJ1Y3QKLXsKLQlzMzIgUlNTSTsKLQl1OCAgVHhSYXRlOwotfVJTU0kyUkFURTsKLQogc3RhdGljIHU4IGJvU3BhcnNlVHhUcmFmZmljID0gZmFsc2U7CiAKLXZvaWQgTVRPX0luaXQoTVRPX0ZVTkNfSU5QVVQpOwotdm9pZCBUeFJhdGVSZWR1Y3Rpb25DdHJsKE1UT19GVU5DX0lOUFVUKTsKK3ZvaWQgTVRPX0luaXQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyKTsKK3ZvaWQgVHhSYXRlUmVkdWN0aW9uQ3RybChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpOwogLyoqIDEuMS4zMS4xMDAwIFR1cmJvIG1vZGlmeSAqLwotdm9pZCBNVE9fU2V0VHhDb3VudChNVE9fRlVOQ19JTlBVVCwgdTggdDAsIHU4IGluZGV4KTsKLXZvaWQgTVRPX1R4RmFpbGVkKE1UT19GVU5DX0lOUFVUKTsKLXZvaWQgaGFsX2dldF9kdG9fcGFyYShNVE9fRlVOQ19JTlBVVCwgY2hhciAqYnVmZmVyKTsKK3ZvaWQgTVRPX1NldFR4Q291bnQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyLCB1OCB0MCwgdTggaW5kZXgpOwordm9pZCBNVE9fVHhGYWlsZWQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyKTsKK3ZvaWQgaGFsX2dldF9kdG9fcGFyYShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIsIGNoYXIgKmJ1ZmZlcik7CiAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyAgTVRPX0luaXQgLS0KQEAgLTgwLDEwICs3Myw5IEBACiAvLyAgUmV0dXJuIFZhbHVlOgogLy8gICAgTm9uZQogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIE1UT19Jbml0KE1UT19GVU5DX0lOUFVUKQordm9pZCBNVE9fSW5pdChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpCiB7CiAgICAgaW50IGk7Ci0JLy9XQkRFQlVHKCgiW01UT10gLT4gTVRPX0luaXQoKVxuIikpOwogCS8vW1dLQ0hFTl1wTVRPY29yZV9kYXRhID0gcGNvcmVfZGF0YTsKIC8vIDIwMDQwNTEwIFR1cmJvIGFkZCBmb3IgZ2xvYmFsIHZhcmlhYmxlCiAgICAgTVRPX1RNUl9DTlQoKSAgICAgICA9IDA7CkBAIC0xOTYsNyArMTg4LDcgQEAKIC8vICAgICAgSWYgd2UgZW5hYmxlIERUTywgd2Ugd2lsbCBpZ25vcmUgdGhlIHR4IGNvdW50IHdpdGggZGlmZmVyZW50IHR4IHJhdGUgZnJvbQogLy8gICAgICBEVE8gcmF0ZS4gVGhpcyBpcyBiZWNhdXNlIHdoZW4gd2UgYWRqdXN0IERUTyB0eCByYXRlLCB0aGVyZSBjb3VsZCBiZSBzb21lCiAvLyAgICAgIHBhY2tldHMgaW4gdGhlIHR4IHF1ZXVlIHdpdGggcHJldmlvdXMgdHggcmF0ZQotdm9pZCBNVE9fU2V0VHhDb3VudChNVE9fRlVOQ19JTlBVVCwgdTggdHhfcmF0ZSwgdTggaW5kZXgpCit2b2lkIE1UT19TZXRUeENvdW50KHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlciwgdTggdHhfcmF0ZSwgdTggaW5kZXgpCiB7CiAJTVRPX1RYRkxPV0NPVU5UKCkrKzsKIAlpZiAoKE1UT19FTkFCTEU9PTEpICYmIChNVE9fUkFURV9DSEFOR0VfRU5BQkxFKCk9PTEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbXRvLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uaAppbmRleCAwZDM3NzVlLi41NmYyNDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uaApAQCAtMTMsNiArMTMsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorc3RydWN0IHdic29mdF9wcml2OworCiAjZGVmaW5lIE1UT19ERUZBVUxUX1RIX0NOVCAgICAgICAgICAgICAgNQogI2RlZmluZSBNVE9fREVGQVVMVF9USF9TUTMgICAgICAgICAgICAgIDExMiAgLy9PTEQgSVMgMTMgcmVmZXJlbmNlIEpvaG5YdQogI2RlZmluZSBNVE9fREVGQVVMVF9USF9JRExFX1NMT1QgICAgICAgIDE1CkBAIC0xMzEsOCArMTMzLDYgQEAKIH0gTVRPX1BBUkFNRVRFUlMsICpQTVRPX1BBUkFNRVRFUlM7CiAKIAotI2RlZmluZSBNVE9fRlVOQ19JTlBVVCAgICAgICAgICAgICAgc3RydWN0IHdic29mdF9wcml2ICoJYWRhcHRlcgotI2RlZmluZSBNVE9fRlVOQ19JTlBVVF9EQVRBICAgICAgICAgYWRhcHRlcgogI2RlZmluZSBNVE9fREFUQSgpICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnNNdG9QYXJhKQogI2RlZmluZSBNVE9fSEFMKCkgICAgICAgICAgICAgICAgICAgKCZhZGFwdGVyLT5zSHdEYXRhKQogI2RlZmluZSBNVE9fU0VUX1BSRUFNQkxFX1RZUEUoeCkgICAgLy8gMjAwNDA1MTEgVHVyYm8gbWFyayBMTV9QUkVBTUJMRV9UWVBFKCZwY29yZV9kYXRhLT5sbV9kYXRhKSA9ICh4KQpAQCAtMTQwLDcgKzE0MCw2IEBACiAjZGVmaW5lIE1UT19UWFBPV0VSX0ZST01fRUVQUk9NCQkoYWRhcHRlci0+c0h3RGF0YS5Qb3dlckluZGV4RnJvbUVFUFJPTSkKICNkZWZpbmUgTE9DQUxfQU5URU5OQV9OTygpCQkJKGFkYXB0ZXItPnNMb2NhbFBhcmEuYkFudGVubmFObykKICNkZWZpbmUgTE9DQUxfSVNfQ09OTkVDVEVEKCkJCShhZGFwdGVyLT5zTG9jYWxQYXJhLndDb25uZWN0ZWRTVEFpbmRleCAhPSAwKQotI2RlZmluZSBMT0NBTF9JU19JQlNTX01PREUoKQkJKGFkYXB0ZXItPmFzQlNTRGVzY3JpcHRFbGVtZW50W2FkYXB0ZXItPnNMb2NhbFBhcmEud0Nvbm5lY3RlZFNUQWluZGV4XS5iQnNzVHlwZSA9PSBJQlNTX05FVCkKICNkZWZpbmUgTVRPX0lOSVRUWFJBVEVfTU9ERQkJCShhZGFwdGVyLT5zSHdEYXRhLlNvZnR3YXJlU2V0JjB4MikJLy9iaXQgMQogLy8gMjAwNDA1MTAgVHVyYm8gYWRkCiAjZGVmaW5lIE1UT19UTVJfQ05UKCkgICAgICAgICAgICAgICBNVE9fREFUQSgpLlRtckNudApAQCAtMjU5LDYgKzI1OCwxMyBAQAogCXMzMiAgIEFudGVubmE7CiB9IFNUQVRJU1RJQ1NfSU5GTywgKlBTVEFUSVNUSUNTX0lORk87CiAKK2V4dGVybiB2b2lkIE1UT19Jbml0KHN0cnVjdCB3YnNvZnRfcHJpdiAqKTsKK2V4dGVybiB2b2lkIE1UT19QZXJpb2RpY1RpbWVyRXhwaXJlZChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKik7CitleHRlcm4gdm9pZCBNVE9fU2V0RFRPUmF0ZVJhbmdlKHN0cnVjdCB3YnNvZnRfcHJpdiAqLCB1OCAqLCB1OCk7CitleHRlcm4gdTggTVRPX0dldFR4UmF0ZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIsIHUzMiBmcGR1X2xlbik7CitleHRlcm4gdTggTVRPX0dldFR4RmFsbGJhY2tSYXRlKHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBNVE9fU2V0VHhDb3VudChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIsIHU4IHQwLCB1OCBpbmRleCk7CisKICNlbmRpZiAvL19fTVRPX0hfXwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210b19mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG9fZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWY1OTEzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210b19mLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi0jaWZuZGVmIF9fV0lOQk9ORF9NVE9fRl9ICi0jZGVmaW5lIF9fV0lOQk9ORF9NVE9fRl9ICi0KLSNpbmNsdWRlICJjb3JlLmgiCi0KLWV4dGVybiB2b2lkIE1UT19Jbml0KHN0cnVjdCB3YnNvZnRfcHJpdiAqKTsKLWV4dGVybiB2b2lkIE1UT19QZXJpb2RpY1RpbWVyRXhwaXJlZChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKik7Ci1leHRlcm4gdm9pZCBNVE9fU2V0RFRPUmF0ZVJhbmdlKHN0cnVjdCB3YnNvZnRfcHJpdiAqLCB1OCAqLCB1OCk7Ci1leHRlcm4gdTggTVRPX0dldFR4UmF0ZShNVE9fRlVOQ19JTlBVVCwgdTMyIGZwZHVfbGVuKTsKLWV4dGVybiB1OCBNVE9fR2V0VHhGYWxsYmFja1JhdGUoTVRPX0ZVTkNfSU5QVVQpOwotZXh0ZXJuIHZvaWQgTVRPX1NldFR4Q291bnQoTVRPX0ZVTkNfSU5QVVQsIHU4IHQwLCB1OCBpbmRleCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvb3NfY29tbW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9vc19jb21tb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMyNzZlMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9vc19jb21tb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotI2luY2x1ZGUgInN5c2RlZi5oIgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5jCmluZGV4IDY3ODI1NTIuLmFmOGMwMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKi8KIAogLyoqKioqKioqKioqKioqKioqKiBJTkNMVURFIEZJTEVTIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAib3NfY29tbW9uLmgiCisjaW5jbHVkZSAic3lzZGVmLmgiCiAjaW5jbHVkZSAicGh5X2NhbGlicmF0aW9uLmgiCiAjaW5jbHVkZSAid2JoYWxfZi5oIgogCkBAIC0zNyw4ICszNyw4IEBACiB9OwogCiAvKioqKioqKioqKioqKioqKioqIExPQ0FMIEZVTkNUSU9OIERFQ0xBUkFUSU9OIFNFQ1RJT04gKioqKioqKioqKioqKioqKioqKioqKi8KLS8vdm9pZCAgICBfcGh5X3JmX3dyaXRlX2RlbGF5KGh3X2RhdGFfdCAqcGh3X2RhdGEpOwotLy92b2lkICAgIHBoeV9pbml0X3JmKGh3X2RhdGFfdCAqcGh3X2RhdGEpOworLy92b2lkICAgIF9waHlfcmZfd3JpdGVfZGVsYXkoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKTsKKy8vdm9pZCAgICBwaHlfaW5pdF9yZihzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEpOwogCiAvKioqKioqKioqKioqKioqKioqIEZVTkNUSU9OIERFRklOSVRJT04gU0VDVElPTiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMzQxLDcgKzM0MSw3IEBACiB9CiAKIAotdm9pZCBfcmVzZXRfcnhfY2FsKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit2b2lkIF9yZXNldF9yeF9jYWwoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKQogewogCXUzMiAgICAgdmFsOwogCkBAIC0zNjYsNyArMzY2LDcgQEAKIC8vCiAvLwogLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi12b2lkIF9yeGFkY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKK3ZvaWQgX3J4YWRjX2RjX29mZnNldF9jYW5jZWxsYXRpb25fd2luYm9uZChzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCiB7CiAgICAgdTMyICAgICByZWdfYWdjX2N0cmwzOwogICAgIHUzMiAgICAgcmVnX2FfYWNxX2N0cmw7CkBAIC00NjUsNyArNDY1LDcgQEAKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXZvaWQgX3R4aWRhY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSkKK3ZvaWQgX3R4aWRhY19kY19vZmZzZXRfY2FuY2VsbGF0aW9uX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKQogewogCXUzMiAgICAgcmVnX2FnY19jdHJsMzsKIAl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CkBAIC02MDAsNyArNjAwLDcgQEAKIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdm9pZCBfdHhxZGFjX2RjX29mZnNldF9jYWNlbGxhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEpCit2b2lkIF90eHFkYWNfZGNfb2Zmc2V0X2NhY2VsbGF0aW9uX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKQogewogCXUzMiAgICAgcmVnX2FnY19jdHJsMzsKIAl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CkBAIC03MjYsNyArNzI2LDcgQEAKIH0KIAogLy8yMDA2MDYxMi4xLmEgMjAwNjA3MTguMSBNb2RpZnkKLXU4IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwKK3U4IF90eF9pcV9jYWxpYnJhdGlvbl9sb29wX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhLAogCQkJCQkJICAgczMyIGFfMl90aHJlc2hvbGQsCiAJCQkJCQkgICBzMzIgYl8yX3RocmVzaG9sZCkKIHsKQEAgLTEwMzIsNyArMTAzMiw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXZvaWQgX3R4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSkKK3ZvaWQgX3R4X2lxX2NhbGlicmF0aW9uX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKQogewogCXUzMiAgICAgcmVnX2FnY19jdHJsMzsKICNpZmRlZiBfREVCVUcKQEAgLTExOTUsNyArMTE5NSw3IEBACiB9CiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi11OCBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUxNiBmYWN0b3IsIHUzMiBmcmVxdWVuY3kpCit1OCBfcnhfaXFfY2FsaWJyYXRpb25fbG9vcF93aW5ib25kKHN0cnVjdCBod19kYXRhICpwaHdfZGF0YSwgdTE2IGZhY3RvciwgdTMyIGZyZXF1ZW5jeSkKIHsKIAl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CiAJczMyICAgICBpcWNhbF90b25lX2k7CkBAIC0xNTAxLDcgKzE1MDEsNyBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdm9pZCBfcnhfaXFfY2FsaWJyYXRpb25fd2luYm9uZChod19kYXRhX3QgKnBod19kYXRhLCB1MzIgZnJlcXVlbmN5KQordm9pZCBfcnhfaXFfY2FsaWJyYXRpb25fd2luYm9uZChzdHJ1Y3QgaHdfZGF0YSAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpCiB7CiAvLyBmaWdvIDIwMDUwNTIzIG1hcmtlZCB0aHNpIGZsYWcgZm9yIGNhbid0IGNvbXBpbGUgZm9yIHJlbGVzYXNlCiAjaWZkZWYgX0RFQlVHCkBAIC0xNTc5LDcgKzE1NzksNyBAQAogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLXZvaWQgcGh5X2NhbGlicmF0aW9uX3dpbmJvbmQoaHdfZGF0YV90ICpwaHdfZGF0YSwgdTMyIGZyZXF1ZW5jeSkKK3ZvaWQgcGh5X2NhbGlicmF0aW9uX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhLCB1MzIgZnJlcXVlbmN5KQogewogCXUzMiAgICAgcmVnX21vZGVfY3RybDsKIAl1MzIgICAgIGlxX2FscGhhOwpAQCAtMTYxOCw3ICsxNjE4LDcgQEAKIH0KIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXZvaWQgcGh5X3NldF9yZl9kYXRhKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIGluZGV4LCAgdTMyIHZhbHVlICkKK3ZvaWQgcGh5X3NldF9yZl9kYXRhKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTMyIGluZGV4LCAgdTMyIHZhbHVlICkKIHsKICAgIHUzMiBsdG1wPTA7CiAKQEAgLTE2NjAsNyArMTY2MCw3IEBACiB9CiAKIC8vIDIwMDYwNzE3IG1vZGlmeSBhcyBCcnVjZSdzIG1haWwKLXVuc2lnbmVkIGNoYXIgYWRqdXN0X1RYVkdBX2Zvcl9pcV9tYWcoaHdfZGF0YV90ICpwaHdfZGF0YSkKK3Vuc2lnbmVkIGNoYXIgYWRqdXN0X1RYVkdBX2Zvcl9pcV9tYWcoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhKQogewogCWludCBpbml0X3R4dmdhID0gMDsKIAl1MzIgICAgIHJlZ19tb2RlX2N0cmw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9waHlfY2FsaWJyYXRpb24uaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5oCmluZGV4IDAzYjgyMGMuLjUxYzhmZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3BoeV9jYWxpYnJhdGlvbi5oCkBAIC0xMDEsNyArMTAxLDcgQEAKIC8vI2RlZmluZSBNQVNLX0lRQ0FMX0lNQUdFX1EgICAgICAgICAweDAzRkZFMDAwCiAvLyNkZWZpbmUgU0hJRlRfSVFDQUxfSU1BR0VfUSh4KSAgICAgKCh4KT4+MTMpCiAKLXZvaWQgcGh5X3NldF9yZl9kYXRhKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyIGluZGV4LCAgdTMyIHZhbHVlICk7Cit2b2lkIHBoeV9zZXRfcmZfZGF0YSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUzMiBpbmRleCwgIHUzMiB2YWx1ZSApOwogI2RlZmluZSBwaHlfaW5pdF9yZiggX0EgKQkvL1JGU3ludGhlc2l6ZXJfaW5pdGlhbCggX0EgKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3JlZy5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcmVnLmMKaW5kZXggY2QyMTI3Mi4uZDkxNWNiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcmVnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcmVnLmMKQEAgLTEsNCArMSw0IEBACi0jaW5jbHVkZSAib3NfY29tbW9uLmgiCisjaW5jbHVkZSAic3lzZGVmLmgiCiAjaW5jbHVkZSAid2JoYWxfZi5oIgogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTkxNSw3ICs5MTUsNyBAQAogLy8gICAgVGhlIGFkZHJlc3MgaXMgc3RvcmVkIGluIEV0aGVybmV0SURBZGRyLgogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiB2b2lkCi1VeHhfUmVhZEV0aGVybmV0QWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSApCitVeHhfUmVhZEV0aGVybmV0QWRkcmVzcyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApCiB7CiAJdTMyCWx0bXA7CiAKQEAgLTk0OCwxNCArOTQ4LDEzIEBACiAvLyAgUmV0dXJuIFZhbHVlOgogLy8gICAgTm9uZS4KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXZvaWQgQ2FyZEdldE11bHRpY2FzdEJpdCggICB1OCBBZGRyZXNzW0VUSF9MRU5HVEhfT0ZfQUREUkVTU10sCi0JCQkJCQkgICB1OCAqQnl0ZSwgIHU4ICpWYWx1ZSApCit2b2lkIENhcmRHZXRNdWx0aWNhc3RCaXQoIHU4IEFkZHJlc3NbRVRIX0FMRU5dLCB1OCAqQnl0ZSwgdTggKlZhbHVlICkKIHsKICAgICB1MzIgQ3JjOwogICAgIHUzMiBCaXROdW1iZXI7CiAKICAgICAvLyBGaXJzdCBjb21wdXRlIHRoZSBDUkMuCi0gICAgQ3JjID0gQ2FyZENvbXB1dGVDcmMoQWRkcmVzcywgRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKyAgICBDcmMgPSBDYXJkQ29tcHV0ZUNyYyhBZGRyZXNzLCBFVEhfQUxFTik7CiAKIAkvLyBUaGUgY29tcHV0ZWQgQ1JDIGlzIGJpdDB+MzEgZnJvbSBsZWZ0IHRvIHJpZ2h0CiAJLy9BdCBmaXJzdCB3ZSBzaG91bGQgZG8gcmlnaHQgc2hpZnQgMjViaXRzLCBhbmQgcmVhZCA3Yml0cyBieSB1c2luZyAnJicsIDJeNz0xMjgKQEAgLTk2NSw3ICs5NjQsNyBAQAogCSpWYWx1ZSA9ICh1OCkgKCh1OCkxIDw8IChCaXROdW1iZXIgJSA4KSk7CiB9CiAKLXZvaWQgVXh4X3Bvd2VyX29uX3Byb2NlZHVyZSggIHBod19kYXRhX3QgcEh3RGF0YSApCit2b2lkIFV4eF9wb3dlcl9vbl9wcm9jZWR1cmUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXUzMglsdG1wLCBsb29wOwogCkBAIC0xMDA5LDcgKzEwMDgsNyBAQAogCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZjgsIDB4N2ZmICk7CiB9CiAKLXZvaWQgU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzI0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1MzIgKnBsdG1wICxjaGFyIG51bWJlcikKK3ZvaWQgU2V0X0NoYW5JbmRlcF9SZkRhdGFfYWw3MjMwXzI0KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1MzIgKnBsdG1wICxjaGFyIG51bWJlcikKIHsKIAl1OAlpOwogCkBAIC0xMDIwLDcgKzEwMTksNyBAQAogCX0KIH0KIAotdm9pZCBTZXRfQ2hhbkluZGVwX1JmRGF0YV9hbDcyMzBfNTAoICBwaHdfZGF0YV90IHBId0RhdGEsIHUzMiAqcGx0bXAsIGNoYXIgbnVtYmVyKQordm9pZCBTZXRfQ2hhbkluZGVwX1JmRGF0YV9hbDcyMzBfNTAoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHUzMiAqcGx0bXAsIGNoYXIgbnVtYmVyKQogewogCXU4CWk7CiAKQEAgLTEwMzYsNyArMTAzNSw3IEBACiAvLyBSRlN5bnRoZXNpemVyX2luaXRpYWwgLS0KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogdm9pZAotUkZTeW50aGVzaXplcl9pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK1JGU3ludGhlc2l6ZXJfaW5pdGlhbChzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7CiAJdTMyCWFsdG1wWzMyXTsKIAl1MzIgKglwbHRtcCA9IGFsdG1wOwpAQCAtMTExNSw3ICsxMTE0LDcgQEAKIAkJLy9TdGFydCB0byBmaWxsIFJGIHBhcmFtZXRlcnMsIFBMTF9PTiBzaG91bGQgYmUgcHVsbGVkIGxvdy4KIAkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDAwMCApOwogI2lmZGVmIF9QRV9TVEFURV9EVU1QXwotCQlXQkRFQlVHKCgiKiBQTExfT04gICAgbG93XG4iKSk7CisJCXByaW50aygiKiBQTExfT04gICAgbG93XG4iKTsKICNlbmRpZgogCiAJCW51bWJlciA9IHNpemVvZihhbDcyMzBfcmZfZGF0YV8yNCkvc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzI0WzBdKTsKQEAgLTEyMjQsNyArMTIyMyw3IEBACiAJCQkvL3B1bGxlZCBoaWdoCiAJCQlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwM2RjLCAweDAwMDAwMDgwICk7CiAJCQkjaWZkZWYgX1BFX1NUQVRFX0RVTVBfCi0JCQlXQkRFQlVHKCgiKiBQTExfT04gICAgaGlnaFxuIikpOworCQkJcHJpbnRrKCIqIFBMTF9PTiAgICBoaWdoXG4iKTsKIAkJCSNlbmRpZgogCiAJCQkvLzIuNEdIegpAQCAtMTI0NCw3ICsxMjQzLDcgQEAKIAkJCS8vNUdIegogCQkJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDAwMCApOwogCQkJI2lmZGVmIF9QRV9TVEFURV9EVU1QXwotCQkJV0JERUJVRygoIiogUExMX09OICAgIGxvd1xuIikpOworCQkJcHJpbnRrKCIqIFBMTF9PTiAgICBsb3dcbiIpOwogCQkJI2VuZGlmCiAKIAkJCW51bWJlciA9IHNpemVvZihhbDcyMzBfcmZfZGF0YV81MCkvc2l6ZW9mKGFsNzIzMF9yZl9kYXRhXzUwWzBdKTsKQEAgLTEyNTYsNyArMTI1NSw3IEBACiAKIAkJCVdiMzVSZWdfV3JpdGVTeW5jKCBwSHdEYXRhLCAweDAzZGMsIDB4MDAwMDAwODAgKTsKIAkJCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KLQkJCVdCREVCVUcoKCIqIFBMTF9PTiAgICBoaWdoXG4iKSk7CisJCQlwcmludGsoIiogUExMX09OICAgIGhpZ2hcbiIpOwogCQkJI2VuZGlmCiAKIAkJCS8vbHRtcCA9ICgxIDw8IDMxKSB8ICgwIDw8IDMwKSB8ICgyNCA8PCAyNCkgfCAweDEyQkFDRjsKQEAgLTEyNzIsNyArMTI3MSw3IEBACiAJCQltc2xlZXAoNSk7CiAKIAkJCS8vV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNkYywgMHgwMDAwMDA4MCApOwotCQkJLy9XQkRFQlVHKCgiKiBQTExfT04gICAgaGlnaFxuIikpOworCQkJLy9wcmludGsoIiogUExMX09OICAgIGhpZ2hcbiIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBSRl9XQl8yNDI6CkBAIC0xNDE0LDcgKzE0MTMsNyBAQAogCX0KIH0KIAotdm9pZCBCQlByb2Nlc3Nvcl9BTDcyMzBfMjQwMCggIHBod19kYXRhX3QgcEh3RGF0YSkKK3ZvaWQgQkJQcm9jZXNzb3JfQUw3MjMwXzI0MDAoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXUzMglwbHRtcFsxMl07CkBAIC0xNDU2LDcgKzE0NTUsNyBAQAogCiB9CiAKLXZvaWQgQkJQcm9jZXNzb3JfQUw3MjMwXzUwMDAoICBwaHdfZGF0YV90IHBId0RhdGEpCit2b2lkIEJCUHJvY2Vzc29yX0FMNzIzMF81MDAwKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAl1MzIJcGx0bXBbMTJdOwpAQCAtMTUxMCw3ICsxNTA5LDcgQEAKIC8vICAgIE5vbmUuCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIHZvaWQKLUJCUHJvY2Vzc29yX2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKQorQkJQcm9jZXNzb3JfaW5pdGlhbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXUzMglpLCBwbHRtcFsxMl07CkBAIC0xODI0LDEyICsxODIzLDEyIEBACiAJCXJlZy0+U1EzX2ZpbHRlcltpXSA9IDB4MmY7IC8vIGhhbGYgb2YgQml0IDAgfiA2CiB9CiAKLXZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX21heDI4MjkoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfbWF4MjgyOSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwpCiB7CiAJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCAxMDAgKTsgLy8gMjAwNjA2MjAuMSBNb2RpZnkKIH0KIAotdm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfYWwyMjMwKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCApCit2b2lkIHNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDIyMzAoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsICkKIHsKIAl1OAlpbmRleCA9IDEwMDsKIApAQCAtMTgzOSw3ICsxODM4LDcgQEAKIAlSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoIHBId0RhdGEsIGluZGV4ICk7CiB9CiAKLXZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX2FsNzIzMCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwpCit2b2lkIHNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDcyMzAoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQogewogCXU4CWksIGluZGV4ID0gMTAwOwogCkBAIC0xODY5LDcgKzE4NjgsNyBAQAogCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgaW5kZXggKTsKIH0KIAotdm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfd2IyNDIoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQordm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfd2IyNDIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsKQogewogCXU4CWluZGV4ID0gMTAwOwogCkBAIC0xOTAyLDcgKzE5MDEsNyBAQAogLy8gICBOb25lLgogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiB2b2lkCi1SRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBwaHdfZGF0YV90IHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsICkKK1JGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIENoYW5JbmZvIENoYW5uZWwgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAl1MzIJcGx0bXBbMTZdOyAvLyBUaGUgMTYgaXMgdGhlIG1heGltdW0gY2FwYWJpbGl0eSBvZiBoYXJkd2FyZQpAQCAtMjAxMiw3ICsyMDExLDcgQEAKIAogCQkJLy9TdGFydCB0byBmaWxsIFJGIHBhcmFtZXRlcnMsIFBMTF9PTiBzaG91bGQgYmUgcHVsbGVkIGxvdy4KIAkJCS8vV2IzNVJlZ19Xcml0ZSggcEh3RGF0YSwgMHgwM2RjLCAweDAwMDAwMDAwICk7Ci0JCQkvL1dCREVCVUcoKCIqIFBMTF9PTiAgICBsb3dcbiIpKTsKKwkJCS8vcHJpbnRrKCIqIFBMTF9PTiAgICBsb3dcbiIpOwogCiAJCQkvL0NoYW5uZWwgaW5kZXBlbmRlbnQgcmVnaXN0ZXJzCiAJCQlpZiggQ2hhbm5lbC5iYW5kICE9IHBId0RhdGEtPmJhbmQpCkBAIC0yMDM3LDcgKzIwMzYsNyBAQAogCQkJCS8vIFdyaXRlIHRvIHJlZ2lzdGVyLiBudW1iZXIgbXVzdCBsZXNzIGFuZCBlcXVhbCB0aGFuIDE2CiAJCQkJV2IzNVJlZ19CdXJzdFdyaXRlKCBwSHdEYXRhLCAweDA4NjQsIHBsdG1wLCBudW1iZXIsIE5PX0lOQ1JFTUVOVCApOwogCQkJCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KLQkJCQlXQkRFQlVHKCgiQmFuZCBjaGFuZ2VkXG4iKSk7CisJCQkJcHJpbnRrKCJCYW5kIGNoYW5nZWRcbiIpOwogCQkJCSNlbmRpZgogCQkJfQogCkBAIC0yMTMwLDcgKzIxMjksNyBAQAogfQogCiAvL1NldCB0aGUgdHggcG93ZXIgZGlyZWN0bHkgZnJvbSBEVVQgR1VJLCBub3QgZnJvbSB0aGUgRUVQUk9NLiBSZXR1cm4gdGhlIGN1cnJlbnQgc2V0dGluZwotdTggUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggUG93ZXJJbmRleCApCit1OCBSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBQb3dlckluZGV4ICkKIHsKIAl1MzIJQmFuZCA9IHBId0RhdGEtPmJhbmQ7CiAJdTgJaW5kZXg9MDsKQEAgLTIxODgsNyArMjE4Nyw3IEBACiB9CiAKIC8vLS0gU3ViIGZ1bmN0aW9uCi11OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF8yNFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF8yNFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCBpbmRleCApCiB7CiAJdTMyCQlQb3dlckRhdGE7CiAJaWYoIGluZGV4ID4gMSApIGluZGV4ID0gMTsKQEAgLTIxOTcsNyArMjE5Niw3IEBACiAJcmV0dXJuIGluZGV4OwogfQogLy8tLQotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfNTBQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfNTBQb3dlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggaW5kZXggKQogewogCXUzMgkJUG93ZXJEYXRhOwogCWlmKCBpbmRleCA+IDEgKSBpbmRleCA9IDE7CkBAIC0yMjA2LDcgKzIyMDUsNyBAQAogCXJldHVybiBpbmRleDsKIH0KIC8vLS0KLXU4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzI0UG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3U4IFJGU3ludGhlc2l6ZXJfU2V0TWF4aW0yODI3XzI0UG93ZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4IGluZGV4ICkKIHsKIAl1MzIJCVBvd2VyRGF0YTsKIAlpZiggaW5kZXggPiAxICkgaW5kZXggPSAxOwpAQCAtMjIxNSw3ICsyMjE0LDcgQEAKIAlyZXR1cm4gaW5kZXg7CiB9CiAvLy0tCi11OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN181MFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN181MFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCBpbmRleCApCiB7CiAJdTMyCQlQb3dlckRhdGE7CiAJaWYoIGluZGV4ID4gMSApIGluZGV4ID0gMTsKQEAgLTIyMjQsNyArMjIyMyw3IEBACiAJcmV0dXJuIGluZGV4OwogfQogLy8tLQotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjVQb3dlciggIHBod19kYXRhX3QgcEh3RGF0YSwgdTggaW5kZXggKQordTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjVQb3dlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggaW5kZXggKQogewogCXUzMgkJUG93ZXJEYXRhOwogCWlmKCBpbmRleCA+IDEgKSBpbmRleCA9IDE7CkBAIC0yMjMzLDcgKzIyMzIsNyBAQAogCXJldHVybiBpbmRleDsKIH0KIC8vLS0KLXU4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhMjIzMFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit1OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTIyMzBQb3dlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggaW5kZXggKQogewogCXUzMgkJUG93ZXJEYXRhOwogCXU4CQlpLGNvdW50OwpAQCAtMjI1Miw3ICsyMjUxLDcgQEAKIAlyZXR1cm4gaTsKIH0KIC8vLS0KLXU4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhNzIzMFBvd2VyKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCB1OCBpbmRleCApCit1OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTcyMzBQb3dlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggaW5kZXggKQogewogCXUzMgkJUG93ZXJEYXRhOwogCXU4CQlpLGNvdW50OwpAQCAtMjI3MSw3ICsyMjcwLDcgQEAKIAlyZXR1cm4gaTsKIH0KIAotdTggUkZTeW50aGVzaXplcl9TZXRXaW5ib25kMjQyUG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IGluZGV4ICkKK3U4IFJGU3ludGhlc2l6ZXJfU2V0V2luYm9uZDI0MlBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCBpbmRleCApCiB7CiAJdTMyCQlQb3dlckRhdGE7CiAJdTgJCWksY291bnQ7CkBAIC0yMzEyLDcgKzIzMTEsNyBAQAogLy8JCUluaXRpYWwgdGhlIGhhcmR3YXJlIHNldHRpbmcgYW5kIG1vZHVsZSB2YXJpYWJsZQogCS8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIER4eF9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3ZvaWQgRHh4X2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtMjMyNiw3ICsyMzI1LDcgQEAKIAlXYjM1UmVnX1dyaXRlU3luYyggcEh3RGF0YSwgMHgwNDAwLCByZWctPkQwMF9EbWFDb250cm9sICk7CiB9CiAKLXZvaWQgTXh4X2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKQordm9pZCBNeHhfaW5pdGlhbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXUzMgkJdG1wOwpAQCAtMjQxNyw3ICsyNDE2LDcgQEAKIH0KIAogCi12b2lkIFV4eF9wb3dlcl9vZmZfcHJvY2VkdXJlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3ZvaWQgVXh4X3Bvd2VyX29mZl9wcm9jZWR1cmUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCS8vIFNXLCBQTVUgcmVzZXQgYW5kIHR1cm4gb2ZmIGNsb2NrCiAJV2IzNVJlZ19Xcml0ZVN5bmMoIHBId0RhdGEsIDB4MDNiMCwgMyApOwpAQCAtMjQyNSw3ICsyNDI0LDcgQEAKIH0KIAogLy9EZWNpZGUgdGhlIFR4VmdhIG9mIGV2ZXJ5IGNoYW5uZWwKLXZvaWQgR2V0VHhWZ2FGcm9tRUVQUk9NKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3ZvaWQgR2V0VHhWZ2FGcm9tRUVQUk9NKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICkKIHsKIAl1MzIJCWksIGosIGx0bXA7CiAJdTE2CQlWYWx1ZVtNQVhfVFhWR0FfRUVQUk9NXTsKQEAgLTI0NzksNyArMjQ3OCw3IEBACiAvLyBvciBSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXggYmUgY2FsbGVkLCBuZXcgVHhWZ2Egd2lsbCB0YWtlIGVmZmVjdC4KIC8vIFR4VmdhU2V0dGluZ0luRUVQUk9NIG9mIHNId0RhdGEgaXMgYW4gdTggYXJyYXkgcG9pbnQgdG8gRUVQUk9NIGNvbnRhaW4gZm9yIElTODlDMzUKIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCB1c2UgZGVmYXVsdCBUeFZnYVNldHRpbmdJbkVFUFJPTSBkYXRhIHRvIGNhbGN1bGF0ZSBuZXcgVHhWZ2EuCi12b2lkIEVFUFJPTVR4VmdhQWRqdXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhICkgLy8gMjAwNjA2MTkuNSBBZGQKK3ZvaWQgRUVQUk9NVHhWZ2FBZGp1c3QoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKSAvLyAyMDA2MDYxOS41IEFkZAogewogCXU4CSoJcFR4VmdhID0gcEh3RGF0YS0+VHhWZ2FTZXR0aW5nSW5FRVBST007CiAJczE2CQlpLCBzdG1wOwpAQCAtMjYxMiwxNCArMjYxMSwxNCBAQAogCX0KIAogCSNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KLQlXQkRFQlVHKCgiIFR4VmdhRm9yMjQgOiBcbiIpKTsKKwlwcmludGsoIiBUeFZnYUZvcjI0IDogXG4iKTsKIAlEYXRhRG1wKCh1OCAqKXBId0RhdGEtPlR4VmdhRm9yMjQsIDE0ICwwKTsKLQlXQkRFQlVHKCgiIFR4VmdhRm9yNTAgOiBcbiIpKTsKKwlwcmludGsoIiBUeFZnYUZvcjUwIDogXG4iKTsKIAlEYXRhRG1wKCh1OCAqKXBId0RhdGEtPlR4VmdhRm9yNTAsIDcwICwwKTsKIAkjZW5kaWYKIH0KIAotdm9pZCBCQlByb2Nlc3Nvcl9SYXRlQ2hhbmdpbmcoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCByYXRlICkgLy8gMjAwNjA2MTMuMQordm9pZCBCQlByb2Nlc3Nvcl9SYXRlQ2hhbmdpbmcoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCByYXRlICkgLy8gMjAwNjA2MTMuMQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAl1bnNpZ25lZCBjaGFyCQlJczExYlJhdGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmgKaW5kZXggMTg4YTI1My4uNTQ5ODc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuaApAQCAtMTcsOSArMTcsNiBAQAogCiAjaW5jbHVkZSAibG9jYWxwYXJhLmgiCiAKLS8qKioqKioqKioqKioqKioqKiogSU5DTFVERSBGSUxFUyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLy8jaW5jbHVkZSAiR0xcZ2xfY29yZS5oIgotCiAvKioqKioqKioqKioqKioqKioqIENPTlNUQU5UIEFORCBNQUNSTyBTRUNUSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgX0lOTElORSAgICAgIF9faW5saW5lCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmQxMThmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzYgKzAsMCBAQAotI2lmbmRlZiBfX1dJTkJPTkRfU01FX1NfSAotI2RlZmluZSBfX1dJTkJPTkRfU01FX1NfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgIm1hY19zdHJ1Y3R1cmVzLmgiCi0jaW5jbHVkZSAibG9jYWxwYXJhLmgiCi0KLS8vCi0vLyBTTUVfUy5IIC0KLS8vIFNNRSB0YXNrIGdsb2JhbCBDT05TVEFOVFMsIFNUUlVDVFVSRVMsIHZhcmlhYmxlcwotLy8KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vZGVmaW5lIHRoZSBtc2cgdHlwZSBvZiBTTUUgbW9kdWxlCi0vLyAweDAwfjB4MUYgOiBNU0cgZnJvbSBHVUkgZGlzcGF0Y2gKLS8vIDB4MjB+MHgzRiA6IE1TRyBmcm9tIE1MTUUKLS8vIDB4NDB+MHg1RiA6IE1TRyBmcm9tIFNDQU4KLS8vIDB4NjB+MHg2RiA6IE1TRyBmcm9tIFRYL1JYCi0vLyAweDcwfjB4N0YgOiBNU0cgZnJvbSBST0FNSU5HCi0vLyAweDgwfjB4OEYgOiBNU0cgZnJvbSBJU1IKLS8vIDB4OTAJCSA6IE1TRyBUaW1lT3V0Ci0KLS8vIGZyb20gR1VJCi0jZGVmaW5lIFNNRU1TR19TQ0FOX1JFUQkJCQkJMHgwMQotLy8jZGVmaW5lIFNNRU1TR19QQVNTSVZFX1NDQU5fUkVRCQkJMHgwMgotI2RlZmluZSBTTUVNU0dfSk9JTl9SRVEJCQkJCTB4MDMKLSNkZWZpbmUgU01FTVNHX1NUQVJUX0lCU1MJCQkJMHgwNAotI2RlZmluZSBTTUVNU0dfRElTQ09OTkVDVF9SRVEJCQkweDA1Ci0jZGVmaW5lIFNNRU1TR19BVVRIRU5fUkVRCQkJCTB4MDYKLSNkZWZpbmUgU01FTVNHX0RFQVVUSEVOX1JFUQkJCQkweDA3Ci0jZGVmaW5lIFNNRU1TR19BU1NPQ19SRVEJCQkJMHgwOAotI2RlZmluZSBTTUVNU0dfUkVBU1NPQ19SRVEJCQkJMHgwOQotI2RlZmluZSBTTUVNU0dfRElTQVNTT0NfUkVRCQkJCTB4MGEKLSNkZWZpbmUgU01FTVNHX1BPV0VSU0FWRV9SRVEJCQkweDBiCi0KLQotLy8gZnJvbSBNTE1FCi0jZGVmaW5lIFNNRU1TR19BVVRIRU5fQ0ZNCQkJCTB4MjEKLSNkZWZpbmUgU01FTVNHX0FVVEhFTl9JTkQJCQkJMHgyMgotI2RlZmluZSBTTUVNU0dfQVNTT0NfQ0ZNCQkJCTB4MjMKLSNkZWZpbmUgU01FTVNHX0RFQVVUSEVOX0lORAkJCQkweDI0Ci0jZGVmaW5lIFNNRU1TR19ESVNBU1NPQ19JTkQJCQkJMHgyNQotLy8gZnJvbSBTQ0FOCi0jZGVmaW5lIFNNRU1TR19TQ0FOX0NGTQkJCQkJMHg0MQotI2RlZmluZSBTTUVNU0dfU1RBUlRfSUJTU19DRk0JCQkweDQyCi0vLyBmcm9tIE1UTywgZnVuY3Rpb24gY2FsbCB0byBzZXQgU01FIHBhcmFtZXRlcnMKLQotLy8gMHg2MH4weDZGIDogTVNHIGZyb20gVFgvUlgKLS8vI2RlZmluZSBTTUVNU0dfSUJTU19KT0lOX1VQREFURV9CU1NJRAkweDYxCi0jZGVmaW5lIFNNRU1TR19DT1VOVEVSTUVBU1VSRV9NSUNGQUlMX1RJTUVPVVQJCTB4NjIKLSNkZWZpbmUgU01FTVNHX0NPVU5URVJNRUFTVVJFX0JMT0NLX1RJTUVPVVQJMHg2MwotLy8gZnJvbSBST0FNSU5HCi0jZGVmaW5lIFNNRU1TR19IQU5ET1ZFUl9KT0lOX1JFUQkJMHg3MQotI2RlZmluZSBTTUVNU0dfRU5EX1JPQU1JTkcJCQkJMHg3MgotI2RlZmluZSBTTUVNU0dfU0NBTl9KT0lOX1JFUQkJCTB4NzMKLS8vIGZyb20gSVNSCi0jZGVmaW5lIFNNRU1TR19UU0ZfU1lOQ19JTkQJCQkJMHg4MQotLy8gZnJvbSBUaW1lT3V0Ci0jZGVmaW5lIFNNRU1TR19USU1FT1VUCQkJCQkweDkxCi0KLQotCi0jZGVmaW5lIE1BWF9QTUtJRF9BY2N1bnQgICAgICAgICAgICAgICAgMTYKLS8vQGFkZGVkIGJ5IHdzIDA0LzIyLzA1Ci0jZGVmaW5lIENpcGhlcl9EaXNhYmxlZCAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBDaXBoZXJfV2VwICAgICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQ2lwaGVyX1RraXAgICAgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIENpcGhlcl9DY21wICAgICAgICAgICAgICAgICAgICAgNAotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy9Db25zdGFudHMKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vL0dsb2JhbCBkYXRhIHN0cnVjdHVyZXMKLQotI2RlZmluZSBOVU1PRldFUEVOVFJJRVMgICAgIDY0Ci0KLXR5cGVkZWYgZW51bSBfV0VQS2V5TW9kZQotewotICAgIFdFUEtFWV9ESVNBQkxFRCA9IDAsCi0gICAgV0VQS0VZXzY0ICAgICAgID0gMSwKLSAgICBXRVBLRVlfMTI4ICAgICAgPSAyCi0KLX0gV0VQS0VZTU9ERSwgKnBXRVBLRVlNT0RFOwotCi0jaWZkZWYgX1dQQTJfCi0KLXR5cGVkZWYgc3RydWN0IF9CU1NJbmZvCi17Ci0gIHU4ICAgICAgICBQcmVBdXRoQnNzSURbNl07Ci0gIFBNS0lEICAgICAgICBwbWtpZF92YWx1ZTsKLX1CU1NJRF9JbmZvOwotCi10eXBlZGVmIHN0cnVjdCBfUE1LSURfVGFibGUgLy9hZGRlZCBieSB3cyAwNS8wNS8wNAotewotICAgdTMyICBMZW5ndGg7Ci0gICB1MzIgIEJTU0lESW5mb0NvdW50OwotICAgQlNTSURfSW5mbyBCU1NJREluZm9bMTZdOwotCi19IFBNS0lEX1RhYmxlOwotCi0jZW5kaWYgLy9lbmQgZGVmIF9XUEEyXwotCi0jZGVmaW5lIE1BWF9CQVNJQ19SQVRFX1NFVCAgICAgICAgICAxNQotI2RlZmluZSBNQVhfT1BUX1JBVEVfU0VUICAgICAgICAgICAgTUFYX0JBU0lDX1JBVEVfU0VUCi0KLQotdHlwZWRlZiBzdHJ1Y3QgX1NNRV9QQVJBTUVURVJTCi17Ci0gICAgdTE2CQkJCXdTdGF0ZTsKLQl1OAkJCQlib0RVVG1vZGU7Ci0JdTgJCQkJYkRlc2lyZWRQb3dlclNhdmU7Ci0KLQkvLyBTTUUgdGltZXIgYW5kIHRpbWVvdXQgdmFsdWUKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQotCXU4CQkJCWJvSW5UaW1lckhhbmRsZXI7Ci0JdTggCQkJCWJvQXV0aFJldHJ5QWN0aXZlOwotCXU4CQkJCXJlc2VydmVkXzBbMl07Ci0KLQl1MzIJCQkJQXV0aGVuUmV0cnlUaW1lclZhbDsJLy8gTk9URTogQXNzb2MgZG9uJ3QgZmFpbCB0aW1lb3V0Ci0JdTMyCQkJCUpvaW5GYWlsVGltZXJWYWw7CQkvLyAxMCpCZWFjb24tSW50ZXJ2YWwKLQotCS8vUmF0ZXMKLQl1OAkJCQlCU1NCYXNpY1JhdGVTZXRbKE1BWF9CQVNJQ19SQVRFX1NFVCArIDMpICYgfjB4MDMgXTsgICAgLy8gQlNTIGJhc2ljIHJhdGUgc2V0Ci0JdTgJCQkJT3BlcmF0aW9uYWxSYXRlU2V0WyhNQVhfT1BUX1JBVEVfU0VUICsgMykgJiB+MHgwMyBdOyAvLyBPcGVyYXRpb25hbCByYXRlIHNldAotCi0JdTgJCQkJTnVtT2ZCU1NCYXNpY1JhdGU7Ci0JdTgJCQkJTnVtT2ZPcGVyYXRpb25hbFJhdGU7Ci0JdTgJCQkJcmVzZXJ2ZWRfMVsyXTsKLQotCXUzMgkJCQlCYXNpY1JhdGVCaXRtYXA7Ci0JdTMyCQkJCU9wUmF0ZUJpdG1hcDsKLQotCS8vIFN5c3RlbSBwYXJhbWV0ZXJzIFNldCBieSBHVUkKLQkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXJ0IElCU1MgcGFyYW1ldGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vCi0JdTMyCQkJCWJvU3RhcnRJQlNTOwkJCS8vU3RhcnQgSUJTUyB0b2dnbGUKLQotCXUxNgkJCQl3QmVhY29uUGVyaW9kOwotCXUxNgkJCQl3QVRJTV9XaW5kb3c7Ci0KLQlDaGFuSW5mbwkJCUlic3NDaGFuOyAvLyAyQgkvL2NoYW5uZWwgc2V0dGluZyB3aGVuIHN0YXJ0IElCU1MKLQl1OAkJCQlyZXNlcnZlZF8yWzJdOwotCi0gICAgLy8gSm9pbiByZWxhdGVkCi0JdTE2CQkJCXdEZXNpcmVkSm9pbkJTUzsJCS8vIEJTUyBpbmRleCB3aGljaCBkZXNpcmUgdG8gam9pbgotCXU4CQkJCWJvSm9pblJlcTsJCQkJLy9Kb2luIHJlcXVlc3QgdG9nZ2xlCi0JdTgJCQkJYkRlc2lyZWRCU1NUeXBlOwkJLy9mb3IgSm9pbiByZXF1ZXN0Ci0KLSAgICB1MTYJCQkJd0NhcGFiaWxpdHlJbmZvOyAgICAgICAgLy8gVXNlZCB3aGVuIGludm9raW5nIHRoZSBNTE1FX0Fzc29jaWF0ZV9yZXF1ZXN0KCkuCi0JdTE2CQkJCXdOb25FUlBjYXBhYmlsaXR5SW5mbzsKLQotICAgIHN0cnVjdCBTU0lEX0VsZW1lbnQgc0Rlc2lyZWRTU0lEOyAvLyAzNCBCCi0JdTgJCQkJcmVzZXJ2ZWRfM1syXTsKLQotCXU4ICAgIAkJCWFiRGVzaXJlZEJTU0lEW01BQ19BRERSX0xFTkdUSCArIDJdOwotCi0JdTgJCQkJYkpvaW5TY2FuQ291bnQ7CQkJLy8gdGhlIHRpbWUgb2Ygc2Nhbi1qb2luIGFjdGlvbiBuZWVkIHRvIGRvCi0JdTgJCQkJYkRlc2lyZWRBdXRoTW9kZTsgICAgICAgLy8gQVVUSF9PUEVOX1NZU1RFTSBvciBBVVRIX1NIQVJFRF9LRVkKLQl1OAkJCQlyZXNlcnZlZF80WzJdOwotCi0gICAgLy8gRW5jcnlwdGlvbiBwYXJhbWV0ZXJzCi0JdTggICAgIAkJCV9kb3QxMVByaXZhY3lJbnZva2VkOwotICAgIHU4ICAgICAgICAgICAgIAlfZG90MTFQcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQ7Ci0JdTgJCQkJcmVzZXJ2ZWRfNVsyXTsKLQotICAgIC8vQCB3cyBhZGRlZAotICAgIHU4CQkJCURlc2lyZWRFbmNyeXB0OwotCXU4CQkJCWVuY3J5cHRfc3RhdHVzOwkvL0VOQ1JZUFRfRElTQUJMRSwgRU5DUllQVF9XRVAsIEVOQ1JZUFRfV0VQX05PS0VZLCBFTkNSWVBUX1RLSVAsIC4uLgotCXU4CQkJCWtleV9sZW5ndGg7Ci0JdTgJCQkJcGFpcndpc2Vfa2V5X29rOwotCi0JdTgJCQkJZ3JvdXBfa2V5X29rOwotICAgIHU4CQkJCXdwYV9vazsgICAgICAgICAgICAgLy8gaW5kaWNhdGUgdGhlIGNvbnRyb2wgcG9ydCBvZiA4MDIuMXggaXMgb3BlbiBvciBjbG9zZQotCXU4CQkJCXBhaXJ3aXNlX2tleV90eXBlOwotCXU4CQkJCWdyb3VwX2tleV90eXBlOwotCi0gICAgdTMyICAgICAgICAgICAgICAgX2RvdDExV0VQRGVmYXVsdEtleUlEOwotCi0JdTggICAgICAgICAgICAgIAl0eF9taWNfa2V5WzhdOyAgICAgIC8vIFRPRE86IDA2Mjcga2V2aW4tVEtJUAotCXU4ICAgICAgICAgICAgICAJcnhfbWljX2tleVs4XTsgICAgICAvLyBUT0RPOiAwNjI3IGtldmluLVRLSVAKLQl1OAkJCQlncm91cF90eF9taWNfa2V5WzhdOwotCXU4CQkJCWdyb3VwX3J4X21pY19rZXlbOF07Ci0KLS8vCSNpZmRlZiBfV1BBXwotCXU4CQkJCUFzc29jUmVxVmFySUVbMjAwXTsKLQl1OAkJCQlBc3NvY1Jlc3BWYXJJRVsyMDBdOwotCi0JdTE2CQkJCUFzc29jUmVxVmFyTGVuOwotCXUxNgkJCQlBc3NvY1Jlc3BWYXJMZW47Ci0JdTgJCQkJYm9SZWFzc29jOwkJCQkvL3VzZSBhc3NvYy4gb3IgcmVhc3NvYy4KLQl1OAkJCQlyZXNlcnZlZF82WzNdOwotCXUxNgkJCQlBc3NvY1Jlc3BDYXBhYmlsaXR5OwotCXUxNgkJCQlBc3NvY1Jlc3BTdGF0dXM7Ci0vLwkjZW5kaWYKLQotCSNpZmRlZiBfV1BBMl8KLSAgICB1OCAgICAgICAgICAgICAgIFBta0lkVGFibGVbMjU2XTsKLSAgICB1MzIgICAgICAgICAgICAgICBQbWtpZFRhYmxlSW5kZXg7Ci0JI2VuZGlmIC8vZW5kIGRlZiBfV1BBMl8KLQotfSBTTUVfUEFSQU1FVEVSUywgKlBTTUVfUEFSQU1FVEVSUzsKLQotI2RlZmluZSBwc1NNRQkJCSgmKGFkYXB0ZXItPnNTbWVQYXJhKSkKLQotI2RlZmluZSB3U01FR2V0Q3VycmVudFNUQVN0YXRlKGFkYXB0ZXIpCQkoKHUxNikoYWRhcHRlciktPnNTbWVQYXJhLndTdGF0ZSkKLQotCi0KLS8vKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKLS8vCVNtZU1vZHVsZS5oCi0vLwkJRGVmaW5lIHRoZSByZWxhdGVkIGRlZmluaXRpb25zIG9mIFNNRSBtb2R1bGUKLS8vCWhpc3RvcnkgLS0gMDEvMTQvMDMnIGNyZWF0ZWQKLS8vCi0vLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCi0KLS8vRGVmaW5lIHRoZSBzdGF0ZSBvZiBTTUUgbW9kdWxlCi0jZGVmaW5lIERJU0FCTEVECQkJCQkJMAotI2RlZmluZSBJTklUX1NDQU4JCQkJCQkxCi0jZGVmaW5lIFNDQU5fUkVBRFkJCQkJCQkyCi0jZGVmaW5lIFNUQVJUX0lCU1MJCQkJCQkzCi0jZGVmaW5lIEpPSU5fUEVORElORwkJCQkJNAotI2RlZmluZSBKT0lOX0NGTQkJCQkJCTUKLSNkZWZpbmUgQVVUSEVOVElDQVRFX1BFTkRJTkcJCQk2Ci0jZGVmaW5lIEFVVEhFTlRJQ0FURUQJCQkJCTcKLSNkZWZpbmUgQ09OTkVDVEVECQkJCQkJOAotLy8jZGVmaW5lIEVBUF9TVEFSVElORwkJCQkJOQotLy8jZGVmaW5lIEVBUE9MX0FVVEhFTl9QRU5ESU5HCQkJMTAKLS8vI2RlZmluZSBTRUNVUkVfQ09OTkVDVEVECQkJCTExCi0KLQotLy8gU3RhdGljIGZ1bmN0aW9uCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNV92ZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVfdmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MzNiYzAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNV92ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8vCi0vLyBPbmx5IGRlZmluZSBvbmUgb2YgZm9sbG93Ci0vLwotCi0jaWZkZWYgV0JfV0lOCi0JI2RlZmluZSBWRVJfRklMRVZFUlNJT04gICAgICAgICAgICAgMSwwMCw0NywwMAotCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OX1NUUiAgICAgICAgICIxLjAwLjQ3LjAwIgotCSNkZWZpbmUgV0IzMl9EUklWRVJfTUFKT1JfVkVSU0lPTiAgIDB4MDEwMAotCSNkZWZpbmUgV0IzMl9EUklWRVJfTUlOT1JfVkVSU0lPTiAgIDB4NDcwMAotI2VuZGlmCi0KLSNpZmRlZiBXQl9DRQotCSNkZWZpbmUgVkVSX0ZJTEVWRVJTSU9OICAgICAgICAgICAgIDIsMDAsNDcsMDAKLQkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTl9TVFIgICAgICAgICAiMi4wMC40Ny4wMCIKLQkjZGVmaW5lIFdCMzJfRFJJVkVSX01BSk9SX1ZFUlNJT04gICAweDAyMDAKLQkjZGVmaW5lIFdCMzJfRFJJVkVSX01JTk9SX1ZFUlNJT04gICAweDQ3MDAKLSNlbmRpZgotCi0jaWZkZWYgV0JfTElOVVgKLQkjZGVmaW5lIFZFUl9GSUxFVkVSU0lPTiAgICAgICAgICAgICAzLDAwLDQ3LDAwCi0JI2RlZmluZSBWRVJfRklMRVZFUlNJT05fU1RSICAgICAgICAgIjMuMDAuNDcuMDAiCi0JI2RlZmluZSBXQjMyX0RSSVZFUl9NQUpPUl9WRVJTSU9OICAgMHgwMzAwCi0JI2RlZmluZSBXQjMyX0RSSVZFUl9NSU5PUl9WRVJTSU9OICAgMHg0NzAwCi0jZW5kaWYKLQotCi0KLQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWcuYyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWcuYwppbmRleCBjNzRiM2ZkLi5mNTYwOGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cmVnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJlZy5jCkBAIC0zLDcgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKLWV4dGVybiB2b2lkIHBoeV9jYWxpYnJhdGlvbl93aW5ib25kKGh3X2RhdGFfdCAqcGh3X2RhdGEsIHUzMiBmcmVxdWVuY3kpOworZXh0ZXJuIHZvaWQgcGh5X2NhbGlicmF0aW9uX3dpbmJvbmQoc3RydWN0IGh3X2RhdGEgKnBod19kYXRhLCB1MzIgZnJlcXVlbmN5KTsKIAogLy8gdHJ1ZSAgOiByZWFkIGNvbW1hbmQgcHJvY2VzcyBzdWNjZXNzZnVsbHkKIC8vIGZhbHNlIDogcmVnaXN0ZXIgbm90IHN1cHBvcnQKQEAgLTEzLDcgKzEzLDcgQEAKIC8vIEZsYWcgOiBBVVRPX0lOQ1JFTUVOVCAtIFJlZ2lzdGVyTm8gd2lsbCBhdXRvIGluY3JlbWVudCA0CiAvLwkJICBOT19JTkNSRU1FTlQgLSBGdW5jdGlvbiB3aWxsIHdyaXRlIGRhdGEgaW50byB0aGUgc2FtZSByZWdpc3RlcgogdW5zaWduZWQgY2hhcgotV2IzNVJlZ19CdXJzdFdyaXRlKHBod19kYXRhX3QgcEh3RGF0YSwgdTE2IFJlZ2lzdGVyTm8sIHUzMiAqIHBSZWdpc3RlckRhdGEsIHU4IE51bWJlck9mRGF0YSwgdTggRmxhZykKK1diMzVSZWdfQnVyc3RXcml0ZShzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCB1MzIgKiBwUmVnaXN0ZXJEYXRhLCB1OCBOdW1iZXJPZkRhdGEsIHU4IEZsYWcpCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXN0cnVjdCB1cmIJKnVyYiA9IE5VTEw7CkBAIC03Myw3ICs3Myw3IEBACiB9CiAKIHZvaWQKLVdiMzVSZWdfVXBkYXRlKHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUpCitXYjM1UmVnX1VwZGF0ZShzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAlzd2l0Y2ggKFJlZ2lzdGVyTm8pIHsKQEAgLTExOCw3ICsxMTgsNyBAQAogLy8gdHJ1ZSAgOiByZWFkIGNvbW1hbmQgcHJvY2VzcyBzdWNjZXNzZnVsbHkKIC8vIGZhbHNlIDogcmVnaXN0ZXIgbm90IHN1cHBvcnQKIHVuc2lnbmVkIGNoYXIKLVdiMzVSZWdfV3JpdGVTeW5jKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApCitXYjM1UmVnX1dyaXRlU3luYyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAlpbnQgcmV0ID0gLTE7CkBAIC0xNDksNyArMTQ5LDcgQEAKIAogCWlmIChyZXQgPCAwKSB7CiAJCSNpZmRlZiBfUEVfUkVHX0RVTVBfCi0JCVdCREVCVUcoKCJFUDAgV3JpdGUgcmVnaXN0ZXIgdXNiIG1lc3NhZ2Ugc2VuZGluZyBlcnJvclxuIikpOworCQlwcmludGsoIkVQMCBXcml0ZSByZWdpc3RlciB1c2IgbWVzc2FnZSBzZW5kaW5nIGVycm9yXG4iKTsKIAkJI2VuZGlmCiAKIAkJcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgPSAxOyAvLyAyMDA2MDcwNC4yCkBAIC0xNjIsNyArMTYyLDcgQEAKIC8vIHRydWUgIDogcmVhZCBjb21tYW5kIHByb2Nlc3Mgc3VjY2Vzc2Z1bGx5CiAvLyBmYWxzZSA6IHJlZ2lzdGVyIG5vdCBzdXBwb3J0CiB1bnNpZ25lZCBjaGFyCi1XYjM1UmVnX1dyaXRlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApCitXYjM1UmVnX1dyaXRlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAvLyB0cnVlICA6IHJlYWQgY29tbWFuZCBwcm9jZXNzIHN1Y2Nlc3NmdWxseQogLy8gZmFsc2UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAogdW5zaWduZWQgY2hhcgotV2IzNVJlZ19Xcml0ZVdpdGhDYWxsYmFja1ZhbHVlKCBwaHdfZGF0YV90IHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCB1MzIgUmVnaXN0ZXJWYWx1ZSwKK1diMzVSZWdfV3JpdGVXaXRoQ2FsbGJhY2tWYWx1ZSggc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1MTYgUmVnaXN0ZXJObywgdTMyIFJlZ2lzdGVyVmFsdWUsCiAJCQkJczggKnBWYWx1ZSwgczggTGVuKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKQEAgLTI4MSw3ICsyODEsNyBAQAogLy8gZmFsc2UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAogLy8gcFJlZ2lzdGVyVmFsdWUgOiBJdCBtdXN0IGJlIGEgcmVzaWRlbnQgYnVmZmVyIGR1ZSB0byBhc3luY2hyb25vdXMgcmVhZCByZWdpc3Rlci4KIHVuc2lnbmVkIGNoYXIKLVdiMzVSZWdfUmVhZFN5bmMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgICB1MzIgKiBwUmVnaXN0ZXJWYWx1ZSApCitXYjM1UmVnX1JlYWRTeW5jKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAl1MzIgKglwbHRtcCA9IHBSZWdpc3RlclZhbHVlOwpAQCAtMzE2LDcgKzMxNiw3IEBACiAKIAlpZiAocmV0IDwgMCkgewogCQkjaWZkZWYgX1BFX1JFR19EVU1QXwotCQlXQkRFQlVHKCgiRVAwIFJlYWQgcmVnaXN0ZXIgdXNiIG1lc3NhZ2Ugc2VuZGluZyBlcnJvclxuIikpOworCQlwcmludGsoIkVQMCBSZWFkIHJlZ2lzdGVyIHVzYiBtZXNzYWdlIHNlbmRpbmcgZXJyb3JcbiIpOwogCQkjZW5kaWYKIAogCQlwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSA9IDE7IC8vIDIwMDYwNzA0LjIKQEAgLTMzMCw3ICszMzAsNyBAQAogLy8gZmFsc2UgOiByZWdpc3RlciBub3Qgc3VwcG9ydAogLy8gcFJlZ2lzdGVyVmFsdWUgOiBJdCBtdXN0IGJlIGEgcmVzaWRlbnQgYnVmZmVyIGR1ZSB0byBhc3luY2hyb25vdXMgcmVhZCByZWdpc3Rlci4KIHVuc2lnbmVkIGNoYXIKLVdiMzVSZWdfUmVhZChwaHdfZGF0YV90IHBId0RhdGEsIHUxNiBSZWdpc3Rlck5vLCAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKQorV2IzNVJlZ19SZWFkKHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTE2IFJlZ2lzdGVyTm8sICB1MzIgKiBwUmVnaXN0ZXJWYWx1ZSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKiBkcjsKQEAgLTM4NSw3ICszODUsNyBAQAogCiAKIHZvaWQKLVdiMzVSZWdfRVAwVk1fc3RhcnQoICBwaHdfZGF0YV90IHBId0RhdGEgKQorV2IzNVJlZ19FUDBWTV9zdGFydCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCkBAIC0zOTcsNyArMzk3LDcgQEAKIH0KIAogdm9pZAotV2IzNVJlZ19FUDBWTShwaHdfZGF0YV90IHBId0RhdGEgKQorV2IzNVJlZ19FUDBWTShzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAlzdHJ1Y3QgdXJiCSp1cmI7CkBAIC00NDEsNyArNDQxLDcgQEAKIAogCWlmIChyZXQgPCAwKSB7CiAjaWZkZWYgX1BFX1JFR19EVU1QXwotCQlXQkRFQlVHKCgiRVAwIElycCBzZW5kaW5nIGVycm9yXG4iKSk7CisJCXByaW50aygiRVAwIElycCBzZW5kaW5nIGVycm9yXG4iKTsKICNlbmRpZgogCQlnb3RvIGNsZWFudXA7CiAJfQpAQCAtNDU3LDcgKzQ1Nyw3IEBACiB2b2lkCiBXYjM1UmVnX0VQMFZNX2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKIHsKLQlwaHdfZGF0YV90ICBwSHdEYXRhID0gKHBod19kYXRhX3QpdXJiLT5jb250ZXh0OworCXN0cnVjdCBod19kYXRhICogIHBId0RhdGEgPSAoc3RydWN0IGh3X2RhdGEgKil1cmItPmNvbnRleHQ7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXN0cnVjdCB3YjM1X3JlZ19xdWV1ZSAqcmVnX3F1ZXVlOwogCkBAIC00ODAsOCArNDgwLDcgQEAKIAogCQlpZiAocmVnLT5FUDBWTV9zdGF0dXMpIHsKICNpZmRlZiBfUEVfUkVHX0RVTVBfCi0JCQlXQkRFQlVHKCgiRVAwIElvQ29tcGxldGVSb3V0aW5lIHJldHVybiBlcnJvclxuIikpOwotCQkJRGVidWdVc2JkU3RhdHVzSW5mb3JtYXRpb24oIHJlZy0+RVAwVk1fc3RhdHVzICk7CisJCQlwcmludGsoIkVQMCBJb0NvbXBsZXRlUm91dGluZSByZXR1cm4gZXJyb3JcbiIpOwogI2VuZGlmCiAJCQlyZWctPkVQMHZtX3N0YXRlID0gVk1fU1RPUDsKIAkJCXBId0RhdGEtPlN1cnByaXNlUmVtb3ZlID0gMTsKQEAgLTUwMCw3ICs0OTksNyBAQAogCiAKIHZvaWQKLVdiMzVSZWdfZGVzdHJveShwaHdfZGF0YV90IHBId0RhdGEpCitXYjM1UmVnX2Rlc3Ryb3koc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIAlzdHJ1Y3QgdXJiCSp1cmI7CkBAIC01MzAsNyArNTI5LDcgQEAKIAkJCWtmcmVlKHJlZ19xdWV1ZSk7CiAJCX0gZWxzZSB7CiAJCQkjaWZkZWYgX1BFX1JFR19EVU1QXwotCQkJV0JERUJVRygoIkVQMCBxdWV1ZSByZWxlYXNlIGVycm9yXG4iKSk7CisJCQlwcmludGsoIkVQMCBxdWV1ZSByZWxlYXNlIGVycm9yXG4iKTsKIAkJCSNlbmRpZgogCQl9CiAJCXNwaW5fbG9ja19pcnEoICZyZWctPkVQMFZNX3NwaW5fbG9jayApOwpAQCAtNTQzLDcgKzU0Miw3IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gVGhlIGZ1bmN0aW9uIGNhbiBiZSBydW4gaW4gcGFzc2l2ZS1sZXZlbCBvbmx5LgogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXVuc2lnbmVkIGNoYXIgV2IzNVJlZ19pbml0aWFsKHBod19kYXRhX3QgcEh3RGF0YSkKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19pbml0aWFsKHN0cnVjdCBod19kYXRhICogcEh3RGF0YSkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZz0mcEh3RGF0YS0+cmVnOwogCXUzMiBsdG1wOwpAQCAtNTk5LDcgKzU5OCw3IEBACiAJV2IzNVJlZ19SZWFkU3luYyggcEh3RGF0YSwgMHgwM2I0LCAmUmVnaW9uX1NjYW5JbnRlcnZhbCApOwogCiAJLy8gVXBkYXRlIEV0aGVybmV0IGFkZHJlc3MKLQltZW1jcHkoIHBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzLCBwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzLCBFVEhfTEVOR1RIX09GX0FERFJFU1MgKTsKKwltZW1jcHkoIHBId0RhdGEtPkN1cnJlbnRNYWNBZGRyZXNzLCBwSHdEYXRhLT5QZXJtYW5lbnRNYWNBZGRyZXNzLCBFVEhfQUxFTiApOwogCiAJLy8gVXBkYXRlIHNvZnR3YXJlIHZhcmlhYmxlCiAJcEh3RGF0YS0+U29mdHdhcmVTZXQgPSAodTE2KShTb2Z0d2FyZVNldCAmIDB4ZmZmZik7CkBAIC03MjMsNyArNzIyLDcgQEAKIAlyZXR1cm4gZHdEYXRhOwogfQogCi12b2lkIFdiMzVSZWdfcGh5X2NhbGlicmF0aW9uKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3ZvaWQgV2IzNVJlZ19waHlfY2FsaWJyYXRpb24oICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXUzMiBCQjNjLCBCQjU0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cmVnX2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWdfZi5oCmluZGV4IGQ5NzIxNWEuLjMwZjViNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWdfZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWdfZi5oCkBAIC02LDQ3ICs2LDQ3IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gSW50ZXJmYWNlIGZ1bmN0aW9uIGRlY2xhcmUKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci11bnNpZ25lZCBjaGFyIFdiMzVSZWdfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBVeHhfcG93ZXJfb25fcHJvY2VkdXJlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIFV4eF9wb3dlcl9vZmZfcHJvY2VkdXJlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIFV4eF9SZWFkRXRoZXJuZXRBZGRyZXNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIER4eF9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIE14eF9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIFJGU3ludGhlc2l6ZXJfaW5pdGlhbCggIHBod19kYXRhX3QgcEh3RGF0YSApOwotLy92b2lkIFJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHM4IENoYW5uZWwgKTsKLXZvaWQgUkZTeW50aGVzaXplcl9Td2l0Y2hpbmdDaGFubmVsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCApOwotdm9pZCBCQlByb2Nlc3Nvcl9pbml0aWFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIEJCUHJvY2Vzc29yX1JhdGVDaGFuZ2luZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IHJhdGUgKTsgLy8gMjAwNjA2MTMuMQotLy92b2lkIFJGX1JhdGVDaGFuZ2luZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IHJhdGUgKTsgLy8gMjAwNjA2MjYuNS5jIEFkZAotdTggUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggUG93ZXJJbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfMjRQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjhfNTBQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjdfMjRQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjdfNTBQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRNYXhpbTI4MjVQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdTggUkZTeW50aGVzaXplcl9TZXRBaXJvaGEyMjMwUG93ZXIoICBwaHdfZGF0YV90LCAgdTggaW5kZXggKTsKLXU4IFJGU3ludGhlc2l6ZXJfU2V0QWlyb2hhNzIzMFBvd2VyKCAgcGh3X2RhdGFfdCwgIHU4IGluZGV4ICk7Ci11OCBSRlN5bnRoZXNpemVyX1NldFdpbmJvbmQyNDJQb3dlciggIHBod19kYXRhX3QsICB1OCBpbmRleCApOwotdm9pZCBHZXRUeFZnYUZyb21FRVBST00oICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgRUVQUk9NVHhWZ2FBZGp1c3QoICBwaHdfZGF0YV90IHBId0RhdGEgKTsgLy8gMjAwNjA2MTkuNSBBZGQKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19pbml0aWFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIFV4eF9wb3dlcl9vbl9wcm9jZWR1cmUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgVXh4X3Bvd2VyX29mZl9wcm9jZWR1cmUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgVXh4X1JlYWRFdGhlcm5ldEFkZHJlc3MoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgRHh4X2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgTXh4X2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgUkZTeW50aGVzaXplcl9pbml0aWFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CisvL3ZvaWQgUkZTeW50aGVzaXplcl9Td2l0Y2hpbmdDaGFubmVsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgczggQ2hhbm5lbCApOwordm9pZCBSRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsICk7Cit2b2lkIEJCUHJvY2Vzc29yX2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgQkJQcm9jZXNzb3JfUmF0ZUNoYW5naW5nKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggcmF0ZSApOyAvLyAyMDA2MDYxMy4xCisvL3ZvaWQgUkZfUmF0ZUNoYW5naW5nKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggcmF0ZSApOyAvLyAyMDA2MDYyNi41LmMgQWRkCit1OCBSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBQb3dlckluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF8yNFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyOF81MFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN18yNFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyN181MFBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldE1heGltMjgyNVBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit1OCBSRlN5bnRoZXNpemVyX1NldEFpcm9oYTIyMzBQb3dlciggIHN0cnVjdCBod19kYXRhICosICB1OCBpbmRleCApOwordTggUkZTeW50aGVzaXplcl9TZXRBaXJvaGE3MjMwUG93ZXIoICBzdHJ1Y3QgaHdfZGF0YSAqLCAgdTggaW5kZXggKTsKK3U4IFJGU3ludGhlc2l6ZXJfU2V0V2luYm9uZDI0MlBvd2VyKCAgc3RydWN0IGh3X2RhdGEgKiwgIHU4IGluZGV4ICk7Cit2b2lkIEdldFR4VmdhRnJvbUVFUFJPTSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBFRVBST01UeFZnYUFkanVzdCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOyAvLyAyMDA2MDYxOS41IEFkZAogCiAjZGVmaW5lIFJGV3JpdGVDb250cm9sRGF0YSggX0EsIF9WICkgV2IzNVJlZ19Xcml0ZSggX0EsIDB4MDg2NCwgX1YgKQogCi12b2lkIFdiMzVSZWdfZGVzdHJveSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1UmVnX2Rlc3Ryb3koICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKIAotdW5zaWduZWQgY2hhciBXYjM1UmVnX1JlYWQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgICB1MzIgKiBwUmVnaXN0ZXJWYWx1ZSApOwotdW5zaWduZWQgY2hhciBXYjM1UmVnX1JlYWRTeW5jKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKTsKLXVuc2lnbmVkIGNoYXIgV2IzNVJlZ19Xcml0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKTsKLXVuc2lnbmVkIGNoYXIgV2IzNVJlZ19Xcml0ZVN5bmMoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Ci11bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGVXaXRoQ2FsbGJhY2tWYWx1ZSggIHBod19kYXRhX3QgcEh3RGF0YSwKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19SZWFkKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICAgdTMyICogcFJlZ2lzdGVyVmFsdWUgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19SZWFkU3luYyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgIHUzMiAqIHBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIFdiMzVSZWdfV3JpdGVTeW5jKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgUmVnaXN0ZXJWYWx1ZSApOwordW5zaWduZWQgY2hhciBXYjM1UmVnX1dyaXRlV2l0aENhbGxiYWNrVmFsdWUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsCiAJCQkJCQkJCSB1MTYgUmVnaXN0ZXJObywKIAkJCQkJCQkJIHUzMiBSZWdpc3RlclZhbHVlLAogCQkJCQkJCQkgczggKnBWYWx1ZSwKIAkJCQkJCQkJIHM4IExlbik7Ci11bnNpZ25lZCBjaGFyIFdiMzVSZWdfQnVyc3RXcml0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyICogcFJlZ2lzdGVyRGF0YSwgIHU4IE51bWJlck9mRGF0YSwgIHU4IEZsYWcgKTsKK3Vuc2lnbmVkIGNoYXIgV2IzNVJlZ19CdXJzdFdyaXRlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IFJlZ2lzdGVyTm8sICB1MzIgKiBwUmVnaXN0ZXJEYXRhLCAgdTggTnVtYmVyT2ZEYXRhLCAgdTggRmxhZyApOwogCi12b2lkIFdiMzVSZWdfRVAwVk0oICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgV2IzNVJlZ19FUDBWTV9zdGFydCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1UmVnX0VQMFZNKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIFdiMzVSZWdfRVAwVk1fc3RhcnQoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKIHZvaWQgV2IzNVJlZ19FUDBWTV9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpOwogCiB1MzIgQml0UmV2ZXJzZSggdTMyIGR3RGF0YSwgdTMyIERhdGFMZW5ndGgpOwpAQCAtNTQsOCArNTQsOCBAQAogdm9pZCBDYXJkR2V0TXVsdGljYXN0Qml0KCAgIHU4IEFkZHJlc3NbTUFDX0FERFJfTEVOR1RIXSwgIHU4ICpCeXRlLCAgdTggKlZhbHVlICk7CiB1MzIgQ2FyZENvbXB1dGVDcmMoICB1OCAqIEJ1ZmZlciwgIHUzMiBMZW5ndGggKTsKIAotdm9pZCBXYjM1UmVnX3BoeV9jYWxpYnJhdGlvbiggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBXYjM1UmVnX1VwZGF0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBSZWdpc3Rlck5vLCAgdTMyIFJlZ2lzdGVyVmFsdWUgKTsKLXVuc2lnbmVkIGNoYXIgYWRqdXN0X1RYVkdBX2Zvcl9pcV9tYWcoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgV2IzNVJlZ19waHlfY2FsaWJyYXRpb24oICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQgV2IzNVJlZ19VcGRhdGUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgUmVnaXN0ZXJObywgIHUzMiBSZWdpc3RlclZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIGFkanVzdF9UWFZHQV9mb3JfaXFfbWFnKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnguYwppbmRleCA3ZjhiNmQ3Li4zZThjZjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnguYwpAQCAtODIsOSArODIsOSBAQAogc3RhdGljIHUxNiBXYjM1UnhfaW5kaWNhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JcGh3X2RhdGFfdCBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7CisJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7CiAJREVTQ1JJUFRPUglSeERlczsKLQlQV0IzNVJYCXBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCXN0cnVjdCB3YjM1X3J4ICpwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKIAl1OCAqCQlwUnhCdWZmZXJBZGRyZXNzOwogCXUxNgkJUGFja2V0U2l6ZTsKIAl1MTYJCXN0bXAsIEJ1ZmZlclNpemUsIHN0bXAyID0gMDsKQEAgLTExOCw3ICsxMTgsNyBAQAogCQkJLy8gQmFzaWMgY2hlY2sgZm9yIFJ4IGxlbmd0aC4gSXMgbGVuZ3RoIHZhbGlkPwogCQkJaWYgKFBhY2tldFNpemUgPiBNQVhfUEFDS0VUX1NJWkUpIHsKIAkJCQkjaWZkZWYgX1BFX1JYX0RVTVBfCi0JCQkJV0JERUJVRygoIlNlcmlvdXMgRVJST1IgOiBSeCBkYXRhIHNpemUgdG9vIGxvbmcsIHNpemUgPSVkXG4iLCBQYWNrZXRTaXplKSk7CisJCQkJcHJpbnRrKCJTZXJpb3VzIEVSUk9SIDogUnggZGF0YSBzaXplIHRvbyBsb25nLCBzaXplID0lZFxuIiwgUGFja2V0U2l6ZSk7CiAJCQkJI2VuZGlmCiAKIAkJCQlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1NUT1A7CkBAIC0xNjEsOCArMTYxLDggQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlwaHdfZGF0YV90IHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKLQlQV0IzNVJYCQlwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwlzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKKwlzdHJ1Y3Qgd2IzNV9yeCAqcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CiAJdTggKgkJcFJ4QnVmZmVyQWRkcmVzczsKIAl1MzIJCVNpemVDaGVjazsKIAl1MTYJCUJ1bGtMZW5ndGg7CkBAIC0xOTQsOCArMTk0LDcgQEAKIAkvLyBUaGUgVVJCIGlzIGNvbXBsZXRlZCwgY2hlY2sgdGhlIHJlc3VsdAogCWlmIChwV2IzNVJ4LT5FUDNWTV9zdGF0dXMgIT0gMCkgewogCQkjaWZkZWYgX1BFX1VTQl9TVEFURV9EVU1QXwotCQlXQkRFQlVHKCgiRVAzIElvQ29tcGxldGVSb3V0aW5lIHJldHVybiBlcnJvclxuIikpOwotCQlEZWJ1Z1VzYmRTdGF0dXNJbmZvcm1hdGlvbiggcFdiMzVSeC0+RVAzVk1fc3RhdHVzICk7CisJCXByaW50aygiRVAzIElvQ29tcGxldGVSb3V0aW5lIHJldHVybiBlcnJvclxuIik7CiAJCSNlbmRpZgogCQlwV2IzNVJ4LT5FUDN2bV9zdGF0ZSA9IFZNX1NUT1A7CiAJCWdvdG8gZXJyb3I7CkBAIC0yMzksOCArMjM4LDggQEAKIHN0YXRpYyB2b2lkIFdiMzVSeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlwaHdfZGF0YV90IHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKLQlQV0IzNVJYCXBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCXN0cnVjdCBod19kYXRhICogcEh3RGF0YSA9ICZwcml2LT5zSHdEYXRhOworCXN0cnVjdCB3YjM1X3J4ICpwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKIAl1OCAqCXBSeEJ1ZmZlckFkZHJlc3M7CiAJc3RydWN0IHVyYiAqdXJiID0gcFdiMzVSeC0+UnhVcmI7CiAJaW50CXJldHY7CkBAIC0yNjAsNyArMjU5LDcgQEAKIAlpZiAoIXBXYjM1UngtPlJ4T3duZXJbUnhCdWZmZXJJZF0pIHsKIAkJLy8gSXQncyBpbXBvc3NpYmxlIHRvIHJ1biBoZXJlLgogCQkjaWZkZWYgX1BFX1JYX0RVTVBfCi0JCVdCREVCVUcoKCJSeCBkcml2ZXIgZmlmbyB1bmF2YWlsYWJsZVxuIikpOworCQlwcmludGsoIlJ4IGRyaXZlciBmaWZvIHVuYXZhaWxhYmxlXG4iKTsKIAkJI2VuZGlmCiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMzAyLDggKzMwMSw4IEBACiB2b2lkIFdiMzVSeF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlwaHdfZGF0YV90IHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKLQlQV0IzNVJYIHBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCXN0cnVjdCBod19kYXRhICogcEh3RGF0YSA9ICZwcml2LT5zSHdEYXRhOworCXN0cnVjdCB3YjM1X3J4ICpwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKIAogCS8vIEFsbG93IG9ubHkgb25lIHRocmVhZCB0byBydW4gaW50byB0aGUgV2IzNVJ4KCkgZnVuY3Rpb24KIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBXYjM1UngtPlJ4RmlyZUNvdW50ZXIpID09IDEpIHsKQEAgLTMxNCw5ICszMTMsOSBAQAogfQogCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyB2b2lkIFdiMzVSeF9yZXNldF9kZXNjcmlwdG9yKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3N0YXRpYyB2b2lkIFdiMzVSeF9yZXNldF9kZXNjcmlwdG9yKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICkKIHsKLQlQV0IzNVJYIHBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OworCXN0cnVjdCB3YjM1X3J4ICpwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKIAl1MzIJaTsKIAogCXBXYjM1UngtPkJ5dGVSZWNlaXZlZCA9IDA7CkBAIC0zMzAsOSArMzI5LDkgQEAKIAkJcFdiMzVSeC0+UnhPd25lcltpXSA9IDE7CiB9CiAKLXVuc2lnbmVkIGNoYXIgV2IzNVJ4X2luaXRpYWwocGh3X2RhdGFfdCBwSHdEYXRhKQordW5zaWduZWQgY2hhciBXYjM1UnhfaW5pdGlhbChzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7Ci0JUFdCMzVSWCBwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwlzdHJ1Y3Qgd2IzNV9yeCAqcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CiAKIAkvLyBJbml0aWFsIHRoZSBCdWZmZXIgUXVldWUKIAlXYjM1UnhfcmVzZXRfZGVzY3JpcHRvciggcEh3RGF0YSApOwpAQCAtMzQxLDIzICszNDAsMjMgQEAKIAlyZXR1cm4gKCEhcFdiMzVSeC0+UnhVcmIpOwogfQogCi12b2lkIFdiMzVSeF9zdG9wKHBod19kYXRhX3QgcEh3RGF0YSkKK3ZvaWQgV2IzNVJ4X3N0b3Aoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewotCVBXQjM1UlggcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CisJc3RydWN0IHdiMzVfcnggKnBXYjM1UnggPSAmcEh3RGF0YS0+V2IzNVJ4OwogCiAJLy8gQ2FuY2VsaW5nIHRoZSBJcnAgaWYgYWxyZWFkeSBzZW5kcyBpdCBvdXQuCiAJaWYgKHBXYjM1UngtPkVQM3ZtX3N0YXRlID09IFZNX1JVTk5JTkcpIHsKIAkJdXNiX3VubGlua191cmIoIHBXYjM1UngtPlJ4VXJiICk7IC8vIE9ubHkgdXNlIHVubGluaywgbGV0IFdiMzVSeF9kZXN0cm95IHRvIGZyZWUgdGhlbQogCQkjaWZkZWYgX1BFX1JYX0RVTVBfCi0JCVdCREVCVUcoKCJFUDMgUnggc3RvcFxuIikpOworCQlwcmludGsoIkVQMyBSeCBzdG9wXG4iKTsKIAkJI2VuZGlmCiAJfQogfQogCiAvLyBOZWVkcyBwcm9jZXNzIGNvbnRleHQKLXZvaWQgV2IzNVJ4X2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQordm9pZCBXYjM1UnhfZGVzdHJveShzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7Ci0JUFdCMzVSWCBwV2IzNVJ4ID0gJnBId0RhdGEtPldiMzVSeDsKKwlzdHJ1Y3Qgd2IzNV9yeCAqcFdiMzVSeCA9ICZwSHdEYXRhLT5XYjM1Ung7CiAKIAlkbyB7CiAJCW1zbGVlcCgxMCk7IC8vIERlbGF5IGZvciB3YWl0aW5nIGZ1bmN0aW9uIGVudGVyIDk0MDYyMy4xLmEKQEAgLTM2Nyw3ICszNjYsNyBAQAogCWlmIChwV2IzNVJ4LT5SeFVyYikKIAkJdXNiX2ZyZWVfdXJiKCBwV2IzNVJ4LT5SeFVyYiApOwogCSNpZmRlZiBfUEVfUlhfRFVNUF8KLQlXQkRFQlVHKCgiV2IzNVJ4X2Rlc3Ryb3kgT0tcbiIpKTsKKwlwcmludGsoIldiMzVSeF9kZXN0cm95IE9LXG4iKTsKIAkjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4X2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyeF9mLmgKaW5kZXggZDk5MzA0MS4uOThhY2NlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4X2YuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnhfZi5oCkBAIC03LDkgKzcsOSBAQAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdW5zaWduZWQgY2hhcgkJV2IzNVJ4X2luaXRpYWwoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQJCVdiMzVSeF9kZXN0cm95KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkCQlXYjM1Unhfc3RvcCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordW5zaWduZWQgY2hhcgkJV2IzNVJ4X2luaXRpYWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3ZvaWQJCVdiMzVSeF9kZXN0cm95KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkCQlXYjM1Unhfc3RvcCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwogdm9pZAkJV2IzNVJ4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnhfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXJ4X3MuaAppbmRleCBmMTgzNTBiLi40YjAzMjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cnhfcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyeF9zLmgKQEAgLTE1LDggKzE1LDcgQEAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBJbnRlcm5hbCB2YXJpYWJsZSBmb3IgbW9kdWxlCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdHlwZWRlZiBzdHJ1Y3QgX1dCMzVSWAoteworc3RydWN0IHdiMzVfcnggewogCXUzMgkJCUJ5dGVSZWNlaXZlZDsvLyBGb3IgY2FsY3VsYXRpbmcgdGhyb3VnaHB1dCBvZiBCdWxrSW4KIAlhdG9taWNfdAkJUnhGaXJlQ291bnRlcjsvLyBEb2VzIFdiMzVSeCBtb2R1bGUgZmlyZT8KIApAQCAtNDIsNyArNDEsNCBAQAogCiAJaW50CQlFUDNWTV9zdGF0dXM7CiAJdTggKglwRFJ4OwotCi19IFdCMzVSWCwgKlBXQjM1Ulg7Ci0KLQorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eC5jIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4LmMKaW5kZXggYjliNDQ1Ni4uMWU0MTY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4LmMKQEAgLTE1LDkgKzE1LDkgQEAKICNpbmNsdWRlICJzeXNkZWYuaCIKIAogdW5zaWduZWQgY2hhcgotV2IzNVR4X2dldF90eF9idWZmZXIocGh3X2RhdGFfdCBwSHdEYXRhLCB1OCAqKnBCdWZmZXIpCitXYjM1VHhfZ2V0X3R4X2J1ZmZlcihzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4ICoqcEJ1ZmZlcikKIHsKLQlQV0IzNVRYIHBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OworCXN0cnVjdCB3YjM1X3R4ICpwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKIAogCSpwQnVmZmVyID0gcFdiMzVUeC0+VHhCdWZmZXJbMF07CiAJcmV0dXJuIHRydWU7CkBAIC0yOCw4ICsyOCw4IEBACiBzdGF0aWMgdm9pZCBXYjM1VHhfY29tcGxldGUoc3RydWN0IHVyYiAqIHBVcmIpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyID0gcFVyYi0+Y29udGV4dDsKLQlwaHdfZGF0YV90CXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKLQlQV0IzNVRYCQlwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3QgaHdfZGF0YSAqCXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAJUE1EUwkJcE1kcyA9ICZhZGFwdGVyLT5NZHM7CiAKIAlwcmludGsoIndiMzU6IHR4IGNvbXBsZXRlXG4iKTsKQEAgLTY0LDggKzY0LDggQEAKIAogc3RhdGljIHZvaWQgV2IzNVR4KHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlcikKIHsKLQlwaHdfZGF0YV90CXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKLQlQV0IzNVRYCQlwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3QgaHdfZGF0YSAqCXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAJdTgJCSpwVHhCdWZmZXJBZGRyZXNzOwogCVBNRFMJCXBNZHMgPSAmYWRhcHRlci0+TWRzOwogCXN0cnVjdCB1cmIgKglwVXJiID0gKHN0cnVjdCB1cmIgKilwV2IzNVR4LT5UeDRVcmI7CkBAIC0xMTUsOCArMTE1LDggQEAKIAogdm9pZCBXYjM1VHhfc3RhcnQoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyKQogewotCXBod19kYXRhX3QgcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOwotCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CisJc3RydWN0IHdiMzVfdHggKnBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OwogCiAJLy8gQWxsb3cgb25seSBvbmUgdGhyZWFkIHRvIHJ1biBpbnRvIGZ1bmN0aW9uCiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwV2IzNVR4LT5UeEZpcmVDb3VudGVyKSA9PSAxKSB7CkBAIC0xMjYsOSArMTI2LDkgQEAKIAkJYXRvbWljX2RlYygmcFdiMzVUeC0+VHhGaXJlQ291bnRlcik7CiB9CiAKLXVuc2lnbmVkIGNoYXIgV2IzNVR4X2luaXRpYWwocGh3X2RhdGFfdCBwSHdEYXRhKQordW5zaWduZWQgY2hhciBXYjM1VHhfaW5pdGlhbChzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7Ci0JUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAKIAlwV2IzNVR4LT5UeDRVcmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwogCWlmICghcFdiMzVUeC0+VHg0VXJiKQpAQCAtMTQ1LDI5ICsxNDUsMjkgQEAKIH0KIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXZvaWQgV2IzNVR4X3N0b3AocGh3X2RhdGFfdCBwSHdEYXRhKQordm9pZCBXYjM1VHhfc3RvcChzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7Ci0JUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAKIAkvLyBUcnlpbmcgdG8gY2FuY2VsaW5nIHRoZSBUcnAgb2YgRVAyCiAJaWYgKHBXYjM1VHgtPkVQMnZtX3N0YXRlID09IFZNX1JVTk5JTkcpCiAJCXVzYl91bmxpbmtfdXJiKCBwV2IzNVR4LT5UeDJVcmIgKTsgLy8gT25seSB1c2UgdW5saW5rLCBsZXQgV2IzNVR4X2Rlc3Ryb3QgdG8gZnJlZSB0aGVtCiAJI2lmZGVmIF9QRV9UWF9EVU1QXwotCVdCREVCVUcoKCJFUDIgVHggc3RvcFxuIikpOworCXByaW50aygiRVAyIFR4IHN0b3BcbiIpOwogCSNlbmRpZgogCiAJLy8gVHJ5aW5nIHRvIGNhbmNlbGluZyB0aGUgSXJwIG9mIEVQNAogCWlmIChwV2IzNVR4LT5FUDR2bV9zdGF0ZSA9PSBWTV9SVU5OSU5HKQogCQl1c2JfdW5saW5rX3VyYiggcFdiMzVUeC0+VHg0VXJiICk7IC8vIE9ubHkgdXNlIHVubGluaywgbGV0IFdiMzVUeF9kZXN0cm90IHRvIGZyZWUgdGhlbQogCSNpZmRlZiBfUEVfVFhfRFVNUF8KLQlXQkRFQlVHKCgiRVA0IFR4IHN0b3BcbiIpKTsKKwlwcmludGsoIkVQNCBUeCBzdG9wXG4iKTsKIAkjZW5kaWYKIH0KIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXZvaWQgV2IzNVR4X2Rlc3Ryb3kocGh3X2RhdGFfdCBwSHdEYXRhKQordm9pZCBXYjM1VHhfZGVzdHJveShzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpCiB7Ci0JUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAKIAkvLyBXYWl0IGZvciBWTSBzdG9wCiAJZG8gewpAQCAtMTgyLDE0ICsxODIsMTQgQEAKIAkJdXNiX2ZyZWVfdXJiKCBwV2IzNVR4LT5UeDJVcmIgKTsKIAogCSNpZmRlZiBfUEVfVFhfRFVNUF8KLQlXQkRFQlVHKCgiV2IzNVR4X2Rlc3Ryb3kgT0tcbiIpKTsKKwlwcmludGsoIldiMzVUeF9kZXN0cm95IE9LXG4iKTsKIAkjZW5kaWYKIH0KIAogdm9pZCBXYjM1VHhfQ3VycmVudFRpbWUoc3RydWN0IHdic29mdF9wcml2ICphZGFwdGVyLCB1MzIgVGltZUNvdW50KQogewotCXBod19kYXRhX3QgcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOwotCVBXQjM1VFggcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CisJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CisJc3RydWN0IHdiMzVfdHggKnBXYjM1VHggPSAmcEh3RGF0YS0+V2IzNVR4OwogCXVuc2lnbmVkIGNoYXIgVHJpZ2dlciA9IGZhbHNlOwogCiAJaWYgKHBXYjM1VHgtPlR4VGltZXIgPiBUaW1lQ291bnQpCkBAIC0yMDgsOSArMjA4LDkgQEAKIHN0YXRpYyB2b2lkIFdiMzVUeF9FUDJWTV9jb21wbGV0ZShzdHJ1Y3QgdXJiICogcFVyYikKIHsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIgPSBwVXJiLT5jb250ZXh0OwotCXBod19kYXRhX3QJcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOworCXN0cnVjdCBod19kYXRhICoJcEh3RGF0YSA9ICZhZGFwdGVyLT5zSHdEYXRhOwogCVQwMl9ERVNDUklQVE9SCVQwMiwgVFNUQVRVUzsKLQlQV0IzNVRYCQlwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAJdTMyICoJCXBsdG1wID0gKHUzMiAqKXBXYjM1VHgtPkVQMl9idWY7CiAJdTMyCQlpOwogCXUxNgkJSW50ZXJydXB0SW5MZW5ndGg7CkBAIC0yMjksNyArMjI5LDcgQEAKIAogCS8vVGhlIFVyYiBpcyBjb21wbGV0ZWQsIGNoZWNrIHRoZSByZXN1bHQKIAlpZiAocFdiMzVUeC0+RVAyVk1fc3RhdHVzICE9IDApIHsKLQkJV0JERUJVRygoIkVQMiBJb0NvbXBsZXRlUm91dGluZSByZXR1cm4gZXJyb3JcbiIpKTsKKwkJcHJpbnRrKCJFUDIgSW9Db21wbGV0ZVJvdXRpbmUgcmV0dXJuIGVycm9yXG4iKTsKIAkJcFdiMzVUeC0+RVAydm1fc3RhdGU9IFZNX1NUT1A7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMjU2LDggKzI1Niw4IEBACiAKIHN0YXRpYyB2b2lkIFdiMzVUeF9FUDJWTShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpCiB7Ci0JcGh3X2RhdGFfdAlwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7Ci0JUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3QgaHdfZGF0YSAqCXBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAJc3RydWN0IHVyYiAqCXBVcmIgPSAoc3RydWN0IHVyYiAqKXBXYjM1VHgtPlR4MlVyYjsKIAl1MzIgKglwbHRtcCA9ICh1MzIgKilwV2IzNVR4LT5FUDJfYnVmOwogCWludAkJcmV0djsKQEAgLTI3OSw3ICsyNzksNyBAQAogCiAJaWYgKHJldHYgPCAwKSB7CiAJCSNpZmRlZiBfUEVfVFhfRFVNUF8KLQkJV0JERUJVRygoIkVQMiBUeCBJcnAgc2VuZGluZyBlcnJvclxuIikpOworCQlwcmludGsoIkVQMiBUeCBJcnAgc2VuZGluZyBlcnJvclxuIik7CiAJCSNlbmRpZgogCQlnb3RvIGVycm9yOwogCX0KQEAgLTI5Miw4ICsyOTIsOCBAQAogCiB2b2lkIFdiMzVUeF9FUDJWTV9zdGFydChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpCiB7Ci0JcGh3X2RhdGFfdCBwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7Ci0JUFdCMzVUWCBwV2IzNVR4ID0gJnBId0RhdGEtPldiMzVUeDsKKwlzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgPSAmYWRhcHRlci0+c0h3RGF0YTsKKwlzdHJ1Y3Qgd2IzNV90eCAqcFdiMzVUeCA9ICZwSHdEYXRhLT5XYjM1VHg7CiAKIAkvLyBBbGxvdyBvbmx5IG9uZSB0aHJlYWQgdG8gcnVuIGludG8gZnVuY3Rpb24KIAlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBXYjM1VHgtPlR4UmVzdWx0Q291bnQpID09IDEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eF9mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1dHhfZi5oCmluZGV4IDQyMjJmYTguLmE3YWY5Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eF9mLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4X2YuaApAQCAtNywxNCArNywxNCBAQAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIEludGVyZmFjZSBmdW5jdGlvbiBkZWNsYXJlCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdW5zaWduZWQgY2hhciBXYjM1VHhfaW5pdGlhbCgJIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBXYjM1VHhfZGVzdHJveSggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdW5zaWduZWQgY2hhciBXYjM1VHhfZ2V0X3R4X2J1ZmZlciggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICoqcEJ1ZmZlciApOwordW5zaWduZWQgY2hhciBXYjM1VHhfaW5pdGlhbCgJIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBXYjM1VHhfZGVzdHJveSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordW5zaWduZWQgY2hhciBXYjM1VHhfZ2V0X3R4X2J1ZmZlciggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4ICoqcEJ1ZmZlciApOwogCiB2b2lkIFdiMzVUeF9FUDJWTV9zdGFydChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpOwogCiB2b2lkIFdiMzVUeF9zdGFydChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIpOwotdm9pZCBXYjM1VHhfc3RvcCggIHBod19kYXRhX3QgcEh3RGF0YSApOwordm9pZCBXYjM1VHhfc3RvcCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwogCiB2b2lkIFdiMzVUeF9DdXJyZW50VGltZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIsICB1MzIgVGltZUNvdW50KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4X3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzV0eF9zLmgKaW5kZXggMzk2MDI3Ni4uZjcwZjQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2IzNXR4X3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1dHhfcy5oCkBAIC0xOCw4ICsxOCw3IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKLXR5cGVkZWYgc3RydWN0IF9XQjM1VFgKLXsKK3N0cnVjdCB3YjM1X3R4IHsKIAkvLyBGb3IgVHggYnVmZmVyCiAJdTgJVHhCdWZmZXJbIE1BWF9VU0JfVFhfQlVGRkVSX05VTUJFUiBdWyBNQVhfVVNCX1RYX0JVRkZFUiBdOwogCkBAIC00Myw3ICs0Miw2IEBACiAKIAl1MzIJVHhGaWxsQ291bnQ7IC8vIDIwMDYwOTI4CiAJdTMyCVR4VGltZXI7IC8vIDIwMDYwOTI4IEFkZCBpZiBzZW5kaW5nIHBhY2tldCBub3QgZ3JlYXQgdGhhbiAxMwotCi19IFdCMzVUWCwgKlBXQjM1VFg7Cit9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbC5jCmluZGV4IDhhOWQyMWMuLmM5ODVhZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWwuYwpAQCAtMSwxNCArMSwxNCBAQAotI2luY2x1ZGUgIm9zX2NvbW1vbi5oIgorI2luY2x1ZGUgInN5c2RlZi5oIgogI2luY2x1ZGUgIndiaGFsX2YuaCIKICNpbmNsdWRlICJ3YmxpbnV4X2YuaCIKIAotdm9pZCBoYWxfc2V0X2V0aGVybmV0X2FkZHJlc3MoIHBod19kYXRhX3QgcEh3RGF0YSwgdTggKmN1cnJlbnRfYWRkcmVzcyApCit2b2lkIGhhbF9zZXRfZXRoZXJuZXRfYWRkcmVzcyggc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCAqY3VycmVudF9hZGRyZXNzICkKIHsKIAl1MzIgbHRtcFsyXTsKIAogCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKIAotCW1lbWNweSggcEh3RGF0YS0+Q3VycmVudE1hY0FkZHJlc3MsIGN1cnJlbnRfYWRkcmVzcywgRVRIX0xFTkdUSF9PRl9BRERSRVNTICk7CisJbWVtY3B5KCBwSHdEYXRhLT5DdXJyZW50TWFjQWRkcmVzcywgY3VycmVudF9hZGRyZXNzLCBFVEhfQUxFTiApOwogCiAJbHRtcFswXT0gY3B1X3RvX2xlMzIoICoodTMyICopcEh3RGF0YS0+Q3VycmVudE1hY0FkZHJlc3MgKTsKIAlsdG1wWzFdPSBjcHVfdG9fbGUzMiggKih1MzIgKikocEh3RGF0YS0+Q3VycmVudE1hY0FkZHJlc3MgKyA0KSApICYgMHhmZmZmOwpAQCAtMTYsNyArMTYsNyBAQAogCVdiMzVSZWdfQnVyc3RXcml0ZSggcEh3RGF0YSwgMHgwM2U4LCBsdG1wLCAyLCBBVVRPX0lOQ1JFTUVOVCApOwogfQogCi12b2lkIGhhbF9nZXRfcGVybWFuZW50X2FkZHJlc3MoIHBod19kYXRhX3QgcEh3RGF0YSwgdTggKnBldGhlcm5ldF9hZGRyZXNzICkKK3ZvaWQgaGFsX2dldF9wZXJtYW5lbnRfYWRkcmVzcyggc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB1OCAqcGV0aGVybmV0X2FkZHJlc3MgKQogewogCWlmKCBwSHdEYXRhLT5TdXJwcmlzZVJlbW92ZSApIHJldHVybjsKIApAQCAtMjYsNyArMjYsNyBAQAogc3RhdGljIHZvaWQgaGFsX2xlZF9jb250cm9sKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIgPSAoc3RydWN0IHdic29mdF9wcml2ICopIGRhdGE7Ci0JcGh3X2RhdGFfdCBwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CisJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJmFkYXB0ZXItPnNId0RhdGE7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXUzMglMRURTZXQgPSAocEh3RGF0YS0+U29mdHdhcmVTZXQgJiBIQUxfTEVEX1NFVF9NQVNLKSA+PiBIQUxfTEVEX1NFVF9TSElGVDsKIAl1OAlMRURncmF5WzIwXSA9IHsgMCwzLDQsNiw4LDEwLDExLDEyLDEzLDE0LDE1LDE0LDEzLDEyLDExLDEwLDgsNiw0LDIgfTsKQEAgLTMxMSw3ICszMTEsNyBAQAogdTggaGFsX2luaXRfaGFyZHdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JcGh3X2RhdGFfdCBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7CisJc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhID0gJnByaXYtPnNId0RhdGE7CiAJdTE2IFNvZnR3YXJlU2V0OwogCiAJLy8gSW5pdGlhbCB0aGUgdmFyaWFibGUKQEAgLTM1Niw3ICszNTYsNyBAQAogfQogCiAKLXZvaWQgaGFsX2hhbHQocGh3X2RhdGFfdCBwSHdEYXRhLCB2b2lkICpwcGFfZGF0YSkKK3ZvaWQgaGFsX2hhbHQoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCB2b2lkICpwcGFfZGF0YSkKIHsKIAlzd2l0Y2goIHBId0RhdGEtPkluaXRpYWxSZXNvdXJjZSApCiAJewpAQCAtMzcwLDcgKzM3MCw3IEBACiB9CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBiZWFjb25fcGVyaW9kICkKK3ZvaWQgaGFsX3NldF9iZWFjb25fcGVyaW9kKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IGJlYWNvbl9wZXJpb2QgKQogewogCXUzMgl0bXA7CiAKQEAgLTM4Myw3ICszODMsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGhhbF9zZXRfY3VycmVudF9jaGFubmVsX2V4KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgQ2hhbkluZm8gY2hhbm5lbCApCitzdGF0aWMgdm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtMzk2LDcgKzM5Niw3IEBACiAJcEh3RGF0YS0+Q2hhbm5lbCA9IGNoYW5uZWwuQ2hhbk5vOwogCXBId0RhdGEtPmJhbmQgPSBjaGFubmVsLmJhbmQ7CiAJI2lmZGVmIF9QRV9TVEFURV9EVU1QXwotCVdCREVCVUcoKCJTZXQgY2hhbm5lbCBpcyAlZCwgYmFuZCA9JWRcbiIsIHBId0RhdGEtPkNoYW5uZWwsIHBId0RhdGEtPmJhbmQpKTsKKwlwcmludGsoIlNldCBjaGFubmVsIGlzICVkLCBiYW5kID0lZFxuIiwgcEh3RGF0YS0+Q2hhbm5lbCwgcEh3RGF0YS0+YmFuZCk7CiAJI2VuZGlmCiAJcmVnLT5NMjhfTWFjQ29udHJvbCAmPSB+MHhmZjsgLy8gQ2xlYW4gY2hhbm5lbCBpbmZvcm1hdGlvbiBmaWVsZAogCXJlZy0+TTI4X01hY0NvbnRyb2wgfD0gY2hhbm5lbC5DaGFuTm87CkBAIC00MDQsMTIgKzQwNCwxMiBAQAogCQkJCQkoczggKikmY2hhbm5lbCwgc2l6ZW9mKENoYW5JbmZvKSk7CiB9CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKQordm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKQogewogCWhhbF9zZXRfY3VycmVudF9jaGFubmVsX2V4KCBwSHdEYXRhLCBjaGFubmVsICk7CiB9CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBoYWxfc2V0X2FjY2VwdF9icm9hZGNhc3QoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKQordm9pZCBoYWxfc2V0X2FjY2VwdF9icm9hZGNhc3QoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBlbmFibGUgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtNDI0LDcgKzQyNCw3IEBACiB9CiAKIC8vZm9yIHdlcCBrZXkgZXJyb3IgZGV0ZWN0aW9uLCB3ZSBuZWVkIHRvIGFjY2VwdCBicm9hZGNhc3QgcGFja2V0cyB0byBiZSByZWNlaXZlZCB0ZW1wb3JhcnkuCi12b2lkIGhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzKCBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUpCit2b2lkIGhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzKCBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBlbmFibGUpCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCkBAIC00MzgsNyArNDM4LDcgQEAKIAl9CiB9CiAKLXZvaWQgaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICkKK3ZvaWQgaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggZW5hYmxlICkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAKQEAgLTQ0OSw3ICs0NDksNyBAQAogCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgwMCwgcmVnLT5NMDBfTWFjQ29udHJvbCApOwogfQogCi12b2lkIGhhbF9zZXRfYWNjZXB0X2JlYWNvbiggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApCit2b2lkIGhhbF9zZXRfYWNjZXB0X2JlYWNvbiggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IGVuYWJsZSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCkBAIC00NjcsNyArNDY3LDcgQEAKIH0KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgaGFsX3N0b3AoICBwaHdfZGF0YV90IHBId0RhdGEgKQordm9pZCBoYWxfc3RvcCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCkBAIC00ODEsMTAgKzQ4MSwxMCBAQAogCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDQwMCwgcmVnLT5EMDBfRG1hQ29udHJvbCApOwogfQogCi11bnNpZ25lZCBjaGFyIGhhbF9pZGxlKHBod19kYXRhX3QgcEh3RGF0YSkKK3Vuc2lnbmVkIGNoYXIgaGFsX2lkbGUoc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKLQlQV0JVU0IJcFdiVXNiID0gJnBId0RhdGEtPldiVXNiOworCXN0cnVjdCB3Yl91c2IgKnBXYlVzYiA9ICZwSHdEYXRhLT5XYlVzYjsKIAogCWlmKCAhcEh3RGF0YS0+U3VycHJpc2VSZW1vdmUgJiYgKCBwV2JVc2ItPkRldGVjdENvdW50IHx8IHJlZy0+RVAwdm1fc3RhdGUhPVZNX1NUT1AgKSApCiAJCXJldHVybiBmYWxzZTsKQEAgLTQ5MiwxMiArNDkyLDEyIEBACiAJcmV0dXJuIHRydWU7CiB9CiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdm9pZCBoYWxfc2V0X3BoeV90eXBlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggUGh5VHlwZSApCit2b2lkIGhhbF9zZXRfcGh5X3R5cGUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBQaHlUeXBlICkKIHsKIAlwSHdEYXRhLT5waHlfdHlwZSA9IFBoeVR5cGU7CiB9CiAKLXZvaWQgaGFsX3NldF9yYWRpb19tb2RlKCBwaHdfZGF0YV90IHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIHJhZGlvX29mZikKK3ZvaWQgaGFsX3NldF9yYWRpb19tb2RlKCBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIHJhZGlvX29mZikKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAKQEAgLTUxNiw3ICs1MTYsNyBAQAogCVdiMzVSZWdfV3JpdGUoIHBId0RhdGEsIDB4MDgyNCwgcmVnLT5NMjRfTWFjQ29udHJvbCApOwogfQogCi11OCBoYWxfZ2V0X2FudGVubmFfbnVtYmVyKCAgcGh3X2RhdGFfdCBwSHdEYXRhICkKK3U4IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtNTI4LDcgKzUyOCw3IEBACiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8wIDogcmFkaW8gb247IDE6IHJhZGlvIG9mZgotdTggaGFsX2dldF9od19yYWRpb19vZmYoICBwaHdfZGF0YV90IHBId0RhdGEgKQordTggaGFsX2dldF9od19yYWRpb19vZmYoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKQogewogCXN0cnVjdCB3YjM1X3JlZyAqcmVnID0gJnBId0RhdGEtPnJlZzsKIApAQCAtNTQ1LDE0ICs1NDUsMTQgQEAKIAl9CiB9CiAKLXVuc2lnbmVkIGNoYXIgaGFsX2dldF9keHhfcmVnKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IG51bWJlciwgIHUzMiAqIHBWYWx1ZSApCit1bnNpZ25lZCBjaGFyIGhhbF9nZXRfZHh4X3JlZyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBudW1iZXIsICB1MzIgKiBwVmFsdWUgKQogewogCWlmKCBudW1iZXIgPCAweDEwMDAgKQogCQludW1iZXIgKz0gMHgxMDAwOwogCXJldHVybiBXYjM1UmVnX1JlYWRTeW5jKCBwSHdEYXRhLCBudW1iZXIsIHBWYWx1ZSApOwogfQogCi11bnNpZ25lZCBjaGFyIGhhbF9zZXRfZHh4X3JlZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBudW1iZXIsICB1MzIgdmFsdWUgKQordW5zaWduZWQgY2hhciBoYWxfc2V0X2R4eF9yZWcoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgbnVtYmVyLCAgdTMyIHZhbHVlICkKIHsKIAl1bnNpZ25lZCBjaGFyCXJldDsKIApAQCAtNTYyLDcgKzU2Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBoYWxfc2V0X3JmX3Bvd2VyKHBod19kYXRhX3QgcEh3RGF0YSwgdTggUG93ZXJJbmRleCkKK3ZvaWQgaGFsX3NldF9yZl9wb3dlcihzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4IFBvd2VySW5kZXgpCiB7CiAJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCBQb3dlckluZGV4ICk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9mLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9mLmgKaW5kZXggZTgwNWY0MC4uZWZjYWVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsX2YuaApAQCAtMTAsNTYgKzEwLDU2IEBACiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gRnVuY3Rpb24gZGVjbGFyYXRpb24KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci12b2lkIGhhbF9yZW1vdmVfbWFwcGluZ19rZXkoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqcG1hY19hZGRyICk7Ci12b2lkIGhhbF9yZW1vdmVfZGVmYXVsdF9rZXkoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MzIgaW5kZXggKTsKLXVuc2lnbmVkIGNoYXIgaGFsX3NldF9tYXBwaW5nX2tleSggIHBod19kYXRhX3QgYWRhcHRlciwgIHU4ICpwbWFjX2FkZHIsICB1OCBudWxsX2tleSwgIHU4IHdlcF9vbiwgIHU4ICpwdHhfdHNjLCAgdTggKnByeF90c2MsICB1OCBrZXlfdHlwZSwgIHU4IGtleV9sZW4sICB1OCAqcGtleV9kYXRhICk7Ci11bnNpZ25lZCBjaGFyIGhhbF9zZXRfZGVmYXVsdF9rZXkoICBwaHdfZGF0YV90IGFkYXB0ZXIsICB1OCBpbmRleCwgIHU4IG51bGxfa2V5LCAgdTggd2VwX29uLCAgdTggKnB0eF90c2MsICB1OCAqcHJ4X3RzYywgIHU4IGtleV90eXBlLCAgdTgga2V5X2xlbiwgIHU4ICpwa2V5X2RhdGEgKTsKLXZvaWQgaGFsX2NsZWFyX2FsbF9kZWZhdWx0X2tleSggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBoYWxfY2xlYXJfYWxsX2dyb3VwX2tleSggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBoYWxfY2xlYXJfYWxsX21hcHBpbmdfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIGhhbF9jbGVhcl9hbGxfa2V5KCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Ci12b2lkIGhhbF9nZXRfZXRoZXJuZXRfYWRkcmVzcyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4ICpjdXJyZW50X2FkZHJlc3MgKTsKLXZvaWQgaGFsX3NldF9ldGhlcm5ldF9hZGRyZXNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKmN1cnJlbnRfYWRkcmVzcyApOwotdm9pZCBoYWxfZ2V0X3Blcm1hbmVudF9hZGRyZXNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKnBldGhlcm5ldF9hZGRyZXNzICk7Cit2b2lkIGhhbF9yZW1vdmVfbWFwcGluZ19rZXkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCAqcG1hY19hZGRyICk7Cit2b2lkIGhhbF9yZW1vdmVfZGVmYXVsdF9rZXkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MzIgaW5kZXggKTsKK3Vuc2lnbmVkIGNoYXIgaGFsX3NldF9tYXBwaW5nX2tleSggIHN0cnVjdCBod19kYXRhICogYWRhcHRlciwgIHU4ICpwbWFjX2FkZHIsICB1OCBudWxsX2tleSwgIHU4IHdlcF9vbiwgIHU4ICpwdHhfdHNjLCAgdTggKnByeF90c2MsICB1OCBrZXlfdHlwZSwgIHU4IGtleV9sZW4sICB1OCAqcGtleV9kYXRhICk7Cit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfZGVmYXVsdF9rZXkoICBzdHJ1Y3QgaHdfZGF0YSAqIGFkYXB0ZXIsICB1OCBpbmRleCwgIHU4IG51bGxfa2V5LCAgdTggd2VwX29uLCAgdTggKnB0eF90c2MsICB1OCAqcHJ4X3RzYywgIHU4IGtleV90eXBlLCAgdTgga2V5X2xlbiwgIHU4ICpwa2V5X2RhdGEgKTsKK3ZvaWQgaGFsX2NsZWFyX2FsbF9kZWZhdWx0X2tleSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBoYWxfY2xlYXJfYWxsX2dyb3VwX2tleSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBoYWxfY2xlYXJfYWxsX21hcHBpbmdfa2V5KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIGhhbF9jbGVhcl9hbGxfa2V5KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIGhhbF9nZXRfZXRoZXJuZXRfYWRkcmVzcyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4ICpjdXJyZW50X2FkZHJlc3MgKTsKK3ZvaWQgaGFsX3NldF9ldGhlcm5ldF9hZGRyZXNzKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggKmN1cnJlbnRfYWRkcmVzcyApOwordm9pZCBoYWxfZ2V0X3Blcm1hbmVudF9hZGRyZXNzKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggKnBldGhlcm5ldF9hZGRyZXNzICk7CiB1OCBoYWxfaW5pdF9oYXJkd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci12b2lkIGhhbF9zZXRfcG93ZXJfc2F2ZV9tb2RlKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBwb3dlcl9zYXZlLCAgdW5zaWduZWQgY2hhciB3YWtldXAsICB1bnNpZ25lZCBjaGFyIGR0aW0gKTsKLXZvaWQgaGFsX2dldF9wb3dlcl9zYXZlX21vZGUoICBwaHdfZGF0YV90IHBId0RhdGEsICAgdTggKnBpbl9wd3Jfc2F2ZSApOwotdm9pZCBoYWxfc2V0X3Nsb3RfdGltZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IHR5cGUgKTsKK3ZvaWQgaGFsX3NldF9wb3dlcl9zYXZlX21vZGUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIHBvd2VyX3NhdmUsICB1bnNpZ25lZCBjaGFyIHdha2V1cCwgIHVuc2lnbmVkIGNoYXIgZHRpbSApOwordm9pZCBoYWxfZ2V0X3Bvd2VyX3NhdmVfbW9kZSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgICB1OCAqcGluX3B3cl9zYXZlICk7Cit2b2lkIGhhbF9zZXRfc2xvdF90aW1lKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggdHlwZSApOwogI2RlZmluZSBoYWxfc2V0X2F0aW1fd2luZG93KCBfQSwgX0FUTSApCi12b2lkIGhhbF9zdGFydF9ic3MoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBtYWNfb3BfbW9kZSApOwotdm9pZCBoYWxfam9pbl9yZXF1ZXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggYnNzX3R5cGUgKTsgLy8gMDpCU1MgU1RBIDE6SUJTUyBTVEEvLwotdm9pZCBoYWxfc3RvcF9zeW5jX2JzcyggIHBod19kYXRhX3QgcEh3RGF0YSApOwotdm9pZCBoYWxfcmVzdW1lX3N5bmNfYnNzKCAgcGh3X2RhdGFfdCBwSHdEYXRhKTsKLXZvaWQgaGFsX3NldF9haWQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1MTYgYWlkICk7Ci12b2lkIGhhbF9zZXRfYnNzaWQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqcGJzc2lkICk7Ci12b2lkIGhhbF9nZXRfYnNzaWQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqcGJzc2lkICk7Ci12b2lkIGhhbF9zZXRfYmVhY29uX3BlcmlvZCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBiZWFjb25fcGVyaW9kICk7Ci12b2lkIGhhbF9zZXRfbGlzdGVuX2ludGVydmFsKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGxpc3Rlbl9pbnRlcnZhbCApOwotdm9pZCBoYWxfc2V0X2NhcF9pbmZvKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGNhcGFiaWxpdHlfaW5mbyApOwotdm9pZCBoYWxfc2V0X3NzaWQoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCAqcHNzaWQsICB1OCBzc2lkX2xlbiApOwotdm9pZCBoYWxfc2V0X2N1cnJlbnRfY2hhbm5lbCggIHBod19kYXRhX3QgcEh3RGF0YSwgIENoYW5JbmZvIGNoYW5uZWwgKTsKLXZvaWQgaGFsX3NldF9hY2NlcHRfYnJvYWRjYXN0KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggZW5hYmxlICk7Ci12b2lkIGhhbF9zZXRfYWNjZXB0X211bHRpY2FzdCggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSApOwotdm9pZCBoYWxfc2V0X2FjY2VwdF9iZWFjb24oICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBlbmFibGUgKTsKLXZvaWQgaGFsX3N0b3AoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgaGFsX2hhbHQoICBwaHdfZGF0YV90IHBId0RhdGEsIHZvaWQgKnBwYV9kYXRhICk7Ci12b2lkIGhhbF9zdGFydF90eDAoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXZvaWQgaGFsX3NldF9waHlfdHlwZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IFBoeVR5cGUgKTsKK3ZvaWQgaGFsX3N0YXJ0X2JzcyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IG1hY19vcF9tb2RlICk7Cit2b2lkIGhhbF9qb2luX3JlcXVlc3QoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBic3NfdHlwZSApOyAvLyAwOkJTUyBTVEEgMTpJQlNTIFNUQS8vCit2b2lkIGhhbF9zdG9wX3N5bmNfYnNzKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7Cit2b2lkIGhhbF9yZXN1bWVfc3luY19ic3MoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEpOwordm9pZCBoYWxfc2V0X2FpZCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBhaWQgKTsKK3ZvaWQgaGFsX3NldF9ic3NpZCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4ICpwYnNzaWQgKTsKK3ZvaWQgaGFsX2dldF9ic3NpZCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4ICpwYnNzaWQgKTsKK3ZvaWQgaGFsX3NldF9iZWFjb25fcGVyaW9kKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTE2IGJlYWNvbl9wZXJpb2QgKTsKK3ZvaWQgaGFsX3NldF9saXN0ZW5faW50ZXJ2YWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgbGlzdGVuX2ludGVydmFsICk7Cit2b2lkIGhhbF9zZXRfY2FwX2luZm8oICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgY2FwYWJpbGl0eV9pbmZvICk7Cit2b2lkIGhhbF9zZXRfc3NpZCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4ICpwc3NpZCwgIHU4IHNzaWRfbGVuICk7Cit2b2lkIGhhbF9zZXRfY3VycmVudF9jaGFubmVsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgQ2hhbkluZm8gY2hhbm5lbCApOwordm9pZCBoYWxfc2V0X2FjY2VwdF9icm9hZGNhc3QoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBlbmFibGUgKTsKK3ZvaWQgaGFsX3NldF9hY2NlcHRfbXVsdGljYXN0KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggZW5hYmxlICk7Cit2b2lkIGhhbF9zZXRfYWNjZXB0X2JlYWNvbiggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IGVuYWJsZSApOwordm9pZCBoYWxfc3RvcCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBoYWxfaGFsdCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdm9pZCAqcHBhX2RhdGEgKTsKK3ZvaWQgaGFsX3N0YXJ0X3R4MCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwordm9pZCBoYWxfc2V0X3BoeV90eXBlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTggUGh5VHlwZSApOwogI2RlZmluZSBoYWxfZ2V0X2N3bWluKCBfQSApICggKF9BKS0+Y3dtaW4gKQotdm9pZCBoYWxfc2V0X2N3bWF4KCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IGN3aW5fbWF4ICk7Cit2b2lkIGhhbF9zZXRfY3dtYXgoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgY3dpbl9tYXggKTsKICNkZWZpbmUgaGFsX2dldF9jd21heCggX0EgKSAoIChfQSktPmN3bWF4ICkKLXZvaWQgaGFsX3NldF9yc25fd3BhKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTMyICogUlNOX0lFX0JpdG1hcCAsIHUzMiAqIFJTTl9PVUlfdHlwZSAsIHVuc2lnbmVkIGNoYXIgYkRlc2lyZWRBdXRoTW9kZSk7Ci12b2lkIGhhbF9zZXRfY29ubmVjdF9pbmZvKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBib0Nvbm5lY3QgKTsKLXU4IGhhbF9nZXRfZXN0X3NxMyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IENvdW50ICk7Ci12b2lkIGhhbF9zZXRfcmZfcG93ZXIoICBwaHdfZGF0YV90IHBId0RhdGEsICB1OCBQb3dlckluZGV4ICk7IC8vIDIwMDYwNjIxIE1vZGlmeQotdm9pZCBoYWxfc2V0X3JhZGlvX21vZGUoICBwaHdfZGF0YV90IHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIGJvVmFsdWUpOwotdm9pZCBoYWxfZGVzY3JpcHRvcl9pbmRpY2F0ZSggIHBod19kYXRhX3QgcEh3RGF0YSwgIFBERVNDUklQVE9SIHBEZXMgKTsKLXU4IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKLXUzMiBoYWxfZ2V0X2Jzc19wa19jbnQoICBwaHdfZGF0YV90IHBId0RhdGEgKTsKK3ZvaWQgaGFsX3NldF9yc25fd3BhKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdTMyICogUlNOX0lFX0JpdG1hcCAsIHUzMiAqIFJTTl9PVUlfdHlwZSAsIHVuc2lnbmVkIGNoYXIgYkRlc2lyZWRBdXRoTW9kZSk7Cit2b2lkIGhhbF9zZXRfY29ubmVjdF9pbmZvKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgdW5zaWduZWQgY2hhciBib0Nvbm5lY3QgKTsKK3U4IGhhbF9nZXRfZXN0X3NxMyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHU4IENvdW50ICk7Cit2b2lkIGhhbF9zZXRfcmZfcG93ZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBQb3dlckluZGV4ICk7IC8vIDIwMDYwNjIxIE1vZGlmeQordm9pZCBoYWxfc2V0X3JhZGlvX21vZGUoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1bnNpZ25lZCBjaGFyIGJvVmFsdWUpOwordm9pZCBoYWxfZGVzY3JpcHRvcl9pbmRpY2F0ZSggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIFBERVNDUklQVE9SIHBEZXMgKTsKK3U4IGhhbF9nZXRfYW50ZW5uYV9udW1iZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKK3UzMiBoYWxfZ2V0X2Jzc19wa19jbnQoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKICNkZWZpbmUgaGFsX2dldF9yZWdpb25fZnJvbV9FRVBST00oIF9BICkgKCAoX0EpLT5yZWcuRUVQUk9NUmVnaW9uICkKLXZvaWQgaGFsX3NldF9hY2NlcHRfcHJvbWlzY3VvdXMJCSggIHBod19kYXRhX3QgcEh3RGF0YSwgIHU4IGVuYWJsZSk7Cit2b2lkIGhhbF9zZXRfYWNjZXB0X3Byb21pc2N1b3VzCQkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCBlbmFibGUpOwogI2RlZmluZSBoYWxfZ2V0X3R4X2J1ZmZlciggX0EsIF9CICkgV2IzNVR4X2dldF90eF9idWZmZXIoIF9BLCBfQiApCi11OCBoYWxfZ2V0X2h3X3JhZGlvX29mZgkJCSggIHBod19kYXRhX3QgcEh3RGF0YSApOwordTggaGFsX2dldF9od19yYWRpb19vZmYJCQkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgKTsKICNkZWZpbmUgaGFsX3NvZnR3YXJlX3NldCggX0EgKQkJKF9BLT5Tb2Z0d2FyZVNldCkKICNkZWZpbmUgaGFsX2RyaXZlcl9pbml0X09LKCBfQSApCShfQS0+SXNJbml0T0spCiAjZGVmaW5lIGhhbF9yc3NpX2JvdW5kYXJ5X2hpZ2goIF9BICkgKF9BLT5SU1NJX2hpZ2gpCkBAIC02OCw4ICs2OCw4IEBACiAKICNkZWZpbmUgUEhZX0RFQlVHKCBtc2csIGFyZ3MuLi4gKQogCi11bnNpZ25lZCBjaGFyIGhhbF9nZXRfZHh4X3JlZyggIHBod19kYXRhX3QgcEh3RGF0YSwgIHUxNiBudW1iZXIsICB1MzIgKiBwVmFsdWUgKTsKLXVuc2lnbmVkIGNoYXIgaGFsX3NldF9keHhfcmVnKCAgcGh3X2RhdGFfdCBwSHdEYXRhLCAgdTE2IG51bWJlciwgIHUzMiB2YWx1ZSApOwordW5zaWduZWQgY2hhciBoYWxfZ2V0X2R4eF9yZWcoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1MTYgbnVtYmVyLCAgdTMyICogcFZhbHVlICk7Cit1bnNpZ25lZCBjaGFyIGhhbF9zZXRfZHh4X3JlZyggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHUxNiBudW1iZXIsICB1MzIgdmFsdWUgKTsKICNkZWZpbmUgaGFsX2dldF90aW1lX2NvdW50KCBfUCApCShfUC0+dGltZV9jb3VudC8xMCkJLy8gcmV0dXJuIDEwMG1zIGNvdW50CiAjZGVmaW5lIGhhbF9kZXRlY3RfZXJyb3IoIF9QICkJCShfUC0+V2JVc2IuRGV0ZWN0Q291bnQpCiAKQEAgLTgyLDcgKzgyLDcgQEAKICNkZWZpbmUgaGFsX2dldF9jbGVhcl9pbnRlcnJ1cHQoX0EpCiAjZGVmaW5lIGhhbF9pYnNzX2Rpc2Nvbm5lY3QoX0EpIGhhbF9zdG9wX3N5bmNfYnNzKF9BKQogI2RlZmluZSBoYWxfam9pbl9yZXF1ZXN0X3N0b3AoX0EpCi11bnNpZ25lZCBjaGFyCWhhbF9pZGxlKCAgcGh3X2RhdGFfdCBwSHdEYXRhICk7Cit1bnNpZ25lZCBjaGFyCWhhbF9pZGxlKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CiAjZGVmaW5lIGh3X2dldF9jeHhfcmVnKCBfQSwgX0IsIF9DICkKICNkZWZpbmUgaHdfc2V0X2N4eF9yZWcoIF9BLCBfQiwgX0MgKQogI2RlZmluZSBod19nZXRfZHh4X3JlZyggX0EsIF9CLCBfQyApCWhhbF9nZXRfZHh4X3JlZyggX0EsIF9CLCAodTMyICopX0MgKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2JoYWxfcy5oCmluZGV4IDI3NmQyYjEuLmFjZmViZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diaGFsX3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YmhhbF9zLmgKQEAgLTIsOCArMiw3IEBACiAjZGVmaW5lIF9fV0lOQk9ORF9XQkhBTF9TX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPiAvKiBmb3IgRVRIX0FMRU4gKi8KIAogLy9bMjAwNDA3MjIgV0tdCiAjZGVmaW5lIEhBTF9MRURfU0VUX01BU0sJCTB4MDAxYwkvLzIwMDYwOTAxIEV4dGVuZApAQCAtODYsMTkgKzg1LDYgQEAKIAlWTV9DT01QTEVURUQKIH07CiAKLS8vIEJlIHVzZWQgZm9yIDgwMi4xMSBtYWMgaGVhZGVyCi10eXBlZGVmIHN0cnVjdCBfTUFDX0ZSQU1FX0NPTlRST0wgewotCXU4CW1hY19mcmFtZV9pbmZvOyAvLyB0aGlzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIHByb3RvdmwgdmVyc2lvbiwgdHlwZSBhbmQgc3VidHlwZQotCXU4CXRvX2RzOjE7Ci0JdTgJZnJvbV9kczoxOwotCXU4CW1vcmVfZnJhZzoxOwotCXU4CXJldHJ5OjE7Ci0JdTgJcHdyX21ndDoxOwotCXU4CW1vcmVfZGF0YToxOwotCXU4CVdFUDoxOwotCXU4CW9yZGVyOjE7Ci19IE1BQ19GUkFNRV9DT05UUk9MLCAqUE1BQ19GUkFNRV9DT05UUk9MOwotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBOb3JtYWwgS2V5IHRhYmxlIGZvcm1hdAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA2LDI4ICs5Miw2IEBACiAjZGVmaW5lIE1BWF9LRVlfVEFCTEUJCQkJMjQJLy8gMjQgZW50cnkgZm9yIHN0b3Jpbmcga2V5IGRhdGEKICNkZWZpbmUgR1JPVVBfS0VZX1NUQVJUX0lOREVYCQk0CiAjZGVmaW5lIE1BUFBJTkdfS0VZX1NUQVJUX0lOREVYCQk4Ci10eXBlZGVmIHN0cnVjdCBfS0VZX1RBQkxFCi17Ci0JdTMyCURXMF9WYWxpZDoxOwotCXUzMglEVzBfTnVsbEtleToxOwotCXUzMglEVzBfU2VjdXJpdHlfTW9kZToyOy8vMDpXRVAgNDAgYml0IDE6V0VQIDEwNCBiaXQgMjpUS0lQIDEyOCBiaXQgMzpDQ01QIDEyOCBiaXQKLQl1MzIJRFcwX1dFUE9OOjE7Ci0JdTMyCURXMF9SRVNFUlZFRDoxMTsKLQl1MzIJRFcwX0FkZHJlc3MxOjE2OwotCi0JdTMyCURXMV9BZGRyZXNzMjsKLQotCXUzMglEVzJfUnhTZXF1ZW5jZUNvdW50MTsKLQotCXUzMglEVzNfUnhTZXF1ZW5jZUNvdW50MjoxNjsKLQl1MzIJRFczX1JFU0VSVkVEOjE2OwotCi0JdTMyCURXNF9UeFNlcXVlbmNlQ291bnQxOwotCi0JdTMyCURXNV9UeFNlcXVlbmNlQ291bnQyOjE2OwotCXUzMglEVzVfUkVTRVJWRUQ6MTY7Ci0KLX0gS0VZX1RBQkxFLCAqUEtFWV9UQUJMRTsKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gCQkJIERlc2NyaXB0b3IKQEAgLTQxMyw4ICszNzcsOCBAQAogI2RlZmluZSBNQVhfUkZfUEFSQU1FVEVSCTMyCiAKIHR5cGVkZWYgc3RydWN0IF9UWFZHQV9GT1JfNTAgewotCXU4CUNoYW5ObzsKLQl1OAlUeFZnYVZhbHVlOworCXU4ICAgICAgQ2hhbk5vOworCXU4ICAgICAgVHhWZ2FWYWx1ZTsKIH0gVFhWR0FfRk9SXzUwOwogCiAKQEAgLTQyNywxMCArMzkxLDggQEAKICNpbmNsdWRlICJ3YjM1dHhfcy5oIgogI2luY2x1ZGUgIndiMzVyeF9zLmgiCiAKLQogLy8gRm9yIEhhbCB1c2luZyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXR5cGVkZWYgc3RydWN0IF9IV19EQVRBX1QKLXsKK3N0cnVjdCBod19kYXRhIHsKIAkvLyBGb3IgY29tcGF0aWJsZSB3aXRoIDMzCiAJdTMyCXJldmlzaW9uOwogCXUzMglCQjNjX2NhbDsgLy8gVGhlIHZhbHVlIGZvciBUeCBjYWxpYnJhdGlvbiBjb21lcyBmcm9tIEVFUFJPTQpAQCAtNDUyLDggKzQxNCw4IEBACiAJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCS8vIERlZmluaXRpb24gZm9yIE1BQyBhZGRyZXNzCiAJLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCXU4CQlQZXJtYW5lbnRNYWNBZGRyZXNzW0VUSF9MRU5HVEhfT0ZfQUREUkVTUyArIDJdOyAvLyBUaGUgRW50aGVybmV0IGFkZHIgdGhhdCBhcmUgc3RvcmVkIGluIEVFUFJPTS4gICsgMiB0byA4LWJ5dGUgYWxpZ25tZW50Ci0JdTgJCUN1cnJlbnRNYWNBZGRyZXNzW0VUSF9MRU5HVEhfT0ZfQUREUkVTUyArIDJdOyAvLyBUaGUgRW50aGVybmV0IGFkZHIgdGhhdCBhcmUgaW4gdXNlZC4gICsgMiB0byA4LWJ5dGUgYWxpZ25tZW50CisJdTgJCVBlcm1hbmVudE1hY0FkZHJlc3NbRVRIX0FMRU4gKyAyXTsgLy8gVGhlIEVudGhlcm5ldCBhZGRyIHRoYXQgYXJlIHN0b3JlZCBpbiBFRVBST00uICArIDIgdG8gOC1ieXRlIGFsaWdubWVudAorCXU4CQlDdXJyZW50TWFjQWRkcmVzc1tFVEhfQUxFTiArIDJdOyAvLyBUaGUgRW50aGVybmV0IGFkZHIgdGhhdCBhcmUgaW4gdXNlZC4gICsgMiB0byA4LWJ5dGUgYWxpZ25tZW50CiAKIAkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCS8vIERlZmluaXRpb24gZm9yIDgwMi4xMQpAQCAtNTAyLDEwICs0NjQsMTAgQEAKIAkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCS8vIFZhcmlhYmxlIGZvciBlYWNoIG1vZHVsZQogCS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0JV0JVU0IJCVdiVXNiOyAvLyBOZWVkIFdiVXNiLmgKKwlzdHJ1Y3Qgd2JfdXNiCVdiVXNiOyAvLyBOZWVkIFdiVXNiLmgKIAlzdHJ1Y3Qgd2IzNV9yZWcJcmVnOyAvLyBOZWVkIFdiMzVSZWcuaAotCVdCMzVUWAkJV2IzNVR4OyAvLyBOZWVkIFdiMzVUeC5oCi0JV0IzNVJYCQlXYjM1Ung7IC8vIE5lZWQgV2IzNVJ4LmgKKwlzdHJ1Y3Qgd2IzNV90eAlXYjM1VHg7IC8vIE5lZWQgV2IzNVR4LmgKKwlzdHJ1Y3Qgd2IzNV9yeAlXYjM1Ung7IC8vIE5lZWQgV2IzNVJ4LmgKIAogCXN0cnVjdCB0aW1lcl9saXN0CUxFRFRpbWVyOy8vIEZvciBMRUQKIApAQCAtNTc4LDM1ICs1NDAsNiBAQAogCS8vIDIwMDYwODI4LjEgZm9yIGF2b2lkIEFQIGRpc2Nvbm5lY3QKIAl1MzIJCU51bGxQYWNrZXRDb3VudDsKIAotfSBod19kYXRhX3QsICpwaHdfZGF0YV90OwotCi0vLyBUaGUgbWFwcGluZyBvZiBSeCBhbmQgVHggZGVzY3JpcHRvciBmaWVsZAotdHlwZWRlZiBzdHJ1Y3QgX0hBTF9SQVRFCi17Ci0JLy8gRFNTUwotCXUzMglSRVNFUlZFRF8wOwotCXUzMiAgIE51bVJhdGUyTVM7Ci0JdTMyICAgTnVtUmF0ZTU1TVM7Ci0JdTMyICAgTnVtUmF0ZTExTVM7Ci0KLQl1MzIJUkVTRVJWRURfMVs0XTsKLQotCXUzMiAgIE51bVJhdGUxTTsKLQl1MzIgICBOdW1SYXRlMk1MOwotCXUzMiAgIE51bVJhdGU1NU1MOwotCXUzMiAgIE51bVJhdGUxMU1MOwotCi0JdTMyCVJFU0VSVkVEXzJbNF07Ci0KLQkvLyBPRkRNCi0JdTMyICAgTnVtUmF0ZTZNOwotCXUzMiAgIE51bVJhdGU5TTsKLQl1MzIgICBOdW1SYXRlMTJNOwotCXUzMiAgIE51bVJhdGUxOE07Ci0JdTMyICAgTnVtUmF0ZTI0TTsKLQl1MzIgICBOdW1SYXRlMzZNOwotCXUzMiAgIE51bVJhdGU0OE07Ci0JdTMyICAgTnVtUmF0ZTU0TTsKLX0gSEFMX1JBVEUsICpQSEFMX1JBVEU7Cit9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCmluZGV4IGY3MTZiMmUuLjljM2Y5NDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMKQEAgLTksNyArOSw3IEBACiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgIm1kc19mLmgiCiAjaW5jbHVkZSAibWxtZXR4cnhfZi5oIgotI2luY2x1ZGUgIm10b19mLmgiCisjaW5jbHVkZSAibXRvLmgiCiAjaW5jbHVkZSAid2JoYWxfZi5oIgogI2luY2x1ZGUgIndibGludXhfZi5oIgogCkBAIC0xNDksMTkgKzE0OSwxOSBAQAogCWhhbF9zZXRfY3VycmVudF9jaGFubmVsKCZwcml2LT5zSHdEYXRhLCBjaCk7CiAJaGFsX3NldF9iZWFjb25fcGVyaW9kKCZwcml2LT5zSHdEYXRhLCBjb25mLT5iZWFjb25faW50KTsKIC8vCWhhbF9zZXRfY2FwX2luZm8oJnByaXYtPnNId0RhdGEsID8/ICk7Ci0vLyBoYWxfc2V0X3NzaWQocGh3X2RhdGFfdCBwSHdEYXRhLCAgdTggKiBwc3NpZCwgIHU4IHNzaWRfbGVuKTsgPz8KKy8vIGhhbF9zZXRfc3NpZChzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCAqIHBzc2lkLCAgdTggc3NpZF9sZW4pOyA/PwogCWhhbF9zZXRfYWNjZXB0X2Jyb2FkY2FzdCgmcHJpdi0+c0h3RGF0YSwgMSk7CiAJaGFsX3NldF9hY2NlcHRfcHJvbWlzY3VvdXMoJnByaXYtPnNId0RhdGEsICAxKTsKIAloYWxfc2V0X2FjY2VwdF9tdWx0aWNhc3QoJnByaXYtPnNId0RhdGEsICAxKTsKIAloYWxfc2V0X2FjY2VwdF9iZWFjb24oJnByaXYtPnNId0RhdGEsICAxKTsKIAloYWxfc2V0X3JhZGlvX21vZGUoJnByaXYtPnNId0RhdGEsICAwKTsKLQkvL2hhbF9zZXRfYW50ZW5uYV9udW1iZXIoICBwaHdfZGF0YV90IHBId0RhdGEsIHU4IG51bWJlciApCi0JLy9oYWxfc2V0X3JmX3Bvd2VyKHBod19kYXRhX3QgcEh3RGF0YSwgdTggUG93ZXJJbmRleCkKKwkvL2hhbF9zZXRfYW50ZW5uYV9udW1iZXIoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsIHU4IG51bWJlciApCisJLy9oYWxfc2V0X3JmX3Bvd2VyKHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggUG93ZXJJbmRleCkKIAogCiAvLwloYWxfc3RhcnRfYnNzKCZwcml2LT5zSHdEYXRhLCBXTEFOX0JTU1RZUEVfSU5GUkFTVFJVQ1RVUkUpOwk/PwogCi0vL3ZvaWQgaGFsX3NldF9yYXRlcyhwaHdfZGF0YV90IHBId0RhdGEsIHU4ICogcGJzc19yYXRlcywKKy8vdm9pZCBoYWxfc2V0X3JhdGVzKHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgdTggKiBwYnNzX3JhdGVzLAogLy8JCSAgIHU4IGxlbmd0aCwgdW5zaWduZWQgY2hhciBiYXNpY19yYXRlX3NldCkKIAogCXJldHVybiAwOwpAQCAtMTk5LDcgKzE5OSw3IEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciB3YjM1X2h3X2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JcGh3X2RhdGFfdAlwSHdEYXRhOworCXN0cnVjdCBod19kYXRhICoJcEh3RGF0YTsKIAl1OAkJKnBNYWNBZGRyOwogCXU4CQkqcE1hY0FkZHIyOwogCXUzMgkJSW5pdFN0ZXAgPSAwOwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJLy9nZXQgY3VycmVudCBhbnRlbm5hCiAJcHJpdi0+c0xvY2FsUGFyYS5iQW50ZW5uYU5vID0gaGFsX2dldF9hbnRlbm5hX251bWJlcihwSHdEYXRhKTsKICNpZmRlZiBfUEVfU1RBVEVfRFVNUF8KLQlXQkRFQlVHKCgiRHJpdmVyIGluaXQsIGFudGVubmEgbm8gPSAlZFxuIiwgcHNMT0NBTC0+YkFudGVubmFObykpOworCXByaW50aygiRHJpdmVyIGluaXQsIGFudGVubmEgbm8gPSAlZFxuIiwgcHNMT0NBTC0+YkFudGVubmFObyk7CiAjZW5kaWYKIAloYWxfZ2V0X2h3X3JhZGlvX29mZiggcEh3RGF0YSApOwogCkBAIC0zMTIsNyArMzEyLDcgQEAKIAogc3RhdGljIGludCB3YjM1X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWRfdGFibGUpCiB7Ci0JUFdCVVNCCQlwV2JVc2I7CisJc3RydWN0IHdiX3VzYiAqcFdiVXNiOwogICAgICAgICBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppbnRlcmZhY2U7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKIAl1MzIJbHRtcDsKQEAgLTM2Niw3ICszNjYsNyBAQAogCiAJU0VUX0lFRUU4MDIxMV9ERVYoZGV2LCAmdWRldi0+ZGV2KTsKIAl7Ci0JCXBod19kYXRhX3QgcEh3RGF0YSA9ICZwcml2LT5zSHdEYXRhOworCQlzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEgPSAmcHJpdi0+c0h3RGF0YTsKIAkJdW5zaWduZWQgY2hhcgkJZGV2X2FkZHJbTUFYX0FERFJfTEVOXTsKIAkJaGFsX2dldF9wZXJtYW5lbnRfYWRkcmVzcyhwSHdEYXRhLCBkZXZfYWRkcik7CiAJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGRldiwgZGV2X2FkZHIpOwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJLy8gVHVybiBvZmYgUnggYW5kIFR4IGhhcmR3YXJlIGFiaWxpdHkKIAloYWxfc3RvcCggJmFkYXB0ZXItPnNId0RhdGEgKTsKICNpZmRlZiBfUEVfVVNCX0lOSV9EVU1QXwotCVdCREVCVUcoKCJbdzM1dW5kXSBIYWxfc3RvcCBPLksuXG4iKSk7CisJcHJpbnRrKCJbdzM1dW5kXSBIYWxfc3RvcCBPLksuXG4iKTsKICNlbmRpZgogCW1zbGVlcCgxMDApOy8vIFdhaXRpbmcgSXJwIGNvbXBsZXRlZAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYl9zLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYl9zLmgKaW5kZXggMWRlOTM2MC4uMGM3ZTZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2Jfcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiX3MuaApAQCAtMTYsMjIgKzE2LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gIFJXX0NPTlRFWFQgLS0KLS8vCi0vLyAgVXNlZCB0byB0cmFjayBkcml2ZXItZ2VuZXJhdGVkIGlvIGlycHMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10eXBlZGVmIHN0cnVjdCBfUldfQ09OVEVYVAotewotCXZvaWQqCQkJcEh3RGF0YTsKLQlzdHJ1Y3QgdXJiCQkqdXJiOwotCXZvaWQqCQkJcENhbGxCYWNrRnVuY3Rpb25QYXJhbWV0ZXI7Ci19IFJXX0NPTlRFWFQsICpQUldfQ09OVEVYVDsKLQotdHlwZWRlZiBzdHJ1Y3QgX1dCVVNCIHsKK3N0cnVjdCB3Yl91c2IgewogCXUzMglJc1VzYjIwOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCXUzMglEZXRlY3RDb3VudDsKLX0gV0JVU0IsICpQV0JVU0I7Cit9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL1JFQURNRSBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL1JFQURNRQppbmRleCA5YzEwZGJiLi4wMjhjMjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9SRUFETUUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvUkVBRE1FCkBAIC00LDQgKzQsNiBAQAogCS0gTGluZGVudCBjbGVhbnVwcwogCS0gbW92ZSB0byB1c2UgdGhlIGluLWtlcm5lbCB3aXJlbGVzcyBzdGFjawogCi1QbGVhc2Ugc2VuZCBhbGwgcGF0Y2hlcyB0byBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorUGxlYXNlIHNlbmQgYW55IHBhdGNoZXMgb3IgY29tcGxhaW50cyBhYm91dCB0aGlzIGRyaXZlciB0byBHcmVnCitLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4gYW5kIGRvbid0IGJvdGhlciB0aGUgdXBzdHJlYW0gd2lyZWxlc3MKK2tlcm5lbCBkZXZlbG9wZXJzIGFib3V0IGl0LCB0aGV5IHdhbnQgbm90aGluZyB0byBkbyB3aXRoIGl0LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oCmluZGV4IDliNzQ2NjUuLmYzZTg3MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4LmgKQEAgLTU2LDc1ICs1NiwzNyBAQAogI2lmbmRlZiBfSEZBMzg0eF9ICiAjZGVmaW5lIF9IRkEzODR4X0gKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGEsYixjKSAoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQorI2RlZmluZSBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oYSwgYiwgYykgKCgoYSkgPDwgMTYpICsgKChiKSA8PCA4KSArIChjKSkKIAotI2RlZmluZSBIRkEzODR4X0xFVkVMX1RPX2RCbSh2KSAgICgweDEwMCArICh2KSAqIDEwMCAvIDI1NSAtIDEwMCkKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogCi0vKi0tLS0tLSBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLS0gTWlucyAmIE1heHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9DTURfQUxMT0NfTEVOX01JTgkoKHUxNik0KQotI2RlZmluZQkJSEZBMzg0eF9DTURfQUxMT0NfTEVOX01BWAkoKHUxNikyNDAwKQotI2RlZmluZQkJSEZBMzg0eF9CQVBfREFUQUxFTl9NQVgJCSgodTE2KTQwOTYpCi0jZGVmaW5lCQlIRkEzODR4X0JBUF9PRkZTRVRfTUFYCQkoKHUxNik0MDk2KQogI2RlZmluZQkJSEZBMzg0eF9QT1JUSURfTUFYCQkoKHUxNik3KQogI2RlZmluZQkJSEZBMzg0eF9OVU1QT1JUU19NQVgJCSgodTE2KShIRkEzODR4X1BPUlRJRF9NQVgrMSkpCi0jZGVmaW5lCQlIRkEzODR4X1BEUl9MRU5fTUFYCQkoKHUxNik1MTIpCS8qIGluIGJ5dGVzLCBmcm9tIEVLICovCi0jZGVmaW5lCQlIRkEzODR4X1BEQV9SRUNTX01BWAkJKCh1MTYpMjAwKQkvKiBhIGd1ZXNzICovCi0jZGVmaW5lCQlIRkEzODR4X1BEQV9MRU5fTUFYCQkoKHUxNikxMDI0KQkvKiBpbiBieXRlcywgZnJvbSBFSyAqLworI2RlZmluZQkJSEZBMzg0eF9QRFJfTEVOX01BWAkJKCh1MTYpNTEyKSAvKiBpbiBieXRlcywgZnJvbSBFSyAqLworI2RlZmluZQkJSEZBMzg0eF9QREFfTEVOX01BWAkJKCh1MTYpMTAyNCkgLyogaW4gYnl0ZXMsIGZyb20gRUsgKi8KICNkZWZpbmUJCUhGQTM4NHhfU0NBTlJFU1VMVF9NQVgJCSgodTE2KTMxKQogI2RlZmluZQkJSEZBMzg0eF9IU0NBTlJFU1VMVF9NQVgJCSgodTE2KTMxKQogI2RlZmluZQkJSEZBMzg0eF9DSElORk9SRVNVTFRfTUFYCSgodTE2KTE2KQotI2RlZmluZQkJSEZBMzg0eF9EUlZSX0ZJRFNUQUNLTEVOX01BWAkoMTApCi0jZGVmaW5lCQlIRkEzODR4X0RSVlJfVFhCVUZfTUFYCQkoc2l6ZW9mKGhmYTM4NHhfdHhfZnJhbWVfdCkgKyBcCi0JCQkJCQlXTEFOX0RBVEFfTUFYTEVOIC0gXAotCQkJCQkJV0xBTl9XRVBfSVZfTEVOIC0gXAotCQkJCQkJV0xBTl9XRVBfSUNWX0xFTiArIDIpCi0jZGVmaW5lCQlIRkEzODR4X0RSVlJfTUFHSUMJCSgweDRhMmQpCi0jZGVmaW5lCQlIRkEzODR4X0lORk9EQVRBX01BWExFTgkJKHNpemVvZihoZmEzODR4X2luZm9kYXRhX3QpKQotI2RlZmluZQkJSEZBMzg0eF9JTkZPRlJNX01BWExFTgkJKHNpemVvZihoZmEzODR4X0luZkZyYW1lX3QpKQotI2RlZmluZQkJSEZBMzg0eF9SSURfR1VFU1NJTkdfTUFYTEVOCTIwNDggIC8qIEknbSBub3QgcmVhbGx5IHN1cmUgKi8KKyNkZWZpbmUJCUhGQTM4NHhfUklEX0dVRVNTSU5HX01BWExFTgkyMDQ4CS8qIEknbSBub3QgcmVhbGx5IHN1cmUgKi8KICNkZWZpbmUJCUhGQTM4NHhfUklEREFUQV9NQVhMRU4JCUhGQTM4NHhfUklEX0dVRVNTSU5HX01BWExFTgogI2RlZmluZQkJSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOCTIwNDgKIAogLyotLS0gU3VwcG9ydCBDb25zdGFudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9CQVBfUFJPQwkJCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X0JBUF9pbnQJCQkJKCh1MTYpMSkKICNkZWZpbmUJCUhGQTM4NHhfUE9SVFRZUEVfSUJTUwkJCSgodTE2KTApCiAjZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX0JTUwkJCSgodTE2KTEpCi0jZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX1dEUwkJCSgodTE2KTIpCiAjZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX1BTVUVET0lCU1MJCSgodTE2KTMpCi0jZGVmaW5lCQlIRkEzODR4X1BPUlRUWVBFX0hPU1RBUCAgICAJCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX1BSSVZJTlZPS0VECQkoKHUxNilCSVQwKQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19FWENMVURFCQkoKHUxNilCSVQxKQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1RYQ1JZUFQJKCh1MTYpQklUNCkKLSNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRElTQUJMRV9SWENSWVBUCSgodTE2KUJJVDcpCi0jZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0RJU0FMTE9XX01JWEVEIAkoKHUxNilCSVQxMSkKLSNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfSVZfaW50RVJWQUwxCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19JVl9pbnRFUlZBTDEwCQkoKHUxNilCSVQ1KQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19JVl9pbnRFUlZBTDUwCQkoKHUxNilCSVQ2KQotI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19JVl9pbnRFUlZBTDEwMAkJKCh1MTYpKEJJVDUgfCBCSVQ2KSkKLSNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRklSTVdBUkVfV1BBICAJCSgodTE2KUJJVDgpCi0jZGVmaW5lCQlIRkEzODR4X1dFUEZMQUdTX0hPU1RfTUlDICAgICAgCQkoKHUxNilCSVQ5KQotI2RlZmluZSAJSEZBMzg0eF9ST0FNTU9ERV9GV1NDQU5fRldST0FNCQkoKHUxNikxKQotI2RlZmluZSAJSEZBMzg0eF9ST0FNTU9ERV9GV1NDQU5fSE9TVFJPQU0JKCh1MTYpMikKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfUFJJVklOVk9LRUQJCSgodTE2KUJJVCgwKSkKKyNkZWZpbmUJCUhGQTM4NHhfV0VQRkxBR1NfRVhDTFVERQkJKCh1MTYpQklUKDEpKQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1RYQ1JZUFQJKCh1MTYpQklUKDQpKQorI2RlZmluZQkJSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1JYQ1JZUFQJKCh1MTYpQklUKDcpKQogI2RlZmluZSAJSEZBMzg0eF9ST0FNTU9ERV9IT1NUU0NBTl9IT1NUUk9BTQkoKHUxNikzKQogI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0RJU0FCTEVECQkoKHUxNikxKQotI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0lOSVRTUkNICQkoKHUxNikyKQotI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0NPTk5fSUJTUwkJKCh1MTYpMykKLSNkZWZpbmUgCUhGQTM4NHhfUE9SVFNUQVRVU19DT05OX0VTUwkJKCh1MTYpNCkKLSNkZWZpbmUgCUhGQTM4NHhfUE9SVFNUQVRVU19PT1JfRVNTCQkoKHUxNik1KQotI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0NPTk5fV0RTCQkoKHUxNik2KQotI2RlZmluZSAJSEZBMzg0eF9QT1JUU1RBVFVTX0hPU1RBUAkJKCh1MTYpOCkKICNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF8xCQkJKCh1MTYpMSkKICNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF8yCQkJKCh1MTYpMikKICNkZWZpbmUJCUhGQTM4NHhfUkFURUJJVF81ZG90NQkJCSgodTE2KTQpCiAjZGVmaW5lCQlIRkEzODR4X1JBVEVCSVRfMTEJCQkoKHUxNik4KQogCi0vKi0tLSBKdXN0IHNvbWUgc3ltYm9saWMgbmFtZXMgZm9yIGxlZ2liaWxpdHkgLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1RYQ01EX05PUkVDTAkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfVFhDTURfUkVDTAkJKCh1MTYpMSkKLQogLyotLS0gTUFDIEludGVybmFsIG1lbW9yeSBjb25zdGFudHMgYW5kIG1hY3JvcyAtLS0tLS0qLwogLyogbWFza3MgYW5kIG1hY3JvcyB1c2VkIHRvIG1hbmlwdWxhdGUgTUFDIGludGVybmFsIG1lbW9yeSBhZGRyZXNzZXMuICovCiAvKiBNQUMgaW50ZXJuYWwgbWVtb3J5IGFkZHJlc3NlcyBhcmUgMjMgYml0IHF1YW50aXRpZXMuICBUaGUgTUFDIHVzZXMKQEAgLTEzOSw1OSArMTAxLDI4IEBACiAgKiBtYWNyb3MgYmVsb3cgaGVscCBoYW5kbGUgc29tZSBvZiB0aGlzLgogICovCiAKLS8qIEhhbmR5IGNvbnN0YW50ICovCi0jZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX09GRl9NQVgJKCh1MTYpMHgwMDdmKQotCiAvKiBNYXNrIGJpdHMgZm9yIGRpc2NhcmRpbmcgdW53YW50ZWQgcGllY2VzIGluIGEgZmxhdCBhZGRyZXNzICovCiAjZGVmaW5lCQlIRkEzODR4X0FERFJfRkxBVF9BVVhfUEFHRV9NQVNLCSgweDAwN2ZmZjgwKQogI2RlZmluZQkJSEZBMzg0eF9BRERSX0ZMQVRfQVVYX09GRl9NQVNLCSgweDAwMDAwMDdmKQogI2RlZmluZQkJSEZBMzg0eF9BRERSX0ZMQVRfQ01EX1BBR0VfTUFTSwkoMHhmZmZmMDAwMCkKICNkZWZpbmUJCUhGQTM4NHhfQUREUl9GTEFUX0NNRF9PRkZfTUFTSwkoMHgwMDAwZmZmZikKIAotLyogTWFzayBiaXRzIGZvciBkaXNjYXJkaW5nIHVud2FudGVkIHBpZWNlcyBpbiBBVVggZm9ybWF0IDE2LWJpdCBhZGRyZXNzIHBhcnRzICovCisvKiBNYXNrIGJpdHMgZm9yIGRpc2NhcmRpbmcgdW53YW50ZWQgcGllY2VzIGluIEFVWCBmb3JtYXQKKyAgIDE2LWJpdCBhZGRyZXNzIHBhcnRzICovCiAjZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX1BBR0VfTUFTSwkoMHhmZmZmKQogI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9PRkZfTUFTSwkoMHgwMDdmKQogCi0vKiBNYXNrIGJpdHMgZm9yIGRpc2NhcmRpbmcgdW53YW50ZWQgcGllY2VzIGluIENNRCBmb3JtYXQgMTYtYml0IGFkZHJlc3MgcGFydHMgKi8KLSNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfUEFHRV9NQVNLCSgweDAwN2YpCi0jZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX09GRl9NQVNLCSgweGZmZmYpCi0KIC8qIE1ha2UgYSAzMi1iaXQgZmxhdCBhZGRyZXNzIGZyb20gQVVYIGZvcm1hdCAxNi1iaXQgcGFnZSBhbmQgb2Zmc2V0ICovCi0jZGVmaW5lCQlIRkEzODR4X0FERFJfQVVYX01LRkxBVChwLG8pCVwKLQkJKCgodTMyKSgoKHUxNikocCkpJkhGQTM4NHhfQUREUl9BVVhfUEFHRV9NQVNLKSkgPDw3KSB8IFwKKyNkZWZpbmUJCUhGQTM4NHhfQUREUl9BVVhfTUtGTEFUKHAsIG8pCVwKKwkJKCgodTMyKSgoKHUxNikocCkpJkhGQTM4NHhfQUREUl9BVVhfUEFHRV9NQVNLKSkgPDwgNykgfCBcCiAJCSgodTMyKSgoKHUxNikobykpJkhGQTM4NHhfQUREUl9BVVhfT0ZGX01BU0spKQogCi0vKiBNYWtlIGEgMzItYml0IGZsYXQgYWRkcmVzcyBmcm9tIENNRCBmb3JtYXQgMTYtYml0IHBhZ2UgYW5kIG9mZnNldCAqLwotI2RlZmluZQkJSEZBMzg0eF9BRERSX0NNRF9NS0ZMQVQocCxvKQlcCi0JCSgoKHUzMikoKCh1MTYpKHApKSZIRkEzODR4X0FERFJfQ01EX1BBR0VfTUFTSykpIDw8MTYpIHwgXAotCQkoKHUzMikoKCh1MTYpKG8pKSZIRkEzODR4X0FERFJfQ01EX09GRl9NQVNLKSkKLQotLyogTWFrZSBBVVggZm9ybWF0IG9mZnNldCBhbmQgcGFnZSBmcm9tIGEgMzItYml0IGZsYXQgYWRkcmVzcyAqLwotI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9NS1BBR0UoZikgXAotCQkoKHUxNikoKCgodTMyKShmKSkmSEZBMzg0eF9BRERSX0ZMQVRfQVVYX1BBR0VfTUFTSyk+PjcpKQotI2RlZmluZQkJSEZBMzg0eF9BRERSX0FVWF9NS09GRihmKSBcCi0JCSgodTE2KSgoKHUzMikoZikpJkhGQTM4NHhfQUREUl9GTEFUX0FVWF9PRkZfTUFTSykpCi0KIC8qIE1ha2UgQ01EIGZvcm1hdCBvZmZzZXQgYW5kIHBhZ2UgZnJvbSBhIDMyLWJpdCBmbGF0IGFkZHJlc3MgKi8KICNkZWZpbmUJCUhGQTM4NHhfQUREUl9DTURfTUtQQUdFKGYpIFwKIAkJKCh1MTYpKCgoKHUzMikoZikpJkhGQTM4NHhfQUREUl9GTEFUX0NNRF9QQUdFX01BU0spPj4xNikpCiAjZGVmaW5lCQlIRkEzODR4X0FERFJfQ01EX01LT0ZGKGYpIFwKIAkJKCh1MTYpKCgodTMyKShmKSkmSEZBMzg0eF9BRERSX0ZMQVRfQ01EX09GRl9NQVNLKSkKIAotLyotLS0gQXV4IHJlZ2lzdGVyIG1hc2tzL3Rlc3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogU29tZSBvZiB0aGUgdXBwZXIgYml0cyBvZiB0aGUgQVVYIG9mZnNldCByZWdpc3RlciBhcmUgdXNlZCB0byAqLwotLyogIHNlbGVjdCBhZGRyZXNzIHNwYWNlLiAqLwotI2RlZmluZQkJSEZBMzg0eF9BVVhfQ1RMX0VYVERTCSgweDAwKQotI2RlZmluZQkJSEZBMzg0eF9BVVhfQ1RMX05WCSgweDAxKQotI2RlZmluZQkJSEZBMzg0eF9BVVhfQ1RMX1BIWQkoMHgwMikKLSNkZWZpbmUJCUhGQTM4NHhfQVVYX0NUTF9JQ1NSQU0JKDB4MDMpCi0KLS8qIE1ha2UgQVVYIHJlZ2lzdGVyIG9mZnNldCBhbmQgcGFnZSB2YWx1ZXMgZnJvbSBhIGZsYXQgYWRkcmVzcyAqLwotI2RlZmluZQkJSEZBMzg0eF9BVVhfTUtPRkYoZiwgYykgXAotCShIRkEzODR4X0FERFJfQVVYX01LT0ZGKGYpIHwgKCgodTE2KShjKSk8PDEyKSkKLSNkZWZpbmUJCUhGQTM4NHhfQVVYX01LUEFHRShmKQlIRkEzODR4X0FERFJfQVVYX01LUEFHRShmKQotCi0KIC8qLS0tIENvbnRyb2xsZXIgTWVtb3J5IGFkZHJlc3NlcyAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUJCUhGQTM4NDJfUERBX0JBU0UJKDB4MDA3ZjAwMDBVTCkKICNkZWZpbmUJCUhGQTM4NDFfUERBX0JBU0UJKDB4MDAzZjAwMDBVTCkKQEAgLTIwMSwxMjQgKzEzMiwyNSBAQAogI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVECQkwCiAjZGVmaW5lCQlIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRAkJMQogI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0ZMQVNIRU5BQkxFRAkJMgotI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0ZMQVNIV1JJVFRFTgkJMwotI2RlZmluZQkJSEZBMzg0eF9ETFNUQVRFX0ZMQVNIV1JJVEVQRU5ESU5HCTQKLSNkZWZpbmUJCUhGQTM4NHhfRExTVEFURV9HRU5FU0lTIAkJNQotCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9PRkYJCQkoMHgwMCkKLSNkZWZpbmUJCUhGQTM4NHhfUEFSQU0wX09GRgkJKDB4MDQpCi0jZGVmaW5lCQlIRkEzODR4X1BBUkFNMV9PRkYJCSgweDA4KQotI2RlZmluZQkJSEZBMzg0eF9QQVJBTTJfT0ZGCQkoMHgwYykKLSNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX09GRgkJKDB4MTApCi0jZGVmaW5lCQlIRkEzODR4X1JFU1AwX09GRgkJKDB4MTQpCi0jZGVmaW5lCQlIRkEzODR4X1JFU1AxX09GRgkJKDB4MTgpCi0jZGVmaW5lCQlIRkEzODR4X1JFU1AyX09GRgkJKDB4MWMpCi0jZGVmaW5lCQlIRkEzODR4X0lORk9GSURfT0ZGCQkoMHgyMCkKLSNkZWZpbmUJCUhGQTM4NHhfUlhGSURfT0ZGCQkoMHg0MCkKLSNkZWZpbmUJCUhGQTM4NHhfQUxMT0NGSURfT0ZGCQkoMHg0NCkKLSNkZWZpbmUJCUhGQTM4NHhfVFhDT01QTEZJRF9PRkYJCSgweDQ4KQotI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QwX09GRgkJKDB4MzApCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVDBfT0ZGCQkoMHgzOCkKLSNkZWZpbmUJCUhGQTM4NHhfREFUQTBfT0ZGCQkoMHg2YykKLSNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMV9PRkYJCSgweDM0KQotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQxX09GRgkJKDB4M2MpCi0jZGVmaW5lCQlIRkEzODR4X0RBVEExX09GRgkJKDB4NzApCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9PRkYJCSgweDYwKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9PRkYJCSgweDY0KQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19PRkYJCSgweDY4KQotI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX09GRgkJKDB4MjgpCi0jZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDBfT0ZGCQkoMHg1MCkKLSNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMV9PRkYJCSgweDU0KQotI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgkJKDB4NTgpCi0jZGVmaW5lCQlIRkEzODR4X0FVWFBBR0VfT0ZGCQkoMHg3NCkKLSNkZWZpbmUJCUhGQTM4NHhfQVVYT0ZGU0VUX09GRgkJKDB4NzgpCi0jZGVmaW5lCQlIRkEzODR4X0FVWERBVEFfT0ZGCQkoMHg3YykKLSNkZWZpbmUJCUhGQTM4NHhfUENJQ09SX09GRgkJKDB4NGMpCi0jZGVmaW5lCQlIRkEzODR4X1BDSUhDUl9PRkYJCSgweDVjKQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfQUREUkhfT0ZGCSgweDgwKQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfQUREUkxfT0ZGCSgweDg0KQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTBfTEVOX09GRgkJKDB4ODgpCi0jZGVmaW5lCQlIRkEzODR4X1BDSV9NMF9DVExfT0ZGCQkoMHg4YykKLSNkZWZpbmUJCUhGQTM4NHhfUENJX1NUQVRVU19PRkYJCSgweDk4KQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfQUREUkhfT0ZGCSgweGEwKQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfQUREUkxfT0ZGCSgweGE0KQotI2RlZmluZQkJSEZBMzg0eF9QQ0lfTTFfTEVOX09GRgkJKDB4YTgpCi0jZGVmaW5lCQlIRkEzODR4X1BDSV9NMV9DVExfT0ZGCQkoMHhhYykKIAogLyotLS0gUmVnaXN0ZXIgRmllbGQgTWFza3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9DTURfQlVTWQkJKCh1MTYpQklUMTUpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9BSU5GTwkJKCh1MTYpKEJJVDE0IHwgQklUMTMgfCBCSVQxMiB8IEJJVDExIHwgQklUMTAgfCBCSVQ5IHwgQklUOCkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9NQUNQT1JUCQkoKHUxNikoQklUMTAgfCBCSVQ5IHwgQklUOCkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9SRUNMCQkoKHUxNilCSVQ4KQotI2RlZmluZQkJSEZBMzg0eF9DTURfV1JJVEUJCSgodTE2KUJJVDgpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERQkJKCh1MTYpKEJJVDkgfCBCSVQ4KSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0NNRENPREUJCSgodTE2KShCSVQ1IHwgQklUNCB8IEJJVDMgfCBCSVQyIHwgQklUMSB8IEJJVDApKQorI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk8JCSgodTE2KShCSVQoMTQpIHwgQklUKDEzKSB8IEJJVCgxMikgfCBCSVQoMTEpIHwgQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9NQUNQT1JUCQkoKHUxNikoQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERQkJKCh1MTYpKEJJVCg5KSB8IEJJVCg4KSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFCQkoKHUxNikoQklUKDUpIHwgQklUKDQpIHwgQklUKDMpIHwgQklUKDIpIHwgQklUKDEpIHwgQklUKDApKSkKIAotI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfUkVTVUxUCQkoKHUxNikoQklUMTQgfCBCSVQxMyB8IEJJVDEyIHwgQklUMTEgfCBCSVQxMCB8IEJJVDkgfCBCSVQ4KSkKLSNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX0NNRENPREUJCSgodTE2KShCSVQ1IHwgQklUNCB8IEJJVDMgfCBCSVQyIHwgQklUMSB8IEJJVDApKQotCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVF9CVVNZCQkoKHUxNilCSVQxNSkKLSNkZWZpbmUJCUhGQTM4NHhfT0ZGU0VUX0VSUgkJKCh1MTYpQklUMTQpCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGCQkoKHUxNikoQklUMTEgfCBCSVQxMCB8IEJJVDkgfCBCSVQ4IHwgQklUNyB8IEJJVDYgfCBCSVQ1IHwgQklUNCB8IEJJVDMgfCBCSVQyIHwgQklUMSkpCi0KLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1RJQ0sJCSgodTE2KUJJVDE1KQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfV1RFUlIJCSgodTE2KUJJVDE0KQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSU5GRFJPUAkJKCh1MTYpQklUMTMpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JTkZPCQkoKHUxNilCSVQ3KQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfRFRJTQkJKCh1MTYpQklUNSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0NNRAkJKCh1MTYpQklUNCkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0FMTE9DCQkoKHUxNilCSVQzKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfVFhFWEMJCSgodTE2KUJJVDIpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9UWAkJKCh1MTYpQklUMSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX1JYCQkoKHUxNilCSVQwKQotCi0jZGVmaW5lICAgICAgICAgSEZBMzg0eF9pbnRfQkFQX09QICAgICAgICAgICAoSEZBMzg0eF9FVlNUQVRfSU5GT3xIRkEzODR4X0VWU1RBVF9SWHxIRkEzODR4X0VWU1RBVF9UWHxIRkEzODR4X0VWU1RBVF9UWEVYQykKLQotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfaW50X05PUk1BTCAgICAgICAgICAgKEhGQTM4NHhfRVZTVEFUX0lORk98SEZBMzg0eF9FVlNUQVRfUlh8SEZBMzg0eF9FVlNUQVRfVFh8SEZBMzg0eF9FVlNUQVRfVFhFWEN8SEZBMzg0eF9FVlNUQVRfSU5GRFJPUHxIRkEzODR4X0VWU1RBVF9BTExPQ3xIRkEzODR4X0VWU1RBVF9EVElNKQotCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX1RJQ0sJCSgodTE2KUJJVDE1KQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9XVEVSUgkJKCh1MTYpQklUMTQpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lORkRST1AJCSgodTE2KUJJVDEzKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JTkZPCQkoKHUxNilCSVQ3KQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9EVElNCQkoKHUxNilCSVQ1KQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9DTUQJCSgodTE2KUJJVDQpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0FMTE9DCQkoKHUxNilCSVQzKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9UWEVYQwkJKCh1MTYpQklUMikKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fVFgJCSgodTE2KUJJVDEpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX1JYCQkoKHUxNilCSVQwKQotCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX1RJQ0sJCSgodTE2KUJJVDE1KQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19XVEVSUgkJKCh1MTYpQklUMTQpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lORkRST1AJCSgodTE2KUJJVDEzKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JTkZPCQkoKHUxNilCSVQ3KQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19EVElNCQkoKHUxNilCSVQ1KQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19DTUQJCSgodTE2KUJJVDQpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0FMTE9DCQkoKHUxNilCSVQzKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19UWEVYQwkJKCh1MTYpQklUMikKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVFgJCSgodTE2KUJJVDEpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX1JYCQkoKHUxNilCSVQwKQotCi0jZGVmaW5lCQlIRkEzODR4X0NPTlRST0xfQVVYRU4JCSgodTE2KShCSVQxNSB8IEJJVDE0KSkKLQorI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfUkVTVUxUCQkoKHUxNikoQklUKDE0KSB8IEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDExKSB8IEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpKQogCiAvKi0tLSBDb21tYW5kIENvZGUgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0tIENvbnRyb2xsZXIgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0lOSVQJCSgodTE2KTB4MDApCiAjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfRU5BQkxFCQkoKHUxNikweDAxKQogI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0RJU0FCTEUJCSgodTE2KTB4MDIpCi0jZGVmaW5lCQlIRkEzODR4X0NNRENPREVfRElBRwkJKCh1MTYpMHgwMykKLQotLyotLS0gQnVmZmVyIE1nbXQgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0FMTE9DCQkoKHUxNikweDBBKQotI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX1RYCQkoKHUxNikweDBCKQotI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0NMUlBSU1QJCSgodTE2KTB4MTIpCiAKIC8qLS0tIFJlZ3VsYXRlIENvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9OT1RJRlkJCSgodTE2KTB4MTApCiAjZGVmaW5lCQlIRkEzODR4X0NNRENPREVfSU5RCQkoKHUxNikweDExKQogCiAvKi0tLSBDb25maWd1cmUgQ29tbWFuZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9DTURDT0RFX0FDQ0VTUwkJKCh1MTYpMHgyMSkKICNkZWZpbmUJCUhGQTM4NHhfQ01EQ09ERV9ET1dOTEQJCSgodTE2KTB4MjIpCiAKIC8qLS0tIERlYnVnZ2luZyBDb21tYW5kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zMjcsOSArMTU5LDYgQEAKICNkZWZpbmUJCUhGQTM4NHhfTU9OSVRPUl9ESVNBQkxFCQkoKHUxNikoMHgwZikpCiAKIC8qLS0tIFJlc3VsdCBDb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1NVQ0NFU1MJCQkoKHUxNikoMHgwMCkpCi0jZGVmaW5lCQlIRkEzODR4X0NBUkRfRkFJTAkJKCh1MTYpKDB4MDEpKQotI2RlZmluZQkJSEZBMzg0eF9OT19CVUZGCQkJKCh1MTYpKDB4MDUpKQogI2RlZmluZQkJSEZBMzg0eF9DTURfRVJSCQkJKCh1MTYpKDB4N0YpKQogCiAvKi0tLSBQcm9ncmFtbWluZyBNb2RlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzQzLDE2ICsxNzIsNiBAQAogI2RlZmluZQkJSEZBMzg0eF9QUk9HTU9ERV9OVgkJKCh1MTYpMHgwMikKICNkZWZpbmUJCUhGQTM4NHhfUFJPR01PREVfTlZXUklURQkoKHUxNikweDAzKQogCi0vKi0tLSBBVVggcmVnaXN0ZXIgZW5hYmxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfQVVYUFcwCQkJKCh1MTYpMHhmZTAxKQotI2RlZmluZQkJSEZBMzg0eF9BVVhQVzEJCQkoKHUxNikweGRjMjMpCi0jZGVmaW5lCQlIRkEzODR4X0FVWFBXMgkJCSgodTE2KTB4YmE0NSkKLQotI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWF9JU0RJU0FCTEVECSgodTE2KTB4MDAwMCkKLSNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhfSVNFTkFCTEVECSgodTE2KTB4YzAwMCkKLSNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhfRE9FTkFCTEUJKCh1MTYpMHg4MDAwKQotI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWF9ET0RJU0FCTEUJKCh1MTYpMHg0MDAwKQotCiAvKi0tLSBSZWNvcmQgSUQgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbmZpZ3VyYXRpb24gUklEczogTmV0d29yayBQYXJhbWV0ZXJzLCBTdGF0aWMgQ29uZmlndXJhdGlvbiBFbnRpdGllcwpAQCAtMzYyLDEzMyArMTgxLDI1IEBACiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRAkoKHUxNikweEZDMDIpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMCSgodTE2KTB4RkMwMykKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTlNTSUQJCSgodTE2KTB4RkMwNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkFUSU1XSU4JKCh1MTYpMHhGQzA1KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU1lTU0NBTEUJCSgodTE2KTB4RkMwNikKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWERBVEFMRU4JKCh1MTYpMHhGQzA3KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUgkJKCh1MTYpMHhGQzA4KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE1FTkFCTEVECSgodTE2KTB4RkMwOSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBNRVBTCQkoKHUxNikweEZDMEEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNVUxUSUNBU1RSWAkoKHUxNikweEZDMEIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQVhTTEVFUERVUgkoKHUxNikweEZDMEMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUhPTEREVVIJKCh1MTYpMHhGQzBEKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOTkFNRQkJKCh1MTYpMHhGQzBFKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dORFRJTVBFUgkoKHUxNikweEZDMTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMQkJKCh1MTYpMHhGQzExKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjIJCSgodTE2KTB4RkMxMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIzCQkoKHUxNikweEZDMTMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNAkJKCh1MTYpMHhGQzE0KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjUJCSgodTE2KTB4RkMxNSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI2CQkoKHUxNikweEZDMTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQ0FTVFBNQlVGRgkoKHUxNikweEZDMTcpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbmZpZ3VyYXRpb24gUklEIGxlbmd0aHM6IE5ldHdvcmsgUGFyYW1zLCBTdGF0aWMgQ29uZmlnIEVudGl0aWVzCiAgIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiBKVVNUIHRoZSBEQVRBIHBhcnQgb2YgdGhlIFJJRCAoZG9lcyBub3QKICAgaW5jbHVkZSB0aGUgbGVuIG9yIGNvZGUgZmllbGRzKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVE9ETzogZmlsbCBpbiB0aGUgcmVzdCBvZiB0aGVzZSAqLwotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUE9SVFRZUEVfTEVOCSgodTE2KTIpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05NQUNBRERSX0xFTgkoKHUxNik2KQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOCSgodTE2KTM0KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOQ0hBTk5FTF9MRU4JKCh1MTYpMikKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOCSgodTE2KTM0KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GT1dOQVRJTVdJTl9MRU4JKCh1MTYpMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNZU1NDQUxFX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTl9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFJfTEVOCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUVOQUJMRURfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUVQU19MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1VTFRJQ0FTVFJYX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTUFYU0xFRVBEVVJfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQTUhPTEREVVJfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZPV05OQU1FX0xFTgkoKHUxNikzNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk9XTkRUSU1QRVJfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSMV9MRU4JKCh1MTYpNikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFIyX0xFTgkoKHUxNik2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjNfTEVOCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRFNBRERSNF9MRU4JKCh1MTYpNikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldEU0FERFI1X0xFTgkoKHUxNik2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0RTQUREUjZfTEVOCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZNQ0FTVFBNQlVGRl9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OX0xFTiAoKHUxNilzaXplb2YodTE2KSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWFNMRUVQRFVSX0xFTgkoKHUxNikwKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb25maWd1cmF0aW9uIFJJRHM6IE5ldHdvcmsgUGFyYW1ldGVycywgRHluYW1pYyBDb25maWd1cmF0aW9uIEVudGl0aWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9HUk9VUEFERFIJCSgodTE2KTB4RkM4MCkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NSRUFURUlCU1MJCSgodTE2KTB4RkM4MSkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gJCSgodTE2KTB4RkM4MikKICNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSAkJKCh1MTYpMHhGQzgzKQogI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTAkJKCh1MTYpMHhGQzg0KQogI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPTUlTQ01PREUJCSgodTE2KTB4RkM4NSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gwCQkoKHUxNikweEZDOTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMQkJKCh1MTYpMHhGQzkxKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDIJCSgodTE2KTB4RkM5MikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gzCQkoKHUxNikweEZDOTMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINAkJKCh1MTYpMHhGQzk0KQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDUJCSgodTE2KTB4RkM5NSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g2CQkoKHUxNikweEZDOTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gwCQkoKHUxNikweEZDOTcpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gxCQkoKHUxNikweEZDOTgpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gyCQkoKHUxNikweEZDOTkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gzCQkoKHUxNikweEZDOUEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g0CQkoKHUxNikweEZDOUIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g1CQkoKHUxNikweEZDOUMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g2CQkoKHUxNikweEZDOUQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMAkJKCh1MTYpMHhGQzlFKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDEJCSgodTE2KTB4RkM5RikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwyCQkoKHUxNikweEZDQTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMwkJKCh1MTYpMHhGQ0ExKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDQJCSgodTE2KTB4RkNBMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw1CQkoKHUxNikweEZDQTMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNgkJKCh1MTYpMHhGQ0E0KQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db25maWd1cmF0aW9uIFJJRCBMZW5ndGhzOiBOZXR3b3JrIFBhcmFtLCBEeW5hbWljIENvbmZpZyBFbnRpdGllcwotICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90Ci0gIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRPRE86IGZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlc2UgKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX0dST1VQQUREUl9MRU4JKCh1MTYpMTYgKiBXTEFOX0FERFJfTEVOKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1JFQVRFSUJTU19MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0hfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0hfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMX0xFTgkoKHUxNik0KQotI2RlZmluZQkJSEZBMzg0eF9SSURfUFJPTUlTQ01PREVfTEVOCSgodTE2KTIpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIMF9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0gxX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDJfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNIM19MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0ZSQUdUSFJFU0g0X0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfRlJBR1RIUkVTSDVfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GUkFHVEhSRVNINl9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDBfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0gxX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNIMl9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDNfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9SVFNUSFJFU0g0X0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUlRTVEhSRVNINV9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1JUU1RIUkVTSDZfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMMF9MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEwxX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDJfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMM19MRU4JKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUkFURUNOVEw0X0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVFhSQVRFQ05UTDVfTEVOCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9UWFJBVEVDTlRMNl9MRU4JKCh1MTYpMCkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29uZmlndXJhdGlvbiBSSURzOiBCZWhhdmlvciBQYXJhbWV0ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9JVElDS1RJTUUJCSgodTE2KTB4RkNFMCkKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29uZmlndXJhdGlvbiBSSUQgTGVuZ3RoczogQmVoYXZpb3IgUGFyYW1ldGVycwotICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90Ci0gIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX0lUSUNLVElNRV9MRU4JKCh1MTYpMikKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJbmZvcm1hdGlvbiBSSURzOiBOSUMgSW5mb3JtYXRpb24KQEAgLTUwMiw0MSArMjEzLDE3IEBACiAjZGVmaW5lCQlIRkEzODR4X1JJRF9OSUNJREVOVElUWQkJKCh1MTYpMHhGRDBCKQogI2RlZmluZQkJSEZBMzg0eF9SSURfTUZJU1VQUkFOR0UJCSgodTE2KTB4RkQwQykKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NGSVNVUFJBTkdFCQkoKHUxNikweEZEMEQpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMTElTVAkJKCh1MTYpMHhGRDEwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUkVHVUxBVE9SWURPTUFJTlMJKCh1MTYpMHhGRDExKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVEVNUFRZUEUJCSgodTE2KTB4RkQxMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NJUwkJCSgodTE2KTB4RkQxMykKICNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQUlERU5USVRZCQkoKHUxNikweEZEMjApCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFTVVBSQU5HRQkJKCh1MTYpMHhGRDIxKQogI2RlZmluZQkJSEZBMzg0eF9SSURfU1RBX01GSUFDVFJBTkdFUwkoKHUxNikweEZEMjIpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9TVEFfQ0ZJQUNUUkFOR0VTCSgodTE2KTB4RkQyMykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0JVSUxEU0VRCQkoKHUxNikweEZGRkUpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GV0lECQkoKHUxNikweEZGRkYpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogSW5mb3JtYXRpb24gUklEIExlbmd0aHM6IE5JQyBJbmZvcm1hdGlvbgogICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CiAgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX01BWExPQURUSU1FX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSX0xFTgkJKCh1MTYpc2l6ZW9mKGhmYTM4NHhfZG93bmxvYWRidWZmZXJfdCkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QUklJREVOVElUWV9MRU4JCSgodTE2KTgpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QUklTVVBSQU5HRV9MRU4JCSgodTE2KTEwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0ZJQUNUUkFOR0VTX0xFTgkJKCh1MTYpMTApCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOCQkoKHUxNikxMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX05JQ0lERU5USVRZX0xFTgkJKCh1MTYpOCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX01GSVNVUFJBTkdFX0xFTgkJKCh1MTYpMTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DRklTVVBSQU5HRV9MRU4JCSgodTE2KTEwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0hBTk5FTExJU1RfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfUkVHVUxBVE9SWURPTUFJTlNfTEVOCSgodTE2KTEyKQotI2RlZmluZQkJSEZBMzg0eF9SSURfVEVNUFRZUEVfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0lTX0xFTgkJCSgodTE2KTQ4MCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQUlERU5USVRZX0xFTgkJKCh1MTYpOCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQVNVUFJBTkdFX0xFTgkJKCh1MTYpMTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9NRklBQ1RSQU5HRVNfTEVOCQkoKHUxNikxMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NGSUFDVFJBTkdFUzJfTEVOCQkoKHUxNikxMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0JVSUxEU0VRX0xFTgkJKCh1MTYpc2l6ZW9mKGhmYTM4NHhfQnVpbGRTZXFfdCkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9GV0lEX0xFTgkJCSgodTE2KXNpemVvZihoZmEzODR4X0ZXSURfdCkpCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEluZm9ybWF0aW9uIFJJRHM6ICBNQUMgSW5mb3JtYXRpb24KQEAgLTU0NCw4NyArMjMxLDI1IEBACiAjZGVmaW5lCQlIRkEzODR4X1JJRF9QT1JUU1RBVFVTCQkoKHUxNikweEZENDApCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UU1NJRAkJKCh1MTYpMHhGRDQxKQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lECSgodTE2KTB4RkQ0MikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NPTU1TUVVBTElUWQkoKHUxNikweEZENDMpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UVFhSQVRFCSgodTE2KTB4RkQ0NCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRCQ05pbnQJKCh1MTYpMHhGRDQ1KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNDQUxFVEhSRVNICSgodTE2KTB4RkQ0NikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1BST1RPQ09MUlNQVElNRQkoKHUxNikweEZENDcpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9TSE9SVFJFVFJZTElNSVQJKCh1MTYpMHhGRDQ4KQogI2RlZmluZQkJSEZBMzg0eF9SSURfTE9OR1JFVFJZTElNSVQJKCh1MTYpMHhGRDQ5KQogI2RlZmluZQkJSEZBMzg0eF9SSURfTUFYVFhMSUZFVElNRQkoKHUxNikweEZENEEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9NQVhSWExJRkVUSU1FCSgodTE2KTB4RkQ0QikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NGUE9MTEFCTEUJCSgodTE2KTB4RkQ0QykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhBTEdPUklUSE1TCSgodTE2KTB4RkQ0RCkKICNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSVZBQ1lPUFRJTVAJKCh1MTYpMHhGRDRGKQogI2RlZmluZQkJSEZBMzg0eF9SSURfREJNQ09NTVNRVUFMSVRZCSgodTE2KTB4RkQ1MSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUxCSgodTE2KTB4RkQ4MCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUyCSgodTE2KTB4RkQ4MSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUzCSgodTE2KTB4RkQ4MikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU0CSgodTE2KTB4RkQ4MykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU1CSgodTE2KTB4RkQ4NCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEU2CSgodTE2KTB4RkQ4NSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX09XTk1BQ0FERFJFU1MJKCh1MTYpMHhGRDg2KQotLy8gI2RlZmluZQlIRkEzODR4X1JJRF9QQ0ZJTkZPCQkoKHUxNikweEZEODcpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9TQ0FOUkVTVUxUUyAgICAgICAJKCh1MTYpMHhGRDg4KSAvLyBORVcKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0hPU1RTQ0FOUkVTVUxUUyAgIAkoKHUxNikweEZEODkpIC8vIE5FVwotI2RlZmluZQkJSEZBMzg0eF9SSURfQVVUSEVOVElDQVRJT05VU0VECSgodTE2KTB4RkQ4QSkgLy8gTkVXCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9BU1NPQ0lBVEVGQUlMVVJFICAJKCh1MTYpMHhGRDhEKSAvLyAxLjguMAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJbmZvcm1hdGlvbiBSSUQgTGVuZ3RoczogIE1BQyBJbmZvcm1hdGlvbgogICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90CiAgIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX1BPUlRTVEFUVVNfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNTSURfTEVOCQkoKHUxNikzNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRF9MRU4JCSgodTE2KVdMQU5fQlNTSURfTEVOKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ09NTVNRVUFMSVRZX0xFTgkJKCh1MTYpc2l6ZW9mKGhmYTM4NHhfY29tbXNxdWFsaXR5X3QpKQogI2RlZmluZQkJSEZBMzg0eF9SSURfREJNQ09NTVNRVUFMSVRZX0xFTgkJKCh1MTYpc2l6ZW9mKGhmYTM4NHhfZGJtY29tbXNxdWFsaXR5X3QpKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURV9MRU4JCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DVVJSRU5UQkNOaW50X0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1NUQUNVUlNDQUxFVEhSRVNIX0xFTgkoKHUxNikxMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0FQQ1VSU0NBTEVUSFJFU0hfTEVOCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QUk9UT0NPTFJTUFRJTUVfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfU0hPUlRSRVRSWUxJTUlUX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0xPTkdSRVRSWUxJTUlUX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX01BWFRYTElGRVRJTUVfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfTUFYUlhMSUZFVElNRV9MRU4JCSgodTE2KTApCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DRlBPTExBQkxFX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhBTEdPUklUSE1TX0xFTgkJKCh1MTYpNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1BSSVZBQ1lPUFRJTVBfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTFfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTJfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTNfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTRfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTVfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURTZfTEVOCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfT1dOTUFDQUREUkVTU19MRU4JCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9QQ0ZJTkZPX0xFTgkJCSgodTE2KTYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBUFBDRklORk9fTEVOCQkoKHUxNilzaXplb2YoaGZhMzg0eF9QQ0ZJbmZvX2RhdGFfdCkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9TQ0FOUkVRVUVTVF9MRU4JCSgodTE2KXNpemVvZihoZmEzODR4X1NjYW5SZXF1ZXN0X2RhdGFfdCkpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4JCSgodTE2KXNpemVvZihoZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9BVVRIRU5USUNBVEVTVEFfTEVOCQkoKHUxNilzaXplb2YoaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdCkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMSU5GT1JFUVVFU1RfTEVOCSgodTE2KXNpemVvZihoZmEzODR4X0NoYW5uZWxJbmZvUmVxdWVzdF9kYXRhX3QpKQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJbmZvcm1hdGlvbiBSSURzOiAgTW9kZW0gSW5mb3JtYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX1BIWVRZUEUJCSgodTE2KTB4RkRDMCkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMCSgodTE2KTB4RkRDMSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRQT1dFUlNUQVRFCSgodTE2KTB4RkRDMikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NDQU1PREUJCSgodTE2KTB4RkRDMykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1NVUFBPUlRFRERBVEFSQVRFUwkoKHUxNikweEZEQzYpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9MRk9TVEFUVVMgICAgICAgICAgICgodTE2KTB4RkRDNykgLy8gMS43LjEKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSW5mb3JtYXRpb24gUklEIExlbmd0aHM6ICBNb2RlbSBJbmZvcm1hdGlvbgotICBUaGlzIGlzIHRoZSBsZW5ndGggb2YgSlVTVCB0aGUgREFUQSBwYXJ0IG9mIHRoZSBSSUQgKGRvZXMgbm90Ci0gIGluY2x1ZGUgdGhlIGxlbiBvciBjb2RlIGZpZWxkcykKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfUklEX1BIWVRZUEVfTEVOCQkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMX0xFTgkJKCh1MTYpMCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NVUlJFTlRQT1dFUlNUQVRFX0xFTgkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ0NBTU9ERV9MRU4JCQkoKHUxNikwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfU1VQUE9SVEVEREFUQVJBVEVTX0xFTgkoKHUxNikxMCkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQVBJIEVOSEFOQ0VNRU5UUyAoTk9UIEFMUkVBRFkgSU1QTEVNRU5URUQpCkBAIC02MzUsNTcgKzI2MCwyMiBAQAogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTIJKCh1MTYpMHhGQzI2KQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTMJKCh1MTYpMHhGQzI3KQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MJCSgodTE2KTB4RkMyOCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUEtFWU1BUFRBQkxFCSgodTE2KTB4RkMyOSkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFVVEhFTlRJQ0FUSU9OCSgodTE2KTB4RkMyQSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORk1BWEFTU09DU1RBVElPTlMJKCh1MTYpMHhGQzJCKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GVFhDT05UUk9MCSgodTE2KTB4RkMyQykKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFCSgodTE2KTB4RkMyRCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkhPU1RBVVRIQVNTT0MJKCh1MTYpMHhGQzJFKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUkNWQ1JDRVJST1IJKCh1MTYpMHhGQzMwKQotLy8gI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GTU1MSUZFCQkoKHUxNikweEZDMzEpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBTFRSRVRSWUNOVAkoKHUxNikweEZDMzIpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZBUEJDTmludAkJKCh1MTYpMHhGQzMzKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GQVBQQ0ZJTkZPCSgodTE2KTB4RkMzNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNUQVBDRklORk8JKCh1MTYpMHhGQzM1KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GUFJJT1JJVFlRVVNBR0UJKCh1MTYpMHhGQzM3KQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GVElNQ1RSTAkJKCh1MTYpMHhGQzQwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GVEhJUlRZMlRBTExZCSgodTE2KTB4RkM0MikKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkVOSFNFQ1VSSVRZCSgodTE2KTB4RkM0MykKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkRCTUFESlVTVCAgCSgodTE2KTB4RkM0NikgLy8gTkVXCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXUEFEQVRBICAgICAgIAkoKHUxNikweEZDNDgpIC8vIDEuNy4wCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQUk9QT0dBVElPTkRFTEFZCSgodTE2KTB4RkM0OSkgLy8gMS43LjYKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlNIT1JUUFJFQU1CTEUJKCh1MTYpMHhGQ0IwKQotI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GRVhDTE9OR1BSRUFNQkxFCSgodTE2KTB4RkNCMSkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkFVVEhSU1BUSU1FT1VUCSgodTE2KTB4RkNCMikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkRCTUFESlVTVCAgCSgodTE2KTB4RkM0NikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldQQURBVEEgICAgICAgCSgodTE2KTB4RkM0OCkKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkJBU0lDUkFURVMJKCh1MTYpMHhGQ0IzKQogI2RlZmluZQkJSEZBMzg0eF9SSURfQ05GU1VQUFJBVEVTCSgodTE2KTB4RkNCNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORkZBTExCQUNLQ1RSTAkoKHUxNikweEZDQjUpIC8vIE5FVwotI2RlZmluZQkJSEZBMzg0eF9SSURfV0VQS0VZU1RBVFVTICAgCSgodTE2KTB4RkNCNikgLy8gTkVXCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9XRVBLRVlNQVBJTkRFWCAJKCh1MTYpMHhGQ0I3KSAvLyBORVcKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0JST0FEQ0FTVEtFWUlEIAkoKHUxNikweEZDQjgpIC8vIE5FVwotI2RlZmluZQkJSEZBMzg0eF9SSURfRU5UU0VDRkxBR0VZSUQgCSgodTE2KTB4RkNCOSkgLy8gTkVXCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZQQVNTSVZFU0NBTkNUUkwJKCh1MTYpMHhGQ0JBKSAvLyBORVcgU1RBCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXUEFIQU5ETElORwkoKHUxNikweEZDQkIpIC8vIDEuNy4wCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9NRENDT05UUk9MICAgICAgICAJKCh1MTYpMHhGQ0JDKSAvLyAxLjcuMC8xLjQuMAotI2RlZmluZQkJSEZBMzg0eF9SSURfTURDQ09VTlRSWSAgICAgICAgCSgodTE2KTB4RkNCRCkgLy8gMS43LjAvMS40LjAKLSNkZWZpbmUJCUhGQTM4NHhfUklEX1RYUE9XRVJNQVggICAgICAgIAkoKHUxNikweEZDQkUpIC8vIDEuNy4wLzEuNC4wCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZMRk9FTkJMRUQgICAgICAJKCh1MTYpMHhGQ0JGKSAvLyAxLjYuMwotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0NBUElORk8gICAgICAgICAgICAgKCh1MTYpMHhGQ0MwKSAvLyAxLjcuMC8xLjMuNwotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0xJU1RFTmludEVSVkFMICAgICAgKCh1MTYpMHhGQ0MxKSAvLyAxLjcuMC8xLjMuNwotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0RJVkVSU0lUWUVOQUJMRUQgICAgKCh1MTYpMHhGQ0MyKSAvLyAxLjcuMC8xLjMuNwotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0xFRF9DT05UUk9MICAgICAgICAgKCh1MTYpMHhGQ0M0KSAvLyAxLjcuNgotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0hGT19ERUxBWSAgICAgICAgICAgKCh1MTYpMHhGQ0M1KSAvLyAxLjcuNgotI2RlZmluZSAgICAgICAgIEhGQTM4NHhfUklEX0RJU1NBTE9XRURCU1NJRCAgICAgKCh1MTYpMHhGQ0M2KSAvLyAxLjguMAotI2RlZmluZQkJSEZBMzg0eF9SSURfU0NBTlJFUVVFU1QJCSgodTE2KTB4RkNFMSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBBU1NJVkVTQ0FOQ1RSTAkoKHUxNikweEZDQkEpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9UWFBPV0VSTUFYICAgICAgICAJKCh1MTYpMHhGQ0JFKQogI2RlZmluZQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1QJCSgodTE2KTB4RkNFMikKICNkZWZpbmUJCUhGQTM4NHhfUklEX0FVVEhFTlRJQ0FURVNUQQkoKHUxNikweEZDRTMpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9DSEFOTkVMSU5GT1JFUVVFU1QJKCh1MTYpMHhGQ0U0KQotI2RlZmluZQkJSEZBMzg0eF9SSURfSE9TVFNDQU4gICAgICAgICAgCSgodTE2KTB4RkNFNSkgLy8gTkVXIFNUQQotI2RlZmluZQkJSEZBMzg0eF9SSURfQVNTT0NJQVRFU1RBCSgodTE2KTB4RkNFNikKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0hPU1RTQ0FOICAgICAgICAgIAkoKHUxNikweEZDRTUpCiAKICNkZWZpbmUJCUhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVlfTEVOCSgodTE2KTYpCiAjZGVmaW5lCQlIRkEzODR4X1JJRF9DTkZXRVAxMjhERUZBVUxUS0VZX0xFTgkoKHUxNikxNCkKLSNkZWZpbmUJCUhGQTM4NHhfUklEX0NORlBSSU9RVVNBR0VfTEVOCQkoKHUxNik0KQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBQRCBSZWNvcmQgY29kZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTY5NywyMiArMjg3LDExIEBACiAjZGVmaW5lIEhGQTM4NHhfUERSX01GSVNVUFJBTkdFCQkoKHUxNikweDAwMDYpCiAjZGVmaW5lIEhGQTM4NHhfUERSX0NGSVNVUFJBTkdFCQkoKHUxNikweDAwMDcpCiAjZGVmaW5lIEhGQTM4NHhfUERSX05JQ0lECQkoKHUxNikweDAwMDgpCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfUkVGREFDX01FQVNVUkVNRU5UUwkoKHUxNikweDAwMTApCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfVkdEQUNfTUVBU1VSRU1FTlRTCSgodTE2KTB4MDAyMCkKLS8vI2RlZmluZSBIRkEzODR4X1BEUl9MRVZFTF9DT01QX01FQVNVUkVNRU5UUwkoKHUxNikweDAwMzApCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfTU9ERU1fVFJJTURBQ19NRUFTVVJFTUVOVFMJKCh1MTYpMHgwMDQwKQotLy8jZGVmaW5lIEhGQTM4NHhfUERSX0NPUkVHQV9IQUNLCQkoKHUxNikweDAwZmYpCiAjZGVmaW5lIEhGQTM4NHhfUERSX01BQ19BRERSRVNTCQkoKHUxNikweDAxMDEpCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfTUtLX0NBTExOQU1FCSgodTE2KTB4MDEwMikKICNkZWZpbmUgSEZBMzg0eF9QRFJfUkVHRE9NQUlOCQkoKHUxNikweDAxMDMpCiAjZGVmaW5lIEhGQTM4NHhfUERSX0FMTE9XRURfQ0hBTk5FTAkoKHUxNikweDAxMDQpCiAjZGVmaW5lIEhGQTM4NHhfUERSX0RFRkFVTFRfQ0hBTk5FTAkoKHUxNikweDAxMDUpCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfUFJJVkFDWV9PUFRJT04JKCh1MTYpMHgwMTA2KQogI2RlZmluZSBIRkEzODR4X1BEUl9URU1QVFlQRQkJKCh1MTYpMHgwMTA3KQotLy8jZGVmaW5lIEhGQTM4NHhfUERSX1JFRkRBQ19TRVRVUAkoKHUxNikweDAxMTApCi0vLyNkZWZpbmUgSEZBMzg0eF9QRFJfVkdEQUNfU0VUVVAJCSgodTE2KTB4MDEyMCkKLS8vI2RlZmluZSBIRkEzODR4X1BEUl9MRVZFTF9DT01QX1NFVFVQCSgodTE2KTB4MDEzMCkKLS8vI2RlZmluZSBIRkEzODR4X1BEUl9UUklNREFDX1NFVFVQCSgodTE2KTB4MDE0MCkKICNkZWZpbmUgSEZBMzg0eF9QRFJfSUZSX1NFVFRJTkcJCSgodTE2KTB4MDIwMCkKICNkZWZpbmUgSEZBMzg0eF9QRFJfUkZSX1NFVFRJTkcJCSgodTE2KTB4MDIwMSkKICNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9CQVNFTElORQkoKHUxNikweDAyMDIpCkBAIC03MjksNyArMzA4LDYgQEAKICNkZWZpbmUgSEZBMzg0eF9QRFJfUENJX1BNQ09ORgkJKCh1MTYpMHgwNDA0KQogI2RlZmluZSBIRkEzODR4X1BEUl9SRkVOUkdZCQkoKHUxNikweDA0MDYpCiAjZGVmaW5lIEhGQTM4NHhfUERSX1VTQl9QT1dFUl9UWVBFICAgICAgKCh1MTYpMHgwNDA3KQotLy8jZGVmaW5lIEhGQTM4NHhfUERSX1VOS05PV040MDgJCSgodTE2KTB4MDQwOCkKICNkZWZpbmUgSEZBMzg0eF9QRFJfVVNCX01BWF9QT1dFUgkoKHUxNikweDA0MDkpCiAjZGVmaW5lIEhGQTM4NHhfUERSX1VTQl9NQU5VRkFDVFVSRVIJKCh1MTYpMHgwNDEwKQogI2RlZmluZSBIRkEzODR4X1BEUl9VU0JfUFJPRFVDVCAgCSgodTE2KTB4MDQxMSkKQEAgLTc0MSw4MzEgKzMxOSwxMjIgQEAKICNkZWZpbmUgSEZBMzg0eF9QRFJfSEZBMzg2MV9NQU5GX1RFU1RJCSgodTE2KTB4MDkwMSkKICNkZWZpbmUgSEZBMzg0eF9QRFJfRU5EX09GX1BEQQkJKCh1MTYpMHgwMDAwKQogCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLS0tLSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKi0tLSBSZWdpc3RlciBJRCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2RlZmluZQkJSEZBMzg0eF9DTUQJCUhGQTM4NHhfQ01EX09GRgotI2RlZmluZQkJSEZBMzg0eF9QQVJBTTAJCUhGQTM4NHhfUEFSQU0wX09GRgotI2RlZmluZQkJSEZBMzg0eF9QQVJBTTEJCUhGQTM4NHhfUEFSQU0xX09GRgotI2RlZmluZQkJSEZBMzg0eF9QQVJBTTIJCUhGQTM4NHhfUEFSQU0yX09GRgotI2RlZmluZQkJSEZBMzg0eF9TVEFUVVMJCUhGQTM4NHhfU1RBVFVTX09GRgotI2RlZmluZQkJSEZBMzg0eF9SRVNQMAkJSEZBMzg0eF9SRVNQMF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfUkVTUDEJCUhGQTM4NHhfUkVTUDFfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X1JFU1AyCQlIRkEzODR4X1JFU1AyX09GRgotI2RlZmluZQkJSEZBMzg0eF9JTkZPRklECQlIRkEzODR4X0lORk9GSURfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X1JYRklECQlIRkEzODR4X1JYRklEX09GRgotI2RlZmluZQkJSEZBMzg0eF9BTExPQ0ZJRAlIRkEzODR4X0FMTE9DRklEX09GRgotI2RlZmluZQkJSEZBMzg0eF9UWENPTVBMRklECUhGQTM4NHhfVFhDT01QTEZJRF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfU0VMRUNUMAkJSEZBMzg0eF9TRUxFQ1QwX09GRgotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVQwCQlIRkEzODR4X09GRlNFVDBfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X0RBVEEwCQlIRkEzODR4X0RBVEEwX09GRgotI2RlZmluZQkJSEZBMzg0eF9TRUxFQ1QxCQlIRkEzODR4X1NFTEVDVDFfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVDEJCUhGQTM4NHhfT0ZGU0VUMV9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfREFUQTEJCUhGQTM4NHhfREFUQTFfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVAkJSEZBMzg0eF9FVlNUQVRfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOCQlIRkEzODR4X0lOVEVOX09GRgotI2RlZmluZQkJSEZBMzg0eF9FVkFDSwkJSEZBMzg0eF9FVkFDS19PRkYKLSNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTAkJSEZBMzg0eF9DT05UUk9MX09GRgotI2RlZmluZQkJSEZBMzg0eF9TV1NVUFBPUlQwCUhGQTM4NHhfU1dTVVBQT1JUMF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfU1dTVVBQT1JUMQlIRkEzODR4X1NXU1VQUE9SVDFfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X1NXU1VQUE9SVDIJSEZBMzg0eF9TV1NVUFBPUlQyX09GRgotI2RlZmluZQkJSEZBMzg0eF9BVVhQQUdFCQlIRkEzODR4X0FVWFBBR0VfT0ZGCi0jZGVmaW5lCQlIRkEzODR4X0FVWE9GRlNFVAlIRkEzODR4X0FVWE9GRlNFVF9PRkYKLSNkZWZpbmUJCUhGQTM4NHhfQVVYREFUQQkJSEZBMzg0eF9BVVhEQVRBX09GRgotI2RlZmluZQkJSEZBMzg0eF9QQ0lDT1IJCUhGQTM4NHhfUENJQ09SX09GRgotI2RlZmluZQkJSEZBMzg0eF9QQ0lIQ1IJCUhGQTM4NHhfUENJSENSX09GRgotCi0KIC8qLS0tIFJlZ2lzdGVyIFRlc3QvR2V0L1NldCBGaWVsZCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZQkJSEZBMzg0eF9DTURfSVNCVVNZKHZhbHVlKQkJKCh1MTYpKCgodTE2KXZhbHVlKSAmIEhGQTM4NHhfQ01EX0JVU1kpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk9fR0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkgJiBIRkEzODR4X0NNRF9BSU5GTykgPj4gOCkpCiAjZGVmaW5lCQlIRkEzODR4X0NNRF9BSU5GT19TRVQodmFsdWUpCQkoKHUxNikoKHUxNikodmFsdWUpIDw8IDgpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfTUFDUE9SVF9HRVQodmFsdWUpCQkoKHUxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKCh1MTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX01BQ1BPUlQpKSkKICNkZWZpbmUJCUhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKHZhbHVlKQkJKCh1MTYpSEZBMzg0eF9DTURfQUlORk9fU0VUKHZhbHVlKSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0lTUkVDTCh2YWx1ZSkJCSgodTE2KShIRkEzODR4X0NNRF9BSU5GT19HRVQoKHUxNikodmFsdWUpICYgSEZBMzg0eF9DTURfUkVDTCkpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfUkVDTF9TRVQodmFsdWUpCQkoKHUxNilIRkEzODR4X0NNRF9BSU5GT19TRVQodmFsdWUpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfUU9TX0dFVCh2YWx1ZSkJCSgodTE2KSgoKCh1MTYpKHZhbHVlKSkmKCh1MTYpMHgzMDAwKSkgPj4gMTIpKQotI2RlZmluZQkJSEZBMzg0eF9DTURfUU9TX1NFVCh2YWx1ZSkJCSgodTE2KSgoKCh1MTYpKHZhbHVlKSkgPDwgMTIpICYgMHgzMDAwKSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX0lTV1JJVEUodmFsdWUpCQkoKHUxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKCh1MTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX1dSSVRFKSkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9XUklURV9TRVQodmFsdWUpCQkoKHUxNilIRkEzODR4X0NNRF9BSU5GT19TRVQoKHUxNil2YWx1ZSkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERV9HRVQodmFsdWUpCQkoKHUxNikoSEZBMzg0eF9DTURfQUlORk9fR0VUKCh1MTYpKHZhbHVlKSAmIEhGQTM4NHhfQ01EX1BST0dNT0RFKSkpCiAjZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERV9TRVQodmFsdWUpCQkoKHUxNilIRkEzODR4X0NNRF9BSU5GT19TRVQoKHUxNil2YWx1ZSkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFX0dFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfQ01EX0NNRENPREUpKQogI2RlZmluZQkJSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQodmFsdWUpCQkoKHUxNikodmFsdWUpKQogCi0jZGVmaW5lCQlIRkEzODR4X1NUQVRVU19SRVNVTFRfR0VUKHZhbHVlKQkoKHUxNikoKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9TVEFUVVNfUkVTVUxUKSA+PiA4KSkKICNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX1JFU1VMVF9TRVQodmFsdWUpCSgoKHUxNikodmFsdWUpKSA8PCA4KQotI2RlZmluZQkJSEZBMzg0eF9TVEFUVVNfQ01EQ09ERV9HRVQodmFsdWUpCSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfU1RBVFVTX0NNRENPREUpCi0jZGVmaW5lCQlIRkEzODR4X1NUQVRVU19DTURDT0RFX1NFVCh2YWx1ZSkJKCh1MTYpKHZhbHVlKSkKLQotI2RlZmluZQkJSEZBMzg0eF9PRkZTRVRfSVNCVVNZKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9PRkZTRVRfQlVTWSkpCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVF9JU0VSUih2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfT0ZGU0VUX0VSUikpCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGX0dFVCh2YWx1ZSkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9PRkZTRVRfREFUQU9GRikpCi0jZGVmaW5lCQlIRkEzODR4X09GRlNFVF9EQVRBT0ZGX1NFVCh2YWx1ZSkJKCh1MTYpKHZhbHVlKSkKLQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNUSUNLKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfVElDSykpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1dURVJSKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfV1RFUlIpKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNJTkZEUk9QKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfSU5GRFJPUCkpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU0lORk8odmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9JTkZPKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTRFRJTSh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0RUSU0pKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNDTUQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9DTUQpKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNBTExPQyh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX0FMTE9DKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZTVEFUX0lTVFhFWEModmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWU1RBVF9UWEVYQykpCi0jZGVmaW5lCQlIRkEzODR4X0VWU1RBVF9JU1RYKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVlNUQVRfVFgpKQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNSWCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZTVEFUX1JYKSkKLQotI2RlZmluZQkJSEZBMzg0eF9FVlNUQVRfSVNCQVBfT1AodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X2ludF9CQVBfT1ApKQotCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lTVElDSyh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fVElDSykpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX1RJQ0tfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDE1KSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSVNXVEVSUih2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fV1RFUlIpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9XVEVSUl9TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMTQpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JU0lORkRST1AodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX0lORkRST1ApKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JTkZEUk9QX1NFVCh2YWx1ZSkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDEzKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSVNJTkZPKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9JTkZPKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSU5GT19TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgNykpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lTRFRJTSh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fRFRJTSkpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0RUSU1fU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDUpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JU0NNRCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fQ01EKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fQ01EX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCA0KSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSVNBTExPQyh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fQUxMT0MpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9BTExPQ19TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMykpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX0lTVFhFWEModmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0lOVEVOX1RYRVhDKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fVFhFWENfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDIpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9JU1RYKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9JTlRFTl9UWCkpCi0jZGVmaW5lCQlIRkEzODR4X2ludEVOX1RYX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAxKSkKLSNkZWZpbmUJCUhGQTM4NHhfaW50RU5fSVNSWCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfSU5URU5fUlgpKQotI2RlZmluZQkJSEZBMzg0eF9pbnRFTl9SWF9TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMCkpCi0KLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNUSUNLKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19USUNLKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVElDS19TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMTUpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1dURVJSKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19XVEVSUikpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX1dURVJSX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAxNCkpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTSU5GRFJPUCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfSU5GRFJPUCkpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lORkRST1BfU0VUKHZhbHVlKQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMTMpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU0lORk8odmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX0lORk8pKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JTkZPX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCA3KSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNEVElNKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19EVElNKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfRFRJTV9TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgNSkpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTQ01EKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19DTUQpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19DTURfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDQpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU0FMTE9DKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19BTExPQykpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0FMTE9DX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAzKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfSVNUWEVYQyh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfRVZBQ0tfVFhFWEMpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19UWEVYQ19TRVQodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMikpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX0lTVFgodmFsdWUpCQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X0VWQUNLX1RYKSkKLSNkZWZpbmUJCUhGQTM4NHhfRVZBQ0tfVFhfU0VUKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDEpKQotI2RlZmluZQkJSEZBMzg0eF9FVkFDS19JU1JYKHZhbHVlKQkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9FVkFDS19SWCkpCi0jZGVmaW5lCQlIRkEzODR4X0VWQUNLX1JYX1NFVCh2YWx1ZSkJCSgodTE2KSgoKHUxNikodmFsdWUpKSA8PCAwKSkKLQotI2RlZmluZQkJSEZBMzg0eF9DT05UUk9MX0FVWEVOX1NFVCh2YWx1ZSkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIDw8IDE0KSkKLSNkZWZpbmUJCUhGQTM4NHhfQ09OVFJPTF9BVVhFTl9HRVQodmFsdWUpCSgodTE2KSgoKHUxNikodmFsdWUpKSA+PiAxNCkpCi0KLS8qIEJ5dGUgT3JkZXIgKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIGhmYTM4NHgyaG9zdF8xNihuKQkoX19sZTE2X3RvX2NwdSgodTE2KShuKSkpCi0jZGVmaW5lIGhmYTM4NHgyaG9zdF8zMihuKQkoX19sZTMyX3RvX2NwdSgodTMyKShuKSkpCi0jZGVmaW5lIGhvc3QyaGZhMzg0eF8xNihuKQkoX19jcHVfdG9fbGUxNigodTE2KShuKSkpCi0jZGVmaW5lIGhvc3QyaGZhMzg0eF8zMihuKQkoX19jcHVfdG9fbGUzMigodTMyKShuKSkpCi0jZW5kaWYKIAogLyogSG9zdCBNYWludGFpbmVkIFN0YXRlIEluZm8gKi8KICNkZWZpbmUgSEZBMzg0eF9TVEFURV9QUkVJTklUCTAKICNkZWZpbmUgSEZBMzg0eF9TVEFURV9JTklUCTEKICNkZWZpbmUgSEZBMzg0eF9TVEFURV9SVU5OSU5HCTIKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tLS0tIFR5cGVzIGFuZCB0aGVpciByZWxhdGVkIGNvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNkZWZpbmUgSEZBMzg0eF9IT1NUQVVUSEFTU09DX0hPU1RBVVRIICAgQklUMAotI2RlZmluZSBIRkEzODR4X0hPU1RBVVRIQVNTT0NfSE9TVEFTU09DICBCSVQxCi0KLSNkZWZpbmUgSEZBMzg0eF9XSEFIQU5ETElOR19ESVNBQkxFRCAgICAgMAotI2RlZmluZSBIRkEzODR4X1dIQUhBTkRMSU5HX1BBU1NUSFJPVUdIICBCSVQxCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBDb21tb25seSB1c2VkIGJhc2ljIHR5cGVzICovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2J5dGVzdHIKLXsKLQl1MTYJbGVuOwotCXU4CWRhdGFbMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfYnl0ZXN0cl90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9ieXRlc3RyIHsKKwl1MTYgbGVuOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X2J5dGVzdHJfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9ieXRlc3RyMzIKLXsKLQl1MTYJbGVuOwotCXU4CWRhdGFbMzJdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2J5dGVzdHIzMl90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9ieXRlc3RyMzIgeworCXUxNiBsZW47CisJdTggZGF0YVszMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X2J5dGVzdHIzMl90OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb25maWd1cmF0aW9uIFJlY29yZCBTdHJ1Y3R1cmVzOgogCU5ldHdvcmsgUGFyYW1ldGVycywgU3RhdGljIENvbmZpZ3VyYXRpb24gRW50aXRpZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFByb3RvdHlwZSBzdHJ1Y3R1cmU6IGFsbCBjb25maWd1cmF0aW9uIHJlY29yZCBzdHJ1Y3R1cmVzIHN0YXJ0IHdpdGgKLXRoZXNlIG1lbWJlcnMgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9yZWNvcmQKLXsKLQl1MTYJcmVjbGVuOwotCXUxNglyaWQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcmVjX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcmVjb3JkMTYKLXsKLQl1MTYJcmVjbGVuOwotCXUxNglyaWQ7Ci0JdTE2CXZhbDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9yZWMxNl90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JlY29yZDMyCi17Ci0JdTE2CXJlY2xlbjsKLQl1MTYJcmlkOwotCXUzMgl2YWw7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcmVjMzI7CiAKIC8qLS0gSGFyZHdhcmUvRmlybXdhcmUgQ29tcG9uZW50IEluZm9ybWF0aW9uIC0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jb21waWRlbnQKLXsKLQl1MTYJaWQ7Ci0JdTE2CXZhcmlhbnQ7Ci0JdTE2CW1ham9yOwotCXUxNgltaW5vcjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jb21waWRlbnRfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfY29tcGlkZW50IHsKKwl1MTYgaWQ7CisJdTE2IHZhcmlhbnQ7CisJdTE2IG1ham9yOworCXUxNiBtaW5vcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfY29tcGlkZW50X3Q7CiAKLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY2FwbGV2ZWwKLXsKLQl1MTYJcm9sZTsKLQl1MTYJaWQ7Ci0JdTE2CXZhcmlhbnQ7Ci0JdTE2CWJvdHRvbTsKLQl1MTYJdG9wOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NhcGxldmVsX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZlBvcnRUeXBlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mUG9ydFR5cGUKLXsKLQl1MTYJY25mUG9ydFR5cGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mUG9ydFR5cGVfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duTUFDQWRkcmVzcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93bk1BQ0FkZHJlc3MKLXsKLQl1OAljbmZPd25NQUNBZGRyZXNzWzZdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bk1BQ0FkZHJlc3NfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mRGVzaXJlZFNTSUQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZEZXNpcmVkU1NJRAotewotCXU4CWNuZkRlc2lyZWRTU0lEWzM0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZEZXNpcmVkU1NJRF90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZPd25DaGFubmVsIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mT3duQ2hhbm5lbAotewotCXUxNgljbmZPd25DaGFubmVsOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bkNoYW5uZWxfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mT3duU1NJRCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk93blNTSUQKLXsKLQl1OAljbmZPd25TU0lEWzM0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZPd25TU0lEX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bkFUSU1XaW5kb3cgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25BVElNV2luZG93Ci17Ci0JdTE2CWNuZk93bkFUSU1XaW5kb3c7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duQVRJTVdpbmRvd190OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZTeXN0ZW1TY2FsZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlN5c3RlbVNjYWxlCi17Ci0JdTE2CWNuZlN5c3RlbVNjYWxlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlN5c3RlbVNjYWxlX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk1heERhdGFMZW5ndGggLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZNYXhEYXRhTGVuZ3RoCi17Ci0JdTE2CWNuZk1heERhdGFMZW5ndGg7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mTWF4RGF0YUxlbmd0aF90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZXRFNBZGRyZXNzIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mV0RTQWRkcmVzcwotewotCXU4CWNuZldEU0FkZHJlc3NbNl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mV0RTQWRkcmVzc190OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZQTUVuYWJsZWQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZQTUVuYWJsZWQKLXsKLQl1MTYJY25mUE1FbmFibGVkOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlBNRW5hYmxlZF90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZQTUVQUyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlBNRVBTCi17Ci0JdTE2CWNuZlBNRVBTOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZlBNRVBTX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk11bHRpY2FzdFJlY2VpdmUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZNdWx0aWNhc3RSZWNlaXZlCi17Ci0JdTE2CWNuZk11bHRpY2FzdFJlY2VpdmU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mTXVsdGljYXN0UmVjZWl2ZV90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jYXBsZXZlbCB7CisJdTE2IHJvbGU7CisJdTE2IGlkOworCXUxNiB2YXJpYW50OworCXUxNiBib3R0b207CisJdTE2IHRvcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfY2FwbGV2ZWxfdDsKIAogLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mQXV0aGVudGljYXRpb24gLS0qLwogI2RlZmluZSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX09QRU5TWVNURU0JMHgwMDAxCiAjZGVmaW5lIEhGQTM4NHhfQ05GQVVUSEVOVElDQVRJT05fU0hBUkVES0VZCTB4MDAwMgogI2RlZmluZSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX0xFQVAgICAgIAkweDAwMDQKIAotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mTWF4U2xlZXBEdXJhdGlvbiAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk1heFNsZWVwRHVyYXRpb24KLXsKLQl1MTYJY25mTWF4U2xlZXBEdXJhdGlvbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZNYXhTbGVlcER1cmF0aW9uX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZlBNSG9sZG92ZXJEdXJhdGlvbiAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZlBNSG9sZG92ZXJEdXJhdGlvbgotewotCXUxNgljbmZQTUhvbGRvdmVyRHVyYXRpb247Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mUE1Ib2xkb3ZlckR1cmF0aW9uX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IGNuZk93bk5hbWUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jbmZPd25OYW1lCi17Ci0JdTgJY25mT3duTmFtZVszNF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY25mT3duTmFtZV90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZPd25EVElNUGVyaW9kIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfY25mT3duRFRJTVBlcmlvZAotewotCXUxNgljbmZPd25EVElNUGVyaW9kOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk93bkRUSU1QZXJpb2RfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogY25mV0RTQWRkcmVzcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZldEU0FkZHJlc3NOCi17Ci0JdTgJY25mV0RTQWRkcmVzc1s2XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9jbmZXRFNBZGRyZXNzTl90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBjbmZNdWx0aWNhc3RQTUJ1ZmZlcmluZyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NuZk11bHRpY2FzdFBNQnVmZmVyaW5nCi17Ci0JdTE2CWNuZk11bHRpY2FzdFBNQnVmZmVyaW5nOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2NuZk11bHRpY2FzdFBNQnVmZmVyaW5nX3Q7Ci0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbmZpZ3VyYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6CiAJTmV0d29yayBQYXJhbWV0ZXJzLCBEeW5hbWljIENvbmZpZ3VyYXRpb24gRW50aXRpZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogR3JvdXBBZGRyZXNzZXMgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Hcm91cEFkZHJlc3NlcwotewotCXU4CU1BQ0FkZHJlc3NbMTZdWzZdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0dyb3VwQWRkcmVzc2VzX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IENyZWF0ZUlCU1MgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DcmVhdGVJQlNTCi17Ci0JdTE2CUNyZWF0ZUlCU1M7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3JlYXRlSUJTU190OwotCiAjZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lOQ1JFQVRFSUJTUyAgICAgICAgICAwCi0jZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lORVNTX0pPSU5DUkVBVEVJQlNTICAxCi0jZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lOSUJTUyAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lORVNTX0pPSU5JQlNTICAgICAgICAzCi0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IEZyYWdtZW50YXRpb25UaHJlc2hvbGQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9GcmFnbWVudGF0aW9uVGhyZXNob2xkCi17Ci0JdTE2CUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfRnJhZ21lbnRhdGlvblRocmVzaG9sZF90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBSVFNUaHJlc2hvbGQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9SVFNUaHJlc2hvbGQKLXsKLQl1MTYJUlRTVGhyZXNob2xkOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1JUU1RocmVzaG9sZF90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBUeFJhdGVDb250cm9sIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfVHhSYXRlQ29udHJvbAotewotCXUxNglUeFJhdGVDb250cm9sOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1R4UmF0ZUNvbnRyb2xfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogUHJvbWlzY3VvdXNNb2RlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfUHJvbWlzY3VvdXNNb2RlCi17Ci0JdTE2CVByb21pc2N1b3VzTW9kZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qcm9taXNjdW91c01vZGVfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogU2NhblJlcXVlc3QgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NjYW5SZXF1ZXN0X2RhdGEKLXsKLQl1MTYJY2hhbm5lbExpc3Q7Ci0JdTE2CXR4UmF0ZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TY2FuUmVxdWVzdF9kYXRhX3Q7CiAKIC8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IEhvc3RTY2FuUmVxdWVzdCAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGEKLXsKLQl1MTYJY2hhbm5lbExpc3Q7Ci0JdTE2CXR4UmF0ZTsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGEgeworCXUxNiBjaGFubmVsTGlzdDsKKwl1MTYgdHhSYXRlOwogCWhmYTM4NHhfYnl0ZXN0cjMyX3Qgc3NpZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90OwogCiAvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBKb2luUmVxdWVzdCAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YQotewotCXU4CWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKLQl1MTYJY2hhbm5lbDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGEgeworCXU4IGJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwl1MTYgY2hhbm5lbDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90OwogCiAvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBhdXRoZW50aWNhdGVTdGF0aW9uIChkYXRhIHBvcnRpb24gb25seSkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGEKLXsKLQl1OAlhZGRyZXNzW1dMQU5fQUREUl9MRU5dOwotCXUxNglzdGF0dXM7Ci0JdTE2CWFsZ29yaXRobTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdDsKLQotLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogYXNzb2NpYXRlU3RhdGlvbiAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfYXNzb2NpYXRlU3RhdGlvbl9kYXRhCi17Ci0JdTgJYWRkcmVzc1tXTEFOX0FERFJfTEVOXTsKLQl1MTYJc3RhdHVzOwotCXUxNgl0eXBlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X2Fzc29jaWF0ZVN0YXRpb25fZGF0YV90OwotCi0vKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBDaGFubmVsSW5mb1JlcXVlc3QgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoYW5uZWxJbmZvUmVxdWVzdF9kYXRhCi17Ci0JdTE2CWNoYW5uZWxMaXN0OwotCXUxNgljaGFubmVsRHdlbGxUaW1lOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NoYW5uZWxJbmZvUmVxdWVzdF9kYXRhX3Q7Ci0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFdFUEtleU1hcHBpbmcgKGRhdGEgcG9ydGlvbiBvbmx5KSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1dFUEtleU1hcHBpbmcKLXsKLQl1OAlhZGRyZXNzW1dMQU5fQUREUl9MRU5dOwotCXUxNglrZXlfaW5kZXg7Ci0JdTggCWtleVsxNl07Ci0JdTggCW1pY190cmFuc21pdF9rZXlbNF07Ci0JdTggCW1pY19yZWNlaXZlX2tleVs0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9XRVBLZXlNYXBwaW5nX3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2F1dGhlbnRpY2F0ZVN0YXRpb25fZGF0YSB7CisJdTggYWRkcmVzc1tFVEhfQUxFTl07CisJdTE2IHN0YXR1czsKKwl1MTYgYWxnb3JpdGhtOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdDsKIAogLyotLSBDb25maWd1cmF0aW9uIFJlY29yZDogV1BBRGF0YSAgICAgICAoZGF0YSBwb3J0aW9uIG9ubHkpIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfV1BBRGF0YQotewotCXUxNglkYXRhbGVuOwotICAgICAgICB1OCAJZGF0YVswXTsgLy8gbWF4IDgwCi19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfV1BBRGF0YV90OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Db25maWd1cmF0aW9uIFJlY29yZCBTdHJ1Y3R1cmVzOiBCZWhhdmlvciBQYXJhbWV0ZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qLS0gQ29uZmlndXJhdGlvbiBSZWNvcmQ6IFRpY2tUaW1lIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfVGlja1RpbWUKLXsKLQl1MTYJVGlja1RpbWU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfVGlja1RpbWVfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfV1BBRGF0YSB7CisJdTE2IGRhdGFsZW47CisJdTggZGF0YVswXTsJCS8vIG1heCA4MAorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9XUEFEYXRhX3Q7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEluZm9ybWF0aW9uIFJlY29yZCBTdHJ1Y3R1cmVzOiBOSUMgSW5mb3JtYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1heExvYWRUaW1lIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWF4TG9hZFRpbWUKLXsKLQl1MTYJTWF4TG9hZFRpbWU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWF4TG9hZFRpbWVfdDsKLQogLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IERvd25Mb2FkQnVmZmVyIC0tKi8KIC8qIE5PVEU6IFRoZSBwYWdlIGFuZCBvZmZzZXQgYXJlIGluIEFVWCBmb3JtYXQgKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfZG93bmxvYWRidWZmZXIKLXsKLQl1MTYJcGFnZTsKLQl1MTYJb2Zmc2V0OwotCXUxNglsZW47Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfZG93bmxvYWRidWZmZXJfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBSSUlkZW50aXR5IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfUFJJSWRlbnRpdHkKLXsKLQl1MTYJUFJJQ29tcElEOwotCXUxNglQUklWYXJpYW50OwotCXUxNglQUklNYWpvclZlcnNpb247Ci0JdTE2CVBSSU1pbm9yVmVyc2lvbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QUklJZGVudGl0eV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUFJJU3VwUmFuZ2UgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QUklTdXBSYW5nZQotewotCXUxNglQUklSb2xlOwotCXUxNglQUklJRDsKLQl1MTYJUFJJVmFyaWFudDsKLQl1MTYJUFJJQm90dG9tOwotCXUxNglQUklUb3A7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUFJJU3VwUmFuZ2VfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENGSUFjdFJhbmdlcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NGSUFjdFJhbmdlcwotewotCXUxNglDRklSb2xlOwotCXUxNglDRklJRDsKLQl1MTYJQ0ZJVmFyaWFudDsKLQl1MTYJQ0ZJQm90dG9tOwotCXUxNglDRklUb3A7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0ZJQWN0UmFuZ2VzX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBOSUNTZXJpYWxOdW1iZXIgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9OSUNTZXJpYWxOdW1iZXIKLXsKLQl1OAlOSUNTZXJpYWxOdW1iZXJbMTJdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X05JQ1NlcmlhbE51bWJlcl90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTklDSWRlbnRpdHkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9OSUNJZGVudGl0eQotewotCXUxNglOSUNDb21wSUQ7Ci0JdTE2CU5JQ1ZhcmlhbnQ7Ci0JdTE2CU5JQ01ham9yVmVyc2lvbjsKLQl1MTYJTklDTWlub3JWZXJzaW9uOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X05JQ0lkZW50aXR5X3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBNRklTdXBSYW5nZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X01GSVN1cFJhbmdlCi17Ci0JdTE2CU1GSVJvbGU7Ci0JdTE2CU1GSUlEOwotCXUxNglNRklWYXJpYW50OwotCXUxNglNRklCb3R0b207Ci0JdTE2CU1GSVRvcDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NRklTdXBSYW5nZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ0ZJU3VwUmFuZ2UgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DRklTdXBSYW5nZQotewotCXUxNglDRklSb2xlOwotCXUxNglDRklJRDsKLQl1MTYJQ0ZJVmFyaWFudDsKLQl1MTYJQ0ZJQm90dG9tOwotCXUxNglDRklUb3A7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0ZJU3VwUmFuZ2VfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEJVSUxEU0VROkJ1aWxkU2VxIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQnVpbGRTZXEgewotCXUxNglwcmltYXJ5OwotCXUxNglzZWNvbmRhcnk7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQnVpbGRTZXFfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEZXSUQgLS0qLwotI2RlZmluZSBIRkEzODR4X0ZXSURfTEVOCTE0Ci10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0ZXSUQgewotCXU4CXByaW1hcnlbSEZBMzg0eF9GV0lEX0xFTl07Ci0JdTgJc2Vjb25kYXJ5W0hGQTM4NHhfRldJRF9MRU5dOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0ZXSURfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENoYW5uZWxMaXN0IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ2hhbm5lbExpc3QKLXsKLQl1MTYJQ2hhbm5lbExpc3Q7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ2hhbm5lbExpc3RfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFJlZ3VsYXRvcnlEb21haW5zIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfUmVndWxhdG9yeURvbWFpbnMKLXsKLQl1OAlSZWd1bGF0b3J5RG9tYWluc1sxMl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUmVndWxhdG9yeURvbWFpbnNfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFRlbXBUeXBlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfVGVtcFR5cGUKLXsKLQl1MTYJVGVtcFR5cGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfVGVtcFR5cGVfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENJUyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NJUwotewotCXU4CUNJU1s0ODBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NJU190OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogU1RBSWRlbnRpdHkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TVEFJZGVudGl0eQotewotCXUxNglTVEFDb21wSUQ7Ci0JdTE2CVNUQVZhcmlhbnQ7Ci0JdTE2CVNUQU1ham9yVmVyc2lvbjsKLQl1MTYJU1RBTWlub3JWZXJzaW9uOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NUQUlkZW50aXR5X3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBTVEFTdXBSYW5nZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1NUQVN1cFJhbmdlCi17Ci0JdTE2CVNUQVJvbGU7Ci0JdTE2CVNUQUlEOwotCXUxNglTVEFWYXJpYW50OwotCXUxNglTVEFCb3R0b207Ci0JdTE2CVNUQVRvcDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TVEFTdXBSYW5nZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTUZJQWN0UmFuZ2VzIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTUZJQWN0UmFuZ2VzCi17Ci0JdTE2CU1GSVJvbGU7Ci0JdTE2CU1GSUlEOwotCXUxNglNRklWYXJpYW50OwotCXUxNglNRklCb3R0b207Ci0JdTE2CU1GSVRvcDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NRklBY3RSYW5nZXNfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfZG93bmxvYWRidWZmZXIgeworCXUxNiBwYWdlOworCXUxNiBvZmZzZXQ7CisJdTE2IGxlbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfZG93bmxvYWRidWZmZXJfdDsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogSW5mb3JtYXRpb24gUmVjb3JkIFN0cnVjdHVyZXM6IE5JQyBJbmZvcm1hdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUG9ydFN0YXR1cyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BvcnRTdGF0dXMKLXsKLQl1MTYJUG9ydFN0YXR1czsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Qb3J0U3RhdHVzX3Q7Ci0KLSNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0RJU0FCTEVECSgodTE2KTEpCi0jZGVmaW5lIEhGQTM4NHhfUFNUQVRVU19TRUFSQ0hJTkcJKCh1MTYpMikKICNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0NPTk5fSUJTUwkoKHUxNikzKQotI2RlZmluZSBIRkEzODR4X1BTVEFUVVNfQ09OTl9FU1MJKCh1MTYpNCkKLSNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX09VVE9GUkFOR0UJKCh1MTYpNSkKLSNkZWZpbmUgSEZBMzg0eF9QU1RBVFVTX0NPTk5fV0RTCSgodTE2KTYpCi0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50U1NJRCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRTU0lECi17Ci0JdTgJQ3VycmVudFNTSURbMzRdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRTU0lEX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50QlNTSUQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50QlNTSUQKLXsKLQl1OAlDdXJyZW50QlNTSURbNl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudEJTU0lEX3Q7CiAKIC8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBjb21tc3F1YWxpdHkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9jb21tc3F1YWxpdHkKLXsKLQl1MTYJQ1FfY3VyckJTUzsKLQl1MTYJQVNMX2N1cnJCU1M7Ci0JdTE2CUFOTF9jdXJyRkM7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfY29tbXNxdWFsaXR5X3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X2NvbW1zcXVhbGl0eSB7CisJdTE2IENRX2N1cnJCU1M7CisJdTE2IEFTTF9jdXJyQlNTOworCXUxNiBBTkxfY3VyckZDOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9jb21tc3F1YWxpdHlfdDsKIAogLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IGRtYmNvbW1zcXVhbGl0eSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X2RibWNvbW1zcXVhbGl0eQotewotCXUxNglDUWRibV9jdXJyQlNTOwotCXUxNglBU0xkYm1fY3VyckJTUzsKLQl1MTYJQU5MZGJtX2N1cnJGQzsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9kYm1jb21tc3F1YWxpdHlfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRUeFJhdGUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50VHhSYXRlCi17Ci0JdTE2CUN1cnJlbnRUeFJhdGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ3VycmVudFR4UmF0ZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQ3VycmVudEJlYWNvbkludGVydmFsIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ3VycmVudEJlYWNvbkludGVydmFsCi17Ci0JdTE2CUN1cnJlbnRCZWFjb25JbnRlcnZhbDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50QmVhY29uSW50ZXJ2YWxfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IEN1cnJlbnRTY2FsZVRocmVzaG9sZHMgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DdXJyZW50U2NhbGVUaHJlc2hvbGRzCi17Ci0JdTE2CUVuZXJneURldGVjdFRocmVzaG9sZDsKLQl1MTYJQ2FycmllckRldGVjdFRocmVzaG9sZDsKLQl1MTYJRGVmZXJEZXRlY3RUaHJlc2hvbGQ7Ci0JdTE2CUNlbGxTZWFyY2hUaHJlc2hvbGQ7IC8qIFN0YXRpb25zIG9ubHkgKi8KLQl1MTYJRGVhZFNwb3RUaHJlc2hvbGQ7IC8qIFN0YXRpb25zIG9ubHkgKi8KLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9DdXJyZW50U2NhbGVUaHJlc2hvbGRzX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQcm90b2NvbFJzcFRpbWUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Qcm90b2NvbFJzcFRpbWUKLXsKLQl1MTYJUHJvdG9jb2xSc3BUaW1lOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1Byb3RvY29sUnNwVGltZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogU2hvcnRSZXRyeUxpbWl0IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2hvcnRSZXRyeUxpbWl0Ci17Ci0JdTE2CVNob3J0UmV0cnlMaW1pdDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9TaG9ydFJldHJ5TGltaXRfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IExvbmdSZXRyeUxpbWl0IC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTG9uZ1JldHJ5TGltaXQKLXsKLQl1MTYJTG9uZ1JldHJ5TGltaXQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTG9uZ1JldHJ5TGltaXRfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IE1heFRyYW5zbWl0TGlmZXRpbWUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9NYXhUcmFuc21pdExpZmV0aW1lCi17Ci0JdTE2CU1heFRyYW5zbWl0TGlmZXRpbWU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWF4VHJhbnNtaXRMaWZldGltZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogTWF4UmVjZWl2ZUxpZmV0aW1lIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfTWF4UmVjZWl2ZUxpZmV0aW1lCi17Ci0JdTE2CU1heFJlY2VpdmVMaWZldGltZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9NYXhSZWNlaXZlTGlmZXRpbWVfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IENGUG9sbGFibGUgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DRlBvbGxhYmxlCi17Ci0JdTE2CUNGUG9sbGFibGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ0ZQb2xsYWJsZV90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogQXV0aGVudGljYXRpb25BbGdvcml0aG1zIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXV0aGVudGljYXRpb25BbGdvcml0aG1zCi17Ci0JdTE2CUF1dGhlbnRpY2F0aW9uVHlwZTsKLQl1MTYJVHlwZUVuYWJsZWQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQXV0aGVudGljYXRpb25BbGdvcml0aG1zX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBBdXRoZW50aWNhdGlvbkFsZ29yaXRobXMKLShkYXRhIG9ubHkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9BdXRoZW50aWNhdGlvbkFsZ29yaXRobXNfZGF0YQotewotCXUxNglBdXRoZW50aWNhdGlvblR5cGU7Ci0JdTE2CVR5cGVFbmFibGVkOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0F1dGhlbnRpY2F0aW9uQWxnb3JpdGhtc19kYXRhX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Qcml2YWN5T3B0aW9uSW1wbGVtZW50ZWQKLXsKLQl1MTYJUHJpdmFjeU9wdGlvbkltcGxlbWVudGVkOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1ByaXZhY3lPcHRpb25JbXBsZW1lbnRlZF90OwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogT3duTUFDQWRkcmVzcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X093bk1BQ0FkZHJlc3MKLXsKLQl1OAlPd25NQUNBZGRyZXNzWzZdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X093bk1BQ0FkZHJlc3NfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFBDRkluZm8gLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QQ0ZJbmZvCi17Ci0JdTE2CU1lZGl1bU9jY3VwYW5jeUxpbWl0OwotCXUxNglDRlBQZXJpb2Q7Ci0JdTE2CUNGUE1heER1cmF0aW9uOwotCXUxNglDRlBGbGFnczsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QQ0ZJbmZvX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBQQ0ZJbmZvIChkYXRhIHBvcnRpb24gb25seSkgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9QQ0ZJbmZvX2RhdGEKLXsKLQl1MTYJTWVkaXVtT2NjdXBhbmN5TGltaXQ7Ci0JdTE2CUNGUFBlcmlvZDsKLQl1MTYJQ0ZQTWF4RHVyYXRpb247Ci0JdTE2CUNGUEZsYWdzOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1BDRkluZm9fZGF0YV90OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1JbmZvcm1hdGlvbiBSZWNvcmQgU3RydWN0dXJlczogTW9kZW0gSW5mb3JtYXRpb24gUmVjb3JkcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKi0tIEluZm9ybWF0aW9uIFJlY29yZDogUEhZVHlwZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BIWVR5cGUKLXsKLQl1MTYJUEhZVHlwZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9QSFlUeXBlX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50Q2hhbm5lbCAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRDaGFubmVsCi17Ci0JdTE2CUN1cnJlbnRDaGFubmVsOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRDaGFubmVsX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDdXJyZW50UG93ZXJTdGF0ZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0N1cnJlbnRQb3dlclN0YXRlCi17Ci0JdTE2CUN1cnJlbnRQb3dlclN0YXRlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0N1cnJlbnRQb3dlclN0YXRlX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBDQ0FNb2RlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ0NBTW9kZQotewotCXUxNglDQ0FNb2RlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NDQU1vZGVfdDsKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IFN1cHBvcnRlZERhdGFSYXRlcyAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1N1cHBvcnRlZERhdGFSYXRlcwotewotCXU4CVN1cHBvcnRlZERhdGFSYXRlc1sxMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfU3VwcG9ydGVkRGF0YVJhdGVzX3Q7Ci0KLS8qLS0gSW5mb3JtYXRpb24gUmVjb3JkOiBMRk9TdGF0dXMgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9MRk9TdGF0dXMKLXsKLQl1MTYgIFRlc3RSZXN1bHRzOwotCXUxNiAgTEZPUmVzdWx0OwotCXUxNiAgVlJIRk9SZXN1bHQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTEZPU3RhdHVzX3Q7Ci0KLSNkZWZpbmUgSEZBMzg0eF9URVNUUkVTVUxUX0FMTFBBU1NFRCAgICBCSVQwCi0jZGVmaW5lIEhGQTM4NHhfVEVTVFJFU1VMVF9MRk9fRkFJTCAgICAgQklUMQotI2RlZmluZSBIRkEzODR4X1RFU1RSRVNVTFRfVlJfSEYwX0ZBSUwgIEJJVDIKLSNkZWZpbmUgSEZBMzg0eF9IT1NUX0ZJUk1fQ09PUkRJTkFURSAgICBCSVQ3Ci0jZGVmaW5lIEhGQTM4NHhfVEVTVFJFU1VMVF9DT09SRElOQVRFICAgQklUMTUKLQotLyotLSBJbmZvcm1hdGlvbiBSZWNvcmQ6IExFRENvbnRyb2wgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9MRURDb250cm9sCi17Ci0JdTE2ICBzZWFyY2hpbmdfb247Ci0JdTE2ICBzZWFyY2hpbmdfb2ZmOwotCXUxNiAgYXNzb2Nfb247Ci0JdTE2ICBhc3NvY19vZmY7Ci0JdTE2ICBhY3Rpdml0eTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9MRURDb250cm9sX3Q7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgRlJBTUUgREVTQ1JJUFRPUlMgQU5EIEZSQU1FIFNUUlVDVFVSRVMKLQotRlJBTUUgREVTQ1JJUFRPUlM6IE9mZnNldHMKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29udHJvbCBJbmZvIChvZmZzZXQgNDQtNTEpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1NUQVRVU19PRkYJCQkoKHUxNikweDQ0KQotI2RlZmluZQkJSEZBMzg0eF9GRF9USU1FX09GRgkJCSgodTE2KTB4NDYpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1NXU1VQUE9SVF9PRkYJCSgodTE2KTB4NEEpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1NJTEVOQ0VfT0ZGCQkJKCh1MTYpMHg0QSkKLSNkZWZpbmUJCUhGQTM4NHhfRkRfU0lHTkFMX09GRgkJCSgodTE2KTB4NEIpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1JBVEVfT0ZGCQkJKCh1MTYpMHg0QykKLSNkZWZpbmUJCUhGQTM4NHhfRkRfUlhGTE9XX09GRgkJCSgodTE2KTB4NEQpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1JFU0VSVkVEX09GRgkJCSgodTE2KTB4NEUpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX1RYQ09OVFJPTF9PRkYJCSgodTE2KTB4NTApCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi04MDIuMTEgSGVhZGVyIChvZmZzZXQgNTItNkIpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X0ZEX0ZSQU1FQ09OVFJPTF9PRkYJCSgodTE2KTB4NTIpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX0RVUkFUSU9OSURfT0ZGCQkoKHUxNikweDU0KQotI2RlZmluZQkJSEZBMzg0eF9GRF9BRERSRVNTMV9PRkYJCQkoKHUxNikweDU2KQotI2RlZmluZQkJSEZBMzg0eF9GRF9BRERSRVNTMl9PRkYJCQkoKHUxNikweDVDKQotI2RlZmluZQkJSEZBMzg0eF9GRF9BRERSRVNTM19PRkYJCQkoKHUxNikweDYyKQotI2RlZmluZQkJSEZBMzg0eF9GRF9TRVFDT05UUk9MX09GRgkJKCh1MTYpMHg2OCkKLSNkZWZpbmUJCUhGQTM4NHhfRkRfQUREUkVTUzRfT0ZGCQkJKCh1MTYpMHg2QSkKLSNkZWZpbmUJCUhGQTM4NHhfRkRfREFUQUxFTl9PRkYJCQkoKHUxNikweDcwKQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotODAyLjMgSGVhZGVyIChvZmZzZXQgNzItN0YpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X0ZEX0RFU1RBRERSRVNTX09GRgkJKCh1MTYpMHg3MikKLSNkZWZpbmUJCUhGQTM4NHhfRkRfU1JDQUREUkVTU19PRkYJCSgodTE2KTB4NzgpCi0jZGVmaW5lCQlIRkEzODR4X0ZEX0RBVEFMRU5HVEhfT0ZGCQkoKHUxNikweDdFKQordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9kYm1jb21tc3F1YWxpdHkgeworCXUxNiBDUWRibV9jdXJyQlNTOworCXUxNiBBU0xkYm1fY3VyckJTUzsKKwl1MTYgQU5MZGJtX2N1cnJGQzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfZGJtY29tbXNxdWFsaXR5X3Q7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEZSQU1FIFNUUlVDVFVSRVM6IENvbW11bmljYXRpb24gRnJhbWVzCkBAIC0xNTczLDUxICs0NDIsNDYgQEAKIENvbW11bmljYXRpb24gRnJhbWVzOiBUcmFuc21pdCBGcmFtZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qLS0gQ29tbXVuaWNhdGlvbiBGcmFtZTogVHJhbnNtaXQgRnJhbWUgU3RydWN0dXJlIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdHhfZnJhbWUKLXsKLQl1MTYJc3RhdHVzOwotCXUxNglyZXNlcnZlZDE7Ci0JdTE2CXJlc2VydmVkMjsKLQl1MzIJc3dfc3VwcG9ydDsKLQl1OAl0eF9yZXRyeWNvdW50OwotCXU4ICAgdHhfcmF0ZTsKLQl1MTYJdHhfY29udHJvbDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfdHhfZnJhbWUgeworCXUxNiBzdGF0dXM7CisJdTE2IHJlc2VydmVkMTsKKwl1MTYgcmVzZXJ2ZWQyOworCXUzMiBzd19zdXBwb3J0OworCXU4IHR4X3JldHJ5Y291bnQ7CisJdTggdHhfcmF0ZTsKKwl1MTYgdHhfY29udHJvbDsKIAogCS8qLS0gODAyLjExIEhlYWRlciBJbmZvcm1hdGlvbiAtLSovCiAKLQl1MTYJZnJhbWVfY29udHJvbDsKLQl1MTYJZHVyYXRpb25faWQ7Ci0JdTgJYWRkcmVzczFbNl07Ci0JdTgJYWRkcmVzczJbNl07Ci0JdTgJYWRkcmVzczNbNl07Ci0JdTE2CXNlcXVlbmNlX2NvbnRyb2w7Ci0JdTgJYWRkcmVzczRbNl07Ci0JdTE2CWRhdGFfbGVuOyAvKiBsaXR0bGUgZW5kaWFuIGZvcm1hdCAqLworCXUxNiBmcmFtZV9jb250cm9sOworCXUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyZXNzMVs2XTsKKwl1OCBhZGRyZXNzMls2XTsKKwl1OCBhZGRyZXNzM1s2XTsKKwl1MTYgc2VxdWVuY2VfY29udHJvbDsKKwl1OCBhZGRyZXNzNFs2XTsKKwl1MTYgZGF0YV9sZW47CQkvKiBsaXR0bGUgZW5kaWFuIGZvcm1hdCAqLwogCiAJLyotLSA4MDIuMyBIZWFkZXIgSW5mb3JtYXRpb24gLS0qLwogCi0JdTgJZGVzdF9hZGRyWzZdOwotCXU4CXNyY19hZGRyWzZdOwotCXUxNglkYXRhX2xlbmd0aDsgLyogYmlnIGVuZGlhbiBmb3JtYXQgKi8KLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF90eF9mcmFtZV90OworCXU4IGRlc3RfYWRkcls2XTsKKwl1OCBzcmNfYWRkcls2XTsKKwl1MTYgZGF0YV9sZW5ndGg7CS8qIGJpZyBlbmRpYW4gZm9ybWF0ICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3R4X2ZyYW1lX3Q7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb21tdW5pY2F0aW9uIEZyYW1lczogRmllbGQgTWFza3MgZm9yIFRyYW5zbWl0IEZyYW1lcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLSBTdGF0dXMgRmllbGQgLS0qLwotI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19BQ0tFUlIJCQkoKHUxNilCSVQ1KQotI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19GT1JNRVJSCQkoKHUxNilCSVQzKQotI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19ESVNDT04JCQkoKHUxNilCSVQyKQotI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19BR0VERVJSCQkoKHUxNilCSVQxKQotI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19SRVRSWUVSUgkJKCh1MTYpQklUMCkKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfQUNLRVJSCQkJKCh1MTYpQklUKDUpKQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19GT1JNRVJSCQkoKHUxNilCSVQoMykpCisjZGVmaW5lCQlIRkEzODR4X1RYU1RBVFVTX0RJU0NPTgkJCSgodTE2KUJJVCgyKSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUgkJKCh1MTYpQklUKDEpKQorI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19SRVRSWUVSUgkJKCh1MTYpQklUKDApKQogLyotLSBUcmFuc21pdCBDb250cm9sIEZpZWxkIC0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfVFhfQ0ZQT0xMCQkJKCh1MTYpQklUMTIpCi0jZGVmaW5lCQlIRkEzODR4X1RYX1BSU1QJCQkJKCh1MTYpQklUMTEpCi0jZGVmaW5lCQlIRkEzODR4X1RYX01BQ1BPUlQJCQkoKHUxNikoQklUMTAgfCBCSVQ5IHwgQklUOCkpCi0jZGVmaW5lCQlIRkEzODR4X1RYX05PRU5DUllQVAkJCSgodTE2KUJJVDcpCi0jZGVmaW5lCQlIRkEzODR4X1RYX1JFVFJZU1RSQVQJCQkoKHUxNikoQklUNiB8IEJJVDUpKQotI2RlZmluZQkJSEZBMzg0eF9UWF9TVFJVQ1RZUEUJCQkoKHUxNikoQklUNCB8IEJJVDMpKQotI2RlZmluZQkJSEZBMzg0eF9UWF9UWEVYCQkJCSgodTE2KUJJVDIpCi0jZGVmaW5lCQlIRkEzODR4X1RYX1RYT0sJCQkJKCh1MTYpQklUMSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfTUFDUE9SVAkJCSgodTE2KShCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKSkKKyNkZWZpbmUJCUhGQTM4NHhfVFhfU1RSVUNUWVBFCQkJKCh1MTYpKEJJVCg0KSB8IEJJVCgzKSkpCisjZGVmaW5lCQlIRkEzODR4X1RYX1RYRVgJCQkJKCh1MTYpQklUKDIpKQorI2RlZmluZQkJSEZBMzg0eF9UWF9UWE9LCQkJCSgodTE2KUJJVCgxKSkKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbW11bmljYXRpb24gRnJhbWVzOiBUZXN0L0dldC9TZXQgRmllbGQgVmFsdWVzIGZvciBUcmFuc21pdCBGcmFtZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE2MjgsODMgKzQ5Miw1MyBAQAogCUhGQTM4NHhfVFhTVEFUVVNfRElTQ09OfEhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUnxcCiAJSEZBMzg0eF9UWFNUQVRVU19SRVRSWUVSUikpCiAKLSNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0FDS0VSUih2KQkoKHUxNikoKCh1MTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfQUNLRVJSKSkKLSNkZWZpbmUJSEZBMzg0eF9UWFNUQVRVU19JU0ZPUk1FUlIodikJKCh1MTYpKCgodTE2KSh2KSkgJiBIRkEzODR4X1RYU1RBVFVTX0ZPUk1FUlIpKQotI2RlZmluZQlIRkEzODR4X1RYU1RBVFVTX0lTRElTQ09OKHYpCSgodTE2KSgoKHUxNikodikpICYgSEZBMzg0eF9UWFNUQVRVU19ESVNDT04pKQotI2RlZmluZQlIRkEzODR4X1RYU1RBVFVTX0lTQUdFREVSUih2KQkoKHUxNikoKCh1MTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfQUdFREVSUikpCi0jZGVmaW5lCUhGQTM4NHhfVFhTVEFUVVNfSVNSRVRSWUVSUih2KQkoKHUxNikoKCh1MTYpKHYpKSAmIEhGQTM4NHhfVFhTVEFUVVNfUkVUUllFUlIpKQorI2RlZmluZQlIRkEzODR4X1RYX1NFVCh2LCBtLCBzKQkJKCgoKHUxNikodikpPDwoKHUxNikocykpKSYoKHUxNikobSkpKQogCi0jZGVmaW5lCUhGQTM4NHhfVFhfR0VUKHYsbSxzKQkJKCgoKHUxNikodikpJigodTE2KShtKSkpPj4oKHUxNikocykpKQotI2RlZmluZQlIRkEzODR4X1RYX1NFVCh2LG0scykJCSgoKCh1MTYpKHYpKTw8KCh1MTYpKHMpKSkmKCh1MTYpKG0pKSkKLQotI2RlZmluZQlIRkEzODR4X1RYX0NGUE9MTF9HRVQodikJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9DRlBPTEwsMTIpCi0jZGVmaW5lCUhGQTM4NHhfVFhfQ0ZQT0xMX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX0NGUE9MTCwxMikKLSNkZWZpbmUJSEZBMzg0eF9UWF9QUlNUX0dFVCh2KQkJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9QUlNULDExKQotI2RlZmluZQlIRkEzODR4X1RYX1BSU1RfU0VUKHYpCQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1BSU1QsMTEpCi0jZGVmaW5lCUhGQTM4NHhfVFhfTUFDUE9SVF9HRVQodikJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9NQUNQT1JULCA4KQogI2RlZmluZQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfTUFDUE9SVCwgOCkKLSNkZWZpbmUJSEZBMzg0eF9UWF9OT0VOQ1JZUFRfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfTk9FTkNSWVBULCA3KQotI2RlZmluZQlIRkEzODR4X1RYX05PRU5DUllQVF9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9OT0VOQ1JZUFQsIDcpCi0jZGVmaW5lCUhGQTM4NHhfVFhfUkVUUllTVFJBVF9HRVQodikJSEZBMzg0eF9UWF9HRVQodiwgSEZBMzg0eF9UWF9SRVRSWVNUUkFULCA1KQotI2RlZmluZQlIRkEzODR4X1RYX1JFVFJZU1RSQVRfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfUkVUUllTVFJBVCwgNSkKLSNkZWZpbmUJSEZBMzg0eF9UWF9TVFJVQ1RZUEVfR0VUKHYpCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfU1RSVUNUWVBFLCAzKQogI2RlZmluZQlIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQodikJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9TVFJVQ1RZUEUsIDMpCi0jZGVmaW5lCUhGQTM4NHhfVFhfVFhFWF9HRVQodikJCUhGQTM4NHhfVFhfR0VUKHYsIEhGQTM4NHhfVFhfVFhFWCwgMikKICNkZWZpbmUJSEZBMzg0eF9UWF9UWEVYX1NFVCh2KQkJSEZBMzg0eF9UWF9TRVQodiwgSEZBMzg0eF9UWF9UWEVYLCAyKQotI2RlZmluZQlIRkEzODR4X1RYX1RYT0tfR0VUKHYpCQlIRkEzODR4X1RYX0dFVCh2LCBIRkEzODR4X1RYX1RYT0ssIDEpCiAjZGVmaW5lCUhGQTM4NHhfVFhfVFhPS19TRVQodikJCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfVFhPSywgMSkKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbW11bmljYXRpb24gRnJhbWVzOiBSZWNlaXZlIEZyYW1lcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyotLSBDb21tdW5pY2F0aW9uIEZyYW1lOiBSZWNlaXZlIEZyYW1lIFN0cnVjdHVyZSAtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3J4X2ZyYW1lCi17Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3J4X2ZyYW1lIHsKIAkvKi0tIE1BQyByeCBkZXNjcmlwdG9yIChoZmEzODR4IGJ5dGUgb3JkZXIpIC0tKi8KLQl1MTYJc3RhdHVzOwotCXUzMgl0aW1lOwotCXU4CXNpbGVuY2U7Ci0JdTgJc2lnbmFsOwotCXU4CXJhdGU7Ci0JdTgJcnhfZmxvdzsKLQl1MTYJcmVzZXJ2ZWQxOwotCXUxNglyZXNlcnZlZDI7CisJdTE2IHN0YXR1czsKKwl1MzIgdGltZTsKKwl1OCBzaWxlbmNlOworCXU4IHNpZ25hbDsKKwl1OCByYXRlOworCXU4IHJ4X2Zsb3c7CisJdTE2IHJlc2VydmVkMTsKKwl1MTYgcmVzZXJ2ZWQyOwogCiAJLyotLSA4MDIuMTEgSGVhZGVyIEluZm9ybWF0aW9uICg4MDIuMTEgYnl0ZSBvcmRlcikgLS0qLwotCXUxNglmcmFtZV9jb250cm9sOwotCXUxNglkdXJhdGlvbl9pZDsKLQl1OAlhZGRyZXNzMVs2XTsKLQl1OAlhZGRyZXNzMls2XTsKLQl1OAlhZGRyZXNzM1s2XTsKLQl1MTYJc2VxdWVuY2VfY29udHJvbDsKLQl1OAlhZGRyZXNzNFs2XTsKLQl1MTYJZGF0YV9sZW47IC8qIGhmYTM4NHggKGxpdHRsZSBlbmRpYW4pIGZvcm1hdCAqLworCXUxNiBmcmFtZV9jb250cm9sOworCXUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyZXNzMVs2XTsKKwl1OCBhZGRyZXNzMls2XTsKKwl1OCBhZGRyZXNzM1s2XTsKKwl1MTYgc2VxdWVuY2VfY29udHJvbDsKKwl1OCBhZGRyZXNzNFs2XTsKKwl1MTYgZGF0YV9sZW47CQkvKiBoZmEzODR4IChsaXR0bGUgZW5kaWFuKSBmb3JtYXQgKi8KIAogCS8qLS0gODAyLjMgSGVhZGVyIEluZm9ybWF0aW9uIC0tKi8KLQl1OAlkZXN0X2FkZHJbNl07Ci0JdTgJc3JjX2FkZHJbNl07Ci0JdTE2CWRhdGFfbGVuZ3RoOyAvKiBJRUVFPyAoYmlnIGVuZGlhbikgZm9ybWF0ICovCi19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcnhfZnJhbWVfdDsKKwl1OCBkZXN0X2FkZHJbNl07CisJdTggc3JjX2FkZHJbNl07CisJdTE2IGRhdGFfbGVuZ3RoOwkvKiBJRUVFPyAoYmlnIGVuZGlhbikgZm9ybWF0ICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3J4X2ZyYW1lX3Q7CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDb21tdW5pY2F0aW9uIEZyYW1lczogRmllbGQgTWFza3MgZm9yIFJlY2VpdmUgRnJhbWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKi0tIE9mZnNldHMgLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9SWF9EQVRBX0xFTl9PRkYJCQkoKHUxNik0NCkKLSNkZWZpbmUJCUhGQTM4NHhfUlhfODAyMTFIRFJfT0ZGCQkJKCh1MTYpMTQpCi0jZGVmaW5lCQlIRkEzODR4X1JYX0RBVEFfT0ZGCQkJKCh1MTYpNjApCiAKIC8qLS0gU3RhdHVzIEZpZWxkcyAtLSovCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01TR1RZUEUJCSgodTE2KShCSVQxNSB8IEJJVDE0IHwgQklUMTMpKQotI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUCQkoKHUxNikoQklUMTAgfCBCSVQ5IHwgQklUOCkpCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX1VOREVDUgkJCSgodTE2KUJJVDEpCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0ZDU0VSUgkJCSgodTE2KUJJVDApCisjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlQJCSgodTE2KShCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfRkNTRVJSCQkJKCh1MTYpQklUKDApKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29tbXVuaWNhdGlvbiBGcmFtZXM6IFRlc3QvR2V0L1NldCBGaWVsZCBWYWx1ZXMgZm9yIFJlY2VpdmUgRnJhbWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01TR1RZUEVfR0VUKHZhbHVlKQkoKHUxNikoKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9SWFNUQVRVU19NU0dUWVBFKSA+PiAxMykpCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01TR1RZUEVfU0VUKHZhbHVlKQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgMTMpKQogI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh2YWx1ZSkJKCh1MTYpKCgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVCkgPj4gOCkpCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlRfU0VUKHZhbHVlKQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgPDwgOCkpCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0lTVU5ERUNSKHZhbHVlKQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X1JYU1RBVFVTX1VOREVDUikpCiAjZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX0lTRkNTRVJSKHZhbHVlKQkoKHUxNikoKCh1MTYpKHZhbHVlKSkgJiBIRkEzODR4X1JYU1RBVFVTX0ZDU0VSUikpCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgRlJBTUUgU1RSVUNUVVJFUzogSW5mb3JtYXRpb24gVHlwZXMgYW5kIEluZm9ybWF0aW9uIEZyYW1lIFN0cnVjdHVyZXMKQEAgLTE3MTIsNyArNTQ2LDYgQEAKIEluZm9ybWF0aW9uIFR5cGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAjZGVmaW5lCQlIRkEzODR4X0lUX0hBTkRPVkVSQUREUgkJCSgodTE2KTB4RjAwMFVMKQotI2RlZmluZQkJSEZBMzg0eF9JVF9IQU5ET1ZFUkRFQVVUSEFERFJFU1MJKCh1MTYpMHhGMDAxVUwpLy9BUCAxLjMuNwogI2RlZmluZQkJSEZBMzg0eF9JVF9DT01NVEFMTElFUwkJCSgodTE2KTB4RjEwMFVMKQogI2RlZmluZQkJSEZBMzg0eF9JVF9TQ0FOUkVTVUxUUwkJCSgodTE2KTB4RjEwMVVMKQogI2RlZmluZQkJSEZBMzg0eF9JVF9DSElORk9SRVNVTFRTCQkoKHUxNikweEYxMDJVTCkKQEAgLTE3MzAsMTI4ICs1NjMsMTEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBJbmZvcm1hdGlvbiBGcmFtZXM6IE5vdGlmaWNhdGlvbiBGcmFtZSBTdHJ1Y3R1cmVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKi0tICBOb3RpZmljYXRpb24gRnJhbWUsTUFDIE1nbXQ6IEhhbmRvdmVyIEFkZHJlc3MgLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9IYW5kb3ZlckFkZHIKLXsKLQl1MTYJZnJhbWVsZW47Ci0JdTE2CWluZm90eXBlOwotCXU4CWhhbmRvdmVyX2FkZHJbV0xBTl9CU1NJRF9MRU5dOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0hhbmRvdmVyQWRkcl90OwogCiAvKi0tICBJbnF1aXJ5IEZyYW1lLCBEaWFnbm9zZTogQ29tbXVuaWNhdGlvbiBUYWxsaWVzIC0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQ29tbVRhbGxpZXMxNgotewotCXUxNgl0eHVuaWNhc3RmcmFtZXM7Ci0JdTE2CXR4bXVsdGljYXN0ZnJhbWVzOwotCXUxNgl0eGZyYWdtZW50czsKLQl1MTYJdHh1bmljYXN0b2N0ZXRzOwotCXUxNgl0eG11bHRpY2FzdG9jdGV0czsKLQl1MTYJdHhkZWZlcnJlZHRyYW5zOwotCXUxNgl0eHNpbmdsZXJldHJ5ZnJhbWVzOwotCXUxNgl0eG11bHRpcGxlcmV0cnlmcmFtZXM7Ci0JdTE2CXR4cmV0cnlsaW1pdGV4Y2VlZGVkOwotCXUxNgl0eGRpc2NhcmRzOwotCXUxNglyeHVuaWNhc3RmcmFtZXM7Ci0JdTE2CXJ4bXVsdGljYXN0ZnJhbWVzOwotCXUxNglyeGZyYWdtZW50czsKLQl1MTYJcnh1bmljYXN0b2N0ZXRzOwotCXUxNglyeG11bHRpY2FzdG9jdGV0czsKLQl1MTYJcnhmY3NlcnJvcnM7Ci0JdTE2CXJ4ZGlzY2FyZHNub2J1ZmZlcjsKLQl1MTYJdHhkaXNjYXJkc3dyb25nc2E7Ci0JdTE2CXJ4ZGlzY2FyZHN3ZXB1bmRlY3I7Ci0JdTE2CXJ4bXNnaW5tc2dmcmFnOwotCXUxNglyeG1zZ2luYmFkbXNnZnJhZzsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Db21tVGFsbGllczE2X3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NvbW1UYWxsaWVzMTYgeworCXUxNiB0eHVuaWNhc3RmcmFtZXM7CisJdTE2IHR4bXVsdGljYXN0ZnJhbWVzOworCXUxNiB0eGZyYWdtZW50czsKKwl1MTYgdHh1bmljYXN0b2N0ZXRzOworCXUxNiB0eG11bHRpY2FzdG9jdGV0czsKKwl1MTYgdHhkZWZlcnJlZHRyYW5zOworCXUxNiB0eHNpbmdsZXJldHJ5ZnJhbWVzOworCXUxNiB0eG11bHRpcGxlcmV0cnlmcmFtZXM7CisJdTE2IHR4cmV0cnlsaW1pdGV4Y2VlZGVkOworCXUxNiB0eGRpc2NhcmRzOworCXUxNiByeHVuaWNhc3RmcmFtZXM7CisJdTE2IHJ4bXVsdGljYXN0ZnJhbWVzOworCXUxNiByeGZyYWdtZW50czsKKwl1MTYgcnh1bmljYXN0b2N0ZXRzOworCXUxNiByeG11bHRpY2FzdG9jdGV0czsKKwl1MTYgcnhmY3NlcnJvcnM7CisJdTE2IHJ4ZGlzY2FyZHNub2J1ZmZlcjsKKwl1MTYgdHhkaXNjYXJkc3dyb25nc2E7CisJdTE2IHJ4ZGlzY2FyZHN3ZXB1bmRlY3I7CisJdTE2IHJ4bXNnaW5tc2dmcmFnOworCXUxNiByeG1zZ2luYmFkbXNnZnJhZzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfQ29tbVRhbGxpZXMxNl90OwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NvbW1UYWxsaWVzMzIKLXsKLQl1MzIJdHh1bmljYXN0ZnJhbWVzOwotCXUzMgl0eG11bHRpY2FzdGZyYW1lczsKLQl1MzIJdHhmcmFnbWVudHM7Ci0JdTMyCXR4dW5pY2FzdG9jdGV0czsKLQl1MzIJdHhtdWx0aWNhc3RvY3RldHM7Ci0JdTMyCXR4ZGVmZXJyZWR0cmFuczsKLQl1MzIJdHhzaW5nbGVyZXRyeWZyYW1lczsKLQl1MzIJdHhtdWx0aXBsZXJldHJ5ZnJhbWVzOwotCXUzMgl0eHJldHJ5bGltaXRleGNlZWRlZDsKLQl1MzIJdHhkaXNjYXJkczsKLQl1MzIJcnh1bmljYXN0ZnJhbWVzOwotCXUzMglyeG11bHRpY2FzdGZyYW1lczsKLQl1MzIJcnhmcmFnbWVudHM7Ci0JdTMyCXJ4dW5pY2FzdG9jdGV0czsKLQl1MzIJcnhtdWx0aWNhc3RvY3RldHM7Ci0JdTMyCXJ4ZmNzZXJyb3JzOwotCXUzMglyeGRpc2NhcmRzbm9idWZmZXI7Ci0JdTMyCXR4ZGlzY2FyZHN3cm9uZ3NhOwotCXUzMglyeGRpc2NhcmRzd2VwdW5kZWNyOwotCXUzMglyeG1zZ2lubXNnZnJhZzsKLQl1MzIJcnhtc2dpbmJhZG1zZ2ZyYWc7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ29tbVRhbGxpZXMzMl90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Db21tVGFsbGllczMyIHsKKwl1MzIgdHh1bmljYXN0ZnJhbWVzOworCXUzMiB0eG11bHRpY2FzdGZyYW1lczsKKwl1MzIgdHhmcmFnbWVudHM7CisJdTMyIHR4dW5pY2FzdG9jdGV0czsKKwl1MzIgdHhtdWx0aWNhc3RvY3RldHM7CisJdTMyIHR4ZGVmZXJyZWR0cmFuczsKKwl1MzIgdHhzaW5nbGVyZXRyeWZyYW1lczsKKwl1MzIgdHhtdWx0aXBsZXJldHJ5ZnJhbWVzOworCXUzMiB0eHJldHJ5bGltaXRleGNlZWRlZDsKKwl1MzIgdHhkaXNjYXJkczsKKwl1MzIgcnh1bmljYXN0ZnJhbWVzOworCXUzMiByeG11bHRpY2FzdGZyYW1lczsKKwl1MzIgcnhmcmFnbWVudHM7CisJdTMyIHJ4dW5pY2FzdG9jdGV0czsKKwl1MzIgcnhtdWx0aWNhc3RvY3RldHM7CisJdTMyIHJ4ZmNzZXJyb3JzOworCXUzMiByeGRpc2NhcmRzbm9idWZmZXI7CisJdTMyIHR4ZGlzY2FyZHN3cm9uZ3NhOworCXUzMiByeGRpc2NhcmRzd2VwdW5kZWNyOworCXUzMiByeG1zZ2lubXNnZnJhZzsKKwl1MzIgcnhtc2dpbmJhZG1zZ2ZyYWc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0NvbW1UYWxsaWVzMzJfdDsKIAogLyotLSAgSW5xdWlyeSBGcmFtZSwgRGlhZ25vc2U6IFNjYW4gUmVzdWx0cyAmIFN1YmZpZWxkcy0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2NhblJlc3VsdFN1YgotewotCXUxNgljaGlkOwotCXUxNglhbmw7Ci0JdTE2CXNsOwotCXU4CWJzc2lkW1dMQU5fQlNTSURfTEVOXTsKLQl1MTYJYmNuaW50OwotCXUxNgljYXBpbmZvOwotCWhmYTM4NHhfYnl0ZXN0cjMyX3QJc3NpZDsKLQl1OAlzdXBwcmF0ZXNbMTBdOyAvKiA4MDIuMTEgaW5mbyBlbGVtZW50ICovCi0JdTE2CXByb2JlcmVzcF9yYXRlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NjYW5SZXN1bHRTdWJfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2NhblJlc3VsdFN1YiB7CisJdTE2IGNoaWQ7CisJdTE2IGFubDsKKwl1MTYgc2w7CisJdTggYnNzaWRbV0xBTl9CU1NJRF9MRU5dOworCXUxNiBiY25pbnQ7CisJdTE2IGNhcGluZm87CisJaGZhMzg0eF9ieXRlc3RyMzJfdCBzc2lkOworCXU4IHN1cHByYXRlc1sxMF07CS8qIDgwMi4xMSBpbmZvIGVsZW1lbnQgKi8KKwl1MTYgcHJvYmVyZXNwX3JhdGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X1NjYW5SZXN1bHRTdWJfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9TY2FuUmVzdWx0Ci17Ci0JdTE2CXJzdmQ7Ci0JdTE2CXNjYW5yZWFzb247Ci0JaGZhMzg0eF9TY2FuUmVzdWx0U3ViX3QKLQkJcmVzdWx0W0hGQTM4NHhfU0NBTlJFU1VMVF9NQVhdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X1NjYW5SZXN1bHRfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfU2NhblJlc3VsdCB7CisJdTE2IHJzdmQ7CisJdTE2IHNjYW5yZWFzb247CisJIGhmYTM4NHhfU2NhblJlc3VsdFN1Yl90IHJlc3VsdFtIRkEzODR4X1NDQU5SRVNVTFRfTUFYXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfU2NhblJlc3VsdF90OwogCiAvKi0tICBJbnF1aXJ5IEZyYW1lLCBEaWFnbm9zZTogQ2hJbmZvIFJlc3VsdHMgJiBTdWJmaWVsZHMtLSovCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoSW5mb1Jlc3VsdFN1YgotewotCXUxNgljaGlkOwotCXUxNglhbmw7Ci0JdTE2CXBubDsKLQl1MTYJYWN0aXZlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X0NoSW5mb1Jlc3VsdFN1Yl90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DaEluZm9SZXN1bHRTdWIgeworCXUxNiBjaGlkOworCXUxNiBhbmw7CisJdTE2IHBubDsKKwl1MTYgYWN0aXZlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdDsKIAotI2RlZmluZSBIRkEzODR4X0NISU5GT1JFU1VMVF9CU1NBQ1RJVkUJQklUMAotI2RlZmluZSBIRkEzODR4X0NISU5GT1JFU1VMVF9QQ0ZBQ1RJVkUJQklUMQorI2RlZmluZSBIRkEzODR4X0NISU5GT1JFU1VMVF9CU1NBQ1RJVkUJQklUKDApCisjZGVmaW5lIEhGQTM4NHhfQ0hJTkZPUkVTVUxUX1BDRkFDVElWRQlCSVQoMSkKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9DaEluZm9SZXN1bHQKLXsKLQl1MTYJc2NhbmNoYW5uZWxzOwotCWhmYTM4NHhfQ2hJbmZvUmVzdWx0U3ViX3QKLQkJcmVzdWx0W0hGQTM4NHhfQ0hJTkZPUkVTVUxUX01BWF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQ2hJbmZvUmVzdWx0X3Q7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X0NoSW5mb1Jlc3VsdCB7CisJdTE2IHNjYW5jaGFubmVsczsKKwkgaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdCByZXN1bHRbSEZBMzg0eF9DSElORk9SRVNVTFRfTUFYXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfQ2hJbmZvUmVzdWx0X3Q7CiAKIC8qLS0gIElucXVpcnkgRnJhbWUsIERpYWdub3NlOiBIb3N0IFNjYW4gUmVzdWx0cyAmIFN1YmZpZWxkcy0tKi8KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfSFNjYW5SZXN1bHRTdWIKLXsKLQl1MTYJY2hpZDsKLQl1MTYJYW5sOwotCXUxNglzbDsKLQl1OAlic3NpZFtXTEFOX0JTU0lEX0xFTl07Ci0JdTE2CWJjbmludDsKLQl1MTYJY2FwaW5mbzsKLQloZmEzODR4X2J5dGVzdHIzMl90CXNzaWQ7Ci0JdTgJc3VwcHJhdGVzWzEwXTsgLyogODAyLjExIGluZm8gZWxlbWVudCAqLwotCXUxNglwcm9iZXJlc3BfcmF0ZTsKLQl1MTYJYXRpbTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9IU2NhblJlc3VsdFN1Yl90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9IU2NhblJlc3VsdFN1YiB7CisJdTE2IGNoaWQ7CisJdTE2IGFubDsKKwl1MTYgc2w7CisJdTggYnNzaWRbV0xBTl9CU1NJRF9MRU5dOworCXUxNiBiY25pbnQ7CisJdTE2IGNhcGluZm87CisJaGZhMzg0eF9ieXRlc3RyMzJfdCBzc2lkOworCXU4IHN1cHByYXRlc1sxMF07CS8qIDgwMi4xMSBpbmZvIGVsZW1lbnQgKi8KKwl1MTYgcHJvYmVyZXNwX3JhdGU7CisJdTE2IGF0aW07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0hTY2FuUmVzdWx0U3ViX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfSFNjYW5SZXN1bHQKLXsKLQl1MTYJbnJlc3VsdDsKLQl1MTYJcnN2ZDsKLQloZmEzODR4X0hTY2FuUmVzdWx0U3ViX3QKLQkJcmVzdWx0W0hGQTM4NHhfSFNDQU5SRVNVTFRfTUFYXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9IU2NhblJlc3VsdF90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9IU2NhblJlc3VsdCB7CisJdTE2IG5yZXN1bHQ7CisJdTE2IHJzdmQ7CisJIGhmYTM4NHhfSFNjYW5SZXN1bHRTdWJfdCByZXN1bHRbSEZBMzg0eF9IU0NBTlJFU1VMVF9NQVhdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9IU2NhblJlc3VsdF90OwogCiAvKi0tICBVbnNvbGljaXRlZCBGcmFtZSwgTUFDIE1nbXQ6IExpbmtTdGF0dXMgLS0qLwogCkBAIC0xODYzLDEwMCArNjc4LDY3IEBACiAjZGVmaW5lIEhGQTM4NHhfTElOS19BUF9JTlJBTkdFCQkoKHUxNik1KQogI2RlZmluZSBIRkEzODR4X0xJTktfQVNTT0NGQUlMCQkoKHUxNik2KQogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0xpbmtTdGF0dXMKLXsKLQl1MTYJbGlua3N0YXR1czsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9MaW5rU3RhdHVzX3Q7Ci0KK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfTGlua1N0YXR1cyB7CisJdTE2IGxpbmtzdGF0dXM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0xpbmtTdGF0dXNfdDsKIAogLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBBc3NvY2lhdGlvblN0YXR1cyAoLS0qLwogCiAjZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfU1RBQVNTT0MJKCh1MTYpMSkKICNkZWZpbmUgSEZBMzg0eF9BU1NPQ1NUQVRVU19SRUFTU09DCSgodTE2KTIpCi0jZGVmaW5lIEhGQTM4NHhfQVNTT0NTVEFUVVNfRElTQVNTT0MJKCh1MTYpMykKLSNkZWZpbmUgSEZBMzg0eF9BU1NPQ1NUQVRVU19BU1NPQ0ZBSUwJKCh1MTYpNCkKICNkZWZpbmUgSEZBMzg0eF9BU1NPQ1NUQVRVU19BVVRIRkFJTAkoKHUxNik1KQogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0Fzc29jU3RhdHVzCi17Ci0JdTE2CWFzc29jc3RhdHVzOwotCXU4CXN0YV9hZGRyW1dMQU5fQUREUl9MRU5dOwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9Bc3NvY1N0YXR1cyB7CisJdTE2IGFzc29jc3RhdHVzOworCXU4IHN0YV9hZGRyW0VUSF9BTEVOXTsKIAkvKiBvbGRfYXBfYWRkciBpcyBvbmx5IHZhbGlkIGlmIGFzc29jc3RhdHVzID09IDIgKi8KLQl1OAlvbGRfYXBfYWRkcltXTEFOX0FERFJfTEVOXTsKLQl1MTYJcmVhc29uOwotCXUxNglyZXNlcnZlZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9Bc3NvY1N0YXR1c190OworCXU4IG9sZF9hcF9hZGRyW0VUSF9BTEVOXTsKKwl1MTYgcmVhc29uOworCXUxNiByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfQXNzb2NTdGF0dXNfdDsKIAogLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBBdXRoUmVxdWVzdCAoQVAgT25seSkgLS0qLwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0F1dGhSZXF1ZXN0Ci17Ci0JdTgJc3RhX2FkZHJbV0xBTl9BRERSX0xFTl07Ci0JdTE2CWFsZ29yaXRobTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9BdXRoUmVxX3Q7Ci0KLS8qLS0gIFVuc29saWNpdGVkIEZyYW1lLCBNQUMgTWdtdDogQXNzb2NSZXF1ZXN0IChBUCBPbmx5KSAtLSovCi0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfQXNzb2NSZXF1ZXN0Ci17Ci0JdTgJc3RhX2FkZHJbV0xBTl9BRERSX0xFTl07Ci0JdTE2CXR5cGU7Ci0JdTggICB3cGFfZGF0YVs4MF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfQXNzb2NSZXFfdDsKLQotCi0jZGVmaW5lIEhGQTM4NHhfQVNTT0NSRVFfVFlQRV9BU1NPQyAgICAgMAotI2RlZmluZSBIRkEzODR4X0FTU09DUkVRX1RZUEVfUkVBU1NPQyAgIDEKLQotLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBNSUMgRmFpbHVyZSAgKEFQIE9ubHkpIC0tKi8KLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9NaWNGYWlsdXJlCi17Ci0JdTgJc2VuZGVyW1dMQU5fQUREUl9MRU5dOwotCXU4CWRlc3RbV0xBTl9BRERSX0xFTl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfTWljRmFpbHVyZV90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9BdXRoUmVxdWVzdCB7CisJdTggc3RhX2FkZHJbRVRIX0FMRU5dOworCXUxNiBhbGdvcml0aG07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X0F1dGhSZXFfdDsKIAogLyotLSAgVW5zb2xpY2l0ZWQgRnJhbWUsIE1BQyBNZ210OiBQU1VzZXJDb3VudCAoQVAgT25seSkgLS0qLwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X1BTVXNlckNvdW50Ci17Ci0JdTE2CXVzZXJjbnQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfUFNVc2VyQ291bnRfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfUFNVc2VyQ291bnQgeworCXUxNiB1c2VyY250OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9QU1VzZXJDb3VudF90OwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X0tleUlEQ2hhbmdlZAotewotCXU4CXN0YV9hZGRyW1dMQU5fQUREUl9MRU5dOwotCXUxNglrZXlpZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9LZXlJRENoYW5nZWRfdDsKK3R5cGVkZWYgc3RydWN0IGhmYTM4NHhfS2V5SURDaGFuZ2VkIHsKKwl1OCBzdGFfYWRkcltFVEhfQUxFTl07CisJdTE2IGtleWlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9LZXlJRENoYW5nZWRfdDsKIAogLyotLSAgQ29sbGVjdGlvbiBvZiBhbGwgSW5mIGZyYW1lcyAtLS0tLS0tLS0tLS0tLS0qLwogdHlwZWRlZiB1bmlvbiBoZmEzODR4X2luZm9kYXRhIHsKLQloZmEzODR4X0NvbW1UYWxsaWVzMTZfdAljb21tdGFsbGllczE2OwotCWhmYTM4NHhfQ29tbVRhbGxpZXMzMl90CWNvbW10YWxsaWVzMzI7Ci0JaGZhMzg0eF9TY2FuUmVzdWx0X3QJc2NhbnJlc3VsdDsKLQloZmEzODR4X0NoSW5mb1Jlc3VsdF90CWNoaW5mb3Jlc3VsdDsKLQloZmEzODR4X0hTY2FuUmVzdWx0X3QJaHNjYW5yZXN1bHQ7Ci0JaGZhMzg0eF9MaW5rU3RhdHVzX3QJbGlua3N0YXR1czsKLQloZmEzODR4X0Fzc29jU3RhdHVzX3QJYXNzb2NzdGF0dXM7Ci0JaGZhMzg0eF9BdXRoUmVxX3QJYXV0aHJlcTsKLQloZmEzODR4X1BTVXNlckNvdW50X3QJcHN1c2VyY250OwotCWhmYTM4NHhfS2V5SURDaGFuZ2VkX3QgIGtleWlkY2hhbmdlZDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9pbmZvZGF0YV90OworCWhmYTM4NHhfQ29tbVRhbGxpZXMxNl90IGNvbW10YWxsaWVzMTY7CisJaGZhMzg0eF9Db21tVGFsbGllczMyX3QgY29tbXRhbGxpZXMzMjsKKwloZmEzODR4X1NjYW5SZXN1bHRfdCBzY2FucmVzdWx0OworCWhmYTM4NHhfQ2hJbmZvUmVzdWx0X3QgY2hpbmZvcmVzdWx0OworCWhmYTM4NHhfSFNjYW5SZXN1bHRfdCBoc2NhbnJlc3VsdDsKKwloZmEzODR4X0xpbmtTdGF0dXNfdCBsaW5rc3RhdHVzOworCWhmYTM4NHhfQXNzb2NTdGF0dXNfdCBhc3NvY3N0YXR1czsKKwloZmEzODR4X0F1dGhSZXFfdCBhdXRocmVxOworCWhmYTM4NHhfUFNVc2VyQ291bnRfdCBwc3VzZXJjbnQ7CisJaGZhMzg0eF9LZXlJRENoYW5nZWRfdCBrZXlpZGNoYW5nZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X2luZm9kYXRhX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfSW5mRnJhbWUKLXsKLQl1MTYJCQlmcmFtZWxlbjsKLQl1MTYJCQlpbmZvdHlwZTsKLQloZmEzODR4X2luZm9kYXRhX3QJaW5mbzsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9JbmZGcmFtZV90OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9JbmZGcmFtZSB7CisJdTE2IGZyYW1lbGVuOworCXUxNiBpbmZvdHlwZTsKKwloZmEzODR4X2luZm9kYXRhX3QgaW5mbzsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfSW5mRnJhbWVfdDsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVVNCIFBhY2tldCBzdHJ1Y3R1cmVzIGFuZCBjb25zdGFudHMuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIFNob3VsZCBiZSBzZW50IHRvIHRoZSBjdHJsb3V0IGVuZHBvaW50ICovCi0jZGVmaW5lIEhGQTM4NHhfVVNCX0VOQlVMS0lOCTYKLQogLyogU2hvdWxkIGJlIHNlbnQgdG8gdGhlIGJ1bGtvdXQgZW5kcG9pbnQgKi8KICNkZWZpbmUgSEZBMzg0eF9VU0JfVFhGUk0JMAogI2RlZmluZSBIRkEzODR4X1VTQl9DTURSRVEJMQpAQCAtMTk2Niw3ICs3NDgsNiBAQAogI2RlZmluZSBIRkEzODR4X1VTQl9STUVNUkVRCTUKIAogLyogUmVjZWl2ZWQgZnJvbSB0aGUgYnVsa2luIGVuZHBvaW50ICovCi0jZGVmaW5lIEhGQTM4NHhfVVNCX0lTRlJNKGEpCSghKChhKSAmIDB4ODAwMCkpCiAjZGVmaW5lIEhGQTM4NHhfVVNCX0lTVFhGUk0oYSkJKCgoYSkgJiAweDkwMDApID09IDB4MTAwMCkKICNkZWZpbmUgSEZBMzg0eF9VU0JfSVNSWEZSTShhKQkoISgoYSkgJiAweDkwMDApKQogI2RlZmluZSBIRkEzODR4X1VTQl9JTkZPRlJNCTB4ODAwMApAQCAtMTk4MiwzODAgKzc2MywxMzUgQEAKIC8qIFJlcXVlc3QgKGJ1bGsgT1VUKSBwYWNrZXQgY29udGVudHMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfdHhmcm0gewotCWhmYTM4NHhfdHhfZnJhbWVfdAlkZXNjOwotCXU4CQkJZGF0YVtXTEFOX0RBVEFfTUFYTEVOXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfdHhmcm1fdDsKKwloZmEzODR4X3R4X2ZyYW1lX3QgZGVzYzsKKwl1OCBkYXRhW1dMQU5fREFUQV9NQVhMRU5dOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF91c2JfdHhmcm1fdDsKIAogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfY21kcmVxIHsKLQl1MTYJCXR5cGU7Ci0JdTE2CQljbWQ7Ci0JdTE2CQlwYXJtMDsKLQl1MTYJCXBhcm0xOwotCXUxNgkJcGFybTI7Ci0JdTgJCXBhZFs1NF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX2NtZHJlcV90OworCXUxNiB0eXBlOworCXUxNiBjbWQ7CisJdTE2IHBhcm0wOworCXUxNiBwYXJtMTsKKwl1MTYgcGFybTI7CisJdTggcGFkWzU0XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfdXNiX2NtZHJlcV90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl93cmlkcmVxIHsKLQl1MTYJCXR5cGU7Ci0JdTE2CQlmcm1sZW47Ci0JdTE2CQlyaWQ7Ci0JdTgJCWRhdGFbSEZBMzg0eF9SSUREQVRBX01BWExFTl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3dyaWRyZXFfdDsKKwl1MTYgdHlwZTsKKwl1MTYgZnJtbGVuOworCXUxNiByaWQ7CisJdTggZGF0YVtIRkEzODR4X1JJRERBVEFfTUFYTEVOXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfdXNiX3dyaWRyZXFfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JfcnJpZHJlcSB7Ci0JdTE2CQl0eXBlOwotCXUxNgkJZnJtbGVuOwotCXUxNgkJcmlkOwotCXU4CQlwYWRbNThdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9ycmlkcmVxX3Q7CisJdTE2IHR5cGU7CisJdTE2IGZybWxlbjsKKwl1MTYgcmlkOworCXU4IHBhZFs1OF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9ycmlkcmVxX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3dtZW1yZXEgewotCXUxNgkJdHlwZTsKLQl1MTYJCWZybWxlbjsKLQl1MTYJCW9mZnNldDsKLQl1MTYJCXBhZ2U7Ci0JdTgJCWRhdGFbSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jfd21lbXJlcV90OworCXUxNiB0eXBlOworCXUxNiBmcm1sZW47CisJdTE2IG9mZnNldDsKKwl1MTYgcGFnZTsKKwl1OCBkYXRhW0hGQTM4NHhfVVNCX1JXTUVNX01BWExFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl93bWVtcmVxX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3JtZW1yZXEgewotCXUxNgkJdHlwZTsKLQl1MTYJCWZybWxlbjsKLQl1MTYJCW9mZnNldDsKLQl1MTYJCXBhZ2U7Ci0JdTgJCXBhZFs1Nl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3JtZW1yZXFfdDsKKwl1MTYgdHlwZTsKKwl1MTYgZnJtbGVuOworCXUxNiBvZmZzZXQ7CisJdTE2IHBhZ2U7CisJdTggcGFkWzU2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfdXNiX3JtZW1yZXFfdDsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUmVzcG9uc2UgKGJ1bGsgSU4pIHBhY2tldCBjb250ZW50cyAqLwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9yeGZybSB7Ci0JaGZhMzg0eF9yeF9mcmFtZV90CWRlc2M7Ci0JdTgJCQlkYXRhW1dMQU5fREFUQV9NQVhMRU5dOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9yeGZybV90OworCWhmYTM4NHhfcnhfZnJhbWVfdCBkZXNjOworCXU4IGRhdGFbV0xBTl9EQVRBX01BWExFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9yeGZybV90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9pbmZvZnJtIHsKLQl1MTYJCQl0eXBlOwotCWhmYTM4NHhfSW5mRnJhbWVfdAlpbmZvOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9pbmZvZnJtX3Q7CisJdTE2IHR5cGU7CisJaGZhMzg0eF9JbmZGcmFtZV90IGluZm87Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9pbmZvZnJtX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3N0YXR1c3Jlc3AgewotCXUxNgkJdHlwZTsKLQl1MTYJCXN0YXR1czsKLQl1MTYJCXJlc3AwOwotCXUxNgkJcmVzcDE7Ci0JdTE2CQlyZXNwMjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JfY21kcmVzcF90OworCXUxNiB0eXBlOworCXUxNiBzdGF0dXM7CisJdTE2IHJlc3AwOworCXUxNiByZXNwMTsKKwl1MTYgcmVzcDI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9jbWRyZXNwX3Q7CiAKIHR5cGVkZWYgaGZhMzg0eF91c2JfY21kcmVzcF90IGhmYTM4NHhfdXNiX3dyaWRyZXNwX3Q7CiAKIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiX3JyaWRyZXNwIHsKLQl1MTYJCXR5cGU7Ci0JdTE2CQlmcm1sZW47Ci0JdTE2CQlyaWQ7Ci0JdTgJCWRhdGFbSEZBMzg0eF9SSUREQVRBX01BWExFTl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3JyaWRyZXNwX3Q7CisJdTE2IHR5cGU7CisJdTE2IGZybWxlbjsKKwl1MTYgcmlkOworCXU4IGRhdGFbSEZBMzg0eF9SSUREQVRBX01BWExFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9ycmlkcmVzcF90OwogCiB0eXBlZGVmIGhmYTM4NHhfdXNiX2NtZHJlc3BfdCBoZmEzODR4X3VzYl93bWVtcmVzcF90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9ybWVtcmVzcCB7Ci0JdTE2CQl0eXBlOwotCXUxNgkJZnJtbGVuOwotCXU4CQlkYXRhW0hGQTM4NHhfVVNCX1JXTUVNX01BWExFTl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfdXNiX3JtZW1yZXNwX3Q7CisJdTE2IHR5cGU7CisJdTE2IGZybWxlbjsKKwl1OCBkYXRhW0hGQTM4NHhfVVNCX1JXTUVNX01BWExFTl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9ybWVtcmVzcF90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9idWZhdmFpbCB7Ci0JdTE2CQl0eXBlOwotCXUxNgkJZnJtbGVuOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9idWZhdmFpbF90OworCXUxNiB0eXBlOworCXUxNiBmcm1sZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9idWZhdmFpbF90OwogCiB0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYl9lcnJvciB7Ci0JdTE2CQl0eXBlOwotCXUxNgkJZXJyb3J0eXBlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3VzYl9lcnJvcl90OworCXUxNiB0eXBlOworCXUxNiBlcnJvcnR5cGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZmEzODR4X3VzYl9lcnJvcl90OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogVW5pb25zIGZvciBwYWNrYWdpbmcgYWxsIHRoZSBrbm93biBwYWNrZXQgdHlwZXMgdG9nZXRoZXIgKi8KIAogdHlwZWRlZiB1bmlvbiBoZmEzODR4X3VzYm91dCB7Ci0JdTE2CQkJdHlwZTsKLQloZmEzODR4X3VzYl90eGZybV90CXR4ZnJtOwotCWhmYTM4NHhfdXNiX2NtZHJlcV90CWNtZHJlcTsKLQloZmEzODR4X3VzYl93cmlkcmVxX3QJd3JpZHJlcTsKLQloZmEzODR4X3VzYl9ycmlkcmVxX3QJcnJpZHJlcTsKLQloZmEzODR4X3VzYl93bWVtcmVxX3QJd21lbXJlcTsKLQloZmEzODR4X3VzYl9ybWVtcmVxX3QJcm1lbXJlcTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2JvdXRfdDsKKwl1MTYgdHlwZTsKKwloZmEzODR4X3VzYl90eGZybV90IHR4ZnJtOworCWhmYTM4NHhfdXNiX2NtZHJlcV90IGNtZHJlcTsKKwloZmEzODR4X3VzYl93cmlkcmVxX3Qgd3JpZHJlcTsKKwloZmEzODR4X3VzYl9ycmlkcmVxX3QgcnJpZHJlcTsKKwloZmEzODR4X3VzYl93bWVtcmVxX3Qgd21lbXJlcTsKKwloZmEzODR4X3VzYl9ybWVtcmVxX3Qgcm1lbXJlcTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfdXNib3V0X3Q7CiAKIHR5cGVkZWYgdW5pb24gaGZhMzg0eF91c2JpbiB7Ci0JdTE2CQkJdHlwZTsKLQloZmEzODR4X3VzYl9yeGZybV90CXJ4ZnJtOwotCWhmYTM4NHhfdXNiX3R4ZnJtX3QJdHhmcm07Ci0JaGZhMzg0eF91c2JfaW5mb2ZybV90CWluZm9mcm07Ci0JaGZhMzg0eF91c2JfY21kcmVzcF90CWNtZHJlc3A7Ci0JaGZhMzg0eF91c2Jfd3JpZHJlc3BfdAl3cmlkcmVzcDsKLQloZmEzODR4X3VzYl9ycmlkcmVzcF90CXJyaWRyZXNwOwotCWhmYTM4NHhfdXNiX3dtZW1yZXNwX3QJd21lbXJlc3A7Ci0JaGZhMzg0eF91c2Jfcm1lbXJlc3BfdAlybWVtcmVzcDsKLQloZmEzODR4X3VzYl9idWZhdmFpbF90CWJ1ZmF2YWlsOwotCWhmYTM4NHhfdXNiX2Vycm9yX3QJdXNiZXJyb3I7Ci0JdTgJCQlib2d1c3BhZFszMDAwXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF91c2Jpbl90OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QRCByZWNvcmQgc3RydWN0dXJlcy4KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfcGNiX3BhcnRudW0KLXsKLQl1OAludW1bOF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3BjYl9wYXJ0bnVtX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3BjYl90cmFjZW51bQotewotCXU4CW51bVs4XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcGNiX3RyYWNlbnVtX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX25pY19zZXJpYWwKLXsKLQl1OAludW1bMTJdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9uaWNfc2VyaWFsX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX21ra19tZWFzdXJlbWVudHMKLXsKLQlkb3VibGUJY2Fycmllcl9mcmVxOwotCWRvdWJsZQlvY2N1cGllZF9iYW5kOwotCWRvdWJsZQlwb3dlcl9kZW5zaXR5OwotCWRvdWJsZQl0eF9zcHVyX2YxOwotCWRvdWJsZQl0eF9zcHVyX2YyOwotCWRvdWJsZQl0eF9zcHVyX2YzOwotCWRvdWJsZQl0eF9zcHVyX2Y0OwotCWRvdWJsZQl0eF9zcHVyX2wxOwotCWRvdWJsZQl0eF9zcHVyX2wyOwotCWRvdWJsZQl0eF9zcHVyX2wzOwotCWRvdWJsZQl0eF9zcHVyX2w0OwotCWRvdWJsZQlyeF9zcHVyX2YxOwotCWRvdWJsZQlyeF9zcHVyX2YyOwotCWRvdWJsZQlyeF9zcHVyX2wxOwotCWRvdWJsZQlyeF9zcHVyX2wyOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9ta2tfbWVhc3VyZW1lbnRzX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX25pY19yYW1zaXplCi17Ci0JdTgJc2l6ZVsxMl07IC8qIHVuaXRzIG9mIEtCICovCi19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX25pY19yYW1zaXplX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX21maXN1cHJhbmdlCi17Ci0JdTE2CWlkOwotCXUxNgl2YXJpYW50OwotCXUxNglib3R0b207Ci0JdTE2CXRvcDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbWZpc3VwcmFuZ2VfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfY2Zpc3VwcmFuZ2UKLXsKLQl1MTYJaWQ7Ci0JdTE2CXZhcmlhbnQ7Ci0JdTE2CWJvdHRvbTsKLQl1MTYJdG9wOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9jZmlzdXByYW5nZV90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9uaWNpZAotewotCXUxNglpZDsKLQl1MTYJdmFyaWFudDsKLQl1MTYJbWFqb3I7Ci0JdTE2CW1pbm9yOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9uaWNpZF90OwotCi0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3JlZmRhY19tZWFzdXJlbWVudHMKLXsKLQl1MTYJdmFsdWVbMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3JlZmRhY19tZWFzdXJlbWVudHNfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfdmdkYWNfbWVhc3VyZW1lbnRzCi17Ci0JdTE2CXZhbHVlWzBdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl92Z2RhY19tZWFzdXJlbWVudHNfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbGV2ZWxfY29tcF9tZWFzdXJlbWVudHMKLXsKLQl1MTYJdmFsdWVbMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2xldmVsX2NvbXBjX21lYXN1cmVtZW50c190OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9tYWNfYWRkcmVzcwotewotCXU4CWFkZHJbNl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX21hY19hZGRyZXNzX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX21ra19jYWxsbmFtZQotewotCXU4CWNhbGxuYW1lWzhdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9ta2tfY2FsbG5hbWVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfcmVnZG9tYWluCi17Ci0JdTE2CW51bWRvbWFpbnM7Ci0JdTE2CWRvbWFpbls1XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcmVnZG9tYWluX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2FsbG93ZWRfY2hhbm5lbAotewotCXUxNgljaF9iaXRtYXA7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2FsbG93ZWRfY2hhbm5lbF90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9kZWZhdWx0X2NoYW5uZWwKLXsKLQl1MTYJY2hhbm5lbDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfZGVmYXVsdF9jaGFubmVsX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3ByaXZhY3lfb3B0aW9uCi17Ci0JdTE2CWF2YWlsYWJsZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcHJpdmFjeV9vcHRpb25fdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfdGVtcHR5cGUKLXsKLQl1MTYJdHlwZTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfdGVtcHR5cGVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfcmVmZGFjX3NldHVwCi17Ci0JdTE2CWNoX3ZhbHVlWzE0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfcmVmZGFjX3NldHVwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3ZnZGFjX3NldHVwCi17Ci0JdTE2CWNoX3ZhbHVlWzE0XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfdmdkYWNfc2V0dXBfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfbGV2ZWxfY29tcF9zZXR1cAotewotCXUxNgljaF92YWx1ZVsxNF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2xldmVsX2NvbXBfc2V0dXBfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfdHJpbWRhY19zZXR1cAotewotCXUxNgl0cmltaWRhYzsKLQl1MTYJdHJpbXFkYWM7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX3RyaW1kYWNfc2V0dXBfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaWZyX3NldHRpbmcKLXsKLQl1MTYJdmFsdWVbM107Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2lmcl9zZXR0aW5nX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX3Jmcl9zZXR0aW5nCi17Ci0JdTE2CXZhbHVlWzNdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9yZnJfc2V0dGluZ190OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX2Jhc2VsaW5lCi17Ci0JdTE2CXZhbHVlWzUwXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9iYXNlbGluZV90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX3NoYWRvdwotewotCXUzMgl2YWx1ZVszMl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfc2hhZG93X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfcGRyX2hmYTM4NjFfaWZyZgotewotCXUzMgl2YWx1ZVsyMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfaWZyZl90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX2NoY2Fsc3AKLXsKLQl1MTYJdmFsdWVbMTRdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX2NoY2Fsc3BfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbGkKLXsKLQl1MTYJdmFsdWVbMTddOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBoZmEzODR4X3Bkcl9oZmEzODYxX2NoY2FsaV90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZmEzODYxX25pY19jb25maWcKLXsKLQl1MTYJY29uZmlnX2JpdG1hcDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfbmljX2NvbmZpZ190OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3Bkcl9oZm9fZGVsYXkKLXsKLQl1OCAgIGhmb19kZWxheTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9oZm9fZGVsYXlfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RzcAotewotCXUxNgl2YWx1ZVszMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2hmYTM4NjFfbWFuZl90ZXN0c3BfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RpCi17Ci0JdTE2CXZhbHVlWzMwXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gaGZhMzg0eF9wZHJfaGZhMzg2MV9tYW5mX3Rlc3RpX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGhmYTM4NHhfZW5kX29mX3BkYQotewotCXUxNgljcmM7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyX2VuZF9vZl9wZGFfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9wZHJlYwotewotCXUxNglsZW47IC8qIGluIHdvcmRzICovCi0JdTE2CWNvZGU7Ci0JdW5pb24gcGRyIHsKLQloZmEzODR4X3Bkcl9wY2JfcGFydG51bV90CXBjYl9wYXJ0bnVtOwotCWhmYTM4NHhfcGRyX3BjYl90cmFjZW51bV90CXBjYl90cmFjZW51bTsKLQloZmEzODR4X3Bkcl9uaWNfc2VyaWFsX3QJbmljX3NlcmlhbDsKLQloZmEzODR4X3Bkcl9ta2tfbWVhc3VyZW1lbnRzX3QJbWtrX21lYXN1cmVtZW50czsKLQloZmEzODR4X3Bkcl9uaWNfcmFtc2l6ZV90CW5pY19yYW1zaXplOwotCWhmYTM4NHhfcGRyX21maXN1cHJhbmdlX3QJbWZpc3VwcmFuZ2U7Ci0JaGZhMzg0eF9wZHJfY2Zpc3VwcmFuZ2VfdAljZmlzdXByYW5nZTsKLQloZmEzODR4X3Bkcl9uaWNpZF90CQluaWNpZDsKLQloZmEzODR4X3Bkcl9yZWZkYWNfbWVhc3VyZW1lbnRzX3QJcmVmZGFjX21lYXN1cmVtZW50czsKLQloZmEzODR4X3Bkcl92Z2RhY19tZWFzdXJlbWVudHNfdAl2Z2RhY19tZWFzdXJlbWVudHM7Ci0JaGZhMzg0eF9wZHJfbGV2ZWxfY29tcGNfbWVhc3VyZW1lbnRzX3QJbGV2ZWxfY29tcGNfbWVhc3VyZW1lbnRzOwotCWhmYTM4NHhfcGRyX21hY19hZGRyZXNzX3QJbWFjX2FkZHJlc3M7Ci0JaGZhMzg0eF9wZHJfbWtrX2NhbGxuYW1lX3QJbWtrX2NhbGxuYW1lOwotCWhmYTM4NHhfcGRyX3JlZ2RvbWFpbl90CQlyZWdkb21haW47Ci0JaGZhMzg0eF9wZHJfYWxsb3dlZF9jaGFubmVsX3QJYWxsb3dlZF9jaGFubmVsOwotCWhmYTM4NHhfcGRyX2RlZmF1bHRfY2hhbm5lbF90CWRlZmF1bHRfY2hhbm5lbDsKLQloZmEzODR4X3Bkcl9wcml2YWN5X29wdGlvbl90CXByaXZhY3lfb3B0aW9uOwotCWhmYTM4NHhfcGRyX3RlbXB0eXBlX3QJCXRlbXB0eXBlOwotCWhmYTM4NHhfcGRyX3JlZmRhY19zZXR1cF90CXJlZmRhY19zZXR1cDsKLQloZmEzODR4X3Bkcl92Z2RhY19zZXR1cF90CXZnZGFjX3NldHVwOwotCWhmYTM4NHhfcGRyX2xldmVsX2NvbXBfc2V0dXBfdAlsZXZlbF9jb21wX3NldHVwOwotCWhmYTM4NHhfcGRyX3RyaW1kYWNfc2V0dXBfdAl0cmltZGFjX3NldHVwOwotCWhmYTM4NHhfcGRyX2lmcl9zZXR0aW5nX3QJaWZyX3NldHRpbmc7Ci0JaGZhMzg0eF9wZHJfcmZyX3NldHRpbmdfdAlyZnJfc2V0dGluZzsKLQloZmEzODR4X3Bkcl9oZmEzODYxX2Jhc2VsaW5lX3QJaGZhMzg2MV9iYXNlbGluZTsKLQloZmEzODR4X3Bkcl9oZmEzODYxX3NoYWRvd190CWhmYTM4NjFfc2hhZG93OwotCWhmYTM4NHhfcGRyX2hmYTM4NjFfaWZyZl90CWhmYTM4NjFfaWZyZjsKLQloZmEzODR4X3Bkcl9oZmEzODYxX2NoY2Fsc3BfdAloZmEzODYxX2NoY2Fsc3A7Ci0JaGZhMzg0eF9wZHJfaGZhMzg2MV9jaGNhbGlfdAloZmEzODYxX2NoY2FsaTsKLQloZmEzODR4X3Bkcl9uaWNfY29uZmlnX3QJbmljX2NvbmZpZzsKLQloZmEzODR4X2hmb19kZWxheV90ICAgICAgICAgICAgIGhmb19kZWxheTsKLQloZmEzODR4X3Bkcl9oZmEzODYxX21hbmZfdGVzdHNwX3QJaGZhMzg2MV9tYW5mX3Rlc3RzcDsKLQloZmEzODR4X3Bkcl9oZmEzODYxX21hbmZfdGVzdGlfdAloZmEzODYxX21hbmZfdGVzdGk7Ci0JaGZhMzg0eF9wZHJfZW5kX29mX3BkYV90CWVuZF9vZl9wZGE7Ci0KLQl9IGRhdGE7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIGhmYTM4NHhfcGRyZWNfdDsKLQorCXUxNiB0eXBlOworCWhmYTM4NHhfdXNiX3J4ZnJtX3Qgcnhmcm07CisJaGZhMzg0eF91c2JfdHhmcm1fdCB0eGZybTsKKwloZmEzODR4X3VzYl9pbmZvZnJtX3QgaW5mb2ZybTsKKwloZmEzODR4X3VzYl9jbWRyZXNwX3QgY21kcmVzcDsKKwloZmEzODR4X3VzYl93cmlkcmVzcF90IHdyaWRyZXNwOworCWhmYTM4NHhfdXNiX3JyaWRyZXNwX3QgcnJpZHJlc3A7CisJaGZhMzg0eF91c2Jfd21lbXJlc3BfdCB3bWVtcmVzcDsKKwloZmEzODR4X3VzYl9ybWVtcmVzcF90IHJtZW1yZXNwOworCWhmYTM4NHhfdXNiX2J1ZmF2YWlsX3QgYnVmYXZhaWw7CisJaGZhMzg0eF91c2JfZXJyb3JfdCB1c2JlcnJvcjsKKwl1OCBib2d1c3BhZFszMDAwXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGhmYTM4NHhfdXNiaW5fdDsKIAogI2lmZGVmIF9fS0VSTkVMX18KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tLSAgTUFDIHN0YXRlIHN0cnVjdHVyZSwgYXJndW1lbnQgdG8gYWxsIGZ1bmN0aW9ucyAtLQogLS0tICBBbHNvLCBhIGNvbGxlY3Rpb24gb2Ygc3VwcG9ydCB0eXBlcyAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9zdGF0dXNyZXN1bHQKLXsKLQl1MTYJc3RhdHVzOwotCXUxNglyZXNwMDsKLQl1MTYJcmVzcDE7Ci0JdTE2CXJlc3AyOwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9zdGF0dXNyZXN1bHQgeworCXUxNiBzdGF0dXM7CisJdTE2IHJlc3AwOworCXUxNiByZXNwMTsKKwl1MTYgcmVzcDI7CiB9IGhmYTM4NHhfY21kcmVzdWx0X3Q7CiAKIC8qIFVTQiBDb250cm9sIEV4Y2hhbmdlIChDVExYKToKQEAgLTIzNjUsMjAgKzkwMSwxNiBAQAogLyogVGhlIGZvbGxvd2luZyBoZmEzODR4Xyogc3RydWN0dXJlcyBhcmUgYXJndW1lbnRzIHRvCiAgKiB0aGUgdXNlcmNiKCkgZm9yIHRoZSBkaWZmZXJlbnQgQ1RMWCB0eXBlcy4KICAqLwotdHlwZWRlZiBoZmEzODR4X2NtZHJlc3VsdF90IGhmYTM4NHhfd3JpZHJlc3VsdF90OwotdHlwZWRlZiBoZmEzODR4X2NtZHJlc3VsdF90IGhmYTM4NHhfd21lbXJlc3VsdF90OwotCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JyaWRyZXN1bHQKLXsKLQl1MTYJCXJpZDsKLQljb25zdCB2b2lkCSpyaWRkYXRhOwotCXVuc2lnbmVkIGludAkJcmlkZGF0YV9sZW47Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3JyaWRyZXN1bHQgeworCXUxNiByaWQ7CisJY29uc3Qgdm9pZCAqcmlkZGF0YTsKKwl1bnNpZ25lZCBpbnQgcmlkZGF0YV9sZW47CiB9IGhmYTM4NHhfcnJpZHJlc3VsdF90OwogCiBlbnVtIGN0bHhfc3RhdGUgewotCUNUTFhfU1RBUlQgPSAwLAkvKiBTdGFydCBzdGF0ZSwgbm90IHF1ZXVlZCAqLworCUNUTFhfU1RBUlQgPSAwLAkJLyogU3RhcnQgc3RhdGUsIG5vdCBxdWV1ZWQgKi8KIAotCUNUTFhfQ09NUExFVEUsCS8qIENUTFggc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCAqLworCUNUTFhfQ09NUExFVEUsCQkvKiBDVExYIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgKi8KIAlDVExYX1JFUV9GQUlMRUQsCS8qIE9VVCBVUkIgY29tcGxldGVkIHcvIGVycm9yICovCiAKIAlDVExYX1BFTkRJTkcsCQkvKiBRdWV1ZWQsIGRhdGEgdmFsaWQgKi8KQEAgLTIzODYsMTE0ICs5MTgsOTggQEAKIAlDVExYX1JFUV9DT01QTEVURSwJLyogT1VUIFVSQiBjb21wbGV0ZSAqLwogCUNUTFhfUkVTUF9DT01QTEVURQkvKiBJTiBVUkIgcmVjZWl2ZWQgKi8KIH07Ci10eXBlZGVmIGVudW0gY3RseF9zdGF0ZSAgQ1RMWF9TVEFURTsKK3R5cGVkZWYgZW51bSBjdGx4X3N0YXRlIENUTFhfU1RBVEU7CiAKIHN0cnVjdCBoZmEzODR4X3VzYmN0bHg7CiBzdHJ1Y3QgaGZhMzg0eDsKIAotdHlwZWRlZiB2b2lkICgqY3RseF9jbWRjYl90KSggc3RydWN0IGhmYTM4NHgqLCBjb25zdCBzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4KiApOwordHlwZWRlZiB2b2lkICgqY3RseF9jbWRjYl90KSAoc3RydWN0IGhmYTM4NHggKiwgY29uc3Qgc3RydWN0IGhmYTM4NHhfdXNiY3RseCAqKTsKIAotdHlwZWRlZiB2b2lkICgqY3RseF91c2VyY2JfdCkoCi0Jc3RydWN0IGhmYTM4NHgJKmh3LAotCXZvaWQJCSpjdGx4cmVzdWx0LAotCXZvaWQJCSp1c2VyY2JfZGF0YSk7Cit0eXBlZGVmIHZvaWQgKCpjdGx4X3VzZXJjYl90KSAoc3RydWN0IGhmYTM4NHggKmh3LAorCQkJICAgICAgIHZvaWQgKmN0bHhyZXN1bHQsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4Ci17Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF91c2JjdGx4IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKLQlzaXplX3QJCQlvdXRidWZzaXplOwotCWhmYTM4NHhfdXNib3V0X3QJb3V0YnVmOwkJLyogcGt0IGJ1ZiBmb3IgT1VUICovCi0JaGZhMzg0eF91c2Jpbl90CQlpbmJ1ZjsJCS8qIHBrdCBidWYgZm9yIElOKGEgY29weSkgKi8KKwlzaXplX3Qgb3V0YnVmc2l6ZTsKKwloZmEzODR4X3VzYm91dF90IG91dGJ1ZjsJLyogcGt0IGJ1ZiBmb3IgT1VUICovCisJaGZhMzg0eF91c2Jpbl90IGluYnVmOwkvKiBwa3QgYnVmIGZvciBJTihhIGNvcHkpICovCiAKLQlDVExYX1NUQVRFCQlzdGF0ZTsJCS8qIFRyYWNrcyBydW5uaW5nIHN0YXRlICovCisJQ1RMWF9TVEFURSBzdGF0ZTsJLyogVHJhY2tzIHJ1bm5pbmcgc3RhdGUgKi8KIAotCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7Ci0Jdm9sYXRpbGUgaW50CQlyZWFwYWJsZTsJLyogRm9vZCBmb3IgdGhlIHJlYXBlciB0YXNrICovCisJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKKwl2b2xhdGlsZSBpbnQgcmVhcGFibGU7CS8qIEZvb2QgZm9yIHRoZSByZWFwZXIgdGFzayAqLwogCi0JY3RseF9jbWRjYl90CQljbWRjYjsJCS8qIEFzeW5jIGNvbW1hbmQgY2FsbGJhY2sgKi8KLQljdGx4X3VzZXJjYl90CQl1c2VyY2I7CQkvKiBBc3luYyB1c2VyIGNhbGxiYWNrLCAqLwotCXZvaWQJCQkqdXNlcmNiX2RhdGE7CS8qICBhdCBDVExYIGNvbXBsZXRpb24gICovCisJY3RseF9jbWRjYl90IGNtZGNiOwkvKiBBc3luYyBjb21tYW5kIGNhbGxiYWNrICovCisJY3RseF91c2VyY2JfdCB1c2VyY2I7CS8qIEFzeW5jIHVzZXIgY2FsbGJhY2ssICovCisJdm9pZCAqdXNlcmNiX2RhdGE7CS8qICBhdCBDVExYIGNvbXBsZXRpb24gICovCiAKLQlpbnQJCQl2YXJpYW50OwkvKiBJZGVudGlmaWVzIGNtZCB2YXJpYW50ICovCisJaW50IHZhcmlhbnQ7CQkvKiBJZGVudGlmaWVzIGNtZCB2YXJpYW50ICovCiB9IGhmYTM4NHhfdXNiY3RseF90OwogCi10eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYmN0bHhxCi17Ci0Jc3BpbmxvY2tfdAkJbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCXBlbmRpbmc7Ci0Jc3RydWN0IGxpc3RfaGVhZAlhY3RpdmU7Ci0Jc3RydWN0IGxpc3RfaGVhZAljb21wbGV0aW5nOwotCXN0cnVjdCBsaXN0X2hlYWQJcmVhcGFibGU7Cit0eXBlZGVmIHN0cnVjdCBoZmEzODR4X3VzYmN0bHhxIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQgY29tcGxldGluZzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlYXBhYmxlOwogfSBoZmEzODR4X3VzYmN0bHhxX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGhmYTQ4NHhfbWV0YWNtZAotewotCXUxNgkJY21kOwordHlwZWRlZiBzdHJ1Y3QgaGZhNDg0eF9tZXRhY21kIHsKKwl1MTYgY21kOwogCi0JdTE2ICAgICAgICAgIHBhcm0wOwotCXUxNiAgICAgICAgICBwYXJtMTsKLQl1MTYgICAgICAgICAgcGFybTI7CisJdTE2IHBhcm0wOworCXUxNiBwYXJtMTsKKwl1MTYgcGFybTI7CiAKIAloZmEzODR4X2NtZHJlc3VsdF90IHJlc3VsdDsKIH0gaGZhMzg0eF9tZXRhY21kX3Q7CiAKLSNkZWZpbmUJTUFYX1BSSVNNMl9HUlBfQUREUgkxNgogI2RlZmluZQlNQVhfR1JQX0FERFIJCTMyCi0jZGVmaW5lIFdMQU5fQ09NTUVOVF9NQVgJODAgIC8qIE1heC4gbGVuZ3RoIG9mIHVzZXIgY29tbWVudCBzdHJpbmcuICovCisjZGVmaW5lIFdMQU5fQ09NTUVOVF9NQVgJODAJLyogTWF4LiBsZW5ndGggb2YgdXNlciBjb21tZW50IHN0cmluZy4gKi8KIAotI2RlZmluZSBNTV9TQVRfUENGCQkoQklUMTQpCi0jZGVmaW5lIE1NX0dDU0RfUENGCQkoQklUMTUpCi0jZGVmaW5lIE1NX0dDU0RfUENGX0VCCQkoQklUMTQgfCBCSVQxNSkKLQotI2RlZmluZSBXTEFOX1NUQVRFX1NUT1BQRUQJMCAgIC8qIE5ldHdvcmsgaXMgbm90IGFjdGl2ZS4gKi8KLSNkZWZpbmUgV0xBTl9TVEFURV9TVEFSVEVECTEgICAvKiBOZXR3b3JrIGhhcyBiZWVuIHN0YXJ0ZWQuICovCi0KLSNkZWZpbmUgV0xBTl9BVVRIX01BWCAgICAgICAgICAgNjAgIC8qIE1heC4gIyBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAqLwotI2RlZmluZSBXTEFOX0FDQ0VTU19NQVgJCTYwICAvKiBNYXguICMgb2Ygc3RhdGlvbnMgaW4gYW4gYWNjZXNzIGxpc3QuICovCi0jZGVmaW5lIFdMQU5fQUNDRVNTX05PTkUJMCAgIC8qIE5vIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLwotI2RlZmluZSBXTEFOX0FDQ0VTU19BTEwJCTEgICAvKiBBbGwgc3RhdGlvbnMgbWF5IGJlIGF1dGhlbnRpY2F0ZWQuICovCi0jZGVmaW5lIFdMQU5fQUNDRVNTX0FMTE9XCTIgICAvKiBBdXRoZW50aWNhdGUgb25seSAiYWxsb3dlZCIgc3RhdGlvbnMuICovCi0jZGVmaW5lIFdMQU5fQUNDRVNTX0RFTlkJMyAgIC8qIERvIG5vdCBhdXRoZW50aWNhdGUgImRlbmllZCIgc3RhdGlvbnMuICovCisjZGVmaW5lIFdMQU5fQVVUSF9NQVggICAgICAgICAgIDYwCS8qIE1heC4gIyBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19NQVgJCTYwCS8qIE1heC4gIyBvZiBzdGF0aW9ucyBpbiBhbiBhY2Nlc3MgbGlzdC4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfTk9ORQkwCS8qIE5vIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19BTEwJCTEJLyogQWxsIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19BTExPVwkyCS8qIEF1dGhlbnRpY2F0ZSBvbmx5ICJhbGxvd2VkIiBzdGF0aW9ucy4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfREVOWQkzCS8qIERvIG5vdCBhdXRoZW50aWNhdGUgImRlbmllZCIgc3RhdGlvbnMuICovCiAKIC8qIFhYWCBUaGVzZSBhcmUgZ29pbmcgYXdheSBBU0FQICovCi10eXBlZGVmIHN0cnVjdCBwcmlzbTJzdGFfYXV0aGxpc3QKLXsKLQl1bnNpZ25lZCBpbnQJY250OwotCXU4CWFkZHJbV0xBTl9BVVRIX01BWF1bV0xBTl9BRERSX0xFTl07Ci0JdTgJYXNzb2NbV0xBTl9BVVRIX01BWF07Cit0eXBlZGVmIHN0cnVjdCBwcmlzbTJzdGFfYXV0aGxpc3QgeworCXVuc2lnbmVkIGludCBjbnQ7CisJdTggYWRkcltXTEFOX0FVVEhfTUFYXVtFVEhfQUxFTl07CisJdTggYXNzb2NbV0xBTl9BVVRIX01BWF07CiB9IHByaXNtMnN0YV9hdXRobGlzdF90OwogCi10eXBlZGVmIHN0cnVjdCBwcmlzbTJzdGFfYWNjZXNzbGlzdAotewotCXVuc2lnbmVkIGludAltb2RpZnk7Ci0JdW5zaWduZWQgaW50CWNudDsKLQl1OAlhZGRyW1dMQU5fQUNDRVNTX01BWF1bV0xBTl9BRERSX0xFTl07Ci0JdW5zaWduZWQgaW50CWNudDE7Ci0JdTgJYWRkcjFbV0xBTl9BQ0NFU1NfTUFYXVtXTEFOX0FERFJfTEVOXTsKK3R5cGVkZWYgc3RydWN0IHByaXNtMnN0YV9hY2Nlc3NsaXN0IHsKKwl1bnNpZ25lZCBpbnQgbW9kaWZ5OworCXVuc2lnbmVkIGludCBjbnQ7CisJdTggYWRkcltXTEFOX0FDQ0VTU19NQVhdW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBpbnQgY250MTsKKwl1OCBhZGRyMVtXTEFOX0FDQ0VTU19NQVhdW0VUSF9BTEVOXTsKIH0gcHJpc20yc3RhX2FjY2Vzc2xpc3RfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eAotewordHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eCB7CiAJLyogVVNCIHN1cHBvcnQgZGF0YSAqLwotCXN0cnVjdCB1c2JfZGV2aWNlCSp1c2I7Ci0Jc3RydWN0IHVyYgkJcnhfdXJiOwotCXN0cnVjdCBza19idWZmCQkqcnhfdXJiX3NrYjsKLQlzdHJ1Y3QgdXJiCQl0eF91cmI7Ci0Jc3RydWN0IHVyYgkJY3RseF91cmI7Ci0JaGZhMzg0eF91c2JvdXRfdAl0eGJ1ZmY7Ci0JaGZhMzg0eF91c2JjdGx4cV90CWN0bHhxOwotCXN0cnVjdCB0aW1lcl9saXN0CXJlcXRpbWVyOwotCXN0cnVjdCB0aW1lcl9saXN0CXJlc3B0aW1lcjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiOworCXN0cnVjdCB1cmIgcnhfdXJiOworCXN0cnVjdCBza19idWZmICpyeF91cmJfc2tiOworCXN0cnVjdCB1cmIgdHhfdXJiOworCXN0cnVjdCB1cmIgY3RseF91cmI7CisJaGZhMzg0eF91c2JvdXRfdCB0eGJ1ZmY7CisJaGZhMzg0eF91c2JjdGx4cV90IGN0bHhxOworCXN0cnVjdCB0aW1lcl9saXN0IHJlcXRpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IHJlc3B0aW1lcjsKIAotCXN0cnVjdCB0aW1lcl9saXN0CXRocm90dGxlOworCXN0cnVjdCB0aW1lcl9saXN0IHRocm90dGxlOwogCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0CXJlYXBlcl9iaDsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJY29tcGxldGlvbl9iaDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcmVhcGVyX2JoOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBjb21wbGV0aW9uX2JoOwogCi0Jc3RydWN0IHdvcmtfc3RydWN0CXVzYl93b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB1c2Jfd29yazsKIAotCXVuc2lnbmVkIGxvbmcJCXVzYl9mbGFnczsKKwl1bnNpZ25lZCBsb25nIHVzYl9mbGFnczsKICNkZWZpbmUgVEhST1RUTEVfUlgJMAogI2RlZmluZSBUSFJPVFRMRV9UWAkxCiAjZGVmaW5lIFdPUktfUlhfSEFMVAkyCkBAIC0yNTAxLDI5MiArMTAxNywxNjggQEAKICNkZWZpbmUgV09SS19SWF9SRVNVTUUJNAogI2RlZmluZSBXT1JLX1RYX1JFU1VNRQk1CiAKLQl1bnNpZ25lZCBzaG9ydAkJcmVxX3RpbWVyX2RvbmU6MTsKLQl1bnNpZ25lZCBzaG9ydAkJcmVzcF90aW1lcl9kb25lOjE7CisJdW5zaWduZWQgc2hvcnQgcmVxX3RpbWVyX2RvbmU6MTsKKwl1bnNpZ25lZCBzaG9ydCByZXNwX3RpbWVyX2RvbmU6MTsKIAotCWludCAgICAgICAgICAgICAgICAgICAgIGVuZHBfaW47Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgZW5kcF9vdXQ7CisJaW50IGVuZHBfaW47CisJaW50IGVuZHBfb3V0OwogCi0JaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZfZmNzOwotCWludCAgICAgICAgICAgICAgICAgICAgIHNuaWZmX2NoYW5uZWw7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZfdHJ1bmNhdGU7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgc25pZmZoZHI7CisJaW50IHNuaWZmX2ZjczsKKwlpbnQgc25pZmZfY2hhbm5lbDsKKwlpbnQgc25pZmZfdHJ1bmNhdGU7CisJaW50IHNuaWZmaGRyOwogCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgY21kcTsJICAgICAgICAvKiB3YWl0IHF1ZXVlIGl0c2VsZiAqLworCXdhaXRfcXVldWVfaGVhZF90IGNtZHE7CS8qIHdhaXQgcXVldWUgaXRzZWxmICovCiAKIAkvKiBDb250cm9sbGVyIHN0YXRlICovCi0JdTMyCQlzdGF0ZTsKLQl1MzIJCWlzYXA7Ci0JdTgJCXBvcnRfZW5hYmxlZFtIRkEzODR4X05VTVBPUlRTX01BWF07CisJdTMyIHN0YXRlOworCXUzMiBpc2FwOworCXU4IHBvcnRfZW5hYmxlZFtIRkEzODR4X05VTVBPUlRTX01BWF07CiAKIAkvKiBEb3dubG9hZCBzdXBwb3J0ICovCi0JdW5zaWduZWQgaW50CQkJCWRsc3RhdGU7Ci0JaGZhMzg0eF9kb3dubG9hZGJ1ZmZlcl90CWJ1ZmluZm87Ci0JdTE2CQkJCWRsdGltZW91dDsKKwl1bnNpZ25lZCBpbnQgZGxzdGF0ZTsKKwloZmEzODR4X2Rvd25sb2FkYnVmZmVyX3QgYnVmaW5mbzsKKwl1MTYgZGx0aW1lb3V0OwogCi0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuZmxhZzsgICAgLyogdG8gc2lnbmFsIHNjYW4gY29tbGV0ZSAqLwotCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbl9hcDsgICAgICAgIC8qIGFyZSB3ZSBqb2luZWQgdG8gYSBzcGVjaWZpYyBhcCAqLwotCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbl9yZXRyaWVzOyAgIC8qIG51bWJlciBvZiBqb2luIHJldHJpZXMgdGlsbCB3ZSBmYWlsICovCi0JaGZhMzg0eF9Kb2luUmVxdWVzdF9kYXRhX3QgICBqb2lucmVxOyAgICAgICAgLyogam9pbiByZXF1ZXN0IHNhdmVkIGRhdGEgKi8KKwlpbnQgc2NhbmZsYWc7CQkvKiB0byBzaWduYWwgc2NhbiBjb21sZXRlICovCisJaW50IGpvaW5fYXA7CQkvKiBhcmUgd2Ugam9pbmVkIHRvIGEgc3BlY2lmaWMgYXAgKi8KKwlpbnQgam9pbl9yZXRyaWVzOwkvKiBudW1iZXIgb2Ygam9pbiByZXRyaWVzIHRpbGwgd2UgZmFpbCAqLworCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90IGpvaW5yZXE7CS8qIGpvaW4gcmVxdWVzdCBzYXZlZCBkYXRhICovCiAKLQl3bGFuZGV2aWNlX3QgICAgICAgICAgICAqd2xhbmRldjsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXY7CiAJLyogVGltZXIgdG8gYWxsb3cgZm9yIHRoZSBkZWZlcnJlZCBwcm9jZXNzaW5nIG9mIGxpbmtzdGF0dXMgbWVzc2FnZXMgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgCWxpbmtfYmg7CisJc3RydWN0IHdvcmtfc3RydWN0IGxpbmtfYmg7CiAKLSAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0ICAgICAgY29tbXNxdWFsX2JoOwotCWhmYTM4NHhfY29tbXNxdWFsaXR5X3QgIHF1YWw7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJY29tbXNxdWFsX3RpbWVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCBjb21tc3F1YWxfYmg7CisJaGZhMzg0eF9jb21tc3F1YWxpdHlfdCBxdWFsOworCXN0cnVjdCB0aW1lcl9saXN0IGNvbW1zcXVhbF90aW1lcjsKIAogCXUxNiBsaW5rX3N0YXR1czsKIAl1MTYgbGlua19zdGF0dXNfbmV3OwotCXN0cnVjdCBza19idWZmX2hlYWQgICAgICAgIGF1dGhxOworCXN0cnVjdCBza19idWZmX2hlYWQgYXV0aHE7CiAKIAkvKiBBbmQgaGVyZSB3ZSBoYXZlIHN0dWZmIHRoYXQgdXNlZCB0byBiZSBpbiBwcml2ICovCiAKIAkvKiBTdGF0ZSB2YXJpYWJsZXMgKi8KLQl1bnNpZ25lZCBpbnQJCXByZXNuaWZmX3BvcnRfdHlwZTsKLQl1MTYJCXByZXNuaWZmX3dlcGZsYWdzOwotCXUzMgkJZG90MTFfZGVzaXJlZF9ic3NfdHlwZTsKKwl1bnNpZ25lZCBpbnQgcHJlc25pZmZfcG9ydF90eXBlOworCXUxNiBwcmVzbmlmZl93ZXBmbGFnczsKKwl1MzIgZG90MTFfZGVzaXJlZF9ic3NfdHlwZTsKIAotCWludCAgICAgICAgICAgICBkYm1hZGp1c3Q7CisJaW50IGRibWFkanVzdDsKIAogCS8qIEdyb3VwIEFkZHJlc3NlcyAtIHJpZ2h0IG5vdywgdGhlcmUgYXJlIHVwIHRvIGEgdG90YWwKLQlvZiBNQVhfR1JQX0FERFIgZ3JvdXAgYWRkcmVzc2VzICovCi0JdTgJCWRvdDExX2dycF9hZGRyW01BWF9HUlBfQUREUl1bV0xBTl9BRERSX0xFTl07Ci0JdW5zaWduZWQgaW50CQlkb3QxMV9ncnBjbnQ7CisJICAgb2YgTUFYX0dSUF9BRERSIGdyb3VwIGFkZHJlc3NlcyAqLworCXU4IGRvdDExX2dycF9hZGRyW01BWF9HUlBfQUREUl1bRVRIX0FMRU5dOworCXVuc2lnbmVkIGludCBkb3QxMV9ncnBjbnQ7CiAKIAkvKiBDb21wb25lbnQgSWRlbnRpdGllcyAqLwotCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfbmljOwotCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfcHJpX2Z3OwotCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfc3RhX2Z3OwotCWhmYTM4NHhfY29tcGlkZW50X3QJaWRlbnRfYXBfZnc7Ci0JdTE2CQkJbW1fbW9kczsKKwloZmEzODR4X2NvbXBpZGVudF90IGlkZW50X25pYzsKKwloZmEzODR4X2NvbXBpZGVudF90IGlkZW50X3ByaV9mdzsKKwloZmEzODR4X2NvbXBpZGVudF90IGlkZW50X3N0YV9mdzsKKwloZmEzODR4X2NvbXBpZGVudF90IGlkZW50X2FwX2Z3OworCXUxNiBtbV9tb2RzOwogCiAJLyogU3VwcGxpZXIgY29tcGF0aWJpbGl0eSByYW5nZXMgKi8KLQloZmEzODR4X2NhcGxldmVsX3QJY2FwX3N1cF9tZmk7Ci0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9zdXBfY2ZpOwotCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfc3VwX3ByaTsKLQloZmEzODR4X2NhcGxldmVsX3QJY2FwX3N1cF9zdGE7Ci0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9zdXBfYXA7CisJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9zdXBfbWZpOworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfc3VwX2NmaTsKKwloZmEzODR4X2NhcGxldmVsX3QgY2FwX3N1cF9wcmk7CisJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9zdXBfc3RhOworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfc3VwX2FwOwogCiAJLyogQWN0b3IgY29tcGF0aWJpbGl0eSByYW5nZXMgKi8KLQloZmEzODR4X2NhcGxldmVsX3QJY2FwX2FjdF9wcmlfY2ZpOyAvKiBwcmkgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCi0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3Rfc3RhX2NmaTsgLyogc3RhIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLwotCWhmYTM4NHhfY2FwbGV2ZWxfdAljYXBfYWN0X3N0YV9tZmk7IC8qIHN0YSBmL3cgdG8gbW9kZW0gaW50ZXJmYWNlICovCi0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3RfYXBfY2ZpOyAgLyogYXAgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCi0JaGZhMzg0eF9jYXBsZXZlbF90CWNhcF9hY3RfYXBfbWZpOyAgLyogYXAgZi93IHRvIG1vZGVtIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfYWN0X3ByaV9jZmk7CS8qIHByaSBmL3cgdG8gY29udHJvbGxlciBpbnRlcmZhY2UgKi8KKwloZmEzODR4X2NhcGxldmVsX3QgY2FwX2FjdF9zdGFfY2ZpOwkvKiBzdGEgZi93IHRvIGNvbnRyb2xsZXIgaW50ZXJmYWNlICovCisJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9hY3Rfc3RhX21maTsJLyogc3RhIGYvdyB0byBtb2RlbSBpbnRlcmZhY2UgKi8KKwloZmEzODR4X2NhcGxldmVsX3QgY2FwX2FjdF9hcF9jZmk7CS8qIGFwIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfYWN0X2FwX21maTsJLyogYXAgZi93IHRvIG1vZGVtIGludGVyZmFjZSAqLwogCi0JdTMyCQkJcHN1c2VyY291bnQ7ICAvKiBQb3dlciBzYXZlIHVzZXIgY291bnQuICovCi0JaGZhMzg0eF9Db21tVGFsbGllczMyX3QJdGFsbGllczsgICAgICAvKiBDb21tdW5pY2F0aW9uIHRhbGxpZXMuICovCi0JdTgJCQljb21tZW50W1dMQU5fQ09NTUVOVF9NQVgrMV07IC8qIFVzZXIgY29tbWVudCAqLworCXUzMiBwc3VzZXJjb3VudDsJLyogUG93ZXIgc2F2ZSB1c2VyIGNvdW50LiAqLworCWhmYTM4NHhfQ29tbVRhbGxpZXMzMl90IHRhbGxpZXM7CS8qIENvbW11bmljYXRpb24gdGFsbGllcy4gKi8KKwl1OCBjb21tZW50W1dMQU5fQ09NTUVOVF9NQVggKyAxXTsJLyogVXNlciBjb21tZW50ICovCiAKIAkvKiBDaGFubmVsIEluZm8gcmVxdWVzdCByZXN1bHRzIChBUCBvbmx5KSAqLwogCXN0cnVjdCB7Ci0JCWF0b21pY190CQlkb25lOwotCQl1OAkJCWNvdW50OwotCQloZmEzODR4X0NoSW5mb1Jlc3VsdF90CXJlc3VsdHM7CisJCWF0b21pY190IGRvbmU7CisJCXU4IGNvdW50OworCQloZmEzODR4X0NoSW5mb1Jlc3VsdF90IHJlc3VsdHM7CiAJfSBjaGFubmVsX2luZm87CiAKLQloZmEzODR4X0luZkZyYW1lX3QgICAgICAqc2NhbnJlc3VsdHM7CisJaGZhMzg0eF9JbmZGcmFtZV90ICpzY2FucmVzdWx0czsKIAotCi0gICAgICAgIHByaXNtMnN0YV9hdXRobGlzdF90CWF1dGhsaXN0OyAgICAgLyogQXV0aGVudGljYXRlZCBzdGF0aW9uIGxpc3QuICovCi0JdW5zaWduZWQgaW50CQkJYWNjZXNzbW9kZTsgICAvKiBBY2Nlc3MgbW9kZS4gKi8KLSAgICAgICAgcHJpc20yc3RhX2FjY2Vzc2xpc3RfdAlhbGxvdzsgICAgICAgIC8qIEFsbG93ZWQgc3RhdGlvbiBsaXN0LiAqLwotICAgICAgICBwcmlzbTJzdGFfYWNjZXNzbGlzdF90CWRlbnk7ICAgICAgICAgLyogRGVuaWVkIHN0YXRpb24gbGlzdC4gKi8KKwlwcmlzbTJzdGFfYXV0aGxpc3RfdCBhdXRobGlzdDsJLyogQXV0aGVudGljYXRlZCBzdGF0aW9uIGxpc3QuICovCisJdW5zaWduZWQgaW50IGFjY2Vzc21vZGU7CS8qIEFjY2VzcyBtb2RlLiAqLworCXByaXNtMnN0YV9hY2Nlc3NsaXN0X3QgYWxsb3c7CS8qIEFsbG93ZWQgc3RhdGlvbiBsaXN0LiAqLworCXByaXNtMnN0YV9hY2Nlc3NsaXN0X3QgZGVueTsJLyogRGVuaWVkIHN0YXRpb24gbGlzdC4gKi8KIAogfSBoZmEzODR4X3Q7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLSBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXZvaWQKLWhmYTM4NHhfY3JlYXRlKAotCWhmYTM4NHhfdCAqaHcsCi0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYik7Ci0KK3ZvaWQgaGZhMzg0eF9jcmVhdGUoaGZhMzg0eF90ICpodywgc3RydWN0IHVzYl9kZXZpY2UgKnVzYik7CiB2b2lkIGhmYTM4NHhfZGVzdHJveShoZmEzODR4X3QgKmh3KTsKIAogaW50Ci1oZmEzODR4X2NvcmVyZXNldCggaGZhMzg0eF90ICpodywgaW50IGhvbGR0aW1lLCBpbnQgc2V0dGxldGltZSwgaW50IGdlbmVzaXMpOwotaW50Ci1oZmEzODR4X2RydnJfY2hpbmZvcmVzdWx0cyggaGZhMzg0eF90ICpodyk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9jb21tdGFsbGllcyggaGZhMzg0eF90ICpodyk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KTsKLWludAotaGZhMzg0eF9kcnZyX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZShoZmEzODR4X3QgKmh3KTsKLWludAotaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KTsKLWludAotaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkKiBidWYsIHUzMiBsZW4pOwotaW50Ci1oZmEzODR4X2RydnJfZ2V0Y29uZmlnKGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHZvaWQgKmJ1ZiwgdTE2IGxlbik7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9oYW5kb3ZlciggaGZhMzg0eF90ICpodywgdTggKmFkZHIpOwotaW50Ci1oZmEzODR4X2RydnJfaG9zdHNjYW5yZXN1bHRzKCBoZmEzODR4X3QgKmh3KTsKLWludAotaGZhMzg0eF9kcnZyX2xvd19sZXZlbChoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKTsKLWludAotaGZhMzg0eF9kcnZyX21taV9yZWFkKGhmYTM4NHhfdCAqaHcsIHUzMiBhZGRyZXNzLCB1MzIgKnJlc3VsdCk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9tbWlfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGFkZHJlc3MsIHUzMiBkYXRhKTsKLWludAotaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MzIgZXhlYWRkcik7Ci1pbnQKLWhmYTM4NHhfZHJ2cl9yYW1kbF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpOwotaW50Ci1oZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkKiBidWYsIHUzMiBsZW4pOwotaW50Ci1oZmEzODR4X2RydnJfcmVhZHBkYShoZmEzODR4X3QgKmh3LCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwotaW50Ci1oZmEzODR4X2RydnJfc2NhbnJlc3VsdHMoIGhmYTM4NHhfdCAqaHcpOworaGZhMzg0eF9jb3JlcmVzZXQoaGZhMzg0eF90ICpodywgaW50IGhvbGR0aW1lLCBpbnQgc2V0dGxldGltZSwgaW50IGdlbmVzaXMpOworaW50IGhmYTM4NHhfZHJ2cl9jb21tdGFsbGllcyhoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2RydnJfZGlzYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCk7CitpbnQgaGZhMzg0eF9kcnZyX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCk7CitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcpOworaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICpodyk7CitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkICpidWYsIHUzMiBsZW4pOworaW50IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqYnVmLCB1MTYgbGVuKTsKK2ludCBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIHUzMiBleGVhZGRyKTsKK2ludCBoZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkICpidWYsIHUzMiBsZW4pOworaW50IGhmYTM4NHhfZHJ2cl9yZWFkcGRhKGhmYTM4NHhfdCAqaHcsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CitpbnQgaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICpidWYsIHUxNiBsZW4pOwogCi1pbnQKLWhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqYnVmLCB1MTYgbGVuKTsKLQotc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICp2YWwpCitzdGF0aWMgaW5saW5lIGludCBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqdmFsKQogewotCWludAkJcmVzdWx0ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCByaWQsIHZhbCwgc2l6ZW9mKHUxNikpOwotCWlmICggcmVzdWx0ID09IDAgKSB7Ci0JCSooKHUxNiopdmFsKSA9IGhmYTM4NHgyaG9zdF8xNigqKCh1MTYqKXZhbCkpOwotCX0KKwlpZiAocmVzdWx0ID09IDApCisJCSooKHUxNiAqKSB2YWwpID0gbGUxNl90b19jcHUoKigodTE2ICopIHZhbCkpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1oZmEzODR4X2RydnJfZ2V0Y29uZmlnMzIoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqdmFsKQorc3RhdGljIGlubGluZSBpbnQgaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHUxNiB2YWwpCiB7Ci0JaW50CQlyZXN1bHQgPSAwOwotCi0JcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgcmlkLCB2YWwsIHNpemVvZih1MzIpKTsKLQlpZiAoIHJlc3VsdCA9PSAwICkgewotCQkqKCh1MzIqKXZhbCkgPSBoZmEzODR4Mmhvc3RfMzIoKigodTMyKil2YWwpKTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIGludAotaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHUxNiB2YWwpCi17Ci0JdTE2IHZhbHVlID0gaG9zdDJoZmEzODR4XzE2KHZhbCk7Ci0JcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIHJpZCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZHJ2cl9zZXRjb25maWczMihoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB1MzIgdmFsKQotewotCXUzMiB2YWx1ZSA9IGhvc3QyaGZhMzg0eF8zMih2YWwpOworCXUxNiB2YWx1ZSA9IGNwdV90b19sZTE2KHZhbCk7CiAJcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIHJpZCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKIH0KIAogaW50Ci1oZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAgICAgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICAgICAgICByaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgKnVzZXJjYl9kYXRhKTsKK2hmYTM4NHhfZHJ2cl9nZXRjb25maWdfYXN5bmMoaGZhMzg0eF90ICpodywKKwkJCSAgICAgdTE2IHJpZCwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAogaW50CiBoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgcmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpOworCQkJICAgICB1MTYgcmlkLAorCQkJICAgICB2b2lkICpidWYsCisJCQkgICAgIHUxNiBsZW4sIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTZfYXN5bmMoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdTE2IHZhbCkKIHsKLQl1MTYgdmFsdWUgPSBob3N0MmhmYTM4NHhfMTYodmFsKTsKKwl1MTYgdmFsdWUgPSBjcHVfdG9fbGUxNih2YWwpOwogCXJldHVybiBoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGh3LCByaWQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwKLQkJCQkJICAgIE5VTEwgLCBOVUxMKTsKKwkJCQkJICAgIE5VTEwsIE5VTEwpOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotaGZhMzg0eF9kcnZyX3NldGNvbmZpZzMyX2FzeW5jKGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHUzMiB2YWwpCi17Ci0JdTMyIHZhbHVlID0gaG9zdDJoZmEzODR4XzMyKHZhbCk7Ci0JcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoaHcsIHJpZCwgJnZhbHVlLCBzaXplb2YodmFsdWUpLAotCQkJCQkgICAgTlVMTCAsIE5VTEwpOwotfQoraW50IGhmYTM4NHhfZHJ2cl9zdGFydChoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2RydnJfc3RvcChoZmEzODR4X3QgKmh3KTsKK2ludAoraGZhMzg0eF9kcnZyX3R4ZnJhbWUoaGZhMzg0eF90ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOwordm9pZCBoZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKIAotCitpbnQgaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2NtZF9lbmFibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpOworaW50IGhmYTM4NHhfY21kX2Rpc2FibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpOworaW50IGhmYTM4NHhfY21kX2FsbG9jYXRlKGhmYTM4NHhfdCAqaHcsIHUxNiBsZW4pOworaW50IGhmYTM4NHhfY21kX21vbml0b3IoaGZhMzg0eF90ICpodywgdTE2IGVuYWJsZSk7CiBpbnQKLWhmYTM4NHhfZHJ2cl9zdGFydChoZmEzODR4X3QgKmh3KTsKLWludAotaGZhMzg0eF9kcnZyX3N0b3AoaGZhMzg0eF90ICpodyk7Ci1pbnQKLWhmYTM4NHhfZHJ2cl90eGZyYW1lKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7Ci12b2lkCi1oZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLQotaW50Ci1oZmEzODR4X2NtZF9pbml0aWFsaXplKGhmYTM4NHhfdCAqaHcpOwotaW50Ci1oZmEzODR4X2NtZF9lbmFibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpOwotaW50Ci1oZmEzODR4X2NtZF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KTsKLWludAotaGZhMzg0eF9jbWRfZGlhZ25vc2UoaGZhMzg0eF90ICpodyk7Ci1pbnQKLWhmYTM4NHhfY21kX2FsbG9jYXRlKGhmYTM4NHhfdCAqaHcsIHUxNiBsZW4pOwotaW50Ci1oZmEzODR4X2NtZF90cmFuc21pdChoZmEzODR4X3QgKmh3LCB1MTYgcmVjbGFpbSwgdTE2IHFvcywgdTE2IGZpZCk7Ci1pbnQKLWhmYTM4NHhfY21kX2NsZWFycGVyc2lzdChoZmEzODR4X3QgKmh3LCB1MTYgZmlkKTsKLWludAotaGZhMzg0eF9jbWRfYWNjZXNzKGhmYTM4NHhfdCAqaHcsIHUxNiB3cml0ZSwgdTE2IHJpZCwgdm9pZCAqYnVmLCB1MTYgbGVuKTsKLWludAotaGZhMzg0eF9jbWRfbW9uaXRvcihoZmEzODR4X3QgKmh3LCB1MTYgZW5hYmxlKTsKLWludAotaGZhMzg0eF9jbWRfZG93bmxvYWQoCi0JaGZhMzg0eF90ICpodywKLQl1MTYgbW9kZSwKLQl1MTYgbG93YWRkciwKLQl1MTYgaGlnaGFkZHIsCi0JdTE2IGNvZGVsZW4pOwotaW50Ci1oZmEzODR4X2NtZF9hdXhfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIGludCBmb3JjZSk7Ci1pbnQKLWhmYTM4NHhfY21kX2F1eF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpOwotaW50Ci1oZmEzODR4X2NvcHlfZnJvbV9iYXAoCi0JaGZhMzg0eF90ICpodywKLQl1MTYJYmFwLAotCXUxNglpZCwKLQl1MTYJb2Zmc2V0LAotCXZvaWQJKmJ1ZiwKLQl1bnNpZ25lZCBpbnQJbGVuKTsKLWludAotaGZhMzg0eF9jb3B5X3RvX2JhcCgKLQloZmEzODR4X3QgKmh3LAotCXUxNgliYXAsCi0JdTE2CWlkLAotCXUxNglvZmZzZXQsCi0Jdm9pZAkqYnVmLAotCXVuc2lnbmVkIGludAlsZW4pOwotdm9pZAotaGZhMzg0eF9jb3B5X2Zyb21fYXV4KAotCWhmYTM4NHhfdCAqaHcsCi0JdTMyCWNhcmRhZGRyLAotCXUzMglhdXhjdGwsCi0Jdm9pZAkqYnVmLAotCXVuc2lnbmVkIGludAlsZW4pOwotdm9pZAotaGZhMzg0eF9jb3B5X3RvX2F1eCgKLQloZmEzODR4X3QgKmh3LAotCXUzMgljYXJkYWRkciwKLQl1MzIJYXV4Y3RsLAotCXZvaWQJKmJ1ZiwKLQl1bnNpZ25lZCBpbnQJbGVuKTsKK2hmYTM4NHhfY21kX2Rvd25sb2FkKGhmYTM4NHhfdCAqaHcsCisJCSAgICAgdTE2IG1vZGUsIHUxNiBsb3dhZGRyLCB1MTYgaGlnaGFkZHIsIHUxNiBjb2RlbGVuKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAotI2VuZGlmICAvKiBfSEZBMzg0eF9IICovCisjZW5kaWYgLyogX0hGQTM4NHhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMKaW5kZXggOGE3NWI1MC4uODg4MTk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jCkBAIC0xMTAsMTAgKzExMCw2IEBACiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogU3lzdGVtIEluY2x1ZGVzICovCi0jZGVmaW5lIFdMQU5fREJWQVIJcHJpc20yX2RlYnVnCi0KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEzMCw4ICsxMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CiAKICNkZWZpbmUgU1VCTUlUX1VSQih1LGYpICB1c2Jfc3VibWl0X3VyYih1LGYpCiAKQEAgLTE1MCw2OSArMTQ1LDQzIEBACiAjaW5jbHVkZSAiaGZhMzg0eC5oIgogI2luY2x1ZGUgInByaXNtMm1nbXQuaCIKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIENvbnN0YW50cyAqLwotCi1lbnVtIGNtZF9tb2RlCi17Ci0gIERPV0FJVCA9IDAsCi0gIERPQVNZTkMKK2VudW0gY21kX21vZGUgeworCURPV0FJVCA9IDAsCisJRE9BU1lOQwogfTsKIHR5cGVkZWYgZW51bSBjbWRfbW9kZSBDTURfTU9ERTsKIAogI2RlZmluZSBUSFJPVFRMRV9KSUZGSUVTCShIWi84KQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgTWFjcm9zICovCisjZGVmaW5lIFVSQl9BU1lOQ19VTkxJTksgMAorI2RlZmluZSBVU0JfUVVFVUVfQlVMSyAwCiAKICNkZWZpbmUgUk9VTkRVUDY0KGEpICgoKGEpKzYzKSZ+NjMpCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBUeXBlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCi1leHRlcm4gaW50IHByaXNtMl9kZWJ1ZzsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCiAjaWZkZWYgREVCVUdfVVNCCi1zdGF0aWMgdm9pZAotZGJwcmludF91cmIoc3RydWN0IHVyYiogdXJiKTsKK3N0YXRpYyB2b2lkIGRicHJpbnRfdXJiKHN0cnVjdCB1cmIgKnVyYik7CiAjZW5kaWYKIAogc3RhdGljIHZvaWQKLWhmYTM4NHhfaW50X3J4bW9uaXRvcigKLQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsCi0JaGZhMzg0eF91c2Jfcnhmcm1fdCAqcnhmcm0pOworaGZhMzg0eF9pbnRfcnhtb25pdG9yKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jfcnhmcm1fdCAqcnhmcm0pOwogCi1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2JfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQKLXN1Ym1pdF9yeF91cmIoaGZhMzg0eF90ICpodywgZ2ZwX3QgZmxhZ3MpOworc3RhdGljIGludCBzdWJtaXRfcnhfdXJiKGhmYTM4NHhfdCAqaHcsIGdmcF90IGZsYWdzKTsKIAotc3RhdGljIGludAotc3VibWl0X3R4X3VyYihoZmEzODR4X3QgKmh3LCBzdHJ1Y3QgdXJiICp0eF91cmIsIGdmcF90IGZsYWdzKTsKK3N0YXRpYyBpbnQgc3VibWl0X3R4X3VyYihoZmEzODR4X3QgKmh3LCBzdHJ1Y3QgdXJiICp0eF91cmIsIGdmcF90IGZsYWdzKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogQ2FsbGJhY2tzICovCi1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2JvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyB2b2lkCi1oZmEzODR4X2N0bHhvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYm91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIHZvaWQgaGZhMzg0eF9jdGx4b3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiAKIHN0YXRpYyB2b2lkCiBoZmEzODR4X3VzYmluX3R4Y29tcGwod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X3VzYmluX3QgKnVzYmluKTsKIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiaW5fcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5fcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiaW5faW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiaW5fdCAqdXNiaW4pOworc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jpbl90ICp1c2Jpbik7CiAKIHN0YXRpYyB2b2lkCiBoZmEzODR4X3VzYm91dF90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNib3V0X3QgKnVzYm91dCk7CkBAIC0yMjMsMTIzICsxOTIsOTQgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBwcmlzbTIgdXNiIGNvbW1hbmQgcXVldWUgKi8KIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiY3RseHFfcnVuKGhmYTM4NHhfdCAqaHcpOworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4cV9ydW4oaGZhMzg0eF90ICpodyk7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4X3JlcXRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKTsKIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiY3RseF9yZXNwdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4X3Jlc3B0aW1lcmZuKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYl90aHJvdHRsZWZuKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYl90aHJvdHRsZWZuKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhfcmVhcGVyX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpOwogCi1zdGF0aWMgaW50Ci1oZmEzODR4X3VzYmN0bHhfc3VibWl0KGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKK3N0YXRpYyBpbnQgaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CiAKLXN0YXRpYyB2b2lkCi11bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKK3N0YXRpYyB2b2lkIHVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpOwogCi1zdHJ1Y3QgdXNiY3RseF9jb21wbGV0b3IKLXsKLQlpbnQgKCpjb21wbGV0ZSkoc3RydWN0IHVzYmN0bHhfY29tcGxldG9yKik7CitzdHJ1Y3QgdXNiY3RseF9jb21wbGV0b3IgeworCWludCAoKmNvbXBsZXRlKSAoc3RydWN0IHVzYmN0bHhfY29tcGxldG9yICopOwogfTsKIHR5cGVkZWYgc3RydWN0IHVzYmN0bHhfY29tcGxldG9yIHVzYmN0bHhfY29tcGxldG9yX3Q7CiAKIHN0YXRpYyBpbnQKIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKGhmYTM4NHhfdCAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYmN0bHhfY29tcGxldG9yX3QgKmNvbXBsZXRvcik7CisJCQkgICAgICBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCwKKwkJCSAgICAgIHVzYmN0bHhfY29tcGxldG9yX3QgKmNvbXBsZXRvcik7CiAKIHN0YXRpYyBpbnQKIHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfY2Jfc3RhdHVzKGhmYTM4NHhfdCAqaHcsIGNvbnN0IGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKK3N0YXRpYyB2b2lkIGhmYTM4NHhfY2Jfc3RhdHVzKGhmYTM4NHhfdCAqaHcsIGNvbnN0IGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KTsKIAotc3RhdGljIHZvaWQKLWhmYTM4NHhfY2JfcnJpZChoZmEzODR4X3QgKmh3LCBjb25zdCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCk7CitzdGF0aWMgdm9pZCBoZmEzODR4X2NiX3JyaWQoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpOwogCiBzdGF0aWMgaW50CiB1c2JjdGx4X2dldF9zdGF0dXMoY29uc3QgaGZhMzg0eF91c2JfY21kcmVzcF90ICpjbWRyZXNwLAotICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfY21kcmVzdWx0X3QgKnJlc3VsdCk7CisJCSAgIGhmYTM4NHhfY21kcmVzdWx0X3QgKnJlc3VsdCk7CiAKIHN0YXRpYyB2b2lkCiB1c2JjdGx4X2dldF9ycmlkcmVzdWx0KGNvbnN0IGhmYTM4NHhfdXNiX3JyaWRyZXNwX3QgKnJyaWRyZXNwLAotICAgICAgICAgICAgICAgICAgICAgICBoZmEzODR4X3JyaWRyZXN1bHRfdCAqcmVzdWx0KTsKKwkJICAgICAgIGhmYTM4NHhfcnJpZHJlc3VsdF90ICpyZXN1bHQpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBMb3cgbGV2ZWwgcmVxL3Jlc3AgQ1RMWCBmb3JtYXR0ZXJzIGFuZCBzdWJtaXR0ZXJzICovCiBzdGF0aWMgaW50Ci1oZmEzODR4X2RvY21kKAotCWhmYTM4NHhfdCAqaHcsCi0JQ01EX01PREUgbW9kZSwKLQloZmEzODR4X21ldGFjbWRfdCAqY21kLAotCWN0bHhfY21kY2JfdCBjbWRjYiwKLQljdGx4X3VzZXJjYl90IHVzZXJjYiwKLQl2b2lkCSp1c2VyY2JfZGF0YSk7CitoZmEzODR4X2RvY21kKGhmYTM4NHhfdCAqaHcsCisJICAgICAgQ01EX01PREUgbW9kZSwKKwkgICAgICBoZmEzODR4X21ldGFjbWRfdCAqY21kLAorCSAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAogc3RhdGljIGludAotaGZhMzg0eF9kb3JyaWQoCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCXUxNglyaWQsCi0Jdm9pZAkqcmlkZGF0YSwKLQl1bnNpZ25lZCBpbnQJcmlkZGF0YWxlbiwKLQljdGx4X2NtZGNiX3QgY21kY2IsCi0JY3RseF91c2VyY2JfdCB1c2VyY2IsCi0Jdm9pZAkqdXNlcmNiX2RhdGEpOworaGZhMzg0eF9kb3JyaWQoaGZhMzg0eF90ICpodywKKwkgICAgICAgQ01EX01PREUgbW9kZSwKKwkgICAgICAgdTE2IHJpZCwKKwkgICAgICAgdm9pZCAqcmlkZGF0YSwKKwkgICAgICAgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4sCisJICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAogc3RhdGljIGludAotaGZhMzg0eF9kb3dyaWQoCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCXUxNglyaWQsCi0Jdm9pZAkqcmlkZGF0YSwKLQl1bnNpZ25lZCBpbnQJcmlkZGF0YWxlbiwKLQljdGx4X2NtZGNiX3QgY21kY2IsCi0JY3RseF91c2VyY2JfdCB1c2VyY2IsCi0Jdm9pZAkqdXNlcmNiX2RhdGEpOworaGZhMzg0eF9kb3dyaWQoaGZhMzg0eF90ICpodywKKwkgICAgICAgQ01EX01PREUgbW9kZSwKKwkgICAgICAgdTE2IHJpZCwKKwkgICAgICAgdm9pZCAqcmlkZGF0YSwKKwkgICAgICAgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4sCisJICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAogc3RhdGljIGludAotaGZhMzg0eF9kb3JtZW0oCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCXUxNglwYWdlLAotCXUxNglvZmZzZXQsCi0Jdm9pZAkqZGF0YSwKLQl1bnNpZ25lZCBpbnQJbGVuLAotCWN0bHhfY21kY2JfdCBjbWRjYiwKLQljdGx4X3VzZXJjYl90IHVzZXJjYiwKLQl2b2lkCSp1c2VyY2JfZGF0YSk7CitoZmEzODR4X2Rvcm1lbShoZmEzODR4X3QgKmh3LAorCSAgICAgICBDTURfTU9ERSBtb2RlLAorCSAgICAgICB1MTYgcGFnZSwKKwkgICAgICAgdTE2IG9mZnNldCwKKwkgICAgICAgdm9pZCAqZGF0YSwKKwkgICAgICAgdW5zaWduZWQgaW50IGxlbiwKKwkgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpOwogCiBzdGF0aWMgaW50Ci1oZmEzODR4X2Rvd21lbSgKLQloZmEzODR4X3QgKmh3LAotCUNNRF9NT0RFIG1vZGUsCi0JdTE2CXBhZ2UsCi0JdTE2CW9mZnNldCwKLQl2b2lkCSpkYXRhLAotCXVuc2lnbmVkIGludAlsZW4sCi0JY3RseF9jbWRjYl90IGNtZGNiLAotCWN0bHhfdXNlcmNiX3QgdXNlcmNiLAotCXZvaWQJKnVzZXJjYl9kYXRhKTsKK2hmYTM4NHhfZG93bWVtKGhmYTM4NHhfdCAqaHcsCisJICAgICAgIENNRF9NT0RFIG1vZGUsCisJICAgICAgIHUxNiBwYWdlLAorCSAgICAgICB1MTYgb2Zmc2V0LAorCSAgICAgICB2b2lkICpkYXRhLAorCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuLAorCSAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSk7CiAKLXN0YXRpYyBpbnQKLWhmYTM4NHhfaXNnb29kX3BkcmNvZGUodTE2IHBkcmNvZGUpOworc3RhdGljIGludCBoZmEzODR4X2lzZ29vZF9wZHJjb2RlKHUxNiBwZHJjb2RlKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGN0bHhzdHIoQ1RMWF9TVEFURSBzKQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpjdGx4c3RyKENUTFhfU1RBVEUgcykKIHsKLQlzdGF0aWMgY29uc3QgY2hhciogY3RseF9zdHJbXSA9IHsKKwlzdGF0aWMgY29uc3QgY2hhciAqY3RseF9zdHJbXSA9IHsKIAkJIkluaXRpYWwgc3RhdGUiLAogCQkiQ29tcGxldGUiLAogCQkiUmVxdWVzdCBmYWlsZWQiLApAQCAtMzUyLDM2ICsyOTIsMzYgQEAKIAlyZXR1cm4gY3RseF9zdHJbc107CiB9OwogCi0KLXN0YXRpYyBpbmxpbmUgaGZhMzg0eF91c2JjdGx4X3QqCi1nZXRfYWN0aXZlX2N0bHgoaGZhMzg0eF90ICpodykKK3N0YXRpYyBpbmxpbmUgaGZhMzg0eF91c2JjdGx4X3QgKmdldF9hY3RpdmVfY3RseChoZmEzODR4X3QgKmh3KQogewogCXJldHVybiBsaXN0X2VudHJ5KGh3LT5jdGx4cS5hY3RpdmUubmV4dCwgaGZhMzg0eF91c2JjdGx4X3QsIGxpc3QpOwogfQogCi0KICNpZmRlZiBERUJVR19VU0IKLXZvaWQKLWRicHJpbnRfdXJiKHN0cnVjdCB1cmIqIHVyYikKK3ZvaWQgZGJwcmludF91cmIoc3RydWN0IHVyYiAqdXJiKQogewotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+cGlwZT0weCUwOHhcbiIsIHVyYi0+cGlwZSk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT5zdGF0dXM9MHglMDh4XG4iLCB1cmItPnN0YXR1cyk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT50cmFuc2Zlcl9mbGFncz0weCUwOHhcbiIsIHVyYi0+dHJhbnNmZXJfZmxhZ3MpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+dHJhbnNmZXJfYnVmZmVyPTB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCl1cmItPnRyYW5zZmVyX2J1ZmZlcik7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoPTB4JTA4eFxuIiwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLQlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmFjdHVhbF9sZW5ndGg9MHglMDh4XG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+YmFuZHdpZHRoPTB4JTA4eFxuIiwgdXJiLT5iYW5kd2lkdGgpOwotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+c2V0dXBfcGFja2V0KGN0bCk9MHglMDh4XG4iLCAodW5zaWduZWQgaW50KXVyYi0+c2V0dXBfcGFja2V0KTsKLQlXTEFOX0xPR19ERUJVRygzLCJ1cmItPnN0YXJ0X2ZyYW1lKGlzby9pcnEpPTB4JTA4eFxuIiwgdXJiLT5zdGFydF9mcmFtZSk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT5pbnRlcnZhbChpcnEpPTB4JTA4eFxuIiwgdXJiLT5pbnRlcnZhbCk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT5lcnJvcl9jb3VudChpc28pPTB4JTA4eFxuIiwgdXJiLT5lcnJvcl9jb3VudCk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT50aW1lb3V0PTB4JTA4eFxuIiwgdXJiLT50aW1lb3V0KTsKLQlXTEFOX0xPR19ERUJVRygzLCJ1cmItPmNvbnRleHQ9MHglMDh4XG4iLCAodW5zaWduZWQgaW50KXVyYi0+Y29udGV4dCk7Ci0JV0xBTl9MT0dfREVCVUcoMywidXJiLT5jb21wbGV0ZT0weCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpdXJiLT5jb21wbGV0ZSk7CisJcHJfZGVidWcoInVyYi0+cGlwZT0weCUwOHhcbiIsIHVyYi0+cGlwZSk7CisJcHJfZGVidWcoInVyYi0+c3RhdHVzPTB4JTA4eFxuIiwgdXJiLT5zdGF0dXMpOworCXByX2RlYnVnKCJ1cmItPnRyYW5zZmVyX2ZsYWdzPTB4JTA4eFxuIiwgdXJiLT50cmFuc2Zlcl9mbGFncyk7CisJcHJfZGVidWcoInVyYi0+dHJhbnNmZXJfYnVmZmVyPTB4JTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludCl1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJcHJfZGVidWcoInVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aD0weCUwOHhcbiIsCisJICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CisJcHJfZGVidWcoInVyYi0+YWN0dWFsX2xlbmd0aD0weCUwOHhcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJcHJfZGVidWcoInVyYi0+YmFuZHdpZHRoPTB4JTA4eFxuIiwgdXJiLT5iYW5kd2lkdGgpOworCXByX2RlYnVnKCJ1cmItPnNldHVwX3BhY2tldChjdGwpPTB4JTA4eFxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGludCl1cmItPnNldHVwX3BhY2tldCk7CisJcHJfZGVidWcoInVyYi0+c3RhcnRfZnJhbWUoaXNvL2lycSk9MHglMDh4XG4iLAorCSAgICAgICB1cmItPnN0YXJ0X2ZyYW1lKTsKKwlwcl9kZWJ1ZygidXJiLT5pbnRlcnZhbChpcnEpPTB4JTA4eFxuIiwgdXJiLT5pbnRlcnZhbCk7CisJcHJfZGVidWcoInVyYi0+ZXJyb3JfY291bnQoaXNvKT0weCUwOHhcbiIsIHVyYi0+ZXJyb3JfY291bnQpOworCXByX2RlYnVnKCJ1cmItPnRpbWVvdXQ9MHglMDh4XG4iLCB1cmItPnRpbWVvdXQpOworCXByX2RlYnVnKCJ1cmItPmNvbnRleHQ9MHglMDh4XG4iLCAodW5zaWduZWQgaW50KXVyYi0+Y29udGV4dCk7CisJcHJfZGVidWcoInVyYi0+Y29tcGxldGU9MHglMDh4XG4iLAorCSAgICAgICAodW5zaWduZWQgaW50KXVyYi0+Y29tcGxldGUpOwogfQogI2VuZGlmCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHN1Ym1pdF9yeF91cmIKICoKQEAgLTM5OCwxNCArMzM4LDExIEBACiAqIENhbGwgY29udGV4dDoKICoJQW55CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQKLXN1Ym1pdF9yeF91cmIoaGZhMzg0eF90ICpodywgZ2ZwX3QgbWVtZmxhZ3MpCitzdGF0aWMgaW50IHN1Ym1pdF9yeF91cmIoaGZhMzg0eF90ICpodywgZ2ZwX3QgbWVtZmxhZ3MpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgcmVzdWx0OwogCi0JREJGRU5URVI7Ci0KIAlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZihoZmEzODR4X3VzYmluX3QpKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKQEAgLTQxNCwyMSArMzUxLDIyIEBACiAKIAkvKiBQb3N0IHRoZSBJTiB1cmIgKi8KIAl1c2JfZmlsbF9idWxrX3VyYigmaHctPnJ4X3VyYiwgaHctPnVzYiwKLQkgICAgICAgICAgICAgIGh3LT5lbmRwX2luLAotCSAgICAgICAgICAgICAgc2tiLT5kYXRhLCBzaXplb2YoaGZhMzg0eF91c2Jpbl90KSwKLQkgICAgICAgICAgICAgIGhmYTM4NHhfdXNiaW5fY2FsbGJhY2ssIGh3LT53bGFuZGV2KTsKKwkJCSAgaHctPmVuZHBfaW4sCisJCQkgIHNrYi0+ZGF0YSwgc2l6ZW9mKGhmYTM4NHhfdXNiaW5fdCksCisJCQkgIGhmYTM4NHhfdXNiaW5fY2FsbGJhY2ssIGh3LT53bGFuZGV2KTsKIAogCWh3LT5yeF91cmJfc2tiID0gc2tiOwogCiAJcmVzdWx0ID0gLUVOT0xJTks7Ci0JaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJiAhdGVzdF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpIHsKKwlpZiAoIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgJiYgIXRlc3RfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CiAJCXJlc3VsdCA9IFNVQk1JVF9VUkIoJmh3LT5yeF91cmIsIG1lbWZsYWdzKTsKIAogCQkvKiBDaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gcmVzZXQgdGhlIFJYIHBpcGUgKi8KIAkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKLQkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHJ4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKLQkJCSAgICAgICAgICAgICAgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7Ci0JCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpICkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXMgcnggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAorCQkJICAgICAgIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKQogCQkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CiAJCX0KIAl9CkBAIC00MzksOSArMzc3LDcgQEAKIAkJaHctPnJ4X3VyYl9za2IgPSBOVUxMOwogCX0KIAotIGRvbmU6Ci0KLQlEQkZFWElUOworZG9uZToKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NjMsMjQgKzM5OSwyMyBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCUFueQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50Ci1zdWJtaXRfdHhfdXJiKGhmYTM4NHhfdCAqaHcsIHN0cnVjdCB1cmIgKnR4X3VyYiwgZ2ZwX3QgbWVtZmxhZ3MpCitzdGF0aWMgaW50IHN1Ym1pdF90eF91cmIoaGZhMzg0eF90ICpodywgc3RydWN0IHVyYiAqdHhfdXJiLCBnZnBfdCBtZW1mbGFncykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gaHctPndsYW5kZXYtPm5ldGRldjsKIAlpbnQgcmVzdWx0OwogCi0JREJGRU5URVI7Ci0KIAlyZXN1bHQgPSAtRU5PTElOSzsKLQlpZiAoIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSApIHsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiAKLQkJaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJiAhdGVzdF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgKSB7CisJCWlmICghaHctPndsYW5kZXYtPmh3cmVtb3ZlZAorCQkgICAgJiYgIXRlc3RfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CiAJCQlyZXN1bHQgPSBTVUJNSVRfVVJCKHR4X3VyYiwgbWVtZmxhZ3MpOwogCiAJCQkvKiBUZXN0IHdoZXRoZXIgd2UgbmVlZCB0byByZXNldCB0aGUgVFggcGlwZSAqLwogCQkJaWYgKHJlc3VsdCA9PSAtRVBJUEUpIHsKLQkJCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCi0JCQkJICAgICAgICAgICAgICAgICBuZXRkZXYtPm5hbWUpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAgICAgIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCQkgICAgICAgbmV0ZGV2LT5uYW1lKTsKIAkJCQlzZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpOwogCQkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CiAJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSAwKSB7CkBAIC00ODksOCArNDI0LDYgQEAKIAkJfQogCX0KIAotCURCRkVYSVQ7Ci0KIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC01MTAsMjcgKzQ0MywyMiBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MgKGJ5IGRlc2lnbikKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKIAloZmEzODR4X3QgKmh3ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBoZmEzODR4LCB1c2Jfd29yayk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGh3LT53bGFuZGV2LT5uZXRkZXY7CiAKLQlEQkZFTlRFUjsKLQogCS8qIERvbid0IGJvdGhlciB0cnlpbmcgdG8gcmVzZXQgYW55dGhpbmcgaWYgdGhlIHBsdWcKIAkgKiBoYXMgYmVlbiBwdWxsZWQgLi4uCiAJICovCi0JaWYgKCBody0+d2xhbmRldi0+aHdyZW1vdmVkICkgewotCQlEQkZFWElUOworCWlmIChody0+d2xhbmRldi0+aHdyZW1vdmVkKQogCQlyZXR1cm47Ci0JfQogCiAJLyogUmVjZXB0aW9uIGhhcyBzdG9wcGVkOiB0cnkgdG8gcmVzZXQgdGhlIGlucHV0IHBpcGUgKi8KIAlpZiAodGVzdF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpIHsKIAkJaW50IHJldDsKIAotCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOyAgLyogQ2Fubm90IGJlIGhvbGRpbmcgc3BpbmxvY2shICovCisJCXVzYl9raWxsX3VyYigmaHctPnJ4X3VyYik7CS8qIENhbm5vdCBiZSBob2xkaW5nIHNwaW5sb2NrISAqLwogCiAJCXJldCA9IHVzYl9jbGVhcl9oYWx0KGh3LT51c2IsIGh3LT5lbmRwX2luKTsKIAkJaWYgKHJldCAhPSAwKSB7CkBAIC01MzksMTQgKzQ2NywxNCBAQAogCQkJICAgICAgIG5ldGRldi0+bmFtZSwgcmV0KTsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzIHJ4IHBpcGUgcmVzZXQgY29tcGxldGUuXG4iLAotCQkJICAgICAgICAgICAgICAgICBuZXRkZXYtPm5hbWUpOworCQkJICAgICAgIG5ldGRldi0+bmFtZSk7CiAJCQljbGVhcl9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CiAJCQlzZXRfYml0KFdPUktfUlhfUkVTVU1FLCAmaHctPnVzYl9mbGFncyk7CiAJCX0KIAl9CiAKIAkvKiBSZXN1bWUgcmVjZWl2aW5nIGRhdGEgYmFjayBmcm9tIHRoZSBkZXZpY2UuICovCi0JaWYgKCB0ZXN0X2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpICkgeworCWlmICh0ZXN0X2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpKSB7CiAJCWludCByZXQ7CiAKIAkJcmV0ID0gc3VibWl0X3J4X3VyYihodywgR0ZQX0tFUk5FTCk7CkBAIC01NzAsNyArNDk4LDcgQEAKIAkJCSAgICAgICBuZXRkZXYtPm5hbWUsIHJldCk7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlcyB0eCBwaXBlIHJlc2V0IGNvbXBsZXRlLlxuIiwKLQkJCSAgICAgICAgICAgICAgICAgbmV0ZGV2LT5uYW1lKTsKKwkJCSAgICAgICBuZXRkZXYtPm5hbWUpOwogCQkJY2xlYXJfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpOwogCQkJc2V0X2JpdChXT1JLX1RYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpOwogCkBAIC01ODMsMTQgKzUxMSwxMCBAQAogCX0KIAogCS8qIFJlc3VtZSB0cmFuc21pdHRpbmcuICovCi0JaWYgKCB0ZXN0X2FuZF9jbGVhcl9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSApIHsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFdPUktfVFhfUkVTVU1FLCAmaHctPnVzYl9mbGFncykpCiAJCW5ldGlmX3dha2VfcXVldWUoaHctPndsYW5kZXYtPm5ldGRldik7Ci0JfQotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9jcmVhdGUKICoKQEAgLTYxMiwxMSArNTM2LDggQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQKLWhmYTM4NHhfY3JlYXRlKCBoZmEzODR4X3QgKmh3LCBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKQordm9pZCBoZmEzODR4X2NyZWF0ZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKQogewotCURCRkVOVEVSOwotCiAJbWVtc2V0KGh3LCAwLCBzaXplb2YoaGZhMzg0eF90KSk7CiAJaHctPnVzYiA9IHVzYjsKIApAQCAtNjM4LDExICs1NTksOSBAQAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmh3LT5hdXRocSk7CiAKIAl0YXNrbGV0X2luaXQoJmh3LT5yZWFwZXJfYmgsCi0JICAgICAgICAgICAgIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzaywKLQkgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpaHcpOworCQkgICAgIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzaywgKHVuc2lnbmVkIGxvbmcpaHcpOwogCXRhc2tsZXRfaW5pdCgmaHctPmNvbXBsZXRpb25fYmgsCi0JICAgICAgICAgICAgIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0aW9uX3Rhc2ssCi0JICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWh3KTsKKwkJICAgICBoZmEzODR4X3VzYmN0bHhfY29tcGxldGlvbl90YXNrLCAodW5zaWduZWQgbG9uZylodyk7CiAJSU5JVF9XT1JLKCZody0+bGlua19iaCwgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIpOwogCUlOSVRfV09SSygmaHctPnVzYl93b3JrLCBoZmEzODR4X3VzYl9kZWZlcik7CiAKQEAgLTY2NSwxNSArNTg0LDEyIEBACiAJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKIAlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX0lOSVQ7CiAKLSAgICAgICAgSU5JVF9XT1JLKCZody0+Y29tbXNxdWFsX2JoLCBwcmlzbTJzdGFfY29tbXNxdWFsX2RlZmVyKTsKKwlJTklUX1dPUksoJmh3LT5jb21tc3F1YWxfYmgsIHByaXNtMnN0YV9jb21tc3F1YWxfZGVmZXIpOwogCWluaXRfdGltZXIoJmh3LT5jb21tc3F1YWxfdGltZXIpOwotCWh3LT5jb21tc3F1YWxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBodzsKKwlody0+Y29tbXNxdWFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylodzsKIAlody0+Y29tbXNxdWFsX3RpbWVyLmZ1bmN0aW9uID0gcHJpc20yc3RhX2NvbW1zcXVhbF90aW1lcjsKLQotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZGVzdHJveQogKgpAQCAtNjk2LDE2ICs2MTIsMTIgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQKLWhmYTM4NHhfZGVzdHJveSggaGZhMzg0eF90ICpodykKK3ZvaWQgaGZhMzg0eF9kZXN0cm95KGhmYTM4NHhfdCAqaHcpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCURCRkVOVEVSOwotCi0JaWYgKCBody0+c3RhdGUgPT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HICkgeworCWlmIChody0+c3RhdGUgPT0gSEZBMzg0eF9TVEFURV9SVU5OSU5HKQogCQloZmEzODR4X2RydnJfc3RvcChodyk7Ci0JfQogCWh3LT5zdGF0ZSA9IEhGQTM4NHhfU1RBVEVfUFJFSU5JVDsKIAogCWlmIChody0+c2NhbnJlc3VsdHMpIHsKQEAgLTcxNCwyMyArNjI2LDE2IEBACiAJfQogCiAJLyogTm93IHRvIGNsZWFuIG91dCB0aGUgYXV0aCBxdWV1ZSAqLwotICAgICAgICB3aGlsZSAoIChza2IgPSBza2JfZGVxdWV1ZSgmaHctPmF1dGhxKSkgKSB7Ci0gICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYihza2IpOwotICAgICAgICB9Ci0KLQlEQkZFWElUOworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmh3LT5hdXRocSkpKQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiB9CiAKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKi8KLXN0YXRpYyBoZmEzODR4X3VzYmN0bHhfdCogdXNiY3RseF9hbGxvYyh2b2lkKQorc3RhdGljIGhmYTM4NHhfdXNiY3RseF90ICp1c2JjdGx4X2FsbG9jKHZvaWQpCiB7CiAJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CiAKIAljdGx4ID0ga21hbGxvYyhzaXplb2YoKmN0bHgpLCBpbl9pbnRlcnJ1cHQoKSA/IEdGUF9BVE9NSUMgOiBHRlBfS0VSTkVMKTsKLQlpZiAoY3RseCAhPSBOVUxMKQotCXsKKwlpZiAoY3RseCAhPSBOVUxMKSB7CiAJCW1lbXNldChjdGx4LCAwLCBzaXplb2YoKmN0bHgpKTsKIAkJaW5pdF9jb21wbGV0aW9uKCZjdGx4LT5kb25lKTsKIAl9CkBAIC03MzgsNzAgKzY0Myw1OCBAQAogCXJldHVybiBjdGx4OwogfQogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludAogdXNiY3RseF9nZXRfc3RhdHVzKGNvbnN0IGhmYTM4NHhfdXNiX2NtZHJlc3BfdCAqY21kcmVzcCwKLSAgICAgICAgICAgICAgICAgICBoZmEzODR4X2NtZHJlc3VsdF90ICpyZXN1bHQpCisJCSAgIGhmYTM4NHhfY21kcmVzdWx0X3QgKnJlc3VsdCkKIHsKLQlEQkZFTlRFUjsKKwlyZXN1bHQtPnN0YXR1cyA9IGxlMTZfdG9fY3B1KGNtZHJlc3AtPnN0YXR1cyk7CisJcmVzdWx0LT5yZXNwMCA9IGxlMTZfdG9fY3B1KGNtZHJlc3AtPnJlc3AwKTsKKwlyZXN1bHQtPnJlc3AxID0gbGUxNl90b19jcHUoY21kcmVzcC0+cmVzcDEpOworCXJlc3VsdC0+cmVzcDIgPSBsZTE2X3RvX2NwdShjbWRyZXNwLT5yZXNwMik7CiAKLQlyZXN1bHQtPnN0YXR1cyA9IGhmYTM4NHgyaG9zdF8xNihjbWRyZXNwLT5zdGF0dXMpOwotCXJlc3VsdC0+cmVzcDAgPSBoZmEzODR4Mmhvc3RfMTYoY21kcmVzcC0+cmVzcDApOwotCXJlc3VsdC0+cmVzcDEgPSBoZmEzODR4Mmhvc3RfMTYoY21kcmVzcC0+cmVzcDEpOwotCXJlc3VsdC0+cmVzcDIgPSBoZmEzODR4Mmhvc3RfMTYoY21kcmVzcC0+cmVzcDIpOworCXByX2RlYnVnKCJjbWRyZXN1bHQ6c3RhdHVzPTB4JTA0eCAiCisJICAgICAgICJyZXNwMD0weCUwNHggcmVzcDE9MHglMDR4IHJlc3AyPTB4JTA0eFxuIiwKKwkgICAgICAgcmVzdWx0LT5zdGF0dXMsIHJlc3VsdC0+cmVzcDAsIHJlc3VsdC0+cmVzcDEsIHJlc3VsdC0+cmVzcDIpOwogCi0JV0xBTl9MT0dfREVCVUcoNCwgImNtZHJlc3VsdDpzdGF0dXM9MHglMDR4ICIKLQkgICAgICAgICAgICAgICAgICAicmVzcDA9MHglMDR4IHJlc3AxPTB4JTA0eCByZXNwMj0weCUwNHhcbiIsCi0JICAgICAgICAgICAgICAgIHJlc3VsdC0+c3RhdHVzLAotCSAgICAgICAgICAgICAgICByZXN1bHQtPnJlc3AwLAotCSAgICAgICAgICAgICAgICByZXN1bHQtPnJlc3AxLAotCSAgICAgICAgICAgICAgICByZXN1bHQtPnJlc3AyKTsKLQotCURCRkVYSVQ7Ci0JcmV0dXJuIChyZXN1bHQtPnN0YXR1cyAmIEhGQTM4NHhfU1RBVFVTX1JFU1VMVCk7CisJcmV0dXJuIHJlc3VsdC0+c3RhdHVzICYgSEZBMzg0eF9TVEFUVVNfUkVTVUxUOwogfQogCiBzdGF0aWMgdm9pZAogdXNiY3RseF9nZXRfcnJpZHJlc3VsdChjb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90ICpycmlkcmVzcCwKLSAgICAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9ycmlkcmVzdWx0X3QgKnJlc3VsdCkKKwkJICAgICAgIGhmYTM4NHhfcnJpZHJlc3VsdF90ICpyZXN1bHQpCiB7Ci0JREJGRU5URVI7Ci0KLQlyZXN1bHQtPnJpZCA9IGhmYTM4NHgyaG9zdF8xNihycmlkcmVzcC0+cmlkKTsKKwlyZXN1bHQtPnJpZCA9IGxlMTZfdG9fY3B1KHJyaWRyZXNwLT5yaWQpOwogCXJlc3VsdC0+cmlkZGF0YSA9IHJyaWRyZXNwLT5kYXRhOwotCXJlc3VsdC0+cmlkZGF0YV9sZW4gPSAoKGhmYTM4NHgyaG9zdF8xNihycmlkcmVzcC0+ZnJtbGVuKSAtIDEpICogMik7CisJcmVzdWx0LT5yaWRkYXRhX2xlbiA9ICgobGUxNl90b19jcHUocnJpZHJlc3AtPmZybWxlbikgLSAxKSAqIDIpOwogCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogQ29tcGxldG9yIG9iamVjdDoKICogVGhpcyBjb21wbGV0b3IgbXVzdCBiZSBwYXNzZWQgdG8gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoKQogKiB3aGVuIHByb2Nlc3NpbmcgYSBDVExYIHRoYXQgcmV0dXJucyBhIGhmYTM4NHhfY21kcmVzdWx0X3Qgc3RydWN0dXJlLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdHJ1Y3QgdXNiY3RseF9jbWRfY29tcGxldG9yCi17Ci0JdXNiY3RseF9jb21wbGV0b3JfdAloZWFkOworc3RydWN0IHVzYmN0bHhfY21kX2NvbXBsZXRvciB7CisJdXNiY3RseF9jb21wbGV0b3JfdCBoZWFkOwogCi0JY29uc3QgaGZhMzg0eF91c2JfY21kcmVzcF90CSpjbWRyZXNwOwotCWhmYTM4NHhfY21kcmVzdWx0X3QJKnJlc3VsdDsKKwljb25zdCBoZmEzODR4X3VzYl9jbWRyZXNwX3QgKmNtZHJlc3A7CisJaGZhMzg0eF9jbWRyZXN1bHRfdCAqcmVzdWx0OwogfTsKIHR5cGVkZWYgc3RydWN0IHVzYmN0bHhfY21kX2NvbXBsZXRvciB1c2JjdGx4X2NtZF9jb21wbGV0b3JfdDsKIAogc3RhdGljIGludCB1c2JjdGx4X2NtZF9jb21wbGV0b3JfZm4odXNiY3RseF9jb21wbGV0b3JfdCAqaGVhZCkKIHsKLQl1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCAqY29tcGxldGUgPSAodXNiY3RseF9jbWRfY29tcGxldG9yX3QqKWhlYWQ7CisJdXNiY3RseF9jbWRfY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfY21kX2NvbXBsZXRvcl90ICopIGhlYWQ7CiAJcmV0dXJuIHVzYmN0bHhfZ2V0X3N0YXR1cyhjb21wbGV0ZS0+Y21kcmVzcCwgY29tcGxldGUtPnJlc3VsdCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdXNiY3RseF9jb21wbGV0b3JfdCoKLWluaXRfY21kX2NvbXBsZXRvcih1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCAqY29tcGxldG9yLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IGhmYTM4NHhfdXNiX2NtZHJlc3BfdCAqY21kcmVzcCwKLSAgICAgICAgICAgICAgICAgICBoZmEzODR4X2NtZHJlc3VsdF90ICpyZXN1bHQpCitzdGF0aWMgaW5saW5lIHVzYmN0bHhfY29tcGxldG9yX3QgKmluaXRfY21kX2NvbXBsZXRvcih1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCAqCisJCQkJCQkgICAgICBjb21wbGV0b3IsCisJCQkJCQkgICAgICBjb25zdAorCQkJCQkJICAgICAgaGZhMzg0eF91c2JfY21kcmVzcF90ICoKKwkJCQkJCSAgICAgIGNtZHJlc3AsCisJCQkJCQkgICAgICBoZmEzODR4X2NtZHJlc3VsdF90ICoKKwkJCQkJCSAgICAgIHJlc3VsdCkKIHsKIAljb21wbGV0b3ItPmhlYWQuY29tcGxldGUgPSB1c2JjdGx4X2NtZF9jb21wbGV0b3JfZm47CiAJY29tcGxldG9yLT5jbWRyZXNwID0gY21kcmVzcDsKQEAgLTgxNCw0NCArNzA3LDQxIEBACiAqIFRoaXMgY29tcGxldG9yIG11c3QgYmUgcGFzc2VkIHRvIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKCkKICogd2hlbiBwcm9jZXNzaW5nIGEgQ1RMWCB0aGF0IHJlYWRzIGEgUklELgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdHJ1Y3QgdXNiY3RseF9ycmlkX2NvbXBsZXRvcgotewotCXVzYmN0bHhfY29tcGxldG9yX3QJaGVhZDsKK3N0cnVjdCB1c2JjdGx4X3JyaWRfY29tcGxldG9yIHsKKwl1c2JjdGx4X2NvbXBsZXRvcl90IGhlYWQ7CiAKLQljb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90CSpycmlkcmVzcDsKLQl2b2lkCQkJKnJpZGRhdGE7Ci0JdW5zaWduZWQgaW50CQkJcmlkZGF0YWxlbjsKKwljb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90ICpycmlkcmVzcDsKKwl2b2lkICpyaWRkYXRhOworCXVuc2lnbmVkIGludCByaWRkYXRhbGVuOwogfTsKIHR5cGVkZWYgc3RydWN0IHVzYmN0bHhfcnJpZF9jb21wbGV0b3IgdXNiY3RseF9ycmlkX2NvbXBsZXRvcl90OwogCiBzdGF0aWMgaW50IHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfZm4odXNiY3RseF9jb21wbGV0b3JfdCAqaGVhZCkKIHsKLQl1c2JjdGx4X3JyaWRfY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCopaGVhZDsKKwl1c2JjdGx4X3JyaWRfY29tcGxldG9yX3QgKmNvbXBsZXRlID0gKHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCAqKSBoZWFkOwogCWhmYTM4NHhfcnJpZHJlc3VsdF90IHJyaWRyZXN1bHQ7CiAKIAl1c2JjdGx4X2dldF9ycmlkcmVzdWx0KGNvbXBsZXRlLT5ycmlkcmVzcCwgJnJyaWRyZXN1bHQpOwogCiAJLyogVmFsaWRhdGUgdGhlIGxlbmd0aCwgbm90ZSBib2R5IGxlbiBjYWxjdWxhdGlvbiBpbiBieXRlcyAqLwotCWlmICggcnJpZHJlc3VsdC5yaWRkYXRhX2xlbiAhPSBjb21wbGV0ZS0+cmlkZGF0YWxlbiApIHsKLQkJV0xBTl9MT0dfV0FSTklORygKLQkJCSJSSUQgbGVuIG1pc21hdGNoLCByaWQ9MHglMDR4IGhsZW49JWQgZndsZW49JWRcbiIsCi0JCSAgICAgICAgcnJpZHJlc3VsdC5yaWQsCi0JCSAgICAgICAgY29tcGxldGUtPnJpZGRhdGFsZW4sCi0JCSAgICAgICAgcnJpZHJlc3VsdC5yaWRkYXRhX2xlbik7CisJaWYgKHJyaWRyZXN1bHQucmlkZGF0YV9sZW4gIT0gY29tcGxldGUtPnJpZGRhdGFsZW4pIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIlJJRCBsZW4gbWlzbWF0Y2gsIHJpZD0weCUwNHggaGxlbj0lZCBmd2xlbj0lZFxuIiwKKwkJICAgICAgIHJyaWRyZXN1bHQucmlkLAorCQkgICAgICAgY29tcGxldGUtPnJpZGRhdGFsZW4sIHJyaWRyZXN1bHQucmlkZGF0YV9sZW4pOwogCQlyZXR1cm4gLUVOT0RBVEE7CiAJfQogCi0JbWVtY3B5KGNvbXBsZXRlLT5yaWRkYXRhLAotCSAgICAgICBycmlkcmVzdWx0LnJpZGRhdGEsCi0JICAgICAgIGNvbXBsZXRlLT5yaWRkYXRhbGVuKTsKKwltZW1jcHkoY29tcGxldGUtPnJpZGRhdGEsIHJyaWRyZXN1bHQucmlkZGF0YSwgY29tcGxldGUtPnJpZGRhdGFsZW4pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHVzYmN0bHhfY29tcGxldG9yX3QqCi1pbml0X3JyaWRfY29tcGxldG9yKHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfdCAqY29tcGxldG9yLAotICAgICAgICAgICAgICAgICAgICBjb25zdCBoZmEzODR4X3VzYl9ycmlkcmVzcF90ICpycmlkcmVzcCwKLSAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmlkZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4pCitzdGF0aWMgaW5saW5lIHVzYmN0bHhfY29tcGxldG9yX3QgKmluaXRfcnJpZF9jb21wbGV0b3IodXNiY3RseF9ycmlkX2NvbXBsZXRvcl90CisJCQkJCQkgICAgICAgKmNvbXBsZXRvciwKKwkJCQkJCSAgICAgICBjb25zdAorCQkJCQkJICAgICAgIGhmYTM4NHhfdXNiX3JyaWRyZXNwX3QgKgorCQkJCQkJICAgICAgIHJyaWRyZXNwLCB2b2lkICpyaWRkYXRhLAorCQkJCQkJICAgICAgIHVuc2lnbmVkIGludCByaWRkYXRhbGVuKQogewogCWNvbXBsZXRvci0+aGVhZC5jb21wbGV0ZSA9IHVzYmN0bHhfcnJpZF9jb21wbGV0b3JfZm47CiAJY29tcGxldG9yLT5ycmlkcmVzcCA9IHJyaWRyZXNwOwpAQCAtODc4LDMwICs3NjgsMjkgQEAKICogQ29tcGxldG9yIG9iamVjdDoKICogSW50ZXJwcmV0cyB0aGUgcmVzdWx0cyBvZiBhIHN5bmNocm9ub3VzIG1lbW9yeS1yZWFkCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0cnVjdCB1c2JjdGx4X3JtZW1fY29tcGxldG9yCi17Ci0gICAgICAgIHVzYmN0bHhfY29tcGxldG9yX3QgICAgICAgICAgIGhlYWQ7CitzdHJ1Y3QgdXNiY3RseF9ybWVtX2NvbXBsZXRvciB7CisJdXNiY3RseF9jb21wbGV0b3JfdCBoZWFkOwogCi0gICAgICAgIGNvbnN0IGhmYTM4NHhfdXNiX3JtZW1yZXNwX3QgICpybWVtcmVzcDsKLSAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGE7Ci0gICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuOworCWNvbnN0IGhmYTM4NHhfdXNiX3JtZW1yZXNwX3QgKnJtZW1yZXNwOworCXZvaWQgKmRhdGE7CisJdW5zaWduZWQgaW50IGxlbjsKIH07CiB0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X3JtZW1fY29tcGxldG9yIHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdDsKIAogc3RhdGljIGludCB1c2JjdGx4X3JtZW1fY29tcGxldG9yX2ZuKHVzYmN0bHhfY29tcGxldG9yX3QgKmhlYWQpCiB7Ci0JdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90ICpjb21wbGV0ZSA9ICh1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QqKWhlYWQ7CisJdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90ICpjb21wbGV0ZSA9ICh1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QgKikgaGVhZDsKIAotCVdMQU5fTE9HX0RFQlVHKDQsInJtZW1yZXNwOmxlbj0lZFxuIiwgY29tcGxldGUtPnJtZW1yZXNwLT5mcm1sZW4pOworCXByX2RlYnVnKCJybWVtcmVzcDpsZW49JWRcbiIsIGNvbXBsZXRlLT5ybWVtcmVzcC0+ZnJtbGVuKTsKIAltZW1jcHkoY29tcGxldGUtPmRhdGEsIGNvbXBsZXRlLT5ybWVtcmVzcC0+ZGF0YSwgY29tcGxldGUtPmxlbik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdXNiY3RseF9jb21wbGV0b3JfdCoKLWluaXRfcm1lbV9jb21wbGV0b3IodXNiY3RseF9ybWVtX2NvbXBsZXRvcl90ICpjb21wbGV0b3IsCi0gICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfdXNiX3JtZW1yZXNwX3QgKnJtZW1yZXNwLAotICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLAotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGlubGluZSB1c2JjdGx4X2NvbXBsZXRvcl90ICppbml0X3JtZW1fY29tcGxldG9yKHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfdAorCQkJCQkJICAgICAgICpjb21wbGV0b3IsCisJCQkJCQkgICAgICAgaGZhMzg0eF91c2Jfcm1lbXJlc3BfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpybWVtcmVzcCwgdm9pZCAqZGF0YSwKKwkJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQogewogCWNvbXBsZXRvci0+aGVhZC5jb21wbGV0ZSA9IHVzYmN0bHhfcm1lbV9jb21wbGV0b3JfZm47CiAJY29tcGxldG9yLT5ybWVtcmVzcCA9IHJtZW1yZXNwOwpAQCAtOTMxLDI4ICs4MjAsMjMgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQKLWhmYTM4NHhfY2Jfc3RhdHVzKGhmYTM4NHhfdCAqaHcsIGNvbnN0IGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KQorc3RhdGljIHZvaWQgaGZhMzg0eF9jYl9zdGF0dXMoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCiB7Ci0JREJGRU5URVI7Ci0KLQlpZiAoIGN0bHgtPnVzZXJjYiAhPSBOVUxMICkgeworCWlmIChjdGx4LT51c2VyY2IgIT0gTlVMTCkgewogCQloZmEzODR4X2NtZHJlc3VsdF90IGNtZHJlc3VsdDsKIAogCQlpZiAoY3RseC0+c3RhdGUgIT0gQ1RMWF9DT01QTEVURSkgewogCQkJbWVtc2V0KCZjbWRyZXN1bHQsIDAsIHNpemVvZihjbWRyZXN1bHQpKTsKLQkJCWNtZHJlc3VsdC5zdGF0dXMgPSBIRkEzODR4X1NUQVRVU19SRVNVTFRfU0VUKEhGQTM4NHhfQ01EX0VSUik7CisJCQljbWRyZXN1bHQuc3RhdHVzID0KKwkJCSAgICBIRkEzODR4X1NUQVRVU19SRVNVTFRfU0VUKEhGQTM4NHhfQ01EX0VSUik7CiAJCX0gZWxzZSB7CiAJCQl1c2JjdGx4X2dldF9zdGF0dXMoJmN0bHgtPmluYnVmLmNtZHJlc3AsICZjbWRyZXN1bHQpOwogCQl9CiAKIAkJY3RseC0+dXNlcmNiKGh3LCAmY21kcmVzdWx0LCBjdGx4LT51c2VyY2JfZGF0YSk7CiAJfQotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9jYl9ycmlkCiAqCkBAIC05NzMsMTMyICs4NTcsMTE0IEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkCi1oZmEzODR4X2NiX3JyaWQoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCitzdGF0aWMgdm9pZCBoZmEzODR4X2NiX3JyaWQoaGZhMzg0eF90ICpodywgY29uc3QgaGZhMzg0eF91c2JjdGx4X3QgKmN0bHgpCiB7Ci0JREJGRU5URVI7Ci0KLQlpZiAoIGN0bHgtPnVzZXJjYiAhPSBOVUxMICkgeworCWlmIChjdGx4LT51c2VyY2IgIT0gTlVMTCkgewogCQloZmEzODR4X3JyaWRyZXN1bHRfdCBycmlkcmVzdWx0OwogCiAJCWlmIChjdGx4LT5zdGF0ZSAhPSBDVExYX0NPTVBMRVRFKSB7CiAJCQltZW1zZXQoJnJyaWRyZXN1bHQsIDAsIHNpemVvZihycmlkcmVzdWx0KSk7Ci0JCQlycmlkcmVzdWx0LnJpZCA9IGhmYTM4NHgyaG9zdF8xNihjdGx4LT5vdXRidWYucnJpZHJlcS5yaWQpOworCQkJcnJpZHJlc3VsdC5yaWQgPQorCQkJICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi5ycmlkcmVxLnJpZCk7CiAJCX0gZWxzZSB7Ci0JCQl1c2JjdGx4X2dldF9ycmlkcmVzdWx0KCZjdGx4LT5pbmJ1Zi5ycmlkcmVzcCwgJnJyaWRyZXN1bHQpOworCQkJdXNiY3RseF9nZXRfcnJpZHJlc3VsdCgmY3RseC0+aW5idWYucnJpZHJlc3AsCisJCQkJCSAgICAgICAmcnJpZHJlc3VsdCk7CiAJCX0KIAogCQljdGx4LT51c2VyY2IoaHcsICZycmlkcmVzdWx0LCBjdGx4LT51c2VyY2JfZGF0YSk7CiAJfQotCi0JREJGRVhJVDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZG9jbWRfd2FpdChoZmEzODR4X3QgKmh3LCBoZmEzODR4X21ldGFjbWRfdCAqY21kKQorc3RhdGljIGlubGluZSBpbnQgaGZhMzg0eF9kb2NtZF93YWl0KGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpCiB7CiAJcmV0dXJuIGhmYTM4NHhfZG9jbWQoaHcsIERPV0FJVCwgY21kLCBOVUxMLCBOVUxMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIGhmYTM4NHhfZG9jbWRfYXN5bmMoaGZhMzg0eF90ICpodywKLSAgICAgICAgICAgICAgICAgICAgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKLSAgICAgICAgICAgICAgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLAotICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKLSAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCisJCSAgICBoZmEzODR4X21ldGFjbWRfdCAqY21kLAorCQkgICAgY3RseF9jbWRjYl90IGNtZGNiLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7Ci0JcmV0dXJuIGhmYTM4NHhfZG9jbWQoaHcsIERPQVNZTkMsIGNtZCwKLQkgICAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7CisJcmV0dXJuIGhmYTM4NHhfZG9jbWQoaHcsIERPQVNZTkMsIGNtZCwgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotaGZhMzg0eF9kb3JyaWRfd2FpdChoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICpyaWRkYXRhLCB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbikKK2hmYTM4NHhfZG9ycmlkX3dhaXQoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqcmlkZGF0YSwKKwkJICAgIHVuc2lnbmVkIGludCByaWRkYXRhbGVuKQogewogCXJldHVybiBoZmEzODR4X2RvcnJpZChodywgRE9XQUlULAotCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCi0JICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLCBOVUxMLCBOVUxMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIGhmYTM4NHhfZG9ycmlkX2FzeW5jKGhmYTM4NHhfdCAqaHcsCi0gICAgICAgICAgICAgICAgICAgICB1MTYgcmlkLCB2b2lkICpyaWRkYXRhLCB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbiwKLSAgICAgICAgICAgICAgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKLSAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAotICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCisJCSAgICAgdTE2IHJpZCwgdm9pZCAqcmlkZGF0YSwgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4sCisJCSAgICAgY3RseF9jbWRjYl90IGNtZGNiLAorCQkgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKIAlyZXR1cm4gaGZhMzg0eF9kb3JyaWQoaHcsIERPQVNZTkMsCi0JICAgICAgICAgICAgICAgICAgICAgIHJpZCwgcmlkZGF0YSwgcmlkZGF0YWxlbiwKLQkgICAgICAgICAgICAgICAgICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworCQkJICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAorCQkJICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotaGZhMzg0eF9kb3dyaWRfd2FpdChoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICpyaWRkYXRhLCB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbikKK2hmYTM4NHhfZG93cmlkX3dhaXQoaGZhMzg0eF90ICpodywgdTE2IHJpZCwgdm9pZCAqcmlkZGF0YSwKKwkJICAgIHVuc2lnbmVkIGludCByaWRkYXRhbGVuKQogewogCXJldHVybiBoZmEzODR4X2Rvd3JpZChodywgRE9XQUlULAotCSAgICAgICAgICAgICAgICAgICAgICByaWQsIHJpZGRhdGEsIHJpZGRhdGFsZW4sCi0JICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworCQkJICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLCBOVUxMLCBOVUxMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKIGhmYTM4NHhfZG93cmlkX2FzeW5jKGhmYTM4NHhfdCAqaHcsCi0gICAgICAgICAgICAgICAgICAgICB1MTYgcmlkLCB2b2lkICpyaWRkYXRhLCB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbiwKLSAgICAgICAgICAgICAgICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKLSAgICAgICAgICAgICAgICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAotICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcmNiX2RhdGEpCisJCSAgICAgdTE2IHJpZCwgdm9pZCAqcmlkZGF0YSwgdW5zaWduZWQgaW50IHJpZGRhdGFsZW4sCisJCSAgICAgY3RseF9jbWRjYl90IGNtZGNiLAorCQkgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKIAlyZXR1cm4gaGZhMzg0eF9kb3dyaWQoaHcsIERPQVNZTkMsCi0JICAgICAgICAgICAgICAgICAgICAgIHJpZCwgcmlkZGF0YSwgcmlkZGF0YWxlbiwKLQkgICAgICAgICAgICAgICAgICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworCQkJICAgICAgcmlkLCByaWRkYXRhLCByaWRkYXRhbGVuLAorCQkJICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOwogfQogCiBzdGF0aWMgaW5saW5lIGludAogaGZhMzg0eF9kb3JtZW1fd2FpdChoZmEzODR4X3QgKmh3LAotICAgICAgICAgICAgICAgICAgICB1MTYgcGFnZSwgdTE2IG9mZnNldCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKKwkJICAgIHUxNiBwYWdlLCB1MTYgb2Zmc2V0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXJldHVybiBoZmEzODR4X2Rvcm1lbShodywgRE9XQUlULAotCSAgICAgICAgICAgICAgICAgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwKLQkgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQkgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwgTlVMTCwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBoZmEzODR4X2Rvcm1lbV9hc3luYyhoZmEzODR4X3QgKmh3LAotICAgICAgICAgICAgICAgICAgICAgdTE2IHBhZ2UsIHUxNiBvZmZzZXQsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCi0gICAgICAgICAgICAgICAgICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwKLSAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJjYl9kYXRhKQorCQkgICAgIHUxNiBwYWdlLCB1MTYgb2Zmc2V0LCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKKwkJICAgICBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7CiAJcmV0dXJuIGhmYTM4NHhfZG9ybWVtKGh3LCBET0FTWU5DLAotCSAgICAgICAgICAgICAgICAgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwKLQkgICAgICAgICAgICAgICAgICAgICAgY21kY2IsIHVzZXJjYiwgdXNlcmNiX2RhdGEpOworCQkJICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCisJCQkgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1oZmEzODR4X2Rvd21lbV93YWl0KAotICAgICAgICBoZmEzODR4X3QgKmh3LAotICAgICAgICB1MTYgIHBhZ2UsCi0gICAgICAgIHUxNiAgb2Zmc2V0LAotICAgICAgICB2b2lkICAgICpkYXRhLAotICAgICAgICB1bnNpZ25lZCBpbnQgICAgbGVuKQoraGZhMzg0eF9kb3dtZW1fd2FpdChoZmEzODR4X3QgKmh3LAorCQkgICAgdTE2IHBhZ2UsIHUxNiBvZmZzZXQsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJcmV0dXJuIGhmYTM4NHhfZG93bWVtKGh3LCBET1dBSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCSAgICAgIHBhZ2UsIG9mZnNldCwgZGF0YSwgbGVuLCBOVUxMLCBOVUxMLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZG93bWVtX2FzeW5jKAotICAgICAgICBoZmEzODR4X3QgKmh3LAotICAgICAgICB1MTYgIHBhZ2UsCi0gICAgICAgIHUxNiAgb2Zmc2V0LAotICAgICAgICB2b2lkICAgICpkYXRhLAotICAgICAgICB1bnNpZ25lZCBpbnQgICAgbGVuLAotICAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsCi0gICAgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLAotICAgICAgICB2b2lkICAgICp1c2VyY2JfZGF0YSkKK2hmYTM4NHhfZG93bWVtX2FzeW5jKGhmYTM4NHhfdCAqaHcsCisJCSAgICAgdTE2IHBhZ2UsCisJCSAgICAgdTE2IG9mZnNldCwKKwkJICAgICB2b2lkICpkYXRhLAorCQkgICAgIHVuc2lnbmVkIGludCBsZW4sCisJCSAgICAgY3RseF9jbWRjYl90IGNtZGNiLAorCQkgICAgIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKIAlyZXR1cm4gaGZhMzg0eF9kb3dtZW0oaHcsIERPQVNZTkMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSwgb2Zmc2V0LCBkYXRhLCBsZW4sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRjYiwgdXNlcmNiLCB1c2VyY2JfZGF0YSk7CisJCQkgICAgICBwYWdlLCBvZmZzZXQsIGRhdGEsIGxlbiwKKwkJCSAgICAgIGNtZGNiLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTIwLDE2ICs5ODYsMTIgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludAotaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShoZmEzODR4X3QgKmh3KQoraW50IGhmYTM4NHhfY21kX2luaXRpYWxpemUoaGZhMzg0eF90ICpodykKIHsKLQlpbnQJcmVzdWx0ID0gMDsKLQlpbnQJaTsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgaTsKIAloZmEzODR4X21ldGFjbWRfdCBjbWQ7CiAKLQlEQkZFTlRFUjsKLQotCiAJY21kLmNtZCA9IEhGQTM4NHhfQ01EQ09ERV9JTklUOwogCWNtZC5wYXJtMCA9IDA7CiAJY21kLnBhcm0xID0gMDsKQEAgLTExMzcsMjcgKzk5OSwyMSBAQAogCiAJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKIAotCi0JV0xBTl9MT0dfREVCVUcoMywiY21kcmVzcC5pbml0OiAiCi0JCSJzdGF0dXM9MHglMDR4LCByZXNwMD0weCUwNHgsICIKLQkJInJlc3AxPTB4JTA0eCwgcmVzcDI9MHglMDR4XG4iLAotCQljbWQucmVzdWx0LnN0YXR1cywKLQkJY21kLnJlc3VsdC5yZXNwMCwKLQkJY21kLnJlc3VsdC5yZXNwMSwKLQkJY21kLnJlc3VsdC5yZXNwMik7Ci0JaWYgKCByZXN1bHQgPT0gMCApIHsKLQkJZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X05VTVBPUlRTX01BWDsgaSsrKSB7CisJcHJfZGVidWcoImNtZHJlc3AuaW5pdDogIgorCSAgICAgICAic3RhdHVzPTB4JTA0eCwgcmVzcDA9MHglMDR4LCAiCisJICAgICAgICJyZXNwMT0weCUwNHgsIHJlc3AyPTB4JTA0eFxuIiwKKwkgICAgICAgY21kLnJlc3VsdC5zdGF0dXMsCisJICAgICAgIGNtZC5yZXN1bHQucmVzcDAsIGNtZC5yZXN1bHQucmVzcDEsIGNtZC5yZXN1bHQucmVzcDIpOworCWlmIChyZXN1bHQgPT0gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykKIAkJCWh3LT5wb3J0X2VuYWJsZWRbaV0gPSAwOwotCQl9CiAJfQogCi0gICAgICAgIGh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19OT1RDT05ORUNURUQ7CisJaHctPmxpbmtfc3RhdHVzID0gSEZBMzg0eF9MSU5LX05PVENPTk5FQ1RFRDsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9jbWRfZGlzYWJsZQogKgpAQCAtMTE4MCwyNCArMTAzNiwyMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9jbWRfZGlzYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCkKIHsKLQlpbnQJcmVzdWx0ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKIAloZmEzODR4X21ldGFjbWRfdCBjbWQ7CiAKLQlEQkZFTlRFUjsKLQogCWNtZC5jbWQgPSBIRkEzODR4X0NNRF9DTURDT0RFX1NFVChIRkEzODR4X0NNRENPREVfRElTQUJMRSkgfAotCQkgIEhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKG1hY3BvcnQpOworCSAgICBIRkEzODR4X0NNRF9NQUNQT1JUX1NFVChtYWNwb3J0KTsKIAljbWQucGFybTAgPSAwOwogCWNtZC5wYXJtMSA9IDA7CiAJY21kLnBhcm0yID0gMDsKIAogCXJlc3VsdCA9IGhmYTM4NHhfZG9jbWRfd2FpdChodywgJmNtZCk7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfY21kX2VuYWJsZQogKgpAQCAtMTIyMCwyMCArMTA3MiwxNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9jbWRfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KQogewotCWludAlyZXN1bHQgPSAwOworCWludCByZXN1bHQgPSAwOwogCWhmYTM4NHhfbWV0YWNtZF90IGNtZDsKIAotCURCRkVOVEVSOwotCiAJY21kLmNtZCA9IEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9FTkFCTEUpIHwKLQkJICBIRkEzODR4X0NNRF9NQUNQT1JUX1NFVChtYWNwb3J0KTsKKwkgICAgSEZBMzg0eF9DTURfTUFDUE9SVF9TRVQobWFjcG9ydCk7CiAJY21kLnBhcm0wID0gMDsKIAljbWQucGFybTEgPSAwOwogCWNtZC5wYXJtMiA9IDA7CiAKIAlyZXN1bHQgPSBoZmEzODR4X2RvY21kX3dhaXQoaHcsICZjbWQpOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMjY4LDI0ICsxMTE3LDIwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBoZmEzODR4X2NtZF9tb25pdG9yKGhmYTM4NHhfdCAqaHcsIHUxNiBlbmFibGUpCiB7Ci0JaW50CXJlc3VsdCA9IDA7CisJaW50IHJlc3VsdCA9IDA7CiAJaGZhMzg0eF9tZXRhY21kX3QgY21kOwogCi0JREJGRU5URVI7Ci0KIAljbWQuY21kID0gSEZBMzg0eF9DTURfQ01EQ09ERV9TRVQoSEZBMzg0eF9DTURDT0RFX01PTklUT1IpIHwKLQkJSEZBMzg0eF9DTURfQUlORk9fU0VUKGVuYWJsZSk7CisJICAgIEhGQTM4NHhfQ01EX0FJTkZPX1NFVChlbmFibGUpOwogCWNtZC5wYXJtMCA9IDA7CiAJY21kLnBhcm0xID0gMDsKIAljbWQucGFybTIgPSAwOwogCiAJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9jbWRfZG93bmxvYWQKICoKQEAgLTEzMjUsMTUgKzExNzAsMTQgQEAKICoJcHJvY2VzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9jbWRfZG93bmxvYWQoaGZhMzg0eF90ICpodywgdTE2IG1vZGUsIHUxNiBsb3dhZGRyLAotCQkJCXUxNiBoaWdoYWRkciwgdTE2IGNvZGVsZW4pCisJCQkgdTE2IGhpZ2hhZGRyLCB1MTYgY29kZWxlbikKIHsKLQlpbnQJcmVzdWx0ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKIAloZmEzODR4X21ldGFjbWRfdCBjbWQ7CiAKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19ERUJVRyg1LAotCQkibW9kZT0lZCwgbG93YWRkcj0weCUwNHgsIGhpZ2hhZGRyPTB4JTA0eCwgY29kZWxlbj0lZFxuIiwKLQkJbW9kZSwgbG93YWRkciwgaGlnaGFkZHIsIGNvZGVsZW4pOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJtb2RlPSVkLCBsb3dhZGRyPTB4JTA0eCwgaGlnaGFkZHI9MHglMDR4LCBjb2RlbGVuPSVkXG4iLAorCSAgICAgICBtb2RlLCBsb3dhZGRyLCBoaWdoYWRkciwgY29kZWxlbik7CiAKIAljbWQuY21kID0gKEhGQTM4NHhfQ01EX0NNRENPREVfU0VUKEhGQTM4NHhfQ01EQ09ERV9ET1dOTEQpIHwKIAkJICAgSEZBMzg0eF9DTURfUFJPR01PREVfU0VUKG1vZGUpKTsKQEAgLTEzNDQsNzkgKzExODgsOSBAQAogCiAJcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCAmY21kKTsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogaGZhMzg0eF9jb3B5X2Zyb21fYXV4Ci0qCi0qIENvcGllcyBhIGNvbGxlY3Rpb24gb2YgYnl0ZXMgZnJvbSB0aGUgY29udHJvbGxlciBtZW1vcnkuICBUaGUKLSogQXV4aWxpYXJ5IHBvcnQgTVVTVCBiZSBlbmFibGVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSogV2UgX21pZ2h0XyBiZSBpbiBhIGRvd25sb2FkIHN0YXRlLgotKgotKiBBcmd1bWVudHM6Ci0qCWh3CQlkZXZpY2Ugc3RydWN0dXJlCi0qCWNhcmRhZGRyCWFkZHJlc3MgaW4gaGZhMzg0eCBkYXRhIHNwYWNlIHRvIHJlYWQKLSoJYXV4Y3RsCQlhZGRyZXNzIHNwYWNlIHNlbGVjdAotKglidWYJCXB0ciB0byBkZXN0aW5hdGlvbiBob3N0IGJ1ZmZlcgotKglsZW4JCWxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zZmVyIChpbiBieXRlcykKLSoKLSogUmV0dXJuczoKLSoJbm90aGluZwotKgotKiBTaWRlIGVmZmVjdHM6Ci0qCWJ1ZiBjb250YWlucyB0aGUgZGF0YSBjb3BpZWQKLSoKLSogQ2FsbCBjb250ZXh0OgotKglwcm9jZXNzCi0qCWludGVycnVwdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkCi1oZmEzODR4X2NvcHlfZnJvbV9hdXgoCi0JaGZhMzg0eF90ICpodywgdTMyIGNhcmRhZGRyLCB1MzIgYXV4Y3RsLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JREJGRU5URVI7Ci0JV0xBTl9MT0dfRVJST1IoIm5vdCB1c2VkIGluIFVTQi5cbiIpOwotCURCRkVYSVQ7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIGhmYTM4NHhfY29weV90b19hdXgKLSoKLSogQ29waWVzIGEgY29sbGVjdGlvbiBvZiBieXRlcyB0byB0aGUgY29udHJvbGxlciBtZW1vcnkuICBUaGUKLSogQXV4aWxpYXJ5IHBvcnQgTVVTVCBiZSBlbmFibGVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSogV2UgX21pZ2h0XyBiZSBpbiBhIGRvd25sb2FkIHN0YXRlLgotKgotKiBBcmd1bWVudHM6Ci0qCWh3CQlkZXZpY2Ugc3RydWN0dXJlCi0qCWNhcmRhZGRyCWFkZHJlc3MgaW4gaGZhMzg0eCBkYXRhIHNwYWNlIHRvIHJlYWQKLSoJYXV4Y3RsCQlhZGRyZXNzIHNwYWNlIHNlbGVjdAotKglidWYJCXB0ciB0byBkZXN0aW5hdGlvbiBob3N0IGJ1ZmZlcgotKglsZW4JCWxlbmd0aCBvZiBkYXRhIHRvIHRyYW5zZmVyIChpbiBieXRlcykKLSoKLSogUmV0dXJuczoKLSoJbm90aGluZwotKgotKiBTaWRlIGVmZmVjdHM6Ci0qCUNvbnRyb2xsZXIgbWVtb3J5IG5vdyBjb250YWlucyBhIGNvcHkgb2YgYnVmCi0qCi0qIENhbGwgY29udGV4dDoKLSoJcHJvY2VzcwotKglpbnRlcnJ1cHQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZAotaGZhMzg0eF9jb3B5X3RvX2F1eCgKLQloZmEzODR4X3QgKmh3LCB1MzIgY2FyZGFkZHIsIHUzMiBhdXhjdGwsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKLXsKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19FUlJPUigibm90IHVzZWQgaW4gVVNCLlxuIik7Ci0JREJGRVhJVDsKLX0KLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9jb3JlcmVzZXQKICoKQEAgLTE0NDIsMjAgKzEyMTYsMTcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfY29yZXJlc2V0KGhmYTM4NHhfdCAqaHcsIGludCBob2xkdGltZSwgaW50IHNldHRsZXRpbWUsIGludCBnZW5lc2lzKQogewotCWludCAJCQlyZXN1bHQgPSAwOworCWludCByZXN1bHQgPSAwOwogCi0JREJGRU5URVI7Ci0KLQlyZXN1bHQ9dXNiX3Jlc2V0X2RldmljZShody0+dXNiKTsKLQlpZihyZXN1bHQ8MCkgewotCQlXTEFOX0xPR19FUlJPUigidXNiX3Jlc2V0X2RldmljZSgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIixyZXN1bHQpOworCXJlc3VsdCA9IHVzYl9yZXNldF9kZXZpY2UoaHctPnVzYik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1c2JfcmVzZXRfZGV2aWNlKCkgZmFpbGVkLCByZXN1bHQ9JWQuXG4iLAorCQkgICAgICAgcmVzdWx0KTsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jCiAqCkBAIC0xNDg3LDggKzEyNTgsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJlc3VsdDsKIAotCURCRkVOVEVSOwotCiAJcmVzdWx0ID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZjdGx4LT5kb25lKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwpAQCAtMTQ5NywxNCArMTI2NiwxMSBAQAogCSAqIFdlIGNhbiBvbmx5IGhhbmRsZSB0aGUgQ1RMWCBpZiB0aGUgVVNCIGRpc2Nvbm5lY3QKIAkgKiBmdW5jdGlvbiBoYXMgbm90IHJ1biB5ZXQgLi4uCiAJICovCi0JY2xlYW51cDoKLQlpZiAoIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQotCXsKK2NsZWFudXA6CisJaWYgKGh3LT53bGFuZGV2LT5od3JlbW92ZWQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKLQl9Ci0JZWxzZSBpZiAoIHJlc3VsdCAhPSAwICkKLQl7CisJfSBlbHNlIGlmIChyZXN1bHQgIT0gMCkgewogCQlpbnQgcnVucXVldWUgPSAwOwogCiAJCS8qCkBAIC0xNTE2LDggKzEyODIsNyBAQAogCQkgKiBOT1RFOiBXZSBjYW4gb25seSBkZWxldGUgdGhlIHRpbWVycyBhbmQKIAkJICogICAgICAgdGhlIFVSQiBpZiB0aGlzIENUTFggaXMgYWN0aXZlLgogCQkgKi8KLQkJaWYgKGN0bHggPT0gZ2V0X2FjdGl2ZV9jdGx4KGh3KSkKLQkJeworCQlpZiAoY3RseCA9PSBnZXRfYWN0aXZlX2N0bHgoaHcpKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCiAJCQlkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5jKCZody0+cmVxdGltZXIpOwpAQCAtMTUzNCw3ICsxMjk5LDcgQEAKIAkJCSAqIFRoaXMgc2NlbmFyaW8gaXMgc28gdW5saWtlbHkgdGhhdCBJJ20KIAkJCSAqIGhhcHB5IHdpdGggYSBncnViYnkgImdvdG8iIHNvbHV0aW9uIC4uLgogCQkJICovCi0JCQlpZiAoIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQorCQkJaWYgKGh3LT53bGFuZGV2LT5od3JlbW92ZWQpCiAJCQkJZ290byBjbGVhbnVwOwogCQl9CiAKQEAgLTE1NTUsOSArMTMyMCw5IEBACiAJCWlmIChjdGx4LT5zdGF0ZSA9PSBDVExYX0NPTVBMRVRFKSB7CiAJCQlyZXN1bHQgPSBjb21wbGV0b3ItPmNvbXBsZXRlKGNvbXBsZXRvcik7CiAJCX0gZWxzZSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCJDVExYWyVkXSBlcnJvcjogc3RhdGUoJXMpXG4iLAotCQkJICAgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAotCQkJICAgICAgICAgICAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDVExYWyVkXSBlcnJvcjogc3RhdGUoJXMpXG4iLAorCQkJICAgICAgIGxlMTZfdG9fY3B1KGN0bHgtPm91dGJ1Zi50eXBlKSwKKwkJCSAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CiAJCQlyZXN1bHQgPSAtRUlPOwogCQl9CiAKQEAgLTE1NjYsNyArMTMzMSw2IEBACiAJCWtmcmVlKGN0bHgpOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTYwMywzOSArMTM2NywzMiBAQAogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQKLWhmYTM4NHhfZG9jbWQoCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCWhmYTM4NHhfbWV0YWNtZF90ICpjbWQsCi0JY3RseF9jbWRjYl90CWNtZGNiLAotCWN0bHhfdXNlcmNiX3QJdXNlcmNiLAotCXZvaWQJKnVzZXJjYl9kYXRhKQoraGZhMzg0eF9kb2NtZChoZmEzODR4X3QgKmh3LAorCSAgICAgIENNRF9NT0RFIG1vZGUsCisJICAgICAgaGZhMzg0eF9tZXRhY21kX3QgKmNtZCwKKwkgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKLQlpbnQJCQlyZXN1bHQ7Ci0JaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisJaW50IHJlc3VsdDsKKwloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKIAotCURCRkVOVEVSOwogCWN0bHggPSB1c2JjdGx4X2FsbG9jKCk7Ci0JaWYgKCBjdGx4ID09IE5VTEwgKSB7CisJaWYgKGN0bHggPT0gTlVMTCkgewogCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLwotCWN0bHgtPm91dGJ1Zi5jbWRyZXEudHlwZSA9IAlob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfQ01EUkVRKTsKLQljdGx4LT5vdXRidWYuY21kcmVxLmNtZCA9CWhvc3QyaGZhMzg0eF8xNihjbWQtPmNtZCk7Ci0JY3RseC0+b3V0YnVmLmNtZHJlcS5wYXJtMCA9CWhvc3QyaGZhMzg0eF8xNihjbWQtPnBhcm0wKTsKLQljdGx4LT5vdXRidWYuY21kcmVxLnBhcm0xID0JaG9zdDJoZmEzODR4XzE2KGNtZC0+cGFybTEpOwotCWN0bHgtPm91dGJ1Zi5jbWRyZXEucGFybTIgPQlob3N0MmhmYTM4NHhfMTYoY21kLT5wYXJtMik7CisJY3RseC0+b3V0YnVmLmNtZHJlcS50eXBlID0gY3B1X3RvX2xlMTYoSEZBMzg0eF9VU0JfQ01EUkVRKTsKKwljdGx4LT5vdXRidWYuY21kcmVxLmNtZCA9IGNwdV90b19sZTE2KGNtZC0+Y21kKTsKKwljdGx4LT5vdXRidWYuY21kcmVxLnBhcm0wID0gY3B1X3RvX2xlMTYoY21kLT5wYXJtMCk7CisJY3RseC0+b3V0YnVmLmNtZHJlcS5wYXJtMSA9IGNwdV90b19sZTE2KGNtZC0+cGFybTEpOworCWN0bHgtPm91dGJ1Zi5jbWRyZXEucGFybTIgPSBjcHVfdG9fbGUxNihjbWQtPnBhcm0yKTsKIAogCWN0bHgtPm91dGJ1ZnNpemUgPSBzaXplb2YoY3RseC0+b3V0YnVmLmNtZHJlcSk7CiAKLQlXTEFOX0xPR19ERUJVRyg0LCAiY21kcmVxOiBjbWQ9MHglMDR4ICIKLQkJInBhcm0wPTB4JTA0eCBwYXJtMT0weCUwNHggcGFybTI9MHglMDR4XG4iLAotCQljbWQtPmNtZCwKLQkJY21kLT5wYXJtMCwKLQkJY21kLT5wYXJtMSwKLQkJY21kLT5wYXJtMik7CisJcHJfZGVidWcoImNtZHJlcTogY21kPTB4JTA0eCAiCisJICAgICAgICJwYXJtMD0weCUwNHggcGFybTE9MHglMDR4IHBhcm0yPTB4JTA0eFxuIiwKKwkgICAgICAgY21kLT5jbWQsIGNtZC0+cGFybTAsIGNtZC0+cGFybTEsIGNtZC0+cGFybTIpOwogCiAJY3RseC0+cmVhcGFibGUgPSBtb2RlOwogCWN0bHgtPmNtZGNiID0gY21kY2I7CkBAIC0xNjQ4LDE4ICsxNDA1LDIwIEBACiAJfSBlbHNlIGlmIChtb2RlID09IERPV0FJVCkgewogCQl1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCBjb21wbGV0b3I7CiAKLQkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCi0JCSAgICAgICAgICAgICBodywgY3RseCwgaW5pdF9jbWRfY29tcGxldG9yKCZjb21wbGV0b3IsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi5jbWRyZXNwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY21kLT5yZXN1bHQpICk7CisJCXJlc3VsdCA9CisJCSAgICBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYyhodywgY3RseCwKKwkJCQkJCSAgaW5pdF9jbWRfY29tcGxldG9yKCZjb21wbGV0b3IsCisJCQkJCQkJCSAgICAgJmN0bHgtPgorCQkJCQkJCQkgICAgIGluYnVmLgorCQkJCQkJCQkgICAgIGNtZHJlc3AsCisJCQkJCQkJCSAgICAgJmNtZC0+CisJCQkJCQkJCSAgICAgcmVzdWx0KSk7CiAJfQogCiBkb25lOgotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kb3JyaWQKICoKQEAgLTE2OTcsMzEgKzE0NTYsMjcgQEAKICoJcHJvY2VzcyAoRE9XQUlUIG9yIERPQVNZTkMpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQKLWhmYTM4NHhfZG9ycmlkKAotCWhmYTM4NHhfdCAqaHcsCi0JQ01EX01PREUgbW9kZSwKLQl1MTYJcmlkLAotCXZvaWQJKnJpZGRhdGEsCi0JdW5zaWduZWQgaW50CXJpZGRhdGFsZW4sCi0gICAgICAgIGN0bHhfY21kY2JfdCBjbWRjYiwKLQljdGx4X3VzZXJjYl90IHVzZXJjYiwKLQl2b2lkCSp1c2VyY2JfZGF0YSkKK2hmYTM4NHhfZG9ycmlkKGhmYTM4NHhfdCAqaHcsCisJICAgICAgIENNRF9NT0RFIG1vZGUsCisJICAgICAgIHUxNiByaWQsCisJICAgICAgIHZvaWQgKnJpZGRhdGEsCisJICAgICAgIHVuc2lnbmVkIGludCByaWRkYXRhbGVuLAorCSAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKLQlpbnQJCQlyZXN1bHQ7Ci0JaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisJaW50IHJlc3VsdDsKKwloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKIAotCURCRkVOVEVSOwogCWN0bHggPSB1c2JjdGx4X2FsbG9jKCk7Ci0JaWYgKCBjdGx4ID09IE5VTEwgKSB7CisJaWYgKGN0bHggPT0gTlVMTCkgewogCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLwotCWN0bHgtPm91dGJ1Zi5ycmlkcmVxLnR5cGUgPSAgIGhvc3QyaGZhMzg0eF8xNihIRkEzODR4X1VTQl9SUklEUkVRKTsKKwljdGx4LT5vdXRidWYucnJpZHJlcS50eXBlID0gY3B1X3RvX2xlMTYoSEZBMzg0eF9VU0JfUlJJRFJFUSk7CiAJY3RseC0+b3V0YnVmLnJyaWRyZXEuZnJtbGVuID0KLQkJaG9zdDJoZmEzODR4XzE2KHNpemVvZihjdGx4LT5vdXRidWYucnJpZHJlcS5yaWQpKTsKLQljdGx4LT5vdXRidWYucnJpZHJlcS5yaWQgPSAgICBob3N0MmhmYTM4NHhfMTYocmlkKTsKKwkgICAgY3B1X3RvX2xlMTYoc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ycmlkcmVxLnJpZCkpOworCWN0bHgtPm91dGJ1Zi5ycmlkcmVxLnJpZCA9IGNwdV90b19sZTE2KHJpZCk7CiAKIAljdGx4LT5vdXRidWZzaXplID0gc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ycmlkcmVxKTsKIApAQCAtMTczNywxOSArMTQ5MiwxOCBAQAogCX0gZWxzZSBpZiAobW9kZSA9PSBET1dBSVQpIHsKIAkJdXNiY3RseF9ycmlkX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKIAotCQlyZXN1bHQgPSBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYygKLQkJICAgICAgICAgICBodywgY3RseCwgaW5pdF9ycmlkX2NvbXBsZXRvcigmY29tcGxldG9yLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi5ycmlkcmVzcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWRkYXRhLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZGRhdGFsZW4pICk7CisJCXJlc3VsdCA9CisJCSAgICBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYyhodywgY3RseCwKKwkJCQkJCSAgaW5pdF9ycmlkX2NvbXBsZXRvcgorCQkJCQkJICAoJmNvbXBsZXRvciwKKwkJCQkJCSAgICZjdGx4LT5pbmJ1Zi5ycmlkcmVzcCwKKwkJCQkJCSAgIHJpZGRhdGEsIHJpZGRhdGFsZW4pKTsKIAl9CiAKIGRvbmU6Ci0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2Rvd3JpZAogKgpAQCAtMTc4MywzOCArMTUzNywzNCBAQAogKglwcm9jZXNzIChET1dBSVQgb3IgRE9BU1lOQykKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludAotaGZhMzg0eF9kb3dyaWQoCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCXUxNglyaWQsCi0Jdm9pZAkqcmlkZGF0YSwKLQl1bnNpZ25lZCBpbnQJcmlkZGF0YWxlbiwKLQljdGx4X2NtZGNiX3QgY21kY2IsCi0JY3RseF91c2VyY2JfdCB1c2VyY2IsCi0Jdm9pZAkqdXNlcmNiX2RhdGEpCitoZmEzODR4X2Rvd3JpZChoZmEzODR4X3QgKmh3LAorCSAgICAgICBDTURfTU9ERSBtb2RlLAorCSAgICAgICB1MTYgcmlkLAorCSAgICAgICB2b2lkICpyaWRkYXRhLAorCSAgICAgICB1bnNpZ25lZCBpbnQgcmlkZGF0YWxlbiwKKwkgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7Ci0JaW50CQkJcmVzdWx0OwotCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCWludCByZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CiAKLQlEQkZFTlRFUjsKIAljdGx4ID0gdXNiY3RseF9hbGxvYygpOwotCWlmICggY3RseCA9PSBOVUxMICkgeworCWlmIChjdGx4ID09IE5VTEwpIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBkb25lOwogCX0KIAogCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KLQljdGx4LT5vdXRidWYud3JpZHJlcS50eXBlID0gICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfV1JJRFJFUSk7Ci0JY3RseC0+b3V0YnVmLndyaWRyZXEuZnJtbGVuID0gaG9zdDJoZmEzODR4XzE2KAotCQkJCQkoc2l6ZW9mKGN0bHgtPm91dGJ1Zi53cmlkcmVxLnJpZCkgKwotCQkJCQlyaWRkYXRhbGVuICsgMSkgLyAyKTsKLQljdGx4LT5vdXRidWYud3JpZHJlcS5yaWQgPSAgICBob3N0MmhmYTM4NHhfMTYocmlkKTsKKwljdGx4LT5vdXRidWYud3JpZHJlcS50eXBlID0gY3B1X3RvX2xlMTYoSEZBMzg0eF9VU0JfV1JJRFJFUSk7CisJY3RseC0+b3V0YnVmLndyaWRyZXEuZnJtbGVuID0gY3B1X3RvX2xlMTYoKHNpemVvZgorCQkJCQkJICAgICAgIChjdGx4LT5vdXRidWYud3JpZHJlcS4KKwkJCQkJCQlyaWQpICsgcmlkZGF0YWxlbiArCisJCQkJCQkgICAgICAgMSkgLyAyKTsKKwljdGx4LT5vdXRidWYud3JpZHJlcS5yaWQgPSBjcHVfdG9fbGUxNihyaWQpOwogCW1lbWNweShjdGx4LT5vdXRidWYud3JpZHJlcS5kYXRhLCByaWRkYXRhLCByaWRkYXRhbGVuKTsKIAogCWN0bHgtPm91dGJ1ZnNpemUgPSBzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEudHlwZSkgKwotCSAgICAgICAgICAgICAgICAgICBzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEuZnJtbGVuKSArCi0JICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud3JpZHJlcS5yaWQpICsKLQkgICAgICAgICAgICAgICAgICAgcmlkZGF0YWxlbjsKKwkgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53cmlkcmVxLmZybWxlbikgKworCSAgICBzaXplb2YoY3RseC0+b3V0YnVmLndyaWRyZXEucmlkKSArIHJpZGRhdGFsZW47CiAKIAljdGx4LT5yZWFwYWJsZSA9IG1vZGU7CiAJY3RseC0+Y21kY2IgPSBjbWRjYjsKQEAgLTE4MjksMTYgKzE1NzksMTUgQEAKIAkJdXNiY3RseF93cmlkX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKIAkJaGZhMzg0eF9jbWRyZXN1bHRfdCB3cmlkcmVzdWx0OwogCi0JCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAotCQkgICAgICAgICAgICAgICBodywKLQkJICAgICAgICAgICAgICAgY3RseCwKLQkJICAgICAgICAgICAgICAgaW5pdF93cmlkX2NvbXBsZXRvcigmY29tcGxldG9yLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi53cmlkcmVzcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3JpZHJlc3VsdCkgKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoaHcsCisJCQkJCQkgICAgICAgY3RseCwKKwkJCQkJCSAgICAgICBpbml0X3dyaWRfY29tcGxldG9yCisJCQkJCQkgICAgICAgKCZjb21wbGV0b3IsCisJCQkJCQkJJmN0bHgtPmluYnVmLndyaWRyZXNwLAorCQkJCQkJCSZ3cmlkcmVzdWx0KSk7CiAJfQogCiBkb25lOgotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTg3Niw0NyArMTYyNSw0MSBAQAogKglwcm9jZXNzIChET1dBSVQgb3IgRE9BU1lOQykKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludAotaGZhMzg0eF9kb3JtZW0oCi0JaGZhMzg0eF90ICpodywKLQlDTURfTU9ERSBtb2RlLAotCXUxNglwYWdlLAotCXUxNglvZmZzZXQsCi0Jdm9pZAkqZGF0YSwKLQl1bnNpZ25lZCBpbnQJbGVuLAotCWN0bHhfY21kY2JfdCBjbWRjYiwKLQljdGx4X3VzZXJjYl90IHVzZXJjYiwKLQl2b2lkCSp1c2VyY2JfZGF0YSkKK2hmYTM4NHhfZG9ybWVtKGhmYTM4NHhfdCAqaHcsCisJICAgICAgIENNRF9NT0RFIG1vZGUsCisJICAgICAgIHUxNiBwYWdlLAorCSAgICAgICB1MTYgb2Zmc2V0LAorCSAgICAgICB2b2lkICpkYXRhLAorCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuLAorCSAgICAgICBjdGx4X2NtZGNiX3QgY21kY2IsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKLQlpbnQJCQlyZXN1bHQ7Ci0JaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisJaW50IHJlc3VsdDsKKwloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKIAotCURCRkVOVEVSOwogCWN0bHggPSB1c2JjdGx4X2FsbG9jKCk7Ci0JaWYgKCBjdGx4ID09IE5VTEwgKSB7CisJaWYgKGN0bHggPT0gTlVMTCkgewogCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY29tbWFuZCAqLwotCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnR5cGUgPSAgICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfUk1FTVJFUSk7Ci0JY3RseC0+b3V0YnVmLnJtZW1yZXEuZnJtbGVuID0gIGhvc3QyaGZhMzg0eF8xNigKLQkJCQkJc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxLm9mZnNldCkgKwotCQkJCQlzaXplb2YoY3RseC0+b3V0YnVmLnJtZW1yZXEucGFnZSkgKwotCQkJCQlsZW4pOwotCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLm9mZnNldCA9CWhvc3QyaGZhMzg0eF8xNihvZmZzZXQpOwotCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnBhZ2UgPQlob3N0MmhmYTM4NHhfMTYocGFnZSk7CisJY3RseC0+b3V0YnVmLnJtZW1yZXEudHlwZSA9IGNwdV90b19sZTE2KEhGQTM4NHhfVVNCX1JNRU1SRVEpOworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLmZybWxlbiA9CisJICAgIGNwdV90b19sZTE2KHNpemVvZihjdGx4LT5vdXRidWYucm1lbXJlcS5vZmZzZXQpICsKKwkJCSAgICBzaXplb2YoY3RseC0+b3V0YnVmLnJtZW1yZXEucGFnZSkgKyBsZW4pOworCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLm9mZnNldCA9IGNwdV90b19sZTE2KG9mZnNldCk7CisJY3RseC0+b3V0YnVmLnJtZW1yZXEucGFnZSA9IGNwdV90b19sZTE2KHBhZ2UpOwogCiAJY3RseC0+b3V0YnVmc2l6ZSA9IHNpemVvZihjdGx4LT5vdXRidWYucm1lbXJlcSk7CiAKLQlXTEFOX0xPR19ERUJVRyg0LAotCQkidHlwZT0weCUwNHggZnJtbGVuPSVkIG9mZnNldD0weCUwNHggcGFnZT0weCUwNHhcbiIsCi0JCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLnR5cGUsCi0JCWN0bHgtPm91dGJ1Zi5ybWVtcmVxLmZybWxlbiwKLQkJY3RseC0+b3V0YnVmLnJtZW1yZXEub2Zmc2V0LAotCQljdGx4LT5vdXRidWYucm1lbXJlcS5wYWdlKTsKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAidHlwZT0weCUwNHggZnJtbGVuPSVkIG9mZnNldD0weCUwNHggcGFnZT0weCUwNHhcbiIsCisJICAgICAgIGN0bHgtPm91dGJ1Zi5ybWVtcmVxLnR5cGUsCisJICAgICAgIGN0bHgtPm91dGJ1Zi5ybWVtcmVxLmZybWxlbiwKKwkgICAgICAgY3RseC0+b3V0YnVmLnJtZW1yZXEub2Zmc2V0LCBjdGx4LT5vdXRidWYucm1lbXJlcS5wYWdlKTsKIAotCVdMQU5fTE9HX0RFQlVHKDQsInBrdHNpemU9JXpkXG4iLAotCQlST1VORFVQNjQoc2l6ZW9mKGN0bHgtPm91dGJ1Zi5ybWVtcmVxKSkpOworCXByX2RlYnVnKCJwa3RzaXplPSV6ZFxuIiwKKwkgICAgICAgUk9VTkRVUDY0KHNpemVvZihjdGx4LT5vdXRidWYucm1lbXJlcSkpKTsKIAogCWN0bHgtPnJlYXBhYmxlID0gbW9kZTsKIAljdGx4LT5jbWRjYiA9IGNtZGNiOwpAQCAtMTkyNiwyMyArMTY2OSwyMSBAQAogCXJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9zdWJtaXQoaHcsIGN0bHgpOwogCWlmIChyZXN1bHQgIT0gMCkgewogCQlrZnJlZShjdGx4KTsKLQl9IGVsc2UgaWYgKCBtb2RlID09IERPV0FJVCApIHsKLSAgICAgICAgICAgICAgICB1c2JjdGx4X3JtZW1fY29tcGxldG9yX3QgY29tcGxldG9yOworCX0gZWxzZSBpZiAobW9kZSA9PSBET1dBSVQpIHsKKwkJdXNiY3RseF9ybWVtX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKIAotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfdXNiY3RseF9jb21wbGV0ZV9zeW5jKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaHcsIGN0bHgsIGluaXRfcm1lbV9jb21wbGV0b3IoJmNvbXBsZXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdGx4LT5pbmJ1Zi5ybWVtcmVzcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4pICk7CisJCXJlc3VsdCA9CisJCSAgICBoZmEzODR4X3VzYmN0bHhfY29tcGxldGVfc3luYyhodywgY3RseCwKKwkJCQkJCSAgaW5pdF9ybWVtX2NvbXBsZXRvcgorCQkJCQkJICAoJmNvbXBsZXRvciwKKwkJCQkJCSAgICZjdGx4LT5pbmJ1Zi5ybWVtcmVzcCwgZGF0YSwKKwkJCQkJCSAgIGxlbikpOwogCX0KIAogZG9uZToKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kb3dtZW0KICoKQEAgLTE5NzcsNDUgKzE3MTgsMzkgQEAKICoJcHJvY2VzcyAoRE9XQUlUIG9yIERPQVNZTkMpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQKLWhmYTM4NHhfZG93bWVtKAotCWhmYTM4NHhfdCAqaHcsCi0JQ01EX01PREUgbW9kZSwKLQl1MTYJcGFnZSwKLQl1MTYJb2Zmc2V0LAotCXZvaWQJKmRhdGEsCi0JdW5zaWduZWQgaW50CWxlbiwKLQljdGx4X2NtZGNiX3QgY21kY2IsCi0JY3RseF91c2VyY2JfdCB1c2VyY2IsCi0Jdm9pZAkqdXNlcmNiX2RhdGEpCitoZmEzODR4X2Rvd21lbShoZmEzODR4X3QgKmh3LAorCSAgICAgICBDTURfTU9ERSBtb2RlLAorCSAgICAgICB1MTYgcGFnZSwKKwkgICAgICAgdTE2IG9mZnNldCwKKwkgICAgICAgdm9pZCAqZGF0YSwKKwkgICAgICAgdW5zaWduZWQgaW50IGxlbiwKKwkgICAgICAgY3RseF9jbWRjYl90IGNtZGNiLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpCiB7Ci0JaW50CQkJcmVzdWx0OwotCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCWludCByZXN1bHQ7CisJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CiAKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19ERUJVRyg1LCAicGFnZT0weCUwNHggb2Zmc2V0PTB4JTA0eCBsZW49JWRcbiIsCi0JCXBhZ2Usb2Zmc2V0LGxlbik7CisJcHJfZGVidWcoInBhZ2U9MHglMDR4IG9mZnNldD0weCUwNHggbGVuPSVkXG4iLAorCSAgICAgICBwYWdlLCBvZmZzZXQsIGxlbik7CiAKIAljdGx4ID0gdXNiY3RseF9hbGxvYygpOwotCWlmICggY3RseCA9PSBOVUxMICkgeworCWlmIChjdGx4ID09IE5VTEwpIHsKIAkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBkb25lOwogCX0KIAogCS8qIEluaXRpYWxpemUgdGhlIGNvbW1hbmQgKi8KLQljdGx4LT5vdXRidWYud21lbXJlcS50eXBlID0gICBob3N0MmhmYTM4NHhfMTYoSEZBMzg0eF9VU0JfV01FTVJFUSk7Ci0JY3RseC0+b3V0YnVmLndtZW1yZXEuZnJtbGVuID0gaG9zdDJoZmEzODR4XzE2KAotCQkJCQlzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0KSArCi0JCQkJCXNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5wYWdlKSArCi0JCQkJCWxlbik7Ci0JY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0ID0gaG9zdDJoZmEzODR4XzE2KG9mZnNldCk7Ci0JY3RseC0+b3V0YnVmLndtZW1yZXEucGFnZSA9ICAgaG9zdDJoZmEzODR4XzE2KHBhZ2UpOworCWN0bHgtPm91dGJ1Zi53bWVtcmVxLnR5cGUgPSBjcHVfdG9fbGUxNihIRkEzODR4X1VTQl9XTUVNUkVRKTsKKwljdGx4LT5vdXRidWYud21lbXJlcS5mcm1sZW4gPQorCSAgICBjcHVfdG9fbGUxNihzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEub2Zmc2V0KSArCisJCQkgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLnBhZ2UpICsgbGVuKTsKKwljdGx4LT5vdXRidWYud21lbXJlcS5vZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXQpOworCWN0bHgtPm91dGJ1Zi53bWVtcmVxLnBhZ2UgPSBjcHVfdG9fbGUxNihwYWdlKTsKIAltZW1jcHkoY3RseC0+b3V0YnVmLndtZW1yZXEuZGF0YSwgZGF0YSwgbGVuKTsKIAogCWN0bHgtPm91dGJ1ZnNpemUgPSBzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEudHlwZSkgKwotCSAgICAgICAgICAgICAgICAgICBzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEuZnJtbGVuKSArCi0JICAgICAgICAgICAgICAgICAgIHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5vZmZzZXQpICsKLQkgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLnBhZ2UpICsKLQkgICAgICAgICAgICAgICAgICAgbGVuOworCSAgICBzaXplb2YoY3RseC0+b3V0YnVmLndtZW1yZXEuZnJtbGVuKSArCisJICAgIHNpemVvZihjdGx4LT5vdXRidWYud21lbXJlcS5vZmZzZXQpICsKKwkgICAgc2l6ZW9mKGN0bHgtPm91dGJ1Zi53bWVtcmVxLnBhZ2UpICsgbGVuOwogCiAJY3RseC0+cmVhcGFibGUgPSBtb2RlOwogCWN0bHgtPmNtZGNiID0gY21kY2I7CkBAIC0yMDI1LDI0ICsxNzYwLDIyIEBACiAJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChodywgY3RseCk7CiAJaWYgKHJlc3VsdCAhPSAwKSB7CiAJCWtmcmVlKGN0bHgpOwotCX0gZWxzZSBpZiAoIG1vZGUgPT0gRE9XQUlUICkgewotICAgICAgICAgICAgICAgIHVzYmN0bHhfd21lbV9jb21wbGV0b3JfdCBjb21wbGV0b3I7Ci0gICAgICAgICAgICAgICAgaGZhMzg0eF9jbWRyZXN1bHRfdCB3bWVtcmVzdWx0OworCX0gZWxzZSBpZiAobW9kZSA9PSBET1dBSVQpIHsKKwkJdXNiY3RseF93bWVtX2NvbXBsZXRvcl90IGNvbXBsZXRvcjsKKwkJaGZhMzg0eF9jbWRyZXN1bHRfdCB3bWVtcmVzdWx0OwogCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RseCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X3dtZW1fY29tcGxldG9yKCZjb21wbGV0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3RseC0+aW5idWYud21lbXJlc3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd21lbXJlc3VsdCkgKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF91c2JjdGx4X2NvbXBsZXRlX3N5bmMoaHcsCisJCQkJCQkgICAgICAgY3RseCwKKwkJCQkJCSAgICAgICBpbml0X3dtZW1fY29tcGxldG9yCisJCQkJCQkgICAgICAgKCZjb21wbGV0b3IsCisJCQkJCQkJJmN0bHgtPmluYnVmLndtZW1yZXNwLAorCQkJCQkJCSZ3bWVtcmVzdWx0KSk7CiAJfQogCiBkb25lOgotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzCiAqCkBAIC0yMDYwLDEyICsxNzkzLDEwIEBACiAqIENhbGwgY29udGV4dDoKICoJcHJvY2VzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzKCBoZmEzODR4X3QgKmh3ICkKK2ludCBoZmEzODR4X2RydnJfY29tbXRhbGxpZXMoaGZhMzg0eF90ICpodykKIHsKIAloZmEzODR4X21ldGFjbWRfdCBjbWQ7CiAKLQlEQkZFTlRFUjsKLQogCWNtZC5jbWQgPSBIRkEzODR4X0NNRENPREVfSU5ROwogCWNtZC5wYXJtMCA9IEhGQTM4NHhfSVRfQ09NTVRBTExJRVM7CiAJY21kLnBhcm0xID0gMDsKQEAgLTIwNzMsMTEgKzE4MDQsOSBAQAogCiAJaGZhMzg0eF9kb2NtZF9hc3luYyhodywgJmNtZCwgTlVMTCwgTlVMTCwgTlVMTCk7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfZGlzYWJsZQogKgpAQCAtMjEwMiwyNCArMTgzMSwyMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9kcnZyX2Rpc2FibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpCiB7Ci0JaW50CXJlc3VsdCA9IDA7CisJaW50IHJlc3VsdCA9IDA7CiAKLQlEQkZFTlRFUjsKIAlpZiAoKCFody0+aXNhcCAmJiBtYWNwb3J0ICE9IDApIHx8CiAJICAgIChody0+aXNhcCAmJiAhKG1hY3BvcnQgPD0gSEZBMzg0eF9QT1JUSURfTUFYKSkgfHwKLQkgICAgIShody0+cG9ydF9lbmFibGVkW21hY3BvcnRdKSApeworCSAgICAhKGh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0pKSB7CiAJCXJlc3VsdCA9IC1FSU5WQUw7CiAJfSBlbHNlIHsKIAkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZGlzYWJsZShodywgbWFjcG9ydCk7Ci0JCWlmICggcmVzdWx0ID09IDAgKSB7CisJCWlmIChyZXN1bHQgPT0gMCkKIAkJCWh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0gPSAwOwotCQl9CiAJfQotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX2VuYWJsZQogKgpAQCAtMjE0NCwyNCArMTg2OSwyMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9kcnZyX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MTYgbWFjcG9ydCkKIHsKLQlpbnQJcmVzdWx0ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKIAotCURCRkVOVEVSOwogCWlmICgoIWh3LT5pc2FwICYmIG1hY3BvcnQgIT0gMCkgfHwKIAkgICAgKGh3LT5pc2FwICYmICEobWFjcG9ydCA8PSBIRkEzODR4X1BPUlRJRF9NQVgpKSB8fAotCSAgICAoaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSkgKXsKKwkgICAgKGh3LT5wb3J0X2VuYWJsZWRbbWFjcG9ydF0pKSB7CiAJCXJlc3VsdCA9IC1FSU5WQUw7CiAJfSBlbHNlIHsKIAkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZW5hYmxlKGh3LCBtYWNwb3J0KTsKLQkJaWYgKCByZXN1bHQgPT0gMCApIHsKKwkJaWYgKHJlc3VsdCA9PSAwKQogCQkJaHctPnBvcnRfZW5hYmxlZFttYWNwb3J0XSA9IDE7Ci0JCX0KIAl9Ci0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUKICoKQEAgLTIxODUsNDUgKzE5MDYsNDMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2VuYWJsZShoZmEzODR4X3QgKmh3KQogewotCWludAkJcmVzdWx0ID0gMDsKLQlpbnQJCWk7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGk7CiAKLQlEQkZFTlRFUjsKIAkvKiBDaGVjayB0aGF0IGEgcG9ydCBpc24ndCBhY3RpdmUgKi8KLQlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfUE9SVElEX01BWDsgaSsrKSB7Ci0JCWlmICggaHctPnBvcnRfZW5hYmxlZFtpXSApIHsKLQkJCVdMQU5fTE9HX0RFQlVHKDEsImNhbGxlZCB3aGVuIHBvcnQgZW5hYmxlZC5cbiIpOworCWZvciAoaSA9IDA7IGkgPCBIRkEzODR4X1BPUlRJRF9NQVg7IGkrKykgeworCQlpZiAoaHctPnBvcnRfZW5hYmxlZFtpXSkgeworCQkJcHJfZGVidWcoImNhbGxlZCB3aGVuIHBvcnQgZW5hYmxlZC5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKIAkvKiBDaGVjayB0aGF0IHdlJ3JlIG5vdCBhbHJlYWR5IGluIGEgZG93bmxvYWQgc3RhdGUgKi8KLQlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9ESVNBQkxFRCApIHsKKwlpZiAoaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAkvKiBSZXRyaWV2ZSB0aGUgYnVmZmVyIGxvYyZzaXplIGFuZCB0aW1lb3V0ICovCi0JaWYgKCAocmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfRE9XTkxPQURCVUZGRVIsCi0JCQkJJihody0+YnVmaW5mbyksIHNpemVvZihody0+YnVmaW5mbykpKSApIHsKKwlpZiAoKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0RPV05MT0FEQlVGRkVSLAorCQkJCQkgICAgICYoaHctPmJ1ZmluZm8pLAorCQkJCQkgICAgIHNpemVvZihody0+YnVmaW5mbykpKSkgewogCQlyZXR1cm4gcmVzdWx0OwogCX0KLQlody0+YnVmaW5mby5wYWdlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5idWZpbmZvLnBhZ2UpOwotCWh3LT5idWZpbmZvLm9mZnNldCA9IGhmYTM4NHgyaG9zdF8xNihody0+YnVmaW5mby5vZmZzZXQpOwotCWh3LT5idWZpbmZvLmxlbiA9IGhmYTM4NHgyaG9zdF8xNihody0+YnVmaW5mby5sZW4pOwotCWlmICggKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfTUFYTE9BRFRJTUUsCi0JCQkJJihody0+ZGx0aW1lb3V0KSkpICkgeworCWh3LT5idWZpbmZvLnBhZ2UgPSBsZTE2X3RvX2NwdShody0+YnVmaW5mby5wYWdlKTsKKwlody0+YnVmaW5mby5vZmZzZXQgPSBsZTE2X3RvX2NwdShody0+YnVmaW5mby5vZmZzZXQpOworCWh3LT5idWZpbmZvLmxlbiA9IGxlMTZfdG9fY3B1KGh3LT5idWZpbmZvLmxlbik7CisJaWYgKChyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX01BWExPQURUSU1FLAorCQkJCQkgICAgICAgJihody0+ZGx0aW1lb3V0KSkpKSB7CiAJCXJldHVybiByZXN1bHQ7CiAJfQotCWh3LT5kbHRpbWVvdXQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmRsdGltZW91dCk7CisJaHctPmRsdGltZW91dCA9IGxlMTZfdG9fY3B1KGh3LT5kbHRpbWVvdXQpOwogCi0JV0xBTl9MT0dfREVCVUcoMSwiZmxhc2hkbF9lbmFibGVcbiIpOworCXByX2RlYnVnKCJmbGFzaGRsX2VuYWJsZVxuIik7CiAKIAlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQ7Ci0JREJGRVhJVDsKKwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUKICoKQEAgLTIyNDUsMjQgKzE5NjQsMjAgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICpodykKIHsKLQlEQkZFTlRFUjsKIAkvKiBDaGVjayB0aGF0IHdlJ3JlIGFscmVhZHkgaW4gdGhlIGRvd25sb2FkIHN0YXRlICovCi0JaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEICkgeworCWlmIChody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKLQlXTEFOX0xPR19ERUJVRygxLCJmbGFzaGRsX2VuYWJsZVxuIik7CisJcHJfZGVidWcoImZsYXNoZGxfZW5hYmxlXG4iKTsKIAogCS8qIFRoZXJlIGlzbid0IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQsIHNvIEkgZG9uJ3QgKi8KIAkvKiAgYm90aGVyICB3LyB0aGUgcmV0dXJuIHZhbHVlICovCi0JaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfRElTQUJMRSwgMCwgMCAsIDApOworCWhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX0RJU0FCTEUsIDAsIDAsIDApOwogCWh3LT5kbHN0YXRlID0gSEZBMzg0eF9ETFNUQVRFX0RJU0FCTEVEOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUKICoKQEAgLTIyOTIsNDggKzIwMDcsNDIgQEAKICogQ2FsbCBjb250ZXh0OgogKglwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludAotaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoCi0JaGZhMzg0eF90CSpodywKLQl1MzIJCWRhZGRyLAotCXZvaWQJCSpidWYsCi0JdTMyCQlsZW4pCitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkICpidWYsIHUzMiBsZW4pCiB7Ci0JaW50CQlyZXN1bHQgPSAwOwotCXUzMgkJZGxidWZhZGRyOwotCWludAkJbmJ1cm5zOwotCXUzMgkJYnVybmxlbjsKLQl1MzIJCWJ1cm5kYWRkcjsKLQl1MTYJCWJ1cm5sbzsKLQl1MTYJCWJ1cm5oaTsKLQlpbnQJCW53cml0ZXM7Ci0JdTgJCSp3cml0ZWJ1ZjsKLQl1MTYJCXdyaXRlcGFnZTsKLQl1MTYJCXdyaXRlb2Zmc2V0OwotCXUzMgkJd3JpdGVsZW47Ci0JaW50CQlpOwotCWludAkJajsKKwlpbnQgcmVzdWx0ID0gMDsKKwl1MzIgZGxidWZhZGRyOworCWludCBuYnVybnM7CisJdTMyIGJ1cm5sZW47CisJdTMyIGJ1cm5kYWRkcjsKKwl1MTYgYnVybmxvOworCXUxNiBidXJuaGk7CisJaW50IG53cml0ZXM7CisJdTggKndyaXRlYnVmOworCXUxNiB3cml0ZXBhZ2U7CisJdTE2IHdyaXRlb2Zmc2V0OworCXUzMiB3cml0ZWxlbjsKKwlpbnQgaTsKKwlpbnQgajsKIAotCURCRkVOVEVSOwotCVdMQU5fTE9HX0RFQlVHKDUsImRhZGRyPTB4JTA4eCBsZW49JWRcbiIsIGRhZGRyLCBsZW4pOworCXByX2RlYnVnKCJkYWRkcj0weCUwOHggbGVuPSVkXG4iLCBkYWRkciwgbGVuKTsKIAogCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIGZsYXNoIGRvd25sb2FkIHN0YXRlICovCi0JaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEICkgeworCWlmIChody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRkxBU0hFTkFCTEVEKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKLQlXTEFOX0xPR19JTkZPKCJEb3dubG9hZCAlZCBieXRlcyB0byBmbGFzaCBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKKwlwcmludGsoS0VSTl9JTkZPICJEb3dubG9hZCAlZCBieXRlcyB0byBmbGFzaCBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKIAogCS8qIENvbnZlcnQgdG8gZmxhdCBhZGRyZXNzIGZvciBhcml0aG1ldGljICovCiAJLyogTk9URTogZGxidWZmZXIgUklEIHN0b3JlcyB0aGUgYWRkcmVzcyBpbiBBVVggZm9ybWF0ICovCi0JZGxidWZhZGRyID0gSEZBMzg0eF9BRERSX0FVWF9NS0ZMQVQoCi0JCQlody0+YnVmaW5mby5wYWdlLCBody0+YnVmaW5mby5vZmZzZXQpOwotCVdMQU5fTE9HX0RFQlVHKDUsCi0JCSJkbGJ1Zi5wYWdlPTB4JTA0eCBkbGJ1Zi5vZmZzZXQ9MHglMDR4IGRsYnVmYWRkcj0weCUwOHhcbiIsCi0JCWh3LT5idWZpbmZvLnBhZ2UsIGh3LT5idWZpbmZvLm9mZnNldCwgZGxidWZhZGRyKTsKKwlkbGJ1ZmFkZHIgPQorCSAgICBIRkEzODR4X0FERFJfQVVYX01LRkxBVChody0+YnVmaW5mby5wYWdlLCBody0+YnVmaW5mby5vZmZzZXQpOworCXByaW50ayhLRVJOX0RFQlVHCisJICAgICAgICJkbGJ1Zi5wYWdlPTB4JTA0eCBkbGJ1Zi5vZmZzZXQ9MHglMDR4IGRsYnVmYWRkcj0weCUwOHhcbiIsCisJICAgICAgIGh3LT5idWZpbmZvLnBhZ2UsIGh3LT5idWZpbmZvLm9mZnNldCwgZGxidWZhZGRyKTsKIAogI2lmIDAKLVdMQU5fTE9HX1dBUk5JTkcoImRsYnVmQDB4JTA2bHggbGVuPSVkIHRvPSVkXG4iLCBkbGJ1ZmFkZHIsIGh3LT5idWZpbmZvLmxlbiwgaHctPmRsdGltZW91dCk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiZGxidWZAMHglMDZseCBsZW49JWQgdG89JWRcbiIsIGRsYnVmYWRkciwKKwkgICAgICAgaHctPmJ1ZmluZm8ubGVuLCBody0+ZGx0aW1lb3V0KTsKICNlbmRpZgogCS8qIENhbGN1bGF0aW9ucyB0byBkZXRlcm1pbmUgaG93IG1hbnkgZmlsbHMgb2YgdGhlIGRsYnVmZmVyIHRvIGRvCiAJICogYW5kIGhvdyBtYW55IFVTQiB3bWVtcmVxJ3MgdG8gZG8gZm9yIGVhY2ggZmlsbC4gIEF0IHRoaXMgcG9pbnQKQEAgLTIzNTEsNzQgKzIwNjAsNjAgQEAKIAlud3JpdGVzICs9IChody0+YnVmaW5mby5sZW4gJSBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pID8gMSA6IDA7CiAKIAkvKiBGb3IgZWFjaCBidXJuICovCi0JZm9yICggaSA9IDA7IGkgPCBuYnVybnM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBuYnVybnM7IGkrKykgewogCQkvKiBHZXQgdGhlIGRlc3QgYWRkcmVzcyBhbmQgbGVuICovCiAJCWJ1cm5sZW4gPSAobGVuIC0gKGh3LT5idWZpbmZvLmxlbiAqIGkpKSA+IGh3LT5idWZpbmZvLmxlbiA/Ci0JCQkJaHctPmJ1ZmluZm8ubGVuIDoKLQkJCQkobGVuIC0gKGh3LT5idWZpbmZvLmxlbiAqIGkpKTsKKwkJICAgIGh3LT5idWZpbmZvLmxlbiA6IChsZW4gLSAoaHctPmJ1ZmluZm8ubGVuICogaSkpOwogCQlidXJuZGFkZHIgPSBkYWRkciArIChody0+YnVmaW5mby5sZW4gKiBpKTsKIAkJYnVybmxvID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihidXJuZGFkZHIpOwogCQlidXJuaGkgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShidXJuZGFkZHIpOwogCi0JCVdMQU5fTE9HX0lORk8oIldyaXRpbmcgJWQgYnl0ZXMgdG8gZmxhc2ggQDB4JTA2eFxuIiwKLQkJCWJ1cm5sZW4sIGJ1cm5kYWRkcik7CisJCXByaW50ayhLRVJOX0lORk8gIldyaXRpbmcgJWQgYnl0ZXMgdG8gZmxhc2ggQDB4JTA2eFxuIiwKKwkJICAgICAgIGJ1cm5sZW4sIGJ1cm5kYWRkcik7CiAKIAkJLyogU2V0IHRoZSBkb3dubG9hZCBtb2RlICovCiAJCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX05WLAotCQkJCWJ1cm5sbywgYnVybmhpLCBidXJubGVuKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigiZG93bmxvYWQoTlYsbG89JXgsaGk9JXgsbGVuPSV4KSAiCi0JCQkJImNtZCBmYWlsZWQsIHJlc3VsdD0lZC4gQWJvcnRpbmcgZC9sXG4iLAotCQkJCWJ1cm5sbywgYnVybmhpLCBidXJubGVuLCByZXN1bHQpOworCQkJCQkgICAgICBidXJubG8sIGJ1cm5oaSwgYnVybmxlbik7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZG93bmxvYWQoTlYsbG89JXgsaGk9JXgsbGVuPSV4KSAiCisJCQkgICAgICAgImNtZCBmYWlsZWQsIHJlc3VsdD0lZC4gQWJvcnRpbmcgZC9sXG4iLAorCQkJICAgICAgIGJ1cm5sbywgYnVybmhpLCBidXJubGVuLCByZXN1bHQpOwogCQkJZ290byBleGl0X3Byb2M7CiAJCX0KIAogCQkvKiBjb3B5IHRoZSBkYXRhIHRvIHRoZSBmbGFzaCBkb3dubG9hZCBidWZmZXIgKi8KLQkJZm9yICggaj0wOyBqIDwgbndyaXRlczsgaisrKSB7CisJCWZvciAoaiA9IDA7IGogPCBud3JpdGVzOyBqKyspIHsKIAkJCXdyaXRlYnVmID0gYnVmICsKLQkJCQkoaSpody0+YnVmaW5mby5sZW4pICsKLQkJCQkoaipIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pOworCQkJICAgIChpICogaHctPmJ1ZmluZm8ubGVuKSArCisJCQkgICAgKGogKiBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4pOwogCi0JCQl3cml0ZXBhZ2UgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRSgKLQkJCQkJZGxidWZhZGRyICsKLQkJCQkJKGoqSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKSk7Ci0JCQl3cml0ZW9mZnNldCA9IEhGQTM4NHhfQUREUl9DTURfTUtPRkYoCi0JCQkJCWRsYnVmYWRkciArCi0JCQkJCShqKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikpOworCQkJd3JpdGVwYWdlID0gSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoZGxidWZhZGRyICsKKwkJCQkJCQkgICAgKGogKgorCQkJCQkJCSAgICAgSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKSk7CisJCQl3cml0ZW9mZnNldCA9CisJCQkgICAgSEZBMzg0eF9BRERSX0NNRF9NS09GRihkbGJ1ZmFkZHIgKworCQkJCQkJICAgKGogKgorCQkJCQkJICAgIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTikpOwogCi0JCQl3cml0ZWxlbiA9IGJ1cm5sZW4tKGoqSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKTsKLQkJCXdyaXRlbGVuID0gd3JpdGVsZW4gID4gSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOID8KLQkJCQkJSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOIDoKLQkJCQkJd3JpdGVsZW47CisJCQl3cml0ZWxlbiA9IGJ1cm5sZW4gLSAoaiAqIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTik7CisJCQl3cml0ZWxlbiA9IHdyaXRlbGVuID4gSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOID8KKwkJCSAgICBIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4gOiB3cml0ZWxlbjsKIAotCQkJcmVzdWx0ID0gaGZhMzg0eF9kb3dtZW1fd2FpdCggaHcsCi0JCQkJCXdyaXRlcGFnZSwKLQkJCQkJd3JpdGVvZmZzZXQsCi0JCQkJCXdyaXRlYnVmLAotCQkJCQl3cml0ZWxlbiApOwotI2lmIDAKLQotQ29tbWVudCBvdXQgZm9yIGRlYnVnZ2luZywgYXNzdW1lIHRoZSB3cml0ZSB3YXMgc3VjY2Vzc2Z1bC4KLQkJCWlmIChyZXN1bHQpIHsKLQkJCQlXTEFOX0xPR19FUlJPUigKLQkJCQkJIldyaXRlIHRvIGRsIGJ1ZmZlciBmYWlsZWQsICIKLQkJCQkJInJlc3VsdD0weCUwNHguIEFib3J0aW5nLlxuIiwKLQkJCQkJcmVzdWx0KTsKLQkJCQlnb3RvIGV4aXRfcHJvYzsKLQkJCX0KLSNlbmRpZgotCisJCQlyZXN1bHQgPSBoZmEzODR4X2Rvd21lbV93YWl0KGh3LAorCQkJCQkJICAgICB3cml0ZXBhZ2UsCisJCQkJCQkgICAgIHdyaXRlb2Zmc2V0LAorCQkJCQkJICAgICB3cml0ZWJ1Ziwgd3JpdGVsZW4pOwogCQl9CiAKIAkJLyogc2V0IHRoZSBkb3dubG9hZCAnd3JpdGUgZmxhc2gnIG1vZGUgKi8KIAkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsCi0JCQkJSEZBMzg0eF9QUk9HTU9ERV9OVldSSVRFLAotCQkJCTAsMCwwKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigKLQkJCQkiZG93bmxvYWQoTlZXUklURSxsbz0leCxoaT0leCxsZW49JXgpICIKLQkJCQkiY21kIGZhaWxlZCwgcmVzdWx0PSVkLiBBYm9ydGluZyBkL2xcbiIsCi0JCQkJYnVybmxvLCBidXJuaGksIGJ1cm5sZW4sIHJlc3VsdCk7CisJCQkJCSAgICAgIEhGQTM4NHhfUFJPR01PREVfTlZXUklURSwKKwkJCQkJICAgICAgMCwgMCwgMCk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJkb3dubG9hZChOVldSSVRFLGxvPSV4LGhpPSV4LGxlbj0leCkgIgorCQkJICAgICAgICJjbWQgZmFpbGVkLCByZXN1bHQ9JWQuIEFib3J0aW5nIGQvbFxuIiwKKwkJCSAgICAgICBidXJubG8sIGJ1cm5oaSwgYnVybmxlbiwgcmVzdWx0KTsKIAkJCWdvdG8gZXhpdF9wcm9jOwogCQl9CiAKQEAgLTI0MzEsMTEgKzIxMjYsOSBAQAogCS8qICBhY3R1YWxseSBkaXNhYmxlIHByb2dyYW1taW5nIG1vZGUuICBSZW1lbWJlciwgdGhhdCB3aWxsIGNhdXNlIHRoZSAqLwogCS8qICB0aGUgZmlybXdhcmUgdG8gZWZmZWN0aXZlbHkgcmVzZXQgaXRzZWxmLiAqLwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfZ2V0Y29uZmlnCiAqCkBAIC0yNDYzLDEyICsyMTU2LDEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHZvaWQgKmJ1ZiwgdTE2IGxlbikKIHsKLQlpbnQgCQkJcmVzdWx0OwotCURCRkVOVEVSOworCWludCByZXN1bHQ7CiAKIAlyZXN1bHQgPSBoZmEzODR4X2RvcnJpZF93YWl0KGh3LCByaWQsIGJ1ZiwgbGVuKTsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjUwMCwxNCArMjE5MSwxMSBAQAogICogICAgICAgQW55CiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQKLWhmYTM4NHhfZHJ2cl9nZXRjb25maWdfYXN5bmMoCi0gICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcsCi0gICAgICAgICB1MTYgICAgICAgICAgICAgICAgICByaWQsCi0gICAgICAgICBjdGx4X3VzZXJjYl90ICAgICAgICAgICB1c2VyY2IsCi0gICAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqdXNlcmNiX2RhdGEpCitoZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAqaHcsCisJCQkgICAgIHUxNiByaWQsIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKLSAgICAgICAgIHJldHVybiBoZmEzODR4X2RvcnJpZF9hc3luYyhodywgcmlkLCBOVUxMLCAwLAotCQkJCSAgICAgaGZhMzg0eF9jYl9ycmlkLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKKwlyZXR1cm4gaGZhMzg0eF9kb3JyaWRfYXN5bmMoaHcsIHJpZCwgTlVMTCwgMCwKKwkJCQkgICAgaGZhMzg0eF9jYl9ycmlkLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNTM0LDcxICsyMjIyLDE2IEBACiAgKiAgICAgICBwcm9jZXNzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQKLWhmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoCi0gICAgICAgICBoZmEzODR4X3QgICAgICAgKmh3LAotICAgICAgICAgdTE2ICAgICAgICAgIHJpZCwKLSAgICAgICAgIHZvaWQgICAgICAgICAgICAqYnVmLAotICAgICAgICAgdTE2ICAgICAgICAgIGxlbiwKLSAgICAgICAgIGN0bHhfdXNlcmNiX3QgICB1c2VyY2IsCi0gICAgICAgICB2b2lkICAgICAgICAgICAgKnVzZXJjYl9kYXRhKQoraGZhMzg0eF9kcnZyX3NldGNvbmZpZ19hc3luYyhoZmEzODR4X3QgKmh3LAorCQkJICAgICB1MTYgcmlkLAorCQkJICAgICB2b2lkICpidWYsCisJCQkgICAgIHUxNiBsZW4sIGN0bHhfdXNlcmNiX3QgdXNlcmNiLCB2b2lkICp1c2VyY2JfZGF0YSkKIHsKIAlyZXR1cm4gaGZhMzg0eF9kb3dyaWRfYXN5bmMoaHcsIHJpZCwgYnVmLCBsZW4sCiAJCQkJICAgIGhmYTM4NHhfY2Jfc3RhdHVzLCB1c2VyY2IsIHVzZXJjYl9kYXRhKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIGhmYTM4NHhfZHJ2cl9oYW5kb3ZlcgotKgotKiBTZW5kcyBhIGhhbmRvdmVyIG5vdGlmaWNhdGlvbiB0byB0aGUgTUFDLgotKgotKiBBcmd1bWVudHM6Ci0qCWh3CQlkZXZpY2Ugc3RydWN0dXJlCi0qCWFkZHIJCWFkZHJlc3Mgb2Ygc3RhdGlvbiB0aGF0J3MgbGVmdAotKgotKiBSZXR1cm5zOgotKgl6ZXJvCQlzdWNjZXNzLgotKgktRVJFU1RBUlRTWVMJcmVjZWl2ZWQgc2lnbmFsIHdoaWxlIHdhaXRpbmcgZm9yIHNlbWFwaG9yZS4KLSoJLUVJTwkJZmFpbGVkIHRvIHdyaXRlIHRvIGJhcCwgb3IgZmFpbGVkIGluIGNtZC4KLSoKLSogU2lkZSBlZmZlY3RzOgotKgotKiBDYWxsIGNvbnRleHQ6Ci0qCXByb2Nlc3MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IGhmYTM4NHhfZHJ2cl9oYW5kb3ZlciggaGZhMzg0eF90ICpodywgdTggKmFkZHIpCi17Ci0gICAgICAgIERCRkVOVEVSOwotCVdMQU5fTE9HX0VSUk9SKCJOb3QgY3VycmVudGx5IHN1cHBvcnRlZCBpbiBVU0IhXG4iKTsKLQlEQkZFWElUOwotCXJldHVybiAtRUlPOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogaGZhMzg0eF9kcnZyX2xvd19sZXZlbAotKgotKiBXcml0ZSB0ZXN0IGNvbW1hbmRzIHRvIHRoZSBjYXJkLiAgU29tZSB0ZXN0IGNvbW1hbmRzIGRvbid0IG1ha2UKLSogc2Vuc2Ugd2l0aG91dCBwcmlvciBzZXQtdXAuICBGb3IgZXhhbXBsZSwgY29udGlub3VzIFRYIGlzbid0IHZlcnkKLSogdXNlZnVsIHVudGlsIHlvdSBzZXQgdGhlIGNoYW5uZWwuICBUaGF0IGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlCi0qCi0qIFNpZGUgZWZmZWN0czoKLSoKLSogQ2FsbCBjb250ZXh0OgotKiAgICAgIHByb2Nlc3MgdGhyZWFkCi0qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCBoZmEzODR4X2RydnJfbG93X2xldmVsKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfbWV0YWNtZF90ICpjbWQpCi17Ci0JaW50ICAgICAgICAgICAgIHJlc3VsdDsKLQlEQkZFTlRFUjsKLQotCS8qIERvIGkgbmVlZCBhIGhvc3QyaGZhLi4uIGNvbnZlcnNpb24gPyAqLwotCi0JcmVzdWx0ID0gaGZhMzg0eF9kb2NtZF93YWl0KGh3LCBjbWQpOwotCi0JREJGRVhJVDsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUKICoKICogRW5kcyB0aGUgcmFtIGRvd25sb2FkIHN0YXRlLgpAQCAtMjYxNiwyNyArMjI0OSwyMiBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50Ci1oZmEzODR4X2RydnJfcmFtZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KQoraW50IGhmYTM4NHhfZHJ2cl9yYW1kbF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpCiB7Ci0JREJGRU5URVI7CiAJLyogQ2hlY2sgdGhhdCB3ZSdyZSBhbHJlYWR5IGluIHRoZSBkb3dubG9hZCBzdGF0ZSAqLwotCWlmICggaHctPmRsc3RhdGUgIT0gSEZBMzg0eF9ETFNUQVRFX1JBTUVOQUJMRUQgKSB7CisJaWYgKGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKLQlXTEFOX0xPR19ERUJVRygzLCJyYW1kbF9kaXNhYmxlKClcbiIpOworCXByX2RlYnVnKCJyYW1kbF9kaXNhYmxlKClcbiIpOwogCiAJLyogVGhlcmUgaXNuJ3QgbXVjaCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCwgc28gSSBkb24ndCAqLwogCS8qICBib3RoZXIgIHcvIHRoZSByZXR1cm4gdmFsdWUgKi8KLQloZmEzODR4X2NtZF9kb3dubG9hZChodywgSEZBMzg0eF9QUk9HTU9ERV9ESVNBQkxFLCAwLCAwICwgMCk7CisJaGZhMzg0eF9jbWRfZG93bmxvYWQoaHcsIEhGQTM4NHhfUFJPR01PREVfRElTQUJMRSwgMCwgMCwgMCk7CiAJaHctPmRsc3RhdGUgPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQ7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlCiAqCkBAIC0yNjYxLDU1ICsyMjg5LDQ5IEBACiAqIENhbGwgY29udGV4dDoKICoJcHJvY2VzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQKLWhmYTM4NHhfZHJ2cl9yYW1kbF9lbmFibGUoaGZhMzg0eF90ICpodywgdTMyIGV4ZWFkZHIpCitpbnQgaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZShoZmEzODR4X3QgKmh3LCB1MzIgZXhlYWRkcikKIHsKLQlpbnQJCXJlc3VsdCA9IDA7Ci0JdTE2CQlsb3dhZGRyOwotCXUxNgkJaGlhZGRyOwotCWludAkJaTsKLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0ID0gMDsKKwl1MTYgbG93YWRkcjsKKwl1MTYgaGlhZGRyOworCWludCBpOworCiAJLyogQ2hlY2sgdGhhdCBhIHBvcnQgaXNuJ3QgYWN0aXZlICovCi0JZm9yICggaSA9IDA7IGkgPCBIRkEzODR4X1BPUlRJRF9NQVg7IGkrKykgewotCQlpZiAoIGh3LT5wb3J0X2VuYWJsZWRbaV0gKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigKLQkJCQkiQ2FuJ3QgZG93bmxvYWQgd2l0aCBhIG1hY3BvcnQgZW5hYmxlZC5cbiIpOworCWZvciAoaSA9IDA7IGkgPCBIRkEzODR4X1BPUlRJRF9NQVg7IGkrKykgeworCQlpZiAoaHctPnBvcnRfZW5hYmxlZFtpXSkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIkNhbid0IGRvd25sb2FkIHdpdGggYSBtYWNwb3J0IGVuYWJsZWQuXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCiAJLyogQ2hlY2sgdGhhdCB3ZSdyZSBub3QgYWxyZWFkeSBpbiBhIGRvd25sb2FkIHN0YXRlICovCi0JaWYgKCBody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJIkRvd25sb2FkIHN0YXRlIG5vdCBkaXNhYmxlZC5cbiIpOworCWlmIChody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfRElTQUJMRUQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJEb3dubG9hZCBzdGF0ZSBub3QgZGlzYWJsZWQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JV0xBTl9MT0dfREVCVUcoMywicmFtZGxfZW5hYmxlLCBleGVhZGRyPTB4JTA4eFxuIiwgZXhlYWRkcik7CisJcHJfZGVidWcoInJhbWRsX2VuYWJsZSwgZXhlYWRkcj0weCUwOHhcbiIsIGV4ZWFkZHIpOwogCiAJLyogQ2FsbCB0aGUgZG93bmxvYWQoMSxhZGRyKSBmdW5jdGlvbiAqLwogCWxvd2FkZHIgPSBIRkEzODR4X0FERFJfQ01EX01LT0ZGKGV4ZWFkZHIpOwotCWhpYWRkciA9ICBIRkEzODR4X0FERFJfQ01EX01LUEFHRShleGVhZGRyKTsKKwloaWFkZHIgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShleGVhZGRyKTsKIAogCXJlc3VsdCA9IGhmYTM4NHhfY21kX2Rvd25sb2FkKGh3LCBIRkEzODR4X1BST0dNT0RFX1JBTSwKLQkJCWxvd2FkZHIsIGhpYWRkciwgMCk7CisJCQkJICAgICAgbG93YWRkciwgaGlhZGRyLCAwKTsKIAotCWlmICggcmVzdWx0ID09IDApIHsKKwlpZiAocmVzdWx0ID09IDApIHsKIAkJLyogU2V0IHRoZSBkb3dubG9hZCBzdGF0ZSAqLwogCQlody0+ZGxzdGF0ZSA9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEOwogCX0gZWxzZSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkiY21kX2Rvd25sb2FkKDB4JTA0eCwgMHglMDR4KSBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsCi0JCQlsb3dhZGRyLAotCQkJaGlhZGRyLAotCQkJcmVzdWx0KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJjbWRfZG93bmxvYWQoMHglMDR4LCAweCUwNHgpIGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwKKwkJICAgICAgIGxvd2FkZHIsIGhpYWRkciwgcmVzdWx0KTsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZQogKgpAQCAtMjczNiw1NyArMjM1OCw1NCBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50Ci1oZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaGZhMzg0eF90ICpodywgdTMyIGRhZGRyLCB2b2lkKiBidWYsIHUzMiBsZW4pCitpbnQgaGZhMzg0eF9kcnZyX3JhbWRsX3dyaXRlKGhmYTM4NHhfdCAqaHcsIHUzMiBkYWRkciwgdm9pZCAqYnVmLCB1MzIgbGVuKQogewotCWludAkJcmVzdWx0ID0gMDsKLQlpbnQJCW53cml0ZXM7Ci0JdTgJCSpkYXRhID0gYnVmOwotCWludAkJaTsKLQl1MzIJCWN1cnJhZGRyOwotCXUxNgkJY3VycnBhZ2U7Ci0JdTE2CQljdXJyb2Zmc2V0OwotCXUxNgkJY3VycmxlbjsKLQlEQkZFTlRFUjsKLQkvKiBDaGVjayB0aGF0IHdlJ3JlIGluIHRoZSByYW0gZG93bmxvYWQgc3RhdGUgKi8KLQlpZiAoIGh3LT5kbHN0YXRlICE9IEhGQTM4NHhfRExTVEFURV9SQU1FTkFCTEVEICkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJaW50IHJlc3VsdCA9IDA7CisJaW50IG53cml0ZXM7CisJdTggKmRhdGEgPSBidWY7CisJaW50IGk7CisJdTMyIGN1cnJhZGRyOworCXUxNiBjdXJycGFnZTsKKwl1MTYgY3Vycm9mZnNldDsKKwl1MTYgY3VycmxlbjsKIAotCVdMQU5fTE9HX0lORk8oIldyaXRpbmcgJWQgYnl0ZXMgdG8gcmFtIEAweCUwNnhcbiIsIGxlbiwgZGFkZHIpOworCS8qIENoZWNrIHRoYXQgd2UncmUgaW4gdGhlIHJhbSBkb3dubG9hZCBzdGF0ZSAqLworCWlmIChody0+ZGxzdGF0ZSAhPSBIRkEzODR4X0RMU1RBVEVfUkFNRU5BQkxFRCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcmludGsoS0VSTl9JTkZPICJXcml0aW5nICVkIGJ5dGVzIHRvIHJhbSBAMHglMDZ4XG4iLCBsZW4sIGRhZGRyKTsKIAogCS8qIEhvdyBtYW55IGRvd21lbSBjYWxscz8gICovCiAJbndyaXRlcyA9IGxlbiAvIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTjsKIAlud3JpdGVzICs9IGxlbiAlIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiA/IDEgOiAwOwogCiAJLyogRG8gYmxvY2tpbmcgd21lbSdzICovCi0JZm9yKGk9MDsgaSA8IG53cml0ZXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBud3JpdGVzOyBpKyspIHsKIAkJLyogbWFrZSBhZGRyZXNzIGFyZ3MgKi8KIAkJY3VycmFkZHIgPSBkYWRkciArIChpICogSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKTsKIAkJY3VycnBhZ2UgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShjdXJyYWRkcik7CiAJCWN1cnJvZmZzZXQgPSBIRkEzODR4X0FERFJfQ01EX01LT0ZGKGN1cnJhZGRyKTsKIAkJY3VycmxlbiA9IGxlbiAtIChpICogSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKTsKLQkJaWYgKCBjdXJybGVuID4gSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKSB7CisJCWlmIChjdXJybGVuID4gSEZBMzg0eF9VU0JfUldNRU1fTUFYTEVOKQogCQkJY3VycmxlbiA9IEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTjsKLQkJfQogCi0JIAkvKiBEbyBibG9ja2luZyBjdGx4ICovCi0JCXJlc3VsdCA9IGhmYTM4NHhfZG93bWVtX3dhaXQoIGh3LAotCQkJCWN1cnJwYWdlLAotCQkJCWN1cnJvZmZzZXQsCi0JCQkJZGF0YSArIChpKkhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiksCi0JCQkJY3VycmxlbiApOworCQkvKiBEbyBibG9ja2luZyBjdGx4ICovCisJCXJlc3VsdCA9IGhmYTM4NHhfZG93bWVtX3dhaXQoaHcsCisJCQkJCSAgICAgY3VycnBhZ2UsCisJCQkJCSAgICAgY3Vycm9mZnNldCwKKwkJCQkJICAgICBkYXRhICsKKwkJCQkJICAgICAoaSAqIEhGQTM4NHhfVVNCX1JXTUVNX01BWExFTiksCisJCQkJCSAgICAgY3Vycmxlbik7CiAKLQkJaWYgKHJlc3VsdCkgYnJlYWs7CisJCWlmIChyZXN1bHQpCisJCQlicmVhazsKIAogCQkvKiBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGhhdmUgYSByZWFkYmFjay4gKi8KIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfZHJ2cl9yZWFkcGRhCiAqCkBAIC0yODIwLDEwMSArMjQzOSw4OSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgaGZhMzg0eF9kcnZyX3JlYWRwZGEoaGZhMzg0eF90ICpodywgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWludAkJcmVzdWx0ID0gMDsKLQl1MTYJCSpwZGEgPSBidWY7Ci0JaW50CQlwZGFvayA9IDA7Ci0JaW50CQltb3JlcGRycyA9IDE7Ci0JaW50CQljdXJycGRyID0gMDsJLyogd29yZCBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgcGRyICovCi0Jc2l6ZV90CQlpOwotCXUxNgkJcGRybGVuOwkJLyogcGRyIGxlbmd0aCBpbiBieXRlcywgaG9zdCBvcmRlciAqLwotCXUxNgkJcGRyY29kZTsJLyogcGRyIGNvZGUsIGhvc3Qgb3JkZXIgKi8KLQl1MTYJCWN1cnJwYWdlOwotCXUxNgkJY3Vycm9mZnNldDsKKwlpbnQgcmVzdWx0ID0gMDsKKwl1MTYgKnBkYSA9IGJ1ZjsKKwlpbnQgcGRhb2sgPSAwOworCWludCBtb3JlcGRycyA9IDE7CisJaW50IGN1cnJwZHIgPSAwOwkvKiB3b3JkIG9mZnNldCBvZiB0aGUgY3VycmVudCBwZHIgKi8KKwlzaXplX3QgaTsKKwl1MTYgcGRybGVuOwkJLyogcGRyIGxlbmd0aCBpbiBieXRlcywgaG9zdCBvcmRlciAqLworCXUxNiBwZHJjb2RlOwkJLyogcGRyIGNvZGUsIGhvc3Qgb3JkZXIgKi8KKwl1MTYgY3VycnBhZ2U7CisJdTE2IGN1cnJvZmZzZXQ7CiAJc3RydWN0IHBkYWxvYyB7Ci0JCXUzMgljYXJkYWRkcjsKLQkJdTE2CWF1eGN0bDsKLQl9IHBkYWxvY1tdID0KLQl7Ci0JCXsgSEZBMzg0Ml9QREFfQkFTRSwJCTB9LAotCQl7IEhGQTM4NDFfUERBX0JBU0UsCQkwfSwKLQkJeyBIRkEzODQxX1BEQV9CT0dVU19CQVNFLAkwfQorCQl1MzIgY2FyZGFkZHI7CisJCXUxNiBhdXhjdGw7CisJfSBwZGFsb2NbXSA9IHsKKwkJeworCQlIRkEzODQyX1BEQV9CQVNFLCAwfSwgeworCQlIRkEzODQxX1BEQV9CQVNFLCAwfSwgeworCQlIRkEzODQxX1BEQV9CT0dVU19CQVNFLCAwfQogCX07CiAKLQlEQkZFTlRFUjsKLQogCS8qIFJlYWQgdGhlIHBkYSBmcm9tIGVhY2gga25vd24gYWRkcmVzcy4gICovCi0JZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkYWxvYyk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkYWxvYyk7IGkrKykgewogCQkvKiBNYWtlIGFkZHJlc3MgKi8KIAkJY3VycnBhZ2UgPSBIRkEzODR4X0FERFJfQ01EX01LUEFHRShwZGFsb2NbaV0uY2FyZGFkZHIpOwogCQljdXJyb2Zmc2V0ID0gSEZBMzg0eF9BRERSX0NNRF9NS09GRihwZGFsb2NbaV0uY2FyZGFkZHIpOwogCi0JCXJlc3VsdCA9IGhmYTM4NHhfZG9ybWVtX3dhaXQoaHcsCi0JCQljdXJycGFnZSwKLQkJCWN1cnJvZmZzZXQsCi0JCQlidWYsCi0JCQlsZW4pOwkJLyogdW5pdHMgb2YgYnl0ZXMgKi8KKwkJcmVzdWx0ID0gaGZhMzg0eF9kb3JtZW1fd2FpdChodywgY3VycnBhZ2UsIGN1cnJvZmZzZXQsIGJ1ZiwgbGVuKTsJLyogdW5pdHMgb2YgYnl0ZXMgKi8KIAogCQlpZiAocmVzdWx0KSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKAotCQkJCQkgICJSZWFkIGZyb20gaW5kZXggJXpkIGZhaWxlZCwgY29udGludWluZ1xuIiwKLQkJCQlpICk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIlJlYWQgZnJvbSBpbmRleCAlemQgZmFpbGVkLCBjb250aW51aW5nXG4iLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogVGVzdCBmb3IgZ2FyYmFnZSAqLwogCQlwZGFvayA9IDE7CS8qIGluaXRpYWxseSBhc3N1bWUgZ29vZCAqLwogCQltb3JlcGRycyA9IDE7Ci0JCXdoaWxlICggcGRhb2sgJiYgbW9yZXBkcnMgKSB7Ci0JCQlwZHJsZW4gPSBoZmEzODR4Mmhvc3RfMTYocGRhW2N1cnJwZHJdKSAqIDI7Ci0JCQlwZHJjb2RlID0gaGZhMzg0eDJob3N0XzE2KHBkYVtjdXJycGRyKzFdKTsKKwkJd2hpbGUgKHBkYW9rICYmIG1vcmVwZHJzKSB7CisJCQlwZHJsZW4gPSBsZTE2X3RvX2NwdShwZGFbY3VycnBkcl0pICogMjsKKwkJCXBkcmNvZGUgPSBsZTE2X3RvX2NwdShwZGFbY3VycnBkciArIDFdKTsKIAkJCS8qIFRlc3QgdGhlIHJlY29yZCBsZW5ndGggKi8KLQkJCWlmICggcGRybGVuID4gSEZBMzg0eF9QRFJfTEVOX01BWCB8fCBwZHJsZW4gPT0gMCkgewotCQkJCVdMQU5fTE9HX0VSUk9SKCJwZHJsZW4gaW52YWxpZD0lZFxuIiwKLQkJCQkJcGRybGVuKTsKKwkJCWlmIChwZHJsZW4gPiBIRkEzODR4X1BEUl9MRU5fTUFYIHx8IHBkcmxlbiA9PSAwKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJwZHJsZW4gaW52YWxpZD0lZFxuIiwgcGRybGVuKTsKIAkJCQlwZGFvayA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQkvKiBUZXN0IHRoZSBjb2RlICovCi0JCQlpZiAoICFoZmEzODR4X2lzZ29vZF9wZHJjb2RlKHBkcmNvZGUpICkgewotCQkJCVdMQU5fTE9HX0VSUk9SKCJwZHJjb2RlIGludmFsaWQ9JWRcbiIsCi0JCQkJCXBkcmNvZGUpOworCQkJaWYgKCFoZmEzODR4X2lzZ29vZF9wZHJjb2RlKHBkcmNvZGUpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJwZHJjb2RlIGludmFsaWQ9JWRcbiIsCisJCQkJICAgICAgIHBkcmNvZGUpOwogCQkJCXBkYW9rID0gMDsKIAkJCQlicmVhazsKIAkJCX0KIAkJCS8qIFRlc3QgZm9yIGNvbXBsZXRpb24gKi8KLQkJCWlmICggcGRyY29kZSA9PSBIRkEzODR4X1BEUl9FTkRfT0ZfUERBKSB7CisJCQlpZiAocGRyY29kZSA9PSBIRkEzODR4X1BEUl9FTkRfT0ZfUERBKQogCQkJCW1vcmVwZHJzID0gMDsKLQkJCX0KIAogCQkJLyogTW92ZSB0byB0aGUgbmV4dCBwZHIgKGlmIG5lY2Vzc2FyeSkgKi8KLQkJCWlmICggbW9yZXBkcnMgKSB7CisJCQlpZiAobW9yZXBkcnMpIHsKIAkJCQkvKiBub3RlIHRoZSBhY2Nlc3MgdG8gcGRhW10sIG5lZWQgd29yZHMgaGVyZSAqLwotCQkJCWN1cnJwZHIgKz0gaGZhMzg0eDJob3N0XzE2KHBkYVtjdXJycGRyXSkgKyAxOworCQkJCWN1cnJwZHIgKz0gbGUxNl90b19jcHUocGRhW2N1cnJwZHJdKSArIDE7CiAJCQl9CiAJCX0KLQkJaWYgKCBwZGFvayApIHsKLQkJCVdMQU5fTE9HX0lORk8oCi0JCQkJIlBEQSBSZWFkIGZyb20gMHglMDh4IGluICVzIHNwYWNlLlxuIiwKLQkJCQlwZGFsb2NbaV0uY2FyZGFkZHIsCi0JCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAwID8gIkVYVERTIiA6Ci0JCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAxID8gIk5WIiA6Ci0JCQkJcGRhbG9jW2ldLmF1eGN0bCA9PSAyID8gIlBIWSIgOgotCQkJCXBkYWxvY1tpXS5hdXhjdGwgPT0gMyA/ICJJQ1NSQU0iIDoKLQkJCQkiPGJvZ3VzIGF1eGN0bD4iKTsKKwkJaWYgKHBkYW9rKSB7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgIlBEQSBSZWFkIGZyb20gMHglMDh4IGluICVzIHNwYWNlLlxuIiwKKwkJCSAgICAgICBwZGFsb2NbaV0uY2FyZGFkZHIsCisJCQkgICAgICAgcGRhbG9jW2ldLmF1eGN0bCA9PSAwID8gIkVYVERTIiA6CisJCQkgICAgICAgcGRhbG9jW2ldLmF1eGN0bCA9PSAxID8gIk5WIiA6CisJCQkgICAgICAgcGRhbG9jW2ldLmF1eGN0bCA9PSAyID8gIlBIWSIgOgorCQkJICAgICAgIHBkYWxvY1tpXS5hdXhjdGwgPT0gMyA/ICJJQ1NSQU0iIDoKKwkJCSAgICAgICAiPGJvZ3VzIGF1eGN0bD4iKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCXJlc3VsdCA9IHBkYW9rID8gMCA6IC1FTk9EQVRBOwogCi0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDMsIkZhaWx1cmU6IHBkYSBpcyBub3Qgb2theVxuIik7Ci0JfQorCWlmIChyZXN1bHQpCisJCXByX2RlYnVnKCJGYWlsdXJlOiBwZGEgaXMgbm90IG9rYXlcbiIpOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfc2V0Y29uZmlnCiAqCkBAIC0yOTYzLDkgKzI1NzAsOCBAQAogCiBpbnQgaGZhMzg0eF9kcnZyX3N0YXJ0KGhmYTM4NHhfdCAqaHcpCiB7Ci0JaW50CQlyZXN1bHQsIHJlc3VsdDEsIHJlc3VsdDI7Ci0JdTE2CQlzdGF0dXM7Ci0JREJGRU5URVI7CisJaW50IHJlc3VsdCwgcmVzdWx0MSwgcmVzdWx0MjsKKwl1MTYgc3RhdHVzOwogCiAJbWlnaHRfc2xlZXAoKTsKIApAQCAtMjk3NCwyNyArMjU4MCwyMyBAQAogCSAqIGJhZGx5IGlmIGEgY2xlYXJfaGFsdCBpcyBjYWxsZWQgd2hlbiB0aGUgZW5kcG9pbnQgaXMgYWxyZWFkeQogCSAqIG9rCiAJICovCi0JcmVzdWx0ID0gdXNiX2dldF9zdGF0dXMoaHctPnVzYiwgVVNCX1JFQ0lQX0VORFBPSU5ULCBody0+ZW5kcF9pbiwgJnN0YXR1cyk7CisJcmVzdWx0ID0KKwkgICAgdXNiX2dldF9zdGF0dXMoaHctPnVzYiwgVVNCX1JFQ0lQX0VORFBPSU5ULCBody0+ZW5kcF9pbiwgJnN0YXR1cyk7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJV0xBTl9MT0dfRVJST1IoCi0JCQkiQ2Fubm90IGdldCBidWxrIGluIGVuZHBvaW50IHN0YXR1cy5cbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBnZXQgYnVsayBpbiBlbmRwb2ludCBzdGF0dXMuXG4iKTsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKHN0YXR1cyA9PSAxKSAmJiB1c2JfY2xlYXJfaGFsdChody0+dXNiLCBody0+ZW5kcF9pbikpIHsKLQkJV0xBTl9MT0dfRVJST1IoCi0JCQkiRmFpbGVkIHRvIHJlc2V0IGJ1bGsgaW4gZW5kcG9pbnQuXG4iKTsKLQl9CisJaWYgKChzdGF0dXMgPT0gMSkgJiYgdXNiX2NsZWFyX2hhbHQoaHctPnVzYiwgaHctPmVuZHBfaW4pKQorCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXNldCBidWxrIGluIGVuZHBvaW50LlxuIik7CiAKLQlyZXN1bHQgPSB1c2JfZ2V0X3N0YXR1cyhody0+dXNiLCBVU0JfUkVDSVBfRU5EUE9JTlQsIGh3LT5lbmRwX291dCwgJnN0YXR1cyk7CisJcmVzdWx0ID0KKwkgICAgdXNiX2dldF9zdGF0dXMoaHctPnVzYiwgVVNCX1JFQ0lQX0VORFBPSU5ULCBody0+ZW5kcF9vdXQsICZzdGF0dXMpOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJIkNhbm5vdCBnZXQgYnVsayBvdXQgZW5kcG9pbnQgc3RhdHVzLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGdldCBidWxrIG91dCBlbmRwb2ludCBzdGF0dXMuXG4iKTsKIAkJZ290byBkb25lOwogCX0KLQlpZiAoKHN0YXR1cyA9PSAxKSAmJiB1c2JfY2xlYXJfaGFsdChody0+dXNiLCBody0+ZW5kcF9vdXQpKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJIkZhaWxlZCB0byByZXNldCBidWxrIG91dCBlbmRwb2ludC5cbiIpOwotCX0KKwlpZiAoKHN0YXR1cyA9PSAxKSAmJiB1c2JfY2xlYXJfaGFsdChody0+dXNiLCBody0+ZW5kcF9vdXQpKQorCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXNldCBidWxrIG91dCBlbmRwb2ludC5cbiIpOwogCiAJLyogU3luY2hyb25vdXMgdW5saW5rLCBpbiBjYXNlIHdlJ3JlIHRyeWluZyB0byByZXN0YXJ0IHRoZSBkcml2ZXIgKi8KIAl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOwpAQCAtMzAwMiw5ICsyNjA0LDggQEAKIAkvKiBQb3N0IHRoZSBJTiB1cmIgKi8KIAlyZXN1bHQgPSBzdWJtaXRfcnhfdXJiKGh3LCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzdWx0ICE9IDApIHsKLQkJV0xBTl9MT0dfRVJST1IoCi0JCQkiRmF0YWwsIGZhaWxlZCB0byBzdWJtaXQgUlggVVJCLCByZXN1bHQ9JWRcbiIsCi0JCQlyZXN1bHQpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJGYXRhbCwgZmFpbGVkIHRvIHN1Ym1pdCBSWCBVUkIsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtMzAyMywzMiArMjYyNCwzMyBAQAogCXJlc3VsdCA9IHJlc3VsdDIgPSBoZmEzODR4X2NtZF9pbml0aWFsaXplKGh3KTsKIAlpZiAocmVzdWx0MSAhPSAwKSB7CiAJCWlmIChyZXN1bHQyICE9IDApIHsKLQkJCVdMQU5fTE9HX0VSUk9SKAotCQkJCSJjbWRfaW5pdGlhbGl6ZSgpIGZhaWxlZCBvbiB0d28gYXR0ZW1wdHMsIHJlc3VsdHMgJWQgYW5kICVkXG4iLAotCQkJCXJlc3VsdDEsIHJlc3VsdDIpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgImNtZF9pbml0aWFsaXplKCkgZmFpbGVkIG9uIHR3byBhdHRlbXB0cywgcmVzdWx0cyAlZCBhbmQgJWRcbiIsCisJCQkgICAgICAgcmVzdWx0MSwgcmVzdWx0Mik7CiAJCQl1c2Jfa2lsbF91cmIoJmh3LT5yeF91cmIpOwogCQkJZ290byBkb25lOwogCQl9IGVsc2UgewotCQkJV0xBTl9MT0dfREVCVUcoMCwgIkZpcnN0IGNtZF9pbml0aWFsaXplKCkgZmFpbGVkIChyZXN1bHQgJWQpLFxuIiwKLQkJCQlyZXN1bHQxKTsKLQkJCVdMQU5fTE9HX0RFQlVHKDAsICJidXQgc2Vjb25kIGF0dGVtcHQgc3VjY2VlZGVkLiBBbGwgc2hvdWxkIGJlIG9rXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIkZpcnN0IGNtZF9pbml0aWFsaXplKCkgZmFpbGVkIChyZXN1bHQgJWQpLFxuIiwKKwkJCSAgICAgICByZXN1bHQxKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImJ1dCBzZWNvbmQgYXR0ZW1wdCBzdWNjZWVkZWQuIEFsbCBzaG91bGQgYmUgb2tcbiIpOwogCQl9CiAJfSBlbHNlIGlmIChyZXN1bHQyICE9IDApIHsKLQkJV0xBTl9MT0dfV0FSTklORygKLQkJCSJGaXJzdCBjbWRfaW5pdGlhbGl6ZSgpIHN1Y2NlZWRlZCwgYnV0IHNlY29uZCBhdHRlbXB0IGZhaWxlZCAocmVzdWx0PSVkKVxuIiwKLQkJCXJlc3VsdDIpOwotCQlXTEFOX0xPR19XQVJOSU5HKCJNb3N0IGxpa2VseSB0aGUgY2FyZCB3aWxsIGJlIGZ1bmN0aW9uYWxcbiIpOwotCQkJZ290byBkb25lOworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiRmlyc3QgY21kX2luaXRpYWxpemUoKSBzdWNjZWVkZWQsIGJ1dCBzZWNvbmQgYXR0ZW1wdCBmYWlsZWQgKHJlc3VsdD0lZClcbiIsCisJCSAgICAgICByZXN1bHQyKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIk1vc3QgbGlrZWx5IHRoZSBjYXJkIHdpbGwgYmUgZnVuY3Rpb25hbFxuIik7CisJCWdvdG8gZG9uZTsKIAl9CiAKIAlody0+c3RhdGUgPSBIRkEzODR4X1NUQVRFX1JVTk5JTkc7CiAKIGRvbmU6Ci0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X2RydnJfc3RvcAogKgpAQCAtMzA2OCwxOSArMjY3MCwxNyBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50Ci1oZmEzODR4X2RydnJfc3RvcChoZmEzODR4X3QgKmh3KQoraW50IGhmYTM4NHhfZHJ2cl9zdG9wKGhmYTM4NHhfdCAqaHcpCiB7Ci0JaW50CXJlc3VsdCA9IDA7Ci0JaW50CWk7Ci0JREJGRU5URVI7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGk7CiAKIAltaWdodF9zbGVlcCgpOwogCiAJLyogVGhlcmUncyBubyBuZWVkIGZvciBzcGlubG9ja3MgaGVyZS4gVGhlIFVTQiAiZGlzY29ubmVjdCIKIAkgKiBmdW5jdGlvbiBzZXRzIHRoaXMgInJlbW92ZWQiIGZsYWcgYW5kIHRoZW4gY2FsbHMgdXMuCiAJICovCi0JaWYgKCAhaHctPndsYW5kZXYtPmh3cmVtb3ZlZCApIHsKKwlpZiAoIWh3LT53bGFuZGV2LT5od3JlbW92ZWQpIHsKIAkJLyogQ2FsbCBpbml0aWFsaXplIHRvIGxlYXZlIHRoZSBNQUMgaW4gaXRzICdyZXNldCcgc3RhdGUgKi8KIAkJaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShodyk7CiAKQEAgLTMwOTQsMTEgKzI2OTQsOSBAQAogCWRlbF90aW1lcl9zeW5jKCZody0+Y29tbXNxdWFsX3RpbWVyKTsKIAogCS8qIENsZWFyIGFsbCB0aGUgcG9ydCBzdGF0dXMgKi8KLQlmb3IgKCBpID0gMDsgaSA8IEhGQTM4NHhfTlVNUE9SVFNfTUFYOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSEZBMzg0eF9OVU1QT1JUU19NQVg7IGkrKykKIAkJaHctPnBvcnRfZW5hYmxlZFtpXSA9IDA7Ci0JfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMTIzLDE4ICsyNzIxLDE3IEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCBoZmEzODR4X2RydnJfdHhmcmFtZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApCi0KK2ludCBoZmEzODR4X2RydnJfdHhmcmFtZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKKwkJCSBwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKQogewotCWludAkJdXNicGt0bGVuID0gc2l6ZW9mKGhmYTM4NHhfdHhfZnJhbWVfdCk7Ci0JaW50CQlyZXN1bHQ7Ci0JaW50CQlyZXQ7Ci0JY2hhcgkJKnB0cjsKLQotCURCRkVOVEVSOworCWludCB1c2Jwa3RsZW4gPSBzaXplb2YoaGZhMzg0eF90eF9mcmFtZV90KTsKKwlpbnQgcmVzdWx0OworCWludCByZXQ7CisJY2hhciAqcHRyOwogCiAJaWYgKGh3LT50eF91cmIuc3RhdHVzID09IC1FSU5QUk9HUkVTUykgewotCQlXTEFOX0xPR19XQVJOSU5HKCJUWCBVUkIgYWxyZWFkeSBpbiB1c2VcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJUWCBVUkIgYWxyZWFkeSBpbiB1c2VcbiIpOwogCQlyZXN1bHQgPSAzOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMzE0NCw3ICsyNzQxLDcgQEAKIAltZW1zZXQoJmh3LT50eGJ1ZmYudHhmcm0uZGVzYywgMCwgc2l6ZW9mKGh3LT50eGJ1ZmYudHhmcm0uZGVzYykpOwogCiAJLyogU2V0dXAgdGhlIHVzYiB0eXBlIGZpZWxkICovCi0JaHctPnR4YnVmZi50eXBlID0gaG9zdDJoZmEzODR4XzE2KEhGQTM4NHhfVVNCX1RYRlJNKTsKKwlody0+dHhidWZmLnR5cGUgPSBjcHVfdG9fbGUxNihIRkEzODR4X1VTQl9UWEZSTSk7CiAKIAkvKiBTZXQgdXAgdGhlIHN3X3N1cHBvcnQgZmllbGQgdG8gaWRlbnRpZnkgdGhpcyBmcmFtZSAqLwogCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy5zd19zdXBwb3J0ID0gMHgwMTIzOwpAQCAtMzE1MiwzMyArMjc0OSwzMyBAQAogLyogVHggY29tcGxldGUgYW5kIFR4IGV4Y2VwdGlvbiBkaXNhYmxlIHBlciBkbGVhY2guICBNaWdodCBiZSBjYXVzaW5nCiAgKiBidWYgZGVwbGV0aW9uCiAgKi8KLS8vI2RlZmluZSBET0VYQyAgU0xQIC0tIGRvYm90aCBicmVha3MgaG9ycmlibHkgdW5kZXIgbG9hZCwgZG9leGMgbGVzcyBzby4KKy8qICNkZWZpbmUgRE9FWEMgIFNMUCAtLSBkb2JvdGggYnJlYWtzIGhvcnJpYmx5IHVuZGVyIGxvYWQsIGRvZXhjIGxlc3Mgc28uICovCiAjaWYgZGVmaW5lZChET0JPVEgpCiAJaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgPQotCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKLQkJSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMSk7CisJICAgIEhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCSAgICBIRkEzODR4X1RYX1RYRVhfU0VUKDEpIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgxKTsKICNlbGlmIGRlZmluZWQoRE9FWEMpCiAJaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgPQotCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKLQkJSEZBMzg0eF9UWF9UWEVYX1NFVCgxKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMCk7CisJICAgIEhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCSAgICBIRkEzODR4X1RYX1RYRVhfU0VUKDEpIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgwKTsKICNlbHNlCiAJaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wgPQotCQlIRkEzODR4X1RYX01BQ1BPUlRfU0VUKDApIHwgSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKDEpIHwKLQkJSEZBMzg0eF9UWF9UWEVYX1NFVCgwKSB8IEhGQTM4NHhfVFhfVFhPS19TRVQoMCk7CisJICAgIEhGQTM4NHhfVFhfTUFDUE9SVF9TRVQoMCkgfCBIRkEzODR4X1RYX1NUUlVDVFlQRV9TRVQoMSkgfAorCSAgICBIRkEzODR4X1RYX1RYRVhfU0VUKDApIHwgSEZBMzg0eF9UWF9UWE9LX1NFVCgwKTsKICNlbmRpZgogCWh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sID0KLQkJaG9zdDJoZmEzODR4XzE2KGh3LT50eGJ1ZmYudHhmcm0uZGVzYy50eF9jb250cm9sKTsKKwkgICAgY3B1X3RvX2xlMTYoaHctPnR4YnVmZi50eGZybS5kZXNjLnR4X2NvbnRyb2wpOwogCiAJLyogY29weSB0aGUgaGVhZGVyIG92ZXIgdG8gdGhlIHR4ZGVzYyAqLwotCW1lbWNweSgmKGh3LT50eGJ1ZmYudHhmcm0uZGVzYy5mcmFtZV9jb250cm9sKSwgcDgwMjExX2hkciwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOworCW1lbWNweSgmKGh3LT50eGJ1ZmYudHhmcm0uZGVzYy5mcmFtZV9jb250cm9sKSwgcDgwMjExX2hkciwKKwkgICAgICAgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOwogCiAJLyogaWYgd2UncmUgdXNpbmcgaG9zdCBXRVAsIGluY3JlYXNlIHNpemUgYnkgSVYrSUNWICovCiAJaWYgKHA4MDIxMV93ZXAtPmRhdGEpIHsKLQkJaHctPnR4YnVmZi50eGZybS5kZXNjLmRhdGFfbGVuID0gaG9zdDJoZmEzODR4XzE2KHNrYi0+bGVuKzgpOwotCQkvLyBody0+dHhidWZmLnR4ZnJtLmRlc2MudHhfY29udHJvbCB8PSBIRkEzODR4X1RYX05PRU5DUllQVF9TRVQoMSk7Ci0JCXVzYnBrdGxlbis9ODsKKwkJaHctPnR4YnVmZi50eGZybS5kZXNjLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4gKyA4KTsKKwkJdXNicGt0bGVuICs9IDg7CiAJfSBlbHNlIHsKLQkJaHctPnR4YnVmZi50eGZybS5kZXNjLmRhdGFfbGVuID0gaG9zdDJoZmEzODR4XzE2KHNrYi0+bGVuKTsKKwkJaHctPnR4YnVmZi50eGZybS5kZXNjLmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOwogCX0KIAogCXVzYnBrdGxlbiArPSBza2ItPmxlbjsKQEAgLTMxODcsNTkgKzI3ODQsNTEgQEAKIAlwdHIgPSBody0+dHhidWZmLnR4ZnJtLmRhdGE7CiAJaWYgKHA4MDIxMV93ZXAtPmRhdGEpIHsKIAkJbWVtY3B5KHB0ciwgcDgwMjExX3dlcC0+aXYsIHNpemVvZihwODAyMTFfd2VwLT5pdikpOwotCQlwdHIrPSBzaXplb2YocDgwMjExX3dlcC0+aXYpOworCQlwdHIgKz0gc2l6ZW9mKHA4MDIxMV93ZXAtPml2KTsKIAkJbWVtY3B5KHB0ciwgcDgwMjExX3dlcC0+ZGF0YSwgc2tiLT5sZW4pOwogCX0gZWxzZSB7CiAJCW1lbWNweShwdHIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCX0KIAkvKiBjb3B5IG92ZXIgdGhlIHBhY2tldCBkYXRhICovCi0JcHRyKz0gc2tiLT5sZW47CisJcHRyICs9IHNrYi0+bGVuOwogCiAJLyogY29weSBvdmVyIHRoZSBXRVAgSUNWIGlmIHdlIGFyZSB1c2luZyBob3N0IFdFUCAqLwotCWlmIChwODAyMTFfd2VwLT5kYXRhKSB7CisJaWYgKHA4MDIxMV93ZXAtPmRhdGEpCiAJCW1lbWNweShwdHIsIHA4MDIxMV93ZXAtPmljdiwgc2l6ZW9mKHA4MDIxMV93ZXAtPmljdikpOwotCX0KIAogCS8qIFNlbmQgdGhlIFVTQiBwYWNrZXQgKi8KLQl1c2JfZmlsbF9idWxrX3VyYiggJihody0+dHhfdXJiKSwgaHctPnVzYiwKLQkgICAgICAgICAgICAgICBody0+ZW5kcF9vdXQsCi0JICAgICAgICAgICAgICAgJihody0+dHhidWZmKSwgUk9VTkRVUDY0KHVzYnBrdGxlbiksCi0JICAgICAgICAgICAgICAgaGZhMzg0eF91c2JvdXRfY2FsbGJhY2ssIGh3LT53bGFuZGV2ICk7CisJdXNiX2ZpbGxfYnVsa191cmIoJihody0+dHhfdXJiKSwgaHctPnVzYiwKKwkJCSAgaHctPmVuZHBfb3V0LAorCQkJICAmKGh3LT50eGJ1ZmYpLCBST1VORFVQNjQodXNicGt0bGVuKSwKKwkJCSAgaGZhMzg0eF91c2JvdXRfY2FsbGJhY2ssIGh3LT53bGFuZGV2KTsKIAlody0+dHhfdXJiLnRyYW5zZmVyX2ZsYWdzIHw9IFVTQl9RVUVVRV9CVUxLOwogCiAJcmVzdWx0ID0gMTsKIAlyZXQgPSBzdWJtaXRfdHhfdXJiKGh3LCAmaHctPnR4X3VyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCByZXQgIT0gMCApIHsKLQkJV0xBTl9MT0dfRVJST1IoCi0JCQkic3VibWl0X3R4X3VyYigpIGZhaWxlZCwgZXJyb3I9JWRcbiIsIHJldCk7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAic3VibWl0X3R4X3VyYigpIGZhaWxlZCwgZXJyb3I9JWRcbiIsIHJldCk7CiAJCXJlc3VsdCA9IDM7CiAJfQogCi0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIGhmYTM4NHhfdHhfdGltZW91dCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JaGZhMzg0eF90CSpodyA9IHdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURCRkVOVEVSOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAKLQlpZiAoICFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmCi0JICAgICAvKiBOb3RlIHRoZSBiaXR3aXNlIE9SLCBub3QgdGhlIGxvZ2ljYWwgT1IuICovCi0JICAgICAoICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpIHwKLQkgICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykgKSApCi0JeworCWlmICghaHctPndsYW5kZXYtPmh3cmVtb3ZlZCAmJgorCSAgICAvKiBOb3RlIHRoZSBiaXR3aXNlIE9SLCBub3QgdGhlIGxvZ2ljYWwgT1IuICovCisJICAgICghdGVzdF9hbmRfc2V0X2JpdChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSB8CisJICAgICAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1JYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkpIHsKIAkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwotCi0JREJGRVhJVDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMjU3LDEyICsyODQ2LDEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9yZWFwZXJfdGFzayh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JaGZhMzg0eF90CSpodyA9IChoZmEzODR4X3QqKWRhdGE7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgZGF0YTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wOwotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0KLQlEQkZFTlRFUjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAKQEAgLTMyNzAsNyArMjg1Nyw3IEBACiAJICogaGFzIHVucGx1Z2dlZCB0aGUgYWRhcHRlci4KIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRlbXAsICZody0+Y3RseHEucmVhcGFibGUpIHsKLQkJaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7CisJCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4OwogCiAJCWN0bHggPSBsaXN0X2VudHJ5KGVudHJ5LCBoZmEzODR4X3VzYmN0bHhfdCwgbGlzdCk7CiAJCWxpc3RfZGVsKCZjdGx4LT5saXN0KTsKQEAgLTMyNzksNyArMjg2Niw2IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCi0JREJGRVhJVDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMjk4LDE1ICsyODg0LDEzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIGhmYTM4NHhfdXNiY3RseF9jb21wbGV0aW9uX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKQogewotCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90KilkYXRhOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CiAJc3RydWN0IGxpc3RfaGVhZCAqdGVtcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaW50IHJlYXAgPSAwOwogCi0JREJGRU5URVI7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAogCS8qIFRoaXMgbGlzdCBpcyBndWFyYW50ZWVkIHRvIGJlIGVtcHR5IGlmIHNvbWVvbmUKQEAgLTMzMjAsNyArMjkwNCw3IEBACiAJCS8qIENhbGwgdGhlIGNvbXBsZXRpb24gZnVuY3Rpb24gdGhhdCB0aGlzCiAJCSAqIGNvbW1hbmQgd2FzIGFzc2lnbmVkLCBhc3N1bWluZyBpdCBoYXMgb25lLgogCQkgKi8KLQkJaWYgKCBjdGx4LT5jbWRjYiAhPSBOVUxMICkgeworCQlpZiAoY3RseC0+Y21kY2IgIT0gTlVMTCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAkJCWN0bHgtPmNtZGNiKGh3LCBjdGx4KTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwpAQCAtMzMzMyw4ICsyOTE3LDcgQEAKIAkJCS8qIERpZCBzb21lb25lIHlhbmsgdGhlIGFkYXB0ZXIgb3V0CiAJCQkgKiB3aGlsZSBvdXIgbGlzdCB3YXMgKGJyaWVmbHkpIHVubG9ja2VkPwogCQkJICovCi0JCQlpZiAoIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQotCQkJeworCQkJaWYgKGh3LT53bGFuZGV2LT5od3JlbW92ZWQpIHsKIAkJCQlyZWFwID0gMDsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTMzNDUsNyArMjkyOCw3IEBACiAJCSAqIHRocmVhZHMgd2FpdGluZyBmb3IgdGhlbSB0byBkaWUuIEhlbmNlIHRoZXkgbXVzdAogCQkgKiBiZSBkZWxpdmVyZWQgdG8gVGhlIFJlYXBlciEKIAkJICovCi0JCWlmICggY3RseC0+cmVhcGFibGUgKSB7CisJCWlmIChjdGx4LT5yZWFwYWJsZSkgewogCQkJLyogTW92ZSB0aGUgQ1RMWCBvZmYgdGhlICJjb21wbGV0aW5nIiBsaXN0IChob3BlZnVsbHkpCiAJCQkgKiBvbiB0byB0aGUgInJlYXBhYmxlIiBsaXN0IHdoZXJlIHRoZSByZWFwZXIgdGFzawogCQkJICogY2FuIGZpbmQgaXQuIEFuZCAicmVhcGFibGUiIG1lYW5zIHRoYXQgdGhpcyBDVExYCkBAIC0zMzYxLDggKzI5NDQsNiBAQAogCiAJaWYgKHJlYXApCiAJCXRhc2tsZXRfc2NoZWR1bGUoJmh3LT5yZWFwZXJfYmgpOwotCi0JREJGRVhJVDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMzgyLDEyICsyOTYzLDExIEBACiAqIENhbGwgY29udGV4dDoKICoJRWl0aGVyIHByb2Nlc3Mgb3IgaW50ZXJydXB0LCBidXQgcHJlc3VtYWJseSBpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCB1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKK3N0YXRpYyBpbnQgdW5sb2NrZWRfdXNiY3RseF9jYW5jZWxfYXN5bmMoaGZhMzg0eF90ICpodywKKwkJCQkJIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KQogewogCWludCByZXQ7CiAKLQlEQkZFTlRFUjsKLQogCS8qCiAJICogVHJ5IHRvIGRlbGV0ZSB0aGUgVVJCIGNvbnRhaW5pbmcgb3VyIHJlcXVlc3QgcGFja2V0LgogCSAqIElmIHdlIHN1Y2NlZWQsIHRoZW4gaXRzIGNvbXBsZXRpb24gaGFuZGxlciB3aWxsIGJlCkBAIC0zNDA4LDggKzI5ODgsNiBAQAogCQlyZXQgPSAwOwogCX0KIAotCURCRkVYSVQ7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNDM3LDggKzMwMTUsNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCB1bmxvY2tlZF91c2JjdGx4X2NvbXBsZXRlKGhmYTM4NHhfdCAqaHcsIGhmYTM4NHhfdXNiY3RseF90ICpjdGx4KQogewotCURCRkVOVEVSOwotCiAJLyogVGltZXJzIGhhdmUgYmVlbiBzdG9wcGVkLCBhbmQgY3RseCBzaG91bGQgYmUgaW4KIAkgKiBhIHRlcm1pbmFsIHN0YXRlLiBSZXRpcmUgaXQgZnJvbSB0aGUgImFjdGl2ZSIKIAkgKiBxdWV1ZS4KQEAgLTM0NTMsMTMgKzMwMjksMTEgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlXTEFOX0xPR19FUlJPUigiQ1RMWFslZF0gbm90IGluIGEgdGVybWluYXRpbmcgc3RhdGUoJXMpXG4iLAotCQkgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAotCQkgICAgICAgICAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CisJCXByaW50ayhLRVJOX0VSUiAiQ1RMWFslZF0gbm90IGluIGEgdGVybWluYXRpbmcgc3RhdGUoJXMpXG4iLAorCQkgICAgICAgbGUxNl90b19jcHUoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkgICAgICAgY3RseHN0cihjdGx4LT5zdGF0ZSkpOwogCQlicmVhazsKLQl9IC8qIHN3aXRjaCAqLwotCi0JREJGRVhJVDsKKwl9CQkJLyogc3dpdGNoICovCiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzQ3OCwxMSArMzA1Miw5IEBACiAqIENhbGwgY29udGV4dDoKICoJYW55CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhxX3J1bihoZmEzODR4X3QJKmh3KQorc3RhdGljIHZvaWQgaGZhMzg0eF91c2JjdGx4cV9ydW4oaGZhMzg0eF90ICpodykKIHsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQlEQkZFTlRFUjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogYWNxdWlyZSBsb2NrICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CkBAIC0zNDk0LDI4ICszMDY2LDI2IEBACiAJICogRG9uJ3QgdG91Y2ggYW55IG9mIHRoZXNlIENUTFhzIGlmIHRoZSBoYXJkd2FyZQogCSAqIGhhcyBiZWVuIHJlbW92ZWQgb3IgdGhlIFVTQiBzdWJzeXN0ZW0gaXMgc3RhbGxlZC4KIAkgKi8KLQlpZiAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSB8fAotCSAgICAgdGVzdF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgfHwKLQkgICAgIGh3LT53bGFuZGV2LT5od3JlbW92ZWQgKQorCWlmICghbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgfHwKKwkgICAgdGVzdF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgfHwgaHctPndsYW5kZXYtPmh3cmVtb3ZlZCkKIAkJZ290byB1bmxvY2s7CiAKLQl3aGlsZSAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEucGVuZGluZykgKSB7Ci0JCWhmYTM4NHhfdXNiY3RseF90CSpoZWFkOwotCQlpbnQJCQlyZXN1bHQ7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZody0+Y3RseHEucGVuZGluZykpIHsKKwkJaGZhMzg0eF91c2JjdGx4X3QgKmhlYWQ7CisJCWludCByZXN1bHQ7CiAKIAkJLyogVGhpcyBpcyB0aGUgZmlyc3QgcGVuZGluZyBjb21tYW5kICovCiAJCWhlYWQgPSBsaXN0X2VudHJ5KGh3LT5jdGx4cS5wZW5kaW5nLm5leHQsCi0JCSAgICAgICAgICAgICAgICAgIGhmYTM4NHhfdXNiY3RseF90LAotCQkgICAgICAgICAgICAgICAgICBsaXN0KTsKKwkJCQkgIGhmYTM4NHhfdXNiY3RseF90LCBsaXN0KTsKIAogCQkvKiBXZSBuZWVkIHRvIHNwbGl0IHRoaXMgb2ZmIHRvIGF2b2lkIGEgcmFjZSBjb25kaXRpb24gKi8KIAkJbGlzdF9tb3ZlX3RhaWwoJmhlYWQtPmxpc3QsICZody0+Y3RseHEuYWN0aXZlKTsKIAogCQkvKiBGaWxsIHRoZSBvdXQgcGFja2V0ICovCi0JCXVzYl9maWxsX2J1bGtfdXJiKCAmKGh3LT5jdGx4X3VyYiksIGh3LT51c2IsCi0JCSAgICAgICAgICAgICAgICAgICBody0+ZW5kcF9vdXQsCi0JCSAgICAgICAgICAgICAgICAgICAmKGhlYWQtPm91dGJ1ZiksIFJPVU5EVVA2NChoZWFkLT5vdXRidWZzaXplKSwKLQkJICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjaywgaHcpOworCQl1c2JfZmlsbF9idWxrX3VyYigmKGh3LT5jdGx4X3VyYiksIGh3LT51c2IsCisJCQkJICBody0+ZW5kcF9vdXQsCisJCQkJICAmKGhlYWQtPm91dGJ1ZiksIFJPVU5EVVA2NChoZWFkLT5vdXRidWZzaXplKSwKKwkJCQkgIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjaywgaHcpOwogCQlody0+Y3RseF91cmIudHJhbnNmZXJfZmxhZ3MgfD0gVVNCX1FVRVVFX0JVTEs7CiAKIAkJLyogTm93IHN1Ym1pdCB0aGUgVVJCIGFuZCB1cGRhdGUgdGhlIENUTFgncyBzdGF0ZQpAQCAtMzUzMSw3ICszMTAxLDcgQEAKIAogCQkJLyogU3RhcnQgdGhlIElOIHdhaXQgdGltZXIgKi8KIAkJCWh3LT5yZXNwX3RpbWVyX2RvbmUgPSAwOwotCQkJaHctPnJlc3B0aW1lci5leHBpcmVzID0gamlmZmllcyArIDIqSFo7CisJCQlody0+cmVzcHRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMiAqIEhaOwogCQkJYWRkX3RpbWVyKCZody0+cmVzcHRpbWVyKTsKIAogCQkJYnJlYWs7CkBAIC0zNTQyLDggKzMxMTIsOSBAQAogCQkJICogdGhpcyBDVExYIGJhY2sgaW4gdGhlICJwZW5kaW5nIiBxdWV1ZQogCQkJICogYW5kIHNjaGVkdWxlIGEgcmVzZXQgLi4uCiAJCQkgKi8KLQkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKLQkJCSAgICAgICAgICAgICAgICAgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCSAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKIAkJCWxpc3RfbW92ZSgmaGVhZC0+bGlzdCwgJmh3LT5jdGx4cS5wZW5kaW5nKTsKIAkJCXNldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncyk7CiAJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOwpAQCAtMzU1MSwyMyArMzEyMiwyMCBAQAogCQl9CiAKIAkJaWYgKHJlc3VsdCA9PSAtRVNIVVRET1dOKSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB1cmIgc2h1dGRvd24hXG4iLAotCQkJCQkgaHctPndsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyB1cmIgc2h1dGRvd24hXG4iLAorCQkJICAgICAgIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCX0KIAotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHN1Ym1pdCBDVExYWyVkXTogZXJyb3I9JWRcbiIsCi0JCSAgICAgICAgICAgICAgIGhmYTM4NHgyaG9zdF8xNihoZWFkLT5vdXRidWYudHlwZSksIHJlc3VsdCk7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHN1Ym1pdCBDVExYWyVkXTogZXJyb3I9JWRcbiIsCisJCSAgICAgICBsZTE2X3RvX2NwdShoZWFkLT5vdXRidWYudHlwZSksIHJlc3VsdCk7CiAJCXVubG9ja2VkX3VzYmN0bHhfY29tcGxldGUoaHcsIGhlYWQpOwotCX0gLyogd2hpbGUgKi8KKwl9CQkJLyogd2hpbGUgKi8KIAotCXVubG9jazoKK3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF91c2Jpbl9jYWxsYmFjawogKgpAQCAtMzU4NiwxMyArMzE1NCwxMyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKLQl3bGFuZGV2aWNlX3QJCSp3bGFuZGV2ID0gdXJiLT5jb250ZXh0OwotCWhmYTM4NHhfdAkJKmh3OwotCWhmYTM4NHhfdXNiaW5fdAkJKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAgICAgICAgICAqc2tiID0gTlVMTDsKLQlpbnQJCQlyZXN1bHQ7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgdXJiX3N0YXR1czsKLQl1MTYJCQl0eXBlOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IHVyYi0+Y29udGV4dDsKKwloZmEzODR4X3QgKmh3OworCWhmYTM4NHhfdXNiaW5fdCAqdXNiaW4gPSAoaGZhMzg0eF91c2Jpbl90ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCWludCByZXN1bHQ7CisJaW50IHVyYl9zdGF0dXM7CisJdTE2IHR5cGU7CiAKIAllbnVtIFVTQklOX0FDVElPTiB7CiAJCUhBTkRMRSwKQEAgLTM2MDAsMTEgKzMxNjgsNyBAQAogCQlBQk9SVAogCX0gYWN0aW9uOwogCi0JREJGRU5URVI7Ci0KLQlpZiAoICF3bGFuZGV2IHx8Ci0JICAgICAhd2xhbmRldi0+bmV0ZGV2IHx8Ci0JICAgICB3bGFuZGV2LT5od3JlbW92ZWQgKQorCWlmICghd2xhbmRldiB8fCAhd2xhbmRldi0+bmV0ZGV2IHx8IHdsYW5kZXYtPmh3cmVtb3ZlZCkKIAkJZ290byBleGl0OwogCiAJaHcgPSB3bGFuZGV2LT5wcml2OwpAQCAtMzYxMiw5ICszMTc2LDggQEAKIAkJZ290byBleGl0OwogCiAJc2tiID0gaHctPnJ4X3VyYl9za2I7Ci0JaWYgKCFza2IgfHwgKHNrYi0+ZGF0YSAhPSB1cmItPnRyYW5zZmVyX2J1ZmZlcikpIHsKLQkJQlVHKCk7Ci0JfQorCUJVR19PTighc2tiIHx8IChza2ItPmRhdGEgIT0gdXJiLT50cmFuc2Zlcl9idWZmZXIpKTsKKwogCWh3LT5yeF91cmJfc2tiID0gTlVMTDsKIAogCS8qIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zIHdpdGhpbiB0aGUgVVJCICovCkBAIC0zNjIzLDcgKzMxODYsNyBAQAogCQlhY3Rpb24gPSBIQU5ETEU7CiAKIAkJLyogQ2hlY2sgZm9yIHNob3J0IHBhY2tldCAqLwotCQlpZiAoIHVyYi0+YWN0dWFsX2xlbmd0aCA9PSAwICkgeworCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID09IDApIHsKIAkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2Vycm9ycyk7CiAJCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKTsKIAkJCWFjdGlvbiA9IFJFU1VCTUlUOwpAQCAtMzYzMSw5ICszMTk0LDkgQEAKIAkJYnJlYWs7CiAKIAljYXNlIC1FUElQRToKLQkJV0xBTl9MT0dfV0FSTklORygiJXMgcnggcGlwZSBzdGFsbGVkOiByZXF1ZXN0aW5nIHJlc2V0XG4iLAotCQkgICAgICAgICAgICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bmFtZSk7Ci0JCWlmICggIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykgKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyByeCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCSAgICAgICB3bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoV09SS19SWF9IQUxULCAmaHctPnVzYl9mbGFncykpCiAJCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOwogCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy5yeF9lcnJvcnMpOwogCQlhY3Rpb24gPSBBQk9SVDsKQEAgLTM2NDIsOCArMzIwNSw4IEBACiAJY2FzZSAtRUlMU0VROgogCWNhc2UgLUVUSU1FRE9VVDoKIAljYXNlIC1FUFJPVE86Ci0JCWlmICggIXRlc3RfYW5kX3NldF9iaXQoVEhST1RUTEVfUlgsICZody0+dXNiX2ZsYWdzKSAmJgotCQkgICAgICF0aW1lcl9wZW5kaW5nKCZody0+dGhyb3R0bGUpICkgeworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoVEhST1RUTEVfUlgsICZody0+dXNiX2ZsYWdzKSAmJgorCQkgICAgIXRpbWVyX3BlbmRpbmcoJmh3LT50aHJvdHRsZSkpIHsKIAkJCW1vZF90aW1lcigmaHctPnRocm90dGxlLCBqaWZmaWVzICsgVEhST1RUTEVfSklGRklFUyk7CiAJCX0KIAkJKysod2xhbmRldi0+bGludXhfc3RhdHMucnhfZXJyb3JzKTsKQEAgLTM2NTcsMTkgKzMyMjAsMjAgQEAKIAogCWNhc2UgLUVOT0RFVjoKIAljYXNlIC1FU0hVVERPV046Ci0JCVdMQU5fTE9HX0RFQlVHKDMsInN0YXR1cz0lZCwgZGV2aWNlIHJlbW92ZWQuXG4iLCB1cmItPnN0YXR1cyk7CisJCXByX2RlYnVnKCJzdGF0dXM9JWQsIGRldmljZSByZW1vdmVkLlxuIiwgdXJiLT5zdGF0dXMpOwogCQlhY3Rpb24gPSBBQk9SVDsKIAkJYnJlYWs7CiAKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRUNPTk5SRVNFVDoKLQkJV0xBTl9MT0dfREVCVUcoMywic3RhdHVzPSVkLCB1cmIgZXhwbGljaXRseSB1bmxpbmtlZC5cbiIsIHVyYi0+c3RhdHVzKTsKKwkJcHJfZGVidWcoInN0YXR1cz0lZCwgdXJiIGV4cGxpY2l0bHkgdW5saW5rZWQuXG4iLAorCQkgICAgICAgdXJiLT5zdGF0dXMpOwogCQlhY3Rpb24gPSBBQk9SVDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlXTEFOX0xPR19ERUJVRygzLCJ1cmIgc3RhdHVzPSVkLCB0cmFuc2ZlciBmbGFncz0weCV4XG4iLAotCQkgICAgICAgICAgICAgICAgIHVyYi0+c3RhdHVzLCB1cmItPnRyYW5zZmVyX2ZsYWdzKTsKKwkJcHJfZGVidWcoInVyYiBzdGF0dXM9JWQsIHRyYW5zZmVyIGZsYWdzPTB4JXhcbiIsCisJCSAgICAgICB1cmItPnN0YXR1cywgdXJiLT50cmFuc2Zlcl9mbGFncyk7CiAJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2Vycm9ycyk7CiAJCWFjdGlvbiA9IFJFU1VCTUlUOwogCQlicmVhazsKQEAgLTM2ODIsOSArMzI0Niw5IEBACiAJCXJlc3VsdCA9IHN1Ym1pdF9yeF91cmIoaHcsIEdGUF9BVE9NSUMpOwogCiAJCWlmIChyZXN1bHQgIT0gMCkgewotCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkJIkZhdGFsLCBmYWlsZWQgdG8gcmVzdWJtaXQgcnhfdXJiLiBlcnJvcj0lZFxuIiwKLQkJCQlyZXN1bHQpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIkZhdGFsLCBmYWlsZWQgdG8gcmVzdWJtaXQgcnhfdXJiLiBlcnJvcj0lZFxuIiwKKwkJCSAgICAgICByZXN1bHQpOwogCQl9CiAJfQogCkBAIC0zNjkyLDcgKzMyNTYsNyBAQAogCS8qIE5vdGU6IHRoZSBjaGVjayBvZiB0aGUgc3dfc3VwcG9ydCBmaWVsZCwgdGhlIHR5cGUgZmllbGQgZG9lc24ndAogCSAqICAgICAgIGhhdmUgYml0IDEyIHNldCBsaWtlIHRoZSBkb2NzIHN1Z2dlc3QuCiAJICovCi0JdHlwZSA9IGhmYTM4NHgyaG9zdF8xNih1c2Jpbi0+dHlwZSk7CisJdHlwZSA9IGxlMTZfdG9fY3B1KHVzYmluLT50eXBlKTsKIAlpZiAoSEZBMzg0eF9VU0JfSVNSWEZSTSh0eXBlKSkgewogCQlpZiAoYWN0aW9uID09IEhBTkRMRSkgewogCQkJaWYgKHVzYmluLT50eGZybS5kZXNjLnN3X3N1cHBvcnQgPT0gMHgwMTIzKSB7CkBAIC0zNzI4LDMwICszMjkyLDI4IEBACiAJCWJyZWFrOwogCiAJY2FzZSBIRkEzODR4X1VTQl9CVUZBVkFJTDoKLQkJV0xBTl9MT0dfREVCVUcoMywiUmVjZWl2ZWQgQlVGQVZBSUwgcGFja2V0LCBmcm1sZW49JWRcbiIsCi0JCQl1c2Jpbi0+YnVmYXZhaWwuZnJtbGVuKTsKKwkJcHJfZGVidWcoIlJlY2VpdmVkIEJVRkFWQUlMIHBhY2tldCwgZnJtbGVuPSVkXG4iLAorCQkgICAgICAgdXNiaW4tPmJ1ZmF2YWlsLmZybWxlbik7CiAJCWJyZWFrOwogCiAJY2FzZSBIRkEzODR4X1VTQl9FUlJPUjoKLQkJV0xBTl9MT0dfREVCVUcoMywiUmVjZWl2ZWQgVVNCX0VSUk9SIHBhY2tldCwgZXJyb3J0eXBlPSVkXG4iLAotCQkJdXNiaW4tPnVzYmVycm9yLmVycm9ydHlwZSk7CisJCXByX2RlYnVnKCJSZWNlaXZlZCBVU0JfRVJST1IgcGFja2V0LCBlcnJvcnR5cGU9JWRcbiIsCisJCSAgICAgICB1c2Jpbi0+dXNiZXJyb3IuZXJyb3J0eXBlKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlXTEFOX0xPR19ERUJVRygzLCJVbnJlY29nbml6ZWQgVVNCSU4gcGFja2V0LCB0eXBlPSV4LCBzdGF0dXM9JWRcbiIsCi0JCQl1c2Jpbi0+dHlwZSwgdXJiX3N0YXR1cyk7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiVW5yZWNvZ25pemVkIFVTQklOIHBhY2tldCwgdHlwZT0leCwgc3RhdHVzPSVkXG4iLAorCQkgICAgICAgdXNiaW4tPnR5cGUsIHVyYl9zdGF0dXMpOwogCQlicmVhazsKLQl9IC8qIHN3aXRjaCAqLworCX0JCQkvKiBzd2l0Y2ggKi8KIAogZXhpdDoKIAogCWlmIChza2IpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfdXNiaW5fY3RseAogKgpAQCAtMzc3NSwxMSArMzMzNyw5IEBACiBzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmluX2N0bHgoaGZhMzg0eF90ICpodywgaGZhMzg0eF91c2Jpbl90ICp1c2JpbiwKIAkJCSAgICAgICBpbnQgdXJiX3N0YXR1cykKIHsKLQloZmEzODR4X3VzYmN0bHhfdAkqY3RseDsKLQlpbnQJCQlydW5fcXVldWUgPSAwOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwotCi0JREJGRU5URVI7CisJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CisJaW50IHJ1bl9xdWV1ZSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogcmV0cnk6CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CkBAIC0zNzg4LDkgKzMzNDgsOCBAQAogCSAqIGF0IGFueSBvbmUgdGltZSwgYW5kIHRoaXMgaXMgdGhlIENUTFggdGhhdCB0aGUKIAkgKiB0aW1lcnMgYXJlIHdhaXRpbmcgZm9yLgogCSAqLwotCWlmICggbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgKSB7CisJaWYgKGxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpKQogCQlnb3RvIHVubG9jazsKLQl9CiAKIAkvKiBSZW1vdmUgdGhlICJyZXNwb25zZSB0aW1lb3V0Ii4gSXQncyBwb3NzaWJsZSB0aGF0CiAJICogd2UgYXJlIGFscmVhZHkgdG9vIGxhdGUsIGFuZCB0aGF0IHRoZSB0aW1lb3V0IGlzCkBAIC0zODAzLDggKzMzNjIsNyBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CiAJfQogCkBAIC0zODE5LDE1ICszMzc3LDE2IEBACiAJCWlmICh1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhodywgY3RseCkgPT0gMCkKIAkJCXJ1bl9xdWV1ZSA9IDE7CiAJfSBlbHNlIHsKLQkJY29uc3QgdTE2IGludHlwZSA9ICh1c2Jpbi0+dHlwZSZ+aG9zdDJoZmEzODR4XzE2KDB4ODAwMCkpOworCQljb25zdCB1MTYgaW50eXBlID0gKHVzYmluLT50eXBlICYgfmNwdV90b19sZTE2KDB4ODAwMCkpOwogCiAJCS8qCiAJCSAqIENoZWNrIHRoYXQgb3VyIG1lc3NhZ2UgaXMgd2hhdCB3ZSdyZSBleHBlY3RpbmcgLi4uCiAJCSAqLwogCQlpZiAoY3RseC0+b3V0YnVmLnR5cGUgIT0gaW50eXBlKSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCJFeHBlY3RlZCBJTlslZF0sIHJlY2VpdmVkIElOWyVkXSAtIGlnbm9yZWQuXG4iLAotCQkJICAgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoY3RseC0+b3V0YnVmLnR5cGUpLAotCQkJICAgICAgICAgICAgICAgICBoZmEzODR4Mmhvc3RfMTYoaW50eXBlKSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIkV4cGVjdGVkIElOWyVkXSwgcmVjZWl2ZWQgSU5bJWRdIC0gaWdub3JlZC5cbiIsCisJCQkgICAgICAgbGUxNl90b19jcHUoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkJICAgICAgIGxlMTZfdG9fY3B1KGludHlwZSkpOwogCQkJZ290byB1bmxvY2s7CiAJCX0KIApAQCAtMzg0MSw3ICszNDAwLDggQEAKIAkJCSAqIG91ciByZXF1ZXN0IGhhcyBiZWVuIGFja25vd2xlZGdlZC4gT2RkLAogCQkJICogYnV0IG91ciBPVVQgVVJCIGlzIHN0aWxsIGFsaXZlLi4uCiAJCQkgKi8KLQkJCVdMQU5fTE9HX0RFQlVHKDAsICJDYXVzYWxpdHkgdmlvbGF0aW9uOiBwbGVhc2UgcmVib290IFVuaXZlcnNlLCBvciBlbWFpbCBsaW51eC13bGFuLWRldmVsQGxpc3RzLmxpbnV4LXdsYW4uY29tXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIkNhdXNhbGl0eSB2aW9sYXRpb246IHBsZWFzZSByZWJvb3QgVW5pdmVyc2UsIG9yIGVtYWlsIGxpbnV4LXdsYW4tZGV2ZWxAbGlzdHMubGludXgtd2xhbi5jb21cbiIpOwogCQkJY3RseC0+c3RhdGUgPSBDVExYX1JFU1BfQ09NUExFVEU7CiAJCQlicmVhazsKIApAQCAtMzg2MCwxNCArMzQyMCwxNSBAQAogCQkJLyoKIAkJCSAqIFRocm93IHRoaXMgQ1RMWCBhd2F5IC4uLgogCQkJICovCi0JCQlXTEFOX0xPR19FUlJPUigiTWF0Y2hlZCBJTiBVUkIsIENUTFhbJWRdIGluIGludmFsaWQgc3RhdGUoJXMpLiIKLQkJCSAgICAgICAgICAgICAgICIgRGlzY2FyZGVkLlxuIiwKLQkJCSAgICAgICAgICAgICAgIGhmYTM4NHgyaG9zdF8xNihjdGx4LT5vdXRidWYudHlwZSksCi0JCQkgICAgICAgICAgICAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSk7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiTWF0Y2hlZCBJTiBVUkIsIENUTFhbJWRdIGluIGludmFsaWQgc3RhdGUoJXMpLiIKKwkJCSAgICAgICAiIERpc2NhcmRlZC5cbiIsCisJCQkgICAgICAgbGUxNl90b19jcHUoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkJICAgICAgIGN0bHhzdHIoY3RseC0+c3RhdGUpKTsKIAkJCWlmICh1bmxvY2tlZF91c2JjdGx4X2NhbmNlbF9hc3luYyhodywgY3RseCkgPT0gMCkKIAkJCQlydW5fcXVldWUgPSAxOwogCQkJYnJlYWs7Ci0JCX0gLyogc3dpdGNoICovCisJCX0JCS8qIHN3aXRjaCAqLwogCX0KIAogdW5sb2NrOgpAQCAtMzg3NSwxMSArMzQzNiw4IEBACiAKIAlpZiAocnVuX3F1ZXVlKQogCQloZmEzODR4X3VzYmN0bHhxX3J1bihodyk7Ci0KLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmluX3R4Y29tcGwKICoKQEAgLTM4OTcsMjUgKzM0NTUsMjAgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl90eGNvbXBsKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jpbl90ICp1c2JpbikKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5fdHhjb21wbCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICBoZmEzODR4X3VzYmluX3QgKnVzYmluKQogewotCXUxNgkJCXN0YXR1czsKLQlEQkZFTlRFUjsKKwl1MTYgc3RhdHVzOwogCi0Jc3RhdHVzID0gaGZhMzg0eDJob3N0XzE2KHVzYmluLT50eXBlKTsgLyogeWVhaCBJIGtub3cgaXQgc2F5cyB0eXBlLi4uKi8KKwlzdGF0dXMgPSBsZTE2X3RvX2NwdSh1c2Jpbi0+dHlwZSk7CS8qIHllYWggSSBrbm93IGl0IHNheXMgdHlwZS4uLiAqLwogCiAJLyogV2FzIHRoZXJlIGFuIGVycm9yPyAqLwotCWlmIChIRkEzODR4X1RYU1RBVFVTX0lTRVJST1Ioc3RhdHVzKSkgeworCWlmIChIRkEzODR4X1RYU1RBVFVTX0lTRVJST1Ioc3RhdHVzKSkKIAkJcHJpc20yc3RhX2V2X3R4ZXhjKHdsYW5kZXYsIHN0YXR1cyk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXByaXNtMnN0YV9ldl90eCh3bGFuZGV2LCBzdGF0dXMpOwotCX0KLQkvLyBwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldik7Ci0KLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmluX3J4CiAqCkBAIC0zOTM1LDM0ICszNDg4LDI5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5fcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWhmYTM4NHhfdXNiaW5fdCAgICAgICAgICp1c2JpbiA9IChoZmEzODR4X3VzYmluX3QgKikgc2tiLT5kYXRhOwotCWhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IHdsYW5kZXYtPnByaXY7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgaGRybGVuOwotCXA4MDIxMV9yeG1ldGFfdCAgICAgICAgICpyeG1ldGE7Ci0JdTE2ICAgICAgICAgICAgICAgICAgZGF0YV9sZW47Ci0JdTE2ICAgICAgICAgICAgICAgICAgZmM7Ci0KLQlEQkZFTlRFUjsKKwloZmEzODR4X3VzYmluX3QgKnVzYmluID0gKGhmYTM4NHhfdXNiaW5fdCAqKSBza2ItPmRhdGE7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50IGhkcmxlbjsKKwlwODAyMTFfcnhtZXRhX3QgKnJ4bWV0YTsKKwl1MTYgZGF0YV9sZW47CisJdTE2IGZjOwogCiAJLyogQnl0ZSBvcmRlciBjb252ZXJ0IG9uY2UgdXAgZnJvbnQuICovCi0JdXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzID0KLQkJaGZhMzg0eDJob3N0XzE2KHVzYmluLT5yeGZybS5kZXNjLnN0YXR1cyk7Ci0JdXNiaW4tPnJ4ZnJtLmRlc2MudGltZSA9Ci0JCWhmYTM4NHgyaG9zdF8zMih1c2Jpbi0+cnhmcm0uZGVzYy50aW1lKTsKKwl1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMgPSBsZTE2X3RvX2NwdSh1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpOworCXVzYmluLT5yeGZybS5kZXNjLnRpbWUgPSBsZTMyX3RvX2NwdSh1c2Jpbi0+cnhmcm0uZGVzYy50aW1lKTsKIAogCS8qIE5vdyBoYW5kbGUgZnJhbWUgYmFzZWQgb24gcG9ydCMgKi8KLQlzd2l0Y2goIEhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSApCi0JeworCXN3aXRjaCAoSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpKSB7CiAJY2FzZSAwOgotCQlmYyA9IGllZWUyaG9zdDE2KHVzYmluLT5yeGZybS5kZXNjLmZyYW1lX2NvbnRyb2wpOworCQlmYyA9IGxlMTZfdG9fY3B1KHVzYmluLT5yeGZybS5kZXNjLmZyYW1lX2NvbnRyb2wpOwogCiAJCS8qIElmIGV4Y2x1ZGUgYW5kIHdlIHJlY2VpdmUgYW4gdW5lbmNyeXB0ZWQsIGRyb3AgaXQgKi8KLQkJaWYgKCAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEKSAmJgotCQkgICAgICFXTEFOX0dFVF9GQ19JU1dFUChmYykpeworCQlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkgJiYKKwkJICAgICFXTEFOX0dFVF9GQ19JU1dFUChmYykpIHsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCi0JCWRhdGFfbGVuID0gaGZhMzg0eDJob3N0XzE2KHVzYmluLT5yeGZybS5kZXNjLmRhdGFfbGVuKTsKKwkJZGF0YV9sZW4gPSBsZTE2X3RvX2NwdSh1c2Jpbi0+cnhmcm0uZGVzYy5kYXRhX2xlbik7CiAKIAkJLyogSG93IG11Y2ggaGVhZGVyIGRhdGEgZG8gd2UgaGF2ZT8gKi8KIAkJaGRybGVuID0gcDgwMjExX2hlYWRlcmxlbihmYyk7CkBAIC0zOTc0LDggKzM1MjIsNyBAQAogCQkgKiB3aXRoIGFuICJvdmVybGFwcGluZyIgY29weQogCQkgKi8KIAkJbWVtbW92ZShza2JfcHVzaChza2IsIGhkcmxlbiksCi0JCSAgICAgICAgJnVzYmluLT5yeGZybS5kZXNjLmZyYW1lX2NvbnRyb2wsCi0JCSAgICAgICAgaGRybGVuKTsKKwkJCSZ1c2Jpbi0+cnhmcm0uZGVzYy5mcmFtZV9jb250cm9sLCBoZHJsZW4pOwogCiAJCXNrYi0+ZGV2ID0gd2xhbmRldi0+bmV0ZGV2OwogCQlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CkBAIC00MDAxLDI0ICszNTQ4LDI0IEBACiAJCWJyZWFrOwogCiAJY2FzZSA3OgotCQlpZiAoICEgSEZBMzg0eF9SWFNUQVRVU19JU0ZDU0VSUih1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpICkgeworCQlpZiAoIUhGQTM4NHhfUlhTVEFUVVNfSVNGQ1NFUlIodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSkgewogCQkJLyogQ29weSB0byB3bGFuc25pZiBza2IgKi8KLQkJCWhmYTM4NHhfaW50X3J4bW9uaXRvciggd2xhbmRldiwgJnVzYmluLT5yeGZybSk7CisJCQloZmEzODR4X2ludF9yeG1vbml0b3Iod2xhbmRldiwgJnVzYmluLT5yeGZybSk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCX0gZWxzZSB7Ci0JCQlXTEFOX0xPR19ERUJVRygzLCJSZWNlaXZlZCBtb25pdG9yIGZyYW1lOiBGQ1NlcnIgc2V0XG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIlJlY2VpdmVkIG1vbml0b3IgZnJhbWU6IEZDU2VyciBzZXRcbiIpOwogCQl9CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJV0xBTl9MT0dfV0FSTklORygiUmVjZWl2ZWQgZnJhbWUgb24gdW5zdXBwb3J0ZWQgcG9ydD0lZFxuIiwKLQkJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodXNiaW4tPnJ4ZnJtLmRlc2Muc3RhdHVzKSApOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSZWNlaXZlZCBmcmFtZSBvbiB1bnN1cHBvcnRlZCBwb3J0PSVkXG4iLAorCQkgICAgICAgSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUX0dFVCh1c2Jpbi0+cnhmcm0uZGVzYy5zdGF0dXMpKTsKIAkJZ290byBkb25lOwogCQlicmVhazsKIAl9CiAKIGRvbmU6Ci0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKQEAgLTQwNDMsOTcgKzM1OTAsOTMgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfcnhtb25pdG9yKCB3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNiX3J4ZnJtX3QgKnJ4ZnJtKQorc3RhdGljIHZvaWQgaGZhMzg0eF9pbnRfcnhtb25pdG9yKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgIGhmYTM4NHhfdXNiX3J4ZnJtX3QgKnJ4ZnJtKQogewotCWhmYTM4NHhfcnhfZnJhbWVfdCAgICAgICAgICAgICAgKnJ4ZGVzYyA9ICYocnhmcm0tPmRlc2MpOwotCXVuc2lnbmVkIGludAkJCQloZHJsZW4gPSAwOwotCXVuc2lnbmVkIGludAkJCQlkYXRhbGVuID0gMDsKLQl1bnNpZ25lZCBpbnQJCQkJc2tibGVuID0gMDsKLQl1OAkJCQkqZGF0YXA7Ci0JdTE2CQkJCWZjOwotCXN0cnVjdCBza19idWZmCQkJKnNrYjsKLQloZmEzODR4X3QJCSAgICAgICAgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwloZmEzODR4X3J4X2ZyYW1lX3QgKnJ4ZGVzYyA9ICYocnhmcm0tPmRlc2MpOworCXVuc2lnbmVkIGludCBoZHJsZW4gPSAwOworCXVuc2lnbmVkIGludCBkYXRhbGVuID0gMDsKKwl1bnNpZ25lZCBpbnQgc2tibGVuID0gMDsKKwl1OCAqZGF0YXA7CisJdTE2IGZjOworCXN0cnVjdCBza19idWZmICpza2I7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CiAKLQotCURCRkVOVEVSOwogCS8qIERvbid0IGZvcmdldCB0aGUgc3RhdHVzLCB0aW1lLCBhbmQgZGF0YV9sZW4gZmllbGRzIGFyZSBpbiBob3N0IG9yZGVyICovCiAJLyogRmlndXJlIG91dCBob3cgYmlnIHRoZSBmcmFtZSBpcyAqLwotCWZjID0gaWVlZTJob3N0MTYocnhkZXNjLT5mcmFtZV9jb250cm9sKTsKKwlmYyA9IGxlMTZfdG9fY3B1KHJ4ZGVzYy0+ZnJhbWVfY29udHJvbCk7CiAJaGRybGVuID0gcDgwMjExX2hlYWRlcmxlbihmYyk7Ci0JZGF0YWxlbiA9IGhmYTM4NHgyaG9zdF8xNihyeGRlc2MtPmRhdGFfbGVuKTsKKwlkYXRhbGVuID0gbGUxNl90b19jcHUocnhkZXNjLT5kYXRhX2xlbik7CiAKIAkvKiBBbGxvY2F0ZSBhbiBpbmQgbWVzc2FnZStmcmFtZXNpemUgc2tiICovCi0Jc2tibGVuID0gc2l6ZW9mKHA4MDIxMV9jYXBoZHJfdCkgKwotCQloZHJsZW4gKyBkYXRhbGVuICsgV0xBTl9DUkNfTEVOOworCXNrYmxlbiA9IHNpemVvZihwODAyMTFfY2FwaGRyX3QpICsgaGRybGVuICsgZGF0YWxlbiArIFdMQU5fQ1JDX0xFTjsKIAogCS8qIHNhbml0eSBjaGVjayB0aGUgbGVuZ3RoICovCi0JaWYgKCBza2JsZW4gPgotCSAgICAgKHNpemVvZihwODAyMTFfY2FwaGRyX3QpICsKLQkgICAgICBXTEFOX0hEUl9BNF9MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKSApIHsKLQkJV0xBTl9MT0dfREVCVUcoMSwgIm92ZXJsZW4gZnJtOiBsZW49JXpkXG4iLAotCQkJICAgICAgIHNrYmxlbiAtIHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKKwlpZiAoc2tibGVuID4KKwkgICAgKHNpemVvZihwODAyMTFfY2FwaGRyX3QpICsKKwkgICAgIFdMQU5fSERSX0E0X0xFTiArIFdMQU5fREFUQV9NQVhMRU4gKyBXTEFOX0NSQ19MRU4pKSB7CisJCXByX2RlYnVnKCJvdmVybGVuIGZybTogbGVuPSV6ZFxuIiwKKwkJICAgICAgIHNrYmxlbiAtIHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKIAl9CiAKLQlpZiAoIChza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYmxlbikpID09IE5VTEwgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJhbGxvY19za2IgZmFpbGVkIHRyeWluZyB0byBhbGxvY2F0ZSAlZCBieXRlc1xuIiwgc2tibGVuKTsKKwlpZiAoKHNrYiA9IGRldl9hbGxvY19za2Ioc2tibGVuKSkgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJhbGxvY19za2IgZmFpbGVkIHRyeWluZyB0byBhbGxvY2F0ZSAlZCBieXRlc1xuIiwKKwkJICAgICAgIHNrYmxlbik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBvbmx5IHByZXBlbmQgdGhlIHByaXNtIGhlYWRlciBpZiBpbiB0aGUgcmlnaHQgbW9kZSAqLwogCWlmICgod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9JRUVFODAyMTFfUFJJU00pICYmCiAJICAgIChody0+c25pZmZoZHIgIT0gMCkpIHsKLQkJcDgwMjExX2NhcGhkcl90CQkqY2FwaGRyOworCQlwODAyMTFfY2FwaGRyX3QgKmNhcGhkcjsKIAkJLyogVGhlIE5FVyBoZWFkZXIgZm9ybWF0ISAqLwogCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBzaXplb2YocDgwMjExX2NhcGhkcl90KSk7Ci0JCWNhcGhkciA9IChwODAyMTFfY2FwaGRyX3QqKSBkYXRhcDsKKwkJY2FwaGRyID0gKHA4MDIxMV9jYXBoZHJfdCAqKSBkYXRhcDsKIAotCQljYXBoZHItPnZlcnNpb24gPQlodG9ubChQODAyMTFDQVBUVVJFX1ZFUlNJT04pOwotCQljYXBoZHItPmxlbmd0aCA9CWh0b25sKHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKLQkJY2FwaGRyLT5tYWN0aW1lID0JX19jcHVfdG9fYmU2NChyeGRlc2MtPnRpbWUpICogMTAwMDsKLQkJY2FwaGRyLT5ob3N0dGltZSA9CV9fY3B1X3RvX2JlNjQoamlmZmllcyk7Ci0JCWNhcGhkci0+cGh5dHlwZSA9CWh0b25sKDQpOyAvKiBkc3NfZG90MTFfYiAqLwotCQljYXBoZHItPmNoYW5uZWwgPQlodG9ubChody0+c25pZmZfY2hhbm5lbCk7Ci0JCWNhcGhkci0+ZGF0YXJhdGUgPQlodG9ubChyeGRlc2MtPnJhdGUpOwotCQljYXBoZHItPmFudGVubmEgPQlodG9ubCgwKTsgLyogdW5rbm93biAqLwotCQljYXBoZHItPnByaW9yaXR5ID0JaHRvbmwoMCk7IC8qIHVua25vd24gKi8KLQkJY2FwaGRyLT5zc2lfdHlwZSA9CWh0b25sKDMpOyAvKiByc3NpX3JhdyAqLwotCQljYXBoZHItPnNzaV9zaWduYWwgPQlodG9ubChyeGRlc2MtPnNpZ25hbCk7Ci0JCWNhcGhkci0+c3NpX25vaXNlID0JaHRvbmwocnhkZXNjLT5zaWxlbmNlKTsKLQkJY2FwaGRyLT5wcmVhbWJsZSA9CWh0b25sKDApOyAvKiB1bmtub3duICovCi0JCWNhcGhkci0+ZW5jb2RpbmcgPQlodG9ubCgxKTsgLyogY2NrICovCisJCWNhcGhkci0+dmVyc2lvbiA9IGh0b25sKFA4MDIxMUNBUFRVUkVfVkVSU0lPTik7CisJCWNhcGhkci0+bGVuZ3RoID0gaHRvbmwoc2l6ZW9mKHA4MDIxMV9jYXBoZHJfdCkpOworCQljYXBoZHItPm1hY3RpbWUgPSBfX2NwdV90b19iZTY0KHJ4ZGVzYy0+dGltZSkgKiAxMDAwOworCQljYXBoZHItPmhvc3R0aW1lID0gX19jcHVfdG9fYmU2NChqaWZmaWVzKTsKKwkJY2FwaGRyLT5waHl0eXBlID0gaHRvbmwoNCk7CS8qIGRzc19kb3QxMV9iICovCisJCWNhcGhkci0+Y2hhbm5lbCA9IGh0b25sKGh3LT5zbmlmZl9jaGFubmVsKTsKKwkJY2FwaGRyLT5kYXRhcmF0ZSA9IGh0b25sKHJ4ZGVzYy0+cmF0ZSk7CisJCWNhcGhkci0+YW50ZW5uYSA9IGh0b25sKDApOwkvKiB1bmtub3duICovCisJCWNhcGhkci0+cHJpb3JpdHkgPSBodG9ubCgwKTsJLyogdW5rbm93biAqLworCQljYXBoZHItPnNzaV90eXBlID0gaHRvbmwoMyk7CS8qIHJzc2lfcmF3ICovCisJCWNhcGhkci0+c3NpX3NpZ25hbCA9IGh0b25sKHJ4ZGVzYy0+c2lnbmFsKTsKKwkJY2FwaGRyLT5zc2lfbm9pc2UgPSBodG9ubChyeGRlc2MtPnNpbGVuY2UpOworCQljYXBoZHItPnByZWFtYmxlID0gaHRvbmwoMCk7CS8qIHVua25vd24gKi8KKwkJY2FwaGRyLT5lbmNvZGluZyA9IGh0b25sKDEpOwkvKiBjY2sgKi8KIAl9CiAKIAkvKiBDb3B5IHRoZSA4MDIuMTEgaGVhZGVyIHRvIHRoZSBza2IgKGN0bCBmcmFtZXMgbWF5IGJlIGxlc3MgdGhhbiBhIGZ1bGwgaGVhZGVyKSAqLwogCWRhdGFwID0gc2tiX3B1dChza2IsIGhkcmxlbik7Ci0JbWVtY3B5KCBkYXRhcCwgJihyeGRlc2MtPmZyYW1lX2NvbnRyb2wpLCBoZHJsZW4pOworCW1lbWNweShkYXRhcCwgJihyeGRlc2MtPmZyYW1lX2NvbnRyb2wpLCBoZHJsZW4pOwogCiAJLyogSWYgYW55LCBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGNhcmQgdG8gdGhlIHNrYiAqLwotCWlmICggZGF0YWxlbiA+IDAgKQotCXsKKwlpZiAoZGF0YWxlbiA+IDApIHsKIAkJZGF0YXAgPSBza2JfcHV0KHNrYiwgZGF0YWxlbik7CiAJCW1lbWNweShkYXRhcCwgcnhmcm0tPmRhdGEsIGRhdGFsZW4pOwogCiAJCS8qIGNoZWNrIGZvciB1bmVuY3J5cHRlZCBzdHVmZiBpZiBXRVAgYml0IHNldC4gKi8KLQkJaWYgKCooZGF0YXAgLSBoZHJsZW4gKyAxKSAmIDB4NDApIC8vIHdlcCBzZXQKLQkJICBpZiAoKCooZGF0YXApID09IDB4YWEpICYmICgqKGRhdGFwKzEpID09IDB4YWEpKQotCQkgICAgKihkYXRhcCAtIGhkcmxlbiArIDEpICY9IDB4YmY7IC8vIGNsZWFyIHdlcDsgaXQncyB0aGUgODAyLjIgaGVhZGVyIQorCQlpZiAoKihkYXRhcCAtIGhkcmxlbiArIDEpICYgMHg0MCkJLyogd2VwIHNldCAqLworCQkJaWYgKCgqKGRhdGFwKSA9PSAweGFhKSAmJiAoKihkYXRhcCArIDEpID09IDB4YWEpKQorCQkJCSooZGF0YXAgLSBoZHJsZW4gKyAxKSAmPSAweGJmOwkvLyBjbGVhciB3ZXA7IGl0J3MgdGhlIDgwMi4yIGhlYWRlciEKIAl9CiAKIAlpZiAoaHctPnNuaWZmX2ZjcykgewogCQkvKiBTZXQgdGhlIEZDUyAqLwogCQlkYXRhcCA9IHNrYl9wdXQoc2tiLCBXTEFOX0NSQ19MRU4pOwotCQltZW1zZXQoIGRhdGFwLCAweGZmLCBXTEFOX0NSQ19MRU4pOworCQltZW1zZXQoZGF0YXAsIDB4ZmYsIFdMQU5fQ1JDX0xFTik7CiAJfQogCiAJLyogcGFzcyBpdCBiYWNrIHVwICovCiAJcHJpc20yc3RhX2V2X3J4KHdsYW5kZXYsIHNrYik7CiAKLQlEQkZFWElUOwogCXJldHVybjsKIH0KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmluX2luZm8KICoKQEAgLTQxNTEsMTggKzM2OTQsMTMgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgaGZhMzg0eF91c2Jpbl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF91c2Jpbl90ICp1c2JpbikKK3N0YXRpYyB2b2lkIGhmYTM4NHhfdXNiaW5faW5mbyh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCBoZmEzODR4X3VzYmluX3QgKiB1c2JpbikKIHsKLQlEQkZFTlRFUjsKLQotCXVzYmluLT5pbmZvZnJtLmluZm8uZnJhbWVsZW4gPSBoZmEzODR4Mmhvc3RfMTYodXNiaW4tPmluZm9mcm0uaW5mby5mcmFtZWxlbik7CisJdXNiaW4tPmluZm9mcm0uaW5mby5mcmFtZWxlbiA9CisJICAgIGxlMTZfdG9fY3B1KHVzYmluLT5pbmZvZnJtLmluZm8uZnJhbWVsZW4pOwogCXByaXNtMnN0YV9ldl9pbmZvKHdsYW5kZXYsICZ1c2Jpbi0+aW5mb2ZybS5pbmZvKTsKLQotCURCRkVYSVQ7CiB9CiAKLQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF91c2JvdXRfY2FsbGJhY2sKICoKQEAgLTQxODEsNDggKzM3MTksNDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHZvaWQgaGZhMzg0eF91c2JvdXRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewotCXdsYW5kZXZpY2VfdAkJKndsYW5kZXYgPSB1cmItPmNvbnRleHQ7Ci0JaGZhMzg0eF91c2JvdXRfdAkqdXNib3V0ID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JREJGRU5URVI7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gdXJiLT5jb250ZXh0OworCWhmYTM4NHhfdXNib3V0X3QgKnVzYm91dCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCiAjaWZkZWYgREVCVUdfVVNCCiAJZGJwcmludF91cmIodXJiKTsKICNlbmRpZgogCi0JaWYgKCB3bGFuZGV2ICYmCi0JICAgICB3bGFuZGV2LT5uZXRkZXYgKSB7CisJaWYgKHdsYW5kZXYgJiYgd2xhbmRldi0+bmV0ZGV2KSB7CiAKLQkJc3dpdGNoKHVyYi0+c3RhdHVzKSB7CisJCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAkJY2FzZSAwOgogCQkJaGZhMzg0eF91c2JvdXRfdHgod2xhbmRldiwgdXNib3V0KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgLUVQSVBFOgotCQl7Ci0JCQloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKLQkJCVdMQU5fTE9HX1dBUk5JTkcoIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKLQkJCSAgICAgICAgICAgICAgICAgd2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKLQkJCWlmICggIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgKQotCQkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7Ci0JCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy50eF9lcnJvcnMpOwotCQkJYnJlYWs7Ci0JCX0KKwkJCXsKKwkJCQloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCisJCQkJICAgICAgIHdsYW5kZXYtPm5ldGRldi0+bmFtZSk7CisJCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0CisJCQkJICAgIChXT1JLX1RYX0hBTFQsICZody0+dXNiX2ZsYWdzKSkKKwkJCQkJc2NoZWR1bGVfd29yaygmaHctPnVzYl93b3JrKTsKKwkJCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy50eF9lcnJvcnMpOworCQkJCWJyZWFrOworCQkJfQogCiAJCWNhc2UgLUVQUk9UTzoKIAkJY2FzZSAtRVRJTUVET1VUOgogCQljYXNlIC1FSUxTRVE6Ci0JCXsKLQkJCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCQkJeworCQkJCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OwogCi0JCQlpZiAoICF0ZXN0X2FuZF9zZXRfYml0KFRIUk9UVExFX1RYLCAmaHctPnVzYl9mbGFncykKLQkJCSAgICAgJiYgIXRpbWVyX3BlbmRpbmcoJmh3LT50aHJvdHRsZSkgKSB7Ci0JCQkJbW9kX3RpbWVyKCZody0+dGhyb3R0bGUsCi0JCQkJICAgICAgICAgIGppZmZpZXMgKyBUSFJPVFRMRV9KSUZGSUVTKTsKKwkJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQKKwkJCQkgICAgKFRIUk9UVExFX1RYLCAmaHctPnVzYl9mbGFncykKKwkJCQkgICAgJiYgIXRpbWVyX3BlbmRpbmcoJmh3LT50aHJvdHRsZSkpIHsKKwkJCQkJbW9kX3RpbWVyKCZody0+dGhyb3R0bGUsCisJCQkJCQkgIGppZmZpZXMgKyBUSFJPVFRMRV9KSUZGSUVTKTsKKwkJCQl9CisJCQkJKysod2xhbmRldi0+bGludXhfc3RhdHMudHhfZXJyb3JzKTsKKwkJCQluZXRpZl9zdG9wX3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQkrKyh3bGFuZGV2LT5saW51eF9zdGF0cy50eF9lcnJvcnMpOwotCQkJbmV0aWZfc3RvcF9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOwotCQkJYnJlYWs7Ci0JCX0KIAogCQljYXNlIC1FTk9FTlQ6CiAJCWNhc2UgLUVTSFVURE9XTjoKQEAgLTQyMzAsMTYgKzM3NjksMTQgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlXTEFOX0xPR19JTkZPKCJ1bmtub3duIHVyYi0+c3RhdHVzPSVkXG4iLCB1cmItPnN0YXR1cyk7CisJCQlwcmludGsoS0VSTl9JTkZPICJ1bmtub3duIHVyYi0+c3RhdHVzPSVkXG4iLAorCQkJICAgICAgIHVyYi0+c3RhdHVzKTsKIAkJCSsrKHdsYW5kZXYtPmxpbnV4X3N0YXRzLnR4X2Vycm9ycyk7CiAJCQlicmVhazsKLQkJfSAvKiBzd2l0Y2ggKi8KKwkJfQkJLyogc3dpdGNoICovCiAJfQotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF9jdGx4b3V0X2NhbGxiYWNrCiAqCkBAIC00MjU4LDIyICszNzk1LDE5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIGhmYTM4NHhfY3RseG91dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0JaGZhMzg0eF90CSpodyA9IHVyYi0+Y29udGV4dDsKLQlpbnQgICAgICAgICAgICAgZGVsZXRlX3Jlc3B0aW1lciA9IDA7Ci0JaW50ICAgICAgICAgICAgIHRpbWVyX29rID0gMTsKLQlpbnQJCXJ1bl9xdWV1ZSA9IDA7Ci0JaGZhMzg0eF91c2JjdGx4X3QJKmN0bHg7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKKwloZmEzODR4X3QgKmh3ID0gdXJiLT5jb250ZXh0OworCWludCBkZWxldGVfcmVzcHRpbWVyID0gMDsKKwlpbnQgdGltZXJfb2sgPSAxOworCWludCBydW5fcXVldWUgPSAwOworCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlEQkZFTlRFUjsKLQotCVdMQU5fTE9HX0RFQlVHKDMsInVyYi0+c3RhdHVzPSVkXG4iLCB1cmItPnN0YXR1cyk7CisJcHJfZGVidWcoInVyYi0+c3RhdHVzPSVkXG4iLCB1cmItPnN0YXR1cyk7CiAjaWZkZWYgREVCVUdfVVNCCiAJZGJwcmludF91cmIodXJiKTsKICNlbmRpZgotCWlmICggKHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pIHx8Ci0JICAgICAodXJiLT5zdGF0dXMgPT0gLUVOT0RFVikgfHwKLQkgICAgIChodyA9PSBOVUxMKSApCisJaWYgKCh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKSB8fAorCSAgICAodXJiLT5zdGF0dXMgPT0gLUVOT0RFVikgfHwgKGh3ID09IE5VTEwpKQogCQlnb3RvIGRvbmU7CiAKIHJldHJ5OgpAQCAtNDI4NSw3ICszODE5LDcgQEAKIAkgKiByZWx5IG9uIHRoZSBkaXNjb25uZWN0IGZ1bmN0aW9uIHRvIGNsZWFuIGV2ZXJ5dGhpbmcKIAkgKiB1cCBpZiBzb21lb25lIHVucGx1Z2dlZCB0aGUgYWRhcHRlci4KIAkgKi8KLQlpZiAoIGxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpICkgeworCWlmIChsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtNDMwNCwxNiArMzgzOCwxNSBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KLQl9Ci0JZWxzZSB7CisJfSBlbHNlIHsKIAkJaHctPnJlcV90aW1lcl9kb25lID0gMTsKIAl9CiAKIAljdGx4ID0gZ2V0X2FjdGl2ZV9jdGx4KGh3KTsKIAotCWlmICggdXJiLT5zdGF0dXMgPT0gMCApIHsKKwlpZiAodXJiLT5zdGF0dXMgPT0gMCkgewogCQkvKiBSZXF1ZXN0IHBvcnRpb24gb2YgYSBDVExYIGlzIHN1Y2Nlc3NmdWwgKi8KLQkJc3dpdGNoICggY3RseC0+c3RhdGUgKSB7CisJCXN3aXRjaCAoY3RseC0+c3RhdGUpIHsKIAkJY2FzZSBDVExYX1JFUV9TVUJNSVRURUQ6CiAJCQkvKiBUaGlzIE9VVC1BQ0sgcmVjZWl2ZWQgYmVmb3JlIElOICovCiAJCQljdGx4LT5zdGF0ZSA9IENUTFhfUkVRX0NPTVBMRVRFOwpAQCAtNDMzMCwxOCArMzg2MywxOSBAQAogCiAJCWRlZmF1bHQ6CiAJCQkvKiBUaGlzIGlzIE5PVCBhIHZhbGlkIENUTFggInN1Y2Nlc3MiIHN0YXRlISAqLwotCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkgICAgIklsbGVnYWwgQ1RMWFslZF0gc3VjY2VzcyBzdGF0ZSglcywgJWQpIGluIE9VVCBVUkJcbiIsCi0JCQkgICAgaGZhMzg0eDJob3N0XzE2KGN0bHgtPm91dGJ1Zi50eXBlKSwKLQkJCSAgICBjdGx4c3RyKGN0bHgtPnN0YXRlKSwgdXJiLT5zdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIklsbGVnYWwgQ1RMWFslZF0gc3VjY2VzcyBzdGF0ZSglcywgJWQpIGluIE9VVCBVUkJcbiIsCisJCQkgICAgICAgbGUxNl90b19jcHUoY3RseC0+b3V0YnVmLnR5cGUpLAorCQkJICAgICAgIGN0bHhzdHIoY3RseC0+c3RhdGUpLCB1cmItPnN0YXR1cyk7CiAJCQlicmVhazsKLQkJfSAvKiBzd2l0Y2ggKi8KKwkJfQkJLyogc3dpdGNoICovCiAJfSBlbHNlIHsKIAkJLyogSWYgdGhlIHBpcGUgaGFzIHN0YWxsZWQgdGhlbiB3ZSBuZWVkIHRvIHJlc2V0IGl0ICovCi0JCWlmICggKHVyYi0+c3RhdHVzID09IC1FUElQRSkgJiYKLQkJICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9IQUxULCAmaHctPnVzYl9mbGFncykgKSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCIlcyB0eCBwaXBlIHN0YWxsZWQ6IHJlcXVlc3RpbmcgcmVzZXRcbiIsCi0JCQkgICAgICAgICAgICAgICAgIGh3LT53bGFuZGV2LT5uZXRkZXYtPm5hbWUpOworCQlpZiAoKHVyYi0+c3RhdHVzID09IC1FUElQRSkgJiYKKwkJICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfVFhfSEFMVCwgJmh3LT51c2JfZmxhZ3MpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgIiVzIHR4IHBpcGUgc3RhbGxlZDogcmVxdWVzdGluZyByZXNldFxuIiwKKwkJCSAgICAgICBody0+d2xhbmRldi0+bmV0ZGV2LT5uYW1lKTsKIAkJCXNjaGVkdWxlX3dvcmsoJmh3LT51c2Jfd29yayk7CiAJCX0KIApAQCAtNDM1NCw3ICszODg4LDcgQEAKIAkJcnVuX3F1ZXVlID0gMTsKIAl9CiAKLSBkZWxyZXNwOgorZGVscmVzcDoKIAlpZiAoZGVsZXRlX3Jlc3B0aW1lcikgewogCQlpZiAoKHRpbWVyX29rID0gZGVsX3RpbWVyKCZody0+cmVzcHRpbWVyKSkgIT0gMCkgewogCQkJaHctPnJlc3BfdGltZXJfZG9uZSA9IDE7CkBAIC00MzYzLDcgKzM4OTcsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAotCWlmICggIXRpbWVyX29rICYmIChody0+cmVzcF90aW1lcl9kb25lID09IDApICkgeworCWlmICghdGltZXJfb2sgJiYgKGh3LT5yZXNwX3RpbWVyX2RvbmUgPT0gMCkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAJCWdvdG8gZGVscmVzcDsKIAl9CkBAIC00MzcxLDExICszOTA1LDEwIEBACiAJaWYgKHJ1bl9xdWV1ZSkKIAkJaGZhMzg0eF91c2JjdGx4cV9ydW4oaHcpOwogCi0gZG9uZToKLQlEQkZFWElUOworZG9uZToKKwk7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIGhmYTM4NHhfdXNiY3RseF9yZXF0aW1lcmZuCiAqCkBAIC00Mzk0LDEyICszOTI3LDEwIEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkCi1oZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfcmVxdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0JaGZhMzg0eF90CSpodyA9IChoZmEzODR4X3QqKWRhdGE7Ci0JdW5zaWduZWQgbG9uZyAgIGZsYWdzOwotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCkBAIC00NDA4LDE1ICszOTM5LDEzIEBACiAJLyogUmVtb3ZpbmcgdGhlIGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgZW1wdGllcwogCSAqIHRoZSBhY3RpdmUgbGlzdCAuLi4KIAkgKi8KLQlpZiAoICFsaXN0X2VtcHR5KCZody0+Y3RseHEuYWN0aXZlKSApCi0JeworCWlmICghbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkpIHsKIAkJLyoKIAkJICogV2UgbXVzdCBlbnN1cmUgdGhhdCBvdXIgVVJCIGlzIHJlbW92ZWQgZnJvbQogCQkgKiB0aGUgc3lzdGVtLCBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBleHBpcmVkLgogCQkgKi8KIAkJaHctPmN0bHhfdXJiLnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7Ci0JCWlmICh1c2JfdW5saW5rX3VyYigmaHctPmN0bHhfdXJiKSA9PSAtRUlOUFJPR1JFU1MpCi0JCXsKKwkJaWYgKHVzYl91bmxpbmtfdXJiKCZody0+Y3RseF91cmIpID09IC1FSU5QUk9HUkVTUykgewogCQkJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHggPSBnZXRfYWN0aXZlX2N0bHgoaHcpOwogCiAJCQljdGx4LT5zdGF0ZSA9IENUTFhfUkVRX0ZBSUxFRDsKQEAgLTQ0MzYsMTEgKzM5NjUsOCBAQAogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7Ci0KLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmN0bHhfcmVzcHRpbWVyZm4KICoKQEAgLTQ0NTksMTMgKzM5ODUsMTAgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQKLWhmYTM4NHhfdXNiY3RseF9yZXNwdGltZXJmbih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYmN0bHhfcmVzcHRpbWVyZm4odW5zaWduZWQgbG9uZyBkYXRhKQogewotCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90KilkYXRhOwotCXVuc2lnbmVkIGxvbmcgICBmbGFnczsKLQotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCkBAIC00NDc0LDEyICszOTk3LDEwIEBACiAJLyogVGhlIGFjdGl2ZSBsaXN0IHdpbGwgYmUgZW1wdHkgaWYgdGhlCiAJICogYWRhcHRlciBoYXMgYmVlbiB1bnBsdWdnZWQgLi4uCiAJICovCi0JaWYgKCAhbGlzdF9lbXB0eSgmaHctPmN0bHhxLmFjdGl2ZSkgKQotCXsKKwlpZiAoIWxpc3RfZW1wdHkoJmh3LT5jdGx4cS5hY3RpdmUpKSB7CiAJCWhmYTM4NHhfdXNiY3RseF90ICpjdGx4ID0gZ2V0X2FjdGl2ZV9jdGx4KGh3KTsKIAotCQlpZiAoIHVubG9ja2VkX3VzYmN0bHhfY2FuY2VsX2FzeW5jKGh3LCBjdGx4KSA9PSAwICkKLQkJeworCQlpZiAodW5sb2NrZWRfdXNiY3RseF9jYW5jZWxfYXN5bmMoaHcsIGN0bHgpID09IDApIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7CiAJCQloZmEzODR4X3VzYmN0bHhxX3J1bihodyk7CiAJCQlnb3RvIGRvbmU7CkBAIC00NDg4LDggKzQwMDksOSBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIAotIGRvbmU6Ci0JREJGRVhJVDsKK2RvbmU6CisJOworCiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDUwNywxMyArNDAyOSwxMCBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCUludGVycnVwdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZAotaGZhMzg0eF91c2JfdGhyb3R0bGVmbih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBoZmEzODR4X3VzYl90aHJvdHRsZWZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCopZGF0YTsKLQl1bnNpZ25lZCBsb25nICAgZmxhZ3M7Ci0KLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKIApAQCAtNDUyMSwyNSArNDA0MCwyMCBAQAogCSAqIFdlIG5lZWQgdG8gY2hlY2sgQk9USCB0aGUgUlggYW5kIHRoZSBUWCB0aHJvdHRsZSBjb250cm9scywKIAkgKiBzbyB3ZSB1c2UgdGhlIGJpdHdpc2UgT1IgaW5zdGVhZCBvZiB0aGUgbG9naWNhbCBPUi4KIAkgKi8KLQlXTEFOX0xPR19ERUJVRygzLCAiZmxhZ3M9MHglbHhcbiIsIGh3LT51c2JfZmxhZ3MpOwotCWlmICggIWh3LT53bGFuZGV2LT5od3JlbW92ZWQgJiYKLQkgICAgICgKLQkgICAgICAgKHRlc3RfYW5kX2NsZWFyX2JpdChUSFJPVFRMRV9SWCwgJmh3LT51c2JfZmxhZ3MpICYmCi0JICAgICAgICF0ZXN0X2FuZF9zZXRfYml0KFdPUktfUlhfUkVTVU1FLCAmaHctPnVzYl9mbGFncykpCi0JICAgICAgIHwKLQkgICAgICAgKHRlc3RfYW5kX2NsZWFyX2JpdChUSFJPVFRMRV9UWCwgJmh3LT51c2JfZmxhZ3MpICYmCi0JICAgICAgICAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1RYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpKQotCSAgICAgKSApCi0JeworCXByX2RlYnVnKCJmbGFncz0weCVseFxuIiwgaHctPnVzYl9mbGFncyk7CisJaWYgKCFody0+d2xhbmRldi0+aHdyZW1vdmVkICYmCisJICAgICgodGVzdF9hbmRfY2xlYXJfYml0KFRIUk9UVExFX1JYLCAmaHctPnVzYl9mbGFncykgJiYKKwkgICAgICAhdGVzdF9hbmRfc2V0X2JpdChXT1JLX1JYX1JFU1VNRSwgJmh3LT51c2JfZmxhZ3MpKQorCSAgICAgfAorCSAgICAgKHRlc3RfYW5kX2NsZWFyX2JpdChUSFJPVFRMRV9UWCwgJmh3LT51c2JfZmxhZ3MpICYmCisJICAgICAgIXRlc3RfYW5kX3NldF9iaXQoV09SS19UWF9SRVNVTUUsICZody0+dXNiX2ZsYWdzKSkKKwkgICAgKSkgewogCQlzY2hlZHVsZV93b3JrKCZody0+dXNiX3dvcmspOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5jdGx4cS5sb2NrLCBmbGFncyk7Ci0KLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBoZmEzODR4X3VzYmN0bHhfc3VibWl0CiAqCkBAIC00NTU4LDE2ICs0MDcyLDExIEBACiAqIENhbGwgY29udGV4dDoKICoJcHJvY2VzcyBvciBpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludAotaGZhMzg0eF91c2JjdGx4X3N1Ym1pdCgKLQloZmEzODR4X3QJCSpodywKLQloZmEzODR4X3VzYmN0bHhfdAkqY3RseCkKK3N0YXRpYyBpbnQgaGZhMzg0eF91c2JjdGx4X3N1Ym1pdChoZmEzODR4X3QgKmh3LCBoZmEzODR4X3VzYmN0bHhfdCAqY3RseCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlEQkZFTlRFUjsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZody0+Y3RseHEubG9jaywgZmxhZ3MpOwogCiAJaWYgKGh3LT53bGFuZGV2LT5od3JlbW92ZWQpIHsKQEAgLTQ1ODIsMTEgKzQwOTEsOSBAQAogCQlyZXQgPSAwOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJldDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogaGZhMzg0eF91c2JvdXRfdHgKICoKQEAgLTQ2MDgsMTEgKzQxMTUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBoZmEzODR4X3VzYm91dF90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfdXNib3V0X3QgKnVzYm91dCkKIHsKLQlEQkZFTlRFUjsKLQogCXByaXNtMnN0YV9ldl9hbGxvYyh3bGFuZGV2KTsKLQotCURCRkVYSVQ7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDYzMSwxMCArNDEzNCw5IEBACiAqCiAqIENhbGwgY29udGV4dDoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludAotaGZhMzg0eF9pc2dvb2RfcGRyY29kZSh1MTYgcGRyY29kZSkKK3N0YXRpYyBpbnQgaGZhMzg0eF9pc2dvb2RfcGRyY29kZSh1MTYgcGRyY29kZSkKIHsKLQlzd2l0Y2gocGRyY29kZSkgeworCXN3aXRjaCAocGRyY29kZSkgewogCWNhc2UgSEZBMzg0eF9QRFJfRU5EX09GX1BEQToKIAljYXNlIEhGQTM4NHhfUERSX1BDQl9QQVJUTlVNOgogCWNhc2UgSEZBMzg0eF9QRFJfUERBVkVSOgpAQCAtNDY2OCwyMyArNDE3MCwyMCBAQAogCQlyZXR1cm4gMTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaWYgKCBwZHJjb2RlIDwgMHgxMDAwICkgeworCQlpZiAocGRyY29kZSA8IDB4MTAwMCkgewogCQkJLyogY29kZSBpcyBPSywgYnV0IHdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGl0IGlzICovCi0JCQlXTEFOX0xPR19ERUJVRygzLAotCQkJCSJFbmNvdW50ZXJlZCB1bmtub3duIFBEUiM9MHglMDR4LCAiCi0JCQkJImFzc3VtaW5nIGl0J3Mgb2suXG4iLAotCQkJCXBkcmNvZGUpOworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiRW5jb3VudGVyZWQgdW5rbm93biBQRFIjPTB4JTA0eCwgIgorCQkJICAgICAgICJhc3N1bWluZyBpdCdzIG9rLlxuIiwgcGRyY29kZSk7CiAJCQlyZXR1cm4gMTsKIAkJfSBlbHNlIHsKIAkJCS8qIGJhZCBjb2RlICovCi0JCQlXTEFOX0xPR19ERUJVRygzLAotCQkJCSJFbmNvdW50ZXJlZCB1bmtub3duIFBEUiM9MHglMDR4LCAiCi0JCQkJIig+PTB4MTAwMCksIGFzc3VtaW5nIGl0J3MgYmFkLlxuIiwKLQkJCQlwZHJjb2RlKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIkVuY291bnRlcmVkIHVua25vd24gUERSIz0weCUwNHgsICIKKwkJCSAgICAgICAiKD49MHgxMDAwKSwgYXNzdW1pbmcgaXQncyBiYWQuXG4iLCBwZHJjb2RlKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gMDsgLyogYXZvaWQgY29tcGlsZXIgd2FybmluZ3MgKi8KKwlyZXR1cm4gMDsJCS8qIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmdzICovCiB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYwppbmRleCBkZmM3YjNhLi4yYWJjZTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jCkBAIC00OCwxMCArNDgsOCBAQAogKiA4MDIuMTEgZnJhbWUgY29udmVyc2lvbnMuCiAqCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotCisqCisqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC02MywxNCArNjEsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAotI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBQcm9qZWN0IEluY2x1ZGVzICovCi0KICNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgogI2luY2x1ZGUgInA4MDIxMWhkci5oIgogI2luY2x1ZGUgInA4MDIxMWNvbnYuaCIKQEAgLTgwLDMwICs3NCw4IEBACiAjaW5jbHVkZSAicDgwMjExaW9jdGwuaCIKICNpbmNsdWRlICJwODAyMTFyZXEuaCIKIAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgQ29uc3RhbnRzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBNYWNyb3MgKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgVHlwZXMgKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCi0KLXN0YXRpYyB1OAlvdWlfcmZjMTA0MltdID0gezB4MDAsIDB4MDAsIDB4MDB9Owotc3RhdGljIHU4CW91aV84MDIxaFtdID0gezB4MDAsIDB4MDAsIDB4Zjh9OwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlZmluaXRpb25zICovCitzdGF0aWMgdTggb3VpX3JmYzEwNDJbXSA9IHsgMHgwMCwgMHgwMCwgMHgwMCB9Oworc3RhdGljIHU4IG91aV84MDIxaFtdID0geyAweDAwLCAweDAwLCAweGY4IH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwODAyMTFwYl9ldGhlcl90b184MDIxMQpAQCAtMTMwLDM1ICsxMDIsMzYgQEAKICogQ2FsbCBjb250ZXh0OgogKglNYXkgYmUgY2FsbGVkIGluIGludGVycnVwdCBvciBub24taW50ZXJydXB0IGNvbnRleHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotaW50IHNrYl9ldGhlcl90b19wODAyMTEoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTMyIGV0aGNvbnYsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCkKK2ludCBza2JfZXRoZXJfdG9fcDgwMjExKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTMyIGV0aGNvbnYsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsCisJCQlwODAyMTFfbWV0YXdlcF90ICpwODAyMTFfd2VwKQogewogCi0JdTE2ICAgICAgICAgIGZjOwotCXUxNiAgICAgICAgICBwcm90bzsKLQl3bGFuX2V0aGhkcl90ICAgZV9oZHI7Ci0Jd2xhbl9sbGNfdCAgICAgICplX2xsYzsKLQl3bGFuX3NuYXBfdCAgICAgKmVfc25hcDsKKwl1MTYgZmM7CisJdTE2IHByb3RvOworCXdsYW5fZXRoaGRyX3QgZV9oZHI7CisJd2xhbl9sbGNfdCAqZV9sbGM7CisJd2xhbl9zbmFwX3QgKmVfc25hcDsKIAlpbnQgZm9vOwogCi0JREJGRU5URVI7CiAJbWVtY3B5KCZlX2hkciwgc2tiLT5kYXRhLCBzaXplb2YoZV9oZHIpKTsKIAogCWlmIChza2ItPmxlbiA8PSAwKSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDEsICJ6ZXJvLWxlbmd0aCBza2IhXG4iKTsKKwkJcHJfZGVidWcoInplcm8tbGVuZ3RoIHNrYiFcbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoIGV0aGNvbnYgPT0gV0xBTl9FVEhDT05WX0VOQ0FQICkgeyAvKiBzaW1wbGVzdCBjYXNlICovCi0JICAgICAgICBXTEFOX0xPR19ERUJVRygzLCAiRU5DQVAgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOworCWlmIChldGhjb252ID09IFdMQU5fRVRIQ09OVl9FTkNBUCkgewkvKiBzaW1wbGVzdCBjYXNlICovCisJCXByX2RlYnVnKCJFTkNBUCBsZW46ICVkXG4iLCBza2ItPmxlbik7CiAJCS8qIGhlcmUsIHdlIGRvbid0IGNhcmUgd2hhdCBraW5kIG9mIGV0aGVyIGZybS4gSnVzdCBzdGljayBpdCAqLwogCQkvKiAgaW4gdGhlIDgwMjExIHBheWxvYWQgKi8KIAkJLyogd2hpY2ggaXMgdG8gc2F5LCBsZWF2ZSB0aGUgc2tiIGFsb25lLiAqLwogCX0gZWxzZSB7CiAJCS8qIHN0ZXAgMTogY2xhc3NpZnkgZXRoZXIgZnJhbWUsIERJWCBvciA4MDIuMz8gKi8KIAkJcHJvdG8gPSBudG9ocyhlX2hkci50eXBlKTsKLQkJaWYgKCBwcm90byA8PSAxNTAwICkgewotCQkgICAgICAgIFdMQU5fTE9HX0RFQlVHKDMsICI4MDIuMyBsZW46ICVkXG4iLCBza2ItPmxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBjb2RlcyA8PSAxNTAwIHJlc2VydmVkIGZvciA4MDIuMyBsZW5ndGhzICovCisJCWlmIChwcm90byA8PSAxNTAwKSB7CisJCQlwcl9kZWJ1ZygiODAyLjMgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOworCQkJLyogY29kZXMgPD0gMTUwMCByZXNlcnZlZCBmb3IgODAyLjMgbGVuZ3RocyAqLwogCQkJLyogaXQncyA4MDIuMywgcGFzcyBldGhlciBwYXlsb2FkIHVuY2hhbmdlZCwgICovCiAKIAkJCS8qIHRyaW0gb2ZmIGV0aGVybmV0IGhlYWRlciAqLwpAQCAtMTY3LDIzICsxNDAsMjggQEAKIAkJCS8qICAgbGVhdmUgb2ZmIGFueSBQQUQgb2N0ZXRzLiAgKi8KIAkJCXNrYl90cmltKHNrYiwgcHJvdG8pOwogCQl9IGVsc2UgewotCQkgICAgICAgIFdMQU5fTE9HX0RFQlVHKDMsICJESVhJSSBsZW46ICVkXG4iLCBza2ItPmxlbik7CisJCQlwcl9kZWJ1ZygiRElYSUkgbGVuOiAlZFxuIiwgc2tiLT5sZW4pOwogCQkJLyogaXQncyBESVhJSSwgdGltZSBmb3Igc29tZSBjb252ZXJzaW9uICovCiAKIAkJCS8qIHRyaW0gb2ZmIGV0aGVybmV0IGhlYWRlciAqLwogCQkJc2tiX3B1bGwoc2tiLCBXTEFOX0VUSEhEUl9MRU4pOwogCiAJCQkvKiB0YWNrIG9uIFNOQVAgKi8KLQkJCWVfc25hcCA9ICh3bGFuX3NuYXBfdCAqKSBza2JfcHVzaChza2IsIHNpemVvZih3bGFuX3NuYXBfdCkpOworCQkJZV9zbmFwID0KKwkJCSAgICAod2xhbl9zbmFwX3QgKikgc2tiX3B1c2goc2tiLCBzaXplb2Yod2xhbl9zbmFwX3QpKTsKIAkJCWVfc25hcC0+dHlwZSA9IGh0b25zKHByb3RvKTsKLQkJCWlmICggZXRoY29udiA9PSBXTEFOX0VUSENPTlZfODAyMWggJiYgcDgwMjExX3N0dF9maW5kcHJvdG8ocHJvdG8pICkgewotCQkJCW1lbWNweSggZV9zbmFwLT5vdWksIG91aV84MDIxaCwgV0xBTl9JRUVFX09VSV9MRU4pOworCQkJaWYgKGV0aGNvbnYgPT0gV0xBTl9FVEhDT05WXzgwMjFoCisJCQkgICAgJiYgcDgwMjExX3N0dF9maW5kcHJvdG8ocHJvdG8pKSB7CisJCQkJbWVtY3B5KGVfc25hcC0+b3VpLCBvdWlfODAyMWgsCisJCQkJICAgICAgIFdMQU5fSUVFRV9PVUlfTEVOKTsKIAkJCX0gZWxzZSB7Ci0JCQkJbWVtY3B5KCBlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKTsKKwkJCQltZW1jcHkoZV9zbmFwLT5vdWksIG91aV9yZmMxMDQyLAorCQkJCSAgICAgICBXTEFOX0lFRUVfT1VJX0xFTik7CiAJCQl9CiAKIAkJCS8qIHRhY2sgb24gbGxjICovCi0JCQllX2xsYyA9ICh3bGFuX2xsY190ICopIHNrYl9wdXNoKHNrYiwgc2l6ZW9mKHdsYW5fbGxjX3QpKTsKKwkJCWVfbGxjID0KKwkJCSAgICAod2xhbl9sbGNfdCAqKSBza2JfcHVzaChza2IsIHNpemVvZih3bGFuX2xsY190KSk7CiAJCQllX2xsYy0+ZHNhcCA9IDB4QUE7CS8qIFNOQVAsIHNlZSBJRUVFIDgwMiAqLwogCQkJZV9sbGMtPnNzYXAgPSAweEFBOwogCQkJZV9sbGMtPmN0bCA9IDB4MDM7CkBAIC0xOTMsNjIgKzE3MSw2MSBAQAogCiAJLyogU2V0IHVwIHRoZSA4MDIuMTEgaGVhZGVyICovCiAJLyogSXQncyBhIGRhdGEgZnJhbWUgKi8KLQlmYyA9IGhvc3QyaWVlZTE2KCBXTEFOX1NFVF9GQ19GVFlQRShXTEFOX0ZUWVBFX0RBVEEpIHwKLQkJCSAgV0xBTl9TRVRfRkNfRlNUWVBFKFdMQU5fRlNUWVBFX0RBVEFPTkxZKSk7CisJZmMgPSBjcHVfdG9fbGUxNihXTEFOX1NFVF9GQ19GVFlQRShXTEFOX0ZUWVBFX0RBVEEpIHwKKwkJCSBXTEFOX1NFVF9GQ19GU1RZUEUoV0xBTl9GU1RZUEVfREFUQU9OTFkpKTsKIAotCXN3aXRjaCAoIHdsYW5kZXYtPm1hY21vZGUgKSB7CisJc3dpdGNoICh3bGFuZGV2LT5tYWNtb2RlKSB7CiAJY2FzZSBXTEFOX01BQ01PREVfSUJTU19TVEE6Ci0JCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMSwgJmVfaGRyLmRhZGRyLCBXTEFOX0FERFJfTEVOKTsKLQkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEyLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBXTEFOX0FERFJfTEVOKTsKLQkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCB3bGFuZGV2LT5ic3NpZCwgV0xBTl9BRERSX0xFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMSwgJmVfaGRyLmRhZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTMsIHdsYW5kZXYtPmJzc2lkLCBFVEhfQUxFTik7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19TVEE6Ci0JCWZjIHw9IGhvc3QyaWVlZTE2KFdMQU5fU0VUX0ZDX1RPRFMoMSkpOwotCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsIHdsYW5kZXYtPmJzc2lkLCBXTEFOX0FERFJfTEVOKTsKLQkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEyLCB3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBXTEFOX0FERFJfTEVOKTsKLQkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCAmZV9oZHIuZGFkZHIsIFdMQU5fQUREUl9MRU4pOworCQlmYyB8PSBjcHVfdG9fbGUxNihXTEFOX1NFVF9GQ19UT0RTKDEpKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmExLCB3bGFuZGV2LT5ic3NpZCwgRVRIX0FMRU4pOworCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTIsIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCAmZV9oZHIuZGFkZHIsIEVUSF9BTEVOKTsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX01BQ01PREVfRVNTX0FQOgotCQlmYyB8PSBob3N0MmllZWUxNihXTEFOX1NFVF9GQ19GUk9NRFMoMSkpOwotCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTEsICZlX2hkci5kYWRkciwgV0xBTl9BRERSX0xFTik7Ci0JCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+YnNzaWQsIFdMQU5fQUREUl9MRU4pOwotCQltZW1jcHkocDgwMjExX2hkci0+YTMuYTMsICZlX2hkci5zYWRkciwgV0xBTl9BRERSX0xFTik7CisJCWZjIHw9IGNwdV90b19sZTE2KFdMQU5fU0VUX0ZDX0ZST01EUygxKSk7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMSwgJmVfaGRyLmRhZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShwODAyMTFfaGRyLT5hMy5hMiwgd2xhbmRldi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KHA4MDIxMV9oZHItPmEzLmEzLCAmZV9oZHIuc2FkZHIsIEVUSF9BTEVOKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJV0xBTl9MT0dfRVJST1IoIkVycm9yOiBDb252ZXJ0aW5nIGV0aCB0byB3bGFuIGluIHVua25vd24gbW9kZS5cbiIpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJFcnJvcjogQ29udmVydGluZyBldGggdG8gd2xhbiBpbiB1bmtub3duIG1vZGUuXG4iKTsKIAkJcmV0dXJuIDE7CiAJCWJyZWFrOwogCX0KIAogCXA4MDIxMV93ZXAtPmRhdGEgPSBOVUxMOwogCi0JaWYgKCh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkgJiYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VOQ1JZUFQpKSB7Ci0JCS8vIFhYWFggbmVlZCB0byBwaWNrIGtleW51bSBvdGhlciB0aGFuIGRlZmF1bHQ/CisJaWYgKCh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkKKwkgICAgJiYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VOQ1JZUFQpKSB7CisJCS8qIFhYWFggbmVlZCB0byBwaWNrIGtleW51bSBvdGhlciB0aGFuIGRlZmF1bHQ/ICovCiAKLSNpZiAxCiAJCXA4MDIxMV93ZXAtPmRhdGEgPSBrbWFsbG9jKHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKLSNlbHNlCi0JCXA4MDIxMV93ZXAtPmRhdGEgPSBza2ItPmRhdGE7Ci0jZW5kaWYKIAogCQlpZiAoKGZvbyA9IHdlcF9lbmNyeXB0KHdsYW5kZXYsIHNrYi0+ZGF0YSwgcDgwMjExX3dlcC0+ZGF0YSwKIAkJCQkgICAgICAgc2tiLT5sZW4sCi0JCQkJKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyksCi0JCQkJcDgwMjExX3dlcC0+aXYsIHA4MDIxMV93ZXAtPmljdikpKSB7Ci0JCQlXTEFOX0xPR19XQVJOSU5HKCJIb3N0IGVuLVdFUCBmYWlsZWQsIGRyb3BwaW5nIGZyYW1lICglZCkuXG4iLCBmb28pOworCQkJCSAgICAgICAod2xhbmRldi0+CisJCQkJCWhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyksCisJCQkJICAgICAgIHA4MDIxMV93ZXAtPml2LCBwODAyMTFfd2VwLT5pY3YpKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJIb3N0IGVuLVdFUCBmYWlsZWQsIGRyb3BwaW5nIGZyYW1lICglZCkuXG4iLAorCQkJICAgICAgIGZvbyk7CiAJCQlyZXR1cm4gMjsKIAkJfQotCQlmYyB8PSBob3N0MmllZWUxNihXTEFOX1NFVF9GQ19JU1dFUCgxKSk7CisJCWZjIHw9IGNwdV90b19sZTE2KFdMQU5fU0VUX0ZDX0lTV0VQKDEpKTsKIAl9CiAKLQotCS8vCXNrYi0+bmgucmF3ID0gc2tiLT5kYXRhOworCS8qICAgICAgc2tiLT5uaC5yYXcgPSBza2ItPmRhdGE7ICovCiAKIAlwODAyMTFfaGRyLT5hMy5mYyA9IGZjOwogCXA4MDIxMV9oZHItPmEzLmR1ciA9IDA7CiAJcDgwMjExX2hkci0+YTMuc2VxID0gMDsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1NiwyMiArMjMzLDI0IEBACiBzdGF0aWMgdm9pZCBvcmlub2NvX3NweV9nYXRoZXIod2xhbmRldmljZV90ICp3bGFuZGV2LCBjaGFyICptYWMsCiAJCQkgICAgICAgcDgwMjExX3J4bWV0YV90ICpyeG1ldGEpCiB7Ci0gICAgICAgIGludCBpOworCWludCBpOwogCi0gICAgICAgIC8qIEdhdGhlciB3aXJlbGVzcyBzcHkgc3RhdGlzdGljczogZm9yIGVhY2ggcGFja2V0LCBjb21wYXJlIHRoZQotICAgICAgICAgKiBzb3VyY2UgYWRkcmVzcyB3aXRoIG91dCBsaXN0LCBhbmQgaWYgbWF0Y2gsIGdldCB0aGUgc3RhdHMuLi4gKi8KKwkvKiBHYXRoZXIgd2lyZWxlc3Mgc3B5IHN0YXRpc3RpY3M6IGZvciBlYWNoIHBhY2tldCwgY29tcGFyZSB0aGUKKwkgKiBzb3VyY2UgYWRkcmVzcyB3aXRoIG91dCBsaXN0LCBhbmQgaWYgbWF0Y2gsIGdldCB0aGUgc3RhdHMuLi4gKi8KIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgd2xhbmRldi0+c3B5X251bWJlcjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHdsYW5kZXYtPnNweV9udW1iZXI7IGkrKykgewogCi0gICAgICAgICAgICAgICAgaWYgKCFtZW1jbXAod2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sIG1hYywgRVRIX0FMRU4pKSB7CisJCWlmICghbWVtY21wKHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBtYWMsIEVUSF9BTEVOKSkgewogCQkJbWVtY3B5KHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBtYWMsIEVUSF9BTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9zdGF0W2ldLmxldmVsID0gcnhtZXRhLT5zaWduYWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS5ub2lzZSA9IHJ4bWV0YS0+bm9pc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS5xdWFsID0gKHJ4bWV0YS0+c2lnbmFsID4gcnhtZXRhLT5ub2lzZSkgPyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyeG1ldGEtPnNpZ25hbCAtIHJ4bWV0YS0+bm9pc2UpIDogMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9zdGF0W2ldLnVwZGF0ZWQgPSAweDc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJCQl3bGFuZGV2LT5zcHlfc3RhdFtpXS5sZXZlbCA9IHJ4bWV0YS0+c2lnbmFsOworCQkJd2xhbmRldi0+c3B5X3N0YXRbaV0ubm9pc2UgPSByeG1ldGEtPm5vaXNlOworCQkJd2xhbmRldi0+c3B5X3N0YXRbaV0ucXVhbCA9CisJCQkgICAgKHJ4bWV0YS0+c2lnbmFsID4KKwkJCSAgICAgcnhtZXRhLT5ub2lzZSkgPyAocnhtZXRhLT5zaWduYWwgLQorCQkJCQkgICAgICAgcnhtZXRhLT5ub2lzZSkgOiAwOworCQkJd2xhbmRldi0+c3B5X3N0YXRbaV0udXBkYXRlZCA9IDB4NzsKKwkJfQorCX0KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yOTMsNDMgKzI3Miw0MiBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCU1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IG9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgc2tiX3A4MDIxMV90b19ldGhlciggd2xhbmRldmljZV90ICp3bGFuZGV2LCB1MzIgZXRoY29udiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCBza2JfcDgwMjExX3RvX2V0aGVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTMyIGV0aGNvbnYsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCW5ldGRldmljZV90ICAgICAqbmV0ZGV2ID0gd2xhbmRldi0+bmV0ZGV2OwotCXUxNiAgICAgICAgICBmYzsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICBwYXlsb2FkX2xlbmd0aDsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICBwYXlsb2FkX29mZnNldDsKLQl1OAkJZGFkZHJbV0xBTl9FVEhBRERSX0xFTl07Ci0JdTgJCXNhZGRyW1dMQU5fRVRIQUREUl9MRU5dOwotCXA4MDIxMV9oZHJfdCAgICAqd19oZHI7Ci0Jd2xhbl9ldGhoZHJfdCAgICplX2hkcjsKLQl3bGFuX2xsY190ICAgICAgKmVfbGxjOwotCXdsYW5fc25hcF90ICAgICAqZV9zbmFwOworCW5ldGRldmljZV90ICpuZXRkZXYgPSB3bGFuZGV2LT5uZXRkZXY7CisJdTE2IGZjOworCXVuc2lnbmVkIGludCBwYXlsb2FkX2xlbmd0aDsKKwl1bnNpZ25lZCBpbnQgcGF5bG9hZF9vZmZzZXQ7CisJdTggZGFkZHJbV0xBTl9FVEhBRERSX0xFTl07CisJdTggc2FkZHJbV0xBTl9FVEhBRERSX0xFTl07CisJcDgwMjExX2hkcl90ICp3X2hkcjsKKwl3bGFuX2V0aGhkcl90ICplX2hkcjsKKwl3bGFuX2xsY190ICplX2xsYzsKKwl3bGFuX3NuYXBfdCAqZV9zbmFwOwogCiAJaW50IGZvbzsKIAotCURCRkVOVEVSOwotCiAJcGF5bG9hZF9sZW5ndGggPSBza2ItPmxlbiAtIFdMQU5fSERSX0EzX0xFTiAtIFdMQU5fQ1JDX0xFTjsKIAlwYXlsb2FkX29mZnNldCA9IFdMQU5fSERSX0EzX0xFTjsKIAogCXdfaGRyID0gKHA4MDIxMV9oZHJfdCAqKSBza2ItPmRhdGE7CiAKLSAgICAgICAgLyogc2V0dXAgc29tZSB2YXJzIGZvciBjb252ZW5pZW5jZSAqLwotCWZjID0gaWVlZTJob3N0MTYod19oZHItPmEzLmZjKTsKLQlpZiAoIChXTEFOX0dFVF9GQ19UT0RTKGZjKSA9PSAwKSAmJiAoV0xBTl9HRVRfRkNfRlJPTURTKGZjKSA9PSAwKSApIHsKKwkvKiBzZXR1cCBzb21lIHZhcnMgZm9yIGNvbnZlbmllbmNlICovCisJZmMgPSBsZTE2X3RvX2NwdSh3X2hkci0+YTMuZmMpOworCWlmICgoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMCkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMCkpIHsKIAkJbWVtY3B5KGRhZGRyLCB3X2hkci0+YTMuYTEsIFdMQU5fRVRIQUREUl9MRU4pOwogCQltZW1jcHkoc2FkZHIsIHdfaGRyLT5hMy5hMiwgV0xBTl9FVEhBRERSX0xFTik7Ci0JfSBlbHNlIGlmKCAoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMCkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMSkgKSB7CisJfSBlbHNlIGlmICgoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMCkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMSkpIHsKIAkJbWVtY3B5KGRhZGRyLCB3X2hkci0+YTMuYTEsIFdMQU5fRVRIQUREUl9MRU4pOwogCQltZW1jcHkoc2FkZHIsIHdfaGRyLT5hMy5hMywgV0xBTl9FVEhBRERSX0xFTik7Ci0JfSBlbHNlIGlmKCAoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMSkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMCkgKSB7CisJfSBlbHNlIGlmICgoV0xBTl9HRVRfRkNfVE9EUyhmYykgPT0gMSkgJiYgKFdMQU5fR0VUX0ZDX0ZST01EUyhmYykgPT0gMCkpIHsKIAkJbWVtY3B5KGRhZGRyLCB3X2hkci0+YTMuYTMsIFdMQU5fRVRIQUREUl9MRU4pOwogCQltZW1jcHkoc2FkZHIsIHdfaGRyLT5hMy5hMiwgV0xBTl9FVEhBRERSX0xFTik7CiAJfSBlbHNlIHsKIAkJcGF5bG9hZF9vZmZzZXQgPSBXTEFOX0hEUl9BNF9MRU47CiAJCWlmIChwYXlsb2FkX2xlbmd0aCA8IFdMQU5fSERSX0E0X0xFTiAtIFdMQU5fSERSX0EzX0xFTikgewotCQkJV0xBTl9MT0dfRVJST1IoIkE0IGZyYW1lIHRvbyBzaG9ydCFcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJBNCBmcmFtZSB0b28gc2hvcnQhXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCXBheWxvYWRfbGVuZ3RoIC09IChXTEFOX0hEUl9BNF9MRU4gLSBXTEFOX0hEUl9BM19MRU4pOwpAQCAtMzM4LDE4ICszMTYsMjIgQEAKIAl9CiAKIAkvKiBwZXJmb3JtIGRlLXdlcCBpZiBuZWNlc3NhcnkuLiAqLwotCWlmICgod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpICYmIFdMQU5fR0VUX0ZDX0lTV0VQKGZjKSAmJiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVDUllQVCkpIHsKKwlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKSAmJiBXTEFOX0dFVF9GQ19JU1dFUChmYykKKwkgICAgJiYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpKSB7CiAJCWlmIChwYXlsb2FkX2xlbmd0aCA8PSA4KSB7Ci0JCQlXTEFOX0xPR19FUlJPUigiV0VQIGZyYW1lIHRvbyBzaG9ydCAoJXUpLlxuIiwKLQkJCQkJc2tiLT5sZW4pOworCQkJcHJpbnRrKEtFUk5fRVJSICJXRVAgZnJhbWUgdG9vIHNob3J0ICgldSkuXG4iLAorCQkJICAgICAgIHNrYi0+bGVuKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWlmICgoZm9vID0gd2VwX2RlY3J5cHQod2xhbmRldiwgc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQgKyA0LAogCQkJCSAgICAgICBwYXlsb2FkX2xlbmd0aCAtIDgsIC0xLAogCQkJCSAgICAgICBza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCwKLQkJCQkgICAgICAgc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQgKyBwYXlsb2FkX2xlbmd0aCAtIDQpKSkgeworCQkJCSAgICAgICBza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCArCisJCQkJICAgICAgIHBheWxvYWRfbGVuZ3RoIC0gNCkpKSB7CiAJCQkvKiBkZS13ZXAgZmFpbGVkLCBkcm9wIHNrYi4gKi8KLQkJCVdMQU5fTE9HX0RFQlVHKDEsICJIb3N0IGRlLVdFUCBmYWlsZWQsIGRyb3BwaW5nIGZyYW1lICglZCkuXG4iLCBmb28pOworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiSG9zdCBkZS1XRVAgZmFpbGVkLCBkcm9wcGluZyBmcmFtZSAoJWQpLlxuIiwKKwkJCSAgICAgICBmb28pOwogCQkJd2xhbmRldi0+cnguZGVjcnlwdF9lcnIrKzsKIAkJCXJldHVybiAyOwogCQl9CkBAIC0zNjcsMjEgKzM0OSwyMiBAQAogCWVfaGRyID0gKHdsYW5fZXRoaGRyX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0KTsKIAogCWVfbGxjID0gKHdsYW5fbGxjX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0KTsKLQllX3NuYXAgPSAod2xhbl9zbmFwX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgc2l6ZW9mKHdsYW5fbGxjX3QpKTsKKwllX3NuYXAgPQorCSAgICAod2xhbl9zbmFwX3QgKikgKHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgc2l6ZW9mKHdsYW5fbGxjX3QpKTsKIAogCS8qIFRlc3QgZm9yIHRoZSB2YXJpb3VzIGVuY29kaW5ncyAqLwotCWlmICggKHBheWxvYWRfbGVuZ3RoID49IHNpemVvZih3bGFuX2V0aGhkcl90KSkgJiYKLQkgICAgICggZV9sbGMtPmRzYXAgIT0gMHhhYSB8fCBlX2xsYy0+c3NhcCAhPSAweGFhICkgJiYKLQkgICAgICgobWVtY21wKGRhZGRyLCBlX2hkci0+ZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pID09IDApIHx8CisJaWYgKChwYXlsb2FkX2xlbmd0aCA+PSBzaXplb2Yod2xhbl9ldGhoZHJfdCkpICYmCisJICAgIChlX2xsYy0+ZHNhcCAhPSAweGFhIHx8IGVfbGxjLT5zc2FwICE9IDB4YWEpICYmCisJICAgICgobWVtY21wKGRhZGRyLCBlX2hkci0+ZGFkZHIsIFdMQU5fRVRIQUREUl9MRU4pID09IDApIHx8CiAJICAgICAobWVtY21wKHNhZGRyLCBlX2hkci0+c2FkZHIsIFdMQU5fRVRIQUREUl9MRU4pID09IDApKSkgewotCQlXTEFOX0xPR19ERUJVRygzLCAiODAyLjMgRU5DQVAgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOworCQlwcl9kZWJ1ZygiODAyLjMgRU5DQVAgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOwogCQkvKiA4MDIuMyBFbmNhcHN1bGF0ZWQgKi8KIAkJLyogVGVzdCBmb3IgYW4gb3Zlcmxlbmd0aCBmcmFtZSAqLwotCQlpZiAoIHBheWxvYWRfbGVuZ3RoID4gKG5ldGRldi0+bXR1ICsgV0xBTl9FVEhIRFJfTEVOKSkgeworCQlpZiAocGF5bG9hZF9sZW5ndGggPiAobmV0ZGV2LT5tdHUgKyBXTEFOX0VUSEhEUl9MRU4pKSB7CiAJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gZW5jYXAnZC4gKi8KIAkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KLQkJCVdMQU5fTE9HX0VSUk9SKCJFTkNBUCBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAotCQkJCXBheWxvYWRfbGVuZ3RoLCBuZXRkZXYtPm10dSArIFdMQU5fRVRISERSX0xFTik7CisJCQlwcmludGsoS0VSTl9FUlIgIkVOQ0FQIGZyYW1lIHRvbyBsYXJnZSAoJWQgPiAlZClcbiIsCisJCQkgICAgICAgcGF5bG9hZF9sZW5ndGgsIG5ldGRldi0+bXR1ICsgV0xBTl9FVEhIRFJfTEVOKTsKIAkJCXJldHVybiAxOwogCQl9CiAKQEAgLTM5MCwyNSArMzczLDI1IEBACiAJCS8qIGNob3Agb2ZmIHRoZSA4MDIuMTEgQ1JDICovCiAJCXNrYl90cmltKHNrYiwgc2tiLT5sZW4gLSBXTEFOX0NSQ19MRU4pOwogCi0JfSBlbHNlIGlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fbGxjX3QpICsgc2l6ZW9mKHdsYW5fc25hcF90KSkgJiYKLQkJICAgKGVfbGxjLT5kc2FwID09IDB4YWEpICYmCi0JCSAgIChlX2xsYy0+c3NhcCA9PSAweGFhKSAmJgotCQkgICAoZV9sbGMtPmN0bCA9PSAweDAzKSAmJgotCQkgICAoKChtZW1jbXAoIGVfc25hcC0+b3VpLCBvdWlfcmZjMTA0MiwgV0xBTl9JRUVFX09VSV9MRU4pPT0wKSAmJgotCQkgICAgKGV0aGNvbnYgPT0gV0xBTl9FVEhDT05WXzgwMjFoKSAmJgotCQkgICAgKHA4MDIxMV9zdHRfZmluZHByb3RvKGllZWUyaG9zdDE2KGVfc25hcC0+dHlwZSkpKSkgfHwKLQkJICAgIChtZW1jbXAoIGVfc25hcC0+b3VpLCBvdWlfcmZjMTA0MiwgV0xBTl9JRUVFX09VSV9MRU4pIT0wKSkpCi0JewotCQlXTEFOX0xPR19ERUJVRygzLCAiU05BUCtSRkMxMDQyIGxlbjogJWRcbiIsIHBheWxvYWRfbGVuZ3RoKTsKKwl9IGVsc2UgaWYgKChwYXlsb2FkX2xlbmd0aCA+PSBzaXplb2Yod2xhbl9sbGNfdCkgKyBzaXplb2Yod2xhbl9zbmFwX3QpKQorCQkgICAmJiAoZV9sbGMtPmRzYXAgPT0gMHhhYSkgJiYgKGVfbGxjLT5zc2FwID09IDB4YWEpCisJCSAgICYmIChlX2xsYy0+Y3RsID09IDB4MDMpCisJCSAgICYmCisJCSAgICgoKG1lbWNtcChlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKSA9PSAwKQorCQkgICAgICYmIChldGhjb252ID09IFdMQU5fRVRIQ09OVl84MDIxaCkKKwkJICAgICAmJiAocDgwMjExX3N0dF9maW5kcHJvdG8obGUxNl90b19jcHUoZV9zbmFwLT50eXBlKSkpKQorCQkgICAgfHwgKG1lbWNtcChlX3NuYXAtPm91aSwgb3VpX3JmYzEwNDIsIFdMQU5fSUVFRV9PVUlfTEVOKSAhPQorCQkJMCkpKSB7CisJCXByX2RlYnVnKCJTTkFQK1JGQzEwNDIgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOwogCQkvKiBpdCdzIGEgU05BUCArIFJGQzEwNDIgZnJhbWUgJiYgcHJvdG9jb2wgaXMgaW4gU1RUICovCiAJCS8qIGJ1aWxkIDgwMi4zICsgUkZDMTA0MiAqLwogCiAJCS8qIFRlc3QgZm9yIGFuIG92ZXJsZW5ndGggZnJhbWUgKi8KLQkJaWYgKCBwYXlsb2FkX2xlbmd0aCA+IG5ldGRldi0+bXR1ICkgeworCQlpZiAocGF5bG9hZF9sZW5ndGggPiBuZXRkZXYtPm10dSkgewogCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIHNlbnQuICovCiAJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCi0JCQlXTEFOX0xPR19FUlJPUigiU05BUCBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAotCQkJCXBheWxvYWRfbGVuZ3RoLCBuZXRkZXYtPm10dSk7CisJCQlwcmludGsoS0VSTl9FUlIgIlNOQVAgZnJhbWUgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKKwkJCSAgICAgICBwYXlsb2FkX2xlbmd0aCwgbmV0ZGV2LT5tdHUpOwogCQkJcmV0dXJuIDE7CiAJCX0KIApAQCAtNDI0LDExICs0MDcsMTAgQEAKIAkJLyogY2hvcCBvZmYgdGhlIDgwMi4xMSBDUkMgKi8KIAkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIFdMQU5fQ1JDX0xFTik7CiAKLQl9ICBlbHNlIGlmICgocGF5bG9hZF9sZW5ndGggPj0gc2l6ZW9mKHdsYW5fbGxjX3QpICsgc2l6ZW9mKHdsYW5fc25hcF90KSkgJiYKLQkJICAgIChlX2xsYy0+ZHNhcCA9PSAweGFhKSAmJgotCQkgICAgKGVfbGxjLT5zc2FwID09IDB4YWEpICYmCi0JCSAgICAoZV9sbGMtPmN0bCA9PSAweDAzKSApIHsKLQkJV0xBTl9MT0dfREVCVUcoMywgIjgwMi4xaC9SRkMxMDQyIGxlbjogJWRcbiIsIHBheWxvYWRfbGVuZ3RoKTsKKwl9IGVsc2UgaWYgKChwYXlsb2FkX2xlbmd0aCA+PSBzaXplb2Yod2xhbl9sbGNfdCkgKyBzaXplb2Yod2xhbl9zbmFwX3QpKQorCQkgICAmJiAoZV9sbGMtPmRzYXAgPT0gMHhhYSkgJiYgKGVfbGxjLT5zc2FwID09IDB4YWEpCisJCSAgICYmIChlX2xsYy0+Y3RsID09IDB4MDMpKSB7CisJCXByX2RlYnVnKCI4MDIuMWgvUkZDMTA0MiBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CiAJCS8qIGl0J3MgYW4gODAyLjFoIGZyYW1lIHx8IChhbiBSRkMxMDQyICYmIHByb3RvY29sIGlzIG5vdCBpbiBTVFQpICovCiAJCS8qIGJ1aWxkIGEgRElYSUkgKyBSRkM4OTQgKi8KIApAQCAtNDM3LDEwICs0MTksOSBAQAogCQkgICAgPiBuZXRkZXYtPm10dSkgewogCQkJLyogQSBib2d1cyBsZW5ndGggZXRoZnJtIGhhcyBiZWVuIHNlbnQuICovCiAJCQkvKiBJcyBzb21lb25lIHRyeWluZyBhbiBvZmxvdyBhdHRhY2s/ICovCi0JCQlXTEFOX0xPR19FUlJPUigiRElYSUkgZnJhbWUgdG9vIGxhcmdlICglbGQgPiAlZClcbiIsCi0JCQkJCShsb25nIGludCkgKHBheWxvYWRfbGVuZ3RoIC0gc2l6ZW9mKHdsYW5fbGxjX3QpIC0KLQkJCQkJCSAgICBzaXplb2Yod2xhbl9zbmFwX3QpKSwKLQkJCQkJbmV0ZGV2LT5tdHUpOworCQkJcHJpbnRrKEtFUk5fRVJSICJESVhJSSBmcmFtZSB0b28gbGFyZ2UgKCVsZCA+ICVkKVxuIiwKKwkJCSAgICAgICAobG9uZyBpbnQpKHBheWxvYWRfbGVuZ3RoIC0gc2l6ZW9mKHdsYW5fbGxjX3QpIC0KKwkJCQkJICBzaXplb2Yod2xhbl9zbmFwX3QpKSwgbmV0ZGV2LT5tdHUpOwogCQkJcmV0dXJuIDE7CiAJCX0KIApAQCAtNDYyLDE5ICs0NDMsMTggQEAKIAkJLyogY2hvcCBvZmYgdGhlIDgwMi4xMSBDUkMgKi8KIAkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIFdMQU5fQ1JDX0xFTik7CiAJfSBlbHNlIHsKLQkJV0xBTl9MT0dfREVCVUcoMywgIk5PTi1FTkNBUCBsZW46ICVkXG4iLCBwYXlsb2FkX2xlbmd0aCk7CisJCXByX2RlYnVnKCJOT04tRU5DQVAgbGVuOiAlZFxuIiwgcGF5bG9hZF9sZW5ndGgpOwogCQkvKiBhbnkgTk9OLUVOQ0FQICovCiAJCS8qIGl0J3MgYSBnZW5lcmljIDgwMjExK0xMQyBvciBJUFggJ1JhdyA4MDIuMycgKi8KIAkJLyogIGJ1aWxkIGFuIDgwMi4zIGZyYW1lICovCiAJCS8qIGFsbG9jYXRlIHNwYWNlIGFuZCBzZXR1cCBob3N0YnVmICovCiAKIAkJLyogVGVzdCBmb3IgYW4gb3Zlcmxlbmd0aCBmcmFtZSAqLwotCQlpZiAoIHBheWxvYWRfbGVuZ3RoID4gbmV0ZGV2LT5tdHUgKSB7CisJCWlmIChwYXlsb2FkX2xlbmd0aCA+IG5ldGRldi0+bXR1KSB7CiAJCQkvKiBBIGJvZ3VzIGxlbmd0aCBldGhmcm0gaGFzIGJlZW4gc2VudC4gKi8KIAkJCS8qIElzIHNvbWVvbmUgdHJ5aW5nIGFuIG9mbG93IGF0dGFjaz8gKi8KLQkJCVdMQU5fTE9HX0VSUk9SKCJPVEhFUiBmcmFtZSB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAotCQkJCXBheWxvYWRfbGVuZ3RoLAotCQkJCW5ldGRldi0+bXR1KTsKKwkJCXByaW50ayhLRVJOX0VSUiAiT1RIRVIgZnJhbWUgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKKwkJCSAgICAgICBwYXlsb2FkX2xlbmd0aCwgbmV0ZGV2LT5tdHUpOwogCQkJcmV0dXJuIDE7CiAJCX0KIApAQCAtNDkyLDI2ICs0NzIsMjYgQEAKIAogCX0KIAotICAgICAgICAvKgotICAgICAgICAgKiBOb3RlIHRoYXQgZXRoX3R5cGVfdHJhbnMoKSBleHBlY3RzIGFuIHNrYiB3LyBza2ItPmRhdGEgcG9pbnRpbmcKLSAgICAgICAgICogYXQgdGhlIE1BQyBoZWFkZXIsIGl0IHRoZW4gc2V0cyB0aGUgZm9sbG93aW5nIHNrYiBtZW1iZXJzOgotICAgICAgICAgKiBza2ItPm1hY19oZWFkZXIsCi0gICAgICAgICAqIHNrYi0+ZGF0YSwgYW5kCi0gICAgICAgICAqIHNrYi0+cGt0X3R5cGUuCi0gICAgICAgICAqIEl0IHRoZW4gX3JldHVybnNfIHRoZSB2YWx1ZSB0aGF0IF93ZSdyZV8gc3VwcG9zZWQgdG8gc3R1ZmYgaW4KLSAgICAgICAgICogc2tiLT5wcm90b2NvbC4gIFRoaXMgaXMgbnV0cy4KLSAgICAgICAgICovCisJLyoKKwkgKiBOb3RlIHRoYXQgZXRoX3R5cGVfdHJhbnMoKSBleHBlY3RzIGFuIHNrYiB3LyBza2ItPmRhdGEgcG9pbnRpbmcKKwkgKiBhdCB0aGUgTUFDIGhlYWRlciwgaXQgdGhlbiBzZXRzIHRoZSBmb2xsb3dpbmcgc2tiIG1lbWJlcnM6CisJICogc2tiLT5tYWNfaGVhZGVyLAorCSAqIHNrYi0+ZGF0YSwgYW5kCisJICogc2tiLT5wa3RfdHlwZS4KKwkgKiBJdCB0aGVuIF9yZXR1cm5zXyB0aGUgdmFsdWUgdGhhdCBfd2UncmVfIHN1cHBvc2VkIHRvIHN0dWZmIGluCisJICogc2tiLT5wcm90b2NvbC4gIFRoaXMgaXMgbnV0cy4KKwkgKi8KIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCi0gICAgICAgIC8qIGprcmllZ2w6IHByb2Nlc3Mgc2lnbmFsIGFuZCBub2lzZSBhcyBzZXQgaW4gaGZhMzg0eF9pbnRfcngoKSAqLworCS8qIGprcmllZ2w6IHByb2Nlc3Mgc2lnbmFsIGFuZCBub2lzZSBhcyBzZXQgaW4gaGZhMzg0eF9pbnRfcngoKSAqLwogCS8qIGprcmllZ2w6IG9ubHkgcHJvY2VzcyBzaWduYWwvbm9pc2UgaWYgcmVxdWVzdGVkIGJ5IGl3c3B5ICovCi0gICAgICAgIGlmICh3bGFuZGV2LT5zcHlfbnVtYmVyKQotICAgICAgICAgICAgICAgIG9yaW5vY29fc3B5X2dhdGhlcih3bGFuZGV2LCBldGhfaGRyKHNrYiktPmhfc291cmNlLCBQODAyMTFTS0JfUlhNRVRBKHNrYikpOworCWlmICh3bGFuZGV2LT5zcHlfbnVtYmVyKQorCQlvcmlub2NvX3NweV9nYXRoZXIod2xhbmRldiwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwKKwkJCQkgICBQODAyMTFTS0JfUlhNRVRBKHNrYikpOwogCiAJLyogRnJlZSB0aGUgbWV0YWRhdGEgKi8KIAlwODAyMTFza2JfcnhtZXRhX2RldGFjaChza2IpOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTM2LDExICs1MTYsMTEgQEAKIAkvKiBBbHdheXMgcmV0dXJuIGZvdW5kIGZvciBub3cuICBUaGlzIGlzIHRoZSBiZWhhdmlvciB1c2VkIGJ5IHRoZSAqLwogCS8qICBab29tIFdpbjk1IGRyaXZlciB3aGVuIDgwMi4xaCBtb2RlIGlzIHNlbGVjdGVkICovCiAJLyogVE9ETzogSWYgbmVjZXNzYXJ5LCBhZGQgYW4gYWN0dWFsIHNlYXJjaCB3ZSdsbCBwcm9iYWJseQotCQkgbmVlZCB0aGlzIHRvIG1hdGNoIHRoZSBDTUFDJ3Mgd2F5IG9mIGRvaW5nIHRoaW5ncy4KLQkJIE5lZWQgdG8gZG8gc29tZSB0ZXN0aW5nIHRvIGNvbmZpcm0uCi0JKi8KKwkgICBuZWVkIHRoaXMgdG8gbWF0Y2ggdGhlIENNQUMncyB3YXkgb2YgZG9pbmcgdGhpbmdzLgorCSAgIE5lZWQgdG8gZG8gc29tZSB0ZXN0aW5nIHRvIGNvbmZpcm0uCisJICovCiAKLQlpZiAocHJvdG8gPT0gMHg4MGYzKSAgLyogQVBQTEVUQUxLICovCisJaWYgKHByb3RvID09IDB4ODBmMykJLyogQVBQTEVUQUxLICovCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC01NjEsMjYgKzU0MSwyNCBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCU1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IG9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkCi1wODAyMTFza2JfcnhtZXRhX2RldGFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBwODAyMTFza2JfcnhtZXRhX2RldGFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXA4MDIxMV9yeG1ldGFfdAkJKnJ4bWV0YTsKLQlwODAyMTFfZnJtbWV0YV90CSpmcm1tZXRhOworCXA4MDIxMV9yeG1ldGFfdCAqcnhtZXRhOworCXA4MDIxMV9mcm1tZXRhX3QgKmZybW1ldGE7CiAKLQlEQkZFTlRFUjsKIAkvKiBTYW5pdHkgY2hlY2tzICovCi0JaWYgKCBza2I9PU5VTEwgKSB7CQkJLyogYmFkIHNrYiAqLwotCQlXTEFOX0xPR19ERUJVRygxLCAiQ2FsbGVkIHcvIG51bGwgc2tiLlxuIik7CisJaWYgKHNrYiA9PSBOVUxMKSB7CS8qIGJhZCBza2IgKi8KKwkJcHJfZGVidWcoIkNhbGxlZCB3LyBudWxsIHNrYi5cbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCWZybW1ldGEgPSBQODAyMTFTS0JfRlJNTUVUQShza2IpOwotCWlmICggZnJtbWV0YSA9PSBOVUxMICkgeyAJCS8qIG5vIG1hZ2ljICovCi0JCVdMQU5fTE9HX0RFQlVHKDEsICJDYWxsZWQgdy8gYmFkIGZybW1ldGEgbWFnaWMuXG4iKTsKKwlpZiAoZnJtbWV0YSA9PSBOVUxMKSB7CS8qIG5vIG1hZ2ljICovCisJCXByX2RlYnVnKCJDYWxsZWQgdy8gYmFkIGZybW1ldGEgbWFnaWMuXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAlyeG1ldGEgPSBmcm1tZXRhLT5yeDsKLQlpZiAoIHJ4bWV0YSA9PSBOVUxMICkgewkJCS8qIGJhZCBtZXRhIHB0ciAqLwotCQlXTEFOX0xPR19ERUJVRygxLCAiQ2FsbGVkIHcvIGJhZCByeG1ldGEgcHRyLlxuIik7CisJaWYgKHJ4bWV0YSA9PSBOVUxMKSB7CS8qIGJhZCBtZXRhIHB0ciAqLworCQlwcl9kZWJ1ZygiQ2FsbGVkIHcvIGJhZCByeG1ldGEgcHRyLlxuIik7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTU5MCw3ICs1NjgsNiBAQAogCS8qIENsZWFyIHNrYi0+Y2IgKi8KIAltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKIGV4aXQ6Ci0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKQEAgLTYxMCwxOSArNTg3LDE2IEBACiAqIENhbGwgY29udGV4dDoKICoJTWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgb3Igbm9uLWludGVycnVwdCBjb250ZXh0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludAotcDgwMjExc2tiX3J4bWV0YV9hdHRhY2goc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCitpbnQgcDgwMjExc2tiX3J4bWV0YV9hdHRhY2goc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50CQkJcmVzdWx0ID0gMDsKLQlwODAyMTFfcnhtZXRhX3QJCSpyeG1ldGE7Ci0JcDgwMjExX2ZybW1ldGFfdAkqZnJtbWV0YTsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOworCXA4MDIxMV9yeG1ldGFfdCAqcnhtZXRhOworCXA4MDIxMV9mcm1tZXRhX3QgKmZybW1ldGE7CiAKIAkvKiBJZiB0aGVzZSBhbHJlYWR5IGhhdmUgbWV0YWRhdGEsIHdlIGVycm9yIG91dCEgKi8KIAlpZiAoUDgwMjExU0tCX1JYTUVUQShza2IpICE9IE5VTEwpIHsKLQkJV0xBTl9MT0dfRVJST1IoIiVzOiBSWG1ldGEgYWxyZWFkeSBhdHRhY2hlZCFcbiIsCi0JCQkJd2xhbmRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFJYbWV0YSBhbHJlYWR5IGF0dGFjaGVkIVxuIiwKKwkJICAgICAgIHdsYW5kZXYtPm5hbWUpOwogCQlyZXN1bHQgPSAwOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtNjMwLDkgKzYwNCw5IEBACiAJLyogQWxsb2NhdGUgdGhlIHJ4bWV0YSAqLwogCXJ4bWV0YSA9IGttYWxsb2Moc2l6ZW9mKHA4MDIxMV9yeG1ldGFfdCksIEdGUF9BVE9NSUMpOwogCi0JaWYgKCByeG1ldGEgPT0gTlVMTCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgcnhtZXRhLlxuIiwKLQkJCQl3bGFuZGV2LT5uYW1lKTsKKwlpZiAocnhtZXRhID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIHJ4bWV0YS5cbiIsCisJCSAgICAgICB3bGFuZGV2LT5uYW1lKTsKIAkJcmVzdWx0ID0gMTsKIAkJZ290byBleGl0OwogCX0KQEAgLTY0NCwxMSArNjE4LDEwIEBACiAKIAkvKiBPdmVybGF5IGEgZnJtbWV0YV90IG9udG8gc2tiLT5jYiAqLwogCW1lbXNldChza2ItPmNiLCAwLCBzaXplb2YocDgwMjExX2ZybW1ldGFfdCkpOwotCWZybW1ldGEgPSAocDgwMjExX2ZybW1ldGFfdCopKHNrYi0+Y2IpOworCWZybW1ldGEgPSAocDgwMjExX2ZybW1ldGFfdCAqKSAoc2tiLT5jYik7CiAJZnJtbWV0YS0+bWFnaWMgPSBQODAyMTFfRlJNTUVUQV9NQUdJQzsKIAlmcm1tZXRhLT5yeCA9IHJ4bWV0YTsKIGV4aXQ6Ci0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC02NjgsMTkgKzY0MSwxNSBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCU1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IG9yIG5vbi1pbnRlcnJ1cHQgY29udGV4dAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkCi1wODAyMTFza2JfZnJlZShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgcDgwMjExc2tiX2ZyZWUoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JcDgwMjExX2ZybW1ldGFfdAkqbWV0YTsKLQlEQkZFTlRFUjsKLQltZXRhID0gUDgwMjExU0tCX0ZSTU1FVEEoc2tiKTsKLQlpZiAoIG1ldGEgJiYgbWV0YS0+cngpIHsKLQkJcDgwMjExc2tiX3J4bWV0YV9kZXRhY2goc2tiKTsKLQl9IGVsc2UgewotCQlXTEFOX0xPR19FUlJPUigiRnJlZWluZyBhbiBza2IgKCVwKSB3LyBubyBmcm1tZXRhLlxuIiwgc2tiKTsKLQl9CisJcDgwMjExX2ZybW1ldGFfdCAqbWV0YTsKIAorCW1ldGEgPSBQODAyMTFTS0JfRlJNTUVUQShza2IpOworCWlmIChtZXRhICYmIG1ldGEtPnJ4KQorCQlwODAyMTFza2JfcnhtZXRhX2RldGFjaChza2IpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJGcmVlaW5nIGFuIHNrYiAoJXApIHcvIG5vIGZybW1ldGEuXG4iLCBza2IpOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKLQlEQkZFWElUOwogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuaAppbmRleCA1MzhlOWJkLi42ZmUxNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oCkBAIC01MywxMzQgKzUzLDEwOSBAQAogI2lmbmRlZiBfTElOVVhfUDgwMjExQ09OVl9ICiAjZGVmaW5lIF9MSU5VWF9QODAyMTFDT05WX0gKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIENvbnN0YW50cyAqLwotCiAjZGVmaW5lIFdMQU5fRVRIQUREUl9MRU4JNgogI2RlZmluZSBXTEFOX0lFRUVfT1VJX0xFTgkzCiAKICNkZWZpbmUgV0xBTl9FVEhDT05WX0VOQ0FQCTEKLSNkZWZpbmUgV0xBTl9FVEhDT05WX1JGQzEwNDIJMgogI2RlZmluZSBXTEFOX0VUSENPTlZfODAyMWgJMwogCi0jZGVmaW5lIFdMQU5fTUlOX0VUSEZSTV9MRU4JNjAKLSNkZWZpbmUgV0xBTl9NQVhfRVRIRlJNX0xFTgkxNTE0CiAjZGVmaW5lIFdMQU5fRVRISERSX0xFTgkJMTQKIAogI2RlZmluZSBQODAyMTFDQVBUVVJFX1ZFUlNJT04JMHg4MDIxMTAwMQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KICNkZWZpbmUJUDgwMjExX0ZSTU1FVEFfTUFHSUMJCTB4ODAyMTEwCiAKICNkZWZpbmUgUDgwMjExU0tCX0ZSTU1FVEEocykgXAotCSgoKCgocDgwMjExX2ZybW1ldGFfdCopKChzKS0+Y2IpKS0+bWFnaWMpPT1QODAyMTFfRlJNTUVUQV9NQUdJQykgPyBcCi0JCSgocDgwMjExX2ZybW1ldGFfdCopKChzKS0+Y2IpKSA6IFwKKwkoKCgoKHA4MDIxMV9mcm1tZXRhX3QgKikoKHMpLT5jYikpLT5tYWdpYykgPT0gUDgwMjExX0ZSTU1FVEFfTUFHSUMpID8gXAorCQkoKHA4MDIxMV9mcm1tZXRhX3QgKikoKHMpLT5jYikpIDogXAogCQkoTlVMTCkpCiAKICNkZWZpbmUgUDgwMjExU0tCX1JYTUVUQShzKSBcCi0JKFA4MDIxMVNLQl9GUk1NRVRBKChzKSkgPyAgUDgwMjExU0tCX0ZSTU1FVEEoKHMpKS0+cnggOiAoKHA4MDIxMV9yeG1ldGFfdCopKE5VTEwpKSkKKwkoUDgwMjExU0tCX0ZSTU1FVEEoKHMpKSA/ICBQODAyMTFTS0JfRlJNTUVUQSgocykpLT5yeCA6ICgocDgwMjExX3J4bWV0YV90ICopKE5VTEwpKSkKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExX3J4bWV0YQotewotCXN0cnVjdCB3bGFuZGV2aWNlCSp3bGFuZGV2OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExX3J4bWV0YSB7CisJc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXY7CiAKLQl1NjQJbWFjdGltZTsJLyogSGktcmV6IE1BQy1zdXBwbGllZCB0aW1lIHZhbHVlICovCi0JdTY0CWhvc3R0aW1lOwkvKiBCZXN0LXJleiBob3N0IHN1cHBsaWVkIHRpbWUgdmFsdWUgKi8KKwl1NjQgbWFjdGltZTsJCS8qIEhpLXJleiBNQUMtc3VwcGxpZWQgdGltZSB2YWx1ZSAqLworCXU2NCBob3N0dGltZTsJCS8qIEJlc3QtcmV6IGhvc3Qgc3VwcGxpZWQgdGltZSB2YWx1ZSAqLwogCi0JdW5zaWduZWQgaW50CXJ4cmF0ZTsJCS8qIFJlY2VpdmUgZGF0YSByYXRlIGluIDEwMGticHMgKi8KLQl1bnNpZ25lZCBpbnQJcHJpb3JpdHk7CS8qIDAtMTUsIDA9Y29udGVudGlvbiwgNj1DRiAqLwotCWludAlzaWduYWw7CQkvKiBBbiBTU0ksIHNlZSBwODAyMTFuZXRkZXYuaCAqLwotCWludAlub2lzZTsJCS8qIEFuIFNTSSwgc2VlIHA4MDIxMW5ldGRldi5oICovCi0JdW5zaWduZWQgaW50CWNoYW5uZWw7CS8qIFJlY2VpdmUgY2hhbm5lbCAobW9zdGx5IGZvciBzbmlmcykgKi8KLQl1bnNpZ25lZCBpbnQJcHJlYW1ibGU7CS8qIFA4MDIxMUVOVU1fcHJlYW1ibGV0eXBlXyogKi8KLQl1bnNpZ25lZCBpbnQJZW5jb2Rpbmc7CS8qIFA4MDIxMUVOVU1fZW5jb2RpbmdfKiAqLworCXVuc2lnbmVkIGludCByeHJhdGU7CS8qIFJlY2VpdmUgZGF0YSByYXRlIGluIDEwMGticHMgKi8KKwl1bnNpZ25lZCBpbnQgcHJpb3JpdHk7CS8qIDAtMTUsIDA9Y29udGVudGlvbiwgNj1DRiAqLworCWludCBzaWduYWw7CQkvKiBBbiBTU0ksIHNlZSBwODAyMTFuZXRkZXYuaCAqLworCWludCBub2lzZTsJCS8qIEFuIFNTSSwgc2VlIHA4MDIxMW5ldGRldi5oICovCisJdW5zaWduZWQgaW50IGNoYW5uZWw7CS8qIFJlY2VpdmUgY2hhbm5lbCAobW9zdGx5IGZvciBzbmlmcykgKi8KKwl1bnNpZ25lZCBpbnQgcHJlYW1ibGU7CS8qIFA4MDIxMUVOVU1fcHJlYW1ibGV0eXBlXyogKi8KKwl1bnNpZ25lZCBpbnQgZW5jb2Rpbmc7CS8qIFA4MDIxMUVOVU1fZW5jb2RpbmdfKiAqLwogCiB9IHA4MDIxMV9yeG1ldGFfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2ZybW1ldGEKLXsKLQl1bnNpZ25lZCBpbnQJCQltYWdpYzsKLQlwODAyMTFfcnhtZXRhX3QJCSpyeDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9mcm1tZXRhIHsKKwl1bnNpZ25lZCBpbnQgbWFnaWM7CisJcDgwMjExX3J4bWV0YV90ICpyeDsKIH0gcDgwMjExX2ZybW1ldGFfdDsKIAogdm9pZCBwODAyMTFza2JfZnJlZShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgcDgwMjExc2tiX3J4bWV0YV9hdHRhY2goc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBwODAyMTFza2JfcnhtZXRhX2RldGFjaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFR5cGVzICovCi0KIC8qCiAgKiBGcmFtZSBjYXB0dXJlIGhlYWRlci4gIChTZWUgZG9jL2NhcHR1cmVmcm0udHh0KQogICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFfY2FwaGRyCi17Ci0JdTMyCQl2ZXJzaW9uOwotCXUzMgkJbGVuZ3RoOwotCXU2NAkJbWFjdGltZTsKLQl1NjQJCWhvc3R0aW1lOwotCXUzMgkJcGh5dHlwZTsKLQl1MzIJCWNoYW5uZWw7Ci0JdTMyCQlkYXRhcmF0ZTsKLQl1MzIJCWFudGVubmE7Ci0JdTMyCQlwcmlvcml0eTsKLQl1MzIJCXNzaV90eXBlOwotCXMzMgkJc3NpX3NpZ25hbDsKLQlzMzIJCXNzaV9ub2lzZTsKLQl1MzIJCXByZWFtYmxlOwotCXUzMgkJZW5jb2Rpbmc7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFfY2FwaGRyIHsKKwl1MzIgdmVyc2lvbjsKKwl1MzIgbGVuZ3RoOworCXU2NCBtYWN0aW1lOworCXU2NCBob3N0dGltZTsKKwl1MzIgcGh5dHlwZTsKKwl1MzIgY2hhbm5lbDsKKwl1MzIgZGF0YXJhdGU7CisJdTMyIGFudGVubmE7CisJdTMyIHByaW9yaXR5OworCXUzMiBzc2lfdHlwZTsKKwlzMzIgc3NpX3NpZ25hbDsKKwlzMzIgc3NpX25vaXNlOworCXUzMiBwcmVhbWJsZTsKKwl1MzIgZW5jb2Rpbmc7CiB9IHA4MDIxMV9jYXBoZHJfdDsKIAogLyogYnVmZmVyIGZyZWUgbWV0aG9kIHBvaW50ZXIgdHlwZSAqLwotdHlwZWRlZiB2b2lkICgqIGZyZWVidWZfbWV0aG9kX3QpKHZvaWQgKmJ1ZiwgaW50IHNpemUpOwordHlwZWRlZiB2b2lkICgqZnJlZWJ1Zl9tZXRob2RfdCkgKHZvaWQgKmJ1ZiwgaW50IHNpemUpOwogCiB0eXBlZGVmIHN0cnVjdCBwODAyMTFfbWV0YXdlcCB7Ci0Jdm9pZCAgKmRhdGE7CisJdm9pZCAqZGF0YTsKIAl1OCBpdls0XTsKIAl1OCBpY3ZbNF07CiB9IHA4MDIxMV9tZXRhd2VwX3Q7CiAKIC8qIGxvY2FsIGV0aGVyIGhlYWRlciB0eXBlICovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2V0aGhkcgotewotCXU4CWRhZGRyW1dMQU5fRVRIQUREUl9MRU5dOwotCXU4CXNhZGRyW1dMQU5fRVRIQUREUl9MRU5dOwotCXUxNgl0eXBlOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2V0aGhkcl90OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9ldGhoZHIgeworCXU4IGRhZGRyW1dMQU5fRVRIQUREUl9MRU5dOworCXU4IHNhZGRyW1dMQU5fRVRIQUREUl9MRU5dOworCXUxNiB0eXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9ldGhoZHJfdDsKIAogLyogbG9jYWwgbGxjIGhlYWRlciB0eXBlICovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2xsYwotewotCXU4CWRzYXA7Ci0JdTgJc3NhcDsKLQl1OAljdGw7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5fbGxjX3Q7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2xsYyB7CisJdTggZHNhcDsKKwl1OCBzc2FwOworCXU4IGN0bDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHdsYW5fbGxjX3Q7CiAKIC8qIGxvY2FsIHNuYXAgaGVhZGVyIHR5cGUgKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fc25hcAotewotCXU4CW91aVtXTEFOX0lFRUVfT1VJX0xFTl07Ci0JdTE2CXR5cGU7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5fc25hcF90OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9zbmFwIHsKKwl1OCBvdWlbV0xBTl9JRUVFX09VSV9MRU5dOworCXUxNiB0eXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9zbmFwX3Q7CiAKIC8qIENpcmN1bGFyIGluY2x1ZGUgdHJpY2sgKi8KIHN0cnVjdCB3bGFuZGV2aWNlOwogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRXh0ZXJucyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLypGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KLQotaW50IHNrYl9wODAyMTFfdG9fZXRoZXIoIHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCB1MzIgZXRoY29udiwKLQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBza2JfZXRoZXJfdG9fcDgwMjExKCBzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgdTMyIGV0aGNvbnYsCi0JCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAotCQkJIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXAgKTsKK2ludCBza2JfcDgwMjExX3RvX2V0aGVyKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCB1MzIgZXRoY29udiwKKwkJCXN0cnVjdCBza19idWZmICpza2IpOworaW50IHNrYl9ldGhlcl90b19wODAyMTEoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHUzMiBldGhjb252LAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAorCQkJcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CiAKIGludCBwODAyMTFfc3R0X2ZpbmRwcm90byh1MTYgcHJvdG8pOwotaW50IHA4MDIxMV9zdHRfYWRkcHJvdG8odTE2IHByb3RvKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFoZHIuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWhkci5oCmluZGV4IDcyZjEyYWYuLmRlZDQ3NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWhkci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWhkci5oCkBAIC02Myw0MyArNjMsMjMgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBTeXN0ZW0gSW5jbHVkZXMgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBQcm9qZWN0IEluY2x1ZGVzICovCiAKLSNpZm5kZWYgIF9XTEFOX0NPTVBBVF9ICi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKLSNlbmRpZgogCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBDb25zdGFudHMgKi8KIAogLyotLS0gU2l6ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBXTEFOX0FERFJfTEVOCQkJNgogI2RlZmluZSBXTEFOX0NSQ19MRU4JCQk0CiAjZGVmaW5lIFdMQU5fQlNTSURfTEVOCQkJNgotI2RlZmluZSBXTEFOX0JTU19UU19MRU4JCQk4CiAjZGVmaW5lIFdMQU5fSERSX0EzX0xFTgkJCTI0CiAjZGVmaW5lIFdMQU5fSERSX0E0X0xFTgkJCTMwCiAjZGVmaW5lIFdMQU5fU1NJRF9NQVhMRU4JCTMyCiAjZGVmaW5lIFdMQU5fREFUQV9NQVhMRU4JCTIzMTIKLSNkZWZpbmUgV0xBTl9BM0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIFdMQU5fREFUQV9NQVhMRU4gKyBXTEFOX0NSQ19MRU4pCi0jZGVmaW5lIFdMQU5fQTRGUl9NQVhMRU4JCShXTEFOX0hEUl9BNF9MRU4gKyBXTEFOX0RBVEFfTUFYTEVOICsgV0xBTl9DUkNfTEVOKQotI2RlZmluZSBXTEFOX0JFQUNPTl9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAzMzQpCi0jZGVmaW5lIFdMQU5fQVRJTV9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAwKQotI2RlZmluZSBXTEFOX0RJU0FTU09DX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDIpCi0jZGVmaW5lIFdMQU5fQVNTT0NSRVFfRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgNDgpCi0jZGVmaW5lIFdMQU5fQVNTT0NSRVNQX0ZSX01BWExFTgkoV0xBTl9IRFJfQTNfTEVOICsgMTYpCi0jZGVmaW5lIFdMQU5fUkVBU1NPQ1JFUV9GUl9NQVhMRU4JKFdMQU5fSERSX0EzX0xFTiArIDU0KQotI2RlZmluZSBXTEFOX1JFQVNTT0NSRVNQX0ZSX01BWExFTgkoV0xBTl9IRFJfQTNfTEVOICsgMTYpCi0jZGVmaW5lIFdMQU5fUFJPQkVSRVFfRlJfTUFYTEVOCQkoV0xBTl9IRFJfQTNfTEVOICsgNDQpCi0jZGVmaW5lIFdMQU5fUFJPQkVSRVNQX0ZSX01BWExFTgkoV0xBTl9IRFJfQTNfTEVOICsgNzgpCi0jZGVmaW5lIFdMQU5fQVVUSEVOX0ZSX01BWExFTgkJKFdMQU5fSERSX0EzX0xFTiArIDI2MSkKLSNkZWZpbmUgV0xBTl9ERUFVVEhFTl9GUl9NQVhMRU4JCShXTEFOX0hEUl9BM19MRU4gKyAyKQotI2RlZmluZSBXTEFOX1dFUF9OS0VZUwkJCTQKLSNkZWZpbmUgV0xBTl9XRVBfTUFYS0VZTEVOCQkxMwotI2RlZmluZSBXTEFOX0NIQUxMRU5HRV9JRV9MRU4JCTEzMAotI2RlZmluZSBXTEFOX0NIQUxMRU5HRV9MRU4JCTEyOAogI2RlZmluZSBXTEFOX1dFUF9JVl9MRU4JCQk0CiAjZGVmaW5lIFdMQU5fV0VQX0lDVl9MRU4JCTQKIApAQCAtMTQzLDcgKzEyMyw2IEBACiAjZGVmaW5lIFdMQU5fRlNUWVBFX0NGUE9MTAkJMHgwNgogI2RlZmluZSBXTEFOX0ZTVFlQRV9DRkFDS19DRlBPTEwJMHgwNwogCi0KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBNYWNyb3MgKi8KIApAQCAtMTY2LDk3ICsxNDUsNTEgQEAKIC8qICAgICAgICAgICAgICAgICAgICAgICAgU0VUX0ZDX0ZTVFlQRShXTEFOX0ZTVFlQRV9SVFMpICk7ICAgKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZSBXTEFOX0dFVF9GQ19QVkVSKG4pCSAoKCh1MTYpKG4pKSAmIChCSVQwIHwgQklUMSkpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0ZUWVBFKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQyIHwgQklUMykpID4+IDIpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX0ZTVFlQRShuKQkoKCgodTE2KShuKSkgJiAoQklUNHxCSVQ1fEJJVDZ8QklUNykpID4+IDQpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX1RPRFMobikgCSgoKCh1MTYpKG4pKSAmIChCSVQ4KSkgPj4gOCkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfRlJPTURTKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQ5KSkgPj4gOSkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfTU9SRUZSQUcobikgKCgoKHUxNikobikpICYgKEJJVDEwKSkgPj4gMTApCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX1JFVFJZKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQxMSkpID4+IDExKQotI2RlZmluZSBXTEFOX0dFVF9GQ19QV1JNR1QobikJKCgoKHUxNikobikpICYgKEJJVDEyKSkgPj4gMTIpCi0jZGVmaW5lIFdMQU5fR0VUX0ZDX01PUkVEQVRBKG4pICgoKCh1MTYpKG4pKSAmIChCSVQxMykpID4+IDEzKQotI2RlZmluZSBXTEFOX0dFVF9GQ19JU1dFUChuKQkoKCgodTE2KShuKSkgJiAoQklUMTQpKSA+PiAxNCkKLSNkZWZpbmUgV0xBTl9HRVRfRkNfT1JERVIobikJKCgoKHUxNikobikpICYgKEJJVDE1KSkgPj4gMTUpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX0ZUWVBFKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQoMikgfCBCSVQoMykpKSA+PiAyKQorI2RlZmluZSBXTEFOX0dFVF9GQ19GU1RZUEUobikJKCgoKHUxNikobikpICYgKEJJVCg0KXxCSVQoNSl8QklUKDYpfEJJVCg3KSkpID4+IDQpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX1RPRFMobikgCSgoKCh1MTYpKG4pKSAmIChCSVQoOCkpKSA+PiA4KQorI2RlZmluZSBXTEFOX0dFVF9GQ19GUk9NRFMobikJKCgoKHUxNikobikpICYgKEJJVCg5KSkpID4+IDkpCisjZGVmaW5lIFdMQU5fR0VUX0ZDX0lTV0VQKG4pCSgoKCh1MTYpKG4pKSAmIChCSVQoMTQpKSkgPj4gMTQpCiAKLSNkZWZpbmUgV0xBTl9TRVRfRkNfUFZFUihuKQkoKHUxNikobikpCiAjZGVmaW5lIFdMQU5fU0VUX0ZDX0ZUWVBFKG4pCSgoKHUxNikobikpIDw8IDIpCiAjZGVmaW5lIFdMQU5fU0VUX0ZDX0ZTVFlQRShuKQkoKCh1MTYpKG4pKSA8PCA0KQogI2RlZmluZSBXTEFOX1NFVF9GQ19UT0RTKG4pIAkoKCh1MTYpKG4pKSA8PCA4KQogI2RlZmluZSBXTEFOX1NFVF9GQ19GUk9NRFMobikJKCgodTE2KShuKSkgPDwgOSkKLSNkZWZpbmUgV0xBTl9TRVRfRkNfTU9SRUZSQUcobikgKCgodTE2KShuKSkgPDwgMTApCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX1JFVFJZKG4pCSgoKHUxNikobikpIDw8IDExKQotI2RlZmluZSBXTEFOX1NFVF9GQ19QV1JNR1QobikJKCgodTE2KShuKSkgPDwgMTIpCi0jZGVmaW5lIFdMQU5fU0VUX0ZDX01PUkVEQVRBKG4pICgoKHUxNikobikpIDw8IDEzKQogI2RlZmluZSBXTEFOX1NFVF9GQ19JU1dFUChuKQkoKCh1MTYpKG4pKSA8PCAxNCkKLSNkZWZpbmUgV0xBTl9TRVRfRkNfT1JERVIobikJKCgodTE2KShuKSkgPDwgMTUpCiAKLS8qLS0tIER1cmF0aW9uIE1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIE1hY3JvcyB0byBnZXQvc2V0IHRoZSBiaXRmaWVsZHMgb2YgdGhlIER1cmF0aW9uIEZpZWxkICAgICAgKi8KLS8qICAtIHRoZSBkdXJhdGlvbiB2YWx1ZSBpcyBvbmx5IHZhbGlkIHdoZW4gYml0MTUgaXMgemVybyAgICAgKi8KLS8qICAtIHRoZSBmaXJtd2FyZSBoYW5kbGVzIHRoZXNlIHZhbHVlcywgc28gSSdtIG5vdCBnb2luZyAgICAgKi8KLS8qICAgIHRoZXNlIG1hY3JvcyByaWdodCBub3cuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyotLS0gU2VxdWVuY2UgQ29udHJvbCAgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogTWFjcm9zIHRvIGdldC9zZXQgdGhlIGJpdGZpZWxkcyBvZiB0aGUgU2VxdWVuY2UgQ29udHJvbCAgICAqLwotLyogRmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJHTlVNKG4pICgoKHUxNikobikpICYgKEJJVDB8QklUMXxCSVQyfEJJVDMpKQotI2RlZmluZSBXTEFOX0dFVF9TRVFfU0VRTlVNKG4pICgoKCh1MTYpKG4pKSAmICh+KEJJVDB8QklUMXxCSVQyfEJJVDMpKSkgPj4gNCkKLQotLyotLS0gRGF0YSBwdHIgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogQ3JlYXRlcyBhIHU4KiB0byB0aGUgZGF0YSBwb3J0aW9uIG9mIGEgZnJhbWUgICAgICAgICAgICAqLwotLyogQXNzdW1lcyB5b3UncmUgcGFzc2luZyBpbiBhIHB0ciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZHIqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBXTEFOX0hEUl9BM19EQVRBUChwKSAoKCh1OCopKHApKSArIFdMQU5fSERSX0EzX0xFTikKLSNkZWZpbmUgV0xBTl9IRFJfQTRfREFUQVAocCkgKCgodTgqKShwKSkgKyBXTEFOX0hEUl9BNF9MRU4pCi0KLSNkZWZpbmUgRE9UMTFfUkFURTVfSVNCQVNJQ19HRVQocikgICAgICgoKHU4KShyKSkgJiBCSVQ3KQorI2RlZmluZSBET1QxMV9SQVRFNV9JU0JBU0lDX0dFVChyKSAgICAgKCgodTgpKHIpKSAmIEJJVCg3KSkKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFR5cGVzICovCiAKLS8qIEJTUyBUaW1lc3RhbXAgKi8KLXR5cGVkZWYgdTggd2xhbl9ic3NfdHNfdFtXTEFOX0JTU19UU19MRU5dOwotCiAvKiBHZW5lcmljIDgwMi4xMSBIZWFkZXIgdHlwZXMgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExX2hkcl9hMwotewotCXUxNglmYzsKLQl1MTYJZHVyOwotCXU4CWExW1dMQU5fQUREUl9MRU5dOwotCXU4CWEyW1dMQU5fQUREUl9MRU5dOwotCXU4CWEzW1dMQU5fQUREUl9MRU5dOwotCXUxNglzZXE7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMV9oZHJfYTNfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9oZHJfYTMgeworCXUxNiBmYzsKKwl1MTYgZHVyOworCXU4IGExW0VUSF9BTEVOXTsKKwl1OCBhMltFVEhfQUxFTl07CisJdTggYTNbRVRIX0FMRU5dOworCXUxNiBzZXE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFfaGRyX2EzX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMV9oZHJfYTQKLXsKLQl1MTYJZmM7Ci0JdTE2CWR1cjsKLQl1OAlhMVtXTEFOX0FERFJfTEVOXTsKLQl1OAlhMltXTEFOX0FERFJfTEVOXTsKLQl1OAlhM1tXTEFOX0FERFJfTEVOXTsKLQl1MTYJc2VxOwotCXU4CWE0W1dMQU5fQUREUl9MRU5dOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFfaGRyX2E0X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFfaGRyX2E0IHsKKwl1MTYgZmM7CisJdTE2IGR1cjsKKwl1OCBhMVtFVEhfQUxFTl07CisJdTggYTJbRVRIX0FMRU5dOworCXU4IGEzW0VUSF9BTEVOXTsKKwl1MTYgc2VxOworCXU4IGE0W0VUSF9BTEVOXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMV9oZHJfYTRfdDsKIAotdHlwZWRlZiB1bmlvbiBwODAyMTFfaGRyCi17Ci0JcDgwMjExX2hkcl9hM190CQlhMzsKLQlwODAyMTFfaGRyX2E0X3QJCWE0OwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFfaGRyX3Q7Cit0eXBlZGVmIHVuaW9uIHA4MDIxMV9oZHIgeworCXA4MDIxMV9oZHJfYTNfdCBhMzsKKwlwODAyMTFfaGRyX2E0X3QgYTQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFfaGRyX3Q7CiAKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLS8qIEZyYW1lIGFuZCBoZWFkZXIgbGVuZ2h0IG1hY3JvcyAqLworLyogRnJhbWUgYW5kIGhlYWRlciBsZW5ndGggbWFjcm9zICovCiAKICNkZWZpbmUgV0xBTl9DVExfRlJBTUVMRU4oZnN0eXBlKSAoXAogCShmc3R5cGUpID09IFdMQU5fRlNUWVBFX0JMT0NLQUNLUkVRCT8gMjQgOiBcCkBAIC0yNzEsMjMgKzIwNCwyMiBAQAogI2RlZmluZSBXTEFOX0ZDU19MRU4JCQk0CiAKIC8qIGZ0Y2wgaW4gSE9TVCBvcmRlciAqLwotaW5saW5lIHN0YXRpYyB1MTYgcDgwMjExX2hlYWRlcmxlbih1MTYgZmN0bCkKK3N0YXRpYyBpbmxpbmUgdTE2IHA4MDIxMV9oZWFkZXJsZW4odTE2IGZjdGwpCiB7CiAJdTE2IGhkcmxlbiA9IDA7CiAKLQlzd2l0Y2ggKCBXTEFOX0dFVF9GQ19GVFlQRShmY3RsKSApIHsKKwlzd2l0Y2ggKFdMQU5fR0VUX0ZDX0ZUWVBFKGZjdGwpKSB7CiAJY2FzZSBXTEFOX0ZUWVBFX01HTVQ6CiAJCWhkcmxlbiA9IFdMQU5fSERSX0EzX0xFTjsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0ZUWVBFX0RBVEE6CiAJCWhkcmxlbiA9IFdMQU5fSERSX0EzX0xFTjsKLQkJaWYgKCBXTEFOX0dFVF9GQ19UT0RTKGZjdGwpICYmIFdMQU5fR0VUX0ZDX0ZST01EUyhmY3RsKSApIHsKLQkJCWhkcmxlbiArPSBXTEFOX0FERFJfTEVOOwotCQl9CisJCWlmIChXTEFOX0dFVF9GQ19UT0RTKGZjdGwpICYmIFdMQU5fR0VUX0ZDX0ZST01EUyhmY3RsKSkKKwkJCWhkcmxlbiArPSBFVEhfQUxFTjsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0ZUWVBFX0NUTDoKIAkJaGRybGVuID0gV0xBTl9DVExfRlJBTUVMRU4oV0xBTl9HRVRfRkNfRlNUWVBFKGZjdGwpKSAtCi0JCQlXTEFOX0ZDU19MRU47CisJCSAgICBXTEFOX0ZDU19MRU47CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWhkcmxlbiA9IFdMQU5fSERSX0EzX0xFTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFpb2N0bC5oCmluZGV4IGFkNjdiNjkuLjY0Y2E3ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWlvY3RsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExaW9jdGwuaApAQCAtNjAsMTQgKzYwLDkgQEAKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiAKLQogI2lmbmRlZiBfUDgwMjExSU9DVExfSAogI2RlZmluZSBfUDgwMjExSU9DVExfSAogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogQ29uc3RhbnRzICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBwODAyMTEgaW9jdGwgInJlcXVlc3QiIGNvZGVzLiAgU2VlIGFyZ3VtZW50IDIgb2YgaW9jdGwoMikuICovCiAKICNkZWZpbmUgUDgwMjExX0lGVEVTVAkJKFNJT0NERVZQUklWQVRFICsgMCkKQEAgLTc5LDQ1ICs3NCwxNiBAQAogI2RlZmluZSBQODAyMTFfSU9DVExfTUFHSUMJKDB4NGEyZDQ2NGRVTCkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIE5ldGxpbmsgcHJvdG9jb2wgbnVtYmVycyBmb3IgdGhlIGluZGljYXRpb24gaW50ZXJmYWNlICovCi0KLSNkZWZpbmUgUDgwMjExX05MX1NPQ0tfSU5ECU5FVExJTktfVVNFUlNPQ0sKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIE5ldGxpbmsgbXVsdGljYXN0IGJpdHMgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBtZXNzYWdlcyAqLwotCi0jZGVmaW5lIFA4MDIxMV9OTF9NQ0FTVF9HUlBfTUxNRQlCSVQwCS8qIExvY2FsIHN0YXRpb24gbWVzc2FnZXMgKi8KLSNkZWZpbmUgUDgwMjExX05MX01DQVNUX0dSUF9TTklGRglCSVQxCS8qIFNuaWZmZXIgbWVzc2FnZXMgKi8KLSNkZWZpbmUgUDgwMjExX05MX01DQVNUX0dSUF9ESVNUCUJJVDIJLyogRGlzdHJpYnV0aW9uIHN5c3RlbSBtZXNzYWdlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFR5cGVzICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBBIHB0ciB0byB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSB0eXBlIGlzIHBhc3NlZCBhcyB0aGUgdGhpcmQgKi8KIC8qICBhcmd1bWVudCB0byB0aGUgaW9jdGwgc3lzdGVtIGNhbGwgd2hlbiBpc3N1aW5nIGEgcmVxdWVzdCB0byAqLwogLyogIHRoZSBwODAyMTEgbW9kdWxlLiAqLwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFpb2N0bF9yZXEKLXsKLQljaGFyIAluYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaW9jdGxfcmVxIHsKKwljaGFyIG5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CiAJY2FkZHJfdCBkYXRhOwotCXUzMgltYWdpYzsKLQl1MTYJbGVuOwotCXUzMglyZXN1bHQ7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWlvY3RsX3JlcV90OwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCisJdTMyIG1hZ2ljOworCXUxNiBsZW47CisJdTMyIHJlc3VsdDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMWlvY3RsX3JlcV90OwogCiAjZW5kaWYgLyogX1A4MDIxMUlPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGEuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGEuaAppbmRleCA4YjYxZTVmLi4yZjNjOWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YS5oCkBAIC01OCw1MCArNTgsOCBAQAogI2RlZmluZSBfUDgwMjExTUVUQV9ICiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFByb2plY3QgSW5jbHVkZXMgKi8KIAotI2lmbmRlZiBfV0xBTl9DT01QQVRfSAotI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCi0jZW5kaWYKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIENvbnN0YW50cyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIE1hY3JvcyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbnQgbmFtaW5nICovCi0vKiAgY29udmVudGlvbnMgZm9yIGFsbCB0aGUgZGlmZmVyZW50IG1ldGFkYXRhIGxpc3RzLiAqLwotCi0jZGVmaW5lIE1LUkVRTUVUQU5BTUUobmFtZSkJCXA4MDIxMW1ldGFfICMjIHJlcSAjIyBfICMjIG5hbWUKLSNkZWZpbmUgTUtJTkRNRVRBTkFNRShuYW1lKQkJcDgwMjExbWV0YV8gIyMgaW5kICMjIF8gIyMgbmFtZQotI2RlZmluZSBNS01JQk1FVEFOQU1FKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBtaWIgIyMgXyAjIyBuYW1lCi0jZGVmaW5lIE1LR1JQTUVUQU5BTUUobmFtZSkJCXA4MDIxMW1ldGFfICMjIGdycCAjIyBfICMjIG5hbWUKLQotI2RlZmluZSBNS1JFUU1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyByZXEgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQotI2RlZmluZSBNS0lORE1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBpbmQgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQotI2RlZmluZSBNS01JQk1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBtaWIgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQotI2RlZmluZSBNS0dSUE1FVEFTSVpFKG5hbWUpCQlwODAyMTFtZXRhXyAjIyBncnAgIyMgXyAjIyBuYW1lICMjIF8gIyMgc2l6ZQotCi0jZGVmaW5lIEdFVE1FVEFTSVpFKGFwdHIpCQkoKiooKHUzMioqKShhcHRyKSkpCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBUaGUgZm9sbG93aW5nIGlmZGVmIGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZyBkZWZpbmVzOiAqLwotLyogIFA4MDIxMV9OT0lOQ0xVREVTVFJJTkdTIC0gaWYgZGVmaW5lZCwgYWxsIG1ldGFkYXRhIG5hbWUgZmllbGRzICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgZW1wdHkgc3RyaW5ncyAqLwotCi0jaWZkZWYgUDgwMjExX05PSU5DTFVERVNUUklOR1MKLQkjZGVmaW5lCU1LSVRFTU5BTUUocykJKCIiKQotI2Vsc2UKLQkjZGVmaW5lCU1LSVRFTU5BTUUocykJKHMpCi0jZW5kaWYKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFR5cGVzICovCkBAIC0xMTEsNTkgKzY5LDI5IEBACiAvKiByZXByZXNlbnRhdGlvbiBvZiBjYXRlZ29yeSBsaXN0IG1ldGFkYXRhLCBncm91cCBsaXN0IG1ldGFkYXRhLCAqLwogLyogYW5kIGRhdGEgaXRlbSBtZXRhZGF0YSBmb3IgYm90aCBNaWIgYW5kIE1lc3NhZ2VzLiAqLwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtZXRhCi17Ci0JY2hhcgkJCSpuYW1lOwkJLyogZGF0YSBpdGVtIG5hbWUgKi8KLQl1MzIJCQlkaWQ7CQkvKiBwYXJ0aWFsIGRpZCAqLwotCXUzMgkJCWZsYWdzOwkJLyogc2V0IG9mIHZhcmlvdXMgZmxhZyBiaXRzICovCi0JdTMyCQkJbWluOwkJLyogbWluIHZhbHVlIG9mIGEgQk9VTkRFRGludCAqLwotCXUzMgkJCW1heDsJCS8qIG1heCB2YWx1ZSBvZiBhIEJPVU5ERURpbnQgKi8KK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1ldGEgeworCWNoYXIgKm5hbWU7CQkvKiBkYXRhIGl0ZW0gbmFtZSAqLworCXUzMiBkaWQ7CQkvKiBwYXJ0aWFsIGRpZCAqLworCXUzMiBmbGFnczsJCS8qIHNldCBvZiB2YXJpb3VzIGZsYWcgYml0cyAqLworCXUzMiBtaW47CQkvKiBtaW4gdmFsdWUgb2YgYSBCT1VOREVEaW50ICovCisJdTMyIG1heDsJCS8qIG1heCB2YWx1ZSBvZiBhIEJPVU5ERURpbnQgKi8KIAotCXUzMgkJCW1heGxlbjsJCS8qIG1heGxlbiBvZiBhIE9DVEVUU1RSIG9yIERJU1BMQVlTVFIgKi8KLQl1MzIJCQltaW5sZW47CQkvKiBtaW5sZW4gb2YgYSBPQ1RFVFNUUiBvciBESVNQTEFZU1RSICovCi0JcDgwMjExZW51bV90CQkqZW51bXB0cjsJLyogcHRyIHRvIHRoZSBlbnVtIHR5cGUgZm9yIEVOVU1pbnQgKi8KLQlwODAyMTFfdG90ZXh0X3QJCXRvdGV4dHB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCi0JcDgwMjExX2Zyb210ZXh0X3QJZnJvbXRleHRwdHI7CS8qIHB0ciB0byB0b3RleHQgY29udmVyc2lvbiBmdW5jdGlvbiAqLwotCXA4MDIxMV92YWxpZF90CQl2YWxpZGZ1bnB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCisJdTMyIG1heGxlbjsJCS8qIG1heGxlbiBvZiBhIE9DVEVUU1RSIG9yIERJU1BMQVlTVFIgKi8KKwl1MzIgbWlubGVuOwkJLyogbWlubGVuIG9mIGEgT0NURVRTVFIgb3IgRElTUExBWVNUUiAqLworCXA4MDIxMWVudW1fdCAqZW51bXB0cjsJLyogcHRyIHRvIHRoZSBlbnVtIHR5cGUgZm9yIEVOVU1pbnQgKi8KKwlwODAyMTFfdG90ZXh0X3QgdG90ZXh0cHRyOwkvKiBwdHIgdG8gdG90ZXh0IGNvbnZlcnNpb24gZnVuY3Rpb24gKi8KKwlwODAyMTFfZnJvbXRleHRfdCBmcm9tdGV4dHB0cjsJLyogcHRyIHRvIHRvdGV4dCBjb252ZXJzaW9uIGZ1bmN0aW9uICovCisJcDgwMjExX3ZhbGlkX3QgdmFsaWRmdW5wdHI7CS8qIHB0ciB0byB0b3RleHQgY29udmVyc2lvbiBmdW5jdGlvbiAqLwogfSBwODAyMTFtZXRhX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGdycGxpc3RpdGVtCi17Ci0JY2hhcgkJKm5hbWU7Ci0JcDgwMjExbWV0YV90CSppdGVtbGlzdDsKK3R5cGVkZWYgc3RydWN0IGdycGxpc3RpdGVtIHsKKwljaGFyICpuYW1lOworCXA4MDIxMW1ldGFfdCAqaXRlbWxpc3Q7CiB9IGdycGxpc3RpdGVtX3Q7CiAKLXR5cGVkZWYgc3RydWN0IGNhdGxpc3RpdGVtCi17Ci0JY2hhcgkJKm5hbWU7Ci0JZ3JwbGlzdGl0ZW1fdAkqZ3JwbGlzdDsKK3R5cGVkZWYgc3RydWN0IGNhdGxpc3RpdGVtIHsKKwljaGFyICpuYW1lOworCWdycGxpc3RpdGVtX3QgKmdycGxpc3Q7CiB9IGNhdGxpc3RpdGVtX3Q7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAqLwotdTMyIHA4MDIxMV90ZXh0MmRpZChjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCBjaGFyICpjYXRuYW1lLCBjaGFyICpncnBuYW1lLCBjaGFyICppdGVtbmFtZSk7Ci11MzIgcDgwMjExX3RleHQyY2F0ZGlkKGNhdGxpc3RpdGVtX3QgKmxpc3QsIGNoYXIgKm5hbWUgKTsKLXUzMiBwODAyMTFfdGV4dDJncnBkaWQoZ3JwbGlzdGl0ZW1fdCAqbGlzdCwgY2hhciAqbmFtZSApOwotdTMyIHA4MDIxMV90ZXh0Mml0ZW1kaWQocDgwMjExbWV0YV90ICpsaXN0LCBjaGFyICpuYW1lICk7Ci11MzIgcDgwMjExX2lzdmFsaWRfZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCB1MzIgZGlkICk7Ci11MzIgcDgwMjExX2lzdmFsaWRfY2F0ZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCB1MzIgZGlkICk7Ci11MzIgcDgwMjExX2lzdmFsaWRfZ3JwZGlkKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCB1MzIgZGlkICk7Ci11MzIgcDgwMjExX2lzdmFsaWRfaXRlbWRpZCggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgdTMyIGRpZCApOwotY2F0bGlzdGl0ZW1fdCAqcDgwMjExX2RpZDJjYXQoIGNhdGxpc3RpdGVtX3QgKmNhdGxpc3QsIHUzMiBkaWQgKTsKLWdycGxpc3RpdGVtX3QgKnA4MDIxMV9kaWQyZ3JwKCBjYXRsaXN0aXRlbV90ICpjYXRsaXN0LCB1MzIgZGlkICk7Ci1wODAyMTFtZXRhX3QgKnA4MDIxMV9kaWQyaXRlbSggY2F0bGlzdGl0ZW1fdCAqY2F0bGlzdCwgdTMyIGRpZCApOwotdTMyIHA4MDIxMWl0ZW1fbWF4ZGF0YWxlbiggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCApOwotdTMyIHA4MDIxMV9tZXRhbmFtZTJkaWQoc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgY2hhciAqaXRlbW5hbWUpOwotdTMyIHA4MDIxMWl0ZW1fZ2V0b2Zmc2V0KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkICk7Ci1pbnQgcDgwMjExaXRlbV9nZXR0eXBlKHA4MDIxMW1ldGFfdCAqbWV0YSk7Ci0KICNlbmRpZiAvKiBfUDgwMjExTUVUQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhZGVmLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhZGVmLmgKaW5kZXggY2U0ZmRkNS4uYTI5ZDZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YWRlZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFkZWYuaApAQCAtNDcsMjAgKzQ3LDkgQEAKICNpZm5kZWYgX1A4MDIxMU1LTUVUQURFRl9ICiAjZGVmaW5lIF9QODAyMTFNS01FVEFERUZfSAogCi0KLSNkZWZpbmUgRElEbXNnX2NhdF9kb3QxMXJlcSBcCi0JCQlQODAyMTFESURfTUtTRUNUSU9OKDEpCiAjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9taWJnZXQgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX21pYmdldF9taWJhdHRyaWJ1dGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWliZ2V0X3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfZG90MTFyZXFfbWlic2V0IFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMikpCkBAIC03NSw1NzkgKzY0LDQ4IEBACiAjZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX2Jzc3R5cGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9ic3NpZCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3NzaWQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9zY2FudHlwZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Byb2JlZGVsYXkgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9jaGFubmVsbGlzdCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX21pbmNoYW5uZWx0aW1lIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fbWF4Y2hhbm5lbHRpbWUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDkpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fbnVtYnNzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX2FwcGVuZCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoNSkpCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYnNzaW5kZXggXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3NpZ25hbCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfbm9pc2UgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jzc2lkIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19zc2lkIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19ic3N0eXBlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDcpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iZWFjb25wZXJpb2QgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2R0aW1wZXJpb2QgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oOSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3RpbWVzdGFtcCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2xvY2FsdGltZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2ZoZHdlbGx0aW1lIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZmhob3BzZXQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19maGhvcHBhdHRlcm4gXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTQpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19maGhvcGluZGV4IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE1KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfZHNjaGFubmVsIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2ZwY291bnQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTcpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBwZXJpb2QgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19jZnBtYXhkdXJhdGlvbiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxOSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcGR1cnJlbWFpbmluZyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2lic3NhdGltd2luZG93IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfY2Zwb2xsYWJsZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2NmcG9sbHJlcSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3ByaXZhY3kgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGUxIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDI1KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlMiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyNikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTMgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjcpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGU0IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDI4KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlNSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyOSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX2Jhc2ljcmF0ZTYgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMzApIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c19iYXNpY3JhdGU3IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfYmFzaWNyYXRlOCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlMSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlMiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzNCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlMyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzNSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlNCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzNikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlNSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzNykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlNiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzOCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlNyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzOSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3N1cHByYXRlOCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg0MCkgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnQgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxMykpCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9zc2lkIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9ic3N0eXBlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iZWFjb25wZXJpb2QgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2R0aW1wZXJpb2QgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDQpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2NmcHBlcmlvZCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfY2ZwbWF4ZHVyYXRpb24gXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDYpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2ZoZHdlbGx0aW1lIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9maGhvcHNldCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfZmhob3BwYXR0ZXJuIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg5KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9kc2NoYW5uZWwgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEwKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9pYnNzYXRpbXdpbmRvdyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X3Byb2JlZGVsYXkgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9jZnBvbGxhYmxlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfY2Zwb2xscmVxIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxNCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlMSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTUpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTIgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE2KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGUzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxNykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlNCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMTgpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDE5KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9iYXNpY3JhdGU2IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyMCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfYmFzaWNyYXRlNyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X2Jhc2ljcmF0ZTggXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGUxIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlMiBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjQpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTMgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDI1KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGU0IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyNikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlNSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMjcpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X29wZXJhdGlvbmFscmF0ZTYgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDI4KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMXJlcV9zdGFydF9vcGVyYXRpb25hbHJhdGU3IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDEpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyOSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFyZXFfc3RhcnRfb3BlcmF0aW9uYWxyYXRlOCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMzApIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExcmVxX3N0YXJ0X3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19jYXRfZG90MTFpbmQgXAotCQkJUDgwMjExRElEX01LU0VDVElPTigyKQogI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXV0aGVudGljYXRlIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMSkpCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hdXRoZW50aWNhdGVfcGVlcnN0YWFkZHJlc3MgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfYXV0aGVudGljYXRlX2F1dGhlbnRpY2F0aW9udHlwZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9kZWF1dGhlbnRpY2F0ZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGVfcGVlcnN0YWFkZHJlc3MgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGVhdXRoZW50aWNhdGVfcmVhc29uY29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCiAjZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hc3NvY2lhdGUgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Fzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9hc3NvY2lhdGVfYWlkIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX3JlYXNzb2NpYXRlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkpCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZV9wZWVyc3RhYWRkcmVzcyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19kb3QxMWluZF9yZWFzc29jaWF0ZV9haWQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfcmVhc3NvY2lhdGVfb2xkYXBhZGRyZXNzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQotI2RlZmluZSBESURtc2dfZG90MTFpbmRfZGlzYXNzb2NpYXRlX3BlZXJzdGFhZGRyZXNzIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2RvdDExaW5kX2Rpc2Fzc29jaWF0ZV9yZWFzb25jb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDIpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2NhdF9sbnhyZXEgXAotCQkJUDgwMjExRElEX01LU0VDVElPTigzKQogI2RlZmluZSBESURtc2dfbG54cmVxX2lmc3RhdGUgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9pZnN0YXRlX2lmc3RhdGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX2lmc3RhdGVfcmVzdWx0Y29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCiAjZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMikpCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX2VuYWJsZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX2NoYW5uZWwgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9wcmlzbWhlYWRlciBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX3dsYW5oZWFkZXIgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9rZWVwd2VwZmxhZ3MgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oNSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX3dsYW5zbmlmZl9zdHJpcGZjcyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg2KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX3BhY2tldF90cnVuYyBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg3KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmX3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oOCkgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfbG54cmVxX2hvc3R3ZXAgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgzKSkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9ob3N0d2VwX3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX2hvc3R3ZXBfZGVjcnlwdCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDMpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfaG9zdHdlcF9lbmNyeXB0IFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKICNkZWZpbmUgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHkgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCg0KSkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9jb21tc3F1YWxpdHlfcmVzdWx0Y29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X2RibSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X2xpbmsgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV9sZXZlbCBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X25vaXNlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDUpIHwgMHgwMDAwMDAwMCkKICNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbiBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTigzKSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDUpKQotI2RlZmluZSBESURtc2dfbG54cmVxX2F1dG9qb2luX3NzaWQgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCg1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfbG54cmVxX2F1dG9qb2luX2F1dGh0eXBlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2xueHJlcV9hdXRvam9pbl9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoNSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX2NhdF9wMnJlcSBcCi0JCQlQODAyMTFESURfTUtTRUNUSU9OKDUpCiAjZGVmaW5lIERJRG1zZ19wMnJlcV9yZWFkcGRhIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMikpCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9yZWFkcGRhX3BkYSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgxKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9yZWFkcGRhX3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfc3RhdGUgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxMSkpCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZV9lbmFibGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlX2V4ZWFkZHIgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlX3Jlc3VsdGNvZGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMSkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDMpIHwgMHgwMDAwMDAwMCkKICNkZWZpbmUgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMTIpKQotI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfYWRkciBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEyKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGVfbGVuIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgyKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZV9kYXRhIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSgzKSB8IDB4MDAwMDAwMDApCi0jZGVmaW5lIERJRG1zZ19wMnJlcV9yYW1kbF93cml0ZV9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTIpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCiAjZGVmaW5lIERJRG1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoMTMpKQotI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV9lbmFibGUgXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxMykgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDEpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfcmVzdWx0Y29kZSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDEzKSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMikgfCAweDAwMDAwMDAwKQogI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZSBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSkKLSNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfYWRkciBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV9sZW4gXAotCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oNSkgfCBcCi0JCQlQODAyMTFESURfTUtHUk9VUCgxNCkgfCBcCi0JCQlQODAyMTFESURfTUtJVEVNKDIpIHwgMHgwMDAwMDAwMCkKLSNkZWZpbmUgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfZGF0YSBcCi0JCQkoUDgwMjExRElEX01LU0VDVElPTig1KSB8IFwKLQkJCVA4MDIxMURJRF9NS0dST1VQKDE0KSB8IFwKLQkJCVA4MDIxMURJRF9NS0lURU0oMykgfCAweDAwMDAwMDAwKQotI2RlZmluZSBESURtc2dfcDJyZXFfZmxhc2hkbF93cml0ZV9yZXN1bHRjb2RlIFwKLQkJCShQODAyMTFESURfTUtTRUNUSU9OKDUpIHwgXAotCQkJUDgwMjExRElEX01LR1JPVVAoMTQpIHwgXAotCQkJUDgwMjExRElEX01LSVRFTSg0KSB8IDB4MDAwMDAwMDApCiAjZGVmaW5lIERJRG1pYl9jYXRfZG90MTFzbXQgXAogCQkJUDgwMjExRElEX01LU0VDVElPTigxKQogI2RlZmluZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlIFwKQEAgLTY4NCw4ICsxNDIsNiBAQAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMSkgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCg2KSB8IFwKIAkJCVA4MDIxMURJRF9NS0lURU0oNCkgfCAweDE4MDAwMDAwKQotI2RlZmluZSBESURtaWJfY2F0X2RvdDExbWFjIFwKLQkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMikKICNkZWZpbmUgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGUgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtaWIuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtaWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNkNzJlZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbWliLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyogcDgwMjExbWV0YW1pYi5oCi0qCi0qIE1hY3JvcywgY29uc3QsIHR5cGVzLCBhbmQgZnVuY3MgZm9yIHA4MDIxMSBtaWIgbWV0YWRhdGEKLSoKLSogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogbGludXgtd2xhbgotKgotKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCi0qICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKLSogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKLSogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSoKLSogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKLSogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0qICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCi0qICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSoKLSogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAotKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQotKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCi0qICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKLSogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KLSogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQotKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCi0qICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCi0qIG1hZGUgZGlyZWN0bHkgdG86Ci0qCi0qIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCi0qIGluZm9AbGludXgtd2xhbi5jb20KLSogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQotKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KLSoKLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogVGhpcyBmaWxlIGRlY2xhcmVzIHNvbWUgb2YgdGhlIGNvbnN0YW50cyBhbmQgdHlwZXMgdXNlZCBpbiB2YXJpb3VzCi0qIHBhcnRzIG9mIHRoZSBsaW51eC13bGFuIHN5c3RlbS4KLSoKLSogTm90ZXM6Ci0qICAgLSBDb25zdGFudCB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBIT1NUIGJ5dGUgb3JkZXIuCi0qCi0qIEFsbCBmdW5jdGlvbnMgYW5kIHN0YXRpY3MgZGVjbGFyZWQgaGVyZSBhcmUgaW1wbGVtZW50ZWQgaW4gcDgwMjExdHlwZXMuYwotKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWZuZGVmIF9QODAyMTFNRVRBTUlCX0gKLSNkZWZpbmUgX1A4MDIxMU1FVEFNSUJfSAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogU3lzdGVtIEluY2x1ZGVzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBQcm9qZWN0IEluY2x1ZGVzICovCi0KLSNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBDb25zdGFudHMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBNYWNyb3MgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBUeXBlcyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGV4dGVybmFsIGRlY2xhcmF0aW9uIGZvciB0aGUgbWliICovCi0vKiBjYXRlZ29yeSBtZXRhZGF0YSBsaXN0ICovCi0KLWV4dGVybiBjYXRsaXN0aXRlbV90IG1pYl9jYXRsaXN0W107Ci1leHRlcm4gdTMyIG1pYl9jYXRsaXN0X3NpemU7Ci0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogKi8KLQotI2VuZGlmIC8qIF9QODAyMTFNRVRBTUlCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFtc2cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU2NTllYS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhbXNnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyogcDgwMjExbWV0YW1zZy5oCi0qCi0qIE1hY3JvcywgY29uc3QsIHR5cGVzLCBhbmQgZnVuY3MgZm9yIHA4MDIxMSBtc2cgbWV0YWRhdGEKLSoKLSogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogbGludXgtd2xhbgotKgotKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCi0qICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKLSogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKLSogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSoKLSogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKLSogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0qICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCi0qICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSoKLSogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAotKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQotKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCi0qICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKLSogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KLSogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQotKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCi0qICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCi0qIG1hZGUgZGlyZWN0bHkgdG86Ci0qCi0qIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCi0qIGluZm9AbGludXgtd2xhbi5jb20KLSogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQotKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KLSoKLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogVGhpcyBmaWxlIGRlY2xhcmVzIHNvbWUgb2YgdGhlIGNvbnN0YW50cyBhbmQgdHlwZXMgdXNlZCBpbiB2YXJpb3VzCi0qIHBhcnRzIG9mIHRoZSBsaW51eC13bGFuIHN5c3RlbS4KLSoKLSogTm90ZXM6Ci0qICAgLSBDb25zdGFudCB2YWx1ZXMgYXJlIGFsd2F5cyBpbiBIT1NUIGJ5dGUgb3JkZXIuCi0qCi0qIEFsbCBmdW5jdGlvbnMgYW5kIHN0YXRpY3MgZGVjbGFyZWQgaGVyZSBhcmUgaW1wbGVtZW50ZWQgaW4gcDgwMjExdHlwZXMuYwotKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qLwotCi0jaWZuZGVmIF9QODAyMTFNRVRBTVNHX0gKLSNkZWZpbmUgX1A4MDIxMU1FVEFNU0dfSAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogU3lzdGVtIEluY2x1ZGVzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBQcm9qZWN0IEluY2x1ZGVzICovCi0KLSNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBDb25zdGFudHMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBNYWNyb3MgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBUeXBlcyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGV4dGVybmFsIGRlY2xhcmF0aW9uIGZvciB0aGUgbWVzc2FnZSAqLwotLyogY2F0ZWdvcnkgbWV0YWRhdGEgbGlzdCAqLwotCi1leHRlcm4gY2F0bGlzdGl0ZW1fdCBtc2dfY2F0bGlzdFtdOwotZXh0ZXJuIHUzMiBtc2dfY2F0bGlzdF9zaXplOwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qICovCi0KLSNlbmRpZiAvKiBfUDgwMjExTUVUQU1TR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhc3RydWN0LmgKaW5kZXggZDIyNThiMC4uZGIxMjcxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YXN0cnVjdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFzdHJ1Y3QuaApAQCAtNDcsMjM5ICs0NywyMjMgQEAKICNpZm5kZWYgX1A4MDIxMU1LTUVUQVNUUlVDVF9ICiAjZGVmaW5lIF9QODAyMTFNS01FVEFTVFJVQ1RfSAogCit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0IHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91bmszOTJfdCBtaWJhdHRyaWJ1dGU7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0Ci17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdW5rMzkyX3QJbWliYXR0cmlidXRlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0IHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91bmszOTJfdCBtaWJhdHRyaWJ1dGU7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0Ci17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdW5rMzkyX3QJbWliYXR0cmlidXRlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc2NhbiB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYnNzdHlwZTsKKwlwODAyMTFpdGVtX3BzdHI2X3QgYnNzaWQ7CisJdTggcGFkXzBDWzFdOworCXA4MDIxMWl0ZW1fcHN0cjMyX3Qgc3NpZDsKKwl1OCBwYWRfMURbM107CisJcDgwMjExaXRlbV91aW50MzJfdCBzY2FudHlwZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHByb2JlZGVsYXk7CisJcDgwMjExaXRlbV9wc3RyMTRfdCBjaGFubmVsbGlzdDsKKwl1OCBwYWRfMkNbMV07CisJcDgwMjExaXRlbV91aW50MzJfdCBtaW5jaGFubmVsdGltZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG1heGNoYW5uZWx0aW1lOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG51bWJzczsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGFwcGVuZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYnNzdHlwZQk7Ci0JcDgwMjExaXRlbV9wc3RyNl90CWJzc2lkCTsKLQl1OAlwYWRfMENbMV0JOwotCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7Ci0JdTgJcGFkXzFEWzNdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXNjYW50eXBlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXByb2JlZGVsYXkJOwotCXA4MDIxMWl0ZW1fcHN0cjE0X3QJY2hhbm5lbGxpc3QJOwotCXU4CXBhZF8yQ1sxXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAltaW5jaGFubmVsdGltZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAltYXhjaGFubmVsdGltZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CW51bWJzcwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlhcHBlbmQJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0cyB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYnNzaW5kZXg7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgc2lnbmFsOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgbm9pc2U7CisJcDgwMjExaXRlbV9wc3RyNl90IGJzc2lkOworCXU4IHBhZF8zQ1sxXTsKKwlwODAyMTFpdGVtX3BzdHIzMl90IHNzaWQ7CisJdTggcGFkXzREWzNdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYnNzdHlwZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJlYWNvbnBlcmlvZDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGR0aW1wZXJpb2Q7CisJcDgwMjExaXRlbV91aW50MzJfdCB0aW1lc3RhbXA7CisJcDgwMjExaXRlbV91aW50MzJfdCBsb2NhbHRpbWU7CisJcDgwMjExaXRlbV91aW50MzJfdCBmaGR3ZWxsdGltZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGZoaG9wc2V0OworCXA4MDIxMWl0ZW1fdWludDMyX3QgZmhob3BwYXR0ZXJuOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZmhob3BpbmRleDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGRzY2hhbm5lbDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNmcGNvdW50OworCXA4MDIxMWl0ZW1fdWludDMyX3QgY2ZwcGVyaW9kOworCXA4MDIxMWl0ZW1fdWludDMyX3QgY2ZwbWF4ZHVyYXRpb247CisJcDgwMjExaXRlbV91aW50MzJfdCBjZnBkdXJyZW1haW5pbmc7CisJcDgwMjExaXRlbV91aW50MzJfdCBpYnNzYXRpbXdpbmRvdzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNmcG9sbGFibGU7CisJcDgwMjExaXRlbV91aW50MzJfdCBjZnBvbGxyZXE7CisJcDgwMjExaXRlbV91aW50MzJfdCBwcml2YWN5OworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlMTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTI7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGUzOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlNDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTU7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGU2OworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlNzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTg7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTE7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTI7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTM7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTQ7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTU7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTY7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTc7CisJcDgwMjExaXRlbV91aW50MzJfdCBzdXBwcmF0ZTg7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHMKLXsKLQl1MzIJCW1zZ2NvZGUJOwotCXUzMgkJbXNnbGVuCTsKLQl1OAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlic3NpbmRleAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXNpZ25hbAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlub2lzZQk7Ci0JcDgwMjExaXRlbV9wc3RyNl90CWJzc2lkCTsKLQl1OAlwYWRfM0NbMV0JOwotCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7Ci0JdTgJcGFkXzREWzNdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJzc3R5cGUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmVhY29ucGVyaW9kCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWR0aW1wZXJpb2QJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJdGltZXN0YW1wCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWxvY2FsdGltZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlmaGR3ZWxsdGltZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHNldAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlmaGhvcHBhdHRlcm4JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZmhob3BpbmRleAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlkc2NoYW5uZWwJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJY2ZwY291bnQJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJY2ZwcGVyaW9kCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG1heGR1cmF0aW9uCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcGR1cnJlbWFpbmluZwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlpYnNzYXRpbXdpbmRvdwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxhYmxlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG9sbHJlcQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlwcml2YWN5CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTEJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUzCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTQJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU2CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTcJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlOAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTEJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGUyCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlMwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTQJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU1CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXN1cHByYXRlNgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlzdXBwcmF0ZTcJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJc3VwcHJhdGU4CTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2RvdDExcmVxX3N0YXJ0IHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV9wc3RyMzJfdCBzc2lkOworCXU4IHBhZF8xMkRbM107CisJcDgwMjExaXRlbV91aW50MzJfdCBic3N0eXBlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmVhY29ucGVyaW9kOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZHRpbXBlcmlvZDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNmcHBlcmlvZDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNmcG1heGR1cmF0aW9uOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZmhkd2VsbHRpbWU7CisJcDgwMjExaXRlbV91aW50MzJfdCBmaGhvcHNldDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGZoaG9wcGF0dGVybjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGRzY2hhbm5lbDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGlic3NhdGltd2luZG93OworCXA4MDIxMWl0ZW1fdWludDMyX3QgcHJvYmVkZWxheTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGNmcG9sbGFibGU7CisJcDgwMjExaXRlbV91aW50MzJfdCBjZnBvbGxyZXE7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGUxOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlMjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTM7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGU0OworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlNTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGJhc2ljcmF0ZTY7CisJcDgwMjExaXRlbV91aW50MzJfdCBiYXNpY3JhdGU3OworCXA4MDIxMWl0ZW1fdWludDMyX3QgYmFzaWNyYXRlODsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG9wZXJhdGlvbmFscmF0ZTE7CisJcDgwMjExaXRlbV91aW50MzJfdCBvcGVyYXRpb25hbHJhdGUyOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgb3BlcmF0aW9uYWxyYXRlMzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG9wZXJhdGlvbmFscmF0ZTQ7CisJcDgwMjExaXRlbV91aW50MzJfdCBvcGVyYXRpb25hbHJhdGU1OworCXA4MDIxMWl0ZW1fdWludDMyX3Qgb3BlcmF0aW9uYWxyYXRlNjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG9wZXJhdGlvbmFscmF0ZTc7CisJcDgwMjExaXRlbV91aW50MzJfdCBvcGVyYXRpb25hbHJhdGU4OworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19kb3QxMXJlcV9zdGFydF90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfZG90MTFyZXFfc3RhcnQKLXsKLQl1MzIJCW1zZ2NvZGUJOwotCXUzMgkJbXNnbGVuCTsKLQl1OAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7Ci0JcDgwMjExaXRlbV9wc3RyMzJfdAlzc2lkCTsKLQl1OAlwYWRfMTJEWzNdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJzc3R5cGUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmVhY29ucGVyaW9kCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWR0aW1wZXJpb2QJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJY2ZwcGVyaW9kCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG1heGR1cmF0aW9uCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWZoZHdlbGx0aW1lCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWZoaG9wc2V0CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWZoaG9wcGF0dGVybgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlkc2NoYW5uZWwJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJaWJzc2F0aW13aW5kb3cJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJvYmVkZWxheQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAljZnBvbGxhYmxlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNmcG9sbHJlcQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGUxCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTIJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlMwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU0CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYmFzaWNyYXRlNgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAliYXNpY3JhdGU3CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWJhc2ljcmF0ZTgJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlMQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGUyCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTMJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNAk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU1CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CW9wZXJhdGlvbmFscmF0ZTYJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJb3BlcmF0aW9uYWxyYXRlNwk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlvcGVyYXRpb25hbHJhdGU4CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfZG90MTFyZXFfc3RhcnRfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZSB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgaWZzdGF0ZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJaWZzdGF0ZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZiB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZW5hYmxlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgY2hhbm5lbDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHByaXNtaGVhZGVyOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgd2xhbmhlYWRlcjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGtlZXB3ZXBmbGFnczsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHN0cmlwZmNzOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcGFja2V0X3RydW5jOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfd2xhbnNuaWZmCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZW5hYmxlCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWNoYW5uZWwJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcHJpc21oZWFkZXIJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJd2xhbmhlYWRlcgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlrZWVwd2VwZmxhZ3MJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJc3RyaXBmY3MJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcGFja2V0X3RydW5jCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwIHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZGVjcnlwdDsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGVuY3J5cHQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXBfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlkZWNyeXB0CTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWVuY3J5cHQJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX2hvc3R3ZXBfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5IHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworCXA4MDIxMWl0ZW1fdWludDMyX3QgZGJtOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbGluazsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGxldmVsOworCXA4MDIxMWl0ZW1fdWludDMyX3Qgbm9pc2U7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eQotewotCXUzMgkJbXNnY29kZQk7Ci0JdTMyCQltc2dsZW4JOwotCXU4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZGJtCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWxpbmsJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJbGV2ZWwJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJbm9pc2UJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbiB7CisJdTMyIG1zZ2NvZGU7CisJdTMyIG1zZ2xlbjsKKwl1OCBkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOworCXA4MDIxMWl0ZW1fcHN0cjMyX3Qgc3NpZDsKKwl1OCBwYWRfMTlEWzNdOworCXA4MDIxMWl0ZW1fdWludDMyX3QgYXV0aHR5cGU7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fcHN0cjMyX3QJc3NpZAk7Ci0JdTgJcGFkXzE5RFszXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlhdXRodHlwZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JlYWRwZGEgeworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKKwlwODAyMTFpdGVtX3VuazEwMjRfdCBwZGE7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX3AycmVxX3JlYWRwZGFfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JlYWRwZGEKLXsKLQl1MzIJCW1zZ2NvZGUJOwotCXUzMgkJbXNnbGVuCTsKLQl1OAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7Ci0JcDgwMjExaXRlbV91bmsxMDI0X3QJcGRhCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CXJlc3VsdGNvZGUJOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFtc2dfcDJyZXFfcmVhZHBkYV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlIHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91aW50MzJfdCBlbmFibGU7CisJcDgwMjExaXRlbV91aW50MzJfdCBleGVhZGRyOworCXA4MDIxMWl0ZW1fdWludDMyX3QgcmVzdWx0Y29kZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ19wMnJlcV9yYW1kbF9zdGF0ZV90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmFtZGxfc3RhdGUKLXsKLQl1MzIJCW1zZ2NvZGUJOwotCXUzMgkJbXNnbGVuCTsKLQl1OAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAllbmFibGUJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJZXhlYWRkcgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGUgeworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGFkZHI7CisJcDgwMjExaXRlbV91aW50MzJfdCBsZW47CisJcDgwMjExaXRlbV91bms0MDk2X3QgZGF0YTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGVfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlCi17Ci0JdTMyCQltc2djb2RlCTsKLQl1MzIJCW1zZ2xlbgk7Ci0JdTgJCWRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF0JOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJYWRkcgk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlsZW4JOwotCXA4MDIxMWl0ZW1fdW5rNDA5Nl90CWRhdGEJOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJcmVzdWx0Y29kZQk7Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ19wMnJlcV9yYW1kbF93cml0ZV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGUgeworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IGVuYWJsZTsKKwlwODAyMTFpdGVtX3VpbnQzMl90IHJlc3VsdGNvZGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV90OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZQotewotCXUzMgkJbXNnY29kZQk7Ci0JdTMyCQltc2dsZW4JOwotCXU4CQlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWVuYWJsZQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGVfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGUKLXsKLQl1MzIJCW1zZ2NvZGUJOwotCXUzMgkJbXNnbGVuCTsKLQl1OAkJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlhZGRyCTsKLQlwODAyMTFpdGVtX3VpbnQzMl90CWxlbgk7Ci0JcDgwMjExaXRlbV91bms0MDk2X3QJZGF0YQk7Ci0JcDgwMjExaXRlbV91aW50MzJfdAlyZXN1bHRjb2RlCTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlIHsKKwl1MzIgbXNnY29kZTsKKwl1MzIgbXNnbGVuOworCXU4IGRldm5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CisJcDgwMjExaXRlbV91aW50MzJfdCBhZGRyOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbGVuOworCXA4MDIxMWl0ZW1fdW5rNDA5Nl90IGRhdGE7CisJcDgwMjExaXRlbV91aW50MzJfdCByZXN1bHRjb2RlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGVfdDsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmgKaW5kZXggNmNjMTZjMy4uNjIzNWZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1nbXQuaApAQCAtMTAxLDE0ICsxMDEsOCBAQAogI2RlZmluZSBfUDgwMjExTUdNVF9ICiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFByb2plY3QgSW5jbHVkZXMgKi8KIAotI2lmbmRlZiAgX1dMQU5fQ09NUEFUX0gKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotI2VuZGlmCiAKICNpZm5kZWYgIF9QODAyMTFIRFJfSAogI2luY2x1ZGUgInA4MDIxMWhkci5oIgpAQCAtMTYwLDggKzE1NCw2IEBACiAjZGVmaW5lIFdMQU5fTUdNVF9TVEFUVVNfQVNTT0NfREVOSUVEX05PUEJDQwkyMAogI2RlZmluZSBXTEFOX01HTVRfU1RBVFVTX0FTU09DX0RFTklFRF9OT0FHSUxJVFkJMjEKIAotCi0KIC8qLS0gQXV0aCBBbGdvcml0aG0gRmllbGQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUgV0xBTl9BVVRIX0FMR19PUEVOU1lTVEVNCQkwCiAjZGVmaW5lIFdMQU5fQVVUSF9BTEdfU0hBUkVES0VZCQkJMQpAQCAtMjExLDIwICsyMDMsMTYgQEAKIAogI2RlZmluZSBXTEFOX0RFQVVUSEVOX09GRl9SRUFTT04JCTAKIAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KIC8qLS0gQ2FwYWJpbGl0eSBGaWVsZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0VTUyhuKQkJKChuKSAmIEJJVDApCi0jZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fSUJTUyhuKQkJKCgobikgJiBCSVQxKSA+PiAxKQotI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTEFCTEUobikJKCgobikgJiBCSVQyKSA+PiAyKQotI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTFJFUShuKQkoKChuKSAmIEJJVDMpID4+IDMpCi0jZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fUFJJVkFDWShuKQkoKChuKSAmIEJJVDQpID4+IDQpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fRVNTKG4pCQkoKG4pICYgQklUKDApKQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0lCU1MobikJCSgoKG4pICYgQklUKDEpKSA+PiAxKQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0NGUE9MTEFCTEUobikJKCgobikgJiBCSVQoMikpID4+IDIpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fQ0ZQT0xMUkVRKG4pCSgoKG4pICYgQklUKDMpKSA+PiAzKQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX1BSSVZBQ1kobikJKCgobikgJiBCSVQoNCkpID4+IDQpCiAgIC8qIHA4MDIxMWIgYWRkaXRpb25zICovCi0jZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fU0hPUlQobikJCSgoKG4pICYgQklUNSkgPj4gNSkKLSNkZWZpbmUgV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19QQkNDKG4pCQkoKChuKSAmIEJJVDYpID4+IDYpCi0jZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fQUdJTElUWShuKQkoKChuKSAmIEJJVDcpID4+IDcpCisjZGVmaW5lIFdMQU5fR0VUX01HTVRfQ0FQX0lORk9fU0hPUlQobikJCSgoKG4pICYgQklUKDUpKSA+PiA1KQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX1BCQ0MobikJCSgoKG4pICYgQklUKDYpKSA+PiA2KQorI2RlZmluZSBXTEFOX0dFVF9NR01UX0NBUF9JTkZPX0FHSUxJVFkobikJKCgobikgJiBCSVQoNykpID4+IDcpCiAKICNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19FU1MobikJCShuKQogI2RlZmluZSBXTEFOX1NFVF9NR01UX0NBUF9JTkZPX0lCU1MobikJCSgobikgPDwgMSkKQEAgLTIzNiwxNDMgKzIyNCwxMjYgQEAKICNkZWZpbmUgV0xBTl9TRVRfTUdNVF9DQVBfSU5GT19QQkNDKG4pCQkoKG4pIDw8IDYpCiAjZGVmaW5lIFdMQU5fU0VUX01HTVRfQ0FQX0lORk9fQUdJTElUWShuKQkoKG4pIDw8IDcpCiAKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFR5cGVzICovCi0KIC8qLS0gSW5mb3JtYXRpb24gRWxlbWVudCBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBwcm90b3R5cGUgc3RydWN0dXJlLCBhbGwgSUVzIHN0YXJ0IHdpdGggdGhlc2UgbWVtYmVycyAqLwogCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llCi17Ci0JdTgJZWlkOwotCXU4CWxlbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV90OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZSB7CisJdTggZWlkOworCXU4IGxlbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHdsYW5faWVfdDsKIAogLyotLSBTZXJ2aWNlIFNldCBJZGVudGl0eSAoU1NJRCkgIC0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5faWVfc3NpZAotewotCXU4CWVpZDsKLQl1OAlsZW47Ci0JdTgJc3NpZFsxXTsgIC8qIG1heSBiZSB6ZXJvLCBwdHJzIG1heSBvdmVybGFwICovCi19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfc3NpZF90OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9zc2lkIHsKKwl1OCBlaWQ7CisJdTggbGVuOworCXU4IHNzaWRbMV07CQkvKiBtYXkgYmUgemVybywgcHRycyBtYXkgb3ZlcmxhcCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9pZV9zc2lkX3Q7CiAKIC8qLS0gU3VwcG9ydGVkIFJhdGVzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llX3N1cHBfcmF0ZXMKLXsKLQl1OAllaWQ7Ci0JdTgJbGVuOwotCXU4CXJhdGVzWzFdOyAgLyogaGFkIGJldHRlciBiZSBhdCBMRUFTVCBvbmUhICovCi19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfc3VwcF9yYXRlc190OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9zdXBwX3JhdGVzIHsKKwl1OCBlaWQ7CisJdTggbGVuOworCXU4IHJhdGVzWzFdOwkJLyogaGFkIGJldHRlciBiZSBhdCBMRUFTVCBvbmUhICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX3N1cHBfcmF0ZXNfdDsKIAogLyotLSBGSCBQYXJhbWV0ZXIgU2V0ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5faWVfZmhfcGFybXMKLXsKLQl1OAllaWQ7Ci0JdTgJbGVuOwotCXUxNglkd2VsbDsKLQl1OAlob3BzZXQ7Ci0JdTgJaG9wcGF0dGVybjsKLQl1OAlob3BpbmRleDsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9maF9wYXJtc190OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9maF9wYXJtcyB7CisJdTggZWlkOworCXU4IGxlbjsKKwl1MTYgZHdlbGw7CisJdTggaG9wc2V0OworCXU4IGhvcHBhdHRlcm47CisJdTggaG9waW5kZXg7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX2ZoX3Bhcm1zX3Q7CiAKIC8qLS0gRFMgUGFyYW1ldGVyIFNldCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llX2RzX3Bhcm1zCi17Ci0JdTgJZWlkOwotCXU4CWxlbjsKLQl1OAljdXJyX2NoOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2RzX3Bhcm1zX3Q7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2RzX3Bhcm1zIHsKKwl1OCBlaWQ7CisJdTggbGVuOworCXU4IGN1cnJfY2g7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX2RzX3Bhcm1zX3Q7CiAKIC8qLS0gQ0YgUGFyYW1ldGVyIFNldCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXR5cGVkZWYgc3RydWN0IHdsYW5faWVfY2ZfcGFybXMKLXsKLQl1OAllaWQ7Ci0JdTgJbGVuOwotCXU4CWNmcF9jbnQ7Ci0JdTgJY2ZwX3BlcmlvZDsKLQl1MTYJY2ZwX21heGR1cjsKLQl1MTYJY2ZwX2R1cnJlbWFpbmluZzsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gd2xhbl9pZV9jZl9wYXJtc190OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV9jZl9wYXJtcyB7CisJdTggZWlkOworCXU4IGxlbjsKKwl1OCBjZnBfY250OworCXU4IGNmcF9wZXJpb2Q7CisJdTE2IGNmcF9tYXhkdXI7CisJdTE2IGNmcF9kdXJyZW1haW5pbmc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX2NmX3Bhcm1zX3Q7CiAKIC8qLS0gVElNIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2llX3RpbQotewotCXU4CWVpZDsKLQl1OAlsZW47Ci0JdTgJZHRpbV9jbnQ7Ci0JdTgJZHRpbV9wZXJpb2Q7Ci0JdTgJYml0bWFwX2N0bDsKLQl1OAl2aXJ0X2JtWzFdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX3RpbV90OwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9pZV90aW0geworCXU4IGVpZDsKKwl1OCBsZW47CisJdTggZHRpbV9jbnQ7CisJdTggZHRpbV9wZXJpb2Q7CisJdTggYml0bWFwX2N0bDsKKwl1OCB2aXJ0X2JtWzFdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgd2xhbl9pZV90aW1fdDsKIAogLyotLSBJQlNTIFBhcmFtZXRlciBTZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5faWVfaWJzc19wYXJtcwotewotCXU4CWVpZDsKLQl1OAlsZW47Ci0JdTE2CWF0aW1fd2luOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyB3bGFuX2llX2lic3NfcGFybXNfdDsKK3R5cGVkZWYgc3RydWN0IHdsYW5faWVfaWJzc19wYXJtcyB7CisJdTggZWlkOworCXU4IGxlbjsKKwl1MTYgYXRpbV93aW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX2lic3NfcGFybXNfdDsKIAogLyotLSBDaGFsbGVuZ2UgVGV4dCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5faWVfY2hhbGxlbmdlCi17Ci0JdTgJZWlkOwotCXU4CWxlbjsKLQl1OAljaGFsbGVuZ2VbMV07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHdsYW5faWVfY2hhbGxlbmdlX3Q7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2llX2NoYWxsZW5nZSB7CisJdTggZWlkOworCXU4IGxlbjsKKwl1OCBjaGFsbGVuZ2VbMV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB3bGFuX2llX2NoYWxsZW5nZV90OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogIEZyYW1lIFR5cGVzICAqLwogCiAvKiBwcm90b3R5cGUgc3RydWN0dXJlLCBhbGwgbWdtdCBmcmFtZSB0eXBlcyB3aWxsIHN0YXJ0IHdpdGggdGhlc2UgbWVtYmVycyAqLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9tZ210Ci17Ci0JdTE2CQkJdHlwZTsKLQl1MTYJCQlsZW47CS8qIERPRVMgTk9UIGluY2x1ZGUgQ1JDICEhISEqLwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX21nbXQgeworCXUxNiB0eXBlOworCXUxNiBsZW47CQkvKiBET0VTIE5PVCBpbmNsdWRlIENSQyAhISEhICovCisJdTggKmJ1ZjsKKwlwODAyMTFfaGRyX3QgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCi0Jdm9pZAkJCSpwcml2OworCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KIH0gd2xhbl9mcl9tZ210X3Q7CiAKIC8qLS0gQmVhY29uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2JlYWNvbgotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2JlYWNvbiB7CisJdTE2IHR5cGU7CisJdTE2IGxlbjsKKwl1OCAqYnVmOworCXA4MDIxMV9oZHJfdCAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KLQl2b2lkCQkJKnByaXY7CisJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0JdTY0CQkJKnRzOwotCXUxNgkJCSpiY25faW50OwotCXUxNgkJCSpjYXBfaW5mbzsKKwl1NjQgKnRzOworCXUxNiAqYmNuX2ludDsKKwl1MTYgKmNhcF9pbmZvOwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KLQl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7Ci0Jd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7Ci0Jd2xhbl9pZV9maF9wYXJtc190CSpmaF9wYXJtczsKLQl3bGFuX2llX2RzX3Bhcm1zX3QJKmRzX3Bhcm1zOwotCXdsYW5faWVfY2ZfcGFybXNfdAkqY2ZfcGFybXM7Ci0Jd2xhbl9pZV9pYnNzX3Bhcm1zX3QJKmlic3NfcGFybXM7Ci0Jd2xhbl9pZV90aW1fdAkJKnRpbTsKKwl3bGFuX2llX3NzaWRfdCAqc3NpZDsKKwl3bGFuX2llX3N1cHBfcmF0ZXNfdCAqc3VwcF9yYXRlczsKKwl3bGFuX2llX2ZoX3Bhcm1zX3QgKmZoX3Bhcm1zOworCXdsYW5faWVfZHNfcGFybXNfdCAqZHNfcGFybXM7CisJd2xhbl9pZV9jZl9wYXJtc190ICpjZl9wYXJtczsKKwl3bGFuX2llX2lic3NfcGFybXNfdCAqaWJzc19wYXJtczsKKwl3bGFuX2llX3RpbV90ICp0aW07CiAKIH0gd2xhbl9mcl9iZWFjb25fdDsKIAotCiAvKi0tIElCU1MgQVRJTSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9pYnNzYXRpbQotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4KgkJCWJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2lic3NhdGltIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KQEAgLTM4MiwxOTQgKzM1MywxNzYgQEAKIH0gd2xhbl9mcl9pYnNzYXRpbV90OwogCiAvKi0tIERpc2Fzc29jaWF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9kaXNhc3NvYwotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX2Rpc2Fzc29jIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLQl1MTYJCQkqcmVhc29uOworCXUxNiAqcmVhc29uOwogCiAJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwogCiB9IHdsYW5fZnJfZGlzYXNzb2NfdDsKIAogLyotLSBBc3NvY2lhdGlvbiBSZXF1ZXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXNzb2NyZXEKLXsKLQl1MTYJCQl0eXBlOwotCXUxNgkJCWxlbjsKLQl1OCoJCQlidWY7Ci0JcDgwMjExX2hkcl90CQkqaGRyOwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9hc3NvY3JlcSB7CisJdTE2IHR5cGU7CisJdTE2IGxlbjsKKwl1OCAqYnVmOworCXA4MDIxMV9oZHJfdCAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KLQl2b2lkCQkJKnByaXY7CisJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0JdTE2CQkJKmNhcF9pbmZvOwotCXUxNgkJCSpsaXN0ZW5faW50OworCXUxNiAqY2FwX2luZm87CisJdTE2ICpsaXN0ZW5faW50OwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KLQl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7Ci0Jd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9zc2lkX3QgKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QgKnN1cHBfcmF0ZXM7CiAKIH0gd2xhbl9mcl9hc3NvY3JlcV90OwogCiAvKi0tIEFzc29jaWF0aW9uIFJlc3BvbnNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9hc3NvY3Jlc3AKLXsKLQl1MTYJCQl0eXBlOwotCXUxNgkJCWxlbjsKLQl1OAkJCSpidWY7Ci0JcDgwMjExX2hkcl90CQkqaGRyOwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9hc3NvY3Jlc3AgeworCXUxNiB0eXBlOworCXUxNiBsZW47CisJdTggKmJ1ZjsKKwlwODAyMTFfaGRyX3QgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCi0Jdm9pZAkJCSpwcml2OworCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotCXUxNgkJCSpjYXBfaW5mbzsKLQl1MTYJCQkqc3RhdHVzOwotCXUxNgkJCSphaWQ7CisJdTE2ICpjYXBfaW5mbzsKKwl1MTYgKnN0YXR1czsKKwl1MTYgKmFpZDsKIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCi0Jd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QgKnN1cHBfcmF0ZXM7CiAKIH0gd2xhbl9mcl9hc3NvY3Jlc3BfdDsKIAogLyotLSBSZWFzc29jaWF0aW9uIFJlcXVlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfcmVhc3NvY3JlcQotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3JlYXNzb2NyZXEgeworCXUxNiB0eXBlOworCXUxNiBsZW47CisJdTggKmJ1ZjsKKwlwODAyMTFfaGRyX3QgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCi0Jdm9pZAkJCSpwcml2OworCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotCXUxNgkJCSpjYXBfaW5mbzsKLQl1MTYJCQkqbGlzdGVuX2ludDsKLQl1OAkJCSpjdXJyX2FwOworCXUxNiAqY2FwX2luZm87CisJdTE2ICpsaXN0ZW5faW50OworCXU4ICpjdXJyX2FwOwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KLQl3bGFuX2llX3NzaWRfdAkJKnNzaWQ7Ci0Jd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9zc2lkX3QgKnNzaWQ7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QgKnN1cHBfcmF0ZXM7CiAKIH0gd2xhbl9mcl9yZWFzc29jcmVxX3Q7CiAKIC8qLS0gUmVhc3NvY2lhdGlvbiBSZXNwb25zZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi10eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3JlYXNzb2NyZXNwCi17Ci0JdTE2CQkJdHlwZTsKLQl1MTYJCQlsZW47Ci0JdTgJCQkqYnVmOwotCXA4MDIxMV9oZHJfdAkJKmhkcjsKK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfcmVhc3NvY3Jlc3AgeworCXUxNiB0eXBlOworCXUxNiBsZW47CisJdTggKmJ1ZjsKKwlwODAyMTFfaGRyX3QgKmhkcjsKIAkvKiB1c2VkIGZvciB0YXJnZXQgc3BlY2lmaWMgZGF0YSwgc2tiIGluIExpbnV4ICovCi0Jdm9pZAkJCSpwcml2OworCXZvaWQgKnByaXY7CiAJLyotLSBmaXhlZCBmaWVsZHMgLS0tLS0tLS0tLS0qLwotCXUxNgkJCSpjYXBfaW5mbzsKLQl1MTYJCQkqc3RhdHVzOwotCXUxNgkJCSphaWQ7CisJdTE2ICpjYXBfaW5mbzsKKwl1MTYgKnN0YXR1czsKKwl1MTYgKmFpZDsKIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCi0Jd2xhbl9pZV9zdXBwX3JhdGVzX3QJKnN1cHBfcmF0ZXM7CisJd2xhbl9pZV9zdXBwX3JhdGVzX3QgKnN1cHBfcmF0ZXM7CiAKIH0gd2xhbl9mcl9yZWFzc29jcmVzcF90OwogCiAvKi0tIFByb2JlIFJlcXVlc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9wcm9iZXJlcQotewotCXUxNgkJCXR5cGU7Ci0JdTE2CQkJbGVuOwotCXU4CQkJKmJ1ZjsKLQlwODAyMTFfaGRyX3QJCSpoZHI7Cit0eXBlZGVmIHN0cnVjdCB3bGFuX2ZyX3Byb2JlcmVxIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KIAkvKi0tIGluZm8gZWxlbWVudHMgLS0tLS0tLS0tLSovCi0Jd2xhbl9pZV9zc2lkX3QJCSpzc2lkOwotCXdsYW5faWVfc3VwcF9yYXRlc190CSpzdXBwX3JhdGVzOworCXdsYW5faWVfc3NpZF90ICpzc2lkOworCXdsYW5faWVfc3VwcF9yYXRlc190ICpzdXBwX3JhdGVzOwogCiB9IHdsYW5fZnJfcHJvYmVyZXFfdDsKIAogLyotLSBQcm9iZSBSZXNwb25zZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfcHJvYmVyZXNwCi17Ci0JdTE2CQkJdHlwZTsKLQl1MTYJCQlsZW47Ci0JdTgJCQkqYnVmOwotCXA4MDIxMV9oZHJfdAkJKmhkcjsKK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfcHJvYmVyZXNwIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLQl1NjQJCQkqdHM7Ci0JdTE2CQkJKmJjbl9pbnQ7Ci0JdTE2CQkJKmNhcF9pbmZvOworCXU2NCAqdHM7CisJdTE2ICpiY25faW50OworCXUxNiAqY2FwX2luZm87CiAJLyotLSBpbmZvIGVsZW1lbnRzIC0tLS0tLS0tLS0qLwotCXdsYW5faWVfc3NpZF90CQkqc3NpZDsKLQl3bGFuX2llX3N1cHBfcmF0ZXNfdAkqc3VwcF9yYXRlczsKLQl3bGFuX2llX2ZoX3Bhcm1zX3QJKmZoX3Bhcm1zOwotCXdsYW5faWVfZHNfcGFybXNfdAkqZHNfcGFybXM7Ci0Jd2xhbl9pZV9jZl9wYXJtc190CSpjZl9wYXJtczsKLQl3bGFuX2llX2lic3NfcGFybXNfdAkqaWJzc19wYXJtczsKKwl3bGFuX2llX3NzaWRfdCAqc3NpZDsKKwl3bGFuX2llX3N1cHBfcmF0ZXNfdCAqc3VwcF9yYXRlczsKKwl3bGFuX2llX2ZoX3Bhcm1zX3QgKmZoX3Bhcm1zOworCXdsYW5faWVfZHNfcGFybXNfdCAqZHNfcGFybXM7CisJd2xhbl9pZV9jZl9wYXJtc190ICpjZl9wYXJtczsKKwl3bGFuX2llX2lic3NfcGFybXNfdCAqaWJzc19wYXJtczsKIH0gd2xhbl9mcl9wcm9iZXJlc3BfdDsKIAogLyotLSBBdXRoZW50aWNhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXV0aGVuCi17Ci0JdTE2CQkJdHlwZTsKLQl1MTYJCQlsZW47Ci0JdTgJCQkqYnVmOwotCXA4MDIxMV9oZHJfdAkJKmhkcjsKK3R5cGVkZWYgc3RydWN0IHdsYW5fZnJfYXV0aGVuIHsKKwl1MTYgdHlwZTsKKwl1MTYgbGVuOworCXU4ICpidWY7CisJcDgwMjExX2hkcl90ICpoZHI7CiAJLyogdXNlZCBmb3IgdGFyZ2V0IHNwZWNpZmljIGRhdGEsIHNrYiBpbiBMaW51eCAqLwotCXZvaWQJCQkqcHJpdjsKKwl2b2lkICpwcml2OwogCS8qLS0gZml4ZWQgZmllbGRzIC0tLS0tLS0tLS0tKi8KLQl1MTYJCQkqYXV0aF9hbGc7Ci0JdTE2CQkJKmF1dGhfc2VxOwotCXUxNgkJCSpzdGF0dXM7CisJdTE2ICphdXRoX2FsZzsKKwl1MTYgKmF1dGhfc2VxOworCXUxNiAqc3RhdHVzOwogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KLQl3bGFuX2llX2NoYWxsZW5nZV90CSpjaGFsbGVuZ2U7CisJd2xhbl9pZV9jaGFsbGVuZ2VfdCAqY2hhbGxlbmdlOwogCiB9IHdsYW5fZnJfYXV0aGVuX3Q7CiAKIC8qLS0gRGVhdXRoZW5pY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXR5cGVkZWYgc3RydWN0IHdsYW5fZnJfZGVhdXRoZW4KLXsKLQl1MTYJCQl0eXBlOwotCXUxNgkJCWxlbjsKLQl1OAkJCSpidWY7Ci0JcDgwMjExX2hkcl90CQkqaGRyOwordHlwZWRlZiBzdHJ1Y3Qgd2xhbl9mcl9kZWF1dGhlbiB7CisJdTE2IHR5cGU7CisJdTE2IGxlbjsKKwl1OCAqYnVmOworCXA4MDIxMV9oZHJfdCAqaGRyOwogCS8qIHVzZWQgZm9yIHRhcmdldCBzcGVjaWZpYyBkYXRhLCBza2IgaW4gTGludXggKi8KLQl2b2lkCQkJKnByaXY7CisJdm9pZCAqcHJpdjsKIAkvKi0tIGZpeGVkIGZpZWxkcyAtLS0tLS0tLS0tLSovCi0JdTE2CQkJKnJlYXNvbjsKKwl1MTYgKnJlYXNvbjsKIAogCS8qLS0gaW5mbyBlbGVtZW50cyAtLS0tLS0tLS0tKi8KIAogfSB3bGFuX2ZyX2RlYXV0aGVuX3Q7CiAKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLXZvaWQgd2xhbl9tZ210X2VuY29kZV9iZWFjb24oIHdsYW5fZnJfYmVhY29uX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfYmVhY29uKCB3bGFuX2ZyX2JlYWNvbl90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX2Rpc2Fzc29jKCB3bGFuX2ZyX2Rpc2Fzc29jX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfZGlzYXNzb2MoIHdsYW5fZnJfZGlzYXNzb2NfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9hc3NvY3JlcSggd2xhbl9mcl9hc3NvY3JlcV90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVxKCB3bGFuX2ZyX2Fzc29jcmVxX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXNwKCB3bGFuX2ZyX2Fzc29jcmVzcF90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVzcCggd2xhbl9mcl9hc3NvY3Jlc3BfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVxKCB3bGFuX2ZyX3JlYXNzb2NyZXFfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVxKCB3bGFuX2ZyX3JlYXNzb2NyZXFfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVzcCggd2xhbl9mcl9yZWFzc29jcmVzcF90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX3JlYXNzb2NyZXNwKCB3bGFuX2ZyX3JlYXNzb2NyZXNwX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfcHJvYmVyZXEoIHdsYW5fZnJfcHJvYmVyZXFfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlcSggd2xhbl9mcl9wcm9iZXJlcV90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVzcCggd2xhbl9mcl9wcm9iZXJlc3BfdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlc3AoIHdsYW5fZnJfcHJvYmVyZXNwX3QgICpmICk7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXV0aGVuKCB3bGFuX2ZyX2F1dGhlbl90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2F1dGhlbiggd2xhbl9mcl9hdXRoZW5fdCAgKmYgKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9kZWF1dGhlbiggd2xhbl9mcl9kZWF1dGhlbl90ICAqZiApOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2RlYXV0aGVuKCB3bGFuX2ZyX2RlYXV0aGVuX3QgICpmICk7Ci0KK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9iZWFjb24od2xhbl9mcl9iZWFjb25fdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfYmVhY29uKHdsYW5fZnJfYmVhY29uX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2Rpc2Fzc29jKHdsYW5fZnJfZGlzYXNzb2NfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfZGlzYXNzb2Mod2xhbl9mcl9kaXNhc3NvY190ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9hc3NvY3JlcSh3bGFuX2ZyX2Fzc29jcmVxX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVxKHdsYW5fZnJfYXNzb2NyZXFfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXNwKHdsYW5fZnJfYXNzb2NyZXNwX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVzcCh3bGFuX2ZyX2Fzc29jcmVzcF90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVxKHdsYW5fZnJfcmVhc3NvY3JlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVxKHdsYW5fZnJfcmVhc3NvY3JlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVzcCh3bGFuX2ZyX3JlYXNzb2NyZXNwX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX3JlYXNzb2NyZXNwKHdsYW5fZnJfcmVhc3NvY3Jlc3BfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcHJvYmVyZXEod2xhbl9mcl9wcm9iZXJlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlcSh3bGFuX2ZyX3Byb2JlcmVxX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVzcCh3bGFuX2ZyX3Byb2JlcmVzcF90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlc3Aod2xhbl9mcl9wcm9iZXJlc3BfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXV0aGVuKHdsYW5fZnJfYXV0aGVuX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2F1dGhlbih3bGFuX2ZyX2F1dGhlbl90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9kZWF1dGhlbih3bGFuX2ZyX2RlYXV0aGVuX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2RlYXV0aGVuKHdsYW5fZnJfZGVhdXRoZW5fdCAqZik7CiAKICNlbmRpZiAvKiBfUDgwMjExTUdNVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oCmluZGV4IDNhNTc1ZDguLmYxNWE1ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1zZy5oCkBAIC00OSw1NCArNDksMTggQEAKICNkZWZpbmUgX1A4MDIxMU1TR19ICiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFByb2plY3QgSW5jbHVkZXMgKi8KIAotI2lmbmRlZiBfV0xBTl9DT01QQVRfSAotI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCi0jZW5kaWYKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIENvbnN0YW50cyAqLwotCi0jZGVmaW5lIE1TR19CVUZGX0xFTgkJNDAwMAogI2RlZmluZSBXTEFOX0RFVk5BTUVMRU5fTUFYCTE2CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBNYWNyb3MgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFR5cGVzICovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyotLS0tLSBNZXNzYWdlIFN0cnVjdHVyZSBUeXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogUHJvdG90eXBlIG1zZyB0eXBlICovCiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMW1zZwotewotCXUzMgltc2djb2RlOwotCXUzMgltc2dsZW47Ci0JdTgJZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExbXNnX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtc2cgeworCXUzMiBtc2djb2RlOworCXUzMiBtc2dsZW47CisJdTggZGV2bmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMW1zZ190OwogCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtc2dkCi17Ci0JdTMyCW1zZ2NvZGU7Ci0JdTMyCW1zZ2xlbjsKLQl1OAlkZXZuYW1lW1dMQU5fREVWTkFNRUxFTl9NQVhdOwotCXU4CWFyZ3NbMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1zZ2RfdDsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEV4dGVybiBEZWNsYXJhdGlvbnMgKi8KLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLSNlbmRpZiAgLyogX1A4MDIxMU1TR19IICovCi0KKyNlbmRpZiAvKiBfUDgwMjExTVNHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMKaW5kZXggNTllNWFkMS4uYjJhNjA2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmMKQEAgLTQ5LDEzICs0OSw3IEBACiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqLwogCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLQotCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTcwLDkgKzY0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLQotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaWZkZWYgU0lPQ0VUSFRPT0wKQEAgLTg1LDcgKzgwLDYgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBQcm9qZWN0IEluY2x1ZGVzICovCiAKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgogI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCiAjaW5jbHVkZSAicDgwMjExaGRyLmgiCiAjaW5jbHVkZSAicDgwMjExY29udi5oIgpAQCAtOTcsMzMgKzkxLDIyIEBACiAjaW5jbHVkZSAicDgwMjExbWV0YXN0cnVjdC5oIgogI2luY2x1ZGUgInA4MDIxMW1ldGFkZWYuaCIKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIENvbnN0YW50cyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgTWFjcm9zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIFR5cGVzICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KLQogLyogU3VwcG9ydCBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkIHA4MDIxMW5ldGRldl9yeF9iaCh1bnNpZ25lZCBsb25nIGFyZyk7CiAKIC8qIG5ldGRldmljZSBtZXRob2QgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaW5pdCggbmV0ZGV2aWNlX3QgKm5ldGRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIHA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzKG5ldGRldmljZV90ICpuZXRkZXYpOwotc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X29wZW4oIG5ldGRldmljZV90ICpuZXRkZXYpOwotc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3N0b3AoIG5ldGRldmljZV90ICpuZXRkZXYgKTsKLXN0YXRpYyBpbnQgcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQoIHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2luaXQobmV0ZGV2aWNlX3QgKm5ldGRldik7CitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzKG5ldGRldmljZV90ICpuZXRkZXYpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X29wZW4obmV0ZGV2aWNlX3QgKm5ldGRldik7CitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfc3RvcChuZXRkZXZpY2VfdCAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJIG5ldGRldmljZV90ICpuZXRkZXYpOwogc3RhdGljIHZvaWQgcDgwMjExa25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QobmV0ZGV2aWNlX3QgKmRldik7Ci1zdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfZG9faW9jdGwobmV0ZGV2aWNlX3QgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOworc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2RvX2lvY3RsKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLAorCQkJCSAgaW50IGNtZCk7CiBzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfc2V0X21hY19hZGRyZXNzKG5ldGRldmljZV90ICpkZXYsIHZvaWQgKmFkZHIpOwogc3RhdGljIHZvaWQgcDgwMjExa25ldGRldl90eF90aW1lb3V0KG5ldGRldmljZV90ICpuZXRkZXYpOwotc3RhdGljIGludCBwODAyMTFfcnhfdHlwZWRyb3AoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IGZjKTsKK3N0YXRpYyBpbnQgcDgwMjExX3J4X3R5cGVkcm9wKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IGZjKTsKIAogaW50IHdsYW5fd2F0Y2hkb2cgPSA1MDAwOwogbW9kdWxlX3BhcmFtKHdsYW5fd2F0Y2hkb2csIGludCwgMDY0NCk7CkBAIC0xMzMsMTUgKzExNiw2IEBACiBtb2R1bGVfcGFyYW0od2xhbl93ZXh0X3dyaXRlLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh3bGFuX3dleHRfd3JpdGUsICJlbmFibGUgd3JpdGUgd2lyZWxlc3MgZXh0ZW5zaW9ucyIpOwogCi0jaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCi1pbnQgd2xhbl9kZWJ1Zz0wOwotbW9kdWxlX3BhcmFtKHdsYW5fZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHdsYW5fZGVidWcsICJwODAyMTEgZGVidWcgbGV2ZWwiKTsKLSNlbmRpZgotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMWtuZXRkZXZfaW5pdAogKgpAQCAtMTU0LDE4ICsxMjgsMTUgQEAKICogUmV0dXJuczoKICoJbm90aGluZwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaW5pdCggbmV0ZGV2aWNlX3QgKm5ldGRldikKK3N0YXRpYyBpbnQgcDgwMjExa25ldGRldl9pbml0KG5ldGRldmljZV90ICpuZXRkZXYpCiB7Ci0JREJGRU5URVI7CiAJLyogQ2FsbGVkIGluIHJlc3BvbnNlIHRvIHJlZ2lzdGVyX25ldGRldiAqLwogCS8qIFRoaXMgaXMgdXN1YWxseSB0aGUgcHJvYmUgZnVuY3Rpb24sIGJ1dCB0aGUgcHJvYmUgaGFzICovCiAJLyogYWxyZWFkeSBiZWVuIGRvbmUgYnkgdGhlIE1TRCBhbmQgdGhlIGNyZWF0ZV9rZGV2ICovCiAJLyogZnVuY3Rpb24uICBBbGwgd2UgZG8gaGVyZSBpcyByZXR1cm4gc3VjY2VzcyAqLwotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMWtuZXRkZXZfZ2V0X3N0YXRzCiAqCkBAIC0xODAsMjAgKzE1MSwxNiBAQAogKiBSZXR1cm5zOgogKgl0aGUgYWRkcmVzcyBvZiB0aGUgc3RhdGlzdGljcyBzdHJ1Y3R1cmUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKgotcDgwMjExa25ldGRldl9nZXRfc3RhdHMobmV0ZGV2aWNlX3QgKm5ldGRldikKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcDgwMjExa25ldGRldl9nZXRfc3RhdHMobmV0ZGV2aWNlX3QgKm5ldGRldikKIHsKLQl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSBuZXRkZXYtPm1sX3ByaXY7Ci0JREJGRU5URVI7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gbmV0ZGV2LT5tbF9wcml2OwogCiAJLyogVE9ETzogcmV2aWV3IHRoZSBNSUIgc3RhdHMgZm9yIGl0ZW1zIHRoYXQgY29ycmVzcG9uZCB0bwotCQlsaW51eCBzdGF0cyAqLworCSAgIGxpbnV4IHN0YXRzICovCiAKLQlEQkZFWElUOwogCXJldHVybiAmKHdsYW5kZXYtPmxpbnV4X3N0YXRzKTsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcDgwMjExa25ldGRldl9vcGVuCiAqCkBAIC0yMDgsMjIgKzE3NSwxOSBAQAogKiBSZXR1cm5zOgogKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG90aGVyd2lzZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfb3BlbiggbmV0ZGV2aWNlX3QgKm5ldGRldiApCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfb3BlbihuZXRkZXZpY2VfdCAqbmV0ZGV2KQogewotCWludCAJCXJlc3VsdCA9IDA7IC8qIHN1Y2Nlc3MgKi8KLQl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSBuZXRkZXYtPm1sX3ByaXY7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0ID0gMDsJCS8qIHN1Y2Nlc3MgKi8KKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBuZXRkZXYtPm1sX3ByaXY7CiAKIAkvKiBDaGVjayB0byBtYWtlIHN1cmUgdGhlIE1TRCBpcyBydW5uaW5nICovCi0JaWYgKCB3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9SVU5OSU5HICkgeworCWlmICh3bGFuZGV2LT5tc2RzdGF0ZSAhPSBXTEFOX01TRF9SVU5OSU5HKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAKIAkvKiBUZWxsIHRoZSBNU0QgdG8gb3BlbiAqLwotCWlmICggd2xhbmRldi0+b3BlbiAhPSBOVUxMKSB7CisJaWYgKHdsYW5kZXYtPm9wZW4gIT0gTlVMTCkgewogCQlyZXN1bHQgPSB3bGFuZGV2LT5vcGVuKHdsYW5kZXYpOwotCQlpZiAoIHJlc3VsdCA9PSAwICkgeworCQlpZiAocmVzdWx0ID09IDApIHsKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7CiAJCQl3bGFuZGV2LT5zdGF0ZSA9IFdMQU5fREVWSUNFX09QRU47CiAJCX0KQEAgLTIzMSwxMSArMTk1LDkgQEAKIAkJcmVzdWx0ID0gLUVBR0FJTjsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMWtuZXRkZXZfc3RvcAogKgpAQCAtMjQ4LDIxICsyMTAsMTcgQEAKICogUmV0dXJuczoKICoJemVybyBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3N0b3AoIG5ldGRldmljZV90ICpuZXRkZXYgKQorc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X3N0b3AobmV0ZGV2aWNlX3QgKm5ldGRldikKIHsKLQlpbnQJCXJlc3VsdCA9IDA7Ci0Jd2xhbmRldmljZV90CSp3bGFuZGV2ID0gbmV0ZGV2LT5tbF9wcml2OworCWludCByZXN1bHQgPSAwOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IG5ldGRldi0+bWxfcHJpdjsKIAotCURCRkVOVEVSOwotCi0JaWYgKCB3bGFuZGV2LT5jbG9zZSAhPSBOVUxMICkgeworCWlmICh3bGFuZGV2LT5jbG9zZSAhPSBOVUxMKQogCQlyZXN1bHQgPSB3bGFuZGV2LT5jbG9zZSh3bGFuZGV2KTsKLQl9CiAKIAluZXRpZl9zdG9wX3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7CiAJd2xhbmRldi0+c3RhdGUgPSBXTEFOX0RFVklDRV9DTE9TRUQ7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI3OSwxNyArMjM3LDEzIEBACiAqIFNpZGUgZWZmZWN0czoKICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZAotcDgwMjExbmV0ZGV2X3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiApCit2b2lkIHA4MDIxMW5ldGRldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JREJGRU5URVI7Ci0KIAkvKiBFbnF1ZXVlIGZvciBwb3N0LWlycSBwcm9jZXNzaW5nICovCiAJc2tiX3F1ZXVlX3RhaWwoJndsYW5kZXYtPm5zZF9yeHEsIHNrYik7CiAKIAl0YXNrbGV0X3NjaGVkdWxlKCZ3bGFuZGV2LT5yeF9iaCk7CiAKLSAgICAgICAgREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKQEAgLTMxMCwxOSArMjY0LDE3IEBACiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCAqKSBhcmc7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0JbmV0ZGV2aWNlX3QgICAgICpkZXYgPSB3bGFuZGV2LT5uZXRkZXY7CisJbmV0ZGV2aWNlX3QgKmRldiA9IHdsYW5kZXYtPm5ldGRldjsKIAlwODAyMTFfaGRyX2EzX3QgKmhkcjsKIAl1MTYgZmM7CiAKLSAgICAgICAgREJGRU5URVI7Ci0KIAkvKiBMZXQncyBlbXB0eSBvdXIgb3VyIHF1ZXVlICovCi0Jd2hpbGUgKCAoc2tiID0gc2tiX2RlcXVldWUoJndsYW5kZXYtPm5zZF9yeHEpKSApIHsKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bGFuZGV2LT5uc2RfcnhxKSkpIHsKIAkJaWYgKHdsYW5kZXYtPnN0YXRlID09IFdMQU5fREVWSUNFX09QRU4pIHsKIAogCQkJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfRVRIRVIpIHsKIAkJCQkvKiBSQVcgZnJhbWU7IHdlIHNob3VsZG4ndCBjb252ZXJ0IGl0ICovCi0JCQkJLy8gWFhYIEFwcGVuZCB0aGUgUHJpc20gSGVhZGVyIGhlcmUgaW5zdGVhZC4KKwkJCQkvKiBYWFggQXBwZW5kIHRoZSBQcmlzbSBIZWFkZXIgaGVyZSBpbnN0ZWFkLiAqLwogCiAJCQkJLyogc2V0IHVwIHZhcmlvdXMgZGF0YSBmaWVsZHMgKi8KIAkJCQlza2ItPmRldiA9IGRldjsKQEAgLTMzNyw4ICsyODksOCBAQAogCQkJCW5ldGlmX3J4X25pKHNrYik7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgewotCQkJCWhkciA9IChwODAyMTFfaGRyX2EzX3QgKilza2ItPmRhdGE7Ci0JCQkJZmMgPSBpZWVlMmhvc3QxNihoZHItPmZjKTsKKwkJCQloZHIgPSAocDgwMjExX2hkcl9hM190ICopIHNrYi0+ZGF0YTsKKwkJCQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZmMpOwogCQkJCWlmIChwODAyMTFfcnhfdHlwZWRyb3Aod2xhbmRldiwgZmMpKSB7CiAJCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCQkJY29udGludWU7CkBAIC0zNDcsNyArMjk5LDkgQEAKIAkJCQkvKiBwZXJmb3JtIG1jYXN0IGZpbHRlcmluZyAqLwogCQkJCWlmICh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCQkJCS8qIGFsbG93IG15IGxvY2FsIGFkZHJlc3MgdGhyb3VnaCAqLwotCQkJCQlpZiAobWVtY21wKGhkci0+YTEsIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIFdMQU5fQUREUl9MRU4pICE9IDApIHsKKwkJCQkJaWYgKG1lbWNtcAorCQkJCQkgICAgKGhkci0+YTEsIHdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsCisJCQkJCSAgICAgRVRIX0FMRU4pICE9IDApIHsKIAkJCQkJCS8qIGJ1dCByZWplY3QgYW55dGhpbmcgZWxzZSB0aGF0IGlzbid0IG11bHRpY2FzdCAqLwogCQkJCQkJaWYgKCEoaGRyLT5hMVswXSAmIDB4MDEpKSB7CiAJCQkJCQkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMzU2LDIzICszMTAsMjIgQEAKIAkJCQkJfQogCQkJCX0KIAotCQkJCWlmICggc2tiX3A4MDIxMV90b19ldGhlcih3bGFuZGV2LCB3bGFuZGV2LT5ldGhjb252LCBza2IpID09IDAgKSB7CisJCQkJaWYgKHNrYl9wODAyMTFfdG9fZXRoZXIKKwkJCQkgICAgKHdsYW5kZXYsIHdsYW5kZXYtPmV0aGNvbnYsIHNrYikgPT0gMCkgewogCQkJCQlza2ItPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCQkJd2xhbmRldi0+bGludXhfc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQkJCXdsYW5kZXYtPmxpbnV4X3N0YXRzLnJ4X2J5dGVzICs9CisJCQkJCSAgICBza2ItPmxlbjsKIAkJCQkJbmV0aWZfcnhfbmkoc2tiKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQotCQkJCVdMQU5fTE9HX0RFQlVHKDEsICJwODAyMTFfdG9fZXRoZXIgZmFpbGVkLlxuIik7CisJCQkJcHJfZGVidWcoInA4MDIxMV90b19ldGhlciBmYWlsZWQuXG4iKTsKIAkJCX0KIAkJfQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQotCi0gICAgICAgIERCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0CiAqCkBAIC0zOTIsMjEgKzM0NSwxOSBAQAogKiBSZXR1cm5zOgogKgl6ZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQoIHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldmljZV90ICpuZXRkZXYpCitzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfaGFyZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBuZXRkZXZpY2VfdCAqbmV0ZGV2KQogewotCWludAkJcmVzdWx0ID0gMDsKLQlpbnQJCXR4cmVzdWx0ID0gLTE7Ci0Jd2xhbmRldmljZV90CSp3bGFuZGV2ID0gbmV0ZGV2LT5tbF9wcml2OwotCXA4MDIxMV9oZHJfdCAgICBwODAyMTFfaGRyOworCWludCByZXN1bHQgPSAwOworCWludCB0eHJlc3VsdCA9IC0xOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IG5ldGRldi0+bWxfcHJpdjsKKwlwODAyMTFfaGRyX3QgcDgwMjExX2hkcjsKIAlwODAyMTFfbWV0YXdlcF90IHA4MDIxMV93ZXA7CiAKLQlEQkZFTlRFUjsKLQotCWlmIChza2IgPT0gTlVMTCkgeworCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0JfQogCi0gICAgICAgIGlmICh3bGFuZGV2LT5zdGF0ZSAhPSBXTEFOX0RFVklDRV9PUEVOKSB7CisJaWYgKHdsYW5kZXYtPnN0YXRlICE9IFdMQU5fREVWSUNFX09QRU4pIHsKIAkJcmVzdWx0ID0gMTsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtNDE0LDggKzM2NSw4IEBACiAJbWVtc2V0KCZwODAyMTFfaGRyLCAwLCBzaXplb2YocDgwMjExX2hkcl90KSk7CiAJbWVtc2V0KCZwODAyMTFfd2VwLCAwLCBzaXplb2YocDgwMjExX21ldGF3ZXBfdCkpOwogCi0JaWYgKCBuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikgKSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDEsICJjYWxsZWQgd2hlbiBxdWV1ZSBzdG9wcGVkLlxuIik7CisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSkgeworCQlwcl9kZWJ1ZygiY2FsbGVkIHdoZW4gcXVldWUgc3RvcHBlZC5cbiIpOwogCQlyZXN1bHQgPSAxOwogCQlnb3RvIGZhaWxlZDsKIAl9CkBAIC00MjMsNyArMzc0LDcgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAKIAkvKiBDaGVjayB0byBzZWUgdGhhdCBhIHZhbGlkIG1vZGUgaXMgc2V0ICovCi0Jc3dpdGNoKCB3bGFuZGV2LT5tYWNtb2RlICkgeworCXN3aXRjaCAod2xhbmRldi0+bWFjbW9kZSkgewogCWNhc2UgV0xBTl9NQUNNT0RFX0lCU1NfU1RBOgogCWNhc2UgV0xBTl9NQUNNT0RFX0VTU19TVEE6CiAJY2FzZSBXTEFOX01BQ01PREVfRVNTX0FQOgpAQCAtNDMzLDEwICszODQsMTAgQEAKIAkJICogYW5kIHJldHVybiBzdWNjZXNzIC4KIAkJICogVE9ETzogd2UgbmVlZCBhIHNhbmVyIHdheSB0byBoYW5kbGUgdGhpcwogCQkgKi8KLQkJaWYoc2tiLT5wcm90b2NvbCAhPSBFVEhfUF84MDIxMV9SQVcpIHsKKwkJaWYgKHNrYi0+cHJvdG9jb2wgIT0gRVRIX1BfODAyMTFfUkFXKSB7CiAJCQluZXRpZl9zdGFydF9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOwotCQkJV0xBTl9MT0dfTk9USUNFKAotCQkJCSJUeCBhdHRlbXB0IHByaW9yIHRvIGFzc29jaWF0aW9uLCBmcmFtZSBkcm9wcGVkLlxuIik7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UKKwkJCSAgICAgICAiVHggYXR0ZW1wdCBwcmlvciB0byBhc3NvY2lhdGlvbiwgZnJhbWUgZHJvcHBlZC5cbiIpOwogCQkJd2xhbmRldi0+bGludXhfc3RhdHMudHhfZHJvcHBlZCsrOwogCQkJcmVzdWx0ID0gMDsKIAkJCWdvdG8gZmFpbGVkOwpAQCAtNDQ1LDcgKzM5Niw3IEBACiAJfQogCiAJLyogQ2hlY2sgZm9yIHJhdyB0cmFuc21pdHMgKi8KLQlpZihza2ItPnByb3RvY29sID09IEVUSF9QXzgwMjExX1JBVykgeworCWlmIChza2ItPnByb3RvY29sID09IEVUSF9QXzgwMjExX1JBVykgewogCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKIAkJCXJlc3VsdCA9IDE7CiAJCQlnb3RvIGZhaWxlZDsKQEAgLTQ1NCwxNSArNDA1LDE3IEBACiAJCW1lbWNweSgmcDgwMjExX2hkciwgc2tiLT5kYXRhLCBzaXplb2YocDgwMjExX2hkcl90KSk7CiAJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHA4MDIxMV9oZHJfdCkpOwogCX0gZWxzZSB7Ci0JCWlmICggc2tiX2V0aGVyX3RvX3A4MDIxMSh3bGFuZGV2LCB3bGFuZGV2LT5ldGhjb252LCBza2IsICZwODAyMTFfaGRyLCAmcDgwMjExX3dlcCkgIT0gMCApIHsKKwkJaWYgKHNrYl9ldGhlcl90b19wODAyMTEKKwkJICAgICh3bGFuZGV2LCB3bGFuZGV2LT5ldGhjb252LCBza2IsICZwODAyMTFfaGRyLAorCQkgICAgICZwODAyMTFfd2VwKSAhPSAwKSB7CiAJCQkvKiBjb252ZXJ0IGZhaWxlZCAqLwotCQkJV0xBTl9MT0dfREVCVUcoMSwgImV0aGVyX3RvXzgwMjExKCVkKSBmYWlsZWQuXG4iLAotCQkJCQl3bGFuZGV2LT5ldGhjb252KTsKKwkJCXByX2RlYnVnKCJldGhlcl90b184MDIxMSglZCkgZmFpbGVkLlxuIiwKKwkJCSAgICAgICB3bGFuZGV2LT5ldGhjb252KTsKIAkJCXJlc3VsdCA9IDE7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCX0KLQlpZiAoIHdsYW5kZXYtPnR4ZnJhbWUgPT0gTlVMTCApIHsKKwlpZiAod2xhbmRldi0+dHhmcmFtZSA9PSBOVUxMKSB7CiAJCXJlc3VsdCA9IDE7CiAJCWdvdG8gZmFpbGVkOwogCX0KQEAgLTQ3NSwyOCArNDI4LDI4IEBACiAKIAl0eHJlc3VsdCA9IHdsYW5kZXYtPnR4ZnJhbWUod2xhbmRldiwgc2tiLCAmcDgwMjExX2hkciwgJnA4MDIxMV93ZXApOwogCi0JaWYgKCB0eHJlc3VsdCA9PSAwKSB7CisJaWYgKHR4cmVzdWx0ID09IDApIHsKIAkJLyogc3VjY2VzcyBhbmQgbW9yZSBidWYgKi8KIAkJLyogYXZhaWwsIHJlOiBod190eGRhdGEgKi8KIAkJbmV0aWZfd2FrZV9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOwogCQlyZXN1bHQgPSAwOwotCX0gZWxzZSBpZiAoIHR4cmVzdWx0ID09IDEgKSB7CisJfSBlbHNlIGlmICh0eHJlc3VsdCA9PSAxKSB7CiAJCS8qIHN1Y2Nlc3MsIG5vIG1vcmUgYXZhaWwgKi8KLQkJV0xBTl9MT0dfREVCVUcoMywgInR4ZnJhbWUgc3VjY2Vzcywgbm8gbW9yZSBidWZzXG4iKTsKKwkJcHJfZGVidWcoInR4ZnJhbWUgc3VjY2Vzcywgbm8gbW9yZSBidWZzXG4iKTsKIAkJLyogbmV0ZGV2LT50YnVzeSA9IDE7ICBkb24ndCBzZXQgaGVyZSwgaXJxaGRsciAqLwogCQkvKiAgIG1heSBoYXZlIGFscmVhZHkgY2xlYXJlZCBpdCAqLwogCQlyZXN1bHQgPSAwOwotCX0gZWxzZSBpZiAoIHR4cmVzdWx0ID09IDIgKSB7CisJfSBlbHNlIGlmICh0eHJlc3VsdCA9PSAyKSB7CiAJCS8qIGFsbG9jIGZhaWx1cmUsIGRyb3AgZnJhbWUgKi8KLQkJV0xBTl9MT0dfREVCVUcoMywgInR4ZnJhbWUgcmV0dXJuZWQgYWxsb2NfZmFpbFxuIik7CisJCXByX2RlYnVnKCJ0eGZyYW1lIHJldHVybmVkIGFsbG9jX2ZhaWxcbiIpOwogCQlyZXN1bHQgPSAxOwogCX0gZWxzZSB7CiAJCS8qIGJ1ZmZlciBmdWxsIG9yIHF1ZXVlIGJ1c3ksIGRyb3AgZnJhbWUuICovCi0JCVdMQU5fTE9HX0RFQlVHKDMsICJ0eGZyYW1lIHJldHVybmVkIGZ1bGwgb3IgYnVzeVxuIik7CisJCXByX2RlYnVnKCJ0eGZyYW1lIHJldHVybmVkIGZ1bGwgb3IgYnVzeVxuIik7CiAJCXJlc3VsdCA9IDE7CiAJfQogCi0gZmFpbGVkOgorZmFpbGVkOgogCS8qIEZyZWUgdXAgdGhlIFdFUCBidWZmZXIgaWYgaXQncyBub3QgdGhlIHNhbWUgYXMgdGhlIHNrYiAqLwogCWlmICgocDgwMjExX3dlcC5kYXRhKSAmJiAocDgwMjExX3dlcC5kYXRhICE9IHNrYi0+ZGF0YSkpCiAJCWtmcmVlKHA4MDIxMV93ZXAuZGF0YSk7CkBAIC01MDUsMTEgKzQ1OCw5IEBACiAJaWYgKCFyZXN1bHQpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcDgwMjExa25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QKICoKQEAgLTUyNCwxNiArNDc1LDEzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyB2b2lkIHA4MDIxMWtuZXRkZXZfc2V0X211bHRpY2FzdF9saXN0KG5ldGRldmljZV90ICpkZXYpCiB7Ci0Jd2xhbmRldmljZV90CSp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCi0JREJGRU5URVI7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCiAJLyogVE9ETzogIHJlYWwgbXVsdGljYXN0IHN1cHBvcnQgYXMgd2VsbCAqLwogCiAJaWYgKHdsYW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCkKIAkJd2xhbmRldi0+c2V0X211bHRpY2FzdF9saXN0KHdsYW5kZXYsIGRldik7CiAKLQlEQkZFWElUOwogfQogCiAjaWZkZWYgU0lPQ0VUSFRPT0wKQEAgLTU1OCw5ICs1MDYsNiBAQAogCQlzbnByaW50ZihpbmZvLnZlcnNpb24sIHNpemVvZihpbmZvLnZlcnNpb24pLCAiJXMiLAogCQkJIFdMQU5fUkVMRUFTRSk7CiAKLQkJLy8gaW5mby5md192ZXJzaW9uCi0JCS8vIGluZm8uYnVzX2luZm8KLQogCQlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKQEAgLTU3Niw3ICs1MjEsNyBAQAogCQl9CiAKIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmVkYXRhLCBzaXplb2YoZWRhdGEpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAwOwogCX0KICNlbmRpZgpAQCAtNjE1LDQ1ICs1NjAsNDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIGludCBwODAyMTFrbmV0ZGV2X2RvX2lvY3RsKG5ldGRldmljZV90ICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQogewotCWludAkJCXJlc3VsdCA9IDA7Ci0JcDgwMjExaW9jdGxfcmVxX3QJKnJlcSA9IChwODAyMTFpb2N0bF9yZXFfdCopaWZyOwotCXdsYW5kZXZpY2VfdAkJKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JdTgJCQkqbXNnYnVmOwotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOworCXA4MDIxMWlvY3RsX3JlcV90ICpyZXEgPSAocDgwMjExaW9jdGxfcmVxX3QgKikgaWZyOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKKwl1OCAqbXNnYnVmOwogCi0JV0xBTl9MT0dfREVCVUcoMiwgInJ4J2QgaW9jdGwsIGNtZD0lZCwgbGVuPSVkXG4iLCBjbWQsIHJlcS0+bGVuKTsKKwlwcl9kZWJ1ZygicngnZCBpb2N0bCwgY21kPSVkLCBsZW49JWRcbiIsIGNtZCwgcmVxLT5sZW4pOworCisJbXV0ZXhfbG9jaygmd2xhbmRldi0+aW9jdGxfbG9jayk7CiAKICNpZmRlZiBTSU9DRVRIVE9PTAogCWlmIChjbWQgPT0gU0lPQ0VUSFRPT0wpIHsKLQkJcmVzdWx0ID0gcDgwMjExbmV0ZGV2X2V0aHRvb2wod2xhbmRldiwgKHZvaWQgX191c2VyICopIGlmci0+aWZyX2RhdGEpOworCQlyZXN1bHQgPQorCQkgICAgcDgwMjExbmV0ZGV2X2V0aHRvb2wod2xhbmRldiwgKHZvaWQgX191c2VyICopaWZyLT5pZnJfZGF0YSk7CiAJCWdvdG8gYmFpbDsKIAl9CiAjZW5kaWYKIAogCS8qIFRlc3QgdGhlIG1hZ2ljLCBhc3N1bWUgaWZyIGlzIGdvb2QgaWYgaXQncyB0aGVyZSAqLwotCWlmICggcmVxLT5tYWdpYyAhPSBQODAyMTFfSU9DVExfTUFHSUMgKSB7CisJaWYgKHJlcS0+bWFnaWMgIT0gUDgwMjExX0lPQ1RMX01BR0lDKSB7CiAJCXJlc3VsdCA9IC1FTk9TWVM7CiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlpZiAoIGNtZCA9PSBQODAyMTFfSUZURVNUICkgeworCWlmIChjbWQgPT0gUDgwMjExX0lGVEVTVCkgewogCQlyZXN1bHQgPSAwOwogCQlnb3RvIGJhaWw7Ci0JfSBlbHNlIGlmICggY21kICE9IFA4MDIxMV9JRlJFUSApIHsKKwl9IGVsc2UgaWYgKGNtZCAhPSBQODAyMTFfSUZSRVEpIHsKIAkJcmVzdWx0ID0gLUVOT1NZUzsKIAkJZ290byBiYWlsOwogCX0KIAogCS8qIEFsbG9jYXRlIGEgYnVmIG9mIHNpemUgcmVxLT5sZW4gKi8KLQlpZiAoKG1zZ2J1ZiA9IGttYWxsb2MoIHJlcS0+bGVuLCBHRlBfS0VSTkVMKSkpIHsKLQkJaWYgKCBjb3B5X2Zyb21fdXNlciggbXNnYnVmLCAodm9pZCBfX3VzZXIgKikgcmVxLT5kYXRhLCByZXEtPmxlbikgKSB7CisJaWYgKChtc2didWYgPSBrbWFsbG9jKHJlcS0+bGVuLCBHRlBfS0VSTkVMKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKG1zZ2J1ZiwgKHZvaWQgX191c2VyICopcmVxLT5kYXRhLCByZXEtPmxlbikpCiAJCQlyZXN1bHQgPSAtRUZBVUxUOwotCQl9IGVsc2UgewotCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCggd2xhbmRldiwgbXNnYnVmKTsKLQkJfQorCQllbHNlCisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsIG1zZ2J1Zik7CiAKLQkJaWYgKCByZXN1bHQgPT0gMCApIHsKLQkJCWlmICggY29weV90b191c2VyKCAodm9pZCBfX3VzZXIgKikgcmVxLT5kYXRhLCBtc2didWYsIHJlcS0+bGVuKSkgeworCQlpZiAocmVzdWx0ID09IDApIHsKKwkJCWlmIChjb3B5X3RvX3VzZXIKKwkJCSAgICAoKHZvaWQgX191c2VyICopcmVxLT5kYXRhLCBtc2didWYsIHJlcS0+bGVuKSkgewogCQkJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCQl9CiAJCX0KQEAgLTY2Miw5ICs2MDksOSBAQAogCQlyZXN1bHQgPSAtRU5PTUVNOwogCX0KIGJhaWw6Ci0JREJGRVhJVDsKKwltdXRleF91bmxvY2soJndsYW5kZXYtPmlvY3RsX2xvY2spOwogCi0JcmV0dXJuIHJlc3VsdDsgLyogSWYgYWxsb2NhdGUsY29weWZyb20gb3IgY29weXRvIGZhaWxzLCByZXR1cm4gZXJybm8gKi8KKwlyZXR1cm4gcmVzdWx0OwkJLyogSWYgYWxsb2NhdGUsY29weWZyb20gb3IgY29weXRvIGZhaWxzLCByZXR1cm4gZXJybm8gKi8KIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02OTQsMjIgKzY0MSwyMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHA4MDIxMWtuZXRkZXZfc2V0X21hY19hZGRyZXNzKG5ldGRldmljZV90ICpkZXYsIHZvaWQgKmFkZHIpCiB7Ci0Jc3RydWN0IHNvY2thZGRyCQkJKm5ld19hZGRyID0gYWRkcjsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QJZG90MTFyZXE7Ci0JcDgwMjExaXRlbV91bmszOTJfdAkJKm1pYmF0dHI7Ci0JcDgwMjExaXRlbV9wc3RyNl90CQkqbWFjYWRkcjsKLQlwODAyMTFpdGVtX3VpbnQzMl90CQkqcmVzdWx0Y29kZTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKm5ld19hZGRyID0gYWRkcjsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgZG90MTFyZXE7CisJcDgwMjExaXRlbV91bmszOTJfdCAqbWliYXR0cjsKKwlwODAyMTFpdGVtX3BzdHI2X3QgKm1hY2FkZHI7CisJcDgwMjExaXRlbV91aW50MzJfdCAqcmVzdWx0Y29kZTsKIAlpbnQgcmVzdWx0ID0gMDsKIAotCURCRkVOVEVSOwogCS8qIElmIHdlJ3JlIHJ1bm5pbmcsIHdlIGRvbid0IGFsbG93IE1BQyBhZGRyZXNzIGNoYW5nZXMgKi8KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FQlVTWTsKLQl9CiAKIAkvKiBTZXQgdXAgc29tZSBjb252ZW5pZW5jZSBwb2ludGVycy4gKi8KIAltaWJhdHRyID0gJmRvdDExcmVxLm1pYmF0dHJpYnV0ZTsKLQltYWNhZGRyID0gKHA4MDIxMWl0ZW1fcHN0cjZfdCopJm1pYmF0dHItPmRhdGE7CisJbWFjYWRkciA9IChwODAyMTFpdGVtX3BzdHI2X3QgKikmbWliYXR0ci0+ZGF0YTsKIAlyZXN1bHRjb2RlID0gJmRvdDExcmVxLnJlc3VsdGNvZGU7CiAKIAkvKiBTZXQgdXAgYSBkb3QxMXJlcV9taWJzZXQgKi8KQEAgLTcxNyw4ICs2NjIsNyBAQAogCWRvdDExcmVxLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OwogCWRvdDExcmVxLm1zZ2xlbiA9IHNpemVvZihwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QpOwogCW1lbWNweShkb3QxMXJlcS5kZXZuYW1lLAotCQkoKHdsYW5kZXZpY2VfdCAqKWRldi0+bWxfcHJpdiktPm5hbWUsCi0JCVdMQU5fREVWTkFNRUxFTl9NQVggLSAxKTsKKwkgICAgICAgKCh3bGFuZGV2aWNlX3QgKikgZGV2LT5tbF9wcml2KS0+bmFtZSwgV0xBTl9ERVZOQU1FTEVOX01BWCAtIDEpOwogCiAJLyogU2V0IHVwIHRoZSBtaWJhdHRyaWJ1dGUgYXJndW1lbnQgKi8KIAltaWJhdHRyLT5kaWQgPSBESURtc2dfZG90MTFyZXFfbWlic2V0X21pYmF0dHJpYnV0ZTsKQEAgLTcyOCw4ICs2NzIsOCBAQAogCW1hY2FkZHItPmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTUFDQWRkcmVzczsKIAltYWNhZGRyLT5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJbWFjYWRkci0+bGVuID0gc2l6ZW9mKG1hY2FkZHItPmRhdGEpOwotCW1hY2FkZHItPmRhdGEubGVuID0gV0xBTl9BRERSX0xFTjsKLQltZW1jcHkoJm1hY2FkZHItPmRhdGEuZGF0YSwgbmV3X2FkZHItPnNhX2RhdGEsIFdMQU5fQUREUl9MRU4pOworCW1hY2FkZHItPmRhdGEubGVuID0gRVRIX0FMRU47CisJbWVtY3B5KCZtYWNhZGRyLT5kYXRhLmRhdGEsIG5ld19hZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CiAKIAkvKiBTZXQgdXAgdGhlIHJlc3VsdGNvZGUgYXJndW1lbnQgKi8KIAlyZXN1bHRjb2RlLT5kaWQgPSBESURtc2dfZG90MTFyZXFfbWlic2V0X3Jlc3VsdGNvZGU7CkBAIC03NDMsMzYgKzY4NywzMCBAQAogCS8qIElmIHRoZSByZXF1ZXN0IHdhc24ndCBzdWNjZXNzZnVsLCByZXBvcnQgYW4gZXJyb3IgYW5kIGRvbid0CiAJICogY2hhbmdlIHRoZSBuZXRkZXYgYWRkcmVzcwogCSAqLwotCWlmICggcmVzdWx0ICE9IDAgfHwgcmVzdWx0Y29kZS0+ZGF0YSAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykgewotCQlXTEFOX0xPR19FUlJPUigKLQkJIkxvdy1sZXZlbCBkcml2ZXIgZmFpbGVkIGRvdDExcmVxX21pYnNldChkb3QxMU1BQ0FkZHJlc3MpLlxuIik7CisJaWYgKHJlc3VsdCAhPSAwIHx8IHJlc3VsdGNvZGUtPmRhdGEgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiTG93LWxldmVsIGRyaXZlciBmYWlsZWQgZG90MTFyZXFfbWlic2V0KGRvdDExTUFDQWRkcmVzcykuXG4iKTsKIAkJcmVzdWx0ID0gLUVBRERSTk9UQVZBSUw7CiAJfSBlbHNlIHsKIAkJLyogZXZlcnl0aGluZydzIG9rLCBjaGFuZ2UgdGhlIGFkZHIgaW4gbmV0ZGV2ICovCiAJCW1lbWNweShkZXYtPmRldl9hZGRyLCBuZXdfYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IHdsYW5fY2hhbmdlX210dShuZXRkZXZpY2VfdCAqZGV2LCBpbnQgbmV3X210dSkKIHsKLQlEQkZFTlRFUjsKLQkvLyAyMzEyIGlzIG1heCA4MDIuMTEgcGF5bG9hZCwgMjAgaXMgb3ZlcmhlYWQsIChldGhlciArIGxsYyArc25hcCkKLQkvLyBhbmQgYW5vdGhlciA4IGZvciB3ZXAuCi0gICAgICAgIGlmICggKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiAoMjMxMiAtIDIwIC0gOCkpKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCS8qIDIzMTIgaXMgbWF4IDgwMi4xMSBwYXlsb2FkLCAyMCBpcyBvdmVyaGVhZCwgKGV0aGVyICsgbGxjICtzbmFwKQorCSAgIGFuZCBhbm90aGVyIDggZm9yIHdlcC4gKi8KKwlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiAoMjMxMiAtIDIwIC0gOCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgICAgICBkZXYtPm10dSA9IG5ld19tdHU7CisJZGV2LT5tdHUgPSBuZXdfbXR1OwogCi0JREJGRVhJVDsKLQotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiB3bGFuX3NldHVwCiAqCkBAIC03OTcsMTAgKzczNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCB3bGFuX3NldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKIHsKLQlpbnQJCXJlc3VsdCA9IDA7Ci0JbmV0ZGV2aWNlX3QJKmRldjsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOworCW5ldGRldmljZV90ICpkZXY7CiAKIAkvKiBTZXQgdXAgdGhlIHdsYW5kZXYgKi8KIAl3bGFuZGV2LT5zdGF0ZSA9IFdMQU5fREVWSUNFX0NMT1NFRDsKQEAgLTgxMCwyOCArNzQ2LDI2IEBACiAJLyogU2V0IHVwIHRoZSByeCBxdWV1ZSAqLwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJndsYW5kZXYtPm5zZF9yeHEpOwogCXRhc2tsZXRfaW5pdCgmd2xhbmRldi0+cnhfYmgsCi0JCSAgICAgcDgwMjExbmV0ZGV2X3J4X2JoLAotCQkgICAgICh1bnNpZ25lZCBsb25nKXdsYW5kZXYpOworCQkgICAgIHA4MDIxMW5ldGRldl9yeF9iaCwgKHVuc2lnbmVkIGxvbmcpd2xhbmRldik7CiAKIAkvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgc3RydWN0IGRldmljZSAqLwotCWRldiA9IGFsbG9jX25ldGRldigwLCJ3bGFuJWQiLGV0aGVyX3NldHVwKTsKLQlpZiAoIGRldiA9PSBOVUxMICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIGFsbG9jIG5ldGRldi5cbiIpOworCWRldiA9IGFsbG9jX25ldGRldigwLCAid2xhbiVkIiwgZXRoZXJfc2V0dXApOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvYyBuZXRkZXYuXG4iKTsKIAkJcmVzdWx0ID0gMTsKIAl9IGVsc2UgewogCQl3bGFuZGV2LT5uZXRkZXYgPSBkZXY7CiAJCWRldi0+bWxfcHJpdiA9IHdsYW5kZXY7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0JcDgwMjExa25ldGRldl9oYXJkX3N0YXJ0X3htaXQ7Ci0JCWRldi0+Z2V0X3N0YXRzID0JcDgwMjExa25ldGRldl9nZXRfc3RhdHM7Ci0jaWZkZWYgSEFWRV9QUklWQVRFX0lPQ1RMCi0JCWRldi0+ZG9faW9jdGwgPSAJcDgwMjExa25ldGRldl9kb19pb2N0bDsKLSNlbmRpZgotI2lmZGVmIEhBVkVfTVVMVElDQVNUCi0JCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gcDgwMjExa25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0jZW5kaWYKLQkJZGV2LT5pbml0ID0JCXA4MDIxMWtuZXRkZXZfaW5pdDsKLQkJZGV2LT5vcGVuID0JCXA4MDIxMWtuZXRkZXZfb3BlbjsKLQkJZGV2LT5zdG9wID0JCXA4MDIxMWtuZXRkZXZfc3RvcDsKKwkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBwODAyMTFrbmV0ZGV2X2hhcmRfc3RhcnRfeG1pdDsKKwkJZGV2LT5nZXRfc3RhdHMgPSBwODAyMTFrbmV0ZGV2X2dldF9zdGF0czsKKwkJZGV2LT5pbml0ID0gcDgwMjExa25ldGRldl9pbml0OworCQlkZXYtPm9wZW4gPSBwODAyMTFrbmV0ZGV2X29wZW47CisJCWRldi0+c3RvcCA9IHA4MDIxMWtuZXRkZXZfc3RvcDsKKworCQltdXRleF9pbml0KCZ3bGFuZGV2LT5pb2N0bF9sb2NrKTsKKwkJLyogYmxvY2sgaW9jdGxzIHVudGlsIGZ1bGx5IGluaXRpYWxpc2VkLiBEb24ndCBmb3JnZXQgdG8gY2FsbAorCQkgICBhbGxvd19pb2N0bHMgYXQgc29tZSBwb2ludCEqLworCQltdXRleF9sb2NrKCZ3bGFuZGV2LT5pb2N0bF9sb2NrKTsKIAogI2lmIChXSVJFTEVTU19FWFQgPCAyMSkKIAkJZGV2LT5nZXRfd2lyZWxlc3Nfc3RhdHMgPSBwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0czsKQEAgLTgzOSwyMCArNzczLDkgQEAKIAkJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZwODAyMTF3ZXh0X2hhbmRsZXJfZGVmOwogCiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSNpZmRlZiBIQVZFX0NIQU5HRV9NVFUKLQkJZGV2LT5jaGFuZ2VfbXR1ID0gd2xhbl9jaGFuZ2VfbXR1OwotI2VuZGlmCi0jaWZkZWYgSEFWRV9TRVRfTUFDX0FERFIKLQkJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPQlwODAyMTFrbmV0ZGV2X3NldF9tYWNfYWRkcmVzczsKLSNlbmRpZgotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAotCQlkZXYtPnR4X3RpbWVvdXQgICAgICA9ICAmcDgwMjExa25ldGRldl90eF90aW1lb3V0OwotCQlkZXYtPndhdGNoZG9nX3RpbWVvICA9ICAod2xhbl93YXRjaGRvZyAqIEhaKSAvIDEwMDA7Ci0jZW5kaWYKIAkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTg3OSwyNiArODAyLDIxIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCB3bGFuX3Vuc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCWludAkJcmVzdWx0ID0gMDsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOwogCiAJdGFza2xldF9raWxsKCZ3bGFuZGV2LT5yeF9iaCk7CiAKLQlpZiAod2xhbmRldi0+bmV0ZGV2ID09IE5VTEwgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJjYWxsZWQgd2l0aG91dCB3bGFuZGV2LT5uZXRkZXYgc2V0LlxuIik7CisJaWYgKHdsYW5kZXYtPm5ldGRldiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FsbGVkIHdpdGhvdXQgd2xhbmRldi0+bmV0ZGV2IHNldC5cbiIpOwogCQlyZXN1bHQgPSAxOwogCX0gZWxzZSB7CiAJCWZyZWVfbmV0ZGV2KHdsYW5kZXYtPm5ldGRldik7CiAJCXdsYW5kZXYtPm5ldGRldiA9IE5VTEw7CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiByZWdpc3Rlcl93bGFuZGV2CiAqCkBAIC05MjAsMTkgKzgzOCwxNSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JaW50CQlpID0gMDsKLQotCURCRkVOVEVSOworCWludCBpID0gMDsKIAogCWkgPSByZWdpc3Rlcl9uZXRkZXYod2xhbmRldi0+bmV0ZGV2KTsKIAlpZiAoaSkKIAkJcmV0dXJuIGk7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiB1bnJlZ2lzdGVyX3dsYW5kZXYKICoKQEAgLTk1NCwyMCArODY4LDE1IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCURCRkVOVEVSOwotCiAJdW5yZWdpc3Rlcl9uZXRkZXYod2xhbmRldi0+bmV0ZGV2KTsKIAogCS8qIE5vdyB0byBjbGVhbiBvdXQgdGhlIHJ4IHF1ZXVlICovCi0Jd2hpbGUgKCAoc2tiID0gc2tiX2RlcXVldWUoJndsYW5kZXYtPm5zZF9yeHEpKSApIHsKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bGFuZGV2LT5uc2RfcnhxKSkpCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQl9CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwODAyMTFuZXRkZXZfaHdyZW1vdmVkCiAqCkBAIC0xMDAwLDE4ICs5MDksMTMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdm9pZCBwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKIHsKLQlEQkZFTlRFUjsKIAl3bGFuZGV2LT5od3JlbW92ZWQgPSAxOwotCWlmICggd2xhbmRldi0+c3RhdGUgPT0gV0xBTl9ERVZJQ0VfT1BFTikgeworCWlmICh3bGFuZGV2LT5zdGF0ZSA9PSBXTEFOX0RFVklDRV9PUEVOKQogCQluZXRpZl9zdG9wX3F1ZXVlKHdsYW5kZXYtPm5ldGRldik7Ci0JfQogCiAJbmV0aWZfZGV2aWNlX2RldGFjaCh3bGFuZGV2LT5uZXRkZXYpOwotCi0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcDgwMjExX3J4X3R5cGVkcm9wCiAqCkBAIC0xMDMzLDI4ICs5MzcsMjcgQEAKICogQ2FsbCBjb250ZXh0OgogKglpbnRlcnJ1cHQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBwODAyMTFfcnhfdHlwZWRyb3AoIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IGZjKQorc3RhdGljIGludCBwODAyMTFfcnhfdHlwZWRyb3Aod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MTYgZmMpCiB7Ci0JdTE2CWZ0eXBlOwotCXUxNglmc3R5cGU7Ci0JaW50CWRyb3AgPSAwOworCXUxNiBmdHlwZTsKKwl1MTYgZnN0eXBlOworCWludCBkcm9wID0gMDsKIAkvKiBDbGFzc2lmeSBmcmFtZSwgaW5jcmVtZW50IGNvdW50ZXIgKi8KIAlmdHlwZSA9IFdMQU5fR0VUX0ZDX0ZUWVBFKGZjKTsKIAlmc3R5cGUgPSBXTEFOX0dFVF9GQ19GU1RZUEUoZmMpOwogI2lmIDAKLQlXTEFOX0xPR19ERUJVRyg0LAotCQkicnhfdHlwZWRyb3AgOiBmdHlwZT0lZCBmc3R5cGU9JWQuXG4iLCBmdHlwZSwgZnN0eXBlKTsKKwlwcl9kZWJ1ZygicnhfdHlwZWRyb3AgOiBmdHlwZT0lZCBmc3R5cGU9JWQuXG4iLCBmdHlwZSwgZnN0eXBlKTsKICNlbmRpZgotCXN3aXRjaCAoIGZ0eXBlICkgeworCXN3aXRjaCAoZnR5cGUpIHsKIAljYXNlIFdMQU5fRlRZUEVfTUdNVDoKIAkJaWYgKCh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8Ci0JCQkod2xhbmRldi0+bmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwkJICAgICh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkJZHJvcCA9IDE7CiAJCQlicmVhazsKIAkJfQotCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBtZ210OlxuIik7CisJCXByX2RlYnVnKCJyeCdkIG1nbXQ6XG4iKTsKIAkJd2xhbmRldi0+cngubWdtdCsrOwotCQlzd2l0Y2goIGZzdHlwZSApIHsKKwkJc3dpdGNoIChmc3R5cGUpIHsKIAkJY2FzZSBXTEFOX0ZTVFlQRV9BU1NPQ1JFUToKIAkJCS8qIHByaW50aygiYXNzb2NyZXEiKTsgKi8KIAkJCXdsYW5kZXYtPnJ4LmFzc29jcmVxKys7CkBAIC0xMTEwLDEzICsxMDEzLDEzIEBACiAKIAljYXNlIFdMQU5fRlRZUEVfQ1RMOgogCQlpZiAoKHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwKLQkJCSh3bGFuZGV2LT5uZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQkgICAgKHdsYW5kZXYtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCQlkcm9wID0gMTsKIAkJCWJyZWFrOwogCQl9Ci0JCVdMQU5fTE9HX0RFQlVHKDMsICJyeCdkIGN0bDpcbiIpOworCQlwcl9kZWJ1ZygicngnZCBjdGw6XG4iKTsKIAkJd2xhbmRldi0+cnguY3RsKys7Ci0JCXN3aXRjaCggZnN0eXBlICkgeworCQlzd2l0Y2ggKGZzdHlwZSkgewogCQljYXNlIFdMQU5fRlNUWVBFX1BTUE9MTDoKIAkJCS8qIHByaW50aygicHNwb2xsIik7ICovCiAJCQl3bGFuZGV2LT5yeC5wc3BvbGwrKzsKQEAgLTExNTIsNyArMTA1NSw3IEBACiAKIAljYXNlIFdMQU5fRlRZUEVfREFUQToKIAkJd2xhbmRldi0+cnguZGF0YSsrOwotCQlzd2l0Y2goIGZzdHlwZSApIHsKKwkJc3dpdGNoIChmc3R5cGUpIHsKIAkJY2FzZSBXTEFOX0ZTVFlQRV9EQVRBT05MWToKIAkJCXdsYW5kZXYtPnJ4LmRhdGFvbmx5Kys7CiAJCQlicmVhazsKQEAgLTExNjYsMTkgKzEwNjksMTkgQEAKIAkJCXdsYW5kZXYtPnJ4LmRhdGFfX2NmYWNrX2NmcG9sbCsrOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9GU1RZUEVfTlVMTDoKLQkJCVdMQU5fTE9HX0RFQlVHKDMsICJyeCdkIGRhdGE6bnVsbFxuIik7CisJCQlwcl9kZWJ1ZygicngnZCBkYXRhOm51bGxcbiIpOwogCQkJd2xhbmRldi0+cngubnVsbCsrOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9GU1RZUEVfQ0ZBQ0s6Ci0JCQlXTEFOX0xPR19ERUJVRygzLCAicngnZCBkYXRhOmNmYWNrXG4iKTsKKwkJCXByX2RlYnVnKCJyeCdkIGRhdGE6Y2ZhY2tcbiIpOwogCQkJd2xhbmRldi0+cnguY2ZhY2srKzsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fRlNUWVBFX0NGUE9MTDoKLQkJCVdMQU5fTE9HX0RFQlVHKDMsICJyeCdkIGRhdGE6Y2Zwb2xsXG4iKTsKKwkJCXByX2RlYnVnKCJyeCdkIGRhdGE6Y2Zwb2xsXG4iKTsKIAkJCXdsYW5kZXYtPnJ4LmNmcG9sbCsrOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9GU1RZUEVfQ0ZBQ0tfQ0ZQT0xMOgotCQkJV0xBTl9MT0dfREVCVUcoMywgInJ4J2QgZGF0YTpjZmFja19jZnBvbGxcbiIpOworCQkJcHJfZGVidWcoInJ4J2QgZGF0YTpjZmFja19jZnBvbGxcbiIpOwogCQkJd2xhbmRldi0+cnguY2ZhY2tfY2Zwb2xsKys7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKQEAgLTExOTIsMTggKzEwOTUsMjAgQEAKIAlyZXR1cm4gZHJvcDsKIH0KIAotc3RhdGljIHZvaWQgcDgwMjExa25ldGRldl90eF90aW1lb3V0KCBuZXRkZXZpY2VfdCAqbmV0ZGV2KQorc3RhdGljIHZvaWQgcDgwMjExa25ldGRldl90eF90aW1lb3V0KG5ldGRldmljZV90ICpuZXRkZXYpCiB7Ci0Jd2xhbmRldmljZV90CSp3bGFuZGV2ID0gbmV0ZGV2LT5tbF9wcml2OwotCURCRkVOVEVSOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IG5ldGRldi0+bWxfcHJpdjsKIAogCWlmICh3bGFuZGV2LT50eF90aW1lb3V0KSB7CiAJCXdsYW5kZXYtPnR4X3RpbWVvdXQod2xhbmRldik7CiAJfSBlbHNlIHsKLQkJV0xBTl9MT0dfV0FSTklORygiSW1wbGVtZW50IHR4X3RpbWVvdXQgZm9yICVzXG4iLAotCQkJCSB3bGFuZGV2LT5uc2RuYW1lKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW1wbGVtZW50IHR4X3RpbWVvdXQgZm9yICVzXG4iLAorCQkgICAgICAgd2xhbmRldi0+bnNkbmFtZSk7CiAJCW5ldGlmX3dha2VfcXVldWUod2xhbmRldi0+bmV0ZGV2KTsKIAl9Cit9CiAKLQlEQkZFWElUOwordm9pZCBwODAyMTFfYWxsb3dfaW9jdGxzKHdsYW5kZXZpY2VfdCAqd2xhbmRldikKK3sKKwltdXRleF91bmxvY2soJndsYW5kZXYtPmlvY3RsX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaAppbmRleCA5NDAxNDZmLi5iOTYwOTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuaApAQCAtNTUsMTAgKzU1LDE2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogQ29uc3RhbnRzICovCiAKKyN1bmRlZiBuZXRkZXZpY2VfdAordHlwZWRlZiBzdHJ1Y3QgbmV0X2RldmljZSBuZXRkZXZpY2VfdDsKKworI2RlZmluZSBXTEFOX1JFTEVBU0UJIjAuMy4wLXN0YWdpbmciCisKICNkZWZpbmUgV0xBTl9ERVZJQ0VfQ0xPU0VECTAKICNkZWZpbmUgV0xBTl9ERVZJQ0VfT1BFTgkxCiAKQEAgLTY4LDggKzc0LDYgQEAKICNkZWZpbmUgV0xBTl9NQUNNT0RFX0VTU19BUAkzCiAKIC8qIE1TRCBTdGF0ZXMgKi8KLSNkZWZpbmUgV0xBTl9NU0RfU1RBUlQJCQktMQotI2RlZmluZSBXTEFOX01TRF9EUklWRVJMT0FERUQJCTAKICNkZWZpbmUgV0xBTl9NU0RfSFdQUkVTRU5UX1BFTkRJTkcJMQogI2RlZmluZSBXTEFOX01TRF9IV0ZBSUwJCQkyCiAjZGVmaW5lIFdMQU5fTVNEX0hXUFJFU0VOVAkJMwpAQCAtNzksNzkgKzgzLDY2IEBACiAjZGVmaW5lIFdMQU5fTVNEX1JVTk5JTkcJCTcKIAogI2lmbmRlZiBFVEhfUF9FQ09ORVQKLSNkZWZpbmUgRVRIX1BfRUNPTkVUICAgMHgwMDE4ICAgIC8qIG5lZWRlZCBmb3IgMi4yLngga2VybmVscyAqLworI2RlZmluZSBFVEhfUF9FQ09ORVQgICAweDAwMTgJLyogbmVlZGVkIGZvciAyLjIueCBrZXJuZWxzICovCiAjZW5kaWYKIAogI2RlZmluZSBFVEhfUF84MDIxMV9SQVcgICAgICAgIChFVEhfUF9FQ09ORVQgKyAxKQogCiAjaWZuZGVmIEFSUEhSRF9JRUVFODAyMTEKLSNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxMSA4MDEgICAgIC8qIGtlcm5lbCAyLjQuNiAqLworI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExIDgwMQkvKiBrZXJuZWwgMi40LjYgKi8KICNlbmRpZgogCi0jaWZuZGVmIEFSUEhSRF9JRUVFODAyMTFfUFJJU00gIC8qIGtlcm5lbCAyLjQuMTggKi8KKyNpZm5kZWYgQVJQSFJEX0lFRUU4MDIxMV9QUklTTQkvKiBrZXJuZWwgMi40LjE4ICovCiAjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTFfUFJJU00gODAyCiAjZW5kaWYKIAogLyotLS0gTlNEIENhcGFiaWxpdGllcyBGbGFncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX0hBUkRXQVJFV0VQICAgICAgICAgICAweDAxICAvKiBoYXJkd2FyZSB3ZXAgZW5naW5lICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfVElFRFdFUCAgICAgICAgICAgICAgIDB4MDIgIC8qIGNhbid0IGRlY291cGxlIGVuL2RlICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfTk9IT1NUV0VQICAgICAgICAgICAgIDB4MDQgIC8qIG11c3QgdXNlIGhhcmR3YXJlIHdlcCAqLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX1BCQ0MgICAgICAgICAgICAgICAgICAweDA4ICAvKiBoYXJkd2FyZSBzdXBwb3J0cyBQQkNDICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfU0hPUlRfUFJFQU1CTEUgICAgICAgIDB4MTAgIC8qIGhhcmR3YXJlIHN1cHBvcnRzICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfQUdJTElUWSAgICAgICAgICAgICAgIDB4MjAgIC8qIGhhcmR3YXJlIHN1cHBvcnRzICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfQVBfUkVUUkFOU01JVCAgICAgICAgIDB4NDAgIC8qIG5zZCBoYW5kbGVzIHJldHJhbnNtaXRzICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCAgICAgICAgICAgIDB4ODAgIC8qIG5zZCBoYW5kbGVzIGZyYWcvZGVmcmFnICovCi0jZGVmaW5lIFA4MDIxMV9OU0RDQVBfQVVUT0pPSU4gICAgICAgICAgICAgIDB4MTAwICAvKiBuc2QgZG9lcyBhdXRvam9pbiAqLwotI2RlZmluZSBQODAyMTFfTlNEQ0FQX05PU0NBTiAgICAgICAgICAgICAgICAweDIwMCAgLyogbnNkIGNhbiBzY2FuICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBNYWNyb3MgKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFR5cGVzICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfSEFSRFdBUkVXRVAgICAgICAgICAgIDB4MDEJLyogaGFyZHdhcmUgd2VwIGVuZ2luZSAqLworI2RlZmluZSBQODAyMTFfTlNEQ0FQX1NIT1JUX1BSRUFNQkxFICAgICAgICAweDEwCS8qIGhhcmR3YXJlIHN1cHBvcnRzICovCisjZGVmaW5lIFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCAgICAgICAgICAgIDB4ODAJLyogbnNkIGhhbmRsZXMgZnJhZy9kZWZyYWcgKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9BVVRPSk9JTiAgICAgICAgICAgICAgMHgxMDAJLyogbnNkIGRvZXMgYXV0b2pvaW4gKi8KKyNkZWZpbmUgUDgwMjExX05TRENBUF9OT1NDQU4gICAgICAgICAgICAgICAgMHgyMDAJLyogbnNkIGNhbiBzY2FuICovCiAKIC8qIFJlY2VpdmVkIGZyYW1lIHN0YXRpc3RpY3MgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMV9mcm1yeF90Ci17Ci0JdTMyCW1nbXQ7Ci0JdTMyCWFzc29jcmVxOwotCXUzMglhc3NvY3Jlc3A7Ci0JdTMyCXJlYXNzb2NyZXE7Ci0JdTMyCXJlYXNzb2NyZXNwOwotCXUzMglwcm9iZXJlcTsKLQl1MzIJcHJvYmVyZXNwOwotCXUzMgliZWFjb247Ci0JdTMyCWF0aW07Ci0JdTMyCWRpc2Fzc29jOwotCXUzMglhdXRoZW47Ci0JdTMyCWRlYXV0aGVuOwotCXUzMgltZ210X3Vua25vd247Ci0JdTMyCWN0bDsKLQl1MzIJcHNwb2xsOwotCXUzMglydHM7Ci0JdTMyCWN0czsKLQl1MzIJYWNrOwotCXUzMgljZmVuZDsKLQl1MzIJY2ZlbmRjZmFjazsKLQl1MzIJY3RsX3Vua25vd247Ci0JdTMyCWRhdGE7Ci0JdTMyCWRhdGFvbmx5OwotCXUzMglkYXRhX2NmYWNrOwotCXUzMglkYXRhX2NmcG9sbDsKLQl1MzIJZGF0YV9fY2ZhY2tfY2Zwb2xsOwotCXUzMgludWxsOwotCXUzMgljZmFjazsKLQl1MzIJY2Zwb2xsOwotCXUzMgljZmFja19jZnBvbGw7Ci0JdTMyCWRhdGFfdW5rbm93bjsKLQl1MzIgIGRlY3J5cHQ7Ci0JdTMyICBkZWNyeXB0X2VycjsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMV9mcm1yeF90IHsKKwl1MzIgbWdtdDsKKwl1MzIgYXNzb2NyZXE7CisJdTMyIGFzc29jcmVzcDsKKwl1MzIgcmVhc3NvY3JlcTsKKwl1MzIgcmVhc3NvY3Jlc3A7CisJdTMyIHByb2JlcmVxOworCXUzMiBwcm9iZXJlc3A7CisJdTMyIGJlYWNvbjsKKwl1MzIgYXRpbTsKKwl1MzIgZGlzYXNzb2M7CisJdTMyIGF1dGhlbjsKKwl1MzIgZGVhdXRoZW47CisJdTMyIG1nbXRfdW5rbm93bjsKKwl1MzIgY3RsOworCXUzMiBwc3BvbGw7CisJdTMyIHJ0czsKKwl1MzIgY3RzOworCXUzMiBhY2s7CisJdTMyIGNmZW5kOworCXUzMiBjZmVuZGNmYWNrOworCXUzMiBjdGxfdW5rbm93bjsKKwl1MzIgZGF0YTsKKwl1MzIgZGF0YW9ubHk7CisJdTMyIGRhdGFfY2ZhY2s7CisJdTMyIGRhdGFfY2Zwb2xsOworCXUzMiBkYXRhX19jZmFja19jZnBvbGw7CisJdTMyIG51bGw7CisJdTMyIGNmYWNrOworCXUzMiBjZnBvbGw7CisJdTMyIGNmYWNrX2NmcG9sbDsKKwl1MzIgZGF0YV91bmtub3duOworCXUzMiBkZWNyeXB0OworCXUzMiBkZWNyeXB0X2VycjsKIH0gcDgwMjExX2ZybXJ4X3Q7CiAKIC8qIGNhbGxlZCBieSAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KLXN0cnVjdCBpd19zdGF0aXN0aWNzKiBwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cyhuZXRkZXZpY2VfdCAqZGV2KTsKK3N0cnVjdCBpd19zdGF0aXN0aWNzICpwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cyhuZXRkZXZpY2VfdCAqIGRldik7CiAvKiB3aXJlbGVzcyBleHRlbnNpb25zJyBpb2N0bHMgKi8KLWludCBwODAyMTF3ZXh0X3N1cHBvcnRfaW9jdGwobmV0ZGV2aWNlX3QgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpOwogZXh0ZXJuIHN0cnVjdCBpd19oYW5kbGVyX2RlZiBwODAyMTF3ZXh0X2hhbmRsZXJfZGVmOwogaW50IHA4MDIxMXdleHRfZXZlbnRfYXNzb2NpYXRlZChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgaW50IGFzc29jKTsKIApAQCAtMTU5LDk2ICsxNTAsOTkgQEAKICNkZWZpbmUgTlVNX1dFUEtFWVMgNAogI2RlZmluZSBNQVhfS0VZTEVOIDMyCiAKLSNkZWZpbmUgSE9TVFdFUF9ERUZBVUxUS0VZX01BU0sgKEJJVDF8QklUMCkKLSNkZWZpbmUgSE9TVFdFUF9ERUNSWVBUICBCSVQ0Ci0jZGVmaW5lIEhPU1RXRVBfRU5DUllQVCAgQklUNQotI2RlZmluZSBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEIEJJVDYKLSNkZWZpbmUgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQgQklUNworI2RlZmluZSBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyAoQklUKDEpfEJJVCgwKSkKKyNkZWZpbmUgSE9TVFdFUF9ERUNSWVBUICBCSVQoNCkKKyNkZWZpbmUgSE9TVFdFUF9FTkNSWVBUICBCSVQoNSkKKyNkZWZpbmUgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCBCSVQoNikKKyNkZWZpbmUgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQgQklUKDcpCiAKIGV4dGVybiBpbnQgd2xhbl93YXRjaGRvZzsKIGV4dGVybiBpbnQgd2xhbl93ZXh0X3dyaXRlOwogCiAvKiBXTEFOIGRldmljZSB0eXBlICovCi10eXBlZGVmIHN0cnVjdCB3bGFuZGV2aWNlCi17Ci0Jc3RydWN0IHdsYW5kZXZpY2UJKm5leHQ7CQkvKiBsaW5rIGZvciBsaXN0IG9mIGRldmljZXMgKi8KLQl2b2lkCQkJKnByaXY7CQkvKiBwcml2YXRlIGRhdGEgZm9yIE1TRCAqLwordHlwZWRlZiBzdHJ1Y3Qgd2xhbmRldmljZSB7CisJc3RydWN0IHdsYW5kZXZpY2UgKm5leHQ7CS8qIGxpbmsgZm9yIGxpc3Qgb2YgZGV2aWNlcyAqLworCXZvaWQgKnByaXY7CQkvKiBwcml2YXRlIGRhdGEgZm9yIE1TRCAqLwogCiAJLyogU3Vic3lzdGVtIFN0YXRlICovCi0JY2hhcgkJbmFtZVtXTEFOX0RFVk5BTUVMRU5fTUFYXTsgLyogRGV2IG5hbWUsIGZyb20gcmVnaXN0ZXJfd2xhbmRldigpKi8KLQljaGFyCQkqbnNkbmFtZTsKKwljaGFyIG5hbWVbV0xBTl9ERVZOQU1FTEVOX01BWF07CS8qIERldiBuYW1lLCBmcm9tIHJlZ2lzdGVyX3dsYW5kZXYoKSAqLworCWNoYXIgKm5zZG5hbWU7CiAKLQl1MzIgICAgICAgICAgc3RhdGU7ICAgICAgICAgIC8qIERldmljZSBJL0Ygc3RhdGUgKG9wZW4vY2xvc2VkKSAqLwotCXUzMgkJbXNkc3RhdGU7CS8qIHN0YXRlIG9mIHVuZGVybHlpbmcgZHJpdmVyICovCi0JdTMyCQlod3JlbW92ZWQ7CS8qIEhhcyB0aGUgaHcgYmVlbiB5YW5rZWQgb3V0PyAqLworCXUzMiBzdGF0ZTsJCS8qIERldmljZSBJL0Ygc3RhdGUgKG9wZW4vY2xvc2VkKSAqLworCXUzMiBtc2RzdGF0ZTsJCS8qIHN0YXRlIG9mIHVuZGVybHlpbmcgZHJpdmVyICovCisJdTMyIGh3cmVtb3ZlZDsJCS8qIEhhcyB0aGUgaHcgYmVlbiB5YW5rZWQgb3V0PyAqLwogCiAJLyogSGFyZHdhcmUgY29uZmlnICovCi0JdW5zaWduZWQgaW50CQlpcnE7Ci0JdW5zaWduZWQgaW50CQlpb2Jhc2U7Ci0JdW5zaWduZWQgaW50CQltZW1iYXNlOwotCXUzMiAgICAgICAgICBuc2RjYXBzOyAgLyogTlNEIENhcGFiaWxpdGllcyBmbGFncyAqLworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgaW50IGlvYmFzZTsKKwl1bnNpZ25lZCBpbnQgbWVtYmFzZTsKKwl1MzIgbnNkY2FwczsJCS8qIE5TRCBDYXBhYmlsaXRpZXMgZmxhZ3MgKi8KIAogCS8qIENvbmZpZyB2YXJzICovCi0JdW5zaWduZWQgaW50CQlldGhjb252OworCXVuc2lnbmVkIGludCBldGhjb252OwogCiAJLyogZGV2aWNlIG1ldGhvZHMgKGluaXQgYnkgTVNELCB1c2VkIGJ5IHA4MDIxMSAqLwotCWludAkJKCpvcGVuKShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7Ci0JaW50CQkoKmNsb3NlKShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7Ci0Jdm9pZAkJKCpyZXNldCkoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYgKTsKLQlpbnQJCSgqdHhmcmFtZSkoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7Ci0JaW50CQkoKm1sbWVyZXF1ZXN0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7Ci0JaW50ICAgICAgICAgICAgICgqc2V0X211bHRpY2FzdF9saXN0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwKLQkJCQkJICAgICAgbmV0ZGV2aWNlX3QgKmRldik7Ci0Jdm9pZAkJKCp0eF90aW1lb3V0KShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJaW50ICgqb3BlbikgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKKwlpbnQgKCpjbG9zZSkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKKwl2b2lkICgqcmVzZXQpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJaW50ICgqdHhmcmFtZSkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAorCQkJcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CisJaW50ICgqbWxtZXJlcXVlc3QpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CisJaW50ICgqc2V0X211bHRpY2FzdF9saXN0KSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsCisJCQkJICAgbmV0ZGV2aWNlX3QgKmRldik7CisJdm9pZCAoKnR4X3RpbWVvdXQpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CiAKIAkvKiA4MDIuMTEgU3RhdGUgKi8KLQl1OAkJYnNzaWRbV0xBTl9CU1NJRF9MRU5dOwotCXA4MDIxMXBzdHIzMl90CXNzaWQ7Ci0JdTMyCQltYWNtb2RlOwotCWludCAgICAgICAgICAgICBsaW5rc3RhdHVzOworCXU4IGJzc2lkW1dMQU5fQlNTSURfTEVOXTsKKwlwODAyMTFwc3RyMzJfdCBzc2lkOworCXUzMiBtYWNtb2RlOworCWludCBsaW5rc3RhdHVzOwogCiAJLyogV0VQIFN0YXRlICovCiAJdTggd2VwX2tleXNbTlVNX1dFUEtFWVNdW01BWF9LRVlMRU5dOwogCXU4IHdlcF9rZXlsZW5zW05VTV9XRVBLRVlTXTsKLQlpbnQgICBob3N0d2VwOworCWludCBob3N0d2VwOwogCiAJLyogUmVxdWVzdC9Db25maXJtIGkvZiBzdGF0ZSAodXNlZCBieSBwODAyMTEpICovCi0JdW5zaWduZWQgbG9uZwkJcmVxdWVzdF9wZW5kaW5nOyAvKiBmbGFnLCBhY2Nlc3MgYXRvbWljYWxseSAqLworCXVuc2lnbmVkIGxvbmcgcmVxdWVzdF9wZW5kaW5nOwkvKiBmbGFnLCBhY2Nlc3MgYXRvbWljYWxseSAqLwogCiAJLyogbmV0bGluayBzb2NrZXQgKi8KIAkvKiBxdWV1ZSBmb3IgaW5kaWNhdGlvbnMgd2FpdGluZyBmb3IgY21kIGNvbXBsZXRpb24gKi8KIAkvKiBMaW51eCBuZXRkZXZpY2UgYW5kIHN1cHBvcnQgKi8KLQluZXRkZXZpY2VfdAkJKm5ldGRldjsJLyogcHRyIHRvIGxpbnV4IG5ldGRldmljZSAqLworCW5ldGRldmljZV90ICpuZXRkZXY7CS8qIHB0ciB0byBsaW51eCBuZXRkZXZpY2UgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBsaW51eF9zdGF0czsKIAogCS8qIFJ4IGJvdHRvbSBoYWxmICovCi0Jc3RydWN0IHRhc2tsZXRfc3RydWN0CXJ4X2JoOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByeF9iaDsKIAotCXN0cnVjdCBza19idWZmX2hlYWQJbnNkX3J4cTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIG5zZF9yeHE7CiAKIAkvKiA4MDIuMTEgZGV2aWNlIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QgcDgwMjExX2ZybXJ4X3QJcng7CisJc3RydWN0IHA4MDIxMV9mcm1yeF90IHJ4OwogCi0Jc3RydWN0IGl3X3N0YXRpc3RpY3MJd3N0YXRzOworCXN0cnVjdCBpd19zdGF0aXN0aWNzIHdzdGF0czsKIAogCS8qIGprcmllZ2w6IGl3c3B5IGZpZWxkcyAqLwotICAgICAgICB1OAkJCXNweV9udW1iZXI7Ci0gICAgICAgIGNoYXIJCQlzcHlfYWRkcmVzc1tJV19NQVhfU1BZXVtFVEhfQUxFTl07Ci0gICAgICAgIHN0cnVjdCBpd19xdWFsaXR5ICAgICAgIHNweV9zdGF0W0lXX01BWF9TUFldOworCXU4IHNweV9udW1iZXI7CisJY2hhciBzcHlfYWRkcmVzc1tJV19NQVhfU1BZXVtFVEhfQUxFTl07CisJc3RydWN0IGl3X3F1YWxpdHkgc3B5X3N0YXRbSVdfTUFYX1NQWV07CisKKwlzdHJ1Y3QgbXV0ZXggaW9jdGxfbG9jazsKIH0gd2xhbmRldmljZV90OwogCiAvKiBXRVAgc3R1ZmYgKi8KLWludCB3ZXBfY2hhbmdlX2tleSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGludCBrZXludW0sIHU4KiBrZXksIGludCBrZXlsZW4pOwotaW50IHdlcF9kZWNyeXB0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTggKmJ1ZiwgdTMyIGxlbiwgaW50IGtleV9vdmVycmlkZSwgdTggKml2LCB1OCAqaWN2KTsKLWludCB3ZXBfZW5jcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICpidWYsIHU4ICpkc3QsIHUzMiBsZW4sIGludCBrZXludW0sIHU4ICppdiwgdTggKmljdik7CitpbnQgd2VwX2NoYW5nZV9rZXkod2xhbmRldmljZV90ICp3bGFuZGV2LCBpbnQga2V5bnVtLCB1OCAqa2V5LCBpbnQga2V5bGVuKTsKK2ludCB3ZXBfZGVjcnlwdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICpidWYsIHUzMiBsZW4sIGludCBrZXlfb3ZlcnJpZGUsCisJCXU4ICppdiwgdTggKmljdik7CitpbnQgd2VwX2VuY3J5cHQod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqYnVmLCB1OCAqZHN0LCB1MzIgbGVuLCBpbnQga2V5bnVtLAorCQl1OCAqaXYsIHU4ICppY3YpOwogCi12b2lkCXA4MDIxMW5ldGRldl9zdGFydHVwKHZvaWQpOwotdm9pZAlwODAyMTFuZXRkZXZfc2h1dGRvd24odm9pZCk7Ci1pbnQJd2xhbl9zZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwotaW50CXdsYW5fdW5zZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwotaW50CXJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLWludAl1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLXZvaWQJcDgwMjExbmV0ZGV2X3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkCXA4MDIxMW5ldGRldl9od3JlbW92ZWQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLQoraW50IHdsYW5fc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK2ludCB3bGFuX3Vuc2V0dXAod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK2ludCByZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitpbnQgdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkIHA4MDIxMW5ldGRldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBwODAyMTFuZXRkZXZfaHdyZW1vdmVkKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Cit2b2lkIHA4MDIxMV9hbGxvd19pb2N0bHMod2xhbmRldmljZV90ICp3bGFuZGV2KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYwppbmRleCA2ZTIwYmZmLi4xNWVjYmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYwpAQCAtNTAsMTEgKzUwLDYgQEAKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICovCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBTeXN0ZW0gSW5jbHVkZXMgKi8KLQotCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNjcsMTEgKzYyLDYgQEAKICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KIAotI2luY2x1ZGUgIndsYW5fY29tcGF0LmgiCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBQcm9qZWN0IEluY2x1ZGVzICovCi0KICNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgogI2luY2x1ZGUgInA4MDIxMWhkci5oIgogI2luY2x1ZGUgInA4MDIxMW1nbXQuaCIKQEAgLTgzLDMwICs3MywxMCBAQAogI2luY2x1ZGUgInA4MDIxMW1ldGFzdHJ1Y3QuaCIKICNpbmNsdWRlICJwODAyMTFyZXEuaCIKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIENvbnN0YW50cyAqLwotCi0vKiBNYXhpbXVtIGFtb3VudCBvZiB0aW1lIHdlJ2xsIHdhaXQgZm9yIGEgcmVxdWVzdCB0byBjb21wbGV0ZSAqLwotI2RlZmluZSBQODAyMTFSRVFfTUFYVElNRQkzKkhaCS8qIDMgc2Vjb25kcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgTWFjcm9zICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBUeXBlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgKi8KLQotc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyggd2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKTsKLXN0YXRpYyBpbnQgcDgwMjExcmVxX21pYnNldF9taWJnZXQod2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKm1pYl9tc2csIGludCBpc2dldCk7Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLwotCitzdGF0aWMgdm9pZCBwODAyMTFyZXFfaGFuZGxlbXNnKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CitzdGF0aWMgaW50IHA4MDIxMXJlcV9taWJzZXRfbWliZ2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKm1pYl9tc2csCisJCQkJICAgaW50IGlzZ2V0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHA4MDIxMXJlcV9kb3JlcXVlc3QKQEAgLTEyNCwzMyArOTQsMzAgQEAKICoJUG90ZW50aWFsbHkgYmxvY2tzIHRoZSBjYWxsZXIsIHNvIGl0J3MgYSBnb29kIGlkZWEgdG8KICoJbm90IGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIGFuIGludGVycnVwdCBjb250ZXh0LgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1pbnQgcDgwMjExcmVxX2RvcmVxdWVzdCggd2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqbXNnYnVmKQoraW50IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqbXNnYnVmKQogewotCWludAkJcmVzdWx0ID0gMDsKLQlwODAyMTFtc2dfdAkqbXNnID0gKHA4MDIxMW1zZ190Kiltc2didWY7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlwODAyMTFtc2dfdCAqbXNnID0gKHA4MDIxMW1zZ190ICopIG1zZ2J1ZjsKIAogCS8qIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgTVNEIGlzIHJ1bm5pbmcgKi8KLQlpZiAoCi0JISgod2xhbmRldi0+bXNkc3RhdGUgPT0gV0xBTl9NU0RfSFdQUkVTRU5UICYmCi0JbXNnLT5tc2djb2RlID09IERJRG1zZ19sbnhyZXFfaWZzdGF0ZSkgfHwKLQl3bGFuZGV2LT5tc2RzdGF0ZSA9PSBXTEFOX01TRF9SVU5OSU5HIHx8Ci0Jd2xhbmRldi0+bXNkc3RhdGUgPT0gV0xBTl9NU0RfRldMT0FEKSApIHsKKwlpZiAoISgod2xhbmRldi0+bXNkc3RhdGUgPT0gV0xBTl9NU0RfSFdQUkVTRU5UICYmCisJICAgICAgIG1zZy0+bXNnY29kZSA9PSBESURtc2dfbG54cmVxX2lmc3RhdGUpIHx8CisJICAgICAgd2xhbmRldi0+bXNkc3RhdGUgPT0gV0xBTl9NU0RfUlVOTklORyB8fAorCSAgICAgIHdsYW5kZXYtPm1zZHN0YXRlID09IFdMQU5fTVNEX0ZXTE9BRCkpIHsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogQ2hlY2sgUGVybWlzc2lvbnMgKi8KLQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikgJiYKLQkgICAgKG1zZy0+bXNnY29kZSAhPSBESURtc2dfZG90MTFyZXFfbWliZ2V0KSkgewotCQlXTEFOX0xPR19FUlJPUigiJXM6IG9ubHkgZG90MTFyZXFfbWliZ2V0IGFsbG93ZWQgZm9yIG5vbi1yb290LlxuIiwgd2xhbmRldi0+bmFtZSk7CisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pICYmIChtc2ctPm1zZ2NvZGUgIT0gRElEbXNnX2RvdDExcmVxX21pYmdldCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiJXM6IG9ubHkgZG90MTFyZXFfbWliZ2V0IGFsbG93ZWQgZm9yIG5vbi1yb290LlxuIiwKKwkJICAgICAgIHdsYW5kZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIAogCS8qIENoZWNrIGZvciBidXN5IHN0YXR1cyAqLwotCWlmICggdGVzdF9hbmRfc2V0X2JpdCgxLCAmKHdsYW5kZXYtPnJlcXVlc3RfcGVuZGluZykpKSB7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMSwgJih3bGFuZGV2LT5yZXF1ZXN0X3BlbmRpbmcpKSkKIAkJcmV0dXJuIC1FQlVTWTsKLQl9CiAKIAkvKiBBbGxvdyBwODAyMTEgdG8gbG9vayBhdCBtc2cgYW5kIGhhbmRsZSBpZiBkZXNpcmVkLiAqLwogCS8qIFNvIGZhciwgYWxsIHA4MDIxMSBtc2dzIGFyZSBpbW1lZGlhdGUsIG5vIHdhaXRxL3RpbWVyIG5lY2Vzc2FyeSAqLwpAQCAtMTU4LDEyICsxMjUsMTEgQEAKIAlwODAyMTFyZXFfaGFuZGxlbXNnKHdsYW5kZXYsIG1zZyk7CiAKIAkvKiBQYXNzIGl0IGRvd24gdG8gd2xhbmRldiB2aWEgd2xhbmRldi0+bWxtZXJlcXVlc3QgKi8KLQlpZiAoIHdsYW5kZXYtPm1sbWVyZXF1ZXN0ICE9IE5VTEwgKQorCWlmICh3bGFuZGV2LT5tbG1lcmVxdWVzdCAhPSBOVUxMKQogCQl3bGFuZGV2LT5tbG1lcmVxdWVzdCh3bGFuZGV2LCBtc2cpOwogCi0JY2xlYXJfYml0KCAxLCAmKHdsYW5kZXYtPnJlcXVlc3RfcGVuZGluZykpOwotCURCRkVYSVQ7Ci0JcmV0dXJuIHJlc3VsdDsJLyogaWYgcmVzdWx0PT0wLCBtc2ctPnN0YXR1cyBzdGlsbCBtYXkgY29udGFpbiBhbiBlcnIgKi8KKwljbGVhcl9iaXQoMSwgJih3bGFuZGV2LT5yZXF1ZXN0X3BlbmRpbmcpKTsKKwlyZXR1cm4gcmVzdWx0OyAvKiBpZiByZXN1bHQ9PTAsIG1zZy0+c3RhdHVzIHN0aWxsIG1heSBjb250YWluIGFuIGVyciAqLwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE4NCwzNCArMTUwLDMyIEBACiAqIENhbGwgY29udGV4dDoKICoJUHJvY2VzcyB0aHJlYWQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyggd2xhbmRldmljZV90ICp3bGFuZGV2LCBwODAyMTFtc2dfdCAqbXNnKQorc3RhdGljIHZvaWQgcDgwMjExcmVxX2hhbmRsZW1zZyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpCiB7Ci0gICAgICAgIERCRkVOVEVSOwotCiAJc3dpdGNoIChtc2ctPm1zZ2NvZGUpIHsKIAotCWNhc2UgRElEbXNnX2xueHJlcV9ob3N0d2VwOiB7Ci0JCXA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90ICpyZXEgPSAocDgwMjExbXNnX2xueHJlcV9ob3N0d2VwX3QqKSBtc2c7Ci0JCXdsYW5kZXYtPmhvc3R3ZXAgJj0gfihIT1NUV0VQX0RFQ1JZUFR8SE9TVFdFUF9FTkNSWVBUKTsKLQkJaWYgKHJlcS0+ZGVjcnlwdC5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKLQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9ERUNSWVBUOwotCQlpZiAocmVxLT5lbmNyeXB0LmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQotCQkJd2xhbmRldi0+aG9zdHdlcCB8PSBIT1NUV0VQX0VOQ1JZUFQ7CisJY2FzZSBESURtc2dfbG54cmVxX2hvc3R3ZXA6eworCQkJcDgwMjExbXNnX2xueHJlcV9ob3N0d2VwX3QgKnJlcSA9CisJCQkgICAgKHA4MDIxMW1zZ19sbnhyZXFfaG9zdHdlcF90ICopIG1zZzsKKwkJCXdsYW5kZXYtPmhvc3R3ZXAgJj0KKwkJCSAgICB+KEhPU1RXRVBfREVDUllQVCB8IEhPU1RXRVBfRU5DUllQVCk7CisJCQlpZiAocmVxLT5kZWNyeXB0LmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQorCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9ERUNSWVBUOworCQkJaWYgKHJlcS0+ZW5jcnlwdC5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKKwkJCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfRU5DUllQVDsKIAotCQlicmVhazsKLQl9CisJCQlicmVhazsKKwkJfQogCWNhc2UgRElEbXNnX2RvdDExcmVxX21pYmdldDoKLQljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJzZXQ6IHsKLQkJaW50IGlzZ2V0ID0gKG1zZy0+bXNnY29kZSA9PSBESURtc2dfZG90MTFyZXFfbWliZ2V0KTsKLQkJcDgwMjExbXNnX2RvdDExcmVxX21pYmdldF90ICAqbWliX21zZyA9IChwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKikgbXNnOwotCQlwODAyMTFyZXFfbWlic2V0X21pYmdldCAod2xhbmRldiwgbWliX21zZywgaXNnZXQpOwotCX0KKwljYXNlIERJRG1zZ19kb3QxMXJlcV9taWJzZXQ6eworCQkJaW50IGlzZ2V0ID0gKG1zZy0+bXNnY29kZSA9PSBESURtc2dfZG90MTFyZXFfbWliZ2V0KTsKKwkJCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAqbWliX21zZyA9CisJCQkgICAgKHA4MDIxMW1zZ19kb3QxMXJlcV9taWJnZXRfdCAqKSBtc2c7CisJCQlwODAyMTFyZXFfbWlic2V0X21pYmdldCh3bGFuZGV2LCBtaWJfbXNnLCBpc2dldCk7CisJCX0KIAlkZWZhdWx0OgotCQkvLyBYWFggZG8gbm90aGluZyEKIAkJOwotCX0gLyogc3dpdGNoIG1zZy0+bXNnY29kZSAqLwotCi0JREJGRVhJVDsKKwl9CQkJLyogc3dpdGNoIG1zZy0+bXNnY29kZSAqLwogCiAJcmV0dXJuOwogfQpAQCAtMjIwLDgxICsxODQsODIgQEAKIAkJCQkgICBwODAyMTFtc2dfZG90MTFyZXFfbWliZ2V0X3QgKm1pYl9tc2csCiAJCQkJICAgaW50IGlzZ2V0KQogewotCXA4MDIxMWl0ZW1kX3QgICAqbWliaXRlbSA9IChwODAyMTFpdGVtZF90ICopIG1pYl9tc2ctPm1pYmF0dHJpYnV0ZS5kYXRhOwotCXA4MDIxMXBzdHJkX3QgICpwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSBtaWJpdGVtLT5kYXRhOworCXA4MDIxMWl0ZW1kX3QgKm1pYml0ZW0gPSAocDgwMjExaXRlbWRfdCAqKSBtaWJfbXNnLT5taWJhdHRyaWJ1dGUuZGF0YTsKKwlwODAyMTFwc3RyZF90ICpwc3RyID0gKHA4MDIxMXBzdHJkX3QgKikgbWliaXRlbS0+ZGF0YTsKIAl1OCAqa2V5ID0gbWliaXRlbS0+ZGF0YSArIHNpemVvZihwODAyMTFwc3RyZF90KTsKIAotCURCRkVOVEVSOwotCiAJc3dpdGNoIChtaWJpdGVtLT5kaWQpIHsKLQljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MDogewotCQlpZiAoIWlzZ2V0KQotCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMCwga2V5LCBwc3RyLT5sZW4pOwotCQlicmVhazsKLQl9Ci0JY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE6IHsKLQkJaWYgKCFpc2dldCkKLQkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDEsIGtleSwgcHN0ci0+bGVuKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOiB7Ci0JCWlmICghaXNnZXQpCi0JCQl3ZXBfY2hhbmdlX2tleSh3bGFuZGV2LCAyLCBrZXksIHBzdHItPmxlbik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MzogewotCQlpZiAoIWlzZ2V0KQotCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMywga2V5LCBwc3RyLT5sZW4pOwotCQlicmVhazsKLQl9Ci0JY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQ6IHsKLQkJdTMyICpkYXRhID0gKHUzMiAqKSBtaWJpdGVtLT5kYXRhOworCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOnsKKwkJCWlmICghaXNnZXQpCisJCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMCwga2V5LCBwc3RyLT5sZW4pOworCQkJYnJlYWs7CisJCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MTp7CisJCQlpZiAoIWlzZ2V0KQorCQkJCXdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXYsIDEsIGtleSwgcHN0ci0+bGVuKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTI6eworCQkJaWYgKCFpc2dldCkKKwkJCQl3ZXBfY2hhbmdlX2tleSh3bGFuZGV2LCAyLCBrZXksIHBzdHItPmxlbik7CisJCQlicmVhazsKKwkJfQorCWNhc2UgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOnsKKwkJCWlmICghaXNnZXQpCisJCQkJd2VwX2NoYW5nZV9rZXkod2xhbmRldiwgMywga2V5LCBwc3RyLT5sZW4pOworCQkJYnJlYWs7CisJCX0KKwljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRDp7CisJCQl1MzIgKmRhdGEgPSAodTMyICopIG1pYml0ZW0tPmRhdGE7CiAKLQkJaWYgKGlzZ2V0KSB7Ci0JCQkqZGF0YSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSzsKKwkJCWlmIChpc2dldCkgeworCQkJCSpkYXRhID0KKwkJCQkgICAgd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLOwogCQkJfSBlbHNlIHsKIAkJCQl3bGFuZGV2LT5ob3N0d2VwICY9IH4oSE9TVFdFUF9ERUZBVUxUS0VZX01BU0spOwogCi0JCQkJd2xhbmRldi0+aG9zdHdlcCB8PSAoKmRhdGEgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyk7CisJCQkJd2xhbmRldi0+aG9zdHdlcCB8PQorCQkJCSAgICAoKmRhdGEgJiBIT1NUV0VQX0RFRkFVTFRLRVlfTUFTSyk7CiAJCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkOiB7Ci0JCXUzMiAqZGF0YSA9ICh1MzIgKikgbWliaXRlbS0+ZGF0YTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZDp7CisJCQl1MzIgKmRhdGEgPSAodTMyICopIG1pYml0ZW0tPmRhdGE7CiAKLQkJaWYgKGlzZ2V0KSB7Ci0JCQlpZiAod2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpCi0JCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7Ci0JCQllbHNlCi0JCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOwotCQl9IGVsc2UgeworCQkJaWYgKGlzZ2V0KSB7CisJCQkJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEKQorCQkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTsKKwkJCQllbHNlCisJCQkJCSpkYXRhID0gUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKKwkJCX0gZWxzZSB7CiAJCQkJd2xhbmRldi0+aG9zdHdlcCAmPSB+KEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpOwogCQkJCWlmICgqZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCi0JCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9QUklWQUNZSU5WT0tFRDsKKwkJCQkJd2xhbmRldi0+aG9zdHdlcCB8PQorCQkJCQkgICAgSE9TVFdFUF9QUklWQUNZSU5WT0tFRDsKKwkJCX0KKwkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZDogewotCQl1MzIgKmRhdGEgPSAodTMyICopIG1pYml0ZW0tPmRhdGE7CisJY2FzZSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQ6eworCQkJdTMyICpkYXRhID0gKHUzMiAqKSBtaWJpdGVtLT5kYXRhOwogCi0JCWlmIChpc2dldCkgewotCQkJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRCkKLQkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZTsKLQkJCWVsc2UKLQkJCQkqZGF0YSA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7Ci0JCX0gZWxzZSB7Ci0JCQl3bGFuZGV2LT5ob3N0d2VwICY9IH4oSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpOwotCQkJaWYgKCpkYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkKLQkJCQl3bGFuZGV2LT5ob3N0d2VwIHw9IEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEOworCQkJaWYgKGlzZ2V0KSB7CisJCQkJaWYgKHdsYW5kZXYtPgorCQkJCSAgICBob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpCisJCQkJCSpkYXRhID0gUDgwMjExRU5VTV90cnV0aF90cnVlOworCQkJCWVsc2UKKwkJCQkJKmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQl3bGFuZGV2LT5ob3N0d2VwICY9CisJCQkJICAgIH4oSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQpOworCQkJCWlmICgqZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpCisJCQkJCXdsYW5kZXYtPmhvc3R3ZXAgfD0KKwkJCQkJICAgIEhPU1RXRVBfRVhDTFVERVVORU5DUllQVEVEOworCQkJfQorCQkJYnJlYWs7CiAJCX0KLQkJYnJlYWs7Ci0JfQogCWRlZmF1bHQ6Ci0JCS8vIFhYWFggZG8gbm90aGluZyEKIAkJOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXJlcS5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmgKaW5kZXggNDk3YTRkNi4uYTk1YTQ1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmgKQEAgLTQ4LDIxICs0OCw2IEBACiAjaWZuZGVmIF9MSU5VWF9QODAyMTFSRVFfSAogI2RlZmluZSBfTElOVVhfUDgwMjExUkVRX0gKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIENvbnN0YW50cyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTWFjcm9zICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBUeXBlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRXh0ZXJucyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVjbGFyYXRpb25zICovCi0KLWludAlwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTggKm1zZ2J1Zik7CitpbnQgcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHU4ICptc2didWYpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXR5cGVzLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF0eXBlcy5oCmluZGV4IDViZTY3MzcuLmEyMjQzN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXR5cGVzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExdHlwZXMuaApAQCAtNTgsMzcgKzU4LDkgQEAKICNkZWZpbmUgX1A4MDIxMVRZUEVTX0gKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIFByb2plY3QgSW5jbHVkZXMgKi8KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotI2VuZGlmCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBDb25zdGFudHMgKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBwODAyMTEgZGF0YSB0eXBlIGNvZGVzIHVzZWQgZm9yIE1JQiBpdGVtcyBhbmQgbWVzc2FnZSAqLwotLyogYXJndW1lbnRzLiBUaGUgdmFyaW91cyBtZXRhZGF0YSBzdHJ1Y3R1cmVzIHByb3ZpZGUgYWRkaXRpb25hbCAqLwotLyogaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgdHlwZXMuICovCi0KLSNkZWZpbmUgUDgwMjExX1RZUEVfT0NURVRTVFIJCTEJLyogcGFzY2FsIGFycmF5IG9mIGJ5dGVzICovCi0jZGVmaW5lIFA4MDIxMV9UWVBFX0RJU1BMQVlTVFIJCTIJLyogcGFzY2FsIGFycmF5IG9mIGJ5dGVzIGNvbnRhaW5pbmcgYXNjaWkgKi8KLSNkZWZpbmUgUDgwMjExX1RZUEVfaW50CQkJNAkvKiB1MzIgbWluIGFuZCBtYXggbGltaXRlZCBieSAzMiBiaXRzICovCi0jZGVmaW5lIFA4MDIxMV9UWVBFX0VOVU1pbnQJCTUJLyogdTMyIGhvbGRpbmcgYSBudW1lcmljCi0JCQkJCQkgICBjb2RlIHRoYXQgY2FuIGJlIG1hcHBlZAotCQkJCQkJICAgdG8gYSB0ZXh0dWFsIG5hbWUgKi8KLSNkZWZpbmUgUDgwMjExX1RZUEVfVU5LREFUQQkJNgkvKiBEYXRhIGl0ZW0gY29udGFpbmluZyBhbgotCQkJCQkJICAgdW5rbm93biBkYXRhIHR5cGUgKi8KLSNkZWZpbmUgUDgwMjExX1RZUEVfaW50QVJSQVkJCTcJLyogQXJyYXkgb2YgMzItYml0IGludGVnZXJzLiAqLwotI2RlZmluZSBQODAyMTFfVFlQRV9CSVRBUlJBWQkJOAkvKiBBcnJheSBvZiBiaXRzLiAqLwotI2RlZmluZSBQODAyMTFfVFlQRV9NQUNBUlJBWQkJOQkvKiBBcnJheSBvZiBNQUMgYWRkcmVzc2VzLiAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIGluZGV4ZXMgaW50byB0aGUgTWliIENhdGVnb3J5IExpc3QgKi8KQEAgLTEwNiwyNSArNzgsNiBAQAogLyogTWVzc2FnZSBDYXRlZ29yeSBMaXN0ICovCiAjZGVmaW5lIFA4MDIxMV9NU0dfQ0FUX0RPVDExUkVRCQkxCiAjZGVmaW5lIFA4MDIxMV9NU0dfQ0FUX0RPVDExSU5ECQkyCi0vKiAjZGVmaW5lIFA4MDIxMV9NU0dfQ0FUX0RPVDExQ0ZNCQkzIChkb2Vzbid0IGV4aXN0IGF0IHRoaXMgdGltZSkgKi8KLQotI2RlZmluZSBQODAyMTFTRUNfRE9UMTFSRVEJCVA4MDIxMV9NU0dfQ0FUX0RPVDExUkVRCi0jZGVmaW5lIFA4MDIxMVNFQ19ET1QxMUlORAkJUDgwMjExX01TR19DQVRfRE9UMTFJTkQKLS8qICNkZWZpbmUgUDgwMjExU0VDX0RPVDExQ0ZNCQlQODAyMTFfTVNHX0NBVF9ET1QxMUNGTSAgKGRvZXNuJ3QgZXhpc3QgYXQgdGhpcyB0aW1lICovCi0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogcDgwMjExIERJRCBmaWVsZCBjb2RlcyB0aGF0IHJlcHJlc2VudCBhY2Nlc3MgdHlwZSBhbmQgKi8KLS8qIGlzX3RhYmxlIHN0YXR1cy4gKi8KLQotI2RlZmluZSBQODAyMTFESURfQUNDRVNTX1JFQUQJCTB4MTAwMDAwMDAKLSNkZWZpbmUgUDgwMjExRElEX0FDQ0VTU19XUklURQkJMHgwODAwMDAwMAotI2RlZmluZSBQODAyMTFESURfV1JJVEVPTkxZCQkweDAwMDAwMDAxCi0jZGVmaW5lIFA4MDIxMURJRF9SRUFET05MWQkJMHgwMDAwMDAwMgotI2RlZmluZSBQODAyMTFESURfUkVBRFdSSVRFCQkweDAwMDAwMDAzCi0jZGVmaW5lIFA4MDIxMURJRF9JU1RBQkxFX0ZBTFNFCQkwCi0jZGVmaW5lIFA4MDIxMURJRF9JU1RBQkxFX1RSVUUJCTEKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIHA4MDIxMSBlbnVtZXJhdGlvbiBjb25zdGFudHMuICBUaGUgdmFsdWUgdG8gdGV4dCBtYXBwaW5ncyBmb3IgKi8KQEAgLTEzMiwxMDQgKzg1LDMwIEBACiAvKiAgZnJvbSB0aGUgbWFwcGluZ3MuICovCiAKIC8qIGVycm9yIGNvZGVzIGZvciBsb29rdXBzICovCi0jZGVmaW5lIFA4MDIxMUVOVU1fQkFECQkJCTB4ZmZmZmZmZmZVTAotI2RlZmluZSBQODAyMTFFTlVNX0JBRFNUUgkJCSJQODAyMTFFTlVNX0JBRCIKIAogI2RlZmluZSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlCQkJMAogI2RlZmluZSBQODAyMTFFTlVNX3RydXRoX3RydWUJCQkxCiAjZGVmaW5lIFA4MDIxMUVOVU1faWZzdGF0ZV9kaXNhYmxlCQkwCiAjZGVmaW5lIFA4MDIxMUVOVU1faWZzdGF0ZV9md2xvYWQJCTEKICNkZWZpbmUgUDgwMjExRU5VTV9pZnN0YXRlX2VuYWJsZQkJMgotI2RlZmluZSBQODAyMTFFTlVNX3Bvd2VybWdtdF9hY3RpdmUJCTEKLSNkZWZpbmUgUDgwMjExRU5VTV9wb3dlcm1nbXRfcG93ZXJzYXZlCQkyCiAjZGVmaW5lIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmZyYXN0cnVjdHVyZQkxCiAjZGVmaW5lIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudAkJMgogI2RlZmluZSBQODAyMTFFTlVNX2Jzc3R5cGVfYW55CQkJMwogI2RlZmluZSBQODAyMTFFTlVNX2F1dGhhbGdfb3BlbnN5c3RlbQkJMQogI2RlZmluZSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5CQkyCi0jZGVmaW5lIFA4MDIxMUVOVU1fcGh5dHlwZV9maHNzCQkJMQotI2RlZmluZSBQODAyMTFFTlVNX3BoeXR5cGVfZHNzcwkJCTIKLSNkZWZpbmUgUDgwMjExRU5VTV9waHl0eXBlX2lyYmFzZWJhbmQJCTMKLSNkZWZpbmUgUDgwMjExRU5VTV90ZW1wdHlwZV9jb21tZXJjaWFsCQkxCi0jZGVmaW5lIFA4MDIxMUVOVU1fdGVtcHR5cGVfaW5kdXN0cmlhbAkJMgotI2RlZmluZSBQODAyMTFFTlVNX3JlZ2RvbWFpbl9mY2MJCTE2Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX2RvYwkJMzIKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fZXRzaQkJNDgKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fc3BhaW4JCTQ5Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVnZG9tYWluX2ZyYW5jZQkJNTAKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWdkb21haW5fbWtrCQk2NAotI2RlZmluZSBQODAyMTFFTlVNX2NjYW1vZGVfZWRvbmx5CQkxCi0jZGVmaW5lIFA4MDIxMUVOVU1fY2NhbW9kZV9jc29ubHkJCTIKLSNkZWZpbmUgUDgwMjExRU5VTV9jY2Ftb2RlX2VkYW5kY3MJCTQKLSNkZWZpbmUgUDgwMjExRU5VTV9jY2Ftb2RlX2Nzd2l0aHRpbWVyCQk4Ci0jZGVmaW5lIFA4MDIxMUVOVU1fY2NhbW9kZV9ocmNzYW5kZWQJCTE2Ci0jZGVmaW5lIFA4MDIxMUVOVU1fZGl2ZXJzaXR5X2ZpeGVkbGlzdAkJMQotI2RlZmluZSBQODAyMTFFTlVNX2RpdmVyc2l0eV9ub3RzdXBwb3J0ZWQJMgotI2RlZmluZSBQODAyMTFFTlVNX2RpdmVyc2l0eV9keW5hbWljCQkzCiAjZGVmaW5lIFA4MDIxMUVOVU1fc2NhbnR5cGVfYWN0aXZlCQkxCi0jZGVmaW5lIFA4MDIxMUVOVU1fc2NhbnR5cGVfcGFzc2l2ZQkJMgotI2RlZmluZSBQODAyMTFFTlVNX3NjYW50eXBlX2JvdGgJCTMKICNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MJCTEKICNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVycwkyCiAjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkCTMKLSNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX3RpbWVvdXQJCTQKLSNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX3Rvb19tYW55X3JlcQk1CiAjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9yZWZ1c2VkCQk2Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ic3NfYWxyZWFkeQk3Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX2FjY2Vzcwk4Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX21pYmF0dHJpYnV0ZQk5CiAjZGVmaW5lIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9jYW50X3NldF9yZWFkb25seV9taWIJMTAKICNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmUJMTEKICNkZWZpbmUgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2NhbnRfZ2V0X3dyaXRlb25seV9taWIJMTIKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fdW5zcGVjX3JlYXNvbgkJMQotI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9hdXRoX25vdF92YWxpZAkyCi0jZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2RlYXV0aF9sdl9zcwkJMwotI2RlZmluZSBQODAyMTFFTlVNX3JlYXNvbl9pbmFjdGl2aXR5CQk0Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2FwX292ZXJsb2FkCQk1Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2NsYXNzMjNfZXJyCQk2Ci0jZGVmaW5lIFA4MDIxMUVOVU1fcmVhc29uX2NsYXNzM19lcnIJCTcKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fZGlzYXNfbHZfc3MJCTgKLSNkZWZpbmUgUDgwMjExRU5VTV9yZWFzb25fYXNvY19ub3RfYXV0aAkJOQogI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsCQkwCiAjZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX3Vuc3BlY19mYWlsdXJlCTEKLSNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zdXBfY2FwCQkxMAotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19yZWFzb2Nfbm9fYXNvYwkxMQotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c19mYWlsX290aGVyCQkxMgotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnNwdF9hbGcJCTEzCi0jZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX2F1dGhfc2VxX2ZhaWwJCTE0Ci0jZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX2NobG5nX2ZhaWwJCTE1Ci0jZGVmaW5lIFA4MDIxMUVOVU1fc3RhdHVzX2F1dGhfdGltZW91dAkJMTYKICNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfYXBfZnVsbAkJMTcKLSNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zdXBfcmF0ZQkJMTgKLSNkZWZpbmUgUDgwMjExRU5VTV9zdGF0dXNfdW5zdXBfc2hvcnRwcmVhbWJsZQkxOQotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnN1cF9wYmNjCQkyMAotI2RlZmluZSBQODAyMTFFTlVNX3N0YXR1c191bnN1cF9hZ2lsaXR5CQkyMQogI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sJCTAKICNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19ub192YWx1ZQkJMQotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2ludmFsaWRfaXRlbW5hbWUJMgotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2ludmFsaWRfaXRlbWRhdGEJMwotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX21pc3NpbmdfaXRlbWRhdGEJNAotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2luY29tcGxldGVfaXRlbWRhdGEJNQotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2ludmFsaWRfbXNnX2RpZAk2Ci0jZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfaW52YWxpZF9taWJfZGlkCTcKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19taXNzaW5nX2NvbnZfZnVuYwk4Ci0jZGVmaW5lIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfc3RyaW5nX3Rvb19sb25nCTkKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX291dF9vZl9yYW5nZQkxMAotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX3N0cmluZ190b29fc2hvcnQJMTEKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19taXNzaW5nX3ZhbGlkX2Z1bmMJMTIKLSNkZWZpbmUgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c191bmtub3duCQkxMwotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2ludmFsaWRfZGlkCQkxNAotI2RlZmluZSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX21pc3NpbmdfcHJpbnRfZnVuYwkxNQotCi0jZGVmaW5lIFA4MDIxMUVOVU1fbG54cm9hbV9yZWFzb25fdW5rbm93biAgICAgICAgMAotI2RlZmluZSBQODAyMTFFTlVNX2xueHJvYW1fcmVhc29uX2JlYWNvbiAgICAgICAgIDEKLSNkZWZpbmUgUDgwMjExRU5VTV9sbnhyb2FtX3JlYXNvbl9zaWduYWwgICAgICAgICAyCi0jZGVmaW5lIFA4MDIxMUVOVU1fbG54cm9hbV9yZWFzb25fdHhyZXRyeSAgICAgICAgMwotI2RlZmluZSBQODAyMTFFTlVNX2xueHJvYW1fcmVhc29uX25vdGpvaW5lZCAgICAgIDQKLQotI2RlZmluZSBQODAyMTFFTlVNX3AycHJlYW1ibGVfbG9uZyAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgUDgwMjExRU5VTV9wMnByZWFtYmxlX3Nob3J0ICAgICAgICAgICAgICAyCi0jZGVmaW5lIFA4MDIxMUVOVU1fcDJwcmVhbWJsZV9taXhlZCAgICAgICAgICAgICAgMwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogcDgwMjExIG1heCBsZW5ndGggY29uc3RhbnRzIGZvciB0aGUgZGlmZmVyZW50IHBhc2NhbCBzdHJpbmdzLiAqLwpAQCAtMjQzLDQ2ICsxMjIsNiBAQAogCQkJCQkvKiBpcyBhIERJRC1MRU4tREFUQSB0cmlwbGUgKi8KIAkJCQkJLyogd2l0aCBhIG1heCBzaXplIG9mIDQrNCszODQgKi8KIAotI2RlZmluZSBQODAyMTFfU0VUX2ludChpdGVtLCB2YWx1ZSkgZG8geyBcCi0JKGl0ZW0pLmRhdGEgICA9ICh2YWx1ZSk7IFwKLQkoaXRlbSkuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOyBcCi0JfSB3aGlsZSgwKQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHN0cmluZyBjb25zdGFudHMgKi8KLQotI2RlZmluZSBOT1RfU0VUCQkJIk5PVF9TRVQiCi0jZGVmaW5lIE5PVF9TVVBQT1JURUQJCSJOT1RfU1VQUE9SVEVEIgotI2RlZmluZSBVTktOT1dOX0RBVEEJCSJVTktOT1dOX0RBVEEiCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiAgTWV0YWRhdGEgZmxhZ3MgICovCi0KLS8qIE1TTTogRG8gdGhlc2UgYmVsb25nIGluIHA4MDIxMW1ldGEuaD8gSSdtIG5vdCBzdXJlLiAqLwotCi0jZGVmaW5lIElTUkVRVUlSRUQJCSgweDgwMDAwMDAwVUwpCi0jZGVmaW5lIElTUkVRVUVTVAkJKDB4NDAwMDAwMDBVTCkKLSNkZWZpbmUgSVNDT05GSVJNCQkoMHgyMDAwMDAwMFVMKQotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBNYWNyb3MgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZSAnZmxhZ3MnIGZpZWxkIGluICAgKi8KLS8qICB0aGUgbWV0YWRhdGEuICBUaGVzZSBhcmUgb25seSB1c2VkIHdoZW4gdGhlIG1ldGFkYXRhIGlzIGZvciAgICAgICAqLwotLyogIGNvbW1hbmQgYXJndW1lbnRzIHRvIGRldGVybWluZSBpZiB0aGUgZGF0YSBpdGVtIGlzIHJlcXVpcmVkLCBhbmQgICovCi0vKiAgd2hldGhlciB0aGUgbWV0YWRhdGEgaXRlbSBpcyBmb3IgYSByZXF1ZXN0IGNvbW1hbmQsIGNvbmZpcm0gICAgICAgKi8KLS8qICBjb21tYW5kIG9yIGJvdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBNU006IERvIHRoZXNlIGJlbG9uZyBpbiBwODAyMTFtZXRhLmg/ICBJJ20gbm90IHN1cmUgKi8KLQotI2RlZmluZSBQODAyMTFJVEVNX1NFVEZMQUdTKHEsIHIsIGMpCSggcSB8IHIgfCBjICkKLQotI2RlZmluZSBQODAyMTFJVEVNX0lTUkVRVUlSRUQoZmxhZ3MpCSgoKHUzMikoZmxhZ3MgJiBJU1JFUVVJUkVEKSkgPj4gMzEgKQotI2RlZmluZSBQODAyMTFJVEVNX0lTUkVRVUVTVChmbGFncykJKCgodTMyKShmbGFncyAmIElTUkVRVUVTVCkpID4+IDMwICkKLSNkZWZpbmUgUDgwMjExSVRFTV9JU0NPTkZJUk0oZmxhZ3MpCSgoKHUzMikoZmxhZ3MgJiBJU0NPTkZJUk0pKSA+PiAyOSApCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBUaGUgZm9sbG93aW5nIG1hY3JvIGNyZWF0ZXMgYSBuYW1lIGZvciBhbiBlbnVtICovCiAKQEAgLTMwMiw5ICsxNDEsNiBAQAogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIC0gVW51c2VkCiAqLwogCi0jZGVmaW5lIFA4MDIxMURJRF9JTlZBTElECQkweGZmZmZmZmZmVUwKLSNkZWZpbmUgUDgwMjExRElEX1ZBTElECQkJMHgwMDAwMDAwMFVMCi0KICNkZWZpbmUgUDgwMjExRElEX0xTQl9TRUNUSU9OCQkoMCkKICNkZWZpbmUgUDgwMjExRElEX0xTQl9HUk9VUAkJKDYpCiAjZGVmaW5lIFA4MDIxMURJRF9MU0JfSVRFTQkJKDEyKQpAQCAtMzE5LDM1ICsxNTUsMzIgQEAKICNkZWZpbmUgUDgwMjExRElEX01BU0tfSVNUQUJMRQkJKDB4MDAwMDAwMDFVTCkKICNkZWZpbmUgUDgwMjExRElEX01BU0tfQUNDRVNTIAkJKDB4MDAwMDAwMDNVTCkKIAotCi0jZGVmaW5lIFA4MDIxMURJRF9NSyhhLG0sbCkJKCgoKHUzMikoYSkpICYgKG0pKSA8PCAobCkpCisjZGVmaW5lIFA4MDIxMURJRF9NSyhhLCBtLCBsKQkoKCgodTMyKShhKSkgJiAobSkpIDw8IChsKSkKIAogI2RlZmluZSBQODAyMTFESURfTUtTRUNUSU9OKGEpCVA4MDIxMURJRF9NSyhhLCBcCiAJCQkJCVA4MDIxMURJRF9NQVNLX1NFQ1RJT04sIFwKLQkJCQkJUDgwMjExRElEX0xTQl9TRUNUSU9OICkKKwkJCQkJUDgwMjExRElEX0xTQl9TRUNUSU9OKQogI2RlZmluZSBQODAyMTFESURfTUtHUk9VUChhKQlQODAyMTFESURfTUsoYSwgXAogCQkJCQlQODAyMTFESURfTUFTS19HUk9VUCwgXAotCQkJCQlQODAyMTFESURfTFNCX0dST1VQICkKKwkJCQkJUDgwMjExRElEX0xTQl9HUk9VUCkKICNkZWZpbmUgUDgwMjExRElEX01LSVRFTShhKQlQODAyMTFESURfTUsoYSwgXAogCQkJCQlQODAyMTFESURfTUFTS19JVEVNLCBcCi0JCQkJCVA4MDIxMURJRF9MU0JfSVRFTSApCisJCQkJCVA4MDIxMURJRF9MU0JfSVRFTSkKICNkZWZpbmUgUDgwMjExRElEX01LSU5ERVgoYSkJUDgwMjExRElEX01LKGEsIFwKIAkJCQkJUDgwMjExRElEX01BU0tfSU5ERVgsIFwKLQkJCQkJUDgwMjExRElEX0xTQl9JTkRFWCApCisJCQkJCVA4MDIxMURJRF9MU0JfSU5ERVgpCiAjZGVmaW5lIFA4MDIxMURJRF9NS0lTVEFCTEUoYSkJUDgwMjExRElEX01LKGEsIFwKIAkJCQkJUDgwMjExRElEX01BU0tfSVNUQUJMRSwgXAotCQkJCQlQODAyMTFESURfTFNCX0lTVEFCTEUgKQotCisJCQkJCVA4MDIxMURJRF9MU0JfSVNUQUJMRSkKIAogI2RlZmluZSBQODAyMTFESURfTUtJRChzLGcsaSxuLHQsYSkJKFA4MDIxMURJRF9NS1NFQ1RJT04ocykgfCBcCiAJCQkJCQlQODAyMTFESURfTUtHUk9VUChnKSB8IFwKIAkJCQkgCQlQODAyMTFESURfTUtJVEVNKGkpIHwgXAogCQkJCSAJCVA4MDIxMURJRF9NS0lOREVYKG4pIHwgXAogCQkJCQkJUDgwMjExRElEX01LSVNUQUJMRSh0KSB8IFwKLQkJCQkJCShhKSApCisJCQkJCQkoYSkpCiAKLQotI2RlZmluZSBQODAyMTFESURfR0VUKGEsbSxsKQkoKCgodTMyKShhKSkgPj4gKGwpKSAmIChtKSkKKyNkZWZpbmUgUDgwMjExRElEX0dFVChhLCBtLCBsKQkoKCgodTMyKShhKSkgPj4gKGwpKSAmIChtKSkKIAogI2RlZmluZSBQODAyMTFESURfU0VDVElPTihhKQlQODAyMTFESURfR0VUKGEsIFwKIAkJCQkJUDgwMjExRElEX01BU0tfU0VDVElPTiwgXApAQCAtMzY4LDIzICsyMDEsMTggQEAKIAkJCQkJUDgwMjExRElEX01BU0tfQUNDRVNTLCBcCiAJCQkJCVA4MDIxMURJRF9MU0JfQUNDRVNTKQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogVHlwZXMgKi8KLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHR5cGVzIGFyZSB1c2VkIGZvciB0aGUgcmVwcmVzZW5hdGlvbiAqLwogLyogIG9mIEVOVU1pbnQgdHlwZSBtZXRhZGF0YS4gKi8KIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExZW51bXBhaXIKLXsKLQl1MzIJCQl2YWw7Ci0JY2hhcgkJCSpuYW1lOwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExZW51bXBhaXIgeworCXUzMiB2YWw7CisJY2hhciAqbmFtZTsKIH0gcDgwMjExZW51bXBhaXJfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExZW51bQotewotCWludAkJCW5pdGVtczsKLQlwODAyMTFlbnVtcGFpcl90CSpsaXN0OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExZW51bSB7CisJaW50IG5pdGVtczsKKwlwODAyMTFlbnVtcGFpcl90ICpsaXN0OwogfSBwODAyMTFlbnVtX3Q7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zOTIsMTQwICsyMjAsMTIzIEBACiAvKiAgbWVzc2FnZXMuICovCiAKIC8qIFRlbXBsYXRlIHBhc2NhbCBzdHJpbmcgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHIKLXsKLQl1OAkJbGVuOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFwc3RyX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyIHsKKwl1OCBsZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFwc3RyX3Q7CiAKLXR5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHJkCi17Ci0JdTgJCWxlbjsKLQl1OAkJZGF0YVswXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cmRfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHJkIHsKKwl1OCBsZW47CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMXBzdHJkX3Q7CiAKIC8qIE1heGltdW0gcGFzY2FsIHN0cmluZyAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjI1NQotewotCXU4CQlsZW47Ci0JdTgJCWRhdGFbTUFYTEVOX1BTVFIyNTVdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFwc3RyMjU1X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyMjU1IHsKKwl1OCBsZW47CisJdTggZGF0YVtNQVhMRU5fUFNUUjI1NV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFwc3RyMjU1X3Q7CiAKIC8qIHBhc2NhbCBzdHJpbmcgZm9yIG1hY2FkZHJlc3MgYW5kIGJzc2lkICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyNgotewotCXU4CQlsZW47Ci0JdTgJCWRhdGFbTUFYTEVOX1BTVFI2XTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjZfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHI2IHsKKwl1OCBsZW47CisJdTggZGF0YVtNQVhMRU5fUFNUUjZdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExcHN0cjZfdDsKIAogLyogcGFzY2FsIHN0cmluZyBmb3IgY2hhbm5lbCBsaXN0ICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyMTQKLXsKLQl1OAkJbGVuOwotCXU4CQlkYXRhW01BWExFTl9QU1RSMTRdOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFwc3RyMTRfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMXBzdHIxNCB7CisJdTggbGVuOworCXU4IGRhdGFbTUFYTEVOX1BTVFIxNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFwc3RyMTRfdDsKIAogLyogcGFzY2FsIHN0cmluZyBmb3Igc3NpZCAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExcHN0cjMyCi17Ci0JdTgJCWxlbjsKLQl1OAkJZGF0YVtNQVhMRU5fUFNUUjMyXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExcHN0cjMyX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFwc3RyMzIgeworCXU4IGxlbjsKKwl1OCBkYXRhW01BWExFTl9QU1RSMzJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExcHN0cjMyX3Q7CiAKIC8qIE1BQyBhZGRyZXNzIGFycmF5ICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFtYWNhcnJheQotewotCXUzMgkJY250OwotCXU4CQlkYXRhWzFdW01BWExFTl9QU1RSNl07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMW1hY2FycmF5X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFtYWNhcnJheSB7CisJdTMyIGNudDsKKwl1OCBkYXRhWzFdW01BWExFTl9QU1RSNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFtYWNhcnJheV90OwogCiAvKiBwcm90b3R5cGUgdGVtcGxhdGUgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW0KLXsKLQl1MzIJCWRpZDsKLQl1MTYJCXN0YXR1czsKLQl1MTYJCWxlbjsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbSB7CisJdTMyIGRpZDsKKwl1MTYgc3RhdHVzOworCXUxNiBsZW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFpdGVtX3Q7CiAKIC8qIHByb3RvdHlwZSB0ZW1wbGF0ZSB3LyBkYXRhIGl0ZW0gKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1kCi17Ci0JdTMyCQlkaWQ7Ci0JdTE2CQlzdGF0dXM7Ci0JdTE2CQlsZW47Ci0JdTgJCWRhdGFbMF07Ci19IF9fV0xBTl9BVFRSSUJfUEFDS19fIHA4MDIxMWl0ZW1kX3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtZCB7CisJdTMyIGRpZDsKKwl1MTYgc3RhdHVzOworCXUxNiBsZW47CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMWl0ZW1kX3Q7CiAKIC8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBpbnQsIEJPVU5ERURJTlQsIEVOVU1JTlQgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fdWludDMyCi17Ci0JdTMyCQlkaWQ7Ci0JdTE2CQlzdGF0dXM7Ci0JdTE2CQlsZW47Ci0JdTMyCQlkYXRhOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3VpbnQzMl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV91aW50MzIgeworCXUzMiBkaWQ7CisJdTE2IHN0YXR1czsKKwl1MTYgbGVuOworCXUzMiBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaXRlbV91aW50MzJfdDsKIAogLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIE9DVEVUU1RSLCBESVNQTEFZU1RSICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHI2Ci17Ci0JdTMyCQlkaWQ7Ci0JdTE2CQlzdGF0dXM7Ci0JdTE2CQlsZW47Ci0JcDgwMjExcHN0cjZfdAlkYXRhOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3BzdHI2X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHI2IHsKKwl1MzIgZGlkOworCXUxNiBzdGF0dXM7CisJdTE2IGxlbjsKKwlwODAyMTFwc3RyNl90IGRhdGE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFpdGVtX3BzdHI2X3Q7CiAKIC8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBPQ1RFVFNUUiwgRElTUExBWVNUUiAqLwotdHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV9wc3RyMTQKLXsKLQl1MzIJCQlkaWQ7Ci0JdTE2CQkJc3RhdHVzOwotCXUxNgkJCWxlbjsKLQlwODAyMTFwc3RyMTRfdAkJZGF0YTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV9wc3RyMTRfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fcHN0cjE0IHsKKwl1MzIgZGlkOworCXUxNiBzdGF0dXM7CisJdTE2IGxlbjsKKwlwODAyMTFwc3RyMTRfdCBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaXRlbV9wc3RyMTRfdDsKIAogLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIE9DVEVUU1RSLCBESVNQTEFZU1RSICovCi10eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHIzMgotewotCXUzMgkJCWRpZDsKLQl1MTYJCQlzdGF0dXM7Ci0JdTE2CQkJbGVuOwotCXA4MDIxMXBzdHIzMl90CQlkYXRhOwotfSBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3BzdHIzMl90OwordHlwZWRlZiBzdHJ1Y3QgcDgwMjExaXRlbV9wc3RyMzIgeworCXUzMiBkaWQ7CisJdTE2IHN0YXR1czsKKwl1MTYgbGVuOworCXA4MDIxMXBzdHIzMl90IGRhdGE7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFpdGVtX3BzdHIzMl90OwogCiAvKiBtZXNzYWdlIGRhdGEgaXRlbSBmb3IgT0NURVRTVFIsIERJU1BMQVlTVFIgKi8KLXR5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fcHN0cjI1NQotewotCXUzMgkJCWRpZDsKLQl1MTYJCQlzdGF0dXM7Ci0JdTE2CQkJbGVuOwotCXA4MDIxMXBzdHIyNTVfdAkJZGF0YTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV9wc3RyMjU1X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3BzdHIyNTUgeworCXUzMiBkaWQ7CisJdTE2IHN0YXR1czsKKwl1MTYgbGVuOworCXA4MDIxMXBzdHIyNTVfdCBkYXRhOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaXRlbV9wc3RyMjU1X3Q7CiAKIC8qIG1lc3NhZ2UgZGF0YSBpdGVtIGZvciBVTksgMzkyLCBuYW1lbHkgbWliIGl0ZW1zICovCi10eXBlZGVmIHN0cnVjdCAgcDgwMjExaXRlbV91bmszOTIKLXsKLQl1MzIJCWRpZDsKLQl1MTYJCXN0YXR1czsKLQl1MTYJCWxlbjsKLQl1OAkJZGF0YVtNQVhMRU5fTUlCQVRUUklCVVRFXTsKLX0gX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91bmszOTJfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fdW5rMzkyIHsKKwl1MzIgZGlkOworCXUxNiBzdGF0dXM7CisJdTE2IGxlbjsKKwl1OCBkYXRhW01BWExFTl9NSUJBVFRSSUJVVEVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcDgwMjExaXRlbV91bmszOTJfdDsKIAogLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIFVOSyAxMDI1LCBuYW1lbHkgcDIgcGRhcyAqLwotdHlwZWRlZiBzdHJ1Y3QgIHA4MDIxMWl0ZW1fdW5rMTAyNAotewotCXUzMgkJZGlkOwotCXUxNgkJc3RhdHVzOwotCXUxNgkJbGVuOwotCXU4CQlkYXRhWzEwMjRdOwotfSAgX19XTEFOX0FUVFJJQl9QQUNLX18gcDgwMjExaXRlbV91bmsxMDI0X3Q7Cit0eXBlZGVmIHN0cnVjdCBwODAyMTFpdGVtX3VuazEwMjQgeworCXUzMiBkaWQ7CisJdTE2IHN0YXR1czsKKwl1MTYgbGVuOworCXU4IGRhdGFbMTAyNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBwODAyMTFpdGVtX3VuazEwMjRfdDsKIAogLyogbWVzc2FnZSBkYXRhIGl0ZW0gZm9yIFVOSyA0MDk2LCBuYW1lbHkgcDIgZG93bmxvYWQgY2h1bmtzICovCi10eXBlZGVmIHN0cnVjdCAgcDgwMjExaXRlbV91bms0MDk2Ci17Ci0JdTMyCQlkaWQ7Ci0JdTE2CQlzdGF0dXM7Ci0JdTE2CQlsZW47Ci0JdTgJCWRhdGFbNDA5Nl07Ci19ICBfX1dMQU5fQVRUUklCX1BBQ0tfXyBwODAyMTFpdGVtX3VuazQwOTZfdDsKK3R5cGVkZWYgc3RydWN0IHA4MDIxMWl0ZW1fdW5rNDA5NiB7CisJdTMyIGRpZDsKKwl1MTYgc3RhdHVzOworCXUxNiBsZW47CisJdTggZGF0YVs0MDk2XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHA4MDIxMWl0ZW1fdW5rNDA5Nl90OwogCiBzdHJ1Y3QgY2F0bGlzdGl0ZW07CiAKQEAgLTUzNCwxMyArMzQ1LDExIEBACiAvKiAgbWV0YWRhdGEgaXRlbXMuICBTb21lIGNvbXBvbmVudHMgbWF5IGNob29zZSB0byB1c2UgbW9yZSwgKi8KIC8qICBsZXNzIG9yIGRpZmZlcmVudCBtZXRhZGF0YSBpdGVtcy4gKi8KIAotdHlwZWRlZiB2b2lkICgqcDgwMjExX3RvdGV4dF90KSggc3RydWN0IGNhdGxpc3RpdGVtICosIHUzMiBkaWQsIHU4KiBpdGVtYnVmLCBjaGFyICp0ZXh0YnVmKTsKLXR5cGVkZWYgdm9pZCAoKnA4MDIxMV9mcm9tdGV4dF90KSggc3RydWN0IGNhdGxpc3RpdGVtICosIHUzMiBkaWQsIHU4KiBpdGVtYnVmLCBjaGFyICp0ZXh0YnVmKTsKLXR5cGVkZWYgdTMyICgqcDgwMjExX3ZhbGlkX3QpKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgdTMyIGRpZCwgdTgqIGl0ZW1idWYpOwotCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBFeHRlcm4gRGVjbGFyYXRpb25zICovCit0eXBlZGVmIHZvaWQgKCpwODAyMTFfdG90ZXh0X3QpIChzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgdTMyIGRpZCwgdTggKml0ZW1idWYsCisJCQkJIGNoYXIgKnRleHRidWYpOwordHlwZWRlZiB2b2lkICgqcDgwMjExX2Zyb210ZXh0X3QpIChzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgdTMyIGRpZCwgdTggKml0ZW1idWYsCisJCQkJICAgY2hhciAqdGV4dGJ1Zik7Cit0eXBlZGVmIHUzMigqcDgwMjExX3ZhbGlkX3QpIChzdHJ1Y3QgY2F0bGlzdGl0ZW0gKiwgdTMyIGRpZCwgdTggKml0ZW1idWYpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogRW51bWVyYXRpb24gTGlzdHMgKi8KQEAgLTU2OCwxMDggKzM3Nyw0IEBACiAKIGV4dGVybiBwODAyMTFlbnVtX3QgTUtFTlVNTkFNRShwMnByZWFtYmxlKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVGhlIGZvbGxvd2luZyBkZWNsYXJlIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHRoZSAqLwotLyogIHA4MDIxMWVudW1fdCB0eXBlLiAqLwotCi11MzIgcDgwMjExZW51bV90ZXh0MmludChwODAyMTFlbnVtX3QgKmVwLCBjaGFyICp0ZXh0KTsKLXUzMiBwODAyMTFlbnVtX2ludDJ0ZXh0KHA4MDIxMWVudW1fdCAqZXAsIHUzMiB2YWwsIGNoYXIgKnRleHQpOwotdm9pZCBwODAyMTFfZXJyb3IydGV4dChpbnQgZXJyX2NvZGUsIGNoYXIgKmVycl9zdHIpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVGhlIGZvbGxvd2luZyBkZWNsYXJlIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHVzZSB3aXRoIHRoZSAqLwotLyogIHA4MDIxMWl0ZW1fdCBhbmQgcDgwMjExbWV0YV90IHR5cGVzLiAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogVGhlIGZvbGxvd2luZyBkZWNsYXJlIGZ1bmN0aW9ucyB0aGF0IHBlcmZvcm0gdmFsaWRhdGlvbiBhbmQgICAgKi8KLS8qIHRleHQgdG8gYmluYXJ5IGNvbnZlcnNpb25zIGJhc2VkIG9uIHRoZSBtZXRhZGF0YSBmb3IgaW50ZXJmYWNlICovCi0vKiBhbmQgTUlCIGRhdGEgaXRlbXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyotLSBESVNQTEFZU1RSIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiBwc3RyID09PiBjc3RyICovCi12b2lkIHA4MDIxMV90b3RleHRfZGlzcGxheXN0ciggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogY3N0ciA9PT4gcHN0ciAqLwotdm9pZCBwODAyMTFfZnJvbXRleHRfZGlzcGxheXN0ciggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBkaXNwbGF5c3RyIGJpbmFyeSB2YWx1ZSAqLwotdTMyIHA4MDIxMV9pc3ZhbGlkX2Rpc3BsYXlzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmICk7Ci0KLS8qLS0gT0NURVRTVFIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogcHN0ciA9PT4gInh4Onh4Oi4uLi4iICovCi12b2lkIHA4MDIxMV90b3RleHRfb2N0ZXRzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qICJ4eDp4eDouLi4uIiA9PT4gcHN0ciAqLwotdm9pZCBwODAyMTFfZnJvbXRleHRfb2N0ZXRzdHIoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIG9jdGV0c3RyIGJpbmFyeSB2YWx1ZSAqLwotdTMyIHA4MDIxMV9pc3ZhbGlkX29jdGV0c3RyKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiApOwotCi0vKi0tIGludCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHUzMiA9PT4gJWQgKi8KLXZvaWQgcDgwMjExX3RvdGV4dF9pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qICVkID09PiB1MzIgKi8KLXZvaWQgcDgwMjExX2Zyb210ZXh0X2ludCggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYW4gaW50J3MgYmluYXJ5IHZhbHVlIChhbHdheXMgc3VjY2Vzc2Z1bCkgKi8KLXUzMiBwODAyMTFfaXN2YWxpZF9pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmICk7Ci0KLS8qLS0gRU5VTWludCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogdTMyID09PiA8dmFsdWVuYW1lPiAqLwotdm9pZCBwODAyMTFfdG90ZXh0X2VudW1pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qIDx2YWx1ZW5hbWU+ID09PiB1MzIgKi8KLXZvaWQgcDgwMjExX2Zyb210ZXh0X2VudW1pbnQoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci0KLS8qIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHZhbGlkaXR5IG9mIGFuIGVudW0ncyBiaW5hcnkgdmFsdWUgKi8KLXUzMiBwODAyMTFfaXN2YWxpZF9lbnVtaW50KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiApOwotCi0vKi0tIGludEFSUkFZIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qIHUzMltdID0+ICVkLCVkLCVkLC4uLiAqLwotdm9pZCBwODAyMTFfdG90ZXh0X2ludGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0vKiAlZCwlZCwlZCwuLi4gPT0+IHUzMltdICovCi12b2lkIHA4MDIxMV9mcm9tdGV4dF9pbnRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYW4gaW50ZWdlciBhcnJheSdzIHZhbHVlICovCi11MzIgcDgwMjExX2lzdmFsaWRfaW50YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmICk7Ci0KLS8qLS0gQklUQVJSQVkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogdTMyID09PiAlZCwlZCwlZCwuLi4gKi8KLXZvaWQgcDgwMjExX3RvdGV4dF9iaXRhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogJWQsJWQsJWQsLi4uID09PiB1MzIgKi8KLXZvaWQgcDgwMjExX2Zyb210ZXh0X2JpdGFycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0vKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhIGJpdCBhcnJheSdzIHZhbHVlICovCi11MzIgcDgwMjExX2lzdmFsaWRfYml0YXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmICk7Ci0KLS8qLS0gTUFDQVJSQVkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZCBwODAyMTFfdG90ZXh0X21hY2FycmF5KCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi12b2lkIHA4MDIxMV9mcm9tdGV4dF9tYWNhcnJheSggc3RydWN0IGNhdGxpc3RpdGVtICptZXRhbGlzdCwgdTMyIGRpZCwgdTggKml0ZW1idWYsIGNoYXIgKnRleHRidWYgKTsKLQotLyogZnVuY3Rpb24gdGhhdCBjaGVja3MgdmFsaWRpdHkgb2YgYSBNQUMgYWRkcmVzcyBhcnJheSdzIHZhbHVlICovCi11MzIgcDgwMjExX2lzdmFsaWRfbWFjYXJyYXkoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmICk7Ci0KLS8qLS0gTUlCQVRUUklVQlRFIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKiA8bWlidmFsdWU+ID09PiA8dGV4dHVhbCByZXByZXNlbnRhdGlvbiBpZGVudGlmaWVkIGluIE1JQiBtZXRhZGF0YT4gKi8KLXZvaWQgcDgwMjExX3RvdGV4dF9nZXRtaWJhdHRyaWJ1dGUoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmLCBjaGFyICp0ZXh0YnVmICk7Ci12b2lkIHA4MDIxMV90b3RleHRfc2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0KLS8qIDx0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIGlkZW50aWZpZWQgaW4gTUlCIG1ldGFkYXRhPiA9PT4gPG1pYnZhbHVlPiAqLwotdm9pZCBwODAyMTFfZnJvbXRleHRfZ2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotdm9pZCBwODAyMTFfZnJvbXRleHRfc2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwgY2hhciAqdGV4dGJ1ZiApOwotCi0vKiBmdW5jdGlvbiB0aGF0IGNoZWNrcyB2YWxpZGl0eSBvZiBhIG1pYml0ZW0ncyBiaW5hcnkgdmFsdWUgKi8KLXUzMiBwODAyMTFfaXN2YWxpZF9nZXRtaWJhdHRyaWJ1dGUoIHN0cnVjdCBjYXRsaXN0aXRlbSAqbWV0YWxpc3QsIHUzMiBkaWQsIHU4ICppdGVtYnVmICk7Ci11MzIgcDgwMjExX2lzdmFsaWRfc2V0bWliYXR0cmlidXRlKCBzdHJ1Y3QgY2F0bGlzdGl0ZW0gKm1ldGFsaXN0LCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiApOwotCiAjZW5kaWYgLyogX1A4MDIxMVRZUEVTX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2VwLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXAuYwppbmRleCA0NmEyYTZiLi40MDVjZTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXAuYwpAQCAtNTUsOCArNTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotCi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogLy8gI2RlZmluZSBXRVBfREVCVUcKIApAQCAtNzIsMTggKzcxLDkgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBMb2NhbCBDb25zdGFudHMgKi8KIAotI2RlZmluZSBTU1dBUChhLGIpIHt1OCB0bXAgPSBzW2FdOyBzW2FdID0gc1tiXTsgc1tiXSA9IHRtcDt9CiAjZGVmaW5lIFdFUF9LRVkoeCkgICAgICAgKCgoeCkgJiAweEMwKSA+PiA2KQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgTWFjcm9zICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIFR5cGVzICovCi0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLwogCiBzdGF0aWMgY29uc3QgdTMyIHdlcF9jcmMzMl90YWJsZVsyNTZdID0gewpAQCAtMjExLDcgKzIwMSw3IEBACiAJaiA9IDA7CiAJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAJCWogPSAoaiArIHNbaV0gKyBrZXlbaSAlIGtleWxlbl0pICYgMHhmZjsKLQkJU1NXQVAoaSxqKTsKKwkJc3dhcChpLGopOwogCX0KIAogCS8qIEFwcGx5IHRoZSBSQzQgdG8gdGhlIGRhdGEsIHVwZGF0ZSB0aGUgQ1JDMzIgKi8KQEAgLTIyMCw3ICsyMTAsNyBAQAogCWZvciAoayA9IDA7IGsgPCBsZW47IGsrKykgewogCQlpID0gKGkrMSkgJiAweGZmOwogCQlqID0gKGorc1tpXSkgJiAweGZmOwotCQlTU1dBUChpLGopOworCQlzd2FwKGksaik7CiAJCWJ1ZltrXSBePSBzWyhzW2ldICsgc1tqXSkgJiAweGZmXTsKIAkJY3JjID0gd2VwX2NyYzMyX3RhYmxlWyhjcmMgXiBidWZba10pICYgMHhmZl0gXiAoY3JjID4+IDgpOwogCX0KQEAgLTIzNSw3ICsyMjUsNyBAQAogCWZvciAoayA9IDA7IGsgPCA0OyBrKyspIHsKIAkJaSA9IChpICsgMSkgJiAweGZmOwogCQlqID0gKGorc1tpXSkgJiAweGZmOwotCQlTU1dBUChpLGopOworCQlzd2FwKGksaik7CiAJCWlmICgoY19jcmNba10gXiBzWyhzW2ldICsgc1tqXSkgJiAweGZmXSkgIT0gaWN2W2tdKQogCQkJcmV0dXJuIC0oNCB8IChrIDw8IDQpKSA7IC8qIElDViBtaXNtYXRjaCAqLwogCX0KQEAgLTI4Myw3ICsyNzMsNyBAQAogCWogPSAwOwogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewogCQlqID0gKGogKyBzW2ldICsga2V5W2kgJSBrZXlsZW5dKSAmIDB4ZmY7Ci0JCVNTV0FQKGksaik7CisJCXN3YXAoaSxqKTsKIAl9CiAKIAkvKiBVcGRhdGUgQ1JDMzIgdGhlbiBhcHBseSBSQzQgdG8gdGhlIGRhdGEgKi8KQEAgLTI5Myw3ICsyODMsNyBAQAogCQljcmMgPSB3ZXBfY3JjMzJfdGFibGVbKGNyYyBeIGJ1ZltrXSkgJiAweGZmXSBeIChjcmMgPj4gOCk7CiAJCWkgPSAoaSsxKSAmIDB4ZmY7CiAJCWogPSAoaitzW2ldKSAmIDB4ZmY7Ci0JCVNTV0FQKGksaik7CisJCXN3YXAoaSxqKTsKIAkJZHN0W2tdID0gYnVmW2tdIF4gc1soc1tpXSArIHNbal0pICYgMHhmZl07CiAJfQogCWNyYyA9IH5jcmM7CkBAIC0zMDcsNyArMjk3LDcgQEAKIAlmb3IgKGsgPSAwOyBrIDwgNDsgaysrKSB7CiAJCWkgPSAoaSArIDEpICYgMHhmZjsKIAkJaiA9IChqK3NbaV0pICYgMHhmZjsKLQkJU1NXQVAoaSxqKTsKKwkJc3dhcChpLGopOwogCQlpY3Zba10gXj0gc1soc1tpXSArIHNbal0pICYgMHhmZl07CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXh0LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXh0LmMKaW5kZXggMGQ1NzBmMS4uOTYwNzhiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2V4dC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdleHQuYwpAQCAtNTEsMTIgKzUxLDEyIEBACiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBQcm9qZWN0IEluY2x1ZGVzICovCiAKLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgotCiAjaW5jbHVkZSAicDgwMjExdHlwZXMuaCIKICNpbmNsdWRlICJwODAyMTFoZHIuaCIKICNpbmNsdWRlICJwODAyMTFjb252LmgiCkBAIC03NywxNiArNzcsMTQgQEAKIAogc3RhdGljIHU4IHA4MDIxMV9taHpfdG9fY2hhbm5lbCh1MTYgbWh6KQogewotCWlmIChtaHogPj0gNTAwMCkgewotCQlyZXR1cm4gKChtaHogLSA1MDAwKSAvIDUpOwotCX0KKwlpZiAobWh6ID49IDUwMDApCisJCXJldHVybiAobWh6IC0gNTAwMCkgLyA1OwogCiAJaWYgKG1oeiA9PSAyNDgyKQogCQlyZXR1cm4gMTQ7CiAKLQlpZiAobWh6ID49IDI0MDcpIHsKLQkJcmV0dXJuICgobWh6IC0gMjQwNykgLyA1KTsKLQl9CisJaWYgKG1oeiA+PSAyNDA3KQorCQlyZXR1cm4gKG1oeiAtIDI0MDcpIC8gNTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAwLDE5ICs5OCwxNSBAQAogCQlyZXR1cm4gMDsKIAogCS8qIDVHICovCi0KLQlpZiAoZG90MTFhKSB7Ci0JCXJldHVybiAoNTAwMCArICg1ICogY2gpKTsKLQl9CisJaWYgKGRvdDExYSkKKwkJcmV0dXJuIDUwMDAgKyAoNSAqIGNoKTsKIAogCS8qIDIuNEcgKi8KLQogCWlmIChjaCA9PSAxNCkKIAkJcmV0dXJuIDI0ODQ7CiAKLQlpZiAoKGNoIDwgMTQpICYmIChjaCA+IDApKSB7Ci0JCXJldHVybiAoMjQwNyArICg1ICogY2gpKTsKLQl9CisJaWYgKChjaCA8IDE0KSAmJiAoY2ggPiAwKSkKKwkJcmV0dXJuIDI0MDcgKyAoNSAqIGNoKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIyLDU0ICsxMTYsNDYgQEAKIAkyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAogCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQKIH07CisKICNkZWZpbmUgTlVNX0NIQU5ORUxTIEFSUkFZX1NJWkUocDgwMjExd2V4dF9jaGFubmVsX2ZyZXEpCiAKLS8qIHN0ZWFsIGEgc3BhcmUgYml0IHRvIHN0b3JlIHRoZSBzaGFyZWQvb3BlbnN5c3RlbXMgc3RhdGUuIHNob3VsZCBkZWZhdWx0IHRvIG9wZW4gaWYgbm90IHNldCAqLwotI2RlZmluZSBIT1NUV0VQX1NIQVJFREtFWSBCSVQzCisvKiBzdGVhbCBhIHNwYXJlIGJpdCB0byBzdG9yZSB0aGUgc2hhcmVkL29wZW5zeXN0ZW1zIHN0YXRlLgorICAgc2hvdWxkIGRlZmF1bHQgdG8gb3BlbiBpZiBub3Qgc2V0ICovCisjZGVmaW5lIEhPU1RXRVBfU0hBUkVES0VZIEJJVCgzKQogCi0KLS8qKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgPT09PT09PT09PT09PT09ICovCi0KLXN0YXRpYyBpbnQgcXVhbF9hc19wZXJjZW50KGludCBzbnIgKSB7Ci0gIGlmICggc25yIDw9IDAgKQotICAgIHJldHVybiAwOwotICBpZiAoIHNuciA8PSA0MCApCi0gICAgcmV0dXJuIHNucio1LzI7Ci0gIHJldHVybiAxMDA7CitzdGF0aWMgaW50IHF1YWxfYXNfcGVyY2VudChpbnQgc25yKQoreworCWlmIChzbnIgPD0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHNuciA8PSA0MCkKKwkJcmV0dXJuIHNuciAqIDUgLyAyOworCXJldHVybiAxMDA7CiB9CiAKLQotCi0KIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MzIgZGlkLCB1MzIgZGF0YSkKIHsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QJbXNnOwotCXA4MDIxMWl0ZW1fdWludDMyX3QJCW1pYml0ZW07Ci0JaW50CXJlc3VsdDsKLQotCURCRkVOVEVSOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CisJcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOworCWludCByZXN1bHQ7CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CiAJbWliaXRlbS5kaWQgPSBkaWQ7CiAJbWliaXRlbS5kYXRhID0gZGF0YTsKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9hdXRvam9pbih3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90ICAgICBtc2c7Ci0Jc3RydWN0IGl3X3BvaW50CQkJZGF0YTsKKwlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgbXNnOworCXN0cnVjdCBpd19wb2ludCBkYXRhOwogCWNoYXIgc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CiAKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCi0JREJGRU5URVI7Ci0KIAkvKiBHZXQgRVNTSUQgKi8KIAlyZXN1bHQgPSBwODAyMTF3ZXh0X2dpd2Vzc2lkKHdsYW5kZXYtPm5ldGRldiwgTlVMTCwgJmRhdGEsIHNzaWQpOwogCkBAIC0xNzgsMjMgKzE2NCwyMiBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0JaWYgKCB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkgKQotCSAgbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5OworCWlmICh3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9TSEFSRURLRVkpCisJCW1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX3NoYXJlZGtleTsKIAllbHNlCi0JICBtc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtOworCQltc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19vcGVuc3lzdGVtOwogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfbG54cmVxX2F1dG9qb2luOwogCiAJLyogVHJpbSB0aGUgbGFzdCAnXDAnIHRvIGZpdCB0aGUgU1NJRCBmb3JtYXQgKi8KIAotCWlmIChkYXRhLmxlbmd0aCAmJiBzc2lkW2RhdGEubGVuZ3RoLTFdID09ICdcMCcpIHsKKwlpZiAoZGF0YS5sZW5ndGggJiYgc3NpZFtkYXRhLmxlbmd0aCAtIDFdID09ICdcMCcpCiAJCWRhdGEubGVuZ3RoID0gZGF0YS5sZW5ndGggLSAxOwotCX0KIAogCW1lbWNweShtc2cuc3NpZC5kYXRhLmRhdGEsIHNzaWQsIGRhdGEubGVuZ3RoKTsKIAltc2cuc3NpZC5kYXRhLmxlbiA9IGRhdGEubGVuZ3RoOwogCi0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0yMDMsMjIgKzE4OCwyMCBAQAogCiBleGl0OgogCi0JREJGRVhJVDsKIAlyZXR1cm4gZXJyOwogCiB9CiAKIC8qIGNhbGxlZCBieSAvcHJvYy9uZXQvd2lyZWxlc3MgKi8KLXN0cnVjdCBpd19zdGF0aXN0aWNzKiBwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cyAobmV0ZGV2aWNlX3QgKmRldikKK3N0cnVjdCBpd19zdGF0aXN0aWNzICpwODAyMTF3ZXh0X2dldF93aXJlbGVzc19zdGF0cyhuZXRkZXZpY2VfdCAqIGRldikKIHsKLQlwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90ICBxdWFsaXR5OworCXA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3QgcXVhbGl0eTsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0Jc3RydWN0IGl3X3N0YXRpc3RpY3MqIHdzdGF0cyA9ICZ3bGFuZGV2LT53c3RhdHM7CisJc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZ3bGFuZGV2LT53c3RhdHM7CiAJaW50IHJldHZhbDsKIAotCURCRkVOVEVSOwogCS8qIENoZWNrICovCi0JaWYgKCAod2xhbmRldiA9PSBOVUxMKSB8fCAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfUlVOTklORykgKQorCWlmICgod2xhbmRldiA9PSBOVUxMKSB8fCAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfUlVOTklORykpCiAJCXJldHVybiBOVUxMOwogCiAJLyogWFhYIE9ubHkgdmFsaWQgaW4gc3RhdGlvbiBtb2RlICovCkBAIC0yMzAsMjYgKzIxMywyNCBAQAogCXF1YWxpdHkuZGJtLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAogCS8qIHNlbmQgbWVzc2FnZSB0byBuc2QgKi8KLQlpZiAoIHdsYW5kZXYtPm1sbWVyZXF1ZXN0ID09IE5VTEwgKQorCWlmICh3bGFuZGV2LT5tbG1lcmVxdWVzdCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHZhbCA9IHdsYW5kZXYtPm1sbWVyZXF1ZXN0KHdsYW5kZXYsIChwODAyMTFtc2dfdCopICZxdWFsaXR5KTsKKwlyZXR2YWwgPSB3bGFuZGV2LT5tbG1lcmVxdWVzdCh3bGFuZGV2LCAocDgwMjExbXNnX3QgKikmcXVhbGl0eSk7CiAKLQl3c3RhdHMtPnF1YWwucXVhbCA9IHF1YWxfYXNfcGVyY2VudChxdWFsaXR5LmxpbmsuZGF0YSk7ICAgIC8qIG92ZXJhbGwgbGluayBxdWFsaXR5ICovCi0Jd3N0YXRzLT5xdWFsLmxldmVsID0gcXVhbGl0eS5sZXZlbC5kYXRhOyAgLyogaW5zdGFudCBzaWduYWwgbGV2ZWwgKi8KLQl3c3RhdHMtPnF1YWwubm9pc2UgPSBxdWFsaXR5Lm5vaXNlLmRhdGE7ICAvKiBpbnN0YW50IG5vaXNlIGxldmVsICovCisJd3N0YXRzLT5xdWFsLnF1YWwgPSBxdWFsX2FzX3BlcmNlbnQocXVhbGl0eS5saW5rLmRhdGEpOwkvKiBvdmVyYWxsIGxpbmsgcXVhbGl0eSAqLworCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHF1YWxpdHkubGV2ZWwuZGF0YTsJLyogaW5zdGFudCBzaWduYWwgbGV2ZWwgKi8KKwl3c3RhdHMtPnF1YWwubm9pc2UgPSBxdWFsaXR5Lm5vaXNlLmRhdGE7CS8qIGluc3RhbnQgbm9pc2UgbGV2ZWwgKi8KIAogCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOwogCXdzdGF0cy0+ZGlzY2FyZC5jb2RlID0gd2xhbmRldi0+cnguZGVjcnlwdF9lcnI7CiAJd3N0YXRzLT5kaXNjYXJkLm53aWQgPSAwOwogCXdzdGF0cy0+ZGlzY2FyZC5taXNjID0gMDsKIAotCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCA9IDA7ICAvLyBpbmNvbXBsZXRlIGZyYWdtZW50cwotCXdzdGF0cy0+ZGlzY2FyZC5yZXRyaWVzID0gMDsgICAvLyB0eCByZXRyaWVzLgorCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCA9IDA7CS8qIGluY29tcGxldGUgZnJhZ21lbnRzICovCisJd3N0YXRzLT5kaXNjYXJkLnJldHJpZXMgPSAwOwkvKiB0eCByZXRyaWVzLiAqLwogCXdzdGF0cy0+bWlzcy5iZWFjb24gPSAwOwogCi0JREJGRVhJVDsKLQogCXJldHVybiB3c3RhdHM7CiB9CiAKQEAgLTI2MSw4ICsyNDIsNiBAQAogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCXJlc3VsdCA9IHA4MDIxMXdleHRfZ2l3cmF0ZShkZXYsIE5VTEwsICZyYXRlLCBOVUxMKTsKIAogCWlmIChyZXN1bHQpIHsKQEAgLTI4MSw3ICsyNjAsNiBAQAogCQlicmVhazsKIAl9CiBleGl0OgotCURCRkVYSVQ7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjkwLDE3ICsyNjgsMTUgQEAKIAkJCSAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsOwogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTMxOCw4ICsyOTQsNyBAQAogCWZyZXEtPmUgPSAxOwogCWZyZXEtPm0gPSBwODAyMTFfY2hhbm5lbF90b19taHoobWliaXRlbS5kYXRhLCAwKSAqIDEwMDAwMDsKIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzI4LDEzICszMDMsMTEgQEAKIAkJCSAgICAgIHN0cnVjdCBpd19mcmVxICpmcmVxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CiAJCWVyciA9ICgtRU9QTk9UU1VQUCk7CiAJCWdvdG8gZXhpdDsKQEAgLTM0NCwyMSArMzE3LDIwIEBACiAJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbDsKIAltaWJpdGVtLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAotCWlmICggKGZyZXEtPmUgPT0gMCkgJiYgKGZyZXEtPm0gPD0gMTAwMCkgKQorCWlmICgoZnJlcS0+ZSA9PSAwKSAmJiAoZnJlcS0+bSA8PSAxMDAwKSkKIAkJbWliaXRlbS5kYXRhID0gZnJlcS0+bTsKIAllbHNlCiAJCW1pYml0ZW0uZGF0YSA9IHA4MDIxMV9taHpfdG9fY2hhbm5lbChmcmVxLT5tKTsKIAogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKIAkJZ290byBleGl0OwogCX0KIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzY4LDggKzM0MCw2IEBACiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCi0JREJGRU5URVI7Ci0KIAlzd2l0Y2ggKHdsYW5kZXYtPm1hY21vZGUpIHsKIAljYXNlIFdMQU5fTUFDTU9ERV9JQlNTX1NUQToKIAkJKm1vZGUgPSBJV19NT0RFX0FESE9DOwpAQCAtMzg1LDcgKzM1NSw2IEBACiAJCSptb2RlID0gSVdfTU9ERV9BVVRPOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5NCwxMiArMzYzLDEwIEBACiAJCQkgICAgICBfX3UzMiAqbW9kZSwgY2hhciAqZXh0cmEpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKLQlpbnQgCXJlc3VsdDsKLQlpbnQgICAgIGVyciA9IDA7Ci0KLQlEQkZFTlRFUjsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKKwlpbnQgcmVzdWx0OworCWludCBlcnIgPSAwOwogCiAJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKIAkJZXJyID0gKC1FT1BOT1RTVVBQKTsKQEAgLTQyOCw3ICszOTUsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBOb3Qgc2V0IHlldC4gKi8KLQkJV0xBTl9MT0dfSU5GTygiT3BlcmF0aW9uIG1vZGU6ICVkIG5vdCBzdXBwb3J0XG4iLCAqbW9kZSk7CisJCXByaW50ayhLRVJOX0lORk8gIk9wZXJhdGlvbiBtb2RlOiAlZCBub3Qgc3VwcG9ydFxuIiwgKm1vZGUpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC00MzcsMzMgKzQwNCwyOCBAQAogCW1pYml0ZW0uZGlkID0gRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUG9ydFR5cGU7CiAJbWliaXRlbS5kYXRhID0gKCptb2RlID09IElXX01PREVfQURIT0MpID8gMCA6IDE7CiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJaWYgKHJlc3VsdCkKIAkJZXJyID0gLUVGQVVMVDsKIAotIGV4aXQ6Ci0JREJGRVhJVDsKLQorZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCi0KIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdyYW5nZShuZXRkZXZpY2VfdCAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKIHsKLSAgICAgICAgc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKikgZXh0cmE7CisJc3RydWN0IGl3X3JhbmdlICpyYW5nZSA9IChzdHJ1Y3QgaXdfcmFuZ2UgKilleHRyYTsKIAlpbnQgaSwgdmFsOwogCi0JREJGRU5URVI7Ci0KLQkvLyBmb3IgYmFja3dhcmQgY29tcGF0YWJpbGl0eSBzZXQgc2l6ZSAmIHplcm8gZXZlcnl0aGluZyB3ZSBkb24ndCB1bmRlcnN0YW5kCisJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGFiaWxpdHkgc2V0IHNpemUgYW5kIHplcm8gZXZlcnl0aGluZyB3ZSBkb24ndCB1bmRlcnN0YW5kICovCiAJZGF0YS0+bGVuZ3RoID0gc2l6ZW9mKCpyYW5nZSk7Ci0JbWVtc2V0KHJhbmdlLDAsc2l6ZW9mKCpyYW5nZSkpOworCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKCpyYW5nZSkpOwogCiAJcmFuZ2UtPnR4cG93ZXJfY2FwYSA9IElXX1RYUE9XX0RCTTsKLQkvLyBYWFggd2hhdCBhYm91dCBtaW4vbWF4X3BtcCwgbWluL21heF9wbXQsIGV0Yy4KKwkvKiBYWFggd2hhdCBhYm91dCBtaW4vbWF4X3BtcCwgbWluL21heF9wbXQsIGV0Yy4gKi8KIAogCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwogCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDEzOwpAQCAtNDczLDE4ICs0MzUsMTggQEAKIAlyYW5nZS0+bWluX3JldHJ5ID0gMDsKIAlyYW5nZS0+bWF4X3JldHJ5ID0gMjU1OwogCi0gICAgICAgIHJhbmdlLT5ldmVudF9jYXBhWzBdID0gKElXX0VWRU5UX0NBUEFfS18wIHwgIC8vbW9kZS9mcmVxL3NzaWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdBUCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJV19FVkVOVF9DQVBBX01BU0soU0lPQ0dJV1NDQU4pKTsKLSAgICAgICAgcmFuZ2UtPmV2ZW50X2NhcGFbMV0gPSBJV19FVkVOVF9DQVBBX0tfMTsgIC8vZW5jb2RlCi0gICAgICAgIHJhbmdlLT5ldmVudF9jYXBhWzRdID0gKElXX0VWRU5UX0NBUEFfTUFTSyhJV0VWUVVBTCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJV19FVkVOVF9DQVBBX01BU0soSVdFVkNVU1RPTSkgKTsKKwlyYW5nZS0+ZXZlbnRfY2FwYVswXSA9IChJV19FVkVOVF9DQVBBX0tfMCB8CS8qIG1vZGUvZnJlcS9zc2lkICovCisJCQkJSVdfRVZFTlRfQ0FQQV9NQVNLKFNJT0NHSVdBUCkgfAorCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhTSU9DR0lXU0NBTikpOworCXJhbmdlLT5ldmVudF9jYXBhWzFdID0gSVdfRVZFTlRfQ0FQQV9LXzE7CS8qIGVuY29kZSAqLworCXJhbmdlLT5ldmVudF9jYXBhWzRdID0gKElXX0VWRU5UX0NBUEFfTUFTSyhJV0VWUVVBTCkgfAorCQkJCUlXX0VWRU5UX0NBUEFfTUFTSyhJV0VWQ1VTVE9NKSk7CiAKIAlyYW5nZS0+bnVtX2NoYW5uZWxzID0gTlVNX0NIQU5ORUxTOwogCiAJLyogWFhYIG5lZWQgdG8gZmlsdGVyIGFnYWluc3QgdGhlIHJlZ3VsYXRvcnkgZG9tYWluICZ8IGFjdGl2ZSBzZXQgKi8KIAl2YWwgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFMgOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspIHsKIAkJcmFuZ2UtPmZyZXFbdmFsXS5pID0gaSArIDE7CiAJCXJhbmdlLT5mcmVxW3ZhbF0ubSA9IHA4MDIxMXdleHRfY2hhbm5lbF9mcmVxW2ldICogMTAwMDAwOwogCQlyYW5nZS0+ZnJlcVt2YWxdLmUgPSAxOwpAQCAtNDk4LDcgKzQ2MCw3IEBACiAJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMDsKIAlyYW5nZS0+bWF4X3F1YWwubm9pc2UgPSAwOwogCXJhbmdlLT5zZW5zaXRpdml0eSA9IDM7Ci0JLy8gWFhYIHRoZXNlIG5lZWQgdG8gYmUgbnNkLXNwZWNpZmljIQorCS8qIFhYWCB0aGVzZSBuZWVkIHRvIGJlIG5zZC1zcGVjaWZpYyEgKi8KIAogCXJhbmdlLT5taW5fcnRzID0gMDsKIAlyYW5nZS0+bWF4X3J0cyA9IDIzNDc7CkBAIC01MTAsMTQgKzQ3MiwxMyBAQAogCXJhbmdlLT5lbmNvZGluZ19zaXplWzBdID0gNTsKIAlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVsxXSA9IDEzOwogCi0JLy8gWFhYIHdoYXQgYWJvdXQgbnVtX2JpdHJhdGVzL3Rocm91Z2hwdXQ/CisJLyogWFhYIHdoYXQgYWJvdXQgbnVtX2JpdHJhdGVzL3Rocm91Z2hwdXQ/ICovCiAJcmFuZ2UtPm51bV9iaXRyYXRlcyA9IDA7CiAKIAkvKiBlc3RpbWF0ZWQgbWF4IHRocm91Z2hwdXQgKi8KLQkvLyBYWFggbmVlZCB0byBjYXAgaXQgaWYgd2UncmUgcnVubmluZyBhdCB+Mk1icHMuLgorCS8qIFhYWCBuZWVkIHRvIGNhcCBpdCBpZiB3ZSdyZSBydW5uaW5nIGF0IH4yTWJwcy4uICovCiAJcmFuZ2UtPnRocm91Z2hwdXQgPSA1NTAwMDAwOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTI4LDEyICs0ODksOSBAQAogCiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCi0JREJGRU5URVI7Ci0KIAltZW1jcHkoYXBfYWRkci0+c2FfZGF0YSwgd2xhbmRldi0+YnNzaWQsIFdMQU5fQlNTSURfTEVOKTsKIAlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCkBAIC01NDUsOCArNTAzLDYgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgaTsKIAotCURCRkVOVEVSOwotCiAJaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CiAJZXJxLT5mbGFncyA9IDA7CiAKQEAgLTU3Niw4ICs1MzIsNyBAQAogCWVycS0+bGVuZ3RoID0gd2xhbmRldi0+d2VwX2tleWxlbnNbaV07CiAJbWVtY3B5KGtleSwgd2xhbmRldi0+d2VwX2tleXNbaV0sIGVycS0+bGVuZ3RoKTsKIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNTg2LDMyICs1NDEsMzMgQEAKIAkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmVycSwgY2hhciAqa2V5KQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QJbXNnOwotCXA4MDIxMWl0ZW1fcHN0cjMyX3QJCXBzdHI7CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKKwlwODAyMTFpdGVtX3BzdHIzMl90IHBzdHI7CiAKIAlpbnQgZXJyID0gMDsKIAlpbnQgcmVzdWx0ID0gMDsKIAlpbnQgaTsKIAotCURCRkVOVEVSOwogCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CiAJCWVyciA9ICgtRU9QTk9UU1VQUCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAkvKiBDaGVjayB0aGUgS2V5IGluZGV4IGZpcnN0LiAqLwotCWlmKChpID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpKSkgeworCWlmICgoaSA9IChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSkpIHsKIAogCQlpZiAoKGkgPCAxKSB8fCAoaSA+IE5VTV9XRVBLRVlTKSkgewogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gZXhpdDsKLQkJfQotCQllbHNlCisJCX0gZWxzZQogCQkJaS0tOwogCiAJCS8qIFNldCBjdXJyZW50IGtleSBudW1iZXIgb25seSBpZiBubyBrZXlzIGFyZSBnaXZlbiAqLwogCQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkgewotCQkJcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELCBpKTsKKwkJCXJlc3VsdCA9CisJCQkgICAgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwKKwkJCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQsCisJCQkJCQkgaSk7CiAKIAkJCWlmIChyZXN1bHQpIHsKIAkJCQllcnIgPSAtRUZBVUxUOwpAQCAtNjIwLDEyICs1NzYsMTIgQEAKIAkJfQogCiAJfSBlbHNlIHsKLQkJLy8gVXNlIGRlZmF1bHRrZXkgaWYgbm8gS2V5IEluZGV4CisJCS8qIFVzZSBkZWZhdWx0a2V5IGlmIG5vIEtleSBJbmRleCAqLwogCQlpID0gd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfREVGQVVMVEtFWV9NQVNLOwogCX0KIAogCS8qIENoZWNrIGlmIHRoZXJlIGlzIG5vIGtleSBpbmZvcm1hdGlvbiBpbiB0aGUgaXdjb25maWcgcmVxdWVzdCAqLwotCWlmKChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX05PS0VZKSA9PSAwICkgeworCWlmICgoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkgPT0gMCkgewogCiAJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJCSAqIElmIHRoZXJlIGlzIFdFUCBLZXkgZm9yIHNldHRpbmcsIGNoZWNrIHRoZSBLZXkgSW5mb3JtYXRpb24KQEAgLTY0MiwzMiArNTk4LDM1IEBACiAJCQltZW1jcHkocHN0ci5kYXRhLmRhdGEsIGtleSwgZXJxLT5sZW5ndGgpOwogCQkJcHN0ci5kYXRhLmxlbiA9IGVycS0+bGVuZ3RoOwogCi0JCQlzd2l0Y2goaSkKLQkJCXsKLQkJCQljYXNlIDA6Ci0JCQkJCXBzdHIuZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOwotCQkJCQlicmVhazsKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSAwOgorCQkJCXBzdHIuZGlkID0KKwkJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOworCQkJCWJyZWFrOwogCi0JCQkJY2FzZSAxOgotCQkJCQlwc3RyLmRpZCA9IERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MTsKLQkJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJcHN0ci5kaWQgPQorCQkJCSAgICBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTE7CisJCQkJYnJlYWs7CiAKLQkJCQljYXNlIDI6Ci0JCQkJCXBzdHIuZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOwotCQkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlwc3RyLmRpZCA9CisJCQkJICAgIERJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MjsKKwkJCQlicmVhazsKIAotCQkJCWNhc2UgMzoKLQkJCQkJcHN0ci5kaWQgPSBESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTM7Ci0JCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCXBzdHIuZGlkID0KKwkJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOworCQkJCWJyZWFrOwogCi0JCQkJZGVmYXVsdDoKLQkJCQkJZXJyID0gLUVJTlZBTDsKLQkJCQkJZ290byBleGl0OworCQkJZGVmYXVsdDoKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gZXhpdDsKIAkJCX0KIAogCQkJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OwogCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZwc3RyLCBzaXplb2YocHN0cikpOwotCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCQkJaWYgKHJlc3VsdCkgewogCQkJCWVyciA9IC1FRkFVTFQ7CkBAIC02NzksOSArNjM4LDE1IEBACiAKIAkvKiBDaGVjayB0aGUgUHJpdmFjeUludm9rZWQgZmxhZyAqLwogCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKSB7Ci0JCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKKwkJcmVzdWx0ID0KKwkJICAgIHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsCisJCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwKKwkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOwogCX0gZWxzZSB7Ci0JCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOworCQlyZXN1bHQgPQorCQkgICAgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwKKwkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLAorCQkJCQkgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKIAl9CiAKIAlpZiAocmVzdWx0KSB7CkBAIC02OTAsMTcgKzY1NSwyMiBAQAogCX0KIAogCS8qICBUaGUgIHNlY3VyaXR5ICBtb2RlICBtYXkgIGJlIG9wZW4gb3IgcmVzdHJpY3RlZCwgYW5kIGl0cyBtZWFuaW5nCi0JICAgIGRlcGVuZHMgb24gdGhlIGNhcmQgdXNlZC4gV2l0aCAgbW9zdCAgY2FyZHMsICBpbiAgb3BlbiAgbW9kZSAgbm8KLQkgICAgYXV0aGVudGljYXRpb24gIGlzICB1c2VkICBhbmQgIHRoZSAgY2FyZCAgbWF5ICBhbHNvICBhY2NlcHQgbm9uLQotCSAgICBlbmNyeXB0ZWQgc2Vzc2lvbnMsIHdoZXJlYXMgaW4gcmVzdHJpY3RlZCAgbW9kZSAgb25seSAgZW5jcnlwdGVkCi0JICAgIHNlc3Npb25zICBhcmUgIGFjY2VwdGVkICBhbmQgdGhlIGNhcmQgd2lsbCB1c2UgYXV0aGVudGljYXRpb24gaWYKLQkgICAgYXZhaWxhYmxlLgotCSovCisJICAgZGVwZW5kcyBvbiB0aGUgY2FyZCB1c2VkLiBXaXRoICBtb3N0ICBjYXJkcywgIGluICBvcGVuICBtb2RlICBubworCSAgIGF1dGhlbnRpY2F0aW9uICBpcyAgdXNlZCAgYW5kICB0aGUgIGNhcmQgIG1heSAgYWxzbyAgYWNjZXB0IG5vbi0KKwkgICBlbmNyeXB0ZWQgc2Vzc2lvbnMsIHdoZXJlYXMgaW4gcmVzdHJpY3RlZCAgbW9kZSAgb25seSAgZW5jcnlwdGVkCisJICAgc2Vzc2lvbnMgIGFyZSAgYWNjZXB0ZWQgIGFuZCB0aGUgY2FyZCB3aWxsIHVzZSBhdXRoZW50aWNhdGlvbiBpZgorCSAgIGF2YWlsYWJsZS4KKwkgKi8KIAlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKSB7Ci0JCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKLQl9Ci0JZWxzZSBpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKSB7Ci0JCXJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisJCXJlc3VsdCA9CisJCSAgICBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LAorCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAorCQkJCQkgUDgwMjExRU5VTV90cnV0aF90cnVlKTsKKwl9IGVsc2UgaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikgeworCQlyZXN1bHQgPQorCQkgICAgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwKKwkJCQkJIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwKKwkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2UpOwogCX0KIAogCWlmIChyZXN1bHQpIHsKQEAgLTcwOCw5ICs2NzgsOCBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCi0gZXhpdDoKK2V4aXQ6CiAKLQlEQkZFWElUOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTcyMCw4ICs2ODksNiBAQAogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKIAotCURCRkVOVEVSOwotCiAJaWYgKHdsYW5kZXYtPnNzaWQubGVuKSB7CiAJCWRhdGEtPmxlbmd0aCA9IHdsYW5kZXYtPnNzaWQubGVuOwogCQlkYXRhLT5mbGFncyA9IDE7CkBAIC03MzEsMTIgKzY5OCwxMSBAQAogCQlkYXRhLT5sZW5ndGgrKzsKICNlbmRpZgogCX0gZWxzZSB7Ci0JICAJbWVtc2V0KGVzc2lkLCAwLCBzaXplb2Yod2xhbmRldi0+c3NpZC5kYXRhKSk7CisJCW1lbXNldChlc3NpZCwgMCwgc2l6ZW9mKHdsYW5kZXYtPnNzaWQuZGF0YSkpOwogCQlkYXRhLT5sZW5ndGggPSAwOwogCQlkYXRhLT5mbGFncyA9IDA7CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzQ1LDU1ICs3MTEsNDkgQEAKIAkJCSAgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgICAgIG1zZzsKKwlwODAyMTFtc2dfbG54cmVxX2F1dG9qb2luX3QgbXNnOwogCiAJaW50IHJlc3VsdDsKIAlpbnQgZXJyID0gMDsKIAlpbnQgbGVuZ3RoID0gZGF0YS0+bGVuZ3RoOwogCi0JREJGRU5URVI7Ci0KIAlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewogCQllcnIgPSAoLUVPUE5PVFNVUFApOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0KLQlpZiAoIHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1NIQVJFREtFWSApCi0JICBtc2cuYXV0aHR5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXk7CisJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1NIQVJFREtFWSkKKwkJbXNnLmF1dGh0eXBlLmRhdGEgPSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5OwogCWVsc2UKLQkgIG1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW07CisJCW1zZy5hdXRodHlwZS5kYXRhID0gUDgwMjExRU5VTV9hdXRoYWxnX29wZW5zeXN0ZW07CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19sbnhyZXFfYXV0b2pvaW47CiAKICNpZiAoV0lSRUxFU1NfRVhUIDwgMjEpCi0JaWYgKGxlbmd0aCkgbGVuZ3RoLS07CisJaWYgKGxlbmd0aCkKKwkJbGVuZ3RoLS07CiAjZW5kaWYKIAogCS8qIFRyaW0gdGhlIGxhc3QgJ1wwJyB0byBmaXQgdGhlIFNTSUQgZm9ybWF0ICovCi0KLQlpZiAobGVuZ3RoICYmIGVzc2lkW2xlbmd0aC0xXSA9PSAnXDAnKSB7Ci0JICBsZW5ndGgtLTsKLQl9CisJaWYgKGxlbmd0aCAmJiBlc3NpZFtsZW5ndGggLSAxXSA9PSAnXDAnKQorCQlsZW5ndGgtLTsKIAogCW1lbWNweShtc2cuc3NpZC5kYXRhLmRhdGEsIGVzc2lkLCBsZW5ndGgpOwogCW1zZy5zc2lkLmRhdGEubGVuID0gbGVuZ3RoOwogCi0JV0xBTl9MT0dfREVCVUcoMSwiYXV0b2pvaW5fc3NpZCBmb3IgJXMgXG4iLGVzc2lkKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7Ci0gICAgICAgIFdMQU5fTE9HX0RFQlVHKDEsImF1dG9qb2luX3NzaWQgJWRcbiIscmVzdWx0KTsKKwlwcl9kZWJ1ZygiYXV0b2pvaW5fc3NpZCBmb3IgJXMgXG4iLCBlc3NpZCk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKKwlwcl9kZWJ1ZygiYXV0b2pvaW5fc3NpZCAlZFxuIiwgcmVzdWx0KTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKIAkJZ290byBleGl0OwogCX0KIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIAotCiBzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3Y29tbWl0KG5ldGRldmljZV90ICpkZXYsCiAJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQlzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmVzc2lkKQpAQCAtODAxLDggKzc2MSw2IEBACiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCWludCBlcnIgPSAwOwogCi0JREJGRU5URVI7Ci0KIAlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewogCQllcnIgPSAoLUVPUE5PVFNVUFApOwogCQlnb3RvIGV4aXQ7CkBAIC04MTEsMjggKzc2OSwyNCBAQAogCS8qIEF1dG8gSm9pbiAqLwogCWVyciA9IHA4MDIxMXdleHRfYXV0b2pvaW4od2xhbmRldik7CiAKLSBleGl0OgotIAlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCi0KIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdyYXRlKG5ldGRldmljZV90ICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CiAJaW50IHJlc3VsdDsKIAlpbnQgZXJyID0gMDsKIAotCURCRkVOVEVSOwotCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OwogCW1pYml0ZW0uZGlkID0gRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTsKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC04NDEsNyArNzk1LDcgQEAKIAogCW1lbWNweSgmbWliaXRlbSwgJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgc2l6ZW9mKG1pYml0ZW0pKTsKIAotCXJycS0+Zml4ZWQgPSAwOyAgIC8qIGNhbiBpdCBjaGFuZ2U/ICovCisJcnJxLT5maXhlZCA9IDA7CQkvKiBjYW4gaXQgY2hhbmdlPyAqLwogCXJycS0+ZGlzYWJsZWQgPSAwOwogCXJycS0+dmFsdWUgPSAwOwogCkBAIC04NjYsOCArODIwLDcgQEAKIAlkZWZhdWx0OgogCQllcnIgPSAtRUlOVkFMOwogCX0KLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg3NiwxNyArODI5LDE1IEBACiAJCQkgICAgIHN0cnVjdCBpd19wYXJhbSAqcnRzLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkOwogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTg5OSwyNCArODUwLDIwIEBACiAJcnRzLT5kaXNhYmxlZCA9IChydHMtPnZhbHVlID09IDIzNDcpOwogCXJ0cy0+Zml4ZWQgPSAxOwogCi0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCi0KIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXdydHMobmV0ZGV2aWNlX3QgKmRldiwKIAkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgICAgc3RydWN0IGl3X3BhcmFtICpydHMsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CiAJaW50IHJlc3VsdDsKIAlpbnQgZXJyID0gMDsKIAotCURCRkVOVEVSOwotCiAJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKIAkJZXJyID0gKC1FT1BOT1RTVVBQKTsKIAkJZ290byBleGl0OwpAQCAtOTMwLDE1ICs4NzcsMTQgQEAKIAkJbWliaXRlbS5kYXRhID0gcnRzLT52YWx1ZTsKIAogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKIAkJZ290byBleGl0OwogCX0KIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtOTQ3LDE3ICs4OTMsMTYgQEAKIAkJCSAgICAgIHN0cnVjdCBpd19wYXJhbSAqZnJhZywgY2hhciAqZXh0cmEpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMWl0ZW1fdWludDMyX3QgICAgICAgICAgICAgbWliaXRlbTsKLQlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKKwlwODAyMTFpdGVtX3VpbnQzMl90IG1pYml0ZW07CisJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90IG1zZzsKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCi0JREJGRU5URVI7Ci0KIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7Ci0JbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CisJbWliaXRlbS5kaWQgPQorCSAgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtOTcwLDggKzkxNSw3IEBACiAJZnJhZy0+ZGlzYWJsZWQgPSAoZnJhZy0+dmFsdWUgPT0gMjM0Nik7CiAJZnJhZy0+Zml4ZWQgPSAxOwogCi0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC05ODAsMjAgKzkyNCwxOSBAQAogCQkJICAgICAgc3RydWN0IGl3X3BhcmFtICpmcmFnLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCWlmICghd2xhbl93ZXh0X3dyaXRlKSB7CiAJCWVyciA9ICgtRU9QTk9UU1VQUCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7Ci0JbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CisJbWliaXRlbS5kaWQgPQorCSAgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQ7CiAKIAlpZiAoZnJhZy0+ZGlzYWJsZWQpCiAJCW1pYml0ZW0uZGF0YSA9IDIzNDY7CkBAIC0xMDAxLDE1ICs5NDQsMTQgQEAKIAkJbWliaXRlbS5kYXRhID0gZnJhZy0+dmFsdWU7CiAKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEwMjYsMTkgKzk2OCwxNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAJdTE2IHNob3J0cmV0cnksIGxvbmdyZXRyeSwgbGlmZXRpbWU7CiAKLQlEQkZFTlRFUjsKLQogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExU2hvcnRSZXRyeUxpbWl0OwogCiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtMTA1Miw3ICs5OTIsNyBAQAogCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFMb25nUmV0cnlMaW1pdDsKIAogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTEwNjMsMTAgKzEwMDMsMTEgQEAKIAogCWxvbmdyZXRyeSA9IG1pYml0ZW0uZGF0YTsKIAotCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKKwltaWJpdGVtLmRpZCA9CisJICAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4VHJhbnNtaXRNU0RVTGlmZXRpbWU7CiAKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0xMDk0LDggKzEwMzUsNyBAQAogCQl9CiAJfQogCi0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogCiB9CkBAIC0xMTA1LDEzICsxMDQ1LDExIEBACiAJCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFpdGVtX3VpbnQzMl90ICAgICAgICAgICAgIG1pYml0ZW07Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAgICBtc2c7CisJcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CiAJaW50IHJlc3VsdDsKIAlpbnQgZXJyID0gMDsKIAotCURCRkVOVEVSOwotCiAJaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKIAkJZXJyID0gKC1FT1BOT1RTVVBQKTsKIAkJZ290byBleGl0OwpAQCAtMTEyNSwxMSArMTA2MywxMiBAQAogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKIAogCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX1RZUEUpID09IElXX1JFVFJZX0xJRkVUSU1FKSB7Ci0JCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKLQkJbWliaXRlbS5kYXRhID0gIHJycS0+dmFsdWUgLz0gMTAyNDsKKwkJbWliaXRlbS5kaWQgPQorCQkgICAgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKKwkJbWliaXRlbS5kYXRhID0gcnJxLT52YWx1ZSAvPSAxMDI0OwogCiAJCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJCWlmIChyZXN1bHQpIHsKIAkJCWVyciA9IC1FRkFVTFQ7CkBAIC0xMTM3LDExICsxMDc2LDEzIEBACiAJCX0KIAl9IGVsc2UgewogCQlpZiAocnJxLT5mbGFncyAmIElXX1JFVFJZX0xPTkcpIHsKLQkJCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFMb25nUmV0cnlMaW1pdDsKKwkJCW1pYml0ZW0uZGlkID0KKwkJCSAgICBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0OwogCQkJbWliaXRlbS5kYXRhID0gcnJxLT52YWx1ZTsKIAotCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCQkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLAorCQkJICAgICAgIHNpemVvZihtaWJpdGVtKSk7CisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJCQlpZiAocmVzdWx0KSB7CiAJCQkJZXJyID0gLUVGQVVMVDsKQEAgLTExNTAsMTEgKzEwOTEsMTMgQEAKIAkJfQogCiAJCWlmIChycnEtPmZsYWdzICYgSVdfUkVUUllfU0hPUlQpIHsKLQkJCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQ7CisJCQltaWJpdGVtLmRpZCA9CisJCQkgICAgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQ7CiAJCQltaWJpdGVtLmRhdGEgPSBycnEtPnZhbHVlOwogCi0JCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sCisJCQkgICAgICAgc2l6ZW9mKG1pYml0ZW0pKTsKKwkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAKIAkJCWlmIChyZXN1bHQpIHsKIAkJCQllcnIgPSAtRUZBVUxUOwpAQCAtMTE2Myw0NiArMTEwNiw0MyBAQAogCQl9CiAJfQogCi0gZXhpdDoKLQlEQkZFWElUOworZXhpdDoKIAlyZXR1cm4gZXJyOwogCiB9CiAKIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9zaXd0eHBvdyhuZXRkZXZpY2VfdCAqZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQorCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICpycnEsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLSAgICAgICAgcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotICAgICAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICAgIG1zZzsKLSAgICAgICAgaW50IHJlc3VsdDsKLSAgICAgICAgaW50IGVyciA9IDA7CisJcDgwMjExaXRlbV91aW50MzJfdCBtaWJpdGVtOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CisJaW50IHJlc3VsdDsKKwlpbnQgZXJyID0gMDsKIAotICAgICAgICBEQkZFTlRFUjsKKwlpZiAoIXdsYW5fd2V4dF93cml0ZSkgeworCQllcnIgPSAoLUVPUE5PVFNVUFApOworCQlnb3RvIGV4aXQ7CisJfQogCi0gICAgICAgaWYgKCF3bGFuX3dleHRfd3JpdGUpIHsKLSAgICAgICAgICAgICAgICBlcnIgPSAoLUVPUE5PVFNVUFApOwotICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgfQotCi0gICAgICAgIG1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKLQltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWw7CisJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCW1pYml0ZW0uZGlkID0KKwkgICAgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbDsKIAlpZiAocnJxLT5maXhlZCA9PSAwKQotCSAgbWliaXRlbS5kYXRhID0gMzA7CisJCW1pYml0ZW0uZGF0YSA9IDMwOwogCWVsc2UKLQkgIG1pYml0ZW0uZGF0YSA9IHJycS0+dmFsdWU7Ci0gICAgICAgIG1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLSAgICAgICAgcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCQltaWJpdGVtLmRhdGEgPSBycnEtPnZhbHVlOworCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCi0gICAgICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICBlcnIgPSAtRUZBVUxUOwotICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgfQorCWlmIChyZXN1bHQpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBleGl0OworCX0KIAotIGV4aXQ6Ci0gICAgICAgIERCRkVYSVQ7Ci0gICAgICAgIHJldHVybiBlcnI7CitleGl0OgorCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXd0eHBvdyhuZXRkZXZpY2VfdCAqZGV2LApAQCAtMTIxMCwxOCArMTE1MCwxNyBAQAogCQkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqcnJxLCBjaGFyICpleHRyYSkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0JcDgwMjExaXRlbV91aW50MzJfdCAgICAgICAgICAgICBtaWJpdGVtOwotCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgICAgbXNnOworCXA4MDIxMWl0ZW1fdWludDMyX3QgbWliaXRlbTsKKwlwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgbXNnOwogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKLQltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWw7CisJbWliaXRlbS5kaWQgPQorCSAgICBESURtaWJfZG90MTFwaHlfZG90MTFQaHlUeFBvd2VyVGFibGVfZG90MTFDdXJyZW50VHhQb3dlckxldmVsOwogCiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4KikmbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtMTIzMCwxNSArMTE2OSwxNCBAQAogCiAJbWVtY3B5KCZtaWJpdGVtLCAmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCBzaXplb2YobWliaXRlbSkpOwogCi0JLy8gWFhYIGhhbmRsZSBPRkYgYnkgc2V0dGluZyBkaXNhYmxlZCA9IDE7CisJLyogWFhYIGhhbmRsZSBPRkYgYnkgc2V0dGluZyBkaXNhYmxlZCA9IDE7ICovCiAKLQlycnEtPmZsYWdzID0gMDsgLy8gSVdfVFhQT1dfREJNOworCXJycS0+ZmxhZ3MgPSAwOwkJLyogSVdfVFhQT1dfREJNOyAqLwogCXJycS0+ZGlzYWJsZWQgPSAwOwogCXJycS0+Zml4ZWQgPSAwOwogCXJycS0+dmFsdWUgPSBtaWJpdGVtLmRhdGE7CiAKLSBleGl0OgotCURCRkVYSVQ7CitleGl0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEyNDcsMzMgKzExODUsMzIgQEAKIAkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyIGFkZHJlc3NbSVdfTUFYX1NQWV07Ci0gICAgICAgIGludCBudW1iZXIgPSBzcnEtPmxlbmd0aDsKLSAgICAgICAgaW50IGk7Ci0KLQlEQkZFTlRFUjsKKwlzdHJ1Y3Qgc29ja2FkZHIgYWRkcmVzc1tJV19NQVhfU1BZXTsKKwlpbnQgbnVtYmVyID0gc3JxLT5sZW5ndGg7CisJaW50IGk7CiAKIAkvKiBDb3B5IHRoZSBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciAqLwotCW1lbWNweShhZGRyZXNzLCBleHRyYSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikqbnVtYmVyKTsKKwltZW1jcHkoYWRkcmVzcywgZXh0cmEsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpICogbnVtYmVyKTsKIAotICAgICAgICB3bGFuZGV2LT5zcHlfbnVtYmVyID0gMDsKKwl3bGFuZGV2LT5zcHlfbnVtYmVyID0gMDsKIAotICAgICAgICBpZiAobnVtYmVyID4gMCkgeworCWlmIChudW1iZXIgPiAwKSB7CiAKLSAgICAgICAgICAgICAgICAvKiBleHRyYWN0IHRoZSBhZGRyZXNzZXMgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKKwkJLyogZXh0cmFjdCB0aGUgYWRkcmVzc2VzICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgewogCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkod2xhbmRldi0+c3B5X2FkZHJlc3NbaV0sIGFkZHJlc3NbaV0uc2FfZGF0YSwgRVRIX0FMRU4pOworCQkJbWVtY3B5KHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBhZGRyZXNzW2ldLnNhX2RhdGEsCisJCQkgICAgICAgRVRIX0FMRU4pOwogCQl9CiAKLSAgICAgICAgICAgICAgICAvKiByZXNldCBzdGF0cyAqLwotICAgICAgICAgICAgICAgIG1lbXNldCh3bGFuZGV2LT5zcHlfc3RhdCwgMCwgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSAqIElXX01BWF9TUFkpOworCQkvKiByZXNldCBzdGF0cyAqLworCQltZW1zZXQod2xhbmRldi0+c3B5X3N0YXQsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpICogSVdfTUFYX1NQWSk7CiAKLSAgICAgICAgICAgICAgICAvKiBzZXQgbnVtYmVyIG9mIGFkZHJlc3NlcyAqLwotICAgICAgICAgICAgICAgIHdsYW5kZXYtPnNweV9udW1iZXIgPSBudW1iZXI7Ci0gICAgICAgIH0KKwkJLyogc2V0IG51bWJlciBvZiBhZGRyZXNzZXMgKi8KKwkJd2xhbmRldi0+c3B5X251bWJlciA9IG51bWJlcjsKKwl9CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCkBAIC0xMjg0LDc0ICsxMjIxLDcyIEBACiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwogCi0gICAgICAgIHN0cnVjdCBzb2NrYWRkciBhZGRyZXNzW0lXX01BWF9TUFldOwotICAgICAgICBzdHJ1Y3QgaXdfcXVhbGl0eSBzcHlfc3RhdFtJV19NQVhfU1BZXTsKLSAgICAgICAgaW50IG51bWJlcjsKLSAgICAgICAgaW50IGk7CisJc3RydWN0IHNvY2thZGRyIGFkZHJlc3NbSVdfTUFYX1NQWV07CisJc3RydWN0IGl3X3F1YWxpdHkgc3B5X3N0YXRbSVdfTUFYX1NQWV07CisJaW50IG51bWJlcjsKKwlpbnQgaTsKIAotCURCRkVOVEVSOworCW51bWJlciA9IHdsYW5kZXYtPnNweV9udW1iZXI7CiAKLSAgICAgICAgbnVtYmVyID0gd2xhbmRldi0+c3B5X251bWJlcjsKKwlpZiAobnVtYmVyID4gMCkgewogCi0gICAgICAgIGlmIChudW1iZXIgPiAwKSB7Ci0KLSAgICAgICAgICAgICAgICAvKiBwb3B1bGF0ZSBhZGRyZXNzIGFuZCBzcHkgc3RydWN0J3MgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShhZGRyZXNzW2ldLnNhX2RhdGEsIHdsYW5kZXYtPnNweV9hZGRyZXNzW2ldLCBFVEhfQUxFTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzW2ldLnNhX2ZhbWlseSA9IEFGX1VOSVg7Ci0gICAgICAgICAgICAgICAgCW1lbWNweSgmc3B5X3N0YXRbaV0sICZ3bGFuZGV2LT5zcHlfc3RhdFtpXSwgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSk7Ci0gICAgICAgICAgICAgICAgfQorCQkvKiBwb3B1bGF0ZSBhZGRyZXNzIGFuZCBzcHkgc3RydWN0J3MgKi8KKwkJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CisJCQltZW1jcHkoYWRkcmVzc1tpXS5zYV9kYXRhLCB3bGFuZGV2LT5zcHlfYWRkcmVzc1tpXSwKKwkJCSAgICAgICBFVEhfQUxFTik7CisJCQlhZGRyZXNzW2ldLnNhX2ZhbWlseSA9IEFGX1VOSVg7CisJCQltZW1jcHkoJnNweV9zdGF0W2ldLCAmd2xhbmRldi0+c3B5X3N0YXRbaV0sCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSk7CisJCX0KIAogCQkvKiByZXNldCB1cGRhdGUgZmxhZyAqLwotICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgbnVtYmVyOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB3bGFuZGV2LT5zcHlfc3RhdFtpXS51cGRhdGVkID0gMDsKLSAgICAgICAgfQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyOyBpKyspCisJCQl3bGFuZGV2LT5zcHlfc3RhdFtpXS51cGRhdGVkID0gMDsKKwl9CiAKLSAgICAgICAgLyogcHVzaCBzdHVmZiB0byB1c2VyIHNwYWNlICovCi0gICAgICAgIHNycS0+bGVuZ3RoID0gbnVtYmVyOwotCW1lbWNweShleHRyYSwgYWRkcmVzcywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikqbnVtYmVyKTsKLQltZW1jcHkoZXh0cmErc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikqbnVtYmVyLCBzcHlfc3RhdCwgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSpudW1iZXIpOworCS8qIHB1c2ggc3R1ZmYgdG8gdXNlciBzcGFjZSAqLworCXNycS0+bGVuZ3RoID0gbnVtYmVyOworCW1lbWNweShleHRyYSwgYWRkcmVzcywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKiBudW1iZXIpOworCW1lbWNweShleHRyYSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpICogbnVtYmVyLCBzcHlfc3RhdCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd19xdWFsaXR5KSAqIG51bWJlcik7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHByaXNtMl9yZXN1bHQyZXJyIChpbnQgcHJpc20yX3Jlc3VsdCkKK3N0YXRpYyBpbnQgcHJpc20yX3Jlc3VsdDJlcnIoaW50IHByaXNtMl9yZXN1bHQpCiB7CiAJaW50IGVyciA9IDA7CiAKIAlzd2l0Y2ggKHByaXNtMl9yZXN1bHQpIHsKLQkJY2FzZSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOgotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOgotCQkJZXJyID0gLUVJTzsKLQkJCWJyZWFrOwotCQljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOgotCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVyciA9IDA7Ci0JCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbnZhbGlkX3BhcmFtZXRlcnM6CisJCWVyciA9IC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU6CisJCWVyciA9IC1FSU87CisJCWJyZWFrOworCWNhc2UgUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ6CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAwOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHA4MDIxMXdleHRfc2l3c2NhbihuZXRkZXZpY2VfdCAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCisJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGl3X3BvaW50ICpzcnEsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLQlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90CW1zZzsKKwlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl90IG1zZzsKIAlpbnQgcmVzdWx0OwogCWludCBlcnIgPSAwOwogCWludCBpID0gMDsKIAotCURCRkVOVEVSOwotCiAJaWYgKHdsYW5kZXYtPm1hY21vZGUgPT0gV0xBTl9NQUNNT0RFX0VTU19BUCkgewotCQlXTEFOX0xPR19FUlJPUigiQ2FuJ3Qgc2NhbiBpbiBBUCBtb2RlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzY2FuIGluIEFQIG1vZGVcbiIpOwogCQllcnIgPSAoLUVPUE5PVFNVUFApOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMTM2MCwzNiArMTI5NSwzNCBAQAogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX3NjYW47CiAJbXNnLmJzc3R5cGUuZGF0YSA9IFA4MDIxMUVOVU1fYnNzdHlwZV9hbnk7CiAKLQltZW1zZXQoJihtc2cuYnNzaWQuZGF0YSksIDB4RkYsIHNpemVvZiAocDgwMjExaXRlbV9wc3RyNl90KSk7CisJbWVtc2V0KCYobXNnLmJzc2lkLmRhdGEpLCAweEZGLCBzaXplb2YocDgwMjExaXRlbV9wc3RyNl90KSk7CiAJbXNnLmJzc2lkLmRhdGEubGVuID0gNjsKIAogCW1zZy5zY2FudHlwZS5kYXRhID0gUDgwMjExRU5VTV9zY2FudHlwZV9hY3RpdmU7CiAJbXNnLnByb2JlZGVsYXkuZGF0YSA9IDA7CiAKIAlmb3IgKGkgPSAxOyBpIDw9IDE0OyBpKyspCi0JCW1zZy5jaGFubmVsbGlzdC5kYXRhLmRhdGFbaS0xXSA9IGk7CisJCW1zZy5jaGFubmVsbGlzdC5kYXRhLmRhdGFbaSAtIDFdID0gaTsKIAltc2cuY2hhbm5lbGxpc3QuZGF0YS5sZW4gPSAxNDsKIAogCW1zZy5tYXhjaGFubmVsdGltZS5kYXRhID0gMjUwOwogCW1zZy5taW5jaGFubmVsdGltZS5kYXRhID0gMjAwOwogCi0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTgqKSZtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAJaWYgKHJlc3VsdCkKLQkJZXJyID0gcHJpc20yX3Jlc3VsdDJlcnIgKG1zZy5yZXN1bHRjb2RlLmRhdGEpOworCQllcnIgPSBwcmlzbTJfcmVzdWx0MmVycihtc2cucmVzdWx0Y29kZS5kYXRhKTsKIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIGVycjsKIH0KIAotCiAvKiBIZWxwZXIgdG8gdHJhbnNsYXRlIHNjYW4gaW50byBXaXJlbGVzcyBFeHRlbnNpb25zIHNjYW4gcmVzdWx0cy4KICAqIEluc3BpcmVkIGJ5IHRoZSBwcmlzbTU0IGNvZGUsIHdoaWNoIHdhcyBpbiB0dXJuIGluc3BpcmVkIGJ5IHRoZQogICogYWlybyBkcml2ZXIgY29kZS4KICAqLwotc3RhdGljIGNoYXIgKgotd2V4dF90cmFuc2xhdGVfYnNzKHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIGNoYXIgKmN1cnJlbnRfZXYsCi0JCSAgIGNoYXIgKmVuZF9idWYsIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdCAqYnNzKQorc3RhdGljIGNoYXIgKndleHRfdHJhbnNsYXRlX2JzcyhzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCBjaGFyICpjdXJyZW50X2V2LAorCQkJCWNoYXIgKmVuZF9idWYsCisJCQkJcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190ICpic3MpCiB7CiAJc3RydWN0IGl3X2V2ZW50IGl3ZTsJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLwogCkBAIC0xMzk3LDcgKzEzMzAsOSBAQAogCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YnNzaWQuZGF0YS5kYXRhLCBXTEFOX0JTU0lEX0xFTik7CiAJaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJaXdlLmNtZCA9IFNJT0NHSVdBUDsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfQUREUl9MRU4pOworCWN1cnJlbnRfZXYgPQorCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCSBJV19FVl9BRERSX0xFTik7CiAKIAkvKiBUaGUgZm9sbG93aW5nIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHNhbWUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCiAKQEAgLTE0MDYsMzMgKzEzNDEsMzkgQEAKIAkJY2hhciBlc3NpZFtJV19FU1NJRF9NQVhfU0laRSArIDFdOwogCQlpbnQgc2l6ZTsKIAotCQlzaXplID0gd2xhbl9taW4oSVdfRVNTSURfTUFYX1NJWkUsIGJzcy0+c3NpZC5kYXRhLmxlbik7Ci0JCW1lbXNldCgmZXNzaWQsIDAsIHNpemVvZiAoZXNzaWQpKTsKKwkJc2l6ZSA9CisJCSAgICBtaW5fdCh1bnNpZ25lZCBzaG9ydCwgSVdfRVNTSURfTUFYX1NJWkUsCisJCQkgIGJzcy0+c3NpZC5kYXRhLmxlbik7CisJCW1lbXNldCgmZXNzaWQsIDAsIHNpemVvZihlc3NpZCkpOwogCQltZW1jcHkoJmVzc2lkLCBic3MtPnNzaWQuZGF0YS5kYXRhLCBzaXplKTsKLQkJV0xBTl9MT0dfREVCVUcoMSwgIiBlc3NpZCBzaXplID0gJWRcbiIsIHNpemUpOworCQlwcl9kZWJ1ZygiIGVzc2lkIHNpemUgPSAlZFxuIiwgc2l6ZSk7CiAJCWl3ZS51LmRhdGEubGVuZ3RoID0gc2l6ZTsKIAkJaXdlLnUuZGF0YS5mbGFncyA9IDE7CiAJCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCAmZXNzaWRbMF0pOwotCQlXTEFOX0xPR19ERUJVRygxLCAiIGVzc2lkIHNpemUgT0suXG4iKTsKKwkJY3VycmVudF9ldiA9CisJCSAgICBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCQkgJmVzc2lkWzBdKTsKKwkJcHJfZGVidWcoIiBlc3NpZCBzaXplIE9LLlxuIik7CiAJfQogCiAJc3dpdGNoIChic3MtPmJzc3R5cGUuZGF0YSkgewotCQljYXNlIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmZyYXN0cnVjdHVyZToKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKLQkJCWJyZWFrOworCWNhc2UgUDgwMjExRU5VTV9ic3N0eXBlX2luZnJhc3RydWN0dXJlOgorCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7CisJCWJyZWFrOwogCi0JCWNhc2UgUDgwMjExRU5VTV9ic3N0eXBlX2luZGVwZW5kZW50OgotCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7Ci0JCQlicmVhazsKKwljYXNlIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudDoKKwkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CisJCWJyZWFrOwogCi0JCWRlZmF1bHQ6Ci0JCQlpd2UudS5tb2RlID0gMDsKLQkJCWJyZWFrOworCWRlZmF1bHQ6CisJCWl3ZS51Lm1vZGUgPSAwOworCQlicmVhazsKIAl9CiAJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwogCWlmIChpd2UudS5tb2RlKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOworCQljdXJyZW50X2V2ID0KKwkJICAgIGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJCSBJV19FVl9VSU5UX0xFTik7CiAKIAkvKiBFbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KIAlpZiAoYnNzLT5wcml2YWN5LmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQpAQCAtMTQ0MSwxMyArMTM4MiwxNiBAQAogCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOwogCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKIAlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwgTlVMTCk7CisJY3VycmVudF9ldiA9CisJICAgIGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsIE5VTEwpOwogCiAJLyogQWRkIGZyZXF1ZW5jeS4gKHNob3J0KSBic3MtPmNoYW5uZWwgaXMgdGhlIGZyZXF1ZW5jeSBpbiBNSHogKi8KIAlpd2UudS5mcmVxLm0gPSBic3MtPmRzY2hhbm5lbC5kYXRhOwogCWl3ZS51LmZyZXEuZSA9IDA7CiAJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9GUkVRX0xFTik7CisJY3VycmVudF9ldiA9CisJICAgIGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJIElXX0VWX0ZSRVFfTEVOKTsKIAogCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MgKi8KIAlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5zaWduYWwuZGF0YTsKQEAgLTE0NTUsMjYgKzEzOTksMjUgQEAKIAkvKiBkbyBhIHNpbXBsZSBTTlIgZm9yIHF1YWxpdHkgKi8KIAlpd2UudS5xdWFsLnF1YWwgPSBxdWFsX2FzX3BlcmNlbnQoYnNzLT5zaWduYWwuZGF0YSAtIGJzcy0+bm9pc2UuZGF0YSk7CiAJaXdlLmNtZCA9IElXRVZRVUFMOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7CisJY3VycmVudF9ldiA9CisJICAgIGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCisJCQkJIElXX0VWX1FVQUxfTEVOKTsKIAogCXJldHVybiBjdXJyZW50X2V2OwogfQogCi0KIHN0YXRpYyBpbnQgcDgwMjExd2V4dF9naXdzY2FuKG5ldGRldmljZV90ICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICAgIHN0cnVjdCBpd19wb2ludCAqc3JxLCBjaGFyICpleHRyYSkKKwkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKnNycSwgY2hhciAqZXh0cmEpCiB7CiAJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotCXA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdAltc2c7CisJcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0c190IG1zZzsKIAlpbnQgcmVzdWx0ID0gMDsKIAlpbnQgZXJyID0gMDsKIAlpbnQgaSA9IDA7CiAJaW50IHNjYW5fZ29vZCA9IDA7CiAJY2hhciAqY3VycmVudF9ldiA9IGV4dHJhOwogCi0JREJGRU5URVI7Ci0KIAkvKiBTaW5jZSB3aXJlbGVzcyB0b29scyBkb2Vzbid0IHJlYWxseSBoYXZlIGEgd2F5IG9mIHBhc3NpbmcgaG93CiAJICogbWFueSBzY2FuIHJlc3VsdHMgcmVzdWx0cyB0aGVyZSB3ZXJlIGJhY2sgaGVyZSwga2VlcCBncmFiYmluZyB0aGVtCiAJICogdW50aWwgd2UgZmFpbC4KQEAgLTE0ODQsMTEwICsxNDI3LDExNSBAQAogCQltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHM7CiAJCW1zZy5ic3NpbmRleC5kYXRhID0gaTsKIAotCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCopJm1zZyk7CisJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CiAJCWlmICgocmVzdWx0ICE9IDApIHx8CiAJCSAgICAobXNnLnJlc3VsdGNvZGUuZGF0YSAhPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzcykpIHsKIAkJCWJyZWFrOwogCQl9CiAKLQkJY3VycmVudF9ldiA9IHdleHRfdHJhbnNsYXRlX2JzcyhpbmZvLCBjdXJyZW50X2V2LCBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsICZtc2cpOworCQljdXJyZW50X2V2ID0KKwkJICAgIHdleHRfdHJhbnNsYXRlX2JzcyhpbmZvLCBjdXJyZW50X2V2LAorCQkJCSAgICAgICBleHRyYSArIElXX1NDQU5fTUFYX0RBVEEsICZtc2cpOwogCQlzY2FuX2dvb2QgPSAxOwogCQlpKys7CiAJfSB3aGlsZSAoaSA8IElXX01BWF9BUCk7CiAKIAlzcnEtPmxlbmd0aCA9IChjdXJyZW50X2V2IC0gZXh0cmEpOwotCXNycS0+ZmxhZ3MgPSAwOwkvKiB0b2RvICovCisJc3JxLT5mbGFncyA9IDA7CQkvKiB0b2RvICovCiAKIAlpZiAocmVzdWx0ICYmICFzY2FuX2dvb2QpCi0JCWVyciA9IHByaXNtMl9yZXN1bHQyZXJyIChtc2cucmVzdWx0Y29kZS5kYXRhKTsKKwkJZXJyID0gcHJpc20yX3Jlc3VsdDJlcnIobXNnLnJlc3VsdGNvZGUuZGF0YSk7CiAKLQlEQkZFWElUOwogCXJldHVybiBlcnI7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8vZXh0cmEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBzdHVmZiB0byBzdXBwb3J0IE5ldHdvcmtNYW5hZ2VyIChJIGhvcGUpCisvKiBleHRyYSB3aXJlbGVzcyBleHRlbnNpb25zIHN0dWZmIHRvIHN1cHBvcnQgTmV0d29ya01hbmFnZXIgKEkgaG9wZSkgKi8KIAogLyogU0lPQ1NJV0VOQ09ERUVYVCAqLwogc3RhdGljIGludCBwODAyMTF3ZXh0X3NldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQorCQkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKLSAgd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OwotICBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CW1zZzsKLQlwODAyMTFpdGVtX3BzdHIzMl90CQkqcHN0cjsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCBtc2c7CisJcDgwMjExaXRlbV9wc3RyMzJfdCAqcHN0cjsKIAotICBpbnQgcmVzdWx0ID0gMDsKLSAgc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKLSAgaW50IGlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOworCWludCBpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CiAKLSAgV0xBTl9MT0dfREVCVUcoMSwic2V0X2VuY29kZV9leHQgZmxhZ3NbJWRdIGFsZ1slZF0ga2V5bGVuWyVkXVxuIixleHQtPmV4dF9mbGFncywoaW50KWV4dC0+YWxnLChpbnQpZXh0LT5rZXlfbGVuKTsKKwlwcl9kZWJ1Zygic2V0X2VuY29kZV9leHQgZmxhZ3NbJWRdIGFsZ1slZF0ga2V5bGVuWyVkXVxuIiwKKwkgICAgICAgZXh0LT5leHRfZmxhZ3MsIChpbnQpZXh0LT5hbGcsIChpbnQpZXh0LT5rZXlfbGVuKTsKIAorCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZKSB7CisJCS8qIHNldCBkZWZhdWx0IGtleSA/IEknbSBub3Qgc3VyZSBpZiB0aGlzIHRoZSB0aGUgY29ycmVjdCB0aGluZyB0byBkbyBoZXJlICovCiAKLSAgaWYgKCBleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZICkgewotICAgIC8vIHNldCBkZWZhdWx0IGtleSA/IEknbSBub3Qgc3VyZSBpZiB0aGlzIHRoZSB0aGUgY29ycmVjdCB0aGluZyB0byBkbyBoZXJlCisJCWlmIChpZHgpIHsKKwkJCWlmIChpZHggPCAxIHx8IGlkeCA+IE5VTV9XRVBLRVlTKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZWxzZQorCQkJCWlkeC0tOworCQl9CisJCXByX2RlYnVnKCJzZXR0aW5nIGRlZmF1bHQga2V5ICglZClcbiIsIGlkeCk7CisJCXJlc3VsdCA9CisJCSAgICBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LAorCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELAorCQkJCQkgaWR4KTsKKwkJaWYgKHJlc3VsdCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KIAotICAgIGlmICggaWR4ICkgewotICAgICAgaWYgKGlkeCA8IDEgfHwgaWR4ID4gTlVNX1dFUEtFWVMpIHsKLQlyZXR1cm4gLUVJTlZBTDsKLSAgICAgIH0gZWxzZQotCWlkeC0tOwotICAgIH0KLSAgICBXTEFOX0xPR19ERUJVRygxLCJzZXR0aW5nIGRlZmF1bHQga2V5ICglZClcbiIsaWR4KTsKLSAgICByZXN1bHQgPSBwODAyMTF3ZXh0X2RvcmVxdWVzdCh3bGFuZGV2LCBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFXRVBEZWZhdWx0S2V5SUQsIGlkeCk7Ci0gICAgaWYgKCByZXN1bHQgKQotICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gIH0KKwlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkpIHsKKwkJaWYgKCEoZXh0LT5hbGcgJiBJV19FTkNPREVfQUxHX1dFUCkpIHsKKwkJCXByX2RlYnVnKCJhc2tlZCB0byBzZXQgYSBub24gd2VwIGtleSA6KCIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGlkeCkgeworCQkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gTlVNX1dFUEtFWVMpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQllbHNlCisJCQkJaWR4LS07CisJCX0KKwkJcHJfZGVidWcoIlNldCBXRVAga2V5ICglZClcbiIsIGlkeCk7CisJCXdsYW5kZXYtPndlcF9rZXlsZW5zW2lkeF0gPSBleHQtPmtleV9sZW47CisJCW1lbWNweSh3bGFuZGV2LT53ZXBfa2V5c1tpZHhdLCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKIAotCi0gIGlmICggZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkgKSB7Ci0gICAgaWYgKCEoZXh0LT5hbGcgJiBJV19FTkNPREVfQUxHX1dFUCkpIHsKLSAgICAgIFdMQU5fTE9HX0RFQlVHKDEsImFza2VkIHRvIHNldCBhIG5vbiB3ZXAga2V5IDooIik7Ci0gICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0gICAgaWYgKGlkeCkgewotICAgICAgaWYgKGlkeCA8MSB8fCBpZHggPiBOVU1fV0VQS0VZUykKLQlyZXR1cm4gLUVJTlZBTDsKLSAgICAgIGVsc2UKLQlpZHgtLTsKLSAgICB9Ci0gICAgV0xBTl9MT0dfREVCVUcoMSwiU2V0IFdFUCBrZXkgKCVkKVxuIixpZHgpOwotICAgIHdsYW5kZXYtPndlcF9rZXlsZW5zW2lkeF0gPSBleHQtPmtleV9sZW47Ci0gICAgbWVtY3B5KHdsYW5kZXYtPndlcF9rZXlzW2lkeF0sIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOwotCi0gICAgbWVtc2V0KCAmbXNnLDAsc2l6ZW9mKG1zZykpOwotICAgIHBzdHIgPSAocDgwMjExaXRlbV9wc3RyMzJfdCopJm1zZy5taWJhdHRyaWJ1dGUuZGF0YTsKLSAgICBtZW1jcHkocHN0ci0+ZGF0YS5kYXRhLCBleHQtPmtleSxleHQtPmtleV9sZW4pOwotICAgIHBzdHItPmRhdGEubGVuID0gZXh0LT5rZXlfbGVuOwotICAgIHN3aXRjaCAoaWR4KSB7Ci0gICAgY2FzZSAwOgotICAgICAgcHN0ci0+ZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxOgotICAgICAgcHN0ci0+ZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgcHN0ci0+ZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgcHN0ci0+ZGlkID0gRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBtc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7Ci0gICAgcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCh1OCopJm1zZyk7Ci0gICAgV0xBTl9MT0dfREVCVUcoMSwicmVzdWx0ICglZClcbiIscmVzdWx0KTsKLSAgfQotICByZXR1cm4gcmVzdWx0OworCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCQlwc3RyID0gKHA4MDIxMWl0ZW1fcHN0cjMyX3QgKikmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhOworCQltZW1jcHkocHN0ci0+ZGF0YS5kYXRhLCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKKwkJcHN0ci0+ZGF0YS5sZW4gPSBleHQtPmtleV9sZW47CisJCXN3aXRjaCAoaWR4KSB7CisJCWNhc2UgMDoKKwkJCXBzdHItPmRpZCA9CisJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXBzdHItPmRpZCA9CisJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXBzdHItPmRpZCA9CisJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXBzdHItPmRpZCA9CisJCQkgICAgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CisJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopJm1zZyk7CisJCXByX2RlYnVnKCJyZXN1bHQgKCVkKVxuIiwgcmVzdWx0KTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogU0lPQ0dJV0VOQ09ERUVYVCAqLwogc3RhdGljIGludCBwODAyMTF3ZXh0X2dldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CkBAIC0xNTk3LDI0ICsxNTQ1LDI0IEBACiAJaW50IG1heF9sZW47CiAJaW50IGlkeDsKIAotCURCRkVOVEVSOwotCi0JV0xBTl9MT0dfREVCVUcoMSwiZ2V0X2VuY29kZV9leHQgZmxhZ3NbJWRdIGFsZ1slZF0ga2V5bGVuWyVkXVxuIixleHQtPmV4dF9mbGFncywoaW50KWV4dC0+YWxnLChpbnQpZXh0LT5rZXlfbGVuKTsKLQorCXByX2RlYnVnKCJnZXRfZW5jb2RlX2V4dCBmbGFnc1slZF0gYWxnWyVkXSBrZXlsZW5bJWRdXG4iLAorCSAgICAgICBleHQtPmV4dF9mbGFncywgKGludClleHQtPmFsZywgKGludClleHQtPmtleV9sZW4pOwogCiAJbWF4X2xlbiA9IGVuY29kaW5nLT5sZW5ndGggLSBzaXplb2YoKmV4dCk7Ci0JaWYgKCBtYXhfbGVuIDw9IDApIHsKLQkJV0xBTl9MT0dfREVCVUcoMSwiZ2V0X2VuY29kZWV4dCBtYXhfbGVuIFslZF0gaW52YWxpZFxuIixtYXhfbGVuKTsKKwlpZiAobWF4X2xlbiA8PSAwKSB7CisJCXByX2RlYnVnKCJnZXRfZW5jb2RlZXh0IG1heF9sZW4gWyVkXSBpbnZhbGlkXG4iLAorCQkgICAgICAgbWF4X2xlbik7CiAJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCWdvdG8gZXhpdDsKIAl9CiAJaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwogCi0JV0xBTl9MT0dfREVCVUcoMSwiZ2V0X2VuY29kZV9leHQgaW5kZXggWyVkXVxuIixpZHgpOworCXByX2RlYnVnKCJnZXRfZW5jb2RlX2V4dCBpbmRleCBbJWRdXG4iLCBpZHgpOwogCiAJaWYgKGlkeCkgewotCQlpZiAoaWR4IDwgMSB8fCBpZHggPiBOVU1fV0VQS0VZUyApIHsKLQkJCVdMQU5fTE9HX0RFQlVHKDEsImdldF9lbmNvZGVfZXh0IGludmFsaWQga2V5IGluZGV4IFslZF1cbiIsaWR4KTsKKwkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gTlVNX1dFUEtFWVMpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImdldF9lbmNvZGVfZXh0IGludmFsaWQga2V5IGluZGV4IFslZF1cbiIsIGlkeCk7CiAJCQlyZXN1bHQgPSAtRUlOVkFMOwogCQkJZ290byBleGl0OwogCQl9CkBAIC0xNjI1LDIwMyArMTU3MywyMDcgQEAKIAl9CiAKIAllbmNvZGluZy0+ZmxhZ3MgPSBpZHggKyAxOwotCW1lbXNldChleHQsMCxzaXplb2YoKmV4dCkpOworCW1lbXNldChleHQsIDAsIHNpemVvZigqZXh0KSk7CiAKIAlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfV0VQOwogCWV4dC0+a2V5X2xlbiA9IHdsYW5kZXYtPndlcF9rZXlsZW5zW2lkeF07Ci0JbWVtY3B5KCBleHQtPmtleSwgd2xhbmRldi0+d2VwX2tleXNbaWR4XSAsIGV4dC0+a2V5X2xlbiApOworCW1lbWNweShleHQtPmtleSwgd2xhbmRldi0+d2VwX2tleXNbaWR4XSwgZXh0LT5rZXlfbGVuKTsKIAogCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKIGV4aXQ6Ci0JREJGRVhJVDsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBTSU9DU0lXQVVUSCAqLworc3RhdGljIGludCBwODAyMTFfd2V4dF9zZXRfaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisJaW50IHJlc3VsdCA9IDA7CisKKwlwcl9kZWJ1Zygic2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsCisJICAgICAgIChpbnQpcGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCk7CisKKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKwljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKwkJcHJfZGVidWcoImRyb3BfdW5lbmNyeXB0ZWQgJWRcbiIsIHBhcmFtLT52YWx1ZSk7CisJCWlmIChwYXJhbS0+dmFsdWUpCisJCQlyZXN1bHQgPQorCQkJICAgIHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsCisJCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAorCQkJCQkJIFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSk7CisJCWVsc2UKKwkJCXJlc3VsdCA9CisJCQkgICAgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwKKwkJCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsCisJCQkJCQkgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKKwkJcHJfZGVidWcoInByaXZhY3kgaW52b2tlZCAlZFxuIiwgcGFyYW0tPnZhbHVlKTsKKwkJaWYgKHBhcmFtLT52YWx1ZSkKKwkJCXJlc3VsdCA9CisJCQkgICAgcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwKKwkJCQkJCSBESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFQcml2YWN5SW52b2tlZCwKKwkJCQkJCSBQODAyMTFFTlVNX3RydXRoX3RydWUpOworCQllbHNlCisJCQlyZXN1bHQgPQorCQkJICAgIHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsCisJCQkJCQkgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCisJCQkJCQkgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7CisKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCWlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkgeworCQkJcHJfZGVidWcoInNldCBvcGVuX3N5c3RlbVxuIik7CisJCQl3bGFuZGV2LT5ob3N0d2VwICY9IH5IT1NUV0VQX1NIQVJFREtFWTsKKwkJfSBlbHNlIGlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKSB7CisJCQlwcl9kZWJ1Zygic2V0IHNoYXJlZCBrZXlcbiIpOworCQkJd2xhbmRldi0+aG9zdHdlcCB8PSBIT1NUV0VQX1NIQVJFREtFWTsKKwkJfSBlbHNlIHsKKwkJCS8qIGRvbid0IGtub3cgd2hhdCB0byBkbyBrbm93ICAqLworCQkJcHJfZGVidWcoInVua25vd24gQVVUSF9BTEcgKCVkKVxuIiwKKwkJCSAgICAgICBwYXJhbS0+dmFsdWUpOworCQkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyogU0lPQ1NJV0FVVEggKi8KLXN0YXRpYyBpbnQgcDgwMjExX3dleHRfc2V0X2l3YXV0aCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQorc3RhdGljIGludCBwODAyMTFfd2V4dF9nZXRfaXdhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7Ci0gIHdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IGRldi0+bWxfcHJpdjsKLSAgc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKLSAgaW50IHJlc3VsdCA9MDsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CisJc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKKwlpbnQgcmVzdWx0ID0gMDsKIAotICBXTEFOX0xPR19ERUJVRygxLCJzZXRfaXdhdXRoIGZsYWdzWyVkXVxuIiwoaW50KXBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVggKTsKKwlwcl9kZWJ1ZygiZ2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsCisJICAgICAgIChpbnQpcGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCk7CiAKLSAgc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0gIGNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgotICAgIFdMQU5fTE9HX0RFQlVHKDEsImRyb3BfdW5lbmNyeXB0ZWQgJWRcbiIscGFyYW0tPnZhbHVlKTsKLSAgICBpZiAocGFyYW0tPnZhbHVlKQotICAgICAgcmVzdWx0ID0gcDgwMjExd2V4dF9kb3JlcXVlc3Qod2xhbmRldiwgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOwotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMUV4Y2x1ZGVVbmVuY3J5cHRlZCwgUDgwMjExRU5VTV90cnV0aF9mYWxzZSk7Ci0gICAgYnJlYWs7CisJc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CisJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CisJCXBhcmFtLT52YWx1ZSA9CisJCSAgICB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9FWENMVURFVU5FTkNSWVBURUQgPyAxIDogMDsKKwkJYnJlYWs7CiAKLSAgY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKLSAgICBXTEFOX0xPR19ERUJVRygxLCJwcml2YWN5IGludm9rZWQgJWRcbiIscGFyYW0tPnZhbHVlKTsKLSAgICBpZiAoIHBhcmFtLT52YWx1ZSkKLSAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX3RydWUpOwotICAgIGVsc2UKLSAgICAgIHJlc3VsdCA9IHA4MDIxMXdleHRfZG9yZXF1ZXN0KHdsYW5kZXYsIERJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVByaXZhY3lJbnZva2VkLCBQODAyMTFFTlVNX3RydXRoX2ZhbHNlKTsKKwljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorCQlwYXJhbS0+dmFsdWUgPQorCQkgICAgd2xhbmRldi0+aG9zdHdlcCAmIEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQgPyAxIDogMDsKKwkJYnJlYWs7CiAKLSAgICBicmVhazsKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCXBhcmFtLT52YWx1ZSA9CisJCSAgICB3bGFuZGV2LT4KKwkJICAgIGhvc3R3ZXAgJiBIT1NUV0VQX1NIQVJFREtFWSA/IElXX0FVVEhfQUxHX1NIQVJFRF9LRVkgOgorCQkgICAgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07CisJCWJyZWFrOwogCi0gIGNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLSAgICBpZiAoIHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNICkgewotICAgICAgV0xBTl9MT0dfREVCVUcoMSwic2V0IG9wZW5fc3lzdGVtXG4iKTsKLSAgICAgIHdsYW5kZXYtPmhvc3R3ZXAgJj0gfkhPU1RXRVBfU0hBUkVES0VZOwotICAgIH0gZWxzZSBpZiAoIHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpIHsKLSAgICAgIFdMQU5fTE9HX0RFQlVHKDEsInNldCBzaGFyZWQga2V5XG4iKTsKLSAgICAgIHdsYW5kZXYtPmhvc3R3ZXAgfD0gSE9TVFdFUF9TSEFSRURLRVk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGRvbid0IGtub3cgd2hhdCB0byBkbyBrbm93IDooICovCi0gICAgICBXTEFOX0xPR19ERUJVRygxLCJ1bmtub3duIEFVVEhfQUxHICglZClcbiIscGFyYW0tPnZhbHVlKTsKLSAgICAgIHJlc3VsdCA9IC1FSU5WQUw7Ci0gICAgfQotICAgIGJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAotICBkZWZhdWx0OgotICAgIGJyZWFrOwotICB9Ci0KLQotCi0gIHJldHVybiByZXN1bHQ7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAotLyogU0lPQ1NJV0FVVEggKi8KLXN0YXRpYyBpbnQgcDgwMjExX3dleHRfZ2V0X2l3YXV0aCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotICB3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7Ci0gIHN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07Ci0gIGludCByZXN1bHQgPTA7Ci0KLSAgV0xBTl9MT0dfREVCVUcoMSwiZ2V0X2l3YXV0aCBmbGFnc1slZF1cbiIsKGludClwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYICk7Ci0KLSAgc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0gIGNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgotICAgIHBhcmFtLT52YWx1ZSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0VYQ0xVREVVTkVOQ1JZUFRFRD8xOjA7Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSBJV19BVVRIX1BSSVZBQ1lfSU5WT0tFRDoKLSAgICBwYXJhbS0+dmFsdWUgPSB3bGFuZGV2LT5ob3N0d2VwICYgSE9TVFdFUF9QUklWQUNZSU5WT0tFRD8xOjA7Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotICAgIHBhcmFtLT52YWx1ZSA9IHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX1NIQVJFREtFWT9JV19BVVRIX0FMR19TSEFSRURfS0VZOklXX0FVVEhfQUxHX09QRU5fU1lTVEVNOwotICAgIGJyZWFrOwotCi0KLSAgZGVmYXVsdDoKLSAgICBicmVhazsKLSAgfQotCi0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaXdfaGFuZGxlciBwODAyMTF3ZXh0X2hhbmRsZXJzW10gPSAgewotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd2NvbW1pdCwJCS8qIFNJT0NTSVdDT01NSVQgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXduYW1lLAkJLyogU0lPQ0dJV05BTUUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ1NJV05XSUQgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogU0lPQ0dJV05XSUQgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdmcmVxLCAgCQkvKiBTSU9DU0lXRlJFUSAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2ZyZXEsICAJCS8qIFNJT0NHSVdGUkVRICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3bW9kZSwgICAgICAgCQkvKiBTSU9DU0lXTU9ERSAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd21vZGUsICAgICAgIAkJLyogU0lPQ0dJV01PREUgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgIAkJLyogU0lPQ1NJV1NFTlMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgICAgICAgICAgICAgICAgCQkvKiBTSU9DR0lXU0VOUyAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAvKiBub3QgdXNlZCAqLyAgICAgCQkvKiBTSU9DU0lXUkFOR0UgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdyYW5nZSwgICAgICAJCS8qIFNJT0NHSVdSQU5HRSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAvKiBub3QgdXNlZCAqLyAgICAgCQkvKiBTSU9DU0lXUFJJViAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAvKiBrZXJuZWwgY29kZSAqLyAgIAkJLyogU0lPQ0dJV1BSSVYgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwgLyogbm90IHVzZWQgKi8gICAgIAkJLyogU0lPQ1NJV1NUQVRTICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsIC8qIGtlcm5lbCBjb2RlICovICAgCQkvKiBTSU9DR0lXU1RBVFMgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdzcHksCQkJLyogU0lPQ1NJV1NQWSAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3NweSwJCQkvKiBTSU9DR0lXU1BZICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgCQkvKiBTSU9DU0lXQVAgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdhcCwgICAgICAgICAJCS8qIFNJT0NHSVdBUCAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAgCQkvKiBTSU9DR0lXQVBMSVNUICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3c2NhbiwJCS8qIFNJT0NTSVdTQ0FOICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3c2NhbiwJCS8qIFNJT0NHSVdTQ0FOICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZXNzaWQsICAJCS8qIFNJT0NTSVdFU1NJRCAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2Vzc2lkLCAgICAgIAkJLyogU0lPQ0dJV0VTU0lEICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdOSUNLTiAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2Vzc2lkLCAgICAgIAkJLyogU0lPQ0dJV05JQ0tOICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIC0tIGhvbGUgLS0gKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdSQVRFICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cmF0ZSwgICAgICAJCS8qIFNJT0NHSVdSQVRFICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3cnRzLCAgCQkvKiBTSU9DU0lXUlRTICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cnRzLCAgICAgICAgCQkvKiBTSU9DR0lXUlRTICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZnJhZywgICAgICAJCS8qIFNJT0NTSVdGUkFHICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZnJhZywgICAJCS8qIFNJT0NHSVdGUkFHICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3dHhwb3csICAgICAgICAgICAJLyogU0lPQ1NJV1RYUE9XICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3dHhwb3csICAJCS8qIFNJT0NHSVdUWFBPVyAqLwotCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3JldHJ5LCAgICAgCQkvKiBTSU9DU0lXUkVUUlkgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdyZXRyeSwgIAkJLyogU0lPQ0dJV1JFVFJZICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZW5jb2RlLCAgICAgCQkvKiBTSU9DU0lXRU5DT0RFICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZW5jb2RlLCAgCQkvKiBTSU9DR0lXRU5DT0RFICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsICAgICAgICAgICAgICAgICAJCS8qIFNJT0NTSVdQT1dFUiAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAgICAgICAgICAgICAgICAgIAkJLyogU0lPQ0dJV1BPV0VSICovCitzdGF0aWMgaXdfaGFuZGxlciBwODAyMTF3ZXh0X2hhbmRsZXJzW10gPSB7CisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3Y29tbWl0LAkvKiBTSU9DU0lXQ09NTUlUICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3bmFtZSwJLyogU0lPQ0dJV05BTUUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV05XSUQgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV05XSUQgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdmcmVxLAkvKiBTSU9DU0lXRlJFUSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd2ZyZXEsCS8qIFNJT0NHSVdGUkVRICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3bW9kZSwJLyogU0lPQ1NJV01PREUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdtb2RlLAkvKiBTSU9DR0lXTU9ERSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXU0VOUyAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DR0lXU0VOUyAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBub3QgdXNlZCAqLy8qIFNJT0NTSVdSQU5HRSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3JhbmdlLAkvKiBTSU9DR0lXUkFOR0UgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogbm90IHVzZWQgKi8vKiBTSU9DU0lXUFJJViAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBrZXJuZWwgY29kZSAqLy8qIFNJT0NHSVdQUklWICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIG5vdCB1c2VkICovLyogU0lPQ1NJV1NUQVRTICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIGtlcm5lbCBjb2RlICovLyogU0lPQ0dJV1NUQVRTICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3c3B5LAkvKiBTSU9DU0lXU1BZICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3c3B5LAkvKiBTSU9DR0lXU1BZICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXQVAgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdhcCwJLyogU0lPQ0dJV0FQICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV0FQTElTVCAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3NjYW4sCS8qIFNJT0NTSVdTQ0FOICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3c2NhbiwJLyogU0lPQ0dJV1NDQU4gKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdlc3NpZCwJLyogU0lPQ1NJV0VTU0lEICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3ZXNzaWQsCS8qIFNJT0NHSVdFU1NJRCAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXTklDS04gKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdlc3NpZCwJLyogU0lPQ0dJV05JQ0tOICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogLS0gaG9sZSAtLSAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXUkFURSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3JhdGUsCS8qIFNJT0NHSVdSQVRFICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3cnRzLAkvKiBTSU9DU0lXUlRTICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2l3cnRzLAkvKiBTSU9DR0lXUlRTICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3ZnJhZywJLyogU0lPQ1NJV0ZSQUcgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdmcmFnLAkvKiBTSU9DR0lXRlJBRyAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X3Npd3R4cG93LAkvKiBTSU9DU0lXVFhQT1cgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXd0eHBvdywJLyogU0lPQ0dJV1RYUE9XICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2l3cmV0cnksCS8qIFNJT0NTSVdSRVRSWSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dpd3JldHJ5LAkvKiBTSU9DR0lXUkVUUlkgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zaXdlbmNvZGUsCS8qIFNJT0NTSVdFTkNPREUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9naXdlbmNvZGUsCS8qIFNJT0NHSVdFTkNPREUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV1BPV0VSICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NHSVdQT1dFUiAqLwogLyogV1BBIG9wZXJhdGlvbnMgKi8KLQkoaXdfaGFuZGxlcikgTlVMTCwJCQkJLyogLS0gaG9sZSAtLSAqLwotCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiAtLSBob2xlIC0tICovCi0JKGl3X2hhbmRsZXIpIE5VTEwsIC8qIFNJT0NTSVdHRU5JRQlzZXQgZ2VuZXJpYyBJRSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAvKiBTSU9DR0lXR0VOSUUJZ2V0IGdlbmVyaWMgSUUgKi8KLQkoaXdfaGFuZGxlcikgcDgwMjExX3dleHRfc2V0X2l3YXV0aCwgLyogU0lPQ1NJV0FVVEgJc2V0IGF1dGhlbnRpY2F0aW9uIG1vZGUgcGFyYW1zICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMV93ZXh0X2dldF9pd2F1dGgsIC8qIFNJT0NHSVdBVVRICWdldCBhdXRoZW50aWNhdGlvbiBtb2RlIHBhcmFtcyAqLworCShpd19oYW5kbGVyKSBOVUxMLAkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIC0tIGhvbGUgLS0gKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV0dFTklFICAgICAgc2V0IGdlbmVyaWMgSUUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV0dFTklFICAgICAgZ2V0IGdlbmVyaWMgSUUgKi8KKwkoaXdfaGFuZGxlcikgcDgwMjExX3dleHRfc2V0X2l3YXV0aCwJLyogU0lPQ1NJV0FVVEggICAgIHNldCBhdXRoZW50aWNhdGlvbiBtb2RlIHBhcmFtcyAqLworCShpd19oYW5kbGVyKSBwODAyMTFfd2V4dF9nZXRfaXdhdXRoLAkvKiBTSU9DR0lXQVVUSCAgICAgZ2V0IGF1dGhlbnRpY2F0aW9uIG1vZGUgcGFyYW1zICovCiAKLQkoaXdfaGFuZGxlcikgcDgwMjExd2V4dF9zZXRfZW5jb2RlZXh0LCAvKiBTSU9DU0lXRU5DT0RFRVhUICBzZXQgZW5jb2RpbmcgdG9rZW4gJiBtb2RlICovCi0JKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfZ2V0X2VuY29kZWV4dCwgLyogU0lPQ0dJV0VOQ09ERUVYVCAgZ2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLwotCShpd19oYW5kbGVyKSBOVUxMLCAvKiBTSU9DU0lXUE1LU0EJUE1LU0EgY2FjaGUgb3BlcmF0aW9uICovCisJKGl3X2hhbmRsZXIpIHA4MDIxMXdleHRfc2V0X2VuY29kZWV4dCwJLyogU0lPQ1NJV0VOQ09ERUVYVCAgc2V0IGVuY29kaW5nIHRva2VuICYgbW9kZSAqLworCShpd19oYW5kbGVyKSBwODAyMTF3ZXh0X2dldF9lbmNvZGVleHQsCS8qIFNJT0NHSVdFTkNPREVFWFQgIGdldCBlbmNvZGluZyB0b2tlbiAmIG1vZGUgKi8KKwkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ1NJV1BNS1NBICAgICAgUE1LU0EgY2FjaGUgb3BlcmF0aW9uICovCiB9OwogCiBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcDgwMjExd2V4dF9oYW5kbGVyX2RlZiA9IHsKIAkubnVtX3N0YW5kYXJkID0gQVJSQVlfU0laRShwODAyMTF3ZXh0X2hhbmRsZXJzKSwKIAkubnVtX3ByaXZhdGUgPSAwLAogCS5udW1fcHJpdmF0ZV9hcmdzID0gMCwKLSAgICAgICAgLnN0YW5kYXJkID0gcDgwMjExd2V4dF9oYW5kbGVycywKKwkuc3RhbmRhcmQgPSBwODAyMTF3ZXh0X2hhbmRsZXJzLAogCS5wcml2YXRlID0gTlVMTCwKIAkucHJpdmF0ZV9hcmdzID0gTlVMTCwKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHMKIH07CiAKLQogaW50IHA4MDIxMXdleHRfZXZlbnRfYXNzb2NpYXRlZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGludCBhc3NvYykKIHsKLSAgICAgICAgdW5pb24gaXdyZXFfZGF0YSBkYXRhOworCXVuaW9uIGl3cmVxX2RhdGEgZGF0YTsKIAotICAgICAgICBEQkZFTlRFUjsKKwkvKiBTZW5kIHRoZSBhc3NvY2lhdGlvbiBzdGF0ZSBmaXJzdCAqLworCWRhdGEuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJaWYgKGFzc29jKQorCQltZW1jcHkoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIHdsYW5kZXYtPmJzc2lkLCBFVEhfQUxFTik7CisJZWxzZQorCQltZW1zZXQoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIDAsIEVUSF9BTEVOKTsKIAotICAgICAgICAvKiBTZW5kIHRoZSBhc3NvY2lhdGlvbiBzdGF0ZSBmaXJzdCAqLwotICAgICAgICBkYXRhLmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotICAgICAgICBpZiAoYXNzb2MpIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIHdsYW5kZXYtPmJzc2lkLCBXTEFOX0FERFJfTEVOKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1zZXQoZGF0YS5hcF9hZGRyLnNhX2RhdGEsIDAsIFdMQU5fQUREUl9MRU4pOwotICAgICAgICB9CisJaWYgKHdsYW5fd2V4dF93cml0ZSkKKwkJd2lyZWxlc3Nfc2VuZF9ldmVudCh3bGFuZGV2LT5uZXRkZXYsIFNJT0NHSVdBUCwgJmRhdGEsIE5VTEwpOwogCi0gICAgICAgIGlmICh3bGFuX3dleHRfd3JpdGUpCi0gICAgICAgICAgICAgICAgd2lyZWxlc3Nfc2VuZF9ldmVudCh3bGFuZGV2LT5uZXRkZXYsIFNJT0NHSVdBUCwgJmRhdGEsIE5VTEwpOworCWlmICghYXNzb2MpCisJCWdvdG8gZG9uZTsKIAotICAgICAgICBpZiAoIWFzc29jKSBnb3RvIGRvbmU7CisJLyogWFhYIHNlbmQgYXNzb2NpYXRpb24gZGF0YSwgbGlrZSBJRXMsIGV0YyBldGMuICovCiAKLSAgICAgICAgLy8gWFhYIHNlbmQgYXNzb2NpYXRpb24gZGF0YSwgbGlrZSBJRXMsIGV0YyBldGMuCi0KLSBkb25lOgotICAgICAgICBEQkZFWElUOwotICAgICAgICByZXR1cm4gMDsKK2RvbmU6CisJcmV0dXJuIDA7CiB9Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYwppbmRleCBmMTcyN2JhLi5lN2E3OTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jCkBAIC01NywxMSArNTcsNiBAQAogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZwotCi0KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTc2LDggKzcxLDcgQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLSNpbmNsdWRlICJ3bGFuX2NvbXBhdC5oIgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogUHJvamVjdCBJbmNsdWRlcyAqLwpAQCAtOTQsMTAgKzg4LDEwIEBACiAjaW5jbHVkZSAicHJpc20ybWdtdC5oIgogCiAvKiBDb252ZXJ0cyA4MDIuMTEgZm9ybWF0IHJhdGUgc3BlY2lmaWNhdGlvbnMgdG8gcHJpc20yICovCi0jZGVmaW5lIHA4MDIxMXJhdGVfdG9fcDJiaXQobikJKCgoKG4pJn5CSVQ3KSA9PSAyKSA/IEJJVDAgOiBcCi0JCQkJICgoKG4pJn5CSVQ3KSA9PSA0KSA/IEJJVDEgOiBcCi0JCQkJICgoKG4pJn5CSVQ3KSA9PSAxMSkgPyBCSVQyIDogXAotCQkJCSAoKChuKSZ+QklUNykgPT0gMjIpID8gQklUMyA6IDApCisjZGVmaW5lIHA4MDIxMXJhdGVfdG9fcDJiaXQobikJKCgoKG4pJn5CSVQoNykpID09IDIpID8gQklUKDApIDogIFwKKwkJCQkgKCgobikmfkJJVCg3KSkgPT0gNCkgPyBCSVQoMSkgOiBcCisJCQkJICgoKG4pJn5CSVQoNykpID09IDExKSA/IEJJVCgyKSA6IFwKKwkJCQkgKCgobikmfkJJVCg3KSkgPT0gMjIpID8gQklUKDMpIDogMCkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfc2NhbgpAQCAtMTI1LDE4MyArMTE5LDE4OCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcHJpc20ybWdtdF9zY2FuKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQlpbnQgCQkJcmVzdWx0ID0gMDsKLQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fdAkqbXNnID0gbXNncDsKLSAgICAgICAgdTE2ICAgICAgICAgICAgICAgICAgcm9hbWluZ21vZGUsIHdvcmQ7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgaSwgdGltZW91dDsKLQlpbnQgICAgICAgICAgICAgICAgICAgICBpc3RtcGVuYWJsZSA9IDA7CisJaW50IHJlc3VsdCA9IDA7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX2RvdDExcmVxX3NjYW5fdCAqbXNnID0gbXNncDsKKwl1MTYgcm9hbWluZ21vZGUsIHdvcmQ7CisJaW50IGksIHRpbWVvdXQ7CisJaW50IGlzdG1wZW5hYmxlID0gMDsKIAotICAgICAgICBoZmEzODR4X0hvc3RTY2FuUmVxdWVzdF9kYXRhX3QgIHNjYW5yZXE7CisJaGZhMzg0eF9Ib3N0U2NhblJlcXVlc3RfZGF0YV90IHNjYW5yZXE7CiAKLQlEQkZFTlRFUjsKLQotICAgICAgICAvKiBnYXRla2VlcGVyIGNoZWNrICovCi0gICAgICAgIGlmIChIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oaHctPmlkZW50X3N0YV9mdy5tYWpvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPAotICAgICAgICAgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDEsMywyKSkgewotCQlXTEFOX0xPR19FUlJPUigiSG9zdFNjYW4gbm90IHN1cHBvcnRlZCB3aXRoIGN1cnJlbnQgZmlybXdhcmUgKDwxLjMuMikuXG4iKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAxOwotICAgICAgICAgICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CisJLyogZ2F0ZWtlZXBlciBjaGVjayAqLworCWlmIChIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKwkJCQkgICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsCisJCQkJICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpIDwKKwkgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDEsIDMsIDIpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIkhvc3RTY2FuIG5vdCBzdXBwb3J0ZWQgd2l0aCBjdXJyZW50IGZpcm13YXJlICg8MS4zLjIpLlxuIik7CisJCXJlc3VsdCA9IDE7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX25vdF9zdXBwb3J0ZWQ7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLSAgICAgICAgbWVtc2V0KCZzY2FucmVxLCAwLCBzaXplb2Yoc2NhbnJlcSkpOworCW1lbXNldCgmc2NhbnJlcSwgMCwgc2l6ZW9mKHNjYW5yZXEpKTsKIAotICAgICAgICAvKiBzYXZlIGN1cnJlbnQgcm9hbWluZyBtb2RlICovCi0gICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywKLSAgICAgICAgICAgICAgICAgICAgICAgIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLCAmcm9hbWluZ21vZGUpOwotICAgICAgICBpZiAoIHJlc3VsdCApIHsKLSAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigiZ2V0Y29uZmlnKFJPQU1NT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKwkvKiBzYXZlIGN1cnJlbnQgcm9hbWluZyBtb2RlICovCisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAorCQkJCQkgIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLAorCQkJCQkgICZyb2FtaW5nbW9kZSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgImdldGNvbmZpZyhST0FNTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCisJCSAgICAgICByZXN1bHQpOworCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJZ290byBleGl0OworCX0KIAotICAgICAgICAvKiBkcm9wIGludG8gbW9kZSAzIGZvciB0aGUgc2NhbiAqLwotICAgICAgICByZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICBIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwKLQkJCUhGQTM4NHhfUk9BTU1PREVfSE9TVFNDQU5fSE9TVFJPQU0pOwotICAgICAgICBpZiAoIHJlc3VsdCApIHsKLSAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKFJPQU1JTkdNT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKwkvKiBkcm9wIGludG8gbW9kZSAzIGZvciB0aGUgc2NhbiAqLworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKKwkJCQkJICBIRkEzODR4X1JJRF9DTkZST0FNSU5HTU9ERSwKKwkJCQkJICBIRkEzODR4X1JPQU1NT0RFX0hPU1RTQ0FOX0hPU1RST0FNKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAic2V0Y29uZmlnKFJPQU1JTkdNT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKwkJICAgICAgIHJlc3VsdCk7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQlnb3RvIGV4aXQ7CisJfQogCi0gICAgICAgIC8qIGFjdGl2ZSBvciBwYXNzaXZlPyAqLwotICAgICAgICBpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpID4KLSAgICAgICAgICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLDUsMCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobXNnLT5zY2FudHlwZS5kYXRhICE9IFA4MDIxMUVOVU1fc2NhbnR5cGVfYWN0aXZlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3b3JkID0gaG9zdDJoZmEzODR4XzE2KG1zZy0+bWF4Y2hhbm5lbHRpbWUuZGF0YSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQgPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlBBU1NJVkVTQ0FOQ1RSTCwgd29yZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCByZXN1bHQgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBXTEFOX0xPR19XQVJOSU5HKCJQYXNzaXZlIHNjYW4gbm90IHN1cHBvcnRlZCB3aXRoICIKLQkJCQkJICAiY3VycmVudCBmaXJtd2FyZS4gICg8MS41LjEpXG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkvKiBhY3RpdmUgb3IgcGFzc2l2ZT8gKi8KKwlpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCQkJICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAorCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KSA+CisJICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLCA1LCAwKSkgeworCQlpZiAobXNnLT5zY2FudHlwZS5kYXRhICE9IFA4MDIxMUVOVU1fc2NhbnR5cGVfYWN0aXZlKQorCQkJd29yZCA9IGNwdV90b19sZTE2KG1zZy0+bWF4Y2hhbm5lbHRpbWUuZGF0YSk7CisJCWVsc2UKKwkJCXdvcmQgPSAwOworCisJCXJlc3VsdCA9CisJCSAgICBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlBBU1NJVkVTQ0FOQ1RSTCwKKwkJCQkJICAgICB3b3JkKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUGFzc2l2ZSBzY2FuIG5vdCBzdXBwb3J0ZWQgd2l0aCAiCisJCQkgICAgICAgImN1cnJlbnQgZmlybXdhcmUuICAoPDEuNS4xKVxuIik7CisJCX0KKwl9CiAKIAkvKiBzZXQgdXAgdGhlIHR4cmF0ZSB0byBiZSAyTUJQUy4gU2hvdWxkIGJlIGZhc3Rlc3QgYmFzaWNyYXRlLi4uICovCiAJd29yZCA9IEhGQTM4NHhfUkFURUJJVF8yOwotCXNjYW5yZXEudHhSYXRlID0gaG9zdDJoZmEzODR4XzE2KHdvcmQpOworCXNjYW5yZXEudHhSYXRlID0gY3B1X3RvX2xlMTYod29yZCk7CiAKLSAgICAgICAgLyogc2V0IHVwIHRoZSBjaGFubmVsIGxpc3QgKi8KLSAgICAgICAgd29yZCA9IDA7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtc2ctPmNoYW5uZWxsaXN0LmRhdGEubGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICB1OCBjaGFubmVsID0gbXNnLT5jaGFubmVsbGlzdC5kYXRhLmRhdGFbaV07Ci0gICAgICAgICAgICAgICAgaWYgKGNoYW5uZWwgPiAxNCkgY29udGludWU7Ci0gICAgICAgICAgICAgICAgLyogY2hhbm5lbCAxIGlzIEJJVDAgLi4uIGNoYW5uZWwgMTQgaXMgQklUMTMgKi8KLSAgICAgICAgICAgICAgICB3b3JkIHw9ICgxIDw8IChjaGFubmVsLTEpKTsKLSAgICAgICAgfQotICAgICAgICBzY2FucmVxLmNoYW5uZWxMaXN0ID0gaG9zdDJoZmEzODR4XzE2KHdvcmQpOworCS8qIHNldCB1cCB0aGUgY2hhbm5lbCBsaXN0ICovCisJd29yZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IG1zZy0+Y2hhbm5lbGxpc3QuZGF0YS5sZW47IGkrKykgeworCQl1OCBjaGFubmVsID0gbXNnLT5jaGFubmVsbGlzdC5kYXRhLmRhdGFbaV07CisJCWlmIChjaGFubmVsID4gMTQpCisJCQljb250aW51ZTsKKwkJLyogY2hhbm5lbCAxIGlzIEJJVCAwIC4uLiBjaGFubmVsIDE0IGlzIEJJVCAxMyAqLworCQl3b3JkIHw9ICgxIDw8IChjaGFubmVsIC0gMSkpOworCX0KKwlzY2FucmVxLmNoYW5uZWxMaXN0ID0gY3B1X3RvX2xlMTYod29yZCk7CiAKLSAgICAgICAgLyogc2V0IHVwIHRoZSBzc2lkLCBpZiBwcmVzZW50LiAqLwotICAgICAgICBzY2FucmVxLnNzaWQubGVuID0gaG9zdDJoZmEzODR4XzE2KG1zZy0+c3NpZC5kYXRhLmxlbik7Ci0gICAgICAgIG1lbWNweShzY2FucmVxLnNzaWQuZGF0YSwgbXNnLT5zc2lkLmRhdGEuZGF0YSwgbXNnLT5zc2lkLmRhdGEubGVuKTsKKwkvKiBzZXQgdXAgdGhlIHNzaWQsIGlmIHByZXNlbnQuICovCisJc2NhbnJlcS5zc2lkLmxlbiA9IGNwdV90b19sZTE2KG1zZy0+c3NpZC5kYXRhLmxlbik7CisJbWVtY3B5KHNjYW5yZXEuc3NpZC5kYXRhLCBtc2ctPnNzaWQuZGF0YS5kYXRhLCBtc2ctPnNzaWQuZGF0YS5sZW4pOwogCiAJLyogRW5hYmxlIHRoZSBNQUMgcG9ydCBpZiBpdCdzIG5vdCBhbHJlYWR5IGVuYWJsZWQgICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9QT1JUU1RBVFVTLCAmd29yZCk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJnZXRjb25maWcoUE9SVFNUQVRVUykgZmFpbGVkLiAiCi0JCQkJInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ2V0Y29uZmlnKFBPUlRTVEFUVVMpIGZhaWxlZC4gIgorCQkgICAgICAgInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJZ290byBleGl0OwogCX0KIAlpZiAod29yZCA9PSBIRkEzODR4X1BPUlRTVEFUVVNfRElTQUJMRUQpIHsKIAkJdTE2IHdvcmRidWZbMTddOwogCiAJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKLQkJCUhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLAotCQkJSEZBMzg0eF9ST0FNTU9ERV9IT1NUU0NBTl9IT1NUUk9BTSk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhST0FNSU5HTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCQkJCQkgIEhGQTM4NHhfUklEX0NORlJPQU1JTkdNT0RFLAorCQkJCQkJICBIRkEzODR4X1JPQU1NT0RFX0hPU1RTQ0FOX0hPU1RST0FNKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgInNldGNvbmZpZyhST0FNSU5HTU9ERSkgZmFpbGVkLiByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQkvKiBDb25zdHJ1Y3QgYSBib2d1cyBTU0lEIGFuZCBhc3NpZ24gaXQgdG8gT3duU1NJRCBhbmQKIAkJICogRGVzaXJlZFNTSUQKIAkJICovCi0JCXdvcmRidWZbMF0gPSBob3N0MmhmYTM4NHhfMTYoV0xBTl9TU0lEX01BWExFTik7CisJCXdvcmRidWZbMF0gPSBjcHVfdG9fbGUxNihXTEFOX1NTSURfTUFYTEVOKTsKIAkJZ2V0X3JhbmRvbV9ieXRlcygmd29yZGJ1ZlsxXSwgV0xBTl9TU0lEX01BWExFTik7Ci0JCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LCBIRkEzODR4X1JJRF9DTkZPV05TU0lELAotCQkJCXdvcmRidWYsIEhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHNldCBPd25TU0lELlxuIik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORk9XTlNTSUQsCisJCQkJCQl3b3JkYnVmLAorCQkJCQkJSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4pOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgT3duU1NJRC5cbiIpOwogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwogCQl9Ci0JCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwKLQkJCQl3b3JkYnVmLCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRF9MRU4pOwotCQlpZiAoIHJlc3VsdCApIHsKLQkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IERlc2lyZWRTU0lELlxuIik7CisJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELAorCQkJCQkJd29yZGJ1ZiwKKwkJCQkJCUhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lEX0xFTik7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBEZXNpcmVkU1NJRC5cbiIpOwogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwogCQl9CiAJCS8qIGJzc3R5cGUgKi8KIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAotCQkJCUhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAotCQkJCUhGQTM4NHhfUE9SVFRZUEVfSUJTUyk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQ05GUE9SVFRZUEUuXG4iKTsKKwkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsCisJCQkJCQkgIEhGQTM4NHhfUE9SVFRZUEVfSUJTUyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBDTkZQT1JUVFlQRS5cbiIpOwogCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwogCQl9CiAJCS8qIGlic3Mgb3B0aW9ucyAqLwogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0JCQkJSEZBMzg0eF9SSURfQ1JFQVRFSUJTUywKLQkJCQlIRkEzODR4X0NSRUFURUlCU1NfSk9JTkNSRUFURUlCU1MpOwotCQlpZiAoIHJlc3VsdCApIHsKLQkJCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IENSRUFURUlCU1MuXG4iKTsKKwkJCQkJCSAgSEZBMzg0eF9SSURfQ1JFQVRFSUJTUywKKwkJCQkJCSAgSEZBMzg0eF9DUkVBVEVJQlNTX0pPSU5DUkVBVEVJQlNTKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IENSRUFURUlCU1MuXG4iKTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZW5hYmxlKGh3LCAwKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19FUlJPUigiZHJ2cl9lbmFibGUoMCkgZmFpbGVkLiAiCi0JCQkJCSJyZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZHJ2cl9lbmFibGUoMCkgZmFpbGVkLiAiCisJCQkgICAgICAgInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwogCQl9CiAJCWlzdG1wZW5hYmxlID0gMTsKIAl9CiAKLSAgICAgICAgLyogRmlndXJlIG91dCBvdXIgdGltZW91dCBmaXJzdCBLdXMsIHRoZW4gSFogKi8KLSAgICAgICAgdGltZW91dCA9IG1zZy0+Y2hhbm5lbGxpc3QuZGF0YS5sZW4gKiBtc2ctPm1heGNoYW5uZWx0aW1lLmRhdGE7Ci0JdGltZW91dCA9ICh0aW1lb3V0ICogSFopLzEwMDA7CisJLyogRmlndXJlIG91dCBvdXIgdGltZW91dCBmaXJzdCBLdXMsIHRoZW4gSFogKi8KKwl0aW1lb3V0ID0gbXNnLT5jaGFubmVsbGlzdC5kYXRhLmxlbiAqIG1zZy0+bWF4Y2hhbm5lbHRpbWUuZGF0YTsKKwl0aW1lb3V0ID0gKHRpbWVvdXQgKiBIWikgLyAxMDAwOwogCi0gICAgICAgIC8qIElzc3VlIHRoZSBzY2FuIHJlcXVlc3QgKi8KLSAgICAgICAgaHctPnNjYW5mbGFnID0gMDsKKwkvKiBJc3N1ZSB0aGUgc2NhbiByZXF1ZXN0ICovCisJaHctPnNjYW5mbGFnID0gMDsKIAotCVdMQU5fSEVYX0RVTVAoNSwiaHNjYW5yZXEiLCAmc2NhbnJlcSwgc2l6ZW9mKHNjYW5yZXEpKTsKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LAorCQkJCQlIRkEzODR4X1JJRF9IT1NUU0NBTiwgJnNjYW5yZXEsCisJCQkJCXNpemVvZihoZmEzODR4X0hvc3RTY2FuUmVxdWVzdF9kYXRhX3QpKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAic2V0Y29uZmlnKFNDQU5SRVFVRVNUKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKwkJICAgICAgIHJlc3VsdCk7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQlnb3RvIGV4aXQ7CisJfQogCi0gICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAotICAgICAgICAgICAgICAgICAgICAgICAgSEZBMzg0eF9SSURfSE9TVFNDQU4sICZzY2FucmVxLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGhmYTM4NHhfSG9zdFNjYW5SZXF1ZXN0X2RhdGFfdCkpOwotICAgICAgICBpZiAoIHJlc3VsdCApIHsKLSAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKFNDQU5SRVFVRVNUKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBzbGVlcCB1bnRpbCBpbmZvIGZyYW1lIGFycml2ZXMgKi8KLSAgICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaHctPmNtZHEsIGh3LT5zY2FuZmxhZywgdGltZW91dCk7CisJLyogc2xlZXAgdW50aWwgaW5mbyBmcmFtZSBhcnJpdmVzICovCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaHctPmNtZHEsIGh3LT5zY2FuZmxhZywgdGltZW91dCk7CiAKIAltc2ctPm51bWJzcy5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJaWYgKGh3LT5zY2FuZmxhZyA9PSAtMSkKQEAgLTMwOSwxNiArMzA4LDE2IEBACiAKIAltc2ctPm51bWJzcy5kYXRhID0gaHctPnNjYW5mbGFnOwogCi0gICAgICAgIGh3LT5zY2FuZmxhZyA9IDA7CisJaHctPnNjYW5mbGFnID0gMDsKIAogCS8qIERpc2FibGUgcG9ydCBpZiB3ZSB0ZW1wb3JhcmlseSBlbmFibGVkIGl0LiAqLwogCWlmIChpc3RtcGVuYWJsZSkgewogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZGlzYWJsZShodywgMCk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfRVJST1IoImRydnJfZGlzYWJsZSgwKSBmYWlsZWQuICIKLQkJCQkJInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJkcnZyX2Rpc2FibGUoMCkgZmFpbGVkLiAiCisJCQkgICAgICAgInJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJZ290byBleGl0OwogCQl9CiAJfQpAQCAtMzI2LDI1ICszMjUsMjMgQEAKIAkvKiByZXN0b3JlIG9yaWdpbmFsIHJvYW1pbmcgbW9kZSAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GUk9BTUlOR01PREUsCiAJCQkJCSAgcm9hbWluZ21vZGUpOwotICAgICAgICBpZiAoIHJlc3VsdCApIHsKLSAgICAgICAgICAgICAgICBXTEFOX0xPR19FUlJPUigic2V0Y29uZmlnKFJPQU1NT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICBtc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAic2V0Y29uZmlnKFJPQU1NT0RFKSBmYWlsZWQuIHJlc3VsdD0lZFxuIiwKKwkJICAgICAgIHJlc3VsdCk7CisJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQlnb3RvIGV4aXQ7CisJfQogCi0gICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgIG1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CisJcmVzdWx0ID0gMDsKKwltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCi0gZXhpdDoKK2V4aXQ6CiAJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMKICoKQEAgLTM2NywzMiArMzY0LDMyIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBwcmlzbTJtZ210X3NjYW5fcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7Ci0JaW50IAkJCXJlc3VsdCA9IDA7Ci0gICAgICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdCAgICAgICAqcmVxOwotCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlpbnQgcmVzdWx0ID0gMDsKKwlwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgKnJlcTsKKwloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKIAloZmEzODR4X0hTY2FuUmVzdWx0U3ViX3QgKml0ZW0gPSBOVUxMOwogCiAJaW50IGNvdW50OwogCi0JREJGRU5URVI7Ci0KLSAgICAgICAgcmVxID0gKHA4MDIxMW1zZ19kb3QxMXJlcV9zY2FuX3Jlc3VsdHNfdCAqKSBtc2dwOworCXJlcSA9IChwODAyMTFtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzX3QgKikgbXNncDsKIAogCXJlcS0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAKLQlpZiAoISBody0+c2NhbnJlc3VsdHMpIHsKLQkJV0xBTl9MT0dfRVJST1IoImRvdDExcmVxX3NjYW5fcmVzdWx0cyBjYW4gb25seSBiZSB1c2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bCBkb3QxMXJlcV9zY2FuLlxuIik7CisJaWYgKCFody0+c2NhbnJlc3VsdHMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiZG90MTFyZXFfc2Nhbl9yZXN1bHRzIGNhbiBvbmx5IGJlIHVzZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRvdDExcmVxX3NjYW4uXG4iKTsKIAkJcmVzdWx0ID0gMjsKIAkJcmVxLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0gICAgICAgIGNvdW50ID0gKGh3LT5zY2FucmVzdWx0cy0+ZnJhbWVsZW4gLSAzKSAvIDMyOwotCWlmIChjb3VudCA+IDMyKSAgY291bnQgPSAzMjsKKwljb3VudCA9IChody0+c2NhbnJlc3VsdHMtPmZyYW1lbGVuIC0gMykgLyAzMjsKKwlpZiAoY291bnQgPiAzMikKKwkJY291bnQgPSAzMjsKIAogCWlmIChyZXEtPmJzc2luZGV4LmRhdGEgPj0gY291bnQpIHsKLQkJV0xBTl9MT0dfREVCVUcoMCwgInJlcXVlc3RlZCBpbmRleCAoJWQpIG91dCBvZiByYW5nZSAoJWQpXG4iLAotCQkJCXJlcS0+YnNzaW5kZXguZGF0YSwgY291bnQpOworCQlwcl9kZWJ1ZygicmVxdWVzdGVkIGluZGV4ICglZCkgb3V0IG9mIHJhbmdlICglZClcbiIsCisJCSAgICAgICByZXEtPmJzc2luZGV4LmRhdGEsIGNvdW50KTsKIAkJcmVzdWx0ID0gMjsKIAkJcmVxLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOwogCQlnb3RvIGV4aXQ7CkBAIC00MDIsOCArMzk5LDggQEAKIAkvKiBzaWduYWwgYW5kIG5vaXNlICovCiAJcmVxLT5zaWduYWwuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCXJlcS0+bm9pc2Uuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCXJlcS0+c2lnbmFsLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaXRlbS0+c2wpOwotCXJlcS0+bm9pc2UuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihpdGVtLT5hbmwpOworCXJlcS0+c2lnbmFsLmRhdGEgPSBsZTE2X3RvX2NwdShpdGVtLT5zbCk7CisJcmVxLT5ub2lzZS5kYXRhID0gbGUxNl90b19jcHUoaXRlbS0+YW5sKTsKIAogCS8qIEJTU0lEICovCiAJcmVxLT5ic3NpZC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CkBAIC00MTIsMTMgKzQwOSwxMyBAQAogCiAJLyogU1NJRCAqLwogCXJlcS0+c3NpZC5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JcmVxLT5zc2lkLmRhdGEubGVuID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPnNzaWQubGVuKTsKKwlyZXEtPnNzaWQuZGF0YS5sZW4gPSBsZTE2X3RvX2NwdShpdGVtLT5zc2lkLmxlbik7CiAJbWVtY3B5KHJlcS0+c3NpZC5kYXRhLmRhdGEsIGl0ZW0tPnNzaWQuZGF0YSwgcmVxLT5zc2lkLmRhdGEubGVuKTsKIAogCS8qIHN1cHBvcnRlZCByYXRlcyAqLwotICAgICAgICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCAxMCA7IGNvdW50KyspCi0gICAgICAgICAgICAgICAgaWYgKGl0ZW0tPnN1cHByYXRlc1tjb3VudF0gPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDEwOyBjb3VudCsrKQorCQlpZiAoaXRlbS0+c3VwcHJhdGVzW2NvdW50XSA9PSAwKQorCQkJYnJlYWs7CiAKICNkZWZpbmUgUkVRQkFTSUNSQVRFKE4pIFwKIAlpZiAoKGNvdW50ID49IE4pICYmIERPVDExX1JBVEU1X0lTQkFTSUNfR0VUKGl0ZW0tPnN1cHByYXRlc1soTiktMV0pKSB7IFwKQEAgLTQ1Miw3ICs0NDksNyBAQAogCiAJLyogYmVhY29uIHBlcmlvZCAqLwogCXJlcS0+YmVhY29ucGVyaW9kLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQlyZXEtPmJlYWNvbnBlcmlvZC5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPmJjbmludCk7CisJcmVxLT5iZWFjb25wZXJpb2QuZGF0YSA9IGxlMTZfdG9fY3B1KGl0ZW0tPmJjbmludCk7CiAKIAkvKiB0aW1lc3RhbXBzICovCiAJcmVxLT50aW1lc3RhbXAuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwpAQCAtNDYyLDE0ICs0NTksMTQgQEAKIAogCS8qIGF0aW0gd2luZG93ICovCiAJcmVxLT5pYnNzYXRpbXdpbmRvdy5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JcmVxLT5pYnNzYXRpbXdpbmRvdy5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPmF0aW0pOworCXJlcS0+aWJzc2F0aW13aW5kb3cuZGF0YSA9IGxlMTZfdG9fY3B1KGl0ZW0tPmF0aW0pOwogCiAJLyogQ2hhbm5lbCAqLwogCXJlcS0+ZHNjaGFubmVsLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQlyZXEtPmRzY2hhbm5lbC5kYXRhID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPmNoaWQpOworCXJlcS0+ZHNjaGFubmVsLmRhdGEgPSBsZTE2X3RvX2NwdShpdGVtLT5jaGlkKTsKIAogCS8qIGNhcGluZm8gYml0cyAqLwotCWNvdW50ID0gaGZhMzg0eDJob3N0XzE2KGl0ZW0tPmNhcGluZm8pOworCWNvdW50ID0gbGUxNl90b19jcHUoaXRlbS0+Y2FwaW5mbyk7CiAKIAkvKiBwcml2YWN5IGZsYWcgKi8KIAlyZXEtPnByaXZhY3kuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwpAQCAtNDg0LDI1ICs0ODEsMTQgQEAKIAlyZXEtPmNmcG9sbHJlcS5kYXRhID0gV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19DRlBPTExSRVEoY291bnQpOwogCiAJLyogYnNzdHlwZSAqLwotCXJlcS0+YnNzdHlwZS5zdGF0dXMgPSAgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCXJlcS0+YnNzdHlwZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJcmVxLT5ic3N0eXBlLmRhdGEgPSAoV0xBTl9HRVRfTUdNVF9DQVBfSU5GT19FU1MoY291bnQpKSA/Ci0JCVA4MDIxMUVOVU1fYnNzdHlwZV9pbmZyYXN0cnVjdHVyZSA6Ci0JCVA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudDsKLQotCS8vIGl0ZW0tPnByb2JlcmVzcF9yYXRlCi0vKgotCXJlcS0+Zmhkd2VsbHRpbWUKLQlyZXEtPmZoaG9wc2V0Ci0JcmVxLT5maGhvcHBhdHRlcm4KLQlyZXEtPmZoaG9waW5kZXgKLSAgICAgICAgcmVxLT5jZnBkdXJyZW1haW5pbmcKLSovCisJICAgIFA4MDIxMUVOVU1fYnNzdHlwZV9pbmZyYXN0cnVjdHVyZSA6IFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudDsKIAogCXJlc3VsdCA9IDA7CiAJcmVxLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAotIGV4aXQ6Ci0JREJGRVhJVDsKK2V4aXQ6CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTI3LDE1ICs1MTMsMTQgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IHByaXNtMm1nbXRfc3RhcnQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQogewotCWludCAJCQlyZXN1bHQgPSAwOwotCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlwODAyMTFtc2dfZG90MTFyZXFfc3RhcnRfdAkqbXNnID0gbXNncDsKKwlpbnQgcmVzdWx0ID0gMDsKKwloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlwODAyMTFtc2dfZG90MTFyZXFfc3RhcnRfdCAqbXNnID0gbXNncDsKIAotCXA4MDIxMXBzdHJkX3QJCSpwc3RyOwotCXU4CQkJYnl0ZWJ1Zls4MF07Ci0JaGZhMzg0eF9ieXRlc3RyX3QJKnAyYnl0ZXN0ciA9IChoZmEzODR4X2J5dGVzdHJfdCopYnl0ZWJ1ZjsKLQl1MTYJCQl3b3JkOwotCURCRkVOVEVSOworCXA4MDIxMXBzdHJkX3QgKnBzdHI7CisJdTggYnl0ZWJ1Zls4MF07CisJaGZhMzg0eF9ieXRlc3RyX3QgKnAyYnl0ZXN0ciA9IChoZmEzODR4X2J5dGVzdHJfdCAqKSBieXRlYnVmOworCXUxNiB3b3JkOwogCiAJd2xhbmRldi0+bWFjbW9kZSA9IFdMQU5fTUFDTU9ERV9OT05FOwogCkBAIC01NDcsNyArNTMyLDcgQEAKIAlpZiAoSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKGh3LT5pZGVudF9zdGFfZncubWFqb3IsCiAJCQkJICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAogCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy52YXJpYW50KSA8Ci0JICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigwLDgsMykpIHsKKwkgICAgSEZBMzg0eF9GSVJNV0FSRV9WRVJTSU9OKDAsIDgsIDMpKSB7CiAJCS8qIEFkLUhvYyBub3QgcXVpdGUgc3VwcG9ydGVkIG9uIFByaXNtMiAqLwogCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9ub3Rfc3VwcG9ydGVkOwpAQCAtNTU5LDE4ICs1NDQsMTkgQEAKIAkvKioqIFNUQVRJT04gKioqLwogCS8qIFNldCB0aGUgUkVRVUlSRUQgY29uZmlnIGl0ZW1zICovCiAJLyogU1NJRCAqLwotCXBzdHIgPSAocDgwMjExcHN0cmRfdCopJihtc2ctPnNzaWQuZGF0YSk7CisJcHN0ciA9IChwODAyMTFwc3RyZF90ICopJihtc2ctPnNzaWQuZGF0YSk7CiAJcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIocDJieXRlc3RyLCBwc3RyKTsKLQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKCBodywgSEZBMzg0eF9SSURfQ05GT1dOU1NJRCwKLQkJCQkJIGJ5dGVidWYsIEhGQTM4NHhfUklEX0NORk9XTlNTSURfTEVOKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQ25mT3duU1NJRFxuIik7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GT1dOU1NJRCwKKwkJCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IENuZk93blNTSURcbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9Ci0JcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELAotCQkJCQkgYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgQ25mRGVzaXJlZFNTSURcbiIpOworCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORkRFU0lSRURTU0lELAorCQkJCQlieXRlYnVmLAorCQkJCQlIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRF9MRU4pOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IENuZkRlc2lyZWRTU0lEXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCkBAIC01ODEsODQgKzU2Nyw4NCBAQAogCS8qIGJlYWNvbiBwZXJpb2QgKi8KIAl3b3JkID0gbXNnLT5iZWFjb25wZXJpb2QuZGF0YTsKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORkFQQkNOaW50LCB3b3JkKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgYmVhY29uIHBlcmlvZD0lZC5cbiIsIHdvcmQpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IGJlYWNvbiBwZXJpb2Q9JWQuXG4iLCB3b3JkKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZHNjaGFubmVsICovCiAJd29yZCA9IG1zZy0+ZHNjaGFubmVsLmRhdGE7CiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLCB3b3JkKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgY2hhbm5lbD0lZC5cbiIsIHdvcmQpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gc2V0IGNoYW5uZWw9JWQuXG4iLCB3b3JkKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCS8qIEJhc2ljIHJhdGVzICovCiAJd29yZCA9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUxLmRhdGEpOwotCWlmICggbXNnLT5iYXNpY3JhdGUyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJaWYgKG1zZy0+YmFzaWNyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUyLmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+YmFzaWNyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+YmFzaWNyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGUzLmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+YmFzaWNyYXRlNC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+YmFzaWNyYXRlNC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU0LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+YmFzaWNyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+YmFzaWNyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU1LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+YmFzaWNyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+YmFzaWNyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU2LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+YmFzaWNyYXRlNy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+YmFzaWNyYXRlNy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU3LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+YmFzaWNyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+YmFzaWNyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5iYXNpY3JhdGU4LmRhdGEpOwotCX0KKwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQkFTSUNSQVRFUywgd29yZCk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IGJhc2ljcmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCBiYXNpY3JhdGVzPSVkLlxuIiwgd29yZCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIE9wZXJhdGlvbmFsIHJhdGVzIChzdXBwcmF0ZXMgYW5kIHR4cmF0ZWNvbnRyb2wpICovCiAJd29yZCA9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUxLmRhdGEpOwotCWlmICggbXNnLT5vcGVyYXRpb25hbHJhdGUyLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2sgKSB7CisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlMi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUyLmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlMy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGUzLmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlNC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU0LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlNS5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU1LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlNi5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU2LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlNy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlNy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU3LmRhdGEpOwotCX0KLQlpZiAoIG1zZy0+b3BlcmF0aW9uYWxyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rICkgeworCisJaWYgKG1zZy0+b3BlcmF0aW9uYWxyYXRlOC5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQogCQl3b3JkIHw9IHA4MDIxMXJhdGVfdG9fcDJiaXQobXNnLT5vcGVyYXRpb25hbHJhdGU4LmRhdGEpOwotCX0KKwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GU1VQUFJBVEVTLCB3b3JkKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byBzZXQgc3VwcHJhdGVzPSVkLlxuIiwgd29yZCk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzZXQgc3VwcHJhdGVzPSVkLlxuIiwgd29yZCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfVFhSQVRFQ05UTCwgd29yZCk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gc2V0IHR4cmF0ZXM9JWQuXG4iLCB3b3JkKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHNldCB0eHJhdGVzPSVkLlxuIiwgd29yZCk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIFNldCB0aGUgbWFjbW9kZSBzbyB0aGUgZnJhbWUgc2V0dXAgY29kZSBrbm93cyB3aGF0IHRvIGRvICovCi0JaWYgKCBtc2ctPmJzc3R5cGUuZGF0YSA9PSBQODAyMTFFTlVNX2Jzc3R5cGVfaW5kZXBlbmRlbnQgKSB7CisJaWYgKG1zZy0+YnNzdHlwZS5kYXRhID09IFA4MDIxMUVOVU1fYnNzdHlwZV9pbmRlcGVuZGVudCkgewogCQl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX0lCU1NfU1RBOwogCQkvKiBsZXRzIGV4dGVuZCB0aGUgZGF0YSBsZW5ndGggYSBiaXQgKi8KIAkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBIRkEzODR4X1JJRF9DTkZNQVhEQVRBTEVOLCAyMzA0KTsKQEAgLTY2Niw4ICs2NTIsOCBAQAogCiAJLyogRW5hYmxlIHRoZSBQb3J0ICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJFbmFibGUgbWFjcG9ydCBmYWlsZWQsIHJlc3VsdD0lZC5cbiIsIHJlc3VsdCk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkVuYWJsZSBtYWNwb3J0IGZhaWxlZCwgcmVzdWx0PSVkLlxuIiwgcmVzdWx0KTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCkBAIC02NzUsMTMgKzY2MSwxMiBAQAogCiAJZ290byBkb25lOwogZmFpbGVkOgotCVdMQU5fTE9HX0RFQlVHKDEsICJGYWlsZWQgdG8gc2V0IGEgY29uZmlnIG9wdGlvbiwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCXByX2RlYnVnKCJGYWlsZWQgdG8gc2V0IGEgY29uZmlnIG9wdGlvbiwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOwogCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKIAogZG9uZToKIAlyZXN1bHQgPSAwOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC03MDUsNDAgKzY5MCwzNSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcHJpc20ybWdtdF9yZWFkcGRhKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX3AycmVxX3JlYWRwZGFfdAkqbXNnID0gbXNncDsKLQlpbnQJCQkJcmVzdWx0OwotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9yZWFkcGRhX3QgKm1zZyA9IG1zZ3A7CisJaW50IHJlc3VsdDsKIAogCS8qIFdlIG9ubHkgc3VwcG9ydCBjb2xsZWN0aW5nIHRoZSBQREEgd2hlbiBpbiB0aGUgRldMT0FECiAJICogc3RhdGUuCiAJICovCiAJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgewotCQlXTEFOX0xPR19FUlJPUigKLQkJCSJQREEgbWF5IG9ubHkgYmUgcmVhZCAiCi0JCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJQREEgbWF5IG9ubHkgYmUgcmVhZCAiICJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJfSBlbHNlIHsKIAkJLyogIENhbGwgZHJ2cl9yZWFkcGRhKCksIGl0IGhhbmRsZXMgdGhlIGF1eHBvcnQgZW5hYmxlCiAJCSAqICBhbmQgdmFsaWRhdGluZyB0aGUgcmV0dXJuZWQgUERBLgogCQkgKi8KLQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3JlYWRwZGEoCi0JCQlodywKLQkJCW1zZy0+cGRhLmRhdGEsCi0JCQlIRkEzODR4X1BEQV9MRU5fTUFYKTsKKwkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3JlYWRwZGEoaHcsCisJCQkJCSAgICAgIG1zZy0+cGRhLmRhdGEsCisJCQkJCSAgICAgIEhGQTM4NHhfUERBX0xFTl9NQVgpOwogCQlpZiAocmVzdWx0KSB7Ci0JCQlXTEFOX0xPR19FUlJPUigKLQkJCQkiaGZhMzg0eF9kcnZyX3JlYWRwZGEoKSBmYWlsZWQsICIKLQkJCQkicmVzdWx0PSVkXG4iLAotCQkJCXJlc3VsdCk7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiaGZhMzg0eF9kcnZyX3JlYWRwZGEoKSBmYWlsZWQsICIKKwkJCSAgICAgICAicmVzdWx0PSVkXG4iLCByZXN1bHQpOwogCiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0KLQkJCQlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JCQlEQkZFWElUOworCQkJICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAkJCXJldHVybiAwOwogCQl9CiAJCW1zZy0+cGRhLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKQEAgLTc0Niw3ICs3MjYsNiBAQAogCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc3NywzMCArNzU2LDI5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBwcmlzbTJtZ210X3JhbWRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7Ci0JcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlX3QJKm1zZyA9IG1zZ3A7Ci0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX3JhbWRsX3N0YXRlX3QgKm1zZyA9IG1zZ3A7CiAKIAlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfRldMT0FEKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJInJhbWRsX3N0YXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCi0JCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJyYW1kbF9zdGF0ZSgpOiBtYXkgb25seSBiZSBjYWxsZWQgIgorCQkgICAgICAgImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPQotCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKIAkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQkJREJGRVhJVDsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyoKLQkqKiBOb3RlOiBJbnRlcnJ1cHRzIGFyZSBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYW4gQVAgYW5kIGFyZSBOT1QKLQkqKiBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYSBzdGF0aW9uLgotCSovCisJICoqIE5vdGU6IEludGVycnVwdHMgYXJlIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhbiBBUCBhbmQgYXJlIE5PVAorCSAqKiBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYSBzdGF0aW9uLgorCSAqLwogCiAJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQlpZiAgKCBtc2ctPmVuYWJsZS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSApIHsKLQkJaWYgKCBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGh3LCBtc2ctPmV4ZWFkZHIuZGF0YSkgKSB7Ci0JCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCWlmIChtc2ctPmVuYWJsZS5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkgeworCQlpZiAoaGZhMzg0eF9kcnZyX3JhbWRsX2VuYWJsZShodywgbXNnLT5leGVhZGRyLmRhdGEpKSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCX0gZWxzZSB7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCQl9CkBAIC04MDksMTEgKzc4Nyw5IEBACiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CiAJfQogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20ybWdtdF9yYW1kbF93cml0ZQogKgpAQCAtODM2LDQ1ICs4MTIsNDEgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IHByaXNtMm1nbXRfcmFtZGxfd3JpdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKQogewotCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlwODAyMTFtc2dfcDJyZXFfcmFtZGxfd3JpdGVfdAkqbXNnID0gbXNncDsKLQl1MzIJCQlhZGRyOwotCXUzMgkJCWxlbjsKLQl1OAkJCSpidWY7Ci0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJcDgwMjExbXNnX3AycmVxX3JhbWRsX3dyaXRlX3QgKm1zZyA9IG1zZ3A7CisJdTMyIGFkZHI7CisJdTMyIGxlbjsKKwl1OCAqYnVmOwogCiAJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgewotCQlXTEFOX0xPR19FUlJPUigKLQkJCSJyYW1kbF93cml0ZSgpOiBtYXkgb25seSBiZSBjYWxsZWQgIgotCQkJImluIHRoZSBmd2xvYWQgc3RhdGUuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAicmFtZGxfd3JpdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKKwkJICAgICAgICJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JCURCRkVYSVQ7CiAJCXJldHVybiAwOwogCX0KIAogCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAJLyogZmlyc3QgdmFsaWRhdGUgdGhlIGxlbmd0aCAqLwotCWlmICAoIG1zZy0+bGVuLmRhdGEgPiBzaXplb2YobXNnLT5kYXRhLmRhdGEpICkgewotCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwlpZiAobXNnLT5sZW4uZGF0YSA+IHNpemVvZihtc2ctPmRhdGEuZGF0YSkpIHsKKwkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9CisJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOwogCQlyZXR1cm4gMDsKIAl9CiAJLyogY2FsbCB0aGUgaGZhMzg0eCBmdW5jdGlvbiB0byBkbyB0aGUgd3JpdGUgKi8KIAlhZGRyID0gbXNnLT5hZGRyLmRhdGE7CiAJbGVuID0gbXNnLT5sZW4uZGF0YTsKIAlidWYgPSBtc2ctPmRhdGEuZGF0YTsKLQlpZiAoIGhmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZShodywgYWRkciwgYnVmLCBsZW4pICkgeworCWlmIChoZmEzODR4X2RydnJfcmFtZGxfd3JpdGUoaHcsIGFkZHIsIGJ1ZiwgbGVuKSkKIAkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfcmVmdXNlZDsKIAotCX0KIAltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20ybWdtdF9mbGFzaGRsX3N0YXRlCiAqCkBAIC05MDIsMzEgKzg3NCwzMCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBpbnQgcHJpc20ybWdtdF9mbGFzaGRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQlpbnQJCQlyZXN1bHQgPSAwOwotCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKLQlwODAyMTFtc2dfcDJyZXFfZmxhc2hkbF9zdGF0ZV90CSptc2cgPSBtc2dwOwotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlX3QgKm1zZyA9IG1zZ3A7CiAKIAlpZiAod2xhbmRldi0+bXNkc3RhdGUgIT0gV0xBTl9NU0RfRldMT0FEKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKAotCQkJImZsYXNoZGxfc3RhdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKLQkJCSJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgImZsYXNoZGxfc3RhdGUoKTogbWF5IG9ubHkgYmUgY2FsbGVkICIKKwkJICAgICAgICJpbiB0aGUgZndsb2FkIHN0YXRlLlxuIik7CiAJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCVA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOworCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JCURCRkVYSVQ7CiAJCXJldHVybiAwOwogCX0KIAogCS8qCi0JKiogTm90ZTogSW50ZXJydXB0cyBhcmUgbG9ja2VkIG91dCBpZiB0aGlzIGlzIGFuIEFQIGFuZCBhcmUgTk9UCi0JKiogbG9ja2VkIG91dCBpZiB0aGlzIGlzIGEgc3RhdGlvbi4KLQkqLworCSAqKiBOb3RlOiBJbnRlcnJ1cHRzIGFyZSBsb2NrZWQgb3V0IGlmIHRoaXMgaXMgYW4gQVAgYW5kIGFyZSBOT1QKKwkgKiogbG9ja2VkIG91dCBpZiB0aGlzIGlzIGEgc3RhdGlvbi4KKwkgKi8KIAogCW1zZy0+cmVzdWx0Y29kZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7Ci0JaWYgICggbXNnLT5lbmFibGUuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUgKSB7Ci0JCWlmICggaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZW5hYmxlKGh3KSApIHsKLQkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJaWYgKG1zZy0+ZW5hYmxlLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSB7CisJCWlmIChoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUoaHcpKSB7CisJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCX0gZWxzZSB7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCQl9CkBAIC05NDMsMTkgKzkxNCwxNyBAQAogCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKIAkJcmVzdWx0ID0gcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2Z3bG9hZCk7CiAJCWlmIChyZXN1bHQgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKLQkJCVdMQU5fTE9HX0VSUk9SKCJwcmlzbTJzdGFfaWZzdGF0ZShmd2xvYWQpIGZhaWxlZCwiCi0JCQkJIlA4MDIxMUVOVU1fcmVzdWx0Y29kZT0lZFxuIiwgcmVzdWx0KTsKKwkJCXByaW50ayhLRVJOX0VSUiAicHJpc20yc3RhX2lmc3RhdGUoZndsb2FkKSBmYWlsZWQsIgorCQkJICAgICAgICJQODAyMTFFTlVNX3Jlc3VsdGNvZGU9JWRcbiIsIHJlc3VsdCk7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCQlyZXN1bHQgPSAtMTsKIAkJfQogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIDA7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZQogKgpAQCAtOTc2LDQ3ICs5NDUsNDMgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogaW50IHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7Ci0JaGZhMzg0eF90CQkqaHcgPSB3bGFuZGV2LT5wcml2OwotCXA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX3QJKm1zZyA9IG1zZ3A7Ci0JdTMyCQkJYWRkcjsKLQl1MzIJCQlsZW47Ci0JdTgJCQkqYnVmOwotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSB3bGFuZGV2LT5wcml2OworCXA4MDIxMW1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlX3QgKm1zZyA9IG1zZ3A7CisJdTMyIGFkZHI7CisJdTMyIGxlbjsKKwl1OCAqYnVmOwogCiAJaWYgKHdsYW5kZXYtPm1zZHN0YXRlICE9IFdMQU5fTVNEX0ZXTE9BRCkgewotCQlXTEFOX0xPR19FUlJPUigKLQkJCSJmbGFzaGRsX3dyaXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCi0JCQkiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJmbGFzaGRsX3dyaXRlKCk6IG1heSBvbmx5IGJlIGNhbGxlZCAiCisJCSAgICAgICAiaW4gdGhlIGZ3bG9hZCBzdGF0ZS5cbiIpOwogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCQlEQkZFWElUOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKgotCSoqIE5vdGU6IEludGVycnVwdHMgYXJlIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhbiBBUCBhbmQgYXJlIE5PVAotCSoqIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhIHN0YXRpb24uCi0JKi8KKwkgKiogTm90ZTogSW50ZXJydXB0cyBhcmUgbG9ja2VkIG91dCBpZiB0aGlzIGlzIGFuIEFQIGFuZCBhcmUgTk9UCisJICoqIGxvY2tlZCBvdXQgaWYgdGhpcyBpcyBhIHN0YXRpb24uCisJICovCiAKIAltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCS8qIGZpcnN0IHZhbGlkYXRlIHRoZSBsZW5ndGggKi8KLQlpZiAgKCBtc2ctPmxlbi5kYXRhID4gc2l6ZW9mKG1zZy0+ZGF0YS5kYXRhKSApIHsKKwlpZiAobXNnLT5sZW4uZGF0YSA+IHNpemVvZihtc2ctPmRhdGEuZGF0YSkpIHsKIAkJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9Ci0JCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOworCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIGNhbGwgdGhlIGhmYTM4NHggZnVuY3Rpb24gdG8gZG8gdGhlIHdyaXRlICovCiAJYWRkciA9IG1zZy0+YWRkci5kYXRhOwogCWxlbiA9IG1zZy0+bGVuLmRhdGE7CiAJYnVmID0gbXNnLT5kYXRhLmRhdGE7Ci0JaWYgKCBoZmEzODR4X2RydnJfZmxhc2hkbF93cml0ZShodywgYWRkciwgYnVmLCBsZW4pICkgeworCWlmIChoZmEzODR4X2RydnJfZmxhc2hkbF93cml0ZShodywgYWRkciwgYnVmLCBsZW4pKQogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9yZWZ1c2VkOwogCi0JfQogCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CiAKLQlEQkZFWElUOwogCXJldHVybiAwOwogfQogCkBAIC0xMDQxLDE1ICsxMDA2LDE0IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBwcmlzbTJtZ210X2F1dG9qb2luKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQloZmEzODR4X3QJCQkqaHcgPSB3bGFuZGV2LT5wcml2OwotCWludCAJCQlyZXN1bHQgPSAwOwotCXUxNgkJCXJlZzsKLQl1MTYJCQlwb3J0X3R5cGU7Ci0JcDgwMjExbXNnX2xueHJlcV9hdXRvam9pbl90CSptc2cgPSBtc2dwOwotCXA4MDIxMXBzdHJkX3QJCSpwc3RyOwotCXU4CQkJYnl0ZWJ1ZlsyNTZdOwotCWhmYTM4NHhfYnl0ZXN0cl90CSpwMmJ5dGVzdHIgPSAoaGZhMzg0eF9ieXRlc3RyX3QqKWJ5dGVidWY7Ci0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJaW50IHJlc3VsdCA9IDA7CisJdTE2IHJlZzsKKwl1MTYgcG9ydF90eXBlOworCXA4MDIxMW1zZ19sbnhyZXFfYXV0b2pvaW5fdCAqbXNnID0gbXNncDsKKwlwODAyMTFwc3RyZF90ICpwc3RyOworCXU4IGJ5dGVidWZbMjU2XTsKKwloZmEzODR4X2J5dGVzdHJfdCAqcDJieXRlc3RyID0gKGhmYTM4NHhfYnl0ZXN0cl90ICopIGJ5dGVidWY7CiAKIAl3bGFuZGV2LT5tYWNtb2RlID0gV0xBTl9NQUNNT0RFX05PTkU7CiAKQEAgLTEwNjQsMzkgKzEwMjgsMjEgQEAKIAloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX1RYUkFURUNOVEwsIDB4MDAwZik7CiAKIAkvKiBTZXQgdGhlIGF1dGggdHlwZSAqLwotCWlmICggbXNnLT5hdXRodHlwZS5kYXRhID09IFA4MDIxMUVOVU1fYXV0aGFsZ19zaGFyZWRrZXkgKSB7CisJaWYgKG1zZy0+YXV0aHR5cGUuZGF0YSA9PSBQODAyMTFFTlVNX2F1dGhhbGdfc2hhcmVka2V5KQogCQlyZWcgPSBIRkEzODR4X0NORkFVVEhFTlRJQ0FUSU9OX1NIQVJFREtFWTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcmVnID0gSEZBMzg0eF9DTkZBVVRIRU5USUNBVElPTl9PUEVOU1lTVEVNOwotCX0KKwogCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GQVVUSEVOVElDQVRJT04sIHJlZyk7CiAKIAkvKiBTZXQgdGhlIHNzaWQgKi8KIAltZW1zZXQoYnl0ZWJ1ZiwgMCwgMjU2KTsKLQlwc3RyID0gKHA4MDIxMXBzdHJkX3QqKSYobXNnLT5zc2lkLmRhdGEpOworCXBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSYobXNnLT5zc2lkLmRhdGEpOwogCXByaXNtMm1nbXRfcHN0cjJieXRlc3RyKHAyYnl0ZXN0ciwgcHN0cik7Ci0gICAgICAgIHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoCi0JCQlodywgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsCi0JCQlieXRlYnVmLCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRF9MRU4pOwotI2lmIDAKLQkvKiB3ZSBjYW4gdXNlIHRoZSBuZXctZmFuZ2xlZCBhdXRvLXVua25vd24gbW9kZSBpZiB0aGUgZmlybXdhcmUKLQkgICBpcyAxLjMuMyBvciBuZXdlciAqLwotCWlmIChIRkEzODR4X0ZJUk1BUkVfVkVSU0lPTihody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAotCQkJCSAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAotCQkJCSAgICBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpID49Ci0JICAgIEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTigxLDMsMykpIHsKLQkJLyogU2V0IHVwIHRoZSBJQlNTIG9wdGlvbnMgKi8KLQkJcmVnID0gIEhGQTM4NHhfQ1JFQVRFSUJTU19KT0lORVNTX0pPSU5DUkVBVEVJQlNTOwotCQloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NSRUFURUlCU1MsIHJlZyk7Ci0KLQkJLyogU2V0IHRoZSBQb3J0VHlwZSAqLwotCQlwb3J0X3R5cGUgPSBIRkEzODR4X1BPUlRUWVBFX0lCU1M7Ci0JfSBlbHNlIHsKLQkJcG9ydF90eXBlID0gSEZBMzg0eF9QT1JUVFlQRV9CU1M7Ci0JfQotI2Vsc2UKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9DTkZERVNJUkVEU1NJRCwKKwkJCQkJYnl0ZWJ1ZiwKKwkJCQkJSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSURfTEVOKTsKIAlwb3J0X3R5cGUgPSBIRkEzODR4X1BPUlRUWVBFX0JTUzsKLSNlbmRpZgogCS8qIFNldCB0aGUgUG9ydFR5cGUgKi8KIAloZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCBwb3J0X3R5cGUpOwogCkBAIC0xMTA3LDExICsxMDUzLDkgQEAKIAltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwogCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfd2xhbnNuaWZmCiAqCkBAIC0xMTMzLDM4ICsxMDc3LDM2IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIGludCBwcmlzbTJtZ210X3dsYW5zbmlmZih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApCiB7Ci0JaW50IAkJCXJlc3VsdCA9IDA7Ci0JcDgwMjExbXNnX2xueHJlcV93bGFuc25pZmZfdAkqbXNnID0gbXNncDsKKwlpbnQgcmVzdWx0ID0gMDsKKwlwODAyMTFtc2dfbG54cmVxX3dsYW5zbmlmZl90ICptc2cgPSBtc2dwOwogCi0JaGZhMzg0eF90CQkJKmh3ID0gd2xhbmRldi0+cHJpdjsKLQl1MTYJCQl3b3JkOwotCi0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CisJdTE2IHdvcmQ7CiAKIAltc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCXN3aXRjaCAobXNnLT5lbmFibGUuZGF0YSkKLQl7CisJc3dpdGNoIChtc2ctPmVuYWJsZS5kYXRhKSB7CiAJY2FzZSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOgogCQkvKiBDb25maXJtIHRoYXQgd2UncmUgaW4gbW9uaXRvciBtb2RlICovCi0JCWlmICggd2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUiApIHsKLQkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKKwkJaWYgKHdsYW5kZXYtPm5ldGRldi0+dHlwZSA9PSBBUlBIUkRfRVRIRVIpIHsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW52YWxpZF9wYXJhbWV0ZXJzOwogCQkJcmVzdWx0ID0gMDsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCQkvKiBEaXNhYmxlIG1vbml0b3IgbW9kZSAqLwogCQlyZXN1bHQgPSBoZmEzODR4X2NtZF9tb25pdG9yKGh3LCBIRkEzODR4X01PTklUT1JfRElTQUJMRSk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkiZmFpbGVkIHRvIGRpc2FibGUgbW9uaXRvciBtb2RlLCByZXN1bHQ9JWRcbiIsCi0JCQkJcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZmFpbGVkIHRvIGRpc2FibGUgbW9uaXRvciBtb2RlLCByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJCS8qIERpc2FibGUgcG9ydCAwICovCiAJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9kaXNhYmxlKGh3LCAwKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19ERUJVRygxLAotCQkJImZhaWxlZCB0byBkaXNhYmxlIHBvcnQgMCBhZnRlciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAotCQkJcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZmFpbGVkIHRvIGRpc2FibGUgcG9ydCAwIGFmdGVyIHNuaWZmaW5nLCByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJCS8qIENsZWFyIHRoZSBkcml2ZXIgc3RhdGUgKi8KQEAgLTExNzIsMzIgKzExMTQsMzQgQEAKIAogCQkvKiBSZXN0b3JlIHRoZSB3ZXBmbGFncyAqLwogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0JCQkJSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCi0JCQkJaHctPnByZXNuaWZmX3dlcGZsYWdzKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19ERUJVRygxLAotCQkJImZhaWxlZCB0byByZXN0b3JlIHdlcGZsYWdzPTB4JTA0eCwgcmVzdWx0PSVkXG4iLAotCQkJaHctPnByZXNuaWZmX3dlcGZsYWdzLAotCQkJcmVzdWx0KTsKKwkJCQkJCSAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCisJCQkJCQkgIGh3LT5wcmVzbmlmZl93ZXBmbGFncyk7CisJCWlmIChyZXN1bHQpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImZhaWxlZCB0byByZXN0b3JlIHdlcGZsYWdzPTB4JTA0eCwgcmVzdWx0PSVkXG4iLAorCQkJICAgICAgIGh3LT5wcmVzbmlmZl93ZXBmbGFncywgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAKIAkJLyogU2V0IHRoZSBwb3J0IHRvIGl0cyBwcmlvciB0eXBlIGFuZCBlbmFibGUgKGlmIG5lY2Vzc2FyeSkgKi8KLQkJaWYgKGh3LT5wcmVzbmlmZl9wb3J0X3R5cGUgIT0gMCApIHsKKwkJaWYgKGh3LT5wcmVzbmlmZl9wb3J0X3R5cGUgIT0gMCkgewogCQkJd29yZCA9IGh3LT5wcmVzbmlmZl9wb3J0X3R5cGU7CiAJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0JCQkJSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIHdvcmQpOwotCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkiZmFpbGVkIHRvIHJlc3RvcmUgcG9ydHR5cGUsIHJlc3VsdD0lZFxuIiwKLQkJCQlyZXN1bHQpOworCQkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsCisJCQkJCQkJICB3b3JkKTsKKwkJCWlmIChyZXN1bHQpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAiZmFpbGVkIHRvIHJlc3RvcmUgcG9ydHR5cGUsIHJlc3VsdD0lZFxuIiwKKwkJCQkgICAgICAgcmVzdWx0KTsKIAkJCQlnb3RvIGZhaWxlZDsKIAkJCX0KIAogCQkJLyogRW5hYmxlIHRoZSBwb3J0ICovCiAJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZW5hYmxlKGh3LCAwKTsKLQkJCWlmICggcmVzdWx0ICkgewotCQkJCVdMQU5fTE9HX0RFQlVHKDEsICJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgdG8gcHJlc25pZmYgc2V0dGluZywgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJaWYgKHJlc3VsdCkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgdG8gcHJlc25pZmYgc2V0dGluZywgcmVzdWx0PSVkXG4iLAorCQkJCSAgICAgICByZXN1bHQpOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQogCQl9IGVsc2UgewpAQCAtMTIwNSw0NiArMTE0OSw1MiBAQAogCiAJCX0KIAotCQlXTEFOX0xPR19JTkZPKCJtb25pdG9yIG1vZGUgZGlzYWJsZWRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJtb25pdG9yIG1vZGUgZGlzYWJsZWRcbiIpOwogCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCQlyZXN1bHQgPSAwOwogCQlnb3RvIGV4aXQ7CiAJCWJyZWFrOwogCWNhc2UgUDgwMjExRU5VTV90cnV0aF90cnVlOgogCQkvKiBEaXNhYmxlIHRoZSBwb3J0IChpZiBlbmFibGVkKSwgb25seSBjaGVjayBQb3J0IDAgKi8KLQkJaWYgKCBody0+cG9ydF9lbmFibGVkWzBdKSB7CisJCWlmIChody0+cG9ydF9lbmFibGVkWzBdKSB7CiAJCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgewogCQkJCS8qIFNhdmUgbWFjcG9ydCAwIHN0YXRlICovCiAJCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAogCQkJCQkJCQkgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAotCQkJCQkJCQkgICYoaHctPnByZXNuaWZmX3BvcnRfdHlwZSkpOwotCQkJCWlmICggcmVzdWx0ICkgewotCQkJCQlXTEFOX0xPR19ERUJVRygxLCJmYWlsZWQgdG8gcmVhZCBwb3J0dHlwZSwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCQkJCQkJCQkgICYoaHctPgorCQkJCQkJCQkgICAgcHJlc25pZmZfcG9ydF90eXBlKSk7CisJCQkJaWYgKHJlc3VsdCkgeworCQkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCQkgICAgICAgImZhaWxlZCB0byByZWFkIHBvcnR0eXBlLCByZXN1bHQ9JWRcbiIsCisJCQkJCSAgICAgICByZXN1bHQpOwogCQkJCQlnb3RvIGZhaWxlZDsKIAkJCQl9CiAJCQkJLyogU2F2ZSB0aGUgd2VwZmxhZ3Mgc3RhdGUgKi8KIAkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsCiAJCQkJCQkJCSAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCi0JCQkJCQkJCSAgJihody0+cHJlc25pZmZfd2VwZmxhZ3MpKTsKLQkJCQlpZiAoIHJlc3VsdCApIHsKLQkJCQkJV0xBTl9MT0dfREVCVUcoMSwiZmFpbGVkIHRvIHJlYWQgd2VwZmxhZ3MsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJCQkJCQkJICAmKGh3LT4KKwkJCQkJCQkJICAgIHByZXNuaWZmX3dlcGZsYWdzKSk7CisJCQkJaWYgKHJlc3VsdCkgeworCQkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCQkgICAgICAgImZhaWxlZCB0byByZWFkIHdlcGZsYWdzLCByZXN1bHQ9JWRcbiIsCisJCQkJCSAgICAgICByZXN1bHQpOwogCQkJCQlnb3RvIGZhaWxlZDsKIAkJCQl9CiAJCQkJaGZhMzg0eF9kcnZyX3N0b3AoaHcpOwogCQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zdGFydChodyk7Ci0JCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkJCQkgICAgICAgImZhaWxlZCB0byByZXN0YXJ0IHRoZSBjYXJkIGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAotCQkJCQkJICAgICAgIHJlc3VsdCk7CisJCQkJaWYgKHJlc3VsdCkgeworCQkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCQkgICAgICAgImZhaWxlZCB0byByZXN0YXJ0IHRoZSBjYXJkIGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJCQkgICAgICAgcmVzdWx0KTsKIAkJCQkJZ290byBmYWlsZWQ7CiAJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQkvKiBEaXNhYmxlIHRoZSBwb3J0ICovCiAJCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2Rpc2FibGUoaHcsIDApOwotCQkJCWlmICggcmVzdWx0ICkgewotCQkJCQlXTEFOX0xPR19ERUJVRygxLAotCQkJCQkJICAgICAgICJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgZm9yIHNuaWZmaW5nLCByZXN1bHQ9JWRcbiIsCi0JCQkJCQkgICAgICAgcmVzdWx0KTsKKwkJCQlpZiAocmVzdWx0KSB7CisJCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJCSAgICAgICAiZmFpbGVkIHRvIGVuYWJsZSBwb3J0IGZvciBzbmlmZmluZywgcmVzdWx0PSVkXG4iLAorCQkJCQkgICAgICAgcmVzdWx0KTsKIAkJCQkJZ290byBmYWlsZWQ7CiAJCQkJfQogCQkJfQpAQCAtMTI1NSwxNCArMTIwNSwxNCBAQAogCQkvKiBTZXQgdGhlIGNoYW5uZWwgd2Ugd2lzaCB0byBzbmlmZiAgKi8KIAkJd29yZCA9IG1zZy0+Y2hhbm5lbC5kYXRhOwogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0JCQkJCQkgIEhGQTM4NHhfUklEX0NORk9XTkNIQU5ORUwsIHdvcmQpOwotCQlody0+c25pZmZfY2hhbm5lbD13b3JkOworCQkJCQkJICBIRkEzODR4X1JJRF9DTkZPV05DSEFOTkVMLAorCQkJCQkJICB3b3JkKTsKKwkJaHctPnNuaWZmX2NoYW5uZWwgPSB3b3JkOwogCi0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkgICAgICAgImZhaWxlZCB0byBzZXQgY2hhbm5lbCAlZCwgcmVzdWx0PSVkXG4iLAotCQkJCQkgICAgICAgd29yZCwKLQkJCQkgICAgICAgcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZmFpbGVkIHRvIHNldCBjaGFubmVsICVkLCByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgd29yZCwgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAKQEAgLTEyNzEsMzkgKzEyMjEsNDYgQEAKIAkJCS8qIFNldCB0aGUgcG9ydCB0eXBlIHRvIHBJYnNzICovCiAJCQl3b3JkID0gSEZBMzg0eF9QT1JUVFlQRV9QU1VFRE9JQlNTOwogCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAotCQkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIHdvcmQpOwotCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IHBvcnR0eXBlICVkLCByZXN1bHQ9JWRcbiIsCi0JCQkJCSAgICAgICB3b3JkLAotCQkJCQkgICAgICAgcmVzdWx0KTsKKwkJCQkJCQkgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAorCQkJCQkJCSAgd29yZCk7CisJCQlpZiAocmVzdWx0KSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgImZhaWxlZCB0byBzZXQgcG9ydHR5cGUgJWQsIHJlc3VsdD0lZFxuIiwKKwkJCQkgICAgICAgd29yZCwgcmVzdWx0KTsKIAkJCQlnb3RvIGZhaWxlZDsKIAkJCX0KLQkJCWlmICgobXNnLT5rZWVwd2VwZmxhZ3Muc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgJiYgKG1zZy0+a2VlcHdlcGZsYWdzLmRhdGEgIT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgeworCQkJaWYgKChtc2ctPmtlZXB3ZXBmbGFncy5zdGF0dXMgPT0KKwkJCSAgICAgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQorCQkJICAgICYmIChtc2ctPmtlZXB3ZXBmbGFncy5kYXRhICE9CisJCQkJUDgwMjExRU5VTV90cnV0aF90cnVlKSkgewogCQkJCS8qIFNldCB0aGUgd2VwZmxhZ3MgZm9yIG5vIGRlY3J5cHRpb24gKi8KIAkJCQl3b3JkID0gSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1RYQ1JZUFQgfAotCQkJCQlIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfUlhDUllQVDsKLQkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLCB3b3JkKTsKKwkJCQkgICAgSEZBMzg0eF9XRVBGTEFHU19ESVNBQkxFX1JYQ1JZUFQ7CisJCQkJcmVzdWx0ID0KKwkJCQkgICAgaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LAorCQkJCQkJCSAgICAgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsCisJCQkJCQkJICAgICB3b3JkKTsKIAkJCX0KIAotCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IHdlcGZsYWdzPTB4JTA0eCwgcmVzdWx0PSVkXG4iLAotCQkJCQkgICAgICAgd29yZCwKLQkJCQkJICAgICAgIHJlc3VsdCk7CisJCQlpZiAocmVzdWx0KSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgImZhaWxlZCB0byBzZXQgd2VwZmxhZ3M9MHglMDR4LCByZXN1bHQ9JWRcbiIsCisJCQkJICAgICAgIHdvcmQsIHJlc3VsdCk7CiAJCQkJZ290byBmYWlsZWQ7CiAJCQl9CiAJCX0KIAogCQkvKiBEbyB3ZSB3YW50IHRvIHN0cmlwIHRoZSBGQ1MgaW4gbW9uaXRvciBtb2RlPyAqLwotCQlpZiAoKG1zZy0+c3RyaXBmY3Muc3RhdHVzID09IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykgJiYgKG1zZy0+c3RyaXBmY3MuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpKSB7CisJCWlmICgobXNnLT5zdHJpcGZjcy5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKQorCQkgICAgJiYgKG1zZy0+c3RyaXBmY3MuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpKSB7CiAJCQlody0+c25pZmZfZmNzID0gMDsKIAkJfSBlbHNlIHsKIAkJCWh3LT5zbmlmZl9mY3MgPSAxOwogCQl9CiAKIAkJLyogRG8gd2Ugd2FudCB0byB0cnVuY2F0ZSB0aGUgcGFja2V0cz8gKi8KLQkJaWYgKG1zZy0+cGFja2V0X3RydW5jLnN0YXR1cyA9PSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2spIHsKKwkJaWYgKG1zZy0+cGFja2V0X3RydW5jLnN0YXR1cyA9PQorCQkgICAgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSB7CiAJCQlody0+c25pZmZfdHJ1bmNhdGUgPSBtc2ctPnBhY2tldF90cnVuYy5kYXRhOwogCQl9IGVsc2UgewogCQkJaHctPnNuaWZmX3RydW5jYXRlID0gMDsKQEAgLTEzMTEsMzEgKzEyNjgsMzUgQEAKIAogCQkvKiBFbmFibGUgdGhlIHBvcnQgKi8KIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2VuYWJsZShodywgMCk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCSJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgZm9yIHNuaWZmaW5nLCByZXN1bHQ9JWRcbiIsCi0JCQlyZXN1bHQpOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJmYWlsZWQgdG8gZW5hYmxlIHBvcnQgZm9yIHNuaWZmaW5nLCByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJCS8qIEVuYWJsZSBtb25pdG9yIG1vZGUgKi8KIAkJcmVzdWx0ID0gaGZhMzg0eF9jbWRfbW9uaXRvcihodywgSEZBMzg0eF9NT05JVE9SX0VOQUJMRSk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCSJmYWlsZWQgdG8gZW5hYmxlIG1vbml0b3IgbW9kZSwgcmVzdWx0PSVkXG4iLAotCQkJcmVzdWx0KTsKKwkJaWYgKHJlc3VsdCkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICAgICAiZmFpbGVkIHRvIGVuYWJsZSBtb25pdG9yIG1vZGUsIHJlc3VsdD0lZFxuIiwKKwkJCSAgICAgICByZXN1bHQpOwogCQkJZ290byBmYWlsZWQ7CiAJCX0KIAotCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikgewotCQkJV0xBTl9MT0dfSU5GTygibW9uaXRvciBtb2RlIGVuYWJsZWRcbiIpOwotCQl9CisJCWlmICh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAibW9uaXRvciBtb2RlIGVuYWJsZWRcbiIpOwogCiAJCS8qIFNldCB0aGUgZHJpdmVyIHN0YXRlICovCiAJCS8qIERvIHdlIHdhbnQgdGhlIHByaXNtMiBoZWFkZXI/ICovCi0JCWlmICgobXNnLT5wcmlzbWhlYWRlci5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSAmJiAobXNnLT5wcmlzbWhlYWRlci5kYXRhID09IFA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSkpIHsKKwkJaWYgKChtc2ctPnByaXNtaGVhZGVyLnN0YXR1cyA9PQorCQkgICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKKwkJICAgICYmIChtc2ctPnByaXNtaGVhZGVyLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgewogCQkJaHctPnNuaWZmaGRyID0gMDsKIAkJCXdsYW5kZXYtPm5ldGRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUFJJU007Ci0JCX0gZWxzZSBpZiAoKG1zZy0+d2xhbmhlYWRlci5zdGF0dXMgPT0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rKSAmJiAobXNnLT53bGFuaGVhZGVyLmRhdGEgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKSkgeworCQl9IGVsc2UKKwkJICAgIGlmICgobXNnLT53bGFuaGVhZGVyLnN0YXR1cyA9PQorCQkJIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vaykKKwkJCSYmIChtc2ctPndsYW5oZWFkZXIuZGF0YSA9PSBQODAyMTFFTlVNX3RydXRoX3RydWUpKSB7CiAJCQlody0+c25pZmZoZHIgPSAxOwogCQkJd2xhbmRldi0+bmV0ZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMV9QUklTTTsKIAkJfSBlbHNlIHsKQEAgLTEzNTcsNyArMTMxOCw1IEBACiAJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfcmVmdXNlZDsKIAlyZXN1bHQgPSAwOwogZXhpdDoKLQotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaAppbmRleCBjYWY4MDhkLi4wN2VlY2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5oCkBAIC02MCw0MyArNjAsMTYgQEAKICNpZm5kZWYgX1BSSVNNMk1HTVRfSAogI2RlZmluZSBfUFJJU00yTUdNVF9ICiAKK2V4dGVybiBpbnQgcHJpc20yX3Jlc2V0X2hvbGR0aW1lOworZXh0ZXJuIGludCBwcmlzbTJfcmVzZXRfc2V0dGxldGltZTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tLS0tIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit1MzIgcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MzIgaWZzdGF0ZSk7CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLS0tLSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0tLS0gVHlwZXMgYW5kIHRoZWlyIHJlbGF0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tLS0tIFN0YXRpYyB2YXJpYWJsZSBleHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLWV4dGVybiBpbnQJcHJpc20yX2RlYnVnOwotZXh0ZXJuIGludCAgICAgIHByaXNtMl9yZXNldF9ob2xkdGltZTsKLWV4dGVybiBpbnQgICAgICBwcmlzbTJfcmVzZXRfc2V0dGxldGltZTsKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLSBGdW5jdGlvbiBEZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotdTMyCi1wcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUzMiBpZnN0YXRlKTsKLQotdm9pZAotcHJpc20yc3RhX2V2X2R0aW0od2xhbmRldmljZV90ICp3bGFuZGV2KTsKLXZvaWQKLXByaXNtMnN0YV9ldl9pbmZkcm9wKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Ci12b2lkCi1wcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKLXZvaWQKLXByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBzdGF0dXMpOwotdm9pZAotcHJpc20yc3RhX2V2X3R4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IHN0YXR1cyk7Ci12b2lkCi1wcmlzbTJzdGFfZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXZvaWQKLXByaXNtMnN0YV9ldl9hbGxvYyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwordm9pZCBwcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3ZvaWQgcHJpc20yc3RhX2V2X3R4ZXhjKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IHN0YXR1cyk7Cit2b2lkIHByaXNtMnN0YV9ldl90eCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBzdGF0dXMpOwordm9pZCBwcmlzbTJzdGFfZXZfcngod2xhbmRldmljZV90ICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgcHJpc20yc3RhX2V2X2FsbG9jKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CiAKIGludCBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKIGludCBwcmlzbTJtZ210X3NjYW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKQEAgLTEyMiwzNCArOTUsMTYgQEAKIHZvaWQgcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOwogdm9pZCBwcmlzbTJtZ210X2J5dGVzdHIycHN0cihoZmEzODR4X2J5dGVzdHJfdCAqYnl0ZXN0ciwgcDgwMjExcHN0cmRfdCAqcHN0cik7CiAKLS8qIGludGVnZXIgY29udmVyc2lvbiBmdW5jdGlvbnMgKi8KLXZvaWQgcHJpc20ybWdtdF9wcmlzbTJpbnQycDgwMjExaW50KHUxNiAqcHJpc20yaW50LCB1MzIgKndsYW5pbnQpOwotdm9pZCBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQodTE2ICpwcmlzbTJpbnQsIHUzMiAqd2xhbmludCk7Ci0KLS8qIGVudW1lcmF0ZWQgaW50ZWdlciBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqLwotdm9pZCBwcmlzbTJtZ210X3ByaXNtMmVudW0ycDgwMjExZW51bSh1MTYgKnByaXNtMmVudW0sIHUzMiAqd2xhbmVudW0sIHUxNiByaWQpOwotdm9pZCBwcmlzbTJtZ210X3A4MDIxMWVudW0ycHJpc20yZW51bSh1MTYgKnByaXNtMmVudW0sIHUzMiAqd2xhbmVudW0sIHUxNiByaWQpOwotCi0vKiBmdW5jdGlvbnMgdG8gY29udmVydCBhIGJpdCBhcmVhIHRvL2Zyb20gYW4gT3BlcmF0aW9uYWwgUmF0ZSBTZXQgKi8KLXZvaWQgcHJpc20ybWdtdF9nZXRfb3ByYXRlc2V0KHUxNiAqcmF0ZSwgcDgwMjExcHN0cmRfdCAqcHN0cik7Ci12b2lkIHByaXNtMm1nbXRfc2V0X29wcmF0ZXNldCh1MTYgKnJhdGUsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOwotCiAvKiBmdW5jdGlvbnMgdG8gY29udmVydCBHcm91cCBBZGRyZXNzZXMgKi8KLXZvaWQgcHJpc20ybWdtdF9nZXRfZ3JwYWRkcih1MzIgZGlkLAotCXA4MDIxMXBzdHJkX3QgKnBzdHIsIGhmYTM4NHhfdCAqcHJpdiApOwordm9pZCBwcmlzbTJtZ210X2dldF9ncnBhZGRyKHUzMiBkaWQsIHA4MDIxMXBzdHJkX3QgKnBzdHIsIGhmYTM4NHhfdCAqcHJpdik7CiBpbnQgcHJpc20ybWdtdF9zZXRfZ3JwYWRkcih1MzIgZGlkLAotCXU4ICpwcmlzbTJidWYsIHA4MDIxMXBzdHJkX3QgKnBzdHIsIGhmYTM4NHhfdCAqcHJpdiApOwotaW50IHByaXNtMm1nbXRfZ2V0X2dycGFkZHJfaW5kZXgoIHUzMiBkaWQgKTsKKwkJCSAgIHU4ICpwcmlzbTJidWYsIHA4MDIxMXBzdHJkX3QgKnBzdHIsCisJCQkgICBoZmEzODR4X3QgKnByaXYpOworaW50IHByaXNtMm1nbXRfZ2V0X2dycGFkZHJfaW5kZXgodTMyIGRpZCk7CiAKIHZvaWQgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKIAogdm9pZCBwcmlzbTJzdGFfY29tbXNxdWFsX2RlZmVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7CiB2b2lkIHByaXNtMnN0YV9jb21tc3F1YWxfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tIElubGluZSBGdW5jdGlvbiBEZWZpbml0aW9ucyAoaWYgc3VwcG9ydGVkKSAtLS0tLS0tLS0tLS0tLSovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtaWIuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCmluZGV4IDUzOWM0NDcuLjVhNmJhODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jCkBAIC01MCwxMiArNTAsNyBAQAogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZwotCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgotCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTYzLDEzICs1OCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBQcm9qZWN0IEluY2x1ZGVzICovCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKICNpbmNsdWRlICJwODAyMTF0eXBlcy5oIgogI2luY2x1ZGUgInA4MDIxMWhkci5oIgpAQCAtODIsMTk2ICs3NSwxNjkgQEAKICNpbmNsdWRlICJoZmEzODR4LmgiCiAjaW5jbHVkZSAicHJpc20ybWdtdC5oIgogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgQ29uc3RhbnRzICovCisjZGVmaW5lIE1JQl9UTVBfTUFYTEVOICAgIDIwMAkvKiBNYXggbGVuZ3RoIG9mIFJJRCByZWNvcmQgKGluIGJ5dGVzKS4gKi8KIAotI2RlZmluZSBNSUJfVE1QX01BWExFTiAgICAyMDAgICAgLyogTWF4IGxlbmd0aCBvZiBSSUQgcmVjb3JkIChpbiBieXRlcykuICovCisjZGVmaW5lICBGX1NUQSAgICAgICAgMHgxCS8qIE1JQiBpcyBzdXBwb3J0ZWQgb24gc3RhdGlvbnMuICovCisjZGVmaW5lICBGX1JFQUQgICAgICAgMHgyCS8qIE1JQiBtYXkgYmUgcmVhZC4gKi8KKyNkZWZpbmUgIEZfV1JJVEUgICAgICAweDQJLyogTUlCIG1heSBiZSB3cml0dGVuLiAqLwogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgVHlwZXMgKi8KLQotI2RlZmluZSAgRl9TVEEgICAgICAgIDB4MSAgICAgICAgLyogTUlCIGlzIHN1cHBvcnRlZCBvbiBzdGF0aW9ucy4gKi8KLSNkZWZpbmUgIEZfUkVBRCAgICAgICAweDIgICAgICAgIC8qIE1JQiBtYXkgYmUgcmVhZC4gKi8KLSNkZWZpbmUgIEZfV1JJVEUgICAgICAweDQgICAgICAgIC8qIE1JQiBtYXkgYmUgd3JpdHRlbi4gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgbWlicmVjCi17Ci0gICAgdTMyICAgZGlkOwotICAgIHUxNiAgIGZsYWc7Ci0gICAgdTE2ICAgcGFybTE7Ci0gICAgdTE2ICAgcGFybTI7Ci0gICAgdTE2ICAgcGFybTM7Ci0gICAgaW50ICAgICAgKCpmdW5jKShzdHJ1Y3QgbWlicmVjICAgICAgICAgICAgICAgICptaWIsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotICAgICAgICAgICAgICAgICAgICAgd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLSAgICAgICAgICAgICAgICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotICAgICAgICAgICAgICAgICAgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7Cit0eXBlZGVmIHN0cnVjdCBtaWJyZWMgeworCXUzMiBkaWQ7CisJdTE2IGZsYWc7CisJdTE2IHBhcm0xOworCXUxNiBwYXJtMjsKKwl1MTYgcGFybTM7CisJaW50ICgqZnVuYykgKHN0cnVjdCBtaWJyZWMgKm1pYiwKKwkJICAgICBpbnQgaXNnZXQsCisJCSAgICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkgICAgIGhmYTM4NHhfdCAqaHcsCisJCSAgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpOwogfSBtaWJyZWNfdDsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cihtaWJyZWNfdCAqbWliLAorCQkJCSAgIGludCBpc2dldCwKKwkJCQkgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgaGZhMzg0eF90ICpodywKKwkJCQkgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkgICB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cigKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKK3N0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMihtaWJyZWNfdCAqbWliLAorCQkJICAgIGludCBpc2dldCwKKwkJCSAgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkgICAgaGZhMzg0eF90ICpodywKKwkJCSAgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywgdm9pZCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMigKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKK3N0YXRpYyBpbnQgcHJpc20ybWliX2ZsYWcobWlicmVjX3QgKm1pYiwKKwkJCSAgaW50IGlzZ2V0LAorCQkJICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkgIGhmYTM4NHhfdCAqaHcsCisJCQkgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZygKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKK3N0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkobWlicmVjX3QgKm1pYiwKKwkJCQkgICBpbnQgaXNnZXQsCisJCQkJICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgIGhmYTM4NHhfdCAqaHcsCisJCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgdm9pZCAqZGF0YSk7CiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CitzdGF0aWMgaW50IHByaXNtMm1pYl9wcml2YWN5aW52b2tlZChtaWJyZWNfdCAqbWliLAorCQkJCSAgICBpbnQgaXNnZXQsCisJCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgaGZhMzg0eF90ICpodywKKwkJCQkgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgIHZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9wcml2YWN5aW52b2tlZCgKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKK3N0YXRpYyBpbnQgcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZChtaWJyZWNfdCAqbWliLAorCQkJCQlpbnQgaXNnZXQsCisJCQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkJaGZhMzg0eF90ICpodywKKwkJCQkJcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJCXZvaWQgKmRhdGEpOwogCi1zdGF0aWMgaW50IHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSk7CitzdGF0aWMgaW50IHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkKG1pYnJlY190ICptaWIsCisJCQkJCSAgICBpbnQgaXNnZXQsCisJCQkJCSAgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJCSAgICBoZmEzODR4X3QgKmh3LAorCQkJCQkgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJCSAgICB2b2lkICpkYXRhKTsKIAotc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCgKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKLQotc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdigKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKTsKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIFN0YXRpYyBEZWZpbml0aW9ucyAqLworc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdihtaWJyZWNfdCAqbWliLAorCQkJICBpbnQgaXNnZXQsCisJCQkgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCSAgaGZhMzg0eF90ICpodywKKwkJCSAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpOwogCiBzdGF0aWMgbWlicmVjX3QgbWlidGFiW10gPSB7CiAKLSAgICAvKiBkb3QxMXNtdCBNSUIncyAqLwotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkwLAotICAgICAgICAgIEZfU1RBIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMCwgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxLAotICAgICAgICAgIEZfU1RBIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMSwgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkyLAotICAgICAgICAgIEZfU1RBIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMiwgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkzLAotICAgICAgICAgIEZfU1RBIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMywgMCwgMCwKLSAgICAgICAgICBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleSB9LAotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCi0gICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAotICAgICAgICAgIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLCBIRkEzODR4X1dFUEZMQUdTX1BSSVZJTlZPS0VELCAwLAotICAgICAgICAgIHByaXNtMm1pYl9wcml2YWN5aW52b2tlZCB9LAotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExV0VQRGVmYXVsdEtleUlELAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZSUQsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAotICAgIHsgRElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExRXhjbHVkZVVuZW5jcnlwdGVkLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywgSEZBMzg0eF9XRVBGTEFHU19FWENMVURFLCAwLAotICAgICAgICAgIHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQgfSwKKwkvKiBkb3QxMXNtdCBNSUIncyAqLworCXtESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTAsCisJIEZfU1RBIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTAsIDAsIDAsCisJIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5fSwKKwl7RElEbWliX2RvdDExc210X2RvdDExV0VQRGVmYXVsdEtleXNUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXkxLAorCSBGX1NUQSB8IEZfV1JJVEUsCisJIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVkxLCAwLCAwLAorCSBwcmlzbTJtaWJfd2VwZGVmYXVsdGtleX0sCisJe0RJRG1pYl9kb3QxMXNtdF9kb3QxMVdFUERlZmF1bHRLZXlzVGFibGVfZG90MTFXRVBEZWZhdWx0S2V5MiwKKwkgRl9TVEEgfCBGX1dSSVRFLAorCSBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZMiwgMCwgMCwKKwkgcHJpc20ybWliX3dlcGRlZmF1bHRrZXl9LAorCXtESURtaWJfZG90MTFzbXRfZG90MTFXRVBEZWZhdWx0S2V5c1RhYmxlX2RvdDExV0VQRGVmYXVsdEtleTMsCisJIEZfU1RBIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GV0VQREVGQVVMVEtFWTMsIDAsIDAsCisJIHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5fSwKKwl7RElEbWliX2RvdDExc210X2RvdDExUHJpdmFjeVRhYmxlX2RvdDExUHJpdmFjeUludm9rZWQsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsIEhGQTM4NHhfV0VQRkxBR1NfUFJJVklOVk9LRUQsIDAsCisJIHByaXNtMm1pYl9wcml2YWN5aW52b2tlZH0sCisJe0RJRG1pYl9kb3QxMXNtdF9kb3QxMVByaXZhY3lUYWJsZV9kb3QxMVdFUERlZmF1bHRLZXlJRCwKKwkgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorCSBIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZSUQsIDAsIDAsCisJIHByaXNtMm1pYl91aW50MzJ9LAorCXtESURtaWJfZG90MTFzbXRfZG90MTFQcml2YWN5VGFibGVfZG90MTFFeGNsdWRlVW5lbmNyeXB0ZWQsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GV0VQRkxBR1MsIEhGQTM4NHhfV0VQRkxBR1NfRVhDTFVERSwgMCwKKwkgcHJpc20ybWliX2V4Y2x1ZGV1bmVuY3J5cHRlZH0sCiAKLSAgICAvKiBkb3QxMW1hYyBNSUIncyAqLworCS8qIGRvdDExbWFjIE1JQidzICovCiAKLSAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTUFDQWRkcmVzcywKLSAgICAgICAgICBGX1NUQSB8IEZfUkVBRCB8IEZfV1JJVEUsCi0gICAgICAgICAgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUiwgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUl9MRU4sIDAsCi0gICAgICAgICAgcHJpc20ybWliX2J5dGVhcmVhMnBzdHIgfSwKLSAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9SVFNUSFJFU0gsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAotICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQsCi0gICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCi0gICAgICAgICAgSEZBMzg0eF9SSURfU0hPUlRSRVRSWUxJTUlULCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKLSAgICB7IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTG9uZ1JldHJ5TGltaXQsCi0gICAgICAgICAgRl9TVEEgfCBGX1JFQUQsCi0gICAgICAgICAgSEZBMzg0eF9SSURfTE9OR1JFVFJZTElNSVQsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAotICAgIHsgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFGcmFnbWVudGF0aW9uVGhyZXNob2xkLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9GUkFHVEhSRVNILCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl9mcmFnbWVudGF0aW9udGhyZXNob2xkIH0sCi0gICAgeyBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFRyYW5zbWl0TVNEVUxpZmV0aW1lLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAotICAgICAgICAgIEhGQTM4NHhfUklEX01BWFRYTElGRVRJTUUsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorCXtESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1BQ0FkZHJlc3MsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUiwgSEZBMzg0eF9SSURfQ05GT1dOTUFDQUREUl9MRU4sIDAsCisJIHByaXNtMm1pYl9ieXRlYXJlYTJwc3RyfSwKKwl7RElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFSVFNUaHJlc2hvbGQsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfUlRTVEhSRVNILCAwLCAwLAorCSBwcmlzbTJtaWJfdWludDMyfSwKKwl7RElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQsCisJIEZfU1RBIHwgRl9SRUFELAorCSBIRkEzODR4X1JJRF9TSE9SVFJFVFJZTElNSVQsIDAsIDAsCisJIHByaXNtMm1pYl91aW50MzJ9LAorCXtESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0LAorCSBGX1NUQSB8IEZfUkVBRCwKKwkgSEZBMzg0eF9SSURfTE9OR1JFVFJZTElNSVQsIDAsIDAsCisJIHByaXNtMm1pYl91aW50MzJ9LAorCXtESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUZyYWdtZW50YXRpb25UaHJlc2hvbGQsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfRlJBR1RIUkVTSCwgMCwgMCwKKwkgcHJpc20ybWliX2ZyYWdtZW50YXRpb250aHJlc2hvbGR9LAorCXtESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1heFRyYW5zbWl0TVNEVUxpZmV0aW1lLAorCSBGX1NUQSB8IEZfUkVBRCwKKwkgSEZBMzg0eF9SSURfTUFYVFhMSUZFVElNRSwgMCwgMCwKKwkgcHJpc20ybWliX3VpbnQzMn0sCiAKLSAgICAvKiBkb3QxMXBoeSBNSUIncyAqLworCS8qIGRvdDExcGh5IE1JQidzICovCiAKLSAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAotICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMLCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKLSAgICB7IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWwsCi0gICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAotICAgICAgICAgIEhGQTM4NHhfUklEX1RYUE9XRVJNQVgsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorCXtESURtaWJfZG90MTFwaHlfZG90MTFQaHlEU1NTVGFibGVfZG90MTFDdXJyZW50Q2hhbm5lbCwKKwkgRl9TVEEgfCBGX1JFQUQsCisJIEhGQTM4NHhfUklEX0NVUlJFTlRDSEFOTkVMLCAwLCAwLAorCSBwcmlzbTJtaWJfdWludDMyfSwKKwl7RElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbCwKKwkgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorCSBIRkEzODR4X1JJRF9UWFBPV0VSTUFYLCAwLCAwLAorCSBwcmlzbTJtaWJfdWludDMyfSwKIAotICAgIC8qIHAyU3RhdGljIE1JQidzICovCisJLyogcDJTdGF0aWMgTUlCJ3MgKi8KIAotICAgIHsgRElEbWliX3AyX3AyU3RhdGljX3AyQ25mUG9ydFR5cGUsCi0gICAgICAgICAgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAotICAgICAgICAgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl91aW50MzIgfSwKKwl7RElEbWliX3AyX3AyU3RhdGljX3AyQ25mUG9ydFR5cGUsCisJIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKKwkgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsIDAsIDAsCisJIHByaXNtMm1pYl91aW50MzJ9LAogCi0gICAgLyogcDJNQUMgTUlCJ3MgKi8KKwkvKiBwMk1BQyBNSUIncyAqLwogCi0gICAgeyBESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFELAotICAgICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRUWFJBVEUsIDAsIDAsCi0gICAgICAgICAgcHJpc20ybWliX3VpbnQzMiB9LAorCXtESURtaWJfcDJfcDJNQUNfcDJDdXJyZW50VHhSYXRlLAorCSBGX1NUQSB8IEZfUkVBRCwKKwkgSEZBMzg0eF9SSURfQ1VSUkVOVFRYUkFURSwgMCwgMCwKKwkgcHJpc20ybWliX3VpbnQzMn0sCiAKLSAgICAvKiBBbmQgZmluYWxseSwgbG54IG1pYnMgKi8KLSAgICB7IERJRG1pYl9sbnhfbG54Q29uZmlnVGFibGVfbG54UlNOQUlFLAotICAgICAgICAgIEZfU1RBIHwgRl9SRUFEIHwgRl9XUklURSwKLSAgICAgICAgICBIRkEzODR4X1JJRF9DTkZXUEFEQVRBLCAwLCAwLAotICAgICAgICAgIHByaXNtMm1pYl9wcml2IH0sCi0gICAgeyAwLCAwLCAwLCAwLCAwLCBOVUxMfX07Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBGdW5jdGlvbiBEZWZpbml0aW9ucyAqLworCS8qIEFuZCBmaW5hbGx5LCBsbnggbWlicyAqLworCXtESURtaWJfbG54X2xueENvbmZpZ1RhYmxlX2xueFJTTkFJRSwKKwkgRl9TVEEgfCBGX1JFQUQgfCBGX1dSSVRFLAorCSBIRkEzODR4X1JJRF9DTkZXUEFEQVRBLCAwLCAwLAorCSBwcmlzbTJtaWJfcHJpdn0sCisJezAsIDAsIDAsIDAsIDAsIE5VTEx9Cit9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0CkBAIC0yOTUsMzIgKzI2MSwzMCBAQAogCiBpbnQgcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCkKIHsKLQloZmEzODR4X3QJCSpodyA9IHdsYW5kZXYtPnByaXY7Ci0JaW50CQkJcmVzdWx0LCBpc2dldDsKLQltaWJyZWNfdAkJKm1pYjsKKwloZmEzODR4X3QgKmh3ID0gd2xhbmRldi0+cHJpdjsKKwlpbnQgcmVzdWx0LCBpc2dldDsKKwltaWJyZWNfdCAqbWliOwogCi0JdTE2CQkJd2hpY2g7CisJdTE2IHdoaWNoOwogCi0JcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90CSptc2cgPSBtc2dwOwotCXA4MDIxMWl0ZW1kX3QJCQkqbWliaXRlbTsKLQotCURCRkVOVEVSOworCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnID0gbXNncDsKKwlwODAyMTFpdGVtZF90ICptaWJpdGVtOwogCiAJbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAltc2ctPnJlc3VsdGNvZGUuZGF0YSA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCiAJLyoKLQkqKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhbiBBY2Nlc3MgUG9pbnQgb3IgYSBzdGF0aW9uLgotCSovCisJICoqIERldGVybWluZSBpZiB0aGlzIGlzIGFuIEFjY2VzcyBQb2ludCBvciBhIHN0YXRpb24uCisJICovCiAKIAl3aGljaCA9IEZfU1RBOwogCiAJLyoKLQkqKiBGaW5kIHRoZSBNSUIgaW4gdGhlIE1JQiB0YWJsZS4gIE5vdGUgdGhhdCBhIE1JQiBtYXkgYmUgaW4gdGhlCi0JKiogdGFibGUgdHdpY2UuLi5vbmNlIGZvciBhbiBBUCBhbmQgb25jZSBmb3IgYSBzdGF0aW9uLiAgTWFrZSBzdXJlCi0JKiogdG8gZ2V0IHRoZSBjb3JyZWN0IG9uZS4gIE5vdGUgdGhhdCBESUQ9MCBtYXJrcyB0aGUgZW5kIG9mIHRoZQotCSoqIE1JQiB0YWJsZS4KLQkqLworCSAqKiBGaW5kIHRoZSBNSUIgaW4gdGhlIE1JQiB0YWJsZS4gIE5vdGUgdGhhdCBhIE1JQiBtYXkgYmUgaW4gdGhlCisJICoqIHRhYmxlIHR3aWNlLi4ub25jZSBmb3IgYW4gQVAgYW5kIG9uY2UgZm9yIGEgc3RhdGlvbi4gIE1ha2Ugc3VyZQorCSAqKiB0byBnZXQgdGhlIGNvcnJlY3Qgb25lLiAgTm90ZSB0aGF0IERJRD0wIG1hcmtzIHRoZSBlbmQgb2YgdGhlCisJICoqIE1JQiB0YWJsZS4KKwkgKi8KIAogCW1pYml0ZW0gPSAocDgwMjExaXRlbWRfdCAqKSBtc2ctPm1pYmF0dHJpYnV0ZS5kYXRhOwogCkBAIC0zMzQsNTggKzI5OCw1NSBAQAogCX0KIAogCS8qCi0JKiogRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSAibWliZ2V0IiBvciBhICJtaWJzZXQiLiAgSWYgdGhpcyBpcyBhCi0JKiogIm1pYmdldCIsIHRoZW4gbWFrZSBzdXJlIHRoYXQgdGhlIE1JQiBtYXkgYmUgcmVhZC4gIE90aGVyd2lzZSwKLQkqKiB0aGlzIGlzIGEgIm1pYnNldCIgc28gbWFrZSBtYWtlIHN1cmUgdGhhdCB0aGUgTUlCIG1heSBiZSB3cml0dGVuLgotCSovCisJICoqIERldGVybWluZSBpZiB0aGlzIGlzIGEgIm1pYmdldCIgb3IgYSAibWlic2V0Ii4gIElmIHRoaXMgaXMgYQorCSAqKiAibWliZ2V0IiwgdGhlbiBtYWtlIHN1cmUgdGhhdCB0aGUgTUlCIG1heSBiZSByZWFkLiAgT3RoZXJ3aXNlLAorCSAqKiB0aGlzIGlzIGEgIm1pYnNldCIgc28gbWFrZSBtYWtlIHN1cmUgdGhhdCB0aGUgTUlCIG1heSBiZSB3cml0dGVuLgorCSAqLwogCiAJaXNnZXQgPSAobXNnLT5tc2djb2RlID09IERJRG1zZ19kb3QxMXJlcV9taWJnZXQpOwogCiAJaWYgKGlzZ2V0KSB7CiAJCWlmICghKG1pYi0+ZmxhZyAmIEZfUkVBRCkpIHsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9nZXRfd3JpdGVvbmx5X21pYjsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9nZXRfd3JpdGVvbmx5X21pYjsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0gZWxzZSB7CiAJCWlmICghKG1pYi0+ZmxhZyAmIEZfV1JJVEUpKSB7CiAJCQltc2ctPnJlc3VsdGNvZGUuZGF0YSA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2NhbnRfc2V0X3JlYWRvbmx5X21pYjsKKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfY2FudF9zZXRfcmVhZG9ubHlfbWliOwogCQkJZ290byBkb25lOwogCQl9CiAJfQogCiAJLyoKLQkqKiBFeGVjdXRlIHRoZSBNSUIgZnVuY3Rpb24uICBJZiB0aGluZ3Mgd29ya2VkIG9rYXksIHRoZW4gbWFrZQotCSoqIHN1cmUgdGhhdCB0aGUgTUlCIGZ1bmN0aW9uIGFsc28gd29ya2VkIG9rYXkuICBJZiBzbywgYW5kIHRoaXMKLQkqKiBpcyBhICJtaWJnZXQiLCB0aGVuIHRoZSBzdGF0dXMgdmFsdWUgbXVzdCBiZSBzZXQgZm9yIGJvdGggdGhlCi0JKiogIm1pYmF0dHJpYnV0ZSIgcGFyYW1ldGVyIGFuZCB0aGUgbWliIGl0ZW0gd2l0aGluIHRoZSBkYXRhCi0JKiogcG9ydGlvbiBvZiB0aGUgIm1pYmF0dHJpYnV0ZSIuCi0JKi8KKwkgKiogRXhlY3V0ZSB0aGUgTUlCIGZ1bmN0aW9uLiAgSWYgdGhpbmdzIHdvcmtlZCBva2F5LCB0aGVuIG1ha2UKKwkgKiogc3VyZSB0aGF0IHRoZSBNSUIgZnVuY3Rpb24gYWxzbyB3b3JrZWQgb2theS4gIElmIHNvLCBhbmQgdGhpcworCSAqKiBpcyBhICJtaWJnZXQiLCB0aGVuIHRoZSBzdGF0dXMgdmFsdWUgbXVzdCBiZSBzZXQgZm9yIGJvdGggdGhlCisJICoqICJtaWJhdHRyaWJ1dGUiIHBhcmFtZXRlciBhbmQgdGhlIG1pYiBpdGVtIHdpdGhpbiB0aGUgZGF0YQorCSAqKiBwb3J0aW9uIG9mIHRoZSAibWliYXR0cmlidXRlIi4KKwkgKi8KIAotCXJlc3VsdCA9IG1pYi0+ZnVuYyhtaWIsIGlzZ2V0LCB3bGFuZGV2LCBodywgbXNnLAotCQkJICAgKHZvaWQgKikgbWliaXRlbS0+ZGF0YSk7CisJcmVzdWx0ID0gbWliLT5mdW5jKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csICh2b2lkICopbWliaXRlbS0+ZGF0YSk7CiAKIAlpZiAobXNnLT5yZXN1bHRjb2RlLmRhdGEgPT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpIHsKIAkJaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCQlXTEFOX0xPR19ERUJVRygxLCAiZ2V0L3NldCBmYWlsdXJlLCByZXN1bHQ9JWRcbiIsCi0JCQkJCXJlc3VsdCk7CisJCQlwcl9kZWJ1ZygiZ2V0L3NldCBmYWlsdXJlLCByZXN1bHQ9JWRcbiIsCisJCQkgICAgICAgcmVzdWx0KTsKIAkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KLQkJCQkgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCX0gZWxzZSB7CiAJCQlpZiAoaXNnZXQpIHsKIAkJCQltc2ctPm1pYmF0dHJpYnV0ZS5zdGF0dXMgPQotCQkJCQlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQkJICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAkJCQltaWJpdGVtLT5zdGF0dXMgPQotCQkJCQlQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQkJICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAkJCX0KIAkJfQogCX0KIAogZG9uZToKLQlEQkZFWElUOwotCi0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQxMywzMSArMzc0LDI5IEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cigKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQorc3RhdGljIGludCBwcmlzbTJtaWJfYnl0ZWFyZWEycHN0cihtaWJyZWNfdCAqbWliLAorCQkJCSAgIGludCBpc2dldCwKKwkJCQkgICB3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgaGZhMzg0eF90ICpodywKKwkJCQkgICBwODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgKm1zZywKKwkJCQkgICB2b2lkICpkYXRhKQogewotCWludCAgICAgICAgICAgIHJlc3VsdDsKLQlwODAyMTFwc3RyZF90ICAqcHN0ciA9IChwODAyMTFwc3RyZF90KikgZGF0YTsKLQl1OCAgICAgICAgICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQ7CisJcDgwMjExcHN0cmRfdCAqcHN0ciA9IChwODAyMTFwc3RyZF90ICopIGRhdGE7CisJdTggYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CiAKIAlpZiAoaXNnZXQpIHsKLQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgbWliLT5wYXJtMSwgYnl0ZWJ1ZiwgbWliLT5wYXJtMik7CisJCXJlc3VsdCA9CisJCSAgICBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBtaWItPnBhcm0yKTsKIAkJcHJpc20ybWdtdF9ieXRlYXJlYTJwc3RyKGJ5dGVidWYsIHBzdHIsIG1pYi0+cGFybTIpOwogCX0gZWxzZSB7CiAJCW1lbXNldChieXRlYnVmLCAwLCBtaWItPnBhcm0yKTsKIAkJcHJpc20ybWdtdF9wc3RyMmJ5dGVhcmVhKGJ5dGVidWYsIHBzdHIpOwotCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBtaWItPnBhcm0yKTsKKwkJcmVzdWx0ID0KKwkJICAgIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIG1pYi0+cGFybTEsIGJ5dGVidWYsIG1pYi0+cGFybTIpOwogCX0KIAotCURCRkVYSVQ7Ci0JcmV0dXJuKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NjUsMzcgKzQyNCwyNiBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3VpbnQzMigKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQorc3RhdGljIGludCBwcmlzbTJtaWJfdWludDMyKG1pYnJlY190ICptaWIsCisJCQkgICAgaW50IGlzZ2V0LAorCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCSAgICBoZmEzODR4X3QgKmh3LAorCQkJICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLCB2b2lkICpkYXRhKQogewotCWludCAgICAgcmVzdWx0OwotCXUzMiAgKnVpbnQzMiA9ICh1MzIqKSBkYXRhOwotCXU4ICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07Ci0JdTE2ICAqd29yZGJ1ZiA9ICh1MTYqKSBieXRlYnVmOwotCi0JREJGRU5URVI7CisJaW50IHJlc3VsdDsKKwl1MzIgKnVpbnQzMiA9ICh1MzIgKikgZGF0YTsKKwl1OCBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwl1MTYgKndvcmRidWYgPSAodTE2ICopIGJ5dGVidWY7CiAKIAlpZiAoaXNnZXQpIHsKIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCB3b3JkYnVmKTsKIAkJKnVpbnQzMiA9ICp3b3JkYnVmOwotCQkvKiBbTVNNXSBSZW1vdmVkLCBnZXRjb25maWcxNiByZXR1cm5zIHRoZSB2YWx1ZSBpbiBob3N0IG9yZGVyLgotCQkgKiBwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQod29yZGJ1ZiwgdWludDMyKTsKLQkJICovCiAJfSBlbHNlIHsKLQkJLyogW01TTV0gUmVtb3ZlZCwgc2V0Y29uZmlnMTYgZXhwZWN0cyBob3N0IG9yZGVyLgotCQkgKiBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQod29yZGJ1ZiwgdWludDMyKTsKLQkJICovCiAJCSp3b3JkYnVmID0gKnVpbnQzMjsKIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZzE2KGh3LCBtaWItPnBhcm0xLCAqd29yZGJ1Zik7CiAJfQogCi0JREJGRVhJVDsKLQlyZXR1cm4ocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUyMyw0NiArNDcxLDM2IEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZygKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQorc3RhdGljIGludCBwcmlzbTJtaWJfZmxhZyhtaWJyZWNfdCAqbWliLAorCQkJICBpbnQgaXNnZXQsCisJCQkgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCSAgaGZhMzg0eF90ICpodywKKwkJCSAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpCiB7Ci0JaW50ICAgICByZXN1bHQ7Ci0JdTMyICAqdWludDMyID0gKHUzMiopIGRhdGE7Ci0JdTggICBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKLQl1MTYgICp3b3JkYnVmID0gKHUxNiopIGJ5dGVidWY7Ci0JdTMyICBmbGFnczsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQ7CisJdTMyICp1aW50MzIgPSAodTMyICopIGRhdGE7CisJdTggYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07CisJdTE2ICp3b3JkYnVmID0gKHUxNiAqKSBieXRlYnVmOworCXUzMiBmbGFnczsKIAogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgd29yZGJ1Zik7CiAJaWYgKHJlc3VsdCA9PSAwKSB7Ci0JCS8qIFtNU01dIFJlbW92ZWQsIGdldGNvbmZpZzE2IHJldHVybnMgdGhlIHZhbHVlIGluIGhvc3Qgb3JkZXIuCi0JCSAqIHByaXNtMm1nbXRfcHJpc20yaW50MnA4MDIxMWludCh3b3JkYnVmLCAmZmxhZ3MpOwotCQkgKi8KIAkJZmxhZ3MgPSAqd29yZGJ1ZjsKIAkJaWYgKGlzZ2V0KSB7CiAJCQkqdWludDMyID0gKGZsYWdzICYgbWliLT5wYXJtMikgPwotCQkJCVA4MDIxMUVOVU1fdHJ1dGhfdHJ1ZSA6IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CisJCQkgICAgUDgwMjExRU5VTV90cnV0aF90cnVlIDogUDgwMjExRU5VTV90cnV0aF9mYWxzZTsKIAkJfSBlbHNlIHsKIAkJCWlmICgoKnVpbnQzMikgPT0gUDgwMjExRU5VTV90cnV0aF90cnVlKQogCQkJCWZsYWdzIHw9IG1pYi0+cGFybTI7CiAJCQllbHNlCiAJCQkJZmxhZ3MgJj0gfm1pYi0+cGFybTI7Ci0JCQkvKiBbTVNNXSBSZW1vdmVkLCBzZXRjb25maWcxNiBleHBlY3RzIGhvc3Qgb3JkZXIuCi0JCQkgKiBwcmlzbTJtZ210X3A4MDIxMWludDJwcmlzbTJpbnQod29yZGJ1ZiwgJmZsYWdzKTsKLQkJCSAqLwogCQkJKndvcmRidWYgPSBmbGFnczsKLQkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgbWliLT5wYXJtMSwgKndvcmRidWYpOworCQkJcmVzdWx0ID0KKwkJCSAgICBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsIG1pYi0+cGFybTEsICp3b3JkYnVmKTsKIAkJfQogCX0KIAotCURCRkVYSVQ7Ci0JcmV0dXJuKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01OTAsMzMgKzUyOCwyOSBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkoCi1taWJyZWNfdCAgICAgICAgICAgICAgICAgICAgICptaWIsCi1pbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZ2V0LAotd2xhbmRldmljZV90ICAgICAgICAgICAgICAgICAqd2xhbmRldiwKLWhmYTM4NHhfdCAgICAgICAgICAgICAgICAgICAgKmh3LAotcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICAqbXNnLAotdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YSkKK3N0YXRpYyBpbnQgcHJpc20ybWliX3dlcGRlZmF1bHRrZXkobWlicmVjX3QgKm1pYiwKKwkJCQkgICBpbnQgaXNnZXQsCisJCQkJICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgIGhmYTM4NHhfdCAqaHcsCisJCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgdm9pZCAqZGF0YSkKIHsKLQlpbnQgICAgICAgICAgICByZXN1bHQ7Ci0JcDgwMjExcHN0cmRfdCAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIGRhdGE7Ci0JdTggICAgICAgICAgYnl0ZWJ1ZltNSUJfVE1QX01BWExFTl07Ci0JdTE2ICAgICAgICAgbGVuOwotCi0JREJGRU5URVI7CisJaW50IHJlc3VsdDsKKwlwODAyMTFwc3RyZF90ICpwc3RyID0gKHA4MDIxMXBzdHJkX3QgKikgZGF0YTsKKwl1OCBieXRlYnVmW01JQl9UTVBfTUFYTEVOXTsKKwl1MTYgbGVuOwogCiAJaWYgKGlzZ2V0KSB7Ci0JCXJlc3VsdCA9IDA7ICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4uICovCisJCXJlc3VsdCA9IDA7CS8qIFNob3VsZCBuZXZlciBoYXBwZW4uICovCiAJfSBlbHNlIHsKIAkJbGVuID0gKHBzdHItPmxlbiA+IDUpID8gSEZBMzg0eF9SSURfQ05GV0VQMTI4REVGQVVMVEtFWV9MRU4gOgotCQkJCQlIRkEzODR4X1JJRF9DTkZXRVBERUZBVUxUS0VZX0xFTjsKKwkJICAgIEhGQTM4NHhfUklEX0NORldFUERFRkFVTFRLRVlfTEVOOwogCQltZW1zZXQoYnl0ZWJ1ZiwgMCwgbGVuKTsKIAkJcHJpc20ybWdtdF9wc3RyMmJ5dGVhcmVhKGJ5dGVidWYsIHBzdHIpOwogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBtaWItPnBhcm0xLCBieXRlYnVmLCBsZW4pOwogCX0KIAotCURCRkVYSVQ7Ci0JcmV0dXJuKHJlc3VsdCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02NDQsMTcgKzU3OCwxNCBAQAogKgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgcHJpc20ybWliX3ByaXZhY3lpbnZva2VkKAotbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKLXdsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCi1oZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKLXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKLXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCitzdGF0aWMgaW50IHByaXNtMm1pYl9wcml2YWN5aW52b2tlZChtaWJyZWNfdCAqbWliLAorCQkJCSAgICBpbnQgaXNnZXQsCisJCQkJICAgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgaGZhMzg0eF90ICpodywKKwkJCQkgICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCisJCQkJICAgIHZvaWQgKmRhdGEpCiB7Ci0JaW50ICAgICByZXN1bHQ7Ci0KLQlEQkZFTlRFUjsKKwlpbnQgcmVzdWx0OwogCiAJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpIHsKIAkJaWYgKHdsYW5kZXYtPmhvc3R3ZXAgJiBIT1NUV0VQX0RFQ1JZUFQpCkBAIC02NjUsOCArNTk2LDcgQEAKIAogCXJlc3VsdCA9IHByaXNtMm1pYl9mbGFnKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csIGRhdGEpOwogCi0JREJGRVhJVDsKLQlyZXR1cm4ocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY5NCwyMiArNjI0LDE4IEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfZXhjbHVkZXVuZW5jcnlwdGVkKAotbWlicmVjX3QgICAgICAgICAgICAgICAgICAgICAqbWliLAotaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBpc2dldCwKLXdsYW5kZXZpY2VfdCAgICAgICAgICAgICAgICAgKndsYW5kZXYsCi1oZmEzODR4X3QgICAgICAgICAgICAgICAgICAgICpodywKLXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAgKm1zZywKLXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgKmRhdGEpCitzdGF0aWMgaW50IHByaXNtMm1pYl9leGNsdWRldW5lbmNyeXB0ZWQobWlicmVjX3QgKm1pYiwKKwkJCQkJaW50IGlzZ2V0LAorCQkJCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJCWhmYTM4NHhfdCAqaHcsCisJCQkJCXA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCQl2b2lkICpkYXRhKQogewotCWludCAgICAgcmVzdWx0OwotCi0JREJGRU5URVI7CisJaW50IHJlc3VsdDsKIAogCXJlc3VsdCA9IHByaXNtMm1pYl9mbGFnKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csIGRhdGEpOwogCi0JREJGRVhJVDsKLQlyZXR1cm4ocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTczNywzMSArNjYzLDI4IEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZCgKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQorc3RhdGljIGludCBwcmlzbTJtaWJfZnJhZ21lbnRhdGlvbnRocmVzaG9sZChtaWJyZWNfdCAqbWliLAorCQkJCQkgICAgaW50IGlzZ2V0LAorCQkJCQkgICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCQkgICAgaGZhMzg0eF90ICpodywKKwkJCQkJICAgIHA4MDIxMW1zZ19kb3QxMXJlcV9taWJzZXRfdCAqbXNnLAorCQkJCQkgICAgdm9pZCAqZGF0YSkKIHsKLQlpbnQgICAgIHJlc3VsdDsKLQl1MzIgICp1aW50MzIgPSAodTMyKikgZGF0YTsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQ7CisJdTMyICp1aW50MzIgPSAodTMyICopIGRhdGE7CiAKIAlpZiAoIWlzZ2V0KQogCQlpZiAoKCp1aW50MzIpICUgMikgewotCQkJV0xBTl9MT0dfV0FSTklORygiQXR0ZW1wdCB0byBzZXQgb2RkIG51bWJlciAiCi0JCQkJCSAgIkZyYWdtZW50YXRpb25UaHJlc2hvbGRcbiIpOwotCQkJbXNnLT5yZXN1bHRjb2RlLmRhdGEgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKLQkJCXJldHVybigwKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkF0dGVtcHQgdG8gc2V0IG9kZCBudW1iZXIgIgorCQkJICAgICAgICJGcmFnbWVudGF0aW9uVGhyZXNob2xkXG4iKTsKKwkJCW1zZy0+cmVzdWx0Y29kZS5kYXRhID0KKwkJCSAgICBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfbm90X3N1cHBvcnRlZDsKKwkJCXJldHVybiAwOwogCQl9CiAKIAlyZXN1bHQgPSBwcmlzbTJtaWJfdWludDMyKG1pYiwgaXNnZXQsIHdsYW5kZXYsIGh3LCBtc2csIGRhdGEpOwogCi0JREJGRVhJVDsKLQlyZXR1cm4ocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc4OSw0MyArNzEyLDQzIEBACiAqCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdigKLW1pYnJlY190ICAgICAgICAgICAgICAgICAgICAgKm1pYiwKLWludCAgICAgICAgICAgICAgICAgICAgICAgICAgaXNnZXQsCi13bGFuZGV2aWNlX3QgICAgICAgICAgICAgICAgICp3bGFuZGV2LAotaGZhMzg0eF90ICAgICAgICAgICAgICAgICAgICAqaHcsCi1wODAyMTFtc2dfZG90MTFyZXFfbWlic2V0X3QgICptc2csCi12b2lkICAgICAgICAgICAgICAgICAgICAgICAgICpkYXRhKQorc3RhdGljIGludCBwcmlzbTJtaWJfcHJpdihtaWJyZWNfdCAqbWliLAorCQkJICBpbnQgaXNnZXQsCisJCQkgIHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCSAgaGZhMzg0eF90ICpodywKKwkJCSAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csIHZvaWQgKmRhdGEpCiB7Ci0JcDgwMjExcHN0cmRfdCAgICAgKnBzdHIgPSAocDgwMjExcHN0cmRfdCopIGRhdGE7CisJcDgwMjExcHN0cmRfdCAqcHN0ciA9IChwODAyMTFwc3RyZF90ICopIGRhdGE7CiAKLQlpbnQgIHJlc3VsdDsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQ7CiAKIAlzd2l0Y2ggKG1pYi0+ZGlkKSB7Ci0JY2FzZSBESURtaWJfbG54X2xueENvbmZpZ1RhYmxlX2xueFJTTkFJRTogewotCQloZmEzODR4X1dQQURhdGFfdCB3cGE7Ci0JCWlmIChpc2dldCkgewotCQkJaGZhMzg0eF9kcnZyX2dldGNvbmZpZyggaHcsIEhGQTM4NHhfUklEX0NORldQQURBVEEsCi0JCQkJCQkodTggKikgJndwYSwgc2l6ZW9mKHdwYSkpOwotCQkJcHN0ci0+bGVuID0gaGZhMzg0eDJob3N0XzE2KHdwYS5kYXRhbGVuKTsKLQkJCW1lbWNweShwc3RyLT5kYXRhLCB3cGEuZGF0YSwgcHN0ci0+bGVuKTsKLQkJfSBlbHNlIHsKLQkJCXdwYS5kYXRhbGVuID0gaG9zdDJoZmEzODR4XzE2KHBzdHItPmxlbik7Ci0JCQltZW1jcHkod3BhLmRhdGEsIHBzdHItPmRhdGEsIHBzdHItPmxlbik7CisJY2FzZSBESURtaWJfbG54X2xueENvbmZpZ1RhYmxlX2xueFJTTkFJRTp7CisJCQloZmEzODR4X1dQQURhdGFfdCB3cGE7CisJCQlpZiAoaXNnZXQpIHsKKwkJCQloZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAorCQkJCQkJICAgICAgIEhGQTM4NHhfUklEX0NORldQQURBVEEsCisJCQkJCQkgICAgICAgKHU4ICopJndwYSwKKwkJCQkJCSAgICAgICBzaXplb2Yod3BhKSk7CisJCQkJcHN0ci0+bGVuID0gbGUxNl90b19jcHUod3BhLmRhdGFsZW4pOworCQkJCW1lbWNweShwc3RyLT5kYXRhLCB3cGEuZGF0YSwgcHN0ci0+bGVuKTsKKwkJCX0gZWxzZSB7CisJCQkJd3BhLmRhdGFsZW4gPSBjcHVfdG9fbGUxNihwc3RyLT5sZW4pOworCQkJCW1lbWNweSh3cGEuZGF0YSwgcHN0ci0+ZGF0YSwgcHN0ci0+bGVuKTsKIAotCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwKLQkJCQkodTggKikgJndwYSwgc2l6ZW9mKHdwYSkpOworCQkJCXJlc3VsdCA9CisJCQkJICAgIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsCisJCQkJCQkJICAgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwKKwkJCQkJCQkgICAodTggKikmd3BhLAorCQkJCQkJCSAgIHNpemVvZih3cGEpKTsKKwkJCX0KKwkJCWJyZWFrOwogCQl9Ci0JCWJyZWFrOwotCX0KIAlkZWZhdWx0OgotCQlXTEFOX0xPR19FUlJPUigiVW5oYW5kbGVkIERJRCAweCUwOHhcbiIsIG1pYi0+ZGlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmhhbmRsZWQgRElEIDB4JTA4eFxuIiwgbWliLT5kaWQpOwogCX0KIAotCURCRkVYSVQ7Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg0NSwxNCArNzY4LDEwIEBACiAKIHZvaWQgcHJpc20ybWdtdF9wc3RyMmJ5dGVzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCiB7Ci0JREJGRU5URVI7Ci0KLQlieXRlc3RyLT5sZW4gPSBob3N0MmhmYTM4NHhfMTYoKHUxNikocHN0ci0+bGVuKSk7CisJYnl0ZXN0ci0+bGVuID0gY3B1X3RvX2xlMTYoKHUxNikgKHBzdHItPmxlbikpOwogCW1lbWNweShieXRlc3RyLT5kYXRhLCBwc3RyLT5kYXRhLCBwc3RyLT5sZW4pOwotCURCRkVYSVQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMm1nbXRfcHN0cjJieXRlYXJlYQogKgpAQCAtODcwLDEzICs3ODksOSBAQAogCiB2b2lkIHByaXNtMm1nbXRfcHN0cjJieXRlYXJlYSh1OCAqYnl0ZWFyZWEsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCiB7Ci0JREJGRU5URVI7Ci0KIAltZW1jcHkoYnl0ZWFyZWEsIHBzdHItPmRhdGEsIHBzdHItPmxlbik7Ci0JREJGRVhJVDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIKICoKQEAgLTg5NCwxNCArODA5LDEwIEBACiAKIHZvaWQgcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpCiB7Ci0JREJGRU5URVI7Ci0KLQlwc3RyLT5sZW4gPSAodTgpKGhmYTM4NHgyaG9zdF8xNigodTE2KShieXRlc3RyLT5sZW4pKSk7CisJcHN0ci0+bGVuID0gKHU4KSAobGUxNl90b19jcHUoKHUxNikgKGJ5dGVzdHItPmxlbikpKTsKIAltZW1jcHkocHN0ci0+ZGF0YSwgYnl0ZXN0ci0+ZGF0YSwgcHN0ci0+bGVuKTsKLQlEQkZFWElUOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJtZ210X2J5dGVhcmVhMnBzdHIKICoKQEAgLTkxOSwyMTcgKzgzMCwxMSBAQAogCiB2b2lkIHByaXNtMm1nbXRfYnl0ZWFyZWEycHN0cih1OCAqYnl0ZWFyZWEsIHA4MDIxMXBzdHJkX3QgKnBzdHIsIGludCBsZW4pCiB7Ci0JREJGRU5URVI7Ci0KLQlwc3RyLT5sZW4gPSAodTgpbGVuOworCXBzdHItPmxlbiA9ICh1OCkgbGVuOwogCW1lbWNweShwc3RyLT5kYXRhLCBieXRlYXJlYSwgbGVuKTsKLQlEQkZFWElUOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQKLSoKLSogQ29udmVydCBhbiBoZmEzODR4IGludGVnZXIgaW50byBhIHdsYW4gaW50ZWdlcgotKgotKiBBcmd1bWVudHM6Ci0qCXByaXNtMmVudW0JcG9pbnRlciB0byBoZmEzODR4IGludGVnZXIKLSoJd2xhbmVudW0JcG9pbnRlciB0byBwODAyMTEgaW50ZWdlcgotKgotKiBSZXR1cm5zOgotKglOb3RoaW5nCi0qCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotdm9pZCBwcmlzbTJtZ210X3ByaXNtMmludDJwODAyMTFpbnQodTE2ICpwcmlzbTJpbnQsIHUzMiAqd2xhbmludCkKLXsKLQlEQkZFTlRFUjsKLQotCSp3bGFuaW50ID0gKHUzMiloZmEzODR4Mmhvc3RfMTYoKnByaXNtMmludCk7Ci0JREJGRVhJVDsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50Ci0qCi0qIENvbnZlcnQgYSB3bGFuIGludGVnZXIgaW50byBhbiBoZmEzODR4IGludGVnZXIKLSoKLSogQXJndW1lbnRzOgotKglwcmlzbTJlbnVtCXBvaW50ZXIgdG8gaGZhMzg0eCBpbnRlZ2VyCi0qCXdsYW5lbnVtCXBvaW50ZXIgdG8gcDgwMjExIGludGVnZXIKLSoKLSogUmV0dXJuczoKLSoJTm90aGluZwotKgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXZvaWQgcHJpc20ybWdtdF9wODAyMTFpbnQycHJpc20yaW50KHUxNiAqcHJpc20yaW50LCB1MzIgKndsYW5pbnQpCi17Ci0JREJGRU5URVI7Ci0KLQkqcHJpc20yaW50ID0gaG9zdDJoZmEzODR4XzE2KCh1MTYpKCp3bGFuaW50KSk7Ci0JREJGRVhJVDsKLX0KLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSogcHJpc20ybWdtdF9wcmlzbTJlbnVtMnA4MDIxMWVudW0KLSoKLSogQ29udmVydCB0aGUgaGZhMzg0eCBlbnVtZXJhdGVkIGludCBpbnRvIGEgcDgwMjExIGVudW1lcmF0ZWQgaW50Ci0qCi0qIEFyZ3VtZW50czoKLSoJcHJpc20yZW51bQlwb2ludGVyIHRvIGhmYTM4NHggaW50ZWdlcgotKgl3bGFuZW51bQlwb2ludGVyIHRvIHA4MDIxMSBpbnRlZ2VyCi0qCXJpZAkJaGZhMzg0eCByZWNvcmQgaWQKLSoKLSogUmV0dXJuczoKLSoJTm90aGluZwotKgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi12b2lkIHByaXNtMm1nbXRfcHJpc20yZW51bTJwODAyMTFlbnVtKHUxNiAqcHJpc20yZW51bSwgdTMyICp3bGFuZW51bSwgdTE2IHJpZCkKLXsKLQlEQkZFTlRFUjsKLQotCS8qIEF0IHRoZSBtb21lbnQsIHRoZSBuZWVkIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHkgaGFzbid0Ci0JcHJlc2VudGVkIGl0c2VsZi4gQWxsIHRoZSB3bGFuIGVudW1lcmF0ZWQgdmFsdWVzIGFyZQotCWEgMS10by0xIG1hdGNoIGFnYWluc3QgdGhlIFByaXNtMiBlbnVtZXJhdGVkIHZhbHVlcyovCi0JREJGRVhJVDsKLQlyZXR1cm47Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIHByaXNtMm1nbXRfcDgwMjExZW51bTJwcmlzbTJlbnVtCi0qCi0qIENvbnZlcnQgdGhlIHA4MDIxMSBlbnVtZXJhdGVkIGludCBpbnRvIGFuIGhmYTM4NHggZW51bWVyYXRlZCBpbnQKLSoKLSogQXJndW1lbnRzOgotKglwcmlzbTJlbnVtCXBvaW50ZXIgdG8gaGZhMzg0eCBpbnRlZ2VyCi0qCXdsYW5lbnVtCXBvaW50ZXIgdG8gcDgwMjExIGludGVnZXIKLSoJcmlkCQloZmEzODR4IHJlY29yZCBpZAotKgotKiBSZXR1cm5zOgotKglOb3RoaW5nCi0qCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgcHJpc20ybWdtdF9wODAyMTFlbnVtMnByaXNtMmVudW0odTE2ICpwcmlzbTJlbnVtLCB1MzIgKndsYW5lbnVtLCB1MTYgcmlkKQotewotCURCRkVOVEVSOwotCi0JLyogQXQgdGhlIG1vbWVudCwgdGhlIG5lZWQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXNuJ3QKLQlwcmVzZW50ZWQgaXRzZWxmLiBBbGwgdGhlIHdsYW4gZW51bWVyYXRlZCB2YWx1ZXMgYXJlCi0JYSAxLXRvLTEgbWF0Y2ggYWdhaW5zdCB0aGUgUHJpc20yIGVudW1lcmF0ZWQgdmFsdWVzKi8KLQlEQkZFWElUOwotCXJldHVybjsKIH0KIAogCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBwcmlzbTJtZ210X2dldF9vcHJhdGVzZXQKLSoKLSogQ29udmVydCB0aGUgaGZhMzg0eCBiaXQgYXJlYSBpbnRvIGEgd2xhbiBvY3RldCBzdHJpbmcuCi0qCi0qIEFyZ3VtZW50czoKLSoJcmF0ZQkJUHJpc20yIGJpdCBhcmVhCi0qCXBzdHIJCXdsYW4gb2N0ZXQgc3RyaW5nCi0qCi0qIFJldHVybnM6Ci0qCU5vdGhpbmcKLSoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZCBwcmlzbTJtZ210X2dldF9vcHJhdGVzZXQodTE2ICpyYXRlLCBwODAyMTFwc3RyZF90ICpwc3RyKQotewotCXU4CWxlbjsKLQl1OAkqZGF0YXJhdGU7Ci0KLQlEQkZFTlRFUjsKLQotCWxlbiA9IDA7Ci0JZGF0YXJhdGUgPSBwc3RyLT5kYXRhOwotCi0gCS8qIDEgTWJwcyAqLwotCWlmICggQklUMCAmICgqcmF0ZSkgKSB7Ci0JCWxlbiArPSAodTgpMTsKLQkJKmRhdGFyYXRlID0gKHU4KTI7Ci0JCWRhdGFyYXRlKys7Ci0JfQotCi0gCS8qIDIgTWJwcyAqLwotCWlmICggQklUMSAmICgqcmF0ZSkgKSB7Ci0JCWxlbiArPSAodTgpMTsKLQkJKmRhdGFyYXRlID0gKHU4KTQ7Ci0JCWRhdGFyYXRlKys7Ci0JfQotCi0gCS8qIDUuNSBNYnBzICovCi0JaWYgKCBCSVQyICYgKCpyYXRlKSApIHsKLQkJbGVuICs9ICh1OCkxOwotCQkqZGF0YXJhdGUgPSAodTgpMTE7Ci0JCWRhdGFyYXRlKys7Ci0JfQotCi0gCS8qIDExIE1icHMgKi8KLQlpZiAoIEJJVDMgJiAoKnJhdGUpICkgewotCQlsZW4gKz0gKHU4KTE7Ci0JCSpkYXRhcmF0ZSA9ICh1OCkyMjsKLQkJZGF0YXJhdGUrKzsKLQl9Ci0KLQlwc3RyLT5sZW4gPSBsZW47Ci0KLQlEQkZFWElUOwotCXJldHVybjsKLX0KIAogCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBwcmlzbTJtZ210X3NldF9vcHJhdGVzZXQKLSoKLSogQ29udmVydCB0aGUgd2xhbiBvY3RldCBzdHJpbmcgaW50byBhbiBoZmEzODR4IGJpdCBhcmVhLgotKgotKiBBcmd1bWVudHM6Ci0qCXJhdGUJCVByaXNtMiBiaXQgYXJlYQotKglwc3RyCQl3bGFuIG9jdGV0IHN0cmluZwotKgotKiBSZXR1cm5zOgotKglOb3RoaW5nCi0qCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgcHJpc20ybWdtdF9zZXRfb3ByYXRlc2V0KHUxNiAqcmF0ZSwgcDgwMjExcHN0cmRfdCAqcHN0cikKLXsKLQl1OAkqZGF0YXJhdGU7Ci0JaW50CWk7Ci0KLQlEQkZFTlRFUjsKLQotCSpyYXRlID0gMDsKLQotCWRhdGFyYXRlID0gcHN0ci0+ZGF0YTsKLQotCWZvciAoIGk9MDsgaSA8IHBzdHItPmxlbjsgaSsrLCBkYXRhcmF0ZSsrICkgewotCQlzd2l0Y2ggKCpkYXRhcmF0ZSkgewotCQljYXNlIDI6IC8qIDEgTWJwcyAqLwotCQkJKnJhdGUgfD0gQklUMDsKLQkJCWJyZWFrOwotCQljYXNlIDQ6IC8qIDIgTWJwcyAqLwotCQkJKnJhdGUgfD0gQklUMTsKLQkJCWJyZWFrOwotCQljYXNlIDExOiAvKiA1LjUgTWJwcyAqLwotCQkJKnJhdGUgfD0gQklUMjsKLQkJCWJyZWFrOwotCQljYXNlIDIyOiAvKiAxMSBNYnBzICovCi0JCQkqcmF0ZSB8PSBCSVQzOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlXTEFOX0xPR19ERUJVRygxLCAiVW5yZWNvZ2luemVkIFJhdGUgb2YgJWRcbiIsCi0JCQkJKmRhdGFyYXRlKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JREJGRVhJVDsKLQlyZXR1cm47Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJzdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCmluZGV4IGIyNzljOTcuLjlkNTdmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jCkBAIC01MCwxMCArNTAsNiBAQAogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKi8KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIFN5c3RlbSBJbmNsdWRlcyAqLwotI2RlZmluZSBXTEFOX0RCVkFSCXByaXNtMl9kZWJ1ZwotCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CkBAIC02NSwxMyArNjEsMTUgQEAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotCi0jaW5jbHVkZSAid2xhbl9jb21wYXQuaCIKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogUHJvamVjdCBJbmNsdWRlcyAqLwpAQCAtODgsMTExICs4Niw3OCBAQAogI2luY2x1ZGUgImhmYTM4NHguaCIKICNpbmNsdWRlICJwcmlzbTJtZ210LmgiCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBDb25zdGFudHMgKi8KKyNkZWZpbmUgd2xhbl9oZXhjaGFyKHgpICgoKHgpIDwgMHgwYSkgPyAoJzAnICsgKHgpKSA6ICgnYScgKyAoKHgpIC0gMHgwYSkpKQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgTWFjcm9zICovCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKiBMb2NhbCBUeXBlcyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogTG9jYWwgU3RhdGljIERlZmluaXRpb25zICovCisvKiBDcmVhdGUgYSBzdHJpbmcgb2YgcHJpbnRhYmxlIGNoYXJzIGZyb20gc29tZXRoaW5nIHRoYXQgbWlnaHQgbm90IGJlICovCisvKiBJdCdzIHJlY29tbWVuZGVkIHRoYXQgdGhlIHN0ciBiZSA0KmxlbiArIDEgYnl0ZXMgbG9uZyAqLworI2RlZmluZSB3bGFuX21rcHJpbnRzdHIoYnVmLCBidWZsZW4sIHN0ciwgc3RybGVuKSBcCit7IFwKKwlpbnQgaSA9IDA7IFwKKwlpbnQgaiA9IDA7IFwKKwltZW1zZXQoc3RyLCAwLCAoc3RybGVuKSk7IFwKKwlmb3IgKGkgPSAwOyBpIDwgKGJ1Zmxlbik7IGkrKykgeyBcCisJCWlmIChpc3ByaW50KChidWYpW2ldKSkgeyBcCisJCQkoc3RyKVtqXSA9IChidWYpW2ldOyBcCisJCQlqKys7IFwKKwkJfSBlbHNlIHsgXAorCQkJKHN0cilbal0gPSAnXFwnOyBcCisJCQkoc3RyKVtqKzFdID0gJ3gnOyBcCisJCQkoc3RyKVtqKzJdID0gd2xhbl9oZXhjaGFyKCgoYnVmKVtpXSAmIDB4ZjApID4+IDQpOyBcCisJCQkoc3RyKVtqKzNdID0gd2xhbl9oZXhjaGFyKCgoYnVmKVtpXSAmIDB4MGYpKTsgXAorCQkJaiArPSA0OyBcCisJCX0gXAorCX0gXAorfQogCiBzdGF0aWMgY2hhciAqZGV2X2luZm8gPSAicHJpc20yX3VzYiI7Ci0KIHN0YXRpYyB3bGFuZGV2aWNlX3QgKmNyZWF0ZV93bGFuKHZvaWQpOwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogLS1Nb2R1bGUgUGFyYW1ldGVycyAqLworaW50IHByaXNtMl9yZXNldF9ob2xkdGltZSA9IDMwOwkvKiBSZXNldCBob2xkIHRpbWUgaW4gbXMgKi8KK2ludCBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSA9IDEwMDsJLyogUmVzZXQgc2V0dGxlIHRpbWUgaW4gbXMgKi8KIAotaW50ICAgICAgcHJpc20yX3Jlc2V0X2hvbGR0aW1lPTMwOwkvKiBSZXNldCBob2xkIHRpbWUgaW4gbXMgKi8KLWludAkgcHJpc20yX3Jlc2V0X3NldHRsZXRpbWU9MTAwOwkvKiBSZXNldCBzZXR0bGUgdGltZSBpbiBtcyAqLworc3RhdGljIGludCBwcmlzbTJfZG9yZXNldCA9IDA7CS8qIERvIGEgcmVzZXQgYXQgaW5pdD8gKi8KIAotc3RhdGljIGludAlwcmlzbTJfZG9yZXNldD0wOwkJLyogRG8gYSByZXNldCBhdCBpbml0PyAqLwotCi0jaWZkZWYgV0xBTl9JTkNMVURFX0RFQlVHCi1pbnQgcHJpc20yX2RlYnVnPTA7Ci1tb2R1bGVfcGFyYW0oIHByaXNtMl9kZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocHJpc20yX2RlYnVnLCAicHJpc20yIGRlYnVnZ2luZyIpOwotI2VuZGlmCi0KLW1vZHVsZV9wYXJhbSggcHJpc20yX2RvcmVzZXQsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0ocHJpc20yX2RvcmVzZXQsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHByaXNtMl9kb3Jlc2V0LCAiSXNzdWUgYSByZXNldCBvbiBpbml0aWFsaXphdGlvbiIpOwogCi1tb2R1bGVfcGFyYW0oIHByaXNtMl9yZXNldF9ob2xkdGltZSwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoIHByaXNtMl9yZXNldF9ob2xkdGltZSwgInJlc2V0IGhvbGQgdGltZSBpbiBtcyIpOwotbW9kdWxlX3BhcmFtKCBwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoIHByaXNtMl9yZXNldF9zZXR0bGV0aW1lLCAicmVzZXQgc2V0dGxlIHRpbWUgaW4gbXMiKTsKK21vZHVsZV9wYXJhbShwcmlzbTJfcmVzZXRfaG9sZHRpbWUsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHByaXNtMl9yZXNldF9ob2xkdGltZSwgInJlc2V0IGhvbGQgdGltZSBpbiBtcyIpOworbW9kdWxlX3BhcmFtKHByaXNtMl9yZXNldF9zZXR0bGV0aW1lLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgInJlc2V0IHNldHRsZSB0aW1lIGluIG1zIik7CiAKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qIExvY2FsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucyAqLworc3RhdGljIGludCBwcmlzbTJzdGFfb3Blbih3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIGludCBwcmlzbTJzdGFfY2xvc2Uod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9yZXNldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworc3RhdGljIGludCBwcmlzbTJzdGFfdHhmcmFtZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKKwkJCSAgICAgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CitzdGF0aWMgaW50IHByaXNtMnN0YV9tbG1lcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOworc3RhdGljIGludCBwcmlzbTJzdGFfZ2V0Y2FyZGluZm8od2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3N0YXRpYyBpbnQgcHJpc20yc3RhX2dsb2JhbHNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7CitzdGF0aWMgaW50IHByaXNtMnN0YV9zZXRtdWx0aWNhc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCBuZXRkZXZpY2VfdCAqZGV2KTsKIAotc3RhdGljIGludAlwcmlzbTJzdGFfb3Blbih3bGFuZGV2aWNlX3QgKndsYW5kZXYpOwotc3RhdGljIGludAlwcmlzbTJzdGFfY2xvc2Uod2xhbmRldmljZV90ICp3bGFuZGV2KTsKLXN0YXRpYyB2b2lkCXByaXNtMnN0YV9yZXNldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYgKTsKLXN0YXRpYyBpbnQgICAgICBwcmlzbTJzdGFfdHhmcmFtZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IsIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7Ci1zdGF0aWMgaW50CXByaXNtMnN0YV9tbG1lcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpOwotc3RhdGljIGludAlwcmlzbTJzdGFfZ2V0Y2FyZGluZm8od2xhbmRldmljZV90ICp3bGFuZGV2KTsKLXN0YXRpYyBpbnQJcHJpc20yc3RhX2dsb2JhbHNldHVwKHdsYW5kZXZpY2VfdCAqd2xhbmRldik7Ci1zdGF0aWMgaW50ICAgICAgcHJpc20yc3RhX3NldG11bHRpY2FzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCi0JCQkJICAgICAgIG5ldGRldmljZV90ICpkZXYpOwotCi1zdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2hhbmRvdmVyKAotCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7Ci1zdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX3RhbGxpZXMoCi0JCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKLXN0YXRpYyB2b2lkICAgICBwcmlzbTJzdGFfaW5mX2hvc3RzY2FucmVzdWx0cygKLQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwotc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9zY2FucmVzdWx0cygKLQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwotc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9jaGluZm9yZXN1bHRzKAotCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7Ci1zdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX2xpbmtzdGF0dXMoCi0JCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKLXN0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfYXNzb2NzdGF0dXMoCi0JCQl3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKLXN0YXRpYyB2b2lkCXByaXNtMnN0YV9pbmZfYXV0aHJlcSgKLQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwotc3RhdGljIHZvaWQJcHJpc20yc3RhX2luZl9hdXRocmVxX2RlZmVyKAotCQkJd2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7Ci1zdGF0aWMgdm9pZAlwcmlzbTJzdGFfaW5mX3BzdXNlcmNudCgKLQkJCXdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyogRnVuY3Rpb24gRGVmaW5pdGlvbnMgKi8KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIGRtcG1lbQotKgotKiBEZWJ1ZyB1dGlsaXR5IGZ1bmN0aW9uIHRvIGR1bXAgbWVtb3J5IHRvIHRoZSBrZXJuZWwgZGVidWcgbG9nLgotKgotKiBBcmd1bWVudHM6Ci0qCWJ1ZglwdHIgZGF0YSB3ZSB3YW50IGR1bXBlZAotKglsZW4JbGVuZ3RoIG9mIGRhdGEKLSoKLSogUmV0dXJuczoKLSoJbm90aGluZwotKiBTaWRlIGVmZmVjdHM6Ci0qCi0qIENhbGwgY29udGV4dDoKLSoJcHJvY2VzcyB0aHJlYWQKLSoJaW50ZXJydXB0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWlubGluZSB2b2lkIGRtcG1lbSh2b2lkICpidWYsIGludCBuKQotewotCWludCBjOwotCWZvciAoIGM9IDA7IGMgPCBuOyBjKyspIHsKLQkJaWYgKCAoYyAlIDE2KSA9PSAwICkgcHJpbnRrKEtFUk5fREVCVUciZG1wWyVkXTogIiwgYyk7Ci0JCXByaW50aygiJTAyeCAiLCAoKHU4KilidWYpW2NdKTsKLQkJaWYgKCAoYyAlIDE2KSA9PSAxNSApIHByaW50aygiXG4iKTsKLQl9Ci0JaWYgKCAoYyAlIDE2KSAhPSAwICkgcHJpbnRrKCJcbiIpOwotfQotCitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2hhbmRvdmVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX3RhbGxpZXMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9ob3N0c2NhbnJlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCQkgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfc2NhbnJlc3VsdHMod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfY2hpbmZvcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJCWhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKTsKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfbGlua3N0YXR1cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2Fzc29jc3RhdHVzKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkgICAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CitzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2F1dGhyZXEod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9hdXRocmVxX2RlZmVyKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKKwkJCQkJaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOworc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9wc3VzZXJjbnQod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgICBoZmEzODR4X0luZkZyYW1lX3QgKmluZik7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJzdGFfb3BlbgpAQCAtMjE3LDggKzE4Miw2IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHN0YXRpYyBpbnQgcHJpc20yc3RhX29wZW4od2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCURCRkVOVEVSOwotCiAJLyogV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgdG8gZG8gYW55dGhpbmcgZWxzZS4KIAkgKiBUaGUgc2V0dXAgb2YgdGhlIE1BQyBzaG91bGQgYmUgc3Vic2VxdWVudGx5IGNvbXBsZXRlZCB2aWEKIAkgKiB0aGUgbWxtZSBjb21tYW5kcy4KQEAgLTIyNywxMSArMTkwLDkgQEAKIAkgKiBmcmFtZXMgYmVjYXVzZSBvZiBkZXYtPmZsYWdzJklGRl9VUCBpcyB0cnVlLgogCSAqLwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX2Nsb3NlCiAqCkBAIC0yNTUsMTkgKzIxNiwxNSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHByaXNtMnN0YV9jbG9zZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JREJGRU5URVI7Ci0KIAkvKiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSB0byBkbyBhbnl0aGluZyBlbHNlLgogCSAqIEhpZ2hlciBsYXllcnMga25vdyB3ZSdyZSBub3QgcmVhZHkgZnJvbSBkZXYtPnN0YXJ0PT0wIGFuZAogCSAqIGRldi0+dGJ1c3k9PTEuICBPdXIgcnggcGF0aCBrbm93cyB0byBub3QgcGFzcyB1cCByZWNlaXZlZAogCSAqIGZyYW1lcyBiZWNhdXNlIG9mIGRldi0+ZmxhZ3MmSUZGX1VQIGlzIGZhbHNlLgogCSAqLwogCi0JREJGRVhJVDsKIAlyZXR1cm4gMDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX3Jlc2V0CiAqCkBAIC0yODUsMTQgKzI0MiwxMSBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MgdGhyZWFkCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIHByaXNtMnN0YV9yZXNldCh3bGFuZGV2aWNlX3QgKndsYW5kZXYgKQorc3RhdGljIHZvaWQgcHJpc20yc3RhX3Jlc2V0KHdsYW5kZXZpY2VfdCAqd2xhbmRldikKIHsKLQlEQkZFTlRFUjsKLQlEQkZFWElUOwogCXJldHVybjsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX3R4ZnJhbWUKICoKQEAgLTMxOCwyMiArMjcyLDIwIEBACiAJCQkgICAgIHA4MDIxMV9oZHJfdCAqcDgwMjExX2hkciwKIAkJCSAgICAgcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCkKIHsKLQloZmEzODR4X3QJCSpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OwotCWludAkJCXJlc3VsdDsKLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OworCWludCByZXN1bHQ7CiAKIAkvKiBJZiBuZWNlc3NhcnksIHNldCB0aGUgODAyLjExIFdFUCBiaXQgKi8KLQlpZiAoKHdsYW5kZXYtPmhvc3R3ZXAgJiAoSE9TVFdFUF9QUklWQUNZSU5WT0tFRCB8IEhPU1RXRVBfRU5DUllQVCkpID09IEhPU1RXRVBfUFJJVkFDWUlOVk9LRUQpIHsKLQkJcDgwMjExX2hkci0+YTMuZmMgfD0gaG9zdDJpZWVlMTYoV0xBTl9TRVRfRkNfSVNXRVAoMSkpOworCWlmICgod2xhbmRldi0+aG9zdHdlcCAmIChIT1NUV0VQX1BSSVZBQ1lJTlZPS0VEIHwgSE9TVFdFUF9FTkNSWVBUKSkgPT0KKwkgICAgSE9TVFdFUF9QUklWQUNZSU5WT0tFRCkgeworCQlwODAyMTFfaGRyLT5hMy5mYyB8PSBjcHVfdG9fbGUxNihXTEFOX1NFVF9GQ19JU1dFUCgxKSk7CiAJfQogCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3R4ZnJhbWUoaHcsIHNrYiwgcDgwMjExX2hkciwgcDgwMjExX3dlcCk7CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9tbG1lcmVxdWVzdAogKgpAQCAtMzYwLDEwOSArMzEyLDExMyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHByaXNtMnN0YV9tbG1lcmVxdWVzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHA4MDIxMW1zZ190ICptc2cpCiB7Ci0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CiAKIAlpbnQgcmVzdWx0ID0gMDsKLQlEQkZFTlRFUjsKIAotCXN3aXRjaCggbXNnLT5tc2djb2RlICkKLQl7Ci0JY2FzZSBESURtc2dfZG90MTFyZXFfbWliZ2V0IDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWliZ2V0IHJlcXVlc3RcbiIpOworCXN3aXRjaCAobXNnLT5tc2djb2RlKSB7CisJY2FzZSBESURtc2dfZG90MTFyZXFfbWliZ2V0OgorCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWliZ2V0IHJlcXVlc3RcbiIpOwogCQlyZXN1bHQgPSBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JY2FzZSBESURtc2dfZG90MTFyZXFfbWlic2V0IDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWlic2V0IHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX2RvdDExcmVxX21pYnNldDoKKwkJcHJfZGVidWcoIlJlY2VpdmVkIG1pYnNldCByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0KHdsYW5kZXYsIG1zZyk7CiAJCWJyZWFrOwotCWNhc2UgRElEbXNnX2RvdDExcmVxX3NjYW4gOgotCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBzY2FuIHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3NjYW46CisJCXByX2RlYnVnKCJSZWNlaXZlZCBzY2FuIHJlcXVlc3RcbiIpOwogCQlyZXN1bHQgPSBwcmlzbTJtZ210X3NjYW4od2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JY2FzZSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzIDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgc2Nhbl9yZXN1bHRzIHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3NjYW5fcmVzdWx0czoKKwkJcHJfZGVidWcoIlJlY2VpdmVkIHNjYW5fcmVzdWx0cyByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JY2FzZSBESURtc2dfZG90MTFyZXFfc3RhcnQgOgotCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHN0YXJ0IHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX2RvdDExcmVxX3N0YXJ0OgorCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWxtZSBzdGFydCByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9zdGFydCh3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKLQkvKgotCSAqIFByaXNtMiBzcGVjaWZpYyBtZXNzYWdlcwotCSAqLwotICAgICAgIAljYXNlIERJRG1zZ19wMnJlcV9yZWFkcGRhIDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSByZWFkcGRhIHJlcXVlc3RcbiIpOworCQkvKgorCQkgKiBQcmlzbTIgc3BlY2lmaWMgbWVzc2FnZXMKKwkJICovCisJY2FzZSBESURtc2dfcDJyZXFfcmVhZHBkYToKKwkJcHJfZGVidWcoIlJlY2VpdmVkIG1sbWUgcmVhZHBkYSByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9yZWFkcGRhKHdsYW5kZXYsIG1zZyk7CiAJCWJyZWFrOwotCWNhc2UgRElEbXNnX3AycmVxX3JhbWRsX3N0YXRlIDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSByYW1kbF9zdGF0ZSByZXF1ZXN0XG4iKTsKKwljYXNlIERJRG1zZ19wMnJlcV9yYW1kbF9zdGF0ZToKKwkJcHJfZGVidWcoIlJlY2VpdmVkIG1sbWUgcmFtZGxfc3RhdGUgcmVxdWVzdFxuIik7CiAJCXJlc3VsdCA9IHByaXNtMm1nbXRfcmFtZGxfc3RhdGUod2xhbmRldiwgbXNnKTsKIAkJYnJlYWs7Ci0JY2FzZSBESURtc2dfcDJyZXFfcmFtZGxfd3JpdGUgOgotCQlXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHJhbWRsX3dyaXRlIHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX3AycmVxX3JhbWRsX3dyaXRlOgorCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWxtZSByYW1kbF93cml0ZSByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9yYW1kbF93cml0ZSh3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKLQljYXNlIERJRG1zZ19wMnJlcV9mbGFzaGRsX3N0YXRlIDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBmbGFzaGRsX3N0YXRlIHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX3AycmVxX2ZsYXNoZGxfc3RhdGU6CisJCXByX2RlYnVnKCJSZWNlaXZlZCBtbG1lIGZsYXNoZGxfc3RhdGUgcmVxdWVzdFxuIik7CiAJCXJlc3VsdCA9IHByaXNtMm1nbXRfZmxhc2hkbF9zdGF0ZSh3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKLQljYXNlIERJRG1zZ19wMnJlcV9mbGFzaGRsX3dyaXRlIDoKLQkJV0xBTl9MT0dfREVCVUcoMiwiUmVjZWl2ZWQgbWxtZSBmbGFzaGRsX3dyaXRlIHJlcXVlc3RcbiIpOworCWNhc2UgRElEbXNnX3AycmVxX2ZsYXNoZGxfd3JpdGU6CisJCXByX2RlYnVnKCJSZWNlaXZlZCBtbG1lIGZsYXNoZGxfd3JpdGUgcmVxdWVzdFxuIik7CiAJCXJlc3VsdCA9IHByaXNtMm1nbXRfZmxhc2hkbF93cml0ZSh3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKLQkvKgotCSAqIExpbnV4IHNwZWNpZmljIG1lc3NhZ2VzCi0JICovCi0JY2FzZSBESURtc2dfbG54cmVxX2hvc3R3ZXAgOgotCQlicmVhazsgICAvLyBpZ25vcmUgbWUuCi0gICAgICAgIGNhc2UgRElEbXNnX2xueHJlcV9pZnN0YXRlIDoKKwkJLyoKKwkJICogTGludXggc3BlY2lmaWMgbWVzc2FnZXMKKwkJICovCisJY2FzZSBESURtc2dfbG54cmVxX2hvc3R3ZXA6CisJCWJyZWFrOwkJLyogaWdub3JlIG1lLiAqLworCWNhc2UgRElEbXNnX2xueHJlcV9pZnN0YXRlOgogCQl7Ci0JCXA4MDIxMW1zZ19sbnhyZXFfaWZzdGF0ZV90CSppZnN0YXRlbXNnOwotICAgICAgICAgICAgICAgIFdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgaWZzdGF0ZSByZXF1ZXN0XG4iKTsKLQkJaWZzdGF0ZW1zZyA9IChwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdCopbXNnOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsIGlmc3RhdGVtc2ctPmlmc3RhdGUuZGF0YSk7Ci0JCWlmc3RhdGVtc2ctPnJlc3VsdGNvZGUuc3RhdHVzID0KLQkJCVA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQkJaWZzdGF0ZW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gcmVzdWx0OwotCQlyZXN1bHQgPSAwOworCQkJcDgwMjExbXNnX2xueHJlcV9pZnN0YXRlX3QgKmlmc3RhdGVtc2c7CisJCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWxtZSBpZnN0YXRlIHJlcXVlc3RcbiIpOworCQkJaWZzdGF0ZW1zZyA9IChwODAyMTFtc2dfbG54cmVxX2lmc3RhdGVfdCAqKSBtc2c7CisJCQlyZXN1bHQgPQorCQkJICAgIHByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXYsCisJCQkJCSAgICAgIGlmc3RhdGVtc2ctPmlmc3RhdGUuZGF0YSk7CisJCQlpZnN0YXRlbXNnLT5yZXN1bHRjb2RlLnN0YXR1cyA9CisJCQkgICAgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQkJaWZzdGF0ZW1zZy0+cmVzdWx0Y29kZS5kYXRhID0gcmVzdWx0OworCQkJcmVzdWx0ID0gMDsKIAkJfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERJRG1zZ19sbnhyZXFfd2xhbnNuaWZmIDoKLSAgICAgICAgICAgICAgICBXTEFOX0xPR19ERUJVRygyLCJSZWNlaXZlZCBtbG1lIHdsYW5zbmlmZiByZXF1ZXN0XG4iKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBwcmlzbTJtZ210X3dsYW5zbmlmZih3bGFuZGV2LCBtc2cpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCWNhc2UgRElEbXNnX2xueHJlcV9hdXRvam9pbiA6Ci0JCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIG1sbWUgYXV0b2pvaW4gcmVxdWVzdFxuIik7CisJCWJyZWFrOworCWNhc2UgRElEbXNnX2xueHJlcV93bGFuc25pZmY6CisJCXByX2RlYnVnKCJSZWNlaXZlZCBtbG1lIHdsYW5zbmlmZiByZXF1ZXN0XG4iKTsKKwkJcmVzdWx0ID0gcHJpc20ybWdtdF93bGFuc25pZmYod2xhbmRldiwgbXNnKTsKKwkJYnJlYWs7CisJY2FzZSBESURtc2dfbG54cmVxX2F1dG9qb2luOgorCQlwcl9kZWJ1ZygiUmVjZWl2ZWQgbWxtZSBhdXRvam9pbiByZXF1ZXN0XG4iKTsKIAkJcmVzdWx0ID0gcHJpc20ybWdtdF9hdXRvam9pbih3bGFuZGV2LCBtc2cpOwogCQlicmVhazsKLQljYXNlIERJRG1zZ19sbnhyZXFfY29tbXNxdWFsaXR5OiB7Ci0JCXA4MDIxMW1zZ19sbnhyZXFfY29tbXNxdWFsaXR5X3QgKnF1YWxtc2c7CisJY2FzZSBESURtc2dfbG54cmVxX2NvbW1zcXVhbGl0eTp7CisJCQlwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90ICpxdWFsbXNnOwogCi0JCVdMQU5fTE9HX0RFQlVHKDIsIlJlY2VpdmVkIGNvbW1zcXVhbGl0eSByZXF1ZXN0XG4iKTsKKwkJCXByX2RlYnVnKCJSZWNlaXZlZCBjb21tc3F1YWxpdHkgcmVxdWVzdFxuIik7CiAKLQkJcXVhbG1zZyA9IChwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90KikgbXNnOworCQkJcXVhbG1zZyA9IChwODAyMTFtc2dfbG54cmVxX2NvbW1zcXVhbGl0eV90ICopIG1zZzsKIAotCQlxdWFsbXNnLT5saW5rLnN0YXR1cyA9IFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKLQkJcXVhbG1zZy0+bGV2ZWwuc3RhdHVzID0gUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOwotCQlxdWFsbXNnLT5ub2lzZS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQlxdWFsbXNnLT5saW5rLnN0YXR1cyA9CisJCQkgICAgUDgwMjExRU5VTV9tc2dpdGVtX3N0YXR1c19kYXRhX29rOworCQkJcXVhbG1zZy0+bGV2ZWwuc3RhdHVzID0KKwkJCSAgICBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CisJCQlxdWFsbXNnLT5ub2lzZS5zdGF0dXMgPQorCQkJICAgIFA4MDIxMUVOVU1fbXNnaXRlbV9zdGF0dXNfZGF0YV9vazsKIAorCQkJcXVhbG1zZy0+bGluay5kYXRhID0KKwkJCSAgICBsZTE2X3RvX2NwdShody0+cXVhbC5DUV9jdXJyQlNTKTsKKwkJCXF1YWxtc2ctPmxldmVsLmRhdGEgPQorCQkJICAgIGxlMTZfdG9fY3B1KGh3LT5xdWFsLkFTTF9jdXJyQlNTKTsKKwkJCXF1YWxtc2ctPm5vaXNlLmRhdGEgPQorCQkJICAgIGxlMTZfdG9fY3B1KGh3LT5xdWFsLkFOTF9jdXJyRkMpOwogCi0JCXF1YWxtc2ctPmxpbmsuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5DUV9jdXJyQlNTKTsKLQkJcXVhbG1zZy0+bGV2ZWwuZGF0YSA9IGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5BU0xfY3VyckJTUyk7Ci0JCXF1YWxtc2ctPm5vaXNlLmRhdGEgPSBoZmEzODR4Mmhvc3RfMTYoaHctPnF1YWwuQU5MX2N1cnJGQyk7Ci0KLQkJYnJlYWs7Ci0JfQorCQkJYnJlYWs7CisJCX0KIAlkZWZhdWx0OgotCQlXTEFOX0xPR19XQVJOSU5HKCJVbmtub3duIG1nbXQgcmVxdWVzdCBtZXNzYWdlIDB4JTA4eCIsIG1zZy0+bXNnY29kZSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gbWdtdCByZXF1ZXN0IG1lc3NhZ2UgMHglMDh4IiwKKwkJICAgICAgIG1zZy0+bXNnY29kZSk7CiAJCWJyZWFrOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX2lmc3RhdGUKICoKQEAgLTQ4NiwxNiArNDQyLDE0IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHUzMiBwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUzMiBpZnN0YXRlKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKLQl1MzIgCQkJcmVzdWx0OwotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CisJdTMyIHJlc3VsdDsKIAogCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCi0JV0xBTl9MT0dfREVCVUcoMiwgIkN1cnJlbnQgTVNEIHN0YXRlKCVkKSwgcmVxdWVzdGluZyglZClcbiIsCi0JICAgICAgICAgICAgICAgICAgd2xhbmRldi0+bXNkc3RhdGUsIGlmc3RhdGUpOwotCXN3aXRjaCAoaWZzdGF0ZSkKLQl7CisJcHJfZGVidWcoIkN1cnJlbnQgTVNEIHN0YXRlKCVkKSwgcmVxdWVzdGluZyglZClcbiIsCisJICAgICAgIHdsYW5kZXYtPm1zZHN0YXRlLCBpZnN0YXRlKTsKKwlzd2l0Y2ggKGlmc3RhdGUpIHsKIAljYXNlIFA4MDIxMUVOVU1faWZzdGF0ZV9md2xvYWQ6CiAJCXN3aXRjaCAod2xhbmRldi0+bXNkc3RhdGUpIHsKIAkJY2FzZSBXTEFOX01TRF9IV1BSRVNFTlQ6CkBAIC01MDQsMTIgKzQ1OCwxMiBAQAogCQkJICogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlK2RyaXZlciBzdWZmaWNpZW50bHkKIAkJCSAqIGZvciBmaXJtd2FyZSBsb2FkaW5nLgogCQkJICovCi0JCQlpZiAoKHJlc3VsdD1oZmEzODR4X2RydnJfc3RhcnQoaHcpKSkgewotCQkJCVdMQU5fTE9HX0VSUk9SKAotCQkJCQkiaGZhMzg0eF9kcnZyX3N0YXJ0KCkgZmFpbGVkLCIKLQkJCQkJInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOworCQkJaWYgKChyZXN1bHQgPSBoZmEzODR4X2RydnJfc3RhcnQoaHcpKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiaGZhMzg0eF9kcnZyX3N0YXJ0KCkgZmFpbGVkLCIKKwkJCQkgICAgICAgInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOwogCQkJCXJlc3VsdCA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtNTIxLDkgKzQ3NSw5IEBACiAJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fTVNEX1JVTk5JTkc6Ci0JCQlXTEFOX0xPR19XQVJOSU5HKAotCQkJCSJDYW5ub3QgZW50ZXIgZndsb2FkIHN0YXRlIGZyb20gZW5hYmxlIHN0YXRlLCIKLQkJCQkieW91IG11c3QgZGlzYWJsZSBmaXJzdC5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJDYW5ub3QgZW50ZXIgZndsb2FkIHN0YXRlIGZyb20gZW5hYmxlIHN0YXRlLCIKKwkJCSAgICAgICAieW91IG11c3QgZGlzYWJsZSBmaXJzdC5cbiIpOwogCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ludmFsaWRfcGFyYW1ldGVyczsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fTVNEX0hXRkFJTDoKQEAgLTU0OCwzMiArNTAyLDMyIEBACiAJCQkgKiBjYW4ndCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3RhdGUKIAkJCSAqIG9mIHRoZSBoYXJkd2FyZSBvciBhIHByZXZpb3VzIGZpcm13YXJlIGxvYWQuCiAJCQkgKi8KLQkJCWlmICgocmVzdWx0PWhmYTM4NHhfZHJ2cl9zdGFydChodykpKSB7Ci0JCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkJCSJoZmEzODR4X2RydnJfc3RhcnQoKSBmYWlsZWQsIgotCQkJCQkicmVzdWx0PSVkXG4iLCAoaW50KXJlc3VsdCk7CisJCQlpZiAoKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zdGFydChodykpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJICAgICAgICJoZmEzODR4X2RydnJfc3RhcnQoKSBmYWlsZWQsIgorCQkJCSAgICAgICAicmVzdWx0PSVkXG4iLCAoaW50KXJlc3VsdCk7CiAJCQkJcmVzdWx0ID0KLQkJCQlQODAyMTFFTlVNX3Jlc3VsdGNvZGVfaW1wbGVtZW50YXRpb25fZmFpbHVyZTsKKwkJCQkgICAgUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CiAJCQkJd2xhbmRldi0+bXNkc3RhdGUgPSBXTEFOX01TRF9IV1BSRVNFTlQ7CiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWlmICgocmVzdWx0PXByaXNtMnN0YV9nZXRjYXJkaW5mbyh3bGFuZGV2KSkpIHsKLQkJCQlXTEFOX0xPR19FUlJPUigKLQkJCQkJInByaXNtMnN0YV9nZXRjYXJkaW5mbygpIGZhaWxlZCwiCi0JCQkJCSJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKKwkJCWlmICgocmVzdWx0ID0gcHJpc20yc3RhX2dldGNhcmRpbmZvKHdsYW5kZXYpKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAicHJpc20yc3RhX2dldGNhcmRpbmZvKCkgZmFpbGVkLCIKKwkJCQkgICAgICAgInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOwogCQkJCXJlc3VsdCA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJCWhmYTM4NHhfZHJ2cl9zdG9wKGh3KTsKIAkJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWlmICgocmVzdWx0PXByaXNtMnN0YV9nbG9iYWxzZXR1cCh3bGFuZGV2KSkpIHsKLQkJCQlXTEFOX0xPR19FUlJPUigKLQkJCQkJInByaXNtMnN0YV9nbG9iYWxzZXR1cCgpIGZhaWxlZCwiCi0JCQkJCSJyZXN1bHQ9JWRcbiIsIChpbnQpcmVzdWx0KTsKKwkJCWlmICgocmVzdWx0ID0gcHJpc20yc3RhX2dsb2JhbHNldHVwKHdsYW5kZXYpKSkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAicHJpc20yc3RhX2dsb2JhbHNldHVwKCkgZmFpbGVkLCIKKwkJCQkgICAgICAgInJlc3VsdD0lZFxuIiwgKGludClyZXN1bHQpOwogCQkJCXJlc3VsdCA9Ci0JCQkJUDgwMjExRU5VTV9yZXN1bHRjb2RlX2ltcGxlbWVudGF0aW9uX2ZhaWx1cmU7CisJCQkJICAgIFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9pbXBsZW1lbnRhdGlvbl9mYWlsdXJlOwogCQkJCWhmYTM4NHhfZHJ2cl9zdG9wKGh3KTsKIAkJCQl3bGFuZGV2LT5tc2RzdGF0ZSA9IFdMQU5fTVNEX0hXUFJFU0VOVDsKIAkJCQlicmVhazsKQEAgLTU4NCw3ICs1MzgsNyBAQAogCQkJcmVzdWx0ID0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3M7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX01TRF9SVU5OSU5HOgotCQkJLyogRG8gbm90aGluZywgd2UncmUgYWxyZWFkeSBpbiB0aGlzIHN0YXRlLiovCisJCQkvKiBEbyBub3RoaW5nLCB3ZSdyZSBhbHJlYWR5IGluIHRoaXMgc3RhdGUuICovCiAJCQlyZXN1bHQgPSBQODAyMTFFTlVNX3Jlc3VsdGNvZGVfc3VjY2VzczsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fTVNEX0hXRkFJTDoKQEAgLTU5OSw3ICs1NTMsNyBAQAogCWNhc2UgUDgwMjExRU5VTV9pZnN0YXRlX2Rpc2FibGU6CiAJCXN3aXRjaCAod2xhbmRldi0+bXNkc3RhdGUpIHsKIAkJY2FzZSBXTEFOX01TRF9IV1BSRVNFTlQ6Ci0JCQkvKiBEbyBub3RoaW5nLCB3ZSdyZSBhbHJlYWR5IGluIHRoaXMgc3RhdGUuKi8KKwkJCS8qIERvIG5vdGhpbmcsIHdlJ3JlIGFscmVhZHkgaW4gdGhpcyBzdGF0ZS4gKi8KIAkJCXJlc3VsdCA9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzOwogCQkJYnJlYWs7CiAJCWNhc2UgV0xBTl9NU0RfRldMT0FEOgpAQCAtNjM0LDExICs1ODgsOSBAQAogCQlicmVhazsKIAl9CiAKLQlEQkZFWElUOwogCXJldHVybiByZXN1bHQ7CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9nZXRjYXJkaW5mbwogKgpAQCAtNjYwLDI2OSArNjEyLDI4NCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHByaXNtMnN0YV9nZXRjYXJkaW5mbyh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JaW50IAkJCXJlc3VsdCA9IDA7Ci0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OwotCXUxNiAgICAgICAgICAgICAgICAgIHRlbXA7Ci0JdTgJCQlzbnVtW0hGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU5dOwotCWNoYXIJCQlwc3RyWyhIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOICogNCkgKyAxXTsKLQotCURCRkVOVEVSOworCWludCByZXN1bHQgPSAwOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CisJdTE2IHRlbXA7CisJdTggc251bVtIRkEzODR4X1JJRF9OSUNTRVJJQUxOVU1CRVJfTEVOXTsKKwljaGFyIHBzdHJbKEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4gKiA0KSArIDFdOwogCiAJLyogQ29sbGVjdCB2ZXJzaW9uIGFuZCBjb21wYXRpYmlsaXR5IGluZm8gKi8KIAkvKiAgU29tZSBhcmUgY3JpdGljYWwsIHNvbWUgYXJlIG5vdCAqLwogCS8qIE5JQyBpZGVudGl0eSAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX05JQ0lERU5USVRZLAotCQkJJmh3LT5pZGVudF9uaWMsIHNpemVvZihoZmEzODR4X2NvbXBpZGVudF90KSk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgTklDSURFTlRJVFlcbiIpOworCQkJCQkmaHctPmlkZW50X25pYywKKwkJCQkJc2l6ZW9mKGhmYTM4NHhfY29tcGlkZW50X3QpKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIE5JQ0lERU5USVRZXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZ2V0IGFsbCB0aGUgbmljIGlkIGZpZWxkcyBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KLQlody0+aWRlbnRfbmljLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9uaWMuaWQpOwotCWh3LT5pZGVudF9uaWMudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfbmljLnZhcmlhbnQpOwotCWh3LT5pZGVudF9uaWMubWFqb3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X25pYy5tYWpvcik7Ci0JaHctPmlkZW50X25pYy5taW5vciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfbmljLm1pbm9yKTsKKwlody0+aWRlbnRfbmljLmlkID0gbGUxNl90b19jcHUoaHctPmlkZW50X25pYy5pZCk7CisJaHctPmlkZW50X25pYy52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmlkZW50X25pYy52YXJpYW50KTsKKwlody0+aWRlbnRfbmljLm1ham9yID0gbGUxNl90b19jcHUoaHctPmlkZW50X25pYy5tYWpvcik7CisJaHctPmlkZW50X25pYy5taW5vciA9IGxlMTZfdG9fY3B1KGh3LT5pZGVudF9uaWMubWlub3IpOwogCi0JV0xBTl9MT0dfSU5GTyggImlkZW50OiBuaWMgaC93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCi0JCQlody0+aWRlbnRfbmljLmlkLCBody0+aWRlbnRfbmljLm1ham9yLAotCQkJaHctPmlkZW50X25pYy5taW5vciwgaHctPmlkZW50X25pYy52YXJpYW50KTsKKwlwcmludGsoS0VSTl9JTkZPICJpZGVudDogbmljIGgvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCSAgICAgICBody0+aWRlbnRfbmljLmlkLCBody0+aWRlbnRfbmljLm1ham9yLAorCSAgICAgICBody0+aWRlbnRfbmljLm1pbm9yLCBody0+aWRlbnRfbmljLnZhcmlhbnQpOwogCiAJLyogUHJpbWFyeSBmL3cgaWRlbnRpdHkgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9QUklJREVOVElUWSwKLQkJCSZody0+aWRlbnRfcHJpX2Z3LCBzaXplb2YoaGZhMzg0eF9jb21waWRlbnRfdCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFBSSUlERU5USVRZXG4iKTsKKwkJCQkJJmh3LT5pZGVudF9wcmlfZncsCisJCQkJCXNpemVvZihoZmEzODR4X2NvbXBpZGVudF90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBQUklJREVOVElUWVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIGdldCBhbGwgdGhlIHByaXZhdGUgZncgaWQgZmllbGRzIGluIGhvc3QgYnl0ZSBvcmRlciAqLwotCWh3LT5pZGVudF9wcmlfZncuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3ByaV9mdy5pZCk7Ci0JaHctPmlkZW50X3ByaV9mdy52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9wcmlfZncudmFyaWFudCk7Ci0JaHctPmlkZW50X3ByaV9mdy5tYWpvciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfcHJpX2Z3Lm1ham9yKTsKLQlody0+aWRlbnRfcHJpX2Z3Lm1pbm9yID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9wcmlfZncubWlub3IpOworCWh3LT5pZGVudF9wcmlfZncuaWQgPSBsZTE2X3RvX2NwdShody0+aWRlbnRfcHJpX2Z3LmlkKTsKKwlody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQgPSBsZTE2X3RvX2NwdShody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQpOworCWh3LT5pZGVudF9wcmlfZncubWFqb3IgPSBsZTE2X3RvX2NwdShody0+aWRlbnRfcHJpX2Z3Lm1ham9yKTsKKwlody0+aWRlbnRfcHJpX2Z3Lm1pbm9yID0gbGUxNl90b19jcHUoaHctPmlkZW50X3ByaV9mdy5taW5vcik7CiAKLQlXTEFOX0xPR19JTkZPKCAiaWRlbnQ6IHByaSBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKLQkJCWh3LT5pZGVudF9wcmlfZncuaWQsIGh3LT5pZGVudF9wcmlfZncubWFqb3IsCi0JCQlody0+aWRlbnRfcHJpX2Z3Lm1pbm9yLCBody0+aWRlbnRfcHJpX2Z3LnZhcmlhbnQpOworCXByaW50ayhLRVJOX0lORk8gImlkZW50OiBwcmkgZi93OiBpZD0weCUwMnggJWQuJWQuJWRcbiIsCisJICAgICAgIGh3LT5pZGVudF9wcmlfZncuaWQsIGh3LT5pZGVudF9wcmlfZncubWFqb3IsCisJICAgICAgIGh3LT5pZGVudF9wcmlfZncubWlub3IsIGh3LT5pZGVudF9wcmlfZncudmFyaWFudCk7CiAKIAkvKiBTdGF0aW9uIChTZWNvbmRhcnk/KSBmL3cgaWRlbnRpdHkgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9TVEFJREVOVElUWSwKLQkJCSZody0+aWRlbnRfc3RhX2Z3LCBzaXplb2YoaGZhMzg0eF9jb21waWRlbnRfdCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFNUQUlERU5USVRZXG4iKTsKKwkJCQkJJmh3LT5pZGVudF9zdGFfZncsCisJCQkJCXNpemVvZihoZmEzODR4X2NvbXBpZGVudF90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFJREVOVElUWVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCWlmIChody0+aWRlbnRfbmljLmlkIDwgMHg4MDAwKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGQVRBTDogQ2FyZCBpcyBub3QgYW4gSW50ZXJzaWwgUHJpc20yLzIuNS8zXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiRkFUQUw6IENhcmQgaXMgbm90IGFuIEludGVyc2lsIFByaXNtMi8yLjUvM1xuIik7CiAJCXJlc3VsdCA9IC0xOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBnZXQgYWxsIHRoZSBzdGF0aW9uIGZ3IGlkIGZpZWxkcyBpbiBob3N0IGJ5dGUgb3JkZXIgKi8KLQlody0+aWRlbnRfc3RhX2Z3LmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5pZGVudF9zdGFfZncuaWQpOwotCWh3LT5pZGVudF9zdGFfZncudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOwotCWh3LT5pZGVudF9zdGFfZncubWFqb3IgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmlkZW50X3N0YV9mdy5tYWpvcik7Ci0JaHctPmlkZW50X3N0YV9mdy5taW5vciA9IGhmYTM4NHgyaG9zdF8xNihody0+aWRlbnRfc3RhX2Z3Lm1pbm9yKTsKKwlody0+aWRlbnRfc3RhX2Z3LmlkID0gbGUxNl90b19jcHUoaHctPmlkZW50X3N0YV9mdy5pZCk7CisJaHctPmlkZW50X3N0YV9mdy52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmlkZW50X3N0YV9mdy52YXJpYW50KTsKKwlody0+aWRlbnRfc3RhX2Z3Lm1ham9yID0gbGUxNl90b19jcHUoaHctPmlkZW50X3N0YV9mdy5tYWpvcik7CisJaHctPmlkZW50X3N0YV9mdy5taW5vciA9IGxlMTZfdG9fY3B1KGh3LT5pZGVudF9zdGFfZncubWlub3IpOwogCiAJLyogc3RyaXAgb3V0IHRoZSAnc3BlY2lhbCcgdmFyaWFudCBiaXRzICovCi0JaHctPm1tX21vZHMgPSBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQgJiAoQklUMTQgfCBCSVQxNSk7Ci0JaHctPmlkZW50X3N0YV9mdy52YXJpYW50ICY9IH4oKHUxNikoQklUMTQgfCBCSVQxNSkpOworCWh3LT5tbV9tb2RzID0gaHctPmlkZW50X3N0YV9mdy52YXJpYW50ICYgKEJJVCgxNCkgfCBCSVQoMTUpKTsKKwlody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQgJj0gfigodTE2KSAoQklUKDE0KSB8IEJJVCgxNSkpKTsKIAotCWlmICAoIGh3LT5pZGVudF9zdGFfZncuaWQgPT0gMHgxZiApIHsKLQkJV0xBTl9MT0dfSU5GTygKLQkJCSJpZGVudDogc3RhIGYvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAotCQkJaHctPmlkZW50X3N0YV9mdy5pZCwgaHctPmlkZW50X3N0YV9mdy5tYWpvciwKLQkJCWh3LT5pZGVudF9zdGFfZncubWlub3IsIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCk7CisJaWYgKGh3LT5pZGVudF9zdGFfZncuaWQgPT0gMHgxZikgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiaWRlbnQ6IHN0YSBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKKwkJICAgICAgIGh3LT5pZGVudF9zdGFfZncuaWQsIGh3LT5pZGVudF9zdGFfZncubWFqb3IsCisJCSAgICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLCBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOwogCX0gZWxzZSB7Ci0JCVdMQU5fTE9HX0lORk8oCi0JCQkiaWRlbnQ6ICBhcCBmL3c6IGlkPTB4JTAyeCAlZC4lZC4lZFxuIiwKLQkJCWh3LT5pZGVudF9zdGFfZncuaWQsIGh3LT5pZGVudF9zdGFfZncubWFqb3IsCi0JCQlody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLCBody0+aWRlbnRfc3RhX2Z3LnZhcmlhbnQpOwotCQlXTEFOX0xPR19FUlJPUigiVW5zdXBwb3J0ZWQgVGVydGlhcnkgQVAgZmlybWVhcmUgbG9hZGVkIVxuIik7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJpZGVudDogIGFwIGYvdzogaWQ9MHglMDJ4ICVkLiVkLiVkXG4iLAorCQkgICAgICAgaHctPmlkZW50X3N0YV9mdy5pZCwgaHctPmlkZW50X3N0YV9mdy5tYWpvciwKKwkJICAgICAgIGh3LT5pZGVudF9zdGFfZncubWlub3IsIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCk7CisJCXByaW50ayhLRVJOX0VSUiAiVW5zdXBwb3J0ZWQgVGVydGlhcnkgQVAgZmlybWVhcmUgbG9hZGVkIVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIE1vZGVtIHN1cHBsaWVyICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfTUZJU1VQUkFOR0UsCi0JCQkmaHctPmNhcF9zdXBfbWZpLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgTUZJU1VQUkFOR0VcbiIpOworCQkJCQkmaHctPmNhcF9zdXBfbWZpLAorCQkJCQlzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBNRklTVVBSQU5HRVxuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIG1vZGVtIGludGVyZmFjZSBzdXBwbGllcgotCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCi0JaHctPmNhcF9zdXBfbWZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfbWZpLnJvbGUpOwotCWh3LT5jYXBfc3VwX21maS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9tZmkuaWQpOwotCWh3LT5jYXBfc3VwX21maS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX21maS52YXJpYW50KTsKLQlody0+Y2FwX3N1cF9tZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX21maS5ib3R0b20pOwotCWh3LT5jYXBfc3VwX21maS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfbWZpLnRvcCk7CisJICAgZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9tZmkucm9sZSA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX21maS5yb2xlKTsKKwlody0+Y2FwX3N1cF9tZmkuaWQgPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9tZmkuaWQpOworCWh3LT5jYXBfc3VwX21maS52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfbWZpLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX21maS5ib3R0b20gPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9tZmkuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9tZmkudG9wID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfbWZpLnRvcCk7CiAKLQlXTEFOX0xPR19JTkZPKAotCQkiTUZJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfc3VwX21maS5yb2xlLCBody0+Y2FwX3N1cF9tZmkuaWQsCi0JCWh3LT5jYXBfc3VwX21maS52YXJpYW50LCBody0+Y2FwX3N1cF9tZmkuYm90dG9tLAotCQlody0+Y2FwX3N1cF9tZmkudG9wKTsKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJNRkk6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkgICAgICAgaHctPmNhcF9zdXBfbWZpLnJvbGUsIGh3LT5jYXBfc3VwX21maS5pZCwKKwkgICAgICAgaHctPmNhcF9zdXBfbWZpLnZhcmlhbnQsIGh3LT5jYXBfc3VwX21maS5ib3R0b20sCisJICAgICAgIGh3LT5jYXBfc3VwX21maS50b3ApOwogCiAJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgQ29udHJvbGxlciBzdXBwbGllciAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NGSVNVUFJBTkdFLAotCQkJJmh3LT5jYXBfc3VwX2NmaSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIENGSVNVUFJBTkdFXG4iKTsKKwkJCQkJJmh3LT5jYXBfc3VwX2NmaSwKKwkJCQkJc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmV0cmlldmUgQ0ZJU1VQUkFOR0VcbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBjb250cm9sbGVyIGludGVyZmFjZSBzdXBwbGllcgotCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCi0JaHctPmNhcF9zdXBfY2ZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfY2ZpLnJvbGUpOwotCWh3LT5jYXBfc3VwX2NmaS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9jZmkuaWQpOwotCWh3LT5jYXBfc3VwX2NmaS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS52YXJpYW50KTsKLQlody0+Y2FwX3N1cF9jZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX2NmaS5ib3R0b20pOwotCWh3LT5jYXBfc3VwX2NmaS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfY2ZpLnRvcCk7CisJICAgZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9jZmkucm9sZSA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX2NmaS5yb2xlKTsKKwlody0+Y2FwX3N1cF9jZmkuaWQgPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9jZmkuaWQpOworCWh3LT5jYXBfc3VwX2NmaS52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfY2ZpLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX2NmaS5ib3R0b20gPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9jZmkuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9jZmkudG9wID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfY2ZpLnRvcCk7CiAKLQlXTEFOX0xPR19JTkZPKAotCQkiQ0ZJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfc3VwX2NmaS5yb2xlLCBody0+Y2FwX3N1cF9jZmkuaWQsCi0JCWh3LT5jYXBfc3VwX2NmaS52YXJpYW50LCBody0+Y2FwX3N1cF9jZmkuYm90dG9tLAotCQlody0+Y2FwX3N1cF9jZmkudG9wKTsKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJDRkk6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkgICAgICAgaHctPmNhcF9zdXBfY2ZpLnJvbGUsIGh3LT5jYXBfc3VwX2NmaS5pZCwKKwkgICAgICAgaHctPmNhcF9zdXBfY2ZpLnZhcmlhbnQsIGh3LT5jYXBfc3VwX2NmaS5ib3R0b20sCisJICAgICAgIGh3LT5jYXBfc3VwX2NmaS50b3ApOwogCiAJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgUHJpbWFyeSBmL3cgc3VwcGxpZXIgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9QUklTVVBSQU5HRSwKLQkJCSZody0+Y2FwX3N1cF9wcmksIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBQUklTVVBSQU5HRVxuIik7CisJCQkJCSZody0+Y2FwX3N1cF9wcmksCisJCQkJCXNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIFBSSVNVUFJBTkdFXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgcHJpbWFyeSBmaXJtd2FyZSBzdXBwbGllcgotCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCi0JaHctPmNhcF9zdXBfcHJpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfcHJpLnJvbGUpOwotCWh3LT5jYXBfc3VwX3ByaS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9wcmkuaWQpOwotCWh3LT5jYXBfc3VwX3ByaS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS52YXJpYW50KTsKLQlody0+Y2FwX3N1cF9wcmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3ByaS5ib3R0b20pOwotCWh3LT5jYXBfc3VwX3ByaS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfcHJpLnRvcCk7CisJICAgZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9wcmkucm9sZSA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX3ByaS5yb2xlKTsKKwlody0+Y2FwX3N1cF9wcmkuaWQgPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9wcmkuaWQpOworCWh3LT5jYXBfc3VwX3ByaS52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfcHJpLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX3ByaS5ib3R0b20gPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9wcmkuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9wcmkudG9wID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfcHJpLnRvcCk7CiAKLQlXTEFOX0xPR19JTkZPKAotCQkiUFJJOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfc3VwX3ByaS5yb2xlLCBody0+Y2FwX3N1cF9wcmkuaWQsCi0JCWh3LT5jYXBfc3VwX3ByaS52YXJpYW50LCBody0+Y2FwX3N1cF9wcmkuYm90dG9tLAotCQlody0+Y2FwX3N1cF9wcmkudG9wKTsKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJQUkk6U1VQOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkgICAgICAgaHctPmNhcF9zdXBfcHJpLnJvbGUsIGh3LT5jYXBfc3VwX3ByaS5pZCwKKwkgICAgICAgaHctPmNhcF9zdXBfcHJpLnZhcmlhbnQsIGh3LT5jYXBfc3VwX3ByaS5ib3R0b20sCisJICAgICAgIGh3LT5jYXBfc3VwX3ByaS50b3ApOwogCiAJLyogQ29tcGF0aWJpbGl0eSByYW5nZSwgU3RhdGlvbiBmL3cgc3VwcGxpZXIgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9TVEFTVVBSQU5HRSwKLQkJCSZody0+Y2FwX3N1cF9zdGEsIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFTVVBSQU5HRVxuIik7CisJCQkJCSZody0+Y2FwX3N1cF9zdGEsCisJCQkJCXNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIFNUQVNVUFJBTkdFXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgc3RhdGlvbiBmaXJtd2FyZSBzdXBwbGllcgotCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCi0JaHctPmNhcF9zdXBfc3RhLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfc3RhLnJvbGUpOwotCWh3LT5jYXBfc3VwX3N0YS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX3N1cF9zdGEuaWQpOwotCWh3LT5jYXBfc3VwX3N0YS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3N0YS52YXJpYW50KTsKLQlody0+Y2FwX3N1cF9zdGEuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfc3VwX3N0YS5ib3R0b20pOwotCWh3LT5jYXBfc3VwX3N0YS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9zdXBfc3RhLnRvcCk7CisJICAgZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX3N1cF9zdGEucm9sZSA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfc3VwX3N0YS5yb2xlKTsKKwlody0+Y2FwX3N1cF9zdGEuaWQgPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9zdGEuaWQpOworCWh3LT5jYXBfc3VwX3N0YS52YXJpYW50ID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfc3RhLnZhcmlhbnQpOworCWh3LT5jYXBfc3VwX3N0YS5ib3R0b20gPSBsZTE2X3RvX2NwdShody0+Y2FwX3N1cF9zdGEuYm90dG9tKTsKKwlody0+Y2FwX3N1cF9zdGEudG9wID0gbGUxNl90b19jcHUoaHctPmNhcF9zdXBfc3RhLnRvcCk7CiAKLQlpZiAoIGh3LT5jYXBfc3VwX3N0YS5pZCA9PSAweDA0ICkgewotCQlXTEFOX0xPR19JTkZPKAotCQkiU1RBOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfc3VwX3N0YS5yb2xlLCBody0+Y2FwX3N1cF9zdGEuaWQsCi0JCWh3LT5jYXBfc3VwX3N0YS52YXJpYW50LCBody0+Y2FwX3N1cF9zdGEuYm90dG9tLAotCQlody0+Y2FwX3N1cF9zdGEudG9wKTsKKwlpZiAoaHctPmNhcF9zdXBfc3RhLmlkID09IDB4MDQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIlNUQTpTVVA6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCQkgICAgICAgaHctPmNhcF9zdXBfc3RhLnJvbGUsIGh3LT5jYXBfc3VwX3N0YS5pZCwKKwkJICAgICAgIGh3LT5jYXBfc3VwX3N0YS52YXJpYW50LCBody0+Y2FwX3N1cF9zdGEuYm90dG9tLAorCQkgICAgICAgaHctPmNhcF9zdXBfc3RhLnRvcCk7CiAJfSBlbHNlIHsKLQkJV0xBTl9MT0dfSU5GTygKLQkJIkFQOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfc3VwX3N0YS5yb2xlLCBody0+Y2FwX3N1cF9zdGEuaWQsCi0JCWh3LT5jYXBfc3VwX3N0YS52YXJpYW50LCBody0+Y2FwX3N1cF9zdGEuYm90dG9tLAotCQlody0+Y2FwX3N1cF9zdGEudG9wKTsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIkFQOlNVUDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJCSAgICAgICBody0+Y2FwX3N1cF9zdGEucm9sZSwgaHctPmNhcF9zdXBfc3RhLmlkLAorCQkgICAgICAgaHctPmNhcF9zdXBfc3RhLnZhcmlhbnQsIGh3LT5jYXBfc3VwX3N0YS5ib3R0b20sCisJCSAgICAgICBody0+Y2FwX3N1cF9zdGEudG9wKTsKIAl9CiAKIAkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBwcmltYXJ5IGYvdyBhY3RvciwgQ0ZJIHN1cHBsaWVyICovCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywgSEZBMzg0eF9SSURfUFJJX0NGSUFDVFJBTkdFUywKLQkJCSZody0+Y2FwX2FjdF9wcmlfY2ZpLCBzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgUFJJX0NGSUFDVFJBTkdFU1xuIik7CisJCQkJCSZody0+Y2FwX2FjdF9wcmlfY2ZpLAorCQkJCQlzaXplb2YoaGZhMzg0eF9jYXBsZXZlbF90KSk7CisJaWYgKHJlc3VsdCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXRyaWV2ZSBQUklfQ0ZJQUNUUkFOR0VTXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJLyogZ2V0IGFsbCB0aGUgQ29tcGF0aWJpbGl0eSByYW5nZSwgcHJpbWFyeSBmL3cgYWN0b3IsIENGSSBzdXBwbGllcgotCWZpZWxkcyBpbiBieXRlIG9yZGVyICovCi0JaHctPmNhcF9hY3RfcHJpX2NmaS5yb2xlID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3ByaV9jZmkucm9sZSk7Ci0JaHctPmNhcF9hY3RfcHJpX2NmaS5pZCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9wcmlfY2ZpLmlkKTsKLQlody0+Y2FwX2FjdF9wcmlfY2ZpLnZhcmlhbnQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50KTsKLQlody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSk7Ci0JaHctPmNhcF9hY3RfcHJpX2NmaS50b3AgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3RfcHJpX2NmaS50b3ApOworCSAgIGZpZWxkcyBpbiBieXRlIG9yZGVyICovCisJaHctPmNhcF9hY3RfcHJpX2NmaS5yb2xlID0gbGUxNl90b19jcHUoaHctPmNhcF9hY3RfcHJpX2NmaS5yb2xlKTsKKwlody0+Y2FwX2FjdF9wcmlfY2ZpLmlkID0gbGUxNl90b19jcHUoaHctPmNhcF9hY3RfcHJpX2NmaS5pZCk7CisJaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50ID0KKwkgICAgbGUxNl90b19jcHUoaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50KTsKKwlody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSA9CisJICAgIGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3ByaV9jZmkuYm90dG9tKTsKKwlody0+Y2FwX2FjdF9wcmlfY2ZpLnRvcCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3ByaV9jZmkudG9wKTsKIAotCVdMQU5fTE9HX0lORk8oCi0JCSJQUkktQ0ZJOkFDVDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCi0JCWh3LT5jYXBfYWN0X3ByaV9jZmkucm9sZSwgaHctPmNhcF9hY3RfcHJpX2NmaS5pZCwKLQkJaHctPmNhcF9hY3RfcHJpX2NmaS52YXJpYW50LCBody0+Y2FwX2FjdF9wcmlfY2ZpLmJvdHRvbSwKLQkJaHctPmNhcF9hY3RfcHJpX2NmaS50b3ApOworCXByaW50ayhLRVJOX0lORk8KKwkgICAgICAgIlBSSS1DRkk6QUNUOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKKwkgICAgICAgaHctPmNhcF9hY3RfcHJpX2NmaS5yb2xlLCBody0+Y2FwX2FjdF9wcmlfY2ZpLmlkLAorCSAgICAgICBody0+Y2FwX2FjdF9wcmlfY2ZpLnZhcmlhbnQsIGh3LT5jYXBfYWN0X3ByaV9jZmkuYm90dG9tLAorCSAgICAgICBody0+Y2FwX2FjdF9wcmlfY2ZpLnRvcCk7CiAKIAkvKiBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGEgZi93IGFjdG9yLCBDRkkgc3VwcGxpZXIgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9TVEFfQ0ZJQUNUUkFOR0VTLAotCQkJJmh3LT5jYXBfYWN0X3N0YV9jZmksIHNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKLQlpZiAoIHJlc3VsdCApIHsKLQkJV0xBTl9MT0dfRVJST1IoIkZhaWxlZCB0byByZXRyaWV2ZSBTVEFfQ0ZJQUNUUkFOR0VTXG4iKTsKKwkJCQkJJmh3LT5jYXBfYWN0X3N0YV9jZmksCisJCQkJCXNpemVvZihoZmEzODR4X2NhcGxldmVsX3QpKTsKKwlpZiAocmVzdWx0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIFNUQV9DRklBQ1RSQU5HRVNcbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBnZXQgYWxsIHRoZSBDb21wYXRpYmlsaXR5IHJhbmdlLCBzdGF0aW9uIGYvdyBhY3RvciwgQ0ZJIHN1cHBsaWVyCi0JZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KLQlody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX2NmaS5yb2xlKTsKLQlody0+Y2FwX2FjdF9zdGFfY2ZpLmlkID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9jZmkuaWQpOwotCWh3LT5jYXBfYWN0X3N0YV9jZmkudmFyaWFudCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQpOwotCWh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tKTsKLQlody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCk7CisJICAgZmllbGRzIGluIGJ5dGUgb3JkZXIgKi8KKwlody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUgPSBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUpOworCWh3LT5jYXBfYWN0X3N0YV9jZmkuaWQgPSBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfY2ZpLmlkKTsKKwlody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQgPQorCSAgICBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQpOworCWh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tID0KKwkgICAgbGUxNl90b19jcHUoaHctPmNhcF9hY3Rfc3RhX2NmaS5ib3R0b20pOworCWh3LT5jYXBfYWN0X3N0YV9jZmkudG9wID0gbGUxNl90b19jcHUoaHctPmNhcF9hY3Rfc3RhX2NmaS50b3ApOwogCi0JV0xBTl9MT0dfSU5GTygKLQkJIlNUQS1DRkk6QUNUOnJvbGU9MHglMDJ4OmlkPTB4JTAyeDp2YXI9MHglMDJ4OmIvdD0lZC8lZFxuIiwKLQkJaHctPmNhcF9hY3Rfc3RhX2NmaS5yb2xlLCBody0+Y2FwX2FjdF9zdGFfY2ZpLmlkLAotCQlody0+Y2FwX2FjdF9zdGFfY2ZpLnZhcmlhbnQsIGh3LT5jYXBfYWN0X3N0YV9jZmkuYm90dG9tLAotCQlody0+Y2FwX2FjdF9zdGFfY2ZpLnRvcCk7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiU1RBLUNGSTpBQ1Q6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAorCSAgICAgICBody0+Y2FwX2FjdF9zdGFfY2ZpLnJvbGUsIGh3LT5jYXBfYWN0X3N0YV9jZmkuaWQsCisJICAgICAgIGh3LT5jYXBfYWN0X3N0YV9jZmkudmFyaWFudCwgaHctPmNhcF9hY3Rfc3RhX2NmaS5ib3R0b20sCisJICAgICAgIGh3LT5jYXBfYWN0X3N0YV9jZmkudG9wKTsKIAogCS8qIENvbXBhdGliaWxpdHkgcmFuZ2UsIHN0YSBmL3cgYWN0b3IsIE1GSSBzdXBwbGllciAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX1NUQV9NRklBQ1RSQU5HRVMsCi0JCQkmaHctPmNhcF9hY3Rfc3RhX21maSwgc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFNUQV9NRklBQ1RSQU5HRVNcbiIpOworCQkJCQkmaHctPmNhcF9hY3Rfc3RhX21maSwKKwkJCQkJc2l6ZW9mKGhmYTM4NHhfY2FwbGV2ZWxfdCkpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmV0cmlldmUgU1RBX01GSUFDVFJBTkdFU1xuIik7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCS8qIGdldCBhbGwgdGhlIENvbXBhdGliaWxpdHkgcmFuZ2UsIHN0YXRpb24gZi93IGFjdG9yLCBNRkkgc3VwcGxpZXIKLQlmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLwotCWh3LT5jYXBfYWN0X3N0YV9tZmkucm9sZSA9IGhmYTM4NHgyaG9zdF8xNihody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUpOwotCWh3LT5jYXBfYWN0X3N0YV9tZmkuaWQgPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX21maS5pZCk7Ci0JaHctPmNhcF9hY3Rfc3RhX21maS52YXJpYW50ID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCk7Ci0JaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20gPSBoZmEzODR4Mmhvc3RfMTYoaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20pOwotCWh3LT5jYXBfYWN0X3N0YV9tZmkudG9wID0gaGZhMzg0eDJob3N0XzE2KGh3LT5jYXBfYWN0X3N0YV9tZmkudG9wKTsKKwkgICBmaWVsZHMgaW4gYnl0ZSBvcmRlciAqLworCWh3LT5jYXBfYWN0X3N0YV9tZmkucm9sZSA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3N0YV9tZmkucm9sZSk7CisJaHctPmNhcF9hY3Rfc3RhX21maS5pZCA9IGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3N0YV9tZmkuaWQpOworCWh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCA9CisJICAgIGxlMTZfdG9fY3B1KGh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCk7CisJaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20gPQorCSAgICBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfbWZpLmJvdHRvbSk7CisJaHctPmNhcF9hY3Rfc3RhX21maS50b3AgPSBsZTE2X3RvX2NwdShody0+Y2FwX2FjdF9zdGFfbWZpLnRvcCk7CiAKLQlXTEFOX0xPR19JTkZPKAotCQkiU1RBLU1GSTpBQ1Q6cm9sZT0weCUwMng6aWQ9MHglMDJ4OnZhcj0weCUwMng6Yi90PSVkLyVkXG4iLAotCQlody0+Y2FwX2FjdF9zdGFfbWZpLnJvbGUsIGh3LT5jYXBfYWN0X3N0YV9tZmkuaWQsCi0JCWh3LT5jYXBfYWN0X3N0YV9tZmkudmFyaWFudCwgaHctPmNhcF9hY3Rfc3RhX21maS5ib3R0b20sCi0JCWh3LT5jYXBfYWN0X3N0YV9tZmkudG9wKTsKKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJTVEEtTUZJOkFDVDpyb2xlPTB4JTAyeDppZD0weCUwMng6dmFyPTB4JTAyeDpiL3Q9JWQvJWRcbiIsCisJICAgICAgIGh3LT5jYXBfYWN0X3N0YV9tZmkucm9sZSwgaHctPmNhcF9hY3Rfc3RhX21maS5pZCwKKwkgICAgICAgaHctPmNhcF9hY3Rfc3RhX21maS52YXJpYW50LCBody0+Y2FwX2FjdF9zdGFfbWZpLmJvdHRvbSwKKwkgICAgICAgaHctPmNhcF9hY3Rfc3RhX21maS50b3ApOwogCiAJLyogU2VyaWFsIE51bWJlciAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUiwKLQkJCXNudW0sIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4pOwotCWlmICggIXJlc3VsdCApIHsKKwkJCQkJc251bSwgSEZBMzg0eF9SSURfTklDU0VSSUFMTlVNQkVSX0xFTik7CisJaWYgKCFyZXN1bHQpIHsKIAkJd2xhbl9ta3ByaW50c3RyKHNudW0sIEhGQTM4NHhfUklEX05JQ1NFUklBTE5VTUJFUl9MRU4sCiAJCQkJcHN0ciwgc2l6ZW9mKHBzdHIpKTsKLQkJV0xBTl9MT0dfSU5GTygiUHJpc20yIGNhcmQgU046ICVzXG4iLCBwc3RyKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUHJpc20yIGNhcmQgU046ICVzXG4iLCBwc3RyKTsKIAl9IGVsc2UgewotCQlXTEFOX0xPR19FUlJPUigiRmFpbGVkIHRvIHJldHJpZXZlIFByaXNtMiBDYXJkIFNOXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmV0cmlldmUgUHJpc20yIENhcmQgU05cbiIpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKIAkvKiBDb2xsZWN0IHRoZSBNQUMgYWRkcmVzcyAqLwogCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsIEhGQTM4NHhfUklEX0NORk9XTk1BQ0FERFIsCi0JCXdsYW5kZXYtPm5ldGRldi0+ZGV2X2FkZHIsIFdMQU5fQUREUl9MRU4pOwotCWlmICggcmVzdWx0ICE9IDAgKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmV0cmlldmUgbWFjIGFkZHJlc3NcbiIpOworCQkJCQl3bGFuZGV2LT5uZXRkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJaWYgKHJlc3VsdCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJldHJpZXZlIG1hYyBhZGRyZXNzXG4iKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCkBAIC05MzksMTAgKzkwNiwxMCBAQAogCWh3LT5kYm1hZGp1c3QgPSB0ZW1wOwogCiAJLyogT25seSBlbmFibGUgc2NhbiBieSBkZWZhdWx0IG9uIG5ld2VyIGZpcm13YXJlICovCi0gICAgICAgIGlmIChIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oaHctPmlkZW50X3N0YV9mdy5tYWpvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+aWRlbnRfc3RhX2Z3Lm1pbm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPAotCSAgICBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oMSw1LDUpKSB7CisJaWYgKEhGQTM4NHhfRklSTVdBUkVfVkVSU0lPTihody0+aWRlbnRfc3RhX2Z3Lm1ham9yLAorCQkJCSAgICAgaHctPmlkZW50X3N0YV9mdy5taW5vciwKKwkJCQkgICAgIGh3LT5pZGVudF9zdGFfZncudmFyaWFudCkgPAorCSAgICBIRkEzODR4X0ZJUk1XQVJFX1ZFUlNJT04oMSwgNSwgNSkpIHsKIAkJd2xhbmRldi0+bnNkY2FwcyB8PSBQODAyMTFfTlNEQ0FQX05PU0NBTjsKIAl9CiAKQEAgLTk1MCwxMyArOTE3LDExIEBACiAKIAlnb3RvIGRvbmU7CiBmYWlsZWQ6Ci0JV0xBTl9MT0dfRVJST1IoIkZhaWxlZCwgcmVzdWx0PSVkXG4iLCByZXN1bHQpOworCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkLCByZXN1bHQ9JWRcbiIsIHJlc3VsdCk7CiBkb25lOgotCURCRkVYSVQ7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX2dsb2JhbHNldHVwCiAqCkBAIC05NzcsNDMgKzk0MiwzMyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgaW50IHByaXNtMnN0YV9nbG9iYWxzZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCiB7Ci0JaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKIAogCS8qIFNldCB0aGUgbWF4aW11bSBmcmFtZSBzaXplICovCiAJcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfQ05GTUFYREFUQUxFTiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXTEFOX0RBVEFfTUFYTEVOKTsKKwkJCQkJV0xBTl9EQVRBX01BWExFTik7CiB9CiAKIHN0YXRpYyBpbnQgcHJpc20yc3RhX3NldG11bHRpY2FzdCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIG5ldGRldmljZV90ICpkZXYpCiB7CiAJaW50IHJlc3VsdCA9IDA7Ci0JaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKIAotCXUxNiAgcHJvbWlzYzsKLQotCURCRkVOVEVSOworCXUxNiBwcm9taXNjOwogCiAJLyogSWYgd2UncmUgbm90IHJlYWR5LCB3aGF0J3MgdGhlIHBvaW50PyAqLwotCWlmICggaHctPnN0YXRlICE9IEhGQTM4NHhfU1RBVEVfUlVOTklORyApCisJaWYgKGh3LT5zdGF0ZSAhPSBIRkEzODR4X1NUQVRFX1JVTk5JTkcpCiAJCWdvdG8gZXhpdDsKIAotCWlmICggKGRldi0+ZmxhZ3MgJiAoSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkpKSAhPSAwICkKKwlpZiAoKGRldi0+ZmxhZ3MgJiAoSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkpKSAhPSAwKQogCQlwcm9taXNjID0gUDgwMjExRU5VTV90cnV0aF90cnVlOwogCWVsc2UKIAkJcHJvbWlzYyA9IFA4MDIxMUVOVU1fdHJ1dGhfZmFsc2U7CiAKLQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTZfYXN5bmMoaHcsIEhGQTM4NHhfUklEX1BST01JU0NNT0RFLCBwcm9taXNjKTsKLQotCS8qIFhYWCBUT0RPOiBjb25maWd1cmUgdGhlIG11bHRpY2FzdCBsaXN0ICovCi0JLy8gQ0xFQVJfSFdfTVVMVElDQVNUX0xJU1QKLQkvLyBzdHJ1Y3QgZGV2X21jX2xpc3QgZWxlbWVudCA9IGRldi0+bWNfbGlzdDsKLQkvLyB3aGlsZSAoZWxlbWVudCAhPSBudWxsKSB7Ci0JLy8gIEhXX0FERF9NVUxUSUNBU1RfQUREUihlbGVtZW50LT5kbWlfYWRkciwgZG1pX2FkZHJsZW4pCi0JLy8gIGVsZW1lbnQgPSBlbGVtZW50LT5uZXh0OwotCS8vIH0KLQotIGV4aXQ6Ci0JREJGRVhJVDsKKwlyZXN1bHQgPQorCSAgICBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTZfYXN5bmMoaHcsIEhGQTM4NHhfUklEX1BST01JU0NNT0RFLAorCQkJCQkgICBwcm9taXNjKTsKK2V4aXQ6CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTAzNSwxNSArOTkwLDEzIEBACiAqIENhbGwgY29udGV4dDoKICoJaW50ZXJydXB0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfaGFuZG92ZXIod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfaGFuZG92ZXIod2xhbmRldmljZV90ICp3bGFuZGV2LAorCQkJCSAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotCURCRkVOVEVSOwotCVdMQU5fTE9HX0RFQlVHKDIsInJlY2VpdmVkIGluZm9mcmFtZTpIQU5ET1ZFUiAodW5oYW5kbGVkKVxuIik7Ci0JREJGRVhJVDsKKwlwcl9kZWJ1ZygicmVjZWl2ZWQgaW5mb2ZyYW1lOkhBTkRPVkVSICh1bmhhbmRsZWQpXG4iKTsKIAlyZXR1cm47CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9pbmZfdGFsbGllcwogKgpAQCAtMTA2MSwzNyArMTAxNCwzNCBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCWludGVycnVwdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX3RhbGxpZXMod2xhbmRldmljZV90ICp3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKK3N0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfdGFsbGllcyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCisJCQkJICBoZmEzODR4X0luZkZyYW1lX3QgKmluZikKIHsKLSAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7Ci0JdTE2CQkJKnNyYzE2OwotCXUzMgkJCSpkc3Q7Ci0JdTMyCQkJKnNyYzMyOwotCWludAkJCWk7Ci0JaW50CQkJY250OwotCi0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKKwl1MTYgKnNyYzE2OworCXUzMiAqZHN0OworCXUzMiAqc3JjMzI7CisJaW50IGk7CisJaW50IGNudDsKIAogCS8qCi0JKiogRGV0ZXJtaW5lIGlmIHRoZXNlIGFyZSAxNi1iaXQgb3IgMzItYml0IHRhbGxpZXMsIGJhc2VkIG9uIHRoZQotCSoqIHJlY29yZCBsZW5ndGggb2YgdGhlIGluZm8gcmVjb3JkLgotCSovCisJICoqIERldGVybWluZSBpZiB0aGVzZSBhcmUgMTYtYml0IG9yIDMyLWJpdCB0YWxsaWVzLCBiYXNlZCBvbiB0aGUKKwkgKiogcmVjb3JkIGxlbmd0aCBvZiB0aGUgaW5mbyByZWNvcmQuCisJICovCiAKIAljbnQgPSBzaXplb2YoaGZhMzg0eF9Db21tVGFsbGllczMyX3QpIC8gc2l6ZW9mKHUzMik7CiAJaWYgKGluZi0+ZnJhbWVsZW4gPiAyMikgewotCQlkc3QgICA9ICh1MzIgKikgJmh3LT50YWxsaWVzOwotCQlzcmMzMiA9ICh1MzIgKikgJmluZi0+aW5mby5jb21tdGFsbGllczMyOworCQlkc3QgPSAodTMyICopJmh3LT50YWxsaWVzOworCQlzcmMzMiA9ICh1MzIgKikmaW5mLT5pbmZvLmNvbW10YWxsaWVzMzI7CiAJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgZHN0KyssIHNyYzMyKyspCi0JCQkqZHN0ICs9IGhmYTM4NHgyaG9zdF8zMigqc3JjMzIpOworCQkJKmRzdCArPSBsZTMyX3RvX2NwdSgqc3JjMzIpOwogCX0gZWxzZSB7Ci0JCWRzdCAgID0gKHUzMiAqKSAmaHctPnRhbGxpZXM7Ci0JCXNyYzE2ID0gKHUxNiAqKSAmaW5mLT5pbmZvLmNvbW10YWxsaWVzMTY7CisJCWRzdCA9ICh1MzIgKikmaHctPnRhbGxpZXM7CisJCXNyYzE2ID0gKHUxNiAqKSZpbmYtPmluZm8uY29tbXRhbGxpZXMxNjsKIAkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBkc3QrKywgc3JjMTYrKykKLQkJCSpkc3QgKz0gaGZhMzg0eDJob3N0XzE2KCpzcmMxNik7CisJCQkqZHN0ICs9IGxlMTZfdG9fY3B1KCpzcmMxNik7CiAJfQogCi0JREJGRVhJVDsKLQogCXJldHVybjsKIH0KIApAQCAtMTExNiw0NCArMTA2Niw0MCBAQAogCQkJCSAgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewogCi0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OwotCWludAkJCW5ic3M7Ci0JaGZhMzg0eF9TY2FuUmVzdWx0X3QJKnNyID0gJihpbmYtPmluZm8uc2NhbnJlc3VsdCk7Ci0JaW50CQkJaTsKLQloZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdAlqb2lucmVxOwotCWludAkJCXJlc3VsdDsKLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OworCWludCBuYnNzOworCWhmYTM4NHhfU2NhblJlc3VsdF90ICpzciA9ICYoaW5mLT5pbmZvLnNjYW5yZXN1bHQpOworCWludCBpOworCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90IGpvaW5yZXE7CisJaW50IHJlc3VsdDsKIAogCS8qIEdldCB0aGUgbnVtYmVyIG9mIHJlc3VsdHMsIGZpcnN0IGluIGJ5dGVzLCB0aGVuIGluIHJlc3VsdHMgKi8KIAluYnNzID0gKGluZi0+ZnJhbWVsZW4gKiBzaXplb2YodTE2KSkgLQotCQlzaXplb2YoaW5mLT5pbmZvdHlwZSkgLQotCQlzaXplb2YoaW5mLT5pbmZvLnNjYW5yZXN1bHQuc2NhbnJlYXNvbik7CisJICAgIHNpemVvZihpbmYtPmluZm90eXBlKSAtIHNpemVvZihpbmYtPmluZm8uc2NhbnJlc3VsdC5zY2FucmVhc29uKTsKIAluYnNzIC89IHNpemVvZihoZmEzODR4X1NjYW5SZXN1bHRTdWJfdCk7CiAKIAkvKiBQcmludCBlbSAqLwotCVdMQU5fTE9HX0RFQlVHKDEsInJ4IHNjYW5yZXN1bHRzLCByZWFzb249JWQsIG5ic3M9JWQ6XG4iLAotCQlpbmYtPmluZm8uc2NhbnJlc3VsdC5zY2FucmVhc29uLCBuYnNzKTsKLQlmb3IgKCBpID0gMDsgaSA8IG5ic3M7IGkrKykgewotCQlXTEFOX0xPR19ERUJVRygxLCAiY2hpZD0lZCBhbmw9JWQgc2w9JWQgYmNuaW50PSVkXG4iLAotCQkJc3ItPnJlc3VsdFtpXS5jaGlkLAotCQkJc3ItPnJlc3VsdFtpXS5hbmwsCi0JCQlzci0+cmVzdWx0W2ldLnNsLAotCQkJc3ItPnJlc3VsdFtpXS5iY25pbnQpOwotCQlXTEFOX0xPR19ERUJVRygxLCAiICBjYXBpbmZvPTB4JTA0eCBwcm9iZXJlc3BfcmF0ZT0lZFxuIiwKLQkJCXNyLT5yZXN1bHRbaV0uY2FwaW5mbywKLQkJCXNyLT5yZXN1bHRbaV0ucHJvYmVyZXNwX3JhdGUpOworCXByX2RlYnVnKCJyeCBzY2FucmVzdWx0cywgcmVhc29uPSVkLCBuYnNzPSVkOlxuIiwKKwkgICAgICAgaW5mLT5pbmZvLnNjYW5yZXN1bHQuc2NhbnJlYXNvbiwgbmJzcyk7CisJZm9yIChpID0gMDsgaSA8IG5ic3M7IGkrKykgeworCQlwcl9kZWJ1ZygiY2hpZD0lZCBhbmw9JWQgc2w9JWQgYmNuaW50PSVkXG4iLAorCQkgICAgICAgc3ItPnJlc3VsdFtpXS5jaGlkLAorCQkgICAgICAgc3ItPnJlc3VsdFtpXS5hbmwsCisJCSAgICAgICBzci0+cmVzdWx0W2ldLnNsLCBzci0+cmVzdWx0W2ldLmJjbmludCk7CisJCXByX2RlYnVnKCIgIGNhcGluZm89MHglMDR4IHByb2JlcmVzcF9yYXRlPSVkXG4iLAorCQkgICAgICAgc3ItPnJlc3VsdFtpXS5jYXBpbmZvLCBzci0+cmVzdWx0W2ldLnByb2JlcmVzcF9yYXRlKTsKIAl9CiAJLyogaXNzdWUgYSBqb2luIHJlcXVlc3QgKi8KIAlqb2lucmVxLmNoYW5uZWwgPSBzci0+cmVzdWx0WzBdLmNoaWQ7Ci0JbWVtY3B5KCBqb2lucmVxLmJzc2lkLCBzci0+cmVzdWx0WzBdLmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7Ci0JcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyggaHcsCi0JCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVCwKLQkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworCW1lbWNweShqb2lucmVxLmJzc2lkLCBzci0+cmVzdWx0WzBdLmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7CisJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywKKwkJCQkJSEZBMzg0eF9SSURfSk9JTlJFUVVFU1QsCisJCQkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOwogCWlmIChyZXN1bHQpIHsKLQkJV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhqb2lucmVxKSBmYWlsZWQsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJzZXRjb25maWcoam9pbnJlcSkgZmFpbGVkLCByZXN1bHQ9JWRcbiIsCisJCSAgICAgICByZXN1bHQpOwogCX0KIAotCURCRkVYSVQ7CiAJcmV0dXJuOwogfQogCkBAIC0xMTc3LDE4ICsxMTIzLDE2IEBACiBzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2hvc3RzY2FucmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkJCSAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCiB7Ci0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OwotCWludAkJCW5ic3M7Ci0JREJGRU5URVI7CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKKwlpbnQgbmJzczsKIAogCW5ic3MgPSAoaW5mLT5mcmFtZWxlbiAtIDMpIC8gMzI7Ci0JV0xBTl9MT0dfREVCVUcoMSwgIlJlY2VpdmVkICVkIGhvc3RzY2FuIHJlc3VsdHNcbiIsIG5ic3MpOworCXByX2RlYnVnKCJSZWNlaXZlZCAlZCBob3N0c2NhbiByZXN1bHRzXG4iLCBuYnNzKTsKIAogCWlmIChuYnNzID4gMzIpCiAJCW5ic3MgPSAzMjsKIAotCWlmIChody0+c2NhbnJlc3VsdHMpCi0JCWtmcmVlKGh3LT5zY2FucmVzdWx0cyk7CisJa2ZyZWUoaHctPnNjYW5yZXN1bHRzKTsKIAogCWh3LT5zY2FucmVzdWx0cyA9IGttYWxsb2Moc2l6ZW9mKGhmYTM4NHhfSW5mRnJhbWVfdCksIEdGUF9BVE9NSUMpOwogCW1lbWNweShody0+c2NhbnJlc3VsdHMsIGluZiwgc2l6ZW9mKGhmYTM4NHhfSW5mRnJhbWVfdCkpOwpAQCAtMTE5NiwxMSArMTE0MCw5IEBACiAJaWYgKG5ic3MgPT0gMCkKIAkJbmJzcyA9IC0xOwogCi0gICAgICAgIC8qIE5vdGlmeS93YWtlIHRoZSBzbGVlcGluZyBjYWxsZXIuICovCi0gICAgICAgIGh3LT5zY2FuZmxhZyA9IG5ic3M7Ci0gICAgICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmaHctPmNtZHEpOwotCi0JREJGRVhJVDsKKwkvKiBOb3RpZnkvd2FrZSB0aGUgc2xlZXBpbmcgY2FsbGVyLiAqLworCWh3LT5zY2FuZmxhZyA9IG5ic3M7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZody0+Y21kcSk7CiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyMjMsNTUgKzExNjUsNjAgQEAKIHN0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfY2hpbmZvcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkJCWhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKLQl1bnNpZ25lZCBpbnQJCWksIG47CisJaGZhMzg0eF90ICpodyA9IChoZmEzODR4X3QgKikgd2xhbmRldi0+cHJpdjsKKwl1bnNpZ25lZCBpbnQgaSwgbjsKIAotCURCRkVOVEVSOwogCWh3LT5jaGFubmVsX2luZm8ucmVzdWx0cy5zY2FuY2hhbm5lbHMgPQotCQloZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5zY2FuY2hhbm5lbHMpOwotI2lmIDAKLQltZW1jcHkoJmluZi0+aW5mby5jaGluZm9yZXN1bHQsICZody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMsIHNpemVvZihoZmEzODR4X0NoSW5mb1Jlc3VsdF90KSk7Ci0jZW5kaWYKKwkgICAgbGUxNl90b19jcHUoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5zY2FuY2hhbm5lbHMpOwogCi0JZm9yIChpPTAsIG49MDsgaTxIRkEzODR4X0NISU5GT1JFU1VMVF9NQVg7IGkrKykgewotCQlpZiAoaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnNjYW5jaGFubmVscyAmICgxPDxpKSkgewotCQkJaW50IAljaGFubmVsPWhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS5jaGlkKS0xOwotCQkJaGZhMzg0eF9DaEluZm9SZXN1bHRTdWJfdCAqY2hpbmZvcmVzdWx0PSZody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdOwotCQkJY2hpbmZvcmVzdWx0LT5jaGlkICAgPSBjaGFubmVsOwotCQkJY2hpbmZvcmVzdWx0LT5hbmwgICAgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uYW5sKTsKLQkJCWNoaW5mb3Jlc3VsdC0+cG5sICAgID0gaGZhMzg0eDJob3N0XzE2KGluZi0+aW5mby5jaGluZm9yZXN1bHQucmVzdWx0W25dLnBubCk7Ci0JCQljaGluZm9yZXN1bHQtPmFjdGl2ZSA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS5hY3RpdmUpOwotCQkJV0xBTl9MT0dfREVCVUcoMiwgImNoaW5mbzogY2hhbm5lbCAlZCwgJXMgbGV2ZWwgKGF2Zy9wZWFrKT0lZC8lZCBkQiwgcGNmICVkXG4iLAotCQkJCQljaGFubmVsKzEsCi0JCQkJCWNoaW5mb3Jlc3VsdC0+YWN0aXZlICYKLQkJCQkJSEZBMzg0eF9DSElORk9SRVNVTFRfQlNTQUNUSVZFID8gInNpZ25hbCIgOiAibm9pc2UiLAotCQkJCQljaGluZm9yZXN1bHQtPmFubCwgY2hpbmZvcmVzdWx0LT5wbmwsCi0JCQkJCWNoaW5mb3Jlc3VsdC0+YWN0aXZlICYgSEZBMzg0eF9DSElORk9SRVNVTFRfUENGQUNUSVZFID8gMSA6IDAKLQkJCSk7CisJZm9yIChpID0gMCwgbiA9IDA7IGkgPCBIRkEzODR4X0NISU5GT1JFU1VMVF9NQVg7IGkrKykgeworCQlpZiAoaHctPmNoYW5uZWxfaW5mby5yZXN1bHRzLnNjYW5jaGFubmVscyAmICgxIDw8IGkpKSB7CisJCQlpbnQgY2hhbm5lbCA9CisJCQkgICAgbGUxNl90b19jcHUoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uCisJCQkJCSAgICBjaGlkKSAtIDE7CisJCQloZmEzODR4X0NoSW5mb1Jlc3VsdFN1Yl90ICpjaGluZm9yZXN1bHQgPQorCQkJICAgICZody0+Y2hhbm5lbF9pbmZvLnJlc3VsdHMucmVzdWx0W2NoYW5uZWxdOworCQkJY2hpbmZvcmVzdWx0LT5jaGlkID0gY2hhbm5lbDsKKwkJCWNoaW5mb3Jlc3VsdC0+YW5sID0KKwkJCSAgICBsZTE2X3RvX2NwdShpbmYtPmluZm8uY2hpbmZvcmVzdWx0LnJlc3VsdFtuXS4KKwkJCQkJICAgIGFubCk7CisJCQljaGluZm9yZXN1bHQtPnBubCA9CisJCQkgICAgbGUxNl90b19jcHUoaW5mLT5pbmZvLmNoaW5mb3Jlc3VsdC5yZXN1bHRbbl0uCisJCQkJCSAgICBwbmwpOworCQkJY2hpbmZvcmVzdWx0LT5hY3RpdmUgPQorCQkJICAgIGxlMTZfdG9fY3B1KGluZi0+aW5mby5jaGluZm9yZXN1bHQucmVzdWx0W25dLgorCQkJCQkgICAgYWN0aXZlKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImNoaW5mbzogY2hhbm5lbCAlZCwgJXMgbGV2ZWwgKGF2Zy9wZWFrKT0lZC8lZCBkQiwgcGNmICVkXG4iLAorCQkJICAgICAgIGNoYW5uZWwgKyAxLAorCQkJICAgICAgIGNoaW5mb3Jlc3VsdC0+CisJCQkgICAgICAgYWN0aXZlICYgSEZBMzg0eF9DSElORk9SRVNVTFRfQlNTQUNUSVZFID8KKwkJCSAgICAgICAic2lnbmFsIiA6ICJub2lzZSIsIGNoaW5mb3Jlc3VsdC0+YW5sLAorCQkJICAgICAgIGNoaW5mb3Jlc3VsdC0+cG5sLAorCQkJICAgICAgIGNoaW5mb3Jlc3VsdC0+CisJCQkgICAgICAgYWN0aXZlICYgSEZBMzg0eF9DSElORk9SRVNVTFRfUENGQUNUSVZFID8gMSA6IDApOwogCQkJbisrOwogCQl9CiAJfQogCWF0b21pY19zZXQoJmh3LT5jaGFubmVsX2luZm8uZG9uZSwgMik7CiAKIAlody0+Y2hhbm5lbF9pbmZvLmNvdW50ID0gbjsKLQlEQkZFWElUOwogCXJldHVybjsKIH0KIAogdm9pZCBwcmlzbTJzdGFfcHJvY2Vzc2luZ19kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0JaGZhMzg0eF90CQkqaHcgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGhmYTM4NHgsIGxpbmtfYmgpOwotCXdsYW5kZXZpY2VfdCAgICAgICAgICAgICp3bGFuZGV2ID0gaHctPndsYW5kZXY7CisJaGZhMzg0eF90ICpodyA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaGZhMzg0eCwgbGlua19iaCk7CisJd2xhbmRldmljZV90ICp3bGFuZGV2ID0gaHctPndsYW5kZXY7CiAJaGZhMzg0eF9ieXRlc3RyMzJfdCBzc2lkOwotCWludAkJCXJlc3VsdDsKKwlpbnQgcmVzdWx0OwogCi0JREJGRU5URVI7CiAJLyogRmlyc3QgbGV0J3MgcHJvY2VzcyB0aGUgYXV0aCBmcmFtZXMgKi8KIAl7Ci0JCXN0cnVjdCBza19idWZmICAgICAgICAgICpza2I7CisJCXN0cnVjdCBza19idWZmICpza2I7CiAJCWhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mOwogCi0JCXdoaWxlICggKHNrYiA9IHNrYl9kZXF1ZXVlKCZody0+YXV0aHEpKSApIHsKKwkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaHctPmF1dGhxKSkpIHsKIAkJCWluZiA9IChoZmEzODR4X0luZkZyYW1lX3QgKikgc2tiLT5kYXRhOwogCQkJcHJpc20yc3RhX2luZl9hdXRocmVxX2RlZmVyKHdsYW5kZXYsIGluZik7CiAJCX0KQEAgLTEyODQsNyArMTIzMSw3IEBACiAKIAlody0+bGlua19zdGF0dXMgPSBody0+bGlua19zdGF0dXNfbmV3OwogCi0Jc3dpdGNoKGh3LT5saW5rX3N0YXR1cykgeworCXN3aXRjaCAoaHctPmxpbmtfc3RhdHVzKSB7CiAJY2FzZSBIRkEzODR4X0xJTktfTk9UQ09OTkVDVEVEOgogCQkvKiBJJ20gY3VycmVudGx5IGFzc3VtaW5nIHRoYXQgdGhpcyBpcyB0aGUgaW5pdGlhbCBsaW5rCiAJCSAqIHN0YXRlLiAgSXQgc2hvdWxkIG9ubHkgYmUgcG9zc2libGUgaW1tZWRpYXRlbHkKQEAgLTEyOTQsNyArMTI0MSw3IEBACiAJCSAqLwogCQluZXRpZl9jYXJyaWVyX29mZih3bGFuZGV2LT5uZXRkZXYpOwogCi0JCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9Tk9UQ09OTkVDVEVEICh1bmhhbmRsZWQpXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAibGlua3N0YXR1cz1OT1RDT05ORUNURUQgKHVuaGFuZGxlZClcbiIpOwogCQlicmVhazsKIAogCWNhc2UgSEZBMzg0eF9MSU5LX0NPTk5FQ1RFRDoKQEAgLTEzMTEsNTMgKzEyNTgsNTYgQEAKIAkJbmV0aWZfY2Fycmllcl9vbih3bGFuZGV2LT5uZXRkZXYpOwogCiAJCS8qIElmIHdlIGFyZSBqb2luaW5nIGEgc3BlY2lmaWMgQVAsIHNldCBvdXIgc3RhdGUgYW5kIHJlc2V0IHJldHJpZXMgKi8KLQkJaWYoaHctPmpvaW5fYXAgPT0gMSkKKwkJaWYgKGh3LT5qb2luX2FwID09IDEpCiAJCQlody0+am9pbl9hcCA9IDI7CiAJCWh3LT5qb2luX3JldHJpZXMgPSA2MDsKIAogCQkvKiBEb24ndCBjYWxsIHRoaXMgaW4gbW9uaXRvciBtb2RlICovCi0JCWlmICggd2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUiApIHsKLQkJCXUxNgkJCXBvcnRzdGF0dXM7CisJCWlmICh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKSB7CisJCQl1MTYgcG9ydHN0YXR1czsKIAotCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1DT05ORUNURURcbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAibGlua3N0YXR1cz1DT05ORUNURURcbiIpOwogCiAJCQkvKiBGb3Igbm9uLXVzYiBkZXZpY2VzLCB3ZSBjYW4gdXNlIHRoZSBzeW5jIHZlcnNpb25zICovCiAJCQkvKiBDb2xsZWN0IHRoZSBCU1NJRCwgYW5kIHNldCBzdGF0ZSB0byBhbGxvdyB0eCAqLwogCiAJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAogCQkJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwKLQkJCQkJCQl3bGFuZGV2LT5ic3NpZCwgV0xBTl9CU1NJRF9MRU4pOwotCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAotCQkJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOworCQkJCQkJCXdsYW5kZXYtPmJzc2lkLAorCQkJCQkJCVdMQU5fQlNTSURfTEVOKTsKKwkJCWlmIChyZXN1bHQpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRworCQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKKwkJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQogCiAJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAogCQkJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lELAogCQkJCQkJCSZzc2lkLCBzaXplb2Yoc3NpZCkpOwotCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAotCQkJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsIHJlc3VsdCk7CisJCQlpZiAocmVzdWx0KSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQogCQkJcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoKGhmYTM4NHhfYnl0ZXN0cl90ICopJnNzaWQsCi0JCQkJCQkocDgwMjExcHN0cmRfdCAqKSAmd2xhbmRldi0+c3NpZCk7CisJCQkJCQkocDgwMjExcHN0cmRfdCAqKSZ3bGFuZGV2LT4KKwkJCQkJCXNzaWQpOwogCiAJCQkvKiBDb2xsZWN0IHRoZSBwb3J0IHN0YXR1cyAqLwogCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAotCQkJCQkJCSAgSEZBMzg0eF9SSURfUE9SVFNUQVRVUywgJnBvcnRzdGF0dXMpOwotCQkJaWYgKCByZXN1bHQgKSB7Ci0JCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAotCQkJCQkgICAgICAgSEZBMzg0eF9SSURfUE9SVFNUQVRVUywgcmVzdWx0KTsKKwkJCQkJCQkgIEhGQTM4NHhfUklEX1BPUlRTVEFUVVMsCisJCQkJCQkJICAmcG9ydHN0YXR1cyk7CisJCQlpZiAocmVzdWx0KSB7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCisJCQkJICAgICAgIEhGQTM4NHhfUklEX1BPUlRTVEFUVVMsIHJlc3VsdCk7CiAJCQkJZ290byBmYWlsZWQ7CiAJCQl9CiAJCQl3bGFuZGV2LT5tYWNtb2RlID0KLQkJCQkocG9ydHN0YXR1cyA9PSBIRkEzODR4X1BTVEFUVVNfQ09OTl9JQlNTKSA/Ci0JCQkJV0xBTl9NQUNNT0RFX0lCU1NfU1RBIDogV0xBTl9NQUNNT0RFX0VTU19TVEE7CisJCQkgICAgKHBvcnRzdGF0dXMgPT0gSEZBMzg0eF9QU1RBVFVTX0NPTk5fSUJTUykgPworCQkJICAgIFdMQU5fTUFDTU9ERV9JQlNTX1NUQSA6IFdMQU5fTUFDTU9ERV9FU1NfU1RBOwogCiAJCQkvKiBHZXQgdGhlIGJhbGwgcm9sbGluZyBvbiB0aGUgY29tbXMgcXVhbGl0eSBzdHVmZiAqLwogCQkJcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcigmaHctPmNvbW1zcXVhbF9iaCk7CkBAIC0xMzc0LDE4ICsxMzI0LDIwIEBACiAJCSAqIEluZGljYXRlIERlYXV0aGVudGljYXRpb24KIAkJICogQmxvY2sgVHJhbnNtaXRzLCBJZ25vcmUgcmVjZWl2ZXMgb2YgZGF0YSBmcmFtZXMKIAkJICovCi0JCWlmKGh3LT5qb2luX2FwID09IDIpCi0JCXsKLQkJCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90ICAgICAgam9pbnJlcTsKKwkJaWYgKGh3LT5qb2luX2FwID09IDIpIHsKKwkJCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90IGpvaW5yZXE7CiAJCQlqb2lucmVxID0gaHctPmpvaW5yZXE7CiAJCQkvKiBTZW5kIHRoZSBqb2luIHJlcXVlc3QgKi8KLQkJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAotCQkJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAotCQkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOwotCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1ESVNDT05ORUNURUQgKHJlLXN1Ym1pdHRpbmcgam9pbilcbiIpOworCQkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywKKwkJCQkJICAgICAgIEhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAorCQkJCQkgICAgICAgJmpvaW5yZXEsCisJCQkJCSAgICAgICBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJsaW5rc3RhdHVzPURJU0NPTk5FQ1RFRCAocmUtc3VibWl0dGluZyBqb2luKVxuIik7CiAJCX0gZWxzZSB7CiAJCQlpZiAod2xhbmRldi0+bmV0ZGV2LT50eXBlID09IEFSUEhSRF9FVEhFUikKLQkJCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPURJU0NPTk5FQ1RFRCAodW5oYW5kbGVkKVxuIik7CisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSAgICAgICAibGlua3N0YXR1cz1ESVNDT05ORUNURUQgKHVuaGFuZGxlZClcbiIpOwogCQl9CiAJCXdsYW5kZXYtPm1hY21vZGUgPSBXTEFOX01BQ01PREVfTk9ORTsKIApAQCAtMTQwOCwzMCArMTM2MCwyOSBAQAogCQkgKiBJbmRpY2F0ZSBSZWFzc29jaWF0aW9uCiAJCSAqIEVuYWJsZSBUcmFuc21pdHMsIFJlY2VpdmVzIGFuZCBwYXNzIHVwIGRhdGEgZnJhbWVzCiAJCSAqLwotCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFQX0NIQU5HRVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gImxpbmtzdGF0dXM9QVBfQ0hBTkdFXG4iKTsKIAogCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAogCQkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELAogCQkJCQkJd2xhbmRldi0+YnNzaWQsIFdMQU5fQlNTSURfTEVOKTsKLQkJaWYgKCByZXN1bHQgKSB7Ci0JCQlXTEFOX0xPR19ERUJVRygxLAotCQkJCSAgICAgICAiZ2V0Y29uZmlnKDB4JTAyeCkgZmFpbGVkLCByZXN1bHQgPSAlZFxuIiwKLQkJCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRCU1NJRCwgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAKIAkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKIAkJCQkJCUhGQTM4NHhfUklEX0NVUlJFTlRTU0lELAogCQkJCQkJJnNzaWQsIHNpemVvZihzc2lkKSk7Ci0JCWlmICggcmVzdWx0ICkgewotCQkJV0xBTl9MT0dfREVCVUcoMSwKLQkJCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCi0JCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOworCQlpZiAocmVzdWx0KSB7CisJCQlwcmludGsoS0VSTl9ERUJVRworCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOwogCQkJZ290byBmYWlsZWQ7CiAJCX0KIAkJcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoKGhmYTM4NHhfYnl0ZXN0cl90ICopJnNzaWQsCi0JCQkJCShwODAyMTFwc3RyZF90ICopICZ3bGFuZGV2LT5zc2lkKTsKLQorCQkJCQkocDgwMjExcHN0cmRfdCAqKSZ3bGFuZGV2LT5zc2lkKTsKIAogCQlody0+bGlua19zdGF0dXMgPSBIRkEzODR4X0xJTktfQ09OTkVDVEVEOwogCQluZXRpZl9jYXJyaWVyX29uKHdsYW5kZXYtPm5ldGRldik7CkBAIC0xNDUwLDcgKzE0MDEsNyBAQAogCQkgKiBSZXNwb25zZToKIAkJICogQmxvY2sgVHJhbnNtaXRzLCBJZ25vcmUgcmVjZWl2ZXMgb2YgZGF0YSBmcmFtZXMKIAkJICovCi0JCVdMQU5fTE9HX0lORk8oImxpbmtzdGF0dXM9QVBfT1VUT0ZSQU5HRSAodW5oYW5kbGVkKVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gImxpbmtzdGF0dXM9QVBfT1VUT0ZSQU5HRSAodW5oYW5kbGVkKVxuIik7CiAKIAkJbmV0aWZfY2Fycmllcl9vZmYod2xhbmRldi0+bmV0ZGV2KTsKIApAQCAtMTQ2Myw3ICsxNDE0LDcgQEAKIAkJICogUmVzcG9uc2U6CiAJCSAqIEVuYWJsZSBUcmFuc21pdHMsIFJlY2VpdmVzIGFuZCBwYXNzIHVwIGRhdGEgZnJhbWVzCiAJCSAqLwotCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFQX0lOUkFOR0VcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJsaW5rc3RhdHVzPUFQX0lOUkFOR0VcbiIpOwogCiAJCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19DT05ORUNURUQ7CiAJCW5ldGlmX2NhcnJpZXJfb24od2xhbmRldi0+bmV0ZGV2KTsKQEAgLTE0NzksMTcgKzE0MzAsMTggQEAKIAkJICogUmVzcG9uc2U6CiAJCSAqIERpc2FibGUgVHJhbnNtaXRzLCBJZ25vcmUgcmVjZWl2ZXMgb2YgZGF0YSBmcmFtZXMKIAkJICovCi0JCWlmKGh3LT5qb2luX2FwICYmIC0taHctPmpvaW5fcmV0cmllcyA+IDApCi0JCXsKLQkJCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90ICAgICAgam9pbnJlcTsKKwkJaWYgKGh3LT5qb2luX2FwICYmIC0taHctPmpvaW5fcmV0cmllcyA+IDApIHsKKwkJCWhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90IGpvaW5yZXE7CiAJCQlqb2lucmVxID0gaHctPmpvaW5yZXE7CiAJCQkvKiBTZW5kIHRoZSBqb2luIHJlcXVlc3QgKi8KLQkJCWhmYTM4NHhfZHJ2cl9zZXRjb25maWcoIGh3LAotCQkJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAotCQkJCSZqb2lucmVxLCBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOwotCQkJV0xBTl9MT0dfSU5GTygibGlua3N0YXR1cz1BU1NPQ0ZBSUwgKHJlLXN1Ym1pdHRpbmcgam9pbilcbiIpOworCQkJaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywKKwkJCQkJICAgICAgIEhGQTM4NHhfUklEX0pPSU5SRVFVRVNULAorCQkJCQkgICAgICAgJmpvaW5yZXEsCisJCQkJCSAgICAgICBIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4pOworCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJICAgICAgICJsaW5rc3RhdHVzPUFTU09DRkFJTCAocmUtc3VibWl0dGluZyBqb2luKVxuIik7CiAJCX0gZWxzZSB7Ci0JCQlXTEFOX0xPR19JTkZPKCJsaW5rc3RhdHVzPUFTU09DRkFJTCAodW5oYW5kbGVkKVxuIik7CisJCQlwcmludGsoS0VSTl9JTkZPICJsaW5rc3RhdHVzPUFTU09DRkFJTCAodW5oYW5kbGVkKVxuIik7CiAJCX0KIAogCQluZXRpZl9jYXJyaWVyX29mZih3bGFuZGV2LT5uZXRkZXYpOwpAQCAtMTQ5OCw4ICsxNDUwLDggQEAKIAogCWRlZmF1bHQ6CiAJCS8qIFRoaXMgaXMgYmFkLCBJTyBwb3J0IHByb2JsZW1zPyAqLwotCQlXTEFOX0xPR19XQVJOSU5HKAotCQkJInVua25vd24gbGlua3N0YXR1cz0weCUwMnhcbiIsIGh3LT5saW5rX3N0YXR1cyk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJ1bmtub3duIGxpbmtzdGF0dXM9MHglMDJ4XG4iLCBody0+bGlua19zdGF0dXMpOwogCQlnb3RvIGZhaWxlZDsKIAkJYnJlYWs7CiAJfQpAQCAtMTUwOSw4ICsxNDYxLDggQEAKIAlwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQod2xhbmRldiwgd2xhbmRldi0+bGlua3N0YXR1cyk7CiAjZW5kaWYKIAotIGZhaWxlZDoKLQlEQkZFWElUOworZmFpbGVkOgorCXJldHVybjsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNTMzLDE1ICsxNDg1LDEyIEBACiBzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2xpbmtzdGF0dXMod2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCSAgICAgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCiB7Ci0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKil3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CiAKLQlEQkZFTlRFUjsKLQotCWh3LT5saW5rX3N0YXR1c19uZXcgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLmxpbmtzdGF0dXMubGlua3N0YXR1cyk7CisJaHctPmxpbmtfc3RhdHVzX25ldyA9IGxlMTZfdG9fY3B1KGluZi0+aW5mby5saW5rc3RhdHVzLmxpbmtzdGF0dXMpOwogCiAJc2NoZWR1bGVfd29yaygmaHctPmxpbmtfYmgpOwogCi0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKQEAgLTE1NjYsNDUgKzE1MTUsNDMgQEAKIHN0YXRpYyB2b2lkIHByaXNtMnN0YV9pbmZfYXNzb2NzdGF0dXMod2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCSAgICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKLQloZmEzODR4X0Fzc29jU3RhdHVzX3QJcmVjOwotCWludAkJCWk7Ci0KLQlEQkZFTlRFUjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OworCWhmYTM4NHhfQXNzb2NTdGF0dXNfdCByZWM7CisJaW50IGk7CiAKIAltZW1jcHkoJnJlYywgJmluZi0+aW5mby5hc3NvY3N0YXR1cywgc2l6ZW9mKHJlYykpOwotCXJlYy5hc3NvY3N0YXR1cyA9IGhmYTM4NHgyaG9zdF8xNihyZWMuYXNzb2NzdGF0dXMpOwotCXJlYy5yZWFzb24gICAgICA9IGhmYTM4NHgyaG9zdF8xNihyZWMucmVhc29uKTsKKwlyZWMuYXNzb2NzdGF0dXMgPSBsZTE2X3RvX2NwdShyZWMuYXNzb2NzdGF0dXMpOworCXJlYy5yZWFzb24gPSBsZTE2X3RvX2NwdShyZWMucmVhc29uKTsKIAogCS8qCi0JKiogRmluZCB0aGUgYWRkcmVzcyBpbiB0aGUgbGlzdCBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAgSWYgaXQgd2Fzbid0Ci0JKiogZm91bmQsIHRoZW4gdGhpcyBhZGRyZXNzIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGF1dGhlbnRpY2F0ZWQgYW5kCi0JKiogc29tZXRoaW5nIHdlaXJkIGhhcyBoYXBwZW5lZCBpZiB0aGlzIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYW4KLQkqKiAiYXV0aGVudGljYXRpb24gZmFpbGVkIiBtZXNzYWdlLiAgSWYgdGhlIGFkZHJlc3Mgd2FzIGZvdW5kLCB0aGVuCi0JKiogc2V0IHRoZSAiYXNzb2NpYXRlZCIgZmxhZyBmb3IgdGhhdCBzdGF0aW9uLCBiYXNlZCBvbiB3aGV0aGVyIHRoZQotCSoqIHN0YXRpb24gaXMgYXNzb2NpYXRpbmcgb3IgbG9zaW5nIGl0cyBhc3NvY2lhdGlvbi4gIFNvbWV0aGluZyB3ZWlyZAotCSoqIGhhcyBhbHNvIGhhcHBlbmVkIGlmIHdlIGZpbmQgdGhlIGFkZHJlc3MgaW4gdGhlIGxpc3Qgb2YgYXV0aGVudGljYXRlZAotCSoqIHN0YXRpb25zIGJ1dCB3ZSBhcmUgZ2V0dGluZyBhbiAiYXV0aGVudGljYXRpb24gZmFpbGVkIiBtZXNzYWdlLgotCSovCisJICoqIEZpbmQgdGhlIGFkZHJlc3MgaW4gdGhlIGxpc3Qgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gIElmIGl0IHdhc24ndAorCSAqKiBmb3VuZCwgdGhlbiB0aGlzIGFkZHJlc3MgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgYXV0aGVudGljYXRlZCBhbmQKKwkgKiogc29tZXRoaW5nIHdlaXJkIGhhcyBoYXBwZW5lZCBpZiB0aGlzIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gYW4KKwkgKiogImF1dGhlbnRpY2F0aW9uIGZhaWxlZCIgbWVzc2FnZS4gIElmIHRoZSBhZGRyZXNzIHdhcyBmb3VuZCwgdGhlbgorCSAqKiBzZXQgdGhlICJhc3NvY2lhdGVkIiBmbGFnIGZvciB0aGF0IHN0YXRpb24sIGJhc2VkIG9uIHdoZXRoZXIgdGhlCisJICoqIHN0YXRpb24gaXMgYXNzb2NpYXRpbmcgb3IgbG9zaW5nIGl0cyBhc3NvY2lhdGlvbi4gIFNvbWV0aGluZyB3ZWlyZAorCSAqKiBoYXMgYWxzbyBoYXBwZW5lZCBpZiB3ZSBmaW5kIHRoZSBhZGRyZXNzIGluIHRoZSBsaXN0IG9mIGF1dGhlbnRpY2F0ZWQKKwkgKiogc3RhdGlvbnMgYnV0IHdlIGFyZSBnZXR0aW5nIGFuICJhdXRoZW50aWNhdGlvbiBmYWlsZWQiIG1lc3NhZ2UuCisJICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgaHctPmF1dGhsaXN0LmNudDsgaSsrKQotCQlpZiAobWVtY21wKHJlYy5zdGFfYWRkciwgaHctPmF1dGhsaXN0LmFkZHJbaV0sIFdMQU5fQUREUl9MRU4pID09IDApCisJCWlmIChtZW1jbXAocmVjLnN0YV9hZGRyLCBody0+YXV0aGxpc3QuYWRkcltpXSwgRVRIX0FMRU4pID09IDApCiAJCQlicmVhazsKIAogCWlmIChpID49IGh3LT5hdXRobGlzdC5jbnQpIHsKIAkJaWYgKHJlYy5hc3NvY3N0YXR1cyAhPSBIRkEzODR4X0FTU09DU1RBVFVTX0FVVEhGQUlMKQotCQkJV0xBTl9MT0dfV0FSTklORygiYXNzb2NzdGF0dXMgaW5mbyBmcmFtZSByZWNlaXZlZCBmb3Igbm9uLWF1dGhlbnRpY2F0ZWQgc3RhdGlvbi5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJhc3NvY3N0YXR1cyBpbmZvIGZyYW1lIHJlY2VpdmVkIGZvciBub24tYXV0aGVudGljYXRlZCBzdGF0aW9uLlxuIik7CiAJfSBlbHNlIHsKIAkJaHctPmF1dGhsaXN0LmFzc29jW2ldID0KLQkJCShyZWMuYXNzb2NzdGF0dXMgPT0gSEZBMzg0eF9BU1NPQ1NUQVRVU19TVEFBU1NPQyB8fAotCQkJIHJlYy5hc3NvY3N0YXR1cyA9PSBIRkEzODR4X0FTU09DU1RBVFVTX1JFQVNTT0MpOworCQkgICAgKHJlYy5hc3NvY3N0YXR1cyA9PSBIRkEzODR4X0FTU09DU1RBVFVTX1NUQUFTU09DIHx8CisJCSAgICAgcmVjLmFzc29jc3RhdHVzID09IEhGQTM4NHhfQVNTT0NTVEFUVVNfUkVBU1NPQyk7CiAKIAkJaWYgKHJlYy5hc3NvY3N0YXR1cyA9PSBIRkEzODR4X0FTU09DU1RBVFVTX0FVVEhGQUlMKQotCQkJV0xBTl9MT0dfV0FSTklORygiYXV0aGZhaWwgYXNzb2NzdGF0dXMgaW5mbyBmcmFtZSByZWNlaXZlZCBmb3IgYXV0aGVudGljYXRlZCBzdGF0aW9uLlxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAgICAgImF1dGhmYWlsIGFzc29jc3RhdHVzIGluZm8gZnJhbWUgcmVjZWl2ZWQgZm9yIGF1dGhlbnRpY2F0ZWQgc3RhdGlvbi5cbiIpOwogCX0KIAotCURCRkVYSVQ7Ci0KIAlyZXR1cm47CiB9CiAKQEAgLTE2MzAsMTEgKzE1NzcsOSBAQAogc3RhdGljIHZvaWQgcHJpc20yc3RhX2luZl9hdXRocmVxKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwKIAkJCQkgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlEQkZFTlRFUjsKLQogCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCppbmYpKTsKIAlpZiAoc2tiKSB7CiAJCXNrYl9wdXQoc2tiLCBzaXplb2YoKmluZikpOwpAQCAtMTY0MiwxMzIgKzE1ODcsMTI5IEBACiAJCXNrYl9xdWV1ZV90YWlsKCZody0+YXV0aHEsIHNrYik7CiAJCXNjaGVkdWxlX3dvcmsoJmh3LT5saW5rX2JoKTsKIAl9Ci0KLQlEQkZFWElUOwogfQogCiBzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX2F1dGhyZXFfZGVmZXIod2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCQloZmEzODR4X0luZkZyYW1lX3QgKmluZikKIHsKLSAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7Ci0JaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdCAgcmVjOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIHdsYW5kZXYtPnByaXY7CisJaGZhMzg0eF9hdXRoZW50aWNhdGVTdGF0aW9uX2RhdGFfdCByZWM7CiAKLQlpbnQgICAgaSwgYWRkZWQsIHJlc3VsdCwgY250OwotCXU4ICAqYWRkcjsKLQotCURCRkVOVEVSOworCWludCBpLCBhZGRlZCwgcmVzdWx0LCBjbnQ7CisJdTggKmFkZHI7CiAKIAkvKgotCSoqIEJ1aWxkIHRoZSBBdXRoZW50aWNhdGVTdGF0aW9uIHJlY29yZC4gIEluaXRpYWxpemUgaXQgZm9yIGRlbnlpbmcKLQkqKiBhdXRoZW50aWNhdGlvbi4KLQkqLworCSAqKiBCdWlsZCB0aGUgQXV0aGVudGljYXRlU3RhdGlvbiByZWNvcmQuICBJbml0aWFsaXplIGl0IGZvciBkZW55aW5nCisJICoqIGF1dGhlbnRpY2F0aW9uLgorCSAqLwogCi0JbWVtY3B5KHJlYy5hZGRyZXNzLCBpbmYtPmluZm8uYXV0aHJlcS5zdGFfYWRkciwgV0xBTl9BRERSX0xFTik7CisJbWVtY3B5KHJlYy5hZGRyZXNzLCBpbmYtPmluZm8uYXV0aHJlcS5zdGFfYWRkciwgRVRIX0FMRU4pOwogCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c191bnNwZWNfZmFpbHVyZTsKIAogCS8qCi0JKiogQXV0aGVudGljYXRlIGJhc2VkIG9uIHRoZSBhY2Nlc3MgbW9kZS4KLQkqLworCSAqKiBBdXRoZW50aWNhdGUgYmFzZWQgb24gdGhlIGFjY2VzcyBtb2RlLgorCSAqLwogCiAJc3dpdGNoIChody0+YWNjZXNzbW9kZSkgewotCQljYXNlIFdMQU5fQUNDRVNTX05PTkU6CisJY2FzZSBXTEFOX0FDQ0VTU19OT05FOgogCi0JCQkvKgotCQkJKiogRGVueSBhbGwgbmV3IGF1dGhlbnRpY2F0aW9ucy4gIEhvd2V2ZXIsIGlmIGEgc3RhdGlvbgotCQkJKiogaXMgQUxSRUFEWSBhdXRoZW50aWNhdGVkLCB0aGVuIGFjY2VwdCBpdC4KLQkJCSovCisJCS8qCisJCSAqKiBEZW55IGFsbCBuZXcgYXV0aGVudGljYXRpb25zLiAgSG93ZXZlciwgaWYgYSBzdGF0aW9uCisJCSAqKiBpcyBBTFJFQURZIGF1dGhlbnRpY2F0ZWQsIHRoZW4gYWNjZXB0IGl0LgorCQkgKi8KIAotCQkJZm9yIChpID0gMDsgaSA8IGh3LT5hdXRobGlzdC5jbnQ7IGkrKykKLQkJCQlpZiAobWVtY21wKHJlYy5hZGRyZXNzLCBody0+YXV0aGxpc3QuYWRkcltpXSwKLQkJCQkJCVdMQU5fQUREUl9MRU4pID09IDApIHsKLQkJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBXTEFOX0FDQ0VTU19BTEw6Ci0KLQkJCS8qCi0JCQkqKiBBbGxvdyBhbGwgYXV0aGVudGljYXRpb25zLgotCQkJKi8KLQotCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7Ci0JCQlicmVhazsKLQotCQljYXNlIFdMQU5fQUNDRVNTX0FMTE9XOgotCi0JCQkvKgotCQkJKiogT25seSBhbGxvdyB0aGUgYXV0aGVudGljYXRpb24gaWYgdGhlIE1BQyBhZGRyZXNzCi0JCQkqKiBpcyBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIGFkZHJlc3Nlcy4KLQkJCSoqCi0JCQkqKiBTaW5jZSB0aGlzIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2UgbWF5IGJlIGhlcmUKLQkJCSoqIHdoaWxlIHRoZSBhY2Nlc3MgbGlzdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nCi0JCQkqKiB1cGRhdGVkLiAgQ2hvb3NlIHRoZSBsaXN0IHdoaWNoIGlzIGN1cnJlbnRseSBva2F5LgotCQkJKiogU2VlICJwcmlzbTJtaWJfcHJpdl9hY2Nlc3NhbGxvdygpIiBmb3IgZGV0YWlscy4KLQkJCSovCi0KLQkJCWlmIChody0+YWxsb3cubW9kaWZ5ID09IDApIHsKLQkJCQljbnQgID0gaHctPmFsbG93LmNudDsKLQkJCQlhZGRyID0gaHctPmFsbG93LmFkZHJbMF07Ci0JCQl9IGVsc2UgewotCQkJCWNudCAgPSBody0+YWxsb3cuY250MTsKLQkJCQlhZGRyID0gaHctPmFsbG93LmFkZHIxWzBdOworCQlmb3IgKGkgPSAwOyBpIDwgaHctPmF1dGhsaXN0LmNudDsgaSsrKQorCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgaHctPmF1dGhsaXN0LmFkZHJbaV0sCisJCQkJICAgRVRIX0FMRU4pID09IDApIHsKKwkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKKwkJCQlicmVhazsKIAkJCX0KIAotCQkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBhZGRyICs9IFdMQU5fQUREUl9MRU4pCi0JCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgYWRkciwgV0xBTl9BRERSX0xFTikgPT0gMCkgewotCQkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQorCQlicmVhazsKIAotCQkJYnJlYWs7CisJY2FzZSBXTEFOX0FDQ0VTU19BTEw6CiAKLQkJY2FzZSBXTEFOX0FDQ0VTU19ERU5ZOgorCQkvKgorCQkgKiogQWxsb3cgYWxsIGF1dGhlbnRpY2F0aW9ucy4KKwkJICovCiAKLQkJCS8qCi0JCQkqKiBBbGxvdyB0aGUgYXV0aGVudGljYXRpb24gVU5MRVNTIHRoZSBNQUMgYWRkcmVzcyBpcwotCQkJKiogaW4gdGhlIGxpc3Qgb2YgZGVuaWVkIGFkZHJlc3Nlcy4KLQkJCSoqCi0JCQkqKiBTaW5jZSB0aGlzIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2UgbWF5IGJlIGhlcmUKLQkJCSoqIHdoaWxlIHRoZSBhY2Nlc3MgbGlzdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nCi0JCQkqKiB1cGRhdGVkLiAgQ2hvb3NlIHRoZSBsaXN0IHdoaWNoIGlzIGN1cnJlbnRseSBva2F5LgotCQkJKiogU2VlICJwcmlzbTJtaWJfcHJpdl9hY2Nlc3NkZW55KCkiIGZvciBkZXRhaWxzLgotCQkJKi8KKwkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7CisJCWJyZWFrOwogCi0JCQlpZiAoaHctPmRlbnkubW9kaWZ5ID09IDApIHsKLQkJCQljbnQgID0gaHctPmRlbnkuY250OwotCQkJCWFkZHIgPSBody0+ZGVueS5hZGRyWzBdOwotCQkJfSBlbHNlIHsKLQkJCQljbnQgID0gaHctPmRlbnkuY250MTsKLQkJCQlhZGRyID0gaHctPmRlbnkuYWRkcjFbMF07CisJY2FzZSBXTEFOX0FDQ0VTU19BTExPVzoKKworCQkvKgorCQkgKiogT25seSBhbGxvdyB0aGUgYXV0aGVudGljYXRpb24gaWYgdGhlIE1BQyBhZGRyZXNzCisJCSAqKiBpcyBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIGFkZHJlc3Nlcy4KKwkJICoqCisJCSAqKiBTaW5jZSB0aGlzIGlzIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgd2UgbWF5IGJlIGhlcmUKKwkJICoqIHdoaWxlIHRoZSBhY2Nlc3MgbGlzdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGJlaW5nCisJCSAqKiB1cGRhdGVkLiAgQ2hvb3NlIHRoZSBsaXN0IHdoaWNoIGlzIGN1cnJlbnRseSBva2F5LgorCQkgKiogU2VlICJwcmlzbTJtaWJfcHJpdl9hY2Nlc3NhbGxvdygpIiBmb3IgZGV0YWlscy4KKwkJICovCisKKwkJaWYgKGh3LT5hbGxvdy5tb2RpZnkgPT0gMCkgeworCQkJY250ID0gaHctPmFsbG93LmNudDsKKwkJCWFkZHIgPSBody0+YWxsb3cuYWRkclswXTsKKwkJfSBlbHNlIHsKKwkJCWNudCA9IGh3LT5hbGxvdy5jbnQxOworCQkJYWRkciA9IGh3LT5hbGxvdy5hZGRyMVswXTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgYWRkciArPSBFVEhfQUxFTikKKwkJCWlmIChtZW1jbXAocmVjLmFkZHJlc3MsIGFkZHIsIEVUSF9BTEVOKSA9PSAwKSB7CisJCQkJcmVjLnN0YXR1cyA9IFA4MDIxMUVOVU1fc3RhdHVzX3N1Y2Nlc3NmdWw7CisJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19zdWNjZXNzZnVsOworCQlicmVhazsKIAotCQkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrLCBhZGRyICs9IFdMQU5fQUREUl9MRU4pCi0JCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgYWRkciwgV0xBTl9BRERSX0xFTikgPT0gMCkgewotCQkJCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfdW5zcGVjX2ZhaWx1cmU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KKwljYXNlIFdMQU5fQUNDRVNTX0RFTlk6CiAKLQkJCWJyZWFrOworCQkvKgorCQkgKiogQWxsb3cgdGhlIGF1dGhlbnRpY2F0aW9uIFVOTEVTUyB0aGUgTUFDIGFkZHJlc3MgaXMKKwkJICoqIGluIHRoZSBsaXN0IG9mIGRlbmllZCBhZGRyZXNzZXMuCisJCSAqKgorCQkgKiogU2luY2UgdGhpcyBpcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIHdlIG1heSBiZSBoZXJlCisJCSAqKiB3aGlsZSB0aGUgYWNjZXNzIGxpc3QgaXMgaW4gdGhlIG1pZGRsZSBvZiBiZWluZworCQkgKiogdXBkYXRlZC4gIENob29zZSB0aGUgbGlzdCB3aGljaCBpcyBjdXJyZW50bHkgb2theS4KKwkJICoqIFNlZSAicHJpc20ybWliX3ByaXZfYWNjZXNzZGVueSgpIiBmb3IgZGV0YWlscy4KKwkJICovCisKKwkJaWYgKGh3LT5kZW55Lm1vZGlmeSA9PSAwKSB7CisJCQljbnQgPSBody0+ZGVueS5jbnQ7CisJCQlhZGRyID0gaHctPmRlbnkuYWRkclswXTsKKwkJfSBlbHNlIHsKKwkJCWNudCA9IGh3LT5kZW55LmNudDE7CisJCQlhZGRyID0gaHctPmRlbnkuYWRkcjFbMF07CisJCX0KKworCQlyZWMuc3RhdHVzID0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bDsKKworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyssIGFkZHIgKz0gRVRIX0FMRU4pCisJCQlpZiAobWVtY21wKHJlYy5hZGRyZXNzLCBhZGRyLCBFVEhfQUxFTikgPT0gMCkgeworCQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c191bnNwZWNfZmFpbHVyZTsKKwkJCQlicmVhazsKKwkJCX0KKworCQlicmVhazsKIAl9CiAKIAkvKgotCSoqIElmIHRoZSBhdXRoZW50aWNhdGlvbiBpcyBva2F5LCB0aGVuIGFkZCB0aGUgTUFDIGFkZHJlc3MgdG8gdGhlIGxpc3QKLQkqKiBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAgRG9uJ3QgYWRkIHRoZSBhZGRyZXNzIGlmIGl0IGlzIGFscmVhZHkgaW4KLQkqKiB0aGUgbGlzdC4gICg4MDIuMTFiIGRvZXMgbm90IHNlZW0gdG8gZGlzYWxsb3cgYSBzdGF0aW9uIGZyb20gaXNzdWluZwotCSoqIGFuIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Qgd2hlbiB0aGUgc3RhdGlvbiBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQuCi0JKiogRG9lcyB0aGlzIHNvcnQgb2YgdGhpbmcgZXZlciBoYXBwZW4/ICBXZSBtaWdodCBhcyB3ZWxsIGRvIHRoZSBjaGVjawotCSoqIGp1c3QgaW4gY2FzZS4pCi0JKi8KKwkgKiogSWYgdGhlIGF1dGhlbnRpY2F0aW9uIGlzIG9rYXksIHRoZW4gYWRkIHRoZSBNQUMgYWRkcmVzcyB0byB0aGUgbGlzdAorCSAqKiBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAgRG9uJ3QgYWRkIHRoZSBhZGRyZXNzIGlmIGl0IGlzIGFscmVhZHkgaW4KKwkgKiogdGhlIGxpc3QuICAoODAyLjExYiBkb2VzIG5vdCBzZWVtIHRvIGRpc2FsbG93IGEgc3RhdGlvbiBmcm9tIGlzc3VpbmcKKwkgKiogYW4gYXV0aGVudGljYXRpb24gcmVxdWVzdCB3aGVuIHRoZSBzdGF0aW9uIGlzIGFscmVhZHkgYXV0aGVudGljYXRlZC4KKwkgKiogRG9lcyB0aGlzIHNvcnQgb2YgdGhpbmcgZXZlciBoYXBwZW4/ICBXZSBtaWdodCBhcyB3ZWxsIGRvIHRoZSBjaGVjaworCSAqKiBqdXN0IGluIGNhc2UuKQorCSAqLwogCiAJYWRkZWQgPSAwOwogCiAJaWYgKHJlYy5zdGF0dXMgPT0gUDgwMjExRU5VTV9zdGF0dXNfc3VjY2Vzc2Z1bCkgewogCQlmb3IgKGkgPSAwOyBpIDwgaHctPmF1dGhsaXN0LmNudDsgaSsrKQotCQkJaWYgKG1lbWNtcChyZWMuYWRkcmVzcywgaHctPmF1dGhsaXN0LmFkZHJbaV0sIFdMQU5fQUREUl9MRU4pID09IDApCisJCQlpZiAobWVtY21wKHJlYy5hZGRyZXNzLCBody0+YXV0aGxpc3QuYWRkcltpXSwgRVRIX0FMRU4pCisJCQkgICAgPT0gMCkKIAkJCQlicmVhazsKIAogCQlpZiAoaSA+PSBody0+YXV0aGxpc3QuY250KSB7CkBAIC0xNzc1LDcgKzE3MTcsNyBAQAogCQkJCXJlYy5zdGF0dXMgPSBQODAyMTFFTlVNX3N0YXR1c19hcF9mdWxsOwogCQkJfSBlbHNlIHsKIAkJCQltZW1jcHkoaHctPmF1dGhsaXN0LmFkZHJbaHctPmF1dGhsaXN0LmNudF0sCi0JCQkJCXJlYy5hZGRyZXNzLCBXTEFOX0FERFJfTEVOKTsKKwkJCQkgICAgICAgcmVjLmFkZHJlc3MsIEVUSF9BTEVOKTsKIAkJCQlody0+YXV0aGxpc3QuY250Kys7CiAJCQkJYWRkZWQgPSAxOwogCQkJfQpAQCAtMTc4MywyNyArMTcyNSwyNiBAQAogCX0KIAogCS8qCi0JKiogU2VuZCBiYWNrIHRoZSByZXN1bHRzIG9mIHRoZSBhdXRoZW50aWNhdGlvbi4gIElmIHRoaXMgZG9lc24ndCB3b3JrLAotCSoqIHRoZW4gbWFrZSBzdXJlIHRvIHJlbW92ZSB0aGUgYWRkcmVzcyBmcm9tIHRoZSBhdXRoZW50aWNhdGVkIGxpc3QgaWYKLQkqKiBpdCB3YXMgYWRkZWQuCi0JKi8KKwkgKiogU2VuZCBiYWNrIHRoZSByZXN1bHRzIG9mIHRoZSBhdXRoZW50aWNhdGlvbi4gIElmIHRoaXMgZG9lc24ndCB3b3JrLAorCSAqKiB0aGVuIG1ha2Ugc3VyZSB0byByZW1vdmUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgYXV0aGVudGljYXRlZCBsaXN0IGlmCisJICoqIGl0IHdhcyBhZGRlZC4KKwkgKi8KIAotCXJlYy5zdGF0dXMgPSBob3N0MmhmYTM4NHhfMTYocmVjLnN0YXR1cyk7CisJcmVjLnN0YXR1cyA9IGNwdV90b19sZTE2KHJlYy5zdGF0dXMpOwogCXJlYy5hbGdvcml0aG0gPSBpbmYtPmluZm8uYXV0aHJlcS5hbGdvcml0aG07CiAKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9BVVRIRU5USUNBVEVTVEEsCi0JCQkJCQkJJnJlYywgc2l6ZW9mKHJlYykpOworCQkJCQkmcmVjLCBzaXplb2YocmVjKSk7CiAJaWYgKHJlc3VsdCkgewotCQlpZiAoYWRkZWQpIGh3LT5hdXRobGlzdC5jbnQtLTsKLQkJV0xBTl9MT0dfRVJST1IoInNldGNvbmZpZyhhdXRoZW50aWNhdGVzdGF0aW9uKSBmYWlsZWQsIHJlc3VsdD0lZFxuIiwgcmVzdWx0KTsKKwkJaWYgKGFkZGVkKQorCQkJaHctPmF1dGhsaXN0LmNudC0tOworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJzZXRjb25maWcoYXV0aGVudGljYXRlc3RhdGlvbikgZmFpbGVkLCByZXN1bHQ9JWRcbiIsCisJCSAgICAgICByZXN1bHQpOwogCX0KLQotCURCRkVYSVQ7Ci0KIAlyZXR1cm47CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9pbmZfcHN1c2VyY250CiAqCkBAIC0xODI1LDc0ICsxNzY2LDE0IEBACiBzdGF0aWMgdm9pZCBwcmlzbTJzdGFfaW5mX3BzdXNlcmNudCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsCiAJCQkJICAgIGhmYTM4NHhfSW5mRnJhbWVfdCAqaW5mKQogewotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKKwloZmEzODR4X3QgKmh3ID0gKGhmYTM4NHhfdCAqKSB3bGFuZGV2LT5wcml2OwogCi0JREJGRU5URVI7Ci0KLQlody0+cHN1c2VyY291bnQgPSBoZmEzODR4Mmhvc3RfMTYoaW5mLT5pbmZvLnBzdXNlcmNudC51c2VyY250KTsKLQotCURCRkVYSVQ7CisJaHctPnBzdXNlcmNvdW50ID0gbGUxNl90b19jcHUoaW5mLT5pbmZvLnBzdXNlcmNudC51c2VyY250KTsKIAogCXJldHVybjsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0qIHByaXNtMnN0YV9ldl9kdGltCi0qCi0qIEhhbmRsZXMgdGhlIERUSU0gZWFybHkgd2FybmluZyBldmVudC4KLSoKLSogQXJndW1lbnRzOgotKgl3bGFuZGV2CQl3bGFuIGRldmljZSBzdHJ1Y3R1cmUKLSoKLSogUmV0dXJuczoKLSoJbm90aGluZwotKgotKiBTaWRlIGVmZmVjdHM6Ci0qCi0qIENhbGwgY29udGV4dDoKLSoJaW50ZXJydXB0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgcHJpc20yc3RhX2V2X2R0aW0od2xhbmRldmljZV90ICp3bGFuZGV2KQotewotI2lmIDAKLSAgICAgICAgaGZhMzg0eF90ICAgICAgICAgICAgICAgKmh3ID0gKGhmYTM4NHhfdCAqKXdsYW5kZXYtPnByaXY7Ci0jZW5kaWYKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19ERUJVRygzLCAiRFRJTSBldmVudCwgY3VycmVudGx5IHVuaGFuZGxlZC5cbiIpOwotCURCRkVYSVQ7Ci0JcmV0dXJuOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKiBwcmlzbTJzdGFfZXZfaW5mZHJvcAotKgotKiBIYW5kbGVzIHRoZSBJbmZEcm9wIGV2ZW50LgotKgotKiBBcmd1bWVudHM6Ci0qCXdsYW5kZXYJCXdsYW4gZGV2aWNlIHN0cnVjdHVyZQotKgotKiBSZXR1cm5zOgotKglub3RoaW5nCi0qCi0qIFNpZGUgZWZmZWN0czoKLSoKLSogQ2FsbCBjb250ZXh0OgotKglpbnRlcnJ1cHQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotdm9pZCBwcmlzbTJzdGFfZXZfaW5mZHJvcCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpCi17Ci0jaWYgMAotICAgICAgICBoZmEzODR4X3QgICAgICAgICAgICAgICAqaHcgPSAoaGZhMzg0eF90ICopd2xhbmRldi0+cHJpdjsKLSNlbmRpZgotCURCRkVOVEVSOwotCVdMQU5fTE9HX0RFQlVHKDMsICJJbmZvIGZyYW1lIGRyb3BwZWQgZHVlIHRvIGNhcmQgbWVtIGxvdy5cbiIpOwotCURCRkVYSVQ7Ci0JcmV0dXJuOwotfQotCi0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJzdGFfZXZfaW5mbwogKgogKiBIYW5kbGVzIHRoZSBJbmZvIGV2ZW50LgpAQCAtMTkxMSw1NiArMTc5Miw1MyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB2b2lkIHByaXNtMnN0YV9ldl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpCiB7Ci0JREJGRU5URVI7Ci0JaW5mLT5pbmZvdHlwZSA9IGhmYTM4NHgyaG9zdF8xNihpbmYtPmluZm90eXBlKTsKKwlpbmYtPmluZm90eXBlID0gbGUxNl90b19jcHUoaW5mLT5pbmZvdHlwZSk7CiAJLyogRGlzcGF0Y2ggKi8KLQlzd2l0Y2ggKCBpbmYtPmluZm90eXBlICkgewotCQljYXNlIEhGQTM4NHhfSVRfSEFORE9WRVJBRERSOgotCQkJcHJpc20yc3RhX2luZl9oYW5kb3Zlcih3bGFuZGV2LCBpbmYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSEZBMzg0eF9JVF9DT01NVEFMTElFUzoKLQkJCXByaXNtMnN0YV9pbmZfdGFsbGllcyh3bGFuZGV2LCBpbmYpOwotCQkJYnJlYWs7Ci0gICAgICAgICAgICAgICBjYXNlIEhGQTM4NHhfSVRfSE9TVFNDQU5SRVNVTFRTOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpc20yc3RhX2luZl9ob3N0c2NhbnJlc3VsdHMod2xhbmRldiwgaW5mKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCQljYXNlIEhGQTM4NHhfSVRfU0NBTlJFU1VMVFM6Ci0JCQlwcmlzbTJzdGFfaW5mX3NjYW5yZXN1bHRzKHdsYW5kZXYsIGluZik7Ci0JCQlicmVhazsKLQkJY2FzZSBIRkEzODR4X0lUX0NISU5GT1JFU1VMVFM6Ci0JCQlwcmlzbTJzdGFfaW5mX2NoaW5mb3Jlc3VsdHMod2xhbmRldiwgaW5mKTsKLQkJCWJyZWFrOwotCQljYXNlIEhGQTM4NHhfSVRfTElOS1NUQVRVUzoKLQkJCXByaXNtMnN0YV9pbmZfbGlua3N0YXR1cyh3bGFuZGV2LCBpbmYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSEZBMzg0eF9JVF9BU1NPQ1NUQVRVUzoKLQkJCXByaXNtMnN0YV9pbmZfYXNzb2NzdGF0dXMod2xhbmRldiwgaW5mKTsKLQkJCWJyZWFrOwotCQljYXNlIEhGQTM4NHhfSVRfQVVUSFJFUToKLQkJCXByaXNtMnN0YV9pbmZfYXV0aHJlcSh3bGFuZGV2LCBpbmYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSEZBMzg0eF9JVF9QU1VTRVJDTlQ6Ci0JCQlwcmlzbTJzdGFfaW5mX3BzdXNlcmNudCh3bGFuZGV2LCBpbmYpOwotCQkJYnJlYWs7Ci0JICAgICAgICBjYXNlIEhGQTM4NHhfSVRfS0VZSURDSEFOR0VEOgotCQkJV0xBTl9MT0dfV0FSTklORygiVW5oYW5kbGVkIElUX0tFWUlEQ0hBTkdFRFxuIik7Ci0JCQlicmVhazsKLQkgICAgICAgIGNhc2UgSEZBMzg0eF9JVF9BU1NPQ1JFUToKLQkJCVdMQU5fTE9HX1dBUk5JTkcoIlVuaGFuZGxlZCBJVF9BU1NPQ1JFUVxuIik7Ci0JCQlicmVhazsKLQkgICAgICAgIGNhc2UgSEZBMzg0eF9JVF9NSUNGQUlMVVJFOgotCQkJV0xBTl9MT0dfV0FSTklORygiVW5oYW5kbGVkIElUX01JQ0ZBSUxVUkVcbiIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlXTEFOX0xPR19XQVJOSU5HKAotCQkJCSJVbmtub3duIGluZm8gdHlwZT0weCUwMnhcbiIsIGluZi0+aW5mb3R5cGUpOwotCQkJYnJlYWs7CisJc3dpdGNoIChpbmYtPmluZm90eXBlKSB7CisJY2FzZSBIRkEzODR4X0lUX0hBTkRPVkVSQUREUjoKKwkJcHJpc20yc3RhX2luZl9oYW5kb3Zlcih3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfQ09NTVRBTExJRVM6CisJCXByaXNtMnN0YV9pbmZfdGFsbGllcyh3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfSE9TVFNDQU5SRVNVTFRTOgorCQlwcmlzbTJzdGFfaW5mX2hvc3RzY2FucmVzdWx0cyh3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfU0NBTlJFU1VMVFM6CisJCXByaXNtMnN0YV9pbmZfc2NhbnJlc3VsdHMod2xhbmRldiwgaW5mKTsKKwkJYnJlYWs7CisJY2FzZSBIRkEzODR4X0lUX0NISU5GT1JFU1VMVFM6CisJCXByaXNtMnN0YV9pbmZfY2hpbmZvcmVzdWx0cyh3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfTElOS1NUQVRVUzoKKwkJcHJpc20yc3RhX2luZl9saW5rc3RhdHVzKHdsYW5kZXYsIGluZik7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9JVF9BU1NPQ1NUQVRVUzoKKwkJcHJpc20yc3RhX2luZl9hc3NvY3N0YXR1cyh3bGFuZGV2LCBpbmYpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfQVVUSFJFUToKKwkJcHJpc20yc3RhX2luZl9hdXRocmVxKHdsYW5kZXYsIGluZik7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9JVF9QU1VTRVJDTlQ6CisJCXByaXNtMnN0YV9pbmZfcHN1c2VyY250KHdsYW5kZXYsIGluZik7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9JVF9LRVlJRENIQU5HRUQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuaGFuZGxlZCBJVF9LRVlJRENIQU5HRURcbiIpOworCQlicmVhazsKKwljYXNlIEhGQTM4NHhfSVRfQVNTT0NSRVE6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuaGFuZGxlZCBJVF9BU1NPQ1JFUVxuIik7CisJCWJyZWFrOworCWNhc2UgSEZBMzg0eF9JVF9NSUNGQUlMVVJFOgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmhhbmRsZWQgSVRfTUlDRkFJTFVSRVxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJVbmtub3duIGluZm8gdHlwZT0weCUwMnhcbiIsIGluZi0+aW5mb3R5cGUpOworCQlicmVhazsKIAl9Ci0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqIHByaXNtMnN0YV9ldl90eGV4YwogKgpAQCAtMTk4MiwxNSArMTg2MCwxMSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB2b2lkIHByaXNtMnN0YV9ldl90eGV4Yyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUxNiBzdGF0dXMpCiB7Ci0JREJGRU5URVI7CisJcHJfZGVidWcoIlR4RXhjIHN0YXR1cz0weCV4LlxuIiwgc3RhdHVzKTsKIAotCVdMQU5fTE9HX0RFQlVHKDMsICJUeEV4YyBzdGF0dXM9MHgleC5cbiIsIHN0YXR1cyk7Ci0KLQlEQkZFWElUOwogCXJldHVybjsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX2V2X3R4CiAqCkBAIC0yMDA5LDE1ICsxODgzLDEyIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHZvaWQgcHJpc20yc3RhX2V2X3R4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IHN0YXR1cykKIHsKLQlEQkZFTlRFUjsKLQlXTEFOX0xPR19ERUJVRyg0LCAiVHggQ29tcGxldGUsIHN0YXR1cz0weCUwNHhcbiIsIHN0YXR1cyk7CisJcHJfZGVidWcoIlR4IENvbXBsZXRlLCBzdGF0dXM9MHglMDR4XG4iLCBzdGF0dXMpOwogCS8qIHVwZGF0ZSBsaW51eCBuZXR3b3JrIHN0YXRzICovCiAJd2xhbmRldi0+bGludXhfc3RhdHMudHhfcGFja2V0cysrOwotCURCRkVYSVQ7CiAJcmV0dXJuOwogfQogCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBwcmlzbTJzdGFfZXZfcngKICoKQEAgLTIwMzYsMTEgKzE5MDcsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiB2b2lkIHByaXNtMnN0YV9ldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JREJGRU5URVI7Ci0KIAlwODAyMTFuZXRkZXZfcngod2xhbmRldiwgc2tiKTsKLQotCURCRkVYSVQ7CiAJcmV0dXJuOwogfQogCkBAIC0yMDYyLDExICsxOTI5LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogdm9pZCBwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldmljZV90ICp3bGFuZGV2KQogewotCURCRkVOVEVSOwotCiAJbmV0aWZfd2FrZV9xdWV1ZSh3bGFuZGV2LT5uZXRkZXYpOwotCi0JREJGRVhJVDsKIAlyZXR1cm47CiB9CiAKQEAgLTIwOTEsMTcgKzE5NTQsMTcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogc3RhdGljIHdsYW5kZXZpY2VfdCAqY3JlYXRlX3dsYW4odm9pZCkKIHsKLSAgICAgICAgd2xhbmRldmljZV90ICAgICp3bGFuZGV2ID0gTlVMTDsKLQloZmEzODR4X3QJKmh3ID0gTlVMTDsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBOVUxMOworCWhmYTM4NHhfdCAqaHcgPSBOVUxMOwogCi0gICAgICAJLyogQWxsb2Mgb3VyIHN0cnVjdHVyZXMgKi8KLQl3bGFuZGV2ID0Ja21hbGxvYyhzaXplb2Yod2xhbmRldmljZV90KSwgR0ZQX0tFUk5FTCk7Ci0JaHcgPQkJa21hbGxvYyhzaXplb2YoaGZhMzg0eF90KSwgR0ZQX0tFUk5FTCk7CisJLyogQWxsb2Mgb3VyIHN0cnVjdHVyZXMgKi8KKwl3bGFuZGV2ID0ga21hbGxvYyhzaXplb2Yod2xhbmRldmljZV90KSwgR0ZQX0tFUk5FTCk7CisJaHcgPSBrbWFsbG9jKHNpemVvZihoZmEzODR4X3QpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghd2xhbmRldiB8fCAhaHcpIHsKLQkJV0xBTl9MT0dfRVJST1IoIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLlxuIiwgZGV2X2luZm8pOwotCQlpZiAod2xhbmRldikJa2ZyZWUod2xhbmRldik7Ci0JCWlmIChodykJCWtmcmVlKGh3KTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKKwkJa2ZyZWUod2xhbmRldik7CisJCWtmcmVlKGh3KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0yMTIxLDI0ICsxOTg0LDIxIEBACiAJd2xhbmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gcHJpc20yc3RhX3NldG11bHRpY2FzdDsKIAl3bGFuZGV2LT50eF90aW1lb3V0ID0gaGZhMzg0eF90eF90aW1lb3V0OwogCi0Jd2xhbmRldi0+bnNkY2FwcyA9IFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCB8Ci0JICAgICAgICAgICAgICAgICAgIFA4MDIxMV9OU0RDQVBfQVVUT0pPSU47CisJd2xhbmRldi0+bnNkY2FwcyA9IFA4MDIxMV9OU0RDQVBfSFdGUkFHTUVOVCB8IFA4MDIxMV9OU0RDQVBfQVVUT0pPSU47CiAKIAkvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UgcHJpdmF0ZSBkYXRhIHN0dWN0dXJlLiAqLwotICAgICAgICBody0+ZG90MTFfZGVzaXJlZF9ic3NfdHlwZSA9IDE7CisJaHctPmRvdDExX2Rlc2lyZWRfYnNzX3R5cGUgPSAxOwogCiAJcmV0dXJuIHdsYW5kZXY7CiB9CiAKIHZvaWQgcHJpc20yc3RhX2NvbW1zcXVhbF9kZWZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0JaGZhMzg0eF90CQkqaHcgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGhmYTM4NHgsIGNvbW1zcXVhbF9iaCk7Ci0gICAgICAgIHdsYW5kZXZpY2VfdCAgICAgICAgICAgICp3bGFuZGV2ID0gaHctPndsYW5kZXY7CisJaGZhMzg0eF90ICpodyA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaGZhMzg0eCwgY29tbXNxdWFsX2JoKTsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBody0+d2xhbmRldjsKIAloZmEzODR4X2J5dGVzdHIzMl90IHNzaWQ7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlEQkZFTlRFUjsKLQogCWlmIChody0+d2xhbmRldi0+aHdyZW1vdmVkKQogCQlnb3RvIGRvbmU7CiAKQEAgLTIxNTUsNTggKzIwMTUsNDkgQEAKIAkJCQkJCUhGQTM4NHhfUklEX0RCTUNPTU1TUVVBTElUWV9MRU4pOwogCiAJCWlmIChyZXN1bHQpIHsKLQkJCVdMQU5fTE9HX0VSUk9SKCJlcnJvciBmZXRjaGluZyBjb21tc3F1YWxcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciBmZXRjaGluZyBjb21tc3F1YWxcbiIpOwogCQkJZ290byBkb25lOwogCQl9CiAKLQkJLy8gcXVhbC5DUV9jdXJyQlNTOyAvLyBsaW5rCi0JCS8vIEFTTF9jdXJyQlNTOyAgLy8gbGV2ZWwKLQkJLy8gcXVhbC5BTkxfY3VyckZDOyAvLyBub2lzZQotCi0JCVdMQU5fTE9HX0RFQlVHKDMsICJjb21tc3F1YWwgJWQgJWQgJWRcbiIsCi0JCQkgICAgICAgaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkNRX2N1cnJCU1MpLAotCQkJICAgICAgIGhmYTM4NHgyaG9zdF8xNihody0+cXVhbC5BU0xfY3VyckJTUyksCi0JCQkgICAgICAgaGZhMzg0eDJob3N0XzE2KGh3LT5xdWFsLkFOTF9jdXJyRkMpKTsKKwkJcHJfZGVidWcoImNvbW1zcXVhbCAlZCAlZCAlZFxuIiwKKwkJICAgICAgIGxlMTZfdG9fY3B1KGh3LT5xdWFsLkNRX2N1cnJCU1MpLAorCQkgICAgICAgbGUxNl90b19jcHUoaHctPnF1YWwuQVNMX2N1cnJCU1MpLAorCQkgICAgICAgbGUxNl90b19jcHUoaHctPnF1YWwuQU5MX2N1cnJGQykpOwogCX0KIAogCS8qIExhc3RseSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIEJTU0lEIGRpZG4ndCBjaGFuZ2Ugb24gdXMgKi8KIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LAogCQkJCQlIRkEzODR4X1JJRF9DVVJSRU5UQlNTSUQsCiAJCQkJCXdsYW5kZXYtPmJzc2lkLCBXTEFOX0JTU0lEX0xFTik7Ci0JaWYgKCByZXN1bHQgKSB7Ci0JCVdMQU5fTE9HX0RFQlVHKDEsCi0JCQkgICAgICAgImdldGNvbmZpZygweCUwMngpIGZhaWxlZCwgcmVzdWx0ID0gJWRcbiIsCi0JCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVEJTU0lELCByZXN1bHQpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhodywKIAkJCQkJSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsCiAJCQkJCSZzc2lkLCBzaXplb2Yoc3NpZCkpOwotCWlmICggcmVzdWx0ICkgewotCQlXTEFOX0xPR19ERUJVRygxLAotCQkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAotCQkJICAgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOworCWlmIChyZXN1bHQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJnZXRjb25maWcoMHglMDJ4KSBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLAorCQkgICAgICAgSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsIHJlc3VsdCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAJcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoKGhmYTM4NHhfYnl0ZXN0cl90ICopJnNzaWQsCi0JCQkJKHA4MDIxMXBzdHJkX3QgKikgJndsYW5kZXYtPnNzaWQpOwotCisJCQkJKHA4MDIxMXBzdHJkX3QgKikmd2xhbmRldi0+c3NpZCk7CiAKIAkvKiBSZXNjaGVkdWxlIHRpbWVyICovCiAJbW9kX3RpbWVyKCZody0+Y29tbXNxdWFsX3RpbWVyLCBqaWZmaWVzICsgSFopOwogCi0gZG9uZToKLQlEQkZFWElUOworZG9uZToKKwk7CiB9CiAKIHZvaWQgcHJpc20yc3RhX2NvbW1zcXVhbF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0gICAgICAgIGhmYTM4NHhfdCAgICAgICAgICAgICAgICpodyA9IChoZmEzODR4X3QgKikgZGF0YTsKLQotCURCRkVOVEVSOworCWhmYTM4NHhfdCAqaHcgPSAoaGZhMzg0eF90ICopIGRhdGE7CiAKIAlzY2hlZHVsZV93b3JrKCZody0+Y29tbXNxdWFsX2JoKTsKLQotCURCRkVYSVQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJ1c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnVzYi5jCmluZGV4IDhmN2IxZjIuLmQ4YTEyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnVzYi5jCkBAIC0xMSw0NCArMTEsNzAgQEAKIAl7UFJJU01fVVNCX0RFVklDRSgweDA0YmIsIDB4MDkyMiwgIklPRGF0YSBBaXJQb3J0IFdOLUIxMS9VU0JTIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MDdhYSwgMHgwMDEyLCAiQ29yZWdhIFdpcmVsZXNzIExBTiBVU0IgU3RpY2stMTEiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwOWFhLCAweDM2NDIsICJQcmlzbTIueCAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDE2NjgsIDB4MDQwOCwgIkFjdGlvbnRlYyBQcmlzbTIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDE2NjgsIDB4MDQyMSwgIkFjdGlvbnRlYyBQcmlzbTIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDE5MTUsIDB4MjIzNiwgIkxpbmtzeXMgV1VTQjExdjMuMCAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA2NmIsIDB4MjIxMiwgIkxpbmtzeXMgV1VTQjExdjIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA2NmIsIDB4MjIxMywgIkxpbmtzeXMgV1VTQjEydjEuMSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA2N2MsIDB4MTAyMiwgIlNpZW1lbnMgU3BlZWRTdHJlYW0gMTAyMiAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA0OWYsIDB4MDAzMywgIkNvbXBhcS9JbnRlbCBXMTAwIFBSTy9XaXJlbGVzcyAxMU1icHMgbXVsdGlwb3J0IFdMQU4gQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDA0MTEsIDB4MDAxNiwgIk1lbGNvIFdMSS1VU0ItUzExIDExTWJwcyBXTEFOIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwOGRlLCAweDdhMDEsICJQUklTTTI1IElFRUUgODAyLjExIE1pbmkgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHg4MDg2LCAweDExMTEsICJJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIgTEFOIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MGQ4ZSwgMHg3YTAxLCAiUFJJU00yNSBJRUVFIDgwMi4xMSBNaW5pIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMDZlLCAiTWljcm9zb2Z0IE1ONTEwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDE2NjgsIDB4MDQwOCwgIkFjdGlvbnRlYyBQcmlzbTIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgxNjY4LCAweDA0MjEsICJBY3Rpb250ZWMgUHJpc20yLjUgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MTkxNSwgMHgyMjM2LCAiTGlua3N5cyBXVVNCMTF2My4wIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDA2NmIsIDB4MjIxMiwgIkxpbmtzeXMgV1VTQjExdjIuNSAxMU1icHMgV0xBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwNjZiLCAweDIyMTMsICJMaW5rc3lzIFdVU0IxMnYxLjEgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MDY3YywgMHgxMDIyLCAiU2llbWVucyBTcGVlZFN0cmVhbSAxMDIyIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDA0OWYsIDB4MDAzMywKKwkgICJDb21wYXEvSW50ZWwgVzEwMCBQUk8vV2lyZWxlc3MgMTFNYnBzIG11bHRpcG9ydCBXTEFOIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MDQxMSwgMHgwMDE2LCAiTWVsY28gV0xJLVVTQi1TMTEgMTFNYnBzIFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwOGRlLCAweDdhMDEsICJQUklTTTI1IElFRUUgODAyLjExIE1pbmkgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4ODA4NiwgMHgxMTExLCAiSW50ZWwgUFJPL1dpcmVsZXNzIDIwMTFCIExBTiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwZDhlLCAweDdhMDEsICJQUklTTTI1IElFRUUgODAyLjExIE1pbmkgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MDQ1ZSwgMHgwMDZlLCAiTWljcm9zb2Z0IE1ONTEwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MDk2NywgMHgwMjA0LCAiQWNlciBXYXJwbGluayBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDBjZGUsIDB4MDAwMiwgIlotQ29tIDcyNS83MjYgUHJpc20yLjUgVVNCL1VTQiBJbnRlZ3JhdGVkIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MGNkZSwgMHgwMDA1LCAiWi1Db20gWGw3MzUgV2lyZWxlc3MgODAyLjExYiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDQxM2MsIDB4ODEwMCwgIkRlbGwgVHJ1ZU1vYmlsZSAxMTgwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MGIzYiwgMHgxNjAxLCAiQUxMTkVUIDAxOTMgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwYjNiLCAweDE2MDIsICJaeVhFTCBaeUFJUiBCMjAwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MGJhZiwgMHgwMGViLCAiVVNSb2JvdGljcyBVU1IxMTIwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MDQxMSwgMHgwMDI3LCAiTWVsY28gV0xJLVVTQi1LUzExRyAxMU1icHMgV0xBTiBBZGFwdGVyIil9LAotICAgICAgICB7UFJJU01fVVNCX0RFVklDRSgweDA0ZjEsIDB4MzAwOSwgIkpWQyBNUC1YUDcyNTAgQnVpbHRpbiBVU0IgV0xBTiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDBjZGUsIDB4MDAwMiwgIlotQ29tIDcyNS83MjYgUHJpc20yLjUgVVNCL1VTQiBJbnRlZ3JhdGVkIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDBjZGUsIDB4MDAwNSwgIlotQ29tIFhsNzM1IFdpcmVsZXNzIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4NDEzYywgMHg4MTAwLCAiRGVsbCBUcnVlTW9iaWxlIDExODAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MGIzYiwgMHgxNjAxLCAiQUxMTkVUIDAxOTMgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MGIzYiwgMHgxNjAyLCAiWnlYRUwgWnlBSVIgQjIwMCBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwYmFmLCAweDAwZWIsICJVU1JvYm90aWNzIFVTUjExMjAgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MDQxMSwgMHgwMDI3LCAiTWVsY28gV0xJLVVTQi1LUzExRyAxMU1icHMgV0xBTiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDA0ZjEsIDB4MzAwOSwgIkpWQyBNUC1YUDcyNTAgQnVpbHRpbiBVU0IgV0xBTiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MDg0NiwgMHg0MTEwLCAiTmV0R2VhciBNQTExMSIpfSwKLSAgICAgICAge1BSSVNNX1VTQl9ERVZJQ0UoMHgwM2YzLCAweDAwMjAsICJBZGFwdGVjIEFXTi04MDIwIFVTQiBXTEFOIEFkYXB0ZXIiKX0sCi0vLwl7UFJJU01fVVNCX0RFVklDRSgweDBhY2UsIDB4MTIwMSwgIlp5REFTIFpEMTIwMSBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRSgweDAzZjMsIDB4MDAyMCwgIkFkYXB0ZWMgQVdOLTgwMjAgVVNCIFdMQU4gQWRhcHRlciIpfSwKKy8qICAgICAge1BSSVNNX1VTQl9ERVZJQ0UoMHgwYWNlLCAweDEyMDEsICJaeURBUyBaRDEyMDEgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sICovCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgyODIxLCAweDMzMDAsICJBU1VTLVdMMTQwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MjAwMSwgMHgzNzAwLCAiRFdMLTEyMiBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDIwMDEsIDB4MzcwMiwgIkRXTC0xMjAgUmV2IEYgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4MjAwMSwgMHgzNzAyLCAiRFdMLTEyMCBSZXYgRiBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDUwYzIsIDB4NDAxMywgIkF2ZXJhdGVjIFVTQiBXTEFOIEFkYXB0ZXIiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgyYzAyLCAweDE0ZWEsICJQbGFuZXggR1ctVVMxMUggV0xBTiBVU0IgQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDEyNGEsIDB4MTY4YiwgIkFpcnZhc3QgUFJJU00zIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwODNhLCAweDM1MDMsICJULVNpbnVzIDExMSBVU0IgV0xBTiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MjgyMSwgMHgzMzAwLCAiSGF3a2luZyBIaWdoREIgVVNCIEFkYXB0ZXIiKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHgwNDExLCAweDAwNDQsICJNZWxjbyBXTEktVVNCLUtCMTEgMTFNYnBzIFdMQU4gQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwNDExLCAweDAwNDQsICJNZWxjbyBXTEktVVNCLUtCMTEgMTFNYnBzIFdMQU4gQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDE2NjgsIDB4NjEwNiwgIlJPUEVYIEZyZWVMYW4gODAyLjExYiBVU0IgQWRhcHRlciIpfSwKLQl7UFJJU01fVVNCX0RFVklDRSgweDEyNGEsIDB4NDAxNywgIlBoZWVuZXQgV0wtNTAzSUEgODAyLjExYiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgxMjRhLCAweDQwMTcsICJQaGVlbmV0IFdMLTUwM0lBIDgwMi4xMWIgVVNCIEFkYXB0ZXIiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgwYmIyLCAweDAzMDIsICJBbWJpdCBNaWNyb3N5c3RlbXMgQ29ycC4iKX0sCi0Je1BSSVNNX1VTQl9ERVZJQ0UoMHg5MDE2LCAweDE4MmQsICJTaXRlY29tIFdMLTAyMiA4MDIuMTFiIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MDU0MywgMHgwZjAxLCAiVmlld1NvbmljIEFpcnN5bmMgVVNCIEFkYXB0ZXIgMTFNYnBzIChQcmlzbTIuNSkiKX0sCisJe1BSSVNNX1VTQl9ERVZJQ0UKKwkgKDB4OTAxNiwgMHgxODJkLCAiU2l0ZWNvbSBXTC0wMjIgODAyLjExYiBVU0IgQWRhcHRlciIpfSwKKwl7UFJJU01fVVNCX0RFVklDRQorCSAoMHgwNTQzLCAweDBmMDEsICJWaWV3U29uaWMgQWlyc3luYyBVU0IgQWRhcHRlciAxMU1icHMgKFByaXNtMi41KSIpfSwKIAl7IC8qIHRlcm1pbmF0b3IgKi8gfQogfTsKIApAQCAtNzUsMjkgKzEwMSwyNiBAQAogKglJJ20gbm90IHN1cmUsIGFzc3VtZSBpdCdzIGludGVycnVwdC4KICoKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIGludCBwcmlzbTJzdGFfcHJvYmVfdXNiKAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0JY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCBwcmlzbTJzdGFfcHJvYmVfdXNiKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CiAKLQl3bGFuZGV2aWNlX3QJKndsYW5kZXYgPSBOVUxMOwotCWhmYTM4NHhfdAkqaHcgPSBOVUxMOwotCWludCAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKLQotCURCRkVOVEVSOworCXdsYW5kZXZpY2VfdCAqd2xhbmRldiA9IE5VTEw7CisJaGZhMzg0eF90ICpodyA9IE5VTEw7CisJaW50IHJlc3VsdCA9IDA7CiAKIAlkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CiAKIAlpZiAoKHdsYW5kZXYgPSBjcmVhdGVfd2xhbigpKSA9PSBOVUxMKSB7Ci0JCVdMQU5fTE9HX0VSUk9SKCIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS5cbiIsIGRldl9pbmZvKTsKIAkJcmVzdWx0ID0gLUVJTzsKIAkJZ290byBmYWlsZWQ7CiAJfQogCWh3ID0gd2xhbmRldi0+cHJpdjsKIAotCWlmICggd2xhbl9zZXR1cCh3bGFuZGV2KSAhPSAwICkgewotCQlXTEFOX0xPR19FUlJPUigiJXM6IHdsYW5fc2V0dXAoKSBmYWlsZWQuXG4iLCBkZXZfaW5mbyk7CisJaWYgKHdsYW5fc2V0dXAod2xhbmRldikgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB3bGFuX3NldHVwKCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOwogCQlyZXN1bHQgPSAtRUlPOwogCQlnb3RvIGZhaWxlZDsKIAl9CkBAIC0xMTQsMTUgKzEzNywxNCBAQAogCS8qIERvIGEgY2hpcC1sZXZlbCByZXNldCBvbiB0aGUgTUFDICovCiAJaWYgKHByaXNtMl9kb3Jlc2V0KSB7CiAJCXJlc3VsdCA9IGhmYTM4NHhfY29yZXJlc2V0KGh3LAotCQkJCXByaXNtMl9yZXNldF9ob2xkdGltZSwKLQkJCQlwcmlzbTJfcmVzZXRfc2V0dGxldGltZSwgMCk7CisJCQkJCSAgIHByaXNtMl9yZXNldF9ob2xkdGltZSwKKwkJCQkJICAgcHJpc20yX3Jlc2V0X3NldHRsZXRpbWUsIDApOwogCQlpZiAocmVzdWx0ICE9IDApIHsKIAkJCXVucmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KTsKIAkJCWhmYTM4NHhfZGVzdHJveShodyk7CiAJCQlyZXN1bHQgPSAtRUlPOwotCQkJV0xBTl9MT0dfRVJST1IoCi0JCQkJIiVzOiBoZmEzODR4X2NvcmVyZXNldCgpIGZhaWxlZC5cbiIsCi0JCQkJZGV2X2luZm8pOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBoZmEzODR4X2NvcmVyZXNldCgpIGZhaWxlZC5cbiIsIGRldl9pbmZvKTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9CiAJfQpAQCAtMTMxLDMwICsxNTMsMjggQEAKIAogCXdsYW5kZXYtPm1zZHN0YXRlID0gV0xBTl9NU0RfSFdQUkVTRU5UOwogCi0gICAgICAgIGlmICggcmVnaXN0ZXJfd2xhbmRldih3bGFuZGV2KSAhPSAwICkgewotCQlXTEFOX0xPR19FUlJPUigiJXM6IHJlZ2lzdGVyX3dsYW5kZXYoKSBmYWlsZWQuXG4iLCBkZXZfaW5mbyk7CisJaWYgKHJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldikgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWdpc3Rlcl93bGFuZGV2KCkgZmFpbGVkLlxuIiwgZGV2X2luZm8pOwogCQlyZXN1bHQgPSAtRUlPOwogCQlnb3RvIGZhaWxlZDsKLSAgICAgICAgfQorCX0KIAogLyogZW5hYmxlIHRoZSBjYXJkICovCiAJcHJpc20yc3RhX2lmc3RhdGUod2xhbmRldiwgUDgwMjExRU5VTV9pZnN0YXRlX2VuYWJsZSk7CiAKIAlnb3RvIGRvbmU7CiAKLSBmYWlsZWQ6Ci0JaWYgKHdsYW5kZXYpCWtmcmVlKHdsYW5kZXYpOwotCWlmIChodykJCWtmcmVlKGh3KTsKK2ZhaWxlZDoKKwlrZnJlZSh3bGFuZGV2KTsKKwlrZnJlZShodyk7CiAJd2xhbmRldiA9IE5VTEw7CiAKLSBkb25lOgotCURCRkVYSVQ7Ci0KK2RvbmU6CisJcDgwMjExX2FsbG93X2lvY3Rscyh3bGFuZGV2KTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgd2xhbmRldik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogcHJpc20yc3RhX2Rpc2Nvbm5lY3RfdXNiCiAqCkBAIC0xNzQsMjIgKzE5NCwxOSBAQAogKiBDYWxsIGNvbnRleHQ6CiAqCXByb2Nlc3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHZvaWQKLXByaXNtMnN0YV9kaXNjb25uZWN0X3VzYihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQorc3RhdGljIHZvaWQgcHJpc20yc3RhX2Rpc2Nvbm5lY3RfdXNiKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCiB7Ci0Jd2xhbmRldmljZV90CQkqd2xhbmRldjsKLQotICAgICAgICBEQkZFTlRFUjsKKwl3bGFuZGV2aWNlX3QgKndsYW5kZXY7CiAKIAl3bGFuZGV2ID0gKHdsYW5kZXZpY2VfdCAqKSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAKLQlpZiAoIHdsYW5kZXYgIT0gTlVMTCApIHsKKwlpZiAod2xhbmRldiAhPSBOVUxMKSB7CiAJCUxJU1RfSEVBRChjbGVhbmxpc3QpOwotCQlzdHJ1Y3QgbGlzdF9oZWFkCSplbnRyeTsKLQkJc3RydWN0IGxpc3RfaGVhZAkqdGVtcDsKLQkJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OworCQlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCWhmYTM4NHhfdAkJKmh3ID0gd2xhbmRldi0+cHJpdjsKKwkJaGZhMzg0eF90ICpodyA9IHdsYW5kZXYtPnByaXY7CiAKIAkJaWYgKCFodykKIAkJCWdvdG8gZXhpdDsKQEAgLTIzMSw3ICsyNDgsNyBAQAogCQkgKiByZXNwb25zZXMgdGhhdCB3ZSBoYXZlIHNodXQgZG93bi4KIAkJICovCiAJCWxpc3RfZm9yX2VhY2goZW50cnksICZjbGVhbmxpc3QpIHsKLQkJCWhmYTM4NHhfdXNiY3RseF90CSpjdGx4OworCQkJaGZhMzg0eF91c2JjdGx4X3QgKmN0bHg7CiAKIAkJCWN0bHggPSBsaXN0X2VudHJ5KGVudHJ5LCBoZmEzODR4X3VzYmN0bHhfdCwgbGlzdCk7CiAJCQljb21wbGV0ZSgmY3RseC0+ZG9uZSk7CkBAIC0yNjQsMTMgKzI4MSwxMCBAQAogCQlrZnJlZSh3bGFuZGV2KTsKIAl9CiAKLSBleGl0OgotCitleGl0OgogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQlEQkZFWElUOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwcmlzbTJfdXNiX2RyaXZlciA9IHsKIAkubmFtZSA9ICJwcmlzbTJfdXNiIiwKIAkucHJvYmUgPSBwcmlzbTJzdGFfcHJvYmVfdXNiLApAQCAtMjgxLDIxICsyOTUsMTMgQEAKIAogc3RhdGljIGludCBfX2luaXQgcHJpc20ydXNiX2luaXQodm9pZCkKIHsKLSAgICAgICAgREJGRU5URVI7Ci0KIAkvKiBUaGlzIGNhbGwgd2lsbCByZXN1bHQgaW4gY2FsbHMgdG8gcHJpc20yc3RhX3Byb2JlX3VzYi4gKi8KIAlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZwcmlzbTJfdXNiX2RyaXZlcik7Ci0KLQlEQkZFWElUOwogfTsKIAogc3RhdGljIHZvaWQgX19leGl0IHByaXNtMnVzYl9jbGVhbnVwKHZvaWQpCiB7Ci0gICAgICAgIERCRkVOVEVSOwotCiAJdXNiX2RlcmVnaXN0ZXIoJnByaXNtMl91c2JfZHJpdmVyKTsKLQotCURCRkVYSVQ7CiB9OwogCiBtb2R1bGVfaW5pdChwcmlzbTJ1c2JfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy93bGFuX2NvbXBhdC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvd2xhbl9jb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI4YTUxMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy93bGFuX2NvbXBhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkzICswLDAgQEAKLS8qIHdsYW5fY29tcGF0LmgKLSoKLSogVHlwZXMgYW5kIG1hY3JvcyB0byBhaWQgaW4gcG9ydGFiaWxpdHkKLSoKLSogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSoKLSogbGludXgtd2xhbgotKgotKiAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljCi0qICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKLSogICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKLSogICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSoKLSogICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKLSogICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0qICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCi0qICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSoKLSogICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZQotKiAgIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbiB3aGljaAotKiAgIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRoZQotKiAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCi0qICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UKLSogICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24KLSogICBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotKiAgIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZQotKiAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzCi0qICAgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBJbnF1aXJpZXMgcmVnYXJkaW5nIHRoZSBsaW51eC13bGFuIE9wZW4gU291cmNlIHByb2plY3QgY2FuIGJlCi0qIG1hZGUgZGlyZWN0bHkgdG86Ci0qCi0qIEFic29sdXRlVmFsdWUgU3lzdGVtcyBJbmMuCi0qIGluZm9AbGludXgtd2xhbi5jb20KLSogaHR0cDovL3d3dy5saW51eC13bGFuLmNvbQotKgotKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKgotKiBQb3J0aW9ucyBvZiB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhpcyBzb2Z0d2FyZSB3ZXJlIGZ1bmRlZCBieQotKiBJbnRlcnNpbCBDb3Jwb3JhdGlvbiBhcyBwYXJ0IG9mIFBSSVNNKFIpIGNoaXBzZXQgcHJvZHVjdCBkZXZlbG9wbWVudC4KLSoKLSogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSovCi0KLSNpZm5kZWYgX1dMQU5fQ09NUEFUX0gKLSNkZWZpbmUgX1dMQU5fQ09NUEFUX0gKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLS8qLS0tLS0tIEJpdCBzZXR0aW5ncyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi0jZGVmaW5lIEJJVDAJMHgwMDAwMDAwMQotI2RlZmluZSBCSVQxCTB4MDAwMDAwMDIKLSNkZWZpbmUgQklUMgkweDAwMDAwMDA0Ci0jZGVmaW5lIEJJVDMJMHgwMDAwMDAwOAotI2RlZmluZSBCSVQ0CTB4MDAwMDAwMTAKLSNkZWZpbmUgQklUNQkweDAwMDAwMDIwCi0jZGVmaW5lIEJJVDYJMHgwMDAwMDA0MAotI2RlZmluZSBCSVQ3CTB4MDAwMDAwODAKLSNkZWZpbmUgQklUOAkweDAwMDAwMTAwCi0jZGVmaW5lIEJJVDkJMHgwMDAwMDIwMAotI2RlZmluZSBCSVQxMAkweDAwMDAwNDAwCi0jZGVmaW5lIEJJVDExCTB4MDAwMDA4MDAKLSNkZWZpbmUgQklUMTIJMHgwMDAwMTAwMAotI2RlZmluZSBCSVQxMwkweDAwMDAyMDAwCi0jZGVmaW5lIEJJVDE0CTB4MDAwMDQwMDAKLSNkZWZpbmUgQklUMTUJMHgwMDAwODAwMAotI2RlZmluZSBCSVQxNgkweDAwMDEwMDAwCi0jZGVmaW5lIEJJVDE3CTB4MDAwMjAwMDAKLSNkZWZpbmUgQklUMTgJMHgwMDA0MDAwMAotI2RlZmluZSBCSVQxOQkweDAwMDgwMDAwCi0jZGVmaW5lIEJJVDIwCTB4MDAxMDAwMDAKLSNkZWZpbmUgQklUMjEJMHgwMDIwMDAwMAotI2RlZmluZSBCSVQyMgkweDAwNDAwMDAwCi0jZGVmaW5lIEJJVDIzCTB4MDA4MDAwMDAKLSNkZWZpbmUgQklUMjQJMHgwMTAwMDAwMAotI2RlZmluZSBCSVQyNQkweDAyMDAwMDAwCi0jZGVmaW5lIEJJVDI2CTB4MDQwMDAwMDAKLSNkZWZpbmUgQklUMjcJMHgwODAwMDAwMAotI2RlZmluZSBCSVQyOAkweDEwMDAwMDAwCi0jZGVmaW5lIEJJVDI5CTB4MjAwMDAwMDAKLSNkZWZpbmUgQklUMzAJMHg0MDAwMDAwMAotI2RlZmluZSBCSVQzMQkweDgwMDAwMDAwCi0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0vKi0tLS0tLSBDb21waWxlciBQb3J0YWJpbGl0eSBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLSNkZWZpbmUgX19XTEFOX0FUVFJJQl9QQUNLX18JCV9fYXR0cmlidXRlX18gKChwYWNrZWQpKQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0tLS0gT1MgUG9ydGFiaWxpdHkgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNpZm5kZWYgV0xBTl9EQlZBUgotI2RlZmluZSBXTEFOX0RCVkFSCXdsYW5fZGVidWcKLSNlbmRpZgotCi0jZGVmaW5lIFdMQU5fUkVMRUFTRQkiMC4zLjAtbGttbCIKLQotI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KLQotI2RlZmluZSBXTEFOX0xPR19FUlJPUih4LGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiAiJXM6ICIgeCAsIF9fZnVuY19fICwgIyNhcmdzKTsKLQotI2RlZmluZSBXTEFOX0xPR19XQVJOSU5HKHgsYXJncy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgeCAsIF9fZnVuY19fICwgIyNhcmdzKTsKLQotI2RlZmluZSBXTEFOX0xPR19OT1RJQ0UoeCxhcmdzLi4uKSBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiAiIHggLCBfX2Z1bmNfXyAsICMjYXJncyk7Ci0KLSNkZWZpbmUgV0xBTl9MT0dfSU5GTyhhcmdzLi4uICkgcHJpbnRrKEtFUk5fSU5GTyBhcmdzKQotCi0jaWYgZGVmaW5lZChXTEFOX0lOQ0xVREVfREVCVUcpCi0JI2RlZmluZSBXTEFOX0hFWF9EVU1QKCBsLCB4LCBwLCBuKQlpZiggV0xBTl9EQlZBUiA+PSAobCkgKXsgXAotCQlpbnQgX19pX187IFwKLQkJcHJpbnRrKEtFUk5fREVCVUcgeCAiOiIpOyBcCi0JCWZvciggX19pX189MDsgX19pX18gPCAobik7IF9faV9fKyspIFwKLQkJCXByaW50ayggIiAlMDJ4IiwgKCh1OCopKHApKVtfX2lfX10pOyBcCi0JCXByaW50aygiXG4iKTsgfQotCSNkZWZpbmUgREJGRU5URVIgeyBpZiAoIFdMQU5fREJWQVIgPj0gNSApeyBXTEFOX0xPR19ERUJVRygzLCItLS0tPlxuIik7IH0gfQotCSNkZWZpbmUgREJGRVhJVCAgeyBpZiAoIFdMQU5fREJWQVIgPj0gNSApeyBXTEFOX0xPR19ERUJVRygzLCI8LS0tLVxuIik7IH0gfQotCi0JI2RlZmluZSBXTEFOX0xPR19ERUJVRyhsLHgsYXJncy4uLikgaWYgKCBXTEFOX0RCVkFSID49IChsKSkgcHJpbnRrKEtFUk5fREVCVUcgIiVzKCVsdSk6ICIgeCAsICBfX2Z1bmNfXywgKHByZWVtcHRfY291bnQoKSAmIFBSRUVNUFRfTUFTSyksICMjYXJncyApOwotI2Vsc2UKLQkjZGVmaW5lIFdMQU5fSEVYX0RVTVAoIGwsIHMsIHAsIG4pCi0JI2RlZmluZSBEQkZFTlRFUgotCSNkZWZpbmUgREJGRVhJVAotCi0JI2RlZmluZSBXTEFOX0xPR19ERUJVRyhsLCBzLCBhcmdzLi4uKQotI2VuZGlmCi0KLSN1bmRlZiBuZXRkZXZpY2VfdAotdHlwZWRlZiBzdHJ1Y3QgbmV0X2RldmljZSBuZXRkZXZpY2VfdDsKLQotI2RlZmluZSBVUkJfQVNZTkNfVU5MSU5LIDAKLSNkZWZpbmUgVVNCX1FVRVVFX0JVTEsgMAotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0tLS0gSGFyZHdhcmUgUG9ydGFiaWxpdHkgTWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNkZWZpbmUgaWVlZTJob3N0MTYobikJX19sZTE2X3RvX2NwdShuKQotI2RlZmluZSBpZWVlMmhvc3QzMihuKQlfX2xlMzJfdG9fY3B1KG4pCi0jZGVmaW5lIGhvc3QyaWVlZTE2KG4pCV9fY3B1X3RvX2xlMTYobikKLSNkZWZpbmUgaG9zdDJpZWVlMzIobikJX19jcHVfdG9fbGUzMihuKQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0gR2VuZXJhbCBNYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNkZWZpbmUgd2xhbl9tYXgoYSwgYikgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQotI2RlZmluZSB3bGFuX21pbihhLCBiKSAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCi0KLSNkZWZpbmUgd2xhbl9pc3ByaW50KGMpCSgoKGMpID4gKDB4MTkpKSAmJiAoKGMpIDwgKDB4N2YpKSkKLQotI2RlZmluZSB3bGFuX2hleGNoYXIoeCkgKCgoeCkgPCAweDBhKSA/ICgnMCcgKyAoeCkpIDogKCdhJyArICgoeCkgLSAweDBhKSkpCi0KLS8qIENyZWF0ZSBhIHN0cmluZyBvZiBwcmludGFibGUgY2hhcnMgZnJvbSBzb21ldGhpbmcgdGhhdCBtaWdodCBub3QgYmUgKi8KLS8qIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB0aGUgc3RyIGJlIDQqbGVuICsgMSBieXRlcyBsb25nICovCi0jZGVmaW5lIHdsYW5fbWtwcmludHN0cihidWYsIGJ1Zmxlbiwgc3RyLCBzdHJsZW4pIFwKLXsgXAotCWludCBpID0gMDsgXAotCWludCBqID0gMDsgXAotCW1lbXNldChzdHIsIDAsIChzdHJsZW4pKTsgXAotCWZvciAoaSA9IDA7IGkgPCAoYnVmbGVuKTsgaSsrKSB7IFwKLQkJaWYgKCB3bGFuX2lzcHJpbnQoKGJ1ZilbaV0pICkgeyBcCi0JCQkoc3RyKVtqXSA9IChidWYpW2ldOyBcCi0JCQlqKys7IFwKLQkJfSBlbHNlIHsgXAotCQkJKHN0cilbal0gPSAnXFwnOyBcCi0JCQkoc3RyKVtqKzFdID0gJ3gnOyBcCi0JCQkoc3RyKVtqKzJdID0gd2xhbl9oZXhjaGFyKCgoYnVmKVtpXSAmIDB4ZjApID4+IDQpOyBcCi0JCQkoc3RyKVtqKzNdID0gd2xhbl9oZXhjaGFyKCgoYnVmKVtpXSAmIDB4MGYpKTsgXAotCQkJaiArPSA0OyBcCi0JCX0gXAotCX0gXAotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0gVmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLSNpZmRlZiBXTEFOX0lOQ0xVREVfREVCVUcKLWV4dGVybiBpbnQgd2xhbl9kZWJ1ZzsKLSNlbmRpZgotCi1leHRlcm4gaW50IHdsYW5fZXRoY29udjsJCS8qIFdoYXQncyB0aGUgZGVmYXVsdCBldGhjb252PyAqLwotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotLyotLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0jZW5kaWYgLyogX1dMQU5fQ09NUEFUX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYwppbmRleCA4MTcxY2ExLi5kMGIwOTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L3RoZXJtYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogCiBNT0RVTEVfQVVUSE9SKCJaaGFuZyBSdWkiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyB0aGVybWFsIG1hbmFnZW1lbnQgc3lzZnMgc3VwcG9ydCIpOwpAQCAtMTA0LDIyICsxMDUsMzYgQEAKIHRlbXBfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6ID0gdG9fdGhlcm1hbF96b25lKGRldik7CisJbG9uZyB0ZW1wZXJhdHVyZTsKKwlpbnQgcmV0OwogCiAJaWYgKCF0ei0+b3BzLT5nZXRfdGVtcCkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCXJldHVybiB0ei0+b3BzLT5nZXRfdGVtcCh0eiwgYnVmKTsKKwlyZXQgPSB0ei0+b3BzLT5nZXRfdGVtcCh0eiwgJnRlbXBlcmF0dXJlKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHRlbXBlcmF0dXJlKTsKIH0KIAogc3RhdGljIHNzaXplX3QKIG1vZGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6ID0gdG9fdGhlcm1hbF96b25lKGRldik7CisJZW51bSB0aGVybWFsX2RldmljZV9tb2RlIG1vZGU7CisJaW50IHJlc3VsdDsKIAogCWlmICghdHotPm9wcy0+Z2V0X21vZGUpCiAJCXJldHVybiAtRVBFUk07CiAKLQlyZXR1cm4gdHotPm9wcy0+Z2V0X21vZGUodHosIGJ1Zik7CisJcmVzdWx0ID0gdHotPm9wcy0+Z2V0X21vZGUodHosICZtb2RlKTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG1vZGUgPT0gVEhFUk1BTF9ERVZJQ0VfRU5BQkxFRCA/ICJlbmFibGVkIgorCQkgICAgICAgOiAiZGlzYWJsZWQiKTsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTEzMiw3ICsxNDcsMTMgQEAKIAlpZiAoIXR6LT5vcHMtPnNldF9tb2RlKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JcmVzdWx0ID0gdHotPm9wcy0+c2V0X21vZGUodHosIGJ1Zik7CisJaWYgKCFzdHJuY21wKGJ1ZiwgImVuYWJsZWQiLCBzaXplb2YoImVuYWJsZWQiKSkpCisJCXJlc3VsdCA9IHR6LT5vcHMtPnNldF9tb2RlKHR6LCBUSEVSTUFMX0RFVklDRV9FTkFCTEVEKTsKKwllbHNlIGlmICghc3RybmNtcChidWYsICJkaXNhYmxlZCIsIHNpemVvZigiZGlzYWJsZWQiKSkpCisJCXJlc3VsdCA9IHR6LT5vcHMtPnNldF9tb2RlKHR6LCBUSEVSTUFMX0RFVklDRV9ESVNBQkxFRCk7CisJZWxzZQorCQlyZXN1bHQgPSAtRUlOVkFMOworCiAJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKIApAQCAtMTQ0LDcgKzE2NSw4IEBACiAJCSAgICAgY2hhciAqYnVmKQogewogCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiA9IHRvX3RoZXJtYWxfem9uZShkZXYpOwotCWludCB0cmlwOworCWVudW0gdGhlcm1hbF90cmlwX3R5cGUgdHlwZTsKKwlpbnQgdHJpcCwgcmVzdWx0OwogCiAJaWYgKCF0ei0+b3BzLT5nZXRfdHJpcF90eXBlKQogCQlyZXR1cm4gLUVQRVJNOwpAQCAtMTUyLDcgKzE3NCwyMiBAQAogCWlmICghc3NjYW5mKGF0dHItPmF0dHIubmFtZSwgInRyaXBfcG9pbnRfJWRfdHlwZSIsICZ0cmlwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gdHotPm9wcy0+Z2V0X3RyaXBfdHlwZSh0eiwgdHJpcCwgYnVmKTsKKwlyZXN1bHQgPSB0ei0+b3BzLT5nZXRfdHJpcF90eXBlKHR6LCB0cmlwLCAmdHlwZSk7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVEhFUk1BTF9UUklQX0NSSVRJQ0FMOgorCQlyZXR1cm4gc3ByaW50ZihidWYsICJjcml0aWNhbCIpOworCWNhc2UgVEhFUk1BTF9UUklQX0hPVDoKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiaG90Iik7CisJY2FzZSBUSEVSTUFMX1RSSVBfUEFTU0lWRToKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAicGFzc2l2ZSIpOworCWNhc2UgVEhFUk1BTF9UUklQX0FDVElWRToKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAiYWN0aXZlIik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHNwcmludGYoYnVmLCAidW5rbm93biIpOworCX0KIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTE2MCw3ICsxOTcsOCBAQAogCQkgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHogPSB0b190aGVybWFsX3pvbmUoZGV2KTsKLQlpbnQgdHJpcDsKKwlpbnQgdHJpcCwgcmV0OworCWxvbmcgdGVtcGVyYXR1cmU7CiAKIAlpZiAoIXR6LT5vcHMtPmdldF90cmlwX3RlbXApCiAJCXJldHVybiAtRVBFUk07CkBAIC0xNjgsMTIgKzIwNiw3NyBAQAogCWlmICghc3NjYW5mKGF0dHItPmF0dHIubmFtZSwgInRyaXBfcG9pbnRfJWRfdGVtcCIsICZ0cmlwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gdHotPm9wcy0+Z2V0X3RyaXBfdGVtcCh0eiwgdHJpcCwgYnVmKTsKKwlyZXQgPSB0ei0+b3BzLT5nZXRfdHJpcF90ZW1wKHR6LCB0cmlwLCAmdGVtcGVyYXR1cmUpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgdGVtcGVyYXR1cmUpOworfQorCitzdGF0aWMgc3NpemVfdAorcGFzc2l2ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6ID0gdG9fdGhlcm1hbF96b25lKGRldik7CisJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYgPSBOVUxMOworCWludCBzdGF0ZTsKKworCWlmICghc3NjYW5mKGJ1ZiwgIiVkXG4iLCAmc3RhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdGF0ZSAmJiAhdHotPmZvcmNlZF9wYXNzaXZlKSB7CisJCW11dGV4X2xvY2soJnRoZXJtYWxfbGlzdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjZGV2LCAmdGhlcm1hbF9jZGV2X2xpc3QsIG5vZGUpIHsKKwkJCWlmICghc3RybmNtcCgiUHJvY2Vzc29yIiwgY2Rldi0+dHlwZSwKKwkJCQkgICAgIHNpemVvZigiUHJvY2Vzc29yIikpKQorCQkJCXRoZXJtYWxfem9uZV9iaW5kX2Nvb2xpbmdfZGV2aWNlKHR6LAorCQkJCQkJCQkgVEhFUk1BTF9UUklQU19OT05FLAorCQkJCQkJCQkgY2Rldik7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZ0aGVybWFsX2xpc3RfbG9jayk7CisJfSBlbHNlIGlmICghc3RhdGUgJiYgdHotPmZvcmNlZF9wYXNzaXZlKSB7CisJCW11dGV4X2xvY2soJnRoZXJtYWxfbGlzdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShjZGV2LCAmdGhlcm1hbF9jZGV2X2xpc3QsIG5vZGUpIHsKKwkJCWlmICghc3RybmNtcCgiUHJvY2Vzc29yIiwgY2Rldi0+dHlwZSwKKwkJCQkgICAgIHNpemVvZigiUHJvY2Vzc29yIikpKQorCQkJCXRoZXJtYWxfem9uZV91bmJpbmRfY29vbGluZ19kZXZpY2UodHosCisJCQkJCQkJCSAgIFRIRVJNQUxfVFJJUFNfTk9ORSwKKwkJCQkJCQkJICAgY2Rldik7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZ0aGVybWFsX2xpc3RfbG9jayk7CisJfQorCisJdHotPnRjMSA9IDE7CisJdHotPnRjMiA9IDE7CisKKwlpZiAoIXR6LT5wYXNzaXZlX2RlbGF5KQorCQl0ei0+cGFzc2l2ZV9kZWxheSA9IDEwMDA7CisKKwlpZiAoIXR6LT5wb2xsaW5nX2RlbGF5KQorCQl0ei0+cG9sbGluZ19kZWxheSA9IDEwMDAwOworCisJdHotPmZvcmNlZF9wYXNzaXZlID0gc3RhdGU7CisKKwl0aGVybWFsX3pvbmVfZGV2aWNlX3VwZGF0ZSh0eik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitwYXNzaXZlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgY2hhciAqYnVmKQoreworCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiA9IHRvX3RoZXJtYWxfem9uZShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHR6LT5mb3JjZWRfcGFzc2l2ZSk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUih0eXBlLCAwNDQ0LCB0eXBlX3Nob3csIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHRlbXAsIDA0NDQsIHRlbXBfc2hvdywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobW9kZSwgMDY0NCwgbW9kZV9zaG93LCBtb2RlX3N0b3JlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihwYXNzaXZlLCBTX0lSVUdPIHwgU19JV1VTUiwgcGFzc2l2ZV9zaG93LCBcCisJCSAgIHBhc3NpdmVfc3RvcmUpOwogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgdHJpcF9wb2ludF9hdHRyc1tdID0gewogCV9fQVRUUih0cmlwX3BvaW50XzBfdHlwZSwgMDQ0NCwgdHJpcF9wb2ludF90eXBlX3Nob3csIE5VTEwpLApAQCAtMjM2LDggKzMzOSwxMyBAQAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYgPSB0b19jb29saW5nX2RldmljZShkZXYpOworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJaW50IHJldDsKIAotCXJldHVybiBjZGV2LT5vcHMtPmdldF9tYXhfc3RhdGUoY2RldiwgYnVmKTsKKwlyZXQgPSBjZGV2LT5vcHMtPmdldF9tYXhfc3RhdGUoY2RldiwgJnN0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgc3RhdGUpOwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtMjQ1LDggKzM1MywxMyBAQAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYgPSB0b19jb29saW5nX2RldmljZShkZXYpOworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJaW50IHJldDsKIAotCXJldHVybiBjZGV2LT5vcHMtPmdldF9jdXJfc3RhdGUoY2RldiwgYnVmKTsKKwlyZXQgPSBjZGV2LT5vcHMtPmdldF9jdXJfc3RhdGUoY2RldiwgJnN0YXRlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgc3RhdGUpOwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtMjU1LDEwICszNjgsMTAgQEAKIAkJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYgPSB0b19jb29saW5nX2RldmljZShkZXYpOwotCWludCBzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIHN0YXRlOwogCWludCByZXN1bHQ7CiAKLQlpZiAoIXNzY2FuZihidWYsICIlZFxuIiwgJnN0YXRlKSkKKwlpZiAoIXNzY2FuZihidWYsICIlbGRcbiIsICZzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHN0YXRlIDwgMCkKQEAgLTMxMiwxMyArNDI1LDIwIEBACiBzdGF0aWMgc3NpemVfdAogdGVtcF9pbnB1dF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKKwlsb25nIHRlbXBlcmF0dXJlOworCWludCByZXQ7CiAJc3RydWN0IHRoZXJtYWxfaHdtb25fYXR0ciAqaHdtb25fYXR0cgogCQkJPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHRoZXJtYWxfaHdtb25fYXR0ciwgYXR0cik7CiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6CiAJCQk9IGNvbnRhaW5lcl9vZihod21vbl9hdHRyLCBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSwKIAkJCQkgICAgICAgdGVtcF9pbnB1dCk7CiAKLQlyZXR1cm4gdHotPm9wcy0+Z2V0X3RlbXAodHosIGJ1Zik7CisJcmV0ID0gdHotPm9wcy0+Z2V0X3RlbXAodHosICZ0ZW1wZXJhdHVyZSk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCB0ZW1wZXJhdHVyZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC0zMzAsOCArNDUwLDE0IEBACiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6CiAJCQk9IGNvbnRhaW5lcl9vZihod21vbl9hdHRyLCBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSwKIAkJCQkgICAgICAgdGVtcF9jcml0KTsKKwlsb25nIHRlbXBlcmF0dXJlOworCWludCByZXQ7CiAKLQlyZXR1cm4gdHotPm9wcy0+Z2V0X3RyaXBfdGVtcCh0eiwgMCwgYnVmKTsKKwlyZXQgPSB0ei0+b3BzLT5nZXRfdHJpcF90ZW1wKHR6LCAwLCAmdGVtcGVyYXR1cmUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHRlbXBlcmF0dXJlKTsKIH0KIAogCkBAIC00NTIsNiArNTc4LDk3IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgdGhlcm1hbF96b25lX2RldmljZV9zZXRfcG9sbGluZyhzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHosCisJCQkJCSAgICBpbnQgZGVsYXkpCit7CisJY2FuY2VsX2RlbGF5ZWRfd29yaygmKHR6LT5wb2xsX3F1ZXVlKSk7CisKKwlpZiAoIWRlbGF5KQorCQlyZXR1cm47CisKKwlpZiAoZGVsYXkgPiAxMDAwKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJih0ei0+cG9sbF9xdWV1ZSksCisJCQkJICAgICAgcm91bmRfamlmZmllcyhtc2Vjc190b19qaWZmaWVzKGRlbGF5KSkpOworCWVsc2UKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCYodHotPnBvbGxfcXVldWUpLAorCQkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXkpKTsKK30KKworc3RhdGljIHZvaWQgdGhlcm1hbF96b25lX2RldmljZV9wYXNzaXZlKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiwKKwkJCQkJaW50IHRlbXAsIGludCB0cmlwX3RlbXAsIGludCB0cmlwKQoreworCWludCB0cmVuZCA9IDA7CisJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2VfaW5zdGFuY2UgKmluc3RhbmNlOworCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2OworCWxvbmcgc3RhdGUsIG1heF9zdGF0ZTsKKworCS8qCisJICogQWJvdmUgVHJpcD8KKwkgKiAtLS0tLS0tLS0tLQorCSAqIENhbGN1bGF0ZSB0aGUgdGhlcm1hbCB0cmVuZCAodXNpbmcgdGhlIHBhc3NpdmUgY29vbGluZyBlcXVhdGlvbikKKwkgKiBhbmQgbW9kaWZ5IHRoZSBwZXJmb3JtYW5jZSBsaW1pdCBmb3IgYWxsIHBhc3NpdmUgY29vbGluZyBkZXZpY2VzCisJICogYWNjb3JkaW5nbHkuICBOb3RlIHRoYXQgd2UgYXNzdW1lIHN5bW1ldHJ5LgorCSAqLworCWlmICh0ZW1wID49IHRyaXBfdGVtcCkgeworCQl0ei0+cGFzc2l2ZSA9IHRydWU7CisKKwkJdHJlbmQgPSAodHotPnRjMSAqICh0ZW1wIC0gdHotPmxhc3RfdGVtcGVyYXR1cmUpKSArCisJCQkodHotPnRjMiAqICh0ZW1wIC0gdHJpcF90ZW1wKSk7CisKKwkJLyogSGVhdGluZyB1cD8gKi8KKwkJaWYgKHRyZW5kID4gMCkgeworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnN0YW5jZSwgJnR6LT5jb29saW5nX2RldmljZXMsCisJCQkJCSAgICBub2RlKSB7CisJCQkJaWYgKGluc3RhbmNlLT50cmlwICE9IHRyaXApCisJCQkJCWNvbnRpbnVlOworCQkJCWNkZXYgPSBpbnN0YW5jZS0+Y2RldjsKKwkJCQljZGV2LT5vcHMtPmdldF9jdXJfc3RhdGUoY2RldiwgJnN0YXRlKTsKKwkJCQljZGV2LT5vcHMtPmdldF9tYXhfc3RhdGUoY2RldiwgJm1heF9zdGF0ZSk7CisJCQkJaWYgKHN0YXRlKysgPCBtYXhfc3RhdGUpCisJCQkJCWNkZXYtPm9wcy0+c2V0X2N1cl9zdGF0ZShjZGV2LCBzdGF0ZSk7CisJCQl9CisJCX0gZWxzZSBpZiAodHJlbmQgPCAwKSB7IC8qIENvb2xpbmcgb2ZmPyAqLworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnN0YW5jZSwgJnR6LT5jb29saW5nX2RldmljZXMsCisJCQkJCSAgICBub2RlKSB7CisJCQkJaWYgKGluc3RhbmNlLT50cmlwICE9IHRyaXApCisJCQkJCWNvbnRpbnVlOworCQkJCWNkZXYgPSBpbnN0YW5jZS0+Y2RldjsKKwkJCQljZGV2LT5vcHMtPmdldF9jdXJfc3RhdGUoY2RldiwgJnN0YXRlKTsKKwkJCQljZGV2LT5vcHMtPmdldF9tYXhfc3RhdGUoY2RldiwgJm1heF9zdGF0ZSk7CisJCQkJaWYgKHN0YXRlID4gMCkKKwkJCQkJY2Rldi0+b3BzLT5zZXRfY3VyX3N0YXRlKGNkZXYsIC0tc3RhdGUpOworCQkJfQorCQl9CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEJlbG93IFRyaXA/CisJICogLS0tLS0tLS0tLS0KKwkgKiBJbXBsZW1lbnQgcGFzc2l2ZSBjb29saW5nIGh5c3RlcmVzaXMgdG8gc2xvd2x5IGluY3JlYXNlIHBlcmZvcm1hbmNlCisJICogYW5kIGF2b2lkIHRocmFzaGluZyBhcm91bmQgdGhlIHBhc3NpdmUgdHJpcCBwb2ludC4gIE5vdGUgdGhhdCB3ZQorCSAqIGFzc3VtZSBzeW1tZXRyeS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGluc3RhbmNlLCAmdHotPmNvb2xpbmdfZGV2aWNlcywgbm9kZSkgeworCQlpZiAoaW5zdGFuY2UtPnRyaXAgIT0gdHJpcCkKKwkJCWNvbnRpbnVlOworCQljZGV2ID0gaW5zdGFuY2UtPmNkZXY7CisJCWNkZXYtPm9wcy0+Z2V0X2N1cl9zdGF0ZShjZGV2LCAmc3RhdGUpOworCQljZGV2LT5vcHMtPmdldF9tYXhfc3RhdGUoY2RldiwgJm1heF9zdGF0ZSk7CisJCWlmIChzdGF0ZSA+IDApCisJCQljZGV2LT5vcHMtPnNldF9jdXJfc3RhdGUoY2RldiwgLS1zdGF0ZSk7CisJCWlmIChzdGF0ZSA9PSAwKQorCQkJdHotPnBhc3NpdmUgPSBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRoZXJtYWxfem9uZV9kZXZpY2VfY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QKKwkJCQkJCSAgICAgIHRoZXJtYWxfem9uZV9kZXZpY2UsCisJCQkJCQkgICAgICBwb2xsX3F1ZXVlLndvcmspOworCXRoZXJtYWxfem9uZV9kZXZpY2VfdXBkYXRlKHR6KTsKK30KIAogLyoqCiAgKiB0aGVybWFsX3pvbmVfYmluZF9jb29saW5nX2RldmljZSAtIGJpbmQgYSBjb29saW5nIGRldmljZSB0byBhIHRoZXJtYWwgem9uZQpAQCAtNzIyLDI1ICs5MzksMTEzIEBACiBFWFBPUlRfU1lNQk9MKHRoZXJtYWxfY29vbGluZ19kZXZpY2VfdW5yZWdpc3Rlcik7CiAKIC8qKgorICogdGhlcm1hbF96b25lX2RldmljZV91cGRhdGUgLSBmb3JjZSBhbiB1cGRhdGUgb2YgYSB0aGVybWFsIHpvbmUncyBzdGF0ZQorICogQHR0ejoJdGhlIHRoZXJtYWwgem9uZSB0byB1cGRhdGUKKyAqLworCit2b2lkIHRoZXJtYWxfem9uZV9kZXZpY2VfdXBkYXRlKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0eikKK3sKKwlpbnQgY291bnQsIHJldCA9IDA7CisJbG9uZyB0ZW1wLCB0cmlwX3RlbXA7CisJZW51bSB0aGVybWFsX3RyaXBfdHlwZSB0cmlwX3R5cGU7CisJc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2VfaW5zdGFuY2UgKmluc3RhbmNlOworCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2OworCisJbXV0ZXhfbG9jaygmdHotPmxvY2spOworCisJdHotPm9wcy0+Z2V0X3RlbXAodHosICZ0ZW1wKTsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IHR6LT50cmlwczsgY291bnQrKykgeworCQl0ei0+b3BzLT5nZXRfdHJpcF90eXBlKHR6LCBjb3VudCwgJnRyaXBfdHlwZSk7CisJCXR6LT5vcHMtPmdldF90cmlwX3RlbXAodHosIGNvdW50LCAmdHJpcF90ZW1wKTsKKworCQlzd2l0Y2ggKHRyaXBfdHlwZSkgeworCQljYXNlIFRIRVJNQUxfVFJJUF9DUklUSUNBTDoKKwkJCWlmICh0ZW1wID4gdHJpcF90ZW1wKSB7CisJCQkJaWYgKHR6LT5vcHMtPm5vdGlmeSkKKwkJCQkJcmV0ID0gdHotPm9wcy0+bm90aWZ5KHR6LCBjb3VudCwKKwkJCQkJCQkgICAgICB0cmlwX3R5cGUpOworCQkJCWlmICghcmV0KSB7CisJCQkJCXByaW50ayhLRVJOX0VNRVJHCisJCQkJCSAgICAgICAiQ3JpdGljYWwgdGVtcGVyYXR1cmUgcmVhY2hlZCAoJWxkIEMpLCBzaHV0dGluZyBkb3duLlxuIiwKKwkJCQkJICAgICAgIHRlbXAvMTAwMCk7CisJCQkJCW9yZGVybHlfcG93ZXJvZmYodHJ1ZSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVEhFUk1BTF9UUklQX0hPVDoKKwkJCWlmICh0ZW1wID4gdHJpcF90ZW1wKQorCQkJCWlmICh0ei0+b3BzLT5ub3RpZnkpCisJCQkJCXR6LT5vcHMtPm5vdGlmeSh0eiwgY291bnQsIHRyaXBfdHlwZSk7CisJCQlicmVhazsKKwkJY2FzZSBUSEVSTUFMX1RSSVBfQUNUSVZFOgorCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnN0YW5jZSwgJnR6LT5jb29saW5nX2RldmljZXMsCisJCQkJCSAgICBub2RlKSB7CisJCQkJaWYgKGluc3RhbmNlLT50cmlwICE9IGNvdW50KQorCQkJCQljb250aW51ZTsKKworCQkJCWNkZXYgPSBpbnN0YW5jZS0+Y2RldjsKKworCQkJCWlmICh0ZW1wID4gdHJpcF90ZW1wKQorCQkJCQljZGV2LT5vcHMtPnNldF9jdXJfc3RhdGUoY2RldiwgMSk7CisJCQkJZWxzZQorCQkJCQljZGV2LT5vcHMtPnNldF9jdXJfc3RhdGUoY2RldiwgMCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUSEVSTUFMX1RSSVBfUEFTU0lWRToKKwkJCWlmICh0ZW1wID4gdHJpcF90ZW1wIHx8IHR6LT5wYXNzaXZlKQorCQkJCXRoZXJtYWxfem9uZV9kZXZpY2VfcGFzc2l2ZSh0eiwgdGVtcCwKKwkJCQkJCQkgICAgdHJpcF90ZW1wLCBjb3VudCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICh0ei0+Zm9yY2VkX3Bhc3NpdmUpCisJCXRoZXJtYWxfem9uZV9kZXZpY2VfcGFzc2l2ZSh0eiwgdGVtcCwgdHotPmZvcmNlZF9wYXNzaXZlLAorCQkJCQkgICAgVEhFUk1BTF9UUklQU19OT05FKTsKKworCXR6LT5sYXN0X3RlbXBlcmF0dXJlID0gdGVtcDsKKwlpZiAodHotPnBhc3NpdmUpCisJCXRoZXJtYWxfem9uZV9kZXZpY2Vfc2V0X3BvbGxpbmcodHosIHR6LT5wYXNzaXZlX2RlbGF5KTsKKwllbHNlIGlmICh0ei0+cG9sbGluZ19kZWxheSkKKwkJdGhlcm1hbF96b25lX2RldmljZV9zZXRfcG9sbGluZyh0eiwgdHotPnBvbGxpbmdfZGVsYXkpOworCW11dGV4X3VubG9jaygmdHotPmxvY2spOworfQorRVhQT1JUX1NZTUJPTCh0aGVybWFsX3pvbmVfZGV2aWNlX3VwZGF0ZSk7CisKKy8qKgogICogdGhlcm1hbF96b25lX2RldmljZV9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgbmV3IHRoZXJtYWwgem9uZSBkZXZpY2UKICAqIEB0eXBlOgl0aGUgdGhlcm1hbCB6b25lIGRldmljZSB0eXBlCiAgKiBAdHJpcHM6CXRoZSBudW1iZXIgb2YgdHJpcCBwb2ludHMgdGhlIHRoZXJtYWwgem9uZSBzdXBwb3J0CiAgKiBAZGV2ZGF0YToJcHJpdmF0ZSBkZXZpY2UgZGF0YQogICogQG9wczoJc3RhbmRhcmQgdGhlcm1hbCB6b25lIGRldmljZSBjYWxsYmFja3MKKyAqIEB0YzE6CXRoZXJtYWwgY29lZmZpY2llbnQgMSBmb3IgcGFzc2l2ZSBjYWxjdWxhdGlvbnMKKyAqIEB0YzI6CXRoZXJtYWwgY29lZmZpY2llbnQgMiBmb3IgcGFzc2l2ZSBjYWxjdWxhdGlvbnMKKyAqIEBwYXNzaXZlX2RlbGF5OiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiBwb2xscyB3aGVuCisgKgkJICAgcGVyZm9ybWluZyBwYXNzaXZlIGNvb2xpbmcKKyAqIEBwb2xsaW5nX2RlbGF5OiBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmV0d2VlbiBwb2xscyB3aGVuIGNoZWNraW5nCisgKgkJICAgd2hldGhlciB0cmlwIHBvaW50cyBoYXZlIGJlZW4gY3Jvc3NlZCAoMCBmb3IgaW50ZXJydXB0CisgKgkJICAgZHJpdmVuIHN5c3RlbXMpCiAgKgogICogdGhlcm1hbF96b25lX2RldmljZV91bnJlZ2lzdGVyKCkgbXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIG5vCi0gKiBsb25nZXIgbmVlZGVkLgorICogbG9uZ2VyIG5lZWRlZC4gVGhlIHBhc3NpdmUgY29vbGluZyBmb3JtdWxhIHVzZXMgdGMxIGFuZCB0YzIgYXMgZGVzY3JpYmVkIGluCisgKiBzZWN0aW9uIDExLjEuNS4xIG9mIHRoZSBBQ1BJIHNwZWNpZmljYXRpb24gMy4wLgogICovCiBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdGhlcm1hbF96b25lX2RldmljZV9yZWdpc3RlcihjaGFyICp0eXBlLAogCQkJCQkJCSBpbnQgdHJpcHMsCiAJCQkJCQkJIHZvaWQgKmRldmRhdGEsIHN0cnVjdAogCQkJCQkJCSB0aGVybWFsX3pvbmVfZGV2aWNlX29wcwotCQkJCQkJCSAqb3BzKQorCQkJCQkJCSAqb3BzLCBpbnQgdGMxLCBpbnQKKwkJCQkJCQkgdGMyLAorCQkJCQkJCSBpbnQgcGFzc2l2ZV9kZWxheSwKKwkJCQkJCQkgaW50IHBvbGxpbmdfZGVsYXkpCiB7CiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6OwogCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpwb3M7CisJZW51bSB0aGVybWFsX3RyaXBfdHlwZSB0cmlwX3R5cGU7CiAJaW50IHJlc3VsdDsKIAlpbnQgY291bnQ7CisJaW50IHBhc3NpdmUgPSAwOwogCiAJaWYgKHN0cmxlbih0eXBlKSA+PSBUSEVSTUFMX05BTUVfTEVOR1RIKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTc2OSw2ICsxMDc0LDExIEBACiAJdHotPmRldmljZS5jbGFzcyA9ICZ0aGVybWFsX2NsYXNzOwogCXR6LT5kZXZkYXRhID0gZGV2ZGF0YTsKIAl0ei0+dHJpcHMgPSB0cmlwczsKKwl0ei0+dGMxID0gdGMxOworCXR6LT50YzIgPSB0YzI7CisJdHotPnBhc3NpdmVfZGVsYXkgPSBwYXNzaXZlX2RlbGF5OworCXR6LT5wb2xsaW5nX2RlbGF5ID0gcG9sbGluZ19kZWxheTsKKwogCWRldl9zZXRfbmFtZSgmdHotPmRldmljZSwgInRoZXJtYWxfem9uZSVkIiwgdHotPmlkKTsKIAlyZXN1bHQgPSBkZXZpY2VfcmVnaXN0ZXIoJnR6LT5kZXZpY2UpOwogCWlmIChyZXN1bHQpIHsKQEAgLTc5OCw4ICsxMTA4LDE4IEBACiAJCVRSSVBfUE9JTlRfQVRUUl9BREQoJnR6LT5kZXZpY2UsIGNvdW50LCByZXN1bHQpOwogCQlpZiAocmVzdWx0KQogCQkJZ290byB1bnJlZ2lzdGVyOworCQl0ei0+b3BzLT5nZXRfdHJpcF90eXBlKHR6LCBjb3VudCwgJnRyaXBfdHlwZSk7CisJCWlmICh0cmlwX3R5cGUgPT0gVEhFUk1BTF9UUklQX1BBU1NJVkUpCisJCQlwYXNzaXZlID0gMTsKIAl9CiAKKwlpZiAoIXBhc3NpdmUpCisJCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZSgmdHotPmRldmljZSwKKwkJCQkJICAgICZkZXZfYXR0cl9wYXNzaXZlKTsKKworCWlmIChyZXN1bHQpCisJCWdvdG8gdW5yZWdpc3RlcjsKKwogCXJlc3VsdCA9IHRoZXJtYWxfYWRkX2h3bW9uX3N5c2ZzKHR6KTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIHVucmVnaXN0ZXI7CkBAIC04MTQsNiArMTEzNCwxMCBAQAogCQl9CiAJbXV0ZXhfdW5sb2NrKCZ0aGVybWFsX2xpc3RfbG9jayk7CiAKKwlJTklUX0RFTEFZRURfV09SSygmKHR6LT5wb2xsX3F1ZXVlKSwgdGhlcm1hbF96b25lX2RldmljZV9jaGVjayk7CisKKwl0aGVybWFsX3pvbmVfZGV2aWNlX3VwZGF0ZSh0eik7CisKIAlpZiAoIXJlc3VsdCkKIAkJcmV0dXJuIHR6OwogCkBAIC04NTMsNiArMTE3Nyw4IEBACiAJCSAgICB0ei0+b3BzLT51bmJpbmQodHosIGNkZXYpOwogCW11dGV4X3VubG9jaygmdGhlcm1hbF9saXN0X2xvY2spOwogCisJdGhlcm1hbF96b25lX2RldmljZV9zZXRfcG9sbGluZyh0eiwgMCk7CisKIAlpZiAodHotPnR5cGVbMF0pCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmdHotPmRldmljZSwgJmRldl9hdHRyX3R5cGUpOwogCWRldmljZV9yZW1vdmVfZmlsZSgmdHotPmRldmljZSwgJmRldl9hdHRyX3RlbXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKaW5kZXggYjY0ODNkZC4uOWNmOWZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYworKysgYi9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCkBAIC02MjYsNyArNjI2LDcgQEAKIAkJZ290byBlcnJfZndfY29ycnVwdGVkOwogCiAJLyoKLQkgKiBTdGFydCB0byB1cGxvYWQgZm9ybXdhcmUgOiBzZW5kIHJlc2V0CisJICogU3RhcnQgdG8gdXBsb2FkIGZpcm13YXJlIDogc2VuZCByZXNldAogCSAqLwogCXZhbHVlID0gMTsKIAlyZXQgPSB1ZWFfc2VuZF9tb2RlbV9jbWQodXNiLCBGODA1MV9VU0JDUywgc2l6ZW9mKHZhbHVlKSwgJnZhbHVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggNzcwYjNlYS4uMDgwYmIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTM5Miw3ICszOTIsNyBAQAogCSAgIGNvbnRyb2xsZXJzIGhhdmluZyBRRSBvciBDUE0yLCBnaXZlbiBtaW5vciB0d2Vha3MuCiAKIAkgICBTZXQgQ09ORklHX1VTQl9HQURHRVQgdG8gIm0iIHRvIGJ1aWxkIHRoaXMgZHJpdmVyIGFzIGEKLQkgICBkeW5taWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkICJmc2xfcWVfdWRjIi4KKwkgICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCAiZnNsX3FlX3VkYyIuCiAKIGNvbmZpZyBVU0JfRlNMX1FFCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKaW5kZXggYzIyZmFiMS4uNTYzZDU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKQEAgLTMxOSw3ICszMTksNyBAQAogCiBzdGF0aWMgaW50IHZidXNfaXNfcHJlc2VudChzdHJ1Y3QgdXNiYV91ZGMgKnVkYykKIHsKLQlpZiAodWRjLT52YnVzX3BpbiAhPSAtMSkKKwlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPnZidXNfcGluKSkKIAkJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKHVkYy0+dmJ1c19waW4pOwogCiAJLyogTm8gVmJ1cyBkZXRlY3Rpb246IEFzc3VtZSBhbHdheXMgcHJlc2VudCAqLwpAQCAtMTgyMSw3ICsxODIxLDcgQEAKIAlEQkcoREJHX0dBREdFVCwgInJlZ2lzdGVyZWQgZHJpdmVyIGAlcydcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCiAJdWRjLT52YnVzX3ByZXYgPSAwOwotCWlmICh1ZGMtPnZidXNfcGluICE9IC0xKQorCWlmIChncGlvX2lzX3ZhbGlkKHVkYy0+dmJ1c19waW4pKQogCQllbmFibGVfaXJxKGdwaW9fdG9faXJxKHVkYy0+dmJ1c19waW4pKTsKIAogCS8qIElmIFZidXMgaXMgcHJlc2VudCwgZW5hYmxlIHRoZSBjb250cm9sbGVyIGFuZCB3YWl0IGZvciByZXNldCAqLwpAQCAtMTg1Miw3ICsxODUyLDcgQEAKIAlpZiAoZHJpdmVyICE9IHVkYy0+ZHJpdmVyIHx8ICFkcml2ZXItPnVuYmluZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAodWRjLT52YnVzX3BpbiAhPSAtMSkKKwlpZiAoZ3Bpb19pc192YWxpZCh1ZGMtPnZidXNfcGluKSkKIAkJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEodWRjLT52YnVzX3BpbikpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnVkYy0+bG9jaywgZmxhZ3MpOwpAQCAtMTkxMCw3ICsxOTEwLDcgQEAKIAl1ZGMtPnBkZXYgPSBwZGV2OwogCXVkYy0+cGNsayA9IHBjbGs7CiAJdWRjLT5oY2xrID0gaGNsazsKLQl1ZGMtPnZidXNfcGluID0gLTE7CisJdWRjLT52YnVzX3BpbiA9IC1FTk9ERVY7CiAKIAlyZXQgPSAtRU5PTUVNOwogCXVkYy0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CkBAIC0xOTk2LDcgKzE5OTYsNyBAQAogCQlnb3RvIGVycl9kZXZpY2VfYWRkOwogCX0KIAotCWlmIChwZGF0YS0+dmJ1c19waW4gPj0gMCkgeworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT52YnVzX3BpbikpIHsKIAkJaWYgKCFncGlvX3JlcXVlc3QocGRhdGEtPnZidXNfcGluLCAiYXRtZWxfdXNiYV91ZGMiKSkgewogCQkJdWRjLT52YnVzX3BpbiA9IHBkYXRhLT52YnVzX3BpbjsKIApAQCAtMjAwNSw3ICsyMDA1LDcgQEAKIAkJCQkJImF0bWVsX3VzYmFfdWRjIiwgdWRjKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlncGlvX2ZyZWUodWRjLT52YnVzX3Bpbik7Ci0JCQkJdWRjLT52YnVzX3BpbiA9IC0xOworCQkJCXVkYy0+dmJ1c19waW4gPSAtRU5PREVWOwogCQkJCWRldl93YXJuKCZ1ZGMtPnBkZXYtPmRldiwKIAkJCQkJICJmYWlsZWQgdG8gcmVxdWVzdCB2YnVzIGlycTsgIgogCQkJCQkgImFzc3VtaW5nIGFsd2F5cyBvblxuIik7CkBAIC0yMDUxLDcgKzIwNTEsNyBAQAogCQl1c2JhX2VwX2NsZWFudXBfZGVidWdmcygmdXNiYV9lcFtpXSk7CiAJdXNiYV9jbGVhbnVwX2RlYnVnZnModWRjKTsKIAotCWlmICh1ZGMtPnZidXNfcGluICE9IC0xKQorCWlmIChncGlvX2lzX3ZhbGlkKHVkYy0+dmJ1c19waW4pKQogCQlncGlvX2ZyZWUodWRjLT52YnVzX3Bpbik7CiAKIAlmcmVlX2lycSh1ZGMtPmlycSwgdWRjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9DaGFuZ2VMb2cuaGlzdG9yeSBiL2RyaXZlcnMvdXNiL3NlcmlhbC9DaGFuZ2VMb2cuaGlzdG9yeQppbmRleCBjMWIyNzk5Li5mMTNmZDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvQ2hhbmdlTG9nLmhpc3RvcnkKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL0NoYW5nZUxvZy5oaXN0b3J5CkBAIC03MTUsNyArNzE1LDcgQEAKIAogIDAuMiAoMDEvMzAvMjAwMCkgZ3JlZyBrcm9haC1oYXJ0bWFuCiAJTWlsZXN0b25lIDEgcmVsZWFzZS4KLQlEZXZpY2UgaXMgZm91bmQgYnkgVVNCIHN1YnN5c3RlbSwgZW51bWVyYXRlZCwgZmltd2FyZSBpcyBkb3dubG9hZGVkCisJRGV2aWNlIGlzIGZvdW5kIGJ5IFVTQiBzdWJzeXN0ZW0sIGVudW1lcmF0ZWQsIGZpcm13YXJlIGlzIGRvd25sb2FkZWQKIAlhbmQgdGhlIGRlc2NyaXB0b3JzIGFyZSBwcmludGVkIHRvIHRoZSBkZWJ1ZyBsb2csIGNvbmZpZyBpcyBzZXQsIGFuZAogCWdyZWVuIGxpZ2h0IHN0YXJ0cyB0byBibGluay4gT3BlbiBwb3J0IHdvcmtzLCBhbmQgZGF0YSBjYW4gYmUgc2VudAogCWFuZCByZWNlaXZlZCBhdCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBvZiB0aGUgVUFSVC4gTG9vcGJhY2sgY29ubmVjdG9yCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCmluZGV4IGE2NWY5MTkuLmM0ODBlYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnCkBAIC01MTgsOCArNTE4LDggQEAKIAloZWxwCiAJICBTYXkgTSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBTaWVycmEgV2lyZWxlc3MgZGV2aWNlcy4KIAotCSAgTWFueSBkZXZpZWNzIGhhdmUgYSBmZWF0dXJlIGtub3duIGFzIFRSVS1JbnN0YWxsLCBmb3IgdGhvc2UgZGV2aWNlcwotCSAgdG8gd29yayBwcm9wZXJseSB0aGUgVVNCIFN0b3JhZ2UgU2llcnJhIGZlYXR1cmUgbXVzdCBiZSBlbmFibGVkLgorCSAgTWFueSBkZXZpY2VzIGhhdmUgYSBmZWF0dXJlIGtub3duIGFzIFRSVS1JbnN0YWxsLiBGb3IgdGhvc2UgZGV2aWNlcworCSAgdG8gd29yayBwcm9wZXJseSwgdGhlIFVTQiBTdG9yYWdlIFNpZXJyYSBmZWF0dXJlIG11c3QgYmUgZW5hYmxlZC4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2llcnJhLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggNzQyYTViYy4uMmE3MDU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KQEAgLTQyMSw1NyArNDIyLDUyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAotCQkJCQkJCWludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBzZXJpYWxfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOwotCWludCBsZW5ndGggPSAwOwogCWludCBpOwotCW9mZl90IGJlZ2luID0gMDsKIAljaGFyIHRtcFs0MF07CiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwotCWxlbmd0aCArPSBzcHJpbnRmKHBhZ2UsICJ1c2JzZXJpbmZvOjEuMCBkcml2ZXI6Mi4wXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgU0VSSUFMX1RUWV9NSU5PUlMgJiYgbGVuZ3RoIDwgUEFHRV9TSVpFOyArK2kpIHsKKwlzZXFfcHV0cyhtLCAidXNic2VyaW5mbzoxLjAgZHJpdmVyOjIuMFxuIik7CisJZm9yIChpID0gMDsgaSA8IFNFUklBTF9UVFlfTUlOT1JTOyArK2kpIHsKIAkJc2VyaWFsID0gdXNiX3NlcmlhbF9nZXRfYnlfaW5kZXgoaSk7CiAJCWlmIChzZXJpYWwgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCi0JCWxlbmd0aCArPSBzcHJpbnRmKHBhZ2UrbGVuZ3RoLCAiJWQ6IiwgaSk7CisJCXNlcV9wcmludGYobSwgIiVkOiIsIGkpOwogCQlpZiAoc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXIpCi0JCQlsZW5ndGggKz0gc3ByaW50ZihwYWdlK2xlbmd0aCwgIiBtb2R1bGU6JXMiLAorCQkJc2VxX3ByaW50ZihtLCAiIG1vZHVsZTolcyIsCiAJCQkJbW9kdWxlX25hbWUoc2VyaWFsLT50eXBlLT5kcml2ZXIub3duZXIpKTsKLQkJbGVuZ3RoICs9IHNwcmludGYocGFnZStsZW5ndGgsICIgbmFtZTpcIiVzXCIiLAorCQlzZXFfcHJpbnRmKG0sICIgbmFtZTpcIiVzXCIiLAogCQkJCXNlcmlhbC0+dHlwZS0+ZGVzY3JpcHRpb24pOwotCQlsZW5ndGggKz0gc3ByaW50ZihwYWdlK2xlbmd0aCwgIiB2ZW5kb3I6JTA0eCBwcm9kdWN0OiUwNHgiLAorCQlzZXFfcHJpbnRmKG0sICIgdmVuZG9yOiUwNHggcHJvZHVjdDolMDR4IiwKIAkJCWxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJCWxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwotCQlsZW5ndGggKz0gc3ByaW50ZihwYWdlK2xlbmd0aCwgIiBudW1fcG9ydHM6JWQiLAotCQkJCQkJCXNlcmlhbC0+bnVtX3BvcnRzKTsKLQkJbGVuZ3RoICs9IHNwcmludGYocGFnZStsZW5ndGgsICIgcG9ydDolZCIsCi0JCQkJCQkJaSAtIHNlcmlhbC0+bWlub3IgKyAxKTsKKwkJc2VxX3ByaW50ZihtLCAiIG51bV9wb3J0czolZCIsIHNlcmlhbC0+bnVtX3BvcnRzKTsKKwkJc2VxX3ByaW50ZihtLCAiIHBvcnQ6JWQiLCBpIC0gc2VyaWFsLT5taW5vciArIDEpOwogCQl1c2JfbWFrZV9wYXRoKHNlcmlhbC0+ZGV2LCB0bXAsIHNpemVvZih0bXApKTsKLQkJbGVuZ3RoICs9IHNwcmludGYocGFnZStsZW5ndGgsICIgcGF0aDolcyIsIHRtcCk7CisJCXNlcV9wcmludGYobSwgIiBwYXRoOiVzIiwgdG1wKTsKIAotCQlsZW5ndGggKz0gc3ByaW50ZihwYWdlK2xlbmd0aCwgIlxuIik7Ci0JCWlmICgobGVuZ3RoICsgYmVnaW4pID4gKG9mZiArIGNvdW50KSkgewotCQkJdXNiX3NlcmlhbF9wdXQoc2VyaWFsKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCQlpZiAoKGxlbmd0aCArIGJlZ2luKSA8IG9mZikgewotCQkJYmVnaW4gKz0gbGVuZ3RoOwotCQkJbGVuZ3RoID0gMDsKLQkJfQorCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAkJdXNiX3NlcmlhbF9wdXQoc2VyaWFsKTsKIAl9Ci0JKmVvZiA9IDE7Ci1kb25lOgotCWlmIChvZmYgPj0gKGxlbmd0aCArIGJlZ2luKSkKLQkJcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIChvZmYtYmVnaW4pOwotCXJldHVybiAoY291bnQgPCBiZWdpbitsZW5ndGgtb2ZmKSA/IGNvdW50IDogYmVnaW4rbGVuZ3RoLW9mZjsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZXJpYWxfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzZXJpYWxfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2VyaWFsX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gc2VyaWFsX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIGludCBzZXJpYWxfdGlvY21nZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CkBAIC0xMTEzLDkgKzExMDksOSBAQAogCS51bnRocm90dGxlID0JCXNlcmlhbF91bnRocm90dGxlLAogCS5icmVha19jdGwgPQkJc2VyaWFsX2JyZWFrLAogCS5jaGFyc19pbl9idWZmZXIgPQlzZXJpYWxfY2hhcnNfaW5fYnVmZmVyLAotCS5yZWFkX3Byb2MgPQkJc2VyaWFsX3JlYWRfcHJvYywKIAkudGlvY21nZXQgPQkJc2VyaWFsX3Rpb2NtZ2V0LAogCS50aW9jbXNldCA9CQlzZXJpYWxfdGlvY21zZXQsCisJLnByb2NfZm9wcyA9CQkmc2VyaWFsX3Byb2NfZm9wcywKIH07CiAKIHN0cnVjdCB0dHlfZHJpdmVyICp1c2Jfc2VyaWFsX3R0eV9kcml2ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYwppbmRleCA4ODJjNTdiLi5mZGJhMmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9hdGEuaD4KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKQEAgLTMyOCw3ICszMjksNyBAQAogCiBzdHJ1Y3QgaXNkMjAwX2luZm8gewogCXN0cnVjdCBpbnF1aXJ5X2RhdGEgSW5xdWlyeURhdGE7Ci0Jc3RydWN0IGhkX2RyaXZlaWQgKmlkOworCXUxNiAqaWQ7CiAJc3RydWN0IGlzZDIwMF9jb25maWcgQ29uZmlnRGF0YTsKIAl1bnNpZ25lZCBjaGFyICpSZWdzQnVmOwogCXVuc2lnbmVkIGNoYXIgQVRBUmVnc1s4XTsKQEAgLTQxOSwxOSArNDIwLDE5IEBACiAJCWJ1Zi0+RmxhZ3MgPSBVTklUX0FUVEVOVElPTjsKIAkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlID0gMDsKIAkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VDb2RlUXVhbGlmaWVyID0gMDsKLQl9IGVsc2UgaWYoZXJyb3IgJiBNQ1JfRVJSKSB7CisJfSBlbHNlIGlmIChlcnJvciAmIEFUQV9NQ1IpIHsKIAkJYnVmLT5FcnJvckNvZGUgPSAweDcwIHwgU0VOU0VfRVJSQ09ERV9WQUxJRDsKIAkJYnVmLT5BZGRpdGlvbmFsU2Vuc2VMZW5ndGggPSAweGI7CiAJCWJ1Zi0+RmxhZ3MgPSAgVU5JVF9BVFRFTlRJT047CiAJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlQ29kZSA9IDA7CiAJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlQ29kZVF1YWxpZmllciA9IDA7Ci0JfSBlbHNlIGlmKGVycm9yICYgVFJLMF9FUlIpIHsKKwl9IGVsc2UgaWYgKGVycm9yICYgQVRBX1RSSzBORikgewogCQlidWYtPkVycm9yQ29kZSA9IDB4NzAgfCBTRU5TRV9FUlJDT0RFX1ZBTElEOwogCQlidWYtPkFkZGl0aW9uYWxTZW5zZUxlbmd0aCA9IDB4YjsKIAkJYnVmLT5GbGFncyA9ICBOT1RfUkVBRFk7CiAJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlQ29kZSA9IDA7CiAJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlQ29kZVF1YWxpZmllciA9IDA7Ci0JfSBlbHNlIGlmKGVycm9yICYgRUNDX0VSUikgeworCX0gZWxzZSBpZiAoZXJyb3IgJiBBVEFfVU5DKSB7CiAJCWJ1Zi0+RXJyb3JDb2RlID0gMHg3MCB8IFNFTlNFX0VSUkNPREVfVkFMSUQ7CiAJCWJ1Zi0+QWRkaXRpb25hbFNlbnNlTGVuZ3RoID0gMHhiOwogCQlidWYtPkZsYWdzID0gIERBVEFfUFJPVEVDVDsKQEAgLTU0NywxNiArNTQ4LDE2IEBACiAJCWF0YS5nZW5lcmljLkFjdGlvblNlbGVjdCA9IEFDVElPTl9TRUxFQ1RfMXxBQ1RJT05fU0VMRUNUXzU7CiAJCWF0YS5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0gUkVHX0RFVklDRV9IRUFEIHwgUkVHX0NPTU1BTkQ7CiAJCWF0YS53cml0ZS5EZXZpY2VIZWFkQnl0ZSA9IGluZm8tPkRldmljZUhlYWQ7Ci0JCWF0YS53cml0ZS5Db21tYW5kQnl0ZSA9IFdJTl9TUlNUOworCQlhdGEud3JpdGUuQ29tbWFuZEJ5dGUgPSBBVEFfQ01EX0RFVl9SRVNFVDsKIAkJaXNkMjAwX3NldF9zcmIoaW5mbywgRE1BX05PTkUsIE5VTEwsIDApOwogCQlicmVhazsKIAogCWNhc2UgQUNUSU9OX0lERU5USUZZOgogCQlVU19ERUJVR1AoIiAgIGlzZDIwMF9hY3Rpb24oSURFTlRJRlkpXG4iKTsKIAkJYXRhLmdlbmVyaWMuUmVnaXN0ZXJTZWxlY3QgPSBSRUdfQ09NTUFORDsKLQkJYXRhLndyaXRlLkNvbW1hbmRCeXRlID0gV0lOX0lERU5USUZZOworCQlhdGEud3JpdGUuQ29tbWFuZEJ5dGUgPSBBVEFfQ01EX0lEX0FUQTsKIAkJaXNkMjAwX3NldF9zcmIoaW5mbywgRE1BX0ZST01fREVWSUNFLCBpbmZvLT5pZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGhkX2RyaXZlaWQpKTsKKwkJCQlBVEFfSURfV09SRFMgKiAyKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtOTQ0LDIyICs5NDUsMjIgQEAKIAkJCWJyZWFrOwogCiAJCWlmICghZGV0ZWN0KSB7Ci0JCQlpZiAocmVnc1tBVEFfUkVHX1NUQVRVU19PRkZTRVRdICYgQlVTWV9TVEFUKSB7CisJCQlpZiAocmVnc1tBVEFfUkVHX1NUQVRVU19PRkZTRVRdICYgQVRBX0JVU1kpIHsKIAkJCQlVU19ERUJVR1AoIiAgICVzIHN0YXR1cyBpcyBzdGlsbCBCU1ksIHRyeSBhZ2Fpbi4uLlxuIixtc3RyKTsKIAkJCX0gZWxzZSB7CiAJCQkJVVNfREVCVUdQKCIgICAlcyBzdGF0dXMgIUJTWSwgY29udGludWUgd2l0aCBuZXh0IG9wZXJhdGlvblxuIixtc3RyKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQotCQkvKiBjaGVjayBmb3IgQlVTWV9TVEFUIGFuZCAqLwotCQkvKiBXUkVSUl9TVEFUICh3b3JrYXJvdW5kIEFUQSBaaXAgZHJpdmUpIGFuZCAqLyAKLQkJLyogRVJSX1NUQVQgKHdvcmthcm91bmQgZm9yIEFyY2hvcyBDRC1ST00pICovCisJCS8qIGNoZWNrIGZvciBBVEFfQlVTWSBhbmQgKi8KKwkJLyogQVRBX0RGICh3b3JrYXJvdW5kIEFUQSBaaXAgZHJpdmUpIGFuZCAqLworCQkvKiBBVEFfRVJSICh3b3JrYXJvdW5kIGZvciBBcmNob3MgQ0QtUk9NKSAqLwogCQllbHNlIGlmIChyZWdzW0FUQV9SRUdfU1RBVFVTX09GRlNFVF0gJgotCQkJIChCVVNZX1NUQVQgfCBXUkVSUl9TVEFUIHwgRVJSX1NUQVQgKSkgeworCQkJIChBVEFfQlVTWSB8IEFUQV9ERiB8IEFUQV9FUlIpKSB7CiAJCQlVU19ERUJVR1AoIiAgIFN0YXR1cyBpbmRpY2F0ZXMgaXQgaXMgbm90IHJlYWR5LCB0cnkgYWdhaW4uLi5cbiIpOwogCQl9CiAJCS8qIGNoZWNrIGZvciBEUkRZLCBBVEEgZGV2aWNlcyBzZXQgRFJEWSBhZnRlciBTUlNUICovCi0JCWVsc2UgaWYgKHJlZ3NbQVRBX1JFR19TVEFUVVNfT0ZGU0VUXSAmIFJFQURZX1NUQVQpIHsKKwkJZWxzZSBpZiAocmVnc1tBVEFfUkVHX1NUQVRVU19PRkZTRVRdICYgQVRBX0RSRFkpIHsKIAkJCVVTX0RFQlVHUCgiICAgSWRlbnRpZmllZCBBVEEgZGV2aWNlXG4iKTsKIAkJCWluZm8tPkRldmljZUZsYWdzIHw9IERGX0FUQV9ERVZJQ0U7CiAJCQlpbmZvLT5EZXZpY2VIZWFkID0gbWFzdGVyX3NsYXZlOwpAQCAtMTA1MywxMDMgKzEwNTQsNTAgQEAKIAlyZXR1cm4ocmV0U3RhdHVzKTsKIH0KIAotc3RhdGljIHZvaWQgaXNkMjAwX2ZpeF9kcml2ZWlkIChzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQpCitzdGF0aWMgdm9pZCBpc2QyMDBfZml4X2RyaXZlaWQodTE2ICppZCkKIHsKICNpZm5kZWYgX19MSVRUTEVfRU5ESUFOCiAjIGlmZGVmIF9fQklHX0VORElBTgogCWludCBpOwotCXUxNiAqc3RyaW5nY2FzdDsKIAotCWlkLT5jb25maWcgICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmNvbmZpZyk7Ci0JaWQtPmN5bHMgICAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+Y3lscyk7Ci0JaWQtPnJlc2VydmVkMiAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+cmVzZXJ2ZWQyKTsKLQlpZC0+aGVhZHMgICAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5oZWFkcyk7Ci0JaWQtPnRyYWNrX2J5dGVzICAgID0gX19sZTE2X3RvX2NwdShpZC0+dHJhY2tfYnl0ZXMpOwotCWlkLT5zZWN0b3JfYnl0ZXMgICA9IF9fbGUxNl90b19jcHUoaWQtPnNlY3Rvcl9ieXRlcyk7Ci0JaWQtPnNlY3RvcnMgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+c2VjdG9ycyk7Ci0JaWQtPnZlbmRvcjAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+dmVuZG9yMCk7Ci0JaWQtPnZlbmRvcjEgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+dmVuZG9yMSk7Ci0JaWQtPnZlbmRvcjIgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+dmVuZG9yMik7Ci0Jc3RyaW5nY2FzdCA9ICh1MTYgKikmaWQtPnNlcmlhbF9ub1swXTsKLQlmb3IgKGkgPSAwOyBpIDwgKDIwLzIpOyBpKyspCi0JCXN0cmluZ2Nhc3RbaV0gPSBfX2xlMTZfdG9fY3B1KHN0cmluZ2Nhc3RbaV0pOwotCWlkLT5idWZfdHlwZSAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmJ1Zl90eXBlKTsKLQlpZC0+YnVmX3NpemUgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5idWZfc2l6ZSk7Ci0JaWQtPmVjY19ieXRlcyAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+ZWNjX2J5dGVzKTsKLQlzdHJpbmdjYXN0ID0gKHUxNiAqKSZpZC0+ZndfcmV2WzBdOwotCWZvciAoaSA9IDA7IGkgPCAoOC8yKTsgaSsrKQotCQlzdHJpbmdjYXN0W2ldID0gX19sZTE2X3RvX2NwdShzdHJpbmdjYXN0W2ldKTsKLQlzdHJpbmdjYXN0ID0gKHUxNiAqKSZpZC0+bW9kZWxbMF07Ci0JZm9yIChpID0gMDsgaSA8ICg0MC8yKTsgaSsrKQotCQlzdHJpbmdjYXN0W2ldID0gX19sZTE2X3RvX2NwdShzdHJpbmdjYXN0W2ldKTsKLQlpZC0+ZHdvcmRfaW8gICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5kd29yZF9pbyk7Ci0JaWQtPnJlc2VydmVkNTAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+cmVzZXJ2ZWQ1MCk7Ci0JaWQtPmZpZWxkX3ZhbGlkICAgID0gX19sZTE2X3RvX2NwdShpZC0+ZmllbGRfdmFsaWQpOwotCWlkLT5jdXJfY3lscyAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmN1cl9jeWxzKTsKLQlpZC0+Y3VyX2hlYWRzICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jdXJfaGVhZHMpOwotCWlkLT5jdXJfc2VjdG9ycyAgICA9IF9fbGUxNl90b19jcHUoaWQtPmN1cl9zZWN0b3JzKTsKLQlpZC0+Y3VyX2NhcGFjaXR5MCAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jdXJfY2FwYWNpdHkwKTsKLQlpZC0+Y3VyX2NhcGFjaXR5MSAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jdXJfY2FwYWNpdHkxKTsKLQlpZC0+bGJhX2NhcGFjaXR5ICAgPSBfX2xlMzJfdG9fY3B1KGlkLT5sYmFfY2FwYWNpdHkpOwotCWlkLT5kbWFfMXdvcmQgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmRtYV8xd29yZCk7Ci0JaWQtPmRtYV9td29yZCAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+ZG1hX213b3JkKTsKLQlpZC0+ZWlkZV9waW9fbW9kZXMgPSBfX2xlMTZfdG9fY3B1KGlkLT5laWRlX3Bpb19tb2Rlcyk7Ci0JaWQtPmVpZGVfZG1hX21pbiAgID0gX19sZTE2X3RvX2NwdShpZC0+ZWlkZV9kbWFfbWluKTsKLQlpZC0+ZWlkZV9kbWFfdGltZSAgPSBfX2xlMTZfdG9fY3B1KGlkLT5laWRlX2RtYV90aW1lKTsKLQlpZC0+ZWlkZV9waW8gICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5laWRlX3Bpbyk7Ci0JaWQtPmVpZGVfcGlvX2lvcmR5ID0gX19sZTE2X3RvX2NwdShpZC0+ZWlkZV9waW9faW9yZHkpOwotCWZvciAoaSA9IDA7IGkgPCAyOyArK2kpCi0JCWlkLT53b3JkczY5XzcwW2ldID0gX19sZTE2X3RvX2NwdShpZC0+d29yZHM2OV83MFtpXSk7Ci0JZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKLQkJaWQtPndvcmRzNzFfNzRbaV0gPSBfX2xlMTZfdG9fY3B1KGlkLT53b3JkczcxXzc0W2ldKTsKLQlpZC0+cXVldWVfZGVwdGggICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5xdWV1ZV9kZXB0aCk7Ci0JZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKLQkJaWQtPndvcmRzNzZfNzlbaV0gPSBfX2xlMTZfdG9fY3B1KGlkLT53b3Jkczc2Xzc5W2ldKTsKLQlpZC0+bWFqb3JfcmV2X251bSAgPSBfX2xlMTZfdG9fY3B1KGlkLT5tYWpvcl9yZXZfbnVtKTsKLQlpZC0+bWlub3JfcmV2X251bSAgPSBfX2xlMTZfdG9fY3B1KGlkLT5taW5vcl9yZXZfbnVtKTsKLQlpZC0+Y29tbWFuZF9zZXRfMSAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jb21tYW5kX3NldF8xKTsKLQlpZC0+Y29tbWFuZF9zZXRfMiAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jb21tYW5kX3NldF8yKTsKLQlpZC0+Y2Zzc2UgICAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jZnNzZSk7Ci0JaWQtPmNmc19lbmFibGVfMSAgID0gX19sZTE2X3RvX2NwdShpZC0+Y2ZzX2VuYWJsZV8xKTsKLQlpZC0+Y2ZzX2VuYWJsZV8yICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5jZnNfZW5hYmxlXzIpOwotCWlkLT5jc2ZfZGVmYXVsdCAgICA9IF9fbGUxNl90b19jcHUoaWQtPmNzZl9kZWZhdWx0KTsKLQlpZC0+ZG1hX3VsdHJhICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5kbWFfdWx0cmEpOwotCWlkLT50cnNldWMgICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPnRyc2V1Yyk7Ci0JaWQtPnRyc0V1YyAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+dHJzRXVjKTsKLQlpZC0+Q3VyQVBNdmFsdWVzICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5DdXJBUE12YWx1ZXMpOwotCWlkLT5tcHJjICAgICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPm1wcmMpOwotCWlkLT5od19jb25maWcgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmh3X2NvbmZpZyk7Ci0JaWQtPmFjb3VzdGljICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+YWNvdXN0aWMpOwotCWlkLT5tc3JxcyAgICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPm1zcnFzKTsKLQlpZC0+c3hmZXJ0ICAgICAgICAgPSBfX2xlMTZfdG9fY3B1KGlkLT5zeGZlcnQpOwotCWlkLT5zYWwgICAgICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPnNhbCk7Ci0JaWQtPnNwZyAgICAgICAgICAgID0gX19sZTMyX3RvX2NwdShpZC0+c3BnKTsKLQlpZC0+bGJhX2NhcGFjaXR5XzIgPSBfX2xlNjRfdG9fY3B1KGlkLT5sYmFfY2FwYWNpdHlfMik7Ci0JZm9yIChpID0gMDsgaSA8IDIyOyBpKyspCi0JCWlkLT53b3JkczEwNF8xMjVbaV0gICA9IF9fbGUxNl90b19jcHUoaWQtPndvcmRzMTA0XzEyNVtpXSk7Ci0JaWQtPmxhc3RfbHVuICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+bGFzdF9sdW4pOwotCWlkLT53b3JkMTI3ICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPndvcmQxMjcpOwotCWlkLT5kbGYgICAgICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmRsZik7Ci0JaWQtPmNzZm8gICAgICAgICAgID0gX19sZTE2X3RvX2NwdShpZC0+Y3Nmbyk7Ci0JZm9yIChpID0gMDsgaSA8IDI2OyBpKyspCi0JCWlkLT53b3JkczEzMF8xNTVbaV0gPSBfX2xlMTZfdG9fY3B1KGlkLT53b3JkczEzMF8xNTVbaV0pOwotCWlkLT53b3JkMTU2ICAgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPndvcmQxNTYpOwotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCWlkLT53b3JkczE1N18xNTlbaV0gPSBfX2xlMTZfdG9fY3B1KGlkLT53b3JkczE1N18xNTlbaV0pOwotCWlkLT5jZmFfcG93ZXIgICAgICA9IF9fbGUxNl90b19jcHUoaWQtPmNmYV9wb3dlcik7Ci0JZm9yIChpID0gMDsgaSA8IDE0OyBpKyspCi0JCWlkLT53b3JkczE2MV8xNzVbaV0gPSBfX2xlMTZfdG9fY3B1KGlkLT53b3JkczE2MV8xNzVbaV0pOwotCWZvciAoaSA9IDA7IGkgPCAzMTsgaSsrKQotCQlpZC0+d29yZHMxNzZfMjA1W2ldID0gX19sZTE2X3RvX2NwdShpZC0+d29yZHMxNzZfMjA1W2ldKTsKLQlmb3IgKGkgPSAwOyBpIDwgNDg7IGkrKykKLQkJaWQtPndvcmRzMjA2XzI1NFtpXSA9IF9fbGUxNl90b19jcHUoaWQtPndvcmRzMjA2XzI1NFtpXSk7Ci0JaWQtPmludGVncml0eV93b3JkICA9IF9fbGUxNl90b19jcHUoaWQtPmludGVncml0eV93b3JkKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVRBX0lEX1dPUkRTOyBpKyspCisJCWlkW2ldID0gX19sZTE2X3RvX2NwdShpZFtpXSk7CiAjIGVsc2UKICMgIGVycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgogIyBlbmRpZgogI2VuZGlmCiB9CiAKK3N0YXRpYyB2b2lkIGlzZDIwMF9kdW1wX2RyaXZlaWQodTE2ICppZCkKK3sKKwlVU19ERUJVR1AoIiAgIElkZW50aWZ5IERhdGEgU3RydWN0dXJlOlxuIik7CisJVVNfREVCVUdQKCIgICAgICBjb25maWcgPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9DT05GSUddKTsKKwlVU19ERUJVR1AoIiAgICAgIGN5bHMgPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9DWUxTXSk7CisJVVNfREVCVUdQKCIgICAgICBoZWFkcyA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX0hFQURTXSk7CisJVVNfREVCVUdQKCIgICAgICB0cmFja19ieXRlcyA9IDB4JXhcbiIsCSAgaWRbNF0pOworCVVTX0RFQlVHUCgiICAgICAgc2VjdG9yX2J5dGVzID0gMHgleFxuIiwgIGlkWzVdKTsKKwlVU19ERUJVR1AoIiAgICAgIHNlY3RvcnMgPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9TRUNUT1JTXSk7CisJVVNfREVCVUdQKCIgICAgICBzZXJpYWxfbm9bMF0gPSAweCV4XG4iLCAgKihjaGFyICopJmlkW0FUQV9JRF9TRVJOT10pOworCVVTX0RFQlVHUCgiICAgICAgYnVmX3R5cGUgPSAweCV4XG4iLAkgIGlkWzIwXSk7CisJVVNfREVCVUdQKCIgICAgICBidWZfc2l6ZSA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX0JVRl9TSVpFXSk7CisJVVNfREVCVUdQKCIgICAgICBlY2NfYnl0ZXMgPSAweCV4XG4iLAkgIGlkWzIyXSk7CisJVVNfREVCVUdQKCIgICAgICBmd19yZXZbMF0gPSAweCV4XG4iLAkgICooY2hhciAqKSZpZFtBVEFfSURfRldfUkVWXSk7CisJVVNfREVCVUdQKCIgICAgICBtb2RlbFswXSA9IDB4JXhcbiIsCSAgKihjaGFyICopJmlkW0FUQV9JRF9QUk9EXSk7CisJVVNfREVCVUdQKCIgICAgICBtYXhfbXVsdHNlY3QgPSAweCV4XG4iLCAgaWRbQVRBX0lEX01BWF9NVUxUU0VDVF0gJiAweGZmKTsKKwlVU19ERUJVR1AoIiAgICAgIGR3b3JkX2lvID0gMHgleFxuIiwJICBpZFtBVEFfSURfRFdPUkRfSU9dKTsKKwlVU19ERUJVR1AoIiAgICAgIGNhcGFiaWxpdHkgPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9DQVBBQklMSVRZXSA+PiA4KTsKKwlVU19ERUJVR1AoIiAgICAgIHRQSU8gPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9PTERfUElPX01PREVTXSA+PiA4KTsKKwlVU19ERUJVR1AoIiAgICAgIHRETUEgPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9PTERfRE1BX01PREVTXSA+PiA4KTsKKwlVU19ERUJVR1AoIiAgICAgIGZpZWxkX3ZhbGlkID0gMHgleFxuIiwJICBpZFtBVEFfSURfRklFTERfVkFMSURdKTsKKwlVU19ERUJVR1AoIiAgICAgIGN1cl9jeWxzID0gMHgleFxuIiwJICBpZFtBVEFfSURfQ1VSX0NZTFNdKTsKKwlVU19ERUJVR1AoIiAgICAgIGN1cl9oZWFkcyA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX0NVUl9IRUFEU10pOworCVVTX0RFQlVHUCgiICAgICAgY3VyX3NlY3RvcnMgPSAweCV4XG4iLAkgIGlkW0FUQV9JRF9DVVJfU0VDVE9SU10pOworCVVTX0RFQlVHUCgiICAgICAgY3VyX2NhcGFjaXR5ID0gMHgleFxuIiwgIGF0YV9pZF91MzIoaWQsIDU3KSk7CisJVVNfREVCVUdQKCIgICAgICBtdWx0c2VjdCA9IDB4JXhcbiIsCSAgaWRbQVRBX0lEX01VTFRTRUNUXSAmIDB4ZmYpOworCVVTX0RFQlVHUCgiICAgICAgbGJhX2NhcGFjaXR5ID0gMHgleFxuIiwgIGF0YV9pZF91MzIoaWQsIEFUQV9JRF9MQkFfQ0FQQUNJVFkpKTsKKwlVU19ERUJVR1AoIiAgICAgIGNvbW1hbmRfc2V0XzEgPSAweCV4XG4iLCBpZFtBVEFfSURfQ09NTUFORF9TRVRfMV0pOworCVVTX0RFQlVHUCgiICAgICAgY29tbWFuZF9zZXRfMiA9IDB4JXhcbiIsIGlkW0FUQV9JRF9DT01NQU5EX1NFVF8yXSk7Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogaXNkMjAwX2dldF9pbnF1aXJ5X2RhdGEKQEAgLTExNjMsNyArMTExMSw3IEBACiB7CiAJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKXVzLT5leHRyYTsKIAlpbnQgcmV0U3RhdHVzID0gSVNEMjAwX0dPT0Q7Ci0Jc3RydWN0IGhkX2RyaXZlaWQgKmlkID0gaW5mby0+aWQ7CisJdTE2ICppZCA9IGluZm8tPmlkOwogCiAJVVNfREVCVUdQKCJFbnRlcmluZyBpc2QyMDBfZ2V0X2lucXVpcnlfZGF0YVxuIik7CiAKQEAgLTExODAsOCArMTEyOCw3IEBACiAJCQkvKiB0aGlzIG11c3QgYmUgYW4gQVRBIGRldmljZSAqLwogCQkJLyogcGVyZm9ybSBhbiBBVEEgQ29tbWFuZCBJZGVudGlmeSAqLwogCQkJdHJhbnNmZXJTdGF0dXMgPSBpc2QyMDBfYWN0aW9uKCB1cywgQUNUSU9OX0lERU5USUZZLAotCQkJCQkJCWlkLCAKLQkJCQkJCQlzaXplb2Yoc3RydWN0IGhkX2RyaXZlaWQpICk7CisJCQkJCQkJaWQsIEFUQV9JRF9XT1JEUyAqIDIpOwogCQkJaWYgKHRyYW5zZmVyU3RhdHVzICE9IElTRDIwMF9UUkFOU1BPUlRfR09PRCkgewogCQkJCS8qIEVycm9yIGlzc3VpbmcgQVRBIENvbW1hbmQgSWRlbnRpZnkgKi8KIAkJCQlVU19ERUJVR1AoIiAgIEVycm9yIGlzc3VpbmcgQVRBIENvbW1hbmQgSWRlbnRpZnlcbiIpOwpAQCAtMTE5MSwzNSArMTEzOCw5IEBACiAJCQkJaW50IGk7CiAJCQkJX19iZTE2ICpzcmM7CiAJCQkJX191MTYgKmRlc3Q7Ci0JCQkJaXNkMjAwX2ZpeF9kcml2ZWlkKGlkKTsKIAotCQkJCVVTX0RFQlVHUCgiICAgSWRlbnRpZnkgRGF0YSBTdHJ1Y3R1cmU6XG4iKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGNvbmZpZyA9IDB4JXhcbiIsIGlkLT5jb25maWcpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgY3lscyA9IDB4JXhcbiIsIGlkLT5jeWxzKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGhlYWRzID0gMHgleFxuIiwgaWQtPmhlYWRzKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIHRyYWNrX2J5dGVzID0gMHgleFxuIiwgaWQtPnRyYWNrX2J5dGVzKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIHNlY3Rvcl9ieXRlcyA9IDB4JXhcbiIsIGlkLT5zZWN0b3JfYnl0ZXMpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgc2VjdG9ycyA9IDB4JXhcbiIsIGlkLT5zZWN0b3JzKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIHNlcmlhbF9ub1swXSA9IDB4JXhcbiIsIGlkLT5zZXJpYWxfbm9bMF0pOwotCQkJCVVTX0RFQlVHUCgiICAgICAgYnVmX3R5cGUgPSAweCV4XG4iLCBpZC0+YnVmX3R5cGUpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgYnVmX3NpemUgPSAweCV4XG4iLCBpZC0+YnVmX3NpemUpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgZWNjX2J5dGVzID0gMHgleFxuIiwgaWQtPmVjY19ieXRlcyk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBmd19yZXZbMF0gPSAweCV4XG4iLCBpZC0+ZndfcmV2WzBdKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIG1vZGVsWzBdID0gMHgleFxuIiwgaWQtPm1vZGVsWzBdKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIG1heF9tdWx0c2VjdCA9IDB4JXhcbiIsIGlkLT5tYXhfbXVsdHNlY3QpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgZHdvcmRfaW8gPSAweCV4XG4iLCBpZC0+ZHdvcmRfaW8pOwotCQkJCVVTX0RFQlVHUCgiICAgICAgY2FwYWJpbGl0eSA9IDB4JXhcbiIsIGlkLT5jYXBhYmlsaXR5KTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIHRQSU8gPSAweCV4XG4iLCBpZC0+dFBJTyk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICB0RE1BID0gMHgleFxuIiwgaWQtPnRETUEpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgZmllbGRfdmFsaWQgPSAweCV4XG4iLCBpZC0+ZmllbGRfdmFsaWQpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgY3VyX2N5bHMgPSAweCV4XG4iLCBpZC0+Y3VyX2N5bHMpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgY3VyX2hlYWRzID0gMHgleFxuIiwgaWQtPmN1cl9oZWFkcyk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBjdXJfc2VjdG9ycyA9IDB4JXhcbiIsIGlkLT5jdXJfc2VjdG9ycyk7Ci0JCQkJVVNfREVCVUdQKCIgICAgICBjdXJfY2FwYWNpdHkgPSAweCV4XG4iLCAoaWQtPmN1cl9jYXBhY2l0eTEgPDwgMTYpICsgaWQtPmN1cl9jYXBhY2l0eTAgKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIG11bHRzZWN0ID0gMHgleFxuIiwgaWQtPm11bHRzZWN0KTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGxiYV9jYXBhY2l0eSA9IDB4JXhcbiIsIGlkLT5sYmFfY2FwYWNpdHkpOwotCQkJCVVTX0RFQlVHUCgiICAgICAgY29tbWFuZF9zZXRfMSA9IDB4JXhcbiIsIGlkLT5jb21tYW5kX3NldF8xKTsKLQkJCQlVU19ERUJVR1AoIiAgICAgIGNvbW1hbmRfc2V0XzIgPSAweCV4XG4iLCBpZC0+Y29tbWFuZF9zZXRfMik7CisJCQkJaXNkMjAwX2ZpeF9kcml2ZWlkKGlkKTsKKwkJCQlpc2QyMDBfZHVtcF9kcml2ZWlkKGlkKTsKIAogCQkJCW1lbXNldCgmaW5mby0+SW5xdWlyeURhdGEsIDAsIHNpemVvZihpbmZvLT5JbnF1aXJ5RGF0YSkpOwogCkBAIC0xMjI5LDMwICsxMTUwLDMwIEBACiAJCQkJLyogVGhlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0IDM2ICg1ICsgMzEpICovCiAJCQkJaW5mby0+SW5xdWlyeURhdGEuQWRkaXRpb25hbExlbmd0aCA9IDB4MUY7CiAKLQkJCQlpZiAoaWQtPmNvbW1hbmRfc2V0XzEgJiBDT01NQU5EU0VUX01FRElBX1NUQVRVUykgeworCQkJCWlmIChpZFtBVEFfSURfQ09NTUFORF9TRVRfMV0gJiBDT01NQU5EU0VUX01FRElBX1NUQVRVUykgewogCQkJCQkvKiBzZXQgdGhlIHJlbW92YWJsZSBiaXQgKi8KIAkJCQkJaW5mby0+SW5xdWlyeURhdGEuRGV2aWNlVHlwZU1vZGlmaWVyID0gREVWSUNFX1JFTU9WQUJMRTsKIAkJCQkJaW5mby0+RGV2aWNlRmxhZ3MgfD0gREZfUkVNT1ZBQkxFX01FRElBOwogCQkJCX0KIAogCQkJCS8qIEZpbGwgaW4gdmVuZG9yIGlkZW50aWZpY2F0aW9uIGZpZWxkcyAqLwotCQkJCXNyYyA9IChfX2JlMTYqKWlkLT5tb2RlbDsKKwkJCQlzcmMgPSAoX19iZTE2ICopJmlkW0FUQV9JRF9QUk9EXTsKIAkJCQlkZXN0ID0gKF9fdTE2KilpbmZvLT5JbnF1aXJ5RGF0YS5WZW5kb3JJZDsKIAkJCQlmb3IgKGk9MDtpPDQ7aSsrKQogCQkJCQlkZXN0W2ldID0gYmUxNl90b19jcHUoc3JjW2ldKTsKIAotCQkJCXNyYyA9IChfX2JlMTYqKShpZC0+bW9kZWwrOCk7CisJCQkJc3JjID0gKF9fYmUxNiAqKSZpZFtBVEFfSURfUFJPRCArIDgvMl07CiAJCQkJZGVzdCA9IChfX3UxNiopaW5mby0+SW5xdWlyeURhdGEuUHJvZHVjdElkOwogCQkJCWZvciAoaT0wO2k8ODtpKyspCiAJCQkJCWRlc3RbaV0gPSBiZTE2X3RvX2NwdShzcmNbaV0pOwogCi0JCQkJc3JjID0gKF9fYmUxNiopaWQtPmZ3X3JldjsKKwkJCQlzcmMgPSAoX19iZTE2ICopJmlkW0FUQV9JRF9GV19SRVZdOwogCQkJCWRlc3QgPSAoX191MTYqKWluZm8tPklucXVpcnlEYXRhLlByb2R1Y3RSZXZpc2lvbkxldmVsOwogCQkJCWZvciAoaT0wO2k8MjtpKyspCiAJCQkJCWRlc3RbaV0gPSBiZTE2X3RvX2NwdShzcmNbaV0pOwogCiAJCQkJLyogZGV0ZXJtaW5lIGlmIGl0IHN1cHBvcnRzIE1lZGlhIFN0YXR1cyBOb3RpZmljYXRpb24gKi8KLQkJCQlpZiAoaWQtPmNvbW1hbmRfc2V0XzIgJiBDT01NQU5EU0VUX01FRElBX1NUQVRVUykgeworCQkJCWlmIChpZFtBVEFfSURfQ09NTUFORF9TRVRfMl0gJiBDT01NQU5EU0VUX01FRElBX1NUQVRVUykgewogCQkJCQlVU19ERUJVR1AoIiAgIERldmljZSBzdXBwb3J0cyBNZWRpYSBTdGF0dXMgTm90aWZpY2F0aW9uXG4iKTsKIAogCQkJCQkvKiBJbmRpY2F0ZSB0aGF0IGl0IGlzIGVuYWJsZWQsIGV2ZW4gdGhvdWdoIGl0IGlzIG5vdApAQCAtMTMwMSw3ICsxMjIyLDcgQEAKIAkJCSAgICAgIHVuaW9uIGF0YV9jZGIgKiBhdGFDZGIpCiB7CiAJc3RydWN0IGlzZDIwMF9pbmZvICppbmZvID0gKHN0cnVjdCBpc2QyMDBfaW5mbyAqKXVzLT5leHRyYTsKLQlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQgPSBpbmZvLT5pZDsKKwl1MTYgKmlkID0gaW5mby0+aWQ7CiAJaW50IHNlbmRUb1RyYW5zcG9ydCA9IDE7CiAJdW5zaWduZWQgY2hhciBzZWN0bnVtLCBoZWFkOwogCXVuc2lnbmVkIHNob3J0IGN5bGluZGVyOwpAQCAtMTM2OSwxMyArMTI5MCwxMiBAQAogCiAJCVVTX0RFQlVHUCgiICAgQVRBIE9VVCAtIFNDU0lPUF9SRUFEX0NBUEFDSVRZXG4iKTsKIAotCQlpZiAoaWQtPmNhcGFiaWxpdHkgJiBDQVBBQklMSVRZX0xCQSApIHsKLQkJCWNhcGFjaXR5ID0gaWQtPmxiYV9jYXBhY2l0eSAtIDE7Ci0JCX0gZWxzZSB7Ci0JCQljYXBhY2l0eSA9IChpZC0+aGVhZHMgKgotCQkJCSAgICBpZC0+Y3lscyAqCi0JCQkJICAgIGlkLT5zZWN0b3JzKSAtIDE7Ci0JCX0KKwkJaWYgKGF0YV9pZF9oYXNfbGJhKGlkKSkKKwkJCWNhcGFjaXR5ID0gYXRhX2lkX3UzMihpZCwgQVRBX0lEX0xCQV9DQVBBQ0lUWSkgLSAxOworCQllbHNlCisJCQljYXBhY2l0eSA9IChpZFtBVEFfSURfSEVBRFNdICogaWRbQVRBX0lEX0NZTFNdICoKKwkJCQkgICAgaWRbQVRBX0lEX1NFQ1RPUlNdKSAtIDE7CisKIAkJcmVhZENhcGFjaXR5RGF0YS5Mb2dpY2FsQmxvY2tBZGRyZXNzID0gY3B1X3RvX2JlMzIoY2FwYWNpdHkpOwogCQlyZWFkQ2FwYWNpdHlEYXRhLkJ5dGVzUGVyQmxvY2sgPSBjcHVfdG9fYmUzMigweDIwMCk7CiAKQEAgLTEzOTIsMTYgKzEzMTIsMTYgQEAKIAkJbGJhID0gYmUzMl90b19jcHUoKihfX2JlMzIgKikmc3JiLT5jbW5kWzJdKTsKIAkJYmxvY2tDb3VudCA9ICh1bnNpZ25lZCBsb25nKXNyYi0+Y21uZFs3XTw8OCB8ICh1bnNpZ25lZCBsb25nKXNyYi0+Y21uZFs4XTsKIAotCQlpZiAoaWQtPmNhcGFiaWxpdHkgJiBDQVBBQklMSVRZX0xCQSkgeworCQlpZiAoYXRhX2lkX2hhc19sYmEoaWQpKSB7CiAJCQlzZWN0bnVtID0gKHVuc2lnbmVkIGNoYXIpKGxiYSk7CiAJCQljeWxpbmRlciA9ICh1bnNpZ25lZCBzaG9ydCkobGJhPj44KTsKIAkJCWhlYWQgPSBBVEFfQUREUkVTU19ERVZIRUFEX0xCQV9NT0RFIHwgKHVuc2lnbmVkIGNoYXIpKGxiYT4+MjQgJiAweDBGKTsKIAkJfSBlbHNlIHsKLQkJCXNlY3RudW0gPSAodW5zaWduZWQgY2hhcikoKGxiYSAlIGlkLT5zZWN0b3JzKSArIDEpOwotCQkJY3lsaW5kZXIgPSAodW5zaWduZWQgc2hvcnQpKGxiYSAvIChpZC0+c2VjdG9ycyAqCi0JCQkJCQkJICAgaWQtPmhlYWRzKSk7Ci0JCQloZWFkID0gKHVuc2lnbmVkIGNoYXIpKChsYmEgLyBpZC0+c2VjdG9ycykgJQotCQkJCQkgICAgICAgaWQtPmhlYWRzKTsKKwkJCXNlY3RudW0gPSAodTgpKChsYmEgJSBpZFtBVEFfSURfU0VDVE9SU10pICsgMSk7CisJCQljeWxpbmRlciA9ICh1MTYpKGxiYSAvIChpZFtBVEFfSURfU0VDVE9SU10gKgorCQkJCQlpZFtBVEFfSURfSEVBRFNdKSk7CisJCQloZWFkID0gKHU4KSgobGJhIC8gaWRbQVRBX0lEX1NFQ1RPUlNdKSAlCisJCQkJCWlkW0FUQV9JRF9IRUFEU10pOwogCQl9CiAJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMCA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWFqb3JDb21tYW5kOwogCQlhdGFDZGItPmdlbmVyaWMuU2lnbmF0dXJlQnl0ZTEgPSBpbmZvLT5Db25maWdEYXRhLkFUQU1pbm9yQ29tbWFuZDsKQEAgLTE0MTUsNyArMTMzNSw3IEBACiAJCWF0YUNkYi0+d3JpdGUuQ3lsaW5kZXJIaWdoQnl0ZSA9ICh1bnNpZ25lZCBjaGFyKShjeWxpbmRlcj4+OCk7CiAJCWF0YUNkYi0+d3JpdGUuQ3lsaW5kZXJMb3dCeXRlID0gKHVuc2lnbmVkIGNoYXIpY3lsaW5kZXI7CiAJCWF0YUNkYi0+d3JpdGUuRGV2aWNlSGVhZEJ5dGUgPSAoaGVhZCB8IEFUQV9BRERSRVNTX0RFVkhFQURfU1REKTsKLQkJYXRhQ2RiLT53cml0ZS5Db21tYW5kQnl0ZSA9IFdJTl9SRUFEOworCQlhdGFDZGItPndyaXRlLkNvbW1hbmRCeXRlID0gQVRBX0NNRF9QSU9fUkVBRDsKIAkJYnJlYWs7CiAKIAljYXNlIFdSSVRFXzEwOgpAQCAtMTQyNCwxNCArMTM0NCwxNiBAQAogCQlsYmEgPSBiZTMyX3RvX2NwdSgqKF9fYmUzMiAqKSZzcmItPmNtbmRbMl0pOwogCQlibG9ja0NvdW50ID0gKHVuc2lnbmVkIGxvbmcpc3JiLT5jbW5kWzddPDw4IHwgKHVuc2lnbmVkIGxvbmcpc3JiLT5jbW5kWzhdOwogCi0JCWlmIChpZC0+Y2FwYWJpbGl0eSAmIENBUEFCSUxJVFlfTEJBKSB7CisJCWlmIChhdGFfaWRfaGFzX2xiYShpZCkpIHsKIAkJCXNlY3RudW0gPSAodW5zaWduZWQgY2hhcikobGJhKTsKIAkJCWN5bGluZGVyID0gKHVuc2lnbmVkIHNob3J0KShsYmE+PjgpOwogCQkJaGVhZCA9IEFUQV9BRERSRVNTX0RFVkhFQURfTEJBX01PREUgfCAodW5zaWduZWQgY2hhcikobGJhPj4yNCAmIDB4MEYpOwogCQl9IGVsc2UgewotCQkJc2VjdG51bSA9ICh1bnNpZ25lZCBjaGFyKSgobGJhICUgaWQtPnNlY3RvcnMpICsgMSk7Ci0JCQljeWxpbmRlciA9ICh1bnNpZ25lZCBzaG9ydCkobGJhIC8gKGlkLT5zZWN0b3JzICogaWQtPmhlYWRzKSk7Ci0JCQloZWFkID0gKHVuc2lnbmVkIGNoYXIpKChsYmEgLyBpZC0+c2VjdG9ycykgJSBpZC0+aGVhZHMpOworCQkJc2VjdG51bSA9ICh1OCkoKGxiYSAlIGlkW0FUQV9JRF9TRUNUT1JTXSkgKyAxKTsKKwkJCWN5bGluZGVyID0gKHUxNikobGJhIC8gKGlkW0FUQV9JRF9TRUNUT1JTXSAqCisJCQkJCWlkW0FUQV9JRF9IRUFEU10pKTsKKwkJCWhlYWQgPSAodTgpKChsYmEgLyBpZFtBVEFfSURfU0VDVE9SU10pICUKKwkJCQkJaWRbQVRBX0lEX0hFQURTXSk7CiAJCX0KIAkJYXRhQ2RiLT5nZW5lcmljLlNpZ25hdHVyZUJ5dGUwID0gaW5mby0+Q29uZmlnRGF0YS5BVEFNYWpvckNvbW1hbmQ7CiAJCWF0YUNkYi0+Z2VuZXJpYy5TaWduYXR1cmVCeXRlMSA9IGluZm8tPkNvbmZpZ0RhdGEuQVRBTWlub3JDb21tYW5kOwpAQCAtMTQ0NSw3ICsxMzY3LDcgQEAKIAkJYXRhQ2RiLT53cml0ZS5DeWxpbmRlckhpZ2hCeXRlID0gKHVuc2lnbmVkIGNoYXIpKGN5bGluZGVyPj44KTsKIAkJYXRhQ2RiLT53cml0ZS5DeWxpbmRlckxvd0J5dGUgPSAodW5zaWduZWQgY2hhciljeWxpbmRlcjsKIAkJYXRhQ2RiLT53cml0ZS5EZXZpY2VIZWFkQnl0ZSA9IChoZWFkIHwgQVRBX0FERFJFU1NfREVWSEVBRF9TVEQpOwotCQlhdGFDZGItPndyaXRlLkNvbW1hbmRCeXRlID0gV0lOX1dSSVRFOworCQlhdGFDZGItPndyaXRlLkNvbW1hbmRCeXRlID0gQVRBX0NNRF9QSU9fV1JJVEU7CiAJCWJyZWFrOwogCiAJY2FzZSBBTExPV19NRURJVU1fUkVNT1ZBTDoKQEAgLTE0NTksNyArMTM4MSw3IEBACiAJCQlhdGFDZGItPmdlbmVyaWMuVHJhbnNmZXJCbG9ja1NpemUgPSAxOwogCQkJYXRhQ2RiLT5nZW5lcmljLlJlZ2lzdGVyU2VsZWN0ID0gUkVHX0NPTU1BTkQ7CiAJCQlhdGFDZGItPndyaXRlLkNvbW1hbmRCeXRlID0gKHNyYi0+Y21uZFs0XSAmIDB4MSkgPwotCQkJCVdJTl9ET09STE9DSyA6IFdJTl9ET09SVU5MT0NLOworCQkJCUFUQV9DTURfTUVESUFfTE9DSyA6IEFUQV9DTURfTUVESUFfVU5MT0NLOwogCQkJaXNkMjAwX3NyYl9zZXRfYnVmZmxlbihzcmIsIDApOwogCQl9IGVsc2UgewogCQkJVVNfREVCVUdQKCIgICBOb3QgcmVtb3ZlYWJsZSBtZWRpYSwganVzdCByZXBvcnQgb2theVxuIik7CkBAIC0xNTM5LDggKzE0NjEsNyBAQAogCWlmICghaW5mbykKIAkJcmV0U3RhdHVzID0gSVNEMjAwX0VSUk9SOwogCWVsc2UgewotCQlpbmZvLT5pZCA9IChzdHJ1Y3QgaGRfZHJpdmVpZCAqKQotCQkJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZF9kcml2ZWlkKSwgR0ZQX0tFUk5FTCk7CisJCWluZm8tPmlkID0ga3phbGxvYyhBVEFfSURfV09SRFMgKiAyLCBHRlBfS0VSTkVMKTsKIAkJaW5mby0+UmVnc0J1ZiA9ICh1bnNpZ25lZCBjaGFyICopCiAJCQkJa21hbGxvYyhzaXplb2YoaW5mby0+QVRBUmVncyksIEdGUF9LRVJORUwpOwogCQlpbmZvLT5zcmIuc2Vuc2VfYnVmZmVyID0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYwppbmRleCBmMGFhYzBjLi4zODZlYWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCkBAIC00NzEsNyArNDcxLDcgQEAKICAqLwogc3RhdGljIHZvaWQgd3VzYmhjX2tlZXBfYWxpdmVfcnVuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCiB7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayAqZHcgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKmR3ID0gdG9fZGVsYXllZF93b3JrKHdzKTsKIAlzdHJ1Y3Qgd3VzYmhjICp3dXNiaGMgPQljb250YWluZXJfb2YoZHcsIHN0cnVjdCB3dXNiaGMsIGtlZXBfYWxpdmVfdGltZXIpOwogCiAJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYwppbmRleCA4MTE4ZGI3Li5iMmYxNDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogCQlzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2OwogCiAJCXd1c2JfZGV2ID0gd3VzYmhjLT5wb3J0W3BdLnd1c2JfZGV2OwotCQlpZiAoIXd1c2JfZGV2IHx8ICF3dXNiX2Rldi0+dXNiX2RldiB8ICF3dXNiX2Rldi0+dXNiX2Rldi0+YXV0aGVudGljYXRlZCkKKwkJaWYgKCF3dXNiX2RldiB8fCAhd3VzYl9kZXYtPnVzYl9kZXYgfHwgIXd1c2JfZGV2LT51c2JfZGV2LT5hdXRoZW50aWNhdGVkKQogCQkJY29udGludWU7CiAKIAkJdXNiX2ZpbGxfY29udHJvbF91cmIod3VzYl9kZXYtPnNldF9ndGtfdXJiLCB3dXNiX2Rldi0+dXNiX2RldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL0tjb25maWcgYi9kcml2ZXJzL3V3Yi9LY29uZmlnCmluZGV4IGNhNzgzMTIuLmJhYzhlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL0tjb25maWcKKysrIGIvZHJpdmVycy91d2IvS2NvbmZpZwpAQCAtNDgsMTAgKzQ4LDEwIEBACiAgICAgICAgIGhlbHAKICAgICAgICAgICBUaGlzIGRyaXZlciBlbmFibGVzIHRoZSByYWRpbyBjb250cm9sbGVyIGZvciBXSENJIGNhcmRzLgogCi0gICAgICAgICAgV0hDSSBpcyBhbiBzcGVjaWZpY2F0aW9uIGRldmVsb3BlZCBieSBJbnRlbAorICAgICAgICAgIFdIQ0kgaXMgYSBzcGVjaWZpY2F0aW9uIGRldmVsb3BlZCBieSBJbnRlbAogICAgICAgICAgIChodHRwOi8vd3d3LmludGVsLmNvbS90ZWNobm9sb2d5L2NvbW1zL3d1c2Ivd2hjaS5odG0pIG11Y2gKICAgICAgICAgICBpbiB0aGUgc3Bpcml0IG9mIFVTQidzIEVIQ0ksIGJ1dCBmb3IgVVdCIGFuZCBXaXJlbGVzcyBVU0IKLSAgICAgICAgICByYWRpby9ob3N0IGNvbnRyb2xsZXJzIGNvbm5lY3RlZCB2aWEgbWVtbW9yeSBtYXBwaW5nIChlZzoKKyAgICAgICAgICByYWRpby9ob3N0IGNvbnRyb2xsZXJzIGNvbm5lY3RlZCB2aWEgbWVtb3J5IG1hcHBpbmcgKGVnOgogICAgICAgICAgIFBDSSkuIE1vc3Qgb2YgdGhlc2UgY2FyZHMgY29tZSBhbHNvIHdpdGggYSBXaXJlbGVzcyBVU0IgaG9zdAogICAgICAgICAgIGNvbnRyb2xsZXIuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vNjgzMjhmYi5jIGIvZHJpdmVycy92aWRlby82ODMyOGZiLmMKaW5kZXggN2Y5MDdmYi4uMGIxNzgyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby82ODMyOGZiLmMKKysrIGIvZHJpdmVycy92aWRlby82ODMyOGZiLmMKQEAgLTQ3MSw5ICs0NzEsMTEgQEAKIAlmYl9pbmZvLnBzZXVkb19wYWxldHRlID0gJm1jNjh4MzI4ZmJfcHNldWRvX3BhbGV0dGU7CiAJZmJfaW5mby5mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX0hXQUNDRUxfWVBBTjsKIAotCWZiX2FsbG9jX2NtYXAoJmZiX2luZm8uY21hcCwgMjU2LCAwKTsKKwlpZiAoZmJfYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwLCAyNTYsIDApKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJfaW5mbykgPCAwKSB7CisJCWZiX2RlYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00OTQsNiArNDk2LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYzY4eDMyOGZiX2NsZWFudXAodm9pZCkKIHsKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYl9pbmZvKTsKKwlmYl9kZWFsbG9jX2NtYXAoJmZiX2luZm8uY21hcCk7CiB9CiAKIG1vZHVsZV9leGl0KG1jNjh4MzI4ZmJfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggNDFjMjdhNC4uZmZlMmYyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMTU5NywzMiArMTU5Nyw4IEBACiAJICBEcml2ZXIgZm9yIENhc3RsZVJvY2sgaW50ZWdyYXRlZCBncmFwaGljcyBjb3JlIGluIHRoZQogCSAgVklBIFZUODYyMyBbQXBvbGxvIENMRTI2Nl0gY2hpcHNldC4KIAotY29uZmlnIEZCX0NZQkxBCi0JdHJpc3RhdGUgIkN5YmVyYmxhZGUvaTEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEZCICYmIFBDSSAmJiBYODZfMzIgJiYgITY0QklUCi0Jc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKLQktLS1oZWxwLS0tCi0JICBUaGlzIGRyaXZlciBpcyBzdXBwb3NlZCB0byBzdXBwb3J0IHRoZSBUcmlkZW50IEN5YmVyYmxhZGUvaTEKLQkgIGdyYXBoaWNzIGNvcmUgaW50ZWdyYXRlZCBpbiB0aGUgVklBIFZUODYwMUEgTm9ydGggQnJpZGdlLAotCSAgYWxzbyBrbm93biBhcyBWSUEgQXBvbGxvIFBMRTEzMy4KLQotCSAgU3RhdHVzOgotCSAgIC0gRGV2ZWxvcGVkLCB0ZXN0ZWQgYW5kIHdvcmtpbmcgb24gRVBJQSA1MDAwIGFuZCBFUElBIDgwMC4KLQkgICAtIERvZXMgd29yayByZWxpYWJsZSBvbiBhbGwgc3lzdGVtcyB3aXRoIENSVC9MQ0QgY29ubmVjdGVkIHRvCi0JICAgICBub3JtYWwgVkdBIHBvcnRzLgotCSAgIC0gU2hvdWxkIHdvcmsgb24gc3lzdGVtcyB0aGF0IGRvIHVzZSB0aGUgaW50ZXJuYWwgTENEIHBvcnQsIGJ1dAotCSAgICAgdGhpcyBpcyBhYnNvbHV0ZWx5IG5vdCB0ZXN0ZWQuCi0KLQkgIENoYXJhY3RlciBpbWFnZWJsaXQsIGNvcHlhcmVhIGFuZCByZWN0YW5nbGUgZmlsbCBhcmUgaHcgYWNjZWxlcmF0ZWQsCi0JICB5cGFuIHNjcm9sbGluZyBpcyB1c2VkIGJ5IGRlZmF1bHQuCi0KLQkgIFBsZWFzZSBkbyByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vZmIvY3libGFmYi8qPi4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3libGFmYi4KLQogY29uZmlnIEZCX1RSSURFTlQKLQl0cmlzdGF0ZSAiVHJpZGVudCBzdXBwb3J0IgorCXRyaXN0YXRlICJUcmlkZW50L0N5YmVyWFhYL0N5YmVyQmxhZGUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFBDSQogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCkBAIC0xNjMzLDIxICsxNjA5LDE0IEBACiAJICBhbmQgQmxhZGUgWFAuCiAJICBUaGVyZSBhcmUgYWxzbyBpbnRlZ3JhdGVkIHZlcnNpb25zIG9mIHRoZXNlIGNoaXBzIGNhbGxlZCBDeWJlclhYWFgsCiAJICBDeWJlckltYWdlIG9yIEN5YmVyQmxhZGUuIFRoZXNlIGNoaXBzIGFyZSBtb3N0bHkgZm91bmQgaW4gbGFwdG9wcwotCSAgYnV0IGFsc28gb24gc29tZSBtb3RoZXJib2FyZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkCi0JICA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZiL3RyaWRlbnRmYi50eHQ+CisJICBidXQgYWxzbyBvbiBzb21lIG1vdGhlcmJvYXJkcyBpbmNsdWRpbmcgZWFybHkgVklBIEVQSUEgbW90aGVyYm9hcmRzLgorCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9mYi90cmlkZW50ZmIudHh0PgogCiAJICBTYXkgWSBpZiB5b3UgaGF2ZSBzdWNoIGEgZ3JhcGhpY3MgYm9hcmQuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRyaWRlbnRmYi4KIAotY29uZmlnIEZCX1RSSURFTlRfQUNDRUwKLQlib29sICJUcmlkZW50IEFjY2VsZXJhdGlvbiBmdW5jdGlvbnMgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBGQl9UUklERU5UICYmIEVYUEVSSU1FTlRBTAotCS0tLWhlbHAtLS0KLQlUaGlzIHdpbGwgY29tcGlsZSB0aGUgVHJpZGVudCBmcmFtZSBidWZmZXIgZGV2aWNlIHdpdGgKLQlhY2NlbGVyYXRpb24gZnVuY3Rpb25zLgotCiBjb25maWcgRkJfQVJLCiAJdHJpc3RhdGUgIkFSSyAyMDAwUFYgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEZCICYmIFBDSQpAQCAtMTkyMCw2ICsxODg5LDMwIEBACiAJZGVwZW5kcyBvbiBGQl9UTUlPCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBGQl9TM0MKKwl0cmlzdGF0ZSAiU2Ftc3VuZyBTM0MgZnJhbWVidWZmZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCICYmIEFSQ0hfUzNDNjRYWAorCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKKwlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCisJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKwktLS1oZWxwLS0tCisJICBGcmFtZSBidWZmZXIgZHJpdmVyIGZvciB0aGUgYnVpbHQtaW4gRkIgY29udHJvbGxlciBpbiB0aGUgU2Ftc3VuZworCSAgU29DIGxpbmUgZnJvbSB0aGUgUzNDMjQ0MyBvbndhcmRzLCBpbmNsdWRpbmcgdGhlIFMzQzI0MTYsIFMzQzI0NTAsCisJICBhbmQgdGhlIFMzQzY0WFggc2VyaWVzIHN1Y2ggYXMgdGhlIFMzQzY0MDAgYW5kIFMzQzY0MTAuCisKKwkgIFRoZXNlIGNoaXBzIGFsbCBoYXZlIHRoZSBzYW1lIGJhc2ljIGZyYW1lYnVmZmVyIGRlc2lnbiB3aXRoIHRoZQorCSAgYWN0dWFsIGNhcGFiaWxpdGllcyBkZXBlbmRpbmcgb24gdGhlIGNoaXAuIEZvciBpbnN0YW5jZSB0aGUgUzNDNjQwMAorCSAgYW5kIFMzQzY0MTAgc3VwcG9ydCA0IGhhcmR3YXJlIHdpbmRvd3Mgd2hlcmVhcyB0aGUgUzNDMjRYWCBzZXJpZXMKKwkgIGN1cnJlbnRseSBvbmx5IGhhdmUgdHdvLgorCisJICBDdXJyZW50bHkgdGhlIHN1cHBvcnQgaXMgb25seSBmb3IgdGhlIFMzQzY0MDAgYW5kIFMzQzY0MTAgU29Dcy4KKworY29uZmlnIEZCX1MzQ19ERUJVR19SRUdXUklURQorICAgICAgIGJvb2wgIkRlYnVnIHJlZ2lzdGVyIHdyaXRlcyIKKyAgICAgICBkZXBlbmRzIG9uIEZCX1MzQworICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgIFNob3cgYWxsIHJlZ2lzdGVyIHdyaXRlcyB2aWEgcHJpbnRrKEtFUk5fREVCVUcpCisKIGNvbmZpZyBGQl9TM0MyNDEwCiAJdHJpc3RhdGUgIlMzQzI0MTAgTENEIGZyYW1lYnVmZmVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBGQiAmJiBBUkNIX1MzQzI0MTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCmluZGV4IGJiMjY1ZWMuLjBkYmQ2YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQpAQCAtNzYsNiArNzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0YWZiX2lwbGFuMnAyLm8gYXRhZmJfaXBsYW4ycDQubyBhdGFmYl9pcGxhbjJwOC5vCiBvYmotJChDT05GSUdfRkJfTUFDKSAgICAgICAgICAgICAgKz0gbWFjZmIubwogb2JqLSQoQ09ORklHX0ZCX0hFQ1VCQSkgICAgICAgICAgICs9IGhlY3ViYWZiLm8KK29iai0kKENPTkZJR19GQl9ONDExKSAgICAgICAgICAgICArPSBuNDExLm8KIG9iai0kKENPTkZJR19GQl9IR0EpICAgICAgICAgICAgICArPSBoZ2FmYi5vCiBvYmotJChDT05GSUdfRkJfWFZSNTAwKSAgICAgICAgICAgKz0gc3VueHZyNTAwLm8KIG9iai0kKENPTkZJR19GQl9YVlIyNTAwKSAgICAgICAgICArPSBzdW54dnIyNTAwLm8KQEAgLTExMCw2ICsxMTEsNyBAQAogb2JqLSQoQ09ORklHX0ZCX1MxRDEzWFhYKQkgICs9IHMxZDEzeHh4ZmIubwogb2JqLSQoQ09ORklHX0ZCX1NINzc2MCkJCSAgKz0gc2g3NzYwZmIubwogb2JqLSQoQ09ORklHX0ZCX0lNWCkgICAgICAgICAgICAgICs9IGlteGZiLm8KK29iai0kKENPTkZJR19GQl9TM0MpCQkgICs9IHMzYy1mYi5vCiBvYmotJChDT05GSUdfRkJfUzNDMjQxMCkJICArPSBzM2MyNDEwZmIubwogb2JqLSQoQ09ORklHX0ZCX0ZTTF9ESVUpCSAgKz0gZnNsLWRpdS1mYi5vCiBvYmotJChDT05GSUdfRkJfQ09CQUxUKSAgICAgICAgICAgKz0gY29iYWx0X2xjZGZiLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2FtYmEtY2xjZC5jCmluZGV4IDRlMDQ2ZmUuLjYxMDUwYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYW1iYS1jbGNkLmMKKysrIGIvZHJpdmVycy92aWRlby9hbWJhLWNsY2QuYwpAQCAtNDA4LDcgKzQwOCw5IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSBjb2xvdXJtYXAuCiAJICovCi0JZmJfYWxsb2NfY21hcCgmZmItPmZiLmNtYXAsIDI1NiwgMCk7CisJcmV0ID0gZmJfYWxsb2NfY21hcCgmZmItPmZiLmNtYXAsIDI1NiwgMCk7CisJaWYgKHJldCkKKwkJZ290byB1bm1hcDsKIAogCS8qCiAJICogRW5zdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkLgpAQCAtNDI2LDYgKzQyOCw4IEBACiAKIAlwcmludGsoS0VSTl9FUlIgIkNMQ0Q6IGNhbm5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlciAoJWQpXG4iLCByZXQpOwogCisJZmJfZGVhbGxvY19jbWFwKCZmYi0+ZmIuY21hcCk7CisgdW5tYXA6CiAJaW91bm1hcChmYi0+cmVncyk7CiAgZnJlZV9jbGs6CiAJY2xrX3B1dChmYi0+Y2xrKTsKQEAgLTQ4NSw2ICs0ODksOCBAQAogCiAJY2xjZGZiX2Rpc2FibGUoZmIpOwogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiLT5mYik7CisJaWYgKGZiLT5mYi5jbWFwLmxlbikKKwkJZmJfZGVhbGxvY19jbWFwKCZmYi0+ZmIuY21hcCk7CiAJaW91bm1hcChmYi0+cmVncyk7CiAJY2xrX3B1dChmYi0+Y2xrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hbWlmYi5jIGIvZHJpdmVycy92aWRlby9hbWlmYi5jCmluZGV4IDEwMGYyMzYuLjgyYmVkZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYW1pZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2FtaWZiLmMKQEAgLTI0MzcsNyArMjQzNyw5IEBACiAJCWdvdG8gYW1pZmJfZXJyb3I7CiAJfQogCi0JZmJfYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwLCAxPDxmYl9pbmZvLnZhci5iaXRzX3Blcl9waXhlbCwgMCk7CisJZXJyID0gZmJfYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwLCAxPDxmYl9pbmZvLnZhci5iaXRzX3Blcl9waXhlbCwgMCk7CisJaWYgKGVycikKKwkJZ290byBhbWlmYl9lcnJvcjsKIAogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJfaW5mbykgPCAwKSB7CiAJCWVyciA9IC1FSU5WQUw7CkBAIC0yNDU2LDcgKzI0NTgsOCBAQAogCiBzdGF0aWMgdm9pZCBhbWlmYl9kZWluaXQodm9pZCkKIHsKLQlmYl9kZWFsbG9jX2NtYXAoJmZiX2luZm8uY21hcCk7CisJaWYgKGZiX2luZm8uY21hcC5sZW4pCisJCWZiX2RlYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwKTsKIAljaGlwZnJlZSgpOwogCWlmICh2aWRlb21lbW9yeSkKIAkJaW91bm1hcCgodm9pZCopdmlkZW9tZW1vcnkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hcmtmYi5jIGIvZHJpdmVycy92aWRlby9hcmtmYi5jCmluZGV4IDMxNGQxODYuLmQ1ODNiZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXJrZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Fya2ZiLmMKQEAgLTQ3MCw3ICs0NzAsNyBAQAogCiAJd2hpbGUgKGNvdW50ICE9IDApCiAJewotCQl2Z2Ffd3NlcShOVUxMLCAweDFDLCByZWd2YWwgfCAoY29kZVswXSAmIDQpID8gMHg4MCA6IDApOworCQl2Z2Ffd3NlcShOVUxMLCAweDFDLCByZWd2YWwgfCAoY29kZVswXSAmIDQgPyAweDgwIDogMCkpOwogCQljb2RlWzFdID0gdmdhX3IoTlVMTCwgZGFjX3JlZ3NbY29kZVswXSAmIDNdKTsKIAkJY291bnQtLTsKIAkJY29kZSArPSAyOwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAKIAl3aGlsZSAoY291bnQgIT0gMCkKIAl7Ci0JCXZnYV93c2VxKE5VTEwsIDB4MUMsIHJlZ3ZhbCB8IChjb2RlWzBdICYgNCkgPyAweDgwIDogMCk7CisJCXZnYV93c2VxKE5VTEwsIDB4MUMsIHJlZ3ZhbCB8IChjb2RlWzBdICYgNCA/IDB4ODAgOiAwKSk7CiAJCXZnYV93KE5VTEwsIGRhY19yZWdzW2NvZGVbMF0gJiAzXSwgY29kZVsxXSk7CiAJCWNvdW50LS07CiAJCWNvZGUgKz0gMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXNpbGlhbnRmYi5jIGIvZHJpdmVycy92aWRlby9hc2lsaWFudGZiLmMKaW5kZXggMWZkMjJmNC4uMWExZjk0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hc2lsaWFudGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hc2lsaWFudGZiLmMKQEAgLTUwNSwxOSArNTA1LDI3IEBACiAJLnZzeW5jX2xlbiAJPSAyLAogfTsKIAotc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfYXNpbGlhbnQoc3RydWN0IGZiX2luZm8gKnAsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfYXNpbGlhbnQoc3RydWN0IGZiX2luZm8gKnAsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKKwlpbnQgZXJyOworCiAJcC0+Zml4CQkJPSBhc2lsaWFudGZiX2ZpeDsKIAlwLT5maXguc21lbV9zdGFydAk9IGFkZHI7CiAJcC0+dmFyCQkJPSBhc2lsaWFudGZiX3ZhcjsKIAlwLT5mYm9wcwkJPSAmYXNpbGlhbnRmYl9vcHM7CiAJcC0+ZmxhZ3MJCT0gRkJJTkZPX0RFRkFVTFQ7CiAKLQlmYl9hbGxvY19jbWFwKCZwLT5jbWFwLCAyNTYsIDApOworCWVyciA9IGZiX2FsbG9jX2NtYXAoJnAtPmNtYXAsIDI1NiwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkMmVCA2OTAwMCBmYiBmYWlsZWQgdG8gYWxsb2MgY21hcCBtZW1vcnlcbiIpOworCQlyZXR1cm4gZXJyOworCX0KIAotCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihwKSA8IDApIHsKKwllcnIgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihwKTsKKwlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIkMmVCA2OTAwMCBmcmFtZWJ1ZmZlciBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIpOwotCQlyZXR1cm47CisJCWZiX2RlYWxsb2NfY21hcCgmcC0+Y21hcCk7CisJCXJldHVybiBlcnI7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogQXNpbGlhbnQgNjkwMDAgZnJhbWUgYnVmZmVyICglZEsgUkFNIGRldGVjdGVkKVxuIiwKQEAgLTUzMiw2ICs1NDAsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZTsKIAlzdHJ1Y3QgZmJfaW5mbyAqcDsKKwlpbnQgZXJyOwogCiAJaWYgKChkcC0+cmVzb3VyY2VbMF0uZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC01NjAsNyArNTY5LDEzIEBACiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkcCwgNCwgMHgwMjgwMDA4Myk7CiAJd3JpdGViKDMsIHAtPnNjcmVlbl9iYXNlICsgMHg0MDA3ODQpOwogCi0JaW5pdF9hc2lsaWFudChwLCBhZGRyKTsKKwllcnIgPSBpbml0X2FzaWxpYW50KHAsIGFkZHIpOworCWlmIChlcnIpIHsKKwkJaW91bm1hcChwLT5zY3JlZW5fYmFzZSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbihhZGRyLCBzaXplKTsKKwkJZnJhbWVidWZmZXJfcmVsZWFzZShwKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAKIAlwY2lfc2V0X2RydmRhdGEoZHAsIHApOwogCXJldHVybiAwOwpAQCAtNTcxLDYgKzU4Niw3IEBACiAJc3RydWN0IGZiX2luZm8gKnAgPSBwY2lfZ2V0X2RydmRhdGEoZHApOwogCiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihwKTsKKwlmYl9kZWFsbG9jX2NtYXAoJnAtPmNtYXApOwogCWlvdW5tYXAocC0+c2NyZWVuX2Jhc2UpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZHAsIDApLCBwY2lfcmVzb3VyY2VfbGVuKGRwLCAwKSk7CiAJcGNpX3NldF9kcnZkYXRhKGRwLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9hY2NlbC5jIGIvZHJpdmVycy92aWRlby9hdHkvbWFjaDY0X2FjY2VsLmMKaW5kZXggYThmNjBjMy4uMGNjOTcyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvbWFjaDY0X2FjY2VsLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvbWFjaDY0X2FjY2VsLmMKQEAgLTM5LDcgKzM5LDggQEAKIHsKIAkvKiByZXNldCBlbmdpbmUgKi8KIAlhdHlfc3RfbGUzMihHRU5fVEVTVF9DTlRMLAotCQlhdHlfbGRfbGUzMihHRU5fVEVTVF9DTlRMLCBwYXIpICYgfkdVSV9FTkdJTkVfRU5BQkxFLCBwYXIpOworCQlhdHlfbGRfbGUzMihHRU5fVEVTVF9DTlRMLCBwYXIpICYKKwkJfihHVUlfRU5HSU5FX0VOQUJMRSB8IEhXQ1VSU09SX0VOQUJMRSksIHBhcik7CiAJLyogZW5hYmxlIGVuZ2luZSAqLwogCWF0eV9zdF9sZTMyKEdFTl9URVNUX0NOVEwsCiAJCWF0eV9sZF9sZTMyKEdFTl9URVNUX0NOVEwsIHBhcikgfCBHVUlfRU5HSU5FX0VOQUJMRSwgcGFyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9jdXJzb3IuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9jdXJzb3IuYwppbmRleCBmYWY5NWRhLi4wNGM3MTA4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L21hY2g2NF9jdXJzb3IuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9tYWNoNjRfY3Vyc29yLmMKQEAgLTc3LDkgKzc3LDEzIEBACiAJaWYgKHBhci0+YXNsZWVwKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JLyogSGlkZSBjdXJzb3IgKi8KIAl3YWl0X2Zvcl9maWZvKDEsIHBhcik7Ci0JYXR5X3N0X2xlMzIoR0VOX1RFU1RfQ05UTCwgYXR5X2xkX2xlMzIoR0VOX1RFU1RfQ05UTCwgcGFyKSAmIH5IV0NVUlNPUl9FTkFCTEUsIHBhcik7CisJaWYgKGN1cnNvci0+ZW5hYmxlKQorCQlhdHlfc3RfbGUzMihHRU5fVEVTVF9DTlRMLCBhdHlfbGRfbGUzMihHRU5fVEVTVF9DTlRMLCBwYXIpCisJCQkgICAgfCBIV0NVUlNPUl9FTkFCTEUsIHBhcik7CisJZWxzZQorCQlhdHlfc3RfbGUzMihHRU5fVEVTVF9DTlRMLCBhdHlfbGRfbGUzMihHRU5fVEVTVF9DTlRMLCBwYXIpCisJCQkJJiB+SFdDVVJTT1JfRU5BQkxFLCBwYXIpOwogCiAJLyogc2V0IHBvc2l0aW9uICovCiAJaWYgKGN1cnNvci0+c2V0ICYgRkJfQ1VSX1NFVFBPUykgewpAQCAtMTA5LDcgKzExMyw3IEBACiAJCQl5PDw9MTsKIAkJCWg8PD0xOwogCQl9Ci0JCXdhaXRfZm9yX2ZpZm8oNCwgcGFyKTsKKwkJd2FpdF9mb3JfZmlmbygzLCBwYXIpOwogCQlhdHlfc3RfbGUzMihDVVJfT0ZGU0VULCAoaW5mby0+Zml4LnNtZW1fbGVuID4+IDMpICsgKHlvZmYgPDwgMSksIHBhcik7CiAJCWF0eV9zdF9sZTMyKENVUl9IT1JaX1ZFUlRfT0ZGLAogCQkJICAgICgodTMyKSAoNjQgLSBoICsgeW9mZikgPDwgMTYpIHwgeG9mZiwgcGFyKTsKQEAgLTE3NywxMSArMTgxLDYgQEAKIAkgICAgfQogCX0KIAotCWlmIChjdXJzb3ItPmVuYWJsZSkgewotCQl3YWl0X2Zvcl9maWZvKDEsIHBhcik7Ci0JCWF0eV9zdF9sZTMyKEdFTl9URVNUX0NOVEwsIGF0eV9sZF9sZTMyKEdFTl9URVNUX0NOVEwsIHBhcikKLQkJCSAgICB8IEhXQ1VSU09SX0VOQUJMRSwgcGFyKTsKLQl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKaW5kZXggMWRlMGMwMC4uOTdhMWYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKQEAgLTg5LDYgKzg5LDkgQEAKIAlCVUdGSVgoIkFjZXIgQXNwaXJlIDIwMTAiLAogCSAgICAgICBQQ0lfVkVORE9SX0lEX0FJLCAweDAwNjEsCiAJICAgICAgIHJhZGVvbl9wbV9vZmYsIHJhZGVvbl9yZWluaXRpYWxpemVfTTEwKSwKKwlCVUdGSVgoIkFjZXIgVHJhdmVsbWF0ZSAyOTBELzI5MkxNaSIsCisJICAgICAgIFBDSV9WRU5ET1JfSURfQUksIDB4MDA1YSwKKwkgICAgICAgcmFkZW9uX3BtX29mZiwgcmFkZW9uX3JlaW5pdGlhbGl6ZV9NMTApLAogCXsgLmlkZW50ID0gTlVMTCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9iYWNrbGlnaHQuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCmluZGV4IDE1NzA1N2MuLmRkMzdjYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2JhY2tsaWdodC5jCkBAIC0zNSw2ICszNSw4IEBACiAJCXJldHVybiAwOwogCiAJYmQgPSBjb250YWluZXJfb2Yoc2VsZiwgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UsIGZiX25vdGlmKTsKKwlpZiAoIWxvY2tfZmJfaW5mbyhldmRhdGEtPmluZm8pKQorCQlyZXR1cm4gLUVOT0RFVjsKIAltdXRleF9sb2NrKCZiZC0+b3BzX2xvY2spOwogCWlmIChiZC0+b3BzKQogCQlpZiAoIWJkLT5vcHMtPmNoZWNrX2ZiIHx8CkBAIC00Nyw2ICs0OSw3IEBACiAJCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7CiAJCX0KIAltdXRleF91bmxvY2soJmJkLT5vcHNfbG9jayk7CisJdW5sb2NrX2ZiX2luZm8oZXZkYXRhLT5pbmZvKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwppbmRleCBiNjQ0OTQ3Li4wYmIxM2RmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sY2QuYwpAQCAtNDAsNiArNDAsOCBAQAogCWlmICghbGQtPm9wcykKIAkJcmV0dXJuIDA7CiAKKwlpZiAoIWxvY2tfZmJfaW5mbyhldmRhdGEtPmluZm8pKQorCQlyZXR1cm4gLUVOT0RFVjsKIAltdXRleF9sb2NrKCZsZC0+b3BzX2xvY2spOwogCWlmICghbGQtPm9wcy0+Y2hlY2tfZmIgfHwgbGQtPm9wcy0+Y2hlY2tfZmIobGQsIGV2ZGF0YS0+aW5mbykpIHsKIAkJaWYgKGV2ZW50ID09IEZCX0VWRU5UX0JMQU5LKSB7CkBAIC01MSw2ICs1Myw3IEBACiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZsZC0+b3BzX2xvY2spOworCXVubG9ja19mYl9pbmZvKGV2ZGF0YS0+aW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2lycnVzZmIuYyBiL2RyaXZlcnMvdmlkZW8vY2lycnVzZmIuYwppbmRleCBhMmFhNmRkLi5kNDJlMzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NpcnJ1c2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jaXJydXNmYi5jCkBAIC0zNCw4ICszNCw2IEBACiAgKgogICovCiAKLSNkZWZpbmUgQ0lSUlVTRkJfVkVSU0lPTiAiMi4wLXByZTIiCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtNzIsMjAgKzcwLDkgQEAKICAqCiAgKi8KIAotLyogZW5hYmxlIGRlYnVnIG91dHB1dD8gKi8KLS8qICNkZWZpbmUgQ0lSUlVTRkJfREVCVUcgMSAqLwotCiAvKiBkaXNhYmxlIHJ1bnRpbWUgYXNzZXJ0aW9ucz8gKi8KIC8qICNkZWZpbmUgQ0lSUlVTRkJfTkRFQlVHICovCiAKLS8qIGRlYnVnIG91dHB1dCAqLwotI2lmZGVmIENJUlJVU0ZCX0RFQlVHCi0jZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKSBcCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgX19mdW5jX18gLCAjIyBhcmdzKQotI2Vsc2UKLSNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pCi0jZW5kaWYKLQogLyogZGVidWdnaW5nIGFzc2VydGlvbnMgKi8KICNpZm5kZWYgQ0lSUlVTRkJfTkRFQlVHCiAjZGVmaW5lIGFzc2VydChleHByKSBcCkBAIC0xMDgsMTQgKzk1LDE1IEBACiAvKiBib2FyZCB0eXBlcyAqLwogZW51bSBjaXJydXNfYm9hcmQgewogCUJUX05PTkUgPSAwLAotCUJUX1NENjQsCi0JQlRfUElDQ09MTywKLQlCVF9QSUNBU1NPLAotCUJUX1NQRUNUUlVNLAorCUJUX1NENjQsCS8qIEdENTQzNCAqLworCUJUX1BJQ0NPTE8sCS8qIEdENTQyNiAqLworCUJUX1BJQ0FTU08sCS8qIEdENTQyNiBvciBHRDU0MjggKi8KKwlCVF9TUEVDVFJVTSwJLyogR0Q1NDI2IG9yIEdENTQyOCAqLwogCUJUX1BJQ0FTU080LAkvKiBHRDU0NDYgKi8KIAlCVF9BTFBJTkUsCS8qIEdENTQzeC80eCAqLwogCUJUX0dENTQ4MCwKLQlCVF9MQUdVTkEsCS8qIEdENTQ2eCAqLworCUJUX0xBR1VOQSwJLyogR0Q1NDYyLzY0ICovCisJQlRfTEFHVU5BQiwJLyogR0Q1NDY1ICovCiB9OwogCiAvKgpAQCAtMTUwLDE1ICsxMzgsMTcgQEAKIAkJLm1heGNsb2NrCQk9IHsKIAkJCS8qIGd1ZXNzICovCiAJCQkvKiB0aGUgU0Q2NC9QNCBoYXZlIGEgaGlnaGVyIG1heC4gdmlkZW9jbG9jayAqLwotCQkJMTQwMDAwLCAxNDAwMDAsIDE0MDAwMCwgMTQwMDAwLCAxNDAwMDAsCisJCQkxMzUxMDAsIDEzNTEwMCwgODU1MDAsIDg1NTAwLCAwCiAJCX0sCiAJCS5pbml0X3NyMDcJCT0gdHJ1ZSwKIAkJLmluaXRfc3IxZgkJPSB0cnVlLAogCQkuc2Nybl9zdGFydF9iaXQxOQk9IHRydWUsCiAJCS5zcjA3CQkJPSAweEYwLAogCQkuc3IwN18xYnBwCQk9IDB4RjAsCisJCS5zcjA3XzFicHBfbXV4CQk9IDB4RjYsCiAJCS5zcjA3XzhicHAJCT0gMHhGMSwKLQkJLnNyMWYJCQk9IDB4MjAKKwkJLnNyMDdfOGJwcF9tdXgJCT0gMHhGNywKKwkJLnNyMWYJCQk9IDB4MUUKIAl9LAogCVtCVF9QSUNDT0xPXSA9IHsKIAkJLm5hbWUJCQk9ICJDTCBQaWNjb2xvIiwKQEAgLTIxMCw5ICsyMDAsMTEgQEAKIAkJLmluaXRfc3IwNwkJPSB0cnVlLAogCQkuaW5pdF9zcjFmCQk9IGZhbHNlLAogCQkuc2Nybl9zdGFydF9iaXQxOQk9IHRydWUsCi0JCS5zcjA3CQkJPSAweDIwLAotCQkuc3IwN18xYnBwCQk9IDB4MjAsCi0JCS5zcjA3XzhicHAJCT0gMHgyMSwKKwkJLnNyMDcJCQk9IDB4QTAsCisJCS5zcjA3XzFicHAJCT0gMHhBMCwKKwkJLnNyMDdfMWJwcF9tdXgJCT0gMHhBNiwKKwkJLnNyMDdfOGJwcAkJPSAweEExLAorCQkuc3IwN184YnBwX211eAkJPSAweEE3LAogCQkuc3IxZgkJCT0gMAogCX0sCiAJW0JUX0FMUElORV0gPSB7CkBAIC0yMjUsOCArMjE3LDggQEAKIAkJLmluaXRfc3IxZgkJPSB0cnVlLAogCQkuc2Nybl9zdGFydF9iaXQxOQk9IHRydWUsCiAJCS5zcjA3CQkJPSAweEEwLAotCQkuc3IwN18xYnBwCQk9IDB4QTEsCi0JCS5zcjA3XzFicHBfbXV4CQk9IDB4QTcsCisJCS5zcjA3XzFicHAJCT0gMHhBMCwKKwkJLnNyMDdfMWJwcF9tdXgJCT0gMHhBNiwKIAkJLnNyMDdfOGJwcAkJPSAweEExLAogCQkuc3IwN184YnBwX211eAkJPSAweEE3LAogCQkuc3IxZgkJCT0gMHgxQwpAQCAtMjQ3LDggKzIzOSwxOCBAQAogCVtCVF9MQUdVTkFdID0gewogCQkubmFtZQkJCT0gIkNMIExhZ3VuYSIsCiAJCS5tYXhjbG9jawkJPSB7Ci0JCQkvKiBndWVzcyAqLwotCQkJMTM1MTAwLCAxMzUxMDAsIDEzNTEwMCwgMTM1MTAwLCAxMzUxMDAsCisJCQkvKiB0YWtlbiBmcm9tIFgxMSBjb2RlICovCisJCQkxNzAwMDAsIDE3MDAwMCwgMTcwMDAwLCAxNzAwMDAsIDEzNTEwMCwKKwkJfSwKKwkJLmluaXRfc3IwNwkJPSBmYWxzZSwKKwkJLmluaXRfc3IxZgkJPSBmYWxzZSwKKwkJLnNjcm5fc3RhcnRfYml0MTkJPSB0cnVlLAorCX0sCisJW0JUX0xBR1VOQUJdID0geworCQkubmFtZQkJCT0gIkNMIExhZ3VuYSBBR1AiLAorCQkubWF4Y2xvY2sJCT0geworCQkJLyogdGFrZW4gZnJvbSBYMTEgY29kZSAqLworCQkJMTcwMDAwLCAyNTAwMDAsIDE3MDAwMCwgMTcwMDAwLCAxMzUxMDAsCiAJCX0sCiAJCS5pbml0X3NyMDcJCT0gZmFsc2UsCiAJCS5pbml0X3NyMWYJCT0gZmFsc2UsCkBAIC0yNjIsOCArMjY0LDggQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNpcnJ1c2ZiX3BjaV90YWJsZVtdID0gewogCUNISVAoUENJX0RFVklDRV9JRF9DSVJSVVNfNTQzNiwgQlRfQUxQSU5FKSwKLQlDSElQKFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0MzRfOCwgQlRfQUxQSU5FKSwKLQlDSElQKFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0MzRfNCwgQlRfQUxQSU5FKSwKKwlDSElQKFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0MzRfOCwgQlRfU0Q2NCksCisJQ0hJUChQQ0lfREVWSUNFX0lEX0NJUlJVU181NDM0XzQsIEJUX1NENjQpLAogCUNISVAoUENJX0RFVklDRV9JRF9DSVJSVVNfNTQzMCwgQlRfQUxQSU5FKSwgLyogR0QtNTQ0MCBpcyBzYW1lIGlkICovCiAJQ0hJUChQQ0lfREVWSUNFX0lEX0NJUlJVU183NTQzLCBCVF9BTFBJTkUpLAogCUNISVAoUENJX0RFVklDRV9JRF9DSVJSVVNfNzU0OCwgQlRfQUxQSU5FKSwKQEAgLTI3MSw3ICsyNzMsNyBAQAogCUNISVAoUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ0NiwgQlRfUElDQVNTTzQpLCAvKiBQaWNhc3NvIDQgaXMgNTQ0NiAqLwogCUNISVAoUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ2MiwgQlRfTEFHVU5BKSwgLyogQ0wgTGFndW5hICovCiAJQ0hJUChQQ0lfREVWSUNFX0lEX0NJUlJVU181NDY0LCBCVF9MQUdVTkEpLCAvKiBDTCBMYWd1bmEgM0QgKi8KLQlDSElQKFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0NjUsIEJUX0xBR1VOQSksIC8qIENMIExhZ3VuYSAzREEqLworCUNISVAoUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ2NSwgQlRfTEFHVU5BQiksIC8qIENMIExhZ3VuYSAzREEqLwogCXsgMCwgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjaXJydXNmYl9wY2lfdGFibGUpOwpAQCAtMzI2LDEwICszMjgsNiBAQAogfTsKICNlbmRpZiAvKiBDT05GSUdfWk9SUk8gKi8KIAotc3RydWN0IGNpcnJ1c2ZiX3JlZ3MgewotCWludCBtdWx0aXBsZXhpbmc7Ci19OwotCiAjaWZkZWYgQ0lSUlVTRkJfREVCVUcKIGVudW0gY2lycnVzZmJfZGJnX3JlZ19jbGFzcyB7CiAJQ1JULApAQCAtMzQwLDEwICszMzgsMTIgQEAKIC8qIGluZm8gYWJvdXQgYm9hcmQgKi8KIHN0cnVjdCBjaXJydXNmYl9pbmZvIHsKIAl1OCBfX2lvbWVtICpyZWdiYXNlOworCXU4IF9faW9tZW0gKmxhZ3VuYV9tbWlvOwogCWVudW0gY2lycnVzX2JvYXJkIGJ0eXBlOwogCXVuc2lnbmVkIGNoYXIgU0ZSOwkvKiBTaGFkb3cgb2Ygc3BlY2lhbCBmdW5jdGlvbiByZWdpc3RlciAqLwogCi0Jc3RydWN0IGNpcnJ1c2ZiX3JlZ3MgY3VycmVudG1vZGU7CisJaW50IG11bHRpcGxleGluZzsKKwlpbnQgZG91YmxlVkNMSzsKIAlpbnQgYmxhbmtfbW9kZTsKIAl1MzIgcHNldWRvX3BhbGV0dGVbMTZdOwogCkBAIC0zNTcsNDMgKzM1Nyw4IEBACiAvKioqKiBCRUdJTiBQUk9UT1RZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyotLS0gSW50ZXJmYWNlIHVzZWQgYnkgdGhlIHdvcmxkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1zdGF0aWMgaW50IGNpcnJ1c2ZiX2luaXQodm9pZCk7Ci0jaWZuZGVmIE1PRFVMRQotc3RhdGljIGludCBjaXJydXNmYl9zZXR1cChjaGFyICpvcHRpb25zKTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IGNpcnJ1c2ZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKTsKLXN0YXRpYyBpbnQgY2lycnVzZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpOwotc3RhdGljIGludCBjaXJydXNmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCi0JCQkgICAgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsCi0JCQkgICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgaW50IGNpcnJ1c2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKLQkJCSAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgY2lycnVzZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IGNpcnJ1c2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyBpbnQgY2lycnVzZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKLXN0YXRpYyB2b2lkIGNpcnJ1c2ZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWdpb24pOwotc3RhdGljIHZvaWQgY2lycnVzZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmFyZWEpOwotc3RhdGljIHZvaWQgY2lycnVzZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpOwotCi0vKiBmdW5jdGlvbiB0YWJsZSBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zICovCi1zdGF0aWMgc3RydWN0IGZiX29wcyBjaXJydXNmYl9vcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5mYl9vcGVuCT0gY2lycnVzZmJfb3BlbiwKLQkuZmJfcmVsZWFzZQk9IGNpcnJ1c2ZiX3JlbGVhc2UsCi0JLmZiX3NldGNvbHJlZwk9IGNpcnJ1c2ZiX3NldGNvbHJlZywKLQkuZmJfY2hlY2tfdmFyCT0gY2lycnVzZmJfY2hlY2tfdmFyLAotCS5mYl9zZXRfcGFyCT0gY2lycnVzZmJfc2V0X3BhciwKLQkuZmJfcGFuX2Rpc3BsYXkgPSBjaXJydXNmYl9wYW5fZGlzcGxheSwKLQkuZmJfYmxhbmsJPSBjaXJydXNmYl9ibGFuaywKLQkuZmJfZmlsbHJlY3QJPSBjaXJydXNmYl9maWxscmVjdCwKLQkuZmJfY29weWFyZWEJPSBjaXJydXNmYl9jb3B5YXJlYSwKLQkuZmJfaW1hZ2VibGl0CT0gY2lycnVzZmJfaW1hZ2VibGl0LAotfTsKIAogLyotLS0gSW50ZXJuYWwgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdGF0aWMgdm9pZCBpbml0X3ZnYWNoaXAoc3RydWN0IGZiX2luZm8gKmluZm8pOwpAQCAtNDIxLDIyICszODYsMjcgQEAKIHN0YXRpYyB2b2lkIGNpcnJ1c2ZiX1JlY3RGaWxsKHU4IF9faW9tZW0gKnJlZ2Jhc2UsIGludCBiaXRzX3Blcl9waXhlbCwKIAkJCSAgICAgIHVfc2hvcnQgeCwgdV9zaG9ydCB5LAogCQkJICAgICAgdV9zaG9ydCB3aWR0aCwgdV9zaG9ydCBoZWlnaHQsCi0JCQkgICAgICB1X2NoYXIgY29sb3IsIHVfc2hvcnQgbGluZV9sZW5ndGgpOworCQkJICAgICAgdTMyIGZnX2NvbG9yLCB1MzIgYmdfY29sb3IsCisJCQkgICAgICB1X3Nob3J0IGxpbmVfbGVuZ3RoLCB1X2NoYXIgYmxpdG1vZGUpOwogCiBzdGF0aWMgdm9pZCBiZXN0Y2xvY2sobG9uZyBmcmVxLCBpbnQgKm5vbSwgaW50ICpkZW4sIGludCAqZGl2KTsKIAogI2lmZGVmIENJUlJVU0ZCX0RFQlVHCi1zdGF0aWMgdm9pZCBjaXJydXNmYl9kdW1wKHZvaWQpOwotc3RhdGljIHZvaWQgY2lycnVzZmJfZGJnX3JlZ19kdW1wKGNhZGRyX3QgcmVnYmFzZSk7Ci1zdGF0aWMgdm9pZCBjaXJydXNmYl9kYmdfcHJpbnRfcmVncyhjYWRkcl90IHJlZ2Jhc2UsCitzdGF0aWMgdm9pZCBjaXJydXNmYl9kYmdfcmVnX2R1bXAoc3RydWN0IGZiX2luZm8gKmluZm8sIGNhZGRyX3QgcmVnYmFzZSk7CitzdGF0aWMgdm9pZCBjaXJydXNmYl9kYmdfcHJpbnRfcmVncyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkgICAgY2FkZHJfdCByZWdiYXNlLAogCQkJCSAgICBlbnVtIGNpcnJ1c2ZiX2RiZ19yZWdfY2xhc3MgcmVnX2NsYXNzLCAuLi4pOwotc3RhdGljIHZvaWQgY2lycnVzZmJfZGJnX3ByaW50X2J5dGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciB2YWwpOwogI2VuZGlmIC8qIENJUlJVU0ZCX0RFQlVHICovCiAKIC8qKiogRU5EICAgUFJPVE9UWVBFUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKiogQkVHSU4gSW50ZXJmYWNlIFVzZWQgYnkgdGhlIFdvcmxkICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIGlubGluZSBpbnQgaXNfbGFndW5hKGNvbnN0IHN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbykKK3sKKwlyZXR1cm4gY2luZm8tPmJ0eXBlID09IEJUX0xBR1VOQSB8fCBjaW5mby0+YnR5cGUgPT0gQlRfTEFHVU5BQjsKK30KKwogc3RhdGljIGludCBvcGVuY291bnQ7CiAKIC8qLS0tIE9wZW4gL2Rldi9mYnggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQ2MCw4NSArNDMwLDk0IEBACiAvKioqKiBCRUdJTiBIYXJkd2FyZSBzcGVjaWZpYyBSb3V0aW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogQ2hlY2sgaWYgdGhlIE1DTEsgaXMgbm90IGEgYmV0dGVyIGNsb2NrIHNvdXJjZSAqLwotc3RhdGljIGludCBjaXJydXNmYl9jaGVja19tY2xrKHN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbywgbG9uZyBmcmVxKQorc3RhdGljIGludCBjaXJydXNmYl9jaGVja19tY2xrKHN0cnVjdCBmYl9pbmZvICppbmZvLCBsb25nIGZyZXEpCiB7CisJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwogCWxvbmcgbWNsayA9IHZnYV9yc2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUYpICYgMHgzZjsKIAogCS8qIFJlYWQgTUNMSyB2YWx1ZSAqLwogCW1jbGsgPSAoMTQzMTggKiBtY2xrKSA+PiAzOwotCURQUklOVEsoIlJlYWQgTUNMSyBvZiAlbGQga0h6XG4iLCBtY2xrKTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIlJlYWQgTUNMSyBvZiAlbGQga0h6XG4iLCBtY2xrKTsKIAogCS8qIERldGVybWluZSBpZiB3ZSBzaG91bGQgdXNlIE1DTEsgaW5zdGVhZCBvZiBWQ0xLLCBhbmQgaWYgc28sIHdoYXQgd2UKIAkgKiBzaG91bGQgZGl2aWRlIGl0IGJ5IHRvIGdldCBWQ0xLCiAJICovCiAKIAlpZiAoYWJzKGZyZXEgLSBtY2xrKSA8IDI1MCkgewotCQlEUFJJTlRLKCJVc2luZyBWQ0xLID0gTUNMS1xuIik7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiVXNpbmcgVkNMSyA9IE1DTEtcbiIpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgaWYgKGFicyhmcmVxIC0gKG1jbGsgLyAyKSkgPCAyNTApIHsKLQkJRFBSSU5USygiVXNpbmcgVkNMSyA9IE1DTEsvMlxuIik7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiVXNpbmcgVkNMSyA9IE1DTEsvMlxuIik7CiAJCXJldHVybiAyOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNpcnJ1c2ZiX2NoZWNrX3BpeGNsb2NrKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJCSAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWxvbmcgZnJlcTsKKwlsb25nIG1heGNsb2NrOworCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBtYXhjbG9ja2lkeCA9IHZhci0+Yml0c19wZXJfcGl4ZWwgPj4gMzsKKworCS8qIGNvbnZlcnQgZnJvbSBwcyB0byBrSHogKi8KKwlmcmVxID0gUElDT1MyS0haKHZhci0+cGl4Y2xvY2spOworCisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJkZXNpcmVkIHBpeGNsb2NrOiAlbGQga0h6XG4iLCBmcmVxKTsKKworCW1heGNsb2NrID0gY2lycnVzZmJfYm9hcmRfaW5mb1tjaW5mby0+YnR5cGVdLm1heGNsb2NrW21heGNsb2NraWR4XTsKKwljaW5mby0+bXVsdGlwbGV4aW5nID0gMDsKKworCS8qIElmIHRoZSBmcmVxdWVuY3kgaXMgZ3JlYXRlciB0aGFuIHdlIGNhbiBzdXBwb3J0LCB3ZSBtaWdodCBiZSBhYmxlCisJICogdG8gdXNlIG11bHRpcGxleGluZyBmb3IgdGhlIHZpZGVvIG1vZGUgKi8KKwlpZiAoZnJlcSA+IG1heGNsb2NrKSB7CisJCWRldl9lcnIoaW5mby0+ZGV2aWNlLAorCQkJIkZyZXF1ZW5jeSBncmVhdGVyIHRoYW4gbWF4Y2xvY2sgKCVsZCBrSHopXG4iLAorCQkJbWF4Y2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyoKKwkgKiBBZGRpdGlvbmFsIGNvbnN0cmFpbnQ6IDhicHAgdXNlcyBEQUMgY2xvY2sgZG91YmxpbmcgdG8gYWxsb3cgbWF4aW11bQorCSAqIHBpeGVsIGNsb2NrCisJICovCisJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gOCkgeworCQlzd2l0Y2ggKGNpbmZvLT5idHlwZSkgeworCQljYXNlIEJUX0FMUElORToKKwkJY2FzZSBCVF9TRDY0OgorCQljYXNlIEJUX1BJQ0FTU080OgorCQkJaWYgKGZyZXEgPiA4NTUwMCkKKwkJCQljaW5mby0+bXVsdGlwbGV4aW5nID0gMTsKKwkJCWJyZWFrOworCQljYXNlIEJUX0dENTQ4MDoKKwkJCWlmIChmcmVxID4gMTM1MTAwKQorCQkJCWNpbmZvLT5tdWx0aXBsZXhpbmcgPSAxOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogSWYgd2UgaGF2ZSBhIDFNQiA1NDM0LCB3ZSBuZWVkIHRvIHB1dCBvdXJzZWx2ZXMgaW4gYSBtb2RlIHdoZXJlCisJICogdGhlIFZDTEsgaXMgZG91YmxlIHRoZSBwaXhlbCBjbG9jay4gKi8KKwljaW5mby0+ZG91YmxlVkNMSyA9IDA7CisJaWYgKGNpbmZvLT5idHlwZSA9PSBCVF9TRDY0ICYmIGluZm8tPmZpeC5zbWVtX2xlbiA8PSBNQl8gJiYKKwkgICAgdmFyLT5iaXRzX3Blcl9waXhlbCA9PSAxNikgeworCQljaW5mby0+ZG91YmxlVkNMSyA9IDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY2lycnVzZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCQkJICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJaW50IHlyZXM7CiAJLyogbWVtb3J5IHNpemUgaW4gcGl4ZWxzICovCiAJdW5zaWduZWQgcGl4ZWxzID0gaW5mby0+c2NyZWVuX3NpemUgKiA4IC8gdmFyLT5iaXRzX3Blcl9waXhlbDsKLQotCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewotCWNhc2UgMToKLQkJcGl4ZWxzIC89IDQ7Ci0JCWJyZWFrOwkJLyogOCBwaXhlbCBwZXIgYnl0ZSwgb25seSAxLzR0aCBvZiBtZW0gdXNhYmxlICovCi0JY2FzZSA4OgotCWNhc2UgMTY6Ci0JY2FzZSAzMjoKLQkJYnJlYWs7CQkvKiAxIHBpeGVsID09IDEgYnl0ZSAqLwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiY2lycnVzZmI6IG1vZGUgJWR4JWR4JWQgcmVqZWN0ZWQuLi4iCi0JCQkiY29sb3IgZGVwdGggbm90IHN1cHBvcnRlZC5cbiIsCi0JCQl2YXItPnhyZXMsIHZhci0+eXJlcywgdmFyLT5iaXRzX3Blcl9waXhlbCk7Ci0JCURQUklOVEsoIkVYSVQgLSBFSU5WQUwgZXJyb3JcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAodmFyLT54cmVzX3ZpcnR1YWwgPCB2YXItPnhyZXMpCi0JCXZhci0+eHJlc192aXJ0dWFsID0gdmFyLT54cmVzOwotCS8qIHVzZSBoaWdoZXN0IHBvc3NpYmxlIHZpcnR1YWwgcmVzb2x1dGlvbiAqLwotCWlmICh2YXItPnlyZXNfdmlydHVhbCA9PSAtMSkgewotCQl2YXItPnlyZXNfdmlydHVhbCA9IHBpeGVscyAvIHZhci0+eHJlc192aXJ0dWFsOwotCi0JCXByaW50ayhLRVJOX0lORk8gImNpcnJ1c2ZiOiB2aXJ0dWFsIHJlc29sdXRpb24gc2V0IHRvICIKLQkJCSJtYXhpbXVtIG9mICVkeCVkXG4iLCB2YXItPnhyZXNfdmlydHVhbCwKLQkJCXZhci0+eXJlc192aXJ0dWFsKTsKLQl9Ci0JaWYgKHZhci0+eXJlc192aXJ0dWFsIDwgdmFyLT55cmVzKQotCQl2YXItPnlyZXNfdmlydHVhbCA9IHZhci0+eXJlczsKLQotCWlmICh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+eXJlc192aXJ0dWFsID4gcGl4ZWxzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2lycnVzZmI6IG1vZGUgJWR4JWR4JWQgcmVqZWN0ZWQuLi4gIgotCQkgICAgICAidmlydHVhbCByZXNvbHV0aW9uIHRvbyBoaWdoIHRvIGZpdCBpbnRvIHZpZGVvIG1lbW9yeSFcbiIsCi0JCQl2YXItPnhyZXNfdmlydHVhbCwgdmFyLT55cmVzX3ZpcnR1YWwsCi0JCQl2YXItPmJpdHNfcGVyX3BpeGVsKTsKLQkJRFBSSU5USygiRVhJVCAtIEVJTlZBTCBlcnJvclxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCi0JaWYgKHZhci0+eG9mZnNldCA8IDApCi0JCXZhci0+eG9mZnNldCA9IDA7Ci0JaWYgKHZhci0+eW9mZnNldCA8IDApCi0JCXZhci0+eW9mZnNldCA9IDA7Ci0KLQkvKiB0cnVuY2F0ZSB4b2Zmc2V0IGFuZCB5b2Zmc2V0IHRvIG1heGltdW0gaWYgdG9vIGhpZ2ggKi8KLQlpZiAodmFyLT54b2Zmc2V0ID4gdmFyLT54cmVzX3ZpcnR1YWwgLSB2YXItPnhyZXMpCi0JCXZhci0+eG9mZnNldCA9IHZhci0+eHJlc192aXJ0dWFsIC0gdmFyLT54cmVzIC0gMTsKLQlpZiAodmFyLT55b2Zmc2V0ID4gdmFyLT55cmVzX3ZpcnR1YWwgLSB2YXItPnlyZXMpCi0JCXZhci0+eW9mZnNldCA9IHZhci0+eXJlc192aXJ0dWFsIC0gdmFyLT55cmVzIC0gMTsKKwlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7CiAKIAlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKIAljYXNlIDE6CkBAIC01NTAsNyArNTI5LDcgQEAKIAogCWNhc2UgODoKIAkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gNjsKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKIAkJdmFyLT5ncmVlbiA9IHZhci0+cmVkOwogCQl2YXItPmJsdWUgPSB2YXItPnJlZDsKIAkJYnJlYWs7CkBAIC01NjEsMjAgKzU0MCwyMCBAQAogCQkJdmFyLT5ncmVlbi5vZmZzZXQgPSAtMzsKIAkJCXZhci0+Ymx1ZS5vZmZzZXQgPSA4OwogCQl9IGVsc2UgewotCQkJdmFyLT5yZWQub2Zmc2V0ID0gMTA7CisJCQl2YXItPnJlZC5vZmZzZXQgPSAxMTsKIAkJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKIAkJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwogCQl9CiAJCXZhci0+cmVkLmxlbmd0aCA9IDU7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gNTsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OwogCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKIAkJYnJlYWs7CiAKLQljYXNlIDMyOgorCWNhc2UgMjQ6CiAJCWlmIChpc1BSZVApIHsKLQkJCXZhci0+cmVkLm9mZnNldCA9IDg7Ci0JCQl2YXItPmdyZWVuLm9mZnNldCA9IDE2OwotCQkJdmFyLT5ibHVlLm9mZnNldCA9IDI0OworCQkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKKwkJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKKwkJCXZhci0+Ymx1ZS5vZmZzZXQgPSAxNjsKIAkJfSBlbHNlIHsKIAkJCXZhci0+cmVkLm9mZnNldCA9IDE2OwogCQkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OwpAQCAtNTg2LDEyICs1NjUsNDUgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlEUFJJTlRLKCJVbnN1cHBvcnRlZCBicHAgc2l6ZTogJWRcbiIsIHZhci0+Yml0c19wZXJfcGl4ZWwpOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwKKwkJCSJVbnN1cHBvcnRlZCBicHAgc2l6ZTogJWRcbiIsIHZhci0+Yml0c19wZXJfcGl4ZWwpOwogCQlhc3NlcnQoZmFsc2UpOwogCQkvKiBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KIAkJYnJlYWs7CiAJfQogCisJaWYgKHZhci0+eHJlc192aXJ0dWFsIDwgdmFyLT54cmVzKQorCQl2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlczsKKwkvKiB1c2UgaGlnaGVzdCBwb3NzaWJsZSB2aXJ0dWFsIHJlc29sdXRpb24gKi8KKwlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPT0gLTEpIHsKKwkJdmFyLT55cmVzX3ZpcnR1YWwgPSBwaXhlbHMgLyB2YXItPnhyZXNfdmlydHVhbDsKKworCQlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsCisJCQkgInZpcnR1YWwgcmVzb2x1dGlvbiBzZXQgdG8gbWF4aW11bSBvZiAlZHglZFxuIiwKKwkJCSB2YXItPnhyZXNfdmlydHVhbCwgdmFyLT55cmVzX3ZpcnR1YWwpOworCX0KKwlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPCB2YXItPnlyZXMpCisJCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzOworCisJaWYgKHZhci0+eHJlc192aXJ0dWFsICogdmFyLT55cmVzX3ZpcnR1YWwgPiBwaXhlbHMpIHsKKwkJZGV2X2VycihpbmZvLT5kZXZpY2UsICJtb2RlICVkeCVkeCVkIHJlamVjdGVkLi4uICIKKwkJICAgICAgInZpcnR1YWwgcmVzb2x1dGlvbiB0b28gaGlnaCB0byBmaXQgaW50byB2aWRlbyBtZW1vcnkhXG4iLAorCQkJdmFyLT54cmVzX3ZpcnR1YWwsIHZhci0+eXJlc192aXJ0dWFsLAorCQkJdmFyLT5iaXRzX3Blcl9waXhlbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2YXItPnhvZmZzZXQgPCAwKQorCQl2YXItPnhvZmZzZXQgPSAwOworCWlmICh2YXItPnlvZmZzZXQgPCAwKQorCQl2YXItPnlvZmZzZXQgPSAwOworCisJLyogdHJ1bmNhdGUgeG9mZnNldCBhbmQgeW9mZnNldCB0byBtYXhpbXVtIGlmIHRvbyBoaWdoICovCisJaWYgKHZhci0+eG9mZnNldCA+IHZhci0+eHJlc192aXJ0dWFsIC0gdmFyLT54cmVzKQorCQl2YXItPnhvZmZzZXQgPSB2YXItPnhyZXNfdmlydHVhbCAtIHZhci0+eHJlcyAtIDE7CisJaWYgKHZhci0+eW9mZnNldCA+IHZhci0+eXJlc192aXJ0dWFsIC0gdmFyLT55cmVzKQorCQl2YXItPnlvZmZzZXQgPSB2YXItPnlyZXNfdmlydHVhbCAtIHZhci0+eXJlcyAtIDE7CisKIAl2YXItPnJlZC5tc2JfcmlnaHQgPQogCSAgICB2YXItPmdyZWVuLm1zYl9yaWdodCA9CiAJICAgIHZhci0+Ymx1ZS5tc2JfcmlnaHQgPQpAQCAtNjA2LDk5ICs2MTgsMzEgQEAKIAkJeXJlcyA9ICh5cmVzICsgMSkgLyAyOwogCiAJaWYgKHlyZXMgPj0gMTI4MCkgewotCQlwcmludGsoS0VSTl9FUlIgImNpcnJ1c2ZiOiBFUlJPUjogVmVydGljYWxUb3RhbCA+PSAxMjgwOyAiCisJCWRldl9lcnIoaW5mby0+ZGV2aWNlLCAiRVJST1I6IFZlcnRpY2FsVG90YWwgPj0gMTI4MDsgIgogCQkJInNwZWNpYWwgdHJlYXRtZW50IHJlcXVpcmVkISAoVE9ETylcbiIpOwotCQlEUFJJTlRLKCJFWElUIC0gRUlOVkFMIGVycm9yXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKGNpcnJ1c2ZiX2NoZWNrX3BpeGNsb2NrKHZhciwgaW5mbykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFpc19sYWd1bmEoY2luZm8pKQorCQl2YXItPmFjY2VsX2ZsYWdzID0gRkJfQUNDRUxGX1RFWFQ7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaXJydXNmYl9kZWNvZGVfdmFyKGNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQkJCXN0cnVjdCBjaXJydXNmYl9yZWdzICpyZWdzLAotCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKQorc3RhdGljIHZvaWQgY2lycnVzZmJfc2V0X21jbGtfYXNfc291cmNlKGNvbnN0IHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgZGl2KQogewotCWxvbmcgZnJlcTsKLQlsb25nIG1heGNsb2NrOwotCWludCBtYXhjbG9ja2lkeCA9IHZhci0+Yml0c19wZXJfcGl4ZWwgPj4gMzsKIAlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7Ci0KLQlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKLQljYXNlIDE6Ci0JCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IHZhci0+eHJlc192aXJ0dWFsIC8gODsKLQkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9NT05PMTA7Ci0JCWJyZWFrOwotCi0JY2FzZSA4OgotCQlpbmZvLT5maXgubGluZV9sZW5ndGggPSB2YXItPnhyZXNfdmlydHVhbDsKLQkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKLQkJYnJlYWs7Ci0KLQljYXNlIDE2OgotCWNhc2UgMzI6Ci0JCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IHZhci0+eHJlc192aXJ0dWFsICogbWF4Y2xvY2tpZHg7Ci0JCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCURQUklOVEsoIlVuc3VwcG9ydGVkIGJwcCBzaXplOiAlZFxuIiwgdmFyLT5iaXRzX3Blcl9waXhlbCk7Ci0JCWFzc2VydChmYWxzZSk7Ci0JCS8qIHNob3VsZCBuZXZlciBvY2N1ciAqLwotCQlicmVhazsKLQl9Ci0KLQlpbmZvLT5maXgudHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKLQotCS8qIGNvbnZlcnQgZnJvbSBwcyB0byBrSHogKi8KLQlmcmVxID0gUElDT1MyS0haKHZhci0+cGl4Y2xvY2spOwotCi0JRFBSSU5USygiZGVzaXJlZCBwaXhjbG9jazogJWxkIGtIelxuIiwgZnJlcSk7Ci0KLQltYXhjbG9jayA9IGNpcnJ1c2ZiX2JvYXJkX2luZm9bY2luZm8tPmJ0eXBlXS5tYXhjbG9ja1ttYXhjbG9ja2lkeF07Ci0JcmVncy0+bXVsdGlwbGV4aW5nID0gMDsKLQotCS8qIElmIHRoZSBmcmVxdWVuY3kgaXMgZ3JlYXRlciB0aGFuIHdlIGNhbiBzdXBwb3J0LCB3ZSBtaWdodCBiZSBhYmxlCi0JICogdG8gdXNlIG11bHRpcGxleGluZyBmb3IgdGhlIHZpZGVvIG1vZGUgKi8KLQlpZiAoZnJlcSA+IG1heGNsb2NrKSB7Ci0JCXN3aXRjaCAoY2luZm8tPmJ0eXBlKSB7Ci0JCWNhc2UgQlRfQUxQSU5FOgotCQljYXNlIEJUX0dENTQ4MDoKLQkJCXJlZ3MtPm11bHRpcGxleGluZyA9IDE7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSICJjaXJydXNmYjogRnJlcXVlbmN5IGdyZWF0ZXIgIgotCQkJCSJ0aGFuIG1heGNsb2NrICglbGQga0h6KVxuIiwgbWF4Y2xvY2spOwotCQkJRFBSSU5USygiRVhJVCAtIHJldHVybiAtRUlOVkFMXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotI2lmIDAKLQkvKiBUT0RPOiBJZiB3ZSBoYXZlIGEgMU1CIDU0MzQsIHdlIG5lZWQgdG8gcHV0IG91cnNlbHZlcyBpbiBhIG1vZGUgd2hlcmUKLQkgKiB0aGUgVkNMSyBpcyBkb3VibGUgdGhlIHBpeGVsIGNsb2NrLiAqLwotCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewotCWNhc2UgMTY6Ci0JY2FzZSAzMjoKLQkJaWYgKHZhci0+eHJlcyA8PSA4MDApCi0JCQkvKiBYYmggaGFzIHRoaXMgdHlwZSBvZiBjbG9jayBmb3IgMzItYml0ICovCi0JCQlmcmVxIC89IDI7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjaXJydXNmYl9zZXRfbWNsa19hc19zb3VyY2UoY29uc3Qgc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvLAotCQkJCQlpbnQgZGl2KQotewogCXVuc2lnbmVkIGNoYXIgb2xkMWYsIG9sZDFlOworCiAJYXNzZXJ0KGNpbmZvICE9IE5VTEwpOwogCW9sZDFmID0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRikgJiB+MHg0MDsKIAogCWlmIChkaXYpIHsKLQkJRFBSSU5USygiU2V0ICVzIGFzIHBpeGNsb2NrIHNvdXJjZS5cbiIsCi0JCQkJCShkaXYgPT0gMikgPyAiTUNMSy8yIiA6ICJNQ0xLIik7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiU2V0ICVzIGFzIHBpeGNsb2NrIHNvdXJjZS5cbiIsCisJCQkoZGl2ID09IDIpID8gIk1DTEsvMiIgOiAiTUNMSyIpOwogCQlvbGQxZiB8PSAweDQwOwogCQlvbGQxZSA9IHZnYV9yc2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMUUpICYgfjB4MTsKIAkJaWYgKGRpdiA9PSAyKQpAQCAtNzE4LDEwMSArNjYyLDExOSBAQAogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7Ci0Jc3RydWN0IGNpcnJ1c2ZiX3JlZ3MgcmVnczsKIAl1OCBfX2lvbWVtICpyZWdiYXNlID0gY2luZm8tPnJlZ2Jhc2U7CiAJdW5zaWduZWQgY2hhciB0bXA7Ci0JaW50IG9mZnNldCA9IDAsIGVycjsKKwlpbnQgcGl0Y2g7CiAJY29uc3Qgc3RydWN0IGNpcnJ1c2ZiX2JvYXJkX2luZm9fcmVjICpiaTsKIAlpbnQgaGRpc3BlbmQsIGhzeW5jc3RhcnQsIGhzeW5jZW5kLCBodG90YWw7CiAJaW50IHlyZXMsIHZkaXNwZW5kLCB2c3luY3N0YXJ0LCB2c3luY2VuZCwgdnRvdGFsOwogCWxvbmcgZnJlcTsKIAlpbnQgbm9tLCBkZW4sIGRpdjsKKwl1bnNpZ25lZCBpbnQgY29udHJvbCA9IDAsIGZvcm1hdCA9IDAsIHRocmVzaG9sZCA9IDA7CiAKLQlEUFJJTlRLKCJFTlRFUlxuIik7Ci0JRFBSSU5USygiUmVxdWVzdGVkIG1vZGU6ICVkeCVkeCVkXG4iLAorCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiUmVxdWVzdGVkIG1vZGU6ICVkeCVkeCVkXG4iLAogCSAgICAgICB2YXItPnhyZXMsIHZhci0+eXJlcywgdmFyLT5iaXRzX3Blcl9waXhlbCk7Ci0JRFBSSU5USygicGl4Y2xvY2s6ICVkXG4iLCB2YXItPnBpeGNsb2NrKTsKKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMToKKwkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gdmFyLT54cmVzX3ZpcnR1YWwgLyA4OworCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX01PTk8xMDsKKwkJYnJlYWs7CisKKwljYXNlIDg6CisJCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IHZhci0+eHJlc192aXJ0dWFsOworCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOworCQlicmVhazsKKworCWNhc2UgMTY6CisJY2FzZSAyNDoKKwkJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gdmFyLT54cmVzX3ZpcnR1YWwgKgorCQkJCQl2YXItPmJpdHNfcGVyX3BpeGVsID4+IDM7CisJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlicmVhazsKKwl9CisJaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CiAKIAlpbml0X3ZnYWNoaXAoaW5mbyk7CiAKLQllcnIgPSBjaXJydXNmYl9kZWNvZGVfdmFyKHZhciwgJnJlZ3MsIGluZm8pOwotCWlmIChlcnIpIHsKLQkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCQlEUFJJTlRLKCJtb2RlIGNoYW5nZSBhYm9ydGVkLiAgaW52YWxpZCB2YXIuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJYmkgPSAmY2lycnVzZmJfYm9hcmRfaW5mb1tjaW5mby0+YnR5cGVdOwogCiAJaHN5bmNzdGFydCA9IHZhci0+eHJlcyArIHZhci0+cmlnaHRfbWFyZ2luOwogCWhzeW5jZW5kID0gaHN5bmNzdGFydCArIHZhci0+aHN5bmNfbGVuOwotCWh0b3RhbCA9IChoc3luY2VuZCArIHZhci0+bGVmdF9tYXJnaW4pIC8gOCAtIDU7Ci0JaGRpc3BlbmQgPSB2YXItPnhyZXMgLyA4IC0gMTsKLQloc3luY3N0YXJ0ID0gaHN5bmNzdGFydCAvIDggKyAxOwotCWhzeW5jZW5kID0gaHN5bmNlbmQgLyA4ICsgMTsKKwlodG90YWwgPSAoaHN5bmNlbmQgKyB2YXItPmxlZnRfbWFyZ2luKSAvIDg7CisJaGRpc3BlbmQgPSB2YXItPnhyZXMgLyA4OworCWhzeW5jc3RhcnQgPSBoc3luY3N0YXJ0IC8gODsKKwloc3luY2VuZCA9IGhzeW5jZW5kIC8gODsKIAotCXlyZXMgPSB2YXItPnlyZXM7Ci0JdnN5bmNzdGFydCA9IHlyZXMgKyB2YXItPmxvd2VyX21hcmdpbjsKKwl2ZGlzcGVuZCA9IHZhci0+eXJlczsKKwl2c3luY3N0YXJ0ID0gdmRpc3BlbmQgKyB2YXItPmxvd2VyX21hcmdpbjsKIAl2c3luY2VuZCA9IHZzeW5jc3RhcnQgKyB2YXItPnZzeW5jX2xlbjsKIAl2dG90YWwgPSB2c3luY2VuZCArIHZhci0+dXBwZXJfbWFyZ2luOwotCXZkaXNwZW5kID0geXJlcyAtIDE7CiAKIAlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX0RPVUJMRSkgewotCQl5cmVzICo9IDI7CisJCXZkaXNwZW5kICo9IDI7CiAJCXZzeW5jc3RhcnQgKj0gMjsKIAkJdnN5bmNlbmQgKj0gMjsKIAkJdnRvdGFsICo9IDI7CiAJfSBlbHNlIGlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkgewotCQl5cmVzID0gKHlyZXMgKyAxKSAvIDI7CisJCXZkaXNwZW5kID0gKHZkaXNwZW5kICsgMSkgLyAyOwogCQl2c3luY3N0YXJ0ID0gKHZzeW5jc3RhcnQgKyAxKSAvIDI7CiAJCXZzeW5jZW5kID0gKHZzeW5jZW5kICsgMSkgLyAyOwogCQl2dG90YWwgPSAodnRvdGFsICsgMSkgLyAyOwogCX0KLQotCXZ0b3RhbCAtPSAyOwotCXZzeW5jc3RhcnQgLT0gMTsKLQl2c3luY2VuZCAtPSAxOwotCisJeXJlcyA9IHZkaXNwZW5kOwogCWlmICh5cmVzID49IDEwMjQpIHsKIAkJdnRvdGFsIC89IDI7CiAJCXZzeW5jc3RhcnQgLz0gMjsKIAkJdnN5bmNlbmQgLz0gMjsKIAkJdmRpc3BlbmQgLz0gMjsKIAl9Ci0JaWYgKHJlZ3MubXVsdGlwbGV4aW5nKSB7CisKKwl2ZGlzcGVuZCAtPSAxOworCXZzeW5jc3RhcnQgLT0gMTsKKwl2c3luY2VuZCAtPSAxOworCXZ0b3RhbCAtPSAyOworCisJaWYgKGNpbmZvLT5tdWx0aXBsZXhpbmcpIHsKIAkJaHRvdGFsIC89IDI7CiAJCWhzeW5jc3RhcnQgLz0gMjsKIAkJaHN5bmNlbmQgLz0gMjsKIAkJaGRpc3BlbmQgLz0gMjsKIAl9CisKKwlodG90YWwgLT0gNTsKKwloZGlzcGVuZCAtPSAxOworCWhzeW5jc3RhcnQgKz0gMTsKKwloc3luY2VuZCArPSAxOworCiAJLyogdW5sb2NrIHJlZ2lzdGVyIFZHQV9DUlRDX0hfVE9UQUwuLkNSVDcgKi8KIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX1NZTkNfRU5ELCAweDIwKTsJLyogcHJldmlvdXNseTogMHgwMCkgKi8KIAogCS8qIGlmIGRlYnVnZ2luZyBpcyBlbmFibGVkLCBhbGwgcGFyYW1ldGVycyBnZXQgb3V0cHV0IGJlZm9yZSB3cml0aW5nICovCi0JRFBSSU5USygiQ1JUMDogJWRcbiIsIGh0b3RhbCk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQwOiAlZFxuIiwgaHRvdGFsKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX1RPVEFMLCBodG90YWwpOwogCi0JRFBSSU5USygiQ1JUMTogJWRcbiIsIGhkaXNwZW5kKTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIkNSVDE6ICVkXG4iLCBoZGlzcGVuZCk7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9ESVNQLCBoZGlzcGVuZCk7CiAKLQlEUFJJTlRLKCJDUlQyOiAlZFxuIiwgdmFyLT54cmVzIC8gOCk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQyOiAlZFxuIiwgdmFyLT54cmVzIC8gOCk7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9CTEFOS19TVEFSVCwgdmFyLT54cmVzIC8gOCk7CiAKIAkvKiAgKyAxMjg6IENvbXBhdGlibGUgcmVhZCAqLwotCURQUklOVEsoIkNSVDM6IDEyOCslZFxuIiwgKGh0b3RhbCArIDUpICUgMzIpOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiQ1JUMzogMTI4KyVkXG4iLCAoaHRvdGFsICsgNSkgJSAzMik7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfSF9CTEFOS19FTkQsCiAJCSAxMjggKyAoKGh0b3RhbCArIDUpICUgMzIpKTsKIAotCURQUklOVEsoIkNSVDQ6ICVkXG4iLCBoc3luY3N0YXJ0KTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIkNSVDQ6ICVkXG4iLCBoc3luY3N0YXJ0KTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX1NZTkNfU1RBUlQsIGhzeW5jc3RhcnQpOwogCiAJdG1wID0gaHN5bmNlbmQgJSAzMjsKIAlpZiAoKGh0b3RhbCArIDUpICYgMzIpCiAJCXRtcCArPSAxMjg7Ci0JRFBSSU5USygiQ1JUNTogJWRcbiIsIHRtcCk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQ1OiAlZFxuIiwgdG1wKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19IX1NZTkNfRU5ELCB0bXApOwogCi0JRFBSSU5USygiQ1JUNjogJWRcbiIsIHZ0b3RhbCAmIDB4ZmYpOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiQ1JUNjogJWRcbiIsIHZ0b3RhbCAmIDB4ZmYpOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfVE9UQUwsIHZ0b3RhbCAmIDB4ZmYpOwogCiAJdG1wID0gMTY7CQkvKiBMaW5lQ29tcGFyZSBiaXQgIzkgKi8KQEAgLTgzMCw3ICs3OTIsNyBAQAogCQl0bXAgfD0gNjQ7CiAJaWYgKHZzeW5jc3RhcnQgJiA1MTIpCiAJCXRtcCB8PSAxMjg7Ci0JRFBSSU5USygiQ1JUNzogJWRcbiIsIHRtcCk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQ3OiAlZFxuIiwgdG1wKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19PVkVSRkxPVywgdG1wKTsKIAogCXRtcCA9IDB4NDA7CQkvKiBMaW5lQ29tcGFyZSBiaXQgIzggKi8KQEAgLTgzOCwyNSArODAwLDI1IEBACiAJCXRtcCB8PSAweDIwOwogCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfRE9VQkxFKQogCQl0bXAgfD0gMHg4MDsKLQlEUFJJTlRLKCJDUlQ5OiAlZFxuIiwgdG1wKTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIkNSVDk6ICVkXG4iLCB0bXApOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX01BWF9TQ0FOLCB0bXApOwogCi0JRFBSSU5USygiQ1JUMTA6ICVkXG4iLCB2c3luY3N0YXJ0ICYgMHhmZik7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQxMDogJWRcbiIsIHZzeW5jc3RhcnQgJiAweGZmKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX1NZTkNfU1RBUlQsIHZzeW5jc3RhcnQgJiAweGZmKTsKIAotCURQUklOVEsoIkNSVDExOiA2NCszMislZFxuIiwgdnN5bmNlbmQgJSAxNik7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQxMTogNjQrMzIrJWRcbiIsIHZzeW5jZW5kICUgMTYpOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfU1lOQ19FTkQsIHZzeW5jZW5kICUgMTYgKyA2NCArIDMyKTsKIAotCURQUklOVEsoIkNSVDEyOiAlZFxuIiwgdmRpc3BlbmQgJiAweGZmKTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIkNSVDEyOiAlZFxuIiwgdmRpc3BlbmQgJiAweGZmKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX0RJU1BfRU5ELCB2ZGlzcGVuZCAmIDB4ZmYpOwogCi0JRFBSSU5USygiQ1JUMTU6ICVkXG4iLCAodmRpc3BlbmQgKyAxKSAmIDB4ZmYpOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiQ1JUMTU6ICVkXG4iLCAodmRpc3BlbmQgKyAxKSAmIDB4ZmYpOwogCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfQkxBTktfU1RBUlQsICh2ZGlzcGVuZCArIDEpICYgMHhmZik7CiAKLQlEUFJJTlRLKCJDUlQxNjogJWRcbiIsIHZ0b3RhbCAmIDB4ZmYpOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiQ1JUMTY6ICVkXG4iLCB2dG90YWwgJiAweGZmKTsKIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19WX0JMQU5LX0VORCwgdnRvdGFsICYgMHhmZik7CiAKLQlEUFJJTlRLKCJDUlQxODogMHhmZlxuIik7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQxODogMHhmZlxuIik7CiAJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfTElORV9DT01QQVJFLCAweGZmKTsKIAogCXRtcCA9IDA7CkBAIC04NzEsNDEgKzgzMyw3NSBAQAogCWlmICh2dG90YWwgJiA1MTIpCiAJCXRtcCB8PSAxMjg7CiAKLQlEUFJJTlRLKCJDUlQxYTogJWRcbiIsIHRtcCk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDUlQxYTogJWRcbiIsIHRtcCk7CiAJdmdhX3djcnQocmVnYmFzZSwgQ0xfQ1JUMUEsIHRtcCk7CiAKIAlmcmVxID0gUElDT1MyS0haKHZhci0+cGl4Y2xvY2spOworCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDI0KQorCQlpZiAoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSB8fCBjaW5mby0+YnR5cGUgPT0gQlRfU0Q2NCkKKwkJCWZyZXEgKj0gMzsKKwlpZiAoY2luZm8tPm11bHRpcGxleGluZykKKwkJZnJlcSAvPSAyOworCWlmIChjaW5mby0+ZG91YmxlVkNMSykKKwkJZnJlcSAqPSAyOworCiAJYmVzdGNsb2NrKGZyZXEsICZub20sICZkZW4sICZkaXYpOwogCisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJWQ0xLIGZyZXE6ICVsZCBrSHogIG5vbTogJWQgIGRlbjogJWQgIGRpdjogJWRcbiIsCisJCWZyZXEsIG5vbSwgZGVuLCBkaXYpOworCiAJLyogc2V0IFZDTEswICovCiAJLyogaGFyZHdhcmUgUmVmQ2xvY2s6IDE0LjMxODE4IE1IeiAqLwogCS8qIGZvcm11bGE6IFZDbGsgPSAoT1NDICogTikgLyAoRCAqICgxK1ApKSAqLwogCS8qIEV4YW1wbGU6IFZDbGsgPSAoMTQuMzE4MTggKiA5MSkgLyAoMjMgKiAoMSsxKSkgPSAyOC4zMjUgTUh6ICovCiAKLQlpZiAoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSkgeworCWlmIChjaW5mby0+YnR5cGUgPT0gQlRfQUxQSU5FIHx8IGNpbmZvLT5idHlwZSA9PSBCVF9QSUNBU1NPNCB8fAorCSAgICBjaW5mby0+YnR5cGUgPT0gQlRfU0Q2NCkgewogCQkvKiBpZiBmcmVxIGlzIGNsb3NlIHRvIG1jbGsgb3IgbWNsay8yIHNlbGVjdCBtY2xrCiAJCSAqIGFzIGNsb2NrIHNvdXJjZQogCQkgKi8KLQkJaW50IGRpdk1DTEsgPSBjaXJydXNmYl9jaGVja19tY2xrKGNpbmZvLCBmcmVxKTsKLQkJaWYgKGRpdk1DTEspICB7CisJCWludCBkaXZNQ0xLID0gY2lycnVzZmJfY2hlY2tfbWNsayhpbmZvLCBmcmVxKTsKKwkJaWYgKGRpdk1DTEspCiAJCQlub20gPSAwOwotCQkJY2lycnVzZmJfc2V0X21jbGtfYXNfc291cmNlKGNpbmZvLCBkaXZNQ0xLKTsKKwkJY2lycnVzZmJfc2V0X21jbGtfYXNfc291cmNlKGluZm8sIGRpdk1DTEspOworCX0KKwlpZiAoaXNfbGFndW5hKGNpbmZvKSkgeworCQlsb25nIHBjaWZjID0gZmJfcmVhZGwoY2luZm8tPmxhZ3VuYV9tbWlvICsgMHgzZmMpOworCQl1bnNpZ25lZCBjaGFyIHRpbGUgPSBmYl9yZWFkYihjaW5mby0+bGFndW5hX21taW8gKyAweDQwNyk7CisJCXVuc2lnbmVkIHNob3J0IHRpbGVfY29udHJvbDsKKworCQlpZiAoY2luZm8tPmJ0eXBlID09IEJUX0xBR1VOQUIpIHsKKwkJCXRpbGVfY29udHJvbCA9IGZiX3JlYWR3KGNpbmZvLT5sYWd1bmFfbW1pbyArIDB4MmM0KTsKKwkJCXRpbGVfY29udHJvbCAmPSB+MHg4MDsKKwkJCWZiX3dyaXRldyh0aWxlX2NvbnRyb2wsIGNpbmZvLT5sYWd1bmFfbW1pbyArIDB4MmM0KTsKIAkJfQorCisJCWZiX3dyaXRlbChwY2lmYyB8IDB4MTAwMDAwMDBsLCBjaW5mby0+bGFndW5hX21taW8gKyAweDNmYyk7CisJCWZiX3dyaXRlYih0aWxlICYgMHgzZiwgY2luZm8tPmxhZ3VuYV9tbWlvICsgMHg0MDcpOworCQljb250cm9sID0gZmJfcmVhZHcoY2luZm8tPmxhZ3VuYV9tbWlvICsgMHg0MDIpOworCQl0aHJlc2hvbGQgPSBmYl9yZWFkdyhjaW5mby0+bGFndW5hX21taW8gKyAweGVhKTsKKwkJY29udHJvbCAmPSB+MHg2ODAwOworCQlmb3JtYXQgPSAwOworCQl0aHJlc2hvbGQgJj0gMHhmZmMwICYgMHgzZmJmOwogCX0KIAlpZiAobm9tKSB7Ci0JCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVJCLCBub20pOwogCQl0bXAgPSBkZW4gPDwgMTsKIAkJaWYgKGRpdiAhPSAwKQogCQkJdG1wIHw9IDE7Ci0KIAkJLyogNiBiaXQgZGVub207IE9OTFkgNTQzNCEhISAoYnVnZ2VkIG1lIDEwIGRheXMpICovCiAJCWlmICgoY2luZm8tPmJ0eXBlID09IEJUX1NENjQpIHx8CiAJCSAgICAoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSkgfHwKIAkJICAgIChjaW5mby0+YnR5cGUgPT0gQlRfR0Q1NDgwKSkKIAkJCXRtcCB8PSAweDgwOwogCi0JCURQUklOVEsoIkNMX1NFUVIxQjogJWxkXG4iLCAobG9uZykgdG1wKTsKLQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFCLCB0bXApOworCQkvKiBMYWd1bmEgY2hpcHNldCBoYXMgcmV2ZXJzZWQgY2xvY2sgcmVnaXN0ZXJzICovCisJCWlmIChpc19sYWd1bmEoY2luZm8pKSB7CisJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSRSwgdG1wKTsKKwkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVIxRSwgbm9tKTsKKwkJfSBlbHNlIHsKKwkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVJFLCBub20pOworCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFFLCB0bXApOworCQl9CiAJfQogCiAJaWYgKHlyZXMgPj0gMTAyNCkKQEAgLTkxNiw5ICs5MTIsNiBAQAogCQkgKiBhZGRyZXNzIHdyYXAsIG5vIGNvbXBhdC4gKi8KIAkJdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfTU9ERSwgMHhjMyk7CiAKLS8qIEhBRUg/CXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX1ZfU1lOQ19FTkQsIDB4MjApOwotICogcHJldmlvdXNseTogMHgwMCAgdW5sb2NrIFZHQV9DUlRDX0hfVE9UQUwuLkNSVDcgKi8KLQogCS8qIGRvbid0IGtub3cgaWYgaXQgd291bGQgaHVydCB0byBhbHNvIHByb2dyYW0gdGhpcyBpZiBubyBpbnRlcmxhY2VkICovCiAJLyogbW9kZSBpcyB1c2VkLCBidXQgSSBmZWVsIGJldHRlciB0aGlzIHdheS4uIDotKSAqLwogCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkKQEAgLTkyNiwxOSArOTE5LDE1IEBACiAJZWxzZQogCQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19SRUdTLCAweDAwKTsJLyogaW50ZXJsYWNlIGNvbnRyb2wgKi8KIAotCXZnYV93c2VxKHJlZ2Jhc2UsIFZHQV9TRVFfQ0hBUkFDVEVSX01BUCwgMCk7Ci0KLQkvKiBhZGp1c3QgaG9yaXpvbnRhbC92ZXJ0aWNhbCBzeW5jIHR5cGUgKGxvdy9oaWdoKSAqLworCS8qIGFkanVzdCBob3Jpem9udGFsL3ZlcnRpY2FsIHN5bmMgdHlwZSAobG93L2hpZ2gpLCB1c2UgVkNMSzMgKi8KIAkvKiBlbmFibGUgZGlzcGxheSBtZW1vcnkgJiBDUlRDIEkvTyBhZGRyZXNzIGZvciBjb2xvciBtb2RlICovCi0JdG1wID0gMHgwMzsKKwl0bXAgPSAweDAzIHwgMHhjOwogCWlmICh2YXItPnN5bmMgJiBGQl9TWU5DX0hPUl9ISUdIX0FDVCkKIAkJdG1wIHw9IDB4NDA7CiAJaWYgKHZhci0+c3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkKIAkJdG1wIHw9IDB4ODA7CiAJV0dlbihjaW5mbywgVkdBX01JU19XLCB0bXApOwogCi0JLyogU2NyZWVuIEEgUHJlc2V0IFJvdy1TY2FuIHJlZ2lzdGVyICovCi0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfUFJFU0VUX1JPVywgMCk7CiAJLyogdGV4dCBjdXJzb3Igb24gYW5kIHN0YXJ0IGxpbmUgKi8KIAl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19DVVJTT1JfU1RBUlQsIDApOwogCS8qIHRleHQgY3Vyc29yIGVuZCBsaW5lICovCkBAIC05NTIsNyArOTQxLDcgQEAKIAogCS8qIHByb2dyYW1taW5nIGZvciBkaWZmZXJlbnQgY29sb3IgZGVwdGhzICovCiAJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMSkgewotCQlEUFJJTlRLKCJjaXJydXNmYjogcHJlcGFyaW5nIGZvciAxIGJpdCBkZWVwIGRpc3BsYXlcbiIpOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwgInByZXBhcmluZyBmb3IgMSBiaXQgZGVlcCBkaXNwbGF5XG4iKTsKIAkJdmdhX3dnZngocmVnYmFzZSwgVkdBX0dGWF9NT0RFLCAwKTsJLyogbW9kZSByZWdpc3RlciAqLwogCiAJCS8qIFNSMDcgKi8KQEAgLTk2NCw2OCArOTUzLDUzIEBACiAJCWNhc2UgQlRfUElDQVNTTzQ6CiAJCWNhc2UgQlRfQUxQSU5FOgogCQljYXNlIEJUX0dENTQ4MDoKLQkJCURQUklOVEsoIiAoZm9yIEdENTR4eClcbiIpOwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsCi0JCQkJICByZWdzLm11bHRpcGxleGluZyA/CisJCQkJIGNpbmZvLT5tdWx0aXBsZXhpbmcgPwogCQkJCQliaS0+c3IwN18xYnBwX211eCA6IGJpLT5zcjA3XzFicHApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBCVF9MQUdVTkE6Ci0JCQlEUFJJTlRLKCIgKGZvciBHRDU0NngpXG4iKTsKKwkJY2FzZSBCVF9MQUdVTkFCOgogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsCiAJCQkJdmdhX3JzZXEocmVnYmFzZSwgQ0xfU0VRUjcpICYgfjB4MDEpOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNpcnJ1c2ZiOiB1bmtub3duIEJvYXJkXG4iKTsKKwkJCWRldl93YXJuKGluZm8tPmRldmljZSwgInVua25vd24gQm9hcmRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBFeHRlbmRlZCBTZXF1ZW5jZXIgTW9kZSAqLwogCQlzd2l0Y2ggKGNpbmZvLT5idHlwZSkgewotCQljYXNlIEJUX1NENjQ6Ci0JCQkvKiBzZXR0aW5nIHRoZSBTRVFSRiBvbiBTRDY0IGlzIG5vdCBuZWNlc3NhcnkKLQkJCSAqIChvbmx5IGR1cmluZyBpbml0KQotCQkJICovCi0JCQlEUFJJTlRLKCIoZm9yIFNENjQpXG4iKTsKLQkJCS8qICBNQ0xLIHNlbGVjdCAqLwotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFGLCAweDFhKTsKLQkJCWJyZWFrOwogCiAJCWNhc2UgQlRfUElDQ09MTzoKIAkJY2FzZSBCVF9TUEVDVFJVTToKLQkJCURQUklOVEsoIihmb3IgUGljY29sby9TcGVjdHJ1bSlcbiIpOwotCQkJLyogIyMjIHVlYmVyYWxsIDB4MjI/ICovCi0JCQkvKiAjI3ZvcmhlciAxYyBNQ0xLIHNlbGVjdCAqLwotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFGLCAweDIyKTsKIAkJCS8qIGV2dGwgZDAgYmVpIDEgYml0PyBhdm9pZCBGSUZPIHVuZGVycnVucy4uPyAqLwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUkYsIDB4YjApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBCVF9QSUNBU1NPOgotCQkJRFBSSU5USygiKGZvciBQaWNhc3NvKVxuIik7Ci0JCQkvKiAjI3ZvcmhlciAyMiBNQ0xLIHNlbGVjdCAqLwotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFGLCAweDIyKTsKIAkJCS8qICMjIHZvcmhlciBkMCBhdm9pZCBGSUZPIHVuZGVycnVucy4uPyAqLwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUkYsIDB4ZDApOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBCVF9TRDY0OgogCQljYXNlIEJUX1BJQ0FTU080OgogCQljYXNlIEJUX0FMUElORToKIAkJY2FzZSBCVF9HRDU0ODA6CiAJCWNhc2UgQlRfTEFHVU5BOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NHh4KVxuIik7CisJCWNhc2UgQlRfTEFHVU5BQjoKIAkJCS8qIGRvIG5vdGhpbmcgKi8KIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjaXJydXNmYjogdW5rbm93biBCb2FyZFxuIik7CisJCQlkZXZfd2FybihpbmZvLT5kZXZpY2UsICJ1bmtub3duIEJvYXJkXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogcGl4ZWwgbWFzazogcGFzcy10aHJvdWdoIGZvciBmaXJzdCBwbGFuZSAqLwogCQlXR2VuKGNpbmZvLCBWR0FfUEVMX01TSywgMHgwMSk7Ci0JCWlmIChyZWdzLm11bHRpcGxleGluZykKKwkJaWYgKGNpbmZvLT5tdWx0aXBsZXhpbmcpCiAJCQkvKiBoaWRkZW4gZGFjIHJlZzogMTI4MHgxMDI0ICovCiAJCQlXSERSKGNpbmZvLCAweDRhKTsKIAkJZWxzZQpAQCAtMTAzNSw3ICsxMDA5LDYgQEAKIAkJdmdhX3dzZXEocmVnYmFzZSwgVkdBX1NFUV9NRU1PUllfTU9ERSwgMHgwNik7CiAJCS8qIHBsYW5lIG1hc2s6IG9ubHkgd3JpdGUgdG8gZmlyc3QgcGxhbmUgKi8KIAkJdmdhX3dzZXEocmVnYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSwgMHgwMSk7Ci0JCW9mZnNldCA9IHZhci0+eHJlc192aXJ0dWFsIC8gMTY7CiAJfQogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTA0NSw3ICsxMDE4LDcgQEAKIAkgKi8KIAogCWVsc2UgaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gOCkgewotCQlEUFJJTlRLKCJjaXJydXNmYjogcHJlcGFyaW5nIGZvciA4IGJpdCBkZWVwIGRpc3BsYXlcbiIpOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwgInByZXBhcmluZyBmb3IgOCBiaXQgZGVlcCBkaXNwbGF5XG4iKTsKIAkJc3dpdGNoIChjaW5mby0+YnR5cGUpIHsKIAkJY2FzZSBCVF9TRDY0OgogCQljYXNlIEJUX1BJQ0NPTE86CkBAIC0xMDU0LDM0ICsxMDI3LDI3IEBACiAJCWNhc2UgQlRfUElDQVNTTzQ6CiAJCWNhc2UgQlRfQUxQSU5FOgogCQljYXNlIEJUX0dENTQ4MDoKLQkJCURQUklOVEsoIiAoZm9yIEdENTR4eClcbiIpOwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsCi0JCQkJICByZWdzLm11bHRpcGxleGluZyA/CisJCQkJICBjaW5mby0+bXVsdGlwbGV4aW5nID8KIAkJCQkJYmktPnNyMDdfOGJwcF9tdXggOiBiaS0+c3IwN184YnBwKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRfTEFHVU5BOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDZ4KVxuIik7CisJCWNhc2UgQlRfTEFHVU5BQjoKIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LAogCQkJCXZnYV9yc2VxKHJlZ2Jhc2UsIENMX1NFUVI3KSB8IDB4MDEpOworCQkJdGhyZXNob2xkIHw9IDB4MTA7CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2lycnVzZmI6IHVua25vd24gQm9hcmRcbiIpOworCQkJZGV2X3dhcm4oaW5mby0+ZGV2aWNlLCAidW5rbm93biBCb2FyZFxuIik7CiAJCQlicmVhazsKIAkJfQogCiAJCXN3aXRjaCAoY2luZm8tPmJ0eXBlKSB7Ci0JCWNhc2UgQlRfU0Q2NDoKLQkJCS8qIE1DTEsgc2VsZWN0ICovCi0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUYsIDB4MWQpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBCVF9QSUNDT0xPOgogCQljYXNlIEJUX1BJQ0FTU086CiAJCWNhc2UgQlRfU1BFQ1RSVU06Ci0JCQkvKiAjIyMgdm9yaGVyIDFjIE1DTEsgc2VsZWN0ICovCi0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUYsIDB4MjIpOwogCQkJLyogRmFzdCBQYWdlLU1vZGUgd3JpdGVzICovCiAJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSRiwgMHhiMCk7CiAJCQlicmVhazsKQEAgLTEwOTEsNDAgKzEwNTcsMjcgQEAKIAkJCS8qICMjIyBJTkNPTVBMRVRFISEgKi8KIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVJGLCAweGI4KTsKICNlbmRpZgotLyoJICAJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVIxRiwgMHgxYyk7ICovCi0JCQlicmVhazsKLQogCQljYXNlIEJUX0FMUElORToKLQkJCURQUklOVEsoIiAoZm9yIEdENTQzeClcbiIpOwotCQkJLyogV2UgYWxyZWFkeSBzZXQgU1JGIGFuZCBTUjFGICovCi0JCQlicmVhazsKLQorCQljYXNlIEJUX1NENjQ6CiAJCWNhc2UgQlRfR0Q1NDgwOgogCQljYXNlIEJUX0xBR1VOQToKLQkJCURQUklOVEsoIiAoZm9yIEdENTR4eClcbiIpOworCQljYXNlIEJUX0xBR1VOQUI6CiAJCQkvKiBkbyBub3RoaW5nICovCiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2lycnVzZmI6IHVua25vd24gQm9hcmRcbiIpOworCQkJZGV2X3dhcm4oaW5mby0+ZGV2aWNlLCAidW5rbm93biBib2FyZFxuIik7CiAJCQlicmVhazsKIAkJfQogCiAJCS8qIG1vZGUgcmVnaXN0ZXI6IDI1NiBjb2xvciBtb2RlICovCiAJCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfTU9ERSwgNjQpOwotCQkvKiBwaXhlbCBtYXNrOiBwYXNzLXRocm91Z2ggYWxsIHBsYW5lcyAqLwotCQlXR2VuKGNpbmZvLCBWR0FfUEVMX01TSywgMHhmZik7Ci0JCWlmIChyZWdzLm11bHRpcGxleGluZykKKwkJaWYgKGNpbmZvLT5tdWx0aXBsZXhpbmcpCiAJCQkvKiBoaWRkZW4gZGFjIHJlZzogMTI4MHgxMDI0ICovCiAJCQlXSERSKGNpbmZvLCAweDRhKTsKIAkJZWxzZQogCQkJLyogaGlkZGVuIGRhYzogbm90aGluZyAqLwogCQkJV0hEUihjaW5mbywgMCk7Ci0JCS8qIG1lbW9yeSBtb2RlOiBjaGFpbjQsIGV4dC4gbWVtb3J5ICovCi0JCXZnYV93c2VxKHJlZ2Jhc2UsIFZHQV9TRVFfTUVNT1JZX01PREUsIDB4MGEpOwotCQkvKiBwbGFuZSBtYXNrOiBlbmFibGUgd3JpdGluZyB0byBhbGwgNCBwbGFuZXMgKi8KLQkJdmdhX3dzZXEocmVnYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSwgMHhmZik7Ci0JCW9mZnNldCA9IHZhci0+eHJlc192aXJ0dWFsIC8gODsKIAl9CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTM0LDE0NyArMTA4NywxMTAgQEAKIAkgKi8KIAogCWVsc2UgaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMTYpIHsKLQkJRFBSSU5USygiY2lycnVzZmI6IHByZXBhcmluZyBmb3IgMTYgYml0IGRlZXAgZGlzcGxheVxuIik7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAicHJlcGFyaW5nIGZvciAxNiBiaXQgZGVlcCBkaXNwbGF5XG4iKTsKIAkJc3dpdGNoIChjaW5mby0+YnR5cGUpIHsKLQkJY2FzZSBCVF9TRDY0OgotCQkJLyogRXh0ZW5kZWQgU2VxdWVuY2VyIE1vZGU6IDI1NmMgY29sLiBtb2RlICovCi0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHhmNyk7Ci0JCQkvKiBNQ0xLIHNlbGVjdCAqLwotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFGLCAweDFlKTsKLQkJCWJyZWFrOwotCiAJCWNhc2UgQlRfUElDQ09MTzoKIAkJY2FzZSBCVF9TUEVDVFJVTToKIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LCAweDg3KTsKIAkJCS8qIEZhc3QgUGFnZS1Nb2RlIHdyaXRlcyAqLwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUkYsIDB4YjApOwotCQkJLyogTUNMSyBzZWxlY3QgKi8KLQkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVIxRiwgMHgyMik7CiAJCQlicmVhazsKIAogCQljYXNlIEJUX1BJQ0FTU086CiAJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHgyNyk7CiAJCQkvKiBGYXN0IFBhZ2UtTW9kZSB3cml0ZXMgKi8KIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVJGLCAweGIwKTsKLQkJCS8qIE1DTEsgc2VsZWN0ICovCi0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUYsIDB4MjIpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBCVF9TRDY0OgogCQljYXNlIEJUX1BJQ0FTU080OgotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsIDB4MjcpOwotLyoJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUYsIDB4MWMpOyAgKi8KLQkJCWJyZWFrOwotCiAJCWNhc2UgQlRfQUxQSU5FOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDN4KVxuIik7Ci0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHhhNyk7CisJCQkvKiBFeHRlbmRlZCBTZXF1ZW5jZXIgTW9kZTogMjU2YyBjb2wuIG1vZGUgKi8KKwkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LAorCQkJCQljaW5mby0+ZG91YmxlVkNMSyA/IDB4YTMgOiAweGE3KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRfR0Q1NDgwOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDgwKVxuIik7CiAJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHgxNyk7CiAJCQkvKiBXZSBhbHJlYWR5IHNldCBTUkYgYW5kIFNSMUYgKi8KIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRfTEFHVU5BOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDZ4KVxuIik7CisJCWNhc2UgQlRfTEFHVU5BQjoKIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LAogCQkJCXZnYV9yc2VxKHJlZ2Jhc2UsIENMX1NFUVI3KSAmIH4weDAxKTsKKwkJCWNvbnRyb2wgfD0gMHgyMDAwOworCQkJZm9ybWF0IHw9IDB4MTQwMDsKKwkJCXRocmVzaG9sZCB8PSAweDEwOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNJUlJVU0ZCOiB1bmtub3duIEJvYXJkXG4iKTsKKwkJCWRldl93YXJuKGluZm8tPmRldmljZSwgInVua25vd24gQm9hcmRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBtb2RlIHJlZ2lzdGVyOiAyNTYgY29sb3IgbW9kZSAqLwogCQl2Z2Ffd2dmeChyZWdiYXNlLCBWR0FfR0ZYX01PREUsIDY0KTsKLQkJLyogcGl4ZWwgbWFzazogcGFzcy10aHJvdWdoIGFsbCBwbGFuZXMgKi8KLQkJV0dlbihjaW5mbywgVkdBX1BFTF9NU0ssIDB4ZmYpOwogI2lmZGVmIENPTkZJR19QQ0kKLQkJV0hEUihjaW5mbywgMHhjMCk7CS8qIENvcHkgWGJoICovCisJCVdIRFIoY2luZm8sIGNpbmZvLT5kb3VibGVWQ0xLID8gMHhlMSA6IDB4YzEpOwogI2VsaWYgZGVmaW5lZChDT05GSUdfWk9SUk8pCiAJCS8qIEZJWE1FOiBDT05GSUdfUENJIGFuZCBDT05GSUdfWk9SUk8gbWF5IGJlIGRlZmluZWQgYm90aCAqLwogCQlXSERSKGNpbmZvLCAweGEwKTsJLyogaGlkZGVuIGRhYyByZWc6IG5vdGhpbmcgc3BlY2lhbCAqLwogI2VuZGlmCi0JCS8qIG1lbW9yeSBtb2RlOiBjaGFpbjQsIGV4dC4gbWVtb3J5ICovCi0JCXZnYV93c2VxKHJlZ2Jhc2UsIFZHQV9TRVFfTUVNT1JZX01PREUsIDB4MGEpOwotCQkvKiBwbGFuZSBtYXNrOiBlbmFibGUgd3JpdGluZyB0byBhbGwgNCBwbGFuZXMgKi8KLQkJdmdhX3dzZXEocmVnYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSwgMHhmZik7Ci0JCW9mZnNldCA9IHZhci0+eHJlc192aXJ0dWFsIC8gNDsKIAl9CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJICoKLQkgKiAzMiBicHAKKwkgKiAyNCBicHAKIAkgKgogCSAqLwogCi0JZWxzZSBpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAzMikgewotCQlEUFJJTlRLKCJjaXJydXNmYjogcHJlcGFyaW5nIGZvciAzMiBiaXQgZGVlcCBkaXNwbGF5XG4iKTsKKwllbHNlIGlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDI0KSB7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAicHJlcGFyaW5nIGZvciAyNCBiaXQgZGVlcCBkaXNwbGF5XG4iKTsKIAkJc3dpdGNoIChjaW5mby0+YnR5cGUpIHsKLQkJY2FzZSBCVF9TRDY0OgotCQkJLyogRXh0ZW5kZWQgU2VxdWVuY2VyIE1vZGU6IDI1NmMgY29sLiBtb2RlICovCi0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHhmOSk7Ci0JCQkvKiBNQ0xLIHNlbGVjdCAqLwotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjFGLCAweDFlKTsKLQkJCWJyZWFrOwotCiAJCWNhc2UgQlRfUElDQ09MTzoKIAkJY2FzZSBCVF9TUEVDVFJVTToKIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LCAweDg1KTsKIAkJCS8qIEZhc3QgUGFnZS1Nb2RlIHdyaXRlcyAqLwogCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUkYsIDB4YjApOwotCQkJLyogTUNMSyBzZWxlY3QgKi8KLQkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVIxRiwgMHgyMik7CiAJCQlicmVhazsKIAogCQljYXNlIEJUX1BJQ0FTU086CiAJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHgyNSk7CiAJCQkvKiBGYXN0IFBhZ2UtTW9kZSB3cml0ZXMgKi8KIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVJGLCAweGIwKTsKLQkJCS8qIE1DTEsgc2VsZWN0ICovCi0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUYsIDB4MjIpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBCVF9TRDY0OgogCQljYXNlIEJUX1BJQ0FTU080OgotCQkJdmdhX3dzZXEocmVnYmFzZSwgQ0xfU0VRUjcsIDB4MjUpOwotLyoJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSMUYsIDB4MWMpOyAgKi8KLQkJCWJyZWFrOwotCiAJCWNhc2UgQlRfQUxQSU5FOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDN4KVxuIik7Ci0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHhhOSk7CisJCQkvKiBFeHRlbmRlZCBTZXF1ZW5jZXIgTW9kZTogMjU2YyBjb2wuIG1vZGUgKi8KKwkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LCAweGE1KTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRfR0Q1NDgwOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDgwKVxuIik7Ci0JCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHgxOSk7CisJCQl2Z2Ffd3NlcShyZWdiYXNlLCBDTF9TRVFSNywgMHgxNSk7CiAJCQkvKiBXZSBhbHJlYWR5IHNldCBTUkYgYW5kIFNSMUYgKi8KIAkJCWJyZWFrOwogCiAJCWNhc2UgQlRfTEFHVU5BOgotCQkJRFBSSU5USygiIChmb3IgR0Q1NDZ4KVxuIik7CisJCWNhc2UgQlRfTEFHVU5BQjoKIAkJCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVI3LAogCQkJCXZnYV9yc2VxKHJlZ2Jhc2UsIENMX1NFUVI3KSAmIH4weDAxKTsKKwkJCWNvbnRyb2wgfD0gMHg0MDAwOworCQkJZm9ybWF0IHw9IDB4MjQwMDsKKwkJCXRocmVzaG9sZCB8PSAweDIwOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNpcnJ1c2ZiOiB1bmtub3duIEJvYXJkXG4iKTsKKwkJCWRldl93YXJuKGluZm8tPmRldmljZSwgInVua25vd24gQm9hcmRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiBtb2RlIHJlZ2lzdGVyOiAyNTYgY29sb3IgbW9kZSAqLwogCQl2Z2Ffd2dmeChyZWdiYXNlLCBWR0FfR0ZYX01PREUsIDY0KTsKLQkJLyogcGl4ZWwgbWFzazogcGFzcy10aHJvdWdoIGFsbCBwbGFuZXMgKi8KLQkJV0dlbihjaW5mbywgVkdBX1BFTF9NU0ssIDB4ZmYpOwogCQkvKiBoaWRkZW4gZGFjIHJlZzogOC04LTggbW9kZSAoMjQgb3IgMzIpICovCiAJCVdIRFIoY2luZm8sIDB4YzUpOwotCQkvKiBtZW1vcnkgbW9kZTogY2hhaW40LCBleHQuIG1lbW9yeSAqLwotCQl2Z2Ffd3NlcShyZWdiYXNlLCBWR0FfU0VRX01FTU9SWV9NT0RFLCAweDBhKTsKLQkJLyogcGxhbmUgbWFzazogZW5hYmxlIHdyaXRpbmcgdG8gYWxsIDQgcGxhbmVzICovCi0JCXZnYV93c2VxKHJlZ2Jhc2UsIFZHQV9TRVFfUExBTkVfV1JJVEUsIDB4ZmYpOwotCQlvZmZzZXQgPSB2YXItPnhyZXNfdmlydHVhbCAvIDQ7CiAJfQogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTI4NCw2NyArMTIwMCw1NSBAQAogCSAqLwogCiAJZWxzZQotCQlwcmludGsoS0VSTl9FUlIgImNpcnJ1c2ZiOiBXaGF0J3MgdGhpcz8/ICIKLQkJCSIgcmVxdWVzdGVkIGNvbG9yIGRlcHRoID09ICVkLlxuIiwKKwkJZGV2X2VycihpbmZvLT5kZXZpY2UsCisJCQkiV2hhdCdzIHRoaXM/IHJlcXVlc3RlZCBjb2xvciBkZXB0aCA9PSAlZC5cbiIsCiAJCQl2YXItPmJpdHNfcGVyX3BpeGVsKTsKIAotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX09GRlNFVCwgb2Zmc2V0ICYgMHhmZik7CisJcGl0Y2ggPSBpbmZvLT5maXgubGluZV9sZW5ndGggPj4gMzsKKwl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19PRkZTRVQsIHBpdGNoICYgMHhmZik7CiAJdG1wID0gMHgyMjsKLQlpZiAob2Zmc2V0ICYgMHgxMDApCisJaWYgKHBpdGNoICYgMHgxMDApCiAJCXRtcCB8PSAweDEwOwkvKiBvZmZzZXQgb3ZlcmZsb3cgYml0ICovCiAKIAkvKiBzY3JlZW4gc3RhcnQgYWRkciAjMTYtMTgsIGZhc3RwYWdlbW9kZSBjeWNsZXMgKi8KIAl2Z2Ffd2NydChyZWdiYXNlLCBDTF9DUlQxQiwgdG1wKTsKIAotCWlmIChjaW5mby0+YnR5cGUgPT0gQlRfU0Q2NCB8fAotCSAgICBjaW5mby0+YnR5cGUgPT0gQlRfUElDQVNTTzQgfHwKLQkgICAgY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSB8fAotCSAgICBjaW5mby0+YnR5cGUgPT0gQlRfR0Q1NDgwKQotCQkvKiBzY3JlZW4gc3RhcnQgYWRkcmVzcyBiaXQgMTkgKi8KLQkJdmdhX3djcnQocmVnYmFzZSwgQ0xfQ1JUMUQsIDB4MDApOworCS8qIHNjcmVlbiBzdGFydCBhZGRyZXNzIGJpdCAxOSAqLworCWlmIChjaXJydXNmYl9ib2FyZF9pbmZvW2NpbmZvLT5idHlwZV0uc2Nybl9zdGFydF9iaXQxOSkKKwkJdmdhX3djcnQocmVnYmFzZSwgQ0xfQ1JUMUQsIChwaXRjaCA+PiA5KSAmIDEpOwogCi0JLyogdGV4dCBjdXJzb3IgbG9jYXRpb24gaGlnaCAqLwotCXZnYV93Y3J0KHJlZ2Jhc2UsIFZHQV9DUlRDX0NVUlNPUl9ISSwgMCk7Ci0JLyogdGV4dCBjdXJzb3IgbG9jYXRpb24gbG93ICovCi0JdmdhX3djcnQocmVnYmFzZSwgVkdBX0NSVENfQ1VSU09SX0xPLCAwKTsKLQkvKiB1bmRlcmxpbmUgcm93IHNjYW5saW5lID0gYXQgdmVyeSBib3R0b20gKi8KLQl2Z2Ffd2NydChyZWdiYXNlLCBWR0FfQ1JUQ19VTkRFUkxJTkUsIDApOworCWlmIChpc19sYWd1bmEoY2luZm8pKSB7CisJCXRtcCA9IDA7CisJCWlmICgoaHRvdGFsICsgNSkgJiAyNTYpCisJCQl0bXAgfD0gMTI4OworCQlpZiAoaGRpc3BlbmQgJiAyNTYpCisJCQl0bXAgfD0gNjQ7CisJCWlmIChoc3luY3N0YXJ0ICYgMjU2KQorCQkJdG1wIHw9IDQ4OworCQlpZiAodnRvdGFsICYgMTAyNCkKKwkJCXRtcCB8PSA4OworCQlpZiAodmRpc3BlbmQgJiAxMDI0KQorCQkJdG1wIHw9IDQ7CisJCWlmICh2c3luY3N0YXJ0ICYgMTAyNCkKKwkJCXRtcCB8PSAzOwogCi0JLyogY29udHJvbGxlciBtb2RlICovCi0JdmdhX3dhdHRyKHJlZ2Jhc2UsIFZHQV9BVENfTU9ERSwgMSk7Ci0JLyogb3ZlcnNjYW4gKGJvcmRlcikgY29sb3IgKi8KLQl2Z2Ffd2F0dHIocmVnYmFzZSwgVkdBX0FUQ19PVkVSU0NBTiwgMCk7Ci0JLyogY29sb3IgcGxhbmUgZW5hYmxlICovCi0JdmdhX3dhdHRyKHJlZ2Jhc2UsIFZHQV9BVENfUExBTkVfRU5BQkxFLCAxNSk7CisJCXZnYV93Y3J0KHJlZ2Jhc2UsIENMX0NSVDFFLCB0bXApOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIkNSVDFlOiAlZFxuIiwgdG1wKTsKKwl9CisKIAkvKiBwaXhlbCBwYW5uaW5nICovCiAJdmdhX3dhdHRyKHJlZ2Jhc2UsIENMX0FSMzMsIDApOwotCS8qIGNvbG9yIHNlbGVjdCAqLwotCXZnYV93YXR0cihyZWdiYXNlLCBWR0FfQVRDX0NPTE9SX1BBR0UsIDApOwogCiAJLyogWyBFR1M6IFNldE9mZnNldCgpOyBdICovCiAJLyogRnJvbSBTZXRPZmZzZXQoKTogVHVybiBvbiBWaWRlb0VuYWJsZSBiaXQgaW4gQXR0cmlidXRlIGNvbnRyb2xsZXIgKi8KIAlBdHRyT24oY2luZm8pOwogCi0JLyogc2V0L3Jlc2V0IHJlZ2lzdGVyICovCi0JdmdhX3dnZngocmVnYmFzZSwgVkdBX0dGWF9TUl9WQUxVRSwgMCk7Ci0JLyogc2V0L3Jlc2V0IGVuYWJsZSAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfU1JfRU5BQkxFLCAwKTsKLQkvKiBjb2xvciBjb21wYXJlICovCi0JdmdhX3dnZngocmVnYmFzZSwgVkdBX0dGWF9DT01QQVJFX1ZBTFVFLCAwKTsKLQkvKiBkYXRhIHJvdGF0ZSAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfREFUQV9ST1RBVEUsIDApOwotCS8qIHJlYWQgbWFwIHNlbGVjdCAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfUExBTkVfUkVBRCwgMCk7Ci0JLyogbWlzY2VsbGFuZW91cyByZWdpc3RlciAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfTUlTQywgMSk7Ci0JLyogY29sb3IgZG9uJ3QgY2FyZSAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfQ09NUEFSRV9NQVNLLCAxNSk7Ci0JLyogYml0IG1hc2sgKi8KLQl2Z2Ffd2dmeChyZWdiYXNlLCBWR0FfR0ZYX0JJVF9NQVNLLCAyNTUpOwotCi0JLyogZ3JhcGhpY3MgY3Vyc29yIGF0dHJpYnV0ZXM6IG5vdGhpbmcgc3BlY2lhbCAqLwotCXZnYV93c2VxKHJlZ2Jhc2UsIENMX1NFUVIxMiwgMHgwKTsKLQorCWlmIChpc19sYWd1bmEoY2luZm8pKSB7CisJCS8qIG5vIHRpbGVzICovCisJCWZiX3dyaXRldyhjb250cm9sIHwgMHgxMDAwLCBjaW5mby0+bGFndW5hX21taW8gKyAweDQwMik7CisJCWZiX3dyaXRldyhmb3JtYXQsIGNpbmZvLT5sYWd1bmFfbW1pbyArIDB4YzApOworCQlmYl93cml0ZXcodGhyZXNob2xkLCBjaW5mby0+bGFndW5hX21taW8gKyAweGVhKTsKKwl9CiAJLyogZmluYWxseSwgdHVybiBvbiBldmVyeXRoaW5nIC0gdHVybiBvZmYgIkZ1bGxCYW5kd2lkdGgiIGJpdCAqLwogCS8qIGFsc28sIHNldCAiRG90Q2xvY2slMiIgYml0IHdoZXJlIHJlcXVlc3RlZCAqLwogCXRtcCA9IDB4MDE7CkBAIC0xMzU1LDE4ICsxMjU5LDEyIEBACiAqLwogCiAJdmdhX3dzZXEocmVnYmFzZSwgVkdBX1NFUV9DTE9DS19NT0RFLCB0bXApOwotCURQUklOVEsoIkNMX1NFUVIxOiAlZFxuIiwgdG1wKTsKLQotCWNpbmZvLT5jdXJyZW50bW9kZSA9IHJlZ3M7Ci0KLQkvKiBwYW4gdG8gcmVxdWVzdGVkIG9mZnNldCAqLwotCWNpcnJ1c2ZiX3Bhbl9kaXNwbGF5KHZhciwgaW5mbyk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJDTF9TRVFSMTogJWRcbiIsIHRtcCk7CiAKICNpZmRlZiBDSVJSVVNGQl9ERUJVRwotCWNpcnJ1c2ZiX2R1bXAoKTsKKwljaXJydXNmYl9kYmdfcmVnX2R1bXAoaW5mbywgTlVMTCk7CiAjZW5kaWYKIAotCURQUklOVEsoIkVYSVRcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC0xNDE4LDI3ICsxMzE2LDE5IEBACiBzdGF0aWMgaW50IGNpcnJ1c2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCQkJCXN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCWludCB4b2Zmc2V0ID0gMDsKLQlpbnQgeW9mZnNldCA9IDA7CisJaW50IHhvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBiYXNlOwotCXVuc2lnbmVkIGNoYXIgdG1wID0gMCwgdG1wMiA9IDAsIHhwaXg7CisJdW5zaWduZWQgY2hhciB0bXAsIHhwaXg7CiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwogCi0JRFBSSU5USygiRU5URVJcbiIpOwotCURQUklOVEsoInZpcnR1YWwgb2Zmc2V0OiAoJWQsJWQpXG4iLCB2YXItPnhvZmZzZXQsIHZhci0+eW9mZnNldCk7Ci0KIAkvKiBubyByYW5nZSBjaGVja3MgZm9yIHhvZmZzZXQgYW5kIHlvZmZzZXQsICAgKi8KIAkvKiBhcyBmYl9wYW5fZGlzcGxheSBoYXMgYWxyZWFkeSBkb25lIHRoaXMgKi8KIAlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX1lXUkFQKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWluZm8tPnZhci54b2Zmc2V0ID0gdmFyLT54b2Zmc2V0OwotCWluZm8tPnZhci55b2Zmc2V0ID0gdmFyLT55b2Zmc2V0OwotCiAJeG9mZnNldCA9IHZhci0+eG9mZnNldCAqIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCAvIDg7Ci0JeW9mZnNldCA9IHZhci0+eW9mZnNldDsKIAotCWJhc2UgPSB5b2Zmc2V0ICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoICsgeG9mZnNldDsKKwliYXNlID0gdmFyLT55b2Zmc2V0ICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoICsgeG9mZnNldDsKIAogCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gMSkgewogCQkvKiBiYXNlIGlzIGFscmVhZHkgY29ycmVjdCAqLwpAQCAtMTQ0OCwxNCArMTMzOCwxNSBAQAogCQl4cGl4ID0gKHVuc2lnbmVkIGNoYXIpICgoeG9mZnNldCAlIDQpICogMik7CiAJfQogCi0JY2lycnVzZmJfV2FpdEJMVChjaW5mby0+cmVnYmFzZSk7IC8qIG1ha2Ugc3VyZSBhbGwgdGhlIEJMVCdzIGFyZSBkb25lICovCisJaWYgKCFpc19sYWd1bmEoY2luZm8pKQorCQljaXJydXNmYl9XYWl0QkxUKGNpbmZvLT5yZWdiYXNlKTsKIAogCS8qIGxvd2VyIDggKyA4IGJpdHMgb2Ygc2NyZWVuIHN0YXJ0IGFkZHJlc3MgKi8KLQl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfU1RBUlRfTE8sCi0JCSAodW5zaWduZWQgY2hhcikgKGJhc2UgJiAweGZmKSk7Ci0JdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIFZHQV9DUlRDX1NUQVJUX0hJLAotCQkgKHVuc2lnbmVkIGNoYXIpIChiYXNlID4+IDgpKTsKKwl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfU1RBUlRfTE8sIGJhc2UgJiAweGZmKTsKKwl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfU1RBUlRfSEksIChiYXNlID4+IDgpICYgMHhmZik7CiAKKwkvKiAweGYyIGlzICUxMTExMDAxMCwgZXhjbHVkZSB0bXAgYml0cyAqLworCXRtcCA9IHZnYV9yY3J0KGNpbmZvLT5yZWdiYXNlLCBDTF9DUlQxQikgJiAweGYyOwogCS8qIGNvbnN0cnVjdCBiaXRzIDE2LCAxNyBhbmQgMTggb2Ygc2NyZWVuIHN0YXJ0IGFkZHJlc3MgKi8KIAlpZiAoYmFzZSAmIDB4MTAwMDApCiAJCXRtcCB8PSAweDAxOwpAQCAtMTQ2NCwxMyArMTM1NSwxNyBAQAogCWlmIChiYXNlICYgMHg0MDAwMCkKIAkJdG1wIHw9IDB4MDg7CiAKLQkvKiAweGYyIGlzICUxMTExMDAxMCwgZXhjbHVkZSB0bXAgYml0cyAqLwotCXRtcDIgPSAodmdhX3JjcnQoY2luZm8tPnJlZ2Jhc2UsIENMX0NSVDFCKSAmIDB4ZjIpIHwgdG1wOwotCXZnYV93Y3J0KGNpbmZvLT5yZWdiYXNlLCBDTF9DUlQxQiwgdG1wMik7CisJdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIENMX0NSVDFCLCB0bXApOwogCiAJLyogY29uc3RydWN0IGJpdCAxOSBvZiBzY3JlZW4gc3RhcnQgYWRkcmVzcyAqLwotCWlmIChjaXJydXNmYl9ib2FyZF9pbmZvW2NpbmZvLT5idHlwZV0uc2Nybl9zdGFydF9iaXQxOSkKLQkJdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIENMX0NSVDFELCAoYmFzZSA+PiAxMikgJiAweDgwKTsKKwlpZiAoY2lycnVzZmJfYm9hcmRfaW5mb1tjaW5mby0+YnR5cGVdLnNjcm5fc3RhcnRfYml0MTkpIHsKKwkJdG1wID0gdmdhX3JjcnQoY2luZm8tPnJlZ2Jhc2UsIENMX0NSVDFEKTsKKwkJaWYgKGlzX2xhZ3VuYShjaW5mbykpCisJCQl0bXAgPSAodG1wICYgfjB4MTgpIHwgKChiYXNlID4+IDE2KSAmIDB4MTgpOworCQllbHNlCisJCQl0bXAgPSAodG1wICYgfjB4ODApIHwgKChiYXNlID4+IDEyKSAmIDB4ODApOworCQl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgQ0xfQ1JUMUQsIHRtcCk7CisJfQogCiAJLyogd3JpdGUgcGl4ZWwgcGFubmluZyB2YWx1ZSB0byBBUjMzOyB0aGlzIGRvZXMgbm90IHF1aXRlIHdvcmsgaW4gOGJwcAogCSAqCkBAIC0xNDc5LDkgKzEzNzQsNiBAQAogCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gMSkKIAkJdmdhX3dhdHRyKGNpbmZvLT5yZWdiYXNlLCBDTF9BUjMzLCB4cGl4KTsKIAotCWNpcnJ1c2ZiX1dhaXRCTFQoY2luZm8tPnJlZ2Jhc2UpOwotCi0JRFBSSU5USygiRVhJVFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MDIsNTcgKzEzOTQsNTQgQEAKIAlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7CiAJaW50IGN1cnJlbnRfbW9kZSA9IGNpbmZvLT5ibGFua19tb2RlOwogCi0JRFBSSU5USygiRU5URVIsIGJsYW5rIG1vZGUgPSAlZFxuIiwgYmxhbmtfbW9kZSk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJFTlRFUiwgYmxhbmsgbW9kZSA9ICVkXG4iLCBibGFua19tb2RlKTsKIAogCWlmIChpbmZvLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORyB8fAogCSAgICBjdXJyZW50X21vZGUgPT0gYmxhbmtfbW9kZSkgewotCQlEUFJJTlRLKCJFWElULCByZXR1cm5pbmcgMFxuIik7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiRVhJVCwgcmV0dXJuaW5nIDBcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBVbmRvIGN1cnJlbnQgKi8KIAlpZiAoY3VycmVudF9tb2RlID09IEZCX0JMQU5LX05PUk1BTCB8fAotCSAgICBjdXJyZW50X21vZGUgPT0gRkJfQkxBTktfVU5CTEFOSykgewotCQkvKiB1bmJsYW5rIHRoZSBzY3JlZW4gKi8KLQkJdmFsID0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIFZHQV9TRVFfQ0xPQ0tfTU9ERSk7CisJICAgIGN1cnJlbnRfbW9kZSA9PSBGQl9CTEFOS19VTkJMQU5LKQogCQkvKiBjbGVhciAiRnVsbEJhbmR3aWR0aCIgYml0ICovCi0JCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBWR0FfU0VRX0NMT0NLX01PREUsIHZhbCAmIDB4ZGYpOwotCQkvKiBhbmQgdW5kbyBWRVNBIHN1c3BlbmQgdHJpY2tlcnkgKi8KLQkJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSRSwgMHgwMCk7Ci0JfQotCi0JLyogc2V0IG5ldyAqLwotCWlmIChibGFua19tb2RlID4gRkJfQkxBTktfTk9STUFMKSB7Ci0JCS8qIGJsYW5rIHRoZSBzY3JlZW4gKi8KLQkJdmFsID0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIFZHQV9TRVFfQ0xPQ0tfTU9ERSk7CisJCXZhbCA9IDA7CisJZWxzZQogCQkvKiBzZXQgIkZ1bGxCYW5kd2lkdGgiIGJpdCAqLwotCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgVkdBX1NFUV9DTE9DS19NT0RFLCB2YWwgfCAweDIwKTsKLQl9CisJCXZhbCA9IDB4MjA7CisKKwl2YWwgfD0gdmdhX3JzZXEoY2luZm8tPnJlZ2Jhc2UsIFZHQV9TRVFfQ0xPQ0tfTU9ERSkgJiAweGRmOworCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBWR0FfU0VRX0NMT0NLX01PREUsIHZhbCk7CiAKIAlzd2l0Y2ggKGJsYW5rX21vZGUpIHsKIAljYXNlIEZCX0JMQU5LX1VOQkxBTks6CiAJY2FzZSBGQl9CTEFOS19OT1JNQUw6CisJCXZhbCA9IDB4MDA7CiAJCWJyZWFrOwogCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKLQkJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSRSwgMHgwNCk7CisJCXZhbCA9IDB4MDQ7CiAJCWJyZWFrOwogCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKLQkJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSRSwgMHgwMik7CisJCXZhbCA9IDB4MDI7CiAJCWJyZWFrOwogCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgotCQl2Z2Ffd2dmeChjaW5mby0+cmVnYmFzZSwgQ0xfR1JFLCAweDA2KTsKKwkJdmFsID0gMHgwNjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJRFBSSU5USygiRVhJVCwgcmV0dXJuaW5nIDFcbiIpOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIkVYSVQsIHJldHVybmluZyAxXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCisJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSRSwgdmFsKTsKKwogCWNpbmZvLT5ibGFua19tb2RlID0gYmxhbmtfbW9kZTsKLQlEUFJJTlRLKCJFWElULCByZXR1cm5pbmcgMFxuIik7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJFWElULCByZXR1cm5pbmcgMFxuIik7CiAKIAkvKiBMZXQgZmJjb24gZG8gYSBzb2Z0IGJsYW5rIGZvciB1cyAqLwogCXJldHVybiAoYmxhbmtfbW9kZSA9PSBGQl9CTEFOS19OT1JNQUwpID8gMSA6IDA7CiB9CisKIC8qKioqIEVORCAgIEhhcmR3YXJlIHNwZWNpZmljIFJvdXRpbmVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKiBCRUdJTiBJbnRlcm5hbCBSb3V0aW5lcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE1NjIsOCArMTQ1MSw2IEBACiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwogCWNvbnN0IHN0cnVjdCBjaXJydXNmYl9ib2FyZF9pbmZvX3JlYyAqYmk7CiAKLQlEUFJJTlRLKCJFTlRFUlxuIik7Ci0KIAlhc3NlcnQoY2luZm8gIT0gTlVMTCk7CiAKIAliaSA9ICZjaXJydXNmYl9ib2FyZF9pbmZvW2NpbmZvLT5idHlwZV07CkBAIC0xNTkxLDI1ICsxNDc4LDIzIEBACiAJCS8qIGRpc2FibGUgZmxpY2tlcmZpeGVyICovCiAJCXZnYV93Y3J0KGNpbmZvLT5yZWdiYXNlLCBDTF9DUlQ1MSwgMHgwMCk7CiAJCW1kZWxheSgxMDApOwotCQkvKiBmcm9tIEtsYXVzJyBOZXRCU0QgZHJpdmVyOiAqLwotCQl2Z2Ffd2dmeChjaW5mby0+cmVnYmFzZSwgQ0xfR1IyRiwgMHgwMCk7Ci0JCS8qIHB1dCBibGl0dGVyIGludG8gNTQyeCBjb21wYXQgKi8KLQkJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSMzMsIDB4MDApOwogCQkvKiBtb2RlICovCiAJCXZnYV93Z2Z4KGNpbmZvLT5yZWdiYXNlLCBDTF9HUjMxLCAweDAwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEJUX0dENTQ4MDoKKwljYXNlIEJUX0dENTQ4MDogIC8qIGZhbGwgdGhyb3VnaCAqLwogCQkvKiBmcm9tIEtsYXVzJyBOZXRCU0QgZHJpdmVyOiAqLwogCQl2Z2Ffd2dmeChjaW5mby0+cmVnYmFzZSwgQ0xfR1IyRiwgMHgwMCk7CisJY2FzZSBCVF9BTFBJTkU6ICAvKiBmYWxsIHRocm91Z2ggKi8KKwkJLyogcHV0IGJsaXR0ZXIgaW50byA1NDJ4IGNvbXBhdCAqLworCQl2Z2Ffd2dmeChjaW5mby0+cmVnYmFzZSwgQ0xfR1IzMywgMHgwMCk7CiAJCWJyZWFrOwogCi0JY2FzZSBCVF9BTFBJTkU6CisJY2FzZSBCVF9MQUdVTkE6CisJY2FzZSBCVF9MQUdVTkFCOgogCQkvKiBOb3RoaW5nIHRvIGRvIHRvIHJlc2V0IHRoZSBib2FyZC4gKi8KIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgImNpcnJ1c2ZiOiBXYXJuaW5nOiBVbmtub3duIGJvYXJkIHR5cGVcbiIpOworCQlkZXZfZXJyKGluZm8tPmRldmljZSwgIldhcm5pbmc6IFVua25vd24gYm9hcmQgdHlwZVxuIik7CiAJCWJyZWFrOwogCX0KIApAQCAtMTYyOSwzMSArMTUxNCwyOCBAQAogCQkJV0dlbihjaW5mbywgQ0xfVlNTTTIsIDB4MDEpOwogCiAJCS8qIHJlc2V0IHNlcXVlbmNlciBsb2dpYyAqLwotCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjAsIDB4MDMpOworCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgVkdBX1NFUV9SRVNFVCwgMHgwMyk7CiAKIAkJLyogRnVsbEJhbmR3aWR0aCAodmlkZW8gb2ZmKSBhbmQgOC85IGRvdCBjbG9jayAqLwogCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgVkdBX1NFUV9DTE9DS19NT0RFLCAweDIxKTsKLQkJLyogcG9sYXJpdHkgKC0vLSksIGRpc2FibGUgYWNjZXNzIHRvIGRpc3BsYXkgbWVtb3J5LAotCQkgKiBWR0FfQ1JUQ19TVEFSVF9ISSBiYXNlIGFkZHJlc3M6IGNvbG9yCi0JCSAqLwotCQlXR2VuKGNpbmZvLCBWR0FfTUlTX1csIDB4YzEpOwogCiAJCS8qICJtYWdpYyBjb29raWUiIC0gZG9lc24ndCBtYWtlIGFueSBzZW5zZSB0byBtZS4uICovCiAvKiAgICAgIHZnYV93Z2Z4KGNpbmZvLT5yZWdiYXNlLCBDTF9HUkEsIDB4Y2UpOyAgICovCiAJCS8qIHVubG9jayBhbGwgZXh0ZW5zaW9uIHJlZ2lzdGVycyAqLwogCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjYsIDB4MTIpOwogCi0JCS8qIHJlc2V0IGJsaXR0ZXIgKi8KLQkJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSMzEsIDB4MDQpOwotCiAJCXN3aXRjaCAoY2luZm8tPmJ0eXBlKSB7CiAJCWNhc2UgQlRfR0Q1NDgwOgogCQkJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVJGLCAweDk4KTsKIAkJCWJyZWFrOwogCQljYXNlIEJUX0FMUElORToKKwkJY2FzZSBCVF9MQUdVTkE6CisJCWNhc2UgQlRfTEFHVU5BQjoKIAkJCWJyZWFrOwogCQljYXNlIEJUX1NENjQ6CisjaWZkZWYgQ09ORklHX1pPUlJPCiAJCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUkYsIDB4YjgpOworI2VuZGlmCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBDTF9TRVFSMTYsIDB4MGYpOwpAQCAtMTY2NSw4ICsxNTQ3LDggQEAKIAl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSwgMHhmZik7CiAJLyogY2hhcmFjdGVyIG1hcCBzZWxlY3Q6IGRvZXNuJ3QgZXZlbiBtYXR0ZXIgaW4gZ3ggbW9kZSAqLwogCXZnYV93c2VxKGNpbmZvLT5yZWdiYXNlLCBWR0FfU0VRX0NIQVJBQ1RFUl9NQVAsIDB4MDApOwotCS8qIG1lbW9yeSBtb2RlOiBjaGFpbi00LCBubyBvZGQvZXZlbiwgZXh0LiBtZW1vcnkgKi8KLQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgVkdBX1NFUV9NRU1PUllfTU9ERSwgMHgwZSk7CisJLyogbWVtb3J5IG1vZGU6IGNoYWluNCwgZXh0LiBtZW1vcnkgKi8KKwl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgVkdBX1NFUV9NRU1PUllfTU9ERSwgMHgwYSk7CiAKIAkvKiBjb250cm9sbGVyLWludGVybmFsIGJhc2UgYWRkcmVzcyBvZiB2aWRlbyBtZW1vcnkgKi8KIAlpZiAoYmktPmluaXRfc3IwNykKQEAgLTE2OTIsMjAgKzE1NzQsMTIgQEAKIAkJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxOCwgMHgwMik7CiAJfQogCi0JLyogTUNMSyBzZWxlY3QgZXRjLiAqLwotCWlmIChiaS0+aW5pdF9zcjFmKQotCQl2Z2Ffd3NlcShjaW5mby0+cmVnYmFzZSwgQ0xfU0VRUjFGLCBiaS0+c3IxZik7Ci0KIAkvKiBTY3JlZW4gQSBwcmVzZXQgcm93IHNjYW46IG5vbmUgKi8KIAl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfUFJFU0VUX1JPVywgMHgwMCk7CiAJLyogVGV4dCBjdXJzb3Igc3RhcnQ6IGRpc2FibGUgdGV4dCBjdXJzb3IgKi8KIAl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfQ1VSU09SX1NUQVJULCAweDIwKTsKIAkvKiBUZXh0IGN1cnNvciBlbmQ6IC0gKi8KIAl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfQ1VSU09SX0VORCwgMHgwMCk7Ci0JLyogU2NyZWVuIHN0YXJ0IGFkZHJlc3MgaGlnaDogMCAqLwotCXZnYV93Y3J0KGNpbmZvLT5yZWdiYXNlLCBWR0FfQ1JUQ19TVEFSVF9ISSwgMHgwMCk7Ci0JLyogU2NyZWVuIHN0YXJ0IGFkZHJlc3MgbG93OiAwICovCi0JdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIFZHQV9DUlRDX1NUQVJUX0xPLCAweDAwKTsKIAkvKiB0ZXh0IGN1cnNvciBsb2NhdGlvbiBoaWdoOiAwICovCiAJdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIFZHQV9DUlRDX0NVUlNPUl9ISSwgMHgwMCk7CiAJLyogdGV4dCBjdXJzb3IgbG9jYXRpb24gbG93OiAwICovCkBAIC0xNzEzLDEwICsxNTg3LDYgQEAKIAogCS8qIFVuZGVybGluZSBSb3cgc2NhbmxpbmU6IC0gKi8KIAl2Z2Ffd2NydChjaW5mby0+cmVnYmFzZSwgVkdBX0NSVENfVU5ERVJMSU5FLCAweDAwKTsKLQkvKiBtb2RlIGNvbnRyb2w6IHRpbWluZyBlbmFibGUsIGJ5dGUgbW9kZSwgbm8gY29tcGF0IG1vZGVzICovCi0JdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIFZHQV9DUlRDX01PREUsIDB4YzMpOwotCS8qIExpbmUgQ29tcGFyZTogbm90IG5lZWRlZCAqLwotCXZnYV93Y3J0KGNpbmZvLT5yZWdiYXNlLCBWR0FfQ1JUQ19MSU5FX0NPTVBBUkUsIDB4MDApOwogCS8qICMjIyBhZGQgMHg0MCBmb3IgdGV4dCBtb2RlcyB3aXRoID4gMzAgTUh6IHBpeGNsb2NrICovCiAJLyogZXh0LiBkaXNwbGF5IGNvbnRyb2xzOiBleHQuYWRyLiB3cmFwICovCiAJdmdhX3djcnQoY2luZm8tPnJlZ2Jhc2UsIENMX0NSVDFCLCAweDAyKTsKQEAgLTE3MzksNyArMTYwOSw5IEBACiAJdmdhX3dnZngoY2luZm8tPnJlZ2Jhc2UsIFZHQV9HRlhfQ09NUEFSRV9NQVNLLCAweDBmKTsKIAkvKiBCaXQgTWFzazogbm8gbWFzayBhdCBhbGwgKi8KIAl2Z2Ffd2dmeChjaW5mby0+cmVnYmFzZSwgVkdBX0dGWF9CSVRfTUFTSywgMHhmZik7Ci0JaWYgKGNpbmZvLT5idHlwZSA9PSBCVF9BTFBJTkUpCisKKwlpZiAoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSB8fCBjaW5mby0+YnR5cGUgPT0gQlRfU0Q2NCB8fAorCSAgICBpc19sYWd1bmEoY2luZm8pKQogCQkvKiAoNTQzNCBjYW4ndCBoYXZlIGJpdCAzIHNldCBmb3IgYml0Ymx0KSAqLwogCQl2Z2Ffd2dmeChjaW5mby0+cmVnYmFzZSwgQ0xfR1JCLCAweDIwKTsKIAllbHNlCkBAIC0xNzc5LDE4ICsxNjUxLDExIEBACiAJdmdhX3dhdHRyKGNpbmZvLT5yZWdiYXNlLCBWR0FfQVRDX09WRVJTQ0FOLCAweDAwKTsKIAkvKiBDb2xvciBQbGFuZSBlbmFibGU6IEVuYWJsZSBhbGwgNCBwbGFuZXMgKi8KIAl2Z2Ffd2F0dHIoY2luZm8tPnJlZ2Jhc2UsIFZHQV9BVENfUExBTkVfRU5BQkxFLCAweDBmKTsKLS8qICMjIyAgdmdhX3dhdHRyKGNpbmZvLT5yZWdiYXNlLCBDTF9BUjMzLCAweDAwKTsgKiBQaXhlbCBQYW5uaW5nOiAtICovCiAJLyogQ29sb3IgU2VsZWN0OiAtICovCiAJdmdhX3dhdHRyKGNpbmZvLT5yZWdiYXNlLCBWR0FfQVRDX0NPTE9SX1BBR0UsIDB4MDApOwogCiAJV0dlbihjaW5mbywgVkdBX1BFTF9NU0ssIDB4ZmYpOwkvKiBQaXhlbCBtYXNrOiBubyBtYXNrICovCiAKLQlpZiAoY2luZm8tPmJ0eXBlICE9IEJUX0FMUElORSAmJiBjaW5mby0+YnR5cGUgIT0gQlRfR0Q1NDgwKQotCS8qIHBvbGFyaXR5ICgtLy0pLCBlbmFibGUgZGlzcGxheSBtZW0sCi0JICogVkdBX0NSVENfU1RBUlRfSEkgaS9vIGJhc2UgPSBjb2xvcgotCSAqLwotCQlXR2VuKGNpbmZvLCBWR0FfTUlTX1csIDB4YzMpOwotCiAJLyogQkxUIFN0YXJ0L3N0YXR1czogQmxpdHRlciByZXNldCAqLwogCXZnYV93Z2Z4KGNpbmZvLT5yZWdiYXNlLCBDTF9HUjMxLCAweDA0KTsKIAkvKiAtICIgLQkgICA6ICJlbmQtb2YtcmVzZXQiICovCkBAIC0xNzk4LDggKzE2NjMsNiBAQAogCiAJLyogbWlzYy4uLiAqLwogCVdIRFIoY2luZm8sIDApOwkvKiBIaWRkZW4gREFDIHJlZ2lzdGVyOiAtICovCi0KLQlEUFJJTlRLKCJFWElUXG4iKTsKIAlyZXR1cm47CiB9CiAKQEAgLTE4MDgsOCArMTY3MSw2IEBACiAjaWZkZWYgQ09ORklHX1pPUlJPIC8qIG9ubHkgd29ya3Mgb24gWm9ycm8gYm9hcmRzICovCiAJc3RhdGljIGludCBJc09uID0gMDsJLyogWFhYIG5vdCBvayBmb3IgbXVsdGlwbGUgYm9hcmRzICovCiAKLQlEUFJJTlRLKCJFTlRFUlxuIik7Ci0KIAlpZiAoY2luZm8tPmJ0eXBlID09IEJUX1BJQ0FTU080KQogCQlyZXR1cm47CQkvKiBub3RoaW5nIHRvIHN3aXRjaCAqLwogCWlmIChjaW5mby0+YnR5cGUgPT0gQlRfQUxQSU5FKQpAQCAtMTgxOSw4ICsxNjgwLDYgQEAKIAlpZiAoY2luZm8tPmJ0eXBlID09IEJUX1BJQ0FTU08pIHsKIAkJaWYgKChvbiAmJiAhSXNPbikgfHwgKCFvbiAmJiBJc09uKSkKIAkJCVdTRlIoY2luZm8sIDB4ZmYpOwotCi0JCURQUklOVEsoIkVYSVRcbiIpOwogCQlyZXR1cm47CiAJfQogCWlmIChvbikgewpAQCAtMTg0NywxMSArMTcwNiwxMCBAQAogCQljYXNlIEJUX1NQRUNUUlVNOgogCQkJV1NGUihjaW5mbywgMHg0Zik7CiAJCQlicmVhazsKLQkJZGVmYXVsdDogLyogZG8gbm90aGluZyAqLyBicmVhazsKKwkJZGVmYXVsdDogLyogZG8gbm90aGluZyAqLworCQkJYnJlYWs7CiAJCX0KIAl9Ci0KLQlEUFJJTlRLKCJFWElUXG4iKTsKICNlbmRpZiAvKiBDT05GSUdfWk9SUk8gKi8KIH0KIApAQCAtMTg1OSw2ICsxNzE3LDE3IEBACiAvKiBMaW51eCAyLjYtc3R5bGUgIGFjY2VsZXJhdGVkIGZ1bmN0aW9ucyAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIGludCBjaXJydXNmYl9zeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKKworCWlmICghaXNfbGFndW5hKGNpbmZvKSkgeworCQl3aGlsZSAodmdhX3JnZngoY2luZm8tPnJlZ2Jhc2UsIENMX0dSMzEpICYgMHgwMykKKwkJCWNwdV9yZWxheCgpOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgY2lycnVzZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlZ2lvbikKIHsKQEAgLTE4OTQsOCArMTc2Myw4IEBACiAJCQkgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwKIAkJCSAgKHJlZ2lvbi0+ZHggKiBtKSAvIDgsIHJlZ2lvbi0+ZHksCiAJCQkgIChyZWdpb24tPndpZHRoICogbSkgLyA4LCByZWdpb24tPmhlaWdodCwKLQkJCSAgY29sb3IsCi0JCQkgIGluZm8tPmZpeC5saW5lX2xlbmd0aCk7CisJCQkgIGNvbG9yLCBjb2xvciwKKwkJCSAgaW5mby0+Zml4LmxpbmVfbGVuZ3RoLCAweDQwKTsKIH0KIAogc3RhdGljIHZvaWQgY2lycnVzZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sCkBAIC0xOTQzLDkgKzE4MTIsNDYgQEAKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBjaGFyIG9wID0gKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSAyNCkgPyAweGMgOiAweDQ7CiAKLQljaXJydXNmYl9XYWl0QkxUKGNpbmZvLT5yZWdiYXNlKTsKLQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwlpZiAoaW5mby0+c3RhdGUgIT0gRkJJTkZPX1NUQVRFX1JVTk5JTkcpCisJCXJldHVybjsKKwkvKiBBbHBpbmUvU0Q2NCBkb2VzIG5vdCB3b3JrIGF0IDI0YnBwID8/PyAqLworCWlmIChpbmZvLT5mbGFncyAmIEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEIHx8IGltYWdlLT5kZXB0aCAhPSAxKQorCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKwllbHNlIGlmICgoY2luZm8tPmJ0eXBlID09IEJUX0FMUElORSB8fCBjaW5mby0+YnR5cGUgPT0gQlRfU0Q2NCkgJiYKKwkJICBvcCA9PSAweGMpCisJCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCWVsc2UgeworCQl1bnNpZ25lZCBzaXplID0gKChpbWFnZS0+d2lkdGggKyA3KSA+PiAzKSAqIGltYWdlLT5oZWlnaHQ7CisJCWludCBtID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOworCQl1MzIgZmcsIGJnOworCisJCWlmIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPT0gOCkgeworCQkJZmcgPSBpbWFnZS0+ZmdfY29sb3I7CisJCQliZyA9IGltYWdlLT5iZ19jb2xvcjsKKwkJfSBlbHNlIHsKKwkJCWZnID0gKCh1MzIgKikoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOworCQkJYmcgPSAoKHUzMiAqKShpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5iZ19jb2xvcl07CisJCX0KKwkJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSAyNCkgeworCQkJLyogY2xlYXIgYmFja2dyb3VuZCBmaXJzdCAqLworCQkJY2lycnVzZmJfUmVjdEZpbGwoY2luZm8tPnJlZ2Jhc2UsCisJCQkJCSAgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsLAorCQkJCQkgIChpbWFnZS0+ZHggKiBtKSAvIDgsIGltYWdlLT5keSwKKwkJCQkJICAoaW1hZ2UtPndpZHRoICogbSkgLyA4LAorCQkJCQkgIGltYWdlLT5oZWlnaHQsCisJCQkJCSAgYmcsIGJnLAorCQkJCQkgIGluZm8tPmZpeC5saW5lX2xlbmd0aCwgMHg0MCk7CisJCX0KKwkJY2lycnVzZmJfUmVjdEZpbGwoY2luZm8tPnJlZ2Jhc2UsCisJCQkJICBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsCisJCQkJICAoaW1hZ2UtPmR4ICogbSkgLyA4LCBpbWFnZS0+ZHksCisJCQkJICAoaW1hZ2UtPndpZHRoICogbSkgLyA4LCBpbWFnZS0+aGVpZ2h0LAorCQkJCSAgZmcsIGJnLAorCQkJCSAgaW5mby0+Zml4LmxpbmVfbGVuZ3RoLCBvcCk7CisJCW1lbWNweShpbmZvLT5zY3JlZW5fYmFzZSwgaW1hZ2UtPmRhdGEsIHNpemUpOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19QUENfUFJFUApAQCAtMTk1MywxMiArMTg1OSw4IEBACiAjZGVmaW5lIFBSRVBfSU9fQkFTRSAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgMHg4MDAwMDAwMCkKIHN0YXRpYyB2b2lkIGdldF9wcmVwX2FkZHJzKHVuc2lnbmVkIGxvbmcgKmRpc3BsYXksIHVuc2lnbmVkIGxvbmcgKnJlZ2lzdGVycykKIHsKLQlEUFJJTlRLKCJFTlRFUlxuIik7Ci0KIAkqZGlzcGxheSA9IFBSRVBfVklERU9fQkFTRTsKIAkqcmVnaXN0ZXJzID0gKHVuc2lnbmVkIGxvbmcpIFBSRVBfSU9fQkFTRTsKLQotCURQUklOVEsoIkVYSVRcbiIpOwogfQogCiAjZW5kaWYJCQkJLyogQ09ORklHX1BQQ19QUkVQICovCkBAIC0xOTcwLDQwICsxODcyLDQzIEBACiAgKiBiYXNlZCBvbiB0aGUgRFJBTSBiYW5kd2lkdGggYml0IGFuZCBEUkFNIGJhbmsgc3dpdGNoaW5nIGJpdC4gIFRoaXMKICAqIHdvcmtzIHdpdGggMU1CLCAyTUIgYW5kIDRNQiBjb25maWd1cmF0aW9ucyAod2hpY2ggdGhlIE1vdG9yb2xhIGJvYXJkcwogICogc2VlbSB0byBoYXZlLiAqLwotc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXQgY2lycnVzZmJfZ2V0X21lbXNpemUodTggX19pb21lbSAqcmVnYmFzZSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IGNpcnJ1c2ZiX2dldF9tZW1zaXplKHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCQkJICAgdTggX19pb21lbSAqcmVnYmFzZSkKIHsKIAl1bnNpZ25lZCBsb25nIG1lbTsKLQl1bnNpZ25lZCBjaGFyIFNSRjsKKwlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7CiAKLQlEUFJJTlRLKCJFTlRFUlxuIik7CisJaWYgKGlzX2xhZ3VuYShjaW5mbykpIHsKKwkJdW5zaWduZWQgY2hhciBTUjE0ID0gdmdhX3JzZXEocmVnYmFzZSwgQ0xfU0VRUjE0KTsKIAotCVNSRiA9IHZnYV9yc2VxKHJlZ2Jhc2UsIENMX1NFUVJGKTsKLQlzd2l0Y2ggKChTUkYgJiAweDE4KSkgewotCWNhc2UgMHgwODoKLQkJbWVtID0gNTEyICogMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSAweDEwOgotCQltZW0gPSAxMDI0ICogMTAyNDsKLQkJYnJlYWs7Ci0JLyogNjQtYml0IERSQU0gZGF0YSBidXMgd2lkdGg7IGFzc3VtZSAyTUIuIEFsc28gaW5kaWNhdGVzIDJNQiBtZW1vcnkKLQkgKiBvbiB0aGUgNTQzMC4KLQkgKi8KLQljYXNlIDB4MTg6Ci0JCW1lbSA9IDIwNDggKiAxMDI0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICJDTGdlbmZiOiBVbmtub3duIG1lbW9yeSBzaXplIVxuIik7Ci0JCW1lbSA9IDEwMjQgKiAxMDI0OworCQltZW0gPSAoKFNSMTQgJiA3KSArIDEpIDw8IDIwOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgU1JGID0gdmdhX3JzZXEocmVnYmFzZSwgQ0xfU0VRUkYpOworCQlzd2l0Y2ggKChTUkYgJiAweDE4KSkgeworCQljYXNlIDB4MDg6CisJCQltZW0gPSA1MTIgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgMHgxMDoKKwkJCW1lbSA9IDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCS8qIDY0LWJpdCBEUkFNIGRhdGEgYnVzIHdpZHRoOyBhc3N1bWUgMk1CLgorCQkgKiBBbHNvIGluZGljYXRlcyAyTUIgbWVtb3J5IG9uIHRoZSA1NDMwLgorCQkgKi8KKwkJY2FzZSAweDE4OgorCQkJbWVtID0gMjA0OCAqIDEwMjQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl93YXJuKGluZm8tPmRldmljZSwgIlVua25vd24gbWVtb3J5IHNpemUhXG4iKTsKKwkJCW1lbSA9IDEwMjQgKiAxMDI0OworCQl9CisJCS8qIElmIERSQU0gYmFuayBzd2l0Y2hpbmcgaXMgZW5hYmxlZCwgdGhlcmUgbXVzdCBiZQorCQkgKiB0d2ljZSBhcyBtdWNoIG1lbW9yeSBpbnN0YWxsZWQuICg0TUIgb24gdGhlIDU0MzQpCisJCSAqLworCQlpZiAoY2luZm8tPmJ0eXBlICE9IEJUX0FMUElORSAmJiAoU1JGICYgMHg4MCkgIT0gMCkKKwkJCW1lbSAqPSAyOwogCX0KLQlpZiAoU1JGICYgMHg4MCkKLQkvKiBJZiBEUkFNIGJhbmsgc3dpdGNoaW5nIGlzIGVuYWJsZWQsIHRoZXJlIG11c3QgYmUgdHdpY2UgYXMgbXVjaAotCSAqIG1lbW9yeSBpbnN0YWxsZWQuICg0TUIgb24gdGhlIDU0MzQpCi0JICovCi0JCW1lbSAqPSAyOwogCiAJLyogVE9ETzogSGFuZGxpbmcgb2YgR0Q1NDQ2LzU0ODAgKHNlZSBYRjg2IHNvdXJjZXMgLi4uKSAqLwotCi0JRFBSSU5USygiRVhJVFxuIik7CiAJcmV0dXJuIG1lbTsKIH0KIApAQCAtMjAxNCw4ICsxOTE5LDYgQEAKIAlhc3NlcnQoZGlzcGxheSAhPSBOVUxMKTsKIAlhc3NlcnQocmVnaXN0ZXJzICE9IE5VTEwpOwogCi0JRFBSSU5USygiRU5URVJcbiIpOwotCiAJKmRpc3BsYXkgPSAwOwogCSpyZWdpc3RlcnMgPSAwOwogCkBAIC0yMDMwLDE0ICsxOTMzLDE1IEBACiAJfQogCiAJYXNzZXJ0KCpkaXNwbGF5ICE9IDApOwotCi0JRFBSSU5USygiRVhJVFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGNpcnJ1c2ZiX3BjaV91bm1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoaW5mby0+ZGV2aWNlKTsKKwlzdHJ1Y3QgY2lycnVzZmJfaW5mbyAqY2luZm8gPSBpbmZvLT5wYXI7CiAKKwlpZiAoY2luZm8tPmxhZ3VuYV9tbWlvID09IE5VTEwpCisJCWlvdW5tYXAoY2luZm8tPmxhZ3VuYV9tbWlvKTsKIAlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKICNpZiAwIC8qIGlmIHN5c3RlbSBkaWRuJ3QgY2xhaW0gdGhpcyByZWdpb24sIHdlIHdvdWxkLi4uICovCiAJcmVsZWFzZV9tZW1fcmVnaW9uKDB4QTAwMDAsIDY1NTM1KTsKQEAgLTIwNjcsNiArMTk3MSwyMiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19aT1JSTyAqLwogCisvKiBmdW5jdGlvbiB0YWJsZSBvZiB0aGUgYWJvdmUgZnVuY3Rpb25zICovCitzdGF0aWMgc3RydWN0IGZiX29wcyBjaXJydXNmYl9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5mYl9vcGVuCT0gY2lycnVzZmJfb3BlbiwKKwkuZmJfcmVsZWFzZQk9IGNpcnJ1c2ZiX3JlbGVhc2UsCisJLmZiX3NldGNvbHJlZwk9IGNpcnJ1c2ZiX3NldGNvbHJlZywKKwkuZmJfY2hlY2tfdmFyCT0gY2lycnVzZmJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyCT0gY2lycnVzZmJfc2V0X3BhciwKKwkuZmJfcGFuX2Rpc3BsYXkgPSBjaXJydXNmYl9wYW5fZGlzcGxheSwKKwkuZmJfYmxhbmsJPSBjaXJydXNmYl9ibGFuaywKKwkuZmJfZmlsbHJlY3QJPSBjaXJydXNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSBjaXJydXNmYl9jb3B5YXJlYSwKKwkuZmJfc3luYwk9IGNpcnJ1c2ZiX3N5bmMsCisJLmZiX2ltYWdlYmxpdAk9IGNpcnJ1c2ZiX2ltYWdlYmxpdCwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNpcnJ1c2ZiX3NldF9mYmluZm8oc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwpAQCAtMjA3NywxMCArMTk5NywxNiBAQAogCQkgICAgfCBGQklORk9fSFdBQ0NFTF9YUEFOCiAJCSAgICB8IEZCSU5GT19IV0FDQ0VMX1lQQU4KIAkJICAgIHwgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QKKwkJICAgIHwgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUCiAJCSAgICB8IEZCSU5GT19IV0FDQ0VMX0NPUFlBUkVBOwotCWlmIChub2FjY2VsKQorCWlmIChub2FjY2VsIHx8IGlzX2xhZ3VuYShjaW5mbykpIHsKIAkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQ7CisJCWluZm8tPmZpeC5hY2NlbCA9IEZCX0FDQ0VMX05PTkU7CisJfSBlbHNlCisJCWluZm8tPmZpeC5hY2NlbCA9IEZCX0FDQ0VMX0NJUlJVU19BTFBJTkU7CisKIAlpbmZvLT5mYm9wcyA9ICZjaXJydXNmYl9vcHM7CisKIAlpZiAoY2luZm8tPmJ0eXBlID09IEJUX0dENTQ4MCkgewogCQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCA9PSAxNikKIAkJCWluZm8tPnNjcmVlbl9iYXNlICs9IDEgKiBNQl87CkBAIC0yMTA0LDcgKzIwMzAsNiBAQAogCiAJLyogRklYTUU6IG1hcCByZWdpb24gYXQgMHhCODAwMCBpZiBhdmFpbGFibGUsIGZpbGwgaW4gaGVyZSAqLwogCWluZm8tPmZpeC5tbWlvX2xlbiAgID0gMDsKLQlpbmZvLT5maXguYWNjZWwgPSBGQl9BQ0NFTF9OT05FOwogCiAJZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKTsKIApAQCAtMjExNSw3MCArMjA0MCw1NiBAQAogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbyA9IGluZm8tPnBhcjsKIAlpbnQgZXJyOwotCWVudW0gY2lycnVzX2JvYXJkIGJ0eXBlOwotCi0JRFBSSU5USygiRU5URVJcbiIpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiY2lycnVzZmI6IERyaXZlciBmb3IgQ2lycnVzIExvZ2ljIGJhc2VkICIKLQkJImdyYXBoaWMgYm9hcmRzLCB2IiBDSVJSVVNGQl9WRVJTSU9OICJcbiIpOwotCi0JYnR5cGUgPSBjaW5mby0+YnR5cGU7CiAKIAkvKiBzYW5pdHkgY2hlY2tzICovCi0JYXNzZXJ0KGJ0eXBlICE9IEJUX05PTkUpOworCWFzc2VydChjaW5mby0+YnR5cGUgIT0gQlRfTk9ORSk7CiAKIAkvKiBzZXQgYWxsIHRoZSB2aXRhbCBzdHVmZiAqLwogCWNpcnJ1c2ZiX3NldF9mYmluZm8oaW5mbyk7CiAKLQlEUFJJTlRLKCJjaXJydXNmYjogKFJBTSBzdGFydCBzZXQgdG86IDB4JXApXG4iLCBpbmZvLT5zY3JlZW5fYmFzZSk7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICIoUkFNIHN0YXJ0IHNldCB0bzogMHglcClcbiIsIGluZm8tPnNjcmVlbl9iYXNlKTsKIAogCWVyciA9IGZiX2ZpbmRfbW9kZSgmaW5mby0+dmFyLCBpbmZvLCBtb2RlX29wdGlvbiwgTlVMTCwgMCwgTlVMTCwgOCk7CiAJaWYgKCFlcnIpIHsKLQkJRFBSSU5USygid3JvbmcgaW5pdGlhbCB2aWRlbyBtb2RlXG4iKTsKKwkJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJ3cm9uZyBpbml0aWFsIHZpZGVvIG1vZGVcbiIpOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9kZWFsbG9jX2NtYXA7CiAJfQogCiAJaW5mby0+dmFyLmFjdGl2YXRlID0gRkJfQUNUSVZBVEVfTk9XOwogCi0JZXJyID0gY2lycnVzZmJfZGVjb2RlX3ZhcigmaW5mby0+dmFyLCAmY2luZm8tPmN1cnJlbnRtb2RlLCBpbmZvKTsKKwllcnIgPSBjaXJydXNmYl9jaGVja192YXIoJmluZm8tPnZhciwgaW5mbyk7CiAJaWYgKGVyciA8IDApIHsKIAkJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCQlEUFJJTlRLKCJjaG9raW5nIG9uIGRlZmF1bHQgdmFyLi4uIHVtbSwgbm8gZ29vZC5cbiIpOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwKKwkJCSJjaG9raW5nIG9uIGRlZmF1bHQgdmFyLi4uIHVtbSwgbm8gZ29vZC5cbiIpOwogCQlnb3RvIGVycl9kZWFsbG9jX2NtYXA7CiAJfQogCiAJZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjaXJydXNmYjogY291bGQgbm90IHJlZ2lzdGVyICIKLQkJCSJmYiBkZXZpY2U7IGVyciA9ICVkIVxuIiwgZXJyKTsKKwkJZGV2X2VycihpbmZvLT5kZXZpY2UsCisJCQkiY291bGQgbm90IHJlZ2lzdGVyIGZiIGRldmljZTsgZXJyID0gJWQhXG4iLCBlcnIpOwogCQlnb3RvIGVycl9kZWFsbG9jX2NtYXA7CiAJfQogCi0JRFBSSU5USygiRVhJVCwgcmV0dXJuaW5nIDBcbiIpOwogCXJldHVybiAwOwogCiBlcnJfZGVhbGxvY19jbWFwOgogCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7Ci0JY2luZm8tPnVubWFwKGluZm8pOwotCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGNpcnJ1c2ZiX2NsZWFudXAoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNpcnJ1c2ZiX2luZm8gKmNpbmZvID0gaW5mby0+cGFyOwotCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCXN3aXRjaF9tb25pdG9yKGNpbmZvLCAwKTsKLQogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKLQlwcmludGsoIkZyYW1lYnVmZmVyIHVucmVnaXN0ZXJlZFxuIik7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJGcmFtZWJ1ZmZlciB1bnJlZ2lzdGVyZWRcbiIpOwogCWNpbmZvLT51bm1hcChpbmZvKTsKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwotCi0JRFBSSU5USygiRVhJVFxuIik7CiB9CiAKICNpZmRlZiBDT05GSUdfUENJCkBAIC0yMTg3LDcgKzIwOTgsNiBAQAogewogCXN0cnVjdCBjaXJydXNmYl9pbmZvICpjaW5mbzsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKLQllbnVtIGNpcnJ1c19ib2FyZCBidHlwZTsKIAl1bnNpZ25lZCBsb25nIGJvYXJkX2FkZHIsIGJvYXJkX3NpemU7CiAJaW50IHJldDsKIApAQCAtMjIwMSwxNSArMjExMSwxNyBAQAogCWlmICghaW5mbykgewogCQlwcmludGsoS0VSTl9FUlIgImNpcnJ1c2ZiOiBjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfZGlzYWJsZTsKKwkJZ290byBlcnJfb3V0OwogCX0KIAogCWNpbmZvID0gaW5mby0+cGFyOwotCWNpbmZvLT5idHlwZSA9IGJ0eXBlID0gKGVudW0gY2lycnVzX2JvYXJkKSBlbnQtPmRyaXZlcl9kYXRhOworCWNpbmZvLT5idHlwZSA9IChlbnVtIGNpcnJ1c19ib2FyZCkgZW50LT5kcml2ZXJfZGF0YTsKIAotCURQUklOVEsoIiBGb3VuZCBQQ0kgZGV2aWNlLCBiYXNlIGFkZHJlc3MgMCBpcyAweCV4LCBidHlwZSBzZXQgdG8gJWRcbiIsCi0JCXBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LCBidHlwZSk7Ci0JRFBSSU5USygiIGJhc2UgYWRkcmVzcyAxIGlzIDB4JXhcbiIsIHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0KTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwKKwkJIiBGb3VuZCBQQ0kgZGV2aWNlLCBiYXNlIGFkZHJlc3MgMCBpcyAweCVMeCwgYnR5cGUgc2V0IHRvICVkXG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKXBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LCAgY2luZm8tPmJ0eXBlKTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIiBiYXNlIGFkZHJlc3MgMSBpcyAweCVMeFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCk7CiAKIAlpZiAoaXNQUmVQKSB7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX0JBU0VfQUREUkVTU18wLCAweDAwMDAwMDAwKTsKQEAgLTIyMTksMzAgKzIxMzEsMzAgQEAKIAkvKiBQUmVQIGRpZXMgaWYgd2UgaW9yZW1hcCB0aGUgSU8gcmVnaXN0ZXJzLCBidXQgaXQgd29ya3Mgdy9vdXQuLi4gKi8KIAkJY2luZm8tPnJlZ2Jhc2UgPSAoY2hhciBfX2lvbWVtICopIGluZm8tPmZpeC5tbWlvX3N0YXJ0OwogCX0gZWxzZSB7Ci0JCURQUklOVEsoIkF0dGVtcHQgdG8gZ2V0IFBDSSBpbmZvIGZvciBDaXJydXMgR3JhcGhpY3MgQ2FyZFxuIik7CisJCWRldl9kYmcoaW5mby0+ZGV2aWNlLAorCQkJIkF0dGVtcHQgdG8gZ2V0IFBDSSBpbmZvIGZvciBDaXJydXMgR3JhcGhpY3MgQ2FyZFxuIik7CiAJCWdldF9wY2lfYWRkcnMocGRldiwgJmJvYXJkX2FkZHIsICZpbmZvLT5maXgubW1pb19zdGFydCk7CiAJCS8qIEZJWE1FOiB0aGlzIGZvcmNlcyBWR0EuICBhbHRlcm5hdGl2ZXM/ICovCiAJCWNpbmZvLT5yZWdiYXNlID0gTlVMTDsKKwkJY2luZm8tPmxhZ3VuYV9tbWlvID0gaW9yZW1hcChpbmZvLT5maXgubW1pb19zdGFydCwgMHgxMDAwKTsKIAl9CiAKLQlEUFJJTlRLKCJCb2FyZCBhZGRyZXNzOiAweCVseCwgcmVnaXN0ZXIgYWRkcmVzczogMHglbHhcbiIsCisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJCb2FyZCBhZGRyZXNzOiAweCVseCwgcmVnaXN0ZXIgYWRkcmVzczogMHglbHhcbiIsCiAJCWJvYXJkX2FkZHIsIGluZm8tPmZpeC5tbWlvX3N0YXJ0KTsKIAotCWJvYXJkX3NpemUgPSAoYnR5cGUgPT0gQlRfR0Q1NDgwKSA/Ci0JCTMyICogTUJfIDogY2lycnVzZmJfZ2V0X21lbXNpemUoY2luZm8tPnJlZ2Jhc2UpOworCWJvYXJkX3NpemUgPSAoY2luZm8tPmJ0eXBlID09IEJUX0dENTQ4MCkgPworCQkzMiAqIE1CXyA6IGNpcnJ1c2ZiX2dldF9tZW1zaXplKGluZm8sIGNpbmZvLT5yZWdiYXNlKTsKIAogCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgImNpcnJ1c2ZiIik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjaXJydXNmYjogY2Fubm90IHJlc2VydmUgcmVnaW9uIDB4JWx4LCAiCi0JCSAgICAgICAiYWJvcnRcbiIsCi0JCSAgICAgICBib2FyZF9hZGRyKTsKKwkJZGV2X2VycihpbmZvLT5kZXZpY2UsICJjYW5ub3QgcmVzZXJ2ZSByZWdpb24gMHglbHgsIGFib3J0XG4iLAorCQkJYm9hcmRfYWRkcik7CiAJCWdvdG8gZXJyX3JlbGVhc2VfZmI7CiAJfQogI2lmIDAgLyogaWYgdGhlIHN5c3RlbSBkaWRuJ3QgY2xhaW0gdGhpcyByZWdpb24sIHdlIHdvdWxkLi4uICovCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oMHhBMDAwMCwgNjU1MzUsICJjaXJydXNmYiIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2lycnVzZmI6IGNhbm5vdCByZXNlcnZlIHJlZ2lvbiAweCVseCwgYWJvcnRcbiIKLSwKLQkJICAgICAgIDB4QTAwMDBMKTsKKwkJZGV2X2VycihpbmZvLT5kZXZpY2UsICJjYW5ub3QgcmVzZXJ2ZSByZWdpb24gMHglbHgsIGFib3J0XG4iLAorCQkJMHhBMDAwMEwpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uczsKIAl9CkBAIC0yMjYwLDE2ICsyMTcyLDE3IEBACiAJaW5mby0+c2NyZWVuX3NpemUgPSBib2FyZF9zaXplOwogCWNpbmZvLT51bm1hcCA9IGNpcnJ1c2ZiX3BjaV91bm1hcDsKIAotCXByaW50ayhLRVJOX0lORk8gIlJBTSAoJWx1IGtCKSBhdCAweCVseCwgQ2lycnVzICIKLQkJCSJMb2dpYyBjaGlwc2V0IG9uIFBDSSBidXNcbiIsCi0JCQlpbmZvLT5zY3JlZW5fc2l6ZSA+PiAxMCwgYm9hcmRfYWRkcik7CisJZGV2X2luZm8oaW5mby0+ZGV2aWNlLAorCQkgIkNpcnJ1cyBMb2dpYyBjaGlwc2V0IG9uIFBDSSBidXMsIFJBTSAoJWx1IGtCKSBhdCAweCVseFxuIiwKKwkJIGluZm8tPnNjcmVlbl9zaXplID4+IDEwLCBib2FyZF9hZGRyKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKIAlyZXQgPSBjaXJydXNmYl9yZWdpc3RlcihpbmZvKTsKLQlpZiAocmV0KQotCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQlyZXR1cm4gcmV0OworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKIAorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKIGVycl9yZWxlYXNlX2xlZ2FjeToKIAlpZiAocmVsZWFzZV9pb19wb3J0cykKIAkJcmVsZWFzZV9yZWdpb24oMHgzQzAsIDMyKTsKQEAgLTIyNzksOCArMjE5Miw5IEBACiAjZW5kaWYKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogZXJyX3JlbGVhc2VfZmI6CisJaWYgKGNpbmZvLT5sYWd1bmFfbW1pbyAhPSBOVUxMKQorCQlpb3VubWFwKGNpbmZvLT5sYWd1bmFfbW1pbyk7CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKLWVycl9kaXNhYmxlOgogZXJyX291dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjI4OCwxMSArMjIwMiw4IEBACiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2lycnVzZmJfcGNpX3VucmVnaXN0ZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JRFBSSU5USygiRU5URVJcbiIpOwogCiAJY2lycnVzZmJfY2xlYW51cChpbmZvKTsKLQotCURQUklOVEsoIkVYSVRcbiIpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY2lycnVzZmJfcGNpX2RyaXZlciA9IHsKQEAgLTIzMjQsOCArMjIzNSw2IEBACiAJaWYgKGNpcnJ1c2ZiX3pvcnJvX3RhYmxlMltidHlwZV0uaWQyKQogCQl6MiA9IHpvcnJvX2ZpbmRfZGV2aWNlKGNpcnJ1c2ZiX3pvcnJvX3RhYmxlMltidHlwZV0uaWQyLCBOVUxMKTsKIAlzaXplID0gY2lycnVzZmJfem9ycm9fdGFibGUyW2J0eXBlXS5zaXplOwotCXByaW50ayhLRVJOX0lORk8gImNpcnJ1c2ZiOiAlcyBib2FyZCBkZXRlY3RlZDsgIiwKLQkgICAgICAgY2lycnVzZmJfYm9hcmRfaW5mb1tidHlwZV0ubmFtZSk7CiAKIAlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBjaXJydXNmYl9pbmZvKSwgJnotPmRldik7CiAJaWYgKCFpbmZvKSB7CkBAIC0yMzM0LDYgKzIyNDMsOSBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCisJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAiJXMgYm9hcmQgZGV0ZWN0ZWRcbiIsCisJCSBjaXJydXNmYl9ib2FyZF9pbmZvW2J0eXBlXS5uYW1lKTsKKwogCWNpbmZvID0gaW5mby0+cGFyOwogCWNpbmZvLT5idHlwZSA9IGJ0eXBlOwogCkBAIC0yMzQ1LDE5ICsyMjU3LDE2IEBACiAJaW5mby0+c2NyZWVuX3NpemUgPSBzaXplOwogCiAJaWYgKCF6b3Jyb19yZXF1ZXN0X2RldmljZSh6LCAiY2lycnVzZmIiKSkgewotCQlwcmludGsoS0VSTl9FUlIgImNpcnJ1c2ZiOiBjYW5ub3QgcmVzZXJ2ZSByZWdpb24gMHglbHgsICIKLQkJICAgICAgICJhYm9ydFxuIiwKLQkJICAgICAgIGJvYXJkX2FkZHIpOworCQlkZXZfZXJyKGluZm8tPmRldmljZSwgImNhbm5vdCByZXNlcnZlIHJlZ2lvbiAweCVseCwgYWJvcnRcbiIsCisJCQlib2FyZF9hZGRyKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGVycl9yZWxlYXNlX2ZiOwogCX0KIAotCXByaW50aygiIFJBTSAoJWx1IE1CKSBhdCAkJWx4LCAiLCBib2FyZF9zaXplIC8gTUJfLCBib2FyZF9hZGRyKTsKLQogCXJldCA9IC1FSU87CiAKIAlpZiAoYnR5cGUgPT0gQlRfUElDQVNTTzQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiIFJFRyBhdCAkJWx4XG4iLCBib2FyZF9hZGRyICsgMHg2MDAwMDApOworCQlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsICIgUkVHIGF0ICQlbHhcbiIsIGJvYXJkX2FkZHIgKyAweDYwMDAwMCk7CiAKIAkJLyogVG8gYmUgcHJlY2lzZSwgZm9yIHRoZSBQNCB0aGlzIGlzIG5vdCB0aGUgKi8KIAkJLyogYmVnaW4gb2YgdGhlIGJvYXJkLCBidXQgdGhlIGJlZ2luIG9mIFJBTS4gKi8KQEAgLTIzNjcsNyArMjI3Niw3IEBACiAJCWlmICghY2luZm8tPnJlZ2Jhc2UpCiAJCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAotCQlEUFJJTlRLKCJjaXJydXNmYjogVmlydHVhbCBhZGRyZXNzIGZvciBib2FyZCBzZXQgdG86ICQlcFxuIiwKKwkJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJWaXJ0dWFsIGFkZHJlc3MgZm9yIGJvYXJkIHNldCB0bzogJCVwXG4iLAogCQkJY2luZm8tPnJlZ2Jhc2UpOwogCQljaW5mby0+cmVnYmFzZSArPSAweDYwMDAwMDsKIAkJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSBib2FyZF9hZGRyICsgMHg2MDAwMDA7CkBAIC0yMzc3LDggKzIyODYsOCBAQAogCQlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKQogCQkJZ290byBlcnJfdW5tYXBfcmVnYmFzZTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPICIgUkVHIGF0ICQlbHhcbiIsCi0JCQkodW5zaWduZWQgbG9uZykgejItPnJlc291cmNlLnN0YXJ0KTsKKwkJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAiIFJFRyBhdCAkJWx4XG4iLAorCQkJICh1bnNpZ25lZCBsb25nKSB6Mi0+cmVzb3VyY2Uuc3RhcnQpOwogCiAJCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gYm9hcmRfYWRkcjsKIAkJaWYgKGJvYXJkX2FkZHIgPiAweDAxMDAwMDAwKQpAQCAtMjM5MiwyNyArMjMwMSwzMiBAQAogCQljaW5mby0+cmVnYmFzZSA9IChjYWRkcl90KSBaVFdPX1ZBRERSKHoyLT5yZXNvdXJjZS5zdGFydCk7CiAJCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gejItPnJlc291cmNlLnN0YXJ0OwogCi0JCURQUklOVEsoImNpcnJ1c2ZiOiBWaXJ0dWFsIGFkZHJlc3MgZm9yIGJvYXJkIHNldCB0bzogJCVwXG4iLAorCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIlZpcnR1YWwgYWRkcmVzcyBmb3IgYm9hcmQgc2V0IHRvOiAkJXBcbiIsCiAJCQljaW5mby0+cmVnYmFzZSk7CiAJfQogCWNpbmZvLT51bm1hcCA9IGNpcnJ1c2ZiX3pvcnJvX3VubWFwOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiQ2lycnVzIExvZ2ljIGNoaXBzZXQgb24gWm9ycm8gYnVzXG4iKTsKKwlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsCisJCSAiQ2lycnVzIExvZ2ljIGNoaXBzZXQgb24gWm9ycm8gYnVzLCBSQU0gKCVsdSBNQikgYXQgJCVseFxuIiwKKwkJIGJvYXJkX3NpemUgLyBNQl8sIGJvYXJkX2FkZHIpOworCiAJem9ycm9fc2V0X2RydmRhdGEoeiwgaW5mbyk7CiAKKwkvKiBNQ0xLIHNlbGVjdCBldGMuICovCisJaWYgKGNpcnJ1c2ZiX2JvYXJkX2luZm9bYnR5cGVdLmluaXRfc3IxZikKKwkJdmdhX3dzZXEoY2luZm8tPnJlZ2Jhc2UsIENMX1NFUVIxRiwKKwkJCSBjaXJydXNmYl9ib2FyZF9pbmZvW2J0eXBlXS5zcjFmKTsKKwogCXJldCA9IGNpcnJ1c2ZiX3JlZ2lzdGVyKGluZm8pOwotCWlmIChyZXQpIHsKLQkJaWYgKGJ0eXBlID09IEJUX1BJQ0FTU080KSB7Ci0JCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQkJCWlvdW5tYXAoY2luZm8tPnJlZ2Jhc2UgLSAweDYwMDAwMCk7Ci0JCX0gZWxzZSBpZiAoYm9hcmRfYWRkciA+IDB4MDEwMDAwMDApCi0JCQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQl9Ci0JcmV0dXJuIHJldDsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYnR5cGUgPT0gQlRfUElDQVNTTzQgfHwgYm9hcmRfYWRkciA+IDB4MDEwMDAwMDApCisJCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwogCiBlcnJfdW5tYXBfcmVnYmFzZToKLQkvKiBQYXJlbnRhbCBhZHZpc29yeTogZXhwbGljaXQgaGFjayAqLwotCWlvdW5tYXAoY2luZm8tPnJlZ2Jhc2UgLSAweDYwMDAwMCk7CisJaWYgKGJ0eXBlID09IEJUX1BJQ0FTU080KQorCQlpb3VubWFwKGNpbmZvLT5yZWdiYXNlIC0gMHg2MDAwMDApOwogZXJyX3JlbGVhc2VfcmVnaW9uOgogCXJlbGVhc2VfcmVnaW9uKGJvYXJkX2FkZHIsIGJvYXJkX3NpemUpOwogZXJyX3JlbGVhc2VfZmI6CkBAIC0yNDI0LDExICsyMzM4LDggQEAKIHZvaWQgX19kZXZleGl0IGNpcnJ1c2ZiX3pvcnJvX3VucmVnaXN0ZXIoc3RydWN0IHpvcnJvX2RldiAqeikKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHpvcnJvX2dldF9kcnZkYXRhKHopOwotCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCWNpcnJ1c2ZiX2NsZWFudXAoaW5mbyk7Ci0KLQlEUFJJTlRLKCJFWElUXG4iKTsKIH0KIAogc3RhdGljIHN0cnVjdCB6b3Jyb19kcml2ZXIgY2lycnVzZmJfem9ycm9fZHJpdmVyID0gewpAQCAtMjQzOSw2ICsyMzUwLDM3IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19aT1JSTyAqLwogCisjaWZuZGVmIE1PRFVMRQorc3RhdGljIGludCBfX2luaXQgY2lycnVzZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKK3sKKwljaGFyICp0aGlzX29wdDsKKworCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCisJCXJldHVybiAwOworCisJd2hpbGUgKCh0aGlzX29wdCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoISp0aGlzX29wdCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghc3RyY21wKHRoaXNfb3B0LCAibm9hY2NlbCIpKQorCQkJbm9hY2NlbCA9IDE7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAibW9kZToiLCA1KSkKKwkJCW1vZGVfb3B0aW9uID0gdGhpc19vcHQgKyA1OworCQllbHNlCisJCQltb2RlX29wdGlvbiA9IHRoaXNfb3B0OworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAgTW9kdWxhcml6YXRpb24KKyAgICAgKi8KKworTU9EVUxFX0FVVEhPUigiQ29weXJpZ2h0IDE5OTksMjAwMCBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFjY2VsZXJhdGVkIEZCRGV2IGRyaXZlciBmb3IgQ2lycnVzIExvZ2ljIGNoaXBzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKIHN0YXRpYyBpbnQgX19pbml0IGNpcnJ1c2ZiX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwpAQCAtMjQ2MCw0MCArMjQwMiw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0jaWZuZGVmIE1PRFVMRQotc3RhdGljIGludCBfX2luaXQgY2lycnVzZmJfc2V0dXAoY2hhciAqb3B0aW9ucykgewotCWNoYXIgKnRoaXNfb3B0OwotCi0JRFBSSU5USygiRU5URVJcbiIpOwotCi0JaWYgKCFvcHRpb25zIHx8ICEqb3B0aW9ucykKLQkJcmV0dXJuIDA7Ci0KLQl3aGlsZSAoKHRoaXNfb3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7Ci0JCWlmICghKnRoaXNfb3B0KQotCQkJY29udGludWU7Ci0KLQkJRFBSSU5USygiY2lycnVzZmJfc2V0dXA6IG9wdGlvbiAnJXMnXG4iLCB0aGlzX29wdCk7Ci0KLQkJaWYgKCFzdHJjbXAodGhpc19vcHQsICJub2FjY2VsIikpCi0JCQlub2FjY2VsID0gMTsKLQkJZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJtb2RlOiIsIDUpKQotCQkJbW9kZV9vcHRpb24gPSB0aGlzX29wdCArIDU7Ci0JCWVsc2UKLQkJCW1vZGVfb3B0aW9uID0gdGhpc19vcHQ7Ci0JfQotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLSAgICAvKgotICAgICAqICBNb2R1bGFyaXphdGlvbgotICAgICAqLwotCi1NT0RVTEVfQVVUSE9SKCJDb3B5cmlnaHQgMTk5OSwyMDAwIEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQWNjZWxlcmF0ZWQgRkJEZXYgZHJpdmVyIGZvciBDaXJydXMgTG9naWMgY2hpcHMiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQogc3RhdGljIHZvaWQgX19leGl0IGNpcnJ1c2ZiX2V4aXQodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfUENJCkBAIC0yNTYwLDggKzI0NjgsNiBAQAogewogCWFzc2VydChjaW5mbyAhPSBOVUxMKTsKIAotCURQUklOVEsoIkVOVEVSXG4iKTsKLQogCWlmICh2Z2FfcmNydChjaW5mby0+cmVnYmFzZSwgQ0xfQ1JUMjQpICYgMHg4MCkgewogCQkvKiBpZiB3ZSdyZSBqdXN0IGluICJ3cml0ZSB2YWx1ZSIgbW9kZSwgd3JpdGUgYmFjayB0aGUgKi8KIAkJLyogc2FtZSB2YWx1ZSBhcyBiZWZvcmUgdG8gbm90IG1vZGlmeSBhbnl0aGluZyAqLwpAQCAtMjU3NCw4ICsyNDgwLDYgQEAKIAogCS8qIGR1bW15IHdyaXRlIG9uIFJlZzAgdG8gYmUgb24gIndyaXRlIGluZGV4IiBtb2RlIG5leHQgdGltZSAqLwogCXZnYV93KGNpbmZvLT5yZWdiYXNlLCBWR0FfQVRUX0lXLCAweDAwKTsKLQotCURQUklOVEsoIkVYSVRcbiIpOwogfQogCiAvKioqIFdIRFIoKSAtIHdyaXRlIGludG8gdGhlIEhpZGRlbiBEQUMgcmVnaXN0ZXIgKioqLwpAQCAtMjU4OCw2ICsyNDkyLDggQEAKIHsKIAl1bnNpZ25lZCBjaGFyIGR1bW15OwogCisJaWYgKGlzX2xhZ3VuYShjaW5mbykpCisJCXJldHVybjsKIAlpZiAoY2luZm8tPmJ0eXBlID09IEJUX1BJQ0FTU08pIHsKIAkJLyogS2xhdXMnIGhpbnQgZm9yIGNvcnJlY3QgYWNjZXNzIHRvIEhEUiBvbiBzb21lIGJvYXJkcyAqLwogCQkvKiBmaXJzdCB3cml0ZSAwIHRvIHBpeGVsIG1hc2sgKDNjNikgKi8KQEAgLTI2NTUsNyArMjU2MSw4IEBACiAJdmdhX3coY2luZm8tPnJlZ2Jhc2UsIFZHQV9QRUxfSVcsIHJlZ251bSk7CiAKIAlpZiAoY2luZm8tPmJ0eXBlID09IEJUX1BJQ0FTU08gfHwgY2luZm8tPmJ0eXBlID09IEJUX1BJQ0FTU080IHx8Ci0JICAgIGNpbmZvLT5idHlwZSA9PSBCVF9BTFBJTkUgfHwgY2luZm8tPmJ0eXBlID09IEJUX0dENTQ4MCkgeworCSAgICBjaW5mby0+YnR5cGUgPT0gQlRfQUxQSU5FIHx8IGNpbmZvLT5idHlwZSA9PSBCVF9HRDU0ODAgfHwKKwkgICAgY2luZm8tPmJ0eXBlID09IEJUX1NENjQgfHwgaXNfbGFndW5hKGNpbmZvKSkgewogCQkvKiBidXQgREFDIGRhdGEgcmVnaXN0ZXIgSVMsIGF0IGxlYXN0IGZvciBQaWNhc3NvIElJICovCiAJCWlmIChjaW5mby0+YnR5cGUgPT0gQlRfUElDQVNTTykKIAkJCWRhdGEgKz0gMHhmZmY7CkBAIC0yNzAyLDkgKzI2MDksOCBAQAogLyogRklYTUU6IHVzZSBpbnRlcnJ1cHRzIGluc3RlYWQgKi8KIHN0YXRpYyB2b2lkIGNpcnJ1c2ZiX1dhaXRCTFQodTggX19pb21lbSAqcmVnYmFzZSkKIHsKLQkvKiBub3cgYnVzeS13YWl0IHVudGlsIHdlJ3JlIGRvbmUgKi8KIAl3aGlsZSAodmdhX3JnZngocmVnYmFzZSwgQ0xfR1IzMSkgJiAweDA4KQotCQkvKiBkbyBub3RoaW5nICovIDsKKwkJY3B1X3JlbGF4KCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNzEzLDYwICsyNjE5LDEyIEBACiAJcGVyZm9ybSBhY2NlbGVyYXRlZCAic2Nyb2xsaW5nIgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGNpcnJ1c2ZiX0JpdEJMVCh1OCBfX2lvbWVtICpyZWdiYXNlLCBpbnQgYml0c19wZXJfcGl4ZWwsCi0JCQkgICAgdV9zaG9ydCBjdXJ4LCB1X3Nob3J0IGN1cnksCi0JCQkgICAgdV9zaG9ydCBkZXN0eCwgdV9zaG9ydCBkZXN0eSwKLQkJCSAgICB1X3Nob3J0IHdpZHRoLCB1X3Nob3J0IGhlaWdodCwKLQkJCSAgICB1X3Nob3J0IGxpbmVfbGVuZ3RoKQorc3RhdGljIHZvaWQgY2lycnVzZmJfc2V0X2JsaXR0ZXIodTggX19pb21lbSAqcmVnYmFzZSwKKwkJCSAgICB1X3Nob3J0IG53aWR0aCwgdV9zaG9ydCBuaGVpZ2h0LAorCQkJICAgIHVfbG9uZyBuc3JjLCB1X2xvbmcgbmRlc3QsCisJCQkgICAgdV9zaG9ydCBibHRtb2RlLCB1X3Nob3J0IGxpbmVfbGVuZ3RoKQorCiB7Ci0JdV9zaG9ydCBud2lkdGgsIG5oZWlnaHQ7Ci0JdV9sb25nIG5zcmMsIG5kZXN0OwotCXVfY2hhciBibHRtb2RlOwotCi0JRFBSSU5USygiRU5URVJcbiIpOwotCi0JbndpZHRoID0gd2lkdGggLSAxOwotCW5oZWlnaHQgPSBoZWlnaHQgLSAxOwotCi0JYmx0bW9kZSA9IDB4MDA7Ci0JLyogaWYgc291cmNlIGFkciA8IGRlc3QgYWRkciwgZG8gdGhlIEJsdCBiYWNrd2FyZHMgKi8KLQlpZiAoY3VyeSA8PSBkZXN0eSkgewotCQlpZiAoY3VyeSA9PSBkZXN0eSkgewotCQkJLyogaWYgc3JjIGFuZCBkZXN0IGFyZSBvbiB0aGUgc2FtZSBsaW5lLCBjaGVjayB4ICovCi0JCQlpZiAoY3VyeCA8IGRlc3R4KQotCQkJCWJsdG1vZGUgfD0gMHgwMTsKLQkJfSBlbHNlCi0JCQlibHRtb2RlIHw9IDB4MDE7Ci0JfQotCWlmICghYmx0bW9kZSkgewotCQkvKiBzdGFuZGFyZCBjYXNlOiBmb3J3YXJkIGJsaXR0aW5nICovCi0JCW5zcmMgPSAoY3VyeSAqIGxpbmVfbGVuZ3RoKSArIGN1cng7Ci0JCW5kZXN0ID0gKGRlc3R5ICogbGluZV9sZW5ndGgpICsgZGVzdHg7Ci0JfSBlbHNlIHsKLQkJLyogdGhpcyBtZWFucyBzdGFydCBhZGRyZXNzZXMgYXJlIGF0IHRoZSBlbmQsCi0JCSAqIGNvdW50aW5nIGJhY2t3YXJkcwotCQkgKi8KLQkJbnNyYyA9IGN1cnkgKiBsaW5lX2xlbmd0aCArIGN1cnggKwotCQkJbmhlaWdodCAqIGxpbmVfbGVuZ3RoICsgbndpZHRoOwotCQluZGVzdCA9IGRlc3R5ICogbGluZV9sZW5ndGggKyBkZXN0eCArCi0JCQluaGVpZ2h0ICogbGluZV9sZW5ndGggKyBud2lkdGg7Ci0JfQotCi0JLyoKLQkgICBydW4tZG93biBvZiByZWdpc3RlcnMgdG8gYmUgcHJvZ3JhbW1lZDoKLQkgICBkZXN0aW5hdGlvbiBwaXRjaAotCSAgIHNvdXJjZSBwaXRjaAotCSAgIEJMVCB3aWR0aC9oZWlnaHQKLQkgICBzb3VyY2Ugc3RhcnQKLQkgICBkZXN0aW5hdGlvbiBzdGFydAotCSAgIEJMVCBtb2RlCi0JICAgQkxUIFJPUAotCSAgIFZHQV9HRlhfU1JfVkFMVUUgLyBWR0FfR0ZYX1NSX0VOQUJMRTogImZpbGwgY29sb3IiCi0JICAgc3RhcnQvc3RvcAotCSAqLwotCi0JY2lycnVzZmJfV2FpdEJMVChyZWdiYXNlKTsKLQogCS8qIHBpdGNoOiBzZXQgdG8gbGluZV9sZW5ndGggKi8KIAkvKiBkZXN0IHBpdGNoIGxvdyAqLwogCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMjQsIGxpbmVfbGVuZ3RoICYgMHhmZik7CkBAIC0yODEzLDggKzI2NzEsNTAgQEAKIAogCS8qIGFuZCBmaW5hbGx5OiBHTyEgKi8KIAl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjMxLCAweDAyKTsJLyogQkxUIFN0YXJ0L3N0YXR1cyAqLworfQogCi0JRFBSSU5USygiRVhJVFxuIik7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCWNpcnJ1c2ZiX0JpdEJMVCgpCisKKwlwZXJmb3JtIGFjY2VsZXJhdGVkICJzY3JvbGxpbmciCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgY2lycnVzZmJfQml0QkxUKHU4IF9faW9tZW0gKnJlZ2Jhc2UsIGludCBiaXRzX3Blcl9waXhlbCwKKwkJCSAgICB1X3Nob3J0IGN1cngsIHVfc2hvcnQgY3VyeSwKKwkJCSAgICB1X3Nob3J0IGRlc3R4LCB1X3Nob3J0IGRlc3R5LAorCQkJICAgIHVfc2hvcnQgd2lkdGgsIHVfc2hvcnQgaGVpZ2h0LAorCQkJICAgIHVfc2hvcnQgbGluZV9sZW5ndGgpCit7CisJdV9zaG9ydCBud2lkdGggPSB3aWR0aCAtIDE7CisJdV9zaG9ydCBuaGVpZ2h0ID0gaGVpZ2h0IC0gMTsKKwl1X2xvbmcgbnNyYywgbmRlc3Q7CisJdV9jaGFyIGJsdG1vZGU7CisKKwlibHRtb2RlID0gMHgwMDsKKwkvKiBpZiBzb3VyY2UgYWRyIDwgZGVzdCBhZGRyLCBkbyB0aGUgQmx0IGJhY2t3YXJkcyAqLworCWlmIChjdXJ5IDw9IGRlc3R5KSB7CisJCWlmIChjdXJ5ID09IGRlc3R5KSB7CisJCQkvKiBpZiBzcmMgYW5kIGRlc3QgYXJlIG9uIHRoZSBzYW1lIGxpbmUsIGNoZWNrIHggKi8KKwkJCWlmIChjdXJ4IDwgZGVzdHgpCisJCQkJYmx0bW9kZSB8PSAweDAxOworCQl9IGVsc2UKKwkJCWJsdG1vZGUgfD0gMHgwMTsKKwl9CisJLyogc3RhbmRhcmQgY2FzZTogZm9yd2FyZCBibGl0dGluZyAqLworCW5zcmMgPSAoY3VyeSAqIGxpbmVfbGVuZ3RoKSArIGN1cng7CisJbmRlc3QgPSAoZGVzdHkgKiBsaW5lX2xlbmd0aCkgKyBkZXN0eDsKKwlpZiAoYmx0bW9kZSkgeworCQkvKiB0aGlzIG1lYW5zIHN0YXJ0IGFkZHJlc3NlcyBhcmUgYXQgdGhlIGVuZCwKKwkJICogY291bnRpbmcgYmFja3dhcmRzCisJCSAqLworCQluc3JjICs9IG5oZWlnaHQgKiBsaW5lX2xlbmd0aCArIG53aWR0aDsKKwkJbmRlc3QgKz0gbmhlaWdodCAqIGxpbmVfbGVuZ3RoICsgbndpZHRoOworCX0KKworCWNpcnJ1c2ZiX1dhaXRCTFQocmVnYmFzZSk7CisKKwljaXJydXNmYl9zZXRfYmxpdHRlcihyZWdiYXNlLCBud2lkdGgsIG5oZWlnaHQsCisJCQkgICAgbnNyYywgbmRlc3QsIGJsdG1vZGUsIGxpbmVfbGVuZ3RoKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI4MjUsNzkgKzI3MjUsMzcgQEAKIAogc3RhdGljIHZvaWQgY2lycnVzZmJfUmVjdEZpbGwodTggX19pb21lbSAqcmVnYmFzZSwgaW50IGJpdHNfcGVyX3BpeGVsLAogCQkgICAgIHVfc2hvcnQgeCwgdV9zaG9ydCB5LCB1X3Nob3J0IHdpZHRoLCB1X3Nob3J0IGhlaWdodCwKLQkJICAgICB1X2NoYXIgY29sb3IsIHVfc2hvcnQgbGluZV9sZW5ndGgpCisJCSAgICAgdTMyIGZnX2NvbG9yLCB1MzIgYmdfY29sb3IsIHVfc2hvcnQgbGluZV9sZW5ndGgsCisJCSAgICAgdV9jaGFyIGJsaXRtb2RlKQogewotCXVfc2hvcnQgbndpZHRoLCBuaGVpZ2h0OwotCXVfbG9uZyBuZGVzdDsKKwl1X2xvbmcgbmRlc3QgPSAoeSAqIGxpbmVfbGVuZ3RoKSArIHg7CiAJdV9jaGFyIG9wOwogCi0JRFBSSU5USygiRU5URVJcbiIpOwotCi0JbndpZHRoID0gd2lkdGggLSAxOwotCW5oZWlnaHQgPSBoZWlnaHQgLSAxOwotCi0JbmRlc3QgPSAoeSAqIGxpbmVfbGVuZ3RoKSArIHg7Ci0KIAljaXJydXNmYl9XYWl0QkxUKHJlZ2Jhc2UpOwogCi0JLyogcGl0Y2g6IHNldCB0byBsaW5lX2xlbmd0aCAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMjQsIGxpbmVfbGVuZ3RoICYgMHhmZik7CS8qIGRlc3QgcGl0Y2ggbG93ICovCi0JdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IyNSwgbGluZV9sZW5ndGggPj4gOCk7CS8qIGRlc3QgcGl0Y2ggaGkgKi8KLQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjI2LCBsaW5lX2xlbmd0aCAmIDB4ZmYpOwkvKiBzb3VyY2UgcGl0Y2ggbG93ICovCi0JdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IyNywgbGluZV9sZW5ndGggPj4gOCk7CS8qIHNvdXJjZSBwaXRjaCBoaSAqLwotCi0JLyogQkxUIHdpZHRoOiBhY3R1YWwgbnVtYmVyIG9mIHBpeGVscyAtIDEgKi8KLQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjIwLCBud2lkdGggJiAweGZmKTsJLyogQkxUIHdpZHRoIGxvdyAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMjEsIG53aWR0aCA+PiA4KTsJLyogQkxUIHdpZHRoIGhpICovCi0KLQkvKiBCTFQgaGVpZ2h0OiBhY3R1YWwgbnVtYmVyIG9mIGxpbmVzIC0xICovCi0JdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IyMiwgbmhlaWdodCAmIDB4ZmYpOwkvKiBCTFQgaGVpZ2h0IGxvdyAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMjMsIG5oZWlnaHQgPj4gOCk7CS8qIEJMVCB3aWR0aCBoaSAqLwotCi0JLyogQkxUIGRlc3RpbmF0aW9uICovCi0JLyogQkxUIGRlc3QgbG93ICovCi0JdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IyOCwgKHVfY2hhcikgKG5kZXN0ICYgMHhmZikpOwotCS8qIEJMVCBkZXN0IG1pZCAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMjksICh1X2NoYXIpIChuZGVzdCA+PiA4KSk7Ci0JLyogQkxUIGRlc3QgaGkgKi8KLQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjJBLCAodV9jaGFyKSAobmRlc3QgPj4gMTYpKTsKLQotCS8qIEJMVCBzb3VyY2U6IHNldCB0byAwIChpcyBhIGR1bW15IGhlcmUgYW55d2F5KSAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMkMsIDB4MDApOwkvKiBCTFQgc3JjIGxvdyAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMkQsIDB4MDApOwkvKiBCTFQgc3JjIG1pZCAqLwotCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMkUsIDB4MDApOwkvKiBCTFQgc3JjIGhpICovCi0KIAkvKiBUaGlzIGlzIGEgQ29sb3JFeHBhbmQgQmx0LCB1c2luZyB0aGUgKi8KIAkvKiBzYW1lIGNvbG9yIGZvciBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kICovCi0JdmdhX3dnZngocmVnYmFzZSwgVkdBX0dGWF9TUl9WQUxVRSwgY29sb3IpOwkvKiBmb3JlZ3JvdW5kIGNvbG9yICovCi0JdmdhX3dnZngocmVnYmFzZSwgVkdBX0dGWF9TUl9FTkFCTEUsIGNvbG9yKTsJLyogYmFja2dyb3VuZCBjb2xvciAqLworCXZnYV93Z2Z4KHJlZ2Jhc2UsIFZHQV9HRlhfU1JfVkFMVUUsIGJnX2NvbG9yKTsKKwl2Z2Ffd2dmeChyZWdiYXNlLCBWR0FfR0ZYX1NSX0VOQUJMRSwgZmdfY29sb3IpOwogCi0Jb3AgPSAweGMwOwotCWlmIChiaXRzX3Blcl9waXhlbCA9PSAxNikgewotCQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjEwLCBjb2xvcik7CS8qIGZvcmVncm91bmQgY29sb3IgKi8KLQkJdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IxMSwgY29sb3IpOwkvKiBiYWNrZ3JvdW5kIGNvbG9yICovCi0JCW9wID0gMHg1MDsKLQkJb3AgPSAweGQwOwotCX0gZWxzZSBpZiAoYml0c19wZXJfcGl4ZWwgPT0gMzIpIHsKLQkJdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IxMCwgY29sb3IpOwkvKiBmb3JlZ3JvdW5kIGNvbG9yICovCi0JCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMTEsIGNvbG9yKTsJLyogYmFja2dyb3VuZCBjb2xvciAqLwotCQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjEyLCBjb2xvcik7CS8qIGZvcmVncm91bmQgY29sb3IgKi8KLQkJdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IxMywgY29sb3IpOwkvKiBiYWNrZ3JvdW5kIGNvbG9yICovCi0JCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMTQsIDApOwkvKiBmb3JlZ3JvdW5kIGNvbG9yICovCi0JCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMTUsIDApOwkvKiBiYWNrZ3JvdW5kIGNvbG9yICovCi0JCW9wID0gMHg1MDsKLQkJb3AgPSAweGYwOworCW9wID0gMHg4MDsKKwlpZiAoYml0c19wZXJfcGl4ZWwgPj0gMTYpIHsKKwkJdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IxMCwgYmdfY29sb3IgPj4gOCk7CisJCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMTEsIGZnX2NvbG9yID4+IDgpOworCQlvcCA9IDB4OTA7CiAJfQotCS8qIEJMVCBtb2RlOiBjb2xvciBleHBhbmQsIEVuYWJsZSA4eDggY29weSAoZmFzdGVyPykgKi8KLQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjMwLCBvcCk7CS8qIEJMVCBtb2RlICovCi0KLQkvKiBCTFQgUk9QOiBTcmNDb3B5ICovCi0JdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IzMiwgMHgwZCk7CS8qIEJMVCBST1AgKi8KLQotCS8qIGFuZCBmaW5hbGx5OiBHTyEgKi8KLQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjMxLCAweDAyKTsJLyogQkxUIFN0YXJ0L3N0YXR1cyAqLwotCi0JRFBSSU5USygiRVhJVFxuIik7CisJaWYgKGJpdHNfcGVyX3BpeGVsID49IDI0KSB7CisJCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMTIsIGJnX2NvbG9yID4+IDE2KTsKKwkJdmdhX3dnZngocmVnYmFzZSwgQ0xfR1IxMywgZmdfY29sb3IgPj4gMTYpOworCQlvcCA9IDB4YTA7CisJfQorCWlmIChiaXRzX3Blcl9waXhlbCA9PSAzMikgeworCQl2Z2Ffd2dmeChyZWdiYXNlLCBDTF9HUjE0LCBiZ19jb2xvciA+PiAyNCk7CisJCXZnYV93Z2Z4KHJlZ2Jhc2UsIENMX0dSMTUsIGZnX2NvbG9yID4+IDI0KTsKKwkJb3AgPSAweGIwOworCX0KKwljaXJydXNmYl9zZXRfYmxpdHRlcihyZWdiYXNlLCB3aWR0aCAtIDEsIGhlaWdodCAtIDEsCisJCQkgICAgMCwgbmRlc3QsIG9wIHwgYmxpdG1vZGUsIGxpbmVfbGVuZ3RoKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yOTE3LDggKzI3NzUsNiBAQAogCSpkZW4gPSAwOwogCSpkaXYgPSAwOwogCi0JRFBSSU5USygiRU5URVJcbiIpOwotCiAJaWYgKGZyZXEgPCA4MDAwKQogCQlmcmVxID0gODAwMDsKIApAQCAtMjk2MCwxMiArMjgxNiw2IEBACiAJCQl9CiAJCX0KIAl9Ci0KLQlEUFJJTlRLKCJCZXN0IHBvc3NpYmxlIHZhbHVlcyBmb3IgZ2l2ZW4gZnJlcXVlbmN5OlxuIik7Ci0JRFBSSU5USygiCWZyZXE6ICVsZCBrSHogIG5vbTogJWQgIGRlbjogJWQgIGRpdjogJWRcbiIsCi0JCWZyZXEsICpub20sICpkZW4sICpkaXYpOwotCi0JRFBSSU5USygiRVhJVFxuIik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI5NzgsMzIgKzI4MjgsNiBAQAogI2lmZGVmIENJUlJVU0ZCX0RFQlVHCiAKIC8qKgotICogY2lycnVzZmJfZGJnX3ByaW50X2J5dGUKLSAqIEBuYW1lOiBuYW1lIGFzc29jaWF0ZWQgd2l0aCBieXRlIHZhbHVlIHRvIGJlIGRpc3BsYXllZAotICogQHZhbDogYnl0ZSB2YWx1ZSB0byBiZSBkaXNwbGF5ZWQKLSAqCi0gKiBERVNDUklQVElPTjoKLSAqIERpc3BsYXkgYW4gaW5kZW50ZWQgc3RyaW5nLCBhbG9uZyB3aXRoIGEgaGV4aWRlY2ltYWwgYnl0ZSB2YWx1ZSwgYW5kCi0gKiBpdHMgZGVjb2RlZCBiaXRzLiAgQml0cyA3IHRocm91Z2ggMCBhcmUgbGlzdGVkIGluIGxlZnQtdG8tcmlnaHQKLSAqIG9yZGVyLgotICovCi0KLXN0YXRpYwotdm9pZCBjaXJydXNmYl9kYmdfcHJpbnRfYnl0ZShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyIHZhbCkKLXsKLQlEUFJJTlRLKCIlOHMgPSAweCUwMlggKGJpdHMgNy0wOiAlYyVjJWMlYyVjJWMlYyVjKVxuIiwKLQkJbmFtZSwgdmFsLAotCQl2YWwgJiAweDgwID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDQwID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDIwID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDEwID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDA4ID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDA0ID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDAyID8gJzEnIDogJzAnLAotCQl2YWwgJiAweDAxID8gJzEnIDogJzAnKTsKLX0KLQotLyoqCiAgKiBjaXJydXNmYl9kYmdfcHJpbnRfcmVncwogICogQGJhc2U6IElmIHVzaW5nIG5ld21taW8sIHRoZSBuZXdtbWlvIGJhc2UgYWRkcmVzcywgb3RoZXJ3aXNlICVOVUxMCiAgKiBAcmVnX2NsYXNzOiB0eXBlIG9mIHJlZ2lzdGVycyB0byByZWFkOiAlQ1JULCBvciAlU0VRCkBAIC0zMDE0LDkgKzI4MzgsOSBAQAogICogdXNlZCBhdCB0aGUgZ2l2ZW4gQGJhc2UgYWRkcmVzcyB0byBxdWVyeSB0aGUgaW5mb3JtYXRpb24uCiAgKi8KIAotc3RhdGljCi12b2lkIGNpcnJ1c2ZiX2RiZ19wcmludF9yZWdzKGNhZGRyX3QgcmVnYmFzZSwKLQkJCSAgICAgZW51bSBjaXJydXNmYl9kYmdfcmVnX2NsYXNzIHJlZ19jbGFzcywgLi4uKQorc3RhdGljIHZvaWQgY2lycnVzZmJfZGJnX3ByaW50X3JlZ3Moc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJICAgIGNhZGRyX3QgcmVnYmFzZSwKKwkJCQkgICAgZW51bSBjaXJydXNmYl9kYmdfcmVnX2NsYXNzIHJlZ19jbGFzcywgLi4uKQogewogCXZhX2xpc3QgbGlzdDsKIAl1bnNpZ25lZCBjaGFyIHZhbCA9IDA7CkBAIC0zMDQyLDcgKzI4NjYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQljaXJydXNmYl9kYmdfcHJpbnRfYnl0ZShuYW1lLCB2YWwpOworCQlkZXZfZGJnKGluZm8tPmRldmljZSwgIiU4cyA9IDB4JTAyWFxuIiwgbmFtZSwgdmFsKTsKIAogCQluYW1lID0gdmFfYXJnKGxpc3QsIGNoYXIgKik7CiAJfQpAQCAtMzA1MSwxOCArMjg3NSw2IEBACiB9CiAKIC8qKgotICogY2lycnVzZmJfZHVtcAotICogQGNpcnJ1c2ZiaW5mbzoKLSAqCi0gKiBERVNDUklQVElPTjoKLSAqLwotCi1zdGF0aWMgdm9pZCBjaXJydXNmYl9kdW1wKHZvaWQpCi17Ci0JY2lycnVzZmJfZGJnX3JlZ19kdW1wKE5VTEwpOwotfQotCi0vKioKICAqIGNpcnJ1c2ZiX2RiZ19yZWdfZHVtcAogICogQGJhc2U6IElmIHVzaW5nIG5ld21taW8sIHRoZSBuZXdtbWlvIGJhc2UgYWRkcmVzcywgb3RoZXJ3aXNlICVOVUxMCiAgKgpAQCAtMzA3MiwxMiArMjg4NCwxMSBAQAogICogdXNlZCBhdCB0aGUgZ2l2ZW4gQGJhc2UgYWRkcmVzcyB0byBxdWVyeSB0aGUgaW5mb3JtYXRpb24uCiAgKi8KIAotc3RhdGljCi12b2lkIGNpcnJ1c2ZiX2RiZ19yZWdfZHVtcChjYWRkcl90IHJlZ2Jhc2UpCitzdGF0aWMgdm9pZCBjaXJydXNmYl9kYmdfcmVnX2R1bXAoc3RydWN0IGZiX2luZm8gKmluZm8sIGNhZGRyX3QgcmVnYmFzZSkKIHsKLQlEUFJJTlRLKCJDSVJSVVNGQiBWR0EgQ1JUQyByZWdpc3RlciBkdW1wOlxuIik7CisJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJWR0EgQ1JUQyByZWdpc3RlciBkdW1wOlxuIik7CiAKLQljaXJydXNmYl9kYmdfcHJpbnRfcmVncyhyZWdiYXNlLCBDUlQsCisJY2lycnVzZmJfZGJnX3ByaW50X3JlZ3MoaW5mbywgcmVnYmFzZSwgQ1JULAogCQkJICAgIkNSMDAiLCAweDAwLAogCQkJICAgIkNSMDEiLCAweDAxLAogCQkJICAgIkNSMDIiLCAweDAyLApAQCAtMzEyNywxMSArMjkzOCwxMSBAQAogCQkJICAgIkNSM0YiLCAweDNGLAogCQkJICAgTlVMTCk7CiAKLQlEUFJJTlRLKCJcbiIpOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiXG4iKTsKIAotCURQUklOVEsoIkNJUlJVU0ZCIFZHQSBTRVEgcmVnaXN0ZXIgZHVtcDpcbiIpOworCWRldl9kYmcoaW5mby0+ZGV2aWNlLCAiVkdBIFNFUSByZWdpc3RlciBkdW1wOlxuIik7CiAKLQljaXJydXNmYl9kYmdfcHJpbnRfcmVncyhyZWdiYXNlLCBTRVEsCisJY2lycnVzZmJfZGJnX3ByaW50X3JlZ3MoaW5mbywgcmVnYmFzZSwgU0VRLAogCQkJICAgIlNSMDAiLCAweDAwLAogCQkJICAgIlNSMDEiLCAweDAxLAogCQkJICAgIlNSMDIiLCAweDAyLApAQCAtMzE2MCw3ICsyOTcxLDcgQEAKIAkJCSAgICJTUjFGIiwgMHgxRiwKIAkJCSAgIE5VTEwpOwogCi0JRFBSSU5USygiXG4iKTsKKwlkZXZfZGJnKGluZm8tPmRldmljZSwgIlxuIik7CiB9CiAKICNlbmRpZgkJCQkvKiBDSVJSVVNGQl9ERUJVRyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwppbmRleCAxNjU3Yjk2Li4yY2Q1MDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZmJjb24uYwpAQCAtMjk1NCw4ICsyOTU0LDExIEBACiAKIHN0YXRpYyBpbnQgZmJjb25fZmJfdW5yZWdpc3RlcmVkKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCWludCBpLCBpZHggPSBpbmZvLT5ub2RlOworCWludCBpLCBpZHg7CiAKKwlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWR4ID0gaW5mby0+bm9kZTsKIAlmb3IgKGkgPSBmaXJzdF9mYl92YzsgaSA8PSBsYXN0X2ZiX3ZjOyBpKyspIHsKIAkJaWYgKGNvbjJmYl9tYXBbaV0gPT0gaWR4KQogCQkJY29uMmZiX21hcFtpXSA9IC0xOwpAQCAtMjk3OSwxMyArMjk4MiwxNCBAQAogCQl9CiAJfQogCi0JaWYgKCFudW1fcmVnaXN0ZXJlZF9mYikKLQkJdW5yZWdpc3Rlcl9jb25fZHJpdmVyKCZmYl9jb24pOwotCi0KIAlpZiAocHJpbWFyeV9kZXZpY2UgPT0gaWR4KQogCQlwcmltYXJ5X2RldmljZSA9IC0xOwogCisJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CisKKwlpZiAoIW51bV9yZWdpc3RlcmVkX2ZiKQorCQl1bnJlZ2lzdGVyX2Nvbl9kcml2ZXIoJmZiX2Nvbik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzAyMSw5ICszMDI1LDEzIEBACiAKIHN0YXRpYyBpbnQgZmJjb25fZmJfcmVnaXN0ZXJlZChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQlpbnQgcmV0ID0gMCwgaSwgaWR4ID0gaW5mby0+bm9kZTsKKwlpbnQgcmV0ID0gMCwgaSwgaWR4OwogCisJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpCisJCXJldHVybiAtRU5PREVWOworCWlkeCA9IGluZm8tPm5vZGU7CiAJZmJjb25fc2VsZWN0X3ByaW1hcnkoaW5mbyk7CisJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CiAKIAlpZiAoaW5mb19pZHggPT0gLTEpIHsKIAkJZm9yIChpID0gZmlyc3RfZmJfdmM7IGkgPD0gbGFzdF9mYl92YzsgaSsrKSB7CkBAIC0zMTI0LDcgKzMxMzIsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBmYmNvbl9ldmVudF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCAKK3N0YXRpYyBpbnQgZmJjb25fZXZlbnRfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBmYl9ldmVudCAqZXZlbnQgPSBkYXRhOwpAQCAtMzEzMiw3ICszMTQwLDcgQEAKIAlzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlOwogCXN0cnVjdCBmYl9jb24yZmJtYXAgKmNvbjJmYjsKIAlzdHJ1Y3QgZmJfYmxpdF9jYXBzICpjYXBzOwotCWludCByZXQgPSAwOworCWludCBpZHgsIHJldCA9IDA7CiAKIAkvKgogCSAqIGlnbm9yZSBhbGwgZXZlbnRzIGV4Y2VwdCBkcml2ZXIgcmVnaXN0cmF0aW9uIGFuZCBkZXJlZ2lzdHJhdGlvbgpAQCAtMzE0NCwyMyArMzE1Miw1NCBAQAogCiAJc3dpdGNoKGFjdGlvbikgewogCWNhc2UgRkJfRVZFTlRfU1VTUEVORDoKKwkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGRvbmU7CisJCX0KIAkJZmJjb25fc3VzcGVuZGVkKGluZm8pOworCQl1bmxvY2tfZmJfaW5mbyhpbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBGQl9FVkVOVF9SRVNVTUU6CisJCWlmICghbG9ja19mYl9pbmZvKGluZm8pKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBkb25lOworCQl9CiAJCWZiY29uX3Jlc3VtZWQoaW5mbyk7CisJCXVubG9ja19mYl9pbmZvKGluZm8pOwogCQlicmVhazsKIAljYXNlIEZCX0VWRU5UX01PREVfQ0hBTkdFOgorCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZG9uZTsKKwkJfQogCQlmYmNvbl9tb2RlY2hhbmdlZChpbmZvKTsKKwkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgRkJfRVZFTlRfTU9ERV9DSEFOR0VfQUxMOgorCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZG9uZTsKKwkJfQogCQlmYmNvbl9zZXRfYWxsX3ZjcyhpbmZvKTsKKwkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgRkJfRVZFTlRfTU9ERV9ERUxFVEU6CiAJCW1vZGUgPSBldmVudC0+ZGF0YTsKKwkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGRvbmU7CisJCX0KIAkJcmV0ID0gZmJjb25fbW9kZV9kZWxldGVkKGluZm8sIG1vZGUpOworCQl1bmxvY2tfZmJfaW5mbyhpbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBGQl9FVkVOVF9GQl9VTkJJTkQ6Ci0JCXJldCA9IGZiY29uX2ZiX3VuYmluZChpbmZvLT5ub2RlKTsKKwkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpIHsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWR4ID0gaW5mby0+bm9kZTsKKwkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CisJCXJldCA9IGZiY29uX2ZiX3VuYmluZChpZHgpOwogCQlicmVhazsKIAljYXNlIEZCX0VWRU5UX0ZCX1JFR0lTVEVSRUQ6CiAJCXJldCA9IGZiY29uX2ZiX3JlZ2lzdGVyZWQoaW5mbyk7CkBAIC0zMTc4LDE3ICszMjE3LDMxIEBACiAJCWNvbjJmYi0+ZnJhbWVidWZmZXIgPSBjb24yZmJfbWFwW2NvbjJmYi0+Y29uc29sZSAtIDFdOwogCQlicmVhazsKIAljYXNlIEZCX0VWRU5UX0JMQU5LOgorCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZG9uZTsKKwkJfQogCQlmYmNvbl9mYl9ibGFua2VkKGluZm8sICooaW50ICopZXZlbnQtPmRhdGEpOworCQl1bmxvY2tfZmJfaW5mbyhpbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBGQl9FVkVOVF9ORVdfTU9ERUxJU1Q6CisJCWlmICghbG9ja19mYl9pbmZvKGluZm8pKSB7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBkb25lOworCQl9CiAJCWZiY29uX25ld19tb2RlbGlzdChpbmZvKTsKKwkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgRkJfRVZFTlRfR0VUX1JFUToKIAkJY2FwcyA9IGV2ZW50LT5kYXRhOworCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkgeworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZG9uZTsKKwkJfQogCQlmYmNvbl9nZXRfcmVxdWlyZW1lbnQoaW5mbywgY2Fwcyk7CisJCXVubG9ja19mYl9pbmZvKGluZm8pOwogCQlicmVhazsKIAl9Ci0KIGRvbmU6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY3libGFmYi5jIGIvZHJpdmVycy92aWRlby9jeWJsYWZiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MDRiNzMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy92aWRlby9jeWJsYWZiLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjgzICswLDAgQEAKLS8qCi0gKiBGcmFtZSBidWZmZXIgZHJpdmVyIGZvciBUcmlkZW50IEN5YmVyYmxhZGUvaTEgZ3JhcGhpY3MgY29yZQotICoKLSAqIENvcHlyaWdodCAyMDA1IEtudXQgUGV0ZXJzZW4gPEtudXRfUGV0ZXJzZW5AdC1vbmxpbmUuZGU+Ci0gKgotICogQ1JFRElUUzoKLSAqCXRyaWRlbnRmYi5jIGJ5IEphbmkgTW9ub3NlcwotICoJc2VlIGZpbGVzIGFib3ZlIGZvciBmdXJ0aGVyIGNyZWRpdHMKLSAqCi0gKi8KLQotI2RlZmluZSBDWUJMQUZCX0RFQlVHIDAKLSNkZWZpbmUgQ1lCTEFGQl9LRF9HUkFQSElDU19RVUlSSyAxCi0KLSNkZWZpbmUgQ1lCTEFGQl9QSVhNQVBTSVpFIDgxOTIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPHZpZGVvL2N5YmxhZmIuaD4KLQotI2RlZmluZSBWRVJTSU9OICIwLjYyIgotCi1zdHJ1Y3QgY3libGFmYl9wYXIgewotCXUzMiBwc2V1ZG9fcGFsWzE2XTsKLQlzdHJ1Y3QgZmJfb3BzIG9wczsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gY3libGFmYl9maXggX19kZXZpbml0ZGF0YSA9IHsKLQkuaWQgPSAiQ3lCbGEiLAotCS50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTLAotCS54cGFuc3RlcCA9IDEsCi0JLnlwYW5zdGVwID0gMSwKLQkueXdyYXBzdGVwID0gMSwKLQkudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SLAotCS5hY2NlbCA9IEZCX0FDQ0VMX05PTkUsCi19OwotCi1zdGF0aWMgY2hhciAqbW9kZSBfX2RldmluaXRkYXRhID0gTlVMTDsKLXN0YXRpYyBpbnQgYnBwIF9fZGV2aW5pdGRhdGEgPSA4Owotc3RhdGljIGludCByZWYgX19kZXZpbml0ZGF0YSA9IDc1Owotc3RhdGljIGludCBmcCBfX2RldmluaXRkYXRhOwotc3RhdGljIGludCBjcnQgX19kZXZpbml0ZGF0YTsKLXN0YXRpYyBpbnQgbWVtc2l6ZSBfX2RldmluaXRkYXRhOwotCi1zdGF0aWMgaW50IGJhc2VzdHJpZGU7Ci1zdGF0aWMgaW50IHZlc2FmYjsKLXN0YXRpYyBpbnQgbmF0aXZleDsKLXN0YXRpYyBpbnQgY2VudGVyOwotc3RhdGljIGludCBzdHJldGNoOwotc3RhdGljIGludCBwY2l3YiA9IDE7Ci1zdGF0aWMgaW50IHBjaXJiID0gMTsKLXN0YXRpYyBpbnQgcGNpd3IgPSAxOwotc3RhdGljIGludCBwY2lyciA9IDE7Ci1zdGF0aWMgaW50IGRpc2FibGVkOwotc3RhdGljIGludCB2ZXJib3NpdHk7Ci1zdGF0aWMgaW50IGRpc3BsYXl0eXBlOwotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICppb192aXJ0OwkvLyBpb3NwYWNlIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKLQotbW9kdWxlX3BhcmFtKG1vZGUsIGNoYXJwLCAwKTsKLW1vZHVsZV9wYXJhbShicHAsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0ocmVmLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKGZwLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKGNydCwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShuYXRpdmV4LCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKGNlbnRlciwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShzdHJldGNoLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHBjaXdiLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHBjaXJiLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHBjaXdyLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHBjaXJyLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKG1lbXNpemUsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0odmVyYm9zaXR5LCBpbnQsIDApOwotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8gV2VsbCwgd2UgaGF2ZSB0byBmaXggdGhlIHVwcGVyIGxheWVycy4KLS8vIFVudGlsIHRoaXMgaGFzIGJlZW4gZG9uZSwgd2Ugd29yayBhcm91bmQKLS8vIHRoZSBidWdzLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2lmIChDWUJMQUZCX0tEX0dSQVBISUNTX1FVSVJLICYmIENZQkxBRkJfREVCVUcpCi0JaWYgKGRpc2FibGVkKSB7IFwKLQkJcHJpbnRrKCIqKioqKioqKlxuIik7XAotCQlkdW1wX3N0YWNrKCk7XAotCQlyZXR1cm4gdmFsO1wKLQl9Ci0KLSNlbGlmIENZQkxBRkJfS0RfR1JBUEhJQ1NfUVVJUksKLSNkZWZpbmUgS0RfR1JBUEhJQ1NfUkVUVVJOKHZhbClcCi0JaWYgKGRpc2FibGVkKSB7XAotCQlyZXR1cm4gdmFsO1wKLQl9Ci0jZWxzZQotI2RlZmluZSBLRF9HUkFQSElDU19SRVRVUk4odmFsKQotI2VuZGlmCi0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBQb3J0IGFjY2VzcyBtYWNyb3MgZm9yIG1lbW9yeSBtYXBwZWQgaW8KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNkZWZpbmUgb3V0OChyLCB2KSB3cml0ZWIodiwgaW9fdmlydCArIHIpCi0jZGVmaW5lIG91dDMyKHIsIHYpIHdyaXRlbCh2LCBpb192aXJ0ICsgcikKLSNkZWZpbmUgaW44KHIpIHJlYWRiKGlvX3ZpcnQgKyByKQotI2RlZmluZSBpbjMyKHIpIHJlYWRsKGlvX3ZpcnQgKyByKQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8gSGFyZHdhcmUgYWNjZXNzIGlubGluZSBmdW5jdGlvbnMKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyBpbmxpbmUgdTggcmVhZDNYNCh1MzIgcmVnKQotewotCW91dDgoMHgzRDQsIHJlZyk7Ci0JcmV0dXJuIGluOCgweDNENSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggcmVhZDNDNCh1MzIgcmVnKQotewotCW91dDgoMHgzQzQsIHJlZyk7Ci0JcmV0dXJuIGluOCgweDNDNSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggcmVhZDNDRSh1MzIgcmVnKQotewotCW91dDgoMHgzQ0UsIHJlZyk7Ci0JcmV0dXJuIGluOCgweDNDRik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZTNYNCh1MzIgcmVnLCB1OCB2YWwpCi17Ci0Jb3V0OCgweDNENCwgcmVnKTsKLQlvdXQ4KDB4M0Q1LCB2YWwpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGUzQzQodTMyIHJlZywgdTggdmFsKQotewotCW91dDgoMHgzQzQsIHJlZyk7Ci0Jb3V0OCgweDNDNSwgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlM0NFKHUzMiByZWcsIHU4IHZhbCkKLXsKLQlvdXQ4KDB4M0NFLCByZWcpOwotCW91dDgoMHgzQ0YsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZTNDMCh1MzIgcmVnLCB1OCB2YWwpCi17Ci0JaW44KDB4M0RBKTsJCS8vIHJlYWQgdG8gcmVzZXQgaW5kZXgKLQlvdXQ4KDB4M0MwLCByZWcpOwotCW91dDgoMHgzQzAsIHZhbCk7Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIEVuYWJsZSBtZW1vcnkgbWFwcGVkIGlvIGFuZCB1bnByb3RlY3QgcmVnaXN0ZXJzCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyB2b2lkIGVuYWJsZV9tbWlvKHZvaWQpCi17Ci0JdTggdG1wOwotCi0Jb3V0YigweDBCLCAweDNDNCk7Ci0JaW5iKDB4M0M1KTsJCS8vIFNldCBORVcgbW9kZQotCW91dGIoU1IwRSwgMHgzQzQpOwkvLyB3cml0ZSBlbmFibGUgYSBsb3Qgb2YgZXh0ZW5kZWQgcG9ydHMKLQlvdXRiKDB4ODAsIDB4M0M1KTsKLQotCW91dGIoU1IxMSwgMHgzQzQpOwkvLyB3cml0ZSBlbmFibGUgdGhvc2UgZXh0ZW5kZWQgcG9ydHMgdGhhdAotCW91dGIoMHg4NywgMHgzQzUpOwkvLyBhcmUgbm90IGFmZmVjdGVkIGJ5IFNSMEVfTmV3Ci0KLQlvdXRiKENSMUUsIDB4M2Q0KTsJLy8gY2xlYXIgd3JpdGUgcHJvdGVjdCBiaXQgZm9yIHBvcnQgMHgzYzIKLQl0bXAgPSBpbmIoMHgzZDUpICYgMHhCRjsKLQlvdXRiKENSMUUsIDB4M2Q0KTsKLQlvdXRiKHRtcCwgMHgzZDUpOwotCi0Jb3V0YihDUjM5LCAweDNENCk7Ci0Jb3V0YihpbmIoMHgzRDUpIHwgMHgwMSwgMHgzRDUpOyAvLyBFbmFibGUgbW1pbwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBTZXQgcGl4ZWwgY2xvY2sgVkNMSzEKLS8vIC0gbXVsdGlwbGllcnMgc2V0IGVsc3doZXJlCi0vLyAtIGZyZXEgaW4gdW5pdHMgb2YgMC4wMSBNSHoKLS8vCi0vLyBIYXJkd2FyZSBidWc6IFNSMTggPj0gMjUwIGlzIGJyb2tlbiBmb3IgdGhlCi0vLwkJIGN5YmVyYmxhZGUvaTEKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc3RhdGljIHZvaWQgc2V0X3ZjbGsoc3RydWN0IGN5YmxhZmJfcGFyICpwYXIsIGludCBmcmVxKQotewotCXUzMiBtLCBuLCBrOwotCWludCBmLCBmaSwgZCwgZGk7Ci0JdTggbG8gPSAwLCBoaSA9IDA7Ci0KLQlkID0gMjAwMDsKLQlrID0gZnJlcSA+PSAxMDAwMCA/IDAgOiBmcmVxID49IDUwMDAgPyAxIDogZnJlcSA+PSAyNTAwID8gMiA6IDM7Ci0JZm9yIChtID0gMDsgbSA8IDY0OyBtKyspCi0JCWZvciAobiA9IDA7IG4gPCAyNTA7IG4rKykgewotCQkJZmkgPSAoaW50KSgoKDU4NjQ3MjcgKiAobiArIDgpKSAvCi0JCQkJICAgICgobSArIDIpICogKDEgPDwgaykpKSA+PiAxMik7Ci0JCQlpZiAoKGRpID0gYWJzKGZpIC0gZnJlcSkpIDwgZCkgewotCQkJCWQgPSBkaTsKLQkJCQlmID0gZmk7Ci0JCQkJbG8gPSAodTgpIG47Ci0JCQkJaGkgPSAodTgpICgoayA8PCA2KSB8IG0pOwotCQkJfQotCQl9Ci0Jd3JpdGUzQzQoU1IxOSwgaGkpOwotCXdyaXRlM0M0KFNSMTgsIGxvKTsKLQlpZiAodmVyYm9zaXR5ID4gMCkKLQkJb3V0cHV0KCJwaXhjbG9jayA9ICVkLiUwMmQgTUh6LCBrL20vbiAleCAleCAleFxuIiwKLQkJICAgICAgIGZyZXEgLyAxMDAsIGZyZXEgJSAxMDAsIChoaSAmIDB4YzApID4+IDYsIGhpICYgMHgzZiwgbG8pOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIEN5YmVyYmxhZGUgc3BlY2lmaWMgR3JhcGhpY3MgRW5naW5lIChHRSkgc2V0dXAKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgdm9pZCBjeWJsYWZiX3NldHVwX0dFKGludCBwaXRjaCwgaW50IGJwcCkKLXsKLQlLRF9HUkFQSElDU19SRVRVUk4oKTsKLQotCXN3aXRjaCAoYnBwKSB7Ci0JY2FzZSA4OgotCQliYXNlc3RyaWRlID0gKChwaXRjaCA+PiAzKSA8PCAyMCkgfCAoMCA8PCAyOSk7Ci0JCWJyZWFrOwotCWNhc2UgMTU6Ci0JCWJhc2VzdHJpZGUgPSAoKHBpdGNoID4+IDMpIDw8IDIwKSB8ICg1IDw8IDI5KTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJYmFzZXN0cmlkZSA9ICgocGl0Y2ggPj4gMykgPDwgMjApIHwgKDEgPDwgMjkpOwotCQlicmVhazsKLQljYXNlIDI0OgotCWNhc2UgMzI6Ci0JCWJhc2VzdHJpZGUgPSAoKHBpdGNoID4+IDMpIDw8IDIwKSB8ICgyIDw8IDI5KTsKLQkJYnJlYWs7Ci0JfQotCi0Jd3JpdGUzWDQoQ1IzNiwgMHg5MCk7CS8vIHJlc2V0IEdFCi0Jd3JpdGUzWDQoQ1IzNiwgMHg4MCk7CS8vIGVuYWJsZSBHRQotCW91dDMyKEdFMjQsIDEgPDwgNyk7CS8vIHJlc2V0IGFsbCBHRSBwb2ludGVycyBieSB0b2dnbGluZwotCW91dDMyKEdFMjQsIDApOyAJLy8gICBkNyBvZiBHRTI0Ci0Jd3JpdGUzWDQoQ1IyRCwgMHgwMCk7CS8vIEdFIFRpbWluaWdzLCBubyBkZWxheXMKLQlvdXQzMihHRTZDLCAwKTsgCS8vIFBhdHRlcm4gYW5kIFN0eWxlLCBwIDEyOSwgb2sKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBDeWJlcmJsYWRlIHNwZWNpZmljIHN5bmNpbmcKLS8vCi0vLyAgIEEgdGltZW91dCBtaWdodCBiZSBjYXVzZWQgYnkgZGlzYWJsZWQgbW1pby4KLS8vICAgQ2F1c2U6Ci0vLyAgICAgLSBiaXQgQ1IzOSAmIDEgPT0gMCB1cG9uIHJldHVybiwgWCB0cmlkZW50IGRyaXZlciBidWcKLS8vICAgICAtIGtkbSBidWcgKEtEX0dSQVBISUNTIG5vdCBzZXQgb24gZmlyc3Qgc3dpdGNoKQotLy8gICAgIC0ga2VybmVsIGRlc2lnbiBmbGF3IChpdCBiZWxpZXZlcyBpbiB0aGUgY29ycmVjdG5lc3MKLS8vCSBvZiBrZG0vWAotLy8gICBGaXJzdCB3ZSB0cnkgdG8gc3luYyBpZ25vcmluZyB0aGF0IHByb2JsZW0sIGFzIG1vc3Qgb2YgdGhlCi0vLyAgIHRpbWUgdGhhdCB3aWxsIHN1Y2NlZWQgaW1tZWRpYXRlbHkgYW5kIHRoZSBlbmFibGVfbW1pbygpCi0vLyAgIHdvdWxkIG9ubHkgZGVncmFkZSBwZXJmb3JtYW5jZS4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IGN5YmxhZmJfc3luYyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQl1MzIgc3RhdHVzLCBpID0gMTAwMDAwOwotCi0JS0RfR1JBUEhJQ1NfUkVUVVJOKDApOwotCi0Jd2hpbGUgKCgoc3RhdHVzID0gaW4zMihHRTIwKSkgJiAweEZlODAwMDAwKSAmJiBpICE9IDApCi0JCWktLTsKLQotCWlmIChpID09IDApIHsKLQkJZW5hYmxlX21taW8oKTsKLQkJaSA9IDEwMDAwMDA7Ci0JCXdoaWxlICgoKHN0YXR1cyA9IGluMzIoR0UyMCkpICYgMHhGQTgwMDAwMCkgJiYgaSAhPSAwKQotCQkJaS0tOwotCQlpZiAoaSA9PSAwKSB7Ci0JCQlvdXRwdXQoIkdFIFRpbWVvdXQsIHN0YXR1czogJXhcbiIsIHN0YXR1cyk7Ci0JCQlpZiAoc3RhdHVzICYgMHg4MDAwMDAwMCkKLQkJCQlvdXRwdXQoIkJyZXNlbmhhbSBFbmdpbmUgOiBCdXN5XG4iKTsKLQkJCWlmIChzdGF0dXMgJiAweDQwMDAwMDAwKQotCQkJCW91dHB1dCgiU2V0dXAgRW5naW5lICAgICA6IEJ1c3lcbiIpOwotCQkJaWYgKHN0YXR1cyAmIDB4MjAwMDAwMDApCi0JCQkJb3V0cHV0KCJTUCAvIERQRSAgICAgICAgIDogQnVzeVxuIik7Ci0JCQlpZiAoc3RhdHVzICYgMHgxMDAwMDAwMCkKLQkJCQlvdXRwdXQoIk1lbW9yeSBJbnRlcmZhY2UgOiBCdXN5XG4iKTsKLQkJCWlmIChzdGF0dXMgJiAweDA4MDAwMDAwKQotCQkJCW91dHB1dCgiQ29tIExzdCBQcm9jICAgICA6IEJ1c3lcbiIpOwotCQkJaWYgKHN0YXR1cyAmIDB4MDQwMDAwMDApCi0JCQkJb3V0cHV0KCJCbG9jayBXcml0ZSAgICAgIDogQnVzeVxuIik7Ci0JCQlpZiAoc3RhdHVzICYgMHgwMjAwMDAwMCkKLQkJCQlvdXRwdXQoIkNvbW1hbmQgQnVmZmVyICAgOiBGdWxsXG4iKTsKLQkJCWlmIChzdGF0dXMgJiAweDAxMDAwMDAwKQotCQkJCW91dHB1dCgiUkVTRVJWRUQgICAgICAgICA6IEJ1c3lcbiIpOwotCQkJaWYgKHN0YXR1cyAmIDB4MDA4MDAwMDApCi0JCQkJb3V0cHV0KCJQQ0kgV3JpdGUgQnVmZmVyIDogQnVzeVxuIik7Ci0JCQljeWJsYWZiX3NldHVwX0dFKGluZm8tPnZhci54cmVzLAotCQkJCQkgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIEN5YmVyYmxhZGUgc3BlY2lmaWMgZmlsbHJlY3QKLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgdm9pZCBjeWJsYWZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKmZyKQotewotCXUzMiBicHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsIGNvbCwgZGVzdHksIGhlaWdodDsKLQotCUtEX0dSQVBISUNTX1JFVFVSTigpOwotCi0Jc3dpdGNoIChicHApIHsKLQlkZWZhdWx0OgotCWNhc2UgODoKLQkJY29sID0gZnItPmNvbG9yOwotCQljb2wgfD0gY29sIDw8IDg7Ci0JCWNvbCB8PSBjb2wgPDwgMTY7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCWNvbCA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ZyLT5jb2xvcl07Ci0JCWNvbCB8PSBjb2wgPDwgMTY7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCWNvbCA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ZyLT5jb2xvcl07Ci0JCWJyZWFrOwotCX0KLQotCWRlc3R5ID0gZnItPmR5OwotCWhlaWdodCA9IGZyLT5oZWlnaHQ7Ci0Jd2hpbGUgKGhlaWdodCkgewotCQlvdXQzMihHRUI4LCBiYXNlc3RyaWRlIHwgKChkZXN0eSAqIGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKgotCQkJCQkgICBicHApID4+IDYpKTsKLQkJb3V0MzIoR0U2MCwgY29sKTsKLQkJb3V0MzIoR0U0OCwgZnItPnJvcCA/IDB4NjYgOiBST1BfUyk7Ci0JCW91dDMyKEdFNDQsIDB4MjAwMDAwMDAgfCAxIDw8IDE5IHwgMSA8PCA0IHwgMiA8PCAyKTsKLQkJb3V0MzIoR0UwOCwgcG9pbnQoZnItPmR4LCAwKSk7Ci0JCW91dDMyKEdFMEMsIHBvaW50KGZyLT5keCArIGZyLT53aWR0aCAtIDEsCi0JCQkJICBoZWlnaHQgPiA0MDk2ID8gNDA5NSA6IGhlaWdodCAtIDEpKTsKLQkJaWYgKGxpa2VseShoZWlnaHQgPD0gNDA5NikpCi0JCQlyZXR1cm47Ci0JCWRlc3R5ICs9IDQwOTY7Ci0JCWhlaWdodCAtPSA0MDk2OwotCX0KLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBDeWJlcmJsYWRlIHNwZWNpZmljIGNvcHlhcmVhCi0vLwotLy8gVGhpcyBmdW5jdGlvbiBzaWxlbnRseSBhc3N1bWVzIHRoYXQgaXQgbmV2ZXIKLS8vIHdpbGwgYmUgY2FsbGVkIHdpdGggd2lkdGggb3IgaGVpZ2h0IGV4Y2VlZGluZwotLy8gNDA5Ni4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgdm9pZCBjeWJsYWZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfY29weWFyZWEgKmNhKQotewotCXUzMiBzMSwgczIsIGQxLCBkMiwgZGlyZWN0aW9uOwotCi0JS0RfR1JBUEhJQ1NfUkVUVVJOKCk7Ci0KLQlzMSA9IHBvaW50KGNhLT5zeCwgMCk7Ci0JczIgPSBwb2ludChjYS0+c3ggKyBjYS0+d2lkdGggLSAxLCBjYS0+aGVpZ2h0IC0gMSk7Ci0JZDEgPSBwb2ludChjYS0+ZHgsIDApOwotCWQyID0gcG9pbnQoY2EtPmR4ICsgY2EtPndpZHRoIC0gMSwgY2EtPmhlaWdodCAtIDEpOwotCi0JaWYgKChjYS0+c3kgPiBjYS0+ZHkpIHx8ICgoY2EtPnN5ID09IGNhLT5keSkgJiYgKGNhLT5zeCA+IGNhLT5keCkpKQotCQlkaXJlY3Rpb24gPSAwOwotCWVsc2UKLQkJZGlyZWN0aW9uID0gMjsKLQotCW91dDMyKEdFQjgsIGJhc2VzdHJpZGUgfCAoKGNhLT5keSAqIGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKgotCQkJCSAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgPj4gNikpOwotCW91dDMyKEdFQzgsIGJhc2VzdHJpZGUgfCAoKGNhLT5zeSAqIGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKgotCQkJCSAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCkgPj4gNikpOwotCW91dDMyKEdFNDQsIDB4YTAwMDAwMDAgfCAxIDw8IDE5IHwgMSA8PCAyIHwgZGlyZWN0aW9uKTsKLQlvdXQzMihHRTAwLCBkaXJlY3Rpb24gPyBzMiA6IHMxKTsKLQlvdXQzMihHRTA0LCBkaXJlY3Rpb24gPyBzMSA6IHMyKTsKLQlvdXQzMihHRTA4LCBkaXJlY3Rpb24gPyBkMiA6IGQxKTsKLQlvdXQzMihHRTBDLCBkaXJlY3Rpb24gPyBkMSA6IGQyKTsKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIEN5YmVyYmxhZGUgc3BlY2lmaWMgaW1hZ2VibGl0Ci0vLwotLy8gQWNjZWxlcmF0ZWQgZm9yIHRoZSBtb3N0IHVzdWFsIGNhc2UsIGJsaXR0aW5nIDEgLSBiaXQgZGVlcAotLy8gY2hhcmFjdGVyIGltYWdlcy4gRXZlcnl0aGluZyBlbHNlIGlzIHBhc3NlZCB0byB0aGUgZ2VuZXJpYyBpbWFnZWJsaXQKLS8vIHVubGVzcyBpdCBpcyBzbyBpbnNhbmUgdGhhdCBpdCBpcyBiZXR0ZXIgdG8gcHJpbnRrIGFuIGFsZXJ0LgotLy8KLS8vIEhhcmR3YXJlIGJ1ZzogX05ldmVyXyBibGl0IGFjcm9zcyBwaXhlbCBjb2x1bW4gMjA0OCwgdGhhdCB3aWxsIGxvY2sKLS8vIHRoZSBzeXN0ZW0uIFdlIHNwbGl0IHRob3NlIGJsaXQgcmVxdWVzdHMgaW50byB0aHJlZSBibGl0dGluZwotLy8gb3BlcmF0aW9ucy4KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyB2b2lkIGN5YmxhZmJfaW1hZ2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKLXsKLQl1MzIgZmdjb2wsIGJnY29sOwotCXUzMiAqcGQgPSAodTMyICopIGltYWdlLT5kYXRhOwotCXUzMiBicHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7Ci0KLQlLRF9HUkFQSElDU19SRVRVUk4oKTsKLQotCS8vIFVzZWQgb25seSBmb3IgZHJhd2luZyB0aGUgcGVuZ3VpbmUgKGltYWdlLT5kZXB0aCA+IDEpCi0JaWYgKGltYWdlLT5kZXB0aCAhPSAxKSB7Ci0JCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwotCQlyZXR1cm47Ci0JfQotCS8vIFRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0IGl0IHdvdWxkIGJlIGZhdGFsCi0JaWYgKGltYWdlLT53aWR0aCA9PSAwIHx8IGltYWdlLT5oZWlnaHQgPT0gMCkgewotCQlvdXRwdXQoImltYWdlYmxpdDogd2lkdGgvaGVpZ2h0IDAgZGV0ZWN0ZWRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGluZm8tPmZpeC52aXN1YWwgPT0gRkJfVklTVUFMX1RSVUVDT0xPUiB8fAotCSAgICBpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUikgewotCQlmZ2NvbCA9ICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5mZ19jb2xvcl07Ci0JCWJnY29sID0gKCh1MzIgKikgKGluZm8tPnBzZXVkb19wYWxldHRlKSlbaW1hZ2UtPmJnX2NvbG9yXTsKLQl9IGVsc2UgewotCQlmZ2NvbCA9IGltYWdlLT5mZ19jb2xvcjsKLQkJYmdjb2wgPSBpbWFnZS0+YmdfY29sb3I7Ci0JfQotCi0Jc3dpdGNoIChicHApIHsKLQljYXNlIDg6Ci0JCWZnY29sIHw9IGZnY29sIDw8IDg7Ci0JCWJnY29sIHw9IGJnY29sIDw8IDg7Ci0JY2FzZSAxNjoKLQkJZmdjb2wgfD0gZmdjb2wgPDwgMTY7Ci0JCWJnY29sIHw9IGJnY29sIDw8IDE2OwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCW91dDMyKEdFQjgsIGJhc2VzdHJpZGUgfCAoKGltYWdlLT5keSAqIGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKgotCQkJCSAgIGJwcCkgPj4gNikpOwotCW91dDMyKEdFNjAsIGZnY29sKTsKLQlvdXQzMihHRTY0LCBiZ2NvbCk7Ci0KLQlpZiAoIShpbWFnZS0+ZHggPCAyMDQ4ICYmIChpbWFnZS0+ZHggKyBpbWFnZS0+d2lkdGggLSAxKSA+PSAyMDQ4KSkgewotCQl1MzIgZGRzID0gKChpbWFnZS0+d2lkdGggKyAzMSkgPj4gNSkgKiBpbWFnZS0+aGVpZ2h0OwotCQlvdXQzMihHRTQ0LCAweGEwMDAwMDAwIHwgMSA8PCAyMCB8IDEgPDwgMTkpOwotCQlvdXQzMihHRTA4LCBwb2ludChpbWFnZS0+ZHgsIDApKTsKLQkJb3V0MzIoR0UwQywgcG9pbnQoaW1hZ2UtPmR4ICsgaW1hZ2UtPndpZHRoIC0gMSwKLQkJCQkgIGltYWdlLT5oZWlnaHQgLSAxKSk7Ci0JCXdoaWxlIChkZHMtLSkKLQkJCW91dDMyKEdFOUMsICpwZCsrKTsKLQl9IGVsc2UgewotCQlpbnQgaSwgajsKLQkJdTMyIGRkc3RvdGFsID0gKGltYWdlLT53aWR0aCArIDMxKSA+PiA1OwotCQl1MzIgZGRzbGVmdCA9ICgyMDQ4IC0gaW1hZ2UtPmR4ICsgMzEpID4+IDU7Ci0JCXUzMiBza2lwbGVmdCA9IGRkc3RvdGFsIC0gZGRzbGVmdDsKLQotCQlvdXQzMihHRTQ0LCAweGEwMDAwMDAwIHwgMSA8PCAyMCB8IDEgPDwgMTkpOwotCQlvdXQzMihHRTA4LCBwb2ludChpbWFnZS0+ZHgsIDApKTsKLQkJb3V0MzIoR0UwQywgcG9pbnQoMjA0OCAtIDEsIGltYWdlLT5oZWlnaHQgLSAxKSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBpbWFnZS0+aGVpZ2h0OyBpKyspIHsKLQkJCWZvciAoaiA9IDA7IGogPCBkZHNsZWZ0OyBqKyspCi0JCQkJb3V0MzIoR0U5QywgKnBkKyspOwotCQkJcGQgKz0gc2tpcGxlZnQ7Ci0JCX0KLQotCQlpZiAoaW1hZ2UtPmR4ICUgMzIpIHsKLQkJCW91dDMyKEdFNDQsIDB4YTAwMDAwMDAgfCAxIDw8IDIwIHwgMSA8PCAxOSk7Ci0JCQlvdXQzMihHRTA4LCBwb2ludCgyMDQ4LCAwKSk7Ci0JCQlpZiAoaW1hZ2UtPndpZHRoID4gZGRzbGVmdCA8PCA1KQotCQkJCW91dDMyKEdFMEMsIHBvaW50KGltYWdlLT5keCArIChkZHNsZWZ0IDw8IDUpIC0KLQkJCQkJCSAgMSwgaW1hZ2UtPmhlaWdodCAtIDEpKTsKLQkJCWVsc2UKLQkJCQlvdXQzMihHRTBDLCBwb2ludChpbWFnZS0+ZHggKyBpbWFnZS0+d2lkdGggLSAxLAotCQkJCQkJICBpbWFnZS0+aGVpZ2h0IC0gMSkpOwotCQkJcGQgPSAoKHUzMiAqKSBpbWFnZS0+ZGF0YSkgKyBkZHN0b3RhbCAtIHNraXBsZWZ0IC0gMTsKLQkJCWZvciAoaSA9IDA7IGkgPCBpbWFnZS0+aGVpZ2h0OyBpKyspIHsKLQkJCQlvdXQzMihHRTlDLCBzd2FiMzIoc3dhYjMyKCpwZCkgPDwgKCgzMiAtCi0JCQkJCSAgICAoaW1hZ2UtPmR4ICYgMzEpKSAmIDMxKSkpOwotCQkJCXBkICs9IGRkc3RvdGFsOwotCQkJfQotCQl9Ci0KLQkJaWYgKHNraXBsZWZ0KSB7Ci0JCQlvdXQzMihHRTQ0LCAweGEwMDAwMDAwIHwgMSA8PCAyMCB8IDEgPDwgMTkpOwotCQkJb3V0MzIoR0UwOCwgcG9pbnQoaW1hZ2UtPmR4ICsgKGRkc2xlZnQgPDwgNSksIDApKTsKLQkJCW91dDMyKEdFMEMsIHBvaW50KGltYWdlLT5keCArIGltYWdlLT53aWR0aCAtIDEsCi0JCQkJCSAgaW1hZ2UtPmhlaWdodCAtIDEpKTsKLQkJCXBkID0gKHUzMiAqKSBpbWFnZS0+ZGF0YTsKLQkJCWZvciAoaSA9IDA7IGkgPCBpbWFnZS0+aGVpZ2h0OyBpKyspIHsKLQkJCQlwZCArPSBkZHNsZWZ0OwotCQkJCWZvciAoaiA9IDA7IGogPCBza2lwbGVmdDsgaisrKQotCQkJCQlvdXQzMihHRTlDLCAqcGQrKyk7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIENoZWNrIGlmIHZpZGVvIG1vZGUgaXMgYWNjZXB0YWJsZS4gV2UgY2hhbmdlIHZhci0+Pz8/IGlmCi0vLyB2aWRlbyBtb2RlIGlzIHNsaWdodGx5IG9mZiBvciByZXR1cm4gZXJyb3Igb3RoZXJ3aXNlLgotLy8gaW5mby0+Pz8/IG11c3Qgbm90IGJlIGNoYW5nZWQhCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyBpbnQgY3libGFmYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCWludCBicHAgPSB2YXItPmJpdHNfcGVyX3BpeGVsOwotCi0JLy8KLQkvLyB3ZSB0cnkgdG8gc3VwcG9ydCA4LCAxNiwgMjQgYW5kIDMyIGJwcCBtb2RlcywKLQkvLyBkZWZhdWx0IHRvIDgKLQkvLwotCS8vIHRoZXJlIGlzIGEgMjQgYnBwIG1vZGUsIGJ1dCBmb3Igbm93IHdlIGNoYW5nZSByZXF1ZXN0cyB0byAzMiBicHAKLQkvLyAoVGhpcyBpcyB3aGF0IHRyaWRlbnRmYiBkb2VzIC4uLiB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSkKLQkvLwotCS8vCi0JaWYgKGJwcCAlIDggIT0gMCB8fCBicHAgPCA4IHx8IGJwcCA+IDMyKQotCQlicHAgPSA4OwotCWlmIChicHAgPT0gMjQpCi0JCWJwcCA9IHZhci0+Yml0c19wZXJfcGl4ZWwgPSAzMjsKLQotCS8vCi0JLy8gaW50ZXJsYWNlZCBtb2RlcyBhcmUgYnJva2VuLCBmYWlsIGlmIG9uZSBpcyByZXF1ZXN0ZWQKLQkvLwotCWlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvLwotCS8vIGZhaWwgaWYgcmVxdWVzdGVkIHJlc29sdXRpb24gaXMgaGlnaGVyIHRoYW4gcGh5c2ljYWwKLQkvLyBmbGF0cGFuZWwgcmVzb2x1dGlvbgotCS8vCi0JaWYgKChkaXNwbGF5dHlwZSA9PSBESVNQTEFZX0ZQKSAmJiBuYXRpdmV4ICYmIHZhci0+eHJlcyA+IG5hdGl2ZXgpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLy8KLQkvLyB3ZSBkbyBub3QgYWxsb3cgdmNsayB0byBleGNlZWQgMjMwIE1Iei4gSWYgdGhlIHJlcXVlc3RlZAotCS8vIHZjbGsgaXMgdG9vIGhpZ2gsIHdlIGRlZmF1bHQgdG8gMjAwIE1IegotCS8vCi0JaWYgKChicHAgPT0gMzIgPyAyMDAwMDAwMDAgOiAxMDAwMDAwMDApIC8gdmFyLT5waXhjbG9jayA+IDIzMDAwKQotCQl2YXItPnBpeGNsb2NrID0gKGJwcCA9PSAzMiA/IDIwMDAwMDAwMCA6IDEwMDAwMDAwMCkgLyAyMDAwMDsKLQotCS8vCi0JLy8gZW5mb3JjZSAoaHx2KXN5bmNfbGVuIGxpbWl0cwotCS8vCi0JdmFyLT5oc3luY19sZW4gJj0gfjc7Ci0JaWYodmFyLT5oc3luY19sZW4gPiAyNDgpCi0JCXZhci0+aHN5bmNfbGVuID0gMjQ4OwotCi0JdmFyLT52c3luY19sZW4gJj0gMTU7Ci0KLQkvLwotCS8vIEVuZm9yY2UgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgaGFyZHdhcmUgbGltaXRzLgotCS8vIDE2MDB4MTIwMCBpcyBtZW50aW9uZWQgYXMgYSBtYXhpbXVtLCBidXQgaGlnaGVyIHJlc29sdXRpb25zIGNvdWxkCi0JLy8gd29yayB3aXRoIHNsb3cgcmVmcmVzaCwgc21hbGwgbWFyZ2lucyBhbmQgc2hvcnQgc3luYy4KLQkvLwotCXZhci0+eHJlcyAmPSB+NzsKLQotCWlmICgoKHZhci0+eHJlcyArIHZhci0+bGVmdF9tYXJnaW4gKyB2YXItPnJpZ2h0X21hcmdpbiArCi0JCQl2YXItPmhzeW5jX2xlbikgPiAoYnBwID09IDMyID8gMjA0MCA6IDQwODgpKSB8fAotCQkJKCh2YXItPnlyZXMgKyB2YXItPnVwcGVyX21hcmdpbiArIHZhci0+bG93ZXJfbWFyZ2luICsKLQkJCXZhci0+dnN5bmNfbGVuKSA+IDIwNDcpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgodmFyLT54cmVzID4gMTYwMCkgfHwgKHZhci0+eXJlcyA+IDEyMDApKQotCQlvdXRwdXQoIk1vZGUgJWR4JWQgZXhjZWVkcyBkb2N1bWVudGVkIGxpbWl0cy5cbiIsCi0JCQkJCSAgIHZhci0+eHJlcywgdmFyLT55cmVzKTsKLQkvLwotCS8vIHRyeSB0byBiZSBzbWFydCBhYm91dCAoeHx5KXJlc192aXJ0dWFsIHByb2JsZW1zLgotCS8vCi0JaWYgKHZhci0+eHJlcyA+IHZhci0+eHJlc192aXJ0dWFsKQotCQl2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlczsKLQlpZiAodmFyLT55cmVzID4gdmFyLT55cmVzX3ZpcnR1YWwpCi0JCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzOwotCi0JaWYgKGJwcCA9PSA4IHx8IGJwcCA9PSAxNikgewotCQlpZiAodmFyLT54cmVzX3ZpcnR1YWwgPiA0MDg4KQotCQkJdmFyLT54cmVzX3ZpcnR1YWwgPSA0MDg4OwotCX0gZWxzZSB7Ci0JCWlmICh2YXItPnhyZXNfdmlydHVhbCA+IDIwNDApCi0JCQl2YXItPnhyZXNfdmlydHVhbCA9IDIwNDA7Ci0JfQotCXZhci0+eHJlc192aXJ0dWFsICY9IH43OwotCXdoaWxlICh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+eXJlc192aXJ0dWFsICogYnBwIC8gOCA+Ci0JICAgICAgIGluZm8tPmZpeC5zbWVtX2xlbikgewotCQlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPiB2YXItPnlyZXMpCi0JCQl2YXItPnlyZXNfdmlydHVhbC0tOwotCQllbHNlIGlmICh2YXItPnhyZXNfdmlydHVhbCA+IHZhci0+eHJlcykKLQkJCXZhci0+eHJlc192aXJ0dWFsIC09IDg7Ci0JCWVsc2UKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXN3aXRjaCAoYnBwKSB7Ci0JY2FzZSA4OgotCQl2YXItPnJlZC5vZmZzZXQgPSAwOwotCQl2YXItPmdyZWVuLm9mZnNldCA9IDA7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotCQl2YXItPnJlZC5sZW5ndGggPSA2OwotCQl2YXItPmdyZWVuLmxlbmd0aCA9IDY7Ci0JCXZhci0+Ymx1ZS5sZW5ndGggPSA2OwotCQlicmVhazsKLQljYXNlIDE2OgotCQl2YXItPnJlZC5vZmZzZXQgPSAxMTsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gNTsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OwotCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7Ci0JCXZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDA7Ci0JCXZhci0+cmVkLmxlbmd0aCA9IDg7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gODsKLQkJdmFyLT5ibHVlLmxlbmd0aCA9IDg7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIFBhbiB0aGUgZGlzcGxheQotLy8KLS8vIFRoZSBkYXRhc2hlZXRzIGRlZmluZXMgY3J0IHN0YXJ0IGFkZHJlc3MgdG8gYmUgMjAgYml0cyB3aWRlIGFuZAotLy8gdG8gYmUgcHJvZ3JhbW1lZCB0byBDUjBDLCBDUjBELCBDUjFFIGFuZCBDUjI3LiBBY3R1YWxseSB0aGVyZSBpcwotLy8gQ1IyQls1XSBhcyBhbiB1bmRvY3VtZW50ZWQgZXh0ZW5zaW9uIGJpdC4gRXBpYSBCSU9TIDIuMDcgZG9lcyB1c2UKLS8vIGl0LCBzbyBpdCBpcyBhbHNvIHNhZmUgdG8gYmUgdXNlZCBoZXJlLiBCVFc6IGRhdGFzaGVldCBDUjBFIG9uIHBhZ2UKLS8vIDkwIHJlYWxseSBpcyBDUjFFLCB0aGUgcmVhbCBDUkUgaXMgZG9jdW1lbnRlZCBvbiBwYWdlIDcyLgotLy8KLS8vIEJVVDoKLS8vCi0vLyBBcyBvZiBpbnRlcm5hbCB2ZXJzaW9uIDAuNjAgd2UgZG8gbm90IHVzZSB2Z2EgcGFubmluZyBhbnkgbG9uZ2VyLgotLy8gVmdhIHBhbm5pbmcgZGlkIG5vdCBhbGxvdyB1cyB0aGUgdXNlIG9mIGFsbCBhdmFpbGFibGUgdmlkZW8gbWVtb3J5Ci0vLyBhbmQgdGh1cyBwcmV2ZW50ZWQgeXdyYXAgc2Nyb2xsaW5nLiBXZSBkbyB1c2UgdGhlICJyaWdodCB2aWV3IgotLy8gcmVnaXN0ZXIgbm93LgotLy8KLS8vCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IGN5YmxhZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCi0JCQkgICAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JS0RfR1JBUEhJQ1NfUkVUVVJOKDApOwotCi0JaW5mby0+dmFyLnhvZmZzZXQgPSB2YXItPnhvZmZzZXQ7Ci0JaW5mby0+dmFyLnlvZmZzZXQgPSB2YXItPnlvZmZzZXQ7Ci0Jb3V0MzIoR0UxMCwgMHg4MDAwMDAwMCB8ICgodmFyLT54b2Zmc2V0ICsgKHZhci0+eW9mZnNldCAqCi0JCSAgICB2YXItPnhyZXNfdmlydHVhbCkpICogdmFyLT5iaXRzX3Blcl9waXhlbCAvIDMyKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBUaGlzIHdpbGwgcmVhbGx5IGhlbHAgaW4gY2FzZSBvZiBhIGJ1ZyAuLi4KLS8vIGR1bXAgbW9zdCBnYXBoaWNzIGNvcmUgcmVnaXN0ZXJzLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc3RhdGljIHZvaWQgcmVnZHVtcChzdHJ1Y3QgY3libGFmYl9wYXIgKnBhcikKLXsKLQlpbnQgaTsKLQotCWlmICh2ZXJib3NpdHkgPCAyKQotCQlyZXR1cm47Ci0KLQlwcmludGsoIlxuIik7Ci0JZm9yIChpID0gMDsgaSA8PSAweGZmOyBpKyspIHsKLQkJb3V0YihpLCAweDNkNCk7Ci0JCXByaW50aygiQ1IlMDJ4PSUwMnggIiwgaSwgaW5iKDB4M2Q1KSk7Ci0JCWlmIChpICUgMTYgPT0gMTUpCi0JCQlwcmludGsoIlxuIik7Ci0JfQotCi0Jb3V0YigweDMwLCAweDNjZSk7Ci0Jb3V0YihpbmIoMHgzY2YpIHwgMHg0MCwgMHgzY2YpOwotCWZvciAoaSA9IDA7IGkgPD0gMHgxZjsgaSsrKSB7Ci0JCWlmIChpID09IDAgfHwgKGkgPiAyICYmIGkgPCA4KSB8fCBpID09IDB4MTAgfHwgaSA9PSAweDExCi0JCSAgICB8fCBpID09IDB4MTYpIHsKLQkJCW91dGIoaSwgMHgzZDQpOwotCQkJcHJpbnRrKCJDUiUwMng9JTAyeCAiLCBpLCBpbmIoMHgzZDUpKTsKLQkJfSBlbHNlCi0JCQlwcmludGsoIi0tLS0tLS0gIik7Ci0JCWlmIChpICUgMTYgPT0gMTUpCi0JCQlwcmludGsoIlxuIik7Ci0JfQotCW91dGIoMHgzMCwgMHgzY2UpOwotCW91dGIoaW5iKDB4M2NmKSAmIDB4YmYsIDB4M2NmKTsKLQotCXByaW50aygiXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDw9IDB4N2Y7IGkrKykgewotCQlvdXRiKGksIDB4M2NlKTsKLQkJcHJpbnRrKCJHUiUwMng9JTAyeCAiLCBpLCBpbmIoMHgzY2YpKTsKLQkJaWYgKGkgJSAxNiA9PSAxNSkKLQkJCXByaW50aygiXG4iKTsKLQl9Ci0KLQlwcmludGsoIlxuIik7Ci0JZm9yIChpID0gMDsgaSA8PSAweGZmOyBpKyspIHsKLQkJb3V0YihpLCAweDNjNCk7Ci0JCXByaW50aygiU1IlMDJ4PSUwMnggIiwgaSwgaW5iKDB4M2M1KSk7Ci0JCWlmIChpICUgMTYgPT0gMTUpCi0JCQlwcmludGsoIlxuIik7Ci0JfQotCi0JcHJpbnRrKCJcbiIpOwotCWZvciAoaSA9IDA7IGkgPD0gMHgxRjsgaSsrKSB7Ci0JCWluYigweDNkYSk7CS8vIG5leHQgYWNjZXNzIGlzIGluZGV4IQotCQlvdXRiKGksIDB4M2MwKTsKLQkJcHJpbnRrKCJBUiUwMng9JTAyeCAiLCBpLCBpbmIoMHgzYzEpKTsKLQkJaWYgKGkgJSAxNiA9PSAxNSkKLQkJCXByaW50aygiXG4iKTsKLQl9Ci0JcHJpbnRrKCJcbiIpOwotCi0JaW5iKDB4M0RBKTsJCS8vIHJlc2V0IGludGVybmFsIGZsYWcgdG8gM2MwIGluZGV4Ci0Jb3V0YigweDIwLCAweDNDMCk7CS8vIGVuYWJsZSBhdHRyCi0KLQlyZXR1cm47Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBTYXZlIFN0YXRlCi0vLwotLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hpbGUgYSBzd2l0Y2ggdG8gS0RfVEVYVCBpcyBpbiBwcm9ncmVzcywKLS8vIGJlZm9yZSBhbnkgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotc3RhdGljIHZvaWQgY3libGFmYl9zYXZlX3N0YXRlKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXN0cnVjdCBjeWJsYWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwotCWlmICh2ZXJib3NpdHkgPiAwKQotCQlvdXRwdXQoIlN3aXRjaGluZyB0byBLRF9URVhUXG4iKTsKLQlkaXNhYmxlZCA9IDA7Ci0JcmVnZHVtcChwYXIpOwotCWVuYWJsZV9tbWlvKCk7Ci0JcmV0dXJuOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8gUmVzdG9yZSBTdGF0ZQotLy8KLS8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoaWxlIGEgc3dpdGNoIHRvIEtEX0dSQVBISUNTIGlzIGluIHByb2dyZXNzLAotLy8gV2UgaGF2ZSB0byB0dXJuIG9uIHZnYSBzdHlsZSBwYW5uaW5nIHJlZ2lzdGVycyBhZ2FpbiBiZWNhdXNlIHRoZQotLy8gdHJpZGVudCBkcml2ZXIgb2YgWCBkb2VzIG5vdCBrbm93IGFib3V0IEdFMTAuCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgdm9pZCBjeWJsYWZiX3Jlc3RvcmVfc3RhdGUoc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JaWYgKHZlcmJvc2l0eSA+IDApCi0JCW91dHB1dCgiU3dpdGNoaW5nIHRvIEtEX0dSQVBISUNTXG4iKTsKLQlvdXQzMihHRTEwLCAwKTsKLQlkaXNhYmxlZCA9IDE7Ci0JcmV0dXJuOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8gU2V0IGhhcmR3YXJlIHRvIHJlcXVlc3RlZCB2aWRlbyBtb2RlCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IGN5YmxhZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgY3libGFmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKLQl1MzIgaHRvdGFsLCBoZGlzcGVuZCwgaHN5bmNzdGFydCwgaHN5bmNlbmQsIGhibGFua3N0YXJ0LAotCSAgICBoYmxhbmtlbmQsIHByZWVuZGZldGNoLCB2dG90YWwsIHZkaXNwZW5kLCB2c3luY3N0YXJ0LAotCSAgICB2c3luY2VuZCwgdmJsYW5rc3RhcnQsIHZibGFua2VuZDsKLQlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciA9ICZpbmZvLT52YXI7Ci0JaW50IGJwcCA9IHZhci0+Yml0c19wZXJfcGl4ZWw7Ci0JaW50IGk7Ci0KLQlLRF9HUkFQSElDU19SRVRVUk4oMCk7Ci0KLQlpZiAodmVyYm9zaXR5ID4gMCkKLQkJb3V0cHV0KCJTd2l0Y2hpbmcgdG8gbmV3IG1vZGU6ICIKLQkJICAgICAgICJmYnNldCAtZyAlZCAlZCAlZCAlZCAlZCAtdCAlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwKLQkJICAgICAgIHZhci0+eHJlcywgdmFyLT55cmVzLCB2YXItPnhyZXNfdmlydHVhbCwKLQkJICAgICAgIHZhci0+eXJlc192aXJ0dWFsLCB2YXItPmJpdHNfcGVyX3BpeGVsLCB2YXItPnBpeGNsb2NrLAotCQkgICAgICAgdmFyLT5sZWZ0X21hcmdpbiwgdmFyLT5yaWdodF9tYXJnaW4sIHZhci0+dXBwZXJfbWFyZ2luLAotCQkgICAgICAgdmFyLT5sb3dlcl9tYXJnaW4sIHZhci0+aHN5bmNfbGVuLCB2YXItPnZzeW5jX2xlbik7Ci0KLQlodG90YWwgPSAodmFyLT54cmVzICsgdmFyLT5sZWZ0X21hcmdpbiArIHZhci0+cmlnaHRfbWFyZ2luICsKLQkJICB2YXItPmhzeW5jX2xlbikgLyA4IC0gNTsKLQloZGlzcGVuZCA9IHZhci0+eHJlcyAvIDggLSAxOwotCWhzeW5jc3RhcnQgPSAodmFyLT54cmVzICsgdmFyLT5yaWdodF9tYXJnaW4pIC8gODsKLQloc3luY2VuZCA9IHZhci0+aHN5bmNfbGVuIC8gODsKLQloYmxhbmtzdGFydCA9IGhkaXNwZW5kICsgMTsKLQloYmxhbmtlbmQgPSBodG90YWwgKyAzOyAvLyBzaG91bGQgYmUgaHRvdGFsICsgNSwgYmlvcyBkb2VzIGl0IHRoaXMgd2F5Ci0JcHJlZW5kZmV0Y2ggPSAoKHZhci0+eHJlcyA+PiAzKSArIDEpICogKChicHAgKyAxKSA+PiAzKTsKLQotCXZ0b3RhbCA9IHZhci0+eXJlcyArIHZhci0+dXBwZXJfbWFyZ2luICsgdmFyLT5sb3dlcl9tYXJnaW4gKwotCQkJCQkJCXZhci0+dnN5bmNfbGVuIC0gMjsKLQl2ZGlzcGVuZCA9IHZhci0+eXJlcyAtIDE7Ci0JdnN5bmNzdGFydCA9IHZhci0+eXJlcyArIHZhci0+bG93ZXJfbWFyZ2luOwotCXZibGFua3N0YXJ0ID0gdmFyLT55cmVzOwotCXZibGFua2VuZCA9IHZ0b3RhbDsgLy8gc2hvdWxkIGJlIHZ0b3RhbCArIDIsIGJ1dCBiaW9zIGRvZXMgaXQgdGhpcyB3YXkKLQl2c3luY2VuZCA9IHZhci0+dnN5bmNfbGVuOwotCi0JZW5hYmxlX21taW8oKTsJCS8vIG5lY2Vzc2FyeSEgLi4uIGNoZWNrIFggLi4uCi0KLQl3cml0ZTNYNChDUjExLCByZWFkM1g0KENSMTEpICYgMHg3Rik7CS8vIHVubG9jayBjcjAwIC4uIGNyMDcKLQotCXdyaXRlM0NFKEdSMzAsIDgpOwotCi0JaWYgKChkaXNwbGF5dHlwZSA9PSBESVNQTEFZX0ZQKSAmJiB2YXItPnhyZXMgPCBuYXRpdmV4KSB7Ci0KLQkJLy8gc3RyZXRjaCBvciBjZW50ZXIgPwotCi0JCW91dDgoMHgzQzIsIDB4RUIpOwotCi0JCXdyaXRlM0NFKEdSMzAsIHJlYWQzQ0UoR1IzMCkgfCAweDgxKTsJLy8gc2hhZG93IG1vZGUgb24KLQotCQlpZiAoY2VudGVyKSB7Ci0JCQl3cml0ZTNDRShHUjUyLCAocmVhZDNDRShHUjUyKSAmIDB4N0MpIHwgMHg4MCk7Ci0JCQl3cml0ZTNDRShHUjUzLCAocmVhZDNDRShHUjUzKSAmIDB4N0MpIHwgMHg4MCk7Ci0JCX0gZWxzZSBpZiAoc3RyZXRjaCkgewotCQkJd3JpdGUzQ0UoR1I1RCwgMCk7Ci0JCQl3cml0ZTNDRShHUjUyLCAocmVhZDNDRShHUjUyKSAmIDB4N0MpIHwgMSk7Ci0JCQl3cml0ZTNDRShHUjUzLCAocmVhZDNDRShHUjUzKSAmIDB4N0MpIHwgMSk7Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCW91dDgoMHgzQzIsIDB4MkIpOwotCQl3cml0ZTNDRShHUjMwLCA4KTsKLQl9Ci0KLQkvLwotCS8vIFNldHVwIENSeHggcmVncwotCS8vCi0KLQl3cml0ZTNYNChDUjAwLCBodG90YWwgJiAweEZGKTsKLQl3cml0ZTNYNChDUjAxLCBoZGlzcGVuZCAmIDB4RkYpOwotCXdyaXRlM1g0KENSMDIsIGhibGFua3N0YXJ0ICYgMHhGRik7Ci0Jd3JpdGUzWDQoQ1IwMywgaGJsYW5rZW5kICYgMHgxRik7Ci0Jd3JpdGUzWDQoQ1IwNCwgaHN5bmNzdGFydCAmIDB4RkYpOwotCXdyaXRlM1g0KENSMDUsIChoc3luY2VuZCAmIDB4MUYpIHwgKChoYmxhbmtlbmQgJiAweDIwKSA8PCAyKSk7Ci0Jd3JpdGUzWDQoQ1IwNiwgdnRvdGFsICYgMHhGRik7Ci0Jd3JpdGUzWDQoQ1IwNywgKHZ0b3RhbCAmIDB4MTAwKSA+PiA4IHwKLQkJICAgICAgICh2ZGlzcGVuZCAmIDB4MTAwKSA+PiA3IHwKLQkJICAgICAgICh2c3luY3N0YXJ0ICYgMHgxMDApID4+IDYgfAotCQkgICAgICAgKHZibGFua3N0YXJ0ICYgMHgxMDApID4+IDUgfAotCQkgICAgICAgMHgxMCB8Ci0JCSAgICAgICAodnRvdGFsICYgMHgyMDApID4+IDQgfAotCQkgICAgICAgKHZkaXNwZW5kICYgMHgyMDApID4+IDMgfCAodnN5bmNzdGFydCAmIDB4MjAwKSA+PiAyKTsKLQl3cml0ZTNYNChDUjA4LCAwKTsKLQl3cml0ZTNYNChDUjA5LCAodmJsYW5rc3RhcnQgJiAweDIwMCkgPj4gNCB8IDB4NDAgfAkvLyBGSVggISEhCi0JCSAgICAgICAoKGluZm8tPnZhci52bW9kZSAmIEZCX1ZNT0RFX0RPVUJMRSkgPyAweDgwIDogMCkpOwotCXdyaXRlM1g0KENSMEEsIDApOwkvLyBJbml0IHRvIHNvbWUgcmVhc29uYWJsZSBkZWZhdWx0Ci0Jd3JpdGUzWDQoQ1IwQiwgMCk7CS8vIEluaXQgdG8gc29tZSByZWFzb25hYmxlIGRlZmF1bHQKLQl3cml0ZTNYNChDUjBDLCAwKTsJLy8gT2Zmc2V0IDAKLQl3cml0ZTNYNChDUjBELCAwKTsJLy8gT2Zmc2V0IDAKLQl3cml0ZTNYNChDUjBFLCAwKTsJLy8gSW5pdCB0byBzb21lIHJlYXNvbmFibGUgZGVmYXVsdAotCXdyaXRlM1g0KENSMEYsIDApOwkvLyBJbml0IHRvIHNvbWUgcmVhc29uYWJsZSBkZWZhdWx0Ci0Jd3JpdGUzWDQoQ1IxMCwgdnN5bmNzdGFydCAmIDB4RkYpOwotCXdyaXRlM1g0KENSMTEsICh2c3luY2VuZCAmIDB4MEYpKTsKLQl3cml0ZTNYNChDUjEyLCB2ZGlzcGVuZCAmIDB4RkYpOwotCXdyaXRlM1g0KENSMTMsICgoaW5mby0+dmFyLnhyZXNfdmlydHVhbCAqIGJwcCkgLyAoNCAqIDE2KSkgJiAweEZGKTsKLQl3cml0ZTNYNChDUjE0LCAweDQwKTsJLy8gZG91YmxlIHdvcmQgbW9kZQotCXdyaXRlM1g0KENSMTUsIHZibGFua3N0YXJ0ICYgMHhGRik7Ci0Jd3JpdGUzWDQoQ1IxNiwgdmJsYW5rZW5kICYgMHhGRik7Ci0Jd3JpdGUzWDQoQ1IxNywgMHhFMyk7Ci0Jd3JpdGUzWDQoQ1IxOCwgMHhGRik7Ci0JLy8JIENSMTk6IG5lZWRlZCBmb3IgaW50ZXJsYWNlZCBtb2RlcyAuLi4gaWdub3JlIGl0IGZvciBub3cKLQl3cml0ZTNYNChDUjFBLCAweDA3KTsJLy8gQXJiaXRyYXRpb24gQ29udHJvbCBDb3VudGVyIDEKLQl3cml0ZTNYNChDUjFCLCAweDA3KTsJLy8gQXJiaXRyYXRpb24gQ29udHJvbCBDb3VudGVyIDIKLQl3cml0ZTNYNChDUjFDLCAweDA3KTsJLy8gQXJiaXRyYXRpb24gQ29udHJvbCBDb3VudGVyIDMKLQl3cml0ZTNYNChDUjFELCAweDAwKTsJLy8gRG9uJ3Qga25vdywgZG9lc24ndCBodXJ0IDsgLSkKLQl3cml0ZTNYNChDUjFFLCAoaW5mby0+dmFyLnZtb2RlICYgRkJfVk1PREVfSU5URVJMQUNFRCkgPyAweDg0IDogMHg4MCk7Ci0JLy8JIENSMUY6IGRvIG5vdCBzZXQsIGNvbnRhaW5zIEJJT1MgaW5mbyBhYm91dCBtZW1zaXplCi0Jd3JpdGUzWDQoQ1IyMCwgMHgyMCk7CS8vIGVuYWJlIHdyIGJ1ZiwgZGlzYWJsZSAxNmJpdCBwbGFuYXIgbW9kZQotCXdyaXRlM1g0KENSMjEsIDB4MjApOwkvLyBlbmFibGUgbGluZWFyIG1lbW9yeSBhY2Nlc3MKLQkvLwkgQ1IyMjogUk8gY3B1IGxhdGNoIHJlYWRiYWNrCi0JLy8JIENSMjM6ID8/PwotCS8vCSBDUjI0OiBSTyBBUiBmbGFnIHN0YXRlCi0JLy8JIENSMjU6IFJBTURBQyBydyB0aW1pbmcsIHBjbGsgYnVmZmVyIHRyaXN0YXRlIGNvbnRyb2wgPz8/PwotCS8vCSBDUjI2OiA/Pz8KLQl3cml0ZTNYNChDUjI3LCAodmRpc3BlbmQgJiAweDQwMCkgPj4gNiB8Ci0JCSAgICAgICAodnN5bmNzdGFydCAmIDB4NDAwKSA+PiA1IHwKLQkJICAgICAgICh2YmxhbmtzdGFydCAmIDB4NDAwKSA+PiA0IHwKLQkJICAgICAgICh2dG90YWwgJiAweDQwMCkgPj4gMyB8Ci0JCSAgICAgICAweDgpOwotCS8vCSBDUjI4OiA/Pz8KLQl3cml0ZTNYNChDUjI5LCAocmVhZDNYNChDUjI5KSAmIDB4Q0YpIHwgKCgoKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKgotCQkJYnBwKSAvICg0ICogMTYpKSAmIDB4MzAwKSA+PiA0KSk7Ci0Jd3JpdGUzWDQoQ1IyQSwgcmVhZDNYNChDUjJBKSB8IDB4NDApOwotCXdyaXRlM1g0KENSMkIsIChodG90YWwgJiAweDEwMCkgPj4gOCB8Ci0JCSAgICAgICAoaGRpc3BlbmQgJiAweDEwMCkgPj4gNyB8Ci0JCSAgICAgICAvLyAoMHgwMCAmIDB4MTAwKSA+PiA2IHwgICBoaW50ZXJsYWNlIHBhcmEgYml0IDggPz8/Ci0JCSAgICAgICAoaHN5bmNzdGFydCAmIDB4MTAwKSA+PiA1IHwKLQkJICAgICAgIChoYmxhbmtzdGFydCAmIDB4MTAwKSA+PiA0KTsKLQkvLwkgQ1IyQzogPz8/Ci0JLy8JIENSMkQ6IGluaXRpYWxpemVkIGluIGN5YmxhZmJfc2V0dXBfR0UoKQotCXdyaXRlM1g0KENSMkYsIDB4OTIpOwkvLyBjb25zZXJ2YXRpdmUsIGJldHRlciBzaWduYWwgcXVhbGl0eQotCS8vCSBDUjMwOiByZXNlcnZlZAotCS8vCSBDUjMxOiByZXNlcnZlZAotCS8vCSBDUjMyOiByZXNlcnZlZAotCS8vCSBDUjMzOiByZXNlcnZlZAotCS8vCSBDUjM0OiBkaXNhYmxlZCBpbiBDUjM2Ci0JLy8JIENSMzU6IGRpc2FibGVkIGluIENSMzYKLQkvLwkgQ1IzNjogaW5pdGlhbGl6ZWQgaW4gY3libGFmYl9zZXR1cF9HRQotCS8vCSBDUjM3OiBpMmMsIGlnbm9yZSBmb3Igbm93Ci0Jd3JpdGUzWDQoQ1IzOCwgKGJwcCA9PSA4KSA/IDB4MDAgOgkvLwotCQkgICAgICAgKGJwcCA9PSAxNikgPyAweDA1IDoJLy8gaGlnaGNvbG9yCi0JCSAgICAgICAoYnBwID09IDI0KSA/IDB4MjkgOgkvLyBwYWNrZWQgMjRiaXQgdHJ1ZWNvbG9yCi0JCSAgICAgICAoYnBwID09IDMyKSA/IDB4MDkgOiAwKTsgLy8gdHJ1ZWNvbG9yLCAxNiBiaXQgcGl4ZWxidXMKLQl3cml0ZTNYNChDUjM5LCAweDAxIHwJLy8gTU1JTyBlbmFibGUKLQkJICAgICAgIChwY2lyYiA/IDB4MDIgOiAwKSB8CS8vIHBjaSByZWFkIGJ1cnN0IGVuYWJsZQotCQkgICAgICAgKHBjaXdiID8gMHgwNCA6IDApKTsJLy8gcGNpIHdyaXRlIGJ1cnN0IGVuYWJsZQotCXdyaXRlM1g0KENSNTUsIDB4MUYgfCAvLyBwY2kgY2xvY2tzICogMiBmb3IgU1RPUCMgZHVyaW5nIDFzdCBkYXRhIHBoYXNlCi0JCSAgICAgICAocGNpcnIgPyAweDQwIDogMCkgfAkvLyBwY2kgcmVhZCByZXRyeSBlbmFibGUKLQkJICAgICAgIChwY2l3ciA/IDB4ODAgOiAwKSk7CS8vIHBjaSB3cml0ZSByZXRyeSBlbmFibGUKLQl3cml0ZTNYNChDUjU2LCBwcmVlbmRmZXRjaCA+PiA4IDwgMiA/IChwcmVlbmRmZXRjaCA+PiA4ICYgMHgwMSkgfCAyCi0JCQkJCSAgICA6IDApOwotCXdyaXRlM1g0KENSNTcsIHByZWVuZGZldGNoID4+IDggPCAyID8gcHJlZW5kZmV0Y2ggJiAweGZmIDogMCk7Ci0Jd3JpdGUzWDQoQ1I1OCwgMHg4Mik7CS8vIEJpb3MgZG9lcyB0aGlzIC4uLi4gZG9uJ3Qga25vdyBtb3JlCi0JLy8KLQkvLyBTZXR1cCBTUnh4IHJlZ3MKLQkvLwotCXdyaXRlM0M0KFNSMDAsIDMpOwotCXdyaXRlM0M0KFNSMDEsIDEpOwkvL3NldCBjaGFyIGNsb2NrIDggZG90cyB3aWRlCi0Jd3JpdGUzQzQoU1IwMiwgMHgwRik7CS8vZW5hYmxlIDQgbWFwcyBuZWVkZWQgaW4gY2hhaW40IG1vZGUKLQl3cml0ZTNDNChTUjAzLCAwKTsJLy9ubyBjaGFyYWN0ZXIgbWFwIHNlbGVjdAotCXdyaXRlM0M0KFNSMDQsIDB4MEUpOwkvL21lbW9yeSBtb2RlOiBleHQgbWVtLCBldmVuLCBjaGFpbjQKLQotCW91dDgoMHgzQzQsIDB4MGIpOwotCWluOCgweDNDNSk7CQkvLyBTZXQgTkVXIG1vZGUKLQl3cml0ZTNDNChTUjBELCAweDAwKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQotCXNldF92Y2xrKHBhciwgKGJwcCA9PSAzMiA/IDIwMDAwMDAwMCA6IDEwMDAwMDAwMCkKLQkJCQkJLyBpbmZvLT52YXIucGl4Y2xvY2spOwkvL1NSMTgsIFNSMTkKLQotCS8vCi0JLy8gU2V0dXAgR1J4eCByZWdzCi0JLy8KLQl3cml0ZTNDRShHUjAwLCAweDAwKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQl3cml0ZTNDRShHUjAxLCAweDAwKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQl3cml0ZTNDRShHUjAyLCAweDAwKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQl3cml0ZTNDRShHUjAzLCAweDAwKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQl3cml0ZTNDRShHUjA0LCAweDAwKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQl3cml0ZTNDRShHUjA1LCAweDQwKTsJLy8gbm8gQ0dBIGNvbXBhdCwgYWxsb3cgMjU2IGNvbAotCXdyaXRlM0NFKEdSMDYsIDB4MDUpOwkvLyBncmFwaGljcyBtb2RlCi0Jd3JpdGUzQ0UoR1IwNywgMHgwRik7CS8vIHBsYW5lcz8KLQl3cml0ZTNDRShHUjA4LCAweEZGKTsJLy8gdGVzdCAuLi4gY2hlY2sKLQl3cml0ZTNDRShHUjBGLCAoYnBwID09IDMyKSA/IDB4MUEgOiAweDEyKTsgLy8gdmNsayAvIDIgaWYgMzJicHAsIGNoYWluNAotCXdyaXRlM0NFKEdSMjAsIDB4QzApOwkvLyB0ZXN0IC4uLiBjaGVjawotCXdyaXRlM0NFKEdSMkYsIDB4QTApOwkvLyBQQ0xLID0gVkNMSywgbm8gc2tldywKLQotCS8vCi0JLy8gU2V0dXAgQVJ4eCByZWdzCi0JLy8KLQlmb3IgKGkgPSAwOyBpIDwgMHgxMDsgaSsrKQkvLyBzZXQgQVIwMCAuLiBBUjBmCi0JCXdyaXRlM0MwKGksIGkpOwotCXdyaXRlM0MwKEFSMTAsIDB4NDEpOwkvLyBncmFwaGljcyBtb2RlIGFuZCBzdXBwb3J0IDI1NiBjb2xvciBtb2RlcwotCXdyaXRlM0MwKEFSMTIsIDB4MEYpOwkvLyBwbGFuZXMKLQl3cml0ZTNDMChBUjEzLCAwKTsJLy8gaG9yaXpvbnRhbCBwZWwgcGFubmluZwotCWluOCgweDNEQSk7CQkvLyByZXNldCBpbnRlcm5hbCBmbGFnIHRvIDNjMCBpbmRleAotCW91dDgoMHgzQzAsIDB4MjApOwkvLyBlbmFibGUgYXR0cgotCi0JLy8KLQkvLyBTZXR1cCBoaWRkZW4gUkFNREFDIGNvbW1hbmQgcmVnaXN0ZXIKLQkvLwotCWluOCgweDNDOCk7CQkvLyB0aGVzZSByZWFkcyBhcmUKLQlpbjgoMHgzQzYpOwkJLy8gbmVjZXNzYXJ5IHRvCi0JaW44KDB4M0M2KTsJCS8vIHVubWFzayB0aGUgUkFNREFDCi0JaW44KDB4M0M2KTsJCS8vIGNvbW1hbmQgcmVnLCBvdGhlcndpc2UKLQlpbjgoMHgzQzYpOwkJLy8gd2Ugd291bGQgd3JpdGUgdGhlIHBpeGVsbWFzayByZWchCi0Jb3V0OCgweDNDNiwgKGJwcCA9PSA4KSA/IDB4MDAgOiAvLyAyNTYgY29sb3JzCi0JICAgICAoYnBwID09IDE1KSA/IDB4MTAgOgkvLwotCSAgICAgKGJwcCA9PSAxNikgPyAweDMwIDoJLy8gaGljb2xvcgotCSAgICAgKGJwcCA9PSAyNCkgPyAweEQwIDoJLy8gdHJ1ZWNvbG9yCi0JICAgICAoYnBwID09IDMyKSA/IDB4RDAgOiAwKTsJLy8gdHJ1ZWNvbG9yCi0JaW44KDB4M0M4KTsKLQotCS8vCi0JLy8gR1IzMSBpcyBub3QgbWVudGlvbmVkIGluIHRoZSBkYXRhc2hlZXQKLQkvLwotCWlmIChkaXNwbGF5dHlwZSA9PSBESVNQTEFZX0ZQKQotCQl3cml0ZTNDRShHUjMxLCAocmVhZDNDRShHUjMxKSAmIDB4OEYpIHwKLQkJCSAoKGluZm8tPnZhci55cmVzID4gMTAyNCkgPyAweDUwIDoKLQkJCSAgKGluZm8tPnZhci55cmVzID4gNzY4KSA/IDB4MzAgOgotCQkJICAoaW5mby0+dmFyLnlyZXMgPiA2MDApID8gMHgyMCA6Ci0JCQkgIChpbmZvLT52YXIueXJlcyA+IDQ4MCkgPyAweDEwIDogMCkpOwotCi0JaW5mby0+Zml4LnZpc3VhbCA9IChicHAgPT0gOCkgPyBGQl9WSVNVQUxfUFNFVURPQ09MT1IKLQkJCQkgICAgICA6IEZCX1ZJU1VBTF9UUlVFQ09MT1I7Ci0JaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gaW5mby0+dmFyLnhyZXNfdmlydHVhbCAqIChicHAgPj4gMyk7Ci0JaW5mby0+Y21hcC5sZW4gPSAoYnBwID09IDgpID8gMjU2IDogMTY7Ci0KLQkvLwotCS8vIGluaXQgYWNjZWxlcmF0aW9uIGVuZ2luZQotCS8vCi0JY3libGFmYl9zZXR1cF9HRShpbmZvLT52YXIueHJlc192aXJ0dWFsLCBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpOwotCi0JLy8KLQkvLyBTZXQvY2xlYXIgZmxhZ3MgdG8gYWxsb3cgcHJvcGVyIHNjcm9sbCBtb2RlIHNlbGVjdGlvbi4KLQkvLwotCWlmICh2YXItPnhyZXMgPT0gdmFyLT54cmVzX3ZpcnR1YWwpCi0JCWluZm8tPmZsYWdzICY9IH5GQklORk9fSFdBQ0NFTF9YUEFOOwotCWVsc2UKLQkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfWFBBTjsKLQotCWlmICh2YXItPnlyZXMgPT0gdmFyLT55cmVzX3ZpcnR1YWwpCi0JCWluZm8tPmZsYWdzICY9IH5GQklORk9fSFdBQ0NFTF9ZUEFOOwotCWVsc2UKLQkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfWVBBTjsKLQotCWlmIChpbmZvLT5maXguc21lbV9sZW4gIT0KLQkgICAgdmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPnlyZXNfdmlydHVhbCAqIGJwcCAvIDgpCi0JCWluZm8tPmZsYWdzICY9IH5GQklORk9fSFdBQ0NFTF9ZV1JBUDsKLQllbHNlCi0JCWluZm8tPmZsYWdzIHw9IEZCSU5GT19IV0FDQ0VMX1lXUkFQOwotCi0JcmVnZHVtcChwYXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8vPT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8gU2V0IG9uZSBjb2xvciByZWdpc3RlcgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyBpbnQgY3libGFmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCi0JCQkgICAgIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwKLQkJCSAgICAgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JaW50IGJwcCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKLQotCUtEX0dSQVBISUNTX1JFVFVSTigwKTsKLQotCWlmIChyZWdubyA+PSBpbmZvLT5jbWFwLmxlbikKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoYnBwID09IDgpIHsKLQkJb3V0OCgweDNDNiwgMHhGRik7Ci0JCW91dDgoMHgzQzgsIHJlZ25vKTsKLQkJb3V0OCgweDNDOSwgcmVkID4+IDEwKTsKLQkJb3V0OCgweDNDOSwgZ3JlZW4gPj4gMTApOwotCQlvdXQ4KDB4M0M5LCBibHVlID4+IDEwKTsKLQotCX0gZWxzZSBpZiAocmVnbm8gPCAxNikgewotCQlpZiAoYnBwID09IDE2KQkvLyBSR0IgNTY1Ci0JCQkoKHUzMiAqKSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbcmVnbm9dID0KLQkJCQkocmVkICYgMHhGODAwKSB8Ci0JCQkJKChncmVlbiAmIDB4RkMwMCkgPj4gNSkgfAotCQkJCSgoYmx1ZSAmIDB4RjgwMCkgPj4gMTEpOwotCQllbHNlIGlmIChicHAgPT0gMzIpCS8vIEFSR0IgODg4OAotCQkJKCh1MzIgKikgaW5mby0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9Ci0JCQkJKCh0cmFuc3AgJiAweEZGMDApIDw8IDE2KSB8Ci0JCQkJKChyZWQgJiAweEZGMDApIDw8IDgpIHwKLQkJCQkoKGdyZWVuICYgMHhGRjAwKSkgfCAoKGJsdWUgJiAweEZGMDApID4+IDgpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBUcnkgYmxhbmtpbmcgdGhlIHNjcmVlbi4gRm9yIGZsYXQgcGFuZWxzIGl0IGRvZXMgbm90aGluZwotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IGN5YmxhZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCXVuc2lnbmVkIGNoYXIgUE1Db250LCBEUE1TQ29udDsKLQotCUtEX0dSQVBISUNTX1JFVFVSTigwKTsKLQotCWlmIChkaXNwbGF5dHlwZSA9PSBESVNQTEFZX0ZQKQotCQlyZXR1cm4gMDsKLQotCW91dDgoMHg4M0M4LCAweDA0KTsJLy8gRFBNUyBDb250cm9sCi0JUE1Db250ID0gaW44KDB4ODNDNikgJiAweEZDOwotCi0JRFBNU0NvbnQgPSByZWFkM0NFKEdSMjMpICYgMHhGQzsKLQotCXN3aXRjaCAoYmxhbmtfbW9kZSkgewotCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoJLy8gU2NyZWVuOiBPbiwgSFN5bmM6IE9uLCBWU3luYzogT24KLQljYXNlIEZCX0JMQU5LX05PUk1BTDoJLy8gU2NyZWVuOiBPZmYsIEhTeW5jOiBPbiwgVlN5bmM6IE9uCi0JCVBNQ29udCB8PSAweDAzOwotCQlEUE1TQ29udCB8PSAweDAwOwotCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CS8vIFNjcmVlbjogT2ZmLCBIU3luYzogT2ZmLCBWU3luYzogT24KLQkJUE1Db250IHw9IDB4MDI7Ci0JCURQTVNDb250IHw9IDB4MDE7Ci0JCWJyZWFrOwotCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoJLy8gU2NyZWVuOiBPZmYsIEhTeW5jOiBPbiwgVlN5bmM6IE9mZgotCQlQTUNvbnQgfD0gMHgwMjsKLQkJRFBNU0NvbnQgfD0gMHgwMjsKLQkJYnJlYWs7Ci0JY2FzZSBGQl9CTEFOS19QT1dFUkRPV046CS8vIFNjcmVlbjogT2ZmLCBIU3luYzogT2ZmLCBWU3luYzogT2ZmCi0JCVBNQ29udCB8PSAweDAwOwotCQlEUE1TQ29udCB8PSAweDAzOwotCQlicmVhazsKLQl9Ci0KLQl3cml0ZTNDRShHUjIzLCBEUE1TQ29udCk7Ci0Jb3V0OCgweDgzQzgsIDQpOwotCW91dDgoMHg4M0M2LCBQTUNvbnQpOwotCS8vCi0JLy8gbGV0IGZiY29uIGRvIGEgc29mdGJsYW5rIGZvciB1cwotCS8vCi0JcmV0dXJuIChibGFua19tb2RlID09IEZCX0JMQU5LX05PUk1BTCkgPyAxIDogMDsKLX0KLQotc3RhdGljIHN0cnVjdCBmYl9vcHMgY3libGFmYl9vcHMgX19kZXZpbml0ZGF0YSA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkuZmJfc2V0Y29scmVnID0gY3libGFmYl9zZXRjb2xyZWcsCi0JLmZiX3Bhbl9kaXNwbGF5ID0gY3libGFmYl9wYW5fZGlzcGxheSwKLQkuZmJfYmxhbmsgPSBjeWJsYWZiX2JsYW5rLAotCS5mYl9jaGVja192YXIgPSBjeWJsYWZiX2NoZWNrX3ZhciwKLQkuZmJfc2V0X3BhciA9IGN5YmxhZmJfc2V0X3BhciwKLQkuZmJfZmlsbHJlY3QgPSBjeWJsYWZiX2ZpbGxyZWN0LAotCS5mYl9jb3B5YXJlYSA9IGN5YmxhZmJfY29weWFyZWEsCi0JLmZiX2ltYWdlYmxpdCA9IGN5YmxhZmJfaW1hZ2VibGl0LAotCS5mYl9zeW5jID0gY3libGFmYl9zeW5jLAotCS5mYl9yZXN0b3JlX3N0YXRlID0gY3libGFmYl9yZXN0b3JlX3N0YXRlLAotCS5mYl9zYXZlX3N0YXRlID0gY3libGFmYl9zYXZlX3N0YXRlLAotfTsKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIGdldHN0YXJ0dXBtb2RlKCkgZGVjaWRlcyBhYm91dCB0aGUgaW5pdGFsIHZpZGVvIG1vZGUKLS8vCi0vLyBUaGVyZSBpcyBubyByZWFzb24gdG8gdXNlIG1vZGVkYiwgYSBsb3Qgb2YgdmlkZW8gbW9kZXMgdGhlcmUgd291bGQKLS8vIG5lZWQgYWx0ZXJlZCB0aW1pbmdzIHRvIGRpc3BsYXkgY29ycmVjdGx5LiBTbyBJIGRlY2lkZWQgdGhhdCBpdCBpcyBtdWNoCi0vLyBiZXR0ZXIgdG8gcHJvdmlkZSBhIGxpbWl0ZWQgb3B0aW1pemVkIHNldCBvZiBtb2RlcyBwbHVzIHRoZSBvcHRpb24gb2YKLS8vIHVzaW5nIHRoZSBtb2RlIGluIGVmZmVjdCBhdCBzdGFydHVwIHRpbWUgKG1pZ2h0IGJlIHNlbGVjdGVkIHVzaW5nIHRoZQotLy8gdmdhPT8/PyBwYXJhbWV0ZXIpLiBBZnRlciB0aGF0IHRoZSB1c2VyIG1pZ2h0IHVzZSBmYnNldCB0byBzZWxlY3QgYW55Ci0vLyBtb2RlIGhlIGxpa2VzLCBjaGVja192YXIgd2lsbCBub3QgdHJ5IHRvIGFsdGVyIGdlb21ldHJ5IHBhcmFtZXRlcnMgYXMKLS8vIGl0IHdvdWxkIGJlIG5lY2Vzc2FyeSBvdGhlcndpc2UuCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRzdGFydHVwbW9kZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKLXsKLQl1MzIgaHRvdGFsLCBoZGlzcGVuZCwgaHN5bmNzdGFydCwgaHN5bmNlbmQsIGhibGFua3N0YXJ0LCBoYmxhbmtlbmQsCi0JICAgIHZ0b3RhbCwgdmRpc3BlbmQsIHZzeW5jc3RhcnQsIHZzeW5jZW5kLCB2YmxhbmtzdGFydCwgdmJsYW5rZW5kLAotCSAgICBjcjAwLCBjcjAxLCBjcjAyLCBjcjAzLCBjcjA0LCBjcjA1LCBjcjJiLAotCSAgICBjcjA2LCBjcjA3LCBjcjA5LCBjcjEwLCBjcjExLCBjcjEyLCBjcjE1LCBjcjE2LCBjcjI3LAotCSAgICBjcjM4LCBzcjBkLCBzcjE4LCBzcjE5LCBncjBmLCBmaSwgcHhjbGtkaXYsIHZjbGtkaXYsIHRtcCwgaTsKLQotCXN0cnVjdCBtb2R1cyB7Ci0JCWludCB4cmVzOyBpbnQgdnhyZXM7IGludCB5cmVzOyBpbnQgdnlyZXM7Ci0JCWludCBicHA7IGludCBweGNsazsKLQkJaW50IGxlZnRfbWFyZ2luOyBpbnQgcmlnaHRfbWFyZ2luOwotCQlpbnQgdXBwZXJfbWFyZ2luOyBpbnQgbG93ZXJfbWFyZ2luOwotCQlpbnQgaHN5bmNfbGVuOyBpbnQgdnN5bmNfbGVuOwotCX0gbW9kZWRiWzVdID0gewotCQl7Ci0JCTAsIDIwNDgsIDAsIDQwOTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9LCB7Ci0JCTY0MCwgMjA0OCwgNDgwLCA0MDk2LCAwLCAwLCAtNDAsIDI0LCAxNywgMCwgMjE2LCAzfSwgewotCQk4MDAsIDIwNDgsIDYwMCwgNDA5NiwgMCwgMCwgOTYsIDI0LCAxNCwgMCwgMTM2LCAxMX0sIHsKLQkJMTAyNCwgMjA0OCwgNzY4LCA0MDk2LCAwLCAwLCAxNDQsIDI0LCAyOSwgMCwgMTIwLCAzfSwgewotCQkxMjgwLCAyMDQ4LCAxMDI0LCA0MDk2LCAwLCAwLCAyMzIsIDE2LCAzOSwgMCwgMTYwLCAzfQotCX07Ci0KLQlvdXRiKDB4MDAsIDB4M2Q0KTsgY3IwMCA9IGluYigweDNkNSk7Ci0Jb3V0YigweDAxLCAweDNkNCk7IGNyMDEgPSBpbmIoMHgzZDUpOwotCW91dGIoMHgwMiwgMHgzZDQpOyBjcjAyID0gaW5iKDB4M2Q1KTsKLQlvdXRiKDB4MDMsIDB4M2Q0KTsgY3IwMyA9IGluYigweDNkNSk7Ci0Jb3V0YigweDA0LCAweDNkNCk7IGNyMDQgPSBpbmIoMHgzZDUpOwotCW91dGIoMHgwNSwgMHgzZDQpOyBjcjA1ID0gaW5iKDB4M2Q1KTsKLQlvdXRiKDB4MDYsIDB4M2Q0KTsgY3IwNiA9IGluYigweDNkNSk7Ci0Jb3V0YigweDA3LCAweDNkNCk7IGNyMDcgPSBpbmIoMHgzZDUpOwotCW91dGIoMHgwOSwgMHgzZDQpOyBjcjA5ID0gaW5iKDB4M2Q1KTsKLQlvdXRiKDB4MTAsIDB4M2Q0KTsgY3IxMCA9IGluYigweDNkNSk7Ci0Jb3V0YigweDExLCAweDNkNCk7IGNyMTEgPSBpbmIoMHgzZDUpOwotCW91dGIoMHgxMiwgMHgzZDQpOyBjcjEyID0gaW5iKDB4M2Q1KTsKLQlvdXRiKDB4MTUsIDB4M2Q0KTsgY3IxNSA9IGluYigweDNkNSk7Ci0Jb3V0YigweDE2LCAweDNkNCk7IGNyMTYgPSBpbmIoMHgzZDUpOwotCW91dGIoMHgyNywgMHgzZDQpOyBjcjI3ID0gaW5iKDB4M2Q1KTsKLQlvdXRiKDB4MmIsIDB4M2Q0KTsgY3IyYiA9IGluYigweDNkNSk7Ci0Jb3V0YigweDM4LCAweDNkNCk7IGNyMzggPSBpbmIoMHgzZDUpOwotCi0Jb3V0YigweDBiLCAweDNjNCk7Ci0JaW5iKDB4M2M1KTsKLQotCW91dGIoMHgwZCwgMHgzYzQpOyBzcjBkID0gaW5iKDB4M2M1KTsKLQlvdXRiKDB4MTgsIDB4M2M0KTsgc3IxOCA9IGluYigweDNjNSk7Ci0Jb3V0YigweDE5LCAweDNjNCk7IHNyMTkgPSBpbmIoMHgzYzUpOwotCW91dGIoMHgwZiwgMHgzY2UpOyBncjBmID0gaW5iKDB4M2NmKTsKLQotCWh0b3RhbCA9IGNyMDAgfCAoY3IyYiAmIDB4MDEpIDw8IDg7Ci0JaGRpc3BlbmQgPSBjcjAxIHwgKGNyMmIgJiAweDAyKSA8PCA3OwotCWhibGFua3N0YXJ0ID0gY3IwMiB8IChjcjJiICYgMHgxMCkgPDwgNDsKLQloYmxhbmtlbmQgPSAoY3IwMyAmIDB4MWYpIHwgKGNyMDUgJiAweDgwKSA+PiAyOwotCWhzeW5jc3RhcnQgPSBjcjA0IHwgKGNyMmIgJiAweDA4KSA8PCA1OwotCWhzeW5jZW5kID0gY3IwNSAmIDB4MWY7Ci0KLQltb2RlZGJbMF0ueHJlcyA9IGhibGFua3N0YXJ0ICogODsKLQltb2RlZGJbMF0uaHN5bmNfbGVuID0gaHN5bmNlbmQgKiA4OwotCW1vZGVkYlswXS5yaWdodF9tYXJnaW4gPSBoc3luY3N0YXJ0ICogOCAtIG1vZGVkYlswXS54cmVzOwotCW1vZGVkYlswXS5sZWZ0X21hcmdpbiA9IChodG90YWwgKyA1KSAqIDggLSBtb2RlZGJbMF0ueHJlcyAtCi0JICAgIG1vZGVkYlswXS5yaWdodF9tYXJnaW4gLSBtb2RlZGJbMF0uaHN5bmNfbGVuOwotCi0JdnRvdGFsID0gY3IwNiB8IChjcjA3ICYgMHgwMSkgPDwgOCB8IChjcjA3ICYgMHgyMCkgPDwgNAotCSAgICB8IChjcjI3ICYgMHg4MCkgPDwgMzsKLQl2ZGlzcGVuZCA9IGNyMTIgfCAoY3IwNyAmIDB4MDIpIDw8IDcgfCAoY3IwNyAmIDB4NDApIDw8IDMKLQkgICAgfCAoY3IyNyAmIDB4MTApIDw8IDY7Ci0JdnN5bmNzdGFydCA9IGNyMTAgfCAoY3IwNyAmIDB4MDQpIDw8IDYgfCAoY3IwNyAmIDB4ODApIDw8IDIKLQkgICAgfCAoY3IyNyAmIDB4MjApIDw8IDU7Ci0JdnN5bmNlbmQgPSBjcjExICYgMHgwZjsKLQl2YmxhbmtzdGFydCA9IGNyMTUgfCAoY3IwNyAmIDB4MDgpIDw8IDUgfCAoY3IwOSAmIDB4MjApIDw8IDQKLQkgICAgfCAoY3IyNyAmIDB4NDApIDw8IDQ7Ci0JdmJsYW5rZW5kID0gY3IxNjsKLQotCW1vZGVkYlswXS55cmVzID0gdmRpc3BlbmQgKyAxOwotCW1vZGVkYlswXS52c3luY19sZW4gPSB2c3luY2VuZDsKLQltb2RlZGJbMF0ubG93ZXJfbWFyZ2luID0gdnN5bmNzdGFydCAtIG1vZGVkYlswXS55cmVzOwotCW1vZGVkYlswXS51cHBlcl9tYXJnaW4gPSB2dG90YWwgLSBtb2RlZGJbMF0ueXJlcyAtCi0JICAgIG1vZGVkYlswXS5sb3dlcl9tYXJnaW4gLSBtb2RlZGJbMF0udnN5bmNfbGVuICsgMjsKLQotCXRtcCA9IGNyMzggJiAweDNjOwotCW1vZGVkYlswXS5icHAgPSB0bXAgPT0gMCA/IDggOiB0bXAgPT0gNCA/IDE2IDogdG1wID09IDI4ID8gMjQgOgotCSAgICB0bXAgPT0gOCA/IDMyIDogODsKLQotCWZpID0gKCg1ODY0NzI3ICogKHNyMTggKyA4KSkgLwotCSAgICAgICgoKHNyMTkgJiAweDNmKSArIDIpICogKDEgPDwgKChzcjE5ICYgMHhjMCkgPj4gNikpKSkgPj4gMTI7Ci0JcHhjbGtkaXYgPSAoKGdyMGYgJiAweDA4KSA+PiAzIHwgKGdyMGYgJiAweDQwKSA+PiA1KSArIDE7Ci0JdG1wID0gc3IwZCAmIDB4MDY7Ci0JdmNsa2RpdiA9IHRtcCA9PSAwID8gMiA6IHRtcCA9PSAyID8gNCA6IHRtcCA9PSA0ID8gOCA6IDM7IC8vICogMiAhCi0JbW9kZWRiWzBdLnB4Y2xrID0gKCgxMDAwMDAwMDAgKiBweGNsa2RpdiAqIHZjbGtkaXYpID4+IDEpIC8gZmk7Ci0KLQlpZiAodmVyYm9zaXR5ID4gMCkKLQkJb3V0cHV0KCJkZXRlY3RlZCBzdGFydHVwIG1vZGU6ICIKLQkJICAgICAgICJmYnNldCAtZyAlZCAlZCAlZCA/Pz8gJWQgLXQgJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsCi0JCSAgICAgICBtb2RlZGJbMF0ueHJlcywgbW9kZWRiWzBdLnlyZXMsIG1vZGVkYlswXS54cmVzLAotCQkgICAgICAgbW9kZWRiWzBdLmJwcCwgbW9kZWRiWzBdLnB4Y2xrLCBtb2RlZGJbMF0ubGVmdF9tYXJnaW4sCi0JCSAgICAgICBtb2RlZGJbMF0ucmlnaHRfbWFyZ2luLCBtb2RlZGJbMF0udXBwZXJfbWFyZ2luLAotCQkgICAgICAgbW9kZWRiWzBdLmxvd2VyX21hcmdpbiwgbW9kZWRiWzBdLmhzeW5jX2xlbiwKLQkJICAgICAgIG1vZGVkYlswXS52c3luY19sZW4pOwotCi0JLy8KLQkvLyBXZSB1c2UgdGhpcyBnb3RvIHRhcmdldCBpbiBjYXNlIG9mIGEgZmFpbGVkIGNoZWNrX3Zhci4gTm8sIEkgcmVhbGx5Ci0JLy8gZG8gbm90IHdhbnQgdG8gZG8gaXQgaW4gYW5vdGhlciB3YXkhCi0JLy8KLQotICAgICAgdHJ5YWdhaW46Ci0KLQlpID0gKG1vZGUgPT0gTlVMTCkgPyAwIDoKLQkgICAgIXN0cm5jbXAobW9kZSwgIjY0MHg0ODAiLCA3KSA/IDEgOgotCSAgICAhc3RybmNtcChtb2RlLCAiODAweDYwMCIsIDcpID8gMiA6Ci0JICAgICFzdHJuY21wKG1vZGUsICIxMDI0eDc2OCIsIDgpID8gMyA6Ci0JICAgICFzdHJuY21wKG1vZGUsICIxMjgweDEwMjQiLCA5KSA/IDQgOiAwOwotCi0JcmVmID0gKHJlZiA8IDUwKSA/IDUwIDogKHJlZiA+IDg1KSA/IDg1IDogcmVmOwotCi0JaWYgKGkgPT0gMCkgewotCQlpbmZvLT52YXIucGl4Y2xvY2sgPSBtb2RlZGJbaV0ucHhjbGs7Ci0JCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9IG1vZGVkYltpXS5icHA7Ci0JfSBlbHNlIHsKLQkJaW5mby0+dmFyLnBpeGNsb2NrID0gKDEwMDAwMDAwMCAvCi0JCQkJICAgICAgKChtb2RlZGJbaV0ubGVmdF9tYXJnaW4gKwotCQkJCQltb2RlZGJbaV0ueHJlcyArCi0JCQkJCW1vZGVkYltpXS5yaWdodF9tYXJnaW4gKwotCQkJCQltb2RlZGJbaV0uaHN5bmNfbGVuKSAqCi0JCQkJICAgICAgIChtb2RlZGJbaV0udXBwZXJfbWFyZ2luICsKLQkJCQkJbW9kZWRiW2ldLnlyZXMgKwotCQkJCQltb2RlZGJbaV0ubG93ZXJfbWFyZ2luICsKLQkJCQkJbW9kZWRiW2ldLnZzeW5jX2xlbikgKiByZWYgLyAxMDAwMCkpOwotCQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwgPSBicHA7Ci0JfQotCi0JaW5mby0+dmFyLmxlZnRfbWFyZ2luID0gbW9kZWRiW2ldLmxlZnRfbWFyZ2luOwotCWluZm8tPnZhci5yaWdodF9tYXJnaW4gPSBtb2RlZGJbaV0ucmlnaHRfbWFyZ2luOwotCWluZm8tPnZhci54cmVzID0gbW9kZWRiW2ldLnhyZXM7Ci0JaWYgKCEobW9kZWRiW2ldLnlyZXMgPT0gMTI4MCAmJiBtb2RlZGJbaV0uYnBwID09IDMyKSkKLQkJaW5mby0+dmFyLnhyZXNfdmlydHVhbCA9IG1vZGVkYltpXS52eHJlczsKLQllbHNlCi0JCWluZm8tPnZhci54cmVzX3ZpcnR1YWwgPSBtb2RlZGJbaV0ueHJlczsKLQlpbmZvLT52YXIueG9mZnNldCA9IDA7Ci0JaW5mby0+dmFyLmhzeW5jX2xlbiA9IG1vZGVkYltpXS5oc3luY19sZW47Ci0JaW5mby0+dmFyLnVwcGVyX21hcmdpbiA9IG1vZGVkYltpXS51cHBlcl9tYXJnaW47Ci0JaW5mby0+dmFyLnlyZXMgPSBtb2RlZGJbaV0ueXJlczsKLQlpbmZvLT52YXIueXJlc192aXJ0dWFsID0gbW9kZWRiW2ldLnZ5cmVzOwotCWluZm8tPnZhci55b2Zmc2V0ID0gMDsKLQlpbmZvLT52YXIubG93ZXJfbWFyZ2luID0gbW9kZWRiW2ldLmxvd2VyX21hcmdpbjsKLQlpbmZvLT52YXIudnN5bmNfbGVuID0gbW9kZWRiW2ldLnZzeW5jX2xlbjsKLQlpbmZvLT52YXIuc3luYyA9IDA7Ci0JaW5mby0+dmFyLnZtb2RlID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRDsKLQotCWlmIChjeWJsYWZiX2NoZWNrX3ZhcigmaW5mby0+dmFyLCBpbmZvKSkgewotCQkvLyA2NDB4NDgwIC0gOEA3NSBzaG91bGQgcmVhbGx5IG5ldmVyIGZhaWwuIE9uZSBjYXNlIHdvdWxkCi0JCS8vIGJlIGZwID09IDEgYW5kIG5hdGl2ZXggPCA2NDAgLi4uIGdpdmUgdXAgdGhlbgotCQlpZiAoaSA9PSAxICYmIGJwcCA9PSA4ICYmIHJlZiA9PSA3NSkgewotCQkJb3V0cHV0KCJDYW4ndCBmaW5kIGEgdmFsaWQgbW9kZSA6LShcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJLy8gT3VyIGRldGVjdGVkIG1vZGUgaXMgdW5saWtlbHkgdG8gZmFpbC4gSWYgaXQgZG9lcywKLQkJLy8gdHJ5IDY0MHg0ODAgLSA4QDc1IC4uLgotCQlpZiAoaSA9PSAwKSB7Ci0JCQltb2RlID0gIjY0MHg0ODAiOwotCQkJYnBwID0gODsKLQkJCXJlZiA9IDc1OwotCQkJb3V0cHV0KCJEZXRlY3RlZCBtb2RlIGZhaWxlZCBjaGVja192YXIhICIKLQkJCSAgICAgICAiVHJ5aW5nIDY0MHg0ODAgLSA4QDc1XG4iKTsKLQkJCWdvdG8gdHJ5YWdhaW47Ci0JCX0KLQkJLy8gQSBzcGVjaWZpZWQgdmlkZW8gbW9kZSBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLgotCQkvLyBUcnkgdGhlIHN0YXJ0dXAgbW9kZSBmaXJzdAotCQlvdXRwdXQoIlNwZWNpZmllZCBtb2RlICclcycgZmFpbGVkIGNoZWNrISAiCi0JCSAgICAgICAiRmFsbGluZyBiYWNrIHRvIHN0YXJ0dXAgbW9kZS5cbiIsIG1vZGUpOwotCQltb2RlID0gTlVMTDsKLQkJZ290byB0cnlhZ2FpbjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8KLS8vIERldGVjdCBhY3RpdmF0ZWQgbWVtb3J5IHNpemUuIFVuZGVmaW5lZCB2YWx1ZXMgcmVxdWlyZQotLy8gbWVtc2l6ZSBwYXJhbWV0ZXIuCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdCBnZXRfbWVtc2l6ZSh2b2lkKQotewotCXVuc2lnbmVkIGNoYXIgdG1wOwotCXVuc2lnbmVkIGludCBrOwotCi0JaWYgKG1lbXNpemUpCi0JCWsgPSBtZW1zaXplICogS2I7Ci0JZWxzZSB7Ci0JCXRtcCA9IHJlYWQzWDQoQ1IxRikgJiAweDBGOwotCQlzd2l0Y2ggKHRtcCkgewotCQljYXNlIDB4MDM6Ci0JCQlrID0gMSAqIDEwMjQgKiAxMDI0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMHgwNzoKLQkJCWsgPSAyICogMTAyNCAqIDEwMjQ7Ci0JCQlicmVhazsKLQkJY2FzZSAweDBGOgotCQkJayA9IDQgKiAxMDI0ICogMTAyNDsKLQkJCWJyZWFrOwotCQljYXNlIDB4MDQ6Ci0JCQlrID0gOCAqIDEwMjQgKiAxMDI0OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlrID0gMSAqIDEwMjQgKiAxMDI0OwotCQkJb3V0cHV0KCJVbmtub3duIG1lbW9yeSBzaXplIGNvZGUgJXggaW4gQ1IxRi4iCi0JCQkgICAgICAgIiBXZSBkZWZhdWx0IHRvIDEgTWIgZm9yIG5vdywgcGxlYXNlIgotCQkJICAgICAgICIgZG8gcHJvdmlkZSBhIG1lbXNpemUgcGFyYW1ldGVyIVxuIiwgdG1wKTsKLQkJfQotCX0KLQotCWlmICh2ZXJib3NpdHkgPiAwKQotCQlvdXRwdXQoImZyYW1lYnVmZmVyIHNpemUgPSAlZCBLYlxuIiwgayAvIEtiKTsKLQlyZXR1cm4gazsKLX0KLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBEZXRlY3QgaWYgYSBmbGF0IHBhbmVsIG1vbml0b3IgY29ubmVjdGVkIHRvIHRoZSBzcGVjaWFsCi0vLyBpbnRlcmZhY2UgaXMgYWN0aXZlLiBPdmVycmlkZSBpcyBwb3NzaWJsZSBieSBmcCBhbmQgY3J0Ci0vLyBwYXJhbWV0ZXJzLgotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IGdldF9kaXNwbGF5dHlwZSh2b2lkKQotewotCWlmIChmcCkKLQkJcmV0dXJuIERJU1BMQVlfRlA7Ci0JaWYgKGNydCkKLQkJcmV0dXJuIERJU1BMQVlfQ1JUOwotCXJldHVybiAocmVhZDNDRShHUjMzKSAmIDB4MTApID8gRElTUExBWV9GUCA6IERJU1BMQVlfQ1JUOwotfQotCi0vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vCi0vLyBHZXQgbmF0aXZlIHJlc29sdXRpb24gb2YgZmxhdCBwYW5lbAotLy8KLS8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfbmF0aXZleCh2b2lkKQotewotCWludCB4LCB5LCB0bXA7Ci0KLQlpZiAobmF0aXZleCkKLQkJcmV0dXJuIG5hdGl2ZXg7Ci0KLQl0bXAgPSAocmVhZDNDRShHUjUyKSA+PiA0KSAmIDM7Ci0KLQlzd2l0Y2ggKHRtcCkgewotCWNhc2UgMDogeCA9IDEyODA7IHkgPSAxMDI0OwotCQlicmVhazsKLQljYXNlIDI6IHggPSAxMDI0OyB5ID0gNzY4OwotCQlicmVhazsKLQljYXNlIDM6IHggPSA4MDA7ICB5ID0gNjAwOwotCQlicmVhazsKLQljYXNlIDQ6IHggPSAxNDAwOyB5ID0gMTA1MDsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCWRlZmF1bHQ6Ci0JCXggPSA2NDA7IHkgPSA0ODA7Ci0JCWJyZWFrOwotCX0KLQotCWlmICh2ZXJib3NpdHkgPiAwKQotCQlvdXRwdXQoIiVkeCVkIGZsYXQgcGFuZWwgZm91bmRcbiIsIHgsIHkpOwotCXJldHVybiB4OwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBjeWJsYV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgY3libGFmYl9wYXIgKnBhcjsKLQotCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGN5YmxhZmJfcGFyKSwgJmRldi0+ZGV2KTsKLQlpZiAoIWluZm8pCi0JCWdvdG8gZXJyb3V0X2FsbG9jX2luZm87Ci0KLQlpbmZvLT5waXhtYXAuYWRkciA9IGt6YWxsb2MoQ1lCTEFGQl9QSVhNQVBTSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWluZm8tPnBpeG1hcC5hZGRyKSB7Ci0JCW91dHB1dCgiYWxsb2NhdGlvbiBvZiBwaXhtYXAgYnVmZmVyIGZhaWxlZCFcbiIpOwotCQlnb3RvIGVycm91dF9hbGxvY19waXhtYXA7Ci0JfQotCWluZm8tPnBpeG1hcC5zaXplID0gQ1lCTEFGQl9QSVhNQVBTSVpFIC0gNDsKLQlpbmZvLT5waXhtYXAuYnVmX2FsaWduID0gNDsKLQlpbmZvLT5waXhtYXAuYWNjZXNzX2FsaWduID0gMzI7Ci0JaW5mby0+cGl4bWFwLmZsYWdzID0gRkJfUElYTUFQX1NZU1RFTTsKLQlpbmZvLT5waXhtYXAuc2Nhbl9hbGlnbiA9IDQ7Ci0KLQlwYXIgPSBpbmZvLT5wYXI7Ci0JcGFyLT5vcHMgPSBjeWJsYWZiX29wczsKLQotCWluZm8tPmZpeCA9IGN5YmxhZmJfZml4OwotCWluZm8tPmZib3BzID0gJnBhci0+b3BzOwotCWluZm8tPmZpeCA9IGN5YmxhZmJfZml4OwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikpIHsKLQkJb3V0cHV0KCJjb3VsZCBub3QgZW5hYmxlIGRldmljZSFcbiIpOwotCQlnb3RvIGVycm91dF9lbmFibGU7Ci0JfQotCS8vIG1pZ2h0IGFscmVhZHkgYmUgcmVxdWVzdGVkIGJ5IHZnYSBjb25zb2xlIG9yIHZlc2FmYiwKLQkvLyBzbyB3ZSBkbyBjYXJlIGFib3V0IHN1Y2Nlc3MKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKDB4M2MwLCAweDIwLCAiY3libGFmYiIpKSB7Ci0JCW91dHB1dCgicmVnaW9uIDB4M2MwLzB4MjAgYWxyZWFkeSByZXNlcnZlZFxuIik7Ci0JCXZlc2FmYiB8PSAxOwotCi0JfQotCS8vCi0JLy8gR3JhcGhpY3MgRW5naW5lIFJlZ2lzdGVycwotCS8vCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihHRUJhc2UsIDB4MTAwLCAiY3libGFmYiIpKSB7Ci0JCW91dHB1dCgicmVnaW9uICUjeC8weDEwMCBhbHJlYWR5IHJlc2VydmVkXG4iLCBHRUJhc2UpOwotCQl2ZXNhZmIgfD0gMjsKLQl9Ci0KLQlyZWdkdW1wKHBhcik7Ci0KLQllbmFibGVfbW1pbygpOwotCi0JLy8gc2V0dXAgTU1JTyByZWdpb24KLQlpbmZvLT5maXgubW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDEpOwotCWluZm8tPmZpeC5tbWlvX2xlbiA9IDB4MjAwMDA7Ci0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpbmZvLT5maXgubW1pb19zdGFydCwKLQkJCQlpbmZvLT5maXgubW1pb19sZW4sICJjeWJsYWZiIikpIHsKLQkJb3V0cHV0KCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkIGZvciBtbWlvIHJlZ2lvbiFcbiIpOwotCQlnb3RvIGVycm91dF9tbWlvX3JlcW1lbTsKLQl9Ci0KLQlpb192aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOwotCi0JaWYgKCFpb192aXJ0KSB7Ci0JCW91dHB1dCgiaW9yZW1hcCBmYWlsZWQgZm9yIG1taW8gcmVnaW9uXG4iKTsKLQkJZ290byBlcnJvdXRfbW1pb19yZW1hcDsKLQl9Ci0JLy8gc2V0dXAgZnJhbWVidWZmZXIgbWVtb3J5IC4uLiBtaWdodCBhbHJlYWR5IGJlIHJlcXVlc3RlZAotCS8vIGJ5IHZlc2FmYi4gTm90IHRvIGZhaWwgaW4gY2FzZSBvZiBhbiB1bnN1Y2Nlc3NmdWwgcmVxdWVzdAotCS8vIGlzIHVzZWZ1bCBpZiBib3RoIGFyZSBsb2FkZWQuCi0JaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKLQlpbmZvLT5maXguc21lbV9sZW4gPSBnZXRfbWVtc2l6ZSgpOwotCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaW5mby0+Zml4LnNtZW1fc3RhcnQsCi0JCQkJaW5mby0+Zml4LnNtZW1fbGVuLCAiY3libGFmYiIpKSB7Ci0JCW91dHB1dCgicmVnaW9uICUjbHgvJSN4IGFscmVhZHkgcmVzZXJ2ZWRcbiIsCi0JCSAgICAgICBpbmZvLT5maXguc21lbV9zdGFydCwgaW5mby0+Zml4LnNtZW1fbGVuKTsKLQkJdmVzYWZiIHw9IDQ7Ci0JfQotCi0JaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoaW5mby0+Zml4LnNtZW1fc3RhcnQsCi0JCQkJCSAgICBpbmZvLT5maXguc21lbV9sZW4pOwotCi0JaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgewotCQlvdXRwdXQoImlvcmVtYXAgZmFpbGVkIGZvciBzbWVtIHJlZ2lvblxuIik7Ci0JCWdvdG8gZXJyb3V0X3NtZW1fcmVtYXA7Ci0JfQotCi0JZGlzcGxheXR5cGUgPSBnZXRfZGlzcGxheXR5cGUoKTsKLQotCWlmIChkaXNwbGF5dHlwZSA9PSBESVNQTEFZX0ZQKQotCQluYXRpdmV4ID0gZ2V0X25hdGl2ZXgoKTsKLQotCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQKLQkJICAgIHwgRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEKLQkJICAgIHwgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QKLQkJICAgIHwgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUCi0JCSAgICB8IEZCSU5GT19SRUFEU19GQVNUCi0vLwkJICAgIHwgRkJJTkZPX1BBUlRJQUxfUEFOX09LCi0JCSAgICB8IEZCSU5GT19NSVNDX0FMV0FZU19TRVRQQVI7Ci0KLQlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9IHBhci0+cHNldWRvX3BhbDsKLQotCWlmIChnZXRzdGFydHVwbW9kZShpbmZvKSkKLQkJZ290byBlcnJvdXRfZmluZG1vZGU7Ci0KLQlmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOwotCi0JaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pKSB7Ci0JCW91dHB1dCgiQ291bGQgbm90IHJlZ2lzdGVyIEN5QmxhIGZyYW1lYnVmZmVyXG4iKTsKLQkJZ290byBlcnJvdXRfcmVnaXN0ZXI7Ci0JfQotCi0JcGNpX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7Ci0KLQkvLwotCS8vIG5vcm1hbCBleGl0IGFuZCBlcnJvciBwYXRocwotCS8vCi0KLQlyZXR1cm4gMDsKLQotICAgICAgZXJyb3V0X3JlZ2lzdGVyOgotICAgICAgZXJyb3V0X2ZpbmRtb2RlOgotCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwotICAgICAgZXJyb3V0X3NtZW1fcmVtYXA6Ci0JaWYgKCEodmVzYWZiICYgNCkpCi0JCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5maXguc21lbV9zdGFydCwgaW5mby0+Zml4LnNtZW1fbGVuKTsKLQlpb3VubWFwKGlvX3ZpcnQpOwotICAgICAgZXJyb3V0X21taW9fcmVtYXA6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOwotICAgICAgZXJyb3V0X21taW9fcmVxbWVtOgotCWlmICghKHZlc2FmYiAmIDEpKQotCQlyZWxlYXNlX3JlZ2lvbigweDNjMCwgMzIpOwotICAgICAgZXJyb3V0X2VuYWJsZToKLQlrZnJlZShpbmZvLT5waXhtYXAuYWRkcik7Ci0gICAgICBlcnJvdXRfYWxsb2NfcGl4bWFwOgotCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7Ci0gICAgICBlcnJvdXRfYWxsb2NfaW5mbzoKLQlvdXRwdXQoIkN5YmxhRkIgdmVyc2lvbiAlcyBhYm9ydGluZyBpbml0LlxuIiwgVkVSU0lPTik7Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjeWJsYV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQotCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7Ci0JaW91bm1hcChpb192aXJ0KTsKLQlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQlpZiAoISh2ZXNhZmIgJiA0KSkKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmZpeC5zbWVtX3N0YXJ0LCBpbmZvLT5maXguc21lbV9sZW4pOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5maXgubW1pb19zdGFydCwgaW5mby0+Zml4Lm1taW9fbGVuKTsKLQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwotCWlmICghKHZlc2FmYiAmIDIpKQotCQlyZWxlYXNlX3JlZ2lvbihHRUJhc2UsIDB4MTAwKTsKLQlpZiAoISh2ZXNhZmIgJiAxKSkKLQkJcmVsZWFzZV9yZWdpb24oMHgzYzAsIDMyKTsKLQlrZnJlZShpbmZvLT5waXhtYXAuYWRkcik7Ci0JZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKLQlvdXRwdXQoIkN5YmxhRkIgdmVyc2lvbiAlcyBub3JtYWwgZXhpdC5cbiIsIFZFUlNJT04pOwotfQotCi0vLwotLy8gTGlzdCBvZiBib2FyZHMgdGhhdCB3ZSBhcmUgdHJ5aW5nIHRvIHN1cHBvcnQKLS8vCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3libGFfZGV2aWNlc1tdID0gewotCXtQQ0lfVkVORE9SX0lEX1RSSURFTlQsIENZQkVSQkxBREVpMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0JezAsfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGN5YmxhX2RldmljZXMpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgY3libGFmYl9wY2lfZHJpdmVyID0gewotCS5uYW1lID0gImN5YmxhZmIiLAotCS5pZF90YWJsZSA9IGN5YmxhX2RldmljZXMsCi0JLnByb2JlID0gY3libGFfcGNpX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChjeWJsYV9wY2lfcmVtb3ZlKQotfTsKLQotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLwotLy8ga2VybmVsIGNvbW1hbmQgbGluZSBleGFtcGxlOgotLy8KLS8vCXZpZGVvPWN5YmxhZmI6MTI4MHgxMDI0LCBicHA9MTYsIHJlZj01MCAuLi4KLS8vCi0vLyBtb2Rwcm9iZSBjb21tYW5kIGxpbmUgZXhhbXBsZToKLS8vCi0vLwltb2Rwcm9iZSBjeWJsYWZiIG1vZGU9MTI4MHgxMDI0IGJwcD0xNiByZWY9NTAgLi4uCi0vLwotLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGN5YmxhZmJfaW5pdCh2b2lkKQotewotI2lmbmRlZiBNT0RVTEUKLQljaGFyICpvcHRpb25zID0gTlVMTDsKLQljaGFyICpvcHQ7Ci0KLQlpZiAoZmJfZ2V0X29wdGlvbnMoImN5YmxhZmIiLCAmb3B0aW9ucykpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKG9wdGlvbnMgJiYgKm9wdGlvbnMpCi0JCXdoaWxlICgob3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7Ci0JCQlpZiAoISpvcHQpCi0JCQkJY29udGludWU7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJicHA9IiwgNCkpCi0JCQkJYnBwID0gc2ltcGxlX3N0cnRvdWwob3B0ICsgNCwgTlVMTCwgMCk7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJyZWY9IiwgNCkpCi0JCQkJcmVmID0gc2ltcGxlX3N0cnRvdWwob3B0ICsgNCwgTlVMTCwgMCk7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJmcCIsIDIpKQotCQkJCWRpc3BsYXl0eXBlID0gRElTUExBWV9GUDsKLQkJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgImNydCIsIDMpKQotCQkJCWRpc3BsYXl0eXBlID0gRElTUExBWV9DUlQ7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJuYXRpdmV4PSIsIDgpKQotCQkJCW5hdGl2ZXggPSBzaW1wbGVfc3RydG91bChvcHQgKyA4LCBOVUxMLCAwKTsKLQkJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgImNlbnRlciIsIDYpKQotCQkJCWNlbnRlciA9IDE7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJzdHJldGNoIiwgNykpCi0JCQkJc3RyZXRjaCA9IDE7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJwY2l3Yj0iLCA2KSkKLQkJCQlwY2l3YiA9IHNpbXBsZV9zdHJ0b3VsKG9wdCArIDYsIE5VTEwsIDApOwotCQkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAicGNpcmI9IiwgNikpCi0JCQkJcGNpcmIgPSBzaW1wbGVfc3RydG91bChvcHQgKyA2LCBOVUxMLCAwKTsKLQkJCWVsc2UgaWYgKCFzdHJuY21wKG9wdCwgInBjaXdyPSIsIDYpKQotCQkJCXBjaXdyID0gc2ltcGxlX3N0cnRvdWwob3B0ICsgNiwgTlVMTCwgMCk7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJwY2lycj0iLCA2KSkKLQkJCQlwY2lyciA9IHNpbXBsZV9zdHJ0b3VsKG9wdCArIDYsIE5VTEwsIDApOwotCQkJZWxzZSBpZiAoIXN0cm5jbXAob3B0LCAibWVtc2l6ZT0iLCA4KSkKLQkJCQltZW1zaXplID0gc2ltcGxlX3N0cnRvdWwob3B0ICsgOCwgTlVMTCwgMCk7Ci0JCQllbHNlIGlmICghc3RybmNtcChvcHQsICJ2ZXJib3NpdHk9IiwgMTApKQotCQkJCXZlcmJvc2l0eSA9IHNpbXBsZV9zdHJ0b3VsKG9wdCArIDEwLCBOVUxMLCAwKTsKLQkJCWVsc2UKLQkJCQltb2RlID0gb3B0OwotCQl9Ci0jZW5kaWYKLQlvdXRwdXQoIkN5YmxhRkIgdmVyc2lvbiAlcyBpbml0aWFsaXppbmdcbiIsIFZFUlNJT04pOwotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjeWJsYWZiX3BjaV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY3libGFmYl9leGl0KHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjeWJsYWZiX3BjaV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChjeWJsYWZiX2luaXQpOwotbW9kdWxlX2V4aXQoY3libGFmYl9leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiS251dCBQZXRlcnNlbiA8a251dF9wZXRlcnNlbkB0LW9ubGluZS5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRnJhbWVidWZmZXIgZHJpdmVyIGZvciBDeWJlcmJsYWRlL2kxIGdyYXBoaWNzIGNvcmUiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZWZpZmIuYyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwppbmRleCBkYWY5YjgxLi4wYzViOWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9lZmlmYi5jCkBAIC0xMjksNiArMTI5LDggQEAKIAkJc2NyZWVuX2luZm8ubGZiX3dpZHRoID0gaW5mby0+d2lkdGg7CiAJaWYgKHNjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPT0gMCkKIAkJc2NyZWVuX2luZm8ubGZiX2hlaWdodCA9IGluZm8tPmhlaWdodDsKKwlpZiAoc2NyZWVuX2luZm8ub3JpZ192aWRlb19pc1ZHQSA9PSAwKQorCQlzY3JlZW5faW5mby5vcmlnX3ZpZGVvX2lzVkdBID0gVklERU9fVFlQRV9FRkk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM3NCw5ICszNzYsMTAgQEAKIAlpbnQgcmV0OwogCWNoYXIgKm9wdGlvbiA9IE5VTEw7CiAKKwlkbWlfY2hlY2tfc3lzdGVtKGRtaV9zeXN0ZW1fdGFibGUpOworCiAJaWYgKHNjcmVlbl9pbmZvLm9yaWdfdmlkZW9faXNWR0EgIT0gVklERU9fVFlQRV9FRkkpCiAJCXJldHVybiAtRU5PREVWOwotCWRtaV9jaGVja19zeXN0ZW0oZG1pX3N5c3RlbV90YWJsZSk7CiAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoImVmaWZiIiwgJm9wdGlvbikpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYl9kZWZpby5jIGIvZHJpdmVycy92aWRlby9mYl9kZWZpby5jCmluZGV4IDA4MjAyNjUuLjBhN2E2NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJfZGVmaW8uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiX2RlZmlvLmMKQEAgLTg1LDggKzg1LDkgQEAKIAogLyogdm1fb3BzLT5wYWdlX21rd3JpdGUgaGFuZGxlciAqLwogc3RhdGljIGludCBmYl9kZWZlcnJlZF9pb19ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgc3RydWN0IHBhZ2UgKnBhZ2UpCisJCQkJICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtZi0+cGFnZTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBmYl9kZWZlcnJlZF9pbyAqZmJkZWZpbyA9IGluZm8tPmZiZGVmaW87CiAJc3RydWN0IHBhZ2UgKmN1cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCBjZmQ5ZGNlLi4yYWMzMmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC00Niw2ICs0NiwxNyBAQAogc3RydWN0IGZiX2luZm8gKnJlZ2lzdGVyZWRfZmJbRkJfTUFYXSBfX3JlYWRfbW9zdGx5OwogaW50IG51bV9yZWdpc3RlcmVkX2ZiIF9fcmVhZF9tb3N0bHk7CiAKK2ludCBsb2NrX2ZiX2luZm8oc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJbXV0ZXhfbG9jaygmaW5mby0+bG9jayk7CisJaWYgKCFpbmZvLT5mYm9wcykgeworCQltdXRleF91bmxvY2soJmluZm8tPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKGxvY2tfZmJfaW5mbyk7CisKIC8qCiAgKiBIZWxwZXJzCiAgKi8KQEAgLTEwODYsMTMgKzEwOTcsOCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWNvbjJmYi5mcmFtZWJ1ZmZlciA9IC0xOwogCQlldmVudC5kYXRhID0gJmNvbjJmYjsKLQotCQlpZiAoIWxvY2tfZmJfaW5mbyhpbmZvKSkKLQkJCXJldHVybiAtRU5PREVWOwogCQlldmVudC5pbmZvID0gaW5mbzsKIAkJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9HRVRfQ09OU09MRV9NQVAsICZldmVudCk7Ci0JCXVubG9ja19mYl9pbmZvKGluZm8pOwotCiAJCXJldCA9IGNvcHlfdG9fdXNlcihhcmdwLCAmY29uMmZiLCBzaXplb2YoY29uMmZiKSkgPyAtRUZBVUxUIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBGQklPUFVUX0NPTjJGQk1BUDoKQEAgLTExMDksMTIgKzExMTUsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJZXZlbnQuZGF0YSA9ICZjb24yZmI7Ci0JCWlmICghbG9ja19mYl9pbmZvKGluZm8pKQotCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWV2ZW50LmluZm8gPSBpbmZvOwotCQlyZXQgPSBmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX1NFVF9DT05TT0xFX01BUCwKLQkJCQkJICAgICAgJmV2ZW50KTsKLQkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CisJCXJldCA9IGZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfU0VUX0NPTlNPTEVfTUFQLCAmZXZlbnQpOwogCQlicmVhazsKIAljYXNlIEZCSU9CTEFOSzoKIAkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9zZXR1cC5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfc2V0dXAuYwppbmRleCBkOTYyN2I1Li4xMzVhZTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9zZXR1cC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X3NldHVwLmMKQEAgLTM2Miw2ICszNjIsNyBAQAogCWNhc2UgMHgwMTg2OgogCWNhc2UgMHgwMTg3OgogCWNhc2UgMHgwMThEOgorCWNhc2UgMHgwMUQ3OgogCWNhc2UgMHgwMjI4OgogCWNhc2UgMHgwMjg2OgogCWNhc2UgMHgwMjhDOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfdHlwZS5oIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfdHlwZS5oCmluZGV4IGYxMzJhYWIuLmMwM2Y3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X3R5cGUuaAorKysgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl90eXBlLmgKQEAgLTUsNyArNSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogCiAjZGVmaW5lIE5WX0FSQ0hfMDQgIDB4MDQKQEAgLTk5LDcgKzk4LDYgQEAKIAlSSVZBX0hXX1NUQVRFIGluaXRpYWxfc3RhdGU7CiAJUklWQV9IV19TVEFURSAqQ3VycmVudFN0YXRlOwogCXN0cnVjdCB2Z2FzdGF0ZSB2Z2FzdGF0ZTsKLQlzdHJ1Y3QgbXV0ZXggb3Blbl9sb2NrOwogCXUzMiBwc2V1ZG9fcGFsZXR0ZVsxNl07CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAJdTMyIEFyY2hpdGVjdHVyZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKaW5kZXggOWRiYjVhNS4uZWZlMTBmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKQEAgLTEwMDQsMTUgKzEwMDQsMTIgQEAKIHsKIAlzdHJ1Y3QgbnZpZGlhX3BhciAqcGFyID0gaW5mby0+cGFyOwogCi0JbXV0ZXhfbG9jaygmcGFyLT5vcGVuX2xvY2spOwotCiAJaWYgKCFwYXItPm9wZW5fY291bnQpIHsKIAkJc2F2ZV92Z2FfeDg2KHBhcik7CiAJCW52aWRpYV9zYXZlX3ZnYShwYXIsICZwYXItPmluaXRpYWxfc3RhdGUpOwogCX0KIAogCXBhci0+b3Blbl9jb3VudCsrOwotCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMDIxLDggKzEwMTgsNiBAQAogCXN0cnVjdCBudmlkaWFfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJaW50IGVyciA9IDA7CiAKLQltdXRleF9sb2NrKCZwYXItPm9wZW5fbG9jayk7Ci0KIAlpZiAoIXBhci0+b3Blbl9jb3VudCkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CkBAIC0xMDM1LDcgKzEwMzAsNiBAQAogCiAJcGFyLT5vcGVuX2NvdW50LS07CiBkb25lOgotCW11dGV4X3VubG9jaygmcGFyLT5vcGVuX2xvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEzMDAsNyArMTI5NCw2IEBACiAKIAlwYXIgPSBpbmZvLT5wYXI7CiAJcGFyLT5wY2lfZGV2ID0gcGQ7Ci0JbXV0ZXhfaW5pdCgmcGFyLT5vcGVuX2xvY2spOwogCWluZm8tPnBpeG1hcC5hZGRyID0ga3phbGxvYyg4ICogMTAyNCwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoaW5mby0+cGl4bWFwLmFkZHIgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9od2E3NDIuYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9od2E3NDIuYwppbmRleCBmMjRkZjBiLi44YWE2ZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvaHdhNzQyLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2h3YTc0Mi5jCkBAIC03NDIsNyArNzQyLDcgQEAKIAkJaWYgKGNhbGNfcmVnX3RpbWluZyhzeXNjbGssIGRpdikgPT0gMCkKIAkJCWJyZWFrOwogCX0KLQlpZiAoZGl2ID4gbWF4X2Nsa19kaXYpCisJaWYgKGRpdiA+PSBtYXhfY2xrX2RpdikKIAkJZ290byBlcnI7CiAKIAkqZXh0aWZfbWVtX2RpdiA9IGRpdjsKQEAgLTc1Miw3ICs3NTIsNyBAQAogCQkJYnJlYWs7CiAJfQogCi0JaWYgKGRpdiA+IG1heF9jbGtfZGl2KQorCWlmIChkaXYgPj0gbWF4X2Nsa19kaXYpCiAJCWdvdG8gZXJyOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCmluZGV4IDFhNDk1MTkuLjA2MGQ3MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9vbWFwZmJfbWFpbi5jCkBAIC0zMzgsNyArMzM4LDcgQEAKIAogCW9tYXBmYl9ycXVldWVfbG9jayhmYmRldik7CiAJc3dpdGNoIChibGFuaykgewotCWNhc2UgVkVTQV9OT19CTEFOS0lORzoKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CiAJCWlmIChmYmRldi0+c3RhdGUgPT0gT01BUEZCX1NVU1BFTkRFRCkgewogCQkJaWYgKGZiZGV2LT5jdHJsLT5yZXN1bWUpCiAJCQkJZmJkZXYtPmN0cmwtPnJlc3VtZSgpOwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAJCQkJZG9fdXBkYXRlID0gMTsKIAkJfQogCQlicmVhazsKLQljYXNlIFZFU0FfUE9XRVJET1dOOgorCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgogCQlpZiAoZmJkZXYtPnN0YXRlID09IE9NQVBGQl9BQ1RJVkUpIHsKIAkJCWZiZGV2LT5wYW5lbC0+ZGlzYWJsZShmYmRldi0+cGFuZWwpOwogCQkJaWYgKGZiZGV2LT5jdHJsLT5zdXNwZW5kKQpAQCAtMTgxOCw3ICsxODE4LDcgQEAKIHsKIAlzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCW9tYXBmYl9ibGFuayhWRVNBX1BPV0VSRE9XTiwgZmJkZXYtPmZiX2luZm9bMF0pOworCW9tYXBmYl9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04sIGZiZGV2LT5mYl9pbmZvWzBdKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTgyOCw3ICsxODI4LDcgQEAKIHsKIAlzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCW9tYXBmYl9ibGFuayhWRVNBX05PX0JMQU5LSU5HLCBmYmRldi0+ZmJfaW5mb1swXSk7CisJb21hcGZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGZiZGV2LT5mYl9pbmZvWzBdKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwppbmRleCBhN2IwMWQyLi4wNzI2YWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwpAQCAtNTAsOSArNTAsMjIgQEAKICNkZWZpbmUgZGJnKGZtdCwgYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBpbnQgX19kZXZpbml0Y29uc3QgczFkMTN4eHhmYl9yZXZpc2lvbnNbXSA9IHsKLQlTMUQxMzUwNl9DSElQX1JFViwJLyogUmV2LjQgb24gSFAgSm9ybmFkYSA3eHggUzFEMTM1MDYgKi8KLQlTMUQxMzgwNl9DSElQX1JFViwJLyogUmV2Ljcgb24gLi4gKi8KKy8qCisgKiBMaXN0IG9mIGNhcmQgcHJvZHVjdGlvbiBpZHMKKyAqLworc3RhdGljIGNvbnN0IGludCBzMWQxM3h4eGZiX3Byb2RfaWRzW10gPSB7CisJUzFEMTM1MDVfUFJPRF9JRCwKKwlTMUQxMzUwNl9QUk9EX0lELAorCVMxRDEzODA2X1BST0RfSUQsCit9OworCisvKgorICogTGlzdCBvZiBjYXJkIHN0cmluZ3MKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnMxZDEzeHh4ZmJfcHJvZF9uYW1lc1tdID0geworCSJTMUQxMzUwNSIsCisJIlMxRDEzNTA2IiwKKwkiUzFEMTM4MDYiLAogfTsKIAogLyoKQEAgLTM3Nyw3ICszOTAsNiBAQAogCXJldHVybiAwOwogfQogCi0KIC8qIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZXMgKi8KIAogc3RhdGljIHN0cnVjdCBmYl9vcHMgczFkMTN4eHhmYl9mYm9wcyA9IHsKQEAgLTU0NCw3ICs1NTYsNyBAQAogCXN0cnVjdCBzMWQxM3h4eGZiX3BkYXRhICpwZGF0YSA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7Ci0JdTggcmV2aXNpb247CisJdTggcmV2aXNpb24sIHByb2RfaWQ7CiAKIAlkYmcoInByb2JlIGNhbGxlZDogZGV2aWNlIGlzICVwXG4iLCBwZGV2KTsKIApAQCAtNjEzLDE5ICs2MjUsMzEgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXJldmlzaW9uID0gczFkMTN4eHhmYl9yZWFkcmVnKGRlZmF1bHRfcGFyLCBTMURSRUdfUkVWX0NPREUpID4+IDI7Ci0KKwkvKiBwcm9kdWN0aW9uIGlkIGlzIHRvcCA2IGJpdHMgKi8KKwlwcm9kX2lkID0gczFkMTN4eHhmYl9yZWFkcmVnKGRlZmF1bHRfcGFyLCBTMURSRUdfUkVWX0NPREUpID4+IDI7CisJLyogcmV2aXNpb24gaWQgaXMgbG93ZXIgMiBiaXRzICovCisJcmV2aXNpb24gPSBzMWQxM3h4eGZiX3JlYWRyZWcoZGVmYXVsdF9wYXIsIFMxRFJFR19SRVZfQ09ERSkgJiAweDM7CiAJcmV0ID0gLUVOT0RFVjsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHMxZDEzeHh4ZmJfcmV2aXNpb25zKTsgaSsrKSB7Ci0JCWlmIChyZXZpc2lvbiA9PSBzMWQxM3h4eGZiX3JldmlzaW9uc1tpXSkKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzMWQxM3h4eGZiX3Byb2RfaWRzKTsgaSsrKSB7CisJCWlmIChwcm9kX2lkID09IHMxZDEzeHh4ZmJfcHJvZF9pZHNbaV0pIHsKKwkJCS8qIGxvb2tzIGxpa2Ugd2UgZ290IGl0IGluIG91ciBsaXN0ICovCisJCQlkZWZhdWx0X3Bhci0+cHJvZF9pZCA9IHByb2RfaWQ7CisJCQlkZWZhdWx0X3Bhci0+cmV2aXNpb24gPSByZXZpc2lvbjsKIAkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQogCX0KIAotCWlmICghcmV0KQorCWlmICghcmV0KSB7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJjaGlwIHByb2R1Y3Rpb24gaWQgJWkgPSAlc1xuIiwKKwkJCXByb2RfaWQsIHMxZDEzeHh4ZmJfcHJvZF9uYW1lc1tpXSk7CiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJjaGlwIHJldmlzaW9uICVpXG4iLCByZXZpc2lvbik7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJ1bmtub3duIGNoaXAgcmV2aXNpb24gJWlcbiIsIHJldmlzaW9uKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJInVua25vd24gY2hpcCBwcm9kdWN0aW9uIGlkICVpLCByZXZpc2lvbiAlaVxuIiwKKwkJCXByb2RfaWQsIHJldmlzaW9uKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInBsZWFzZSBjb250YW50IG1haW50YWluZXJcbiIpOwogCQlnb3RvIGJhaWw7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzYy1mYi5jIGIvZHJpdmVycy92aWRlby9zM2MtZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTljNjMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9zM2MtZmIuYwpAQCAtMCwwICsxLDEwMzYgQEAKKy8qIGxpbnV4L2RyaXZlcnMvdmlkZW8vczNjLWZiLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbyBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFNhbXN1bmcgU29DIEZyYW1lYnVmZmVyIGRyaXZlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZmIuaD4KKyNpbmNsdWRlIDxwbGF0L2ZiLmg+CisKKy8qIFRoaXMgZHJpdmVyIHdpbGwgZXhwb3J0IGEgbnVtYmVyIG9mIGZyYW1lYnVmZmVyIGludGVyZmFjZXMgZGVwZW5kaW5nCisgKiBvbiB0aGUgY29uZmlndXJhdGlvbiBwYXNzZWQgaW4gdmlhIHRoZSBwbGF0Zm9ybSBkYXRhLiBFYWNoIGZiIGluc3RhbmNlCisgKiBtYXBzIHRvIGEgaGFyZHdhcmUgd2luZG93LiBDdXJyZW50bHkgdGhlcmUgaXMgbm8gc3VwcG9ydCBmb3IgcnVudGltZQorICogc2V0dGluZyBvZiB0aGUgYWxwaGEtYmxlbmRpbmcgZnVuY3Rpb25zIHRoYXQgZWFjaCB3aW5kb3cgaGFzLCBzbyBvbmx5CisgKiB3aW5kb3cgMCBpcyBhY3R1YWxseSB1c2VmdWwuCisgKgorICogV2luZG93IDAgaXMgdHJlYXRlZCBzcGVjaWFsbHksIGl0IGlzIHVzZWQgZm9yIHRoZSBiYXNpcyBvZiB0aGUgTENECisgKiBvdXRwdXQgdGltaW5ncyBhbmQgYXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBvdXRwdXQgcG93ZXItZG93biBzdGF0ZS4KKyovCisKKy8qIG5vdGUsIHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGdldCBjYWxsZWQgYXJlIGRlcml2ZWQgZnJvbSBpbmNsdWRpbmcKKyAqIDxtYWNoL3JlZ3MtZmIuaD4gYXMgdGhleSBhcmUgc3BlY2lmaWMgdG8gdGhlIGFyY2hpdGVjdHVyZSB0aGF0IHRoZSBjb2RlCisgKiBpcyBiZWluZyBidWlsdCBmb3IuCisqLworCisjaWZkZWYgQ09ORklHX0ZCX1MzQ19ERUJVR19SRUdXUklURQorI3VuZGVmIHdyaXRlbAorI2RlZmluZSB3cml0ZWwodiwgcikgZG8geyBcCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlMDh4ID0+ICVwXG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGludCl2LCByKTsgXAorCV9fcmF3X3dyaXRlbCh2LCByKTsgfSB3aGlsZSgwKQorI2VuZGlmIC8qIEZCX1MzQ19ERUJVR19SRUdXUklURSAqLworCitzdHJ1Y3QgczNjX2ZiOworCisvKioKKyAqIHN0cnVjdCBzM2NfZmJfd2luIC0gcGVyIHdpbmRvdyBwcml2YXRlIGRhdGEgZm9yIGVhY2ggZnJhbWVidWZmZXIuCisgKiBAd2luZGF0YTogVGhlIHBsYXRmb3JtIGRhdGEgc3VwcGxpZWQgZm9yIHRoZSB3aW5kb3cgY29uZmlndXJhdGlvbi4KKyAqIEBwYXJlbnQ6IFRoZSBoYXJkd2FyZSB0aGF0IHRoaXMgd2luZG93IGlzIHBhcnQgb2YuCisgKiBAZmJpbmZvOiBQb2ludGVyIHBhY2sgdG8gdGhlIGZyYW1lYnVmZmVyIGluZm8gZm9yIHRoaXMgd2luZG93LgorICogQHBhbGV0dGVfYnVmZmVyOiBCdWZmZXIvY2FjaGUgdG8gaG9sZCBwYWxldHRlIGVudHJpZXMuCisgKiBAcHNldWRvX3BhbGV0dGU6IEZvciB1c2UgaW4gVFJVRUNPTE9VUiBtb2RlcyBmb3IgZW50cmllcyAwLi4xNS8KKyAqIEBpbmRleDogVGhlIHdpbmRvdyBudW1iZXIgb2YgdGhpcyB3aW5kb3cuCisgKiBAcGFsZXR0ZTogVGhlIGJpdGZpZWxkcyBmb3IgY2hhbmdpbmcgci9nL2IgaW50byBhIGhhcmR3YXJlIHBhbGV0dGUgZW50cnkuCisgKi8KK3N0cnVjdCBzM2NfZmJfd2luIHsKKwlzdHJ1Y3QgczNjX2ZiX3BkX3dpbgkqd2luZGF0YTsKKwlzdHJ1Y3QgczNjX2ZiCQkqcGFyZW50OworCXN0cnVjdCBmYl9pbmZvCQkqZmJpbmZvOworCXN0cnVjdCBzM2NfZmJfcGFsZXR0ZQkgcGFsZXR0ZTsKKworCXUzMgkJCSpwYWxldHRlX2J1ZmZlcjsKKwl1MzIJCQkgcHNldWRvX3BhbGV0dGVbMTZdOworCXVuc2lnbmVkIGludAkJIGluZGV4OworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2ZiIC0gb3ZlcmFsbCBoYXJkd2FyZSBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUKKyAqIEBkZXY6IFRoZSBkZXZpY2UgdGhhdCB3ZSBib3VuZCB0bywgZm9yIHByaW50aW5nLCBldGMuCisgKiBAcmVnc19yZXM6IFRoZSByZXNvdXJjZSB3ZSBjbGFpbWVkIGZvciB0aGUgSU8gcmVnaXN0ZXJzLgorICogQGJ1c19jbGs6IFRoZSBjbGsgKGhjbGspIGZlZWRpbmcgb3VyIGludGVyZmFjZSBhbmQgcG9zc2libHkgcGl4Y2xrLgorICogQHJlZ3M6IFRoZSBtYXBwZWQgaGFyZHdhcmUgcmVnaXN0ZXJzLgorICogQGVuYWJsZWQ6IEEgYml0bWFzayBvZiBlbmFibGVkIGhhcmR3YXJlIHdpbmRvd3MuCisgKiBAcGRhdGE6IFRoZSBwbGF0Zm9ybSBjb25maWd1cmF0aW9uIGRhdGEgcGFzc2VkIHdpdGggdGhlIGRldmljZS4KKyAqIEB3aW5kb3dzOiBUaGUgaGFyZHdhcmUgd2luZG93cyB0aGF0IGhhdmUgYmVlbiBjbGFpbWVkLgorICovCitzdHJ1Y3QgczNjX2ZiIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCByZXNvdXJjZQkJKnJlZ3NfcmVzOworCXN0cnVjdCBjbGsJCSpidXNfY2xrOworCXZvaWQgX19pb21lbQkJKnJlZ3M7CisKKwl1bnNpZ25lZCBjaGFyCQkgZW5hYmxlZDsKKworCXN0cnVjdCBzM2NfZmJfcGxhdGRhdGEJKnBkYXRhOworCXN0cnVjdCBzM2NfZmJfd2luCSp3aW5kb3dzW1MzQ19GQl9NQVhfV0lOXTsKK307CisKKy8qKgorICogczNjX2ZiX3dpbl9oYXNfcGFsZXR0ZSgpIC0gZGV0ZXJtaW5lIGlmIGEgbW9kZSBoYXMgYSBwYWxldHRlCisgKiBAd2luOiBUaGUgd2luZG93IG51bWJlciBiZWluZyBxdWVyaWVkLgorICogQGJwcDogVGhlIG51bWJlciBvZiBiaXRzIHBlciBwaXhlbCB0byB0ZXN0LgorICoKKyAqIFdvcmsgb3V0IGlmIHRoZSBnaXZlbiB3aW5kb3cgc3VwcG9ydHMgcGFsbGV0aXNlZCBkYXRhIGF0IHRoZSBzcGVjaWZpZWQgYnBwLgorICovCitzdGF0aWMgaW50IHMzY19mYl93aW5faGFzX3BhbGV0dGUodW5zaWduZWQgaW50IHdpbiwgdW5zaWduZWQgaW50IGJwcCkKK3sKKwlyZXR1cm4gczNjX2ZiX3dpbl9wYWxfc2l6ZSh3aW4pIDw9ICgxIDw8IGJwcCk7Cit9CisKKy8qKgorICogczNjX2ZiX2NoZWNrX3ZhcigpIC0gZnJhbWVidWZmZXIgbGF5ZXIgcmVxdWVzdCB0byB2ZXJpZnkgYSBnaXZlbiBtb2RlLgorICogQHZhcjogVGhlIHNjcmVlbiBpbmZvcm1hdGlvbiB0byB2ZXJpZnkuCisgKiBAaW5mbzogVGhlIGZyYW1lYnVmZmVyIGRldmljZS4KKyAqCisgKiBGcmFtZWJ1ZmZlciBsYXllciBjYWxsIHRvIHZlcmlmeSB0aGUgZ2l2ZW4gaW5mb3JtYXRpb24gYW5kIGFsbG93IHVzIHRvCisgKiB1cGRhdGUgdmFyaW91cyBpbmZvcm1hdGlvbiBkZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4KKyAqLworc3RhdGljIGludCBzM2NfZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzM2NfZmJfd2luICp3aW4gPSBpbmZvLT5wYXI7CisJc3RydWN0IHMzY19mYl9wZF93aW4gKndpbmRhdGEgPSB3aW4tPndpbmRhdGE7CisJc3RydWN0IHMzY19mYiAqc2ZiID0gd2luLT5wYXJlbnQ7CisKKwlkZXZfZGJnKHNmYi0+ZGV2LCAiY2hlY2tpbmcgcGFyYW1ldGVyc1xuIik7CisKKwl2YXItPnhyZXNfdmlydHVhbCA9IG1heCgodW5zaWduZWQgaW50KXdpbmRhdGEtPnZpcnR1YWxfeCwgdmFyLT54cmVzKTsKKwl2YXItPnlyZXNfdmlydHVhbCA9IG1heCgodW5zaWduZWQgaW50KXdpbmRhdGEtPnZpcnR1YWxfeSwgdmFyLT55cmVzKTsKKworCWlmICghczNjX2ZiX3ZhbGlkYXRlX3dpbl9icHAod2luLT5pbmRleCwgdmFyLT5iaXRzX3Blcl9waXhlbCkpIHsKKwkJZGV2X2RiZyhzZmItPmRldiwgIndpbiAlZDogdW5zdXBwb3J0ZWQgYnBwICVkXG4iLAorCQkJd2luLT5pbmRleCwgdmFyLT5iaXRzX3Blcl9waXhlbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGFsd2F5cyBlbnN1cmUgdGhlc2UgYXJlIHplcm8sIGZvciBkcm9wIHRocm91Z2ggY2FzZXMgYmVsb3cgKi8KKwl2YXItPnRyYW5zcC5vZmZzZXQgPSAwOworCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisKKwlzd2l0Y2ggKHZhci0+Yml0c19wZXJfcGl4ZWwpIHsKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwljYXNlIDg6CisJCWlmICghczNjX2ZiX3dpbl9oYXNfcGFsZXR0ZSh3aW4tPmluZGV4LCB2YXItPmJpdHNfcGVyX3BpeGVsKSkgeworCQkJLyogbm9uIHBhbGxldGlzZWQsIEE6MSxSOjIsRzozLEI6MiBtb2RlICovCisJCQl2YXItPnJlZC5vZmZzZXQJCT0gNDsKKwkJCXZhci0+Z3JlZW4ub2Zmc2V0CT0gMjsKKwkJCXZhci0+Ymx1ZS5vZmZzZXQJPSAwOworCQkJdmFyLT5yZWQubGVuZ3RoCQk9IDU7CisJCQl2YXItPmdyZWVuLmxlbmd0aAk9IDM7CisJCQl2YXItPmJsdWUubGVuZ3RoCT0gMjsKKwkJCXZhci0+dHJhbnNwLm9mZnNldAk9IDc7CisJCQl2YXItPnRyYW5zcC5sZW5ndGgJPSAxOworCQl9IGVsc2UgeworCQkJdmFyLT5yZWQub2Zmc2V0CT0gMDsKKwkJCXZhci0+cmVkLmxlbmd0aAk9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCQl2YXItPmdyZWVuCT0gdmFyLT5yZWQ7CisJCQl2YXItPmJsdWUJPSB2YXItPnJlZDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgMTk6CisJCS8qIDY2NiB3aXRoIG9uZSBiaXQgYWxwaGEvdHJhbnNwYXJlbmN5ICovCisJCXZhci0+dHJhbnNwLm9mZnNldAk9IDE4OworCQl2YXItPnRyYW5zcC5sZW5ndGgJPSAxOworCWNhc2UgMTg6CisJCXZhci0+Yml0c19wZXJfcGl4ZWwJPSAzMjsKKworCQkvKiA2NjYgZm9ybWF0ICovCisJCXZhci0+cmVkLm9mZnNldAkJPSAxMjsKKwkJdmFyLT5ncmVlbi5vZmZzZXQJPSA2OworCQl2YXItPmJsdWUub2Zmc2V0CT0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoCQk9IDY7CisJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gNjsKKwkJdmFyLT5ibHVlLmxlbmd0aAk9IDY7CisJCWJyZWFrOworCisJY2FzZSAxNjoKKwkJLyogMTYgYnBwLCA1NjUgZm9ybWF0ICovCisJCXZhci0+cmVkLm9mZnNldAkJPSAxMTsKKwkJdmFyLT5ncmVlbi5vZmZzZXQJPSA1OworCQl2YXItPmJsdWUub2Zmc2V0CT0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoCQk9IDU7CisJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gNjsKKwkJdmFyLT5ibHVlLmxlbmd0aAk9IDU7CisJCWJyZWFrOworCisJY2FzZSAyODoKKwljYXNlIDI1OgorCQl2YXItPnRyYW5zcC5sZW5ndGgJPSB2YXItPmJpdHNfcGVyX3BpeGVsIC0gMjQ7CisJCXZhci0+dHJhbnNwLm9mZnNldAk9IDI0OworCQkvKiBkcm9wIHRocm91Z2ggKi8KKwljYXNlIDI0OgorCQkvKiBvdXIgMjRicHAgaXMgdW5wYWNrZWQsIHNvIDMyYnBwICovCisJCXZhci0+Yml0c19wZXJfcGl4ZWwJPSAzMjsKKwljYXNlIDMyOgorCQl2YXItPnJlZC5vZmZzZXQJCT0gMTY7CisJCXZhci0+cmVkLmxlbmd0aAkJPSA4OworCQl2YXItPmdyZWVuLm9mZnNldAk9IDg7CisJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gODsKKwkJdmFyLT5ibHVlLm9mZnNldAk9IDA7CisJCXZhci0+Ymx1ZS5sZW5ndGgJPSA4OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoc2ZiLT5kZXYsICJpbnZhbGlkIGJwcFxuIik7CisJfQorCisJZGV2X2RiZyhzZmItPmRldiwgIiVzOiB2ZXJpZmllZCBwYXJhbWV0ZXJzXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogczNjX2ZiX2NhbGNfcGl4Y2xrKCkgLSBjYWxjdWxhdGUgdGhlIGRpdmlkZXIgdG8gY3JlYXRlIHRoZSBwaXhlbCBjbG9jay4KKyAqIEBzZmI6IFRoZSBoYXJkd2FyZSBzdGF0ZS4KKyAqIEBwaXhjbG9jazogVGhlIHBpeGVsIGNsb2NrIHdhbnRlZCwgaW4gcGljb3NlY29uZHMuCisgKgorICogR2l2ZW4gdGhlIHNwZWNpZmllZCBwaXhlbCBjbG9jaywgd29yayBvdXQgdGhlIG5lY2Vzc2FyeSBkaXZpZGVyIHRvIGdldAorICogY2xvc2UgdG8gdGhlIG91dHB1dCBmcmVxdWVuY3kuCisgKi8KK3N0YXRpYyBpbnQgczNjX2ZiX2NhbGNfcGl4Y2xrKHN0cnVjdCBzM2NfZmIgKnNmYiwgdW5zaWduZWQgaW50IHBpeGNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGNsayA9IGNsa19nZXRfcmF0ZShzZmItPmJ1c19jbGspOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXA7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKworCXRtcCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY2xrOworCXRtcCAqPSBwaXhjbGs7CisKKwlkb19kaXYodG1wLCAxMDAwMDAwMDAwVUwpOworCXJlc3VsdCA9ICh1bnNpZ25lZCBpbnQpdG1wIC8gMTAwMDsKKworCWRldl9kYmcoc2ZiLT5kZXYsICJwaXhjbGs9JXUsIGNsaz0lbHUsIGRpdj0lZCAoJWx1KVxuIiwKKwkJcGl4Y2xrLCBjbGssIHJlc3VsdCwgY2xrIC8gcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogczNjX2ZiX2FsaWduX3dvcmQoKSAtIGFsaWduIHBpeGVsIGNvdW50IHRvIHdvcmQgYm91bmRhcnkKKyAqIEBicHA6IFRoZSBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwKKyAqIEBwaXg6IFRoZSB2YWx1ZSB0byBiZSBhbGlnbmVkLgorICoKKyAqIEFsaWduIHRoZSBnaXZlbiBwaXhlbCBjb3VudCBzbyB0aGF0IGl0IHdpbGwgc3RhcnQgb24gYW4gMzJiaXQgd29yZAorICogYm91bmRhcnkuCisgKi8KK3N0YXRpYyBpbnQgczNjX2ZiX2FsaWduX3dvcmQodW5zaWduZWQgaW50IGJwcCwgdW5zaWduZWQgaW50IHBpeCkKK3sKKwlpbnQgcGl4X3Blcl93b3JkOworCisJaWYgKGJwcCA+IDE2KQorCQlyZXR1cm4gcGl4OworCisJcGl4X3Blcl93b3JkID0gKDggKiAzMikgLyBicHA7CisJcmV0dXJuIEFMSUdOKHBpeCwgcGl4X3Blcl93b3JkKTsKK30KKworLyoqCisgKiBzM2NfZmJfc2V0X3BhcigpIC0gZnJhbWVidWZmZXIgcmVxdWVzdCB0byBzZXQgbmV3IGZyYW1lYnVmZmVyIHN0YXRlLgorICogQGluZm86IFRoZSBmcmFtZWJ1ZmZlciB0byBjaGFuZ2UuCisgKgorICogRnJhbWVidWZmZXIgbGF5ZXIgcmVxdWVzdCB0byBzZXQgYSBuZXcgbW9kZSBmb3IgdGhlIHNwZWNpZmllZCBmcmFtZWJ1ZmZlcgorICovCitzdGF0aWMgaW50IHMzY19mYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKKwlzdHJ1Y3QgczNjX2ZiX3dpbiAqd2luID0gaW5mby0+cGFyOworCXN0cnVjdCBzM2NfZmIgKnNmYiA9IHdpbi0+cGFyZW50OworCXZvaWQgX19pb21lbSAqcmVncyA9IHNmYi0+cmVnczsKKwlpbnQgd2luX25vID0gd2luLT5pbmRleDsKKwl1MzIgZGF0YTsKKwl1MzIgcGFnZXdpZHRoOworCWludCBjbGtkaXY7CisKKwlkZXZfZGJnKHNmYi0+ZGV2LCAic2V0dGluZyBmcmFtZWJ1ZmZlciBwYXJhbWV0ZXJzXG4iKTsKKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMzI6CisJY2FzZSAyNDoKKwljYXNlIDE2OgorCWNhc2UgMTI6CisJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlicmVhazsKKwljYXNlIDg6CisJCWlmIChzM2NfZmJfd2luX2hhc19wYWxldHRlKHdpbl9ubywgOCkpCisJCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOworCQllbHNlCisJCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX01PTk8wMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKKwkJYnJlYWs7CisJfQorCisJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gKHZhci0+eHJlc192aXJ0dWFsICogdmFyLT5iaXRzX3Blcl9waXhlbCkgLyA4OworCisJLyogZGlzYWJsZSB0aGUgd2luZG93IHdoaWxzdCB3ZSB1cGRhdGUgaXQgKi8KKwl3cml0ZWwoMCwgcmVncyArIFdJTkNPTih3aW5fbm8pKTsKKworCS8qIHVzZSB3aW5kb3cgMCBhcyB0aGUgYmFzaXMgZm9yIHRoZSBsY2Qgb3V0cHV0IHRpbWluZ3MgKi8KKworCWlmICh3aW5fbm8gPT0gMCkgeworCQljbGtkaXYgPSBzM2NfZmJfY2FsY19waXhjbGsoc2ZiLCB2YXItPnBpeGNsb2NrKTsKKworCQlkYXRhID0gc2ZiLT5wZGF0YS0+dmlkY29uMDsKKwkJZGF0YSAmPSB+KFZJRENPTjBfQ0xLVkFMX0ZfTUFTSyB8IFZJRENPTjBfQ0xLRElSKTsKKworCQlpZiAoY2xrZGl2ID4gMSkKKwkJCWRhdGEgfD0gVklEQ09OMF9DTEtWQUxfRihjbGtkaXYtMSkgfCBWSURDT04wX0NMS0RJUjsKKwkJZWxzZQorCQkJZGF0YSAmPSB+VklEQ09OMF9DTEtESVI7CS8qIDE6MSBjbG9jayAqLworCisJCS8qIHdyaXRlIHRoZSB0aW1pbmcgZGF0YSB0byB0aGUgcGFuZWwgKi8KKworCQlkYXRhIHw9IFZJRENPTjBfRU5WSUQgfCBWSURDT04wX0VOVklEX0Y7CisJCXdyaXRlbChkYXRhLCByZWdzICsgVklEQ09OMCk7CisKKwkJZGF0YSA9IFZJRFRDT04wX1ZCUEQodmFyLT51cHBlcl9tYXJnaW4gLSAxKSB8CisJCSAgICAgICBWSURUQ09OMF9WRlBEKHZhci0+bG93ZXJfbWFyZ2luIC0gMSkgfAorCQkgICAgICAgVklEVENPTjBfVlNQVyh2YXItPnZzeW5jX2xlbiAtIDEpOworCisJCXdyaXRlbChkYXRhLCByZWdzICsgVklEVENPTjApOworCisJCWRhdGEgPSBWSURUQ09OMV9IQlBEKHZhci0+bGVmdF9tYXJnaW4gLSAxKSB8CisJCSAgICAgICBWSURUQ09OMV9IRlBEKHZhci0+cmlnaHRfbWFyZ2luIC0gMSkgfAorCQkgICAgICAgVklEVENPTjFfSFNQVyh2YXItPmhzeW5jX2xlbiAtIDEpOworCisJCXdyaXRlbChkYXRhLCByZWdzICsgVklEVENPTjEpOworCisJCWRhdGEgPSBWSURUQ09OMl9MSU5FVkFMKHZhci0+eXJlcyAtIDEpIHwKKwkJICAgICAgIFZJRFRDT04yX0hPWlZBTCh2YXItPnhyZXMgLSAxKTsKKwkJd3JpdGVsKGRhdGEsIHJlZ3MgKyBWSURUQ09OMik7CisJfQorCisJLyogd3JpdGUgdGhlIGJ1ZmZlciBhZGRyZXNzICovCisKKwl3cml0ZWwoaW5mby0+Zml4LnNtZW1fc3RhcnQsIHJlZ3MgKyBWSURXX0JVRl9TVEFSVCh3aW5fbm8pKTsKKworCWRhdGEgPSBpbmZvLT5maXguc21lbV9zdGFydCArIGluZm8tPmZpeC5saW5lX2xlbmd0aCAqIHZhci0+eXJlczsKKwl3cml0ZWwoZGF0YSwgcmVncyArIFZJRFdfQlVGX0VORCh3aW5fbm8pKTsKKworCXBhZ2V3aWR0aCA9ICh2YXItPnhyZXMgKiB2YXItPmJpdHNfcGVyX3BpeGVsKSA+PiAzOworCWRhdGEgPSBWSURXX0JVRl9TSVpFX09GRlNFVChpbmZvLT5maXgubGluZV9sZW5ndGggLSBwYWdld2lkdGgpIHwKKwkgICAgICAgVklEV19CVUZfU0laRV9QQUdFV0lEVEgocGFnZXdpZHRoKTsKKwl3cml0ZWwoZGF0YSwgcmVncyArIFZJRFdfQlVGX1NJWkUod2luX25vKSk7CisKKwkvKiB3cml0ZSAnT1NEJyByZWdpc3RlcnMgdG8gY29udHJvbCBwb3NpdGlvbiBvZiBmcmFtZWJ1ZmZlciAqLworCisJZGF0YSA9IFZJRE9TRHhBX1RPUExFRlRfWCgwKSB8IFZJRE9TRHhBX1RPUExFRlRfWSgwKTsKKwl3cml0ZWwoZGF0YSwgcmVncyArIFZJRE9TRF9BKHdpbl9ubykpOworCisJZGF0YSA9IFZJRE9TRHhCX0JPVFJJR0hUX1goczNjX2ZiX2FsaWduX3dvcmQodmFyLT5iaXRzX3Blcl9waXhlbCwKKwkJCQkJCSAgICAgdmFyLT54cmVzIC0gMSkpIHwKKwkgICAgICAgVklET1NEeEJfQk9UUklHSFRfWSh2YXItPnlyZXMgLSAxKTsKKworCXdyaXRlbChkYXRhLCByZWdzICsgVklET1NEX0Iod2luX25vKSk7CisKKwlkYXRhID0gdmFyLT54cmVzICogdmFyLT55cmVzOworCWlmIChzM2NfZmJfaGFzX29zZF9kKHdpbl9ubykpIHsKKwkJd3JpdGVsKGRhdGEsIHJlZ3MgKyBWSURPU0RfRCh3aW5fbm8pKTsKKwkJd3JpdGVsKDAsIHJlZ3MgKyBWSURPU0RfQyh3aW5fbm8pKTsKKwl9IGVsc2UKKwkJd3JpdGVsKGRhdGEsIHJlZ3MgKyBWSURPU0RfQyh3aW5fbm8pKTsKKworCWRhdGEgPSBXSU5DT054X0VOV0lOOworCisJLyogbm90ZSwgc2luY2Ugd2UgaGF2ZSB0byByb3VuZCB1cCB0aGUgYml0cy1wZXItcGl4ZWwsIHdlIGVuZCB1cAorCSAqIHJlbHlpbmcgb24gdGhlIGJpdGZpZWxkIGluZm9ybWF0aW9uIGZvciByL2cvYi9hIHRvIHdvcmsgb3V0CisJICogZXhhY3RseSB3aGljaCBtb2RlIG9mIG9wZXJhdGlvbiBpcyBpbnRlbmRlZC4gKi8KKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMToKKwkJZGF0YSB8PSBXSU5DT04wX0JQUE1PREVfMUJQUDsKKwkJZGF0YSB8PSBXSU5DT054X0JJVFNXUDsKKwkJZGF0YSB8PSBXSU5DT054X0JVUlNUTEVOXzRXT1JEOworCQlicmVhazsKKwljYXNlIDI6CisJCWRhdGEgfD0gV0lOQ09OMF9CUFBNT0RFXzJCUFA7CisJCWRhdGEgfD0gV0lOQ09OeF9CSVRTV1A7CisJCWRhdGEgfD0gV0lOQ09OeF9CVVJTVExFTl84V09SRDsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlkYXRhIHw9IFdJTkNPTjBfQlBQTU9ERV80QlBQOworCQlkYXRhIHw9IFdJTkNPTnhfQklUU1dQOworCQlkYXRhIHw9IFdJTkNPTnhfQlVSU1RMRU5fOFdPUkQ7CisJCWJyZWFrOworCWNhc2UgODoKKwkJaWYgKHZhci0+dHJhbnNwLmxlbmd0aCAhPSAwKQorCQkJZGF0YSB8PSBXSU5DT04xX0JQUE1PREVfOEJQUF8xMjMyOworCQllbHNlCisJCQlkYXRhIHw9IFdJTkNPTjBfQlBQTU9ERV84QlBQX1BBTEVUVEU7CisJCWRhdGEgfD0gV0lOQ09OeF9CVVJTVExFTl84V09SRDsKKwkJZGF0YSB8PSBXSU5DT054X0JZVFNXUDsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJaWYgKHZhci0+dHJhbnNwLmxlbmd0aCAhPSAwKQorCQkJZGF0YSB8PSBXSU5DT04xX0JQUE1PREVfMTZCUFBfQTE1NTU7CisJCWVsc2UKKwkJCWRhdGEgfD0gV0lOQ09OMF9CUFBNT0RFXzE2QlBQXzU2NTsKKwkJZGF0YSB8PSBXSU5DT054X0hBV1NXUDsKKwkJZGF0YSB8PSBXSU5DT054X0JVUlNUTEVOXzE2V09SRDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwljYXNlIDMyOgorCQlpZiAodmFyLT5yZWQubGVuZ3RoID09IDYpIHsKKwkJCWlmICh2YXItPnRyYW5zcC5sZW5ndGggIT0gMCkKKwkJCQlkYXRhIHw9IFdJTkNPTjFfQlBQTU9ERV8xOUJQUF9BMTY2NjsKKwkJCWVsc2UKKwkJCQlkYXRhIHw9IFdJTkNPTjFfQlBQTU9ERV8xOEJQUF82NjY7CisJCX0gZWxzZSBpZiAodmFyLT50cmFuc3AubGVuZ3RoICE9IDApCisJCQlkYXRhIHw9IFdJTkNPTjFfQlBQTU9ERV8yNUJQUF9BMTg4ODsKKwkJZWxzZQorCQkJZGF0YSB8PSBXSU5DT04wX0JQUE1PREVfMjRCUFBfODg4OworCisJCWRhdGEgfD0gV0lOQ09OeF9CVVJTVExFTl8xNldPUkQ7CisJCWJyZWFrOworCX0KKworCXdyaXRlbChkYXRhLCByZWdzICsgV0lOQ09OKHdpbl9ubykpOworCXdyaXRlbCgweDAsIHJlZ3MgKyBXSU54TUFQKHdpbl9ubykpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogczNjX2ZiX3VwZGF0ZV9wYWxldHRlKCkgLSBzZXQgb3Igc2NoZWR1bGUgYSBwYWxldHRlIHVwZGF0ZS4KKyAqIEBzZmI6IFRoZSBoYXJkd2FyZSBpbmZvcm1hdGlvbi4KKyAqIEB3aW46IFRoZSB3aW5kb3cgYmVpbmcgdXBkYXRlZC4KKyAqIEByZWc6IFRoZSBwYWxldHRlIGluZGV4IGJlaW5nIGNoYW5nZWQuCisgKiBAdmFsdWU6IFRoZSBjb21wdXRlZCBwYWxldHRlIHZhbHVlLgorICoKKyAqIENoYW5nZSB0aGUgdmFsdWUgb2YgYSBwYWxldHRlIHJlZ2lzdGVyLCBlaXRoZXIgYnkgZGlyZWN0bHkgd3JpdGluZyB0bworICogdGhlIHBhbGV0dGUgKHRoaXMgcmVxdWlyZXMgdGhlIHBhbGV0dGUgUkFNIHRvIGJlIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZQorICogaGFyZHdhcmUgd2hpbHN0IHRoaXMgaXMgaW4gcHJvZ3Jlc3MpIG9yIHNjaGVkdWxlIHRoZSB1cGRhdGUgZm9yIGxhdGVyLgorICoKKyAqIEF0IHRoZSBtb21lbnQsIHNpbmNlIHdlIGhhdmUgbm8gVlNZTkMgaW50ZXJydXB0IHN1cHBvcnQsIHdlIHNpbXBseSBzZXQKKyAqIHRoZSBwYWxldHRlIGVudHJ5IGRpcmVjdGx5LgorICovCitzdGF0aWMgdm9pZCBzM2NfZmJfdXBkYXRlX3BhbGV0dGUoc3RydWN0IHMzY19mYiAqc2ZiLAorCQkJCSAgc3RydWN0IHMzY19mYl93aW4gKndpbiwKKwkJCQkgIHVuc2lnbmVkIGludCByZWcsCisJCQkJICB1MzIgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtICpwYWxyZWc7CisJdTMyIHBhbGNvbjsKKworCXBhbHJlZyA9IHNmYi0+cmVncyArIHMzY19mYl9wYWxfcmVnKHdpbi0+aW5kZXgsIHJlZyk7CisKKwlkZXZfZGJnKHNmYi0+ZGV2LCAiJXM6IHdpbiAlZCwgcmVnICVkICglcCk6ICUwOHhcbiIsCisJCV9fZnVuY19fLCB3aW4tPmluZGV4LCByZWcsIHBhbHJlZywgdmFsdWUpOworCisJd2luLT5wYWxldHRlX2J1ZmZlcltyZWddID0gdmFsdWU7CisKKwlwYWxjb24gPSByZWFkbChzZmItPnJlZ3MgKyBXUEFMQ09OKTsKKwl3cml0ZWwocGFsY29uIHwgV1BBTENPTl9QQUxfVVBEQVRFLCBzZmItPnJlZ3MgKyBXUEFMQ09OKTsKKworCWlmIChzM2NfZmJfcGFsX2lzMTYod2luLT5pbmRleCkpCisJCXdyaXRldyh2YWx1ZSwgcGFscmVnKTsKKwllbHNlCisJCXdyaXRlbCh2YWx1ZSwgcGFscmVnKTsKKworCXdyaXRlbChwYWxjb24sIHNmYi0+cmVncyArIFdQQUxDT04pOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjaGFuX3RvX2ZpZWxkKHVuc2lnbmVkIGludCBjaGFuLAorCQkJCQkgc3RydWN0IGZiX2JpdGZpZWxkICpiZikKK3sKKwljaGFuICY9IDB4ZmZmZjsKKwljaGFuID4+PSAxNiAtIGJmLT5sZW5ndGg7CisJcmV0dXJuIGNoYW4gPDwgYmYtPm9mZnNldDsKK30KKworLyoqCisgKiBzM2NfZmJfc2V0Y29scmVnKCkgLSBmcmFtZWJ1ZmZlciBsYXllciByZXF1ZXN0IHRvIGNoYW5nZSBwYWxldHRlLgorICogQHJlZ25vOiBUaGUgcGFsZXR0ZSBpbmRleCB0byBjaGFuZ2UuCisgKiBAcmVkOiBUaGUgcmVkIGZpZWxkIGZvciB0aGUgcGFsZXR0ZSBkYXRhLgorICogQGdyZWVuOiBUaGUgZ3JlZW4gZmllbGQgZm9yIHRoZSBwYWxldHRlIGRhdGEuCisgKiBAYmx1ZTogVGhlIGJsdWUgZmllbGQgZm9yIHRoZSBwYWxldHRlIGRhdGEuCisgKiBAdHJhbnM6IFRoZSB0cmFuc3BhcmVuY3kgKGFscGhhKSBmaWVsZCBmb3IgdGhlIHBhbGV0dGUgZGF0YS4KKyAqIEBpbmZvOiBUaGUgZnJhbWVidWZmZXIgYmVpbmcgY2hhbmdlZC4KKyAqLworc3RhdGljIGludCBzM2NfZmJfc2V0Y29scmVnKHVuc2lnbmVkIHJlZ25vLAorCQkJICAgIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sIHVuc2lnbmVkIGJsdWUsCisJCQkgICAgdW5zaWduZWQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgczNjX2ZiX3dpbiAqd2luID0gaW5mby0+cGFyOworCXN0cnVjdCBzM2NfZmIgKnNmYiA9IHdpbi0+cGFyZW50OworCXVuc2lnbmVkIGludCB2YWw7CisKKwlkZXZfZGJnKHNmYi0+ZGV2LCAiJXM6IHdpbiAlZDogJWQgPT4gcmdiPSVkLyVkLyVkXG4iLAorCQlfX2Z1bmNfXywgd2luLT5pbmRleCwgcmVnbm8sIHJlZCwgZ3JlZW4sIGJsdWUpOworCisJc3dpdGNoIChpbmZvLT5maXgudmlzdWFsKSB7CisJY2FzZSBGQl9WSVNVQUxfVFJVRUNPTE9SOgorCQkvKiB0cnVlLWNvbG91ciwgdXNlIHBzZXVkby1wYWxldHRlICovCisKKwkJaWYgKHJlZ25vIDwgMTYpIHsKKwkJCXUzMiAqcGFsID0gaW5mby0+cHNldWRvX3BhbGV0dGU7CisKKwkJCXZhbCAgPSBjaGFuX3RvX2ZpZWxkKHJlZCwgICAmaW5mby0+dmFyLnJlZCk7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChncmVlbiwgJmluZm8tPnZhci5ncmVlbik7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChibHVlLCAgJmluZm8tPnZhci5ibHVlKTsKKworCQkJcGFsW3JlZ25vXSA9IHZhbDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgRkJfVklTVUFMX1BTRVVET0NPTE9SOgorCQlpZiAocmVnbm8gPCBzM2NfZmJfd2luX3BhbF9zaXplKHdpbi0+aW5kZXgpKSB7CisJCQl2YWwgID0gY2hhbl90b19maWVsZChyZWQsICZ3aW4tPnBhbGV0dGUucik7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChncmVlbiwgJndpbi0+cGFsZXR0ZS5nKTsKKwkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGJsdWUsICZ3aW4tPnBhbGV0dGUuYik7CisKKwkJCXMzY19mYl91cGRhdGVfcGFsZXR0ZShzZmIsIHdpbiwgcmVnbm8sIHZhbCk7CisJCX0KKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAxOwkvKiB1bmtub3duIHR5cGUgKi8KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzM2NfZmJfZW5hYmxlKCkgLSBTZXQgdGhlIHN0YXRlIG9mIHRoZSBtYWluIExDRCBvdXRwdXQKKyAqIEBzZmI6IFRoZSBtYWluIGZyYW1lYnVmZmVyIHN0YXRlLgorICogQGVuYWJsZTogVGhlIHN0YXRlIHRvIHNldC4KKyAqLworc3RhdGljIHZvaWQgczNjX2ZiX2VuYWJsZShzdHJ1Y3QgczNjX2ZiICpzZmIsIGludCBlbmFibGUpCit7CisJdTMyIHZpZGNvbjAgPSByZWFkbChzZmItPnJlZ3MgKyBWSURDT04wKTsKKworCWlmIChlbmFibGUpCisJCXZpZGNvbjAgfD0gVklEQ09OMF9FTlZJRCB8IFZJRENPTjBfRU5WSURfRjsKKwllbHNlIHsKKwkJLyogc2VlIHRoZSBub3RlIGluIHRoZSBmcmFtZWJ1ZmZlciBkYXRhc2hlZXQgYWJvdXQKKwkJICogd2h5IHlvdSBjYW5ub3QgdGFrZSBib3RoIG9mIHRoZXNlIGJpdHMgZG93biBhdCB0aGUKKwkJICogc2FtZSB0aW1lLiAqLworCisJCWlmICghKHZpZGNvbjAgJiBWSURDT04wX0VOVklEKSkKKwkJCXJldHVybjsKKworCQl2aWRjb24wIHw9IFZJRENPTjBfRU5WSUQ7CisJCXZpZGNvbjAgJj0gflZJRENPTjBfRU5WSURfRjsKKwl9CisKKwl3cml0ZWwodmlkY29uMCwgc2ZiLT5yZWdzICsgVklEQ09OMCk7Cit9CisKKy8qKgorICogczNjX2ZiX2JsYW5rKCkgLSBibGFuayBvciB1bmJsYW5rIHRoZSBnaXZlbiB3aW5kb3cKKyAqIEBibGFua19tb2RlOiBUaGUgYmxhbmsgc3RhdGUgZnJvbSBGQl9CTEFOS18qCisgKiBAaW5mbzogVGhlIGZyYW1lYnVmZmVyIHRvIGJsYW5rLgorICoKKyAqIEZyYW1lYnVmZmVyIGxheWVyIHJlcXVlc3QgdG8gY2hhbmdlIHRoZSBwb3dlciBzdGF0ZS4KKyAqLworc3RhdGljIGludCBzM2NfZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBzM2NfZmJfd2luICp3aW4gPSBpbmZvLT5wYXI7CisJc3RydWN0IHMzY19mYiAqc2ZiID0gd2luLT5wYXJlbnQ7CisJdW5zaWduZWQgaW50IGluZGV4ID0gd2luLT5pbmRleDsKKwl1MzIgd2luY29uOworCisJZGV2X2RiZyhzZmItPmRldiwgImJsYW5rIG1vZGUgJWRcbiIsIGJsYW5rX21vZGUpOworCisJd2luY29uID0gcmVhZGwoc2ZiLT5yZWdzICsgV0lOQ09OKGluZGV4KSk7CisKKwlzd2l0Y2ggKGJsYW5rX21vZGUpIHsKKwljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoKKwkJd2luY29uICY9IH5XSU5DT054X0VOV0lOOworCQlzZmItPmVuYWJsZWQgJj0gfigxIDw8IGluZGV4KTsKKwkJLyogZmFsbCB0aHJvdWdoIHRvIEZCX0JMQU5LX05PUk1BTCAqLworCisJY2FzZSBGQl9CTEFOS19OT1JNQUw6CisJCS8qIGRpc2FibGUgdGhlIERNQSBhbmQgZGlzcGxheSAweDAgKGJsYWNrKSAqLworCQl3cml0ZWwoV0lOeE1BUF9NQVAgfCBXSU54TUFQX01BUF9DT0xPVVIoMHgwKSwKKwkJICAgICAgIHNmYi0+cmVncyArIFdJTnhNQVAoaW5kZXgpKTsKKwkJYnJlYWs7CisKKwljYXNlIEZCX0JMQU5LX1VOQkxBTks6CisJCXdyaXRlbCgweDAsIHNmYi0+cmVncyArIFdJTnhNQVAoaW5kZXgpKTsKKwkJd2luY29uIHw9IFdJTkNPTnhfRU5XSU47CisJCXNmYi0+ZW5hYmxlZCB8PSAoMSA8PCBpbmRleCk7CisJCWJyZWFrOworCisJY2FzZSBGQl9CTEFOS19WU1lOQ19TVVNQRU5EOgorCWNhc2UgRkJfQkxBTktfSFNZTkNfU1VTUEVORDoKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9CisKKwl3cml0ZWwod2luY29uLCBzZmItPnJlZ3MgKyBXSU5DT04oaW5kZXgpKTsKKworCS8qIENoZWNrIHRoZSBlbmFibGVkIHN0YXRlIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGJlIHJ1bm5pbmcgdGhlCisJICogbWFpbiBMQ0QgaW50ZXJmYWNlLCBhcyBpZiB0aGVyZSBhcmUgbm8gYWN0aXZlIHdpbmRvd3MgdGhlbgorCSAqIGl0IGlzIGhpZ2hseSBsaWtlbHkgdGhhdCB3ZSBhbHNvIGRvIG5vdCBuZWVkIHRvIG91dHB1dAorCSAqIGFueXRoaW5nLgorCSAqLworCisJLyogV2UgY291bGQgZG8gc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBjb2RlLCBidXQgdGhlIGN1cnJlbnQKKwkgKiBzeXN0ZW0gb2YgdXNpbmcgZnJhbWVidWZmZXIgZXZlbnRzIG1lYW5zIHRoYXQgd2UgY2Fubm90IG1ha2UKKwkgKiB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBqdXN0IHdpbmRvdyAwIGJlaW5nIGluYWN0aXZlIGFuZCBhbGwKKwkgKiB0aGUgd2luZG93cyBiZWluZyBkb3duLgorCSAqCisJICogczNjX2ZiX2VuYWJsZShzZmIsIHNmYi0+ZW5hYmxlZCA/IDEgOiAwKTsKKwkqLworCisJLyogd2UncmUgc3R1Y2sgd2l0aCB0aGlzIHVudGlsIHdlIGNhbiBkbyBzb21ldGhpbmcgYWJvdXQgb3ZlcnJpZGluZworCSAqIHRoZSBwb3dlciBjb250cm9sIHVzaW5nIHRoZSBibGFua2luZyBldmVudCBmb3IgYSBzaW5nbGUgZmIuCisJICovCisJaWYgKGluZGV4ID09IDApCisJCXMzY19mYl9lbmFibGUoc2ZiLCBibGFua19tb2RlICE9IEZCX0JMQU5LX1BPV0VSRE9XTiA/IDEgOiAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZiX29wcyBzM2NfZmJfb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkuZmJfY2hlY2tfdmFyCT0gczNjX2ZiX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3Bhcgk9IHMzY19mYl9zZXRfcGFyLAorCS5mYl9ibGFuawk9IHMzY19mYl9ibGFuaywKKwkuZmJfc2V0Y29scmVnCT0gczNjX2ZiX3NldGNvbHJlZywKKwkuZmJfZmlsbHJlY3QJPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCT0gY2ZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQJPSBjZmJfaW1hZ2VibGl0LAorfTsKKworLyoqCisgKiBzM2NfZmJfYWxsb2NfbWVtb3J5KCkgLSBhbGxvY2F0ZSBkaXNwbGF5IG1lbW9yeSBmb3IgZnJhbWVidWZmZXIgd2luZG93CisgKiBAc2ZiOiBUaGUgYmFzZSByZXNvdXJjZXMgZm9yIHRoZSBoYXJkd2FyZS4KKyAqIEB3aW46IFRoZSB3aW5kb3cgdG8gaW5pdGlhbGlzZSBtZW1vcnkgZm9yLgorICoKKyAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGdpdmVuIGZyYW1lYnVmZmVyLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NfZmJfYWxsb2NfbWVtb3J5KHN0cnVjdCBzM2NfZmIgKnNmYiwKKwkJCQkJIHN0cnVjdCBzM2NfZmJfd2luICp3aW4pCit7CisJc3RydWN0IHMzY19mYl9wZF93aW4gKndpbmRhdGEgPSB3aW4tPndpbmRhdGE7CisJdW5zaWduZWQgaW50IHJlYWxfc2l6ZSwgdmlydF9zaXplLCBzaXplOworCXN0cnVjdCBmYl9pbmZvICpmYmkgPSB3aW4tPmZiaW5mbzsKKwlkbWFfYWRkcl90IG1hcF9kbWE7CisKKwlkZXZfZGJnKHNmYi0+ZGV2LCAiYWxsb2NhdGluZyBtZW1vcnkgZm9yIGRpc3BsYXlcbiIpOworCisJcmVhbF9zaXplID0gd2luZGF0YS0+d2luX21vZGUueHJlcyAqIHdpbmRhdGEtPndpbl9tb2RlLnlyZXM7CisJdmlydF9zaXplID0gd2luZGF0YS0+dmlydHVhbF94ICogd2luZGF0YS0+dmlydHVhbF95OworCisJZGV2X2RiZyhzZmItPmRldiwgInJlYWxfc2l6ZT0ldSAoJXUuJXUpLCB2aXJ0X3NpemU9JXUgKCV1LiV1KVxuIiwKKwkJcmVhbF9zaXplLCB3aW5kYXRhLT53aW5fbW9kZS54cmVzLCB3aW5kYXRhLT53aW5fbW9kZS55cmVzLAorCQl2aXJ0X3NpemUsIHdpbmRhdGEtPnZpcnR1YWxfeCwgd2luZGF0YS0+dmlydHVhbF95KTsKKworCXNpemUgPSAocmVhbF9zaXplID4gdmlydF9zaXplKSA/IHJlYWxfc2l6ZSA6IHZpcnRfc2l6ZTsKKwlzaXplICo9ICh3aW5kYXRhLT5tYXhfYnBwID4gMTYpID8gMzIgOiB3aW5kYXRhLT5tYXhfYnBwOworCXNpemUgLz0gODsKKworCWZiaS0+Zml4LnNtZW1fbGVuID0gc2l6ZTsKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKworCWRldl9kYmcoc2ZiLT5kZXYsICJ3YW50ICV1IGJ5dGVzIGZvciB3aW5kb3dcbiIsIHNpemUpOworCisJZmJpLT5zY3JlZW5fYmFzZSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoc2ZiLT5kZXYsIHNpemUsCisJCQkJCQkgICZtYXBfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZiaS0+c2NyZWVuX2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X2RiZyhzZmItPmRldiwgIm1hcHBlZCAleCB0byAlcFxuIiwKKwkJKHVuc2lnbmVkIGludCltYXBfZG1hLCBmYmktPnNjcmVlbl9iYXNlKTsKKworCW1lbXNldChmYmktPnNjcmVlbl9iYXNlLCAweDAsIHNpemUpOworCWZiaS0+Zml4LnNtZW1fc3RhcnQgPSBtYXBfZG1hOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogczNjX2ZiX2ZyZWVfbWVtb3J5KCkgLSBmcmVlIHRoZSBkaXNwbGF5IG1lbW9yeSBmb3IgdGhlIGdpdmVuIHdpbmRvdworICogQHNmYjogVGhlIGJhc2UgcmVzb3VyY2VzIGZvciB0aGUgaGFyZHdhcmUuCisgKiBAd2luOiBUaGUgd2luZG93IHRvIGZyZWUgdGhlIGRpc3BsYXkgbWVtb3J5IGZvci4KKyAqCisgKiBGcmVlIHRoZSBkaXNwbGF5IG1lbW9yeSBhbGxvY2F0ZWQgYnkgczNjX2ZiX2FsbG9jX21lbW9yeSgpLgorICovCitzdGF0aWMgdm9pZCBzM2NfZmJfZnJlZV9tZW1vcnkoc3RydWN0IHMzY19mYiAqc2ZiLCBzdHJ1Y3QgczNjX2ZiX3dpbiAqd2luKQoreworCXN0cnVjdCBmYl9pbmZvICpmYmkgPSB3aW4tPmZiaW5mbzsKKworCWRtYV9mcmVlX3dyaXRlY29tYmluZShzZmItPmRldiwgUEFHRV9BTElHTihmYmktPmZpeC5zbWVtX2xlbiksCisJCQkgICAgICBmYmktPnNjcmVlbl9iYXNlLCBmYmktPmZpeC5zbWVtX3N0YXJ0KTsKK30KKworLyoqCisgKiBzM2NfZmJfcmVsZWFzZV93aW4oKSAtIHJlbGVhc2UgcmVzb3VyY2VzIGZvciBhIGZyYW1lYnVmZmVyIHdpbmRvdy4KKyAqIEB3aW46IFRoZSB3aW5kb3cgdG8gY2xlYW51cCB0aGUgcmVzb3VyY2VzIGZvci4KKyAqCisgKiBSZWxlYXNlIHRoZSByZXNvdXJjZXMgdGhhdCB3aGVyZSBjbGFpbWVkIGZvciB0aGUgaGFyZHdhcmUgd2luZG93LAorICogc3VjaCBhcyB0aGUgZnJhbWVidWZmZXIgaW5zdGFuY2UgYW5kIGFueSBtZW1vcnkgY2xhaW1lZCBmb3IgaXQuCisgKi8KK3N0YXRpYyB2b2lkIHMzY19mYl9yZWxlYXNlX3dpbihzdHJ1Y3QgczNjX2ZiICpzZmIsIHN0cnVjdCBzM2NfZmJfd2luICp3aW4pCit7CisJZmJfZGVhbGxvY19jbWFwKCZ3aW4tPmZiaW5mby0+Y21hcCk7CisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcih3aW4tPmZiaW5mbyk7CisJczNjX2ZiX2ZyZWVfbWVtb3J5KHNmYiwgd2luKTsKK30KKworLyoqCisgKiBzM2NfZmJfcHJvYmVfd2luKCkgLSByZWdpc3RlciBhbiBoYXJkd2FyZSB3aW5kb3cKKyAqIEBzZmI6IFRoZSBiYXNlIHJlc291cmNlcyBmb3IgdGhlIGhhcmR3YXJlCisgKiBAcmVzOiBQb2ludGVyIHRvIHdoZXJlIHRvIHBsYWNlIHRoZSByZXN1bHRhbnQgd2luZG93LgorICoKKyAqIEFsbG9jYXRlIGFuZCBkbyB0aGUgYmFzaWMgaW5pdGlhbGlzYXRpb24gZm9yIG9uZSBvZiB0aGUgaGFyZHdhcmUncyBncmFwaGljcworICogd2luZG93cy4KKyAqLworc3RhdGljIGludCBfX2RldmluaXQgczNjX2ZiX3Byb2JlX3dpbihzdHJ1Y3QgczNjX2ZiICpzZmIsIHVuc2lnbmVkIGludCB3aW5fbm8sCisJCQkJICAgICAgc3RydWN0IHMzY19mYl93aW4gKipyZXMpCit7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXI7CisJc3RydWN0IGZiX3ZpZGVvbW9kZSAqaW5pdG1vZGU7CisJc3RydWN0IHMzY19mYl9wZF93aW4gKndpbmRhdGE7CisJc3RydWN0IHMzY19mYl93aW4gKndpbjsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpbmZvOworCWludCBwYWxldHRlX3NpemU7CisJaW50IHJldDsKKworCWRldl9kYmcoc2ZiLT5kZXYsICJwcm9iaW5nIHdpbmRvdyAlZFxuIiwgd2luX25vKTsKKworCXBhbGV0dGVfc2l6ZSA9IHMzY19mYl93aW5fcGFsX3NpemUod2luX25vKTsKKworCWZiaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgczNjX2ZiX3dpbikgKworCQkJCSAgIHBhbGV0dGVfc2l6ZSAqIHNpemVvZih1MzIpLCBzZmItPmRldik7CisJaWYgKCFmYmluZm8pIHsKKwkJZGV2X2VycihzZmItPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBmcmFtZWJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXdpbmRhdGEgPSBzZmItPnBkYXRhLT53aW5bd2luX25vXTsKKwlpbml0bW9kZSA9ICZ3aW5kYXRhLT53aW5fbW9kZTsKKworCVdBUk5fT04od2luZGF0YS0+bWF4X2JwcCA9PSAwKTsKKwlXQVJOX09OKHdpbmRhdGEtPndpbl9tb2RlLnhyZXMgPT0gMCk7CisJV0FSTl9PTih3aW5kYXRhLT53aW5fbW9kZS55cmVzID09IDApOworCisJd2luID0gZmJpbmZvLT5wYXI7CisJdmFyID0gJmZiaW5mby0+dmFyOworCXdpbi0+ZmJpbmZvID0gZmJpbmZvOworCXdpbi0+cGFyZW50ID0gc2ZiOworCXdpbi0+d2luZGF0YSA9IHdpbmRhdGE7CisJd2luLT5pbmRleCA9IHdpbl9ubzsKKwl3aW4tPnBhbGV0dGVfYnVmZmVyID0gKHUzMiAqKSh3aW4gKyAxKTsKKworCXJldCA9IHMzY19mYl9hbGxvY19tZW1vcnkoc2ZiLCB3aW4pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihzZmItPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkaXNwbGF5IG1lbW9yeVxuIik7CisJCWdvdG8gZXJyX2ZyYW1lYnVmZmVyOworCX0KKworCS8qIHNldHVwIHRoZSByL2IvZyBwb3NpdGlvbnMgZm9yIHRoZSB3aW5kb3cncyBwYWxldHRlICovCisJczNjX2ZiX2luaXRfcGFsZXR0ZSh3aW5fbm8sICZ3aW4tPnBhbGV0dGUpOworCisJLyogc2V0dXAgdGhlIGluaXRpYWwgdmlkZW8gbW9kZSBmcm9tIHRoZSB3aW5kb3cgKi8KKwlmYl92aWRlb21vZGVfdG9fdmFyKCZmYmluZm8tPnZhciwgaW5pdG1vZGUpOworCisJZmJpbmZvLT5maXgudHlwZQk9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlmYmluZm8tPmZpeC5hY2NlbAk9IEZCX0FDQ0VMX05PTkU7CisJZmJpbmZvLT52YXIuYWN0aXZhdGUJPSBGQl9BQ1RJVkFURV9OT1c7CisJZmJpbmZvLT52YXIudm1vZGUJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEOworCWZiaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID0gd2luZGF0YS0+ZGVmYXVsdF9icHA7CisJZmJpbmZvLT5mYm9wcwkJPSAmczNjX2ZiX29wczsKKwlmYmluZm8tPmZsYWdzCQk9IEZCSU5GT19GTEFHX0RFRkFVTFQ7CisJZmJpbmZvLT5wc2V1ZG9fcGFsZXR0ZSAgPSAmd2luLT5wc2V1ZG9fcGFsZXR0ZTsKKworCS8qIHByZXBhcmUgdG8gYWN0dWFsbHkgc3RhcnQgdGhlIGZyYW1lYnVmZmVyICovCisKKwlyZXQgPSBzM2NfZmJfY2hlY2tfdmFyKCZmYmluZm8tPnZhciwgZmJpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHNmYi0+ZGV2LCAiY2hlY2tfdmFyIGZhaWxlZCBvbiBpbml0aWFsIHZpZGVvIHBhcmFtc1xuIik7CisJCWdvdG8gZXJyX2FsbG9jX21lbTsKKwl9CisKKwkvKiBjcmVhdGUgaW5pdGlhbCBjb2xvdXIgbWFwICovCisKKwlyZXQgPSBmYl9hbGxvY19jbWFwKCZmYmluZm8tPmNtYXAsIHMzY19mYl93aW5fcGFsX3NpemUod2luX25vKSwgMSk7CisJaWYgKHJldCA9PSAwKQorCQlmYl9zZXRfY21hcCgmZmJpbmZvLT5jbWFwLCBmYmluZm8pOworCWVsc2UKKwkJZGV2X2VycihzZmItPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBmYiBjbWFwXG4iKTsKKworCXMzY19mYl9zZXRfcGFyKGZiaW5mbyk7CisKKwlkZXZfZGJnKHNmYi0+ZGV2LCAiYWJvdXQgdG8gcmVnaXN0ZXIgZnJhbWVidWZmZXJcbiIpOworCisJLyogcnVuIHRoZSBjaGVja192YXIgYW5kIHNldF9wYXIgb24gb3VyIGNvbmZpZ3VyYXRpb24uICovCisKKwlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmluZm8pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoc2ZiLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgZnJhbWVidWZmZXJcbiIpOworCQlnb3RvIGVycl9hbGxvY19tZW07CisJfQorCisJKnJlcyA9IHdpbjsKKwlkZXZfaW5mbyhzZmItPmRldiwgIndpbmRvdyAlZDogZmIgJXNcbiIsIHdpbl9ubywgZmJpbmZvLT5maXguaWQpOworCisJcmV0dXJuIDA7CisKK2Vycl9hbGxvY19tZW06CisJczNjX2ZiX2ZyZWVfbWVtb3J5KHNmYiwgd2luKTsKKworZXJyX2ZyYW1lYnVmZmVyOgorCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJpbmZvKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHMzY19mYl9jbGVhcl93aW4oKSAtIGNsZWFyIGhhcmR3YXJlIHdpbmRvdyByZWdpc3RlcnMuCisgKiBAc2ZiOiBUaGUgYmFzZSByZXNvdXJjZXMgZm9yIHRoZSBoYXJkd2FyZS4KKyAqIEB3aW46IFRoZSB3aW5kb3cgdG8gcHJvY2Vzcy4KKyAqCisgKiBSZXNldCB0aGUgc3BlY2lmaWMgd2luZG93IHJlZ2lzdGVycyB0byBhIGtub3duIHN0YXRlLgorICovCitzdGF0aWMgdm9pZCBzM2NfZmJfY2xlYXJfd2luKHN0cnVjdCBzM2NfZmIgKnNmYiwgaW50IHdpbikKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzZmItPnJlZ3M7CisKKwl3cml0ZWwoMCwgcmVncyArIFdJTkNPTih3aW4pKTsKKwl3cml0ZWwoMHhmZmZmZmYsIHJlZ3MgKyBXeEtFWUNPTnkod2luLCAwKSk7CisJd3JpdGVsKDB4ZmZmZmZmLCByZWdzICsgV3hLRVlDT055KHdpbiwgMSkpOworCisJd3JpdGVsKDAsIHJlZ3MgKyBWSURPU0RfQSh3aW4pKTsKKwl3cml0ZWwoMCwgcmVncyArIFZJRE9TRF9CKHdpbikpOworCXdyaXRlbCgwLCByZWdzICsgVklET1NEX0Mod2luKSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHMzY19mYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IHMzY19mYl9wbGF0ZGF0YSAqcGQ7CisJc3RydWN0IHMzY19mYiAqc2ZiOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCB3aW47CisJaW50IHJldCA9IDA7CisKKwlwZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGQpIHsKKwkJZGV2X2VycihkZXYsICJubyBwbGF0Zm9ybSBkYXRhIHNwZWNpZmllZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNmYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2NfZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNmYikgeworCQlkZXZfZXJyKGRldiwgIm5vIG1lbW9yeSBmb3IgZnJhbWVidWZmZXJzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2ZiLT5kZXYgPSBkZXY7CisJc2ZiLT5wZGF0YSA9IHBkOworCisJc2ZiLT5idXNfY2xrID0gY2xrX2dldChkZXYsICJsY2QiKTsKKwlpZiAoSVNfRVJSKHNmYi0+YnVzX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGJ1cyBjbG9ja1xuIik7CisJCWdvdG8gZXJyX3NmYjsKKwl9CisKKwljbGtfZW5hYmxlKHNmYi0+YnVzX2Nsayk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGZpbmQgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnJfY2xrOworCX0KKworCXNmYi0+cmVnc19yZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAorCQkJCQkgICBkZXZfbmFtZShkZXYpKTsKKwlpZiAoIXNmYi0+cmVnc19yZXMpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY2xhaW0gcmVnaXN0ZXIgcmVnaW9uXG4iKTsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnJfY2xrOworCX0KKworCXNmYi0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIXNmYi0+cmVncykgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl9yZXFfcmVnaW9uOworCX0KKworCWRldl9kYmcoZGV2LCAiZ290IHJlc291cmNlcyAocmVncyAlcCksIHByb2Jpbmcgd2luZG93c1xuIiwgc2ZiLT5yZWdzKTsKKworCS8qIHNldHVwIGdwaW8gYW5kIG91dHB1dCBwb2xhcml0eSBjb250cm9scyAqLworCisJcGQtPnNldHVwX2dwaW8oKTsKKworCXdyaXRlbChwZC0+dmlkY29uMSwgc2ZiLT5yZWdzICsgVklEQ09OMSk7CisKKwkvKiB6ZXJvIGFsbCB3aW5kb3dzIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyAqLworCisJZm9yICh3aW4gPSAwOyB3aW4gPCBTM0NfRkJfTUFYX1dJTjsgd2luKyspCisJCXMzY19mYl9jbGVhcl93aW4oc2ZiLCB3aW4pOworCisJLyogd2UgaGF2ZSB0aGUgcmVnaXN0ZXIgc2V0dXAsIHN0YXJ0IGFsbG9jYXRpbmcgZnJhbWVidWZmZXJzICovCisKKwlmb3IgKHdpbiA9IDA7IHdpbiA8IFMzQ19GQl9NQVhfV0lOOyB3aW4rKykgeworCQlpZiAoIXBkLT53aW5bd2luXSkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IHMzY19mYl9wcm9iZV93aW4oc2ZiLCB3aW4sICZzZmItPndpbmRvd3Nbd2luXSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgd2luZG93ICVkXG4iLCB3aW4pOworCQkJZm9yICg7IHdpbiA+PSAwOyB3aW4tLSkKKwkJCQlzM2NfZmJfcmVsZWFzZV93aW4oc2ZiLCBzZmItPndpbmRvd3Nbd2luXSk7CisJCQlnb3RvIGVycl9pb3JlbWFwOworCQl9CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc2ZiKTsKKworCXJldHVybiAwOworCitlcnJfaW9yZW1hcDoKKwlpb3VubWFwKHNmYi0+cmVncyk7CisKK2Vycl9yZXFfcmVnaW9uOgorCXJlbGVhc2VfcmVzb3VyY2Uoc2ZiLT5yZWdzX3Jlcyk7CisJa2ZyZWUoc2ZiLT5yZWdzX3Jlcyk7CisKK2Vycl9jbGs6CisJY2xrX2Rpc2FibGUoc2ZiLT5idXNfY2xrKTsKKwljbGtfcHV0KHNmYi0+YnVzX2Nsayk7CisKK2Vycl9zZmI6CisJa2ZyZWUoc2ZiKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHMzY19mYl9yZW1vdmUoKSAtIENsZWFudXAgb24gbW9kdWxlIGZpbmFsaXNhdGlvbgorICogQHBkZXY6IFRoZSBwbGF0Zm9ybSBkZXZpY2Ugd2UgYXJlIGJvdW5kIHRvLgorICoKKyAqIFNodXRkb3duIGFuZCB0aGVuIHJlbGVhc2UgYWxsIHRoZSByZXNvdXJjZXMgdGhhdCB0aGUgZHJpdmVyIGFsbG9jYXRlZAorICogb24gaW5pdGlhbGlzYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgX19kZXZleGl0IHMzY19mYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgczNjX2ZiICpzZmIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgd2luOworCisJZm9yICh3aW4gPSAwOyB3aW4gPD0gUzNDX0ZCX01BWF9XSU47IHdpbisrKQorCQlzM2NfZmJfcmVsZWFzZV93aW4oc2ZiLCBzZmItPndpbmRvd3Nbd2luXSk7CisKKwlpb3VubWFwKHNmYi0+cmVncyk7CisKKwljbGtfZGlzYWJsZShzZmItPmJ1c19jbGspOworCWNsa19wdXQoc2ZiLT5idXNfY2xrKTsKKworCXJlbGVhc2VfcmVzb3VyY2Uoc2ZiLT5yZWdzX3Jlcyk7CisJa2ZyZWUoc2ZiLT5yZWdzX3Jlcyk7CisKKwlrZnJlZShzZmIpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgczNjX2ZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzM2NfZmIgKnNmYiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzM2NfZmJfd2luICp3aW47CisJaW50IHdpbl9ubzsKKworCWZvciAod2luX25vID0gUzNDX0ZCX01BWF9XSU47IHdpbl9ubyA+PSAwOyB3aW5fbm8tLSkgeworCQl3aW4gPSBzZmItPndpbmRvd3Nbd2luX25vXTsKKwkJaWYgKCF3aW4pCisJCQljb250aW51ZTsKKworCQkvKiB1c2UgdGhlIGJsYW5rIGZ1bmN0aW9uIHRvIHB1c2ggaW50byBwb3dlci1kb3duICovCisJCXMzY19mYl9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04sIHdpbi0+ZmJpbmZvKTsKKwl9CisKKwljbGtfZGlzYWJsZShzZmItPmJ1c19jbGspOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19mYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgczNjX2ZiICpzZmIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgczNjX2ZiX3dpbiAqd2luOworCWludCB3aW5fbm87CisKKwljbGtfZW5hYmxlKHNmYi0+YnVzX2Nsayk7CisKKwlmb3IgKHdpbl9ubyA9IDA7IHdpbl9ubyA8IFMzQ19GQl9NQVhfV0lOOyB3aW5fbm8rKykgeworCQl3aW4gPSBzZmItPndpbmRvd3Nbd2luX25vXTsKKwkJaWYgKCF3aW4pCisJCQljb250aW51ZTsKKworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZXN1bWluZyB3aW5kb3cgJWRcbiIsIHdpbl9ubyk7CisJCXMzY19mYl9zZXRfcGFyKHdpbi0+ZmJpbmZvKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHMzY19mYl9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgczNjX2ZiX3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzY19mYl9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHMzY19mYl9wcm9iZSwKKwkucmVtb3ZlCQk9IHMzY19mYl9yZW1vdmUsCisJLnN1c3BlbmQJPSBzM2NfZmJfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzY19mYl9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInMzYy1mYiIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2NfZmJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY19mYl9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgczNjX2ZiX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjX2ZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHMzY19mYl9pbml0KTsKK21vZHVsZV9leGl0KHMzY19mYl9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUigiQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIFMzQyBTb0MgRnJhbWVidWZmZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnMzYy1mYiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zZ2l2d2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NnaXZ3ZmIuYwppbmRleCBmNTI1MmMyLi5iYmE1MzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NnaXZ3ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NnaXZ3ZmIuYwpAQCAtODM3LDYgKzgzNyw4IEBACiAJCWlvdW5tYXAocGFyLT5yZWdzKTsKIAkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CiAJCXJlbGVhc2VfbWVtX3JlZ2lvbihEQkVfUkVHX1BIWVMsIERCRV9SRUdfU0laRSk7CisJCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9za2VsZXRvbmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NrZWxldG9uZmIuYwppbmRleCBkZjUzMzY1Li5hNDM5MTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NrZWxldG9uZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NrZWxldG9uZmIuYwpAQCAtNzk1LDggKzc5NSw5IEBACiAgICAgaWYgKCFyZXR2YWwgfHwgcmV0dmFsID09IDQpCiAJcmV0dXJuIC1FSU5WQUw7CQkJCiAKLSAgICAvKiBUaGlzIGhhcyB0byBiZWVuIGRvbmUgISEhICovCQotICAgIGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIGNtYXBfbGVuLCAwKTsKKyAgICAvKiBUaGlzIGhhcyB0byBiZSBkb25lISAqLworICAgIGlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCBjbWFwX2xlbiwgMCkpCisJcmV0dXJuIC1FTk9NRU07CiAJCiAgICAgLyogCiAgICAgICogVGhlIGZvbGxvd2luZyBpcyBkb25lIGluIHRoZSBjYXNlIG9mIGhhdmluZyBoYXJkd2FyZSB3aXRoIGEgc3RhdGljIApAQCAtODIwLDggKzgyMSwxMCBAQAogICAgICAqLwogICAgIC8qIHh4eGZiX3NldF9wYXIoaW5mbyk7ICovCiAKLSAgICBpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKQorICAgIGlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApIHsKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCXJldHVybiAtRUlOVkFMOworICAgIH0KICAgICBwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLCBpbmZvLT5ub2RlLAogCSAgIGluZm8tPmZpeC5pZCk7CiAgICAgcGNpX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7IC8qIG9yIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYyBiL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jCmluZGV4IGRjZDk4NzkuLmViNWQ3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc201MDFmYi5jCkBAIC0xNTI1LDcgKzE1MjUsMTAgQEAKIAl9CiAKIAkvKiBpbml0aWFsaXNlIGFuZCBzZXQgdGhlIHBhbGV0dGUgKi8KLQlmYl9hbGxvY19jbWFwKCZmYi0+Y21hcCwgTlJfUEFMRVRURSwgMCk7CisJaWYgKGZiX2FsbG9jX2NtYXAoJmZiLT5jbWFwLCBOUl9QQUxFVFRFLCAwKSkgeworCQlkZXZfZXJyKGluZm8tPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBjbWFwIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAlmYl9zZXRfY21hcCgmZmItPmNtYXAsIGZiKTsKIAogCXJldCA9IChmYi0+ZmJvcHMtPmZiX2NoZWNrX3ZhcikoJmZiLT52YXIsIGZiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYwppbmRleCA1YjExYTAwLi42MDlkMGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zc3RmYi5jCkBAIC0xNDIxLDEzICsxNDIxLDE2IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAJCi0JZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKTsKKwlpZiAoZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgInNzdGZiOiBjYW4ndCBhbGxvYyBjbWFwIG1lbW9yeS5cbiIpOworCQlnb3RvIGZhaWw7CisJfQogCiAJLyogcmVnaXN0ZXIgZmIgKi8KIAlpbmZvLT5kZXZpY2UgPSAmcGRldi0+ZGV2OwogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzc3RmYjogY2FuJ3QgcmVnaXN0ZXIgZnJhbWVidWZmZXIuXG4iKTsKLQkJZ290byBmYWlsOworCQlnb3RvIGZhaWxfcmVnaXN0ZXI7CiAJfQogCiAJc3N0ZmJfY2xlYXJfc2NyZWVuKGluZm8pOwpAQCAtMTQ0MSw4ICsxNDQ0LDkgQEAKIAogCXJldHVybiAwOwogCi1mYWlsOgorZmFpbF9yZWdpc3RlcjoKIAlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworZmFpbDoKIAlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKIGZhaWxfZmJfcmVtYXA6CiAJaW91bm1hcChwYXItPm1taW9fdmJhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zdGlmYi5jIGIvZHJpdmVycy92aWRlby9zdGlmYi5jCmluZGV4IDE2NjQ4MTQuLmVhYmFhZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc3RpZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3N0aWZiLmMKQEAgLTEyNjIsMjQgKzEyNjIsMjUgQEAKIAlpbmZvLT5mbGFncyA9IEZCSU5GT19ERUZBVUxUOwogCWluZm8tPnBzZXVkb19wYWxldHRlID0gJmZiLT5wc2V1ZG9fcGFsZXR0ZTsKIAotCS8qIFRoaXMgaGFzIHRvIGJlZW4gZG9uZSAhISEgKi8KLQlmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCBOUl9QQUxFVFRFLCAwKTsKKwkvKiBUaGlzIGhhcyB0byBiZSBkb25lICEhISAqLworCWlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCBOUl9QQUxFVFRFLCAwKSkKKwkJZ290byBvdXRfZXJyMTsKIAlzdGlmYl9pbml0X2Rpc3BsYXkoZmIpOwogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZml4LT5zbWVtX3N0YXJ0LCBmaXgtPnNtZW1fbGVuLCAic3RpZmIgZmIiKSkgewogCQlwcmludGsoS0VSTl9FUlIgInN0aWZiOiBjYW5ub3QgcmVzZXJ2ZSBmYiByZWdpb24gMHglMDRseC0weCUwNGx4XG4iLAogCQkJCWZpeC0+c21lbV9zdGFydCwgZml4LT5zbWVtX3N0YXJ0K2ZpeC0+c21lbV9sZW4pOwotCQlnb3RvIG91dF9lcnIxOworCQlnb3RvIG91dF9lcnIyOwogCX0KIAkJCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZml4LT5tbWlvX3N0YXJ0LCBmaXgtPm1taW9fbGVuLCAic3RpZmIgbW1pbyIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAic3RpZmI6IGNhbm5vdCByZXNlcnZlIHN0aSBtbWlvIHJlZ2lvbiAweCUwNGx4LTB4JTA0bHhcbiIsCiAJCQkJZml4LT5tbWlvX3N0YXJ0LCBmaXgtPm1taW9fc3RhcnQrZml4LT5tbWlvX2xlbik7Ci0JCWdvdG8gb3V0X2VycjI7CisJCWdvdG8gb3V0X2VycjM7CiAJfQogCiAJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYi0+aW5mbykgPCAwKQotCQlnb3RvIG91dF9lcnIzOworCQlnb3RvIG91dF9lcnI0OwogCiAJc3RpLT5pbmZvID0gaW5mbzsgLyogc2F2ZSBmb3IgdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigpICovCiAKQEAgLTEyOTcsMTMgKzEyOTgsMTQgQEAKIAlyZXR1cm4gMDsKIAogCi1vdXRfZXJyMzoKK291dF9lcnI0OgogCXJlbGVhc2VfbWVtX3JlZ2lvbihmaXgtPm1taW9fc3RhcnQsIGZpeC0+bW1pb19sZW4pOwotb3V0X2VycjI6CitvdXRfZXJyMzoKIAlyZWxlYXNlX21lbV9yZWdpb24oZml4LT5zbWVtX3N0YXJ0LCBmaXgtPnNtZW1fbGVuKTsKK291dF9lcnIyOgorCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CiBvdXRfZXJyMToKIAlpb3VubWFwKGluZm8tPnNjcmVlbl9iYXNlKTsKLQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogb3V0X2VycjA6CiAJa2ZyZWUoZmIpOwogCXJldHVybiAtRU5YSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3N1bnh2cjUwMC5jIGIvZHJpdmVycy92aWRlby9zdW54dnI1MDAuYwppbmRleCBjMmJhNTFiLi4xOGI5NTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3N1bnh2cjUwMC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc3VueHZyNTAwLmMKQEAgLTM0OSwxMSArMzQ5LDE0IEBACiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJlM2Q6IENvdWxkIG5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlciAlc1xuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKLQkJZ290byBlcnJfdW5tYXBfZmI7CisJCWdvdG8gZXJyX2ZyZWVfY21hcDsKIAl9CiAKIAlyZXR1cm4gMDsKIAorZXJyX2ZyZWVfY21hcDoKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCiBlcnJfdW5tYXBfZmI6CiAJaW91bm1hcChlcC0+ZmJfYmFzZSk7CiAKQEAgLTM4OSw2ICszOTIsNyBAQAogCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKIAlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMSk7CiAKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogICAgICAgICBmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby90ZGZ4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdGRmeGZiLmMKaW5kZXggMTRiZDNmMy4uZWU2NDc3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90ZGZ4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3RkZnhmYi5jCkBAIC0xMzkzLDYgKzEzOTMsNyBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCiAJCQkgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RnYWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RnYWZiLmMKaW5kZXggNjgwNjQyYy4uYTg2MDQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby90Z2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdGdhZmIuYwpAQCAtMTY2Myw3ICsxNjYzLDcgQEAKIAlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidGdhZmI6IENvdWxkIG5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIik7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyMTsKKwkJZ290byBlcnIyOwogCX0KIAogCWlmICh0Z2FfYnVzX3BjaSkgewpAQCAtMTY4Miw2ICsxNjgyLDggQEAKIAogCXJldHVybiAwOwogCisgZXJyMjoKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogIGVycjE6CiAJaWYgKG1lbV9iYXNlKQogCQlpb3VubWFwKG1lbV9iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdHJpZGVudGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RyaWRlbnRmYi5jCmluZGV4IDQ3OWIyZTcuLjAzYTljMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdHJpZGVudGZiLmMKKysrIGIvZHJpdmVycy92aWRlby90cmlkZW50ZmIuYwpAQCAtMiw3ICsyLDcgQEAKICAqIEZyYW1lIGJ1ZmZlciBkcml2ZXIgZm9yIFRyaWRlbnQgVEdVSSwgQmxhZGUgYW5kIEltYWdlIHNlcmllcwogICoKICAqIENvcHlyaWdodCAyMDAxLCAyMDAyIC0gSmFuaSBNb25vc2VzICAgPGphbmlAaXYucm8+Ci0gKgorICogQ29weXJpZ2h0IDIwMDkgS3J6eXN6dG9mIEhlbHQgPGtyenlzenRvZi5oMUB3cC5wbD4KICAqCiAgKiBDUkVESVRTOihpbiBvcmRlciBvZiBhcHBlYXJhbmNlKQogICoJc2tlbGV0b25mYi5jIGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbiBhbmQgb3RoZXIgZmIgY29kZSBpbiBkcml2ZXJzL3ZpZGVvCkBAIC00OTAsNyArNDkwLDYgQEAKIC8qCiAgKiBBY2NlbCBmdW5jdGlvbnMgY2FsbGVkIGJ5IHRoZSB1cHBlciBsYXllcnMKICAqLwotI2lmZGVmIENPTkZJR19GQl9UUklERU5UX0FDQ0VMCiBzdGF0aWMgdm9pZCB0cmlkZW50ZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpmcikKIHsKQEAgLTU2NSwxMSArNTY0LDYgQEAKIAkJcGFyLT53YWl0X2VuZ2luZShwYXIpOwogCXJldHVybiAwOwogfQotI2Vsc2UKLSNkZWZpbmUgdHJpZGVudGZiX2ZpbGxyZWN0IGNmYl9maWxscmVjdAotI2RlZmluZSB0cmlkZW50ZmJfY29weWFyZWEgY2ZiX2NvcHlhcmVhCi0jZGVmaW5lIHRyaWRlbnRmYl9pbWFnZWJsaXQgY2ZiX2ltYWdlYmxpdAotI2VuZGlmIC8qIENPTkZJR19GQl9UUklERU5UX0FDQ0VMICovCiAKIC8qCiAgKiBIYXJkd2FyZSBhY2Nlc3MgZnVuY3Rpb25zCkBAIC0xMzMzLDkgKzEzMjcsNyBAQAogCS5mYl9maWxscmVjdCA9IHRyaWRlbnRmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEgPSB0cmlkZW50ZmJfY29weWFyZWEsCiAJLmZiX2ltYWdlYmxpdCA9IHRyaWRlbnRmYl9pbWFnZWJsaXQsCi0jaWZkZWYgQ09ORklHX0ZCX1RSSURFTlRfQUNDRUwKIAkuZmJfc3luYyA9IHRyaWRlbnRmYl9zeW5jLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0cmlkZW50X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LApAQCAtMTM1OSwxMCArMTM1MSw2IEBACiAKIAljaGlwX2lkID0gaWQtPmRldmljZTsKIAotI2lmbmRlZiBDT05GSUdfRkJfVFJJREVOVF9BQ0NFTAotCW5vYWNjZWwgPSAxOwotI2VuZGlmCi0KIAkvKiBJZiBQQ0kgaWQgaXMgMHg5NjYwIHRoZW4gZnVydGhlciBkZXRlY3QgY2hpcCB0eXBlICovCiAKIAlpZiAoY2hpcF9pZCA9PSBUR1VJOTY2MCkgewpAQCAtMTQ5MCw2ICsxNDc4LDkgQEAKIAl9IGVsc2UKIAkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX0hXQUNDRUxfRElTQUJMRUQ7CiAKKwlpZiAoaXNfYmxhZGUoY2hpcF9pZCkgJiYgY2hpcF9pZCAhPSBCTEFERTNEKQorCQlpbmZvLT5mbGFncyB8PSBGQklORk9fUkVBRFNfRkFTVDsKKwogCWluZm8tPnBpeG1hcC5hZGRyID0ga21hbGxvYyg0MDk2LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8tPnBpeG1hcC5hZGRyKSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC0xNTYzLDYgKzE1NTQsNyBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbih0cmlkZW50ZmJfZml4Lm1taW9fc3RhcnQsIHRyaWRlbnRmYl9maXgubW1pb19sZW4pOwogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCWtmcmVlKGluZm8tPnBpeG1hcC5hZGRyKTsKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiB9CiAKQEAgLTE2NjMsNCArMTY1NSw1IEBACiBNT0RVTEVfQVVUSE9SKCJKYW5pIE1vbm9zZXMgPGphbmlAaXYucm8+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkZyYW1lYnVmZmVyIGRyaXZlciBmb3IgVHJpZGVudCBjYXJkcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJjeWJsYWZiIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKaW5kZXggNzRhZTc1OC4uMGIzNzBhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKQEAgLTE4OSw3ICsxODksNyBAQAogCXV2ZmJfdGFza3Nbc2VxXSA9IHRhc2s7CiAJbXV0ZXhfdW5sb2NrKCZ1dmZiX2xvY2spOwogCi0JZXJyID0gY25fbmV0bGlua19zZW5kKG0sIDAsIGdmcF9hbnkoKSk7CisJZXJyID0gY25fbmV0bGlua19zZW5kKG0sIDAsIEdGUF9LRVJORUwpOwogCWlmIChlcnIgPT0gLUVTUkNIKSB7CiAJCS8qCiAJCSAqIFRyeSB0byBzdGFydCB0aGUgdXNlcnNwYWNlIGhlbHBlciBpZiBzZW5kaW5nCkBAIC04NTAsMTQgKzg1MCwxNiBAQAogCWlmICh2YmVtb2RlKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBwYXItPnZiZV9tb2Rlc19jbnQ7IGkrKykgewogCQkJaWYgKHBhci0+dmJlX21vZGVzW2ldLm1vZGVfaWQgPT0gdmJlbW9kZSkgeworCQkJCW1vZGVpZCA9IGk7CisJCQkJdXZlc2FmYl9zZXR1cF92YXIoJmluZm8tPnZhciwgaW5mbywKKwkJCQkJCSZwYXItPnZiZV9tb2Rlc1ttb2RlaWRdKTsKIAkJCQlmYl9nZXRfbW9kZShGQl9WU1lOQ1RJTUlOR1MgfCBGQl9JR05PUkVNT04sIDYwLAotCQkJCQkJCSZpbmZvLT52YXIsIGluZm8pOworCQkJCQkJJmluZm8tPnZhciwgaW5mbyk7CiAJCQkJLyoKIAkJCQkgKiBXaXRoIHBpeGNsb2NrIHNldCB0byAwLCB0aGUgZGVmYXVsdCBCSU9TCiAJCQkJICogdGltaW5ncyB3aWxsIGJlIHVzZWQgaW4gc2V0X3BhcigpLgogCQkJCSAqLwogCQkJCWluZm8tPnZhci5waXhjbG9jayA9IDA7Ci0JCQkJbW9kZWlkID0gaTsKIAkJCQlnb3RvIGdvdG1vZGU7CiAJCQl9CiAJCX0KQEAgLTkwNCw4ICs5MDYsMTEgQEAKIAkJCWZiX3ZpZGVvbW9kZV90b192YXIoJmluZm8tPnZhciwgbW9kZSk7CiAJCX0gZWxzZSB7CiAJCQltb2RlaWQgPSBwYXItPnZiZV9tb2Rlc1swXS5tb2RlX2lkOworCQkJdXZlc2FmYl9zZXR1cF92YXIoJmluZm8tPnZhciwgaW5mbywKKwkJCQkJJnBhci0+dmJlX21vZGVzW21vZGVpZF0pOwogCQkJZmJfZ2V0X21vZGUoRkJfVlNZTkNUSU1JTkdTIHwgRkJfSUdOT1JFTU9OLCA2MCwKLQkJCQkgICAgJmluZm8tPnZhciwgaW5mbyk7CisJCQkJCSZpbmZvLT52YXIsIGluZm8pOworCiAJCQlnb3RvIGdvdG1vZGU7CiAJCX0KIAl9CkBAIC05MTcsOSArOTIyLDkgQEAKIAlpZiAobW9kZWlkID09IC0xKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotZ290bW9kZToKIAl1dmVzYWZiX3NldHVwX3ZhcigmaW5mby0+dmFyLCBpbmZvLCAmcGFyLT52YmVfbW9kZXNbbW9kZWlkXSk7CiAKK2dvdG1vZGU6CiAJLyoKIAkgKiBJZiB3ZSBhcmUgbm90IFZCRTMuMCsgY29tcGxpYW50LCB3ZSdyZSBkb25lIC0tIHRoZSBCSU9TIHdpbGwKIAkgKiBpZ25vcmUgb3VyIHRpbWluZ3MgYW55d2F5LgpAQCAtMTU1Miw3ICsxNTU3LDcgQEAKIAl9CiAKIAlpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQgfAotCQkJKHBhci0+eXBhbikgPyBGQklORk9fSFdBQ0NFTF9ZUEFOIDogMDsKKwkJCShwYXItPnlwYW4gPyBGQklORk9fSFdBQ0NFTF9ZUEFOIDogMCk7CiAKIAlpZiAoIXBhci0+eXBhbikKIAkJaW5mby0+ZmJvcHMtPmZiX3Bhbl9kaXNwbGF5ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmFsa3lyaWVmYi5jIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKaW5kZXggN2IwY2VmOS4uNGJiOWEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby92YWxreXJpZWZiLmMKQEAgLTExOSw3ICsxMTksNyBAQAogc3RhdGljIGludCB2YWxreXJpZV92YXJfdG9fcGFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCXN0cnVjdCBmYl9wYXJfdmFsa3lyaWUgKnBhciwgY29uc3Qgc3RydWN0IGZiX2luZm8gKmZiX2luZm8pOwogCi1zdGF0aWMgdm9pZCB2YWxreXJpZV9pbml0X2luZm8oc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9pbmZvX3ZhbGt5cmllICpwKTsKK3N0YXRpYyBpbnQgdmFsa3lyaWVfaW5pdF9pbmZvKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgZmJfaW5mb192YWxreXJpZSAqcCk7CiBzdGF0aWMgdm9pZCB2YWxreXJpZV9wYXJfdG9fZml4KHN0cnVjdCBmYl9wYXJfdmFsa3lyaWUgKnBhciwgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgpOwogc3RhdGljIHZvaWQgdmFsa3lyaWVfaW5pdF9maXgoc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsIHN0cnVjdCBmYl9pbmZvX3ZhbGt5cmllICpwKTsKIApAQCAtMzgxLDE4ICszODEsMjIgQEAKIAogCXZhbGt5cmllX2Nob29zZV9tb2RlKHApOwogCW1hY192bW9kZV90b192YXIoZGVmYXVsdF92bW9kZSwgZGVmYXVsdF9jbW9kZSwgJnAtPmluZm8udmFyKTsKLQl2YWxreXJpZV9pbml0X2luZm8oJnAtPmluZm8sIHApOworCWVyciA9IHZhbGt5cmllX2luaXRfaW5mbygmcC0+aW5mbywgcCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0X2ZyZWU7CiAJdmFsa3lyaWVfaW5pdF9maXgoJnAtPmluZm8uZml4LCBwKTsKIAlpZiAodmFsa3lyaWVmYl9zZXRfcGFyKCZwLT5pbmZvKSkKIAkJLyogImNhbid0IGhhcHBlbiIgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJ2YWxreXJpZWZiOiBjYW4ndCBzZXQgZGVmYXVsdCB2aWRlbyBtb2RlXG4iKTsKIAogCWlmICgoZXJyID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJnAtPmluZm8pKSAhPSAwKQotCQlnb3RvIG91dF9mcmVlOworCQlnb3RvIG91dF9jbWFwX2ZyZWU7CiAKIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiB2YWxreXJpZSBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLCBwLT5pbmZvLm5vZGUpOwogCXJldHVybiAwOwogCisgb3V0X2NtYXBfZnJlZToKKwlmYl9kZWFsbG9jX2NtYXAoJnAtPmluZm8uY21hcCk7CiAgb3V0X2ZyZWU6CiAJaWYgKHAtPmZyYW1lX2J1ZmZlcikKIAkJaW91bm1hcChwLT5mcmFtZV9idWZmZXIpOwpAQCAtNTM4LDE0ICs1NDIsMTUgQEAKIAkJLyogeXdyYXBzdGVwLCB4cGFuc3RlcCwgeXBhbnN0ZXAgKi8KIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHZhbGt5cmllX2luaXRfaW5mbyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2luZm9fdmFsa3lyaWUgKnApCitzdGF0aWMgaW50IF9faW5pdCB2YWxreXJpZV9pbml0X2luZm8oc3RydWN0IGZiX2luZm8gKmluZm8sCisJCXN0cnVjdCBmYl9pbmZvX3ZhbGt5cmllICpwKQogewogCWluZm8tPmZib3BzID0gJnZhbGt5cmllZmJfb3BzOwogCWluZm8tPnNjcmVlbl9iYXNlID0gcC0+ZnJhbWVfYnVmZmVyICsgMHgxMDAwOwogCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQ7CiAJaW5mby0+cHNldWRvX3BhbGV0dGUgPSBwLT5wc2V1ZG9fcGFsZXR0ZTsKLQlmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApOwogCWluZm8tPnBhciA9ICZwLT5wYXI7CisJcmV0dXJuIGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKaW5kZXggZTE2MzIyZC4uZDY4NTZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92ZXNhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCkBAIC00MzgsNyArNDM4LDcgQEAKIAlpbmZvLT52YXIgPSB2ZXNhZmJfZGVmaW5lZDsKIAlpbmZvLT5maXggPSB2ZXNhZmJfZml4OwogCWluZm8tPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVCB8Ci0JCSh5cGFuKSA/IEZCSU5GT19IV0FDQ0VMX1lQQU4gOiAwOworCQkoeXBhbiA/IEZCSU5GT19IV0FDQ0VMX1lQQU4gOiAwKTsKIAogCWlmICgheXBhbikKIAkJaW5mby0+ZmJvcHMtPmZiX3Bhbl9kaXNwbGF5ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZmYi5jCmluZGV4IDkzZmUwOGQuLmNjOTE5YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmZiLmMKKysrIGIvZHJpdmVycy92aWRlby92ZmIuYwpAQCAtNTQzLDYgKzU0Myw3IEBACiAJaWYgKGluZm8pIHsKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAkJcnZmcmVlKHZpZGVvbWVtb3J5LCB2aWRlb21lbW9yeXNpemUpOworCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9hY2NlbC5jCmluZGV4IDYzMjUyM2YuLjQ1YzU0YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2FjY2VsLmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvYWNjZWwuYwpAQCAtMjY3LDEzICsyNjcsMTcgQEAKIAlpbnQgbG9vcCA9IDA7CiAKIAl3aGlsZSAoIShyZWFkbCh2aWFwYXJpbmZvLT5pb192aXJ0ICsgVklBX1JFR19TVEFUVVMpICYKLQkJCVZJQV9WUl9RVUVVRV9CVVNZKSAmJiAobG9vcCsrIDwgTUFYTE9PUCkpCisJCQlWSUFfVlJfUVVFVUVfQlVTWSkgJiYgKGxvb3AgPCBNQVhMT09QKSkgeworCQlsb29wKys7CiAJCWNwdV9yZWxheCgpOworCX0KIAogCXdoaWxlICgocmVhZGwodmlhcGFyaW5mby0+aW9fdmlydCArIFZJQV9SRUdfU1RBVFVTKSAmCiAJCSAgICAoVklBX0NNRF9SR1RSX0JVU1kgfCBWSUFfMkRfRU5HX0JVU1kgfCBWSUFfM0RfRU5HX0JVU1kpKSAmJgotCQkgICAgKGxvb3ArKyA8IE1BWExPT1ApKQorCQkgICAgKGxvb3AgPCBNQVhMT09QKSkgeworCQlsb29wKys7CiAJCWNwdV9yZWxheCgpOworCX0KIAogCXJldHVybiBsb29wID49IE1BWExPT1A7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMxd20uYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczF3bS5jCmluZGV4IDI5ZTE0NGYuLjM3ZjA4YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdzEvbWFzdGVycy9kczF3bS5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9kczF3bS5jCkBAIC0xNiwxMCArMTYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZHMxd20uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9kczF3bS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTg5LDEwICs4OSw5IEBACiAJdm9pZAkJX19pb21lbSAqbWFwOwogCWludAkJYnVzX3NoaWZ0OyAvKiAjIG9mIHNoaWZ0cyB0byBjYWxjIHJlZ2lzdGVyIG9mZnNldHMgKi8KIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBkczF3bV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgbWZkX2NlbGwJKmNlbGw7CiAJaW50CQlpcnE7CiAJaW50CQlhY3RpdmVfaGlnaDsKLQlzdHJ1Y3QgY2xrCSpjbGs7CiAJaW50CQlzbGF2ZV9wcmVzZW50OwogCXZvaWQJCSpyZXNldF9jb21wbGV0ZTsKIAl2b2lkCQkqcmVhZF9jb21wbGV0ZTsKQEAgLTIxNSwxNyArMjE0LDE3IEBACiAKIHN0YXRpYyB2b2lkIGRzMXdtX3VwKHN0cnVjdCBkczF3bV9kYXRhICpkczF3bV9kYXRhKQogewotCWludCBnY2xrLCBkaXZpc29yOworCWludCBkaXZpc29yOworCXN0cnVjdCBkczF3bV9kcml2ZXJfZGF0YSAqcGxhdCA9IGRzMXdtX2RhdGEtPmNlbGwtPmRyaXZlcl9kYXRhOwogCi0JaWYgKGRzMXdtX2RhdGEtPnBkYXRhLT5lbmFibGUpCi0JCWRzMXdtX2RhdGEtPnBkYXRhLT5lbmFibGUoZHMxd21fZGF0YS0+cGRldik7CisJaWYgKGRzMXdtX2RhdGEtPmNlbGwtPmVuYWJsZSkKKwkJZHMxd21fZGF0YS0+Y2VsbC0+ZW5hYmxlKGRzMXdtX2RhdGEtPnBkZXYpOwogCi0JZ2NsayA9IGNsa19nZXRfcmF0ZShkczF3bV9kYXRhLT5jbGspOwotCWNsa19lbmFibGUoZHMxd21fZGF0YS0+Y2xrKTsKLQlkaXZpc29yID0gZHMxd21fZmluZF9kaXZpc29yKGdjbGspOworCWRpdmlzb3IgPSBkczF3bV9maW5kX2Rpdmlzb3IocGxhdC0+Y2xvY2tfcmF0ZSk7CiAJaWYgKGRpdmlzb3IgPT0gMCkgewogCQlkZXZfZXJyKCZkczF3bV9kYXRhLT5wZGV2LT5kZXYsCi0JCQkibm8gc3VpdGFibGUgZGl2aXNvciBmb3IgJWRIeiBjbG9ja1xuIiwgZ2Nsayk7CisJCQkibm8gc3VpdGFibGUgZGl2aXNvciBmb3IgJWRIeiBjbG9ja1xuIiwKKwkJCXBsYXQtPmNsb2NrX3JhdGUpOwogCQlyZXR1cm47CiAJfQogCWRzMXdtX3dyaXRlX3JlZ2lzdGVyKGRzMXdtX2RhdGEsIERTMVdNX0NMS0RJViwgZGl2aXNvcik7CkBAIC0yNDQsMTAgKzI0Myw4IEBACiAJZHMxd21fd3JpdGVfcmVnaXN0ZXIoZHMxd21fZGF0YSwgRFMxV01fSU5UX0VOLAogCQkJICAgICBkczF3bV9kYXRhLT5hY3RpdmVfaGlnaCA/IERTMVdNX0lOVEVOX0lBUyA6IDApOwogCi0JaWYgKGRzMXdtX2RhdGEtPnBkYXRhLT5kaXNhYmxlKQotCQlkczF3bV9kYXRhLT5wZGF0YS0+ZGlzYWJsZShkczF3bV9kYXRhLT5wZGV2KTsKLQotCWNsa19kaXNhYmxlKGRzMXdtX2RhdGEtPmNsayk7CisJaWYgKGRzMXdtX2RhdGEtPmNlbGwtPmRpc2FibGUpCisJCWRzMXdtX2RhdGEtPmNlbGwtPmRpc2FibGUoZHMxd21fZGF0YS0+cGRldik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMzMwLDEzICszMjcsMTggQEAKIHN0YXRpYyBpbnQgZHMxd21fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZHMxd21fZGF0YSAqZHMxd21fZGF0YTsKLQlzdHJ1Y3QgZHMxd21fcGxhdGZvcm1fZGF0YSAqcGxhdDsKKwlzdHJ1Y3QgZHMxd21fZHJpdmVyX2RhdGEgKnBsYXQ7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IG1mZF9jZWxsICpjZWxsOwogCWludCByZXQ7CiAKIAlpZiAoIXBkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCisJY2VsbCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghY2VsbCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlkczF3bV9kYXRhID0ga3phbGxvYyhzaXplb2YoKmRzMXdtX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRzMXdtX2RhdGEpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzQ4LDE1ICszNTAsMTggQEAKIAkJcmV0ID0gLUVOWElPOwogCQlnb3RvIGVycjA7CiAJfQotCWRzMXdtX2RhdGEtPm1hcCA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJZHMxd21fZGF0YS0+bWFwID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmICghZHMxd21fZGF0YS0+bWFwKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyMDsKIAl9Ci0JcGxhdCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWRzMXdtX2RhdGEtPmJ1c19zaGlmdCA9IHBsYXQtPmJ1c19zaGlmdDsKKwlwbGF0ID0gY2VsbC0+ZHJpdmVyX2RhdGE7CisKKwkvKiBjYWxjdWxhdGUgYnVzIHNoaWZ0IGZyb20gbWVtIHJlc291cmNlICovCisJZHMxd21fZGF0YS0+YnVzX3NoaWZ0ID0gcmVzb3VyY2Vfc2l6ZShyZXMpID4+IDM7CisKIAlkczF3bV9kYXRhLT5wZGV2ID0gcGRldjsKLQlkczF3bV9kYXRhLT5wZGF0YSA9IHBsYXQ7CisJZHMxd21fZGF0YS0+Y2VsbCA9IGNlbGw7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwogCWlmICghcmVzKSB7CkBAIC0zNzYsMjYgKzM4MSwxOCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyMTsKIAotCWRzMXdtX2RhdGEtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImRzMXdtIik7Ci0JaWYgKElTX0VSUihkczF3bV9kYXRhLT5jbGspKSB7Ci0JCXJldCA9IFBUUl9FUlIoZHMxd21fZGF0YS0+Y2xrKTsKLQkJZ290byBlcnIyOwotCX0KLQogCWRzMXdtX3VwKGRzMXdtX2RhdGEpOwogCiAJZHMxd21fbWFzdGVyLmRhdGEgPSAodm9pZCAqKWRzMXdtX2RhdGE7CiAKIAlyZXQgPSB3MV9hZGRfbWFzdGVyX2RldmljZSgmZHMxd21fbWFzdGVyKTsKIAlpZiAocmV0KQotCQlnb3RvIGVycjM7CisJCWdvdG8gZXJyMjsKIAogCXJldHVybiAwOwogCi1lcnIzOgotCWRzMXdtX2Rvd24oZHMxd21fZGF0YSk7Ci0JY2xrX3B1dChkczF3bV9kYXRhLT5jbGspOwogZXJyMjoKKwlkczF3bV9kb3duKGRzMXdtX2RhdGEpOwogCWZyZWVfaXJxKGRzMXdtX2RhdGEtPmlycSwgZHMxd21fZGF0YSk7CiBlcnIxOgogCWlvdW5tYXAoZHMxd21fZGF0YS0+bWFwKTsKQEAgLTQzNCw3ICs0MzEsNiBAQAogCiAJdzFfcmVtb3ZlX21hc3Rlcl9kZXZpY2UoJmRzMXdtX21hc3Rlcik7CiAJZHMxd21fZG93bihkczF3bV9kYXRhKTsKLQljbGtfcHV0KGRzMXdtX2RhdGEtPmNsayk7CiAJZnJlZV9pcnEoZHMxd21fZGF0YS0+aXJxLCBkczF3bV9kYXRhKTsKIAlpb3VubWFwKGRzMXdtX2RhdGEtPm1hcCk7CiAJa2ZyZWUoZHMxd21fZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL3cxX2lvLmMgYi9kcml2ZXJzL3cxL3cxX2lvLmMKaW5kZXggNDQyYmQ4Yi4uM2ViZTk3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS93MV9pby5jCisrKyBiL2RyaXZlcnMvdzEvdzFfaW8uYwpAQCAtNjksNyArNjksNyBAQAogCQlyZXR1cm4gdzFfcmVhZF9iaXQoZGV2KTsKIAllbHNlIHsKIAkJdzFfd3JpdGVfYml0KGRldiwgMCk7Ci0JCXJldHVybigwKTsKKwkJcmV0dXJuIDA7CiAJfQogfQogCkBAIC0xODQsMTcgKzE4NCwxNyBAQAogICovCiB1OCB3MV90cmlwbGV0KHN0cnVjdCB3MV9tYXN0ZXIgKmRldiwgaW50IGJkaXIpCiB7Ci0JaWYgKCBkZXYtPmJ1c19tYXN0ZXItPnRyaXBsZXQgKQotCQlyZXR1cm4oZGV2LT5idXNfbWFzdGVyLT50cmlwbGV0KGRldi0+YnVzX21hc3Rlci0+ZGF0YSwgYmRpcikpOworCWlmIChkZXYtPmJ1c19tYXN0ZXItPnRyaXBsZXQpCisJCXJldHVybiBkZXYtPmJ1c19tYXN0ZXItPnRyaXBsZXQoZGV2LT5idXNfbWFzdGVyLT5kYXRhLCBiZGlyKTsKIAllbHNlIHsKIAkJdTggaWRfYml0ICAgPSB3MV90b3VjaF9iaXQoZGV2LCAxKTsKIAkJdTggY29tcF9iaXQgPSB3MV90b3VjaF9iaXQoZGV2LCAxKTsKIAkJdTggcmV0dmFsOwogCi0JCWlmICggaWRfYml0ICYmIGNvbXBfYml0ICkKLQkJCXJldHVybigweDAzKTsgIC8qIGVycm9yICovCisJCWlmIChpZF9iaXQgJiYgY29tcF9iaXQpCisJCQlyZXR1cm4gMHgwMzsgIC8qIGVycm9yICovCiAKLQkJaWYgKCAhaWRfYml0ICYmICFjb21wX2JpdCApIHsKKwkJaWYgKCFpZF9iaXQgJiYgIWNvbXBfYml0KSB7CiAJCQkvKiBCb3RoIGJpdHMgYXJlIHZhbGlkLCB0YWtlIHRoZSBkaXJlY3Rpb24gZ2l2ZW4gKi8KIAkJCXJldHZhbCA9IGJkaXIgPyAweDA0IDogMDsKIAkJfSBlbHNlIHsKQEAgLTIwMywxMSArMjAzLDExIEBACiAJCQlyZXR2YWwgPSBpZF9iaXQgPyAweDA1IDogMHgwMjsKIAkJfQogCi0JCWlmICggZGV2LT5idXNfbWFzdGVyLT50b3VjaF9iaXQgKQorCQlpZiAoZGV2LT5idXNfbWFzdGVyLT50b3VjaF9iaXQpCiAJCQl3MV90b3VjaF9iaXQoZGV2LCBiZGlyKTsKIAkJZWxzZQogCQkJdzFfd3JpdGVfYml0KGRldiwgYmRpcik7Ci0JCXJldHVybihyZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vS2NvbmZpZyBiL2RyaXZlcnMveGVuL0tjb25maWcKaW5kZXggNTI2MTg3Yy4uOGFjOWNkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vS2NvbmZpZworKysgYi9kcml2ZXJzL3hlbi9LY29uZmlnCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgICBUaGUgb2xkIHhlbnN0b3JlIHVzZXJzcGFjZSB0b29scyBleHBlY3QgdG8gZmluZCAieGVuYnVzIgogICAgICAgICAgdW5kZXIgL3Byb2MveGVuLCBidXQgInhlbmJ1cyIgaXMgbm93IGZvdW5kIGF0IHRoZSByb290IG9mIHRoZQogICAgICAgICAgeGVuZnMgZmlsZXN5c3RlbS4gIFNlbGVjdGluZyB0aGlzIGNhdXNlcyB0aGUga2VybmVsIHRvIGNyZWF0ZQotICAgICAgICAgdGhlIGNvbXBhdGliaWx0eSBtb3VudCBwb2ludCAvcHJvYy94ZW4gaWYgaXQgaXMgcnVubmluZyBvbgorICAgICAgICAgdGhlIGNvbXBhdGliaWxpdHkgbW91bnQgcG9pbnQgL3Byb2MveGVuIGlmIGl0IGlzIHJ1bm5pbmcgb24KICAgICAgICAgIGEgeGVuIHBsYXRmb3JtLgogICAgICAgICAgSWYgaW4gZG91YnQsIHNheSB5ZXMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2NwdV9ob3RwbHVnLmMgYi9kcml2ZXJzL3hlbi9jcHVfaG90cGx1Zy5jCmluZGV4IDk3NGY1NmQuLjVmNTRjMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2NwdV9ob3RwbHVnLmMKKysrIGIvZHJpdmVycy94ZW4vY3B1X2hvdHBsdWcuYwpAQCAtMTAsNyArMTAsNyBAQAogCWlmICghY3B1X3ByZXNlbnQoY3B1KSkKIAkJYXJjaF9yZWdpc3Rlcl9jcHUoY3B1KTsKIAotCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOworCXNldF9jcHVfcHJlc2VudChjcHUsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX2hvdHBsdWdfY3B1KGludCBjcHUpCkBAIC0xOCw3ICsxOCw3IEBACiAJaWYgKGNwdV9wcmVzZW50KGNwdSkpCiAJCWFyY2hfdW5yZWdpc3Rlcl9jcHUoY3B1KTsKIAotCWNwdV9jbGVhcihjcHUsIGNwdV9wcmVzZW50X21hcCk7CisJc2V0X2NwdV9wcmVzZW50KGNwdSwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCB2Y3B1X2hvdHBsdWcodW5zaWduZWQgaW50IGNwdSkKZGlmZiAtLWdpdCBhL2Zpcm13YXJlLzNjb20vM0MzNTkuYmluLmloZXggYi9maXJtd2FyZS8zY29tLzNDMzU5LmJpbi5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MWJhYzMKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS8zY29tLzNDMzU5LmJpbi5paGV4CkBAIC0wLDAgKzEsMTU3MyBAQAorOjEwMDAwMDAwRkUzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMDA0MDAwMDAwMDAwMDAwMDAwMzAzMzJGMzAzMjJGMzkzOTIwMzFDQQorOjEwMDA1MDAwMzczQTMxMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwMDA2MDAwMzAzMTMyMzMzNDM1MzYzNzM4Mzk0MTQyNDM0NDQ1NDZFRQorOjEwMDA3MDAwMDAwMDA3RkYwMjAwRkU5RjA2MDAwMDdDNDgwMDAwNzBBMQorOjEwMDA4MDAwODIwMEZGRkY4NjAwRkZGRjg4MDBGRkZGOUEwMEZGRkY0RQorOjEwMDA5MDAwRkZGRjExMDBDMDAwRkZGRkZGRkYxMTIyMzM0NDU1NjYzMAorOjEwMDBBMDAwMzM0MzRGNEQyMDQyNDE0MjQ1MTE0MEMwMDBGRkZGRkYwNgorOjEwMDBCMDAwRkYxMTIyMzM0NDU1NjY1Mzc0NjE3Mjc0MjA2RjY2MjBCOQorOjEwMDBDMDAwNEM0QzQzMjA2NjcyNjE2RDY1MkUyMDIwNTQ2Rjc0NjEyNAorOjEwMDBEMDAwNkMyMDY0NjE3NDYxMjA3MzY5N0E2NTIwNjk3MzIwNzg4QgorOjEwMDBFMDAwNzg3ODIwMjAyMDQyNDE0MjQ1RThEMjAxODMzRUY3MzQwRgorOjEwMDBGMDAwMDA3NTIxRTg0MTAwODMzRUY3MzQwMDc1MTdFODgyMDA1RgorOjEwMDEwMDAwODMzRUY3MzQwMDc1MERFOEJGMDA4MzNFRjczNDAwNzU3OQorOjEwMDExMDAwMDNFODQxMDJDMzFFQjgwMEYwOEVEODMzRjZCOTAwODA2MAorOjEwMDEyMDAwMzNEQkFEMDNEOEUyRkIxRkI4MDAwMDgzRkIwMDc0MDM5MAorOjEwMDEzMDAwQjgyMjAwQTNGNzM0QzNGQUJBNTYwMEIwRkZFRTMzQzBCQQorOjEwMDE0MDAwOEVDMDMzRjZCOUZGN0Y4MzNFRkYzNDAwNzQwODhEM0VDNgorOjEwMDE1MDAwMzA2MUQxRUYyQkNGMjY4QjFDMjZDNzA0RkZGRjI2ODNFRgorOjEwMDE2MDAwM0NGRjc1MTcyNkM3MDQwMDAwMjY4MzNDMDA3NTBDMjY0QgorOjEwMDE3MDAwODkxQzQ2NDZFMkUwQjgwMDAwRUIwM0I4MjQwMEEzRjc3MAorOjEwMDE4MDAwMzRDM0ZBQjRENzlFNzMzQTc1Mzg3OTM2N0IzNDlGQjE0RAorOjEwMDE5MDAwMDVEMkVDNzMyREIwNDBEMEUwNzEyNzc5MjVEMEUwNzMwMworOjEwMDFBMDAwMjE3QjFGMzJDMDc1MUIzMkU0OUU3MjE2NzQxNDc4MTJDNAorOjEwMDFCMDAwN0ExMDlGRDJFQzcyMEJEMEU0NzAwNzc1MDVCODAwMDA3RQorOjEwMDFDMDAwRUIwM0I4MjYwMEEzRjczNEMzRkFCQTVBMDAzM0MwRUZFMgorOjEwMDFEMDAwRUZFRkVGQjAwMEU2NTZCMDAwRTY1NEJBNTIwMEI4MDFCNworOjEwMDFFMDAwMDFFRkU4Q0EwMDNDMDE3NTdGRTg4MzAwQkE1MjAwQjgwRAorOjEwMDFGMDAwMDIwMkVGRThCOTAwM0MwMjc1NkVFODdBMDBCQTUyMDBEQworOjEwMDIwMDAwQjgwNDA0RUZFOEE4MDAzQzA0NzU1REU4NzEwMEJBNTIzOAorOjEwMDIxMDAwMDBCODA4MDhFRkU4OTcwMDNDMDg3NTRDRTg2ODAwQkE5OQorOjEwMDIyMDAwNTIwMEI4MTAxMEVGRTg4NjAwM0MxMDc1M0JFODVGMDAwNAorOjEwMDIzMDAwQkE1MjAwQjgyMDIwRUZFODc1MDAzQzIwNzUyQUU4NTYzNQorOjEwMDI0MDAwMDBCQTUyMDBCODQwNDBFRkU4NjQwMDNDNDA3NTE5RTgzRAorOjEwMDI1MDAwNEQwMEJBNTIwMEI4ODA4MEVGRTg1MzAwM0M4MDc1MDgyQQorOjEwMDI2MDAwRTg0NDAwQjgwMDAwRUIwM0I4MjgwMEEzRjczNEMzQkE5MQorOjEwMDI3MDAwNUEwMEI4MDA4MEVGQzNCQTVBMDBCODAxODBFRkMzQkE4MQorOjEwMDI4MDAwNUEwMEI4MDI4MEVGQzNCQTVBMDBCODAzODBFRkMzQkE2RAorOjEwMDI5MDAwNUEwMEI4MDQ4MEVGQzNCQTVBMDBCODA1ODBFRkMzQkE1OQorOjEwMDJBMDAwNUEwMEI4MDY4MEVGQzNCQTVBMDBCODA3ODBFRkMzQjk0NgorOjEwMDJCMDAwRkZGRkU0NThFNDU0M0MwMDc1MDM0OTc1RjdDM0ZBMzI3NAorOjEwMDJDMDAwQzBFNjU2RTQ1NjNDMDA3NDAzRTk4MjAwQjBGRkU2NTZFRgorOjEwMDJEMDAwRTQ1NjNDRkY3NTc4QkE1MjAwQjhGRkZGRUZFRDNDRkZFMworOjEwMDJFMDAwNzU2Q0I4MDBGRkVGRUQzQzAwNzU2M0IwRkZFNjU0RTRCOQorOjEwMDJGMDAwNTQzQ0ZGNzU1OTMyQzBFNjU0RTQ1NDNDMDA3NTRGQjA4RAorOjEwMDMwMDAwMEZFNjUwRTQ1MDI0MEYzQzBGNzU0M0IwMDBFNjUwRTQ3NAorOjEwMDMxMDAwNTAyNDBGM0MwMDc1Mzc4Q0M4OEVDMEJFNzAwMDI2OEJGMQorOjEwMDMyMDAwMTQyNjhCNUMwMkI4MDAwMEVGRUQyM0MzM0QwMDAwNzU3RQorOjEwMDMzMDAwMURCOEZGRkYyM0MzRUY4QkM4RUQyM0MzM0JDMTc1MEU3MAorOjEwMDM0MDAwODNDNjA0MjY4MzNDRkY3NUQ1QjgwMDAwRUIwM0I4MkFBQQorOjEwMDM1MDAwMDBBM0Y3MzRDM0ZBMzNDMEJGMDAyMEI5MTcwMEYzQUJEMgorOjEwMDM2MDAwQkYwMDMwQjkxNzAwRjNBQkJGMDAyMkI5NDAwMEYzQUJCOAorOjEwMDM3MDAwQkYwMDMyQjk0MDAwRjNBQkZDMUU4Q0M4OEVEODMzQzAyRQorOjEwMDM4MDAwOEVDMEJFOTIwMEJGMDAyMEI5MTcwMEYzQTRCRUE5MDAyMgorOjEwMDM5MDAwQkYwMDIyQjk0MDAwRjNBNDFGQzcwNkZCMzQ2NDAwQkFCMworOjEwMDNBMDAwMDgwMEI4MEYwMEVGRTg4MjAxRTg5QjAxNzIwREM3MDY1NAorOjEwMDNCMDAwRjczNDJDMDBDNzA2RjkzNDA0MDBDM0JBMEEwMDMzQzA2RQorOjEwMDNDMDAwRUZFODk4MDFFOEI1MDFCODE3MDBCQTlDMDBFRkI4MDA1MworOjEwMDNEMDAwMTBCQTlBMDBFRkI4MTcwMEE5MDEwMDc0MDE0MEJBOEM1NgorOjEwMDNFMDAwMDBFRkI4MDAxOEJBODYwMEVGQjgwQzAwQkE4MjAwRUYzMAorOjEwMDNGMDAwQkEwMjAwRUQyNUY5RkYwRDAyMDBFRkJBMDYwMDMzQzA4NgorOjEwMDQwMDAwRUZCQTA0MDBCODYwMDBFRkJBMDAwMEI4MTgwMEVGQkEwNQorOjEwMDQxMDAwODAwMEI5RkZGRkVEQTkwMTAwNzUwNEUyRjhFQjNFQkFEOAorOjEwMDQyMDAwMEEwMEVEQTkwMDQwNzQzNUE5MDAyMDc0MzAzM0MwRUZGNAorOjEwMDQzMDAwNTFCOUM4MDBFMkZFNTkxRTA2MUYyNjhCMEUwMjMwODNGQQorOjEwMDQ0MDAwRjkxNzc1MTg0OTQ5QkUwMjIwQkYwNjMwRjNBNjFGMjNDRAorOjEwMDQ1MDAwQzk3NTBBRkYwRUZCMzQ3NDEyRTk0REZGMUZCODJDMDA1QQorOjEwMDQ2MDAwQkIwMDAwQTNGNzM0ODkxRUY5MzRDM0M3MDZGQjM0NjQwQworOjEwMDQ3MDAwMDBFOEQzMDA3MjBEQzcwNkY3MzQyQzAwQzcwNkY5MzQyNAorOjEwMDQ4MDAwMDQwMEMzRThENjAwRThGMzAwQjgwMzAwQkE4MjAwRUYyNgorOjEwMDQ5MDAwQjg0MDgwQkE5ODAwRUZCODAwMTFCQTk2MDBFRkI4NDBBMworOjEwMDRBMDAwMDBBOTAxMDA3NDAxNDBCQTkyMDBFRkI4MDAxOUJBOEU5OQorOjEwMDRCMDAwMDBFRkJBMDIwMEVEMjVGOUZGMEQwNjAwRUZCQTA2MDBDNQorOjEwMDRDMDAwMzNDMEVGQkEwMDAwQjgxODAwRUZCQTgwMDBCOUZGRkZFMAorOjEwMDREMDAwRURBOTIwMDA3NTA0RTJGOEVCNDNCQTBBMDBFREE5MDA4QgorOjEwMDRFMDAwNDA3NDNBQTkwMDIwNzQzNTMzQzBFRjUxQjlDODAwRTIxNgorOjEwMDRGMDAwRkU1OTFFMDYxRjI2OEIwRTAyMzI4M0Y5NDA3NTFENDlEOAorOjEwMDUwMDAwNDlCRTAyMjJCRjA2MzJGM0E2MUYyM0M5NzUwRkZGMEU5NAorOjEwMDUxMDAwRkIzNDc0MDNFOTVBRkZCODAwMDBFQjBCMUZCODJDMDA0MgorOjEwMDUyMDAwQkIwMjAwODkxRUY5MzRBM0Y3MzRDM0JBMDIwMEI4MDAzNQorOjEwMDUzMDAwOUNFRkJBMDAwMEI4MDA4NEVGMzNDMEVGQkEwQTAwRUZCNgorOjEwMDU0MDAwQkEwRTAwMzNDMEVGQzNCQTBBMDBCOUZGRkZFRDI1MDBCMQorOjEwMDU1MDAwNjAzRDAwNjA3NDA0RTJGNUY4QzNGOUMzQjAwMEU2NTZFQworOjEwMDU2MDAwQjgwMEZGQkE1MjAwRUZCOUZGRkZCQTU4MDBFRDI1RUYwRgorOjEwMDU3MDAwMDA3NDA4QkE1QTAwMzNDMEVGRTJFRkMzQkE4MDAwRUQ0RQorOjEwMDU4MDAwQkE4NDAwRUZCQTgwMDBFREMzMDAwMDAwMDAwMDAwMDA1NAorOjEwMDU5MDAwQzYwNkVDMzQxNTMzQzA4RUQ4OEVDMDFFOENDOEJFNDA0MworOjEwMDVBMDAwNTRCRjYwRkU4RUQ4QjkxMDAwRjNBNDFGQzcwNjgwMzY3MgorOjEwMDVCMDAwMTAzNUM3MDY4QzM2MzAzNThEMDYzODM1QTMzMDM1QTM1NworOjEwMDVDMDAwMzIzNTA1MzMwMUEzMzQzNUM3MDYzNjM1NTAwMUM3MDYyOQorOjEwMDVEMDAwODQzNjgwRkVDNzA2ODgzNkMwRkVDNjA2QzJGRUZGQzY0OQorOjEwMDVFMDAwMDY5MzM2ODBDNjA2OTIzNjAwQzYwNjgwRkU4MEM3MDY5MQorOjEwMDVGMDAwODJGRTU0NTBDNzA2ODRGRTJCNERFNUNFQTkwMjAwNzUzRAorOjEwMDYwMDAwMDhDNjA2ODFGRTIzRTkwNTAwQzYwNjgxRkUyMkExRjc4MQorOjEwMDYxMDAwMzRBMzg2RkVCODQ4MzQ4NkUwQTM4OEZFOEQwNjRFMzRBNworOjEwMDYyMDAwODZFMEEzOEFGRUI4NTgzNDg2RTBBMzhDRkVCODlDMzREQQorOjEwMDYzMDAwODZFMEEzOEVGRThEMDYyMDAzODZFMEEzOTBGRTMzQzBFNQorOjEwMDY0MDAwQkE3MjAwRUYzM0MwQkE3NDAwRUZCQTc2MDBFRkI4ODAyOAorOjEwMDY1MDAwRkU4NkUwQkE3MjAwRUZFOEJGMDdCQTBDMDFCODQwNDA2RQorOjEwMDY2MDAwRUZFREJBNkEwMEI4MDMwMEMxRTAwODBEMDMwMEVGQjk2RQorOjEwMDY3MDAwMEEwMEU4OTQwMEJBNkEwMEI4MDMwMEMxRTAwOEVGQTFEQworOjEwMDY4MDAwMzIzNEEzQTIzM0M3MDZBNjMzMDQwMDhEMDZBMDMzQzFCQgorOjEwMDY5MDAwRTgwNENEMzlDNzA2OTAzNkZGRkZFOUUzMDA2MzBENjYzNQorOjEwMDZBMDAwMEQ2NjBEOEEwREU2MEU3NTEyMkUwRjAzMEY1MDBGNjBBQQorOjEwMDZCMDAwMEQ2MDBENjAwREVEMEZFOTEyNjAwRDYwMEQ2MDBENjBCNQorOjEwMDZDMDAwMEQ2MDBEMjIxMDYwMEQ2MDBENjAwRDYwMERGRTEwNjA1QworOjEwMDZEMDAwMEQ2MDBENjAwRDYwMEQ2MDBENjAwREFGMEYzMjEwMzdCNQorOjEwMDZFMDAwMEQ2MDBENjAwRDYwMEQ2MDBENjAwRDYwMEQ2MDBENjBBMgorOjEwMDZGMDAwMEQ2MDBENjAwRDYwMEQ2MDBENjAwRDYwMEQ2MDBENjA5MgorOjEwMDcwMDAwMEQ2NDBFMDAwRjk1MDk2MDBBNDlCQkZGRkZCQTZBMDAyRAorOjEwMDcxMDAwRURBOTAwMjA3NDM4ODAzRTgwRkUxMjc1MzFFODRBMDA1MQorOjEwMDcyMDAwQTEzMjM0QTNBMjMzQzcwNkE2MzMwNDAwOEQwNkEwMzMzQQorOjEwMDczMDAwQzFFODA0Q0QzOUU4MjIwMEM3MDZGMzM0NDYwMEM3MDZGNQorOjEwMDc0MDAwRjUzNEZGRkZDNzA2OTAzNkZGRkY1OEU5MzIwMDRCODNCMAorOjEwMDc1MDAwRkIwMDc1Qjk4M0Y5MDA3NUIwQzM1MkJBNkEwMEI4MDNEQgorOjEwMDc2MDAwMDBDMUUwMDgwRDAzMDBFRjVBQzM1MkJBNkEwMEI4MDM5MworOjEwMDc3MDAwMDBDMUUwMDhFRjVBQzMwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwMDc4MDAwNjg4MDA3QTE5MDM2Q0QzNThCMzYyNDAyMkVGRkE0MzUyNAorOjEwMDc5MDAwMEFGQThBMjY5NDM2ODgyNkU4MzRDNjA2OTQzNjAwRkI4MAorOjEwMDdBMDAwMjJFNDc1MDFDM0Y2QzQyMDc0N0RGNkM0MDg3NDA1ODA4NAorOjEwMDdCMDAwMEU5MjM2MDQ4MDI2RTgzNEQ3QzQxRTg0MzYyNjhCMzc0MgorOjEwMDdDMDAwODFFNkZGMDA4M0ZFMjA3NjA1QjAwMUU5MjgwMDUzMDY4QworOjEwMDdEMDAwRDFFNjJFRkY5NDlEMDYwNzVCMjY4ODQ3MDIzQ0ZGNzRGNgorOjEwMDdFMDAwMDczQ0ZFNzUxMUU5M0IwMEY2MDY5MjM2MDg3NTM0RjZCMworOjEwMDdGMDAwMDY5MjM2MDQ3NDJEODAyNjkyMzZGMzgwM0U5NTM2MDA5QworOjEwMDgwMDAwNzUyMTI2ODAzRjA1NzUxM0M2MDY5NTM2MDAyNjgwN0YyNAorOjEwMDgxMDAwMDYwMDc0MDcyNjhCNDcwNEEyOTUzNkJBMEMwMUI4NDAyRgorOjEwMDgyMDAwNDBFRkVEOEEyNkU4MzRGNkM0MTA3NTAzRTk1QjAwRjY2NAorOjEwMDgzMDAwQzQwNDc0MDU4MDBFOTIzNjAxODAyNkU4MzRFQkM0M0U3MQorOjEwMDg0MDAwODgzNjI2OEIzNTgzRTY3RjgzRkUxMjcyMDgyNkM2NDVERQorOjEwMDg1MDAwMDIwMUU5MjQwMDgzQzYyMEQxRTYyRUZGOTQ5RDA2QzQ0MAorOjEwMDg2MDAwM0U4ODM2MjY4ODQ1MDIzQ0ZGNzUwRUY2MDY5MjM2MDExNAorOjEwMDg3MDAwNzQxNEY2MDY5MjM2MDI3NTBEODAyNjkyMzZGQ0JBMEM3OAorOjEwMDg4MDAwMDFCODIwMjBFRkVEOEEyNkU4MzRGNkM0MDg3NDIyODBFRgorOjEwMDg5MDAwMjZFODM0Rjc4MDBFOTIzNjA0RjYwNjkyMzYwODc0MTE3NAorOjEwMDhBMDAwODAyNjkyMzZGM0JBMEMwMUI4NDA0MEVGRUQ4QTI2RTg3NAorOjEwMDhCMDAwMzRGNkM0MDQ3NDIyODAyNkU4MzRGQjgwMEU5MjM2MDE5QworOjEwMDhDMDAwRjYwNjkyMzYwMjc1MTE4MDI2OTIzNkZFQkEwQzAxQjhGMQorOjEwMDhEMDAwMjAyMEVGRUQ4QTI2RTgzNEY2QzQwMTc0Njc4MDI2RTgwQworOjEwMDhFMDAwMzRGRTgwM0VFOEZGMDA3NDM5ODAzRUU4RkYwNDc0MzIzNQorOjEwMDhGMDAwODAzRUU4RkYwMTc1MjFFNTgwQTkwMDA3NzQwQUJBOUVEMQorOjEwMDkwMDAwMDBCODAwMDJFRkU5RUZGRkM2MDZFOEZGMDNCQTBDMDFFQQorOjEwMDkxMDAwQjgwODA4RUZFREU5MjgwMDgwM0VFOEZGMDM3NDA2RTkxNworOjEwMDkyMDAwMUUwMEU5MDAwMEJBMTAwMUI4MDIwMkVGRURFNTAwMEQ2QgorOjEwMDkzMDAwMTgwMEU3MDBFNTgyMEQwMjAwRTc4MkM2MDZFOEZGMDQyMgorOjEwMDk0MDAwOEEyNkU4MzRGNkM0MDI3NDBEODAyNkU4MzRGRDgwMjYzOQorOjEwMDk1MDAwOTIzNkJGRTg0RjBCRkFBMEU4MzQwODA2OTQzNkM2MDY3NAorOjEwMDk2MDAwRTgzNDAwRkJDM0U4RTcwRkM0MUU4NDM2MkVGRjE2MDFFRgorOjEwMDk3MDAwMDcyNjg4NDcwMkU5N0VGRUU4MkQxMEM0MUU4NDM2MkUyNQorOjEwMDk4MDAwRkYxNjAzMDcyNjg4NDcwMkU5NkJGRThFMDYyNjAyMkUxNQorOjEwMDk5MDAwRkYxNjA3MDdDM0MzODMzRUY1MzQwMDc0MEZGRjBFRjM0MQorOjEwMDlBMDAwMzQ3NTA5RThDNEZEQzcwNkY1MzQwMDAwRjYwNjkzMzYzMQorOjEwMDlCMDAwMjA3NDMwQTFDMjM0M0IwNkU5MzRBM0U5MzQ3NDI0ODBBNgorOjEwMDlDMDAwM0U5NTM2MDA3NTFERjcwNkU2MzQyMDAwNzQxMkE5MjAwNgorOjEwMDlEMDAwMDA3NDBEODMyNkMyMzRERjgzMjZFOTM0REZFOTAzMDA4NworOjEwMDlFMDAwRThERDA5QkEwNjAxRUQ4QkQwODFFMjAwQzBDMUVBMEU1NAorOjEwMDlGMDAwMDMxNjc0MzRDMUUwMDIxMTA2NzIzNDczMDRGRjA2NzRFNgorOjEwMEEwMDAwMzRCQTAyMDFFRDhCRDA4MUUyMDBDMEMxRUEwRTAzMTZCOAorOjEwMEExMDAwNzAzNEMxRTAwMjExMDY2RTM0NzMwNEZGMDY3MDM0QzdFRgorOjEwMEEyMDAwMDZBNjMzMDQwMEM3MDZBQTMzMDAwMDhEMDZBMDMzQzExMgorOjEwMEEzMDAwRTgwNENEMzlDMzk1MDk5NTA5NjUwOTc4MDk5NTA5OTVBMworOjEwMEE0MDAwMDk5MTA3OTUwOTk2MDk4QjA5OTUwOTk1MDk5NTA5OTVDNQorOjEwMEE1MDAwMDk5NTA5OTUwOThCQzA4QkMwOEJDMDhCQzA4QkMwOTA0QQorOjEwMEE2MDAwRjYwNjkzMzYyMDc1MDNFOUNDMDA4Q0MwNDA4RUMwMjY3NAorOjEwMEE3MDAwOEIwRTA2MDA4NkU5MjY4OTBFMDYwMDhDQzJDMUUyMDRCMAorOjEwMEE4MDAwQkUwRTAwMjZBMTA0MDBEMEUwMjRDMDhBRTBDMEVDMDQyMQorOjEwMEE5MDAwMEFDNDI2QTIwNTAwMjZBMTA4MDBBOTAwQzA3NDAzRTkyMworOjEwMEFBMDAwOUUwMDI2RjYwNjEwMDA4MDc1MDNFOTBBMDAyNkEwMTZBRgorOjEwMEFCMDAwMDAyNDFGMzJFNDAzRjA4MDNFRUMzNDA2NzI1QzgwM0U3QQorOjEwMEFDMDAwOTUzNjAwNzU2NjhCRkEzM0RCOEVDMzI2ODkxRDI2ODgyMgorOjEwMEFEMDAwNUQwNDUxNTBDNDFFOEMzNkI5MEYwMDMzQzBFODIxMDlBMworOjEwMEFFMDAwNTg1OTBCREI3NDM0RkUwRUU2M0EyNkM2MDc4MTI2QzYzQgorOjEwMEFGMDAwNDcwMTAwMjZDNjQ3MDJGRjI2Qzc0NzA0MDAwMDI2ODk5MworOjEwMEIwMDAwNEYwQTg2RjIyNjg5NTcwNjI2ODk3NzA4MjZDNjQ3MDk5RQorOjEwMEIxMDAwMDAyNkM2NDcwQzAyRTg4QzA5QzNGRjA2RUMzMzhDQzBFNAorOjEwMEIyMDAwNDg4RUMwRkFFODk3MTBGQkU5RUJGRjhDQzA0ODhFQzBGNgorOjEwMEIzMDAwRkFFODhBMTBGQkMzOENDMDhFQzBGQUU4ODAxMEZCQzNCMQorOjEwMEI0MDAwODAzRTk1MzYwMDc1MDNFOUMyMDBCRjA4MDAyNkY2MDYxMAorOjEwMEI1MDAwMTAwMDgwNzUwNTAzRkVFOTBDMDAyNkEwMTYwMDI0MUY3NgorOjEwMEI2MDAwMzJFNDAzRjAwM0ZFQTA5NTM2M0MwMDc1MDNFOTlDMDBENworOjEwMEI3MDAwM0MwMTc0MEIzQzAyNzQxNDNDMDM3NDFERTk4RDAwQzZFNworOjEwMEI4MDAwMDY5NjM2MDFFODNDMDE3MjI3RTk4MDAwQzYwNjk2MzZEMworOjEwMEI5MDAwMDJFODgzMDA3MjFBRTk3MzAwQzYwNjk2MzYwMUU4MjI1RAorOjEwMEJBMDAwMDE3MjBEQzYwNjk2MzYwMkU4NkMwMDcyMDNFOTVDMDAxRAorOjEwMEJCMDAwNTMwNjUwQzQxRThDMzZCOTBCMDAzM0MwRTg0MjA4NThBNworOjEwMEJDMDAwMjZDNjA3ODIyNkM2NDcwMkZGOEQwNkUwRkU4NkM0MjY5QgorOjEwMEJEMDAwODk0NzA2QTA5NjM2MjY4ODQ3MDhFOEM4MDgwNzVCODMzOQorOjEwMEJFMDAwMjZBRDM2RkVBMUFEMzZFNzA0QkExMDAxQjg4MDgwRUYxRAorOjEwMEJGMDAwRURCQTEwMDFCODAyMDJFRkVENTJCQUUwMDBCODQxMTBCMAorOjEwMEMwMDAwRUY1QUI4OUMwM0NEMzlDNjA2OTUzNjAwOENDMDQ4OEU4NQorOjEwMEMxMDAwQzBGQUU4QTkwRkZCQzMxRTA2MUYwNjMzQzA4RUMwOEJBNworOjEwMEMyMDAwRjA4RDNFMjBGMzUxQjEwQTI2ODM3RDBDMDE3NTJBNTdDMQorOjEwMEMzMDAwMjY4MzdEMEUwMDc0MDZFODJGMDBFOTAzMDBFODY2MDdBRQorOjEwMEM0MDAwNUY3MzE2MzNDMDhFRDgyNjhCNEQxMjhENzUyMDhEM0U2NgorOjEwMEM1MDAwRTBGRUYzQTQ1OTA3MUZGOUMzRkVDOTc0MDc4MUM3MjAzQQorOjEwMEM2MDAwMDFFOUM0RkY1OTA3MUZGOEMzNTE1MDUzNTY1MjU3MzM3NworOjEwMEM3MDAwREIyNjhBNUQwRTI2OEI0RDEyOEQ3RDIwNUE4N0Q3MjY2NgorOjEwMEM4MDAwOEE0NTE0ODdENzQyMzJGRjgwRkYwODc1MDhGRUNCMjJDMQorOjEwMEM5MDAwREI3NUVBMzNEQjIzREI3NDA2RkVDN0QwQzg3MzBDNTA2OAorOjEwMENBMDAwMjY4QTA1MzgwNDU4NzQwM0U5MEEwMDQ5NDY0NzIzQzlDRgorOjEwMENCMDAwNzQwQUU5RDNGRjVBNUU1QjU4NTlGOEMzNUE1RTVCNTgxMQorOjEwMENDMDAwNTlGOUMzMUUwNjFGMDYzM0MwOEVDMDg2Q0QyQkNFOEJBRQorOjEwMENEMDAwRjc4QkMxMzNDOTgwM0NGRjc0MTY4MEY5MDY3MzA5MzI2MworOjEwMENFMDAwQzk0NjQ4NzQyRUU5RURGRjNENjAwMDczMENFOTIzMDAwRQorOjEwMENGMDAwRkVDMTQ2NDg3NDFERTlEQ0ZGQjgxMDAwOEQzRTE4MzQ3MworOjEwMEQwMDAwMzJFREIxMDZGM0E2NzQwM0U5MDgwMDQ4MjNDMDc0MDc2NgorOjEwMEQxMDAwRTlFOUZGMDcxRkY4QzM4RDM2MTgzNDMzQzA4RUQ4OEQyQworOjEwMEQyMDAwM0VFMEZFQjgxMDAwQjkwNjAwNTZGM0E0NUU0ODNEMDA1MAorOjEwMEQzMDAwMDA3NUYzMDcxRkY5QzNGRjA2RTQzM0M2MDZFQjM0MDA2MgorOjEwMEQ0MDAwMjY4QjQ1MDY4NkUwQzFFODA0NDgwNjhFQzBGRTA2RTYwRQorOjEwMEQ1MDAwM0FGQUU4NjkwRUZCMDdCMEZGQzMwMDAwMDAwMDAwMDA4QworOjEwMEQ2MDAwQjAwMUMzQjAwMEMzRjYwNjkzMzYyMDc1MDNCMDA0QzNDOAorOjEwMEQ3MDAwOEIwRTk3MzY4MUUxODAzMDI2OEI0NzA0MjU3RkNGMEI4MQorOjEwMEQ4MDAwQzFBMzk3MzZBM0U2MzRCMDAwQzNGNjA2OTMzNjIwNzRBOQorOjEwMEQ5MDAwMDNCMDAzQzMyNjhCNDcwOEEzOTczNkEzRTYzNDI2OEFGRAorOjEwMERBMDAwNDcyMEEyRkQzNDNDMDE3NTA2QzcwNkExMzYwMDAwMjY4NworOjEwMERCMDAwOEE0NzIxQTJGRTM0MjY4QjQ3MEFBMzE4MzRBMzU4MzQ0RAorOjEwMERDMDAwMjY4QjQ3MENBMzFBMzRBMzVBMzQyNjhCNDcwRUEzMUMzOAorOjEwMEREMDAwMzRBMzVDMzRDNjA2MkEzNEMwMjY4QjQ3MTQyNTdGRkYxMworOjEwMERFMDAwMDkwNjJDMzQyNjhCNDcxNjI1RkZGRTI1RkZGQzA5MDYzNQorOjEwMERGMDAwMkUzNEM2MDYwMDM0QzAyNjhCNDcxMEEzMDIzNDI2OEIzRgorOjEwMEUwMDAwNDcxMkEzMDQzNDA2NTNFODg0MEE1QjA3M0QwMDAwNzVDQgorOjEwMEUxMDAwMDc4MDBFOTIzNjA4QjBGRUMzQjkwMDAxQTFBQzMzMzM4RgorOjEwMEUyMDAwRDJGN0Y5QTNBRTMzOTE0OTMzRDJGN0U5MDUwMDNCQTNEQQorOjEwMEUzMDAwNDYzNEJGMDAzQjg5M0U0NDM0QkE2ODAwQjhFMEUwRUY3NgorOjEwMEU0MDAwQTFBRTMzRTc2MkExQUUzM0JBMDgwMUVGQTE0NDM0RTdBMworOjEwMEU1MDAwNjRBMTQ0MzRCQTBBMDFFRkI4MDAwMTJEMDQwMDBEMDA2QQorOjEwMEU2MDAwMTBFNzkyQzMzRDAwMDA3NDBBMjY4OTQ3MDdFODgzM0FEOQorOjEwMEU3MDAwQjAwN0MzQTFBRTMzMjY4OTQ3MkJBMTQ0MzQyNjg5NDc0NgorOjEwMEU4MDAwMkRBMTQ2MzQyNjg5NDcyRjgwMEU5MzM2MjBBMTg4MzYxRgorOjEwMEU5MDAwODZFMDI2ODk0NzA4QTE4NDM2ODZFMDI2ODk0NzBBQTE4QworOjEwMEVBMDAwODAzNjg2RTAyNjg5NDcwQ0I4NjBGRTg2RTAyNjg5NDdCMgorOjEwMEVCMDAwMEVBMEExMzYyNjg4NDcxMDhCMzY4ODM2MjZDNjQ0MDJGNworOjEwMEVDMDAwRkZFNTlFQTkwMDA4NzQwQ0JBODQwMEVEMEQwODAwRUY0MAorOjEwMEVEMDAwQkE4RTAwRUZFNTAyMjVGOUZGRTcwMkJBMTAwMUI4MDI2OQorOjEwMEVFMDAwMDJFRkVEQjAwMEMzRjYwNjkzMzYyMDc1MDNCMDAxQzNFMAorOjEwMEVGMDAwODAyNjkzMzY5RkU4OEQwQTgwMEU5MjM2MDhCMEZFQzM5NgorOjEwMEYwMDAwQjAwMEMzRjYwNjkzMzYyMDc1MDNCMDA0QzNDNjA2MkFBNAorOjEwMEYxMDAwMzRDMDI2OEI0NzA2MjU3RkZGQTMyQzM0MjY4QjQ3MDgzOQorOjEwMEYyMDAwMjVGRkZFMjVGRkZDQTMyRTM0Q0Q1MkIwMDBDM0Y2MDZFQworOjEwMEYzMDAwOTMzNjIwNzUwM0IwMDRDM0M2MDYwMDM0QzAyNjhCNDcyMQorOjEwMEY0MDAwMDZBMzAyMzQyNjhCNDcwOEEzMDQzNENENTJCMDAwQzM1NQorOjEwMEY1MDAwRjYwNjkzMzYyMDc1MDNCMDA0QzM1NzhEN0YwNjUxQjk0QQorOjEwMEY2MDAwMDcwMDMzQzBGM0FCNTk4RDdGMDZBMTdBMzQwMzA2MzlFRAorOjEwMEY3MDAwMzcyNjg4MDVBMTk1MzcyNjg4NDUwMkExODAzNDAzMDZDNworOjEwMEY4MDAwNzYzNDI2ODg0NTA3QTFDNjM0MjY4ODQ1MDlBMUQ4MzM3QQorOjEwMEY5MDAwMjY4ODQ1MEEzM0MwQTM3QTM0QTMzOTM3QTM5NTM3QTNFQgorOjEwMEZBMDAwODAzNEEzNzYzNEEzQzYzNEEzRDgzMzVGQjAwMEMzRjYyRAorOjEwMEZCMDAwMDY5MzM2MjA3NTAzQjAwNEMzMjY4QjRGMDQ4M0Y5MDZDRAorOjEwMEZDMDAwNzQxMjgzRjkwNDc0MEQ4M0Y5MDA3NDA4ODNGOTAyNzRCMAorOjEwMEZEMDAwMDNCMDAxQzM4OTBFRTgzQTgzMjZBQjM2RjkwOTBFQUI5QworOjEwMEZFMDAwMzZFNTAyMjVGOUZGMEJDMUU3MDJCMDAwQzNGNjA2OTMxMAorOjEwMEZGMDAwMzYyMDc1MDNCMDA0QzMyNjhCNEYwNDgwRjlGRjc0MDhCNAorOjEwMTAwMDAwODBGOTAwNzQxMEIwMDFDMzgzMEVBRDM2MDJBMUFEMzY3NQorOjEwMTAxMDAwRTcwNEU5MEEwMDgzMjZBRDM2RkRBMUFEMzZFNzA0QjA0QQorOjEwMTAyMDAwMDBDM0Y2MDY5MzM2MjA3NTAzQjAwNEMzRThENTA0QjBCOAorOjEwMTAzMDAwMDBDM0Y2MDY5MzM2ODA3NTAzQjAwMUMzMjY4MzdGMDY4RQorOjEwMTA0MDAwMDU3NTAzRTk5RDAwMjY4QjU3MDQyNjhCNDcwODI2ODFFQQorOjEwMTA1MDAwN0YwNjAwODA3NTA4RUQyNjg5NDcwQUU5OUQwMDI2ODNGMgorOjEwMTA2MDAwN0YwNjAxNzUwNEVGRTk5MjAwMjY4MTdGMDYwMTgwNzVGNQorOjEwMTA3MDAwMDlFRkVEMjY4OTQ3MEFFOTgxMDAyNjgzN0YwNjAyNzU3QworOjEwMTA4MDAwMDcyNjIxNDcwNEU5NzMwMDI2ODE3RjA2MDI4MDc1MEMzQworOjEwMTA5MDAwMjYyMTQ3MDRFRDI2ODk0NzBBRTk1RjAwMjY4MzdGMDY1QgorOjEwMTBBMDAwMDM3NTA3MjYwOTQ3MDRFOTUxMDAyNjgxN0YwNjAzODA1RQorOjEwMTBCMDAwNzUwQzI2MDk0NzA0RUQyNjg5NDcwQUU5M0QwMDI2ODM3OQorOjEwMTBDMDAwN0YwNjA0NzUwNzI2MzE0NzA0RTkyRjAwMjY4MTdGMDYzNQorOjEwMTBEMDAwMDQ4MDc1MEMyNjMxNDcwNEVEMjY4OTQ3MEFFOTFCMDA3OAorOjEwMTBFMDAwQjAwMUMzRkE1MzI2OEI0RjA4MEJDOTc0MEM4RDFFRTA1OAorOjEwMTBGMDAwRkVFODUyRkY4M0MzMDhFMkY4NUJGQkIwMDBDM0Y2MDZDQworOjEwMTEwMDAwOTMzNjgwNzUwQUY2MDY5MzM2MjA3NTAzQjAwMUMzOERCOQorOjEwMTExMDAwM0VFMEZFRTUwMDI2ODkwNUU1MDIyNjg5NDUwMkExQURFRgorOjEwMTEyMDAwMzYyNjg5NDUwNEU1MDYyNjg5NDUwNkU1MDgyNjg5NDVDQgorOjEwMTEzMDAwMDhFNTBBMjY4OTQ1MEFFNTBFMjY4OTQ1MENFNTQ4MjY3NAorOjEwMTE0MDAwODk0NTBFRTU0QTI2ODk0NTEwRTU0QzI2ODk0NTEyQTFCOAorOjEwMTE1MDAwQjczNjI2ODk0NTE0RTU1MDI2ODk0NTE2RTU1MjI2ODk3NQorOjEwMTE2MDAwNDUxOEU1NTQyNjg5NDUxQUU1NTYyNjg5NDUxQ0U1NTg1MworOjEwMTE3MDAwMjY4OTQ1MUVFNTYyMjY4OTQ1MjBFNTY0MjY4OTQ1MjJBMworOjEwMTE4MDAwRTU2NjI2ODk0NTI0RTU2ODI2ODk0NTI2RTU2QTI2ODk5NworOjEwMTE5MDAwNDUyOEU1NkMyNjg5NDUyQUU1NzAyNjg5NDUyQ0U1NzJBNworOjEwMTFBMDAwMjY4OTQ1MkVFNTc0MjY4OTQ1MzBFNTc2MjY4OTQ1MzIxRgorOjEwMTFCMDAwRTU3QzI2ODk0NTM0RTU3RTI2ODk0NTM2RTU4MDI2ODkwNQorOjEwMTFDMDAwNDUzOEU1ODIyNjg5NDUzQUU1ODYyNjg5NDUzQ0U1ODgwNQorOjEwMTFEMDAwMjY4OTQ1M0VFNTlBMjY4OTQ1NDBFNTlFMjY4OTQ1NDI3MQorOjEwMTFFMDAwRTVDQzI2ODk0NTQ0RTVDRTI2ODk0NTQ2RTVEMDI2ODlDNQorOjEwMTFGMDAwNDU0OEU1RDIyNjg5NDU0QUJBMDAwMUVEMTEwNjY2MzQxNAorOjEwMTIwMDAwNzMwNEZGMDY2ODM0MjY4OTQ1NENCQTAyMDFFREMxRTAzQgorOjEwMTIxMDAwMDIxMTA2NkUzNDczMDRGRjA2NzAzNDI2ODk0NTRFQkFGNworOjEwMTIyMDAwMDQwMUVEMTEwNjZBMzQ3MzA0RkYwNjZDMzQyNjg5NDUwNworOjEwMTIzMDAwNTBCQTA2MDFFREMxRTAwMjExMDY3MjM0NzMwNEZGMDZENAorOjEwMTI0MDAwNzQzNDI2ODk0NTUyQkEwODAxRUQyNjg5NDU1NEJBMEFGNAorOjEwMTI1MDAwMDFFRDI2ODk0NTU2QkEwQzAxRUQyNjg5NDU1OEJBMEU4RQorOjEwMTI2MDAwMDFFRDAxMDY3QTM0MjY4OTQ1NUVCQTEwMDFFRDI2ODkyMgorOjEwMTI3MDAwNDU1Q0IwMDBDM0Y2MDY5MzM2ODA3NDA3RjYwNjkzMzZENQorOjEwMTI4MDAwMjA3NTAzQjAwMUMzMjY4MDdGMDYwMDc1MzA4MDNFOTUyRgorOjEwMTI5MDAwMzYwMDc0NTJDNjA2OTUzNjAwODMyNkFEMzZGRUExQURFMworOjEwMTJBMDAwMzZFNzA0QkExMDAxQjg4MDgwRUZFREJBMTAwMUI4MDIzOQorOjEwMTJCMDAwMDJFRkVEQkFFMDAwQjgwMDEwRUZCMDAwQzMyNjhCNDc5NAorOjEwMTJDMDAwMDQzRDAwMDA3NDIwM0QwMzAwNzcxQkJBMTAwMUI4MDJGMgorOjEwMTJEMDAwMDBFRkJBRTAwMEI4MDExMEVGODMwRUFEMzYwMUExQUQwQQorOjEwMTJFMDAwMzZFNzA0QjAwMEMzQjAwNkMzRjYwNjkzMzY4MDc1MDMzNAorOjEwMTJGMDAwQjAwMUMzMjY4MzdGMDQwMTc0MEEyNjgzN0YwNDAyNzQyRAorOjEwMTMwMDAwMTlCMDA2QzMyNjgzN0YwNjBDNzdGNjI2ODM3RjBBNjAxMgorOjEwMTMxMDAwNzdFRkU4MTAwMDcyMEJCMDQ2QzNFODRFMDA3MjAzQjBERQorOjEwMTMyMDAwNDZDM0IwMDBDMzUxQjEwQThCM0UyMEYzMjY4MzdEMEMyNworOjEwMTMzMDAwMDI3NTAzRTkwRTAwRkVDOTc0MDc4MUM3MjAwMUU5RUJCRAorOjEwMTM0MDAwRkY1OUY4QzM1NzhEN0QwRThENzcwNkI5MTIwMEYzQTRBRgorOjEwMTM1MDAwOEQ3RDIwOEQzNkUwRkUyNjhCNEQxMkYzQTRGRjA2MDExNQorOjEwMTM2MDAwMzU1RjI2Qzc0NTBDMDEwMDU5RjlDMzUxQjEwQThEM0VCRQorOjEwMTM3MDAwMjBGMzhEMzZFMEZFMjY4MzdEMEMwMTc1MUI1N0U4MjU5MgorOjEwMTM4MDAwMDA1RjczMTQzM0MwQjkyMDAxRjNBQTI2Qzc0NTBDMDJDRAorOjEwMTM5MDAwMDBGRjBFMDEzNTU5RjlDM0ZFQzk3NDA3ODFDNzIwMDE0QQorOjEwMTNBMDAwRTlEM0ZGNTlGOEMzNTEyNjhCNEQxMjhEN0QyMEYzQTY0QQorOjEwMTNCMDAwNzQwMzU5RjhDMzU5RjlDMzAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMTNDMDAwODAzRUVDMzQwNjcyMzNGRjA2RjAzMzUwQzQxRThDMzY3OAorOjEwMTNEMDAwQjkwRjAwMzNDMEU4MjkwMDU4ODEyNkMyMzRERjdGODE2RAorOjEwMTNFMDAwMjZFOTM0REY3RjBCREI3NDExMjZDNjA3ODQyNkM2NDc0NworOjEwMTNGMDAwMDJGRjI2ODk0NzA2RThBQzAwQzNGRjA2RUEzM0U5RjU5OQorOjEwMTQwMDAwRkY1NzI2OEIzRjAzRjkyNjNCN0YwMjc0MTYyNjNCN0Y0RQorOjEwMTQxMDAwMDQ3QzJBM0QwMDAwNzUxMzhEN0YwODAzRjkyNjNCN0Y2RAorOjEwMTQyMDAwMDI3QzE0RkYwNkRFMzMzM0RCNUZDMzI2OEI3RjAyMjY4QworOjEwMTQzMDAwODkzRjAzRjlFOTA2MDAyNjg5M0YyNjI5MEYyNkM3MDVCQgorOjEwMTQ0MDAwRkZGRjI2ODczRjI2ODkwRDhENUQwMjUwOEJGQjgzRTlDOAorOjEwMTQ1MDAwMDIzM0MwRjNBQTU4RkUwRUVDMzQ1RkMzOEI3QzAyM0IxMAorOjEwMTQ2MDAwM0M3NDJGODMzREZGNzUwQjhEN0MwODg5N0MwMjgzM0Q4NgorOjEwMTQ3MDAwRkY3NDFFOEE0NTAyM0M4MTc1MEM4MDNFRUIzNDAwNzQ3QgorOjEwMTQ4MDAwMDUzM0MwRTkwQjAwOEIwRDAxNEMwMjhENzUwMjgzRTkxOQorOjEwMTQ5MDAwMDJDMzgwM0VFQzM0MDY3MjA1MzNDMEU5RjNGRkZGMDY1OQorOjEwMTRBMDAwRUUzM0U5QkVGRkY2MDY5MjM2NDA3NDAxQzM1NzU2NTEzQgorOjEwMTRCMDAwNTI4QjM2OEMzNkU4QTRGRjc1MDNFOTFBMDBFOTFDMDA0QworOjEwMTRDMDAwRkUwNkVDMzRDNDNFODAzNkYzQTQ4MDBFOTIzNjQwQkE1OQorOjEwMTREMDAwMEMwMUI4ODA4MEVGRUQ1QTU5NUU1RkMzRkYwNkUwMzMyMAorOjEwMTRFMDAwODAzQzgxNzUwQ0ZGMDZFMjMzQzYwNkVCMzQwMUU5Q0Y4MAorOjEwMTRGMDAwRkY4MDNDODQ3NTA3RkYwNkU2MzNFOUMzRkZGRjA2RTg3QgorOjEwMTUwMDAwMzNFOUJDRkY4RDNFRTBGRUExNzIzNEM3MDY3MjM0MDBBMQorOjEwMTUxMDAwMDA4OTA1QTE3NDM0QzcwNjc0MzQwMDAwODk0NTAyQkFGNQorOjEwMTUyMDAwMDQwMUVEODk0NTA0Qzc0NTA2MDAwMEExNkUzNEM3MDZENQorOjEwMTUzMDAwNkUzNDAwMDA4OTQ1MDhBMTcwMzRDNzA2NzAzNDAwMDA3RAorOjEwMTU0MDAwODk0NTBBQkEwMDAxRUQ4OTQ1MENDNzQ1MEUwMDAwMzJGNQorOjEwMTU1MDAwRTRCQTBFMDFFQzg5NDUxMEExN0UzNEM3MDY3RTM0MDA0MgorOjEwMTU2MDAwMDA4OTQ1MTJBMThDMzRDNzA2OEMzNDAwMDA4OTQ1MTRDQgorOjEwMTU3MDAwQTE4QTM0QzcwNjhBMzQwMDAwODk0NTE2QTE3QzM0Qzc4NQorOjEwMTU4MDAwMDY3QzM0MDAwMDg5NDUxOEExODgzNEM3MDY4ODM0MDBEOQorOjEwMTU5MDAwMDA4OTQ1MUFBMUNBMzNDNzA2Q0EzMzAwMDA4OTQ1MUMxMQorOjEwMTVBMDAwQTE3ODM0QzcwNjc4MzQwMDAwODk0NTFFQTFDNjM0QzcyNworOjEwMTVCMDAwMDZDNjM0MDAwMDg5NDUyMEMzMDAwMDAwMDAwMDAwMDA3QQorOjEwMTVDMDAwRkEzM0MwOEVEODhFQzBCOEEwMDFDMUU4MDQ4RUQwOEQ4OQorOjEwMTVEMDAwMjY4MDAwRTgwMDAxRTgxMEVCOEIxRUY3MzQ4QjE2RjkyQgorOjEwMTVFMDAwMzQ4QjM2RkYzNDMzQzBCOUVGRkY4RDNFMTQwMDJCQ0Y2MAorOjEwMTVGMDAwMkJDRUQxRTlGM0FCODkxRUY3MzQ4OTE2RjkzNDgzRkU3QgorOjEwMTYwMDAwMDA3NDBDQjlFRkZGQkY4MEZFMkJDRkQxRTlGM0FCQjk2QgorOjEwMTYxMDAwRkZGRjgxRTkwMDNCODNGRTAwNzQwM0U5MUIwMDUxMUVCQworOjEwMTYyMDAwQjgwMEUwOEVEODMzRjY4RDNFMDBEOEI5MDAwQ0YzQTU5MworOjEwMTYzMDAwMUY1OUJFRkZGRjgxRUUwMEQ4MkJDRTgxRTEwMEZGODk0QworOjEwMTY0MDAwMEVBQzMzOEQwNjIwMDJDMUU4MDRBMzMyMzQ4RUQwMzZBRQorOjEwMTY1MDAwQzcwNjFFMDA4MDE4MzZDNzA2MjIwMEZGN0YzNkM3MDY2MQorOjEwMTY2MDAwMEEwMEZGRkYzNkM3MDYxQzAwODAwMDhEMDZBMDAyQzFERAorOjEwMTY3MDAwRTgwNEEzMzAzNDhFRDAzNkM3MDYxRTAwNTAyODM2Qzc4MworOjEwMTY4MDAwMDYwQTAwRkZGRjM2QzcwNjFDMDA4MDAwQjhBMDAxQzE5MworOjEwMTY5MDAwRTgwNEEzMzQzNEEzRjIzMzhFRDA4RDI2ODAwMEI4MDA0MgorOjEwMTZBMDAwOTBFNzAyOEQzRTcwMDE4QkM3QzFFODA0QjkwMzAwODk0MQorOjEwMTZCMDAwNDUwRTg5NDUwMkM3MDVGRkZGODNDNzEwMDUwMTAwRTJGQgorOjEwMTZDMDAwRUVFODVCMDFFNUNFQTNCNTM2RTgyMTAwRTg0NTAxQTFDRgorOjEwMTZEMDAwMzIzNDhDQ0JDRDM3MEU1OEE5MDBGMDc0MDczM0Y2ODkxRAorOjEwMTZFMDAwMzZGRjM0QzM4RDM2MzA2MTg5MzZGRjM0QzMzM0MwOEI0NworOjEwMTZGMDAwRDA4QkYyQjk2ODAwMkU4MEJDQUMxNzgwNzUwMUVGODNFNworOjEwMTcwMDAwQzIwMjQ2RTJGMUI4MDIwMEU3NTBCOTVBMDAzM0ZGQzdGRgorOjEwMTcxMDAwMDU2NTE4OEM0RDAyODNDNzA0RTJGNDMzQzA4RUMwOEM3QgorOjEwMTcyMDAwQzg4RUQ4OEQzRTgwMDA4RDM2OUMxN0I5MDgwMEU4MzdFQQorOjEwMTczMDAwMDA4RDM2MjAyMThEM0VDMDAwQjkwRDAwRTgyOTAwOERCNgorOjEwMTc0MDAwM0U0MDAxQjkwQTAwRTgxRjAwRTg0QjBFMzNDMDhFRDhCNgorOjEwMTc1MDAwQzcwNjRFMzc2RjE3RTc0OEU3NENCODQwOUNFNzRBRTVBNQorOjEwMTc2MDAwNDg5MEI4MDA3MEU3NDhDM0E1ODNDNzAyRTJGQUMzRTUxMgorOjEwMTc3MDAwNENDMzUwNTE1NjU3NTIwNjFFMzNDMDhFRDhFNTU4RDEyRgorOjEwMTc4MDAwRTA3MzExOEJGMEQxRTYzM0MwOEVEODhCQjQ4MDAwODMyOAorOjEwMTc5MDAwQzYwQkZGRTYxRjA3NUE1RjVFNTk1OENGNTgxQ0U0MUM2MgorOjEwMTdBMDAwNkMxQzhFMUFDMDFGNDAxQTQ0MUM2NTE4ODA4MDgwRkY3NAorOjEwMTdCMDAwODAwMzAyODBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYzMAorOjEwMTdDMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYyOQorOjEwMTdEMDAwODAwMzAzNDM4MDgwMDI4MDQyMDMwMkZGMDMwMTAzMDE3MAorOjEwMTdFMDAwMDEwMzAyMDNGRkZGRkZGRkZGRkZGRkZGMDIwMzAxMDNFRgorOjEwMTdGMDAwMDNGRjAxMDFGRjAxRkYwMTAxMDMwMzAzRkZGRkZGRkZERgorOjEwMTgwMDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFOAorOjEwMTgxMDAwRkZGRkZGMDJCODBGMDBFNzg0QjgwRkY4RTc4MkMzQjlGMworOjEwMTgyMDAwMDgwMDg5MEVFNjNBOEQwNjIwMDM4QkQwQzFFODA0QTM5OAorOjEwMTgzMDAwOTAwMThCQzI4QkQ4QzFFODA0OEVDMDA1NjEwMDI2QTMzRAorOjEwMTg0MDAwMDAwMEExMzAzNDI2QTMwMjAwODNDMzE0RDFFQjI2ODkwMworOjEwMTg1MDAwMUUwODAwODFDMjEwMDZFMkQ5MjZDNzA2MDAwMEZGRkY1RAorOjEwMTg2MDAwOEMwNjkyMDFDMzUwNTE1NjU3NTIwNjFFMzNDMDhFRDg3MworOjEwMTg3MDAwRTc1QUZGMDZCRTMzQkFEMjAwRURDRjAwMDAwMDAwMDBFOQorOjEwMTg4MDAwOENDQkExMzAzNENEMzdFOTA2RURCODMyMDBDM0U4OENGQgorOjEwMTg5MDAwMDFGRTA2RTIzNEU4MjEwMTc1RjBFODUzMEU4MTBFQUYzNworOjEwMThBMDAwMzYwMEMwQzcwNkFEMzY2MDAwRjcwNkU2MzQ4MDAwNzUyNgorOjEwMThCMDAwMUFGNzA2RTYzNDAwMDg3NDA5QzcwNkFCMzYwQjAwRTlEMAorOjEwMThDMDAwMEYwMEM3MDZBQjM2MDMwMEU5MDYwMEM3MDZBQjM2MTFBQQorOjEwMThEMDAwOUNDNzA2QTkzNjE4MDBGNzA2RTYzNDgwMDA3NTBERjc5OAorOjEwMThFMDAwMDZCNTM2MDIwMDc0MDU4MzBFQTkzNjIwQTFBOTM2RTc5NQorOjEwMThGMDAwMDBBMUFCMzZFNzAyRjcwNkU2MzQ4MDAwNzQyRUU4RjI2QQorOjEwMTkwMDAwMkYzM0MwMEQ0MTAwRTc1NkExQjEzNjBEMDAxMEU3MDg5NgorOjEwMTkxMDAwQTFCMzM2RTcwQUExQUYzNkU3MDZCODQwMDBFNzRFMzM3OQorOjEwMTkyMDAwQzBFNzBFQzcwNjI2MDIwMDAwRTkyMzAwQzcwNjRFMzdBRgorOjEwMTkzMDAwM0YyMDhFMDYzMDM0MjZGNzA2MEEwMDAwODA3NDA3MjYwMgorOjEwMTk0MDAwODEwRTA4MDAwMDgwQzYwNkUwMzQwMUI4MDAwMEMzRkUyNgorOjEwMTk1MDAwMDZFMTM0QzYwNkUwMzQwMEExMjYwMjBCQzA3NDAxQzNDMAorOjEwMTk2MDAwRTgwNDAwQjgwMDAwQzNBMUE5MzZFNzAwOEIxRUFCMzYxRgorOjEwMTk3MDAwODNFMzA2RTUwMjI1RjlGRjBCQzMwRDEwMDBFNzAyQTE4MgorOjEwMTk4MDAwQUQzNkU3MDRDM0I4MEEwMEU3ODRGRTA2RTUzNEM2MDZCMAorOjEwMTk5MDAwRTMzNDAxOEUwNjMwMzQyNkY3MDYwQTAwMDA0MDc0MDc0RgorOjEwMTlBMDAwMjY4MTBFMDgwMDAwNDBDM0M3MDY0RTM3NkYxN0ZFMDY5QgorOjEwMTlCMDAwRTQzNEM2MDZFMzM0MDBDM0MzRjYwNjE4MzQ4MDc1MEQ1QworOjEwMTlDMDAwQTExODM0MEIwNjFBMzQwQjA2MUMzNDc1MDFDM0ExMkU2MgorOjEwMTlEMDAwMzQyNUZGRkU4QjE2RTczNjgxRTIwMDAxMEJDMkEzMkVGMQorOjEwMTlFMDAwMzQ4RDE2MTAwMEJGMDAwMEI5MDgwMDhCODUwMDM0RUY1RAorOjEwMTlGMDAwODNDMjEwOEI4NTAyMzRFRjgzQzIxMDhCODUwNDM0RUZEMQorOjEwMUEwMDAwODNDMkUyODNDNzA2NDk3NUUyQjgwMDAwOEVDMEJFMDBGQgorOjEwMUExMDAwMzRCRkI5MzZCOTE4MDBGM0E1QjgwMDAwQzMzM0MwOEU3RgorOjEwMUEyMDAwQzA4RDNFQjAzM0I5MDgwMEYzQUI4RDNFM0UzNEI5MDNGMAorOjEwMUEzMDAwMDBGM0FCQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwMUE0MDAwNTA1MTU2NTc1MjA2MUUzM0MwOEVEOEU3NUFGRjA2QkE3OQorOjEwMUE1MDAwMzNFNTU2MEQyMDAwRTc1NkJBN0EwMEVEMDgyNjk0MzY5NQorOjEwMUE2MDAwMzNDMEIxMDgzMkVEMDY4RUMwOEQzRUUwRkZGM0FBOEU4MgorOjEwMUE3MDAwMDYzMjM0MjY4MTBFMDgwMDAwMDIwN0U1NTYyNURGRkZGNgorOjEwMUE4MDAwRTc1NkU5RjhGQzAwQkQxQjEwMUJEOTFBRjMxQTUwNTE5OAorOjEwMUE5MDAwNTY1NzUyMDYxRTMzQzA4RUQ4RTc1QUZGMDZCNjMzNTM0OAorOjEwMUFBMDAwMDY1MUU1ODBBM0I0MzM4QkQ4OEJDODI1MTAwMEEzRUQ3NQorOjEwMUFCMDAwMzQwQkMwNzQxNEZGMDY4MDM0ODAzRUZFMzQwMDc0MDM3RgorOjEwMUFDMDAwRTkwNjAwQjg4MDAwRTg5RDA0ODNFMzAzRDFFMzJFRkYxQworOjEwMUFEMDAwOTc4NjFBNTkwNzVCRTlBNEZDQkEyMDAwOEUwNjNDMzRBRAorOjEwMUFFMDAwODMzRTNDMzQwMDc1MDNFOUYwMDBDNzA2M0MzNDAwMDAzNworOjEwMUFGMDAwRTkyQTAwQkExMDAwOEUwNjNBMzQ4MzNFM0EzNDAwNzU2MworOjEwMUIwMDAwMDNFOUQ1RkZDNzA2M0EzNDAwMDBFODEwMDBFOUM5RkYzMQorOjEwMUIxMDAwQkExMDAwOEUwNjNBMzRDNzA2M0EzNDAwMDAyNkExMTRFMworOjEwMUIyMDAwMDAyNkEzMEMwMDI2QTExNjAwMjZBMzBFMDAyNkM2MDYzQQorOjEwMUIzMDAwMEEwMDAwQzFFQTAyMjNEMTc0MUNCQTIwMDAyNkM3MDY5RAorOjEwMUI0MDAwMEUwMEVBMDUyNjBCMTYwQzAwMjY4OTE2MEMwMEZGMDY2RgorOjEwMUI1MDAwODYzNEZGMDZEQzMzMjZBMTBDMDBBOTAwMzc3NDE2MjY1NAorOjEwMUI2MDAwQzYwNjBBMDAwMkE5MDAzMDc0MDRGRjA2N0EzNEZGMDY5NAorOjEwMUI3MDAwREEzM0U5NDkwMEMwRUMwNzgzMTY4QTM0MDAyNDA3M0NCNQorOjEwMUI4MDAwMDc3NTA0RkYwNjhDMzRGRjA2N0UzNEExMzAzNDhDQzMwNQorOjEwMUI5MDAwOEVDMDhFREIyNjgzMEUwODAwNDA4Q0Q4MjY4NzA2MTY2MgorOjEwMUJBMDAwMDAyNjgzM0UxNDAwRkY3NDBBOEVDMDI2OEMxRTAwMDA5RgorOjEwMUJCMDAwRTkwNTAwMjY4QzFFMTQwMDMzQzA4RUQ4QzNDMzhDQzAyOAorOjEwMUJDMDAwODcwNjkyMDEzREZGRkY3NDBEOEVEODhDMDYwMDAwMzMwRQorOjEwMUJEMDAwQzA4RUQ4RTkwNDAwOEMwNjkwMDFFODAxMDBDMzA2ODM5QQorOjEwMUJFMDAwM0U5MDAxRkY3NDI5ODMzRTNBMzQwMDc1MTFCQTg2MDA5NQorOjEwMUJGMDAwRTgxRTAwOEMwNjNBMzQ4MzNFOTAwMUZGNzQxMTgzM0U0OAorOjEwMUMwMDAwM0MzNDAwNzUwQUJBODgwMEU4MDYwMDhDMDYzQzM0MDdBQworOjEwMUMxMDAwQzNBMTkwMDE4RUMwMjZBMTA4MDBFRjI2QTEwMDAwMjZENgorOjEwMUMyMDAwQzcwNjAwMDBGRkZGQTM5MDAxM0RGRkZGNzUwM0EzOTJDRAorOjEwMUMzMDAwMDE4MzNFRUQzNDAwNzQwQkI4MTAwMEU3ODRDNzA2RUQ1NQorOjEwMUM0MDAwMzQwMDAwQzM1MDUxNTY1NzUyMDYxRTMzQzA4RUQ4RTc5OQorOjEwMUM1MDAwNUFGRjA2QkMzM0U5MjVGQjUwNTE1NjU3NTIwNjFFMzMzNgorOjEwMUM2MDAwQzA4RUQ4RTc1QUZGMDZCMDMzRTkxMUZCNTA1MTU2NTdFMgorOjEwMUM3MDAwNTIwNjFFMzNDMDhFRDhFNzVBRkYwNkI0MzMwNkZGMDY1RAorOjEwMUM4MDAwNzYzNDgwM0VGRTM0MDA3NDA0MDdFOUYwRkFCODgwMDAzMAorOjEwMUM5MDAwRThEMzAyMDdFOUU2RkEwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwMUNBMDAwQzYxRDA4MUQ5MTFFNUQxRTczMUU4OTFFOTExRUE4MUQ1NgorOjEwMUNCMDAwOTExRTkxMUVBRjFFQUYxRTE1MUQxNTFEOTExRTk5MUY2MQorOjEwMUNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMjAwMDAwRQorOjEwMUNEMDAwMDAwMTAwMTAwMDAxMDA0MDAwMDAwMDAwMDAwMTAwMDBCMQorOjEwMUNFMDAwMDdFOTk5RkE1MDUxNTY1NzUyMDYxRTMzQzA4RUQ4RTc2RAorOjEwMUNGMDAwNUFGRjA2QjIzMzA2NjhGNjFDRTUwNkEzQjIzMzhCRjAzMgorOjEwMUQwMDAwODNFNjFFMkVGRkE0QTAxQ0U1MENBOTgwMDA3NDA2RTg0MworOjEwMUQxMDAwQTQwMUU1MDZDMzUzRTUwQzhCRDhBOTAxMDA3NDE0ODMxNAorOjEwMUQyMDAwM0VFMDNBMDA3NDBEOEUwNjM4MzRFOEJGMDZDNzA2RTA4MAorOjEwMUQzMDAwM0EwMDAwRTUwMDBEMTgwMEU3MDBFNTAyMEQxMTAwRTc4QworOjEwMUQ0MDAwMDI4QkMzNUJBOTAxMDA3NDAxQzM4QkQwQjgwMDA4RTcwNAorOjEwMUQ1MDAwODQ4QkMyOEUwNjM4MzQyNkEzMEMwMDhCRDBDMUUwMDNERQorOjEwMUQ2MDAwODMxNjg4MzQwMEZGMDY3QzM0MjY4MzNFMDYwMDBBNzVGRAorOjEwMUQ3MDAwMjE4QkMyMjU0MDE4M0Q0MDAwNzQwQzNEMDAxMDc1MTJBNworOjEwMUQ4MDAwMjZGRTBFMEEwMDc0MEJGNzA2RUYzNDIwMDA3NTAzRTlGNworOjEwMUQ5MDAwNUEwNjhDQzAyNjhFMDYwMjAwMjY4MzBFMDgwMDIwMjZENgorOjEwMURBMDAwQTMxMjAwMjZBMzEwMDBDM0ZGMDZDNDMzRTUwQ0E5MDE0QgorOjEwMURCMDAwMDA3NTAxQzNBOUYwMDc3NDAxQzNGRjA2RDQzM0U1MDAyMQorOjEwMURDMDAwMEQxODAwRTcwMEMzRkYwNkNBMzM4MDNFQTAzNjA4NzUzMQorOjEwMUREMDAwMTQ4RTA2MzAzNDI2RjcwNjBBMDAwMDA4NzQwNzI2ODFBMAorOjEwMURFMDAwMEUwODAwMDAwOEU1ODIyNUZERkZFNzgyRTUwQzUwRTVCRQorOjEwMURGMDAwODAyNTAwMDdBM0U0M0FFNThDMjUwMDgwQTNFMjNBNTg0OQorOjEwMUUwMDAwQTkwMjAwNzUyNTgzM0VFMjNBMDA3NTFFODMzRUU0M0EzRQorOjEwMUUxMDAwMDA3NTE3RTUwODBEMDAwNDI1RkYwNEU3MDhFODZBMDFDRQorOjEwMUUyMDAwRTU4MjBEMDIwMEU3ODJFOTIxMDBFODFBMDY4MDNFRTgxQgorOjEwMUUzMDAwRkYwMDc0MEE4MDNFRThGRjA0NzQwM0U5MEQwMEM2MDY0MworOjEwMUU0MDAwRThGRjAxQkEwQzAxQjgwODA4RUZFRDgwM0U5RjM2MDZBNgorOjEwMUU1MDAwNzUwNTgzMEU5OTM2NDBCODAwMDFFOTA5MDFGRjA2Q0NFQgorOjEwMUU2MDAwMzM4MTI2QUYzNkZGRjdBMUFGMzZFNzA2RkYwNkM2MzQ0QgorOjEwMUU3MDAwRTkxRTAwRkYwNkNFMzNGRjA2OTUzNzgxMjZBRjM2RkZGOQorOjEwMUU4MDAwRUZBMUFGMzZFNzA2RTkwODAwRkYwNkQwMzNGRjA2N0E3OAorOjEwMUU5MDAwMzRGRjA2RDIzM0QxRTY4RTA2MzAzNDJFOEI4NEMwMUMzQworOjEwMUVBMDAwMjYwOTA2MDgwMDJFOEI4NEMyMUMwOTA2NjYzN0MzRTU4NgorOjEwMUVCMDAwMENBOTgwMDA3NDU2NTBFOEYwMDA1OEE5MDAwMTc1MDc3RAorOjEwMUVDMDAwRkYwNkM2MzNFOTA4MDBGRjA2NzgzNEZGMDZDODMzRTU4RAorOjEwMUVEMDAwODIyNUZERkZFNzgyRTg2RTA1QkExMDAxRUQ4MDNFRTgzRAorOjEwMUVFMDAwRkYwMDc0MEE4MDNFRThGRjA0NzQwM0U5MUQwMEM2MDY4MworOjEwMUVGMDAwRThGRjAxQkEwQzAxQjgwODA4RUZFREU5MEQwMEM2MDZDRAorOjEwMUYwMDAwRThGRjAzQkEwQzAxQjgwODA4RUZFREMzQTkwMTAwNzQ5QgorOjEwMUYxMDAwMUNFODJDMDA4MzNFRTAzQTAwNzQwRjA2OEUwNjM4MzQyRAorOjEwMUYyMDAwRThDOTA0QzcwNkUwM0EwMDAwMDdFOTVEMDA4QkQwOEVERgorOjEwMUYzMDAwMDYzODM0MjZBMzBDMDBFODA2MDA2ODY5MURFOTRBMDA0QgorOjEwMUY0MDAwQTkwMDA0NzQwQUI4MDAwNEZGMDZEODMzRTkxNzAwQTlGMQorOjEwMUY1MDAwMDAwMTc0MEFGRjA2MzkzN0I4MDAwMUU5MDgwMEE5MTAyQQorOjEwMUY2MDAwMDBCODEwMDA3NDFEMDkwNjY2Mzc4Q0MwOEUwNjMwMzQyOAorOjEwMUY3MDAwMjZGNzA2MEEwMDAwMDE3NDA3MjY4MTBFMDgwMDAwMDFGQQorOjEwMUY4MDAwOEVDMEMzRkYwNkMyMzNFOUY4RkZFNTAwMEQxODAwRTc3NQorOjEwMUY5MDAwMDBFNTAyMEQxMTAwRTcwMkMzNThFOTQzRkRFNTA4MEQxNQorOjEwMUZBMDAwMDAwNDI1RkYwNEU3MDhFOUUwRkZFNTBFQTkwMDA4NzUzNQorOjEwMUZCMDAwMDFDM0U5RjVGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMUZDMDAwNTA1MTU2NTc1MjA2MUUzM0MwOEVEOEU3NUFGRjA2QjhGNgorOjEwMUZEMDAwMzNFNTQ4MDY1MzU3RkYxNjRFMzc1RjVCODMzRTgwMDE1QgorOjEwMUZFMDAwRkY3NDU4OEUwNjgwMDEyNkZGMEUwODAwNzU0RDI2QTE0RAorOjEwMUZGMDAwMDAwMEEzODAwMTI2QzcwNjAwMDBGRkZGOENDMDI2OEVDQworOjEwMjAwMDAwMDYwMjAwMjY4MTBFMDgwMDgwMDA4QkQwMjY4NzA2MUE2MworOjEwMjAxMDAwMDAyNjgzM0UxODAwRkY3NDBBOEVDMDI2ODkxNjAwMDAzMQorOjEwMjAyMDAwRTkwNTAwMjY4OTE2MTgwMDgzM0U4MDAxRkY3NDBDOEU5NgorOjEwMjAzMDAwMDY4MDAxMjY4MzNFMDgwMDAwNzRCMzA3RTkzRUY3RTVGOQorOjEwMjA0MDAwNEM5MEU1MDJBOTAwMjA3NDBEMjVGRkRGMEQwMTAwRTc4QgorOjEwMjA1MDAwMDIwRDAwMjBFNzAyRTUwQThCRDhBM0Y0MzMyNUMzNTcwRAorOjEwMjA2MDAwMEQwMDEwRTcwQUY3MDY5QjM2MDA4MDc0MzdGN0MzMDBBRgorOjEwMjA3MDAwODA3NDA2RjdDMzAwMDg3NDVEODEyNkMyMzQ3RkZGQzdGMQorOjEwMjA4MDAwMDYzNTM3MDUwMEI4ODAwM0NEMzk4MTI2OUIzNkZGN0ZBMgorOjEwMjA5MDAwQzcwNjBGMzcwNDAwRjcwNjlCMzY0MDAwNzUwNkM3MDZEMworOjEwMjBBMDAwMEYzNzAzMDBGNzA2OUIzNjAwMjA3NDJBRjdDMzAwMDg5OQorOjEwMjBCMDAwNzQyNDgwM0U5RDM2MDY3QzFERkYwNjk0MzQ4MzBFNjY5NAorOjEwMjBDMDAwMzcyMDhFMDYzMDM0MjZGNzA2MEEwMDAwMDE3NDA3MjZGMgorOjEwMjBEMDAwODEwRTA4MDAwMDAxRjdDMzAwMjA3NTNCRjcwNjlBMzcxMAorOjEwMjBFMDAwODAwMDc0MEJGRjA2ODkzNzMzQzBFNzBFRTkwNDAwRkY1OAorOjEwMjBGMDAwMDYzQjM3RjcwNjlCMzYwMDIwNzQxQzgwMjY5RTM2RkY3MQorOjEwMjEwMDAwNzUxNThFMDYzMDM0MjZGNzA2MEEwMDAwMDg3NDA3MjY3NworOjEwMjExMDAwODEwRTA4MDAwMDA4QzNDMzAwMDAwMDAwMDAwMDAwMDA5QQorOjEwMjEyMDAwMDIyMzAyMjMwMjIzMDIyMzAzMjNERDIyMDIyM0ZEMjFCMworOjEwMjEzMDAwMDIyM0E0MjRGMzI0MDIyMzhEMjI3QTIzMDIyMzk3MjQ0QQorOjEwMjE0MDAwMUIyNDc1MjQwMjIzMDIyMzhFMjVGQjhFMDY3RTAxRkJCMQorOjEwMjE1MDAwMjY4MzNFMDAwMEZGNzRGMjI2OEUwNjAwMDBGQTI2OEJDRQorOjEwMjE2MDAwMUUwODAwMjYyMzFFMEEwMDc0RTU4Q0MwOEVEMDI2OEIyNAorOjEwMjE3MDAwMjYwMjAwOEMxNkYyMzMyMkZGNzU2QTI2QTExQzAwOEEwMworOjEwMjE4MDAwRTM4QURDMjJEODc1MEREMEU4MjRGODBBQzA3NUYyQjBENQorOjEwMjE5MDAwODBFOUVERkZEMEU4MjRGODBBQzA3NTAyQjA4MDMyRTQ4RgorOjEwMjFBMDAwMjZBMzFDMDBGN0MzMDgwMDc1NDcyRThBOUZDNTI1MkU1RAorOjEwMjFCMDAwOEJCRkM1MjY4MEMzMTAyNjhFMUQyNjhDMUUwNjAwOEI2NQorOjEwMjFDMDAwMTYwMDAwQzcwNjAwMDBGRkZGMjY4OTE1ODNGQUZGNzU3OQorOjEwMjFEMDAwMEEyRThCOTdDRDI2MjYyMTE2MDgwMDMzQzA4RUQ4MjZDRQorOjEwMjFFMDAwODkxRTA0MDBDMzhBREZCNzAwMkU4QTlGQzUyNUU5RTA1NworOjEwMjFGMDAwRkYyNjgzMjYwODAwRjc4M0MzMTBFOURFRkY2MDA2MUU3MgorOjEwMjIwMDAwNjg4NzI1NkEwMDFGOEUwNkYyMzM4QjBFMzQzNDM5MEUzMAorOjEwMjIxMDAwRjIzMzc0MEUyNjgxMEUwQTAwMDAwMjI2ODEwRTA4MDA5OQorOjEwMjIyMDAwMDAwMjI2ODkyNjAyMDBBM0YyMzM4RUQwOEQyNjgwMDA3QworOjEwMjIzMDAwMzY4OTI2MDIwMDM2ODkxRTIwMDAzNkM3MDYwODAwMDBBRgorOjEwMjI0MDAwMDBCOTA0MDBCRTAwMDAyRThCQkNDNTI2MzZDNzA1RkZCMgorOjEwMjI1MDAwRkYzNkM3NDUwMkZGRkY4M0M2MDJFMkVCOEUwNjdFMDExMgorOjEwMjI2MDAwMzY4QjBFMjIwMDhDQzAyNjgzM0UwMDAwRkYyNjhFMDY5MQorOjEwMjI3MDAwMDAwMDc0MDcyNjNCMEUyMjAwN0RFQTM2OEMwNjAwMDAyMworOjEwMjI4MDAwOEVDMDI2OEMxNjAwMDBGQjM2RkYyRTFFMDAwNjFFNjgzMAorOjEwMjI5MDAwOEIyNTZBMDAxRjI2MDkzNjA4MDBGN0M2MDBGRjc0MDE2NworOjEwMjJBMDAwQzM1NjUyMkU4QkI0QzUyNTgxRTZGRjAwMkU4QkI0QzVENAorOjEwMjJCMDAwMjY4Q0MyOEVDMDI2QzcwNjAwMDBGRkZGOEVDMjI2ODM3MgorOjEwMjJDMDAwM0NGRjc0MEY4QkQwMjY4NzU0MDI4RUMyMjZBMzAwMDBEOQorOjEwMjJEMDAwRTkwNzAwMjY4OTQ0MDIyNjg5MDQ1QTVFQzMwNjFFNjg1RgorOjEwMjJFMDAwOEIyNTZBMDAxRjhFMDZGMjMzMjZBMzBBMDAyNjg5MjY1NAorOjEwMjJGMDAwMDIwMEExMzQzNDhFRDA4RDI2ODAwMDhDMTZGMjMzRTk5MgorOjEwMjMwMDAwNERGRUNGNTAxRTUyNTMzM0MwOEVEODI2ODMzRTA0MDA1QworOjEwMjMxMDAwRkYyNkM3MDYwNDAwMDAwMDc0MDNFOTFBMDA4MzNFRTZBNgorOjEwMjMyMDAwM0EwMjc2MTNGRjA2RDYzMzhDQzA4RTA2MzIzNEJFNDA5NgorOjEwMjMzMDAwMDA2ODNBMjNFOTVFRkZFODg0Rjg1QjVBMUY1OENGRTg0QgorOjEwMjM0MDAwRTEwMDI2QzYwNjE4MDAxMDI2OEExRTI5MDA4ODFFMUJEQQorOjEwMjM1MDAwMzcyNkM3MDYwQzAwRkY3RjI2QTEwRTAwRTc5QzI2QTFBQQorOjEwMjM2MDAwMDgwMEU3OUFFNTAwODBGQjA4NzQwOTBEMThBQ0U3MDA0NworOjEwMjM3MDAwMDcxRjU4Q0YwRDE4MDBFOUY0RkY1MDFFMDYzM0MwOEUxQQorOjEwMjM4MDAwRDg4MzNFQTEzNjAwNzVCNzI2OEIzNjA2MDAyRUZGOTQwMworOjEwMjM5MDAwREMyMzA3MUY1OENGRTg4QTAwRTUwMDBEMTgwMEU3MDA4RQorOjEwMjNBMDAwRTg0OTAwQzM1M0Y3MDZFRjM0MjAwMDc1MkRFNThDMjU2RQorOjEwMjNCMDAwMDA3MDhCRDhFNThDMjUwMDcwM0JDMzc0MDU4QkQ4RTk4MQorOjEwMjNDMDAwRjJGRjNEMDAzMDc1MTBFNTAyMjVFRkZGRTcwMkM3MDY3QQorOjEwMjNEMDAwRTAzQUZGRkZFOTAzMDBFODEyMDA1QkMzQTMyMzk2MjM2MgorOjEwMjNFMDAwQTQyM0E0MjM5NjIzQTQyMzk2MjM5NjIzMjZBMDI5MDA3RQorOjEwMjNGMDAwQTIxQjM3MjZDNzA2MEMwMEZGN0YyNkExMEUwMEU3OUMxNAorOjEwMjQwMDAwMjZBMTA4MDBFNzlBRTUwMDI1RkY1MzI2OEIzNjA2MDAzMworOjEwMjQxMDAwODNFNjBFMkUwQjg0QUQyNUU3MDBDMzA2MUU2ODhCMjVEMAorOjEwMjQyMDAwNkEwMDFGODMwRUVGMzQyMDgzMEU5QjM2MDhFNTAwMjVEQgorOjEwMjQzMDAwRUZGRjBEMDgwMEU3MDBFNTAwQTkxMDAwNzUwMUMzRTVGNgorOjEwMjQ0MDAwMDBBOTEwMDA3NUY5QzM1MDUzNTE1NjA2MUUzM0MwOEVCMworOjEwMjQ1MDAwRDhCODA1MDBFNzg0RTUwODBEMDAwNDI1RkYwNEU3MDg2NworOjEwMjQ2MDAwRTUwMDBEMTgwMEU3MDBFNTAyMEQxMTAwRTcwMjFGMDc2NworOjEwMjQ3MDAwNUU1OTVCNThDMzUwMUUzM0MwOEVEOEM3MDZFRjM0MDA3OAorOjEwMjQ4MDAwMDA4MzI2OUIzNkY3RTUwMDBEMTgwMEU3MDBFNTAyMERGNgorOjEwMjQ5MDAwMTEwMEU3MDIxRjU4Q0Y2MDA2MUU2ODg3MjU2QTAwMUZEQgorOjEwMjRBMDAwRTgxNkY1QzMwNjFFNjg4QjI1NkEwMDFGOEVDMDI2ODNCQQorOjEwMjRCMDAwM0UwQTAwMDA3NDAzRTg0MzAwMjZDNzA2MEEwMEZGRkYzNworOjEwMjRDMDAwMjY4QjE2MDYwMDhFMUU4RTAxOENEODhCQ0E4MzNFMDA4QQorOjEwMjREMDAwMDBGRjhFMUUwMDAwNzQwQTJCMTYwODAwNzNFQjI5MEVGNQorOjEwMjRFMDAwMDgwMDI2ODkwRTA4MDAyNjhDMUUwMDAwOEVEODhDMDY1NworOjEwMjRGMDAwMDAwMEMzNjAwNjFFNjg4NzI1NkEwMDFGOEVDMDhCQzg1NworOjEwMjUwMDAwOEUxRThFMDEyNkM3MDYwQTAwMDAwMDhDRDg4MzNFMDA2RQorOjEwMjUxMDAwMDBGRjc0MjUzQjBFMDAwMDhFMUUwMDAwNzVFRDhFRDg2NgorOjEwMjUyMDAwMjZBMTAwMDBBMzAwMDAzREZGRkY3NDU2OEVEODI2QTEwRgorOjEwMjUzMDAwMDgwMDAxMDYwODAwRTk0OTAwMjY4RTFFMDIwMEJFMThBOAorOjEwMjU0MDAwMDA4MzNDRkY3NDNDMzkwQzc0MTk4RTFDQkUwMDAwODM2MAorOjEwMjU1MDAwM0UwMDAwRkY3NDJDMzkwRTAwMDA3NDA3OEUxRTAwMDAzMAorOjEwMjU2MDAwRTlFQ0ZGMjZBMTAwMDA4OTA0MzNDOThFRDkzREZGRkZBNQorOjEwMjU3MDAwNzUxMDgzRkUxODc1MEIyNjhFMUUwMjAwODEyNjA4MDAzQQorOjEwMjU4MDAwN0ZGRjMzQzA4RUQ4QzMxRjA3NjFDRjFGMDdDRjYwMDYwMAorOjEwMjU5MDAwMUU2ODg3MjU2QTAwMUZFNTA2MjUxRTAwM0QxRTAwNzU4MgorOjEwMjVBMDAwRjZCOTA4MDBFNTU4RTc1QTIzQzBFMEY4QzMwMDAwMDA3OAorOjEwMjVCMDAwMDAwMDAwMDAwMDAwQUMwMDAwMDBBODAwOEMwMjA0MDAzNQorOjEwMjVDMDAwMDAwODEwMjAwMEZGMEUwQzBDMEEwQTBBMEEwODA4MDg2RQorOjEwMjVEMDAwMDgwODA4MDgwODA2MDYwNjA2MDYwNjA2MDYwNjA2MDY5MQorOjEwMjVFMDAwMDYwNjA2MDYwNjA0MDQwNDA0MDQwNDA0MDQwNDA0MDRBMQorOjEwMjVGMDAwMDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQ5QgorOjEwMjYwMDAwMDQwNDA0MDQwNDAyMDIwMjAyMDIwMjAyMDIwMjAyMDJBMAorOjEwMjYxMDAwMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDI5QQorOjEwMjYyMDAwMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDI4QQorOjEwMjYzMDAwMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDIwMjAyMDI3QQorOjEwMjY0MDAwMDIwMjAyMDIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwMjY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwMjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwMjY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwMjY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwMjY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwMjZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwMjZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwMjZDMDAwMDAwMDAwMDAwMDE4MDAxNDAwMTAwMDBDMDBGRjdGRkY0NQorOjEwMjZEMDAwQkZGRkRGRkZFRkZGRjdGRkZCRkZGREZGRkU3RkZGQkY0OQorOjEwMjZFMDAwRkZERkZGRUZGRkY3RkZGQkZGRkRGRkZFRkYwMDAwMDAzNgorOjEwMjZGMDAwODAzRUUyMzQwMTc2MDNFOUE1MDBCODAwMDBFNzRFQjk1OAorOjEwMjcwMDAwMjgwMEUyRkVDNjA2NDUzNzAyQkYzRjI4MkU4QjQ1MDg0QgorOjEwMjcxMDAwRTc0RUI5MjgwMEUyRkUyRThCMURDNzA2QjMzNjQwMTFFNgorOjEwMjcyMDAwQzcwNkIxMzYyNzAwQzcwNjQ2MzcwMjAwQzcwNjQ4MzczNgorOjEwMjczMDAwNjQwMEY3MDZCNTM2MDIwMDc1MUMyRTBCNUQwMjgxMjY3QgorOjEwMjc0MDAwQjMzNkZGRkVDNzA2QjEzNjlDMDBDNzA2NDYzNzA4MDAwMQorOjEwMjc1MDAwQzcwNjQ4Mzc5MDAxODkxRUI3MzY4OTFFRkUzM0JFMjA1MgorOjEwMjc2MDAwMDA4QkMzRTc0RUI5MjgwMEUyRkUyRThCNDUwNEU3NEVFRQorOjEwMjc3MDAwQjkyODAwRTJGRUU1NEU4QkNCMkUyMzQ1MDYyRTIzNERENQorOjEwMjc4MDAwMDYzQUMxNzQzNjRFNzVEOTgwM0U0NTM3MDA3NDBCQzY4MworOjEwMjc5MDAwMDY0NTM3MDBCRjJGMjhFOTcyRkZDNjA2NDUzNzAxRjcwNworOjEwMjdBMDAwMDZCNTM2MDIwMDc0MTRFNUNFMjVGREZGRTdDRUU4NDNGQQorOjEwMjdCMDAwMDBFNUNFMEQwMjAwRTdDRUU4MzkwMDgwM0VFMjM0MDFBQworOjEwMjdDMDAwNzYwMUMzQjhFQTA1RTc4Q0ZBRTgxMkY0RkI4RDA2RDA2RgorOjEwMjdEMDAwMzk4QkQ4QzFFODA0QTMzODM0OEVDMEExMzAzNDI2QTM4NQorOjEwMjdFMDAwMDIwMDI2QzcwNjAwMDBGRkZGODNDMzE4RDFFQjI2ODkyRAorOjEwMjdGMDAwMUUwODAwQzNFNTAyMEQwMDQwRTcwMkU1MDAwRDA0MDBERAorOjEwMjgwMDAwRTcwMEI4MDAwMEU3MEFFNTBBQTkwMDgwNzUxNEU1MDhBQQorOjEwMjgxMDAwMEQwMDEwRTcwOEU1MEEwRDAwMDhCOTA1MDBFNzBBRTIxNworOjEwMjgyMDAwRkNDM0U1MDgwRDAwMTBCOTA1MDBFNzA4RTJGQ0MzMDQ4RAorOjEwMjgzMDAwMEMyMDAwMDEwQzdFRkYwMDBDMDIwMDEwMDA0MDAwMEM3OAorOjEwMjg0MDAwQzYwMTAwMDBDMEY3RkYwMEMwMDIwMDEwMDA0MDAwMDBGOQorOjEwMjg1MDAwMzNDMDhFRDg4RDNFNzI0OThEMzZCMDM3QjkxNDAwOEI5NworOjEwMjg2MDAwMUUzMDM0ODk1QzAyMkU4QjQ1MDI4OTQ0MDYyRThCMDU2RQorOjEwMjg3MDAwODk0NDA0ODNDNzA0ODNDNjEwRTJFOEM2MDY5RTM2MEU2OAorOjEwMjg4MDAwRThGRDI2Njg4MzI4QTFBQTAyQ0QzNTgzM0VBMTM2MDA0MworOjEwMjg5MDAwNzQwM0U5M0IyNzMzRkY4RTA2QTYwMjhCMzZBNDAyMkU3MworOjEwMjhBMDAwRkZBNDJFMzA4MzBFOTkzNjA0QzcwNjM3MzcwMTAwQzZDMQorOjEwMjhCMDAwMDZDQTM0MDFFOTdEMTk4MDNFQTAzNjA4NzRFNjgwMjZGOAorOjEwMjhDMDAwOUUzNkZGNzUxQUY3MDY5QjM2MDAyMDc0MTJGNzA2OUI5QQorOjEwMjhEMDAwMzYwMzAwNzUwQTgzMEU2NjM3MTBDNjA2QTAzNjA4RTk2RgorOjEwMjhFMDAwRkIwMTgwM0U5RTM2MDI3NUNFQzYwNkEwMzYwNkU5RUM5OAorOjEwMjhGMDAwMDFDM0U5RTgwMTI2QzcwNjBBMDAwMDAwMjZGRjI2MDRGNgorOjEwMjkwMDAwMDBBMUQxMzYyNjM5MDYxQTAwNzUyMkExRDMzNjI2MzkwMAorOjEwMjkxMDAwMDYxQzAwNzUxOEExRDUzNjI2MzkwNjFFMDA3NTBFMjYzMAorOjEwMjkyMDAwRjcwNjBDMDA0MDAwNzQwNTgzMEU2NjM3NDA4MTBFQUYzOQorOjEwMjkzMDAwMzYwMDEwQTFBRjM2RTcwNjgwM0U5RDM2MDI3NTA2Q0QwMworOjEwMjk0MDAwMzRFOUEyMUFDM0Y3MDY5QjM2MTAwMDc1NTQyNkY2MDYyMgorOjEwMjk1MDAwMEEwMEZGNzU0QzI2QTAxOTAwMjRDMDNDNDA3NTExODA2OAorOjEwMjk2MDAwM0U5NTM2MDA3NDNCMjZDNzA2MDQwMEZGRkZFOTMxMDBBMAorOjEwMjk3MDAwRThGMTA0RjcwNjlCMzYwMzAwNzQyRjhCRDhCODdEMDM2QgorOjEwMjk4MDAwQ0QzQThCQzNDNjA2QTAzNjA2RjcwNjlCMzYwMjAwNzUwNQorOjEwMjk5MDAwMDVDNjA2QTAzNjA0ODEwRTlCMzY4MDAwODMyNjlCMzYzMgorOjEwMjlBMDAwRkNFOTIzMDFFODg3MURFOTMzMDE1MDI2QTEwQzAwMjUyRAorOjEwMjlCMDAwMDcwMDNEMDcwMDc1MDNFOTg0MDAzRDA1MDA3NTAzRTk0NAorOjEwMjlDMDAwN0MwMDgzM0VFODNBMDQ3NDc1ODMzRUU4M0EwMjc0NkVGNAorOjEwMjlEMDAwRjcwNkU2MzQxODgwNzUwM0U5NkEwMEY3MDZFNjM0MDA2NgorOjEwMjlFMDAwODA3NDM1MjY4MDNFMjkwMDAyNzUyRDUxNTY1NzhEMzY0QworOjEwMjlGMDAwM0UzNDhEM0UyMDAwQjkwNjAwRjNBNjVGNUU1OTc0NDU1MworOjEwMkEwMDAwMjZBMTIwMDBBMzNFMzQyNkExMjIwMEEzNDAzNDI2QTEwMworOjEwMkExMDAwMjQwMEEzNDIzNEU5MjYwMEY3MDZFNjM0MDgwMDc0MEJDQworOjEwMkEyMDAwMjY4MDNFMTkwMDAwNzQwM0U5MTMwMEY3MDZFNjM0MTAwRgorOjEwMkEzMDAwMDA3NDEyMjZBMDI4MDBDMEU4MDQyMkMwNzQwNzI2QzcyQworOjEwMkE0MDAwMDYwNDAwRkZGRjU4MjNDMDc0MDNFOTU3RkY4MTI2OUI0QgorOjEwMkE1MDAwMzZGRkZFODNGRTA2N0YyNDI2QTEyMDAwM0IwNkQxMzZFQQorOjEwMkE2MDAwNzUxQTI2QTEyMjAwM0IwNkQzMzY3NTEwMjZBMTI0MDAzNAorOjEwMkE3MDAwM0IwNkQ1MzY3NTA2ODEwRTlCMzYwMDAxMjZBMTIwMDA0NworOjEwMkE4MDAwMjU3RkZGQTNCODM0MjZBMTIyMDBBM0JBMzQyNkExMjRBRgorOjEwMkE5MDAwMDBBM0JDMzQ4QkM2ODZDNEEzQzAzNEQxRTY4MEZDMDkzNQorOjEwMkFBMDAwNzQwM0U4QUExQzhCQzYyRUZGQTQzMDQ5MjZBMTBDMDA5MworOjEwMkFCMDAwM0RGRjdGNzQwRjI2RkYyNjA0MDA4RTA2MzgzNEU4MzY2QgorOjEwMkFDMDAwMDZDRDUwQzNFOTE2MDBDRDM0RTkxMTAwQ0QzNDg5MzY2NgorOjEwMkFEMDAwM0QzN0ExOUQzNkEzM0YzN0M2MDZBMDM2MENFODhFMDBEMQorOjEwMkFFMDAwQTE5RjM2MjJFNDc1MzJGNzA2NEMzNzAxMDA3NTJBRjZBRAorOjEwMkFGMDAwMDY5RDM2ODA3NDA3ODgyNjlFMzZFOTMxMDAzQTA2OUQ4OQorOjEwMkIwMDAwMzZBMzlEMzY3NDI4OEJGMDJFRkZBNDBEMkI0NDI5RUU5RQorOjEwMkIxMDAwNDIxOTQ0Q0Q0NDJGNDU1QTQ1M0EyNjlFMzY3NTAxQzM4NQorOjEwMkIyMDAwMzJDMDg2QzQ4QkYwQTI5RTM2MkVGRkE0MjA0OThCMkU4NQorOjEwMkIzMDAwOTkzNjIzRUQ3NTAxQzNCRjAxMDBCRTAwMDA4NUZENzUwOAorOjEwMkI0MDAwMUE0NkQxRTdFOUY2RkYyQTAwMjkwMDI4MDAyNzAwMjVDOAorOjEwMkI1MDAwMDAwNTAwMDcwMDI2MDAwNjAwMjAwMEY3RDcyMTNFOTk1NworOjEwMkI2MDAwMzZEMUU2MkU4QkI0NDcyQkU5NEZGRkU5NTZGRjgwMjY3RQorOjEwMkI3MDAwOUUzNkZGNzUxN0Y3MDY0QzM3MDEwMDc1MEZGNjA2OUQ1OAorOjEwMkI4MDAwMzY4MDc0MDhGNzA2NjYzN0ZGRkY3NTA3QzcwNjY2Mzc5NQorOjEwMkI5MDAwMDAwMEMzRjcwNjQxMzcwMTAwNzUwQkI4N0YwM0NEMzkzQworOjEwMkJBMDAwQzcwNjQxMzcwMTAwMzNGNkI4MDA0MDg1MDY2NjM3NzQyMgorOjEwMkJCMDAwMjE4MEJDNTQzN0ZGNzQwNEZFODQ1NDM3ODBCQzk2MzRBMworOjEwMkJDMDAwRkY3NDA0RkU4NDk2MzQzMTA2NjYzNzgzM0U2NjM3MDAxMAorOjEwMkJEMDAwNzQwNTQ2RDFFODczRDRDM0ExRjQzM0E5MDA4ODc0MEJGQgorOjEwMkJFMDAwQTkwMDEwNzUwOThCMUU0MzM3RkZFM0U5RDcwMEM3MDYxQworOjEwMkJGMDAwMzUzNzA1MDBDNzA2NDMzNzFFMkNGNzA2RjQzMzAwMDhBNworOjEwMkMwMDAwNzQwNkM3MDY0MzM3MTAyQ0I4ODAwM0NEMzlFOUNERkVEMgorOjEwMkMxMDAwQTkwMDA4NzREOUZGMEUzNTM3NzVFREU5NjYwMEE5MDBFMworOjEwMkMyMDAwMDg3NUNCRkYwRTM1Mzc3NURGODEwRUMyMzRDMDAwRjY1NAorOjEwMkMzMDAwMDY5RDM2ODA3NDQ4ODEwRTlCMzYwMDgwRjcwNjlCMzZEMQorOjEwMkM0MDAwMDEwMDc0MUVCODdEMDNDRDNBODEwRTlCMzY4MDAwODM0RgorOjEwMkM1MDAwMjY5QjM2RkVDNzA2MEYzNzAyMDBDNjA2QTAzNjA0RTlEQgorOjEwMkM2MDAwN0JGRTgwM0VBMDM2MDQ3NTA3ODMzRTBGMzcwMTc1MDU1NQorOjEwMkM3MDAwQzYwNkEwMzYwNkM3MDYwRjM3MDIwMEU5NUZGRUJFMDI5MQorOjEwMkM4MDAwMDBFOTRBRkU4MDI2OUUzNkZGNzUzQUY2MDY5RDM2ODA5QworOjEwMkM5MDAwNzQyREY3MDY5QjM2MDAyMDc1MkJDNjA2QTAzNjA2RkY1RQorOjEwMkNBMDAwMDY5NDM0ODMwRTY2MzcyMDhFMDYzMDM0MjZGNzA2MEFFMworOjEwMkNCMDAwMDAwMDAxNzQwNzI2ODEwRTA4MDAwMDAxRTkwNjAwQkUyRAorOjEwMkNDMDAwMDQwMEU5MDlGRTgxMEVBRjM2MDAwOEExQUYzNkU3MDYyMQorOjEwMkNEMDAwRTUwQUE5MDA4MDc0MEU4MTI2QUYzNkZGRjdBMUFGMzY1MgorOjEwMkNFMDAwRTcwNkU5MDlGRkU5RjVGREM3MDY0MTM3MDAwMDgzMEU1NQorOjEwMkNGMDAwOTkzNjAyRTlFN0ZEODAyNjlFMzZGRjc1MURGNzA2OUI5MworOjEwMkQwMDAwMzYwMDQwNzUwNTgzMEU5OTM2MDg4MzBFOTkzNjIwODE2QQorOjEwMkQxMDAwMjY5QjM2RkZCRkI4ODUwM0NEMzlFOUMwRkQ4MDNFOUVCNgorOjEwMkQyMDAwMzYwNjc0MDc4MDNFOUUzNjBBNzUzNEY2MDY5RDM2ODA1OAorOjEwMkQzMDAwNzUwNkJFMDcwMEU5OTZGREM2MDZBMDM2MDQ4MzNFMEY2MQorOjEwMkQ0MDAwMzcwMjc0MUJDNzA2MEYzNzA0MDA4MDNFOUUzNjA2NzU5NworOjEwMkQ1MDAwMEVGNzA2OUIzNjQwMDA3NTA2QzcwNjBGMzcwMzAwRTlERAorOjEwMkQ2MDAwN0JGRDgwM0U5RDM2MDQ3NTEyODEwRUMyMzQwMDQwRkYwQgorOjEwMkQ3MDAwMDY5MjM0QzYwNkEwMzYwNkU5NjJGREJFMDUwMEU5NEQ5RQorOjEwMkQ4MDAwRkRGNjA2OUQzNjgwNzUxOTgzMEVDMjM0MDRCRTA2MDAxQQorOjEwMkQ5MDAwRTkzQkZEODAyNjlFMzZGRjc1QzVGRjA2MzEzN0U5MDAwOQorOjEwMkRBMDAwMDA4MzI2QzIzNEJGQzYwNkEwMzYwNkU5MkZGREU1MEExOQorOjEwMkRCMDAwNTAyNUMzQkZFNzBBNTg4MDI2OUUzNkZGNzUwREE5MDAyRgorOjEwMkRDMDAwNDA3NTA4QzYwNkEwMzYwNkU5MTJGREI4ODMwM0NEMzk2MgorOjEwMkREMDAwQzNCODdDMDNDRDM5RjcwNkY0MzMwMDEwNzUwOUM3MDY3NAorOjEwMkRFMDAwMzMzNzAyMDBFOUY2RkNGRjBFMzMzNzc0MDNFOUVERkNEQworOjEwMkRGMDAwRkYwNjhFMzRFOEY3MTk4MzBFQzIzNDA4QkUwMzAwRTlEQgorOjEwMkUwMDAwQ0NGQzAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwNDA0MDVFOQorOjEwMkUxMDAwMDQwNDA0MDAwMzAwMDMwMzAwMDAwMDAwMDAwMDAwMDA5RAorOjEwMkUyMDAwMDAwNDAwMDgwODA1MDgwODA4MDAwMzAwMDMwMzAwMDA2OAorOjEwMkUzMDAwMDIwNDA0MDQwNDAwMDAwODAwMDAwQTE0MDAwMDFBMDA0MAorOjEwMkU0MDAwMUMwMDFFMjAwMDAwMDQ0MTA2MEIwOEMyRkZFNzA0MDMxQgorOjEwMkU1MDAwMDYwNDA0MDUwNDA2MDQ4NzA0MDMwNjA0MDQ4NTRFQTI0MAorOjEwMkU2MDAwMDRDRjA0Q0RDNzA2QTIzNzAwMDBDNzA2QTYzNzAwMDA2RQorOjEwMkU3MDAwMjZBMTIwMDAyNTdGRkZBM0Y1MzYyNkExMjIwMEEzRjc3NworOjEwMkU4MDAwMzYyNkExMjQwMEEzRjkzNkU4M0IxOThCRjAyNjhCMEVEOQorOjEwMkU5MDAwMEUwMDJCQzg4M0U5MEVCODAxODA4M0Y5MDQ3QzUxMjYwQgorOjEwMkVBMDAwOEE1NDI4ODgxNjFDMzc0MDI2OEI2QzI2ODZDRDNCQ0Q0RAorOjEwMkVCMDAwODZDRDg5MEVBNDM3NzUzODQwMzJGRjI2OEE1QzI5ODA3QQorOjEwMkVDMDAwRkIxNTc3MjU4MEZCMEE3NDIwODBGQjAxNzQxQkI4MDQ3NgorOjEwMkVEMDAwODAyRTNBOTcwMjJFNzQwNzJFM0E5NzE4MkU3NTExMzNDQQorOjEwMkVFMDAwQzA4MEZCMDk3NTRGOEJGM0MzMjZDNzA2MDQwMEZGRkZBNAorOjEwMkVGMDAwNTA1MkExQTQzNzg2QzQyNjNCMDYyNjAwN0MzMjI2ODE4OAorOjEwMkYwMDAwM0UyNjAwMDAwNDdFMjk4RDc0MkEyNjhCMTQyMkQyNzQ1QQorOjEwMkYxMDAwMUY4MEU2QkY4MEZFMDk3NTE3QzcwNkEyMzcwMTAwODAzMworOjEwMkYyMDAwRkEwNDc1MEMyNjhCNDQwMkEzMDMzNzg2QzRBM0QwMzQ1RAorOjEwMkYzMDAwNUE1OEU5QjFGRkJENzIzNzJFOEE4NzJFMkUyMkMwNzRFRgorOjEwMkY0MDAwMTYwNTQ0MkU4QkY4MkU4QjA1M0U4OTQ2MDA4M0M1MDI1QworOjEwMkY1MDAwODNDNzAyMjJFNDdERUY4RDc0MkE4M0U5MDQ3NTAzRTlCNworOjEwMkY2MDAwQTEwMDI2OEIxNDIyRDI3NTAzRTk3QzAwQzcwNkE2Mzc4MAorOjEwMkY3MDAwMDEwMEJGNzIzNzhCMDU4M0M3MDI4MEU2QkY4MEU0M0Y0NAorOjEwMkY4MDAwODBGRTA5NzUyMjgwRkEwNDc1NUVDNzA2QTIzNzAxMDAyQgorOjEwMkY5MDAwMjY4QjQ0MDJBMzAzMzc4NkM0QTNEMDM0ODZDNEM3MDY1NQorOjEwMkZBMDAwQTYzNzAwMDBFOTQ3MDAzQkZEN0UxNTI2OEIwNEE4NDBBQworOjEwMkZCMDAwNzQwNkI4MDc4MEU5MzhGRjMyQzAyNjhCMDRFOTJFMDA3QQorOjEwMkZDMDAwM0FGNDc1QjFDNzQ1RkUwMDAwODBGRTIyNzUwRDNBRDA3NworOjEwMkZEMDAwNzcxNkM3MDZBNjM3MDAwMEU5MTMwMDNBRDA3NTA5Qzc2RgorOjEwMkZFMDAwMDZBNjM3MDAwMEU5MDYwMEI4MDU4MEU5MDJGRjMyRjZDMAorOjEwMkZGMDAwMDNGMjJCQ0FCODA1ODAyM0M5NzYwM0U5NjRGRjc0MDM4MgorOjEwMzAwMDAwRTlFREZFMzNDMEJGNzIzNzhCMTU0NzQ3M0JGRDdGMUI5MQorOjEwMzAxMDAwRjZDNjgwNzQxNkY3MDZBNjM3MDEwMDc0MDZCODA4ODA1NQorOjEwMzAyMDAwRTlDM0ZFRjZDNjQwNzRFMEI4MDc4MEU5QjhGRTdENDIwOQorOjEwMzAzMDAwQTM0NTQ0Mjk0NDI5QjcyOEUyMjhFRTJCRjIyOEY1Mjg5NQorOjEwMzA0MDAwMDEyOUFDMkE0NDI5NDQyOTQ0Mjk0NDI5NDQyOTAwMDA1RgorOjEwMzA1MDAwNzMzNjAwMDAwMzM2QzUzNTgzMzU0NTM1MDczNUQyMzQyMAorOjEwMzA2MDAwNDUzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwMzA3MDAwMDAwMEE2MzgwMDAwRTAzODAwMDAwMDAwMDAwMDAwMDA1QQorOjEwMzA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwMzA5MDAwRjIzMzAwMDBBNjMzNjAzM0ZEMzJCQzMyNzczMjNDMzI2QgorOjEwMzBBMDAwRkIzMTZBMzEwQTMxRTBFMDEwMTAxMEUwRTBFMEUwMDBBRQorOjEwMzBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMzBDMDAwMDAwMDAwMDAwMDAwRTAwMEUwRTBFMEUwRTBFMEUwRTAyMAorOjEwMzBEMDAwRTAzM0ZGMjZGNjA2MUEwMDgwNzQxQjI2ODAyNjFBMDBBRAorOjEwMzBFMDAwN0YyNjhCM0UyNjAwODNFNzFGNzQwQjI2ODAwRTIwMDA3MAorOjEwMzBGMDAwODAyNjAxM0UwRTAwQzM2MDJFOEI4NEE2MzAyNkEzMThDNgorOjEwMzEwMDAwMDBEMUU2MkVGRjk0NTAzMDYxQzMyNkM3MDYwNDAwQzRFOAorOjEwMzExMDAwMkEyNkM3MDYwRTAwMTYwMDI2QzcwNjA2MDAwNjAwMjY0OQorOjEwMzEyMDAwQzYwNjE5MDAwMEU4QkYwNUU4OTgwNTI2QzcwNjI2MDA3MAorOjEwMzEzMDAwMDAwODI2QzYwNjI4MDA0MDI2QzYwNjI5MDAyQUJGMkFGRgorOjEwMzE0MDAwMDAyNkM2MDUwNDI2QzY0NTAxMkFBMTkzMzczM0RCQTkwQworOjEwMzE1MDAwNDAwMDc1MDJCMzAxQTkwMDEwNzQwMkI3ODhBOTAwMDhFNQorOjEwMzE2MDAwNzQwMzgwQ0Y0NDI2ODk1RDAyQzM4MzBFQzIzNDIwMjZCNworOjEwMzE3MDAwQzcwNjA0MDA2QjJCMjZDNzA2MEUwMDMwMDAyNkM3MDZDNAorOjEwMzE4MDAwMDYwMDBBMDAyNkM3MDYwQTAwMDQwMDI2QzYwNjE5MDAyMworOjEwMzE5MDAwMDBFODY5MDVFODJDMDUyNkM3MDYyNjAwMDAyMjI2QzY5OQorOjEwMzFBMDAwMDYyODAwNjAyNkM2MDYyOTAwMjlCRjJBMDAyNkM2MDU3MworOjEwMzFCMDAwMDgyNkM2NDUwMTJEOEQ3RDAyQkU1NDM3QjkwMzAwRjNBNAorOjEwMzFDMDAwQTUyNkM2MDUwODI2QzY0NTAxMkU4RDdEMDJCRTVBMzdBNgorOjEwMzFEMDAwQjkwMzAwRjNBNUU4RDQwNUU4NjQwNUI5MDYwMEJFNTRCOAorOjEwMzFFMDAwMzc4RDJFMkMwMDI2OEI0NjAwMjkwNDgzQzYwMjgzQzUwQQorOjEwMzFGMDAwMDI4M0Y5MDQ3NTAyNDU0NUUyRUJDMzI2QzcwNjA0MDBDNQorOjEwMzIwMDAwQzQyQTI2QzcwNjBFMDAyNDAwMjZDNzA2MDYwMDA2MDBBQworOjEwMzIxMDAwMjZDNjA2MTkwMDAwRThFNDA0RThBNzA0MjZDNzA2MjYyNworOjEwMzIyMDAwMDAwMDE2MjZDNjA2MjgwMDYwMjZDNjA2MjkwMDI4QkYwQworOjEwMzIzMDAwMkEwMEU4NUIwNkU4NzQwNUU4MDQwNUMzMjZDNzA2MDQwRgorOjEwMzI0MDAwMDBDNDJBMjZDNzA2MEUwMDFBMDAyNkM3MDYwNjAwMDY3NgorOjEwMzI1MDAwMDAyNkM2MDYxOTAwMDBFOEEzMDRFODY2MDQyNkM3MDY4RgorOjEwMzI2MDAwMjYwMDAwMEMyNkM2MDYyODAwNjAyNkM2MDYyOTAwMjc3MAorOjEwMzI3MDAwQkYyQTAwRTgyMTA1QzMyNkM3MDYwNDAwQzQyQTI2QzdDMgorOjEwMzI4MDAwMDYwRTAwMjAwMDI2QzcwNjA2MDAwQTAwMjZDNzA2MEEwQQorOjEwMzI5MDAwMDAwNDAwMjZDNjA2MTkwMDAwRTg0QjA0RTgyNDA0MjZCMgorOjEwMzJBMDAwQzcwNjI2MDAwMDEyMjZDNjA2MjgwMDQwMjZDNjA2MjlBNAorOjEwMzJCMDAwMDAyNkJGMkEwMEU4RjQwNEU4ODQwNEMzMjZDNzA2MDRGNQorOjEwMzJDMDAwMDBDNDJBMjZDNzA2MEUwMDM0MDAyNkM3MDYwNjAwMDZEQworOjEwMzJEMDAwMDAyNkM2MDYxOTAwMDBFODBEMDRFOEU2MDMyNkM3MDYyNgorOjEwMzJFMDAwMjYwMDAwMjYyNkM2MDYyODAwNDAyNkM2MDYyOTAwMjVGOAorOjEwMzJGMDAwQkYyQTAwRThCNjA0RTg0NjA0RThGQTA0QzMyNkM3MDY3NQorOjEwMzMwMDAwMDQwMEM0MkEyNkM3MDYwRTAwMzgwMEExQTIzNzUwMEJCRAorOjEwMzMxMDAwQzA3NTA3MjZDNzA2MEUwMDM0MDAyNkM3MDYwNjAwMDYzRAorOjEwMzMyMDAwMDAyNkM2MDYxOTAwMDBFODk5MDNFOEE0RkQyNkM3NDU1MworOjEwMzMzMDAwMjYwMDJBNTgwQkMwNzUwNjI2Qzc0NTI2MDAyNkExMUM2NAorOjEwMzM0MDAwMzdDMUUwMDQyNjg4NDUyODI2QzY0NTI5MjQ4M0M3MkE5NAorOjEwMzM1MDAwRTgyOTA0RThBMDA0RTgyMjA1RThGODAzRTgwOTA0QzMyMgorOjEwMzM2MDAwMjZDNzA2MDQwMEM0MkEyNkM3MDYwRTAwMzIwMDI2Qzc1OAorOjEwMzM3MDAwMDYwNjAwMDYwMDI2QzYwNjE5MDAwMEU4NDUwM0U4NTBDOAorOjEwMzM4MDAwRkQyNkM3NDUyNjAwMjRBMTFDMzdDMUUwMDQyNjg4NDUzOAorOjEwMzM5MDAwMjgyNkM2NDUyOTIzODNDNzJBRThFMDAzRTg2QzA0RTgwOQorOjEwMzNBMDAwOEEwNEU4OUMwNEMzMjZDNzA2MDQwMEM0MkEyNkM3MDY2QworOjEwMzNCMDAwMEUwMDM0MDAyNkM3MDYwNjAwMDYwMDI2QzYwNjE5MDBDMQorOjEwMzNDMDAwMDBFOEZGMDJFODBBRkQyNkM3NDUyNjAwMjZBMTFDMzdCMworOjEwMzNEMDAwQzFFMDA0MjY4ODQ1MjgyNkM2NDUyOTIyODNDNzJBRTg1NQorOjEwMzNFMDAwOUEwM0U4QzcwM0U4NTcwM0U4RjgwM0U4NzgwNEU4OEE5MworOjEwMzNGMDAwMDRDMzI2QzcwNjA0MDA3NDQ1MjZDNzA2MEUwMDNFMDAxNworOjEwMzQwMDAwMjZDNzA2MDYwMDA2MDAyNkM3MDYwQTAwMDQwMDI2QzZEMAorOjEwMzQxMDAwMDYxOTAwMDBFOEZDMDJFOEE5MDI4MzNFOEQzNzAzNzUxNworOjEwMzQyMDAwMDE5MDI2QzcwNjI2MDAwMDMwMjZDNjA2MjgwMDUwMjYzMgorOjEwMzQzMDAwQzYwNjI5MDAyMEJGMkEwMEU4RDAwM0U4MDEwM0U4QjU0QQorOjEwMzQ0MDAwMDNFODlGMDNDMzI2QzcwNjA0MDA2MTQzQjlGMDAwODM2NQorOjEwMzQ1MDAwRTkwMjI2ODkwRTBFMDAyNkM3MDYwNjAwMDIwMDI2QzZDRgorOjEwMzQ2MDAwMDYxOTAwMDAyNkM3MDYxQTAwMDAwMDI2QzcwNjFDMDAyMQorOjEwMzQ3MDAwMDAwMDI2QzcwNjFFMDAwMDAwRTg0NzAyODNFOTBFODYwQQorOjEwMzQ4MDAwQ0QyNjg5MEUyNjAwODZDRDI2QzYwNjI4MDAwMDI2QzYzMworOjEwMzQ5MDAwMDYyOTAwMDhCRjJBMDA4M0U5MDQyNjg5MEQyNkM2NDVBRgorOjEwMzRBMDAwMDEyNjhEN0QwMjgzRTkwMkJCMDEwMEI4MzAzMDRCNzVFNworOjEwMzRCMDAwMTdCQjBBMDA4QUM0MjY4ODA1QjAzMTgwQzQwMTgwRkM4RAorOjEwMzRDMDAwM0E3NTBBQjQ2MUU5MDUwMDI2ODgwNTA0MDE0NzQ5NzU4MworOjEwMzREMDAwRERDMzI2QzcwNjA0MDAwNDQ1MjZDNzA2MEUwMDEyMDBGOQorOjEwMzRFMDAwMjZDNzA2MDYwMDA2MDAyNkM2MDYxOTAwMDFFOEU1MDEwMworOjEwMzRGMDAwRThEMDAxMjZDNzA2MjYwMDAwMDQyNkM2MDYyODAwMDBEQworOjEwMzUwMDAwMjZDNjA2MjkwMDA3QzMyNkM3MDYwNDAwQzQyQTI2QzcwNAorOjEwMzUxMDAwMDYwRTAwMjAwMDI2QzcwNjA2MDAwNjAwMjZDNjA2MTk2RAorOjEwMzUyMDAwMDAwNkU4MDQwMkU4OUIwMTI2QzcwNjI2MDAwMDEyMjZEMgorOjEwMzUzMDAwQzYwNjI4MDAwMDI2QzYwNjI5MDAwNkJGMkEwMEU4NkIzQQorOjEwMzU0MDAwMDJFOEZCMDFDMzI2QzcwNjA0MDBDNDJBMjZDNzA2MEVFQworOjEwMzU1MDAwMDAyMDAwMjZDNzA2MDYwMDA2MDAyNkM2MDYxOTAwMDUzQworOjEwMzU2MDAwRThDNjAxRTg1RDAxMjZDNzA2MjYwMDAwMTIyNkM2MDY0OQorOjEwMzU3MDAwMjgwMDAwMjZDNjA2MjkwMDA1QkYyQTAwRTgyRDAyRTgxQgorOjEwMzU4MDAwQkQwMUMzRkYwNjgyMzQyNkM3MDYwNDAwM0Q0MTI2Qzc5RAorOjEwMzU5MDAwMDYwRTAwMjAwMDI2QzcwNjA2MDAwRTAwMjZDNjA2MTlFNQorOjEwMzVBMDAwMDAwNEU4ODQwMUU4MUIwMTI2QzcwNjI2MDAwMDEyMjY1NQorOjEwMzVCMDAwQzYwNjI4MDAwMDI2QzYwNjI5MDAwNEJGMkEwMEU4RUIzQworOjEwMzVDMDAwMDFFODdCMDFDMzI2QzcwNjA0MDA2NzQyMjZDNzA2MEUzMgorOjEwMzVEMDAwMDAyMDAwMjZDNzA2MDYwMDA4MDAyNkM2MDYxOTAwMDNCQworOjEwMzVFMDAwRTg0NjAxRThERDAwMjZDNzA2MjYwMDAwMTIyNkM2MDZDQQorOjEwMzVGMDAwMjgwMDAwMjZDNjA2MjkwMDAzQkYyQTAwRThBRDAxRTgxRQorOjEwMzYwMDAwM0QwMUMzRkYwNjg0MzQyNkM3MDYwNDAwNjc0MjI2Qzc2RgorOjEwMzYxMDAwMDYwRTAwMjQwMDI2QzcwNjA2MDAwODAwMjZDNjA2MTk2NgorOjEwMzYyMDAwMDAwMkU4MDQwMUU4OUIwMDI2QzcwNjI2MDAwMDE2MjZEMworOjEwMzYzMDAwQzYwNjI4MDAwMDI2QzYwNjI5MDAwMkJGMkEwMDI2QzZBNAorOjEwMzY0MDAwMDUwNDI2QzY0NTAxMDFBMTBGMzc4NkUwRjYwNjZGMzc0RgorOjEwMzY1MDAwMDE3NTBGMzkwNkNDMzQ3NDA5OEJEOEI4ODkwM0NEMzk3QworOjEwMzY2MDAwOEJDM0EzQ0MzNDI2ODk0NTAyOEQ3RDA0RTgzRDAxRTg1NworOjEwMzY3MDAwQ0QwMEMzMjZDNzA2MDQwMEM0MkEyNkM3MDYwRTAwMUNCOAorOjEwMzY4MDAwMDBBMUEyMzc1MDBCQzA3NTA3MjZDNzA2MEUwMDE4MDAxMAorOjEwMzY5MDAwMjZDNzA2MDYwMDA2MDAyNkM2MDYxOTAwMDBFODIzMDAxNQorOjEwMzZBMDAwRTgyRUZBMjZDNzQ1MjYwMDBFNTgwQkMwNzUwNjI2QzcxOQorOjEwMzZCMDAwNDUyNjAwMEEyNkM2NDUyOTAwODNDNzJBRThCRDAwRTgzQQorOjEwMzZDMDAwRkYwMEMzNTY1NzUxQjkwMzAwQkVEMTM2QkYyMDAwRjNFNworOjEwMzZEMDAwQTU1OTVGNUVDMzU2NTc1MUI5MDMwMEJFRDEzNkJGMUExNAorOjEwMzZFMDAwMDBGM0E1NTk1RjVFQzMyNkM3MDYxQTAwQzAwMDI2QzdBRgorOjEwMzZGMDAwMDYxQzAwMDAwMDI2QzcwNjFFMDAwMDEwQzMyNkM3MDZEMQorOjEwMzcwMDAwMUEwMEMwMDAyNkM3MDYxQzAwMDAwMDI2QzcwNjFFMDBCRgorOjEwMzcxMDAwMDAwOEMzMjZDNzA2MUEwMEMwMDAyNkM3MDYxQzAwMDAwMgorOjEwMzcyMDAwMDAyNkM3MDYxRTAwMDAwMkMzMjZDNzA2MUEwMEMwMDBGNgorOjEwMzczMDAwMjZDNzA2MUMwMEZGRkYyNkM3MDYxRTAwRkZGRkMzMjY4NAorOjEwMzc0MDAwQzYwNTA4MjZDNjQ1MDEwMjhEN0QwMkJFMDUzN0I5MDNCMAorOjEwMzc1MDAwMDBGM0E1QzMyNkM2MDUwNDI2QzY0NTAxMDZBMTBEMzdGQworOjEwMzc2MDAwMjY4OTQ1MDI4RDdEMDRDMzI2QzYwNTA0MjZDNjQ1MDE2QgorOjEwMzc3MDAwMDdBMTBCMzcyNjg5NDUwMjgzQzcwNEMzQTFBMjM3MEJEMworOjEwMzc4MDAwQzA3NDEzMjZDNjA1MDQyNkM2NDUwMTA5QTEwMzM3MjZDMQorOjEwMzc5MDAwODk0NTAyODNDNzA0QzMyNkM2MDUwODI2QzY0NTAxMDIxQgorOjEwMzdBMDAwOEQ3RDAyQkUwNTM3QjkwMzAwRjNBNUMzMjZDNjA1MDYwNQorOjEwMzdCMDAwMjZDNjQ1MDEwQjhEN0QwMkJFRUYzNkI5MDIwMEYzQTU4QQorOjEwMzdDMDAwQzMyNkM2MDUwNjI2QzY0NTAxMjBBMTY4MzcyNjg5NDVCOQorOjEwMzdEMDAwMDJBMTZBMzcyNjg4NjUwNUMxRTAwNDI2ODg0NTA0ODM2RQorOjEwMzdFMDAwQzcwNkMzMjZDNjA1MDQyNkM2NDUwMTIxMjZDNzQ1MDJDRAorOjEwMzdGMDAwMDAwMDgzQzcwNEMzMjZDNjA1MTQyNkM2NDUwMTIyOEREMgorOjEwMzgwMDAwN0QwMkJFMUYzN0I5MDkwMEYzQTVDMzI2QzYwNTBDMjZFNQorOjEwMzgxMDAwQzY0NTAxMjM4RDdEMDIxRTBFMUY4RDM2NDA1NEI5MDMwRgorOjEwMzgyMDAwMDBGM0E1MzNDMEI5MDIwMEYzQUIxRkMzMjZDNjA1MDhEOQorOjEwMzgzMDAwMjZDNjQ1MDEyODhEN0QwMkJFRDEzNkI5MDMwMEYzQTUwOQorOjEwMzg0MDAwQzMyNkM2MDUwODI2QzY0NTAxMjlBMUMyMzQ4NkUwMjYzRQorOjEwMzg1MDAwODk0NTAyQTE5QjM2MjY4OTQ1MDQyNjg4NDUwNjI2ODg4NworOjEwMzg2MDAwNDUwNzhEN0QwOEMzMjZDNjA1MDYyNkM2NDUwMTJCOEQ1NgorOjEwMzg3MDAwN0QwMkJFQkIzNkI5MDIwMEYzQTVDMzI2QzYwNTA2MjZFNworOjEwMzg4MDAwQzY0NTAxMkM4RDdEMDJCRUU1MzZCOTAyMDBGM0E1QzMwNQorOjEwMzg5MDAwMjZDNjA1MDQyNkM2NDUwMTMwQTEzNzM3ODZFMDI2ODlBRAorOjEwMzhBMDAwNDUwMjhEN0QwNEMzMjZDNzA2MEUwMDFFMDAyNkM3MDZFRQorOjEwMzhCMDAwMDYwMDAyMDAyNkM2MDYxOTAwMDBFODZDRkVFODAzRkVCQQorOjEwMzhDMDAwMjZDNzA2MjYwMDAwMTAyNkM2MDYyODAwMzAyNkM2MDY5MworOjEwMzhEMDAwMjkwMDExQkYyQTAwRTgzNTAwRTg0NTAwRTg1NTAwQzM3QgorOjEwMzhFMDAwMjZDNzA2MEUwMDEyMDAyNkM3MDYwNjAwMDIwMDI2QzZERQorOjEwMzhGMDAwMDYxOTAwMDBFODMyRkVFOEM5RkQyNkM3MDYyNjAwMDBDQQorOjEwMzkwMDAwMDQyNkM2MDYyODAwMzAyNkM2MDYyOTAwMTNDMzI2QzY4QworOjEwMzkxMDAwMDUwNDI2QzY0NTAxMEMyNkM3NDUwMjAwMDE4M0M3MDRERAorOjEwMzkyMDAwQzMyNkM2MDUwNDI2QzY0NTAxMEUyNkM3NDUwMjAwMDI2OQorOjEwMzkzMDAwODNDNzA0QzMyNkM2MDUwNDI2QzY0NTAxMjEyNkM3NDVGQworOjEwMzk0MDAwMDIwMDAwODNDNzA0QzMwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwMzk1MDAwQjMzOUM5Mzk4MzNBQjMzOUIzMzlCMzM5MUMzQTFDM0E0QworOjEwMzk2MDAwQTNCNjM0QTFFOTM2QTMxMTM3QTNEMjM0QTFFQjM2QTMxMQorOjEwMzk3MDAwMTMzN0EzRDQzNEExRUQzNkEzMTUzN0EzRDYzNEExMDE1MAorOjEwMzk4MDAwMzdBM0NFMzRBMUY3MzZBMzE3MzdBM0RDMzRBMUY5MzYxOQorOjEwMzk5MDAwQTMxOTM3QTNERTM0RjcwNjlCMzYwMjAwNzUwQzMzQzAzQgorOjEwMzlBMDAwQTA5RTM2OEJGMDJFRkZBNDUwMzlFOTBGMDFCRTA3MDAxMAorOjEwMzlCMDAwRTkxOUYxRjYwNjlEMzY4MDc0RjNDNjA2QTAzNjAyQzZGNAorOjEwMzlDMDAwMDY2RTM3MDhDNjA2NzAzNzAyQjg4ODAzQ0QzOUY2MDY4QQorOjEwMzlEMDAwNkYzNzAxNzU0QUExRDEzNjNBMDZFOTM2NzU0MTNBMjY2NAorOjEwMzlFMDAwRUEzNjc1M0JBMUQzMzYzQTA2RUIzNjc1MzIzQTI2RUMwOQorOjEwMzlGMDAwMzY3NTJDQTFENTM2M0EwNkVEMzY3NTIzM0EyNkVFMzZDNQorOjEwM0EwMDAwNzUxREM2MDY3MDM3MDJGRTBFNkUzNzc1MEZCODg4MDMzNworOjEwM0ExMDAwQ0QzQTgzMEU5QjM2MTJDNjA2QTAzNjBDRTlBOEYwQTE1QgorOjEwM0EyMDAwMDUzNzI2M0IwNjIwMDA3NTQwQTEwNzM3MjYzQjA2MjJCNgorOjEwM0EzMDAwMDA3NTM2QTEwOTM3MjYzQjA2MjQwMDc1MkNBMDlFMzY1QQorOjEwM0E0MDAwM0MwMjc1MDgyNkY2MDYxODAwMDg3NTQ3QzYwNjZFMzc0QworOjEwM0E1MDAwMDhGRTBFNzAzNzc1MUNDNjA2NzAzNzAyRTUwMjBEMDFCMAorOjEwM0E2MDAwMDQyNUVGRkZFNzAyRTk1RUYwQzYwNjcwMzcwMkM2MDZERQorOjEwM0E3MDAwNkUzNzA4RTUwMjI1RkZGQjBEMDEwMDI1RUZGRkU3MDI4OQorOjEwM0E4MDAwRTk0NEYwRjcwNjlCMzYwMDAxNzQyNTI2RjYwNjE4MDA3NworOjEwM0E5MDAwMDg3NUVEODEyNjlCMzY3RkZGQjg4OTAzQ0QzQUI4ODQzRgorOjEwM0FBMDAwMDNDRDNBQzYwNkEwMzYwNjgzMjZDMjM0QUZFOTE3RjAyNgorOjEwM0FCMDAwQTEwMTM3M0EyNjBGMzc3RkM3RTlGN0ZFODMyNjlCMzZFOQorOjEwM0FDMDAwRUNFODJBMEQ4MTBFOUIzNjgwMDBCQkZGN0ZDRDUzQzZFQworOjEwM0FEMDAwMDZBMDM2MDJFOUYwRUY4MzBFOUIzNjExQzYwNkEwMzYyQgorOjEwM0FFMDAwMENFOUY5RUY0NDNCMkMzQkM3MkE2QjNCNDQzQkM3MkEwQworOjEwM0FGMDAwQzcyQUM3MkFBM0I2MzQ4MTBFQzIzNDAwMjBGNzA2NDE3NAorOjEwM0IwMDAwMzcwMTAwNzQxQjhDQzNDNzA2NDEzNzAwMDBCODdGMDMyMAorOjEwM0IxMDAwQ0QzQTMzQzA4RUMwQkY1NDM3QjkwNjAwRjNBQjhFQzM2NQorOjEwM0IyMDAwMzNDMEEwOUUzNjhCRjAyRUZGQTRFNDNBRjcwNjlCMzZGNgorOjEwM0IzMDAwMDAwMTc1MjE4MzI2QzIzNEJGQTFBOTM2RTcwMEExOUJFRAorOjEwM0I0MDAwMzZFOTA5MDBBMTlCMzY4MTI2OUIzNkZGREZBOTAwMjBCQworOjEwM0I1MDAwNzUwNkU5NkUwMEU5NkZFRjgzMEU5OTM2MDRDNzA2MzdFNAorOjEwM0I2MDAwMzcwMTAwQzYwNkNBMzQwMUU5NTgwMDgzMEU5QjM2NDA2RgorOjEwM0I3MDAwRTg1ODAwQTEwNTM3M0IwNkU5MzY3NTM3QTEwNzM3M0IwMgorOjEwM0I4MDAwMDZFQjM2NzUyRUExMDkzNzNCMDZFRDM2NzUyNUZFMEU4MAorOjEwM0I5MDAwNzEzNzc1MUNCODg3MDNDRDNBODMwRTk5MzYxMEExNTA0MgorOjEwM0JBMDAwMzdDNzA2NTAzNzAwMDAwOTA2OTkzNkM2MDZBMDM2MDgwMgorOjEwM0JCMDAwRTkxNEVGODMwRTk5MzYwNEM3MDYzNzM3MDMwMEM2MDZBQgorOjEwM0JDMDAwQ0EzNDAzQzYwNkEwMzYwQUU5RkNFRUExRDEzNjI2M0I2QworOjEwM0JEMDAwMDYyMDAwNzUxNUExRDMzNjI2M0IwNjIyMDA3NTEyQTFEQQorOjEwM0JFMDAwRDUzNjI2M0IwNjI0MDA3NTBGQzM4RDM2MjAwMEU5MEIyMQorOjEwM0JGMDAwMDA4RDM2MjIwMEU5MDQwMDhEMzYyNDAwODNDNDAyRjdDQworOjEwM0MwMDAwMDZFNjM0MDEwMDc0MTUyNjNBMDQ3NzA4NzIwRTI2M0E0NworOjEwM0MxMDAwNjQwMTcyMDhDNjA2QTAzNjA2RTlBQkVFRTg3QzBBOENBMQorOjEwM0MyMDAwQzAzREZGRkY3NDFCMjZDNjA2MTgwMDEwMjZDNzA2MDRGOQorOjEwM0MzMDAwMDA0OTNDMjZDNzA2MDYwMDBDMDBDRDUwQjk0RTAwRTJGNAorOjEwM0M0MDAwRkVDNjA2QTAzNjBBRTk5NEVFRTk3QkVFOEYzQzA2M0RGRgorOjEwM0M1MDAwMDYzRDA2M0REMjNDRUEzQzA2M0QwNjNEQTNCNjM0ODExNgorOjEwM0M2MDAwMjZDMjM0QUZERkM3MDY0QzM3MDAwMEI4OEEwM0NEM0EwRQorOjEwM0M3MDAwODAzRTlEMzYwNDc1MEM4MDNFOUUzNjA2NzQwNUM2MDY1MQorOjEwM0M4MDAwOUYzNjA2MzNDMEEwOUUzNjhCRjAyRUZGQTQ0QzNDRjcyNworOjEwM0M5MDAwMDY5QjM2MDAyMDc1MEU4MTI2OUIzNkZGQkZCODhCMDMyRQorOjEwM0NBMDAwQ0QzQUU5NTQwMEY3MDY5QjM2MDAwMTc0MDNFOTE3RUU5QworOjEwM0NCMDAwQzcwNjM3MzcwMjAwQzYwNkNBMzQwMjgzMEU5OTM2MDQ5NworOjEwM0NDMDAwODMwRTUwMzcwNEY2MDY5RDM2ODA3NTJBRTgxRjBCRTlFRgorOjEwM0NEMDAwMjcwMEY3MDY5QjM2MDAwMTc1RDNDNzA2MzczNzAyMDA2OQorOjEwM0NFMDAwQzYwNkNBMzQwMjgzMEU5OTM2MDRDNjA2QTAzNjAwRjYwQworOjEwM0NGMDAwMDY5RDM2ODA3NDAzRThERTBBODEyNjlCMzY3Q0ZGQkI3NgorOjEwM0QwMDAwRkZGRkNENTNDRDU0RTlCRUVEQTNCNjM0RThBRDAxQjgwNQorOjEwM0QxMDAwODYwM0NEMzlDNzA2NEMzNzAwMDA4MTI2QzIzNEFGREY5OQorOjEwM0QyMDAwRjYwNjlEMzY4MDc0MzRGNzA2OUIzNjAwMjA3NDU2RjdFRAorOjEwM0QzMDAwMDY5QjM2MDAwMTc0MjdFODM1MDE3MjFDQkUwMDQwODVFMQorOjEwM0Q0MDAwMzZDMjM0NzUwODA5MzZDMjM0RkYwNjkyMzRFODhCMDE1NgorOjEwM0Q1MDAwNzMwNjgxMEU5OTM2ODAwMEU5NkNFREU5QjUwMEM3MDY1RgorOjEwM0Q2MDAwMzczNzAyMDBDNjA2Q0EzNDAyODMwRTk5MzYwNDgzMEUyMgorOjEwM0Q3MDAwNTAzNzA0ODAzRTlFMzYwODc0MDNFODVBMEFFOEVGMDA4NAorOjEwM0Q4MDAwNzJENkU5QzhGRjgwM0U5RTM2MEE3NTEyQzYwNkEwMzY3NgorOjEwM0Q5MDAwMDBGNzA2OUIzNjA4MDA3NDAyQ0Q1NEU4MzkwQTgxMjZFNAorOjEwM0RBMDAwOUIzNkZGQkZFOEM4MDA3MkFGQjg4QjAzQ0QzOUU5OUNFMgorOjEwM0RCMDAwRkZGNjA2OUUzNkZGNzU1OEEzQjYzNEU4RkUwMDgxMjY0RQorOjEwM0RDMDAwQzIzNEZGQkZGNjA2OUQzNjgwNzQ0OEY3MDY5QjM2MDA2NgorOjEwM0REMDAwMjA3NDIyRjcwNjlCMzYwMDQwNzUwOEU4OTEwMDcyMzA4NworOjEwM0RFMDAwRTkyMjAwMjZBMTBDMDBBOTYwMDA3NTI0ODEwRTY2MzcyNworOjEwM0RGMDAwMDAwOEU5RDJFQ0M3MDY0QzM3MDAwMEU4NzEwMDcyMTBFOQorOjEwM0UwMDAwQjg4QjAzQ0QzOUU4RDMwMDczMDY4MTBFOTkzNjgwMDA1NAorOjEwM0UxMDAwRTlCNEVDODAzRTlEMzYwNDc1MEM4MDNFOUUzNjA2NzRGNworOjEwM0UyMDAwNDZDNjA2OUYzNjA2RjcwNjlCMzYwMDAxNzQwQzgwM0U5OAorOjEwM0UzMDAwOUQzNjA4NzUwNUM2MDY5RjM2MEFFODMyMDA3MkQxRTgzRAorOjEwM0U0MDAwOTkwMDgwM0U5RDM2MDg3NTEzODEwRTk5MzY4MDAwRjdFMworOjEwM0U1MDAwMDY5QjM2MDAyMDc1MDhCODhCMDNDRDM5RTk2OEVDQzY5RgorOjEwM0U2MDAwMDY5RjM2MEFFOTYwRUNCODg2MDNDRDNBRTk1OEVDMjY5RAorOjEwM0U3MDAwQTEwQzAwQTk2MDAwNzQwODgxMjZDMjM0RkZCRkY5QzNGOQorOjEwM0U4MDAwRjcwNjlCMzYwMDQwNzQxMzgxMEU2NjM3MDAwOEU4NEEzNworOjEwM0U5MDAwMDA3MzA2ODEwRTk5MzY4MDAwRjlDMzgxMEU5QjM2MDBBRgorOjEwM0VBMDAwNDA4MDI2NkYzN0ZFODEyNjlCMzY3RkZGQzYwNkEwMzZGMAorOjEwM0VCMDAwMDBGOEMzODEwRTk5MzYwMDAxRTkyMUVDMjZBMTIwMDAwQgorOjEwM0VDMDAwQTNGQjM2QTNBQTM0MjZBMTIyMDBBM0ZEMzZBM0FDMzQ1QgorOjEwM0VEMDAwMjZBMTI0MDBBM0ZGMzZBM0FFMzRDM0ExMDUzNzI2M0I5OQorOjEwM0VFMDAwMDYyMDAwNzUxOUExMDczNzI2M0IwNjIyMDA3NTBGQTE5MQorOjEwM0VGMDAwMDkzNzI2M0IwNjI0MDA3NTA1RTgwMjAwRjhDMzUxMUU2OQorOjEwM0YwMDAwMDY4QkM3OEQzNjIwMDBCRjA1MzdCOTAzMDAxRTA2MUY3QworOjEwM0YxMDAwMDdGM0E1OEJGODhEMzYyMDAwQkZBMDM0QjkwMzAwRjM1QQorOjEwM0YyMDAwQTUwNzFGNTk4QkY4QTEwNzM3QTNBNjM0QTEwOTM3QTMwQQorOjEwM0YzMDAwQTgzNEY5QzNDNjA2QjYzNDAxRTk4QkVCRTg4NzA4OEJEMQorOjEwM0Y0MDAwRjAwNTEyMDAyNjI5MDYwRTAwMjY4QjQ0MkEyNjNBMDY4MgorOjEwM0Y1MDAwMEUwMDc1NUIyNjgzMkUwRTAwMDI4MEZDMjc3NTUwMjYwRQorOjEwM0Y2MDAwOEI0NDJDQTlGRkZGNzU0NzhCRkUzM0MwMjZGNjQ1M0NEQQorOjEwM0Y3MDAwODA3NDA2MjY4QTQ1M0EyNDFGMDNGODI2ODA3RDQ1MDk2OQorOjEwM0Y4MDAwNzUyRDhDQzI4RTA2MzgzNDhFREE4QjBFMEUwMDI2ODk4MworOjEwM0Y5MDAwMEUwRTAwOEQ3NDJDQkYxODAwRjNBNDMzQzA4RUQ4MjZFQgorOjEwM0ZBMDAwQzcwNjA0MDBCNTNGMjZDNzA2MDYwMDA2MDBDRDUwQjg3OAorOjEwM0ZCMDAwMDY4MEU5RUZFOTI2QTEwQzAwQTM5MzM3ODMwRTk5MzYxQQorOjEwM0ZDMDAwMDFFOTAwRUIyNjgwM0UxQzAwRkY3NTJGMjY4MDNFMUU3NworOjEwM0ZEMDAwMDBGRjc1MjcyNkY3MDYwQzAwNDAwMDc1MUJBMUQxMzY5RgorOjEwM0ZFMDAwMjZBMzFBMDBBMUQzMzYyNkEzMUMwMEExRDUzNjI2QTNFQQorOjEwM0ZGMDAwMUUwMEI4MEE4MEU4MzYwN0U5RTJFQUZGMDY5MDM0QkUwMAorOjEwNDAwMDAwMEEwMEM2MDZCNjM0MDFGNjA2OUQzNjgwNzUwNTgzMEU5NQorOjEwNDAxMDAwQzIzNDAxRTlCNkVBODAzRTlEMzYwQTc1MEYyNkExMEMyRQorOjEwNDAyMDAwMDAyNTA3MDAzRDA0MDA3NTAzRTg3OTAwQTFGMzM2ODZGQQorOjEwNDAzMDAwRTBFNzFFQTNFMzM2ODEyNjBCMzcwMDAzODEyNjBEMzcwOAorOjEwNDA0MDAwN0I3RjgzMEUwRDM3NDhFODFFMDAyNkExMEMwMDI1MDc1NAorOjEwNDA1MDAwMDAzRDA0MDA3NDA5MjZGNzA2MEMwMDIwMDA3NTA2QjgyMAorOjEwNDA2MDAwMDEwMEU5M0ZFOUU5NUZFQUM3MDY0MTM3MDAwMEI4N0Y5MAorOjEwNDA3MDAwMDNDRDNBQTExRDM3QTNDNDM0ODZFMDY4N0YwMzFGQTM5NAorOjEwNDA4MDAwMDYwMDMzQzA4RUQ4QTEwQjM3QTNCMjM0QTEwRDM3QTNERAorOjEwNDA5MDAwQjQzNEExRjMzNkEzQzgzNEExRUYzNkEzOUMzNEExRjEwNAorOjEwNDBBMDAwMzZBMzlFMzRDMzgwMEU5RDM2ODBCRTAwMDBFOEI0MDc2MAorOjEwNDBCMDAwQjg3QjAzQ0QzQUI4N0MwM0NEMzlDNzA2MzMzNzAyMDA0RAorOjEwNDBDMDAwQTFFNTM2RTcyRUExRTczNkU3M0VCODgyMDNDRDNBRjcwMQorOjEwNDBEMDAwMDY5QjM2MDAyMDc1MDNFOEZEMDZBMUQzMzZBM0VGMzYxNAorOjEwNDBFMDAwQTM5QzM0QTFENTM2QTNGMTM2QTM5RTM0QzNGNjA2OUQxNgorOjEwNDBGMDAwMzY4MDc0MzFCRTIyMDBFOTE3MDBGNjA2OUQzNjgwNzRDMgorOjEwNDEwMDAwMjRCRTIzMDBFOTBBMDBGNjA2OUQzNjgwNzQxN0JFMjRGQgorOjEwNDExMDAwMDA1NkU4QTgwNThDQzAzREZGRkY1RTc0MDVFOEQ3RUZBOAorOjEwNDEyMDAwQ0Q1MEU5MUZFOEU5OUZFOTAwMDAwMDAwMDAwMDAwMDAxMQorOjEwNDEzMDAwQjg4NDAzQ0QzQUI4OEEwM0NEMzlFOUY3MDA4MDNFQTBCMAorOjEwNDE0MDAwMzYwODc1MkVBOUQwMDc3NTJDQTFCMTM2MEQwMDA0RTdFRAorOjEwNDE1MDAwMDhFNTAwMjVGRjczRTcwMEI4OEEwM0NEM0FFOEMzMDZGNworOjEwNDE2MDAwMzNDMEU3MEVFNTBBMjVDMzE3RTcwQUNENTRDNjA2QTBGQgorOjEwNDE3MDAwMzYwMEU5NjhFOUJFMDQwMEU5M0ZFOTgzMjY5QjM2QkZDMworOjEwNDE4MDAwQzYwNjcxMzcwM0I4ODYwM0NEM0FCODg4MDNDRDNBQjg2RQorOjEwNDE5MDAwODMwM0NEM0FCODg3MDNDRDM5ODEwRUMyMzQwMDIwRTlCQworOjEwNDFBMDAwOTIwMEU4NDkwNkI4ODcwM0NEMzlCQkZGN0ZDRDUzQjhFRAorOjEwNDFCMDAwODQwM0NEM0FCODg4MDNDRDNBQjg4QjAzQ0QzQUI4ODM5RgorOjEwNDFDMDAwMDNDRDNBQjg4NjAzQ0QzQUI4ODUwM0NEM0FDM0U1MDBBRQorOjEwNDFEMDAwMjVGRjUzRTcwMDgzMEVDMjM0NDA4MzI2QzIzNEVGRTg0NAorOjEwNDFFMDAwMEMwNkJCRkY3RkNENTNCODhBMDNDRDNBQjg4NTAzQ0QwQgorOjEwNDFGMDAwM0FCODg2MDNDRDNBQjg4MzAzQ0QzQUI4ODcwM0NEM0FBRgorOjEwNDIwMDAwQjg4QjAzQ0QzQUI4ODQwM0NEM0FCODg5MDNDRDNBQzMwRAorOjEwNDIxMDAwODMwRUMyMzQ1MEU4MTgwNEU4RDMwNUY2MDY2RjM3MDE2MAorOjEwNDIyMDAwNzUxMkI4ODkwM0NEMzk4MzNFMEYzNzAwNzUwNkM3MDY2RQorOjEwNDIzMDAwMEYzNzA0MDBBMTlEMzY4MEZDMDg3NDA1Qjg4NDAzQ0RCNworOjEwNDI0MDAwMzlFNTAyMEQwMTA4MjVFRkZGRTcwMkExOUQzNjg2RTA2MgorOjEwNDI1MDAwMzJFNDhCRjBEMUVFMzNDMDBEMjAwMDA5MDZBRDM2QTE1QgorOjEwNDI2MDAwQUQzNkU3MDRFOTUzRThFOTVBRTgzM0MwQTAxQjM3RDE3QgorOjEwNDI3MDAwRTAzQTA2QTAzNjc1MDNFOUJBRkZFOTYwRThDNzA2NDFFRgorOjEwNDI4MDAwMzcwMDAwRThDMUUxRTg2QTA2MzNDMDBENDEwMEU3NTY5NworOjEwNDI5MDAwQTFCMTM2MEQwMDEwRTcwOEU1MDIyNUY5RkYwRDAzMDA3NgorOjEwNDJBMDAwRTcwMkExQjMzNkU3MEFBMUFGMzZFNzA2QTFBRDM2RTdDQworOjEwNDJCMDAwMDRFODdDMDNFODlGMDNDNzA2MUQzNzAwQzhDNzA2MEI0OAorOjEwNDJDMDAwMzcwMDAzQzcwNjBEMzc3QjdGMzNDMEEzOTkzNkEzOUIwNgorOjEwNDJEMDAwMzZBMzlEMzZBMzlGMzZBMzRDMzdBM0YzMzZBM0VGMzYwMAorOjEwNDJFMDAwQTNGMTM2RTg4MkZEQzYwNjlGMzYwMkU5RUZFN0U1MDI1NAorOjEwNDJGMDAwMEQwMTg4MjVFRkZGMEQwMDQwMEQwMDA0RTcwMkU4RjJGNAorOjEwNDMwMDAwMDVFNTBBMEQ0MDAwRTcwQTMzQzBBMzgxMzdBMzg1MzdDRQorOjEwNDMxMDAwQTM4MzM3QTM4NzM3QTM4OTM3RTUwMDBEMDA4NEU3MDAxRgorOjEwNDMyMDAwQjg4QzAzQ0QzOUI4ODAwMENEMzVDNzA2QUEwMkZGRkY4RgorOjEwNDMzMDAwRTUwMDI1RkY3QkU3MDA4MTBFOUEzNzgwMDBCODdFMDNGOQorOjEwNDM0MDAwQ0QzOTMzQzBFNzBFQkUwODAwOEUwNjM4MzRFOEE3RUQzRAorOjEwNDM1MDAwODMyNkVGMzRERkZGMDY4MTM3Q0Q1MDgzMEVFRjM0MjAwNAorOjEwNDM2MDAwQzNGNzA2OUEzNzgwMDA3NDNEQTlEMDA3NzQxMEE5MDBERQorOjEwNDM3MDAwMDQ3NDEyMzNDMEU3MEVGRjA2ODczN0U5RDJGRkZGMDY0OQorOjEwNDM4MDAwODUzN0U5Q0JGRkZGMDY4MzM3RTlDNEZGODMyNjlBMzdEOQorOjEwNDM5MDAwN0ZBMTg5MzcwMzA2ODczNzNEMDUwMDdGMDFDM0JCRkYzNworOjEwNDNBMDAwN0ZDRDUzRTkwMDAwRTUwMjI1RkZGQjI1RUZGRjBEMDE1RQorOjEwNDNCMDAwMDBFNzAyQTE4MzM3M0IwNjQ2Mzc3RjJBQTE4NTM3M0JCQQorOjEwNDNDMDAwMDY0ODM3N0MyMUExODkzNzAzMDY4NzM3M0QwNTAwN0ZFMgorOjEwNDNEMDAwMTVDNjA2OUYzNjA0RTUwMjI1RkZGNzBEMDEwMDI1RUZGRgorOjEwNDNFMDAwRkZFNzAyRTlGN0U2QkUwMTAwRjcwNjlCMzYwMzAwNzQxQgorOjEwNDNGMDAwMEE4MzI2OUIzNkZDODMwRUMyMzQwNEU5RDBFNkI4N0JFMAorOjEwNDQwMDAwMDNDRDM5RTUwMjBEMDE2MDI1RUZGRkU3MDJDNzA2RjE5NAorOjEwNDQxMDAwMzQyMDAzQjg4RTAzQ0QzOUMzODEyNkMyMzQ3RkZGODA5OAorOjEwNDQyMDAwMEU2RjM3MDFGNzA2OUIzNjAzMDA3NEQyQjg3QjAzQ0RCRAorOjEwNDQzMDAwM0FCODdEMDNDRDM5ODMyNjlCMzZFRjMzQzBCMDhBQTJDQworOjEwNDQ0MDAwOUYzNkEyOUQzNkM3MDY0QzM3MDEwMEM3MDYwRjM3MDRCQQorOjEwNDQ1MDAwMDBGNzA2OUIzNjQwMDA3NTA2QzcwNjBGMzcwMzAwQjgwNQorOjEwNDQ2MDAwOEQwM0NEMzlFODAwRDVFNTAyMEQwMTQwMjVFRkZGOEIyNgorOjEwNDQ3MDAwRDhCODdDMDNDRDM5QzcwNjMzMzcwMjAwOEJDMzBEMDA5MworOjEwNDQ4MDAwMjAyNUY5RkYwQjA2RTgzQUU3MDJDM0ZGMEVGMTM0NzU2OQorOjEwNDQ5MDAwMDFDM0U1NEVBOTAxMDA3NTEyRTUwMEE5MDAwNDc1MDVFOAorOjEwNDRBMDAwMEQwMDA0RTcwMEI4OEUwM0NEMzlDM0U1MDBBOTAwMDQ3MAorOjEwNDRCMDAwNzRGMzI1RkZGQkU3MDBFOUVCRkZDNjA2QTAzNjA0ODM5MworOjEwNDRDMDAwMjY5QjM2RkM4MTBFOUIzNjgwMDBFOTEwRTZCODhFMDNGMQorOjEwNDREMDAwQ0QzQUNENTQ4MTBFQUYzNjAwMThBMUFGMzZFNzA2QjhGRAorOjEwNDRFMDAwN0IwM0NEMzlBMUQzMzZBMzhGMzdBMUQ1MzZBMzkxMzcxRQorOjEwNDRGMDAwQzcwNjhCMzcwMjAwQzcwNjhEMzcwMjAwODMwRTk5MzYzOAorOjEwNDUwMDAwNDBFOUQ5RTU4MDNFOUYzNjA2NzUxNUE5RDAwNzc1RUNDMAorOjEwNDUxMDAwMjUwMDE4NzUwRUZGMEU4QjM3NzVFMUM2MDY5RjM2MDgwRAorOjEwNDUyMDAwRTlCQUU1RkYwRThEMzc3NUQzQkUwODAwRTk5RkU1QjhGRgorOjEwNDUzMDAwN0IwM0NEMzlGNzA2OUIzNjAwMjA3NDA4QzYwNjlGMzZFQworOjEwNDU0MDAwMEFFOTBEMDBGNzA2OUIzNjAwNDA3NDBCQjg4QjAzQ0RDQgorOjEwNDU1MDAwMzk4MTBFOTkzNjgwMDBFOTgzRTVCODdCMDNDRDM5QzdGMAorOjEwNDU2MDAwMDY4QjM3MDQwMEM3MDY4RDM3MDQwMDgxMEU5OTM2MDA4QworOjEwNDU3MDAwMDJFOTY5RTVGNjA2OUQzNjgwNzUxQkE5RDAwNzc1RUI0MworOjEwNDU4MDAwQTkwMDE4NzUwQ0ZGMEU4RDM3NzVFMEU4MTdGQkU5NEM5NAorOjEwNDU5MDAwRTVCODgyMDNDRDM5QzNGRjBFOEIzNzc1Q0VCRTA5MDA1NworOjEwNDVBMDAwRTkyQkU1QzcwNjNEMzcwMDAwQzcwNjlCMzYwMDAwRTg0QgorOjEwNDVCMDAwM0MwMjgxMjZBRjM2RkZFN0ExQUYzNkU3MDY4MTI2OUI5NgorOjEwNDVDMDAwMzZGRjdGRTUwMjBEMDEwMDI1RUZGRjI1RkZERkU3MDI0MworOjEwNDVEMDAwQkJGRjdGQ0Q1MzMzQzBBMzlEMzZBMzlGMzZFODUwMDA2OQorOjEwNDVFMDAwRTg3MzAwQjg4MTAzQ0QzOUMzRjcwNjlCMzYwMzAwNzQyNgorOjEwNDVGMDAwMERDNjA2OUYzNjAyQzYwNkEwMzYwMEU5REZFNDgzMEUyQworOjEwNDYwMDAwOUIzNjEwQzcwNjk5MzYwMDAwRThFNzAyRTU1NjBEMDIxMgorOjEwNDYxMDAwMDBFNzU2QzcwNkE4MDIwMDAwOEIzNjNEMzdFODQ0MDI4MworOjEwNDYyMDAwQzYwNkEwMzYwRUU5QjVFNDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwNDYzMDAwMDZCODhBMDNDRDNBQjg4NTAzQ0QzQUI4ODYwM0NEM0E5OQorOjEwNDY0MDAwQjg4MzAzQ0QzQUI4ODcwM0NEM0FCODhCMDNDRDNBQjhENworOjEwNDY1MDAwODgwM0NEM0EwN0MzMDZCODg4MDNDRDNBQjg3QjAzQ0RBQgorOjEwNDY2MDAwM0FCODgyMDNDRDNBQjg3RjAzQ0QzQUI4N0MwM0NEM0E0RAorOjEwNDY3MDAwQjg3RTAzQ0QzQUI4ODAwM0NEM0FCODgxMDNDRDNBQjhCRAorOjEwNDY4MDAwODQwM0NEM0FCODg5MDNDRDNBQjg3RDAzQ0QzQUI4OERDRAorOjEwNDY5MDAwMDNDRDNBQzcwNjQxMzcwMDAwMDdDMzA2OEUwNjM4MzRGQgorOjEwNDZBMDAwMUY4QjBFMEUwMDI2ODkwRTBFMDBCRTE4MDBCRjE4MDBDQworOjEwNDZCMDAwRjNBNDA2MUUwN0NEMzQwNzMzQzA4RUQ4QzMyNkY2MDZGMgorOjEwNDZDMDAwMjAwMDgwNzQ0NDMzQzAyNkEwMjYwMDI0MUY4QkYwMjZDRgorOjEwNDZEMDAwOEI1QzI4ODkxRTZBMzcwNjhFMDYzODM0MUZDMEUzMDRCNworOjEwNDZFMDAwMjY4ODVDMjg4QkM2QjkwNjAwQkUyMDAwQkYxQTAwRjNERQorOjEwNDZGMDAwQTQ4QkM4ODNDNzA2RjNBNDI2ODEyNjI2MDAxRjgwMjYyNAorOjEwNDcwMDAwODEzNjI2MDAwMDgwRTlBOUZGMjY4QjFFMjgwMDg5MUUxRAorOjEwNDcxMDAwNkEzNzA2OEUwNjM4MzQxRkMwRTMwNDI2ODgxRTI4MDAzOAorOjEwNDcyMDAwQjkwNjAwQkUyMDAwQkYxQTAwRjNBNEU5ODRGRjg2QzRDNgorOjEwNDczMDAwQTM2ODM3RTg4N0ZGRjcwNjZBMzcwRjAwNzQxMDgwM0VEQQorOjEwNDc0MDAwOUUzNjAwNzUwOUJFMDAwMEU4QUNFOUNENTBDM0MzNTBFOQorOjEwNDc1MDAwNTYwNjMzQzAyNkY2MDYyMDAwODA3NDA2MjZBMDI2MDBFMgorOjEwNDc2MDAwMjQxRjhCRjAyNjhCNUMyNjg2RkI4M0VCMDQ3NDRGODMxRgorOjEwNDc3MDAwQzYyQThDQzA4RUQ4QjkwNzAwMzNDMDhFQzBCRjcyMzcyRQorOjEwNDc4MDAwRjNBQjMzQzk4QTBDODBGOTAwNzUwM0U5MzAwMDNCRDlEQgorOjEwNDc5MDAwNzMwM0U5MjkwMDJCRDk4QTQ0MDEyNTNGMDA3NDE5M0Q5MAorOjEwNDdBMDAwMEIwMDdEMTREMUUwOEJGODJFOEJCRDVDNDk4RDc0MDIxQgorOjEwNDdCMDAwODNFOTAyRjNBNEU5MDIwMDAzRjEyM0RCNzVDNDMzQzBFQgorOjEwNDdDMDAwOEVEODA3NUU1OEMzMzNDMDI2RjYwNjIwMDA4MDc0MDZENAorOjEwNDdEMDAwMjZBMDI2MDAyNDFGQzNFNTBBMjVDM0JGRTcwQUI4ODYyMgorOjEwNDdFMDAwMDNDRDM5Qjg4MzAzQ0QzOTgxMjY5QjM2N0NERkI4ODU2QworOjEwNDdGMDAwMDNDRDNBRTUwMjI1RkZGMzBEMDEwMDI1RUZGRkU3MDJBNworOjEwNDgwMDAwRTUwMDI1RkY1M0U3MDBBMUU3MzYyNUZGRkVBM0U3MzZDNQorOjEwNDgxMDAwRTczRTgzMjY5OTM2Q0Y4MTBFQUYzNjAwMTBBMUFGMzYyMgorOjEwNDgyMDAwRTcwNkMzRTUwMjBEMDEwQzI1RUZGRkU3MDJBMUU3MzYxRAorOjEwNDgzMDAwMEQwMDAxRTczRUEzRTczNjgxMEU5QjM2MDAyMDgzMEU3NAorOjEwNDg0MDAwOTkzNjIwODEyNjlCMzY3Q0JGODEwRUFGMzYwMDEwQTFBMQorOjEwNDg1MDAwQUYzNkU3MDZCODg2MDNDRDM5Qjg4NTAzQ0QzOUI4ODNCRQorOjEwNDg2MDAwMDNDRDNBQzMwQkY2NzU0OTA2OEUwNjMyMzQ4MDNFRTAxRQorOjEwNDg3MDAwMzQwMTc1MUIyNjg5MzYwNjAwOEUwNjMyMzQyNkY3MDY2QgorOjEwNDg4MDAwMEEwMDAwMjA3NDA3MjY4MTBFMDgwMDAwMjAwN0MzODA1QworOjEwNDg5MDAwM0VFMzM0MDE3NTE5MjY4OTM2MDYwMDhFMDYzMjM0MjYyOQorOjEwNDhBMDAwRjcwNjBBMDAwMDEwNzQwNzI2ODEwRTA4MDAwMDEwMDdBMgorOjEwNDhCMDAwQzNFOUI0RkY1MDUxNTczM0MwQjkwNjAwOEVDMEJGRDExMQorOjEwNDhDMDAwMzZGM0FFNUY3NDBDMjZGNjA2MDAwMEMwNzUwNEY4NTk4NgorOjEwNDhEMDAwNThDM0Y5RTlGOUZGOEIwNTBCNDUwMjBCNDUwNEMzNTI5OAorOjEwNDhFMDAwNTBFNTA2MjUxRTAwM0QxRTAwNzVGNkI4MDE4MEU3NUEwQQorOjEwNDhGMDAwNTg1QUMzRThFOUZGNTBFNTAyMjVGRjdGMEQwMTAwMjU2NgorOjEwNDkwMDAwRUZGRkU3MDIwRDAwODBFNzAyQTFBRDM2RTcwNEExQUY5QgorOjEwNDkxMDAwMzZFNzA2NThDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNDkyMDAwMkUyQkNFNDExMDQyN0I0MTMwNDFBMjQxQUY0NTQ0Mjk1QworOjEwNDkzMDAwQzcyQUM3MkE2MDM5RjQzQTVDM0MwOTNEQjEzRDM0M0Y4RgorOjEwNDk0MDAwQzcyQTNDM0ZDNzJBQzQzRjE2NDAxNjQwRUQ0MEZBNDBGNAorOjEwNDk1MDAwMDc0MUM3MkFDNzJBQzcyQUM3MkFENjUyMDAwMDAxMzdFQgorOjEwNDk2MDAwRTkzNkYzMzZFRjM2MUQzNzBEMzcwQjM3OUMzNzAzMzdGMworOjEwNDk3MDAwRkIzNjYyMkQ0MDA2RDEyREY0MDFCQTQ0NDAwNjhDNDMyQgorOjEwNDk4MDAwNjQwMEU4MkNDODAwRDgyQjA1MDBFOTQ1NTAwMDk3NDU4NQorOjEwNDk5MDAwRkEwMEFFMkQwNDAxNkE0MjAyMDBGNjJDQkMwMjkzMkRFRgorOjEwNDlBMDAwREMwNTFEMkQ2NDAwQTEyRDE0MDBENzNBMDgwNzgxMkRDOAorOjEwNDlCMDAwNjQwMEIzM0UwMjAwMzA0MzY0MDBDNTJDRjQwMThCNDQxNAorOjEwNDlDMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwNDlEMDAwODAzRUZEMzQwMjc0MENFODIwMDVDNzA2QTEzNjAwMDBCNQorOjEwNDlFMDAwRTk5QUY4RkYwNkMwMzNFODEwMDU4QjM2M0QzN0U4NzNDNworOjEwNDlGMDAwRkVDM0NEMzRFOUU4MDVDNzA2QTMzNjAwMDBDNzA2NDE2QgorOjEwNEEwMDAwMzcwMDAwRThFREZFMzNDMDBENDEwMEU3NTZBMUIxMzY5NgorOjEwNEExMDAwMEQwMDEwRTcwOEExQjMzNkU3MEFBMUFGMzZFNzA2QTFGQgorOjEwNEEyMDAwQUQzNkU3MDRFODJCMDlDNzA2MUQzNzAwQzhDNzA2MEJEQgorOjEwNEEzMDAwMzcwMDAzQzcwNjBEMzc3QjdGMzNDMEEzOUIzNkEzOUQ4QQorOjEwNEE0MDAwMzZDNzA2NEMzNzAxMDBDNjA2OUUzNkZGQzcwNjA1MzczNworOjEwNEE1MDAwMDAwMEM3MDYwNzM3MDAwMEM3MDYwOTM3MDAwMEEzRjNBOAorOjEwNEE2MDAwMzZBM0VGMzZBM0YxMzZFOEZFRjVFNTAyMjVGOUZGMEQ5MgorOjEwNEE3MDAwMDMwMDBEMDA4ODI1RUZGRjBEMDA0MDBEMDAwNEU3MDI0NAorOjEwNEE4MDAwQjg4RjAzQ0QzOUI4ODAwMENEMzVDNzA2QUEwMkZGRkYyNQorOjEwNEE5MDAwQTFBOTM2QTNBNzM2MEQwMEE0MEQwMDA4RTcwMEEzQTkxRAorOjEwNEFBMDAwMzZDNzA2QTMzNjAxMDBDNzA2QTUzNjBDMDA4MzNFQTUwRgorOjEwNEFCMDAwMzYwMDc1MDlDNzA2M0QzNzA1MDBFOTEzRkZGRjBFQTU0RgorOjEwNEFDMDAwMzZCRTExMDBFODIyMDVCODkwMDNDRDM5QzM4MzNFQTM1QQorOjEwNEFEMDAwMzYwMTc0RDlDM0I4OTAwM0NEM0EyNkEwMkIwMDI2OEI5QgorOjEwNEFFMDAwMUUyQzAwQ0QzNDgzM0VBMzM2MDE3NDAzRTlGMDA0M0M1MAorOjEwNEFGMDAwMEY3NTFFODFGQjAwMDI3NTE4MjZBMTIwMDBBMzA1Mzc0MworOjEwNEIwMDAwMjZBMTIyMDBBMzA3MzcyNkExMjQwMEEzMDkzN0U5MDkxQgorOjEwNEIxMDAwMDBDNzA2M0QzNzAxMDBFOUI2RkVDNzA2QTMzNjAyMDAwRQorOjEwNEIyMDAwQzYwNjlFMzZGRkU4Q0JGREU4MUNEOTMzQzBBMzg1MzcwNworOjEwNEIzMDAwQTM4MzM3QTM4NzM3QTM4OTM3Qjg5MTAzQ0QzOUI4ODBDQQorOjEwNEI0MDAwMDBDRDM1QzcwNkFBMDJGRkZGRTUwMDI1RkY1M0U3MDBBOQorOjEwNEI1MDAwODEwRTlBMzc4MDAwQjg5MjAzQ0QzOTMzQzBFNzBFQkU3QworOjEwNEI2MDAwMDgwMDhFMDYzODM0RTg4RUU1MjZDNzA2MDQwMDdENEIyMworOjEwNEI3MDAwODMyNkVGMzRERkNENTA4MzBFRUYzNDIwQzNGNzA2OUEzRgorOjEwNEI4MDAwMzc4MDAwNzQzMkE5RDAwNzc0MENBOTAwMDQ3NDBFMzM2NgorOjEwNEI5MDAwQzBFNzBFRTlEQUZGRkYwNjg1MzdFOUQzRkZGRjA2ODM5QQorOjEwNEJBMDAwMzdFOUNDRkZDNzA2M0QzNzAxMDBFOTM2RkU4MzI2OUE3OAorOjEwNEJCMDAwMzc3RkJCRkY3RkNENTNFNTAwMEQwMEFDRTcwMEU1MDI3QQorOjEwNEJDMDAwMjVGRkZCMjVFRkZGMjVGRkY3MEQwMTAwRTcwMkExODM3RAorOjEwNEJEMDAwMzczQjA2NDYzNzdGQ0RBMTg1MzczQjA2NDgzNzdDQzQzNworOjEwNEJFMDAwQzcwNkEzMzYwMzAwQkUxMzAwRThGRDAzQjg5MzAzQ0Q0OAorOjEwNEJGMDAwMzlCODk0MDNDRDM5Qjg5NjAzQ0QzOUI4OTUwM0NEMzk3QQorOjEwNEMwMDAwQkUwNjAwRThFMzAzRTlENjAzODMzRUEzMzYwMzc0MDEzRQorOjEwNEMxMDAwQzNCRTEzMDBFOEQyMDNCODk0MDNDRDM5QzNCODk0MDNEQworOjEwNEMyMDAwQ0QzQTI2QTAyQjAwMjY4QjFFMkMwMENEMzQ4MzNFQTMyQworOjEwNEMzMDAwMzYwMzc0MDNFOUE4MDMzQzBENzUzRTgzRkIwMDc1MzkwOAorOjEwNEM0MDAwRTUwMjBEMDAyMEU3MDJCODkzMDNDRDNBQzcwNkEzMzY2QworOjEwNEM1MDAwMDQwMEJFMDAwMEU4MENGQ0M2MDY5RDM2ODBDNjA2OUUxOQorOjEwNEM2MDAwMzYwMEM3MDYzMzM3MDIwMEI4OUEwM0NEMzlFOEZDMDA5NgorOjEwNEM3MDAwQzcwNjRDMzcwMDAwRTk2NjAzQzcwNjNEMzcwODAwRTk2MAorOjEwNEM4MDAwNjFGRDgzM0VBMzM2MDM3NTA5QzcwNjNEMzcwNTAwRTk3QworOjEwNEM5MDAwNTFGREU5NEEwMzgzM0VBMzM2MDQ3NDEyODMzRUEzMzZEMgorOjEwNENBMDAwMDU3NDBCQ0QzNEM3MDYzRDM3MDcwMEU5MzVGREM3MDY0RgorOjEwNENCMDAwQTMzNjA2MDBDNjA2OUUzNkZGQjg5QTAzQ0QzQUI4OTlDOQorOjEwNENDMDAwMDNDRDNBQjg5NjAzQ0QzQUI4OTcwM0NEMzlCODk4MDNENworOjEwNENEMDAwQ0QzOUI4OUIwM0NEMzlFOTE4RkRDRDM0ODMzRUEzMzZEOQorOjEwNENFMDAwMDQ3NzE4ODMzRUEzMzYwMzc1MDhGNzA2OUIzNjAwMDE0OAorOjEwNENGMDAwNzUwOUM3MDYzRDM3MDEwMEU5RThGQ0U5RTEwMkNEMzQ1QQorOjEwNEQwMDAwODMzRUEzMzYwMjc3MDlDNzA2M0QzNzAxMDBFOUQzRkM4RAorOjEwNEQxMDAwODMzRUEzMzYwNDc3MDVCODk2MDNDRDM5RTlDMDAyODNGNAorOjEwNEQyMDAwM0VBMzM2MDM3NTEwMjZBMTBDMDAyNTA3MDA1MDNEMDQ1NAorOjEwNEQzMDAwMDA3NTAzRTgzNjAwQTFGMzM2ODZFMEU3MUVBM0UzMzZFQworOjEwNEQ0MDAwODEyNjBCMzcwMDAzODEyNjBEMzc3QjdGODMwRTBEMzdCRAorOjEwNEQ1MDAwNDhFODE0RjM1ODNEMDQwMDc0MDkyNkY3MDYwQzAwMjBCNworOjEwNEQ2MDAwMDA3NTA2QjgwMTAwRTk3QTAyRTk4NkZDQTFFNTM2RTc5QworOjEwNEQ3MDAwMkVBMUU3MzZFNzNFQTFEMzM2QTM5QzM0QTFENTM2QTNCNgorOjEwNEQ4MDAwOUUzNEMzMjY4MDNFMUMwMEZGNzUyRjI2ODAzRTFFMDBFOQorOjEwNEQ5MDAwRkY3NTI3MjZGNzA2MEMwMDQwMDA3NTFCQTFEMTM2MjZBQgorOjEwNERBMDAwQTMxQTAwQTFEMzM2MjZBMzFDMDBBMUQ1MzYyNkEzMUUyNAorOjEwNERCMDAwMDBCODBBODBFOTJDMDJFOTM4RkNGRjA2OTAzNEJFMEFFQworOjEwNERDMDAwMDBDNjA2QjYzNDAxRjYwNjlEMzY4MDc1MDU4MzBFQzIxMAorOjEwNEREMDAwMzQwMUNEMzRFOTBDRkM4MzNFQTMzNjAzNzUwOUM3MDZDNAorOjEwNERFMDAwM0QzNzA1MDBFOUZDRkJFNTAyMEQwMzAwMEQwMDg4MEREMQorOjEwNERGMDAwMDA0MDBEMDAwNEU3MDJDNzA2QTMzNjA1MDBDNjA2OUU2NAorOjEwNEUwMDAwMzZGRkJFMDIwMEU4RTEwMUI4ODkwM0NEM0FCODlBMDM0MworOjEwNEUxMDAwQ0QzQUI4OTkwM0NEMzlCODk3MDNDRDM5Qjg5ODAzQ0RCOQorOjEwNEUyMDAwMzlFOUJCMDE4MzNFQTMzNjAzNzQwQTgzM0VBMzM2MDRFQgorOjEwNEUzMDAwNzQwM0U5QUEwMUJFMDYwMEU4QUUwMUI4OTUwM0NEMzlCNgorOjEwNEU0MDAwRTk5QzAxODMzRUEzMzYwNTc0MDNFOTkyMDFCRTAyMDA4QQorOjEwNEU1MDAwRTg5NjAxQjg5OTAzQ0QzOUU5ODQwMUM3MDYwRjM3MDVGMworOjEwNEU2MDAwMDBFOTdCMDFFNTAyMjVGRkRGRTcwMkM3MDZBMzM2MDc1RAorOjEwNEU3MDAwMDBDNzA2MEYzNzA1MDBFOTY1MDFFOEQ1MDRDNjA2OURBMQorOjEwNEU4MDAwMzYwMEM3MDY5QjM2MDAwMEM3MDYwRjM3MDUwMEM3MDY2OQorOjEwNEU5MDAwQTgwMjAwMDBDNzA2NEMzNzAxMDBFNTAyMjVGOUZGMEQwNgorOjEwNEVBMDAwMDMwMDBEMDA4ODI1RUZGRjBEMDA0MDBEMDAwNEU3MDIxMAorOjEwNEVCMDAwRTk2N0ZDQjg5QTAzQ0QzOUY3MDZGNDMzMDAxMDc1MDk5OQorOjEwNEVDMDAwQzcwNjMzMzcwMjAwRTkxNjAxRkYwRTMzMzc3NDAzRTlEMgorOjEwNEVEMDAwMEQwMUZGMDY4RTM0ODMwRUMyMzQwOEM3MDYzRDM3MDMyQQorOjEwNEVFMDAwMDBFOUZGRkFDMzUyNTBCQUUwMDBCODAwMTBFRjU4NUE3OAorOjEwNEVGMDAwQzNDNzA2M0QzNzAwMDBFOUU5RkFGQUU4NTQwNEI4ODA3MAorOjEwNEYwMDAwMDM4RUMwMjZDNzA2MDQwMEQ4MkJCODdGMDM4RUMwMjZBOAorOjEwNEYxMDAwQzcwNjA0MDBFODJDMzNDMDhFQzBBMUE3MzZBM0E5MzY2QgorOjEwNEYyMDAwQTFBOTM2RTcwMEExQUIzNkU3MDJDNzA2MDUzNzAwMDBBNgorOjEwNEYzMDAwQzcwNjA3MzcwMDAwQzcwNjA5MzcwMDAwQzYwNjlEMzZCQQorOjEwNEY0MDAwMDBDNjA2OUUzNkZGQzcwNjlCMzYwMDAwQzcwNkEzMzY3RQorOjEwNEY1MDAwMDAwMEM3MDYwRjM3MDAwMEM3MDZBODAyMDAwMEM3MDZGQQorOjEwNEY2MDAwNEMzNzAxMDA4MTI2QUYzNkZGRTdBMUFGMzZFNzA2QkIxRAorOjEwNEY3MDAwRkY3RkNENTNFODdDRjlFNTU2MEQwMjAwRTc1NkZCQzNGMQorOjEwNEY4MDAwOEQzRUMwNTM4RDM2RjAzOEI5MEUwMDhCMUUzMDM0ODlGQgorOjEwNEY5MDAwNUMwMjJFOEI0NTAyODk0NDA2MkU4QjA1ODk0NDA0ODNDRQorOjEwNEZBMDAwQzcwNDgzQzYxMEUyRThCODgwMDM4RUMwMjZDNzA2MDQ5MworOjEwNEZCMDAwMDBFMjUxQjg3RjAzOEVDMDI2QzcwNjA0MDBCMjUyMzMwOAorOjEwNEZDMDAwQzA4RUMwQzcwNkExMzYwMTAwQzcwNjBGMzcwNTAwQzM1MworOjEwNEZEMDAwMzNGRjhFMDZBNjAyOEIzNkE0MDIyRUZGQTRBMDUzRTg1MAorOjEwNEZFMDAwOENEQkMzRTg0OEY3RTlGNkZGOEUwNjM4MzRFODA3RTFDMgorOjEwNEZGMDAwMjZDNzA2MDQwMERGNEZDRDUwQzMyNkM3MDYwQTAwMDBBRgorOjEwNTAwMDAwMDAyNkZGMjYwNDAwQ0QzNEU5RDRGRkExRDEzNjI2Mzk4RAorOjEwNTAxMDAwMDYxQTAwNzUyMkExRDMzNjI2MzkwNjFDMDA3NTE4QTE4MAorOjEwNTAyMDAwRDUzNjI2MzkwNjFFMDA3NTBFMjZGNzA2MEMwMDQwMDAwMAorOjEwNTAzMDAwNzQwNTgzMEU2NjM3NDA4MTBFQUYzNjAwMTBBMUFGMzY3RgorOjEwNTA0MDAwRTcwNjgzM0VBMzM2MDI3NTA1Q0QzNEU5NTZGQjgzM0U2MQorOjEwNTA1MDAwQTMzNjAwNzRCMTgzM0VBMzM2MDU3N0FBMjZGNjA2MEE2NgorOjEwNTA2MDAwMDBGRjc1QTJFOEZEREQ1MEY2MDY5MzM2MjA3NTAzRTlEMgorOjEwNTA3MDAwOEMwMDI2QTEwQzAwMjUwNzAwM0QwNzAwNzUwM0U5NzY4QQorOjEwNTA4MDAwMDAzRDA1MDA3NTAzRTk2RTAwRjcwNkU2MzQxODgwNzVFQgorOjEwNTA5MDAwMDNFOTZBMDBGNzA2RTYzNDAwODA3NDM1MjY4MDNFMjk2RAorOjEwNTBBMDAwMDAwMjc1MkQ1MTU2NTc4RDM2M0UzNDhEM0UyMDAwQjk4NQorOjEwNTBCMDAwMDYwMEYzQTY1RjVFNTk3NTQ1MjZBMTIwMDBBMzNFMzQ4NQorOjEwNTBDMDAwMjZBMTIyMDBBMzQwMzQyNkExMjQwMEEzNDIzNEU5MjZDRAorOjEwNTBEMDAwMDBGNzA2RTYzNDA4MDA3NDBCMjY4MDNFMTkwMDAwNzRDMQorOjEwNTBFMDAwMDNFOTEzMDBGNzA2RTYzNDEwMDA3NDEyMjZBMDI4MDAyNgorOjEwNTBGMDAwQzBFODA0MjJDMDc0MDcyNkM3MDYwNDAwRkZGRjU4MjMzNworOjEwNTEwMDAwQzA3NDAzRTlEREZFODEyNjlCMzZGRkZFMjZBMTIwMDA0OAorOjEwNTExMDAwM0IwNkQxMzY3NTFBMjZBMTIyMDAzQjA2RDMzNjc1MTAwMAorOjEwNTEyMDAwMjZBMTI0MDAzQjA2RDUzNjc1MDY4MTBFOUIzNjAwMDE2QworOjEwNTEzMDAwMjZBMTIwMDAyNTdGRkZBM0I4MzQyNkExMjIwMEEzQkExMAorOjEwNTE0MDAwMzQyNkExMjQwMEEzQkMzNDhCQzY4NkM0QTNDMDM0RDFBQQorOjEwNTE1MDAwRTY4MEZDMDk3NDAzRThGNkY1QTEwNTM3MEIwNjA3Mzc2RQorOjEwNTE2MDAwMEIwNjA5Mzc3NDNFMjZBMTIwMDAzQjA2MDUzNzc1MTc0QworOjEwNTE3MDAwMjZBMTIyMDAzQjA2MDczNzc1MEQyNkExMjQwMDNCMDYxOQorOjEwNTE4MDAwMDkzNzc1MDNFOTFEMDAyNkEwMjgwMDI0MEYzQzAzNzQ4RAorOjEwNTE5MDAwMUIzQzAwNzUwRjgzM0VBMzM2MDQ3NDEwRjcwNjlCMzY0NAorOjEwNTFBMDAwMDAwMTc0MDgyRUZGOTRGODUzRTkzM0ZFQ0QzNEM3MDY4RQorOjEwNTFCMDAwM0QzNzAxMDBFOTJDRjg4MzNFQTMzNjA1NzQxMDgzM0U4OQorOjEwNTFDMDAwQTMzNjAxN0UwOTgzRUUxNjJFRkY5NDI0NTRDM0NEMzRGQQorOjEwNTFEMDAwQzMyNkExMEMwMDNERkY3Rjc0MDUyNkZGMjYwNDAwRTlDRAorOjEwNTFFMDAwRkRGREExRjQzM0E5MDA4ODc0MEJBOTAwMTA3NTA5OEI4QgorOjEwNTFGMDAwMUU0MzM3RkZFM0U5OTcwMEM3MDYzNTM3MDUwMEM3MDZBQQorOjEwNTIwMDAwNDMzNzI4NTJGNzA2RjQzMzAwMDg3NDA2QzcwNjQzMzdCRAorOjEwNTIxMDAwMUE1MkI4ODAwM0NEMzlFOUM1RkRBOTAwMDg3NEQ5RkYzOQorOjEwNTIyMDAwMEUzNTM3NzVFREU5MzAwMEE5MDAwODc1Q0JGRjBFMzU1NgorOjEwNTIzMDAwMzc3NURGODEwRUMyMzRDMDAwRjYwNjlEMzY4MDc0MEZDQworOjEwNTI0MDAwODEwRTlCMzYwMDgwQzcwNjBGMzcwMjAwRTk5MEZEQzcyQworOjEwNTI1MDAwMDYzRDM3MDIwMEU5OEJGNzgwMjY5RTM2RkY3NTMwRjY1MworOjEwNTI2MDAwMDY5RDM2ODA3NDIwRkYwNjk0MzQ4MzBFNjYzNzIwOEVBOAorOjEwNTI3MDAwMDYzMDM0MjZGNzA2MEEwMDAwMDE3NDA3MjY4MTBFMDg1RQorOjEwNTI4MDAwMDAwMDAxRTkwOTAwQzcwNjNEMzcwNDAwRTk1NEY3ODEzMQorOjEwNTI5MDAwMEVBRjM2MDAwOEExQUYzNkU3MDZFNTBBQTkwMDgwNzQxNAorOjEwNTJBMDAwMEU4MTI2QUYzNkZGRjdBMUFGMzZFNzA2RTk0OUZGRTlFMQorOjEwNTJCMDAwMkRGREM3MDY0MTM3MDAwMEJFMjkwMEU4MkJGREU5MUU4MQorOjEwNTJDMDAwRkRDRDM0ODMzRUEzMzYwNDc3MDlDNzA2M0QzNzAxMDA4MAorOjEwNTJEMDAwRTkxMEY3RTkwOUZEQ0QzNEMzQzcwNjlCMzYwMDAwRThBNQorOjEwNTJFMDAwMENGNTgxMjZBRjM2RkZFN0ExQUYzNkU3MDY4MTI2OUI5NgorOjEwNTJGMDAwMzZGRjdGRTUwMjBEMDEwMDI1RUZGRjI1RkZERkU3MDIwNgorOjEwNTMwMDAwQkJGRjdGQ0Q1MzMzQzBBMzlEMzZBMzlGMzZFODIwRjM2OAorOjEwNTMxMDAwRTg0M0YzODMwRTlCMzYxMEM3MDY5OTM2MDAwMEU4RDJBNworOjEwNTMyMDAwRjVFNTU2MEQwMjAwRTc1NkM3MDZBODAyMDAwMEJFMDBDQworOjEwNTMzMDAwMDBFODMwRjVDNjA2QTAzNjBFQjg5QzAzQ0QzOUI4ODAxQgorOjEwNTM0MDAwMDBDRDM1QzcwNkFBMDJGRkZGQzcwNkExMzYwMTAwRTk1NgorOjEwNTM1MDAwQTVGNjA2Qjg4RjAzQ0QzQUI4OTAwM0NEM0FCODkxMDNCRAorOjEwNTM2MDAwQ0QzQUI4OTIwM0NEM0FCODkzMDNDRDNBQjg5NDAzQ0Q3MQorOjEwNTM3MDAwM0FCODk1MDNDRDNBQjg5NjAzQ0QzQUI4OTcwM0NEM0FFQgorOjEwNTM4MDAwQjg5ODAzQ0QzQUI4OTkwM0NEM0FCODlBMDNDRDNBQjg1NAorOjEwNTM5MDAwOUIwM0NEM0FCODdGMDNDRDNBQjg4MDAzQ0QzQTA3QzMxQgorOjEwNTNBMDAwRjc0OUYxNEVERjRGREY0RkRGNEZERjRGRjg1MURGNEY0RgorOjEwNTNCMDAwRkE0RjBCNTBEMTUxREY0RkRGNEZERjRGREY0RkRGNEY0MQorOjEwNTNDMDAwRTQ0RTA2MDBDRDRBMDQwMEU0NEUxOTAwQUQ0QkZBMDA0RAorOjEwNTNEMDAwODI0QzA4MDcwOTRDMTQwMDI0NEU2NDAwRDc0REY0MDE5OAorOjEwNTNFMDAwNjQ0RUJDMDI3QTRFRTgwMzQzNEUwMjAwQjM0RUY0MDExMQorOjEwNTNGMDAwNUI0RUY0MDFFNTRFMTQwMDA2NTAwNjUwOTU0Q0MxNTIyOAorOjEwNTQwMDAwQzE1MkZFNENEQTRDMDY1MDA2NTAwNjUwMDY1MEI3NTFCOQorOjEwNTQxMDAwQjc1MUI3NTFCNzUxQjc1MUI3NTEwNjUwRDU0QTA2NTA5OQorOjEwNTQyMDAwMUQ0QzA2NTA4MzREMUY0RDFGNERFRDQwRkE0MDA3NDE2NgorOjEwNTQzMDAwMzczNzJFMzczNzIwMjA3OTc5MkY3OTc5MkY3OTc5MjBDRQorOjEwNTQ0MDAwMzAzMTJFMzkzMDIwMjAzMDMyMkYzMTM3MkYzOTM5MjA2QQorOjEwNTQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwNTQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwNTQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwNTQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwNTQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwNTRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwNTRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwNTRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwNTREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwNTRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwNTRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwNTUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwNTUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwNTUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwNTU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwNTU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwNTU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwNTU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwNTU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwNTU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwNTVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwNTVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwNTVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwNTVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwNTVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwNTVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwNTYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwNTYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwNTYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwNTY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwNTY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwNTY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwNTY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwNTY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwNTY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwNTZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwNTZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwNTZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwNTZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwNTZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwNTZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwNTcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwNTcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwNTczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwNTc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwNTc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwNTc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwNTc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwNTc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwNTc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwNTdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwNTdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwNTdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwNTdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwNTdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwNTdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwNTgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwNTgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwNTgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwNTg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwNTg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwNTg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwNTg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwNTg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwNTg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwNThBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwNThCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwNThDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwNThEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwNThFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwNThGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwNTkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwNTkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwNTkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwNTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwNTk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwNTk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwNTk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwNTk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwNTk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwNTlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwNTlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwNTlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwNTlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwNTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwNTlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwNUExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwNUEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwNUEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwNUE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwNUE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwNUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwNUE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwNUE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwNUE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwNUFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwNUFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwNUFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwNUFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwNUFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwNUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwNUIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwNUIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwNUIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwNUI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwNUI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwNUI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwNUI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwNUI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwNUI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwNUJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwNUJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwNUJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwNUJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwNUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwNUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwNUMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwNUMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwNUMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwNUM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwNUM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwNUM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwNUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwNUM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwNUM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwNUNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwNUNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwNUNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwNUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwNUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwNUNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwNUQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwNUQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwNUQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwNUQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwNUQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwNUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwNUQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwNUQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwNUQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwNURBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwNURCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwNURDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwNUREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwNURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwNURGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwNUUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwNUUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwNUUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwNUU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwNUU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwNUU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwNUU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwNUU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwNUU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwNUVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwNUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwNUVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNUVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwNUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwNUVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwNUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwNUYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwNUYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwNUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwNUY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwNUY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwNUY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwNUY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwNUY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwNUZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwNUZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwNUZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNUZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwNUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwNUZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwNjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwNjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwNjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwNjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwNjA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwNjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwNjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwNjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwNjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwNjBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwNjBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwNjBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwNjBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwNjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwNjBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwNjExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwNjEyMDAwOTBFQUMwMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDEzMDYwNworOjAwMDAwMDAxRkYKKy8qCisgKiBUaGUgZmlybXdhcmUgdGhpcyBkcml2ZXIgZG93bmxvYWRzIGludG8gdGhlIHRva2VucmluZyBjYXJkIGlzIGEKKyAqIHNlcGFyYXRlIHByb2dyYW0gYW5kIGlzIG5vdCBHUEwnZCBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhlIExpbnV4CisgKiBzaWRlIGRyaXZlciBhbmQgdGhlIHJvdXRpbmUgdGhhdCBsb2FkcyB0aGlzIGRhdGEgaW50byB0aGUgY2FyZCBhcmUuCisgKgorICogVGhpcyBmaXJtd2FyZSBpcyBsaWNlbnNlZCB0byB5b3Ugc3RyaWN0bHkgZm9yIHVzZSBpbiBjb25qdW5jdGlvbgorICogd2l0aCB0aGUgdXNlIG9mIDNDb20gM0MzNTkgVG9rZW5SaW5nIGFkYXB0ZXJzLiBUaGVyZSBpcyBubworICogd2FyYW50eSBleHByZXNzZWQgb3IgaW1wbGllZCBhYm91dCBpdHMgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuCisgKi8KKworLyogM2MzNTlfbWljcm9jb2RlLm1hYzogM0NvbSAzQzM1OSBUb2tlbnJpbmcgbWljcm9jb2RlLgorICoKKyAqIE5vdGVzOgorICogIC0gTG9hZGVkIGZyb20geGxfaW5pdCB1cG9uIGFkYXB0ZXIgaW5pdGlhbGl6YXRpb24uCisgKgorICogQXZhaWxhYmxlIGZyb20gM0NvbSBhcyBwYXJ0IG9mIHRoZWlyIHN0YW5kYXJkIDNDMzU5IGRyaXZlci4KKyAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvTWFrZWZpbGUgYi9maXJtd2FyZS9NYWtlZmlsZQppbmRleCBjNmFmNjFiLi4xNjY2NDg5IDEwMDY0NAotLS0gYS9maXJtd2FyZS9NYWtlZmlsZQorKysgYi9maXJtd2FyZS9NYWtlZmlsZQpAQCAtMjYsNiArMjYsNyBAQAogZWxzZQogYWNlbmljLW9ianMgOj0gYWNlbmljL3RnMS5iaW4gYWNlbmljL3RnMi5iaW4KIGVuZGlmCitmdy1zaGlwcGVkLSQoQ09ORklHXzNDMzU5KSArPSAzY29tLzNDMzU5LmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19BQ0VOSUMpICs9ICQoYWNlbmljLW9ianMpCiBmdy1zaGlwcGVkLSQoQ09ORklHX0FEQVBURUNfU1RBUkZJUkUpICs9IGFkYXB0ZWMvc3RhcmZpcmVfcnguYmluIFwKIAkJCQkJIGFkYXB0ZWMvc3RhcmZpcmVfdHguYmluCkBAIC0zOSw2ICs0MCw3IEBACiBmdy1zaGlwcGVkLSQoQ09ORklHX0RWQl9UVFVTQl9CVURHRVQpICs9IHR0dXNiLWJ1ZGdldC9kc3Bib290Y29kZS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfRTEwMCkgKz0gZTEwMC9kMTAxbV91Y29kZS5iaW4gZTEwMC9kMTAxc191Y29kZS5iaW4gXAogCQkJICAgICBlMTAwL2QxMDJlX3Vjb2RlLmJpbgorZnctc2hpcHBlZC0kKENPTkZJR19QQ01DSUFfU01DOTFDOTIpICs9IG9zaXRlY2gvWGlsaW54N09ELmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19TTUNUUikgKz0gdHJfc21jdHIuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX1NORF9LT1JHMTIxMikgKz0ga29yZy9rMTIxMi5kc3AKIGZ3LXNoaXBwZWQtJChDT05GSUdfU05EX01BRVNUUk8zKSArPSBlc3MvbWFlc3RybzNfYXNzcF9rZXJuZWwuZncgXApAQCAtNDcsNiArNDksMTIgQEAKIAkJCQkgICAgIHNiMTYvaW1hX2FkcGNtX2luaXQuY3NwIFwKIAkJCQkgICAgIHNiMTYvaW1hX2FkcGNtX3BsYXliYWNrLmNzcCBcCiAJCQkJICAgICBzYjE2L2ltYV9hZHBjbV9jYXB0dXJlLmNzcAorZnctc2hpcHBlZC0kKENPTkZJR19TTElDT1NTKSArPSBzbGljb3NzL2diZG93bmxvYWQuc3lzIHNsaWNvc3MvZ2JyY3Z1Y29kZS5zeXMgXAorCQkJCXNsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5zeXMgXAorCQkJCXNsaWNvc3Mvb2FzaXNkb3dubG9hZC5zeXMgXAorCQkJCXNsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5zeXMKK2Z3LXNoaXBwZWQtJChDT05GSUdfU1hHKSArPSBzeGcvc2FoYXJhZG93bmxvYWRCLnN5cyBcCisJCQkJc3hnL3NhaGFyYWRiZ2Rvd25sb2FkQi5zeXMKIGZ3LXNoaXBwZWQtJChDT05GSUdfU05EX1lNRlBDSSkgKz0geWFtYWhhL2RzMV9jdHJsLmZ3IHlhbWFoYS9kczFfZHNwLmZ3IFwKIAkJCQkgICB5YW1haGEvZHMxZV9jdHJsLmZ3CiBmdy1zaGlwcGVkLSQoQ09ORklHX1RFSFVUSSkgKz0gdGVodXRpL2JkeC5iaW4KQEAgLTkxLDYgKzk5LDcgQEAKIGZ3LXNoaXBwZWQtJChDT05GSUdfVVNCX1NFUklBTF9YSVJDT00pICs9IGtleXNwYW5fcGRhL3hpcmNvbV9wZ3MuZncKIGZ3LXNoaXBwZWQtJChDT05GSUdfVVNCX1ZJQ0FNKSArPSB2aWNhbS9maXJtd2FyZS5mdwogZnctc2hpcHBlZC0kKENPTkZJR19WSURFT19DUElBMikgKz0gY3BpYTIvc3R2MDY3Ml92cDQuYmluCitmdy1zaGlwcGVkLSQoQ09ORklHX1lBTSkgKz0geWFtLzEyMDAuYmluIHlhbS85NjAwLmJpbgogCiBmdy1zaGlwcGVkLWFsbCA6PSAkKGZ3LXNoaXBwZWQteSkgJChmdy1zaGlwcGVkLW0pICQoZnctc2hpcHBlZC0pCiAKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL1dIRU5DRSBiL2Zpcm13YXJlL1dIRU5DRQppbmRleCAwMGI2ZTNjLi5kNmMyMjdkIDEwMDY0NAotLS0gYS9maXJtd2FyZS9XSEVOQ0UKKysrIGIvZmlybXdhcmUvV0hFTkNFCkBAIC0zNjQsNiArMzY0LDU5IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0RyaXZlcjogU0xJQ09TUyAtIEFsYWNyaXRlY2ggSVMtTklDIHByb2R1Y3RzCisKK0ZpbGU6IHNsaWNvc3MvZ2Jkb3dubG9hZC5zeXMuaWhleAorRmlsZTogc2xpY29zcy9nYnJjdnVjb2RlLnN5cy5paGV4CitGaWxlOiBzbGljb3NzL29hc2lzZGJnZG93bmxvYWQuc3lzLmloZXgKK0ZpbGU6IHNsaWNvc3Mvb2FzaXNkb3dubG9hZC5zeXMuaWhleAorRmlsZTogc2xpY29zcy9vYXNpc3JjdnVjb2RlLnN5cy5paGV4CisKK0xpY2VuY2U6CisJCUNvcHlyaWdodCAoQykgMTk5OS0yMDA5IEFsYWNyaXRlY2gsIEluYy4KKworCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlCisJcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dAorCUFsYWNyaXRlY2gncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsCisJaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4KKworCVRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoCisJQWxhY3JpdGVjaCBoYXJkd2FyZS4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBTWEcgLSBBbGFjcml0ZWNoIElTLU5JQyBwcm9kdWN0cworCitGaWxlOiBzeGcvc2FoYXJhZG93bmxvYWRCLnN5cy5paGV4CitGaWxlOiBzeGcvc2FoYXJhZGJnZG93bmxvYWRCLnN5cy5paGV4CisKK0xpY2VuY2U6CisJCUNvcHlyaWdodCAoQykgMTk5OS0yMDA5IEFsYWNyaXRlY2gsIEluYy4KKworCWFzIGFuIHVucHVibGlzaGVkIHdvcmsuIFRoaXMgbm90aWNlIGRvZXMgbm90IGltcGx5IHVucmVzdHJpY3RlZCBvcgorCXB1YmxpYyBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGZyb20gd2hpY2ggdGhpcyBmaXJtd2FyZSBpbWFnZSBpcworCWRlcml2ZWQuICBFeGNlcHQgYXMgbm90ZWQgYmVsb3cgdGhpcyBmaXJtd2FyZSBpbWFnZSBtYXkgbm90IGJlCisJcmVwcm9kdWNlZCwgdXNlZCwgc29sZCBvciB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dAorCUFsYWNyaXRlY2gncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisJUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlCisJaW1hZ2UgYXMgcGFydCBvZiBhIExpbnV4IG9yIG90aGVyIE9wZW4gU291cmNlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsCisJaW4gdGV4dCBvciBiaW5hcnkgZm9ybSBhcyByZXF1aXJlZC4KKworCVRoaXMgZmlybXdhcmUgbWF5IG5vdCBiZSBtb2RpZmllZCBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoCisJQWxhY3JpdGVjaCBoYXJkd2FyZS4KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogRHJpdmVyOiBjeGdiMyAtIENoZWxzaW8gVGVybWluYXRvciAzIDFHLzEwRyBFdGhlcm5ldCBhZGFwdGVyCiAKIEZpbGU6IGN4Z2IzL3QzYl9wc3JhbS0xLjEuMC5iaW4uaWhleApAQCAtNDkzLDMgKzU0Niw1MyBAQAogRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiBZQU0gLSBZQU0gZHJpdmVyIGZvciBBWC4yNQorCitGaWxlOiB5YW0vMTIwMC5iaW4KK0ZpbGU6IHlhbS85NjAwLmJpbgorCitMaWNlbmNlOgorICogKEMpIEY2RkJCIDE5OTgKKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRHJpdmVyOiAzQzM1OSAtIDNDb20gM0MzNTkgVG9rZW4gTGluayBWZWxvY2l0eSBYTCBhZGFwdGVyCisKK0ZpbGU6IDNjb20vM0MzNTkuYmluCisKK0xpY2VuY2U6CisvKgorICogVGhlIGZpcm13YXJlIHRoaXMgZHJpdmVyIGRvd25sb2FkcyBpbnRvIHRoZSB0b2tlbnJpbmcgY2FyZCBpcyBhCisgKiBzZXBhcmF0ZSBwcm9ncmFtIGFuZCBpcyBub3QgR1BMJ2Qgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoZSBMaW51eAorICogc2lkZSBkcml2ZXIgYW5kIHRoZSByb3V0aW5lIHRoYXQgbG9hZHMgdGhpcyBkYXRhIGludG8gdGhlIGNhcmQgYXJlLgorICoKKyAqIFRoaXMgZmlybXdhcmUgaXMgbGljZW5zZWQgdG8geW91IHN0cmljdGx5IGZvciB1c2UgaW4gY29uanVuY3Rpb24KKyAqIHdpdGggdGhlIHVzZSBvZiAzQ29tIDNDMzU5IFRva2VuUmluZyBhZGFwdGVycy4gVGhlcmUgaXMgbm8KKyAqIHdhcmFudHkgZXhwcmVzc2VkIG9yIGltcGxpZWQgYWJvdXQgaXRzIGZpdG5lc3MgZm9yIGFueSBwdXJwb3NlLgorICovCisvKiAzYzM1OV9taWNyb2NvZGUubWFjOiAzQ29tIDNDMzU5IFRva2VucmluZyBtaWNyb2NvZGUuCisgKgorICogTm90ZXM6CisgKiAgLSBMb2FkZWQgZnJvbSB4bF9pbml0IHVwb24gYWRhcHRlciBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBBdmFpbGFibGUgZnJvbSAzQ29tIGFzIHBhcnQgb2YgdGhlaXIgc3RhbmRhcmQgM0MzNTkgZHJpdmVyLgorICovCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogUENNQ0lBX1NNQzkxQzkyIC0gU01DIDkxQ3h4IFBDTUNJQQorCitGaWxlOiBvc2l0ZWNoL1hpbGlueDdPRC5iaW4KKworTGljZW5jZTogQWxsZWdlZGx5IEdQTCwgYnV0IG5vIHNvdXJjZSB2aXNpYmxlLiBNYXJrZWQ6CisgICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmaXJtd2FyZSBvZiBTZXZlbiBvZiBEaWFtb25kcyBmcm9tIE9TSVRFQ0guCisgICAgKFNwZWNpYWwgdGhhbmtzIHRvIEtldmluIE1hY1BoZXJzb24gb2YgT1NJVEVDSCkKKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL29zaXRlY2gvWGlsaW54N09ELmJpbi5paGV4IGIvZmlybXdhcmUvb3NpdGVjaC9YaWxpbng3T0QuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlODA4NQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL29zaXRlY2gvWGlsaW54N09ELmJpbi5paGV4CkBAIC0wLDAgKzEsMTc3IEBACis6MTAwMDAwMDBGRjA0QTAzNkYzRUNGRkZGRkZERkZCRkZGM0ZGRkZGRjcyCis6MTAwMDEwMDBFRjNGRkZGN0ZGRkZGRkZGRUY3RkZFRkZDRUZFRkVGRThECis6MTAwMDIwMDBGRURFQkREREZERkZGRENGRjdCRjdGRkY3RjNGRkVCRkUzCis6MTAwMDMwMDBGRkZGRkZCQ0ZGRkZCREI1N0Y3RkJGQkY3RkZGRUZGRkFGCis6MTAwMDQwMDBGRkZGRkJGRkY3RjdGRkZGRkZGRkZFREVGRUZFRkFERTFFCis6MTAwMDUwMDBCREZERURGREZEQ0ZFRkVGRUZFRkM3REZERkRGREZERjUyCis6MTAwMDYwMDBGRjdFRkVGRDdENkRFRUZFN0NGQkY0RkJDRkRCREZGRjU0Cis6MTAwMDcwMDBGRkJCN0ZGRjdGRkZGN0ZGOUVCRjNCQkZCRjdGN0Y3RjQxCis6MTAwMDgwMDA3RTZGREZFRkY1RjZGREY2RjVFREVCRkZFRkVGRUY3RUMwCis6MTAwMDkwMDA3RjdGNkY3RkZGRkVGRUZFRkVGRUVGQkZGRkZGRkZGRkQ1Cis6MTAwMEEwMDBGRkZGRkZGRkZGRkZCQzFGMUZFRUZGQkNCN0ZGREZGRjFGCis6MTAwMEIwMDBERkVGM0JFM0QzRkZGQkZGRkZERkZGRkZGRkJBQkYyRDA3Cis6MTAwMEMwMDBEQkJERkREQkRGRkFGQkZGRUZGQkRCRjNGRkRGRkQ3RkRCCis6MTAwMEQwMDBFRkZCRkZGRkJFQkYyN0JBRkVGQkRGRkZGNkZGRkZFRjIwCis6MTAwMEUwMDBGQkRCRjNEOTlBM0ZGRkFGQkZGRkZGQkUzRjM3QkQ5NkEzCis6MTAwMEYwMDBGRkZGRkZGRkZGRkZBRUZCRjNGM0VCRkZGRkZGRkZGRjkxCis6MTAwMTAwMDBGRkY3RkFCQ0FFRkVCRUZFQkI3RkZERkY3RkVGRjdGQjQ1Cis6MTAwMTEwMDBCQkQ3Rjc3RkZGRjdGRkZGRjdCQ0VERkRCRDlEN0Q3QkY0Cis6MTAwMTIwMDBGQjdCN0JGQkFGRkZGRUZERkRGRUZFRkZGRkZGRkZGNzRFCis6MTAwMTMwMDBBQUI5QkY4RkJGREZGRjdGRkZGRjdGQ0ZGQkVCQ0JFQjBBCis6MTAwMTQwMDBFRUZGRkZEN0ZGRkZGRjNFMzMzRjFDN0NGQ0ZGRkZGRkFFCis6MTAwMTUwMDBGRkZGQ0ZEM0YzRTNGM0ZCRkZGRkZGRkZGRkVCRkUzNTIyCis6MTAwMTYwMDAzRjNERkRGREZGRkZGRkJGRkZFRjZGRTNFM0UzRUZGRjY5Cis6MTAwMTcwMDBGRkRGRkZGRkY3RkUzRTVFRkVGRkZGRkZGRkZERkZGRjFECis6MTAwMTgwMDBBRkNGRjJDQkNGOEVGRkZGRkZGRkZGRkRGQzNFMUY5RUU4Cis6MTAwMTkwMDBBREZERkZGRkJGRkZGRkVGRkZCM0Y3RTdGN0ZBRkZGRjhDCis6MTAwMUEwMDBGRkZGRkZFRUVCQUJBRjlGRTM3RkZGREVGRjdGRUVGRkQ2Cis6MTAwMUIwMDBGRkZCM0FGQUZGRjI3N0ZGRkZGN0ZFRkZGRUJEQUVERTcwCis6MTAwMUMwMDA3RDdERkRGRkJGRUVGRkZERkZEQkZCRkZGN0VGRkJGRkRDCis6MTAwMUQwMDBGRkZFRkYyREFGQjlGRDc5RkJGQUZGQkZFRkZGRkY5MUU3Cis6MTAwMUUwMDBGQUZCREZGN0Y3RkZGRkZGRkNDRjM3QkZCRkZGN0Y3RkQzCis6MTAwMUYwMDBGRkZGRkZBRkZGRkZGM0ZCRkJGRkY1RUZGRkZGRjdGQTlBCis6MTAwMjAwMDBGRkZGRUVGQUZFRkI1NURERkY3RkFGRkVGRkZCRkJGNUM4Cis6MTAwMjEwMDBGRkY3RUZGRkZGRkZCRUJEQkRCREJEN0Q3QjdCN0I3QkUxCis6MTAwMjIwMDBGQkFFRkZGREZFRkZGRkZGRkZGRkZGRkZGN0RBQjc2MTQ5Cis6MTAwMjMwMDBGRkI5NTlGMzczRjNERjdGNkZERkVGRjdFQkVCRDdGRjE2Cis6MTAwMjQwMDBEN0ZGRkZGN0ZFN0ZGQjNFMzg3M0Y2N0ZGQ0ZGRkZDRjQzCis6MTAwMjUwMDBGRkI3RkJCM0IzNjdGRkU3RkRGRkVGRjY3RkI3QkNGNTcyCis6MTAwMjYwMDA3QkY2RjdGNUZGRkZFRkZGRjdGRkY3Q0VFN0ZGOUZGRjA2Cis6MTAwMjcwMDBGRkY1RkU3REZGNUZGRkZGRkZGRkZGRkZGRkVGRkZGNkQ0Cis6MTAwMjgwMDBDQkRCRUVGRUZGREZGRkZGRkZGRTdGQkUxRTNFRkVGRjZECis6MTAwMjkwMDA3REZFRkZGRkVGQkZFN0ZGRTNFM0ZGREZFN0ZGRkZGRkM5Cis6MTAwMkEwMDBCOEVGQjcyRkVFRkZERkZGQkZGRjdGRUZFQkJGQTNEM0FBCis6MTAwMkIwMDBGRjdGRkZGRkZGRkZGN0JFRkQzRkNGRkRGQkZGRkZGRjBGCis6MTAwMkMwMDBGRkZGQUZGQkJGQkJCRkRCRkRGQkZGRkZGRkZGM0VGRTQyCis6MTAwMkQwMDAzRkJBQkFGRUZGRkZGRkVGRkZFRkMzN0ZCMjlCRkZGRjA2Cis6MTAwMkUwMDBGRkZGRkVGRkZGM0NGRjNGM0NGRkZFRkZGRkZGRkZGRjY2Cis6MTAwMkYwMDBBRkYzRkVGM0UzRUJGRkZGRkZGQkZGRjc5QUZFQUY5RUNBCis6MTAwMzAwMDBCRUZFRkZERkZGRkY3QkVGRjdCRkZCRkJGQkZGRkY3RkM3Cis6MTAwMzEwMDBGRkZGRkZCQ0JERkRCREREN0Q3QjdCN0I3QkZCQUVGRkJGCis6MTAwMzIwMDBGRkZGRkVGRUZGRkRGRkZGRkZGNzlBRkY5RkZGQUZFRjBFCis6MTAwMzMwMDBGRkZGRkZGRjdGQ0ZGM0ZGRUJGRkVCRkZGRkJGRkZGRkYxCis6MTAwMzQwMDBFRkZFRkYzN0ZDQkZGRkZGRkZGRkZGRkZDRkVGRkRGMzI3Cis6MTAwMzUwMDBGRkVFRkVGRkZGRkZGRkZGNkVGRDJGRkRGRkZERkZGRjI2Cis6MTAwMzYwMDBGRkZGRkZFRkNGRkZGM0JGNjlGRkZGRkZGRkZGRkZGRUMwCis6MTAwMzcwMDBGQjlGRkZCRkZERkZGRkZGRkZGRkVGODdGRURBRUZDRjIxCis6MTAwMzgwMDBGRkZGRkZGRkZGRkZGRUVGQkZFRkVGRkRGRkZGRkZGRkYwCis6MTAwMzkwMDBGRkVGRkRGRjdCRkZFQkZFRkZGRkZGRkZFQkY4RkZFRjQzCis6MTAwM0EwMDBBRkZGRkZCREZGRkZGRjdGRUU3RkVGRkZCQkZGQkZGQjk4Cis6MTAwM0IwMDBGRkZGRkZGN0Y2RkJCREZERERGNUZGRkZGRkZGRkZBRjIyCis6MTAwM0MwMDBGRjVGRjVERkZGN0ZGRkZGRkZGRkZGRjZGM0ZGREVGRUJFCis6MTAwM0QwMDBFRkZERkZGRkZGRkZFRkZGREVERjVGREZGREZGRkZGRjUyCis6MTAwM0UwMDBGRkZGRkVGRkZGRkVGRUZGRkRGRkZGRkZGRkFGRkZGRjcyCis6MTAwM0YwMDBFRkVERkZERkZGRkZGQkZGRkZEQUJEQkVBRUZFN0ZGRENGCis6MTAwNDAwMDBERkZGRkY3RkVGRkZGQkZCRkI3RkY3RkZGRkZGRkZGNzQ4Cis6MTAwNDEwMDBCQ0ZEQkRCREJERkQ3QjdCN0I3QkZCQUVGRkZGRkRGRjYwCis6MTAwNDIwMDBGRkZGRkRGRkZGRkZGRkZBOUZCRkJGQ0Y3RkZGRkZGRjczCis6MTAwNDMwMDBGRkZGQUZGRkVCRUJFQkZGRDdGRUZGRkZCRkU3RkVCRjFBCis6MTAwNDQwMDA3RkZDRkZGRkVERkZGRkZGRkY0RkZGRkJGQkZGRkZERDJCCis6MTAwNDUwMDBGRkZGRkZGRkZGRkVCRERGOURGRERGQjlGRkZGRkZGRkQ5Cis6MTAwNDYwMDBFRkZGRkJFRkVCRkZERUZGRkZGRkZGRkZGNjlGRkZGQzYxCis6MTAwNDcwMDBGRUZCRkRGRkZGRkZGRkVGREZGQUNEQ0ZCRjlGRkZGRkNBCis6MTAwNDgwMDBGRkZGRjdGRUJGRkZERkVGNUZGRkZGRkZGRjdGNkZGRkE1Cis6MTAwNDkwMDBCQkZERkZGRkZGRkZGRkZGRkZGRjdFRkY1RkZGQkZCRjUzCis6MTAwNEEwMDBGOUZGRkZGRjdGNkU3QkZGRUZGREVCREZGRkZGRkZGRjNECis6MTAwNEIwMDBGN0I2M0VGQ0ZEQkY3RUZCRkZGRkZGRjdFRkY3RjNGNzVDCis6MTAwNEMwMDBGRkZCRkZGRkZGRkZGRkZGNkUzNTc5RkZCRkZDRkZGRjY0Cis6MTAwNEQwMDBGRkZGRkZFRkZCNTNERkZGRUJCRkZGRkZGRkZGRkZCQ0EzCis6MTAwNEUwMDBGRkZGRkZCRkZGRkRGRkZGRkZGRkFGRjVGRkY3RkZGQkM0Cis6MTAwNEYwMDBGRkZGRkZGRkZGRkZCQUFBRUVGRTNGN0RGREZGRkZGRkZDCis6MTAwNTAwMDA3RkFGNzdGQkZCRkZGQkY3RkZGRkZGRkZGN0JFQkRCRDM0Cis6MTAwNTEwMDBCREJERkQ3QjdCN0I3QkZCQUVGRkVGRkZGRkZGRkZGQ0U5Cis6MTAwNTIwMDBGRkZGRkZGRjlBRDlCOEZGRkY3OUZGRkZGRkZGRkZDRjYzCis6MTAwNTMwMDBGQkZGRUJGRkVCRDdGRkZGRkZGRkU3REVGOEZCRkUzRjI0Cis6MTAwNTQwMDBGQkZERkZGRkZGRkZDRkFEQkZGQUZGNzNERkZGRkZGRjM0Cis6MTAwNTUwMDBGRkZGM0FGNUI3RkMzRkY5RkRGRkZGRkY3RkVGRjNGRjI5Cis6MTAwNTYwMDBCRkZFRjM5RkZFRkZGRkZGRjczRUZGRkZGRkJGRkZGRjUyCis6MTAwNTcwMDBGRkZGRkZGRkFGRDNGRURCRkZEQkRGRkZGRkZGRkZGRjcwCis6MTAwNTgwMDAzRUZGQkZGRjdGRkZGREZGRkZGRkZGOEZGM0ZGRURGRjhDCis6MTAwNTkwMDBGN0ZCRkZGRkZGRkZFRkY2M0NGRUZGRkZGRkZGRkZGRjU0Cis6MTAwNUEwMDBGRjlGRUZFRkQxRkZGRkZGRkZGRkZGRkZGRkZGN0VCRkNBCis6MTAwNUIwMDBGREZGRkZGRkZGRkZGRkZGQkJFRkRGRjFGRkZGRkZGRkNGCis6MTAwNUMwMDBGRkZGRkZGRkZGRUUzRUZFRkZGRkZGRkZGRkZGRkZCRjRFCis6MTAwNUQwMDBFRkZEQzNGRkZGRkZGRkZGRkZGRkJGRkZGQzNFRkVGRjdFCis6MTAwNUUwMDBGRkZGRkZGRkZGRkZGRjJFRUZGM0ZGRkZGRkZGRkZGRjA4Cis6MTAwNUYwMDBGRkZGRjdCQUJFRkVGRkZGRkZGRkZGRkZGRjdGQUZGQjZFCis6MTAwNjAwMDBGQkZERkZGRkZGRkVGRkZGRkZGMkQ2RURCREJEQkQ3RDkxCis6MTAwNjEwMDA3QjdCN0I3QkZCQUZERkZGRkZGRkZGRkZGRkZGRkZGRjZFCis6MTAwNjIwMDBGRjkyQkZGRkZGRkZGRkZGRkZGRkZGN0ZBRkVCRUJGRjdGCis6MTAwNjMwMDBGRkZGRkZGRkZGRkZGRkU3RkUyRUZFRkZGRkZGRkZGRkI1Cis6MTAwNjQwMDBGRkZGRkY0RkVGRjNGRkZGRkZGRkZGRkZGRkZGRkZGRTg3Cis6MTAwNjUwMDAzQ0ZFRkZGRkZGRkZGRkZGRkZGRkVGQ0VDM0ZERkZGRkVECis6MTAwNjYwMDBGRkZGRkZGRkZGRkZGRTVERkZGRkZGRkZGRkZGRkZGRjNECis6MTAwNjcwMDBGRkVGQ0ZFQkZGRkZGRkZGRkZGRkZGRkZGN0VFM0VGRkI4Cis6MTAwNjgwMDBGRkZGRkZGRkZGRkZGRjdGRUZERkUyRkZGRkZGRkJGRjRCCis6MTAwNjkwMDBGRkZGRkZGRkY2QkVGQ0ZGRkZGRkZGRkZGRkZGN0ZFRTQ4Cis6MTAwNkEwMDA1RkU2RkZGRkZGRkZGRkZGRkZGRkZGM0U3REZGRkZGRjU2Cis6MTAwNkIwMDBGRkZGRkZGRkZGRkZFRkYzRkJGRkZGRkZGRkZGRkZGRjZBCis6MTAwNkMwMDBCRkY3MzZCRUZFRkZGRkZGRkZGRkZGRkZGRkVGRDNGNkQyCis6MTAwNkQwMDBGRUZGRkZGRkZGRkZGRkZGRkZGQzdGRUVGRkZGRkZGRkJGCis6MTAwNkUwMDBGRkZGRkZGRkFGRUZFQkZGRkZGRkZGRkZGRkZGRkZGRjhFCis6MTAwNkYwMDBCQUJFRkVGRkZGRkZGRkZGRkZGRkZGRUVGQkZBRkZGRkFCCis6MTAwNzAwMDBGRkZGRkZGRkZGRkZGN0Q2RkRCREJEQkQ3RDdCN0I3QjAwCis6MTAwNzEwMDA3QkZCQUVGRjdFRkZGRkZGRkZGRkZGRkZGRkY3QkFCRkQwCis6MTAwNzIwMDBGRkZGRkZGRkZGRkZGRkZGN0ZFRkVCNkJGRkZGRkZGRjExCis6MTAwNzMwMDBGRkZGRkZGRkY3RkVCRUZFRkZGRkZGRkZGRkZGRkZGRjE0Cis6MTAwNzQwMDA0RkVGRjdGRkZGRkZGRkZGRkZGRkZGRUYzRTZFRkNGRkU2Cis6MTAwNzUwMDBGRkZGRkZGRkZGRkZGRkVGQzNDOUZGRkZGRkZGRkZGRjJCCis6MTAwNzYwMDBGRkZGRkYzRUJGRkZGRkZGRkZGRkZGRkZGRkZGRUZGQkFFCis6MTAwNzcwMDBENUZGRkZGRkZGRkZGRkZGRkZGRkZFRkVGRUZGRkZGRkI2Cis6MTAwNzgwMDBGRkZGRkZGRkZGNkZFRkZCRkZGRkZGRkJGRkZGRkZGRjIxCis6MTAwNzkwMDBGRkY2REZGRkZGRkZGRkZGRkZGRjdGRkVFRkZGRkZGRjIzCis6MTAwN0EwMDBGRkZGRkZGRkZGRkZFN0ZGRkVGRkY3RkZGRkZGRkZGRjdBCis6MTAwN0IwMDBGRjdGRkFFRkJGRkZGRkZGRkZGRkZGRkZGRkU3RkZGRTM3Cis6MTAwN0MwMDBGRkZGRkZGRkZGRkZGRkZGN0ZGRUVGQkZGRkZGRkZGRjBBCis6MTAwN0QwMDBGRkZGRkZGRkE3RkZGQ0Y3RkZGRkZGRkZGRkZGRkY3RjBDCis6MTAwN0UwMDBGRUFFRkZGRkZERkZGRkZGRkZGRkZGRTdGN0ZBRkZGRDk0Cis6MTAwN0YwMDBGRkZGRkZGRkZGRkZGRjdGQUZGRkZGRkZGRkZGRkZGRkQ5Cis6MTAwODAwMDBGRkZGRkZGN0JFQkRCREJEQkQ3RDdCN0I3QjdCRkJBRjJGCis6MTAwODEwMDA3RkZGRkZGRkZGRkZGRkZGRkZGRkZGQ0FGRkZGRkZGRjlECis6MTAwODIwMDBGRkZGRkZGRkZGN0Y2RkZGRkZGRkZGRkZGRkZGRkZGRkU4Cis6MTAwODMwMDBGRkU3RkVGRkZGRkZGRkZGRkZGRkZGRkZGRkNGRkVGRjEyCis6MTAwODQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRURGRkZGRkZGRkZGRkQ5Cis6MTAwODUwMDBGRkZGRkZGRkVGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkI5Cis6MTAwODYwMDBGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkE5Cis6MTAwODcwMDBGRkZGRkZGRkZGRkZGN0ZFRkZGRkZGRkZGRkZGRkZGRjkxCis6MTAwODgwMDBGRkZGRUZGRkZFRkZGRkZGRkJGRkZGRkZGRkU3RjJGQ0I1Cis6MTAwODkwMDBFRkZGRkZGRkZGRkZGRkZGN0ZBRUVGRkZGRkZGRkZGRjU5Cis6MTAwOEEwMDBGRkZGRkZGRkY3N0VGREZGRkZGRkZGRkZGRkZGRkZGRkUzCis6MTAwOEIwMDBFRkZGRkVGRkZGRkZCRkZGRkZGRkJGRkZGRUZFRkZGRkRCCis6MTAwOEMwMDBGRkZGRkZGRkZGRkZERkVGRERGRUZGRkZGRkZGRkZGRjhCCis6MTAwOEQwMDBGRkZGRkZGRUZFRkZGRkZGRkZGRkZGRkZGRkZGQUZFRjhBCis6MTAwOEUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkJBRkVGRkZGRkZGRjVFCis6MTAwOEYwMDBGRkZGRkZGRkZGRUZGQUZFRkZGRkZGRkZGRkZGRkZGRjFFCis6MTAwOTAwMDBGNjlDQkRCREJEQkQ3RDdCN0I3QjdCRkJBRUZGRkZGRjUyCis6MTAwOTEwMDBGRkZGRkZGRkZGRkZGRkY3N0FGRkZGRkZGRkRGRkZGRjk0Cis6MTAwOTIwMDBGRkZGNkZFRkY3RkZGRkZGREZGRkZGRkZGRkZGRjdGRUE4Cis6MTAwOTMwMDBGRUZGRkZGRkRGRkZGRkZGRkZGRkNGRUJGRkZGRkZGRjJDCis6MTAwOTQwMDBGRkZGRkZGRkZGRUY5RUZDRkZGRkZGRkZGRkZGRkZGRjJCCis6MTAwOTUwMDBGRkVGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkM4Cis6MTAwOTYwMDBGRkZGRkZGRkZGRkZGRjdGRUZDQkZGRkZGRkZGRkZGRDVECis6MTAwOTcwMDBGRkZGRkZGRkJFRkRGRkZGRkZGRkZGRkZGRkZGRkZFRkRBCis6MTAwOTgwMDBFRkZGRkZGRkRGRkZGRkZGRkZGRkZGRjhGRkZGRkZGRkFFCis6MTAwOTkwMDBCRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkI3Cis6MTAwOUEwMDBGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGQkFGN0ZGRjJDCis6MTAwOUIwMDBGRkZGREZGRkZGRkZGRkZGRkZGRUVGRkZGRkZGRkZGRjc4Cis6MTAwOUMwMDBGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGQkZGRjg3Cis6MTAwOUQwMDBGRUZGRkZGRkZGRkZGRkZGRkZGRkZGQUVGRkZGRkZGRjc5Cis6MTAwOUUwMDBGRkZGRkZGRkZGRkZGN0ZBRkZGRkZGRkZGRkZGRkZGRjI0Cis6MTAwOUYwMDBGRjdGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3QkNCRDI0Cis6MTAwQTAwMDBCREJEQkQ3RDdCN0I3QjdCRkJBRkZGRkZGRkZGRkZGRkEyCis6MTAwQTEwMDBGRkZGRkZGRkY3RkFGRkZGRkZGRkZGRkZGRkZGRkY3RjczCis6MTAwQTIwMDBBRjdGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRUZGRkZGRkI3Cis6MTAwQTMwMDBGRkZGRkZGRkZGRkZGRkNGRkZGRkZGRkZGRkZGRkZGRkY2Cis6MTAwQTQwMDBGRkZGRkZGRUZGRkZGRkZGRkZGRkZCRkZGRkZGRUZGRkNCCis6MTAwQTUwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkE3Cis6MTAwQTYwMDBGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZCRkZGRkZGRkU2Cis6MTAwQTcwMDBGRkZDRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRjk5Cis6MTAwQTgwMDBGRkZGRkJGRkZGRkZGRkVGRkVGRjlGOUY5RjNGM0YzRkVCCis6MTAwQTkwMDAzRjNGRkZFRkRGREZERkRGQ0ZCN0JGQkZCRkJGRkZCQzMxCis6MTAwQUEwMDBCOTlEQkRCRDdEN0I3QjdCN0JGQkVGRDdGNUYzRjFEMUEyCis6MTAwQUIwMDA2NUUzRTNFM0EzRkZGRTdGRkVERURFRkZCREJEQkRCRDVDCis6MTAwQUMwMDBERkVGRkJGN0YzRjNGM0U3RTdFN0U3RTdGQkZFRkZGRjEzCis6MEEwQUQwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRjI2Cis6MDAwMDAwMDFGRgorVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmaXJtd2FyZSBvZiBTZXZlbiBvZiBEaWFtb25kcyBmcm9tIE9TSVRFQ0guCisoU3BlY2lhbCB0aGFua3MgdG8gS2V2aW4gTWFjUGhlcnNvbiBvZiBPU0lURUNIKQpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvc2xpY29zcy9nYmRvd25sb2FkLnN5cy5paGV4IGIvZmlybXdhcmUvc2xpY29zcy9nYmRvd25sb2FkLnN5cy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMTdlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9zbGljb3NzL2diZG93bmxvYWQuc3lzLmloZXgKQEAgLTAsMCArMSw2MTQ4IEBACis6MTAwMDAwMDAwMjAwMDAwMDAwODAwMDAwMDAwMDAxMDAwMDAwMDAwMDZECis6MTAwMDEwMDAwMDgwMDAwMDEyMDAwMDQwODFCMjAwMDAxODAwMDA0MDgzCis6MTAwMDIwMDA4MUIyMDAwMDFFMDAwMDQwODFCMjAwMDAwMzAwMDA0MEM5Cis6MTAwMDMwMDA4MUIyMDAwMDAwMDAwMEE4OThCMDAxMDAwNDgwQTI0MDM2Cis6MTAwMDQwMDBGRDdGMDAwMDA5MDBBMjQ5REQ3RDAwMDAwMDAwMDA0QzlBCis6MTAwMDUwMDA4MEIyMDEwMDA3MDAwMDQwRDFCMTAwMDAwMDAwMDA0QzU4Cis6MTAwMDYwMDA4MEIyMDEwMDA5MDBBMjQwNzU3RDAwMDA2MDAwMDA0MEUwCis6MTAwMDcwMDA2MTk5MDEwMDBCMDBBOEIxN0UzMTAwMDAwOTAwMDA0MDI5Cis6MTAwMDgwMDA4MUIyMDAwMDExMDAwMDQwODFCMjAwMDAwMDgwMUZFOTMxCis6MTAwMDkwMDAxODMxMDAwMDAwMDA0MUU5ODBCMjAxMDAwRjAwNDBFOTgyCis6MTAwMEEwMDA4MEIyMDAwMDAwMDAwMDQwQTU5OTAxMDAxNjAwMjk0MDIwCis6MTAwMEIwMDA4MTMyMDAwMDE2MDAxNEJDODAzMjAwMDAwRjAwOTNCQzk3Cis6MTAwMEMwMDA4MDMyMDAwMDAwMDA1MDQwODFCMjAxMDAwMDgwMDA0MEZBCis6MTAwMEQwMDA4MUIyMDAwMDEwMDAwMDQwQTU5OTAxMDAxQzAwMjk0MEQ5Cis6MTAwMEUwMDA4MTMyMDAwMDFDMDAxNEJDODAzMjAwMDAxMTAwOTNCQzVGCis6MTAwMEYwMDA4MDMyMDAwMDAwMDA1MDQwODFCMjAxMDAwMTgwMDA0MEM5Cis6MTAwMTAwMDA4MUIyMDAwMDIwMDAwMDQwQTU5OTAxMDAyMjAwMjk0MDkyCis6MTAwMTEwMDA4MTMyMDAwMDIyMDAxNEJDODAzMjAwMDAwRTAwOTNCQzJCCis6MTAwMTIwMDA4MDMyMDAwMDAwMDAwMDQ5REQ4MTAxMDAyQjAxMDA0MDA5Cis6MTAwMTMwMDA4MTMyMDEwMDNDMDEwMDQwODEzMjAxMDAyNzAwMTRCQ0UzCis6MTAwMTQwMDA4MDMyMDAwMDE0MDExM0JDODAzMjAwMDA1NDk1MDA0MDNFCis6MTAwMTUwMDA0NTk5MDEwMEZGRkYwMDQwRTU5OTAxMDAwMDAwMkY0MDk0Cis6MTAwMTYwMDA0OUIxMDEwMDAwMDAwMDQwRTFCMTAxMDAwMDAwMDA0Qjc2Cis6MTAwMTcwMDBCN0IzMDEwMDAwMDAwMDQwQjVCMzAxMDBEOTAwMDA0MDUyCis6MTAwMTgwMDBCMzMzMDEwMDAwMDAwMDQwQjZEMzAxMDAzMjAwOTVFODBGCis6MTAwMTkwMDA4MDMyMDAwMEZGRkYwMEU4ODA4ODAxMDBCODAwMjY0MEEwCis6MTAwMUEwMDA4MTMyMDAwMDAwMDAwMDQwRkRCMzAxMDAwMDAwMDA0MDZCCis6MTAwMUIwMDBGRkIzMDEwMDNDMDAyMjUwODM2QzAwMDAwMDAwMDA0NUFBCis6MTAwMUMwMDBGRDkzMDEwMEE1QTUwMEE2QjRBNzAxMDAzQzAwQTI1MDI0Cis6MTAwMUQwMDBCNTczMDAwMDAwMDEwMDQwODEzMjAxMDAzQzAwQTI0NURGCis6MTAwMUUwMDA4MDMyMDAwMDAwMDAwMDQ2RkQ5MzAxMDA0MTAwMDA0MDA1Cis6MTAwMUYwMDA4MUIyMDAwMDdGMDAwMDIwRjVDRjAxMDAxQzAxMDBGQTUxCis6MTAwMjAwMDBCMzMzMDEwMEE1QTUwMERBQjVBQjAxMDA5OTAwQTI1MEY3Cis6MTAwMjEwMDBCNTYzMDAwMDAwMDAwMDQ0RkQ5MzAxMDBENTAwMDA0NEQ4Cis6MTAwMjIwMDBCMzMzMDEwMDAwMDAwMDQwRDU5OTAxMDAwMDAwMDBEQTVFCis6MTAwMjMwMDBEN0IxMDEwMEZGRkYwMERBRUQ4QjAxMDBENTAwMDA0NkM5Cis6MTAwMjQwMDBCMzMzMDEwMDA4MDAwMDQwRDU5OTAxMDAwMDAwMDBEQTM2Cis6MTAwMjUwMDBEN0IxMDEwMEZGMDAwMERBRUY4QjAxMDBGRjAwMDBEQUU4Cis6MTAwMjYwMDBFMzhGMDEwMEQ1MDAwMDQ4QjMzMzAxMDAzQzAwMDA0MDlCCis6MTAwMjcwMDBENTk5MDEwMEZGMDAwMERBRDc4RDAxMDBGRkZGMDBEQUY5Cis6MTAwMjgwMDBGMURCMDEwMEZGMDAwMERBRTk4QjAxMDAwMDAwMDA0ODBCCis6MTAwMjkwMDBFOUUzMDEwMEQ1MDAwMDRCQjMzMzAxMDAyQzAwMDA0MDFFCis6MTAwMkEwMDBENTk5MDEwMDAwMDAwMERBRDdCMTAxMDBENTAwMDA0QzVCCis6MTAwMkIwMDBCMzMzMDEwMEZGRkYwMERBRUJEQjAxMDBENTAwMDA0RTk1Cis6MTAwMkMwMDBCMzMzMDEwMDAzMDAwMERBODE4ODAxMDAwMDAwMDA1QzA0Cis6MTAwMkQwMDA4MUUwMDEwMEZGRkYwMERBQjVEQjAxMDA1QzAwMjY0MDkxCis6MTAwMkUwMDA4MTMyMDAwMDAxMDAwMERBQjVDRjAxMDAwMEYwMDBBNzY0Cis6MTAwMkYwMDBCNDg3MDEwMDAwMDAwMERBODE5NDAxMDAwMDAwMDA0MDkyCis6MTAwMzAwMDBEOEIxMDEwMEQ1MDAwMDUwQjMzMzAxMDBGRkZGMDBEQTdGCis6MTAwMzEwMDBCNThCMDEwMDYyMDAyNjRDQjU2MzAwMDAwMTAwMDBEQUQ1Cis6MTAwMzIwMDBCNUNGMDEwMDAwMDAwMERBREZCMTAxMDBENTAwMDA1MkI2Cis6MTAwMzMwMDBCMzMzMDEwMEZGMDAwMERBNEI4OTAxMDAwODAwMDBEQTQ2Cis6MTAwMzQwMDBERkY3MDEwMEZGMDAwMEVGREY4QjAxMDA2OTAwMjI0MEIyCis6MTAwMzUwMDBERjdGMDAwMDAwMDAwMDQ3RkQ5MzAxMDAyMDAwMDA0MDA3Cis6MTAwMzYwMDBCMzlCMDEwMEQ1MDAwMDQwODEzMjAxMDAwNjAwMDA0MDJGCis6MTAwMzcwMDBENTk5MDEwMDA4MDAwMERBRDdFNTAxMDBGODAwMDBEQTlECis6MTAwMzgwMDBCMzhCMDEwMDM0MDAwMDQwRDU5OTAxMDAwMDAwMDBEOTcyCis6MTAwMzkwMDBEN0IxMDEwMDAyMDAwMEQ5RDVDOTAxMDAwMDAwMDBEQTgwCis6MTAwM0EwMDBEN0IxMDEwMDIyMDAwMDQwQjM5QjAxMDBENTAwMDA0MEZFCis6MTAwM0IwMDA4MTMyMDEwMDAwMDAwMDQ4QjVGMzAxMDAwMzAwMDBEQUJCCis6MTAwM0MwMDA3Qjg5MDEwMDAwMDEwMDQwREQ5QjAxMDBENTAwMDA1RDNDCis6MTAwM0QwMDBCMzMzMDEwMEZGRkYwMERBRTc4QjAxMDA4QTAwMjY0MEZCCis6MTAwM0UwMDA4MTMyMDAwMDAwMDAwMDQxRkQ5MzAxMDAwMDAwMDA1MDM4Cis6MTAwM0YwMDBFN0UzMDEwMDAwMDEwMDQwRDU5OTAxMDAwMDAwMDBGNjhDCis6MTAwNDAwMDBFNzk3MDEwMDAwMDAwMEYzRDdCMTAxMDBENTAwMDA1RUJFCis6MTAwNDEwMDBCMzMzMDEwMEZGMDAwMERBRTU4QjAxMDAwMDAwMDA0ODYzCis6MTAwNDIwMDBFNUUzMDEwMDA4MDEwMDQwRDU5OTAxMDBGRjAwMDBEQTcyCis6MTAwNDMwMDBCNThGMDEwMDAwMDAwMEY3QjU5NzAxMDAwMDAwMDBEQTU5Cis6MTAwNDQwMDBEN0IxMDEwMDNDMDEwMDQwRDU5OTAxMDAwMDAwMDBGODNGCis6MTAwNDUwMDBFNTk3MDEwMDAwMDAwMEYyRDdCMTAxMDAwMDAyMDA0MDYyCis6MTAwNDYwMDBERDlCMDEwMDk2MDAyMkY1ODEzMjAwMDAwMDAwMDA0MjcxCis6MTAwNDcwMDBGRDkzMDEwMDAwMDAwMEVFRDVCMTAxMDAwMDAwMDBGNjgwCis6MTAwNDgwMDBFQjk3MDEwMDAwMDAwMEY1RDdCMTAxMDAwODAwMDBFQTc5Cis6MTAwNDkwMDBENEM5MDEwMDAwMDAwMEY3RTM5NzAxMDAwMDAwMDBGMTVCCis6MTAwNEEwMDBEN0IxMDEwMDNDMDAwMEVFRERDQjAxMDAwMDAwMDBFRTAyCis6MTAwNEIwMDBENUIxMDEwMDAwMDAwMEY4RTk5NzAxMDAwMDAwMDBGNDQ4Cis6MTAwNEMwMDBEN0IxMDEwMEQ1MDAwMDRBQjMzMzAxMDBGRkZGMDBEQUM1Cis6MTAwNEQwMDBERDg5MDEwMEI3MDAwMDQwODFCMjAwMDAwMDAwMDA0MDRCCis6MTAwNEUwMDBENTk5MDEwMDA1MDAwMEE2RDZCMTAxMDA5QTEzMDBFQkQyCis6MTAwNEYwMDBENjk5MDEwMDA4MDAwMDQwRDU5OTAxMDAwMDAyMDBBNjJECis6MTAwNTAwMDBENkIxMDEwMDAxMDAwMEVCRDY5OTAxMDAyQzAwMDA0MDlCCis6MTAwNTEwMDBENTk5MDEwMDA1MDAwMEE2RDZCMTAxMDA5QTEzMDBFQkExCis6MTAwNTIwMDBENjk5MDEwMDNDMDEwMDQwRDU5OTAxMDAwMDAyMDA0MDJECis6MTAwNTMwMDBENzk5MDEwMDAwMDAwMDQyRkQ5MzAxMDAzQzAwMDA0MEZCCis6MTAwNTQwMDBENTk5MDEwMDAwMDAwMEE2RDZCMTAxMDAwMDAxMDBFQjIyCis6MTAwNTUwMDBENjk5MDEwMDAwMDEwMDQwRDU5OTAxMDAwNjAwMDBBNkNGCis6MTAwNTYwMDBENkIxMDEwMDlBMTMwMEVCRDY5OTAxMDAwODAxMDA0MEIyCis6MTAwNTcwMDBENTk5MDEwMDAwMDIwMEE2RDZCMTAxMDAwMTAwMDBFQkYwCis6MTAwNTgwMDBENjk5MDEwMDAwMDAwMDQwRDlCMTAxMDAwMDAwMDA0MEYwCis6MTAwNTkwMDBERkIxMDEwMDA2MDAwMDQwRDU5OTAxMDBBMDAwMDBBNkNGCis6MTAwNUEwMDBENkIxMDEwMDY0MDAwMDQwNEI5OTAxMDAwMDAwMDA0MEZBCis6MTAwNUIwMDA3Qjk5MDEwMDAyMDQwMDQwREQ5OTAxMDBCNzAwMTNCQ0UzCis6MTAwNUMwMDA4MDMyMDAwMDAyMDgwMDQwREQ5OTAxMDAwMDAwMDA0QzZDCis6MTAwNUQwMDBERDkxMDEwMEI4MDA5NUU4ODQzMDAwMDAwMDAwMkZFOUFCCis6MTAwNUUwMDBGQUIzMDEwMDAwMDAwMDQwRDFCMTAxMDBGRjAwMDA0MjU5Cis6MTAwNUYwMDA4MDg4MDEwMDM0MDAwMDQwODBDRTAxMDBCODAwQTY0MDkxCis6MTAwNjAwMDA4MTMyMDAwMEMxMDAwMDQwODEzMjAxMDAwMjgwMjI0MDlFCis6MTAwNjEwMDA4MDMyMDAwMEI4MDAwMDQwODFCMjAwMDAwMDAwMDA0RkFFCis6MTAwNjIwMDA4MUIwMDEwMENBMDAwOUY5ODEzMjAwMDBDODAwMDhGOTUwCis6MTAwNjMwMDA4MTMyMDAwMEQ0MDAxRkZERjkzMzAwMDBDNzAwOUVGRDg5Cis6MTAwNjQwMDA4MTMyMDAwMDAwMDAwMDRBRjM5MzAxMDAwMDAwODA0ODVFCis6MTAwNjUwMDBGMzkzMDEwMDAwMDAwMEZERjdCMzAxMDAwMDAwODA0OUEyCis6MTAwNjYwMDBGMzkzMDEwMDAwMDAwMEZDMTlCMTAxMDBDRjAwMEFGOTZBCis6MTAwNjcwMDA4MTMyMDAwMDAwMDA0MEZCODFCMjAxMDAwMDAwNDFGRDFBCis6MTAwNjgwMDA4MUIyMDEwMDAwMDc4MEY5RjM4RjAxMDAwMDA3NDJGOUYxCis6MTAwNjkwMDBGMzhGMDEwMEQzMDBBMkZGRjc2RjAwMDAwMDAwNDM0MDdBCis6MTAwNkEwMDA4MUIyMDEwMDAwMDBBMkZGRkJFRjAwMDAwMDAwODBGQzBGCis6MTAwNkIwMDBFMUIxMDEwMDAwMDA4MDQwODFCMDAxMDBEODAwMDZGRUQ5Cis6MTAwNkMwMDA4MTMyMDAwMDAwMDAwMDQxQjNFMzAxMDAxQzAxMDBGQTg4Cis6MTAwNkQwMDBCM0MzMDAwMERBMDAwMDQyOERCMDAwMDAwMDAwMDA0MTBBCis6MTAwNkUwMDA4REIwMDEwMDAwMDQwMDQwODM5ODAxMDBFQjAwMDA0MDQxCis6MTAwNkYwMDA4MTMyMDEwMDAwMDAwMDUwODNCMDAxMDAwMDAwODQ5NkE4Cis6MTAwNzAwMDA4MEIyMDAwMDI2MDEwMDQwODEzMjAxMDAyNTAxMDA0MDM2Cis6MTAwNzEwMDAyRDExMDEwMDAwMDAwMDQwMkQ4MTAxMDAwMDAwMDBEQUQxCis6MTAwNzIwMDBCNUVCMDEwMEU0MDA4NDk2ODAzMjAwMDBFNTAwMDA0MDUzCis6MTAwNzMwMDBCNTkzMDAwMDAwMDAwMDQwQjU4MzAxMDBERTAwQTI0MTM3Cis6MTAwNzQwMDA4MzUwMDAwMDAwMDAwMDQyMkQ4MTAxMDAyNjAxMDA0MTdECis6MTAwNzUwMDAyRDAxMDEwMDAwMDAwMDQxQjNDMzAxMDBEQTAwQTI0MUY1Cis6MTAwNzYwMDA4RDUwMDAwMDAwMDA4MERBQjVCRjAxMDAwMDAwMDA0QjkyCis6MTAwNzcwMDA4MUIwMDEwMDAwMDAwMERCODFEMDAxMDAwMDAwMDBEOTQxCis6MTAwNzgwMDBCOUIzMDEwMDAwMDAwMDQwQjhFMzAxMDAwMDAwMDBEQzQ0Cis6MTAwNzkwMDBCOUVCMDEwMDAwMDAwMDQxQjg5NzAxMDAxNTAwMDBEQzMyCis6MTAwN0EwMDBCOUU3MDEwMDAwMDAwMDQxMkQ4MTAxMDAwMDAwMDBEQkRECis6MTAwN0IwMDA4MUIwMDEwMDI3MDEwMDQyMkQxMTAxMDAyNTAxMDA0MEY4Cis6MTAwN0MwMDAyRDExMDEwMDI4MDEwMDQwMkQwMTAxMDAwMDAwMDA0MTExCis6MTAwN0QwMDAyRDkxMDEwMDI2MDEwMDQwODEzMjAxMDAyNTAxMDA0MEQ5Cis6MTAwN0UwMDAyRDExMDEwMDAwMDAwMDQwMkQ4MTAxMDAwMDAwQTI0MUY4Cis6MTAwN0YwMDA4MUQwMDAwMDAwMDA4NDk2ODAzMjAxMDBGRjAwQTBEQzYwCis6MTAwODAwMDBCOTZCMDAwMEY4MDAwMDQxMkQ5MTAwMDBGODAwMDA0MTk0Cis6MTAwODEwMDAyRDgxMDAwMEQ4MDAwMDQwQjMzMzAxMDAwMDAwOTBEQUMxCis6MTAwODIwMDA4QkIwMDAwMDExMDAwMDQ1ODhGNDAxMDA0MDAwMDA0NDM2Cis6MTAwODMwMDA4MENFMDEwMDAwMDBBNDQwODFCMjAwMDAwMDAwQTM0NDZCCis6MTAwODQwMDA4OUVDMDAwMDAwMDAwMDQyODlEMDAxMDAwMDAwMDA0MjU1Cis6MTAwODUwMDA4N0IwMDEwMEQ5MDAwMDQzQjIzMzAxMDAwMDAwMDA1MDBFCis6MTAwODYwMDBCNUYzMDEwMDBDMDFBMERBOEI0MDAwMDAwMDAwMDA0MTRDCis6MTAwODcwMDA4QkMwMDEwMDAwMDAwMDQxODdDMDAxMDAwODAxQTI0MUI3Cis6MTAwODgwMDA4OTUwMDAwMEZGRkYwMDQ1ODg4ODAxMDAxMDAwMDA0NUU2Cis6MTAwODkwMDA4QUY0MDEwMDEyMDE5MDQ0OEE0MDAwMDAwMDAwMDA0MUU3Cis6MTAwOEEwMDA4QkMwMDEwMEZGRkYwMDQ1OEFBODAxMDAwMDAwODA1MEI2Cis6MTAwOEIwMDA4QkUwMDEwMDAwODAwMDQwRjk5QjAxMDAwMEMwMDA0MDc3Cis6MTAwOEMwMDBCM0NGMDEwMDFDMDEwMEZDMTkzMTAxMDAxQzAxNDBEQTBBCis6MTAwOEQwMDA4MTMyMDEwMDAwMDA0MURBODFCMjAxMDAwMDAwMDA0MUQ0Cis6MTAwOEUwMDBGOUMzMDEwMDE2MDE5RkRBODEzMjAwMDAwMjgwMDA0MDQ2Cis6MTAwOEYwMDA4MUIyMDAwMDAwMDAwMDQ0OTFCMDAxMDAwMDAwMDBEOTY2Cis6MTAwOTAwMDAyQkIxMDEwMDFFMDE5Rjk0ODAzMjAwMDAxODAwMDA5NDVBCis6MTAwOTEwMDA5MkU0MDEwMDAwMDAwMDQ4QjVGMzAxMDAwMDAwMDA0OTI2Cis6MTAwOTIwMDBCNDk3MDEwMDAwMDAwMDQxQjNDMzAxMDAxRDAxQTI0MUMyCis6MTAwOTMwMDA5MTUwMDAwMDAwMDA4MDQwMkJCMTAxMDAyOTAxMDA1MUJFCis6MTAwOTQwMDA5M0IwMDAwMDI5MDEwMDREOTNCMDAwMDAyOTAxMDA0OTM3Cis6MTAwOTUwMDA5M0IwMDAwMDAwMDAwMDQyOTNCMDAxMDAyOTAxQTI0MUMxCis6MTAwOTYwMDA5MzUwMDAwMDAwMDA4MDQwODFCMjAxMDAwMDAwMTA0MDYwCis6MTAwOTcwMDA4MUIyMDEwMDAwMDAxMTQwODFCMjAxMDAwMDAwMTI0MDZDCis6MTAwOTgwMDA4MUIyMDEwMDAwMDAxMzQwODFCMjAxMDAwMDAwMTQ0MDU4Cis6MTAwOTkwMDA4MUIyMDEwMDAwMDAxNTQwODFCMjAxMDAwMDAwMTY0MDQ0Cis6MTAwOUEwMDA4MUIyMDEwMDAwMDAxNzQwODFCMjAxMDAwMDAwMTg0MDMwCis6MTAwOUIwMDA4MUIyMDEwMDAwMDAxOTQwODFCMjAxMDAwMDAwMUE0MDFDCis6MTAwOUMwMDA4MUIyMDEwMDAwMDAxQjQwODFCMjAxMDAwMDAwMUM0MDA4Cis6MTAwOUQwMDA4MUIyMDEwMDAwMDAxRDQwODFCMjAxMDAwMDAwMUU0MEY0Cis6MTAwOUUwMDA4MUIyMDEwMDAwMDAxRjQwODFCMjAxMDAwMDAwODA0MDgwCis6MTAwOUYwMDA4MUIyMDEwMDAwMDQwMDQwQTE5OTAxMDAwMDAwMDA1MEY0Cis6MTAwQTAwMDBBMUQxMDEwMDAwMDAwMDQwMUJCMDAxMDAwMDAwMDA0MDI3Cis6MTAwQTEwMDAxOUIwMDEwMDAwMDAwMDQwMTdCMDAxMDAwMDAwMDA0MEM0Cis6MTAwQTIwMDAxNUIwMDEwMDAwMDAwMDQwMTNCMDAxMDAwMDAwMDA0MEJDCis6MTAwQTMwMDAxMUIwMDEwMDAwMDAwMDQwMEZCMDAxMDAwMDAwMDA0MEI0Cis6MTAwQTQwMDAwREIwMDEwMDAwMDAwMDQwMEJCMDAxMDAwMDAwMDA0MEFDCis6MTAwQTUwMDAwOUIwMDEwMDAwMDAwMDQwMDdCMDAxMDAwMDAwMDA0MEE0Cis6MTAwQTYwMDAwNUIwMDEwMDAwMDAwMDQwMDNCMDAxMDAwMDAwMDA0MDlDCis6MTAwQTcwMDAwMUIwMDEwMDQ0MDEyMDQ4QTE1MTAwMDAwMDAwODA0MDY1Cis6MTAwQTgwMDA4MUIyMDEwMDUwMDEyMjRCNzQ3RDAwMDAwMDAwODA0MEMzCis6MTAwQTkwMDA4MUIyMDEwMDYwMDAwMDRCNjA5OTAxMDAwMDAwMDBCMUNDCis6MTAwQUEwMDA3RUIxMDEwMDUxMDFBODQwODEzMjAwMDA0RTAxMDA0MDlBCis6MTAwQUIwMDA4MUIyMDAwMDA0MDA4MDQwOTc5ODAxMDAwMDAwMDA1OEI3Cis6MTAwQUMwMDAwNzkwMDEwMEYzOUYwMDQwODFCMjAwMDAwMDAwMDA0NDQ1Cis6MTAwQUQwMDBBNUIzMDEwMEFGMDIwMDQwODEzMjAxMDBDNTAyMDA0MDExCis6MTAwQUUwMDA4MTMyMDEwMDAwMDAwMDVDMDc5MDAxMDBGMzlGMDA0MDhDCis6MTAwQUYwMDBCRkIzMDAwMDVGMDEyMkNDODU3RjAwMDAwMDAwMDA1MUUxCis6MTAwQjAwMDAwNzkwMDEwMEYzOUYwMDQwODFCMjAwMDAwMDAwMDA0MDA4Cis6MTAwQjEwMDA0OUIxMDEwMEFFMDMwMENCQTNDOTAxMDBEMDE0MDA0MENECis6MTAwQjIwMDBBMTlCMDEwMDAwMDAwMDIwNDZCMTAxMDAwMDAwMDA0ODI4Cis6MTAwQjMwMDBGMUIxMDEwMDAwMDAwMEQwRjFCMTAxMDAwMDAwMDBDQUQ1Cis6MTAwQjQwMDBGMUIxMDEwMDAwMDAwMEQ1RTFCMTAxMDAwNzAwMDA0MDUzCis6MTAwQjUwMDA2MTk5MDEwMDIwMDAwMDIwNjJERDAxMDA2ODAxQTg0MEM5Cis6MTAwQjYwMDA4MTMyMDAwMDAwMDAwMENDODU5MzAxMDBDNTAyMDA0MEU2Cis6MTAwQjcwMDA4MTMyMDEwMEQwMTQwMDQwNDM5OTAxMDAwMDAwMDBGQUM2Cis6MTAwQjgwMDBCQUIzMDEwMDAwMDAwMEZBQTRCMzAxMDAwMDAwMDBGOEFECis6MTAwQjkwMDBCQ0IzMDEwMDAwMTQyRjQwODFCMDAxMDAwMDAwMDBFNzQ5Cis6MTAwQkEwMDBBN0IzMDEwMDAwMDAwMEQ4QTlCMzAxMDBGRjAwMDBEREQ5Cis6MTAwQkIwMDA4MTg4MDEwMDAyMDAwMDQwODBGNDAxMDA3ODAxMDA0MEJCCis6MTAwQkMwMDA4MEM4MDEwMDg4MDEwMEREODEzMjAwMDAwMDAwMDA0MDgzCis6MTAwQkQwMDAxMEIxMDAwMDg5MDEwMDQwODFCMjAwMDA4QTAxMDA0MDhDCis6MTAwQkUwMDA4MUIyMDAwMDhCMDEwMDQwODFCMjAwMDA4QzAxMDA0MDA2Cis6MTAwQkYwMDA4MUIyMDAwMDhEMDEwMDQwODFCMjAwMDA4RjAxMDA0MEYxCis6MTAwQzAwMDA4MUIyMDAwMDkxMDEwMDQwODFCMjAwMDA1NTAxMDA0MDE2Cis6MTAwQzEwMDA4MUIyMDAwMEQyMDEwMDQwODFCMjAwMDA1NTAxMDA0MEM1Cis6MTAwQzIwMDA4MUIyMDAwMEUwMDEwMDQwODFCMjAwMDBFMTAxMDA0MDFCCis6MTAwQzMwMDA4MUIyMDAwMDdGMDIwMDQwODFCMjAwMDA4MDAyMDA0MENCCis6MTAwQzQwMDA4MUIyMDAwMEYxOUYwMDQwODFCMjAwMDBGMjlGMDA0MDlECis6MTAwQzUwMDA4MUIyMDAwMDc3MDEwMDQxODFDMDFBMDA1QTAxNTE0MDYxCis6MTAwQzYwMDA4MUIyMUEwMDVBMDE1MjQwODFCMjFBMDA1QTAxNTU0MDBECis6MTAwQzcwMDA4MUIyMUEwMDVBMDE1NjQwODFCMjFBMDA1NTAxOTE4MTgxCis6MTAwQzgwMDA4MDMwMUEwMDVBMDE0NTQwODFCMjFBMDA1NTAxOTE4MjA0Cis6MTAwQzkwMDA4MDMwMUEwMDVBMDE0NjQwODFCMjAwMDAwMDAwMDA0MDM2Cis6MTAwQ0EwMDA4OUIwMDEwMDAwMDAyRjQwODFCMDAxMDAwMDE0MDA0MDE1Cis6MTAwQ0IwMDA0OTk5MDEwMEI1MDEyMkRFRTE2RDAwMDAwMDAwMDA0QzAxCis6MTAwQ0MwMDA0OUMxMDEwMDAwMDAwMDQxODFDMDAxMDA5NDAxQTI0NDFCCis6MTAwQ0QwMDA4MTZDMDAwMDAwMDAwMDRDNDlEMTAxMDA5QzAxMjI0MEMxCis6MTAwQ0UwMDBFMTZEMDAwMDk4MDFBMjQxODE1MDAwMDA1NTAxMDA0MUQyCis6MTAwQ0YwMDBCRkIzMDAwMDAwMDAwMDQyQkZCMzAxMDA1NTAxQTAwRkM4Cis6MTAwRDAwMDBCRDZGMDAwMDAwMDAwMERFRTFCMTAxMDAwMDAwMDA0NDAyCis6MTAwRDEwMDA0OUMxMDEwMEI3MDEwMDQwMTk5OTAxMDAwMDAwNDI0MDlCCis6MTAwRDIwMDA4MUIyMDEwMDAwMDA0M0ZGODVCMDAxMDAwMDAwMDBERTM5Cis6MTAwRDMwMDAxOUIxMDEwMDAwMDA0MkZGODdCMDAxMDAwMDAwNDNGRjJECis6MTAwRDQwMDBFMUIxMDEwMDAwMDAwMDQ0NDlDMTAxMDAwMDAwMkZGRjkzCis6MTAwRDUwMDBFMUIxMDEwMDA4MTQwMEE0ODBDQzAxMDBBQzAxMjY0MEUwCis6MTAwRDYwMDA4MTMyMDAwMDAwMDAwMDQxODVDMDAxMDBBQTAxQTI0Q0IwCis6MTAwRDcwMDA4MTUwMDAwMEI2MDEyMkQyODEzMjAwMDBCMTAxMjI0MTJGCis6MTAwRDgwMDBBNTZGMDAwMDU1MDFBMkUwODEzMjAwMDAwMDAwMDBEMkYyCis6MTAwRDkwMDBDMUIzMDEwMDAwMDAwMDVDODk5MDAxMDAwMDAwNDA0MkU2Cis6MTAwREEwMDA4MEIyMDEwMDAwMDA0MTQzODBCMjAxMDAwMDAwMDBGMDY5Cis6MTAwREIwMDA4ODk0MDEwMDVBMDEwMDQ0RTBCMTAwMDBCMzAxMDA0OEVBCis6MTAwREMwMDA0OUMxMDAwMEIxMDEwMDVCODk5MDAwMDBCMDlGMDBBMDA0Cis6MTAwREQwMDA5RUIwMDAwMDAwMDAwMDREODFCMDAxMDAwMDAwMDA0MzAzCis6MTAwREUwMDBDQjgzMDEwMDAwMDA0NTQwODFCMjAxMDBCQTAxQTI0MTVECis6MTAwREYwMDA4MTUwMDAwMDAwMDA0NTQwODFCMjAxMDAwMDAwNDU0MEU0Cis6MTAwRTAwMDA4MUIyMDEwMEM0MDE5MTgyODIzMDAwMDAwMDAwMDA4QTlBCis6MTAwRTEwMDA4MEIwMDEwMEI2OUYwMDQwODBDRTAxMDBDMzAxQTY0MDEzCis6MTAwRTIwMDA4MTMyMDAwMEM0MDE1NjQwODFCMjAwMDAwMDAwMDA1MzJFCis6MTAwRTMwMDA2RjkzMDEwMEYzOUYwMDUyNkY5MzAwMDAwMDAwMDA0RDdDCis6MTAwRTQwMDA4MUIwMDEwMDAwMDAwMDQyQ0Q4MzAxMDAwMDAwNDY0MDU3Cis6MTAwRTUwMDA4MUIyMDEwMEM3MDFBMjQxODE1MDAwMDAwMDAwNDY0MDVDCis6MTAwRTYwMDA4MUIyMDEwMDAwMDA0NjQwODFCMjAxMDBEMTAxOTE4MUIwCis6MTAwRTcwMDA4MjMwMDAwMDAwMDAwMDg5ODBCMDAxMDBCNjlGMDA0MDcxCis6MTAwRTgwMDA4MENFMDEwMEQwMDFBNjQwODEzMjAwMDBEMTAxNTU0MDQyCis6MTAwRTkwMDA4MUIyMDAwMDAwMDAwMDUyNkY5MzAxMDBGMzlGMDA1M0U1Cis6MTAwRUEwMDA2RjkzMDAwMDAwMDAwMDQwODNCMDAxMDAwMDE0MDA0MDc4Cis6MTAwRUIwMDA0OTk5MDEwMDAwMDAyMzQwODFCMDAxMDBEQTAxMjJERURGCis6MTAwRUMwMDBFMTZEMDAwMDAwMDAwMDRDNDlDMTAxMDAwMDAwMDA0MTNDCis6MTAwRUQwMDA4MUMwMDEwMEQ1MDFBMjQ0ODE2QzAwMDA1NTAxMDA0MzhFCis6MTAwRUUwMDBCRkIzMDAwMDAwMDAwMEY4MThCMTAxMDAwMDAwNDBGODk2Cis6MTAwRUYwMDA4MEIyMDEwMDAwMDA0MUYwODBCMjAxMDAwMDAwMDA0MDFCCis6MTAwRjAwMDBGMUIxMDEwMDAwMDAwMDQwRjFCMTAxMDA1QTAxMDA0MEMwCis6MTAwRjEwMDBFMUIxMDAwMEUyMDEwMDQwOTFCMDAwMDAwMDAwMDA0MTlBCis6MTAwRjIwMDA5MUIwMDEwMEQwMTQyRTQwNDlCMTAxMDAwNTAwMDA0MEVECis6MTAwRjMwMDBBMzlCMDEwMDA4MDAwMEREODFGNDAxMDBFNzAxMDA0MEVGCis6MTAwRjQwMDA4MEM4MDEwMDAwMDAwMDQwMTBCMTAwMDBFRDAxMDA0MDI5Cis6MTAwRjUwMDA4MUIwMDAwMDU4MDEwMERFQTFCMzAwMDBGRjAxMDA0MDk1Cis6MTAwRjYwMDA4MUIyMDAwMDAxMDIwMDQwODFCMDAwMDAwNzAyMDA0MDkxCis6MTAwRjcwMDA4MUIyMDAwMDU3MDEwMERGRTFCMTAwMDAwMDAwMDBEMEE1Cis6MTAwRjgwMDBCQUIzMDEwMDAwMDAwMERFQTFCMTAxMDAwMjAwMDBEMkVFCis6MTAwRjkwMDBBNUU3MDEwMDAwMDAwMEQyQzFCMzAxMDAwMDAwMDAwMDdECis6MTAwRkEwMDBGMEIxMDEwMEY3MDEyMjQ0QzE1MzAwMDBGNjAxODQ0MTcxCis6MTAwRkIwMDA4MTQwMDAwMEZBMDEwMDQwODEzMjAxMDAwMDAwMDBEMEIxCis6MTAwRkMwMDA0NUIxMDEwMEYxMDEwMDQxQTFDMTAwMDBCMTAyMDA0MEEyCis6MTAwRkQwMDA4MTMyMDEwMEM1MDIwMDQwODEzMjAxMDA1QTAxMDBERDZBCis6MTAwRkUwMDBBMUIxMDAwMDAwMDAwMDQwODFCMDAxMDA0MDAwMDA0MEJECis6MTAwRkYwMDBBNTlCMDEwMEIxMDIwMDQwODEzMjAxMDA0MDAwMDBEM0Y2Cis6MTAxMDAwMDBBN0NCMDEwMEM1MDIwMEUwQTVCMzAwMDAwMzAwMDA0MDJCCis6MTAxMDEwMDBBMzlCMDEwMDU4MDEwMERFQTFCMzAwMDAwMDAwMDA0NEMyCis6MTAxMDIwMDBCRkIzMDEwMDAwMDAwMERFODE5MDAxMDA1NTAxQTJCQUFCCis6MTAxMDMwMDA4MDA0MDAwMDYwMDAwMERFNjE5OTAxMDAwNDAyQThCMTk0Cis6MTAxMDQwMDA4MDMwMDAwMDU3MDEwMDQwRTBCMTAwMDAwMDAwMDBEMEY3Cis6MTAxMDUwMDBCQUIzMDEwMDY4MDIwMDQwODE5ODAxMDA1RDAyMDA0REIyCis6MTAxMDYwMDA4MzMwMDEwMDAwMDAwMDQ0RTFCMzAxMDAwMDAwMDA0NEFGCis6MTAxMDcwMDBFM0IzMDEwMDAwMDAwMDQ0RTVCMzAxMDAwMDAwMDA0NEI4Cis6MTAxMDgwMDBFOUIzMDEwMDAwMDAwMDQ0RUJCMzAxMDAwMDAwMDA0NDlDCis6MTAxMDkwMDBGNUIzMDEwMDAwMDAwMDQ0RjdCMzAxMDAwMDAwMDA0NDc0Cis6MTAxMEEwMDBGOUIzMDEwMDE1MDIyMjQwOEY2RjAwMDA3NTAyMDA0MDY1Cis6MTAxMEIwMDA4MTk4MDEwMDVEMDIwMEM3ODMzMDAxMDA3RDAyMDA0MDdECis6MTAxMEMwMDA4MTk4MDEwMDVEMDIwMDQyODMzMDAxMDAwMDAwMDBFOEM5Cis6MTAxMEQwMDBGMUIxMDEwMDAwMDAwMEU5RjFCMTAxMDAwMDAwMDBFQUY3Cis6MTAxMEUwMDBGMUIxMDEwMDAwMDAwMEVCRjFCMTAxMDAwMDAwMDA4NTRBCis6MTAxMEYwMDBGMEIxMDEwMDAwMDAwMEVDRjFCMTAxMDAwMDAwMDBFREQyCis6MTAxMTAwMDBGMUIxMDEwMDAwMDAwMEIyRjBCMTAxMDBFMDlGMDA0MDI5Cis6MTAxMTEwMDA4MTMyMDEwMDAwMDAwMDQwRjBCMTAxMDAwMDAwMDA0MEY5Cis6MTAxMTIwMDBGMUIxMDEwMDAwMDAwMEFCRjBCMTAxMDAwMDAwMDBCODE3Cis6MTAxMTMwMDBGMEIxMDEwMDAwMDAwMEI5RjBCMTAxMDAwMDAwMDBCQUY4Cis6MTAxMTQwMDBGMEIxMDEwMDAwMDAwMEJCRjBCMTAxMDAyOTAyQjg0MDdECis6MTAxMTUwMDA4MTMwMDAwMDAwMDAwMDQwODE5MDAxMDAyQjAyQjk0MDY2Cis6MTAxMTYwMDA4MTMyMDAwMDAwMDAwMDQxODE5MDAxMDAyRDAyQkE0MDUwCis6MTAxMTcwMDA4MTMyMDAwMDAwMDAwMDQyODE5MDAxMDAyRjAyQkI0MDNDCis6MTAxMTgwMDA4MTMyMDAwMDAwMDAwMDQzODE5MDAxMDAzMTAyQkM0MDI4Cis6MTAxMTkwMDA4MTMyMDAwMDAwMDAwMDQ0ODE5MDAxMDAzMzAyQkQ0MDE0Cis6MTAxMUEwMDA4MTMyMDAwMDAwMDAwMDQ1ODE5MDAxMDAzNTAyQkU0MDAwCis6MTAxMUIwMDA4MTMyMDAwMDAwMDAwMDQ2ODE5MDAxMDAzNzAyQkY0MEVDCis6MTAxMUMwMDA4MTMyMDAwMDAwMDAwMDQ3ODE5MDAxMDAzOTAyQzg0MEQwCis6MTAxMUQwMDA4MTMyMDAwMDAwMDAwMDQ4ODE5MDAxMDAzQjAyQzk0MEJDCis6MTAxMUUwMDA4MTMyMDAwMDAwMDAwMDQ5ODE5MDAxMDAzRDAyQ0E0MEE4Cis6MTAxMUYwMDA4MTMyMDAwMDAwMDAwMDRBODE5MDAxMDAzRjAyQ0I0MDk0Cis6MTAxMjAwMDA4MTMyMDAwMDAwMDAwMDRCODE5MDAxMDA0MTAyQ0M0MDdGCis6MTAxMjEwMDA4MTMyMDAwMDAwMDAwMDRDODE5MDAxMDA0MzAyQ0Q0MDZCCis6MTAxMjIwMDA4MTMyMDAwMDAwMDAwMDREODE5MDAxMDA0NTAyQ0U0MDU3Cis6MTAxMjMwMDA4MTMyMDAwMDAwMDAwMDRFODE5MDAxMDA0NzAyQ0Y0MDQzCis6MTAxMjQwMDA4MTMyMDAwMDAwMDAwMDRGODE5MDAxMDAwMDAwMDA0MDRBCis6MTAxMjUwMDBGMEIxMDEwMDQwMDAwMDQwQTU5QjAxMDBBRjAyMDA0MDNBCis6MTAxMjYwMDA4MTMyMDEwMEM1MDIwMDQwODEzMjAxMDBEMDE0MkUwNkY3Cis6MTAxMjcwMDBBNUIzMDEwMDQwMDAwMEQzQTdDQjAxMDAwMDAwMDBGMDlGCis6MTAxMjgwMDBGMUIxMDEwMDAwMDAwMEYxRjFCMTAxMDAwMDAwMDBGMjM1Cis6MTAxMjkwMDBGMUIxMDEwMDAwMDAwMEY0RjFCMTAxMDAwMDAwMDBGNTFGCis6MTAxMkEwMDBGMUIxMDEwMDAwMDAwMEZBRjFCMTAxMDAwMDAwMDBGQjAzCis6MTAxMkIwMDBGMUIxMDEwMDAwMDAwMEZDRjFCMTAxMDAwMDAwMDBFQjAxCis6MTAxMkMwMDBGMUIxMDEwMDAwMDAwMEVFRjFCMTAxMDAwMDAwMDBFRkZCCis6MTAxMkQwMDBGMUIxMDEwMDAwMDAwMEYzRjFCMTAxMDAwMDAwMDBGNkRGCis6MTAxMkUwMDBGMUIxMDEwMDAwMDAwMEZERjFCMTAxMDBGNzAxMDBDN0ZDCis6MTAxMkYwMDBFMUIxMDAwMDAwMDA4MDQwODFCMjAxMDA2MzAyMDA0OEJCCis6MTAxMzAwMDA4MDMyMDAwMDAwMDA1MTQwMUFCMTAxMDAwMDAwNEQ0MDQxCis6MTAxMzEwMDA4MUIyMDEwMDAwMDA0NTQwODFCMjAxMDA2MDAyQTI0MTlCCis6MTAxMzIwMDA4MzUwMDAwMDVDMDI0OTQwODFCMjAwMDAwMDAwNTI0MDNFCis6MTAxMzMwMDAxQ0IxMDEwMDAwMDA0RTQwODFCMjAxMDAwMDAwNDY0MDk3Cis6MTAxMzQwMDA4MUIyMDEwMDY1MDJBMjQxODM1MDAwMDA1QzAyNEE0MDY0Cis6MTAxMzUwMDA4MUIyMDAwMDAwMDAwMEEwOUVCMDAxMDAwMDAwMDA4MEVCCis6MTAxMzYwMDBEOEIzMDEwMDAwMDAwMEExRDBCMzAxMDAwMDAwMDBBMjJBCis6MTAxMzcwMDBEMkIzMDEwMDAwMDAwMEE0RDRCMzAxMDAwMDAwMDBEMEVCCis6MTAxMzgwMDBENkIzMDEwMDAwMDAwMEQxRENCMzAxMDAwMDAwMDBEMkEwCis6MTAxMzkwMDBERUIzMDEwMDAwMDAwMDg4REFCMzAxMDAwMDAwMDBENEQxCis6MTAxM0EwMDA4RUIzMDEwMDAwMDAwMEQzRTZCMzAxMDAwMDAwMDBBQ0UyCis6MTAxM0IwMDBFQ0IzMDEwMDAwMDAwMDk5RkFCMzAxMDAwMDAwMDBENTcxCis6MTAxM0MwMDBFMEIzMDEwMDAwMDAwMEQ1RTJCMzAxMDAwMDAwMDBENTQ5Cis6MTAxM0QwMDBFNEIzMDEwMDAwMDAwMEQ1RThCMzAxMDAwMDAwMDBENTJGCis6MTAxM0UwMDBFQUIzMDEwMDAwMDAwMEQ1RjRCMzAxMDAwMDAwMDBENTBECis6MTAxM0YwMDBGNkIzMDEwMDAwMDAwMEQ1RjhCMzAxMDAwMDAwMDBDN0ZCCis6MTAxNDAwMDBBOUIxMDEwMDAwMDAwMDRGNDBCMTAxMDA4MTAyMDA0MDdECis6MTAxNDEwMDA5MUIwMDAwMDAwMDAwMDQxOTFCMDAxMDAwNzAwMDA0MEMxCis6MTAxNDIwMDBBMzlCMDEwMDA4MDAwMEREODFGNDAxMDA4NTAyMDA0MDVCCis6MTAxNDMwMDA4MEM4MDEwMDAwMDAwMDQwMTBCMTAwMDA4QTAyMDA0MDk2Cis6MTAxNDQwMDA4MUIyMDAwMDk1MDIwMDQwODFCMjAwMDA5NTAyMDA0NjgyCis6MTAxNDUwMDBBM0IzMDAwMDk4MDIwMDQwODFCMjAwMDA5RTAyMDA0MDQ5Cis6MTAxNDYwMDA4MUIyMDAwMDhDMDIyMzUwQTU2RjAwMDAwMDAwMDA1MEU0Cis6MTAxNDcwMDBBNUIzMDEwMEJDMDIwMDQyQTU2MzAxMDBDNTAyMDA0MDAzCis6MTAxNDgwMDA4MTMyMDEwMEQwMTQyRDQwNDlCMTAxMDAwMDAwMDBEMDhDCis6MTAxNDkwMDBCQUIzMDEwMDAwMDAwMERFQTFCMTAxMDAwMDAwMDBGOEI1Cis6MTAxNEEwMDAwMEIwMDEwMDk0MDIyMjQ0QTU1MzAwMDA5MTAyMDA0MUMzCis6MTAxNEIwMDBBMUMxMDAwMDVBMDEwMEREQTFCMTAwMDBCQzAyMDBERUE0Cis6MTAxNEMwMDBBMTMzMDEwMEM1MDIwMDQwODEzMjAxMDA1QTAxMDA0MEYxCis6MTAxNEQwMDA4MUIyMDAwMDAwMDAwMDQ1QkZCMzAxMDA1NTAxQTJEMjU3Cis6MTAxNEUwMDA3NzdEMDAwMDAwMDAwMEQyNjFCMTAxMDAwMDAwMDBERTQ1Cis6MTAxNEYwMDA2M0IxMDEwMDlCMDJBODQwODEzMjAwMDA1QTAxMDA0MDA0Cis6MTAxNTAwMDA4MUIyMDAwMEJDMDIwMDU0QTUzMzAxMDBDNTAyMDA0MEI2Cis6MTAxNTEwMDA4MTMyMDEwMEQwMTQyRDQwNDlCMTAxMDAwMDAwMDBGOEQzCis6MTAxNTIwMDBEMEIzMDEwMDAwMDAwMEY4RDJCMzAxMDAwMDAwMDBGOEMxCis6MTAxNTMwMDBENEIzMDEwMDAwMDAwMEY4RDZCMzAxMDAwMDAwMDBGOEE5Cis6MTAxNTQwMDAwOEIxMDEwMEE5MDIwMDQwODE5ODAxMDA1RDAyMDA0NjM3Cis6MTAxNTUwMDA4MzMwMDEwMDVBMDEwMDQwODFCMjAwMDAwMDAwMDBBMDY5Cis6MTAxNTYwMDA5RUIwMDEwMDAwMDAwMEU4NDNCMTAxMDAwMDAwMDBFOTY2Cis6MTAxNTcwMDA0NUIxMDEwMDAwMDAwMEVBNDlCMTAxMDAwMDAwMDBFQkE0Cis6MTAxNTgwMDBBMUIxMDEwMDAwMDAwMDRGNDBCMTAxMDAwMDAwMDBFN0UwCis6MTAxNTkwMDBBN0IzMDEwMDAwMDAwMEQ4QTlCMzAxMDAwMDAwMDA0MDdCCis6MTAxNUEwMDA0OUIxMDEwMEFFMDMwMENCQTNDOTAxMDAwMDAwMDAyMDM3Cis6MTAxNUIwMDA0NkIxMDEwMDAwMDAwMEQyRjFCMTAxMDAwMDAwMDBEM0VCCis6MTAxNUMwMDBGMUIxMDEwMDAwMDAwMEQ0RjFCMTAxMDAwMDAwMDBEMDMxCis6MTAxNUQwMDBFMUIxMDEwMDAwMDAwMEQxNjFCMTAxMDAyMDAwMDAyMDU0Cis6MTAxNUUwMDA2MkREMDEwMEI5MDJBODQwODEzMjAwMDAwMDAwODBDQzE5Cis6MTAxNUYwMDA4NTkzMDEwMDAwMDAwMEU3QTdCMzAxMDAwMDAwMDBEOEI4Cis6MTAxNjAwMDBBOUIzMDEwMDAwMDAwMDQwNDlCMTAxMDBBRTAzMDBDQkM2Cis6MTAxNjEwMDBBM0M5MDEwMDAwMDAwMDIwNDZCMTAxMDAwMDAwMDBEMjczCis6MTAxNjIwMDBGMUIxMDEwMDAwMDAwMEQwRjFCMTAxMDAwMDAwMDBEM0QxCis6MTAxNjMwMDBGMUIxMDEwMEI4MDIwMEQ0RTFCMTAwMDAwMDAwQTJDQzc5Cis6MTAxNjQwMDA4NUZGMDAwMDAwMDAwMDUwODFCMDAxMDBDNzAyQTI0MUU4Cis6MTAxNjUwMDA4MTUwMDAwMEM2MDJBMkYyODAzMDAwMDAwMDAwODBDQzYxCis6MTAxNjYwMDA4NTgzMDEwMDAwMDAwMDQwODFCMDAxMDBDQjAyODBBNTBECis6MTAxNjcwMDA4MDMyMDAwMENDMDIwMEE1ODAzMjAwMDAwMDAwMDA0MTUyCis6MTAxNjgwMDA4MUMwMDEwMENEMDI4MEE1ODAzMjAwMDA4MDAxMDA0MEIxCis6MTAxNjkwMDA4Mzk4MDEwMEQ2MDIyMDRGODE2QzAwMDAwMDAxMDA0MEI5Cis6MTAxNkEwMDA4Mzk4MDEwMEQ2MDIyMDRCODE2QzAwMDA4MDAwMDA0MDJFCis6MTAxNkIwMDA4Mzk4MDEwMEQ2MDIyMDQ3ODE2QzAwMDAwMDAwMDA0MEEyCis6MTAxNkMwMDA4Mzk4MDEwMDAwMDAwMDQxODJEQzAxMDAwMzkwMDA0MThBCis6MTAxNkQwMDAyMDk5MDEwMDAwMDAwMDQwNDlCMTAxMDAwMDE0MkY0Qzg2Cis6MTAxNkUwMDA4M0IwMDEwMDAwMDAwMDQwRjFCMTAxMDBEQTAyQTI0MTI0Cis6MTAxNkYwMDA4MzUwMDAwMDAyMDAwMEE1ODBDODAxMDBERDAyQTJBNTAxCis6MTAxNzAwMDA4MDZDMDAwMDIwMDAwMDkwMjA5OTAxMDAwMDAwMDA1RjI0Cis6MTAxNzEwMDAyMzkxMDEwMEUwMDIxRjkxODAzMjAwMDAzMDAwMDA5MDEwCis6MTAxNzIwMDAyMDk5MDEwMDAwMDAwMDVGMjM5MTAxMDBFMzAyMUY5MTU2Cis6MTAxNzMwMDA4MDMyMDAwMDcwMDAwMDkwMjBBOTAxMDAwMDAwMDA1RkNFCis6MTAxNzQwMDAyMzkxMDEwMEU2MDIxRjkxODAzMjAwMDAwMDAwMDA1RjNCCis6MTAxNzUwMDAyMzkxMDEwMEU4MDIxRjkxODAzMjAwMDA0MDY4MDA5MDUwCis6MTAxNzYwMDAyMEE5MDEwMEUwMDAwMDQwNjE5OTAxMDAyMTAwMDA0MDMzCis6MTAxNzcwMDA2MTk5MDEwMDIyMDAwMDQwNjE5OTAxMDAyMzAwMDA0MEFFCis6MTAxNzgwMDA2MTk5MDEwMDI0MDAwMDQwNjE5OTAxMDAyNTAwMDA0MDlBCis6MTAxNzkwMDA2MTk5MDEwMDI2MDAwMDQwNjE5OTAxMDAyNzAwMDA0MDg2Cis6MTAxN0EwMDA2MTk5MDEwMEMwMDAwMDQwNjE5OTAxMDBEMDE0MDA0MDFGCis6MTAxN0IwMDA0NTk5MDEwMDAyMDEwMEE2ODBCMDAxMDAwNDAzMDA0MDI5Cis6MTAxN0MwMDA4MDk4MDEwMDA2MDUwMEE2ODJCMDAxMDAwODA3MDA0MUNDCis6MTAxN0QwMDA4Mjk4MDEwMDAwMDAwMDQwRjBCMTAxMDAwMDAwMDA0MUNCCis6MTAxN0UwMDBFMEIxMDEwMDMwMDMwMDQwODUzMDAxMDAzOTAzMDA0MEMyCis6MTAxN0YwMDA4MTMyMDEwMEQ4MTQwMDQwNDM5OTAxMDBGRjAyQTJGODkxCis6MTAxODAwMDA4MDZDMDAwMDAwMDMyMkYwODI2QzAwMDAwMDAwMDA0MkE3Cis6MTAxODEwMDAyMTkxMDEwMEQwMTQyMDQwRTFCMTAxMDAzMDAzMDAwQ0ZGCis6MTAxODIwMDA4NTMwMDEwMDMwMDMwMDREODUxMDAxMDAzMDAzMDA0RTZCCis6MTAxODMwMDA4NTEwMDEwMEQwMTQyMDRGRTFCMTAxMDAzMDAzMDA0RkFBCis6MTAxODQwMDA4NTEwMDEwMDM5MDMwMDBDODUzMDAxMDBEODE0MjA0M0I1Cis6MTAxODUwMDA4MUIwMDEwMDBGMDMyMkYwOUU2RTAwMDAzOTAzMDA0RDlECis6MTAxODYwMDA4NTEwMDEwMEQ4MTQyMDQyODFCMDAxMDAwRjAzMjJGMDNFCis6MTAxODcwMDA5RTZFMDAwMDM5MDMwMDRFODUxMDAxMDBEODE0MjA0MUVGCis6MTAxODgwMDA4MUIwMDEwMDExMDNBMkYwOUU2RTAwMDAwMDAwMDA0OTJCCis6MTAxODkwMDA4MUUwMDEwMDAwMDAwMDQwMjA5NTAxMDAwMzAwMDA5MDVECis6MTAxOEEwMDAyMDhEMDEwMDAwMDAwMDQzMjE5NTAxMDAwMDAwMDAxQjc1Cis6MTAxOEIwMDA4OUIwMDEwMEQwMTQyMDQwRTFCMTAxMDAzMDAzMDAxN0NECis6MTAxOEMwMDA4NTMwMDEwMDMwMDMwMDU4ODUxMDAxMDAzMDAzMDA1OUI1Cis6MTAxOEQwMDA4NTEwMDEwMEQwMTQyMDRGRTFCMTAxMDAzMDAzMDA1QUZGCis6MTAxOEUwMDA4NTEwMDEwMDM5MDMwMDE3ODUzMDAxMDBEODE0MjA0MDBECis6MTAxOEYwMDA4MUIwMDEwMDIzMDMyMkYwOUU2RTAwMDAzOTAzMDA1OERFCis6MTAxOTAwMDA4NTEwMDEwMEQ4MTQyMDQxODFCMDAxMDAyMzAzMjJGMDhBCis6MTAxOTEwMDA5RTZFMDAwMDM5MDMwMDU5ODUxMDAxMDBEODE0MjA0MjQyCis6MTAxOTIwMDA4MUIwMDEwMDI3MDNBMkYwOUU2RTAwMDAwMzAwMDA5MDJBCis6MTAxOTMwMDAyMDhEMDEwMDAwMDAwMDQwMjA5NTAxMDAwMDAwMDAxOEVCCis6MTAxOTQwMDA4OUIwMDEwMDAwMDAwMDQwODhFMDAxMDAyRjAzQTI0MjlFCis6MTAxOTUwMDAyMTdEMDAwMEE1QTUwMDQwODE5ODAxMDBEMDE0MjA0MDAxCis6MTAxOTYwMDBFMEIxMDEwMDMwMDMwMDQ0ODQzMDAxMDAzOTAzMDA0MDNECis6MTAxOTcwMDA4MTMyMDEwMEQ4MTQyMDQwODFCMjAxMDAyRjAzQTJGMDZGCis6MTAxOTgwMDA4MDZDMDAwMDAwMDAwMDQxODlFMDAxMDBFMDAwODA0MDIwCis6MTAxOTkwMDA2MTk5MDEwMDcwMTUwMDQwNDc5OTAxMDAwMDAwMDA0ODVFCis6MTAxOUEwMDBGMUIxMDEwMDAwMDAwMDQyRjBCMTAxMDBEMDE0MDA0MDhDCis6MTAxOUIwMDBGMTk5MDEwMDAwMDAwMDU1ODdCNDAxMDAwNDAwMDA0MEM3Cis6MTAxOUMwMDA2MTk5MDEwMDcwMTUwMDQzNjI5OTAxMDAzNjAzQTg0MDM3Cis6MTAxOUQwMDA4MTMyMDAwMDQxMDMwMDQwODFCMjAwMDA3MDE1MDA0MEQ4Cis6MTAxOUUwMDA0Nzk5MDEwMDAwMDAwMDQ4RjFCMTAxMDBEODE0MDA0MEZGCis6MTAxOUYwMDBGMTk5MDEwMDAwMDAwMDQyRjBCMTAxMDAwMDAwMDA1NTIzCis6MTAxQTAwMDA4N0I0MDEwMDAyMDAwMDQwNjE5OTAxMDA3MDE1MDA0Mzk1Cis6MTAxQTEwMDA2Mjk5MDEwMDNGMDNBODQwODEzMjAwMDAwMDAwMDA0OEE1Cis6MTAxQTIwMDA4N0IwMDEwMDQyMDNBMjQxODc1MDAwMDAwMDAwQTJGMkVCCis6MTAxQTMwMDA4NkIwMDAwMDEwMDAwMEYxODZGNDAxMDA0MTAzMjY0MDRBCis6MTAxQTQwMDA4MTMyMDAwMDA0MDAwMDQwODFCMjAwMDAwMDAwMDA0NzI1Cis6MTAxQTUwMDA4NEIwMDEwMDAwMDBBMjQ4ODQ4NDAwMDAwMDAwMDA1RjAwCis6MTAxQTYwMDA2MUIxMDEwMDAwMDAwMDVDOEY5MDAxMDAwMDAwMDA0N0EwCis6MTAxQTcwMDA2MkIxMDEwMDQ5MDNBODQwODEzMjAwMDBGNTlGMDA0NzkwCis6MTAxQTgwMDA5ODMwMDEwMDAwMDgwMDQ3OEVDODAxMDA0NzAzMDA1QzQxCis6MTAxQTkwMDA4RjgwMDAwMEUwMDAwMDQwNjE5OTAxMDA1ODE1MkQ0MDQyCis6MTAxQUEwMDA4REIwMDEwMEQwMTQyREYwODhCMDAxMDAwMDAwMDBGQUM0Cis6MTAxQUIwMDA4QUIwMDEwMDAwMDAwMDQ1ODFCMDAxMDAwNzAwMDA0NTI4Cis6MTAxQUMwMDA4Mjg4MDEwMDAwMDAwMDQzOEJGMDAxMDAwMDAwMDA0ODA0Cis6MTAxQUQwMDA4M0UwMDEwMDAwMDAwMDQ2ODI5NDAxMDAyMDAwMDA0MUU0Cis6MTAxQUUwMDA2MDk5MDEwMDAwMDAwMDQxOERDMDAxMDA2NDAzMjI1Rjg1Cis6MTAxQUYwMDA4RDZDMDAwMDU1MDNBMjQxODE1MDAwMDA1MzAzMDA0MDRCCis6MTAxQjAwMDA4MUIyMDAwMDA4MDAwMDQwODU5ODAxMDAwMDAwMDA0NEY4Cis6MTAxQjEwMDA4MkIwMDEwMDAwMDAwMDQxODZCMDAxMDAwMDFDMDA0M0JCCis6MTAxQjIwMDA4NkQ4MDEwMDAwMDBBNjQxODU1MDAxMDA2MDAzMDA0MUY1Cis6MTAxQjMwMDA4M0UwMDAwMDVFMDMwMDQwODEzMjAxMDAwMDAwMDA0OEE1Cis6MTAxQjQwMDA4NUUwMDEwMEQwMTQyRjQ2ODQ5NDAxMDAyMDAwMDA0MjVCCis6MTAxQjUwMDA2MDk5MDEwMEMwMDAwMDQwNjE5OTAxMDAwMDAwODA0MEQwCis6MTAxQjYwMDA4MUIyMDEwMDA3MDAwMDQ1ODA4ODAxMDAwMDAwMDA0M0E5Cis6MTAxQjcwMDA4QkYwMDEwMDAwMDQwMDQwODM5ODAxMDA2RjAzQTA0MTM2Cis6MTAxQjgwMDA4MTUwMDAwMDZEMDMwMDQxODJFODAwMDAwMDAwODA0MUE4Cis6MTAxQjkwMDA4RUMwMDEwMEFFMDMwMDQwQTM5OTAxMDAwMDAwMDA1NDc0Cis6MTAxQkEwMDA4MUIwMDEwMDYwMTUwMDQwODU5ODAxMDAwODAwMDA0MEU4Cis6MTAxQkIwMDA0MEU0MDEwMDAwMDAwMDVBNDE5NDAxMDAwMDAwMDA1MDgwCis6MTAxQkMwMDA0MUUwMDEwMDAwMDAwMDQyNDA5NDAxMDAwMDAwMDA0MTlCCis6MTAxQkQwMDA4MUMwMDEwMDAwMDBBMzU1ODE2QzAxMDAwMDAwMDA0MTlDCis6MTAxQkUwMDBBM0MxMDEwMDczMDMwMDUwODVDMDAwMDAwMDAwMDA0MDQ1Cis6MTAxQkYwMDA0OUIxMDEwMDAwMDIwMDQwODM5ODAxMDAwMDE2MDA0MDM2Cis6MTAxQzAwMDA0NTk5MDEwMDAwMDAwMDQwRjFCMTAxMDA3RTAzQTI0MUFFCis6MTAxQzEwMDA4MzUwMDAwMDAwMDAwMDQwODVCMDAxMDAwQjAwMDA0NDJDCis6MTAxQzIwMDA4MkY0MDEwMDFBMTUwMEE2ODZCMDAxMDA3MDE1MDA0MDZDCis6MTAxQzMwMDA0NTk5MDEwMDAwMDgwMDQwRjE5OTAxMDAwMDAwMDA0MkIwCis6MTAxQzQwMDBGMEIxMDEwMDAwMTYwMDQwRTE5OTAxMDAwNDAwMDA0MERECis6MTAxQzUwMDA2MTk5MDEwMDcwMTUwMDQzNjI5OTAxMDA4ODAzQTg0MDUyCis6MTAxQzYwMDA4MTMyMDAwMDhBMDMyMjVBNzM3RDAwMDA3QTAwMDA0MDBFCis6MTAxQzcwMDA2MTk5MDEwMDhCMDNBOEIxN0UzMTAwMDAwMDA4MDA0Mjg5Cis6MTAxQzgwMDA4NEM4MDEwMDgzMDNBMjQxODM1MDAwMDAwMDAwODA0MDBCCis6MTAxQzkwMDA4MUIyMDEwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAxQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAxQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAxQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAxQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAxQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAxQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAxRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAxRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAxRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAxRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAxRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAxRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAxRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAxRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTAxRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTAxRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAxREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTAxREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTAxREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTAxREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTAxREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTAxREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTAxRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAxRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAxRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTAxRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTAxRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTAxRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTAxRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTAxRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTAxRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAxRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTAxRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTAxRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTAxRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTAxRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAxRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAxRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAxRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAxRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAxRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAxRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAxRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAxRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAxRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAxRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAxRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAxRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAxRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAxRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAxRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAxRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAxRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAxRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAyMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAyMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAyMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAyMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAyMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAyMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAyMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAyMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAyMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAyMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAyMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAyMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAyMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAyMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAyMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAyMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAyMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAyMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAyMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAyMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAyMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAyMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAyMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAyMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAyMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAyMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAyMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAyMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAyMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAyMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAyMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAyMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAyMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAyMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAyMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAyMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAyMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAyMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAyMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAyMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAyMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAyMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAyMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAyMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAyMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAyMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAyMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAyMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAyMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAyMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAyMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAyMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAyMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAyMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAyMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAyMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAyMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAyMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAyM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAyM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAyM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAyM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAyM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAyM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAyNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAyNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAyNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAyNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAyNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAyNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAyNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAyNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAyNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAyNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAyNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAyNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAyNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAyNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAyNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAyNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAyNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAyNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAyNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAyNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAyNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAyNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAyNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAyNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAyNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAyNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAyNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAyNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAyNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAyNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAyNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAyNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAyNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAyNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAyNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAyNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAyNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAyNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAyNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAyNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAyNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAyNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAyNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAyNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAyNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAyNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAyNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAyNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAyNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAyNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAyNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAyNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAyNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAyNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAyNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAyNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAyNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAyNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAyN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAyN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAyN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAyN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAyN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAyN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAyODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAyODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAyODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAyODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAyODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAyODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAyODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAyODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAyODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAyODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAyOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAyOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAyOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAyOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAyOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAyOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAyOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAyOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAyOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAyOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAyOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAyOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAyOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAyOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAyOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAyOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAyOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAyOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAyOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAyOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAyOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAyOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAyQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAyQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAyQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAyQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAyQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAyQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAyQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAyQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAyQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAyQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAyQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAyQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAyQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAyQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAyQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAyQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAyQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAyQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAyQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAyQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAyQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAyQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAyQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAyQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAyQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAyQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAyQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAyQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAyQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAyQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAyQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAyQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAyQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAyQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAyQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAyQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAyQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAyQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAyQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAyQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAyQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAyQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAyQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAyQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAyQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAyQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAyQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAyQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAyRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAyRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAyRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAyRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAyRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAyRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAyRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTAyRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTAyRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAyRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTAyREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTAyREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTAyREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTAyREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTAyREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTAyREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAyRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAyRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTAyRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTAyRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTAyRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTAyRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTAyRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTAyRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAyRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTAyRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTAyRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTAyRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTAyRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAyRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAyRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAyRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAyRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAyRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAyRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAyRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAyRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAyRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAyRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAyRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAyRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAyRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAyRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAyRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAyRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAyRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAyRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAyRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAzMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAzMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAzMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAzMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAzMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAzMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAzMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAzMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAzMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAzMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAzMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAzMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAzMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAzMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAzMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAzMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAzMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAzMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAzMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAzMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAzMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAzMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAzMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAzMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAzMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAzMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAzMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAzMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAzMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAzMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAzMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAzMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAzMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAzMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAzMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAzMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAzMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAzMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAzMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAzMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAzMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAzMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAzMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAzMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAzMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAzMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAzMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAzMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAzMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAzMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAzMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAzMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAzMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAzMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAzMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAzMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAzMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAzMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAzM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAzM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAzM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAzM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAzM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAzM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAzNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAzNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAzNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAzNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAzNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAzNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAzNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAzNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAzNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAzNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAzNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAzNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAzNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAzNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAzNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAzNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAzNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAzNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAzNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAzNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAzNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAzNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAzNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAzNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAzNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAzNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAzNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAzNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAzNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAzNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAzNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAzNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAzNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAzNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAzNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAzNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAzNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAzNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAzNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAzNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAzNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAzNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAzNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAzNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAzNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAzNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAzNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAzNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAzNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAzNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAzNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAzNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAzNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAzNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAzNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAzNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAzNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAzNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAzN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAzN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAzN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAzN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAzN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAzN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAzODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAzODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAzODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAzODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAzODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAzODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAzODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAzODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAzODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAzODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAzOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAzOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAzOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAzOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAzOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAzOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAzOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAzOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAzOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAzOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAzOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAzOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAzOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAzOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAzOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAzOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAzOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAzOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAzOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAzOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAzOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAzOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAzQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAzQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAzQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAzQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAzQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAzQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAzQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAzQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAzQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAzQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAzQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAzQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAzQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAzQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAzQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAzQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAzQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAzQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAzQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAzQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAzQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAzQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAzQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAzQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAzQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAzQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAzQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAzQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAzQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAzQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAzQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAzQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAzQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAzQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAzQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAzQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAzQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAzQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAzQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAzQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAzQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAzQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAzQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAzQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAzQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAzQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAzQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAzQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAzRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAzRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAzRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAzRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAzRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAzRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTAzRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTAzRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAzRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTAzRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTAzREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTAzREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTAzREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTAzREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTAzREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAzREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAzRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTAzRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTAzRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTAzRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTAzRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTAzRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTAzRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAzRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTAzRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTAzRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTAzRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTAzRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAzRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAzRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAzRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAzRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAzRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAzRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAzRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAzRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAzRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAzRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAzRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAzRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAzRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAzRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAzRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAzRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAzRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAzRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAzRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAzRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTA0MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTA0MDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTA0MDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTA0MDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTA0MDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTA0MDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTA0MDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTA0MDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTA0MDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTA0MDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTA0MEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTA0MEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTA0MEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTA0MEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTA0MEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTA0MEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTA0MTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTA0MTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTA0MTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTA0MTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTA0MTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTA0MTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTA0MTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTA0MTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTA0MTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTA0MTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTA0MUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTA0MUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTA0MUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTA0MUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTA0MUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTA0MUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTA0MjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTA0MjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTA0MjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTA0MjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTA0MjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTA0MjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTA0MjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTA0MjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTA0MjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTA0MjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTA0MkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTA0MkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTA0MkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTA0MkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTA0MkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTA0MkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTA0MzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTA0MzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTA0MzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTA0MzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTA0MzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTA0MzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTA0MzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTA0MzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTA0MzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTA0MzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTA0M0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTA0M0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTA0M0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTA0M0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTA0M0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTA0M0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTA0NDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTA0NDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTA0NDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTA0NDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTA0NDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTA0NDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTA0NDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTA0NDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTA0NDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTA0NDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTA0NEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTA0NEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTA0NEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTA0NEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTA0NEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTA0NEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTA0NTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTA0NTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTA0NTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTA0NTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTA0NTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTA0NTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTA0NTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTA0NTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTA0NTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTA0NTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTA0NUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTA0NUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTA0NUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTA0NUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTA0NUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTA0NUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTA0NjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTA0NjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTA0NjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTA0NjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTA0NjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTA0NjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTA0NjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTA0NjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTA0NjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTA0NjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTA0NkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTA0NkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTA0NkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTA0NkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTA0NkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTA0NkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTA0NzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTA0NzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTA0NzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTA0NzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTA0NzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTA0NzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTA0NzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTA0NzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTA0NzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTA0NzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTA0N0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTA0N0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTA0N0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTA0N0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTA0N0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTA0N0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTA0ODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTA0ODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTA0ODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTA0ODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTA0ODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTA0ODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTA0ODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTA0ODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTA0ODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTA0ODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTA0OEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTA0OEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTA0OEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTA0OEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTA0OEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTA0OEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTA0OTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTA0OTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTA0OTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTA0OTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTA0OTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTA0OTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTA0OTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTA0OTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTA0OTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTA0OTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTA0OUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTA0OUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTA0OUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTA0OUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTA0OUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTA0OUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTA0QTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTA0QTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTA0QTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTA0QTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTA0QTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTA0QTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTA0QTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTA0QTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTA0QTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTA0QTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTA0QUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTA0QUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTA0QUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTA0QUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTA0QUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTA0QUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTA0QjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTA0QjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTA0QjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTA0QjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTA0QjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTA0QjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTA0QjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTA0QjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTA0QjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTA0QjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTA0QkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTA0QkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTA0QkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTA0QkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTA0QkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTA0QkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTA0QzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTA0QzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTA0QzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTA0QzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTA0QzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTA0QzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTA0QzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTA0QzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTA0QzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTA0QzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTA0Q0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTA0Q0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTA0Q0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTA0Q0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTA0Q0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTA0Q0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTA0RDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTA0RDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTA0RDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTA0RDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTA0RDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTA0RDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTA0RDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTA0RDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTA0RDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTA0RDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTA0REEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTA0REIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTA0REMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTA0REQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTA0REUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTA0REYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTA0RTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTA0RTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTA0RTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTA0RTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTA0RTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTA0RTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTA0RTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTA0RTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTA0RTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTA0RTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTA0RUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTA0RUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTA0RUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTA0RUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTA0RUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTA0RUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTA0RjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTA0RjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTA0RjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTA0RjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTA0RjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTA0RjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTA0RjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTA0RjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTA0RjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTA0RjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTA0RkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTA0RkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTA0RkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTA0RkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTA0RkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTA0RkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTA1MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTA1MDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTA1MDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTA1MDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTA1MDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTA1MDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTA1MDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTA1MDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTA1MDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTA1MDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTA1MEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTA1MEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTA1MEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTA1MEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTA1MEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTA1MEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTA1MTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTA1MTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTA1MTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTA1MTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTA1MTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTA1MTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTA1MTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTA1MTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTA1MTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTA1MTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTA1MUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTA1MUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTA1MUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTA1MUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTA1MUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTA1MUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTA1MjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTA1MjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTA1MjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTA1MjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTA1MjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTA1MjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTA1MjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTA1MjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTA1MjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTA1MjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTA1MkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTA1MkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTA1MkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTA1MkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTA1MkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTA1MkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTA1MzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTA1MzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTA1MzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTA1MzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTA1MzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTA1MzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTA1MzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTA1MzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTA1MzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTA1MzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTA1M0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTA1M0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTA1M0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTA1M0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTA1M0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTA1M0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTA1NDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTA1NDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTA1NDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTA1NDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTA1NDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTA1NDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTA1NDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTA1NDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTA1NDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTA1NDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTA1NEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTA1NEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTA1NEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTA1NEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTA1NEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTA1NEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTA1NTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTA1NTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTA1NTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTA1NTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTA1NTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTA1NTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTA1NTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTA1NTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTA1NTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTA1NTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTA1NUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTA1NUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTA1NUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTA1NUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTA1NUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTA1NUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTA1NjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTA1NjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTA1NjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTA1NjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTA1NjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTA1NjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTA1NjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTA1NjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTA1NjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTA1NjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTA1NkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTA1NkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTA1NkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTA1NkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTA1NkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTA1NkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTA1NzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTA1NzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTA1NzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTA1NzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTA1NzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTA1NzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTA1NzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTA1NzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTA1NzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTA1NzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTA1N0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTA1N0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTA1N0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTA1N0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTA1N0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTA1N0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTA1ODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTA1ODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTA1ODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTA1ODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTA1ODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTA1ODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTA1ODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTA1ODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTA1ODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTA1ODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTA1OEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTA1OEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTA1OEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTA1OEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTA1OEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTA1OEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTA1OTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTA1OTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTA1OTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTA1OTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTA1OTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTA1OTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTA1OTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTA1OTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTA1OTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTA1OTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTA1OUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTA1OUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTA1OUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTA1OUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTA1OUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTA1OUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTA1QTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTA1QTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTA1QTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTA1QTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTA1QTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTA1QTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTA1QTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTA1QTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTA1QTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTA1QTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTA1QUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTA1QUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTA1QUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTA1QUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTA1QUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTA1QUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTA1QjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTA1QjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTA1QjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTA1QjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTA1QjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTA1QjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTA1QjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTA1QjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTA1QjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTA1QjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTA1QkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTA1QkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTA1QkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTA1QkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTA1QkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTA1QkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTA1QzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTA1QzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTA1QzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTA1QzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTA1QzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTA1QzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTA1QzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTA1QzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTA1QzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTA1QzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTA1Q0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTA1Q0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTA1Q0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTA1Q0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTA1Q0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTA1Q0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTA1RDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTA1RDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTA1RDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTA1RDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTA1RDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTA1RDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTA1RDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTA1RDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTA1RDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTA1RDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTA1REEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTA1REIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTA1REMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTA1REQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTA1REUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTA1REYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTA1RTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTA1RTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTA1RTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTA1RTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTA1RTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTA1RTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTA1RTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTA1RTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTA1RTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTA1RTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTA1RUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTA1RUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTA1RUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTA1RUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTA1RUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTA1RUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTA1RjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTA1RjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTA1RjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTA1RjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTA1RjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTA1RjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTA1RjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTA1RjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTA1RjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTA1RjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTA1RkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTA1RkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTA1RkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTA1RkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTA1RkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTA1RkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTA2MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTA2MDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTA2MDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTA2MDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTA2MDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTA2MDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTA2MDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTA2MDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTA2MDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTA2MDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTA2MEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTA2MEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTA2MEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTA2MEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTA2MEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTA2MEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTA2MTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTA2MTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTA2MTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTA2MTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTA2MTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTA2MTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTA2MTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTA2MTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTA2MTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTA2MTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTA2MUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTA2MUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTA2MUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTA2MUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTA2MUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTA2MUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTA2MjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTA2MjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTA2MjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTA2MjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTA2MjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTA2MjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTA2MjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTA2MjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTA2MjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTA2MjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTA2MkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTA2MkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTA2MkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTA2MkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTA2MkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTA2MkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTA2MzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTA2MzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTA2MzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTA2MzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTA2MzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTA2MzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTA2MzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTA2MzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTA2MzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTA2MzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTA2M0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTA2M0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTA2M0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTA2M0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTA2M0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTA2M0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTA2NDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTA2NDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTA2NDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTA2NDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTA2NDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTA2NDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTA2NDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTA2NDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTA2NDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTA2NDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTA2NEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTA2NEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTA2NEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTA2NEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTA2NEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTA2NEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTA2NTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTA2NTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTA2NTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTA2NTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTA2NTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTA2NTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTA2NTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTA2NTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTA2NTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTA2NTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTA2NUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTA2NUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTA2NUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTA2NUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTA2NUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTA2NUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTA2NjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTA2NjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTA2NjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTA2NjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTA2NjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTA2NjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTA2NjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTA2NjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTA2NjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTA2NjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTA2NkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTA2NkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTA2NkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTA2NkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTA2NkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTA2NkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTA2NzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTA2NzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTA2NzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTA2NzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTA2NzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTA2NzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTA2NzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTA2NzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTA2NzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTA2NzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTA2N0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTA2N0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTA2N0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTA2N0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTA2N0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTA2N0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTA2ODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTA2ODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTA2ODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTA2ODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTA2ODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTA2ODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTA2ODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTA2ODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTA2ODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTA2ODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTA2OEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTA2OEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTA2OEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTA2OEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTA2OEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTA2OEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTA2OTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTA2OTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTA2OTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTA2OTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTA2OTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTA2OTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTA2OTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTA2OTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTA2OTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTA2OTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTA2OUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTA2OUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTA2OUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTA2OUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTA2OUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTA2OUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTA2QTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTA2QTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTA2QTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTA2QTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTA2QTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTA2QTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTA2QTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTA2QTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTA2QTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTA2QTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTA2QUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTA2QUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTA2QUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTA2QUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTA2QUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTA2QUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTA2QjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTA2QjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTA2QjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTA2QjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTA2QjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTA2QjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTA2QjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTA2QjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTA2QjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTA2QjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTA2QkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTA2QkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTA2QkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTA2QkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTA2QkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTA2QkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTA2QzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTA2QzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTA2QzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTA2QzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTA2QzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTA2QzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTA2QzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTA2QzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTA2QzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTA2QzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTA2Q0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTA2Q0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTA2Q0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTA2Q0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTA2Q0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTA2Q0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTA2RDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTA2RDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTA2RDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTA2RDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTA2RDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTA2RDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTA2RDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTA2RDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTA2RDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTA2RDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTA2REEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTA2REIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTA2REMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTA2REQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTA2REUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTA2REYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTA2RTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTA2RTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTA2RTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTA2RTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTA2RTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTA2RTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTA2RTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTA2RTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTA2RTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTA2RTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTA2RUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTA2RUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTA2RUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTA2RUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTA2RUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTA2RUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTA2RjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTA2RjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTA2RjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTA2RjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTA2RjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTA2RjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTA2RjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTA2RjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTA2RjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTA2RjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTA2RkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTA2RkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTA2RkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTA2RkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTA2RkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTA2RkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTA3MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTA3MDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTA3MDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTA3MDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTA3MDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTA3MDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTA3MDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTA3MDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTA3MDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTA3MDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTA3MEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTA3MEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTA3MEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTA3MEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTA3MEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTA3MEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTA3MTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTA3MTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTA3MTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTA3MTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTA3MTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTA3MTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTA3MTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTA3MTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTA3MTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTA3MTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTA3MUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTA3MUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTA3MUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTA3MUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTA3MUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTA3MUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTA3MjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTA3MjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTA3MjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTA3MjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTA3MjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTA3MjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTA3MjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTA3MjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTA3MjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTA3MjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTA3MkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTA3MkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTA3MkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTA3MkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTA3MkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTA3MkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTA3MzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTA3MzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTA3MzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTA3MzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTA3MzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTA3MzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTA3MzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTA3MzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTA3MzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTA3MzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTA3M0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTA3M0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTA3M0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTA3M0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTA3M0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTA3M0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTA3NDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTA3NDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTA3NDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTA3NDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTA3NDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTA3NDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTA3NDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTA3NDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTA3NDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTA3NDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTA3NEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTA3NEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTA3NEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTA3NEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTA3NEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTA3NEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTA3NTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTA3NTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTA3NTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTA3NTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTA3NTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTA3NTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTA3NTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTA3NTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTA3NTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTA3NTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTA3NUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTA3NUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTA3NUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTA3NUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTA3NUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTA3NUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTA3NjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTA3NjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTA3NjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTA3NjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTA3NjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTA3NjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTA3NjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTA3NjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTA3NjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTA3NjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTA3NkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTA3NkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTA3NkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTA3NkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTA3NkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTA3NkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTA3NzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTA3NzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTA3NzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTA3NzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTA3NzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTA3NzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTA3NzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTA3NzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTA3NzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTA3NzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTA3N0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTA3N0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTA3N0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTA3N0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTA3N0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTA3N0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTA3ODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTA3ODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTA3ODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTA3ODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTA3ODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTA3ODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTA3ODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTA3ODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTA3ODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTA3ODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTA3OEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTA3OEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTA3OEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTA3OEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTA3OEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTA3OEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTA3OTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTA3OTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTA3OTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTA3OTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTA3OTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTA3OTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTA3OTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTA3OTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTA3OTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTA3OTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTA3OUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTA3OUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTA3OUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTA3OUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTA3OUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTA3OUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTA3QTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTA3QTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTA3QTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTA3QTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTA3QTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTA3QTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTA3QTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTA3QTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTA3QTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTA3QTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTA3QUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTA3QUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTA3QUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTA3QUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTA3QUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTA3QUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTA3QjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTA3QjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTA3QjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTA3QjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTA3QjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTA3QjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTA3QjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTA3QjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTA3QjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTA3QjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTA3QkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTA3QkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTA3QkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTA3QkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTA3QkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTA3QkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTA3QzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTA3QzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTA3QzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTA3QzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTA3QzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTA3QzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTA3QzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTA3QzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTA3QzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTA3QzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTA3Q0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTA3Q0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTA3Q0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTA3Q0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTA3Q0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTA3Q0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTA3RDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTA3RDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTA3RDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTA3RDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTA3RDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTA3RDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTA3RDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTA3RDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTA3RDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTA3RDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTA3REEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTA3REIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTA3REMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTA3REQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTA3REUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTA3REYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTA3RTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTA3RTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTA3RTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTA3RTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTA3RTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTA3RTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTA3RTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTA3RTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTA3RTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTA3RTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTA3RUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTA3RUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTA3RUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTA3RUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTA3RUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTA3RUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTA3RjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTA3RjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTA3RjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTA3RjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTA3RjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTA3RjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTA3RjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTA3RjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTA3RjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTA3RjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTA3RkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTA3RkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTA3RkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDBGNzBGMDBCQzQ1Cis6MTA3RkQwMDA4MEIyMDAwMDAzODAwMDQwODFCMjAwMDAwMzgwMDA0MEI2Cis6MTA3RkUwMDA4MUIyMDAwMDAzODAwMDQwODFCMjAwMDAwMzgwMDA0MEE1Cis6MTA3RkYwMDA4MUIyMDAwMDAzODAwMDQwODFCMjAwMDAwMzgwMDA0MDk1Cis6MTA4MDAwMDA4MUIyMDAwMDAzODAwMDQwODFCMjAwMDAwMzgwMDA0MDg0Cis6MTA4MDEwMDA4MUIyMDAwMDMxODAwMDQwODFCMjAwMDAzNDgwMDA0MDE1Cis6MTA4MDIwMDA4MUIyMDAwMDM1ODAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTA4MDMwMDA4MUIyMDAwMDFCODA4MTgwODAzMjAwMDBFQzg5QTI0MDY4Cis6MTA4MDQwMDA5MTZGMDAwMDAwMDAwMDRDOTBCMzAxMDA1Qzk1MkVBMkRGCis6MTA4MDUwMDA4MEIwMDEwMEZGMDAwMDgwRjQ4OTAxMDA5MDk1MkFDOERCCis6MTA4MDYwMDBFNUIxMDEwMDAwMDAwMEExRjBCMTAxMDAwMDAwMDA0MEY2Cis6MTA4MDcwMDBGMEIxMDEwMDAwMDAwMEE0RjBCMTAxMDAwMDAwMDBEMDQ4Cis6MTA4MDgwMDBGMEIxMDEwMDAwMDAwMEQxRjBCMTAxMDAwMDAwMDBEMjA5Cis6MTA4MDkwMDBGMEIxMDEwMDAwMDAwMDRDRjBCMTAxMDAwMDAwMDBENDdDCis6MTA4MEEwMDBGMEIxMDEwMDAwMDAwMEQzRjBCMTAxMDAwMDAwMDBFRUNCCis6MTA4MEIwMDBGMEIxMDEwMDAwMDAwMDRFRjBCMTAxMDAwMDAwMDA0MEVFCis6MTA4MEMwMDA0NEIxMDEwMDE4ODAxMTgxOTgzMDAwMDAwMDAwNTE0MDM3Cis6MTA4MEQwMDA4MUIyMDEwMDFBODAxMTgyOTgzMDAwMDAwMDAwNTI0MEU1Cis6MTA4MEUwMDA4MUIyMDEwMEVDODkwMDQ4RkQ5MzAwMDBCNjAzMDA0MDE2Cis6MTA4MEYwMDBBMTk5MDEwMDIzODBBMjQyRkQ3RjAwMDAyMDgwMDA4MDIyCis6MTA4MTAwMDA4MDMyMDAwMDIyODAxMTgxODIzMDAwMDAyMjgwNTE0MEE0Cis6MTA4MTEwMDA4MUIyMDAwMDIyODAxMTgyODIzMDAwMDAyMjgwNTI0MDExCis6MTA4MTIwMDA4MUIyMDAwMDJDODAwMDQ4RkQ5MzAwMDAyNzgwMDA4MDcxCis6MTA4MTMwMDA4MDMyMDAwMDI2ODBBMjUzMDc3QzAwMDAwMDAwNTE1M0NCCis6MTA4MTQwMDAwNzkwMDEwMDJBODAwMDUyMDc5MDAwMDAyOTgwQTI1MjY3Cis6MTA4MTUwMDAwNzdDMDAwMDAwMDA1MjUyMDc5MDAxMDAwMDAwMDA1MzBECis6MTA4MTYwMDAwNzkwMDEwMDAwMDAwMDQ4RkQ5MzAxMDAwMDAwMDA0NTU5Cis6MTA4MTcwMDBGMzkzMDEwMDVDOTUyRUEyNTJCMzAxMDBGRjAwMDA4MDMyCis6MTA4MTgwMDBGNDg5MDEwMDAwMDAwMDRDRTRCMTAxMDAwMDAwMDBBOUU2Cis6MTA4MTkwMDA0NUIxMDEwMDMwODAwMDRDODBCMjAwMDAwMDAwNDU0MDM1Cis6MTA4MUEwMDA4MUIyMDEwMDAwMDA1NTQwODFCMjAxMDAxQjg0MDU0MEVFCis6MTA4MUIwMDA0OUIxMDAwMDFCODQwNTQwNDlCMTAwMDAwMDAwMDU0MEEyCis6MTA4MUMwMDA0OUIxMDEwMEUxODAwMDQwODEzMjAxMDAwMDAwMDA0QjE0Cis6MTA4MUQwMDBERUIyMDEwMDc3MDAwMDQwNEI5OTAxMDAwMDAwMDA0MDMyCis6MTA4MUUwMDBGRDkzMDEwMDAwMDAwMDQ4RkQ4MzAxMDAwMjAwMDA0MEYzCis6MTA4MUYwMDA5QjlCMDEwMDAwMDAwMEE1OUNCMzAxMDBGNjk5MDA0MDg0Cis6MTA4MjAwMDA4MTMyMDEwMDU4OTUyMDQ0RTBCMTAxMDAwMEMwMDBBNjcxCis6MTA4MjEwMDAzNkIxMDEwMEQwMTQwMDQwNDc5OTAxMDAwNTAwMDA0MDJDCis6MTA4MjIwMDBGNTk5MDEwMDAwMzgwMDQwRjU5OTAxMDAwMDA2MDA0MDcyCis6MTA4MjMwMDBGNTk5MDEwMDAwMDAwMDQwRjU5OTAxMDAwNTE4MDA0MDgzCis6MTA4MjQwMDBGNTk5MDEwMDAyMDkwMDQwRjU5OTAxMDAwNDAwMDA0MDgxCis6MTA4MjUwMDBGNTk5MDEwMDUwMDMwMDQwODEzMjAxMDA3QjAzMDA0MDhBCis6MTA4MjYwMDA4MTMyMDEwMEUwODMwMDQwODEzMjAxMDAxMDg0MDA0MDJGCis6MTA4MjcwMDA4MTMyMDEwMDA4ODQwMDQwODEzMjAxMDA2MDk1MjA0MDc1Cis6MTA4MjgwMDBFMUIxMDEwMDcwOTUyMDQwRTFCMTAxMDAwMDAwMDA0OTFBCis6MTA4MjkwMDBERDkxMDEwMDAwMDAwMDQwOTFCMzAxMDAwMDAwMDA0MEFBCis6MTA4MkEwMDA4NUIzMDEwMDVDOTUyMDQwRTFCMTAxMDAxQTgyMDA0MEQ1Cis6MTA4MkIwMDA4MTMyMDEwMDcxODMwMDQwODEzMjAxMDAwMjAwMDA5Nzg5Cis6MTA4MkMwMDA4MDk4MDEwMDAwMDAwMDQwMkVCMTAxMDAwMjAwMDA0MDMzCis6MTA4MkQwMDAyRUREMDEwMDkwMDEwMDQwOTM5ODAxMDAyOTAxMDA0MDJCCis6MTA4MkUwMDA4MTMyMDEwMDVDODEwMDQwQUYzMzAxMDA3OTk5MDA0MDg4Cis6MTA4MkYwMDA4MTMyMDEwMDAwMDA0NTQwODFCMjAxMDAwMDAwNTU0MDdDCis6MTA4MzAwMDA4MUIyMDEwMDQ5ODQwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTA4MzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTA4MzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTA4MzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTA4MzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTA4MzUwMDA4MUIyMDAwMDc3MDEwMDQxODFDMDAwMDA3MTgwNTE0MDZFCis6MTA4MzYwMDA4MUIyMDAwMDcyODA1MjQwODFCMjAwMDA3MzgwNTU0MDlCCis6MTA4MzcwMDA4MUIyMDAwMDc0ODA1NjQwODFCMjAwMDA1NTAxOTE4MUE1Cis6MTA4MzgwMDA4MDMwMDAwMDVBMDE0NTQwODFCMjAwMDA1NTAxOTE4MkMxCis6MTA4MzkwMDA4MDMwMDAwMDVBMDE0NjQwODFCMjAwMDA1QTAxMDA0ODc2Cis6MTA4M0EwMDBGRDkzMDAwMDVBMDEwMDQ4RkQ5MzAwMDA1QTAxMDA0OTY2Cis6MTA4M0IwMDBGRDgzMDAwMDVBMDEwMDRBRkQ4MzAwMDAwMDAwMDA0MEQ4Cis6MTA4M0MwMDA0OUIxMDEwMEFFMDMwMENCQTNDOTAxMDAwMDAwMDAyMEE5Cis6MTA4M0QwMDA0NkIxMDEwMDAwMDAwMEQyRjFCMTAxMDAwMDAwMDBEMzVECis6MTA4M0UwMDBGMUIxMDEwMDAwMDAwMDQyRjBCMTAxMDAwMDAwMDA0NUMxCis6MTA4M0YwMDA2MUIxMDEwMDIwMDAwMDIwNjJERDAxMDAwMDAwQThEMDcyCis6MTA4NDAwMDBFMUIxMDAwMDdDODAwMDQwODFCMjAwMDAwMDAwMDBBOEMzCis6MTA4NDEwMDA5OEIwMDEwMDA0ODAwMDQwOEJCMzAwMDBCMTAzMDA0MDFECis6MTA4NDIwMDBBMTk5MDEwMDg0ODBBMjQxOTc2RjAwMDAwMDAwMDA0NURGCis6MTA4NDMwMDBBMUMxMDEwMDAwMDAwMDAwODBCMDAxMDAwMDAwQTIwNDAyCis6MTA4NDQwMDA4MDk0MDAwMDgwMTUzRjQyOTdFMzAxMDAwMDAwMDA0MDQ3Cis6MTA4NDUwMDA0OUIxMDEwMDAwMDA2MDAzMDI5NDAxMDAwMDAwMDA0MEU3Cis6MTA4NDYwMDAwN0IwMDEwMDA0MDAwMENCOTlDQjAxMDAwMDAwMDBDQzU0Cis6MTA4NDcwMDBGMzgzMDEwMDhFODBBMjQxOTc2RjAwMDAwMDAwMDBDQkMzCis6MTA4NDgwMDBGMzkzMDEwMEFFMDMwMENCQTNDOTAxMDAwMDAwMDAyMDVDCis6MTA4NDkwMDA0NEIxMDEwMDAwMDAwMDQ0RjFCMTAxMDAwMDAwMDAwMEZGCis6MTA4NEEwMDBGMEIxMDEwMDAwMDAwMDA0RjBCMTAxMDAwMDAwMDBBMUUzCis6MTA4NEIwMDBFMEIxMDEwMDA1MDAwMDQwNjE5OTAxMDAyMDAwMDAyMEFBCis6MTA4NEMwMDA2MkREMDEwMDk1ODBBODQwODEzMjAwMDBDNjAyMDAyMEQ0Cis6MTA4NEQwMDA0MjMxMDEwMDAwMDBBMjQxMDU2QzAxMDAwMDAwODBDQjg4Cis6MTA4NEUwMDBEQjkxMDEwMDAwMDAxOTQxOEJCMzAxMDA2MDAwMDA0MEU2Cis6MTA4NEYwMDA2MTk5MDEwMDlCODBBOEIxOEMzMzAwMDA2MDAwMDA0MEFFCis6MTA4NTAwMDA2MTk5MDEwMDlEODBBOEIxOTQzMzAwMDBBMzgwMTRDNjM2Cis6MTA4NTEwMDA4MTMyMDAwMDE4MDAwMEM2ODNGNDAxMDA2QTg0MjI0RkYzCis6MTA4NTIwMDA4MzA0MDAwMDdGODAwMDQwODFCMjAwMDBGRjAxMDBDNjhDCis6MTA4NTMwMDA4MTg4MDEwMDAwMDAwMEM2OTdBMzAxMDA3RjgwMUY1Q0I2Cis6MTA4NTQwMDA5NzUzMDAwMDlFODMxREM2ODEzMjAwMDAwMDAwMkY0MzE4Cis6MTA4NTUwMDA4MUYwMDEwMEE5ODAwMDQwMTBDOTAwMDAwNTgxMDA0MEExCis6MTA4NTYwMDA4MUIyMDAwMDM2ODEwMDQwODFCMjAwMDBEQTgxMDBDQTg5Cis6MTA4NTcwMDA2M0IzMDAwMDJEODEwMDQwODFCMjAwMDAxNDgxMDA0REUyCis6MTA4NTgwMDA4M0IwMDAwMDFFODEwMDRFNjFCMTAwMDAwRDgxMDA0MEVCCis6MTA4NTkwMDA4NUIwMDAwMDE0ODEwMDRDODNCMDAwMDBGMDgwMDA0MEUyCis6MTA4NUEwMDA4NUIwMDAwMDkxODEwMDQwNDlCMTAwMDAzRDgxMDA0MDRDCis6MTA4NUIwMDBDMUIxMDAwMDhEODEwMDQwODFCMjAwMDAwRDgxMDA0MEZBCis6MTA4NUMwMDA4NUIwMDAwMEREODEwMDQwNDlCMTAwMDA2QTg0MDBDQTI2Cis6MTA4NUQwMDA5QkIzMDAwMDQ2ODEwMDQwQzFCMTAwMDA0RTgxMDA0MEM1Cis6MTA4NUUwMDBDMUIxMDAwMDU1ODEwMDQwQzFCMTAwMDA1NjgxMDA0MDdBCis6MTA4NUYwMDBDMUIxMDAwMDU3ODEwMDQwQzFCMTAwMDA1ODgxMDA0MDY2Cis6MTA4NjAwMDBDMUIxMDAwMDU5ODEwMDQwODFCMDAwMDA1OTgxMDA0MTkyCis6MTA4NjEwMDA4MUIwMDAwMENFODEwMDQwODFCMjAwMDBERDgzMDBCQjRDCis6MTA4NjIwMDBBQkIzMDAwMERCODEwMENBQ0ZCMzAwMDBEMzgwMDA0MEIxCis6MTA4NjMwMDA0OUIxMDAwMERGODAwMDQwODFCMjAwMDBEQzgxMDA0MEQxCis6MTA4NjQwMDA4MUIyMDAwMDZBODQwMDQwODFCMjAwMDBEQTgwMDA0MEZDCis6MTA4NjUwMDA4MUIyMDAwMDZBODQwMENBNzdCMzAwMDAxNTgxMDA0RDIyCis6MTA4NjYwMDA4M0IwMDAwMDFDODEwMDRFNjFCMTAwMDAwRDgxMDBCQjkxCis6MTA4NjcwMDA4NUIwMDAwMDE1ODEwMDRDODNCMDAwMDAwRDgxMDBCQjY3Cis6MTA4NjgwMDA4NUIwMDAwMEYwODAwMEJCODVCMDAwMDBFMjgwMDA0MEIzCis6MTA4NjkwMDA4MUIyMDAwMDZBODQwMENBNERCMzAwMDA2NDgyMDA0MEM5Cis6MTA4NkEwMDA0OUIxMDAwMDhGODIwMDQwNDlCMTAwMDBDODE0MkVCQkMwCis6MTA4NkIwMDA4NUIwMDEwMDAwMDAwMEVFODJCMDAxMDAwMDAwMDA0MTIyCis6MTA4NkMwMDBFMEIxMDEwMEZGN0YwMEEyQTA4QjAxMDAwMDAwMDA0NDg4Cis6MTA4NkQwMDBBNUIzMDEwMDc1ODAwMENBQTczMzAxMDAwMjgxMDA0MEU0Cis6MTA4NkUwMDA4MUIyMDAwMDRFMDEwMDREOTMzMDAxMDA0RTAxMDA0RTVBCis6MTA4NkYwMDA5MzMwMDEwMDRFMDEwMDRDOTMzMDAxMDAwODg0MDA0MDhCCis6MTA4NzAwMDA4MTMyMDEwMDZBODQwMDQwODFCMjAwMDA1NDk1MDA0MDJCCis6MTA4NzEwMDA0NTk5MDEwMDZBODQwMENBRTVCMTAwMDAwMDAwODA0MDZDCis6MTA4NzIwMDA5N0IwMDEwMEU4ODAyMjQyOEY2RjAwMDBFQTgwMjI0MTZBCis6MTA4NzMwMDA4RjZGMDAwMEVDODAxRUNBODEzMjAwMDBFRTgwMUZDQURECis6MTA4NzQwMDA4MTMyMDAwMDAwMDAwMENBQzlCMTAxMDA2QTg0MDA0MjAxCis6MTA4NzUwMDA4RkIzMDAwMDAwMDAwMENBQ0RCMTAxMDA2QTg0MDA0MTVGCis6MTA4NzYwMDA4RkIzMDAwMDAwMDAwMENBQ0ZCMTAxMDA2QTg0MDA0MDRFCis6MTA4NzcwMDA4RkIzMDAwMDAwODEwMEE2QzZCMTAxMDA2QTg0MDA0MEVBCis6MTA4NzgwMDA4MUIyMDAwMDAwODAwMEE2QzZCMTAxMDA2QTg0MDA0MEVBCis6MTA4NzkwMDA4RkIzMDAwMDc4MTgwMDQwNDk5OTAxMDAxMDAwMkY5QzA5Cis6MTA4N0EwMDA4OUIwMDEwMDA3ODEwMDQwMzkzMzAxMDAxODAwMkY5Qjc4Cis6MTA4N0IwMDA4OUIwMDEwMDA3ODEwMDQwMzczMzAxMDAwMDAwMkY5QTgzCis6MTA4N0MwMDA4OUIwMDEwMDA3ODEwMDQwMzUzMzAxMDAwODAwMkY5OTZFCis6MTA4N0QwMDA4OUIwMDEwMDA3ODEwMDQwMzMzMzAxMDAwMDgwMDBBRTAyCis6MTA4N0UwMDA0N0M5MDEwMDgwMDAwMDQwRjE5OTAxMDAwMDAwMDBDQTYzCis6MTA4N0YwMDBGMUIxMDEwMDAwMDAwMDQyRjBCMTAxMDA0MDE4MDA0MDVBCis6MTA4ODAwMDBFMTk5MDEwMDAwMDAwMDQ1NjFCMTAxMDAyMDAwMDBBRUM3Cis6MTA4ODEwMDA2M0REMDEwMDAyODEyODQwODEzMjAwMDBGRjgwMDA0MEJBCis6MTA4ODIwMDA4MUIyMDAwMDAyODE0MjQwODEzMjAwMDAwMDAwMDA1QzAxCis6MTA4ODMwMDA2OTkzMDEwMDZBODQxQTQ0OTM5MzAwMDAwNTgxNDI0MEMxCis6MTA4ODQwMDA4MTMyMDAwMDA0ODEwMDU4Njk5MzAwMDAwMDAwMDA0NDU4Cis6MTA4ODUwMDBGMEQxMDEwMDAwMDBBNDQwODFCMjAwMDAwQzgxQTI0MEQwCis6MTA4ODYwMDBFMTZEMDAwMDAwMDAwMDQ0NDVEMTAxMDAwMDAwODA0MDlGCis6MTA4ODcwMDBFMUIxMDEwMDAwMDA4MDQxRTFEMTAxMDAwRDgxMzc1Q0QwCis6MTA4ODgwMDA2MTMxMDAwMDAwMDAwMDQyNjJCMTAxMDAxMTgxMjg0MDA2Cis6MTA4ODkwMDA4MTMyMDAwMDBFODEwMDQwODFCMjAwMDAwMDAwMDBDQTU5Cis6MTA4OEEwMDA2M0IxMDEwMDExODFBODQwODEzMjAwMDA2QTg0MTc0MDQxCis6MTA4OEIwMDA4MUIyMDAwMDE2ODEwMDQwODFCMDAwMDAxNjgxMDBCQjJCCis6MTA4OEMwMDA4MUIwMDAwMDAwMDAwMDQxNjBCMTAxMDAwMDAwMDA0MEU0Cis6MTA4OEQwMDA2MkIxMDEwMDE3ODFBODQwODEzMjAwMDAwMDAwMDBDQTg3Cis6MTA4OEUwMDA2M0IxMDEwMDZBODQyODQwODEzMjAwMDAxOTgxMDA0MDkwCis6MTA4OEYwMDA4MUIyMDAwMDUwOTUwMDQwNDc5OTAxMDAxRjgxMDBCQkU0Cis6MTA4OTAwMDA4N0IwMDAwMDUwOTUyRjQwODdCMDAxMDAyMTgxMjI0MEEwCis6MTA4OTEwMDA5NTdGMDAwMDZBODQ2MDQwOTU4MzAwMDAwMjAwMkRGMDdFCis6MTA4OTIwMDA4NEIwMDEwMDIyODEzNjQwODEzMjAwMDAwMDAwMDA0MjA0Cis6MTA4OTMwMDA2MkIxMDEwMDIzODFBODQwODEzMjAwMDAwMDAwMDA0M0ExCis6MTA4OTQwMDA2MkIxMDEwMDI1ODFBODQwODEzMjAwMDAwMDAwMDBDQTA4Cis6MTA4OTUwMDA2M0IxMDEwMDI3ODFBODQwODEzMjAwMDAwMDAwMTY0MDY5Cis6MTA4OTYwMDA4MUIyMDEwMDZBODQyMjQxNDM1MTAwMDAwMDA4MDBDQTFDCis6MTA4OTcwMDA5NUNCMDEwMDIyODEwMDQxODVDMDAwMDAyRjgxQTI0MkQ5Cis6MTA4OTgwMDA2NzZGMDAwMDAwMDAwMDQxNjdCMzAxMDAyRjgxNDI0MDgzCis6MTA4OTkwMDA4MTMyMDAwMDAwMDAwMDQwNjVCMzAxMDAwMDAwMDA0MDhCCis6MTA4OUEwMDA5MzgzMDEwMDAwMDAxQUNBNjk5NzAxMDA2QTg0MjY0MDc3Cis6MTA4OUIwMDA4MTMyMDAwMDM0ODE0MjQwODEzMjAwMDA2QTg0MUE0NENFCis6MTA4OUMwMDA5MzkzMDAwMDZBODQyMDQzOTU2RjAwMDA2QTg0ODBDQUY0Cis6MTA4OUQwMDA2NzMzMDAwMDZBODQyMjQwNjU2RjAwMDA2QTg0MDA2RjdDCis6MTA4OUUwMDBEQjkxMDAwMEMxMDAwMDQwODEzMjAxMDAzNTgwMjI0MDRGCis6MTA4OUYwMDA4MDMyMDAwMDZBODQwMDQwODFCMjAwMDAwMDAwMDA1RjA1Cis6MTA4QTAwMDA5NTkzMDEwMDQyODFBMjQ0MjE2RjAwMDAwMDAwMDA1RkE1Cis6MTA4QTEwMDA5NTgzMDEwMDAwMDAwMDVFOTU5MzAxMDAwMDAwMDA1NzVGCis6MTA4QTIwMDA5NTkzMDEwMDAwMDAwMENBQzNCMTAxMDA0NTgxMjI1QjlCCis6MTA4QTMwMDA5NTdGMDAwMDAwMDAwMDRCRkQ5MzAxMDA2QTg0MDA0MDE4Cis6MTA4QTQwMDA4MUIyMDAwMDQ5ODEyMjQwQUY2RjAwMDAxQkY1MDBDQUNGCis6MTA4QTUwMDA5NTlCMDEwMDRBODEwMDQwODFCMjAwMDAxQkZEMDBDQUM1Cis6MTA4QTYwMDA5NTlCMDEwMDAwMDAwMENBN0ZCMzAxMDAyNjAxMDBDQUU3Cis6MTA4QTcwMDBDNTMxMDEwMDAwMDAwMDVGOTU4MzAxMDA2QTg0MDBDQUNGCis6MTA4QTgwMDBDNUIxMDAwMERGNkYwMENBOTU5QjAxMDAwMDAwMDA1NUQyCis6MTA4QTkwMDA5NTkzMDEwMDAwMDAwMENBQzdCMTAxMDA2QTg0MjI1RkZCCis6MTA4QUEwMDA5NTdGMDAwMDI2MDEwMDQwODEzMjAxMDAwMDAwMDA1RjM4Cis6MTA4QUIwMDA5NTgzMDEwMDZBODQwMENBQzdCMTAwMDA2QTg0MDBDQUI1Cis6MTA4QUMwMDBDOUIxMDAwMDZBODQwMENBQ0JCMTAwMDA2QTg0MDBDQTQwCis6MTA4QUQwMDBDREIxMDAwMDZBODQwMENBQ0ZCMTAwMDAwMDAwMkU0MjcwCis6MTA4QUUwMDA4MUUwMDEwMDk4MTQwMDQwNDhDOTAxMDA2QTg0MDBDQTZFCis6MTA4QUYwMDBFMUIxMDAwMDAwMDAwMDQwMDlCMTAxMDAyMDAwMDBBNjIzCis6MTA4QjAwMDA4MkIwMDEwMDVFODFBMjVFMEI3RDAwMDAwMDgwMDA0MTBBCis6MTA4QjEwMDAwODk5MDEwMDYwODFBMjVFMEI3RDAwMDAyMDgwMDBBNjA0Cis6MTA4QjIwMDAwOEIxMDEwMDYyODE5Rjg1ODIzMDAwMDA2MTgxQTI0RkZGCis6MTA4QjMwMDAwQjdEMDAwMDAwMDAwMDQxMjFCMzAxMDAwMjgwMDBBNjZGCis6MTA4QjQwMDA4MkIwMDEwMEM5ODEwMDQwODEzMjAxMDAxMDAwMDA0MTYzCis6MTA4QjUwMDA4NEU0MDEwMDAzODAwMEE2ODJCMDAxMDBDOTgxMDA0MEM2Cis6MTA4QjYwMDA4MTMyMDEwMEYwRkYwMDQxODY4ODAxMDAwMDAwMDA0M0NGCis6MTA4QjcwMDA4NDk0MDEwMDBGMDAwMEE2ODZCMDAxMDAxMEM0MDA0M0Q5Cis6MTA4QjgwMDA4Njk4MDEwMDc1ODFBMjQzODQ2QzAwMDAwMDAwMDA0M0I4Cis6MTA4QjkwMDAyMUIzMDEwMDIwMDAwMEE2ODJCMDAxMDAxQzAwMDA0MUFBCis6MTA4QkEwMDA4MkRDMDEwMDcyODFBMjVFMEI3RDAwMDAwNDAwMDA0MUE2Cis6MTA4QkIwMDAwODk5MDEwMDdFODEwMDQwODFCMjAwMDA0MTAxMDBBNkI5Cis6MTA4QkMwMDA4NkIwMDEwMDUwMEMwMDQzODY5ODAxMDA3QTgxQTI0M0QwCis6MTA4QkQwMDA4NDZDMDAwMDAwMDAwMDQxMjFCMzAxMDA3RTgxMDA0MDUwCis6MTA4QkUwMDA4MUIyMDAwMDQxMDEwMEE2ODZCMDAxMDA2MDBDMDA0Mzg0Cis6MTA4QkYwMDA4Njk4MDEwMDdFODFBMjQzODQ2QzAwMDAwMDAwMDA0MjQwCis6MTA4QzAwMDAyMUIzMDEwMDIwMDAwMEE2ODJCMDAxMDA3RjgxQTI1RTk2Cis6MTA4QzEwMDAwQjdEMDAwMDQwMTMwMDQxMDg5OTAxMDA4NzgxMjI0MzI5Cis6MTA4QzIwMDAyMTZGMDAwMDIwMDAwMEE2ODJCMDAxMDAxMjAwMDA0MTY4Cis6MTA4QzMwMDA4MkRDMDEwMDg0ODFBMjVFMEI3RDAwMDAwMDA0MDA0MTAzCis6MTA4QzQwMDAwODk5MDEwMDhDODEwMDQwODFCMjAwMDAyMDAwMDBBNjNDCis6MTA4QzUwMDA4MkIwMDEwMDE5MDAwMDQxODJEQzAxMDA4OTgxQTI1RTFFCis6MTA4QzYwMDAwQjdEMDAwMDAwQTAwMDQxMDg5OTAxMDA4QzgxMDA0MEFDCis6MTA4QzcwMDA4MUIyMDAwMDAwMDA4MDQwODFCMjAxMDAyMDAwMDBBNjA3Cis6MTA4QzgwMDA4MEIwMDEwMDAwMDAwMENBODE5NDAxMDA4RjgxQTI1RUMzCis6MTA4QzkwMDAwQjdEMDAwMDZBODQwMDQwMDhCMTAwMDBDODE0MkVCQkEwCis6MTA4Q0EwMDA4NUIwMDEwMDkyODFBMjVFMEI3RDAwMDAwMDAwMDA0MEIzCis6MTA4Q0IwMDA4N0IwMDEwMEExODEyMjQzMjE2RjAwMDBCMDgxMjI0NENFCis6MTA4Q0MwMDAyMTZGMDAwMDExODAwMEE2ODJCMDAxMDBDOTgxMDA0MDIwCis6MTA4Q0QwMDA4MTMyMDEwMEI4ODEyMjRBODM3QzAwMDAwMDAwMDA0MEZDCis6MTA4Q0UwMDA4NzkwMDEwMDlDODEyMjREODM3QzAwMDAwMDAwMDA0MUEwCis6MTA4Q0YwMDA4NzkwMDEwMDlFODEyMjRGODM3QzAwMDAwMDAwMDA0MzhBCis6MTA4RDAwMDA4NzkwMDEwMEEwODEyMjRFODM3QzAwMDAwMDAwMDA0Mjc5Cis6MTA4RDEwMDA4NzkwMDEwMEI4ODEwMDQwODFCMjAwMDAwMTgwMDBBNjY4Cis6MTA4RDIwMDA4MkIwMDEwMEM5ODEwMDQwODEzMjAxMDAwMTgwMDBBNkFCCis6MTA4RDMwMDA4MkIwMDEwMEM5ODEwMDQwODEzMjAxMDBCODgxMjI0MjI1Cis6MTA4RDQwMDA4MzdDMDAwMDAwMDAwMDQwODc5MDAxMDAxQzgwMDBBNjhBCis6MTA4RDUwMDA4MkIwMDEwMEM5ODEwMDQwODEzMjAxMDBBQjgxMjI0NTBGCis6MTA4RDYwMDA4MzdDMDAwMDAwMDAwMDQxODc5MDAxMDBBRDgxMjI0NDE3Cis6MTA4RDcwMDA4MzdDMDAwMDAwMDAwMDQzODc5MDAxMDBBRjgxMjI0MzA0Cis6MTA4RDgwMDA4MzdDMDAwMDAwMDAwMDQyODc5MDAxMDBCODgxMDA0MDExCis6MTA4RDkwMDA4MUIyMDAwMDAxODAwMEE2ODJCMDAxMDBDOTgxMDA0MEJDCis6MTA4REEwMDA4MTMyMDEwMDAxODAwMEE2ODJCMDAxMDBDOTgxMDA0MDJCCis6MTA4REIwMDA4MTMyMDEwMEI4ODEyMjQyODM3QzAwMDAwMDAwMDA0MDIzCis6MTA4REMwMDA4NzkwMDEwMDAwMDAwMDQzODc5MDAxMDAwMDAwMDA0MUVGCis6MTA4REQwMDA4NzkwMDEwMDAwODAwMEE2ODJCMDAxMDBDOTgxMDA0MDk4Cis6MTA4REUwMDA4MTMyMDEwMEJDODEyMjRCODM3QzAwMDAwMDAwMDA0MEU2Cis6MTA4REYwMDA4NzgwMDEwMDAwMDAwMDQzRTBCMTAxMDAwMDAwMDA0MDU2Cis6MTA4RTAwMDBBRkIzMDEwMEM1ODEyMjQwODc3QzAwMDBDNTgxQTI0MTJCCis6MTA4RTEwMDA4NzdDMDAwMDAwMDAwMDQxQUVCMzAxMDAwMDAwMDA0MDZDCis6MTA4RTIwMDA4MUIzMDEwMEM0ODEyMjQyODc3QzAwMDBDNTgxMDAwQjEwCis6MTA4RTMwMDA3REIzMDAwMDAwMDAwMDBGN0RCMzAxMDBGRjdGMDBBMkEyCis6MTA4RTQwMDBBMDhCMDEwMDAwMDAwMDQ0QTVCMzAxMDA3NTgwMDBDQTlBCis6MTA4RTUwMDBBNzMzMDEwMDAyODEwMDQwODFCMjAwMDAyMDAwMDA0MUUwCis6MTA4RTYwMDA4MkRDMDEwMENBODFBMjVFMEI3RDAwMDAwMDAwMDA0MThGCis6MTA4RTcwMDAwOEIxMDEwMENDODE5Rjg1ODIzMDAwMDAwMDAwODA0MDU1Cis6MTA4RTgwMDA4MUIyMDEwMEQxODExNEY3ODEzMDAwMDBEMTgxQTI0OTYzCis6MTA4RTkwMDBGRDdGMDAwMDAwMDAwMDQ4RkQ5MzAxMDBENDgxMTVGODFCCis6MTA4RUEwMDA4MTE0MDAwMEQ0ODFBMjRBRkQ3RjAwMDAwMDAwMDA0ODI4Cis6MTA4RUIwMDBGRDkzMDEwMEQ2ODFBMkM4ODEzMjAwMDA0MDAwMDA0MDJECis6MTA4RUMwMDA4MERDMDEwMDAwMTAwMDQwODBEQzAxMDAwMDAwMDA0MDU4Cis6MTA4RUQwMDBFRkIzMDEwMEQ4ODE0MjQwRjEzMzAwMDAwNDgxMDA0MDJCCis6MTA4RUUwMDA2ODk3MDAwMDZBODQwMEJCNkJCMzAwMDA2QTg0MDBCQjEzCis6MTA4RUYwMDBCMUIzMDAwMDZBODQwMDQwODFCMjAwMDBDQzE0MkU0MDVGCis6MTA4RjAwMDA4N0IwMDEwMEZGN0YwMEEyQTA4QjAxMDBEODAwMDA0M0MyCis6MTA4RjEwMDBCMjMzMDEwMDAwMDA2OERBODlCMDAxMDA3QzAwMDA0MDMzCis6MTA4RjIwMDA4Qjk4MDEwMDAwMDAwMDUwODlGMDAxMDAwMDAwMDA0MTEyCis6MTA4RjMwMDA4OUQwMDEwMDAzMDAwMDQ0ODg4QzAxMDAwMDAwMDA0MjM5Cis6MTA4RjQwMDA4N0MwMDEwMDAwMDAwMDQxQTVCMzAxMDBEODAwMDA0MzI0Cis6MTA4RjUwMDBCMjMzMDEwMDAwMDAwMERBRjFCMTAxMDAwMDAwMDA0MjZDCis6MTA4RjYwMDA4N0MwMDEwMDAwMDAwMDQxQTVDMzAxMDBGODgxMjI0NDMwCis6MTA4RjcwMDA4OTUwMDAwMEY4ODEyMjQ0OEI1MDAwMDBFNzgxQTI1MDA0Cis6MTA4RjgwMDBBNTZGMDAwMDAwMDAwMDQyQTVFMzAxMDAwMDAwMDBDQTM4Cis6MTA4RjkwMDBBN0IzMDEwMDc1ODAwMEJCODUzMDAxMDBDQzE0MkVEMjMwCis6MTA4RkEwMDA5NUMzMDEwMEFFMDMwMENCQTNDOTAxMDAwMDAwMDAyMDVGCis6MTA4RkIwMDA0MkIxMDEwMDAwMDAwMDUwODFCMDAxMDBGNTgxQTI0MUUyCis6MTA4RkMwMDA4MTUwMDAwMEY0ODFBMkYyODAzMDAwMDBFNzgxMDA0MDZGCis6MTA4RkQwMDBBNUIzMDAwMDAwMDAwMDQyQTVFMzAxMDAwMDAwMDBDQUE0Cis6MTA4RkUwMDBBN0IzMDEwMDc1ODAwMEJCODUzMDAxMDAwMjgxMDA0MEZECis6MTA4RkYwMDA4MUIyMDAwMEQ5MDAwMDQxQjM3MzAxMDAwMDAwODA1MDJECis6MTA5MDAwMDBCNUYzMDEwMEQ4MDAwMDQxQjNGMzAwMDAwMDAwMDBEOTFGCis6MTA5MDEwMDBCM0ZCMDEwMDAwMzAwMEE2QjhCMzAxMDBGMjAwMDA0MDJECis6MTA5MDIwMDA4MTMyMDEwMDI1MDEwMDQyMkQwMTAxMDAwMDAyMDA0MEIzCis6MTA5MDMwMDA4Mzk4MDEwMEVCMDAwMDQwODEzMjAxMDAwMDAwMDA1MEU1Cis6MTA5MDQwMDA4MUIwMDEwMDI2MDEwMDQwODEzMjAxMDAwOTgyMTBEQTVFCis6MTA5MDUwMDBCNTZCMDAwMDBBODIwMDQxMkQ4MTAwMDAwMDAwMDA0MTM0Cis6MTA5MDYwMDAyRDkxMDEwMDI4MDEwMDQwODEzMjAxMDAyNTAxMDA0MEJFCis6MTA5MDcwMDAyRDExMDEwMDAwMDAwMDQwMkQ4MTAxMDAwNjgyQTI0MTU3Cis6MTA5MDgwMDA4MTUwMDAwMDI2MDEwMDQyMkQwMTAxMDAyNTAxMDA0MDExCis6MTA5MDkwMDA4MTMyMDEwMDI2MDEwMDQyMkQxMTAxMDAyNTAxMDA0MDBFCis6MTA5MEEwMDAyRDExMDEwMDE1ODIwNDQwMkQwMTAwMDAyNTAxMDA0MDEyCis6MTA5MEIwMDA4MTMyMDEwMDExODIwMDQwODFCMjAwMDAyODAxMDA0MDhECis6MTA5MEMwMDA4MTMyMDEwMDI1MDEwMDQyMkQwMTAxMDBGMjAwMDA0MDIzCis6MTA5MEQwMDBCOTMzMDEwMDAwMDAwMDQyMkQ4MTAxMDAwMDAwODA0MUYxCis6MTA5MEUwMDAyRDgxMDEwMDAwMDA4MDQwODFCMjAxMDAwMDAzMDA0MDlBCis6MTA5MEYwMDA4MTk4MDEwMDAwMDAwMDQwMThCMTAxMDA4MDAwMDA0MDhDCis6MTA5MTAwMDA4Mzk4MDEwMDAwMTkwMDQwNDU5OTAxMDAwMDAwNDI0MDg5Cis6MTA5MTEwMDA4MUIyMDEwMDAwMDA0M0ZGRjFCMTAxMDAwMDAwMDBGRjM3Cis6MTA5MTIwMDBGMUIxMDEwMDAwMDAwMDQxODFDMDAxMDAwMDAwMDA0MEQ5Cis6MTA5MTMwMDAxOEIxMDEwMDFGODJBMjQxODM1MDAwMDAwMDE2MDA0MEI4Cis6MTA5MTQwMDA0NTk5MDEwMDAwMTkwMDQwNDM5OTAxMDAwMDAwMDA0N0MzCis6MTA5MTUwMDA0M0MxMDEwMDAwMDAwMDQwODNCMDAxMDAwMDAwMDBGM0EzCis6MTA5MTYwMDA4MEIwMDEwMDAwMDAwMDVCODFEMDAxMDAwMDAwMDA0MUUwCis6MTA5MTcwMDA4MEQwMDEwMDAwMDAwMDQwRjZCMTAxMDAwMDAwMDA1QjVCCis6MTA5MTgwMDA0M0MxMDEwMDAwMDAwMDQxODNDMDAxMDAyOTgyQTI1NEI0Cis6MTA5MTkwMDA4MzZDMDAwMDAwMDAwMDQwRjdCMTAxMDAwMDAwMDA0MUI2Cis6MTA5MUEwMDA4M0MwMDEwMDMwODJBMjA2ODM2QzAwMDAwMDAwODA0MDcyCis6MTA5MUIwMDA4MUIyMDEwMDAwMDA4MDA3OTFCMDAxMDBFMTgwMDA0MDExCis6MTA5MUMwMDA4MTMyMDEwMDM5ODJBMjQwOTc2QzAwMDAyODAwMDA0MEUzCis6MTA5MUQwMDBCMzlCMDEwMDNBODIwMDQwODFCMjAwMDAyODAwMDA0MEE5Cis6MTA5MUUwMDBCMzlCMDEwMEZDODEwMDQwODEzMjAxMDAwMDAwMDBEQUU1Cis6MTA5MUYwMDBGNUIxMDEwMEZDODEwMDQyQjM0MzAxMDAwMDAwMDBEQTM4Cis6MTA5MjAwMDBGNUIxMDEwMEZDODEwMDQyQjM0MzAxMDAwMDAwMDBEQTI3Cis6MTA5MjEwMDBGNUIxMDEwMDRFMDAwMDQwQjM5QjAxMDBGQzgxMDA0MDBECis6MTA5MjIwMDA4MTMyMDEwMDA4MDAwMERBRjdGNTAxMDA1MDAwMDA0MDJCCis6MTA5MjMwMDA5MTk4MDEwMDAwMDAwMDQ3OEZCMDAxMDBGQzgxMDA0OEI4Cis6MTA5MjQwMDBCMjMzMDEwMDAwMDAwMERBRjdCMTAxMDAwODAwMDBEQUQzCis6MTA5MjUwMDBGN0Y1MDEwMDAwMDAwMDQyOTFDMDAxMDA0NTgyQTI0MUUzCis6MTA5MjYwMDA4RjUwMDAwMDAwMDAwMDQxNDVEMTAxMDAwODAwMDA0MDdGCis6MTA5MjcwMDBCMzlCMDEwMEZDODEwMDQwODEzMjAxMDAwMDAwMDBEQTU0Cis6MTA5MjgwMDBGREIxMDEwMDBBMDAwMDQwQjM5QjAxMDBGQzgxMDA0MEQ5Cis6MTA5MjkwMDA4MTMyMDEwMDAwMDAwMERBRkRCMTAxMDAxODAwMDA0MDM5Cis6MTA5MkEwMDBCMzlCMDEwMEZDODEwMDQwODEzMjAxMDAwMDAwMDBEQTI0Cis6MTA5MkIwMDBGREIxMDEwMDE2MDAwMDQwQjM5QjAxMDBGQzgxMDA0MDlECis6MTA5MkMwMDA4MTMyMDEwMDAwMDAwMERBRkRCMTAxMDAzNDgyMDA0MDZCCis6MTA5MkQwMDA4MTMyMDEwMDFFMDAwMDQ4QjJDQjAxMDBGQzgxMDA0MDM5Cis6MTA5MkUwMDA4MTMyMDEwMDAwMDAwMERBOTFDMDAxMDAwMDAwMDA0ODU2Cis6MTA5MkYwMDBCMkNCMDEwMEZDODEwMDQwODEzMjAxMDAwMDAwNkVEQTM3Cis6MTA5MzAwMDA4RkIwMDEwMDAyMDAwMDQ4QjJDQjAxMDBGQzgxMDA0MDk4Cis6MTA5MzEwMDA4MTMyMDEwMDAwMDAwMERBRkRCMTAxMDAwNDAwMDA0OEM0Cis6MTA5MzIwMDBCMkNCMDEwMEZDODEwMDQwODEzMjAxMDAwMDAwODBEQUY0Cis6MTA5MzMwMDBGREIxMDEwMDZGODIyMjUwRkQ3RjAwMDA2RjgyMjI0NTQ3Cis6MTA5MzQwMDBGRDdGMDAwMDQwMTYwMDQwNDU5OTAxMDAzNTgyMDA0MDM1Cis6MTA5MzUwMDA0OTMxMDEwMDA4MDAwMDQ4QjJDQjAxMDBGRTgxMDA0MDA1Cis6MTA5MzYwMDA4MTMyMDEwMDZEODJBMjQwOEY2QzAwMDA3MjgyMjIyMDQ3Cis6MTA5MzcwMDBCNTZGMDAwMDZGODIwMDQwODFCMjAwMDBEQjgyMDA0MEM4Cis6MTA5MzgwMDA4MTMyMDEwMDcyODIyMjQwOTc2QzAwMDA2RjgyNDI0MDVECis6MTA5MzkwMDA4MTMyMDAwMDAwMDAwMDRGNjk5MzAxMDAwNDgxMDA1OEYxCis6MTA5M0EwMDA2OTkzMDAwMDU0MTYwMDQwNDc5OTAxMDAwMDAwMDBGRTM4Cis6MTA5M0IwMDBGNEIxMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDBGRTk1Cis6MTA5M0MwMDBGNEIxMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDBGRTg1Cis6MTA5M0QwMDBGNEIxMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDBGRTc1Cis6MTA5M0UwMDBGNEIxMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDBGRTY1Cis6MTA5M0YwMDBGNEIxMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDBGRTU1Cis6MTA5NDAwMDBGNEIxMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDBGRTQ0Cis6MTA5NDEwMDBGNEIxMDEwMDQ2MDAwMDQwQjM5QjAxMDBGQzgxMDA0MDE0Cis6MTA5NDIwMDA4MTMyMDEwMDA4MDAwMERBRjdGNTAxMDA0ODAwMDA0MDMxCis6MTA5NDMwMDA5NTk4MDEwMDAwMDAwMDQ0OTdCMDAxMDBGQzgxMDA0QUFCCis6MTA5NDQwMDBCMjMzMDEwMDAwMDAwMERBRjdCMTAxMDAwODAwMDBEQUQxCis6MTA5NDUwMDBGN0Y1MDEwMDAwMDAwMDQyOTVDMDAxMDA4NTgyQTI0MTlECis6MTA5NDYwMDA5NzUwMDAwMDJBMDAwMDQwQTU5QjAxMDA0MDE2MDA0MEQ0Cis6MTA5NDcwMDBBMTlCMDEwMDAwMDAwMENBQTdCMzAxMDA3NTgwMDBCQkRBCis6MTA5NDgwMDA4NTMwMDEwMDAyODEwMDQwODFCMjAwMDBBNzgyMjI0NUEwCis6MTA5NDkwMDBGRDdGMDAwMEUwMTUwMDQwNDc5OTAxMDAxQTAwMDBBMjdFCis6MTA5NEEwMDA4MERDMDEwMDAwMDAwMDUwRjFCMTAxMDBGMDE1MDA0MDI3Cis6MTA5NEIwMDBGMTk5MDEwMDAwMDAwMENBRjFCMTAxMDAwNzAwMDA0MDZECis6MTA5NEMwMDA2MTk5MDEwMEEwMDAwMDQwNjJERDAxMDA5NjgyQThCQjA2Cis6MTA5NEQwMDBFMTMxMDAwMDAwMDAwMDUwODNCMDAxMDA5OTgyQTI0MUY4Cis6MTA5NEUwMDA4MzUwMDAwMDk4ODJBMkYyODIzMDAwMDBFMTgwMDA0MEE4Cis6MTA5NEYwMDA4MTMyMDEwMDlGODJBMjQwOTc2QzAwMDAyODAwMDA0MDRBCis6MTA5NTAwMDBCMzlCMDEwMEEwODIwMDQwODFCMjAwMDAyODAwMDA0MDBGCis6MTA5NTEwMDBCMzlCMDEwMEYwMTUwMDQwNDM5OTAxMDBGQzgxMDA0MDFECis6MTA5NTIwMDA4MTMyMDEwMEE3ODJBMkZBQjQ2RjAwMDBGQzgxMDA0MkUwCis6MTA5NTMwMDBCMzQzMDEwMEE3ODJBMkZBQjQ2RjAwMDBGQzgxMDA0MjhECis6MTA5NTQwMDBCMzQzMDEwMEFBODIyMkZBQjQ2RjAwMDBBNzgyNDI0MDBFCis6MTA5NTUwMDA4MTMyMDAwMDAwMDAwMDRFNjk5MzAxMDAwNDgxMDA1ODMwCis6MTA5NTYwMDA2OTkzMDAwMDQwMTYwMDQwNDU5OTAxMDAzNTgyMDA0MDkzCis6MTA5NTcwMDA0OTMxMDEwMEY2MTUwMDQwNDM5OTAxMDA1QzE2MDA0MDk2Cis6MTA5NTgwMDA0NTk5MDEwMDAwMDA2RUZBOEVCMDAxMDAwMDAwMDA0MDE1Cis6MTA5NTkwMDA4MUIyMDEwMDAwMDAwMEZFRjRCMTAxMDAwMDAwMDA0MEIzCis6MTA5NUEwMDA4MUIyMDEwMDAwMDAwMEZFRjRCMTAxMDAwMDAwMDA0MEEzCis6MTA5NUIwMDA4MUIyMDEwMDAwMDAwMEYwQjRCMzAxMDBCODgyQTI0MDAzCis6MTA5NUMwMDA4RjZDMDAwMEZDMTUyMDIwRTFCMTAxMDBCRDgyMDA0MDNECis6MTA5NUQwMDA4MUIyMDAwMERCODIwMDQwODEzMjAxMDBCRDgyMjI0MDY2Cis6MTA5NUUwMDA5NzZDMDAwMEJBODI0MjQwODEzMjAwMDAwMDAwMDA0RkI4Cis6MTA5NUYwMDA2OTkzMDEwMDA0ODEwMDU4Njk5MzAwMDAzNDgyMDA0MDlGCis6MTA5NjAwMDA4MTMyMDEwMDFFMDAwMDQ4QjJDQjAxMDBGQzgxMDA0MDA1Cis6MTA5NjEwMDA4MTMyMDEwMEMyODIyMjUwQjU2RjAwMDAwMDAwMDA1MDZDCis6MTA5NjIwMDA5MUMwMDEwMDAwMDAwMDQ4QjJDQjAxMDBGNjE1MDA0MEQ3Cis6MTA5NjMwMDA0Mzk5MDEwMEZGODEwMEYyQjQzMzAxMDAwMjAwMDA0OEE5Cis6MTA5NjQwMDBCMkNCMDEwMEY4MTUwMDQwNDM5OTAxMDBGRjgxMDBGMjAwCis6MTA5NjUwMDBCNDMzMDEwMDA0MDAwMDQ4QjJDQjAxMDBGQTE1MDA0MDA5Cis6MTA5NjYwMDA0Mzk5MDEwMEZGODEwMEYyQjQzMzAxMDAwODAwMDA0ODczCis6MTA5NjcwMDBCMkNCMDEwMEZDMTUwMDQwNDM5OTAxMDAwMDAwMDBGMDRFCis6MTA5NjgwMDA5NEIwMDEwMEZGRkYwMDRBQjQ4QjAxMDBGRjgxMDA0MDRECis6MTA5NjkwMDA4MTMyMDEwMDBBMDAwMDQ4QjJDQjAxMDAxMDAwMDA0QUVDCis6MTA5NkEwMDBCNEY3MDEwMEZGODEwMDQwODEzMjAxMDAzNDgyMDA0MEE0Cis6MTA5NkIwMDA4MTMyMDEwMDFFMDAwMDQ4QjJDQjAxMDBGQzgxMDA0MDU1Cis6MTA5NkMwMDA4MTMyMDEwMEQ4ODIyMjUwQjU2RjAwMDBEOTgyMDA1MDRCCis6MTA5NkQwMDBCNUIzMDAwMDAwMDAwMDQwQjVCMzAxMDBGRjgxMDA0MEI5Cis6MTA5NkUwMDA4MTMyMDEwMDAyODEwMDQwODFCMjAwMDAwMDE2MDA0MDdBCis6MTA5NkYwMDA0Nzk5MDEwMDMwMzEwMDQwRjU5OTAxMDAzMjMzMDA0MEI0Cis6MTA5NzAwMDBGNTk5MDEwMDM0MzUwMDQwRjU5OTAxMDAzNjM3MDA0MEU1Cis6MTA5NzEwMDBGNTk5MDEwMDM4MzkwMDQwRjU5OTAxMDA0MTQyMDA0MEI3Cis6MTA5NzIwMDBGNTk5MDEwMDQzNDQwMDQwRjU5OTAxMDA0NTQ2MDA0MDg5Cis6MTA5NzMwMDBGNTk5MDEwMDQ3NDgwMDQwRjU5OTAxMDA0OTRBMDA0MDY5Cis6MTA5NzQwMDBGNTk5MDEwMDJDMDAwMDQwODM5ODAxMDAwMDAwMDA0MEMyCis6MTA5NzUwMDBGN0IxMDEwMEU3ODJBMjQxODM1MDAwMDA4MDE2MkUwNjc3Cis6MTA5NzYwMDA4M0IwMDEwMDM2MDAwMEZCRjZBOTAxMDBFQTgyQTI0MUE1Cis6MTA5NzcwMDA4MzUwMDAwMDIyMDAwMDQwODM5ODAxMDAwMDAwMDBGQjlECis6MTA5NzgwMDBGNkIxMDEwMEVEODJBMjQxODM1MDAwMDA2MjAwMDA0MDZBCis6MTA5NzkwMDA5NTk4MDEwMDAwODMwMDQwODEzMjAxMDAwMDE2MkQwNkRCCis6MTA5N0EwMDA4M0IwMDEwMDgwMTYwMDQwNDU5OTAxMDA1QzAwMDBGQjc5Cis6MTA5N0IwMDBGNkE5MDEwMEYzODJBMjQxODM1MDAwMDAwMDAwMDA3MDZFCis6MTA5N0MwMDBGOUIxMDEwMDAwMDAwMDcxRjlCMTAxMDAwMDAwMDA3MjYwCis6MTA5N0QwMDBGOUIxMDEwMDAwMDAwMDczRjlCMTAxMDAwMDAwMDA3NDRDCis6MTA5N0UwMDBGOUIxMDEwMDU0MDAwMDQwOTU5ODAxMDAwMDgzMDA0MDQ5Cis6MTA5N0YwMDA4MTMyMDEwMDAwMDAwMDcwOTVCMDAxMDBGRjgyMjI3MEVDCis6MTA5ODAwMDBCNTZGMDAwMDAwMDA4MDQxOTdCMDAxMDAwMDAwODA0MDZCCis6MTA5ODEwMDA5N0IwMDEwMDQ1NjcwMEE2RTBCMjAxMDAwMTIzMDA3MDg3Cis6MTA5ODIwMDBFMTlBMDEwMENERUYwMEE2RTJCMjAxMDA4OUFCMDA3MTIwCis6MTA5ODMwMDBFMzlBMDEwMEJBOTgwMEE2RTRCMjAxMDBGRURDMDA3MkNGCis6MTA5ODQwMDBFNTlBMDEwMDMyMTAwMEE2RTZCMjAxMDA3NjU0MDA3M0RBCis6MTA5ODUwMDBFNzlBMDEwMEQyQzMwMEE2RThCMjAxMDBGMEUxMDA3NDZCCis6MTA5ODYwMDBFOTlBMDEwMDgwMTYwMDRBNDRDOTAxMDAwMDAwMDAwNzdGCis6MTA5ODcwMDA4MUIwMDEwMDAwMDAwMDRBODBEMDAxMDAwMDAwMDA0MERCCis6MTA5ODgwMDBGN0IxMDEwMDBEODNBMjQxODE1MDAwMDA4MDE2MDA0QTBCCis6MTA5ODkwMDA0NEM5MDEwMEZDMTYyQTQ3RTdCNTAxMDAwMzAwMDA0QTRECis6MTA5OEEwMDBFOEU1MDEwMDAwMDAwMDQwOERCMDAxMDA1MDAzMDA0MEQ5Cis6MTA5OEIwMDBBMzk5MDEwMDgwMTYzRDQ2OERFMDAxMDAwMDAwMDA1MDk0Cis6MTA5OEMwMDA4OUIwMDEwMDAwMDAwMEZDNDBCMDAxMDAwMDAwMDA0MTMwCis6MTA5OEQwMDBBM0MxMDEwMDE2ODNBMjQxODk1MDAwMDAwMDAwMDA3MDVFCis6MTA5OEUwMDBFQkIyMDEwMDAwMDAwMDcxRURCMjAxMDAwMDAwMDA3MjU3Cis6MTA5OEYwMDBFRkIyMDEwMDAwMDAwMDczRjFCMjAxMDAwMDAwMDA3NDNCCis6MTA5OTAwMDBGM0IyMDEwMDAwMDAwMDQwODNCMDAxMDAwRjAwMDA0MUVECis6MTA5OTEwMDA4MDg4MDEwMDUwMDMwMDQwQTJDOTAxMDAzMzgzQTA1MDk5Cis6MTA5OTIwMDA4MzZDMDAwMDBEMDAwMDQwOThDODAxMDAwMDAwMDA0RjRCCis6MTA5OTMwMDA5OTg0MDEwMDUwMDMwMDRDQTJDOTAxMDAwMDAwMDAyMERFCis6MTA5OTQwMDA4NkIwMDEwMDA4MDAwMDQwOThDODAxMDAwMDAwMDA0RkU4Cis6MTA5OTUwMDA5OTg0MDEwMDUwMDMwMDRDQTJDOTAxMDAwMDAwMDAyMEJFCis6MTA5OTYwMDA4NkE0MDEwMDAyMDAwMDQwOThDODAxMDAwMDAwMDA0RkRBCis6MTA5OTcwMDA5OTg0MDEwMDUwMDMwMDRDQTJDOTAxMDAwMDAwMDAyMDlFCis6MTA5OTgwMDA4NkE0MDEwMDUwMDMwMDQwQTJDOTAxMDAwMDAwMDA0MzZBCis6MTA5OTkwMDA0MEE0MDEwMDAxMDAwMDIwODhFNDAxMDAwMDAwMDA1RkY1Cis6MTA5OUEwMDA0MUYwMDEwMDAwMDAwMDQ0NDA5NDAxMDAwNTAwMDA3NUYyCis6MTA5OUIwMDA4OUU0MDEwMDFCMDAwMDc1ODVGNDAxMDAwMDAwMDA0NEVCCis6MTA5OUMwMDA4NDk0MDEwMDNEODNBMzUzODM2QzAwMDAwMDAwMDA3NjYzCis6MTA5OUQwMDA4OUIwMDEwMDAwMDAwMDc3ODk4NDAxMDAwMDAwMDA3NjUyCis6MTA5OUUwMDA4QkIwMDEwMDAwMDAwMDIwOEJBNDAxMDAwMDAwMDA3ODczCis6MTA5OUYwMDA4Qjg0MDEwMDRDODMwMDQ1ODg5NDAwMDAyNzAwMDA0MUJGCis6MTA5QTAwMDA4MENFMDEwMDQyODNBQTQwODEzMjAwMDAwMDAwMDA3NjJGCis6MTA5QTEwMDA4OUIwMDEwMDAwMDAwMDc3ODlBNDAxMDA0QzgzMDA3ODIwCis6MTA5QTIwMDA4OUE0MDAwMDNCMDAwMDQxODBDRTAxMDAzRjgzQUE0MDkyCis6MTA5QTMwMDA4MTMyMDAwMDAwMDAwMDc2ODlCMDAxMDAwMDAwMDA3NzRDCis6MTA5QTQwMDA4OTg0MDEwMDAwMDAwMDc2OEJCMDAxMDAwMDAwMDA3OERFCis6MTA5QTUwMDA4Qjg0MDEwMDAwMDAwMDQ1ODg5NDAxMDAwMDAwMDA3NzFECis6MTA5QTYwMDA4QkIwMDEwMDAwMDAwMDc4OEI4NDAxMDA0QzgzMDA0NTFFCis6MTA5QTcwMDA4ODk0MDAwMDAwMDAwMDQ0ODRDMDAxMDAwMDAwMDA3OUM4Cis6MTA5QTgwMDA4NUMwMDEwMDAwMDAwMDIwODRDMDAxMDA1MzgzQTM1MzVGCis6MTA5QTkwMDA4MzZDMDAwMDgyNUEwMEE2ODRDMDAxMDA5OTc5MDA0MkJDCis6MTA5QUEwMDA4NEM4MDEwMDYwODMwMDQwODFCMjAwMDAyNzAwMDA0MUFCCis6MTA5QUIwMDA4MENFMDEwMDU4ODNBQTQwODEzMjAwMDBEOTZFMDBBNkYyCis6MTA5QUMwMDA4NEMwMDEwMEExRUIwMDQyODRDODAxMDA2MDgzMDA0MDEzCis6MTA5QUQwMDA4MUIyMDAwMDNCMDAwMDQxODBDRTAxMDA1RDgzQUE0MEJFCis6MTA5QUUwMDA4MTMyMDAwMDFCOEYwMEE2ODRDMDAxMDBEQ0JDMDA0MjU0Cis6MTA5QUYwMDA4NEM4MDEwMDYwODMwMDQwODFCMjAwMDA2MkNBMDBBNkYxCis6MTA5QjAwMDA4NEMwMDEwMEQ2QzEwMDQyODRDODAxMDA2MDgzMDA0MEM3Cis6MTA5QjEwMDA4MUIyMDAwMDAwMDAwMDc4RjNCMjAxMDAwMDAwMDA3NzdECis6MTA5QjIwMDBGMUIyMDEwMDFFMDAwMDc2ODlFNDAxMDAwMjAwMDA3NjE3Cis6MTA5QjMwMDBFRkY2MDEwMDAwMDAwMDQ0RUU5NjAxMDAwMDAwMDA3NTAxCis6MTA5QjQwMDBFREIyMDEwMDAwMDAwMDQyRUFCMjAxMDAwMDAwMDA0MTU1Cis6MTA5QjUwMDA4M0MwMDEwMDRGMDAwMDQxODBDRTAxMDAxRjgzMkE0MEQ2Cis6MTA5QjYwMDA4MTMyMDAwMDAwMDAwMDc1RTFDMjAxMDAwMDAwMDA3NkIzCis6MTA5QjcwMDBFM0MyMDEwMDAwMDAwMDc3RTVDMjAxMDAwMDAwMDA3OEE4Cis6MTA5QjgwMDBFN0MyMDEwMDAwMDAwMDc5RTlDMjAxMDAxMzgzODE0MUFFCis6MTA5QjkwMDA4RDQwMDAwMDAwMDA4MDQwODFCMjAxMDA5RDgzQTI0QkY3Cis6MTA5QkEwMDBCNzZGMDAwMDlEODNBMjQxMkY3RDAwMDAwMDAwMDA1MDkwCis6MTA5QkIwMDBGRDkzMDEwMDQwMTYwMDQwNDU5OTAxMDAzNTgyMDA0MEE4Cis6MTA5QkMwMDA0OTMxMDEwMDlDODMyMjQwOEY2QzAwMDAwODAwMDA0ODRFCis6MTA5QkQwMDBCMkNCMDEwMEZFODEwMDQwODEzMjAxMDBEQjgyMDA0MEY3Cis6MTA5QkUwMDA4MTMyMDEwMDlDODNBMjQwOTc2QzAwMDA1RTE2MDA0MDA5Cis6MTA5QkYwMDA0Mzk5MDEwMDdDMTYyMEY2RTBCMTAxMDAwMDAwMDA0MDBFCis6MTA5QzAwMDAzMUIzMDEwMDgwODMyMjRGOEY3QzAwMDAwMDAwMDA1MTlGCis6MTA5QzEwMDBGRDkzMDEwMDgyODMyMjQwOEY3QzAwMDA4NjgzMDA1NEU0Cis6MTA5QzIwMDBGRDkzMDAwMDg0ODMyMjQyOEY3QzAwMDAwMDAwMDA1MkRDCis6MTA5QzMwMDBGRDkzMDEwMDg2ODMyMjQxOEY3QzAwMDAwMDAwMDA1M0M5Cis6MTA5QzQwMDBGRDkzMDEwMDlBODMyMjUxRkQ3RjAwMDAzNDgyMDA0MDgxCis6MTA5QzUwMDA4MTMyMDEwMDBDMDAwMDQ4QjJDQjAxMDBGQzgxMDA0MEMxCis6MTA5QzYwMDA4MTMyMDEwMDk1ODNBMjQwQjU2RjAwMDAxRTAwMDA0OEJDCis6MTA5QzcwMDBCMkNCMDEwMEZDODEwMDQ4OTYzMDAxMDAwMDAwMDBEQTAwCis6MTA5QzgwMDA5N0MwMDEwMDA0MDAwMDRCQjJDQjAxMDBGQzgxMDA0MEYyCis6MTA5QzkwMDA4MTMyMDEwMDBFMDAwMDQ4QjJDQjAxMDBGRjgxMDA0MDdDCis6MTA5Q0EwMDA4MTMyMDEwMDBDMDAwMDQ4QjJDQjAxMDAwMDAwMDAzMEZFCis6MTA5Q0IwMDBCNUIzMDEwMEZGODEwMDQwODEzMjAxMDAwRTAwMDA0ODcxCis6MTA5Q0MwMDBCMkNCMDEwMEZDODEwMDQwODEzMjAxMDA5OTgzMjI0MDI3Cis6MTA5Q0QwMDBCNTZGMDAwMDlEODMwMDU0RkQ5MzAwMDAwMDAwMDA1MTBCCis6MTA5Q0UwMDBGRDgzMDEwMDFDMDAwMEZFN0ZEOTAxMDA5RDgzQTY0MDdBCis6MTA5Q0YwMDA4MTMyMDAwMDAwMDAwMDU1RkQ5MzAxMDAwMDAwODA0MDBCCis6MTA5RDAwMDA4MUIyMDEwMEI2MDMwMDQwQTE5OTAxMDAwMDAwMkY0MTdCCis6MTA5RDEwMDA5OUIzMDEwMEE4ODMyMjQ0ODE2QzAwMDBCMDgzMjI0OERCCis6MTA5RDIwMDA4MTZDMDAwMEFBODMyMjRDODE2QzAwMDBCNDgzMjI1MDE1Cis6MTA5RDMwMDA4MTZDMDAwMEI1ODMyMjU0ODE2QzAwMDBCNzgzMjI1OEU3Cis6MTA5RDQwMDA4MTZDMDAwMEJDODMyMjVDODE2QzAwMDA1NTAxMDA0MEU2Cis6MTA5RDUwMDA4MUIyMDAwMDAwMDAwMEJDMDlCMDAxMDA2QTg0MDBDQUEyCis6MTA5RDYwMDAwMUIwMDAwMDAwMDAwMDQwMDNCMDAxMDAwMDAwMDA0MTBECis6MTA5RDcwMDBGMzgzMDEwMEFFODNBMjQyMDU2QzAwMDAwMDAwMDA0MUE1Cis6MTA5RDgwMDAwNUIwMDEwMDZBODQyMkNBMDcxNDAwMDA2QTg0MDA0NUY1Cis6MTA5RDkwMDBGMzkzMDAwMDZBODQyMDQzOTU2RjAwMDA2QTg0ODBDQUIwCis6MTA5REEwMDAwNTMwMDAwMDZBODQyMjAxODAzMDAwMDA2QTg0MDBDQjA0Cis6MTA5REIwMDBEQjkxMDAwMDVDMDEwMEJDQUJCMzAwMDAwMDAwMDBCQzA0Cis6MTA5REMwMDBCMUIzMDEwMDZBODQwMENBQ0ZCMzAwMDBGRjAwMDBDQTJCCis6MTA5REQwMDA4MTg4MDEwMDZBODRBMjQwNzQ3RDAwMDA2MDAwMjA0MEY4Cis6MTA5REUwMDA2MDk5MDEwMEI5ODNBOEIxODIzMDAwMDBCODgzMDA0MEI3Cis6MTA5REYwMDA4MUIyMDAwMDZBODQwMENBNzlCMzAwMDAwMDAwMDA0RUZFCis6MTA5RTAwMDA4MUIwMDEwMDAwMDAwMDQzQ0I4MzAxMDAwMDAwNDU0MDA5Cis6MTA5RTEwMDA4MUIyMDEwMEJGODNBMjQxODE1MDAwMDAwMDAwNDU0MDkzCis6MTA5RTIwMDA4MUIyMDEwMDAwMDA0NTQwODFCMjAxMDBDQTgzOTE4MkU1Cis6MTA5RTMwMDA4MjMwMDAwMDAwMDAwMDhBODBCMDAxMDBCNjlGMDA0MDIwCis6MTA5RTQwMDA4MENFMDEwMEM4ODNBNjQwODEzMjAwMDBDQTgzNTY0MEZDCis6MTA5RTUwMDA4MUIyMDAwMEI2MDMwMDQwQTE5OTAxMDAwMDAwMDA1MzQ4Cis6MTA5RTYwMDAwNzkwMDEwMEI2MDMwMDQwQTE5OTAxMDAwMDAwMDA1MkQ0Cis6MTA5RTcwMDAwNzkwMDEwMEYzOUYwMDQxOEJCMzAwMDAwMDAwMDA0RUVCCis6MTA5RTgwMDA4MUIwMDEwMDAwMDAwMDQyQ0Q4MzAxMDAwMDAwNDY0MDg3Cis6MTA5RTkwMDA4MUIyMDEwMENGODNBMjQxODE1MDAwMDAwMDAwNDY0MDAyCis6MTA5RUEwMDA4MUIyMDEwMDAwMDA0NjQwODFCMjAxMDBEQTgzOTE4MTU1Cis6MTA5RUIwMDA4MjMwMDAwMDAwMDAwMDg5ODBCMDAxMDBCNjlGMDA0MEExCis6MTA5RUMwMDA4MENFMDEwMEQ4ODNBNjQwODEzMjAwMDBEQTgzNTU0MDVECis6MTA5RUQwMDA4MUIyMDAwMEI2MDMwMDQwQTE5OTAxMDAwMDAwMDA1MkM5Cis6MTA5RUUwMDAwNzkwMDEwMEI2MDMwMDQwQTE5OTAxMDAwMDAwMDA1MzUzCis6MTA5RUYwMDAwNzkwMDEwMEYzOUYwMDQxOEJCMzAwMDBCMTAzMDA0MEM1Cis6MTA5RjAwMDBBMTk5MDEwMEM0MTQyRjQwOTlCMzAxMDA1QzAxMDA0MEU1Cis6MTA5RjEwMDA0OUIxMDAwMDU4MTUyRDQwOERCMDAxMDBEMDE0MkRGMDJFCis6MTA5RjIwMDA4OEIwMDEwMDAwMDAwMDQwOEZCMDAxMDAwMTAwMDBBNkQxCis6MTA5RjMwMDA5MEIwMDEwMDAwRjgwMDQ4OTA5ODAxMDAwMDAwMDA0NTMyCis6MTA5RjQwMDA5M0IwMDEwMDAwMDAwMEZBOEFCMDAxMDA2QTAzMDA0MEVCCis6MTA5RjUwMDA4MTMyMDEwMDAyMDAwMEE2ODBCMDAxMDBFQzgzMjI0MEEzCis6MTA5RjYwMDA4MjZDMDAwMEYwODMwMDQwODEzMjAxMDA0NzAzMDA0MDEyCis6MTA5RjcwMDA4MTMyMDEwMDAwMDAwMDQxOERDMDAxMDBGNTgzMjI1RkE1Cis6MTA5RjgwMDA4RDZDMDAwMEU3ODNBMjQxOTM1MDAwMDBFNTgzMDA0MDAwCis6MTA5RjkwMDA4MUIyMDAwMEZGMDcwMDQ3ODQ4ODAxMDAwMDAwQTY0MDRFCis6MTA5RkEwMDA4MUIyMDAwMEY1OUYwMDQ3ODAzMDAxMDAwMDAyMDA0N0E5Cis6MTA5RkIwMDA4RUM4MDEwMEYwODMwMDQwODFCMjAwMDAwMDAwMDA0NDIwCis6MTA5RkMwMDA1MEIzMDEwMEZCODMyMDE4ODk2QzAwMDAwNDAwMDBBNjM4Cis6MTA5RkQwMDA4NEIwMDEwMDIwMDAwMEE2ODZCMDAxMDAwMDEwMDA0MEZGCis6MTA5RkUwMDA1NTlCMDEwMEZFODMwMDQwODFCMjAwMDAwNDAwMDBBNkUyCis6MTA5RkYwMDA4NEIwMDEwMDIwMDAwMEE2ODZCMDAxMDAwMDEwMDA0MERGCis6MTBBMDAwMDA1NTlCMDEwMDAwMDAwMDQyNTBEMzAxMDAwMDAwMDBBODUxCis6MTBBMDEwMDA0RkIzMDEwMDAwMDAwMDQzNEVEMzAxMDA1RTAzMDA0MDM3Cis6MTBBMDIwMDA4MTMyMDEwMDZDMDMwMDQyODAzMDAxMDBGMDgzMDA0MDY3Cis6MTBBMDMwMDA4MTMyMDEwMDA3ODQyMkE3OEY2QzAwMDA0OTAzMDA0MDkxCis6MTBBMDQwMDA4MTMyMDEwMDA0ODQwMDQwODFCMjAwMDAwMDAwODA0MEExCis6MTBBMDUwMDA4MUIyMDEwMEEwOTQyRTQzOTdCMDAxMDAwMDAwMDA0MDlGCis6MTBBMDYwMDBGMUIxMDEwMDA5ODRBMjQxOTc1MDAwMDA1MDk1MjA0MEIxCis6MTBBMDcwMDBFMUIxMDEwMEFDOTQyRTQzOTdCMDAxMDAwMDAwMDA0MDE0Cis6MTBBMDgwMDBGMUIxMDEwMDBEODRBMjQxOTc1MDAwMDAwMDAwODA0MDEyCis6MTBBMDkwMDA4MUIyMDEwMEFFMDMwMDQwQTM5OTAxMDAwMDAwMDA0MDFFCis6MTBBMEEwMDA4MUIwMDEwMDYwMTUwMDQwODU5ODAxMDAwODAwMDA0MDYzCis6MTBBMEIwMDA0MEU0MDEwMDAwMDAwMDU5NDE5NDAxMDAwMDAwMDA1MEZDCis6MTBBMEMwMDA0MUUwMDEwMDAwMDAwMDQyNDA5NDAxMDAwMDAwMDA0MTE2Cis6MTBBMEQwMDA4MUMwMDEwMDAwMDBBMzQxODE2QzAxMDAwMDAwMDA0MTJCCis6MTBBMEUwMDBBM0MxMDEwMDEzODQwMDUwODVDMDAwMDA0OTg0QTI0MTJGCis6MTBBMEYwMDAwMTdEMDAwMDIxODQyMjU4NzM3RDAwMDA3ODAwMDA0MDFCCis6MTBBMTAwMDA2MTk5MDEwMDFDODRBOEIxOUMzMDAwMDAzMDAwMzg0NUUyCis6MTBBMTEwMDA5REUwMDEwMDAxMDAwMDBFMTBDOTAwMDAyMTg0MzNDNDNECis6MTBBMTIwMDA4MTMwMDAwMDI0ODRBMUFEOUQyMDAwMDAxQjg0MTM0MEQ5Cis6MTBBMTMwMDA4MUIyMDAwMDAwMDAxMzRFNUE4MzAxMDAzMDAwMzg0NTAwCis6MTBBMTQwMDA5REUwMDEwMDJDODQyMkFCODAwNDAwMDAyQTg0QTI0MDAwCis6MTBBMTUwMDAwMTdEMDAwMDJDODQyMjVGNTc3RDAwMDAyNzhBMDA0MDhCCis6MTBBMTYwMDA4MUIyMDAwMDJDODQyMjVFNTc3RDAwMDA4QThBMDA0MDY0Cis6MTBBMTcwMDA4MUIyMDAwMDMxODQyMjU0NzM3RDAwMDA3NDAwMDA0MERECis6MTBBMTgwMDA2MTk5MDEwMDJDODRBOEIxMDAzMDAwMDAwMDg2QTI1RjE0Cis6MTBBMTkwMDAwMTdDMDAwMDYyODkwMDQwODFCMjAwMDAzMzg0QTI1RjJDCis6MTBBMUEwMDA1OTI3MDAwMDM1ODRBMjVDNzM3RDAwMDAzQzg0QTI1RUM4Cis6MTBBMUIwMDA3MzdEMDAwMDQ2ODQyMjVDNzM3RDAwMDA0Nzg0Mzc0MDM1Cis6MTBBMUMwMDA4MTMyMDAwMDdDMDAwMDQwNjE5OTAxMDAzNjg0QThCMTEyCis6MTBBMUQwMDAzNjMwMDAwMDdDMDAwMDQwNjE5OTAxMDAzODg0QThCMTRECis6MTBBMUUwMDAwMDMwMDAwMDFGMDAwMDAwMDI4ODAxMDAyRjg2MTc0MDg5Cis6MTBBMUYwMDA4MUIyMDAwMDQ3ODQzNDQwODEzMjAwMDA3RTAwMDA0MDdDCis6MTBBMjAwMDA2MTk5MDEwMDNEODRBOEIxMTIzMDAwMDA0NDg0NTIyMUJDCis6MTBBMjEwMDAxMzA0MDAwMDAwMDAxNDQxMkZDMzAxMDBGRjNGMDAwOTk4Cis6MTBBMjIwMDAwMDhDMDEwMDAwMDAwMDQzMDFGMDAxMDA4Nzg0MDAzNDJECis6MTBBMjMwMDAxMzg0MDAwMEZGM0YxNDA5MDA4QzAxMDBFNzg0MDA0M0YxCis6MTBBMjQwMDAwMUYwMDAwMDAwMDAwMDQwODFCMjAxMDA0Nzg0MzM0MDZCCis6MTBBMjUwMDA4MTMyMDAwMDFCODQxMzRFNUE5MzAwMDBFQzg5QTI0OEZGCis6MTBBMjYwMDBGRDdGMDAwMDRFODQyMjU5NzM3RDAwMDA3OTAwMDA0MDdDCis6MTBBMjcwMDA2MTk5MDEwMDRBODQyOEIxN0UzMTAwMDA0Qjg0MDA0MDdFCis6MTBBMjgwMDA4MUIyMDAwMDUyODQyMUFDOUMyMDAwMDAwMDAwMDA0MUZCCis6MTBBMjkwMDAxRkMzMDEwMDA0MDBBMDVGOUQ2QzAwMDAwMDAwMDA0RTgxCis6MTBBMkEwMDA1ODkxMDEwMDU2ODQyMjVBNzM3RDAwMDA3QTAwMDA0MEM0Cis6MTBBMkIwMDA2MTk5MDEwMDUzODRBOEIxN0UzMTAwMDAwMTAwMDBDRkY0Cis6MTBBMkMwMDAxMUM5MDAwMDVDODRBMjQwOTM3RjAwMDA1Qzg0MjI0NDlBCis6MTBBMkQwMDA5MzdGMDAwMDU4ODQ0MkE1ODAzMDAwMDA1Qjg0QTI0MDM4Cis6MTBBMkUwMDA5MzdGMDAwMDcxODQxQTQwOTM5MzAwMDAwMDAwMUE0MDhECis6MTBBMkYwMDA4MUIyMDEwMDlBODBBMjQwNzM3RDAwMDBBMTg5MjI0NEFFCis6MTBBMzAwMDAyMTZGMDAwMDk4ODkyMjQwNjU3RDAwMDBBNjg5QTI1QjJDCis6MTBBMzEwMDA3MzdEMDAwMDA0MDBBMjQ5MzM3RDAwMDA2Njg0MjI0ODVBCis6MTBBMzIwMDAzMzdEMDAwMEZGMDEwMDk5ODBEODAxMDAwMDAwMDA1MDNCCis6MTBBMzMwMDA4MUUwMDEwMEE4OTgyRjQwMzNCMTAxMDAwMDAwMDA0MEU3Cis6MTBBMzQwMDBFMEMxMDEwMDY5ODQyMjQwQUY2RjAwMDA2OTg0MjI0MEFGCis6MTBBMzUwMDA4MTZGMDAwMEY1ODkxRkE1ODI2RjAwMDA0OTg0MDA0MENECis6MTBBMzYwMDA4MUIyMDAwMDFCODQwMDQwOEJCMzAwMDAwMDAwMDA1ODQ1Cis6MTBBMzcwMDA2MUIxMDEwMDAwMDAwMDRFNjJCMTAxMDAxQjg0Mjg0MDYxCis6MTBBMzgwMDA4MTMyMDAwMDZDODQwMDQwODFCMjAwMDA2Rjg0MzM0MDUxCis6MTBBMzkwMDAxRjMwMDAwMDFCODQxMzRFNUE5MzAwMDA3Mzg0QTBDRTFDCis6MTBBM0EwMDA4MTUwMDAwMDg1ODRBMENEODE2QzAwMDAwMDAwMDBBNUQ0Cis6MTBBM0IwMDA5Q0IzMDEwMDAwMDAwMEIxODFCMDAxMDA4NTg0MjJCNThBCis6MTBBM0MwMDA4MTE0MDAwMDgwMTUyRjQwNDlCMTAxMDA3Nzg0NDI0MDdDCis6MTBBM0QwMDA4MTMyMDAwMDAwMDA2MEI0NjU5NzAxMDBEMDE1MkU0MDY2Cis6MTBBM0UwMDA2OUIzMDEwMDAwMDAxQTQ0OTM4MzAxMDAxQTAwMDBBMjFGCis6MTBBM0YwMDA4MERDMDEwMDAwMDAwMDQ0RjFCMTAxMDAwMDAwMDBCMTY4Cis6MTBBNDAwMDBGMUIxMDEwMDAwMDAwMEI1RjFCMTAxMDAwNTAwMDA0MDBDCis6MTBBNDEwMDA2MTk5MDEwMDAwMDAwMDQwNjJCMTAxMDA4MDg0QThBMUEwCis6MTBBNDIwMDBFMDMxMDAwMDVDODQwMDg4OUVCMzAwMDA1Qzg0QTI0MTlGCis6MTBBNDMwMDA2NzZGMDAwMDVDODQwMDZGREI5MTAwMDA4NTg0NDI0MDAwCis6MTBBNDQwMDA4MTMyMDAwMDVDODQxQTQwOTM4MzAwMDAwMDk5MDAwOTY3Cis6MTBBNDUwMDA0NkM5MDEwMDNGMDAwMEYzMEM4ODAxMDA5MDg0QTY0MjI5Cis6MTBBNDYwMDAxMzYwMDAwMDU1OTcwMDk1MDMzMDAxMDA4Qjg0NDU0MDMwCis6MTBBNDcwMDA4MTMyMDAwMDc1MDAwMDQwNjE5OTAxMDA4Qzg0QThCMTEwCis6MTBBNDgwMDAwQzMwMDAwMDVDOTcxRDEwOTQzMDAxMDA5MTg0MDA1ODNFCis6MTBBNDkwMDAxRjkwMDAwMDRFOTcwMDk1MDMzMDAxMDAxQjg0MDA4ODM4Cis6MTBBNEEwMDAxQ0IwMDAwMDAwMDAyRDAzNDhCMTAxMDAwNDAwMkRGMDk1Cis6MTBBNEIwMDAyRUIwMDEwMEVFMDcwMDQwOTc5ODAxMDA5ODg0MjM0QkNFCis6MTBBNEMwMDBFNDZEMDAwMDk4ODQyMjRCRkQ3RjAwMDAwMDAwMDA0MEY2Cis6MTBBNEQwMDAxRjkwMDEwMDIyMDAyRjQwODFCMjAxMDA5Qjg0ODMxNzRFCis6MTBBNEUwMDA4MDMyMDAwMDI2MDAwMDQwNDc5OTAxMDA5RDg0ODUxN0I2Cis6MTBBNEYwMDA4MDMyMDAwMDAwMDAwMDQ4NDdDMTAxMDBBMzg0MjI1NUJCCis6MTBBNTAwMDAyRjdDMDAwMDAwMDAwMDQyNDNEMTAxMDAwRjAwMDBGQTQwCis6MTBBNTEwMDA5Njg4MDEwMDAwMDAwMDQyOTdFMDAxMDAwMDAwMDA0MjIwCis6MTBBNTIwMDA5N0QwMDEwMEE0ODQwMDRCNDRDMTAwMDAxMjAwMDBBMjk3Cis6MTBBNTMwMDA0NEM5MDEwMDI4MDAwMEY2MDJDQzAxMDAwQTAwMDBBMTc1Cis6MTBBNTQwMDA0MkM5MDEwMDAwMDAwMEY4MTZCMDAxMDAwMDAwMjhGMDI4Cis6MTBBNTUwMDAxMEIwMDEwMDAwMDAwMEYwMUFCMDAxMDAwMDAwMDBBMkRECis6MTBBNTYwMDAyQUIwMDEwMEMwMjgzQzQ2MERFMDAxMDAwMDAwMkQ0NDQ3Cis6MTBBNTcwMDA5NUIwMDEwMEIwODRBMkY4MEUzMDAwMDBDMDg0MjI0MUUyCis6MTBBNTgwMDA5NTUwMDAwMDAwMDAyRDUwNDlDMTAxMDBBQzg0MDA0MEVFCis6MTBBNTkwMDA4MUIyMDAwMEFEODRBMkY4MTY2QzAwMDBBRDg0QTJGODcwCis6MTBBNUEwMDAxMDZDMDAwMEFEODRBMkYwMUE2QzAwMDBCRTg0MjI1ODJBCis6MTBBNUIwMDAxRjdDMDAwMDAwOTkzRjQyMTNGMDAxMDBCNTg0NDc0MDIyCis6MTBBNUMwMDA4MTMyMDAwMEI5ODRBMkYzNzQwNjAwMDAwMDAwMDAwNjg2Cis6MTBBNUQwMDBFNjk1MDEwMEJFODQxRjQwODFCMjAwMDAwMDAwMDAwNjI1Cis6MTBBNUUwMDA5NkIwMDEwMDNGMDAxRkYzMEM4ODAxMDAwMDAwMDA1NUU5Cis6MTBBNUYwMDA2MUIxMDEwMDAwMDAwMDRCNjJCMTAxMDBCQzg0QTg0MEMxCis6MTBBNjAwMDA4MTMyMDAwMEJFODQ0NzQwODEzMjAwMDBDNjg0MUY0MTcxCis6MTBBNjEwMDAyREMzMDAwMEM0ODQyMjU4MUY3QzAwMDAwMDAwMDA1NTk4Cis6MTBBNjIwMDA2MUIxMDEwMDAwMDAwMDA2NjJCMTAxMDBDMjg0QTg0MENGCis6MTBBNjMwMDA4MTMyMDAwMEM0ODQ0NzQwODEzMjAwMDBFRTg0MUY0MTEzCis6MTBBNjQwMDAyREMzMDAwMDAzMDAwMDA3MUFGNDAxMDAyMTk2MDAwNzQzCis6MTBBNjUwMDAxNjMwMDEwMEQ1ODQyMjQxODE2QzAwMDBDQzg0MjI0MjU2Cis6MTBBNjYwMDA4MTZDMDAwMDFCODQwMDg4MUNCMDAwMDBENDg0MjI1RjMxCis6MTBBNjcwMDAwRjdDMDAwMDE1OTcwMDVGMDExMDAxMDBEMjg0MjI0MDdBCis6MTBBNjgwMDA5NTZDMDAwMDA0ODAwMDAzNDJDOTAxMDAwMDAwMDBGMjQ0Cis6MTBBNjkwMDAwMkIwMDEwMDhBOTYwMDUyOTUzMDAxMDA5MTk2MDA0QjVECis6MTBBNkEwMDAwMkIwMDAwMDY3OTcwMDA5OTYzMDAxMDAwNThBMDA0MDVCCis6MTBBNkIwMDAwRkIwMDAwMEREODRBMjVBMUY3QzAwMDA5Qjk1MDA0MDczCis6MTBBNkMwMDA4MTMyMDEwMEREODQyMjIwODU2QzAwMDBEQTg0OUMwRjM5Cis6MTBBNkQwMDA4MDMyMDAwMDFCODQwMDg4MUNCMDAwMDA3Qzk2MDA1QzY3Cis6MTBBNkUwMDAxRjAwMDEwMDlCOTgwMDQyNjEzMTAxMDAxQjg0MDA4ODFCCis6MTBBNkYwMDAxQ0IwMDAwMEU2OTkwMDA3OTYzMDAxMDAwMDAwMkQwNTBGCis6MTBBNzAwMDA0OEIxMDEwMEUwODQ4MkYwMTgzMDAwMDA2QzhCMDA0NUY1Cis6MTBBNzEwMDA4RkIwMDAwMDI4MjAwMEE2OTZCMDAxMDBFNDg0MjIxNzI0Cis6MTBBNzIwMDA5NjA0MDAwMDBCOTgwMDRCOTUzMDAxMDA2QzhCMDA0Qjk5Cis6MTBBNzMwMDA4RkIwMDAwMDIxOTcwMDAzNDgzMTAxMDBGQzk0MDA0MEQ1Cis6MTBBNzQwMDA4MTMwMDEwMDZDOEIwMDQwODFCMjAwMDAwMDAwMkUxMEFGCis6MTBBNzUwMDA0OEIxMDEwMDAwMDA2ODUwMDNCMDAxMDAwMDAwMDAwMzkwCis6MTBBNzYwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDAxMEUyCis6MTBBNzcwMDA2MkIxMDEwMEVCODRBODAwRTAzMTAwMDAxQjg0MDA4ODc2Cis6MTBBNzgwMDAxQ0IwMDAwMDAwMDAyRDAzNDhCMTAxMDAwMDAwMDA0MDkzCis6MTBBNzkwMDAwRkIwMDEwMDAwMDAwMEY4MkVCMDAxMDAwMDAwMDBGMjMwCis6MTBBN0EwMDAwMkIwMDEwMDAwMDAwMDQwMTdCMDAxMDAwMDQxMDBBNjA3Cis6MTBBN0IwMDA5NkIwMDEwMEVFMDcyRTQ3OTc5MDAxMDAwMTg1MjIxNzAxCis6MTBBN0MwMDA5NjA0MDAwMEZGODQyMjRCRkQ3RjAwMDBGRjg0MjNBMjNCCis6MTBBN0QwMDAwMjZDMDAwMDhBOTYwMDUyOTUzMDAxMDAwNDAwMjI0MTZDCis6MTBBN0UwMDA5NzUwMDAwMDBDMDAyRDAwMTJCMDAxMDAwMDAwMDBGMDk2Cis6MTBBN0YwMDAwMEIwMDEwMDAwMDAwMDVDMDE4MDAxMDA5MTk2MDA0QjU4Cis6MTBBODAwMDAwMkIwMDAwMDAwMDAwMDA5MDBCMDAxMDAwMDAwMDA1MDhDCis6MTBBODEwMDAwM0IwMDEwMDFFODUwMDVDMTc5MDAwMDAxMzg1MjI0M0UxCis6MTBBODIwMDAyRjdDMDAwMDAwMDAwMDQ1MUY5MDAxMDAwQzg1MjI1Rjc2Cis6MTBBODMwMDAyRjdDMDAwMDAwMDAyRTEwNDhCMTAxMDAwMDAwMDA1OERECis6MTBBODQwMDBGMUIxMDEwMDEwMDAwMDAzRjBDOTAxMDAxMDAwMDAwMDg4Cis6MTBBODUwMDBFMEM5MDEwMDA4ODU0NTQyNjEzMTAwMDAwMDAwMDAxMDk4Cis6MTBBODYwMDA2MkIxMDEwMDA5ODVBODQwODEzMjAwMDAxQjg0MUQ4ODY3Cis6MTBBODcwMDAxQ0IwMDAwMDIwMDAyRDAzNDhCMTAxMDBGRjBGMDBGNkJFCis6MTBBODgwMDA4MDg4MDEwMDEwODVBMkE2ODE2QzAwMDAxMzg1MDBGMjZCCis6MTBBODkwMDAzQUIwMDAwMEZEODVBMjRCRkQ3RjAwMDBFMjk1MDA0MDJDCis6MTBBOEEwMDA4MTMyMDEwMDFCOEEwMDQwODFCMjAwMDAxRTg1MjI0QUNECis6MTBBOEIwMDAyRjdDMDAwMDFFODUyMjQ4MkY3QzAwMDAwQTAwMkQwM0ZCCis6MTBBOEMwMDA0OEIxMDEwMDNGMDAwMEYyODY4ODAxMDAxRjAwMDA0M0VDCis6MTBBOEQwMDA4NDg4MDEwMDA1MDAwMDQzODBGNDAxMDA5ODk0M0Q0MjAzCis6MTBBOEUwMDA4MUUwMDEwMDFFODVBMjQyRTA3RDAwMDBGRDg1QTI0QkIzCis6MTBBOEYwMDBGRDdGMDAwMEUyOTUwMDQwODEzMjAxMDAxQjhBMDA0MDhDCis6MTBBOTAwMDA4MUIyMDAwMDFFODU0NzQwODEzMjAwMDAwMDAwMDBBMzk0Cis6MTBBOTEwMDAwOUIwMDEwMDAwMDAxRjQxNDdDMzAxMDAyNDg1MjJBMUE2Cis6MTBBOTIwMDAwOTZDMDAwMDZCODQwMDg4MUNCMDAwMDAyMTg1MDAwM0M2Cis6MTBBOTMwMDA0OEIxMDAwMDVFODVBMzkyMDM2QzAwMDAwQTk5MDA0MEI0Cis6MTBBOTQwMDA5NTMwMDEwMDAwMDAwMDQxNDNDMzAxMDAwMDAwMDAxNkUzCis6MTBBOTUwMDA4MEIyMDEwMDFCOEEyNzA4ODAzMjAwMDAyQjg1MjI1QzEwCis6MTBBOTYwMDAxNzdDMDAwMDJDODUwMDAwMkFCMDAwMDAxMjAwMDAwMEI3Cis6MTBBOTcwMDAyQUM4MDEwMDAyMDAwMDA4ODBDODAxMDAzMDg1QTI0M0Y3Cis6MTBBOTgwMDAyRjdDMDAwMDBFOTgwMDQwODEzMjAxMDA0Qzg1MDA1RTUzCis6MTBBOTkwMDAxNzkwMDAwMDA0MDAwMDAxOENDQzAxMDAwRTk4MDA0Q0MwCis6MTBBOUEwMDAwMzMwMDEwMDAwMDAyRTQ2MDJCMDAxMDAxMDAwMDAxMDJDCis6MTBBOUIwMDA0OEM5MDEwMDBDMDAwMDAxRjBDRDAxMDAyQzAwMDA0MDRFCis6MTBBOUMwMDBGMEM5MDEwMDAwMDAwMDE2RjBCMTAxMDAxMDAwMDAxNUYwCis6MTBBOUQwMDBFMEM5MDEwMDAwMDAwMDQzNjFCMTAxMDBBMDAwMDBBNDMzCis6MTBBOUUwMDA2MkREMDEwMDM5ODVBODU0MTcxMDAwMDA0Qzg1MDA1RTE3Cis6MTBBOUYwMDAxNzkwMDAwMDEyMDAwMDAwMkFDODAxMDA0Qjg1MjI0Mzc2Cis6MTBBQTAwMDAyRjdDMDAwMDA0MDAwMDAxOENDQzAxMDAwMDAwMDA0Q0YxCis6MTBBQTEwMDAwM0IwMDEwMDJGOTgwMDQzNjEzMTAxMDAwMDAwMkU0NjcxCis6MTBBQTIwMDAwMkIwMDEwMDEwMDAwMDEwNDhDOTAxMDAwQzAwMDAwMTM0Cis6MTBBQTMwMDBGMENEMDEwMDBDMDAwMDA5RjBDOTAxMDAwMDAwMDAxODcxCis6MTBBQTQwMDBGMEIxMDEwMDEwMDAwMDE1RTBDOTAxMDAwMDAwMDA0MzUyCis6MTBBQTUwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDA0Qzg1Mjg1NDEyCis6MTBBQTYwMDAxNzEwMDAwMDQ4ODUwMDQwODFCMjAwMDAyRjk4MDA0Mzc1Cis6MTBBQTcwMDA2MTMxMDEwMDRFODUyMjUwMkY3QzAwMDAwMDAwMDA1NkZECis6MTBBQTgwMDAxNzkwMDEwMDA3MDAwMDE3OTg4ODAxMDA1MTg1QTI0MTI2Cis6MTBBQTkwMDA5OTZDMDAwMDAwMDAwMDU1MTc5MDAxMDAwMDAwMDA0MzcxCis6MTBBQUEwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA1Mjg1QTg0MDQ0Cis6MTBBQUIwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAxNjk4MDA0MDAyCis6MTBBQUMwMDA4MTMyMDEwMDU5ODUyMjQzMkY3QzAwMDAxNjgwMDAwMzRCCis6MTBBQUQwMDA0NEM5MDEwMDAwMDAwMDFERTRCMTAxMDBCNzk3MDA1RTA5Cis6MTBBQUUwMDAwNTEwMDEwMDVDODVBMjVGMkY3QzAwMDBDRTk0MDAwMTYwCis6MTBBQUYwMDAzODQzMDEwMEUyOTUwMDQwODEzMjAxMDAxQjhBMDA0MDhBCis6MTBBQjAwMDA4MUIyMDAwMDYwODVBMjRCRkQ3RjAwMDBGQTg1MDA0MTA0Cis6MTBBQjEwMDA0M0MzMDAwMDAwMDAwMDQwMjdCMDAxMDAwMDAwMDA0MEQ3Cis6MTBBQjIwMDAyREIwMDEwMDAwMDAwMDQwMTFCMDAxMDA2Mzg1MzUwMTI3Cis6MTBBQjMwMDA4NjMwMDAwMDZEMDAwMDQwNjE5OTAxMDA2Qjg1MjhCMUVFCis6MTBBQjQwMDAzMDMwMDAwMDY0ODUyMjRENzU3RDAwMDAwMDAwMDAxNjQ1Cis6MTBBQjUwMDA4MEIyMDEwMEVBODVBNzQwMTE2QzAwMDAwMDAwMDA0MUFFCis6MTBBQjYwMDA0M0MzMDEwMEY5ODUwMDQwODFCMjAwMDA2RDAwMDA0MDQwCis6MTBBQjcwMDA2MTk5MDEwMDZCODVBOEIxMTIzMDAwMDAwMDAwMDAxNjM5Cis6MTBBQjgwMDA4MEIyMDEwMDc1ODVBNzQwMTE2QzAwMDAwMDAwMDA0MUYzCis6MTBBQjkwMDA0M0MzMDEwMDAwMDAwMDA5MTBCMDAxMDAwMDAwMDAxOENDCis6MTBBQkEwMDAyQ0IwMDEwMERFMDcwMDQzODBDRTAxMDA2NDg1QUE0MDdFCis6MTBBQkIwMDA4MTMyMDAwMDdBODUwMDQwODFCMjAwMDA0MDAwM0U0M0FGCis6MTBBQkMwMDAyN0UwMDEwMDAwMDAwMDA5RjBCMTAxMDAwMDAwMDAxOEJBCis6MTBBQkQwMDBFMEIxMDEwMDAwMDAwMDQxMjdDMDAxMDA2NDg1QTMwQjIzCis6MTBBQkUwMDA4NzUwMDAwMDAwMDAxNTQwMUJCMDAxMDAwMDAwMDA0MDJECis6MTBBQkYwMDAyM0IwMDEwMDEyMDAwMDAwMkFDODAxMDA0MDAwMkQ0MENGCis6MTBBQzAwMDAzOUIwMDEwMDgyODVBMjQwMjc2QzAwMDAyMjAwMDAwOEI0Cis6MTBBQzEwMDAxMkM4MDEwMERFMDcwMDQwMjU5ODAxMDA4NTg1MDA0MDJDCis6MTBBQzIwMDA4MUIyMDAwMDAwMDAwMEY4MTJCMDAxMDAwMDAwMDBGMDQ2Cis6MTBBQzMwMDAzMEIwMDEwMDAwMDAwMDBCMjVCMDAxMDAwMDAwMDAxMDQyCis6MTBBQzQwMDAzMkIwMDEwMDE0MDAyMDAxRTBCMTAxMDBFRTA3MDA0MDI1Cis6MTBBQzUwMDAzNzk4MDEwMDhBODUyMzAxMzY2QzAwMDAwMDAwMDAwMTRFCis6MTBBQzYwMDAzNkIwMDEwMDk1ODU4MjQxMjM0MDAwMDAyMDgwMDAxMDBECis6MTBBQzcwMDA0MkM5MDEwMDkxODUyMjQwRTM2RDAwMDAwMDAwMDA0M0JECis6MTBBQzgwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA4RTg1QTg0MDI2Cis6MTBBQzkwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMTk2MDA0MzM0Cis6MTBBQ0EwMDAyMzMwMDEwMDAwMDAwMDEwMzJCMDAxMDAwMDAwMDA0MTFDCis6MTBBQ0IwMDAyM0IwMDEwMDAwMDAwMDAzNDhCMTAxMDAwMDgwMDAxOTJBCis6MTBBQ0MwMDA0NEM5MDEwMEE0ODUyMjQ1MUY3QzAwMDAwMDAwMDA0Q0ZGCis6MTBBQ0QwMDBGMUIxMDEwMDAwMDAwMDA5RjBCMTAxMDAwMDAwMDAxODBFCis6MTBBQ0UwMDBGMEIxMDEwMDAwMDAwMDQzNjFCMTAxMDAyMDAwMDAxOTMzCis6MTBBQ0YwMDA2MkREMDEwMDlCODVBODE1RTAzMTAwMDAwMDAwMDA1MEQ2Cis6MTBBRDAwMDAwM0QwMDEwMDAwMDAwMDUwMzNDMDAxMDAwMDAwMDA0Q0RGCis6MTBBRDEwMDAyNUQwMDEwMDBDMDAyRDRDMTNDMDAxMDAwMDAwMDA1MDk0Cis6MTBBRDIwMDAzN0QwMDEwMDAwMDAwMDUwMkJDMDAxMDA4QTg1MDA0NThCCis6MTBBRDMwMDAxRjgwMDAwMEE2ODVBMzEyMzY2QzAwMDBBNzg1NjgxQjQzCis6MTBBRDQwMDAyOEIwMDAwMDAwMDA2ODEyMjhCMDAxMDAwMDAwMDAwOUNGCis6MTBBRDUwMDBGMEIxMDEwMDAwMDAwMDE4RjBCMTAxMDAwMDAwMDA0MzU0Cis6MTBBRDYwMDA2MUIxMDEwMDIwMDAwMDE5NjJERDAxMDBBQTg1QTgxNTZCCis6MTBBRDcwMDBFMDMxMDAwMEQwODUyMjE0MDI1MDAwMDAwMDAwMDA1MDk1Cis6MTBBRDgwMDAzM0MwMDEwMDAwMDAwMDE0MjREMDAxMDAwQzAwMkQxNDc5Cis6MTBBRDkwMDAxMkMwMDEwMEM5ODVBMjE0MzY1MDAwMDBCQTg1MjI1Qzk5Cis6MTBBREEwMDAxRjdDMDAwMDMwODAwMDEwNDJDOTAxMDBCODg1MjI0MDlECis6MTBBREIwMDBFMzZEMDAwMDAwMDAwMDQyNjFCMTAxMDA0MDAwMDAxMDlFCis6MTBBREMwMDA2MkREMDEwMEI1ODVBODQwODEzMjAwMDAxQjg0MDA4ODQ3Cis6MTBBREQwMDAxQ0IwMDAwMDAwMDAwMDAzNDhCMTAxMDAwQzAwMkQ1QzE1Cis6MTBBREUwMDAxRjgwMDEwMDEwMDAwMEYwMkFDODAxMDAwMDAwMDA1Qzc0Cis6MTBBREYwMDAyQjgwMDEwMEYwMDcwMDQwMzc5ODAxMDBCRjg1MjMwMTM4Cis6MTBBRTAwMDAzNjZDMDAwMDAwMDAwMDAxMzZCMDAxMDBDQTg1MjIxQjJDCis6MTBBRTEwMDAwMjZDMDAwMDMwMDAwMDEwNDhDOTAxMDAwMDAwMkU1Q0U4Cis6MTBBRTIwMDAxRjkwMDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwMzdDCis6MTBBRTMwMDBGMEIxMDEwMEZGMDcwMDE1RTA4RDAxMDAwMDAwMDA0MkE1Cis6MTBBRTQwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDBDNjg1QTg0MDM4Cis6MTBBRTUwMDA4MTMyMDAwMENBODUwMDAzNDhCMTAwMDAwMDAwMDAxNEUwCis6MTBBRTYwMDAyQUMwMDEwMDhBODVBMjQwMjU2QzAwMDAwMDAwMDA0MTM0Cis6MTBBRTcwMDAzOUMwMDEwMDQwMDAzRDQzMzlFMDAxMDAwMDAwMDAwQkYzCis6MTBBRTgwMDAyNUIwMDEwMDAwMDAwMEY4MTJCMDAxMDA4QTg1MDBGMDMyCis6MTBBRTkwMDAzMEIwMDAwMDAwODAwMDE5NDJDOTAxMDBENjg1MjI0MDcwCis6MTBBRUEwMDBFMzZEMDAwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxOUEzCis6MTBBRUIwMDA2MkREMDEwMEQzODVBODQwODEzMjAwMDAxQjg0MDA4ODM4Cis6MTBBRUMwMDAxQ0IwMDAwMDAxOTYwMDQwMkIzMDAxMDAxODAwMkUwMzNBCis6MTBBRUQwMDA0OEIxMDEwMERBODUyMjUwMkY3QzAwMDAwMDAwMDA1NkE2Cis6MTBBRUUwMDAxNzkwMDEwMDA3MDAwMDE3OTg4ODAxMDBERDg1QTI0MTM2Cis6MTBBRUYwMDA5OTZDMDAwMDAwMDAwMDU1MTc5MDAxMDBFMDg1MjI0Mzg2Cis6MTBBRjAwMDAyRjdDMDAwMDAwMDAwMDU0MTc5MDAxMDAxNjAwMjAxRDQ3Cis6MTBBRjEwMDBFNEIxMDEwMEUyODVBMzQwMjc2QzAwMDBFNDg1NjA1Rjk2Cis6MTBBRjIwMDAxNzkwMDAwMDAwODQwMDBCMTZEQzAxMDAwMDAwNjAxMzg1Cis6MTBBRjMwMDAxNjk0MDEwMEI3OTcwMDVFMDUxMDAxMDAxQjhBQTI1RkZFCis6MTBBRjQwMDAyRjdDMDAwMDE0ODAwMDAzNDJDOTAxMDAwMDAwMDBGMkMxCis6MTBBRjUwMDAwMkIwMDEwMENFOTQwMDAxMzg0MzAxMDAxQjhBMDA0MDdBCis6MTBBRjYwMDA4MUIyMDAwMDAwMDAwMDQwODNCMDAxMDAwMDAwMDA0REVECis6MTBBRjcwMDA2MUIxMDEwMDAwMDAwMDE2NjJCMTAxMDBFQzg1QTg0MDNCCis6MTBBRjgwMDA4MTMyMDAwMDAwMDAwMDA4NjJCMTAxMDBFRTg1QTg0MDk3Cis6MTBBRjkwMDA4MTMyMDAwMEY5ODUyMjEzODI2QzAwMDA0MDAwM0Q0MzlECis6MTBBRkEwMDA4M0UwMDEwMDAwMDAwMEY4MTBCMDAxMDAwMDAwMDBGMDk0Cis6MTBBRkIwMDAyQ0IwMDEwMDAwMDAwMDE2NjJCMTAxMDBGNDg1QTg0MDI5Cis6MTBBRkMwMDA4MTMyMDAwMDAwMDAwMDA4NjJCMTAxMDBGNjg1QTg0MDRGCis6MTBBRkQwMDA4MTMyMDAwMEYwODUwMDQxODNDMDAwMDAwMDAwMTU0MDcwCis6MTBBRkUwMDA4MUIyMDEwMDAwODIwMEE2MDRCMDAxMDBBMDk4MDA0MEQ4Cis6MTBBRkYwMDA0Nzk5MDEwMEU5ODkwMDQxODkzMDAxMDA4QTk2MDA1MjkxCis6MTBCMDAwMDA5NTMwMDEwMDkxOTYwMDRCMDJCMDAwMDAxQjhBMDA0MDcxCis6MTBCMDEwMDAwRkIwMDAwMDAwMDAwMDVGMDE4MDAxMDAxMDAwMDAwMDgwCis6MTBCMDIwMDAwRUY0MDEwMDNGMDAwMDAwMDA4ODAxMDAwMzAwMDAwNzRCCis6MTBCMDMwMDAxQUY0MDEwMDIxOTYwMDA3MTYzMDAxMDAwQjg2MjI0MTA4Cis6MTBCMDQwMDA4MTZDMDAwMDA5ODYyMjQyODE2QzAwMDAxQjg0MDA4ODBDCis6MTBCMDUwMDAxQ0IwMDAwMDBBODYyMjVGMEY3QzAwMDAwNThBMDA0MEI5Cis6MTBCMDYwMDAwRkIwMDAwMDEzODZBMjVBMUY3QzAwMDA5Qjk1MDA0MDgxCis6MTBCMDcwMDA4MTMyMDEwMDEzODYyMjIwODU2QzAwMDAxMDg2OUMwRjBGCis6MTBCMDgwMDA4MDMyMDAwMDFCODQwMDg4MUNCMDAwMDA3Qzk2MDA1Q0FECis6MTBCMDkwMDAxRjAwMDEwMDlCOTgwMDQyNjEzMTAxMDAxQjg0MDA4ODYxCis6MTBCMEEwMDAxQ0IwMDAwMEU2OTkwMDA3OTYzMDAxMDAwMDAwMkQwNTU1Cis6MTBCMEIwMDA0OEIxMDEwMDAwMDAwMEYwMThCMDAxMDAxOTg2MjIzQUUyCis6MTBCMEMwMDAwMTZDMDAwMDAwMDAwMDAwOEVCMDAxMDA2QzhCMDA0MDlECis6MTBCMEQwMDAwMUIwMDAwMDAwMDAwMDQwODFCMjAxMDAyRTAwMkQwNUVCCis6MTBCMEUwMDA0OEIxMDEwMDFEODZBMjQwRTc2RDAwMDAwQTAwMDA0MDQzCis6MTBCMEYwMDA4Rjk4MDEwMDZDOEIwMDQwMDFCMDAwMDA2Njk1MDA0MDA1Cis6MTBCMTAwMDA4MTMyMDEwMDRFOTcwMDk1MDMzMDAxMDAxQjg0MDA4OEI2Cis6MTBCMTEwMDAxQ0IwMDAwMDAwMDAyRDAzNDhCMTAxMDAyMjAwMkRGMEZBCis6MTBCMTIwMDAyRUIwMDEwMDI4MjAwMEE2OTZCMDAxMDAyNjg2MjIxNzI2Cis6MTBCMTMwMDA5NjA0MDAwMDBCOTgwMDRCOTUzMDAxMDA2QzhCMDA0QzdFCis6MTBCMTQwMDA4RkIwMDAwMDI4ODY4MzE3ODAzMjAwMDAwMDAwMDA0NDgyCis6MTBCMTUwMDA0M0MxMDEwMDJBODY4NTE3ODAzMjAwMDAwMDAwMDA0OEE0Cis6MTBCMTYwMDA0M0MxMDEwMDI4MDAwMEY2MDJDQzAxMDAxMjAwMDBBMTNBCis6MTBCMTcwMDAyQUM4MDEwMDIxOTcwMDQwODEzMjAxMDBGQzk0MDA0MTVGCis6MTBCMTgwMDA4MTMwMDEwMDZDOEIwMDQwODFCMjAwMDAwMDAwMDAwMUEyCis6MTBCMTkwMDAwMEQwMDEwMDAwMDAyRTEwNDhCMTAxMDAyODAwMDA0MDNFCis6MTBCMUEwMDBGMTk5MDEwMDAwMDAwMDAzRjBCMTAxMDAwMDAwMDAwMDZGCis6MTBCMUIwMDBGMEIxMDEwMDM0ODY0NjQ3NjEzMTAwMDAwMDAwMDAxMDA0Cis6MTBCMUMwMDA2MkIxMDEwMDM1ODZBODFCRTAzMTAwMDAxQjg0MUU4ODk3Cis6MTBCMUQwMDAxQ0IwMDAwMDAwMDAwMDQ1MDNFMDAxMDAwODAwMkQwMzQyCis6MTBCMUUwMDA0OEIxMDEwMDVBODYwMUZCMDgzMDAwMDBBRDg2ODdGQjlDCis6MTBCMUYwMDAyMjMwMDAwMDAwMDAwMEZBMEVCMDAxMDAwMDAwMDBGODRDCis6MTBCMjAwMDAxNEIwMDEwMDAzMDAwMDA3MUFGNDAxMDAyMTk2MDAwN0EyCis6MTBCMjEwMDAxNjMwMDEwMDUwODYyMjQxODE2QzAwMDA0NDg2MjI0MjkzCis6MTBCMjIwMDA4MTZDMDAwMDFCODQwMDg4MUNCMDAwMDA0Rjg2MjI1RkU4Cis6MTBCMjMwMDAwRjdDMDAwMDM4MDAwMDA0N0U4OTAxMDA0ODg2QTY1RjZDCis6MTBCMjQwMDAwRjAwMDAwMDc0OTUwMDQwMDUzMDAxMDA0RDg2MDA0MDVECis6MTBCMjUwMDA4MUIyMDAwMDEzMDAwMDQwODc5ODAxMDAwMDAwMkQwMzE4Cis6MTBCMjYwMDA0OEIxMDEwMDBDMDAyREYwODJCMDAxMDAwMDAwMDBGMDk4Cis6MTBCMjcwMDA4NEIwMDEwMDAwOTcwMDQwMDUzMDAxMDAwMDAwMDA1QzMwCis6MTBCMjgwMDAxRjkwMDEwMDA1OEEwMDQwMEZCMDAwMDA1ODg2QTI1QUE2Cis6MTBCMjkwMDAxRjdDMDAwMDlCOTUwMDQwODEzMjAxMDA1ODg2MjIyMENGCis6MTBCMkEwMDA4NTZDMDAwMDU1ODY5QzBGODAzMjAwMDAxQjg0MDA4ODRFCis6MTBCMkIwMDAxQ0IwMDAwMDdDOTYwMDVDMUYwMDAxMDA5Qjk4MDA0MkJGCis6MTBCMkMwMDA2MTMxMDEwMDFCODQwMDg4MUNCMDAwMDBFNjk5MDAwNzcyCis6MTBCMkQwMDA5NjMwMDEwMDAwMDAyRDA1NDhCMTAxMDAwMDAwMDBGMDhCCis6MTBCMkUwMDAxOEIwMDEwMDVDODYyMTA0ODAyMDAwMDA1RDg2MDA0MENCCis6MTBCMkYwMDAxMEM5MDAwMEFFOEEwMDRCODFCMDAwMDA3Qzg2MDA0MzdDCis6MTBCMzAwMDA4MUIwMDAwMDgwODYwMEZCMjJCMDAwMDBBRThBMDA0MUMwCis6MTBCMzEwMDA4MUIwMDAwMDZDOEIwMDRFOEZCMDAwMDA3ODg2MDA1QTIwCis6MTBCMzIwMDA4RkIwMDAwMDY1ODYwMDQ3OEZCMDAwMDBBRThBMDA1M0UyCis6MTBCMzMwMDA4MUIwMDAwMEFFOEEwMDU2ODFCMDAwMDAzMjAwMkQwNUI5Cis6MTBCMzQwMDA0OEIxMDEwMDZDOEJBMDBBRTQ2RDAwMDA2Qjg2QTI0MTNECis6MTBCMzUwMDAxOTdDMDAwMDZBODYyMjBBODAzMjAwMDA2QzhCMDA1MzQwCis6MTBCMzYwMDA4RkIwMDAwMDZDOEIwMDU0OEZCMDAwMDA3NDg2MjIwQUVFCis6MTBCMzcwMDA4MDMyMDAwMDZFODZBMjBBRTQ2RDAwMDA2QzhCMDA1REQ2Cis6MTBCMzgwMDA4RkIwMDAwMDAwMDAwMEYyODBCMDAxMDAwMDAwMDAwQTUxCis6MTBCMzkwMDA4MEQwMDEwMDcyODZBMDkxODE2QzAwMDA2QzhCMDA1RUYxCis6MTBCM0EwMDA4RkIwMDAwMDI1MDAwMDQwOEY5ODAxMDA2QzhCMDA0MDlBCis6MTBCM0IwMDA4MUIyMDAwMDc2ODYyMDkxRTU2RDAwMDA2QzhCMDA1NDEwCis6MTBCM0MwMDA4RkIwMDAwMDIxMDAwMDQwOEY5ODAxMDA2QzhCMDA0MDdFCis6MTBCM0QwMDA4MUIyMDAwMDMyMDAyRDA1NDhCMTAxMDA2QzhCQTAwQTNCCis6MTBCM0UwMDBFNDZEMDAwMDI0MDAwMDQwOEY5ODAxMDA2QzhCMDA0MDQ5Cis6MTBCM0YwMDA4MUIyMDAwMDM3MDAyRDA1NDhCMTAxMDAwNDAwMDBGM0MwCis6MTBCNDAwMDA4MkY0MDEwMEFFOEFBMDQyODM2QzAwMDBBRThBMDA1NDMwCis6MTBCNDEwMDA4MUIwMDAwMDAwMDAwMEYyMEVCMDAxMDAwMzAwMDAwNzQwCis6MTBCNDIwMDAxQUY0MDEwMDAwQjUwMDBENDJDOTAxMDAwNzAwMDAwNzMxCis6MTBCNDMwMDAxNjg4MDEwMDg5ODYyMjBCRTY3RDAwMDAwQTAwMDA0MDg0Cis6MTBCNDQwMDA4Nzk4MDEwMDU1OTkwMDQwODEzMjAxMDAwMDAwMDA0MEJBCis6MTBCNDUwMDAwRkIwMDEwMDA1OEEwMDVDMUY5MDAwMDA5Qjg2MjI1MEZGCis6MTBCNDYwMDBGRDdGMDAwMDk2ODZBMjU0RkQ3RjAwMDA4RTg2MjI1NTQ3Cis6MTBCNDcwMDBGRDdGMDAwMDgyMDAwMDQwODc5ODAxMDA4Njg2MDA0MDIyCis6MTBCNDgwMDA4MUIyMDAwMDg2ODYyMjUzRkQ3RjAwMDAxNDgwMDAwM0Y1Cis6MTBCNDkwMDA0MkM5MDEwMDAwMDAwMEYwOTZCMDAxMDAxMDAwMDA0QjBFCis6MTBCNEEwMDA4MEY0MDEwMDBDQkMwMDQwODc5ODAxMDA5Njg2MjI0MzdFCis6MTBCNEIwMDA4MDZDMDAwMEZGRkYwMDRCODA4ODAxMDA4Njg2QTI0MzVECis6MTBCNEMwMDA4MDZDMDAwMDdDOTYwMDQwNDc5OTAxMDA5Nzg2NDM0MEJECis6MTBCNEQwMDA4MTMyMDAwMDlBODZBMEYwMzA2RjAwMDA4Qzg2MUI0MEZECis6MTBCNEUwMDA4MUIyMDAwMDAwMDAxQjQxMzFDMzAxMDBBNTk1MDA0MDVFCis6MTBCNEYwMDAyNTMwMDEwMDlGODY5QzBGODAzMjAwMDAxQjg0MDA4ODRECis6MTBCNTAwMDAxQ0IwMDAwMDdDOTYwMDVDMUYwMDAxMDAxNDgwMDAwMzRBCis6MTBCNTEwMDA0MkM5MDEwMDAwMDAwMEYwOTZCMDAxMDAwMDAwMkYwNUI0Cis6MTBCNTIwMDA0OEIxMDEwMDEwMDAwMDA3MThFNDAxMDAwMDA4MDAwQ0Y5Cis6MTBCNTMwMDBFMDk5MDEwMEU2OTkwMDA3OTYzMDAxMDAwMEI1MDAwRDgyCis6MTBCNTQwMDA0NkM5MDEwMEE2ODYzMDQwODEzMjAwMDAwMDAwMDAwQjkxCis6MTBCNTUwMDBFNjkxMDEwMDAwMDIwMEExNDZDOTAxMDAwMDAwMDAwQkI1Cis6MTBCNTYwMDBFNjkxMDEwMDA0MDAyRTA1NDhCMTAxMDAwMDAwMTA0MEUyCis6MTBCNTcwMDBFMUIxMDEwMEFFOEEwMDQwODFCMDAwMDAwMDAwMDBGQjk0Cis6MTBCNTgwMDAyOEIwMDEwMDAwMDAwMEZCODZCMDAxMDAwMDAwMDBGOEI4Cis6MTBCNTkwMDAxNEIwMDEwMEI3ODYyMjQ2MjM3QzAwMDBCMzg2MjI0MDA3Cis6MTBCNUEwMDA4NzdDMDAwMDAwMDAwMDQ4MUY5MDAxMDBCNTg2MjI0MTAyCis6MTBCNUIwMDA4NzdDMDAwMDAwMDAwMDQ3MUY5MDAxMDBCNzg2MjI0MkYwCis6MTBCNUMwMDA4NzdDMDAwMDAwMDAwMDQ1MUY5MDAxMDBCNzg2NDcxQkU0Cis6MTBCNUQwMDAyQzMwMDAwMDAwMDAwMEEwMTNCMDAxMDAwMDAwMUY0MTRCCis6MTBCNUUwMDA0MUMzMDEwMEU2ODYyMzkyMTU2QzAwMDBFNjg2QTI0NTYxCis6MTBCNUYwMDAxRjdDMDAwMEVBODYyMjRCRkQ3RjAwMDAxNzAwMDBEMDcwCis6MTBCNjAwMDBBMkM5MDEwMDAwMDAwMDQwMjdCMDAxMDAwMjAwMDAwQUFBCis6MTBCNjEwMDAyNEM4MDEwMEREOTUwMDQwMEYzMDAxMDBFNDg2MjIwOEI3Cis6MTBCNjIwMDA0MDMwMDAwMDAwMDAwMDQxQTNDMTAxMDBGMDA3MDAxMkZCCis6MTBCNjMwMDAyNENDMDEwMEMwODZBQTQxMjc0MDAwMDAwMTAwMDAxMzZECis6MTBCNjQwMDA4MENDMDEwMEUwODYyNjQwMjMzMDAwMDAwMDAwMDA0MDRFCis6MTBCNjUwMDA4M0IwMDEwMDYwMDAwMDAzODRDODAxMDAxMDAwMDAxMEU2Cis6MTBCNjYwMDA0OENEMDEwMDE3MDAwMEQwQTJDOTAxMDBDRDg2QTI0MDNDCis6MTBCNjcwMDA4MzZDMDAwMEQ5ODYwMDQxODNCMDAwMDAwMDgwMDA0MjQ2Cis6MTBCNjgwMDA0NDk5MDEwMDAwMDA2ODIxMzg5NjAxMDAwMDAwMkU1MDA2Cis6MTBCNjkwMDA0OUMxMDEwMEQyODZBMjQ0MjM2QzAwMDAzMDAwMDAwMzlGCis6MTBCNkEwMDA0OEM5MDEwMDAwMDAwMDQ0RjFCMTAxMDAwQzAwMDAyMDc1Cis6MTBCNkIwMDBGMEM5MDEwMDAwMDAwMDQ0NjFCMTAxMDBBMDAwMDBBNDM1Cis6MTBCNkMwMDA2MkREMDEwMEQ1ODZBODQyRTAzMTAwMDAwMDAwMDA0NEEwCis6MTBCNkQwMDA4NUMwMDEwMDAwMDAwMDQxMjNDMDAxMDAwMDAwMDA0MUJFCis6MTBCNkUwMDBBM0MxMDEwMENCODZBMjQxODE1MDAwMDBFMDg2MjI0MDI4Cis6MTBCNkYwMDAyMzZDMDAwMDAwMDAwMDQ0NjFCMTAxMDA0MDAwMDAxMDE0Cis6MTBCNzAwMDA2MkREMDEwMEREODZBODQwODEzMjAwMDAxQjg0MDA4OEQ0Cis6MTBCNzEwMDAxQ0IwMDAwMDAwMDAwMDAzNDhCMTAxMDBFRTA3MDA0MDJCCis6MTBCNzIwMDAyNTk4MDEwMDE3MDAwMEQwMkFDODAxMDBGMzg2MDAxN0YxCis6MTBCNzMwMDAxMEIwMDAwMEMwOTcwMDQwODEzMjAxMDBFQTg2MDA0MDRFCis6MTBCNzQwMDA4MUIyMDAwMEREOTUwMDkyMjUzMDAxMDAwMDAwMDA0MDJDCis6MTBCNzUwMDAzMUIwMDEwMEVBODYyMjA4MkUzMDAwMDBGMzg2MDA0MTU1Cis6MTBCNzYwMDAyN0IwMDAwMDgwODAwMEE2MDRCMDAxMDAwNjAwMDA0MDYxCis6MTBCNzcwMDA4Nzk4MDEwMDU1OTkwMDBBOEMzMDAxMDAwMDAwMDA0MEI0Cis6MTBCNzgwMDAwRkIwMDEwMDAwMDAwMDVDMUY5MDAxMDBGMjg2MjI5RkI0Cis6MTBCNzkwMDAxMzZDMDAwMDAyMDAwMDg4MUNDQzAxMDA2Qjg0MDA0MDg4Cis6MTBCN0EwMDA4MUIyMDAwMDA1OEEwMDQxM0ZDMzAwMDAwMDAwMDA0MDU0Cis6MTBCN0IwMDAwRkIwMDEwMDI4MDAwMDAxODBDRTAxMDAwNzg3MkE0MDU5Cis6MTBCN0MwMDA4MTMwMDAwMDAwODAwMDEwNDRDOTAxMDA0MDAwMDA0MEFBCis6MTBCN0QwMDA4MTk4MDEwMEZDODZBMjQ4MUY3QzAwMDBGQzg2QTI0N0RECis6MTBCN0UwMDAxRjdDMDAwMEZDODZBMzA3MDM2QzAwMDA4MDAwMDA0MDYzCis6MTBCN0YwMDA4MTk4MDEwMEZGODZBMzQwMDI2QzAwMDAyODAwMDAwMTMwCis6MTBCODAwMDBGMENEMDEwMDAxODcwMDQwMEZCMDAwMDAyODAwMDA0MDhCCis6MTBCODEwMDBGMENEMDEwMDA0MDAwMDQwMEVDQzAxMDAyODAwMDAwMzIwCis6MTBCODIwMDBGMEM5MDEwMDI4MDAwMDAwRjBDOTAxMDAwMDAwMDAxNjY2Cis6MTBCODMwMDBFMEIxMDEwMDAwMDAwMDQ3NjFCMTAxMDAyMDAwMDAxMEVDCis6MTBCODQwMDA2MkREMDEwMDA1ODdBODVDMUYxMDAwMDAwMDAwMDA0MEI5Cis6MTBCODUwMDA0Mzk5MDEwMDAwMDAwMEYwMDhCMDAxMDBBMDAxMkQ0MDU0Cis6MTBCODYwMDAwMEMwMDEwMEVEODgyMjBGNDIwNTAwMDAxODg3OUMwRkUwCis6MTBCODcwMDA4MDMyMDAwMDAwMDAwMDVDMUY4MDAxMDAwMDgwMDAxMDhBCis6MTBCODgwMDA0MkM5MDEwMDEzODcyMjQwRTM2RDAwMDAwMDAwMDA0NzE5Cis6MTBCODkwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAxMDg3QTg0MDg2Cis6MTBCOEEwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAxODg3MjIwNzJBCis6MTBCOEIwMDA4MDMyMDAwMDAwMDAwMDAzNDJCMTAxMDAwMDAwMDAwN0Q4Cis6MTBCOEMwMDA0MkMxMDEwMDAwODAwMEExNDY5OTAxMDAwMDAwMDA1RjE0Cis6MTBCOEQwMDBFMTkxMDEwMEQ3ODdBMjQ1MUY3QzAwMDAxMDAwMDAwMzAyCis6MTBCOEUwMDA0OEM5MDEwMDAwMDAyRDU0MjlDMDAxMDAwMDAwMDBGOEUzCis6MTBCOEYwMDAxOEIwMDEwMDAwMDAwMEY4MDRCMDAxMDAwMDAwMDBGOERBCis6MTBCOTAwMDAwRUIwMDEwMDQyMDAwMDAzMEFDODAxMDAwQzAwMDBBNEIwCis6MTBCOTEwMDAwQ0M4MDEwMDAwMDAwMDQwMTdCMDAxMDAwMDAwMDAxNDM2Cis6MTBCOTIwMDAwMkIwMDEwMDAwMDAwMDE0MjREMDAxMDAwMDAwMDAxNDQ3Cis6MTBCOTMwMDAxMEMwMDEwMDEyMDAwMDA4MTBDODAxMDAwMDAwMDA0MDAzCis6MTBCOTQwMDAyM0IwMDEwMEZFN0YwMDA1NDRDOTAxMDAyOTg3MjA5NDJGCis6MTBCOTUwMDAxNTZDMDAwMDJBODcwMDk0RTVCMTAwMDAwMDAwMDAwQTgxCis6MTBCOTYwMDBFNEIxMDEwMDQzODcyMjAxODAzMjAwMDAwMDAwM0M0NDIyCis6MTBCOTcwMDAyM0UwMDEwMDAwMDAyRUE0ODBCMDAxMDAwMDAwMDAxMEIwCis6MTBCOTgwMDA0OEMxMDEwMDMwODdBMzA3MDI2QzAwMDAzMTg3NjgwMUJECis6MTBCOTkwMDAxQUIwMDAwMDAwMDA2ODA3MUFCMDAxMDAwMDAwMDAwRDk2Cis6MTBCOUEwMDAwMkQwMDEwMDAwMDAwMDA1RjBCMTAxMDAwMDAwMDAwQzExCis6MTBCOUIwMDBGMEIxMDEwMDAwMDAwMDAyRTBCMTAxMDAwMDAwMDAwRDQ0Cis6MTBCOUMwMDAwQUMwMDEwMDNEODcyMjQwMDM2QzAwMDAzRDg3MjI0MkVGCis6MTBCOUQwMDAyMzZDMDAwMDAwMDAwMDQxMjNDMDAxMDAwMDAwMDA0NzZDCis6MTBCOUUwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDA2NTg3Mjg0MDZDCis6MTBCOUYwMDA4MTMyMDAwMDNBODcwMDQwODFCMjAwMDAwMDAwMDAxMDUwCis6MTBCQTAwMDA4MEMwMDEwMDAwMDAwMDQ3NjFCMTAxMDAwMDAwMDA0MDVCCis6MTBCQTEwMDA2MkIxMDEwMDNGODdBODQwMjMzMDAwMDAxQjg0MDA4OEVBCis6MTBCQTIwMDAxQ0IwMDAwMDY1ODcwMDQwODFCMjAwMDAwMDAwM0M0NDZCCis6MTBCQTMwMDAyM0UwMDEwMDAwMDAwMEE0ODZCMDAxMDAwMDAwMkUxMEU5Cis6MTBCQTQwMDA0OEMxMDEwMDQ4ODdBMzEyMEU2QzAwMDA0OTg3NjgwN0FGCis6MTBCQTUwMDAxQUIwMDAwMDAwMDA2ODEyMUFCMDAxMDA0Qzg3ODAwODdDCis6MTBCQTYwMDBGMDMxMDAwMDAxMDAwMDExOThDODAxMDAwMDAwMDA0Q0Y2Cis6MTBCQTcwMDAxRTkwMDEwMDAwMDAwMDBDRjBCMTAxMDAwMDAwMDAwMjY3Cis6MTBCQTgwMDBFMEIxMDEwMDAwMDAwMDEwODZDMDAxMDAwMDAwMDA0Njg3Cis6MTBCQTkwMDA2MUIxMDEwMDAxMUYwMDQzNjJERDAxMDA1MDg3QTg1QzE1Cis6MTBCQUEwMDAxRjEwMDAwMDgzODcyMjBEMTQ2QzAwMDA1Njg3MjIwREEyCis6MTBCQUIwMDAyNDZDMDAwMDAwMDAwMDBEMTBDMDAxMDA1QTg3MDAwRDJBCis6MTBCQUMwMDAyNEQwMDAwMDAwMDAwMDQxMkJDMDAxMDAwMDAwMDAxNTQwCis6MTBCQUQwMDBBMkIxMDEwMDEwMDAwMDIwMTBDODAxMDBGMDA3MDA0MEQyCis6MTBCQUUwMDAyNTk4MDEwMDVDODcyMjQyMjM2QzAwMDA2NTg3MDA0MTk1Cis6MTBCQUYwMDAyM0MwMDAwMDAwMDAwMDQ2NjFCMTAxMDA0MDAwMDAxMEJBCis6MTBCQjAwMDA2MkREMDEwMDVEODdBODVDMUYwMDAwMDAxQjg0MDA4OEM3Cis6MTBCQjEwMDAxQ0IwMDAwMDAwMDAwMDEwNDhCMTAxMDA2Mzg3MjI0N0ZDCis6MTBCQjIwMDAxRjdDMDAwMDExOTYwMDQzMjMzMDAxMDAwRTAwMDAwRjFGCis6MTBCQjMwMDAxRThDMDEwMDAwMDAwMDQwMjNCMDAxMDA4Mzg3MjIwRDBECis6MTBCQjQwMDAxNDUwMDAwMDgyODdBMjBEMEU1MDAwMDA3MTg3MjI0NjFCCis6MTBCQjUwMDAxRjdDMDAwMDAwMDAwMDQ2MUY4MDAxMDAzMDgwMDAxMEE0Cis6MTBCQjYwMDA0MkM5MDEwMDZGODcyMjQwRTM2RDAwMDAwMDAwMDA0N0RBCis6MTBCQjcwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA2Qzg3QTg0MDQ3Cis6MTBCQjgwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAyMDgwMDAwMzZDCis6MTBCQjkwMDA0Njk5MDEwMDAwMDAwMDVGRTE5MTAxMDAwMDAwMkQwNkMwCis6MTBCQkEwMDA0OEIxMDEwMDAwMDAwMEY4MThCMDAxMDAwMDAwMDBGOEUyCis6MTBCQkIwMDAwNEIwMDEwMDc2ODcxRkYwMEUzMDAwMDAyQTg3MDA0Qzg5Cis6MTBCQkMwMDAwREMwMDAwMDAwMDAyRTVGMEY4MDAxMDAyQTg3MjMwN0IwCis6MTBCQkQwMDAxNDZDMDAwMDMwMDAwMDEwNDhDOTAxMDAyNDAwMDA0MDJGCis6MTBCQkUwMDBGMTk5MDEwMDAwMDAwMDAzRjBCMTAxMDAwMDAwMDAwMDI1Cis6MTBCQkYwMDBGMEIxMDEwMDAwMDAwMDE2RjBCMTAxMDAyNDAwMDAwMEM3Cis6MTBCQzAwMDAwMEM4MDEwMDAwMDAwMDQ3NjFCMTAxMDBBMDAwMDBBNENECis6MTBCQzEwMDA2MkREMDEwMDdGODdBODQ2MUYxMDAwMDAyQTg3MDAwMzBECis6MTBCQzIwMDAwQ0IwMDAwMDJBODcwMDBEMThDMDAwMDAwNDAwMkUxNDdDCis6MTBCQzMwMDAwQUQwMDEwMDEyMDAwMDA1NDhDRDAxMDBGRTdGMDAwNTdBCis6MTBCQzQwMDA0MkM5MDEwMDBDMDAyQUYyRTBCMTAxMDA4OTg3MjI0MEJDCis6MTBCQzUwMDAzMTZDMDAwMDAwMDA2MDE4Mzg5NjAxMDAxRTAwMDA0MEEyCis6MTBCQzYwMDA0Mzk5MDEwMDAwODEwMEY2ODBDRTAxMDA4RDg3QTY0MDM3Cis6MTBCQzcwMDA4MTMyMDAwMDAwMDAwMDQ0NDNDMTAxMDA4Rjg3MjIwQjg1Cis6MTBCQzgwMDBFRDZEMDAwMDA4MDAwMEExNDJDOTAxMDAwMjAwMDBBMTAyCis6MTBCQzkwMDA0NkM5MDEwMDBGMDAwMEZBOTQ4ODAxMDAwMjAwMDA0QTIyCis6MTBCQ0EwMDA4NkU0MDEwMDAwMDAwMEY2MEVCMDAxMDA5Nzg3MjI0N0VECis6MTBCQ0IwMDAxRjdDMDAwMDA0MDAxRjQzMEU1MDAwMDA5Nzg3QTA0NjIxCis6MTBCQ0MwMDAwRjQwMDAwMDAwMDAwMDQxMEZDMDAxMDA5Qjg3MjI0ODg4Cis6MTBCQ0QwMDAxRjdDMDAwMDAwMDAwMDQwOTFCMDAxMDAwNDAwMEZBMjkyCis6MTBCQ0UwMDA0MjMxMDAwMDlFODcwMDQwODlCMDAwMDAwQzAwMDBBMjk1Cis6MTBCQ0YwMDA0MkM5MDEwMDAwMDAwMDQzODlCMDAxMDAwMDAwMDA0Mzc4Cis6MTBCRDAwMDA5NUQwMDEwMDAwMDAwMEZDODJCMDAxMDBBMTg3QTA0MTk1Cis6MTBCRDEwMDA5MDQwMDAwMDAwMDAwMDQxOTFDMDAxMDBBNjg3MjI0NzJBCis6MTBCRDIwMDAxRjdDMDAwMEE2ODdBMDQzODk2QzAwMDBBNjg3MjA0NUUxCis6MTBCRDMwMDA4OTZDMDAwMEE2ODdBMDQxMEU0MDAwMDAwMDAwMDA0MTcxCis6MTBCRDQwMDAwRkMwMDEwMDAwMDAwMDQxODlDMDAxMDA5RTg3QTI0MTkwCis6MTBCRDUwMDA5NTUwMDAwMEFGODcyMjQ4MUY3QzAwMDAxMDAwMDA0ODZCCis6MTBCRDYwMDA5MkY0MDEwMEZGRkYwMDQ4OTA4ODAxMDBBRDg3OTA0OEUxCis6MTBCRDcwMDA5MjQwMDAwMDAwMDAwMDQxOTNDMDAxMDAwQTAwMDBBMkIwCis6MTBCRDgwMDA0NEM5MDEwMDAwMDA2NjIwOTNBNDAxMDAzMDgwMDAxMDI3Cis6MTBCRDkwMDA0NEM5MDEwMDEyMDAwMDE0RjBDOTAxMDAwMDAwMDAxNzlFCis6MTBCREEwMDBGMEIxMDEwMDEyMDAwMDA1RTBDRDAxMDAzMDAwMDAxMEVDCis6MTBCREIwMDA4MEM4MDEwMDAwMDAwMDQ0NjFCMTAxMDAyMDAwMDA0MDgzCis6MTBCREMwMDA2MkREMDEwMEI1ODdBODQwODEzMjAwMDBDMjg3MjI1Qzk1Cis6MTBCREQwMDAxRjdDMDAwMDAwMDAzQzQ0MjNFMDAxMDAwMDAwMkQxMDA3Cis6MTBCREUwMDA0OEMxMDEwMEJGODcyMjQwRTM2RDAwMDAwMDAwMDA0NjBCCis6MTBCREYwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBCQzg3QTg0MDc1Cis6MTBCRTAwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDBDMjg3ODc1QzYwCis6MTBCRTEwMDAxRjAwMDAwMDAwMDAwMDEwNDhCMTAxMDAxMTk2MDA0MTExCis6MTBCRTIwMDAyMzQwMDEwMEM0ODdBMjQ3MUY3QzAwMDA1ODg5MDAxN0U3Cis6MTBCRTMwMDAxMEIwMDAwMDAwMDAyRjAzNDhCMTAxMDBDNzg3QTAwNzIxCis6MTBCRTQwMDAxNjQwMDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwMDAwQjc4Cis6MTBCRTUwMDBFNEIxMDEwMDAwMDAwMDUwMTdGMDAxMDBDQjg3OTBGMjIwCis6MTBCRTYwMDAxNjQwMDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwNjYyMERECis6MTBCRTcwMDAxN0E0MDEwMDEwMDAwMDE0MkFDODAxMDAwMDAwMDA1MDlGCis6MTBCRTgwMDAyQkUwMDEwMDAwMDAwMEYyMkE5NDAxMDAzMDgwMDAxMDM1Cis6MTBCRTkwMDA0MkM5MDEwMEQ1ODcyMjQwRTM2RDAwMDAwMDAwMDA0NDQ0Cis6MTBCRUEwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBEMjg3QTg0MEFFCis6MTBCRUIwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDgwMDAxNzQ1Cis6MTBCRUMwMDAxMERDMDEwMDU4ODkwMDQwODFCMjAwMDBBNTk1MDA0MEI3Cis6MTBCRUQwMDA4MTMyMDEwMERCODcyMjVDMUY3QzAwMDAxQjg0MDA4ODBDCis6MTBCRUUwMDAxQ0IwMDAwMDdDOTYwMDVDMUYwMDAxMDAwMDgwMDAwNTczCis6MTBCRUYwMDA0NEM5MDEwMDAwMDAwMDQwRTFCMTAxMDAwNDAwMkQwMzJECis6MTBCRjAwMDA0OEIxMDEwMDAwMDAwMEYwM0NCMDAxMDAyODAwMDAxNDFFCis6MTBCRjEwMDAwMkM4MDEwMDAwMDAwMDAxMzRCMDAxMDAwMDAwMkQwNTNFCis6MTBCRjIwMDAzMkIwMDEwMDIyMDAwMDA1MEFDODAxMDAxMDAwMDAwMzIxCis6MTBCRjMwMDA0OEM5MDEwMDAwMDAwMEY4MThCMDAxMDAwMDAwMDBGODM2Cis6MTBCRjQwMDAwNEIwMDEwMDAwMDAwMEY4MEVCMDAxMDAwQzAwMDBBNEQ1Cis6MTBCRjUwMDAwQ0M4MDEwMDAwMDAwMDQwMTdCMDAxMDAwMDAwMDA0MEM0Cis6MTBCRjYwMDAyM0IwMDEwMDIxODgyMjAxODAzMjAwMDAwMDAwM0M0NEZGCis6MTBCRjcwMDAyM0UwMDEwMDAwMDAyRUE0ODBCMDAxMDAwMDAwMDAxMEFBCis6MTBCRjgwMDA0OEMxMDEwMEYwODdBMzA3MDI2QzAwMDBGMTg3NjgwMTM3Cis6MTBCRjkwMDAxQUIwMDAwMDAwMDA2ODA3MUFCMDAxMDAwMDAwMDAwRDkwCis6MTBCRkEwMDAwMkQwMDEwMDAwMDAwMDA1RjBCMTAxMDAwMDAwMDAwQzBCCis6MTBCRkIwMDBGMEIxMDEwMDAwMDAwMDAyRTBCMTAxMDAwMDAwMDAwRDNFCis6MTBCRkMwMDAwQUMwMDEwMDAzODgyMjQwMDM2QzAwMDBGRDg3MjI0MjYyCis6MTBCRkQwMDAyMzZDMDAwMDAwMDAwMDQxMjNDMDAxMDAwMDAwMDA0NzY2Cis6MTBCRkUwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDAzRDg4Mjg0MDhECis6MTBCRkYwMDA4MTMyMDAwMEZBODcwMDQwODFCMjAwMDAwMDAwMDAxMDhBCis6MTBDMDAwMDA4MEMwMDEwMDAwMDAwMDQ3NjFCMTAxMDAwMDAwMDA0MDU1Cis6MTBDMDEwMDA2MkIxMDEwMEZGODdBODQwMjMzMDAwMDAxQjg0MDA4ODI0Cis6MTBDMDIwMDAxQ0IwMDAwMDNEODgwMDQwODFCMjAwMDAwMDAwMDAxMEZDCis6MTBDMDMwMDA4MEMwMDEwMDAwMDAwMDQ3NjFCMTAxMDAwMDAwMDA0MDI1Cis6MTBDMDQwMDA2MkIxMDEwMDA1ODhBODQwMjMzMDAwMDAxQjg0MDA4OEVECis6MTBDMDUwMDAxQ0IwMDAwMDIyMDAwMDE5NDhDOTAxMDAwMDAwMkQxNDg2Cis6MTBDMDYwMDA0OEMxMDEwMDBGMDAwMEYyM0E4ODAxMDAwMDAwMDA0MkMwCis6MTBDMDcwMDAzQkUwMDEwMDBFMDAwMDE0MDJDODAxMDAwMDAwMDAxRDlBCis6MTBDMDgwMDAwMkMwMDEwMDExODgyMzFBMDI1MDAwMDAwMDAwMDA0NjdGCis6MTBDMDkwMDAwM0MwMDEwMDNEODgwMDAxMzRDMDAwMDAwQzAwMkQxRENDCis6MTBDMEEwMDA0OEMxMDEwMEYwMDAwMEYyMzA4ODAxMDAwMDAwMDA0MkE5Cis6MTBDMEIwMDAzMUYwMDEwMDAwMDAwMDE0MDJCMDAxMDAwMDAwMDAxRDdBCis6MTBDMEMwMDAwMkMwMDEwMDAwMDAwMDE4MDJDMDAxMDAxOTg4MjIxQUY1Cis6MTBDMEQwMDAwMjUwMDAwMDNEODgwMDAxMzRDMDAwMDAyMjAwMDAxOTE5Cis6MTBDMEUwMDA0OEM5MDEwMDAyMDAyRDE0NDhDMTAxMDAwMDAwMDBGNkZCCis6MTBDMEYwMDAxNEIwMDEwMDAwMDAwMDFEMTREMDAxMDAwMDAwMDAxODYxCis6MTBDMTAwMDAxNEQwMDEwMDAwMDAwMDFFMjRCMDAxMDAxMjAwMDAxNzJFCis6MTBDMTEwMDAxMEM4MDEwMDNEODgwMDFBMTBDMDAwMDAwMDAwM0M0NDE3Cis6MTBDMTIwMDAyM0UwMDEwMDAwMDAwMEE0ODZCMDAxMDAwMDAwMkUxMEYyCis6MTBDMTMwMDA0OEMxMDEwMDI2ODhBMzEyMEU2QzAwMDAyNzg4NjgwN0ZBCis6MTBDMTQwMDAxQUIwMDAwMDAwMDA2ODEyMUFCMDAxMDAyQTg4ODAwOEE2Cis6MTBDMTUwMDBGMDMxMDAwMDAxMDAwMDExOThDODAxMDAwMDAwMDA0Q0ZGCis6MTBDMTYwMDAxRTkwMDEwMDAwMDAwMDBDRjBCMTAxMDAwMDAwMDAwMjcwCis6MTBDMTcwMDBFMEIxMDEwMDAwMDAwMDEwODZDMDAxMDAwMDAwMDA0NjkwCis6MTBDMTgwMDA2MUIxMDEwMDAxMUYwMDQzNjJERDAxMDAyRTg4QTg1QzNGCis6MTBDMTkwMDAxRjEwMDAwMDVBODgyMjBEMTQ1MDAwMDA1QTg4MjIwREVBCis6MTBDMUEwMDAyNDUwMDAwMDAwMDAwMDBEMTBDMDAxMDAzNTg4MjI0MjFDCis6MTBDMUIwMDAyMzZDMDAwMDNEODgwMDQxMjNDMDAwMDAwMDAwMDA0NkMxCis6MTBDMUMwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAzNjg4QTg1QzBBCis6MTBDMUQwMDAxRjAwMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAxMDNECis6MTBDMUUwMDA0OEIxMDEwMDExOTYwMDQzMjMzMDAxMDAwRTAwMDAwRkZBCis6MTBDMUYwMDAxRThDMDEwMDAwMDAwMDQwMjNCMDAxMDA1OTg4QTIwREYwCis6MTBDMjAwMDAwRTUwMDAwMDQ4ODgyMjQ2MUY3QzAwMDAwMDAwMDA0NkI3Cis6MTBDMjEwMDAxRjgwMDEwMDMwODAwMDEwNDJDOTAxMDA0Njg4MjI0MDgyCis6MTBDMjIwMDBFMzZEMDAwMDAwMDAwMDQ3NjFCMTAxMDA0MDAwMDAxMDE0Cis6MTBDMjMwMDA2MkREMDEwMDQzODhBODQwODEzMjAwMDAxQjg0MDA4ODMxCis6MTBDMjQwMDAxQ0IwMDAwMDIwODAwMDAzNDY5OTAxMDAwMDAwMDA1RjQwCis6MTBDMjUwMDBFMTkxMDEwMDAwMDAyRDA2NDhCMTAxMDAwMDAwMDBGODQ2Cis6MTBDMjYwMDAxOEIwMDEwMDAwMDAwMEY4MDRCMDAxMDA0RDg4MUZGMDc0Cis6MTBDMjcwMDAwRTMwMDAwMEVBODcwMDRDMERDMDAwMDAwMDAwMkU1RjY5Cis6MTBDMjgwMDAwRjgwMDEwMEVBODcyMzA3MTQ2QzAwMDAzMDAwMDAxMEMzCis6MTBDMjkwMDA0OEM5MDEwMDI0MDAwMDQwRjE5OTAxMDAwMDAwMDAwMzlBCis6MTBDMkEwMDBGMEIxMDEwMDAwMDAwMDAwRjBCMTAxMDAwMDAwMDAxNjM0Cis6MTBDMkIwMDBGMEIxMDEwMDI0MDAwMDAwMDBDODAxMDAwMDAwMDA0N0E4Cis6MTBDMkMwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDA1Njg4QTg0NjBCCis6MTBDMkQwMDAxRjEwMDAwMEVBODcwMDAzMENCMDAwMDBFQTg3MDAwRDgxCis6MTBDMkUwMDAxOEMwMDAwMDc3ODhBMjQ0MUY3QzAwMDAwMDAwMDAxOURECis6MTBDMkYwMDAwQUIwMDEwMDIyMDAwMDA1NDhDOTAxMDAwQTAwMkQxNEZGCis6MTBDMzAwMDA0OEMxMDEwMDAyMDAyMDQwRTVCMTAxMDAwNDAwMjA0MEM2Cis6MTBDMzEwMDBFNUIxMDEwMDBEMDAyRDFENDhDMTAxMDAwOTAwMDBGMzI5Cis6MTBDMzIwMDAzODg4MDEwMDBEMDAyMDUwRTdCMTAxMDAwNDAwMkQ0MEM1Cis6MTBDMzMwMDAzRkIwMDEwMDAwMDAwMEY0MzJCMDAxMDAwNDAwMjA0MEQyCis6MTBDMzQwMDBFMUIxMDEwMDIyMDAwMDA1NDhDOTAxMDAwMDAwMkQxNEUwCis6MTBDMzUwMDA0OEMxMDEwMDAyMDAwMDFEOTRGNDAxMDAwMDAwMDA0MEVCCis6MTBDMzYwMDA5MUIwMDEwMDZDODhBMEZDOTA0MDAwMDAwMDAwMDA0MUVBCis6MTBDMzcwMDA5MUMwMDEwMDZBODhBMjQxOTU1MDAwMDAwNDgwMDAwNTI4Cis6MTBDMzgwMDA0NEM5MDEwMDAwMDAwMDQ4RjBCMTAxMDAwMDAwMDAxODlECis6MTBDMzkwMDA0OEMxMDEwMDAyMDAwMDE4OTRGNDAxMDAwMDAwMkQxOEFCCis6MTBDM0EwMDA5MEIwMDEwMDc0ODhBMEZDOTA0MDAwMDAwMDAwMDA0MUEzCis6MTBDM0IwMDA5MUMwMDEwMDcyODhBMjQxOTU1MDAwMDAwMDAwMDA0ODIxCis6MTBDM0MwMDBFMEIxMDEwMDEwMDAyMDQwRTVCMTAxMDAyMjAwMDAwNUFECis6MTBDM0QwMDA0OEM5MDEwMDAwMDAwMDE0NDhDMTAxMDAwNDgwMDAwNUE0Cis6MTBDM0UwMDA0MkM5MDEwMDAwMDAwMEY4ODBCMDAxMDAwMDAwMDBGMDI4Cis6MTBDM0YwMDAxNkMwMDEwMDdDODg0MjMwM0QwNzAwMDAwMDAwMDA5RTBFCis6MTBDNDAwMDA4NUIwMDEwMDAwMDAxQTQxM0RDMzAxMDAwNDAwMjA0MjM0Cis6MTBDNDEwMDBFQ0IxMDEwMDAwMDAwMDFFODJCMDAxMDAwMjAwMkUxREUwCis6MTBDNDIwMDA4MkMwMDEwMDAwMDA2NjE4ODJDMDAxMDAwMDAwMDA0MkM2Cis6MTBDNDMwMDA4MEMwMDEwMDg2ODhBMDQxODA0NDAwMDAwMDAwMDA0MUM3Cis6MTBDNDQwMDA4MUMwMDEwMDEwMDAwMDQwOTJGNDAxMDAwQTAwMkUzMDZCCis6MTBDNDUwMDA4MTg0MDEwMDhBODg5MDQwOTI0MDAwMDAwMDAwMDA0MUUxCis6MTBDNDYwMDA5M0MwMDEwMDAwMDA2NjIwOTNBNDAxMDAwMDAwMDAxRDlECis6MTBDNDcwMDA0OEMxMDEwMDA0MDAyMDE5RThCMTAxMDAwMDAwMDAxRUJECis6MTBDNDgwMDAxNkMwMDEwMDkwODhBMDE5MTY0NDAwMDAwMDAwMDA0MTY5Cis6MTBDNDkwMDAxN0MwMDEwMDBEMDAyRjFFMzJDMDAxMDA5NTg4QTI0MDc4Cis6MTBDNEEwMDAxNTZDMDAwMDk0ODhBMDFDMTY0MDAwMDAwMDAwMDA0MTlDCis6MTBDNEIwMDAxN0MwMDEwMDAwMDA2M0YzMzg5NDAxMDAxMDAwMDAwNTZDCis6MTBDNEMwMDA0OEM5MDEwMDA0MDAyRTFFOThCMDAxMDAwMDAwNjAxQTQ3Cis6MTBDNEQwMDA5OEMwMDEwMDBDMDAyMDQwRTFCMTAxMDBBMzg4MjI0NjcxCis6MTBDNEUwMDAxRjdDMDAwMDAwMDAwMDQ2MUY4MDAxMDAzMDgwMDAxMDBCCis6MTBDNEYwMDA0MkM5MDEwMEExODgyMjQwRTM2RDAwMDAwMDAwMDA0NzBFCis6MTBDNTAwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA5RTg4QTg0MDdBCis6MTBDNTEwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAyMDgwMDAwM0QyCis6MTBDNTIwMDA0Njk5MDEwMDAwMDAwMDVGRTE5MTAxMDAzMDgwMDAxMDk5Cis6MTBDNTMwMDA0NEM5MDEwMDEyMDAwMDFBRjBDOTAxMDAwMDAwMDAxN0YwCis6MTBDNTQwMDBGMEIxMDEwMDEwMDAwMDA1RTBDOTAxMDAzMDAwMDAxMDRBCis6MTBDNTUwMDA4MEM4MDEwMDAwMDAwMDQ0NjFCMTAxMDAyMDAwMDA0MERCCis6MTBDNTYwMDA2MkREMDEwMEE5ODhBODQwODEzMjAwMDBCNzg4MjI1QzAyCis6MTBDNTcwMDAxRjdDMDAwMDAwMDAzQzQ0MjNFMDAxMDAwMDAwMkQxMDVGCis6MTBDNTgwMDA0OEMxMDEwMEIzODgyMjQwRTM2RDAwMDAwMDAwMDA0NjZFCis6MTBDNTkwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBCMDg4QTg0MEQ4Cis6MTBDNUEwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDA1Qzg5Cis6MTBDNUIwMDAxRjgwMDEwMDAwMDAwMDEwNDhCMTAxMDAxMTk2MDA0MUU5Cis6MTBDNUMwMDAyMzQwMDEwMDBFMDAwMDBGMUU4QzAxMDAyMDAwMkYwNUVCCis6MTBDNUQwMDA0OEIxMDEwMDAwMDAwMDBCRTRCMTAxMDAwMDAwMDA1MDcwCis6MTBDNUUwMDAxN0YwMDEwMEJDODg5MEYyMTY0MDAwMDAwMDAwMDA0MUU2Cis6MTBDNUYwMDAxN0MwMDEwMDAwMDA2NjIwMTdBNDAxMDAxMDAwMDAxNEZECis6MTBDNjAwMDAyQUM4MDEwMDAwMDAwMDFEMkFDMDAxMDAwMDAwMDA1MERGCis6MTBDNjEwMDAyQkUwMDEwMDAwMDAwMEYyMkE5NDAxMDAzMDgwMDAxMDlECis6MTBDNjIwMDA0MkM5MDEwMEM3ODgyMjQwRTM2RDAwMDAwMDAwMDA0NEI5Cis6MTBDNjMwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBDNDg4QTg0MDIzCis6MTBDNjQwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDgwMDAxN0FECis6MTBDNjUwMDAxMERDMDEwMEU0ODgyMjQwMTU2QzAwMDBDRjg4QTI0NDYxCis6MTBDNjYwMDAxRjdDMDAwMDAwMDAwMDQ0MUY5MDAxMDBDRTg4MjI5RjI0Cis6MTBDNjcwMDAxMzZDMDAwMDAyMDAwMDg4MUNDQzAxMDA2Qjg0MDA0MDk5Cis6MTBDNjgwMDA4MUIyMDAwMDAwMDAwMDQxM0ZDMzAxMDA2Njk5MDA0MEY0Cis6MTBDNjkwMDA4MTMyMDEwMEQyODhBMjQxODc3QzAwMDAwMDAwMDAxRTg4Cis6MTBDNkEwMDAzRUMwMDEwMEU0ODgyMjQwMTU2QzAwMDBENTg4MjAxRUExCis6MTBDNkIwMDAxNDZDMDAwMDAwMDAwMDBBM0NCMDAxMDBERDk1MDAxRTczCis6MTBDNkMwMDAyNDMwMDEwMERBODgyMjA4MkUzMDAwMDAwMDAwMDA1MkQ5Cis6MTBDNkQwMDAxMUMwMDEwMDAwMDAwMDFBMTBDMDAxMDAzRDg4MDA0MDk4Cis6MTBDNkUwMDAxN0IwMDAwMDZCODQwMDg4MUNCMDAwMDBERDk1MDA0MDhFCis6MTBDNkYwMDA4MTMyMDEwMEQ3ODhBMjA4MkUzMDAwMDA4MDgwMDBBNjc5Cis6MTBDNzAwMDAwNEIwMDEwMDA2MDAwMDQwODc5ODAxMDAwMDgwMDAwMzhCCis6MTBDNzEwMDA0NDk5MDEwMDA0MDAyMjA0RTAzMTAwMDA1NTk5MDAxRkYzCis6MTBDNzIwMDA4QzMwMDEwMDAwMDAwMDQwMEZCMDAxMDAwNThBMDA1QzYxCis6MTBDNzMwMDAxRjkwMDAwMDAwODAwMDAzNDQ5OTAxMDAwNDAwMjIwNEJGCis6MTBDNzQwMDBFMDMxMDAwMDY2OTkwMDQwODEzMjAxMDBFOTg4QTI0MTkxCis6MTBDNzUwMDA4NzdDMDAwMEVBODgwMDFFM0VDMDAwMDAwMDAwMDAxRjI5Cis6MTBDNzYwMDA4Q0IwMDEwMDAwMDAwMDQwMDVCMDAxMDA1NTk5MDA0MDY4Cis6MTBDNzcwMDAwRjMwMDEwMDA1OEEwMDVDMUY5MDAwMDBGNTg4OUMwRkI3Cis6MTBDNzgwMDA4MDMyMDAwMDAwMDAwMDVDMUY4MDAxMDAwMDgwMDAxMDZCCis6MTBDNzkwMDA0MkM5MDEwMEY1ODgyMjQwRTM2RDAwMDAwMDAwMDA0NzE3Cis6MTBDN0EwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBGMjg4QTg0MDg0Cis6MTBDN0IwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDBGQTg4MjIwNzI4Cis6MTBDN0MwMDA4MDMyMDAwMDAwMDAwMDAzNDJCMTAxMDAwMDAwMDAwN0I5Cis6MTBDN0QwMDA0MkMxMDEwMDAwODAwMEExNDY5OTAxMDAwMDAwMDA1RkY1Cis6MTBDN0UwMDBFMTkxMDEwMDA0MDAyRTAzNDhCMTAxMDBGRDg4MjA5NDZFCis6MTBDN0YwMDAxNTZDMDAwMEZFODgwMDk0RTFCMTAwMDAwMDAwMDAwQTAyCis6MTBDODAwMDBFMEIxMDEwMDAxODkyMjQwMzE2QzAwMDAwQzAwMDA0MEMxCis6MTBDODEwMDA0NTk5MDEwMDAwMDA2MDE4Mzg5NjAxMDAwMDAwMkUxMEI0Cis6MTBDODIwMDA0OEIxMDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwODEzCis6MTBDODMwMDBGMEIxMDEwMDAwMDAwMDAzRTBCMTAxMDAwMDAwMDA0NDdECis6MTBDODQwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDAwNjg5QTg0MDNBCis6MTBDODUwMDAyMzMwMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMkQ1MjEzCis6MTBDODYwMDAxMUMwMDEwMDEwMDAwMDAzNDhDOTAxMDAwMDAwMDBGOEQ5Cis6MTBDODcwMDAxOEIwMDEwMDAwMDAwMEY4MDRCMDAxMDAwMDAwMDBGODRBCis6MTBDODgwMDAwRUIwMDEwMDBDMDAwMEE0MENDODAxMDAwMDAwM0M0NEU0Cis6MTBDODkwMDAyM0UwMDEwMDAwMDAwMEE0ODZCMDAxMDAwMDAwMkUxMDdCCis6MTBDOEEwMDA0OEMxMDEwMDE0ODlBMzEyMEU2QzAwMDAxNTg5NjgwN0E1Cis6MTBDOEIwMDAxQUIwMDAwMDAwMDA2ODEyMUFCMDAxMDAwMDAwMDAxMDU5Cis6MTBDOEMwMDA4NkMwMDEwMDAwMDAwMDA4RjBCMTAxMDAwMDAwMDAwQzZCCis6MTBDOEQwMDBGMEIxMDEwMDAwMDAwMDAyRTBCMTAxMDAwMDAwMDA0NkRDCis6MTBDOEUwMDA2MUIxMDEwMDAxMUYwMDQzNjJERDAxMDAxQTg5QTg1Q0VCCis6MTBDOEYwMDAxRjEwMDAwMDRCODkyMjBEMTQ2QzAwMDAyMDg5MjIwREFFCis6MTBDOTAwMDAyNDZDMDAwMDAwMDAwMDBEMTBDMDAxMDAyNDg5MDAwREZGCis6MTBDOTEwMDAyNEQwMDAwMDAwMDAwMDQxMkJDMDAxMDAwMDAwMDAxNUUxCis6MTBDOTIwMDBBMkIxMDEwMDEwMDAwMDIwMTBDODAxMDBGMDA3MDA0MDczCis6MTBDOTMwMDAyNTk4MDEwMDI2ODkyMjQyMjM2QzAwMDAyRDg5MDA0MUEwCis6MTBDOTQwMDAyM0MwMDAwMDAwMDAwMDQ2NjFCMTAxMDA0MDAwMDAxMDVCCis6MTBDOTUwMDA2MkREMDEwMDI3ODlBODVDMUYwMDAwMDAxQjg0MDA4ODlECis6MTBDOTYwMDAxQ0IwMDAwMDAwMDAwMDEwNDhCMTAxMDBENzk0MDA0MzQzCis6MTBDOTcwMDAyMzMwMDEwMDAwMDAwMDQwMjNCMDAxMDAwNDAwMjIwRDFDCis6MTBDOTgwMDAxNDUwMDAwMDRBODlBMjBEMEU1MDAwMDAzOTg5MjI0NjM5Cis6MTBDOTkwMDAxRjdDMDAwMDAwMDAwMDQ2MUY4MDAxMDAzMDgwMDAxMDU2Cis6MTBDOUEwMDA0MkM5MDEwMDM3ODkyMjQwRTM2RDAwMDAwMDAwMDA0N0MyCis6MTBDOUIwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAzNDg5QTg0MDJGCis6MTBDOUMwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAyMDgwMDAwMzFFCis6MTBDOUQwMDA0Njk5MDEwMDAwMDAwMDVGRTE5MTAxMDAwMDAwMkQwNjcyCis6MTBDOUUwMDA0OEIxMDEwMDAwMDAwMEY4MThCMDAxMDAwMDAwMDBGODk0Cis6MTBDOUYwMDAwNEIwMDEwMDNFODkxRkYwMEUzMDAwMDAwRjg5MDA0QzhBCis6MTBDQTAwMDAwREMwMDAwMDAwMDAyRTVGMEY4MDAxMDAwRjg5MjMwNzdBCis6MTBDQTEwMDAxNDZDMDAwMDMwMDAwMDEwNDhDOTAxMDAyNDAwMDA0MEUwCis6MTBDQTIwMDBGMTk5MDEwMDAwMDAwMDAzRjBCMTAxMDAwMDAwMDAwMEQ2Cis6MTBDQTMwMDBGMEIxMDEwMDAwMDAwMDE2RjBCMTAxMDAyNDAwMDAwMDc4Cis6MTBDQTQwMDAwMEM4MDEwMDAwMDAwMDQ3NjFCMTAxMDBBMDAwMDBBNDdGCis6MTBDQTUwMDA2MkREMDEwMDQ3ODlBODQ2MUYxMDAwMDAwRjg5MDAwMzBFCis6MTBDQTYwMDAwQ0IwMDAwMDBGODkwMDBEMThDMDAwMDA1NDg5MjI1QzMyCis6MTBDQTcwMDAxRjdDMDAwMDAwMDAwMDVDMUY4MDAxMDAwMDAwM0M0NDlGCis6MTBDQTgwMDAyM0UwMDEwMDAwMDAyRDEwNDhDMTAxMDA1NDg5MjI0MDFDCis6MTBDQTkwMDBFMzZEMDAwMDAwMDAwMDQ2NjFCMTAxMDA0MDAwMDAxMDlECis6MTBDQUEwMDA2MkREMDEwMDUxODlBODQwODEzMjAwMDAxQjg0MDA4OEFBCis6MTBDQUIwMDAxQ0IwMDAwMDAwMDAwMDEwNDhCMTAxMDBENzk0MDA0MUY0Cis6MTBDQUMwMDAyMzQwMDEwMDAwMDAwMDE3MTBCMDAxMDA1ODg5MDA0MDA5Cis6MTBDQUQwMDAyQkIwMDAwMDAwODAwMDAzNDQ5OTAxMDAwMDAwMDAwNDE2Cis6MTBDQUUwMDBFMEIxMDEwMDVEODkyMjlGMTM2QzAwMDAwMjAwMDA4ODA0Cis6MTBDQUYwMDAxQ0NDMDEwMDZCODQwMDQwODFCMjAwMDA2Njk5MDA0MUFCCis6MTBDQjAwMDAzRjQzMDEwMDAwMDAwMDQwOERCMDAxMDAwMDAwMDA0MEU0Cis6MTBDQjEwMDAwNUIwMDEwMDU1OTkwMDQwMEYzMDAxMDAxQjhBMDA1Q0YwCis6MTBDQjIwMDAxRjkwMDAwMDEwMDAwMDAwMEVGNDAxMDAwMDAwMDAzQTA5Cis6MTBDQjMwMDAwMTg0MDEwMDAzMDAwMDA3MUFGNDAxMDAyMTk2MDAwNzk4Cis6MTBDQjQwMDAxNjMwMDEwMDZDODkyMjQxODE2QzAwMDA2QTg5MjI0MjAyCis6MTBDQjUwMDA4MTZDMDAwMDFCODQwMDg4MUNCMDAwMDA2Qjg5MjI1RjgwCis6MTBDQjYwMDAwRjdDMDAwMDA1OEEwMDQwMEZCMDAwMDA3NDg5QTI1QUIzCis6MTBDQjcwMDAxRjdDMDAwMDlCOTUwMDQwODEzMjAxMDA3NDg5MjIyMEI3Cis6MTBDQjgwMDA4NTZDMDAwMDcxODk5QzBGODAzMjAwMDAxQjg0MDA4ODM2Cis6MTBDQjkwMDAxQ0IwMDAwMDdDOTYwMDVDMUYwMDAxMDA5Qjk4MDA0MkM2Cis6MTBDQkEwMDA2MTMxMDEwMDFCODQwMDg4MUNCMDAwMDBFNjk5MDAwNzc5Cis6MTBDQkIwMDA5NjMwMDEwMDAwMDAyRDA1NDhCMTAxMDAwMDAwMDBGMDkyCis6MTBDQkMwMDAxOEIwMDEwMDAwMDAwMDAwODBCMDAxMDBBRThBQTI1RjMyCis6MTBDQkQwMDA4MTZDMDAwMEE4MDAyRDQzMTk4MDAxMDAzNzAwMkRGMDYyCis6MTBDQkUwMDAyNEIwMDEwMDA0MDAwMEYzOEVGNDAxMDAwRjAwMDBGM0Y0Cis6MTBDQkYwMDA5MDg4MDEwMDgzODkyMjQ4OEU2QzAwMDAzNjAwMDA0MDM2Cis6MTBDQzAwMDA0Mzk5MDEwMDU4MDAzRDQzRTdFMTAxMDA4Mzg5MUZGMDhCCis6MTBDQzEwMDAyNDZDMDAwMDgyODkyMzQxOEY2QzAwMDBBRThBMDA0NzlCCis6MTBDQzIwMDA4MUIwMDAwMEFFOEEwMDQ4ODFCMDAwMDA0MDAwMDA0MEEyCis6MTBDQzMwMDA0Mzk5MDEwMEIwMDAyREYwMTRCMDAxMDA4ODg5MjIwQTQ4Cis6MTBDQzQwMDA5MDQwMDAwMDM5OTkwMDQwOTEzMDAxMDBBRThBQTI0MDI2Cis6MTBDQzUwMDA4MDMyMDAwMEIwMDAyRDQ1ODFCMDAxMDA5NDg5MjJGMDlGCis6MTBDQzYwMDAyQzMwMDAwMEEzMDAyRDMwODNCMDAxMDBBQzAwMkRGMzY4Cis6MTBDQzcwMDA4MkUwMDEwMDhFODlBMzQxMkM2QzAwMDAwMDAwMDAxNkE4Cis6MTBDQzgwMDA4MkIwMDEwMDk4MDAyREYwODJDMDAxMDA4ODAwMkRGMEQ0Cis6MTBDQzkwMDA4MkQwMDEwMDAwMDAwMEYyOThFODAxMDBBRThBMjA0QzJBCis6MTBDQ0EwMDA4MjZDMDAwMDdDMDAyRDQxOThFODAxMDBBRThBMjBGMEUzCis6MTBDQ0IwMDA5ODZDMDAwMDA1OEEyMjBBODAzMjAwMDA0MDAyMDAwQ0I1Cis6MTBDQ0MwMDA3RTg5MDEwMDA1OEFBNjQwODEzMjAwMDBBRThBMDA0OUIzCis6MTBDQ0QwMDA4MUIwMDAwMDIwMDAwMEE2ODBCMDAxMDA5Qzg5MjI0M0EyCis6MTBDQ0UwMDAyMTZGMDAwMDEzODAwMDQwODBEQzAxMDA5RDg5MDA0MDFFCis6MTBDQ0YwMDA4MUIyMDAwMDFBODAwMDQwODBEQzAxMDA5RDg5QTI1RUE0Cis6MTBDRDAwMDAwQjdEMDAwMDAwMDAwMDQwMDhCMTAxMDA5Rjg5OUY4NTU1Cis6MTBDRDEwMDA4MDMyMDAwMEEzODkwMDQwODFCMjAwMDA1Rjg0MjI0MDdECis6MTBDRDIwMDA1NzdEMDAwMDAxMDAwMDQwNTc5OTAxMDBBMzg5NDI0MDRGCis6MTBDRDMwMDA4MTMyMDAwMDAwMDAwMDQ0OTM5MzAxMDA0OTg0MUE1QjkzCis6MTBDRDQwMDA2OTkzMDAwMDdCMDAwMDQwNjE5OTAxMDBBNjg5QThCMUE5Cis6MTBDRDUwMDA4MDMwMDAwMENGODkxRDQwODAzMjAwMDBDMDg5MjI0MDExCis6MTBDRDYwMDBBRjZGMDAwMEMwODkyMjVCODE3QzAwMDAwNDAwMjI1RDVGCis6MTBDRDcwMDA3MzdEMDAwMDdEMDAwMDQwNjE5OTAxMDBBQzg5QThCMTdECis6MTBDRDgwMDA5NDMwMDAwMDAwMDAwMDVGNjFCMTAxMDAwMDAwMDA0QTIzCis6MTBDRDkwMDA2MkIxMDEwMEFGODlBODQwODEzMjAwMDBCMTg5NDM0MEVGCis6MTBDREEwMDA4MTMyMDAwMEJGODkyMjU3NzM3RDAwMDA3NzAwMDA0MDY4Cis6MTBDREIwMDA2MTk5MDEwMEIzODlBOEIxOTQzMDAwMDA3NzAwMDA0MDY4Cis6MTBDREMwMDA2MTk5MDEwMEI1ODlBOEIxOTYzMDAwMDAwMDAwMDA0OEMzCis6MTBDREQwMDA2MUIxMDEwMDAwMDAwMDRBNjJCMTAxMDBCODg5QTg0QUFGCis6MTBDREUwMDA4MDMzMDAwMEJEODkyMjVGOTU3QzAwMDAwMDAwMDA0QjZECis6MTBDREYwMDA2MkIxMDEwMEJCODlBODRCQUMzMzAwMDAwMDAwMUJBNTQ5Cis6MTBDRTAwMDA4MkIzMDEwMEMwODkwMEJFODNDMzAwMDAwMDAwMUI0MDQ0Cis6MTBDRTEwMDA4MUIzMDEwMDQwMTgwMDQwNDk5OTAxMDAwNDAwMDBBNkI4Cis6MTBDRTIwMDA4NkIwMDEwMENEODlBMjQwODYwNDAwMDAxQjg0OUM0MDhFCis6MTBDRTMwMDA4MDMyMDAwMEZGRkYwMDQwODg4ODAxMDBFOTg5MDA1MDJGCis6MTBDRTQwMDA0NzMxMDEwMDM2MDAwMDQ0ODhDQzAxMDBDOTg5NTI0MEI2Cis6MTBDRTUwMDA4MTMyMDAwMEU5ODkwMDQwNDczMTAxMDAwMDAwMDA0MUIzCis6MTBDRTYwMDA4OUIwMDEwMEU5ODkwMDQ4NDczMTAxMDBFOTg5MDAwNURFCis6MTBDRTcwMDA0NzMxMDEwMDFCODQwMDQwODFCMjAwMDAyODAwMDA0MEJGCis6MTBDRTgwMDA0Nzk5MDEwMDFCODQwMDQxRTFDMTAwMDA3ODE4MDA0MDZGCis6MTBDRTkwMDA0OTk5MDEwMEQ2ODkyMjU0ODE3QzAwMDBEMTg5NDI0MDAxCis6MTBDRUEwMDA4MTMyMDAwMDAwODIwMEI0NjlERjAxMDAwMDAwMUE0NEYyCis6MTBDRUIwMDA5MzkzMDEwMDI4MDAwMDQwNDc5OTAxMDBFOTg5MDA0MTRGCis6MTBDRUMwMDA4OTMwMDEwMEU0ODkwRjQwODAzMjAwMDBGRjdGMDA0MDdDCis6MTBDRUQwMDA4ODg4MDEwMEU5ODkwMDUwNDczMTAxMDAzNjAwMDA0NDhDCis6MTBDRUUwMDA4OENDMDEwMERDODk5OTQwODAzMjAwMDAwMDAwMDA0OEI1Cis6MTBDRUYwMDA4OUQwMDEwMERFODk5QjQwODAzMjAwMDAwMDAwMDA0Qzk4Cis6MTBDRjAwMDA4OUQwMDEwMEUwODkxRjQ0ODAzMjAwMDBFOTg5MDA0MDk3Cis6MTBDRjEwMDA0NzMxMDEwMDAwMDAwMDQxODlCMDAxMDBFOTg5MDA0ODYzCis6MTBDRjIwMDA0NzMxMDEwMEU5ODkwMDU4NDczMTAxMDAxQjg0MDA0MDY2Cis6MTBDRjMwMDA4MUIyMDAwMDEwMDAwMDQwODZGNDAxMDA2RjAwMDA0MzQxCis6MTBDRjQwMDA4Njg4MDEwMDFCODQyNjA1NDczMTAwMDBFOTg5MDA0MURECis6MTBDRjUwMDA4OTMwMDEwMDFCODQwMDQwODFCMjAwMDAwMDAwQTA0NDIxCis6MTBDRjYwMDBGMDQxMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwODA0MTVBCis6MTBDRjcwMDBFMUMxMDEwMDA0MDAwMENCODFDODAxMDBFRjg5MjI0MDFCCis6MTBDRjgwMDBGMjdGMDAwMDgxODAwMDZGOTczMzAxMDBGMTg5MjI0MDE5Cis6MTBDRjkwMDA3MzdEMDAwMDlCODAwMDQxOEJCMzAwMDBFQzg5MjI1OTE3Cis6MTBDRkEwMDA3MzdEMDAwMDc5MDAwMDQwNjE5OTAxMDBFQzg5MjhCMThGCis6MTBDRkIwMDA3RTMxMDAwMEYyODkwMDQwODFCMjAwMDAwNDAwMjJDMEVFCis6MTBDRkMwMDA5NTMwMDAwMDAwMDAwMEQ2OTdCMDAxMDBGQTg5MjI1RDdDCis6MTBDRkQwMDA3MzdEMDAwMDdEMDAwMDQwNjE5OTAxMDBGODg5QThCMUNGCis6MTBDRkUwMDA4MDMwMDAwMDAwMDAwMDVFN0Y4MzAxMDAwMDAwMDBCRjcxCis6MTBDRkYwMDBDNUIxMDEwMDA0MDAwMDQwODE5ODAxMDAyNTAxMDA0MEY2Cis6MTBEMDAwMDA4MTMyMDEwMEZEODlBMjQxODE1MDAwMDBGRjg5NDM1RjA4Cis6MTBEMDEwMDA3RjEzMDAwMDI2MDEwMEJGQzUzMTAxMDAwMDAwMDA1RjQyCis6MTBEMDIwMDA3RjgzMDEwMDAwMDAwMDVFN0Y5MzAxMDA4Qjk4MDBCRkFBCis6MTBEMDMwMDBDNTMxMDEwMDFCODQwMDQwODFCMjAwMDAwQzhBOUMwRkE2Cis6MTBEMDQwMDA4MDMyMDAwMDAwODAwMDEwNDJDOTAxMDAwQzhBMjI0MDlBCis6MTBEMDUwMDBFMzZEMDAwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMEQ4Cis6MTBEMDYwMDA2MkREMDEwMDA5OEFBODQwODEzMjAwMDAxQjg0MDA4ODJCCis6MTBEMDcwMDAxQ0IwMDAwMDc3OTUyMjAyODAzMjAwMDAwRDhBNDI0MEU5Cis6MTBEMDgwMDA4MTMyMDAwMDAwMDAwMDQ0OTM5MzAxMDA3Nzk1MUEwMjVBCis6MTBEMDkwMDA2ODk3MDAwMDE3OEE5QzBGODAzMjAwMDAwMDgwMDAxMDAzCis6MTBEMEEwMDA0MkM5MDEwMDE3OEEyMjQwRTM2RDAwMDAwMDAwMDA0NURDCis6MTBEMEIwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAxNDhBQTg0MDQ3Cis6MTBEMEMwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDA4MTk1MjIwMjgwCis6MTBEMEQwMDA4MDMyMDAwMDE4OEE0MjQwODEzMjAwMDAwMDAwMDA0NDgzCis6MTBEMEUwMDA5MzkzMDEwMDgxOTUxQTAyNjg5NzAwMDAyMjhBOUMwRjkxCis6MTBEMEYwMDA4MDMyMDAwMDAwODAwMDEwNDJDOTAxMDAyMjhBMjI0MEQ0Cis6MTBEMTAwMDBFMzZEMDAwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDI3Cis6MTBEMTEwMDA2MkREMDEwMDFGOEFBODQwODEzMjAwMDAxQjg0MDA4ODY0Cis6MTBEMTIwMDAxQ0IwMDAwMDZGODQyMjAyODAzMjAwMDAyMzhBNDI0MDNCCis6MTBEMTMwMDA4MTMyMDAwMDAwMDAwMDQ0OTM5MzAxMDAwMDAwMUEwMkI1Cis6MTBEMTQwMDA2ODk3MDEwMDZGODQwMDQwMDVCMDAwMDAwMDgwMDBBNkQxCis6MTBEMTUwMDA1NkIxMDEwMDU2OTUyRjQwMDVCMDAxMDA3MzhBQTI0MEQ4Cis6MTBEMTYwMDBFNzZEMDAwMEI4OTQyOTQxRTdCMTAxMDAwMDAwMDA1NEM4Cis6MTBEMTcwMDBFRjkzMDEwMDAwMDAwMEYyMEVCMDAxMDAyOTAwMDA0MDEyCis6MTBEMTgwMDAwRDk4MDEwMDA5MDAwMDA3MTJFNDAxMDAwMDAwMDBBNzRCCis6MTBEMTkwMDAxM0MwMDEwMDAzMDAwMDA3MUFGNDAxMDAwNzAwMDAwNzk0Cis6MTBEMUEwMDAxNjg4MDEwMEZGRkYwMDEwMzREODAxMDAwMDAwMDAwM0MyCis6MTBEMUIwMDAzNDk0MDEwMDAwMDAwMDQwMjNCMDAxMDAyMDE4MDA0MDFBCis6MTBEMUMwMDAxMTk4MDEwMDAwQjUwMDBENDJDOTAxMDA1NzhBMjIwQkQ5Cis6MTBEMUQwMDBFNjdEMDAwMDM4OEE0NDQwODEzMjAwMDBGRkZGMDAwN0VFCis6MTBEMUUwMDA4NDg5MDEwMDNGOEEwNUMyMjQzMDAwMDA2Nzk4MDA0MDBFCis6MTBEMUYwMDA4MTMyMDEwMDAwMDAyRDA1NDhCMTAxMDA3NDhBMUNGMDQ1Cis6MTBEMjAwMDAxODMwMDEwMDU3OEEwMDQwODFCMjAwMDAwMDAwMUM0MDI1Cis6MTBEMjEwMDA4MUIyMDEwMDRFOEFBMDQ4MjM2QzAwMDAwMDAwMDA1MDNCCis6MTBEMjIwMDAzNUQwMDEwMDAwODAwMDFBNDJDOTAxMDA0ODhBMjI0MDFFCis6MTBEMjMwMDBFMzZEMDAwMDAwMDAwMDQyNjFCMTAxMDA0MDAwMDAxQUVGCis6MTBEMjQwMDA2MkREMDEwMDQ1OEFBODQwODEzMjAwMDAxQjg0MDA4ODBECis6MTBEMjUwMDAxQ0IwMDAwMDIwOTgwMDQwNDM5OTAxMDA3NDhBMDBGODM3Cis6MTBEMjYwMDAxODMwMDEwMDQ5OEFBMjQxMjM1MDAwMDBGRkZGMDAxMDNFCis6MTBEMjcwMDAzNEQ4MDEwMDAwMDAwMDAzMzQ5NDAxMDAyMDE4MDA0MDVECis6MTBEMjgwMDAxMTk4MDEwMDAwMDAyRTFBNDhCMTAxMDAwMDAwMDA0NDZFCis6MTBEMjkwMDBGMUIxMDEwMDAwMDAwMDA4RjBCMTAxMDAwMDAwMDA0MkZGCis6MTBEMkEwMDA2MUIxMDEwMDIwMDAwMDFBNjJERDAxMDA1MjhBQTgwOTY0Cis6MTBEMkIwMDBFMDMxMDAwMDAwMDAwMDQxMjNDMDAxMDAwMDAwMDA1MEU4Cis6MTBEMkMwMDAzNUMwMDEwMDAwMDAwMDQ0MTFDMDAxMDA2MzhBMjI0MTAyCis6MTBEMkQwMDAwRDUwMDAwMDAwMDAwMDQxMEZDMDAxMDA1RjhBQTBBQUFECis6MTBEMkUwMDAwRjZDMDAwMDAwMDAwMDQxMEZCMDAxMDAwOTAwMDAwN0IyCis6MTBEMkYwMDAxMkU0MDEwMDAwMDAwMEE3MTNDMDAxMDAwMDAwMDA0MDdDCis6MTBEMzAwMDAxQkIwMDEwMDM2OEEwMDQxMTdCMDAwMDAwMDAyMDAwOTdFCis6MTBEMzEwMDAxMkM4MDEwMDM2OEE4MzQxMTc0MDAwMDAwMDAwMDA0MDE3Cis6MTBEMzIwMDAxN0IwMDEwMDM2OEEwMDQxMUJDMDAwMDA2RThBMjM0MEZFCis6MTBEMzMwMDAyMzZDMDAwMDAwMDAwMDUwMzVEMDAxMDAwMDgwMDAxQTZFCis6MTBEMzQwMDA0MkM5MDEwMDZCOEEyMjQwRTM2RDAwMDAwMDAwMDA0MkU4Cis6MTBEMzUwMDA2MUIxMDEwMDQwMDAwMDFBNjJERDAxMDA2ODhBQTg0MDQ2Cis6MTBEMzYwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAyMDk4MDA0MDFGCis6MTBEMzcwMDA0Mzk5MDEwMDc0OEEwMEY4MTgzMDAxMDA2QzhBQTI0MUI4Cis6MTBEMzgwMDAyMzUwMDAwMDAwMDAwMDQxMEZDMDAxMDA3MThBQTBBQUQ0Cis6MTBEMzkwMDAwRjZDMDAwMDAwMDAwMDQxMEZCMDAxMDBCODk0MjAwNzlFCis6MTBEM0EwMDBFNEIxMDEwMDU2OTUyMDQwRTdCMTAxMDAwNThBMDA0MDM0Cis6MTBEM0IwMDAwRkIwMDAwMEZGRkYwMDBDODBEODAxMDBDMDAyMDAwQzdECis6MTBEM0MwMDA3RTg5MDEwMDg2OEEyNjU0NjEzMTAwMDA3QzhBODcwQ0EwCis6MTBEM0QwMDA4MDMyMDAwMDBGMDAwMDQwNjI5OTAxMDA3QzhBMjg0MEUyCis6MTBEM0UwMDA4MTMyMDAwMDdDOEFBMjU0Nzc3RDAwMDA3ODhBMDA0MDU4Cis6MTBEM0YwMDA4MUIyMDAwMDgxOEEyMjQ2MTk3QzAwMDAwRDAwMDA0MEE1Cis6MTBENDAwMDA2Mjk5MDEwMDAwMDBBODQwODFCMjAwMDAwMDAwQTI1NDBGCis6MTBENDEwMDA3NzdEMDEwMDdEOEEwMDQwODFCMjAwMDA4NjhBMjI0OTIyCis6MTBENDIwMDAxOTdDMDAwMDBFMDAwMDQwNjI5OTAxMDAwMDAwQTg0MDM1Cis6MTBENDMwMDA4MUIyMDAwMDAwMDBBMjU0Nzc3RDAxMDA4MThBMDA0MDgzCis6MTBENDQwMDA4MUIyMDAwMDEwMDAwMDQwNjI5OTAxMDAwMDAwQTg0MDc1Cis6MTBENDUwMDA4MUIyMDAwMDAwMDBBMjU0Nzc3RDAxMDA4NjhBMDA0MDVFCis6MTBENDYwMDA4MUIyMDAwMDMwOTQyRjU1RjE5MzAxMDAwMDQwMDBBNkQ2Cis6MTBENDcwMDA1NkIxMDEwMDZGODRBMjQxRTU1MTAwMDA2NDAwMDA0MEY0Cis6MTBENDgwMDBFNTk5MDEwMDhFOEE0MjQwODEzMjAwMDA5MThBQTI5MzgwCis6MTBENDkwMDA1NzZGMDAwMDAwMDAwMDQxNTdDMzAxMDAwMDAwMUFBQkE1Cis6MTBENEEwMDAyN0IzMDEwMDZGODQyMjUwRkQ3RjAwMDA2Rjg0MjI1MTVBCis6MTBENEIwMDBGRDdGMDAwMDZGODRBMjQxMUQ1MzAwMDA1MDQ2MDA0MEQ0Cis6MTBENEMwMDAxRDlCMDEwMDM0ODIwMDQwODEzMjAxMDAwRTAwMDA0OEEzCis6MTBENEQwMDBCMkNCMDEwMEZDODEwMDQwNDkzMTAxMDA5RDhBMjI0MDBECis6MTBENEUwMDBCNTZGMDAwMDBFMDAwMDQ4QjJDQjAxMDBGRjgxMDA0MTgzCis6MTBENEYwMDBCNTUzMDEwMDZGODQwMDQwODFCMjAwMDAwMDAwMDA1MTZDCis6MTBENTAwMDBGRDgzMDEwMDQwMTYwMDQwNDU5OTAxMDAzNTgyMDA0MDJFCis6MTBENTEwMDA0OTMxMDEwMDFFMDAwMDQ4QjJDQjAxMDBGQzgxMDA0MEVGCis6MTBENTIwMDA4MTMyMDEwMDAwMDAwMERBOTFDMDAxMDAwNDAwMDA0OENGCis6MTBENTMwMDBCMkNCMDEwMEZGODEwMDQwQjUzMzAxMDA2MDE2MjA0MEVFCis6MTBENTQwMDBFNUIxMDEwMERCODIwMDQwQjUzMzAxMDAwODAwMDA0ODZFCis6MTBENTUwMDBCMkNCMDEwMEZGRkYwMDRBQjQ4QjAxMDBGRjgxMDA0MDA1Cis6MTBENTYwMDA4MTMyMDEwMDBBMDAwMDQ4QjJDQjAxMDAxMDAwMDA0QURECis6MTBENTcwMDBCNEY3MDEwMEZGODEwMDQwODEzMjAxMDA2Rjg0MDA0MDU4Cis6MTBENTgwMDA4MUIyMDAwMDA1MDAwMDQwNDM5OTAxMDAwMDAwMDBGMzUzCis6MTBENTkwMDAwOEIwMDEwMDA0MDAyMDQwRTZCMTAxMDAwMzAwMDA0MDkzCis6MTBENUEwMDA5NkU0MDEwMDAwMDAwMDA0OTZDMDAxMDBCNDhBMDA0QjFDCis6MTBENUIwMDAxMEM5MDAwMEQ3OEQwMDQxMDlCMDAwMDAwNDAwMDAyMDEwCis6MTBENUMwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDk1Cis6MTBENUQwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDg1Cis6MTBENUUwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDc1Cis6MTBENUYwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwQjhFMDA0MUFGCis6MTBENjAwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMERBCis6MTBENjEwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDQ0Cis6MTBENjIwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDM0Cis6MTBENjMwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDI0Cis6MTBENjQwMDA4RkIwMDAwMDNEOEUwMDQ1MDlCMDAwMDAzRDhFMDA0NUMyCis6MTBENjUwMDAwOUIwMDAwMDNEOEUwMDQ1MDlCMDAwMDAzRDhFMDA0NTM4Cis6MTBENjYwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDdBCis6MTBENjcwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEU0Cis6MTBENjgwMDA4RkIwMDAwMDdDOEUwMDQzMDlCMDAwMDBBNThFMDA0M0RGCis6MTBENjkwMDAwOUIwMDAwMEE5OEUwMDQ0MDlCMDAwMDAxMTkwMDA0NUI3Cis6MTBENkEwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDNBCis6MTBENkIwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEE0Cis6MTBENkMwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDBCNThFMDA0MzMyCis6MTBENkQwMDAwOUIwMDAwMEI0OEUwMDQzMDlCMDAwMDBENThEMDA0NUFDCis6MTBENkUwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEZBCis6MTBENkYwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDY0Cis6MTBENzAwMDA4RkIwMDAwMDc1OEYwMDQyMDlCMDAwMDA3NThGMDA0Mzk0Cis6MTBENzEwMDAwOUIwMDAwMDc1OEYwMDQ0MDlCMDAwMDBENThEMDA0NUE4Cis6MTBENzIwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEI5Cis6MTBENzMwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDIzCis6MTBENzQwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDBBMThGMDA0M0M0Cis6MTBENzUwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDBENThEMDA0NTA2Cis6MTBENzYwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDc5Cis6MTBENzcwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEUzCis6MTBENzgwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDBCRjhGMDA0MzY2Cis6MTBENzkwMDAwOUIwMDAwMEJGOEYwMDQ0MDlCMDAwMDBENThEMDA0NURFCis6MTBEN0EwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDM5Cis6MTBEN0IwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEEzCis6MTBEN0MwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDBCRjhGMDA0MjI3Cis6MTBEN0QwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDBENThEMDA0NTg2Cis6MTBEN0UwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEY5Cis6MTBEN0YwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDYzCis6MTBEODAwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDBFNzhGMDA0NEJDCis6MTBEODEwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDBENThEMDA0NTQ1Cis6MTBEODIwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEI4Cis6MTBEODMwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDIyCis6MTBEODQwMDA4RkIwMDAwMEQ1OEQwMDQyMDlCMDAwMDBGODhGMDA0NTcwCis6MTBEODUwMDAwOUIwMDAwMEY4OEYwMDQ1MDlCMDAwMDBENThEMDA0NUUzCis6MTBEODYwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDc4Cis6MTBEODcwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEUyCis6MTBEODgwMDA4RkIwMDAwMEZBOEYwMDQyMDlCMDAwMDBGQThGMDA0MzA5Cis6MTBEODkwMDAwOUIwMDAwMEZBOEYwMDQ0MDlCMDAwMDBGQThGMDA0NTdCCis6MTBEOEEwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDM4Cis6MTBEOEIwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEEyCis6MTBEOEMwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDkyCis6MTBEOEQwMDA4RkIwMDAwMDAyOTAwMDQ0MDlCMDAwMDBENThEMDA0NUQzCis6MTBEOEUwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEY4Cis6MTBEOEYwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDYyCis6MTBEOTAwMDA4RkIwMDAwMDEzOTAwMDQyMDlCMDAwMDAwMzkwMDA0MzY0Cis6MTBEOTEwMDAwOUIwMDAwMDEzOTAwMDQ0MDlCMDAwMDBENThEMDA0NTA3Cis6MTBEOTIwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEI3Cis6MTBEOTMwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDIxCis6MTBEOTQwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAxNDkwMDA0MzRFCis6MTBEOTUwMDAwOUIwMDAwMDBBOTAwMDQ0MDlCMDAwMDBENThEMDA0NUQwCis6MTBEOTYwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDc3Cis6MTBEOTcwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDBENThEMDA0MTYyCis6MTBEOTgwMDAwOUIwMDAwMDczOEYwMDQyMDlCMDAwMDA3MzhGMDA0MzlDCis6MTBEOTkwMDAwOUIwMDAwMDczOEYwMDQ0MDlCMDAwMDBENThEMDA0NTI4Cis6MTBEOUEwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDM3Cis6MTBEOUIwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDBENThEMDA0MTIyCis6MTBEOUMwMDAwOUIwMDAwMDE1OTAwMDQyMDlCMDAwMDAxNTkwMDA0MzE2Cis6MTBEOUQwMDAwOUIwMDAwMDE1OTAwMDQ0MDlCMDAwMDBENThEMDA0NTQ1Cis6MTBEOUUwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEY3Cis6MTBEOUYwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDYxCis6MTBEQTAwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDUwCis6MTBEQTEwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAxQzkwMDA0NTczCis6MTBEQTIwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEI2Cis6MTBEQTMwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAxRTkwMDA0MjU0Cis6MTBEQTQwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDk2Cis6MTBEQTUwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDAwCis6MTBEQTYwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEYwCis6MTBEQTcwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEUwCis6MTBEQTgwMDA4RkIwMDAwMDJBOTAwMDQzMDlCMDAwMDA5MzkwMDA0MzNCCis6MTBEQTkwMDAwOUIwMDAwMEE5OEUwMDQ0MDlCMDAwMDAxMTkwMDA0NUIzCis6MTBEQUEwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDM2Cis6MTBEQUIwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEEwCis6MTBEQUMwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDA5QjkwMDA0MzQ2Cis6MTBEQUQwMDAwOUIwMDAwMEE5OEUwMDQ0MDlCMDAwMDAxMTkwMDA0NTczCis6MTBEQUUwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEY2Cis6MTBEQUYwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDYwCis6MTBEQjAwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDBBQzkwMDA0M0Y0Cis6MTBEQjEwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDBENThEMDA0NTQyCis6MTBEQjIwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEI1Cis6MTBEQjMwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDFGCis6MTBEQjQwMDA4RkIwMDAwMDc5OEUwMDQzMDlCMDAwMDA5NzkwMDA0MzI5Cis6MTBEQjUwMDAwOUIwMDAwMEE5OEUwMDQ0MDlCMDAwMDAxMTkwMDA0NUYyCis6MTBEQjYwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDc1Cis6MTBEQjcwMDA4RkIwMDAwMDA3MDAyRDA1NDhCMTAxMDAwMDAwMDBGMzQwCis6MTBEQjgwMDAwOEIwMDEwMDA2MDAyMDQ3RTZCMTAxMDAwNDAwMDA0NzhDCis6MTBEQjkwMDA5NkU0MDEwMDAwMDAwMDQ3OTZEMDAxMDAwMDAwMDA0NzE1Cis6MTBEQkEwMDA5NkQwMDEwMDAwMDAwMDA0OTZDMDAxMDA3NDhCMDA0QjY5Cis6MTBEQkIwMDAxMEM5MDAwMEM0OTAwMDQ5MDlCMDAwMDAwNDAwMDAyMDEyCis6MTBEQkMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEEzCis6MTBEQkQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDkzCis6MTBEQkUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDgzCis6MTBEQkYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDczCis6MTBEQzAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDYyCis6MTBEQzEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDUyCis6MTBEQzIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBGRDkwMDA0Mjk3Cis6MTBEQzMwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEFFCis6MTBEQzQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDIyCis6MTBEQzUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDEyCis6MTBEQzYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDAyCis6MTBEQzcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEYyCis6MTBEQzgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEUyCis6MTBEQzkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwMzkxMDA0NjFDCis6MTBEQ0EwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDNFCis6MTBEQ0IwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEIyCis6MTBEQ0MwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEEyCis6MTBEQ0QwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDkyCis6MTBEQ0UwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDgyCis6MTBEQ0YwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDcyCis6MTBERDAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDYxCis6MTBERDEwMDA4NUIwMDAwMDExOTEwMDQyMDlCMDAwMDAwNDAwMDAyMDBECis6MTBERDIwMDA4NUIwMDAwMDMzOTEwMDQyMDlCMDAwMDAwNDAwMDAyMERCCis6MTBERDMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDMxCis6MTBERDQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDIxCis6MTBERDUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyRTkxMDA0QTJDCis6MTBERDYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDdECis6MTBERDcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEYxCis6MTBERDgwMDA4NUIwMDAwMDM2OTEwMDQzMDlCMDAwMDAwNDAwMDAyMDc3Cis6MTBERDkwMDA4NUIwMDAwMDhGOTEwMDQ0MDlCMDAwMDAwNDAwMDAyMDBECis6MTBEREEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEMxCis6MTBEREIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEIxCis6MTBEREMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA4RTkxMDA0QjVCCis6MTBEREQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDBECis6MTBEREUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNjkxMDA0MUNECis6MTBEREYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNjkxMDA0MzM3Cis6MTBERTAwMDAwOUIwMDAwMDA2OTEwMDQ0MDlCMDAwMDAwNjkxMDA0NUU5Cis6MTBERTEwMDAwOUIwMDAwMDA2OTEwMDQ2MDlCMDAwMDAwNjkxMDA0N0Q1Cis6MTBERTIwMDAwOUIwMDAwMDA2OTEwMDQ4MDlCMDAwMDAwNjkxMDA0OUMxCis6MTBERTMwMDAwOUIwMDAwMDA2OTEwMDRBMDlCMDAwMDAwNjkxMDA0QkFECis6MTBERTQwMDAwOUIwMDAwMDA2OTEwMDRDMDlCMDAwMDAwNjkxMDA0RDk5Cis6MTBERTUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDhDCis6MTBERTYwMDA4NUIwMDAwMEVFOTEwMDQyMDlCMDAwMDAwNDAwMDAyMERGCis6MTBERTcwMDA4NUIwMDAwMEVFOTEwMDQ0MDlCMDAwMDAwNDAwMDAyMENECis6MTBERTgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEUwCis6MTBERTkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEQwCis6MTBERUEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFRTkxMDA0QjFBCis6MTBERUIwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDJDCis6MTBERUMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEEwCis6MTBERUQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNjkyMDA0NUQ3Cis6MTBERUUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEZDCis6MTBERUYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDcwCis6MTBERjAwMDA4NUIwMDAwMDFEOTIwMDQ3MDlCMDAwMDAwNDAwMDAyMDA5Cis6MTBERjEwMDA4NUIwMDAwMEZBOTEwMDQ1MDlCMDAwMDAwNDAwMDAyMDFGCis6MTBERjIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA3Qzk0MDA0NjBECis6MTBERjMwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEFCCis6MTBERjQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDFGCis6MTBERjUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAzMzkxMDA0NjI5Cis6MTBERjYwMDAwOUIwMDAwMDExOTEwMDQ2MDlCMDAwMDAyQzkxMDA0NzUzCis6MTBERjcwMDAwOUIwMDAwMDJDOTEwMDQ4MDlCMDAwMDAwNDAwMDAyMDA2Cis6MTBERjgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMERGCis6MTBERjkwMDA4NUIwMDAwMDJFOTEwMDRBMDlCMDAwMDAwNDAwMDAyMDY2Cis6MTBERkEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEJGCis6MTBERkIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEFGCis6MTBERkMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA4RjkxMDA0NTVFCis6MTBERkQwMDAwOUIwMDAwMDM2OTEwMDQzMDlCMDAwMDAyQzkxMDA0N0MxCis6MTBERkUwMDAwOUIwMDAwMDJDOTEwMDQ4MDlCMDAwMDAwNDAwMDAyMDk2Cis6MTBERkYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDZGCis6MTBFMDAwMDA4NUIwMDAwMDhFOTEwMDRDMDlCMDAwMDAwNDAwMDAyMDkzCis6MTBFMDEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDRFCis6MTBFMDIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDNFCis6MTBFMDMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyMzkyMDA0NDU5Cis6MTBFMDQwMDAwOUIwMDAwMDIzOTIwMDQyMDlCMDAwMDBDMDhEMDA0N0QzCis6MTBFMDUwMDAwOUIwMDAwMEMwOEQwMDQ4MDlCMDAwMDAwNDAwMDAyMDk1Cis6MTBFMDYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEZFCis6MTBFMDcwMDA4NUIwMDAwMDIzOTIwMDRCMDlCMDAwMDAwNDAwMDAyMDhFCis6MTBFMDgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNjkxMDA0MTJBCis6MTBFMDkwMDAwOUIwMDAwMDQ2OTIwMDQ3MDlCMDAwMDAwNDAwMDAyMENCCis6MTBFMEEwMDA4NUIwMDAwMDJFOTIwMDQ3MDlCMDAwMDAwNDAwMDAyMDU3Cis6MTBFMEIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEFFCis6MTBFMEMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDlFCis6MTBFMEQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyRTkyMDA0N0FCCis6MTBFMEUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEZBCis6MTBFMEYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDZFCis6MTBFMTAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDVECis6MTBFMTEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyRTkyMDA0NzZBCis6MTBFMTIwMDAwOUIwMDAwMDQ2OTIwMDQ3MDlCMDAwMDAyQzkxMDA0NzVBCis6MTBFMTMwMDAwOUIwMDAwMDJDOTEwMDQ4MDlCMDAwMDAwNDAwMDAyMDQ0Cis6MTBFMTQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDFECis6MTBFMTUwMDA4NUIwMDAwMDJFOTIwMDQ3MDlCMDAwMDAwNDAwMDAyMEE2Cis6MTBFMTYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEZECis6MTBFMTcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEVECis6MTBFMTgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMERECis6MTBFMTkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA1NTkyMDA0N0MzCis6MTBFMUEwMDAwOUIwMDAwMDU1OTIwMDQ4MDlCMDAwMDAwNDAwMDAyMEFBCis6MTBFMUIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEFECis6MTBFMUMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDlECis6MTBFMUQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBCODkyMDA0MDI3Cis6MTBFMUUwMDAwOUIwMDAwMEQ2OTIwMDQ3MDlCMDAwMDBDQTkyMDA0ODZBCis6MTBFMUYwMDAwOUIwMDAwMDI2OTIwMDQ3MDlCMDAwMDAyNjkyMDA0N0FGCis6MTBFMjAwMDAwOUIwMDAwMEQ2OTIwMDQ3MDlCMDAwMDBERDkyMDA0NzM3Cis6MTBFMjEwMDAwOUIwMDAwMEREOTIwMDQ4MDlCMDAwMDAwNDAwMDAyMEIxCis6MTBFMjIwMDA4NUIwMDAwMENBOTIwMDQ4MDlCMDAwMDAyNjkyMDA0NzVECis6MTBFMjMwMDAwOUIwMDAwMDI2OTIwMDQ3MDlCMDAwMDBDQTkyMDA0OEM5Cis6MTBFMjQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDk4Cis6MTBFMjUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFRTkxMDA0MzZFCis6MTBFMjYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFRTkxMDA0NUQ4Cis6MTBFMjcwMDAwOUIwMDAwMEVFOTEwMDQ2MDlCMDAwMDAyQzkxMDA0NzYzCis6MTBFMjgwMDAwOUIwMDAwMDJDOTEwMDQ4MDlCMDAwMDAwNDAwMDAyMEYzCis6MTBFMjkwMDA4NUIwMDAwMEVFOTEwMDRBMDlCMDAwMDAwNDAwMDAyMEEzCis6MTBFMkEwMDA4NUIwMDAwMEVFOTEwMDRDMDlCMDAwMDAwNDAwMDAyMDkxCis6MTBFMkIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEFDCis6MTBFMkMwMDA4NUIwMDAwMDQ1OTIwMDQ3MDlCMDAwMDAzOTkyMDA0ODJGCis6MTBFMkQwMDAwOUIwMDAwMDJEOTIwMDQ3MDlCMDAwMDAyRDkyMDA0N0MwCis6MTBFMkUwMDAwOUIwMDAwMDQ1OTIwMDQ3MDlCMDAwMDBDMDhEMDA0NzBBCis6MTBFMkYwMDAwOUIwMDAwMEMwOEQwMDQ4MDlCMDAwMDAwNDAwMDAyMEYzCis6MTBFMzAwMDA4NUIwMDAwMDM5OTIwMDQ4MDlCMDAwMDAyRDkyMDA0NzA2Cis6MTBFMzEwMDAwOUIwMDAwMDJEOTIwMDQ3MDlCMDAwMDAzOTkyMDA0ODcyCis6MTBFMzIwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEI3Cis6MTBFMzMwMDA4NUIwMDAwMERGOTIwMDQyMDlCMDAwMDAwNDAwMDAyMDE4Cis6MTBFMzQwMDA4NUIwMDAwMERGOTIwMDQ0MDlCMDAwMDAwNDAwMDAyMDA2Cis6MTBFMzUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDBCCis6MTBFMzYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEZCCis6MTBFMzcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBERjkyMDA0QjUzCis6MTBFMzgwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU3Cis6MTBFMzkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMENCCis6MTBFM0EwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBERjkyMDA0MzJCCis6MTBFM0IwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBERjkyMDA0NTk1Cis6MTBFM0MwMDAwOUIwMDAwMERGOTIwMDQ2MDlCMDAwMDBERjkyMDA0NzZDCis6MTBFM0QwMDAwOUIwMDAwMERGOTIwMDQ4MDlCMDAwMDAwNDAwMDAyMEVFCis6MTBFM0UwMDA4NUIwMDAwMERGOTIwMDRBMDlCMDAwMDAwNDAwMDAyMDYwCis6MTBFM0YwMDA4NUIwMDAwMERGOTIwMDRDMDlCMDAwMDBERjkyMDA0Q0I1Cis6MTBFNDAwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEQ2Cis6MTBFNDEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBGQTkyMDA0NjlDCis6MTBFNDIwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEI2Cis6MTBFNDMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDJBCis6MTBFNDQwMDA4NUIwMDAwMDFEOTIwMDQ3MDlCMDAwMDAwNDAwMDAyMEM0Cis6MTBFNDUwMDA4NUIwMDAwMEZBOTIwMDQ2MDlCMDAwMDAwNDAwMDAyMEQ4Cis6MTBFNDYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEZBCis6MTBFNDcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEVBCis6MTBFNDgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNjk0MDA0NjFFCis6MTBFNDkwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQ2Cis6MTBFNEEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEJBCis6MTBFNEIwMDA4NUIwMDAwMDFEOTIwMDQ3MDlCMDAwMDAwNDAwMDAyMDU0Cis6MTBFNEMwMDA4NUIwMDAwMDA2OTQwMDQ2MDlCMDAwMDAwNDAwMDAyMDVBCis6MTBFNEQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNjk0MDA0NkNFCis6MTBFNEUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEY2Cis6MTBFNEYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDZBCis6MTBFNTAwMDA4NUIwMDAwMDJCOTQwMDQyMDlCMDAwMDAwNDAwMDAyMEY4Cis6MTBFNTEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQ5Cis6MTBFNTIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDM5Cis6MTBFNTMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyQTk0MDA0QTQ1Cis6MTBFNTQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDk1Cis6MTBFNTUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDA5Cis6MTBFNTYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEY5Cis6MTBFNTcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyQjk0MDA0NjA4Cis6MTBFNTgwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyQzkxMDA0Nzc1Cis6MTBFNTkwMDAwOUIwMDAwMDJDOTEwMDQ4MDlCMDAwMDAwNDAwMDAyMEUwCis6MTBFNUEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEI5Cis6MTBFNUIwMDA4NUIwMDAwMDJBOTQwMDRBMDlCMDAwMDAwNDAwMDAyMDQxCis6MTBFNUMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDk5Cis6MTBFNUQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDg5Cis6MTBFNUUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDc5Cis6MTBFNUYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDY5Cis6MTBFNjAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFQTkyMDA0MUJGCis6MTBFNjEwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEM0Cis6MTBFNjIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDM4Cis6MTBFNjMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDI4Cis6MTBFNjQwMDA4NUIwMDAwMEY3OTIwMDQyMDlCMDAwMDAwNDAwMDAyMEVECis6MTBFNjUwMDA4NUIwMDAwMEY3OTIwMDQ0MDlCMDAwMDAwNDAwMDAyMERCCis6MTBFNjYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEY4Cis6MTBFNjcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEU4Cis6MTBFNjgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBGNzkyMDA0QjI4Cis6MTBFNjkwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQ0Cis6MTBFNkEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEI4Cis6MTBFNkIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBGNzkyMDA0MzAwCis6MTBFNkMwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBGNzkyMDA0NTZBCis6MTBFNkQwMDAwOUIwMDAwMEY3OTIwMDQ2MDlCMDAwMDBGNzkyMDA0NzI5Cis6MTBFNkUwMDAwOUIwMDAwMEY3OTIwMDQ4MDlCMDAwMDAwNDAwMDAyMEMzCis6MTBFNkYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDY4Cis6MTBFNzAwMDA4NUIwMDAwMEY3OTIwMDRDMDlCMDAwMDAwNDAwMDAyMDIyCis6MTBFNzEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQ3Cis6MTBFNzIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNjkyMDA0Qzc3Cis6MTBFNzMwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEEzCis6MTBFNzQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDE3Cis6MTBFNzUwMDA4NUIwMDAwMDFEOTIwMDQ3MDlCMDAwMDAwNDAwMDAyMEIxCis6MTBFNzYwMDA4NUIwMDAwMEZBOTEwMDRDMDlCMDAwMDAwNDAwMDAyMEMwCis6MTBFNzcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBDRDk0MDA0NjY0Cis6MTBFNzgwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDUzCis6MTBFNzkwMDA4NUIwMDAwMDcxOTQwMDQyMDlCMDAwMDAwNDAwMDAyMDIwCis6MTBFN0EwMDA4NUIwMDAwMDcxOTQwMDQ0MDlCMDAwMDAwNDAwMDAyMDBFCis6MTBFN0IwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEE3Cis6MTBFN0MwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDk3Cis6MTBFN0QwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA3MTk0MDA0QjVCCis6MTBFN0UwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEYzCis6MTBFN0YwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDY3Cis6MTBFODAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU2Cis6MTBFODEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA3MTk0MDA0NTIwCis6MTBFODIwMDAwOUIwMDAwMDcxOTQwMDQ2MDlCMDAwMDAyQzkxMDA0NzI3Cis6MTBFODMwMDAwOUIwMDAwMDJDOTEwMDQ4MDlCMDAwMDAwNDAwMDAyMDNECis6MTBFODQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDE2Cis6MTBFODUwMDA4NUIwMDAwMDcxOTQwMDRDMDlCMDAwMDAwNDAwMDAyMDU1Cis6MTBFODYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEY2Cis6MTBFODcwMDA4NUIwMDAwMEZBOTEwMDQyMDlCMDAwMDA3Qzk0MDA0Njg3Cis6MTBFODgwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDUyCis6MTBFODkwMDA4NUIwMDAwMEZBOTEwMDQ2MDlCMDAwMDAwNDAwMDAyMDk1Cis6MTBFOEEwMDA4NUIwMDAwMDFEOTIwMDQ3MDlCMDAwMDAwNDAwMDAyMDYwCis6MTBFOEIwMDA4NUIwMDAwMDdDOTQwMDQ2MDlCMDAwMDAwNDAwMDAyMEYwCis6MTBFOEMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA3Qzk0MDA0NjY0Cis6MTBFOEQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDAyCis6MTBFOEUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA4MDk0MDA0MzQzCis6MTBFOEYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEUyCis6MTBFOTAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU1Cis6MTBFOTEwMDA4NUIwMDAwMDFEOTIwMDQ3MDlCMDAwMDAwNDAwMDAyMEVGCis6MTBFOTIwMDA4NUIwMDAwMDgwOTQwMDQzMDlCMDAwMDAwNDAwMDAyMDdFCis6MTBFOTMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA4MDk0MDA0REU4Cis6MTBFOTQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDkxCis6MTBFOTUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDA1Cis6MTBFOTYwMDA4NUIwMDAwMDkyOTQwMDQzMDlCMDAwMDAwNDAwMDAyMDJDCis6MTBFOTcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEU1Cis6MTBFOTgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEQ1Cis6MTBFOTkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA2Rjk0MDA0QTlDCis6MTBFOUEwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDMxCis6MTBFOUIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEE1Cis6MTBFOUMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDk1Cis6MTBFOUQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA5Mjk0MDA0MzQwCis6MTBFOUUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyQzkxMDA0NzExCis6MTBFOUYwMDAwOUIwMDAwMDJDOTEwMDQ4MDlCMDAwMDAwNDAwMDAyMDdDCis6MTBFQTAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU0Cis6MTBFQTEwMDA4NUIwMDAwMDZGOTQwMDRBMDlCMDAwMDAwNDAwMDAyMDk3Cis6MTBFQTIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDM0Cis6MTBFQTMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBBNDk0MDA0M0NECis6MTBFQTQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDkwCis6MTBFQTUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDA0Cis6MTBFQTYwMDA4NUIwMDAwMDFEOTIwMDQ3MDlCMDAwMDAwNDAwMDAyMDlFCis6MTBFQTcwMDA4NUIwMDAwMEE0OTQwMDQzMDlCMDAwMDAwNDAwMDAyMDA5Cis6MTBFQTgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBBNDk0MDA0RDczCis6MTBFQTkwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQwCis6MTBFQUEwMDA4NUIwMDAwMDExOTEwMDQyMDlCMDAwMDAwNDAwMDAyMDcwCis6MTBFQUIwMDA4NUIwMDAwMDMzOTEwMDQyMDlCMDAwMDAwNDAwMDAyMDNFCis6MTBFQUMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDk0Cis6MTBFQUQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDg0Cis6MTBFQUUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBDMzk0MDA0MkZGCis6MTBFQUYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEUwCis6MTBFQjAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDUzCis6MTBFQjEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQzCis6MTBFQjIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAzMzkxMDA0NjRECis6MTBFQjMwMDAwOUIwMDAwMDExOTEwMDQ2MDlCMDAwMDAyQzkxMDA0Nzc3Cis6MTBFQjQwMDAwOUIwMDAwMDJDOTEwMDQ4MDlCMDAwMDAwNDAwMDAyMDJBCis6MTBFQjUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDAzCis6MTBFQjYwMDA4NUIwMDAwMEMzOTQwMDQ2MDlCMDAwMDAwNDAwMDAyMEY2Cis6MTBFQjcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEUzCis6MTBFQjgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBDNTk0MDA0QTU0Cis6MTBFQjkwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDNGCis6MTBFQkEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEIzCis6MTBFQkIwMDA4NUIwMDAwMDFEOTIwMDQ3MDlCMDAwMDAwNDAwMDAyMDRECis6MTBFQkMwMDA4NUIwMDAwMEM1OTQwMDRBMDlCMDAwMDAwNDAwMDAyMDkwCis6MTBFQkQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA3RDk0MDA0NjUwCis6MTBFQkUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEVGCis6MTBFQkYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA3RDk0MDA0NjMwCis6MTBFQzAwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMENFCis6MTBFQzEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQyCis6MTBFQzIwMDA4NUIwMDAwMDFEOTIwMDQ3MDlCMDAwMDAwNDAwMDAyMERDCis6MTBFQzMwMDA4NUIwMDAwMDdEOTQwMDQ2MDlCMDAwMDAwNDAwMDAyMDZCCis6MTBFQzQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA3RDk0MDA0NkRGCis6MTBFQzUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDdFCis6MTBFQzYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEYyCis6MTBFQzcwMDA4NUIwMDAwMENCOTQwMDQyMDlCMDAwMDAwNDAwMDAyMEUxCis6MTBFQzgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEQyCis6MTBFQzkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEMyCis6MTBFQ0EwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA2Rjk0MDA0QTg5Cis6MTBFQ0IwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDFFCis6MTBFQ0MwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDkyCis6MTBFQ0QwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDgyCis6MTBFQ0UwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBDQjk0MDA0NkYxCis6MTBFQ0YwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyQzkxMDA0N0ZFCis6MTBFRDAwMDAwOUIwMDAwMDJDOTEwMDQ4MDlCMDAwMDAwNDAwMDAyMDY4Cis6MTBFRDEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQxCis6MTBFRDIwMDA4NUIwMDAwMDZGOTQwMDRBMDlCMDAwMDAwNDAwMDAyMDg0Cis6MTBFRDMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDIxCis6MTBFRDQwMDA4NUIwMDAwMDM2OTEwMDREMDlCMDAwMDAwNDAwMDAyMDlECis6MTBFRDUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDAxCis6MTBFRDYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEYxCis6MTBFRDcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEUxCis6MTBFRDgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEQxCis6MTBFRDkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEMxCis6MTBFREEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEIxCis6MTBFREIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEExCis6MTBFREMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDkxCis6MTBFREQwMDA4NUIwMDAwMDM2OTEwMDREMDlCMDAwMDAyQzkxMDA0NzJECis6MTBFREUwMDAwOUIwMDAwMDJDOTEwMDQ4MDlCMDAwMDAwNDAwMDAyMDg4Cis6MTBFREYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDYxCis6MTBFRTAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDUwCis6MTBFRTEwMDA4NUIwMDAwMDA3MDAyRTRCMTk5MDAxMDAxMDhBMDAwNEY1Cis6MTBFRTIwMDBFNkIxMDAwMEMwOEQyMjQyMTk3QzAwMDBDNTk3MDAzQTZGCis6MTBFRTMwMDA4MTMwMDEwMEMwOEQwMDQwODFCMjAwMDBDMDhEMjI0MkFGCis6MTBFRTQwMDAxOTdDMDAwMEZGMUYwMDBGMUU4QzAxMDAzNzk3MDA0MDQ3Cis6MTBFRTUwMDA4MTMyMDEwMEQwOEQ5QzBGODAzMjAwMDAwMDAwMDA1Q0U4Cis6MTBFRTYwMDAxRjgwMDEwMDAwODAwMDEwNDJDOTAxMDBEMDhEMjI0MEE3Cis6MTBFRTcwMDBFMzZEMDAwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDlBCis6MTBFRTgwMDA2MkREMDEwMENEOERBODQwODEzMjAwMDAxQjg0MDA4ODI2Cis6MTBFRTkwMDAxQ0IwMDAwMDE5ODYyMjAyODAzMjAwMDBEMThENDI0MDUxCis6MTBFRUEwMDA4MTMyMDAwMDAwMDAwMDQ0OTM5MzAxMDAwMDAwMUEwMjI4Cis6MTBFRUIwMDA2ODk3MDEwMDE5ODYwMDQwMDVCMDAwMDAwNTAwMkU0QjQwCis6MTBFRUMwMDAxOTkwMDEwMDEwOEEwMDA0RTZCMTAwMDAwMDAwMDA0MDIzCis6MTBFRUQwMDA4N0IwMDEwMDAwMDAwMDQwOERCMDAxMDAwMDgwMDAwM0Y5Cis6MTBFRUUwMDA0MkM5MDEwMDQwMDAwMEExNDRDOTAxMDAwMDAwMDBGMDM3Cis6MTBFRUYwMDBFMEIxMDEwMDU1OTkwMDA2MDc0MDAxMDAwMDAwMDAwNjNFCis6MTBFRjAwMDAwN0QwMDEwMEQ0MDAyRTVDMUY5MDAxMDAwMDAwMDAwNzE0Cis6MTBFRjEwMDBGMEIxMDEwMDBDODAwMDAzNDJDOTAxMDAwMDAwMDBGMEM0Cis6MTBFRjIwMDBGMEIxMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDBGRUNECis6MTBFRjMwMDA5NkIwMDEwMDAwMDAwMEZFOTZDMDAxMDAwMDAwMDBGMDQ1Cis6MTBFRjQwMDBGMEIxMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDBGRUFECis6MTBFRjUwMDA5NkMwMDEwMDAwMDAwMEZFOTZDMDAxMDAwMDAwMDBGMDE1Cis6MTBFRjYwMDBGMEIxMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDBGQTkxCis6MTBFRjcwMDA5NkMwMDEwMDAwMDAwMEZFOTZDMDAxMDAwMDMwMDA0QjZBCis6MTBFRjgwMDA5NDg4MDEwMDAwMDAwMDQ2OTVGMDAxMDAwMDAwMDA0QTRFCis6MTBFRjkwMDA5NkMwMDEwMDVFMDEyRTM0OTc4NDAxMDAwMjAwMDA0QkYwCis6MTBFRkEwMDBFNEU1MDEwMDY0MDEyMDQwRTFCMTAxMDAwOTAwMDAwNzJGCis6MTBFRkIwMDA4NkU0MDEwMDAwMDAyRUE3ODdDMDAxMDAxMDAwMDAxMEE5Cis6MTBFRkMwMDA0OEM5MDEwMDEwMDAwMDQwRjE5OTAxMDA1ODAxMDA0M0I4Cis6MTBFRkQwMDBGMEM5MDEwMDU4MDEwMDA1RTBDOTAxMDAwMDAwMDA0NDJCCis6MTBFRkUwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDBGQThEQTg0MDFCCis6MTBFRkYwMDA4MTMyMDAwMDAwMDAwMDA1NDhCMTAxMDAxQTAwMDA0MDA1Cis6MTBGMDAwMDA5Nzk4MDEwMDA4MDAyRTQwOTVCMDAxMDAwMjhFMjA0QjE5Cis6MTBGMDEwMDA5NDZDMDAwMDAwMDAwMDQwRjFCMTAxMDBGRjhEMDA0MTQwCis6MTBGMDIwMDA5NUMwMDAwMDEwODAwMDEwNDJDOTAxMDAwOThFMjI0MEU2Cis6MTBGMDMwMDBFMzZEMDAwMDAwMDAwMDQ0NjFCMTAxMDA0MDAwMDAxMEQ5Cis6MTBGMDQwMDA2MkREMDEwMDA1OEVBODQwODEzMjAwMDAxQjg0MDA4ODJCCis6MTBGMDUwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDBDNTk3MDA0MDQ5Cis6MTBGMDYwMDA4MTMwMDEwMEQ1OEQwMDQwODFCMjAwMDAwQzgwMDAwMzhBCis6MTBGMDcwMDA0MkM5MDEwMDAwMDAwMEY4ODZCMDAxMDAwMDAwMDBGODVECis6MTBGMDgwMDA4OEIwMDEwMDBFOEU0MjQwODEzMjAwMDAxMThFQTI0Q0U5Cis6MTBGMDkwMDBGRDdGMDAwMDEyOEUwMDRDRkQ5MzAwMDAxMzhFMjBGMEM3Cis6MTBGMEEwMDA1NjZGMDAwMDAwMDAwMEYwNTZCMzAxMDAwMDAwMUE0MDQ3Cis6MTBGMEIwMDA4MUIyMDEwMDAwODAwMDEwNDRDOTAxMDA2NDAwMDA0MERBCis6MTBGMEMwMDBGMTk5MDEwMDcwMDAwMDA1RjBDOTAxMDAwMDAwMDA0MzQzCis6MTBGMEQwMDBGMEIxMDEwMDAwMDAwMDQ3NjFCMTAxMDAyMDAwMDAxMDA0Cis6MTBGMEUwMDA2MkREMDEwMDE5OEVBODQ0RTAzMTAwMDAxMDAwMDAxMDFDCis6MTBGMEYwMDA4Q0M4MDEwMDAwODAwMDQ2NDRDOTAxMDA0MDAwMDA0MDY3Cis6MTBGMTAwMDBGMTk5MDEwMDY4MDEwMDA1RjBDOTAxMDA2NDAwMDA0M0E1Cis6MTBGMTEwMDBGMEM5MDEwMDAwMDAwMDQ3NjFCMTAxMDAwMDAwMDA0Njk1Cis6MTBGMTIwMDA2MkIxMDEwMDIxOEVBODQ0RTAzMTAwMDAxQjg0MDA4OEY4Cis6MTBGMTMwMDAxQ0IwMDAwMDA5MDAwMDA3ODZFNDAxMDAzODAwMkVBNzdCCis6MTBGMTQwMDA4N0MwMDEwMDhCMDAyRDA1NDhCMTAxMDAyOThFMjI0M0E0Cis6MTBGMTUwMDBFNzdEMDAwMDAwMDAwMDQ0NDVDMTAxMDAyQzhFMjI0NEUwCis6MTBGMTYwMDBFNzdEMDAwMDAwMDAwMDRDNDVDMTAxMDAwMDAwMDA0QTlFCis6MTBGMTcwMDAxOTkwMDEwMDY4MDEyMEEyRTRCMTAxMDA4ODAwMDA0MDVDCis6MTBGMTgwMDA0Mzk5MDEwMDMwOEUyMzBCRTU2RDAwMDAwMDAwMDA0MTIzCis6MTBGMTkwMDAxOTkwMDEwMDAwODAwMDEwNDRDOTAxMDA1MDAwMDA0MDk3Cis6MTBGMUEwMDBGMTk5MDEwMDU4MDEwMDQzRjBDOTAxMDA1ODAxMDAwNTIwCis6MTBGMUIwMDBFMEM5MDEwMDAwMDAwMDQ0NjFCMTAxMDAwMDAwMDAxMDNFCis6MTBGMUMwMDA2MkIxMDEwMDM1OEVBODQwODEzMjAwMDAxQjg0MDA4OEE2Cis6MTBGMUQwMDAxQ0IwMDAwMDVDMDAyRTA1NDhCMTAxMDAwMDgwMDAwMzU3Cis6MTBGMUUwMDA0MkM5MDEwMDAwMDA2MEYwOTZCMDAxMDBDNTk3MDA0MURGCis6MTBGMUYwMDA4MTMwMDEwMEQ1OEQwMDQwODFCMjAwMDA0MDhFQTI0OUNGCis6MTBGMjAwMDAxOTdDMDAwMDg2MDAwMDQwNDc5OTAxMDA0NDhFMDA0MEIwCis6MTBGMjEwMDBFNUIxMDAwMDg2MDAyRjQ5MTk4MDAxMDA0NDhFQTJGMjVBCis6MTBGMjIwMDA4MDMyMDAwMDhCMDAwMDQwNDc5OTAxMDAwMDAwMDA0MjNFCis6MTBGMjMwMDBFNzkxMDEwMDQ3OEVBMjQ2MTk3QzAwMDBBMDAwMDA0MDIzCis6MTBGMjQwMDA0Nzk5MDEwMDRCOEUwMDQwRTVCMTAwMDBBMDAwMkY0NjE5Cis6MTBGMjUwMDAxOTgwMDEwMDRCOEVBMkYyODAzMjAwMDA4QjAwMDA0MDJBCis6MTBGMjYwMDA0Nzk5MDEwMDAwMDAwMDQxRTc5MTAxMDBBODAwMDA0MDFCCis6MTBGMjcwMDA0Mzk5MDEwMDM0MDAyREYwMjRCMDAxMDAwMDAwMDBGQjkwCis6MTBGMjgwMDAwQ0IwMDEwMDAwMDAwMEZCMTBCMDAxMDAwMDAwMDBGQjBBCis6MTBGMjkwMDAxMkIwMDEwMDBGMDAwMEYzMTY4ODAxMDAwNDAwMDBGMzEzCis6MTBGMkEwMDAxNEY0MDEwMDc2OEUyNjQwODEzMjAwMDA1RThFMjIwQTIwCis6MTBGMkIwMDAxNjZDMDAwMDU4MDAzRDQzMTNFMDAxMDAwMDAwMDBGODA4Cis6MTBGMkMwMDA4MkIwMDEwMDA0MDAyMkYwODQzMDAwMDBGRDk4MDA0MDZDCis6MTBGMkQwMDA4MTMyMDEwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTgyCis6MTBGMkUwMDA0OEIxMDEwMDAwMDAwMDQxMTNDMDAxMDA1RDhFQTA0MzQxCis6MTBGMkYwMDAxMzZDMDAwMDAwMDAwMDQwMTNCMDAxMDA1MzhFMDA0MTY5Cis6MTBGMzAwMDAxNUQwMDAwMDc2OEUyMjBBODAzMjAwMDA1ODAwM0Q0MzVFCis6MTBGMzEwMDAxM0UwMDEwMDAwMDAwMEY4ODJCMDAxMDAwNDAwMjJGMEI4Cis6MTBGMzIwMDA4NDMwMDAwMEZEOTgwMDQwODEzMjAxMDA0MDAwMjA0MDAwCis6MTBGMzMwMDBFMUIxMDEwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTQyCis6MTBGMzQwMDA0OEIxMDEwMDc2OEUyMjQxMTU1MDAwMDAwMDAwMDA0MUI2Cis6MTBGMzUwMDAxMUMwMDEwMDZBOEVBMDQzMTE2QzAwMDAwMDAwMDA0MDQzCis6MTBGMzYwMDAxMUIwMDEwMDU4MDAzRDQzMTFFMDAxMDAwMDAwMDBGODE5Cis6MTBGMzcwMDAzNkIwMDEwMDA0MDAyMkYwMDAzMDAwMDAwMDAwMDA1MDEwCis6MTBGMzgwMDA4M0IwMDEwMDA0OTgwMDQ3NjEzMTAxMDAxQjg0MDA4OEFDCis6MTBGMzkwMDAxQ0IwMDAwMDc0OTUwMDA1NDgzMTAxMDAwMDAwMDA0NUQ0Cis6MTBGM0EwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA3MjhFQTg0MEQyCis6MTBGM0IwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDA2NjhFMDAwNUFFCis6MTBGM0MwMDA0OEIxMDAwMDM3MDAyMDQwRTdCMTAxMDAzNjk4MDA1MUY1Cis6MTBGM0QwMDA4MTMwMDEwMEQ1OEQwMDQwODFCMjAwMDAzNDAwMkU0MTAzCis6MTBGM0UwMDBGNUIxMDEwMDAwMTEwMDQwRTU5OTAxMDA3RThFMDA0ODUyCis6MTBGM0YwMDAxOTkwMDAwMDM0MDAyRTQxRjVCMTAxMDAwMDExMDA0MEM5Cis6MTBGNDAwMDBFNTk5MDEwMDAwODAwMDAzNDJDOTAxMDAwMDAwMDBGOEY2Cis6MTBGNDEwMDA5NEIwMDEwMDgzOEUyMjQ1MjM3QzAwMDBCMDAwMkZGMEMxCis6MTBGNDIwMDA4Q0IwMDEwMDAwMDA2MEYwOENDMDAxMDA5MDAwMDA0MDMyCis6MTBGNDMwMDA0Mzk5MDEwMDM1MDAyREYwOENCMDAxMDA1ODAwM0U0Mzg3Cis6MTBGNDQwMDBFN0UxMDEwMDg4OEUyMjQ4MTk3QzAwMDAwMDAwMDA0MTlECis6MTBGNDUwMDA4REMwMDEwMDAwMDA2ODBBOENDMDAxMDAzODAwMkE0QUYzCis6MTBGNDYwMDBFMEIxMDEwMDI4MDAwMDAwRTBDOTAxMDAzQzAwMjAxQkMxCis6MTBGNDcwMDBFMEIxMDEwMDEwODAwMDAzNDJDOTAxMDAwMDAwMDBGODYzCis6MTBGNDgwMDAzOEIwMDEwMDAwMDAwMEY4MjZCMDAxMDAwNDAwMjJGOEE2Cis6MTBGNDkwMDAwMjMwMDAwMDk2OEUyMzAxMTQ2QzAwMDAwMDAwMDBGODdBCis6MTBGNEEwMDA4MEIwMDEwMDAwMDAwMEY4ODJCMDAxMDA0QzAwMjBGMEE0Cis6MTBGNEIwMDBFNEIxMDEwMDQ0MDAyMDQwRTBCMTAxMDA0ODAwMjA0MUQ3Cis6MTBGNEMwMDBFMEIxMDEwMEE4MDAyRDEwMzJCMDAxMDAzOTk5MDBGMDIwCis6MTBGNEQwMDAyNDMwMDEwMDlGOEVBMjQ0ODE2QzAwMDA5RDhFMjI0MTQ5Cis6MTBGNEUwMDAxOTdDMDAwMEEwOTYwMDQwM0IzMDAxMDBDMzhFQTIwOEFBCis6MTBGNEYwMDAzQzMwMDAwMDlGOEUwMDQwODFCMjAwMDBERDk1MDA0MDRFCis6MTBGNTAwMDA4MTMyMDEwMEMzOEVBMjA4M0MzMDAwMDA1MDAwMjAxQzU0Cis6MTBGNTEwMDBFMEIxMDEwMDU0MDAyMDEzRTBCMTAxMDA0RTAwMjAwMUQxCis6MTBGNTIwMDBFNEIxMDEwMDQwMDAyMDBBRTBCMTAxMDAzNjk4MDA1RjFDCis6MTBGNTMwMDA4MTMwMDEwMEQ1OEQwMDQwODFCMjAwMDAzNzAwMDA0MENECis6MTBGNTQwMDA0Nzk5MDEwMDdGOTYwMEYzOTQzMDAxMDA3RThFMjI0QTk1Cis6MTBGNTUwMDA4MDMyMDAwMEFCOEUwMDQwODFCMjAwMDAzNzAwMDA0MEQ2Cis6MTBGNTYwMDA0Nzk5MDEwMDdGOTYwMEYzOTQzMDAxMDA1ODAwM0U0MzE0Cis6MTBGNTcwMDA5N0UwMDEwMDAwMDAwMDFCRjBCMTAxMDAxRjAwNjAwMEQ3Cis6MTBGNTgwMDAwMDhDMDEwMEQ1OEQ4NTExODAzMjAwMDAwNDgwMDAwM0JECis6MTBGNTkwMDA0MkM5MDEwMEIwMDAyRkYwOENCMDAxMDAwMDAwNjBGMDAzCis6MTBGNUEwMDA4Q0MwMDEwMDM2OTgwMDVGODEzMDAxMDBENThEMDA0MDhECis6MTBGNUIwMDA4MUIyMDAwMEI1OEUwMDQ5MTk4MDAwMDBCQThFMjI0MTQ4Cis6MTBGNUMwMDAxOTdDMDAwMEEwOTYwMDQwM0IzMDAxMDBCRThFQTIwOENFCis6MTBGNUQwMDAzQzMwMDAwMDM2OTgwMDVGODEzMDAxMDBENThEMDA0MDNFCis6MTBGNUUwMDA4MUIyMDAwMEREOTUwMDQwODEzMjAxMDBCRThFQTIwODhDCis6MTBGNUYwMDAzQzMwMDAwMDM2OTgwMDVGODEzMDAxMDBENThEMDA0MDFFCis6MTBGNjAwMDA4MUIyMDAwMDUwMDAyRDEwMzJCMDAxMDA1NDAwMkRGMEU2Cis6MTBGNjEwMDAzOEIwMDEwMDRFMDAyREYwMjZCMDAxMDA0MDAwMkRGMjYwCis6MTBGNjIwMDAwMkIwMDEwMDAwMDAwMEYwMTRCMDAxMDAzMDAwMDAxMDMyCis6MTBGNjMwMDA4Q0M4MDEwMDAwODAwMDQ2NDRDOTAxMDA2ODAxMkQ0NEM3Cis6MTBGNjQwMDA2MUIxMDEwMDEwMDA2OEYyODBDODAxMDAwMDAwMDAwOEVDCis6MTBGNjUwMDBGMEIxMDEwMDU4MDEwMDA1RTBDOTAxMDAwMDAwMDAwQkY1Cis6MTBGNjYwMDAzN0IwMDEwMDAwMDAwMDQwMzZEMDAxMDA1QzAxMkU0MEEwCis6MTBGNjcwMDAxMEMwMDEwMDAwMDAwMDA2ODBDMDAxMDAwMDAwMDA1MjIwCis6MTBGNjgwMDA4MUQwMDEwMEQxOEUyMDk0ODE2QzAwMDBDQjk3MDA5NDMyCis6MTBGNjkwMDBFNTMxMDEwMEQyOEUwMDQwODFCMjAwMDBDQjk3MDA0MERFCis6MTBGNkEwMDBFNDMxMDEwMDIwMDAwMDQ2NjJERDAxMDBEMjhFQTg0MDU2Cis6MTBGNkIwMDAyMzMwMDAwMDBFMDAwMDBGMUU4QzAxMDBFMjhFODI0MUZDCis6MTBGNkMwMDAyMzQwMDAwMDIwODAwMDEwNDJDOTAxMDBEQzhFMjI0MDRGCis6MTBGNkQwMDBFMzZEMDAwMDAwMDAwMDQ2NjFCMTAxMDA0MDAwMDAxMDMxCis6MTBGNkUwMDA2MkREMDEwMEQ5OEVBODQwODEzMjAwMDAxQjg0MDA4OEIxCis6MTBGNkYwMDAxQ0IwMDAwMDAwMDAwMDEwNDhCMTAxMDAxMTk2MDA0MzRBCis6MTBGNzAwMDAyMzMwMDEwMDAwMDAwMDA1NDhCMTAxMDAwMDAwMDAxMDk2Cis6MTBGNzEwMDAzMkIwMDEwMDAwMDAwMDQxMjNCMDAxMDAwRTAwMDAwRkQ0Cis6MTBGNzIwMDAxRThDMDEwMDAwODAwMDE5NDRDOTAxMDBFQThFMjI0MUFDCis6MTBGNzMwMDAxOTdDMDAwMEU2OEVBMzAxMEM2QzAwMDBFNzhFMDAwNjI5Cis6MTBGNzQwMDAwNEIwMDAwMDAwMDAwMDAxMDRCMDAxMDBFOThFMjAwMkI2Cis6MTBGNzUwMDAzNjZDMDAwMDAwMDAwMDFCMDRCMDAxMDBFRDhFMDAwMkJBCis6MTBGNzYwMDBGMEIxMDAwMEVDOEVBMzAxMEM2QzAwMDBFRDhFNjgwNjc5Cis6MTBGNzcwMDAwNEIwMDAwMDAwMDA2ODAxMDRCMDAxMDBFRjhFODAwOEIyCis6MTBGNzgwMDBGMDMxMDAwMDAwMDAwMDExMUU5MDAxMDAwMDAwMDAxQzdDCis6MTBGNzkwMDBGMEIxMDEwMDAwMDAwMDQ2NjFCMTAxMDAwMTFGMDAxOTM1Cis6MTBGN0EwMDA2MkREMDEwMEYxOEVBODEzRTAzMTAwMDAyODhGMjIwMkYzCis6MTBGN0IwMDAxNDUwMDAwMDQ0MDAyRDAyMENEMDAxMDAxODhGQTIwMjRBCis6MTBGN0MwMDAwMjUwMDAwMEZGOEUyMjVDMUY3QzAwMDAyMDgwMDAwMzlFCis6MTBGN0QwMDA0MkM5MDEwMEZFOEUyMjQwRTM2RDAwMDAwMDAwMDA0Nzk4Cis6MTBGN0UwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBGQThFQTg0MDA2Cis6MTBGN0YwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNTVFCis6MTBGODAwMDA0OEIxMDEwMDQ0MDAyRDVDMUY4MDAxMDA0ODAwMkRGMDJDCis6MTBGODEwMDAzOEIwMDEwMDRDMDAyREYwMjZCMDAxMDAzODAwMkZGMjY2Cis6MTBGODIwMDAwMkIwMDEwMDE5OEYyMjAxMTQ2QzAwMDAwQzhGMjI0NkQ3Cis6MTBGODMwMDAxRjdDMDAwMDAwMDAwMDQ2MUY4MDAxMDAyMDAwMkQwM0Y3Cis6MTBGODQwMDA0OEIxMDEwMDBCOEYyMjQwRTM2RDAwMDAwMDAwMDA0NDJFCis6MTBGODUwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAwODhGQTg0MDg2Cis6MTBGODYwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAzODAwMkYwNTg2Cis6MTBGODcwMDA0OEIxMDEwMDAwMDAwMEY4OTRCMDAxMDAzODAwMkRGMEZDCis6MTBGODgwMDA5NkIwMDEwMDAwMDAwMDRDRTFDMTAxMDAyMDAwMDAwMzFGCis6MTBGODkwMDA0OEM5MDEwMDAwMDAyMjRBRjFCMTAxMDA0NDAwMDAwNUZFCis6MTBGOEEwMDBGMEM5MDEwMDAwMDAwMDRBRjBCMTAxMDAwMDAwMDA0QjY3Cis6MTBGOEIwMDBFMEIxMDEwMDAwMDAwMDQ3NjFCMTAxMDBBMDAwMDBBNDE4Cis6MTBGOEMwMDA2MkREMDEwMDE1OEZBODVDMUYxMDAwMDAxOThGMDAwNTc0Cis6MTBGOEQwMDA0OEIxMDAwMDAwMDAwMDAyMzhDMDAxMDAyMzhGMjIwNjVBCis6MTBGOEUwMDA4MDMyMDAwMDAwMDAwMDUwMzNDMDAxMDAyMThGQTIwMkNFCis6MTBGOEYwMDAzNjZDMDAwMDA0MDA4RjBENDIzMTAwMDAxMDAwMDBGODRCCis6MTBGOTAwMDAxMEM4MDEwMDAwMDAwMDVDMTE4MDAxMDBGMDA3MDA0MEY5Cis6MTBGOTEwMDAzNzk4MDEwMEQ1OEUwMEExMUFCMDAwMDAwMDAwMDAwMjQ3Cis6MTBGOTIwMDAxMEMwMDEwMEQ1OEUwMDAyMzZEMDAwMDA1MDAwMjAxQzBGCis6MTBGOTMwMDBFMEIxMDEwMDU0MDAyMDEzRTBCMTAxMDA0RTAwMjAwMUFECis6MTBGOTQwMDBFNEIxMDEwMDQwMDAyMDBBRTBCMTAxMDAyRDhGMDA1RjBBCis6MTBGOTUwMDAwMUIwMDAwMDM3MDAyRDQ2MDFCMDAxMDAwNDAwMDBGM0EzCis6MTBGOTYwMDA4MEY0MDEwMDJDOEZBMDQzODE2QzAwMDAwMDAwMDA1NTQyCis6MTBGOTcwMDAwMUIwMDEwMDQwMDAyMDQwRTFCMTAxMDAwMDgwMDAxOTA5Cis6MTBGOTgwMDA0MkM5MDEwMDMzOEYyMjQwRTM2RDAwMDAwMDAwMDA0NkIxCis6MTBGOTkwMDA2MUIxMDEwMDQwMDAwMDE5NjJERDAxMDAzMDhGQTg0MDE0Cis6MTBGOUEwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAxMTk2MDAxMEZBCis6MTBGOUIwMDA0ODMxMDEwMDMwODAwMDEwNDJDOTAxMDAzQThGMjI0MEQ2Cis6MTBGOUMwMDBFMzZEMDAwMDAwMDAwMDQ0NjFCMTAxMDA0MDAwMDAxMDQwCis6MTBGOUQwMDA2MkREMDEwMDM3OEZBODQwODEzMjAwMDAxQjg0MDA4ODVGCis6MTBGOUUwMDAxQ0IwMDAwMDYwMDEyRjA1NDhCMTAxMDAwMDAwMDAwQkIxCis6MTBGOUYwMDBFNEIxMDEwMDAwMDAwMDUwMTdGMDAxMDAzRjhGOTBGMkM5Cis6MTBGQTAwMDAxNjQwMDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwNjYyMDAxCis6MTBGQTEwMDAxN0E0MDEwMDMyMDAwMEE2MkFDMDAxMDAwMDAwMDBGMjc1Cis6MTBGQTIwMDAyQTk0MDEwMDQ4OEYyMjQ5MUY3QzAwMDAwMDAwMDA0OUYxCis6MTBGQTMwMDAxRjgwMDEwMDAwMDAwMDQwMDVCMDAxMDAwMEYwMDAwQzM0Cis6MTBGQTQwMDAxODhDMDEwMDBCOTgwMDRDOTUzMDAxMDA1ODhGMDAwMDc1Cis6MTBGQTUwMDA5MkIwMDAwMDRGOEYyMjQwQUY2RjAwMDAwMEMwMDAxRTI4Cis6MTBGQTYwMDA5NERDMDEwMDAwMDAwMDE1OTZCMDAxMDA4ODk4MDA0MDY5Cis6MTBGQTcwMDAwNTMwMDEwMDRFOEZBMjQwOTc2QzAwMDA2MThGMDA0NzU3Cis6MTBGQTgwMDAxOTgwMDAwMDU4OEYwMDAwOTJCMDAwMDA0RjhGNDM0ODRCCis6MTBGQTkwMDA2MTMxMDAwMDAwRDAwMDFFNjJERDAxMDA1NDhGMjg0MDVCCis6MTBGQUEwMDAwNTMwMDAwMDUwOEYyMjQ4Nzc3RDAwMDA1NzhGMDA0MEJFCis6MTBGQUIwMDA4MUIyMDAwMDAwMDAwMDE1NjJCMTAxMDA2MDhGMjg0MDkzCis6MTBGQUMwMDA4MTMyMDAwMDU0OEYwMDQwODFCMjAwMDAwMDAwMUIwMDEyCis6MTBGQUQwMDA5MkIwMDEwMDVEOEYyMjQxMTk3QzAwMDAwMDgwMDAwMzdDCis6MTBGQUUwMDA0MkM5MDEwMEUyOTUwMEY4MDAzMDAxMDA1QThGQTI0MTlFCis6MTBGQUYwMDAzQjUwMDAwMDYxOEYwMDQ5MDBCMDAwMDBGRjA3MDAxRTZFCis6MTBGQjAwMDAwMDhDMDEwMEUyOTUwMDQwODEzMjAxMDA2MThGMDA0OUM0Cis6MTBGQjEwMDAwMEIwMDAwMDAwMDAxQjQ3MTk4MDAxMDA2NDhGMjI1RkM1Cis6MTBGQjIwMDAwMTZDMDAwMDYzOTkwMDQwODEzMjAxMDBCMDhBMDAwMDNFCis6MTBGQjMwMDA4MEIwMDAwMDZCOEYyMjVDMUY3QzAwMDAyMDgwMDAwM0RGCis6MTBGQjQwMDA0MkM5MDEwMDZCOEYyMjQwRTM2RDAwMDAwMDAwMDA0N0I2Cis6MTBGQjUwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA2ODhGQTg0MDIzCis6MTBGQjYwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDA2QjhGNDAwNUIwCis6MTBGQjcwMDA0ODMxMDAwMEZGRkYwMDA3OTQ4OTAxMDA3MThGODVDQTlBCis6MTBGQjgwMDA5NDMwMDAwMDYzOTkxODVDMUYwMDAxMDAwRTAwMDAwRjA0Cis6MTBGQjkwMDAxRThDMDEwMDc4ODkwMDQwODFCMjAwMDAzNjk4MTgwMDYwCis6MTBGQkEwMDA4MDMwMDEwMEQ1OEQwMDQ3MTk4MDAwMDAwMDAwMDA0MDIyCis6MTBGQkIwMDAxOTgwMDEwMEQ1OEQyMjQ3MTk3QzAwMDBERDk1MDA0MDk5Cis6MTBGQkMwMDA4MTMyMDEwMDc4OEZBMjA4ODAzMjAwMDBENThEMDA0MDdDCis6MTBGQkQwMDA4MUIyMDAwMENCOTcwMDQwMEQzMDAxMDA5QzAxMDA0MDM1Cis6MTBGQkUwMDA0NTk5MDEwMEZGRkYwMDBCOTg4ODAxMDA4QjAwMkQ1MDA0Cis6MTBGQkYwMDAxN0YwMDEwMDdFOEY5MDRDMTY0MDAwMDAwMDAwMDA0MTdECis6MTBGQzAwMDAxN0MwMDEwMDgwOEYyMjQzRTc3RDAwMDAwMDAwMDA0NDAwCis6MTBGQzEwMDA0NUMxMDEwMDAwMDA2NjIwMTdBNDAxMDA2ODAxMDA0MEYyCis6MTBGQzIwMDA0Mzk5MDEwMDVDMDEyRUYyODBCMDAxMDAzRTAwMDA0MENCCis6MTBGQzMwMDA4MENFMDEwMDg3OEYyNDQwODEzMjAwMDAwMDAwMDA0NjAyCis6MTBGQzQwMDA4MUMwMDEwMDg4OEYwMDk0RTVCMTAwMDAwMjAwNjI0MDhECis6MTBGQzUwMDA3RUNEMDEwMDAwMDAwMDU3ODFDMDAxMDAwMDAwMkUxMDgxCis6MTBGQzYwMDA0OEIxMDEwMDAzMDAwMDQwRjA4RDAxMDAwMDAwMDAwOEQxCis6MTBGQzcwMDBGMEIxMDEwMDU4MDEwMDA1RTBDOTAxMDAwMDAwMDA0NDk2Cis6MTBGQzgwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDA4RThGQTg0MDM4Cis6MTBGQzkwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDAwMDAwMDAwNUI5Cis6MTBGQ0EwMDA0OEIxMDEwMDlBOEYyMjQwQUY2RjAwMDAwMDQwMDAwODY5Cis6MTBGQ0IwMDA5NERDMDEwMDg4OTgwMDQwODEzMjAxMDA5ODhGMjI0MDM2Cis6MTBGQ0MwMDA5NzZDMDAwMEUyOTUwMDA4MDAzMDAxMDBENThEMDA0MERGCis6MTBGQ0QwMDA4MUIyMDAwMDAwMDAwMDQwMDVCMDAxMDBENThEMDA0NzUyCis6MTBGQ0UwMDAxOTgwMDAwMDlBOEY0MzQ4NjEzMTAwMDAwMDUwMDAwOERECis6MTBGQ0YwMDA2MkREMDEwMEEwOEYyODQwMDUzMDAwMDA5QjhGMjI0ODY0Cis6MTBGRDAwMDA3NzdEMDAwMEUyOTUxQjA4MDAzMDAxMDBENThEMDA0MDkyCis6MTBGRDEwMDA4MUIyMDAwMEQ1OEQxQjQ3MTk4MDAwMDAzNTAwMDA0MERFCis6MTBGRDIwMDA0Nzk5MDEwMDAxMDA2M0YzODRDODAxMDBBNThGQTA0MzM3Cis6MTBGRDMwMDA4NTZDMDAwMDAwMDA2MzQwODVCMDAxMDBBODAwMDA0MDExCis6MTBGRDQwMDA0Mzk5MDEwMDM3MDAyRkYwMjRCMDAxMDAwMTAwNjNGMzU0Cis6MTBGRDUwMDA4MkNDMDEwMEIwOEZBMjQxOUUwNjAwMDBENThEMjI0NEM2Cis6MTBGRDYwMDA4MzcwMDAwMDM2MDAwMDQwNDM5OTAxMDA1ODAwM0Q0Mzc1Cis6MTBGRDcwMDBFN0UxMDEwMEQ1OEQxRkYwMjQ2QzAwMDA2Mzk5MDA0ODc1Cis6MTBGRDgwMDA4MTMwMDEwMEIwOEEyMzQxODM2QzAwMDBCMDhBMDA0N0IzCis6MTBGRDkwMDA4MUIwMDAwMDU4MDAzRDQzODVFMDAxMDAwMDAwMDBGOEZDCis6MTBGREEwMDAzNkIwMDEwMDAwMDAwMEYwMDBCMDAxMDAyODAwMDA0MDYzCis6MTBGREIwMDA4Mzk4MDEwMDA0OTgwMDQ3NjEzMTAxMDAxQjg0MDA4ODhBCis6MTBGREMwMDAxQ0IwMDAwMDAwMDAyRDAzNDhCMTAxMDAwODAwMkRGMDE4Cis6MTBGREQwMDA5NEIwMDEwMDAwMDAwMEY4OEVCMDAxMDA5MDAwMkRGMEZBCis6MTBGREUwMDAxNEIwMDEwMDAwMDAwMDA1NDhCMTAxMDA4NDhFQTI0MDVCCis6MTBGREYwMDA4RjdDMDAwMEJFOEYyMjQ3OEY3QzAwMDA4NDhFMDA0OERECis6MTBGRTAwMDAxOTkwMDAwMDJEOTAwMDQwODFCMjAwMDAzNjAwMkQ1RDU5Cis6MTBGRTEwMDAwNUI0MDEwMDM3MDAyREYzODBCMDAxMDAwMDAwMDBGM0FECis6MTBGRTIwMDA4RUIwMDEwMDVDMDAzRDQzODFFMDAxMDBBODAwMkRGMDkwCis6MTBGRTMwMDA5NEIwMDEwMDAwMDAwMEYwMjRCMDAxMDAyMDAwMDAxMDg4Cis6MTBGRTQwMDA4NkRDMDEwMDQwODAwMDAzNDRDOTAxMDBFMzk0MDA0QUJECis6MTBGRTUwMDBGMDMxMDEwMDM2MDAyRjVDMUY5MDAxMDBDQzhGQTI1MEMyCis6MTBGRTYwMDA4RjUwMDAwMDM0MDAyMDQwRTFCMTAxMDBENThEMDA0MEVBCis6MTBGRTcwMDA4MUIyMDAwMDAwMDA2MzQxODFDMDAxMDBDRjhGQTA0MzI4Cis6MTBGRTgwMDA4MTZDMDAwMDAwMDA2MzQwODFCMDAxMDAzNzAwMjA0NzEyCis6MTBGRTkwMDBFNkIxMDEwMEQ1OEQyMjQ3ODAzMjAwMDAwNDAwMDA0NzAyCis6MTBGRUEwMDAwQ0Y0MDEwMDAwMDAwMDRGOEY4NDAxMDBFNDhGMjI0NzEyCis6MTBGRUIwMDAwQzZDMDAwMDU4MDAzRDQzODFFMDAxMDBFNDhGMUZGMDBFCis6MTBGRUMwMDAyNDZDMDAwMDAwMDAwMDVDMUY4MDAxMDAwMDgwMDAxMDE2Cis6MTBGRUQwMDA0MkM5MDEwMEREOEYyMjQwRTM2RDAwMDAwMDAwMDA0NUIzCis6MTBGRUUwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBEQThGQTg0MDFFCis6MTBGRUYwMDA4MTMyMDAwMDFCODQwMDg4MUNCMDAwMDBERDhGNDI0MDZFCis6MTBGRjAwMDAwNTMwMDAwMDAwMDAwMDQ0OTM5MzAxMDAwMDAwMUE1RERBCis6MTBGRjEwMDA2OTkzMDEwMEUyOEYyMzQxMEQ2QzAwMDBCRjhGMDAwNTQzCis6MTBGRjIwMDA0OEIxMDAwMDYzOTkwMDA1NDgzMTAxMDBCMDhBMDA0OERCCis6MTBGRjMwMDA4MUIwMDAwMEQ1OEQyMjQwOEY2QzAwMDAzNjk4MDA1RkE0Cis6MTBGRjQwMDA4MTMwMDEwMEQ1OEQwMDQwODFCMjAwMDBBMjAwMDA0MDQ4Cis6MTBGRjUwMDA0Mzk5MDEwMDAwMDAwMEYzODRCMDAxMDBBNjAwMkQ0OTgwCis6MTBGRjYwMDAxOTkwMDEwMDAyMDAwMEYyODBGNDAxMDBCODAwMkQ0MDU5Cis6MTBGRjcwMDA4MUIyMDEwMDAwMDAwMEYyODBDMDAxMDAwMDAwMDA0MERBCis6MTBGRjgwMDA4MkY4MDEwMDE5MDAwMDQwODE5ODAxMDBGMzhGQTA0MDIxCis6MTBGRjkwMDA4MjZDMDAwMDJDMDEwMDQwODE5ODAxMDBGMzhGQTM0MDg3Cis6MTBGRkEwMDA4MjZDMDAwMDAwMDAwMDQxODBCMDAxMDBGNThGMjA0QzAxCis6MTBGRkIwMDA4NTZDMDAwMDAwMDAwMDQxODVDMDAxMDA4NjAwMjA0MEUzCis6MTBGRkMwMDBFNEIxMDEwMEEyMDAyMDQyRTZCMTAxMDBENThEMDA0MDVECis6MTBGRkQwMDA4MUIyMDAwMEM1OTcwMDUwODEzMDAxMDBENThEMDA0MEVFCis6MTBGRkUwMDA4MUIyMDAwMDA0ODAwMDAzNDJDOTAxMDAwNDAwMjJGMDM1Cis6MTBGRkYwMDA4MDMwMDAwMDAwMDAwMDQwOERCMDAxMDA1NTk5MDA0MEE1Cis6MDIwMDAwMDIxMDAwRUMKKzoxMDAwMDAwMDg3MzAwMTAwQjAwMDJGNUMxRjkwMDEwMDAwMDA2MEYwRkQKKzoxMDAwMTAwMDgwQzAwMTAwMzY5ODAwNUY4MTMwMDEwMEQ1OEQwMDQwMUUKKzoxMDAwMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMEQ1OEQyMjQ2NUMKKzoxMDAwMzAwMDE5N0MwMDAwQTAwMDAwNDA0Nzk5MDEwMDAxMDA2MkYyMTUKKzoxMDAwNDAwMDk2Q0MwMTAwRDU4REE2NDA4MTMyMDAwMDM2OTgwMDRBM0EKKzoxMDAwNTAwMDgxMzAwMTAwMEI5ODAwNDY5NTMwMDEwMEQ1OEQwMDQwOUQKKzoxMDAwNjAwMDgxQjIwMDAwRDU4RDIyNDkxOTdDMDAwMDg2MDAwMDQwMzUKKzoxMDAwNzAwMDQ3OTkwMTAwMDEwMDYyRjI4MENDMDEwMEQ1OERBNjQwQjUKKzoxMDAwODAwMDgxMzIwMDAwMzY5ODAwNEE4MTMwMDEwMDBCOTgwMDQ3MDkKKzoxMDAwOTAwMDk1MzAwMTAwRDU4RDAwNDA4MUIyMDAwMDc0OTUwMDQwN0MKKzoxMDAwQTAwMDgxMzIwMTAwRDU4RDAwNUMxRjkwMDAwMEQ1OEQwMDQwOEQKKzoxMDAwQjAwMDgxQjIwMDAwRDU4RDAwNDA4MUIyMDAwMEJBMDAwMDQwM0UKKzoxMDAwQzAwMDQ3OTkwMTAwMDEwMDYyRjI4MEM4MDEwMDE5OTA5MDQwMzgKKzoxMDAwRDAwMDgwMzIwMDAwRkZGRjYyNDA4MTk4MDEwMEE0MDAwMDQwRDAKKzoxMDAwRTAwMDQ3OTkwMTAwRDU4RDIyNDBFNTZEMDAwMEQ1OEQwMDQxNzYKKzoxMDAwRjAwMEU1QzEwMDAwQzU5NzAwNEQ4MTMwMDEwMEQ1OEQwMDQwNUQKKzoxMDAxMDAwMDgxQjIwMDAwNUMwMDAwNDA0Nzk5MDEwMDA0MDAyMkYwMjkKKzoxMDAxMTAwMDk2MzAwMDAwMDAwMDAwNDBFMUIxMDEwMDAwODAwMDAzQzMKKzoxMDAxMjAwMDQ0QzkwMTAwMDAwMDAwNEJFMEIxMDEwMDAwMDAwMDQwQTQKKzoxMDAxMzAwMDhEQjAwMTAwNTU5OTAwNDA4NzMwMDEwMDhCMDAwMDQwRDAKKzoxMDAxNDAwMDQ3OTkwMTAwMjk5MDgwRjM5NjMwMDAwMDAwMDAwMDQwOUMKKzoxMDAxNTAwMEU3ODEwMTAwMDAwMDAwNDcxOTkwMDEwMEQ1OEQwMDVDODcKKzoxMDAxNjAwMDFGOTAwMDAwMzQwMDAwNDA0NTk5MDEwMDAxMDAwMDQwNEMKKzoxMDAxNzAwMEY1OTkwMTAwMDAxMTAwNDBFNTk5MDEwMEREOTUwMDQwNkUKKzoxMDAxODAwMDgxMzIwMTAwM0U5MEEyMDg4MDMyMDAwMDM3MDAwMDQwMUEKKzoxMDAxOTAwMDQ3OTkwMTAwMDAwMDAwRjM4MkIwMDEwMDAwMDA2MzUxQTQKKzoxMDAxQTAwMDgzRDAwMTAwMzQwMDAwNDA0Nzk5MDEwMDAxMDA2M0YzNEYKKzoxMDAxQjAwMDg0Q0MwMTAwMzY5MDlGNDI4MDMyMDAwMDAwMDA2MzQyRjAKKzoxMDAxQzAwMDg1QjAwMTAwMDAwMDAwNDUwM0YwMDEwMDAwMDAwMDAxQkYKKzoxMDAxRDAwMDAwQzAwMTAwMzg5MDM3NUM2MTMxMDAwMDAwMDAwMDFCNTYKKzoxMDAxRTAwMDYyQjEwMTAwMzk5MEE4NEIxOTEwMDAwMDAwMDAwMDAwMTYKKzoxMDAxRjAwMDYyQjEwMTAwM0I5MEE4NDA4MTMyMDAwMDA1OEExNzQwOUYKKzoxMDAyMDAwMDgxQjIwMDAwMDA4MDAwMDM0MkM5MDEwMDkwMDAyREYwN0YKKzoxMDAyMTAwMDk0QjAwMTAwQUMwMDJERjAzMEIwMDEwMDM1MDAyREYwOUQKKzoxMDAyMjAwMDI4QjAwMTAwNTgwMDNFNDNFN0UxMDEwMDAxMDAwMDE4M0EKKzoxMDAyMzAwMEYwQzkwMTAwMDAwMDAwNEFFMEIxMDEwMDM4MDAyMDAwRDAKKzoxMDAyNDAwMEUwQjEwMTAwM0MwMDIwMUJFMEIxMDEwMDQwMDAyMDQwNzMKKzoxMDAyNTAwMEUxQjEwMTAwMDAwMDAwNDAyQkIwMDEwMDFBOTgwMDQwRkQKKzoxMDAyNjAwMDBEMzAwMTAwMDAwMDAwMTgxNkMwMDEwMDREOTBBMDE0RDAKKzoxMDAyNzAwMDE2NDQwMDAwMDAwMDAwNDExN0MwMDEwMDBFMDAwMEEyNUIKKzoxMDAyODAwMDQ0QzkwMTAwMDAwMDAwMThGOEIxMDEwMEIwMDAyRDE0QUQKKzoxMDAyOTAwMEY4QjEwMTAwMTA1MDAwNDA4Nzk4MDEwMDU2OTAyMjRBQTIKKzoxMDAyQTAwMDE5N0MwMDAwMDAzMDAwNDM4NkM4MDEwMDAwMzAwMDBCQkMKKzoxMDAyQjAwMDE2QzgwMTAwNTY5MEE0NDA4MTMyMDAwMDAwMDAwMDQxQTEKKzoxMDAyQzAwMDE3QzAwMTAwMDEwMDZFNDM4Njk4MDEwMDUxOTgwMDMwNkMKKzoxMDAyRDAwMDgxMzAwMTAwNUE5MEEwNDExNzQwMDAwMDAwMDAwMDQxMDkKKzoxMDAyRTAwMDE3QzAwMTAwNjE5MDIyNEExOTdDMDAwMDA4MDAwMEEyOUEKKzoxMDAyRjAwMDQ0QzkwMTAwQ0MwMDJEQUJGOUIxMDEwMDAwMDAwMEFCRjYKKzoxMDAzMDAwMDE3QzAwMTAwNjA5MEEwRjAxNjQ0MDAwMDAwMDAwMDQxRkEKKzoxMDAzMTAwMDE3QzAwMTAwMDAwMDY0RjA4MkIwMDEwMDkwMDAwMDQwQUUKKzoxMDAzMjAwMDQ1OTkwMTAwMDAwMDYwNDEzMUMwMDEwMEJDMDAwMDQwNUYKKzoxMDAzMzAwMDQzOTkwMTAwNjc5MDA2MEM4MDMyMDAwMEEwMDAyMEYyNzMKKzoxMDAzNDAwMEU0QjEwMTAwMDQwMDA5NDYxOTEwMDAwMDlDMDEwMDQwQkUKKzoxMDAzNTAwMDQ1OTkwMTAwRkZGRjAwMEI5ODg4MDEwMDhCMDAyRDUwOEMKKzoxMDAzNjAwMDE3RjAwMTAwNkM5MDkwNEMxNjQwMDAwMDAwMDAwMDQxMTYKKzoxMDAzNzAwMDE3QzAwMTAwNkU5MDIyNDNFNzdEMDAwMDAwMDAwMDQ0OUEKKzoxMDAzODAwMDQ1QzEwMTAwMDAwMDY2MjAxN0E0MDEwMDY4MDEwMDQwN0IKKzoxMDAzOTAwMDQzOTkwMTAwNUMwMTJFRjI4MEIwMDEwMDNFMDAwMDQwNTQKKzoxMDAzQTAwMDgwQ0UwMTAwNzU5MDI0NDA4MTMyMDAwMDAwMDAwMDQ2OUMKKzoxMDAzQjAwMDgxQzAwMTAwNzY5MDAwOTRFNUIxMDAwMDAyMDA2MjQwMjcKKzoxMDAzQzAwMDdFQ0QwMTAwMDAwMDAwNTc4MUMwMDEwMDAwMDAyRTEwMEEKKzoxMDAzRDAwMDQ4QjEwMTAwMDMwMDAwNDBGMDhEMDEwMDAwMDAwMDA4NUEKKzoxMDAzRTAwMEYwQjEwMTAwNTgwMTAwMDVFMEM5MDEwMDAwMDAwMDQ0MUYKKzoxMDAzRjAwMDYxQjEwMTAwMDAwMDAwMTA2MkIxMDEwMDdDOTBBODQwRDIKKzoxMDA0MDAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDA1NDEKKzoxMDA0MTAwMDQ4QjEwMTAwODY5MDIyNDBBRjZGMDAwMDAwNDAwMDA4MDQKKzoxMDA0MjAwMDk0REMwMTAwODg5ODAwNDA4MTMyMDEwMDgxOTBBMjQwNTQKKzoxMDA0MzAwMDk3NkMwMDAwMzUwMDAwNDA0Nzk5MDEwMDhBOTAwMDQwMDkKKzoxMDA0NDAwMDA1QjAwMDAwODY5MDQzNDg2MTMxMDAwMDAwNTAwMDA4NkMKKzoxMDA0NTAwMDYyREQwMTAwODc5MEE4NDAwNTMwMDAwMDM1MDAxQjQwOTgKKzoxMDA0NjAwMDQ3OTkwMTAwMDEwMDYzRjM4NEM4MDEwMDhEOTBBMDQzMDcKKzoxMDA0NzAwMDg1NkMwMDAwMDAwMDYzNDA4NUIwMDEwMDM3MDAwMDQwM0IKKzoxMDA0ODAwMDQ3OTkwMTAwMDEwMDYzRjM4MkNDMDEwMDhCMDAwMDQwMUEKKzoxMDA0OTAwMDQ3OTkwMTAwMDAwMDAwNDVFNzkxMDEwMDM2OTgwMDVGOTAKKzoxMDA0QTAwMDgxMzAwMTAwRDU4RDAwNDA4MUIyMDAwMDM3MDAwMDQwNEUKKzoxMDA0QjAwMDQ3OTkwMTAwN0Y5NjAwRjM5NDMwMDEwMDJEOTAyMjRBNjUKKzoxMDA0QzAwMDgwMzIwMDAwQUI4RTAwNDA4MUIyMDAwMDM3MDAwMDQwNTcKKzoxMDA0RDAwMDQ3OTkwMTAwN0Y5NjAwRjM5NDMwMDEwMDdCOEUyMjRBRjkKKzoxMDA0RTAwMDgwMzIwMDAwQUI4RTAwNDA4MUIyMDAwMDM2MDAwMDQwMzgKKzoxMDA0RjAwMDQzOTkwMTAwMDAwMDAwRkIxMkIwMDEwMDBGMDAwMEYzNUYKKzoxMDA1MDAwMDkwODgwMTAwMDQwMDAwRjMwQ0Y0MDEwMEE1OEUyMjA2N0YKKzoxMDA1MTAwMDkwNkMwMDAwNUMwMDNENDMxM0UwMDEwMEE4MDAyREYwNEEKKzoxMDA1MjAwMDk0QjAwMTAwMzcwMDJGRjAyNEIwMDEwMDM2MDAyQTUwQUIKKzoxMDA1MzAwMEU3RDEwMTAwMDAwMDYzNDExM0MwMDEwMEE3OTBBMDQzNzAKKzoxMDA1NDAwMDEzNkMwMDAwMDAwMDAwNDBFN0IxMDEwMEUxOTQwMDEwQ0UKKzoxMDA1NTAwMDg2MzAwMTAwMUI4NDAwODgxQ0IwMDAwMEE5OTA0MjA1NzEKKzoxMDA1NjAwMDQ4MzEwMDAwMDAwMDAwNDQ5MzkzMDEwMEE1OEUxQTVERkQKKzoxMDA1NzAwMDY5OTMwMDAwMzYwMDJEMTA4NkIwMDEwMDVDMDAzRDQzRjkKKzoxMDA1ODAwMEU3RTEwMTAwQTgwMDJERjA5NEIwMDEwMDM1MDAyRkYwNDQKKzoxMDA1OTAwMDI0QjAwMTAwMDEwMDZCRkI4NEM4MDEwMEI0OTBBMDQzQUIKKzoxMDA1QTAwMDg1NkMwMDAwMzUwMDIwNDBFN0IxMDEwMDAwMDAwMDQwRUMKKzoxMDA1QjAwMDgxQjIwMTAwMDEwMDYzRjMxMkM4MDEwMEI3OTBBMDQzQUIKKzoxMDA1QzAwMDEzNkMwMDAwMDAwMDAwNDBFN0IxMDEwMDQwODAwMDAzMTAKKzoxMDA1RDAwMDQ0QzkwMTAwRTM5NDAwNEFGMDMxMDEwMDFCODQwMDg4MDMKKzoxMDA1RTAwMDFDQjAwMDAwQkE5MDQyMDU0ODMxMDAwMDAwMDAwMDQ0RjEKKzoxMDA1RjAwMDkzOTMwMTAwMDAwMDFBNUQ2OTkzMDEwMDM3MDAwMDQwRTkKKzoxMDA2MDAwMDQ3OTkwMTAwMTEwMDYzRjM4MkNDMDEwMEE5OEYyMjQxQjgKKzoxMDA2MTAwMDlFMDYwMDAwMzUwMDAwNDA0Mzk5MDEwMDU4MDAzRDQzMEMKKzoxMDA2MjAwMEU3RTEwMTAwMDAwMDAwRjgzNkIwMDEwMEIzOEYwMEYwRjAKKzoxMDA2MzAwMDAwQjAwMDAwNUUwMTJEMDU0OEIxMDEwMEM1OTA0N0YyRjEKKzoxMDA2NDAwMDEyMzAwMDAwMDA5OTNGNDIxM0YwMDEwMENBOTAyMjQ3ODcKKzoxMDA2NTAwMEU3N0QwMDAwNkI4NDFGODgxQ0IwMDAwMEM0OTAwMDQwNDAKKzoxMDA2NjAwMDgxQjIwMDAwMDAwMDAwNDdFNzkxMDEwMDAwMDAxRjQyMzYKKzoxMDA2NzAwMDE5OTAwMTAwNzUwMDAwNDA2MTk5MDEwMENDOTBBOEIxNkIKKzoxMDA2ODAwMDBDMzAwMDAwNUM5NzAwMTA5NDMwMDEwMDFCODQwMDg4M0YKKzoxMDA2OTAwMDFDQjAwMDAwNUUwMTJFMDU0OEIxMDEwMEMwQTgzRDQ2MTcKKzoxMDA2QTAwMDBERTAwMTAwMDAwMDAwNDA5N0IwMDEwMEQ2OTAyMjQwMEMKKzoxMDA2QjAwMEUxNkQwMDAwMDQwMDAyNDE5NzQwMDAwMEQzOTAwMDUwMUIKKzoxMDA2QzAwMDQzQzEwMDAwRTI5MDIyNEI4MDMyMDAwMDAwMDA2MjRCRTgKKzoxMDA2RDAwMDEyOTQwMTAwMDkwMDAwMDc5NkU0MDEwMDAwMDAwMEE3NDEKKzoxMDA2RTAwMDk3QzAwMTAwMzAwMDAwMTA5NEM4MDEwMDAwODAwMDRBNEIKKzoxMDA2RjAwMDQ0OTkwMTAwMDAwMDAwNDJGMUIxMDEwMDVFMDEwMDRCOEQKKzoxMDA3MDAwMEYwQzkwMTAwNUUwMTAwMDVFMEM5MDEwMDAwMDAwMDQ0REQKKzoxMDA3MTAwMDYxQjEwMTAwMjAwMDAwNEE2MkREMDEwMEUwOTBBODQwQzQKKzoxMDA3MjAwMDgxMzIwMDAwMDA4MDAwMTA0NEM5MDEwMDAwMDAwMDUwMjgKKzoxMDA3MzAwMEYxQjEwMTAwMDQwMDAwMDk5NkU0MDEwMDAwMDA2OEE4N0UKKzoxMDA3NDAwMDk3QzAwMTAwRDQwMDAwMDVFMEM5MDEwMDAwMDAwMDQ0OEEKKzoxMDA3NTAwMDYxQjEwMTAwMDAwMDAwMTA2MkIxMDEwMEU4OTBBODQwMDIKKzoxMDA3NjAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwOTkzRjQyQzkKKzoxMDA3NzAwMDEzRjAwMTAwRUM5MDQ3NDA4MTMyMDAwMDNGMDAwMEYzOEQKKzoxMDA3ODAwMDk2ODgwMTAwMDAwMDAwNDBFN0IxMDEwMDAwMDAxRjU1RkQKKzoxMDA3OTAwMDYxQjEwMTAwMDAwMDAwMDY2MkIxMDEwMEYwOTBBODQwQzQKKzoxMDA3QTAwMDgxMzIwMDAwRjU5MDIyNEI4MDMyMDAwMDAwMDAwMDRCQTcKKzoxMDA3QjAwMDYyQjEwMTAwRjM5MEE4NDA4MTMyMDAwMDAwMDAwMDk3NzAKKzoxMDA3QzAwMDEzQjAwMTAwMDAwMDAwOTY5N0IwMDEwMEZCOTAyMDA5RDMKKzoxMDA3RDAwMDk2NkMwMDAwRkI5MDFGMDk5NjI0MDAwMDZCODQwMDg4MzMKKzoxMDA3RTAwMDFDQjAwMDAwRjY5MDAwNDA4MUIyMDAwMEM1OTcwMDU3OTEKKzoxMDA3RjAwMDgxMzAwMTAwQzA4RDAwMDU0OEIxMDAwMDJFMDAwMDQwOEUKKzoxMDA4MDAwMDQzOTkwMTAwMDE5MTIyRjM4MDMyMDAwMEM1OTcwMDQyMTQKKzoxMDA4MTAwMDgxMzAwMTAwMDU4QTAwNDA4MUIyMDAwMDM2OTgwMDUyMDQKKzoxMDA4MjAwMDgxMzAwMTAwQzA4RDAwNDIxOTgwMDAwMEM1OTcwMDNBNTgKKzoxMDA4MzAwMDgxMzAwMTAwMzY5ODAwNTI4MTMwMDEwMEMwOEQwMDQwQTcKKzoxMDA4NDAwMDgxQjIwMDAwMDAwMDAwNDAwNUIwMDEwMERGOTYwMDQwQ0EKKzoxMDA4NTAwMDk1MzAwMTAwQzA4RDIyNDA5NTZDMDAwMDBDOTFBMjQwQTMKKzoxMDA4NjAwMDFGN0MwMDAwRTI5NTAwNDA4MTMyMDEwMDA1OEEwMDQwQjMKKzoxMDA4NzAwMDgxQjIwMDAwMDQ4MDAwMDM0MkM5MDEwMDAwMDAwMEYyQzAKKzoxMDA4ODAwMDAyQjAwMTAwOEE5NjAwNTI5NTMwMDEwMDkxOTYwMDRCMEIKKzoxMDA4OTAwMDAyQjAwMDAwMDU4QTAwNDA4MUIyMDAwMDBBOTkwMDQwQzEKKzoxMDA4QTAwMDk1MzAwMTAwMTg5MUEyMDg4MDMyMDAwMDE4OTFBMjE2MUMKKzoxMDA4QjAwMDgwMzIwMDAwMDU4QTIyNDIxOTdDMDAwMDAwMDAwMDRCQjMKKzoxMDA4QzAwMDE5OTAwMTAwQzU5NzAwM0E4MTMwMDEwMDA1OEEwMDQwNjcKKzoxMDA4RDAwMDgxQjIwMDAwMDAyMzAwQTYxNkIwMDEwMDFCOTE4MzFFMDgKKzoxMDA4RTAwMDgwMzIwMDAwMDAwODAwMEIxNkRDMDEwMDAwMDAwMDAwNTAKKzoxMDA4RjAwMDJBQzAwMTAwMEU5ODAwMDg4MDMwMDEwMDFGOTEwMDVFQTAKKzoxMDA5MDAwMDE3OTAwMDAwMkY5ODAwNDM2MTMxMDEwMEVGOTQwMDQwRTAKKzoxMDA5MTAwMDhEMzAwMTAwMTY5ODAwMDcxNjE0MDEwMDAwODAwMDEwQTkKKzoxMDA5MjAwMDQyQzkwMTAwMjc5MTIyNDBFMzZEMDAwMDAwMDAwMDQzMEUKKzoxMDA5MzAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDI0OTFBODQwNzcKKzoxMDA5NDAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMEI3OTcwMDVFNTUKKzoxMDA5NTAwMDA1MTAwMTAwRTI5NTAwNDA4MTMyMDEwMDJCOTEyMjA5MkYKKzoxMDA5NjAwMDgwMzAwMDAwMzY5ODAwNDAxMzMwMDEwMEM1OEQwMDA1MkUKKzoxMDA5NzAwMDQ4QjEwMDAwMEY5NzAwNDA4MTMyMDEwMEMwOEQwMDQwNTcKKzoxMDA5ODAwMDgxQjIwMDAwMDAwMDAwNEExRjkwMDEwMDMyOTEyMjQzMTIKKzoxMDA5OTAwMDNEN0MwMDAwMDAwMDAwNDQxOTkwMDEwMDAwMDAwMDQzNkQKKzoxMDA5QTAwMDNEODAwMTAwMzM5MTAwNDIxOTkwMDAwMDE0MDAyRDQ1NTQKKzoxMDA5QjAwMDFGOTAwMTAwOEY5MTgzMUU4MDMyMDAwMDhGOTEwMDQ0QjAKKzoxMDA5QzAwMDE5OTAwMDAwRDQ5NTAwNDA4MTMyMDEwMDQ3OTFBMjA4OUYKKzoxMDA5RDAwMDgwMzIwMDAwNDc5MUEyMTY4MDMyMDAwMDQzOTFBMjQyNkIKKzoxMDA5RTAwMDE5N0MwMDAwMDA4MjAwMDIwNERDMDEwMEEwOTgwMDQwOTUKKzoxMDA5RjAwMDQ3OTkwMTAwRTk4OTAwNDE4OTMwMDEwMDQwOTFBMjQxRjUKKzoxMDBBMDAwMDE5N0MwMDAwRTI5NTAwNDA4MTMyMDEwMDA1OEEwMDQwMTcKKzoxMDBBMTAwMDgxQjIwMDAwOEE5NjAwMTU5NDMwMDEwMDkxOTYwMDRCMzcKKzoxMDBBMjAwMDAyQjAwMDAwMDU4QTAwNDA4MUIyMDAwMDBGOTcwMDQwMkMKKzoxMDBBMzAwMDgxMzIwMTAwMDAwMDAwNEIxOTkwMDEwMEM1OTcwMDNBNzcKKzoxMDBBNDAwMDgxMzAwMTAwMDU4QTAwNDA4MUIyMDAwMDRBOTEyMjQyQjMKKzoxMDBBNTAwMDE5N0MwMDAwMEY5NzAwNDA4MTMyMDEwMDRCOTEwMDQwNEIKKzoxMDBBNjAwMDgxQjIwMDAwREY5NjAwNDA4MTMyMDEwMDc3OTEyMjQxN0YKKzoxMDBBNzAwMDE5N0MwMDAwQzAwMDAwMTU5OEM4MDEwMDc3OTFBMDBCRjgKKzoxMDBBODAwMDk5NkMwMDAwMzAwMDAwMTA4MEM4MDEwMDAwODAwMDQwMTgKKzoxMDBBOTAwMDQ0OTkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDAzODIKKzoxMDBBQTAwMEYwQjEwMTAwMDAwMDAwNDI2MUIxMDEwMDAwMDAwMDQwMEYKKzoxMDBBQjAwMDYyQjEwMTAwNTM5MUE4MDBFMDMxMDAwMDFCODQwMDg4NUUKKzoxMDBBQzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMEMwMDAwMDE1ODYKKzoxMDBBRDAwMDk4QzgwMTAwMzAwMDJFMEI5OUQwMDEwMDAwMDA2QTUwMjgKKzoxMDBBRTAwMDk5QzAwMTAwQzAwMDYyMDE4MENDMDEwMDBDODAwMDAzQUQKKzoxMDBBRjAwMDQyQzkwMTAwMkQwMDJERjAyMkIwMDEwMDAwMDAwMDRDODEKKzoxMDBCMDAwMDgwQzAwMTAwMDAwMDAwNUMyMzgwMDEwMEQ0MDAzRjQxNTAKKzoxMDBCMTAwMEU3RTEwMTAwMEIwMDAwMTFFNEY1MDEwMDJGMDAyMDQ3ODAKKzoxMDBCMjAwMEU3QjUwMTAwNjQ5MTIzMEI4MTZDMDAwMDAwMDAwMDRGQzkKKzoxMDBCMzAwMEU1OTEwMTAwMDAwMDAwMDg4MEIwMDEwMDAwMDAwMDBCRkEKKzoxMDBCNDAwMDAzQjAwMTAwMDAwMDAwMTUwMkQwMDEwMDBFOTgwMDAwNjMKKzoxMDBCNTAwMDJBNDAwMTAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwODQKKzoxMDBCNjAwMDYyREQwMTAwNjk5MUE4NDA4MTMyMDAwMDFCODQwMDg4ODkKKzoxMDBCNzAwMDFDQjAwMDAwRTI5NTAwMDU0ODMxMDEwMEMwMDAwMDAxRjIKKzoxMDBCODAwMDgwQ0UwMTAwNzU5MTI2MTEwMDMwMDAwMDEwMDAwMDAwOTkKKzoxMDBCOTAwMDJBQzgwMTAwMDAwMDAwMDg4MEIwMDEwMDAwMDAwMDAxMjgKKzoxMDBCQTAwMDgwQzAwMTAwQzAwMDAwNDA5OTk4MDEwMDAwMDAwMDAxRDEKKzoxMDBCQjAwMDk4RDAwMTAwMEU5ODAwNEMwMjMwMDEwMEMwMDAwMDQwQTcKKzoxMDBCQzAwMDAzOTgwMTAwN0M5MTAwNDA4MUIyMDAwMDMwMDAyRjA4QTIKKzoxMDBCRDAwMDgwQjAwMTAwQzAwMDAwMTVGNEM5MDEwMEMwMDAwMDAxOTAKKzoxMDBCRTAwMEU0Q0QwMTAwQzAwMDAwNDAwMzk4MDEwMDBFOTgwMDAwMTEKKzoxMDBCRjAwMDJBNDAwMTAwODE5MTIyNDQxRjdDMDAwMEFDMDAyRjQwNUMKKzoxMDBDMDAwMDEzQjAwMTAwMDAwMDAwMDFFMEMxMDEwMEIwMDAwMDQwOEQKKzoxMDBDMTAwMDQ3OTkwMTAwODI5MTAwMDFFMEQxMDAwMEVGOTQwMDQwNkIKKzoxMDBDMjAwMDhEMzAwMTAwODA2MzAwQTYxNkIwMDEwMDE2OTgwMDA3MDEKKzoxMDBDMzAwMDE2MTQwMTAwMDA4MDAwMTA0MkM5MDEwMDhBOTEyMjQwNzAKKzoxMDBDNDAwMEUzNkQwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwQUUKKzoxMDBDNTAwMDYyREQwMTAwODc5MUE4NDA4MTMyMDAwMDFCODQwMDg4N0EKKzoxMDBDNjAwMDFDQjAwMDAwQjc5NzAwNUUwNTEwMDEwMDhEOTEyMjA5QUQKKzoxMDBDNzAwMDgwMzAwMDAwMzY5ODAwNDA4MTMyMDEwMEMwOEQwMDA1QjAKKzoxMDBDODAwMDQ4QjEwMDAwOEY5MTAwNEExRjkwMDAwMDAwMDAwMDAwNTIKKzoxMDBDOTAwMDEwQjAwMTAwMjQwMDJEMTUxMEMwMDEwMDI4MDAyREYwMTcKKzoxMDBDQTAwMDE2QjAwMTAwMjIwMDJERjAyNkIwMDEwMDE0MDAyRkYyMzIKKzoxMDBDQjAwMDBDQjAwMTAwMDAwMDAwMDFFMEQxMDEwMDAwMDAwMDEwQjQKKzoxMDBDQzAwMDMyQjAwMTAwMDAwMDAwMEIxQkIwMDEwMDA0MDAxRjE1MzIKKzoxMDBDRDAwMDFBNTAwMDAwMDAwMDAwNDAyM0IwMDEwMDAwMDAwMDAxOTUKKzoxMDBDRTAwMDJBQjAwMTAwNzE5NzAwNDAzNUIwMDAwMDJGMDAyMDQwNkQKKzoxMDBDRjAwMEU3QjEwMTAwRDM5MUEyNDUxRjdDMDAwMDI0MDAyMDBCMjYKKzoxMDBEMDAwMEUwQjEwMTAwMjgwMDIwMTNFMEIxMDEwMDIyMDAyMDA2MUMKKzoxMDBEMTAwMEU0QjEwMTAwQTk5MTIyNUMxRjdDMDAwMDAwMDAwMDVDOEUKKzoxMDBEMjAwMDFGODAwMTAwMzA4MDAwMTA0MkM5MDEwMEE5OTEyMjQwQkIKKzoxMDBEMzAwMEUzNkQwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwQjkKKzoxMDBENDAwMDYyREQwMTAwQTU5MUE4NDA4MTMyMDAwMDFCODQwMDg4NkIKKzoxMDBENTAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDAwODAwMDE5MkYKKzoxMDBENjAwMDQyQzkwMTAwQ0M5MTIyNDBFMzZEMDAwMEJBOTEyMjQyQjkKKzoxMDBENzAwMDE5N0MwMDAwMzc5NzAwNDA4MTMyMDEwMDg5OTUwMDQwQkUKKzoxMDBEODAwMDgxMzIwMTAwQzc5MTIyNEI4MDMyMDAwMDAwMDAwMDQzRjUKKzoxMDBEOTAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEIwOTFBODQwODcKKzoxMDBEQTAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMEI2OTEyMjQxRjMKKzoxMDBEQjAwMDE5N0MwMDAwRjg5NTAwNDAxMTMwMDEwMEI3OTEwMDA1NDIKKzoxMDBEQzAwMDQ4QjEwMDAwRTI5NTAwNDA4MTMyMDEwMEI5OTEyMjA5NEEKKzoxMDBERDAwMDgwMzAwMDAwMzY5ODAwNDA4MTMyMDEwMDZGODQwMDQwNkUKKzoxMDBERTAwMDA1QjAwMDAwMzc5NzAwNDA4MTMyMDEwMDg1OTUwMDQwMzIKKzoxMDBERjAwMDgxMzIwMTAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwOTkKKzoxMDBFMDAwMDYyREQwMTAwQkQ5MUE4NDA4MTMyMDAwMDFCODQwMDg4OTIKKzoxMDBFMTAwMDFDQjAwMDAwQzM5MTIyNDExOTdDMDAwMEY4OTUwMDQwRUQKKzoxMDBFMjAwMDExMzAwMTAwQzQ5MTAwMDU0OEIxMDAwMEUyOTUwMDQwNzYKKzoxMDBFMzAwMDgxMzIwMTAwQzY5MTIyMDk4MDMwMDAwMDM2OTgwMDQwQkUKKzoxMDBFNDAwMDgxMzIwMTAwNkY4NDAwNDAwNUIwMDAwMDAwMDAwMDQzQzMKKzoxMDBFNTAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEM4OTFBODQwQUUKKzoxMDBFNjAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDA1RDcKKzoxMDBFNzAwMDQ4QjEwMTAwQ0Y5MTIyNDExOTdDMDAwMEY4OTUwMDQwNTMKKzoxMDBFODAwMDExMzAwMTAwRDA5MTAwMDU0OEIxMDAwMEUyOTUwMDQwMEEKKzoxMDBFOTAwMDgxMzIwMTAwRDI5MTIyMDk4MDMwMDAwMDM2OTgwMDQwNTIKKzoxMDBFQTAwMDEzMzAwMTAwQzU4RDAwNDAwNUIwMDAwMDAwODAwMDE5MUUKKzoxMDBFQjAwMDQyQzkwMTAwREE5MTIyNDBFMzZEMDAwMDAwMDAwMDQzQzYKKzoxMDBFQzAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEQ2OTFBODQwMzAKKzoxMDBFRDAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDA1NjcKKzoxMDBFRTAwMDQ4QjEwMTAwMDAwMDAwNDAwNUIwMDEwMERFOTEyMjQxNDAKKzoxMDBFRjAwMDE5N0MwMDAwRjg5NTAwNDAxMTMwMDEwMERGOTEwMDA1RDkKKzoxMDBGMDAwMDQ4QjEwMDAwRTI5NTAwNDA4MTMyMDEwMDA4MDAyRDBBM0UKKzoxMDBGMTAwMDg0QjAwMTAwMDAwMDAwRjA4MkIwMDEwMDE0MDAyMDQwMDUKKzoxMDBGMjAwMEUxQjEwMTAwRTQ5MTAzMUU4MDMyMDAwMEU1OTEwMDQxMkYKKzoxMDBGMzAwMDg3QjAwMDAwMjEwMDAwNDA4Nzk4MDEwMDAwOTcwMDQwMjIKKzoxMDBGNDAwMDgxMzIwMTAwMDAwMDAwNUMxRjkwMDEwMEU5OTEyMjA5M0MKKzoxMDBGNTAwMDgwMzAwMDAwMzY5ODAwNDAxMzMwMDEwMEVDOTEyMjQ0QUMKKzoxMDBGNjAwMDE5N0MwMDAwMzY5ODAwNEY4MTMwMDEwMDAwMDAwMDQ0RDkKKzoxMDBGNzAwMDE5ODAwMTAwQzA4REEyNEExRjdDMDAwMEM1OEQwMDQwNzEKKzoxMDBGODAwMDgxQjIwMDAwQkEwMDIwNDBFNUIxMDEwMEYyOTE5QzE3NDcKKzoxMDBGOTAwMDgwMzIwMDAwQ0MwMDAwNDA0Mzk5MDEwMDEzOTkwMDQwQ0EKKzoxMDBGQTAwMDgxMzIwMTAwQTM5ODAwNDAxMzMwMDEwMEMwMDAwMDQwQ0UKKzoxMDBGQjAwMDQzOTkwMTAwQzQwMDJERjA4MkIwMDEwMEVFOTgwMEYwQ0EKKzoxMDBGQzAwMDg0MzAwMTAwRTI5NTAwNDA4MTMyMDEwMEM1OEQyMjA5ODQKKzoxMDBGRDAwMDgwMzAwMDAwMzY5ODAwNDAxMzMwMDEwMEM1OEQwMDQwN0QKKzoxMDBGRTAwMDgxQjIwMDAwMkUwMDAwNDA0Mzk5MDEwMEZFOTEyMjQwOTIKKzoxMDBGRjAwMEU3NkQwMDAwMzIwMDAwNDA0Mzk5MDEwMDA2OTJBMjQwRDQKKzoxMDEwMDAwMEU1NkQwMDAwQ0M5NjAwNDA4MTMyMDEwMDI0MDAyMDBCRTkKKzoxMDEwMTAwMEUwQjEwMTAwMjgwMDIwMTNFMEIxMDEwMDIyMDAyMDA2MDkKKzoxMDEwMjAwMEU0QjEwMTAwMTQwMDIwMEFFMEIxMDEwMEM1OEQyMjA5REQKKzoxMDEwMzAwMDgwMzAwMDAwMzY5ODAwNDAxMzMwMDEwMEM1OEQwMDQwMUMKKzoxMDEwNDAwMDgxQjIwMDAwQ0M5NjAwNDA4MTMyMDEwMDg1OTYwMDQwQkMKKzoxMDEwNTAwMDgxMzIwMTAwMTQ5MjIyNDExOTdDMDAwMDAwMDAwMDBCMzMKKzoxMDEwNjAwMDk5QjAwMTAwMDQwMDFGMTU5ODUwMDAwMDE0OTIyMDAxNEYKKzoxMDEwNzAwMDk4NkMwMDAwNzAwMDAwMDM0OEM5MDEwMDAwMDAyRTQ2NzMKKzoxMDEwODAwMDFGOTAwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDAzQkEKKzoxMDEwOTAwMEYwQjEwMTAwMDAwMDAwNDI2MUIxMDEwMEEwMDAwMEE0MTUKKzoxMDEwQTAwMDYyREQwMTAwMTE5MkE4MDBFMDMxMDAwMDAwMDAwMDA1OUYKKzoxMDEwQjAwMDQ4QjEwMTAwQUMwMDJGMDAxMEIwMDEwMDAwMDAwMDAxOTkKKzoxMDEwQzAwMEUwQzEwMTAwMTQwMDJGMTUxMEMwMDEwMDAwMDAwMDBBNEIKKzoxMDEwRDAwMDgwQjAwMTAwMDAwMDYwMDE4MEQwMDEwMDAwMDAwMDQ3RTYKKzoxMDEwRTAwMDE5OTAwMTAwOTY5MTIyMDk4MDMyMDAwMDM2OTgwMDA5N0IKKzoxMDEwRjAwMDgwMzAwMTAwOTY5MTAwNDAxM0IwMDAwMDAwODAwMDAzOTIKKzoxMDExMDAwMDQyQzkwMTAwMDAwMDAwRjA4MkIwMDEwMDEzMDAwMDQwNUQKKzoxMDExMTAwMDg3OTgwMTAwMDAwMDAwNEM0M0MxMDEwMDAwOTcwMEYwRDcKKzoxMDExMjAwMDg0MzAwMTAwQzA4RDAwNUMxRjkwMDAwMDJDMDAyMDQwMjYKKzoxMDExMzAwMEU3QjEwMTAwMkQwMDIwNDBFN0IxMDEwMEMwOEQwMDQyNjEKKzoxMDExNDAwMDE5ODAwMDAwRjI5NjAwNDA4MTMyMDEwMDBCOTgwMDQ4OUYKKzoxMDExNTAwMDk1MzAwMTAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwMjEKKzoxMDExNjAwMDYyREQwMTAwMjk5MkE4NDAxMzMwMDAwMDFCODQwMDg4MzIKKzoxMDExNzAwMDFDQjAwMDAwMkY5MjAwMDU0OEIxMDAwMDJFOTIwMDQwRTQKKzoxMDExODAwMDEzQjAwMDAwMDAwMDAwMDAxMkIwMDEwMDA4MDAwMDQwOTEKKzoxMDExOTAwMDQzOTkwMTAwMTQwMDJERjA4MkIwMDEwMDA0MDAyMkYwRjgKKzoxMDExQTAwMDg0MzAwMDAwMTMwMDAwNDA4Nzk4MDEwMDAwOTcwMDQwNDEKKzoxMDExQjAwMDgxMzIwMTAwMDAwMDAwNUMxRjkwMDEwMDQ3OTIwMDA5OEQKKzoxMDExQzAwMDAwQjAwMDAwQzA4RDg3NDIxOTEwMDAwMDhCMDAyRjQ3MkYKKzoxMDExRDAwMDE5ODAwMTAwQzA4RDAwNDBFNzkxMDAwMDJGMDAwMDQwMDEKKzoxMDExRTAwMDQ3OTkwMTAwNDU5MjIyNDdFNzdEMDAwMDY2OTUwMDQwM0YKKzoxMDExRjAwMEU3MzEwMTAwNDU5MjIyMDA4MDMyMDAwMDQwOTJBMjQwNzcKKzoxMDEyMDAwMDFGN0MwMDAwRTI5NTAwNDA4MTMyMDEwMDQ1OTIwMDQwQzEKKzoxMDEyMTAwMDgxQjIwMDAwMzAwMDAwNDA0Mzk5MDEwMDMyMDAyREYyRkQKKzoxMDEyMjAwMDk0QjAwMTAwOEE5NjAwRjIwMjMwMDEwMDkxOTYwMDRCQzIKKzoxMDEyMzAwMDAyQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDQ2OTIwMDQwRTUKKzoxMDEyNDAwMDAxQjAwMDAwMDAwMDAwNDAwNUIwMDEwMDRDOTIyMjAwRjcKKzoxMDEyNTAwMDgwMzIwMDAwNEI5MkEyNDIxOTdDMDAwMERGOTYwMDQwRDEKKzoxMDEyNjAwMDgxMzIwMTAwNEM5MjAwNDA4MUIyMDAwMDBGOTcwMDQwOTMKKzoxMDEyNzAwMDgxMzIwMTAwRDg5MjIyNUMxRjdDMDAwMDAwMDAwMDVDREIKKzoxMDEyODAwMDFGODAwMTAwMDA4MDAwMTA0MkM5MDEwMDU0OTIyMjQwREEKKzoxMDEyOTAwMEUzNkQwMDAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwNTYKKzoxMDEyQTAwMDYyREQwMTAwNTE5MkE4NDA4MTMyMDAwMDFCODQwMDg4NTkKKzoxMDEyQjAwMDFDQjAwMDAwRDg5MjAwMDU0OEIxMDAwMEQ0OTUwMDQwNTEKKzoxMDEyQzAwMDgxMzIwMTAwNUI5MkEyMDg4MDMyMDAwMDVCOTJBMjE2N0MKKzoxMDEyRDAwMDgwMzIwMDAwQzU5NzAwNEQ4MTMwMDEwMDAwODIwMDAyN0QKKzoxMDEyRTAwMDA0REMwMTAwMDU4QTAwNDA4MUIyMDAwMDc0MDAwMDQwNjcKKzoxMDEyRjAwMDQzOTkwMTAwMDAwMDAwRjg4MkIwMDEwMDAwMDAwMEYwRjYKKzoxMDEzMDAwMDg0QjAwMTAwMDAwMDAwNDE5NkIwMDEwMDY5OTIyMjQyQzEKKzoxMDEzMTAwMDk2MTQwMDAwMDA4MDAwMTA0NEM5MDEwMDY0MDA2ODQwNzkKKzoxMDEzMjAwMDk3OTgwMTAwMDAwMDAwNDFGMEIxMDEwMDAwMDAwMDQyNjgKKzoxMDEzMzAwMEYwQjEwMTAwNzAwMDAwMDVFMEM5MDEwMDAwMDAwMDQ1QTcKKzoxMDEzNDAwMDYxQjEwMTAwMjAwMDAwMTA2MkREMDEwMDY2OTJBODQwM0EKKzoxMDEzNTAwMDgxMzIwMDAwMDAwMDAwNUMxRjkwMDEwMDAwMDAwMDQ1ODkKKzoxMDEzNjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDZBOTJBODVDREEKKzoxMDEzNzAwMDFGMDAwMDAwMUI4NDAwODgxQ0IwMDAwMDVFMDEyRDA1Q0EKKzoxMDEzODAwMDQ4QjEwMTAwNkU5MjQ3RjIxMjMwMDAwMDAwOTkzRjQyQ0UKKzoxMDEzOTAwMDEzRjAwMTAwNzM5MjIyNDdFNzdEMDAwMDZCODQxRjg4RTEKKzoxMDEzQTAwMDFDQjAwMDAwNkQ5MjAwNDA4MUIyMDAwMDAwMDAwMDQ3QjgKKzoxMDEzQjAwMEU3OTEwMTAwMDQwMDFGMDk5NkU0MDEwMDAwODAwMDEwN0QKKzoxMDEzQzAwMDQ0QzkwMTAwMDAwMDAwNDRGMUIxMDEwMDAwMDA2OEE4MTgKKzoxMDEzRDAwMDk3QzAwMTAwMDAwMDAwMDNFMEIxMDEwMDAwODAwMDAzOUQKKzoxMDEzRTAwMDQ0OTkwMTAwMDAwMDAwNDQ2MUIxMDEwMDAwMDAwMDEwQjgKKzoxMDEzRjAwMDYyQjEwMTAwN0I5MkE4NDBFMTMxMDAwMDFCODQwMDg4QUIKKzoxMDE0MDAwMDFDQjAwMDAwMDA5OTNGNDIxM0YwMDEwMDdGOTI0NzA1OTUKKzoxMDE0MTAwMDQ4MzEwMDAwM0YwMDAwRjM5Njg4MDEwMDAwMDAwMDQwQzIKKzoxMDE0MjAwMEU3QjEwMTAwMDAwMDFGNDA4MUIyMDEwMDg3OTIyMjRCMEEKKzoxMDE0MzAwMDgwMzIwMDAwMDAwMDAwNTU2MUIxMDEwMDAwMDAwMDRCNDcKKzoxMDE0NDAwMDYyQjEwMTAwODU5MkE4NDA4MTMyMDAwMDAwMDAwMDA3Q0YKKzoxMDE0NTAwMDE2QjAwMTAwMDA2MjAwMEIxNkRDMDEwMDY2OTUwMDQwMkEKKzoxMDE0NjAwMDgxMzIwMTAwOUY5MjIyMDA4MDMyMDAwMDE1OTcwMDVGQjgKKzoxMDE0NzAwMDAxMTAwMTAwODk5MjIyNDA5NTZDMDAwMDAwODAwMDEwNEMKKzoxMDE0ODAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDAzNTgKKzoxMDE0OTAwMEYwQjEwMTAwMDAwMDAwNDI2MUIxMDEwMDAwMDAwMDEwNDUKKzoxMDE0QTAwMDYyQjEwMTAwOTE5MkE4MDBFMDMxMDAwMDFCODQwMDg4MjUKKzoxMDE0QjAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDA0ODAwMDAzREEKKzoxMDE0QzAwMDQyQzkwMTAwMDAwMDAwRjIwMkIwMDEwMDhBOTYwMDUyRjkKKzoxMDE0RDAwMDk1MzAwMTAwRTI5NTAwNDA4MTMyMDEwMDg5OTIyMjQxNUQKKzoxMDE0RTAwMDk3NTAwMDAwMEM4MDAwMDM0MkM5MDEwMDAwMDAwMEYwOEEKKzoxMDE0RjAwMDAwQjAwMTAwMDAwMDAwNUMwMTgwMDEwMDkxOTYwMDRCRUIKKzoxMDE1MDAwMDAyQjAwMDAwODk5MjAwMDU0OEIxMDAwMDE2OTgwMDQwMjIKKzoxMDE1MTAwMDAzMzAwMTAwMTc4MDAwMDM0NEM5MDEwMDAwRjAwMDBDRjMKKzoxMDE1MjAwMDk2ODgwMTAwMDAwMDYzNEM5N0YwMDEwMDEwODAwMDAzRDIKKzoxMDE1MzAwMDQ0QzkwMTAwMDAwMDAwQUJFMUIxMDEwMEI3OTcwMDVFQjMKKzoxMDE1NDAwMDA1MTAwMTAwMDMwMDAwMDcxQUY0MDEwMDA3MDAwMDA3NUUKKzoxMDE1NTAwMDE2ODgwMTAwMDBCNTAwMEQ0NkM5MDEwMEE5OTIzMDQwNkYKKzoxMDE1NjAwMDgxMzIwMDAwMDAwMDAwMEJFNjgxMDEwMDAwQjcwMDBEOTEKKzoxMDE1NzAwMDQ2QzkwMTAwMDAwMDAwMEJFNjgxMDEwMDEwMDAxMDBGQjkKKzoxMDE1ODAwMDk0RjQwMTAwRTk5OTAwNUY5NTA0MDEwMDZCOTYwMDQwMTYKKzoxMDE1OTAwMDgxMzIwMTAwQjM5MjIyNTBGRDdGMDAwMEIxOTI0MzQwOUUKKzoxMDE1QTAwMDgxMzIwMDAwMDAwMDFCNDEzMUQzMDEwMDAwMDAyRTA1RjQKKzoxMDE1QjAwMDQ4QjEwMTAwMDAwMDAwNDBFMUIxMDEwMDAwMDAwMDQwMUUKKzoxMDE1QzAwMDBGQjAwMTAwQ0Q5NTAwNDE4MTMwMDEwMDA1OEEwMDQwMzcKKzoxMDE1RDAwMDgxQjIwMDAwRDQ5NTAwNDA4MTMyMDEwMEM1OTJBMjA4N0EKKzoxMDE1RTAwMDgwMzIwMDAwQzU5MkEyMTY4MDMyMDAwMDAwODIwMDAyMDQKKzoxMDE1RjAwMDA0REMwMTAwMDAwMDAwNDUwM0YwMDEwMDAwMDAwMDAxRDAKKzoxMDE2MDAwMDAwQzAwMTAwQkU5MjM3NUM2MTMxMDAwMDAwMDAwMDFCODkKKzoxMDE2MTAwMDYyQjEwMTAwQzI5MjI4NDA4MTMyMDAwMEJGOTIwMDQwQjYKKzoxMDE2MjAwMDgxQjIwMDAwMDAwMDAwMDA2MkIxMDEwMEMyOTJBODQwMzcKKzoxMDE2MzAwMDgxMzIwMDAwMDU4QTE3NDA4MUIyMDAwMDc0MDAyMjQwMDgKKzoxMDE2NDAwMEYxQjEwMTAwMDAwMDAwNDBFMUIxMDEwMDBCOTgwMDRBMzcKKzoxMDE2NTAwMDk1MzAwMTAwRjI5NjAwNUMxRjEwMDEwMDVCOTIwMDQwODMKKzoxMDE2NjAwMDgxQjIwMDAwMkYwMDAwNDA0Nzk5MDEwMEQ2OTIyMjQ3MjYKKzoxMDE2NzAwMEU3N0QwMDAwNjY5NTAwNDBFNzMxMDEwMEQ2OTIyMjAwMjgKKzoxMDE2ODAwMDgwMzIwMDAwRDE5MkEyNDAxRjdDMDAwMEUyOTUwMDQwMTEKKzoxMDE2OTAwMDgxMzIwMTAwRDY5MjAwNDA4MUIyMDAwMDMwMDAwMDQwNEIKKzoxMDE2QTAwMDQzOTkwMTAwMzIwMDJERjI5NEIwMDEwMDhBOTYwMEYyQjUKKzoxMDE2QjAwMDAyMzAwMTAwOTE5NjAwNEIwMkIwMDAwMDAwMDAwMDA1Q0UKKzoxMDE2QzAwMDQ4QjEwMTAwMEI5ODAwNDg5NTMwMDEwMEYyOTYwMDVDOEIKKzoxMDE2RDAwMDFGMTAwMTAwREI5Mjg3NDIxOTEwMDAwMDhCMDAyRjQ3N0EKKzoxMDE2RTAwMDE5ODAwMTAwMDAwMDAwNDBFNzkxMDEwMDM2OTgwMDQyOTcKKzoxMDE2RjAwMDgxMzAwMTAwQzA4RDAwNDA4MUIyMDAwMEYyOTYwMDQwQjAKKzoxMDE3MDAwMDgxMzIwMTAwQzA4RDAwNUMxRjkwMDAwMEJBMDAyMDQwQjMKKzoxMDE3MTAwMEU1QjEwMTAwQTM5ODAwNDA4MTMyMDEwMEMwMDAwMDQwMDMKKzoxMDE3MjAwMDQzOTkwMTAwQzQwMDJERjA4MkIwMDEwMEVFOTgwMEYwNTIKKzoxMDE3MzAwMDg0MzAwMTAwRTI5NTAwNDA4MTMyMDEwMDM2OTgwMDQ1NzYKKzoxMDE3NDAwMDgxMzAwMTAwQzA4RDIyNDIxOTdDMDAwMEM1OTcwMDNBMEIKKzoxMDE3NTAwMDgxMzAwMTAwQzA4RDAwNDA4MUIyMDAwMDA0MDAwMDQwRDMKKzoxMDE3NjAwMDgxQjIwMDAwRDQ5NTAwNDA4MTMyMDEwMEYwOTJBMjA4QkQKKzoxMDE3NzAwMDgwMzIwMDAwRjA5MkEyMTY4MDMyMDAwMEM1OTcwMDQ3MjgKKzoxMDE3ODAwMDgwMzAwMTAwMDA4MjAwMDIwNERDMDEwMDA1OEEwMDQwNzQKKzoxMDE3OTAwMDgxQjIwMDAwMTA4MDAwMDM0NEM5MDEwMDAwRTEwMEE2RUUKKzoxMDE3QTAwMDg0QjAwMTAwMDAwMDAwNDBGMUIxMDEwMDAwMDAwMDQwRTEKKzoxMDE3QjAwMEYxQjEwMTAwMDAwMDYwMDc4NDk0MDEwMEI3OTcwMDVFNUEKKzoxMDE3QzAwMDA1MTAwMTAwQzA4RDAwNDA4MUIyMDAwMDhBMDAwMDQwNzkKKzoxMDE3RDAwMDQ3OTkwMTAwRTI5NTAwNDFFNzQxMDEwMEM1OEQwMDQwQjUKKzoxMDE3RTAwMDgxQjIwMDAwQ0M5NjAwNDA4MTMyMDEwMDg1OTYwMDQwMTUKKzoxMDE3RjAwMDgxMzIwMTAwMDAwMDAwMDEyQ0IwMDEwMDAwMDAwMDE1NDIKKzoxMDE4MDAwMDEwQjAwMTAwMDAwMDAwMDAxMEMwMDEwMDA0MDAxRjBBMTkKKzoxMDE4MTAwMDJDNTAwMDAwMDAwMDAwMTAzMkIwMDEwMDA3MDAwMDBCNDcKKzoxMDE4MjAwMDk2ODgwMTAwMEM5MzI2NDc5NzI0MDAwMDAwMDAwMDQxOTEKKzoxMDE4MzAwMDk3QzAwMTAwMEM5MzIzNEIwQzZDMDAwMDQ5OTgwMDRCOUYKKzoxMDE4NDAwMDA0MzAwMTAwMDAwMDAwNTAzM0MwMDEwMDAwMDAwMDAyMUQKKzoxMDE4NTAwMDEwQzAwMTAwMDAwMDAwMDIxNkMwMDEwMDAwMDAwMDA2RDgKKzoxMDE4NjAwMDA0QjAwMTAwNDk5ODAwNEIwNDUwMDEwMDBEOTMwMDQwNjIKKzoxMDE4NzAwMDgxQjIwMDAwNDk5ODAwMDYwNDMwMDEwMDEzOTNBMjQ4ODkKKzoxMDE4ODAwMDFGN0MwMDAwMTE5Mzg0NDgxRjEwMDAwMEFDMDAwMDQwMzIKKzoxMDE4OTAwMDQ3OTkwMTAwMTM5MzAwMEFFMEMxMDAwMDAwMDAwMDBBMEMKKzoxMDE4QTAwMDAyQjAwMTAwRUY5NDAwMDE4QzMwMDEwMDAwMDAwMDQzMDEKKzoxMDE4QjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDE0OTNBODQwRjYKKzoxMDE4QzAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDA1NkQKKzoxMDE4RDAwMDQ4QjEwMTAwMDAwMDAwMDIxMEMwMDEwMDIxOTMyMjA2NUYKKzoxMDE4RTAwMDE0NTAwMDAwM0E5NzAwNDUxRjAwMDEwMDAwOTMyMjVDNEQKKzoxMDE4RjAwMDFGN0MwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwQTMKKzoxMDE5MDAwMDYyREQwMTAwMUQ5M0E4NUMxRjAwMDAwMDFCODQwMDg4OUQKKzoxMDE5MTAwMDFDQjAwMDAwMDA5MzAwMDU0OEIxMDAwMDAwMDAwMDBCNUYKKzoxMDE5MjAwMDFCQjAwMTAwMDgwMDJENDA4NUIwMDEwMDAwMDAwMEYwNTAKKzoxMDE5MzAwMDgyQjAwMTAwMDAwMDAwNDAwNUIwMDEwMDAwOTcwMDQxQTYKKzoxMDE5NDAwMDg3MzAwMTAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwMzcKKzoxMDE5NTAwMDYyREQwMTAwMjc5M0E4NDA4MTMyMDAwMDFCODQwMDg4Q0IKKzoxMDE5NjAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDJEOTMyMjA5QzEKKzoxMDE5NzAwMDgwMzAwMDAwMzY5ODAwNDAxMzMwMDEwMDMxOTMyMjQ0M0IKKzoxMDE5ODAwMDE5N0MwMDAwMzY5ODAwNEY4MTMwMDEwMDMxOTNBMjQ3NDYKKzoxMDE5OTAwMDFGN0MwMDAwMDAwMDAwNDQxOTgwMDEwMEZGMDcwMDA4QzAKKzoxMDE5QTAwMDAwOEMwMTAwM0Y5MzIyNEExRjdDMDAwMDM3OTNBMjE2NEYKKzoxMDE5QjAwMDAyMzAwMDAwRTI5NTAwNDA4MTMyMDEwMDJGMDAyMDQwRkIKKzoxMDE5QzAwMEU3QjEwMTAwQzA4RDAwNDA4MUIyMDAwMDJEMDAyRDA4NUMKKzoxMDE5RDAwMDJBQjAwMTAwM0I5MzIyNDIxOTdDMDAwMDBGOTcwMDQwN0YKKzoxMDE5RTAwMDgxMzIwMTAwM0M5MzAwNDA4MUIyMDAwMERGOTYwMDQwNEMKKzoxMDE5RjAwMDgxMzIwMTAwMzAwMDJFMDAyQUQwMDEwMDMyMDAyQTE1NjkKKzoxMDFBMDAwMEU0QjEwMTAwQzA4RDAwMTZFNEIxMDAwMDUyOTMyMjE2MkIKKzoxMDFBMTAwMDAyMzAwMDAwMDAwMDAwMDgyQUIwMDEwMDBBOTkwMDQwQ0UKKzoxMDFBMjAwMDk1MzAwMTAwNDQ5M0EyNDAxMTZDMDAwMDUzOTMyMjQwNzIKKzoxMDFBMzAwMDJENkMwMDAwQUMwMDAwNDA0Nzk5MDEwMEIwMDAyQjAxNjQKKzoxMDFBNDAwMEUwQzEwMTAwMDAyQjAwQTYxNkIwMDEwMDAwMDAwMDAxNUIKKzoxMDFBNTAwMEUwRDEwMTAwMEU5ODAwMDg4MDMwMDEwMDRCOTMwMDVFMzkKKzoxMDFBNjAwMDE3OTAwMDAwMkY5ODAwNDM2MTMxMDEwMDAwMDAwMDQzRUYKKzoxMDFBNzAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDRDOTNBODQwRkMKKzoxMDFBODAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDA1QUIKKzoxMDFBOTAwMDQ4QjEwMTAwMTY5ODAwMDcxNjE0MDEwMEI3OTcwMDVFQzAKKzoxMDFBQTAwMDA1MTAwMTAwRTI5NTAwNDA4MTMyMDEwMDJGMDAyMDQwMjYKKzoxMDFBQjAwMEU3QjEwMTAwQzU4RDAwNDA4MUIyMDAwMDAwMDAwMDBCQkQKKzoxMDFBQzAwMDFCQjAwMTAwMDQwMDFGMTUxQTUwMDAwMDYwOTMyMDE2N0YKKzoxMDFBRDAwMDFBNkMwMDAwNzAwMDAwMDM0OEM5MDEwMDAwMDAyMjUwODkKKzoxMDFBRTAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDAwQUUKKzoxMDFBRjAwMEUwQjEwMTAwMDAwMDAwNDI2MUIxMDEwMEEwMDAwMEE0QkIKKzoxMDFCMDAwMDYyREQwMTAwNUQ5M0E4NDYxRjEwMDAwMDAwMDAwMDA1ODMKKzoxMDFCMTAwMDQ4QjEwMTAwMDAwMDAwMDAxMEIwMDEwMDAwMDAwMDE1RjUKKzoxMDFCMjAwMDEwQzAwMTAwMDAwMDAwMEEyQUIwMDEwMDAwMDAwMDBBRjUKKzoxMDFCMzAwMDJDRDAwMTAwQUMwMDJGNDAyM0IwMDEwMDY3OTM4NDQ1RjYKKzoxMDFCNDAwMDFGMTAwMDAwNjg5MzAwMEFFMEMxMDAwMDAwMDAwMDBBQjYKKzoxMDFCNTAwMDAyQjAwMTAwNzE5NzAwNDAzNUIwMDAwMDAwODAwMDE5MEMKKzoxMDFCNjAwMDQyQzkwMTAwNzA5MzIyNDBFMzZEMDAwMDAwMDAwMDQzNzEKKzoxMDFCNzAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDZDOTNBODQwREIKKzoxMDFCODAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDA1QUEKKzoxMDFCOTAwMDQ4QjEwMTAwODA5M0EyMDIxQTUwMDAwMDgxOTMyMjQwQjQKKzoxMDFCQTAwMDJENkMwMDAwMDA4MDAwMTA0NEM5MDEwMDAwMDAwMDUwQUUKKzoxMDFCQjAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMEZGMDcwMDA4Q0YKKzoxMDFCQzAwMEUwOEQwMTAwMDAwMDAwNDI2MUIxMDEwMDAwMDAwMDEwNDIKKzoxMDFCRDAwMDYyQjEwMTAwNzc5M0E4NDA4MTMyMDAwMDFCODQwMDg4MjUKKzoxMDFCRTAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDJGMDAyMDQ3OTQKKzoxMDFCRjAwMEU3QjUwMTAwMEM4MDAwMDM0MkM5MDEwMDEwMDAwMEYwQUQKKzoxMDFDMDAwMDEwQzgwMTAwRjAwNzAwNDAxQjk4MDEwMDgxOTMwMDVDQTAKKzoxMDFDMTAwMDExODAwMDAwMDAwMDAwMDIxMEMwMDEwMEY4OTUwMDQwOTMKKzoxMDFDMjAwMDFGMDAwMTAwMDAwMDAwMDU0OEIxMDEwMDg1OTMyMzBENEQKKzoxMDFDMzAwMDJDNkMwMDAwMDAwMDAwNDAxRjkwMDEwMDhFOTMyMjQ2OTMKKzoxMDFDNDAwMDFGN0MwMDAwMDAwMDAwNDYxRjgwMDEwMDcwODAwMDAzMjAKKzoxMDFDNTAwMDQyQzkwMTAwOEU5MzIyNDBFMzZEMDAwMDAwMDAwMDQyNjMKKzoxMDFDNjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDhBOTNBODQwQ0MKKzoxMDFDNzAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDA1QjkKKzoxMDFDODAwMDQ4QjEwMTAwMDgwMDJENDA4NUIwMDEwMDAwMDAwMEYwQkYKKzoxMDFDOTAwMDgyQjAwMTAwMDAwMDAwNDAwNUIwMDEwMDAwOTcwMDQxNDMKKzoxMDFDQTAwMDg3MzAwMTAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwRDQKKzoxMDFDQjAwMDYyREQwMTAwOTM5M0E4NDA4MTMyMDAwMDFCODQwMDg4RkMKKzoxMDFDQzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDk5OTMyMjA5RjIKKzoxMDFDRDAwMDgwMzAwMDAwMzY5ODAwNDAxMzMwMDEwMDlEOTMyMjQ0NkMKKzoxMDFDRTAwMDE5N0MwMDAwMzY5ODAwNEY4MTMwMDEwMDlEOTNBMjQ3NzcKKzoxMDFDRjAwMDFGN0MwMDAwMDAwMDAwNDQxOTgwMDEwMEZGMDcwMDA4NUQKKzoxMDFEMDAwMDAwOEMwMTAwQjI5MzIyNEExRjdDMDAwMEEzOTNBMjE2MEMKKzoxMDFEMTAwMDAyMzAwMDAwRTI5NTAwNDA4MTMyMDEwMDJGMDAyMDQwOTcKKzoxMDFEMjAwMEU3QjEwMTAwQzA4RDAwNDA4MUIyMDAwMDJEMDAyRDA4RjgKKzoxMDFEMzAwMDJBQjAwMTAwQUU5MzIyNDIxOTdDMDAwMEE3OTNBMkYzQkYKKzoxMDFENDAwMDg0MzAwMDAwMDAwMDAwQTU4NUIwMDEwMDAwMDAwMDQxQzMKKzoxMDFENTAwMDg1RDAwMTAwRDQwMDNFNDE4NUUwMDEwMEFCOTMyMjQwRDQKKzoxMDFENjAwMDFGN0MwMDAwMDAwMDAwNUExMTkwMDEwMDBCMDAwMDA4QzkKKzoxMDFENzAwMEU0RjUwMTAwMEY5NzAwNDA4MTMyMDEwMEFGOTMwMDQwNkQKKzoxMDFEODAwMDgxQjIwMDAwREY5NjAwNDA4MTMyMDEwMDMwMDAyRTAwNTkKKzoxMDFEOTAwMDJBRDAwMTAwMzIwMDJBMTVFNEIxMDEwMEMwOEQwMDE2REUKKzoxMDFEQTAwMEU0QjEwMDAwQjU5M0EyMTYwMjMwMDAwMEUyOTUwMDQwQjUKKzoxMDFEQjAwMDgxMzIwMTAwMDQ5NDAwNDA4MUIyMDAwMDJEMDAyRDA4MDIKKzoxMDFEQzAwMDJBQjAwMTAwQzM5MzIyNDcxRjdDMDAwMEJGOTMyMjQyMjgKKzoxMDFERDAwMDE5N0MwMDAwQkE5M0EyRjM4NDMwMDAwMDAwMDAwMEE1MzMKKzoxMDFERTAwMDg1QjAwMTAwMDAwMDAwNDE4NUQwMDEwMEQ0MDAzRTQxRDMKKzoxMDFERjAwMDg1RTAwMTAwQkU5MzIyNDAxRjdDMDAwMDAwMDAwMDVBRDUKKzoxMDFFMDAwMDExOTAwMTAwMEIwMDAwMDhFNEY1MDEwMDU4MDEyRDAwQkQKKzoxMDFFMTAwMDJBRDAwMTAwNjAwMTJERjAxMEIwMDEwMDAwMDAwMEYwOTgKKzoxMDFFMjAwMDJDQjAwMTAwNDc5MTAwNDA4MUIyMDAwMDBBOTkwMDQxQTYKKzoxMDFFMzAwMDk1MzAwMTAwQ0I5M0EyMDg4MDMyMDAwMENCOTNBMjE2MEMKKzoxMDFFNDAwMDgwMzIwMDAwMDAwMDAwNDE5N0IwMDEwMEM5OTMyMzBEQ0IKKzoxMDFFNTAwMDAyNkMwMDAwMDAwMDAwNDE5N0MwMDEwMDkxOTYwMDRCMDkKKzoxMDFFNjAwMDAyQjAwMDAwMDQ5NDAwMDU0OEIxMDAwMEFDMDAyRjAxNEUKKzoxMDFFNzAwMDE0QjAwMTAwQjAwMDJCMDFFMEMxMDEwMDAwMkIwMEE2NEUKKzoxMDFFODAwMDE2QjAwMTAwMDAwMDAwMDFFMEQxMDEwMERCOTMyMzBEM0EKKzoxMDFFOTAwMDAyNkMwMDAwMDA4MDAwMTA0NEM5MDEwMDAwMDAwMDUwRTYKKzoxMDFFQTAwMEYxQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDQyQTgKKzoxMDFFQjAwMDYxQjEwMTAwMDAwMDAwMTA2MkIxMDEwMEQ0OTNBODAwREMKKzoxMDFFQzAwMEUwMzEwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDA1MDkKKzoxMDFFRDAwMDQ4QjEwMTAwMEM4MDAwMDM0MkM5MDEwMDEwMDAwMEYwNkQKKzoxMDFFRTAwMDIyQzgwMTAwMDAwMDAwNUMyMzgwMDEwMDAwMDAwMDAxMDYKKzoxMDFFRjAwMDg0QjAwMTAwREU5MzIzMEQwMjZDMDAwMDAwMDAwMDBEOTEKKzoxMDFGMDAwMDAyQjAwMTAwMDAwMDAwMDg4MEIwMDEwMEUzOTMyMjQwMEQKKzoxMDFGMTAwMDFCNkMwMDAwMEU5ODAwMDE4NDUwMDEwMEVCOTMyMjQwREUKKzoxMDFGMjAwMDg1NkMwMDAwMDAwMDAwMDE4MEMwMDEwMDEwODAwMDEwREUKKzoxMDFGMzAwMDQ2QzkwMTAwMDAwMDAwNEY0MzgxMDEwMDAwMDAwMDQyM0IKKzoxMDFGNDAwMEYwQjEwMTAwMjAwMDAwNDBGMEM5MDEwMDAwMDAwMDE2QkYKKzoxMDFGNTAwMEYwQjEwMTAwMDAwMDAwNDM2MUIxMDEwMEEwMDAwMEExNDgKKzoxMDFGNjAwMDYyREQwMTAwRTk5M0E4MTFFMDMxMDAwMEZBOTMwMDVFMDAKKzoxMDFGNzAwMDE3OTAwMDAwRUU5MzIzMEQwMjZDMDAwMDAwMDAwMDBEOEUKKzoxMDFGODAwMDAyQjAwMTAwMDAwMDAwMDE4NEQwMDEwMEYzOTMyMjQwNjAKKzoxMDFGOTAwMDFCNkMwMDAwMkY5ODAwNDM2MTMxMDEwMEZBOTMyMjQwMkUKKzoxMDFGQTAwMDg1NkMwMDAwMDAwMDAwMDExMkMwMDEwMDEwODAwMDEwQ0MKKzoxMDFGQjAwMDQ2QzkwMTAwMDAwMDAwNEY0MzgxMDEwMDAwMDAwMDQyQkIKKzoxMDFGQzAwMEYwQjEwMTAwMDAwMDAwMDlGMEIxMDEwMDAwMDAwMDE4QUMKKzoxMDFGRDAwMEYwQjEwMTAwQTAwMDAwQTE2MkREMDEwMEY4OTNBODExOUEKKzoxMDFGRTAwMEUwMzEwMDAwMDAwMDAwNDM2MUIxMDEwMDQwMDAwMDEwM0EKKzoxMDFGRjAwMDYyREQwMTAwRkI5M0E4MEEwMjMwMDAwMDFCODQwMDg4MDgKKzoxMDIwMDAwMDFDQjAwMDAwRTI5NTAwMDU0ODMxMDEwMDAyOTQyMzBENDgKKzoxMDIwMTAwMDAyNkMwMDAwRkYwNzAwMTEwMDhDMDEwMEUyOTUwMDQwRjcKKzoxMDIwMjAwMDgxMzIwMTAwMTY5ODAwMDcxNjE0MDEwMEI3OTcwMDVFNzAKKzoxMDIwMzAwMDA1MTAwMTAwMkYwMDIwNDBFN0IxMDEwMEM1OEQwMDQwRDAKKzoxMDIwNDAwMDgxQjIwMDAwMDA4MDAwMDM0MkM5MDEwMDAwMDAwMEY4RDYKKzoxMDIwNTAwMDgyQjAwMTAwMDAwMDAwRjg4Q0IwMDEwMDAwMDAwMEYwMjgKKzoxMDIwNjAwMDhFQjAwMTAwQzk5NjAwNDAxMzMwMDEwMDAwMDAwMDQwMEUKKzoxMDIwNzAwMDg1QjAwMTAwMDA5NzAwNDE4NzMwMDEwMDg1OTYwMDQwM0YKKzoxMDIwODAwMDgxMzIwMTAwMDA4MDAwMTA0MkM5MDEwMDE1OTQyMjQwRjUKKzoxMDIwOTAwMEUzNkQwMDAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwNDgKKzoxMDIwQTAwMDYyREQwMTAwMTE5NEE4NDA4MTMyMDAwMDFCODQwMDg4ODkKKzoxMDIwQjAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDE3OTQyMjA5N0YKKzoxMDIwQzAwMDgwMzAwMDAwMzY5ODAwNDAxMzMwMDEwMDAwMDAwMDBCMDMKKzoxMDIwRDAwMDFCQjAwMTAwMDAwMDAwMTUxQUQwMDEwMDFFOTRBMjQxOUYKKzoxMDIwRTAwMDE5N0MwMDAwMEE5OTAwNDA5NTMwMDEwMDAwMDAwMDE2OUMKKzoxMDIwRjAwMDgwQjIwMTAwMjc5NDI3MDg4MDMyMDAwMDQ0OTMwMDAwM0EKKzoxMDIxMDAwMDJBQzAwMDAwMEE5OTAwNDE5NTMwMDEwMDAwMDAwMDE2MjUKKzoxMDIxMTAwMDgwQjIwMTAwMjI5NDI3MDg4MDMyMDAwMENCOTMwMDAwOTcKKzoxMDIxMjAwMDJBQzAwMDAwMDAwMDAwNDE5N0IwMDEwMDI1OTQyMzBENTMKKzoxMDIxMzAwMDAyNkMwMDAwMDAwMDAwNDE5N0MwMDEwMDkxOTYwMDRCMjYKKzoxMDIxNDAwMDAyQjAwMDAwMDAwMDAwMDU0OEIxMDEwMEMwOEQyMjQyMkQKKzoxMDIxNTAwMDE5N0MwMDAwQzU5NzAwM0E4MTMwMDEwMEMwOEQwMDQwMTUKKzoxMDIxNjAwMDgxQjIwMDAwMkI5NDAwNEExRjkwMDAwMDBBOTYwMDAwRTQKKzoxMDIxNzAwMDEwMzAwMTAwMDAwMDAwMTUxMEMwMDEwMDAwMDAwMDEwMjgKKzoxMDIxODAwMDMyQjAwMTAwMDcwMDAwMEI5Njg4MDEwMDM5OTQyNjQ3MDEKKzoxMDIxOTAwMDk3MjQwMDAwMDAwMDAwNDE5N0MwMDEwMDM5OTQyMzRCQjAKKzoxMDIxQTAwMDBDNkMwMDAwNDk5ODAwNEIwNDMwMDEwMDAwMDAwMDUwMDYKKzoxMDIxQjAwMDMzQzAwMTAwMDAwMDAwMDIxMEMwMDEwMDAwMDAwMDAyNTYKKzoxMDIxQzAwMDE2QzAwMTAwMDAwMDAwMDYwNEIwMDEwMDQ5OTgwMDRCNTEKKzoxMDIxRDAwMDA0NTAwMTAwM0E5NDAwNDA4MUIyMDAwMDQ5OTgwMDA2ODIKKzoxMDIxRTAwMDA0MzAwMTAwM0Y5NEEyNDQxRjdDMDAwMDAwMDAwMDBCNUIKKzoxMDIxRjAwMDFCQjAwMTAwMDAwMDAwMEEyQ0QwMDEwMDAwMDAwMDBBMDIKKzoxMDIyMDAwMDAyQjAwMTAwRUY5NDAwMDE4QzMwMDEwMDAwODAwMDE5NDEKKzoxMDIyMTAwMDQyQzkwMTAwNDY5NDIyNDBFMzZEMDAwMDAwMDAwMDQzRTMKKzoxMDIyMjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDQyOTRBODQwNEQKKzoxMDIyMzAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDA1RjMKKzoxMDIyNDAwMDQ4QjEwMTAwMDAwMDAwMDIxMEMwMDEwMDRGOTQyMjA2QjYKKzoxMDIyNTAwMDE0NTAwMDAwM0E5NzAwNDUxRjAwMDEwMDJEOTQyMjVDQTUKKzoxMDIyNjAwMDFGN0MwMDAwMDAwMDAwNDc2MUIxMDEwMDQwMDAwMDEwMjkKKzoxMDIyNzAwMDYyREQwMTAwNEI5NEE4NUMxRjAwMDAwMDFCODQwMDg4RjUKKzoxMDIyODAwMDFDQjAwMDAwMkQ5NDAwMDU0OEIxMDAwMDA4MDAyRDQwNEUKKzoxMDIyOTAwMDg1QjAwMTAwMDAwMDAwRjA4MkIwMDEwMDAwMDAwMDQwQTUKKzoxMDIyQTAwMDA1QjAwMTAwMDA5NzAwNDE4NzMwMDEwMDAwMDAwMDQ1QTMKKzoxMDIyQjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDU0OTRBODQwQUIKKzoxMDIyQzAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDA1NjMKKzoxMDIyRDAwMDQ4QjEwMTAwNUE5NDIyMDk4MDMwMDAwMDM2OTgwMDQwMkQKKzoxMDIyRTAwMDEzMzAwMTAwNUQ5NDIyNDQxOTdDMDAwMDM2OTgwMDRGQTEKKzoxMDIyRjAwMDgxMzAwMTAwMDAwMDAwNDQxOTgwMDEwMEZGMDcwMDA4NDAKKzoxMDIzMDAwMDAwOEMwMTAwNkI5NDIyNEExRjdDMDAwMDYzOTRBMjE2OEIKKzoxMDIzMTAwMDAyMzAwMDAwRTI5NTAwNDA4MTMyMDEwMDJGMDAyMDQwOTEKKzoxMDIzMjAwMEU3QjEwMTAwQzA4RDAwNDA4MUIyMDAwMDJEMDAyRDA4RjIKKzoxMDIzMzAwMDJBQjAwMTAwNjc5NDIyNDIxOTdDMDAwMDBGOTcwMDQwRTgKKzoxMDIzNDAwMDgxMzIwMTAwNjg5NDAwNDA4MUIyMDAwMERGOTYwMDQwQjUKKzoxMDIzNTAwMDgxMzIwMTAwMzAwMDJFMDAyQUQwMDEwMDMyMDAyQTE1RkYKKzoxMDIzNjAwMEU0QjEwMTAwQzA4RDAwMTZFNEIxMDAwMDQwOTNBMjE2NTQKKzoxMDIzNzAwMDAyMzAwMDAwRTI5NTAwNDA4MTMyMDEwMDJGMDAyMDQwMzEKKzoxMDIzODAwMEU3QjEwMTAwQzU4RDAwNDA4MUIyMDAwMDBBOTYwMDRBMDUKKzoxMDIzOTAwMDFGMTAwMTAwNTU5MzAwMTAzMkIwMDAwMDhBMDAyMDQwNDkKKzoxMDIzQTAwMEU3QjEwMTAwNzU5NEEyNDExOTdDMDAwMEUyOTUwMDQwNUMKKzoxMDIzQjAwMDgxMzIwMTAwNzg5NDAwNDA4MUIyMDAwMDhBOTYwMDE1QjUKKzoxMDIzQzAwMDk0MzAwMTAwOTE5NjAwNEIwMkIwMDAwMDAwMDAwMDA1MUYKKzoxMDIzRDAwMDQ4QjEwMTAwN0E5NDIyNDIxOTdDMDAwMEM1OTcwMDNBNjYKKzoxMDIzRTAwMDgxMzAwMTAwMzY5ODAwNDU4MTMwMDEwMEMwOEQwMDQwRTkKKzoxMDIzRjAwMDgxQjIwMDAwMDY5MjAwNDUxRjkwMDAwMENDOTYwMDQwN0MKKzoxMDI0MDAwMDgxMzIwMTAwODU5NjAwNDA4MTMyMDEwMDU1OTMwMDAxMjAKKzoxMDI0MTAwMDJDQjAwMDAwRDQ5NTAwNDA4MTMyMDEwMDhEOTRBMjA4QjgKKzoxMDI0MjAwMDgwMzIwMDAwOEQ5NEEyMTY4MDMyMDAwMDAwODIwMDAyRUIKKzoxMDI0MzAwMDA0REMwMTAwMDAwMDAwNDUwM0YwMDEwMDAwMDAwMDAxODEKKzoxMDI0NDAwMDAwQzAwMTAwODY5NDM3NUM2MTMxMDAwMDAwMDAwMDFCNzEKKzoxMDI0NTAwMDYyQjEwMTAwOEE5NDI4NDA4MTMyMDAwMDg3OTQwMDQwRDQKKzoxMDI0NjAwMDgxQjIwMDAwMDAwMDAwMDA2MkIxMDEwMDhBOTRBODQwMUYKKzoxMDI0NzAwMDgxMzIwMDAwMDU4QTE3NDA4MUIyMDAwMDU4MDEyMDA4MEYKKzoxMDI0ODAwMEUwQjEwMTAwNjAwMTIwMTZFMEIxMDEwMENDOTYwMDQ3RTgKKzoxMDI0OTAwMDFGMTAwMTAwODU5NjAwNDA4MTMyMDEwMDU1OTMwMDAxMTQKKzoxMDI0QTAwMDJDQjAwMDAwRDQ5NTAwNDcxRjEwMDEwMEEwOTRBMjA4OTIKKzoxMDI0QjAwMDgwMzIwMDAwQTA5NEEyMTY4MDMyMDAwMDlDOTRBMjQyQjgKKzoxMDI0QzAwMDE5N0MwMDAwMDA4MjAwMDIwNERDMDEwMEEwOTgwMDQwOUEKKzoxMDI0RDAwMDQ3OTkwMTAwRTk4OTAwNDE4OTMwMDEwMDhBOTYwMDE1NzkKKzoxMDI0RTAwMDk0MzAwMTAwOTE5NjAwNEIwMkIwMDAwMDA1OEEwMDQwMzQKKzoxMDI0RjAwMDgxQjIwMDAwMEY5NzAwNDA4MTMyMDEwMDAwMDAwMDRCQzQKKzoxMDI1MDAwMDE5OTAwMTAwQzU5NzAwM0E4MTMwMDEwMDA1OEEwMDQwMEEKKzoxMDI1MTAwMDgxQjIwMDAwNTgwMTIwMDhFMEIxMDEwMDYwMDEyMDE2REUKKzoxMDI1MjAwMEUwQjEwMTAwMEE5NjAwMTAzMjMwMDEwMDU1OTMwMDQwREUKKzoxMDI1MzAwMDEzQjAwMDAwRDQ5NTAwNDA4MTMyMDEwMEIxOTRBMjA4OEMKKzoxMDI1NDAwMDgwMzIwMDAwQjE5NEEyMTY4MDMyMDAwMDAwODIwMDAyQTYKKzoxMDI1NTAwMDA0REMwMTAwMDAwMDAwNDUwM0YwMDEwMDAwMDAwMDAxNjAKKzoxMDI1NjAwMDAwQzAwMTAwQUE5NDM3NUM2MTMxMDAwMDAwMDAwMDFCMkMKKzoxMDI1NzAwMDYyQjEwMTAwQUU5NDI4NDA4MTMyMDAwMEFCOTQwMDQwNkIKKzoxMDI1ODAwMDgxQjIwMDAwMDAwMDAwMDA2MkIxMDEwMEFFOTRBODQwREEKKzoxMDI1OTAwMDgxMzIwMDAwMDU4QTE3NDA4MUIyMDAwMDAwODAwMDAzRUMKKzoxMDI1QTAwMDQyQzkwMTAwMDAwMDAwRjg4MkIwMDEwMDAwMDAwMEY4RkMKKzoxMDI1QjAwMDhDQjAwMTAwMDAwMDAwRjA4RUIwMDEwMEM5OTYwMDQwMTAKKzoxMDI1QzAwMDEzMzAwMTAwMDAwMDAwNDA4NUIwMDEwMDAwOTcwMDQxNzkKKzoxMDI1RDAwMDg3MzAwMTAwODU5NjAwNDA4MTMyMDEwMDAwODAwMDEwQTQKKzoxMDI1RTAwMDQyQzkwMTAwQzA5NDIyNDBFMzZEMDAwMDAwMDAwMDQ1OTQKKzoxMDI1RjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMEJDOTRBODQwMDAKKzoxMDI2MDAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDA1MUYKKzoxMDI2MTAwMDQ4QjEwMTAwNDc5MTIyMDk4MDMwMDAwMDM2OTgwMDQwRkYKKzoxMDI2MjAwMDEzMzAwMTAwNDc5MTAwNDA4MUIyMDAwMDE0MDAyRDQ1OTUKKzoxMDI2MzAwMDFGOTAwMTAwOEY5MTAwNDQxOTkwMDAwMEM4OTRBMjQxOUUKKzoxMDI2NDAwMDE5N0MwMDAwMDAwMDAwNEExRjkwMDEwMEZBOTIwMDQwMkYKKzoxMDI2NTAwMDgxQjIwMDAwQ0M5NjAwNEExRjEwMDEwMDg1OTYwMDQwMTAKKzoxMDI2NjAwMDgxMzIwMTAwNTU5MzAwMDEyQ0IwMDAwMDBBOTYwMDQwMTEKKzoxMDI2NzAwMDgxMzIwMTAwNTU5MzAwMTAzMkIwMDAwMDA2OTIwMDQ1RUYKKzoxMDI2ODAwMDFGOTAwMDAwMDAwMDAwNDEzN0MzMDEwMDAwMDAwMDQxMUUKKzoxMDI2OTAwMDMzQzMwMTAwMzYwMDAwMDEwMkNDMDEwMDAwMDBEMjQwMkIKKzoxMDI2QTAwMDgxQjIwMDAwRDQ5NDg1MTc4MDMyMDAwMDAwMDA5RjQ4NUEKKzoxMDI2QjAwMDAzRDAwMDAwRDY5NDlDMTc4MDMyMDAwMDAwMDA5RjRDOEQKKzoxMDI2QzAwMDAzRDAwMDAwMDAwMDgwMDEzNEMzMDEwMDAyMDAyRDExN0UKKzoxMDI2RDAwMDEwQzEwMDAwREI5NDAwNDA0M0MxMDAwMERCOTQwMDUwQjcKKzoxMDI2RTAwMDQzQzEwMDAwMjAwMDAwQTE0MkM5MDEwMERGOTQyMjQwNDQKKzoxMDI2RjAwMEU1NkQwMDAwMDQwMEEyNDBFNTdEMDAwMDAwMDAwMDQwMDAKKzoxMDI3MDAwMDIzQjAwMTAwMDAwMDgwNDkxRjkwMDEwMDAwMDBBMjQxOTkKKzoxMDI3MTAwMDIzRDAwMDAwREI5NDAwNTA0M0QxMDAwMDQwODAwMDAzMzAKKzoxMDI3MjAwMDQ0QzkwMTAwMDAwMDAwNEFGMEIxMDEwMDAwMDAwMDQwNkYKKzoxMDI3MzAwMEYxQjEwMTAwMDAwMDAwMTJGMEIxMDEwMEU2OTUwMDQxODYKKzoxMDI3NDAwMEUxMzEwMTAwMDA4MDAwNDM0NEM5MDEwMDEwMDAwMDQwNTUKKzoxMDI3NTAwMEYxOTkwMTAwMDAwMDAwNDhGMEIxMDEwMDAwMDAwMDQ5QkIKKzoxMDI3NjAwMEYwQjEwMTAwNDAwMDAwMDNFMEM5MDEwMDAwMDAwMDQ1OTUKKzoxMDI3NzAwMDYxQjEwMTAwMDAwMDAwNDM2MkIxMDEwMDAwMDBBODQwMDcKKzoxMDI3ODAwMDgxQjIwMDAwRUM5NDAwNDA4MUIyMDAwMEJBMDAyMDQwMDkKKzoxMDI3OTAwMEU1QjEwMTAwQjAwMDJGMDE4Q0QwMDEwMDAwMDAwMDQ2MUYKKzoxMDI3QTAwMEUwQzEwMTAwQUMwMDJGNDAxM0IwMDEwMENDMDAyRDAxQUUKKzoxMDI3QjAwMEUwQzEwMTAwRjY5NDlDMTc4MDMyMDAwMDEzOTkwMDQwOUMKKzoxMDI3QzAwMDgxMzIwMTAwRjg5NDIyNDcxOTdDMDAwMDAwMDAwMDVGNkMKKzoxMDI3RDAwMDEzOTAwMTAwQTM5ODAwNDcxOTEwMDEwMEMwMDAyRDQ0NzgKKzoxMDI3RTAwMDFGOTAwMTAwQzQwMDJERjA4MkIwMDEwMEVFOTgwMEYwQUYKKzoxMDI3RjAwMDg0QjAwMDAwOTAwMDJEMDU0OEIxMDEwMDBEOTVBMjRCNUEKKzoxMDI4MDAwMDFGN0MwMDAwNjA5NUEyNEMxRjdDMDAwMDBEOTUxRjFDRDIKKzoxMDI4MTAwMEUwNkQwMDAwMTA5NUEyMDE4MDMyMDAwMEE4MDAyRDQ2NTYKKzoxMDI4MjAwMDhGQjAwMTAwMDY5NTFGMUNFMDZEMDAwMEI0MDAwMDQwNTEKKzoxMDI4MzAwMDQzOTkwMTAwMDg5NTIyRjAzQTZDMDAwMDVEOTUxRkYwNjUKKzoxMDI4NDAwMDNBNkMwMDAwMDAwMEEyNDA4MEIyMDAwMDAwMDA4MDRGRkYKKzoxMDI4NTAwMDhGQjAwMTAwOEEwMDAwNDA0Mzk5MDEwMDVFOTUyMDQyM0MKKzoxMDI4NjAwMEU3NkQwMDAwMEM5NTIyNDA4MDMyMDAwMDAwMDA4MDU5ODYKKzoxMDI4NzAwMDhGQjAwMTAwMDAwMDgwNTg4RkIwMDEwMDBGOTUyMjQwRkEKKzoxMDI4ODAwMDgwMzIwMDAwMDAwMDgwNUM4RkIwMDEwMDAwMDA4MDVCOUYKKzoxMDI4OTAwMDhGQjAwMTAwQUMwMDAwNDA0Mzk5MDEwMEIwMDAyREYwNjIKKzoxMDI4QTAwMDg0QjAwMTAwMTQ5NUEyNDIyNDZDMDAwMDFEOTUyM0YwMTEKKzoxMDI4QjAwMDAyNkMwMDAwMUE5NUEyRjA4MDMyMDAwMDVGOTVBMjQyREYKKzoxMDI4QzAwMDI0NkMwMDAwNUY5NUEyNDEwMzZDMDAwMDE5OTVBMjQwQTIKKzoxMDI4RDAwMDgwMzIwMDAwMDAwMDgwNTE4RkIwMDEwMDAwMDA4MDUyNjMKKzoxMDI4RTAwMDhGQjAwMTAwNUY5NTFGMTI4NDUwMDAwMDVGOTVBMDAxMUEKKzoxMDI4RjAwMDg0NkMwMDAwMEQ5NTAwNDA4MUIyMDAwMDhCMDAwMDQwMDgKKzoxMDI5MDAwMDQzOTkwMTAwNDg5NUEyNDZFNzdEMDAwMDE0MDAwMDQwNkQKKzoxMDI5MTAwMDQzOTkwMTAwM0E5NTIyRjAxNDMwMDAwMDI2OTUyMDBBRDAKKzoxMDI5MjAwMDAyNkMwMDAwMzc5NTAzMUU4MDMyMDAwMDI1OTVBMjQwRkUKKzoxMDI5MzAwMDgwMzIwMDAwMDAwMDgwNDQ4RkIwMDEwMDAwMDA4MDQ5MTgKKzoxMDI5NDAwMDhGQjAwMTAwMkI5NTIyMEEwMjZDMDAwMDJFOTVBMjQxNDcKKzoxMDI5NTAwMDE5N0MwMDAwMkE5NUEyNDA4MDMyMDAwMDAwMDA4MDU1QkEKKzoxMDI5NjAwMDhGQjAwMTAwMDAwMDgwNTY4RkIwMDEwMDJEOTVBMjQwNkQKKzoxMDI5NzAwMDgwMzIwMDAwMDAwMDgwNDM4RkIwMDEwMDAwMDA4MDQ4REEKKzoxMDI5ODAwMDhGQjAwMTAwMDAwMDAwMDE4MkIwMDEwMDAwMDAwMDBBQzkKKzoxMDI5OTAwMDgyRDAwMTAwMzQ5NTIwOTE4MzZDMDAwMDMzOTVBMjQwRDEKKzoxMDI5QTAwMDgwMzIwMDAwMjYwMDgwNDA4Rjk4MDEwMDI3MDA4MDQwODAKKzoxMDI5QjAwMDhGOTgwMTAwMzY5NUEyNDA4MDMyMDAwMDFGMDA4MDQwQjEKKzoxMDI5QzAwMDhGOTgwMTAwMjAwMDgwNDA4Rjk4MDEwMDM5OTVBMjQwMjcKKzoxMDI5RDAwMDgwMzIwMDAwMjIwMDgwNDA4Rjk4MDEwMDIzMDA4MDQwNTgKKzoxMDI5RTAwMDhGOTgwMTAwODgwMDJENDQ4RkIwMDEwMDQzOTVBMjQxQ0IKKzoxMDI5RjAwMDE5N0MwMDAwNDA5NUEyNDMzRDdDMDAwMDQwOTVBMkYyNjYKKzoxMDJBMDAwMDAyNkMwMDAwMDAwMEEyNDA4MEIyMDAwMDAwMDA4MDQ5N0IKKzoxMDJBMTAwMDhGQjAwMTAwNDI5NUEyNDA4MDMyMDAwMDAwMDA4MDQzNDgKKzoxMDJBMjAwMDhGQjAwMTAwMDAwMDgwNDg4RkIwMDEwMDQwOTVBMDkxNTgKKzoxMDJBMzAwMDAzNkMwMDAwM0U5NTIyNDMzRDdDMDAwMDQ3OTVBMjQwNzgKKzoxMDJBNDAwMDgwMzIwMDAwMjgwMDgwNDA4Rjk4MDEwMDI5MDA4MDQwREIKKzoxMDJBNTAwMDhGOTgwMTAwMTQwMDAwNDA0Mzk5MDEwMDUxOTVBMkYwQTUKKzoxMDJBNjAwMDE0MzAwMDAwODgwMDJENDQ4RkIwMDEwMDRFOTVBMkYyNzIKKzoxMDJBNzAwMDAyNkMwMDAwMDAwMEEyNDA4MEIyMDAwMDAwMDA4MDQ5MEIKKzoxMDJBODAwMDhGQjAwMTAwNDA5NTIyNDExOTdDMDAwMDNFOTUyMDkxQjUKKzoxMDJBOTAwMDAzNkMwMDAwNDA5NTAwNDA4MUIyMDAwMDU1OTUyMDBBNkIKKzoxMDJBQTAwMDAyNkMwMDAwNTQ5NUEyNDA4MDMyMDAwMDAwMDA4MDQ0NzcKKzoxMDJBQjAwMDhGQjAwMTAwMDAwMDgwNDk4RkIwMDEwMDVBOTUyMjBBQjIKKzoxMDJBQzAwMDAyNkMwMDAwMkU5NUEyNDExOTdDMDAwMDU5OTVBMjQwOEQKKzoxMDJBRDAwMDgwMzIwMDAwMDAwMDgwNTU4RkIwMDEwMDAwMDA4MDU2NTkKKzoxMDJBRTAwMDhGQjAwMTAwNUM5NUEyNDA4MDMyMDAwMDAwMDA4MDQzNUUKKzoxMDJBRjAwMDhGQjAwMTAwMDAwMDgwNDg4RkIwMDEwMDYyOTUwMDQzNTQKKzoxMDJCMDAwMDk1QjAwMDAwNjI5NTAwNDE5NUIwMDAwMDYyOTUwMDQyQ0EKKzoxMDJCMTAwMDk1QjAwMDAwNjI5NTAwNDQ5NUIwMDAwMDYyOTUwMDRDQUQKKzoxMDJCMjAwMDk1QjAwMDAwMEI5ODAwNDA4MTMyMDEwMDY1OTVBMjQwRUQKKzoxMDJCMzAwMDgwMzIwMDAwMDAwMDgwNEI4RkIwMDEwMDAwMDA4MDRDMEMKKzoxMDJCNDAwMDhGQjAwMTAwMkQwMDAwNDA0Mzk5MDEwMDJFMDAyRkYzQUIKKzoxMDJCNTAwMDg0QjAwMTAwNkE5NUEyRjM5NjMwMDAwMDAwMDA4MDQwMjYKKzoxMDJCNjAwMDAxQjAwMTAwMkQwMDJBNDFFN0QxMDEwMEQ0MDAzRDQxMTAKKzoxMDJCNzAwMDg1RTAwMTAwMEIwMDAwRjIwMEU0MDEwMDcwOTUyMjVBOEMKKzoxMDJCODAwMDAxN0MwMDAwMDAwMDAwNDAxRjkwMDEwMDcxOTUwMDVBNzgKKzoxMDJCOTAwMDAxODAwMDAwMDAwMDAwNDAxRjgwMDEwMDAwMDA2MzQxMzAKKzoxMDJCQTAwMDg1QzAwMTAwMDAwMEEwQTU4NTZDMDEwMDAwMDBFMzQwODUKKzoxMDJCQjAwMDg1QjAwMTAwMEM4MDAwMDM0MkM5MDEwMDEyMDAwMDQwRjIKKzoxMDJCQzAwMDg3OTgwMTAwNTU5OTAwRjA4Q0IwMDAwMDdFOTUyMjQwNTYKKzoxMDJCRDAwMDBGNkMwMDAwMDAwMDJGMDU0OEIxMDEwMDdCOTVBMjRCNEYKKzoxMDJCRTAwMDE5N0MwMDAwN0M5NTIyRjAxODZDMDAwMDAwMDA2MDRCRkUKKzoxMDJCRjAwMDE5OTAwMTAwNDg5NjAwMDcxMDMwMDEwMDZGODQwMDQwRDIKKzoxMDJDMDAwMDA1QjAwMDAwODA5NTIyNUExRjdDMDAwMENEOTUwMDQwNDEKKzoxMDJDMTAwMDgxMzAwMTAwNkY4NDAwNDAwNUIwMDAwMDAwMDAyRjA1RTYKKzoxMDJDMjAwMDQ4QjEwMTAwMDAwMDYwNEIxOTkwMDEwMDQ4OTYwMDA3NzAKKzoxMDJDMzAwMDEwMzAwMTAwNkY4NDAwNDAwNUIwMDAwMDAwMDAyRjA1MzcKKzoxMDJDNDAwMDQ4QjEwMTAwMDAwMDYwNEIxOTkwMDEwMDQ4OTYwMDA3NTAKKzoxMDJDNTAwMDEwMzAwMTAwMDAwMDgwNDAwNUIwMDEwMDg5OTUzMzQwMkMKKzoxMDJDNjAwMDgxMzIwMDAwOEM5NUExQUQ5NTIwMDAwMDlBOTUxMzQwMEIKKzoxMDJDNzAwMDgxQjIwMDAwMDAwMDEzNEE1QTgzMDEwMDMwMDAzOTQ1MzgKKzoxMDJDODAwMDk1RTAwMTAwMUYwMDAwMEY1RUQ4MDEwMDAwMDAwMDVBMEYKKzoxMDJDOTAwMDVGOTAwMTAwMDAwMDAwNDA0NUIwMDEwMDAwMDAwMDA0MEEKKzoxMDJDQTAwMDQ4QjAwMTAwMDAwMDAwMDU0QUIwMDEwMDAwMDAwMDBDMUYKKzoxMDJDQjAwMDU4QjAwMTAwMDAwMDAwMDc0RUIwMDEwMDE4ODYwMDQwMjcKKzoxMDJDQzAwMDVEOTgwMTAwMDAwMDAwNTg2MUIxMDEwMDAwMDAwMDRBNTkKKzoxMDJDRDAwMDYyQjEwMTAwMDAwMEE4NDE5N0IwMDAwMDk3OTUwMDQwNDQKKzoxMDJDRTAwMDgxQjIwMDAwMDAwMDgwNDA5N0IwMDEwMDlCOTU0NDA3MkUKKzoxMDJDRjAwMDk2MzAwMDAwRkZGRjAwNEI4NDg5MDEwMDAwMDAxQ0MyRDkKKzoxMDJEMDAwMDI0QjAwMTAwQTU5NUEyNDUyNTdDMDAwMDlGOTUzMTIwQTcKKzoxMDJEMTAwMDg1MzAwMDAwQTY5NTIyMTI0ODdGMDAwMDY3OTgxMTEyQTYKKzoxMDJEMjAwMDQ4MDMwMTAwMTAwMDAwMTI5NkU0MDEwMDAwMDAwMDRCNkYKKzoxMDJEMzAwMDFFOTQwMTAwMDAwMDgwNUExRjkwMDEwMEE1OTUzMTQwQUIKKzoxMDJENDAwMDgxMzIwMDAwMDAwMDAwQjQyNEIwMDEwMEE2OTUyMjEyRDgKKzoxMDJENTAwMDQ4N0YwMDAwNjc5ODAwNDA4MTMyMDEwMDAwMDAyRjA1ODUKKzoxMDJENjAwMDQ4QjEwMTAwQjM5NTBCRjA4NDMwMDAwMDAwMDAxMTEyNEYKKzoxMDJENzAwMDQ4ODMwMTAwQjA5NTIyNTA4NTcwMDAwMDVFMDEwMDQwM0MKKzoxMDJEODAwMDQzOTkwMTAwNjc5NzAwRjI5NjMwMDEwMEU5OTkwMDEyMUIKKzoxMDJEOTAwMDk0MzAwMTAwMDAwMDAwNUExRjkwMDEwMDEwMDAwMDEyNDIKKzoxMDJEQTAwMDk2RTQwMTAwMDAwMDgwNEIxRTk0MDEwMDEwMDAwMDQyRDgKKzoxMDJEQjAwMDEwRjQwMTAwMDBCNzNGNDMxMUYwMDEwMDA3MDAwMDA4QzQKKzoxMDJEQzAwMDhBODgwMTAwQjY5NTMwQTEwQzMwMDAwMEI5OTUyMjQ1RTMKKzoxMDJERDAwMEU2N0QwMDAwQTY5NTEwNDA4MUIyMDAwMDAwMDAyQTQ1NjMKKzoxMDJERTAwMEU2OTEwMTAwMDAwMDEwMTI0ODgzMDEwMDAwMDAxMTQwMkMKKzoxMDJERjAwMDgxQjIwMTAwMDAwMDYwNEI4NTgwMDEwMDVFMDEwMDQwNEYKKzoxMDJFMDAwMDQzOTkwMTAwNjc5NzAwRjI5NjMwMDEwMDAwODAwMDEwOUUKKzoxMDJFMTAwMDQ0QzkwMTAwRDgwMDAwNDA4MTk4MDEwMDJFMDAyRDA1MTIKKzoxMDJFMjAwMDQ4QjEwMTAwQzQ5NTIyNDBFNzZEMDAwMDgwMDAwMDQwRDkKKzoxMDJFMzAwMDgwQzgwMTAwMDAwMDAwNDBGMEIxMDEwMDA5MDAwMDA4NTYKKzoxMDJFNDAwMDg2RTQwMTAwMDAwMDY4QTc4N0MwMDEwMDAwMDAwMDQ0N0MKKzoxMDJFNTAwMDYxQjEwMTAwMDAwMDAwMTA2MkIxMDEwMEM4OTVBODA1MzEKKzoxMDJFNjAwMEUwMzEwMDAwMTAwMDAwMTI5NkU0MDEwMDAwMTQwMDRCNTUKKzoxMDJFNzAwMDk2REMwMTAwMDAwMDgwNEIxRTk0MDEwMDEwMDAwMDBGNDIKKzoxMDJFODAwMDg0RjQwMTAwMUYwMDAwNDI4NDg4MDEwMEQxOTUyMjQwOTMKKzoxMDJFOTAwMDgwMzIwMDAwRDI5NTAwNDI2OEIxMDAwMDAwMDAwMDQyN0MKKzoxMDJFQTAwMDZBQjEwMTAwRDI5NTMxNUExRjAwMDAwMDAwMDA5MTQyMjIKKzoxMDJFQjAwMDQ4OTMwMTAwRDQ5NTM1NDA4MTMyMDAwMDZEMDAwMDQwRjgKKzoxMDJFQzAwMDYxOTkwMTAwREE5NTI4QjEyQzMwMDAwMEQ1OTUyMjREOEEKKzoxMDJFRDAwMDc1N0QwMDAwMDAwMDAwNDAyREIwMDEwMDAwMDA5NTQwMEQKKzoxMDJFRTAwMDExQjAwMTAwNkQwMDAwNDA2MTk5MDEwMERBOTVBOEIxQjAKKzoxMDJFRjAwMDEwMzAwMDAwMDAwMDk1NDA4MUIyMDEwMDdGMDAwMDQwQ0EKKzoxMDJGMDAwMDYxOTkwMTAwRTE5NTI4QjExMDMwMDAwMEREOTU5RkJBNkMKKzoxMDJGMTAwMDgwMzIwMDAwMDAwMDgwNDAxMUIwMDEwMDAwMDA4MDI0RDkKKzoxMDJGMjAwMDExODQwMTAwMDAwMDAwNUY2MUIxMDEwMDAwMTAwMDAwODkKKzoxMDJGMzAwMDYyREQwMTAwMDAwMEE4NDA4MUIyMDAwMEUzOTUwMDQwN0UKKzoxMDJGNDAwMDgxQjIwMDAwQUM5NDAwNDA0Nzk5MDEwMEU3OTUzMjQwRkYKKzoxMDJGNTAwMDgxMzIwMDAwRUQ5NTIyRjg5NjMwMDAwMDAwMDAwMEY4NjQKKzoxMDJGNjAwMDkwQjAwMTAwMDAwMDAwRjA5MkIwMDEwMDAxMDAwMDRCQTEKKzoxMDJGNzAwMEYwQ0QwMTAwMjAwMDkyNDhFMEM5MDEwMDZDMDAwMDQwNDMKKzoxMDJGODAwMDYxOTkwMTAwRjE5NTI4QjE5MjMwMDAwMEVEOTUyMjRDMzUKKzoxMDJGOTAwMDc1N0QwMDAwMDQwMDEyNDA5MUIwMDAwMDZDMDAwMDQwRkMKKzoxMDJGQTAwMDYxOTkwMTAwRjE5NUE4QjE5MDMwMDAwMEZGMDAwMDQ4NDAKKzoxMDJGQjAwMDk2ODgwMTAwMDAwMDAwNEI5MEQwMDEwMDAxMDAwMDRCRkEKKzoxMDJGQzAwMEYwQ0QwMTAwMjAwMDAwNDhGMEM5MDEwMDAwMDA5MjQ5NDYKKzoxMDJGRDAwMEUwQjEwMTAwMEMwMDJEMTA0OEIxMDEwMEZGMDcwMDA4MEUKKzoxMDJGRTAwMDgyOEMwMTAwRkYwNzAwRjAwMDhDMDEwMDAwMDBBMjQxNkMKKzoxMDJGRjAwMDAwRUMwMDAwRkU5NTIyMUEwMDZDMDAwMEUyOTUwMDAwMzMKKzoxMDMwMDAwMDM0MzAwMTAwMDAwMDAwNTA0OUMxMDEwMEZBOTVBMjQxOEUKKzoxMDMwMTAwMDIzNTAwMDAwMDAwMDgwNDA4MUIyMDEwMDBDMDAyRDEwMDAKKzoxMDMwMjAwMDQ4QjEwMTAwRkYwNzAwMTU4MjhDMDEwMEZGMDcwMEYwODYKKzoxMDMwMzAwMDAwOEMwMTAwMDAwMEEyNDEwMEVDMDAwMDA3OTYyMjBENjgKKzoxMDMwNDAwMDAwNkMwMDAwRTI5NTAwMDAxQTMwMDEwMDAwMDAwMDUwMDIKKzoxMDMwNTAwMDQ5QzEwMTAwMDM5NkEyNDEyMzUwMDAwMDAwMDA4MDQwQjYKKzoxMDMwNjAwMDgxQjIwMTAwMEM5NjgzMUU4MDMyMDAwMDAwMDAwMDQ0RjMKKzoxMDMwNzAwMDE5OTAwMTAwMjQwMDJEMDEyQ0IwMDEwMDI4MDAyREYwMzIKKzoxMDMwODAwMDE2QjAwMTAwMjIwMDJERjAyNkIwMDEwMDE0MDAyRkYyMkUKKzoxMDMwOTAwMDBDQjAwMTAwMDAwMDgwNDBFMUIxMDEwMDAyMDAyRDExRTAKKzoxMDMwQTAwMDEwQzEwMDAwMTU5NjAwNDA0M0MxMDAwMDE1OTYwMDUwNjUKKzoxMDMwQjAwMDQzQzEwMDAwMjAwMDAwQTE0MkM5MDEwMDFBOTYyMjQwMkQKKzoxMDMwQzAwMEY1NkQwMDAwMDAwMDAwNDI0M0QxMDEwMDA0MDBBMjQwNjEKKzoxMDMwRDAwMEU1N0QwMDAwMDAwMDAwNDAyM0IwMDEwMDAwMDA4MDQ5QjEKKzoxMDMwRTAwMDFGOTAwMTAwMUQ5NjIyMTExRTdDMDAwMDFGOTZBMEYwNkIKKzoxMDMwRjAwMDE2NDAwMDAwMUY5NjAwNDExN0MwMDAwMDFGOTZBMEY0NjQKKzoxMDMxMDAwMDE2NDAwMDAwMDAwMDAwNDExN0MwMDEwMDAwMDBBMjQxNkQKKzoxMDMxMTAwMDIzRDAwMDAwMTU5NjAwNTI0M0QxMDAwMDAwQjUwMDBERTkKKzoxMDMxMjAwMDQyQzkwMTAwMjI5NjMwNDcxNzA0MDAwMDI1OTZBMjBCRTEKKzoxMDMxMzAwMEU2N0QwMDAwMDAwMDkwNDI4MUIwMDEwMDAwQjcwMDBENjQKKzoxMDMxNDAwMDQ2QzkwMTAwMjk5NkEyMEJFNjdEMDAwMDAwMDAwMDBCOTUKKzoxMDMxNTAwMEU2OTEwMTAwMDAwMDkwNDE4MUIwMDEwMDAwMDAxMDQwQTQKKzoxMDMxNjAwMDgxQjIwMTAwMkE5NjQwMDc5NjMwMDAwMEYzOTkwMDQwOTIKKzoxMDMxNzAwMDgxMzIwMTAwMzQ5NkEyNDU5NTdDMDAwMDAxOTczRjQxQzEKKzoxMDMxODAwMDk1RTAwMTAwMDAwMDAwRjM5NkIwMDEwMDAwMDAwMDRFNDEKKzoxMDMxOTAwMEU2QjEwMTAwNDA5NzNFNDA5N0UwMDEwMDAwMDAwMDRFN0MKKzoxMDMxQTAwMEU2QjEwMTAwNDA5NzNFNDA5REUwMDEwMDQ3OTYwMDNCOUMKKzoxMDMxQjAwMEU3QjEwMDAwMzQ5NjMwNDA4MTMyMDAwMDNFOTZBMjBCMDkKKzoxMDMxQzAwMEU2N0QwMDAwMDBCNTAwMEQ0NkM5MDEwMDNBOTZBMjBCNEQKKzoxMDMxRDAwMEU2N0QwMDAwMDAwMDEwNDA4MUIyMDEwMDAwMDA5ODQyMkUKKzoxMDMxRTAwMDgxQjAwMTAwMDBCNzAwMEQ0NkM5MDEwMDAwMDAwMDBCQ0UKKzoxMDMxRjAwMEU2OTEwMTAwMDAwMDEwNDA4MUIyMDEwMDAwMDA5ODQxRkEKKzoxMDMyMDAwMDgxQjAwMTAwMDQwMDIxQTI5NTIwMDAwMDAwMDAxMDRBQjYKKzoxMDMyMTAwMDQ0ODMwMTAwMDA5NzNFNDE5NUUwMDEwMDAwMDAwMDRFMEMKKzoxMDMyMjAwMEY2QjEwMTAwMDAwMDAwNEVFNkIxMDEwMDQwOTczRTQwQkIKKzoxMDMyMzAwMDlERTAwMTAwMDAwMDAwM0JFN0IxMDEwMDAwMDAwMDRBRjIKKzoxMDMyNDAwMDkwQjEwMTAwRkZGRjAwMDc5Mjg5MDEwMDAwMDA5ODQwNDMKKzoxMDMyNTAwMDgxQjAwMTAwMDMwMDAwMDg4NkY0MDEwMDAwQjcwMDQzQkMKKzoxMDMyNjAwMDQ2QzkwMTAwMDcwMDAwMDg4Mjg4MDEwMDRCOTY0MDA4MEIKKzoxMDMyNzAwMDk2MzAwMDAwRjM5OTAwNDA4MTMyMDEwMDU3OTYyMjQ1QjQKKzoxMDMyODAwMDk1N0MwMDAwNTM5NjIyNUExRjdDMDAwMDEwMDAwMDBGMEUKKzoxMDMyOTAwMDk2RjQwMTAwNTA5NjMxNUY5NzA0MDAwMDAwMDAxMTRCMzYKKzoxMDMyQTAwMDQ4OTMwMTAwMDAwMDAwNEI2QUIxMDEwMDUzOTYzMDQwODIKKzoxMDMyQjAwMDgxMzIwMDAwMDAwMDAwNDFFNjgxMDEwMDAwMDAxMDQwNjIKKzoxMDMyQzAwMDgxQjIwMTAwMDAwMDk4NDA4MUIyMDEwMDAwOTczRjQxQTcKKzoxMDMyRDAwMDk1RTAwMTAwMDAwMDAwRjM5NkIwMDEwMDQwOTczRDQwRUEKKzoxMDMyRTAwMDk3RTAwMTAwMDAwMDYzRjM4OEIwMDEwMDVGOTZBMjNCMDUKKzoxMDMyRjAwMDg5NkMwMDAwMDAwMDAwNEE5MEIxMDEwMDAxMDAwMEE2QTYKKzoxMDMzMDAwMDkyQjEwMTAwNjA5NjE4NEE0NDkzMDAwMDAwMDAxODQwRjIKKzoxMDMzMTAwMDgxQjIwMTAwMzAwMDM5NDU5N0UwMDEwMDY1OTYyMjVBREMKKzoxMDMzMjAwMDFGN0MwMDAwMUYwNDAwMEY5OEQ4MDEwMDAwMDAwMDRDMTMKKzoxMDMzMzAwMDVFOTQwMTAwNjc5NjAwMDU0QUIwMDAwMDFGMDQwMEE3RDQKKzoxMDMzNDAwMDVFODQwMTAwMDAwMDAwNDA0QkIwMDEwMDAwMDAwMDU4MDYKKzoxMDMzNTAwMDYxQjEwMTAwMDAwMDAwNEI2MkIxMDEwMDAwMDBBODQwMTMKKzoxMDMzNjAwMDgxQjIwMDAwNjg5NjAwNDA4MUIyMDAwMDZCOTY0MDA3NzEKKzoxMDMzNzAwMDk2MzAwMDAwRjM5OTAwNDA4MTMyMDEwMDZGOTYyMjQ1OUIKKzoxMDMzODAwMDk1N0MwMDAwMDAwMDk4NDA4MUIyMDEwMEYxOTkwMDRBNEMKKzoxMDMzOTAwMDQ0MTMwMTAwMDA5NzNGNDE5NUUwMDEwMDAwMDAwMEYzNTUKKzoxMDMzQTAwMDk2QjAwMTAwNDA5NzNENDA5N0UwMDEwMDAwMDA2M0YzQjQKKzoxMDMzQjAwMDg4QjAwMTAwMzAwMDM4NDU5N0UwMDEwMDAwMDAwMDVGNTAKKzoxMDMzQzAwMDBGOTAwMTAwMDAwMDAwNTg2MUIxMDEwMDAwMDAwMDRCQTcKKzoxMDMzRDAwMDYyQjEwMTAwNzc5NkE4NDA4MTMyMDAwMDcwOTZBMjNCNEUKKzoxMDMzRTAwMDg5NkMwMDAwMzAwMDM4NDU5REUwMDEwMDAwMDA5ODQwRTUKKzoxMDMzRjAwMDgxQjIwMTAwRTk5OTAwMTI5NDMwMDEwMDQ4OTYwMDVBMDgKKzoxMDM0MDAwMDFGMDAwMTAwMDAwMDgwNUExRjkwMDEwMDExMDAwMDRBQjcKKzoxMDM0MTAwMEU2QzkwMTAwMzQwMDJGNEY5NTg0MDEwMDAwMDAwMEYzM0QKKzoxMDM0MjAwMDk2QjAwMTAwMDEwMDYzNEI4NEM4MDEwMDAwMDBBMDQzNzYKKzoxMDM0MzAwMDg1NkMwMTAwMDAwMEUzNDA4NUIwMDEwMDMwMDAyRDQ0QTAKKzoxMDM0NDAwMDFGOTAwMTAwMzIwMDJERjIyQUIwMDEwMDA0MDAyMkYyODgKKzoxMDM0NTAwMDAyMzAwMDAwNjY5NTAwMTAzMjMwMDEwMDMyMDBBMDQwQkEKKzoxMDM0NjAwMEU1QjEwMTAwMDAwMDAwNDA5N0IwMDEwMEYwMDcwMDQwMDYKKzoxMDM0NzAwMDk5OTgwMTAwMDAwMDAwNEEwMkMwMDEwMDAwMDAwMDUwQkQKKzoxMDM0ODAwMDAzRDAwMTAwMDAwMDAwNDE5N0MwMDEwMDAwMDBBMzRDRTAKKzoxMDM0OTAwMDAyRDAwMDAwOEU5NjAwNDA4MUIyMDAwMDAwMDAwMEE4MUIKKzoxMDM0QTAwMDM2QjAwMTAwOUU5NjIyNDEwMzUwMDAwMDAwODAwMDEwQkIKKzoxMDM0QjAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDcwMDAwMDAzOTgKKzoxMDM0QzAwMEYwQzkwMTAwMDAwMDAwNDI2MUIxMDEwMDAwMDAwMDEwREQKKzoxMDM0RDAwMDYyQjEwMTAwOTc5NkE4MDBFMDMxMDAwMDFCODQwMDg4Q0IKKzoxMDM0RTAwMDFDQjAwMDAwRTI5NTAwNDA4MTMyMDEwMDdDODAwMDAzQTYKKzoxMDM0RjAwMDQyQzkwMTAwMDAwMDAwRjAwMEIwMDEwMDkyOTYwMDVDOUIKKzoxMDM1MDAwMDAxODAwMDAwRTI5NTAwNDA4MTMyMDEwMDAwMDAwMDFCQjQKKzoxMDM1MTAwMDEwQjEwMDAwNjgwMTJEMDY4MkIwMDEwMDAwMDAwMEYyMjkKKzoxMDM1MjAwMDgyQzAwMTAwMDA4MDAwMDM0NkM5MDEwMEREOTUwMDQwMTMKKzoxMDM1MzAwMDgxMzIwMTAwQzU5NjIyNDAxMTZDMDAwMDAwMDA2ODA4MkQKKzoxMDM1NDAwMDM4OTYwMTAwRjAwNzAwNDE4MkNDMDEwMEEzOTZBQTQxMDEKKzoxMDM1NTAwMDNCNDAwMDAwMDAwMDAwRjgxMEIwMDEwMDAwMDAwMDVDREIKKzoxMDM1NjAwMDExODAwMTAwMDEwMDAwMUQwNENDMDEwMEM0OTYyNjQ2MTQKKzoxMDM1NzAwMDIzMzAwMDAwMDgwMDAwMDMxMkM4MDEwMDY0MDEyMEYwOUQKKzoxMDM1ODAwMEUwQjEwMTAwQzM5NjIyNDEwNTUwMDAwMDIwMDAwMDAzNzUKKzoxMDM1OTAwMDQ4QzkwMTAwMEMwMDAwRjg4NkM4MDEwMDAwMDAyMjQ0NjAKKzoxMDM1QTAwMEYxQjEwMTAwMDAwMDAwNDNGMEIxMDEwMDAwMDAwMDA5OEEKKzoxMDM1QjAwMEUwQjEwMTAwMDAwMDAwNDQ2MUIxMDEwMEEwMDAwMEE0REUKKzoxMDM1QzAwMDYyREQwMTAwQjU5NkE4NDYxRjEwMDAwMEMyOTYyMjQxOTgKKzoxMDM1RDAwMDA1NTAwMDAwQzA5NkEyNDEyMzUwMDAwMDAwMDAwMEExNDkKKzoxMDM1RTAwMDFBQjAwMTAwMDAwMDAwNDQ2MUIxMDEwMDQwMDAwMDEwNjkKKzoxMDM1RjAwMDYyREQwMTAwQkI5NkE4NDYyMzMwMDAwMDFCODQwMDg4RDIKKzoxMDM2MDAwMDFDQjAwMDAwMTAwMDAwMDM0OEM5MDEwMDAwMDAwMDBEQkMKKzoxMDM2MTAwMDQyQjEwMTAwMDAwMDAwNDQxM0MwMDEwMEIwOTYwMDUwMDgKKzoxMDM2MjAwMDQ5QzEwMDAwMDAwMDAwMDU0OEIxMDEwMDA0ODAwMDAzMEEKKzoxMDM2MzAwMDFBQzgwMTAwMDAwMDgwNDA4MUIyMDEwMEM0OTYyMjQwRjcKKzoxMDM2NDAwMDNCNkMwMDAwMDAwMDAwRjgwMEIwMDEwMEUyOTUwMDVDNTcKKzoxMDM2NTAwMDAxMDAwMTAwQzU5NjAwNDEzQkQwMDAwMDAwMDA4RDQ3RUQKKzoxMDM2NjAwMDgwMzIwMTAwQjAwMDJGNUYxM0IwMDEwMDAwMDBFMEYwRDUKKzoxMDM2NzAwMDhDQzAwMTAwMDA4MDAwMDM0MkM5MDEwMDAwMDAwMEY4NzYKKzoxMDM2ODAwMDk0QjAwMTAwMDAwMDAwRjg4Q0IwMDEwMEQxOTY4Q0Y4RDUKKzoxMDM2OTAwMDhFMzAwMDAwMDAwMDAwNDQxOTkwMDEwMDA0MDAyMkY4NjAKKzoxMDM2QTAwMDE0MzAwMDAwMDAwMDAwRjgxNkIwMDEwMDAwMDAwMEY4MUYKKzoxMDM2QjAwMDI2QjAwMTAwMDgwMDJFRjgwQ0IwMDEwMDBDMDAyQTRBQzgKKzoxMDM2QzAwMEUwQjEwMTAwMjgwMDAwMDBFMEM5MDEwMDEwMDAyMDFCNEIKKzoxMDM2RDAwMEUwQjEwMTAwREU5NjIwMEEwQzZDMDAwMDAwMDAwMEY4NEEKKzoxMDM2RTAwMDk0QjAwMTAwMDAwMDAwRjg5NkIwMDEwMDIwMDAyMEYwMjYKKzoxMDM2RjAwMEU0QjEwMTAwMTgwMDIwNEFFMEIxMDEwMDFDMDAyMDRCOTkKKzoxMDM3MDAwMEUwQjEwMTAwQzk5NjAwNDAxM0IwMDAwMDJDMDAyRDQyMkEKKzoxMDM3MTAwMDE5OTAwMTAwMkUwMDJGRjM4MkIwMDEwMDAwMDAwMEYzODkKKzoxMDM3MjAwMDk2QjAwMTAwRTQ5NkEyQTU5NzZDMDAwMDAwMDA4MDQxQ0QKKzoxMDM3MzAwMDk1QjAwMTAwRTc5NkEyNDA5NzZDMDAwMDAwMDAwMDQwQTEKKzoxMDM3NDAwMDgzQjAwMTAwMkQwMDIwNDBFN0IxMDEwMDAwMDA2MzQxN0IKKzoxMDM3NTAwMDk3QzAwMTAwRDQwMDNFNDE4M0UwMDEwMDAwMDAwMDQxMTkKKzoxMDM3NjAwMDgzQzAwMTAwRUM5NkEwQTU4MzZDMDAwMDAwMDAwMDQwMUYKKzoxMDM3NzAwMDgzQjAwMTAwMkMwMDIwNDFFNkIxMDEwMEYxOTYyMjQwMDcKKzoxMDM3ODAwMDFGN0MwMDAwMDAwNDAwMDA5OERDMDEwMDBCMDAwMDRDQ0UKKzoxMDM3OTAwMEU0RjUwMTAwMDAwMDgwNDAxRjgwMDEwMDBCMDA4MDAwNjQKKzoxMDM3QTAwMEU0RjUwMTAwRTY5NTAwNDA4MTMyMDEwMDA0ODAwMDAzNDkKKzoxMDM3QjAwMDQ0QzkwMTAwMDAwMDAwNDBGMUIxMDEwMDAwMDAwMDQwRDgKKzoxMDM3QzAwMEYxQjEwMTAwMDAwMDYwNDE4N0IwMDEwMDAwODAwMDEwRUQKKzoxMDM3RDAwMDQ0QzkwMTAwMDAwMDAwNTBGMUIxMDEwMDAwMDAwMDQ4QTAKKzoxMDM3RTAwMEYwQjEwMTAwMDAwMDAwNDlGMEIxMDEwMDAwMDAwMDAzNDkKKzoxMDM3RjAwMEUwQjEwMTAwMDAwMDAwNDU2MUIxMDEwMDIwMDAwMDEwQUYKKzoxMDM4MDAwMDYyREQwMTAwMDAwMEE4NUQwNTkwMDAwMEZEOTYwMDQwMEIKKzoxMDM4MTAwMDgxQjIwMDAwRTY5NTAwNDA4MTMyMDEwMDAwODAwMDAzODMKKzoxMDM4MjAwMDQ0QzkwMTAwMDAwMDAwNDFGMEIxMDEwMDAwMDAwMDQyNjUKKzoxMDM4MzAwMEYwQjEwMTAwMDAwMDAwNDBGMUIxMDEwMDAwMDAwMDQzQzAKKzoxMDM4NDAwMEYwQjEwMTAwMDA4MDAwMTA0NEM5MDEwMDAwMDAwMDUwRTgKKzoxMDM4NTAwMEYxQjEwMTAwMDAwMDAwNDhGMEIxMDEwMDAwMDAwMDQ5OTIKKzoxMDM4NjAwMEYwQjEwMTAwMDAwMDAwMDNFMEIxMDEwMDAwMDAwMDQ1REMKKzoxMDM4NzAwMDYxQjEwMTAwMjAwMDAwMTA2MkREMDEwMDAwMDBBODVEQzAKKzoxMDM4ODAwMDA1OTAwMDAwMEM5NzAwNDA4MUIyMDAwMDJEMDAwMDQwMjAKKzoxMDM4OTAwMDQzOTkwMTAwMkUwMDJGRjM4NEIwMDEwMDAxMDA2M0YzNkYKKzoxMDM4QTAwMDk2QzgwMTAwMTQ5NzlGNDE4NTUwMDAwMDAxMDAwMEE1QjMKKzoxMDM4QjAwMDg1Q0MwMTAwMkQwMEEwNDJFNkIxMDEwMDVFMDEyRDAwODMKKzoxMDM4QzAwMDgwQjAwMTAwMTk5NzUyNDM4MTYwMDAwMDAyMDAwMEYyQUQKKzoxMDM4RDAwMDgyRjQwMTAwMUE5NzAwNDE4MDk0MDAwMDAwMDAwMDVGMEMKKzoxMDM4RTAwMDgxOTAwMTAwMDAwMDAwNUU2MUIxMDEwMDAwMDAwMDQwMTUKKzoxMDM4RjAwMDYyQjEwMTAwMDAwMEE4NDA5NUIwMDAwMDFCOTc5RUJCN0MKKzoxMDM5MDAwMDgwMzIwMDAwMjA5N0EyNDAxRjdDMDAwMEUyOTUwMDQwMUEKKzoxMDM5MTAwMDgxQjIwMDAwMDAwMDgwNDE5NUIwMDEwMDA0MDAwMDE1NTQKKzoxMDM5MjAwMDQyQzkwMTAwMDAwMDAwNTQyQkMwMDEwMDAwMDAwMEZDNEYKKzoxMDM5MzAwMDI0QjAwMTAwMDAwMDAwRkMzOEIwMDEwMDAwMDAwMEZFQ0YKKzoxMDM5NDAwMDNDQjAwMTAwMDAwMDAwRkUzQUIwMDEwMDM1OTc5QzE3MjIKKzoxMDM5NTAwMDgwMzIwMDAwMkE5N0EyNEExOTdDMDAwMDAwMDA4MDRDQTcKKzoxMDM5NjAwMDFGOTAwMTAwMEMwMDAwMUU5OEY0MDEwMDI5OTdBMjQ4NDYKKzoxMDM5NzAwMDk5NkMwMDAwMDAwMDAwMTU0MkIxMDEwMDI5OTdBMjhBNEQKKzoxMDM5ODAwMEYxNkQwMDAwMEMwMDAwMDEwMkNDMDEwMDAwMDAwMEZDMDEKKzoxMDM5OTAwMDNFQjAwMTAwMDEwMDAwRjQyOENDMDEwMENDMDAyRDA1NTAKKzoxMDM5QTAwMDQ4QjEwMTAwMzQ5NzIwRjAzRTZDMDAwMDAwMDAwMDRCNEQKKzoxMDM5QjAwMDFGOTAwMTAwMDAwMDAwNEMyQkMwMDEwMEJGMDAyRDA1MkUKKzoxMDM5QzAwMDQ4QjEwMTAwMDAwMDgwRjMzQUUwMDEwMDAwMDAyRTRCRjYKKzoxMDM5RDAwMDE5OTAwMTAwMDcwMDJBMENFNEIxMDEwMDAwMDA4MDA0RTYKKzoxMDM5RTAwMEU2QjEwMTAwMTgwMDAwNDA0Mzk5MDEwMDFDMDAyREYwRDEKKzoxMDM5RjAwMDE2QjAwMTAwMjAwMDJERjAyNkIwMDEwMDBDMDAyRkYyQkYKKzoxMDNBMDAwMDBDQjAwMTAwMDAwMEEyMDYxNEVDMDAwMDQxOTcyMjQ1MTIKKzoxMDNBMTAwMDFGN0MwMDAwMDAwMEEzMDYyQUVDMDAwMDAwMDAwMEY4NTQKKzoxMDNBMjAwMDk0QjAwMTAwMDAwMDAwRjA5NkIwMDEwMDBDMDAyRDQwQTEKKzoxMDNBMzAwMDgxQjIwMTAwMDAwMDJBNENFMUMxMDEwMDMwMDAwMDEwRjkKKzoxMDNBNDAwMDQ4QzkwMTAwMEEwMDAwNDBGMTk5MDEwMDE4MDAwMDA1NzIKKzoxMDNBNTAwMEYwQzkwMTAwMDAwMDAwNEFGMEIxMDEwMDAwMDAwMDRCNzUKKzoxMDNBNjAwMEUwQjEwMTAwMDAwMDAwNDc2MUIxMDEwMEEwMDAwMEE0MjYKKzoxMDNBNzAwMDYyREQwMTAwNEI5N0E4NUMxRjEwMDAwMDAwMDA4MDA1NkMKKzoxMDNBODAwMDQ4QjEwMTAwMDAwMDJFMTA0OEIxMDEwMDAwMDA2ODAxOUIKKzoxMDNBOTAwMDk2QjAwMTAwMDAwMDAwMDNGMEIxMDEwMDUxOTc0NTQyQ0IKKzoxMDNBQTAwMDYxMzEwMDAwMDAwMDAwMTA2MkIxMDEwMDUyOTdBODAwQ0YKKzoxMDNBQjAwMEUwMzEwMDAwMDAwMDlENDA4MUIyMDEwMDAwMDAyRTEwQTYKKzoxMDNBQzAwMDQ4QjEwMTAwMDAwMDY4MDE5NkIwMDEwMDAwMDAwMDAzNDkKKzoxMDNBRDAwMEYwQjEwMTAwNTg5NzQ1NDI2MTMxMDAwMDIwMDAwMDEwMEMKKzoxMDNBRTAwMDYyREQwMTAwNTk5N0E4MDBFMDMxMDAwMDAwMDA5RDQwMTAKKzoxMDNBRjAwMDgxQjIwMTAwMzA4MDAwNEE0NEM5MDEwMDAwMDAwMDA2ODQKKzoxMDNCMDAwMEYxQjEwMTAwQzBBODNENDYwREUwMDEwMEZGN0YwMEExMUEKKzoxMDNCMTAwMEYwODkwMTAwMDIwMDAwMDk5NkY0MDEwMDAwMDAwMDQ2NEYKKzoxMDNCMjAwMDk3RTAwMTAwMDAwMDYwQTg5N0MwMDEwMDYzOTc0NjQyM0IKKzoxMDNCMzAwMDYxMzEwMDAwMzAwMDAwNEE2MkM5MDEwMDY0OTdBODQwNkEKKzoxMDNCNDAwMDgxMzIwMDAwMDAwMDlFNDA4MUIyMDEwMDAwOTkzRjQyOTYKKzoxMDNCNTAwMDk3RjAwMTAwNjg5NzQ3NDA4MTMyMDAwMDcwOTcyMkYzODgKKzoxMDNCNjAwMDc0MDYwMDAwM0YwMDAwRjM5NDg4MDEwMDAwMDAwMDA3ODUKKzoxMDNCNzAwMEU3ODUwMTAwMDAwMDFGNTU2MUIxMDEwMDAwMDAwMDRBMDcKKzoxMDNCODAwMDYyQjEwMTAwMDAwMEE4NDA4MUIyMDAwMDZEOTcwMDQwQzIKKzoxMDNCOTAwMDgxQjIwMDAwMDAwMDlGNDA4MUIyMDEwMDAwMDAwMEE4MzcKKzoxMDNCQTAwMDM2QjAwMTAwODA5NzgyNDEyMzQwMDAwMDc1OTdBMjQ0RkYKKzoxMDNCQjAwMDFGN0MwMDAwRUY5NDAwMDE4QzMwMDEwMDIwODAwMDEwNzkKKzoxMDNCQzAwMDQyQzkwMTAwN0I5NzIyNDBFMzZEMDAwMDAwMDAwMDQzRTIKKzoxMDNCRDAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDc4OTdBODQwNEIKKzoxMDNCRTAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDQxRUUKKzoxMDNCRjAwMDIzQjAwMTAwMDAwMDAwMTAzMkIwMDEwMDgwOTcyMjQxODQKKzoxMDNDMDAwMDE5N0MwMDAwRjg5NTAwNDMyMzMwMDEwMDAwMDAwMDQxQkEKKzoxMDNDMTAwMDIzQjAwMTAwODI5N0EzMTUwQzZDMDAwMDgzOTcwMDA2NjcKKzoxMDNDMjAwMDA0QjAwMDAwMDAwMDAwMTUwNEIwMDEwMDg1OTcyMDAyRDgKKzoxMDNDMzAwMDFBNkMwMDAwMDAwMDAwMEQwNEIwMDEwMDA3MDAwMDBCMkEKKzoxMDNDNDAwMDk2ODgwMTAwOEE5NzI2NDc5NzI0MDAwMDAwMDAwMDQxQ0IKKzoxMDNDNTAwMDk3QzAwMTAwOEE5NzIzNEIwNDZDMDAwMDAwMDAwMDRCQzIKKzoxMDNDNjAwMDA0QjAwMTAwNDk5ODAwMDU0ODMxMDEwMEI0OTcyMjAyRDAKKzoxMDNDNzAwMDE0NTAwMDAwOEU5N0EyMDIyQTUwMDAwMEI0OTdBMjQ1NkIKKzoxMDNDODAwMDFGN0MwMDAwOTA5NzIyMDIwQzUwMDAwMDk5OTcwMDAyQzAKKzoxMDNDOTAwMDE2QzAwMDAwOTg5NzIyNUMxRjdDMDAwMDMwODAwMDEwNDYKKzoxMDNDQTAwMDQyQzkwMTAwOTg5NzIyNDBFMzZEMDAwMDAwMDAwMDQ3RTAKKzoxMDNDQjAwMDYxQjEwMTAwNDAwMDAwMTA2MkREMDEwMDk0OTdBODQwNEUKKzoxMDNDQzAwMDgxMzIwMDAwMUI4NDAwODgxQ0IwMDAwMDAwMDAwMDA1NDkKKzoxMDNDRDAwMDQ4QjEwMTAwM0E5NzAwNUMxRjAwMDEwMEI0OTcyMjE1MUIKKzoxMDNDRTAwMDgwMzIwMDAwMDAwMDAwNTAzM0MwMDEwMEIzOTdBMjAyRjAKKzoxMDNDRjAwMDFBNTAwMDAwQTU5NzIyNDYxRjdDMDAwMDcwODAwMDAzMjgKKzoxMDNEMDAwMDQyQzkwMTAwMDAwMDAwNDYxRjgwMDEwMEE1OTcyMjQwMjMKKzoxMDNEMTAwMEUzNkQwMDAwMDAwMDAwNDI2MUIxMDEwMDQwMDAwMDEwQUUKKzoxMDNEMjAwMDYyREQwMTAwQTE5N0E4NDA4MTMyMDAwMDFCODQwMDg4NTkKKzoxMDNEMzAwMDFDQjAwMDAwMDAwMDAwMDU0OEIxMDEwMDBDODAwMDAzMjkKKzoxMDNENDAwMDQyQzkwMTAwMTAwMDAwRjAxMEM4MDEwMDJGMDAyRjVDRDQKKzoxMDNENTAwMDExODAwMTAwMDAwMDAwNDdFNzkxMDEwMEYwMDcwMDQwREEKKzoxMDNENjAwMDFCOTgwMTAwNzI5NzIwMTUxQTZDMDAwMDcwMDAwMDAzNjgKKzoxMDNENzAwMDQ4QzkwMTAwMDAwMDIyNTBGMUIxMDEwMDAwMDAwMDAzMTkKKzoxMDNEODAwMEYwQjEwMTAwRkYwNzAwMDhFMDhEMDEwMDAwMDAwMDQyRDMKKzoxMDNEOTAwMDYxQjEwMTAwQTAwMDAwQTQ2MkREMDEwMEIwOTdBODQ2NTcKKzoxMDNEQTAwMDFGMTAwMDAwNzI5NzAwMDU0OEIxMDAwMDcyOTcwMDAyRDIKKzoxMDNEQjAwMDEwQzAwMDAwQjY5N0EyNDQxRjdDMDAwMEVGOTQwMDAxRTEKKzoxMDNEQzAwMDhDMzAwMTAwMDAwMDAwMUIxMEIxMDAwMDAwODAwMDEwQ0EKKzoxMDNERDAwMDQ0QzkwMTAwMEMwMDAwNDBGMTk5MDEwMDEwMDAwMDA4RTYKKzoxMDNERTAwMEYwQzkwMTAwMDAwMDAwMTZGMEIxMDEwMDEwMDAwMDAzNEUKKzoxMDNERjAwMEUwQzkwMTAwMDAwMDAwNDU2MUIxMDEwMDIwMDAwMDEwOTEKKzoxMDNFMDAwMDYyREQwMTAwMDAwMEE4NUMxRjkwMDAwMEJEOTcwMDQwMkIKKzoxMDNFMTAwMDgxQjIwMDAwMTcwMDAwRDBBMkM5MDEwMDAwMDBBMjQwM0EKKzoxMDNFMjAwMDI3RUMwMDAwMDAwMDAwMjAwMEIwMDEwMEUyOTUwMDQxRjYKKzoxMDNFMzAwMEEzNDEwMTAwQzE5NzAwNDEyN0QwMDAwMDEwMDAwMDA3RjYKKzoxMDNFNDAwMDk2RTQwMTAwMDAwMDAwNEI4MDk0MDEwMDAwMDAwMDU0NDMKKzoxMDNFNTAwMDYxQjEwMTAwMDA4MDAwNDA2MkREMDEwMDAwMDBBODQwNjcKKzoxMDNFNjAwMDgxQjIwMDAwQzg5NzAwNDA4MUIyMDAwMDFBOTgwMDQwNUIKKzoxMDNFNzAwMDJCMzAwMTAwQUMwMDJEMDYxNkMwMDEwMDkwMDAyREYwODMKKzoxMDNFODAwMDE2QzQwMTAwRDA5N0EwRjAxNjQ0MDAwMDAwMDAwMDQxQzUKKzoxMDNFOTAwMDE3QzAwMTAwMEUwMDAwQTI0NEM5MDEwMDAwMDA2Q0YwMzAKKzoxMDNFQTAwMDMwQjAwMTAwQUMwMDJENDA4N0IwMDEwMDAwMDA2Q0YwODQKKzoxMDNFQjAwMDI4QjAwMTAwRDk5NzIyNEExOTdDMDAwMDAwMzAwMDQzNDUKKzoxMDNFQzAwMDg2QzgwMTAwMDAzMDAwMEIxNkM4MDEwMEQ5OTdBNDQwMzUKKzoxMDNFRDAwMDgxMzIwMDAwMDAwMDAwNDExN0MwMDEwMEZBOTcyMjA2NUQKKzoxMDNFRTAwMDgwMzIwMDAwRTY5N0EyMDYxNDZDMDAwMEUzOTcyMjQ4OTcKKzoxMDNFRjAwMDE5N0MwMDAwREU5N0EwNDExNzQwMDAwMDAwMDAwMDQxM0YKKzoxMDNGMDAwMDE3QzAwMTAwMDAwMDAwNDEzMUMwMDEwMDkwMDAyMDE4REUKKzoxMDNGMTAwMEUwQjEwMTAwOEIwMDJENDgxOTgwMDEwMDhCMDAyMDQ1ODUKKzoxMDNGMjAwMEU3OTEwMTAwRTY5NzAwNDA4NzkwMDAwMDA4MDAwMDQzRjkKKzoxMDNGMzAwMDg2OTgwMTAwRTY5N0EwNDgxNzQwMDAwMDAwMDAwMDQxNjUKKzoxMDNGNDAwMDE3QzAwMTAwQjAwMDAwNDA0Mzk5MDEwMDEwNTAwMDQzMjkKKzoxMDNGNTAwMEZDQzkwMTAwNTE5ODAwMzA4MTMwMDEwMDAwMDAwMDQwOTAKKzoxMDNGNjAwMEU1QjEwMTAwRjE5NzIyNEExOTdDMDAwMDA4MDAwMEEyODcKKzoxMDNGNzAwMDQ0QzkwMTAwQ0MwMDJEQUJGOUIxMDEwMDAwMDAwMEFCMzkKKzoxMDNGODAwMDE3QzAwMTAwRjA5N0EwRjAxNjQ0MDAwMDAwMDAwMDQxQTcKKzoxMDNGOTAwMDE3QzAwMTAwRjU5NzY0RjA4MkIwMDAwMEE0MDAwMDQwNTMKKzoxMDNGQTAwMDQ3OTkwMTAwRjU5N0EyRjI4MDMyMDAwMDAwMDAwMDQxMUQKKzoxMDNGQjAwMEU1QjEwMTAwOEMwMDIwMThFMEIxMDEwMDkwMDAwMDQwNDQKKzoxMDNGQzAwMDQ1OTkwMTAwMDAwMDYwMDYzMEMwMDEwMDAwMDA4NjBDMjkKKzoxMDNGRDAwMDgwQjIwMDAwQkMwMDJENDYxOTkwMDEwMEEwMDBBMEYyQTQKKzoxMDNGRTAwMEU0QjEwMTAwQjAwMDAwNDA0Mzk5MDEwMDEwNTAwMDQzQ0IKKzoxMDNGRjAwMEZDQzkwMTAwNTE5ODAwMzA4MTMwMDEwMDAwMDBBMjRBNDQKKzoxMDQwMDAwMDE5RkMwMDAwMDgwMDAwQTI0NEM5MDEwMENDMDAyREFCM0YKKzoxMDQwMTAwMEY5QjEwMTAwMDAwMDAwQUIxN0MwMDEwMDAzOThBMEYwNDcKKzoxMDQwMjAwMDE2NDQwMDAwMDAwMDAwNDExN0MwMDEwMDAwMDBFNEYwNDkKKzoxMDQwMzAwMDgyQjAwMTAwMDA4MDAwMTA0NEM5MDEwMDAwMDAwMDQxNkUKKzoxMDQwNDAwMEYwQjEwMTAwMDAwMDAwMDNGMEIxMDEwMDAwMDAwMDAwMjkKKzoxMDQwNTAwMEYwQjEwMTAwMDAwMDAwMTA2MkIxMDEwMDAwMDBBODFCRDcKKzoxMDQwNjAwMEUwQjEwMDAwMDg5ODAwNDA4MUIyMDAwMDAwRjAwMDBDQjAKKzoxMDQwNzAwMDdFODkwMTAwMDAwMEE2NEM5NTYwMDEwMDAwMDA4MDRBODYKKzoxMDQwODAwMDE4OTQwMTAwMDA4MDAwMTA0NEM5MDEwMDA0MDAyMjAxQkUKKzoxMDQwOTAwMEYwMzEwMDAwMjAwMDAwNDBGMEM5MDEwMDAwMDAwMDE2Q0YKKzoxMDQwQTAwMEYwQjEwMTAwMDAwMDAwNDM2MUIxMDEwMDIwMDAwMDEwRTgKKzoxMDQwQjAwMDYyREQwMTAwMDAwMEE4MTVFMEIxMDAwMDEzOTgwMDQwODcKKzoxMDQwQzAwMDgxQjIwMDAwMTA4MDAwMDM0NEM5MDEwMDAwMDAwMDA2MTYKKzoxMDQwRDAwMEYwQjEwMTAwMDAwMDAwMDFGMEIxMDEwMDAwMDBFODVGNTQKKzoxMDQwRTAwMDE3OTAwMTAwNzAwMDAwNDA0Mzk5MDEwMDdBMDEyRUZFRjQKKzoxMDQwRjAwMDkyQjAwMTAwOEIwMDJERjYxNkIwMDEwMDIwOTgyMjQzRUIKKzoxMDQxMDAwMEU3N0QwMDAwMDAwMDAwNDQ0NUMxMDEwMDA0MDAwMEE2NTYKKzoxMDQxMTAwMDJBQjAwMTAwMjgwMDZFMDY4MkM4MDEwMDI0OTgyMjRBQjUKKzoxMDQxMjAwMDE5N0MwMDAwMDAwMDAwNDI0NUQxMDEwMDAwMDA2RTRDRTcKKzoxMDQxMzAwMDgzQzAwMTAwMDAwMDAwNDE5MkMwMDEwMDI1OTg0MjMwNzgKKzoxMDQxNDAwMDNEMDcwMDAwMDAwMDY2OUU4M0IwMDEwMDAwMDAxQTQxOTgKKzoxMDQxNTAwMDNEQzMwMTAwMDAwMDAwNDE5MkMwMDEwMDA2MDAwMEEyMjIKKzoxMDQxNjAwMDQ0QzkwMTAwMTAwMDAwNDk5OEY0MDEwMDJFOTgyNjMwM0YKKzoxMDQxNzAwMDkzMDQwMDAwMkU5ODkwNEM5MjQwMDAwMDAwMDAwMDQxRjMKKzoxMDQxODAwMDkzQzAwMTAwRkZGRjgwNDlFQ0E5MDEwMDAwODAwMDEwRUUKKzoxMDQxOTAwMDQ0QzkwMTAwMDQwMDIyMDFGMDMxMDAwMDAwMDAwMDA5QzAKKzoxMDQxQTAwMEYwQjEwMTAwMDAwMDAwMThGMEIxMDEwMDIwMDAwMDEwODMKKzoxMDQxQjAwMDYyREQwMTAwMDAwMEE4MTVFMEIxMDAwMDMzOTgwMDQwNjYKKzoxMDQxQzAwMDgxQjIwMDAwNDA5ODIyNUY4MTdDMDAwMDNGOThBMjQwQUQKKzoxMDQxRDAwMDE5N0MwMDAwMDAwMDAwNDAxOTkwMDEwMDAwMDAwMDU0MEMKKzoxMDQxRTAwMDYxQjEwMTAwMTAwMDAwMDc5NkU0MDEwMDAwMDAwMDRGREIKKzoxMDQxRjAwMDk3OTQwMTAwMDAwMDAwNEI2MkIxMDEwMDNGOTgyODQwRjUKKzoxMDQyMDAwMDgxMzIwMDAwM0M5ODAwNDA4MUIyMDAwMDAwMDBBMjIxRjEKKzoxMDQyMTAwMDgxODQwMDAwNDM5OEEyNUY4MTZDMDAwMDAwMDBBMjQzRUIKKzoxMDQyMjAwMDE5N0MwMTAwMDAwMDAwNDMxOTkwMDEwMDAwMDAwMDU0QjcKKzoxMDQyMzAwMDYxQjEwMTAwMTAwMDAwMDc5NkU0MDEwMDAwMDAwMDQwOTkKKzoxMDQyNDAwMDk2OTQwMTAwMDAwMDAwNEI2MkIxMDEwMDAwMDBBODQwRkMKKzoxMDQyNTAwMDgxQjIwMDAwNDY5ODAwNDA4MUIyMDAwMDAwODAwMDE5NDEKKzoxMDQyNjAwMDQ0QzkwMTAwMDQwMDIyMDJGMDMxMDAwMDAwMDAwMDBCRUMKKzoxMDQyNzAwMEYwQjEwMTAwMDAwMDAwMTNGMEIxMDEwMDAwMDAwMDQzQTQKKzoxMDQyODAwMDYxQjEwMTAwMjAwMDAwMTk2MkREMDEwMDAwMDBBODA4RjIKKzoxMDQyOTAwMEUwQjEwMDAwNEU5ODAwNDA4MUIyMDAwMDdDMDAyREYwOUIKKzoxMDQyQTAwMDg0QjAwMTAwMDIwMDAwRjA5OEY0MDEwMDU3OTgyMDRDRkYKKzoxMDQyQjAwMDg0NkMwMDAwODgwMDAwNDA0Mzk5MDEwMDU3OTgyMEYyNjgKKzoxMDQyQzAwMDg0NkMwMDAwMDAwMDAwNDA4NUIwMDEwMDk4MDAyRDE0QUYKKzoxMDQyRDAwMDgyQjAwMTAwMDAwMDAwRjA5OEIwMDEwMEEzMDAyRDE0OEUKKzoxMDQyRTAwMDk4RDAwMTAwNUM5ODIwNEM4NDZDMDAwMDAwMDAwMDRDQzkKKzoxMDQyRjAwMDg0QjAwMTAwMDAwMDAwRjM4MEUwMDEwMDVGOTgyMzQwREIKKzoxMDQzMDAwMDg0NkMwMDAwMDAwMDAwNDA4NEIwMDEwMEQwMDAyMDE0NDQKKzoxMDQzMTAwMEUwQjEwMTAwOTgwMDI1NDI4MEIwMDEwMDAwMDA2RUYzN0EKKzoxMDQzMjAwMDgwRjAwMTAwMDAwMEE2NDI4MkMwMDAwMDY1OThBMDQwMTUKKzoxMDQzMzAwMDE2NDAwMDAwMDAwMDAwNDExN0MwMDEwMDAwMDA5RkYwN0YKKzoxMDQzNDAwMDgyRUMwMDAwOTgwMEEwNDFFMEIxMDEwMDY4OTgwMDEyRTIKKzoxMDQzNTAwMDEwQzkwMDAwMDA0ODgwNDAwQjk4MDEwMEMwNDk4MDQwMEYKKzoxMDQzNjAwMDBCOTgwMTAwODA0QjgwNDAwQjk4MDEwMDQwNEQ4MDQwMkQKKzoxMDQzNzAwMDBCOTgwMTAwMDA0RjgwNDAwQjk4MDEwMEMwNTA4MDQwMTYKKzoxMDQzODAwMDBCOTgwMTAwODA1MjgwNDAwQjk4MDEwMDQwNTQ4MDQwRkYKKzoxMDQzOTAwMDBCOTgwMTAwMDA1NjgwNDAwQjk4MDEwMEMwNTc4MDQwRTgKKzoxMDQzQTAwMDBCOTgwMTAwODA1OTgwNDAwQjk4MDEwMDQwNUI4MDQwRDEKKzoxMDQzQjAwMDBCOTgwMTAwMDA1RDgwNDAwQjk4MDEwMEMwNUU4MDQwQkEKKzoxMDQzQzAwMDBCOTgwMTAwODA2MDgwNDAwQjk4MDEwMDQwNjI4MDQwQTMKKzoxMDQzRDAwMDBCOTgwMTAwMDA2NDgwNDAwQjk4MDEwMEMwNjU4MDQwOEMKKzoxMDQzRTAwMDBCOTgwMTAwODA2NzgwNDAwQjk4MDEwMDQwNjk4MDQwNzUKKzoxMDQzRjAwMDBCOTgwMTAwMDA2QjgwNDAwQjk4MDEwMEMwNkM4MDQwNUUKKzoxMDQ0MDAwMDBCOTgwMTAwODA2RTgwNDAwQjk4MDEwMDQwNzA4MDQwNDYKKzoxMDQ0MTAwMDBCOTgwMTAwMDA3MjgwNDAwQjk4MDEwMEMwNzM4MDQwMkYKKzoxMDQ0MjAwMDBCOTgwMTAwODA3NTgwNDAwQjk4MDEwMDQwNzc4MDQwMTgKKzoxMDQ0MzAwMDBCOTgwMTAwMDA3OTgwNDAwQjk4MDEwMEMwN0E4MDQwMDEKKzoxMDQ0NDAwMDBCOTgwMTAwODA3QzgwNDAwQjk4MDEwMDQwN0U4MDQwRUEKKzoxMDQ0NTAwMDBCOTgwMTAwODg5ODQzNTc2MTMxMDAwMDk0OThBMjU3NDcKKzoxMDQ0NjAwMDczN0QwMDAwOTQ5OEEyNDA4MTZGMDAwMDAwMDAwMDQ4MTYKKzoxMDQ0NzAwMDYxQjEwMTAwMDAxMDAwNEE2MkREMDEwMDhDOThBODRBNzkKKzoxMDQ0ODAwMDgwMzMwMDAwOTE5ODIyNUY5NTdDMDAwMDAwMDAwMDRCNzMKKzoxMDQ0OTAwMDYyQjEwMTAwOEY5OEE4NEJBQzMzMDAwMDAwMDAxQkE1NEYKKzoxMDQ0QTAwMDgyQjMwMTAwMDAwMDAwQkU4M0MzMDEwMDAwMDA4MDQwMTEKKzoxMDQ0QjAwMDk3QjAwMTAwMDAxMDAwNEE2MkREMDEwMDk4OTgyODQwODIKKzoxMDQ0QzAwMDgxMzIwMDAwOTQ5ODIyNTc3NzdEMDAwMDAwMDA5QjIwRTUKKzoxMDQ0RDAwMDk3QjAwMTAwMDAwMDAwNEI2MkIxMDEwMDk4OThBODQwMUQKKzoxMDQ0RTAwMDgxMzIwMDAwMDAwMDlCNDA5N0IwMDEwMDAwMDAyRTEwQjgKKzoxMDQ0RjAwMDQ4QjEwMTAwQTgwMTAwNDBGMTk5MDEwMDAwMDAwMDA1NDkKKzoxMDQ1MDAwMEYwQjEwMTAwMDkwMDAwMDc5NkU0MDEwMDAwMDA2MEE3NzcKKzoxMDQ1MTAwMDk3QzAwMTAwMDAwMDAwMTA2MkIxMDEwMDAwMDBBODQwMzcKKzoxMDQ1MjAwMDgxQjIwMDAwQTA5ODAwNDA4MUIyMDAwMEE4MDAyRDFDQkMKKzoxMDQ1MzAwMDhBQjAwMTAwMDAwMDlGRjA4QUQwMDAwMDAwMDBBMjQwNzUKKzoxMDQ1NDAwMDhCRUMwMDAwOEEwMDIwNDBFN0IxMDEwMEI0MDAwMDQwN0QKKzoxMDQ1NTAwMDQ3OTkwMTAwQTQwMDJENDVFMEQxMDEwMEFEOTg5QzE3QkEKKzoxMDQ1NjAwMDgwMzIwMDAwQkUwMDJGQUI4M0IwMDEwMDE3OTkwMDE0MDkKKzoxMDQ1NzAwMDgyNTAwMTAwQjI5ODAwNDA4MUIyMDAwMEIyOTgyMkYyNEQKKzoxMDQ1ODAwMDgyMzAwMDAwOEMwMDAwNDA0Mzk5MDEwMEIyOTg5RjFDQ0IKKzoxMDQ1OTAwMEUwNkQwMDAwQkUwMDAwNDA0Nzk5MDEwMDE3OTkwMDQwRkYKKzoxMDQ1QTAwMDgxMzIwMTAwQTgwMDIwMUNFMEIxMDEwMDlDMDAyRDMwRTgKKzoxMDQ1QjAwMDgxQjAwMTAwODgwMDJERjA4NEIwMDEwMDk0MDAyREYyM0MKKzoxMDQ1QzAwMDg2QjAwMTAwREM5ODIzRjA4NDZDMDAwMDBDMDAwMDQyRUYKKzoxMDQ1RDAwMDg4RjQwMTAwREM5ODIwNTA4OTZDMDAwMENCOThBMzkyRUQKKzoxMDQ1RTAwMDg3NkMwMDAwQkI5ODAwNDQxMEM5MDAwMERDOTgwMDBBRUEKKzoxMDQ1RjAwMDg3QjAwMDAwREM5ODAwMDk4N0IwMDAwMERDOTgwMDA4NTQKKzoxMDQ2MDAwMDg3QjAwMDAwREM5ODAwMDc4N0IwMDAwMERDOTgwMDA3NDYKKzoxMDQ2MTAwMDg3QjAwMDAwREM5ODAwMDc4N0IwMDAwMERDOTgwMDA2MzcKKzoxMDQ2MjAwMDg3QjAwMDAwREM5ODAwMDY4N0IwMDAwMERDOTgwMDA2MjgKKzoxMDQ2MzAwMDg3QjAwMDAwREM5ODAwMDY4N0IwMDAwMERDOTgwMDA2MTgKKzoxMDQ2NDAwMDg3QjAwMDAwREM5ODAwMDU4N0IwMDAwMERDOTgwMDA1MEEKKzoxMDQ2NTAwMDg3QjAwMDAwREM5ODAwMDU4N0IwMDAwMERDOTgwMDA1RkEKKzoxMDQ2NjAwMDg3QjAwMDAwREM5ODAwMDU4N0IwMDAwMENDOTgwMDQ0QkIKKzoxMDQ2NzAwMDEwQzkwMDAwREM5ODAwMEY4N0IwMDAwMERDOTgwMDBFMjUKKzoxMDQ2ODAwMDg3QjAwMDAwREM5ODAwMEQ4N0IwMDAwMERDOTgwMDBDQkIKKzoxMDQ2OTAwMDg3QjAwMDAwREM5ODAwMEM4N0IwMDAwMERDOTgwMDBDQUMKKzoxMDQ2QTAwMDg3QjAwMDAwREM5ODAwMEM4N0IwMDAwMERDOTgwMDBDOUMKKzoxMDQ2QjAwMDg3QjAwMDAwREM5ODAwMEM4N0IwMDAwMERDOTgwMDBCOEQKKzoxMDQ2QzAwMDg3QjAwMDAwREM5ODAwMEI4N0IwMDAwMERDOTgwMDBCN0UKKzoxMDQ2RDAwMDg3QjAwMDAwREM5ODAwMEI4N0IwMDAwMERDOTgwMDBCNkUKKzoxMDQ2RTAwMDg3QjAwMDAwREM5ODAwMEI4N0IwMDAwMERDOTgwMDBCNUUKKzoxMDQ2RjAwMDg3QjAwMDAwQkYwMDJENDM4NEMwMDEwMDkwMDAyREYzNUYKKzoxMDQ3MDAwMDgwRTAwMTAwRTE5ODIzNDA4NDZDMDAwMDk0MDAyMDlEMkIKKzoxMDQ3MTAwMEUxQjEwMTAwMDAwMDAwNDA4NEIwMDEwMEU1OThBMkYwODIKKzoxMDQ3MjAwMDM4NkMwMDAwOUMwMDIwNDJFMEIxMDEwMDAwMDAwMDVGRjYKKzoxMDQ3MzAwMDEzOTQwMTAwMDAwMDgwNDYxOTgwMDEwMDlDMDAyMDQyNzMKKzoxMDQ3NDAwMEUwQjEwMTAwMzcwMDAwNDA0Mzk5MDEwMDA0MDAwMEYzOEMKKzoxMDQ3NTAwMDgwRjQwMTAwMEYwMDAwRjM4Mjg4MDEwMEVCOTgyMzQxRjAKKzoxMDQ3NjAwMDgwNkMwMDAwMDAwMDAwNUYxMzk0MDEwMDAwMDA4OTBDQzEKKzoxMDQ3NzAwMDgwQjIwMDAwQkMwMDAwNDA0Mzk5MDEwMEEwMDBBMEYyRkMKKzoxMDQ3ODAwMEU0QjEwMTAwMDAwMDlGNDEyNEVDMDAwMEY1OThBNjQwMzAKKzoxMDQ3OTAwMDgxMzIwMDAwMDAwMDlGNDIzOEVDMDAwMEY1OThBNjQwRUUKKzoxMDQ3QTAwMDgxMzIwMDAwQjQwMDAwNDA0Mzk5MDEwMEY3OThBM0YwNjMKKzoxMDQ3QjAwMDNBNkMwMDAwMDAwMDgwNDA4MUIyMDEwMEI0MDAwMDQwNkIKKzoxMDQ3QzAwMDQzOTkwMTAwRkI5ODIyRjAzQTZDMDAwMEI0MDAyMDFERDAKKzoxMDQ3RDAwMEUwQjEwMTAwODAwMDJENUYxMzk0MDEwMEZCOTgyM0YwRUQKKzoxMDQ3RTAwMDNBNkMwMDAwODAwMDIwMURFMEIxMDEwMEMwMDAyMDEyRTIKKzoxMDQ3RjAwMEUwQjEwMTAwQzQwMEEwMUNFMEIxMDEwMDAwODAwMDAzOTIKKzoxMDQ4MDAwMDQ0QzkwMTAwMDAwMDAwNDJFMEIxMDEwMDEyMDAwMDQwNzQKKzoxMDQ4MTAwMDg3OTgwMTAwMDQ5OTlGNDEyNDZDMDAwMDAwMDAwMDQxMkEKKzoxMDQ4MjAwMDhDQjAwMTAwMDAwMDAwMTI4Q0QwMDEwMDA1OTkwMDQxRkQKKzoxMDQ4MzAwMDI0QjAwMDAwMDAwMDAwNDA4REIwMDEwMDU1OTkwMDQwRjgKKzoxMDQ4NDAwMDgxMzIwMTAwMDAwMDAwNDU2MUIxMDEwMDQwMDAwMDEwMEMKKzoxMDQ4NTAwMDYyREQwMTAwMDAwMEE4NDA4MUIyMDAwMDA3OTkwMDQwMUQKKzoxMDQ4NjAwMDgxQjIwMDAwRDQ5NTAwNDA4MTMyMDEwMDAwMDAwMDE2QTIKKzoxMDQ4NzAwMDgwQjIwMTAwMDAwMEE3MDg4MDMyMDEwMDBGOTlBMjQwMTkKKzoxMDQ4ODAwMDk1NkMwMDAwRTI5NTAwNDA4MTMyMDEwMDAwODIwMEE2OTQKKzoxMDQ4OTAwMDA0QjAwMTAwMDAwMDAwNDAyREIwMDEwMEEwOTgyRjQwOUUKKzoxMDQ4QTAwMDExQjAwMTAwRTk4OTAwNDE4OUIwMDAwMDAwMDA5RkY4QzMKKzoxMDQ4QjAwMDNFRUMwMDAwMDAwMDlGMTJFMEVEMDAwMEM4MDAyMEFCQkQKKzoxMDQ4QzAwMEUxQjEwMTAwQ0MwMEEwMUZFMEIxMDEwMDE5OTlBMzVGODQKKzoxMDQ4RDAwMEU3NkQwMDAwMDAwMDAwNDFFN0MxMDEwMEE2MDAwMDQwQjQKKzoxMDQ4RTAwMDQ3OTkwMTAwMkQ5OTIyRjI4NjMwMDAwMDAzMDAwMDQzMTEKKzoxMDQ4RjAwMDg0RjQwMTAwMDEwMDAwNDE4MENDMDEwMEI4MDAyRDQyODkKKzoxMDQ5MDAwMDgwRDAwMTAwMDAwMDYyNDA4NkMwMDEwMDIxOTkxRjQzNTEKKzoxMDQ5MTAwMDgwMzIwMDAwMjI5OUEyNDA4NzZDMDAwMDAwMDA2MjQxQjIKKzoxMDQ5MjAwMDg3QjAwMTAwMjY5OTlGNDA4MDMyMDAwMDAwMDAwMDQwQkYKKzoxMDQ5MzAwMDg1QjAwMTAwMDAwMDAwNDA4NEQwMDEwMDAwMDAwMDQyNkEKKzoxMDQ5NDAwMDgwQjAwMTAwMDAwMDAwRjI4OEIwMDEwMDAyMDAwMDQ0QzUKKzoxMDQ5NTAwMDg0RjQwMTAwQjgwMDJFNDI4MEQwMDEwMDAwMDA2MjQwQzMKKzoxMDQ5NjAwMDg4QzAwMTAwMkM5OTFGNDQ4MDMyMDAwMDMwOTlBMjQwNzkKKzoxMDQ5NzAwMDg5NkMwMDAwMzA5OTYyNDE4OUIwMDAwMDAzMDA2MjQxRjcKKzoxMDQ5ODAwMDg2RTQwMTAwQjgwMDAwNDA0NTk5MDEwMDAxMDA2MjQxNDEKKzoxMDQ5OTAwMDg4RTQwMTAwQTQwMDIwNDBFNUIxMDEwMEEyMDAyMDQwMEQKKzoxMDQ5QTAwMEU3QjEwMTAwQkMwMDJFNDM4N0YwMDEwMDAwMDAwMDQ0ODUKKzoxMDQ5QjAwMDg2QzAwMTAwMzY5OTIwNDM4NzZDMDAwMDAwMDA4MDQzQzgKKzoxMDQ5QzAwMEU1QjEwMTAwNDAwMTAwNDM4MENFMDEwMDAwMDBBNDQzOTYKKzoxMDQ5RDAwMEU0MzEwMTAwNDAwMUUyNDA4Nzk4MDEwMDg4MDAyRDQ0NDUKKzoxMDQ5RTAwMDgxQjAwMTAwOTAwMDJERjIyRUIwMDEwMDlDMDAyREYwNEUKKzoxMDQ5RjAwMDg2QjAwMTAwOTAwMDJERjA4MkIwMDEwMEJBMDAyREYwQzkKKzoxMDRBMDAwMDk4QjAwMTAwNDM5OUEyMTI5ODZDMDAwMEJDMDAyREYyRUUKKzoxMDRBMTAwMDk4QjAwMTAwNDM5OUEwRjI5ODZDMDAwMDAwMDAwMDE3QzQKKzoxMDRBMjAwMDgyQjAwMTAwOUMwMDIwNDFFMEIxMDEwMEI0MDAyRDEyRDEKKzoxMDRBMzAwMDg2RDAwMTAwNDY5OUEzNDFFMDZEMDAwMDQ3OTkwMEYwM0YKKzoxMDRBNDAwMDg0QjAwMDAwMDAwMDAwNDE4NEIwMDEwMDgwMDAyRDQzQ0MKKzoxMDRBNTAwMDg0RDAwMTAwNEE5OTlGNDI4MDMyMDAwMDAwMDAwMDQwNEIKKzoxMDRBNjAwMDg1QjAwMTAwNEM5OUEzNDIxNDZDMDAwMDREOTkwMDBBRDYKKzoxMDRBNzAwMDBDQjAwMDAwMDAwMDAwNDIwQ0IwMDEwMDRGOTlBMDE3REMKKzoxMDRBODAwMDBDNkMwMDAwMDAwMDgwMTcwQ0IwMDEwMDU0OTkyMjQwMEIKKzoxMDRBOTAwMDBENkMwMDAwMDAwMEEwMEEwQ0VDMDAwMDAxMDAwMEYwMEEKKzoxMDRBQTAwMDgyRjQwMTAwNTQ5OUEwNDEwQzZDMDAwMDAwMDBBMkYwQjcKKzoxMDRBQjAwMDgwMzIwMTAwMDAwMDgwNDA4MUIwMDEwMEU2OTUwMDQwOTYKKzoxMDRBQzAwMDgxMzIwMTAwMDQ4MDAwMDM0NEM5MDEwMDAwMDAwMDQ2NTcKKzoxMDRBRDAwMEYwQjEwMTAwMDAwMDAwNDBGMUIxMDEwMDAwMDA2MDQxQjAKKzoxMDRBRTAwMDg3OTQwMTAwMDA4MDAwMTA0NEM5MDEwMDAwMDAwMDUwQkMKKzoxMDRBRjAwMEYxQjEwMTAwMDAwMDAwNDhGMEIxMDEwMDAwMDAwMDQ5RTAKKzoxMDRCMDAwMEYwQjEwMTAwMDAwMDAwMDNFMEIxMDEwMDAwMDAwMDQ1MjkKKzoxMDRCMTAwMDYxQjEwMTAwMjAwMDAwMTA2MkREMDEwMDAwMDBBODVEMEQKKzoxMDRCMjAwMDA1OTAwMDAwNjA5OTAwNDA4MUIyMDAwMDAwMDAyRTRCMEIKKzoxMDRCMzAwMDE5OTAwMTAwMDUwMDJBMENFNEIxMDEwMDAwMDA4MDA0NzYKKzoxMDRCNDAwMEU2QjEwMTAwNkE5OTIyNDkxRjdDMDAwMDQyMDAwMDQwNDIKKzoxMDRCNTAwMDg3OTgwMTAwMDAwMDAwNDkxRjgwMDEwMEMwOTcwMDQwQjUKKzoxMDRCNjAwMDhEQjAwMDAwNzA5OTIyNDBBRjZGMDAwMDAwMDAwMDE1NkEKKzoxMDRCNzAwMDk2QjAwMTAwODg5ODAwMDg5NDMwMDEwMDZGOTkyMjQwOTcKKzoxMDRCODAwMDk3NkMwMDAwQzA5NzAwNDY4N0IwMDAwMDAwMDA4MDQwOEUKKzoxMDRCOTAwMDg3QjAwMTAwNzA5OTQzNDg2MTMxMDAwMDAwMTAwMDA4OUYKKzoxMDRCQTAwMDYyREQwMTAwNzU5OTI4NDA4NzMwMDAwMDcxOTkyMjQ4MjQKKzoxMDRCQjAwMDc3N0QwMDAwQzA5NzFCNDY4N0IwMDAwMDc4OTkyMjVGODAKKzoxMDRCQzAwMDExN0MwMDAwMDQwMDIyMTU2MjMxMDAwMDc2OTlBODQwOTMKKzoxMDRCRDAwMDgxMzIwMDAwMDAwMDlCNDA4MUIyMDEwMDAwMDAwMDQwRDMKKzoxMDRCRTAwMDQ5QjEwMTAwMzAwMDAwNDBBMTk5MDEwMDAwMDAwMDQwREYKKzoxMDRCRjAwMDkzQjAwMTAwMDAwMDAwNDAxRkIwMDEwMEM5OTkwMDQ5QjYKKzoxMDRDMDAwMDk2MzAwMTAwMDcwMDAwNDkwNkU0MDEwMDAwMzkwMDAzNjYKKzoxMDRDMTAwMDA2QzgwMTAwMDAwMDAwNDAwNUIwMDEwMDIwMDAwMEQwREYKKzoxMDRDMjAwMEEwQzkwMTAwMDAwMDAwNDE5M0MwMDEwMDdEOTlBMDU0N0IKKzoxMDRDMzAwMDkzNkMwMDAwMDAwMDJFMDU5N0IwMDEwMDAwNDgwMDQwNzIKKzoxMDRDNDAwMDQ5OTkwMTAwMDAwMDAwNDBFMUIxMDEwMEMwMDEwMEEyNEIKKzoxMDRDNTAwMDQ0QzkwMTAwODY5OUEyNDE5NzUwMDAwMDAwMDAwMDIwM0QKKzoxMDRDNjAwMDQ5QjMwMTAwQ0U5OTAwNDA0OTMxMDEwMDAwQjUyRTA4M0EKKzoxMDRDNzAwMDk3QjAwMTAwMDAwMDAwNDBGMUIxMDEwMDhDOTlBMjQxMDEKKzoxMDRDODAwMDk3NTAwMDAwMTgwMDAwNDA5Nzk4MDEwMDAwOTcyRTQwQjAKKzoxMDRDOTAwMDgxQjIwMTAwMDAwMDAwNDBGMUIxMDEwMDkwOTlBMjQxRjEKKzoxMDRDQTAwMDk3NTAwMDAwMDAwMDAwNDA0OUIxMDEwMDQwMTgyRTA1NTcKKzoxMDRDQjAwMDk3QjAwMTAwMDAwMDAwNDBGMUIxMDEwMDk0OTlBMjQxQjkKKzoxMDRDQzAwMDk3NTAwMDAwNTc5NTIwNDBFN0IxMDEwMDMwOTQwMDQwMTQKKzoxMDRDRDAwMDQ1OTkwMTAwNjQwMDAwNDBFNTk5MDEwMDU2OTUyMDQwODcKKzoxMDRDRTAwMEU3QjEwMTAwQjg5NDIwNDFFNUIxMDEwMEJBOTQyMDQxMzgKKzoxMDRDRjAwMEU1QjEwMTAwOTg5NDAwNDA0NTk5MDEwMDAyMDAwMDQwOTAKKzoxMDREMDAwMDk3OTgwMTAwMDAwMDAwNDBGMUIxMDEwMDlFOTlBMjQxNzYKKzoxMDREMTAwMDk3NTAwMDAwMDAwMDAwNDA5N0IwMDEwMDAwMDAwMDQwRTQKKzoxMDREMjAwMDZGQjEwMTAwMDAwMDAwNEI2OEIxMDEwMEEyOTk4NTQxRkMKKzoxMDREMzAwMDk3NDAwMDAwREI5OTAwNDA4MTMyMDEwMDAwMDAwMDQwRjQKKzoxMDRENDAwMDM5QjMwMTAwMDAwMDAwNDAzN0IzMDEwMDAwMDAwMDQwMEIKKzoxMDRENTAwMDM1QjMwMTAwMDAwMDAwNDAzM0IzMDEwMDAwMDAwMDQwMDMKKzoxMDRENjAwMDQxQjMwMTAwMDAwMDAwNDAzRkIzMDEwMDNDMDAwMDQwOUYKKzoxMDRENzAwMDI5OUIwMTAwRUUwNTAwNDAyNTlCMDEwMDQyMDAwMDQwRjgKKzoxMDREODAwMDRCOUIwMTAwMDAwMDAwNDAyRkIzMDEwMDAwMDAwMDQwRDkKKzoxMDREOTAwMDJEQjMwMTAwMDAwMDAwNDA0N0IzMDEwMDAwMDAwMDQwQjcKKzoxMDREQTAwMDQzQjMwMTAwNjAwMDAwNDAyQjlCMDEwMDAwMDAwMDU0NTEKKzoxMDREQjAwMEVGOTMwMTAwMDAwMDAwNTVGMTkzMDEwMEZGRkYwMEE1RjMKKzoxMDREQzAwMDNDOEIwMTAwMDAwMDAwMkM1QkIzMDEwMDAwMDAwMDJDQjQKKzoxMDRERDAwMDQ1QjMwMTAwMDAwMDAwNDA1OUIzMDEwMDAwMDAwMDQwNEQKKzoxMDRERTAwMDU3QjMwMTAwMDAwMDAwNDAyN0IzMDEwMDAwMDAwMDQwNUQKKzoxMDRERjAwMDUzQjMwMTAwQkY5OUEyNTBGRDdGMDAwMEJGOTlBMjUxOUIKKzoxMDRFMDAwMEZEN0YwMDAwQzA5OTAwNDAxREIzMDAwMDUwNDYwMDQwRTcKKzoxMDRFMTAwMDFEOUIwMTAwMDBDMDAwQTY4OEIzMDEwMEZGM0YwMEE2NTMKKzoxMDRFMjAwMDNBQjMwMTAwMDBDMDAwOUQzQjlCMDEwMEI0MDUwMDQwNjcKKzoxMDRFMzAwMDIzOUIwMTAwMDAwMDAwNDA0REIzMDEwMDA4MEEwMEE2QkEKKzoxMDRFNDAwMDE0QjMwMTAwMDEwMTAwOEExNTlCMDEwMDAwODAwMEE2MzcKKzoxMDRFNTAwMDU2QjEwMTAwMDAwMDgwNUU1N0I1MDEwMDE4MDAwMDRCRkMKKzoxMDRFNjAwMDIwRTQwMTAwMDYwMDAwNEI5NkU0MDEwMDAwNDMwMDRCRTMKKzoxMDRFNzAwMDk2QzgwMTAwMTgwMDAwMTAyMERDMDEwMDAwMDA4MDRCRTMKKzoxMDRFODAwMDIwOTQwMTAwMDA5OTJFMEE5N0IwMDEwMDAwMDAwMDQwMTQKKzoxMDRFOTAwMEYxQjEwMTAwQ0Y5OUEyNDE5NzUwMDAwMDAwMDMwMDQwRkEKKzoxMDRFQTAwMDk3OTgwMTAwMDBBOTAwNDA0NTk5MDEwMDAwMDAwMDQwQ0EKKzoxMDRFQjAwMEYxQjEwMTAwRDM5OUEyNDE5NzUwMDAwMDMwMDAwMDQwQTkKKzoxMDRFQzAwMDk3OTgwMTAwMDAwMDAwNTU2MUIxMDEwMDAwMDAwMDRCRkYKKzoxMDRFRDAwMDYyQjEwMTAwRDc5OUE4NDA4MTMyMDAwMEQ3OTlBMjQxNjAKKzoxMDRFRTAwMDk3NTAwMDAwMDAwMDgwNDA4MUIyMDEwMDAwMDAwMDQwQTcKKzoxMDRFRjAwMDg3QjEwMTAwMDAwMDAwNDA5N0IwMDEwMDAwMDAwMDRCQTYKKzoxMDRGMDAwMDgwQjEwMTAwMDEwMDAwQTY4MkIxMDEwMEREOTk4NTQxNTgKKzoxMDRGMTAwMDk3NDAwMDAwMDAwMDAwNDA5N0IxMDEwMDAwMDAwMDQwRjEKKzoxMDRGMjAwMDk3QjAwMTAwMDAwMDAwNEI5MEIxMDEwMDAxMDAwMEE2MDUKKzoxMDRGMzAwMDkyQjEwMTAwRTI5OTg1NDE5NzQwMDAwMDAwMDA4MDQwNTUKKzoxMDRGNDAwMDgxQjIwMTAwRTY5OTQ0NDA4MTMyMDAwMDAwMDAwMDEyNjUKKzoxMDRGNTAwMDgwQjEwMTAwRkZGRjlDNEI4Mjg5MDEwMEU5OTk0NDQwMjgKKzoxMDRGNjAwMDgxMzIwMDAwMDAwMDAwNEE4MEIxMDEwMDAxMDA5Q0E2Q0YKKzoxMDRGNzAwMDgyQjEwMTAwRUM5OTQ0NDA4MTMyMDAwMEZGRkYwMDRCRjgKKzoxMDRGODAwMDg0ODkwMTAwMDAwMDlDQzIyNEIwMDEwMDAwMDAwMDRBOTYKKzoxMDRGOTAwMDkwQjEwMTAwRkZGRjgwNEI5Mjg5MDEwMDAwMDAwMDRBQTAKKzoxMDRGQTAwMDkwQjEwMTAwMDEwMDgwQTY5MkIxMDEwMEZGRkYwMDRCMEIKKzoxMDRGQjAwMDk0ODkwMTAwMDAwMDgwQ0E5NEIwMDEwMDAwMDA4MDQwODQKKzoxMDRGQzAwMDgxQjIwMTAwMDAwMDAwNDA4MUIwMDEwMEY3OTk4MEE1ODYKKzoxMDRGRDAwMDgwMzIwMDAwRjg5OTAwQTU4MDMyMDAwMDAwMDAwMDQxRjYKKzoxMDRGRTAwMDgxQzAwMTAwRjk5OTgwQTU4MDMyMDAwMDgwMDEwMDQwNTUKKzoxMDRGRjAwMDgzOTgwMTAwMDI5QTIwNEY4MTZDMDAwMDAwMDEwMDQwNUMKKzoxMDUwMDAwMDgzOTgwMTAwMDI5QTIwNEI4MTZDMDAwMDgwMDAwMDQwRDAKKzoxMDUwMTAwMDgzOTgwMTAwMDI5QTIwNDc4MTZDMDAwMDAwMDAwMDQwNDQKKzoxMDUwMjAwMDgzOTgwMTAwMDAwMDAwNDE4MkRDMDEwMDAzOTAwMDQxRjAKKzoxMDUwMzAwMDIwOTkwMTAwMDAwMDAwNDA0OUIxMDEwMDAwMTQyRjRDRUMKKzoxMDUwNDAwMDgzQjAwMTAwMDAwMDAwNDBGMUIxMDEwMDA2OUFBMjQxQzYKKzoxMDUwNTAwMDgzNTAwMDAwNjQwMDAwQTU4MEM4MDEwMDA5OUFBMkE1NDEKKzoxMDUwNjAwMDgwNkMwMDAwMjAwMDAwOTAyMDk5MDEwMDAwMDAwMDVGOEIKKzoxMDUwNzAwMDIzOTEwMTAwMEM5QTFGOTE4MDMyMDAwMDMwMDAwMDkwQjMKKzoxMDUwODAwMDIwOTkwMTAwMDAwMDAwNUYyMzkxMDEwMDBGOUExRjkxRjkKKzoxMDUwOTAwMDgwMzIwMDAwNzAwMDAwOTAyMEE5MDEwMDAwMDAwMDVGMzUKKzoxMDUwQTAwMDIzOTEwMTAwMTI5QTFGOTE4MDMyMDAwMDAwMDAwMDVGREUKKzoxMDUwQjAwMDIzOTEwMTAwMTQ5QTFGOTE4MDMyMDAwMDQwNjgwMDkwRjMKKzoxMDUwQzAwMDIwQTkwMTAwRTAwMDAwNDA2MTk5MDEwMDIxMDAwMDQwOUEKKzoxMDUwRDAwMDYxOTkwMTAwMjIwMDAwNDA2MTk5MDEwMDIzMDAwMDQwMTUKKzoxMDUwRTAwMDYxOTkwMTAwMjQwMDAwNDA2MTk5MDEwMDI1MDAwMDQwMDEKKzoxMDUwRjAwMDYxOTkwMTAwMjYwMDAwNDA2MTk5MDEwMDI3MDAwMDQwRUQKKzoxMDUxMDAwMDYxOTkwMTAwQzAwMDAwNDA2MTk5MDEwMEQwMTQwMDQwODUKKzoxMDUxMTAwMDQ1OTkwMTAwMDAwMDAwNDBGMUIxMDEwMDAwMDAwMDQwOEQKKzoxMDUxMjAwMEUxQjEwMTAwMzAwMzAwNDA4NTMwMDEwMEQwMTQwMDQwOUYKKzoxMDUxMzAwMDQ1OTkwMTAwMDIwMTAwQTY4MEIwMDEwMDA0MDMwMDQwNkYKKzoxMDUxNDAwMDgwOTgwMTAwMDYwNTAwQTY4MkIwMDEwMDA4MDcwMDQxMTIKKzoxMDUxNTAwMDgyOTgwMTAwMDAwMDAwNDBGMEIxMDEwMDAwMDAwMDQxMTEKKzoxMDUxNjAwMEUwQjEwMTAwMDgwMDAwNDA4NTk4MDEwMDMwMDMwMDQwRDQKKzoxMDUxNzAwMDgxMzIwMTAwMzkwMzAwNDA4MTMyMDEwMEQ4MTQwMDQwMUYKKzoxMDUxODAwMDQzOTkwMTAwRkYwMkEyRjg4MDZDMDAwMDAwMDMyMkYwQTYKKzoxMDUxOTAwMDgyNkMwMDAwRkYwMjAwNDA4MUIyMDAwMEQwMTQyRTQwNUIKKzoxMDUxQTAwMDQ5QjEwMTAwMDUwMDAwNDBBMzlCMDEwMDAwMDAwMDQwNDAKKzoxMDUxQjAwMEMxQjMwMTAwMDgwMDAwREQ4MUY0MDEwMDM2OUEwMDQwMEYKKzoxMDUxQzAwMDEwQzkwMDAwM0M5QTAwMDU4MUIwMDAwMDU1MDEwMDQwNjQKKzoxMDUxRDAwMDgxQjIwMDAwNDQ5QTAwMDU4MUIwMDAwMDU1MDEwMDQwRjIKKzoxMDUxRTAwMDgxQjIwMDAwNDk5QTAwNDRBNUIzMDAwMDRCOUEwMDQ0RTQKKzoxMDUxRjAwMEE1QjMwMDAwMDIwMDAwNDBBNEU3MDEwMDAwMDAwMEUwQTkKKzoxMDUyMDAwMDgxQjEwMTAwRkZGRjAwQzFGMDg5MDEwMDQxOUEyMjQxRjQKKzoxMDUyMTAwMDgxNTAwMDAwM0Q5QTAwNDFDMUMzMDAwMEIxMDIwMDQwMkUKKzoxMDUyMjAwMDgxMzIwMTAwQzUwMjAwNDA4MTMyMDEwMDVBMDEwMDQwNzQKKzoxMDUyMzAwMDgxQjIwMDAwMDIwMDAwNDBBNEU3MDEwMDAwMDAwMEUwOEQKKzoxMDUyNDAwMDkxQjEwMTAwRkZGRjAwQzlGMDg5MDEwMDQxOUEyMjQxOUMKKzoxMDUyNTAwMDgxNTAwMDAwNDU5QTAwNDFDMUMzMDAwMEZGRkYwMERFRkQKKzoxMDUyNjAwMDg1ODkwMTAwNDE5QTAwQzJFMEIxMDAwMEZGRkYwMERFMjUKKzoxMDUyNzAwMDk1ODkwMTAwNDE5QTAwQ0FFMEIxMDAwMDA0MDAwMENCMEEKKzoxMDUyODAwMDgxQzgwMTAwNkE4NDAwNDBGMjkzMDAwMDA0MDAwMDQwREQKKzoxMDUyOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjAKKzoxMDUyQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTAKKzoxMDUyQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDAKKzoxMDUyQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjAKKzoxMDUyRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTAKKzoxMDUyRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDAKKzoxMDUyRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzAKKzoxMDUzMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUYKKzoxMDUzMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUYKKzoxMDUzMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEYKKzoxMDUzMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0YKKzoxMDUzNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkYKKzoxMDUzNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUYKKzoxMDUzNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEYKKzoxMDUzNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0YKKzoxMDUzODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkYKKzoxMDUzOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUYKKzoxMDUzQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEYKKzoxMDUzQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkYKKzoxMDUzQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUYKKzoxMDUzRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREYKKzoxMDUzRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0YKKzoxMDUzRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkYKKzoxMDU0MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUUKKzoxMDU0MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUUKKzoxMDU0MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEUKKzoxMDU0MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0UKKzoxMDU0NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkUKKzoxMDU0NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDU0NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEUKKzoxMDU0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0UKKzoxMDU0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkUKKzoxMDU0OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUUKKzoxMDU0QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEUKKzoxMDU0QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkUKKzoxMDU0QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUUKKzoxMDU0RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDU0RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0UKKzoxMDU0RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkUKKzoxMDU1MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUQKKzoxMDU1MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUQKKzoxMDU1MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEQKKzoxMDU1MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0QKKzoxMDU1NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkQKKzoxMDU1NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUQKKzoxMDU1NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEQKKzoxMDU1NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0QKKzoxMDU1ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkQKKzoxMDU1OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUQKKzoxMDU1QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEQKKzoxMDU1QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkQKKzoxMDU1QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUQKKzoxMDU1RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREQKKzoxMDU1RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0QKKzoxMDU1RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkQKKzoxMDU2MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUMKKzoxMDU2MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUMKKzoxMDU2MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEMKKzoxMDU2MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0MKKzoxMDU2NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkMKKzoxMDU2NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUMKKzoxMDU2NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEMKKzoxMDU2NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0MKKzoxMDU2ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkMKKzoxMDU2OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUMKKzoxMDU2QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEMKKzoxMDU2QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkMKKzoxMDU2QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUMKKzoxMDU2RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREMKKzoxMDU2RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0MKKzoxMDU2RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkMKKzoxMDU3MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUIKKzoxMDU3MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUIKKzoxMDU3MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEIKKzoxMDU3MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0IKKzoxMDU3NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkIKKzoxMDU3NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUIKKzoxMDU3NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEIKKzoxMDU3NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0IKKzoxMDU3ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkIKKzoxMDU3OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUIKKzoxMDU3QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEIKKzoxMDU3QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkIKKzoxMDU3QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUIKKzoxMDU3RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREIKKzoxMDU3RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0IKKzoxMDU3RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkIKKzoxMDU4MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUEKKzoxMDU4MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUEKKzoxMDU4MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEEKKzoxMDU4MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0EKKzoxMDU4NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkEKKzoxMDU4NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUEKKzoxMDU4NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEEKKzoxMDU4NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0EKKzoxMDU4ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkEKKzoxMDU4OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUEKKzoxMDU4QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEEKKzoxMDU4QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkEKKzoxMDU4QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUEKKzoxMDU4RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREEKKzoxMDU4RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0EKKzoxMDU4RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkEKKzoxMDU5MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTkKKzoxMDU5MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTkKKzoxMDU5MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODkKKzoxMDU5MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzkKKzoxMDU5NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjkKKzoxMDU5NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTkKKzoxMDU5NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDkKKzoxMDU5NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzkKKzoxMDU5ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjkKKzoxMDU5OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTkKKzoxMDU5QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDkKKzoxMDU5QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjkKKzoxMDU5QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTkKKzoxMDU5RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDkKKzoxMDU5RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzkKKzoxMDU5RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjkKKzoxMDVBMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTgKKzoxMDVBMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTgKKzoxMDVBMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODgKKzoxMDVBMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzgKKzoxMDVBNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjgKKzoxMDVBNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTgKKzoxMDVBNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDgKKzoxMDVBNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzgKKzoxMDVBODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjgKKzoxMDVBOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTgKKzoxMDVBQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDgKKzoxMDVBQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjgKKzoxMDVBQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTgKKzoxMDVBRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDgKKzoxMDVBRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzgKKzoxMDVBRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjgKKzoxMDVCMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTcKKzoxMDVCMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTcKKzoxMDVCMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODcKKzoxMDVCMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzcKKzoxMDVCNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjcKKzoxMDVCNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTcKKzoxMDVCNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDcKKzoxMDVCNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzcKKzoxMDVCODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjcKKzoxMDVCOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTcKKzoxMDVCQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDcKKzoxMDVCQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjcKKzoxMDVCQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTcKKzoxMDVCRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDcKKzoxMDVCRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzcKKzoxMDVCRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjcKKzoxMDVDMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTYKKzoxMDVDMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTYKKzoxMDVDMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODYKKzoxMDVDMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzYKKzoxMDVDNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjYKKzoxMDVDNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTYKKzoxMDVDNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDYKKzoxMDVDNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzYKKzoxMDVDODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjYKKzoxMDVDOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTYKKzoxMDVDQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDYKKzoxMDVDQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjYKKzoxMDVDQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTYKKzoxMDVDRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDYKKzoxMDVDRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzYKKzoxMDVDRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjYKKzoxMDVEMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTUKKzoxMDVEMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTUKKzoxMDVEMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODUKKzoxMDVEMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzUKKzoxMDVENDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjUKKzoxMDVENTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTUKKzoxMDVENjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDUKKzoxMDVENzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzUKKzoxMDVEODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjUKKzoxMDVEOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTUKKzoxMDVEQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDUKKzoxMDVEQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjUKKzoxMDVEQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTUKKzoxMDVERDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDUKKzoxMDVERTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzUKKzoxMDVERjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjUKKzoxMDVFMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTQKKzoxMDVFMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTQKKzoxMDVFMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODQKKzoxMDVFMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzQKKzoxMDVFNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjQKKzoxMDVFNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTQKKzoxMDVFNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDQKKzoxMDVFNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzQKKzoxMDVFODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjQKKzoxMDVFOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTQKKzoxMDVFQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDQKKzoxMDVFQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjQKKzoxMDVFQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTQKKzoxMDVFRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDQKKzoxMDVFRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzQKKzoxMDVFRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjQKKzoxMDVGMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTMKKzoxMDVGMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTMKKzoxMDVGMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODMKKzoxMDVGMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzMKKzoxMDVGNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjMKKzoxMDVGNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTMKKzoxMDVGNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDMKKzoxMDVGNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzMKKzoxMDVGODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjMKKzoxMDVGOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTMKKzoxMDVGQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDMKKzoxMDVGQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjMKKzoxMDVGQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTMKKzoxMDVGRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDMKKzoxMDVGRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzMKKzoxMDVGRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjMKKzoxMDYwMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTIKKzoxMDYwMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTIKKzoxMDYwMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODIKKzoxMDYwMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzIKKzoxMDYwNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjIKKzoxMDYwNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTIKKzoxMDYwNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDIKKzoxMDYwNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzIKKzoxMDYwODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjIKKzoxMDYwOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTIKKzoxMDYwQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDIKKzoxMDYwQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjIKKzoxMDYwQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTIKKzoxMDYwRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDIKKzoxMDYwRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzIKKzoxMDYwRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjIKKzoxMDYxMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTEKKzoxMDYxMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTEKKzoxMDYxMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODEKKzoxMDYxMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzEKKzoxMDYxNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjEKKzoxMDYxNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTEKKzoxMDYxNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDEKKzoxMDYxNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzEKKzoxMDYxODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjEKKzoxMDYxOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTEKKzoxMDYxQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDEKKzoxMDYxQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjEKKzoxMDYxQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTEKKzoxMDYxRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDEKKzoxMDYxRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzEKKzoxMDYxRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjEKKzoxMDYyMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTAKKzoxMDYyMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTAKKzoxMDYyMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODAKKzoxMDYyMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzAKKzoxMDYyNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjAKKzoxMDYyNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTAKKzoxMDYyNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDAKKzoxMDYyNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzAKKzoxMDYyODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjAKKzoxMDYyOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTAKKzoxMDYyQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDAKKzoxMDYyQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjAKKzoxMDYyQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTAKKzoxMDYyRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDAKKzoxMDYyRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzAKKzoxMDYyRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjAKKzoxMDYzMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUYKKzoxMDYzMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEYKKzoxMDYzMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0YKKzoxMDYzMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkYKKzoxMDYzNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUYKKzoxMDYzNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEYKKzoxMDYzNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0YKKzoxMDYzNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkYKKzoxMDYzODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUYKKzoxMDYzOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEYKKzoxMDYzQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkYKKzoxMDYzQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUYKKzoxMDYzQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREYKKzoxMDYzRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0YKKzoxMDYzRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkYKKzoxMDYzRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUYKKzoxMDY0MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUUKKzoxMDY0MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEUKKzoxMDY0MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0UKKzoxMDY0MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkUKKzoxMDY0NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDY0NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEUKKzoxMDY0NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0UKKzoxMDY0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkUKKzoxMDY0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUUKKzoxMDY0OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEUKKzoxMDY0QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkUKKzoxMDY0QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUUKKzoxMDY0QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDY0RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0UKKzoxMDY0RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkUKKzoxMDY0RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUUKKzoxMDY1MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUQKKzoxMDY1MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEQKKzoxMDY1MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0QKKzoxMDY1MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkQKKzoxMDY1NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUQKKzoxMDY1NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEQKKzoxMDY1NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0QKKzoxMDY1NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkQKKzoxMDY1ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUQKKzoxMDY1OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEQKKzoxMDY1QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkQKKzoxMDY1QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUQKKzoxMDY1QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREQKKzoxMDY1RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0QKKzoxMDY1RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkQKKzoxMDY1RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUQKKzoxMDY2MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUMKKzoxMDY2MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEMKKzoxMDY2MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0MKKzoxMDY2MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkMKKzoxMDY2NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUMKKzoxMDY2NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEMKKzoxMDY2NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0MKKzoxMDY2NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkMKKzoxMDY2ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUMKKzoxMDY2OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEMKKzoxMDY2QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkMKKzoxMDY2QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUMKKzoxMDY2QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREMKKzoxMDY2RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0MKKzoxMDY2RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkMKKzoxMDY2RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUMKKzoxMDY3MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUIKKzoxMDY3MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEIKKzoxMDY3MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0IKKzoxMDY3MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkIKKzoxMDY3NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUIKKzoxMDY3NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEIKKzoxMDY3NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0IKKzoxMDY3NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkIKKzoxMDY3ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUIKKzoxMDY3OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEIKKzoxMDY3QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkIKKzoxMDY3QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUIKKzoxMDY3QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREIKKzoxMDY3RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0IKKzoxMDY3RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkIKKzoxMDY3RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUIKKzoxMDY4MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUEKKzoxMDY4MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEEKKzoxMDY4MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0EKKzoxMDY4MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkEKKzoxMDY4NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUEKKzoxMDY4NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEEKKzoxMDY4NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0EKKzoxMDY4NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkEKKzoxMDY4ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUEKKzoxMDY4OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEEKKzoxMDY4QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkEKKzoxMDY4QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUEKKzoxMDY4QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREEKKzoxMDY4RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0EKKzoxMDY4RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkEKKzoxMDY4RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUEKKzoxMDY5MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTkKKzoxMDY5MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODkKKzoxMDY5MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzkKKzoxMDY5MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjkKKzoxMDY5NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTkKKzoxMDY5NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDkKKzoxMDY5NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzkKKzoxMDY5NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjkKKzoxMDY5ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTkKKzoxMDY5OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDkKKzoxMDY5QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjkKKzoxMDY5QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTkKKzoxMDY5QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDkKKzoxMDY5RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzkKKzoxMDY5RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjkKKzoxMDY5RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTkKKzoxMDZBMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTgKKzoxMDZBMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODgKKzoxMDZBMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzgKKzoxMDZBMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjgKKzoxMDZBNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTgKKzoxMDZBNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDgKKzoxMDZBNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzgKKzoxMDZBNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjgKKzoxMDZBODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTgKKzoxMDZBOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDgKKzoxMDZBQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjgKKzoxMDZBQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTgKKzoxMDZBQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDgKKzoxMDZBRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzgKKzoxMDZBRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjgKKzoxMDZBRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTgKKzoxMDZCMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTcKKzoxMDZCMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODcKKzoxMDZCMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzcKKzoxMDZCMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjcKKzoxMDZCNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTcKKzoxMDZCNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDcKKzoxMDZCNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzcKKzoxMDZCNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjcKKzoxMDZCODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTcKKzoxMDZCOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDcKKzoxMDZCQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjcKKzoxMDZCQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTcKKzoxMDZCQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDcKKzoxMDZCRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzcKKzoxMDZCRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjcKKzoxMDZCRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTcKKzoxMDZDMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTYKKzoxMDZDMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODYKKzoxMDZDMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzYKKzoxMDZDMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjYKKzoxMDZDNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTYKKzoxMDZDNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDYKKzoxMDZDNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzYKKzoxMDZDNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjYKKzoxMDZDODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTYKKzoxMDZDOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDYKKzoxMDZDQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjYKKzoxMDZDQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTYKKzoxMDZDQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDYKKzoxMDZDRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzYKKzoxMDZDRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjYKKzoxMDZDRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTYKKzoxMDZEMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTUKKzoxMDZEMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODUKKzoxMDZEMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzUKKzoxMDZEMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjUKKzoxMDZENDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTUKKzoxMDZENTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDUKKzoxMDZENjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzUKKzoxMDZENzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjUKKzoxMDZEODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTUKKzoxMDZEOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDUKKzoxMDZEQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjUKKzoxMDZEQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTUKKzoxMDZEQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDUKKzoxMDZERDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzUKKzoxMDZERTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjUKKzoxMDZERjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTUKKzoxMDZFMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTQKKzoxMDZFMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODQKKzoxMDZFMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzQKKzoxMDZFMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjQKKzoxMDZFNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTQKKzoxMDZFNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDQKKzoxMDZFNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzQKKzoxMDZFNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjQKKzoxMDZFODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTQKKzoxMDZFOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDQKKzoxMDZFQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjQKKzoxMDZFQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTQKKzoxMDZFQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDQKKzoxMDZFRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzQKKzoxMDZFRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjQKKzoxMDZFRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTQKKzoxMDZGMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTMKKzoxMDZGMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODMKKzoxMDZGMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzMKKzoxMDZGMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjMKKzoxMDZGNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTMKKzoxMDZGNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDMKKzoxMDZGNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzMKKzoxMDZGNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjMKKzoxMDZGODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTMKKzoxMDZGOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDMKKzoxMDZGQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjMKKzoxMDZGQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTMKKzoxMDZGQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDMKKzoxMDZGRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzMKKzoxMDZGRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjMKKzoxMDZGRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTMKKzoxMDcwMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTIKKzoxMDcwMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODIKKzoxMDcwMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzIKKzoxMDcwMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjIKKzoxMDcwNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTIKKzoxMDcwNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDIKKzoxMDcwNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzIKKzoxMDcwNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjIKKzoxMDcwODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTIKKzoxMDcwOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDIKKzoxMDcwQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjIKKzoxMDcwQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTIKKzoxMDcwQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDIKKzoxMDcwRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzIKKzoxMDcwRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjIKKzoxMDcwRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTIKKzoxMDcxMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTEKKzoxMDcxMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODEKKzoxMDcxMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzEKKzoxMDcxMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjEKKzoxMDcxNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTEKKzoxMDcxNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDEKKzoxMDcxNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzEKKzoxMDcxNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjEKKzoxMDcxODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTEKKzoxMDcxOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDEKKzoxMDcxQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjEKKzoxMDcxQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTEKKzoxMDcxQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDEKKzoxMDcxRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzEKKzoxMDcxRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjEKKzoxMDcxRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTEKKzoxMDcyMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTAKKzoxMDcyMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODAKKzoxMDcyMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzAKKzoxMDcyMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjAKKzoxMDcyNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTAKKzoxMDcyNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDAKKzoxMDcyNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzAKKzoxMDcyNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjAKKzoxMDcyODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTAKKzoxMDcyOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDAKKzoxMDcyQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjAKKzoxMDcyQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTAKKzoxMDcyQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDAKKzoxMDcyRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzAKKzoxMDcyRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjAKKzoxMDcyRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTAKKzoxMDczMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEYKKzoxMDczMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0YKKzoxMDczMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkYKKzoxMDczMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUYKKzoxMDczNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEYKKzoxMDczNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0YKKzoxMDczNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkYKKzoxMDczNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUYKKzoxMDczODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEYKKzoxMDczOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkYKKzoxMDczQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUYKKzoxMDczQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREYKKzoxMDczQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0YKKzoxMDczRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkYKKzoxMDczRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUYKKzoxMDczRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUYKKzoxMDc0MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEUKKzoxMDc0MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0UKKzoxMDc0MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkUKKzoxMDc0MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDc0NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEUKKzoxMDc0NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0UKKzoxMDc0NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkUKKzoxMDc0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUUKKzoxMDc0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEUKKzoxMDc0OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkUKKzoxMDc0QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUUKKzoxMDc0QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDc0QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0UKKzoxMDc0RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkUKKzoxMDc0RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUUKKzoxMDc0RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUUKKzoxMDc1MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEQKKzoxMDc1MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0QKKzoxMDc1MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkQKKzoxMDc1MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUQKKzoxMDc1NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEQKKzoxMDc1NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0QKKzoxMDc1NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkQKKzoxMDc1NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUQKKzoxMDc1ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEQKKzoxMDc1OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkQKKzoxMDc1QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUQKKzoxMDc1QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREQKKzoxMDc1QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0QKKzoxMDc1RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkQKKzoxMDc1RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUQKKzoxMDc1RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUQKKzoxMDc2MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEMKKzoxMDc2MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0MKKzoxMDc2MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkMKKzoxMDc2MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUMKKzoxMDc2NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEMKKzoxMDc2NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0MKKzoxMDc2NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkMKKzoxMDc2NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUMKKzoxMDc2ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEMKKzoxMDc2OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkMKKzoxMDc2QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUMKKzoxMDc2QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREMKKzoxMDc2QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0MKKzoxMDc2RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkMKKzoxMDc2RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUMKKzoxMDc2RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUMKKzoxMDc3MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEIKKzoxMDc3MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0IKKzoxMDc3MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkIKKzoxMDc3MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUIKKzoxMDc3NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEIKKzoxMDc3NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0IKKzoxMDc3NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkIKKzoxMDc3NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUIKKzoxMDc3ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEIKKzoxMDc3OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkIKKzoxMDc3QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUIKKzoxMDc3QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREIKKzoxMDc3QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0IKKzoxMDc3RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkIKKzoxMDc3RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUIKKzoxMDc3RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUIKKzoxMDc4MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEEKKzoxMDc4MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0EKKzoxMDc4MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkEKKzoxMDc4MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUEKKzoxMDc4NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEEKKzoxMDc4NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0EKKzoxMDc4NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkEKKzoxMDc4NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUEKKzoxMDc4ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEEKKzoxMDc4OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkEKKzoxMDc4QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUEKKzoxMDc4QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREEKKzoxMDc4QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0EKKzoxMDc4RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkEKKzoxMDc4RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUEKKzoxMDc4RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUEKKzoxMDc5MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODkKKzoxMDc5MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzkKKzoxMDc5MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjkKKzoxMDc5MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTkKKzoxMDc5NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDkKKzoxMDc5NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzkKKzoxMDc5NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjkKKzoxMDc5NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTkKKzoxMDc5ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDkKKzoxMDc5OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjkKKzoxMDc5QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTkKKzoxMDc5QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDkKKzoxMDc5QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzkKKzoxMDc5RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjkKKzoxMDc5RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTkKKzoxMDc5RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTkKKzoxMDdBMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODgKKzoxMDdBMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzgKKzoxMDdBMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjgKKzoxMDdBMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTgKKzoxMDdBNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDgKKzoxMDdBNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzgKKzoxMDdBNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjgKKzoxMDdBNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTgKKzoxMDdBODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDgKKzoxMDdBOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjgKKzoxMDdBQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTgKKzoxMDdBQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDgKKzoxMDdBQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzgKKzoxMDdBRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjgKKzoxMDdBRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTgKKzoxMDdBRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTgKKzoxMDdCMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODcKKzoxMDdCMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzcKKzoxMDdCMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjcKKzoxMDdCMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTcKKzoxMDdCNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDcKKzoxMDdCNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzcKKzoxMDdCNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjcKKzoxMDdCNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTcKKzoxMDdCODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDcKKzoxMDdCOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjcKKzoxMDdCQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTcKKzoxMDdCQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDcKKzoxMDdCQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzcKKzoxMDdCRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjcKKzoxMDdCRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTcKKzoxMDdCRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTcKKzoxMDdDMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODYKKzoxMDdDMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzYKKzoxMDdDMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjYKKzoxMDdDMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTYKKzoxMDdDNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDYKKzoxMDdDNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzYKKzoxMDdDNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjYKKzoxMDdDNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTYKKzoxMDdDODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDYKKzoxMDdDOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjYKKzoxMDdDQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTYKKzoxMDdDQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDYKKzoxMDdDQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzYKKzoxMDdDRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjYKKzoxMDdDRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTYKKzoxMDdDRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTYKKzoxMDdEMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODUKKzoxMDdEMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzUKKzoxMDdEMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjUKKzoxMDdEMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTUKKzoxMDdENDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDUKKzoxMDdENTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzUKKzoxMDdENjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjUKKzoxMDdENzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTUKKzoxMDdEODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDUKKzoxMDdEOTAwMDgxQjIwMDAwQjY5RjAwODg5QUIwMDAwMEI2OUYwMDg4QUMKKzoxMDdEQTAwMDlBQjAwMDAwQjY5RjAwODg5QUIwMDAwMEI2OUYwMDg4ODUKKzoxMDdEQjAwMDlBQjAwMDAwQjY5RjAwODg5QUIwMDAwMDAwMDAwMDg4Q0EKKzoxMDdEQzAwMDlBQjAwMTAwQjY5RjQxNDA4MTMyMDAwMEI5OUYyMjQwMjUKKzoxMDdERDAwMDdCNkYwMDAwQjY5RjE5NDA4MUIyMDAwMDAwMDAxOTQxN0UKKzoxMDdERTAwMDdCQjMwMTAwMDAwMDAwQTRDNEIzMDEwMDAwMDAwMEExQTcKKzoxMDdERjAwMEM2QjMwMTAwMDAwMDJGQTJDOEIzMDEwMDA4MTQwMDQwNjAKKzoxMDdFMDAwMDQ5OTkwMTAwQjA5RjAwNEQ5QUNDMDEwMEMyOUYyNjQwQzUKKzoxMDdFMTAwMDgxMzIwMDAwMDAwMDAwNEM0OUMxMDEwMEMwOUZBMjQxMTYKKzoxMDdFMjAwMDlCNTAwMDAwQzY5RjgwODA4MDMyMDAwMDAwMDA1MjQ5QjUKKzoxMDdFMzAwMEZEOTMwMTAwMDAwMDAwNEFGRDkzMDEwMEM5OUYwMDQyMkMKKzoxMDdFNDAwMENEOTMwMDAwMDAwMDUxNEFGRDkzMDEwMDAwMDAwMDQ5NUQKKzoxMDdFNTAwMEZEOTMwMTAwQzk5RjAwNDNDQjkzMDAwMDAwMDA1MDQwRjgKKzoxMDdFNjAwMDgxQjIwMTAwRDk5RjAwNDAxOTk5MDEwMDAwMDAwMEYwODMKKzoxMDdFNzAwMDlBQjAwMTAwMDAwMDAwNDQ0OUQxMDEwMDAwMDA0MEYwMjgKKzoxMDdFODAwMDgwQjIwMTAwMDAwMDQxNEQ4MEIyMDEwMEQxOUYwMDQwNEUKKzoxMDdFOTAwMDE5OTkwMTAwMDAwMDRDNDA4MUIyMDEwMDAwMDAwMDQ0MkIKKzoxMDdFQTAwMDQ5RDEwMTAwMDAwMDAwRjA5QUIwMDEwMDAwMDAwMDREMkYKKzoxMDdFQjAwMDEwQjEwMDAwMDAwMDAwRTI0OUIxMDEwMDAwMDAwMEUzNDEKKzoxMDdFQzAwMDQzQjEwMTAwMDAwMDAwRTQ0NUIxMDEwMDAwMDAwMDQwQTIKKzoxMDdFRDAwMDdCQjMwMTAwMDAwMDQ4NEY0MEIxMDEwMEQ5OUYwMDQwMzIKKzoxMDdFRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTQKKzoxMDdFRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTQKKzoxMDdGMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODMKKzoxMDdGMTAwMDgxQjIwMDAwMDAwMDgwNDA4MUIwMDEwMDA0MDAwMDQwRjgKKzoxMDdGMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjMKKzoxMDdGMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTMKKzoxMDdGNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDMKKzoxMDdGNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzMKKzoxMDdGNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjMKKzoxMDdGNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTMKKzoxMDdGODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDMKKzoxMDdGOTAwMDgxQjIwMDAwNkE4NDAwNDA4MUIyMDAwMDMxOUEwMDQwNDIKKzoxMDdGQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDREOUEwMDQwMDAKKzoxMDdGQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDAwMDA4MDQwNTcKKzoxMDdGQzAwMDgxQjIwMTAwMDAwMDAwQTgxMEIxMDAwMDA0MDAwMDQwRDAKKzoxMDdGRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjMKKzoxMDdGRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTMKKzoxMDdGRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTMKKzoxMDgwMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODIKKzowNDgwMTAwMDgxQjIwMDAwMzkKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9zbGljb3NzL2dicmN2dWNvZGUuc3lzLmloZXggYi9maXJtd2FyZS9zbGljb3NzL2dicmN2dWNvZGUuc3lzLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM3YTgzOQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3NsaWNvc3MvZ2JyY3Z1Y29kZS5zeXMuaWhleApAQCAtMCwwICsxLDE2MiBAQAorOjEwMDAwMDAwMDAwMjAwMDA0Nzc1MDEwMDA0QTAxMzAxMDAxQ0I3NUI0QgorOjEwMDAxMDAwMDkzMDAwQjY1RjAxMDAxQzAwMDAwMDIwMTgzQjc4M0E1MAorOjEwMDAyMDAwMDAxQ0EyNzcwMTAwMUMwNzFEMDE3MDE4QUQ3QkYxRkZCOQorOjEwMDAzMDAwMUNCMzdCQTlBQTFFQjQ3QjAxMEMxQ0I1N0IyOTA2MUMzMgorOjEwMDA0MDAwMDAwMDUwNjQwODBDMzE1QTcwMDQwQzMxNUE4MDA0MENDMgorOjEwMDA1MDAwMzE0RTkwMDQwQzMxNEFBMDAwMDkyNTU1QzAwNDBDMzFFMgorOjEwMDA2MDAwNTJCMDAwRTkyNDU1QzAwNENDQjMwMDFDMUNFQjJEMDE5OAorOjEwMDA3MDAwMDAxQzA2NTY1MkQ0MDgwNzlEMDAwMDFDN0JCNzAyMDBFNgorOjEwMDA4MDAwMTBBMDBGNTE1NDA5MDY1NjVFQzAwNEEwMzA3NDAzMDAzRQorOjEwMDA5MDAwQUMzMDc1MDMwMENEMDMzQTAwMUM3QkI3MDIwMDFDNjAzNgorOjEwMDBBMDAwOEU1MTU0MDkyOTI1NzUwMzAwODA4RTUxNTQwOThDMzBENgorOjEwMDBCMDAwOTEwMDA0NDcxQzAxMDAxQ0EwMEY1MTU0MDkwMDAwNjQ2QQorOjEwMDBDMDAwMDAwNDQ3MUM2NUMwMDQ0NzFDNzUwMzAwNkMzMDAxMDAyOAorOjEwMDBEMDAwMUM0RDM0MDIwMDFDN0JCNzAyMDAxQ0EwMEY1MTU0MDlCOAorOjEwMDBFMDAwQzg4MzM3MDAxQzgwMDEwMDAwMUMwMDAwNjQwMDA0QTBDRAorOjEwMDBGMDAwMEY1MDU0MDkwMDAwNzRDMzA0N0JGQkYyMDAxQ0NDMzM4NgorOjEwMDEwMDAwMEQwMDFDQjQ3QkZEMDMxQzgwMEU1MDU0MDlFMEZCMDU2MAorOjEwMDExMDAwMDAxQzAwMDBBQzAzMDBCMzBGNTE1NDA5MDAwMEVDNzA0OAorOjEwMDEyMDAwMDQwMDAwRUM4MDA0MDAwMEFDOTMwMDYxNzZBREMzMDREMQorOjEwMDEzMDAwQzA4RDUxNTQwOUUwN0IwMEMwMUZBMEZEQzUwMTAwQ0M1QgorOjEwMDE0MDAwMzMwNTAwMUNENDAzMDAzQzFDRDREMzFCMDAxQ0MwRDNCQgorOjEwMDE1MDAwNTIwMDFDMDAwMDdDMTMwNDhFOEU1MjU0MDk1QjgwN0U3QQorOjEwMDE2MDAwMTMwNDAwMDAwMDAwMUMwMDAwOTQwMTAwQTAwRjUxNTQ3MworOjEwMDE3MDAwMDlBMDBGNTE1NDA5QzAwM0ZDN0YxQ0EwMDFBMDAxMDA3RAorOjEwMDE4MDAwMDAwMEE0MDEwMEEwMEY1MTU0MDlDMDAzRkMwMzFDRjU5QQorOjEwMDE5MDAwNzcwMTAwMUMyNjdBMDIwNjFDQTAwRjUxNTQwOUIzMEZFOAorOjEwMDFBMDAwNTE1NDA5QjUwMjAyMDAxQ0EwMEY1MTU0MDk3QTdFMDI3NQorOjEwMDFCMDAwMDAxQ0I1MDIwMjAwMUM1MzBGNTI1NDA5QUYwMzAxMDA4QQorOjEwMDFDMDAwMUM3QTBFNTI1NDA5QjUwMjAyMDAxQzAwMDAwMjAwMUNFOQorOjEwMDFEMDAwQTAzREFBMTEwNDAwMDBBQzExMDRENEQzNTIwMDFDQjVGOAorOjEwMDFFMDAwM0VCMjAxMDAyMEZCRkRGRjFGODAyQzhDMDMwMEI5M0FCQQorOjEwMDFGMDAwOUUwMTAwNzUzQjAyMDAxQ0E3MUMwMTAwMTBEQjgzMTY0QQorOjEwMDIwMDAwMDAxQ0M3MUQyMUMxMDRCOTNCOERDMTA0OEIyQzAxMDAwQQorOjEwMDIxMDAwMUM2QjJDMzVDMTA0MDAwMDc4MTEwMENCMkM3OUMxMDQ3MworOjEwMDIyMDAwQTAwRjUxNTQwOUEwMEY1MTU0MDk1NEQwMDIwMDFDNDk4OQorOjEwMDIzMDAwMjVCMTAxMDBBQjJDODFDMTA0QTcxRDc1MDMwMENDMzM4RgorOjEwMDI0MDAwMDkwMDFDRUIyRDAxMDAxQ0VBMjkwMTAwMUNBMDBGNTEyNAorOjEwMDI1MDAwNTQwOUFFMEY1MTU0MDlBMDBGNTE1NDA5RDQwN0ZDMDM5RgorOjEwMDI2MDAwMUM5OTNBMDIwMDFDQkIzODAyMDAxQzAwMzgwMDAwMUMxQworOjEwMDI3MDAwMDAwMEZDMDEwNERCM0I3RTAwMUNDNzFEMDEwMDFDMjZBNgorOjEwMDI4MDAwN0ExNjA2MUMyNzFEMDEwMDFDQjMwRjUxNTQwOTdBMEU2MworOjEwMDI5MDAwNTI1NDA5NTMwRjUyNTQwOTdBMEU1MjU0MDk1MzBGNTJCMworOjEwMDJBMDAwNTQwOTdBMEU1MjU0MDk1MzBGNTI1NDA5QTAwRjUxNTQ1NQorOjEwMDJCMDAwMDk3QTA2MDIwMDFDNTMwRjUyNTQwOUFGMDMwMTAwMUNCNworOjEwMDJDMDAwN0EwRTUyNTQwOTUzMEY1MjU0MDk3QTBFNTI1NDA5NTM1QworOjEwMDJEMDAwMEY1MjU0MDk3QTBFNTI1NDA5NTMwRjUyNTQwOTdBMEU5MAorOjEwMDJFMDAwNTI1NDA5MDAzRDAyMDAxQzAwMDA1ODEyMDBDQjJDMDFBMgorOjEwMDJGMDAwMDAxQzc1M0IwMjAwMUNBNzFDMDEwMDEwQTY3QkZEMDUxRAorOjEwMDMwMDAwMUMwMDAwOTBDMjA0QTY3QkZEMDUxQzAwMDBBOEMyMDRDRQorOjEwMDMxMDAwQ0IyRjA1MDAxQzYwMkMwMDAwMUNDNzFDRTkwMjAwQTBBQworOjEwMDMyMDAwMEY1MTU0MDk1MzA3MDIwMDFDQzA4M0YxMzIxQzAwMDAxNgorOjEwMDMzMDAwNjAwMjA0NDY3QUU2MDUxQzdBMEU1MjU0MDlDMDgzRjEyNQorOjEwMDM0MDAwMzIxQzAwMDA2ODAyMDQ0MEZBMTUwMDFDMDAwMEE4MDJEQworOjEwMDM1MDAwMDQ0NjdBRTYwNTFDQTAwRjUxNTQwOUEwMEY1MTU0MDkxOAorOjEwMDM2MDAwQTAwRjUxNTQwOUEwMEY1MTU0MDlCMzdCMDFDMDFGNzQ1MQorOjEwMDM3MDAwMEU1MDU0MDlDMDAzOUMwMDFDODAwMEY4MDIwMDAwMDBDRAorOjEwMDM4MDAwRjgwMjA0MDAwMENDMTIwNTA3MUQwMTAwMUNENEQzMkI3OQorOjEwMDM5MDAwMDAxQ0Q0RDM1MjAwMUM4MDc2OUQxMzA0MDAwMDAwMDM3RgorOjEwMDNBMDAwMDBBNjdCQjUwMzEwQzc5QzAwMDAxQzgwMkMwMDAwMUMxRAorOjEwMDNCMDAwMDAwMDdDMDIwNDAwMDA3NEMzMDRBQjJERjkxMjA1MDc5MQorOjEwMDNDMDAwMURENUMyMDQ4QjJEMDEwMDFDNjkyNTAxMDAxQ0E2N0JENAorOjEwMDNEMDAwQjUwMzEwQ0IyRjA5MDAxQzYwMkMwMDAwMUMwMDAwNjgyNgorOjEwMDNFMDAwMDMwMDUzMEY1MjU0MDk0NjdBRTYwNTFDN0EwRTUyNTQwNAorOjEwMDNGMDAwMDk0MEZBMTUwMDFDMDAwMDMwMDMwNDQ2N0FFNjA1MUM4QgorOjEwMDQwMDAwQjUwRjUxNTQwOUEwMEY1MTU0MDk3M0VDNEEwMzA0NjAwRAorOjEwMDQxMDAwMkMwMDAwMUMwMDAwNDgwMzAwQzcxQzAxMDAxQzAwMDA0OQorOjEwMDQyMDAwNDgxMzA1MDcxRDAxMDAxQ0MwRDcyMjAwMUM3NTU2OUVFRAorOjEwMDQzMDAwMTMwNDYwMkMwMDAwMUNFNzFDNjUwMzA0RTc5QzAwMDAwQgorOjEwMDQ0MDAwMUNBNjdCQjUwMzEwODAyQzAwMDAxQzAwMDAxODAzMDRDMAorOjEwMDQ1MDAwMDAwMDc0QzMwNEI5N0IwMTAwMUMwMDAwQUNDMzA0Q0JEMgorOjEwMDQ2MDAwQUZGQzA3MUNDQjJGMDEwNDFDQzc5RjgwMDMxQzAwMDA5RQorOjEwMDQ3MDAwQUNDMzA0Q0JBRkZDMDcxQ0NCMkYwRDA0MUNDNzlGODA2MworOjEwMDQ4MDAwMDMxQzAwMDBBQ0MzMDRDQkFGMDBGODFEQ0IyRjAxMDA1MAorOjEwMDQ5MDAwMURBNjdCQjUwMzFDQzc5Q0FDQzMwNDAwMDBBQzEzMDVCMAorOjEwMDRBMDAwMDcxRDAxMDAxQ0MwMURGQ0QzMDgyNzlEMDQwNDAwQTBFQgorOjEwMDRCMDAwRUU2NkQ0MDBGQjc1MjkxNDA0MjA3QjA2MDAxQ0MwMUNDQQorOjEwMDRDMDAwM0MwNDAwMDAwMEQwRDMwODAwMDAyMEY0MDBDMEVGRjI4QworOjEwMDREMDAwMDAxQzIwMjU3QzE0MDQ2MEI3RjIwMzAwMDAwMDJDMTVEQQorOjEwMDRFMDAwMDBDQ0IzRkMwMzFDQ0MzMzA1MDIxQzAwMDAyQ0M1MDQ1QgorOjEwMDRGMDAwNjBCNzJFMDUwNDAwMDAyQzE1MDQwMDAwN0NDNDA0QzA2NQorOjEwMDUwMDAwMURCOEYzMDQwMDAwODhDNDA0MDc5RDAwMDAxQzFCNzQ4MAorOjEwMDUxMDAwMURGNDA0QTY3QjExMDQxQ0EwMEY4OTU0MDlFMDdCMDA4NAorOjEwMDUyMDAwRkMxRjM5N0YwMjAwMUMwNzFEQkRDMzA0QTY3QkNEMDM0MQorOjEwMDUzMDAwMUMwMDAwODhDNDA0RTAxQzAwMDAxQzAwMDBDNDAzMDQ2QworOjEwMDU0MDAwQ0JBRjAwRjgxRENCMkYwMTEwMUQwMDAwQ0NDMzA0MDA2MQorOjEwMDU1MDAwMDBDQzAzMDRDQkFGMDBGODFEQ0IyRjAxMTgxREM3OUZBMworOjEwMDU2MDAwMDAwQjFDMDAwMENDQzMwNEZCNzUwMTAwMUMwNzFEMDExRgorOjEwMDU3MDAwMDAxQ0NDQjNGQzAzMUNDQzMzMDEwMjFDMDAwMENDQzMxOAorOjEwMDU4MDAwMDRBMDFDMDAwMDFDQTBFRUMyMDMwNENCQUZGQzA3MUM5RgorOjEwMDU5MDAwQ0IyRjA5MDQxQ0ZCNzUwMTAwMUMwMDAwQ0NDMzA0Q0M0QworOjEwMDVBMDAwQjNGQzAzMUNDQzMzMDEwMjFDMDAwMDJDQzUwNDAwMDA2QQorOjEwMDVCMDAwOTgzNDA1Q0NCM0ZDMDMxQ0NDMzMxNTAyMUM0NzlENzQ0NgorOjEwMDVDMDAwQzQwNDAwMDA5ODQ0MDA4MDFEOUM1NDA0ODcxREFEMDRBMQorOjEwMDVEMDAwMDBDRTc2MDEwMDFDRUY3NkJEQzQwNEE0NzdBRDI0MDlEQgorOjEwMDVFMDAwRTQ3NjAxMDAxQ0M0NzYwMTAwMUMwMDAwQjg1NDA0RDc1NgorOjEwMDVGMDAwNzYwMTUwMThGNjc2MDEwMDFDMDAwMDAwMzAxODAwMDA0QgorOjEwMDYwMDAwMDAwMDEwQ0MzMDYxQzUwNEVCMkQwMTAwMUNFQTI5MDE2QgorOjEwMDYxMDAwMDAxQ0MwNTkwMTAwMUNGNTc3NDlDNTA0RTAzMEZDMDRGQQorOjEwMDYyMDAwMDAwMDRDRDAwNDAwMjA0QzE0MDUwMDAwMDAwODA1MDAxOAorOjEwMDYzMDAwQ0NCM0ZDMDMxQ0NDMzMwOTAyMUNFQjJERDVDNDA0Q0M3OQorOjEwMDY0MDAwQjNGQzAzMUNDQzMzMTkwMjFDRUIyREQ1QzQwNENDQjM3MgorOjEwMDY1MDAwRkMwMzFDQ0MzMzBEMDIxQ0VCMkRENUM0MDRDQ0IzRkMyNQorOjEwMDY2MDAwMDMxQ0NDMzMxMTAyMUNFQjJERDVDNDA0MDA3QjAwODA4RAorOjEwMDY3MDAwMUNBRTc3NjEwNTAwMDAwMDA0QzAwNEQzOEIwMEZDMUY5MgorOjEwMDY4MDAwNjA3QTNDMDAxQzYwNENFMDA0MDBDMDJGMjAwNTFGRTA5NQorOjEwMDY5MDAwMzBEMDA0MDA4MDI1RDAwNDAwQjU1QkQxMDQwNDY5MjY2NQorOjEwMDZBMDAwMDEwMDFDNkEyQjAxMDAxQzgwMUQwMDAwMUNBOTI1NjE5MworOjEwMDZCMDAwMDUwMEVFMzAwMDAwMUNBRjc3MjEwNTAwQjQ1RjAxNDA1QgorOjEwMDZDMDAwMTgwNzlENjQ1NTA0Qjc3NjAxMDAxQzk2NzYwMTAwMUMzRQorOjEwMDZEMDAwNDcxRDAxMDAxQ0E0MzMwMTYwMThBNDJGMDE2MDE4NjQ5OQorOjEwMDZFMDAwNzcwMTYwMTgyNDc3MDE2MDE4NDQ3NzAxMDAxQzY0ODg0MgorOjEwMDZGMDAwMDMwMDFDQTQzRjAxMDAxQ0E0M0IwMTAwMUM1MzdCMDAxMQorOjEwMDcwMDAwQzAxQ0QzQ0YxQjAwMUM1MzRGMDIwMDFDREFDRjAwQzAwQgorOjEwMDcxMDAwMUZENTU3MEYwMDFDRDNEMzM3MDAxQ0Q0NTMwRjAwMUMxOAorOjEwMDcyMDAwRTAyOTAwMDAxQ0Y1RDVDQzA1MDAwMDAwQjg1NTA0Nzc4MQorOjEwMDczMDAwNTYwMTAwMUM1NjUzMDEwMDFDMDAwMDAwMTAxODAwMDA1OAorOjEwMDc0MDAwMDRDMDA0RjU1NTAxMDAxQzAwMDBEMDU1MDQ3NzU2MDE4MworOjEwMDc1MDAwMDAxQzU2NTMwMTAwMUMwMDAwMDAxMDE4MDAwMDA0QzBDQgorOjEwMDc2MDAwMDRDQjJGMDExODEwQ0IyRjAxMTAxMENCMkYwMTA4MTAzNAorOjEwMDc3MDAwQ0IyRjAxMDgxMENCMkYwMTIwMTBDQjJGMDEwMDEwQ0I2NQorOjEwMDc4MDAwMkYwMTI4MTA4OTI1NzFDMjA0MDAwMDBDQzMwNDAwMDA0OQorOjEwMDc5MDAwNzRDMzA0MDAwMDc0QzMwNDAwMDA3NEMzMDQwMDAwNzAzOAorOjEwMDdBMDAwQzIwNDAwMDAwQ0MzMDQwMDAwNzRDMzA0MDAwMDc0QzMzRQorOjEwMDdCMDAwMDQwMDAwNzRDMzA0NDAxQzZDQzAwNDQwMUM5Q0MwMDRCMgorOjEwMDdDMDAwQTc3Nzc1QzMwNDAwMDBDNEMwMDQyNzFERjFDMDA0MDA0RQorOjEwMDdEMDAwMDA3NEMzMDQwMDAwNzRDMzA0MDAwMDc0QzMwNDAwMDA2OAorOjEwMDdFMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDg4QgorOjEwMDdGMDAwQzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzZGRAorOjEwMDgwMDAwMDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDRBRQorOjEwMDgxMDAwMDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDBBMgorOjEwMDgyMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA5MgorOjEwMDgzMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDgzQQorOjEwMDg0MDAwQzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzZBQworOjEwMDg1MDAwMDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQ1RQorOjEwMDg2MDAwMDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDA1MgorOjEwMDg3MDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0MgorOjEwMDg4MDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhFQQorOjEwMDg5MDAwQzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzY1QworOjEwMDhBMDAwMDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwRQorOjEwMDhCMDAwMDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMgorOjEwMDhDMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDBGMgorOjEwMDhEMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDg5QQorOjEwMDhFMDAwQzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwQworOjEwMDhGMDAwMDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDRCRQorOjEwMDkwMDAwMDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDBCMQorOjEwMDkxMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDBBMQorOjEwMDkyMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDg0OQorOjEwMDkzMDAwQzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzZCQgorOjEwMDk0MDAwMDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQ2RAorOjEwMDk1MDAwMDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDA2MQorOjEwMDk2MDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA1MQorOjEwMDk3MDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhGOQorOjEwMDk4MDAwQzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzY2QgorOjEwMDk5MDAwMDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQxRAorOjEwMDlBMDAwMDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAxMQorOjEwMDlCMDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDAwMQorOjEwMDlDMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhBOQorOjEwMDlEMDAwQzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDAwMDQ4QzYxQgorOjEwMDlFMDAwMDQwMDAwNDhDNjA0MDAwMDQ4QzYwNDAwMDA0OEM2MDRDRAorOjEwMDlGMDAwMDAwMDQ4QzYwNDAwMDA0OEM2MDQwMDAwNDhDNjA0MDBDMQorOjA0MEEwMDAwMDA0OEM2MDRFMAorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5zeXMuaWhleCBiL2Zpcm13YXJlL3NsaWNvc3Mvb2FzaXNkYmdkb3dubG9hZC5zeXMuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGIzNzZhCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvc2xpY29zcy9vYXNpc2RiZ2Rvd25sb2FkLnN5cy5paGV4CkBAIC0wLDAgKzEsNTEyNCBAQAorOjEwMDAwMDAwMDIwMDAwMDAwMDQwMDAwMDAwMDAwMTAwMDAwMDAwMDBBRAorOjEwMDAxMDAwMDA4MDAwMDAxNTAwMDA0MDgxQjIwMDAwMUIwMDAwNDA3RAorOjEwMDAyMDAwODFCMjAwMDAyMTAwMDA0MDgxQjIwMDAwMDMwMDAwNDBDNgorOjEwMDAzMDAwODFCMjAwMDAwMDAwMDBBODk4QjAwMTAwMDQ4MEEyNDAzNgorOjEwMDA0MDAwRkQ3RjAwMDAwOTAwQTI0OUREN0QwMDAwMDAwMDAwNEM5QQorOjEwMDA1MDAwODBCMjAxMDAwNzAwMDA0MEQxQjEwMDAwMDAwMDAwNEM1OAorOjEwMDA2MDAwODBCMjAxMDAwOTAwQTI0MDc1N0QwMDAwNjAwMDAwNDBFMAorOjEwMDA3MDAwNjE5OTAxMDAwQjAwQThCMTdFMzEwMDAwMDkwMDAwNDAyOQorOjEwMDA4MDAwODFCMjAwMDAwMDgwOEY5ODE4MzEwMDAwMTAwMDAwOThBNQorOjEwMDA5MDAwODBFNDAxMDAwMDAwNDE5ODgwOTQwMTAwMDAwMDAwNDBDRAorOjEwMDBBMDAwODFCMjAxMDAxMDAwMDA5ODgwRTQwMTAwMEUwMDQwOTgyOQorOjEwMDBCMDAwODA5NDAwMDAxMTAwMDA0MDgxQjIwMDAwMDAwMDAwNDA2OAorOjEwMDBDMDAwQTU5OTAxMDAxOTAwMjk0MDgxMzIwMDAwMTkwMDE0QkNEMworOjEwMDBEMDAwODAzMjAwMDAwRTAwOTNCQzgwMzIwMDAwMDAwMDUwNDBDRgorOjEwMDBFMDAwODFCMjAxMDAwMDgwMDA0MDgxQjIwMDAwMTAwMDAwNDA5OQorOjEwMDBGMDAwQTU5OTAxMDAxRjAwMjk0MDgxMzIwMDAwMUYwMDE0QkM5NworOjEwMDEwMDAwODAzMjAwMDAxMjAwOTNCQzgwMzIwMDAwMDAwMDUwNDA5QQorOjEwMDExMDAwODFCMjAxMDAwMTgwMDA0MDgxQjIwMDAwMjAwMDAwNDA1NworOjEwMDEyMDAwQTU5OTAxMDAyNTAwMjk0MDgxMzIwMDAwMjUwMDE0QkM1QQorOjEwMDEzMDAwODAzMjAwMDAxNDAwOTNCQzgwMzIwMDAwMDAwMDAwNDlBRgorOjEwMDE0MDAwREQ4MTAxMDAxMjAxMDA0MDgxMzIwMTAwMzMwMTAwNDBENQorOjEwMDE1MDAwODEzMjAxMDAyQTAwMTRCQzgwMzIwMDAwRkUwMDEzQkM3MgorOjEwMDE2MDAwODAzMjAwMDA1NDk1MDA0MDQ1OTkwMTAwRkZGRjAwNDA5NworOjEwMDE3MDAwRTU5OTAxMDAwMDAwMkY0MDQ5QjEwMTAwMDAwMDAwNDA1NgorOjEwMDE4MDAwRTFCMTAxMDAwMDAwMDA0MEZEQjMwMTAwMDAwMDAwNDBBQgorOjEwMDE5MDAwRkZCMzAxMDAzMzAwMThFRTgwMzIwMDAwMDAwMDAwNTA3MQorOjEwMDFBMDAwODlCMDAxMDAzMjAwQTI0MTg5NTAwMDAwOTkwMDAwNDA0RQorOjEwMDFCMDAwODEzMjAxMDAzMDk0MDA0MDQzOTkwMTAwMDAwMDAwRjhCMgorOjEwMDFDMDAwMjBCMTAxMDAwMDAwMDBGQUUwQjMwMTAwMzkwMDk4RUUxMAorOjEwMDFEMDAwODAzMjAwMDAwMDAwMDBGQjgwQjAwMTAwM0IwMDgwRjM5MworOjEwMDFFMDAwREUzMzAwMDAwMDAwMDA0N0ZEOTMwMTAwM0UwMDgzRjM3MgorOjEwMDFGMDAwODAzMjAwMDBGMDAwMDBGMzgwODgwMTAwMDE4MDAwNDBBMAorOjEwMDIwMDAwMkVERDAxMDAwMDk0MDA0MDQzOTkwMTAwMDAwMDAwNDZFQgorOjEwMDIxMDAwNDNDMTAxMDAwMDAwMDBGQTI0QjEwMTAwN0MwMDE4RUU4NworOjEwMDIyMDAwODAzMjAwMDA0NTAwOTVFODgwMzIwMDAwRkZGRjAwRThDMgorOjEwMDIzMDAwODA4ODAxMDA3QzAwMjY0MDgxMzIwMDAwMDAwMDAwNDBFMAorOjEwMDI0MDAwRDU5OTAxMDAwMDAwMDBGMkVDQjMwMTAwMDAwMDAwRjhCNQorOjEwMDI1MDAwRDZCMTAxMDAwODAwMDA0MEQ1OTkwMTAwMDAwMDAwRjA2RgorOjEwMDI2MDAwRDZCMTAxMDBGRjAwMDBGOEVFOEIwMTAwMDgwMTAwNDA0QworOjEwMDI3MDAwRDU5OTAxMDBGRjAwMDBGMDgwOEMwMTAwMDAwMDAwRjcxQworOjEwMDI4MDAwODE5NDAxMDAwMDAwMDA0MEQ2QjEwMTAwRkYwMDAwRjg5OQorOjEwMDI5MDAwODA4ODAxMDAzQzAwMDA0MEQ1OTkwMTAwRkYwMDAwRjA3QgorOjEwMDJBMDAwRDY4RDAxMDBGRkZGMDBGMEYwREIwMTAwMDAwMDAwNDhFOAorOjEwMDJCMDAwODFFMDAxMDAwMDAwMDBGODgxOTQwMTAwM0MwMTAwNDA1MQorOjEwMDJDMDAwRDU5OTAxMDAwMDAwMDA0MEQ2QjEwMTAwRkYwMDAwRjgwMAorOjEwMDJEMDAwODA4ODAxMDAwMDAwMDA0ODgxRTAwMTAwMDAwMDAwRjg3MworOjEwMDJFMDAwODE5NDAxMDAzQzAyMDA0MEQ1OTkwMTAwMDAwMDAwNDBDQgorOjEwMDJGMDAwRDZCMTAxMDAyQzAwMDA0MEQ1OTkwMTAwMDAwMDAwRjhBMworOjEwMDMwMDAwRDZCMTAxMDAxRTAwMDBGMDgyRjQwMTAwRkYzRjAwRjhBQQorOjEwMDMxMDAwODBEODAxMDA2NDAwMjY0MDgxMzIwMDAwMDAwMDAwNDFDNgorOjEwMDMyMDAwODFEMDAxMDBGRkZGMDA0MDgwRDgwMTAwMDAwMDAwNDFBMworOjEwMDMzMDAwODA5NDAxMDAwMDAwMDA0MEQ4QjEwMTAwNjgwMDIyRkE1QQorOjEwMDM0MDAwODAzMDAwMDAwMDAwMDA0QzgxRTAwMTAwMDEwMDAwNDAwRQorOjEwMDM1MDAwODBDQzAxMDAwMDAwMDA0MERFQjEwMTAwMDAwMTAwNDAzRgorOjEwMDM2MDAwRDU5OTAxMDAxMDAwMDBGQTgwRTQwMTAwMDAwMDAwRjZCOQorOjEwMDM3MDAwODE5NDAxMDAwMDAwMDA0MEQ2QjEwMTAwMDAwMjAwNDA1RAorOjEwMDM4MDAwRDU5OTAxMDAxMDAwMDBGQTgwRTQwMTAwMDAwMDAwRjY5OQorOjEwMDM5MDAwODE5NDAxMDAwMDAwMDA0MEQ2QjEwMTAwMDYwMDAwNDAzOQorOjEwMDNBMDAwRDU5OTAxMDAxMDAwMDBGQkQ2RTUwMTAwMDcwMDAwNDBEMAorOjEwMDNCMDAwRDU5OTAxMDAxODAwMDBGQkQ2RTUwMTAwNDgwMDAwNDA3NworOjEwMDNDMDAwRDU5OTAxMDAxMDAwMDBGQUQ2RTUwMTAwNTAwMDAwNDA2OAorOjEwMDNEMDAwRDU5OTAxMDAxMDAwMDBGQkQ2RTUwMTAwMDMwMDAwRkJFOQorOjEwMDNFMDAwN0E4OTAxMDAwMDAwMDBGMERDQjEwMTAwN0MwMDAwNENDMworOjEwMDNGMDAwREQ5MTAwMDA3QzAwOTVFODg0MzAwMDAwMDAwMDJGRTlDQQorOjEwMDQwMDAwRkFCMzAxMDAwMDAwMDA0MEQxQjEwMTAwRkYwMDAwNDIzQQorOjEwMDQxMDAwODA4ODAxMDAzNDAwMDA0MDgwQ0UwMTAwN0MwMEE2NDBBRQorOjEwMDQyMDAwODEzMjAwMDA4NTAwMDA0MDgxMzIwMTAwMDI4MDIyNDBCQworOjEwMDQzMDAwODAzMjAwMDA3QzAwMDA0MDgxQjIwMDAwMDAwMDAwNEZDQworOjEwMDQ0MDAwODFCMDAxMDA4RTAwMDlGOTgxMzIwMDAwOEMwMDA4RjlBQQorOjEwMDQ1MDAwODEzMjAwMDA5ODAwMUZGREY5MzMwMDAwOEIwMDlFRkRFMworOjEwMDQ2MDAwODEzMjAwMDAwMDAwMDA0QUYzOTMwMTAwMDAwMDgwNDg0MAorOjEwMDQ3MDAwRjM5MzAxMDAwMDAwMDBGREY3QjMwMTAwMDAwMDgwNDk4NAorOjEwMDQ4MDAwRjM5MzAxMDAwMDAwMDBGQzE5QjEwMTAwOTMwMDBBRjk4OAorOjEwMDQ5MDAwODEzMjAwMDAwMDAwNDBGQjgxQjIwMTAwMDAwMDQxRkRGQworOjEwMDRBMDAwODFCMjAxMDAwMDA3ODBGOUYzOEYwMTAwMDAwNzQyRjlEMworOjEwMDRCMDAwRjM4RjAxMDA5NzAwQTJGRkY3NkYwMDAwMDAwMDQzNDA5OAorOjEwMDRDMDAwODFCMjAxMDAwMDAwQTJGRkZCRUYwMDAwMDAwMDgwRkNGMQorOjEwMDREMDAwRTFCMTAxMDAwMDAwODA0MDgxQjAwMTAwMDA5NDAwNDBDMworOjEwMDRFMDAwNDc5OTAxMDBCQjAwMDA0MDgxMzIwMTAwMDAwMEEyNDY5NAorOjEwMDRGMDAwRkQ3RjAxMDAwMDk0MDA0MDQ3OTkwMTAwQ0UwMDAwNDBCQworOjEwMDUwMDAwODEzMjAxMDAwMDAwQTI0NEZEN0YwMTAwMDA5NDAwNDAwMAorOjEwMDUxMDAwNDU5OTAxMDAwMDAwMDA0MEYxQjEwMTAwRkY3RjAwNDA1QgorOjEwMDUyMDAwRjU5OTAxMDBGRjdGMDA0MEY1OTkwMTAwOUExMzAwNDAwMgorOjEwMDUzMDAwRjU5OTAxMDAwNzAwMDA0MEY1OTkwMTAwMDEwMDAwNDAxNQorOjEwMDU0MDAwRjU5OTAxMDAwMDAyMDA0MEY1OTkwMTAwMDIwMDAwNDAwOQorOjEwMDU1MDAwRjU5OTAxMDAwMDAyMDA0MEY1OTkwMTAwMDMwMTAwNDBGNworOjEwMDU2MDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwOUExMzAwNDA0MAorOjEwMDU3MDAwRjU5OTAxMDAwQjAwMDA0MEY1OTkwMTAwODAwMDAwNDA1MgorOjEwMDU4MDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwMDAwMDAwNDBDRAorOjEwMDU5MDAwRjU5OTAxMDAwNzAwMDA0MEY1OTkwMTAwMDgwMDAwNDBBRQorOjEwMDVBMDAwRjU5OTAxMDBCMDAyMDA0MEY1OTkwMTAwMDAwMDAwNDBGQgorOjEwMDVCMDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwMDIyOTAwNDA3MgorOjEwMDVDMDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwMDA2NzAwNDAyNgorOjEwMDVEMDAwRjU5OTAxMDAwMDAwMDA0MEY1OTkwMTAwODAwMDAwNDBGRAorOjEwMDVFMDAwRjU5OTAxMDAwMDAwODA0MEY1OTkwMTAwMDAwMDAwNDVFOAorOjEwMDVGMDAwRkQ4MzAxMDAwMDAwMDA0NkZEODMwMTAwRkY3RjAwNDBGNQorOjEwMDYwMDAwMjU5OTAxMDBDNDAwMDA0MDgxMzIwMTAwMDAwMEEyNDQ4RAorOjEwMDYxMDAwODBCMjAwMDAwMDAwMDA0NUZEOTMwMTAwRTIwMDAwNDBCMAorOjEwMDYyMDAwODMzMDAxMDAwMDAwQTI0NTgwMzIwMTAwMDAwMDgwNDZCNgorOjEwMDYzMDAwRkQ5MzAxMDAwMDEwMDA0MDgzOTgwMTAwREQwMDAwNDBBMAorOjEwMDY0MDAwMkIzMTAxMDAwMDAwQTI0Njg4QjAwMDAwMDAwMDAwNDFFQworOjEwMDY1MDAwODlCMDAxMDAwMDAwMDA5NDhDQjAwMTAwRkZGRjAwNDY0QgorOjEwMDY2MDAwODA4ODAxMDBBNUE1QTI0MDgwQ0UwMDAwMDAwMDAwNDhCRgorOjEwMDY3MDAwOERGMDAxMDBDOTAwODI0MTg5NDAwMDAwMDAwMDgwNDBFNworOjEwMDY4MDAwODlCMDAxMDAwMDAwMDA0NEZEODMwMTAwRDQwMDAwNDA1NworOjEwMDY5MDAwODEzMjAxMDAwMDAwQTI0NDgwQjIwMDAwRTIwMDAwMDhBNAorOjEwMDZBMDAwODMzMDAxMDAwMDAwQTI0NTgwMzIwMTAwMDAwMDgwNDQzOAorOjEwMDZCMDAwRkQ5MzAxMDAwMDMwMDAwODgzOTgwMTAwODAwMDAwNDA5NQorOjEwMDZDMDAwMkI5OTAxMDBEQjAwMDA0MDg5MzAwMTAwMDAwMEEyNDZBOAorOjEwMDZEMDAwODBCMjAwMDBGRkZGMDA5NDgwODgwMTAwQTVBNUEyNDAyMQorOjEwMDZFMDAwODA0RTAxMDAwMDAwODA0Mzg5QjAwMTAwMDM4NDAwNDE3NgorOjEwMDZGMDAwMkM5OTAxMDBERTAwMDA0MDgxQjIwMDAwMDM4ODAwNDExNworOjEwMDcwMDAwMkM5OTAxMDAwMDAwMDAyMDhEQjAwMTAwMDAwMDlGOTY5MAorOjEwMDcxMDAwODBCMjAwMDBERjAwQTI0MThENTAwMDAwMDAwMDgwNDA0OAorOjEwMDcyMDAwODFCMjAxMDBGRjdGMDA0MDI1OTkwMTAwMDAwMDAwNENDQworOjEwMDczMDAwODlFMDAxMDBERDAwMDA0NDgyMTQwMTAwMDAwMDkwOTQ3MworOjEwMDc0MDAwOEFCMDAwMDAwMDAwMDA0NUYwQjEwMTAwMTAwMDAwNDUzMworOjEwMDc1MDAwODhGNDAxMDAwMDAwMDA0NDg5RDAwMTAwREQwMDAwNDQ1RAorOjEwMDc2MDAwMkI0MTAxMDBFQzAwMDg0MTgwMzIwMDAwRUQwMDAwOTRCNAorOjEwMDc3MDAwMjRCMTAwMDAxMDAwMDA5NDI0RjUwMTAwMDAwMDAwOTQ1MgorOjEwMDc4MDAwRjBCMTAxMDBGMjAwQTA0NDg5NTAwMDAwREQwMDAwNDRGNworOjEwMDc5MDAwMkI0MTAxMDAwMDAwMDA5NEYwQjEwMTAwRUYwMDIwNDQ2MworOjEwMDdBMDAwODk1MDAwMDAxMDAwMDA0NTg4RjQwMTAwMDAwMDAwRkFBNAorOjEwMDdCMDAwOEFCMDAxMDAwMDAwQTM0Mjg5RDAwMDAwRjcwMEEwRkEyRgorOjEwMDdDMDAwOEE0MDAwMDAwMDAwMDA0MThCQzAwMTAwRjUwMEEzNDJGOAorOjEwMDdEMDAwODk1MDAwMDBGRkZGMDA0NTg4ODgwMTAwMTAwMDAwNDU5NworOjEwMDdFMDAwOEFGNDAxMDBGQzAwOTA0NDhBNDAwMDAwMDAwMDAwNDFBRgorOjEwMDdGMDAwOEJDMDAxMDBGRkZGMDA0NThBQTgwMTAwMDAwMDgwNTA2NworOjEwMDgwMDAwOEJFMDAxMDBGRjdGMDA0MDI1OTkwMTAwN0MwMDAwNDA0MworOjEwMDgxMDAwMkI5OTAxMDAwMDMwMDA0MDgzOTgwMTAwREQwMDAwMDhBMgorOjEwMDgyMDAwODMxNDAxMDAwMDAwMDA5NDJBQjEwMTAwMDA4MDAwNDAwMAorOjEwMDgzMDAwRjk5QjAxMDBERDAwMDBGQzE5MzEwMTAwMDAwMDQwOTQyQgorOjEwMDg0MDAwODBCMjAxMDBERDAwMDA0NDJCNDEwMTAwMDAwMDQxOTQxMgorOjEwMDg1MDAwODBCMjAxMDAwMDAwMDA0MUY5QzMwMTAwMDAwMDAwNDQyMworOjEwMDg2MDAwMkJDMTAxMDAwNDAxOUY5NDgwMzIwMDAwMDI4MDAwNDBFRgorOjEwMDg3MDAwODFCMjAwMDAxMDAxMDA1MTkzQjAwMDAwMTAwMTAwNEQ0MgorOjEwMDg4MDAwOTNCMDAwMDAxMDAxMDA0OTkzQjAwMDAwMDAwMDAwNDI0NgorOjEwMDg5MDAwOTNCMDAxMDAxMDAxQTI0MTkzNTAwMDAwMDAwMDgwNDA3RAorOjEwMDhBMDAwODFCMjAxMDAwMDAwMTA0MDgxQjIwMTAwMDAwMDExNDAzRgorOjEwMDhCMDAwODFCMjAxMDAwMDAwMTI0MDgxQjIwMTAwMDAwMDEzNDAyQgorOjEwMDhDMDAwODFCMjAxMDAwMDAwMTQ0MDgxQjIwMTAwMDAwMDE1NDAxNworOjEwMDhEMDAwODFCMjAxMDAwMDAwMTY0MDgxQjIwMTAwMDAwMDE3NDAwMworOjEwMDhFMDAwODFCMjAxMDAwMDAwMTg0MDgxQjIwMTAwMDAwMDE5NDBFRgorOjEwMDhGMDAwODFCMjAxMDAwMDAwMUE0MDgxQjIwMTAwMDAwMDFCNDBEQgorOjEwMDkwMDAwODFCMjAxMDAwMDAwMUM0MDgxQjIwMTAwMDAwMDFENDBDNgorOjEwMDkxMDAwODFCMjAxMDAwMDAwMUU0MDgxQjIwMTAwMDAwMDFGNDBCMgorOjEwMDkyMDAwODFCMjAxMDAwMDAwNzA0MDgxQjIwMTAwMDAwMDcxNDBGRQorOjEwMDkzMDAwODFCMjAxMDAwMDAwNzI0MDgxQjIwMTAwMDAwMDczNDBFQQorOjEwMDk0MDAwODFCMjAxMDAwMDAwNzQ0MDgxQjIwMTAwMDAwMDc1NDBENgorOjEwMDk1MDAwODFCMjAxMDAwMDAwNzY0MDgxQjIwMTAwMDAwMDc3NDBDMgorOjEwMDk2MDAwODFCMjAxMDAwMDAwNzg0MDgxQjIwMTAwMDAwMDc5NDBBRQorOjEwMDk3MDAwODFCMjAxMDAwMDAwN0E0MDgxQjIwMTAwMDAwMDdCNDA5QQorOjEwMDk4MDAwODFCMjAxMDAwMDAwN0M0MDgxQjIwMTAwMDAwMDdENDA4NgorOjEwMDk5MDAwODFCMjAxMDAwMDAwN0U0MDgxQjIwMTAwMDAwMDdGNDA3MgorOjEwMDlBMDAwODFCMjAxMDAwMDAwODA0MDgxQjIwMTAwMDAwNDAwNDBEQgorOjEwMDlCMDAwQTE5OTAxMDAwMDAwMDA1MEExRDEwMTAwMDAwMDAwNDBGOQorOjEwMDlDMDAwMUJCMDAxMDAwMDAwMDA0MDE5QjAwMTAwMDAwMDAwNDAxMQorOjEwMDlEMDAwMTdCMDAxMDAwMDAwMDA0MDE1QjAwMTAwMDAwMDAwNDAwOQorOjEwMDlFMDAwMTNCMDAxMDAwMDAwMDA0MDExQjAwMTAwMDAwMDAwNDAwMQorOjEwMDlGMDAwMEZCMDAxMDAwMDAwMDA0MDBEQjAwMTAwMDAwMDAwNDBGOQorOjEwMEEwMDAwMEJCMDAxMDAwMDAwMDA0MDA5QjAwMTAwMDAwMDAwNDBGMAorOjEwMEExMDAwMDdCMDAxMDAwMDAwMDA0MDA1QjAwMTAwMDAwMDAwNDBFOAorOjEwMEEyMDAwMDNCMDAxMDAwMDAwMDA0MDAxQjAwMTAwM0IwMTIwNDg3QworOjEwMEEzMDAwQTE1MTAwMDAwMDAwODA0MDgxQjIwMTAwNDcwMTIyNEIxQgorOjEwMEE0MDAwNzQ3RDAwMDAwMDAwODA0MDgxQjIwMTAwNjAwMDAwNEIxNgorOjEwMEE1MDAwNjA5OTAxMDAwMDAwMDBCMTdFQjEwMTAwNDgwMUE4NDA4QQorOjEwMEE2MDAwODEzMjAwMDA0NTAxMDA0MDgxQjIwMDAwMDUwMDgwNDA1NQorOjEwMEE3MDAwOTc5ODAxMDAxODAwMDBBQTk2ODgwMTAwMDAwMDgwNDNBMgorOjEwMEE4MDAwOTdGMDAxMDAwNzAwMDBBQTk2ODgwMTAwMDAwMDgwNDA0RQorOjEwMEE5MDAwODFCMjAxMDAwMDAwMDA1ODA3OTAwMTAwRDg5RjAwNDA3QgorOjEwMEFBMDAwODFCMjAwMDAwMDAwMDA0NEE1QjMwMTAwRDgwMjAwNDA1QworOjEwMEFCMDAwODEzMjAxMDBGODAyMDA0MDgxMzIwMTAwMDAwMDAwNUMzOAorOjEwMEFDMDAwMDc5MDAxMDBEODlGMDA0MEJGQjMwMDAwNUEwMTIyQ0MxQworOjEwMEFEMDAwODU3RjAwMDAwMDAwMDA1MTA3OTAwMTAwRDg5RjAwNDA3MgorOjEwMEFFMDAwODFCMjAwMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0IxQworOjEwMEFGMDAwQTNDOTAxMDBEMDE0MDA0MEExOUIwMTAwMDAwMDAwMjAwOAorOjEwMEIwMDAwNDZCMTAxMDAwMDAwMDA0OEYxQjEwMTAwMDAwMDAwRDAzMgorOjEwMEIxMDAwRjFCMTAxMDAwMDAwMDBDQUYxQjEwMTAwMDAwMDAwRDVGMAorOjEwMEIyMDAwRTFCMTAxMDAwNzAwMDA0MDYxOTkwMTAwMjAwMDAwMjBCMAorOjEwMEIzMDAwNjJERDAxMDA2MzAxQTg0MDgxMzIwMDAwMDAwMDAwQ0NBQQorOjEwMEI0MDAwODU5MzAxMDBGODAyMDA0MDgxMzIwMTAwRDAxNDAwNDA3QQorOjEwMEI1MDAwNDM5OTAxMDAwMDAwMDBGQUJBQjMwMTAwMDAwMDAwRkE1NgorOjEwMEI2MDAwQTRCMzAxMDAwMDAwMDBGOEJDQjMwMTAwMDAxNDJGNDA0MgorOjEwMEI3MDAwODFCMDAxMDAwMDAwMDBFN0E3QjMwMTAwMDAwMDAwRDgyOQorOjEwMEI4MDAwQTlCMzAxMDBGRjAwMDBERDgxODgwMTAwMDIwMDAwNDBFMAorOjEwMEI5MDAwODBGNDAxMDA3MzAxMDA0MDgwQzgwMTAwODYwMTAwREQ3RgorOjEwMEJBMDAwODEzMjAwMDAwMDAwMDA0MDEwQjEwMDAwODcwMTAwNDBDOQorOjEwMEJCMDAwODFCMjAwMDA4ODAxMDA0MDgxQjIwMDAwODkwMTAwNDAzQworOjEwMEJDMDAwODFCMjAwMDA4QTAxMDA0MDgxQjIwMDAwOEIwMTAwNDAyOAorOjEwMEJEMDAwODFCMjAwMDA4RDAxMDA0MDgxQjIwMDAwOEYwMTAwNDAxMQorOjEwMEJFMDAwODFCMjAwMDA1MDAxMDA0MDgxQjIwMDAwQjYwMTAwNDAxNworOjEwMEJGMDAwODFCMjAwMDA1MDAxMDA0MDgxQjIwMDAwQzQwMTAwNDBGOQorOjEwMEMwMDAwODFCMjAwMDBDNTAxMDA0MDgxQjIwMDAwODIwMjAwNDBCNAorOjEwMEMxMDAwODFCMjAwMDA4MzAyMDA0MDgxQjIyODAwQjgwMjAwNDA4NworOjEwMEMyMDAwODFCMjI4MDBENDlGMDA0MDgxQjIyODAwRDU5RjAwNDBBNworOjEwMEMzMDAwODFCMjI4MDBENjlGMDA0MDgxQjIyODAwRDc5RjAwNDA5MworOjEwMEM0MDAwODFCMjI4MDA3MjAxMDA0MTgxQzAyODAwNTUwMTUxNDkzQworOjEwMEM1MDAwRkQ5MzI4MDA1NTAxNTI0QUZEOTMyQTAwNTUwMTU1NDkzQworOjEwMEM2MDAwRkQ4MzJBMDA1NTAxNTY0QUZEODMyQTAwNTAwMTkxODFENworOjEwMEM3MDAwODAzMDJBMDA1NTAxNDU0MDgxQjIyQTAwNTAwMTkxODJGRQorOjEwMEM4MDAwODAzMDJBMDA1NTAxNDY0MDgxQjIyQTAwMDAwMDAwNDAxMQorOjEwMEM5MDAwODlCMDJCMDAwMDAwMkY0MDgxQjAwMTAwMDAxNDAwNDBGQgorOjEwMENBMDAwNDk5OTAxMDBCMzAxMjJERUUxNkQwMDAwMDAwMDAwNEMxMworOjEwMENCMDAwNDlDMTAxMDAwMDAwMDA0MTgxQzAwMTAwOTIwMUEyNDQyRAorOjEwMENDMDAwODE2QzAwMDAwMDAwMDA0QzQ5RDEwMTAwOUEwMTIyNDBEMworOjEwMENEMDAwRTE2RDAwMDA5NjAxQTI0MTgxNTAwMDAwNTAwMTAwNDFFOQorOjEwMENFMDAwQkZCMzAwMDAwMDAwMDA0MkJGQjMwMTAwNTAwMUEwMEZERAorOjEwMENGMDAwQkQ2RjAwMDAwMDAwMDBERUUxQjEwMTAwMDAwMDAwNDQxMworOjEwMEQwMDAwNDlDMTAxMDBCNTAxMDA0MDE5OTkwMTAwMDAwMDQyNDBBRAorOjEwMEQxMDAwODFCMjAxMDAwMDAwNDNGRjg1QjAwMTAwMDAwMDAwREU0OQorOjEwMEQyMDAwMTlCMTAxMDAwMDAwNDJGRjg3QjAwMTAwMDAwMDQzRkYzRAorOjEwMEQzMDAwRTFCMTAxMDAwMDAwMDA0NDQ5QzEwMTAwMDAwMDJGRkZBMworOjEwMEQ0MDAwRTFCMTAxMDAwODE0MDBBNDgwQ0MwMTAwQUEwMTI2NDBGMgorOjEwMEQ1MDAwODEzMjAwMDAwMDAwMDA0MTg1QzAwMTAwQTgwMUEyNENDMgorOjEwMEQ2MDAwODE1MDAwMDBCNDAxMjJEMjgxMzIwMDAwQUYwMTIyNDE0MworOjEwMEQ3MDAwQTU2RjAwMDA1MDAxQTJFMDgxMzIwMDAwMDAwMDAwRDIwNworOjEwMEQ4MDAwQzFCMzAxMDAwMDAwMDA1Qzg5OTAwMTAwMDAwMDQwNDJGNgorOjEwMEQ5MDAwODBCMjAxMDAwMDAwNDE0MzgwQjIwMTAwMDAwMDAwRjA3OQorOjEwMERBMDAwODg5NDAxMDA1NTAxMDA0NEUwQjEwMDAwQjEwMTAwNDgwMQorOjEwMERCMDAwNDlDMTAwMDBBRjAxMDA1Qjg5OTAwMDAwQTg5RjAwQTAxRQorOjEwMERDMDAwOUVCMDAwMDAwMDAwMDA0MDgzQjAwMTAwMDAxNDAwNDAwRAorOjEwMEREMDAwNDk5OTAxMDAwMDAwMjM0MDgxQjAwMTAwQkUwMTIyREVEQworOjEwMERFMDAwRTE2RDAwMDAwMDAwMDA0QzQ5QzEwMTAwMDAwMDAwNDExRAorOjEwMERGMDAwODFDMDAxMDBCOTAxQTI0NDgxNkMwMDAwNTAwMTAwNDM5MAorOjEwMEUwMDAwQkZCMzAwMDAwMDAwMDBGODE4QjEwMTAwMDAwMDQwRjg3NgorOjEwMEUxMDAwODBCMjAxMDAwMDAwNDFGMDgwQjIwMTAwMDAwMDAwNDBGQgorOjEwMEUyMDAwRjFCMTAxMDAwMDAwMDA0MEYxQjEwMTAwNTUwMTAwNDBBNgorOjEwMEUzMDAwRTFCMTAwMDBDNjAxMDA0MDkxQjAwMDAwMDAwMDAwNDE5NworOjEwMEU0MDAwOTFCMDAxMDBEMDE0MkU0MDQ5QjEwMTAwMDUwMDAwNDBDRQorOjEwMEU1MDAwQTM5QjAxMDAwODAwMDBERDgxRjQwMTAwQ0IwMTAwNDBFQworOjEwMEU2MDAwODBDODAxMDAwMDAwMDA0MDEwQjEwMDAwRDEwMTAwNDAyNgorOjEwMEU3MDAwODFCMDAwMDA1MzAxMDBERUExQjMwMDAwRTMwMTAwNDA5NworOjEwMEU4MDAwODFCMjAwMDBFNTAxMDA0MDgxQjAwMDAwRUIwMTAwNDBBQworOjEwMEU5MDAwODFCMjAwMDA1MjAxMDBERkUxQjEwMDAwMDAwMDAwRDA4QgorOjEwMEVBMDAwQkFCMzAxMDAwMDAwMDBERUExQjEwMTAwMDIwMDAwRDJDRgorOjEwMEVCMDAwQTVFNzAxMDAwMDAwMDBEMkMxQjMwMTAwMDAwMDAwMDA1RQorOjEwMEVDMDAwRjBCMTAxMDBEQjAxMjI0NEMxNTMwMDAwREEwMTg0NDE4QQorOjEwMEVEMDAwODE0MDAwMDBERTAxMDA0MDgxMzIwMTAwMDAwMDAwRDBBRQorOjEwMEVFMDAwNDVCMTAxMDBENTAxMDA0MUExQzEwMDAwREEwMjAwNDA3NgorOjEwMEVGMDAwODEzMjAxMDBGODAyMDA0MDgxMzIwMTAwNTUwMTAwREQxRAorOjEwMEYwMDAwQTFCMTAwMDAwMDAwMDA0MDgxQjAwMTAwNDAwMDAwNDA5RAorOjEwMEYxMDAwQTU5QjAxMDBEQTAyMDA0MDgxMzIwMTAwNDAwMDAwRDNBRAorOjEwMEYyMDAwQTdDQjAxMDBGODAyMDBFMEE1QjMwMDAwMDMwMDAwNDBEOQorOjEwMEYzMDAwQTM5QjAxMDA1MzAxMDBERUExQjMwMDAwMDAwMDAwNDRBOAorOjEwMEY0MDAwQkZCMzAxMDAwMDAwMDBERTgxOTAwMTAwNTAwMUEyQkE5MQorOjEwMEY1MDAwODAwNDAwMDA2MDAwMDBERTYxOTkwMTAwRTgwMUE4QjE5MgorOjEwMEY2MDAwODAzMDAwMDA1MjAxMDA0MEUwQjEwMDAwMDAwMDAwRDBERAorOjEwMEY3MDAwQkFCMzAxMDA2QjAyMDA0MDgxOTgwMTAwNjAwMjAwNEQ4RAorOjEwMEY4MDAwODMzMDAxMDAwMDAwMDA0NEUxQjMwMTAwMDAwMDAwNDQ5MAorOjEwMEY5MDAwRTNCMzAxMDAwMDAwMDA0NEU1QjMwMTAwMDAwMDAwNDQ5OQorOjEwMEZBMDAwRTlCMzAxMDAwMDAwMDA0NEVCQjMwMTAwMDAwMDAwNDQ3RAorOjEwMEZCMDAwRjVCMzAxMDAwMDAwMDA0NEY3QjMwMTAwMDAwMDAwNDQ1NQorOjEwMEZDMDAwRjlCMzAxMDBGOTAxMjI0MDhGNkYwMDAwNzgwMjAwNDA2MAorOjEwMEZEMDAwODE5ODAxMDA2MDAyMDBDNzgzMzAwMTAwODAwMjAwNDA1OAorOjEwMEZFMDAwODE5ODAxMDA2MDAyMDA0MjgzMzAwMTAwMDAwMDAwRThBNworOjEwMEZGMDAwRjFCMTAxMDAwMDAwMDBFOUYxQjEwMTAwMDAwMDAwRUFEOAorOjEwMTAwMDAwRjFCMTAxMDAwMDAwMDBFQkYxQjEwMTAwMDAwMDAwODUyQQorOjEwMTAxMDAwRjBCMTAxMDAwMDAwMDBFQ0YxQjEwMTAwMDAwMDAwRURCMgorOjEwMTAyMDAwRjFCMTAxMDAwMDAwMDBCMkYwQjEwMTAwMDAwMDAwQTkyMAorOjEwMTAzMDAwRjBCMTAxMDAwMDAwMDBBQ0YwQjEwMTAwMDAwMDAwQUIxNQorOjEwMTA0MDAwRjBCMTAxMDAwMDAwMDBCOEYwQjEwMTAwMDAwMDAwQjlFQgorOjEwMTA1MDAwRjBCMTAxMDAwMDAwMDBCQUYwQjEwMTAwMDAwMDAwQkJENworOjEwMTA2MDAwRjBCMTAxMDAwQzAyQjg0MDgxMzAwMDAwMDAwMDAwNDBFNworOjEwMTA3MDAwODE5MDAxMDAwRTAyQjk0MDgxMzIwMDAwMDAwMDAwNDE2MQorOjEwMTA4MDAwODE5MDAxMDAxMDAyQkE0MDgxMzIwMDAwMDAwMDAwNDI0RAorOjEwMTA5MDAwODE5MDAxMDAxMjAyQkI0MDgxMzIwMDAwMDAwMDAwNDMzOQorOjEwMTBBMDAwODE5MDAxMDAxNDAyQkM0MDgxMzIwMDAwMDAwMDAwNDQyNQorOjEwMTBCMDAwODE5MDAxMDAxNjAyQkQ0MDgxMzIwMDAwMDAwMDAwNDUxMQorOjEwMTBDMDAwODE5MDAxMDAxODAyQkU0MDgxMzIwMDAwMDAwMDAwNDZGRAorOjEwMTBEMDAwODE5MDAxMDAxQTAyQkY0MDgxMzIwMDAwMDAwMDAwNDdFOQorOjEwMTBFMDAwODE5MDAxMDAxQzAyQzg0MDgxMzIwMDAwMDAwMDAwNDhDRAorOjEwMTBGMDAwODE5MDAxMDAxRTAyQzk0MDgxMzIwMDAwMDAwMDAwNDlCOQorOjEwMTEwMDAwODE5MDAxMDAyMDAyQ0E0MDgxMzIwMDAwMDAwMDAwNEFBNAorOjEwMTExMDAwODE5MDAxMDAyMjAyQ0I0MDgxMzIwMDAwMDAwMDAwNEI5MAorOjEwMTEyMDAwODE5MDAxMDAyNDAyQ0M0MDgxMzIwMDAwMDAwMDAwNEM3QworOjEwMTEzMDAwODE5MDAxMDAyNjAyQ0Q0MDgxMzIwMDAwMDAwMDAwNEQ2OAorOjEwMTE0MDAwODE5MDAxMDAyODAyQ0U0MDgxMzIwMDAwMDAwMDAwNEU1NAorOjEwMTE1MDAwODE5MDAxMDAyQTAyQ0Y0MDgxMzIwMDAwMDAwMDAwNEY0MAorOjEwMTE2MDAwODE5MDAxMDAyQzAyRjA0MDgxMzIwMDAwMDAwMDAwNTAwQworOjEwMTE3MDAwODE5MDAxMDAyRTAyRjE0MDgxMzIwMDAwMDAwMDAwNTFGOAorOjEwMTE4MDAwODE5MDAxMDAzMDAyRjI0MDgxMzIwMDAwMDAwMDAwNTJFNAorOjEwMTE5MDAwODE5MDAxMDAzMjAyRjM0MDgxMzIwMDAwMDAwMDAwNTNEMAorOjEwMTFBMDAwODE5MDAxMDAzNDAyRjQ0MDgxMzIwMDAwMDAwMDAwNTRCQworOjEwMTFCMDAwODE5MDAxMDAzNjAyRjU0MDgxMzIwMDAwMDAwMDAwNTVBOAorOjEwMTFDMDAwODE5MDAxMDAzODAyRjY0MDgxMzIwMDAwMDAwMDAwNTY5NAorOjEwMTFEMDAwODE5MDAxMDAzQTAyRjc0MDgxMzIwMDAwMDAwMDAwNTc4MAorOjEwMTFFMDAwODE5MDAxMDAzQzAyRjg0MDgxMzIwMDAwMDAwMDAwNTg2QworOjEwMTFGMDAwODE5MDAxMDAzRTAyRjk0MDgxMzIwMDAwMDAwMDAwNTk1OAorOjEwMTIwMDAwODE5MDAxMDA0MDAyRkE0MDgxMzIwMDAwMDAwMDAwNUE0MworOjEwMTIxMDAwODE5MDAxMDA0MjAyRkI0MDgxMzIwMDAwMDAwMDAwNUIyRgorOjEwMTIyMDAwODE5MDAxMDA0NDAyRkM0MDgxMzIwMDAwMDAwMDAwNUMxQgorOjEwMTIzMDAwODE5MDAxMDA0NjAyRkQ0MDgxMzIwMDAwMDAwMDAwNUQwNworOjEwMTI0MDAwODE5MDAxMDA0ODAyRkU0MDgxMzIwMDAwMDAwMDAwNUVGMworOjEwMTI1MDAwODE5MDAxMDA0QTAyRkY0MDgxMzIwMDAwMDAwMDAwNUZERgorOjEwMTI2MDAwODE5MDAxMDAwMDAwMDA0MEYwQjEwMTAwNDAwMDAwNDAwQQorOjEwMTI3MDAwQTU5QjAxMDBEODAyMDA0MDgxMzIwMTAwRjgwMjAwNDAyNQorOjEwMTI4MDAwODEzMjAxMDBEMDE0MkUwNkE1QjMwMTAwNDAwMDAwRDMyNgorOjEwMTI5MDAwQTdDQjAxMDAwMDAwMDBGMEYxQjEwMTAwMDAwMDAwRjE1NworOjEwMTJBMDAwRjFCMTAxMDAwMDAwMDBGMkYxQjEwMTAwMDAwMDAwRjQxMgorOjEwMTJCMDAwRjFCMTAxMDAwMDAwMDBGNUYxQjEwMTAwMDAwMDAwRkFGOQorOjEwMTJDMDAwRjFCMTAxMDAwMDAwMDBGQkYxQjEwMTAwMDAwMDAwRkNFMQorOjEwMTJEMDAwRjFCMTAxMDAwMDAwMDBFQkYxQjEwMTAwMDAwMDAwRUVFRgorOjEwMTJFMDAwRjFCMTAxMDAwMDAwMDBFRkYxQjEwMTAwMDAwMDAwRjNENgorOjEwMTJGMDAwRjFCMTAxMDAwMDAwMDBGNkYxQjEwMTAwMDAwMDAwRkRCNQorOjEwMTMwMDAwRjFCMTAxMDBEQjAxMDBDN0UxQjEwMDAwMDAwMDgwNDA0NQorOjEwMTMxMDAwODFCMjAxMDA2NjAyMDA0ODgwMzIwMDAwMDAwMDUxNDBBNgorOjEwMTMyMDAwMUFCMTAxMDAwMDAwNEQ0MDgxQjIwMTAwMDAwMDQ1NDBBQgorOjEwMTMzMDAwODFCMjAxMDA2MzAyQTI0MTgzNTAwMDAwNUYwMjQ5NDA3NAorOjEwMTM0MDAwODFCMjAwMDAwMDAwNTI0MDFDQjEwMTAwMDAwMDRFNDA3QworOjEwMTM1MDAwODFCMjAxMDAwMDAwNDY0MDgxQjIwMTAwNjgwMkEyNDE1MgorOjEwMTM2MDAwODM1MDAwMDA1RjAyNEE0MDgxQjIwMDAwMDAwMDAwQTBFQworOjEwMTM3MDAwOUVCMDAxMDAwMDAwMDA4MEQ4QjMwMTAwMDAwMDAwQTE3MQorOjEwMTM4MDAwRDBCMzAxMDAwMDAwMDBBMkQyQjMwMTAwMDAwMDAwQTQwRAorOjEwMTM5MDAwRDRCMzAxMDAwMDAwMDBEMEQ2QjMwMTAwMDAwMDAwRDE5QQorOjEwMTNBMDAwRENCMzAxMDAwMDAwMDBEMkRFQjMwMTAwMDAwMDAwODhDMQorOjEwMTNCMDAwREFCMzAxMDAwMDAwMDBENDhFQjMwMTAwMDAwMDAwRDNCNgorOjEwMTNDMDAwRTZCMzAxMDAwMDAwMDBBQ0VDQjMwMTAwMDAwMDAwOTk5RQorOjEwMTNEMDAwRkFCMzAxMDAwMDAwMDBENUUwQjMwMTAwMDAwMDAwRDUyMQorOjEwMTNFMDAwRTJCMzAxMDAwMDAwMDBENUU0QjMwMTAwMDAwMDAwRDUyNQorOjEwMTNGMDAwRThCMzAxMDAwMDAwMDBENUVBQjMwMTAwMDAwMDAwRDUwOQorOjEwMTQwMDAwRjRCMzAxMDAwMDAwMDBENUY2QjMwMTAwMDAwMDAwRDVFMAorOjEwMTQxMDAwRjhCMzAxMDAwMDAwMDBDN0E5QjEwMTAwMDAwMDAwNEZBRgorOjEwMTQyMDAwNDBCMTAxMDA4NDAyMDA0MDkxQjAwMDAwMDAwMDAwNDE4MgorOjEwMTQzMDAwOTFCMDAxMDAwNzAwMDA0MEEzOUIwMTAwMDgwMDAwRERGRgorOjEwMTQ0MDAwODFGNDAxMDA4ODAyMDA0MDgwQzgwMTAwMDAwMDAwNDBEMworOjEwMTQ1MDAwMTBCMTAwMDA4RDAyMDA0MDgxQjIwMDAwOTgwMjAwNDBFRgorOjEwMTQ2MDAwODFCMjAwMDA5ODAyMDA0NkEzQjMwMDAwOUIwMjAwNDAzNgorOjEwMTQ3MDAwODFCMjAwMDBBMTAyMDA0MDgxQjIwMDAwOEYwMjIzNTAxRgorOjEwMTQ4MDAwQTU2RjAwMDAwMDAwMDA1MEE1QjMwMTAwRTgwMjAwNDI3MworOjEwMTQ5MDAwQTU2MzAxMDBGODAyMDA0MDgxMzIwMTAwRDAxNDJENDAwNAorOjEwMTRBMDAwNDlCMTAxMDAwMDAwMDBEMEJBQjMwMTAwMDAwMDAwREUyNQorOjEwMTRCMDAwQTFCMTAxMDAwMDAwMDBGODAwQjAwMTAwOTcwMjIyNDQzMQorOjEwMTRDMDAwQTU1MzAwMDA5NDAyMDA0MUExQzEwMDAwNTUwMTAwRERCOAorOjEwMTREMDAwQTFCMTAwMDBFODAyMDBERUExMzMwMTAwRjgwMjAwNDBFMworOjEwMTRFMDAwODEzMjAxMDA1NTAxMDA0MDgxQjIwMDAwMDAwMDAwNDUzQQorOjEwMTRGMDAwQkZCMzAxMDA1MDAxQTJEMjc3N0QwMDAwMDAwMDAwRDJFRQorOjEwMTUwMDAwNjFCMTAxMDAwMDAwMDBERTYzQjEwMTAwOUUwMkE4NDA0RAorOjEwMTUxMDAwODEzMjAwMDA1NTAxMDA0MDgxQjIwMDAwRTgwMjAwNTQxMQorOjEwMTUyMDAwQTUzMzAxMDBGODAyMDA0MDgxMzIwMTAwRDAxNDJENDBBMworOjEwMTUzMDAwNDlCMTAxMDAwMDAwMDBGOEQwQjMwMTAwMDAwMDAwRjgzQworOjEwMTU0MDAwRDJCMzAxMDAwMDAwMDBGOEQ0QjMwMTAwMDAwMDAwRjg5RAorOjEwMTU1MDAwRDZCMzAxMDAwMDAwMDBGODA4QjEwMTAwQUMwMjAwNDA2MQorOjEwMTU2MDAwODE5ODAxMDA2MDAyMDA0NjgzMzAwMTAwNTUwMTAwNDA2RgorOjEwMTU3MDAwODFCMjAwMDAwMDAwMDBBMDlFQjAwMTAwMDAwMDAwRTg2MQorOjEwMTU4MDAwNDNCMTAxMDAwMDAwMDBFOTQ1QjEwMTAwMDAwMDAwRUE5QworOjEwMTU5MDAwNDlCMTAxMDAwMDAwMDBFQkExQjEwMTAwMDAwMDAwNEZDMworOjEwMTVBMDAwNDBCMTAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RQorOjEwMTVCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRAorOjEwMTVDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyRAorOjEwMTVEMDAwODFCMjAwMDBEMDE0MkU0MDQ5QjEwMTAwMDUwMDAwNDA0NgorOjEwMTVFMDAwQTM5QjAxMDAwMDAwMDA0MEMxQjMwMTAwMDgwMDAwREQyMgorOjEwMTVGMDAwODFGNDAxMDBCRDAyMDA0MDEwQzkwMDAwQzMwMjAwMDVEMworOjEwMTYwMDAwODFCMDAwMDA1MDAxMDA0MDgxQjIwMDAwQ0IwMjAwMDUxMworOjEwMTYxMDAwODFCMDAwMDA1MDAxMDA0MDgxQjIwMDAwRDAwMjAwNDRCRgorOjEwMTYyMDAwQTVCMzAwMDBEMjAyMDA0NEE1QjMwMDAwMDIwMDAwNDBCMAorOjEwMTYzMDAwQTRFNzAxMDAwMDAwMDBFMDgxQjEwMTAwRkZGRjAwQzE0QworOjEwMTY0MDAwRjA4OTAxMDBDODAyMjI0MTgxNTAwMDAwQzQwMjAwNDExQgorOjEwMTY1MDAwQzFDMzAwMDBEQTAyMDA0MDgxMzIwMTAwRjgwMjAwNDBGQworOjEwMTY2MDAwODEzMjAxMDA1NTAxMDA0MDgxQjIwMDAwMDIwMDAwNDBCQgorOjEwMTY3MDAwQTRFNzAxMDAwMDAwMDBFMDkxQjEwMTAwRkZGRjAwQzlGNAorOjEwMTY4MDAwRjA4OTAxMDBDODAyMjI0MTgxNTAwMDAwQ0MwMjAwNDFEMworOjEwMTY5MDAwQzFDMzAwMDBGRkZGMDBERTg1ODkwMTAwQzgwMjAwQzI0RgorOjEwMTZBMDAwRTBCMTAwMDBGRkZGMDBERTk1ODkwMTAwQzgwMjAwQ0ExQQorOjEwMTZCMDAwRTBCMTAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMTZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQworOjEwMTZEMDAwODFCMjAwMDAwMDAwMDBFN0E3QjMwMTAwMDAwMDAwRDhCRAorOjEwMTZFMDAwQTlCMzAxMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0JFNgorOjEwMTZGMDAwQTNDOTAxMDAwMDAwMDAyMDQ2QjEwMTAwMDAwMDAwRDI5MworOjEwMTcwMDAwRjFCMTAxMDAwMDAwMDBEM0YxQjEwMTAwMDAwMDAwRDRFQworOjEwMTcxMDAwRjFCMTAxMDAwMDAwMDBEMEUxQjEwMTAwMDAwMDAwRDFGMgorOjEwMTcyMDAwNjFCMTAxMDAyMDAwMDAyMDYyREQwMTAwRTIwMkE4NDA1QQorOjEwMTczMDAwODEzMjAwMDAwMDAwODBDQzg1OTMwMTAwMDQwMDAwNDA0RAorOjEwMTc0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBQgorOjEwMTc1MDAwODFCMjAwMDAwMDAwMDBFN0E3QjMwMTAwMDAwMDAwRDgzQworOjEwMTc2MDAwQTlCMzAxMDAwMDAwMDA0MDQ5QjEwMTAwQUUwMzAwQ0I2NQorOjEwMTc3MDAwQTNDOTAxMDAwMDAwMDAyMDQ2QjEwMTAwMDAwMDAwRDIxMgorOjEwMTc4MDAwRjFCMTAxMDAwMDAwMDBEMEYxQjEwMTAwMDAwMDAwRDM3MAorOjEwMTc5MDAwRjFCMTAxMDBFMTAyMDBENEUxQjEwMDAwMDQwMDAwNDAxOQorOjEwMTdBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMTdCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzQgorOjEwMTdDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyQgorOjEwMTdEMDAwODFCMjAwMDAwMDAwQTJDQzg1RkYwMDAwMDAwMDAwNTA5NAorOjEwMTdFMDAwODFCMDAxMDBGQTAyQTI0MTgxNTAwMDAwRjkwMkEyRjI4OAorOjEwMTdGMDAwODAzMDAwMDAwMDAwODBDQzg1ODMwMTAwMDQwMDAwNDBBMAorOjEwMTgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQQorOjEwMTgxMDAwODFCMjAwMDBCNTAzMDA0MEExOTkwMTAwMDAwMDJGNDFGMgorOjEwMTgyMDAwOTlCMzAxMDAwQTAzMjI0NDgxNkMwMDAwMTIwMzIyNDg4QworOjEwMTgzMDAwODE2QzAwMDAwQzAzMjI0QzgxNkMwMDAwMTYwMzIyNTBDNgorOjEwMTg0MDAwODE2QzAwMDAxNzAzMjI1NDgxNkMwMDAwMTkwMzIyNTg5OAorOjEwMTg1MDAwODE2QzAwMDAxRTAzMjI1QzgxNkMwMDAwNTAwMTAwNDA3RQorOjEwMTg2MDAwODFCMjAwMDAwMDAwMDBCQzA5QjAwMTAwREQ5RjAwQ0E4OQorOjEwMTg3MDAwMDFCMDAwMDAwMDAwMDA0MDAzQjAwMTAwMDAwMDAwNDE4MgorOjEwMTg4MDAwRjM4MzAxMDAxMDAzQTI0MjA1NkMwMDAwMDAwMDAwNDEzOAorOjEwMTg5MDAwMDVCMDAxMDBERDlGMjJDQTA3MTQwMDAwREQ5RjAwNDU0RQorOjEwMThBMDAwRjM5MzAwMDBERDlGMjA0Mzk1NkYwMDAwREQ5RjgwQ0EwOQorOjEwMThCMDAwMDUzMDAwMDBERDlGMjIwMTgwMzAwMDAwREQ5RjAwQ0I1RAorOjEwMThDMDAwREI5MTAwMDA1NzAxMDBCQ0FCQjMwMDAwMDAwMDAwQkM3RQorOjEwMThEMDAwQjFCMzAxMDBERDlGMDBDQUNGQjMwMDAwRkYwMDAwQ0ExMgorOjEwMThFMDAwODE4ODAxMDBERDlGQTI0MDc0N0QwMDAwNjAwMDIwNDBERgorOjEwMThGMDAwNjA5OTAxMDAxQjAzQThCMTgyMzAwMDAwMUEwMzAwNDA2OAorOjEwMTkwMDAwODFCMjAwMDBERDlGMDBDQTc5QjMwMDAwMDQwMDAwNDBFRQorOjEwMTkxMDAwODFCMjAwMDAwMDAwMDA0RTgxQjAwMTAwMDAwMDAwNDNEMQorOjEwMTkyMDAwQ0I4MzAxMDAwMDAwNDU0MDgxQjIwMTAwMjIwM0EyNDFBNworOjEwMTkzMDAwODE1MDAwMDAwMDAwNDU0MDgxQjIwMTAwMDAwMDQ1NDA5OAorOjEwMTk0MDAwODFCMjAxMDAyRDAzOTE4MjgyMzAwMDAwMDAwMDAwOEFFNAorOjEwMTk1MDAwODBCMDAxMDBBRTlGMDA0MDgwQ0UwMTAwMkIwM0E2NDA2NgorOjEwMTk2MDAwODEzMjAwMDAyRDAzNTY0MDgxQjIwMDAwQjUwMzAwNDBEMworOjEwMTk3MDAwQTE5OTAxMDAwMDAwMDA1MzA3OTAwMTAwQjUwMzAwNDA0OQorOjEwMTk4MDAwQTE5OTAxMDAwMDAwMDA1MjA3OTAwMTAwRDg5RjAwNDE3QQorOjEwMTk5MDAwOEJCMzAwMDAwMDAwMDA0RTgxQjAwMTAwMDAwMDAwNDI0NworOjEwMTlBMDAwQ0Q4MzAxMDAwMDAwNDY0MDgxQjIwMTAwMzIwM0EyNDExNAorOjEwMTlCMDAwODE1MDAwMDAwMDAwNDY0MDgxQjIwMTAwMDAwMDQ2NDAxNgorOjEwMTlDMDAwODFCMjAxMDAzRDAzOTE4MTgyMzAwMDAwMDAwMDAwODk1NgorOjEwMTlEMDAwODBCMDAxMDBBRTlGMDA0MDgwQ0UwMTAwM0IwM0E2NDBENgorOjEwMTlFMDAwODEzMjAwMDAzRDAzNTU0MDgxQjIwMDAwQjUwMzAwNDA0NAorOjEwMTlGMDAwQTE5OTAxMDAwMDAwMDA1MjA3OTAwMTAwQjUwMzAwNDBDQQorOjEwMUEwMDAwQTE5OTAxMDAwMDAwMDA1MzA3OTAwMTAwRDg5RjAwNDFGOAorOjEwMUExMDAwOEJCMzAwMDBCMDAzMDA0MEExOTkwMTAwQzQxNDJGNDAxMworOjEwMUEyMDAwOTlCMzAxMDA1NzAxMDA0MDQ5QjEwMDAwMDQwMDAwNDA5MworOjEwMUEzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCOAorOjEwMUE0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwMUE1MDAwODFCMjAwMDAzMDk0MDA0MDQzOTkwMTAwMDA5MDAwRjhFQQorOjEwMUE2MDAwODA5ODAxMDAxMDAwMDBGMjg4RTQwMTAwMjAwMDAwNDA4RQorOjEwMUE3MDAwMjA5OTAxMDAwMDAwMDA1RjIzOTEwMTAwNEQwMzFGOTE5OAorOjEwMUE4MDAwODAzMjAwMDAzMDAwMDA0MDIwOTkwMTAwMDAwMDAwNUYxQgorOjEwMUE5MDAwMjM5MTAxMDA1MDAzMUY5MTgwMzIwMDAwNDAwMDAwNDA1QworOjEwMUFBMDAwMjA5OTAxMDAwMDAwMDA1RjIzOTEwMTAwNTMwMzFGOTE2MgorOjEwMUFCMDAwODAzMjAwMDAwMDAwMDA1RjIzOTEwMTAwNTUwMzFGOTE1OAorOjEwMUFDMDAwODAzMjAwMDAwMDA4ODA0MDIwOTkwMTAwMDQwMDAwNDA5RQorOjEwMUFEMDAwODFCMjAwMDAwMDAwMDA0Nzg0QjAwMTAwMDAwMEEyNDg2RAorOjEwMUFFMDAwODQ4NDAwMDAwMDAwMDA1RjYxQjEwMTAwMDAwMDAwNUMyMAorOjEwMUFGMDAwOEY5MDAxMDAwMDAwMDA0NzYyQjEwMTAwNUEwM0E4NDAyNgorOjEwMUIwMDAwODEzMjAwMDAwMDA4MDA0NzhFQzgwMTAwNTgwMzAwNUNDNQorOjEwMUIxMDAwOEY4MDAwMDBFMDAwMDA0MDYxOTkwMTAwNTgxNTJENDBDMQorOjEwMUIyMDAwOERCMDAxMDBEMDE0MkRGMDg4QjAwMTAwMDAwMDAwRkE0MworOjEwMUIzMDAwOEFCMDAxMDAwMDAwMDA0NTgxQjAwMTAwMDcwMDAwNDVBNworOjEwMUI0MDAwODI4ODAxMDAwMDAwMDA0MzhCRjAwMTAwMDAwMDAwNDg4MworOjEwMUI1MDAwODNFMDAxMDAwMDAwMDA0NjgyOTQwMTAwMjAwMDAwNDE2MworOjEwMUI2MDAwNjA5OTAxMDAwMDAwMDA0MThEQzAwMTAwNzQwMzIyNUZGNAorOjEwMUI3MDAwOEQ2QzAwMDA2NTAzQTI0MTgxNTAwMDAwNjMwMzAwNDBBQQorOjEwMUI4MDAwODFCMjAwMDAwODAwMDA0MDg1OTgwMTAwMDAwMDAwNDQ3OAorOjEwMUI5MDAwODJCMDAxMDAwMDAwMDA0MTg2QjAwMTAwMDAxQzAwNDMzQgorOjEwMUJBMDAwODZEODAxMDAwMDAwQTY0MTg1NTAwMTAwNzAwMzAwNDE2NQorOjEwMUJCMDAwODNFMDAwMDA2RTAzMDA0MDgxMzIwMTAwMDAwMDAwNDgxNQorOjEwMUJDMDAwODVFMDAxMDBEMDE0MkY0Njg0OTQwMTAwMjAwMDAwNDJEQgorOjEwMUJEMDAwNjA5OTAxMDBDMDAwMDA0MDYxOTkwMTAwMDAwMDgwNDA1MAorOjEwMUJFMDAwODFCMjAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNgorOjEwMUJGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNworOjEwMUMwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMUMxMDAwODFCMjAwMDAwNzAwMDA0NTgwODgwMTAwMDAwMDAwNDNGOQorOjEwMUMyMDAwOEJGMDAxMDAwMDA0MDA0MDgzOTgwMTAwODUwM0EwNDE2RgorOjEwMUMzMDAwODE1MDAwMDA4MzAzMDA0MTgyRTgwMDAwMDAwMDgwNDFFMQorOjEwMUM0MDAwOEVDMDAxMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4QQorOjEwMUM1MDAwODFCMjAwMDAwMDAwMDA0MDQ5QjEwMTAwMDAwMjAwNDBENAorOjEwMUM2MDAwODM5ODAxMDAwMDM5MDA0MDQ1OTkwMTAwMDAwMDAwNDBDMAorOjEwMUM3MDAwRjFCMTAxMDA4QjAzQTI0MTgzNTAwMDAwMDAwMDAwNDAzRAorOjEwMUM4MDAwODVCMDAxMDAwQjAwMDA0NDgyRjQwMTAwMUExNTAwQTY4MworOjEwMUM5MDAwODZCMDAxMDA3MDE1MDA0MDQ1OTkwMTAwMDAwODAwNDAyMQorOjEwMUNBMDAwRjE5OTAxMDAwMDAwMDA0MkYwQjEwMTAwMDAzOTAwNDA0QworOjEwMUNCMDAwRTE5OTAxMDAwNDAwMDA0MDYxOTkwMTAwNzAxNTAwNDNBMgorOjEwMUNDMDAwNjI5OTAxMDA5NTAzQTg0MDgxMzIwMDAwOTcwMzIyNUFDRgorOjEwMUNEMDAwNzM3RDAwMDA3QTAwMDA0MDYxOTkwMTAwOTgwM0E4QjE2QgorOjEwMUNFMDAwN0UzMTAwMDAwMDA4MDA0Mjg0QzgwMTAwOTAwM0EyNDEzOAorOjEwMUNGMDAwODM1MDAwMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDBEOQorOjEwMUQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNQorOjEwMUQxMDAwODFCMjAwMDA1ODE1MkQ0MDhEQjAwMTAwRDAxNDJERjA3NworOjEwMUQyMDAwODhCMDAxMDAwMDAwMDA0MDhGQjAwMTAwMDEwMDAwQTY1MworOjEwMUQzMDAwOTBCMDAxMDAwMEY4MDA0ODkwOTgwMTAwMDAwMDAwNDVCNAorOjEwMUQ0MDAwOTNCMDAxMDAwMDAwMDBGQThBQjAwMTAwODAwMzAwNDA1NworOjEwMUQ1MDAwODEzMjAxMDAwMjAwMDBBNjgwQjAwMTAwQUMwMzIyNDBFNQorOjEwMUQ2MDAwODI2QzAwMDBCMDAzMDA0MDgxMzIwMTAwNTgwMzAwNDA0MworOjEwMUQ3MDAwODEzMjAxMDAwMDAwMDA0MThEQzAwMTAwQjUwMzIyNUZFNworOjEwMUQ4MDAwOEQ2QzAwMDBBNzAzQTI0MTkzNTAwMDAwQTUwMzAwNDAwMgorOjEwMUQ5MDAwODFCMjAwMDBGRjA3MDA0Nzg0ODgwMTAwMDAwMEE2NDBEMAorOjEwMURBMDAwODFCMjAwMDBFRDlGMDA0NzgwMzAwMTAwMDAwMjAwNDczMworOjEwMURCMDAwOEVDODAxMDBCMDAzMDA0MDgxQjIwMDAwMDAwMDAwNDQ2MgorOjEwMURDMDAwNTBCMzAxMDBCQjAzMjAxODg5NkMwMDAwMDQwMDAwQTY3QQorOjEwMUREMDAwODRCMDAxMDAyMDAwMDBBNjg2QjAwMTAwMDAxMDAwNDA4MQorOjEwMURFMDAwNTU5QjAxMDBCRTAzMDA0MDgxQjIwMDAwMDQwMDAwQTYyNAorOjEwMURGMDAwODRCMDAxMDAyMDAwMDBBNjg2QjAwMTAwMDAxMDAwNDA2MQorOjEwMUUwMDAwNTU5QjAxMDAwMDAwMDA0MjUwRDMwMTAwMDAwMDAwQThEMworOjEwMUUxMDAwNEZCMzAxMDAwMDAwMDA0MzRFRDMwMTAwNkUwMzAwNDBBOQorOjEwMUUyMDAwODEzMjAxMDA4MjAzMDA0MjgwMzAwMTAwQjAwMzAwNDA5MworOjEwMUUzMDAwODEzMjAxMDBDNzAzMjJBNzhGNkMwMDAwNUEwMzAwNDBDMworOjEwMUU0MDAwODEzMjAxMDBDNDAzMDA0MDgxQjIwMDAwMDAwMDgwNDBFNAorOjEwMUU1MDAwODFCMjAxMDBDODE0MkVCQjg1QjAwMTAwMDAwMDAwRUU2NQorOjEwMUU2MDAwODJCMDAxMDAwMDAwMDA0MUUwQjEwMTAwMDAwMDAwQTJDQQorOjEwMUU3MDAwQTBCMzAxMDAwMDAwMDA0NEE1QjMwMTAwRTE5RjAwQ0EyNworOjEwMUU4MDAwQTczMzAxMDBFMDlGMDA0MDgxQjIwMDAwMDQwMDAwNDA0MQorOjEwMUU5MDAwODFCMjAwMDBENjAzMjI0Mjc1NkYwMDAwRDgwMzIyNDFCMAorOjEwMUVBMDAwNzU2RjAwMDBEQTAzMUVDQTgxMzIwMDAwREMwMzFGQ0EwRQorOjEwMUVCMDAwODEzMjAwMDAwMDAwMDBDQUM5QjEwMTAwREQ5RjAwNDI2QworOjEwMUVDMDAwNzVCMzAwMDAwMDAwMDBDQUNEQjEwMTAwREQ5RjAwNDFFNAorOjEwMUVEMDAwNzVCMzAwMDAwMDAwMDBDQUNGQjEwMTAwREQ5RjAwNDBEMworOjEwMUVFMDAwNzVCMzAwMDAwMDgxMDBBNkM2QjEwMTAwREQ5RjAwNDA2RgorOjEwMUVGMDAwODFCMjAwMDAwMDgwMDBBNkM2QjEwMTAwREQ5RjAwNDA1NQorOjEwMUYwMDAwNzVCMzAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRQorOjEwMUYxMDAwODFCMjAwMDA0NTAxMDA0RDkzMzAwMTAwNDUwMTAwNEVBMworOjEwMUYyMDAwOTMzMDAxMDA0NTAxMDA0QzkzMzAwMTAwRUM5RjAwNDBDQworOjEwMUYzMDAwODEzMjAxMDBERDlGMDA0MDgxQjIwMDAwMDQwMDAwNDBCQQorOjEwMUY0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwMUY1MDAwODFCMjAwMDA1NDk1MDA0MDQ1OTkwMTAwREQ5RjAwQ0EwMAorOjEwMUY2MDAwRTVCMTAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMUY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwMUY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMUY5MDAwODFCMjAwMDBDQzE0MkU0MDg3QjAwMTAwMDAwMDAwQTJFNgorOjEwMUZBMDAwQTBCMzAxMDAxNTA0MDA0M0IyMzMwMTAwMDAwMDY4REE1OQorOjEwMUZCMDAwODlCMDAxMDA3QzAwMDA0MDhCOTgwMTAwMDAwMDAwNTBCNworOjEwMUZDMDAwODlGMDAxMDAwMDAwMDA0MTg5RDAwMTAwMDMwMDAwNDRCNQorOjEwMUZEMDAwODg4QzAxMDAwMDAwMDA0NDg3QzAwMTAwMDAwMDAwNDExRgorOjEwMUZFMDAwQTVCMzAxMDAxNTA0MDA0M0IyMzMwMTAwMDAwMDAwREE3QworOjEwMUZGMDAwRjFCMTAxMDAwMDAwMDA0NDg3QzAwMTAwMDAwMDAwNDE3MQorOjEwMjAwMDAwQTVDMzAxMDAwQjA0MjI0NDg5NTAwMDAwMEIwNDIyNDRBNAorOjEwMjAxMDAwOEI1MDAwMDBGQTAzQTI1MEE1NkYwMDAwMDAwMDAwNDJBMAorOjEwMjAyMDAwQTVFMzAxMDAwMDAwMDBDQUE3QjMwMTAwRTE5RjAwQkJDNworOjEwMjAzMDAwODUzMDAxMDBDQzE0MkVEMjk1QzMwMTAwQUUwMzAwQ0IzNQorOjEwMjA0MDAwQTNDOTAxMDAwMDAwMDAyMDQyQjEwMTAwMDAwMDAwNTBCRgorOjEwMjA1MDAwODFCMDAxMDAwODA0QTI0MTgxNTAwMDAwMDcwNEEyRjJFRgorOjEwMjA2MDAwODAzMDAwMDBGQTAzMDA0MEE1QjMwMDAwMDAwMDAwNDJFOQorOjEwMjA3MDAwQTVFMzAxMDAwMDAwMDBDQUE3QjMwMTAwRTE5RjAwQkI3NworOjEwMjA4MDAwODUzMDAxMDBFMDlGMDA0MDgxQjIwMDAwMDQwMDAwNDA2NAorOjEwMjA5MDAwODFCMjAwMDAwMDAwMDBEOTJCQjEwMTAwMDAxMDAwNDAwNworOjEwMjBBMDAwODM5ODAxMDBEQjAwMDA0MDgxMzIwMTAwRkZGRjAwOTRCMworOjEwMjBCMDAwQjQ4QjAxMDAwMDAwODA0MDgxQjIwMTAwMDAwMDAwRDkxMworOjEwMjBDMDAwMkJCMTAxMDAwMDEwMDA0MDgzOTgwMTAwREQwMDAwNDBBQQorOjEwMjBEMDAwODEzMjAxMDAwMDAwODA5NEI0QjMwMTAwMDQwMDAwNDA4QworOjEwMjBFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwMgorOjEwMjBGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMgorOjEwMjEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFMQorOjEwMjExMDAwODFCMjAwMDAwMDAwMDBEOTJCQjEwMTAwMDAwMDAwREFGQworOjEwMjEyMDAwMjdCMTAxMDAwNkMwMDA0MDJEOTkwMTAwREUwMDAwNDBFQgorOjEwMjEzMDAwODEzMjAxMDAwMDEwMDA0MDgzOTgwMTAwMDJDNDAwNDE3OAorOjEwMjE0MDAwMkM5OTAxMDBERTAwMDA0MDgxMzIwMTAwMDA0MDAwNDA3NworOjEwMjE1MDAwODM5ODAxMDAwNTgyMDA0MTJDOTkwMTAwREUwMDAwNDBCNworOjEwMjE2MDAwODEzMjAxMDAyRDA0ODA5NDgwMzIwMDAwMEMwMTAwNDA3NworOjEwMjE3MDAwODEzMjAxMDAyODA0MDA0MDgxQjIwMDAwMDQ4MDAwNDA0OAorOjEwMjE4MDAwMkQ5OTAxMDBERTAwMDA0MDgxMzIwMTAwMDAwMDgwNDBGNgorOjEwMjE5MDAwODFCMjAxMDAzMTA0MDAxMjEwQzkwMDAwMDA0ODgwNDBFMworOjEwMjFBMDAwMEI5ODAxMDBDMDQ5ODA0MDBCOTgwMTAwODA0QjgwNDA5MworOjEwMjFCMDAwMEI5ODAxMDA0MDREODA0MDBCOTgwMTAwMDA0RjgwNDA3QgorOjEwMjFDMDAwMEI5ODAxMDBDMDUwODA0MDBCOTgwMTAwODA1MjgwNDA2NQorOjEwMjFEMDAwMEI5ODAxMDA0MDU0ODA0MDBCOTgwMTAwMDA1NjgwNDA0RAorOjEwMjFFMDAwMEI5ODAxMDBDMDU3ODA0MDBCOTgwMTAwODA1OTgwNDAzNworOjEwMjFGMDAwMEI5ODAxMDA0MDVCODA0MDBCOTgwMTAwMDA1RDgwNDAxRgorOjEwMjIwMDAwMEI5ODAxMDBDMDVFODA0MDBCOTgwMTAwODA2MDgwNDAwOAorOjEwMjIxMDAwMEI5ODAxMDA0MDYyODA0MDBCOTgwMTAwMDA2NDgwNDBGMAorOjEwMjIyMDAwMEI5ODAxMDBDMDY1ODA0MDBCOTgwMTAwODA2NzgwNDBEQQorOjEwMjIzMDAwMEI5ODAxMDA0MDY5ODA0MDBCOTgwMTAwMDA2QjgwNDBDMgorOjEwMjI0MDAwMEI5ODAxMDBDMDZDODA0MDBCOTgwMTAwODA2RTgwNDBBQworOjEwMjI1MDAwMEI5ODAxMDA0MDcwODA0MDBCOTgwMTAwMDA3MjgwNDA5NAorOjEwMjI2MDAwMEI5ODAxMDBDMDczODA0MDBCOTgwMTAwODA3NTgwNDA3RQorOjEwMjI3MDAwMEI5ODAxMDA0MDc3ODA0MDBCOTgwMTAwMDA3OTgwNDA2NgorOjEwMjI4MDAwMEI5ODAxMDBDMDdBODA0MDBCOTgwMTAwODA3QzgwNDA1MAorOjEwMjI5MDAwMEI5ODAxMDA0MDdFODA0MDBCOTgwMTAwMDQwMDAwNDAzNAorOjEwMjJBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MAorOjEwMjJCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMAorOjEwMjJDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMAorOjEwMjJEMDAwODFCMjAwMDA1OTA0MDAxMjEwQzkwMDAwMDA4MDgwNDA0MworOjEwMjJFMDAwMEI5ODAxMDAwMDgyODA0MDBCOTgwMTAwMDA4NDgwNDAyMAorOjEwMjJGMDAwMEI5ODAxMDAwMDg2ODA0MDBCOTgwMTAwMDA4ODgwNDAwOAorOjEwMjMwMDAwMEI5ODAxMDAwMDhBODA0MDBCOTgwMTAwMDA4QzgwNDBFRgorOjEwMjMxMDAwMEI5ODAxMDAwMDhFODA0MDBCOTgwMTAwMDA5MDgwNDBENworOjEwMjMyMDAwMEI5ODAxMDAwMDkyODA0MDBCOTgwMTAwMDA5NDgwNDBCRgorOjEwMjMzMDAwMEI5ODAxMDAwMDk2ODA0MDBCOTgwMTAwMDA5ODgwNDBBNworOjEwMjM0MDAwMEI5ODAxMDAwMDlBODA0MDBCOTgwMTAwMDA5QzgwNDA4RgorOjEwMjM1MDAwMEI5ODAxMDAwMDlFODA0MDBCOTgwMTAwMDBBMDgwNDA3NworOjEwMjM2MDAwMEI5ODAxMDAwMEEyODA0MDBCOTgwMTAwMDBBNDgwNDA1RgorOjEwMjM3MDAwMEI5ODAxMDAwMEE2ODA0MDBCOTgwMTAwMDBBODgwNDA0NworOjEwMjM4MDAwMEI5ODAxMDAwMEFBODA0MDBCOTgwMTAwMDBBQzgwNDAyRgorOjEwMjM5MDAwMEI5ODAxMDAwMEFFODA0MDBCOTgwMTAwMDBCMDgwNDAxNworOjEwMjNBMDAwMEI5ODAxMDAwMEIyODA0MDBCOTgwMTAwMDBCNDgwNDBGRgorOjEwMjNCMDAwMEI5ODAxMDAwMEI2ODA0MDBCOTgwMTAwMDBCODgwNDBFNworOjEwMjNDMDAwMEI5ODAxMDAwMEJBODA0MDBCOTgwMTAwMDBCQzgwNDBDRgorOjEwMjNEMDAwMEI5ODAxMDAwMEJFODA0MDBCOTgwMTAwMDQwMDAwNDBGMworOjEwMjNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwMjNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRgorOjEwMjQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwMjQxMDAwODFCMjAwMDAwMDAwMDA0MDg3QjEwMTAwMDAwMDAwNDBEMAorOjEwMjQyMDAwOTdCMDAxMDAwMDAwMDA0QjgwQjEwMTAwMDEwMDAwQTY0MAorOjEwMjQzMDAwODJCMTAxMDA4MjA0ODU0MTk3NDAwMDAwMDAwMDAwNDAwNQorOjEwMjQ0MDAwOTdCMTAxMDAwMDAwMDA0MDk3QjAwMTAwMDAwMDAwNEI3MAorOjEwMjQ1MDAwOTBCMTAxMDAwMTAwMDBBNjkyQjEwMTAwODcwNDg1NDFGRQorOjEwMjQ2MDAwOTc0MDAwMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDA1RAorOjEwMjQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMjQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMjQ5MDAwODFCMjAwMDA5MDA0NjA0MDgxMzIwMDAwMDAwMDAwMTIxMAorOjEwMjRBMDAwODBCMTAxMDBGRkZGRjA0QjgyODkwMTAwOTMwNDYwNDA3RQorOjEwMjRCMDAwODEzMjAwMDAwMDAwMDA0QTgwQjEwMTAwMDEwMEYwQTY1NgorOjEwMjRDMDAwODJCMTAxMDA5NjA0NjA0MDgxMzIwMDAwRkZGRjAwNEJBMgorOjEwMjREMDAwODQ4OTAxMDAwMDAwRjBDMjI0QjAwMTAwMDAwMDAwNEExRAorOjEwMjRFMDAwOTBCMTAxMDBGRkZGODA0QjkyODkwMTAwMDAwMDAwNEE3QgorOjEwMjRGMDAwOTBCMTAxMDAwMTAwODBBNjkyQjEwMTAwRkZGRjAwNEJFNgorOjEwMjUwMDAwOTQ4OTAxMDAwMDAwODBDQTk0QjAwMTAwMDQwMDAwNDBEQQorOjEwMjUxMDAwODFCMjAwMDAxMDAwMDA0RTk4RTQwMTAwMDAwMDAwMDdBNgorOjEwMjUyMDAwOTg5NDAxMDAwMDAwMDA0Mzk5RTAwMTAwMDAwMDAwODA0MQorOjEwMjUzMDAwOTg5NDAxMDAwMDAwMDA0OTk5RTAwMTAwMDAwMDAwNEM1RgorOjEwMjU0MDAwODg5NDAxMDBBNjA0NDc0MDgxMzIwMDAwQUQwNDIyMjA5NworOjEwMjU1MDAwODc2RjAwMDAwMDAwMUY0MDgxQjIwMTAwMDAwMDAwNDBCMgorOjEwMjU2MDAwODFCMjAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwNDA4MworOjEwMjU3MDAwODFCMjAxMDBBNjA0MDA0MDgxQjIwMDAwMDAwMDFGODA2QgorOjEwMjU4MDAwODZCMzAxMDBCMDA0MjI0Rjc3N0QwMDAwQzAwNDAwNDBGNAorOjEwMjU5MDAwODEzMjAxMDAwMDAwMDA0RjYxQjEwMTAwMDAwMDAwNDRFMQorOjEwMjVBMDAwNjJCMTAxMDBCMTA0QTg0MDgxMzIwMDAwQjgwNDIyNEI5RQorOjEwMjVCMDAwODk3QzAwMDBCNjA0MjI0Rjc3N0QwMDAwQzAwNDAwNDBGMworOjEwMjVDMDAwODEzMjAxMDAwMDAwMDA0NTYyQjEwMTAwQjYwNEE4NDA1QworOjEwMjVEMDAwODEzMjAwMDAwMDAwODAyMDg3QjMwMTAwMDQwMDAwNDAyOQorOjEwMjVFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRAorOjEwMjVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFRAorOjEwMjYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQworOjEwMjYxMDAwODFCMjAwMDAwMDAwMDA1MDk5QjAwMTAwNkYwMDAwNDAzRQorOjEwMjYyMDAwNjE5OTAxMDBDMTA0QThCMTUyMzMwMDAwQzYwNDIyNEJENQorOjEwMjYzMDAwNTM3RjAwMDA2RjAwMDA0MDYxOTkwMTAwQzQwNEE4QjFGRAorOjEwMjY0MDAwN0UzMTAwMDBDMTA0QTI0MTk5NTAwMDAwMDAwMEEyNEY1OQorOjEwMjY1MDAwNzdGRDAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0QgorOjEwMjY2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QworOjEwMjY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QworOjEwMjY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QworOjEwMjY5MDAwODFCMjAwMDAxMDAwMDA0RTk4RTQwMTAwMDAwMDAwMDcyNQorOjEwMjZBMDAwOTg5NDAxMDAwMDAwMDA0Mzk5RTAwMTAwMDAwMDAwODBDMAorOjEwMjZCMDAwOTg5NDAxMDAwMDAwMDA0ODk5RTAwMTAwRDYwNDAwNEMwNQorOjEwMjZDMDAwODg5NDAwMDBENjA0NDc0MDgxMzIwMDAwREQwNDIyMjBCNworOjEwMjZEMDAwODc2RjAwMDAwMDAwMUY0MDgxQjIwMTAwMDAwMDAwNDAzMQorOjEwMjZFMDAwODFCMjAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwNDAwMgorOjEwMjZGMDAwODFCMjAxMDBENjA0MDA0MDgxQjIwMDAwMDAwMDFGODBCQQorOjEwMjcwMDAwODZCMzAxMDBFMDA0MjI0Rjc3N0QwMDAwRjAwNDAwNDAxMgorOjEwMjcxMDAwODEzMjAxMDAwMDAwMDA0RjYxQjEwMTAwMDAwMDAwNDQ1RgorOjEwMjcyMDAwNjJCMTAxMDBFMTA0QTg0MDgxMzIwMDAwRTgwNDIyNEFCRAorOjEwMjczMDAwODk3QzAwMDBFNjA0MjI0Rjc3N0QwMDAwRjAwNDAwNDAxMQorOjEwMjc0MDAwODEzMjAxMDAwMDAwMDA0NTYyQjEwMTAwRTYwNEE4NDBBQQorOjEwMjc1MDAwODEzMjAwMDAwMDAwODAyMDg3QjMwMTAwMDQwMDAwNDBBNworOjEwMjc2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3QgorOjEwMjc3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2QgorOjEwMjc4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1QgorOjEwMjc5MDAwODFCMjAwMDAwMDAwMDA1MDk5QjAwMTAwNkYwMDAwNDBCRAorOjEwMjdBMDAwNjE5OTAxMDBGMTA0QThCMTUyMzMwMDAwRjYwNDIyNEFGNQorOjEwMjdCMDAwNTM3RjAwMDA2RjAwMDA0MDYxOTkwMTAwRjQwNEE4QjE0QworOjEwMjdDMDAwN0UzMTAwMDBGMTA0QTI0MTk5NTAwMDAwMDAwMEEyNEZBOAorOjEwMjdEMDAwNzdGRDAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQQorOjEwMjdFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGQgorOjEwMjdGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwMjgwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEQQorOjEwMjgxMDAwODFCMjAwMDA3QjAwMDA0MDYxOTkwMTAwMDAwNUE4QjE3MQorOjEwMjgyMDAwODAzMDAwMDAxMjA1MUQ0MDgwMzIwMDAwNDAxODAwNDAzQQorOjEwMjgzMDAwNDk5OTAxMDAwNDAwMDBBNjg2QjAwMTAwMTAwNUEyNDBERAorOjEwMjg0MDAwODYwNDAwMDBERTlGOUM0MDgwMzIwMDAwRkZGRjAwNDBCNQorOjEwMjg1MDAwODg4ODAxMDAzMDA1MDA1MDQ3MzEwMTAwMzYwMDAwNDRFRgorOjEwMjg2MDAwODhDQzAxMDAwQzA1NTI0MDgxMzIwMDAwMzAwNTAwNDA0OAorOjEwMjg3MDAwNDczMTAxMDAwMDAwMDA0MTg5QjAwMTAwMzAwNTAwNDhFNworOjEwMjg4MDAwNDczMTAxMDAzMDA1MDAwNTQ3MzEwMTAwREU5RjAwNDA1RgorOjEwMjg5MDAwODFCMjAwMDAyODAwMDA0MDQ3OTkxQjAwREU5RjAwNDFFNAorOjEwMjhBMDAwRTFDMTFBMDA3ODE4MDA0MDQ5OTkxQjAwMTkwNTIyNTQwQgorOjEwMjhCMDAwODE3QzFBMDAxNDA1NDI0MDgxMzIxQTAwMDA4MjAwQjM2NAorOjEwMjhDMDAwNjdERjFCMDAwMDAwMUE0NDkzOTMxQjAwMjgwMDAwNDBBMAorOjEwMjhEMDAwNDc5OTFCMDAzMDA1MDA0MTg5MzAwMTAwMjcwNTBGNDA1MgorOjEwMjhFMDAwODAzMjAwMDBGRjdGMDA0MDg4ODgwMTAwMzAwNTAwNTBFMgorOjEwMjhGMDAwNDczMTAxMDAzNjAwMDA0NDg4Q0MwMTAwMUYwNTk5NDA5MworOjEwMjkwMDAwODAzMjAwMDAwMDAwMDA0ODg5RDAwMTAwMjEwNTlCNDA3MgorOjEwMjkxMDAwODAzMjAwMDAwMDAwMDA0Qzg5RDAwMTAwMjMwNTFGNDRENAorOjEwMjkyMDAwODAzMjAwMDAzMDA1MDA0MDQ3MzEwMTAwMDAwMDAwNDFDNgorOjEwMjkzMDAwODlCMDAxMDAzMDA1MDA0ODQ3MzEwMTAwMzAwNTAwNThEQQorOjEwMjk0MDAwNDczMTAxMDBERTlGMDA0MDgxQjIwMDAwMTAwMDAwNDBDRQorOjEwMjk1MDAwODZGNDAxMDA2RjAwMDA0Mzg2ODgwMTAwREU5RjI2MDU5MworOjEwMjk2MDAwNDczMTAwMDAzMDA1MDA0MTg5MzAwMTAwREU5RjAwNDAwMgorOjEwMjk3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2OQorOjEwMjk4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1OQorOjEwMjk5MDAwODFCMjAwMDAwMDAwQTA0NEYwNDEwMTAwMDAwMDAwNDBBRQorOjEwMjlBMDAwODFCMjAxMDAwMDAwODA0MUUxQzEwMTAwMDQwMDAwNDA0QgorOjEwMjlCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyOQorOjEwMjlDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxOQorOjEwMjlEMDAwODFCMjAwMDA0QzAxMDAwNzkxMzAwMTAwMDAwMEEyNDBDQworOjEwMjlFMDAwOTdFQzAwMDAwMDAwODAwNTkxQzAwMTAwMDQwMDAwNDA0OQorOjEwMjlGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFOQorOjEwMkEwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBEOAorOjEwMkExMDAwODFCMjAwMDA0QzAxMDA0MDgxMzIwMTAwNDQwNUEyNDAxNworOjEwMkEyMDAwOTc2QzAwMDAzQTAwMDA0MEIzOUIwMTAwNDUwNTAwNDA1MAorOjEwMkEzMDAwODFCMjAwMDA0MDAwMDA0MEIzOUIwMTAwMTAwNDAwNDA0MAorOjEwMkE0MDAwODEzMjAxMDAwMDAwMDBEQUY1QjEwMTAwMTAwNDAwNDJGQgorOjEwMkE1MDAwQjM0MzAxMDAwMDAwMDBEQUY1QjEwMTAwMTAwNDAwNDJBOAorOjEwMkE2MDAwQjM0MzAxMDAwMDAwMDBEQUY1QjEwMTAwNEUwMDAwNDA2MAorOjEwMkE3MDAwQjM5QjAxMDAxMDA0MDA0MDgxMzIwMTAwMDgwMDAwREExRAorOjEwMkE4MDAwRjdGNTAxMDA1MDAwMDA0MDkxOTgwMTAwMDAwMDAwNDc1OAorOjEwMkE5MDAwOEZCMDAxMDAxMDA0MDA0OEIyMzMwMTAwMDAwMDAwREFEQQorOjEwMkFBMDAwRjdCMTAxMDAwODAwMDBEQUY3RjUwMTAwMDAwMDAwNDI2QworOjEwMkFCMDAwOTFDMDAxMDA1MDA1QTI0MThGNTAwMDAwMDAwMDAwNDE2QworOjEwMkFDMDAwNDVEMTAxMDAwODAwMDA0MEIzOUIwMTAwMTAwNDAwNDAwNAorOjEwMkFEMDAwODEzMjAxMDAwMDAwMDBEQUZEQjEwMTAwMEEwMDAwNDA2RgorOjEwMkFFMDAwQjM5QjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREFCNQorOjEwMkFGMDAwRkRCMTAxMDAxQTAwMDA0MEIzOUIwMTAwMTAwNDAwNDAyQQorOjEwMkIwMDAwODEzMjAxMDAwMDAwMDBEQUZEQjEwMTAwMTgwMDAwNDAzMAorOjEwMkIxMDAwQjM5QjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREE4NAorOjEwMkIyMDAwRkRCMTAxMDAzODA1MDA0MDgxMzIwMTAwMUUwMDAwNDg1RgorOjEwMkIzMDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREEzNQorOjEwMkI0MDAwOTFDMDAxMDAwMDAwMDA0OEIyQ0IwMTAwMTAwNDAwNDAxOQorOjEwMkI1MDAwODEzMjAxMDAwMDAwNkVEQThGQjAwMTAwMDIwMDAwNDhFRgorOjEwMkI2MDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwMDAwMDAwREEwNQorOjEwMkI3MDAwRkRCMTAxMDAwNDAwMDA0OEIyQ0IwMTAwMTAwNDAwNDA4OAorOjEwMkI4MDAwODEzMjAxMDAwMDAwODBEQUZEQjEwMTAwMDQwMDAwNDA0NAorOjEwMkI5MDAwODFCMjAwMDA3QTA1MjI0NUZEN0YwMDAwNDAxNjAwNDAwQQorOjEwMkJBMDAwNDU5OTAxMDBEQjlGMDA0MDQ5MzEwMTAwMDgwMDAwNDhDMQorOjEwMkJCMDAwQjJDQjAxMDAxNTA0MDA0MDgxMzIwMTAwNzgwNUEyNDAyQgorOjEwMkJDMDAwOEY2QzAwMDA3RDA1MjIyMEI1NkYwMDAwN0EwNTAwNDA2MworOjEwMkJEMDAwODFCMjAwMDBEQTlGMDA0MDgxMzIxRjAwN0QwNTIyNDA1MworOjEwMkJFMDAwOTc2QzFFMDA3QTA1NDI0MDgxMzIxRTAwMDAwMDAwNEZBMworOjEwMkJGMDAwNjc5MzFGMDBERjlGMDA1ODY3OTMxRTAwNTQxNjAwNDAyNAorOjEwMkMwMDAwNDc5OTFGMDAwMDAwMDBGRUY0QjExRjAwMDAwMDAwNDBDMworOjEwMkMxMDAwODFCMjFGMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA3RQorOjEwMkMyMDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA4QworOjEwMkMzMDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA3QworOjEwMkM0MDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA2QworOjEwMkM1MDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwMDAwMDAwNDA1QworOjEwMkM2MDAwODFCMjAxMDAwMDAwMDBGRUY0QjEwMTAwNDYwMDAwNDAwNgorOjEwMkM3MDAwQjM5QjAxMDAxMDA0MDA0MDgxMzIwMTAwMDgwMDAwREExQgorOjEwMkM4MDAwRjdGNTAxMDA0ODAwMDA0MDk1OTgwMTAwMDAwMDAwNDQ1RAorOjEwMkM5MDAwOTdCMDAxMDAxMDA0MDA0QUIyMzMwMTAwMDAwMDAwREFDRQorOjEwMkNBMDAwRjdCMTAxMDAwODAwMDBEQUY3RjUwMTAwMDAwMDAwNDI2QQorOjEwMkNCMDAwOTVDMDAxMDA5MDA1QTI0MTk3NTAwMDAwMkEwMDAwNDBGNQorOjEwMkNDMDAwQTU5QjAxMDA0MDE2MDA0MEExOUIwMTAwMDAwMDAwQ0EyNgorOjEwMkNEMDAwQTdCMzAxMDBFMTlGMDBCQjg1MzAwMTAwRTA5RjAwNDBFOQorOjEwMkNFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNgorOjEwMkNGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNgorOjEwMkQwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENQorOjEwMkQxMDAwODFCMjAwMDBCODA1MjI0NUZEN0YwMDAwRTAxNTAwNDBBQgorOjEwMkQyMDAwNDc5OTAxMDAxQTAwMDBBMjgwREMwMTAwMDAwMDAwNTA1OQorOjEwMkQzMDAwRjFCMTAxMDBGMDE1MDA0MEYxOTkwMTAwMDAwMDAwQ0E1NgorOjEwMkQ0MDAwRjFCMTAxMDAwNzAwMDA0MDYxOTkwMTAwMjAwMDAwNDAzRQorOjEwMkQ1MDAwNjJERDAxMDBBNzA1QThCQkUxMzEwMDAwMDAwMDAwNTBDMgorOjEwMkQ2MDAwODNCMDAxMDBBQTA1QTI0MTgzNTAwMDAwQTkwNUEyRjI4OAorOjEwMkQ3MDAwODIzMDAwMDA0QzAxMDA0MDgxMzIwMTAwQjAwNUEyNDBDOQorOjEwMkQ4MDAwOTc2QzAwMDAzQTAwMDA0MEIzOUIwMTAwQjEwNTAwNDA4MQorOjEwMkQ5MDAwODFCMjAwMDA0MDAwMDA0MEIzOUIwMTAwRjAxNTAwNDBFQworOjEwMkRBMDAwNDM5OTAxMDAxMDA0MDA0MDgxMzIwMTAwQjgwNUEyRkFFNQorOjEwMkRCMDAwQjQ2RjAwMDAxMDA0MDA0MkIzNDMwMTAwQjgwNUEyRkE0QQorOjEwMkRDMDAwQjQ2RjAwMDAxMDA0MDA0MkIzNDMwMTAwQkIwNTIyRkFCNworOjEwMkREMDAwQjQ2RjAwMDBCODA1NDI0MDgxMzIyMDAwMDAwMDAwNEU3MAorOjEwMkRFMDAwNjc5MzIxMDBERjlGMDA1ODY3OTMyMDAwNDAxNjAwNDA0MgorOjEwMkRGMDAwNDU5OTIxMDBEQjlGMDA0MDQ5MzEyMTAwRjYxNTAwNDAzNAorOjEwMkUwMDAwNDM5OTIxMDA1QzE2MDA0MDQ1OTkyMTAwMDAwMDZFRkFBQworOjEwMkUxMDAwOEVCMDIxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkVFMQorOjEwMkUyMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU4QQorOjEwMkUzMDAwRjRCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRjA4OAorOjEwMkU0MDAwQjRCMzAxMDBDOTA1QTI0MDhGNkMwMDAwRkMxNTIwMjAxRQorOjEwMkU1MDAwRTFCMTAxMDBDRTA1MDA0MDgxQjIyNDAwREE5RjAwNDBCQworOjEwMkU2MDAwODEzMjI1MDBDRTA1MjI0MDk3NkMyNDAwQ0IwNTQyNDBEQworOjEwMkU3MDAwODEzMjI0MDAwMDAwMDA0RjY3OTMyNTAwREY5RjAwNTgzNworOjEwMkU4MDAwNjc5MzI0MDAzODA1MDA0MDgxMzIyNTAwMUUwMDAwNDg2OQorOjEwMkU5MDAwQjJDQjI1MDAxMDA0MDA0MDgxMzIwMTAwRDMwNTIyNTAzRQorOjEwMkVBMDAwQjU2RjAwMDAwMDAwMDA1MDkxQzAwMTAwMDAwMDAwNDgxNAorOjEwMkVCMDAwQjJDQjAxMDBGNjE1MDA0MDQzOTkwMTAwMjAwNDAwRjI1NgorOjEwMkVDMDAwQjQzMzAxMDAwMjAwMDA0OEIyQ0IwMTAwRjgxNTAwNDAwNQorOjEwMkVEMDAwNDM5OTAxMDAyMDA0MDBGMkI0MzMwMTAwMDQwMDAwNDhDQgorOjEwMkVFMDAwQjJDQjAxMDBGQTE1MDA0MDQzOTkwMTAwMjAwNDAwRjIyMgorOjEwMkVGMDAwQjQzMzAxMDAwODAwMDA0OEIyQ0IwMTAwRkMxNTAwNDBDQgorOjEwMkYwMDAwNDM5OTAxMDAwMDAwMDBGMDk0QjAwMTAwRkZGRjAwNEE2NworOjEwMkYxMDAwQjQ4QjAxMDAyMDA0MDA0MDgxMzIwMTAwMEEwMDAwNDgwNworOjEwMkYyMDAwQjJDQjAxMDAxMDAwMDA0QUI0RjcwMTAwMjAwNDAwNDBCOQorOjEwMkYzMDAwODEzMjAxMDAzODA1MDA0MDgxMzIwMTAwMUUwMDAwNDg0NgorOjEwMkY0MDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwRTkwNTIyNTA5QgorOjEwMkY1MDAwQjU2RjAwMDBFQTA1MDA1MEI1QjMwMDAwMDAwMDAwNDA2NgorOjEwMkY2MDAwQjVCMzAxMDAyMDA0MDA0MDgxMzIwMTAwRTA5RjAwNDAyMQorOjEwMkY3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwMkY4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwMkY5MDAwODFCMjAwMDAwMDE2MDA0MDQ3OTkwMTAwMzAzMTAwNDAyNgorOjEwMkZBMDAwRjU5OTAxMDAzMjMzMDA0MEY1OTkwMTAwMzQzNTAwNDBCNQorOjEwMkZCMDAwRjU5OTAxMDAzNjM3MDA0MEY1OTkwMTAwMzgzOTAwNDA5NQorOjEwMkZDMDAwRjU5OTAxMDA0MTQyMDA0MEY1OTkwMTAwNDM0NDAwNDA1OQorOjEwMkZEMDAwRjU5OTAxMDA0NTQ2MDA0MEY1OTkwMTAwNDc0ODAwNDAzOQorOjEwMkZFMDAwRjU5OTAxMDA0OTRBMDA0MEY1OTkwMTAwMkMwMDAwNDA4NAorOjEwMkZGMDAwODM5ODAxMDAwMDAwMDA0MEY3QjEwMTAwRkMwNUEyNDFFOAorOjEwMzAwMDAwODM1MDAwMDA4MDE2MkUwNjgzQjAwMTAwMzYwMDAwRkJCRQorOjEwMzAxMDAwRjZBOTAxMDBGRjA1QTI0MTgzNTAwMDAwMjIwMDAwNDBGNAorOjEwMzAyMDAwODM5ODAxMDAwMDAwMDBGQkY2QjEwMTAwMDIwNkEyNDFGNgorOjEwMzAzMDAwODM1MDAwMDA2MjAwMDA0MDk1OTgwMTAwREM5RjAwNDAzMgorOjEwMzA0MDAwODEzMjAxMDAwMDE2MkQwNjgzQjAwMTAwODAxNjAwNDA3OQorOjEwMzA1MDAwNDU5OTAxMDA1QzAwMDBGQkY2QTkwMTAwMDgwNkEyNDFBOQorOjEwMzA2MDAwODM1MDAwMDAwMDAwMDA3MEY5QjEwMTAwMDAwMDAwNzEwMQorOjEwMzA3MDAwRjlCMTAxMDAwMDAwMDA3MkY5QjEwMTAwMDAwMDAwNzMxNQorOjEwMzA4MDAwRjlCMTAxMDAwMDAwMDA3NEY5QjEwMTAwNTQwMDAwNDBFMgorOjEwMzA5MDAwOTU5ODAxMDBEQzlGMDA0MDgxMzIwMTAwMDAwMDAwNzAyMworOjEwMzBBMDAwOTVCMDAxMDAxNDA2MjI3MEI1NkYwMDAwMDAwMDgwNDE0OQorOjEwMzBCMDAwOTdCMDAxMDAwMDAwODA0MDk3QjAwMTAwMDQwMDAwNDA3QworOjEwMzBDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMgorOjEwMzBEMDAwODFCMjAwMDA0NTY3MDBBNkUwQjIwMTAwMDEyMzAwNzA0NAorOjEwMzBFMDAwRTE5QTAxMDBDREVGMDBBNkUyQjIwMTAwODlBQjAwNzFDOAorOjEwMzBGMDAwRTM5QTAxMDBCQTk4MDBBNkU0QjIwMTAwRkVEQzAwNzI3NworOjEwMzEwMDAwRTU5QTAxMDAzMjEwMDBBNkU2QjIwMTAwNzY1NDAwNzM4MQorOjEwMzExMDAwRTc5QTAxMDBEMkMzMDBBNkU4QjIwMTAwRjBFMTAwNzQxMgorOjEwMzEyMDAwRTk5QTAxMDA4MDE2MDA0QTQ0QzkwMTAwMDAwMDAwMDcyNgorOjEwMzEzMDAwODFCMDAxMDAwMDAwMDA0QTgwRDAwMTAwMDAwMDAwNDA4MgorOjEwMzE0MDAwRjdCMTAxMDAyNTA2QTI0MTgxNTAwMDAwODAxNjAwNEExNworOjEwMzE1MDAwNDRDOTAxMDBGQzE2MkE0N0U3QjUwMTAwMDMwMDAwNEFGNAorOjEwMzE2MDAwRThFNTAxMDAwMDAwMDA0MDhEQjAwMTAwNTAwMzAwNDA4MAorOjEwMzE3MDAwQTM5OTAxMDA4MDE2M0Q0NjhERTAwMTAwMDAwMDAwNTAzQgorOjEwMzE4MDAwODlCMDAxMDAwMDAwMDBGQzQwQjAwMTAwMDAwMDAwNDFENworOjEwMzE5MDAwQTNDMTAxMDAyRTA2QTI0MTg5NTAwMDAwMDAwMDAwNzA2QQorOjEwMzFBMDAwRUJCMjAxMDAwMDAwMDA3MUVEQjIwMTAwMDAwMDAwNzJGRQorOjEwMzFCMDAwRUZCMjAxMDAwMDAwMDA3M0YxQjIwMTAwMDAwMDAwNzRFMgorOjEwMzFDMDAwRjNCMjAxMDAwMDAwMDA0MDgzQjAwMTAwMEYwMDAwNDE5NQorOjEwMzFEMDAwODA4ODAxMDA1MDAzMDA0MEEyQzkwMTAwNEIwNkEwNTBBNgorOjEwMzFFMDAwODM2QzAwMDAwRDAwMDA0MDk4QzgwMTAwMDAwMDAwNEZGMworOjEwMzFGMDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjA4NgorOjEwMzIwMDAwODZCMDAxMDAwODAwMDA0MDk4QzgwMTAwMDAwMDAwNEY4RgorOjEwMzIxMDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjA2NQorOjEwMzIyMDAwODZBNDAxMDAwMjAwMDA0MDk4QzgwMTAwMDAwMDAwNEY4MQorOjEwMzIzMDAwOTk4NDAxMDA1MDAzMDA0Q0EyQzkwMTAwMDAwMDAwMjA0NQorOjEwMzI0MDAwODZBNDAxMDA1MDAzMDA0MEEyQzkwMTAwMDAwMDAwNDMxMQorOjEwMzI1MDAwNDBBNDAxMDAwMTAwMDAyMDg4RTQwMTAwMDAwMDAwNUY5QworOjEwMzI2MDAwNDFGMDAxMDAwMDAwMDA0NDQwOTQwMTAwMDUwMDAwNzU5OQorOjEwMzI3MDAwODlFNDAxMDAxQjAwMDA3NTg1RjQwMTAwMDAwMDAwNDQ5MgorOjEwMzI4MDAwODQ5NDAxMDA1NTA2QTM1MzgzNkMwMDAwMDAwMDAwNzY2RgorOjEwMzI5MDAwODlCMDAxMDAwMDAwMDA3Nzg5ODQwMTAwMDAwMDAwNzZGOQorOjEwMzJBMDAwOEJCMDAxMDAwMDAwMDAyMDhCQTQwMTAwMDAwMDAwNzgxQQorOjEwMzJCMDAwOEI4NDAxMDA2NDA2MDA0NTg4OTQwMDAwMjcwMDAwNDFDQgorOjEwMzJDMDAwODBDRTAxMDA1QTA2QUE0MDgxMzIwMDAwMDAwMDAwNzYzQworOjEwMzJEMDAwODlCMDAxMDAwMDAwMDA3Nzg5QTQwMTAwNjQwNjAwNzgyRAorOjEwMzJFMDAwODlBNDAwMDAzQjAwMDA0MTgwQ0UwMTAwNTcwNkFBNDA5RgorOjEwMzJGMDAwODEzMjAwMDAwMDAwMDA3Njg5QjAwMTAwMDAwMDAwNzdGNAorOjEwMzMwMDAwODk4NDAxMDAwMDAwMDA3NjhCQjAwMTAwMDAwMDAwNzg4NQorOjEwMzMxMDAwOEI4NDAxMDAwMDAwMDA0NTg4OTQwMTAwMDAwMDAwNzdDNAorOjEwMzMyMDAwOEJCMDAxMDAwMDAwMDA3ODhCODQwMTAwNjQwNjAwNDUyQQorOjEwMzMzMDAwODg5NDAwMDAwMDAwMDA0NDg0QzAwMTAwMDAwMDAwNzk2RgorOjEwMzM0MDAwODVDMDAxMDAwMDAwMDAyMDg0QzAwMTAwNkIwNkEzNTM2QgorOjEwMzM1MDAwODM2QzAwMDA4MjVBMDBBNjg0QzAwMTAwOTk3OTAwNDI2MworOjEwMzM2MDAwODRDODAxMDA3ODA2MDA0MDgxQjIwMDAwMjcwMDAwNDFCNworOjEwMzM3MDAwODBDRTAxMDA3MDA2QUE0MDgxMzIwMDAwRDk2RTAwQTZGRQorOjEwMzM4MDAwODRDMDAxMDBBMUVCMDA0Mjg0QzgwMTAwNzgwNjAwNDAxRgorOjEwMzM5MDAwODFCMjAwMDAzQjAwMDA0MTgwQ0UwMTAwNzUwNkFBNDBDQQorOjEwMzNBMDAwODEzMjAwMDAxQjhGMDBBNjg0QzAwMTAwRENCQzAwNDJGQgorOjEwMzNCMDAwODRDODAxMDA3ODA2MDA0MDgxQjIwMDAwNjJDQTAwQTZGRAorOjEwMzNDMDAwODRDMDAxMDBENkMxMDA0Mjg0QzgwMTAwNzgwNjAwNDBENAorOjEwMzNEMDAwODFCMjAwMDAwMDAwMDA3OEYzQjIwMTAwMDAwMDAwNzcyNQorOjEwMzNFMDAwRjFCMjAxMDAxRTAwMDA3Njg5RTQwMTAwMDIwMDAwNzZCRgorOjEwMzNGMDAwRUZGNjAxMDAwMDAwMDA0NEVFOTYwMTAwMDAwMDAwNzVBOQorOjEwMzQwMDAwRURCMjAxMDAwMDAwMDA0MkVBQjIwMTAwMDAwMDAwNDFGQworOjEwMzQxMDAwODNDMDAxMDA0RjAwMDA0MTgwQ0UwMTAwMzcwNjJBNDBFMgorOjEwMzQyMDAwODEzMjAwMDAwMDAwMDA3NUUxQzIwMTAwMDAwMDAwNzY1QQorOjEwMzQzMDAwRTNDMjAxMDAwMDAwMDA3N0U1QzIwMTAwMDAwMDAwNzg0RgorOjEwMzQ0MDAwRTdDMjAxMDAwMDAwMDA3OUU5QzIwMTAwMkIwNjgxNDFCQQorOjEwMzQ1MDAwOEQ0MDAwMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDA2NworOjEwMzQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2RQorOjEwMzQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwMzQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwMzQ5MDAwODFCMjAwMDAwMDAwMDA1MEZEOTMwMTAwNDAxNjAwNDA4MgorOjEwMzRBMDAwNDU5OTAxMDBEQjlGMDA0MDQ5MzEwMTAwMDgwMDAwNDhCOAorOjEwMzRCMDAwQjJDQjAxMDAxNTA0MDA0MDgxMzIwMTAwQjkwNjIyNDA2MAorOjEwMzRDMDAwOEY2QzAwMDBEQTlGMDA0MDgxMzIwMTAwQjkwNkEyNDBGMworOjEwMzREMDAwOTc2QzAwMDA1RTE2MDA0MDQzOTkwMTAwN0MxNjIwRjZCMAorOjEwMzRFMDAwRTBCMTAxMDAwMDAwMDA0MDMxQjMwMTAwOUQwNjIyNEYxMQorOjEwMzRGMDAwOEY3QzAwMDAwMDAwMDA1MUZEOTMwMTAwOUYwNjIyNDBEOAorOjEwMzUwMDAwOEY3QzAwMDBBMzA2MDA1NEZEOTMwMDAwQTEwNjIyNDIxOAorOjEwMzUxMDAwOEY3QzAwMDAwMDAwMDA1MkZEOTMwMTAwQTMwNjIyNDFCMQorOjEwMzUyMDAwOEY3QzAwMDAwMDAwMDA1M0ZEOTMwMTAwQjcwNjIyNTE3QworOjEwMzUzMDAwRkQ3RjAwMDAzODA1MDA0MDgxMzIwMTAwMEMwMDAwNDg4QQorOjEwMzU0MDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwQjIwNkEyNDA1QgorOjEwMzU1MDAwQjU2RjAwMDAxRTAwMDA0OEIyQ0IwMTAwMTAwNDAwNDgwNworOjEwMzU2MDAwOTYzMDAxMDAwMDAwMDBEQTk3QzAwMTAwMDQwMDAwNEIxMworOjEwMzU3MDAwQjJDQjAxMDAxMDA0MDA0MDgxMzIwMTAwMEUwMDAwNDg2RgorOjEwMzU4MDAwQjJDQjAxMDAyMDA0MDA0MDgxMzIwMTAwMEMwMDAwNDg1MQorOjEwMzU5MDAwQjJDQjAxMDAwMDAwMDAzMEI1QjMwMTAwMjAwNDAwNDBCMAorOjEwMzVBMDAwODEzMjAxMDAwRTAwMDA0OEIyQ0IwMTAwMTAwNDAwNDAzRgorOjEwMzVCMDAwODEzMjAxMDBCNjA2MjI0MEI1NkYwMDAwQkEwNjAwNTQwMQorOjEwMzVDMDAwRkQ5MzAwMDAwMDAwMDA1MUZEODMwMTAwMUMwMDAwRkU3RgorOjEwMzVEMDAwN0ZEOTAxMDBCQTA2QTY0MDgxMzIwMDAwMDAwMDAwNTVFNAorOjEwMzVFMDAwRkQ5MzAxMDAwMDAwODA0MDgxQjIwMTAwMDQwMDAwNDAxMgorOjEwMzVGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERAorOjEwMzYwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDQworOjEwMzYxMDAwODFCMjAwMDBFNzlGMDA0MDgxMzIwMTAwQzQwNjIyNUNCNQorOjEwMzYyMDAwMUY3QzAwMDBFMzlGMDA4ODFDQjAwMDAwRTk5RjAwNUM0NQorOjEwMzYzMDAwMUYwMDAxMDAwMDAwMkUwNTQ4QjEwMTAwMDAwMDAwNDBGRAorOjEwMzY0MDAwRTFCMTAxMDAwNDAwMkQwMzQ4QjEwMTAwMDAwMDAwRjBDOQorOjEwMzY1MDAwM0NCMDAxMDAyODAwMDAxNDAyQzgwMTAwMDAwMDAwMDE3NQorOjEwMzY2MDAwMzRCMDAxMDAwMDAwMkQwNTMyQjAwMTAwMjIwMDAwMDUzOQorOjEwMzY3MDAwMEFDODAxMDAxMDAwMDAwMzQ4QzkwMTAwMDAwMDAwRjg1QQorOjEwMzY4MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDAwMDAwRjhDQworOjEwMzY5MDAwMEVCMDAxMDAwQzAwMDBBNDBDQzgwMTAwRUE5RjAwNDAxRAorOjEwMzZBMDAwODEzMjAxMDAwMDAwMDA0MDIzQjAwMTAwMEEwNzIyMDExRQorOjEwMzZCMDAwODAzMjAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJFQTQwMgorOjEwMzZDMDAwODBCMDAxMDAwMDAwMDAxMDQ4QzEwMTAwRDkwNkEzMDcyNgorOjEwMzZEMDAwMDI2QzAwMDBEQTA2NjgwMTFBQjAwMDAwMDAwMDY4MDdGQQorOjEwMzZFMDAwMUFCMDAxMDAwMDAwMDAwRDAyRDAwMTAwMDAwMDAwMDUyQQorOjEwMzZGMDAwRjBCMTAxMDAwMDAwMDAwQ0YwQjEwMTAwMDAwMDAwMDI3OAorOjEwMzcwMDAwRTBCMTAxMDAwMDAwMDAwRDBBQzAwMTAwRUMwNjIyNDBGQgorOjEwMzcxMDAwMDM2QzAwMDBFNjA2MjI0MjIzNkMwMDAwMDAwMDAwNDExQQorOjEwMzcyMDAwMjNDMDAxMDAwMDAwMDA0NzYxQjEwMTAwMjAwMDAwQTQ5NworOjEwMzczMDAwNjJERDAxMDAyMzA3Mjg0MDgxMzIwMDAwRTMwNjAwNDBEQgorOjEwMzc0MDAwODFCMjAwMDAwMDAwMDAxMDgwQzAwMTAwMDAwMDAwNDdBRQorOjEwMzc1MDAwNjFCMTAxMDAwMDAwMDA0MDYyQjEwMTAwRTgwNkE4NDAyQworOjEwMzc2MDAwMjMzMDAwMDBFMzlGMDA4ODFDQjAwMDAwMjMwNzAwNDBDNgorOjEwMzc3MDAwODFCMjAwMDAwMDAwMDAxMDgwQzAwMTAwMDAwMDAwNDc3RQorOjEwMzc4MDAwNjFCMTAxMDAwMDAwMDA0MDYyQjEwMTAwRUUwNkE4NDBGNgorOjEwMzc5MDAwMjMzMDAwMDBFMzlGMDA4ODFDQjAwMDAwMjIwMDAwMTlDNQorOjEwMzdBMDAwNDhDOTAxMDAwMDAwMkQxNDQ4QzEwMTAwMEYwMDAwRjJCQgorOjEwMzdCMDAwM0E4ODAxMDAwMDAwMDA0MjNCRTAwMTAwMEUwMDAwMTRDNgorOjEwMzdDMDAwMDJDODAxMDAwMDAwMDAxRDAyQzAwMTAwRkEwNjIzMUExMQorOjEwMzdEMDAwMDI1MDAwMDAwMDAwMDA0NjAzQzAwMTAwMjMwNzAwMDE2MgorOjEwMzdFMDAwMzRDMDAwMDAwQzAwMkQxRDQ4QzEwMTAwRjAwMDAwRjJBMworOjEwMzdGMDAwMzA4ODAxMDAwMDAwMDA0MjMxRjAwMTAwMDAwMDAwMTQ5OAorOjEwMzgwMDAwMDJCMDAxMDAwMDAwMDAxRDAyQzAwMTAwMDAwMDAwMTgwRAorOjEwMzgxMDAwMDJDMDAxMDAwMjA3MjIxQTAyNTAwMDAwMjMwNzAwMDEyMworOjEwMzgyMDAwMzRDMDAwMDAyMjAwMDAxOTQ4QzkwMTAwMDIwMDJEMTQxNAorOjEwMzgzMDAwNDhDMTAxMDAwMDAwMDBGNjE0QjAwMTAwMDAwMDAwMURBNgorOjEwMzg0MDAwMTREMDAxMDAwMDAwMDAxODE0RDAwMTAwMDAwMDAwMUU3OAorOjEwMzg1MDAwMjRCMDAxMDAxMjAwMDAxNzEwQzgwMTAwMjMwNzAwMUE0RAorOjEwMzg2MDAwMTBDMDAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDAwQTQ2MAorOjEwMzg3MDAwODZCMDAxMDAwMDAwMkUxMDQ4QzEwMTAwMEYwN0EzMTJGRQorOjEwMzg4MDAwMEU2QzAwMDAxMDA3NjAwNzFBQjAwMDAwMDAwMDYwMTIwNAorOjEwMzg5MDAwMUFCMDAxMDAwMDAwNjgwRDE2OTQwMTAwRkZGRjAwMEIzNAorOjEwMzhBMDAwMTZEODAxMDAwMDAwMDAwOEYwQjEwMTAwMDAwMDAwMEM3MworOjEwMzhCMDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwMTBDMgorOjEwMzhDMDAwODZDMDAxMDAwMDAwMDA0NjYxQjEwMTAwMjAwMDAwNDNGNQorOjEwMzhEMDAwNjJERDAxMDAxNzA3QTg1QzFGMTAwMDAwNDAwNzIyMERFMQorOjEwMzhFMDAwMTQ1MDAwMDA0MDA3MjIwRDI0NTAwMDAwMDAwMDAwMEQ3RAorOjEwMzhGMDAwMTBDMDAxMDAxRTA3MjI0MjIzNkMwMDAwMjMwNzAwNDE3NAorOjEwMzkwMDAwMjNDMDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTAyQgorOjEwMzkxMDAwNjJERDAxMDAxRjA3QTg1QzFGMDAwMDAwRTM5RjAwODgxNAorOjEwMzkyMDAwMUNCMDAwMDAwMDAwMDA0MDIzQjAwMTAwM0YwN0EyMERDMgorOjEwMzkzMDAwMEU1MDAwMDAyRTA3MjI0NjFGN0MwMDAwMDAwMDAwNDZBQgorOjEwMzk0MDAwMUY4MDAxMDAzMDgwMDAxMDQyQzkwMTAwMkMwNzIyRjJDNAorOjEwMzk1MDAwNjQwNjAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTA1MworOjEwMzk2MDAwNjJERDAxMDAyOTA3QTg0MDgxMzIwMDAwRTM5RjAwODg0MgorOjEwMzk3MDAwMUNCMDAwMDAyMDgwMDAwMzQ2OTkwMTAwMDAwMDAwNUY5OQorOjEwMzk4MDAwRTE5MTAxMDAwMDAwMkQwNjQ4QjEwMTAwMDAwMDAwRjg5RgorOjEwMzk5MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMzMwNzFGRjA2OAorOjEwMzlBMDAwMEUzMDAwMDBEMzA2MDA0QzBEQzAwMDAwMDAwMDJFNUY1QQorOjEwMzlCMDAwMEY4MDAxMDBEMzA2MjMwNzE0NkMwMDAwMzAwMDAwMTBCNAorOjEwMzlDMDAwNDhDOTAxMDAyNDAwMDA0MEYxOTkwMTAwMDAwMDAwMDNGMworOjEwMzlEMDAwRjBCMTAxMDAwMDAwMDAwMEYwQjEwMTAwMDAwMDAwMTY4RAorOjEwMzlFMDAwRjBCMTAxMDAyNDAwMDAwMDAwQzgwMTAwMDAwMDAwNDcwMQorOjEwMzlGMDAwNjFCMTAxMDAyMDAwMDBBNDYyREQwMTAwM0MwN0E4NDY3RgorOjEwM0EwMDAwMUYxMDAwMDBEMzA2MDAwMzBDQjAwMDAwRDMwNjAwMEQwOQorOjEwM0ExMDAwMThDMDAwMDA1RjA3QTI0NDFGN0MwMDAwMDAwMDAwMTlDRQorOjEwM0EyMDAwMEFCMDAxMDAyMjAwMDAwNTQ4QzkwMTAwMEEwMDJEMTQ1NworOjEwM0EzMDAwNDhDMTAxMDAwMjAwMjA0MEU1QjEwMTAwMDQwMDIwNDAxRgorOjEwM0E0MDAwRTVCMTAxMDAwRDAwMkQxRDQ4QzEwMTAwMDkwMDAwRjM4MgorOjEwM0E1MDAwMzg4ODAxMDAwRDAwMjA1MEU3QjEwMTAwMDQwMDJENDAxRQorOjEwM0E2MDAwM0ZCMDAxMDAwMDAwMDBGNDMyQjAwMTAwMDQwMDIwNDAyQgorOjEwM0E3MDAwRTFCMTAxMDAyMjAwMDAwNTQ4QzkwMTAwMDAwMDJEMTQzOQorOjEwM0E4MDAwNDhDMTAxMDAwMjAwMDAxRDk0RjQwMTAwMDAwMDAwNDA0NAorOjEwM0E5MDAwOTFCMDAxMDA1MjA3QTBGQzkwNDAwMDAwMDAwMDAwNDFERQorOjEwM0FBMDAwOTFDMDAxMDA1MDA3QTI0MTk1NTAwMDAwMDAwMDAwQTQwMQorOjEwM0FCMDAwOTZCMDAxMDAwNDAwMkUwNTQ4QjEwMTAwMDAwMDAwNDg0NgorOjEwM0FDMDAwRjBCMTAxMDAwMDAwMDA0QjQ4QjEwMTAwMDAwMDAwMThGNworOjEwM0FEMDAwNDhDMTAxMDAwMjAwMDAxODk0RjQwMTAwMDAwMDJEMThGNAorOjEwM0FFMDAwOTBCMDAxMDA1QzA3QTBGQzkwNDAwMDAwMDAwMDAwNDE4NQorOjEwM0FGMDAwOTFDMDAxMDA1QTA3QTI0MTk1NTAwMDAwMDAwMDAwNDgwMworOjEwM0IwMDAwRTBCMTAxMDAxMDAwMjA0MEU1QjEwMTAwMDQwMDJEMDVFNgorOjEwM0IxMDAwNDhCMTAxMDAwMDAwMDBGODgwQjAyRDAwMDAwMDAwRjA2NgorOjEwM0IyMDAwMTZCMDJEMDAyMjAwMDAwNTQ4QzkyRDAwMDAwMDAwMTQyOQorOjEwM0IzMDAwNDhDMTJEMDA2NDA3NDMzMDNEMDcyQzAwMDAwMDAwOUU2MworOjEwM0I0MDAwODVCMDJEMDAwMDAwMUI0MTNEQzMyRDAwMDQwMDIwNDIyNAorOjEwM0I1MDAwRUNCMTJEMDAwMDAwMDAxRTgyQjAwMTAwMDIwMDJFMURGRAorOjEwM0I2MDAwODJDMDAxMDAwMDAwNjYxODgyQzAwMTAwMDAwMDAwNDIwRgorOjEwM0I3MDAwODBDMDAxMDA2RTA3QTA0MTgwNDQwMDAwMDAwMDAwNDFBOQorOjEwM0I4MDAwODFDMDAxMDAxMDAwMDA0MDkyRjQwMTAwMEEwMDJFMzBCNAorOjEwM0I5MDAwODE4NDAxMDA3MjA3OTA0MDkyNDAwMDAwMDAwMDAwNDFDMworOjEwM0JBMDAwOTNDMDAxMDAwMDAwNjYyMDkzQTQwMTAwMDAwMDAwMURFNgorOjEwM0JCMDAwNDhDMTAxMDAwNDAwMjAxOUU4QjEwMTAwMDAwMDAwMUUwNgorOjEwM0JDMDAwMTZDMDAxMDA3ODA3QTAxOTE2NDQwMDAwMDAwMDAwNDE0QgorOjEwM0JEMDAwMTdDMDAxMDAwRDAwMkYxRTMyQzAwMTAwN0QwN0EyNDA1QQorOjEwM0JFMDAwMTU2QzAwMDA3QzA3QTAxQzE2NDAwMDAwMDAwMDAwNDE3RQorOjEwM0JGMDAwMTdDMDAxMDAwMDAwNjNGMzM4OTQwMTAwMTAwMDAwMDVCNQorOjEwM0MwMDAwNDhDOTAxMDAwNDAwMkUxRTk4QjAwMTAwMDAwMDYwMUE4RgorOjEwM0MxMDAwOThDMDAxMDAwQzAwMjA0MEUxQjEwMTAwOEIwNzIyNDY1MgorOjEwM0MyMDAwMUY3QzAwMDAwMDAwMDA0NjFGODAwMTAwMzA4MDAwMTA1MworOjEwM0MzMDAwNDJDOTAxMDA4OTA3MjJGMjY0MDYwMDAwMDAwMDAwNDcyMworOjEwM0M0MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwODYwN0E4NDA1QworOjEwM0M1MDAwODEzMjAwMDBFMzlGMDA4ODFDQjAwMDAwMjA4MDAwMDMzOAorOjEwM0M2MDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMzA4MDAwMTBFMgorOjEwM0M3MDAwNDRDOTAxMDAxMjAwMDAxQUYwQzkwMTAwMDAwMDAwMTczOQorOjEwM0M4MDAwRjBCMTAxMDAxMDAwMDAwNUUwQzkwMTAwMzAwMDAwMTA5MworOjEwM0M5MDAwODBDODAxMDAwMDAwMDA0NDYxQjEwMTAwMjAwMDAwNDAyNAorOjEwM0NBMDAwNjJERDAxMDA5MTA3QTg0MDgxMzIwMDAwOUIwNzIyNUM4MQorOjEwM0NCMDAwMUY3QzAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJEMTBBOAorOjEwM0NDMDAwNDhDMTAxMDA5QjA3MjJGMjY0MDYwMDAwMDAwMDAwNDY4NAorOjEwM0NEMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOTgwN0E4NDBCQQorOjEwM0NFMDAwODEzMjAwMDBFMzlGMDA4ODFDQjAwMDAwRUI5RjAwNUM2NQorOjEwM0NGMDAwMUYwMDAxMDAyMDAwMkYwNTQ4QjEwMTAwMDAwMDAwMEI0QgorOjEwM0QwMDAwRTRCMTAxMDAwMDAwMDA1MDE3RjAwMTAwQTEwNzkwRjI5QgorOjEwM0QxMDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDY2MjBBRQorOjEwM0QyMDAwMTdBNDAxMDAxMDAwMDAxNDJBQzgwMTAwMDAwMDAwMURBMworOjEwM0QzMDAwMkFDMDAxMDAwMDAwMDA1MDJCRTAwMTAwMDAwMDAwRjI0QQorOjEwM0Q0MDAwMkE5NDAxMDAzMDgwMDAxMDQyQzkwMTAwQUMwNzIyRjIyMQorOjEwM0Q1MDAwNjQwNjAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTA1MgorOjEwM0Q2MDAwNjJERDAxMDBBOTA3QTg0MDgxMzIwMDAwRTM5RjAwODhCRQorOjEwM0Q3MDAwMUNCMDAwMDAwMDgwMDAxNzEwREMwMTAwQzkwNzIyNDBDMQorOjEwM0Q4MDAwMTU2QzAwMDBCNDA3QTI0NDFGN0MwMDAwMDAwMDAwNDQzMgorOjEwM0Q5MDAwMUY5MDAxMDBCMzA3MjI5RjEzNkMwMDAwMDIwMDAwODhFRgorOjEwM0RBMDAwMUNDQzAxMDBFNDlGMDA0MDgxQjIwMDAwMDAwMDAwNDFGMworOjEwM0RCMDAwM0ZDMzAxMDBFNjlGMDA0MDgxMzIwMTAwQjcwN0EyNDFFNgorOjEwM0RDMDAwODc3QzAwMDAwMDAwMDAxRTNFQzAwMTAwQzkwNzIyNDBBMQorOjEwM0REMDAwMTU2QzAwMDBCQTA3MjAxRTE0NkMwMDAwMDAwMDAwMEFEOQorOjEwM0RFMDAwM0NCMDAxMDBFNTlGMDAxRTI0MzAwMTAwQkYwNzIyMDhGRgorOjEwM0RGMDAwMkUzMDAwMDAwMDAwMDA1MjExQzAwMTAwMDAwMDAwMUEyNworOjEwM0UwMDAwMTBDMDAxMDAyMzA3MDA0MDE3QjAwMDAwRTQ5RjAwODhBNQorOjEwM0UxMDAwMUNCMDAwMDBFNTlGMDA0MDgxMzIwMTAwQkMwN0EyMDhGMQorOjEwM0UyMDAwMkUzMDAwMDA4MDgwMDBBNjA0QjAwMTAwMDYwMDAwNDA5MworOjEwM0UzMDAwODc5ODAxMDAwMDgwMDAwMzQ0OTkwMTAwMDQwMDIyMDRENworOjEwM0U0MDAwRTAzMTAwMDBFODlGMDAxRjhDMzAwMTAwMDAwMDAwNDBCRQorOjEwM0U1MDAwMEZCMDAxMDBFMjlGMDA1QzFGOTAwMDAwMDA4MDAwMDM5MworOjEwM0U2MDAwNDQ5OTAxMDAwNDAwMjIwNEUwMzEwMDAwRTY5RjAwNDA3NAorOjEwM0U3MDAwODEzMjAxMDBDRTA3QTI0MTg3N0MwMDAwQ0YwNzAwMUVERgorOjEwM0U4MDAwM0VDMDAwMDAwMDAwMDAxRjhDQjAwMTAwMDAwMDAwNDA5OAorOjEwM0U5MDAwMDVCMDAxMDBFODlGMDA0MDBGMzAwMTAwRTI5RjAwNUM4OAorOjEwM0VBMDAwMUY5MDAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBOAorOjEwM0VCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxNAorOjEwM0VDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwNAorOjEwM0VEMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGNAorOjEwM0VFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBFNAorOjEwM0VGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBENAorOjEwM0YwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDMworOjEwM0YxMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCMworOjEwM0YyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBBMworOjEwM0YzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5MworOjEwM0Y0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4MworOjEwM0Y1MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3MworOjEwM0Y2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA2MworOjEwM0Y3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1MworOjEwM0Y4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0MworOjEwM0Y5MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzMworOjEwM0ZBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAyMworOjEwM0ZCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxMworOjEwM0ZDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwRjcwNzAwQkM4RAorOjEwM0ZEMDAwODBCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBGNgorOjEwM0ZFMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBFNQorOjEwM0ZGMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBENQorOjEwNDAwMDAwODFCMjAwMDAwMzgwMDA0MDgxQjIwMDAwMDM4MDAwNDBDNAorOjEwNDAxMDAwODFCMjAwMDAzMTgwMDA0MDgxQjIwMDAwMzQ4MDAwNDA1NQorOjEwNDAyMDAwODFCMjAwMDAzNTgwMDA0MDgxQjIwMDAwMDQwMDAwNDBGMQorOjEwNDAzMDAwODFCMjAwMDAxQjgwODE4MDgwMzIwMDAwRTc4N0EyNDBBRgorOjEwNDA0MDAwOTE2RjAwMDAwMDAwMDA0QzkwQjMwMTAwNUM5NTJFQTIxRgorOjEwNDA1MDAwODBCMDAxMDBGRjAwMDA4MEY0ODkwMTAwOTA5NTJBQzgxQgorOjEwNDA2MDAwRTVCMTAxMDAwMDAwMDBBMUYwQjEwMTAwMDAwMDAwNDAzNgorOjEwNDA3MDAwRjBCMTAxMDAwMDAwMDBBNEYwQjEwMTAwMDAwMDAwRDA4OAorOjEwNDA4MDAwRjBCMTAxMDAwMDAwMDBEMUYwQjEwMTAwMDAwMDAwRDI0OQorOjEwNDA5MDAwRjBCMTAxMDAwMDAwMDA0Q0YwQjEwMTAwMDAwMDAwRDRCQworOjEwNDBBMDAwRjBCMTAxMDAwMDAwMDBEM0YwQjEwMTAwMDAwMDAwRUUwQgorOjEwNDBCMDAwRjBCMTAxMDAwMDAwMDA0RUYwQjEwMTAwMDAwMDAwNDAyRQorOjEwNDBDMDAwNDRCMTAxMDAxODgwMTE4MTk4MzAwMDAwMDAwMDUxNDA3NworOjEwNDBEMDAwODFCMjAxMDAxQTgwMTE4Mjk4MzAwMDAwMDAwMDUyNDAyNQorOjEwNDBFMDAwODFCMjAxMDBFNzg3MDA0OEZEOTMwMDAwQjYwMzAwNDA1RAorOjEwNDBGMDAwQTE5OTAxMDAyMzgwQTI0MkZEN0YwMDAwMjA4MDAwODA2MgorOjEwNDEwMDAwODAzMjAwMDAyMjgwMTE4MTgyMzAwMDAwMjI4MDUxNDBFNAorOjEwNDExMDAwODFCMjAwMDAyMjgwMTE4MjgyMzAwMDAwMjI4MDUyNDA1MQorOjEwNDEyMDAwODFCMjAwMDAyQzgwMDA0OEZEOTMwMDAwMjc4MDAwODBCMQorOjEwNDEzMDAwODAzMjAwMDAyNjgwQTI1MzA3N0MwMDAwMDAwMDUxNTMwQgorOjEwNDE0MDAwMDc5MDAxMDAyQTgwMDA1MjA3OTAwMDAwMjk4MEEyNTJBNworOjEwNDE1MDAwMDc3QzAwMDAwMDAwNTI1MjA3OTAwMTAwMDAwMDAwNTM0RAorOjEwNDE2MDAwMDc5MDAxMDAwMDAwMDA0OEZEOTMwMTAwMDAwMDAwNDY5OAorOjEwNDE3MDAwRjM5MzAxMDA1Qzk1MkVBMjUyQjMwMTAwRkYwMDAwODA3MgorOjEwNDE4MDAwRjQ4OTAxMDAwMDAwMDA0Q0U0QjEwMTAwMDAwMDAwQTkyNgorOjEwNDE5MDAwNDVCMTAxMDAzMDgwMDA0QzgwQjIwMDAwMDAwMDQ1NDA3NQorOjEwNDFBMDAwODFCMjAxMDAwMDAwNTU0MDgxQjIwMTAwQzY4MjA1NDA4NQorOjEwNDFCMDAwNDlCMTAwMDBDNjgyMDU0MDQ5QjEwMDAwMDAwMDA1NDAzOQorOjEwNDFDMDAwNDlCMTAxMDA0QzAxMDA0MDgxMzIwMTAwMDAwMDAwNEI2OAorOjEwNDFEMDAwREVCMjAxMDAwMDAwMDA0MEZEOTMwMTAwMDAwMDAwNDgzNQorOjEwNDFFMDAwRkQ4MzAxMDAwMjAwMDA0MDlCOUIwMTAwMDAwMDAwQTUzMAorOjEwNDFGMDAwOUNCMzAxMDA0ODAzMDA0MDgxMzIwMTAwNTg5NTIwNDRERgorOjEwNDIwMDAwRTBCMTAxMDAwNDk0MDA0MDQzOTkwMTAwMDAwMDAwRjI3NQorOjEwNDIxMDAwMjRCMTAxMDAwMDBDMDBFRTk2ODgwMTAwMDAwMDAwNEE2NQorOjEwNDIyMDAwOTdGMDAxMDA0NDgwQTI0Mzk3NkMwMDAwMDAwMDAwNDIxOAorOjEwNDIzMDAwRkQ5MzAxMDAwMEMwMDBBNjM2QjEwMTAwRDAxNDAwNDA3QgorOjEwNDI0MDAwNDc5OTAxMDAwNTAwMDA0MEY1OTkwMTAwMDAzODAwNDA0MQorOjEwNDI1MDAwRjU5OTAxMDAwMDA2MDA0MEY1OTkwMTAwMDMwMDAwNDBCNworOjEwNDI2MDAwRjU5OTAxMDAwNTEwMDA0MEY1OTkwMTAwMDIwOTAwNDA5MAorOjEwNDI3MDAwRjU5OTAxMDAwNDAwMDA0MEY1OTkwMTAwNjAwMzAwNDAzOQorOjEwNDI4MDAwODEzMjAxMDA4ODAzMDA0MDgxMzIwMTAwQTAwMzAwNDAxOAorOjEwNDI5MDAwODEzMjAxMDBCOTgyMDA0MDgxMzIwMTAwQjE4MjAwNDBDOAorOjEwNDJBMDAwODEzMjAxMDA2MDk1MjA0MEUxQjEwMTAwNzA5NTIwNDAwRAorOjEwNDJCMDAwRTFCMTAxMDAwMDAwMDA0OUREOTEwMTAwMDAwMDAwNDA3MworOjEwNDJDMDAwOTFCMzAxMDAwMDAwMDA0MDdCQjMwMTAwQTA5ODAwNDBDMgorOjEwNDJEMDAwODEzMjAxMDAwMDAwMDA0MDg1QjMwMTAwNUM5NTIwNDA2MAorOjEwNDJFMDAwRTFCMTAxMDAzQzgyMDA0MDgxMzIwMTAwOTAwNjAwNDBCMworOjEwNDJGMDAwODEzMjAxMDAwMDAwMDA1RjJGODEwMTAwQTI4MTAwNDA5NworOjEwNDMwMDAwODEzMjAxMDBBNTk4MDA0MDgxMzIwMTAwMDAwMDQ1NDA0MworOjEwNDMxMDAwODFCMjAxMDAwMDAwNTU0MDgxQjIwMTAwMDE4MzAwNDBEQworOjEwNDMyMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA5RgorOjEwNDMzMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA4RgorOjEwNDM0MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA3RgorOjEwNDM1MDAwODFCMjAwMDAyODAwMDA0MDQ3OTkwMTAwQzY4MjAwNDE1OAorOjEwNDM2MDAwRTFDMTAwMDA3ODE4MDA0MDQ5OTkwMTAwMTkwNTIyNTQ2NAorOjEwNDM3MDAwODE3QzAwMDA2QzgwNDI0MDgxMzIwMDAwMDA4MjAwQjRFOQorOjEwNDM4MDAwNjlERjAxMDAwMDAwMUE0NDkzOTMwMTAwMjgwMDAwNDBGNworOjEwNDM5MDAwNDc5OTAxMDAxODA1MDA0MDgxQjIwMDAwMDQwMDAwNDA2OAorOjEwNDNBMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAxRgorOjEwNDNCMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAwRgorOjEwNDNDMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBGRgorOjEwNDNEMDAwODFCMjAwMDA1NTgyMDA0MDgxMzIwMTAwN0Q4MDIyNDA4MAorOjEwNDNFMDAwOTc2QzAwMDA3QTgwNDI0MDgxMzIwMDAwMDAwMDAwNEY0QworOjEwNDNGMDAwNjk5MzAxMDA0MzgxMDA1ODY5OTMwMDAwNTQxNjAwNDBGRQorOjEwNDQwMDAwNDc5OTAxMDAwMDAwMDBGRUY0QjEwMTAwODAwNTAwNDA2MgorOjEwNDQxMDAwODFCMjAwMDA4MDgwNDI0MDgxMzIwMDAwMDAwMDAwNEVFNgorOjEwNDQyMDAwNjk5MzAxMDA0MzgxMDA1ODY5OTMwMDAwNDAxNjAwNDBFMQorOjEwNDQzMDAwNDU5OTAxMDA0MDA1MDA0MDQ5MzEwMTAwRjYxNTAwNDA1MgorOjEwNDQ0MDAwNDM5OTAxMDA1QzE2MDA0MDQ1OTkwMTAwMDAwMDZFRkE5NgorOjEwNDQ1MDAwOEVCMDAxMDBDMTA1MDA0MDgxQjIwMDAwMDQwMDAwNDBBMAorOjEwNDQ2MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA1RQorOjEwNDQ3MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDA0RQorOjEwNDQ4MDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDAzRQorOjEwNDQ5MDAwODFCMjAwMDA5NjgwMDA0MDgxQjIwMDAwNTU4MjAwNDA0OQorOjEwNDRBMDAwODEzMjAxMDA5NjgwMjI0MDk3NkMwMDAwOTM4MDQyNDA0OAorOjEwNDRCMDAwODEzMjAwMDAwMDAwMDA0RjY5OTMwMTAwNDM4MTAwNThFMQorOjEwNDRDMDAwNjk5MzAwMDAzODA1MDA0MDgxMzIwMTAwMUUwMDAwNDg1OQorOjEwNDREMDAwQjJDQjAxMDBEMDA1MDA0MDgxQjIwMDAwMDQwMDAwNDBEMgorOjEwNDRFMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBERQorOjEwNDRGMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBDRQorOjEwNDUwMDAwODFCMjAwMDAwNDAwMDA0MDgxQjIwMDAwMDQwMDAwNDBCRAorOjEwNDUxMDAwODFCMjAwMDA4MzAyMDA0MDgxQjIwMDAwQjgwMjAwNDA3NgorOjEwNDUyMDAwODFCMjAwMDBENDlGMDA0MDgxQjIwMDAwRDU5RjAwNDBCRQorOjEwNDUzMDAwODFCMjAwMDBENjlGMDA0MDgxQjIwMDAwRDc5RjAwNDBBQQorOjEwNDU0MDAwODFCMjAwMDA3MjAxMDA0MTgxQzAwMDAwNTUwMTUxNDk1MworOjEwNDU1MDAwRkQ5MzAwMDA1NTAxNTI0QUZEOTMwMDAwNTUwMTU1NDk1NQorOjEwNDU2MDAwRkQ4MzAwMDA1NTAxNTY0QUZEODMwMDAwNTAwMTkxODFGMgorOjEwNDU3MDAwODAzMDAwMDA1NTAxNDU0MDgxQjIwMDAwNTAwMTkxODIxOQorOjEwNDU4MDAwODAzMDAwMDA1NTAxNDY0MDgxQjIwMDAwMDAwMDAwNDAyQworOjEwNDU5MDAwODlCMDAxMDAwMDAwMDBGODgwQjAwMTAwMDAwMDAwRjBDOAorOjEwNDVBMDAwMTZCMDAxMDAyMjAwMDAwNTQ4QzkwMTAwMDAwMDAwMTRGNworOjEwNDVCMDAwNDhDMTAxMDBCNDgwNDMzMDNEMDcwMDAwMDAwMDAwOUU2OAorOjEwNDVDMDAwODVCMDAxMDAwMDAwMUI0MTNEQzMwMTAwMDQwMDIwNDJGMgorOjEwNDVEMDAwRUNCMTAxMDAwMDAwQTI0MDkxNkYwMTAwMDAwMDAwNDAxQQorOjEwNDVFMDAwNDlCMTAxMDBBRTAzMDBDQkEzQzkwMTAwMDAwMDAwMjBDNworOjEwNDVGMDAwNDZCMTAxMDBDNDgwQTI0MEUxNkQwMDAwMDAwMDAwRDI3RAorOjEwNDYwMDAwRjFCMTAxMDAwMDAwMDBEM0YxQjEwMTAwMDAwMDAwNDI0RgorOjEwNDYxMDAwRjBCMTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwMjA2MAorOjEwNDYyMDAwNjJERDAxMDAwMDAwQThEMEUxQjEwMDAwQzE4MDAwNDBCRgorOjEwNDYzMDAwODFCMjAwMDAwMDAwMDBBODk4QjAwMTAwMDQ4MDAwNDA5MgorOjEwNDY0MDAwOEJCMzAwMDBCMTAzMDA0MEExOTkwMTAwQzk4MEEyNDJEMAorOjEwNDY1MDAwOTc2RjAwMDAwMDAwMDA0NUExQzEwMTAwMDAwMDAwMDBBQworOjEwNDY2MDAwODBCMDAxMDAwMDAwQTIwNDgwOTQwMDAwODAxNTNGNDI0OQorOjEwNDY3MDAwOTdFMzAxMDAwMDAwMDA0MDQ5QjEwMTAwMDAwMDYwMDMyMQorOjEwNDY4MDAwMDI5NDAxMDAwMDAwMDA0MDA3QjAwMTAwMDQwMDAwQ0JDQworOjEwNDY5MDAwOTlDQjAxMDAwMDAwMDBDQ0YzODMwMTAwRDM4MEEyNDIzQgorOjEwNDZBMDAwOTc2RjAwMDAwMDAwMDBDQkYzOTMwMTAwQUUwMzAwQ0IzNgorOjEwNDZCMDAwQTNDOTAxMDAwMDAwMDAyMDQ0QjEwMTAwMDAwMDAwNDQzMworOjEwNDZDMDAwRjFCMTAxMDAwMDAwMDAwMEYwQjEwMTAwMDAwMDAwMDRBMQorOjEwNDZEMDAwRjBCMTAxMDAwMDAwMDBBMUUwQjEwMTAwMDUwMDAwNDBDMAorOjEwNDZFMDAwNjE5OTAxMDAyMDAwMDAyMDYyREQwMTAwREE4MEE4NDAwRAorOjEwNDZGMDAwODEzMjAwMDBGOTAyMDAyMDQyMzEwMTAwMDAwMEEyNDE5NQorOjEwNDcwMDAwMDU2QzAxMDAwMDAwODBDQkRCOTEwMTAwMDAwMDE5NDEyNQorOjEwNDcxMDAwOEJCMzAxMDA2MDAwMDA0MDYxOTkwMTAwRTA4MEE4QjEwNgorOjEwNDcyMDAwOEMzMzAwMDA2MDAwMDA0MDYxOTkwMTAwRTI4MEE4QjE3NAorOjEwNDczMDAwOTQzMzAwMDBFODgwMTRDNjgxMzIwMDAwMTgwMDAwQzZERgorOjEwNDc0MDAwODNGNDAxMDAyMjgzMjI0RjgzMDQwMDAwQzQ4MDAwNDBEMAorOjEwNDc1MDAwODFCMjAwMDBGRjAxMDBDNjgxODgwMTAwMDAwMDAwQzY5MAorOjEwNDc2MDAwOTdBMzAxMDBDNDgwMUY1Qzk3NTMwMDAwNkQ4MjFFQzY5MgorOjEwNDc3MDAwODEzMjAwMDBGMjgwMjI0OEZEN0YwMDAwRjI4MDIyNTg0MgorOjEwNDc4MDAwODE2QzAwMDBGMjgwMjI0ODgxNkMwMDAwQzAwMDAwNDA3MworOjEwNDc5MDAwODRDQzAxMDBGMjgwOUY0MjgwMzIwMDAwMjI4MzAwNDBERQorOjEwNDdBMDAwODFCMjAwMDBDNDgwQTJDNjhGMDYwMDAwQzQ4MDFFQzY2RAorOjEwNDdCMDAwODEzMjAwMDAwMDAwMkY0MzgxRjAwMTAwRjY4MDAwNDBBQworOjEwNDdDMDAwMTBDOTAwMDA0NDgxMDA0MDgxQjIwMDAwN0U4MTAwNDA5OQorOjEwNDdEMDAwODFCMjAwMDAzOTgyMDBDQTYzQjMwMDAwNzU4MTAwNDBENQorOjEwNDdFMDAwODFCMjAwMDA1NTgxMDA0RDgzQjAwMDAwNjA4MTAwNEUxMQorOjEwNDdGMDAwNjFCMTAwMDA0QzgxMDA0MDg1QjAwMDAwNTU4MTAwNEM0MworOjEwNDgwMDAwODNCMDAwMDAyRTgxMDA0MDg1QjAwMDAwRjg4MTAwNDA5OAorOjEwNDgxMDAwNDlCMTAwMDA4NjgxMDA0MEMxQjEwMDAwRjQ4MTAwNDAzMAorOjEwNDgyMDAwODFCMjAwMDA0QzgxMDA0MDg1QjAwMDAwRjAwMzAwNDBFMAorOjEwNDgzMDAwNDlCMTAwMDAyMjgzMDBDQTlCQjMwMDAwOTA4MTAwNDA3MAorOjEwNDg0MDAwQzFCMTAwMDA5NDgxMDA0MEMxQjEwMDAwOUI4MTAwNDBEMworOjEwNDg1MDAwQzFCMTAwMDA5QzgxMDA0MEMxQjEwMDAwOUQ4MTAwNDBCOQorOjEwNDg2MDAwQzFCMTAwMDA5RTgxMDA0MEMxQjEwMDAwOUY4MTAwNDBBNQorOjEwNDg3MDAwODFCMDAwMDA5RjgxMDA0MTgxQjAwMDAwMkQ4MjAwNDA4NgorOjEwNDg4MDAwODFCMjAwMDBBRTgyMDBCQkFCQjMwMDAwM0E4MjAwQ0EyNgorOjEwNDg5MDAwQ0ZCMzAwMDBDODAzMDA0MDQ5QjEwMDAwRTgwMzAwNDA2NgorOjEwNDhBMDAwODFCMjAwMDBDNDgwMDA0MDgxQjIwMDAwMjI4MzAwNDAzOQorOjEwNDhCMDAwODFCMjAwMDBFMDAzMDA0MDgxQjIwMDAwMjI4MzAwQ0EwMAorOjEwNDhDMDAwNzdCMzAwMDA1NjgxMDA0RDgzQjAwMDAwNUU4MTAwNEUzQQorOjEwNDhEMDAwNjFCMTAwMDA0QzgxMDBCQjg1QjAwMDAwNTY4MTAwNENFNgorOjEwNDhFMDAwODNCMDAwMDA0QzgxMDBCQjg1QjAwMDAwMkU4MTAwQkI2RQorOjEwNDhGMDAwODVCMDAwMDAyMDgxMDA0MDgxQjIwMDAwMjI4MzAwQ0EwMAorOjEwNDkwMDAwNERCMzAwMDA3MDA1MDA0MDQ5QjEwMDAwQTAwNTAwNDAxMworOjEwNDkxMDAwNDlCMTAwMDAyNjgxMjI0MjhGNkYwMDAwMjg4MTIyNDE4OAorOjEwNDkyMDAwOEY2RjAwMDAyQTgxMUVDQTgxMzIwMDAwMkM4MTFGQ0FBRAorOjEwNDkzMDAwODEzMjAwMDAwMDAwMDBDQUM5QjEwMTAwMjI4MzAwNDI5OAorOjEwNDk0MDAwOEZCMzAwMDAwMDAwMDBDQUNEQjEwMTAwMjI4MzAwNDFGNgorOjEwNDk1MDAwOEZCMzAwMDAwMDAwMDBDQUNGQjEwMTAwMjI4MzAwNDBFNQorOjEwNDk2MDAwOEZCMzAwMDAwMDgxMDBBNkM2QjEwMTAwMjI4MzAwNDA4MQorOjEwNDk3MDAwODFCMjAwMDAwMDgwMDBBNkM2QjEwMTAwMjI4MzAwNDA4MQorOjEwNDk4MDAwOEZCMzAwMDA3ODE4MDA0MDQ5OTkwMTAwMTAwMDJGOUM1NworOjEwNDk5MDAwODlCMDAxMDA0NjgxMDA0MDM5MzMwMTAwMTgwMDJGOUI4NworOjEwNDlBMDAwODlCMDAxMDA0NjgxMDA0MDM3MzMwMTAwMDAwMDJGOUE5MgorOjEwNDlCMDAwODlCMDAxMDA0NjgxMDA0MDM1MzMwMTAwMDgwMDJGOTk3RAorOjEwNDlDMDAwODlCMDAxMDA0NjgxMDA0MDMzMzMwMTAwMDA4MDAwQUUxMQorOjEwNDlEMDAwNDdDOTAxMDBDNDgwQTI0MEUxNkQwMDAwODAwMDAwNDA5MgorOjEwNDlFMDAwRjE5OTAxMDAwMDAwMDBDQUYxQjEwMTAwMDAwMDAwNDI4RAorOjEwNDlGMDAwRjBCMTAxMDA0MDE4MDA0MEUxOTkwMTAwMDAwMDAwNDVCRAorOjEwNEEwMDAwNjFCMTAxMDAyMDAwMDBBRTYzREQwMTAwNDE4MTI4NDA1QQorOjEwNEExMDAwODEzMjAwMDAzRTgxMDA0MDgxQjIwMDAwNDE4MTQyNDA2RAorOjEwNEEyMDAwODEzMjAwMDAwMDAwMDA1QzY5OTMwMTAwMjI4MzFBNDQ3NworOjEwNEEzMDAwOTM5MzAwMDA0NDgxNDI0MDgxMzIwMDAwNDM4MTAwNTgzQQorOjEwNEE0MDAwNjk5MzAwMDAwMDAwMDA0NEYwRDEwMTAwMDAwMEE0NDA4MAorOjEwNEE1MDAwODFCMjAwMDA0QjgxQTI0MEUxNkQwMDAwMDAwMDAwNDRFMworOjEwNEE2MDAwNDVEMTAxMDAwMDAwODA0MEUxQjEwMTAwMDAwMDgwNDExQgorOjEwNEE3MDAwRTFEMTAxMDA0QzgxMzc1QzYxMzEwMDAwMDAwMDAwNDI0RgorOjEwNEE4MDAwNjJCMTAxMDA1MjgxMjg0MDgxMzIwMDAwNEQ4MTIyNUNEOAorOjEwNEE5MDAwNzc3RDAwMDBDNDgwMTc0MDgxQjIwMDAwNEQ4MTAwNDA0NgorOjEwNEFBMDAwODFCMjAwMDAwMDAwMDBDQTYzQjEwMTAwNTI4MUE4NDAzOQorOjEwNEFCMDAwODEzMjAwMDAyMjgzMTc0MDgxQjIwMDAwNTc4MTAwNDBGQworOjEwNEFDMDAwODFCMDAwMDA1NzgxMDBCQjgxQjAwMDAwMDAwMDAwNDFCMAorOjEwNEFEMDAwNjBCMTAxMDBDNDgwQTI0MTc2N0QwMDAwMDAwMDAwNDA2QQorOjEwNEFFMDAwNjJCMTAxMDA1OTgxQTg0MDgxMzIwMDAwMDAwMDAwQ0E3MworOjEwNEFGMDAwNjNCMTAxMDAyMjgzMjg0MDgxMzIwMDAwNUI4MTAwNDBDNQorOjEwNEIwMDAwODFCMjAwMDA1MDk1MDA0MDQ3OTkwMTAwNjE4MTAwQkJDRgorOjEwNEIxMDAwODdCMDAwMDA1MDk1MkY0MDg3QjAwMTAwNjU4MTIyNDA4QQorOjEwNEIyMDAwOTU3RjAwMDBDNDgwQTI0MEUxNkQwMDAwQzQ4MDIyNDA1NworOjEwNEIzMDAwOTU2RjAwMDAyMjgzNjA0MDk1ODMwMDAwMDIwMDJERjBGNQorOjEwNEI0MDAwODRCMDAxMDBDNDgwMjI0MDg1NkMwMDAwQzQ4MEEyNDA3MworOjEwNEI1MDAwODU3QzAwMDBDNDgwQTI0RTc3N0QwMDAwNjk4MTM2NDBDQworOjEwNEI2MDAwODEzMjAwMDAwMDAwMDA0MjYyQjEwMTAwNkE4MUE4NDA2OQorOjEwNEI3MDAwODEzMjAwMDAwMDAwMDA0MzYyQjEwMTAwNkM4MUE4NDA1NgorOjEwNEI4MDAwODEzMjAwMDAwMDAwMDBDQTYzQjEwMTAwNkU4MUE4NDBCQworOjEwNEI5MDAwODEzMjAwMDAwMDAwMTY0MDgxQjIwMTAwNzQ4MTIyNDE4MAorOjEwNEJBMDAwNDM1MTAwMDAwMDA4MDBDQTk1Q0IwMTAwNjg4MTAwNDExNAorOjEwNEJCMDAwODVDMDAwMDAyMjgzMDA0MEUxQjEwMDAwNzc4MUEyNDI1RAorOjEwNEJDMDAwNjc2RjAwMDAwMDAwMDA0MTY3QjMwMTAwNzc4MTQyNDAzOQorOjEwNEJEMDAwODEzMjAwMDAwMDAwMDA0MDY1QjMwMTAwMDAwMDAwNDA4OQorOjEwNEJFMDAwOTM4MzAxMDAwMDAwMUFDQTY5OTcwMTAwMjI4MzI2NDBCRQorOjEwNEJGMDAwODEzMjAwMDA3QzgxNDI0MDgxMzIwMDAwMjI4MzFBNDRDRAorOjEwNEMwMDAwOTM5MzAwMDBDNDgwMjA0Mzk1NkYwMDAwMjI4MzgwQ0FFNAorOjEwNEMxMDAwNjczMzAwMDAyMjgzMjI0MDY1NkYwMDAwQzQ4MEEyNDhGMQorOjEwNEMyMDAwREI3RDAwMDAyMjgzMDA2RkRCOTEwMDAwODUwMDAwNDBFNworOjEwNEMzMDAwODEzMjAxMDAzNTgwMjI0MDgwMzIwMDAwMjI4MzAwNDAxMgorOjEwNEM0MDAwODFCMjAwMDAwMDAwMDA1ODk1OTMwMTAwMDAwMDAwNUY1MQorOjEwNEM1MDAwOTU5MzAxMDA4QzgxQTI0NDIxNkYwMDAwMDAwMDAwNUY0OQorOjEwNEM2MDAwOTU4MzAxMDAwMDAwMDA1RTk1OTMwMTAwMDAwMDAwNTc0RAorOjEwNEM3MDAwOTU5MzAxMDAwMDAwMDBDQUMzQjEwMTAwOEY4MTIyNUIzRgorOjEwNEM4MDAwOTU3RjAwMDAwMDAwMDA0QkZEOTMwMTAwMjI4MzAwNDA0RgorOjEwNEM5MDAwODFCMjAwMDAxQkZEMDBDQTk1OUIwMTAwMEQwMTAwQ0FGNgorOjEwNENBMDAwQzUzMTAxMDAwMDAwMDA1Rjk1ODMwMTAwMjI4MzAwQ0EyNgorOjEwNENCMDAwQzVCMTAwMDBERjZGMDBDQTk1OUIwMTAwMDAwMDAwNTVFMAorOjEwNENDMDAwOTU5MzAxMDAwMDAwMDBDQUM3QjEwMTAwMjI4MzIyNUY1MgorOjEwNENEMDAwOTU3RjAwMDAwRDAxMDA0MDgxMzIwMTAwMDAwMDAwNUY1RgorOjEwNENFMDAwOTU4MzAxMDAyMjgzMDBDQUM3QjEwMDAwMjI4MzAwQ0E1NQorOjEwNENGMDAwQzlCMTAwMDAyMjgzMDBDQUNCQjEwMDAwMjI4MzAwQ0FFMAorOjEwNEQwMDAwQ0RCMTAwMDAyMjgzMDBDQUNGQjEwMDAwMDAwMDJFNDJDNgorOjEwNEQxMDAwODFFMDAxMDA5ODE0MDA0MDQ4QzkwMTAwMjI4MzAwQ0FDNAorOjEwNEQyMDAwRTFCMTAwMDAwMDAwMDA0MDA5QjEwMTAwMjAwMDAwQTYzMAorOjEwNEQzMDAwODJCMDAxMDBBNDgxQTI1RTBCN0QwMDAwMDA4MDAwNDFEMgorOjEwNEQ0MDAwMDg5OTAxMDBBNjgxQTI1RTBCN0QwMDAwMjA4MDAwQTZDQworOjEwNEQ1MDAwMDhCMTAxMDBBODgxOUY4NTgyMzAwMDAwMDAwMDAwMzA2QQorOjEwNEQ2MDAwODM4NDAxMDBERDgxMjIzMDgzNkMwMDAwQTc4MUEyNEY4MworOjEwNEQ3MDAwMEI3RDAwMDAwMDAwMDA0MTIxQjMwMTAwMDI4MDAwQTY2RAorOjEwNEQ4MDAwODJCMDAxMDAyODgyMDA0MDgxMzIwMTAwMTAwMDAwNDEwMQorOjEwNEQ5MDAwODRFNDAxMDAwMzgwMDBBNjgyQjAwMTAwMjg4MjAwNDA2NAorOjEwNERBMDAwODEzMjAxMDBGMEZGMDA0MTg2ODgwMTAwMDAwMDAwNDNDRAorOjEwNERCMDAwODQ5NDAxMDAwRjAwMDBBNjg2QjAwMTAwMTBDNDAwNDNENworOjEwNERDMDAwODY5ODAxMDBCRDgxQTI0Mzg0NkMwMDAwMDAwMDAwNDM2RQorOjEwNEREMDAwMjFCMzAxMDAyMDAwMDBBNjgyQjAwMTAwMUMwMDAwNDFBOAorOjEwNERFMDAwODJEQzAxMDBCQTgxQTI1RTBCN0QwMDAwMDQwMDAwNDE1QworOjEwNERGMDAwMDg5OTAxMDBDRjgxMDA0MDgxQjIwMDAwNDEwMTAwQTY2NgorOjEwNEUwMDAwODZCMDAxMDA1MDBDMDA0Mzg2OTgwMTAwQzI4MUEyNDM4NQorOjEwNEUxMDAwODQ2QzAwMDAwMDAwMDA0MTIxQjMwMTAwQ0Y4MTAwNDBGQworOjEwNEUyMDAwODFCMjAwMDA0MTAxMDBBNjg2QjAwMTAwNjAwQzAwNDM4MQorOjEwNEUzMDAwODY5ODAxMDBDRjgxQTI0Mzg0NkMwMDAwMDAwMDAwNDJFQworOjEwNEU0MDAwMjFCMzAxMDAxODgwMDBBNjgyQjAwMTAwMjg4MjAwNDAzMgorOjEwNEU1MDAwODEzMjAxMDBGRkZGMDA0MTgyODgwMTAwMDA3NzAwNDE5QworOjEwNEU2MDAwODI4QzAxMDAwMTAyMDA0MTgyOTgwMTAwMjAwMDAwNDE3MworOjEwNEU3MDAwODJEQzAxMDAxODAwMDA0MTgyREMwMTAwQ0Q4MUEyNUVDRAorOjEwNEU4MDAwMEI3RDAwMDAwMDAwMDA0MTA4QjEwMTAwMjAwMDAwQTZEOQorOjEwNEU5MDAwODJCMDAxMDBEMDgxQTI1RTBCN0QwMDAwNDAxMzAwNDE3MgorOjEwNEVBMDAwMDg5OTAxMDBEODgxMjI0MzIxNkYwMDAwMjAwMDAwQTY0QworOjEwNEVCMDAwODJCMDAxMDAxMjAwMDA0MTgyREMwMTAwRDU4MUEyNUVCNworOjEwNEVDMDAwMEI3RDAwMDAwMDA0MDA0MTA4OTkwMTAwRjM4MTAwNDBCRgorOjEwNEVEMDAwODFCMjAwMDAyMDAwMDBBNjgyQjAwMTAwMTkwMDAwNDE0QworOjEwNEVFMDAwODJEQzAxMDBEQTgxQTI1RTBCN0QwMDAwMDBBMDAwNDE5RgorOjEwNEVGMDAwMDg5OTAxMDBGMzgxMDA0MDgxQjIwMDAwMDAwMDAwNDRFNQorOjEwNEYwMDAwMjFCMzAxMDAwMDAwMDA0MDgzQjAwMTAwMDAwMDAwNUZGOQorOjEwNEYxMDAwODM5MDAxMDAwMDAwMDA1RTgzOTAwMTAwMDAwMDAwNTdCNAorOjEwNEYyMDAwODM5MDAxMDAwMDAwMDA0MUMyQjEwMTAwMEMwMTAwNDA2QgorOjEwNEYzMDAwODEzMjAxMDAwMDAwMDA1RjgzODAwMTAwMDAwMDAwNDExOQorOjEwNEY0MDAwQzJCMTAxMDAwQzAxMDA0MDgxMzIwMTAwMjAwMDAwQTYyNgorOjEwNEY1MDAwODJCMDAxMDAwNDAwMDA0MTgyREMwMTAwMjAwMDAwNDExOQorOjEwNEY2MDAwMDg5OTAxMDAyMDAwMDBBNjgyQjAwMTAwMTEwMDAwNDE1NAorOjEwNEY3MDAwODJEQzAxMDBFQzgxQTI1RTBCN0QwMDAwMDEwMDAwNDE5QgorOjEwNEY4MDAwMDg5OTAxMDAyMDAwMDBBNjgyQjAwMTAwRUY4MUEyNUUxNgorOjEwNEY5MDAwMEI3RDAwMDA0MDEzMDA0MTA4OTkwMTAwMDEwMDAwQTZBQworOjEwNEZBMDAwODJCMDAxMDA0MDAwMDA0MTJFOTkwMTAwMDAwMDgwNDBDNQorOjEwNEZCMDAwODFCMjAxMDAyMDAwMDBBNjgwQjAwMTAwMDAwMDAwQ0FGQworOjEwNEZDMDAwODE5NDAxMDBGNjgxQTI1RTBCN0QwMDAwMjI4MzAwNDBFNworOjEwNEZEMDAwMDhCMTAwMDBDODE0MkVCQjg1QjAwMTAwRjk4MUEyNUVBMworOjEwNEZFMDAwMEI3RDAwMDAwMDAwMDA0MDg3QjAwMTAwMDg4MjIyNDNEMgorOjEwNEZGMDAwMjE2RjAwMDAxNzgyMjI0NDIxNkYwMDAwMTE4MDAwQTY1QgorOjEwNTAwMDAwODJCMDAxMDAyODgyMDA0MDgxMzIwMTAwMUY4MjIyNEFDMgorOjEwNTAxMDAwODM3QzAwMDAwMDAwMDA0MDg3OTAwMTAwMDM4MjIyNEQ0NQorOjEwNTAyMDAwODM3QzAwMDAwMDAwMDA0MTg3OTAwMTAwMDU4MjIyNEYzMAorOjEwNTAzMDAwODM3QzAwMDAwMDAwMDA0Mzg3OTAwMTAwMDc4MjIyNEUxRAorOjEwNTA0MDAwODM3QzAwMDAwMDAwMDA0Mjg3OTAwMTAwMUY4MjAwNDAyNgorOjEwNTA1MDAwODFCMjAwMDAwMTgwMDBBNjgyQjAwMTAwMjg4MjAwNDBEOQorOjEwNTA2MDAwODEzMjAxMDAwMTgwMDBBNjgyQjAwMTAwMjg4MjAwNDA0OAorOjEwNTA3MDAwODEzMjAxMDAxRjgyMjI0MjgzN0MwMDAwMDAwMDAwNDAzOAorOjEwNTA4MDAwODc5MDAxMDAxQzgwMDBBNjgyQjAwMTAwMjg4MjAwNDBBOQorOjEwNTA5MDAwODEzMjAxMDAxMjgyMjI0NTgzN0MwMDAwMDAwMDAwNDEyMQorOjEwNTBBMDAwODc5MDAxMDAxNDgyMjI0NDgzN0MwMDAwMDAwMDAwNDNBQQorOjEwNTBCMDAwODc5MDAxMDAxNjgyMjI0MzgzN0MwMDAwMDAwMDAwNDI5QQorOjEwNTBDMDAwODc5MDAxMDAxRjgyMDA0MDgxQjIwMDAwMDE4MDAwQTY4RAorOjEwNTBEMDAwODJCMDAxMDAyODgyMDA0MDgxMzIwMTAwMDE4MDAwQTZEOAorOjEwNTBFMDAwODJCMDAxMDAyODgyMDA0MDgxMzIwMTAwMUY4MjIyNDJFQQorOjEwNTBGMDAwODM3QzAwMDAwMDAwMDA0MDg3OTAwMTAwMDAwMDAwNDMxNgorOjEwNTEwMDAwODc5MDAxMDAwMDAwMDA0MTg3OTAwMTAwMDA4MDAwQTYwOAorOjEwNTExMDAwODJCMDAxMDAyODgyMDA0MDgxMzIwMTAwMjM4MjIyNEJBQworOjEwNTEyMDAwODM3QzAwMDAwMDAwMDA0MDg3ODAwMTAwMDAwMDAwNDNGNQorOjEwNTEzMDAwRTBCMTAxMDBGRjdGMDBBMkEwOEIwMTAwMDAwMDAwNDQ0RAorOjEwNTE0MDAwQTVCMzAxMDBCODgwMDBDQUE3MzMwMTAwNDE4MTAwNDAyNworOjEwNTE1MDAwODFCMjAwMDAyMDAwMDA0MTgyREMwMTAwMjk4MkEyNUVCMQorOjEwNTE2MDAwMEI3RDAwMDAwMDAwMDA0MTA4QjEwMTAwMkI4MjlGODVFQgorOjEwNTE3MDAwODIzMDAwMDAwMDAwODA0MDgxQjIwMTAwMzA4MjE0RjdDQworOjEwNTE4MDAwODEzMDAwMDAzMDgyQTI0OUZEN0YwMDAwMDAwMDAwNDgwRAorOjEwNTE5MDAwRkQ5MzAxMDAzMzgyMTVGODgxMTQwMDAwMzM4MkEyNEE4NgorOjEwNTFBMDAwRkQ3RjAwMDAwMDAwMDA0OEZEOTMwMTAwMzU4MkEyQzg4OQorOjEwNTFCMDAwODEzMjAwMDA0MDAwMDA0MDgwREMwMTAwMDAxMDAwNDAwRgorOjEwNTFDMDAwODBEQzAxMDAwMDAwMDA0MEVGQjMwMTAwMzc4MjQyNDA2NAorOjEwNTFEMDAwRjEzMzAwMDA0MzgxMDA0MDY4OTcwMDAwMjI4MzAwQkI0OAorOjEwNTFFMDAwNkJCMzAwMDAyMjgzMDBCQkIxQjMwMDAwMjI4MzAwNDBGOAorOjEwNTFGMDAwODFCMjAwMDAwMDAzMDA0MDgxOTgwMTAwMDAwMDAwNDBERgorOjEwNTIwMDAwMThCMTAxMDA4MDAwMDA0MDgzOTgwMTAwMDAxOTAwNDA5RgorOjEwNTIxMDAwNDU5OTAxMDAwMDAwNDI0MDgxQjIwMTAwMDAwMDQzRkZCNworOjEwNTIyMDAwRjFCMTAxMDAwMDAwMDBGRkYxQjEwMTAwMDAwMDAwNDFGOAorOjEwNTIzMDAwODFDMDAxMDAwMDAwMDA0MDE4QjEwMTAwNDA4MkEyNDE3RAorOjEwNTI0MDAwODM1MDAwMDAwMDE2MDA0MDQ1OTkwMTAwMDAxOTAwNDBGRAorOjEwNTI1MDAwNDM5OTAxMDAwMDAwMDA0NzQzQzEwMTAwMDAwMDAwNDBFNQorOjEwNTI2MDAwODNCMDAxMDAwMDAwMDBGMzgwQjAwMTAwMDAwMDAwNUI4QgorOjEwNTI3MDAwODFEMDAxMDAwMDAwMDA0MTgwRDAwMTAwMDAwMDAwNDAwQQorOjEwNTI4MDAwRjZCMTAxMDAwMDAwMDA1QjQzQzEwMTAwMDAwMDAwNDFENQorOjEwNTI5MDAwODNDMDAxMDA0QTgyQTI1NDgzNkMwMDAwMDAwMDAwNDBEOQorOjEwNTJBMDAwRjdCMTAxMDAwMDAwMDA0MTgzQzAwMTAwNTE4MkEyMDY1NQorOjEwNTJCMDAwODM2QzAwMDAwMDAwODA0MDgxQjIwMTAwMDAxNjAwNDBCNQorOjEwNTJDMDAwNDM5OTAxMDA4MDE2MkUwNjgzQjAwMTAwMzYwMDAwRkJEMgorOjEwNTJEMDAwRjZBOTAxMDA1NzgyQTI0MTgzNTAwMDAwMjIwMDAwNDAzRAorOjEwNTJFMDAwODM5ODAxMDAwMDAwMDBGQkY2QjEwMTAwNUE4MkEyNDE0MAorOjEwNTJGMDAwODM1MDAwMDA2MjAwMDA0MDk1OTgwMTAwREM5RjAwNDA1MAorOjEwNTMwMDAwODEzMjAxMDAwMDE2MkQwNjgzQjAwMTAwODAxNjAwNDA5NgorOjEwNTMxMDAwNDU5OTAxMDA1QzAwMDBGQkY2QTkwMTAwNjA4MkEyNDFGMgorOjEwNTMyMDAwODM1MDAwMDAwMDAwMDA3MEY5QjEwMTAwMDAwMDAwNzExRQorOjEwNTMzMDAwRjlCMTAxMDAwMDAwMDA3MkY5QjEwMTAwMDAwMDAwNzMzMgorOjEwNTM0MDAwRjlCMTAxMDAwMDAwMDA3NEY5QjEwMTAwNTQwMDAwNDBGRgorOjEwNTM1MDAwOTU5ODAxMDBEQzlGMDA0MDgxMzIwMTAwMDAwMDAwNzA0MAorOjEwNTM2MDAwOTVCMDAxMDA2QzgyMjI3MEI1NkYwMDAwMDAwMDgwNDE5MgorOjEwNTM3MDAwOTdCMDAxMDAwMDAwODA0MDk3QjAwMTAwQzQ4MEEyNDJCNQorOjEwNTM4MDAwOTc2RjAwMDBCNjAzMDA0MEExOTkwMTAwMDAwMDJGNDI3MgorOjEwNTM5MDAwOTlCMzAxMDA3ODgyMjI0NDgxNkMwMDAwODA4MjIyNDgwNworOjEwNTNBMDAwODE2QzAwMDA3QTgyMjI0QzgxNkMwMDAwODU4MjIyNTA0MAorOjEwNTNCMDAwODE2QzAwMDA4NjgyMjI1NDgxNkMwMDAwODg4MjIyNTgxMQorOjEwNTNDMDAwODE2QzAwMDA4RDgyMjI1QzgxNkMwMDAwNTAwMTAwNDBFNQorOjEwNTNEMDAwODFCMjAwMDAwMDAwMDBCQzA5QjAwMTAwMjI4MzAwQ0FCNQorOjEwNTNFMDAwMDFCMDAwMDAwMDAwMDA0MDAzQjAwMTAwMDAwMDAwNDFENworOjEwNTNGMDAwRjM4MzAxMDA3RTgyQTI0MjA1NkMwMDAwMDAwMDAwNDFBMAorOjEwNTQwMDAwMDVCMDAxMDAyMjgzMjJDQTA3MTQwMDAwMjI4MzAwNDY0RgorOjEwNTQxMDAwRjM5MzAwMDAyMjgzMjA0Mzk1NkYwMDAwMjI4MzgwQ0EwQgorOjEwNTQyMDAwMDUzMDAwMDAyMjgzMjIwMTgwMzAwMDAwQzQ4MEEyNDhBMQorOjEwNTQzMDAwREI3RDAwMDAyMjgzMDBDQkRCOTEwMDAwNTcwMTAwQkMyNAorOjEwNTQ0MDAwQUJCMzAwMDAwMDAwMDBCQ0IxQjMwMTAwMjI4MzAwQ0E2RQorOjEwNTQ1MDAwQ0ZCMzAwMDBGRjAwMDBDQTgxODgwMTAwMjI4M0EyNDA3MAorOjEwNTQ2MDAwNzQ3RDAwMDA2MDAwMjA0MDYwOTkwMTAwOEE4MkE4QjEyQworOjEwNTQ3MDAwODIzMDAwMDA4OTgyMDA0MDgxQjIwMDAwMjI4MzAwQ0E4RAorOjEwNTQ4MDAwNzlCMzAwMDAwMDAwMDA0RTgxQjAwMTAwMDAwMDAwNDMyRAorOjEwNTQ5MDAwQ0I4MzAxMDAwMDAwNDU0MDgxQjIwMTAwOTA4MkEyNDEwRgorOjEwNTRBMDAwODE1MDAwMDAwMDAwNDU0MDgxQjIwMTAwMDAwMDQ1NDBFRAorOjEwNTRCMDAwODFCMjAxMDA5QjgyOTE4MjgyMzAwMDAwMDAwMDAwOEE0QworOjEwNTRDMDAwODBCMDAxMDBBRTlGMDA0MDgwQ0UwMTAwOTk4MkE2NDBDRQorOjEwNTREMDAwODEzMjAwMDA5QjgyNTY0MDgxQjIwMDAwQjYwMzAwNDAzQQorOjEwNTRFMDAwQTE5OTAxMDAwMDAwMDA1MzA3OTAwMTAwQjYwMzAwNDA5RAorOjEwNTRGMDAwQTE5OTAxMDAwMDAwMDA1MjA3OTAwMTAwRDg5RjAwNDFDRgorOjEwNTUwMDAwOEJCMzAwMDAwMDAwMDA0RTgxQjAwMTAwMDAwMDAwNDI5QgorOjEwNTUxMDAwQ0Q4MzAxMDAwMDAwNDY0MDgxQjIwMTAwQTA4MkEyNDE3QgorOjEwNTUyMDAwODE1MDAwMDAwMDAwNDY0MDgxQjIwMTAwMDAwMDQ2NDA2QQorOjEwNTUzMDAwODFCMjAxMDBBQjgyOTE4MTgyMzAwMDAwMDAwMDAwODlCRAorOjEwNTU0MDAwODBCMDAxMDBBRTlGMDA0MDgwQ0UwMTAwQTk4MkE2NDAzRAorOjEwNTU1MDAwODEzMjAwMDBBQjgyNTU0MDgxQjIwMDAwQjYwMzAwNDBBQQorOjEwNTU2MDAwQTE5OTAxMDAwMDAwMDA1MjA3OTAwMTAwQjYwMzAwNDAxRAorOjEwNTU3MDAwQTE5OTAxMDAwMDAwMDA1MzA3OTAwMTAwRDg5RjAwNDE0RAorOjEwNTU4MDAwOEJCMzAwMDBCMTAzMDA0MEExOTkwMTAwQzQxNDJGNDA2NworOjEwNTU5MDAwOTlCMzAxMDA1NzAxMDA0MDQ5QjEwMDAwQTA5NDJFNDM4NworOjEwNTVBMDAwOTdCMDAxMDAwMDAwMDA0MEYxQjEwMTAwQjI4MkEyNDFCOQorOjEwNTVCMDAwOTc1MDAwMDA1MDk1MjA0MEUxQjEwMTAwQUM5NDJFNDM3QgorOjEwNTVDMDAwOTdCMDAxMDAwMDAwMDA0MEYxQjEwMTAwQjY4MkEyNDE5NQorOjEwNTVEMDAwOTc1MDAwMDAwMDAwODA0MDgxQjIwMTAwQUUwMzAwNDBGRgorOjEwNTVFMDAwQTM5OTAxMDAwMDAwMDA0MDgxQjAwMTAwNjAxNTAwNDA1NworOjEwNTVGMDAwODU5ODAxMDAwODAwMDA0MDQwRTQwMTAwMDAwMDAwNTlDNworOjEwNTYwMDAwNDE5NDAxMDAwMDAwMDA1MDQxRTAwMTAwMDAwMDAwNDIxMAorOjEwNTYxMDAwNDA5NDAxMDAwMDAwMDA1NzQxOTAwMTAwMDAwMDAwNDE0QgorOjEwNTYyMDAwODFDMDAxMDAwMDAwQTM0MjgxNkMwMTAwMDAwMDAwNDEyNAorOjEwNTYzMDAwQTNDMTAxMDBCQzgyQTA0MjgxNkMwMDAwQkM4MjAwNTA2QQorOjEwNTY0MDAwODVDMDAwMDAwMTgzQTI0MTAxN0QwMDAwQ0Y4MjIyNTg2NQorOjEwNTY1MDAwNzM3RDAwMDA3ODAwMDA0MDYxOTkwMTAwQzc4MkE4QjEwNQorOjEwNTY2MDAwOUMzMDAwMDAzMDAwMzg0NTlERTAwMTAwMDQwMEEyNUYzRQorOjEwNTY3MDAwMUY3QzAwMDAwNDAwMjI1RTFGN0MwMDAwMDBDMDAwQTYwQQorOjEwNTY4MDAwMUVBNDAxMDAwMTAwMDAwRTEwQzkwMDAwQ0Y4MjMzQzQyNworOjEwNTY5MDAwODEzMDAwMDBEMjgyQTFBRDlEMjAwMDAwQzY4MjEzNDA1RgorOjEwNTZBMDAwODFCMjAwMDAwMDAwMTM0RTVBODMwMTAwMzAwMDM4NDVEQgorOjEwNTZCMDAwOURFMDAxMDAwNDAwQTI1RjFGN0MwMDAwMDQwMEEyNUVDOAorOjEwNTZDMDAwMUY3QzAwMDAwNDAwQTI0MDA1NkMwMDAwREQ4MjIyQUJCQworOjEwNTZEMDAwODAwNDAwMDBEQjgyQTI0MDAxN0QwMDAwREQ4MjIyNUZBOQorOjEwNTZFMDAwNTc3RDAwMDAxMjg4MDA1RjFGQjQwMDAwREQ4MjIyNUUzQgorOjEwNTZGMDAwNTc3RDAwMDA4MDg4MDA1RjFGQjQwMDAwRTM4MjIyNTRDMQorOjEwNTcwMDAwNzM3RDAwMDA3NDAwMDA0MDYxOTkwMTAwREQ4MkE4QjE0MgorOjEwNTcxMDAwMDAzMDAwMDAwMDAwMDA1RjFGQjQwMTAwRjc4NEEyNUZBQQorOjEwNTcyMDAwMDE3QzAwMDA5NTg3MDA0MDgxQjIwMDAwRTU4MkEyNUYwNQorOjEwNTczMDAwNTkyNzAwMDBFNzgyQTI1QzczN0QwMDAwRUU4MkEyNUUyMgorOjEwNTc0MDAwNzM3RDAwMDBGQTgyMjI1QzczN0QwMDAwRkI4MjM3NDA4QgorOjEwNTc1MDAwODEzMjAwMDA3QzAwMDA0MDYxOTkwMTAwRTg4MkE4QjExQworOjEwNTc2MDAwMzYzMDAwMDA3QzAwMDA0MDYxOTkwMTAwRUE4MkE4QjE1NworOjEwNTc3MDAwMDAzMDAwMDAxRjAwMDAwMDAyODgwMTAwMzc4NTE3NUYxRAorOjEwNTc4MDAwMUZCNDAwMDBGQjgyMzQ0MDgxMzIwMDAwN0UwMDAwNDBFNAorOjEwNTc5MDAwNjE5OTAxMDBFRjgyQThCMTEyMzAwMDAwRjc4MjUyMjExNgorOjEwNTdBMDAwMTMwNDAwMDAwMDAwMTQ0MTJGQzMwMTAwMDAwMDAwNUYzQgorOjEwNTdCMDAwMUZCNDAxMDBGRjNGMDAwOTAwOEMwMTAwMDAwMDAwNDNGRQorOjEwNTdDMDAwMDFGMDAxMDA0RjgzMDAzNDEzODQwMDAwRkYzRjE0MDlFRgorOjEwNTdEMDAwMDA4QzAxMDAwMDAwMDA1RjFGQjQwMTAwQzQ4MzAwNDM3RgorOjEwNTdFMDAwMDFGMDAwMDAwMDAwMDA0MDgxQjIwMTAwRkI4MjMzNDA2NAorOjEwNTdGMDAwODEzMjAwMDAwNDAwQTI0RTVBN0YwMDAwMDcwMDAwNEVENAorOjEwNTgwMDAwODBFNDAxMDAwMDM5MDA0MDgwQzgwMTAwMDQwMEEyNDA4QgorOjEwNTgxMDAwMDY2QzAwMDBDNjgyMTM0RTVBOTMwMDAwRTc4N0EyNDgyOAorOjEwNTgyMDAwRkQ3RjAwMDAwNTgzMDJFNjgxMzIwMDAwMDY4MzgzRTVFOAorOjEwNTgzMDAwODEzMjAwMDA4RTgyMDA0Mjk3QjMwMDAwOUU4MjAwNDJCNworOjEwNTg0MDAwOTdCMzAwMDAwOTgzMjI0NkYzN0YwMDAwMEM4M0EyNDEzNgorOjEwNTg1MDAwRjM3RjAwMDBDNjgwMDA0Mjk3MzMwMTAwMEM4MzIyNDQ4RQorOjEwNTg2MDAwRjM3RjAwMDAwQzgzQTI0MUYzN0YwMDAwQzY4MDAwNkYyRAorOjEwNTg3MDAwOTczMzAxMDAwNDAwQTJBQzgwMzIwMDAwMTE4MzIyNUE0OQorOjEwNTg4MDAwNzM3RDAwMDA3QTAwMDA0MDYxOTkwMTAwMEU4M0E4QjE4OQorOjEwNTg5MDAwN0UzMTAwMDAwMTAwMDBDRjExQzkwMDAwMTc4M0EyNDAzMworOjEwNThBMDAwOTM3RjAwMDAxNzgzMjI0NDkzN0YwMDAwMTM4MzQyQTU1NworOjEwNThCMDAwODAzMDAwMDAxNjgzQTI0MDkzN0YwMDAwMzg4MzFBNDA5NgorOjEwNThDMDAwOTM5MzAwMDAwMDAwMUE0MDgxQjIwMTAwREY4MEEyNDBFMworOjEwNThEMDAwNzM3RDAwMDBFMjg3MjI0NDIxNkYwMDAwRDk4NzIyNDBCNworOjEwNThFMDAwNjU3RDAwMDAwMDA1QTI1QjczN0QwMDAwMDQwMEEyNDlGNQorOjEwNThGMDAwMzM3RDAwMDAyMTgzMjI0ODMzN0QwMDAwRkYwMTAwOTlBMQorOjEwNTkwMDAwODBEODAxMDAwMDAwMDA1MDgxRTAwMTAwQTg5ODJGNDBERAorOjEwNTkxMDAwMzNCMTAxMDAwMDAwMDA0MEUwQzEwMTAwMDE4MzAwNDBGQworOjEwNTkyMDAwODFCMjAwMDBDNjgyMDA0MDhCQjMwMDAwMDQwMEEyNUU3QQorOjEwNTkzMDAwMUY3QzAwMDAwNDAwMjI1RjFGN0MwMDAwMDAwMDAwNUU0RQorOjEwNTk0MDAwMUY5MDAxMDBDNjgyMDA1RjFGODAwMDAwMDQwMEEyNUU1RAorOjEwNTk1MDAwMUY3QzAwMDAwNDAwMjI1RjFGN0MwMDAwMDAwMDAwNUUyRQorOjEwNTk2MDAwMUY5MDAxMDAwMDAwMDA1RjFGODAwMTAwMDAwMDAwNTgzMAorOjEwNTk3MDAwNjFCMTAxMDAwMDAwMDA0RTYyQjEwMTAwQzY4MjI4NDAwMgorOjEwNTk4MDAwODEzMjAwMDAyQzgzMDA0MDgxQjIwMDAwMDAwMDAwNDAwMgorOjEwNTk5MDAwMEZCMDAxMDAwNDAwQTI1RTFGN0MwMDAwMDQwMDIyNUYyMworOjEwNTlBMDAwMUY3QzAwMDAzMjgzMzM0MDFGMzAwMDAwMDQwMEEyNEVGMQorOjEwNTlCMDAwNUE3RjAwMDAwNzAwMDA0RTgwRTQwMTAwMDAzOTAwNDBEQgorOjEwNTlDMDAwODBDODAxMDAwNDAwQTI0MDA2NkMwMDAwQzY4MjEzNEU4RAorOjEwNTlEMDAwNUE5MzAwMDAzQTgzQTBDRTgxNTAwMDAwNEQ4M0EwQ0RBMQorOjEwNTlFMDAwODE2QzAwMDAwMDAwMDBBNTlDQjMwMTAwMDAwMDAwQjEyNAorOjEwNTlGMDAwODFCMDAxMDA0RDgzMjJCNTgxMTQwMDAwODAxNTJGNDAzNQorOjEwNUEwMDAwNDlCMTAxMDAzRTgzNDI0MDgxMzIwMDAwMDAwMDYwQjQ5MQorOjEwNUExMDAwNjU5NzAxMDBEMDE1MkU0MDY5QjMwMTAwMDAwMDFBNDRCQgorOjEwNUEyMDAwOTM4MzAxMDAwNDAwMjI0MEUxNkQwMDAwMUEwMDAwQTJFRgorOjEwNUEzMDAwODBEQzAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDAwQjE3MQorOjEwNUE0MDAwRjFCMTAxMDAwMDAwMDBCNUYxQjEwMTAwMDUwMDAwNDAxNgorOjEwNUE1MDAwNjE5OTAxMDA4MDAwMDA0MDYyREQwMTAwNDg4M0E4QTEzNworOjEwNUE2MDAwRTAzMTAwMDAxNzgzMDA4ODlFQjMwMDAwMTc4M0EyNDEzNQorOjEwNUE3MDAwNjc2RjAwMDAxNzgzMDA2RkRCOTEwMDAwNEQ4MzQyNDA4OQorOjEwNUE4MDAwODEzMjAwMDAxNzgzMUE0MDkzODMwMDAwMDAwNDAwNDAxNQorOjEwNUE5MDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwMDQwMEEyNUE4NworOjEwNUFBMDAwMDE3QzAwMDAwNDAwMjI0MDAxNkMwMDAwMDA5OTAwMDkwNAorOjEwNUFCMDAwNDZDOTAxMDAzRjAwMDBGMzBDODgwMTAwNUM4M0E2NDI0OAorOjEwNUFDMDAwMTM2MDAwMDA5Qjk2MDA5NTAzMzAwMTAwNTc4MzYxNDBFRQorOjEwNUFEMDAwODEzMjAwMDA3NTAwMDA0MDYxOTkwMTAwNTg4M0E4QjEyRgorOjEwNUFFMDAwMEMzMDAwMDBBOTk2NzExMDk0MzAwMTAwNUQ4MzAwNThCRAorOjEwNUFGMDAwMUY5MDAwMDA4RDk2MDA5NTAzMzAwMTAwMjM4MzAwODhERAorOjEwNUIwMDAwMUNCMDAwMDAwMDAwMkQwMzQ4QjEwMTAwMDQwMDJERjA3RQorOjEwNUIxMDAwMkVCMDAxMDA4MDA0MDAxNzk2ODgwMTAwMDQwMEE2NDAwMgorOjEwNUIyMDAwODEzMjAwMDA0QUMxMDAxNzk2RDgwMTAwMDQwMEE2NDA0NworOjEwNUIzMDAwODEzMjAwMDBFRTA3MDA0MDk3OTgwMTAwNjg4MzIzNEJGNAorOjEwNUI0MDAwRTQ2RDAwMDA2ODgzMjI0QkZEN0YwMDAwMDAwMDAwNDBGMAorOjEwNUI1MDAwMUY5MDAxMDAyMjAwMkY0MDgxQjIwMTAwNkI4MzgzMTc0OAorOjEwNUI2MDAwODAzMjAwMDAyNjAwMDA0MDQ3OTkwMTAwNkQ4Mzg1MTdCMAorOjEwNUI3MDAwODAzMjAwMDAwMDAwMDA0ODQ3QzEwMTAwNzM4MzIyNTVCNQorOjEwNUI4MDAwMkY3QzAwMDAwMDAwMDA0MjQzRDEwMTAwMEYwMDAwRkEwQQorOjEwNUI5MDAwOTY4ODAxMDAwMDAwMDA0Mjk3RTAwMTAwMDAwMDAwNDJFQQorOjEwNUJBMDAwOTdEMDAxMDA3NDgzMDA0QjQ0QzEwMDAwMTIwMDAwQTI5MgorOjEwNUJCMDAwNDRDOTAxMDAyODAwMDBGNjAyQ0MwMTAwMEEwMDAwQTEzRgorOjEwNUJDMDAwNDJDOTAxMDAwMDAwMDBGODE2QjAwMTAwMDAwMDI4RjBGMgorOjEwNUJEMDAwMTBCMDAxMDAwMDAwMDBGMDFBQjAwMTAwMDAwMDAwQTJBNworOjEwNUJFMDAwMkFCMDAxMDBDMDI4M0M0NjBERTAwMTAwMDAwMDJENDQxMQorOjEwNUJGMDAwOTVCMDAxMDA4MDgzQTJGODBFMzAwMDAwOTA4MzIyNDEwRQorOjEwNUMwMDAwOTU1MDAwMDAwMDAwMkQ1MDQ5QzEwMTAwN0M4MzAwNDBFOAorOjEwNUMxMDAwODFCMjAwMDA3RDgzQTJGODE2NkMwMDAwN0Q4M0EyRjg5QgorOjEwNUMyMDAwMTA2QzAwMDA3RDgzQTJGMDFBNkMwMDAwOEU4MzIyNTg1NQorOjEwNUMzMDAwMUY3QzAwMDAwMDk5M0Y0MjEzRjAwMTAwODU4MzY1NDBGRQorOjEwNUM0MDAwODEzMjAwMDA4OTgzQTJGMzc0MDYwMDAwMDAwMDAwMDY4MAorOjEwNUM1MDAwRTY5NTAxMDA4RTgzNzU0MDgxQjIwMDAwMDAwMDAwMDZDOQorOjEwNUM2MDAwOTZCMDAxMDAzRjAwNzVGMzBDODgwMTAwMDAwMDAwNTU1QworOjEwNUM3MDAwNjFCMTAxMDAwMDAwMDA0QjYyQjEwMTAwOEM4M0E4NDBCQgorOjEwNUM4MDAwODEzMjAwMDA4RTgzNjc0MDgxMzIwMDAwOTY4Mzc3NDEyNQorOjEwNUM5MDAwMkRDMzAwMDA5NDgzMjI1ODFGN0MwMDAwMDAwMDAwNTU5MworOjEwNUNBMDAwNjFCMTAxMDAwMDAwMDAwNjYyQjEwMTAwOTI4M0E4NDBDQQorOjEwNUNCMDAwODEzMjAwMDA5NDgzNjc0MDgxMzIwMDAwRDU4Mzc3NDFCMAorOjEwNUNDMDAwMkRDMzAwMDAwMzAwMDAwNzFBRjQwMTAwMTg5NTAwMDcxNworOjEwNUNEMDAwMTYzMDAxMDBBODgzMjI0MTgxNkMwMDAwOUM4MzIyNDI3RgorOjEwNUNFMDAwODE2QzAwMDAyMzgzMDA4ODFDQjAwMDAwQTc4MzIyNUYyMgorOjEwNUNGMDAwMEY3QzAwMDA0RTk2MDA1RjAxMTAwMTAwQTI4MzIyNDAzRAorOjEwNUQwMDAwOTU2QzAwMDAwNDgwMDAwMzQyQzkwMTAwMDAwMDAwRjIwRAorOjEwNUQxMDAwMDJCMDAxMDBBNTk1MDA1Mjk1MzAwMTAwQUM5NTAwNEJGMgorOjEwNUQyMDAwMDJCMDAwMDAwMDAwMDA1RjBGODAwMTAwMDEwNDAwNDA4RAorOjEwNUQzMDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwQjQ5NjAwMDk5MQorOjEwNUQ0MDAwOTYzMDAxMDBGMDg3MDA0MDBGQjAwMDAwQjc4M0EyNUFFMAorOjEwNUQ1MDAwMUY3QzAwMDAwNDAwQTI1QTFGN0MwMDAwMDBCNTAwMEQ0QgorOjEwNUQ2MDAwNDJDOTAxMDAwNDAwMjIwQkU2N0QwMDAwMDBCNzAwMERDRgorOjEwNUQ3MDAwNDJDOTAxMDAwNDAwMjIwQkU2N0QwMDAwNzA5NDAwNDAzRgorOjEwNUQ4MDAwODEzMjAxMDBCNzgzMjIyMDg1NkMwMDAwQjI4MzlDMEYxMgorOjEwNUQ5MDAwODAzMjAwMDAyMzgzMDA4ODFDQjAwMDAwOEQ5NTAwNUNEOQorOjEwNURBMDAwMUYwMDAxMDBDODk3MDA0MjYxMzEwMTAwMjM4MzAwODg3MQorOjEwNURCMDAwMUNCMDAwMDA5MDA0MDAwNzk2MzAwMTAwMDAwMDJEMDU4MworOjEwNURDMDAwNDhCMTAxMDAwNDAwQTI0QkUxN0QwMDAwMDQwMEEyNUM4OAorOjEwNUREMDAwMUY3QzAwMDAwMDAwMkQwNTQ4QjEwMTAwQkI4MzgyRjA0QworOjEwNURFMDAwMTgzMDAwMDA2Qzg5MDA0NThGQjAwMDAwMjgyMDAwQTYwNAorOjEwNURGMDAwOTZCMDAxMDBDMTgzMjIxNzk2MDQwMDAwMzQwNDAwNDBDRAorOjEwNUUwMDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwNUI5NzAwNEJENgorOjEwNUUxMDAwOTUzMDAxMDA2Qzg5MDA0QjhGQjAwMDAwNUQ5NjAwMDM0NworOjEwNUUyMDAwNDgzMTAxMDBBRjkzMDA0MDgxMzAwMTAwNkM4OTAwNDA4RgorOjEwNUUzMDAwODFCMjAwMDAwMDAwMDA0MDBGQjAwMTAwMDAwNDAwNDBFQgorOjEwNUU0MDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwMDQwMDIyNDA2RAorOjEwNUU1MDAwMDE2QzAwMDAwMDAwMkUxMDQ4QjEwMTAwMDAwMDY4NTBFNQorOjEwNUU2MDAwMDNCMDAxMDAwMDAwMDAwM0YwQjEwMTAwNDAwMDAwMDA5OQorOjEwNUU3MDAwRTBDOTAxMDAwMDAwMkU1MDQ5QzEwMTAwMDAwMDAwNTA5RgorOjEwNUU4MDAwRjFCMTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwNDI4OAorOjEwNUU5MDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwRDA4M0E4NDA0NAorOjEwNUVBMDAwODEzMjAwMDAxMDAwMDAxMDYyQzkwMTAwRDI4M0E4MDBGNgorOjEwNUVCMDAwRTAzMTAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDJEMDNBNworOjEwNUVDMDAwNDhCMTAxMDAwMDAwMDA0MDBGQjAwMTAwMDAwMDAwRjhFMAorOjEwNUVEMDAwMkVCMDAxMDAwMDAwMDBGMjAyQjAwMTAwMDAwMDAwNDBGRQorOjEwNUVFMDAwMTdCMDAxMDAwMDQxMDBBNjk2QjAwMTAwRUUwNzJFNDc1MgorOjEwNUVGMDAwOTc5MDAxMDBFODgzMjIxNzk2MDQwMDAwRTY4MzIyNEI2NgorOjEwNUYwMDAwRkQ3RjAwMDBFNjgzMjNBMjAyNkMwMDAwQTU5NTAwNTJFRAorOjEwNUYxMDAwOTUzMDAxMDAwNDAwMjI0MTk3NTAwMDAwMEMwMDJEMDAzNAorOjEwNUYyMDAwMTJCMDAxMDAwMDAwMDBGMDAwQjAwMTAwMDAwMDAwNUNCMQorOjEwNUYzMDAwMDE4MDAxMDBBQzk1MDA0QjAyQjAwMDAwMDAwMDAwMDk5OAorOjEwNUY0MDAwMDBCMDAxMDAwMDAwMDA1MDAzQjAwMTAwMDU4NDAwNUNCNworOjEwNUY1MDAwMTc5MDAwMDBGQTgzMjI0MzJGN0MwMDAwMDAwMDAwNDVDOAorOjEwNUY2MDAwMUY5MDAxMDBGMzgzMjI1RjJGN0MwMDAwMDAwMDJFMTBBMQorOjEwNUY3MDAwNDhCMTAxMDAwMDAwMDA1OEYxQjEwMTAwMTAwMDAwMDMxOQorOjEwNUY4MDAwRjBDOTAxMDAxMDAwMDAwMEUwQzkwMTAwRUY4MzYyNDI4NworOjEwNUY5MDAwNjEzMTAwMDAwMDAwMDAxMDYyQjEwMTAwRjA4M0E4NDBGMAorOjEwNUZBMDAwODEzMjAwMDAyMzgzNzI4ODFDQjAwMDAwMjAwMDJEMDM4MgorOjEwNUZCMDAwNDhCMTAxMDBGRjBGMDBGNjgwODgwMTAwRjc4M0EyQTYxOAorOjEwNUZDMDAwODE2QzAwMDBGQTgzMDBGMjNBQjAwMDAwRjQ4NEEyNEIyNgorOjEwNUZEMDAwRkQ3RjAwMDBDOTk0MDA0MDgxMzIwMTAwMDY4ODAwNDAyNgorOjEwNUZFMDAwODFCMjAwMDAwNTg0MjI0QTJGN0MwMDAwMDU4NDIyNDhFQgorOjEwNUZGMDAwMkY3QzAwMDAwQTAwMkQwMzQ4QjEwMTAwM0YwMDAwRjI5MQorOjEwNjAwMDAwODY4ODAxMDAxRjAwMDA0Mzg0ODgwMTAwMDUwMDAwNDNDQQorOjEwNjAxMDAwODBGNDAxMDA5ODk0M0Q0MjgxRTAwMTAwMDU4NEEyNDI5MQorOjEwNjAyMDAwRTA3RDAwMDBGNDg0QTI0QkZEN0YwMDAwQzk5NDAwNDA5NQorOjEwNjAzMDAwODEzMjAxMDAwNjg4MDA0MDgxQjIwMDAwMDIwNDAwNDA2NQorOjEwNjA0MDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwMDc4NDY5NDA5RAorOjEwNjA1MDAwODEzMjAwMDAwMDAwMDBBMzA5QjAwMTAwMDAwMDc5NDE3NgorOjEwNjA2MDAwNDdDMzAxMDAwNDAwQTBBMTA5NkMwMDAwMEU4NDIyQTExNgorOjEwNjA3MDAwMDk2QzAwMDAyNzgzMDA4ODFDQjAwMDAwMEE4NDAwMDMxQworOjEwNjA4MDAwNDhCMTAwMDA0ODg0QTM5MjAzNkMwMDAwMkI5ODAwNDBBNAorOjEwNjA5MDAwOTUzMDAxMDAwMDAwMDA0MTQzQzMwMTAwMDAwMDAwMTZEQworOjEwNjBBMDAwODBCMjAxMDAwNjg4MjcwODgwMzIwMDAwMTU4NDIyNUMzNworOjEwNjBCMDAwMTc3QzAwMDAxNjg0MDAwMDJBQjAwMDAwMTIwMDAwMDBDNworOjEwNjBDMDAwMkFDODAxMDAwMjAwMDAwODgwQzgwMTAwMUE4NEEyNDMwNworOjEwNjBEMDAwMkY3QzAwMDA1RTk3MDA0MDgxMzIwMTAwMzY4NDAwNUUxNAorOjEwNjBFMDAwMTc5MDAwMDAwNDAwMDAwMThDQ0MwMTAwNUU5NzAwNEM2QQorOjEwNjBGMDAwMDMzMDAxMDAwMDAwMkU0NjAyQjAwMTAwMTAwMDAwMTAyNQorOjEwNjEwMDAwNDhDOTAxMDAwQzAwMDAwMUYwQ0QwMTAwMkMwMDAwNDA0NgorOjEwNjExMDAwRjBDOTAxMDAwMDAwMDAxNkYwQjEwMTAwMTAwMDAwMTVFOAorOjEwNjEyMDAwRTBDOTAxMDAwMDAwMDA0MzYxQjEwMTAwQTAwMDAwQTQyQgorOjEwNjEzMDAwNjJERDAxMDAyMzg0QTg1NDE3MTAwMDAwMzY4NDAwNUUzRAorOjEwNjE0MDAwMTc5MDAwMDAxMjAwMDAwMDJBQzgwMTAwMzU4NDIyNDM4NQorOjEwNjE1MDAwMkY3QzAwMDAwNDAwMDAwMThDQ0MwMTAwMDAwMDAwNENFQQorOjEwNjE2MDAwMDNCMDAxMDA3Rjk3MDA0MzYxMzEwMTAwMDAwMDJFNDYxQgorOjEwNjE3MDAwMDJCMDAxMDAxMDAwMDAxMDQ4QzkwMTAwMEMwMDAwMDEyRAorOjEwNjE4MDAwRjBDRDAxMDAwQzAwMDAwOUYwQzkwMTAwMDAwMDAwMTg2QQorOjEwNjE5MDAwRjBCMTAxMDAxMDAwMDAxNUUwQzkwMTAwMDAwMDAwNDM0QgorOjEwNjFBMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwMzY4NDI4NTQyMgorOjEwNjFCMDAwMTcxMDAwMDAzMjg0MDA0MDgxQjIwMDAwN0Y5NzAwNDMzNgorOjEwNjFDMDAwNjEzMTAxMDAzODg0MjI1MDJGN0MwMDAwMDAwMDAwNTYwRAorOjEwNjFEMDAwMTc5MDAxMDAwNzAwMDAxNzk4ODgwMTAwM0I4NEEyNDEzNgorOjEwNjFFMDAwOTk2QzAwMDAwMDAwMDA1NTE3OTAwMTAwMDAwMDAwNDM2QQorOjEwNjFGMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwM0M4NEE4NDA1NAorOjEwNjIwMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwNjY5NzAwNDBBNAorOjEwNjIxMDAwODEzMjAxMDA0Mzg0MjI0MzJGN0MwMDAwMTY4MDAwMDM1QQorOjEwNjIyMDAwNDRDOTAxMDAwMDAwMDAxREU0QjEwMTAwMDA5NzAwNUVCOAorOjEwNjIzMDAwMDUxMDAxMDA0Njg0QTI1RjJGN0MwMDAwODY5MzAwMDFCOAorOjEwNjI0MDAwMzg0MzAxMDBDOTk0MDA0MDgxMzIwMTAwMDY4ODAwNDBCMworOjEwNjI1MDAwODFCMjAwMDA0QTg0QTI0QkZEN0YwMDAwRjE4NDAwNDExRQorOjEwNjI2MDAwNDNDMzAwMDAwMDAwMDA0MDI3QjAwMTAwMDAwMDAwNDBEMAorOjEwNjI3MDAwMkRCMDAxMDAwMDAwMDA0MDExQjAwMTAwNEQ4NDM1MDEzNworOjEwNjI4MDAwODYzMDAwMDA2RDAwMDA0MDYxOTkwMTAwNTY4NDI4QjFGRAorOjEwNjI5MDAwMzAzMDAwMDA0RTg0MjI0RDc1N0QwMDAwMDAwMDAwMTY1NQorOjEwNjJBMDAwODBCMjAxMDBERDg0QTc0MDExNkMwMDAwMDAwMDAwNDFCNQorOjEwNjJCMDAwNDNDMzAxMDAwNDAwQTI0MDI3NkMwMDAwRjA4NDAwNDBBQQorOjEwNjJDMDAwODFCMjAwMDA2RDAwMDA0MDYxOTkwMTAwNTY4NEE4QjFDMAorOjEwNjJEMDAwMTIzMDAwMDAwMDAwMDAxNjgwQjIwMTAwNjA4NEE3NDA2OAorOjEwNjJFMDAwMTE2QzAwMDAwMDAwMDA0MTQzQzMwMTAwMDAwMDAwMDlFMAorOjEwNjJGMDAwMTBCMDAxMDAwMDAwMDAxODJDQjAwMTAwREUwNzAwNDNDMAorOjEwNjMwMDAwODBDRTAxMDA0RTg0QUE0MDgxMzIwMDAwNjU4NDAwNDBBNgorOjEwNjMxMDAwODFCMjAwMDA0MDAwM0U0MzI3RTAwMTAwMDAwMDAwMDk3OAorOjEwNjMyMDAwRjBCMTAxMDAwMDAwMDAxOEUwQjEwMTAwMDAwMDAwNDFFMAorOjEwNjMzMDAwMjdDMDAxMDA0RTg0QTMwQjg3NTAwMDAwMDAwMDE1NDBDOQorOjEwNjM0MDAwMUJCMDAxMDAwMDAwMDA0MDIzQjAwMTAwMDQwMEEyMDNDNAorOjEwNjM1MDAwNDg2RDAwMDAxMjAwMDAwMDJBQzgwMTAwNDAwMDJENDBENgorOjEwNjM2MDAwMzlCMDAxMDA2Rjg0QTI0MDI3NkMwMDAwMjIwMDAwMDhCMQorOjEwNjM3MDAwMTJDODAxMDAwNDAwQTIxNjMwNkMwMDAwREUwNzAwNDBDNQorOjEwNjM4MDAwMjU5ODAxMDA3Mjg0MDA0MDgxQjIwMDAwMDAwMDAwRjhFRQorOjEwNjM5MDAwMTJCMDAxMDAwMDAwMDBGMDMwQjAwMTAwMDAwMDAwMEI1RQorOjEwNjNBMDAwMjVCMDAxMDAwMDAwMDAxMDMyQjAwMTAwMTQwMDIwMDFFRgorOjEwNjNCMDAwRTBCMTAxMDBFRTA3MDA0MDM3OTgwMTAwNzc4NDIzMDEyNworOjEwNjNDMDAwMzY2QzAwMDAwMDAwMDAwMTM2QjAwMTAwODI4NDgyNDE3QQorOjEwNjNEMDAwMjM0MDAwMDAyMDgwMDAxMDQyQzkwMTAwN0U4NDIyNDAzQQorOjEwNjNFMDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTBCNworOjEwNjNGMDAwNjJERDAxMDA3Qjg0QTg0MDgxMzIwMDAwMjM4MzAwODg5NQorOjEwNjQwMDAwMUNCMDAwMDBGMzk0MDA0MzIzMzAwMTAwMDAwMDAwMTA5MgorOjEwNjQxMDAwMzJCMDAxMDAwMDAwMDA0MTIzQjAwMTAwMDAwMDAwMDM4MQorOjEwNjQyMDAwNDhCMTAxMDAwMDgwMDAxOTQ0QzkwMTAwOTM4NDIyNDU0RAorOjEwNjQzMDAwMUY3QzAwMDAwNDAwQTI0MTIzNkMwMDAwMDQwMEEyMEI5QQorOjEwNjQ0MDAwMjU2QzAwMDAwMDAwMDA0Q0YxQjEwMTAwMDAwMDAwMDlDMworOjEwNjQ1MDAwRjBCMTAxMDAwMDAwMDAxOEYwQjEwMTAwMDAwMDAwNDM5RAorOjEwNjQ2MDAwNjFCMTAxMDAyMDAwMDAxOTYyREQwMTAwOEE4NEE4MTVENQorOjEwNjQ3MDAwRTAzMTAwMDAwMDAwMDA1MDAzRDAwMTAwMDAwMDAwNTA5NworOjEwNjQ4MDAwMzNDMDAxMDAwMDAwMDA0QzI1RDAwMTAwMEMwMDJENEM1MQorOjEwNjQ5MDAwMTNDMDAxMDAwMDAwMDA1MDM3RDAwMTAwMDAwMDAwNTA4MAorOjEwNjRBMDAwMkJDMDAxMDA3Nzg0MDA0NTFGODAwMDAwOTU4NEEzMTI1MworOjEwNjRCMDAwMzY2QzAwMDA5Njg0NjgxQjI4QjAwMDAwMDAwMDY4MTI0QgorOjEwNjRDMDAwMjhCMDAxMDAwMDAwMDAwOUYwQjEwMTAwMDAwMDAwMTgzMAorOjEwNjREMDAwRjBCMTAxMDAwMDAwMDA0MzYxQjEwMTAwMjAwMDAwMTk4QgorOjEwNjRFMDAwNjJERDAxMDA5OTg0QTgxNUUwMzEwMDAwQzE4NDIyMTQwNgorOjEwNjRGMDAwMDI1MDAwMDAwMDAwMDA1MDMzQzAwMTAwMDAwMDAwMTRGMgorOjEwNjUwMDAwMjREMDAxMDAwQzAwMkQxNDEyQzAwMTAwQjk4NEEyMTQ4MworOjEwNjUxMDAwMzY1MDAwMDBBOTg0MjI1QzFGN0MwMDAwMzA4MDAwMTBFRgorOjEwNjUyMDAwNDJDOTAxMDBBNzg0MjI0MEUzNkQwMDAwMDAwMDAwNDI0MAorOjEwNjUzMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQTQ4NEE4NDBBOAorOjEwNjU0MDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDM5QgorOjEwNjU1MDAwNDhCMTAxMDAwQzAwMkQ1QzFGODAwMTAwMTAwMDAwRjAwQworOjEwNjU2MDAwMkFDODAxMDAwMDAwMDA1QzJCODAwMTAwMDQwMDIyNTBCQQorOjEwNjU3MDAwMkI2QzAwMDBGMDA3MDA0MDM3OTgwMTAwQUY4NDIzMDEyNgorOjEwNjU4MDAwMzY2QzAwMDAwMDAwMDAwMTM2QjAwMTAwQkE4NDIyMUIwNgorOjEwNjU5MDAwMDI2QzAwMDAzMDAwMDAxMDQ4QzkwMTAwMDAwMDJFNUNCMQorOjEwNjVBMDAwMUY5MDAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM0NQorOjEwNjVCMDAwRjBCMTAxMDBGRjA3MDAxNUUwOEQwMTAwMDAwMDAwNDI2RQorOjEwNjVDMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwQjY4NEE4NDAxMgorOjEwNjVEMDAwODEzMjAwMDBCQTg0MDAwMzQ4QjEwMDAwMDAwMDAwMTRCQQorOjEwNjVFMDAwMkFDMDAxMDA3Nzg0QTI0MDI1NkMwMDAwMDAwMDAwNDExMQorOjEwNjVGMDAwMzlDMDAxMDAwNDAwMjAxMzM4NkMwMDAwNDAwMDNENDMwNgorOjEwNjYwMDAwMzlFMDAxMDAwMDAwMDAwQjI1QjAwMTAwMDAwMDAwRjg5NworOjEwNjYxMDAwMTJCMDAxMDA3Nzg0MDBGMDMwQjAwMDAwMDQwMEEyNUNFQQorOjEwNjYyMDAwMUY3QzAwMDAwMDgwMDAxOTQyQzkwMTAwQzg4NDIyNDA3QworOjEwNjYzMDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTk1QgorOjEwNjY0MDAwNjJERDAxMDBDNTg0QTg0MDgxMzIwMDAwMjM4MzAwODhGOAorOjEwNjY1MDAwMUNCMDAwMDBGMzk0MDA0MDJCMzAwMTAwMTgwMDJFMDMwMgorOjEwNjY2MDAwNDhCMTAxMDBDQzg0MjI1MDJGN0MwMDAwMDAwMDAwNTY2RAorOjEwNjY3MDAwMTc5MDAxMDAwNzAwMDAxNzk4ODgwMTAwQ0Y4NEEyNDFGRAorOjEwNjY4MDAwOTk2QzAwMDAwMDAwMDA1NTE3OTAwMTAwRDI4NDIyNDM0RAorOjEwNjY5MDAwMkY3QzAwMDAwMDAwMDA1NDE3OTAwMTAwMTYwMDIwMUQwMAorOjEwNjZBMDAwRTRCMTAxMDBENDg0QTM0MDI3NkMwMDAwRDY4NDYwNUY2RAorOjEwNjZCMDAwMTc5MDAwMDAwMDg0MDAwQjE2REMwMTAwMDAwMDYwMTMzRQorOjEwNjZDMDAwMTY5NDAxMDAwMDk3MDA1RTA1MTAwMTAwMDQwMEEyNDAyRQorOjEwNjZEMDAwMEY2QzAwMDAwNjg4QTI1RjJGN0MwMDAwMTQ4MDAwMDM2RQorOjEwNjZFMDAwNDJDOTAxMDAwMDAwMDBGMjAyQjAwMTAwODY5MzAwMDFERgorOjEwNjZGMDAwMzg0MzAxMDAwNjg4MDA0MDgxQjIwMDAwMDQwMEEyMDM3NAorOjEwNjcwMDAwNDg2RDAwMDAwNDAwMjI0RDc1N0QwMDAwMDAwMDAwNDAyRgorOjEwNjcxMDAwODNCMDAxMDAwMDAwMDA0RDYxQjEwMTAwMDAwMDAwMTZDRgorOjEwNjcyMDAwODBCMjAxMDAwNDAwMjc0MDExNkMwMDAwMDAwMDAwMTYzOAorOjEwNjczMDAwNjJCMTAxMDBFMzg0QTg0MDgxMzIwMDAwMDAwMDAwMDgzQgorOjEwNjc0MDAwNjJCMTAxMDBFNTg0QTg0MDgxMzIwMDAwRjA4NDIyMTM4OAorOjEwNjc1MDAwODI2QzAwMDA0MDAwM0Q0MzgzRTAwMTAwMDAwMDAwRjgyRgorOjEwNjc2MDAwMTBCMDAxMDAwMDAwMDBGMDJDQjAwMTAwMDAwMDAwMTY4NQorOjEwNjc3MDAwNjJCMTAxMDBFQjg0QTg0MDgxMzIwMDAwMDAwMDAwMDhGMworOjEwNjc4MDAwNjJCMTAxMDBFRDg0QTg0MDgxMzIwMDAwRTc4NDAwNDEzRAorOjEwNjc5MDAwODNDMDAwMDAwMDAwMTU0MDgxQjIwMTAwMDA4MjAwQTYwNQorOjEwNjdBMDAwMDRCMDAxMDBBMDk4MDA0MDQ3OTkwMTAwMzAwNTAwNDE2NQorOjEwNjdCMDAwODkzMDAxMDBBNTk1MDA1Mjk1MzAwMTAwQUM5NTAwNEI0MQorOjEwNjdDMDAwMDJCMDAwMDAwNjg4MDA0MDBGQjAwMDAwMDAwMDAwNUYyQgorOjEwNjdEMDAwMDE4MDAxMDAxMDAwMDAwMDBFRjQwMTAwMDQwMDI2NDBCQQorOjEwNjdFMDAwODEzMjAwMDAzRjAwMDAwMDAwODgwMTAwMDUwNDAwNDBFNQorOjEwNjdGMDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwMDMwMDAwMDcxMAorOjEwNjgwMDAwMUFGNDAxMDAxODk1MDAwNzE2MzAwMTAwMDg4NTIyNDE4RQorOjEwNjgxMDAwODE2QzAwMDAwMzg1MjI0MjgxNkMwMDAwMjM4MzAwODg4NAorOjEwNjgyMDAwMUNCMDAwMDAwNzg1MjI1RjBGN0MwMDAwMDAwMDAwNUZBNQorOjEwNjgzMDAwMEY4MDAxMDAwNjA0MDA0MDg5OTgwMTAwMDk5OTAwMDBCQQorOjEwNjg0MDAwOEEzMDAxMDBGMDg3MDA0MDBGQjAwMDAwMTc4NUEyNUE3RgorOjEwNjg1MDAwMUY3QzAwMDAwNDAwQTI1QTFGN0MwMDAwMDBCNTAwMEQ0MAorOjEwNjg2MDAwNDJDOTAxMDAwNDAwMjIwQkU2N0QwMDAwMDBCNzAwMERDNAorOjEwNjg3MDAwNDJDOTAxMDAwNDAwMjIwQkU2N0QwMDAwNzA5NDAwNDAzNAorOjEwNjg4MDAwODEzMjAxMDAxNzg1MjIyMDg1NkMwMDAwMTI4NTlDMEY0MworOjEwNjg5MDAwODAzMjAwMDAyMzgzMDA4ODFDQjAwMDAwOEQ5NTAwNUNDRQorOjEwNjhBMDAwMUYwMDAxMDBDODk3MDA0MjYxMzEwMTAwMjM4MzAwODg2NgorOjEwNjhCMDAwMUNCMDAwMDA5MDA0MDAwNzk2MzAwMTAwMDAwMDJEMDU3OAorOjEwNjhDMDAwNDhCMTAxMDAwNDAwQTI0QkUxN0QwMDAwMDAwMDJEMDU0RAorOjEwNjhEMDAwNDhCMTAxMDAwMDAwMDBGMDE4QjAwMTAwMUM4NTIyM0EwOAorOjEwNjhFMDAwMDE2QzAwMDAwMDAwMDAwMDhFQjAwMTAwNkM4OTAwNDBDNworOjEwNjhGMDAwMDFCMDAwMDAwMDAwMDA0MDgxQjIwMTAwMkUwMDJEMDUxMworOjEwNjkwMDAwNDhCMTAxMDAyMTg1QTI0MEU3NkQwMDAwMEEwMDAwNDA2NworOjEwNjkxMDAwOEY5ODAxMDA2Qzg5MDA0MDAxQjAwMDAwMUQ5NDAwNDA3OAorOjEwNjkyMDAwODEzMjAxMDAwNDAwMjIwMDgwMzIwMDAwMzUwNDAwNDA2MgorOjEwNjkzMDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwOEQ5NjAwOTUyMAorOjEwNjk0MDAwMDMzMDAxMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDJEMDNFOQorOjEwNjk1MDAwNDhCMTAxMDAyMjAwMkRGMDJFQjAwMTAwMDQwMDFGMTdFNQorOjEwNjk2MDAwODAzMjAwMDAyODIwMDBBNjk2QjAwMTAwMkU4NTIyMTc1NAorOjEwNjk3MDAwOTYwNDAwMDA1Qjk3MDA0Qjk1MzAwMTAwNkM4OTAwNEMzOQorOjEwNjk4MDAwOEZCMDAwMDAzMDg1ODMxNzgwMzIwMDAwMDAwMDAwNDQ4MworOjEwNjk5MDAwNDNDMTAxMDAzMjg1ODUxNzgwMzIwMDAwMDAwMDAwNDhBNQorOjEwNjlBMDAwNDNDMTAxMDAyODAwMDBGNjAyQ0MwMTAwMTIwMDAwQTE0MgorOjEwNjlCMDAwMkFDODAxMDA1RDk2MDA0MDgxMzIwMTAwQUY5MzAwNDE3QQorOjEwNjlDMDAwODEzMDAxMDA2Qzg5MDA0MDgxQjIwMDAwMDAwMDAwMDFBQworOjEwNjlEMDAwMDBEMDAxMDAwMDAwMkUxMDQ4QjEwMTAwMjgwMDAwNDA0NgorOjEwNjlFMDAwRjE5OTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDA3NworOjEwNjlGMDAwRjBCMTAxMDAzQzg1NjQ0NzYxMzEwMDAwMDAwMDAwMTBFNworOjEwNkEwMDAwNjJCMTAxMDAzRDg1QTgxQkUwMzEwMDAwMjM4Mzc0ODgzQQorOjEwNkExMDAwMUNCMDAwMDAwMDAwMDA0NTAzRTAwMTAwMDQwMEEwMDVEOAorOjEwNkEyMDAwMDM2QzAwMDAwNDAwQTMwOTAzNkMwMDAwMDgwMDJEMDNBMAorOjEwNkEzMDAwNDhCMTAxMDA2RTg1MDFGQjA4MzAwMDAwRDg4NTg3RkI1NgorOjEwNkE0MDAwMjIzMDAwMDAwMDAwMDBGQTBFQjAwMTAwMDAwMDAwRjg0MworOjEwNkE1MDAwMTRCMDAxMDAwMzAwMDAwNzFBRjQwMTAwMTg5NTAwMDdBNAorOjEwNkE2MDAwMTYzMDAxMDA1Rjg1MjI0MTgxNkMwMDAwNEU4NTIyNDI3NAorOjEwNkE3MDAwODE2QzAwMDAyMzgzMDA4ODFDQjAwMDAwNUU4NTIyNUZDQgorOjEwNkE4MDAwMEY3QzAwMDAzODAwMDAwNDdFODkwMTAwNTQ4NUE2NUY1OQorOjEwNkE5MDAwMEYwMDAwMDAzMTk0MDA0MDA1MzAwMTAwMEEwNDAwNDA1RQorOjEwNkFBMDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwNUI4NTAwNDA0NworOjEwNkFCMDAwODFCMjAwMDAxMzAwMDA0MDg3OTgwMTAwMDAwMDJEMDMwMAorOjEwNkFDMDAwNDhCMTAxMDAwQzAwMkRGMDgyQjAwMTAwMDAwMDAwRjA4MAorOjEwNkFEMDAwODRCMDAxMDAyQzk2MDA0MDA1MzAwMTAwMDgwNDAwNDBGRAorOjEwNkFFMDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwMDQwMEEyNUMyNQorOjEwNkFGMDAwMUY3QzAwMDAwMDAwMDA1QzFGOTAwMTAwRjA4NzAwNDAzOAorOjEwNkIwMDAwMEZCMDAwMDA2Qzg1QTI1QTFGN0MwMDAwMDQwMEEyNUEzRQorOjEwNkIxMDAwMUY3QzAwMDAwMEI1MDAwRDQyQzkwMTAwMDQwMDIyMEJEQgorOjEwNkIyMDAwRTY3RDAwMDAwMEI3MDAwRDQyQzkwMTAwMDQwMDIyMEIwMQorOjEwNkIzMDAwRTY3RDAwMDA3MDk0MDA0MDgxMzIwMTAwNkM4NTIyMjBDNworOjEwNkI0MDAwODU2QzAwMDA2OTg1OUMwRjgwMzIwMDAwMjM4MzAwODhEQgorOjEwNkI1MDAwMUNCMDAwMDA4RDk1MDA1QzFGMDAwMTAwQzg5NzAwNDIyQQorOjEwNkI2MDAwNjEzMTAxMDAyMzgzMDA4ODFDQjAwMDAwOTAwNDAwMDdGRAorOjEwNkI3MDAwOTYzMDAxMDAwMDAwMkQwNTQ4QjEwMTAwMDAwMDAwRjAzMgorOjEwNkI4MDAwMThCMDAxMDA3MDg1MjEwNDgwMjAwMDAwNzE4NTAwNDA0QworOjEwNkI5MDAwMTBDOTAwMDBBNDg4MDA0QjgxQjAwMDAwOUY4NTAwNDMwRAorOjEwNkJBMDAwODFCMDAwMDBBMzg1MDBGQjIyQjAwMDAwQTQ4ODAwNDE1MgorOjEwNkJCMDAwODFCMDAwMDA2Qzg5MDA0RThGQjAwMDAwOTQ4NTAwNUFBRgorOjEwNkJDMDAwOEZCMDAwMDA3OTg1MDA0NzhGQjAwMDAwQTQ4ODAwNTM4MworOjEwNkJEMDAwODFCMDAwMDBBNDg4MDA1NjgxQjAwMDAwMzIwMDJEMDU2RAorOjEwNkJFMDAwNDhCMTAxMDAwNzA0MDA0MDg5OTgwMTAwMDk5OTAwMDA5QworOjEwNkJGMDAwOEEzMDAxMDAzQzA0MDA0MDg5OTgwMTAwMDk5OTAwMEE4QworOjEwNkMwMDAwOEEzMDAxMDAzRDA0MDA0MDg5OTgwMTAwMTgwMDAwMTFGRAorOjEwNkMxMDAwOEFFNDAxMDAwOTk5MDBGMjhBMTQwMTAwMDAwMDAwNDA5MgorOjEwNkMyMDAwODFCMjAxMDA2Qzg5QTAwQUU0NkQwMDAwODc4NUEyNDE1MQorOjEwNkMzMDAwMTk3QzAwMDA4Njg1MjIwQTgwMzIwMDAwNkM4OTAwNTM4RQorOjEwNkM0MDAwOEZCMDAwMDA2Qzg5MDA1NDhGQjAwMDAwOTA4NTIyMEEzQworOjEwNkM1MDAwODAzMjAwMDA4QTg1QTIwQUU0NkQwMDAwNkM4OTAwNUQyNAorOjEwNkM2MDAwOEZCMDAwMDAwMDAwMDBGMjgwQjAwMTAwMDAwMDAwMEFCOAorOjEwNkM3MDAwODBEMDAxMDA4RTg1QTA5MTgxNkMwMDAwNkM4OTAwNUUzRgorOjEwNkM4MDAwOEZCMDAwMDAyNTAwMDA0MDhGOTgwMTAwNkM4OTAwNDAwMworOjEwNkM5MDAwODFCMjAwMDA5Mjg1MjA5MUU1NkQwMDAwNkM4OTAwNTQ1RQorOjEwNkNBMDAwOEZCMDAwMDAyMTAwMDA0MDhGOTgwMTAwNkM4OTAwNDBFNworOjEwNkNCMDAwODFCMjAwMDAzMjAwMkQwNTQ4QjEwMTAwMDcwNDAwNDBGOAorOjEwNkNDMDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwM0MwNDAwNDBDNQorOjEwNkNEMDAwODk5ODAxMDAwOTk5MDAwQThBMzAwMTAwM0QwNDAwNDBBQQorOjEwNkNFMDAwODk5ODAxMDAwOTk5MDBGMjhBMzAwMTAwMDAwMDAwNDBGMworOjEwNkNGMDAwODFCMjAxMDA2Qzg5QTAwQUU0NkQwMDAwMjQwMDAwNDAwQworOjEwNkQwMDAwOEY5ODAxMDA2Qzg5MDA0MDgxQjIwMDAwMzcwMDJEMDU4QQorOjEwNkQxMDAwNDhCMTAxMDAwNDAwMDBGMzgyRjQwMTAwQTQ4OEEwNDJGRAorOjEwNkQyMDAwODM2QzAwMDBBNDg4MDA1NDgxQjAwMDAwMDAwMDAwRjJEMQorOjEwNkQzMDAwMEVCMDAxMDAwNDAwMjM0MDBGNkMwMDAwMDQwMDIwQUFFNAorOjEwNkQ0MDAwMEY2QzAwMDAwOTA0MDA0MDg5OTgwMTAwMDk5OTAwMDBCNworOjEwNkQ1MDAwOEEzMDAxMDAwMzAwMDAwNzFBRjQwMTAwMDBCNTAwMEQ5RAorOjEwNkQ2MDAwNDJDOTAxMDAwNzAwMDAwNzE2ODgwMTAwQjE4NTIyMEIwNworOjEwNkQ3MDAwRTY3RDAwMDAwQTAwMDA0MDg3OTgwMTAwN0Y5ODAwNDBFRgorOjEwNkQ4MDAwODEzMjAxMDAwNDAwMUMwRjgwMzIwMDAwMDAwMDAwNDAyRQorOjEwNkQ5MDAwMEZCMDAxMDBGMDg3MDA1QzFGOTAwMDAwQzM4NTIyNTBGNworOjEwNkRBMDAwRkQ3RjAwMDBCRTg1QTI1NEZEN0YwMDAwQjY4NTIyNTUwMAorOjEwNkRCMDAwRkQ3RjAwMDA4MjAwMDA0MDg3OTgwMTAwQUQ4NTAwNDAwMworOjEwNkRDMDAwODFCMjAwMDAwNDAwMjI1M0ZEN0YwMDAwMTQ4MDAwMDMwNAorOjEwNkREMDAwNDJDOTAxMDAwMDAwMDBGMDk2QjAwMTAwMTAwMDAwNEIxNQorOjEwNkRFMDAwODBGNDAxMDAwQ0JDMDA0MDg3OTgwMTAwQkU4NTIyNDM1RQorOjEwNkRGMDAwODA2QzAwMDBGRkZGMDA0QjgwODgwMTAwQUQ4NUEyNDMzRQorOjEwNkUwMDAwODA2QzAwMDA3Qzk2MDA0MDQ3OTkwMTAwQkY4NTQ2NDA5OQorOjEwNkUxMDAwODEzMjAwMDBDMjg1QTBGMDMwNkYwMDAwQjQ4NTFFNDBCMgorOjEwNkUyMDAwODFCMjAwMDAwMDAwMUU0MTMxQzMwMTAwN0Y5NDAwNDA4OAorOjEwNkUzMDAwMjUzMDAxMDBDNzg1OUMwRjgwMzIwMDAwMjM4MzAwODgyNQorOjEwNkU0MDAwMUNCMDAwMDA4RDk1MDA1QzFGMDAwMTAwMTQ4MDAwMDM0MQorOjEwNkU1MDAwNDJDOTAxMDAwNDAwMjI1QTFGN0MwMDAwMDAwMDAwRjAxQgorOjEwNkU2MDAwOTZCMDAxMDAwMDAwMkYwNTQ4QjEwMTAwMTAwMDAwMDc5NgorOjEwNkU3MDAwMThFNDAxMDAwMDA4MDAwQ0UwOTkwMTAwOTAwNDAwMDdFQworOjEwNkU4MDAwOTYzMDAxMDAwMEI1MDAwRDQ2QzkwMTAwQ0Y4NTMwNDBBNQorOjEwNkU5MDAwODEzMjAwMDAwNDAwQTIwQkU2N0QwMDAwMDAwMDAwMEIyMAorOjEwNkVBMDAwRTY5MTAxMDAwMDAyMDBBMTQ2QzkwMTAwMDQwMEEyMEIwNgorOjEwNkVCMDAwRTY3RDAwMDAwMDAwMDAwQkU2OTEwMTAwMDQwMDJFMDVCNQorOjEwNkVDMDAwNDhCMTAxMDAwMDAwMTA0MEUxQjEwMTAwQTQ4ODAwNDA3OQorOjEwNkVEMDAwODFCMDAwMDAwMDAwMDBGQjI4QjAwMTAwMDAwMDAwRkJCMgorOjEwNkVFMDAwODZCMDAxMDAwMDAwMDBGODE0QjAwMTAwRTM4NTIyNDZERQorOjEwNkVGMDAwMjM3QzAwMDAwNDAwMjI0MDg3NkMwMDAwREY4NTIyNDBENAorOjEwNkYwMDAwODc3QzAwMDAwMDAwMDA0ODFGOTAwMTAwRTE4NTIyNDFCRAorOjEwNkYxMDAwODc3QzAwMDAwMDAwMDA0NzFGOTAwMTAwRTM4NTIyNDJBQgorOjEwNkYyMDAwODc3QzAwMDAwMDAwMDA0NTFGOTAwMTAwMDQwMDIyNDAwMworOjEwNkYzMDAwMDk3QzAwMDBFNDg1NjYxQjJDMzAwMDAwMDAwMDAwQTBFNgorOjEwNkY0MDAwMTNCMDAxMDAwMDAwNzY0MTQxQzMwMTAwMTY4NjIzOTI3MAorOjEwNkY1MDAwMTU2QzAwMDAxNjg2QTI0NTFGN0MwMDAwMUM4NjIyNEI4MworOjEwNkY2MDAwRkQ3RjAwMDAxNzAwMDBEMEEyQzkwMTAwMDAwMDAwNDAxMgorOjEwNkY3MDAwMjdCMDAxMDAwMjAwMDAwQTI0QzgwMTAwQkY5NDAwNDBBRAorOjEwNkY4MDAwMEYzMDAxMDAxNDg2MjIwODQwMzAwMDAwMDAwMDAwNDE0QworOjEwNkY5MDAwQTNDMTAxMDBGMDA3MDAxMjI0Q0MwMTAwRUQ4NUFBNDEzNQorOjEwNkZBMDAwMjc0MDAwMDAwNDAwQTM0OTI3NkMwMDAwMDEwMDAwMTNFMworOjEwNkZCMDAwODBDQzAxMDAwRTg2MjY0MDIzMzAwMDAwMDAwMDAwNDBGNworOjEwNkZDMDAwODNCMDAxMDA2MDAwMDAwMzg0QzgwMTAwMTAwMDAwMTBCRAorOjEwNkZEMDAwNDhDRDAxMDAxNzAwMDBEMEEyQzkwMTAwRkI4NUEyNDBFNgorOjEwNkZFMDAwODM2QzAwMDAwNzg2MDA0MTgzQjAwMDAwMDA4MDAwNDJFRgorOjEwNkZGMDAwNDQ5OTAxMDAwMDAwNjgyMTM4OTYwMTAwMDAwMDJFNTBERAorOjEwNzAwMDAwNDlDMTAxMDAwMDg2QTI0NDIzNkMwMDAwMzAwMDAwMDM0NworOjEwNzAxMDAwNDhDOTAxMDAwMDAwMDA0NEYxQjEwMTAwMEMwMDAwMjA0QgorOjEwNzAyMDAwRjBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwQTAwMDAwQTQwQgorOjEwNzAzMDAwNjJERDAxMDAwMzg2QTg0MkUwMzEwMDAwMDAwMDAwNDQ0OAorOjEwNzA0MDAwODVDMDAxMDAwMDAwMDA0MTIzQzAwMTAwMDAwMDAwNDE5NAorOjEwNzA1MDAwQTNDMTAxMDBGOTg1QTI0MTgxNTAwMDAwMEU4NjIyNDBBMworOjEwNzA2MDAwMjM2QzAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTBFQQorOjEwNzA3MDAwNjJERDAxMDAwQjg2QTg0MDgxMzIwMDAwMjM4MzAwODg3NgorOjEwNzA4MDAwMUNCMDAwMDAwQjA0MDA0MDg5OTgwMTAwMDk5OTAwMDAyMQorOjEwNzA5MDAwOEEzMDAxMDAwMDAwMDAwMzQ4QjEwMTAwRUUwNzAwNDAwMworOjEwNzBBMDAwMjU5ODAxMDAxNzAwMDBEMDJBQzgwMTAwMjc4NjAwMTc4NAorOjEwNzBCMDAwMTBCMDAwMDAwQTk3MDA0MDgxMzIwMTAwMUM4NjAwNDA5OQorOjEwNzBDMDAwODFCMjAwMDBCRjk0MDA5MjI1MzAwMTAwMDAwMDAwNDAxMgorOjEwNzBEMDAwMzFCMDAxMDAwQjA0MDA0MDg5OTgwMTAwMDk5OTAwMDBCQgorOjEwNzBFMDAwOEEzMDAxMDAxQzg2MjIwODJFMzAwMDAwMjc4NjAwNDFDRAorOjEwNzBGMDAwMjdCMDAwMDA4MDgwMDBBNjA0QjAwMTAwMDYwMDAwNDAxOAorOjEwNzEwMDAwODc5ODAxMDA3Rjk4MDAwQThDMzAwMTAwMDQwMDFDMEY1MgorOjEwNzExMDAwODAzMjAwMDAwMDAwMDA0MDBGQjAwMTAwMDAwMDAwNUM2MQorOjEwNzEyMDAwMUY5MDAxMDAwNDAwQTA5RjEzNkMwMDAwMjY4NjIyOUY4MAorOjEwNzEzMDAwMTM2QzAwMDAwMjAwMDA4ODFDQ0MwMTAwMjc4MzAwNDA3MworOjEwNzE0MDAwODFCMjAwMDBGMDg3MDA0MTNGQzMwMDAwMDAwMDAwNDAxMgorOjEwNzE1MDAwMEZCMDAxMDAyODAwMDAwMTgwQ0UwMTAwM0I4NjJBNDBDQworOjEwNzE2MDAwODEzMDAwMDAwMDgwMDAxMDQ0QzkwMTAwNDAwMDAwNDA1MAorOjEwNzE3MDAwODE5ODAxMDAzMDg2QTI0ODFGN0MwMDAwMzA4NkEyNDcxQgorOjEwNzE4MDAwMUY3QzAwMDAzMDg2QTMwNzAzNkMwMDAwODAwMDAwNDBENQorOjEwNzE5MDAwODE5ODAxMDAzMzg2QTM0MDAyNkMwMDAwMjgwMDAwMDFBMgorOjEwNzFBMDAwRjBDRDAxMDAzNTg2MDA0MDBGQjAwMDAwMjgwMDAwNDBGRgorOjEwNzFCMDAwRjBDRDAxMDAwNDAwMDA0MDBFQ0MwMTAwMjgwMDAwMDNDNworOjEwNzFDMDAwRjBDOTAxMDAyODAwMDAwMEYwQzkwMTAwMDAwMDAwMTYwRAorOjEwNzFEMDAwRTBCMTAxMDAwMDAwMDA0NzYxQjEwMTAwMjAwMDAwMTA5MworOjEwNzFFMDAwNjJERDAxMDAzOTg2QTg1QzFGMTAwMDAwMDQwMDIyMEEzRAorOjEwNzFGMDAwODAzMjAwMDAwNDAwQTIwMzQ4NkQwMDAwMDAwMDAwNDAzRgorOjEwNzIwMDAwNDM5OTAxMDAwMDAwMDBGMDA4QjAwMTAwQTAwMTJENDBFQQorOjEwNzIxMDAwMDBDMDAxMDAxQzg3MjIwRjQyMDUwMDAwNEU4NjlDMEYxMworOjEwNzIyMDAwODAzMjAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTAyMAorOjEwNzIzMDAwNDJDOTAxMDA0OTg2MjI0MEUzNkQwMDAwMDAwMDAwNDc3QQorOjEwNzI0MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNDY4NkE4NDBFNworOjEwNzI1MDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwNEU4NjIyMDc4NAorOjEwNzI2MDAwODAzMjAwMDAwMDAwMDAwMzQyQjEwMTAwMDAwMDAwMDc2RQorOjEwNzI3MDAwNDJDMTAxMDAwMDgwMDBBMTQ2OTkwMTAwMDAwMDAwNUZBQQorOjEwNzI4MDAwRTE5MTAxMDBDMDA2QTI0NTFGN0MwMDAwMTAwMDAwMDMzMAorOjEwNzI5MDAwNDhDOTAxMDAwMDAwMkQ1NDI5QzAwMTAwMDAwMDAwRjg3OQorOjEwNzJBMDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDAwMDAwRjg3MAorOjEwNzJCMDAwMEVCMDAxMDAwNDAwMjY0MDgxMzIwMDAwMDQwMEEyNUZFRAorOjEwNzJDMDAwMEY3QzAwMDAzRTAwMDAxNDgwQ0UwMTAwMDQwMEFBNDBBNAorOjEwNzJEMDAwODEzMjAwMDA0MjAwMDAwMzBBQzgwMTAwMEMwMDAwQTQzMworOjEwNzJFMDAwMENDODAxMDAxNjk1MDA0MDgxMzIwMTAwMDAwMDAwMTQxNgorOjEwNzJGMDAwMDJCMDAxMDAwMDAwMDAxNDI0RDAwMTAwMDAwMDAwMTRCRQorOjEwNzMwMDAwMTBDMDAxMDAxMjAwMDAwODEwQzgwMTAwMDAwMDAwNDA3OQorOjEwNzMxMDAwMjNCMDAxMDBGRTdGMDAwNTQ0QzkwMTAwMDQwMEEyQTJDMQorOjEwNzMyMDAwODYwNjAwMDAwMDAwMDAwQUU0QjEwMTAwN0M4NjIyMDEwQworOjEwNzMzMDAwODAzMjAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDJFQTQ0NQorOjEwNzM0MDAwODBCMDAxMDAwMDAwMDAxMDQ4QzEwMTAwNjk4NkEzMDc1OQorOjEwNzM1MDAwMDI2QzAwMDA2QTg2NjgwMTFBQjAwMDAwMDAwMDY4MDcyRAorOjEwNzM2MDAwMUFCMDAxMDAwMDAwMDAwRDAyRDAwMTAwMDAwMDAwMDU2RAorOjEwNzM3MDAwRjBCMTAxMDAwMDAwMDAwQ0YwQjEwMTAwMDAwMDAwMDJCQgorOjEwNzM4MDAwRTBCMTAxMDAwMDAwMDAwRDBBQzAwMTAwNzY4NjIyNDAzNQorOjEwNzM5MDAwMDM2QzAwMDA3Njg2MjI0MjIzNkMwMDAwMDAwMDAwNDE0RQorOjEwNzNBMDAwMjNDMDAxMDAwMDAwMDA0NzYxQjEwMTAwQTAwMDAwQTQ1QgorOjEwNzNCMDAwNjJERDAxMDA5Qzg2Mjg0MDgxMzIwMDAwNzM4NjAwNDAxNworOjEwNzNDMDAwODFCMjAwMDAwMDAwMDAxMDgwQzAwMTAwMDAwMDAwNDdGMgorOjEwNzNEMDAwNjFCMTAxMDAwMDAwMDA0MDYyQjEwMTAwNzg4NkE4NDA2MAorOjEwNzNFMDAwMjMzMDAwMDAyMzgzMDA4ODFDQjAwMDAwOUM4NjAwNDBFRQorOjEwNzNGMDAwODFCMjAwMDAwMDAwM0M0NDIzRTAwMTAwMDAwMDAwQTQzMgorOjEwNzQwMDAwODZCMDAxMDAwMDAwMkUxMDQ4QzEwMTAwODE4NkEzMTI0MQorOjEwNzQxMDAwMEU2QzAwMDA4Mjg2NjAwNzFBQjAwMDAwMDAwMDYwMTI0NworOjEwNzQyMDAwMUFCMDAxMDAwMDAwNjgwRDE2OTQwMTAwRkZGRjAwMEI2OAorOjEwNzQzMDAwMTZEODAxMDAxQjk5MDAwODk4MzAwMTAwMDAwMDY4MDg2OAorOjEwNzQ0MDAwM0U5NjAxMDAwMDAwMDAwQ0YwQjEwMTAwMDAwMDAwMDJCNworOjEwNzQ1MDAwRTBCMTAxMDAwMDAwMDAxMDg2QzAwMTAwMDAwMDAwNDZGRAorOjEwNzQ2MDAwNjFCMTAxMDAyMDAwMDA0MzYyREQwMTAwOEE4NkE4NUM1MgorOjEwNzQ3MDAwMUYxMDAwMDBCQzg2MjIwRDE0NkMwMDAwOTA4NjIyMERBNworOjEwNzQ4MDAwMjQ2QzAwMDAwMDAwMDAwRDEwQzAwMTAwOTU4NjAwMEQ2NgorOjEwNzQ5MDAwMjREMDAwMDAwNDAwMjI0QkZEN0YwMDAwMDAwMDAwNDFDQQorOjEwNzRBMDAwMkJDMDAxMDAwMDAwMDAxNUEyQjEwMTAwMTAwMDAwMjA1NworOjEwNzRCMDAwMTBDODAxMDBGMDA3MDA0MDI1OTgwMTAwOTc4NjIyNDI3RAorOjEwNzRDMDAwMjM2QzAwMDA5Qzg2MDA0MTIzQzAwMDAwMDAwMDAwNDZBMQorOjEwNzREMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOTg4NkE4NUNFNworOjEwNzRFMDAwMUYwMDAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwNDA0MworOjEwNzRGMDAwMjNCMDAxMDBCQzg2MjIwRDE0NTAwMDAwQkI4NkEyMERGMworOjEwNzUwMDAwMEU1MDAwMDBBODg2MjI0NjFGN0MwMDAwMDAwMDAwNDZBNgorOjEwNzUxMDAwMUY4MDAxMDAzMDgwMDAxMDQyQzkwMTAwQTY4NjIyNDA3MQorOjEwNzUyMDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTA2MQorOjEwNzUzMDAwNjJERDAxMDBBMzg2QTg0MDgxMzIwMDAwMjM4MzAwODgxOQorOjEwNzU0MDAwMUNCMDAwMDAyMDgwMDAwMzQ2OTkwMTAwMDAwMDAwNUY4RAorOjEwNzU1MDAwRTE5MTAxMDAwMDAwMkQwNjQ4QjEwMTAwMDAwMDAwRjg5MworOjEwNzU2MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDQwMDIyRjA4RgorOjEwNzU3MDAwMEUzMDAwMDBBRTg2QTI1RjBGN0MwMDAwNjM4NjAwNENEOAorOjEwNzU4MDAwMERDMDAwMDAwMDAwMkU1RjBGODAwMTAwNjM4NjIzMDdGRQorOjEwNzU5MDAwMTQ2QzAwMDAwNDAwQTI0NjFGN0MwMDAwMzAwMDAwMTBBNAorOjEwNzVBMDAwNDhDOTAxMDAyNDAwMDA0MEYxOTkwMTAwMDAwMDAwMDNENworOjEwNzVCMDAwRjBCMTAxMDAwMDAwMDAwMEYwQjEwMTAwMDAwMDAwMTY3MQorOjEwNzVDMDAwRjBCMTAxMDAyNDAwMDAwMDAwQzgwMTAwMDAwMDAwNDdFNQorOjEwNzVEMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwQjg4NkE4NDZFOAorOjEwNzVFMDAwMUYxMDAwMDA2Mzg2MDAwMzBDQjAwMDAwNjM4NjAwMERDRQorOjEwNzVGMDAwMThDMDAwMDAwNDAwMkUxNDBBRDAwMTAwMTIwMDAwMDU3QgorOjEwNzYwMDAwNDhDRDAxMDBGRTdGMDAwNTQyQzkwMTAwMDQwMEEyQTQ4QworOjEwNzYxMDAwODYwNjAwMDAwNDAwQTJBMTg2MDYwMDAwMEMwMDJBRjJFMworOjEwNzYyMDAwRTBCMTAxMDBDNDg2MjI0MDMxNkMwMDAwMDAwMDYwMTgwNworOjEwNzYzMDAwMzg5NjAxMDAxRTAwMDA0MDQzOTkwMTAwMDA4MTAwRjZDOQorOjEwNzY0MDAwODBDRTAxMDBDODg2QTY0MDgxMzIwMDAwMDAwMDAwNDRDMAorOjEwNzY1MDAwNDNDMTAxMDBDQTg2MjIwQkVENkQwMDAwMDgwMDAwQTFBNQorOjEwNzY2MDAwNDJDOTAxMDAwMjAwMDBBMTQ2QzkwMTAwMDQwMEEyQTExNAorOjEwNzY3MDAwODYwNjAwMDAwRjAwMDBGQTk0ODgwMTAwMDQwMEEyNDU2RAorOjEwNzY4MDAwOTU2QzAwMDAwMjAwMDA0QTg2RTQwMTAwMDAwMDAwRjY0QworOjEwNzY5MDAwMEVCMDAxMDBENDg2MjI0NzFGN0MwMDAwMDQwMDFGNDM2NworOjEwNzZBMDAwMEU1MDAwMDBENDg2QTA0NjBGNDAwMDAwMDAwMDAwNDFBQworOjEwNzZCMDAwMEZDMDAxMDBEODg2MjI0ODFGN0MwMDAwMDAwMDAwNDA1NworOjEwNzZDMDAwOTFCMDAxMDAwNDAwMEZBMjQyMzEwMDAwREI4NjAwNDBBRgorOjEwNzZEMDAwODlCMDAwMDAwQzAwMDBBMjQyQzkwMTAwMDAwMDAwNDM3NAorOjEwNzZFMDAwODlCMDAxMDAwMDAwMDA0Mzk1RDAwMTAwMDAwMDAwRkNCQgorOjEwNzZGMDAwODJCMDAxMDBERTg2QTA0MTkwNDAwMDAwMDAwMDAwNDEwMQorOjEwNzcwMDAwOTFDMDAxMDBFMzg2MjI0NzFGN0MwMDAwRTM4NkEwNDM2RQorOjEwNzcxMDAwODk2QzAwMDBFMzg2MjA0NTg5NkMwMDAwRTM4NkEwNDE2NworOjEwNzcyMDAwMEU0MDAwMDAwMDAwMDA0MTBGQzAwMTAwMDAwMDAwNDFCOQorOjEwNzczMDAwODlDMDAxMDBEQjg2QTI0MTk1NTAwMDAwRjA4NjIyNDhGNgorOjEwNzc0MDAwMUY3QzAwMDAxMDAwMDA0ODkyRjQwMTAwRkZGRjAwNDg3OQorOjEwNzc1MDAwOTA4ODAxMDBFQTg2OTA0ODkyNDAwMDAwMDAwMDAwNDFCNQorOjEwNzc2MDAwOTNDMDAxMDAwQTAwMDBBMjQ0QzkwMTAwMDAwMDY2MjA4NQorOjEwNzc3MDAwOTNBNDAxMDAwQTAwMDA0MzgwQ0MwMTAwMDAwMDAwQTI5NQorOjEwNzc4MDAwODBDMDAxMDAwNDAwQTI0MDQyNkQwMDAwMDQwMEEyQTFEQworOjEwNzc5MDAwODYwNjAwMDAwNDAwQTI0NjFGN0MwMDAwMUI5OTAwMTcwQgorOjEwNzdBMDAwOTgzMDAxMDBGRjA3MDAxNzdFODkwMTAwMDQwMEE2NDAwMQorOjEwNzdCMDAwODEzMjAwMDAzMDgwMDAxMDQ0QzkwMTAwMTIwMDAwMTQyMgorOjEwNzdDMDAwRjBDOTAxMDAwMDAwMDAxN0YwQjEwMTAwMTIwMDAwMDUyRgorOjEwNzdEMDAwRTBDRDAxMDAzMDAwMDAxMDgwQzgwMTAwMDAwMDAwNDQyRQorOjEwNzdFMDAwNjFCMTAxMDAyMDAwMDA0MDYyREQwMTAwRkE4NkE4NDA3RQorOjEwNzdGMDAwODEzMjAwMDAwNTg3MjI1QzFGN0MwMDAwMDAwMDNDNDRCMQorOjEwNzgwMDAwMjNFMDAxMDAwMDAwMkQxMDQ4QzEwMTAwMDQ4NzIyNDA0MAorOjEwNzgxMDAwRTM2RDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTA2RgorOjEwNzgyMDAwNjJERDAxMDAwMTg3QTg0MDgxMzIwMDAwMjM4MzAwODhDNworOjEwNzgzMDAwMUNCMDAwMDAwMDAwMDA1QzFGODAwMTAwMDg4N0EyNDcwOAorOjEwNzg0MDAwMUY3QzAwMDAwQzk1MDA0MDgxMzIwMTAwODg4NzAwMTdFMgorOjEwNzg1MDAwMTBCMDAwMDAxMzk1MDA0MDgxMzIwMTAwMDAwMDJGMDM5QQorOjEwNzg2MDAwNDhCMTAxMDAwQzg3QTAwNzE2NDAwMDAwMDAwMDAwNDE0RAorOjEwNzg3MDAwMTdDMDAxMDAwMDAwMDAwQkU0QjEwMTAwMDAwMDAwNTAzRgorOjEwNzg4MDAwMTdGMDAxMDAxMDg3OTBGMjE2NDAwMDAwMDAwMDAwNDE0MAorOjEwNzg5MDAwMTdDMDAxMDAwMDAwNjYyMDE3QTQwMTAwMTAwMDAwMTRBQQorOjEwNzhBMDAwMkFDODAxMDAwMDAwMDA1MDJCRTAwMTAwMDAwMDAwRjI5NworOjEwNzhCMDAwMkE5NDAxMDAzMDgwMDAxMDQyQzkwMTAwMUE4NzIyNDAzQQorOjEwNzhDMDAwRTM2RDAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTBDMQorOjEwNzhEMDAwNjJERDAxMDAxNzg3QTg0MDgxMzIwMDAwMjM4MzAwODgwMQorOjEwNzhFMDAwMUNCMDAwMDAwMDgwMDAxNzEwREMwMTAwODg4NzAwNDBGOQorOjEwNzhGMDAwODFCMjAwMDAyNDg3OUMwRjgwMzIwMDAwMDAwMDAwNUNGMQorOjEwNzkwMDAwMUY4MDAxMDAwMDgwMDAxMDQyQzkwMTAwMjQ4NzIyNDAyRQorOjEwNzkxMDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTA2RAorOjEwNzkyMDAwNjJERDAxMDAyMTg3QTg0MDgxMzIwMDAwMjM4MzAwODhBNgorOjEwNzkzMDAwMUNCMDAwMDAyOTg3MjIwNzgwMzIwMDAwMDAwMDAwMDNFRAorOjEwNzk0MDAwNDJCMTAxMDAwMDAwMDAwNzQyQzEwMTAwMDA4MDAwQTExNworOjEwNzk1MDAwNDY5OTAxMDAwMDAwMDA1RkUxOTEwMTAwMDQwMDJFMDM0MAorOjEwNzk2MDAwNDhCMTAxMDAwMDAwMDAwQUUwQjEwMTAwMkU4NzIyNDA2QQorOjEwNzk3MDAwMzE2QzAwMDAwQzAwMDA0MDQ1OTkwMTAwMDAwMDYwMThDNworOjEwNzk4MDAwMzg5NjAxMDAwMDAwMkUxMDQ4QjEwMTAwMDAwMDAwNTBBMAorOjEwNzk5MDAwRjFCMTAxMDAwMDAwMDAwOEYwQjEwMTAwMDAwMDAwMDM5NworOjEwNzlBMDAwRTBCMTAxMDAwMDAwMDA0NDYxQjEwMTAwMDAwMDAwMTBERQorOjEwNzlCMDAwNjJCMTAxMDAzMzg3QTg0MDIzMzAwMDAwMjM4MzAwODg5MAorOjEwNzlDMDAwMUNCMDAwMDAwMDAwMkQ1MjExQzAwMTAwMTAwMDAwMDM4NworOjEwNzlEMDAwNDhDOTAxMDAwMDAwMDBGODE4QjAwMTAwMDAwMDAwRjhEQworOjEwNzlFMDAwMDRCMDAxMDAwMDAwMDBGODBFQjAwMTAwMEMwMDAwQTQ3QgorOjEwNzlGMDAwMENDODAxMDAwNDAwMjI0MDE1NkMwMDAwMDAwMDNDNDQ0QgorOjEwN0EwMDAwMjNFMDAxMDAwMDAwMDBBNDg2QjAwMTAwMDAwMDJFMTA1OQorOjEwN0ExMDAwNDhDMTAxMDA0Mjg3QTMxMjBFNkMwMDAwNDM4NzY4MDcyQgorOjEwN0EyMDAwMUFCMDAwMDAwMDAwNjgxMjFBQjAwMTAwMUI5OTAwMDg4QgorOjEwN0EzMDAwOTgzMDAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwMTBGOQorOjEwN0E0MDAwODZDMDAxMDAwMDAwNjgwODNFOTYwMTAwMDAwMDAwMEM5RQorOjEwN0E1MDAwRjBCMTAxMDAwMDAwMDAwMkUwQjEwMTAwMDAwMDAwNDZBQQorOjEwN0E2MDAwNjFCMTAxMDAyMDAwMDA0MzYyREQwMTAwNEE4N0E4NUM4QgorOjEwN0E3MDAwMUYxMDAwMDA3Qzg3MjIwRDE0NkMwMDAwNTA4NzIyMEQxRgorOjEwN0E4MDAwMjQ2QzAwMDAwMDAwMDAwRDEwQzAwMTAwNTU4NzAwMEQ5RgorOjEwN0E5MDAwMjREMDAwMDAwNDAwMjI0QkZEN0YwMDAwMDAwMDAwNDFDNAorOjEwN0FBMDAwMkJDMDAxMDAwMDAwMDAxNUEyQjEwMTAwMTAwMDAwMjA1MQorOjEwN0FCMDAwMTBDODAxMDBGMDA3MDA0MDI1OTgwMTAwNTc4NzIyNDJCNgorOjEwN0FDMDAwMjM2QzAwMDA1Qzg3MDA0MTIzQzAwMDAwMDAwMDAwNDZEQQorOjEwN0FEMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNTg4N0E4NUMyMAorOjEwN0FFMDAwMUYwMDAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwNDAzRAorOjEwN0FGMDAwMjNCMDAxMDAwNDAwMjIwRDE0NTAwMDAwN0I4N0EyMEQ2QQorOjEwN0IwMDAwMEU1MDAwMDA2ODg3MjI0NjFGN0MwMDAwMDAwMDAwNDZERgorOjEwN0IxMDAwMUY4MDAxMDAzMDgwMDAxMDQyQzkwMTAwNjY4NzIyNDBBQQorOjEwN0IyMDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTA1QgorOjEwN0IzMDAwNjJERDAxMDA2Mzg3QTg0MDgxMzIwMDAwMjM4MzAwODg1MgorOjEwN0I0MDAwMUNCMDAwMDAyMDgwMDAwMzQ2OTkwMTAwMDAwMDAwNUY4NworOjEwN0I1MDAwRTE5MTAxMDAwMDAwMkQwNjQ4QjEwMTAwMDAwMDAwRjg4RAorOjEwN0I2MDAwMThCMDAxMDAwMDAwMDBGODA0QjAwMTAwMDQwMDIyRjA4OQorOjEwN0I3MDAwMEUzMDAwMDA2RTg3QTI1RjBGN0MwMDAwM0M4NzAwNEMzNworOjEwN0I4MDAwMERDMDAwMDAwMDAwMkU1RjBGODAwMTAwM0M4NzIzMDcxRQorOjEwN0I5MDAwMTQ2QzAwMDAwNDAwQTI0NjFGN0MwMDAwMzAwMDAwMTA5RQorOjEwN0JBMDAwNDhDOTAxMDAyNDAwMDA0MEYxOTkwMTAwMDAwMDAwMDNEMQorOjEwN0JCMDAwRjBCMTAxMDAwMDAwMDAwMEYwQjEwMTAwMDAwMDAwMTY2QgorOjEwN0JDMDAwRjBCMTAxMDAyNDAwMDAwMDAwQzgwMTAwMDAwMDAwNDdERgorOjEwN0JEMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwNzg4N0E4NDYyMQorOjEwN0JFMDAwMUYxMDAwMDAzQzg3MDAwMzBDQjAwMDAwM0M4NzAwMEQxNAorOjEwN0JGMDAwMThDMDAwMDAwNDAwQTI0NjFGN0MwMDAwODY4NzIyNUM5QgorOjEwN0MwMDAwMUY3QzAwMDAwMDAwMDA1QzFGODAwMTAwMDAwMDNDNDQ1RAorOjEwN0MxMDAwMjNFMDAxMDAwMDAwMkQxMDQ4QzEwMTAwODY4NzIyNDBBQQorOjEwN0MyMDAwRTM2RDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTA1QgorOjEwN0MzMDAwNjJERDAxMDA4Mzg3QTg0MDgxMzIwMDAwMjM4MzAwODgzMQorOjEwN0M0MDAwMUNCMDAwMDAwMDAwMDAxNzEwQjAwMTAwODg4NzAwNDA0MQorOjEwN0M1MDAwMkJCMDAwMDAwMDgwMDAwMzQ0OTkwMTAwMDAwMDAwMDRFNAorOjEwN0M2MDAwRTBCMTAxMDAwNDAwMjY0MDgxMzIwMDAwMDQwMEEwOUYyMgorOjEwN0M3MDAwMTM2QzAwMDA4Rjg3MjI5RjEzNkMwMDAwMDIwMDAwODhBNQorOjEwN0M4MDAwMUNDQzAxMDAyNzgzMDA0MDgxQjIwMDAwOTQ5ODAwNDE4MQorOjEwN0M5MDAwM0Y0MzAxMDAwMDAwMDA0MDhEQjAwMTAwMDAwMDAwNDBBMworOjEwN0NBMDAwMDVCMDAxMDA3Rjk4MDA0MDBGMzAwMTAwMDQwMEEyNUM4NQorOjEwN0NCMDAwMUY3QzAwMDAwNjg4MDA1QzFGOTAwMDAwMTAwMDAwMDA4MAorOjEwN0NDMDAwMEVGNDAxMDAwNDAwMjY0MDgxMzIwMDAwMDAwMDAwM0E1QQorOjEwN0NEMDAwMDE4NDAxMDA5Qjg3MjI1MDAxNkMwMDAwMEQwNDAwNDBDQworOjEwN0NFMDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwMDMwMDAwMDcwQgorOjEwN0NGMDAwMUFGNDAxMDAxODk1MDAwNzE2MzAwMTAwQTY4NzIyNDFFQQorOjEwN0QwMDAwODE2QzAwMDBBMTg3MjI0MjgxNkMwMDAwMjM4MzAwODhERgorOjEwN0QxMDAwMUNCMDAwMDBBNTg3MjI1RjBGN0MwMDAwMDAwMDAwNUYwMAorOjEwN0QyMDAwMEY4MDAxMDAwRTA0MDA0MDg5OTgwMTAwMDk5OTAwMDBBRAorOjEwN0QzMDAwOEEzMDAxMDBGMDg3MDA0MDBGQjAwMDAwQjM4N0EyNUFEQworOjEwN0Q0MDAwMUY3QzAwMDAwNDAwQTI1QTFGN0MwMDAwMDBCNTAwMEQzQgorOjEwN0Q1MDAwNDJDOTAxMDAwNDAwMjIwQkU2N0QwMDAwMDBCNzAwMERCRgorOjEwN0Q2MDAwNDJDOTAxMDAwNDAwMjIwQkU2N0QwMDAwNzA5NDAwNDAyRgorOjEwN0Q3MDAwODEzMjAxMDBCMzg3MjIyMDg1NkMwMDAwQjA4NzlDMEYwMAorOjEwN0Q4MDAwODAzMjAwMDAyMzgzMDA4ODFDQjAwMDAwOEQ5NTAwNUNDOQorOjEwN0Q5MDAwMUYwMDAxMDBDODk3MDA0MjYxMzEwMTAwMjM4MzAwODg2MQorOjEwN0RBMDAwMUNCMDAwMDA5MDA0MDAwNzk2MzAwMTAwMDAwMDJEMDU3MworOjEwN0RCMDAwNDhCMTAxMDAwMDAwMDBGMDE4QjAwMTAwMDAwMDAwMDAxMAorOjEwN0RDMDAwODBCMDAxMDBBNDg4QTI1RjgxNkMwMDAwQTgwMDJENDM1MAorOjEwN0REMDAwMTk4MDAxMDAzNzAwMkRGMDI0QjAwMTAwMDQwMDAwRjNFOQorOjEwN0RFMDAwOEVGNDAxMDAwRjAwMDBGMzkwODgwMTAwMDQwMEEzNDMwQgorOjEwN0RGMDAwOEY2QzAwMDAwNDAwQTM0MzkxNkMwMDAwQzQ4NzIyNDhFQworOjEwN0UwMDAwOEU2QzAwMDAzNjAwMDA0MDQzOTkwMTAwNTgwMDNENDM0RAorOjEwN0UxMDAwRTdFMTAxMDBDNDg3MUZGMDI0NkMwMDAwQzM4NzIzNDEwMQorOjEwN0UyMDAwOEY2QzAwMDBBNDg4MDA0NzgxQjAwMDAwQTQ4ODAwNDgzRgorOjEwN0UzMDAwODFCMDAwMDA0MDAwMDA0MDQzOTkwMTAwQjAwMDJERjBFNworOjEwN0U0MDAwMTRCMDAxMDBDOTg3MjIwQTkwNDAwMDAwNUY5ODAwNDBFQQorOjEwN0U1MDAwOTEzMDAxMDBBNDg4QTI0MDgwMzIwMDAwQjAwMDJENDU3RQorOjEwN0U2MDAwODFCMDAxMDBENTg3MjJGMDJDMzAwMDAwQTMwMDJEMzAxNgorOjEwN0U3MDAwODNCMDAxMDBBQzAwMkRGMzgyRTAwMTAwQ0Y4N0EzNDE2NQorOjEwN0U4MDAwMkM2QzAwMDAwMDAwMDAxNjgyQjAwMTAwOTgwMDJERjA1QworOjEwN0U5MDAwODJDMDAxMDA4ODAwMkRGMDgyRDAwMTAwMDAwMDAwRjJCNQorOjEwN0VBMDAwOThFODAxMDBBNDg4MjA0QzgyNkMwMDAwN0MwMDJENDFFMQorOjEwN0VCMDAwOThFODAxMDBBNDg4MjBGMDk4NkMwMDAwRjA4NzIyMEE1RQorOjEwN0VDMDAwODAzMjAwMDA0MDAyMDAwQzdFODkwMTAwRjA4N0E2NDA0RAorOjEwN0VEMDAwODEzMjAwMDBBNDg4MDA0OTgxQjAwMDAwMjAwMDAwQTY4MworOjEwN0VFMDAwODBCMDAxMDBERDg3MjI0MzIxNkYwMDAwMTM4MDAwNDAzNQorOjEwN0VGMDAwODBEQzAxMDBERTg3MDA0MDgxQjIwMDAwMUE4MDAwNDA3MworOjEwN0YwMDAwODBEQzAxMDBERTg3QTI1RTBCN0QwMDAwMDAwMDAwNDBFNworOjEwN0YxMDAwMDhCMTAxMDBFMDg3OUY4NTgwMzIwMDAwRTQ4NzAwNDBCRgorOjEwN0YyMDAwODFCMjAwMDAxQTgzMjI0MDU3N0QwMDAwMDEwMDAwNDAwQQorOjEwN0YzMDAwNTc5OTAxMDBFNDg3NDI0MDgxMzIwMDAwMDAwMDAwNDQ2QworOjEwN0Y0MDAwOTM5MzAxMDAwMTgzMUE1QjY5OTMwMDAwRUE4NzIyNDYzQworOjEwN0Y1MDAwRjM3RjAwMDBFQTg3QTI0MUYzN0YwMDAwQzY4MDAwNDI2MQorOjEwN0Y2MDAwOTczMzAxMDAwNDAwMDBDQjgxQzgwMTAwRUQ4NzIyNDA1NworOjEwN0Y3MDAwRjI3RjAwMDBDNjgwMDA2Rjk3MzMwMTAwRUY4NzIyNDAzOAorOjEwN0Y4MDAwNzM3RDAwMDBFMDgwMDA0MThCQjMwMDAwRTc4NzAwNDA3NAorOjEwN0Y5MDAwODFCMjAwMDBGNzg3OUMwRjgwMzIwMDAwMDA4MDAwMTA0MworOjEwN0ZBMDAwNDJDOTAxMDBGNzg3MjI0MEUzNkQwMDAwMDAwMDAwNDU1MAorOjEwN0ZCMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRjQ4N0E4NDBCQgorOjEwN0ZDMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMzQ5NDIyMDIxOAorOjEwN0ZEMDAwODAzMjAwMDBGODg3NDI0MDgxMzIwMDAwMDAwMDAwNDRGNworOjEwN0ZFMDAwOTM5MzAxMDAzNDk0MUEwMjY4OTcwMDAwMDI4ODlDMEY1MgorOjEwN0ZGMDAwODAzMjAwMDAwMDgwMDAxMDQyQzkwMTAwMDI4ODIyNDA0NworOjEwODAwMDAwRTM2RDAwMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTA3OAorOjEwODAxMDAwNjJERDAxMDBGRjg3QTg0MDgxMzIwMDAwMjM4MzAwODhEMQorOjEwODAyMDAwMUNCMDAwMDA0NDk0MjIwMjgwMzIwMDAwMDM4ODQyNDBDOQorOjEwODAzMDAwODEzMjAwMDAwMDAwMDA0NDkzOTMwMTAwNDQ5NDFBMDIyRQorOjEwODA0MDAwNjg5NzAwMDAwRDg4OUMwRjgwMzIwMDAwMDA4MDAwMTBBRgorOjEwODA1MDAwNDJDOTAxMDAwRDg4MjI0MEUzNkQwMDAwMDAwMDAwNDU4OAorOjEwODA2MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMEE4OEE4NDBGMworOjEwODA3MDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMkY4MzIyMDI3RAorOjEwODA4MDAwODAzMjAwMDAwRTg4NDI0MDgxMzIwMDAwMDAwMDAwNDQyRgorOjEwODA5MDAwOTM5MzAxMDAwMDAwMUEwMjY4OTcwMTAwMkY4MzAwNDBBQgorOjEwODBBMDAwMDVCMDAwMDAwMDgwMDBBNjU2QjEwMTAwNTY5NTJGNDA5MworOjEwODBCMDAwMDVCMDAxMDAwNDAwQTI0MEU3NkQwMDAwQjg5NDI5NDExQQorOjEwODBDMDAwRTdCMTAxMDAwMDAwMDA1NEVGOTMwMTAwMDAwMDAwRjI0RQorOjEwODBEMDAwMEVCMDAxMDAwNDAwQTMwQzU1NkYwMDAwMjkwMDAwNDAwMQorOjEwODBFMDAwMEQ5ODAxMDAwOTAwMDAwNzEyRTQwMTAwMDAwMDAwQTczQworOjEwODBGMDAwMTNDMDAxMDAwMzAwMDAwNzFBRjQwMTAwMDcwMDAwMDc4NQorOjEwODEwMDAwMTY4ODAxMDBGRkZGMDAxMDM0RDgwMTAwMDAwMDAwMDNCMgorOjEwODExMDAwMzQ5NDAxMDAwMDAwMDA0MDIzQjAwMTAwMjAxODAwNDAwQQorOjEwODEyMDAwMTE5ODAxMDAwNDAwMjBBQTBGNkMwMDAwMDBCNTAwMEQ5QQorOjEwODEzMDAwNDJDOTAxMDA0Njg4MjIwQkU2N0QwMDAwMjU4ODYwNDA4OAorOjEwODE0MDAwODEzMjAwMDBGRkZGMDAwNzg0ODkwMTAwMkU4ODA1QzJFQworOjEwODE1MDAwMjQzMDAwMDA1ODA0MDA0MDgxMzIwMTAwMDAwMDJEMDU0OQorOjEwODE2MDAwNDhCMTAxMDA2Mzg4NzBGMDE4MzAwMTAwMTAwMDAwMEM2NQorOjEwODE3MDAwODJGNDAxMDAwNDAwQTI0MTBFNkMwMDAwNDY4ODAwNDAxOQorOjEwODE4MDAwODFCMjAwMDAwMDAwNzA0MDgxQjIwMTAwM0Q4OEEwNDgyQgorOjEwODE5MDAwMjM2QzAwMDAwMDAwMDA1MDM1RDAwMTAwMDA4MDAwMUE2MAorOjEwODFBMDAwNDJDOTAxMDAzNzg4MjI0MEUzNkQwMDAwMDAwMDAwNDIxMAorOjEwODFCMDAwNjFCMTAxMDA0MDAwMDAxQTYyREQwMTAwMzQ4OEE4NDA2RQorOjEwODFDMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMjA5ODAwNDAwQQorOjEwODFEMDAwNDM5OTAxMDA2Mzg4MDBGODE4MzAwMTAwMzg4OEEyNDFGMworOjEwODFFMDAwMjM1MDAwMDBGRkZGMDAxMDM0RDgwMTAwMDAwMDAwMDNGRQorOjEwODFGMDAwMzQ5NDAxMDAyMDE4MDA0MDExOTgwMTAwMDAwMDJFMUE0QworOjEwODIwMDAwNDhCMTAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDAwMDg4NQorOjEwODIxMDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMjAwMDAwMUEyRAorOjEwODIyMDAwNjJERDAxMDA0MTg4QTgwOUUwMzEwMDAwMDAwMDAwNDE0MgorOjEwODIzMDAwMjNDMDAxMDAwMDAwMDA1MDM1QzAwMTAwMDAwMDAwNDREMAorOjEwODI0MDAwMTFDMDAxMDA1Mjg4MjI0MTBENTAwMDAwMDAwMDAwNDE4MQorOjEwODI1MDAwMEZDMDAxMDA0RTg4QTBBQTBGNkMwMDAwMDAwMDAwNDE3MgorOjEwODI2MDAwMEZCMDAxMDAwOTAwMDAwNzEyRTQwMTAwMDAwMDAwQTdBMAorOjEwODI3MDAwMTNDMDAxMDAwMDAwMDA0MDFCQjAwMTAwMjI4ODAwNDEzMworOjEwODI4MDAwMTdCMDAwMDAwMDAyMDAwOTEyQzgwMTAwMjI4ODgzNDFEMworOjEwODI5MDAwMTc0MDAwMDAwMDAwMDA0MDE3QjAwMTAwMjI4ODAwNDE5NAorOjEwODJBMDAwMUJDMDAwMDA1RDg4MjM0MDIzNkMwMDAwMDAwMDAwNTBDQworOjEwODJCMDAwMzVEMDAxMDAwMDgwMDAxQTQyQzkwMTAwNUE4ODIyNDBDRQorOjEwODJDMDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMUFBRgorOjEwODJEMDAwNjJERDAxMDA1Nzg4QTg0MDgxMzIwMDAwMjM4MzAwODhCNgorOjEwODJFMDAwMUNCMDAwMDAyMDk4MDA0MDQzOTkwMTAwNjM4ODAwRjgwQQorOjEwODJGMDAwMTgzMDAxMDA1Qjg4QTI0MTIzNTAwMDAwMDAwMDAwNDFCQgorOjEwODMwMDAwMEZDMDAxMDA2MDg4QTBBQTBGNkMwMDAwMDAwMDAwNDFBRgorOjEwODMxMDAwMEZCMDAxMDBCODk0MjAwN0U0QjEwMTAwNTY5NTIwNDA0OQorOjEwODMyMDAwRTdCMTAxMDBGMDg3MDA0MDBGQjAwMDAwRkZGRjAwMEMzNAorOjEwODMzMDAwODBEODAxMDAwNDAwMjY0MDgxMzIwMDAwQzAwMjAwMENGOQorOjEwODM0MDAwN0U4OTAxMDA3Qzg4MjY1NDYxMzEwMDAwNkY4ODg3MEM4QgorOjEwODM1MDAwODAzMjAwMDAxRjA0MDA0MDg5OTgwMTAwMDk5OTAwMEMzOAorOjEwODM2MDAwOEEzMDAxMDAwMDAwMDA1NDYxQjEwMTAwMEYwMDAwNDA5QworOjEwODM3MDAwNjI5OTAxMDA2Rjg4Mjg0MDgxMzIwMDAwMDQwMEEyNTRGNQorOjEwODM4MDAwNzc3RDAwMDA2Qjg4MDA0MDgxQjIwMDAwNzc4ODIyNDYyQworOjEwODM5MDAwMTk3QzAwMDAyQTA0MDA0MDg5OTgwMTAwMDk5OTAwMEMwQQorOjEwODNBMDAwOEEzMDAxMDAwMDAwMDA1NDYxQjEwMTAwMEQwMDAwNDA1RQorOjEwODNCMDAwNjI5OTAxMDAwMDAwQTg0MDgxQjIwMDAwMDQwMEEyNTRBQworOjEwODNDMDAwNzc3RDAwMDA3MDg4MDA0MDgxQjIwMDAwN0M4ODIyNDlERgorOjEwODNEMDAwMTk3QzAwMDAwRTAwMDA0MDYyOTkwMTAwMDAwMEE4NDBENgorOjEwODNFMDAwODFCMjAwMDAwNDAwQTI1NDc3N0QwMDAwNzc4ODAwNDAyRAorOjEwODNGMDAwODFCMjAwMDAxMDAwMDA0MDYyOTkwMTAwMDAwMEE4NDAxNgorOjEwODQwMDAwODFCMjAwMDAwNDAwQTI1NDc3N0QwMDAwN0M4ODAwNDAwNworOjEwODQxMDAwODFCMjAwMDAzMDk0MkY1NUYxOTMwMTAwMDA0MDAwQTY3NgorOjEwODQyMDAwNTZCMTAxMDAyRjgzQTI0MUU1NTEwMDAwNjQwMDAwNDBENQorOjEwODQzMDAwRTU5OTAxMDA4NDg4NDQ0MDgxMzIwMDAwODc4OEEyOTMzNgorOjEwODQ0MDAwNTc2RjAwMDAwMDAwMDA0MTU3QzMwMTAwMDAwMDFDQUI0MworOjEwODQ1MDAwMjdCMzAxMDAyRjgzMjI1MEZEN0YwMDAwMkY4MzIyNTE3QworOjEwODQ2MDAwRkQ3RjAwMDAyRjgzQTI0MTFENTMwMDAwNTA0NjAwNDBCNQorOjEwODQ3MDAwMUQ5QjAxMDAzODA1MDA0MDgxMzIwMTAwMEUwMDAwNDhCQworOjEwODQ4MDAwQjJDQjAxMDAxMDA0MDA0MDQ5MzEwMTAwOTM4ODIyNDAyMgorOjEwODQ5MDAwQjU2RjAwMDAwRTAwMDA0OEIyQ0IwMTAwMjAwNDAwNDE3RgorOjEwODRBMDAwQjU1MzAxMDAyRjgzMDA0MDgxQjIwMDAwMDAwMDAwNTE0RAorOjEwODRCMDAwRkQ4MzAxMDA0MDE2MDA0MDQ1OTkwMTAwNDAwNTAwNDA0MQorOjEwODRDMDAwNDkzMTAxMDAxRTAwMDA0OEIyQ0IwMTAwMTAwNDAwNDBGOQorOjEwODREMDAwODEzMjAxMDAwMDAwMDBEQTkxQzAwMTAwMDQwMDAwNDg3MAorOjEwODRFMDAwQjJDQjAxMDAyMDA0MDA0MEI1MzMwMTAwNjAxNjIwNDBFQgorOjEwODRGMDAwRTVCMTAxMDA1NTgyMDA0MEI1MzMwMTAwMDgwMDAwNDg5NQorOjEwODUwMDAwQjJDQjAxMDBGRkZGMDA0QUI0OEIwMTAwMjAwNDAwNDAwMQorOjEwODUxMDAwODEzMjAxMDAwQTAwMDA0OEIyQ0IwMTAwMTAwMDAwNEE3RAorOjEwODUyMDAwQjRGNzAxMDAyMDA0MDA0MDgxMzIwMTAwMkY4MzAwNDA5NQorOjEwODUzMDAwODFCMjAwMDAwNDAwQTIwNTQ4NkQwMDAwMDIwMDAwNDA2NgorOjEwODU0MDAwNDM5OTAxMDAwNDAwQTJGMjBFNkMwMDAwMDQwMEEyMDI5NAorOjEwODU1MDAwODAzMjAwMDAwNTAwMDA0MDQzOTkwMTAwMDAwMDAwRjM1NAorOjEwODU2MDAwMDhCMDAxMDBBRTg4MjI1MDgxNkMwMDAwMEYwNDAwNDA2QQorOjEwODU3MDAwODk5ODAxMDAxMDAwMDA0MDhBRTQwMTAwMDk5OTAwMDQ3NAorOjEwODU4MDAwOEExNDAxMDAwNDAwMjA0ODA5NkMwMDAwMDQwMDIwNTdGMAorOjEwODU5MDAwODE2QzAwMDAwNDAwMjA0MEU2QjEwMTAwMDMwMDAwNDBBRgorOjEwODVBMDAwOTZFNDAxMDAwMDAwMDAwNDk2QzAwMTAwQjQ4ODAwNEI2RQorOjEwODVCMDAwMTBDOTAwMDBFNDhCMDA0MTA5QjAwMDAwMDQwMDAwMjA1NQorOjEwODVDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFNQorOjEwODVEMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBENQorOjEwODVFMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBDNQorOjEwODVGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMTk4QzAwNDFGMworOjEwODYwMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAyQQorOjEwODYxMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA5NAorOjEwODYyMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA4NAorOjEwODYzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3NAorOjEwODY0MDAwOEZCMDAwMDA1NThDMDA0NTA5QjAwMDAwNTU4QzAwNDVFNgorOjEwODY1MDAwMDlCMDAwMDA1NThDMDA0NTA5QjAwMDAwNTU4QzAwNDU1QworOjEwODY2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBDQQorOjEwODY3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzNAorOjEwODY4MDAwOEZCMDAwMDA5QzhDMDA0MzA5QjAwMDAwQ0I4QzAwNDNFRAorOjEwODY5MDAwMDlCMDAwMDBDRjhDMDA0NDA5QjAwMDAwM0U4RTAwNDVCOAorOjEwODZBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA4QQorOjEwODZCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGNAorOjEwODZDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwREY4QzAwNDM1QQorOjEwODZEMDAwMDlCMDAwMDBERDhDMDA0MzA5QjAwMDAwRTA4QjAwNDVDQworOjEwODZFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0QQorOjEwODZGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCNAorOjEwODcwMDAwOEZCMDAwMDA5ODhEMDA0MjA5QjAwMDAwOTg4RDAwNDNBMgorOjEwODcxMDAwMDlCMDAwMDA5ODhEMDA0NDA5QjAwMDAwRTA4QjAwNDVDRQorOjEwODcyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwOQorOjEwODczMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3MworOjEwODc0MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwQjg4RDAwNDNGRgorOjEwODc1MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRTA4QjAwNDU0RAorOjEwODc2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBDOQorOjEwODc3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzMworOjEwODc4MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRTA4RDAwNDM5NworOjEwODc5MDAwMDlCMDAwMDBFMDhEMDA0NDA5QjAwMDAwRTA4QjAwNDUwNgorOjEwODdBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA4OQorOjEwODdCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGMworOjEwODdDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRTA4RDAwNDI1OAorOjEwODdEMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRTA4QjAwNDVDRAorOjEwODdFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0OQorOjEwODdGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCMworOjEwODgwMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMEY4RTAwNDRFNQorOjEwODgxMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRTA4QjAwNDU4QworOjEwODgyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwOAorOjEwODgzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3MgorOjEwODg0MDAwOEZCMDAwMDBFMDhCMDA0MjA5QjAwMDAwMjI4RTAwNDU4RQorOjEwODg1MDAwMDlCMDAwMDAyMjhFMDA0NTA5QjAwMDAwRTA4QjAwNDUwMQorOjEwODg2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBDOAorOjEwODg3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzMgorOjEwODg4MDAwOEZCMDAwMDAyNDhFMDA0MjA5QjAwMDAwMjQ4RTAwNDMwNworOjEwODg5MDAwMDlCMDAwMDAyNDhFMDA0NDA5QjAwMDAwMjQ4RTAwNDU3OQorOjEwODhBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA4OAorOjEwODhCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGMgorOjEwODhDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFMgorOjEwODhEMDAwOEZCMDAwMDAyRjhFMDA0NDA5QjAwMDAwRTA4QjAwNDVFRgorOjEwODhFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0OAorOjEwODhGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCMgorOjEwODkwMDAwOEZCMDAwMDA0MThFMDA0MjA5QjAwMDAwMzA4RTAwNDM1RAorOjEwODkxMDAwMDlCMDAwMDA0MThFMDA0NDA5QjAwMDAwRTA4QjAwNDUyMgorOjEwODkyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwNworOjEwODkzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA3MQorOjEwODk0MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwNDM4RTAwNDM3MQorOjEwODk1MDAwMDlCMDAwMDAzNzhFMDA0NDA5QjAwMDAwRTA4QjAwNDVFQworOjEwODk2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBDNworOjEwODk3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRTA4QjAwNDFBOQorOjEwODk4MDAwMDlCMDAwMDA5NjhEMDA0MjA5QjAwMDAwOTY4RDAwNDNBQQorOjEwODk5MDAwMDlCMDAwMDA5NjhEMDA0NDA5QjAwMDAwRTA4QjAwNDU0RQorOjEwODlBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA4NworOjEwODlCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRTA4QjAwNDE2OQorOjEwODlDMDAwMDlCMDAwMDA0NThFMDA0MjA5QjAwMDAwNDU4RTAwNDMwQQorOjEwODlEMDAwMDlCMDAwMDA0NThFMDA0NDA5QjAwMDAwRTA4QjAwNDU1RQorOjEwODlFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0NworOjEwODlGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCMQorOjEwOEEwMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBBMAorOjEwOEExMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwNEM4RTAwNDU5NQorOjEwOEEyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwNgorOjEwOEEzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwNEU4RTAwNDI3NgorOjEwOEE0MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBFNgorOjEwOEE1MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA1MAorOjEwOEE2MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0MAorOjEwOEE3MDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAzMAorOjEwOEE4MDAwOEZCMDAwMDA1QjhFMDA0MzA5QjAwMDAwQzE4RTAwNDMzMAorOjEwOEE5MDAwMDlCMDAwMDBDRjhDMDA0NDA5QjAwMDAwM0U4RTAwNDVCNAorOjEwOEFBMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA4NgorOjEwOEFCMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBGMAorOjEwOEFDMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwQzk4RTAwNDM2QQorOjEwOEFEMDAwMDlCMDAwMDBDRjhDMDA0NDA5QjAwMDAwM0U4RTAwNDU3NAorOjEwOEFFMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA0NgorOjEwOEFGMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBCMAorOjEwOEIwMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwREQ4RTAwNDMxNQorOjEwOEIxMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwRTA4QjAwNDU4OQorOjEwOEIyMDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjAwNQorOjEwOEIzMDAwOEZCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjA2RgorOjEwOEI0MDAwOEZCMDAwMDA5NjhDMDA0MzA5QjAwMDAwQzU4RTAwNDMzMgorOjEwOEI1MDAwMDlCMDAwMDBDRjhDMDA0NDA5QjAwMDAwM0U4RTAwNDVGMworOjEwOEI2MDAwMDlCMDAwMDAwNDAwMDAyMDhGQjAwMDAwMDQwMDAwMjBDNQorOjEwOEI3MDAwOEZCMDAwMDAwMjAwMkQwNTQ4QjEwMTAwMDQwMEEyRjJGMAorOjEwOEI4MDAwMEU2QzAwMDAwNDAwQTIwMjgwMzIwMDAwMDcwMDJENDA5RAorOjEwOEI5MDAwODFCMjAxMDAwMDAwMDBGMzA4QjAwMTAwMTAwNDAwNDBBMQorOjEwOEJBMDAwODk5ODAxMDAxMDAwMDA0NzhBRTQwMTAwMDk5OTAwMDQzNworOjEwOEJCMDAwOEExNDAxMDAwNDAwMjA0RTA5NkMwMDAwMkEwMDAwNDdCRQorOjEwOEJDMDAwODBDRTAxMDAwNDAwMjQ0MDgxMzIwMDAwMDYwMDIwNDdDRQorOjEwOEJEMDAwRTZCMTAxMDAwNDAwMDA0Nzk2RTQwMTAwMDAwMDAwNDdGMAorOjEwOEJFMDAwOTZEMDAxMDAwMDAwMDA0Nzk2RDAwMTAwMDAwMDAwMDQ2QworOjEwOEJGMDAwOTZDMDAxMDA3RDg5MDA0QjEwQzkwMDAwRjk4RTAwNDkyNAorOjEwOEMwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyRQorOjEwOEMxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMgorOjEwOEMyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MgorOjEwOEMzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MgorOjEwOEM0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MgorOjEwOEM1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2MgorOjEwOEM2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MgorOjEwOEM3MDAwODVCMDAwMDAzMjhGMDA0MjA5QjAwMDAwMDQwMDAwMjBERgorOjEwOEM4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMgorOjEwOEM5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMgorOjEwOENBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxMgorOjEwOENCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMgorOjEwOENDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMgorOjEwOENEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMgorOjEwOENFMDAwODVCMDAwMDAzOThGMDA0NjA5QjAwMDAwMDQwMDAwMjA2NAorOjEwOENGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMgorOjEwOEQwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMQorOjEwOEQxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMQorOjEwOEQyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MQorOjEwOEQzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MQorOjEwOEQ0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MQorOjEwOEQ1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNEE4RjAwNDI2QQorOjEwOEQ2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNkQ4RjAwNDJCMworOjEwOEQ3MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCRAorOjEwOEQ4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMQorOjEwOEQ5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMQorOjEwOERBMDAwODVCMDAwMDA2NzhGMDA0QTA5QjAwMDAwMDQwMDAwMjA3MQorOjEwOERCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMQorOjEwOERDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNzQ4RjAwNDNDRgorOjEwOEREMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREY4RjAwNDRDRgorOjEwOERFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0RAorOjEwOERGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMQorOjEwOEUwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMAorOjEwOEUxMDAwODVCMDAwMDBERDhGMDA0QjA5QjAwMDAwMDQwMDAwMjA4OQorOjEwOEUyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MAorOjEwOEUzMDAwODVCMDAwMDAzRDhGMDA0MTA5QjAwMDAwMDQwMDAwMjAxMworOjEwOEU0MDAwODVCMDAwMDAzRDhGMDA0MzA5QjAwMDAwM0Q4RjAwNDQxNQorOjEwOEU1MDAwMDlCMDAwMDAzRDhGMDA0NTA5QjAwMDAwM0Q4RjAwNDY3RAorOjEwOEU2MDAwMDlCMDAwMDAzRDhGMDA0NzA5QjAwMDAwM0Q4RjAwNDg2OQorOjEwOEU3MDAwMDlCMDAwMDAzRDhGMDA0OTA5QjAwMDAwM0Q4RjAwNEE1NQorOjEwOEU4MDAwMDlCMDAwMDAzRDhGMDA0QjA5QjAwMDAwM0Q4RjAwNEM0MQorOjEwOEU5MDAwMDlCMDAwMDAzRDhGMDA0RDA5QjAwMDAwMDQwMDAwMjAyMworOjEwOEVBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDg5MDAwNDIxQQorOjEwOEVCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDg5MDAwNDQ4NAorOjEwOEVDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2QworOjEwOEVEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMAorOjEwOEVFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEMAorOjEwOEVGMDAwODVCMDAwMDA0ODkwMDA0QjA5QjAwMDAwMDQwMDAwMjAzRAorOjEwOEYwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBRgorOjEwOEYxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5RgorOjEwOEYyMDAwODVCMDAwMDA2NTkwMDA0NTA5QjAwMDAwMDQwMDAwMjBGNQorOjEwOEYzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3RgorOjEwOEY0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5MDAwNDczRgorOjEwOEY1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNTY5MDAwNDVENAorOjEwOEY2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDQgorOjEwOEY3MDAwODVCMDAwMDAxNTkzMDA0NjA5QjAwMDAwMDQwMDAwMjBGMQorOjEwOEY4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyRgorOjEwOEY5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxRgorOjEwOEZBMDAwODVCMDAwMDA2RDhGMDA0NjA5QjAwMDAwNEE4RjAwNDY3MgorOjEwOEZCMDAwMDlCMDAwMDA2NThGMDA0NzA5QjAwMDAwNjU4RjAwNDhDOAorOjEwOEZDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2QgorOjEwOEZEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNjc4RjAwNEFDMworOjEwOEZFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0QgorOjEwOEZGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCRgorOjEwOTAwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBRQorOjEwOTAxMDAwODVCMDAwMDBERjhGMDA0NTA5QjAwMDAwNzQ4RjAwNDM2OQorOjEwOTAyMDAwMDlCMDAwMDA2NThGMDA0NzA5QjAwMDAwNjU4RjAwNDg1NworOjEwOTAzMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQQorOjEwOTA0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwREQ4RjAwNENEQQorOjEwOTA1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEQQorOjEwOTA2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0RQorOjEwOTA3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzRQorOjEwOTA4MDAwODVCMDAwMDA4NDkwMDA0NDA5QjAwMDAwODQ5MDAwNDI0NAorOjEwOTA5MDAwMDlCMDAwMDBDOThCMDA0NzA5QjAwMDAwQzk4QjAwNDgyNworOjEwOTBBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4QQorOjEwOTBCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwODQ5MDAwNEJDMworOjEwOTBDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2QQorOjEwOTBEMDAwODVCMDAwMDAzRDhGMDA0MTA5QjAwMDAwQUY5MDAwNDcwRgorOjEwOTBFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOTI5MDAwNDcwNQorOjEwOTBGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzQQorOjEwOTEwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBRAorOjEwOTExMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5RAorOjEwOTEyMDAwODVCMDAwMDA5MjkwMDA0NzA5QjAwMDAwMDQwMDAwMjBDNAorOjEwOTEzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3RAorOjEwOTE0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2RAorOjEwOTE1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1RAorOjEwOTE2MDAwODVCMDAwMDA5MjkwMDA0NzA5QjAwMDAwQUY5MDAwNDcyMgorOjEwOTE3MDAwMDlCMDAwMDA2NThGMDA0NzA5QjAwMDAwNjU4RjAwNDgwNgorOjEwOTE4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBOQorOjEwOTE5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOTI5MDAwNDdEOAorOjEwOTFBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4OQorOjEwOTFCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGRAorOjEwOTFDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFRAorOjEwOTFEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBERAorOjEwOTFFMDAwODVCMDAwMDBCRTkwMDA0NzA5QjAwMDAwQkU5MDAwNDg2NgorOjEwOTFGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOQorOjEwOTIwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBQworOjEwOTIxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5QworOjEwOTIyMDAwODVCMDAwMDAyRjkxMDA0MDA5QjAwMDAwNTE5MTAwNDcyNworOjEwOTIzMDAwMDlCMDAwMDA0MzkxMDA0ODA5QjAwMDAwOEE5MDAwNDczRgorOjEwOTI0MDAwMDlCMDAwMDA4QTkwMDA0NzA5QjAwMDAwNTE5MTAwNDcyMgorOjEwOTI1MDAwMDlCMDAwMDA1QTkxMDA0NzA5QjAwMDAwNUE5MTAwNDgzNworOjEwOTI2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDM5MTAwNDhEMAorOjEwOTI3MDAwMDlCMDAwMDA4QTkwMDA0NzA5QjAwMDAwOEE5MDAwNDdCQQorOjEwOTI4MDAwMDlCMDAwMDA0MzkxMDA0ODA5QjAwMDAwMDQwMDAwMjAyQworOjEwOTI5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxQworOjEwOTJBMDAwODVCMDAwMDA0ODkwMDA0MzA5QjAwMDAwMDQwMDAwMjA5MQorOjEwOTJCMDAwODVCMDAwMDA0ODkwMDA0NTA5QjAwMDAwNDg5MDAwNDY4NQorOjEwOTJDMDAwMDlCMDAwMDA2NThGMDA0NzA5QjAwMDAwNjU4RjAwNDhCNQorOjEwOTJEMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDg5MDAwNEE1QQorOjEwOTJFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNDg5MDAwNEM0OAorOjEwOTJGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOAorOjEwOTMwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQUU5MDAwNDc0QQorOjEwOTMxMDAwMDlCMDAwMDBBMDkwMDA0ODA5QjAwMDAwOTE5MDAwNDdGQgorOjEwOTMyMDAwMDlCMDAwMDA5MTkwMDA0NzA5QjAwMDAwQUU5MDAwNDdERQorOjEwOTMzMDAwMDlCMDAwMDBDOThCMDA0NzA5QjAwMDAwQzk4QjAwNDg4NAorOjEwOTM0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQTA5MDAwNDg5MworOjEwOTM1MDAwMDlCMDAwMDA5MTkwMDA0NzA5QjAwMDAwOTE5MDAwNDdDQgorOjEwOTM2MDAwMDlCMDAwMDBBMDkwMDA0ODA5QjAwMDAwMDQwMDAwMjBFRgorOjEwOTM3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNUQ5MTAwNDIyRgorOjEwOTM4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNUQ5MTAwNDQ5OQorOjEwOTM5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NworOjEwOTNBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwQgorOjEwOTNCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQgorOjEwOTNDMDAwODVCMDAwMDA1RDkxMDA0QjA5QjAwMDAwMDQwMDAwMjA1MgorOjEwOTNEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEQgorOjEwOTNFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDQgorOjEwOTNGMDAwODVCMDAwMDA1RDkxMDA0MzA5QjAwMDAwMDQwMDAwMjAyQQorOjEwOTQwMDAwODVCMDAwMDA1RDkxMDA0NTA5QjAwMDAwNUQ5MTAwNDYwNworOjEwOTQxMDAwMDlCMDAwMDA1RDkxMDA0NzA5QjAwMDAwNUQ5MTAwNDg2RgorOjEwOTQyMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNUQ5MTAwNEFGMgorOjEwOTQzMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNUQ5MTAwNENFMAorOjEwOTQ0MDAwMDlCMDAwMDA1RDkxMDA0QzA5QjAwMDAwMDQwMDAwMjA0QworOjEwOTQ1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1QQorOjEwOTQ2MDAwODVCMDAwMDA3QTkxMDA0NjA5QjAwMDAwMDQwMDAwMjA5OQorOjEwOTQ3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzQQorOjEwOTQ4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5MDAwNDdGQQorOjEwOTQ5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0E5MTAwNDY2OQorOjEwOTRBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4NgorOjEwOTRCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGQQorOjEwOTRDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFQQorOjEwOTREMDAwODVCMDAwMDA5QzkyMDA0NjA5QjAwMDAwMDQwMDAwMjAwNgorOjEwOTRFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDQQorOjEwOTRGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5MDAwNDc4QQorOjEwOTUwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwOUM5MjAwNDZENQorOjEwOTUxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxNQorOjEwOTUyMDAwODVCMDAwMDA5QzkyMDA0NjA5QjAwMDAwMDQwMDAwMjBCNQorOjEwOTUzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3OQorOjEwOTU0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQzU5MjAwNDJGNAorOjEwOTU1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBENQorOjEwOTU2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0OQorOjEwOTU3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOQorOjEwOTU4MDAwODVCMDAwMDBDMzkyMDA0QTA5QjAwMDAwMDQwMDAwMjAyQQorOjEwOTU5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxOQorOjEwOTVBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwOQorOjEwOTVCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGOQorOjEwOTVDMDAwODVCMDAwMDBDNTkyMDA0NjA5QjAwMDAwMDQwMDAwMjBFQworOjEwOTVEMDAwODVCMDAwMDA2NThGMDA0NzA5QjAwMDAwNjU4RjAwNDgyNgorOjEwOTVFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NQorOjEwOTVGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwQzM5MjAwNEEzRQorOjEwOTYwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyNAorOjEwOTYxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5OAorOjEwOTYyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4OAorOjEwOTYzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3OAorOjEwOTY0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2OAorOjEwOTY1MDAwODVCMDAwMDA2QTkxMDA0MTA5QjAwMDAwMDQwMDAwMjBCQworOjEwOTY2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0OAorOjEwOTY3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzOAorOjEwOTY4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNzc5MTAwNDIwMgorOjEwOTY5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNzc5MTAwNDQ2QworOjEwOTZBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4NAorOjEwOTZCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGOAorOjEwOTZDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFOAorOjEwOTZEMDAwODVCMDAwMDA3NzkxMDA0QjA5QjAwMDAwMDQwMDAwMjAyNQorOjEwOTZFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDOAorOjEwOTZGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCOAorOjEwOTcwMDAwODVCMDAwMDA3NzkxMDA0MzA5QjAwMDAwMDQwMDAwMjBGQworOjEwOTcxMDAwODVCMDAwMDA3NzkxMDA0NTA5QjAwMDAwNzc5MTAwNDZDMAorOjEwOTcyMDAwMDlCMDAwMDA3NzkxMDA0NzA5QjAwMDAwNzc5MTAwNDgyOAorOjEwOTczMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMworOjEwOTc0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNzc5MTAwNEMzNworOjEwOTc1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEMworOjEwOTc2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0NworOjEwOTc3MDAwODVCMDAwMDA2NTkwMDA0QzA5QjAwMDAwMDQwMDAwMjA5NgorOjEwOTc4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyNworOjEwOTc5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5MDAwNDdFNworOjEwOTdBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNTY5MDAwNEM3NQorOjEwOTdCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MworOjEwOTdDMDAwODVCMDAwMDA4MzkzMDA0NjA5QjAwMDAwMDQwMDAwMjAyQgorOjEwOTdEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEE5MzAwNDIxQworOjEwOTdFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEE5MzAwNDQ4NgorOjEwOTdGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzMworOjEwOTgwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBNgorOjEwOTgxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NgorOjEwOTgyMDAwODVCMDAwMDAwQTkzMDA0QjA5QjAwMDAwMDQwMDAwMjAzRQorOjEwOTgzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3NgorOjEwOTg0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2NgorOjEwOTg1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1NgorOjEwOTg2MDAwODVCMDAwMDAwQTkzMDA0NTA5QjAwMDAwMEE5MzAwNDY0NQorOjEwOTg3MDAwMDlCMDAwMDA2NThGMDA0NzA5QjAwMDAwNjU4RjAwNDhGRgorOjEwOTg4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMgorOjEwOTg5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMEE5MzAwNEM1MQorOjEwOThBMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MgorOjEwOThCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNTY5MDAwNDJGMgorOjEwOThDMDAwMDlCMDAwMDAxNTkzMDA0NjA5QjAwMDAwMDQwMDAwMjAxNAorOjEwOThEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNTY5MDAwNDZDRQorOjEwOThFMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5MDAwNDcxMgorOjEwOThGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMTU5MzAwNDY2OAorOjEwOTkwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAyMQorOjEwOTkxMDAwODVCMDAwMDAxNTkzMDA0NjA5QjAwMDAwMDQwMDAwMjA0NworOjEwOTkyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4NQorOjEwOTkzMDAwODVCMDAwMDAxQzkzMDA0MzA5QjAwMDAwMDQwMDAwMjAyMworOjEwOTk0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2NQorOjEwOTk1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5MDAwNDcyNQorOjEwOTk2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMUM5MzAwNDNGMworOjEwOTk3MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMQorOjEwOTk4MDAwODVCMDAwMDAxQzkzMDA0RDA5QjAwMDAwMDQwMDAwMjBDOQorOjEwOTk5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxNQorOjEwOTlBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMzI5MzAwNDMyMQorOjEwOTlCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MQorOjEwOTlDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFNQorOjEwOTlEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBENQorOjEwOTlFMDAwODVCMDAwMDAwMzkzMDA0QTA5QjAwMDAwMDQwMDAwMjA4NQorOjEwOTlGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCNQorOjEwOUEwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBNAorOjEwOUExMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5NAorOjEwOUEyMDAwODVCMDAwMDAzMjkzMDA0MzA5QjAwMDAwMDQwMDAwMjAxQworOjEwOUEzMDAwODVCMDAwMDA2NThGMDA0NzA5QjAwMDAwNjU4RjAwNDhDMQorOjEwOUE0MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMAorOjEwOUE1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDM5MzAwNEE5OAorOjEwOUE2MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMAorOjEwOUE3MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAzNAorOjEwOUE4MDAwODVCMDAwMDA0QTkzMDA0MzA5QjAwMDAwMDQwMDAwMjBBNAorOjEwOUE5MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxNAorOjEwOUFBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5MDAwNDdENAorOjEwOUFCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNEE5MzAwNDM3NAorOjEwOUFDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2MAorOjEwOUFEMDAwODVCMDAwMDA0QTkzMDA0RDA5QjAwMDAwMDQwMDAwMjA0QQorOjEwOUFFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNEE4RjAwNDJDRAorOjEwOUFGMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNkQ4RjAwNDIxNgorOjEwOUIwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAxRgorOjEwOUIxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MworOjEwOUIyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MworOjEwOUIzMDAwODVCMDAwMDA2RDkzMDA0MjA5QjAwMDAwMDQwMDAwMjBEMQorOjEwOUI0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2MworOjEwOUI1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MworOjEwOUI2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA0MworOjEwOUI3MDAwODVCMDAwMDA2RDhGMDA0NjA5QjAwMDAwNEE4RjAwNDY5NgorOjEwOUI4MDAwMDlCMDAwMDA2NThGMDA0NzA5QjAwMDAwNjU4RjAwNDhFQworOjEwOUI5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4RgorOjEwOUJBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNkQ5MzAwNDZFMQorOjEwOUJCMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2RgorOjEwOUJDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMworOjEwOUJEMDAwODVCMDAwMDA3NDkzMDA0QTA5QjAwMDAwMDQwMDAwMjAyMgorOjEwOUJFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMworOjEwOUJGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5MDAwNDc4MworOjEwOUMwMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNzQ5MzAwNEFGMQorOjEwOUMxMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwRQorOjEwOUMyMDAwODVCMDAwMDAxNjkzMDA0NjA5QjAwMDAwMDQwMDAwMjAzMworOjEwOUMzMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA3MgorOjEwOUM0MDAwODVCMDAwMDAxNjkzMDA0NjA5QjAwMDAwMDQwMDAwMjAxMworOjEwOUM1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1MgorOjEwOUM2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5MDAwNDcxMgorOjEwOUM3MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMTY5MzAwNDZFMworOjEwOUM4MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5RQorOjEwOUM5MDAwODVCMDAwMDAxNjkzMDA0NjA5QjAwMDAwMDQwMDAwMjBDMworOjEwOUNBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMgorOjEwOUNCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwN0Q5MzAwNDJDNAorOjEwOUNDMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA1RQorOjEwOUNEMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEMgorOjEwOUNFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMgorOjEwOUNGMDAwODVCMDAwMDAwMzkzMDA0QTA5QjAwMDAwMDQwMDAwMjA3MgorOjEwOUQwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMQorOjEwOUQxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA5MQorOjEwOUQyMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4MQorOjEwOUQzMDAwODVCMDAwMDA3RDkzMDA0NjA5QjAwMDAwMDQwMDAwMjBCQgorOjEwOUQ0MDAwODVCMDAwMDA2NThGMDA0NzA5QjAwMDAwNjU4RjAwNDhBRQorOjEwOUQ1MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDRAorOjEwOUQ2MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDM5MzAwNEE4NQorOjEwOUQ3MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBRAorOjEwOUQ4MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNzQ4RjAwNERGNQorOjEwOUQ5MDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA4RAorOjEwOURBMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjAwMQorOjEwOURCMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBGMQorOjEwOURDMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFMQorOjEwOUREMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBEMQorOjEwOURFMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBDMQorOjEwOURGMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBCMQorOjEwOUUwMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBBMAorOjEwOUUxMDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwNzQ4RjAwNEQ2NAorOjEwOUUyMDAwMDlCMDAwMDA2NThGMDA0NzA5QjAwMDAwNjU4RjAwNDg0OQorOjEwOUUzMDAwMDlCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjBFQworOjEwOUU0MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMDAwMjA2MAorOjEwOUU1MDAwODVCMDAwMDAwNDAwMDAyMDg1QjAwMDAwMDQwMEEyMDVDOQorOjEwOUU2MDAwNDg2RDAwMDAwNDAwMjIwNzgwMzIwMDAwMDcwMDJFNEJERQorOjEwOUU3MDAwMTk5MDAxMDBGQjg3MDAwNEU2QjEwMDAwQzk4QjIyNDI2MworOjEwOUU4MDAwMTk3QzAwMDAwRjk3MDAzQTgxMzAwMTAwQzk4QjAwNDAxNworOjEwOUU5MDAwODFCMjAwMDBDOThCMjI0MjE5N0MwMDAwRkYxRjAwMEYxNQorOjEwOUVBMDAwMUU4QzAxMDA3Mzk2MDA0MDgxMzIwMTAwREI4QjlDMEZGOQorOjEwOUVCMDAwODAzMjAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTA2NAorOjEwOUVDMDAwNDJDOTAxMDBEQjhCMjI0MEUzNkQwMDAwMDAwMDAwNDUyOQorOjEwOUVEMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRDg4QkE4NDA5NAorOjEwOUVFMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMUQ4NTIyMDJGRgorOjEwOUVGMDAwODAzMjAwMDBEQzhCNDI0MDgxMzIwMDAwMDAwMDAwNDREMAorOjEwOUYwMDAwOTM5MzAxMDAwMDAwMUEwMjY4OTcwMTAwMUQ4NTAwNDAyQworOjEwOUYxMDAwMDVCMDAwMDAwNDAwQTIwNTQ4NkQwMDAwMDQwMDIyMDdGRgorOjEwOUYyMDAwODAzMjAwMDAwNTAwMkU0QjE5OTAwMTAwRkI4NzAwMDREMQorOjEwOUYzMDAwRTZCMTAwMDAwMDAwMDA0MDg3QjAwMTAwMDAwMDAwNDBEMgorOjEwOUY0MDAwOERCMDAxMDAwMDgwMDAwMzQyQzkwMTAwNDAwMDAwQTE2MworOjEwOUY1MDAwNDRDOTAxMDAwMDAwMDBGMEUwQjEwMTAwN0Y5ODAwMDY1NAorOjEwOUY2MDAwMDc0MDAxMDAwNDAwQTI1QzFGN0MwMDAwMDAwMDAwMDYwNgorOjEwOUY3MDAwMDdEMDAxMDBENDAwMkU1QzFGOTAwMTAwMDAwMDAwMDdGNAorOjEwOUY4MDAwRjBCMTAxMDAwQzgwMDAwMzQyQzkwMTAwMDAwMDAwRjBBNAorOjEwOUY5MDAwRjBCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkVBRAorOjEwOUZBMDAwOTZCMDAxMDAwMDAwMDBGRTk2QzAwMTAwMDAwMDAwRjAyNQorOjEwOUZCMDAwRjBCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkU4RAorOjEwOUZDMDAwOTZDMDAxMDAwMDAwMDBGRTk2QzAwMTAwMDAwMDAwRjBGNQorOjEwOUZEMDAwRjBCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDAwMDAwRkE3MQorOjEwOUZFMDAwOTZDMDAxMDAwMDAwMDBGRTk2QzAwMTAwMDAzMDAwNEI0QQorOjEwOUZGMDAwOTQ4ODAxMDAwMDAwMDA0Njk1RjAwMTAwMDAwMDAwNEEyRQorOjEwQTAwMDAwOTZDMDAxMDA1RTAxMkUzNDk3ODQwMTAwMDIwMDAwNEJDRgorOjEwQTAxMDAwRTRFNTAxMDA2NDAxMjA0MEUxQjEwMTAwMDkwMDAwMDcwRQorOjEwQTAyMDAwODZFNDAxMDAwMDAwMkVBNzg3QzAwMTAwMTAwMDAwMTA4OAorOjEwQTAzMDAwNDhDOTAxMDAxMDAwMDA0MEYxOTkwMTAwNTgwMTAwNDM5NworOjEwQTA0MDAwRjBDOTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwNDQwQQorOjEwQTA1MDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwMDg4Q0E4NDBFRAorOjEwQTA2MDAwODEzMjAwMDAwMDAwMDAwNTQ4QjEwMTAwMUEwMDAwNDBFNAorOjEwQTA3MDAwOTc5ODAxMDAwODAwMkU0MDk1QjAwMTAwMTA4QzIwNEJFRAorOjEwQTA4MDAwOTQ2QzAwMDAwMDAwMDA0MEYxQjEwMTAwMEQ4QzAwNDExMworOjEwQTA5MDAwOTVDMDAwMDAxMDgwMDAxMDQyQzkwMTAwMTc4QzIyNDBCQQorOjEwQTBBMDAwRTM2RDAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTBCOQorOjEwQTBCMDAwNjJERDAxMDAxMzhDQTg0MDgxMzIwMDAwMjM4MzAwODhGOAorOjEwQTBDMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMEY5NzAwNDBERgorOjEwQTBEMDAwODEzMDAxMDBFMDhCMDA0MDgxQjIwMDAwMEM4MDAwMDM2MQorOjEwQTBFMDAwNDJDOTAxMDAwMDAwMDBGODg2QjAwMTAwMDAwMDAwRjgzRAorOjEwQTBGMDAwODhCMDAxMDAxNDgwMDAwMzk4QzgwMTAwMDQwMEEyQTFFOAorOjEwQTEwMDAwOTg2QzAwMDAxRThDNDQ0MDgxMzIwMDAwMjE4Q0EyNENDRgorOjEwQTExMDAwRkQ3RjAwMDAyMjhDMDA0Q0ZEOTMwMDAwMjM4QzIwRjA3QQorOjEwQTEyMDAwNTY2RjAwMDAwMDAwMDBGMDU2QjMwMTAwMDAwMDFDNDAxNAorOjEwQTEzMDAwODFCMjAxMDA2NDAwMDA0MDgxOTgwMTAwNjQwMDAwNDA4OQorOjEwQTE0MDAwODBDQzAxMDAwNDAwQTY0MDgxMzIwMDAwRDgwMDAwNDAwRAorOjEwQTE1MDAwODE5ODAxMDAwNDAwQTI0MzgxMDQwMDAwMDA4MDAwMTBFNworOjEwQTE2MDAwNDRDOTAxMDA2NDAwMDA0MEYxOTkwMTAwNzAwMDAwMDUzRAorOjEwQTE3MDAwRjBDOTAxMDAwMDAwMDA0M0YwQjEwMTAwMDAwMDAwNDdGOQorOjEwQTE4MDAwNjFCMTAxMDAyMDAwMDAxMDYyREQwMTAwMkU4Q0E4NDRBNgorOjEwQTE5MDAwRTAzMTAwMDAxMDAwMDAxMDhDQzgwMTAwMDA4MDAwNDY3MworOjEwQTFBMDAwNDRDOTAxMDA0MDAwMDA0MEYxOTkwMTAwNjgwMTAwMDUyOAorOjEwQTFCMDAwRjBDOTAxMDA2NDAwMDA0M0YwQzkwMTAwMDQwMDI0NDAxQworOjEwQTFDMDAwODEzMjAwMDAwMDAwMDA0NzYxQjEwMTAwMDAwMDAwNDYzQworOjEwQTFEMDAwNjJCMTAxMDAzNzhDQTg0NEUwMzEwMDAwMjM4MzAwODg3RAorOjEwQTFFMDAwMUNCMDAwMDAwOTAwMDAwNzg2RTQwMTAwMzgwMDJFQTcxQgorOjEwQTFGMDAwODdDMDAxMDA4QjAwMkQwNTQ4QjEwMTAwM0Y4QzIyNDMzMAorOjEwQTIwMDAwRTc3RDAwMDAwMDAwMDA0NDQ1QzEwMTAwNDI4QzIyNDQ2QgorOjEwQTIxMDAwRTc3RDAwMDAwMDAwMDA0QzQ1QzEwMTAwMDAwMDAwNEEzRAorOjEwQTIyMDAwMTk5MDAxMDA2ODAxMjBBMkU0QjEwMTAwODgwMDAwNDBGQgorOjEwQTIzMDAwNDM5OTAxMDA0NjhDMjMwQkU1NkQwMDAwMDAwMDAwNDFBRQorOjEwQTI0MDAwMTk5MDAxMDAwMDgwMDAxMDQ0QzkwMTAwNTAwMDAwNDAzNgorOjEwQTI1MDAwRjE5OTAxMDA1ODAxMDA0M0YwQzkwMTAwNTgwMTAwMDVCRgorOjEwQTI2MDAwRTBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwMDAwMDAwMTBERAorOjEwQTI3MDAwNjJCMTAxMDA0QjhDQTg0MDgxMzIwMDAwMjM4MzAwODgyQQorOjEwQTI4MDAwMUNCMDAwMDA1QzAwMkUwNTQ4QjEwMTAwMDA4MDAwMDNGNgorOjEwQTI5MDAwNDJDOTAxMDAwMDAwNjBGMDk2QjAwMTAwQTAwMDAwNDAzQgorOjEwQTJBMDAwNDM5OTAxMDAwNDAwQTJGMjgwMzIwMDAwMEY5NzAwNDFBMAorOjEwQTJCMDAwODEzMDAxMDBFMDhCMDA0MDgxQjIwMDAwNTg4Q0EyNDkzRgorOjEwQTJDMDAwMTk3QzAwMDA4NjAwMDA0MDQ3OTkwMTAwNUM4QzAwNDAyQQorOjEwQTJEMDAwRTVCMTAwMDA4NjAwMkY0OTE5ODAwMTAwNUM4Q0EyRjJENAorOjEwQTJFMDAwODAzMjAwMDA4QjAwMDA0MDQ3OTkwMTAwMDAwMDAwNDJDRQorOjEwQTJGMDAwRTc5MTAxMDA1RjhDQTI0NjE5N0MwMDAwQTAwMDAwNDA5RAorOjEwQTMwMDAwNDc5OTAxMDA2MzhDMDA0MEU1QjEwMDAwQTAwMDJGNDY5MgorOjEwQTMxMDAwMTk4MDAxMDA2MzhDQTJGMjgwMzIwMDAwOEIwMDAwNDBBMworOjEwQTMyMDAwNDc5OTAxMDAwMDAwMDA0MUU3OTEwMTAwMDcwMDAwNEUzRAorOjEwQTMzMDAwODBFNDAxMDAwMDM5MDA0MDgwQzgwMTAwMDQwMEEyNDAxMAorOjEwQTM0MDAwMDY2QzAwMDBBODAwMDA0MDQzOTkwMTAwMzQwMDJERjA4NQorOjEwQTM1MDAwMjRCMDAxMDAwMDAwMDBGQjBDQjAwMTAwMDAwMDAwRkI3NQorOjEwQTM2MDAwMTBCMDAxMDAwMDAwMDBGQjEyQjAwMTAwMEYwMDAwRjM2QworOjEwQTM3MDAwMTY4ODAxMDAwNDAwMDBGMzE0RjQwMTAwOTM4QzI2NDBCOQorOjEwQTM4MDAwODEzMjAwMDA3OThDMjIwQTE2NkMwMDAwNTgwMDNENDM4RgorOjEwQTM5MDAwMTNFMDAxMDAwMDAwMDBGODgyQjAwMTAwMDQwMDIyRjA4OAorOjEwQTNBMDAwODQzMDAwMDAxQjk4MDA0MDgxMzIwMTAwMjM4MzAwODgyNAorOjEwQTNCMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDAwMDAwNDE5MQorOjEwQTNDMDAwMTNDMDAxMDA3ODhDQTA0MzEzNkMwMDAwMDAwMDAwNDAxMworOjEwQTNEMDAwMTNCMDAxMDA2RThDMDA0MTE1RDAwMDAwOTM4QzIyMEE0RQorOjEwQTNFMDAwODAzMjAwMDAwNDAwQTIwODEyNkMwMDAwNTgwMDNENDNCNworOjEwQTNGMDAwMTNFMDAxMDAwMDAwMDBGODgyQjAwMTAwMDQwMDIyRjAyOAorOjEwQTQwMDAwODQzMDAwMDAxQjk4MDA0MDgxMzIwMTAwNDAwMDIwNDA1MQorOjEwQTQxMDAwRTFCMTAxMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDVBQQorOjEwQTQyMDAwNDhCMTAxMDA5MzhDMjI0MTE1NTAwMDAwMDAwMDAwNDEwQQorOjEwQTQzMDAwMTFDMDAxMDA4NjhDQTA0MzExNkMwMDAwMDAwMDAwNDA5OAorOjEwQTQ0MDAwMTFCMDAxMDAwNDAwMjIwNjEwNkMwMDAwNTgwMDNENDNDQQorOjEwQTQ1MDAwMTFFMDAxMDAwMDAwMDBGODM2QjAwMTAwMDQwMDIyRjAxNQorOjEwQTQ2MDAwMDAzMDAwMDAwMDAwMDA1MDgzQjAwMTAwNTQ5NzAwNDcwNgorOjEwQTQ3MDAwNjEzMTAxMDAyMzgzMDA4ODFDQjAwMDAwMzE5NDAwMDU4NQorOjEwQTQ4MDAwNDgzMTAxMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTBBQQorOjEwQTQ5MDAwNjJERDAxMDA4RjhDQTg0MDgxMzIwMDAwMjM4MzAwODg5OAorOjEwQTRBMDAwMUNCMDAwMDA4MjhDMDAwNTQ4QjEwMDAwMzcwMDIwNDAzRAorOjEwQTRCMDAwRTdCMTAxMDA4Njk3MDA1MTgxMzAwMTAwRTA4QjAwNDAzOAorOjEwQTRDMDAwODFCMjAwMDAzNzAwMDA0MDQzOTkwMTAwMDQwMEEyRjM2QworOjEwQTREMDAwODAzMjAwMDAzNDAwMkU0MUY1QjEwMTAwMDAxMTAwNDAyRgorOjEwQTRFMDAwRTU5OTAxMDAwNDAwQTI0ODE5N0MwMDAwQTA4QzAwNDhGNgorOjEwQTRGMDAwMTk5MDAwMDAzNzAwMDA0MDQzOTkwMTAwMDQwMEEyRjNDNgorOjEwQTUwMDAwODAzMjAwMDAzNDAwMkU0MUY1QjEwMTAwMDAxMTAwNDBGRQorOjEwQTUxMDAwRTU5OTAxMDAwMDgwMDAwMzQyQzkwMTAwMDAwMDAwRjgzNQorOjEwQTUyMDAwOTRCMDAxMDBBNzhDMjI0NTIzN0MwMDAwQjAwMDJGRjBERQorOjEwQTUzMDAwOENCMDAxMDAwMDAwNjBGMDhDQzAwMTAwN0MwMDAwNDA4NQorOjEwQTU0MDAwNDM5OTAxMDAwNDAwQTNGMDhDNkMwMDAwOTAwMDAwNDBDRgorOjEwQTU1MDAwNDM5OTAxMDAzNTAwMkRGMDhDQjAwMTAwMzQwMDJERjMzQgorOjEwQTU2MDAwODRCMDAxMDAwNDAwMjJGMzg0NkMwMDAwNTgwMDNFNDNENAorOjEwQTU3MDAwODVFMDAxMDBBRThDMjI0ODE5N0MwMDAwMDAwMDAwNDFGQgorOjEwQTU4MDAwOERDMDAxMDAwMDAwNjgwQThDQzAwMTAwMzgwMDJBNEExMgorOjEwQTU5MDAwRTBCMTAxMDAyODAwMDAwMEUwQzkwMTAwM0MwMDIwMUJFMAorOjEwQTVBMDAwRTBCMTAxMDAxMDgwMDAwMzQyQzkwMTAwMDAwMDAwRjg4MgorOjEwQTVCMDAwMzhCMDAxMDAwMDAwMDBGODI2QjAwMTAwMDQwMDIyRjhDNQorOjEwQTVDMDAwMDIzMDAwMDBCQzhDMjMwMTE0NkMwMDAwMDAwMDAwRjg3NQorOjEwQTVEMDAwODBCMDAxMDAwMDAwMDBGODgyQjAwMTAwNEMwMDIwRjBDMworOjEwQTVFMDAwRTRCMTAxMDA0NDAwMjA0MEUwQjEwMTAwNDgwMDIwNDFGNgorOjEwQTVGMDAwRTBCMTAxMDBBODAwMkQxMDMyQjAwMTAwNUY5ODAwRjAxQQorOjEwQTYwMDAwMjQzMDAxMDBDNThDQTI0NDgxNkMwMDAwQzM4QzIyNDExRgorOjEwQTYxMDAwMTk3QzAwMDBCQzk1MDA0MDNCMzAwMTAwRUQ4Q0EyMDg4NQorOjEwQTYyMDAwM0MzMDAwMDBDNThDMDA0MDgxQjIwMDAwQkY5NDAwNDA2NworOjEwQTYzMDAwODEzMjAxMDBFRDhDQTIwODNDMzAwMDAwNTAwMDIwMUM0QgorOjEwQTY0MDAwRTBCMTAxMDA1NDAwMjAxM0UwQjEwMTAwNEUwMDIwMDFGMAorOjEwQTY1MDAwRTRCMTAxMDA0MDAwMjAwQUUwQjEwMTAwODY5NzAwNUZFQworOjEwQTY2MDAwODEzMDAxMDBFMDhCMDA0MDgxQjIwMDAwMzcwMDAwNDBFMworOjEwQTY3MDAwNDc5OTAxMDA5NTk1MDBGMzk0MzAwMTAwQTA4QzIyNEE3RgorOjEwQTY4MDAwODAzMjAwMDBEMThDMDA0MDgxQjIwMDAwMzcwMDAwNDBEMQorOjEwQTY5MDAwNDc5OTAxMDA5NTk1MDBGMzk0MzAwMTAwMDQwMDIwNDM5MAorOjEwQTZBMDAwOTc2QzAwMDA1ODAwM0U0Mzk3RTAwMTAwMDAwMDAwMUIzQgorOjEwQTZCMDAwRjBCMTAxMDAxRjAwNjAwMDAwOEMwMTAwRTA4Qjg1MTFFQgorOjEwQTZDMDAwODAzMjAwMDAwNDgwMDAwMzQyQzkwMTAwQjAwMDJGRjA3NgorOjEwQTZEMDAwOENCMDAxMDAwMDAwNjBGMDhDQzAwMTAwN0MwMDAwNDBFNAorOjEwQTZFMDAwNDM5OTAxMDAwNDAwQTNGMDhDNkMwMDAwODY5NzAwNUY4MgorOjEwQTZGMDAwODEzMDAxMDBFMDhCMDA0MDgxQjIwMDAwMDQwMDIyNDk1QgorOjEwQTcwMDAwMTk3QzAwMDBERjhDMDA0OTE5ODAwMDAwRTQ4QzIyNDE5NAorOjEwQTcxMDAwMTk3QzAwMDBCQzk1MDA0MDNCMzAwMTAwRTg4Q0EyMDg4OQorOjEwQTcyMDAwM0MzMDAwMDA4Njk3MDA1RjgxMzAwMTAwRTA4QjAwNDBFNAorOjEwQTczMDAwODFCMjAwMDBCRjk0MDA0MDgxMzIwMTAwRTg4Q0EyMDg4MQorOjEwQTc0MDAwM0MzMDAwMDA4Njk3MDA1RjgxMzAwMTAwRTA4QjAwNDBDNAorOjEwQTc1MDAwODFCMjAwMDA1MDAwMkQxMDMyQjAwMTAwNTQwMDJERjBFNQorOjEwQTc2MDAwMzhCMDAxMDA0RTAwMkRGMDI2QjAwMTAwNDAwMDJERjI1RgorOjEwQTc3MDAwMDJCMDAxMDAwMDAwMDBGMDE0QjAwMTAwMzAwMDAwMTAzMQorOjEwQTc4MDAwOENDODAxMDAwMDgwMDA0NjQ0QzkwMTAwNjgwMTJENDRDNgorOjEwQTc5MDAwNjFCMTAxMDAxMDAwNjhGMjgwQzgwMTAwMDAwMDAwMDhFQgorOjEwQTdBMDAwRjBCMTAxMDA1ODAxMDAwNUUwQzkwMTAwMDAwMDAwMEJGNAorOjEwQTdCMDAwMzdCMDAxMDAwMDAwMDA0MDM2RDAwMTAwNUMwMTJFNDA5RgorOjEwQTdDMDAwMTBDMDAxMDAwMDAwMDAwNjgwQzAwMTAwMDAwMDAwNTIxRgorOjEwQTdEMDAwODFEMDAxMDAxODk3MDA0MEU0MzEwMTAwMjAwMDAwNDZCQworOjEwQTdFMDAwNjJERDAxMDBGOThDQTg0MDIzMzAwMDAwMEU5NTAwNDA4NgorOjEwQTdGMDAwODEzMjAxMDAxNjk1MDA0MDgxMzIwMTAwMDc4RDgyNDFBRgorOjEwQTgwMDAwMjM0MDAwMDAyMDgwMDAxMDQyQzkwMTAwMDQ4RDIyNDAzNgorOjEwQTgxMDAwRTM2RDAwMDAwMDAwMDA0NjYxQjEwMTAwNDAwMDAwMTAzRgorOjEwQTgyMDAwNjJERDAxMDAwMThEQTg0MDgxMzIwMDAwMjM4MzAwODg5MQorOjEwQTgzMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDAwMDAwMTAzRAorOjEwQTg0MDAwMzJCMDAxMDAwMDAwMDA0MTIzQjAwMTAwMDA4MDAwMTk3NworOjEwQTg1MDAwNDRDOTAxMDAwRjhEMjI0MTE5N0MwMDAwMEI4REEzMDExQQorOjEwQTg2MDAwMEM2QzAwMDAwQzhEMDAwNjA0QjAwMDAwMDAwMDAwMDExQworOjEwQTg3MDAwMDRCMDAxMDAwRThEMjAwMjM2NkMwMDAwMDAwMDAwMUJBOQorOjEwQTg4MDAwMDRCMDAxMDAxMjhEMDAwMkUwQjEwMDAwMTE4REEzMDE5RgorOjEwQTg5MDAwMEM2QzAwMDAxMjhEMDAwNjA0QjAwMDAwMDAwMDAwMDFFNgorOjEwQThBMDAwMDRCMDAxMDAwMDAwNjgwMjE2OTQwMTAwRkZGRjAwMEJENQorOjEwQThCMDAwMTZEODAxMDAwMDAwNjgwODNFOTYwMTAwMDAwMDAwMUM0OAorOjEwQThDMDAwRjBCMTAxMDAwMDAwMDA0NjYxQjEwMTAwMjAwMDAwMTk1NAorOjEwQThEMDAwNjJERDAxMDAxNzhEQTgxM0UwMzEwMDAwNTQ4RDIyMDJDMworOjEwQThFMDAwMTQ1MDAwMDA0NDAwMkQwMjBDRDAwMTAwM0Y4REEyMDI0NAorOjEwQThGMDAwMDI1MDAwMDAyNThEMjI1QzFGN0MwMDAwMjA4MDAwMDM5OAorOjEwQTkwMDAwNDJDOTAxMDAyNDhEMjI0MEUzNkQwMDAwMDAwMDAwNDc5MQorOjEwQTkxMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMjA4REE4NDBGRgorOjEwQTkyMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDU3NQorOjEwQTkzMDAwNDhCMTAxMDA0NDAwMkQ1QzFGODAwMTAwNDgwMDJERjA0QgorOjEwQTk0MDAwMzhCMDAxMDA0QzAwMkRGMDI2QjAwMTAwMzgwMDJGRjI4NQorOjEwQTk1MDAwMDJCMDAxMDA0MThEMjIwMTE0NkMwMDAwMDQwMEE0NDBFQgorOjEwQTk2MDAwODEzMjAwMDAzMzhEMjI0NjFGN0MwMDAwMDAwMDAwNDYyQgorOjEwQTk3MDAwMUY4MDAxMDAyMDAwMkQwMzQ4QjEwMTAwMzI4RDIyNDBDQworOjEwQTk4MDAwRTM2RDAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTBEMAorOjEwQTk5MDAwNjJERDAxMDAyRjhEQTg0MDgxMzIwMDAwMjM4MzAwODhGMgorOjEwQTlBMDAwMUNCMDAwMDAzODAwMkYwNTQ4QjEwMTAwMDAwMDAwRjg3RAorOjEwQTlCMDAwOTRCMDAxMDAzODAwMkRGMDk2QjAwMTAwMDAwMDAwNEM2QQorOjEwQTlDMDAwRTFDMTAxMDAyMDAwMDAwMzQ4QzkwMTAwMDAwMDIyNEE0MworOjEwQTlEMDAwRjFCMTAxMDA0NDAwMDAwNUYwQzkwMTAwMDAwMDAwNEE4NworOjEwQTlFMDAwRjBCMTAxMDAwMDAwMDA0QkUwQjEwMTAwMDAwMDAwNDdBMQorOjEwQTlGMDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwM0M4REE4NUNGMworOjEwQUEwMDAwMUYxMDAwMDA0MThEMDAwNTQ4QjEwMDAwMDAwMDAwMDI0OQorOjEwQUExMDAwMzhDMDAxMDAwNDAwMjQ0MDgxMzIwMDAwNEY4RDIyMDYxRQorOjEwQUEyMDAwODAzMjAwMDAwMDAwMDA1MDMzQzAwMTAwNEQ4REEyMDJCMgorOjEwQUEzMDAwMzY2QzAwMDAwNDAwMjI0MTE5N0MwMDAwMDQwMDhGMEREOAorOjEwQUE0MDAwNDIzMTAwMDAwNDAwMjJGMDgwMzIwMDAwMDQwMDIyNUM0OQorOjEwQUE1MDAwRTE3RDAwMDAwNDAwQTJGMDZBMDYwMDAwMTAwMDAwRjg4QQorOjEwQUE2MDAwMTBDODAxMDAwMDAwMDA1QzExODAwMTAwRjAwNzAwNDBFOAorOjEwQUE3MDAwMzc5ODAxMDBGRDhDMDBBMTFBQjAwMDAwMDAwMDAwMDIxMAorOjEwQUE4MDAwMTBDMDAxMDBGRDhDMDAwMjM2RDAwMDAwNTAwMDIwMUNEOAorOjEwQUE5MDAwRTBCMTAxMDA1NDAwMjAxM0UwQjEwMTAwNEUwMDIwMDE5QworOjEwQUFBMDAwRTRCMTAxMDA0MDAwMjAwQUUwQjEwMTAwNUI4RDAwNUZDRAorOjEwQUFCMDAwMDFCMDAwMDAwNDAwQTIwMjAyNkMwMDAwMDQwMEEyMDIyNworOjEwQUFDMDAwMEM2QzAwMDAzNzAwMkQ0NjAxQjAwMTAwMDQwMDAwRjNCQgorOjEwQUFEMDAwODBGNDAxMDA1QThEQTA0MzgxNkMwMDAwMDAwMDAwNTVGNQorOjEwQUFFMDAwMDFCMDAxMDA0MDAwMjA0MEUxQjEwMTAwMDA4MDAwMTlFOAorOjEwQUFGMDAwNDJDOTAxMDA2MThEMjI0MEUzNkQwMDAwMDAwMDAwNDY2NAorOjEwQUIwMDAwNjFCMTAxMDA0MDAwMDAxOTYyREQwMTAwNUU4REE4NDBDNgorOjEwQUIxMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMTM5NTAwNDBBMAorOjEwQUIyMDAwODEzMjAxMDAzMDgwMDAxMDQyQzkwMTAwNjg4RDIyNDA0RQorOjEwQUIzMDAwRTM2RDAwMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTAxRQorOjEwQUI0MDAwNjJERDAxMDA2NThEQTg0MDgxMzIwMDAwMjM4MzAwODgwQQorOjEwQUI1MDAwMUNCMDAwMDA2MDAxMkYwNTQ4QjEwMTAwMDAwMDAwMEI4RgorOjEwQUI2MDAwRTRCMTAxMDAwMDAwMDA1MDE3RjAwMTAwNkQ4RDkwRjI3QgorOjEwQUI3MDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDY2MjBFMAorOjEwQUI4MDAwMTdBNDAxMDAzMjAwMDBBNjJBQzAwMTAwMDAwMDAwRjI1NAorOjEwQUI5MDAwMkE5NDAxMDA3MDhENDU0ODYxMzEwMDAwMDBEMDAwMUVFQworOjEwQUJBMDAwNjJERDAxMDA3NThEMjg0MDA1MzAwMDAwNzE4RDIyNDg1RQorOjEwQUJCMDAwNzc3RDAwMDA3ODhEMDA0MDgxQjIwMDAwMDAwMDAwMTUxNAorOjEwQUJDMDAwNjJCMTAxMDA4MzhEMjg0MDgxMzIwMDAwNzU4RDAwNDAwNAorOjEwQUJEMDAwODFCMjAwMDAwMDAwMUQwMDkyQjAwMTAwODA4RDIyNDE3MgorOjEwQUJFMDAwMTk3QzAwMDAwNDAwMjI0MDNCNkMwMDAwMDQwMEEzNDhENAorOjEwQUJGMDAwM0I2QzAwMDAwMDgwMDAwMzQyQzkwMTAwQzk5NDAwRjhDQQorOjEwQUMwMDAwMDAzMDAxMDA3RDhEQTI0MTNCNTAwMDAwODQ4RDAwNDk0MQorOjEwQUMxMDAwMDBCMDAwMDBGRjA3MDAxRTAwOEMwMTAwQzk5NDAwNDAzNgorOjEwQUMyMDAwODEzMjAxMDA4NDhEMDA0OTAwQjAwMDAwMDAwMDFENDcwMgorOjEwQUMzMDAwMTk4MDAxMDA4NzhEMjI1RjAxNkMwMDAwOEU5ODAwNDAxMgorOjEwQUM0MDAwODEzMjAxMDBBQTg4MDAwMDgwQjAwMDAwOEU4RDIyNUM1NQorOjEwQUM1MDAwMUY3QzAwMDAyMDgwMDAwMzQyQzkwMTAwOEU4RDIyNDAyRAorOjEwQUM2MDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTBFQQorOjEwQUM3MDAwNjJERDAxMDA4QjhEQTg0MDgxMzIwMDAwMjM4MzAwODhCMworOjEwQUM4MDAwMUNCMDAwMDA4RThENDAwNTQ4MzEwMDAwRkZGRjAwMDcxQQorOjEwQUM5MDAwOTQ4OTAxMDA5NDhEODVDQTk0MzAwMDAwOEU5ODE4NUNDOAorOjEwQUNBMDAwMUYwMDAxMDAwRTAwMDAwRjFFOEMwMTAwQjc4NzAwNDAzRQorOjEwQUNCMDAwODFCMjAwMDA4Njk3MTgwMDgwMzAwMTAwRTA4QjAwNDdDOQorOjEwQUNDMDAwMTk4MDAwMDAwMDAwMDA0MDE5ODAwMTAwRTA4QjIyNDczRAorOjEwQUNEMDAwMTk3QzAwMDBCRjk0MDA0MDgxMzIwMTAwOUI4REEyMDhDNgorOjEwQUNFMDAwODAzMjAwMDBFMDhCMDA0MDgxQjIwMDAwMTg5NzAwNDBFNQorOjEwQUNGMDAwMEQzMDAxMDA5QzAxMDA0MDQ1OTkwMTAwRkZGRjAwMEI1MQorOjEwQUQwMDAwOTg4ODAxMDA4QjAwMkQ1MDE3RjAwMTAwQTE4RDkwNEMwOAorOjEwQUQxMDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwQTM4RDIyNDMyRgorOjEwQUQyMDAwRTc3RDAwMDAwMDAwMDA0NDQ1QzEwMTAwMDAwMDY2MjBFRQorOjEwQUQzMDAwMTdBNDAxMDA2ODAxMDA0MDQzOTkwMTAwNUMwMTJFRjI1NAorOjEwQUQ0MDAwODBCMDAxMDAwMjAwNjI0MDdFQ0QwMTAwMDAwMDAwNTc4QgorOjEwQUQ1MDAwODFDMDAxMDAwMDAwMkUxMDQ4QjEwMTAwMDMwMDAwNDAzNgorOjEwQUQ2MDAwRjA4RDAxMDAwMDAwMDAwOEYwQjEwMTAwNTgwMTAwMDU1RAorOjEwQUQ3MDAwRTBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwMDAwMDAwMTBDMgorOjEwQUQ4MDAwNjJCMTAxMDBBRDhEQTg0MDgxMzIwMDAwMjM4MzAwODhBQworOjEwQUQ5MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwQjE4RDQ1NDgxRAorOjEwQURBMDAwNjEzMTAwMDAwMDUwMDAwODYyREQwMTAwQjc4RDI4NDBDRAorOjEwQURCMDAwMDUzMDAwMDBCMjhEMjI0ODc3N0QwMDAwQzk5NDFEMDgzRgorOjEwQURDMDAwMDAzMDAxMDBFMDhCMDA0MDgxQjIwMDAwRTA4QjFENDdBNQorOjEwQUREMDAwMTk4MDAwMDAwNDAwQTIwNTQ4NkQwMDAwMzUwMDAwNDAwNQorOjEwQURFMDAwNDc5OTAxMDAwMTAwNjNGMzg0QzgwMTAwQkQ4REEwNDNCMQorOjEwQURGMDAwODU2QzAwMDAwMDAwNjM0MDg1QjAwMTAwQTgwMDAwNDBBMQorOjEwQUUwMDAwNDM5OTAxMDAzNzAwMkZGMDI0QjAwMTAwMDQwMDIyRjMyMQorOjEwQUUxMDAwOUUwNjAwMDAwMTAwNjNGMzgyQ0MwMTAwQ0I4REEyNDFBRAorOjEwQUUyMDAwOUUwNjAwMDBFMDhCMjI0NDgzNzAwMDAwQTgwMDAwNDBEMgorOjEwQUUzMDAwNDM5OTAxMDAwNDAwQTJGMDI0NkMwMDAwMzYwMDAwNDA5OQorOjEwQUU0MDAwNDM5OTAxMDA1ODAwM0Q0M0U3RTEwMTAwRTA4QjFGRjAwQQorOjEwQUU1MDAwMjQ2QzAwMDA4RTk4MDA0ODgxMzAwMTAwQUE4ODIzNDFBQworOjEwQUU2MDAwODM2QzAwMDBBQTg4MDA0NzgxQjAwMDAwMzQwMDAwNDBENQorOjEwQUU3MDAwNDM5OTAxMDAwNDAwMjI0MkU2NkQwMDAwNTgwMDNENDM2MgorOjEwQUU4MDAwODVFMDAxMDAwMDAwMDBGODM2QjAwMTAwMDAwMDAwRjA4RAorOjEwQUU5MDAwMDBCMDAxMDAwNDAwMjIwMDgwMzIwMDAwMDQwMEEyMDA4MworOjEwQUVBMDAwQkUwNjAwMDAyODAwMDA0MDgzOTgwMTAwNTQ5NzAwNDcyOAorOjEwQUVCMDAwNjEzMTAxMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDJEMDNENQorOjEwQUVDMDAwNDhCMTAxMDAwODAwMkRGMDk0QjAwMTAwMDAwMDAwRjgyNgorOjEwQUVEMDAwOEVCMDAxMDA5MDAwMkRGMDE0QjAwMTAwMDAwMDAwMDVCQworOjEwQUVFMDAwNDhCMTAxMDBBODhDQTI0MDhGN0MwMDAwREU4RDIyNDc3MworOjEwQUVGMDAwOEY3QzAwMDAwNDAwQTI0ODE5N0MwMDAwQTg4QzAwNDg0OAorOjEwQUYwMDAwMTk5MDAwMDAwNDAwMjI0NjhGN0MwMDAwNjA4RTAwNDBGMworOjEwQUYxMDAwODFCMjAwMDAwNDAwQTIwNTQ4NkQwMDAwMzYwMDJENURERQorOjEwQUYyMDAwMDVCNDAxMDAzNzAwMkRGMzgwQjAwMTAwMDAwMDAwRjNFQworOjEwQUYzMDAwOEVCMDAxMDBGMDAwMDA0NzdFODkwMTAwMDQwMDI2NDAyOQorOjEwQUY0MDAwODEzMjAwMDA1QzAwM0Q0MzgxRTAwMTAwQTgwMDJERjA0QgorOjEwQUY1MDAwOTRCMDAxMDAwNDAwMjI0QTgwMzIwMDAwMDAwMDAwRjA5QQorOjEwQUY2MDAwMjRCMDAxMDAyMDAwMDAxMDg2REMwMTAwNDA4MDAwMDNCNgorOjEwQUY3MDAwNDRDOTAxMDA5MjkzMDA0QUYwMzEwMTAwMDQwMEEyNUMzMAorOjEwQUY4MDAwMUY3QzAwMDAzNjAwMkY1QzFGOTAwMTAwRjI4REEyNTA0NAorOjEwQUY5MDAwOEY1MDAwMDAzNDAwMjA0MEUxQjEwMTAwRTA4QjAwNDAwMAorOjEwQUZBMDAwODFCMjAwMDBGMDAwMDA0NzdFODkwMTAwMDQwMDI2NDBDNQorOjEwQUZCMDAwODEzMjAwMDAwMDAwNjM0MTgxQzAwMTAwRjc4REEwNDM5MQorOjEwQUZDMDAwODE2QzAwMDAwMDAwNjM0MDgxQjAwMTAwMzcwMDIwNDcyMQorOjEwQUZEMDAwRTZCMTAxMDBFMDhCMjI0NzgwMzIwMDAwMDQwMDAwNDcwOAorOjEwQUZFMDAwMENGNDAxMDAwMDAwMDA0RjhGODQwMTAwMEM4RTIyNDdGQQorOjEwQUZGMDAwMEM2QzAwMDA1ODAwM0Q0MzgxRTAwMTAwMEM4RTFGRjBGNgorOjEwQjAwMDAwMjQ2QzAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTAyNAorOjEwQjAxMDAwNDJDOTAxMDAwNThFMjI0MEUzNkQwMDAwMDAwMDAwNDU5QQorOjEwQjAyMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMDI4RUE4NDAwNQorOjEwQjAzMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDU4RTQyNDA0RQorOjEwQjA0MDAwMDUzMDAwMDAwMDAwMDA0NDkzOTMwMTAwMDAwMDFBNURFOQorOjEwQjA1MDAwNjk5MzAxMDAwQThFMjM0MTBENkMwMDAwRTA4RDAwMDUwQworOjEwQjA2MDAwNDhCMTAwMDA4RTk4MDAwNTQ4MzEwMTAwQUE4ODAwNDhDOAorOjEwQjA3MDAwODFCMDAwMDBFMDhCMjI0MDhGNkMwMDAwODY5NzAwNUY1QgorOjEwQjA4MDAwODEzMDAxMDBFMDhCMDA0MDgxQjIwMDAwNDAwMjAwMENFMgorOjEwQjA5MDAwN0U4OTAxMDAwNDAwQTY0MDgxMzIwMDAwQTIwMDAwNDAyOQorOjEwQjBBMDAwNDM5OTAxMDAwMDAwMDBGMzg0QjAwMTAwQTYwMDJENDk3RgorOjEwQjBCMDAwMTk5MDAxMDAwMjAwMDBGMjgwRjQwMTAwQjgwMDJENDA1OAorOjEwQjBDMDAwODFCMjAxMDAwMDAwMDBGMjgwQzAwMTAwMDAwMDAwNDBEOQorOjEwQjBEMDAwODJGODAxMDAxOTAwMDA0MDgxOTgwMTAwMUQ4RUEwNDBGNworOjEwQjBFMDAwODI2QzAwMDAyQzAxMDA0MDgxOTgwMTAwMUQ4RUEzNDA1RAorOjEwQjBGMDAwODI2QzAwMDAwMDAwMDA0MTgwQjAwMTAwMUY4RTIwNENENworOjEwQjEwMDAwODU2QzAwMDAwMDAwMDA0MTg1QzAwMTAwODYwMDIwNDBFMQorOjEwQjExMDAwRTRCMTAxMDBBMjAwMjA0MkU2QjEwMTAwRTA4QjAwNDA1MgorOjEwQjEyMDAwODFCMjAwMDAwRjk3MDA1MDgxMzAwMTAwRTA4QjAwNDA5OQorOjEwQjEzMDAwODFCMjAwMDAwNDgwMDAwMzQyQzkwMTAwMDQwMDIyRjAzMworOjEwQjE0MDAwODAzMDAwMDAwMDAwMDA0MDhEQjAwMTAwN0Y5ODAwNDA3QQorOjEwQjE1MDAwODczMDAxMDAwNDAwQTI1QzFGN0MwMDAwQjAwMDJGNUM1RgorOjEwQjE2MDAwMUY5MDAxMDAwMDAwNjBGMDgwQzAwMTAwN0MwMDAwNDBFMgorOjEwQjE3MDAwNDM5OTAxMDAwNDAwQTNGMDgwNkMwMDAwODY5NzAwNUZGMworOjEwQjE4MDAwODEzMDAxMDBFMDhCMDA0MDgxQjIwMDAwMDQwMDAwNDBFQgorOjEwQjE5MDAwODFCMjAwMDBFMDhCMjI0NjE5N0MwMDAwQTAwMDAwNDAzNAorOjEwQjFBMDAwNDc5OTAxMDAwMTAwNjJGMjk2Q0MwMTAwRTA4QkE2NDBCNQorOjEwQjFCMDAwODEzMjAwMDA4Njk3MDA0QTgxMzAwMTAwNUI5NzAwNDY4QgorOjEwQjFDMDAwOTUzMDAxMDBFMDhCMDA0MDgxQjIwMDAwRTA4QjIyNDkwNQorOjEwQjFEMDAwMTk3QzAwMDA4NjAwMDA0MDQ3OTkwMTAwMDEwMDYyRjJERQorOjEwQjFFMDAwODBDQzAxMDBFMDhCQTY0MDgxMzIwMDAwODY5NzAwNEFBNworOjEwQjFGMDAwODEzMDAxMDA1Qjk3MDA0Nzk1MzAwMTAwRTA4QjAwNDBGMworOjEwQjIwMDAwODFCMjAwMDAzMTk0MDA0MDgxMzIwMTAwMDQwMEEyNUM1MAorOjEwQjIxMDAwMUY3QzAwMDBFMDhCMDA1QzFGOTAwMDAwMDQwMEEyNDYzMQorOjEwQjIyMDAwMTk3QzAwMDBFMDhCMDA0MDgxQjIwMDAwMDQwMEEyNDlCQworOjEwQjIzMDAwMTk3QzAwMDBFMDhCMDA0MDgxQjIwMDAwQkEwMDAwNDBBMQorOjEwQjI0MDAwNDc5OTAxMDAwMTAwNjJGMjgwQzgwMTAwNDk4RTkwNDBEOAorOjEwQjI1MDAwODAzMjAwMDBGRkZGNjI0MDgxOTgwMTAwQTQwMDAwNDA5RQorOjEwQjI2MDAwNDc5OTAxMDBFMDhCMjI0MEU1NkQwMDAwRTA4QjAwNDEzMgorOjEwQjI3MDAwRTVDMTAwMDAwRjk3MDA0RDgxMzAwMTAwRTA4QjAwNDBEOAorOjEwQjI4MDAwODFCMjAwMDA1QzAwMDA0MDQ3OTkwMTAwMDQwMDIyRjBGOAorOjEwQjI5MDAwOTYzMDAwMDAwMDAwMDA0MEUxQjEwMTAwMDA4MDAwMDM5MgorOjEwQjJBMDAwNDRDOTAxMDAwMDAwMDA0QkUwQjEwMTAwMDAwMDAwNDA3MworOjEwQjJCMDAwOERCMDAxMDA3Rjk4MDA0MDg3MzAwMTAwOEIwMDAwNDA3NgorOjEwQjJDMDAwNDc5OTAxMDA1OThFODBGMzk2MzAwMDAwMDAwMDAwNDAzRAorOjEwQjJEMDAwRTc4MTAxMDAwMDAwMDA0NzE5OTAwMTAwMDQwMEEyNUMxMgorOjEwQjJFMDAwMUY3QzAwMDBFMDhCMDA1QzFGOTAwMDAwMzcwMDAwNDBENgorOjEwQjJGMDAwNDM5OTAxMDAwNDAwQTJGMzgwMzIwMDAwMzQwMDAwNDBCMgorOjEwQjMwMDAwNDU5OTAxMDAwMTAwMDA0MEY1OTkwMTAwMDAxMTAwNDAzRAorOjEwQjMxMDAwRTU5OTAxMDBCRjk0MDA0MDgxMzIwMTAwNzE4RUEyMDhCRQorOjEwQjMyMDAwODAzMjAwMDAzNzAwMDA0MDQ3OTkwMTAwMDAwMDAwRjMyMAorOjEwQjMzMDAwODJCMDAxMDAwMDAwNjM1MTgzRDAwMTAwMzQwMDAwNDA1RQorOjEwQjM0MDAwNDc5OTAxMDAwMTAwNjNGMzg0Q0MwMTAwNjk4RTlGNDI5QworOjEwQjM1MDAwODAzMjAwMDAwMDAwNjM0Mjg1QjAwMTAwMDAwMDAwNDUxQgorOjEwQjM2MDAwMDNGMDAxMDAwMDAwMDAwMTAwQzAwMTAwNkI4RTM3NUM5QgorOjEwQjM3MDAwNjEzMTAwMDAwMDAwMDAxQjYyQjEwMTAwNkM4RUE4NEIxRgorOjEwQjM4MDAwMTkxMDAwMDAwMDAwMDAwMDYyQjEwMTAwNkU4RUE4NDA5QworOjEwQjM5MDAwODEzMjAwMDBGMDg3MTc0MDgxQjIwMDAwMDA4MDAwMDM3NgorOjEwQjNBMDAwNDJDOTAxMDA5MDAwMkRGMDk0QjAwMTAwQUMwMDJERjBENgorOjEwQjNCMDAwMzBCMDAxMDAzNTAwMkRGMDI4QjAwMTAwMzQwMDJERjMyRAorOjEwQjNDMDAwODRCMDAxMDAwNDAwMjJGMzg0NkMwMDAwNTgwMDNFNDM2NgorOjEwQjNEMDAwODVFMDAxMDAwMTAwMDAxOEYwQzkwMTAwMDAwMDAwNEFFQQorOjEwQjNFMDAwRTBCMTAxMDAzODAwMjAwMEUwQjEwMTAwM0MwMDIwMUI2QQorOjEwQjNGMDAwRTBCMTAxMDA0MDAwMjA0MEUxQjEwMTAwMDAwMDAwNDA0OAorOjEwQjQwMDAwMkJCMDAxMDA2QTk3MDA0MDBEMzAwMTAwMDAwMDAwMThDOQorOjEwQjQxMDAwMTZDMDAxMDA4MjhFQTAxNDE2NDQwMDAwMDAwMDAwNDFGNgorOjEwQjQyMDAwMTdDMDAxMDAwRTAwMDBBMjQ0QzkwMTAwMDAwMDAwMTg2RQorOjEwQjQzMDAwRjhCMTAxMDBCMDAwMkQxNEY4QjEwMTAwMTA1MDAwNDAyNworOjEwQjQ0MDAwODc5ODAxMDA4QjhFMjI0QTE5N0MwMDAwMDAzMDAwNDM0RgorOjEwQjQ1MDAwODZDODAxMDAwMDMwMDAwQjE2QzgwMTAwOEI4RUE0NDA4NgorOjEwQjQ2MDAwODEzMjAwMDAwMDAwMDA0MTE3QzAwMTAwMDEwMDZFNDM1RQorOjEwQjQ3MDAwODY5ODAxMDBBRTk3MDAzMDgxMzAwMTAwOEY4RUEwNDE4OAorOjEwQjQ4MDAwMTc0MDAwMDAwMDAwMDA0MTE3QzAwMTAwOTY4RTIyNEFCQworOjEwQjQ5MDAwMTk3QzAwMDAwODAwMDBBMjQ0QzkwMTAwQ0MwMDJEQUJCQgorOjEwQjRBMDAwRjlCMTAxMDAwMDAwMDBBQjE3QzAwMTAwOTU4RUEwRjBCQgorOjEwQjRCMDAwMTY0NDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMDY0RjBDNQorOjEwQjRDMDAwODJCMDAxMDA5MDAwMDA0MDQ1OTkwMTAwMDAwMDYwNDFGOQorOjEwQjREMDAwMzFDMDAxMDBCQzAwMDA0MDQzOTkwMTAwOUM4RTA2MEM2NQorOjEwQjRFMDAwODAzMjAwMDBBMDAwMjBGMkU0QjEwMTAwMDQwMDA5NDYwRgorOjEwQjRGMDAwMTkxMDAwMDA5QzAxMDA0MDQ1OTkwMTAwRkZGRjAwMEI1RQorOjEwQjUwMDAwOTg4ODAxMDA4QjAwMkQ1MDE3RjAwMTAwQTE4RTkwNENGRgorOjEwQjUxMDAwMTY0MDAwMDAwMDAwMDA0MTE3QzAwMTAwQTM4RTIyNDMyNgorOjEwQjUyMDAwRTc3RDAwMDAwMDAwMDA0NDQ1QzEwMTAwMDAwMDY2MjBFNgorOjEwQjUzMDAwMTdBNDAxMDA2ODAxMDA0MDQzOTkwMTAwNUMwMTJFRjI0QworOjEwQjU0MDAwODBCMDAxMDAwMjAwNjI0MDdFQ0QwMTAwMDAwMDAwNTc4MworOjEwQjU1MDAwODFDMDAxMDAwMDAwMkUxMDQ4QjEwMTAwMDMwMDAwNDAyRQorOjEwQjU2MDAwRjA4RDAxMDAwMDAwMDAwOEYwQjEwMTAwNTgwMTAwMDU1NQorOjEwQjU3MDAwRTBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwMDAwMDAwMTBCQQorOjEwQjU4MDAwNjJCMTAxMDBBRDhFQTg0MDgxMzIwMDAwMjM4MzAwODhBMworOjEwQjU5MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwQjE4RTQ1NDgxNAorOjEwQjVBMDAwNjEzMTAwMDAwMDUwMDAwODYyREQwMTAwQjI4RUE4NDA0OQorOjEwQjVCMDAwMDUzMDAwMDAzNTAwMUQ0MDQ3OTkwMTAwMDEwMDYzRjM4QworOjEwQjVDMDAwODRDODAxMDBCODhFQTA0Mzg1NkMwMDAwMDAwMDYzNDA3MQorOjEwQjVEMDAwODVCMDAxMDAzNzAwMDA0MDQ3OTkwMTAwMDQwMDIyRjNDNAorOjEwQjVFMDAwOUUwNjAwMDAwMTAwNjNGMzgyQ0MwMTAwMDQwMEEyNDEyQQorOjEwQjVGMDAwOUUwNjAwMDA4QjAwMDA0MDQ3OTkwMTAwMDQwMEEyNDUxMAorOjEwQjYwMDAwRTc3RDAwMDAwMDAwMDA0NUU3OTEwMTAwODY5NzAwNUY5QworOjEwQjYxMDAwODEzMDAxMDBFMDhCMDA0MDgxQjIwMDAwMzcwMDAwNDAyMworOjEwQjYyMDAwNDc5OTAxMDA5NTk1MDBGMzk0MzAwMTAwNjA4RTIyNEFGRAorOjEwQjYzMDAwODAzMjAwMDBEMThDMDA0MDgxQjIwMDAwMzcwMDAwNDAxMQorOjEwQjY0MDAwNDc5OTAxMDA5NTk1MDBGMzk0MzAwMTAwOUE4QzIyNEFBNQorOjEwQjY1MDAwODAzMjAwMDBEMThDMDA0MDgxQjIwMDAwMzYwMDAwNDBGMgorOjEwQjY2MDAwNDM5OTAxMDAwMDAwMDBGQjEyQjAwMTAwMEYwMDAwRjMzRAorOjEwQjY3MDAwOTA4ODAxMDAwNDAwMDBGMzBDRjQwMTAwMDQwMDI2NDA0RgorOjEwQjY4MDAwODEzMjAwMDBDQjhDMjIwNjkwNkMwMDAwMDQwMEFBNDA5RQorOjEwQjY5MDAwODEzMjAwMDA1QzAwM0Q0MzEzRTAwMTAwQTgwMDJERjA2MgorOjEwQjZBMDAwOTRCMDAxMDAwNDAwMjI0MDk1NkMwMDAwMzcwMDJGRjA5OAorOjEwQjZCMDAwMjRCMDAxMDAzNjAwMkE1MEU3RDEwMTAwMDAwMDYzNDFBOAorOjEwQjZDMDAwMTNDMDAxMDBEODhFQTA0MzEzNkMwMDAwMDAwMDAwNDA5RQorOjEwQjZEMDAwRTdCMTAxMDA4RjkzMDAxMDg2MzAwMTAwMjM4MzAwODhCQQorOjEwQjZFMDAwMUNCMDAwMDBEQThFNDIwNTQ4MzEwMDAwMDAwMDAwNDQyMgorOjEwQjZGMDAwOTM5MzAxMDBDQjhDMUE1RDY5OTMwMDAwMDQwMEEyMDVBRQorOjEwQjcwMDAwNDg2RDAwMDAzNjAwMkQxMDg2QjAwMTAwNUMwMDNENDNGRQorOjEwQjcxMDAwRTdFMTAxMDBBODAwMkRGMDk0QjAwMTAwMDQwMDIyNEFFNgorOjEwQjcyMDAwODAzMjAwMDAzNTAwMkZGMDI0QjAwMTAwMDEwMDZCRkJENworOjEwQjczMDAwODRDODAxMDBFNzhFQTA0Mzg1NkMwMDAwMzUwMDIwNDBERQorOjEwQjc0MDAwRTdCMTAxMDAwMDAwMDA0MDgxQjIwMTAwMDEwMDYzRjM5NQorOjEwQjc1MDAwMTJDODAxMDBFQThFQTA0MzEzNkMwMDAwMDAwMDAwNDBGNAorOjEwQjc2MDAwRTdCMTAxMDA0MDgwMDAwMzQ0QzkwMTAwOTI5MzAwNEEwMAorOjEwQjc3MDAwRjAzMTAxMDAyMzgzMDA4ODFDQjAwMDAwRUQ4RTQyMDVFQgorOjEwQjc4MDAwNDgzMTAwMDAwMDAwMDA0NDkzOTMwMTAwMDAwMDFBNUQ1RQorOjEwQjc5MDAwNjk5MzAxMDAzNzAwMDA0MDQ3OTkwMTAwMDQwMDIyRjMzQgorOjEwQjdBMDAwOUUwNjAwMDAxMTAwNjNGMzgyQ0MwMTAwMDQwMDFGNDFEQgorOjEwQjdCMDAwODAzMjAwMDBDMjhEMjI0MTlFMDYwMDAwMzUwMDAwNDAwQworOjEwQjdDMDAwNDM5OTAxMDA1ODAwM0Q0M0U3RTEwMTAwMDAwMDAwRjgwMworOjEwQjdEMDAwMzZCMDAxMDBEMDhEMDBGMDAwQjAwMDAwNUUwMTJEMDVGNAorOjEwQjdFMDAwNDhCMTAxMDBGQThFNjVGMjEyMzAwMDAwMDA5OTNGNDIyNAorOjEwQjdGMDAwMTNGMDAxMDBGRjhFMjI0N0U3N0QwMDAwMjc4Mzc1ODg0NAorOjEwQjgwMDAwMUNCMDAwMDBGOThFMDA0MDgxQjIwMDAwMDAwMDAwNDcyQgorOjEwQjgxMDAwRTc5MTAxMDAwMDAwNzU0MjE5OTAwMTAwNzUwMDAwNDA5OQorOjEwQjgyMDAwNjE5OTAxMDAwMThGQThCMTBDMzAwMDAwQTk5NjAwMTBBOQorOjEwQjgzMDAwOTQzMDAxMDAyMzgzMDA4ODFDQjAwMDAwNUUwMTJFMDVCNworOjEwQjg0MDAwNDhCMTAxMDBDMEE4M0Q0NjBERTAwMTAwMDAwMDAwNDBFNQorOjEwQjg1MDAwOTdCMDAxMDAwQjhGMjI0MEUxNkQwMDAwMDQwMDAyNDEwRgorOjEwQjg2MDAwOTc0MDAwMDAwODhGMDA1MDQzQzEwMDAwMTc4RjIyNEIwMworOjEwQjg3MDAwODAzMjAwMDAwMDAwNjI0QjEyOTQwMTAwMDkwMDAwMDdCMgorOjEwQjg4MDAwOTZFNDAxMDAwMDAwMDBBNzk3QzAwMTAwMzAwMDAwMTBGRQorOjEwQjg5MDAwOTRDODAxMDAwMDgwMDA0QTQ0OTkwMTAwMDAwMDAwNDI2MQorOjEwQjhBMDAwRjFCMTAxMDA1RTAxMDA0QkYwQzkwMTAwNUUwMTAwMDUyRAorOjEwQjhCMDAwRTBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwMjAwMDAwNEExRAorOjEwQjhDMDAwNjJERDAxMDAxNThGQTg0MDgxMzIwMDAwMDA4MDAwMTA2OQorOjEwQjhEMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDQwMDAwMDk1QQorOjEwQjhFMDAwOTZFNDAxMDAwMDAwNjhBODk3QzAwMTAwRDQwMDAwMDU5QworOjEwQjhGMDAwRTBDOTAxMDAwMDAwMDA0NDYxQjEwMTAwMDAwMDAwMTAzNworOjEwQjkwMDAwNjJCMTAxMDAxRDhGQTg0MDgxMzIwMDAwMjM4MzAwODhBRQorOjEwQjkxMDAwMUNCMDAwMDAwMDk5M0Y0MjEzRjAwMTAwMjE4RjY1NDBFOAorOjEwQjkyMDAwODEzMjAwMDAzRjAwMDBGMzk2ODgwMTAwMDAwMDAwNDBEMworOjEwQjkzMDAwRTdCMTAxMDAwMDAwNzU1NTYxQjEwMTAwMDAwMDAwMDY4QgorOjEwQjk0MDAwNjJCMTAxMDAyNThGQTg0MDgxMzIwMDAwMkE4RjIyNEI2RQorOjEwQjk1MDAwODAzMjAwMDAwMDAwMDA0QjYyQjEwMTAwMjg4RkE4NDAzNworOjEwQjk2MDAwODEzMjAwMDAwMDAwMDA5NzEzQjAwMTAwMDAwMDAwOTYzMworOjEwQjk3MDAwOTdCMDAxMDAzMDhGMjAwOTk2NkMwMDAwMzA4RjFGMDlBRQorOjEwQjk4MDAwOTYyNDAwMDAyNzgzMDA4ODFDQjAwMDAwMkI4RjAwNDAwNQorOjEwQjk5MDAwODFCMjAwMDAwRjk3MDA1NzgxMzAwMTAwQzk4QjAwMDU2QworOjEwQjlBMDAwNDhCMTAwMDAwNDAwMjI0MjE5N0MwMDAwMkUwMDAwNDAzMworOjEwQjlCMDAwNDM5OTAxMDAzNzhGMjJGMzgwMzIwMDAwMEY5NzAwNDIzNQorOjEwQjlDMDAwODEzMDAxMDBGMDg3MDA0MDgxQjIwMDAwODY5NzAwNTI2QworOjEwQjlEMDAwODEzMDAxMDBDOThCMDA0MjE5ODAwMDAwMDQwMDIyNDIxRQorOjEwQjlFMDAwMTk3QzAwMDAwRjk3MDAzQTgxMzAwMTAwODY5NzAwNTJDMQorOjEwQjlGMDAwODEzMDAxMDBDOThCMDA0MDgxQjIwMDAwMDAwMDAwNDA4RQorOjEwQkEwMDAwMDVCMDAxMDAwNTk2MDA0MDk1MzAwMTAwQzk4QjIyNDAyOQorOjEwQkExMDAwOTU2QzAwMDAyNDA0MDA0MDg5OTgwMTAwMDk5OTAwMDBGOQorOjEwQkEyMDAwOEEzMDAxMDA0NThGQTI0MDFGN0MwMDAwQzk5NDAwNDA2RAorOjEwQkEzMDAwODEzMjAxMDBGMDg3MDA0MDgxQjIwMDAwMDQ4MDAwMDNFMQorOjEwQkE0MDAwNDJDOTAxMDAwMDAwMDBGMjAyQjAwMTAwQTU5NTAwNTJCOQorOjEwQkE1MDAwOTUzMDAxMDBBQzk1MDA0QjAyQjAwMDAwRjA4NzAwNDAyQgorOjEwQkE2MDAwODFCMjAwMDAyQjk4MDA0MDk1MzAwMTAwNTE4RkEyMDg1MAorOjEwQkE3MDAwODAzMjAwMDA1MThGQTIxNjgwMzIwMDAwRjA4NzIyNDJFRgorOjEwQkE4MDAwMTk3QzAwMDAwMDAwMDA0QjE5OTAwMTAwMEY5NzAwM0E0QworOjEwQkE5MDAwODEzMDAxMDBGMDg3MDA0MDgxQjIwMDAwMDAyMzAwQTY0MQorOjEwQkFBMDAwMTZCMDAxMDA1NDhGODMxRTgwMzIwMDAwMDAwODAwMEI4NgorOjEwQkFCMDAwMTZEQzAxMDAwMDAwMDAwMDJBQzAwMTAwNUU5NzAwMDhBQgorOjEwQkFDMDAwODAzMDAxMDA1ODhGMDA1RTE3OTAwMDAwN0Y5NzAwNDM4MAorOjEwQkFEMDAwNjEzMTAxMDA5RTkzMDA0MDhEMzAwMTAwNjY5NzAwMDdBMAorOjEwQkFFMDAwMTYxNDAxMDAwMDgwMDAxMDQyQzkwMTAwNjA4RjIyNDAzRQorOjEwQkFGMDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA1MAorOjEwQkIwMDAwNjJERDAxMDA1RDhGQTg0MDgxMzIwMDAwMjM4MzAwODg0MAorOjEwQkIxMDAwMUNCMDAwMDAwMDk3MDA1RTA1MTAwMTAwQzk5NDAwNDBCMQorOjEwQkIyMDAwODEzMjAxMDA2NDhGMjIwOTgwMzAwMDAwODY5NzAwNDAzNgorOjEwQkIzMDAwMTMzMDAxMDBEMDhCMDAwNTQ4QjEwMDAwM0M5NjAwNDA1NgorOjEwQkI0MDAwODEzMjAxMDBDOThCMDA0MDgxQjIwMDAwMDQwMEEyNEE4QQorOjEwQkI1MDAwMUY3QzAwMDAwMDAwMDA0QTFGOTAwMTAwNkM4RjIyNDNGMAorOjEwQkI2MDAwM0Q3QzAwMDAwMDAwMDA0NDE5OTAwMTAwMDAwMDAwNDNFQgorOjEwQkI3MDAwM0Q4MDAxMDA2RDhGMDA0MjE5OTAwMDAwMDQwMEEyNEYyQgorOjEwQkI4MDAwMkI3QzAwMDAwNDAwQTI0NTFGN0MwMDAwMTQwMDJENDUwMgorOjEwQkI5MDAwMUY5MDAxMDAwNDAwQTJGMDE0NkMwMDAwMDQwMEEwMDEzQQorOjEwQkJBMDAwMTQ2QzAwMDBERjhGODMxRTgwMzIwMDAwREY4RjAwNDRBMgorOjEwQkJCMDAwMTk5MDAwMDAyRjAwMDA0MDQzOTkwMTAwMDQwMEEyNDdBMworOjEwQkJDMDAwRTc3RDAwMDBCNDk0MDA0MDgxMzIwMTAwODc4RkEyMDgxNQorOjEwQkJEMDAwODAzMjAwMDA4NzhGQTIxNjgwMzIwMDAwODM4RkEyNDIzRAorOjEwQkJFMDAwMTk3QzAwMDAwMDgyMDAwMjA0REMwMTAwQTA5ODAwNDBFMworOjEwQkJGMDAwNDc5OTAxMDAzMDA1MDA0MTg5MzAwMTAwODA4RkEyNDE0MgorOjEwQkMwMDAwMTk3QzAwMDBDOTk0MDA0MDgxMzIwMTAwRjA4NzAwNDA5NworOjEwQkMxMDAwODFCMjAwMDBBNTk1MDAxNTk0MzAwMTAwQUM5NTAwNEI1MQorOjEwQkMyMDAwMDJCMDAwMDBGMDg3MDA0MDgxQjIwMDAwM0M5NjAwNDA2NgorOjEwQkMzMDAwODEzMjAxMDAwMDAwMDA0QjE5OTAwMTAwMEY5NzAwM0E3QgorOjEwQkM0MDAwODEzMDAxMDBGMDg3MDA0MDgxQjIwMDAwOEE4RjIyNDJEQgorOjEwQkM1MDAwMTk3QzAwMDAzQzk2MDA0MDgxMzIwMTAwOEI4RjAwNDAyRgorOjEwQkM2MDAwODFCMjAwMDAwNTk2MDA0MDgxMzIwMTAwQzM4RjIyNDE1RAorOjEwQkM3MDAwMTk3QzAwMDBDMDAwMDAxNTk4QzgwMTAwQzM4RkEwMEJGQworOjEwQkM4MDAwOTk2QzAwMDAwNDAwMjI0NDFGN0MwMDAwRkYwNzAwMDBBNAorOjEwQkM5MDAwN0U4OTAxMDAwNDAwQTY0MDgxMzIwMDAwMzAwMDAwMTBCRgorOjEwQkNBMDAwODBDODAxMDAwMDgwMDA0MDQ0OTkwMTAwMDAwMDAwNTA1RAorOjEwQkNCMDAwRjFCMTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwNDJGQQorOjEwQkNDMDAwNjFCMTAxMDAwMDAwMDA0MDYyQjEwMTAwOTY4RkE4MDA0MAorOjEwQkNEMDAwRTAzMTAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDU1NAorOjEwQkNFMDAwNDhCMTAxMDBDMDAwMDAxNTk4QzgwMTAwMzAwMDJFMEJCQgorOjEwQkNGMDAwOTlEMDAxMDAwMDAwNkE1MDk5QzAwMTAwMDQwMDIwMEI5NworOjEwQkQwMDAwOTk2QzAwMDBDMDAwNjIwMTgwQ0MwMTAwMEM4MDAwMDMyRgorOjEwQkQxMDAwNDJDOTAxMDAyRDAwMkRGMDIyQjAwMTAwMDAwMDAwNENBRQorOjEwQkQyMDAwODBDMDAxMDAwMDAwMDA1QzIzODAwMTAwRDQwMDNGNDE3RQorOjEwQkQzMDAwRTdFMTAxMDAwNDAwMjI0MjE5N0MwMDAwMEIwMDAwRjI0MAorOjEwQkQ0MDAwOThFNDAxMDAwMDAwMDA1QTk5ODAwMTAwMDQwMEEyMDA1QworOjEwQkQ1MDAwOTg2QzAwMDAyMDA0MDA0MDg5OTgwMTAwMDk5OTAwMTFBNgorOjEwQkQ2MDAwOEEzMDAxMDAwQjAwMDAxMUU0RjUwMTAwMkYwMDIwNDc4QworOjEwQkQ3MDAwRTdCNTAxMDBBRThGMjMwQjgxNkMwMDAwMDAwMDAwNEY3RgorOjEwQkQ4MDAwRTU5MTAxMDAwMDAwMDAwODgwQjAwMTAwQzEwMDAwMDE0MQorOjEwQkQ5MDAwODBDRTAxMDAwNDAwQTQ0MDgxMzIwMDAwMDAwMDAwMEJBRQorOjEwQkRBMDAwMDNCMDAxMDAwMDAwMDAxNTAyRDAwMTAwNUU5NzAwMDAwMgorOjEwQkRCMDAwMkE0MDAxMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA3MgorOjEwQkRDMDAwNjJERDAxMDBCNThGQTg0MDgxMzIwMDAwMjM4MzAwODgyNgorOjEwQkREMDAwMUNCMDAwMDBDOTk0MDAwNTQ4MzEwMTAwQzAwMDAwMDFGQQorOjEwQkRFMDAwODBDRTAxMDBDMThGMjYxMTAwMzAwMDAwMTAwMDAwMDAzRAorOjEwQkRGMDAwMkFDODAxMDAwMDAwMDAwODgwQjAwMTAwMDAwMDAwMDExNgorOjEwQkUwMDAwODBDMDAxMDBDMDAwMDA0MDk5OTgwMTAwMDAwMDAwMDFCRQorOjEwQkUxMDAwOThEMDAxMDA1RTk3MDA0QzAyMzAwMTAwQzAwMDAwNDA0NQorOjEwQkUyMDAwMDM5ODAxMDBDQjhGMDA0MDgxQjIwMDAwMzAwMDJGMDg0MgorOjEwQkUzMDAwODBCMDAxMDBDMDAwMDAxNUY0QzkwMTAwQzAwMDAwMDE3RAorOjEwQkU0MDAwRTRDRDAxMDBDMTAwMDAwMTgwQ0UwMTAwMDQwMEE0NDA0NworOjEwQkU1MDAwODEzMjAwMDAwNDAwMjAwQkU1NkQwMDAwQzAwMDAwNDBBRQorOjEwQkU2MDAwMDM5ODAxMDA1RTk3MDAwMDJBNDAwMTAwRDA4RjIyNDQxMQorOjEwQkU3MDAwMUY3QzAwMDBBQzAwMkY0MDEzQjAwMTAwMDAwMDAwMDE0NworOjEwQkU4MDAwRTBDMTAxMDBCMDAwMDA0MDQ3OTkwMTAwRDE4RjAwMDFERQorOjEwQkU5MDAwRTBEMTAwMDA5RTkzMDA0MDhEMzAwMTAwODA2MzAwQTYzOQorOjEwQkVBMDAwMTZCMDAxMDA2Njk3MDAwNzE2MTQwMTAwMDA4MDAwMTAwQworOjEwQkVCMDAwNDJDOTAxMDBEOThGMjI0MEUzNkQwMDAwMDAwMDAwNDMxOQorOjEwQkVDMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRDY4RkE4NDA4MgorOjEwQkVEMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDA5NzAwNUVDMAorOjEwQkVFMDAwMDUxMDAxMDBEQzhGMjIwOTgwMzAwMDAwODY5NzAwNDA5OQorOjEwQkVGMDAwODEzMjAxMDBDOThCMDAwNTQ4QjEwMDAwMDQwMEEyNEE0QworOjEwQkYwMDAwMUY3QzAwMDBERjhGMDA0QTFGOTAwMDAwMDQwMEEyNEYzQQorOjEwQkYxMDAwMkI3QzAwMDAwNDAwQTI1QzFGN0MwMDAwMDQwMEEyNDRGMworOjEwQkYyMDAwMUY3QzAwMDAwMDAwMDAwMDEwQjAwMTAwMjQwMDJEMTU0RgorOjEwQkYzMDAwMTBDMDAxMDAyODAwMkRGMDE2QjAwMTAwMjIwMDJERjBFNQorOjEwQkY0MDAwMjZCMDAxMDAxNDAwMkZGMjBDQjAwMTAwMDAwMDAwMDEyNworOjEwQkY1MDAwRTBEMTAxMDAwMDAwMDAxMDMyQjAwMTAwMDAwMDAwMEIzMQorOjEwQkY2MDAwMUJCMDAxMDAwNDAwMUYxNTFBNTAwMDAwMDAwMDAwNDAyMworOjEwQkY3MDAwMjNCMDAxMDAwMDAwMDAwMTJBQjAwMTAwQkU5NjAwNDA3RAorOjEwQkY4MDAwMzVCMDAwMDAyRjAwMjA0MEU3QjEwMTAwMjk5MEEyNDUwNAorOjEwQkY5MDAwMUY3QzAwMDAwNDAwQTIwNTQ4NkQwMDAwMjQwMDIwMEI1NworOjEwQkZBMDAwRTBCMTAxMDAyODAwMjAxM0UwQjEwMTAwMjIwMDIwMDZDQQorOjEwQkZCMDAwRTRCMTAxMDBGRDhGMjI1QzFGN0MwMDAwMDAwMDAwNUNFQQorOjEwQkZDMDAwMUY4MDAxMDAzMDgwMDAxMDQyQzkwMTAwRkQ4RjIyNDAxNworOjEwQkZEMDAwRTM2RDAwMDAwMDAwMDA0NzYxQjEwMTAwNDAwMDAwMTA2NworOjEwQkZFMDAwNjJERDAxMDBGOThGQTg0MDgxMzIwMDAwMjM4MzAwODhDMAorOjEwQkZGMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMTQwMDAwNDAyMgorOjEwQzAwMDAwNDM5OTAxMDAwNDAwQTJGMDE0NkMwMDAwMDA4MDAwMTlBNAorOjEwQzAxMDAwNDJDOTAxMDAyMjkwMjI0MEUzNkQwMDAwMTA5MDIyNDJBQworOjEwQzAyMDAwMTk3QzAwMDA3Mzk2MDA0MDgxMzIwMTAwNUE5NDAwNDA1MAorOjEwQzAzMDAwODEzMjAxMDAxRDkwMjI0QjgwMzIwMDAwMDAwMDAwNDMzRAorOjEwQzA0MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMDY5MEE4NDBDRgorOjEwQzA1MDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMEM5MDIyNDEzNAorOjEwQzA2MDAwMTk3QzAwMDBFNzk0MDA0MDExMzAwMTAwMEQ5MDAwMDU5QworOjEwQzA3MDAwNDhCMTAwMDBDOTk0MDA0MDgxMzIwMTAwMEY5MDIyMDlBQworOjEwQzA4MDAwODAzMDAwMDA4Njk3MDA0MDgxMzIwMTAwMkY4MzAwNDBGRAorOjEwQzA5MDAwMDVCMDAwMDA3Mzk2MDA0MDgxMzIwMTAwNEY5NDAwNDBDQgorOjEwQzBBMDAwODEzMjAxMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTAzNgorOjEwQzBCMDAwNjJERDAxMDAxMzkwQTg0MDgxMzIwMDAwMjM4MzAwODhENAorOjEwQzBDMDAwMUNCMDAwMDAxOTkwMjI0MTE5N0MwMDAwRTc5NDAwNDA0OAorOjEwQzBEMDAwMTEzMDAxMDAxQTkwMDAwNTQ4QjEwMDAwQzk5NDAwNDBEOQorOjEwQzBFMDAwODEzMjAxMDAxQzkwMjIwOTgwMzAwMDAwODY5NzAwNDBCOAorOjEwQzBGMDAwODEzMjAxMDAyRjgzMDA0MDA1QjAwMDAwMDAwMDAwNDNBMgorOjEwQzEwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMUU5MEE4NDBGNgorOjEwQzExMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDU2RAorOjEwQzEyMDAwNDhCMTAxMDAyNTkwMjI0MTE5N0MwMDAwRTc5NDAwNDBBRAorOjEwQzEzMDAwMTEzMDAxMDAyNjkwMDAwNTQ4QjEwMDAwQzk5NDAwNDA2QworOjEwQzE0MDAwODEzMjAxMDAyODkwMjIwOTgwMzAwMDAwODY5NzAwNDA0QgorOjEwQzE1MDAwMTMzMDAxMDBEMDhCMDA0MDA1QjAwMDAwMTQwMDAwNDBGNworOjEwQzE2MDAwNDM5OTAxMDAwNDAwQTJGMDE0NkMwMDAwMDA4MDAwMTk0MworOjEwQzE3MDAwNDJDOTAxMDAzMjkwMjI0MEUzNkQwMDAwMDAwMDAwNDNGQworOjEwQzE4MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMkU5MEE4NDA2NgorOjEwQzE5MDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDVFRAorOjEwQzFBMDAwNDhCMTAxMDAwMDAwMDA0MDA1QjAwMTAwMzY5MDIyNDE3NgorOjEwQzFCMDAwMTk3QzAwMDBFNzk0MDA0MDExMzAwMTAwMzc5MDAwMDUyMQorOjEwQzFDMDAwNDhCMTAwMDBDOTk0MDA0MDgxMzIwMTAwMDgwMDJEMEFFNgorOjEwQzFEMDAwODRCMDAxMDAwMDAwMDBGMDgyQjAwMTAwMDQwMDI2NDA5RAorOjEwQzFFMDAwODEzMjAwMDAxNDAwMjA0MEUxQjEwMTAwM0Q5MDAzMUVBNworOjEwQzFGMDAwODAzMjAwMDAzRTkwMDA0MTg3QjAwMDAwMjEwMDAwNDBFNgorOjEwQzIwMDAwODc5ODAxMDAyQzk2MDA0MDgxMzIwMTAwMDQwMEEyNUM1NgorOjEwQzIxMDAwMUY3QzAwMDAwMDAwMDA1QzFGOTAwMTAwNDM5MDIyMDk3OQorOjEwQzIyMDAwODAzMDAwMDA4Njk3MDA0MDEzMzAwMTAwNDY5MDIyNDQ4MQorOjEwQzIzMDAwMTk3QzAwMDA4Njk3MDA0RjgxMzAwMTAwMDAwMDAwNDQwNworOjEwQzI0MDAwMTk4MDAxMDBDOThCQTI0QTFGN0MwMDAwRDA4QjAwNDBERQorOjEwQzI1MDAwODFCMjAwMDAwNDAwQTIwNTQ4NkQwMDAwQkEwMDIwNDAzMQorOjEwQzI2MDAwRTVCMTAxMDA0RTkwOUMxNzgwMzIwMDAwMDQwMDIyNEE4NAorOjEwQzI3MDAwMTk3QzAwMDBDQzAwMDA0MDQzOTkwMTAwMzY5ODAwNDAzMgorOjEwQzI4MDAwODEzMjAxMDBENDk3MDA0MDEzMzAwMTAwQzAwMDAwNDAwQgorOjEwQzI5MDAwNDM5OTAxMDBDNDAwMkRGMDgyQjAwMTAwMEI5ODAwRjAxQQorOjEwQzJBMDAwODQzMDAxMDBDOTk0MDA0MDgxMzIwMTAwRDA4QjIyMDkwMgorOjEwQzJCMDAwODAzMDAwMDA4Njk3MDA0MDEzMzAwMTAwRDA4QjAwNDA5MgorOjEwQzJDMDAwODFCMjAwMDAyRTAwMDA0MDQzOTkwMTAwNUE5MDIyNDBBNAorOjEwQzJEMDAwRTc2RDAwMDAzMjAwMDA0MDQzOTkwMTAwNjU5MEEyNDBFNAorOjEwQzJFMDAwRTU2RDAwMDBGMjk1MDA0MDgxMzIwMTAwMjQwMDIwMEIzMgorOjEwQzJGMDAwRTBCMTAxMDAyODAwMjAxM0UwQjEwMTAwMjIwMDIwMDY3NworOjEwQzMwMDAwRTRCMTAxMDAwNDAwMjI0MjE5N0MwMDAwMTQwMDAwNDA0NgorOjEwQzMxMDAwNDM5OTAxMDAwNDAwQTJGMDgwMzIwMDAwMTQwMDIwMEFCQQorOjEwQzMyMDAwRTBCMTAxMDBEMDhCMjIwOTgwMzAwMDAwODY5NzAwNDBFOAorOjEwQzMzMDAwMTMzMDAxMDBEMDhCMDA0MDgxQjIwMDAwRjI5NTAwNDAyNAorOjEwQzM0MDAwODEzMjAxMDA5RDk1MDA0MDgxMzIwMTAwNzM5MDIyNDFBRAorOjEwQzM1MDAwMTk3QzAwMDAwMDAwMDAwQjk5QjAwMTAwMDQwMDFGMTVCQgorOjEwQzM2MDAwOTg1MDAwMDA3MzkwMjAwMTk4NkMwMDAwNzAwMDAwMDM0QQorOjEwQzM3MDAwNDhDOTAxMDAwMDAwMkU0NjFGOTAwMTAwMDAwMDAwNTAzNworOjEwQzM4MDAwRjFCMTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwNDIyMworOjEwQzM5MDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwNzA5MEE4MDA1RQorOjEwQzNBMDAwRTAzMTAwMDAwMDAwMDAwNTQ4QjEwMTAwQUMwMDJGMDBBMgorOjEwQzNCMDAwMTBCMDAxMDAwMDAwMDAwMUUwQzEwMTAwMTQwMDJGMTVDMQorOjEwQzNDMDAwMTBDMDAxMDAwNDAwQTJGMDgwMzIwMDAwMDAwMDAwMEE0QQorOjEwQzNEMDAwODBCMDAxMDAwMDAwNjAwMTgwRDAwMTAwMDAwMDAwNDczMworOjEwQzNFMDAwMTk5MDAxMDBFOThGMjIwOTgwMzIwMDAwODY5NzAwMDkyOAorOjEwQzNGMDAwODAzMDAxMDBFOThGMDA0MDEzQjAwMDAwMDA4MDAwMDM4RQorOjEwQzQwMDAwNDJDOTAxMDAwMDAwMDBGMDgyQjAwMTAwMTMwMDAwNDBBQQorOjEwQzQxMDAwODc5ODAxMDAwMDAwMDA0QzQzQzEwMTAwMkM5NjAwRjBGOQorOjEwQzQyMDAwODQzMDAxMDAwNDAwQTI1QzFGN0MwMDAwQzk4QjAwNUMwQQorOjEwQzQzMDAwMUY5MDAwMDAyQzAwMjA0MEU3QjEwMTAwMkQwMDIwNDA5QgorOjEwQzQ0MDAwRTdCMTAxMDAyRTAwMDA0MDQzOTkwMTAwMDQwMEEyRjM2RgorOjEwQzQ1MDAwODAzMjAwMDAwNDAwMjI0MjE5N0MwMDAwQzk4QjAwNDI5NworOjEwQzQ2MDAwMTk4MDAwMDAxQzk2MDA0MDgxMzIwMTAwNUI5NzAwNDg1MworOjEwQzQ3MDAwOTUzMDAxMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTA0RQorOjEwQzQ4MDAwNjJERDAxMDA4RDkwQTg0MDEzMzAwMDAwMjM4MzAwODhGNgorOjEwQzQ5MDAwMUNCMDAwMDA5MzkwMDAwNTQ4QjEwMDAwOTI5MDAwNDA0RAorOjEwQzRBMDAwMTNCMDAwMDAwMDAwMDAwMDEyQjAwMTAwMDgwMDAwNDBCRQorOjEwQzRCMDAwNDM5OTAxMDAxNDAwMkRGMDgyQjAwMTAwMDQwMDI2NDBEMQorOjEwQzRDMDAwODEzMjAwMDAwNDAwMjJGMDg0MzAwMDAwMTMwMDAwNDA5QworOjEwQzREMDAwODc5ODAxMDAyQzk2MDA0MDgxMzIwMTAwMDQwMEEyNUM4NAorOjEwQzRFMDAwMUY3QzAwMDAwMDAwMDA1QzFGOTAwMTAwQjA5MDAwMDk1QworOjEwQzRGMDAwMDBCMDAwMDAwNDAwQTIwNTQ4NkQwMDAwQzk4Qjg3NDIwRgorOjEwQzUwMDAwMTkxMDAwMDA4QjAwMkY0NzE5ODAwMTAwQzk4QjAwNDBEMworOjEwQzUxMDAwRTc5MTAwMDAwNDAwQTI0MDFGN0MwMDAwMkYwMDAwNDBCMworOjEwQzUyMDAwNDc5OTAxMDBBRTkwMjI0N0U3N0QwMDAwMDQwMDIyNDFCOAorOjEwQzUzMDAwMTk3QzAwMDAxRDk0MDA0MEU3MzEwMTAwQUU5MDIyMDBGQworOjEwQzU0MDAwODAzMjAwMDBBOTkwQTI0MDFGN0MwMDAwQzk5NDAwNDBFNgorOjEwQzU1MDAwODEzMjAxMDBBRTkwMDA0MDgxQjIwMDAwMzAwMDAwNDAwNgorOjEwQzU2MDAwNDM5OTAxMDAzMjAwMkRGMjk0QjAwMTAwQTU5NTAwRjIyQworOjEwQzU3MDAwMDIzMDAxMDBBQzk1MDA0QjAyQjAwMDAwMDAwMDAwMDU0NQorOjEwQzU4MDAwNDhCMTAxMDBBRjkwMDA0MDAxQjAwMDAwMDAwMDAwNDA0MQorOjEwQzU5MDAwMDVCMDAxMDBCNTkwMjIwMDgwMzIwMDAwQjQ5MEEyNDJBNAorOjEwQzVBMDAwMTk3QzAwMDAwNTk2MDA0MDgxMzIwMTAwQjU5MDAwNDBFMgorOjEwQzVCMDAwODFCMjAwMDAzQzk2MDA0MDgxMzIwMTAwNTQ5MTIyNUMxRgorOjEwQzVDMDAwMUY3QzAwMDAwMDAwMDA1QzFGODAwMTAwMDA4MDAwMTA0NAorOjEwQzVEMDAwNDJDOTAxMDBCRDkwMjI0MEUzNkQwMDAwMDAwMDAwNDUwQgorOjEwQzVFMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQkE5MEE4NDA3NgorOjEwQzVGMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwNTQ5MTAwMDVBNAorOjEwQzYwMDAwNDhCMTAwMDBCNDk0MDA0MDgxMzIwMTAwQzQ5MEEyMDhGNworOjEwQzYxMDAwODAzMjAwMDBDNDkwQTIxNjgwMzIwMDAwMEY5NzAwNERCNworOjEwQzYyMDAwODEzMDAxMDAwMDgyMDAwMjA0REMwMTAwRjA4NzAwNDAzQworOjEwQzYzMDAwODFCMjAwMDA3NDAwMDA0MDQzOTkwMTAwMDAwMDAwRjgzRQorOjEwQzY0MDAwODJCMDAxMDAwMDAwMDBGMDg0QjAwMTAwMDAwMDAwNDE1MQorOjEwQzY1MDAwOTZCMDAxMDBENTkwMjI0Mjk2MTQwMDAwMDA4MDAwMTA5MAorOjEwQzY2MDAwNDRDOTAxMDA2NDAwNjg0MDk3OTgwMTAwNjQwMDAwNEJEMQorOjEwQzY3MDAwODBDRTAxMDAwNDAwQTY0MDgxMzIwMDAwMDAwMDAwNDE4RAorOjEwQzY4MDAwRjBCMTAxMDAwMDAwMDA0MkYwQjEwMTAwNzAwMDAwMDVBRgorOjEwQzY5MDAwRTBDOTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwMTA2OAorOjEwQzZBMDAwNjJERDAxMDBEMTkwQTg0MDgxMzIwMDAwMDQwMEEyNUM0QworOjEwQzZCMDAwMUY3QzAwMDAwMDAwMDA1QzFGOTAwMTAwMDAwMDAwNDU4RQorOjEwQzZDMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRDY5MEE4NUM1RAorOjEwQzZEMDAwMUYwMDAwMDAyMzgzMDA4ODFDQjAwMDAwNUUwMTJEMDVCMAorOjEwQzZFMDAwNDhCMTAxMDBEQTkwNjVGMjEyMzAwMDAwMDA5OTNGNDIzMworOjEwQzZGMDAwMTNGMDAxMDBERjkwMjI0N0U3N0QwMDAwMjc4Mzc1ODg1MworOjEwQzcwMDAwMUNCMDAwMDBEOTkwMDA0MDgxQjIwMDAwMDAwMDAwNDczQQorOjEwQzcxMDAwRTc5MTAxMDAwNDAwNzUwOTk2RTQwMTAwMDA4MDAwMTAxMworOjEwQzcyMDAwNDRDOTAxMDAwMDAwMDA0NEYxQjEwMTAwMDAwMDY4QTgwNAorOjEwQzczMDAwOTdDMDAxMDAwMDAwMDAwM0UwQjEwMTAwMDA4MDAwMDM4OQorOjEwQzc0MDAwNDQ5OTAxMDAwMDAwMDA0NDYxQjEwMTAwMDAwMDAwMTBBNAorOjEwQzc1MDAwNjJCMTAxMDBFNzkwQTg0MEUxMzEwMDAwMjM4MzAwODgyNgorOjEwQzc2MDAwMUNCMDAwMDAwMDk5M0Y0MjEzRjAwMTAwRUI5MDY1MDVGQQorOjEwQzc3MDAwNDgzMTAwMDAzRjAwMDBGMzk2ODgwMTAwMDAwMDAwNDBBRgorOjEwQzc4MDAwRTdCMTAxMDAwMDAwNzU0MDgxQjIwMTAwRjM5MDIyNEIzNworOjEwQzc5MDAwODAzMjAwMDAwMDAwMDA1NTYxQjEwMTAwMDAwMDAwNEIzNAorOjEwQzdBMDAwNjJCMTAxMDBGMTkwQTg0MDgxMzIwMDAwMDAwMDAwMDc1MgorOjEwQzdCMDAwMTZCMDAxMDAwMDYyMDAwQjE2REMwMTAwMkYwMDAwNDBFMworOjEwQzdDMDAwNDM5OTAxMDAwNDAwQTI0N0U3N0QwMDAwMUQ5NDAwNDA0QQorOjEwQzdEMDAwODEzMjAxMDAxMDkxMjIwMDgwMzIwMDAwNEU5NjAwNUZFRAorOjEwQzdFMDAwMDExMDAxMDBGNzkwMjI0MDk1NkMwMDAwMDQwMDIyNDFFNgorOjEwQzdGMDAwMTk3QzAwMDAwNDAwMjI0MDFGN0MwMDAwMDA4MDAwMTAxMworOjEwQzgwMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDMyNAorOjEwQzgxMDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMDAwMDAwMTAxMQorOjEwQzgyMDAwNjJCMTAxMDAwMTkxQTgwMEUwMzEwMDAwMjM4MzAwODg3QgorOjEwQzgzMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDQ4MDAwMDNBNgorOjEwQzg0MDAwNDJDOTAxMDAwMDAwMDBGMjAyQjAwMTAwMDQwMDIwMzFFMgorOjEwQzg1MDAwMDM2QzAwMDBBNTk1MDA1Mjk1MzAwMTAwQzk5NDAwNDA3QQorOjEwQzg2MDAwODEzMjAxMDBGNzkwMjI0MTk3NTAwMDAwMEM4MDAwMDNCNAorOjEwQzg3MDAwNDJDOTAxMDAwMDAwMDBGMDAwQjAwMTAwMDAwMDAwNUNBRgorOjEwQzg4MDAwMDE4MDAxMDBBQzk1MDA0QjAyQjAwMDAwRjc5MDAwMDU1QworOjEwQzg5MDAwNDhCMTAwMDA2Njk3MDA0MDAzMzAwMTAwMTc4MDAwMDM5NAorOjEwQzhBMDAwNDRDOTAxMDAwMEYwMDAwQzk2ODgwMTAwMDAwMDYzNENCMAorOjEwQzhCMDAwOTdGMDAxMDAwNDAwMjA0RDk3NkMwMDAwMDQwMDIyNDAxNgorOjEwQzhDMDAwOTc2QzAwMDAxMDgwMDAwMzQ0QzkwMTAwMDAwMDAwQUIxOQorOjEwQzhEMDAwRTFCMTAxMDAwMDk3MDA1RTA1MTAwMTAwMDMwMDAwMDdCMAorOjEwQzhFMDAwMUFGNDAxMDAwNzAwMDAwNzE2ODgwMTAwMDBCNTAwMERDQQorOjEwQzhGMDAwNDZDOTAxMDAxQzkxMzA0MDgxMzIwMDAwMDQwMDIyMEIyNworOjEwQzkwMDAwRTY3RDAwMDAwMDAwMDAwQkU2ODEwMTAwMDBCNzAwMEQ4RAorOjEwQzkxMDAwNDZDOTAxMDAwNDAwMjIwQkU2N0QwMDAwMDAwMDAwMEI2OAorOjEwQzkyMDAwRTY4MTAxMDAxMDAwMTAwRjk0RjQwMTAwOTMwNDAwNUZGMQorOjEwQzkzMDAwOTUwNDAxMDA3Njk1MDA0MDgxMzIwMTAwMkE5MTIyNTAzMQorOjEwQzk0MDAwRkQ3RjAwMDAyNjkxNDY0MDgxMzIwMDAwMjk5MUEyNDBERgorOjEwQzk1MDAwMzE2RjAwMDAwNDAwMUU0MDgxQjIwMDAwMDAwMDFFNDE0MworOjEwQzk2MDAwMzFEMzAxMDAwMDAwMkUwNTQ4QjEwMTAwMDAwMDAwNDA1NQorOjEwQzk3MDAwRTFCMTAxMDAwMDAwMDA0MDBGQjAwMTAwQUI5NDAwNDFBNAorOjEwQzk4MDAwODEzMDAxMDBGMDg3MDA0MDgxQjIwMDAwQjQ5NDAwNDA4MworOjEwQzk5MDAwODEzMjAxMDAzRDkxQTIwODgwMzIwMDAwM0Q5MUEyMTYzMworOjEwQzlBMDAwODAzMjAwMDAwMDgyMDAwMjA0REMwMTAwMDAwMDAwNDUyQgorOjEwQzlCMDAwMDNGMDAxMDAwMDAwMDAwMTAwQzAwMTAwMzU5MTM3NUM2OAorOjEwQzlDMDAwNjEzMTAwMDAwMDAwMDAxQjYyQjEwMTAwM0E5MTI4NDA3MworOjEwQzlEMDAwODEzMjAwMDAwNDAwQTI1Qzc3N0QwMDAwMzY5MTAwNDBBNworOjEwQzlFMDAwODFCMjAwMDAwMDAwMDAwMDYyQjEwMTAwM0E5MUE4NDA0RAorOjEwQzlGMDAwODEzMjAwMDBGMDg3MTc0MDgxQjIwMDAwNzQwMDIyNDBBRAorOjEwQ0EwMDAwRjFCMTAxMDAwMDAwMDA0MEUxQjEwMTAwNUI5NzAwNEE3NAorOjEwQ0ExMDAwOTUzMDAxMDAwNDAwQTI1QzFGN0MwMDAwMUM5NjAwNUNBNQorOjEwQ0EyMDAwMUYxMDAxMDBDNDkwMDA0MDgxQjIwMDAwMDQwMEEyNDAyOQorOjEwQ0EzMDAwMUY3QzAwMDAyRjAwMDA0MDQ3OTkwMTAwNTE5MTIyNDdDMAorOjEwQ0E0MDAwRTc3RDAwMDAwNDAwMjI0MTE5N0MwMDAwMUQ5NDAwNDA5NQorOjEwQ0E1MDAwRTczMTAxMDA1MTkxMjIwMDgwMzIwMDAwNEM5MUEyNDA0OAorOjEwQ0E2MDAwMUY3QzAwMDBDOTk0MDA0MDgxMzIwMTAwNTE5MTAwNDBCOAorOjEwQ0E3MDAwODFCMjAwMDAzMDAwMDA0MDQzOTkwMTAwMzIwMDJERjJFNQorOjEwQ0E4MDAwOTRCMDAxMDBBNTk1MDBGMjAyMzAwMTAwQUM5NTAwNEI3NgorOjEwQ0E5MDAwMDJCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwNUI5NzAwNDhBQgorOjEwQ0FBMDAwOTUzMDAxMDAwNDAwQTI1QzFGN0MwMDAwMUM5NjAwNUMxNQorOjEwQ0FCMDAwMUYxMDAxMDAwNDAwQTIwNTQ4NkQwMDAwNTg5MTg3NDIzNAorOjEwQ0FDMDAwMTkxMDAwMDA4QjAwMkY0NzE5ODAwMTAwMDAwMDAwNDA2MgorOjEwQ0FEMDAwRTc5MTAxMDA4Njk3MDA0MjgxMzAwMTAwQzk4QjAwNDAzOAorOjEwQ0FFMDAwODFCMjAwMDAxQzk2MDA0MDgxMzIwMTAwMDQwMEEyNUM2QgorOjEwQ0FGMDAwMUY3QzAwMDBDOThCMDA1QzFGOTAwMDAwQjAwMDAwNDA0QworOjEwQ0IwMDAwNDM5OTAxMDAwNDAwQTJGMDgwMzIwMDAwQkEwMDIwNDBFNgorOjEwQ0IxMDAwRTVCMTAxMDBENDk3MDA0MDgxMzIwMTAwQzAwMDAwNDAxRgorOjEwQ0IyMDAwNDM5OTAxMDBDNDAwMkRGMDgyQjAwMTAwMEI5ODAwRjA4MQorOjEwQ0IzMDAwODQzMDAxMDBDOTk0MDA0MDgxMzIwMTAwODY5NzAwNDU4RAorOjEwQ0I0MDAwODEzMDAxMDBDOThCMjI0MjE5N0MwMDAwMEY5NzAwM0EwNgorOjEwQ0I1MDAwODEzMDAxMDBDOThCMDA0MDgxQjIwMDAwMDQwMDAwNDAxOAorOjEwQ0I2MDAwODFCMjAwMDBCNDk0MDA0MDgxMzIwMTAwNzA5MUEyMDhBQgorOjEwQ0I3MDAwODAzMjAwMDA3MDkxQTIxNjgwMzIwMDAwMEY5NzAwNDdBQgorOjEwQ0I4MDAwODAzMDAxMDAwMDgyMDAwMjA0REMwMTAwRjA4NzAwNDBEOAorOjEwQ0I5MDAwODFCMjAwMDAxMDgwMDAwMzQ0QzkwMTAwMDBFMTAwQTYzQQorOjEwQ0JBMDAwODRCMDAxMDAwMDAwMDA0MEYxQjEwMTAwMDAwMDAwNDAyRAorOjEwQ0JCMDAwRjFCMTAxMDAwMDAwNjAwNzg0OTQwMTAwMDA5NzAwNUU1RAorOjEwQ0JDMDAwMDUxMDAxMDBDOThCMDA0MDgxQjIwMDAwOEEwMDAwNDBCRQorOjEwQ0JEMDAwNDc5OTAxMDBDOTk0MDA0MUU3NDEwMTAwRDA4QjAwNDAxMgorOjEwQ0JFMDAwODFCMjAwMDAwNDAwQTIwNTQ4NkQwMDAwMDQwMEEyNDFDQgorOjEwQ0JGMDAwMTk3QzAwMDAwNDAwQTI0ODFGN0MwMDAwRjI5NTAwNDA1MAorOjEwQ0MwMDAwODEzMjAxMDAwNDAwQTMwQTBDNkMwMDAwOUQ5NTAwNDBENQorOjEwQ0MxMDAwODEzMjAxMDAwMDAwMDAwMTJDQjAwMTAwMDAwMDAwMTU2RAorOjEwQ0MyMDAwMTBCMDAxMDAwMDAwMDAwMDEwQzAwMTAwMDQwMDFGMEE0NQorOjEwQ0MzMDAwMkM1MDAwMDAxNDAwMDA0MDQzOTkwMTAwMDQwMEEyRjBCMQorOjEwQ0M0MDAwODAzMjAwMDAwMDAwMDAxMDMyQjAwMTAwQTE5NzAwMDYwMQorOjEwQ0M1MDAwMDQzMDAxMDA4RTkxQTI0ODFGN0MwMDAwOEM5MTg0NDgxMgorOjEwQ0M2MDAwMUYxMDAwMDBBQzAwMDA0MDQ3OTkwMTAwOEU5MTAwMEE5RgorOjEwQ0M3MDAwRTBDMTAwMDAwMDAwMDAwQTAyQjAwMTAwOUU5MzAwMDEyNAorOjEwQ0M4MDAwOEMzMDAxMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA0MQorOjEwQ0M5MDAwNjJERDAxMDA4RjkxQTg0MDgxMzIwMDAwMjM4MzAwODg2QgorOjEwQ0NBMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDAwMDAwMDJCNworOjEwQ0NCMDAwMTBDMDAxMDA5QzkxMjIwMjE0NTAwMDAwNzk5NjAwNDU5QQorOjEwQ0NDMDAwMUYwMDAxMDA4NjkxMjI1QzFGN0MwMDAwMDAwMDAwNDdDRAorOjEwQ0NEMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwOTg5MUE4NUM4NAorOjEwQ0NFMDAwMUYwMDAwMDAyMzgzMDA4ODFDQjAwMDAwODY5MTAwMDUwRgorOjEwQ0NGMDAwNDhCMTAwMDAwMDAwMDAwQjFCQjAwMTAwMDgwMDJENDBFRgorOjEwQ0QwMDAwODVCMDAxMDAwMDAwMDBGMDgyQjAwMTAwMDAwMDAwNDA4QQorOjEwQ0QxMDAwMDVCMDAxMDAyQzk2MDA0MTg3MzAwMTAwMDAwMDAwNDU1RAorOjEwQ0QyMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQTI5MUE4NDA0NQorOjEwQ0QzMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDU0MQorOjEwQ0Q0MDAwNDhCMTAxMDBBODkxMjIwOTgwMzAwMDAwODY5NzAwNDA3OAorOjEwQ0Q1MDAwMTMzMDAxMDBBQzkxMjI0NDE5N0MwMDAwODY5NzAwNEZFQgorOjEwQ0Q2MDAwODEzMDAxMDBBQzkxQTI0NzFGN0MwMDAwMDAwMDAwNDQwQworOjEwQ0Q3MDAwMTk4MDAxMDBGRjA3MDAwODAwOEMwMTAwMDQwMDI2NDAxNAorOjEwQ0Q4MDAwODEzMjAwMDBCQjkxMjI0QTFGN0MwMDAwQjM5MUEyMTZBMQorOjEwQ0Q5MDAwMDIzMDAwMDBDOTk0MDA0MDgxMzIwMTAwMkYwMDIwNDA4MQorOjEwQ0RBMDAwRTdCMTAxMDBDOThCMDA0MDgxQjIwMDAwMkQwMDJEMDhDMQorOjEwQ0RCMDAwMkFCMDAxMDBCNzkxMjI0MjE5N0MwMDAwM0M5NjAwNDA0NQorOjEwQ0RDMDAwODEzMjAxMDBCODkxMDA0MDgxQjIwMDAwMDU5NjAwNDAxOAorOjEwQ0REMDAwODEzMjAxMDAzMDAwMkUwMDJBRDAwMTAwMzIwMDJBMTVENQorOjEwQ0RFMDAwRTRCMTAxMDBDOThCMDAxNkU0QjEwMDAwRDE5MTIyMTYxNAorOjEwQ0RGMDAwMDIzMDAwMDAwNDAwQTI0NzFGN0MwMDAwMDAwMDAwMDg3MQorOjEwQ0UwMDAwMkFCMDAxMDAyQjk4MDA0MDk1MzAwMTAwQzE5MUEyNDA0QQorOjEwQ0UxMDAwMTE2QzAwMDBEMjkxMjI0MDJENkMwMDAwMDQwMEEyMDU4QworOjEwQ0UyMDAwNDg2RDAwMDAwNDAwMjI0NDFGN0MwMDAwQUMwMDAwNDA1QworOjEwQ0UzMDAwNDc5OTAxMDBCMDAwMkIwMUUwQzEwMTAwMDAyQjAwQTZDMgorOjEwQ0U0MDAwMTZCMDAxMDAwMDAwMDAwMUUwRDEwMTAwNUU5NzAwMDg2QgorOjEwQ0U1MDAwODAzMDAxMDBDQTkxMDA1RTE3OTAwMDAwN0Y5NzAwNDM2OAorOjEwQ0U2MDAwNjEzMTAxMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA4OQorOjEwQ0U3MDAwNjJERDAxMDBDQjkxQTg0MDgxMzIwMDAwMjM4MzAwODg0RAorOjEwQ0U4MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwNjY5NzAwMDdEMworOjEwQ0U5MDAwMTYxNDAxMDAwMDk3MDA1RTA1MTAwMTAwQzk5NDAwNDBCRgorOjEwQ0VBMDAwODEzMjAxMDAyRjAwMjA0MEU3QjEwMTAwRDA4QjAwNDAwQgorOjEwQ0VCMDAwODFCMjAwMDAwMDAwMDAwQjFCQjAwMTAwMDQwMDFGMTUzMAorOjEwQ0VDMDAwMUE1MDAwMDBFMDkxMjAxNjFBNkMwMDAwMDQwMDIyNDA2NQorOjEwQ0VEMDAwMUY3QzAwMDA3MDAwMDAwMzQ4QzkwMTAwMDAwMDIyNTBDMAorOjEwQ0VFMDAwRjFCMTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDBGQQorOjEwQ0VGMDAwRTBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwQTAwMDAwQTQwNworOjEwQ0YwMDAwNjJERDAxMDBERDkxQTg0NjFGMTAwMDAwMDAwMDAwMDU1MQorOjEwQ0YxMDAwNDhCMTAxMDAwMDAwMDAwMDEwQjAwMTAwMDAwMDAwMTU0MQorOjEwQ0YyMDAwMTBDMDAxMDAwMDAwMDAwQTJBQjAwMTAwMDAwMDAwMEE0MQorOjEwQ0YzMDAwMkNEMDAxMDAwNDAwMUYxNjgwMzIwMDAwMTQwMDAwNDBCNQorOjEwQ0Y0MDAwNDM5OTAxMDAwNDAwQTJGMDgwMzIwMDAwQUMwMDJGNDBBMQorOjEwQ0Y1MDAwMjNCMDAxMDBFQTkxODQ0NTFGMTAwMDAwRUI5MTAwMEEwNAorOjEwQ0Y2MDAwRTBDMTAwMDAwMDAwMDAwQTAyQjAwMTAwQkU5NjAwNDBDRgorOjEwQ0Y3MDAwMzVCMDAwMDAwNDAwQTI1QzFGN0MwMDAwMDA4MDAwMTk5NgorOjEwQ0Y4MDAwNDJDOTAxMDBGNDkxMjI0MEUzNkQwMDAwMDAwMDAwNDMxQgorOjEwQ0Y5MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwRjA5MUE4NDA4NQorOjEwQ0ZBMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDVDRgorOjEwQ0ZCMDAwNDhCMTAxMDAwNTkyQTIwMjFBNTAwMDAwMEE5MjIyNDBENAorOjEwQ0ZDMDAwMkQ2QzAwMDAwNDAwMjI0MDFGN0MwMDAwMDA4MDAwMTAzNworOjEwQ0ZEMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDM0RAorOjEwQ0ZFMDAwRjBCMTAxMDBGRjA3MDAwOEUwOEQwMTAwMDAwMDAwNDJFMQorOjEwQ0ZGMDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwRkM5MUE4NDA4NQorOjEwRDAwMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDU2RQorOjEwRDAxMDAwNDhCMTAxMDAyRjAwMjA0N0U3QjUwMTAwMEM4MDAwMDM1NAorOjEwRDAyMDAwNDJDOTAxMDAxMDAwMDBGMDEwQzgwMTAwRjAwNzAwNDBFNAorOjEwRDAzMDAwMUI5ODAxMDAwQTkyMDA1QzExODAwMDAwMDQwMEEyNUZBRQorOjEwRDA0MDAwMUI3QzAwMDBGRjA3MDAwODk4ODgwMTAwMDAwMDAwMDIxOAorOjEwRDA1MDAwOThDMDAxMDAwNDAwMjAwQjk5NkMwMDAwMDAwMDAwMDI0MQorOjEwRDA2MDAwMTBDMDAxMDAwNDAwMjI0MDIzNkMwMDAwMDQwMEEzNDMxMAorOjEwRDA3MDAwMjM2QzAwMDBFNzk0MDA0MDFGMDAwMTAwMDAwMDAwMDU0MQorOjEwRDA4MDAwNDhCMTAxMDAxMDkyMjMwRDJDNkMwMDAwMDAwMDAwNDBGQworOjEwRDA5MDAwMUY5MDAxMDAxOTkyMjI0NjFGN0MwMDAwMDAwMDAwNDZFQworOjEwRDBBMDAwMUY4MDAxMDA3MDgwMDAwMzQyQzkwMTAwMTk5MjIyNDBENAorOjEwRDBCMDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMTA3QgorOjEwRDBDMDAwNjJERDAxMDAxNTkyQTg0MDgxMzIwMDAwMjM4MzAwODhCMAorOjEwRDBEMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDgwMDJENDAxMAorOjEwRDBFMDAwODVCMDAxMDAwMDAwMDBGMDgyQjAwMTAwMDAwMDAwNDBBNworOjEwRDBGMDAwMDVCMDAxMDAyQzk2MDA0MTg3MzAwMTAwMDAwMDAwNDU3QQorOjEwRDEwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwMUU5MkE4NDBFNAorOjEwRDExMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDU1RAorOjEwRDEyMDAwNDhCMTAxMDAyNDkyMjIwOTgwMzAwMDAwODY5NzAwNDAxNworOjEwRDEzMDAwMTMzMDAxMDAyODkyMjI0NDE5N0MwMDAwODY5NzAwNEY4QQorOjEwRDE0MDAwODEzMDAxMDAyODkyQTI0NzFGN0MwMDAwMDAwMDAwNDRBQgorOjEwRDE1MDAwMTk4MDAxMDBGRjA3MDAwODAwOEMwMTAwMDQwMDI2NDAzMAorOjEwRDE2MDAwODEzMjAwMDAzRTkyMjI0QTFGN0MwMDAwMkY5MkEyMTZCQworOjEwRDE3MDAwMDIzMDAwMDBDOTk0MDA0MDgxMzIwMTAwMkYwMDIwNDA5RAorOjEwRDE4MDAwRTdCMTAxMDBDOThCMDA0MDgxQjIwMDAwMkQwMDJEMDhERAorOjEwRDE5MDAwMkFCMDAxMDAzQTkyMjI0MjE5N0MwMDAwMzM5MkEyRjM5NQorOjEwRDFBMDAwODQzMDAwMDAwMDAwMDBBNTg1QjAwMTAwMDAwMDAwNDFBRgorOjEwRDFCMDAwODVEMDAxMDBENDAwM0U0MTg1RTAwMTAwMzc5MjIyNDAzNQorOjEwRDFDMDAwMUY3QzAwMDAwMDAwMDA1QTExOTAwMTAwMEIwMDAwMDhCNQorOjEwRDFEMDAwRTRGNTAxMDAzQzk2MDA0MDgxMzIwMTAwM0I5MjAwNDBBMgorOjEwRDFFMDAwODFCMjAwMDAwNTk2MDA0MDgxMzIwMTAwMzAwMDJFMDAxRgorOjEwRDFGMDAwMkFEMDAxMDAzMjAwMkExNUU0QjEwMTAwQzk4QjAwMTZDMworOjEwRDIwMDAwRTRCMTAwMDA0MTkyQTIxNjAyMzAwMDAwQzk5NDAwNDAyRgorOjEwRDIxMDAwODEzMjAxMDA5QTkyMDA0MDgxQjIwMDAwMkQwMDJEMDg1OQorOjEwRDIyMDAwMkFCMDAxMDA1NDkyMjI0NzFGN0MwMDAwMDQwMEEwOTEwNAorOjEwRDIzMDAwMDM2QzAwMDA0RTkyMjI0MjE5N0MwMDAwNDc5MkEyRjMzOAorOjEwRDI0MDAwODQzMDAwMDAwMDAwMDBBNTg1QjAwMTAwMDAwMDAwNDEwRQorOjEwRDI1MDAwODVEMDAxMDBENDAwM0U0MTg1RTAwMTAwNEI5MjIyNDA4MAorOjEwRDI2MDAwMUY3QzAwMDAwMDAwMDA1QTExOTAwMTAwMEIwMDAwMDgxNAorOjEwRDI3MDAwRTRGNTAxMDAyMDA0MDA0MDg5OTgwMTAwMDk5OTAwMDhBNAorOjEwRDI4MDAwOEEzMDAxMDA1ODAxMkQwMDJBRDAwMTAwNjAwMTJERjBFNAorOjEwRDI5MDAwMTBCMDAxMDAwMDAwMDBGMDJDQjAwMTAwMDAwMDAwMTZFQQorOjEwRDJBMDAwODBCMjAxMDAwNDAwMjc0MDExNkMwMDAwODc4RjAwNDAwRAorOjEwRDJCMDAwODFCMjAwMDAwNDAwQTM5MTAzNkMwMDAwMkI5ODAwNDE5MAorOjEwRDJDMDAwOTUzMDAxMDA1RDkyQTIwODgwMzIwMDAwNUQ5MkEyMTZBNgorOjEwRDJEMDAwODAzMjAwMDAwMDAwMDA0MTk3QjAwMTAwNUI5MjIzMERGNgorOjEwRDJFMDAwMDI2QzAwMDAwMDAwMDA0MTk3QzAwMTAwQUM5NTAwNEJBQgorOjEwRDJGMDAwMDJCMDAwMDA5QTkyMDAwNTQ4QjEwMDAwMDQwMEEyMDVBNworOjEwRDMwMDAwNDg2RDAwMDAwNDAwMjI0NDFGN0MwMDAwQUMwMDJGMDE4NworOjEwRDMxMDAwMTRCMDAxMDBCMDAwMkIwMUUwQzEwMTAwMDAyQjAwQTZGOQorOjEwRDMyMDAwMTZCMDAxMDAwNDAwMjI0MTE5N0MwMDAwMDAwMDAwMDEzOQorOjEwRDMzMDAwRTBEMTAxMDA3MDkyMjMwRDAyNkMwMDAwMDA4MDAwMTAwQgorOjEwRDM0MDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwMDNEOQorOjEwRDM1MDAwRjBCMTAxMDAwMDAwMDA0MjYxQjEwMTAwMDAwMDAwMTBDNgorOjEwRDM2MDAwNjJCMTAxMDA2OTkyQTgwMEUwMzEwMDAwMjM4MzAwODhDNworOjEwRDM3MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMEM4MDAwMDM1MworOjEwRDM4MDAwNDJDOTAxMDAxMDAwMDBGMDIyQzgwMTAwMDAwMDAwNUM0QQorOjEwRDM5MDAwMjM4MDAxMDAwMDAwMDAwMTg0QjAwMTAwNzM5MjIzMEQ3RQorOjEwRDNBMDAwMDI2QzAwMDAwMDAwMDAwRDAyQjAwMTAwMDAwMDAwMDg0NworOjEwRDNCMDAwODBCMDAxMDA3ODkyMjI0MDFCNkMwMDAwNUU5NzAwMDE1MworOjEwRDNDMDAwODQ1MDAxMDA4MTkyMjI0MDg1NkMwMDAwMDAwMDAwMDEyMQorOjEwRDNEMDAwODBDMDAxMDAxMDgwMDAxMDQ2QzkwMTAwMDAwMDAwNEYwRAorOjEwRDNFMDAwNDM4MTAxMDAwMDAwMDA0MkYwQjEwMTAwMjAwMDAwNDAzNAorOjEwRDNGMDAwRjBDOTAxMDAwMDAwMDAxNkYwQjEwMTAwMDAwMDAwNDM3OAorOjEwRDQwMDAwNjFCMTAxMDBBMDAwMDBBMTYyREQwMTAwN0U5MkE4MTFCRgorOjEwRDQxMDAwRTAzMTAwMDAwNDAwMjI0MDIzNkMwMDAwOTA5MjAwNUU4NgorOjEwRDQyMDAwMTc5MDAwMDA4NDkyMjMwRDAyNkMwMDAwMDAwMDAwMEQ5NAorOjEwRDQzMDAwMDJCMDAxMDAwMDAwMDAwMTg0RDAwMTAwODk5MjIyNDA2NgorOjEwRDQ0MDAwMUI2QzAwMDA3Rjk3MDA0MzYxMzEwMTAwOTA5MjIyNDBFNQorOjEwRDQ1MDAwODU2QzAwMDAwMDAwMDAwMTEyQzAwMTAwMTA4MDAwMTA2NworOjEwRDQ2MDAwNDZDOTAxMDAwMDAwMDA0RjQzODEwMTAwMDAwMDAwNDI1NgorOjEwRDQ3MDAwRjBCMTAxMDAwMDAwMDAwOUYwQjEwMTAwMDAwMDAwMTg0NworOjEwRDQ4MDAwRjBCMTAxMDBBMDAwMDBBMTYyREQwMTAwOEU5MkE4MTFBMAorOjEwRDQ5MDAwRTAzMTAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTBENQorOjEwRDRBMDAwNjJERDAxMDA5MTkyQTgwQTAyMzAwMDAwMjM4MzAwODgwNworOjEwRDRCMDAwMUNCMDAwMDBDOTk0MDAwNTQ4MzEwMTAwOTg5MjIzMEQ2QQorOjEwRDRDMDAwMDI2QzAwMDBGRjA3MDAxMTAwOEMwMTAwQzk5NDAwNDBBRAorOjEwRDREMDAwODEzMjAxMDA2Njk3MDAwNzE2MTQwMTAwMDA5NzAwNUU3NAorOjEwRDRFMDAwMDUxMDAxMDAyRjAwMjA0MEU3QjEwMTAwRDA4QjAwNDA2MworOjEwRDRGMDAwODFCMjAwMDAwMDgwMDAwMzQyQzkwMTAwMDAwMDAwRjg3MgorOjEwRDUwMDAwODJCMDAxMDAwNDAwMjY0MDgxMzIwMDAwMDAwMDAwRjhEMworOjEwRDUxMDAwOENCMDAxMDAwMDAwMDBGMDhFQjAwMTAwRUM5NTAwNDBERQorOjEwRDUyMDAwMTMzMDAxMDAwNDAwMEM0NzgwMzIwMDAwMDAwMDAwNDA2RQorOjEwRDUzMDAwODVCMDAxMDAyQzk2MDA0MTg3MzAwMTAwOUQ5NTAwNDA4OAorOjEwRDU0MDAwODEzMjAxMDAwNDAwMjA5MTAzNkMwMDAwMDA4MDAwMTA3MworOjEwRDU1MDAwNDJDOTAxMDBBRTkyMjI0MEUzNkQwMDAwMDAwMDAwNDU4OAorOjEwRDU2MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwQUE5MkE4NDBGNAorOjEwRDU3MDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDVGOQorOjEwRDU4MDAwNDhCMTAxMDBCMDkyMjIwOTgwMzAwMDAwODY5NzAwNDAyNworOjEwRDU5MDAwMTMzMDAxMDAwMDAwMDAwQjFCQjAwMTAwMDAwMDAwMTU1QgorOjEwRDVBMDAwMUFEMDAxMDBCNzkyQTI0MTE5N0MwMDAwMkI5ODAwNDBDQworOjEwRDVCMDAwOTUzMDAxMDAwMDAwMDAxNjgwQjIwMTAwQzA5MjI3MDhEQgorOjEwRDVDMDAwODAzMjAwMDBDMTkxMDAwMDJBQzAwMDAwMkI5ODAwNDE2OQorOjEwRDVEMDAwOTUzMDAxMDAwMDAwMDAxNjgwQjIwMTAwQkI5MjI3MDhDMAorOjEwRDVFMDAwODAzMjAwMDA1RDkyMDAwMDJBQzAwMDAwMDAwMDAwNDE2RgorOjEwRDVGMDAwOTdCMDAxMDBCRTkyMjMwRDAyNkMwMDAwMDAwMDAwNDFCNAorOjEwRDYwMDAwOTdDMDAxMDBBQzk1MDA0QjAyQjAwMDAwMDAwMDAwMDU3RgorOjEwRDYxMDAwNDhCMTAxMDBDOThCMjI0MjE5N0MwMDAwMEY5NzAwM0FFMworOjEwRDYyMDAwODEzMDAxMDBDOThCMDA0MDgxQjIwMDAwMDQwMEEyNEE5MQorOjEwRDYzMDAwMUY3QzAwMDBDNTkyMDA0QTFGOTAwMDAwMDQwMEEyNDExOAorOjEwRDY0MDAwMTk3QzAwMDAwNDAwQTI0RjJCN0MwMDAwMDQwMEEyNDRCRgorOjEwRDY1MDAwMUY3QzAwMDAwNDAwQTI0NTFGN0MwMDAwRkY5NDAwMDAxNgorOjEwRDY2MDAwMTAzMDAxMDAwMDAwMDAxNTEwQzAwMTAwMDAwMDAwMTA4MworOjEwRDY3MDAwMzJCMDAxMDBBMTk3MDAwNjA0MzAwMTAwRDI5MkEyNDQwQQorOjEwRDY4MDAwMUY3QzAwMDAwMDAwMDAwQjFCQjAwMTAwMDAwMDAwMEExRQorOjEwRDY5MDAwMkNEMDAxMDAwMDAwMDAwQTAyQjAwMTAwOUU5MzAwMDE5RQorOjEwRDZBMDAwOEMzMDAxMDAwMDgwMDAxOTQyQzkwMTAwRDk5MjIyNDA0QgorOjEwRDZCMDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTA3NAorOjEwRDZDMDAwNjJERDAxMDBENTkyQTg0MDgxMzIwMDAwMjM4MzAwODhFQQorOjEwRDZEMDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMDAwMDAwMDI3RAorOjEwRDZFMDAwMTBDMDAxMDBFMjkyMjIwMjE0NTAwMDAwNzk5NjAwNDUxOQorOjEwRDZGMDAwMUYwMDAxMDBDQjkyMjI1QzFGN0MwMDAwMDAwMDAwNDc0RAorOjEwRDcwMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwREU5MkE4NUMwMgorOjEwRDcxMDAwMUYwMDAwMDAyMzgzMDA4ODFDQjAwMDAwQ0I5MjAwMDU4RQorOjEwRDcyMDAwNDhCMTAwMDAwODAwMkQ0MDg1QjAwMTAwMDAwMDAwRjA2NQorOjEwRDczMDAwODJCMDAxMDAwMDAwMDA0MDA1QjAwMTAwMkM5NjAwNDFCRAorOjEwRDc0MDAwODczMDAxMDAwMDAwMDA0NTYxQjEwMTAwNDAwMDAwMTA3OQorOjEwRDc1MDAwNjJERDAxMDBFNzkyQTg0MDgxMzIwMDAwMjM4MzAwODg0NworOjEwRDc2MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwRUQ5MjIyMDk0NAorOjEwRDc3MDAwODAzMDAwMDA4Njk3MDA0MDEzMzAwMTAwRjA5MjIyNDQ3MAorOjEwRDc4MDAwMTk3QzAwMDA4Njk3MDA0RjgxMzAwMTAwMDAwMDAwNDRBMgorOjEwRDc5MDAwMTk4MDAxMDBGRjA3MDAwODAwOEMwMTAwMDQwMDI2NDBFQQorOjEwRDdBMDAwODEzMjAwMDBGRjkyMjI0QTFGN0MwMDAwRjc5MkEyMTZFRAorOjEwRDdCMDAwMDIzMDAwMDBDOTk0MDA0MDgxMzIwMTAwMkYwMDIwNDA1NworOjEwRDdDMDAwRTdCMTAxMDBDOThCMDA0MDgxQjIwMDAwMkQwMDJEMDg5NworOjEwRDdEMDAwMkFCMDAxMDBGQjkyMjI0MjE5N0MwMDAwM0M5NjAwNDBENgorOjEwRDdFMDAwODEzMjAxMDBGQzkyMDA0MDgxQjIwMDAwMDU5NjAwNDBBOQorOjEwRDdGMDAwODEzMjAxMDAzMDAwMkUwMDJBRDAwMTAwMzIwMDJBMTVBQgorOjEwRDgwMDAwRTRCMTAxMDBDOThCMDAxNkU0QjEwMDAwQkM5MUEyMTY3RQorOjEwRDgxMDAwMDIzMDAwMDBDOTk0MDA0MDgxMzIwMTAwMkYwMDIwNDBGNgorOjEwRDgyMDAwRTdCMTAxMDBEMDhCMDA0MDgxQjIwMDAwMDQwMDIyNDEyQQorOjEwRDgzMDAwMTk3QzAwMDAwNDAwQTI0RjJCN0MwMDAwMDQwMEEyNDRDRAorOjEwRDg0MDAwMUY3QzAwMDAwNDAwQTI0NTFGN0MwMDAwMDQwMEEyNEFDNworOjEwRDg1MDAwMUY3QzAwMDBGRjk0MDA0QTFGMTAwMTAwRDQ5MTAwMTBBQgorOjEwRDg2MDAwMzJCMDAwMDA4QTAwMjA0MEU3QjEwMTAwMEU5M0EyNDFDRgorOjEwRDg3MDAwMTk3QzAwMDBDOTk0MDA0MDgxMzIwMTAwMTE5MzAwNDBERQorOjEwRDg4MDAwODFCMjAwMDBBNTk1MDAxNTk0MzAwMTAwQUM5NTAwNEJDNQorOjEwRDg5MDAwMDJCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMTM5MzIyNDJDRAorOjEwRDhBMDAwMTk3QzAwMDAwRjk3MDAzQTgxMzAwMTAwODY5NzAwNDVFRgorOjEwRDhCMDAwODEzMDAxMDBDOThCMDA0MDgxQjIwMDAwNjU5MDAwNDVCNQorOjEwRDhDMDAwMUY5MDAwMDAwNDAwMjI0MTE5N0MwMDAwMDQwMEEyNDdDMAorOjEwRDhEMDAwMUY3QzAwMDBGMjk1MDA0MDgxMzIwMTAwMDQwMEEzMEE4MQorOjEwRDhFMDAwMEM2QzAwMDA5RDk1MDA0MDgxMzIwMTAwRDQ5MTAwMDEzNAorOjEwRDhGMDAwMkNCMDAwMDAwNDAwMjI0MTE5N0MwMDAwMDQwMEEyNDg2MgorOjEwRDkwMDAwMUY3QzAwMDBCNDk0MDA0MDgxMzIwMTAwMkM5M0EyMDhENworOjEwRDkxMDAwODAzMjAwMDAyQzkzQTIxNjgwMzIwMDAwMDA4MjAwMDJBOAorOjEwRDkyMDAwMDREQzAxMDAwMDAwMDA0NTAzRjAwMTAwMDAwMDAwMDFEQworOjEwRDkzMDAwMDBDMDAxMDAyNDkzMzc1QzYxMzEwMDAwMDAwMDAwMUIyRgorOjEwRDk0MDAwNjJCMTAxMDAyOTkzMjg0MDgxMzIwMDAwMDQwMEEyNUNFQQorOjEwRDk1MDAwNzc3RDAwMDAyNTkzMDA0MDgxQjIwMDAwMDAwMDAwMDBBOAorOjEwRDk2MDAwNjJCMTAxMDAyOTkzQTg0MDgxMzIwMDAwRjA4NzE3NDA3RQorOjEwRDk3MDAwODFCMjAwMDA1ODAxMjAwOEUwQjEwMTAwNjAwMTIwMTZDQQorOjEwRDk4MDAwRTBCMTAxMDBGMjk1MDA0NzFGMTAwMTAwMDQwMEEzMEE1NgorOjEwRDk5MDAwMEM2QzAwMDA5RDk1MDA0MDgxMzIwMTAwRDQ5MTAwMDE4MworOjEwRDlBMDAwMkNCMDAwMDAwNDAwMjI0MTE5N0MwMDAwMDQwMEEyNDdCMgorOjEwRDlCMDAwMUY3QzAwMDBCNDk0MDA0NzFGMTAwMTAwNDM5M0EyMDg4RAorOjEwRDlDMDAwODAzMjAwMDA0MzkzQTIxNjgwMzIwMDAwM0Y5M0EyNDJBRgorOjEwRDlEMDAwMTk3QzAwMDAwMDgyMDAwMjA0REMwMTAwQTA5ODAwNDBENQorOjEwRDlFMDAwNDc5OTAxMDAzMDA1MDA0MTg5MzAwMTAwMDQwMDIyNDFCRgorOjEwRDlGMDAwMTk3QzAwMDBBNTk1MDAxNTk0MzAwMTAwQUM5NTAwNEJGMgorOjEwREEwMDAwMDJCMDAwMDBGMDg3MDA0MDgxQjIwMDAwM0M5NjAwNDA2OAorOjEwREExMDAwODEzMjAxMDAwMDAwMDA0QjE5OTAwMTAwMEY5NzAwM0E3RAorOjEwREEyMDAwODEzMDAxMDBGMDg3MDA0MDgxQjIwMDAwNTgwMTIwMDhEOQorOjEwREEzMDAwRTBCMTAxMDA2MDAxMjAxNkUwQjEwMTAwMDQwMEEyNEYzNgorOjEwREE0MDAwMkI3QzAwMDAwNDAwQTI0NDFGN0MwMDAwMDQwMEEyNDVCRgorOjEwREE1MDAwMUY3QzAwMDBGRjk0MDAxMDMyMzAwMTAwRDQ5MTAwNDA4MAorOjEwREE2MDAwMTNCMDAwMDBCNDk0MDA0MDgxMzIwMTAwNTg5M0EyMDgyMgorOjEwREE3MDAwODAzMjAwMDA1ODkzQTIxNjgwMzIwMDAwMDA4MjAwMDIxQgorOjEwREE4MDAwMDREQzAxMDAwMDAwMDA0NTAzRjAwMTAwMDAwMDAwMDE3QgorOjEwREE5MDAwMDBDMDAxMDA1MDkzMzc1QzYxMzEwMDAwMDAwMDAwMUJBMgorOjEwREFBMDAwNjJCMTAxMDA1NTkzMjg0MDgxMzIwMDAwMDQwMEEyNUM1RAorOjEwREFCMDAwNzc3RDAwMDA1MTkzMDA0MDgxQjIwMDAwMDAwMDAwMDAxQgorOjEwREFDMDAwNjJCMTAxMDA1NTkzQTg0MDgxMzIwMDAwRjA4NzE3NDBGMQorOjEwREFEMDAwODFCMjAwMDAwMDgwMDAwMzQyQzkwMTAwMDAwMDAwRjg4QworOjEwREFFMDAwODJCMDAxMDAwNDAwMjY0MDgxMzIwMDAwMDAwMDAwRjhFRQorOjEwREFGMDAwOENCMDAxMDAwMDAwMDBGMDhFQjAwMTAwRUM5NTAwNDBGOQorOjEwREIwMDAwMTMzMDAxMDAwNDAwMEM0NzgwMzIwMDAwMDAwMDAwNDA4OAorOjEwREIxMDAwODVCMDAxMDAyQzk2MDA0MTg3MzAwMTAwOUQ5NTAwNDBBMgorOjEwREIyMDAwODEzMjAxMDAwNDAwQTA5MTAzNkMwMDAwMDA4MDAwMTAwRAorOjEwREIzMDAwNDJDOTAxMDA2QTkzMjI0MEUzNkQwMDAwMDAwMDAwNDVFNQorOjEwREI0MDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwNjY5M0E4NDA1MQorOjEwREI1MDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDUxMworOjEwREI2MDAwNDhCMTAxMDA4NzhGMjIwOTgwMzAwMDAwODY5NzAwNDA2RAorOjEwREI3MDAwMTMzMDAxMDA4NzhGMDA0MDgxQjIwMDAwMDQwMDgzMUUzMworOjEwREI4MDAwODAzMjAwMDAwNDAwQTI0RjJCN0MwMDAwMDQwMEEyNDU1QworOjEwREI5MDAwMUY3QzAwMDAxNDAwMkQ0NTFGOTAwMTAwMDQwMEEyRjAxRQorOjEwREJBMDAwMTQ2QzAwMDAwNDAwQTAwMTE0NkMwMDAwREY4RjAwNDQxRQorOjEwREJCMDAwMTk5MDAwMDAwNDAwQTI0QTFGN0MwMDAwNzg5M0EyNDE0MworOjEwREJDMDAwMTk3QzAwMDAwMDAwMDA0QTFGOTAwMTAwN0E5MTAwNDA3QgorOjEwREJEMDAwODFCMjAwMDAwNDAwQTI0ODFGN0MwMDAwRjI5NTAwNEFCOAorOjEwREJFMDAwMUYxMDAxMDAwNDAwQTMwQTBDNkMwMDAwOUQ5NTAwNDA2QQorOjEwREJGMDAwODEzMjAxMDBENDkxMDAwMTJDQjAwMDAwMDQwMDIyNDFDOAorOjEwREMwMDAwMTk3QzAwMDAwNDAwQTI0RjJCN0MwMDAwMDQwMEEyNDRGOQorOjEwREMxMDAwMUY3QzAwMDAwNDAwQTI0NTFGN0MwMDAwRkY5NDAwNDAxMAorOjEwREMyMDAwODEzMjAxMDBENDkxMDAxMDMyQjAwMDAwOEIwMDAwNDAxRQorOjEwREMzMDAwNDM5OTAxMDAwNDAwQTI0NkU3N0QwMDAwNjU5MDAwNDU3RAorOjEwREM0MDAwMUY5MDAwMDAwMDAwMDA0MTM3QzMwMTAwMDAwMDAwNDFBOAorOjEwREM1MDAwMzNDMzAxMDAzNjAwMDAwMTAyQ0MwMTAwMDAwMEQyNDBCNQorOjEwREM2MDAwODFCMjAwMDA4QzkzODUxNzgwMzIwMDAwMDAwMDlGNDgyRAorOjEwREM3MDAwMDNEMDAwMDA4RTkzOUMxNzgwMzIwMDAwMDAwMDlGNEM2MAorOjEwREM4MDAwMDNEMDAwMDAwMDAwODAwMTM0QzMwMTAwNDA4MDAwMDM4NQorOjEwREM5MDAwNDRDOTAxMDAwMDAwMDA0QUYwQjEwMTAwMDQwMDI2NDAyMAorOjEwRENBMDAwODEzMjAwMDAwMDAwMDA0MEYxQjEwMTAwMDAwMDAwMTJDQworOjEwRENCMDAwRjBCMTAxMDBEMTk0MDA0MUUxMzEwMTAwMDA4MDAwNDM0NgorOjEwRENDMDAwNDRDOTAxMDAxMDAwMDA0MEYxOTkwMTAwMDAwMDAwNDgyMworOjEwRENEMDAwRjBCMTAxMDAwMDAwMDA0OUYwQjEwMTAwNDAwMDAwMDM3NAorOjEwRENFMDAwRTBDOTAxMDAwMDAwMDA0NTYxQjEwMTAwMDAwMDAwNDNFRgorOjEwRENGMDAwNjJCMTAxMDAwMDAwQTg0MDgxQjIwMDAwOUI5MzAwNDA4NworOjEwREQwMDAwODFCMjAwMDAyRDA0MDA0MDg5OTgwMTAwMDk5OTAwQTUwNgorOjEwREQxMDAwOEEzMDAxMDBCQTAwMjA0MEU1QjEwMTAwQjAwMDJGMDFCNworOjEwREQyMDAwOENEMDAxMDAwNDAwMUZGMDgwMzIwMDAwMDAwMDAwNDY4QgorOjEwREQzMDAwRTBDMTAxMDBBQzAwMkY0MDEzQjAwMTAwQ0MwMDJEMDE2OAorOjEwREQ0MDAwRTBDMTAxMDBBOTkzOUMxNzgwMzIwMDAwMDQwMDIyNEEyMAorOjEwREQ1MDAwMTk3QzAwMDAzNjk4MDA0MDgxMzIwMTAwQUI5MzIyNDdDNQorOjEwREQ2MDAwMTk3QzAwMDAwMDAwMDA1RjEzOTAwMTAwRDQ5NzAwNDc2OQorOjEwREQ3MDAwMTkxMDAxMDBDMDAwMkQ0NDFGOTAwMTAwQzQwMDJERjBCNworOjEwREQ4MDAwODJCMDAxMDAwQjk4MDBGMDg0QjAwMDAwOTAwMDJEMDVENworOjEwREQ5MDAwNDhCMTAxMDBDMDkzQTI0QjFGN0MwMDAwMTU5NEEyNEMxNworOjEwRERBMDAwMUY3QzAwMDBDMDkzMUYxQ0UwNkQwMDAwQzM5M0EyMDEwNAorOjEwRERCMDAwODAzMjAwMDBBODAwMkQ0NjhGQjAwMTAwQjk5MzFGMUNDRgorOjEwRERDMDAwRTA2RDAwMDBCNDAwMDA0MDQzOTkwMTAwQkI5MzIyRjBENQorOjEwREREMDAwM0E2QzAwMDAxMjk0MUZGMDNBNkMwMDAwMDAwMEEyNDA2MAorOjEwRERFMDAwODBCMjAwMDAwMDAwODA0RjhGQjAwMTAwOEEwMDAwNDAyOAorOjEwRERGMDAwNDM5OTAxMDAxMzk0MjA0MkU3NkQwMDAwQkY5MzIyNDAzNQorOjEwREUwMDAwODAzMjAwMDAwMDAwODA1OThGQjAwMTAwMDAwMDgwNTg2RgorOjEwREUxMDAwOEZCMDAxMDBDMjkzMjI0MDgwMzIwMDAwMDAwMDgwNUM3RAorOjEwREUyMDAwOEZCMDAxMDAwMDAwODA1QjhGQjAwMTAwQUMwMDAwNDBBQgorOjEwREUzMDAwNDM5OTAxMDBCMDAwMkRGMDg0QjAwMTAwQzc5M0EyNDJDNQorOjEwREU0MDAwMjQ2QzAwMDBEMjkzMjNGMDAyNkMwMDAwQjAwMDAwQTEwQgorOjEwREU1MDAwODBDRTAxMDAwNDAwQTY0MDgxMzIwMDAwQ0Y5M0EyRjBFMgorOjEwREU2MDAwODAzMjAwMDAxNDk0QTI0MjI0NkMwMDAwMTQ5NEEyNDE1OQorOjEwREU3MDAwMDM2QzAwMDBDRTkzQTI0MDgwMzIwMDAwMDAwMDgwNTE2RAorOjEwREU4MDAwOEZCMDAxMDAwMDAwODA1MjhGQjAwMTAwMTQ5NDFGMTI2NworOjEwREU5MDAwODQ1MDAwMDAxNDk0QTAwMTg0NkMwMDAwQzA5MzAwNDBFMgorOjEwREVBMDAwODFCMjAwMDA4QjAwMDA0MDQzOTkwMTAwRkQ5M0EyNDYxRgorOjEwREVCMDAwRTc3RDAwMDAxNDAwMDA0MDQzOTkwMTAwRUY5MzIyRjAzOQorOjEwREVDMDAwMTQzMDAwMDBEQjkzMjAwQTAyNkMwMDAwRUM5MzAzMUU2OAorOjEwREVEMDAwODAzMjAwMDBEQTkzQTI0MDgwMzIwMDAwMDAwMDgwNDRDQgorOjEwREVFMDAwOEZCMDAxMDAwMDAwODA0OThGQjAwMTAwRTA5MzIyMEE0QQorOjEwREVGMDAwMDI2QzAwMDBFMzkzQTI0MTE5N0MwMDAwREY5M0EyNDA3MgorOjEwREYwMDAwODAzMjAwMDAwMDAwODA1NThGQjAwMTAwMDAwMDgwNTY3NAorOjEwREYxMDAwOEZCMDAxMDBFMjkzQTI0MDgwMzIwMDAwMDAwMDgwNDNGNQorOjEwREYyMDAwOEZCMDAxMDAwMDAwODA0ODhGQjAwMTAwMDAwMDAwMDFBOAorOjEwREYzMDAwODJCMDAxMDAwMDAwMDAwQTgyRDAwMTAwRTk5MzIwOTEyNAorOjEwREY0MDAwODM2QzAwMDBFODkzQTI0MDgwMzIwMDAwMjYwMDgwNDBFRAorOjEwREY1MDAwOEY5ODAxMDAyNzAwODA0MDhGOTgwMTAwRUI5M0EyNDAyQQorOjEwREY2MDAwODAzMjAwMDAxRjAwODA0MDhGOTgwMTAwMjAwMDgwNDAxOAorOjEwREY3MDAwOEY5ODAxMDBFRTkzQTI0MDgwMzIwMDAwMjIwMDgwNDA4MgorOjEwREY4MDAwOEY5ODAxMDAyMzAwODA0MDhGOTgwMTAwODgwMDJENDQ2NQorOjEwREY5MDAwOEZCMDAxMDBGODkzQTI0MTE5N0MwMDAwRjU5M0EyNDNEMQorOjEwREZBMDAwM0Q3QzAwMDBGNTkzQTJGMjAyNkMwMDAwMDAwMEEyNDA0QworOjEwREZCMDAwODBCMjAwMDAwMDAwODA0OThGQjAwMTAwRjc5M0EyNDBCQQorOjEwREZDMDAwODAzMjAwMDAwMDAwODA0MzhGQjAwMTAwMDAwMDgwNDhENAorOjEwREZEMDAwOEZCMDAxMDBGNTkzQTA5MTAzNkMwMDAwRjM5MzIyNDNFRQorOjEwREZFMDAwM0Q3QzAwMDBGQzkzQTI0MDgwMzIwMDAwMjgwMDgwNDA2RAorOjEwREZGMDAwOEY5ODAxMDAyOTAwODA0MDhGOTgwMTAwMTQwMDAwNDA5NAorOjEwRTAwMDAwNDM5OTAxMDAwNjk0QTJGMDE0MzAwMDAwODgwMDJENDRDQQorOjEwRTAxMDAwOEZCMDAxMDAwMzk0QTJGMjAyNkMwMDAwMDAwMEEyNDA0NQorOjEwRTAyMDAwODBCMjAwMDAwMDAwODA0OThGQjAwMTAwRjU5MzIyNDFDQQorOjEwRTAzMDAwMTk3QzAwMDBGMzkzMjA5MTAzNkMwMDAwRjU5MzAwNDBERAorOjEwRTA0MDAwODFCMjAwMDAwQTk0MjAwQTAyNkMwMDAwMDk5NEEyNDBFOAorOjEwRTA1MDAwODAzMjAwMDAwMDAwODA0NDhGQjAwMTAwMDAwMDgwNDk0MQorOjEwRTA2MDAwOEZCMDAxMDAwRjk0MjIwQTAyNkMwMDAwRTM5M0EyNDFEQQorOjEwRTA3MDAwMTk3QzAwMDAwRTk0QTI0MDgwMzIwMDAwMDAwMDgwNTUwMAorOjEwRTA4MDAwOEZCMDAxMDAwMDAwODA1NjhGQjAwMTAwMTE5NEEyNDBCMworOjEwRTA5MDAwODAzMjAwMDAwMDAwODA0MzhGQjAwMTAwMDAwMDgwNDgwMworOjEwRTBBMDAwOEZCMDAxMDAxNzk0MDA0Mzk1QjAwMDAwMTc5NDAwNDExMQorOjEwRTBCMDAwOTVCMDAwMDAxNzk0MDA0Mjk1QjAwMDAwMTc5NDAwNDRGQQorOjEwRTBDMDAwOTVCMDAwMDAxNzk0MDA0Qzk1QjAwMDAwMzAwNDAwNDA1QgorOjEwRTBEMDAwODk5ODAxMDAwOTk5MDA0QThBMzAwMTAwNUI5NzAwNDA0NQorOjEwRTBFMDAwODEzMjAxMDAxQzk0QTI0MDgwMzIwMDAwMDAwMDgwNEI2RAorOjEwRTBGMDAwOEZCMDAxMDAwMDAwODA0QzhGQjAwMTAwMDQwMEEyMDUyOQorOjEwRTEwMDAwNDg2RDAwMDAyRDAwMDA0MDQzOTkwMTAwMkUwMDJGRjNDMAorOjEwRTExMDAwODRCMDAxMDAyMjk0QTJGMzk2MzAwMDAwMDAwMDgwNDBGOQorOjEwRTEyMDAwMDFCMDAxMDAyRDAwMkE0MUU3RDEwMTAwRDQwMDNENDE5QQorOjEwRTEzMDAwODVFMDAxMDAwQjAwMDBGMjAwRTQwMTAwMjg5NDIyNUE1RgorOjEwRTE0MDAwMDE3QzAwMDAwMDAwMDA0MDFGOTAwMTAwMjk5NDAwNUE0QgorOjEwRTE1MDAwMDE4MDAwMDAwMDAwMDA0MDFGODAwMTAwMDAwMDYzNDFCQQorOjEwRTE2MDAwODVDMDAxMDAyQzk0QTBBNTg1NkMwMDAwMDAwMDYzNDBEMAorOjEwRTE3MDAwODVCMDAxMDAxMjA0MDA0MDg5OTgwMTAwMDk5OTAwMDA0RgorOjEwRTE4MDAwOEEzMDAxMDAwMDAwODA0MDgxQjIwMTAwMDAwMEEwQTU5QgorOjEwRTE5MDAwODU2QzAxMDAwMDAwRTM0MDg1QjAwMTAwMEM4MDAwMDNBNQorOjEwRTFBMDAwNDJDOTAxMDAxMjAwMDA0MDg3OTgwMTAwN0Y5ODAwRjBFQQorOjEwRTFCMDAwOENCMDAwMDAwNDAwMjI1RjFGN0MwMDAwNDE5NDIyNDBDQworOjEwRTFDMDAwMEY2QzAwMDAwMDAwMkYwNTQ4QjEwMTAwMDQwMDIyNUEyNgorOjEwRTFEMDAwMUY3QzAwMDAxMDAwMDBGMDk4RjQwMTAwMDQwMEEyMDc2QQorOjEwRTFFMDAwOTg2QzAwMDAxMDAwMDAwQzk4RjQwMTAwMDQwMEEyMDdENQorOjEwRTFGMDAwOTg2QzAwMDAzRTk0QTI0QjE5N0MwMDAwM0Y5NDIyRjBFMgorOjEwRTIwMDAwMTg2QzAwMDAwMDAwNjA0QjE5OTAwMTAwNDM5NTAwMDc1NgorOjEwRTIxMDAwMTAzMDAxMDAyRjgzMDA0MDA1QjAwMDAwNDM5NDIyNUFDMworOjEwRTIyMDAwMUY3QzAwMDBBQjk0MDA0MDgxMzAwMTAwMkY4MzAwNDAzMAorOjEwRTIzMDAwMDVCMDAwMDAwNDAwMjI1RjFGN0MwMDAwMDAwMDJGMDVENQorOjEwRTI0MDAwNDhCMTAxMDAwMDAwNjA0QjE5OTAwMTAwMDQwMDIyNUFGRgorOjEwRTI1MDAwMUY3QzAwMDAwNDAwMjI0MDBGNkMwMDAwMTAwMDAwRjA0MgorOjEwRTI2MDAwOTZGNDAxMDAwNDAwQTIwNzk2NkMwMDAwMTAwMDAwMEM1OAorOjEwRTI3MDAwOTZGNDAxMDAwNDAwQTIwNzk2NkMwMDAwNDM5NTAwMDc4NQorOjEwRTI4MDAwMTAzMDAxMDAyRjgzMDA0MDA1QjAwMDAwMDQwMDIyNUYyMQorOjEwRTI5MDAwMUY3QzAwMDAwMDAwMkYwNTQ4QjEwMTAwMDAwMDYwNEIwQQorOjEwRTJBMDAwMTk5MDAxMDAwNDAwMjI1QTFGN0MwMDAwMDQwMDIyNDA0MworOjEwRTJCMDAwMEY2QzAwMDAxMDAwMDBGMDk2RjQwMTAwMDQwMEEyMDdBQgorOjEwRTJDMDAwOTY2QzAwMDAxMDAwMDAwQzk2RjQwMTAwMDQwMEEyMDdGOAorOjEwRTJEMDAwOTY2QzAwMDA0Mzk1MDAwNzEwMzAwMTAwMDAwMDgwNDA1QworOjEwRTJFMDAwMDVCMDAxMDA1QTk0MzM0MDgxMzIwMDAwNUQ5NEExQUQyNQorOjEwRTJGMDAwOTUyMDAwMDA2Rjk0MTM0MDgxQjIwMDAwMDAwMDEzNEE4MworOjEwRTMwMDAwNUE4MzAxMDAzMDAwMzk0NTk1RTAwMTAwMDQwMEEyNUYwNgorOjEwRTMxMDAwNUY3QzAwMDAwNDAwQTI1RTVGN0MwMDAwMUYwMDAwMEYxNQorOjEwRTMyMDAwNUVEODAxMDAwMDAwMDA1QTVGOTAwMTAwMDAwMDAwNUUwRQorOjEwRTMzMDAwNUY5MDAxMDAwMDAwMDA0MDQ1QjAwMTAwMDAwMDAwMDRCMworOjEwRTM0MDAwNDhCMDAxMDAwMDAwMDAwNTRBQjAwMTAwMDAwMDAwMENDOAorOjEwRTM1MDAwNThCMDAxMDAwMDAwMDAwNzRFQjAwMTAwMUM4NTAwNDBDRAorOjEwRTM2MDAwNUQ5ODAxMDAwNDAwQTI0NDVGN0MwMDAwMDAwMDAwNTg5QQorOjEwRTM3MDAwNjFCMTAxMDAwMDAwMDA0QTYyQjEwMTAwMDAwMEE4NDE0MworOjEwRTM4MDAwOTdCMDAwMDA2Qzk0MDA0MDgxQjIwMDAwMDAwMDgwNDAxMworOjEwRTM5MDAwOTdCMDAxMDAwNDAwQTI0MDA1NkMwMDAwMUM5OTAwNDBFOQorOjEwRTNBMDAwODEzMjAxMDA3Mjk0NjAwNzk2MzAwMDAwRkZGRjAwNEIzRAorOjEwRTNCMDAwODQ4OTAxMDAwMDAwNzBDMjI0QjAwMTAwN0Y5NEEyNDU0RQorOjEwRTNDMDAwMjU3QzAwMDA3Njk0MzEyMDg1MzAwMDAwODA5NDIyMTI1NAorOjEwRTNEMDAwNDg3RjAwMDA1ODA0MTExMjQ4MDMwMTAwMTAwMDAwMTI4OQorOjEwRTNFMDAwOTZFNDAxMDAwMDAwMDA0QjFFOTQwMTAwMTcwNDAwNDA1OQorOjEwRTNGMDAwODk5ODAxMDAwMDAwMDAxMjhBQjAwMTAwMDk5OTAwNUZBRAorOjEwRTQwMDAwOEIxMDAxMDAwMDAwODA1QTFGOTAwMTAwN0Y5NDMxNDA2MgorOjEwRTQxMDAwODEzMjAwMDAwMDAwMDBCNDI0QjAwMTAwODA5NDIyMTI3OAorOjEwRTQyMDAwNDg3RjAwMDA1ODA0MDA0MDgxMzIwMTAwMTcwNDAwNDA3QQorOjEwRTQzMDAwODk5ODAxMDAwOTk5MDAxMjhBMzAwMTAwMDAwMDJGMDUxNworOjEwRTQ0MDAwNDhCMTAxMDA4Rjk0MEJGMDg0MzAwMDAwMDAwMDExMTJERAorOjEwRTQ1MDAwNDg4MzAxMDA4Qzk0MjI1MDg1NzAwMDAwNUUwMTAwNDBDQQorOjEwRTQ2MDAwNDM5OTAxMDBCNDk2MDBGMjk2MzAwMTAwOTMwNDAwMTIyMworOjEwRTQ3MDAwOTQzMDAxMDAwMDAwMDA1QTFGOTAwMTAwMTAwMDAwMTJBQgorOjEwRTQ4MDAwOTZFNDAxMDAwMDAwODA0QjFFOTQwMTAwMTAwMDAwNDI0MQorOjEwRTQ5MDAwMTBGNDAxMDAwNDAwMjIwODgwMzIwMDAwMDBCNzNGNDM1RQorOjEwRTRBMDAwMTFGMDAxMDAwNzAwMDAwODhBODgwMTAwOTM5NDMwQTE1MAorOjEwRTRCMDAwMEMzMDAwMDA5Njk0MjI0NUU2N0QwMDAwODA5NDEwNDBDOAorOjEwRTRDMDAwODFCMjAwMDAwMDAwMkE0NUU2OTEwMTAwMDAwMDEwMTIxMAorOjEwRTREMDAwNDg4MzAxMDAwNDAwQTIwNTQ4NkQwMDAwMDAwMDExNDBCRgorOjEwRTRFMDAwODFCMjAxMDAwMDAwNjA0Qjg1ODAwMTAwNUUwMTAwNDBBOAorOjEwRTRGMDAwNDM5OTAxMDBCNDk2MDBGMjk2MzAwMTAwMDA4MDAwMTBBQworOjEwRTUwMDAwNDRDOTAxMDBEODAwMDA0MDgxOTgwMTAwMkUwMDJEMDU2QgorOjEwRTUxMDAwNDhCMTAxMDBBMjk0MjI0MEU3NkQwMDAwODAwMDAwNDA1NQorOjEwRTUyMDAwODBDODAxMDAwMDAwMDA0MEYwQjEwMTAwMDkwMDAwMDhBRgorOjEwRTUzMDAwODZFNDAxMDAwMDAwNjhBNzg3QzAwMTAwMDAwMDAwNDRENQorOjEwRTU0MDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwQTY5NEE4MDVBRAorOjEwRTU1MDAwRTAzMTAwMDAxMDAwMDAxMjk2RTQwMTAwMDAxNDAwNEJBRQorOjEwRTU2MDAwOTZEQzAxMDAwMDAwODA0QjFFOTQwMTAwMDQwMDIyNUEzQQorOjEwRTU3MDAwMUY3QzAwMDAxMDAwMDAwRjg0RjQwMTAwMUYwMDAwNDIwNworOjEwRTU4MDAwODQ4ODAxMDBCMDk0MjI0MDgwMzIwMDAwQjE5NDAwNDI5RgorOjEwRTU5MDAwNjhCMTAwMDAwMDAwMDA0MjZBQjEwMTAwQjE5NDMxNUEzNAorOjEwRTVBMDAwMUYwMDAwMDAwNDAwQTI0MjQ4N0YwMDAwMDAwMDkxNDJDQQorOjEwRTVCMDAwNDg5MzAxMDBCNDk0MzU0MDgxMzIwMDAwNkQwMDAwNDA2MgorOjEwRTVDMDAwNjE5OTAxMDBCQTk0MjhCMTJDMzAwMDAwQjU5NDIyNEQxNQorOjEwRTVEMDAwNzU3RDAwMDAwMDAwMDA0MDJEQjAwMTAwMDAwMDk1NDA1NgorOjEwRTVFMDAwMTFCMDAxMDA2RDAwMDA0MDYxOTkwMTAwQkE5NEE4QjExQQorOjEwRTVGMDAwMTAzMDAwMDAwMDAwMDAxNjgwQjIwMTAwMDQwMDI3MDg1RgorOjEwRTYwMDAwODAzMjAwMDAwMDAwOTU0MDgxQjIwMTAwN0YwMDAwNDA5MAorOjEwRTYxMDAwNjE5OTAxMDBDNTk0MjhCMTEwMzAwMDAwQkY5NDlGQkFFMQorOjEwRTYyMDAwODAzMjAwMDAxNTAwMDA0MDg5OTgwMTAwMDk5OTAwNDBERgorOjEwRTYzMDAwODEzMjAxMDAwMDAwODA0MDExQjAwMTAwMDQwMDIyNUMyMgorOjEwRTY0MDAwMTE3QzAwMDAwNDAwQTI1QTExN0MwMDAwMDQwMDIyMDg4MgorOjEwRTY1MDAwNDgwNjAwMDAwMDAwODAyNDExODQwMTAwMDQwMEEyNUMzMAorOjEwRTY2MDAwMDE3QzAwMDAwNDAwQTI1QTAxN0MwMDAwMDQwMDIyMDA4QQorOjEwRTY3MDAwNDgwNjAwMDAwNDAwMUZCQjgwMzIwMDAwMDAwMDAwNUY1RAorOjEwRTY4MDAwNjFCMTAxMDAwMDEwMDAwMDYyREQwMTAwMDAwMEE4NDAzRgorOjEwRTY5MDAwODFCMjAwMDBDRTk0MDA0MDgxQjIwMDAwQUM5NDAwNDBGMgorOjEwRTZBMDAwNDc5OTAxMDBEMjk0MzI0MDgxMzIwMDAwREE5NDIyRjg3NgorOjEwRTZCMDAwOTYzMDAwMDAwMDAwMDBGODkwQjAwMTAwMDAwMDAwRjA2QgorOjEwRTZDMDAwOTJCMDAxMDAwMDAwMDA0ODgwQjIwMTAwMDQwMDI3NDkxOAorOjEwRTZEMDAwODAzMjAwMDAwMTAwMDA0QkYwQ0QwMTAwMjAwMDkyNDg4NAorOjEwRTZFMDAwRTBDOTAxMDA2QzAwMDA0MDYxOTkwMTAwREU5NDI4QjE4RQorOjEwRTZGMDAwOTIzMDAwMDBEQTk0MjI0Qzc1N0QwMDAwMDQwMDEyNDAzNAorOjEwRTcwMDAwOTFCMDAwMDA2QzAwMDA0MDYxOTkwMTAwREU5NEE4QjE1NgorOjEwRTcxMDAwOTAzMDAwMDAwMDAwMDA0OTgwQjIwMTAwMDQwMDI3NDg0QQorOjEwRTcyMDAwODAzMjAwMDBGRjAwMDA0ODk2ODgwMTAwMDAwMDAwNEI4NgorOjEwRTczMDAwOTBEMDAxMDAwMTAwMDA0QkYwQ0QwMTAwMjAwMDAwNDgwNgorOjEwRTc0MDAwRjBDOTAxMDAwMDAwOTI0OUUwQjEwMTAwMEMwMDJEMTA1OQorOjEwRTc1MDAwNDhCMTAxMDBGRjA3MDAwODgyOEMwMTAwMDQwMEEyNUNBMAorOjEwRTc2MDAwODM3QzAwMDBGRjA3MDBGMDAwOEMwMTAwMDQwMEEyNUMyNQorOjEwRTc3MDAwMDE3QzAwMDAwNDAwMjI0MDAxNkMwMDAwMDAwMEEyNDE2NgorOjEwRTc4MDAwMDBFQzAwMDBGMDk0MjIxQTAwNkMwMDAwQzk5NDAwMDAxNAorOjEwRTc5MDAwMzQzMDAxMDAwMDAwMDA1MDQ5QzEwMTAwRUE5NEEyNDE1OAorOjEwRTdBMDAwMjM1MDAwMDAwMDAwODA0MDgxQjIwMTAwMEMwMDJEMTBCOQorOjEwRTdCMDAwNDhCMTAxMDBGRjA3MDAxNTgyOEMwMTAwMDQwMEEyNUMzMworOjEwRTdDMDAwODM3QzAwMDBGRjA3MDBGMDAwOEMwMTAwMDQwMEEyNUNDNQorOjEwRTdEMDAwMDE3QzAwMDAwNDAwMjI0MDAxNkMwMDAwMDAwMEEyNDEwNgorOjEwRTdFMDAwMDBFQzAwMDBGQzk0MjIwRDAwNkMwMDAwQzk5NDAwMDBCNQorOjEwRTdGMDAwMUEzMDAxMDAwMDAwMDA1MDQ5QzEwMTAwRjY5NEEyNDEwNgorOjEwRTgwMDAwMjM1MDAwMDAwMDAwODA0MDgxQjIwMTAwMDE5NTgzMUU2QQorOjEwRTgxMDAwODAzMjAwMDAwMDAwMDA0NDE5OTAwMTAwMjQwMDJEMDEwNgorOjEwRTgyMDAwMkNCMDAxMDAyODAwMkRGMDE2QjAwMTAwMjIwMDJERjBDMAorOjEwRTgzMDAwMjZCMDAxMDAxNDAwMkZGMjBDQjAwMTAwMDQwMEEyRjA3OQorOjEwRTg0MDAwMTQ2QzAwMDAwNDAwMjAwMTE0NkMwMDAwMDAwMDgwNDBFMworOjEwRTg1MDAwRTFCMTAxMDAzMDAwMDA0MDk3OTgwMTAwNjA5NzJFNDAyMAorOjEwRTg2MDAwODFCMjAxMDAwMDAwMDA0MEYxQjEwMTAwMEE5NUEyNDEwRgorOjEwRTg3MDAwOTc1MDAwMDA2NDk3M0U0MzlERTAwMTAwMDAwMDgwNDBGNworOjEwRTg4MDAwRTFCMTAxMDA2NDk3M0U0MzlERTAwMTAwMDAwMDgwMEI3MAorOjEwRTg5MDAwRThCMTAxMDA2NDk3M0Y0MzlERTAwMTAwMDAwMDAwRjBGMworOjEwRThBMDAwMTZDMDAxMDAwMDAwODA0MEUxQjEwMTAwNjQ5NzNGNDNDMQorOjEwRThCMDAwOURFMDAxMDAwMDAwMDBGNDE2QjAwMTAwMDAwMDgwNDA1RgorOjEwRThDMDAwRTFCMTAxMDA2MDE3M0Q0MzlERTAwMTAwMTAwMDgwQTEwRgorOjEwRThEMDAwMTZFNDAxMDAwNDAwQTIwNzE2NkMwMDAwMUEwNDAwNDBCMAorOjEwRThFMDAwODk5ODAxMDAxMDAwMDAwQjhBRTQwMTAwMDk5OTAwMERDRAorOjEwRThGMDAwOEExNDAxMDAwMEI1MDAwRDQyQzkwMTAwMUQ5NTMwNDc4MgorOjEwRTkwMDAwMTcwNDAwMDAyMDk1QTIwQkU2N0QwMDAwMDAwMDkwNDI1NQorOjEwRTkxMDAwODFCMDAxMDAwMEI3MDAwRDQ2QzkwMTAwMjQ5NUEyMEI4QgorOjEwRTkyMDAwRTY3RDAwMDAwMDAwMDAwQkU2OTEwMTAwMDAwMDkwNDEzMAorOjEwRTkzMDAwODFCMDAxMDAwMDAwMTA0MDgxQjIwMTAwMjU5NTQwMDcyMAorOjEwRTk0MDAwOTYzMDAwMDA5RDA0MDA0MDgxMzIwMTAwMkY5NUEyNDVDMQorOjEwRTk1MDAwOTU3QzAwMDAwMTk3M0Y0MTk1RTAwMTAwMDAwMDAwRjMyNQorOjEwRTk2MDAwOTZCMDAxMDAwMDAwMDA0RUU2QjEwMTAwNDA5NzNFNDAyNQorOjEwRTk3MDAwOTdFMDAxMDAwMDAwMDA0RUU2QjEwMTAwNDA5NzNFNDBFNAorOjEwRTk4MDAwOURFMDAxMDA0Mjk1MDAzQkU3QjEwMDAwMkY5NTMwNDAyQgorOjEwRTk5MDAwODEzMjAwMDAzOTk1QTIwQkU2N0QwMDAwMDBCNTAwMEQyNAorOjEwRTlBMDAwNDZDOTAxMDAzNTk1QTIwQkU2N0QwMDAwMDAwMDEwNDAyRAorOjEwRTlCMDAwODFCMjAxMDAwMDAwOTg0MjgxQjAwMTAwMDBCNzAwMEQ1MworOjEwRTlDMDAwNDZDOTAxMDAwMDAwMDAwQkU2OTEwMTAwMDAwMDEwNDA2NAorOjEwRTlEMDAwODFCMjAxMDAwMDAwOTg0MTgxQjAwMTAwMDQwMDIxQTIzMQorOjEwRTlFMDAwOTUyMDAwMDAwMDAwMTA0QTQ0ODMwMTAwMDA5NzNFNDEzQQorOjEwRTlGMDAwOTVFMDAxMDAwMDAwMDA0RUY2QjEwMTAwMDAwMDAwNEU1RAorOjEwRUEwMDAwRTZCMTAxMDA0MDk3M0U0MDlERTAwMTAwMDAwMDAwM0I2MAorOjEwRUExMDAwRTdCMTAxMDAwMDAwMDA0QTkwQjEwMTAwRkZGRjAwMDdDQworOjEwRUEyMDAwOTI4OTAxMDAwMDAwOTg0MDgxQjAwMTAwMTEwNDAwNDA2QgorOjEwRUEzMDAwODk5ODAxMDAwOTk5MDAwODhBMzAwMTAwMDMwMDAwMDg0NAorOjEwRUE0MDAwODZGNDAxMDAwMEI3MDA0MzQ2QzkwMTAwMDcwMDAwMDgzMgorOjEwRUE1MDAwODI4ODAxMDAwNDAwMjIwODgwMzIwMDAwMDQwMDIyNDE2NAorOjEwRUE2MDAwRTY3RDAwMDA0QTk1NDAwODk2MzAwMDAwOUQwNDAwNDA3NQorOjEwRUE3MDAwODEzMjAxMDA1ODk1MjI0NTk1N0MwMDAwNTM5NTIyNUExOQorOjEwRUE4MDAwMUY3QzAwMDAxMDAwMDAwRjk2RjQwMTAwNEY5NTMxNUZDRAorOjEwRUE5MDAwOTcwNDAwMDAwNDAwQTI0QjQ4N0YwMDAwMDAwMDExNEJDNworOjEwRUFBMDAwNDg5MzAxMDAwMDAwMDA0QjZBQjEwMTAwNTM5NTMwNDBDQgorOjEwRUFCMDAwODEzMjAwMDAwNDAwMjI0MUU2N0QwMDAwMDAwMDAwNDE5OAorOjEwRUFDMDAwRTY4MTAxMDAwMDAwMTA0MDgxQjIwMTAwMDAwMDk4NDA4MgorOjEwRUFEMDAwODFCMjAxMDAwMDk3M0Y0MTk1RTAwMTAwMDAwMDAwRjM4MgorOjEwRUFFMDAwOTZCMDAxMDA0MDk3M0Q0MDk3RTAwMTAwMDAwMDYzRjNCRAorOjEwRUFGMDAwODhCMDAxMDA2MTk1QTIzQjg5NkMwMDAwMDAwMDAwNEFDQgorOjEwRUIwMDAwOTBCMTAxMDAwMTAwMDBBNjkyQjEwMTAwMDQwMEEyNEFFOAorOjEwRUIxMDAwNDQ3RjAwMDA2Mjk1MTg0QTQ0OTMwMDAwMDAwMDE4NDBBQQorOjEwRUIyMDAwODFCMjAxMDAzRjA0MDA0MDg5OTgwMTAwMTYwMDAwMTJFNAorOjEwRUIzMDAwOEFFNDAxMDAwOTk5MDA0QjhBMTQwMTAwMzAwMDM5NDUyQworOjEwRUI0MDAwOTdFMDAxMDAwNDAwQTI1RjVGN0MwMDAwMDQwMDIyNUVFOQorOjEwRUI1MDAwNUY3QzAwMDAxRjA0MDAyRjdFRDkwMTAwMDQwMEE2NDA0NgorOjEwRUI2MDAwODEzMjAwMDA2RTk1MjI1QTFGN0MwMDAwMUYwNDAwMEZBNgorOjEwRUI3MDAwOThEODAxMDAwMDAwMDA0QzVFOTQwMTAwNzA5NTAwMDVEQgorOjEwRUI4MDAwNEFCMDAwMDAxRjA0MDBBNzVFODQwMTAwMDAwMDAwNDA5RQorOjEwRUI5MDAwNEJCMDAxMDAwMDAwMDA1RTVGOTAwMTAwMDQwMEEyMDg3RAorOjEwRUJBMDAwNEU2QzAwMDAwMDAwMDA1ODYxQjEwMTAwMDAwMDAwNEJGNQorOjEwRUJCMDAwNjJCMTAxMDAwMDAwQTg0MDgxQjIwMDAwNzM5NTAwNDBERQorOjEwRUJDMDAwODFCMjAwMDAzMzA0MDA0MDg5OTgwMTAwMDk5OTAwMDdEMAorOjEwRUJEMDAwOEEzMDAxMDA3ODk1NDAwNzk2MzAwMDAwOUQwNDAwNDA3RgorOjEwRUJFMDAwODEzMjAxMDA3Qzk1MjI0NTk1N0MwMDAwMDAwMDk4NDAxMAorOjEwRUJGMDAwODFCMjAxMDAwNDAwQTI0QTQ0N0YwMDAwOUIwNDAwNEE0NQorOjEwRUMwMDAwNDQxMzAxMDAwMDk3M0Y0MTk1RTAwMTAwMDAwMDAwRjMyQworOjEwRUMxMDAwOTZCMDAxMDA0MDk3M0Q0MDk3RTAwMTAwMDAwMDYzRjM4QgorOjEwRUMyMDAwODhCMDAxMDAzMDAwMzg0NTk3RTAwMTAwMDQwMEEyNUY4MQorOjEwRUMzMDAwMUY3QzAwMDAwNDAwMjI1RTFGN0MwMDAwMDQwMDIwQUE0QworOjEwRUM0MDAwMEY2QzAwMDAwMDAwMDA1RjBGOTAwMTAwMDAwMDAwNThGMgorOjEwRUM1MDAwNjFCMTAxMDAwMDAwMDA0QjYyQjEwMTAwODg5NUE4NDAzRAorOjEwRUM2MDAwODEzMjAwMDA3RTk1QTIzQjg5NkMwMDAwMzAwMDM4NDU1RgorOjEwRUM3MDAwOURFMDAxMDAwMDAwOTg0MDgxQjIwMTAwMDQwMDIyMDhEQworOjEwRUM4MDAwODAzMjAwMDAwMzAwMDAwODk0RjQwMTAwMDBCNzAwNEEzRAorOjEwRUM5MDAwNDZDOTAxMDAwNzAwMDAwODk2ODgwMTAwMDQwMDIyNEJDNQorOjEwRUNBMDAwRTY3RDAwMDA5MzA0MDAxMjk0MzAwMTAwNDM5NTAwNUE2MQorOjEwRUNCMDAwMUYwMDAxMDAwMDAwODA1QTFGOTAwMTAwMTEwMDAwNEE0RgorOjEwRUNDMDAwRTZDOTAxMDAzMDAwMDA0QTgwQ0UwMTAwMDQwMDI0NDA2MworOjEwRUNEMDAwODEzMjAwMDAzNDAwMkY0Rjk1ODQwMTAwMDAwMDAwRjNDMgorOjEwRUNFMDAwOTZCMDAxMDAwMTAwNjM0Qjg0QzgwMTAwMDAwMEEwNDNGRQorOjEwRUNGMDAwODU2QzAxMDAwMDAwRTM0MDg1QjAwMTAwMzAwMDJENDQyOAorOjEwRUQwMDAwMUY5MDAxMDAzMjAwMkRGMjJBQjAwMTAwMDQwMDI2NDBCRAorOjEwRUQxMDAwODEzMjAwMDAwNDAwMjJGMjAyMzAwMDAwMUQ5NDAwMTAzNQorOjEwRUQyMDAwMzIzMDAxMDAwNDAwMjIwMDgwMzIwMDAwMDQwMDIyNDI0MAorOjEwRUQzMDAwMTk3QzAwMDAzMjAwQTA0MEU1QjEwMTAwMDAwMDAwNDA1NQorOjEwRUQ0MDAwOTdCMDAxMDBGMDA3MDA0MDk5OTgwMTAwMDAwMDAwNEFDOAorOjEwRUQ1MDAwMDJDMDAxMDAwMDAwMDA1MDAzRDAwMTAwMDAwMDAwNDE4QgorOjEwRUQ2MDAwOTdDMDAxMDAwMDAwQTM0QzAyRDAwMDAwQTk5NTAwNDAwQworOjEwRUQ3MDAwODFCMjAwMDAwMDAwMDBBODM2QjAwMTAwQkE5NTIyNDExRgorOjEwRUQ4MDAwMDM1MDAwMDAwMDgwMDAxMDQ0QzkwMTAwMDAwMDAwNTA0MgorOjEwRUQ5MDAwRjFCMTAxMDA3MDAwMDAwM0YwQzkwMTAwMDAwMDAwNDI2MQorOjEwRURBMDAwNjFCMTAxMDAwMDAwMDAxMDYyQjEwMTAwQjI5NUE4MDAzRAorOjEwRURCMDAwRTAzMTAwMDAyMzgzMDA4ODFDQjAwMDAwQzk5NDAwNDBBQgorOjEwRURDMDAwODEzMjAxMDA3QzgwMDAwMzQyQzkwMTAwMDQwMDIyNDAxRQorOjEwRUREMDAwRTE2RDAwMDAwMDAwMDBGMDAwQjAwMTAwQUQ5NTAwNUNBNgorOjEwRURFMDAwMDE4MDAwMDBDOTk0MDA0MDgxMzIwMTAwMDAwMDAwMUIzNgorOjEwRURGMDAwMTBCMTAwMDA2ODAxMkQwNjgyQjAwMTAwMDAwMDAwRjI5MQorOjEwRUUwMDAwODJDMDAxMDAwMDgwMDAwMzQ2QzkwMTAwQkY5NDAwNDA5OQorOjEwRUUxMDAwODEzMjAxMDBFODk1MjI0MDExNkMwMDAwMDAwMDY4MDg3MgorOjEwRUUyMDAwMzg5NjAxMDAzQTA0MDA0MDg5OTgwMTAwMDk5OTAwMDhDOQorOjEwRUUzMDAwOEEzMDAxMDBGMDA3MDA0MTgyQ0MwMTAwQkY5NUFBNDE1MQorOjEwRUU0MDAwM0I0MDAwMDAwMDAwMDBGODEwQjAwMTAwMDAwMDAwNUMzMgorOjEwRUU1MDAwMTE4MDAxMDAwNDAwQTM0ODNCNkMwMDAwMDEwMDAwMUQ2QworOjEwRUU2MDAwMDRDQzAxMDBFNjk1MjY0NjIzMzAwMDAwMDgwMDAwMDM4QworOjEwRUU3MDAwMTJDODAxMDAwNDgwMDAwMzk4QzgwMTAwMDQwMEEyNENERAorOjEwRUU4MDAwNDI2RDAwMDAwNDAwQTIwNTQ4NkQwMDAwNjQwMTIwRjBGRQorOjEwRUU5MDAwRTBCMTAxMDBFNTk1MjI0MTA1NTAwMDAwMjAwMDAwMDM4QgorOjEwRUVBMDAwNDhDOTAxMDAwQzAwMDBGODg2QzgwMTAwMDAwMDIyNDQ5NworOjEwRUVCMDAwRjFCMTAxMDAwMDAwMDA0M0YwQjEwMTAwMDAwMDAwMDlDMQorOjEwRUVDMDAwRTBCMTAxMDAwMDAwMDA0NDYxQjEwMTAwQTAwMDAwQTQxNQorOjEwRUVEMDAwNjJERDAxMDBENzk1QTg0NjFGMTAwMDAwRTQ5NTIyNDE4RAorOjEwRUVFMDAwMDU1MDAwMDBFMjk1QTI0MTIzNTAwMDAwMDAwMDAwQTE1RgorOjEwRUVGMDAwMUFCMDAxMDAwMDAwMDA0NDYxQjEwMTAwNDAwMDAwMTBBMAorOjEwRUYwMDAwNjJERDAxMDBERDk1QTg0NjIzMzAwMDAwMjM4MzAwODhFMAorOjEwRUYxMDAwMUNCMDAwMDAxMDAwMDAwMzQ4QzkwMTAwMDAwMDAwMERGMworOjEwRUYyMDAwNDJCMTAxMDAwMDAwMDA0NDEzQzAwMTAwRDI5NTAwNTAxRQorOjEwRUYzMDAwNDlDMTAwMDAwMDAwMDAwNTQ4QjEwMTAwMDQ4MDAwMDM0MQorOjEwRUY0MDAwMUFDODAxMDAwNDAwQTIwNTQ4NkQwMDAwMDAwMDgwNDBCRQorOjEwRUY1MDAwODFCMjAxMDBFNjk1MjI0MDNCNkMwMDAwMDAwMDAwRjgwMQorOjEwRUY2MDAwMDBCMDAxMDBDOTk0MDA1QzAxMDAwMTAwRTg5NTAwNDE3NworOjEwRUY3MDAwM0JEMDAwMDAwMDAwOEQ0NzgwMzIwMTAwQjAwMDJGNUZDMQorOjEwRUY4MDAwMTNCMDAxMDAwMDAwNjBGMDhDQzAwMTAwN0MwMDAwNDA2NAorOjEwRUY5MDAwNDM5OTAxMDAwNDAwQTNGMDhDNkMwMDAwMDAwMDgwNDA0NQorOjEwRUZBMDAwODFCMjAxMDAwMDgwMDAwMzQyQzkwMTAwMDAwMDAwRjhBNgorOjEwRUZCMDAwOTRCMDAxMDAwMDAwMDBGODhDQjAwMTAwRjc5NThDRjhDNworOjEwRUZDMDAwOEUzMDAwMDAwMDAwMDA0NDE5OTAwMTAwMDQwMDIyRjg3NworOjEwRUZEMDAwMTQzMDAwMDAwMDAwMDBGODE2QjAwMTAwMDAwMDAwRjgzNgorOjEwRUZFMDAwMjZCMDAxMDAwODAwMkVGODBDQjAwMTAwMEMwMDJBNEFERgorOjEwRUZGMDAwRTBCMTAxMDAyODAwMDAwMEUwQzkwMTAwMTAwMDIwMUI2MgorOjEwRjAwMDAwRTBCMTAxMDAwNDk2MjAwQTBDNkMwMDAwMDAwMDAwRjgzQQorOjEwRjAxMDAwOTRCMDAxMDAwMDAwMDBGODk2QjAwMTAwMjAwMDIwRjAzQworOjEwRjAyMDAwRTRCMTAxMDAxODAwMjA0QUUwQjEwMTAwMUMwMDIwNEJBRgorOjEwRjAzMDAwRTBCMTAxMDBFQzk1MDA0MDEzQjAwMDAwMDQwMEEyMDUwRgorOjEwRjA0MDAwNDg2RDAwMDAyQzAwMkQ0MjE5OTAwMTAwMkUwMDJGRjM3NgorOjEwRjA1MDAwODJCMDAxMDAwMDAwMDBGMzk2QjAwMTAwMEI5NkEyQTU1QgorOjEwRjA2MDAwOTc2QzAwMDAwMDAwODA0MTk1QjAwMTAwMEU5NkEyNDAxMAorOjEwRjA3MDAwOTc2QzAwMDAwMDAwMDA0MDgzQjAwMTAwMkQwMDIwNDA4QworOjEwRjA4MDAwRTdCMTAxMDAwMDAwNjM0MTk3QzAwMTAwRDQwMDNFNDE5OAorOjEwRjA5MDAwODNFMDAxMDAwMDAwMDA0MTgzQzAwMTAwMTM5NkEwQTU5OQorOjEwRjBBMDAwODM2QzAwMDAwMDAwMDA0MDgzQjAwMTAwMkMwMDIwNDE3MAorOjEwRjBCMDAwRTZCMTAxMDAxODk2MjI0MDFGN0MwMDAwMDAwNDAwMDAwOQorOjEwRjBDMDAwOThEQzAxMDAwQjAwMDA0Q0U0RjUwMTAwMTk5NjAwNDBBQgorOjEwRjBEMDAwMUY4MDAwMDAwQjAwMDAwMEU0RjUwMTAwMUUwNDAwNDA0QQorOjEwRjBFMDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwMDAwMDgwNDBFMQorOjEwRjBGMDAwODFCMjAxMDBEMTk0MDA0MDgxMzIwMTAwMDA4MDAwMDMwMAorOjEwRjEwMDAwNDJDOTAxMDAwNDAwMjI0MEUxNkQwMDAwMDQ4MDAwMDNCOAorOjEwRjExMDAwNDRDOTAxMDAwMDAwMDA0MEYxQjEwMTAwMDAwMDAwNDBCRQorOjEwRjEyMDAwRjFCMTAxMDAwMDAwNjA0MTg3QjAwMTAwMDA4MDAwMTBEMworOjEwRjEzMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwNDg4NgorOjEwRjE0MDAwRjBCMTAxMDAwMDAwMDA0OUYwQjEwMTAwMDAwMDAwMDMyRgorOjEwRjE1MDAwRTBCMTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwMTA5NQorOjEwRjE2MDAwNjJERDAxMDAwMDAwQTg1RDA1OTAwMDAwMjk5NjAwNDBDNgorOjEwRjE3MDAwODFCMjAwMDBEMTk0MDA0MDgxMzIwMTAwMDA4MDAwMDM4MAorOjEwRjE4MDAwNDRDOTAxMDAwMDAwMDA0MUYwQjEwMTAwMDQwMDI2NDAyNAorOjEwRjE5MDAwODEzMjAwMDAwMDAwMDA0MkYwQjEwMTAwMDAwMDAwNDA5OAorOjEwRjFBMDAwRjFCMTAxMDAwMDAwMDA0M0YwQjEwMTAwMDA4MDAwMTA0NworOjEwRjFCMDAwNDRDOTAxMDAwMDAwMDA1MEYxQjEwMTAwMDAwMDAwNDgwNgorOjEwRjFDMDAwRjBCMTAxMDAwMDAwMDA0OUYwQjEwMTAwMDAwMDAwMDNBRgorOjEwRjFEMDAwRTBCMTAxMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwMTAxNQorOjEwRjFFMDAwNjJERDAxMDAwMDAwQTg1RDA1OTAwMDAwMzk5NjAwNDAzNgorOjEwRjFGMDAwODFCMjAwMDAwNDAwQTIwNTQ4NkQwMDAwMDQwMDgyMENFQQorOjEwRjIwMDAwODAzMjAwMDAyRDAwMDA0MDQzOTkwMTAwMkUwMDJGRjNCMgorOjEwRjIxMDAwODRCMDAxMDAwMTAwNjNGMzk2QzgwMTAwNDM5NjlGNDE0QQorOjEwRjIyMDAwODU1MDAwMDAwMTAwMDBBNTg1Q0MwMTAwMkQwMDIwNDI4MgorOjEwRjIzMDAwRTZCMTAxMDAwNDAwQTNBNTk3NkMwMDAwRDQwMDNENDE5NQorOjEwRjI0MDAwODVFMDAxMDAwQjAwMDBGMjk4RTQwMTAwNEE5NjIyNDA5QworOjEwRjI1MDAwMUY3QzAwMDAwNDAwMjI1QTk5N0MwMDAwMDAwMDAwNUEyNAorOjEwRjI2MDAwOTk4MDAxMDAwNDAwQTIwMDk4NkMwMDAwMjAwNDAwNDA3NgorOjEwRjI3MDAwODk5ODAxMDAwOTk5MDAwMDhBMzAwMTAwMDAwMDgwNDA0RgorOjEwRjI4MDAwODFCMjAxMDAyMTA0MDA0MDg5OTgwMTAwMDk5OTAwMDAyMQorOjEwRjI5MDAwOEEzMDAxMDAwNDAwQTIwMDZBMDYwMDAwNUUwMTJEMDAxMQorOjEwRjJBMDAwODBCMDAxMDA1NTk2NTI0MzgxNjAwMDAwMDIwMDAwRjJEOAorOjEwRjJCMDAwODJGNDAxMDA1Njk2MDA0MTgwOTQwMDAwMDAwMDAwNUYzNworOjEwRjJDMDAwODE5MDAxMDAwMDAwMDA1RTYxQjEwMTAwMDAwMDAwNDA3QgorOjEwRjJEMDAwNjJCMTAxMDAwMDAwQTg0MDk1QjAwMDAwNTc5NjlFQkJBNworOjEwRjJFMDAwODAzMjAwMDA1Qzk2QTI0MDFGN0MwMDAwQzk5NDAwNDA2MAorOjEwRjJGMDAwODFCMjAwMDAwMDAwODA0MTk1QjAwMTAwMDQwMDAwMTVCQgorOjEwRjMwMDAwNDJDOTAxMDAwMDAwMDA1NDJCQzAwMTAwMDAwMDAwRkNCNQorOjEwRjMxMDAwMjRCMDAxMDAwMDAwMDBGQzM4QjAwMTAwMDAwMDAwRkUzNQorOjEwRjMyMDAwM0NCMDAxMDAwMDAwMDBGRTNBQjAwMTAwNzE5NjlDMTc0RAorOjEwRjMzMDAwODAzMjAwMDA2Njk2QTI0QTE5N0MwMDAwMDAwMDgwNENEMgorOjEwRjM0MDAwMUY5MDAxMDAwQzAwMDAxRTk4RjQwMTAwNjU5NkEyNDg3MQorOjEwRjM1MDAwOTk2QzAwMDAwMDAwMDAxNTQyQjEwMTAwNjU5NkEyOEE3OAorOjEwRjM2MDAwRjE2RDAwMDAwQzAwMDAwMTAyQ0MwMTAwMDAwMDAwRkM2NworOjEwRjM3MDAwM0VCMDAxMDAwMTAwMDBGNDI4Q0MwMTAwQ0MwMDJEMDVCNgorOjEwRjM4MDAwNDhCMTAxMDA3MDk2MjBGMDNFNkMwMDAwMDAwMDAwNEI3OAorOjEwRjM5MDAwMUY5MDAxMDAwMDAwMDA0QzJCQzAwMTAwQkYwMDJEMDU5NAorOjEwRjNBMDAwNDhCMTAxMDAwMDAwODBGMzNBRTAwMTAwMDQwMEEyMDUyQQorOjEwRjNCMDAwNDg2RDAwMDAxMDAwMDAwQzk2RjQwMTAwMDQwMEEyMDc0NAorOjEwRjNDMDAwOTY2QzAwMDAwMDAwMkU0QjE5OTAwMTAwMDcwMDJBMENEQgorOjEwRjNEMDAwRTRCMTAxMDAwMDAwODAwNEU2QjEwMTAwMTgwMDAwNDAyMworOjEwRjNFMDAwNDM5OTAxMDAxQzAwMkRGMDE2QjAwMTAwMjAwMDJERjAwMworOjEwRjNGMDAwMjZCMDAxMDAwQzAwMkZGMjBDQjAwMTAwMDAwMEEyMDZBNAorOjEwRjQwMDAwMTRFQzAwMDA4MDk2MjI0NTFGN0MwMDAwMDAwMEEzMDYzQgorOjEwRjQxMDAwMkFFQzAwMDAwMDAwMDBGODk0QjAwMTAwMDAwMDAwRjBBOQorOjEwRjQyMDAwOTZCMDAxMDAwQzAwMkQ0MDgxQjIwMTAwMDAwMDJBNEM3MgorOjEwRjQzMDAwRTFDMTAxMDAzMDAwMDAxMDQ4QzkwMTAwMEEwMDAwNDA4RAorOjEwRjQ0MDAwRjE5OTAxMDAxODAwMDAwNUYwQzkwMTAwMDAwMDAwNEExMAorOjEwRjQ1MDAwRjBCMTAxMDAwMDAwMDA0QkUwQjEwMTAwMDAwMDAwNDdFNgorOjEwRjQ2MDAwNjFCMTAxMDBBMDAwMDBBNDYyREQwMTAwOEE5NkE4NUNFMQorOjEwRjQ3MDAwMUYxMDAwMDAwMDAwODAwNTQ4QjEwMTAwMDQwMEEyOTVBMworOjEwRjQ4MDAwMDM2QzAwMDAwMDAwMkUxMDQ4QjEwMTAwNDAwMDAwMDE5NAorOjEwRjQ5MDAwRjBDRDAxMDA0MDAwMDAwM0YwQzkwMTAwNDAwMDAwMDA3MQorOjEwRjRBMDAwRTBDOTAxMDAwMDAwMkU1MDQ5QzEwMTAwMDAwMDAwMDYyMworOjEwRjRCMDAwRjFCMTAxMDAwMDAwMDAwM0YwQjEwMTAwOTU5NjYyNDIzNQorOjEwRjRDMDAwNjEzMTAwMDAyMDAwMDAxMDYyREQwMTAwOTY5NkE4NDAyNgorOjEwRjREMDAwODEzMjAwMDAxMDAwMDAxMDYyQzkwMTAwOTg5NkE4MDA1NworOjEwRjRFMDAwRTAzMTAwMDAwMDAwRjI0MDgxQjIwMTAwMDQwMEEyOTU2QQorOjEwRjRGMDAwMDM2QzAwMDAwMDAwMkUxMDQ4QjEwMTAwNDAwMDAwMDEyNAorOjEwRjUwMDAwRjBDRDAxMDA0MDAwMDAwM0YwQzkwMTAwNDAwMDAwMDAwMAorOjEwRjUxMDAwRTBDOTAxMDAwMDAwMkU1MDQ5QzEwMTAwMDAwMDAwMDZCMgorOjEwRjUyMDAwRjFCMTAxMDAwMDAwMDAwM0YwQjEwMTAwQTM5NjYyNDJCNgorOjEwRjUzMDAwNjEzMTAwMDAyMDAwMDAxMDYyREQwMTAwQTQ5NkE4NDBBNworOjEwRjU0MDAwODEzMjAwMDBBMDAwMDBBNDYyREQwMTAwQTY5NkE4MDBBMAorOjEwRjU1MDAwRTAzMTAwMDAwMDAwRjI0MDgxQjIwMTAwMzA4MDAwNEEzQQorOjEwRjU2MDAwNDRDOTAxMDAwMDAwMDAwNkYxQjEwMTAwQzBBODNENDZGOQorOjEwRjU3MDAwMERFMDAxMDBGRjdGMDBBMUYwODkwMTAwMDIwMDAwMDlGOQorOjEwRjU4MDAwOTZGNDAxMDAwMDAwMDA0Njk3RTAwMTAwMDAwMDYwQTgyQQorOjEwRjU5MDAwOTdDMDAxMDBCMDk2NjM0MjYxMzEwMDAwMzAwMDAwNEExQworOjEwRjVBMDAwNjJDOTAxMDBCMTk2QTg0MDgxMzIwMDAwMDAwMEYzNDAxQQorOjEwRjVCMDAwODFCMjAxMDAwMDk5M0Y0Mjk3RjAwMTAwQjU5NjY1NDA4NQorOjEwRjVDMDAwODEzMjAwMDBCRDk2MjJGMzc0MDYwMDAwM0YwMDAwRjM3NAorOjEwRjVEMDAwOTQ4ODAxMDAwMDAwMDAwN0U3ODUwMTAwMDAwMDc1NTVEMAorOjEwRjVFMDAwNjFCMTAxMDAwMDAwMDA0QTYyQjEwMTAwMDAwMEE4NDBDMgorOjEwRjVGMDAwODFCMjAwMDBCQTk2MDA0MDgxQjIwMDAwMDAwMEY1NDBFMAorOjEwRjYwMDAwODFCMjAxMDAwMDAwMDBBODM2QjAwMTAwQ0Q5NjgyNDExMQorOjEwRjYxMDAwMjM0MDAwMDBDMjk2QTI0NDFGN0MwMDAwOUU5MzAwMDE3QworOjEwRjYyMDAwOEMzMDAxMDAyMDgwMDAxMDQyQzkwMTAwQzg5NjIyNDBBMQorOjEwRjYzMDAwRTM2RDAwMDAwMDAwMDA0MzYxQjEwMTAwNDAwMDAwMTBENAorOjEwRjY0MDAwNjJERDAxMDBDNTk2QTg0MDgxMzIwMDAwMjM4MzAwODg1NgorOjEwRjY1MDAwMUNCMDAwMDAwMDAwMDA0MTIzQjAwMTAwMDAwMDAwMTBCOQorOjEwRjY2MDAwMzJCMDAxMDBDRDk2MjI0MTE5N0MwMDAwRTc5NDAwNDM5RQorOjEwRjY3MDAwMjMzMDAxMDAwMDAwMDA0MTIzQjAwMTAwQ0Y5NkEzMTUwNAorOjEwRjY4MDAwMEM2QzAwMDBEMDk2MDAwNjA0QjAwMDAwMDAwMDAwMTVDRAorOjEwRjY5MDAwMDRCMDAxMDBEMjk2MjAwMjFBNkMwMDAwMDAwMDAwMEQ5OAorOjEwRjZBMDAwMDRCMDAxMDBBMTk3MDAwNTQ4MzEwMTAwRkQ5NjIyMDIzNworOjEwRjZCMDAwMTQ1MDAwMDBENjk2QTIwMjJBNTAwMDAwRkQ5NkEyNDVFMgorOjEwRjZDMDAwMUY3QzAwMDBEODk2MjIwMjBDNTAwMDAwRTE5NjAwMDIzOAorOjEwRjZEMDAwMTZDMDAwMDBFMDk2MjI1QzFGN0MwMDAwMzA4MDAwMTAwNQorOjEwRjZFMDAwNDJDOTAxMDBFMDk2MjI0MEUzNkQwMDAwMDAwMDAwNDc5RgorOjEwRjZGMDAwNjFCMTAxMDA0MDAwMDAxMDYyREQwMTAwREM5NkE4NDAwRAorOjEwRjcwMDAwODEzMjAwMDAyMzgzMDA4ODFDQjAwMDAwMDAwMDAwMDU0NworOjEwRjcxMDAwNDhCMTAxMDA3OTk2MDA1QzFGMDAwMTAwRkQ5NjIyMTU5QQorOjEwRjcyMDAwODAzMjAwMDAwMDAwMDA1MDMzQzAwMTAwRkM5NkEyMDJBRAorOjEwRjczMDAwMUE1MDAwMDBFRDk2MjI0NjFGN0MwMDAwNzA4MDAwMDNFNgorOjEwRjc0MDAwNDJDOTAxMDAwMDAwMDA0NjFGODAwMTAwRUQ5NjIyNDBFMgorOjEwRjc1MDAwRTM2RDAwMDAwMDAwMDA0MjYxQjEwMTAwNDAwMDAwMTBCNAorOjEwRjc2MDAwNjJERDAxMDBFOTk2QTg0MDgxMzIwMDAwMjM4MzAwODgxMQorOjEwRjc3MDAwMUNCMDAwMDAwMDAwMDAwNTQ4QjEwMTAwMEM4MDAwMDMyRgorOjEwRjc4MDAwNDJDOTAxMDAwNDAwMjJGMDgwMzIwMDAwMTAwMDAwRjBBNQorOjEwRjc5MDAwMTBDODAxMDAyRjAwMkY1QzExODAwMTAwMDAwMDAwNDdGRAorOjEwRjdBMDAwRTc5MTAxMDBGMDA3MDA0MDFCOTgwMTAwQkY5NjIwMTU2QgorOjEwRjdCMDAwMUE2QzAwMDA3MDAwMDAwMzQ4QzkwMTAwMDAwMDIyNTBDQworOjEwRjdDMDAwRjFCMTAxMDAwMDAwMDAwM0YwQjEwMTAwRkYwNzAwMDhFMworOjEwRjdEMDAwRTA4RDAxMDAwMDAwMDA0MjYxQjEwMTAwQTAwMDAwQTQyMgorOjEwRjdFMDAwNjJERDAxMDBGOTk2QTg0NjFGMTAwMDAwQkY5NjAwMDVEMworOjEwRjdGMDAwNDhCMTAwMDBCRjk2MDAwMjEwQzAwMDAwRkY5NkEyNDQ2RQorOjEwRjgwMDAwMUY3QzAwMDA5RTkzMDAwMThDMzAwMTAwMDAwMDAwMUI1MworOjEwRjgxMDAwMTBCMTAwMDAwMDgwMDAxMDQ0QzkwMTAwMEMwMDAwNDAzRAorOjEwRjgyMDAwRjE5OTAxMDAxMDAwMDAwOEYwQzkwMTAwMDAwMDAwMTY2NQorOjEwRjgzMDAwRjBCMTAxMDAxMDAwMDAwM0UwQzkwMTAwMDQwMEEyNUM2NworOjEwRjg0MDAwMUY3QzAwMDAwMDAwMDA0NTYxQjEwMTAwMjAwMDAwMTA5NQorOjEwRjg1MDAwNjJERDAxMDAwMDAwQTg1QzFGOTAwMDAwMDc5NzAwNDBENworOjEwRjg2MDAwODFCMjAwMDAxNzAwMDBEMEEyQzkwMTAwMDAwMEEyNDAzMAorOjEwRjg3MDAwMjdFQzAwMDAwMDAwMDAyMDAwQjAwMTAwQzk5NDAwNDEwNgorOjEwRjg4MDAwQTM0MTAxMDAwQjk3MDA0MTI3RDAwMDAwMzYwNDAwNDAzRgorOjEwRjg5MDAwODk5ODAxMDAwOTk5MDA0MDhBMzAwMTAwMTAwMDAwMDc5MgorOjEwRjhBMDAwOTZFNDAxMDAwMDAwMDA0QjgwOTQwMTAwMDAwMDAwNTQyOQorOjEwRjhCMDAwNjFCMTAxMDAwMDgwMDA0MDYyREQwMTAwMDAwMEE4NDA0RAorOjEwRjhDMDAwODFCMjAwMDAwNDAwMTRCQjgwMzIwMDAwMTQ5NzAwNDA5NQorOjEwRjhEMDAwODFCMjAwMDAwNDAwQTIwNTQ4NkQwMDAwNkE5NzAwNDA1NAorOjEwRjhFMDAwMkIzMDAxMDBBQzAwMkQwNjE2QzAwMTAwOTAwMDJERjA1OQorOjEwRjhGMDAwMTZDNDAxMDAxRTk3QTBGMDE2NDQwMDAwMDAwMDAwNDE0RAorOjEwRjkwMDAwMTdDMDAxMDAwRTAwMDBBMjQ0QzkwMTAwMDAwMDZDRjAwNQorOjEwRjkxMDAwMzBCMDAxMDBBQzAwMkQ0MDg3QjAwMTAwMDAwMDZDRjA1OQorOjEwRjkyMDAwMjhCMDAxMDAyNzk3MjI0QTE5N0MwMDAwMDAzMDAwNDNDQworOjEwRjkzMDAwODZDODAxMDAwMDMwMDAwQjE2QzgwMTAwMjc5N0E0NDBCQworOjEwRjk0MDAwODEzMjAwMDAwMDAwMDA0MTE3QzAwMTAwNEE5NzIyMDZFMgorOjEwRjk1MDAwODAzMjAwMDAzNTk3QTIwNjE0NkMwMDAwMzI5NzIyNDhDRQorOjEwRjk2MDAwMTk3QzAwMDAyQzk3QTA0MTE3NDAwMDAwMDAwMDAwNDFDNgorOjEwRjk3MDAwMTdDMDAxMDAwMDAwMDA0MTMxQzAwMTAwOTAwMDIwMThCNAorOjEwRjk4MDAwRTBCMTAxMDA4QjAwMkQ0ODE5ODAwMTAwMDQwMEEyNDU2MAorOjEwRjk5MDAwRTc3RDAwMDA4QjAwMjA0NUU3OTEwMTAwMzU5NzAwNDA4RQorOjEwRjlBMDAwODc5MDAwMDAwODAwMDA0Mzg2OTgwMTAwMzU5N0EwNDgyMgorOjEwRjlCMDAwMTc0MDAwMDAwMDAwMDA0MTE3QzAwMTAwQjAwMDAwNDBFNworOjEwRjlDMDAwNDM5OTAxMDAxMDUwMDA0M0ZDQzkwMTAwQUU5NzAwMzA3QworOjEwRjlEMDAwODEzMDAxMDAwMDAwMDA0MEU1QjEwMTAwNDA5NzIyNEE1QgorOjEwRjlFMDAwMTk3QzAwMDAwODAwMDBBMjQ0QzkwMTAwQ0MwMDJEQUIyNgorOjEwRjlGMDAwRjlCMTAxMDAwMDAwMDBBQjE3QzAwMTAwM0Y5N0EwRjA3MworOjEwRkEwMDAwMTY0NDAwMDAwMDAwMDA0MTE3QzAwMTAwNDQ5NzY0RjA1NAorOjEwRkExMDAwODJCMDAwMDBBNDAwMDA0MDQ3OTkwMTAwNDQ5N0EyRjI4MAorOjEwRkEyMDAwODAzMjAwMDAwMDAwMDA0MUU1QjEwMTAwOEMwMDIwMTg4OAorOjEwRkEzMDAwRTBCMTAxMDA5MDAwMDA0MDQ1OTkwMTAwMDAwMDYwMDYxRgorOjEwRkE0MDAwMzBDMDAxMDAwMDAwODYwQzgwQjIwMDAwMDQwMEEyNDkxMgorOjEwRkE1MDAwMTk3QzAwMDBCQzAwMkQ0NjE5OTAwMTAwQTAwMEEwRjIwNgorOjEwRkE2MDAwRTRCMTAxMDBCMDAwMDA0MDQzOTkwMTAwMTA1MDAwNDM5MAorOjEwRkE3MDAwRkNDOTAxMDBBRTk3MDAzMDgxMzAwMTAwMDAwMEEyNEFBRAorOjEwRkE4MDAwMTlGQzAwMDAwODAwMDBBMjQ0QzkwMTAwQ0MwMDJEQUIwNQorOjEwRkE5MDAwRjlCMTAxMDAwMDAwMDBBQjE3QzAwMTAwNTM5N0EwRjBCRQorOjEwRkFBMDAwMTY0NDAwMDAwMDAwMDA0MTE3QzAwMTAwMDAwMEU0RjAwRgorOjEwRkFCMDAwODJCMDAxMDAwMDgwMDAxMDQ0QzkwMTAwMDAwMDAwNDEzNAorOjEwRkFDMDAwRjBCMTAxMDAwMDAwMDAwM0YwQjEwMTAwMDAwMDAwMDBFRgorOjEwRkFEMDAwRjBCMTAxMDAwMDAwMDAxMDYyQjEwMTAwMDAwMEE4MUI5RAorOjEwRkFFMDAwRTBCMTAwMDA1ODk3MDA0MDgxQjIwMDAwMDBGMDAwMEMyNworOjEwRkFGMDAwN0U4OTAxMDAwMDAwQTY0Qzk1NjAwMTAwMDAwMDgwNEE0QworOjEwRkIwMDAwMTg5NDAxMDAwMDgwMDAxMDQ0QzkwMTAwMDQwMDIyMDE4MworOjEwRkIxMDAwRjAzMTAwMDAyMDAwMDA0MEYwQzkwMTAwMDAwMDAwMTY5NAorOjEwRkIyMDAwRjBCMTAxMDAwMDAwMDA0MzYxQjEwMTAwMjAwMDAwMTBBRAorOjEwRkIzMDAwNjJERDAxMDAwMDAwQTgxNUUwQjEwMDAwNjM5NzAwNDBGRAorOjEwRkI0MDAwODFCMjAwMDAxMDgwMDAwMzQ0QzkwMTAwMDAwMDAwMDZEQgorOjEwRkI1MDAwRjBCMTAxMDAwMDAwMDAwMUYwQjEwMTAwMDAwMEU4NUYxOQorOjEwRkI2MDAwMTc5MDAxMDA3MDAwMDA0MDQzOTkwMTAwN0EwMTJFRkVCOQorOjEwRkI3MDAwOTJCMDAxMDA4QjAwMkRGNjE2QjAwMTAwNzA5NzIyNDM2MQorOjEwRkI4MDAwRTc3RDAwMDAwMDAwMDA0NDQ1QzEwMTAwMDQwMDAwQTYxQworOjEwRkI5MDAwMkFCMDAxMDAyODAwNkUwNjgyQzgwMTAwNzQ5NzIyNEEyQworOjEwRkJBMDAwMTk3QzAwMDAwMDAwMDA0MjQ1RDEwMTAwMDAwMDZFNENBRAorOjEwRkJCMDAwODNDMDAxMDAwMDAwMDA0MTkyQzAwMTAwNzU5NzQzMzBFRQorOjEwRkJDMDAwM0QwNzAwMDAwMDAwNjY5RTgzQjAwMTAwMDAwMDFCNDE1RAorOjEwRkJEMDAwM0RDMzAxMDAwMDAwMDA0MTkyQzAwMTAwMDYwMDAwQTJFOAorOjEwRkJFMDAwNDRDOTAxMDAxMDAwMDA0OTk4RjQwMTAwN0U5NzI2MzBCNgorOjEwRkJGMDAwOTMwNDAwMDA3RTk3OTA0QzkyNDAwMDAwMDAwMDAwNDE2QQorOjEwRkMwMDAwOTNDMDAxMDBGRkZGODA0OUVDQTkwMTAwMDA4MDAwMTBCMworOjEwRkMxMDAwNDRDOTAxMDAwNDAwMjIwMUYwMzEwMDAwMDAwMDAwMDk4NQorOjEwRkMyMDAwRjBCMTAxMDAwMDAwMDAxOEYwQjEwMTAwMjAwMDAwMTA0OAorOjEwRkMzMDAwNjJERDAxMDAwMDAwQTgxNUUwQjEwMDAwODM5NzAwNDBEQworOjEwRkM0MDAwODFCMjAwMDAwNDAwMjIyMDgxNkMwMDAwMDQwMDIyNDBFOAorOjEwRkM1MDAwODE2QzAwMDA5NTk3MjI1RjgxN0MwMDAwOTI5N0EyNDAwMgorOjEwRkM2MDAwMTk3QzAwMDAwMDAwMDA0MDE5OTAwMTAwMDAwMDAwNTRDMQorOjEwRkM3MDAwNjFCMTAxMDAxMDAwMDAwNzk2RTQwMTAwMDAwMDAwNEY5MAorOjEwRkM4MDAwOTc5NDAxMDAwMDAwMDA0QjYyQjEwMTAwOTI5NzI4NDA1OAorOjEwRkM5MDAwODEzMjAwMDAwNDAwQTI1NDc3N0QwMDAwOEU5NzAwNDA1RQorOjEwRkNBMDAwODFCMjAwMDAyNTA0MDA0MDg5OTgwMTAwMDk5OTAwNDBCNAorOjEwRkNCMDAwOEEzMDAxMDAwMDAwQTIyMTgxODQwMDAwOTg5N0EyNUY5MQorOjEwRkNDMDAwODE2QzAwMDAwMDAwQTI0MzE5N0MwMTAwMDAwMDAwNDM4OQorOjEwRkNEMDAwMTk5MDAxMDAyNTA0MDA0MDg5OTgwMTAwMDk5OTAwNDAwRAorOjEwRkNFMDAwOEEzMDAxMDAwMDAwMDA1NDYxQjEwMTAwMTAwMDAwMDdEQgorOjEwRkNGMDAwOTZFNDAxMDAwMDAwMDA0MDk2OTQwMTAwMDAwMDAwNEJEMworOjEwRkQwMDAwNjJCMTAxMDAwMDAwQTg0MDgxQjIwMDAwMDQwMEEyNTRDQQorOjEwRkQxMDAwNzc3RDAwMDA5RDk3MDA0MDgxQjIwMDAwMDQwMDIyMDgxQQorOjEwRkQyMDAwODAzMjAwMDAwNDAwMjIwMjgwMzIwMDAwQTY5N0EyNEIxRAorOjEwRkQzMDAwRkQ3RjAwMDBCNDA1MDAwMjgwQ0UwMTAwMDQwMEFBNDA0RgorOjEwRkQ0MDAwODEzMjAwMDAwMDgwMDAxOTQ0QzkwMTAwMDQwMDIyMDIzMQorOjEwRkQ1MDAwRjAzMTAwMDAwMDAwMDAwQkYwQjEwMTAwMDAwMDAwMTNDMgorOjEwRkQ2MDAwRjBCMTAxMDAwMDAwMDA0MzYxQjEwMTAwMjAwMDAwMTk2MgorOjEwRkQ3MDAwNjJERDAxMDAwMDAwQTgwOEUwQjEwMDAwQUI5NzAwNDA4MAorOjEwRkQ4MDAwODFCMjAwMDAwNDAwQTIwNTQ4NkQwMDAwQjAwMDAwQTE4RgorOjEwRkQ5MDAwODBDRTAxMDAwNDAwQTY0MDgxMzIwMDAwN0MwMDJERjBERQorOjEwRkRBMDAwODRCMDAxMDAwMjAwMDBGMDk4RjQwMTAwQjc5NzIwNENFNQorOjEwRkRCMDAwODQ2QzAwMDA4ODAwMDA0MDQzOTkwMTAwQjc5NzIwRjI0RQorOjEwRkRDMDAwODQ2QzAwMDAwMDAwMDA0MDg1QjAwMTAwOTgwMDJEMTRGNAorOjEwRkREMDAwODJCMDAxMDAwMDAwMDBGMDk4QjAwMTAwQTMwMDJEMTREMworOjEwRkRFMDAwOThEMDAxMDBCQzk3MjA0Qzg0NkMwMDAwMDAwMDAwNENBRgorOjEwRkRGMDAwODRCMDAxMDAwNDAwQTIzMDgxNkMwMDAwMDAwMDAwRjMxOAorOjEwRkUwMDAwODBFMDAxMDBDMDk3MjM0MDg0NkMwMDAwMDAwMDAwNDBBNworOjEwRkUxMDAwODRCMDAxMDBEMDAwMjAxNEUwQjEwMTAwOTgwMDI1NDIxOAorOjEwRkUyMDAwODBCMDAxMDAwMDAwNkVGMzgwRjAwMTAwMDAwMEE2NDJFNworOjEwRkUzMDAwODJDMDAwMDBDNjk3QTA0MDE2NDAwMDAwMDAwMDAwNDFBQworOjEwRkU0MDAwMTdDMDAxMDAwMDAwOUZGMDgyRUMwMDAwOTgwMEEwNDE2NAorOjEwRkU1MDAwRTBCMTAxMDAwNDAwQTI1QzFGN0MwMDAwMzcwNDAwNDBGOAorOjEwRkU2MDAwODk5ODAxMDAwOTk5MDAwNThBMzAwMTAwMDAwMDAwNDJDQworOjEwRkU3MDAwNjFCMTAxMDAwMDAwMkUxMDQ4QjEwMTAwQTgwMTAwNDA0RQorOjEwRkU4MDAwRjE5OTAxMDAwMDAwMDAwNUYwQjEwMTAwMDkwMDAwMDczMAorOjEwRkU5MDAwOTZFNDAxMDAwMDAwNjBBNzk3QzAwMTAwMDAwMDAwMTA3OAorOjEwRkVBMDAwNjJCMTAxMDAwMDAwQTg0MDgxQjIwMDAwRDE5NzAwNDA3QgorOjEwRkVCMDAwODFCMjAwMDBBODAwMkQxQzhBQjAwMTAwMDAwMDlGRjA1NAorOjEwRkVDMDAwOEFEMDAwMDAwMDAwQTI0MDhCRUMwMDAwOEEwMDIwNDA5NQorOjEwRkVEMDAwRTdCMTAxMDBCNDAwMDA0MDQ3OTkwMTAwQTQwMDJENDU5RQorOjEwRkVFMDAwRTBEMTAxMDBERjk3OUMxNzgwMzIwMDAwMDQwMDIyNEExNQorOjEwRkVGMDAwMTk3QzAwMDBCRTAwMkZBQjgzQjAwMTAwM0M5ODAwMTRCOQorOjEwRkYwMDAwODI1MDAxMDBFNDk3MDA0MDgxQjIwMDAwRTQ5NzIyRjJBMQorOjEwRkYxMDAwODIzMDAwMDA4QzAwMDA0MDQzOTkwMTAwRTQ5NzlGMUM1MAorOjEwRkYyMDAwRTA2RDAwMDBCRTAwMDA0MDQ3OTkwMTAwM0M5ODAwNDA5MQorOjEwRkYzMDAwODEzMjAxMDBBODAwMjAxQ0UwQjEwMTAwOUMwMDJEMzA5RQorOjEwRkY0MDAwODFCMDAxMDA4ODAwMkRGMDg0QjAwMTAwOTQwMDJERjJGMgorOjEwRkY1MDAwODZCMDAxMDBGODk3MjNGMDg0NkMwMDAwRUM5NzIzOTJBMAorOjEwRkY2MDAwODc2QzAwMDBDOTA0MDBBNjk0QjAwMTAwRUU5NzAwNDAyMQorOjEwRkY3MDAwODFCMjAwMDAyMDAwMDBBNjk0QjAwMTAwNjA4OTAwNEExMAorOjEwRkY4MDAwOTQ5ODAxMDBFRTk3Njg0MDgxMzIwMDAwMDQwMDIyNDBGRQorOjEwRkY5MDAwQkQ3RDAwMDAwMDAwMDA0QUIwQjEwMTAwQkYwMDJENDI0RAorOjEwRkZBMDAwQjJCMTAxMDA5MDAwMkRGMzgwRTAwMTAwRjM5N0Q0NDAzRQorOjEwRkZCMDAwODEzMjAwMDAwMDAwNzhEQTg0QzAwMTAwRkQ5NzIzNDAwMAorOjEwRkZDMDAwODQ2QzAwMDA5NDAwMjA5REUxQjEwMTAwRkQ5NzAwNDA4OQorOjEwRkZEMDAwODRCMDAwMDBCRjAwMkQ0Mzg0QzAwMTAwOTAwMDJERjNDOQorOjEwRkZFMDAwODBFMDAxMDBGRDk3MjM0MDg0NkMwMDAwOTQwMDIwOUQ3OAorOjEwRkZGMDAwRTFCMTAxMDAwMDAwMDA0MDg0QjAwMTAwMDE5OEEyRjBDRQorOjAyMDAwMDAyMTAwMEVDCis6MTAwMDAwMDAzODZDMDAwMDlDMDAyMDQyRTBCMTAxMDAwMDAwMDA1RjVECis6MTAwMDEwMDAxMzk0MDEwMDAwMDA4MDQ2MTk4MDAxMDA5QzAwMjA0MkRBCis6MTAwMDIwMDBFMEIxMDEwMDM3MDAwMDQwNDM5OTAxMDAwNDAwMDBGM0YzCis6MTAwMDMwMDA4MEY0MDEwMDBGMDAwMEYzODI4ODAxMDAwNzk4MjM0MTNCCis6MTAwMDQwMDA4MDZDMDAwMDAwMDAwMDVGMTM5NDAxMDAwMDAwODkwQzI4Cis6MTAwMDUwMDA4MEIyMDAwMDA0MDA4NjBDODAzMjAwMDBCQzAwMDA0MDJBCis6MTAwMDYwMDA0Mzk5MDEwMEEwMDBBMEYyRTRCMTAxMDAwMDAwOUY0MTBCCis6MTAwMDcwMDAyNEVDMDAwMDEzOThBNjQwODEzMjAwMDAwMDAwOUY0MjRCCis6MTAwMDgwMDAzOEVDMDAwMDEzOThBNjQwODEzMjAwMDBCNDAwMDA0MDE0Cis6MTAwMDkwMDA0Mzk5MDEwMDE1OThBM0YwM0E2QzAwMDAwNDAwQTQ0MEI1Cis6MTAwMEEwMDA4MTMyMDAwMDAwMDA4MDQwODFCMjAxMDBCNDAwMDA0MEI1Cis6MTAwMEIwMDA0Mzk5MDEwMDE5OTgyMkYwM0E2QzAwMDBCNDAwMjAxRDA5Cis6MTAwMEMwMDBFMEIxMDEwMDgwMDAyRDVGMTM5NDAxMDAxOTk4MjNGMDI2Cis6MTAwMEQwMDAzQTZDMDAwMDgwMDAyMDFERTBCMTAxMDBDMDAwMjAxMjM5Cis6MTAwMEUwMDBFMEIxMDEwMEM0MDBBMDFDRTBCMTAxMDAyNzA0MDA0MDAxCis6MTAwMEYwMDA4OTk4MDEwMDA5OTkwMDQyOEEzMDAxMDAwNDAwQTIwNTk0Cis6MTAwMTAwMDA0ODZEMDAwMDAwODAwMDAzNDRDOTAxMDAwMDAwMDA0MjY3Cis6MTAwMTEwMDBFMEIxMDEwMDEyMDAwMDQwODc5ODAxMDAyNTk4OUY0MTNFCis6MTAwMTIwMDAyNDZDMDAwMDAwMDAwMDQxOENCMDAxMDAwMDAwMDAxMkFGCis6MTAwMTMwMDA4Q0QwMDEwMDI2OTgwMDQxMjRCMDAwMDAwMDAwMDA0MDRGCis6MTAwMTQwMDA4REIwMDEwMDdGOTgwMDQwODEzMjAxMDAwMDAwMDA0NTIxCis6MTAwMTUwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAwMDAwQTg0MDE0Cis6MTAwMTYwMDA4MUIyMDAwMDI4OTgwMDQwODFCMjAwMDBCNDk0MDA0MEExCis6MTAwMTcwMDA4MTMyMDEwMDAwMDAwMDE2ODBCMjAxMDAwMDAwQTcwOEQzCis6MTAwMTgwMDA4MDMyMDEwMDMyMDQwMDQwODk5ODAxMDAwOTk5MDAwODdBCis6MTAwMTkwMDA4QTMwMDEwMDMyOThBMjQwOTU2QzAwMDBDOTk0MDA0MDVBCis6MTAwMUEwMDA4MTMyMDEwMDAwODIwMEE2MDRCMDAxMDAwMDAwMDA0MDdFCis6MTAwMUIwMDAyREIwMDEwMEEwOTgyRjQwMTFCMDAxMDAzMDA1MDA0MTgyCis6MTAwMUMwMDA4OUIwMDAwMENDMDAwMEExODBDRTAxMDAwNDAwQTY0MDUwCis6MTAwMUQwMDA4MTMyMDAwMDAwMDA5RkY4M0VFQzAwMDAwMDAwOUYxMkZBCis6MTAwMUUwMDBFMEVEMDAwMEM4MDAyMEFCRTFCMTAxMDBDQzAwQTAxRjkxCis6MTAwMUYwMDBFMEIxMDEwMDA0MDBBMjA1NDg2RDAwMDAzRjk4QTM1RjM0Cis6MTAwMjAwMDBFNzZEMDAwMDAwMDAwMDQxRTdDMTAxMDBBNjAwMDA0MENBCis6MTAwMjEwMDA0Nzk5MDEwMDUzOTgyMkYyODYzMDAwMDAwMzAwMDA0MzAyCis6MTAwMjIwMDA4NEY0MDEwMDAxMDAwMDQxODBDQzAxMDBCODAwMkQ0MjlGCis6MTAwMjMwMDA4MEQwMDEwMDAwMDA2MjQwODZDMDAxMDA0Nzk4MUY0MzQzCis6MTAwMjQwMDA4MDMyMDAwMDQ4OThBMjQwODc2QzAwMDAwMDAwNjI0MUE0Cis6MTAwMjUwMDA4N0IwMDEwMDRDOTg5RjQwODAzMjAwMDAwMDAwMDA0MEIxCis6MTAwMjYwMDA4NUIwMDEwMDAwMDAwMDQwODREMDAxMDAwMDAwMDA0MjgxCis6MTAwMjcwMDA4MEIwMDEwMDAwMDAwMEYyODhCMDAxMDAwMjAwMDA0NERDCis6MTAwMjgwMDA4NEY0MDEwMEI4MDAyRTQyODBEMDAxMDAwMDAwNjI0MERBCis6MTAwMjkwMDA4OEMwMDEwMDUyOTgxRjQ0ODAzMjAwMDA1Njk4QTI0MDQ2Cis6MTAwMkEwMDA4OTZDMDAwMDU2OTg2MjQxODlCMDAwMDAwMzAwNjI0MUU5Cis6MTAwMkIwMDA4NkU0MDEwMEI4MDAwMDQwNDU5OTAxMDAwMTAwNjI0MTU4Cis6MTAwMkMwMDA4OEU0MDEwMEE0MDAyMDQwRTVCMTAxMDBBMjAwMjA0MDI0Cis6MTAwMkQwMDBFN0IxMDEwMEJDMDAyRTQzODdGMDAxMDAwMDAwMDA0NDlDCis6MTAwMkUwMDA4NkMwMDEwMDVDOTgyMDQzODc2QzAwMDAwMDAwODA0M0JBCis6MTAwMkYwMDBFNUIxMDEwMDQwMDEwMDQzODBDRTAxMDAwMDAwQTQ0M0FECis6MTAwMzAwMDBFNDMxMDEwMDQwMDFFMjQwODc5ODAxMDAwNDAwQTIwNUE5Cis6MTAwMzEwMDA0ODZEMDAwMDA0MDAyMjBBODAzMjAwMDA4ODAwMkQ0NDRECis6MTAwMzIwMDA4MUIwMDEwMDkwMDAyREYyMkVCMDAxMDA5QzAwMkRGMDU0Cis6MTAwMzMwMDA4NkIwMDEwMDkwMDAyREYwODJCMDAxMDBCQTAwMkRGMENGCis6MTAwMzQwMDA5OEIwMDEwMDZCOThBMjEyOTg2QzAwMDBCQzAwMkRGMkNFCis6MTAwMzUwMDA5OEIwMDEwMDZCOThBMEYyOTg2QzAwMDAwMDAwMDAxN0E0Cis6MTAwMzYwMDA4MkIwMDEwMDlDMDAyMDQxRTBCMTAxMDBCNDAwMkQxMkQ4Cis6MTAwMzcwMDA4NkQwMDEwMDZFOThBMzQxRTA2RDAwMDA2Rjk4MDBGMEY4Cis6MTAwMzgwMDA4NEIwMDAwMDAwMDAwMDQxODRCMDAxMDA4MDAwMkQ0M0QzCis6MTAwMzkwMDA4NEQwMDEwMDcyOTg5RjQyODAzMjAwMDAwMDAwMDA0MDJCCis6MTAwM0EwMDA4NUIwMDEwMDc0OThBMzQyMTQ2QzAwMDA3NTk4MDAwQThGCis6MTAwM0IwMDAwQ0IwMDAwMDAwMDAwMDQyMENCMDAxMDA3Nzk4QTAxN0JDCis6MTAwM0MwMDAwQzZDMDAwMDAwMDA4MDE3MENCMDAxMDA3Qzk4MjI0MEVCCis6MTAwM0QwMDAwRDZDMDAwMDAwMDBBMDBBMENFQzAwMDAwMTAwMDBGMDExCis6MTAwM0UwMDA4MkY0MDEwMDdDOThBMDQxMEM2QzAwMDAwMDAwQTJGMDk3Cis6MTAwM0YwMDA4MDMyMDEwMDI5MDAwMDQwODk5ODAxMDAwOTk5MDA0MERECis6MTAwNDAwMDA4MTMyMDEwMDAwMDA4MDQwODFCMDAxMDBEMTk0MDA0MEExCis6MTAwNDEwMDA4MTMyMDEwMDA0MDAyMjAzODAzMjAwMDAwNDgwMDAwM0M2Cis6MTAwNDIwMDA0NEM5MDEwMDAwMDAwMDQ2RjBCMTAxMDAwMDAwMDA0MDk2Cis6MTAwNDMwMDBGMUIxMDEwMDAwMDA2MDQxODc5NDAxMDAwMDgwMDAxMENDCis6MTAwNDQwMDA0NEM5MDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDA0ODYzCis6MTAwNDUwMDBGMEIxMDEwMDAwMDAwMDQ5RjBCMTAxMDAwMDAwMDAwMzBDCis6MTAwNDYwMDBFMEIxMDEwMDAwMDAwMDQ1NjFCMTAxMDAyMDAwMDAxMDcyCis6MTAwNDcwMDA2MkREMDEwMDAwMDBBODVEMDU5MDAwMDA4Qjk4MDA0MDNGCis6MTAwNDgwMDA4MUIyMDAwMDA0MDBBMjA1NDg2RDAwMDAxMDAwMDAwQ0JECis6MTAwNDkwMDA5NkY0MDEwMDA0MDBBMjA3OTY2QzAwMDAwMDAwMkU0QkE5Cis6MTAwNEEwMDAxOTkwMDEwMDA1MDAyQTBDRTRCMTAxMDAwMDAwODAwNDRECis6MTAwNEIwMDBFNkIxMDEwMDNFMDQwMDQwODk5ODAxMDAwOTk5MDAwODU2Cis6MTAwNEMwMDA4QTMwMDEwMDk2OTg0NTQ4NjEzMTAwMDAwMDEwMDAwODBDCis6MTAwNEQwMDA2MkREMDEwMDlDOTgyODQwODczMDAwMDA5Nzk4MjI0OEYwCis6MTAwNEUwMDA3NzdEMDAwMDA0MDAyMjQwMjc2QzAwMDAwQTk3MUQ0NjFCCis6MTAwNEYwMDA4N0IwMDAwMDlGOTgyMjVGMTE3QzAwMDAwNDAwMjIxNTQ1Cis6MTAwNTAwMDA2MjMxMDAwMDlEOThBODQwODEzMjAwMDAwMDAwOUQ0MEFCCis6MTAwNTEwMDA4MUIyMDEwMDAwMDAwMDQwNDlCMTAxMDAwMDE0MkY0Q0RECis6MTAwNTIwMDA4M0IwMDEwMDAwMDAwMDQwRjFCMTAxMDBBMjk4QTI0MTk3Cis6MTAwNTMwMDA4MzUwMDAwMDAwMDA4MDQwODFCMjAxMDAwMDAwMDA0MEI0Cis6MTAwNTQwMDA0OUIxMDEwMDMwMDAwMDQwQTE5OTAxMDAwMDAwMDA0MEM1Cis6MTAwNTUwMDA5M0IwMDEwMDAwMDAwMDQwMUZCMDAxMDBGNjk4MDA0OTcwCis6MTAwNTYwMDA5NjMwMDEwMDA3MDAwMDQ5MDZFNDAxMDAwMDM5MDAwMzRECis6MTAwNTcwMDAwNkM4MDEwMDAwMDAwMDQwMDVCMDAxMDAyMDAwMDBEMEM2Cis6MTAwNTgwMDBBMEM5MDEwMDAwMDAwMDQxOTNDMDAxMDBBOTk4QTA1NDM3Cis6MTAwNTkwMDA5MzZDMDAwMDAwMDAyRTA1OTdCMDAxMDAwMDgwMDA0MDIxCis6MTAwNUEwMDA0OTk5MDEwMDAwMDAwMDQwRTFCMTAxMDAwMDAyMDBBMkYxCis6MTAwNUIwMDA0NEM5MDEwMEIyOThBMjQxOTc1MDAwMDAwMDAwMDAyMEY5Cis6MTAwNUMwMDA0OUIzMDEwMEZDOTgwMDQwNDkzMTAxMDAwODk1MDA0MDAyCis6MTAwNUQwMDA4MTMyMDEwMDAwQjUyRTA4OTdCMDAxMDAwMDAwMDA0MEY0Cis6MTAwNUUwMDBGMUIxMDEwMEI5OThBMjQxOTc1MDAwMDAxODAwMDA0MEY1Cis6MTAwNUYwMDA5Nzk4MDEwMDAwOTcyRTQwODFCMjAxMDAwMDAwMDA0MDUyCis6MTAwNjAwMDBGMUIxMDEwMEJEOThBMjQxOTc1MDAwMDAwMDAwMDA0MEU4Cis6MTAwNjEwMDA0OUIxMDEwMDQwMTgyRTA1OTdCMDAxMDAwMDAwMDA0MENDCis6MTAwNjIwMDBGMUIxMDEwMEMxOThBMjQxOTc1MDAwMDA1Nzk1MjA0MEI4Cis6MTAwNjMwMDBFN0IxMDEwMDMwOTQwMDQwNDU5OTAxMDA2NDAwMDA0MDlBCis6MTAwNjQwMDBFNTk5MDEwMDU2OTUyMDQwRTdCMTAxMDBCODk0MjA0MTlBCis6MTAwNjUwMDBFNUIxMDEwMEJBOTQyMDQxRTVCMTAxMDA5ODk0MDA0MDUxCis6MTAwNjYwMDA0NTk5MDEwMDAyMDAwMDQwOTc5ODAxMDAwMDAwMDA0MEY5Cis6MTAwNjcwMDBGMUIxMDEwMENCOThBMjQxOTc1MDAwMDAwMDAwMDA0MDZBCis6MTAwNjgwMDA5N0IwMDEwMDAwMDAwMDQwNkZCMTAxMDAwMDAwMDA0Qjc2Cis6MTAwNjkwMDA2OEIxMDEwMENGOTg4NTQxOTc0MDAwMDA4MDA0MDA0MDc4Cis6MTAwNkEwMDA4MTMyMDEwMDAwMDAwMDQwMzlCMzAxMDAwMDAwMDA0MDI5Cis6MTAwNkIwMDAzN0IzMDEwMDAwMDAwMDQwMzVCMzAxMDAwMDAwMDA0MEU2Cis6MTAwNkMwMDAzM0IzMDEwMDAwMDAwMDQwNDFCMzAxMDAwMDAwMDA0MENFCis6MTAwNkQwMDAzRkIzMDEwMEVFMDUwMDQwMjU5QjAxMDA0MjAwMDA0MEIxCis6MTAwNkUwMDA0QjlCMDEwMDAwMDAwMDQwMkZCMzAxMDAwMDAwMDA0MEMwCis6MTAwNkYwMDAyREIzMDEwMDAwMDAwMDQwNDdCMzAxMDAwMDAwMDA0MDlFCis6MTAwNzAwMDA0M0IzMDEwMDYwMDAwMDQwMkI5QjAxMDAwMDAwMDA1NDM3Cis6MTAwNzEwMDBFRjkzMDEwMDAwMDAwMDU1RjE5MzAxMDBGRkZGMDBBNUQ5Cis6MTAwNzIwMDAzQzhCMDEwMDAwMDAwMDJDNUJCMzAxMDAwMDAwMDAyQzlBCis6MTAwNzMwMDA0NUIzMDEwMDAwMDAwMDQwNTlCMzAxMDAwMDAwMDA0MDMzCis6MTAwNzQwMDA1N0IzMDEwMDAwMDAwMDQwMjdCMzAxMDAwMDAwMDA0MDQzCis6MTAwNzUwMDA1M0IzMDEwMEVCOThBMjUwRkQ3RjAwMDBFQjk4QTI1MTJCCis6MTAwNzYwMDBGRDdGMDAwMEVDOTgwMDQwMURCMzAwMDA1MDQ2MDA0MEEzCis6MTAwNzcwMDAxRDlCMDEwMDAwQzAwMEE2ODhCMzAxMDBGRjNGMDBBNjNBCis6MTAwNzgwMDAzQUIzMDEwMDAwQzAwMDlEM0I5QjAxMDBCNDA1MDA0MDRFCis6MTAwNzkwMDAyMzlCMDEwMDAwMDAwMDQwNERCMzAxMDAwODBBMDBBNkExCis6MTAwN0EwMDAxNEIzMDEwMDAxMDEwMDhBMTU5QjAxMDAwMDAwMDAyMDI0Cis6MTAwN0IwMDA4N0IzMDEwMDAwODAwMEE2NTZCMTAxMDAwMDAwODA1RUYyCis6MTAwN0MwMDA1N0I1MDEwMDE4MDAwMDRCMjBFNDAxMDAwNjAwMDA0QjYzCis6MTAwN0QwMDA5NkU0MDEwMDAwNDMwMDRCOTZDODAxMDAxODAwMDAxMDg5Cis6MTAwN0UwMDAyMERDMDEwMDAwMDAwMDRCMjA5NDAxMDAwMDAwODA1NzM1Cis6MTAwN0YwMDAyMTkwMDEwMDAwOTkyRTBBOTdCMDAxMDAwMDAwMDA0MEVFCis6MTAwODAwMDBGMUIxMDEwMEZEOThBMjQxOTc1MDAwMDAwMDAzMDA0MEEzCis6MTAwODEwMDA5Nzk4MDEwMDAwQTkwMDQwNDU5OTAxMDAwMDAwMDA0MEEwCis6MTAwODIwMDBGMUIxMDEwMDAxOTlBMjQxOTc1MDAwMDAzMDAwMDA0MDUxCis6MTAwODMwMDA5Nzk4MDEwMDAwMDAwMDU1NjFCMTAxMDAwMDAwMDA0QkQ1Cis6MTAwODQwMDA2MkIxMDEwMDA1OTlBODQwODEzMjAwMDAwNTk5QTI0MURBCis6MTAwODUwMDA5NzUwMDAwMDAwMDA4MDQwODFCMjAxMDAxMDAwMDA0RTVGCis6MTAwODYwMDA5OEU0MDEwMDAwMDAwMDA3OTg5NDAxMDAwMDAwMDA0Mzk0Cis6MTAwODcwMDA5OUUwMDEwMDAwMDAwMDgwOTg5NDAxMDAwMDAwMDA0ODA5Cis6MTAwODgwMDA5OUUwMDEwMDAwMDAwMDRDODg5NDAxMDAwRjk5NkE0MDMzCis6MTAwODkwMDA4MTMyMDAwMDEyOTkyMjRGNzc3RDAwMDBGMDA0MDA0MDYxCis6MTAwOEEwMDA4MTMyMDEwMDAwMDAwMDRGNjFCMTAxMDAwMDAwMDA0NEVFCis6MTAwOEIwMDA2MkIxMDEwMDEzOTlBODQwODEzMjAwMDAxQTk5MjI0QUJFCis6MTAwOEMwMDA4OTdDMDAwMDE4OTkyMjRGNzc3RDAwMDBGMDA0MDA0MEQ5Cis6MTAwOEQwMDA4MTMyMDEwMDAwMDAwMDQ1NjJCMTAxMDAxODk5QTg0MDcyCis6MTAwOEUwMDA4MTMyMDAwMDAwMDBGQTQwODFCMjAxMDAwMDAwODA0MDI3Cis6MTAwOEYwMDA4MUIyMDEwMDA0MDBBMjVBMUY3QzAwMDAxMDAwMDAwRjBBCis6MTAwOTAwMDA5OEY0MDEwMDA0MDBBMjVGOTkwNDAwMDAwMDAwODA0MEY4Cis6MTAwOTEwMDA4MUIyMDEwMDAwMDA4MDQwODFCMjAxMDAwNDAwMDA0MDZCCis6MTAwOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAwOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAwOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAwOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAwOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAwOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAwOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAwOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAwOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAwOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAwOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAwOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAwOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAwOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAwQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAwQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAwQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAwQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAwQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAwQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAwQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAwQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAwQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAwQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAwQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAwQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAwQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAwQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAwQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAwQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAwQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAwQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAwQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAwQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAwQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAwQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAwQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAwQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAwQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAwQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAwQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAwQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAwQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAwQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAwQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAwQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAwQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAwQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAwQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAwQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAwQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAwQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAwQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAwQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAwQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAwQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAwQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAwQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAwQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAwQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAwQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAwQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAwRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTAwRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAwRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAwRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAwRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAwRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAwRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAwRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAwRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTAwRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTAwREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAwREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTAwREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTAwREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTAwREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTAwREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTAwRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAwRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAwRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAwRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTAwRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTAwRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTAwRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTAwRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTAwRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTAwRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAwRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTAwRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTAwRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTAwRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTAwRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAwRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAwRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAwRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAwRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAwRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAwRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAwRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAwRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAwRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAwRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAwRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAwRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAwRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAwRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAwRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAwRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAwRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAxMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAxMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAxMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAxMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAxMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAxMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAxMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAxMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAxMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAxMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAxMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAxMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAxMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAxMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAxMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAxMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAxMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAxMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAxMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAxMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAxMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAxMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAxMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAxMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAxMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAxMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAxMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAxMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAxMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAxMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAxMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAxMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAxMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAxMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAxMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAxMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAxMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAxMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAxMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAxMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAxMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAxMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAxMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAxMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAxMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAxMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAxMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAxMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAxMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAxMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAxMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAxMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAxMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAxMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAxMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAxMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAxMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAxMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAxM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAxM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAxM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAxM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAxM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAxM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAxNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAxNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAxNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAxNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAxNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAxNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAxNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAxNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAxNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAxNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAxNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAxNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAxNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAxNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAxNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAxNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAxNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAxNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAxNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAxNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAxNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAxNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAxNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAxNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAxNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAxNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAxNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAxNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAxNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAxNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAxNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAxNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAxNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAxNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAxNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAxNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAxNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAxNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAxNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAxNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAxNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAxNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAxNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAxNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAxNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAxNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAxNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAxNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAxNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAxNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAxNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAxNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAxNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAxNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAxNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAxNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAxNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAxNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAxN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAxN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAxN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAxN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAxN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAxN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAxODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAxODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAxODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAxODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAxODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAxODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAxODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAxODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAxODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAxODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAxOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAxOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAxOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAxOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAxOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAxOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAxOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAxOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAxOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAxOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAxOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAxOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAxOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAxOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAxOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAxOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAxOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAxOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAxOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAxOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAxOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAxOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAxQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAxQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAxQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAxQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAxQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAxQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAxQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAxQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAxQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAxQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAxQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAxQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAxQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAxQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAxQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAxQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAxQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAxQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAxQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAxQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAxQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAxQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAxQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAxQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAxQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAxQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAxQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAxQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAxQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAxQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAxQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAxQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAxQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAxQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAxQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAxQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAxQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAxQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAxQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAxQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAxQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAxQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAxQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAxQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAxQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAxQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAxQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAxQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAxRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAxRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAxRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAxRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAxRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAxRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAxRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAxRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTAxRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTAxRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAxREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTAxREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTAxREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTAxREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTAxREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTAxREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTAxRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAxRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAxRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTAxRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTAxRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTAxRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTAxRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTAxRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTAxRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAxRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTAxRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTAxRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTAxRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTAxRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAxRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAxRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAxRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAxRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAxRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAxRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAxRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAxRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAxRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAxRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAxRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAxRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAxRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAxRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAxRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAxRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAxRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAxRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAyMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAyMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAyMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAyMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAyMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAyMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAyMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAyMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAyMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAyMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAyMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAyMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAyMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAyMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAyMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAyMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAyMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAyMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAyMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAyMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAyMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAyMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAyMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAyMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAyMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAyMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAyMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAyMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAyMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAyMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAyMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAyMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAyMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAyMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAyMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAyMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAyMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAyMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAyMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAyMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAyMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAyMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAyMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAyMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAyMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAyMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAyMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAyMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAyMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAyMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAyMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAyMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAyMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAyMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAyMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAyMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAyMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAyMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAyM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAyM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAyM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAyM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAyM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAyM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAyNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAyNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAyNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAyNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAyNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAyNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAyNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAyNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAyNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAyNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAyNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAyNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAyNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAyNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAyNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAyNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAyNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAyNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAyNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAyNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAyNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAyNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAyNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAyNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAyNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAyNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAyNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAyNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAyNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAyNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAyNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAyNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAyNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAyNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAyNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAyNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAyNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAyNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAyNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAyNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAyNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAyNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAyNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAyNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAyNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAyNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAyNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAyNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAyNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAyNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAyNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAyNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAyNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAyNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAyNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAyNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAyNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAyNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAyN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAyN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAyN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAyN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAyN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAyN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAyODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAyODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAyODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAyODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAyODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAyODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAyODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAyODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAyODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAyODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAyOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAyOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAyOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAyOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAyOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAyOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAyOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAyOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAyOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAyOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAyOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAyOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAyOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAyOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAyOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAyOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAyOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAyOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAyOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAyOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAyOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAyOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAyQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAyQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAyQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAyQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAyQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAyQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAyQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAyQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAyQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAyQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAyQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAyQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAyQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAyQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAyQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAyQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAyQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAyQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAyQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAyQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAyQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAyQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAyQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAyQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAyQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAyQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAyQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAyQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAyQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAyQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAyQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAyQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAyQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAyQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAyQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAyQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAyQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAyQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAyQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAyQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAyQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAyQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAyQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAyQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAyQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAyQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAyQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAyQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAyRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAyRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAyRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAyRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAyRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAyRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAyRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTAyRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTAyRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTAyRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTAyREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTAyREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTAyREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTAyREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTAyREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTAyREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAyRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAyRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTAyRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTAyRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTAyRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTAyRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTAyRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTAyRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAyRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTAyRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTAyRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTAyRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTAyRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAyRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAyRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAyRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAyRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTAyRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAyRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAyRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAyRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAyRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAyRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAyRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAyRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAyRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAyRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAyRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAyRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAyRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAyRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAyRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAzMDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTAzMDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MTAzMDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIyCis6MTAzMDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEyCis6MTAzMDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkyCis6MTAzMDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgyCis6MTAzMDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcyCis6MTAzMDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYyCis6MTAzMDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUyCis6MTAzMDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQyCis6MTAzMEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMyCis6MTAzMEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIyCis6MTAzMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAzMEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAzMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAzMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUyCis6MTAzMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQxCis6MTAzMTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMxCis6MTAzMTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIxCis6MTAzMTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEExCis6MTAzMTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkxCis6MTAzMTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgxCis6MTAzMTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcxCis6MTAzMTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYxCis6MTAzMTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUxCis6MTAzMTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAzMUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMxCis6MTAzMUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIxCis6MTAzMUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDExCis6MTAzMUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAxCis6MTAzMUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTAzMUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAzMjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQwCis6MTAzMjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMwCis6MTAzMjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIwCis6MTAzMjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTAzMjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkwCis6MTAzMjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgwCis6MTAzMjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDcwCis6MTAzMjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYwCis6MTAzMjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUwCis6MTAzMjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAzMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAzMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAzMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEwCis6MTAzMkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAwCis6MTAzMkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYwCis6MTAzMkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUwCis6MTAzMzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTAzMzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTAzMzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTAzMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTAzMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTAzMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTAzMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTAzMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTAzMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTAzMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTAzM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTAzM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTAzM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTAzM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAzM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAzM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTAzNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTAzNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTAzNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTAzNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTAzNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAzNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTAzNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAzNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAzNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAzNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTAzNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTAzNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTAzNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTAzNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTAzNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAzNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAzNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTAzNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTAzNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTAzNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTAzNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTAzNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTAzNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTAzNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTAzNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTAzNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAzNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAzNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTAzNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTAzNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAzNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAzNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAzNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAzNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTAzNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTAzNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTAzNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTAzNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAzNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAzNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAzNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTAzNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTAzNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAzNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTAzNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTAzNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTAzNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTAzNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAzNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTAzNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTAzNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAzNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTAzNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTAzNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAzNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAzNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAzNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAzNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAzN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAzN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTAzN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTAzN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAzN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAzN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTAzODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAzODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAzODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTAzODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTAzODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAzODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTAzODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTAzODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTAzODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTAzODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTAzOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTAzOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTAzOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTAzOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTAzOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAzOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAzOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTAzOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTAzOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTAzOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTAzOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTAzOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTAzOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAzOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAzOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTAzOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTAzOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAzOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAzOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTAzOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTAzOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAzOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTAzQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTAzQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAzQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAzQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTAzQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTAzQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTAzQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTAzQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTAzQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTAzQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTAzQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTAzQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTAzQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTAzQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAzQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTAzQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAzQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTAzQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTAzQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTAzQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTAzQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTAzQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTAzQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTAzQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTAzQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTAzQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTAzQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTAzQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTAzQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTAzQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAzQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTAzQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTAzQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTAzQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTAzQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTAzQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTAzQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTAzQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTAzQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTAzQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTAzQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTAzQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTAzQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTAzQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTAzQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAzQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAzQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAzQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTAzRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTAzRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTAzRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTAzRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTAzRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTAzRDUwMDA4MUIyMDAwMEFFOUYwMDg4OUFCMDAwMDBBRTlGMDA4ODNDCis6MTAzRDYwMDA5QUIwMDAwMEFFOUYwMDg4OUFCMDAwMDBBRTlGMDA4ODE1Cis6MTAzRDcwMDA5QUIwMDAwMEFFOUYwMDg4OUFCMDAwMDAwMDAwMDA4ODUyCis6MTAzRDgwMDA5QUIwMDEwMEFFOUY0MTQwODEzMjAwMDBCMjlGMjI0MEI0Cis6MTAzRDkwMDA3QjZGMDAwMDAwMDAxOTQwODFCMjAxMDBBRTlGMDA0MDFGCis6MTAzREEwMDA4MUIyMDAwMDAwMDAxOTQxN0JCMzAxMDAwMDAwMDBBNEIzCis6MTAzREIwMDBDNEIzMDEwMDAwMDAwMEExQzZCMzAxMDAwMDAwMkZBMjlGCis6MTAzREMwMDBDOEIzMDEwMDA4MTQwMDQwNDk5OTAxMDBBODlGMDA0REE0Cis6MTAzREQwMDA5QUNDMDEwMEJCOUYyNjQwODEzMjAwMDAwMDAwMDA0Q0JECis6MTAzREUwMDA0OUMxMDEwMEI5OUZBMjQxOUI1MDAwMDBCRjlGODA4MDQ0Cis6MTAzREYwMDA4MDMyMDAwMDAwMDA1MjQ5RkQ5MzAxMDAwMDAwMDA0QTlCCis6MTAzRTAwMDBGRDkzMDEwMEMyOUYwMDQyQ0Q5MzAwMDAwMDAwNTE0QTgzCis6MTAzRTEwMDBGRDkzMDEwMDAwMDAwMDQ5RkQ5MzAxMDBDMjlGMDA0MzkzCis6MTAzRTIwMDBDQjkzMDAwMDAwMDA1MDQwODFCMjAxMDBEMjlGMDA0MEJGCis6MTAzRTMwMDAxOTk5MDEwMDAwMDAwMEYwOUFCMDAxMDAwMDAwMDA0NDUwCis6MTAzRTQwMDA0OUQxMDEwMDAwMDA0MEYwODBCMjAxMDAwMDAwNDE0RDY2Cis6MTAzRTUwMDA4MEIyMDEwMENBOUYwMDQwMTk5OTAxMDAwMDAwNEM0MDQ3Cis6MTAzRTYwMDA4MUIyMDEwMDAwMDAwMDQ0NDlEMTAxMDAwMDAwMDBGMENGCis6MTAzRTcwMDA5QUIwMDEwMDAwMDAwMDREMTBCMTAwMDAwMDAwMDBFMjA3Cis6MTAzRTgwMDA0OUIxMDEwMDAwMDAwMEUzNDNCMTAxMDAwMDAwMDBFNDdCCis6MTAzRTkwMDA0NUIxMDEwMDAwMDAwMDQwN0JCMzAxMDAwMDAwNDg0RjI1Cis6MTAzRUEwMDA0MEIxMDEwMEQyOUYwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTAzRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAzRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAzRUQwMDA4MUIyMDAwMDA0MDAwMENCODFDODAxMDAyMjgzMDA0MEIxCis6MTAzRUUwMDBGMjkzMDAwMDU1ODIwMDQwODFCMjAwMDA0MDA1MDA0MDdFCis6MTAzRUYwMDA4MUIyMDAwMDE4MDYwMDQwODFCMjAwMDAyMjgzMDA0MDE5Cis6MTAzRjAwMDA4MUIyMDAwMEM2ODIwMDQwODFCMjAwMDA0MzgxMDA0MEJGCis6MTAzRjEwMDA4MUIyMDAwMDQxODEwMDQwODFCMjAwMDBCODgwMDA0MEMxCis6MTAzRjIwMDA4MUIyMDAwMEYwODcwMDQwODFCMjAwMDAyMzgzMDA0MDhFCis6MTAzRjMwMDA4MUIyMDAwMDI3ODMwMDQwODFCMjAwMDBCRjk0MDA0MDlFCis6MTAzRjQwMDA4MUIyMDAwMDk0OTgwMDQwODFCMjAwMDA3Rjk0MDA0MDRDCis6MTAzRjUwMDA4MUIyMDAwMDdGOTgwMDQwODFCMjAwMDA4RDk1MDA0MDQyCis6MTAzRjYwMDA4MUIyMDAwMDE2OTUwMDQwODFCMjAwMDAxMDk1MDA0MDFCCis6MTAzRjcwMDA4MUIyMDAwMEIxODIwMDQwODFCMjAwMDAyMDk5MDA0MDZGCis6MTAzRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAzRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAzRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAzRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAzRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTAzRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTAzRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTAzRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTA0MDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMyCis6MDQ0MDEwMDA4MUIyMDAwMDc5Cis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvc2xpY29zcy9vYXNpc2Rvd25sb2FkLnN5cy5paGV4IGIvZmlybXdhcmUvc2xpY29zcy9vYXNpc2Rvd25sb2FkLnN5cy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMDI2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9zbGljb3NzL29hc2lzZG93bmxvYWQuc3lzLmloZXgKQEAgLTAsMCArMSw1MTI0IEBACis6MTAwMDAwMDAwMjAwMDAwMDAwNDAwMDAwMDAwMDAxMDAwMDAwMDAwMEFECis6MTAwMDEwMDAwMDgwMDAwMDE1MDAwMDQwODFCMjAwMDAxQjAwMDA0MDdECis6MTAwMDIwMDA4MUIyMDAwMDIxMDAwMDQwODFCMjAwMDAwMzAwMDA0MEM2Cis6MTAwMDMwMDA4MUIyMDAwMDAwMDAwMEE4OThCMDAxMDAwNDgwQTI0MDM2Cis6MTAwMDQwMDBGRDdGMDAwMDA5MDBBMjQ5REQ3RDAwMDAwMDAwMDA0QzlBCis6MTAwMDUwMDA4MEIyMDEwMDA3MDAwMDQwRDFCMTAwMDAwMDAwMDA0QzU4Cis6MTAwMDYwMDA4MEIyMDEwMDA5MDBBMjQwNzU3RDAwMDA2MDAwMDA0MEUwCis6MTAwMDcwMDA2MTk5MDEwMDBCMDBBOEIxN0UzMTAwMDAwOTAwMDA0MDI5Cis6MTAwMDgwMDA4MUIyMDAwMDAwODA4Rjk4MTgzMTAwMDAxMDAwMDA5OEE1Cis6MTAwMDkwMDA4MEU0MDEwMDAwMDA0MTk4ODA5NDAxMDAwMDAwMDA0MENECis6MTAwMEEwMDA4MUIyMDEwMDEwMDAwMDk4ODBFNDAxMDAwRTAwNDA5ODI5Cis6MTAwMEIwMDA4MDk0MDAwMDExMDAwMDQwODFCMjAwMDAwMDAwMDA0MDY4Cis6MTAwMEMwMDBBNTk5MDEwMDE5MDAyOTQwODEzMjAwMDAxOTAwMTRCQ0QzCis6MTAwMEQwMDA4MDMyMDAwMDBFMDA5M0JDODAzMjAwMDAwMDAwNTA0MENGCis6MTAwMEUwMDA4MUIyMDEwMDAwODAwMDQwODFCMjAwMDAxMDAwMDA0MDk5Cis6MTAwMEYwMDBBNTk5MDEwMDFGMDAyOTQwODEzMjAwMDAxRjAwMTRCQzk3Cis6MTAwMTAwMDA4MDMyMDAwMDEyMDA5M0JDODAzMjAwMDAwMDAwNTA0MDlBCis6MTAwMTEwMDA4MUIyMDEwMDAxODAwMDQwODFCMjAwMDAyMDAwMDA0MDU3Cis6MTAwMTIwMDBBNTk5MDEwMDI1MDAyOTQwODEzMjAwMDAyNTAwMTRCQzVBCis6MTAwMTMwMDA4MDMyMDAwMDE0MDA5M0JDODAzMjAwMDAwMDAwMDA0OUFGCis6MTAwMTQwMDBERDgxMDEwMDEyMDEwMDQwODEzMjAxMDAzMzAxMDA0MEQ1Cis6MTAwMTUwMDA4MTMyMDEwMDJBMDAxNEJDODAzMjAwMDBGRTAwMTNCQzcyCis6MTAwMTYwMDA4MDMyMDAwMDU0OTUwMDQwNDU5OTAxMDBGRkZGMDA0MDk3Cis6MTAwMTcwMDBFNTk5MDEwMDAwMDAyRjQwNDlCMTAxMDAwMDAwMDA0MDU2Cis6MTAwMTgwMDBFMUIxMDEwMDAwMDAwMDQwRkRCMzAxMDAwMDAwMDA0MEFCCis6MTAwMTkwMDBGRkIzMDEwMDMzMDAxOEVFODAzMjAwMDAwMDAwMDA1MDcxCis6MTAwMUEwMDA4OUIwMDEwMDMyMDBBMjQxODk1MDAwMDA5OTAwMDA0MDRFCis6MTAwMUIwMDA4MTMyMDEwMDMwOTQwMDQwNDM5OTAxMDAwMDAwMDBGOEIyCis6MTAwMUMwMDAyMEIxMDEwMDAwMDAwMEZBRTBCMzAxMDAzOTAwOThFRTEwCis6MTAwMUQwMDA4MDMyMDAwMDAwMDAwMEZCODBCMDAxMDAzQjAwODBGMzkzCis6MTAwMUUwMDBERTMzMDAwMDAwMDAwMDQ3RkQ5MzAxMDAzRTAwODNGMzcyCis6MTAwMUYwMDA4MDMyMDAwMEYwMDAwMEYzODA4ODAxMDAwMTgwMDA0MEEwCis6MTAwMjAwMDAyRUREMDEwMDAwOTQwMDQwNDM5OTAxMDAwMDAwMDA0NkVCCis6MTAwMjEwMDA0M0MxMDEwMDAwMDAwMEZBMjRCMTAxMDA3QzAwMThFRTg3Cis6MTAwMjIwMDA4MDMyMDAwMDQ1MDA5NUU4ODAzMjAwMDBGRkZGMDBFOEMyCis6MTAwMjMwMDA4MDg4MDEwMDdDMDAyNjQwODEzMjAwMDAwMDAwMDA0MEUwCis6MTAwMjQwMDBENTk5MDEwMDAwMDAwMEYyRUNCMzAxMDAwMDAwMDBGOEI1Cis6MTAwMjUwMDBENkIxMDEwMDA4MDAwMDQwRDU5OTAxMDAwMDAwMDBGMDZGCis6MTAwMjYwMDBENkIxMDEwMEZGMDAwMEY4RUU4QjAxMDAwODAxMDA0MDRDCis6MTAwMjcwMDBENTk5MDEwMEZGMDAwMEYwODA4QzAxMDAwMDAwMDBGNzFDCis6MTAwMjgwMDA4MTk0MDEwMDAwMDAwMDQwRDZCMTAxMDBGRjAwMDBGODk5Cis6MTAwMjkwMDA4MDg4MDEwMDNDMDAwMDQwRDU5OTAxMDBGRjAwMDBGMDdCCis6MTAwMkEwMDBENjhEMDEwMEZGRkYwMEYwRjBEQjAxMDAwMDAwMDA0OEU4Cis6MTAwMkIwMDA4MUUwMDEwMDAwMDAwMEY4ODE5NDAxMDAzQzAxMDA0MDUxCis6MTAwMkMwMDBENTk5MDEwMDAwMDAwMDQwRDZCMTAxMDBGRjAwMDBGODAwCis6MTAwMkQwMDA4MDg4MDEwMDAwMDAwMDQ4ODFFMDAxMDAwMDAwMDBGODczCis6MTAwMkUwMDA4MTk0MDEwMDNDMDIwMDQwRDU5OTAxMDAwMDAwMDA0MENCCis6MTAwMkYwMDBENkIxMDEwMDJDMDAwMDQwRDU5OTAxMDAwMDAwMDBGOEEzCis6MTAwMzAwMDBENkIxMDEwMDFFMDAwMEYwODJGNDAxMDBGRjNGMDBGOEFBCis6MTAwMzEwMDA4MEQ4MDEwMDY0MDAyNjQwODEzMjAwMDAwMDAwMDA0MUM2Cis6MTAwMzIwMDA4MUQwMDEwMEZGRkYwMDQwODBEODAxMDAwMDAwMDA0MUEzCis6MTAwMzMwMDA4MDk0MDEwMDAwMDAwMDQwRDhCMTAxMDA2ODAwMjJGQTVBCis6MTAwMzQwMDA4MDMwMDAwMDAwMDAwMDRDODFFMDAxMDAwMTAwMDA0MDBFCis6MTAwMzUwMDA4MENDMDEwMDAwMDAwMDQwREVCMTAxMDAwMDAxMDA0MDNGCis6MTAwMzYwMDBENTk5MDEwMDEwMDAwMEZBODBFNDAxMDAwMDAwMDBGNkI5Cis6MTAwMzcwMDA4MTk0MDEwMDAwMDAwMDQwRDZCMTAxMDAwMDAyMDA0MDVECis6MTAwMzgwMDBENTk5MDEwMDEwMDAwMEZBODBFNDAxMDAwMDAwMDBGNjk5Cis6MTAwMzkwMDA4MTk0MDEwMDAwMDAwMDQwRDZCMTAxMDAwNjAwMDA0MDM5Cis6MTAwM0EwMDBENTk5MDEwMDEwMDAwMEZCRDZFNTAxMDAwNzAwMDA0MEQwCis6MTAwM0IwMDBENTk5MDEwMDE4MDAwMEZCRDZFNTAxMDA0ODAwMDA0MDc3Cis6MTAwM0MwMDBENTk5MDEwMDEwMDAwMEZBRDZFNTAxMDA1MDAwMDA0MDY4Cis6MTAwM0QwMDBENTk5MDEwMDEwMDAwMEZCRDZFNTAxMDAwMzAwMDBGQkU5Cis6MTAwM0UwMDA3QTg5MDEwMDAwMDAwMEYwRENCMTAxMDA3QzAwMDA0Q0MzCis6MTAwM0YwMDBERDkxMDAwMDdDMDA5NUU4ODQzMDAwMDAwMDAwMkZFOUNBCis6MTAwNDAwMDBGQUIzMDEwMDAwMDAwMDQwRDFCMTAxMDBGRjAwMDA0MjNBCis6MTAwNDEwMDA4MDg4MDEwMDM0MDAwMDQwODBDRTAxMDA3QzAwQTY0MEFFCis6MTAwNDIwMDA4MTMyMDAwMDg1MDAwMDQwODEzMjAxMDAwMjgwMjI0MEJDCis6MTAwNDMwMDA4MDMyMDAwMDdDMDAwMDQwODFCMjAwMDAwMDAwMDA0RkNDCis6MTAwNDQwMDA4MUIwMDEwMDhFMDAwOUY5ODEzMjAwMDA4QzAwMDhGOUFBCis6MTAwNDUwMDA4MTMyMDAwMDk4MDAxRkZERjkzMzAwMDA4QjAwOUVGREUzCis6MTAwNDYwMDA4MTMyMDAwMDAwMDAwMDRBRjM5MzAxMDAwMDAwODA0ODQwCis6MTAwNDcwMDBGMzkzMDEwMDAwMDAwMEZERjdCMzAxMDAwMDAwODA0OTg0Cis6MTAwNDgwMDBGMzkzMDEwMDAwMDAwMEZDMTlCMTAxMDA5MzAwMEFGOTg4Cis6MTAwNDkwMDA4MTMyMDAwMDAwMDA0MEZCODFCMjAxMDAwMDAwNDFGREZDCis6MTAwNEEwMDA4MUIyMDEwMDAwMDc4MEY5RjM4RjAxMDAwMDA3NDJGOUQzCis6MTAwNEIwMDBGMzhGMDEwMDk3MDBBMkZGRjc2RjAwMDAwMDAwNDM0MDk4Cis6MTAwNEMwMDA4MUIyMDEwMDAwMDBBMkZGRkJFRjAwMDAwMDAwODBGQ0YxCis6MTAwNEQwMDBFMUIxMDEwMDAwMDA4MDQwODFCMDAxMDAwMDk0MDA0MEMzCis6MTAwNEUwMDA0Nzk5MDEwMEJCMDAwMDQwODEzMjAxMDAwMDAwQTI0Njk0Cis6MTAwNEYwMDBGRDdGMDEwMDAwOTQwMDQwNDc5OTAxMDBDRTAwMDA0MEJDCis6MTAwNTAwMDA4MTMyMDEwMDAwMDBBMjQ0RkQ3RjAxMDAwMDk0MDA0MDAwCis6MTAwNTEwMDA0NTk5MDEwMDAwMDAwMDQwRjFCMTAxMDBGRjdGMDA0MDVCCis6MTAwNTIwMDBGNTk5MDEwMEZGN0YwMDQwRjU5OTAxMDA5QTEzMDA0MDAyCis6MTAwNTMwMDBGNTk5MDEwMDA3MDAwMDQwRjU5OTAxMDAwMTAwMDA0MDE1Cis6MTAwNTQwMDBGNTk5MDEwMDAwMDIwMDQwRjU5OTAxMDAwMjAwMDA0MDA5Cis6MTAwNTUwMDBGNTk5MDEwMDAwMDIwMDQwRjU5OTAxMDAwMzAxMDA0MEY3Cis6MTAwNTYwMDBGNTk5MDEwMDAwMDAwMDQwRjU5OTAxMDA5QTEzMDA0MDQwCis6MTAwNTcwMDBGNTk5MDEwMDBCMDAwMDQwRjU5OTAxMDA4MDAwMDA0MDUyCis6MTAwNTgwMDBGNTk5MDEwMDAwMDAwMDQwRjU5OTAxMDAwMDAwMDA0MENECis6MTAwNTkwMDBGNTk5MDEwMDA3MDAwMDQwRjU5OTAxMDAwODAwMDA0MEFFCis6MTAwNUEwMDBGNTk5MDEwMEIwMDIwMDQwRjU5OTAxMDAwMDAwMDA0MEZCCis6MTAwNUIwMDBGNTk5MDEwMDAwMDAwMDQwRjU5OTAxMDAwMjI5MDA0MDcyCis6MTAwNUMwMDBGNTk5MDEwMDAwMDAwMDQwRjU5OTAxMDAwMDY3MDA0MDI2Cis6MTAwNUQwMDBGNTk5MDEwMDAwMDAwMDQwRjU5OTAxMDA4MDAwMDA0MEZECis6MTAwNUUwMDBGNTk5MDEwMDAwMDA4MDQwRjU5OTAxMDAwMDAwMDA0NUU4Cis6MTAwNUYwMDBGRDgzMDEwMDAwMDAwMDQ2RkQ4MzAxMDBGRjdGMDA0MEY1Cis6MTAwNjAwMDAyNTk5MDEwMEM0MDAwMDQwODEzMjAxMDAwMDAwQTI0NDhECis6MTAwNjEwMDA4MEIyMDAwMDAwMDAwMDQ1RkQ5MzAxMDBFMjAwMDA0MEIwCis6MTAwNjIwMDA4MzMwMDEwMDAwMDBBMjQ1ODAzMjAxMDAwMDAwODA0NkI2Cis6MTAwNjMwMDBGRDkzMDEwMDAwMTAwMDQwODM5ODAxMDBERDAwMDA0MEEwCis6MTAwNjQwMDAyQjMxMDEwMDAwMDBBMjQ2ODhCMDAwMDAwMDAwMDA0MUVDCis6MTAwNjUwMDA4OUIwMDEwMDAwMDAwMDk0OENCMDAxMDBGRkZGMDA0NjRCCis6MTAwNjYwMDA4MDg4MDEwMEE1QTVBMjQwODBDRTAwMDAwMDAwMDA0OEJGCis6MTAwNjcwMDA4REYwMDEwMEM5MDA4MjQxODk0MDAwMDAwMDAwODA0MEU3Cis6MTAwNjgwMDA4OUIwMDEwMDAwMDAwMDQ0RkQ4MzAxMDBENDAwMDA0MDU3Cis6MTAwNjkwMDA4MTMyMDEwMDAwMDBBMjQ0ODBCMjAwMDBFMjAwMDAwOEE0Cis6MTAwNkEwMDA4MzMwMDEwMDAwMDBBMjQ1ODAzMjAxMDAwMDAwODA0NDM4Cis6MTAwNkIwMDBGRDkzMDEwMDAwMzAwMDA4ODM5ODAxMDA4MDAwMDA0MDk1Cis6MTAwNkMwMDAyQjk5MDEwMERCMDAwMDQwODkzMDAxMDAwMDAwQTI0NkE4Cis6MTAwNkQwMDA4MEIyMDAwMEZGRkYwMDk0ODA4ODAxMDBBNUE1QTI0MDIxCis6MTAwNkUwMDA4MDRFMDEwMDAwMDA4MDQzODlCMDAxMDAwMzg0MDA0MTc2Cis6MTAwNkYwMDAyQzk5MDEwMERFMDAwMDQwODFCMjAwMDAwMzg4MDA0MTE3Cis6MTAwNzAwMDAyQzk5MDEwMDAwMDAwMDIwOERCMDAxMDAwMDAwOUY5NjkwCis6MTAwNzEwMDA4MEIyMDAwMERGMDBBMjQxOEQ1MDAwMDAwMDAwODA0MDQ4Cis6MTAwNzIwMDA4MUIyMDEwMEZGN0YwMDQwMjU5OTAxMDAwMDAwMDA0Q0NDCis6MTAwNzMwMDA4OUUwMDEwMEREMDAwMDQ0ODIxNDAxMDAwMDAwOTA5NDczCis6MTAwNzQwMDA4QUIwMDAwMDAwMDAwMDQ1RjBCMTAxMDAxMDAwMDA0NTMzCis6MTAwNzUwMDA4OEY0MDEwMDAwMDAwMDQ0ODlEMDAxMDBERDAwMDA0NDVECis6MTAwNzYwMDAyQjQxMDEwMEVDMDAwODQxODAzMjAwMDBFRDAwMDA5NEI0Cis6MTAwNzcwMDAyNEIxMDAwMDEwMDAwMDk0MjRGNTAxMDAwMDAwMDA5NDUyCis6MTAwNzgwMDBGMEIxMDEwMEYyMDBBMDQ0ODk1MDAwMDBERDAwMDA0NEY3Cis6MTAwNzkwMDAyQjQxMDEwMDAwMDAwMDk0RjBCMTAxMDBFRjAwMjA0NDYzCis6MTAwN0EwMDA4OTUwMDAwMDEwMDAwMDQ1ODhGNDAxMDAwMDAwMDBGQUE0Cis6MTAwN0IwMDA4QUIwMDEwMDAwMDBBMzQyODlEMDAwMDBGNzAwQTBGQTJGCis6MTAwN0MwMDA4QTQwMDAwMDAwMDAwMDQxOEJDMDAxMDBGNTAwQTM0MkY4Cis6MTAwN0QwMDA4OTUwMDAwMEZGRkYwMDQ1ODg4ODAxMDAxMDAwMDA0NTk3Cis6MTAwN0UwMDA4QUY0MDEwMEZDMDA5MDQ0OEE0MDAwMDAwMDAwMDA0MUFGCis6MTAwN0YwMDA4QkMwMDEwMEZGRkYwMDQ1OEFBODAxMDAwMDAwODA1MDY3Cis6MTAwODAwMDA4QkUwMDEwMEZGN0YwMDQwMjU5OTAxMDA3QzAwMDA0MDQzCis6MTAwODEwMDAyQjk5MDEwMDAwMzAwMDQwODM5ODAxMDBERDAwMDAwOEEyCis6MTAwODIwMDA4MzE0MDEwMDAwMDAwMDk0MkFCMTAxMDAwMDgwMDA0MDAwCis6MTAwODMwMDBGOTlCMDEwMEREMDAwMEZDMTkzMTAxMDAwMDAwNDA5NDJCCis6MTAwODQwMDA4MEIyMDEwMEREMDAwMDQ0MkI0MTAxMDAwMDAwNDE5NDEyCis6MTAwODUwMDA4MEIyMDEwMDAwMDAwMDQxRjlDMzAxMDAwMDAwMDA0NDIzCis6MTAwODYwMDAyQkMxMDEwMDA0MDE5Rjk0ODAzMjAwMDAwMjgwMDA0MEVGCis6MTAwODcwMDA4MUIyMDAwMDEwMDEwMDUxOTNCMDAwMDAxMDAxMDA0RDQyCis6MTAwODgwMDA5M0IwMDAwMDEwMDEwMDQ5OTNCMDAwMDAwMDAwMDA0MjQ2Cis6MTAwODkwMDA5M0IwMDEwMDEwMDFBMjQxOTM1MDAwMDAwMDAwODA0MDdECis6MTAwOEEwMDA4MUIyMDEwMDAwMDAxMDQwODFCMjAxMDAwMDAwMTE0MDNGCis6MTAwOEIwMDA4MUIyMDEwMDAwMDAxMjQwODFCMjAxMDAwMDAwMTM0MDJCCis6MTAwOEMwMDA4MUIyMDEwMDAwMDAxNDQwODFCMjAxMDAwMDAwMTU0MDE3Cis6MTAwOEQwMDA4MUIyMDEwMDAwMDAxNjQwODFCMjAxMDAwMDAwMTc0MDAzCis6MTAwOEUwMDA4MUIyMDEwMDAwMDAxODQwODFCMjAxMDAwMDAwMTk0MEVGCis6MTAwOEYwMDA4MUIyMDEwMDAwMDAxQTQwODFCMjAxMDAwMDAwMUI0MERCCis6MTAwOTAwMDA4MUIyMDEwMDAwMDAxQzQwODFCMjAxMDAwMDAwMUQ0MEM2Cis6MTAwOTEwMDA4MUIyMDEwMDAwMDAxRTQwODFCMjAxMDAwMDAwMUY0MEIyCis6MTAwOTIwMDA4MUIyMDEwMDAwMDA3MDQwODFCMjAxMDAwMDAwNzE0MEZFCis6MTAwOTMwMDA4MUIyMDEwMDAwMDA3MjQwODFCMjAxMDAwMDAwNzM0MEVBCis6MTAwOTQwMDA4MUIyMDEwMDAwMDA3NDQwODFCMjAxMDAwMDAwNzU0MEQ2Cis6MTAwOTUwMDA4MUIyMDEwMDAwMDA3NjQwODFCMjAxMDAwMDAwNzc0MEMyCis6MTAwOTYwMDA4MUIyMDEwMDAwMDA3ODQwODFCMjAxMDAwMDAwNzk0MEFFCis6MTAwOTcwMDA4MUIyMDEwMDAwMDA3QTQwODFCMjAxMDAwMDAwN0I0MDlBCis6MTAwOTgwMDA4MUIyMDEwMDAwMDA3QzQwODFCMjAxMDAwMDAwN0Q0MDg2Cis6MTAwOTkwMDA4MUIyMDEwMDAwMDA3RTQwODFCMjAxMDAwMDAwN0Y0MDcyCis6MTAwOUEwMDA4MUIyMDEwMDAwMDA4MDQwODFCMjAxMDAwMDA0MDA0MERCCis6MTAwOUIwMDBBMTk5MDEwMDAwMDAwMDUwQTFEMTAxMDAwMDAwMDA0MEY5Cis6MTAwOUMwMDAxQkIwMDEwMDAwMDAwMDQwMTlCMDAxMDAwMDAwMDA0MDExCis6MTAwOUQwMDAxN0IwMDEwMDAwMDAwMDQwMTVCMDAxMDAwMDAwMDA0MDA5Cis6MTAwOUUwMDAxM0IwMDEwMDAwMDAwMDQwMTFCMDAxMDAwMDAwMDA0MDAxCis6MTAwOUYwMDAwRkIwMDEwMDAwMDAwMDQwMERCMDAxMDAwMDAwMDA0MEY5Cis6MTAwQTAwMDAwQkIwMDEwMDAwMDAwMDQwMDlCMDAxMDAwMDAwMDA0MEYwCis6MTAwQTEwMDAwN0IwMDEwMDAwMDAwMDQwMDVCMDAxMDAwMDAwMDA0MEU4Cis6MTAwQTIwMDAwM0IwMDEwMDAwMDAwMDQwMDFCMDAxMDAzQjAxMjA0ODdDCis6MTAwQTMwMDBBMTUxMDAwMDAwMDA4MDQwODFCMjAxMDA0NzAxMjI0QjFCCis6MTAwQTQwMDA3NDdEMDAwMDAwMDA4MDQwODFCMjAxMDA2MDAwMDA0QjE2Cis6MTAwQTUwMDA2MDk5MDEwMDAwMDAwMEIxN0VCMTAxMDA0ODAxQTg0MDhBCis6MTAwQTYwMDA4MTMyMDAwMDQ1MDEwMDQwODFCMjAwMDAwNTAwODA0MDU1Cis6MTAwQTcwMDA5Nzk4MDEwMDE4MDAwMEFBOTY4ODAxMDAwMDAwODA0M0EyCis6MTAwQTgwMDA5N0YwMDEwMDA3MDAwMEFBOTY4ODAxMDAwMDAwODA0MDRFCis6MTAwQTkwMDA4MUIyMDEwMDAwMDAwMDU4MDc5MDAxMDBEODlGMDA0MDdCCis6MTAwQUEwMDA4MUIyMDAwMDAwMDAwMDQ0QTVCMzAxMDBEODAyMDA0MDVDCis6MTAwQUIwMDA4MTMyMDEwMEY4MDIwMDQwODEzMjAxMDAwMDAwMDA1QzM4Cis6MTAwQUMwMDAwNzkwMDEwMEQ4OUYwMDQwQkZCMzAwMDA1QTAxMjJDQzFDCis6MTAwQUQwMDA4NTdGMDAwMDAwMDAwMDUxMDc5MDAxMDBEODlGMDA0MDcyCis6MTAwQUUwMDA4MUIyMDAwMDAwMDAwMDQwNDlCMTAxMDBBRTAzMDBDQjFDCis6MTAwQUYwMDBBM0M5MDEwMEQwMTQwMDQwQTE5QjAxMDAwMDAwMDAyMDA4Cis6MTAwQjAwMDA0NkIxMDEwMDAwMDAwMDQ4RjFCMTAxMDAwMDAwMDBEMDMyCis6MTAwQjEwMDBGMUIxMDEwMDAwMDAwMENBRjFCMTAxMDAwMDAwMDBENUYwCis6MTAwQjIwMDBFMUIxMDEwMDA3MDAwMDQwNjE5OTAxMDAyMDAwMDAyMEIwCis6MTAwQjMwMDA2MkREMDEwMDYzMDFBODQwODEzMjAwMDAwMDAwMDBDQ0FBCis6MTAwQjQwMDA4NTkzMDEwMEY4MDIwMDQwODEzMjAxMDBEMDE0MDA0MDdBCis6MTAwQjUwMDA0Mzk5MDEwMDAwMDAwMEZBQkFCMzAxMDAwMDAwMDBGQTU2Cis6MTAwQjYwMDBBNEIzMDEwMDAwMDAwMEY4QkNCMzAxMDAwMDE0MkY0MDQyCis6MTAwQjcwMDA4MUIwMDEwMDAwMDAwMEU3QTdCMzAxMDAwMDAwMDBEODI5Cis6MTAwQjgwMDBBOUIzMDEwMEZGMDAwMEREODE4ODAxMDAwMjAwMDA0MEUwCis6MTAwQjkwMDA4MEY0MDEwMDczMDEwMDQwODBDODAxMDA4NjAxMDBERDdGCis6MTAwQkEwMDA4MTMyMDAwMDAwMDAwMDQwMTBCMTAwMDA4NzAxMDA0MEM5Cis6MTAwQkIwMDA4MUIyMDAwMDg4MDEwMDQwODFCMjAwMDA4OTAxMDA0MDNDCis6MTAwQkMwMDA4MUIyMDAwMDhBMDEwMDQwODFCMjAwMDA4QjAxMDA0MDI4Cis6MTAwQkQwMDA4MUIyMDAwMDhEMDEwMDQwODFCMjAwMDA4RjAxMDA0MDExCis6MTAwQkUwMDA4MUIyMDAwMDUwMDEwMDQwODFCMjAwMDBCNjAxMDA0MDE3Cis6MTAwQkYwMDA4MUIyMDAwMDUwMDEwMDQwODFCMjAwMDBDNDAxMDA0MEY5Cis6MTAwQzAwMDA4MUIyMDAwMEM1MDEwMDQwODFCMjAwMDA4MjAyMDA0MEI0Cis6MTAwQzEwMDA4MUIyMDAwMDgzMDIwMDQwODFCMjI4MDBCODAyMDA0MDg3Cis6MTAwQzIwMDA4MUIyMjgwMEQ0OUYwMDQwODFCMjI4MDBENTlGMDA0MEE3Cis6MTAwQzMwMDA4MUIyMjgwMEQ2OUYwMDQwODFCMjI4MDBENzlGMDA0MDkzCis6MTAwQzQwMDA4MUIyMjgwMDcyMDEwMDQxODFDMDI4MDA1NTAxNTE0OTNDCis6MTAwQzUwMDBGRDkzMjgwMDU1MDE1MjRBRkQ5MzJBMDA1NTAxNTU0OTNDCis6MTAwQzYwMDBGRDgzMkEwMDU1MDE1NjRBRkQ4MzJBMDA1MDAxOTE4MUQ3Cis6MTAwQzcwMDA4MDMwMkEwMDU1MDE0NTQwODFCMjJBMDA1MDAxOTE4MkZFCis6MTAwQzgwMDA4MDMwMkEwMDU1MDE0NjQwODFCMjJBMDAwMDAwMDA0MDExCis6MTAwQzkwMDA4OUIwMkIwMDAwMDAyRjQwODFCMDAxMDAwMDE0MDA0MEZCCis6MTAwQ0EwMDA0OTk5MDEwMEIzMDEyMkRFRTE2RDAwMDAwMDAwMDA0QzEzCis6MTAwQ0IwMDA0OUMxMDEwMDAwMDAwMDQxODFDMDAxMDA5MjAxQTI0NDJECis6MTAwQ0MwMDA4MTZDMDAwMDAwMDAwMDRDNDlEMTAxMDA5QTAxMjI0MEQzCis6MTAwQ0QwMDBFMTZEMDAwMDk2MDFBMjQxODE1MDAwMDA1MDAxMDA0MUU5Cis6MTAwQ0UwMDBCRkIzMDAwMDAwMDAwMDQyQkZCMzAxMDA1MDAxQTAwRkRECis6MTAwQ0YwMDBCRDZGMDAwMDAwMDAwMERFRTFCMTAxMDAwMDAwMDA0NDEzCis6MTAwRDAwMDA0OUMxMDEwMEI1MDEwMDQwMTk5OTAxMDAwMDAwNDI0MEFECis6MTAwRDEwMDA4MUIyMDEwMDAwMDA0M0ZGODVCMDAxMDAwMDAwMDBERTQ5Cis6MTAwRDIwMDAxOUIxMDEwMDAwMDA0MkZGODdCMDAxMDAwMDAwNDNGRjNECis6MTAwRDMwMDBFMUIxMDEwMDAwMDAwMDQ0NDlDMTAxMDAwMDAwMkZGRkEzCis6MTAwRDQwMDBFMUIxMDEwMDA4MTQwMEE0ODBDQzAxMDBBQTAxMjY0MEYyCis6MTAwRDUwMDA4MTMyMDAwMDAwMDAwMDQxODVDMDAxMDBBODAxQTI0Q0MyCis6MTAwRDYwMDA4MTUwMDAwMEI0MDEyMkQyODEzMjAwMDBBRjAxMjI0MTQzCis6MTAwRDcwMDBBNTZGMDAwMDUwMDFBMkUwODEzMjAwMDAwMDAwMDBEMjA3Cis6MTAwRDgwMDBDMUIzMDEwMDAwMDAwMDVDODk5MDAxMDAwMDAwNDA0MkY2Cis6MTAwRDkwMDA4MEIyMDEwMDAwMDA0MTQzODBCMjAxMDAwMDAwMDBGMDc5Cis6MTAwREEwMDA4ODk0MDEwMDU1MDEwMDQ0RTBCMTAwMDBCMTAxMDA0ODAxCis6MTAwREIwMDA0OUMxMDAwMEFGMDEwMDVCODk5MDAwMDBBODlGMDBBMDFFCis6MTAwREMwMDA5RUIwMDAwMDAwMDAwMDQwODNCMDAxMDAwMDE0MDA0MDBECis6MTAwREQwMDA0OTk5MDEwMDAwMDAyMzQwODFCMDAxMDBCRTAxMjJERURDCis6MTAwREUwMDBFMTZEMDAwMDAwMDAwMDRDNDlDMTAxMDAwMDAwMDA0MTFECis6MTAwREYwMDA4MUMwMDEwMEI5MDFBMjQ0ODE2QzAwMDA1MDAxMDA0MzkwCis6MTAwRTAwMDBCRkIzMDAwMDAwMDAwMEY4MThCMTAxMDAwMDAwNDBGODc2Cis6MTAwRTEwMDA4MEIyMDEwMDAwMDA0MUYwODBCMjAxMDAwMDAwMDA0MEZCCis6MTAwRTIwMDBGMUIxMDEwMDAwMDAwMDQwRjFCMTAxMDA1NTAxMDA0MEE2Cis6MTAwRTMwMDBFMUIxMDAwMEM2MDEwMDQwOTFCMDAwMDAwMDAwMDA0MTk3Cis6MTAwRTQwMDA5MUIwMDEwMEQwMTQyRTQwNDlCMTAxMDAwNTAwMDA0MENFCis6MTAwRTUwMDBBMzlCMDEwMDA4MDAwMEREODFGNDAxMDBDQjAxMDA0MEVDCis6MTAwRTYwMDA4MEM4MDEwMDAwMDAwMDQwMTBCMTAwMDBEMTAxMDA0MDI2Cis6MTAwRTcwMDA4MUIwMDAwMDUzMDEwMERFQTFCMzAwMDBFMzAxMDA0MDk3Cis6MTAwRTgwMDA4MUIyMDAwMEU1MDEwMDQwODFCMDAwMDBFQjAxMDA0MEFDCis6MTAwRTkwMDA4MUIyMDAwMDUyMDEwMERGRTFCMTAwMDAwMDAwMDBEMDhCCis6MTAwRUEwMDBCQUIzMDEwMDAwMDAwMERFQTFCMTAxMDAwMjAwMDBEMkNGCis6MTAwRUIwMDBBNUU3MDEwMDAwMDAwMEQyQzFCMzAxMDAwMDAwMDAwMDVFCis6MTAwRUMwMDBGMEIxMDEwMERCMDEyMjQ0QzE1MzAwMDBEQTAxODQ0MThBCis6MTAwRUQwMDA4MTQwMDAwMERFMDEwMDQwODEzMjAxMDAwMDAwMDBEMEFFCis6MTAwRUUwMDA0NUIxMDEwMEQ1MDEwMDQxQTFDMTAwMDBEQTAyMDA0MDc2Cis6MTAwRUYwMDA4MTMyMDEwMEY4MDIwMDQwODEzMjAxMDA1NTAxMDBERDFECis6MTAwRjAwMDBBMUIxMDAwMDAwMDAwMDQwODFCMDAxMDA0MDAwMDA0MDlECis6MTAwRjEwMDBBNTlCMDEwMERBMDIwMDQwODEzMjAxMDA0MDAwMDBEM0FECis6MTAwRjIwMDBBN0NCMDEwMEY4MDIwMEUwQTVCMzAwMDAwMzAwMDA0MEQ5Cis6MTAwRjMwMDBBMzlCMDEwMDUzMDEwMERFQTFCMzAwMDAwMDAwMDA0NEE4Cis6MTAwRjQwMDBCRkIzMDEwMDAwMDAwMERFODE5MDAxMDA1MDAxQTJCQTkxCis6MTAwRjUwMDA4MDA0MDAwMDYwMDAwMERFNjE5OTAxMDBFODAxQThCMTkyCis6MTAwRjYwMDA4MDMwMDAwMDUyMDEwMDQwRTBCMTAwMDAwMDAwMDBEMERECis6MTAwRjcwMDBCQUIzMDEwMDZCMDIwMDQwODE5ODAxMDA2MDAyMDA0RDhECis6MTAwRjgwMDA4MzMwMDEwMDAwMDAwMDQ0RTFCMzAxMDAwMDAwMDA0NDkwCis6MTAwRjkwMDBFM0IzMDEwMDAwMDAwMDQ0RTVCMzAxMDAwMDAwMDA0NDk5Cis6MTAwRkEwMDBFOUIzMDEwMDAwMDAwMDQ0RUJCMzAxMDAwMDAwMDA0NDdECis6MTAwRkIwMDBGNUIzMDEwMDAwMDAwMDQ0RjdCMzAxMDAwMDAwMDA0NDU1Cis6MTAwRkMwMDBGOUIzMDEwMEY5MDEyMjQwOEY2RjAwMDA3ODAyMDA0MDYwCis6MTAwRkQwMDA4MTk4MDEwMDYwMDIwMEM3ODMzMDAxMDA4MDAyMDA0MDU4Cis6MTAwRkUwMDA4MTk4MDEwMDYwMDIwMDQyODMzMDAxMDAwMDAwMDBFOEE3Cis6MTAwRkYwMDBGMUIxMDEwMDAwMDAwMEU5RjFCMTAxMDAwMDAwMDBFQUQ4Cis6MTAxMDAwMDBGMUIxMDEwMDAwMDAwMEVCRjFCMTAxMDAwMDAwMDA4NTJBCis6MTAxMDEwMDBGMEIxMDEwMDAwMDAwMEVDRjFCMTAxMDAwMDAwMDBFREIyCis6MTAxMDIwMDBGMUIxMDEwMDAwMDAwMEIyRjBCMTAxMDAwMDAwMDBBOTIwCis6MTAxMDMwMDBGMEIxMDEwMDAwMDAwMEFDRjBCMTAxMDAwMDAwMDBBQjE1Cis6MTAxMDQwMDBGMEIxMDEwMDAwMDAwMEI4RjBCMTAxMDAwMDAwMDBCOUVCCis6MTAxMDUwMDBGMEIxMDEwMDAwMDAwMEJBRjBCMTAxMDAwMDAwMDBCQkQ3Cis6MTAxMDYwMDBGMEIxMDEwMDBDMDJCODQwODEzMDAwMDAwMDAwMDA0MEU3Cis6MTAxMDcwMDA4MTkwMDEwMDBFMDJCOTQwODEzMjAwMDAwMDAwMDA0MTYxCis6MTAxMDgwMDA4MTkwMDEwMDEwMDJCQTQwODEzMjAwMDAwMDAwMDA0MjRECis6MTAxMDkwMDA4MTkwMDEwMDEyMDJCQjQwODEzMjAwMDAwMDAwMDA0MzM5Cis6MTAxMEEwMDA4MTkwMDEwMDE0MDJCQzQwODEzMjAwMDAwMDAwMDA0NDI1Cis6MTAxMEIwMDA4MTkwMDEwMDE2MDJCRDQwODEzMjAwMDAwMDAwMDA0NTExCis6MTAxMEMwMDA4MTkwMDEwMDE4MDJCRTQwODEzMjAwMDAwMDAwMDA0NkZECis6MTAxMEQwMDA4MTkwMDEwMDFBMDJCRjQwODEzMjAwMDAwMDAwMDA0N0U5Cis6MTAxMEUwMDA4MTkwMDEwMDFDMDJDODQwODEzMjAwMDAwMDAwMDA0OENECis6MTAxMEYwMDA4MTkwMDEwMDFFMDJDOTQwODEzMjAwMDAwMDAwMDA0OUI5Cis6MTAxMTAwMDA4MTkwMDEwMDIwMDJDQTQwODEzMjAwMDAwMDAwMDA0QUE0Cis6MTAxMTEwMDA4MTkwMDEwMDIyMDJDQjQwODEzMjAwMDAwMDAwMDA0QjkwCis6MTAxMTIwMDA4MTkwMDEwMDI0MDJDQzQwODEzMjAwMDAwMDAwMDA0QzdDCis6MTAxMTMwMDA4MTkwMDEwMDI2MDJDRDQwODEzMjAwMDAwMDAwMDA0RDY4Cis6MTAxMTQwMDA4MTkwMDEwMDI4MDJDRTQwODEzMjAwMDAwMDAwMDA0RTU0Cis6MTAxMTUwMDA4MTkwMDEwMDJBMDJDRjQwODEzMjAwMDAwMDAwMDA0RjQwCis6MTAxMTYwMDA4MTkwMDEwMDJDMDJGMDQwODEzMjAwMDAwMDAwMDA1MDBDCis6MTAxMTcwMDA4MTkwMDEwMDJFMDJGMTQwODEzMjAwMDAwMDAwMDA1MUY4Cis6MTAxMTgwMDA4MTkwMDEwMDMwMDJGMjQwODEzMjAwMDAwMDAwMDA1MkU0Cis6MTAxMTkwMDA4MTkwMDEwMDMyMDJGMzQwODEzMjAwMDAwMDAwMDA1M0QwCis6MTAxMUEwMDA4MTkwMDEwMDM0MDJGNDQwODEzMjAwMDAwMDAwMDA1NEJDCis6MTAxMUIwMDA4MTkwMDEwMDM2MDJGNTQwODEzMjAwMDAwMDAwMDA1NUE4Cis6MTAxMUMwMDA4MTkwMDEwMDM4MDJGNjQwODEzMjAwMDAwMDAwMDA1Njk0Cis6MTAxMUQwMDA4MTkwMDEwMDNBMDJGNzQwODEzMjAwMDAwMDAwMDA1NzgwCis6MTAxMUUwMDA4MTkwMDEwMDNDMDJGODQwODEzMjAwMDAwMDAwMDA1ODZDCis6MTAxMUYwMDA4MTkwMDEwMDNFMDJGOTQwODEzMjAwMDAwMDAwMDA1OTU4Cis6MTAxMjAwMDA4MTkwMDEwMDQwMDJGQTQwODEzMjAwMDAwMDAwMDA1QTQzCis6MTAxMjEwMDA4MTkwMDEwMDQyMDJGQjQwODEzMjAwMDAwMDAwMDA1QjJGCis6MTAxMjIwMDA4MTkwMDEwMDQ0MDJGQzQwODEzMjAwMDAwMDAwMDA1QzFCCis6MTAxMjMwMDA4MTkwMDEwMDQ2MDJGRDQwODEzMjAwMDAwMDAwMDA1RDA3Cis6MTAxMjQwMDA4MTkwMDEwMDQ4MDJGRTQwODEzMjAwMDAwMDAwMDA1RUYzCis6MTAxMjUwMDA4MTkwMDEwMDRBMDJGRjQwODEzMjAwMDAwMDAwMDA1RkRGCis6MTAxMjYwMDA4MTkwMDEwMDAwMDAwMDQwRjBCMTAxMDA0MDAwMDA0MDBBCis6MTAxMjcwMDBBNTlCMDEwMEQ4MDIwMDQwODEzMjAxMDBGODAyMDA0MDI1Cis6MTAxMjgwMDA4MTMyMDEwMEQwMTQyRTA2QTVCMzAxMDA0MDAwMDBEMzI2Cis6MTAxMjkwMDBBN0NCMDEwMDAwMDAwMEYwRjFCMTAxMDAwMDAwMDBGMTU3Cis6MTAxMkEwMDBGMUIxMDEwMDAwMDAwMEYyRjFCMTAxMDAwMDAwMDBGNDEyCis6MTAxMkIwMDBGMUIxMDEwMDAwMDAwMEY1RjFCMTAxMDAwMDAwMDBGQUY5Cis6MTAxMkMwMDBGMUIxMDEwMDAwMDAwMEZCRjFCMTAxMDAwMDAwMDBGQ0UxCis6MTAxMkQwMDBGMUIxMDEwMDAwMDAwMEVCRjFCMTAxMDAwMDAwMDBFRUVGCis6MTAxMkUwMDBGMUIxMDEwMDAwMDAwMEVGRjFCMTAxMDAwMDAwMDBGM0Q2Cis6MTAxMkYwMDBGMUIxMDEwMDAwMDAwMEY2RjFCMTAxMDAwMDAwMDBGREI1Cis6MTAxMzAwMDBGMUIxMDEwMERCMDEwMEM3RTFCMTAwMDAwMDAwODA0MDQ1Cis6MTAxMzEwMDA4MUIyMDEwMDY2MDIwMDQ4ODAzMjAwMDAwMDAwNTE0MEE2Cis6MTAxMzIwMDAxQUIxMDEwMDAwMDA0RDQwODFCMjAxMDAwMDAwNDU0MEFCCis6MTAxMzMwMDA4MUIyMDEwMDYzMDJBMjQxODM1MDAwMDA1RjAyNDk0MDc0Cis6MTAxMzQwMDA4MUIyMDAwMDAwMDA1MjQwMUNCMTAxMDAwMDAwNEU0MDdDCis6MTAxMzUwMDA4MUIyMDEwMDAwMDA0NjQwODFCMjAxMDA2ODAyQTI0MTUyCis6MTAxMzYwMDA4MzUwMDAwMDVGMDI0QTQwODFCMjAwMDAwMDAwMDBBMEVDCis6MTAxMzcwMDA5RUIwMDEwMDAwMDAwMDgwRDhCMzAxMDAwMDAwMDBBMTcxCis6MTAxMzgwMDBEMEIzMDEwMDAwMDAwMEEyRDJCMzAxMDAwMDAwMDBBNDBECis6MTAxMzkwMDBENEIzMDEwMDAwMDAwMEQwRDZCMzAxMDAwMDAwMDBEMTlBCis6MTAxM0EwMDBEQ0IzMDEwMDAwMDAwMEQyREVCMzAxMDAwMDAwMDA4OEMxCis6MTAxM0IwMDBEQUIzMDEwMDAwMDAwMEQ0OEVCMzAxMDAwMDAwMDBEM0I2Cis6MTAxM0MwMDBFNkIzMDEwMDAwMDAwMEFDRUNCMzAxMDAwMDAwMDA5OTlFCis6MTAxM0QwMDBGQUIzMDEwMDAwMDAwMEQ1RTBCMzAxMDAwMDAwMDBENTIxCis6MTAxM0UwMDBFMkIzMDEwMDAwMDAwMEQ1RTRCMzAxMDAwMDAwMDBENTI1Cis6MTAxM0YwMDBFOEIzMDEwMDAwMDAwMEQ1RUFCMzAxMDAwMDAwMDBENTA5Cis6MTAxNDAwMDBGNEIzMDEwMDAwMDAwMEQ1RjZCMzAxMDAwMDAwMDBENUUwCis6MTAxNDEwMDBGOEIzMDEwMDAwMDAwMEM3QTlCMTAxMDAwMDAwMDA0RkFGCis6MTAxNDIwMDA0MEIxMDEwMDg0MDIwMDQwOTFCMDAwMDAwMDAwMDA0MTgyCis6MTAxNDMwMDA5MUIwMDEwMDA3MDAwMDQwQTM5QjAxMDAwODAwMDBEREZGCis6MTAxNDQwMDA4MUY0MDEwMDg4MDIwMDQwODBDODAxMDAwMDAwMDA0MEQzCis6MTAxNDUwMDAxMEIxMDAwMDhEMDIwMDQwODFCMjAwMDA5ODAyMDA0MEVGCis6MTAxNDYwMDA4MUIyMDAwMDk4MDIwMDQ2QTNCMzAwMDA5QjAyMDA0MDM2Cis6MTAxNDcwMDA4MUIyMDAwMEExMDIwMDQwODFCMjAwMDA4RjAyMjM1MDFGCis6MTAxNDgwMDBBNTZGMDAwMDAwMDAwMDUwQTVCMzAxMDBFODAyMDA0MjczCis6MTAxNDkwMDBBNTYzMDEwMEY4MDIwMDQwODEzMjAxMDBEMDE0MkQ0MDA0Cis6MTAxNEEwMDA0OUIxMDEwMDAwMDAwMEQwQkFCMzAxMDAwMDAwMDBERTI1Cis6MTAxNEIwMDBBMUIxMDEwMDAwMDAwMEY4MDBCMDAxMDA5NzAyMjI0NDMxCis6MTAxNEMwMDBBNTUzMDAwMDk0MDIwMDQxQTFDMTAwMDA1NTAxMDBEREI4Cis6MTAxNEQwMDBBMUIxMDAwMEU4MDIwMERFQTEzMzAxMDBGODAyMDA0MEUzCis6MTAxNEUwMDA4MTMyMDEwMDU1MDEwMDQwODFCMjAwMDAwMDAwMDA0NTNBCis6MTAxNEYwMDBCRkIzMDEwMDUwMDFBMkQyNzc3RDAwMDAwMDAwMDBEMkVFCis6MTAxNTAwMDA2MUIxMDEwMDAwMDAwMERFNjNCMTAxMDA5RTAyQTg0MDRECis6MTAxNTEwMDA4MTMyMDAwMDU1MDEwMDQwODFCMjAwMDBFODAyMDA1NDExCis6MTAxNTIwMDBBNTMzMDEwMEY4MDIwMDQwODEzMjAxMDBEMDE0MkQ0MEEzCis6MTAxNTMwMDA0OUIxMDEwMDAwMDAwMEY4RDBCMzAxMDAwMDAwMDBGODNDCis6MTAxNTQwMDBEMkIzMDEwMDAwMDAwMEY4RDRCMzAxMDAwMDAwMDBGODlECis6MTAxNTUwMDBENkIzMDEwMDAwMDAwMEY4MDhCMTAxMDBBQzAyMDA0MDYxCis6MTAxNTYwMDA4MTk4MDEwMDYwMDIwMDQ2ODMzMDAxMDA1NTAxMDA0MDZGCis6MTAxNTcwMDA4MUIyMDAwMDAwMDAwMEEwOUVCMDAxMDAwMDAwMDBFODYxCis6MTAxNTgwMDA0M0IxMDEwMDAwMDAwMEU5NDVCMTAxMDAwMDAwMDBFQTlDCis6MTAxNTkwMDA0OUIxMDEwMDAwMDAwMEVCQTFCMTAxMDAwMDAwMDA0RkMzCis6MTAxNUEwMDA0MEIxMDEwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTAxNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTAxNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTAxNUQwMDA4MUIyMDAwMEQwMTQyRTQwNDlCMTAxMDAwNTAwMDA0MDQ2Cis6MTAxNUUwMDBBMzlCMDEwMDAwMDAwMDQwQzFCMzAxMDAwODAwMDBERDIyCis6MTAxNUYwMDA4MUY0MDEwMEJEMDIwMDQwMTBDOTAwMDBDMzAyMDAwNUQzCis6MTAxNjAwMDA4MUIwMDAwMDUwMDEwMDQwODFCMjAwMDBDQjAyMDAwNTEzCis6MTAxNjEwMDA4MUIwMDAwMDUwMDEwMDQwODFCMjAwMDBEMDAyMDA0NEJGCis6MTAxNjIwMDBBNUIzMDAwMEQyMDIwMDQ0QTVCMzAwMDAwMjAwMDA0MEIwCis6MTAxNjMwMDBBNEU3MDEwMDAwMDAwMEUwODFCMTAxMDBGRkZGMDBDMTRDCis6MTAxNjQwMDBGMDg5MDEwMEM4MDIyMjQxODE1MDAwMDBDNDAyMDA0MTFCCis6MTAxNjUwMDBDMUMzMDAwMERBMDIwMDQwODEzMjAxMDBGODAyMDA0MEZDCis6MTAxNjYwMDA4MTMyMDEwMDU1MDEwMDQwODFCMjAwMDAwMjAwMDA0MEJCCis6MTAxNjcwMDBBNEU3MDEwMDAwMDAwMEUwOTFCMTAxMDBGRkZGMDBDOUY0Cis6MTAxNjgwMDBGMDg5MDEwMEM4MDIyMjQxODE1MDAwMDBDQzAyMDA0MUQzCis6MTAxNjkwMDBDMUMzMDAwMEZGRkYwMERFODU4OTAxMDBDODAyMDBDMjRGCis6MTAxNkEwMDBFMEIxMDAwMEZGRkYwMERFOTU4OTAxMDBDODAyMDBDQTFBCis6MTAxNkIwMDBFMEIxMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAxNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTAxNkQwMDA4MUIyMDAwMDAwMDAwMEU3QTdCMzAxMDAwMDAwMDBEOEJECis6MTAxNkUwMDBBOUIzMDEwMDAwMDAwMDQwNDlCMTAxMDBBRTAzMDBDQkU2Cis6MTAxNkYwMDBBM0M5MDEwMDAwMDAwMDIwNDZCMTAxMDAwMDAwMDBEMjkzCis6MTAxNzAwMDBGMUIxMDEwMDAwMDAwMEQzRjFCMTAxMDAwMDAwMDBENEVDCis6MTAxNzEwMDBGMUIxMDEwMDAwMDAwMEQwRTFCMTAxMDAwMDAwMDBEMUYyCis6MTAxNzIwMDA2MUIxMDEwMDIwMDAwMDIwNjJERDAxMDBFMjAyQTg0MDVBCis6MTAxNzMwMDA4MTMyMDAwMDAwMDA4MENDODU5MzAxMDAwNDAwMDA0MDRECis6MTAxNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTAxNzUwMDA4MUIyMDAwMDAwMDAwMEU3QTdCMzAxMDAwMDAwMDBEODNDCis6MTAxNzYwMDBBOUIzMDEwMDAwMDAwMDQwNDlCMTAxMDBBRTAzMDBDQjY1Cis6MTAxNzcwMDBBM0M5MDEwMDAwMDAwMDIwNDZCMTAxMDAwMDAwMDBEMjEyCis6MTAxNzgwMDBGMUIxMDEwMDAwMDAwMEQwRjFCMTAxMDAwMDAwMDBEMzcwCis6MTAxNzkwMDBGMUIxMDEwMEUxMDIwMEQ0RTFCMTAwMDAwNDAwMDA0MDE5Cis6MTAxN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAxN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTAxN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTAxN0QwMDA4MUIyMDAwMDAwMDBBMkNDODVGRjAwMDAwMDAwMDA1MDk0Cis6MTAxN0UwMDA4MUIwMDEwMEZBMDJBMjQxODE1MDAwMDBGOTAyQTJGMjg4Cis6MTAxN0YwMDA4MDMwMDAwMDAwMDA4MENDODU4MzAxMDAwNDAwMDA0MEEwCis6MTAxODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTAxODEwMDA4MUIyMDAwMEI1MDMwMDQwQTE5OTAxMDAwMDAwMkY0MUYyCis6MTAxODIwMDA5OUIzMDEwMDBBMDMyMjQ0ODE2QzAwMDAxMjAzMjI0ODhDCis6MTAxODMwMDA4MTZDMDAwMDBDMDMyMjRDODE2QzAwMDAxNjAzMjI1MEM2Cis6MTAxODQwMDA4MTZDMDAwMDE3MDMyMjU0ODE2QzAwMDAxOTAzMjI1ODk4Cis6MTAxODUwMDA4MTZDMDAwMDFFMDMyMjVDODE2QzAwMDA1MDAxMDA0MDdFCis6MTAxODYwMDA4MUIyMDAwMDAwMDAwMEJDMDlCMDAxMDBERDlGMDBDQTg5Cis6MTAxODcwMDAwMUIwMDAwMDAwMDAwMDQwMDNCMDAxMDAwMDAwMDA0MTgyCis6MTAxODgwMDBGMzgzMDEwMDEwMDNBMjQyMDU2QzAwMDAwMDAwMDA0MTM4Cis6MTAxODkwMDAwNUIwMDEwMEREOUYyMkNBMDcxNDAwMDBERDlGMDA0NTRFCis6MTAxOEEwMDBGMzkzMDAwMEREOUYyMDQzOTU2RjAwMDBERDlGODBDQTA5Cis6MTAxOEIwMDAwNTMwMDAwMEREOUYyMjAxODAzMDAwMDBERDlGMDBDQjVECis6MTAxOEMwMDBEQjkxMDAwMDU3MDEwMEJDQUJCMzAwMDAwMDAwMDBCQzdFCis6MTAxOEQwMDBCMUIzMDEwMEREOUYwMENBQ0ZCMzAwMDBGRjAwMDBDQTEyCis6MTAxOEUwMDA4MTg4MDEwMEREOUZBMjQwNzQ3RDAwMDA2MDAwMjA0MERGCis6MTAxOEYwMDA2MDk5MDEwMDFCMDNBOEIxODIzMDAwMDAxQTAzMDA0MDY4Cis6MTAxOTAwMDA4MUIyMDAwMEREOUYwMENBNzlCMzAwMDAwNDAwMDA0MEVFCis6MTAxOTEwMDA4MUIyMDAwMDAwMDAwMDRFODFCMDAxMDAwMDAwMDA0M0QxCis6MTAxOTIwMDBDQjgzMDEwMDAwMDA0NTQwODFCMjAxMDAyMjAzQTI0MUE3Cis6MTAxOTMwMDA4MTUwMDAwMDAwMDA0NTQwODFCMjAxMDAwMDAwNDU0MDk4Cis6MTAxOTQwMDA4MUIyMDEwMDJEMDM5MTgyODIzMDAwMDAwMDAwMDA4QUU0Cis6MTAxOTUwMDA4MEIwMDEwMEFFOUYwMDQwODBDRTAxMDAyQjAzQTY0MDY2Cis6MTAxOTYwMDA4MTMyMDAwMDJEMDM1NjQwODFCMjAwMDBCNTAzMDA0MEQzCis6MTAxOTcwMDBBMTk5MDEwMDAwMDAwMDUzMDc5MDAxMDBCNTAzMDA0MDQ5Cis6MTAxOTgwMDBBMTk5MDEwMDAwMDAwMDUyMDc5MDAxMDBEODlGMDA0MTdBCis6MTAxOTkwMDA4QkIzMDAwMDAwMDAwMDRFODFCMDAxMDAwMDAwMDA0MjQ3Cis6MTAxOUEwMDBDRDgzMDEwMDAwMDA0NjQwODFCMjAxMDAzMjAzQTI0MTE0Cis6MTAxOUIwMDA4MTUwMDAwMDAwMDA0NjQwODFCMjAxMDAwMDAwNDY0MDE2Cis6MTAxOUMwMDA4MUIyMDEwMDNEMDM5MTgxODIzMDAwMDAwMDAwMDA4OTU2Cis6MTAxOUQwMDA4MEIwMDEwMEFFOUYwMDQwODBDRTAxMDAzQjAzQTY0MEQ2Cis6MTAxOUUwMDA4MTMyMDAwMDNEMDM1NTQwODFCMjAwMDBCNTAzMDA0MDQ0Cis6MTAxOUYwMDBBMTk5MDEwMDAwMDAwMDUyMDc5MDAxMDBCNTAzMDA0MENBCis6MTAxQTAwMDBBMTk5MDEwMDAwMDAwMDUzMDc5MDAxMDBEODlGMDA0MUY4Cis6MTAxQTEwMDA4QkIzMDAwMEIwMDMwMDQwQTE5OTAxMDBDNDE0MkY0MDEzCis6MTAxQTIwMDA5OUIzMDEwMDU3MDEwMDQwNDlCMTAwMDAwNDAwMDA0MDkzCis6MTAxQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTAxQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAxQTUwMDA4MUIyMDAwMDMwOTQwMDQwNDM5OTAxMDAwMDkwMDBGOEVBCis6MTAxQTYwMDA4MDk4MDEwMDEwMDAwMEYyODhFNDAxMDAyMDAwMDA0MDhFCis6MTAxQTcwMDAyMDk5MDEwMDAwMDAwMDVGMjM5MTAxMDA0RDAzMUY5MTk4Cis6MTAxQTgwMDA4MDMyMDAwMDMwMDAwMDQwMjA5OTAxMDAwMDAwMDA1RjFCCis6MTAxQTkwMDAyMzkxMDEwMDUwMDMxRjkxODAzMjAwMDA0MDAwMDA0MDVDCis6MTAxQUEwMDAyMDk5MDEwMDAwMDAwMDVGMjM5MTAxMDA1MzAzMUY5MTYyCis6MTAxQUIwMDA4MDMyMDAwMDAwMDAwMDVGMjM5MTAxMDA1NTAzMUY5MTU4Cis6MTAxQUMwMDA4MDMyMDAwMDAwMDg4MDQwMjA5OTAxMDAwNDAwMDA0MDlFCis6MTAxQUQwMDA4MUIyMDAwMDAwMDAwMDQ3ODRCMDAxMDAwMDAwQTI0ODZECis6MTAxQUUwMDA4NDg0MDAwMDAwMDAwMDVGNjFCMTAxMDAwMDAwMDA1QzIwCis6MTAxQUYwMDA4RjkwMDEwMDAwMDAwMDQ3NjJCMTAxMDA1QTAzQTg0MDI2Cis6MTAxQjAwMDA4MTMyMDAwMDAwMDgwMDQ3OEVDODAxMDA1ODAzMDA1Q0M1Cis6MTAxQjEwMDA4RjgwMDAwMEUwMDAwMDQwNjE5OTAxMDA1ODE1MkQ0MEMxCis6MTAxQjIwMDA4REIwMDEwMEQwMTQyREYwODhCMDAxMDAwMDAwMDBGQTQzCis6MTAxQjMwMDA4QUIwMDEwMDAwMDAwMDQ1ODFCMDAxMDAwNzAwMDA0NUE3Cis6MTAxQjQwMDA4Mjg4MDEwMDAwMDAwMDQzOEJGMDAxMDAwMDAwMDA0ODgzCis6MTAxQjUwMDA4M0UwMDEwMDAwMDAwMDQ2ODI5NDAxMDAyMDAwMDA0MTYzCis6MTAxQjYwMDA2MDk5MDEwMDAwMDAwMDQxOERDMDAxMDA3NDAzMjI1RkY0Cis6MTAxQjcwMDA4RDZDMDAwMDY1MDNBMjQxODE1MDAwMDA2MzAzMDA0MEFBCis6MTAxQjgwMDA4MUIyMDAwMDA4MDAwMDQwODU5ODAxMDAwMDAwMDA0NDc4Cis6MTAxQjkwMDA4MkIwMDEwMDAwMDAwMDQxODZCMDAxMDAwMDFDMDA0MzNCCis6MTAxQkEwMDA4NkQ4MDEwMDAwMDBBNjQxODU1MDAxMDA3MDAzMDA0MTY1Cis6MTAxQkIwMDA4M0UwMDAwMDZFMDMwMDQwODEzMjAxMDAwMDAwMDA0ODE1Cis6MTAxQkMwMDA4NUUwMDEwMEQwMTQyRjQ2ODQ5NDAxMDAyMDAwMDA0MkRCCis6MTAxQkQwMDA2MDk5MDEwMEMwMDAwMDQwNjE5OTAxMDAwMDAwODA0MDUwCis6MTAxQkUwMDA4MUIyMDEwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTAxQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTAxQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAxQzEwMDA4MUIyMDAwMDA3MDAwMDQ1ODA4ODAxMDAwMDAwMDA0M0Y5Cis6MTAxQzIwMDA4QkYwMDEwMDAwMDQwMDQwODM5ODAxMDA4NTAzQTA0MTZGCis6MTAxQzMwMDA4MTUwMDAwMDgzMDMwMDQxODJFODAwMDAwMDAwODA0MUUxCis6MTAxQzQwMDA4RUMwMDEwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTAxQzUwMDA4MUIyMDAwMDAwMDAwMDQwNDlCMTAxMDAwMDAyMDA0MEQ0Cis6MTAxQzYwMDA4Mzk4MDEwMDAwMzkwMDQwNDU5OTAxMDAwMDAwMDA0MEMwCis6MTAxQzcwMDBGMUIxMDEwMDhCMDNBMjQxODM1MDAwMDAwMDAwMDA0MDNECis6MTAxQzgwMDA4NUIwMDEwMDBCMDAwMDQ0ODJGNDAxMDAxQTE1MDBBNjgzCis6MTAxQzkwMDA4NkIwMDEwMDcwMTUwMDQwNDU5OTAxMDAwMDA4MDA0MDIxCis6MTAxQ0EwMDBGMTk5MDEwMDAwMDAwMDQyRjBCMTAxMDAwMDM5MDA0MDRDCis6MTAxQ0IwMDBFMTk5MDEwMDA0MDAwMDQwNjE5OTAxMDA3MDE1MDA0M0EyCis6MTAxQ0MwMDA2Mjk5MDEwMDk1MDNBODQwODEzMjAwMDA5NzAzMjI1QUNGCis6MTAxQ0QwMDA3MzdEMDAwMDdBMDAwMDQwNjE5OTAxMDA5ODAzQThCMTZCCis6MTAxQ0UwMDA3RTMxMDAwMDAwMDgwMDQyODRDODAxMDA5MDAzQTI0MTM4Cis6MTAxQ0YwMDA4MzUwMDAwMDAwMDA4MDQwODFCMjAxMDAwNDAwMDA0MEQ5Cis6MTAxRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTAxRDEwMDA4MUIyMDAwMDU4MTUyRDQwOERCMDAxMDBEMDE0MkRGMDc3Cis6MTAxRDIwMDA4OEIwMDEwMDAwMDAwMDQwOEZCMDAxMDAwMTAwMDBBNjUzCis6MTAxRDMwMDA5MEIwMDEwMDAwRjgwMDQ4OTA5ODAxMDAwMDAwMDA0NUI0Cis6MTAxRDQwMDA5M0IwMDEwMDAwMDAwMEZBOEFCMDAxMDA4MDAzMDA0MDU3Cis6MTAxRDUwMDA4MTMyMDEwMDAyMDAwMEE2ODBCMDAxMDBBQzAzMjI0MEU1Cis6MTAxRDYwMDA4MjZDMDAwMEIwMDMwMDQwODEzMjAxMDA1ODAzMDA0MDQzCis6MTAxRDcwMDA4MTMyMDEwMDAwMDAwMDQxOERDMDAxMDBCNTAzMjI1RkU3Cis6MTAxRDgwMDA4RDZDMDAwMEE3MDNBMjQxOTM1MDAwMDBBNTAzMDA0MDAyCis6MTAxRDkwMDA4MUIyMDAwMEZGMDcwMDQ3ODQ4ODAxMDAwMDAwQTY0MEQwCis6MTAxREEwMDA4MUIyMDAwMEVEOUYwMDQ3ODAzMDAxMDAwMDAyMDA0NzMzCis6MTAxREIwMDA4RUM4MDEwMEIwMDMwMDQwODFCMjAwMDAwMDAwMDA0NDYyCis6MTAxREMwMDA1MEIzMDEwMEJCMDMyMDE4ODk2QzAwMDAwNDAwMDBBNjdBCis6MTAxREQwMDA4NEIwMDEwMDIwMDAwMEE2ODZCMDAxMDAwMDEwMDA0MDgxCis6MTAxREUwMDA1NTlCMDEwMEJFMDMwMDQwODFCMjAwMDAwNDAwMDBBNjI0Cis6MTAxREYwMDA4NEIwMDEwMDIwMDAwMEE2ODZCMDAxMDAwMDEwMDA0MDYxCis6MTAxRTAwMDA1NTlCMDEwMDAwMDAwMDQyNTBEMzAxMDAwMDAwMDBBOEQzCis6MTAxRTEwMDA0RkIzMDEwMDAwMDAwMDQzNEVEMzAxMDA2RTAzMDA0MEE5Cis6MTAxRTIwMDA4MTMyMDEwMDgyMDMwMDQyODAzMDAxMDBCMDAzMDA0MDkzCis6MTAxRTMwMDA4MTMyMDEwMEM3MDMyMkE3OEY2QzAwMDA1QTAzMDA0MEMzCis6MTAxRTQwMDA4MTMyMDEwMEM0MDMwMDQwODFCMjAwMDAwMDAwODA0MEU0Cis6MTAxRTUwMDA4MUIyMDEwMEM4MTQyRUJCODVCMDAxMDAwMDAwMDBFRTY1Cis6MTAxRTYwMDA4MkIwMDEwMDAwMDAwMDQxRTBCMTAxMDAwMDAwMDBBMkNBCis6MTAxRTcwMDBBMEIzMDEwMDAwMDAwMDQ0QTVCMzAxMDBFMTlGMDBDQTI3Cis6MTAxRTgwMDBBNzMzMDEwMEUwOUYwMDQwODFCMjAwMDAwNDAwMDA0MDQxCis6MTAxRTkwMDA4MUIyMDAwMEQ2MDMyMjQyNzU2RjAwMDBEODAzMjI0MUIwCis6MTAxRUEwMDA3NTZGMDAwMERBMDMxRUNBODEzMjAwMDBEQzAzMUZDQTBFCis6MTAxRUIwMDA4MTMyMDAwMDAwMDAwMENBQzlCMTAxMDBERDlGMDA0MjZDCis6MTAxRUMwMDA3NUIzMDAwMDAwMDAwMENBQ0RCMTAxMDBERDlGMDA0MUU0Cis6MTAxRUQwMDA3NUIzMDAwMDAwMDAwMENBQ0ZCMTAxMDBERDlGMDA0MEQzCis6MTAxRUUwMDA3NUIzMDAwMDAwODEwMEE2QzZCMTAxMDBERDlGMDA0MDZGCis6MTAxRUYwMDA4MUIyMDAwMDAwODAwMEE2QzZCMTAxMDBERDlGMDA0MDU1Cis6MTAxRjAwMDA3NUIzMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTAxRjEwMDA4MUIyMDAwMDQ1MDEwMDREOTMzMDAxMDA0NTAxMDA0RUEzCis6MTAxRjIwMDA5MzMwMDEwMDQ1MDEwMDRDOTMzMDAxMDBFQzlGMDA0MENDCis6MTAxRjMwMDA4MTMyMDEwMEREOUYwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTAxRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAxRjUwMDA4MUIyMDAwMDU0OTUwMDQwNDU5OTAxMDBERDlGMDBDQTAwCis6MTAxRjYwMDBFNUIxMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAxRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAxRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAxRjkwMDA4MUIyMDAwMENDMTQyRTQwODdCMDAxMDAwMDAwMDBBMkU2Cis6MTAxRkEwMDBBMEIzMDEwMDE1MDQwMDQzQjIzMzAxMDAwMDAwNjhEQTU5Cis6MTAxRkIwMDA4OUIwMDEwMDdDMDAwMDQwOEI5ODAxMDAwMDAwMDA1MEI3Cis6MTAxRkMwMDA4OUYwMDEwMDAwMDAwMDQxODlEMDAxMDAwMzAwMDA0NEI1Cis6MTAxRkQwMDA4ODhDMDEwMDAwMDAwMDQ0ODdDMDAxMDAwMDAwMDA0MTFGCis6MTAxRkUwMDBBNUIzMDEwMDE1MDQwMDQzQjIzMzAxMDAwMDAwMDBEQTdDCis6MTAxRkYwMDBGMUIxMDEwMDAwMDAwMDQ0ODdDMDAxMDAwMDAwMDA0MTcxCis6MTAyMDAwMDBBNUMzMDEwMDBCMDQyMjQ0ODk1MDAwMDAwQjA0MjI0NEE0Cis6MTAyMDEwMDA4QjUwMDAwMEZBMDNBMjUwQTU2RjAwMDAwMDAwMDA0MkEwCis6MTAyMDIwMDBBNUUzMDEwMDAwMDAwMENBQTdCMzAxMDBFMTlGMDBCQkM3Cis6MTAyMDMwMDA4NTMwMDEwMENDMTQyRUQyOTVDMzAxMDBBRTAzMDBDQjM1Cis6MTAyMDQwMDBBM0M5MDEwMDAwMDAwMDIwNDJCMTAxMDAwMDAwMDA1MEJGCis6MTAyMDUwMDA4MUIwMDEwMDA4MDRBMjQxODE1MDAwMDAwNzA0QTJGMkVGCis6MTAyMDYwMDA4MDMwMDAwMEZBMDMwMDQwQTVCMzAwMDAwMDAwMDA0MkU5Cis6MTAyMDcwMDBBNUUzMDEwMDAwMDAwMENBQTdCMzAxMDBFMTlGMDBCQjc3Cis6MTAyMDgwMDA4NTMwMDEwMEUwOUYwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTAyMDkwMDA4MUIyMDAwMDAwMDAwMEQ5MkJCMTAxMDAwMDEwMDA0MDA3Cis6MTAyMEEwMDA4Mzk4MDEwMERCMDAwMDQwODEzMjAxMDBGRkZGMDA5NEIzCis6MTAyMEIwMDBCNDhCMDEwMDAwMDA4MDQwODFCMjAxMDAwMDAwMDBEOTEzCis6MTAyMEMwMDAyQkIxMDEwMDAwMTAwMDQwODM5ODAxMDBERDAwMDA0MEFBCis6MTAyMEQwMDA4MTMyMDEwMDAwMDA4MDk0QjRCMzAxMDAwNDAwMDA0MDhDCis6MTAyMEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAyCis6MTAyMEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYyCis6MTAyMTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUxCis6MTAyMTEwMDA4MUIyMDAwMDAwMDAwMEQ5MkJCMTAxMDAwMDAwMDBEQUZDCis6MTAyMTIwMDAyN0IxMDEwMDA2QzAwMDQwMkQ5OTAxMDBERTAwMDA0MEVCCis6MTAyMTMwMDA4MTMyMDEwMDAwMTAwMDQwODM5ODAxMDAwMkM0MDA0MTc4Cis6MTAyMTQwMDAyQzk5MDEwMERFMDAwMDQwODEzMjAxMDAwMDQwMDA0MDc3Cis6MTAyMTUwMDA4Mzk4MDEwMDA1ODIwMDQxMkM5OTAxMDBERTAwMDA0MEI3Cis6MTAyMTYwMDA4MTMyMDEwMDJEMDQ4MDk0ODAzMjAwMDAwQzAxMDA0MDc3Cis6MTAyMTcwMDA4MTMyMDEwMDI4MDQwMDQwODFCMjAwMDAwNDgwMDA0MDQ4Cis6MTAyMTgwMDAyRDk5MDEwMERFMDAwMDQwODEzMjAxMDAwMDAwODA0MEY2Cis6MTAyMTkwMDA4MUIyMDEwMDMxMDQwMDEyMTBDOTAwMDAwMDQ4ODA0MEUzCis6MTAyMUEwMDAwQjk4MDEwMEMwNDk4MDQwMEI5ODAxMDA4MDRCODA0MDkzCis6MTAyMUIwMDAwQjk4MDEwMDQwNEQ4MDQwMEI5ODAxMDAwMDRGODA0MDdCCis6MTAyMUMwMDAwQjk4MDEwMEMwNTA4MDQwMEI5ODAxMDA4MDUyODA0MDY1Cis6MTAyMUQwMDAwQjk4MDEwMDQwNTQ4MDQwMEI5ODAxMDAwMDU2ODA0MDRECis6MTAyMUUwMDAwQjk4MDEwMEMwNTc4MDQwMEI5ODAxMDA4MDU5ODA0MDM3Cis6MTAyMUYwMDAwQjk4MDEwMDQwNUI4MDQwMEI5ODAxMDAwMDVEODA0MDFGCis6MTAyMjAwMDAwQjk4MDEwMEMwNUU4MDQwMEI5ODAxMDA4MDYwODA0MDA4Cis6MTAyMjEwMDAwQjk4MDEwMDQwNjI4MDQwMEI5ODAxMDAwMDY0ODA0MEYwCis6MTAyMjIwMDAwQjk4MDEwMEMwNjU4MDQwMEI5ODAxMDA4MDY3ODA0MERBCis6MTAyMjMwMDAwQjk4MDEwMDQwNjk4MDQwMEI5ODAxMDAwMDZCODA0MEMyCis6MTAyMjQwMDAwQjk4MDEwMEMwNkM4MDQwMEI5ODAxMDA4MDZFODA0MEFDCis6MTAyMjUwMDAwQjk4MDEwMDQwNzA4MDQwMEI5ODAxMDAwMDcyODA0MDk0Cis6MTAyMjYwMDAwQjk4MDEwMEMwNzM4MDQwMEI5ODAxMDA4MDc1ODA0MDdFCis6MTAyMjcwMDAwQjk4MDEwMDQwNzc4MDQwMEI5ODAxMDAwMDc5ODA0MDY2Cis6MTAyMjgwMDAwQjk4MDEwMEMwN0E4MDQwMEI5ODAxMDA4MDdDODA0MDUwCis6MTAyMjkwMDAwQjk4MDEwMDQwN0U4MDQwMEI5ODAxMDAwNDAwMDA0MDM0Cis6MTAyMkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQwCis6MTAyMkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMwCis6MTAyMkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIwCis6MTAyMkQwMDA4MUIyMDAwMDU5MDQwMDEyMTBDOTAwMDAwMDgwODA0MDQzCis6MTAyMkUwMDAwQjk4MDEwMDAwODI4MDQwMEI5ODAxMDAwMDg0ODA0MDIwCis6MTAyMkYwMDAwQjk4MDEwMDAwODY4MDQwMEI5ODAxMDAwMDg4ODA0MDA4Cis6MTAyMzAwMDAwQjk4MDEwMDAwOEE4MDQwMEI5ODAxMDAwMDhDODA0MEVGCis6MTAyMzEwMDAwQjk4MDEwMDAwOEU4MDQwMEI5ODAxMDAwMDkwODA0MEQ3Cis6MTAyMzIwMDAwQjk4MDEwMDAwOTI4MDQwMEI5ODAxMDAwMDk0ODA0MEJGCis6MTAyMzMwMDAwQjk4MDEwMDAwOTY4MDQwMEI5ODAxMDAwMDk4ODA0MEE3Cis6MTAyMzQwMDAwQjk4MDEwMDAwOUE4MDQwMEI5ODAxMDAwMDlDODA0MDhGCis6MTAyMzUwMDAwQjk4MDEwMDAwOUU4MDQwMEI5ODAxMDAwMEEwODA0MDc3Cis6MTAyMzYwMDAwQjk4MDEwMDAwQTI4MDQwMEI5ODAxMDAwMEE0ODA0MDVGCis6MTAyMzcwMDAwQjk4MDEwMDAwQTY4MDQwMEI5ODAxMDAwMEE4ODA0MDQ3Cis6MTAyMzgwMDAwQjk4MDEwMDAwQUE4MDQwMEI5ODAxMDAwMEFDODA0MDJGCis6MTAyMzkwMDAwQjk4MDEwMDAwQUU4MDQwMEI5ODAxMDAwMEIwODA0MDE3Cis6MTAyM0EwMDAwQjk4MDEwMDAwQjI4MDQwMEI5ODAxMDAwMEI0ODA0MEZGCis6MTAyM0IwMDAwQjk4MDEwMDAwQjY4MDQwMEI5ODAxMDAwMEI4ODA0MEU3Cis6MTAyM0MwMDAwQjk4MDEwMDAwQkE4MDQwMEI5ODAxMDAwMEJDODA0MENGCis6MTAyM0QwMDAwQjk4MDEwMDAwQkU4MDQwMEI5ODAxMDAwNDAwMDA0MEYzCis6MTAyM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTAyM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVGCis6MTAyNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTAyNDEwMDA4MUIyMDAwMDAwMDAwMDQwODdCMTAxMDAwMDAwMDA0MEQwCis6MTAyNDIwMDA5N0IwMDEwMDAwMDAwMDRCODBCMTAxMDAwMTAwMDBBNjQwCis6MTAyNDMwMDA4MkIxMDEwMDgyMDQ4NTQxOTc0MDAwMDAwMDAwMDA0MDA1Cis6MTAyNDQwMDA5N0IxMDEwMDAwMDAwMDQwOTdCMDAxMDAwMDAwMDA0QjcwCis6MTAyNDUwMDA5MEIxMDEwMDAxMDAwMEE2OTJCMTAxMDA4NzA0ODU0MUZFCis6MTAyNDYwMDA5NzQwMDAwMDAwMDA4MDQwODFCMjAxMDAwNDAwMDA0MDVECis6MTAyNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAyNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAyNDkwMDA4MUIyMDAwMDkwMDQ2MDQwODEzMjAwMDAwMDAwMDAxMjEwCis6MTAyNEEwMDA4MEIxMDEwMEZGRkZGMDRCODI4OTAxMDA5MzA0NjA0MDdFCis6MTAyNEIwMDA4MTMyMDAwMDAwMDAwMDRBODBCMTAxMDAwMTAwRjBBNjU2Cis6MTAyNEMwMDA4MkIxMDEwMDk2MDQ2MDQwODEzMjAwMDBGRkZGMDA0QkEyCis6MTAyNEQwMDA4NDg5MDEwMDAwMDBGMEMyMjRCMDAxMDAwMDAwMDA0QTFECis6MTAyNEUwMDA5MEIxMDEwMEZGRkY4MDRCOTI4OTAxMDAwMDAwMDA0QTdCCis6MTAyNEYwMDA5MEIxMDEwMDAxMDA4MEE2OTJCMTAxMDBGRkZGMDA0QkU2Cis6MTAyNTAwMDA5NDg5MDEwMDAwMDA4MENBOTRCMDAxMDAwNDAwMDA0MERBCis6MTAyNTEwMDA4MUIyMDAwMDEwMDAwMDRFOThFNDAxMDAwMDAwMDAwN0E2Cis6MTAyNTIwMDA5ODk0MDEwMDAwMDAwMDQzOTlFMDAxMDAwMDAwMDA4MDQxCis6MTAyNTMwMDA5ODk0MDEwMDAwMDAwMDQ5OTlFMDAxMDAwMDAwMDA0QzVGCis6MTAyNTQwMDA4ODk0MDEwMEE2MDQ0NzQwODEzMjAwMDBBRDA0MjIyMDk3Cis6MTAyNTUwMDA4NzZGMDAwMDAwMDAxRjQwODFCMjAxMDAwMDAwMDA0MEIyCis6MTAyNTYwMDA4MUIyMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDA0MDgzCis6MTAyNTcwMDA4MUIyMDEwMEE2MDQwMDQwODFCMjAwMDAwMDAwMUY4MDZCCis6MTAyNTgwMDA4NkIzMDEwMEIwMDQyMjRGNzc3RDAwMDBDMDA0MDA0MEY0Cis6MTAyNTkwMDA4MTMyMDEwMDAwMDAwMDRGNjFCMTAxMDAwMDAwMDA0NEUxCis6MTAyNUEwMDA2MkIxMDEwMEIxMDRBODQwODEzMjAwMDBCODA0MjI0QjlFCis6MTAyNUIwMDA4OTdDMDAwMEI2MDQyMjRGNzc3RDAwMDBDMDA0MDA0MEYzCis6MTAyNUMwMDA4MTMyMDEwMDAwMDAwMDQ1NjJCMTAxMDBCNjA0QTg0MDVDCis6MTAyNUQwMDA4MTMyMDAwMDAwMDA4MDIwODdCMzAxMDAwNDAwMDA0MDI5Cis6MTAyNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTAyNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTAyNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTAyNjEwMDA4MUIyMDAwMDAwMDAwMDUwOTlCMDAxMDA2RjAwMDA0MDNFCis6MTAyNjIwMDA2MTk5MDEwMEMxMDRBOEIxNTIzMzAwMDBDNjA0MjI0QkQ1Cis6MTAyNjMwMDA1MzdGMDAwMDZGMDAwMDQwNjE5OTAxMDBDNDA0QThCMUZECis6MTAyNjQwMDA3RTMxMDAwMEMxMDRBMjQxOTk1MDAwMDAwMDAwQTI0RjU5Cis6MTAyNjUwMDA3N0ZEMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTAyNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTAyNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTAyNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTAyNjkwMDA4MUIyMDAwMDEwMDAwMDRFOThFNDAxMDAwMDAwMDAwNzI1Cis6MTAyNkEwMDA5ODk0MDEwMDAwMDAwMDQzOTlFMDAxMDAwMDAwMDA4MEMwCis6MTAyNkIwMDA5ODk0MDEwMDAwMDAwMDQ4OTlFMDAxMDBENjA0MDA0QzA1Cis6MTAyNkMwMDA4ODk0MDAwMEQ2MDQ0NzQwODEzMjAwMDBERDA0MjIyMEI3Cis6MTAyNkQwMDA4NzZGMDAwMDAwMDAxRjQwODFCMjAxMDAwMDAwMDA0MDMxCis6MTAyNkUwMDA4MUIyMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDA0MDAyCis6MTAyNkYwMDA4MUIyMDEwMEQ2MDQwMDQwODFCMjAwMDAwMDAwMUY4MEJBCis6MTAyNzAwMDA4NkIzMDEwMEUwMDQyMjRGNzc3RDAwMDBGMDA0MDA0MDEyCis6MTAyNzEwMDA4MTMyMDEwMDAwMDAwMDRGNjFCMTAxMDAwMDAwMDA0NDVGCis6MTAyNzIwMDA2MkIxMDEwMEUxMDRBODQwODEzMjAwMDBFODA0MjI0QUJECis6MTAyNzMwMDA4OTdDMDAwMEU2MDQyMjRGNzc3RDAwMDBGMDA0MDA0MDExCis6MTAyNzQwMDA4MTMyMDEwMDAwMDAwMDQ1NjJCMTAxMDBFNjA0QTg0MEFBCis6MTAyNzUwMDA4MTMyMDAwMDAwMDA4MDIwODdCMzAxMDAwNDAwMDA0MEE3Cis6MTAyNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTAyNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTAyNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTAyNzkwMDA4MUIyMDAwMDAwMDAwMDUwOTlCMDAxMDA2RjAwMDA0MEJECis6MTAyN0EwMDA2MTk5MDEwMEYxMDRBOEIxNTIzMzAwMDBGNjA0MjI0QUY1Cis6MTAyN0IwMDA1MzdGMDAwMDZGMDAwMDQwNjE5OTAxMDBGNDA0QThCMTRDCis6MTAyN0MwMDA3RTMxMDAwMEYxMDRBMjQxOTk1MDAwMDAwMDAwQTI0RkE4Cis6MTAyN0QwMDA3N0ZEMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTAyN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTAyN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTAyODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTAyODEwMDA4MUIyMDAwMDdCMDAwMDQwNjE5OTAxMDAwMDA1QThCMTcxCis6MTAyODIwMDA4MDMwMDAwMDEyMDUxRDQwODAzMjAwMDA0MDE4MDA0MDNBCis6MTAyODMwMDA0OTk5MDEwMDA0MDAwMEE2ODZCMDAxMDAxMDA1QTI0MERECis6MTAyODQwMDA4NjA0MDAwMERFOUY5QzQwODAzMjAwMDBGRkZGMDA0MEI1Cis6MTAyODUwMDA4ODg4MDEwMDMwMDUwMDUwNDczMTAxMDAzNjAwMDA0NEVGCis6MTAyODYwMDA4OENDMDEwMDBDMDU1MjQwODEzMjAwMDAzMDA1MDA0MDQ4Cis6MTAyODcwMDA0NzMxMDEwMDAwMDAwMDQxODlCMDAxMDAzMDA1MDA0OEU3Cis6MTAyODgwMDA0NzMxMDEwMDMwMDUwMDA1NDczMTAxMDBERTlGMDA0MDVGCis6MTAyODkwMDA4MUIyMDAwMDI4MDAwMDQwNDc5OTFCMDBERTlGMDA0MUU0Cis6MTAyOEEwMDBFMUMxMUEwMDc4MTgwMDQwNDk5OTFCMDAxOTA1MjI1NDBCCis6MTAyOEIwMDA4MTdDMUEwMDE0MDU0MjQwODEzMjFBMDAwMDgyMDBCMzY0Cis6MTAyOEMwMDA2N0RGMUIwMDAwMDAxQTQ0OTM5MzFCMDAyODAwMDA0MEEwCis6MTAyOEQwMDA0Nzk5MUIwMDMwMDUwMDQxODkzMDAxMDAyNzA1MEY0MDUyCis6MTAyOEUwMDA4MDMyMDAwMEZGN0YwMDQwODg4ODAxMDAzMDA1MDA1MEUyCis6MTAyOEYwMDA0NzMxMDEwMDM2MDAwMDQ0ODhDQzAxMDAxRjA1OTk0MDkzCis6MTAyOTAwMDA4MDMyMDAwMDAwMDAwMDQ4ODlEMDAxMDAyMTA1OUI0MDcyCis6MTAyOTEwMDA4MDMyMDAwMDAwMDAwMDRDODlEMDAxMDAyMzA1MUY0NEQ0Cis6MTAyOTIwMDA4MDMyMDAwMDMwMDUwMDQwNDczMTAxMDAwMDAwMDA0MUM2Cis6MTAyOTMwMDA4OUIwMDEwMDMwMDUwMDQ4NDczMTAxMDAzMDA1MDA1OERBCis6MTAyOTQwMDA0NzMxMDEwMERFOUYwMDQwODFCMjAwMDAxMDAwMDA0MENFCis6MTAyOTUwMDA4NkY0MDEwMDZGMDAwMDQzODY4ODAxMDBERTlGMjYwNTkzCis6MTAyOTYwMDA0NzMxMDAwMDMwMDUwMDQxODkzMDAxMDBERTlGMDA0MDAyCis6MTAyOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTAyOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTAyOTkwMDA4MUIyMDAwMDAwMDBBMDQ0RjA0MTAxMDAwMDAwMDA0MEFFCis6MTAyOUEwMDA4MUIyMDEwMDAwMDA4MDQxRTFDMTAxMDAwNDAwMDA0MDRCCis6MTAyOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTAyOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTAyOUQwMDA4MUIyMDAwMDRDMDEwMDA3OTEzMDAxMDAwMDAwQTI0MENDCis6MTAyOUUwMDA5N0VDMDAwMDAwMDA4MDA1OTFDMDAxMDAwNDAwMDA0MDQ5Cis6MTAyOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTAyQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTAyQTEwMDA4MUIyMDAwMDRDMDEwMDQwODEzMjAxMDA0NDA1QTI0MDE3Cis6MTAyQTIwMDA5NzZDMDAwMDNBMDAwMDQwQjM5QjAxMDA0NTA1MDA0MDUwCis6MTAyQTMwMDA4MUIyMDAwMDQwMDAwMDQwQjM5QjAxMDAxMDA0MDA0MDQwCis6MTAyQTQwMDA4MTMyMDEwMDAwMDAwMERBRjVCMTAxMDAxMDA0MDA0MkZCCis6MTAyQTUwMDBCMzQzMDEwMDAwMDAwMERBRjVCMTAxMDAxMDA0MDA0MkE4Cis6MTAyQTYwMDBCMzQzMDEwMDAwMDAwMERBRjVCMTAxMDA0RTAwMDA0MDYwCis6MTAyQTcwMDBCMzlCMDEwMDEwMDQwMDQwODEzMjAxMDAwODAwMDBEQTFECis6MTAyQTgwMDBGN0Y1MDEwMDUwMDAwMDQwOTE5ODAxMDAwMDAwMDA0NzU4Cis6MTAyQTkwMDA4RkIwMDEwMDEwMDQwMDQ4QjIzMzAxMDAwMDAwMDBEQURBCis6MTAyQUEwMDBGN0IxMDEwMDA4MDAwMERBRjdGNTAxMDAwMDAwMDA0MjZDCis6MTAyQUIwMDA5MUMwMDEwMDUwMDVBMjQxOEY1MDAwMDAwMDAwMDA0MTZDCis6MTAyQUMwMDA0NUQxMDEwMDA4MDAwMDQwQjM5QjAxMDAxMDA0MDA0MDA0Cis6MTAyQUQwMDA4MTMyMDEwMDAwMDAwMERBRkRCMTAxMDAwQTAwMDA0MDZGCis6MTAyQUUwMDBCMzlCMDEwMDEwMDQwMDQwODEzMjAxMDAwMDAwMDBEQUI1Cis6MTAyQUYwMDBGREIxMDEwMDFBMDAwMDQwQjM5QjAxMDAxMDA0MDA0MDJBCis6MTAyQjAwMDA4MTMyMDEwMDAwMDAwMERBRkRCMTAxMDAxODAwMDA0MDMwCis6MTAyQjEwMDBCMzlCMDEwMDEwMDQwMDQwODEzMjAxMDAwMDAwMDBEQTg0Cis6MTAyQjIwMDBGREIxMDEwMDM4MDUwMDQwODEzMjAxMDAxRTAwMDA0ODVGCis6MTAyQjMwMDBCMkNCMDEwMDEwMDQwMDQwODEzMjAxMDAwMDAwMDBEQTM1Cis6MTAyQjQwMDA5MUMwMDEwMDAwMDAwMDQ4QjJDQjAxMDAxMDA0MDA0MDE5Cis6MTAyQjUwMDA4MTMyMDEwMDAwMDA2RURBOEZCMDAxMDAwMjAwMDA0OEVGCis6MTAyQjYwMDBCMkNCMDEwMDEwMDQwMDQwODEzMjAxMDAwMDAwMDBEQTA1Cis6MTAyQjcwMDBGREIxMDEwMDA0MDAwMDQ4QjJDQjAxMDAxMDA0MDA0MDg4Cis6MTAyQjgwMDA4MTMyMDEwMDAwMDA4MERBRkRCMTAxMDAwNDAwMDA0MDQ0Cis6MTAyQjkwMDA4MUIyMDAwMDdBMDUyMjQ1RkQ3RjAwMDA0MDE2MDA0MDBBCis6MTAyQkEwMDA0NTk5MDEwMERCOUYwMDQwNDkzMTAxMDAwODAwMDA0OEMxCis6MTAyQkIwMDBCMkNCMDEwMDE1MDQwMDQwODEzMjAxMDA3ODA1QTI0MDJCCis6MTAyQkMwMDA4RjZDMDAwMDdEMDUyMjIwQjU2RjAwMDA3QTA1MDA0MDYzCis6MTAyQkQwMDA4MUIyMDAwMERBOUYwMDQwODEzMjFGMDA3RDA1MjI0MDUzCis6MTAyQkUwMDA5NzZDMUUwMDdBMDU0MjQwODEzMjFFMDAwMDAwMDA0RkEzCis6MTAyQkYwMDA2NzkzMUYwMERGOUYwMDU4Njc5MzFFMDA1NDE2MDA0MDI0Cis6MTAyQzAwMDA0Nzk5MUYwMDAwMDAwMEZFRjRCMTFGMDAwMDAwMDA0MEMzCis6MTAyQzEwMDA4MUIyMUYwMDAwMDAwMEZFRjRCMTAxMDAwMDAwMDA0MDdFCis6MTAyQzIwMDA4MUIyMDEwMDAwMDAwMEZFRjRCMTAxMDAwMDAwMDA0MDhDCis6MTAyQzMwMDA4MUIyMDEwMDAwMDAwMEZFRjRCMTAxMDAwMDAwMDA0MDdDCis6MTAyQzQwMDA4MUIyMDEwMDAwMDAwMEZFRjRCMTAxMDAwMDAwMDA0MDZDCis6MTAyQzUwMDA4MUIyMDEwMDAwMDAwMEZFRjRCMTAxMDAwMDAwMDA0MDVDCis6MTAyQzYwMDA4MUIyMDEwMDAwMDAwMEZFRjRCMTAxMDA0NjAwMDA0MDA2Cis6MTAyQzcwMDBCMzlCMDEwMDEwMDQwMDQwODEzMjAxMDAwODAwMDBEQTFCCis6MTAyQzgwMDBGN0Y1MDEwMDQ4MDAwMDQwOTU5ODAxMDAwMDAwMDA0NDVECis6MTAyQzkwMDA5N0IwMDEwMDEwMDQwMDRBQjIzMzAxMDAwMDAwMDBEQUNFCis6MTAyQ0EwMDBGN0IxMDEwMDA4MDAwMERBRjdGNTAxMDAwMDAwMDA0MjZBCis6MTAyQ0IwMDA5NUMwMDEwMDkwMDVBMjQxOTc1MDAwMDAyQTAwMDA0MEY1Cis6MTAyQ0MwMDBBNTlCMDEwMDQwMTYwMDQwQTE5QjAxMDAwMDAwMDBDQTI2Cis6MTAyQ0QwMDBBN0IzMDEwMEUxOUYwMEJCODUzMDAxMDBFMDlGMDA0MEU5Cis6MTAyQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTAyQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTAyRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTAyRDEwMDA4MUIyMDAwMEI4MDUyMjQ1RkQ3RjAwMDBFMDE1MDA0MEFCCis6MTAyRDIwMDA0Nzk5MDEwMDFBMDAwMEEyODBEQzAxMDAwMDAwMDA1MDU5Cis6MTAyRDMwMDBGMUIxMDEwMEYwMTUwMDQwRjE5OTAxMDAwMDAwMDBDQTU2Cis6MTAyRDQwMDBGMUIxMDEwMDA3MDAwMDQwNjE5OTAxMDAyMDAwMDA0MDNFCis6MTAyRDUwMDA2MkREMDEwMEE3MDVBOEJCRTEzMTAwMDAwMDAwMDA1MEMyCis6MTAyRDYwMDA4M0IwMDEwMEFBMDVBMjQxODM1MDAwMDBBOTA1QTJGMjg4Cis6MTAyRDcwMDA4MjMwMDAwMDRDMDEwMDQwODEzMjAxMDBCMDA1QTI0MEM5Cis6MTAyRDgwMDA5NzZDMDAwMDNBMDAwMDQwQjM5QjAxMDBCMTA1MDA0MDgxCis6MTAyRDkwMDA4MUIyMDAwMDQwMDAwMDQwQjM5QjAxMDBGMDE1MDA0MEVDCis6MTAyREEwMDA0Mzk5MDEwMDEwMDQwMDQwODEzMjAxMDBCODA1QTJGQUU1Cis6MTAyREIwMDBCNDZGMDAwMDEwMDQwMDQyQjM0MzAxMDBCODA1QTJGQTRBCis6MTAyREMwMDBCNDZGMDAwMDEwMDQwMDQyQjM0MzAxMDBCQjA1MjJGQUI3Cis6MTAyREQwMDBCNDZGMDAwMEI4MDU0MjQwODEzMjIwMDAwMDAwMDA0RTcwCis6MTAyREUwMDA2NzkzMjEwMERGOUYwMDU4Njc5MzIwMDA0MDE2MDA0MDQyCis6MTAyREYwMDA0NTk5MjEwMERCOUYwMDQwNDkzMTIxMDBGNjE1MDA0MDM0Cis6MTAyRTAwMDA0Mzk5MjEwMDVDMTYwMDQwNDU5OTIxMDAwMDAwNkVGQUFDCis6MTAyRTEwMDA4RUIwMjEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDBGRUUxCis6MTAyRTIwMDBGNEIxMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDBGRThBCis6MTAyRTMwMDBGNEIxMDEwMDAwMDAwMDQwODFCMjAxMDAwMDAwMDBGMDg4Cis6MTAyRTQwMDBCNEIzMDEwMEM5MDVBMjQwOEY2QzAwMDBGQzE1MjAyMDFFCis6MTAyRTUwMDBFMUIxMDEwMENFMDUwMDQwODFCMjI0MDBEQTlGMDA0MEJDCis6MTAyRTYwMDA4MTMyMjUwMENFMDUyMjQwOTc2QzI0MDBDQjA1NDI0MERDCis6MTAyRTcwMDA4MTMyMjQwMDAwMDAwMDRGNjc5MzI1MDBERjlGMDA1ODM3Cis6MTAyRTgwMDA2NzkzMjQwMDM4MDUwMDQwODEzMjI1MDAxRTAwMDA0ODY5Cis6MTAyRTkwMDBCMkNCMjUwMDEwMDQwMDQwODEzMjAxMDBEMzA1MjI1MDNFCis6MTAyRUEwMDBCNTZGMDAwMDAwMDAwMDUwOTFDMDAxMDAwMDAwMDA0ODE0Cis6MTAyRUIwMDBCMkNCMDEwMEY2MTUwMDQwNDM5OTAxMDAyMDA0MDBGMjU2Cis6MTAyRUMwMDBCNDMzMDEwMDAyMDAwMDQ4QjJDQjAxMDBGODE1MDA0MDA1Cis6MTAyRUQwMDA0Mzk5MDEwMDIwMDQwMEYyQjQzMzAxMDAwNDAwMDA0OENCCis6MTAyRUUwMDBCMkNCMDEwMEZBMTUwMDQwNDM5OTAxMDAyMDA0MDBGMjIyCis6MTAyRUYwMDBCNDMzMDEwMDA4MDAwMDQ4QjJDQjAxMDBGQzE1MDA0MENCCis6MTAyRjAwMDA0Mzk5MDEwMDAwMDAwMEYwOTRCMDAxMDBGRkZGMDA0QTY3Cis6MTAyRjEwMDBCNDhCMDEwMDIwMDQwMDQwODEzMjAxMDAwQTAwMDA0ODA3Cis6MTAyRjIwMDBCMkNCMDEwMDEwMDAwMDRBQjRGNzAxMDAyMDA0MDA0MEI5Cis6MTAyRjMwMDA4MTMyMDEwMDM4MDUwMDQwODEzMjAxMDAxRTAwMDA0ODQ2Cis6MTAyRjQwMDBCMkNCMDEwMDEwMDQwMDQwODEzMjAxMDBFOTA1MjI1MDlCCis6MTAyRjUwMDBCNTZGMDAwMEVBMDUwMDUwQjVCMzAwMDAwMDAwMDA0MDY2Cis6MTAyRjYwMDBCNUIzMDEwMDIwMDQwMDQwODEzMjAxMDBFMDlGMDA0MDIxCis6MTAyRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAyRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAyRjkwMDA4MUIyMDAwMDAwMTYwMDQwNDc5OTAxMDAzMDMxMDA0MDI2Cis6MTAyRkEwMDBGNTk5MDEwMDMyMzMwMDQwRjU5OTAxMDAzNDM1MDA0MEI1Cis6MTAyRkIwMDBGNTk5MDEwMDM2MzcwMDQwRjU5OTAxMDAzODM5MDA0MDk1Cis6MTAyRkMwMDBGNTk5MDEwMDQxNDIwMDQwRjU5OTAxMDA0MzQ0MDA0MDU5Cis6MTAyRkQwMDBGNTk5MDEwMDQ1NDYwMDQwRjU5OTAxMDA0NzQ4MDA0MDM5Cis6MTAyRkUwMDBGNTk5MDEwMDQ5NEEwMDQwRjU5OTAxMDAyQzAwMDA0MDg0Cis6MTAyRkYwMDA4Mzk4MDEwMDAwMDAwMDQwRjdCMTAxMDBGQzA1QTI0MUU4Cis6MTAzMDAwMDA4MzUwMDAwMDgwMTYyRTA2ODNCMDAxMDAzNjAwMDBGQkJFCis6MTAzMDEwMDBGNkE5MDEwMEZGMDVBMjQxODM1MDAwMDAyMjAwMDA0MEY0Cis6MTAzMDIwMDA4Mzk4MDEwMDAwMDAwMEZCRjZCMTAxMDAwMjA2QTI0MUY2Cis6MTAzMDMwMDA4MzUwMDAwMDYyMDAwMDQwOTU5ODAxMDBEQzlGMDA0MDMyCis6MTAzMDQwMDA4MTMyMDEwMDAwMTYyRDA2ODNCMDAxMDA4MDE2MDA0MDc5Cis6MTAzMDUwMDA0NTk5MDEwMDVDMDAwMEZCRjZBOTAxMDAwODA2QTI0MUE5Cis6MTAzMDYwMDA4MzUwMDAwMDAwMDAwMDcwRjlCMTAxMDAwMDAwMDA3MTAxCis6MTAzMDcwMDBGOUIxMDEwMDAwMDAwMDcyRjlCMTAxMDAwMDAwMDA3MzE1Cis6MTAzMDgwMDBGOUIxMDEwMDAwMDAwMDc0RjlCMTAxMDA1NDAwMDA0MEUyCis6MTAzMDkwMDA5NTk4MDEwMERDOUYwMDQwODEzMjAxMDAwMDAwMDA3MDIzCis6MTAzMEEwMDA5NUIwMDEwMDE0MDYyMjcwQjU2RjAwMDAwMDAwODA0MTQ5Cis6MTAzMEIwMDA5N0IwMDEwMDAwMDA4MDQwOTdCMDAxMDAwNDAwMDA0MDdDCis6MTAzMEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEyCis6MTAzMEQwMDA4MUIyMDAwMDQ1NjcwMEE2RTBCMjAxMDAwMTIzMDA3MDQ0Cis6MTAzMEUwMDBFMTlBMDEwMENERUYwMEE2RTJCMjAxMDA4OUFCMDA3MUM4Cis6MTAzMEYwMDBFMzlBMDEwMEJBOTgwMEE2RTRCMjAxMDBGRURDMDA3Mjc3Cis6MTAzMTAwMDBFNTlBMDEwMDMyMTAwMEE2RTZCMjAxMDA3NjU0MDA3MzgxCis6MTAzMTEwMDBFNzlBMDEwMEQyQzMwMEE2RThCMjAxMDBGMEUxMDA3NDEyCis6MTAzMTIwMDBFOTlBMDEwMDgwMTYwMDRBNDRDOTAxMDAwMDAwMDAwNzI2Cis6MTAzMTMwMDA4MUIwMDEwMDAwMDAwMDRBODBEMDAxMDAwMDAwMDA0MDgyCis6MTAzMTQwMDBGN0IxMDEwMDI1MDZBMjQxODE1MDAwMDA4MDE2MDA0QTE3Cis6MTAzMTUwMDA0NEM5MDEwMEZDMTYyQTQ3RTdCNTAxMDAwMzAwMDA0QUY0Cis6MTAzMTYwMDBFOEU1MDEwMDAwMDAwMDQwOERCMDAxMDA1MDAzMDA0MDgwCis6MTAzMTcwMDBBMzk5MDEwMDgwMTYzRDQ2OERFMDAxMDAwMDAwMDA1MDNCCis6MTAzMTgwMDA4OUIwMDEwMDAwMDAwMEZDNDBCMDAxMDAwMDAwMDA0MUQ3Cis6MTAzMTkwMDBBM0MxMDEwMDJFMDZBMjQxODk1MDAwMDAwMDAwMDA3MDZBCis6MTAzMUEwMDBFQkIyMDEwMDAwMDAwMDcxRURCMjAxMDAwMDAwMDA3MkZFCis6MTAzMUIwMDBFRkIyMDEwMDAwMDAwMDczRjFCMjAxMDAwMDAwMDA3NEUyCis6MTAzMUMwMDBGM0IyMDEwMDAwMDAwMDQwODNCMDAxMDAwRjAwMDA0MTk1Cis6MTAzMUQwMDA4MDg4MDEwMDUwMDMwMDQwQTJDOTAxMDA0QjA2QTA1MEE2Cis6MTAzMUUwMDA4MzZDMDAwMDBEMDAwMDQwOThDODAxMDAwMDAwMDA0RkYzCis6MTAzMUYwMDA5OTg0MDEwMDUwMDMwMDRDQTJDOTAxMDAwMDAwMDAyMDg2Cis6MTAzMjAwMDA4NkIwMDEwMDA4MDAwMDQwOThDODAxMDAwMDAwMDA0RjhGCis6MTAzMjEwMDA5OTg0MDEwMDUwMDMwMDRDQTJDOTAxMDAwMDAwMDAyMDY1Cis6MTAzMjIwMDA4NkE0MDEwMDAyMDAwMDQwOThDODAxMDAwMDAwMDA0RjgxCis6MTAzMjMwMDA5OTg0MDEwMDUwMDMwMDRDQTJDOTAxMDAwMDAwMDAyMDQ1Cis6MTAzMjQwMDA4NkE0MDEwMDUwMDMwMDQwQTJDOTAxMDAwMDAwMDA0MzExCis6MTAzMjUwMDA0MEE0MDEwMDAxMDAwMDIwODhFNDAxMDAwMDAwMDA1RjlDCis6MTAzMjYwMDA0MUYwMDEwMDAwMDAwMDQ0NDA5NDAxMDAwNTAwMDA3NTk5Cis6MTAzMjcwMDA4OUU0MDEwMDFCMDAwMDc1ODVGNDAxMDAwMDAwMDA0NDkyCis6MTAzMjgwMDA4NDk0MDEwMDU1MDZBMzUzODM2QzAwMDAwMDAwMDA3NjZGCis6MTAzMjkwMDA4OUIwMDEwMDAwMDAwMDc3ODk4NDAxMDAwMDAwMDA3NkY5Cis6MTAzMkEwMDA4QkIwMDEwMDAwMDAwMDIwOEJBNDAxMDAwMDAwMDA3ODFBCis6MTAzMkIwMDA4Qjg0MDEwMDY0MDYwMDQ1ODg5NDAwMDAyNzAwMDA0MUNCCis6MTAzMkMwMDA4MENFMDEwMDVBMDZBQTQwODEzMjAwMDAwMDAwMDA3NjNDCis6MTAzMkQwMDA4OUIwMDEwMDAwMDAwMDc3ODlBNDAxMDA2NDA2MDA3ODJECis6MTAzMkUwMDA4OUE0MDAwMDNCMDAwMDQxODBDRTAxMDA1NzA2QUE0MDlGCis6MTAzMkYwMDA4MTMyMDAwMDAwMDAwMDc2ODlCMDAxMDAwMDAwMDA3N0Y0Cis6MTAzMzAwMDA4OTg0MDEwMDAwMDAwMDc2OEJCMDAxMDAwMDAwMDA3ODg1Cis6MTAzMzEwMDA4Qjg0MDEwMDAwMDAwMDQ1ODg5NDAxMDAwMDAwMDA3N0M0Cis6MTAzMzIwMDA4QkIwMDEwMDAwMDAwMDc4OEI4NDAxMDA2NDA2MDA0NTJBCis6MTAzMzMwMDA4ODk0MDAwMDAwMDAwMDQ0ODRDMDAxMDAwMDAwMDA3OTZGCis6MTAzMzQwMDA4NUMwMDEwMDAwMDAwMDIwODRDMDAxMDA2QjA2QTM1MzZCCis6MTAzMzUwMDA4MzZDMDAwMDgyNUEwMEE2ODRDMDAxMDA5OTc5MDA0MjYzCis6MTAzMzYwMDA4NEM4MDEwMDc4MDYwMDQwODFCMjAwMDAyNzAwMDA0MUI3Cis6MTAzMzcwMDA4MENFMDEwMDcwMDZBQTQwODEzMjAwMDBEOTZFMDBBNkZFCis6MTAzMzgwMDA4NEMwMDEwMEExRUIwMDQyODRDODAxMDA3ODA2MDA0MDFGCis6MTAzMzkwMDA4MUIyMDAwMDNCMDAwMDQxODBDRTAxMDA3NTA2QUE0MENBCis6MTAzM0EwMDA4MTMyMDAwMDFCOEYwMEE2ODRDMDAxMDBEQ0JDMDA0MkZCCis6MTAzM0IwMDA4NEM4MDEwMDc4MDYwMDQwODFCMjAwMDA2MkNBMDBBNkZECis6MTAzM0MwMDA4NEMwMDEwMEQ2QzEwMDQyODRDODAxMDA3ODA2MDA0MEQ0Cis6MTAzM0QwMDA4MUIyMDAwMDAwMDAwMDc4RjNCMjAxMDAwMDAwMDA3NzI1Cis6MTAzM0UwMDBGMUIyMDEwMDFFMDAwMDc2ODlFNDAxMDAwMjAwMDA3NkJGCis6MTAzM0YwMDBFRkY2MDEwMDAwMDAwMDQ0RUU5NjAxMDAwMDAwMDA3NUE5Cis6MTAzNDAwMDBFREIyMDEwMDAwMDAwMDQyRUFCMjAxMDAwMDAwMDA0MUZDCis6MTAzNDEwMDA4M0MwMDEwMDRGMDAwMDQxODBDRTAxMDAzNzA2MkE0MEUyCis6MTAzNDIwMDA4MTMyMDAwMDAwMDAwMDc1RTFDMjAxMDAwMDAwMDA3NjVBCis6MTAzNDMwMDBFM0MyMDEwMDAwMDAwMDc3RTVDMjAxMDAwMDAwMDA3ODRGCis6MTAzNDQwMDBFN0MyMDEwMDAwMDAwMDc5RTlDMjAxMDAyQjA2ODE0MUJBCis6MTAzNDUwMDA4RDQwMDAwMDAwMDA4MDQwODFCMjAxMDAwNDAwMDA0MDY3Cis6MTAzNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTAzNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTAzNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTAzNDkwMDA4MUIyMDAwMDAwMDAwMDUwRkQ5MzAxMDA0MDE2MDA0MDgyCis6MTAzNEEwMDA0NTk5MDEwMERCOUYwMDQwNDkzMTAxMDAwODAwMDA0OEI4Cis6MTAzNEIwMDBCMkNCMDEwMDE1MDQwMDQwODEzMjAxMDBCOTA2MjI0MDYwCis6MTAzNEMwMDA4RjZDMDAwMERBOUYwMDQwODEzMjAxMDBCOTA2QTI0MEYzCis6MTAzNEQwMDA5NzZDMDAwMDVFMTYwMDQwNDM5OTAxMDA3QzE2MjBGNkIwCis6MTAzNEUwMDBFMEIxMDEwMDAwMDAwMDQwMzFCMzAxMDA5RDA2MjI0RjExCis6MTAzNEYwMDA4RjdDMDAwMDAwMDAwMDUxRkQ5MzAxMDA5RjA2MjI0MEQ4Cis6MTAzNTAwMDA4RjdDMDAwMEEzMDYwMDU0RkQ5MzAwMDBBMTA2MjI0MjE4Cis6MTAzNTEwMDA4RjdDMDAwMDAwMDAwMDUyRkQ5MzAxMDBBMzA2MjI0MUIxCis6MTAzNTIwMDA4RjdDMDAwMDAwMDAwMDUzRkQ5MzAxMDBCNzA2MjI1MTdDCis6MTAzNTMwMDBGRDdGMDAwMDM4MDUwMDQwODEzMjAxMDAwQzAwMDA0ODhBCis6MTAzNTQwMDBCMkNCMDEwMDEwMDQwMDQwODEzMjAxMDBCMjA2QTI0MDVCCis6MTAzNTUwMDBCNTZGMDAwMDFFMDAwMDQ4QjJDQjAxMDAxMDA0MDA0ODA3Cis6MTAzNTYwMDA5NjMwMDEwMDAwMDAwMERBOTdDMDAxMDAwNDAwMDA0QjEzCis6MTAzNTcwMDBCMkNCMDEwMDEwMDQwMDQwODEzMjAxMDAwRTAwMDA0ODZGCis6MTAzNTgwMDBCMkNCMDEwMDIwMDQwMDQwODEzMjAxMDAwQzAwMDA0ODUxCis6MTAzNTkwMDBCMkNCMDEwMDAwMDAwMDMwQjVCMzAxMDAyMDA0MDA0MEIwCis6MTAzNUEwMDA4MTMyMDEwMDBFMDAwMDQ4QjJDQjAxMDAxMDA0MDA0MDNGCis6MTAzNUIwMDA4MTMyMDEwMEI2MDYyMjQwQjU2RjAwMDBCQTA2MDA1NDAxCis6MTAzNUMwMDBGRDkzMDAwMDAwMDAwMDUxRkQ4MzAxMDAxQzAwMDBGRTdGCis6MTAzNUQwMDA3RkQ5MDEwMEJBMDZBNjQwODEzMjAwMDAwMDAwMDA1NUU0Cis6MTAzNUUwMDBGRDkzMDEwMDAwMDA4MDQwODFCMjAxMDAwNDAwMDA0MDEyCis6MTAzNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTAzNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTAzNjEwMDA4MUIyMDAwMEU3OUYwMDQwODEzMjAxMDBDNDA2MjI1Q0I1Cis6MTAzNjIwMDAxRjdDMDAwMEUzOUYwMDg4MUNCMDAwMDBFOTlGMDA1QzQ1Cis6MTAzNjMwMDAxRjAwMDEwMDAwMDAyRTA1NDhCMTAxMDAwMDAwMDA0MEZECis6MTAzNjQwMDBFMUIxMDEwMDA0MDAyRDAzNDhCMTAxMDAwMDAwMDBGMEM5Cis6MTAzNjUwMDAzQ0IwMDEwMDI4MDAwMDE0MDJDODAxMDAwMDAwMDAwMTc1Cis6MTAzNjYwMDAzNEIwMDEwMDAwMDAyRDA1MzJCMDAxMDAyMjAwMDAwNTM5Cis6MTAzNjcwMDAwQUM4MDEwMDEwMDAwMDAzNDhDOTAxMDAwMDAwMDBGODVBCis6MTAzNjgwMDAxOEIwMDEwMDAwMDAwMEY4MDRCMDAxMDAwMDAwMDBGOENDCis6MTAzNjkwMDAwRUIwMDEwMDBDMDAwMEE0MENDODAxMDBFQTlGMDA0MDFECis6MTAzNkEwMDA4MTMyMDEwMDAwMDAwMDQwMjNCMDAxMDAwQTA3MjIwMTFFCis6MTAzNkIwMDA4MDMyMDAwMDAwMDAzQzQ0MjNFMDAxMDAwMDAwMkVBNDAyCis6MTAzNkMwMDA4MEIwMDEwMDAwMDAwMDEwNDhDMTAxMDBEOTA2QTMwNzI2Cis6MTAzNkQwMDAwMjZDMDAwMERBMDY2ODAxMUFCMDAwMDAwMDAwNjgwN0ZBCis6MTAzNkUwMDAxQUIwMDEwMDAwMDAwMDBEMDJEMDAxMDAwMDAwMDAwNTJBCis6MTAzNkYwMDBGMEIxMDEwMDAwMDAwMDBDRjBCMTAxMDAwMDAwMDAwMjc4Cis6MTAzNzAwMDBFMEIxMDEwMDAwMDAwMDBEMEFDMDAxMDBFQzA2MjI0MEZCCis6MTAzNzEwMDAwMzZDMDAwMEU2MDYyMjQyMjM2QzAwMDAwMDAwMDA0MTFBCis6MTAzNzIwMDAyM0MwMDEwMDAwMDAwMDQ3NjFCMTAxMDAyMDAwMDBBNDk3Cis6MTAzNzMwMDA2MkREMDEwMDIzMDcyODQwODEzMjAwMDBFMzA2MDA0MERCCis6MTAzNzQwMDA4MUIyMDAwMDAwMDAwMDEwODBDMDAxMDAwMDAwMDA0N0FFCis6MTAzNzUwMDA2MUIxMDEwMDAwMDAwMDQwNjJCMTAxMDBFODA2QTg0MDJDCis6MTAzNzYwMDAyMzMwMDAwMEUzOUYwMDg4MUNCMDAwMDAyMzA3MDA0MEM2Cis6MTAzNzcwMDA4MUIyMDAwMDAwMDAwMDEwODBDMDAxMDAwMDAwMDA0NzdFCis6MTAzNzgwMDA2MUIxMDEwMDAwMDAwMDQwNjJCMTAxMDBFRTA2QTg0MEY2Cis6MTAzNzkwMDAyMzMwMDAwMEUzOUYwMDg4MUNCMDAwMDAyMjAwMDAxOUM1Cis6MTAzN0EwMDA0OEM5MDEwMDAwMDAyRDE0NDhDMTAxMDAwRjAwMDBGMkJCCis6MTAzN0IwMDAzQTg4MDEwMDAwMDAwMDQyM0JFMDAxMDAwRTAwMDAxNEM2Cis6MTAzN0MwMDAwMkM4MDEwMDAwMDAwMDFEMDJDMDAxMDBGQTA2MjMxQTExCis6MTAzN0QwMDAwMjUwMDAwMDAwMDAwMDQ2MDNDMDAxMDAyMzA3MDAwMTYyCis6MTAzN0UwMDAzNEMwMDAwMDBDMDAyRDFENDhDMTAxMDBGMDAwMDBGMkEzCis6MTAzN0YwMDAzMDg4MDEwMDAwMDAwMDQyMzFGMDAxMDAwMDAwMDAxNDk4Cis6MTAzODAwMDAwMkIwMDEwMDAwMDAwMDFEMDJDMDAxMDAwMDAwMDAxODBECis6MTAzODEwMDAwMkMwMDEwMDAyMDcyMjFBMDI1MDAwMDAyMzA3MDAwMTIzCis6MTAzODIwMDAzNEMwMDAwMDIyMDAwMDE5NDhDOTAxMDAwMjAwMkQxNDE0Cis6MTAzODMwMDA0OEMxMDEwMDAwMDAwMEY2MTRCMDAxMDAwMDAwMDAxREE2Cis6MTAzODQwMDAxNEQwMDEwMDAwMDAwMDE4MTREMDAxMDAwMDAwMDAxRTc4Cis6MTAzODUwMDAyNEIwMDEwMDEyMDAwMDE3MTBDODAxMDAyMzA3MDAxQTRECis6MTAzODYwMDAxMEMwMDAwMDAwMDAzQzQ0MjNFMDAxMDAwMDAwMDBBNDYwCis6MTAzODcwMDA4NkIwMDEwMDAwMDAyRTEwNDhDMTAxMDAwRjA3QTMxMkZFCis6MTAzODgwMDAwRTZDMDAwMDEwMDc2MDA3MUFCMDAwMDAwMDAwNjAxMjA0Cis6MTAzODkwMDAxQUIwMDEwMDAwMDA2ODBEMTY5NDAxMDBGRkZGMDAwQjM0Cis6MTAzOEEwMDAxNkQ4MDEwMDAwMDAwMDA4RjBCMTAxMDAwMDAwMDAwQzczCis6MTAzOEIwMDBGMEIxMDEwMDAwMDAwMDAyRTBCMTAxMDAwMDAwMDAxMEMyCis6MTAzOEMwMDA4NkMwMDEwMDAwMDAwMDQ2NjFCMTAxMDAyMDAwMDA0M0Y1Cis6MTAzOEQwMDA2MkREMDEwMDE3MDdBODVDMUYxMDAwMDA0MDA3MjIwREUxCis6MTAzOEUwMDAxNDUwMDAwMDQwMDcyMjBEMjQ1MDAwMDAwMDAwMDAwRDdECis6MTAzOEYwMDAxMEMwMDEwMDFFMDcyMjQyMjM2QzAwMDAyMzA3MDA0MTc0Cis6MTAzOTAwMDAyM0MwMDAwMDAwMDAwMDQ2NjFCMTAxMDA0MDAwMDAxMDJCCis6MTAzOTEwMDA2MkREMDEwMDFGMDdBODVDMUYwMDAwMDBFMzlGMDA4ODE0Cis6MTAzOTIwMDAxQ0IwMDAwMDAwMDAwMDQwMjNCMDAxMDAzRjA3QTIwREMyCis6MTAzOTMwMDAwRTUwMDAwMDJFMDcyMjQ2MUY3QzAwMDAwMDAwMDA0NkFCCis6MTAzOTQwMDAxRjgwMDEwMDMwODAwMDEwNDJDOTAxMDAyQzA3MjJGMkM0Cis6MTAzOTUwMDA2NDA2MDAwMDAwMDAwMDQ3NjFCMTAxMDA0MDAwMDAxMDUzCis6MTAzOTYwMDA2MkREMDEwMDI5MDdBODQwODEzMjAwMDBFMzlGMDA4ODQyCis6MTAzOTcwMDAxQ0IwMDAwMDIwODAwMDAzNDY5OTAxMDAwMDAwMDA1Rjk5Cis6MTAzOTgwMDBFMTkxMDEwMDAwMDAyRDA2NDhCMTAxMDAwMDAwMDBGODlGCis6MTAzOTkwMDAxOEIwMDEwMDAwMDAwMEY4MDRCMDAxMDAzMzA3MUZGMDY4Cis6MTAzOUEwMDAwRTMwMDAwMEQzMDYwMDRDMERDMDAwMDAwMDAwMkU1RjVBCis6MTAzOUIwMDAwRjgwMDEwMEQzMDYyMzA3MTQ2QzAwMDAzMDAwMDAxMEI0Cis6MTAzOUMwMDA0OEM5MDEwMDI0MDAwMDQwRjE5OTAxMDAwMDAwMDAwM0YzCis6MTAzOUQwMDBGMEIxMDEwMDAwMDAwMDAwRjBCMTAxMDAwMDAwMDAxNjhECis6MTAzOUUwMDBGMEIxMDEwMDI0MDAwMDAwMDBDODAxMDAwMDAwMDA0NzAxCis6MTAzOUYwMDA2MUIxMDEwMDIwMDAwMEE0NjJERDAxMDAzQzA3QTg0NjdGCis6MTAzQTAwMDAxRjEwMDAwMEQzMDYwMDAzMENCMDAwMDBEMzA2MDAwRDA5Cis6MTAzQTEwMDAxOEMwMDAwMDVGMDdBMjQ0MUY3QzAwMDAwMDAwMDAxOUNFCis6MTAzQTIwMDAwQUIwMDEwMDIyMDAwMDA1NDhDOTAxMDAwQTAwMkQxNDU3Cis6MTAzQTMwMDA0OEMxMDEwMDAyMDAyMDQwRTVCMTAxMDAwNDAwMjA0MDFGCis6MTAzQTQwMDBFNUIxMDEwMDBEMDAyRDFENDhDMTAxMDAwOTAwMDBGMzgyCis6MTAzQTUwMDAzODg4MDEwMDBEMDAyMDUwRTdCMTAxMDAwNDAwMkQ0MDFFCis6MTAzQTYwMDAzRkIwMDEwMDAwMDAwMEY0MzJCMDAxMDAwNDAwMjA0MDJCCis6MTAzQTcwMDBFMUIxMDEwMDIyMDAwMDA1NDhDOTAxMDAwMDAwMkQxNDM5Cis6MTAzQTgwMDA0OEMxMDEwMDAyMDAwMDFEOTRGNDAxMDAwMDAwMDA0MDQ0Cis6MTAzQTkwMDA5MUIwMDEwMDUyMDdBMEZDOTA0MDAwMDAwMDAwMDA0MURFCis6MTAzQUEwMDA5MUMwMDEwMDUwMDdBMjQxOTU1MDAwMDAwMDAwMDBBNDAxCis6MTAzQUIwMDA5NkIwMDEwMDA0MDAyRTA1NDhCMTAxMDAwMDAwMDA0ODQ2Cis6MTAzQUMwMDBGMEIxMDEwMDAwMDAwMDRCNDhCMTAxMDAwMDAwMDAxOEY3Cis6MTAzQUQwMDA0OEMxMDEwMDAyMDAwMDE4OTRGNDAxMDAwMDAwMkQxOEY0Cis6MTAzQUUwMDA5MEIwMDEwMDVDMDdBMEZDOTA0MDAwMDAwMDAwMDA0MTg1Cis6MTAzQUYwMDA5MUMwMDEwMDVBMDdBMjQxOTU1MDAwMDAwMDAwMDA0ODAzCis6MTAzQjAwMDBFMEIxMDEwMDEwMDAyMDQwRTVCMTAxMDAwNDAwMkQwNUU2Cis6MTAzQjEwMDA0OEIxMDEwMDAwMDAwMEY4ODBCMDJEMDAwMDAwMDBGMDY2Cis6MTAzQjIwMDAxNkIwMkQwMDIyMDAwMDA1NDhDOTJEMDAwMDAwMDAxNDI5Cis6MTAzQjMwMDA0OEMxMkQwMDY0MDc0MzMwM0QwNzJDMDAwMDAwMDA5RTYzCis6MTAzQjQwMDA4NUIwMkQwMDAwMDAxQjQxM0RDMzJEMDAwNDAwMjA0MjI0Cis6MTAzQjUwMDBFQ0IxMkQwMDAwMDAwMDFFODJCMDAxMDAwMjAwMkUxREZECis6MTAzQjYwMDA4MkMwMDEwMDAwMDA2NjE4ODJDMDAxMDAwMDAwMDA0MjBGCis6MTAzQjcwMDA4MEMwMDEwMDZFMDdBMDQxODA0NDAwMDAwMDAwMDA0MUE5Cis6MTAzQjgwMDA4MUMwMDEwMDEwMDAwMDQwOTJGNDAxMDAwQTAwMkUzMEI0Cis6MTAzQjkwMDA4MTg0MDEwMDcyMDc5MDQwOTI0MDAwMDAwMDAwMDA0MUMzCis6MTAzQkEwMDA5M0MwMDEwMDAwMDA2NjIwOTNBNDAxMDAwMDAwMDAxREU2Cis6MTAzQkIwMDA0OEMxMDEwMDA0MDAyMDE5RThCMTAxMDAwMDAwMDAxRTA2Cis6MTAzQkMwMDAxNkMwMDEwMDc4MDdBMDE5MTY0NDAwMDAwMDAwMDA0MTRCCis6MTAzQkQwMDAxN0MwMDEwMDBEMDAyRjFFMzJDMDAxMDA3RDA3QTI0MDVBCis6MTAzQkUwMDAxNTZDMDAwMDdDMDdBMDFDMTY0MDAwMDAwMDAwMDA0MTdFCis6MTAzQkYwMDAxN0MwMDEwMDAwMDA2M0YzMzg5NDAxMDAxMDAwMDAwNUI1Cis6MTAzQzAwMDA0OEM5MDEwMDA0MDAyRTFFOThCMDAxMDAwMDAwNjAxQThGCis6MTAzQzEwMDA5OEMwMDEwMDBDMDAyMDQwRTFCMTAxMDA4QjA3MjI0NjUyCis6MTAzQzIwMDAxRjdDMDAwMDAwMDAwMDQ2MUY4MDAxMDAzMDgwMDAxMDUzCis6MTAzQzMwMDA0MkM5MDEwMDg5MDcyMkYyNjQwNjAwMDAwMDAwMDA0NzIzCis6MTAzQzQwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA4NjA3QTg0MDVDCis6MTAzQzUwMDA4MTMyMDAwMEUzOUYwMDg4MUNCMDAwMDAyMDgwMDAwMzM4Cis6MTAzQzYwMDA0Njk5MDEwMDAwMDAwMDVGRTE5MTAxMDAzMDgwMDAxMEUyCis6MTAzQzcwMDA0NEM5MDEwMDEyMDAwMDFBRjBDOTAxMDAwMDAwMDAxNzM5Cis6MTAzQzgwMDBGMEIxMDEwMDEwMDAwMDA1RTBDOTAxMDAzMDAwMDAxMDkzCis6MTAzQzkwMDA4MEM4MDEwMDAwMDAwMDQ0NjFCMTAxMDAyMDAwMDA0MDI0Cis6MTAzQ0EwMDA2MkREMDEwMDkxMDdBODQwODEzMjAwMDA5QjA3MjI1QzgxCis6MTAzQ0IwMDAxRjdDMDAwMDAwMDAzQzQ0MjNFMDAxMDAwMDAwMkQxMEE4Cis6MTAzQ0MwMDA0OEMxMDEwMDlCMDcyMkYyNjQwNjAwMDAwMDAwMDA0Njg0Cis6MTAzQ0QwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA5ODA3QTg0MEJBCis6MTAzQ0UwMDA4MTMyMDAwMEUzOUYwMDg4MUNCMDAwMDBFQjlGMDA1QzY1Cis6MTAzQ0YwMDAxRjAwMDEwMDIwMDAyRjA1NDhCMTAxMDAwMDAwMDAwQjRCCis6MTAzRDAwMDBFNEIxMDEwMDAwMDAwMDUwMTdGMDAxMDBBMTA3OTBGMjlCCis6MTAzRDEwMDAxNjQwMDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwNjYyMEFFCis6MTAzRDIwMDAxN0E0MDEwMDEwMDAwMDE0MkFDODAxMDAwMDAwMDAxREEzCis6MTAzRDMwMDAyQUMwMDEwMDAwMDAwMDUwMkJFMDAxMDAwMDAwMDBGMjRBCis6MTAzRDQwMDAyQTk0MDEwMDMwODAwMDEwNDJDOTAxMDBBQzA3MjJGMjIxCis6MTAzRDUwMDA2NDA2MDAwMDAwMDAwMDQ0NjFCMTAxMDA0MDAwMDAxMDUyCis6MTAzRDYwMDA2MkREMDEwMEE5MDdBODQwODEzMjAwMDBFMzlGMDA4OEJFCis6MTAzRDcwMDAxQ0IwMDAwMDAwODAwMDE3MTBEQzAxMDBDOTA3MjI0MEMxCis6MTAzRDgwMDAxNTZDMDAwMEI0MDdBMjQ0MUY3QzAwMDAwMDAwMDA0NDMyCis6MTAzRDkwMDAxRjkwMDEwMEIzMDcyMjlGMTM2QzAwMDAwMjAwMDA4OEVGCis6MTAzREEwMDAxQ0NDMDEwMEU0OUYwMDQwODFCMjAwMDAwMDAwMDA0MUYzCis6MTAzREIwMDAzRkMzMDEwMEU2OUYwMDQwODEzMjAxMDBCNzA3QTI0MUU2Cis6MTAzREMwMDA4NzdDMDAwMDAwMDAwMDFFM0VDMDAxMDBDOTA3MjI0MEExCis6MTAzREQwMDAxNTZDMDAwMEJBMDcyMDFFMTQ2QzAwMDAwMDAwMDAwQUQ5Cis6MTAzREUwMDAzQ0IwMDEwMEU1OUYwMDFFMjQzMDAxMDBCRjA3MjIwOEZGCis6MTAzREYwMDAyRTMwMDAwMDAwMDAwMDUyMTFDMDAxMDAwMDAwMDAxQTI3Cis6MTAzRTAwMDAxMEMwMDEwMDIzMDcwMDQwMTdCMDAwMDBFNDlGMDA4OEE1Cis6MTAzRTEwMDAxQ0IwMDAwMEU1OUYwMDQwODEzMjAxMDBCQzA3QTIwOEYxCis6MTAzRTIwMDAyRTMwMDAwMDgwODAwMEE2MDRCMDAxMDAwNjAwMDA0MDkzCis6MTAzRTMwMDA4Nzk4MDEwMDAwODAwMDAzNDQ5OTAxMDAwNDAwMjIwNEQ3Cis6MTAzRTQwMDBFMDMxMDAwMEU4OUYwMDFGOEMzMDAxMDAwMDAwMDA0MEJFCis6MTAzRTUwMDAwRkIwMDEwMEUyOUYwMDVDMUY5MDAwMDAwMDgwMDAwMzkzCis6MTAzRTYwMDA0NDk5MDEwMDA0MDAyMjA0RTAzMTAwMDBFNjlGMDA0MDc0Cis6MTAzRTcwMDA4MTMyMDEwMENFMDdBMjQxODc3QzAwMDBDRjA3MDAxRURGCis6MTAzRTgwMDAzRUMwMDAwMDAwMDAwMDFGOENCMDAxMDAwMDAwMDA0MDk4Cis6MTAzRTkwMDAwNUIwMDEwMEU4OUYwMDQwMEYzMDAxMDBFMjlGMDA1Qzg4Cis6MTAzRUEwMDAxRjkwMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTAzRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTAzRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTAzRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTAzRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTAzRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTAzRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTAzRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTAzRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTAzRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTAzRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTAzRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTAzRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTAzRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTAzRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTAzRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTAzRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTAzRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MTAzRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDBGNzA3MDBCQzhECis6MTAzRkQwMDA4MEIyMDAwMDAzODAwMDQwODFCMjAwMDAwMzgwMDA0MEY2Cis6MTAzRkUwMDA4MUIyMDAwMDAzODAwMDQwODFCMjAwMDAwMzgwMDA0MEU1Cis6MTAzRkYwMDA4MUIyMDAwMDAzODAwMDQwODFCMjAwMDAwMzgwMDA0MEQ1Cis6MTA0MDAwMDA4MUIyMDAwMDAzODAwMDQwODFCMjAwMDAwMzgwMDA0MEM0Cis6MTA0MDEwMDA4MUIyMDAwMDMxODAwMDQwODFCMjAwMDAzNDgwMDA0MDU1Cis6MTA0MDIwMDA4MUIyMDAwMDM1ODAwMDQwODFCMjAwMDAwNDAwMDA0MEYxCis6MTA0MDMwMDA4MUIyMDAwMDFCODA4MTgwODAzMjAwMDAxNDg3QTI0MDgyCis6MTA0MDQwMDA5MTZGMDAwMDAwMDAwMDRDOTBCMzAxMDA1Qzk1MkVBMjFGCis6MTA0MDUwMDA4MEIwMDEwMEZGMDAwMDgwRjQ4OTAxMDA5MDk1MkFDODFCCis6MTA0MDYwMDBFNUIxMDEwMDAwMDAwMEExRjBCMTAxMDAwMDAwMDA0MDM2Cis6MTA0MDcwMDBGMEIxMDEwMDAwMDAwMEE0RjBCMTAxMDAwMDAwMDBEMDg4Cis6MTA0MDgwMDBGMEIxMDEwMDAwMDAwMEQxRjBCMTAxMDAwMDAwMDBEMjQ5Cis6MTA0MDkwMDBGMEIxMDEwMDAwMDAwMDRDRjBCMTAxMDAwMDAwMDBENEJDCis6MTA0MEEwMDBGMEIxMDEwMDAwMDAwMEQzRjBCMTAxMDAwMDAwMDBFRTBCCis6MTA0MEIwMDBGMEIxMDEwMDAwMDAwMDRFRjBCMTAxMDAwMDAwMDA0MDJFCis6MTA0MEMwMDA0NEIxMDEwMDE4ODAxMTgxOTgzMDAwMDAwMDAwNTE0MDc3Cis6MTA0MEQwMDA4MUIyMDEwMDFBODAxMTgyOTgzMDAwMDAwMDAwNTI0MDI1Cis6MTA0MEUwMDA4MUIyMDEwMDE0ODcwMDQ4RkQ5MzAwMDBCNjAzMDA0MDMwCis6MTA0MEYwMDBBMTk5MDEwMDIzODBBMjQyRkQ3RjAwMDAyMDgwMDA4MDYyCis6MTA0MTAwMDA4MDMyMDAwMDIyODAxMTgxODIzMDAwMDAyMjgwNTE0MEU0Cis6MTA0MTEwMDA4MUIyMDAwMDIyODAxMTgyODIzMDAwMDAyMjgwNTI0MDUxCis6MTA0MTIwMDA4MUIyMDAwMDJDODAwMDQ4RkQ5MzAwMDAyNzgwMDA4MEIxCis6MTA0MTMwMDA4MDMyMDAwMDI2ODBBMjUzMDc3QzAwMDAwMDAwNTE1MzBCCis6MTA0MTQwMDAwNzkwMDEwMDJBODAwMDUyMDc5MDAwMDAyOTgwQTI1MkE3Cis6MTA0MTUwMDAwNzdDMDAwMDAwMDA1MjUyMDc5MDAxMDAwMDAwMDA1MzRECis6MTA0MTYwMDAwNzkwMDEwMDAwMDAwMDQ4RkQ5MzAxMDAwMDAwMDA0Njk4Cis6MTA0MTcwMDBGMzkzMDEwMDVDOTUyRUEyNTJCMzAxMDBGRjAwMDA4MDcyCis6MTA0MTgwMDBGNDg5MDEwMDAwMDAwMDRDRTRCMTAxMDAwMDAwMDBBOTI2Cis6MTA0MTkwMDA0NUIxMDEwMDMwODAwMDRDODBCMjAwMDAwMDAwNDU0MDc1Cis6MTA0MUEwMDA4MUIyMDEwMDAwMDA1NTQwODFCMjAxMDBBRjgyMDU0MDlDCis6MTA0MUIwMDA0OUIxMDAwMEFGODIwNTQwNDlCMTAwMDAwMDAwMDU0MDUwCis6MTA0MUMwMDA0OUIxMDEwMDRDMDEwMDQwODEzMjAxMDAwMDAwMDA0QjY4Cis6MTA0MUQwMDBERUIyMDEwMDAwMDAwMDQwRkQ5MzAxMDAwMDAwMDA0ODM1Cis6MTA0MUUwMDBGRDgzMDEwMDAyMDAwMDQwOUI5QjAxMDAwMDAwMDBBNTMwCis6MTA0MUYwMDA5Q0IzMDEwMDQ4MDMwMDQwODEzMjAxMDA1ODk1MjA0NERGCis6MTA0MjAwMDBFMEIxMDEwMDA0OTQwMDQwNDM5OTAxMDAwMDAwMDBGMjc1Cis6MTA0MjEwMDAyNEIxMDEwMDAwMEMwMEVFOTY4ODAxMDAwMDAwMDA0QTY1Cis6MTA0MjIwMDA5N0YwMDEwMDQ0ODBBMjQzOTc2QzAwMDAwMDAwMDA0MjE4Cis6MTA0MjMwMDBGRDkzMDEwMDAwQzAwMEE2MzZCMTAxMDBEMDE0MDA0MDdCCis6MTA0MjQwMDA0Nzk5MDEwMDA1MDAwMDQwRjU5OTAxMDAwMDM4MDA0MDQxCis6MTA0MjUwMDBGNTk5MDEwMDAwMDYwMDQwRjU5OTAxMDAwMDAwMDA0MEJBCis6MTA0MjYwMDBGNTk5MDEwMDA1MTAwMDQwRjU5OTAxMDAwMjA5MDA0MDkwCis6MTA0MjcwMDBGNTk5MDEwMDA0MDAwMDQwRjU5OTAxMDA2MDAzMDA0MDM5Cis6MTA0MjgwMDA4MTMyMDEwMDg4MDMwMDQwODEzMjAxMDBBMDAzMDA0MDE4Cis6MTA0MjkwMDA4MTMyMDEwMEEyODIwMDQwODEzMjAxMDA5QTgyMDA0MEY2Cis6MTA0MkEwMDA4MTMyMDEwMDYwOTUyMDQwRTFCMTAxMDA3MDk1MjA0MDBECis6MTA0MkIwMDBFMUIxMDEwMDAwMDAwMDQ5REQ5MTAxMDAwMDAwMDA0MDczCis6MTA0MkMwMDA5MUIzMDEwMEY5OTUwMDQwODEzMjAxMDAwMDAwMDA0MEU3Cis6MTA0MkQwMDA4NUIzMDEwMDVDOTUyMDQwRTFCMTAxMDAyNzgyMDA0MEQ4Cis6MTA0MkUwMDA4MTMyMDEwMDkwMDYwMDQwODEzMjAxMDAwMDAwMDA1RjMxCis6MTA0MkYwMDAyRjgxMDEwMDhEODEwMDQwODEzMjAxMDBGRTk1MDA0MDM4Cis6MTA0MzAwMDA4MTMyMDEwMDAwMDA0NTQwODFCMjAxMDAwMDAwNTU0MEFCCis6MTA0MzEwMDA4MUIyMDEwMEREODIwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTA0MzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTA0MzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTA0MzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTA0MzUwMDA4MUIyMDAwMDI4MDAwMDQwNDc5OTAxMDBBRjgyMDA0MTZGCis6MTA0MzYwMDBFMUMxMDAwMDc4MTgwMDQwNDk5OTAxMDAxOTA1MjI1NDY0Cis6MTA0MzcwMDA4MTdDMDAwMDZDODA0MjQwODEzMjAwMDAwMDgyMDBCNEU5Cis6MTA0MzgwMDA2OURGMDEwMDAwMDAxQTQ0OTM5MzAxMDAyODAwMDA0MEY3Cis6MTA0MzkwMDA0Nzk5MDEwMDE4MDUwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTA0M0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTA0M0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBGCis6MTA0M0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZGCis6MTA0M0QwMDA4MUIyMDAwMDQwODIwMDQwODEzMjAxMDA3RDgwMjI0MDk1Cis6MTA0M0UwMDA5NzZDMDAwMDdBODA0MjQwODEzMjAwMDAwMDAwMDA0RjRDCis6MTA0M0YwMDA2OTkzMDEwMDM4ODEwMDU4Njk5MzAwMDA1NDE2MDA0MDA5Cis6MTA0NDAwMDA0Nzk5MDEwMDAwMDAwMEZFRjRCMTAxMDA4MDA1MDA0MDYyCis6MTA0NDEwMDA4MUIyMDAwMDgwODA0MjQwODEzMjAwMDAwMDAwMDA0RUU2Cis6MTA0NDIwMDA2OTkzMDEwMDM4ODEwMDU4Njk5MzAwMDA0MDE2MDA0MEVDCis6MTA0NDMwMDA0NTk5MDEwMDQwMDUwMDQwNDkzMTAxMDBGNjE1MDA0MDUyCis6MTA0NDQwMDA0Mzk5MDEwMDVDMTYwMDQwNDU5OTAxMDAwMDAwNkVGQTk2Cis6MTA0NDUwMDA4RUIwMDEwMEMxMDUwMDQwODFCMjAwMDAwNDAwMDA0MEEwCis6MTA0NDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTA0NDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTA0NDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTA0NDkwMDA4MUIyMDAwMDk2ODAwMDQwODFCMjAwMDA0MDgyMDA0MDVFCis6MTA0NEEwMDA4MTMyMDEwMDk2ODAyMjQwOTc2QzAwMDA5MzgwNDI0MDQ4Cis6MTA0NEIwMDA4MTMyMDAwMDAwMDAwMDRGNjk5MzAxMDAzODgxMDA1OEVDCis6MTA0NEMwMDA2OTkzMDAwMDM4MDUwMDQwODEzMjAxMDAxRTAwMDA0ODU5Cis6MTA0NEQwMDBCMkNCMDEwMEQwMDUwMDQwODFCMjAwMDAwNDAwMDA0MEQyCis6MTA0NEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTA0NEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTA0NTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTA0NTEwMDA4MUIyMDAwMDgzMDIwMDQwODFCMjAwMDBCODAyMDA0MDc2Cis6MTA0NTIwMDA4MUIyMDAwMEQ0OUYwMDQwODFCMjAwMDBENTlGMDA0MEJFCis6MTA0NTMwMDA4MUIyMDAwMEQ2OUYwMDQwODFCMjAwMDBENzlGMDA0MEFBCis6MTA0NTQwMDA4MUIyMDAwMDcyMDEwMDQxODFDMDAwMDA1NTAxNTE0ODU0Cis6MTA0NTUwMDBGRDkzMDAwMDU1MDE1MjQ4RkQ5MzAwMDA1NTAxNTU0OTU3Cis6MTA0NTYwMDBGRDgzMDAwMDU1MDE1NjRBRkQ4MzAwMDA1MDAxOTE4MUYyCis6MTA0NTcwMDA4MDMwMDAwMDU1MDE0NTQwODFCMjAwMDA1MDAxOTE4MjE5Cis6MTA0NTgwMDA4MDMwMDAwMDU1MDE0NjQwODFCMjAwMDAwMDAwMDA0MDJDCis6MTA0NTkwMDA4OUIwMDEwMDAwMDAwMEY4ODBCMDAxMDAwMDAwMDBGMEM4Cis6MTA0NUEwMDAxNkIwMDEwMDIyMDAwMDA1NDhDOTAxMDAwMDAwMDAxNEY3Cis6MTA0NUIwMDA0OEMxMDEwMEI0ODA0MzMwM0QwNzAwMDAwMDAwMDA5RTY4Cis6MTA0NUMwMDA4NUIwMDEwMDAwMDAxQjQxM0RDMzAxMDAwNDAwMjA0MkYyCis6MTA0NUQwMDBFQ0IxMDEwMDAwMDAwMDQwNDlCMTAxMDBBRTAzMDBDQjg2Cis6MTA0NUUwMDBBM0M5MDEwMDAwMDAwMDIwNDZCMTAxMDAwMDAwMDBEMjc0Cis6MTA0NUYwMDBGMUIxMDEwMDAwMDAwMEQzRjFCMTAxMDAwMDAwMDA0MjYwCis6MTA0NjAwMDBGMEIxMDEwMDAwMDAwMDQ1NjFCMTAxMDAyMDAwMDAyMDcwCis6MTA0NjEwMDA2MkREMDEwMDAwMDBBOEQwRTFCMTAwMDBCRjgwMDA0MEQxCis6MTA0NjIwMDA4MUIyMDAwMDAwMDAwMEE4OThCMDAxMDAwNDgwMDA0MEEyCis6MTA0NjMwMDA4QkIzMDAwMEIxMDMwMDQwQTE5OTAxMDBDNzgwQTI0MkUyCis6MTA0NjQwMDA5NzZGMDAwMDAwMDAwMDQ1QTFDMTAxMDAwMDAwMDAwMEJDCis6MTA0NjUwMDA4MEIwMDEwMDAwMDBBMjA0ODA5NDAwMDA4MDE1M0Y0MjU5Cis6MTA0NjYwMDA5N0UzMDEwMDAwMDAwMDQwNDlCMTAxMDAwMDAwNjAwMzMxCis6MTA0NjcwMDAwMjk0MDEwMDAwMDAwMDQwMDdCMDAxMDAwNDAwMDBDQkRDCis6MTA0NjgwMDA5OUNCMDEwMDAwMDAwMENDRjM4MzAxMDBEMTgwQTI0MjRECis6MTA0NjkwMDA5NzZGMDAwMDAwMDAwMENCRjM5MzAxMDBBRTAzMDBDQjQ2Cis6MTA0NkEwMDBBM0M5MDEwMDAwMDAwMDIwNDRCMTAxMDAwMDAwMDA0NDQzCis6MTA0NkIwMDBGMUIxMDEwMDAwMDAwMDAwRjBCMTAxMDAwMDAwMDAwNEIxCis6MTA0NkMwMDBGMEIxMDEwMDAwMDAwMEExRTBCMTAxMDAwNTAwMDA0MEQwCis6MTA0NkQwMDA2MTk5MDEwMDIwMDAwMDIwNjJERDAxMDBEODgwQTg0MDFGCis6MTA0NkUwMDA4MTMyMDAwMEY5MDIwMDIwNDIzMTAxMDAwMDAwQTI0MUE1Cis6MTA0NkYwMDAwNTZDMDEwMDAwMDA4MENCREI5MTAxMDAwMDAwMTk0MTM2Cis6MTA0NzAwMDA4QkIzMDEwMDYwMDAwMDQwNjE5OTAxMDBERTgwQThCMTE4Cis6MTA0NzEwMDA4QzMzMDAwMDYwMDAwMDQwNjE5OTAxMDBFMDgwQThCMTg2Cis6MTA0NzIwMDA5NDMzMDAwMEU2ODAxNEM2ODEzMjAwMDAxODAwMDBDNkYxCis6MTA0NzMwMDA4M0Y0MDEwMEY0ODIyMjRGODMwNDAwMDBDMjgwMDA0MDExCis6MTA0NzQwMDA4MUIyMDAwMEZGMDEwMEM2ODE4ODAxMDAwMDAwMDBDNkEwCis6MTA0NzUwMDA5N0EzMDEwMEMyODAxRjVDOTc1MzAwMDA1ODgyMUVDNkI5Cis6MTA0NzYwMDA4MTMyMDAwMDAwMDAyRjQzODFGMDAxMDBFQzgwMDA0MDA2Cis6MTA0NzcwMDAxMEM5MDAwMDM5ODEwMDQwODFCMjAwMDA2QTgxMDA0MDA4Cis6MTA0NzgwMDA4MUIyMDAwMDI0ODIwMENBNjNCMzAwMDA2MTgxMDA0MDRFCis6MTA0NzkwMDA4MUIyMDAwMDQ4ODEwMDREODNCMDAwMDA1MjgxMDA0RTdDCis6MTA0N0EwMDA2MUIxMDAwMDQxODEwMDQwODVCMDAwMDA0ODgxMDA0Q0FCCis6MTA0N0IwMDA4M0IwMDAwMDI0ODEwMDQwODVCMDAwMDBFMzgxMDA0MDA4Cis6MTA0N0MwMDA0OUIxMDAwMDcxODEwMDQwQzFCMTAwMDBERjgxMDA0MEFCCis6MTA0N0QwMDA4MUIyMDAwMDQxODEwMDQwODVCMDAwMDBGMDAzMDA0MDNDCis6MTA0N0UwMDA0OUIxMDAwMEY0ODIwMENBOUJCMzAwMDA3QjgxMDA0MDA1Cis6MTA0N0YwMDBDMUIxMDAwMDdGODEwMDQwQzFCMTAwMDA4NjgxMDA0MDRFCis6MTA0ODAwMDBDMUIxMDAwMDg3ODEwMDQwQzFCMTAwMDA4ODgxMDA0MDMzCis6MTA0ODEwMDBDMUIxMDAwMDg5ODEwMDQwQzFCMTAwMDA4QTgxMDA0MDFGCis6MTA0ODIwMDA4MUIwMDAwMDhBODEwMDQxODFCMDAwMDAxODgyMDA0MDAwCis6MTA0ODMwMDA4MUIyMDAwMDk3ODIwMEJCQUJCMzAwMDAyNTgyMDBDQUEyCis6MTA0ODQwMDBDRkIzMDAwMEM4MDMwMDQwNDlCMTAwMDBFODAzMDA0MEI2Cis6MTA0ODUwMDA4MUIyMDAwMDI2ODIwMDQwODFCMjAwMDBGNDgyMDA0MDU0Cis6MTA0ODYwMDA4MUIyMDAwMEUwMDMwMDQwODFCMjAwMDBGNDgyMDBDQTdGCis6MTA0ODcwMDA3N0IzMDAwMDQ5ODEwMDREODNCMDAwMDA1MDgxMDA0RUE1Cis6MTA0ODgwMDA2MUIxMDAwMDQxODEwMEJCODVCMDAwMDA0OTgxMDA0QzRFCis6MTA0ODkwMDA4M0IwMDAwMDQxODEwMEJCODVCMDAwMDAyNDgxMDBCQkQzCis6MTA0OEEwMDA4NUIwMDAwMDE2ODEwMDQwODFCMjAwMDBGNDgyMDBDQTg5Cis6MTA0OEIwMDA0REIzMDAwMDcwMDUwMDQwNDlCMTAwMDBBMDA1MDA0MDY0Cis6MTA0OEMwMDA0OUIxMDAwMDFDODEyMjQyOEY2RjAwMDAxRTgxMjI0MUVECis6MTA0OEQwMDA4RjZGMDAwMDIwODExRUNBODEzMjAwMDAyMjgxMUZDQTEyCis6MTA0OEUwMDA4MTMyMDAwMDAwMDAwMENBQzlCMTAxMDBGNDgyMDA0MjE4Cis6MTA0OEYwMDA4RkIzMDAwMDAwMDAwMENBQ0RCMTAxMDBGNDgyMDA0MTc2Cis6MTA0OTAwMDA4RkIzMDAwMDAwMDAwMENBQ0ZCMTAxMDBGNDgyMDA0MDY0Cis6MTA0OTEwMDA4RkIzMDAwMDAwODEwMEE2QzZCMTAxMDBGNDgyMDA0MDAwCis6MTA0OTIwMDA4MUIyMDAwMDAwODAwMEE2QzZCMTAxMDBGNDgyMDA0MDAwCis6MTA0OTMwMDA4RkIzMDAwMDc4MTgwMDQwNDk5OTAxMDAxMDAwMkY5Q0E3Cis6MTA0OTQwMDA4OUIwMDEwMDNCODEwMDQwMzkzMzAxMDAxODAwMkY5QkUyCis6MTA0OTUwMDA4OUIwMDEwMDNCODEwMDQwMzczMzAxMDAwMDAwMkY5QUVECis6MTA0OTYwMDA4OUIwMDEwMDNCODEwMDQwMzUzMzAxMDAwODAwMkY5OUQ4Cis6MTA0OTcwMDA4OUIwMDEwMDNCODEwMDQwMzMzMzAxMDAwMDgwMDBBRTZDCis6MTA0OTgwMDA0N0M5MDEwMDgwMDAwMDQwRjE5OTAxMDAwMDAwMDBDQTAxCis6MTA0OTkwMDBGMUIxMDEwMDAwMDAwMDQyRjBCMTAxMDA0MDE4MDA0MEY4Cis6MTA0OUEwMDBFMTk5MDEwMDAwMDAwMDQ1NjFCMTAxMDAyMDAwMDBBRTY2Cis6MTA0OUIwMDA2M0REMDEwMDM2ODEyODQwODEzMjAwMDAzMzgxMDA0MEYwCis6MTA0OUMwMDA4MUIyMDAwMDM2ODE0MjQwODEzMjAwMDAwMDAwMDA1QzZDCis6MTA0OUQwMDA2OTkzMDEwMEY0ODIxQTQ0OTM5MzAwMDAzOTgxNDI0MEE0Cis6MTA0OUUwMDA4MTMyMDAwMDM4ODEwMDU4Njk5MzAwMDAwMDAwMDA0NEMzCis6MTA0OUYwMDBGMEQxMDEwMDAwMDBBNDQwODFCMjAwMDA0MDgxQTI0MDNCCis6MTA0QTAwMDBFMTZEMDAwMDAwMDAwMDQ0NDVEMTAxMDAwMDAwODA0MDNECis6MTA0QTEwMDBFMUIxMDEwMDAwMDA4MDQxRTFEMTAxMDA0MTgxMzc1QzNBCis6MTA0QTIwMDA2MTMxMDAwMDAwMDAwMDQyNjJCMTAxMDA0NTgxMjg0MDcwCis6MTA0QTMwMDA4MTMyMDAwMDQyODEwMDQwODFCMjAwMDAwMDAwMDBDQUMzCis6MTA0QTQwMDA2M0IxMDEwMDQ1ODFBODQwODEzMjAwMDBGNDgyMTc0MDIzCis6MTA0QTUwMDA4MUIyMDAwMDRBODEwMDQwODFCMDAwMDA0QTgxMDBCQjYxCis6MTA0QTYwMDA4MUIwMDAwMDAwMDAwMDQxNjBCMTAxMDAwMDAwMDA0MDgyCis6MTA0QTcwMDA2MkIxMDEwMDRCODFBODQwODEzMjAwMDAwMDAwMDBDQUYxCis6MTA0QTgwMDA2M0IxMDEwMEY0ODIyODQwODEzMjAwMDA0RDgxMDA0MDcyCis6MTA0QTkwMDA4MUIyMDAwMDUwOTUwMDQwNDc5OTAxMDA1MzgxMDBCQjRFCis6MTA0QUEwMDA4N0IwMDAwMDUwOTUyRjQwODdCMDAxMDA1NTgxMjI0MDBCCis6MTA0QUIwMDA5NTdGMDAwMEY0ODI2MDQwOTU4MzAwMDAwMjAwMkRGMDk1Cis6MTA0QUMwMDA4NEIwMDEwMDU2ODEzNjQwODEzMjAwMDAwMDAwMDA0MjZGCis6MTA0QUQwMDA2MkIxMDEwMDU3ODFBODQwODEzMjAwMDAwMDAwMDA0MzBDCis6MTA0QUUwMDA2MkIxMDEwMDU5ODFBODQwODEzMjAwMDAwMDAwMDBDQTczCis6MTA0QUYwMDA2M0IxMDEwMDVCODFBODQwODEzMjAwMDAwMDAwMTY0MEQ0Cis6MTA0QjAwMDA4MUIyMDEwMEY0ODIyMjQxNDM1MTAwMDAwMDA4MDBDQTMyCis6MTA0QjEwMDA5NUNCMDEwMDU2ODEwMDQxODVDMDAwMDA2MzgxQTI0MjBGCis6MTA0QjIwMDA2NzZGMDAwMDAwMDAwMDQxNjdCMzAxMDA2MzgxNDI0MEVECis6MTA0QjMwMDA4MTMyMDAwMDAwMDAwMDQwNjVCMzAxMDAwMDAwMDA0MDI5Cis6MTA0QjQwMDA5MzgzMDEwMDAwMDAxQUNBNjk5NzAxMDBGNDgyMjY0MDhECis6MTA0QjUwMDA4MTMyMDAwMDY4ODE0MjQwODEzMjAwMDBGNDgyMUE0NEIwCis6MTA0QjYwMDA5MzkzMDAwMEY0ODIyMDQzOTU2RjAwMDBGNDgyODBDQTgyCis6MTA0QjcwMDA2NzMzMDAwMEY0ODIyMjQwNjU2RjAwMDBGNDgyMDA2RjBBCis6MTA0QjgwMDBEQjkxMDAwMDg1MDAwMDQwODEzMjAxMDAzNTgwMjI0MDI5Cis6MTA0QjkwMDA4MDMyMDAwMEY0ODIwMDQwODFCMjAwMDAwMDAwMDA1ODIyCis6MTA0QkEwMDA5NTkzMDEwMDAwMDAwMDVGOTU5MzAxMDA3NzgxQTI0NDc2Cis6MTA0QkIwMDAyMTZGMDAwMDAwMDAwMDVGOTU4MzAxMDAwMDAwMDA1RThGCis6MTA0QkMwMDA5NTkzMDEwMDAwMDAwMDU3OTU5MzAxMDAwMDAwMDBDQTcyCis6MTA0QkQwMDBDM0IxMDEwMDdBODEyMjVCOTU3RjAwMDAwMDAwMDA0Qjg5Cis6MTA0QkUwMDBGRDkzMDEwMEY0ODIwMDQwODFCMjAwMDAxQkZEMDBDQTY5Cis6MTA0QkYwMDA5NTlCMDEwMDBEMDEwMENBQzUzMTAxMDAwMDAwMDA1RjU2Cis6MTA0QzAwMDA5NTgzMDEwMEY0ODIwMENBQzVCMTAwMDBERjZGMDBDQUJECis6MTA0QzEwMDA5NTlCMDEwMDAwMDAwMDU1OTU5MzAxMDAwMDAwMDBDQTFCCis6MTA0QzIwMDBDN0IxMDEwMEY0ODIyMjVGOTU3RjAwMDAwRDAxMDA0MEIyCis6MTA0QzMwMDA4MTMyMDEwMDAwMDAwMDVGOTU4MzAxMDBGNDgyMDBDQTA4Cis6MTA0QzQwMDBDN0IxMDAwMEY0ODIwMENBQzlCMTAwMDBGNDgyMDBDQUYyCis6MTA0QzUwMDBDQkIxMDAwMEY0ODIwMENBQ0RCMTAwMDBGNDgyMDBDQURBCis6MTA0QzYwMDBDRkIxMDAwMDAwMDAyRTQyODFFMDAxMDA5ODE0MDA0MDA2Cis6MTA0QzcwMDA0OEM5MDEwMEY0ODIwMENBRTFCMTAwMDAwMDAwMDA0MDEwCis6MTA0QzgwMDAwOUIxMDEwMDIwMDAwMEE2ODJCMDAxMDA4RjgxQTI1RTYwCis6MTA0QzkwMDAwQjdEMDAwMDAwODAwMDQxMDg5OTAxMDA5MTgxQTI1RTE3Cis6MTA0Q0EwMDAwQjdEMDAwMDIwODAwMEE2MDhCMTAxMDA5MzgxOUY4NTQ0Cis6MTA0Q0IwMDA4MjMwMDAwMDAwMDAwMDMwODM4NDAxMDBDODgxMjIzMDZGCis6MTA0Q0MwMDA4MzZDMDAwMDkyODFBMjRGMEI3RDAwMDAwMDAwMDA0MTI4Cis6MTA0Q0QwMDAyMUIzMDEwMDAyODAwMEE2ODJCMDAxMDAxMzgyMDA0MENGCis6MTA0Q0UwMDA4MTMyMDEwMDEwMDAwMDQxODRFNDAxMDAwMzgwMDBBNjJECis6MTA0Q0YwMDA4MkIwMDEwMDEzODIwMDQwODEzMjAxMDBGMEZGMDA0MUM4Cis6MTA0RDAwMDA4Njg4MDEwMDAwMDAwMDQzODQ5NDAxMDAwRjAwMDBBNjgzCis6MTA0RDEwMDA4NkIwMDEwMDEwQzQwMDQzODY5ODAxMDBBODgxQTI0MzE4Cis6MTA0RDIwMDA4NDZDMDAwMDAwMDAwMDQzMjFCMzAxMDAyMDAwMDBBNkI1Cis6MTA0RDMwMDA4MkIwMDEwMDFDMDAwMDQxODJEQzAxMDBBNTgxQTI1RTVFCis6MTA0RDQwMDAwQjdEMDAwMDA0MDAwMDQxMDg5OTAxMDBCQTgxMDA0MDc5Cis6MTA0RDUwMDA4MUIyMDAwMDQxMDEwMEE2ODZCMDAxMDA1MDBDMDA0MzYyCis6MTA0RDYwMDA4Njk4MDEwMEFEODFBMjQzODQ2QzAwMDAwMDAwMDA0MUUwCis6MTA0RDcwMDAyMUIzMDEwMEJBODEwMDQwODFCMjAwMDA0MTAxMDBBNkM4Cis6MTA0RDgwMDA4NkIwMDEwMDYwMEMwMDQzODY5ODAxMDBCQTgxQTI0M0ZFCis6MTA0RDkwMDA4NDZDMDAwMDAwMDAwMDQyMjFCMzAxMDAxODgwMDBBNkNFCis6MTA0REEwMDA4MkIwMDEwMDEzODIwMDQwODEzMjAxMDBGRkZGMDA0MTA4Cis6MTA0REIwMDA4Mjg4MDEwMDAwNzcwMDQxODI4QzAxMDAwMTAyMDA0MURECis6MTA0REMwMDA4Mjk4MDEwMDIwMDAwMDQxODJEQzAxMDAxODAwMDA0MUFGCis6MTA0REQwMDA4MkRDMDEwMEI4ODFBMjVFMEI3RDAwMDAwMDAwMDA0MTcyCis6MTA0REUwMDAwOEIxMDEwMDIwMDAwMEE2ODJCMDAxMDBCQjgxQTI1RUQ0Cis6MTA0REYwMDAwQjdEMDAwMDQwMTMwMDQxMDg5OTAxMDBDMzgxMjI0MzRDCis6MTA0RTAwMDAyMTZGMDAwMDIwMDAwMEE2ODJCMDAxMDAxMjAwMDA0MUM2Cis6MTA0RTEwMDA4MkRDMDEwMEMwODFBMjVFMEI3RDAwMDAwMDA0MDA0MTI1Cis6MTA0RTIwMDAwODk5MDEwMERFODEwMDQwODFCMjAwMDAyMDAwMDBBNjQ4Cis6MTA0RTMwMDA4MkIwMDEwMDE5MDAwMDQxODJEQzAxMDBDNTgxQTI1RTQwCis6MTA0RTQwMDAwQjdEMDAwMDAwQTAwMDQxMDg5OTAxMDBERTgxMDA0MEI4Cis6MTA0RTUwMDA4MUIyMDAwMDAwMDAwMDQ0MjFCMzAxMDAwMDAwMDA0MEM2Cis6MTA0RTYwMDA4M0IwMDEwMDAwMDAwMDVGODM5MDAxMDAwMDAwMDA1RTNECis6MTA0RTcwMDA4MzkwMDEwMDAwMDAwMDU3ODM5MDAxMDAwMDAwMDA0MTcyCis6MTA0RTgwMDBDMkIxMDEwMDBDMDEwMDQwODEzMjAxMDAwMDAwMDA1RjRFCis6MTA0RTkwMDA4MzgwMDEwMDAwMDAwMDQxQzJCMTAxMDAwQzAxMDA0MDBDCis6MTA0RUEwMDA4MTMyMDEwMDIwMDAwMEE2ODJCMDAxMDAwNDAwMDA0MTEwCis6MTA0RUIwMDA4MkRDMDEwMDIwMDAwMDQxMDg5OTAxMDAyMDAwMDBBNkNBCis6MTA0RUMwMDA4MkIwMDEwMDExMDAwMDQxODJEQzAxMDBENzgxQTI1RUE2Cis6MTA0RUQwMDAwQjdEMDAwMDAxMDAwMDQxMDg5OTAxMDAyMDAwMDBBNkEwCis6MTA0RUUwMDA4MkIwMDEwMERBODFBMjVFMEI3RDAwMDA0MDEzMDA0MTE4Cis6MTA0RUYwMDAwODk5MDEwMDAxMDAwMEE2ODJCMDAxMDA0MDAwMDA0MUI1Cis6MTA0RjAwMDAyRTk5MDEwMDAwMDA4MDQwODFCMjAxMDAyMDAwMDBBNjFGCis6MTA0RjEwMDA4MEIwMDEwMDAwMDAwMENBODE5NDAxMDBFMTgxQTI1RTFFCis6MTA0RjIwMDAwQjdEMDAwMEY0ODIwMDQwMDhCMTAwMDBDODE0MkVCQkM1Cis6MTA0RjMwMDA4NUIwMDEwMEU0ODFBMjVFMEI3RDAwMDAwMDAwMDA0MDBFCis6MTA0RjQwMDA4N0IwMDEwMEYzODEyMjQzMjE2RjAwMDAwMjgyMjI0NEQ2Cis6MTA0RjUwMDAyMTZGMDAwMDExODAwMEE2ODJCMDAxMDAxMzgyMDA0MDgyCis6MTA0RjYwMDA4MTMyMDEwMDBBODIyMjRBODM3QzAwMDAwMDAwMDA0MDU2Cis6MTA0RjcwMDA4NzkwMDEwMEVFODEyMjREODM3QzAwMDAwMDAwMDA0MUZCCis6MTA0RjgwMDA4NzkwMDEwMEYwODEyMjRGODM3QzAwMDAwMDAwMDA0M0U1Cis6MTA0RjkwMDA4NzkwMDEwMEYyODEyMjRFODM3QzAwMDAwMDAwMDA0MkQ1Cis6MTA0RkEwMDA4NzkwMDEwMDBBODIwMDQwODFCMjAwMDAwMTgwMDBBNkMzCis6MTA0RkIwMDA4MkIwMDEwMDEzODIwMDQwODEzMjAxMDAwMTgwMDBBNjBFCis6MTA0RkMwMDA4MkIwMDEwMDEzODIwMDQwODEzMjAxMDAwQTgyMjI0MjM1Cis6MTA0RkQwMDA4MzdDMDAwMDAwMDAwMDQwODc5MDAxMDAxQzgwMDBBNjM4Cis6MTA0RkUwMDA4MkIwMDEwMDEzODIwMDQwODEzMjAxMDBGRDgxMjI0NTIwCis6MTA0RkYwMDA4MzdDMDAwMDAwMDAwMDQxODc5MDAxMDBGRjgxMjI0NDczCis6MTA1MDAwMDA4MzdDMDAwMDAwMDAwMDQzODc5MDAxMDAwMTgyMjI0MzVFCis6MTA1MDEwMDA4MzdDMDAwMDAwMDAwMDQyODc5MDAxMDAwQTgyMDA0MDZCCis6MTA1MDIwMDA4MUIyMDAwMDAxODAwMEE2ODJCMDAxMDAxMzgyMDA0MDFFCis6MTA1MDMwMDA4MTMyMDEwMDAxODAwMEE2ODJCMDAxMDAxMzgyMDA0MDhECis6MTA1MDQwMDA4MTMyMDEwMDBBODIyMjQyODM3QzAwMDAwMDAwMDA0MDdECis6MTA1MDUwMDA4NzkwMDEwMDAwMDAwMDQzODc5MDAxMDAwMDAwMDA0MTlDCis6MTA1MDYwMDA4NzkwMDEwMDAwODAwMEE2ODJCMDAxMDAxMzgyMDA0MEZBCis6MTA1MDcwMDA4MTMyMDEwMDBFODIyMjRCODM3QzAwMDAwMDAwMDA0MDQwCis6MTA1MDgwMDA4NzgwMDEwMDAwMDAwMDQzRTBCMTAxMDBGRjdGMDBBMjIzCis6MTA1MDkwMDBBMDhCMDEwMDAwMDAwMDQ0QTVCMzAxMDBCODgwMDBDQTQ1Cis6MTA1MEEwMDBBNzMzMDEwMDM2ODEwMDQwODFCMjAwMDAyMDAwMDA0MTlBCis6MTA1MEIwMDA4MkRDMDEwMDE0ODJBMjVFMEI3RDAwMDAwMDAwMDA0MTMyCis6MTA1MEMwMDAwOEIxMDEwMDE2ODI5Rjg1ODIzMDAwMDAwMDAwODA0MEY4Cis6MTA1MEQwMDA4MUIyMDEwMDFCODIxNEY3ODEzMDAwMDAxQjgyQTI0OUJCCis6MTA1MEUwMDBGRDdGMDAwMDAwMDAwMDQ4RkQ5MzAxMDAxRTgyMTVGOEJFCis6MTA1MEYwMDA4MTE0MDAwMDFFODJBMjRBRkQ3RjAwMDAwMDAwMDA0OENCCis6MTA1MTAwMDBGRDkzMDEwMDIwODJBMkM4ODEzMjAwMDA0MDAwMDA0MENGCis6MTA1MTEwMDA4MERDMDEwMDAwMTAwMDQwODBEQzAxMDAwMDAwMDA0MDQ1Cis6MTA1MTIwMDBFRkIzMDEwMDIyODI0MjQwRjEzMzAwMDAzODgxMDA0MDk5Cis6MTA1MTMwMDA2ODk3MDAwMEY0ODIwMEJCNkJCMzAwMDBGNDgyMDBCQkYwCis6MTA1MTQwMDBCMUIzMDAwMEY0ODIwMDQwODFCMjAwMDAwMDAzMDA0MENGCis6MTA1MTUwMDA4MTk4MDEwMDAwMDAwMDQwMThCMTAxMDA4MDAwMDA0MDZCCis6MTA1MTYwMDA4Mzk4MDEwMDAwMTkwMDQwNDU5OTAxMDAwMDAwNDI0MDY5Cis6MTA1MTcwMDA4MUIyMDEwMDAwMDA0M0ZGRjFCMTAxMDAwMDAwMDBGRjE3Cis6MTA1MTgwMDBGMUIxMDEwMDAwMDAwMDQxODFDMDAxMDAwMDAwMDA0MEI5Cis6MTA1MTkwMDAxOEIxMDEwMDJCODJBMjQxODM1MDAwMDAwMDE2MDA0MDhDCis6MTA1MUEwMDA0NTk5MDEwMDAwMTkwMDQwNDM5OTAxMDAwMDAwMDA0N0EzCis6MTA1MUIwMDA0M0MxMDEwMDAwMDAwMDQwODNCMDAxMDAwMDAwMDBGMzgzCis6MTA1MUMwMDA4MEIwMDEwMDAwMDAwMDVCODFEMDAxMDAwMDAwMDA0MUMwCis6MTA1MUQwMDA4MEQwMDEwMDAwMDAwMDQwRjZCMTAxMDAwMDAwMDA1QjNCCis6MTA1MUUwMDA0M0MxMDEwMDAwMDAwMDQxODNDMDAxMDAzNTgyQTI1NDg4Cis6MTA1MUYwMDA4MzZDMDAwMDAwMDAwMDQwRjdCMTAxMDAwMDAwMDA0MTk2Cis6MTA1MjAwMDA4M0MwMDEwMDNDODJBMjA2ODM2QzAwMDAwMDAwODA0MDQ1Cis6MTA1MjEwMDA4MUIyMDEwMDAwMTYwMDQwNDM5OTAxMDA4MDE2MkUwNjVECis6MTA1MjIwMDA4M0IwMDEwMDM2MDAwMEZCRjZBOTAxMDA0MjgyQTI0MUQyCis6MTA1MjMwMDA4MzUwMDAwMDIyMDAwMDQwODM5ODAxMDAwMDAwMDBGQjIyCis6MTA1MjQwMDBGNkIxMDEwMDQ1ODJBMjQxODM1MDAwMDA2MjAwMDA0MDk3Cis6MTA1MjUwMDA5NTk4MDEwMERDOUYwMDQwODEzMjAxMDAwMDE2MkQwNjY4Cis6MTA1MjYwMDA4M0IwMDEwMDgwMTYwMDQwNDU5OTAxMDA1QzAwMDBGQkZFCis6MTA1MjcwMDBGNkE5MDEwMDRCODJBMjQxODM1MDAwMDAwMDAwMDA3MDlCCis6MTA1MjgwMDBGOUIxMDEwMDAwMDAwMDcxRjlCMTAxMDAwMDAwMDA3MkU1Cis6MTA1MjkwMDBGOUIxMDEwMDAwMDAwMDczRjlCMTAxMDAwMDAwMDA3NEQxCis6MTA1MkEwMDBGOUIxMDEwMDU0MDAwMDQwOTU5ODAxMDBEQzlGMDA0MEQ2Cis6MTA1MkIwMDA4MTMyMDEwMDAwMDAwMDcwOTVCMDAxMDA1NzgyMjI3MDE5Cis6MTA1MkMwMDBCNTZGMDAwMDAwMDA4MDQxOTdCMDAxMDAwMDAwODA0MEYxCis6MTA1MkQwMDA5N0IwMDEwMEI2MDMwMDQwQTE5OTAxMDAwMDAwMkY0MkUxCis6MTA1MkUwMDA5OUIzMDEwMDYyODIyMjQ0ODE2QzAwMDA2QTgyMjI0OEU0Cis6MTA1MkYwMDA4MTZDMDAwMDY0ODIyMjRDODE2QzAwMDA2RTgyMjI1MDFFCis6MTA1MzAwMDA4MTZDMDAwMDZGODIyMjU0ODE2QzAwMDA3MTgyMjI1OEVGCis6MTA1MzEwMDA4MTZDMDAwMDc2ODIyMjVDODE2QzAwMDA1MDAxMDA0MEFDCis6MTA1MzIwMDA4MUIyMDAwMDAwMDAwMEJDMDlCMDAxMDBGNDgyMDBDQTk0Cis6MTA1MzMwMDAwMUIwMDAwMDAwMDAwMDQwMDNCMDAxMDAwMDAwMDA0MTg3Cis6MTA1MzQwMDBGMzgzMDEwMDY4ODJBMjQyMDU2QzAwMDAwMDAwMDA0MTY2Cis6MTA1MzUwMDAwNUIwMDEwMEY0ODIyMkNBMDcxNDAwMDBGNDgyMDA0NjVFCis6MTA1MzYwMDBGMzkzMDAwMEY0ODIyMDQzOTU2RjAwMDBGNDgyODBDQTFBCis6MTA1MzcwMDAwNTMwMDAwMEY0ODIyMjAxODAzMDAwMDBGNDgyMDBDQjZFCis6MTA1MzgwMDBEQjkxMDAwMDU3MDEwMEJDQUJCMzAwMDAwMDAwMDBCQzgzCis6MTA1MzkwMDBCMUIzMDEwMEY0ODIwMENBQ0ZCMzAwMDBGRjAwMDBDQTFECis6MTA1M0EwMDA4MTg4MDEwMEY0ODJBMjQwNzQ3RDAwMDA2MDAwMjA0MEVBCis6MTA1M0IwMDA2MDk5MDEwMDczODJBOEIxODIzMDAwMDA3MjgyMDA0MEJGCis6MTA1M0MwMDA4MUIyMDAwMEY0ODIwMENBNzlCMzAwMDAwMDAwMDA0RUYwCis6MTA1M0QwMDA4MUIwMDEwMDAwMDAwMDQzQ0I4MzAxMDAwMDAwNDU0MDg0Cis6MTA1M0UwMDA4MUIyMDEwMDc5ODJBMjQxODE1MDAwMDAwMDAwNDU0MDU1Cis6MTA1M0YwMDA4MUIyMDEwMDAwMDA0NTQwODFCMjAxMDA4NDgyOTE4MkE3Cis6MTA1NDAwMDA4MjMwMDAwMDAwMDAwMDhBODBCMDAxMDBBRTlGMDA0MEEyCis6MTA1NDEwMDA4MENFMDEwMDgyODJBNjQwODEzMjAwMDA4NDgyNTY0MDA0Cis6MTA1NDIwMDA4MUIyMDAwMEI2MDMwMDQwQTE5OTAxMDAwMDAwMDA1M0MyCis6MTA1NDMwMDAwNzkwMDEwMEI2MDMwMDQwQTE5OTAxMDAwMDAwMDA1MjRFCis6MTA1NDQwMDAwNzkwMDEwMEQ4OUYwMDQxOEJCMzAwMDAwMDAwMDA0RTgwCis6MTA1NDUwMDA4MUIwMDEwMDAwMDAwMDQyQ0Q4MzAxMDAwMDAwNDY0MDAxCis6MTA1NDYwMDA4MUIyMDEwMDg5ODJBMjQxODE1MDAwMDAwMDAwNDY0MEMzCis6MTA1NDcwMDA4MUIyMDEwMDAwMDA0NjQwODFCMjAxMDA5NDgyOTE4MTE2Cis6MTA1NDgwMDA4MjMwMDAwMDAwMDAwMDg5ODBCMDAxMDBBRTlGMDA0MDIzCis6MTA1NDkwMDA4MENFMDEwMDkyODJBNjQwODEzMjAwMDA5NDgyNTU0MDY1Cis6MTA1NEEwMDA4MUIyMDAwMEI2MDMwMDQwQTE5OTAxMDAwMDAwMDA1MjQzCis6MTA1NEIwMDAwNzkwMDEwMEI2MDMwMDQwQTE5OTAxMDAwMDAwMDA1M0NECis6MTA1NEMwMDAwNzkwMDEwMEQ4OUYwMDQxOEJCMzAwMDBCMTAzMDA0MDVBCis6MTA1NEQwMDBBMTk5MDEwMEM0MTQyRjQwOTlCMzAxMDA1NzAxMDA0MDY1Cis6MTA1NEUwMDA0OUIxMDAwMEEwOTQyRTQzOTdCMDAxMDAwMDAwMDA0MDk1Cis6MTA1NEYwMDBGMUIxMDEwMDlCODJBMjQxOTc1MDAwMDA1MDk1MjA0MERECis6MTA1NTAwMDBFMUIxMDEwMEFDOTQyRTQzOTdCMDAxMDAwMDAwMDA0MENGCis6MTA1NTEwMDBGMUIxMDEwMDlGODJBMjQxOTc1MDAwMDAwMDAwODA0MDNECis6MTA1NTIwMDA4MUIyMDEwMEFFMDMwMDQwQTM5OTAxMDAwMDAwMDA0MEQ5Cis6MTA1NTMwMDA4MUIwMDEwMDYwMTUwMDQwODU5ODAxMDAwODAwMDA0MDFFCis6MTA1NTQwMDA0MEU0MDEwMDAwMDAwMDU5NDE5NDAxMDAwMDAwMDA1MEI3Cis6MTA1NTUwMDA0MUUwMDEwMDAwMDAwMDQyNDA5NDAxMDAwMDAwMDA1N0JCCis6MTA1NTYwMDA0MTkwMDEwMDAwMDAwMDQxODFDMDAxMDAwMDAwQTM0MjAxCis6MTA1NTcwMDA4MTZDMDEwMDAwMDAwMDQxQTNDMTAxMDBBNTgyQTA0MjhFCis6MTA1NTgwMDA4MTZDMDAwMEE1ODIwMDUwODVDMDAwMDBERDgyQTI0MTMwCis6MTA1NTkwMDAwMTdEMDAwMEI1ODIyMjU4NzM3RDAwMDA3ODAwMDA0MDM0Cis6MTA1NUEwMDA2MTk5MDEwMEIwODJBOEIxOUMzMDAwMDAzMDAwMzg0NUZDCis6MTA1NUIwMDA5REUwMDEwMDAxMDAwMDBFMTBDOTAwMDBCNTgyMzNDNDU3Cis6MTA1NUMwMDA4MTMwMDAwMEI4ODJBMUFEOUQyMDAwMDBBRjgyMTM0MDYxCis6MTA1NUQwMDA4MUIyMDAwMDAwMDAxMzRFNUE4MzAxMDAzMDAwMzg0NUFDCis6MTA1NUUwMDA5REUwMDEwMEMwODIyMkFCODAwNDAwMDBCRTgyQTI0MDg4Cis6MTA1NUYwMDAwMTdEMDAwMEMwODIyMjVGNTc3RDAwMDAzQzg3MDA0MDkzCis6MTA1NjAwMDA4MUIyMDAwMEMwODIyMjVFNTc3RDAwMDA5Rjg3MDA0MDZCCis6MTA1NjEwMDA4MUIyMDAwMEM1ODIyMjU0NzM3RDAwMDA3NDAwMDA0MEY2Cis6MTA1NjIwMDA2MTk5MDEwMEMwODJBOEIxMDAzMDAwMDA5MDg0QTI1RjlGCis6MTA1NjMwMDAwMTdDMDAwMEQwODYwMDQwODFCMjAwMDBDNzgyQTI1RkRBCis6MTA1NjQwMDA1OTI3MDAwMEM5ODJBMjVDNzM3RDAwMDBEMDgyQTI1RTRGCis6MTA1NjUwMDA3MzdEMDAwMERBODIyMjVDNzM3RDAwMDBEQjgyMzc0MEJDCis6MTA1NjYwMDA4MTMyMDAwMDdDMDAwMDQwNjE5OTAxMDBDQTgyQThCMTJCCis6MTA1NjcwMDAzNjMwMDAwMDdDMDAwMDQwNjE5OTAxMDBDQzgyQThCMTY2Cis6MTA1NjgwMDAwMDMwMDAwMDFGMDAwMDAwMDI4ODAxMDBCRjg0MTc0MEE2Cis6MTA1NjkwMDA4MUIyMDAwMERCODIzNDQwODEzMjAwMDA3RTAwMDA0MDk1Cis6MTA1NkEwMDA2MTk5MDEwMEQxODJBOEIxMTIzMDAwMDBEODgyNTIyMTQ0Cis6MTA1NkIwMDAxMzA0MDAwMDAwMDAxNDQxMkZDMzAxMDBGRjNGMDAwOTQ0Cis6MTA1NkMwMDAwMDhDMDEwMDAwMDAwMDQzMDFGMDAxMDAxMTgzMDAzNDUwCis6MTA1NkQwMDAxMzg0MDAwMEZGM0YxNDA5MDA4QzAxMDA3MTgzMDA0MzE0Cis6MTA1NkUwMDAwMUYwMDAwMDAwMDAwMDQwODFCMjAxMDBEQjgyMzM0MDg1Cis6MTA1NkYwMDA4MTMyMDAwMEFGODIxMzRFNUE5MzAwMDAxNDg3QTI0OEYzCis6MTA1NzAwMDBGRDdGMDAwMDA0MDBBMkFDODAzMjAwMDBFMzgyMjI1QTM4Cis6MTA1NzEwMDA3MzdEMDAwMDdBMDAwMDQwNjE5OTAxMDBFMDgyQThCMTI5Cis6MTA1NzIwMDA3RTMxMDAwMDAxMDAwMENGMTFDOTAwMDBFOTgyQTI0MEQzCis6MTA1NzMwMDA5MzdGMDAwMEU5ODIyMjQ0OTM3RjAwMDBFNTgyNDJBNTI2Cis6MTA1NzQwMDA4MDMwMDAwMEU4ODJBMjQwOTM3RjAwMDBGQjgyMUE0MDc0Cis6MTA1NzUwMDA5MzkzMDAwMDAwMDAxQTQwODFCMjAxMDBERDgwQTI0MDU2Cis6MTA1NzYwMDA3MzdEMDAwMDBGODcyMjQ0MjE2RjAwMDAwNjg3MjI0MENFCis6MTA1NzcwMDA2NTdEMDAwMDAwMDVBMjVCNzM3RDAwMDAwNDAwQTI0OTY2Cis6MTA1NzgwMDAzMzdEMDAwMEYzODIyMjQ4MzM3RDAwMDBGRjAxMDA5OTQxCis6MTA1NzkwMDA4MEQ4MDEwMDAwMDAwMDUwODFFMDAxMDBBODk4MkY0MDRGCis6MTA1N0EwMDAzM0IxMDEwMDAwMDAwMDQwRTBDMTAxMDBERDgyMDA0MDkzCis6MTA1N0IwMDA4MUIyMDAwMEFGODIwMDQwOEJCMzAwMDAwMDAwMDA1OEFGCis6MTA1N0MwMDA2MUIxMDEwMDAwMDAwMDRFNjJCMTAxMDBBRjgyMjg0MENCCis6MTA1N0QwMDA4MTMyMDAwMEY2ODIwMDQwODFCMjAwMDBGOTgyMzM0MDNECis6MTA1N0UwMDAxRjMwMDAwMEFGODIxMzRFNUE5MzAwMDBGRDgyQTBDRUZFCis6MTA1N0YwMDA4MTUwMDAwMDBGODNBMENEODE2QzAwMDAwMDAwMDBBNTQ3Cis6MTA1ODAwMDA5Q0IzMDEwMDAwMDAwMEIxODFCMDAxMDAwRjgzMjJCNUZDCis6MTA1ODEwMDA4MTE0MDAwMDgwMTUyRjQwNDlCMTAxMDAwMTgzNDI0MEVFCis6MTA1ODIwMDA4MTMyMDAwMDAwMDA2MEI0NjU5NzAxMDBEMDE1MkU0MDYxCis6MTA1ODMwMDA2OUIzMDEwMDAwMDAxQTQ0OTM4MzAxMDAxQTAwMDBBMjFBCis6MTA1ODQwMDA4MERDMDEwMDAwMDAwMDQ0RjFCMTAxMDAwMDAwMDBCMTYzCis6MTA1ODUwMDBGMUIxMDEwMDAwMDAwMEI1RjFCMTAxMDAwNTAwMDA0MDA4Cis6MTA1ODYwMDA2MTk5MDEwMDgwMDAwMDQwNjJERDAxMDAwQTgzQThBMTY3Cis6MTA1ODcwMDBFMDMxMDAwMEU5ODIwMDg4OUVCMzAwMDBFOTgyQTI0MTg1Cis6MTA1ODgwMDA2NzZGMDAwMEU5ODIwMDZGREI5MTAwMDAwRjgzNDI0MEU4Cis6MTA1ODkwMDA4MTMyMDAwMEU5ODIxQTQwOTM4MzAwMDAwMDk5MDAwOUQ4Cis6MTA1OEEwMDA0NkM5MDEwMDNGMDAwMEYzMEM4ODAxMDAxQTgzQTY0MjlDCis6MTA1OEIwMDAxMzYwMDAwMDI5OTQwMDk1MDMzMDAxMDAxNTgzNjE0MEI2Cis6MTA1OEMwMDA4MTMyMDAwMDc1MDAwMDQwNjE5OTAxMDAxNjgzQThCMTgzCis6MTA1OEQwMDAwQzMwMDAwMDM2OTQ3MTEwOTQzMDAxMDAxQjgzMDA1ODg2Cis6MTA1OEUwMDAxRjkwMDAwMDFDOTQwMDk1MDMzMDAxMDBBRjgyMDA4OEQ3Cis6MTA1OEYwMDAxQ0IwMDAwMDAwMDAyRDAzNDhCMTAxMDAwNDAwMkRGMDkxCis6MTA1OTAwMDAyRUIwMDEwMEVFMDcwMDQwOTc5ODAxMDAyMjgzMjM0QjQwCis6MTA1OTEwMDBFNDZEMDAwMDIyODMyMjRCRkQ3RjAwMDAwMDAwMDA0MDY4Cis6MTA1OTIwMDAxRjkwMDEwMDIyMDAyRjQwODFCMjAxMDAyNTgzODMxN0MwCis6MTA1OTMwMDA4MDMyMDAwMDI2MDAwMDQwNDc5OTAxMDAyNzgzODUxNzI4Cis6MTA1OTQwMDA4MDMyMDAwMDAwMDAwMDQ4NDdDMTAxMDAyRDgzMjI1NTJECis6MTA1OTUwMDAyRjdDMDAwMDAwMDAwMDQyNDNEMTAxMDAwRjAwMDBGQTNDCis6MTA1OTYwMDA5Njg4MDEwMDAwMDAwMDQyOTdFMDAxMDAwMDAwMDA0MjFDCis6MTA1OTcwMDA5N0QwMDEwMDJFODMwMDRCNDRDMTAwMDAxMjAwMDBBMjBBCis6MTA1OTgwMDA0NEM5MDEwMDI4MDAwMEY2MDJDQzAxMDAwQTAwMDBBMTcxCis6MTA1OTkwMDA0MkM5MDEwMDAwMDAwMEY4MTZCMDAxMDAwMDAwMjhGMDI0Cis6MTA1OUEwMDAxMEIwMDEwMDAwMDAwMEYwMUFCMDAxMDAwMDAwMDBBMkQ5Cis6MTA1OUIwMDAyQUIwMDEwMEMwMjgzQzQ2MERFMDAxMDAwMDAwMkQ0NDQzCis6MTA1OUMwMDA5NUIwMDEwMDNBODNBMkY4MEUzMDAwMDA0QTgzMjI0MUNDCis6MTA1OUQwMDA5NTUwMDAwMDAwMDAyRDUwNDlDMTAxMDAzNjgzMDA0MDYxCis6MTA1OUUwMDA4MUIyMDAwMDM3ODNBMkY4MTY2QzAwMDAzNzgzQTJGODVBCis6MTA1OUYwMDAxMDZDMDAwMDM3ODNBMkYwMUE2QzAwMDA0ODgzMjI1ODE0Cis6MTA1QTAwMDAxRjdDMDAwMDAwOTkzRjQyMTNGMDAxMDAzRjgzNjU0MDc2Cis6MTA1QTEwMDA4MTMyMDAwMDQzODNBMkYzNzQwNjAwMDAwMDAwMDAwNkY4Cis6MTA1QTIwMDBFNjk1MDEwMDQ4ODM3NTQwODFCMjAwMDAwMDAwMDAwNjQxCis6MTA1QTMwMDA5NkIwMDEwMDNGMDA3NUYzMEM4ODAxMDAwMDAwMDA1NThFCis6MTA1QTQwMDA2MUIxMDEwMDAwMDAwMDRCNjJCMTAxMDA0NjgzQTg0MDMzCis6MTA1QTUwMDA4MTMyMDAwMDQ4ODM2NzQwODEzMjAwMDA1MDgzNzc0MUUzCis6MTA1QTYwMDAyREMzMDAwMDRFODMyMjU4MUY3QzAwMDAwMDAwMDA1NTBCCis6MTA1QTcwMDA2MUIxMDEwMDAwMDAwMDA2NjJCMTAxMDA0QzgzQTg0MDQyCis6MTA1QTgwMDA4MTMyMDAwMDRFODM2NzQwODEzMjAwMDA3RTgzNzc0MTdGCis6MTA1QTkwMDAyREMzMDAwMDAzMDAwMDA3MUFGNDAxMDBFRjkyMDAwNzc1Cis6MTA1QUEwMDAxNjMwMDEwMDVGODMyMjQxODE2QzAwMDA1NjgzMjI0MjQwCis6MTA1QUIwMDA4MTZDMDAwMEFGODIwMDg4MUNCMDAwMDA1RTgzMjI1RjEyCis6MTA1QUMwMDAwRjdDMDAwMEUzOTMwMDVGMDExMDAxMDA1QzgzMjI0MDIzCis6MTA1QUQwMDA5NTZDMDAwMDA0ODAwMDAzNDJDOTAxMDAwMDAwMDBGMjQwCis6MTA1QUUwMDAwMkIwMDEwMDU4OTMwMDUyOTUzMDAxMDA1RjkzMDA0QkMzCis6MTA1QUYwMDAwMkIwMDAwMDQxOTQwMDA5OTYzMDAxMDAxQTg3MDA0MDZFCis6MTA1QjAwMDAwRkIwMDAwMDY3ODNBMjVBMUY3QzAwMDA2OTkyMDA0MDFBCis6MTA1QjEwMDA4MTMyMDEwMDY3ODMyMjIwODU2QzAwMDA2NDgzOUMwRjIyCis6MTA1QjIwMDA4MDMyMDAwMEFGODIwMDg4MUNCMDAwMDA0QTkzMDA1QzA1Cis6MTA1QjMwMDAxRjAwMDEwMDNDOTUwMDQyNjEzMTAxMDBBRjgyMDA4OEU2Cis6MTA1QjQwMDAxQ0IwMDAwMDkwMDQwMDA3OTYzMDAxMDAwMDAwMkQwNUY1Cis6MTA1QjUwMDA0OEIxMDEwMDZBODM4MkYwMTgzMDAwMDA4MTg4MDA0NTU2Cis6MTA1QjYwMDA4RkIwMDAwMDI4MjAwMEE2OTZCMDAxMDA2RTgzMjIxNzk3Cis6MTA1QjcwMDA5NjA0MDAwMEUwOTQwMDRCOTUzMDAxMDA4MTg4MDA0QkIyCis6MTA1QjgwMDA4RkIwMDAwMEVGOTMwMDAzNDgzMTAxMDBDQTkxMDA0MDNDCis6MTA1QjkwMDA4MTMwMDEwMDgxODgwMDQwODFCMjAwMDAwMDAwMkUxMDk5Cis6MTA1QkEwMDA0OEIxMDEwMDAwMDA2ODUwMDNCMDAxMDAwMDAwMDAwMzhDCis6MTA1QkIwMDBGMEIxMDEwMDQwMDAwMDAwRTBDOTAxMDAwMDAwMkU1MERCCis6MTA1QkMwMDA0OUMxMDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwM0Q0Cis6MTA1QkQwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDAyMDAwMDAxMDlFCis6MTA1QkUwMDA2MkREMDEwMDc5ODNBODQwODEzMjAwMDAxMDAwMDAxMEJFCis6MTA1QkYwMDA2MkM5MDEwMDdCODNBODAwRTAzMTAwMDBBRjgyMDA4ODA5Cis6MTA1QzAwMDAxQ0IwMDAwMDAwMDAyRDAzNDhCMTAxMDAwMDAwMDA0MDVFCis6MTA1QzEwMDAwRkIwMDEwMDAwMDAwMEY4MkVCMDAxMDAwMDAwMDBGMkZCCis6MTA1QzIwMDAwMkIwMDEwMDAwMDAwMDQwMTdCMDAxMDAwMDQxMDBBNkQyCis6MTA1QzMwMDA5NkIwMDEwMEVFMDcyRTQ3OTc5MDAxMDA5MTgzMjIxNzNFCis6MTA1QzQwMDA5NjA0MDAwMDhGODMyMjRCRkQ3RjAwMDA4RjgzMjNBMkU4Cis6MTA1QzUwMDAwMjZDMDAwMDU4OTMwMDUyOTUzMDAxMDAwNDAwMjI0MTZDCis6MTA1QzYwMDA5NzUwMDAwMDBDMDAyRDAwMTJCMDAxMDAwMDAwMDBGMDYxCis6MTA1QzcwMDAwMEIwMDEwMDAwMDAwMDVDMDE4MDAxMDA1RjkzMDA0QjU4Cis6MTA1QzgwMDAwMkIwMDAwMDAwMDAwMDA5MDBCMDAxMDAwMDAwMDA1MDU4Cis6MTA1QzkwMDAwM0IwMDEwMEFFODMwMDVDMTc5MDAwMDBBMzgzMjI0MzkxCis6MTA1Q0EwMDAyRjdDMDAwMDAwMDAwMDQ1MUY5MDAxMDA5QzgzMjI1RkI0Cis6MTA1Q0IwMDAyRjdDMDAwMDAwMDAyRTEwNDhCMTAxMDAwMDAwMDA1OEE5Cis6MTA1Q0MwMDBGMUIxMDEwMDEwMDAwMDAzRjBDOTAxMDAxMDAwMDAwMDU0Cis6MTA1Q0QwMDBFMEM5MDEwMDk4ODM2MjQyNjEzMTAwMDAwMDAwMDAxMEI5Cis6MTA1Q0UwMDA2MkIxMDEwMDk5ODNBODQwODEzMjAwMDBBRjgyNzI4OEJFCis6MTA1Q0YwMDAxQ0IwMDAwMDIwMDAyRDAzNDhCMTAxMDBGRjBGMDBGNjhBCis6MTA1RDAwMDA4MDg4MDEwMEEwODNBMkE2ODE2QzAwMDBBMzgzMDBGMjFBCis6MTA1RDEwMDAzQUIwMDAwMDhEODRBMjRCRkQ3RjAwMDBCMDkyMDA0MDlECis6MTA1RDIwMDA4MTMyMDEwMDMwODcwMDQwODFCMjAwMDBBRTgzMjI0QUY4Cis6MTA1RDMwMDAyRjdDMDAwMEFFODMyMjQ4MkY3QzAwMDAwQTAwMkQwMzM4Cis6MTA1RDQwMDA0OEIxMDEwMDNGMDAwMEYyODY4ODAxMDAxRjAwMDA0M0I3Cis6MTA1RDUwMDA4NDg4MDEwMDA1MDAwMDQzODBGNDAxMDA5ODk0M0Q0MkNFCis6MTA1RDYwMDA4MUUwMDEwMEFFODNBMjQyRTA3RDAwMDA4RDg0QTI0QjYxCis6MTA1RDcwMDBGRDdGMDAwMEIwOTIwMDQwODEzMjAxMDAzMDg3MDA0MDdBCis6MTA1RDgwMDA4MUIyMDAwMEFFODM2OTQwODEzMjAwMDAwMDAwMDBBM0IwCis6MTA1RDkwMDAwOUIwMDEwMDAwMDA3OTQxNDdDMzAxMDBCNDgzMjJBMThBCis6MTA1REEwMDAwOTZDMDAwMEY1ODIwMDg4MUNCMDAwMDBCMTgzMDAwMzdDCis6MTA1REIwMDA0OEIxMDAwMEVFODNBMzkyMDM2QzAwMDA5NDk1MDA0MDZDCis6MTA1REMwMDA5NTMwMDEwMDAwMDAwMDQxNDNDMzAxMDAwMDAwMDAxNkFGCis6MTA1REQwMDA4MEIyMDEwMDMwODcyNzA4ODAzMjAwMDBCQjgzMjI1QzNDCis6MTA1REUwMDAxNzdDMDAwMEJDODMwMDAwMkFCMDAwMDAxMjAwMDAwMEY1Cis6MTA1REYwMDAyQUM4MDEwMDAyMDAwMDA4ODBDODAxMDBDMDgzQTI0MzM1Cis6MTA1RTAwMDAyRjdDMDAwMEUzOTQwMDQwODEzMjAxMDBEQzgzMDA1RUJGCis6MTA1RTEwMDAxNzkwMDAwMDA0MDAwMDAxOENDQzAxMDBFMzk0MDA0Q0JBCis6MTA1RTIwMDAwMzMwMDEwMDAwMDAyRTQ2MDJCMDAxMDAxMDAwMDAxMEY3Cis6MTA1RTMwMDA0OEM5MDEwMDBDMDAwMDAxRjBDRDAxMDAyQzAwMDA0MDE5Cis6MTA1RTQwMDBGMEM5MDEwMDAwMDAwMDE2RjBCMTAxMDAxMDAwMDAxNUJCCis6MTA1RTUwMDBFMEM5MDEwMDAwMDAwMDQzNjFCMTAxMDBBMDAwMDBBNEZFCis6MTA1RTYwMDA2MkREMDEwMEM5ODNBODU0MTcxMDAwMDBEQzgzMDA1RUM2Cis6MTA1RTcwMDAxNzkwMDAwMDEyMDAwMDAwMkFDODAxMDBEQjgzMjI0M0IzCis6MTA1RTgwMDAyRjdDMDAwMDA0MDAwMDAxOENDQzAxMDAwMDAwMDA0Q0JECis6MTA1RTkwMDAwM0IwMDEwMDA0OTUwMDQzNjEzMTAxMDAwMDAwMkU0NjZCCis6MTA1RUEwMDAwMkIwMDEwMDEwMDAwMDEwNDhDOTAxMDAwQzAwMDAwMTAwCis6MTA1RUIwMDBGMENEMDEwMDBDMDAwMDA5RjBDOTAxMDAwMDAwMDAxODNECis6MTA1RUMwMDBGMEIxMDEwMDEwMDAwMDE1RTBDOTAxMDAwMDAwMDA0MzFFCis6MTA1RUQwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDBEQzgzMjg1NDUwCis6MTA1RUUwMDAxNzEwMDAwMEQ4ODMwMDQwODFCMjAwMDAwNDk1MDA0M0UxCis6MTA1RUYwMDA2MTMxMDEwMERFODMyMjUwMkY3QzAwMDAwMDAwMDA1NjNCCis6MTA1RjAwMDAxNzkwMDEwMDA3MDAwMDE3OTg4ODAxMDBFMTgzQTI0MTYzCis6MTA1RjEwMDA5OTZDMDAwMDAwMDAwMDU1MTc5MDAxMDAwMDAwMDA0MzNDCis6MTA1RjIwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBFMjgzQTg0MDgxCis6MTA1RjMwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDBFQjk0MDA0MDZBCis6MTA1RjQwMDA4MTMyMDEwMEU5ODMyMjQzMkY3QzAwMDAxNjgwMDAwMzg4Cis6MTA1RjUwMDA0NEM5MDEwMDAwMDAwMDFERTRCMTAxMDA4Qzk0MDA1RTAyCis6MTA1RjYwMDAwNTEwMDEwMEVDODNBMjVGMkY3QzAwMDBBNjkxMDAwMUM4Cis6MTA1RjcwMDAzODQzMDEwMEIwOTIwMDQwODEzMjAxMDAzMDg3MDA0MDc4Cis6MTA1RjgwMDA4MUIyMDAwMEYwODNBMjRCRkQ3RjAwMDA4QTg0MDA0MUIzCis6MTA1RjkwMDA0M0MzMDAwMDAwMDAwMDQwMjdCMDAxMDAwMDAwMDA0MEEzCis6MTA1RkEwMDAyREIwMDEwMDAwMDAwMDQwMTFCMDAxMDBGMzgzMzUwMTY1Cis6MTA1RkIwMDA4NjMwMDAwMDZEMDAwMDQwNjE5OTAxMDBGQjgzMjhCMTJDCis6MTA1RkMwMDAzMDMwMDAwMEY0ODMyMjRENzU3RDAwMDAwMDAwMDAxNjgzCis6MTA1RkQwMDA4MEIyMDEwMDdBODRBNzQwMTE2QzAwMDAwMDAwMDA0MUVCCis6MTA1RkUwMDA0M0MzMDEwMDg5ODQwMDQwODFCMjAwMDA2RDAwMDA0MDdECis6MTA1RkYwMDA2MTk5MDEwMEZCODNBOEIxMTIzMDAwMDAwMDAwMDAxNjc3Cis6MTA2MDAwMDA4MEIyMDEwMDA1ODRBNzQwMTE2QzAwMDAwMDAwMDA0MTJGCis6MTA2MDEwMDA0M0MzMDEwMDAwMDAwMDA5MTBCMDAxMDAwMDAwMDAxODk3Cis6MTA2MDIwMDAyQ0IwMDEwMERFMDcwMDQzODBDRTAxMDBGNDgzQUE0MEJCCis6MTA2MDMwMDA4MTMyMDAwMDBBODQwMDQwODFCMjAwMDA0MDAwM0U0M0VCCis6MTA2MDQwMDAyN0UwMDEwMDAwMDAwMDA5RjBCMTAxMDAwMDAwMDAxODg1Cis6MTA2MDUwMDBFMEIxMDEwMDAwMDAwMDQxMjdDMDAxMDBGNDgzQTMwQjYwCis6MTA2MDYwMDA4NzUwMDAwMDAwMDAxNTQwMUJCMDAxMDAwMDAwMDA0MEY4Cis6MTA2MDcwMDAyM0IwMDEwMDEyMDAwMDAwMkFDODAxMDA0MDAwMkQ0MDlBCis6MTA2MDgwMDAzOUIwMDEwMDEyODRBMjQwMjc2QzAwMDAyMjAwMDAwOEYxCis6MTA2MDkwMDAxMkM4MDEwMERFMDcwMDQwMjU5ODAxMDAxNTg0MDA0MDY5Cis6MTA2MEEwMDA4MUIyMDAwMDAwMDAwMEY4MTJCMDAxMDAwMDAwMDBGMDEyCis6MTA2MEIwMDAzMEIwMDEwMDAwMDAwMDBCMjVCMDAxMDAwMDAwMDAxMDBFCis6MTA2MEMwMDAzMkIwMDEwMDE0MDAyMDAxRTBCMTAxMDBFRTA3MDA0MEYxCis6MTA2MEQwMDAzNzk4MDEwMDFBODQyMzAxMzY2QzAwMDAwMDAwMDAwMThCCis6MTA2MEUwMDAzNkIwMDEwMDI1ODQ4MjQxMjM0MDAwMDAyMDgwMDAxMDRBCis6MTA2MEYwMDA0MkM5MDEwMDIxODQyMjQwRTM2RDAwMDAwMDAwMDA0M0ZBCis6MTA2MTAwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAxRTg0QTg0MDYyCis6MTA2MTEwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDBDRjkyMDA0M0EzCis6MTA2MTIwMDAyMzMwMDEwMDAwMDAwMDEwMzJCMDAxMDAwMDAwMDA0MUU3Cis6MTA2MTMwMDAyM0IwMDEwMDAwMDAwMDAzNDhCMTAxMDAwMDgwMDAxOUY1Cis6MTA2MTQwMDA0NEM5MDEwMDM0ODQyMjQ1MUY3QzAwMDAwMDAwMDA0QzNCCis6MTA2MTUwMDBGMUIxMDEwMDAwMDAwMDA5RjBCMTAxMDAwMDAwMDAxOEQ5Cis6MTA2MTYwMDBGMEIxMDEwMDAwMDAwMDQzNjFCMTAxMDAyMDAwMDAxOUZFCis6MTA2MTcwMDA2MkREMDEwMDJCODRBODE1RTAzMTAwMDAwMDAwMDA1MDEyCis6MTA2MTgwMDAwM0QwMDEwMDAwMDAwMDUwMzNDMDAxMDAwMDAwMDA0Q0FCCis6MTA2MTkwMDAyNUQwMDEwMDBDMDAyRDRDMTNDMDAxMDAwMDAwMDA1MDYwCis6MTA2MUEwMDAzN0QwMDEwMDAwMDAwMDUwMkJDMDAxMDAxQTg0MDA0NUM4Cis6MTA2MUIwMDAxRjgwMDAwMDM2ODRBMzEyMzY2QzAwMDAzNzg0NjgxQkYxCis6MTA2MUMwMDAyOEIwMDAwMDAwMDA2ODEyMjhCMDAxMDAwMDAwMDAwOTlCCis6MTA2MUQwMDBGMEIxMDEwMDAwMDAwMDE4RjBCMTAxMDAwMDAwMDA0MzIwCis6MTA2MUUwMDA2MUIxMDEwMDIwMDAwMDE5NjJERDAxMDAzQTg0QTgxNUE4Cis6MTA2MUYwMDBFMDMxMDAwMDYwODQyMjE0MDI1MDAwMDAwMDAwMDA1MEQyCis6MTA2MjAwMDAzM0MwMDEwMDAwMDAwMDE0MjREMDAxMDAwQzAwMkQxNDQ0Cis6MTA2MjEwMDAxMkMwMDEwMDU5ODRBMjE0MzY1MDAwMDA0QTg0MjI1QzQ2Cis6MTA2MjIwMDAxRjdDMDAwMDMwODAwMDEwNDJDOTAxMDA0ODg0MjI0MEQ5Cis6MTA2MjMwMDBFMzZEMDAwMDAwMDAwMDQyNjFCMTAxMDA0MDAwMDAxMDY5Cis6MTA2MjQwMDA2MkREMDEwMDQ1ODRBODQwODEzMjAwMDBBRjgyMDA4OEYxCis6MTA2MjUwMDAxQ0IwMDAwMDAwMDAwMDAzNDhCMTAxMDAwQzAwMkQ1Q0UwCis6MTA2MjYwMDAxRjgwMDEwMDEwMDAwMEYwMkFDODAxMDAwMDAwMDA1QzNGCis6MTA2MjcwMDAyQjgwMDEwMEYwMDcwMDQwMzc5ODAxMDA0Rjg0MjMwMTc0Cis6MTA2MjgwMDAzNjZDMDAwMDAwMDAwMDAxMzZCMDAxMDA1QTg0MjIxQjY5Cis6MTA2MjkwMDAwMjZDMDAwMDMwMDAwMDEwNDhDOTAxMDAwMDAwMkU1Q0I0Cis6MTA2MkEwMDAxRjkwMDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwMzQ4Cis6MTA2MkIwMDBGMEIxMDEwMEZGMDcwMDE1RTA4RDAxMDAwMDAwMDA0MjcxCis6MTA2MkMwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDA1Njg0QTg0MDc1Cis6MTA2MkQwMDA4MTMyMDAwMDVBODQwMDAzNDhCMTAwMDAwMDAwMDAxNDFECis6MTA2MkUwMDAyQUMwMDEwMDFBODRBMjQwMjU2QzAwMDAwMDAwMDA0MTcxCis6MTA2MkYwMDAzOUMwMDEwMDQwMDAzRDQzMzlFMDAxMDAwMDAwMDAwQkJGCis6MTA2MzAwMDAyNUIwMDEwMDAwMDAwMEY4MTJCMDAxMDAxQTg0MDBGMDZFCis6MTA2MzEwMDAzMEIwMDAwMDAwODAwMDE5NDJDOTAxMDA2Njg0MjI0MEFDCis6MTA2MzIwMDBFMzZEMDAwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxOTZFCis6MTA2MzMwMDA2MkREMDEwMDYzODRBODQwODEzMjAwMDBBRjgyMDA4OEUyCis6MTA2MzQwMDAxQ0IwMDAwMENGOTIwMDQwMkIzMDAxMDAxODAwMkUwMzNCCis6MTA2MzUwMDA0OEIxMDEwMDZBODQyMjUwMkY3QzAwMDAwMDAwMDA1NkUyCis6MTA2MzYwMDAxNzkwMDEwMDA3MDAwMDE3OTg4ODAxMDA2RDg0QTI0MTcyCis6MTA2MzcwMDA5OTZDMDAwMDAwMDAwMDU1MTc5MDAxMDA3MDg0MjI0M0MyCis6MTA2MzgwMDAyRjdDMDAwMDAwMDAwMDU0MTc5MDAxMDAxNjAwMjAxRDEzCis6MTA2MzkwMDBFNEIxMDEwMDcyODRBMzQwMjc2QzAwMDA3NDg0NjA1RjQ0Cis6MTA2M0EwMDAxNzkwMDAwMDAwODQwMDBCMTZEQzAxMDAwMDAwNjAxMzUxCis6MTA2M0IwMDAxNjk0MDEwMDhDOTQwMDVFMDUxMDAxMDAzMDg3QTI1RkU2Cis6MTA2M0MwMDAyRjdDMDAwMDE0ODAwMDAzNDJDOTAxMDAwMDAwMDBGMjhECis6MTA2M0QwMDAwMkIwMDEwMEE2OTEwMDAxMzg0MzAxMDAzMDg3MDA0MDVGCis6MTA2M0UwMDA4MUIyMDAwMDAwMDAwMDQwODNCMDAxMDAwMDAwMDA0REI5Cis6MTA2M0YwMDA2MUIxMDEwMDAwMDAwMDE2NjJCMTAxMDA3Qzg0QTg0MDc4Cis6MTA2NDAwMDA4MTMyMDAwMDAwMDAwMDA4NjJCMTAxMDA3RTg0QTg0MEQzCis6MTA2NDEwMDA4MTMyMDAwMDg5ODQyMjEzODI2QzAwMDA0MDAwM0Q0M0Q5Cis6MTA2NDIwMDA4M0UwMDEwMDAwMDAwMEY4MTBCMDAxMDAwMDAwMDBGMDVGCis6MTA2NDMwMDAyQ0IwMDEwMDAwMDAwMDE2NjJCMTAxMDA4NDg0QTg0MDY1Cis6MTA2NDQwMDA4MTMyMDAwMDAwMDAwMDA4NjJCMTAxMDA4Njg0QTg0MDhCCis6MTA2NDUwMDA4MTMyMDAwMDgwODQwMDQxODNDMDAwMDAwMDAwMTU0MEFDCis6MTA2NDYwMDA4MUIyMDEwMDAwODIwMEE2MDRCMDAxMDBBMDk4MDA0MEEzCis6MTA2NDcwMDA0Nzk5MDEwMDMwMDUwMDQxODkzMDAxMDA1ODkzMDA1MkNFCis6MTA2NDgwMDA5NTMwMDEwMDVGOTMwMDRCMDJCMDAwMDAzMDg3MDA0MDYwCis6MTA2NDkwMDAwRkIwMDAwMDAwMDAwMDVGMDE4MDAxMDAxMDAwMDAwMDRDCis6MTA2NEEwMDAwRUY0MDEwMDNGMDAwMDAwMDA4ODAxMDAwMzAwMDAwNzE3Cis6MTA2NEIwMDAxQUY0MDEwMEVGOTIwMDA3MTYzMDAxMDA5Qjg0MjI0MTdDCis6MTA2NEMwMDA4MTZDMDAwMDk5ODQyMjQyODE2QzAwMDBBRjgyMDA4OEI4Cis6MTA2NEQwMDAxQ0IwMDAwMDlBODQyMjVGMEY3QzAwMDAxQTg3MDA0MEU1Cis6MTA2NEUwMDAwRkIwMDAwMEEzODRBMjVBMUY3QzAwMDA2OTkyMDA0MEY0Cis6MTA2NEYwMDA4MTMyMDEwMEEzODQyMjIwODU2QzAwMDBBMDg0OUMwRkJGCis6MTA2NTAwMDA4MDMyMDAwMEFGODIwMDg4MUNCMDAwMDA0QTkzMDA1QzFCCis6MTA2NTEwMDAxRjAwMDEwMDNDOTUwMDQyNjEzMTAxMDBBRjgyMDA4OEZDCis6MTA2NTIwMDAxQ0IwMDAwMDkwMDQwMDA3OTYzMDAxMDAwMDAwMkQwNTBCCis6MTA2NTMwMDA0OEIxMDEwMDAwMDAwMEYwMThCMDAxMDBBOTg0MjIzQTFGCis6MTA2NTQwMDAwMTZDMDAwMDAwMDAwMDAwOEVCMDAxMDA4MTg4MDA0MDU2Cis6MTA2NTUwMDAwMUIwMDAwMDAwMDAwMDQwODFCMjAxMDAyRTAwMkQwNUI2Cis6MTA2NTYwMDA0OEIxMDEwMEFEODRBMjQwRTc2RDAwMDAwQTAwMDA0MDgwCis6MTA2NTcwMDA4Rjk4MDEwMDgxODgwMDQwMDFCMDAwMDAzNDkyMDA0MEYzCis6MTA2NTgwMDA4MTMyMDEwMDFDOTQwMDk1MDMzMDAxMDBBRjgyMDA4ODI1Cis6MTA2NTkwMDAxQ0IwMDAwMDAwMDAyRDAzNDhCMTAxMDAyMjAwMkRGMEM2Cis6MTA2NUEwMDAyRUIwMDEwMDI4MjAwMEE2OTZCMDAxMDBCNjg0MjIxNzY0Cis6MTA2NUIwMDA5NjA0MDAwMEUwOTQwMDRCOTUzMDAxMDA4MTg4MDA0QzY3Cis6MTA2NUMwMDA4RkIwMDAwMEI4ODQ4MzE3ODAzMjAwMDAwMDAwMDA0NEMwCis6MTA2NUQwMDA0M0MxMDEwMEJBODQ4NTE3ODAzMjAwMDAwMDAwMDA0OEUyCis6MTA2NUUwMDA0M0MxMDEwMDI4MDAwMEY2MDJDQzAxMDAxMjAwMDBBMTA2Cis6MTA2NUYwMDAyQUM4MDEwMEVGOTMwMDQwODEzMjAxMDBDQTkxMDA0MTk2Cis6MTA2NjAwMDA4MTMwMDEwMDgxODgwMDQwODFCMjAwMDAwMDAwMDAwMTVCCis6MTA2NjEwMDAwMEQwMDEwMDAwMDAyRTEwNDhCMTAxMDAyODAwMDA0MDA5Cis6MTA2NjIwMDBGMTk5MDEwMDAwMDAwMDAzRjBCMTAxMDAwMDAwMDAwMDNBCis6MTA2NjMwMDBGMEIxMDEwMEM0ODQ2NDQ3NjEzMTAwMDAwMDAwMDAxMDIzCis6MTA2NjQwMDA2MkIxMDEwMEM1ODRBODFCRTAzMTAwMDBBRjgyNzQ4OEVDCis6MTA2NjUwMDAxQ0IwMDAwMDAwMDAwMDQ1MDNFMDAxMDAwODAwMkQwMzBECis6MTA2NjYwMDA0OEIxMDEwMEVBODQwMUZCMDgzMDAwMDAzRDg1ODdGQjRBCis6MTA2NjcwMDAyMjMwMDAwMDAwMDAwMEZBMEVCMDAxMDAwMDAwMDBGODE3Cis6MTA2NjgwMDAxNEIwMDEwMDAzMDAwMDA3MUFGNDAxMDBFRjkyMDAwN0E0Cis6MTA2NjkwMDAxNjMwMDEwMEUwODQyMjQxODE2QzAwMDBENDg0MjI0MjQzCis6MTA2NkEwMDA4MTZDMDAwMEFGODIwMDg4MUNCMDAwMDBERjg0MjI1Rjk0Cis6MTA2NkIwMDAwRjdDMDAwMDM4MDAwMDA0N0U4OTAxMDBEODg0QTY1RkFBCis6MTA2NkMwMDAwRjAwMDAwMDQyOTIwMDQwMDUzMDAxMDBERDg0MDA0MEQwCis6MTA2NkQwMDA4MUIyMDAwMDEzMDAwMDQwODc5ODAxMDAwMDAwMkQwM0U0Cis6MTA2NkUwMDA0OEIxMDEwMDBDMDAyREYwODJCMDAxMDAwMDAwMDBGMDY0Cis6MTA2NkYwMDA4NEIwMDEwMENFOTMwMDQwMDUzMDAxMDAwMDAwMDA1QzMyCis6MTA2NzAwMDAxRjkwMDEwMDFBODcwMDQwMEZCMDAwMDBFODg0QTI1QUQxCis6MTA2NzEwMDAxRjdDMDAwMDY5OTIwMDQwODEzMjAxMDBFODg0MjIyMDQxCis6MTA2NzIwMDA4NTZDMDAwMEU1ODQ5QzBGODAzMjAwMDBBRjgyMDA4OEY5Cis6MTA2NzMwMDAxQ0IwMDAwMDRBOTMwMDVDMUYwMDAxMDAzQzk1MDA0MjIxCis6MTA2NzQwMDA2MTMxMDEwMEFGODIwMDg4MUNCMDAwMDA5MDA0MDAwNzk2Cis6MTA2NzUwMDA5NjMwMDEwMDAwMDAyRDA1NDhCMTAxMDAwMDAwMDBGMDU2Cis6MTA2NzYwMDAxOEIwMDEwMEVDODQyMTA0ODAyMDAwMDBFRDg0MDA0MDdBCis6MTA2NzcwMDAxMEM5MDAwMEMzODcwMDRCODFCMDAwMDAwQzg1MDA0M0E2Cis6MTA2NzgwMDA4MUIwMDAwMDEwODUwMEZCMjJCMDAwMDBDMzg3MDA0MUVCCis6MTA2NzkwMDA4MUIwMDAwMDgxODgwMDRFOEZCMDAwMDAwODg1MDA1QTRCCis6MTA2N0EwMDA4RkIwMDAwMEY1ODQwMDQ3OEZCMDAwMDBDMzg3MDA1MzBFCis6MTA2N0IwMDA4MUIwMDAwMEMzODcwMDU2ODFCMDAwMDAzMjAwMkQwNTczCis6MTA2N0MwMDA0OEIxMDEwMDgxODhBMDBBRTQ2RDAwMDBGQjg0QTI0MTY5Cis6MTA2N0QwMDAxOTdDMDAwMEZBODQyMjBBODAzMjAwMDA4MTg4MDA1MzZDCis6MTA2N0UwMDA4RkIwMDAwMDgxODgwMDU0OEZCMDAwMDAwNDg1MjIwQTE5Cis6MTA2N0YwMDA4MDMyMDAwMEZFODRBMjBBRTQ2RDAwMDA4MTg4MDA1RDAyCis6MTA2ODAwMDA4RkIwMDAwMDAwMDAwMEYyODBCMDAxMDAwMDAwMDAwQTFDCis6MTA2ODEwMDA4MEQwMDEwMDAyODVBMDkxODE2QzAwMDA4MTg4MDA1RTFCCis6MTA2ODIwMDA4RkIwMDAwMDI1MDAwMDQwOEY5ODAxMDA4MTg4MDA0MDUzCis6MTA2ODMwMDA4MUIyMDAwMDA2ODUyMDkxRTU2RDAwMDA4MTg4MDA1NDNBCis6MTA2ODQwMDA4RkIwMDAwMDIxMDAwMDQwOEY5ODAxMDA4MTg4MDA0MDM3Cis6MTA2ODUwMDA4MUIyMDAwMDMyMDAyRDA1NDhCMTAxMDA4MTg4QTAwQUY0Cis6MTA2ODYwMDBFNDZEMDAwMDI0MDAwMDQwOEY5ODAxMDA4MTg4MDA0MDAyCis6MTA2ODcwMDA4MUIyMDAwMDM3MDAyRDA1NDhCMTAxMDAwNDAwMDBGMzhCCis6MTA2ODgwMDA4MkY0MDEwMEMzODdBMDQyODM2QzAwMDBDMzg3MDA1NEQ4Cis6MTA2ODkwMDA4MUIwMDAwMDAwMDAwMEYyMEVCMDAxMDAwMzAwMDAwNzBDCis6MTA2OEEwMDAxQUY0MDEwMDAwQjUwMDBENDJDOTAxMDAwNzAwMDAwN0ZECis6MTA2OEIwMDAxNjg4MDEwMDE5ODUyMjBCRTY3RDAwMDAwQTAwMDA0MEMxCis6MTA2OEMwMDA4Nzk4MDEwMERGOTUwMDQwODEzMjAxMDAwMDAwMDA0MDAwCis6MTA2OEQwMDAwRkIwMDEwMDFBODcwMDVDMUY5MDAwMDAyQjg1MjI1MDJBCis6MTA2OEUwMDBGRDdGMDAwMDI2ODVBMjU0RkQ3RjAwMDAxRTg1MjI1NUY1Cis6MTA2OEYwMDBGRDdGMDAwMDgyMDAwMDQwODc5ODAxMDAxNjg1MDA0MDVGCis6MTA2OTAwMDA4MUIyMDAwMDE2ODUyMjUzRkQ3RjAwMDAxNDgwMDAwMzMxCis6MTA2OTEwMDA0MkM5MDEwMDAwMDAwMEYwOTZCMDAxMDAxMDAwMDA0QkQ5Cis6MTA2OTIwMDA4MEY0MDEwMDBDQkMwMDQwODc5ODAxMDAyNjg1MjI0M0JBCis6MTA2OTMwMDA4MDZDMDAwMEZGRkYwMDRCODA4ODAxMDAxNjg1QTI0Mzk5Cis6MTA2OTQwMDA4MDZDMDAwMDdDOTYwMDQwNDc5OTAxMDAyNzg1NDY0MEY2Cis6MTA2OTUwMDA4MTMyMDAwMDJBODVBMEYwMzA2RjAwMDAxQzg1MUU0MEE3Cis6MTA2OTYwMDA4MUIyMDAwMDAwMDAxRTQxMzFDMzAxMDA3MzkyMDA0MDVCCis6MTA2OTcwMDAyNTMwMDEwMDJGODU5QzBGODAzMjAwMDBBRjgyMDA4OEY3Cis6MTA2OTgwMDAxQ0IwMDAwMDRBOTMwMDVDMUYwMDAxMDAxNDgwMDAwMzRCCis6MTA2OTkwMDA0MkM5MDEwMDAwMDAwMEYwOTZCMDAxMDAwMDAwMkYwNTgwCis6MTA2OUEwMDA0OEIxMDEwMDEwMDAwMDA3MThFNDAxMDAwMDA4MDAwQ0M1Cis6MTA2OUIwMDBFMDk5MDEwMDkwMDQwMDA3OTYzMDAxMDAwMEI1MDAwRDM5Cis6MTA2OUMwMDA0NkM5MDEwMDM2ODUzMDQwODEzMjAwMDAwMDAwMDAwQkNFCis6MTA2OUQwMDBFNjkxMDEwMDAwMDIwMEExNDZDOTAxMDAwMDAwMDAwQjgxCis6MTA2OUUwMDBFNjkxMDEwMDA0MDAyRTA1NDhCMTAxMDAwMDAwMTA0MEFFCis6MTA2OUYwMDBFMUIxMDEwMEMzODcwMDQwODFCMDAwMDAwMDAwMDBGQjRFCis6MTA2QTAwMDAyOEIwMDEwMDAwMDAwMEZCODZCMDAxMDAwMDAwMDBGODgzCis6MTA2QTEwMDAxNEIwMDEwMDQ3ODUyMjQ2MjM3QzAwMDA0Mzg1MjI0MEI0Cis6MTA2QTIwMDA4NzdDMDAwMDAwMDAwMDQ4MUY5MDAxMDA0NTg1MjI0MTNFCis6MTA2QTMwMDA4NzdDMDAwMDAwMDAwMDQ3MUY5MDAxMDA0Nzg1MjI0MjJDCis6MTA2QTQwMDA4NzdDMDAwMDAwMDAwMDQ1MUY5MDAxMDA0Nzg1NjYxQjAxCis6MTA2QTUwMDAyQzMwMDAwMDAwMDAwMEEwMTNCMDAxMDAwMDAwNzY0MUJGCis6MTA2QTYwMDA0MUMzMDEwMDc2ODUyMzkyMTU2QzAwMDA3Njg1QTI0NTBFCis6MTA2QTcwMDAxRjdDMDAwMDdBODUyMjRCRkQ3RjAwMDAxNzAwMDBEMEFDCis6MTA2QTgwMDBBMkM5MDEwMDAwMDAwMDQwMjdCMDAxMDAwMjAwMDAwQTc2Cis6MTA2QTkwMDAyNEM4MDEwMEFCOTIwMDQwMEYzMDAxMDA3NDg1MjIwODI5Cis6MTA2QUEwMDA0MDMwMDAwMDAwMDAwMDQxQTNDMTAxMDBGMDA3MDAxMkM3Cis6MTA2QUIwMDAyNENDMDEwMDUwODVBQTQxMjc0MDAwMDAwMTAwMDAxM0FBCis6MTA2QUMwMDA4MENDMDEwMDcwODUyNjQwMjMzMDAwMDAwMDAwMDA0MDhCCis6MTA2QUQwMDA4M0IwMDEwMDYwMDAwMDAzODRDODAxMDAxMDAwMDAxMEIyCis6MTA2QUUwMDA0OENEMDEwMDE3MDAwMEQwQTJDOTAxMDA1RDg1QTI0MDc5Cis6MTA2QUYwMDA4MzZDMDAwMDY5ODUwMDQxODNCMDAwMDAwMDgwMDA0MjgzCis6MTA2QjAwMDA0NDk5MDEwMDAwMDA2ODIxMzg5NjAxMDAwMDAwMkU1MEQxCis6MTA2QjEwMDA0OUMxMDEwMDYyODVBMjQ0MjM2QzAwMDAzMDAwMDAwM0RCCis6MTA2QjIwMDA0OEM5MDEwMDAwMDAwMDQ0RjFCMTAxMDAwQzAwMDAyMDQwCis6MTA2QjMwMDBGMEM5MDEwMDAwMDAwMDQ0NjFCMTAxMDBBMDAwMDBBNDAwCis6MTA2QjQwMDA2MkREMDEwMDY1ODVBODQyRTAzMTAwMDAwMDAwMDA0NERDCis6MTA2QjUwMDA4NUMwMDEwMDAwMDAwMDQxMjNDMDAxMDAwMDAwMDA0MTg5Cis6MTA2QjYwMDBBM0MxMDEwMDVCODVBMjQxODE1MDAwMDA3MDg1MjI0MEQ1Cis6MTA2QjcwMDAyMzZDMDAwMDAwMDAwMDQ0NjFCMTAxMDA0MDAwMDAxMERGCis6MTA2QjgwMDA2MkREMDEwMDZEODVBODQwODEzMjAwMDBBRjgyMDA4ODdGCis6MTA2QjkwMDAxQ0IwMDAwMDAwMDAwMDAzNDhCMTAxMDBFRTA3MDA0MEY3Cis6MTA2QkEwMDAyNTk4MDEwMDE3MDAwMEQwMkFDODAxMDA4Mzg1MDAxNzJFCis6MTA2QkIwMDAxMEIwMDAwMDk1OTQwMDQwODEzMjAxMDA3QTg1MDA0MEI5Cis6MTA2QkMwMDA4MUIyMDAwMEFCOTIwMDkyMjUzMDAxMDAwMDAwMDA0MDJECis6MTA2QkQwMDAzMUIwMDEwMDdBODUyMjA4MkUzMDAwMDA4Mzg1MDA0MTAzCis6MTA2QkUwMDAyN0IwMDAwMDgwODAwMEE2MDRCMDAxMDAwNjAwMDA0MDJECis6MTA2QkYwMDA4Nzk4MDEwMERGOTUwMDBBOEMzMDAxMDAwMDAwMDA0MEZBCis6MTA2QzAwMDAwRkIwMDEwMDAwMDAwMDVDMUY5MDAxMDA4Mjg1MjI5RkYwCis6MTA2QzEwMDAxMzZDMDAwMDAyMDAwMDg4MUNDQzAxMDBGNTgyMDA0MENCCis6MTA2QzIwMDA4MUIyMDAwMDFBODcwMDQxM0ZDMzAwMDAwMDAwMDA0MDBECis6MTA2QzMwMDAwRkIwMDEwMDI4MDAwMDAxODBDRTAxMDA5Nzg1MkE0MDk2Cis6MTA2QzQwMDA4MTMwMDAwMDAwODAwMDEwNDRDOTAxMDA0MDAwMDA0MDc1Cis6MTA2QzUwMDA4MTk4MDEwMDhDODVBMjQ4MUY3QzAwMDA4Qzg1QTI0NzhBCis6MTA2QzYwMDAxRjdDMDAwMDhDODVBMzA3MDM2QzAwMDA4MDAwMDA0MDlGCis6MTA2QzcwMDA4MTk4MDEwMDhGODVBMzQwMDI2QzAwMDAyODAwMDAwMTZDCis6MTA2QzgwMDBGMENEMDEwMDkxODUwMDQwMEZCMDAwMDAyODAwMDA0MEM5Cis6MTA2QzkwMDBGMENEMDEwMDA0MDAwMDQwMEVDQzAxMDAyODAwMDAwM0VDCis6MTA2Q0EwMDBGMEM5MDEwMDI4MDAwMDAwRjBDOTAxMDAwMDAwMDAxNjMyCis6MTA2Q0IwMDBFMEIxMDEwMDAwMDAwMDQ3NjFCMTAxMDAyMDAwMDAxMEI4Cis6MTA2Q0MwMDA2MkREMDEwMDk1ODVBODVDMUYxMDAwMDAwMDAwMDA0MEY3Cis6MTA2Q0QwMDA0Mzk5MDEwMDAwMDAwMEYwMDhCMDAxMDBBMDAxMkQ0MDIwCis6MTA2Q0UwMDAwMEMwMDEwMDYxODYyMjBGNDIwNTAwMDBBODg1OUMwRkFDCis6MTA2Q0YwMDA4MDMyMDAwMDAwMDAwMDVDMUY4MDAxMDAwMDgwMDAxMDU2Cis6MTA2RDAwMDA0MkM5MDEwMEEzODUyMjQwRTM2RDAwMDAwMDAwMDA0NzU2Cis6MTA2RDEwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBBMDg1QTg0MEMzCis6MTA2RDIwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDBBODg1MjIwN0Q1Cis6MTA2RDMwMDA4MDMyMDAwMDAwMDAwMDAzNDJCMTAxMDAwMDAwMDAwN0EzCis6MTA2RDQwMDA0MkMxMDEwMDAwODAwMEExNDY5OTAxMDAwMDAwMDA1RkRGCis6MTA2RDUwMDBFMTkxMDEwMEMwMDZBMjQ1MUY3QzAwMDAxMDAwMDAwMzY1Cis6MTA2RDYwMDA0OEM5MDEwMDAwMDAyRDU0MjlDMDAxMDAwMDAwMDBGOEFFCis6MTA2RDcwMDAxOEIwMDEwMDAwMDAwMEY4MDRCMDAxMDAwMDAwMDBGOEE1Cis6MTA2RDgwMDAwRUIwMDEwMDQyMDAwMDAzMEFDODAxMDAwQzAwMDBBNDdDCis6MTA2RDkwMDAwQ0M4MDEwMEVEOTIwMDQwODEzMjAxMDAwMDAwMDAxNDk3Cis6MTA2REEwMDAwMkIwMDEwMDAwMDAwMDE0MjREMDAxMDAwMDAwMDAxNDEzCis6MTA2REIwMDAxMEMwMDEwMDEyMDAwMDA4MTBDODAxMDAwMDAwMDA0MENGCis6MTA2REMwMDAyM0IwMDEwMEZFN0YwMDA1NDRDOTAxMDAwMDAwMDAwQTU1Cis6MTA2REQwMDBFNEIxMDEwMEQxODUyMjAxODAzMjAwMDAwMDAwM0M0NDcyCis6MTA2REUwMDAyM0UwMDEwMDAwMDAyRUE0ODBCMDAxMDAwMDAwMDAxMDhDCis6MTA2REYwMDA0OEMxMDEwMEJFODVBMzA3MDI2QzAwMDBCRjg1NjgwMTgxCis6MTA2RTAwMDAxQUIwMDAwMDAwMDA2ODA3MUFCMDAxMDAwMDAwMDAwRDcxCis6MTA2RTEwMDAwMkQwMDEwMDAwMDAwMDA1RjBCMTAxMDAwMDAwMDAwQ0VDCis6MTA2RTIwMDBGMEIxMDEwMDAwMDAwMDAyRTBCMTAxMDAwMDAwMDAwRDFGCis6MTA2RTMwMDAwQUMwMDEwMENCODUyMjQwMDM2QzAwMDBDQjg1MjI0MkIyCis6MTA2RTQwMDAyMzZDMDAwMDAwMDAwMDQxMjNDMDAxMDAwMDAwMDA0NzQ3Cis6MTA2RTUwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDBFRjg1Mjg0MEJGCis6MTA2RTYwMDA4MTMyMDAwMEM4ODUwMDQwODFCMjAwMDAwMDAwMDAxMDlGCis6MTA2RTcwMDA4MEMwMDEwMDAwMDAwMDQ3NjFCMTAxMDAwMDAwMDA0MDM3Cis6MTA2RTgwMDA2MkIxMDEwMENEODVBODQwMjMzMDAwMDBBRjgyMDA4OEE4Cis6MTA2RTkwMDAxQ0IwMDAwMEVGODUwMDQwODFCMjAwMDAwMDAwM0M0NEJGCis6MTA2RUEwMDAyM0UwMDEwMDAwMDAwMEE0ODZCMDAxMDAwMDAwMkUxMEM1Cis6MTA2RUIwMDA0OEMxMDEwMEQ2ODVBMzEyMEU2QzAwMDBENzg1NjAwNzdCCis6MTA2RUMwMDAxQUIwMDAwMDAwMDA2MDEyMUFCMDAxMDAwMDAwNjgwRDQ2Cis6MTA2RUQwMDAxNjk0MDEwMEZGRkYwMDBCMTZEODAxMDAwMDAwNjgwODlGCis6MTA2RUUwMDAzRTk2MDEwMDAwMDAwMDBDRjBCMTAxMDAwMDAwMDAwMjFECis6MTA2RUYwMDBFMEIxMDEwMDAwMDAwMDEwODZDMDAxMDAwMDAwMDA0NjYzCis6MTA2RjAwMDA2MUIxMDEwMDIwMDAwMDQzNjJERDAxMDBERTg1QTg1QzY0Cis6MTA2RjEwMDAxRjEwMDAwMDBEODYyMjBEMTQ2QzAwMDBFNDg1MjIwRDY4Cis6MTA2RjIwMDAyNDZDMDAwMDAwMDAwMDBEMTBDMDAxMDBFODg1MDAwRDc5Cis6MTA2RjMwMDAyNEQwMDAwMDAwMDAwMDQxMkJDMDAxMDAwMDAwMDAxNTFCCis6MTA2RjQwMDBBMkIxMDEwMDEwMDAwMDIwMTBDODAxMDBGMDA3MDA0MEFECis6MTA2RjUwMDAyNTk4MDEwMEVBODUyMjQyMjM2QzAwMDBFRjg1MDA0MTVDCis6MTA2RjYwMDAyM0MwMDAwMDAwMDAwMDQ2NjFCMTAxMDA0MDAwMDAxMDk1Cis6MTA2RjcwMDA2MkREMDEwMEVCODVBODVDMUYwMDAwMDBBRjgyMDA4ODg1Cis6MTA2RjgwMDAxQ0IwMDAwMDAwMDAwMDQwMjNCMDAxMDAwRDg2MjIwRDVGCis6MTA2RjkwMDAxNDUwMDAwMDBDODZBMjBEMEU1MDAwMDBGQjg1MjI0NjA2Cis6MTA2RkEwMDAxRjdDMDAwMDAwMDAwMDQ2MUY4MDAxMDAzMDgwMDAxMEEwCis6MTA2RkIwMDA0MkM5MDEwMEY5ODUyMjQwRTM2RDAwMDAwMDAwMDA0NzRFCis6MTA2RkMwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBGNjg1QTg0MEJCCis6MTA2RkQwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAyMDgwMDAwM0Q2Cis6MTA2RkUwMDA0Njk5MDEwMDAwMDAwMDVGRTE5MTAxMDAwMDAwMkQwNkJDCis6MTA2RkYwMDA0OEIxMDEwMDAwMDAwMEY4MThCMDAxMDAwMDAwMDBGOERFCis6MTA3MDAwMDAwNEIwMDEwMDAwODYxRkYwMEUzMDAwMDBCODg1MDA0QzZGCis6MTA3MDEwMDAwREMwMDAwMDAwMDAyRTVGMEY4MDAxMDBCODg1MjMwNzFGCis6MTA3MDIwMDAxNDZDMDAwMDMwMDAwMDEwNDhDOTAxMDAyNDAwMDA0MDJBCis6MTA3MDMwMDBGMTk5MDEwMDAwMDAwMDAzRjBCMTAxMDAwMDAwMDAwMDIwCis6MTA3MDQwMDBGMEIxMDEwMDAwMDAwMDE2RjBCMTAxMDAyNDAwMDAwMEMyCis6MTA3MDUwMDAwMEM4MDEwMDAwMDAwMDQ3NjFCMTAxMDBBMDAwMDBBNEM5Cis6MTA3MDYwMDA2MkREMDEwMDA5ODZBODQ2MUYxMDAwMDBCODg1MDAwM0Y0Cis6MTA3MDcwMDAwQ0IwMDAwMEI4ODUwMDBEMThDMDAwMDAwNDAwMkUxNEVDCis6MTA3MDgwMDAwQUQwMDEwMDEyMDAwMDA1NDhDRDAxMDBGRTdGMDAwNTc2Cis6MTA3MDkwMDA0MkM5MDEwMDBDMDAyQUYyRTBCMTAxMDAxMzg2MjI0MDJGCis6MTA3MEEwMDAzMTZDMDAwMDAwMDA2MDE4Mzg5NjAxMDAxRTAwMDA0MDlFCis6MTA3MEIwMDA0Mzk5MDEwMDAwODEwMEY2ODBDRTAxMDAxNzg2QTY0MEFBCis6MTA3MEMwMDA4MTMyMDAwMDAwMDAwMDQ0NDNDMTAxMDAxOTg2MjIwQkY4Cis6MTA3MEQwMDBFRDZEMDAwMDA4MDAwMEExNDJDOTAxMDAwMjAwMDBBMUZFCis6MTA3MEUwMDA0NkM5MDEwMDBGMDAwMEZBOTQ4ODAxMDAwMjAwMDA0QTFFCis6MTA3MEYwMDA4NkU0MDEwMDAwMDAwMEY2MEVCMDAxMDAyMTg2MjI0NzYwCis6MTA3MTAwMDAxRjdDMDAwMDA0MDAxRjQzMEU1MDAwMDAyMTg2QTA0NjkzCis6MTA3MTEwMDAwRjQwMDAwMDAwMDAwMDQxMEZDMDAxMDAyNTg2MjI0OEZBCis6MTA3MTIwMDAxRjdDMDAwMDAwMDAwMDQwOTFCMDAxMDAwNDAwMEZBMjhECis6MTA3MTMwMDA0MjMxMDAwMDI4ODYwMDQwODlCMDAwMDAwQzAwMDBBMjA3Cis6MTA3MTQwMDA0MkM5MDEwMDAwMDAwMDQzODlCMDAxMDAwMDAwMDA0MzczCis6MTA3MTUwMDA5NUQwMDEwMDAwMDAwMEZDODJCMDAxMDAyQjg2QTA0MTA4Cis6MTA3MTYwMDA5MDQwMDAwMDAwMDAwMDQxOTFDMDAxMDAzMDg2MjI0NzlECis6MTA3MTcwMDAxRjdDMDAwMDMwODZBMDQzODk2QzAwMDAzMDg2MjA0NUNCCis6MTA3MTgwMDA4OTZDMDAwMDMwODZBMDQxMEU0MDAwMDAwMDAwMDA0MUU0Cis6MTA3MTkwMDAwRkMwMDEwMDAwMDAwMDQxODlDMDAxMDAyODg2QTI0MTAzCis6MTA3MUEwMDA5NTUwMDAwMDM5ODYyMjQ4MUY3QzAwMDAxMDAwMDA0OERFCis6MTA3MUIwMDA5MkY0MDEwMEZGRkYwMDQ4OTA4ODAxMDAzNzg2OTA0ODU0Cis6MTA3MUMwMDA5MjQwMDAwMDAwMDAwMDQxOTNDMDAxMDAwQTAwMDBBMkFDCis6MTA3MUQwMDA0NEM5MDEwMDAwMDA2NjIwOTNBNDAxMDAzMDgwMDAxMDIzCis6MTA3MUUwMDA0NEM5MDEwMDEyMDAwMDE0RjBDOTAxMDAwMDAwMDAxNzlBCis6MTA3MUYwMDBGMEIxMDEwMDEyMDAwMDA1RTBDRDAxMDAzMDAwMDAxMEU4Cis6MTA3MjAwMDA4MEM4MDEwMDAwMDAwMDQ0NjFCMTAxMDAyMDAwMDA0MDdFCis6MTA3MjEwMDA2MkREMDEwMDNGODZBODQwODEzMjAwMDA0QTg2MjI1QzgwCis6MTA3MjIwMDAxRjdDMDAwMDAwMDAzQzQ0MjNFMDAxMDAwMDAwMkQxMDAyCis6MTA3MjMwMDA0OEMxMDEwMDQ5ODYyMjQwRTM2RDAwMDAwMDAwMDA0NjdECis6MTA3MjQwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA0Njg2QTg0MEU3Cis6MTA3MjUwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDA1QzlBCis6MTA3MjYwMDAxRjgwMDEwMDREODZBMjQ3MUY3QzAwMDBFMzkyMDA0MDcyCis6MTA3MjcwMDA4MTMyMDEwMEM2ODYwMDE3MTBCMDAwMDBFQTkyMDA0MDdCCis6MTA3MjgwMDA4MTMyMDEwMDAwMDAyRjAzNDhCMTAxMDA1MTg2QTAwN0EwCis6MTA3MjkwMDAxNjQwMDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwMDAwQjc0Cis6MTA3MkEwMDBFNEIxMDEwMDAwMDAwMDUwMTdGMDAxMDA1NTg2OTBGMjkzCis6MTA3MkIwMDAxNjQwMDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwNjYyMEQ5Cis6MTA3MkMwMDAxN0E0MDEwMDEwMDAwMDE0MkFDODAxMDAwMDAwMDA1MDlCCis6MTA3MkQwMDAyQkUwMDEwMDAwMDAwMEYyMkE5NDAxMDAzMDgwMDAxMDMxCis6MTA3MkUwMDA0MkM5MDEwMDVGODYyMjQwRTM2RDAwMDAwMDAwMDA0NEI3Cis6MTA3MkYwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA1Qzg2QTg0MDIxCis6MTA3MzAwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDgwMDAxN0FFCis6MTA3MzEwMDAxMERDMDEwMEM2ODYwMDQwODFCMjAwMDA2OTg2OUMwRjI3Cis6MTA3MzIwMDA4MDMyMDAwMDAwMDAwMDVDMUY4MDAxMDAwMDgwMDAxMDFGCis6MTA3MzMwMDA0MkM5MDEwMDY5ODYyMjQwRTM2RDAwMDAwMDAwMDA0NzU5Cis6MTA3MzQwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA2Njg2QTg0MEM2Cis6MTA3MzUwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDA2RTg2MjIwN0Q4Cis6MTA3MzYwMDA4MDMyMDAwMDAwMDAwMDAzNDJCMTAxMDAwMDAwMDAwNzZECis6MTA3MzcwMDA0MkMxMDEwMDAwODAwMEExNDY5OTAxMDAwMDAwMDA1RkE5Cis6MTA3MzgwMDBFMTkxMDEwMDA0MDAyRTAzNDhCMTAxMDAwMDAwMDAwQTUxCis6MTA3MzkwMDBFMEIxMDEwMDczODYyMjQwMzE2QzAwMDAwQzAwMDA0MDE3Cis6MTA3M0EwMDA0NTk5MDEwMDAwMDA2MDE4Mzg5NjAxMDAwMDAwMkUxMDc5Cis6MTA3M0IwMDA0OEIxMDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwOEQ4Cis6MTA3M0MwMDBGMEIxMDEwMDAwMDAwMDAzRTBCMTAxMDAwMDAwMDA0NDQyCis6MTA3M0QwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDA3ODg2QTg0MDkwCis6MTA3M0UwMDAyMzMwMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMkQ1MjQ2Cis6MTA3M0YwMDAxMUMwMDEwMDEwMDAwMDAzNDhDOTAxMDAwMDAwMDBGODlFCis6MTA3NDAwMDAxOEIwMDEwMDAwMDAwMEY4MDRCMDAxMDAwMDAwMDBGODBFCis6MTA3NDEwMDAwRUIwMDEwMDBDMDAwMEE0MENDODAxMDAwMDAwM0M0NEE4Cis6MTA3NDIwMDAyM0UwMDEwMDAwMDAwMEE0ODZCMDAxMDAwMDAwMkUxMDNGCis6MTA3NDMwMDA0OEMxMDEwMDg2ODZBMzEyMEU2QzAwMDA4Nzg2NjgwNzhCCis6MTA3NDQwMDAxQUIwMDAwMDAwMDA2ODEyMUFCMDAxMDAwMDAwMDAxMDFECis6MTA3NDUwMDA4NkMwMDEwMDAwMDA2ODA4M0U5NjAxMDAwMDAwMDAwQzk0Cis6MTA3NDYwMDBGMEIxMDEwMDAwMDAwMDAyRTBCMTAxMDAwMDAwMDA0NkEwCis6MTA3NDcwMDA2MUIxMDEwMDIwMDAwMDQzNjJERDAxMDA4Qzg2QTg1QzQwCis6MTA3NDgwMDAxRjEwMDAwMEJCODYyMjBEMTQ2QzAwMDA5Mjg2MjIwRDk2Cis6MTA3NDkwMDAyNDZDMDAwMDAwMDAwMDBEMTBDMDAxMDA5Njg2MDAwRDU1Cis6MTA3NEEwMDAyNEQwMDAwMDAwMDAwMDQxMkJDMDAxMDAwMDAwMDAxNUE2Cis6MTA3NEIwMDBBMkIxMDEwMDEwMDAwMDIwMTBDODAxMDBGMDA3MDA0MDM4Cis6MTA3NEMwMDAyNTk4MDEwMDk4ODYyMjQyMjM2QzAwMDA5RDg2MDA0MTg5Cis6MTA3NEQwMDAyM0MwMDAwMDAwMDAwMDQ2NjFCMTAxMDA0MDAwMDAxMDIwCis6MTA3NEUwMDA2MkREMDEwMDk5ODZBODVDMUYwMDAwMDBBRjgyMDA4ODYxCis6MTA3NEYwMDAxQ0IwMDAwMDAwMDAwMDQwMjNCMDAxMDAwNDAwMjIwRDc5Cis6MTA3NTAwMDAxNDUwMDAwMEJBODZBMjBEMEU1MDAwMDBBOTg2MjI0NjMzCis6MTA3NTEwMDAxRjdDMDAwMDAwMDAwMDQ2MUY4MDAxMDAzMDgwMDAxMDJBCis6MTA3NTIwMDA0MkM5MDEwMEE3ODYyMjQwRTM2RDAwMDAwMDAwMDA0NzI5Cis6MTA3NTMwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBBNDg2QTg0MDk2Cis6MTA3NTQwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAyMDgwMDAwMzYwCis6MTA3NTUwMDA0Njk5MDEwMDAwMDAwMDVGRTE5MTAxMDAwMDAwMkQwNjQ2Cis6MTA3NTYwMDA0OEIxMDEwMDAwMDAwMEY4MThCMDAxMDAwMDAwMDBGODY4Cis6MTA3NTcwMDAwNEIwMDEwMEFFODYxRkYwMEUzMDAwMDA4MTg2MDA0QzgyCis6MTA3NTgwMDAwREMwMDAwMDAwMDAyRTVGMEY4MDAxMDA4MTg2MjMwN0UwCis6MTA3NTkwMDAxNDZDMDAwMDMwMDAwMDEwNDhDOTAxMDAyNDAwMDA0MEI1Cis6MTA3NUEwMDBGMTk5MDEwMDAwMDAwMDAzRjBCMTAxMDAwMDAwMDAwMEFCCis6MTA3NUIwMDBGMEIxMDEwMDAwMDAwMDE2RjBCMTAxMDAyNDAwMDAwMDRECis6MTA3NUMwMDAwMEM4MDEwMDAwMDAwMDQ3NjFCMTAxMDBBMDAwMDBBNDU0Cis6MTA3NUQwMDA2MkREMDEwMEI3ODZBODQ2MUYxMDAwMDA4MTg2MDAwMzA3Cis6MTA3NUUwMDAwQ0IwMDAwMDgxODYwMDBEMThDMDAwMDBDNDg2MjI1QzJCCis6MTA3NUYwMDAxRjdDMDAwMDAwMDAwMDVDMUY4MDAxMDAwMDAwM0M0NDc0Cis6MTA3NjAwMDAyM0UwMDEwMDAwMDAyRDEwNDhDMTAxMDBDNDg2MjI0MDgzCis6MTA3NjEwMDBFMzZEMDAwMDAwMDAwMDQ2NjFCMTAxMDA0MDAwMDAxMDcxCis6MTA3NjIwMDA2MkREMDEwMEMxODZBODQwODEzMjAwMDBBRjgyMDA4ODdGCis6MTA3NjMwMDAxQ0IwMDAwMDAwMDAwMDE3MTBCMDAxMDBDNjg2MDA0MDFBCis6MTA3NjQwMDAyQkIwMDAwMDAwODAwMDAzNDQ5OTAxMDAwMDAwMDAwNEZBCis6MTA3NjUwMDBFMEIxMDEwMENCODYyMjlGMTM2QzAwMDAwMjAwMDA4ODdECis6MTA3NjYwMDAxQ0NDMDEwMEY1ODIwMDQwODFCMjAwMDBGMDk1MDA0MTgxCis6MTA3NjcwMDAzRjQzMDEwMDAwMDAwMDQwOERCMDAxMDAwMDAwMDA0MEM5Cis6MTA3NjgwMDAwNUIwMDEwMERGOTUwMDQwMEYzMDAxMDAzMDg3MDA1QzNECis6MTA3NjkwMDAxRjkwMDAwMDEwMDAwMDAwMEVGNDAxMDAwMDAwMDAzQUVFCis6MTA3NkEwMDAwMTg0MDEwMDAzMDAwMDA3MUFGNDAxMDBFRjkyMDAwN0IzCis6MTA3NkIwMDAxNjMwMDEwMERBODYyMjQxODE2QzAwMDBEODg2MjI0MjExCis6MTA3NkMwMDA4MTZDMDAwMEFGODIwMDg4MUNCMDAwMDBEOTg2MjI1RjY4Cis6MTA3NkQwMDAwRjdDMDAwMDFBODcwMDQwMEZCMDAwMDBFMjg2QTI1QTFCCis6MTA3NkUwMDAxRjdDMDAwMDY5OTIwMDQwODEzMjAxMDBFMjg2MjIyMDY2Cis6MTA3NkYwMDA4NTZDMDAwMERGODY5QzBGODAzMjAwMDBBRjgyMDA4ODFFCis6MTA3NzAwMDAxQ0IwMDAwMDRBOTMwMDVDMUYwMDAxMDAzQzk1MDA0MjQxCis6MTA3NzEwMDA2MTMxMDEwMEFGODIwMDg4MUNCMDAwMDA5MDA0MDAwN0I2Cis6MTA3NzIwMDA5NjMwMDEwMDAwMDAyRDA1NDhCMTAxMDAwMDAwMDBGMDc2Cis6MTA3NzMwMDAxOEIwMDEwMDAwMDAwMDAwODBCMDAxMDBDMzg3QTI1RjA0Cis6MTA3NzQwMDA4MTZDMDAwMEE4MDAyRDQzMTk4MDAxMDAzNzAwMkRGMDQ2Cis6MTA3NzUwMDAyNEIwMDEwMDA0MDAwMEYzOEVGNDAxMDAwRjAwMDBGM0Q4Cis6MTA3NzYwMDA5MDg4MDEwMEYxODYyMjQ4OEU2QzAwMDAzNjAwMDA0MEFGCis6MTA3NzcwMDA0Mzk5MDEwMDU4MDAzRDQzRTdFMTAxMDBGMTg2MUZGMDA1Cis6MTA3NzgwMDAyNDZDMDAwMEYwODYyMzQxOEY2QzAwMDBDMzg3MDA0NzAzCis6MTA3NzkwMDA4MUIwMDAwMEMzODcwMDQ4ODFCMDAwMDA0MDAwMDA0MDc1Cis6MTA3N0EwMDA0Mzk5MDEwMEIwMDAyREYwMTRCMDAxMDBGNjg2MjIwQUMyCis6MTA3N0IwMDA5MDQwMDAwMEMzOTUwMDQwOTEzMDAxMDBDMzg3QTI0MDczCis6MTA3N0MwMDA4MDMyMDAwMEIwMDAyRDQ1ODFCMDAxMDAwMjg3MjJGMDE4Cis6MTA3N0QwMDAyQzMwMDAwMEEzMDAyRDMwODNCMDAxMDBBQzAwMkRGMzRECis6MTA3N0UwMDA4MkUwMDEwMEZDODZBMzQxMkM2QzAwMDAwMDAwMDAxNjIyCis6MTA3N0YwMDA4MkIwMDEwMDk4MDAyREYwODJDMDAxMDA4ODAwMkRGMEI5Cis6MTA3ODAwMDA4MkQwMDEwMDAwMDAwMEYyOThFODAxMDBDMzg3MjA0Q0ZDCis6MTA3ODEwMDA4MjZDMDAwMDdDMDAyRDQxOThFODAxMDBDMzg3MjBGMEI1Cis6MTA3ODIwMDA5ODZDMDAwMDFBODcyMjBBODAzMjAwMDA0MDAyMDAwQzg3Cis6MTA3ODMwMDA3RTg5MDEwMDFBODdBNjQwODEzMjAwMDBDMzg3MDA0OTczCis6MTA3ODQwMDA4MUIwMDAwMDIwMDAwMEE2ODBCMDAxMDAwQTg3MjI0MzFBCis6MTA3ODUwMDAyMTZGMDAwMDEzODAwMDQwODBEQzAxMDAwQjg3MDA0MDk2Cis6MTA3ODYwMDA4MUIyMDAwMDFBODAwMDQwODBEQzAxMDAwQjg3QTI1RTFDCis6MTA3ODcwMDAwQjdEMDAwMDAwMDAwMDQwMDhCMTAxMDAwRDg3OUY4NUNFCis6MTA3ODgwMDA4MDMyMDAwMDExODcwMDQwODFCMjAwMDBFQzgyMjI0MDZCCis6MTA3ODkwMDA1NzdEMDAwMDAxMDAwMDQwNTc5OTAxMDAxMTg3NDI0MEM4Cis6MTA3OEEwMDA4MTMyMDAwMDAwMDAwMDQ0OTM5MzAxMDBERDgyMUE1QkU2Cis6MTA3OEIwMDA2OTkzMDAwMDA0MDAwMENCODFDODAxMDAxNzg3MjI0MEIzCis6MTA3OEMwMDBGMjdGMDAwMEM0ODAwMDZGOTczMzAxMDAxOTg3MjI0MEM3Cis6MTA3OEQwMDA3MzdEMDAwMERFODAwMDQxOEJCMzAwMDAxNDg3MDA0MDAwCis6MTA3OEUwMDA4MUIyMDAwMDIxODc5QzBGODAzMjAwMDAwMDgwMDAxMEQwCis6MTA3OEYwMDA0MkM5MDEwMDIxODcyMjQwRTM2RDAwMDAwMDAwMDA0NURECis6MTA3OTAwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAxRTg3QTg0MDQ3Cis6MTA3OTEwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDA0NTkyMjIwMjM0Cis6MTA3OTIwMDA4MDMyMDAwMDIyODc0MjQwODEzMjAwMDAwMDAwMDA0NDgzCis6MTA3OTMwMDA5MzkzMDEwMDQ1OTIxQTAyNjg5NzAwMDAyQzg3OUMwRkQwCis6MTA3OTQwMDA4MDMyMDAwMDAwODAwMDEwNDJDOTAxMDAyQzg3MjI0MEQ0Cis6MTA3OTUwMDBFMzZEMDAwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDJGCis6MTA3OTYwMDA2MkREMDEwMDI5ODdBODQwODEzMjAwMDBBRjgyMDA4OEQzCis6MTA3OTcwMDAxQ0IwMDAwMDRGOTIyMjAyODAzMjAwMDAyRDg3NDI0MDRFCis6MTA3OTgwMDA4MTMyMDAwMDAwMDAwMDQ0OTM5MzAxMDA0RjkyMUEwMkRDCis6MTA3OTkwMDA2ODk3MDAwMDM3ODc5QzBGODAzMjAwMDAwMDgwMDAxMDNECis6MTA3OUEwMDA0MkM5MDEwMDM3ODcyMjQwRTM2RDAwMDAwMDAwMDA0NTE2Cis6MTA3OUIwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAzNDg3QTg0MDgxCis6MTA3OUMwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDBGOTgyMjIwMkUwCis6MTA3OUQwMDA4MDMyMDAwMDM4ODc0MjQwODEzMjAwMDAwMDAwMDA0NEJECis6MTA3OUUwMDA5MzkzMDEwMDAwMDAxQTAyNjg5NzAxMDBGOTgyMDA0MDk5Cis6MTA3OUYwMDAwNUIwMDAwMDAwODAwMEE2NTZCMTAxMDA1Njk1MkY0MDRBCis6MTA3QTAwMDAwNUIwMDEwMDg4ODdBMjQwRTc2RDAwMDBCODk0Mjk0MUM1Cis6MTA3QTEwMDBFN0IxMDEwMDAwMDAwMDU0RUY5MzAxMDAwMDAwMDBGMjA0Cis6MTA3QTIwMDAwRUIwMDEwMDI5MDAwMDQwMEQ5ODAxMDAwOTAwMDAwNzc4Cis6MTA3QTMwMDAxMkU0MDEwMDAwMDAwMEE3MTNDMDAxMDAwMzAwMDAwN0NBCis6MTA3QTQwMDAxQUY0MDEwMDA3MDAwMDA3MTY4ODAxMDBGRkZGMDAxMDZDCis6MTA3QTUwMDAzNEQ4MDEwMDAwMDAwMDAzMzQ5NDAxMDAwMDAwMDA0MDBECis6MTA3QTYwMDAyM0IwMDEwMDIwMTgwMDQwMTE5ODAxMDAwMEI1MDAwRDVFCis6MTA3QTcwMDA0MkM5MDEwMDZDODcyMjBCRTY3RDAwMDA0RDg3NjA0MDAzCis6MTA3QTgwMDA4MTMyMDAwMEZGRkYwMDA3ODQ4OTAxMDA1NDg3MDVDMjhFCis6MTA3QTkwMDAyNDMwMDAwMDU4MDQwMDQwODEzMjAxMDAwMDAwMkQwNTEwCis6MTA3QUEwMDA0OEIxMDEwMDg5ODc3MEYwMTgzMDAxMDA2Qzg3MDA0MEYwCis6MTA3QUIwMDA4MUIyMDAwMDAwMDA3MDQwODFCMjAxMDA2Mzg3QTA0OERECis6MTA3QUMwMDAyMzZDMDAwMDAwMDAwMDUwMzVEMDAxMDAwMDgwMDAxQTM3Cis6MTA3QUQwMDA0MkM5MDEwMDVEODcyMjQwRTM2RDAwMDAwMDAwMDA0MkMyCis6MTA3QUUwMDA2MUIxMDEwMDQwMDAwMDFBNjJERDAxMDA1QTg3QTg0MDIwCis6MTA3QUYwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAyMDk4MDA0MDU2Cis6MTA3QjAwMDA0Mzk5MDEwMDg5ODcwMEY4MTgzMDAxMDA1RTg3QTI0MTdGCis6MTA3QjEwMDAyMzUwMDAwMEZGRkYwMDEwMzREODAxMDAwMDAwMDAwM0Q0Cis6MTA3QjIwMDAzNDk0MDEwMDIwMTgwMDQwMTE5ODAxMDAwMDAwMkUxQTIyCis6MTA3QjMwMDA0OEIxMDEwMDAwMDAwMDQ0RjFCMTAxMDAwMDAwMDAwODVDCis6MTA3QjQwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDAyMDAwMDAxQTA0Cis6MTA3QjUwMDA2MkREMDEwMDY3ODdBODA5RTAzMTAwMDAwMDAwMDA0MUY0Cis6MTA3QjYwMDAyM0MwMDEwMDAwMDAwMDUwMzVDMDAxMDAwMDAwMDA0NEE3Cis6MTA3QjcwMDAxMUMwMDEwMDc4ODcyMjQxMEQ1MDAwMDAwMDAwMDA0MTMzCis6MTA3QjgwMDAwRkMwMDEwMDc0ODdBMEFBMEY2QzAwMDAwMDAwMDA0MTI0Cis6MTA3QjkwMDAwRkIwMDEwMDA5MDAwMDA3MTJFNDAxMDAwMDAwMDBBNzc3Cis6MTA3QkEwMDAxM0MwMDEwMDAwMDAwMDQwMUJCMDAxMDA0Qjg3MDA0MUUyCis6MTA3QkIwMDAxN0IwMDAwMDAwMDIwMDA5MTJDODAxMDA0Qjg3ODM0MTgyCis6MTA3QkMwMDAxNzQwMDAwMDAwMDAwMDQwMTdCMDAxMDA0Qjg3MDA0MTQzCis6MTA3QkQwMDAxQkMwMDAwMDgzODcyMzQwMjM2QzAwMDAwMDAwMDA1MDdFCis6MTA3QkUwMDAzNUQwMDEwMDAwODAwMDFBNDJDOTAxMDA4MDg3MjI0MDgwCis6MTA3QkYwMDBFMzZEMDAwMDAwMDAwMDQyNjFCMTAxMDA0MDAwMDAxQTg2Cis6MTA3QzAwMDA2MkREMDEwMDdEODdBODQwODEzMjAwMDBBRjgyMDA4OERDCis6MTA3QzEwMDAxQ0IwMDAwMDIwOTgwMDQwNDM5OTAxMDA4OTg3MDBGOEJCCis6MTA3QzIwMDAxODMwMDEwMDgxODdBMjQxMjM1MDAwMDAwMDAwMDA0MTZDCis6MTA3QzMwMDAwRkMwMDEwMDg2ODdBMEFBMEY2QzAwMDAwMDAwMDA0MTYxCis6MTA3QzQwMDAwRkIwMDEwMEI4OTQyMDA3RTRCMTAxMDA1Njk1MjA0MDIwCis6MTA3QzUwMDBFN0IxMDEwMDFBODcwMDQwMEZCMDAwMDBGRkZGMDAwQ0UxCis6MTA3QzYwMDA4MEQ4MDEwMEMwMDIwMDBDN0U4OTAxMDA5Qjg3MjY1NDQ5Cis6MTA3QzcwMDA2MTMxMDAwMDkxODc4NzBDODAzMjAwMDAwRjAwMDA0MEM2Cis6MTA3QzgwMDA2Mjk5MDEwMDkxODcyODQwODEzMjAwMDA5MTg3QTI1NEI3Cis6MTA3QzkwMDA3NzdEMDAwMDhEODcwMDQwODFCMjAwMDA5Njg3MjI0NkU0Cis6MTA3Q0EwMDAxOTdDMDAwMDBEMDAwMDQwNjI5OTAxMDAwMDAwQTg0MDBFCis6MTA3Q0IwMDA4MUIyMDAwMDAwMDBBMjU0Nzc3RDAxMDA5Mjg3MDA0MDRECis6MTA3Q0MwMDA4MUIyMDAwMDlCODcyMjQ5MTk3QzAwMDAwRTAwMDA0MDExCis6MTA3Q0QwMDA2Mjk5MDEwMDAwMDBBODQwODFCMjAwMDAwMDAwQTI1NDk3Cis6MTA3Q0UwMDA3NzdEMDEwMDk2ODcwMDQwODFCMjAwMDAxMDAwMDA0MEJGCis6MTA3Q0YwMDA2Mjk5MDEwMDAwMDBBODQwODFCMjAwMDAwMDAwQTI1NDc3Cis6MTA3RDAwMDA3NzdEMDEwMDlCODcwMDQwODFCMjAwMDAzMDk0MkY1NUExCis6MTA3RDEwMDBGMTkzMDEwMDAwNDAwMEE2NTZCMTAxMDBGOTgyQTI0MTkyCis6MTA3RDIwMDBFNTUxMDAwMDY0MDAwMDQwRTU5OTAxMDBBMzg3NDQ0MDRDCis6MTA3RDMwMDA4MTMyMDAwMEE2ODdBMjkzNTc2RjAwMDAwMDAwMDA0MTI3Cis6MTA3RDQwMDA1N0MzMDEwMDAwMDAxQ0FCMjdCMzAxMDBGOTgyMjI1MDg5Cis6MTA3RDUwMDBGRDdGMDAwMEY5ODIyMjUxRkQ3RjAwMDBGOTgyQTI0MURGCis6MTA3RDYwMDAxRDUzMDAwMDUwNDYwMDQwMUQ5QjAxMDAzODA1MDA0MDk3Cis6MTA3RDcwMDA4MTMyMDEwMDBFMDAwMDQ4QjJDQjAxMDAxMDA0MDA0MDI3Cis6MTA3RDgwMDA0OTMxMDEwMEIyODcyMjQwQjU2RjAwMDAwRTAwMDA0ODYzCis6MTA3RDkwMDBCMkNCMDEwMDIwMDQwMDQxQjU1MzAxMDBGOTgyMDA0MDNDCis6MTA3REEwMDA4MUIyMDAwMDAwMDAwMDUxRkQ4MzAxMDA0MDE2MDA0MDM4Cis6MTA3REIwMDA0NTk5MDEwMDQwMDUwMDQwNDkzMTAxMDAxRTAwMDA0ODdFCis6MTA3REMwMDBCMkNCMDEwMDEwMDQwMDQwODEzMjAxMDAwMDAwMDBEQTUzCis6MTA3REQwMDA5MUMwMDEwMDA0MDAwMDQ4QjJDQjAxMDAyMDA0MDA0MDIzCis6MTA3REUwMDBCNTMzMDEwMDYwMTYyMDQwRTVCMTAxMDA0MDgyMDA0MDNCCis6MTA3REYwMDBCNTMzMDEwMDA4MDAwMDQ4QjJDQjAxMDBGRkZGMDA0QTg0Cis6MTA3RTAwMDBCNDhCMDEwMDIwMDQwMDQwODEzMjAxMDAwQTAwMDA0OEM4Cis6MTA3RTEwMDBCMkNCMDEwMDEwMDAwMDRBQjRGNzAxMDAyMDA0MDA0MDdBCis6MTA3RTIwMDA4MTMyMDEwMEY5ODIwMDQwODFCMjAwMDAwNTAwMDA0MDZCCis6MTA3RTMwMDA0Mzk5MDEwMDAwMDAwMEYzMDhCMDAxMDAwNDAwMjA0MDU1Cis6MTA3RTQwMDBFNkIxMDEwMDAzMDAwMDQwOTZFNDAxMDAwMDAwMDAwNEQ4Cis6MTA3RTUwMDA5NkMwMDEwMEM5ODcwMDRCMTBDOTAwMDBFQzhBMDA0MUEwCis6MTA3RTYwMDAwOUIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEQyCis6MTA3RTcwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDNDCis6MTA3RTgwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDJDCis6MTA3RTkwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDFDCis6MTA3RUEwMDA4RkIwMDAwMDIwOEIwMDQxMDlCMDAwMDAwNDAwMDAyMENBCis6MTA3RUIwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEZDCis6MTA3RUMwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEVDCis6MTA3RUQwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMERDCis6MTA3RUUwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDA1MjhCMDA0NUNFCis6MTA3RUYwMDAwOUIwMDAwMDUyOEIwMDQ1MDlCMDAwMDA1MjhCMDA0NUNDCis6MTA3RjAwMDAwOUIwMDAwMDUyOEIwMDQ1MDlCMDAwMDAwNDAwMDAyMEI5Cis6MTA3RjEwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDlCCis6MTA3RjIwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDA5MThCMDA0MzUwCis6MTA3RjMwMDAwOUIwMDAwMEJBOEIwMDQzMDlCMDAwMDBCRThCMDA0NEJBCis6MTA3RjQwMDAwOUIwMDAwMDA5OEQwMDQ1MDlCMDAwMDAwNDAwMDAyMEMwCis6MTA3RjUwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDVCCis6MTA3RjYwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDRCCis6MTA3RjcwMDA4RkIwMDAwMENBOEIwMDQzMDlCMDAwMDBDOThCMDA0M0RBCis6MTA3RjgwMDAwOUIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMEEyCis6MTA3RjkwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDFCCis6MTA3RkEwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDA3OThDMDA0MkU4Cis6MTA3RkIwMDAwOUIwMDAwMDc5OEMwMDQzMDlCMDAwMDA3OThDMDA0NEJFCis6MTA3RkMwMDAwOUIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMDYyCis6MTA3RkQwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMERCCis6MTA3RkUwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMENCCis6MTA3RkYwMDA4RkIwMDAwMDk5OEMwMDQzMDlCMDAwMDAwNDAwMDAyMEZECis6MTA4MDAwMDA4RkIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMDlCCis6MTA4MDEwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDlBCis6MTA4MDIwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDhBCis6MTA4MDMwMDA4RkIwMDAwMEI3OEMwMDQzMDlCMDAwMDBCNzhDMDA0NDNCCis6MTA4MDQwMDAwOUIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMEUxCis6MTA4MDUwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDVBCis6MTA4MDYwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDRBCis6MTA4MDcwMDA4RkIwMDAwMEI3OEMwMDQyMDlCMDAwMDAwNDAwMDAyMDVGCis6MTA4MDgwMDA4RkIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMDFCCis6MTA4MDkwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDFBCis6MTA4MEEwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDBBCis6MTA4MEIwMDA4RkIwMDAwMERGOEMwMDQ0MDlCMDAwMDAwNDAwMDAyMEY1Cis6MTA4MEMwMDA4RkIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMERCCis6MTA4MEQwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMERBCis6MTA4MEUwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDBFQThBMDA0MjM4Cis6MTA4MEYwMDAwOUIwMDAwMEYwOEMwMDQ1MDlCMDAwMDBGMDhDMDA0NThDCis6MTA4MTAwMDAwOUIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMDIwCis6MTA4MTEwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDk5Cis6MTA4MTIwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDBGMjhDMDA0MkVECis6MTA4MTMwMDAwOUIwMDAwMEYyOEMwMDQzMDlCMDAwMDBGMjhDMDA0NDRBCis6MTA4MTQwMDAwOUIwMDAwMEYyOEMwMDQ1MDlCMDAwMDAwNDAwMDAyMEQ2Cis6MTA4MTUwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDU5Cis6MTA4MTYwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDQ5Cis6MTA4MTcwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDBGQThDMDA0NDkzCis6MTA4MTgwMDAwOUIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMEEwCis6MTA4MTkwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDE5Cis6MTA4MUEwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwQjhEMDA0MjUzCis6MTA4MUIwMDAwOUIwMDAwMEZCOEMwMDQzMDlCMDAwMDAwQjhEMDA0NEE3Cis6MTA4MUMwMDAwOUIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMDYwCis6MTA4MUQwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEQ5Cis6MTA4MUUwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEM5Cis6MTA4MUYwMDA4RkIwMDAwMDBDOEQwMDQzMDlCMDAwMDAwMjhEMDA0NEQ4Cis6MTA4MjAwMDAwOUIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMDFGCis6MTA4MjEwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDk4Cis6MTA4MjIwMDA4RkIwMDAwMEVBOEEwMDQxMDlCMDAwMDA3NzhDMDA0MjVDCis6MTA4MjMwMDAwOUIwMDAwMDc3OEMwMDQzMDlCMDAwMDA3NzhDMDA0NDNGCis6MTA4MjQwMDAwOUIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMERGCis6MTA4MjUwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDU4Cis6MTA4MjYwMDA4RkIwMDAwMEVBOEEwMDQxMDlCMDAwMDAwRDhEMDA0Mjg1Cis6MTA4MjcwMDAwOUIwMDAwMDBEOEQwMDQzMDlCMDAwMDAwRDhEMDA0NEQxCis6MTA4MjgwMDAwOUIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMDlGCis6MTA4MjkwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDE4Cis6MTA4MkEwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDA4Cis6MTA4MkIwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEY4Cis6MTA4MkMwMDA4RkIwMDAwMDE0OEQwMDQ1MDlCMDAwMDAwNDAwMDAyMEFDCis6MTA4MkQwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEQ4Cis6MTA4MkUwMDA4RkIwMDAwMDE2OEQwMDQyMDlCMDAwMDAwNDAwMDAyMDhECis6MTA4MkYwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEI4Cis6MTA4MzAwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEE3Cis6MTA4MzEwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDk3Cis6MTA4MzIwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAyMjhEMDA0M0I5Cis6MTA4MzMwMDAwOUIwMDAwMDgxOEQwMDQzMDlCMDAwMDBCRThCMDA0NEVECis6MTA4MzQwMDAwOUIwMDAwMDA5OEQwMDQ1MDlCMDAwMDAwNDAwMDAyMEJDCis6MTA4MzUwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDU3Cis6MTA4MzYwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDQ3Cis6MTA4MzcwMDA4RkIwMDAwMDg5OEQwMDQzMDlCMDAwMDBCRThCMDA0NDFGCis6MTA4MzgwMDAwOUIwMDAwMDA5OEQwMDQ1MDlCMDAwMDAwNDAwMDAyMDdDCis6MTA4MzkwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDE3Cis6MTA4M0EwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMDA3Cis6MTA4M0IwMDA4RkIwMDAwMDlBOEQwMDQzMDlCMDAwMDAwNDAwMDAyMDM3Cis6MTA4M0MwMDA4RkIwMDAwMEVBOEEwMDQ1MDlCMDAwMDAwNDAwMDAyMEQ4Cis6MTA4M0QwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNDAwMDAyMEQ3Cis6MTA4M0UwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDA4RThCMDA0MzhGCis6MTA4M0YwMDAwOUIwMDAwMDg1OEQwMDQzMDlCMDAwMDBCRThCMDA0NDI5Cis6MTA4NDAwMDAwOUIwMDAwMDA5OEQwMDQ1MDlCMDAwMDAwNDAwMDAyMEZCCis6MTA4NDEwMDA4RkIwMDAwMDA0MDAwMDIwOEZCMDAwMDAwNzAwMkQwNTgxCis6MTA4NDIwMDA0OEIxMDEwMDAwMDAwMEYzMDhCMDAxMDAwNjAwMjA0NzM5Cis6MTA4NDMwMDBFNkIxMDEwMDA0MDAwMDQ3OTZFNDAxMDAwMDAwMDA0Nzk3Cis6MTA4NDQwMDA5NkQwMDEwMDAwMDAwMDQ3OTZEMDAxMDAwMDAwMDAwNDEzCis6MTA4NDUwMDA5NkMwMDEwMDg5ODgwMDRCMTBDOTAwMDBCMjhEMDA0OTA4Cis6MTA4NDYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEQ2Cis6MTA4NDcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDRBCis6MTA4NDgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDNBCis6MTA4NDkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDJBCis6MTA4NEEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDFBCis6MTA4NEIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDBBCis6MTA4NEMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEZBCis6MTA4NEQwMDA4NUIwMDAwMEVCOEQwMDQyMDlCMDAwMDAwNDAwMDAyMEQwCis6MTA4NEUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMERBCis6MTA4NEYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMENBCis6MTA4NTAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEI5Cis6MTA4NTEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEE5Cis6MTA4NTIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDk5Cis6MTA4NTMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDg5Cis6MTA4NTQwMDA4NUIwMDAwMEYxOEQwMDQ2MDlCMDAwMDAwNDAwMDAyMDU1Cis6MTA4NTUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDY5Cis6MTA4NTYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU5Cis6MTA4NTcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQ5Cis6MTA4NTgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDM5Cis6MTA4NTkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDI5Cis6MTA4NUEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDE5Cis6MTA4NUIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBGRjhEMDA0MjVGCis6MTA4NUMwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyMThFMDA0MkE4Cis6MTA4NUQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDY1Cis6MTA4NUUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEQ5Cis6MTA4NUYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEM5Cis6MTA4NjAwMDA4NUIwMDAwMDFDOEUwMDRBMDlCMDAwMDAwNDAwMDAyMDY0Cis6MTA4NjEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEE4Cis6MTA4NjIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyNDhFMDA0M0M3Cis6MTA4NjMwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDA3RDhFMDA0NEQ5Cis6MTA4NjQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEY0Cis6MTA4NjUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDY4Cis6MTA4NjYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU4Cis6MTA4NjcwMDA4NUIwMDAwMDdDOEUwMDRCMDlCMDAwMDAwNDAwMDAyMDkzCis6MTA4NjgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDM4Cis6MTA4NjkwMDA4NUIwMDAwMEY0OEQwMDQxMDlCMDAwMDAwNDAwMDAyMDA2Cis6MTA4NkEwMDA4NUIwMDAwMEY0OEQwMDQzMDlCMDAwMDBGNDhEMDA0NDUzCis6MTA4NkIwMDAwOUIwMDAwMEY0OEQwMDQ1MDlCMDAwMDBGNDhEMDA0NkJCCis6MTA4NkMwMDAwOUIwMDAwMEY0OEQwMDQ3MDlCMDAwMDBGNDhEMDA0OEE3Cis6MTA4NkQwMDAwOUIwMDAwMEY0OEQwMDQ5MDlCMDAwMDBGNDhEMDA0QTkzCis6MTA4NkUwMDAwOUIwMDAwMEY0OEQwMDRCMDlCMDAwMDBGNDhEMDA0QzdGCis6MTA4NkYwMDAwOUIwMDAwMEY0OEQwMDREMDlCMDAwMDAwNDAwMDAyMDE2Cis6MTA4NzAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBEQzhFMDA0MjJGCis6MTA4NzEwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBEQzhFMDA0NDk5Cis6MTA4NzIwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDEzCis6MTA4NzMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDg3Cis6MTA4NzQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDc3Cis6MTA4NzUwMDA4NUIwMDAwMERDOEUwMDRCMDlCMDAwMDAwNDAwMDAyMDUyCis6MTA4NzYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU3Cis6MTA4NzcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQ3Cis6MTA4NzgwMDA4NUIwMDAwMEY0OEUwMDQ1MDlCMDAwMDAwNDAwMDAyMDEwCis6MTA4NzkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDI3Cis6MTA4N0EwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwQjhGMDA0NzVBCis6MTA4N0IwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFODhFMDA0NUVDCis6MTA4N0MwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDczCis6MTA4N0QwMDA4NUIwMDAwMDU0OTEwMDQ2MDlCMDAwMDAwNDAwMDAyMDVDCis6MTA4N0UwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEQ3Cis6MTA4N0YwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEM3Cis6MTA4ODAwMDA4NUIwMDAwMDIxOEUwMDQ2MDlCMDAwMDBGRjhEMDA0NkIzCis6MTA4ODEwMDAwOUIwMDAwMDFBOEUwMDQ3MDlCMDAwMDAxQThFMDA0ODA3Cis6MTA4ODIwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDEyCis6MTA4ODMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAxQzhFMDA0QUI2Cis6MTA4ODQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEYyCis6MTA4ODUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDY2Cis6MTA4ODYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU2Cis6MTA4ODcwMDA4NUIwMDAwMDdEOEUwMDQ1MDlCMDAwMDAyNDhFMDA0M0M1Cis6MTA4ODgwMDAwOUIwMDAwMDFBOEUwMDQ3MDlCMDAwMDAxQThFMDA0ODk3Cis6MTA4ODkwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEEyCis6MTA4OEEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA3QzhFMDA0Q0U0Cis6MTA4OEIwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDgyCis6MTA4OEMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEY2Cis6MTA4OEQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEU2Cis6MTA4OEUwMDA4NUIwMDAwMDExOEYwMDQ0MDlCMDAwMDAxMThGMDA0MkQ0Cis6MTA4OEYwMDAwOUIwMDAwMEQ1OEEwMDQ3MDlCMDAwMDBENThBMDA0OEI5Cis6MTA4OTAwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDMxCis6MTA4OTEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAxMThGMDA0QkRFCis6MTA4OTIwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDExCis6MTA4OTMwMDA4NUIwMDAwMEY0OEQwMDQxMDlCMDAwMDAzNDhGMDA0NzdECis6MTA4OTQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAxQzhGMDA0NzIzCis6MTA4OTUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEUxCis6MTA4OTYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU1Cis6MTA4OTcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQ1Cis6MTA4OTgwMDA4NUIwMDAwMDFDOEYwMDQ3MDlCMDAwMDAwNDAwMDAyMEUzCis6MTA4OTkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDI1Cis6MTA4OUEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDE1Cis6MTA4OUIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDA1Cis6MTA4OUMwMDA4NUIwMDAwMDFDOEYwMDQ3MDlCMDAwMDAzNDhGMDA0N0JECis6MTA4OUQwMDAwOUIwMDAwMDFBOEUwMDQ3MDlCMDAwMDAxQThFMDA0ODQ2Cis6MTA4OUUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDUxCis6MTA4OUYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAxQzhGMDA0N0Y3Cis6MTA4QTAwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDMwCis6MTA4QTEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEE0Cis6MTA4QTIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDk0Cis6MTA4QTMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDg0Cis6MTA4QTQwMDA4NUIwMDAwMDQzOEYwMDQ3MDlCMDAwMDA0MzhGMDA0ODA1Cis6MTA4QTUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEUwCis6MTA4QTYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU0Cis6MTA4QTcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQ0Cis6MTA4QTgwMDA4NUIwMDAwMEE2OEYwMDQwMDlCMDAwMDBDNDhGMDA0N0U5Cis6MTA4QTkwMDAwOUIwMDAwMEI4OEYwMDQ4MDlCMDAwMDAxNDhGMDA0N0VCCis6MTA4QUEwMDAwOUIwMDAwMDE0OEYwMDQ3MDlCMDAwMDBDNDhGMDA0N0QwCis6MTA4QUIwMDAwOUIwMDAwMENCOEYwMDQ3MDlCMDAwMDBDQjhGMDA0ODAxCis6MTA4QUMwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBCODhGMDA0ODA1Cis6MTA4QUQwMDAwOUIwMDAwMDE0OEYwMDQ3MDlCMDAwMDAxNDhGMDA0NzUwCis6MTA4QUUwMDAwOUIwMDAwMEI4OEYwMDQ4MDlCMDAwMDAwNDAwMDAyMDYxCis6MTA4QUYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEM0Cis6MTA4QjAwMDA4NUIwMDAwMERDOEUwMDQzMDlCMDAwMDAwNDAwMDAyMEE2Cis6MTA4QjEwMDA4NUIwMDAwMERDOEUwMDQ1MDlCMDAwMDBEQzhFMDA0NjA4Cis6MTA4QjIwMDAwOUIwMDAwMDFBOEUwMDQ3MDlCMDAwMDAxQThFMDA0OEY0Cis6MTA4QjMwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBEQzhFMDA0QTZGCis6MTA4QjQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBEQzhFMDA0QzVECis6MTA4QjUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMERGCis6MTA4QjYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAzMzhGMDA0NzZFCis6MTA4QjcwMDAwOUIwMDAwMDI3OEYwMDQ4MDlCMDAwMDAxQjhGMDA0Nzk0Cis6MTA4QjgwMDAwOUIwMDAwMDFCOEYwMDQ3MDlCMDAwMDAzMzhGMDA0Nzc5Cis6MTA4QjkwMDAwOUIwMDAwMEQ1OEEwMDQ3MDlCMDAwMDBENThBMDA0ODE2Cis6MTA4QkEwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyNzhGMDA0OEI1Cis6MTA4QkIwMDAwOUIwMDAwMDFCOEYwMDQ3MDlCMDAwMDAxQjhGMDA0NzYxCis6MTA4QkMwMDAwOUIwMDAwMDI3OEYwMDQ4MDlCMDAwMDAwNDAwMDAyMDExCis6MTA4QkQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBDRDhGMDA0MjY5Cis6MTA4QkUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBDRDhGMDA0NEQzCis6MTA4QkYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDNGCis6MTA4QzAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEIyCis6MTA4QzEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEEyCis6MTA4QzIwMDA4NUIwMDAwMENEOEYwMDRCMDlCMDAwMDAwNDAwMDAyMDhCCis6MTA4QzMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDgyCis6MTA4QzQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDcyCis6MTA4QzUwMDA4NUIwMDAwMENEOEYwMDQzMDlCMDAwMDAwNDAwMDAyMDYzCis6MTA4QzYwMDA4NUIwMDAwMENEOEYwMDQ1MDlCMDAwMDBDRDhGMDA0NkQzCis6MTA4QzcwMDAwOUIwMDAwMENEOEYwMDQ3MDlCMDAwMDBDRDhGMDA0ODNCCis6MTA4QzgwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBDRDhGMDA0QTJDCis6MTA4QzkwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBDRDhGMDA0QzFBCis6MTA4Q0EwMDAwOUIwMDAwMENEOEYwMDRDMDlCMDAwMDAwNDAwMDAyMDg2Cis6MTA4Q0IwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDAyCis6MTA4Q0MwMDA4NUIwMDAwMEU4OEYwMDQ2MDlCMDAwMDAwNDAwMDAyMEQ1Cis6MTA4Q0QwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEUyCis6MTA4Q0UwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwQjhGMDA0NzE1Cis6MTA4Q0YwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFODhGMDA0NkE1Cis6MTA4RDAwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDJECis6MTA4RDEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEExCis6MTA4RDIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDkxCis6MTA4RDMwMDA4NUIwMDAwMEU5OTAwMDQ2MDlCMDAwMDAwNDAwMDAyMDYyCis6MTA4RDQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDcxCis6MTA4RDUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwQjhGMDA0N0E0Cis6MTA4RDYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFOTkwMDA0NjMyCis6MTA4RDcwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEJECis6MTA4RDgwMDA4NUIwMDAwMEU5OTAwMDQ2MDlCMDAwMDAwNDAwMDAyMDEyCis6MTA4RDkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDIxCis6MTA4REEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwRTkxMDA0MjU0Cis6MTA4REIwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDdECis6MTA4REMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEYxCis6MTA4REQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEUxCis6MTA4REUwMDA4NUIwMDAwMDBEOTEwMDRBMDlCMDAwMDAwNDAwMDAyMDg5Cis6MTA4REYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEMxCis6MTA4RTAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEIwCis6MTA4RTEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEEwCis6MTA4RTIwMDA4NUIwMDAwMDBFOTEwMDQ2MDlCMDAwMDAwNDAwMDAyMDRCCis6MTA4RTMwMDA4NUIwMDAwMDFBOEUwMDQ3MDlCMDAwMDAxQThFMDA0ODY1Cis6MTA4RTQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEVDCis6MTA4RTUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwRDkxMDA0QTlDCis6MTA4RTYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMENDCis6MTA4RTcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQwCis6MTA4RTgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDMwCis6MTA4RTkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDIwCis6MTA4RUEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDEwCis6MTA4RUIwMDA4NUIwMDAwMEQ4OEYwMDQxMDlCMDAwMDAwNDAwMDAyMEY4Cis6MTA4RUMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEYwCis6MTA4RUQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEUwCis6MTA4RUUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFNThGMDA0MjNFCis6MTA4RUYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFNThGMDA0NEE4Cis6MTA4RjAwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDJCCis6MTA4RjEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDlGCis6MTA4RjIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDhGCis6MTA4RjMwMDA4NUIwMDAwMEU1OEYwMDRCMDlCMDAwMDAwNDAwMDAyMDYwCis6MTA4RjQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDZGCis6MTA4RjUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDVGCis6MTA4RjYwMDA4NUIwMDAwMEU1OEYwMDQzMDlCMDAwMDAwNDAwMDAyMDM4Cis6MTA4RjcwMDA4NUIwMDAwMEU1OEYwMDQ1MDlCMDAwMDBFNThGMDA0NjkwCis6MTA4RjgwMDAwOUIwMDAwMEU1OEYwMDQ3MDlCMDAwMDBFNThGMDA0OEY4Cis6MTA4RjkwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDlCCis6MTA4RkEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFNThGMDA0QzczCis6MTA4RkIwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDdCCis6MTA4RkMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEVGCis6MTA4RkQwMDA4NUIwMDAwMEY0OEUwMDRDMDlCMDAwMDAwNDAwMDAyMEIxCis6MTA4RkUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMENGCis6MTA4RkYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwQjhGMDA0NzAyCis6MTA5MDAwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFODhFMDA0QzhDCis6MTA5MDEwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDFBCis6MTA5MDIwMDA4NUIwMDAwMEE1OTEwMDQ2MDlCMDAwMDAwNDAwMDAyMEIyCis6MTA5MDMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA0OTkxMDA0Mjg2Cis6MTA5MDQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDA0OTkxMDA0NEYwCis6MTA5MDUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMERBCis6MTA5MDYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDRFCis6MTA5MDcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDNFCis6MTA5MDgwMDA4NUIwMDAwMDQ5OTEwMDRCMDlCMDAwMDAwNDAwMDAyMEE5Cis6MTA5MDkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDFFCis6MTA5MEEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDBFCis6MTA5MEIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEZFCis6MTA5MEMwMDA4NUIwMDAwMDQ5OTEwMDQ1MDlCMDAwMDA0OTkxMDA0NjczCis6MTA5MEQwMDAwOUIwMDAwMDFBOEUwMDQ3MDlCMDAwMDAxQThFMDA0ODNGCis6MTA5MEUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDRBCis6MTA5MEYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA0OTkxMDA0Q0JDCis6MTA5MTAwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDI5Cis6MTA5MTEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFODhFMDA0MjA5Cis6MTA5MTIwMDAwOUIwMDAwMDU0OTEwMDQ2MDlCMDAwMDAwNDAwMDAyMDdFCis6MTA5MTMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBFODhFMDA0NkU1Cis6MTA5MTQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwQjhGMDA0NzJDCis6MTA5MTUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDA1NDkxMDA0NkQyCis6MTA5MTYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEM5Cis6MTA5MTcwMDA4NUIwMDAwMDU0OTEwMDQ2MDlCMDAwMDAwNDAwMDAyMEIyCis6MTA5MTgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDJECis6MTA5MTkwMDA4NUIwMDAwMDU4OTEwMDQzMDlCMDAwMDAwNDAwMDAyMDkxCis6MTA5MUEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDBECis6MTA5MUIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwQjhGMDA0NzQwCis6MTA5MUMwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDA1ODkxMDA0MzYxCis6MTA5MUQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU5Cis6MTA5MUUwMDA4NUIwMDAwMDU4OTEwMDREMDlCMDAwMDAwNDAwMDAyMDM3Cis6MTA5MUYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEJECis6MTA5MjAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA2QTkxMDA0MzkyCis6MTA5MjEwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDE4Cis6MTA5MjIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDhDCis6MTA5MjMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDdDCis6MTA5MjQwMDA4NUIwMDAwMDQ3OTEwMDRBMDlCMDAwMDAwNDAwMDAyMEVBCis6MTA5MjUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDVDCis6MTA5MjYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDRDCis6MTA5MjcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDNDCis6MTA5MjgwMDA4NUIwMDAwMDZBOTEwMDQzMDlCMDAwMDAwNDAwMDAyMDhFCis6MTA5MjkwMDA4NUIwMDAwMDFBOEUwMDQ3MDlCMDAwMDAxQThFMDA0ODAxCis6MTA5MkEwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDg4Cis6MTA5MkIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA0NzkxMDA0QUZFCis6MTA5MkMwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDY4Cis6MTA5MkQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMERDCis6MTA5MkUwMDA4NUIwMDAwMDdDOTEwMDQzMDlCMDAwMDAwNDAwMDAyMDFDCis6MTA5MkYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEJDCis6MTA5MzAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwQjhGMDA0N0VFCis6MTA5MzEwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDA3QzkxMDA0M0VCCis6MTA5MzIwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDA3Cis6MTA5MzMwMDA4NUIwMDAwMDdDOTEwMDREMDlCMDAwMDAwNDAwMDAyMEMxCis6MTA5MzQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBGRjhEMDA0MkMxCis6MTA5MzUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyMThFMDA0MjBBCis6MTA5MzYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEM3Cis6MTA5MzcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDNCCis6MTA5MzgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDJCCis6MTA5MzkwMDA4NUIwMDAwMDlCOTEwMDQyMDlCMDAwMDAwNDAwMDAyMDRECis6MTA5M0EwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDBCCis6MTA5M0IwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEZCCis6MTA5M0MwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEVCCis6MTA5M0QwMDA4NUIwMDAwMDIxOEUwMDQ2MDlCMDAwMDBGRjhEMDA0NkQ4Cis6MTA5M0UwMDAwOUIwMDAwMDFBOEUwMDQ3MDlCMDAwMDAxQThFMDA0ODJDCis6MTA5M0YwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDM3Cis6MTA5NDAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA5QjkxMDA0NjVDCis6MTA5NDEwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDE2Cis6MTA5NDIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDhBCis6MTA5NDMwMDA4NUIwMDAwMDlEOTEwMDRBMDlCMDAwMDAwNDAwMDAyMEEyCis6MTA5NDQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDZBCis6MTA5NDUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwQjhGMDA0NzlECis6MTA5NDYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDA5RDkxMDA0QTcyCis6MTA5NDcwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEI2Cis6MTA5NDgwMDA4NUIwMDAwMDU1OTEwMDQ2MDlCMDAwMDAwNDAwMDAyMDlFCis6MTA5NDkwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDFBCis6MTA5NEEwMDA4NUIwMDAwMDU1OTEwMDQ2MDlCMDAwMDAwNDAwMDAyMDdFCis6MTA5NEIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEZBCis6MTA5NEMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwQjhGMDA0NzJECis6MTA5NEQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDA1NTkxMDA0NjRFCis6MTA5NEUwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQ2Cis6MTA5NEYwMDA4NUIwMDAwMDU1OTEwMDQ2MDlCMDAwMDAwNDAwMDAyMDJFCis6MTA5NTAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEE5Cis6MTA5NTEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDBBMzkxMDA0MjQ3Cis6MTA5NTIwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDA1Cis6MTA5NTMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDc5Cis6MTA5NTQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDY5Cis6MTA5NTUwMDA4NUIwMDAwMDQ3OTEwMDRBMDlCMDAwMDAwNDAwMDAyMEQ3Cis6MTA5NTYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQ5Cis6MTA5NTcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDM5Cis6MTA5NTgwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDI5Cis6MTA5NTkwMDA4NUIwMDAwMEEzOTEwMDQ2MDlCMDAwMDAwNDAwMDAyMDNGCis6MTA5NUEwMDA4NUIwMDAwMDFBOEUwMDQ3MDlCMDAwMDAxQThFMDA0OEVFCis6MTA5NUIwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDc1Cis6MTA5NUMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDA0NzkxMDA0QUVCCis6MTA5NUQwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU1Cis6MTA5NUUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyNDhFMDA0REVFCis6MTA5NUYwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDM1Cis6MTA5NjAwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMEE4Cis6MTA5NjEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDk4Cis6MTA5NjIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDg4Cis6MTA5NjMwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDc4Cis6MTA5NjQwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDY4Cis6MTA5NjUwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDU4Cis6MTA5NjYwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDQ4Cis6MTA5NjcwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAyNDhFMDA0RDVECis6MTA5NjgwMDAwOUIwMDAwMDFBOEUwMDQ3MDlCMDAwMDAxQThFMDA0ODg5Cis6MTA5NjkwMDAwOUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDk0Cis6MTA5NkEwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNDAwMDAyMDA4Cis6MTA5NkIwMDA4NUIwMDAwMDA0MDAwMDIwODVCMDAwMDAwNzAwMkU0QjlDCis6MTA5NkMwMDAxOTkwMDEwMDI1ODcwMDA0RTZCMTAwMDBENThBMjI0MkU2Cis6MTA5NkQwMDAxOTdDMDAwMDlBOTQwMDNBODEzMDAxMDBENThBMDA0MDNDCis6MTA5NkUwMDA4MUIyMDAwMEQ1OEEyMjQyMTk3QzAwMDBGRjFGMDAwRkMyCis6MTA5NkYwMDAxRThDMDEwMDA1OTQwMDQwODEzMjAxMDBFNThBOUMwRjE4Cis6MTA5NzAwMDA4MDMyMDAwMDAwMDAwMDVDMUY4MDAxMDAwMDgwMDAxMDFCCis6MTA5NzEwMDA0MkM5MDEwMEU1OEEyMjQwRTM2RDAwMDAwMDAwMDA0NUQ3Cis6MTA5NzIwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBFMjhBQTg0MDQyCis6MTA5NzMwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDBBOTg0MjIwMkEwCis6MTA5NzQwMDA4MDMyMDAwMEU2OEE0MjQwODEzMjAwMDAwMDAwMDA0NDdFCis6MTA5NzUwMDA5MzkzMDEwMDAwMDAxQTAyNjg5NzAxMDBBOTg0MDA0MDU5Cis6MTA5NzYwMDAwNUIwMDAwMDA1MDAyRTRCMTk5MDAxMDAyNTg3MDAwNDZDCis6MTA5NzcwMDBFNkIxMDAwMDAwMDAwMDQwODdCMDAxMDAwMDAwMDA0MDlBCis6MTA5NzgwMDA4REIwMDEwMDAwODAwMDAzNDJDOTAxMDA0MDAwMDBBMTJCCis6MTA5NzkwMDA0NEM5MDEwMDAwMDAwMEYwRTBCMTAxMDBERjk1MDAwNkJGCis6MTA5N0EwMDAwNzQwMDEwMDAwMDAwMDA2MDdEMDAxMDBENDAwMkU1QzM1Cis6MTA5N0IwMDAxRjkwMDEwMDAwMDAwMDA3RjBCMTAxMDAwQzgwMDAwM0MxCis6MTA5N0MwMDA0MkM5MDEwMDAwMDAwMEYwRjBCMTAxMDAwMDAwMDA0MEJCCis6MTA5N0QwMDA4MUIyMDEwMDAwMDAwMEZFOTZCMDAxMDAwMDAwMDBGRTEyCis6MTA5N0UwMDA5NkMwMDEwMDAwMDAwMEYwRjBCMTAxMDAwMDAwMDA0MDUwCis6MTA5N0YwMDA4MUIyMDEwMDAwMDAwMEZFOTZDMDAxMDAwMDAwMDBGRUUyCis6MTA5ODAwMDA5NkMwMDEwMDAwMDAwMEYwRjBCMTAxMDAwMDAwMDA0MDJGCis6MTA5ODEwMDA4MUIyMDEwMDAwMDAwMEZBOTZDMDAxMDAwMDAwMDBGRUM1Cis6MTA5ODIwMDA5NkMwMDEwMDAwMzAwMDRCOTQ4ODAxMDAwMDAwMDA0NjAzCis6MTA5ODMwMDA5NUYwMDEwMDAwMDAwMDRBOTZDMDAxMDA1RTAxMkUzNDQwCis6MTA5ODQwMDA5Nzg0MDEwMDAyMDAwMDRCRTRFNTAxMDA2NDAxMjA0MDIwCis6MTA5ODUwMDBFMUIxMDEwMDA5MDAwMDA3ODZFNDAxMDAwMDAwMkVBNzI1Cis6MTA5ODYwMDA4N0MwMDEwMDEwMDAwMDEwNDhDOTAxMDAxMDAwMDA0MDJFCis6MTA5ODcwMDBGMTk5MDEwMDU4MDEwMDQzRjBDOTAxMDA1ODAxMDAwNUE5Cis6MTA5ODgwMDBFMEM5MDEwMDAwMDAwMDQ0NjFCMTAxMDBBMDAwMDBBNDkzCis6MTA5ODkwMDA2MkREMDEwMDBGOEJBODQwODEzMjAwMDAwMDAwMDAwNTRFCis6MTA5OEEwMDA0OEIxMDEwMDFBMDAwMDQwOTc5ODAxMDAwODAwMkU0MEJFCis6MTA5OEIwMDA5NUIwMDEwMDE3OEIyMDRCOTQ2QzAwMDAwMDAwMDA0MDE1Cis6MTA5OEMwMDBGMUIxMDEwMDE0OEIwMDQxOTVDMDAwMDAxMDgwMDAxMDIwCis6MTA5OEQwMDA0MkM5MDEwMDFFOEIyMjQwRTM2RDAwMDAwMDAwMDA0NERECis6MTA5OEUwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAxQThCQTg0MDQ4Cis6MTA5OEYwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNTJCCis6MTA5OTAwMDA0OEIxMDEwMDlBOTQwMDQwODEzMDAxMDBFQThBMDA0MDg5Cis6MTA5OTEwMDA4MUIyMDAwMDBDODAwMDAzNDJDOTAxMDAwMDAwMDBGODgxCis6MTA5OTIwMDA4NkIwMDEwMDAwMDAwMEY4ODhCMDAxMDAyMzhCNDQ0MDlECis6MTA5OTMwMDA4MTMyMDAwMDI2OEJBMjRDRkQ3RjAwMDAyNzhCMDA0QzVCCis6MTA5OTQwMDBGRDkzMDAwMDI4OEIyMEYwNTY2RjAwMDAwMDAwMDBGMDBGCis6MTA5OTUwMDA1NkIzMDEwMDAwMDAxQzQwODFCMjAxMDAwMDgwMDAxMERECis6MTA5OTYwMDA0NEM5MDEwMDY0MDAwMDQwRjE5OTAxMDA3MDAwMDAwNTQ1Cis6MTA5OTcwMDBGMEM5MDEwMDAwMDAwMDQzRjBCMTAxMDAwMDAwMDA0NzAxCis6MTA5OTgwMDA2MUIxMDEwMDIwMDAwMDEwNjJERDAxMDAyRThCQTg0NEFGCis6MTA5OTkwMDBFMDMxMDAwMDEwMDAwMDEwOENDODAxMDAwMDgwMDA0NjdCCis6MTA5OUEwMDA0NEM5MDEwMDQwMDAwMDQwRjE5OTAxMDA2ODAxMDAwNTMwCis6MTA5OUIwMDBGMEM5MDEwMDY0MDAwMDQzRjBDOTAxMDAwMDAwMDA0NzQ1Cis6MTA5OUMwMDA2MUIxMDEwMDAwMDAwMDQ2NjJCMTAxMDAzNjhCQTg0NDdECis6MTA5OUQwMDBFMDMxMDAwMEFGODIwMDg4MUNCMDAwMDAwOTAwMDAwN0UxCis6MTA5OUUwMDA4NkU0MDEwMDM4MDAyRUE3ODdDMDAxMDA4QjAwMkQwNUZBCis6MTA5OUYwMDA0OEIxMDEwMDNFOEIyMjQzRTc3RDAwMDAwMDAwMDA0NDk3Cis6MTA5QTAwMDA0NUMxMDEwMDQxOEIyMjQ0RTc3RDAwMDAwMDAwMDA0QzZECis6MTA5QTEwMDA0NUMxMDEwMDAwMDAwMDRBMTk5MDAxMDA2ODAxMjBBMjIwCis6MTA5QTIwMDBFNEIxMDEwMDg4MDAwMDQwNDM5OTAxMDA0NThCMjMwQkZECis6MTA5QTMwMDBFNTZEMDAwMDAwMDAwMDQxMTk5MDAxMDAwMDgwMDAxMDU5Cis6MTA5QTQwMDA0NEM5MDEwMDUwMDAwMDQwRjE5OTAxMDA1ODAxMDA0MzUxCis6MTA5QTUwMDBGMEM5MDEwMDU4MDEwMDA1RTBDOTAxMDAwMDAwMDA0NDAwCis6MTA5QTYwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDA0QThCQTg0MDAyCis6MTA5QTcwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDA1QzAwMkUwNTFGCis6MTA5QTgwMDA0OEIxMDEwMDAwODAwMDAzNDJDOTAxMDAwMDAwNjBGMEZECis6MTA5QTkwMDA5NkIwMDEwMDlBOTQwMDQxODEzMDAxMDBFQThBMDA0MEFBCis6MTA5QUEwMDA4MUIyMDAwMDU1OEJBMjQ5MTk3QzAwMDA4NjAwMDA0MDVECis6MTA5QUIwMDA0Nzk5MDEwMDU5OEIwMDQwRTVCMTAwMDA4NjAwMkY0OTBECis6MTA5QUMwMDAxOTgwMDEwMDU5OEJBMkYyODAzMjAwMDA4QjAwMDA0MDA3Cis6MTA5QUQwMDA0Nzk5MDEwMDAwMDAwMDQyRTc5MTAxMDA1QzhCQTI0NjFCCis6MTA5QUUwMDAxOTdDMDAwMEEwMDAwMDQwNDc5OTAxMDA2MDhCMDA0MEY1Cis6MTA5QUYwMDBFNUIxMDAwMEEwMDAyRjQ2MTk4MDAxMDA2MDhCQTJGMkEyCis6MTA5QjAwMDA4MDMyMDAwMDhCMDAwMDQwNDc5OTAxMDAwMDAwMDA0MUI2Cis6MTA5QjEwMDBFNzkxMDEwMEE4MDAwMDQwNDM5OTAxMDAzNDAwMkRGMEI2Cis6MTA5QjIwMDAyNEIwMDEwMDAwMDAwMEZCMENCMDAxMDAwMDAwMDBGQkFECis6MTA5QjMwMDAxMEIwMDEwMDAwMDAwMEZCMTJCMDAxMDAwRjAwMDBGM0E0Cis6MTA5QjQwMDAxNjg4MDEwMDA0MDAwMEYzMTRGNDAxMDA4QjhCMjY0MEZBCis6MTA5QjUwMDA4MTMyMDAwMDczOEIyMjBBMTY2QzAwMDA1ODAwM0Q0M0NFCis6MTA5QjYwMDAxM0UwMDEwMDAwMDAwMEY4ODJCMDAxMDAwNDAwMjJGMEMwCis6MTA5QjcwMDA4NDMwMDAwMDg3OTUwMDQwODEzMjAxMDBBRjgyMDA4ODY4Cis6MTA5QjgwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwMDAwMDA0MUM5Cis6MTA5QjkwMDAxM0MwMDEwMDcyOEJBMDQzMTM2QzAwMDAwMDAwMDA0MDUyCis6MTA5QkEwMDAxM0IwMDEwMDY4OEIwMDQxMTVEMDAwMDA4QjhCMjIwQTk2Cis6MTA5QkIwMDA4MDMyMDAwMDU4MDAzRDQzMTNFMDAxMDAwMDAwMDBGODJGCis6MTA5QkMwMDA4MkIwMDEwMDA0MDAyMkYwODQzMDAwMDA4Nzk1MDA0MDNDCis6MTA5QkQwMDA4MTMyMDEwMDQwMDAyMDQwRTFCMTAxMDBBRjgyMDA4OEU1Cis6MTA5QkUwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDA4QjhCMjI0MTMxCis6MTA5QkYwMDAxNTUwMDAwMDAwMDAwMDQxMTFDMDAxMDA3RjhCQTA0MzAwCis6MTA5QzAwMDAxMTZDMDAwMDAwMDAwMDQwMTFCMDAxMDA1ODAwM0Q0M0ZECis6MTA5QzEwMDAxMUUwMDEwMDAwMDAwMEY4MzZCMDAxMDAwNDAwMjJGMDVECis6MTA5QzIwMDAwMDMwMDAwMDAwMDAwMDUwODNCMDAxMDBEOTk0MDA0N0NDCis6MTA5QzMwMDA2MTMxMDEwMEFGODIwMDg4MUNCMDAwMDA0MjkyMDAwNTMzCis6MTA5QzQwMDA0ODMxMDEwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMEYyCis6MTA5QzUwMDA2MkREMDEwMDg3OEJBODQwODEzMjAwMDBBRjgyMDA4ODVFCis6MTA5QzYwMDAxQ0IwMDAwMDdCOEIwMDA1NDhCMTAwMDAzNzAwMjA0MDhECis6MTA5QzcwMDBFN0IxMDEwMDBCOTUwMDUxODEzMDAxMDBFQThBMDA0MEY0Cis6MTA5QzgwMDA4MUIyMDAwMDM0MDAyRTQxRjVCMTAxMDAwMDExMDA0MDA2Cis6MTA5QzkwMDBFNTk5MDEwMDkzOEIwMDQ4MTk5MDAwMDAzNDAwMkU0MTkzCis6MTA5Q0EwMDBGNUIxMDEwMDAwMTEwMDQwRTU5OTAxMDAwMDgwMDAwM0JBCis6MTA5Q0IwMDA0MkM5MDEwMDAwMDAwMEY4OTRCMDAxMDA5ODhCMjI0NUQxCis6MTA5Q0MwMDAyMzdDMDAwMEIwMDAyRkYwOENCMDAxMDAwMDAwNjBGMDk5Cis6MTA5Q0QwMDA4Q0MwMDEwMDkwMDAwMDQwNDM5OTAxMDAzNTAwMkRGMDM4Cis6MTA5Q0UwMDA4Q0IwMDEwMDU4MDAzRTQzRTdFMTAxMDA5RDhCMjI0ODAzCis6MTA5Q0YwMDAxOTdDMDAwMDAwMDAwMDQxOERDMDAxMDAwMDAwNjgwQUNFCis6MTA5RDAwMDA4Q0MwMDEwMDM4MDAyQTRBRTBCMTAxMDAyODAwMDAwMEEwCis6MTA5RDEwMDBFMEM5MDEwMDNDMDAyMDFCRTBCMTAxMDAxMDgwMDAwM0ZECis6MTA5RDIwMDA0MkM5MDEwMDAwMDAwMEY4MzhCMDAxMDAwMDAwMDBGODRFCis6MTA5RDMwMDAyNkIwMDEwMDA0MDAyMkY4MDIzMDAwMDBBQjhCMjMwMUEyCis6MTA5RDQwMDAxNDZDMDAwMDAwMDAwMEY4ODBCMDAxMDAwMDAwMDBGODcyCis6MTA5RDUwMDA4MkIwMDEwMDRDMDAyMEYwRTRCMTAxMDA0NDAwMjA0MDNBCis6MTA5RDYwMDBFMEIxMDEwMDQ4MDAyMDQxRTBCMTAxMDBBODAwMkQxMDQxCis6MTA5RDcwMDAzMkIwMDEwMEMzOTUwMEYwMjQzMDAxMDBCNDhCQTI0NDNFCis6MTA5RDgwMDA4MTZDMDAwMEIyOEIyMjQxMTk3QzAwMDA2RTkzMDA0MDcwCis6MTA5RDkwMDAzQjMwMDEwMEQ4OEJBMjA4M0MzMDAwMDBCNDhCMDA0MDVGCis6MTA5REEwMDA4MUIyMDAwMEFCOTIwMDQwODEzMjAxMDBEODhCQTIwODQyCis6MTA5REIwMDAzQzMwMDAwMDUwMDAyMDFDRTBCMTAxMDA1NDAwMjAxMzkyCis6MTA5REMwMDBFMEIxMDEwMDRFMDAyMDAxRTRCMTAxMDA0MDAwMjAwQTkyCis6MTA5REQwMDBFMEIxMDEwMDBCOTUwMDVGODEzMDAxMDBFQThBMDA0MDhDCis6MTA5REUwMDA4MUIyMDAwMDM3MDAwMDQwNDc5OTAxMDA0RDkzMDBGMzE1Cis6MTA5REYwMDA5NDMwMDEwMDkzOEIyMjRBODAzMjAwMDBDMDhCMDA0MEQ3Cis6MTA5RTAwMDA4MUIyMDAwMDM3MDAwMDQwNDc5OTAxMDA0RDkzMDBGM0Y0Cis6MTA5RTEwMDA5NDMwMDEwMDU4MDAzRTQzOTdFMDAxMDAwMDAwMDAxQjExCis6MTA5RTIwMDBGMEIxMDEwMDFGMDA2MDAwMDA4QzAxMDBFQThBODUxMTdBCis6MTA5RTMwMDA4MDMyMDAwMDA0ODAwMDAzNDJDOTAxMDBCMDAwMkZGMDBFCis6MTA5RTQwMDA4Q0IwMDEwMDAwMDA2MEYwOENDMDAxMDAwQjk1MDA1RjM5Cis6MTA5RTUwMDA4MTMwMDEwMEVBOEEwMDQwODFCMjAwMDBDQThCMDA0OUNCCis6MTA5RTYwMDAxOTgwMDAwMENGOEIyMjQxMTk3QzAwMDA2RTkzMDA0MEM2Cis6MTA5RTcwMDAzQjMwMDEwMEQzOEJBMjA4M0MzMDAwMDAwQjk1MDA1RjAzCis6MTA5RTgwMDA4MTMwMDEwMEVBOEEwMDQwODFCMjAwMDBBQjkyMDA0MEJDCis6MTA5RTkwMDA4MTMyMDEwMEQzOEJBMjA4M0MzMDAwMDAwQjk1MDA1RjlCCis6MTA5RUEwMDA4MTMwMDEwMEVBOEEwMDQwODFCMjAwMDA1MDAwMkQxMDhDCis6MTA5RUIwMDAzMkIwMDEwMDU0MDAyREYwMzhCMDAxMDA0RTAwMkRGMEZBCis6MTA5RUMwMDAyNkIwMDEwMDQwMDAyREYyMDJCMDAxMDAwMDAwMDBGMEI5Cis6MTA5RUQwMDAxNEIwMDEwMDMwMDAwMDEwOENDODAxMDAwMDgwMDA0NjYyCis6MTA5RUUwMDA0NEM5MDEwMDY4MDEyRDQ0NjFCMTAxMDAxMDAwNjhGMjBECis6MTA5RUYwMDA4MEM4MDEwMDAwMDAwMDA4RjBCMTAxMDA1ODAxMDAwNTExCis6MTA5RjAwMDBFMEM5MDEwMDAwMDAwMDBCMzdCMDAxMDAwMDAwMDA0MDc0Cis6MTA5RjEwMDAzNkQwMDEwMDVDMDEyRTQwMTBDMDAxMDAwMDAwMDAwNjk4Cis6MTA5RjIwMDA4MEMwMDEwMDAwMDAwMDUyODFEMDAxMDBBMDk0MDA0MEQ4Cis6MTA5RjMwMDBFNDMxMDEwMDIwMDAwMDQ2NjJERDAxMDBFNDhCQTg0MDBFCis6MTA5RjQwMDAyMzMwMDAwMEU1OTIwMDQwODEzMjAxMDBFRDkyMDA0MDk0Cis6MTA5RjUwMDA4MTMyMDEwMEYyOEI4MjQxMjM0MDAwMDAyMDgwMDAxMEZBCis6MTA5RjYwMDA0MkM5MDEwMEVGOEIyMjQwRTM2RDAwMDAwMDAwMDA0NjczCis6MTA5RjcwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBFQzhCQTg0MERGCis6MTA5RjgwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNTk0Cis6MTA5RjkwMDA0OEIxMDEwMDAwMDAwMDEwMzJCMDAxMDAwMDAwMDA0MTkzCis6MTA5RkEwMDAyM0IwMDEwMDAwODAwMDE5NDRDOTAxMDBGQThCMjI0MTRFCis6MTA5RkIwMDAxOTdDMDAwMEY2OEJBMzAxMEM2QzAwMDBGNzhCMDAwNkU3Cis6MTA5RkMwMDAwNEIwMDAwMDAwMDAwMDAxMDRCMDAxMDBGOThCMjAwMjgxCis6MTA5RkQwMDAzNjZDMDAwMDAwMDAwMDFCMDRCMDAxMDBGRDhCMDAwMjg1Cis6MTA5RkUwMDBFMEIxMDAwMEZDOEJBMzAxMEM2QzAwMDBGRDhCMDAwNkFGCis6MTA5RkYwMDAwNEIwMDAwMDAwMDAwMDAxMDRCMDAxMDAwMDAwNjgwMjhECis6MTBBMDAwMDAxNjk0MDEwMEZGRkYwMDBCMTZEODAxMDAwMDAwNjgwODNECis6MTBBMDEwMDAzRTk2MDEwMDAwMDAwMDFDRjBCMTAxMDAwMDAwMDA0NjY3Cis6MTBBMDIwMDA2MUIxMDEwMDIwMDAwMDE5NjJERDAxMDAwMjhDQTgxMzVCCis6MTBBMDMwMDBFMDMxMDAwMDM5OEMyMjAyMTQ1MDAwMDA0NDAwMkQwMjRGCis6MTBBMDQwMDAwQ0QwMDEwMDI5OENBMjAyMDI1MDAwMDAxMDhDMjI1QzZFCis6MTBBMDUwMDAxRjdDMDAwMDIwODAwMDAzNDJDOTAxMDAwRjhDMjI0MEI5Cis6MTBBMDYwMDBFMzZEMDAwMDAwMDAwMDQ3NjFCMTAxMDA0MDAwMDAxMEY2Cis6MTBBMDcwMDA2MkREMDEwMDBCOENBODQwODEzMjAwMDBBRjgyMDA4OEI1Cis6MTBBMDgwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDA0NDAwMkQ1QzM4Cis6MTBBMDkwMDAxRjgwMDEwMDQ4MDAyREYwMzhCMDAxMDA0QzAwMkRGMDY5Cis6MTBBMEEwMDAyNkIwMDEwMDM4MDAyRkYyMDJCMDAxMDAyQThDMjIwMUY0Cis6MTBBMEIwMDAxNDZDMDAwMDFEOEMyMjQ2MUY3QzAwMDAwMDAwMDA0NjJFCis6MTBBMEMwMDAxRjgwMDEwMDIwMDAyRDAzNDhCMTAxMDAxQzhDMjI0MDlDCis6MTBBMEQwMDBFMzZEMDAwMDAwMDAwMDQ0NjFCMTAxMDA0MDAwMDAxMDg5Cis6MTBBMEUwMDA2MkREMDEwMDE5OENBODQwODEzMjAwMDBBRjgyMDA4ODM3Cis6MTBBMEYwMDAxQ0IwMDAwMDM4MDAyRjA1NDhCMTAxMDAwMDAwMDBGODM2Cis6MTBBMTAwMDA5NEIwMDEwMDM4MDAyREYwOTZCMDAxMDAwMDAwMDA0QzIyCis6MTBBMTEwMDBFMUMxMDEwMDIwMDAwMDAzNDhDOTAxMDAwMDAwMjI0QUZCCis6MTBBMTIwMDBGMUIxMDEwMDQ0MDAwMDA1RjBDOTAxMDAwMDAwMDA0QTNGCis6MTBBMTMwMDBGMEIxMDEwMDAwMDAwMDRCRTBCMTAxMDAwMDAwMDA0NzU5Cis6MTBBMTQwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDAyNjhDQTg1Q0MyCis6MTBBMTUwMDAxRjEwMDAwMDJBOEMwMDA1NDhCMTAwMDAwMDAwMDAwMjFBCis6MTBBMTYwMDAzOEMwMDEwMDM0OEMyMjA2ODAzMjAwMDAwMDAwMDA1MDBDCis6MTBBMTcwMDAzM0MwMDEwMDMyOENBMjAyMzY2QzAwMDAwNDAwOEYwRDQ3Cis6MTBBMTgwMDA0MjMxMDAwMDEwMDAwMEY4MTBDODAxMDAwMDAwMDA1QzFGCis6MTBBMTkwMDAxMTgwMDEwMEYwMDcwMDQwMzc5ODAxMDBFODhCMDBBMTEyCis6MTBBMUEwMDAxQUIwMDAwMDAwMDAwMDAyMTBDMDAxMDBFODhCMDAwMjlECis6MTBBMUIwMDAzNkQwMDAwMDUwMDAyMDFDRTBCMTAxMDA1NDAwMjAxM0Y0Cis6MTBBMUMwMDBFMEIxMDEwMDRFMDAyMDAxRTRCMTAxMDA0MDAwMjAwQThFCis6MTBBMUQwMDBFMEIxMDEwMDNFOEMwMDVGMDFCMDAwMDAzNzAwMkQ0NjY5Cis6MTBBMUUwMDAwMUIwMDEwMDA0MDAwMEYzODBGNDAxMDAzRDhDQTA0M0E1Cis6MTBBMUYwMDA4MTZDMDAwMDAwMDAwMDU1MDFCMDAxMDA0MDAwMjA0MENCCis6MTBBMjAwMDBFMUIxMDEwMDAwODAwMDE5NDJDOTAxMDA0NDhDMjI0MEU0Cis6MTBBMjEwMDBFMzZEMDAwMDAwMDAwMDQ2NjFCMTAxMDA0MDAwMDAxOTNDCis6MTBBMjIwMDA2MkREMDEwMDQxOENBODQwODEzMjAwMDBBRjgyMDA4OENECis6MTBBMjMwMDAxQ0IwMDAwMEVBOTIwMDQwODEzMjAxMDAzMDgwMDAxMDIyCis6MTBBMjQwMDA0MkM5MDEwMDRCOEMyMjQwRTM2RDAwMDAwMDAwMDA0NDM1Cis6MTBBMjUwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA0ODhDQTg0MDlGCis6MTBBMjYwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDA2MDAxMkYwNTIxCis6MTBBMjcwMDA0OEIxMDEwMDAwMDAwMDBCRTRCMTAxMDAwMDAwMDA1MEYzCis6MTBBMjgwMDAxN0YwMDEwMDUwOEM5MEYyMTY0MDAwMDAwMDAwMDA0MUQxCis6MTBBMjkwMDAxN0MwMDEwMDAwMDA2NjIwMTdBNDAxMDAzMjAwMDBBNkNDCis6MTBBMkEwMDAyQUMwMDEwMDAwMDAwMEYyMkE5NDAxMDA1MzhDNDU0OEE2Cis6MTBBMkIwMDA2MTMxMDAwMDAwRDAwMDFFNjJERDAxMDA1ODhDMjg0MDkyCis6MTBBMkMwMDAwNTMwMDAwMDU0OEMyMjQ4Nzc3RDAwMDA1QjhDMDA0MEY0Cis6MTBBMkQwMDA4MUIyMDAwMDAwMDAwMDE1NjJCMTAxMDA2NDhDMjg0MENBCis6MTBBMkUwMDA4MTMyMDAwMDU4OEMwMDQwODFCMjAwMDAwMDAwMUQwMDQ3Cis6MTBBMkYwMDA5MkIwMDEwMDYxOEMyMjQxMTk3QzAwMDAwMDgwMDAwM0IzCis6MTBBMzAwMDA0MkM5MDEwMEIwOTIwMEY4MDAzMDAxMDA1RThDQTI0MTA5Cis6MTBBMzEwMDAzQjUwMDAwMDY1OEMwMDQ5MDBCMDAwMDBGRjA3MDAxRUE0Cis6MTBBMzIwMDAwMDhDMDEwMEIwOTIwMDQwODEzMjAxMDA2NThDMDA0OTMwCis6MTBBMzMwMDAwMEIwMDAwMDAwMDAxRDQ3MTk4MDAxMDA2ODhDMjI1RkZBCis6MTBBMzQwMDAwMTZDMDAwMEVEOTUwMDQwODEzMjAxMDBDNTg3MDAwMERFCis6MTBBMzUwMDA4MEIwMDAwMDZGOEMyMjVDMUY3QzAwMDAyMDgwMDAwMzE2Cis6MTBBMzYwMDA0MkM5MDEwMDZGOEMyMjQwRTM2RDAwMDAwMDAwMDA0N0VECis6MTBBMzcwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA2QzhDQTg0MDVBCis6MTBBMzgwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDA2RjhDNDAwNTU1Cis6MTBBMzkwMDA0ODMxMDAwMEZGRkYwMDA3OTQ4OTAxMDA3NThDODVDQUQxCis6MTBBM0EwMDA5NDMwMDAwMEVEOTUxODVDMUYwMDAxMDAwRTAwMDAwRkI2Cis6MTBBM0IwMDAxRThDMDEwMEU2ODYwMDQwODFCMjAwMDAwQjk1MTgwMDVCCis6MTBBM0MwMDA4MDMwMDEwMEVBOEEwMDQ3MTk4MDAwMDAwMDAwMDA0MDQ4Cis6MTBBM0QwMDAxOTgwMDEwMEVBOEEyMjQ3MTk3QzAwMDBBQjkyMDA0MEY0Cis6MTBBM0UwMDA4MTMyMDEwMDdDOENBMjA4ODAzMjAwMDBFQThBMDA0MEExCis6MTBBM0YwMDA4MUIyMDAwMEEwOTQwMDQwMEQzMDAxMDA5QzAxMDA0MDlCCis6MTBBNDAwMDA0NTk5MDEwMEZGRkYwMDBCOTg4ODAxMDA4QjAwMkQ1MDNCCis6MTBBNDEwMDAxN0YwMDEwMDgyOEM5MDRDMTY0MDAwMDAwMDAwMDA0MUIzCis6MTBBNDIwMDAxN0MwMDEwMDg0OEMyMjQzRTc3RDAwMDAwMDAwMDA0NDM3Cis6MTBBNDMwMDA0NUMxMDEwMDAwMDA2NjIwMTdBNDAxMDA2ODAxMDA0MDJBCis6MTBBNDQwMDA0Mzk5MDEwMDVDMDEyRUYyODBCMDAxMDAwMjAwNjI0MERECis6MTBBNDUwMDA3RUNEMDEwMDAwMDAwMDU3ODFDMDAxMDAwMDAwMkUxMEQ5Cis6MTBBNDYwMDA0OEIxMDEwMDAzMDAwMDQwRjA4RDAxMDAwMDAwMDAwODI5Cis6MTBBNDcwMDBGMEIxMDEwMDU4MDEwMDA1RTBDOTAxMDAwMDAwMDA0NEVFCis6MTBBNDgwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDA4RThDQTg0MDkzCis6MTBBNDkwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNTdGCis6MTBBNEEwMDA0OEIxMDEwMDkyOEM0NTQ4NjEzMTAwMDAwMDUwMDAwODFECis6MTBBNEIwMDA2MkREMDEwMDk4OEMyODQwMDUzMDAwMDA5MzhDMjI0ODEyCis6MTBBNEMwMDA3NzdEMDAwMEIwOTIxRDA4MDAzMDAxMDBFQThBMDA0MDRDCis6MTBBNEQwMDA4MUIyMDAwMEVBOEExRDQ3MTk4MDAwMDAzNTAwMDA0MDYzCis6MTBBNEUwMDA0Nzk5MDEwMDAxMDA2M0YzODRDODAxMDA5RDhDQTA0M0RCCis6MTBBNEYwMDA4NTZDMDAwMDAwMDA2MzQwODVCMDAxMDBBODAwMDA0MEFBCis6MTBBNTAwMDA0Mzk5MDEwMDM3MDAyRkYwMjRCMDAxMDAwMTAwNjNGM0VDCis6MTBBNTEwMDA4MkNDMDEwMEE4OENBMjQxOUUwNjAwMDBFQThBMjI0NDU3Cis6MTBBNTIwMDA4MzcwMDAwMDM2MDAwMDQwNDM5OTAxMDA1ODAwM0Q0MzBECis6MTBBNTMwMDBFN0UxMDEwMEVBOEExRkYwMjQ2QzAwMDBFRDk1MDA0ODc1Cis6MTBBNTQwMDA4MTMwMDEwMEM1ODcyMzQxODM2QzAwMDBDNTg3MDA0NzI3Cis6MTBBNTUwMDA4MUIwMDAwMDU4MDAzRDQzODVFMDAxMDAwMDAwMDBGODk0Cis6MTBBNTYwMDAzNkIwMDEwMDAwMDAwMEYwMDBCMDAxMDAyODAwMDA0MEZCCis6MTBBNTcwMDA4Mzk4MDEwMEQ5OTQwMDQ3NjEzMTAxMDBBRjgyMDA4OEJGCis6MTBBNTgwMDAxQ0IwMDAwMDAwMDAyRDAzNDhCMTAxMDAwODAwMkRGMEIwCis6MTBBNTkwMDA5NEIwMDEwMDAwMDAwMEY4OEVCMDAxMDA5MDAwMkRGMDkyCis6MTBBNUEwMDAxNEIwMDEwMDAwMDAwMDA1NDhCMTAxMDA5OThCQTI0MEUxCis6MTBBNUIwMDA4RjdDMDAwMEI2OEMyMjQ3OEY3QzAwMDA5OThCMDA0ODZFCis6MTBBNUMwMDAxOTkwMDAwMDI1OEQwMDQwODFCMjAwMDAzNjAwMkQ1REZECis6MTBBNUQwMDAwNUI0MDEwMDM3MDAyREYzODBCMDAxMDAwMDAwMDBGMzQ2Cis6MTBBNUUwMDA4RUIwMDEwMDVDMDAzRDQzODFFMDAxMDBBODAwMkRGMDI5Cis6MTBBNUYwMDA5NEIwMDEwMDAwMDAwMEYwMjRCMDAxMDAyMDAwMDAxMDIxCis6MTBBNjAwMDA4NkRDMDEwMDQwODAwMDAzNDRDOTAxMDBCMTkxMDA0QThBCis6MTBBNjEwMDBGMDMxMDEwMDM2MDAyRjVDMUY5MDAxMDBDNDhDQTI1MDY1Cis6MTBBNjIwMDA4RjUwMDAwMDM0MDAyMDQwRTFCMTAxMDBFQThBMDA0MDcwCis6MTBBNjMwMDA4MUIyMDAwMDAwMDA2MzQxODFDMDAxMDBDNzhDQTA0M0NCCis6MTBBNjQwMDA4MTZDMDAwMDAwMDA2MzQwODFCMDAxMDAzNzAwMjA0N0FBCis6MTBBNjUwMDBFNkIxMDEwMEVBOEEyMjQ3ODAzMjAwMDAwNDAwMDA0Nzg4Cis6MTBBNjYwMDAwQ0Y0MDEwMDAwMDAwMDRGOEY4NDAxMDBEQzhDMjI0N0I1Cis6MTBBNjcwMDAwQzZDMDAwMDU4MDAzRDQzODFFMDAxMDBEQzhDMUZGMEIxCis6MTBBNjgwMDAyNDZDMDAwMDAwMDAwMDVDMUY4MDAxMDAwMDgwMDAxMEFFCis6MTBBNjkwMDA0MkM5MDEwMEQ1OEMyMjQwRTM2RDAwMDAwMDAwMDA0NTU2Cis6MTBBNkEwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBEMjhDQTg0MEMxCis6MTBBNkIwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDBENThDNDI0MDdGCis6MTBBNkMwMDAwNTMwMDAwMDAwMDAwMDQ0OTM5MzAxMDAwMDAwMUE1RDczCis6MTBBNkQwMDA2OTkzMDEwMERBOEMyMzQxMEQ2QzAwMDBCNzhDMDAwNUYyCis6MTBBNkUwMDA0OEIxMDAwMEVEOTUwMDA1NDgzMTAxMDBDNTg3MDA0OERDCis6MTBBNkYwMDA4MUIwMDAwMEVBOEEyMjQwOEY2QzAwMDAwQjk1MDA1RjU5Cis6MTBBNzAwMDA4MTMwMDEwMEVBOEEwMDQwODFCMjAwMDBBMjAwMDA0MENFCis6MTBBNzEwMDA0Mzk5MDEwMDAwMDAwMEYzODRCMDAxMDBBNjAwMkQ0OTE4Cis6MTBBNzIwMDAxOTkwMDEwMDAyMDAwMEYyODBGNDAxMDBCODAwMkQ0MEYxCis6MTBBNzMwMDA4MUIyMDEwMDAwMDAwMEYyODBDMDAxMDAwMDAwMDA0MDcyCis6MTBBNzQwMDA4MkY4MDEwMDE5MDAwMDQwODE5ODAxMDBFQjhDQTA0MEM0Cis6MTBBNzUwMDA4MjZDMDAwMDJDMDEwMDQwODE5ODAxMDBFQjhDQTM0MDJBCis6MTBBNzYwMDA4MjZDMDAwMDAwMDAwMDQxODBCMDAxMDBFRDhDMjA0Q0E0Cis6MTBBNzcwMDA4NTZDMDAwMDAwMDAwMDQxODVDMDAxMDA4NjAwMjA0MDdCCis6MTBBNzgwMDBFNEIxMDEwMEEyMDAyMDQyRTZCMTAxMDBFQThBMDA0MEUzCis6MTBBNzkwMDA4MUIyMDAwMDlBOTQwMDUwODEzMDAxMDBFQThBMDA0MEEyCis6MTBBN0EwMDA4MUIyMDAwMDA0ODAwMDAzNDJDOTAxMDAwNDAwMjJGMENECis6MTBBN0IwMDA4MDMwMDAwMDAwMDAwMDQwOERCMDAxMDBERjk1MDA0MEI3Cis6MTBBN0MwMDA4NzMwMDEwMEIwMDAyRjVDMUY5MDAxMDAwMDAwNjBGMDk2Cis6MTBBN0QwMDA4MEMwMDEwMDBCOTUwMDVGODEzMDAxMDBFQThBMDA0MEQzCis6MTBBN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDBFQThBMjI0NkUzCis6MTBBN0YwMDAxOTdDMDAwMEEwMDAwMDQwNDc5OTAxMDAwMTAwNjJGMkFFCis6MTBBODAwMDA5NkNDMDEwMEVBOEFBNjQwODEzMjAwMDAwQjk1MDA0QUVFCis6MTBBODEwMDA4MTMwMDEwMEUwOTQwMDQ2OTUzMDAxMDBFQThBMDA0MDUyCis6MTBBODIwMDA4MUIyMDAwMEVBOEEyMjQ5MTk3QzAwMDA4NjAwMDA0MEJCCis6MTBBODMwMDA0Nzk5MDEwMDAxMDA2MkYyODBDQzAxMDBFQThBQTY0MDNCCis6MTBBODQwMDA4MTMyMDAwMDBCOTUwMDRBODEzMDAxMDBFMDk0MDA0N0ZFCis6MTBBODUwMDA5NTMwMDEwMEVBOEEwMDQwODFCMjAwMDA0MjkyMDA0MDM3Cis6MTBBODYwMDA4MTMyMDEwMEVBOEEwMDVDMUY5MDAwMDBFQThBMDA0MDAxCis6MTBBODcwMDA4MUIyMDAwMEVBOEEwMDQwODFCMjAwMDBCQTAwMDA0MEM0Cis6MTBBODgwMDA0Nzk5MDEwMDAxMDA2MkYyODBDODAxMDAxMThEOTA0MERCCis6MTBBODkwMDA4MDMyMDAwMEZGRkY2MjQwODE5ODAxMDBBNDAwMDA0MDY4Cis6MTBBOEEwMDA0Nzk5MDEwMEVBOEEyMjQwRTU2RDAwMDBFQThBMDA0MUVBCis6MTBBOEIwMDBFNUMxMDAwMDlBOTQwMDREODEzMDAxMDBFQThBMDA0MDExCis6MTBBOEMwMDA4MUIyMDAwMDVDMDAwMDQwNDc5OTAxMDAwNDAwMjJGMEMyCis6MTBBOEQwMDA5NjMwMDAwMDAwMDAwMDQwRTFCMTAxMDAwMDgwMDAwMzVDCis6MTBBOEUwMDA0NEM5MDEwMDAwMDAwMDRCRTBCMTAxMDAwMDAwMDA0MDNECis6MTBBOEYwMDA4REIwMDEwMERGOTUwMDQwODczMDAxMDA4QjAwMDA0MEUzCis6MTBBOTAwMDA0Nzk5MDEwMDIxOEQ4MEYzOTYzMDAwMDAwMDAwMDA0MDNGCis6MTBBOTEwMDBFNzgxMDEwMDAwMDAwMDQ3MTk5MDAxMDBFQThBMDA1QzBECis6MTBBOTIwMDAxRjkwMDAwMDM0MDAwMDQwNDU5OTAxMDAwMTAwMDA0MEU0Cis6MTBBOTMwMDBGNTk5MDEwMDAwMTEwMDQwRTU5OTAxMDBBQjkyMDA0MDNCCis6MTBBOTQwMDA4MTMyMDEwMDM2OERBMjA4ODAzMjAwMDAzNzAwMDA0MEJECis6MTBBOTUwMDA0Nzk5MDEwMDAwMDAwMEYzODJCMDAxMDAwMDAwNjM1MTNDCis6MTBBOTYwMDA4M0QwMDEwMDM0MDAwMDQwNDc5OTAxMDAwMTAwNjNGM0U3Cis6MTBBOTcwMDA4NENDMDEwMDJFOEQ5RjQyODAzMjAwMDAwMDAwNjM0MjkzCis6MTBBOTgwMDA4NUIwMDEwMDAwMDAwMDQ1MDNGMDAxMDAwMDAwMDAwMTU3Cis6MTBBOTkwMDAwMEMwMDEwMDMwOEQzNzVDNjEzMTAwMDAwMDAwMDAxQkY5Cis6MTBBOUEwMDA2MkIxMDEwMDMxOERBODRCMTkxMDAwMDAwMDAwMDAwMEI5Cis6MTBBOUIwMDA2MkIxMDEwMDMzOERBODQwODEzMjAwMDAxQTg3MTc0MDMwCis6MTBBOUMwMDA4MUIyMDAwMDAwODAwMDAzNDJDOTAxMDA5MDAwMkRGMDE4Cis6MTBBOUQwMDA5NEIwMDEwMEFDMDAyREYwMzBCMDAxMDAzNTAwMkRGMDM2Cis6MTBBOUUwMDAyOEIwMDEwMDU4MDAzRTQzRTdFMTAxMDAwMTAwMDAxOEQzCis6MTBBOUYwMDBGMEM5MDEwMDAwMDAwMDRBRTBCMTAxMDAzODAwMjAwMDY5Cis6MTBBQTAwMDBFMEIxMDEwMDNDMDAyMDFCRTBCMTAxMDA0MDAwMjA0MDBCCis6MTBBQTEwMDBFMUIxMDEwMDAwMDAwMDQwMkJCMDAxMDBFRjk0MDA0MEM0Cis6MTBBQTIwMDAwRDMwMDEwMDAwMDAwMDE4MTZDMDAxMDA0NThEQTAxNDczCis6MTBBQTMwMDAxNjQ0MDAwMDAwMDAwMDQxMTdDMDAxMDAwRTAwMDBBMkYzCis6MTBBQTQwMDA0NEM5MDEwMDAwMDAwMDE4RjhCMTAxMDBCMDAwMkQxNDQ1Cis6MTBBQTUwMDBGOEIxMDEwMDEwNTAwMDQwODc5ODAxMDA0RThEMjI0QTQ1Cis6MTBBQTYwMDAxOTdDMDAwMDAwMzAwMDQzODZDODAxMDAwMDMwMDAwQjU0Cis6MTBBQTcwMDAxNkM4MDEwMDRFOERBNDQwODEzMjAwMDAwMDAwMDA0MTQ0Cis6MTBBQTgwMDAxN0MwMDEwMDAxMDA2RTQzODY5ODAxMDAyNjk1MDAzMDMyCis6MTBBQTkwMDA4MTMwMDEwMDUyOERBMDQxMTc0MDAwMDAwMDAwMDA0MUFDCis6MTBBQUEwMDAxN0MwMDEwMDU5OEQyMjRBMTk3QzAwMDAwODAwMDBBMjNECis6MTBBQUIwMDA0NEM5MDEwMENDMDAyREFCRjlCMTAxMDAwMDAwMDBBQjhFCis6MTBBQUMwMDAxN0MwMDEwMDU4OERBMEYwMTY0NDAwMDAwMDAwMDA0MTlFCis6MTBBQUQwMDAxN0MwMDEwMDAwMDA2NEYwODJCMDAxMDA5MDAwMDA0MDQ3Cis6MTBBQUUwMDA0NTk5MDEwMDAwMDA2MDQxMzFDMDAxMDBCQzAwMDA0MEY4Cis6MTBBQUYwMDA0Mzk5MDEwMDVGOEQwNjBDODAzMjAwMDBBMDAwMjBGMjE3Cis6MTBBQjAwMDBFNEIxMDEwMDA0MDAwOTQ2MTkxMDAwMDA5QzAxMDA0MDU2Cis6MTBBQjEwMDA0NTk5MDEwMEZGRkYwMDBCOTg4ODAxMDA4QjAwMkQ1MDI0Cis6MTBBQjIwMDAxN0YwMDEwMDY0OEQ5MDRDMTY0MDAwMDAwMDAwMDA0MUI5Cis6MTBBQjMwMDAxN0MwMDEwMDY2OEQyMjQzRTc3RDAwMDAwMDAwMDA0NDNECis6MTBBQjQwMDA0NUMxMDEwMDAwMDA2NjIwMTdBNDAxMDA2ODAxMDA0MDEzCis6MTBBQjUwMDA0Mzk5MDEwMDVDMDEyRUYyODBCMDAxMDAwMjAwNjI0MEM2Cis6MTBBQjYwMDA3RUNEMDEwMDAwMDAwMDU3ODFDMDAxMDAwMDAwMkUxMEMyCis6MTBBQjcwMDA0OEIxMDEwMDAzMDAwMDQwRjA4RDAxMDAwMDAwMDAwODEyCis6MTBBQjgwMDBGMEIxMDEwMDU4MDEwMDA1RTBDOTAxMDAwMDAwMDA0NEQ3Cis6MTBBQjkwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDA3MDhEQTg0MDk5Cis6MTBBQkEwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNTY4Cis6MTBBQkIwMDA0OEIxMDEwMDc0OEQ0NTQ4NjEzMTAwMDAwMDUwMDAwODIzCis6MTBBQkMwMDA2MkREMDEwMDc1OERBODQwMDUzMDAwMDAzNTAwMUQ0MDk0Cis6MTBBQkQwMDA0Nzk5MDEwMDAxMDA2M0YzODRDODAxMDA3QjhEQTA0MzA1Cis6MTBBQkUwMDA4NTZDMDAwMDAwMDA2MzQwODVCMDAxMDAzNzAwMDA0MDI0Cis6MTBBQkYwMDA0Nzk5MDEwMDAxMDA2M0YzODJDQzAxMDA4QjAwMDA0MDAzCis6MTBBQzAwMDA0Nzk5MDEwMDAwMDAwMDQ1RTc5MTAxMDAwQjk1MDA1RkE2Cis6MTBBQzEwMDA4MTMwMDEwMEVBOEEwMDQwODFCMjAwMDAzNzAwMDA0MDI0Cis6MTBBQzIwMDA0Nzk5MDEwMDREOTMwMEYzOTQzMDAxMDAyNThEMjI0QThECis6MTBBQzMwMDA4MDMyMDAwMEMwOEIwMDQwODFCMjAwMDAzNzAwMDA0MDJECis6MTBBQzQwMDA0Nzk5MDEwMDREOTMwMEYzOTQzMDAxMDA5MDhCMjI0QTA0Cis6MTBBQzUwMDA4MDMyMDAwMEMwOEIwMDQwODFCMjAwMDAzNjAwMDA0MDBFCis6MTBBQzYwMDA0Mzk5MDEwMDAwMDAwMEZCMTJCMDAxMDAwRjAwMDBGMzQ3Cis6MTBBQzcwMDA5MDg4MDEwMDA0MDAwMEYzMENGNDAxMDBCQThCMjIwNjU2Cis6MTBBQzgwMDA5MDZDMDAwMDVDMDAzRDQzMTNFMDAxMDBBODAwMkRGMDMzCis6MTBBQzkwMDA5NEIwMDEwMDM3MDAyRkYwMjRCMDAxMDAzNjAwMkE1MDk0Cis6MTBBQ0EwMDBFN0QxMDEwMDAwMDA2MzQxMTNDMDAxMDA5NThEQTA0MzZFCis6MTBBQ0IwMDAxMzZDMDAwMDAwMDAwMDQwRTdCMTAxMDBBRjkxMDAxMEVDCis6MTBBQ0MwMDA4NjMwMDEwMEFGODIwMDg4MUNCMDAwMDA5NzhENDIwNURECis6MTBBQ0QwMDA0ODMxMDAwMDAwMDAwMDQ0OTM5MzAxMDBCQThCMUE1REQ0Cis6MTBBQ0UwMDA2OTkzMDAwMDM2MDAyRDEwODZCMDAxMDA1QzAwM0Q0M0UyCis6MTBBQ0YwMDBFN0UxMDEwMEE4MDAyREYwOTRCMDAxMDAzNTAwMkZGMDJECis6MTBBRDAwMDAyNEIwMDEwMDAxMDA2QkZCODRDODAxMDBBMjhEQTA0M0E4Cis6MTBBRDEwMDA4NTZDMDAwMDM1MDAyMDQwRTdCMTAxMDAwMDAwMDA0MEQ0Cis6MTBBRDIwMDA4MUIyMDEwMDAxMDA2M0YzMTJDODAxMDBBNThEQTA0M0E4Cis6MTBBRDMwMDAxMzZDMDAwMDAwMDAwMDQwRTdCMTAxMDA0MDgwMDAwM0Y4Cis6MTBBRDQwMDA0NEM5MDEwMEIxOTEwMDRBRjAzMTAxMDBBRjgyMDA4ODhFCis6MTBBRDUwMDAxQ0IwMDAwMEE4OEQ0MjA1NDgzMTAwMDAwMDAwMDA0NEVFCis6MTBBRDYwMDA5MzkzMDEwMDAwMDAxQTVENjk5MzAxMDAzNzAwMDA0MEQxCis6MTBBRDcwMDA0Nzk5MDEwMDExMDA2M0YzODJDQzAxMDBBMThDMjI0MUFDCis6MTBBRDgwMDA5RTA2MDAwMDM1MDAwMDQwNDM5OTAxMDA1ODAwM0Q0M0Y1Cis6MTBBRDkwMDBFN0UxMDEwMDAwMDAwMEY4MzZCMDAxMDBBQjhDMDBGMEU0Cis6MTBBREEwMDAwMEIwMDAwMDVFMDEyRDA1NDhCMTAxMDBCMzhENjVGMkQxCis6MTBBREIwMDAxMjMwMDAwMDAwOTkzRjQyMTNGMDAxMDBCODhEMjI0Nzg1Cis6MTBBREMwMDBFNzdEMDAwMEY1ODI3NTg4MUNCMDAwMDBCMjhEMDA0MDYwCis6MTBBREQwMDA4MUIyMDAwMDAwMDAwMDQ3RTc5MTAxMDAwMDAwNzU0MkM5Cis6MTBBREUwMDAxOTkwMDEwMDc1MDAwMDQwNjE5OTAxMDBCQThEQThCMTY5Cis6MTBBREYwMDAwQzMwMDAwMDM2OTQwMDEwOTQzMDAxMDBBRjgyMDA4OEJGCis6MTBBRTAwMDAxQ0IwMDAwMDVFMDEyRTA1NDhCMTAxMDBDMEE4M0Q0NkZGCis6MTBBRTEwMDAwREUwMDEwMDAwMDAwMDQwOTdCMDAxMDBDNDhEMjI0MDA5Cis6MTBBRTIwMDBFMTZEMDAwMDA0MDAwMjQxOTc0MDAwMDBDMThEMDA1MDE4Cis6MTBBRTMwMDA0M0MxMDAwMEQwOEQyMjRCODAzMjAwMDAwMDAwNjI0QkU1Cis6MTBBRTQwMDAxMjk0MDEwMDA5MDAwMDA3OTZFNDAxMDAwMDAwMDBBNzI5Cis6MTBBRTUwMDA5N0MwMDEwMDMwMDAwMDEwOTRDODAxMDAwMDgwMDA0QTMzCis6MTBBRTYwMDA0NDk5MDEwMDAwMDAwMDQyRjFCMTAxMDA1RTAxMDA0Qjc1Cis6MTBBRTcwMDBGMEM5MDEwMDVFMDEwMDA1RTBDOTAxMDAwMDAwMDA0NEM2Cis6MTBBRTgwMDA2MUIxMDEwMDIwMDAwMDRBNjJERDAxMDBDRThEQTg0MEMyCis6MTBBRTkwMDA4MTMyMDAwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MDExCis6MTBBRUEwMDBGMUIxMDEwMDA0MDAwMDA5OTZFNDAxMDAwMDAwNjhBODY3Cis6MTBBRUIwMDA5N0MwMDEwMEQ0MDAwMDA1RTBDOTAxMDAwMDAwMDA0NDczCis6MTBBRUMwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDBENjhEQTg0MDAwCis6MTBBRUQwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDk5M0Y0MjIwCis6MTBBRUUwMDAxM0YwMDEwMERBOEQ2NTQwODEzMjAwMDAzRjAwMDBGMzZECis6MTBBRUYwMDA5Njg4MDEwMDAwMDAwMDQwRTdCMTAxMDAwMDAwNzU1NTkwCis6MTBBRjAwMDA2MUIxMDEwMDAwMDAwMDA2NjJCMTAxMDBERThEQTg0MEMxCis6MTBBRjEwMDA4MTMyMDAwMEUzOEQyMjRCODAzMjAwMDAwMDAwMDA0QkE0Cis6MTBBRjIwMDA2MkIxMDEwMEUxOERBODQwODEzMjAwMDAwMDAwMDA5NzZECis6MTBBRjMwMDAxM0IwMDEwMDAwMDAwMDk2OTdCMDAxMDBFOThEMjAwOUQwCis6MTBBRjQwMDA5NjZDMDAwMEU5OEQxRjA5OTYyNDAwMDBGNTgyMDA4OEE4Cis6MTBBRjUwMDAxQ0IwMDAwMEU0OEQwMDQwODFCMjAwMDA5QTk0MDA1N0JDCis6MTBBRjYwMDA4MTMwMDEwMEQ1OEEwMDA1NDhCMTAwMDAyRTAwMDA0MDY0Cis6MTBBRjcwMDA0Mzk5MDEwMEVGOEQyMkYzODAzMjAwMDA5QTk0MDA0MjQxCis6MTBBRjgwMDA4MTMwMDEwMDFBODcwMDQwODFCMjAwMDAwQjk1MDA1MjA5Cis6MTBBRjkwMDA4MTMwMDEwMEQ1OEEwMDQyMTk4MDAwMDA5QTk0MDAzQTVECis6MTBBRkEwMDA4MTMwMDEwMDBCOTUwMDUyODEzMDAxMDBENThBMDA0MEFDCis6MTBBRkIwMDA4MUIyMDAwMDAwMDAwMDQwMDVCMDAxMDBBRDkzMDA0MEU4Cis6MTBBRkMwMDA5NTMwMDEwMEQ1OEEyMjQwOTU2QzAwMDBGQThEQTI0MDkwCis6MTBBRkQwMDAxRjdDMDAwMEIwOTIwMDQwODEzMjAxMDAxQTg3MDA0MEJGCis6MTBBRkUwMDA4MUIyMDAwMDA0ODAwMDAzNDJDOTAxMDAwMDAwMDBGMkE5Cis6MTBBRkYwMDAwMkIwMDEwMDU4OTMwMDUyOTUzMDAxMDA1RjkzMDA0QjVFCis6MTBCMDAwMDAwMkIwMDAwMDFBODcwMDQwODFCMjAwMDA5NDk1MDA0MDExCis6MTBCMDEwMDA5NTMwMDEwMDA2OEVBMjA4ODAzMjAwMDAwNjhFQTIxNjJFCis6MTBCMDIwMDA4MDMyMDAwMDFBODcyMjQyMTk3QzAwMDAwMDAwMDA0Qjg5Cis6MTBCMDMwMDAxOTkwMDEwMDlBOTQwMDNBODEzMDAxMDAxQTg3MDA0MDZCCis6MTBCMDQwMDA4MUIyMDAwMDAwMjMwMEE2MTZCMDAxMDAwOThFODMxRTA1Cis6MTBCMDUwMDA4MDMyMDAwMDAwMDgwMDBCMTZEQzAxMDAwMDAwMDAwMDM4Cis6MTBCMDYwMDAyQUMwMDEwMEUzOTQwMDA4ODAzMDAxMDAwRDhFMDA1RUNDCis6MTBCMDcwMDAxNzkwMDAwMDA0OTUwMDQzNjEzMTAxMDBCRDkxMDA0MDJDCis6MTBCMDgwMDA4RDMwMDEwMEVCOTQwMDA3MTYxNDAxMDAwMDgwMDAxMEMxCis6MTBCMDkwMDA0MkM5MDEwMDE1OEUyMjQwRTM2RDAwMDAwMDAwMDA0MzBDCis6MTBCMEEwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAxMjhFQTg0MDc1Cis6MTBCMEIwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDA4Qzk0MDA1RURBCis6MTBCMEMwMDAwNTEwMDEwMEIwOTIwMDQwODEzMjAxMDAxOThFMjIwOTYyCis6MTBCMEQwMDA4MDMwMDAwMDBCOTUwMDQwMTMzMDAxMDBEQThBMDAwNTMzCis6MTBCMEUwMDA0OEIxMDAwMEREOTMwMDQwODEzMjAxMDBENThBMDA0MDY0Cis6MTBCMEYwMDA4MUIyMDAwMDAwMDAwMDRBMUY5MDAxMDAyMDhFMjI0MzEwCis6MTBCMTAwMDAzRDdDMDAwMDAwMDAwMDQ0MTk5MDAxMDAwMDAwMDA0MzU1Cis6MTBCMTEwMDAzRDgwMDEwMDIxOEUwMDQyMTk5MDAwMDAxNDAwMkQ0NTUxCis6MTBCMTIwMDAxRjkwMDEwMDdEOEU4MzFFODAzMjAwMDA3RDhFMDA0NEMyCis6MTBCMTMwMDAxOTkwMDAwMEEyOTIwMDQwODEzMjAxMDAzNThFQTIwOEQxCis6MTBCMTQwMDA4MDMyMDAwMDM1OEVBMjE2ODAzMjAwMDAzMThFQTI0MjdECis6MTBCMTUwMDAxOTdDMDAwMDAwODIwMDAyMDREQzAxMDBBMDk4MDA0MDdECis6MTBCMTYwMDA0Nzk5MDEwMDMwMDUwMDQxODkzMDAxMDAyRThFQTI0MTJGCis6MTBCMTcwMDAxOTdDMDAwMEIwOTIwMDQwODEzMjAxMDAxQTg3MDA0MDIzCis6MTBCMTgwMDA4MUIyMDAwMDU4OTMwMDE1OTQzMDAxMDA1RjkzMDA0QjhBCis6MTBCMTkwMDAwMkIwMDAwMDFBODcwMDQwODFCMjAwMDBERDkzMDA0MDM5Cis6MTBCMUEwMDA4MTMyMDEwMDAwMDAwMDRCMTk5MDAxMDA5QTk0MDAzQThFCis6MTBCMUIwMDA4MTMwMDEwMDFBODcwMDQwODFCMjAwMDAzODhFMjI0MjlGCis6MTBCMUMwMDAxOTdDMDAwMEREOTMwMDQwODEzMjAxMDAzOThFMDA0MDdGCis6MTBCMUQwMDA4MUIyMDAwMEFEOTMwMDQwODEzMjAxMDA2NThFMjI0MUIyCis6MTBCMUUwMDAxOTdDMDAwMEMwMDAwMDE1OThDODAxMDA2NThFQTAwQkY2Cis6MTBCMUYwMDA5OTZDMDAwMDMwMDAwMDEwODBDODAxMDAwMDgwMDA0MDAxCis6MTBCMjAwMDA0NDk5MDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwMzZBCis6MTBCMjEwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDA0MEY3Cis6MTBCMjIwMDA2MkIxMDEwMDQxOEVBODAwRTAzMTAwMDBBRjgyMDA4OEM5Cis6MTBCMjMwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDBDMDAwMDAxNTZFCis6MTBCMjQwMDA5OEM4MDEwMDMwMDAyRTBCOTlEMDAxMDAwMDAwNkE1MDEwCis6MTBCMjUwMDA5OUMwMDEwMEMwMDA2MjAxODBDQzAxMDAwQzgwMDAwMzk1Cis6MTBCMjYwMDA0MkM5MDEwMDJEMDAyREYwMjJCMDAxMDAwMDAwMDA0QzY5Cis6MTBCMjcwMDA4MEMwMDEwMDAwMDAwMDVDMjM4MDAxMDBENDAwM0Y0MTM5Cis6MTBCMjgwMDBFN0UxMDEwMDBCMDAwMDExRTRGNTAxMDAyRjAwMjA0NzY5Cis6MTBCMjkwMDBFN0I1MDEwMDUyOEUyMzBCODE2QzAwMDAwMDAwMDA0RkM3Cis6MTBCMkEwMDBFNTkxMDEwMDAwMDAwMDA4ODBCMDAxMDAwMDAwMDAwQkUzCis6MTBCMkIwMDAwM0IwMDEwMDAwMDAwMDE1MDJEMDAxMDBFMzk0MDAwMDdCCis6MTBCMkMwMDAyQTQwMDEwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMDZECis6MTBCMkQwMDA2MkREMDEwMDU3OEVBODQwODEzMjAwMDBBRjgyMDA4OEY1Cis6MTBCMkUwMDAxQ0IwMDAwMEIwOTIwMDA1NDgzMTAxMDBDMDAwMDAwMTEwCis6MTBCMkYwMDA4MENFMDEwMDYzOEUyNjExMDAzMDAwMDAxMDAwMDAwMDk3Cis6MTBCMzAwMDAyQUM4MDEwMDAwMDAwMDA4ODBCMDAxMDAwMDAwMDAwMTEwCis6MTBCMzEwMDA4MEMwMDEwMEMwMDAwMDQwOTk5ODAxMDAwMDAwMDAwMUI5Cis6MTBCMzIwMDA5OEQwMDEwMEUzOTQwMDRDMDIzMDAxMDBDMDAwMDA0MEJFCis6MTBCMzMwMDAwMzk4MDEwMDZBOEUwMDQwODFCMjAwMDAzMDAwMkYwODlGCis6MTBCMzQwMDA4MEIwMDEwMEMwMDAwMDE1RjRDOTAxMDBDMDAwMDAwMTc4Cis6MTBCMzUwMDBFNENEMDEwMEMwMDAwMDQwMDM5ODAxMDBFMzk0MDAwMDI4Cis6MTBCMzYwMDAyQTQwMDEwMDZGOEUyMjQ0MUY3QzAwMDBBQzAwMkY0MDU5Cis6MTBCMzcwMDAxM0IwMDEwMDAwMDAwMDAxRTBDMTAxMDBCMDAwMDA0MDc2Cis6MTBCMzgwMDA0Nzk5MDEwMDcwOEUwMDAxRTBEMTAwMDBCRDkxMDA0MDlFCis6MTBCMzkwMDA4RDMwMDEwMDgwNjMwMEE2MTZCMDAxMDBFQjk0MDAwNzE5Cis6MTBCM0EwMDAxNjE0MDEwMDAwODAwMDEwNDJDOTAxMDA3ODhFMjI0MDZFCis6MTBCM0IwMDBFMzZEMDAwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMDk3Cis6MTBCM0MwMDA2MkREMDEwMDc1OEVBODQwODEzMjAwMDBBRjgyMDA4OEU2Cis6MTBCM0QwMDAxQ0IwMDAwMDhDOTQwMDVFMDUxMDAxMDA3QjhFMjIwOUQ5Cis6MTBCM0UwMDA4MDMwMDAwMDBCOTUwMDQwODEzMjAxMDBENThBMDAwNUI1Cis6MTBCM0YwMDA0OEIxMDAwMDdEOEUwMDRBMUY5MDAwMDAwMDAwMDAwMDUwCis6MTBCNDAwMDAxMEIwMDEwMDI0MDAyRDE1MTBDMDAxMDAyODAwMkRGMEZGCis6MTBCNDEwMDAxNkIwMDEwMDIyMDAyREYwMjZCMDAxMDAxNDAwMkZGMjFBCis6MTBCNDIwMDAwQ0IwMDEwMDAwMDAwMDAxRTBEMTAxMDAwMDAwMDAxMDlDCis6MTBCNDMwMDAzMkIwMDEwMDAwMDAwMDBCMUJCMDAxMDAwNDAwMUYxNTFBCis6MTBCNDQwMDAxQTUwMDAwMDAwMDAwMDQwMjNCMDAxMDAwMDAwMDAwMTdECis6MTBCNDUwMDAyQUIwMDEwMDRCOTQwMDQwMzVCMDAwMDAyRjAwMjA0MDdFCis6MTBCNDYwMDBFN0IxMDEwMEMxOEVBMjQ1MUY3QzAwMDAyNDAwMjAwQjIzCis6MTBCNDcwMDBFMEIxMDEwMDI4MDAyMDEzRTBCMTAxMDAyMjAwMjAwNjA1Cis6MTBCNDgwMDBFNEIxMDEwMDk3OEUyMjVDMUY3QzAwMDAwMDAwMDA1QzhDCis6MTBCNDkwMDAxRjgwMDEwMDMwODAwMDEwNDJDOTAxMDA5NzhFMjI0MEI5Cis6MTBCNEEwMDBFMzZEMDAwMDAwMDAwMDQ3NjFCMTAxMDA0MDAwMDAxMEEyCis6MTBCNEIwMDA2MkREMDEwMDkzOEVBODQwODEzMjAwMDBBRjgyMDA4OEQ3Cis6MTBCNEMwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwMDgwMDAxOTE4Cis6MTBCNEQwMDA0MkM5MDEwMEJBOEUyMjQwRTM2RDAwMDBBODhFMjI0MkNDCis6MTBCNEUwMDAxOTdDMDAwMDA1OTQwMDQwODEzMjAxMDA1NzkyMDA0MDExCis6MTBCNEYwMDA4MTMyMDEwMEI1OEUyMjRCODAzMjAwMDAwMDAwMDA0M0YzCis6MTBCNTAwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA5RThFQTg0MDg0Cis6MTBCNTEwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDBBNDhFMjI0MTVFCis6MTBCNTIwMDAxOTdDMDAwMEM2OTIwMDQwMTEzMDAxMDBBNThFMDAwNTc0Cis6MTBCNTMwMDA0OEIxMDAwMEIwOTIwMDQwODEzMjAxMDBBNzhFMjIwOTdDCis6MTBCNTQwMDA4MDMwMDAwMDBCOTUwMDQwODEzMjAxMDBGOTgyMDA0MEZDCis6MTBCNTUwMDAwNUIwMDAwMDA1OTQwMDQwODEzMjAxMDA1MzkyMDA0MDg0Cis6MTBCNTYwMDA4MTMyMDEwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMDgxCis6MTBCNTcwMDA2MkREMDEwMEFCOEVBODQwODEzMjAwMDBBRjgyMDA4OEZFCis6MTBCNTgwMDAxQ0IwMDAwMEIxOEUyMjQxMTk3QzAwMDBDNjkyMDA0MDIwCis6MTBCNTkwMDAxMTMwMDEwMEIyOEUwMDA1NDhCMTAwMDBCMDkyMDA0MEE5Cis6MTBCNUEwMDA4MTMyMDEwMEI0OEUyMjA5ODAzMDAwMDAwQjk1MDA0MEVBCis6MTBCNUIwMDA4MTMyMDEwMEY5ODIwMDQwMDVCMDAwMDAwMDAwMDA0MzI0Cis6MTBCNUMwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBCNjhFQTg0MEFDCis6MTBCNUQwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNTJFCis6MTBCNUUwMDA0OEIxMDEwMEJEOEUyMjQxMTk3QzAwMDBDNjkyMDA0MDg2Cis6MTBCNUYwMDAxMTMwMDEwMEJFOEUwMDA1NDhCMTAwMDBCMDkyMDA0MDNECis6MTBCNjAwMDA4MTMyMDEwMEMwOEUyMjA5ODAzMDAwMDAwQjk1MDA0MDdECis6MTBCNjEwMDAxMzMwMDEwMERBOEEwMDQwMDVCMDAwMDAwMDgwMDAxOUY0Cis6MTBCNjIwMDA0MkM5MDEwMEM4OEUyMjQwRTM2RDAwMDAwMDAwMDA0M0MzCis6MTBCNjMwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBDNDhFQTg0MDJECis6MTBCNjQwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNUJECis6MTBCNjUwMDA0OEIxMDEwMDAwMDAwMDQwMDVCMDAxMDBDQzhFMjI0MTNECis6MTBCNjYwMDAxOTdDMDAwMEM2OTIwMDQwMTEzMDAxMDBDRDhFMDAwNTBCCis6MTBCNjcwMDA0OEIxMDAwMEIwOTIwMDQwODEzMjAxMDAwODAwMkQwQTVDCis6MTBCNjgwMDA4NEIwMDEwMDAwMDAwMEYwODJCMDAxMDAxNDAwMjA0MEVFCis6MTBCNjkwMDBFMUIxMDEwMEQyOEUwMzFFODAzMjAwMDBEMzhFMDA0MTQyCis6MTBCNkEwMDA4N0IwMDAwMDIxMDAwMDQwODc5ODAxMDBDRTkzMDA0MDQxCis6MTBCNkIwMDA4MTMyMDEwMDAwMDAwMDVDMUY5MDAxMDBENzhFMjIwOTNBCis6MTBCNkMwMDA4MDMwMDAwMDBCOTUwMDQwMTMzMDAxMDBEQThFMjI0NEQ4Cis6MTBCNkQwMDAxOTdDMDAwMDBCOTUwMDRGODEzMDAxMDAwMDAwMDA0NEYwCis6MTBCNkUwMDAxOTgwMDEwMEQ1OEFBMjRBMUY3QzAwMDBEQThBMDA0MDM2Cis6MTBCNkYwMDA4MUIyMDAwMEJBMDAyMDQwRTVCMTAxMDBFMDhFOUMxNzQ1Cis6MTBCNzAwMDA4MDMyMDAwMENDMDAwMDQwNDM5OTAxMDA5RDk1MDA0MDJDCis6MTBCNzEwMDA4MTMyMDEwMDQ0OTUwMDQwMTMzMDAxMDBDMDAwMDA0MDE4Cis6MTBCNzIwMDA0Mzk5MDEwMEM0MDAyREYwODJCMDAxMDA3ODk1MDBGMDJCCis6MTBCNzMwMDA4NDMwMDEwMEIwOTIwMDQwODEzMjAxMDBEQThBMjIwOThGCis6MTBCNzQwMDA4MDMwMDAwMDBCOTUwMDQwMTMzMDAxMDBEQThBMDA0MDgxCis6MTBCNzUwMDA4MUIyMDAwMDJFMDAwMDQwNDM5OTAxMDBFQzhFMjI0MDhGCis6MTBCNzYwMDBFNzZEMDAwMDMyMDAwMDQwNDM5OTAxMDBGNDhFQTI0MEQyCis6MTBCNzcwMDBFNTZEMDAwMDlBOTMwMDQwODEzMjAxMDAyNDAwMjAwQjA3Cis6MTBCNzgwMDBFMEIxMDEwMDI4MDAyMDEzRTBCMTAxMDAyMjAwMjAwNkYyCis6MTBCNzkwMDBFNEIxMDEwMDE0MDAyMDBBRTBCMTAxMDBEQThBMjIwOUI0Cis6MTBCN0EwMDA4MDMwMDAwMDBCOTUwMDQwMTMzMDAxMDBEQThBMDA0MDIxCis6MTBCN0IwMDA4MUIyMDAwMDlBOTMwMDQwODEzMjAxMDA1MzkzMDA0MDBGCis6MTBCN0MwMDA4MTMyMDEwMDAyOEYyMjQxMTk3QzAwMDAwMDAwMDAwQjMxCis6MTBCN0QwMDA5OUIwMDEwMDA0MDAxRjE1OTg1MDAwMDAwMjhGMjAwMTRECis6MTBCN0UwMDA5ODZDMDAwMDcwMDAwMDAzNDhDOTAxMDAwMDAwMkU0NjVDCis6MTBCN0YwMDAxRjkwMDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwM0EzCis6MTBCODAwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDBBMDAwMDBBNEZECis6MTBCODEwMDA2MkREMDEwMEZGOEVBODAwRTAzMTAwMDAwMDAwMDAwNTlECis6MTBCODIwMDA0OEIxMDEwMEFDMDAyRjAwMTBCMDAxMDAwMDAwMDAwMTgxCis6MTBCODMwMDBFMEMxMDEwMDE0MDAyRjE1MTBDMDAxMDAwMDAwMDAwQTMzCis6MTBCODQwMDA4MEIwMDEwMDAwMDA2MDAxODBEMDAxMDAwMDAwMDA0N0NFCis6MTBCODUwMDAxOTkwMDEwMDg0OEUyMjA5ODAzMjAwMDAwQjk1MDAwOUE2Cis6MTBCODYwMDA4MDMwMDEwMDg0OEUwMDQwMTNCMDAwMDAwMDgwMDAwMzhGCis6MTBCODcwMDA0MkM5MDEwMDAwMDAwMEYwODJCMDAxMDAxMzAwMDA0MDQ2Cis6MTBCODgwMDA4Nzk4MDEwMDAwMDAwMDRDNDNDMTAxMDBDRTkzMDBGMEY2Cis6MTBCODkwMDA4NDMwMDEwMEQ1OEEwMDVDMUY5MDAwMDAyQzAwMjA0MEZECis6MTBCOEEwMDBFN0IxMDEwMDJEMDAyMDQwRTdCMTAxMDBENThBMDA0MjM4Cis6MTBCOEIwMDAxOTgwMDAwMEMwOTMwMDQwODEzMjAxMDBFMDk0MDA0OEVDCis6MTBCOEMwMDA5NTMwMDEwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDBBCis6MTBCOEQwMDA2MkREMDEwMDE3OEZBODQwMTMzMDAwMDBBRjgyMDA4ODlFCis6MTBCOEUwMDAxQ0IwMDAwMDFEOEYwMDA1NDhCMTAwMDAxQzhGMDA0MEY3Cis6MTBCOEYwMDAxM0IwMDAwMDAwMDAwMDAwMTJCMDAxMDAwODAwMDA0MDdBCis6MTBCOTAwMDA0Mzk5MDEwMDE0MDAyREYwODJCMDAxMDAwNDAwMjJGMEUwCis6MTBCOTEwMDA4NDMwMDAwMDEzMDAwMDQwODc5ODAxMDBDRTkzMDA0MDVGCis6MTBCOTIwMDA4MTMyMDEwMDAwMDAwMDVDMUY5MDAxMDAzNThGMDAwOThBCis6MTBCOTMwMDAwMEIwMDAwMEQ1OEE4NzQyMTkxMDAwMDA4QjAwMkY0NzA1Cis6MTBCOTQwMDAxOTgwMDEwMEQ1OEEwMDQwRTc5MTAwMDAyRjAwMDA0MEQ3Cis6MTBCOTUwMDA0Nzk5MDEwMDMzOEYyMjQ3RTc3RDAwMDAzNDkyMDA0MDcxCis6MTBCOTYwMDBFNzMxMDEwMDMzOEYyMjAwODAzMjAwMDAyRThGQTI0MDg5Cis6MTBCOTcwMDAxRjdDMDAwMEIwOTIwMDQwODEzMjAxMDAzMzhGMDA0MEY0Cis6MTBCOTgwMDA4MUIyMDAwMDMwMDAwMDQwNDM5OTAxMDAzMjAwMkRGMkU2Cis6MTBCOTkwMDA5NEIwMDEwMDU4OTMwMEYyMDIzMDAxMDA1RjkzMDA0QjE1Cis6MTBCOUEwMDAwMkIwMDAwMDAwMDAwMDA1NDhCMTAxMDAzNDhGMDA0MEUzCis6MTBCOUIwMDAwMUIwMDAwMDAwMDAwMDQwMDVCMDAxMDAzQThGMjIwMEY1Cis6MTBCOUMwMDA4MDMyMDAwMDM5OEZBMjQyMTk3QzAwMDBBRDkzMDA0MDA0Cis6MTBCOUQwMDA4MTMyMDEwMDNBOEYwMDQwODFCMjAwMDBERDkzMDA0MEM3Cis6MTBCOUUwMDA4MTMyMDEwMEM2OEYyMjVDMUY3QzAwMDAwMDAwMDA1Q0Q5Cis6MTBCOUYwMDAxRjgwMDEwMDAwODAwMDEwNDJDOTAxMDA0MjhGMjI0MEQ4Cis6MTBCQTAwMDBFMzZEMDAwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDNFCis6MTBCQTEwMDA2MkREMDEwMDNGOEZBODQwODEzMjAwMDBBRjgyMDA4OEM0Cis6MTBCQTIwMDAxQ0IwMDAwMEM2OEYwMDA1NDhCMTAwMDBBMjkyMDA0MDgzCis6MTBCQTMwMDA4MTMyMDEwMDQ5OEZBMjA4ODAzMjAwMDA0OThGQTIxNjhFCis6MTBCQTQwMDA4MDMyMDAwMDlBOTQwMDREODEzMDAxMDAwMDgyMDAwMjkzCis6MTBCQTUwMDAwNERDMDEwMDFBODcwMDQwODFCMjAwMDA3NDAwMDA0MDNECis6MTBCQTYwMDA0Mzk5MDEwMDAwMDAwMEY4ODJCMDAxMDAwMDAwMDBGMERFCis6MTBCQTcwMDA4NEIwMDEwMDAwMDAwMDQxOTZCMDAxMDA1NzhGMjI0MkJGCis6MTBCQTgwMDA5NjE0MDAwMDAwODAwMDEwNDRDOTAxMDA2NDAwNjg0MDYyCis6MTBCQTkwMDA5Nzk4MDEwMDAwMDAwMDQxRjBCMTAxMDAwMDAwMDA0MjUxCis6MTBCQUEwMDBGMEIxMDEwMDcwMDAwMDA1RTBDOTAxMDAwMDAwMDA0NTkwCis6MTBCQUIwMDA2MUIxMDEwMDIwMDAwMDEwNjJERDAxMDA1NDhGQTg0MDM4Cis6MTBCQUMwMDA4MTMyMDAwMDAwMDAwMDVDMUY5MDAxMDAwMDAwMDA0NTcyCis6MTBCQUQwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA1ODhGQTg1Q0Q4Cis6MTBCQUUwMDAxRjAwMDAwMEFGODIwMDg4MUNCMDAwMDA1RTAxMkQwNTIxCis6MTBCQUYwMDA0OEIxMDEwMDVDOEY2NUYyMTIzMDAwMDAwMDk5M0Y0MkFFCis6MTBCQjAwMDAxM0YwMDEwMDYxOEYyMjQ3RTc3RDAwMDBGNTgyNzU4ODAwCis6MTBCQjEwMDAxQ0IwMDAwMDVCOEYwMDQwODFCMjAwMDAwMDAwMDA0N0I1Cis6MTBCQjIwMDBFNzkxMDEwMDA0MDA3NTA5OTZFNDAxMDAwMDgwMDAxMDBGCis6MTBCQjMwMDA0NEM5MDEwMDAwMDAwMDQ0RjFCMTAxMDAwMDAwNjhBODAwCis6MTBCQjQwMDA5N0MwMDEwMDAwMDAwMDAzRTBCMTAxMDAwMDgwMDAwMzg1Cis6MTBCQjUwMDA0NDk5MDEwMDAwMDAwMDQ0NjFCMTAxMDAwMDAwMDAxMEEwCis6MTBCQjYwMDA2MkIxMDEwMDY5OEZBODQwRTEzMTAwMDBBRjgyMDA4ODE2Cis6MTBCQjcwMDAxQ0IwMDAwMDAwOTkzRjQyMTNGMDAxMDA2RDhGNjUwNTc1Cis6MTBCQjgwMDA0ODMxMDAwMDNGMDAwMEYzOTY4ODAxMDAwMDAwMDA0MEFCCis6MTBCQjkwMDBFN0IxMDEwMDAwMDA3NTQwODFCMjAxMDA3NThGMjI0QkIyCis6MTBCQkEwMDA4MDMyMDAwMDAwMDAwMDU1NjFCMTAxMDAwMDAwMDA0QjMwCis6MTBCQkIwMDA2MkIxMDEwMDczOEZBODQwODEzMjAwMDAwMDAwMDAwN0NECis6MTBCQkMwMDAxNkIwMDEwMDAwNjIwMDBCMTZEQzAxMDAzNDkyMDA0MDQ4Cis6MTBCQkQwMDA4MTMyMDEwMDhEOEYyMjAwODAzMjAwMDBFMzkzMDA1RkVDCis6MTBCQkUwMDAwMTEwMDEwMDc3OEYyMjQwOTU2QzAwMDAwMDgwMDAxMDRBCis6MTBCQkYwMDA0NEM5MDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwMzQxCis6MTBCQzAwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDAxMDJECis6MTBCQzEwMDA2MkIxMDEwMDdGOEZBODAwRTAzMTAwMDBBRjgyMDA4ODkwCis6MTBCQzIwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwNDgwMDAwM0MyCis6MTBCQzMwMDA0MkM5MDEwMDAwMDAwMEYyMDJCMDAxMDA1ODkzMDA1MjE2Cis6MTBCQzQwMDA5NTMwMDEwMEIwOTIwMDQwODEzMjAxMDA3NzhGMjI0MThGCis6MTBCQzUwMDA5NzUwMDAwMDBDODAwMDAzNDJDOTAxMDAwMDAwMDBGMDcyCis6MTBCQzYwMDAwMEIwMDEwMDAwMDAwMDVDMDE4MDAxMDA1RjkzMDA0QjA4Cis6MTBCQzcwMDAwMkIwMDAwMDc3OEYwMDA1NDhCMTAwMDBFQjk0MDA0MDRGCis6MTBCQzgwMDAwMzMwMDEwMDE3ODAwMDAzNDRDOTAxMDAwMEYwMDAwQ0RDCis6MTBCQzkwMDA5Njg4MDEwMDAwMDA2MzRDOTdGMDAxMDAxMDgwMDAwM0JCCis6MTBCQ0EwMDA0NEM5MDEwMDAwMDAwMEFCRTFCMTAxMDA4Qzk0MDA1RUNBCis6MTBCQ0IwMDAwNTEwMDEwMDAzMDAwMDA3MUFGNDAxMDAwNzAwMDAwNzQ3Cis6MTBCQ0MwMDAxNjg4MDEwMDAwQjUwMDBENDZDOTAxMDA5NzhGMzA0MDZECis6MTBCQ0QwMDA4MTMyMDAwMDAwMDAwMDBCRTY4MTAxMDAwMEI3MDAwRDdBCis6MTBCQ0UwMDA0NkM5MDEwMDAwMDAwMDBCRTY4MTAxMDAxMDAwMTAwRkEyCis6MTBCQ0YwMDA5NEY0MDEwMDkzMDQwMDVGOTUwNDAxMDAzOTkzMDA0MDFGCis6MTBCRDAwMDA4MTMyMDEwMEExOEYyMjUwRkQ3RjAwMDA5RjhGNDY0MEFECis6MTBCRDEwMDA4MTMyMDAwMDAwMDAxRTQxMzFEMzAxMDAwMDAwMkUwNUQ5Cis6MTBCRDIwMDA0OEIxMDEwMDAwMDAwMDQwRTFCMTAxMDAwMDAwMDA0MDA2Cis6MTBCRDMwMDAwRkIwMDEwMDlCOTIwMDQxODEzMDAxMDAxQTg3MDA0MDQyCis6MTBCRDQwMDA4MUIyMDAwMEEyOTIwMDQwODEzMjAxMDBCMzhGQTIwOEFDCis6MTBCRDUwMDA4MDMyMDAwMEIzOEZBMjE2ODAzMjAwMDAwMDgyMDAwMjAxCis6MTBCRDYwMDAwNERDMDEwMDAwMDAwMDQ1MDNGMDAxMDAwMDAwMDAwMUI4Cis6MTBCRDcwMDAwMEMwMDEwMEFDOEYzNzVDNjEzMTAwMDAwMDAwMDAxQjg3Cis6MTBCRDgwMDA2MkIxMDEwMEIwOEYyODQwODEzMjAwMDBBRDhGMDA0MEM5Cis6MTBCRDkwMDA4MUIyMDAwMDAwMDAwMDAwNjJCMTAxMDBCMDhGQTg0MDM1Cis6MTBCREEwMDA4MTMyMDAwMDFBODcxNzQwODFCMjAwMDA3NDAwMjI0MERGCis6MTBCREIwMDBGMUIxMDEwMDAwMDAwMDQwRTFCMTAxMDBFMDk0MDA0QTRGCis6MTBCREMwMDA5NTMwMDEwMEMwOTMwMDVDMUYxMDAxMDA0OThGMDA0MEI2Cis6MTBCREQwMDA4MUIyMDAwMDJGMDAwMDQwNDc5OTAxMDBDNDhGMjI0NzI0Cis6MTBCREUwMDBFNzdEMDAwMDM0OTIwMDQwRTczMTAxMDBDNDhGMjIwMDVCCis6MTBCREYwMDA4MDMyMDAwMEJGOEZBMjQwMUY3QzAwMDBCMDkyMDA0MDQ0Cis6MTBCRTAwMDA4MTMyMDEwMEM0OEYwMDQwODFCMjAwMDAzMDAwMDA0MDQ4Cis6MTBCRTEwMDA0Mzk5MDEwMDMyMDAyREYyOTRCMDAxMDA1ODkzMDBGMkQyCis6MTBCRTIwMDAwMjMwMDEwMDVGOTMwMDRCMDJCMDAwMDAwMDAwMDAwNUVCCis6MTBCRTMwMDA0OEIxMDEwMEUwOTQwMDQ4OTUzMDAxMDBDMDkzMDA1Q0Q3Cis6MTBCRTQwMDAxRjEwMDEwMEM5OEY4NzQyMTkxMDAwMDA4QjAwMkY0Nzc3Cis6MTBCRTUwMDAxOTgwMDEwMDAwMDAwMDQwRTc5MTAxMDAwQjk1MDA0MkFECis6MTBCRTYwMDA4MTMwMDEwMEQ1OEEwMDQwODFCMjAwMDBDMDkzMDA0MEJCCis6MTBCRTcwMDA4MTMyMDEwMEQ1OEEwMDVDMUY5MDAwMDBCQTAwMjA0MDhBCis6MTBCRTgwMDBFNUIxMDEwMDQ0OTUwMDQwODEzMjAxMDBDMDAwMDA0MDRFCis6MTBCRTkwMDA0Mzk5MDEwMEM0MDAyREYwODJCMDAxMDA3ODk1MDBGMEI0Cis6MTBCRUEwMDA4NDMwMDEwMEIwOTIwMDQwODEzMjAxMDAwQjk1MDA0NUMyCis6MTBCRUIwMDA4MTMwMDEwMEQ1OEEyMjQyMTk3QzAwMDA5QTk0MDAzQTEwCis6MTBCRUMwMDA4MTMwMDEwMEQ1OEEwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTBCRUQwMDA4MUIyMDAwMEEyOTIwMDQwODEzMjAxMDBERThGQTIwOEYwCis6MTBCRUUwMDA4MDMyMDAwMERFOEZBMjE2ODAzMjAwMDA5QTk0MDA0NzU0Cis6MTBCRUYwMDA4MDMwMDEwMDAwODIwMDAyMDREQzAxMDAxQTg3MDA0MDRCCis6MTBCRjAwMDA4MUIyMDAwMDEwODAwMDAzNDRDOTAxMDAwMEUxMDBBNkQ2Cis6MTBCRjEwMDA4NEIwMDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwMDA0MEM5Cis6MTBCRjIwMDBGMUIxMDEwMDAwMDA2MDA3ODQ5NDAxMDA4Qzk0MDA1RTcwCis6MTBCRjMwMDAwNTEwMDEwMEQ1OEEwMDQwODFCMjAwMDA4QTAwMDA0MDRGCis6MTBCRjQwMDA0Nzk5MDEwMEIwOTIwMDQxRTc0MTAxMDBEQThBMDA0MEMwCis6MTBCRjUwMDA4MUIyMDAwMDlBOTMwMDQwODEzMjAxMDA1MzkzMDA0MDY3Cis6MTBCRjYwMDA4MTMyMDEwMDAwMDAwMDAxMkNCMDAxMDAwMDAwMDAxNTJBCis6MTBCRjcwMDAxMEIwMDEwMDAwMDAwMDAwMTBDMDAxMDAwNDAwMUYwQTAyCis6MTBCRjgwMDAyQzUwMDAwMDAwMDAwMDEwMzJCMDAxMDAxRTk1MDAwNjg5Cis6MTBCRjkwMDAwNDMwMDEwMEY2OEZBMjQ4MUY3QzAwMDBGNDhGODQ0ODEzCis6MTBCRkEwMDAxRjEwMDAwMEFDMDAwMDQwNDc5OTAxMDBGNjhGMDAwQTA2Cis6MTBCRkIwMDBFMEMxMDAwMDAwMDAwMDBBMDJCMDAxMDBCRDkxMDAwMUQ0Cis6MTBCRkMwMDA4QzMwMDEwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMDBFCis6MTBCRkQwMDA2MkREMDEwMEY3OEZBODQwODEzMjAwMDBBRjgyMDA4ODQ3Cis6MTBCRkUwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwMDAwMDAwMjg0Cis6MTBCRkYwMDAxMEMwMDEwMDA0OTAyMjAyMTQ1MDAwMDAwODk0MDA0NTczCis6MTBDMDAwMDAxRjAwMDEwMEVFOEYyMjVDMUY3QzAwMDAwMDAwMDA0NzMzCis6MTBDMDEwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAwMDkwQTg1Q0U5Cis6MTBDMDIwMDAxRjAwMDAwMEFGODIwMDg4MUNCMDAwMDBFRThGMDAwNUVBCis6MTBDMDMwMDA0OEIxMDAwMDAwMDAwMDBCMUJCMDAxMDAwODAwMkQ0MEJCCis6MTBDMDQwMDA4NUIwMDEwMDAwMDAwMEYwODJCMDAxMDAwMDAwMDA0MDU3Cis6MTBDMDUwMDAwNUIwMDEwMENFOTMwMDQxODczMDAxMDAwMDAwMDA0NThCCis6MTBDMDYwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAwQTkwQTg0MEFCCis6MTBDMDcwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNTgzCis6MTBDMDgwMDA0OEIxMDEwMDEwOTAyMjA5ODAzMDAwMDAwQjk1MDA0MDVCCis6MTBDMDkwMDAxMzMwMDEwMDE0OTAyMjQ0MTk3QzAwMDAwQjk1MDA0RkNFCis6MTBDMEEwMDA4MTMwMDEwMDE0OTBBMjQ3MUY3QzAwMDAwMDAwMDA0NDcyCis6MTBDMEIwMDAxOTgwMDEwMEZGMDcwMDA4MDA4QzAxMDAyMjkwMjI0QTJECis6MTBDMEMwMDAxRjdDMDAwMDFBOTBBMjE2MDIzMDAwMDBCMDkyMDA0MEJGCis6MTBDMEQwMDA4MTMyMDEwMDJGMDAyMDQwRTdCMTAxMDBENThBMDA0MEU1Cis6MTBDMEUwMDA4MUIyMDAwMDJEMDAyRDA4MkFCMDAxMDAxRTkwMjI0MkNFCis6MTBDMEYwMDAxOTdDMDAwMEREOTMwMDQwODEzMjAxMDAxRjkwMDA0MDU4Cis6MTBDMTAwMDA4MUIyMDAwMEFEOTMwMDQwODEzMjAxMDAzMDAwMkUwMDZBCis6MTBDMTEwMDAyQUQwMDEwMDMyMDAyQTE1RTRCMTAxMDBENThBMDAxNkE4Cis6MTBDMTIwMDBFNEIxMDAwMDM1OTAyMjE2MDIzMDAwMDAwMDAwMDAwODQzCis6MTBDMTMwMDAyQUIwMDEwMDk0OTUwMDQwOTUzMDAxMDAyNzkwQTI0MDVDCis6MTBDMTQwMDAxMTZDMDAwMDM2OTAyMjQwMkQ2QzAwMDBBQzAwMDA0MEM1Cis6MTBDMTUwMDA0Nzk5MDEwMEIwMDAyQjAxRTBDMTAxMDAwMDJCMDBBNkFGCis6MTBDMTYwMDAxNkIwMDEwMDAwMDAwMDAxRTBEMTAxMDBFMzk0MDAwOEQ2Cis6MTBDMTcwMDA4MDMwMDEwMDJFOTAwMDVFMTc5MDAwMDAwNDk1MDA0MzZGCis6MTBDMTgwMDA2MTMxMDEwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMDc2Cis6MTBDMTkwMDA2MkREMDEwMDJGOTBBODQwODEzMjAwMDBBRjgyMDA4ODRDCis6MTBDMUEwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDBFQjk0MDAwNzNFCis6MTBDMUIwMDAxNjE0MDEwMDhDOTQwMDVFMDUxMDAxMDBCMDkyMDA0MDNFCis6MTBDMUMwMDA4MTMyMDEwMDJGMDAyMDQwRTdCMTAxMDBEQThBMDA0MEVGCis6MTBDMUQwMDA4MUIyMDAwMDAwMDAwMDBCMUJCMDAxMDAwNDAwMUYxNTFECis6MTBDMUUwMDAxQTUwMDAwMDQzOTAyMDE2MUE2QzAwMDA3MDAwMDAwM0UzCis6MTBDMUYwMDA0OEM5MDEwMDAwMDAyMjUwRjFCMTAxMDAwMDAwMDAwMzE1Cis6MTBDMjAwMDBGMEIxMDEwMDAwMDAwMDAwRTBCMTAxMDAwMDAwMDA0MkI4Cis6MTBDMjEwMDA2MUIxMDEwMEEwMDAwMEE0NjJERDAxMDA0MDkwQTg0NkM5Cis6MTBDMjIwMDAxRjEwMDAwMDAwMDAwMDA1NDhCMTAxMDAwMDAwMDAwMEUwCis6MTBDMjMwMDAxMEIwMDEwMDAwMDAwMDE1MTBDMDAxMDAwMDAwMDAwQTRECis6MTBDMjQwMDAyQUIwMDEwMDAwMDAwMDBBMkNEMDAxMDBBQzAwMkY0MEYxCis6MTBDMjUwMDAyM0IwMDEwMDRBOTA4NDQ1MUYxMDAwMDA0QjkwMDAwQTUzCis6MTBDMjYwMDBFMEMxMDAwMDAwMDAwMDBBMDJCMDAxMDA0Qjk0MDA0MDUxCis6MTBDMjcwMDAzNUIwMDAwMDAwODAwMDE5NDJDOTAxMDA1MzkwMjI0MEVGCis6MTBDMjgwMDBFMzZEMDAwMDAwMDAwMDQzNjFCMTAxMDA0MDAwMDAxMEI4Cis6MTBDMjkwMDA2MkREMDEwMDRGOTBBODQwODEzMjAwMDBBRjgyMDA4ODJCCis6MTBDMkEwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDA2MzkwQTIwMjJDCis6MTBDMkIwMDAxQTUwMDAwMDY0OTAyMjQwMkQ2QzAwMDAwMDgwMDAxMDk1Cis6MTBDMkMwMDA0NEM5MDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwMzZBCis6MTBDMkQwMDBGMEIxMDEwMEZGMDcwMDA4RTA4RDAxMDAwMDAwMDA0MkZFCis6MTBDMkUwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDA1QTkwQTg0MDQ1Cis6MTBDMkYwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNTAxCis6MTBDMzAwMDA0OEIxMDEwMDJGMDAyMDQ3RTdCNTAxMDAwQzgwMDAwMzcxCis6MTBDMzEwMDA0MkM5MDEwMDEwMDAwMEYwMTBDODAxMDBGMDA3MDA0MDAxCis6MTBDMzIwMDAxQjk4MDEwMDY0OTAwMDVDMTE4MDAwMDAwMDAwMDAwMjc2Cis6MTBDMzMwMDAxMEMwMDEwMEM2OTIwMDQwMUYwMDAxMDAwMDAwMDAwNTZGCis6MTBDMzQwMDA0OEIxMDEwMDY4OTAyMzBEMkM2QzAwMDAwMDAwMDA0MEYzCis6MTBDMzUwMDAxRjkwMDEwMDcxOTAyMjQ2MUY3QzAwMDAwMDAwMDA0NkUzCis6MTBDMzYwMDAxRjgwMDEwMDcwODAwMDAzNDJDOTAxMDA3MTkwMjI0MENCCis6MTBDMzcwMDBFMzZEMDAwMDAwMDAwMDQyNjFCMTAxMDA0MDAwMDAxMEM4Cis6MTBDMzgwMDA2MkREMDEwMDZEOTBBODQwODEzMjAwMDBBRjgyMDA4ODFDCis6MTBDMzkwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwODAwMkQ0MDVECis6MTBDM0EwMDA4NUIwMDEwMDAwMDAwMEYwODJCMDAxMDAwMDAwMDA0MEY0Cis6MTBDM0IwMDAwNUIwMDEwMENFOTMwMDQxODczMDAxMDAwMDAwMDA0NTI4Cis6MTBDM0MwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA3NjkwQTg0MERDCis6MTBDM0QwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNTIwCis6MTBDM0UwMDA0OEIxMDEwMDdDOTAyMjA5ODAzMDAwMDAwQjk1MDA0MDhDCis6MTBDM0YwMDAxMzMwMDEwMDgwOTAyMjQ0MTk3QzAwMDAwQjk1MDA0RkZGCis6MTBDNDAwMDA4MTMwMDEwMDgwOTBBMjQ3MUY3QzAwMDAwMDAwMDA0NEEyCis6MTBDNDEwMDAxOTgwMDEwMEZGMDcwMDA4MDA4QzAxMDA5NTkwMjI0QTU2Cis6MTBDNDIwMDAxRjdDMDAwMDg2OTBBMjE2MDIzMDAwMDBCMDkyMDA0MEVGCis6MTBDNDMwMDA4MTMyMDEwMDJGMDAyMDQwRTdCMTAxMDBENThBMDA0MDgxCis6MTBDNDQwMDA4MUIyMDAwMDJEMDAyRDA4MkFCMDAxMDA5MTkwMjI0MkY3Cis6MTBDNDUwMDAxOTdDMDAwMDhBOTBBMkYzODQzMDAwMDAwMDAwMDBBNTNGCis6MTBDNDYwMDA4NUIwMDEwMDAwMDAwMDQxODVEMDAxMDBENDAwM0U0MUFDCis6MTBDNDcwMDA4NUUwMDEwMDhFOTAyMjQwMUY3QzAwMDAwMDAwMDA1QUUxCis6MTBDNDgwMDAxMTkwMDEwMDBCMDAwMDA4RTRGNTAxMDBERDkzMDA0MDZECis6MTBDNDkwMDA4MTMyMDEwMDkyOTAwMDQwODFCMjAwMDBBRDkzMDA0MEQzCis6MTBDNEEwMDA4MTMyMDEwMDMwMDAyRTAwMkFEMDAxMDAzMjAwMkExNTBFCis6MTBDNEIwMDBFNEIxMDEwMEQ1OEEwMDE2RTRCMTAwMDA5ODkwQTIxNkZDCis6MTBDNEMwMDAwMjMwMDAwMEIwOTIwMDQwODEzMjAxMDBFNzkwMDA0MDRECis6MTBDNEQwMDA4MUIyMDAwMDJEMDAyRDA4MkFCMDAxMDBBNjkwMjI0NzRECis6MTBDNEUwMDAxRjdDMDAwMEEyOTAyMjQyMTk3QzAwMDA5RDkwQTJGM0M0Cis6MTBDNEYwMDA4NDMwMDAwMDAwMDAwMEE1ODVCMDAxMDAwMDAwMDA0MTZDCis6MTBDNTAwMDA4NUQwMDEwMEQ0MDAzRTQxODVFMDAxMDBBMTkwMjI0MDg5Cis6MTBDNTEwMDAxRjdDMDAwMDAwMDAwMDVBMTE5MDAxMDAwQjAwMDAwODcxCis6MTBDNTIwMDBFNEY1MDEwMDU4MDEyRDAwMkFEMDAxMDA2MDAxMkRGMDMyCis6MTBDNTMwMDAxMEIwMDEwMDAwMDAwMEYwMkNCMDAxMDAzNThFMDA0MDZBCis6MTBDNTQwMDA4MUIyMDAwMDk0OTUwMDQxOTUzMDAxMDBBRTkwQTIwOEEwCis6MTBDNTUwMDA4MDMyMDAwMEFFOTBBMjE2ODAzMjAwMDAwMDAwMDA0MTQwCis6MTBDNTYwMDA5N0IwMDEwMEFDOTAyMzBEMDI2QzAwMDAwMDAwMDA0MTY4Cis6MTBDNTcwMDA5N0MwMDEwMDVGOTMwMDRCMDJCMDAwMDBFNzkwMDAwNUY4Cis6MTBDNTgwMDA0OEIxMDAwMEFDMDAyRjAxMTRCMDAxMDBCMDAwMkIwMTM1Cis6MTBDNTkwMDBFMEMxMDEwMDAwMkIwMEE2MTZCMDAxMDAwMDAwMDAwMTYwCis6MTBDNUEwMDBFMEQxMDEwMEJFOTAyMzBEMDI2QzAwMDAwMDgwMDAxMDVECis6MTBDNUIwMDA0NEM5MDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDAwMzc3Cis6MTBDNUMwMDBGMEIxMDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDAxMDY0Cis6MTBDNUQwMDA2MkIxMDEwMEI3OTBBODAwRTAzMTAwMDBBRjgyMDA4ODhFCis6MTBDNUUwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwQzgwMDAwM0YxCis6MTBDNUYwMDA0MkM5MDEwMDEwMDAwMEYwMjJDODAxMDAwMDAwMDA1Q0U4Cis6MTBDNjAwMDAyMzgwMDEwMDAwMDAwMDAxODRCMDAxMDBDMTkwMjMwRENGCis6MTBDNjEwMDAwMjZDMDAwMDAwMDAwMDBEMDJCMDAxMDAwMDAwMDAwOEU0Cis6MTBDNjIwMDA4MEIwMDEwMEM2OTAyMjQwMUI2QzAwMDBFMzk0MDAwMTIyCis6MTBDNjMwMDA4NDUwMDEwMENFOTAyMjQwODU2QzAwMDAwMDAwMDAwMTczCis6MTBDNjQwMDA4MEMwMDEwMDEwODAwMDEwNDZDOTAxMDAwMDAwMDA0RkFBCis6MTBDNjUwMDA0MzgxMDEwMDAwMDAwMDQyRjBCMTAxMDAyMDAwMDA0MEQxCis6MTBDNjYwMDBGMEM5MDEwMDAwMDAwMDE2RjBCMTAxMDAwMDAwMDA0MzE1Cis6MTBDNjcwMDA2MUIxMDEwMEEwMDAwMEExNjJERDAxMDBDQzkwQTgxMTExCis6MTBDNjgwMDBFMDMxMDAwMEREOTAwMDVFMTc5MDAwMDBEMTkwMjMwRDk2Cis6MTBDNjkwMDAwMjZDMDAwMDAwMDAwMDBEMDJCMDAxMDAwMDAwMDAwMTZCCis6MTBDNkEwMDA4NEQwMDEwMEQ2OTAyMjQwMUI2QzAwMDAwNDk1MDA0MzBBCis6MTBDNkIwMDA2MTMxMDEwMEREOTAyMjQwODU2QzAwMDAwMDAwMDAwMTI2Cis6MTBDNkMwMDAxMkMwMDEwMDEwODAwMDEwNDZDOTAxMDAwMDAwMDA0Rjk4Cis6MTBDNkQwMDA0MzgxMDEwMDAwMDAwMDQyRjBCMTAxMDAwMDAwMDAwOUE4Cis6MTBDNkUwMDBGMEIxMDEwMDAwMDAwMDE4RjBCMTAxMDBBMDAwMDBBMUFECis6MTBDNkYwMDA2MkREMDEwMERCOTBBODExRTAzMTAwMDAwMDAwMDA0MzgyCis6MTBDNzAwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBERTkwQTgwQTY2Cis6MTBDNzEwMDAwMjMwMDAwMEFGODIwMDg4MUNCMDAwMDBCMDkyMDAwNTFCCis6MTBDNzIwMDA0ODMxMDEwMEU1OTAyMzBEMDI2QzAwMDBGRjA3MDAxMTY1Cis6MTBDNzMwMDAwMDhDMDEwMEIwOTIwMDQwODEzMjAxMDBFQjk0MDAwN0IwCis6MTBDNzQwMDAxNjE0MDEwMDhDOTQwMDVFMDUxMDAxMDAyRjAwMjA0MDlCCis6MTBDNzUwMDBFN0IxMDEwMERBOEEwMDQwODFCMjAwMDAwMDgwMDAwM0U2Cis6MTBDNzYwMDA0MkM5MDEwMDAwMDAwMEY4ODJCMDAxMDAwMDAwMDBGODlBCis6MTBDNzcwMDA4Q0IwMDEwMDAwMDAwMEYwOEVCMDAxMDA5NzkzMDA0MEUzCis6MTBDNzgwMDAxMzMwMDEwMDAwMDAwMDQwODVCMDAxMDBDRTkzMDA0MTRECis6MTBDNzkwMDA4NzMwMDEwMDUzOTMwMDQwODEzMjAxMDAwMDgwMDAxMDc3Cis6MTBDN0EwMDA0MkM5MDEwMEY4OTAyMjQwRTM2RDAwMDAwMDAwMDA0NUZFCis6MTBDN0IwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDBGNDkwQTg0MDZBCis6MTBDN0MwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNTJDCis6MTBDN0QwMDA0OEIxMDEwMEZBOTAyMjA5ODAzMDAwMDAwQjk1MDA0MDFBCis6MTBDN0UwMDAxMzMwMDEwMDAwMDAwMDBCMUJCMDAxMDAwMDAwMDAxNTE5Cis6MTBDN0YwMDAxQUQwMDEwMDAxOTFBMjQxMTk3QzAwMDA5NDk1MDA0MERCCis6MTBDODAwMDA5NTMwMDEwMDAwMDAwMDE2ODBCMjAxMDAwQTkxMjcwODRGCis6MTBDODEwMDA4MDMyMDAwMDI3OTAwMDAwMkFDMDAwMDA5NDk1MDA0MTVCCis6MTBDODIwMDA5NTMwMDEwMDAwMDAwMDE2ODBCMjAxMDAwNTkxMjcwODM0Cis6MTBDODMwMDA4MDMyMDAwMEFFOTAwMDAwMkFDMDAwMDAwMDAwMDA0MURECis6MTBDODQwMDA5N0IwMDEwMDA4OTEyMzBEMDI2QzAwMDAwMDAwMDA0MTI4Cis6MTBDODUwMDA5N0MwMDEwMDVGOTMwMDRCMDJCMDAwMDAwMDAwMDAwNThDCis6MTBDODYwMDA0OEIxMDEwMEQ1OEEyMjQyMTk3QzAwMDA5QTk0MDAzQTBFCis6MTBDODcwMDA4MTMwMDEwMEQ1OEEwMDQwODFCMjAwMDAwRTkxMDA0QTRCCis6MTBDODgwMDAxRjkwMDAwMEQ4OTIwMDAwMTAzMDAxMDAwMDAwMDAxNTM5Cis6MTBDODkwMDAxMEMwMDEwMDAwMDAwMDEwMzJCMDAxMDAxRTk1MDAwNjFCCis6MTBDOEEwMDAwNDMwMDEwMDE3OTFBMjQ0MUY3QzAwMDAwMDAwMDAwQjFGCis6MTBDOEIwMDAxQkIwMDEwMDAwMDAwMDBBMkNEMDAxMDAwMDAwMDAwQTlCCis6MTBDOEMwMDAwMkIwMDEwMEJEOTEwMDAxOEMzMDAxMDAwMDgwMDAxOTEwCis6MTBDOEQwMDA0MkM5MDEwMDFFOTEyMjQwRTM2RDAwMDAwMDAwMDA0M0E4Cis6MTBDOEUwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAxQTkxQTg0MDEyCis6MTBDOEYwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNUZCCis6MTBDOTAwMDA0OEIxMDEwMDAwMDAwMDAyMTBDMDAxMDAyNzkxMjIwMjdFCis6MTBDOTEwMDAxNDUwMDAwMDA4OTQwMDQ1MUYwMDAxMDAxMDkxMjI1QzkzCis6MTBDOTIwMDAxRjdDMDAwMDAwMDAwMDQ3NjFCMTAxMDA0MDAwMDAxMEMyCis6MTBDOTMwMDA2MkREMDEwMDIzOTFBODVDMUYwMDAwMDBBRjgyMDA4ODI3Cis6MTBDOTQwMDAxQ0IwMDAwMDEwOTEwMDA1NDhCMTAwMDAwODAwMkQ0MDA3Cis6MTBDOTUwMDA4NUIwMDEwMDAwMDAwMEYwODJCMDAxMDAwMDAwMDA0MDNFCis6MTBDOTYwMDAwNUIwMDEwMENFOTMwMDQxODczMDAxMDAwMDAwMDA0NTcyCis6MTBDOTcwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDAyQzkxQTg0MDZGCis6MTBDOTgwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNTZBCis6MTBDOTkwMDA0OEIxMDEwMDMyOTEyMjA5ODAzMDAwMDAwQjk1MDA0MDFGCis6MTBDOUEwMDAxMzMwMDEwMDM1OTEyMjQ0MTk3QzAwMDAwQjk1MDA0RjkzCis6MTBDOUIwMDA4MTMwMDEwMDAwMDAwMDQ0MTk4MDAxMDBGRjA3MDAwOEQ5Cis6MTBDOUMwMDAwMDhDMDEwMDQzOTEyMjRBMUY3QzAwMDAzQjkxQTIxNjdCCis6MTBDOUQwMDAwMjMwMDAwMEIwOTIwMDQwODEzMjAxMDAyRjAwMjA0MDYwCis6MTBDOUUwMDBFN0IxMDEwMEQ1OEEwMDQwODFCMjAwMDAyRDAwMkQwODdBCis6MTBDOUYwMDAyQUIwMDEwMDNGOTEyMjQyMTk3QzAwMDBERDkzMDA0MEUzCis6MTBDQTAwMDA4MTMyMDEwMDQwOTEwMDQwODFCMjAwMDBBRDkzMDA0MEFFCis6MTBDQTEwMDA4MTMyMDEwMDMwMDAyRTAwMkFEMDAxMDAzMjAwMkExNTk4Cis6MTBDQTIwMDBFNEIxMDEwMEQ1OEEwMDE2RTRCMTAwMDAyMzkwQTIxNkZCCis6MTBDQTMwMDAwMjMwMDAwMEIwOTIwMDQwODEzMjAxMDAyRjAwMjA0MEZGCis6MTBDQTQwMDBFN0IxMDEwMERBOEEwMDQwODFCMjAwMDBEODkyMDA0QUMyCis6MTBDQTUwMDAxRjEwMDEwMDM4OTAwMDEwMzJCMDAwMDA4QTAwMjA0MDAyCis6MTBDQTYwMDBFN0IxMDEwMDREOTFBMjQxMTk3QzAwMDBCMDkyMDA0MDU1Cis6MTBDQTcwMDA4MTMyMDEwMDUwOTEwMDQwODFCMjAwMDA1ODkzMDAxNUFFCis6MTBDQTgwMDA5NDMwMDEwMDVGOTMwMDRCMDJCMDAwMDAwMDAwMDAwNUVECis6MTBDQTkwMDA0OEIxMDEwMDUyOTEyMjQyMTk3QzAwMDA5QTk0MDAzQTU4Cis6MTBDQUEwMDA4MTMwMDEwMDBCOTUwMDQ1ODEzMDAxMDBENThBMDA0MDlFCis6MTBDQUIwMDA4MUIyMDAwMEY0OEUwMDQ1MUY5MDAwMDA5QTkzMDA0MDYwCis6MTBDQUMwMDA4MTMyMDEwMDUzOTMwMDQwODEzMjAxMDAzODkwMDAwMTBGCis6MTBDQUQwMDAyQ0IwMDAwMEEyOTIwMDQwODEzMjAxMDA2NTkxQTIwOEIyCis6MTBDQUUwMDA4MDMyMDAwMDY1OTFBMjE2ODAzMjAwMDAwMDgyMDAwMkIwCis6MTBDQUYwMDAwNERDMDEwMDAwMDAwMDQ1MDNGMDAxMDAwMDAwMDAwMTFCCis6MTBDQjAwMDAwMEMwMDEwMDVFOTEzNzVDNjEzMTAwMDAwMDAwMDAxQjM1Cis6MTBDQjEwMDA2MkIxMDEwMDYyOTEyODQwODEzMjAwMDA1RjkxMDA0MEMzCis6MTBDQjIwMDA4MUIyMDAwMDAwMDAwMDAwNjJCMTAxMDA2MjkxQTg0MEUzCis6MTBDQjMwMDA4MTMyMDAwMDFBODcxNzQwODFCMjAwMDA1ODAxMjAwODk2Cis6MTBDQjQwMDBFMEIxMDEwMDYwMDEyMDE2RTBCMTAxMDA5QTkzMDA0N0I2Cis6MTBDQjUwMDAxRjEwMDEwMDUzOTMwMDQwODEzMjAxMDAzODkwMDAwMTAyCis6MTBDQjYwMDAyQ0IwMDAwMEEyOTIwMDQ3MUYxMDAxMDA3ODkxQTIwODhCCis6MTBDQjcwMDA4MDMyMDAwMDc4OTFBMjE2ODAzMjAwMDA3NDkxQTI0MkE3Cis6MTBDQjgwMDAxOTdDMDAwMDAwODIwMDAyMDREQzAxMDBBMDk4MDA0MDMzCis6MTBDQjkwMDA0Nzk5MDEwMDMwMDUwMDQxODkzMDAxMDA1ODkzMDAxNTg0Cis6MTBDQkEwMDA5NDMwMDEwMDVGOTMwMDRCMDJCMDAwMDAxQTg3MDA0MEYwCis6MTBDQkIwMDA4MUIyMDAwMEREOTMwMDQwODEzMjAxMDAwMDAwMDA0QjkzCis6MTBDQkMwMDAxOTkwMDEwMDlBOTQwMDNBODEzMDAxMDAxQTg3MDA0MEMwCis6MTBDQkQwMDA4MUIyMDAwMDU4MDEyMDA4RTBCMTAxMDA2MDAxMjAxNjc4Cis6MTBDQkUwMDBFMEIxMDEwMEQ4OTIwMDEwMzIzMDAxMDAzODkwMDA0MENFCis6MTBDQkYwMDAxM0IwMDAwMEEyOTIwMDQwODEzMjAxMDA4OTkxQTIwODg2Cis6MTBDQzAwMDA4MDMyMDAwMDg5OTFBMjE2ODAzMjAwMDAwMDgyMDAwMjZBCis6MTBDQzEwMDAwNERDMDEwMDAwMDAwMDQ1MDNGMDAxMDAwMDAwMDAwMUY5Cis6MTBDQzIwMDAwMEMwMDEwMDgyOTEzNzVDNjEzMTAwMDAwMDAwMDAxQkYwCis6MTBDQzMwMDA2MkIxMDEwMDg2OTEyODQwODEzMjAwMDA4MzkxMDA0MDVBCis6MTBDQzQwMDA4MUIyMDAwMDAwMDAwMDAwNjJCMTAxMDA4NjkxQTg0MDlFCis6MTBDQzUwMDA4MTMyMDAwMDFBODcxNzQwODFCMjAwMDAwMDgwMDAwMzczCis6MTBDQzYwMDA0MkM5MDEwMDAwMDAwMEY4ODJCMDAxMDAwMDAwMDBGODk1Cis6MTBDQzcwMDA4Q0IwMDEwMDAwMDAwMEYwOEVCMDAxMDA5NzkzMDA0MERFCis6MTBDQzgwMDAxMzMwMDEwMDAwMDAwMDQwODVCMDAxMDBDRTkzMDA0MTQ4Cis6MTBDQzkwMDA4NzMwMDEwMDUzOTMwMDQwODEzMjAxMDAwMDgwMDAxMDcyCis6MTBDQ0EwMDA0MkM5MDEwMDk4OTEyMjQwRTM2RDAwMDAwMDAwMDA0NTU4Cis6MTBDQ0IwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA5NDkxQTg0MEM0Cis6MTBDQ0MwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNTI3Cis6MTBDQ0QwMDA0OEIxMDEwMDM1OEUyMjA5ODAzMDAwMDAwQjk1MDA0MERDCis6MTBDQ0UwMDAxMzMwMDEwMDM1OEUwMDQwODFCMjAwMDAxNDAwMkQ0NTQ0Cis6MTBDQ0YwMDAxRjkwMDEwMDdEOEUwMDQ0MTk5MDAwMDBBMDkxQTI0MTc4Cis6MTBDRDAwMDAxOTdDMDAwMDAwMDAwMDRBMUY5MDAxMDBFODhGMDA0MERECis6MTBDRDEwMDA4MUIyMDAwMDlBOTMwMDRBMUYxMDAxMDA1MzkzMDA0MDEzCis6MTBDRDIwMDA4MTMyMDEwMDM4OTAwMDAxMkNCMDAwMDBEODkyMDA0MDAwCis6MTBDRDMwMDA4MTMyMDEwMDM4OTAwMDEwMzJCMDAwMDBGNDhFMDA0NUJFCis6MTBDRDQwMDAxRjkwMDAwMDAwMDAwMDQxMzdDMzAxMDAwMDAwMDA0MUI3Cis6MTBDRDUwMDAzM0MzMDEwMDM2MDAwMDAxMDJDQzAxMDAwMDAwRDI0MEM0Cis6MTBDRDYwMDA4MUIyMDAwMEFDOTE4NTE3ODAzMjAwMDAwMDAwOUY0ODFFCis6MTBDRDcwMDAwM0QwMDAwMEFFOTE5QzE3ODAzMjAwMDAwMDAwOUY0QzUxCis6MTBDRDgwMDAwM0QwMDAwMDAwMDA4MDAxMzRDMzAxMDA0MDgwMDAwMzk0Cis6MTBDRDkwMDA0NEM5MDEwMDAwMDAwMDRBRjBCMTAxMDAwMDAwMDA0MDU5Cis6MTBDREEwMDBGMUIxMDEwMDAwMDAwMDEyRjBCMTAxMDBCNDkyMDA0MUE1Cis6MTBDREIwMDBFMTMxMDEwMDAwODAwMDQzNDRDOTAxMDAxMDAwMDA0MDNGCis6MTBDREMwMDBGMTk5MDEwMDAwMDAwMDQ4RjBCMTAxMDAwMDAwMDA0OUE1Cis6MTBDREQwMDBGMEIxMDEwMDQwMDAwMDAzRTBDOTAxMDAwMDAwMDA0NTdGCis6MTBDREUwMDA2MUIxMDEwMDAwMDAwMDQzNjJCMTAxMDAwMDAwQTg0MEYxCis6MTBDREYwMDA4MUIyMDAwMEJBOTEwMDQwODFCMjAwMDBCQTAwMjA0MDI4Cis6MTBDRTAwMDBFNUIxMDEwMEIwMDAyRjAxOENEMDAxMDAwMDAwMDA0NjA4Cis6MTBDRTEwMDBFMEMxMDEwMEFDMDAyRjQwMTNCMDAxMDBDQzAwMkQwMTk3Cis6MTBDRTIwMDBFMEMxMDEwMEM0OTE5QzE3ODAzMjAwMDA5RDk1MDA0MDM0Cis6MTBDRTMwMDA4MTMyMDEwMEM2OTEyMjQ3MTk3QzAwMDAwMDAwMDA1RjhBCis6MTBDRTQwMDAxMzkwMDEwMDQ0OTUwMDQ3MTkxMDAxMDBDMDAwMkQ0NEMzCis6MTBDRTUwMDAxRjkwMDEwMEM0MDAyREYwODJCMDAxMDA3ODk1MDBGMDExCis6MTBDRTYwMDA4NEIwMDAwMDkwMDAyRDA1NDhCMTAxMDBEQjkxQTI0Qjc5Cis6MTBDRTcwMDAxRjdDMDAwMDJFOTJBMjRDMUY3QzAwMDBEQjkxMUYxQzI3Cis6MTBDRTgwMDBFMDZEMDAwMERFOTFBMjAxODAzMjAwMDBBODAwMkQ0Njc2Cis6MTBDRTkwMDA4RkIwMDEwMEQ0OTExRjFDRTA2RDAwMDBCNDAwMDA0MDcxCis6MTBDRUEwMDA0Mzk5MDEwMEQ2OTEyMkYwM0E2QzAwMDAyQjkyMUZGMEJBCis6MTBDRUIwMDAzQTZDMDAwMDAwMDBBMjQwODBCMjAwMDAwMDAwODA0RkU5Cis6MTBDRUMwMDA4RkIwMDEwMDhBMDAwMDQwNDM5OTAxMDAyQzkyMjA0MjVCCis6MTBDRUQwMDBFNzZEMDAwMERBOTEyMjQwODAzMjAwMDAwMDAwODA1OUE2Cis6MTBDRUUwMDA4RkIwMDEwMDAwMDA4MDU4OEZCMDAxMDBERDkxMjI0MDFBCis6MTBDRUYwMDA4MDMyMDAwMDAwMDA4MDVDOEZCMDAxMDAwMDAwODA1Qjg5Cis6MTBDRjAwMDA4RkIwMDEwMEFDMDAwMDQwNDM5OTAxMDBCMDAwMkRGMDRCCis6MTBDRjEwMDA4NEIwMDEwMEUyOTFBMjQyMjQ2QzAwMDBFQjkxMjNGMDY2Cis6MTBDRjIwMDAwMjZDMDAwMEU4OTFBMkYwODAzMjAwMDAyRDkyQTI0MjMzCis6MTBDRjMwMDAyNDZDMDAwMDJEOTJBMjQxMDM2QzAwMDBFNzkxQTI0MEY2Cis6MTBDRjQwMDA4MDMyMDAwMDAwMDA4MDUxOEZCMDAxMDAwMDAwODA1MjRDCis6MTBDRjUwMDA4RkIwMDEwMDJEOTIxRjEyODQ1MDAwMDAyRDkyQTAwMTZECis6MTBDRjYwMDA4NDZDMDAwMERCOTEwMDQwODFCMjAwMDA4QjAwMDA0MDI3Cis6MTBDRjcwMDA0Mzk5MDEwMDE2OTJBMjQ2RTc3RDAwMDAxNDAwMDA0MDhDCis6MTBDRjgwMDA0Mzk5MDEwMDA4OTIyMkYwMTQzMDAwMDBGNDkxMjAwQTI1Cis6MTBDRjkwMDAwMjZDMDAwMDA1OTIwMzFFODAzMjAwMDBGMzkxQTI0MDUzCis6MTBDRkEwMDA4MDMyMDAwMDAwMDA4MDQ0OEZCMDAxMDAwMDAwODA0OTAyCis6MTBDRkIwMDA4RkIwMDEwMEY5OTEyMjBBMDI2QzAwMDBGQzkxQTI0MTlECis6MTBDRkMwMDAxOTdDMDAwMEY4OTFBMjQwODAzMjAwMDAwMDAwODA1NURBCis6MTBDRkQwMDA4RkIwMDEwMDAwMDA4MDU2OEZCMDAxMDBGQjkxQTI0MDhECis6MTBDRkUwMDA4MDMyMDAwMDAwMDA4MDQzOEZCMDAxMDAwMDAwODA0OEM0Cis6MTBDRkYwMDA4RkIwMDEwMDAwMDAwMDAxODJCMDAxMDAwMDAwMDAwQUIzCis6MTBEMDAwMDA4MkQwMDEwMDAyOTIyMDkxODM2QzAwMDAwMTkyQTI0MDI0Cis6MTBEMDEwMDA4MDMyMDAwMDI2MDA4MDQwOEY5ODAxMDAyNzAwODA0MDY5Cis6MTBEMDIwMDA4Rjk4MDEwMDA0OTJBMjQwODAzMjAwMDAxRjAwODA0MENGCis6MTBEMDMwMDA4Rjk4MDEwMDIwMDA4MDQwOEY5ODAxMDAwNzkyQTI0MDQ1Cis6MTBEMDQwMDA4MDMyMDAwMDIyMDA4MDQwOEY5ODAxMDAyMzAwODA0MDQxCis6MTBEMDUwMDA4Rjk4MDEwMDg4MDAyRDQ0OEZCMDAxMDAxMTkyQTI0MUU5Cis6MTBEMDYwMDAxOTdDMDAwMDBFOTJBMjQzM0Q3QzAwMDAwRTkyQTJGMkI5Cis6MTBEMDcwMDAwMjZDMDAwMDAwMDBBMjQwODBCMjAwMDAwMDAwODA0OTY1Cis6MTBEMDgwMDA4RkIwMDEwMDEwOTJBMjQwODAzMjAwMDAwMDAwODA0MzY3Cis6MTBEMDkwMDA4RkIwMDEwMDAwMDA4MDQ4OEZCMDAxMDAwRTkyQTA5MTc3Cis6MTBEMEEwMDAwMzZDMDAwMDBDOTIyMjQzM0Q3QzAwMDAxNTkyQTI0MENDCis6MTBEMEIwMDA4MDMyMDAwMDI4MDA4MDQwOEY5ODAxMDAyOTAwODA0MEM1Cis6MTBEMEMwMDA4Rjk4MDEwMDE0MDAwMDQwNDM5OTAxMDAxRjkyQTJGMEM0Cis6MTBEMEQwMDAxNDMwMDAwMDg4MDAyRDQ0OEZCMDAxMDAxQzkyQTJGMjkxCis6MTBEMEUwMDAwMjZDMDAwMDAwMDBBMjQwODBCMjAwMDAwMDAwODA0OUY1Cis6MTBEMEYwMDA4RkIwMDEwMDBFOTIyMjQxMTk3QzAwMDAwQzkyMjA5MTA5Cis6MTBEMTAwMDAwMzZDMDAwMDBFOTIwMDQwODFCMjAwMDAyMzkyMjAwQUJFCis6MTBEMTEwMDAwMjZDMDAwMDIyOTJBMjQwODAzMjAwMDAwMDAwODA0NDk1Cis6MTBEMTIwMDA4RkIwMDEwMDAwMDA4MDQ5OEZCMDAxMDAyODkyMjIwQUQwCis6MTBEMTMwMDAwMjZDMDAwMEZDOTFBMjQxMTk3QzAwMDAyNzkyQTI0MEUxCis6MTBEMTQwMDA4MDMyMDAwMDAwMDA4MDU1OEZCMDAxMDAwMDAwODA1NjQyCis6MTBEMTUwMDA4RkIwMDEwMDJBOTJBMjQwODAzMjAwMDAwMDAwODA0MzdDCis6MTBEMTYwMDA4RkIwMDEwMDAwMDA4MDQ4OEZCMDAxMDAzMDkyMDA0MzcyCis6MTBEMTcwMDA5NUIwMDAwMDMwOTIwMDQxOTVCMDAwMDAzMDkyMDA0MjFFCis6MTBEMTgwMDA5NUIwMDAwMDMwOTIwMDQ0OTVCMDAwMDAzMDkyMDA0QzAxCis6MTBEMTkwMDA5NUIwMDAwMEUwOTQwMDQwODEzMjAxMDAzMzkyQTI0MDNCCis6MTBEMUEwMDA4MDMyMDAwMDAwMDA4MDRCOEZCMDAxMDAwMDAwODA0Q0Y2Cis6MTBEMUIwMDA4RkIwMDEwMDJEMDAwMDQwNDM5OTAxMDAyRTAwMkZGMzk1Cis6MTBEMUMwMDA4NEIwMDEwMDM4OTJBMkYzOTYzMDAwMDAwMDAwODA0MDQ1Cis6MTBEMUQwMDAwMUIwMDEwMDJEMDAyQTQxRTdEMTAxMDBENDAwM0Q0MUZBCis6MTBEMUUwMDA4NUUwMDEwMDBCMDAwMEYyMDBFNDAxMDAzRTkyMjI1QUFCCis6MTBEMUYwMDAwMTdDMDAwMDAwMDAwMDQwMUY5MDAxMDAzRjkyMDA1QTk3Cis6MTBEMjAwMDAwMTgwMDAwMDAwMDAwMDQwMUY4MDAxMDAwMDAwNjM0MTE5Cis6MTBEMjEwMDA4NUMwMDEwMDAwMDBBMEE1ODU2QzAxMDAwMDAwRTM0MDZFCis6MTBEMjIwMDA4NUIwMDEwMDBDODAwMDAzNDJDOTAxMDAxMjAwMDA0MERCCis6MTBEMjMwMDA4Nzk4MDEwMERGOTUwMEYwOENCMDAwMDA0QzkyMjI0MEVFCis6MTBEMjQwMDAwRjZDMDAwMDAwMDAyRjA1NDhCMTAxMDA0OTkyQTI0QjZECis6MTBEMjUwMDAxOTdDMDAwMDRBOTIyMkYwMTg2QzAwMDAwMDAwNjA0QjFDCis6MTBEMjYwMDAxOTkwMDEwMDE2OTMwMDA3MTAzMDAxMDBGOTgyMDA0MDY4Cis6MTBEMjcwMDAwNUIwMDAwMDRFOTIyMjVBMUY3QzAwMDA5QjkyMDA0MDk1Cis6MTBEMjgwMDA4MTMwMDEwMEY5ODIwMDQwMDVCMDAwMDAwMDAwMkYwNTQ4Cis6MTBEMjkwMDA0OEIxMDEwMDAwMDA2MDRCMTk5MDAxMDAxNjkzMDAwNzhGCis6MTBEMkEwMDAxMDMwMDEwMEY5ODIwMDQwMDVCMDAwMDAwMDAwMkYwNTk5Cis6MTBEMkIwMDA0OEIxMDEwMDAwMDA2MDRCMTk5MDAxMDAxNjkzMDAwNzZGCis6MTBEMkMwMDAxMDMwMDEwMDAwMDA4MDQwMDVCMDAxMDA1NzkyMzM0MDRCCis6MTBEMkQwMDA4MTMyMDAwMDVBOTJBMUFEOTUyMDAwMDA2ODkyMTM0MDVGCis6MTBEMkUwMDA4MUIyMDAwMDAwMDAxMzRBNUE4MzAxMDAzMDAwMzk0NTIyCis6MTBEMkYwMDA5NUUwMDEwMDFGMDAwMDBGNUVEODAxMDAwMDAwMDA1QUY5Cis6MTBEMzAwMDA1RjkwMDEwMDAwMDAwMDQwNDVCMDAxMDAwMDAwMDAwNEYzCis6MTBEMzEwMDA0OEIwMDEwMDAwMDAwMDA1NEFCMDAxMDAwMDAwMDAwQzA4Cis6MTBEMzIwMDA1OEIwMDEwMDAwMDAwMDA3NEVCMDAxMDBBODg0MDA0MDgyCis6MTBEMzMwMDA1RDk4MDEwMDAwMDAwMDU4NjFCMTAxMDAwMDAwMDA0QTQyCis6MTBEMzQwMDA2MkIxMDEwMDAwMDBBODQxOTdCMDAwMDA2NTkyMDA0MDYyCis6MTBEMzUwMDA4MUIyMDAwMDAwMDA4MDQwOTdCMDAxMDA2OTkyNjAwNzMwCis6MTBEMzYwMDA5NjMwMDAwMEZGRkYwMDRCODQ4OTAxMDAwMDAwNzBDMjZFCis6MTBEMzcwMDAyNEIwMDEwMDczOTJBMjQ1MjU3QzAwMDA2RDkyMzEyMEZCCis6MTBEMzgwMDA4NTMwMDAwMDc0OTIyMjEyNDg3RjAwMDA1ODA0MTExMjY4Cis6MTBEMzkwMDA0ODAzMDEwMDEwMDAwMDEyOTZFNDAxMDAwMDAwMDA0QjU5Cis6MTBEM0EwMDAxRTk0MDEwMDAwMDA4MDVBMUY5MDAxMDA3MzkyMzE0MENBCis6MTBEM0IwMDA4MTMyMDAwMDAwMDAwMEI0MjRCMDAxMDA3NDkyMjIxMkY3Cis6MTBEM0MwMDA0ODdGMDAwMDU4MDQwMDQwODEzMjAxMDAwMDAwMkYwNTEyCis6MTBEM0QwMDA0OEIxMDEwMDgxOTIwQkYwODQzMDAwMDAwMDAwMTExMjZFCis6MTBEM0UwMDA0ODgzMDEwMDdFOTIyMjUwODU3MDAwMDA1RTAxMDA0MDVCCis6MTBEM0YwMDA0Mzk5MDEwMDQxOTQwMEYyOTYzMDAxMDA5MzA0MDAxMjE5Cis6MTBENDAwMDA5NDMwMDEwMDAwMDAwMDVBMUY5MDAxMDAxMDAwMDAxMjJCCis6MTBENDEwMDA5NkU0MDEwMDAwMDA4MDRCMUU5NDAxMDAxMDAwMDA0MkMxCis6MTBENDIwMDAxMEY0MDEwMDAwQjczRjQzMTFGMDAxMDAwNzAwMDAwOEFECis6MTBENDMwMDA4QTg4MDEwMDg0OTIzMEExMEMzMDAwMDA4NzkyMjI0NTM2Cis6MTBENDQwMDBFNjdEMDAwMDc0OTIxMDQwODFCMjAwMDAwMDAwMkE0NTgxCis6MTBENDUwMDBFNjkxMDEwMDAwMDAxMDEyNDg4MzAxMDAwMDAwMTE0MDE1Cis6MTBENDYwMDA4MUIyMDEwMDAwMDA2MDRCODU4MDAxMDA1RTAxMDA0MDM4Cis6MTBENDcwMDA0Mzk5MDEwMDQxOTQwMEYyOTYzMDAxMDAwMDgwMDAxMEIxCis6MTBENDgwMDA0NEM5MDEwMEQ4MDAwMDQwODE5ODAxMDAyRTAwMkQwNUZDCis6MTBENDkwMDA0OEIxMDEwMDkyOTIyMjQwRTc2RDAwMDA4MDAwMDA0MEY4Cis6MTBENEEwMDA4MEM4MDEwMDAwMDAwMDQwRjBCMTAxMDAwOTAwMDAwODQwCis6MTBENEIwMDA4NkU0MDEwMDAwMDA2OEE3ODdDMDAxMDAwMDAwMDA0NDY2Cis6MTBENEMwMDA2MUIxMDEwMDAwMDAwMDEwNjJCMTAxMDA5NjkyQTgwNTUwCis6MTBENEQwMDBFMDMxMDAwMDEwMDAwMDEyOTZFNDAxMDAwMDE0MDA0QjNGCis6MTBENEUwMDA5NkRDMDEwMDAwMDA4MDRCMUU5NDAxMDAxMDAwMDAwRjJDCis6MTBENEYwMDA4NEY0MDEwMDFGMDAwMDQyODQ4ODAxMDA5RjkyMjI0MEIyCis6MTBENTAwMDA4MDMyMDAwMEEwOTIwMDQyNjhCMTAwMDAwMDAwMDA0MjlBCis6MTBENTEwMDA2QUIxMDEwMEEwOTIzMTVBMUYwMDAwMDAwMDAwOTE0MjQwCis6MTBENTIwMDA0ODkzMDEwMEEyOTIzNTQwODEzMjAwMDA2RDAwMDA0MDE2Cis6MTBENTMwMDA2MTk5MDEwMEE4OTIyOEIxMkMzMDAwMDBBMzkyMjI0RERECis6MTBENTQwMDA3NTdEMDAwMDAwMDAwMDQwMkRCMDAxMDAwMDAwOTU0MEY2Cis6MTBENTUwMDAxMUIwMDEwMDZEMDAwMDQwNjE5OTAxMDBBODkyQThCMUNFCis6MTBENTYwMDAxMDMwMDAwMDAwMDA5NTQwODFCMjAxMDA3RjAwMDA0MEIzCis6MTBENTcwMDA2MTk5MDEwMEFGOTIyOEIxMTAzMDAwMDBBQjkyOUZCQUMwCis6MTBENTgwMDA4MDMyMDAwMDAwMDA4MDQwMTFCMDAxMDAwMDAwODAyNEMzCis6MTBENTkwMDAxMTg0MDEwMDAwMDAwMDVGNjFCMTAxMDAwMDEwMDAwMDczCis6MTBENUEwMDA2MkREMDEwMDAwMDBBODQwODFCMjAwMDBCMTkyMDA0MDlECis6MTBENUIwMDA4MUIyMDAwMEFDOTQwMDQwNDc5OTAxMDBCNTkyMzI0MDFFCis6MTBENUMwMDA4MTMyMDAwMEJCOTIyMkY4OTYzMDAwMDAwMDAwMDBGODgzCis6MTBENUQwMDA5MEIwMDEwMDAwMDAwMEYwOTJCMDAxMDAwMTAwMDA0QjhCCis6MTBENUUwMDBGMENEMDEwMDIwMDA5MjQ4RTBDOTAxMDA2QzAwMDA0MDJECis6MTBENUYwMDA2MTk5MDEwMEJGOTIyOEIxOTIzMDAwMDBCQjkyMjI0Qzg5Cis6MTBENjAwMDA3NTdEMDAwMDA0MDAxMjQwOTFCMDAwMDA2QzAwMDA0MEU1Cis6MTBENjEwMDA2MTk5MDEwMEJGOTJBOEIxOTAzMDAwMDBGRjAwMDA0ODVFCis6MTBENjIwMDA5Njg4MDEwMDAwMDAwMDRCOTBEMDAxMDAwMTAwMDA0QkUzCis6MTBENjMwMDBGMENEMDEwMDIwMDAwMDQ4RjBDOTAxMDAwMDAwOTI0OTJGCis6MTBENjQwMDBFMEIxMDEwMDBDMDAyRDEwNDhCMTAxMDBGRjA3MDAwOEY3Cis6MTBENjUwMDA4MjhDMDEwMEZGMDcwMEYwMDA4QzAxMDAwMDAwQTI0MTU1Cis6MTBENjYwMDAwMEVDMDAwMENDOTIyMjFBMDA2QzAwMDBCMDkyMDAwMDg2Cis6MTBENjcwMDAzNDMwMDEwMDAwMDAwMDUwNDlDMTAxMDBDODkyQTI0MUFECis6MTBENjgwMDAyMzUwMDAwMDAwMDA4MDQwODFCMjAxMDAwQzAwMkQxMEVBCis6MTBENjkwMDA0OEIxMDEwMEZGMDcwMDE1ODI4QzAxMDBGRjA3MDBGMDcwCis6MTBENkEwMDAwMDhDMDEwMDAwMDBBMjQxMDBFQzAwMDBENTkyMjIwRDg4Cis6MTBENkIwMDAwMDZDMDAwMEIwOTIwMDAwMUEzMDAxMDAwMDAwMDA1MDIxCis6MTBENkMwMDA0OUMxMDEwMEQxOTJBMjQxMjM1MDAwMDAwMDAwODA0MEQ2Cis6MTBENkQwMDA4MUIyMDEwMERBOTI4MzFFODAzMjAwMDAwMDAwMDA0NDEzCis6MTBENkUwMDAxOTkwMDEwMDI0MDAyRDAxMkNCMDAxMDAyODAwMkRGMDFDCis6MTBENkYwMDAxNkIwMDEwMDIyMDAyREYwMjZCMDAxMDAxNDAwMkZGMjE4Cis6MTBENzAwMDAwQ0IwMDEwMDAwMDA4MDQwRTFCMTAxMDAzMDAwMDA0MDk5Cis6MTBENzEwMDA5Nzk4MDEwMDYwOTcyRTQwODFCMjAxMDAwMDAwMDA0MDAwCis6MTBENzIwMDBGMUIxMDEwMEUxOTJBMjQxOTc1MDAwMDA2NDk3M0U0MzlECis6MTBENzMwMDA5REUwMDEwMDAwMDA4MDQwRTFCMTAxMDA2NDk3M0U0MzlDCis6MTBENzQwMDA5REUwMDEwMDAwMDA4MDBCRThCMTAxMDA2NDk3M0Y0M0I5Cis6MTBENzUwMDA5REUwMDEwMDAwMDAwMEYwMTZDMDAxMDAwMDAwODA0MEM0Cis6MTBENzYwMDBFMUIxMDEwMDY0OTczRjQzOURFMDAxMDAwMDAwMDBGNDM3Cis6MTBENzcwMDAxNkIwMDEwMDAwMDA4MDQwRTFCMTAxMDA2MDE3M0Q0Mzk4Cis6MTBENzgwMDA5REUwMDEwMDEwMDA4MEExMTZFNDAxMDAwMEI1MDAwRDJECis6MTBENzkwMDA0MkM5MDEwMEYwOTIzMDQ3MTcwNDAwMDBGMzkyQTIwQjM3Cis6MTBEN0EwMDBFNjdEMDAwMDAwMDA5MDQyODFCMDAxMDAwMEI3MDAwRDRFCis6MTBEN0IwMDA0NkM5MDEwMEY3OTJBMjBCRTY3RDAwMDAwMDAwMDAwQkI1Cis6MTBEN0MwMDBFNjkxMDEwMDAwMDA5MDQxODFCMDAxMDAwMDAwMTA0MDhFCis6MTBEN0QwMDA4MUIyMDEwMEY4OTI0MDA3OTYzMDAwMDA5RDA0MDA0MDlECis6MTBEN0UwMDA4MTMyMDEwMDAyOTNBMjQ1OTU3QzAwMDAwMTk3M0Y0MUUwCis6MTBEN0YwMDA5NUUwMDEwMDAwMDAwMEYzOTZCMDAxMDAwMDAwMDA0RTJCCis6MTBEODAwMDBFNkIxMDEwMDQwOTczRTQwOTdFMDAxMDAwMDAwMDA0RTY1Cis6MTBEODEwMDBFNkIxMDEwMDQwOTczRTQwOURFMDAxMDAxNTkzMDAzQkJBCis6MTBEODIwMDBFN0IxMDAwMDAyOTMzMDQwODEzMjAwMDAwQzkzQTIwQjVDCis6MTBEODMwMDBFNjdEMDAwMDAwQjUwMDBENDZDOTAxMDAwODkzQTIwQjZCCis6MTBEODQwMDBFNjdEMDAwMDAwMDAxMDQwODFCMjAxMDAwMDAwOTg0MjE3Cis6MTBEODUwMDA4MUIwMDEwMDAwQjcwMDBENDZDOTAxMDAwMDAwMDAwQkI3Cis6MTBEODYwMDBFNjkxMDEwMDAwMDAxMDQwODFCMjAxMDAwMDAwOTg0MUUzCis6MTBEODcwMDA4MUIwMDEwMDA0MDAyMUEyOTUyMDAwMDAwMDAwMTA0QUEwCis6MTBEODgwMDA0NDgzMDEwMDAwOTczRTQxOTVFMDAxMDAwMDAwMDA0RUY2Cis6MTBEODkwMDBGNkIxMDEwMDAwMDAwMDRFRTZCMTAxMDA0MDk3M0U0MEE1Cis6MTBEOEEwMDA5REUwMDEwMDAwMDAwMDNCRTdCMTAxMDAwMDAwMDA0QURDCis6MTBEOEIwMDA5MEIxMDEwMEZGRkYwMDA3OTI4OTAxMDAwMDAwOTg0MDJECis6MTBEOEMwMDA4MUIwMDEwMDAzMDAwMDA4ODZGNDAxMDAwMEI3MDA0M0E2Cis6MTBEOEQwMDA0NkM5MDEwMDA3MDAwMDA4ODI4ODAxMDAxOTkzNDAwODJBCis6MTBEOEUwMDA5NjMwMDAwMDlEMDQwMDQwODEzMjAxMDAyNTkzMjI0NUJFCis6MTBEOEYwMDA5NTdDMDAwMDIxOTMyMjVBMUY3QzAwMDAxMDAwMDAwRjJECis6MTBEOTAwMDA5NkY0MDEwMDFFOTMzMTVGOTcwNDAwMDAwMDAwMTE0QjU0Cis6MTBEOTEwMDA0ODkzMDEwMDAwMDAwMDRCNkFCMTAxMDAyMTkzMzA0MEEwCis6MTBEOTIwMDA4MTMyMDAwMDAwMDAwMDQxRTY4MTAxMDAwMDAwMTA0MDRCCis6MTBEOTMwMDA4MUIyMDEwMDAwMDA5ODQwODFCMjAxMDAwMDk3M0Y0MTkwCis6MTBEOTQwMDA5NUUwMDEwMDAwMDAwMEYzOTZCMDAxMDA0MDk3M0Q0MEQzCis6MTBEOTUwMDA5N0UwMDEwMDAwMDA2M0YzODhCMDAxMDAyRDkzQTIzQjIzCis6MTBEOTYwMDA4OTZDMDAwMDAwMDAwMDRBOTBCMTAxMDAwMTAwMDBBNjhGCis6MTBEOTcwMDA5MkIxMDEwMDJFOTMxODRBNDQ5MzAwMDAwMDAwMTg0MDExCis6MTBEOTgwMDA4MUIyMDEwMDMwMDAzOTQ1OTdFMDAxMDAzMzkzMjI1QUZCCis6MTBEOTkwMDAxRjdDMDAwMDFGMDQwMDBGOThEODAxMDAwMDAwMDA0Q0ZECis6MTBEOUEwMDA1RTk0MDEwMDM1OTMwMDA1NEFCMDAwMDAxRjA0MDBBN0YzCis6MTBEOUIwMDA1RTg0MDEwMDAwMDAwMDQwNEJCMDAxMDAwMDAwMDA1OEYwCis6MTBEOUMwMDA2MUIxMDEwMDAwMDAwMDRCNjJCMTAxMDAwMDAwQTg0MEZECis6MTBEOUQwMDA4MUIyMDAwMDM2OTMwMDQwODFCMjAwMDAzOTkzNDAwN0M1Cis6MTBEOUUwMDA5NjMwMDAwMDlEMDQwMDQwODEzMjAxMDAzRDkzMjI0NUE1Cis6MTBEOUYwMDA5NTdDMDAwMDAwMDA5ODQwODFCMjAxMDA5QjA0MDA0QTIxCis6MTBEQTAwMDA0NDEzMDEwMDAwOTczRjQxOTVFMDAxMDAwMDAwMDBGMzNFCis6MTBEQTEwMDA5NkIwMDEwMDQwOTczRDQwOTdFMDAxMDAwMDAwNjNGMzlECis6MTBEQTIwMDA4OEIwMDEwMDMwMDAzODQ1OTdFMDAxMDAwMDAwMDA1RjM5Cis6MTBEQTMwMDAwRjkwMDEwMDAwMDAwMDU4NjFCMTAxMDAwMDAwMDA0QjkwCis6MTBEQTQwMDA2MkIxMDEwMDQ1OTNBODQwODEzMjAwMDAzRTkzQTIzQkExCis6MTBEQTUwMDA4OTZDMDAwMDMwMDAzODQ1OURFMDAxMDAwMDAwOTg0MENFCis6MTBEQTYwMDA4MUIyMDEwMDkzMDQwMDEyOTQzMDAxMDAxNjkzMDA1QTExCis6MTBEQTcwMDAxRjAwMDEwMDAwMDA4MDVBMUY5MDAxMDAxMTAwMDA0QUExCis6MTBEQTgwMDBFNkM5MDEwMDM0MDAyRjRGOTU4NDAxMDAwMDAwMDBGMzI3Cis6MTBEQTkwMDA5NkIwMDEwMDAxMDA2MzRCODRDODAxMDAwMDAwQTA0MzYwCis6MTBEQUEwMDA4NTZDMDEwMDAwMDBFMzQwODVCMDAxMDAzMDAwMkQ0NDhBCis6MTBEQUIwMDAxRjkwMDEwMDMyMDAyREYyMkFCMDAxMDAwNDAwMjJGMjcyCis6MTBEQUMwMDAwMjMwMDAwMDM0OTIwMDEwMzIzMDAxMDAzMjAwQTA0MEQ5Cis6MTBEQUQwMDBFNUIxMDEwMDAwMDAwMDQwOTdCMDAxMDBGMDA3MDA0MEYwCis6MTBEQUUwMDA5OTk4MDEwMDAwMDAwMDRBMDJDMDAxMDAwMDAwMDA1MEE3Cis6MTBEQUYwMDAwM0QwMDEwMDAwMDAwMDQxOTdDMDAxMDAwMDAwQTM0Q0NBCis6MTBEQjAwMDAwMkQwMDAwMDVDOTMwMDQwODFCMjAwMDAwMDAwMDBBODM5Cis6MTBEQjEwMDAzNkIwMDEwMDZDOTMyMjQxMDM1MDAwMDAwMDgwMDAxMEQ5Cis6MTBEQjIwMDA0NEM5MDEwMDAwMDAwMDUwRjFCMTAxMDA3MDAwMDAwMzgxCis6MTBEQjMwMDBGMEM5MDEwMDAwMDAwMDQyNjFCMTAxMDAwMDAwMDAxMEM2Cis6MTBEQjQwMDA2MkIxMDEwMDY1OTNBODAwRTAzMTAwMDBBRjgyMDA4ODU3Cis6MTBEQjUwMDAxQ0IwMDAwMEIwOTIwMDQwODEzMjAxMDA3QzgwMDAwM0M0Cis6MTBEQjYwMDA0MkM5MDEwMDAwMDAwMEYwMDBCMDAxMDA2MDkzMDA1Q0I5Cis6MTBEQjcwMDAwMTgwMDAwMEIwOTIwMDQwODEzMjAxMDAwMDAwMDAxQkQzCis6MTBEQjgwMDAxMEIxMDAwMDY4MDEyRDA2ODJCMDAxMDAwMDAwMDBGMjEzCis6MTBEQjkwMDA4MkMwMDEwMDAwODAwMDAzNDZDOTAxMDBBQjkyMDA0MDMyCis6MTBEQkEwMDA4MTMyMDEwMDkzOTMyMjQwMTE2QzAwMDAwMDAwNjgwODRDCis6MTBEQkIwMDAzODk2MDEwMEYwMDcwMDQxODJDQzAxMDA3MTkzQUE0MTIwCis6MTBEQkMwMDAzQjQwMDAwMDAwMDAwMEY4MTBCMDAxMDAwMDAwMDA1Q0M1Cis6MTBEQkQwMDAxMTgwMDEwMDAxMDAwMDFEMDRDQzAxMDA5MjkzMjY0NjMzCis6MTBEQkUwMDAyMzMwMDAwMDA4MDAwMDAzMTJDODAxMDA2NDAxMjBGMDg3Cis6MTBEQkYwMDBFMEIxMDEwMDkxOTMyMjQxMDU1MDAwMDAyMDAwMDAwMzk0Cis6MTBEQzAwMDA0OEM5MDEwMDBDMDAwMEY4ODZDODAxMDAwMDAwMjI0NDQ5Cis6MTBEQzEwMDBGMUIxMDEwMDAwMDAwMDQzRjBCMTAxMDAwMDAwMDAwOTczCis6MTBEQzIwMDBFMEIxMDEwMDAwMDAwMDQ0NjFCMTAxMDBBMDAwMDBBNEM3Cis6MTBEQzMwMDA2MkREMDEwMDgzOTNBODQ2MUYxMDAwMDA5MDkzMjI0MUVCCis6MTBEQzQwMDAwNTUwMDAwMDhFOTNBMjQxMjM1MDAwMDAwMDAwMDBBMTY3Cis6MTBEQzUwMDAxQUIwMDEwMDAwMDAwMDQ0NjFCMTAxMDA0MDAwMDAxMDUyCis6MTBEQzYwMDA2MkREMDEwMDg5OTNBODQ2MjMzMDAwMDBBRjgyMDA4ODVFCis6MTBEQzcwMDAxQ0IwMDAwMDEwMDAwMDAzNDhDOTAxMDAwMDAwMDAwREE2Cis6MTBEQzgwMDA0MkIxMDEwMDAwMDAwMDQ0MTNDMDAxMDA3RTkzMDA1MDI3Cis6MTBEQzkwMDA0OUMxMDAwMDAwMDAwMDA1NDhCMTAxMDAwNDgwMDAwM0Y0Cis6MTBEQ0EwMDAxQUM4MDEwMDAwMDA4MDQwODFCMjAxMDA5MjkzMjI0MDE2Cis6MTBEQ0IwMDAzQjZDMDAwMDAwMDAwMEY4MDBCMDAxMDBCMDkyMDA1Qzc2Cis6MTBEQ0MwMDAwMTAwMDEwMDkzOTMwMDQxM0JEMDAwMDAwMDAwOEQ0NzBDCis6MTBEQ0QwMDA4MDMyMDEwMEIwMDAyRjVGMTNCMDAxMDAwMDAwRTBGMEJGCis6MTBEQ0UwMDA4Q0MwMDEwMDAwODAwMDAzNDJDOTAxMDAwMDAwMDBGODYwCis6MTBEQ0YwMDA5NEIwMDEwMDAwMDAwMEY4OENCMDAxMDA5RjkzOENGOEY0Cis6MTBERDAwMDA4RTMwMDAwMDAwMDAwMDQ0MTk5MDAxMDAwNDAwMjJGODQ5Cis6MTBERDEwMDAxNDMwMDAwMDAwMDAwMEY4MTZCMDAxMDAwMDAwMDBGODA4Cis6MTBERDIwMDAyNkIwMDEwMDA4MDAyRUY4MENCMDAxMDAwQzAwMkE0QUIxCis6MTBERDMwMDBFMEIxMDEwMDI4MDAwMDAwRTBDOTAxMDAxMDAwMjAxQjM0Cis6MTBERDQwMDBFMEIxMDEwMEFDOTMyMDBBMEM2QzAwMDAwMDAwMDBGODY4Cis6MTBERDUwMDA5NEIwMDEwMDAwMDAwMEY4OTZCMDAxMDAyMDAwMjBGMDBGCis6MTBERDYwMDBFNEIxMDEwMDE4MDAyMDRBRTBCMTAxMDAxQzAwMjA0QjgyCis6MTBERDcwMDBFMEIxMDEwMDk3OTMwMDQwMTNCMDAwMDAyQzAwMkQ0MjQ5Cis6MTBERDgwMDAxOTkwMDEwMDJFMDAyRkYzODJCMDAxMDAwMDAwMDBGMzczCis6MTBERDkwMDA5NkIwMDEwMEIyOTNBMkE1OTc2QzAwMDAwMDAwODA0MUVDCis6MTBEREEwMDA5NUIwMDEwMEI1OTNBMjQwOTc2QzAwMDAwMDAwMDA0MEMwCis6MTBEREIwMDA4M0IwMDEwMDJEMDAyMDQwRTdCMTAxMDAwMDAwNjM0MTY1Cis6MTBEREMwMDA5N0MwMDEwMEQ0MDAzRTQxODNFMDAxMDAwMDAwMDA0MTAzCis6MTBEREQwMDA4M0MwMDEwMEJBOTNBMEE1ODM2QzAwMDAwMDAwMDA0MDNFCis6MTBEREUwMDA4M0IwMDEwMDJDMDAyMDQxRTZCMTAxMDBCRjkzMjI0MDI2Cis6MTBEREYwMDAxRjdDMDAwMDAwMDQwMDAwOThEQzAxMDAwQjAwMDA0Q0I4Cis6MTBERTAwMDBFNEY1MDEwMDAwMDA4MDQwMUY4MDAxMDAwQjAwODAwMDRECis6MTBERTEwMDBFNEY1MDEwMEI0OTIwMDQwODEzMjAxMDAwNDgwMDAwMzY3Cis6MTBERTIwMDA0NEM5MDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwMDA0MEMxCis6MTBERTMwMDBGMUIxMDEwMDAwMDA2MDQxODdCMDAxMDAwMDgwMDAxMEQ2Cis6MTBERTQwMDA0NEM5MDEwMDAwMDAwMDUwRjFCMTAxMDAwMDAwMDA0ODg5Cis6MTBERTUwMDBGMEIxMDEwMDAwMDAwMDQ5RjBCMTAxMDAwMDAwMDAwMzMyCis6MTBERTYwMDBFMEIxMDEwMDAwMDAwMDQ1NjFCMTAxMDAyMDAwMDAxMDk4Cis6MTBERTcwMDA2MkREMDEwMDAwMDBBODVEMDU5MDAwMDBDQjkzMDA0MDJBCis6MTBERTgwMDA4MUIyMDAwMEI0OTIwMDQwODEzMjAxMDAwMDgwMDAwM0EyCis6MTBERTkwMDA0NEM5MDEwMDAwMDAwMDQxRjBCMTAxMDAwMDAwMDA0MjRGCis6MTBERUEwMDBGMEIxMDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwMDA0M0FBCis6MTBERUIwMDBGMEIxMDEwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MEQyCis6MTBERUMwMDBGMUIxMDEwMDAwMDAwMDQ4RjBCMTAxMDAwMDAwMDA0OTdDCis6MTBERUQwMDBGMEIxMDEwMDAwMDAwMDAzRTBCMTAxMDAwMDAwMDA0NUM2Cis6MTBERUUwMDA2MUIxMDEwMDIwMDAwMDEwNjJERDAxMDAwMDAwQTg1REFBCis6MTBERUYwMDAwNTkwMDAwMERBOTMwMDQwODFCMjAwMDAyRDAwMDA0MDQwCis6MTBERjAwMDA0Mzk5MDEwMDJFMDAyRkYzODRCMDAxMDAwMTAwNjNGMzU4Cis6MTBERjEwMDA5NkM4MDEwMEUyOTM5RjQxODU1MDAwMDAwMTAwMDBBNUQyCis6MTBERjIwMDA4NUNDMDEwMDJEMDBBMDQyRTZCMTAxMDA1RTAxMkQwMDZDCis6MTBERjMwMDA4MEIwMDEwMEU3OTM1MjQzODE2MDAwMDAwMjAwMDBGMkNDCis6MTBERjQwMDA4MkY0MDEwMEU4OTMwMDQxODA5NDAwMDAwMDAwMDA1RjJCCis6MTBERjUwMDA4MTkwMDEwMDAwMDAwMDVFNjFCMTAxMDAwMDAwMDA0MEZFCis6MTBERjYwMDA2MkIxMDEwMDAwMDBBODQwOTVCMDAwMDBFOTkzOUVCQjlCCis6MTBERjcwMDA4MDMyMDAwMEVFOTNBMjQwMUY3QzAwMDBCMDkyMDA0MDZGCis6MTBERjgwMDA4MUIyMDAwMDAwMDA4MDQxOTVCMDAxMDAwNDAwMDAxNTNFCis6MTBERjkwMDA0MkM5MDEwMDAwMDAwMDU0MkJDMDAxMDAwMDAwMDBGQzM5Cis6MTBERkEwMDAyNEIwMDEwMDAwMDAwMEZDMzhCMDAxMDAwMDAwMDBGRUI5Cis6MTBERkIwMDAzQ0IwMDEwMDAwMDAwMEZFM0FCMDAxMDAwMzk0OUMxNzQxCis6MTBERkMwMDA4MDMyMDAwMEY4OTNBMjRBMTk3QzAwMDAwMDAwODA0Q0M3Cis6MTBERkQwMDAxRjkwMDEwMDBDMDAwMDFFOThGNDAxMDBGNzkzQTI0ODY2Cis6MTBERkUwMDA5OTZDMDAwMDAwMDAwMDE1NDJCMTAxMDBGNzkzQTI4QTZECis6MTBERkYwMDBGMTZEMDAwMDBDMDAwMDAxMDJDQzAxMDAwMDAwMDBGQ0VCCis6MTBFMDAwMDAzRUIwMDEwMDAxMDAwMEY0MjhDQzAxMDBDQzAwMkQwNTM5Cis6MTBFMDEwMDA0OEIxMDEwMDAyOTQyMEYwM0U2QzAwMDAwMDAwMDA0QjZCCis6MTBFMDIwMDAxRjkwMDEwMDAwMDAwMDRDMkJDMDAxMDBCRjAwMkQwNTE3Cis6MTBFMDMwMDA0OEIxMDEwMDAwMDA4MEYzM0FFMDAxMDAwMDAwMkU0QkRGCis6MTBFMDQwMDAxOTkwMDEwMDA3MDAyQTBDRTRCMTAxMDAwMDAwODAwNENGCis6MTBFMDUwMDBFNkIxMDEwMDE4MDAwMDQwNDM5OTAxMDAxQzAwMkRGMEJBCis6MTBFMDYwMDAxNkIwMDEwMDIwMDAyREYwMjZCMDAxMDAwQzAwMkZGMkE4Cis6MTBFMDcwMDAwQ0IwMDEwMDAwMDBBMjA2MTRFQzAwMDAwRjk0MjI0NTMxCis6MTBFMDgwMDAxRjdDMDAwMDAwMDBBMzA2MkFFQzAwMDAwMDAwMDBGODNFCis6MTBFMDkwMDA5NEIwMDEwMDAwMDAwMEYwOTZCMDAxMDAwQzAwMkQ0MDhCCis6MTBFMEEwMDA4MUIyMDEwMDAwMDAyQTRDRTFDMTAxMDAzMDAwMDAxMEUzCis6MTBFMEIwMDA0OEM5MDEwMDBBMDAwMDQwRjE5OTAxMDAxODAwMDAwNTVDCis6MTBFMEMwMDBGMEM5MDEwMDAwMDAwMDRBRjBCMTAxMDAwMDAwMDA0QjVGCis6MTBFMEQwMDBFMEIxMDEwMDAwMDAwMDQ3NjFCMTAxMDBBMDAwMDBBNDEwCis6MTBFMEUwMDA2MkREMDEwMDE5OTRBODVDMUYxMDAwMDAwMDAwODAwNThCCis6MTBFMEYwMDA0OEIxMDEwMDAwMDAyRTEwNDhCMTAxMDA0MDAwMDAwMUFECis6MTBFMTAwMDBGMENEMDEwMDQwMDAwMDAzRjBDOTAxMDA0MDAwMDAwMDE0Cis6MTBFMTEwMDBFMEM5MDEwMDAwMDAyRTUwNDlDMTAxMDAwMDAwMDAwNkM2Cis6MTBFMTIwMDBGMUIxMDEwMDAwMDAwMDAzRjBCMTAxMDAyMzk0NjI0MjRDCis6MTBFMTMwMDA2MTMxMDAwMDIwMDAwMDEwNjJERDAxMDAyNDk0QTg0MDNECis6MTBFMTQwMDA4MTMyMDAwMDEwMDAwMDEwNjJDOTAxMDAyNjk0QTgwMDZFCis6MTBFMTUwMDBFMDMxMDAwMDAwMDBGMjQwODFCMjAxMDAwMDAwMkUxMDBBCis6MTBFMTYwMDA0OEIxMDEwMDQwMDAwMDAxRjBDRDAxMDA0MDAwMDAwMzczCis6MTBFMTcwMDBGMEM5MDEwMDQwMDAwMDAwRTBDOTAxMDAwMDAwMkU1MDdECis6MTBFMTgwMDA0OUMxMDEwMDAwMDAwMDA2RjFCMTAxMDAwMDAwMDAwM0Q4Cis6MTBFMTkwMDBGMEIxMDEwMDMwOTQ2MjQyNjEzMTAwMDAyMDAwMDAxMEIzCis6MTBFMUEwMDA2MkREMDEwMDMxOTRBODQwODEzMjAwMDBBMDAwMDBBNDhCCis6MTBFMUIwMDA2MkREMDEwMDMzOTRBODAwRTAzMTAwMDAwMDAwRjI0MDZECis6MTBFMUMwMDA4MUIyMDEwMDMwODAwMDRBNDRDOTAxMDAwMDAwMDAwNjBECis6MTBFMUQwMDBGMUIxMDEwMEMwQTgzRDQ2MERFMDAxMDBGRjdGMDBBMUE0Cis6MTBFMUUwMDBGMDg5MDEwMDAyMDAwMDA5OTZGNDAxMDAwMDAwMDA0NkQ5Cis6MTBFMUYwMDA5N0UwMDEwMDAwMDA2MEE4OTdDMDAxMDAzRDk0NjM0MkQxCis6MTBFMjAwMDA2MTMxMDAwMDMwMDAwMDRBNjJDOTAxMDAzRTk0QTg0MDFDCis6MTBFMjEwMDA4MTMyMDAwMDAwMDBGMzQwODFCMjAxMDAwMDk5M0Y0MkNBCis6MTBFMjIwMDA5N0YwMDEwMDQyOTQ2NTQwODEzMjAwMDA0QTk0MjJGMzQ1Cis6MTBFMjMwMDA3NDA2MDAwMDNGMDAwMEYzOTQ4ODAxMDAwMDAwMDAwNzBFCis6MTBFMjQwMDBFNzg1MDEwMDAwMDA3NTU1NjFCMTAxMDAwMDAwMDA0QTNBCis6MTBFMjUwMDA2MkIxMDEwMDAwMDBBODQwODFCMjAwMDA0Nzk0MDA0MDc0Cis6MTBFMjYwMDA4MUIyMDAwMDAwMDBGNTQwODFCMjAxMDAwMDAwMDBBODZBCis6MTBFMjcwMDAzNkIwMDEwMDVBOTQ4MjQxMjM0MDAwMDA0Rjk0QTI0NERBCis6MTBFMjgwMDAxRjdDMDAwMEJEOTEwMDAxOEMzMDAxMDAyMDgwMDAxMDM3Cis6MTBFMjkwMDA0MkM5MDEwMDU1OTQyMjQwRTM2RDAwMDAwMDAwMDA0Mzk0Cis6MTBFMkEwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA1Mjk0QTg0MEZECis6MTBFMkIwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDA0MUU1Cis6MTBFMkMwMDAyM0IwMDEwMDAwMDAwMDEwMzJCMDAxMDA1QTk0MjI0MTM2Cis6MTBFMkQwMDAxOTdDMDAwMEM2OTIwMDQzMjMzMDAxMDAwMDAwMDA0MTc5Cis6MTBFMkUwMDAyM0IwMDEwMDVDOTRBMzE1MEM2QzAwMDA1RDk0MDAwNjQzCis6MTBFMkYwMDAwNEIwMDAwMDAwMDAwMDE1MDRCMDAxMDA1Rjk0MjAwMjhCCis6MTBFMzAwMDAxQTZDMDAwMDAwMDAwMDBEMDRCMDAxMDAxRTk1MDAwNTBECis6MTBFMzEwMDA0ODMxMDEwMDg5OTQyMjAyMTQ1MDAwMDA2Mzk0QTIwMjQzCis6MTBFMzIwMDAyQTUwMDAwMDg5OTRBMjQ1MUY3QzAwMDA2NTk0MjIwMkI3Cis6MTBFMzMwMDAwQzUwMDAwMDZFOTQwMDAyMTZDMDAwMDA2RDk0MjI1QzI4Cis6MTBFMzQwMDAxRjdDMDAwMDMwODAwMDEwNDJDOTAxMDA2RDk0MjI0MDAzCis6MTBFMzUwMDBFMzZEMDAwMDAwMDAwMDQ3NjFCMTAxMDA0MDAwMDAxMEMzCis6MTBFMzYwMDA2MkREMDEwMDY5OTRBODQwODEzMjAwMDBBRjgyMDA4ODFDCis6MTBFMzcwMDAxQ0IwMDAwMDAwMDAwMDA1NDhCMTAxMDAwODk0MDA1Q0RBCis6MTBFMzgwMDAxRjAwMDEwMDg5OTQyMjE1ODAzMjAwMDAwMDAwMDA1MDE3Cis6MTBFMzkwMDAzM0MwMDEwMDg4OTRBMjAyMUE1MDAwMDA3QTk0MjI0NkU5Cis6MTBFM0EwMDAxRjdDMDAwMDcwODAwMDAzNDJDOTAxMDAwMDAwMDA0NjhECis6MTBFM0IwMDAxRjgwMDEwMDdBOTQyMjQwRTM2RDAwMDAwMDAwMDA0MkJCCis6MTBFM0MwMDA2MUIxMDEwMDQwMDAwMDEwNjJERDAxMDA3Njk0QTg0MEI4Cis6MTBFM0QwMDA4MTMyMDAwMEFGODIwMDg4MUNCMDAwMDAwMDAwMDAwNTAwCis6MTBFM0UwMDA0OEIxMDEwMDBDODAwMDAzNDJDOTAxMDAxMDAwMDBGMDk4Cis6MTBFM0YwMDAxMEM4MDEwMDJGMDAyRjVDMTE4MDAxMDAwMDAwMDA0N0IxCis6MTBFNDAwMDBFNzkxMDEwMEYwMDcwMDQwMUI5ODAxMDA0Qzk0MjAxNTkzCis6MTBFNDEwMDAxQTZDMDAwMDcwMDAwMDAzNDhDOTAxMDAwMDAwMjI1MDdGCis6MTBFNDIwMDBGMUIxMDEwMDAwMDAwMDAzRjBCMTAxMDBGRjA3MDAwODk2Cis6MTBFNDMwMDBFMDhEMDEwMDAwMDAwMDQyNjFCMTAxMDBBMDAwMDBBNEQ1Cis6MTBFNDQwMDA2MkREMDEwMDg1OTRBODQ2MUYxMDAwMDA0Qzk0MDAwNTcxCis6MTBFNDUwMDA0OEIxMDAwMDRDOTQwMDAyMTBDMDAwMDA4Qjk0QTI0NDBDCis6MTBFNDYwMDAxRjdDMDAwMEJEOTEwMDAxOEMzMDAxMDAwMDAwMDAxQkVBCis6MTBFNDcwMDAxMEIxMDAwMDAwODAwMDEwNDRDOTAxMDAwQzAwMDA0MEYxCis6MTBFNDgwMDBGMTk5MDEwMDEwMDAwMDA4RjBDOTAxMDAwMDAwMDAxNjE5Cis6MTBFNDkwMDBGMEIxMDEwMDEwMDAwMDAzRTBDOTAxMDAwMDAwMDA0NUQ4Cis6MTBFNEEwMDA2MUIxMDEwMDIwMDAwMDEwNjJERDAxMDAwMDAwQTg1Q0U1Cis6MTBFNEIwMDAxRjkwMDAwMDkyOTQwMDQwODFCMjAwMDAxNzAwMDBEMDJECis6MTBFNEMwMDBBMkM5MDEwMDAwMDBBMjQwMjdFQzAwMDAwMDAwMDAyMENCCis6MTBFNEQwMDAwMEIwMDEwMEIwOTIwMDQxQTM0MTAxMDA5Njk0MDA0MUI4Cis6MTBFNEUwMDAyN0QwMDAwMDEwMDAwMDA3OTZFNDAxMDAwMDAwMDA0QjU4Cis6MTBFNEYwMDA4MDk0MDEwMDAwMDAwMDU0NjFCMTAxMDAwMDgwMDA0MEUwCis6MTBFNTAwMDA2MkREMDEwMDAwMDBBODQwODFCMjAwMDA5RDk0MDA0MDNGCis6MTBFNTEwMDA4MUIyMDAwMEVGOTQwMDQwMkIzMDAxMDBBQzAwMkQwNkNBCis6MTBFNTIwMDAxNkMwMDEwMDkwMDAyREYwMTZDNDAxMDBBNTk0QTBGMEMzCis6MTBFNTMwMDAxNjQ0MDAwMDAwMDAwMDQxMTdDMDAxMDAwRTAwMDBBMkI4Cis6MTBFNTQwMDA0NEM5MDEwMDAwMDA2Q0YwMzBCMDAxMDBBQzAwMkQ0MDY3Cis6MTBFNTUwMDA4N0IwMDEwMDAwMDA2Q0YwMjhCMDAxMDBBRTk0MjI0QUEwCis6MTBFNTYwMDAxOTdDMDAwMDAwMzAwMDQzODZDODAxMDAwMDMwMDAwQjE5Cis6MTBFNTcwMDAxNkM4MDEwMEFFOTRBNDQwODEzMjAwMDAwMDAwMDA0MUEyCis6MTBFNTgwMDAxN0MwMDEwMENGOTQyMjA2ODAzMjAwMDBCQjk0QTIwNjdGCis6MTBFNTkwMDAxNDZDMDAwMEI4OTQyMjQ4MTk3QzAwMDBCMzk0QTA0MTg4Cis6MTBFNUEwMDAxNzQwMDAwMDAwMDAwMDQxMTdDMDAxMDAwMDAwMDA0MUJBCis6MTBFNUIwMDAzMUMwMDEwMDkwMDAyMDE4RTBCMTAxMDA4QjAwMkQ0ODBGCis6MTBFNUMwMDAxOTgwMDEwMDhCMDAyMDQ1RTc5MTAxMDBCQjk0MDA0MEI5Cis6MTBFNUQwMDA4NzkwMDAwMDA4MDAwMDQzODY5ODAxMDBCQjk0QTA0ODgzCis6MTBFNUUwMDAxNzQwMDAwMDAwMDAwMDQxMTdDMDAxMDBCMDAwMDA0MENCCis6MTBFNUYwMDA0Mzk5MDEwMDEwNTAwMDQzRkNDOTAxMDAyNjk1MDAzMEVBCis6MTBFNjAwMDA4MTMwMDEwMDAwMDAwMDQwRTVCMTAxMDBDNjk0MjI0QUJCCis6MTBFNjEwMDAxOTdDMDAwMDA4MDAwMEEyNDRDOTAxMDBDQzAwMkRBQjA5Cis6MTBFNjIwMDBGOUIxMDEwMDAwMDAwMEFCMTdDMDAxMDBDNTk0QTBGMEQzCis6MTBFNjMwMDAxNjQ0MDAwMDAwMDAwMDQxMTdDMDAxMDBDQTk0NjRGMEI1Cis6MTBFNjQwMDA4MkIwMDAwMEE0MDAwMDQwNDc5OTAxMDBDQTk0QTJGMkUxCis6MTBFNjUwMDA4MDMyMDAwMDAwMDAwMDQxRTVCMTAxMDA4QzAwMjAxODZDCis6MTBFNjYwMDBFMEIxMDEwMDkwMDAwMDQwNDU5OTAxMDAwMDAwNjAwNjAzCis6MTBFNjcwMDAzMEMwMDEwMDAwMDA4NjBDODBCMjAwMDBCQzAwMkQ0NkI2Cis6MTBFNjgwMDAxOTkwMDEwMEEwMDBBMEYyRTRCMTAxMDBCMDAwMDA0MDI4Cis6MTBFNjkwMDA0Mzk5MDEwMDEwNTAwMDQzRkNDOTAxMDAyNjk1MDAzMDQ5Cis6MTBFNkEwMDA4MTMwMDEwMDAwMDBBMjRBMTlGQzAwMDAwODAwMDBBMjBECis6MTBFNkIwMDA0NEM5MDEwMENDMDAyREFCRjlCMTAxMDAwMDAwMDBBQjUyCis6MTBFNkMwMDAxN0MwMDEwMEQ4OTRBMEYwMTY0NDAwMDAwMDAwMDA0MURCCis6MTBFNkQwMDAxN0MwMDEwMDAwMDBFNEYwODJCMDAxMDAwMDgwMDAxMENCCis6MTBFNkUwMDA0NEM5MDEwMDAwMDAwMDQxRjBCMTAxMDAwMDAwMDAwMzM2Cis6MTBFNkYwMDBGMEIxMDEwMDAwMDAwMDAwRjBCMTAxMDAwMDAwMDAxMEM2Cis6MTBFNzAwMDA2MkIxMDEwMDAwMDBBODFCRTBCMTAwMDBERDk0MDA0MEYwCis6MTBFNzEwMDA4MUIyMDAwMDAwRjAwMDBDN0U4OTAxMDAwMDAwQTY0Q0QwCis6MTBFNzIwMDA5NTYwMDEwMDAwMDA4MDRBMTg5NDAxMDAwMDgwMDAxMEVDCis6MTBFNzMwMDA0NEM5MDEwMDA0MDAyMjAxRjAzMTAwMDAyMDAwMDA0MDIzCis6MTBFNzQwMDBGMEM5MDEwMDAwMDAwMDE2RjBCMTAxMDAwMDAwMDA0MzE0Cis6MTBFNzUwMDA2MUIxMDEwMDIwMDAwMDEwNjJERDAxMDAwMDAwQTgxNTc5Cis6MTBFNzYwMDBFMEIxMDAwMEU4OTQwMDQwODFCMjAwMDAxMDgwMDAwMzk2Cis6MTBFNzcwMDA0NEM5MDEwMDAwMDAwMDA2RjBCMTAxMDAwMDAwMDAwMUUyCis6MTBFNzgwMDBGMEIxMDEwMDAwMDBFODVGMTc5MDAxMDA3MDAwMDA0MDQ4Cis6MTBFNzkwMDA0Mzk5MDEwMDdBMDEyRUZFOTJCMDAxMDA4QjAwMkRGNjA0Cis6MTBFN0EwMDAxNkIwMDEwMEY1OTQyMjQzRTc3RDAwMDAwMDAwMDA0NDBDCis6MTBFN0IwMDA0NUMxMDEwMDA0MDAwMEE2MkFCMDAxMDAyODAwNkUwNjMxCis6MTBFN0MwMDA4MkM4MDEwMEY5OTQyMjRBMTk3QzAwMDAwMDAwMDA0MjJFCis6MTBFN0QwMDA0NUQxMDEwMDAwMDA2RTRDODNDMDAxMDAwMDAwMDA0MUUzCis6MTBFN0UwMDA5MkMwMDEwMEZBOTQ0MzMwM0QwNzAwMDAwMDAwNjY5RThECis6MTBFN0YwMDA4M0IwMDEwMDAwMDAxQjQxM0RDMzAxMDAwMDAwMDA0MTQ3Cis6MTBFODAwMDA5MkMwMDEwMDA2MDAwMEEyNDRDOTAxMDAxMDAwMDA0OUE2Cis6MTBFODEwMDA5OEY0MDEwMDAzOTUyNjMwOTMwNDAwMDAwMzk1OTA0QzcyCis6MTBFODIwMDA5MjQwMDAwMDAwMDAwMDQxOTNDMDAxMDBGRkZGODA0OUJBCis6MTBFODMwMDBFQ0E5MDEwMDAwODAwMDEwNDRDOTAxMDAwNDAwMjIwMTdECis6MTBFODQwMDBGMDMxMDAwMDAwMDAwMDA5RjBCMTAxMDAwMDAwMDAxOEU0Cis6MTBFODUwMDBGMEIxMDEwMDIwMDAwMDEwNjJERDAxMDAwMDAwQTgxNUU5Cis6MTBFODYwMDBFMEIxMDAwMDA4OTUwMDQwODFCMjAwMDAxNTk1MjI1RkRDCis6MTBFODcwMDA4MTdDMDAwMDE0OTVBMjQwMTk3QzAwMDAwMDAwMDA0MDNCCis6MTBFODgwMDAxOTkwMDEwMDAwMDAwMDU0NjFCMTAxMDAxMDAwMDAwNzYwCis6MTBFODkwMDA5NkU0MDEwMDAwMDAwMDRGOTc5NDAxMDAwMDAwMDA0QjM3Cis6MTBFOEEwMDA2MkIxMDEwMDE0OTUyODQwODEzMjAwMDAxMTk1MDA0MEFBCis6MTBFOEIwMDA4MUIyMDAwMDAwMDBBMjIxODE4NDAwMDAxODk1QTI1RkFGCis6MTBFOEMwMDA4MTZDMDAwMDAwMDBBMjQzMTk3QzAxMDAwMDAwMDA0MzlECis6MTBFOEQwMDAxOTkwMDEwMDAwMDAwMDU0NjFCMTAxMDAxMDAwMDAwNzEwCis6MTBFOEUwMDA5NkU0MDEwMDAwMDAwMDQwOTY5NDAxMDAwMDAwMDA0QkY3Cis6MTBFOEYwMDA2MkIxMDEwMDAwMDBBODQwODFCMjAwMDAxQjk1MDA0MEY5Cis6MTBFOTAwMDA4MUIyMDAwMDAwODAwMDE5NDRDOTAxMDAwNDAwMjIwMjA1Cis6MTBFOTEwMDBGMDMxMDAwMDAwMDAwMDBCRjBCMTAxMDAwMDAwMDAxMzE2Cis6MTBFOTIwMDBGMEIxMDEwMDAwMDAwMDQzNjFCMTAxMDAyMDAwMDAxOUI2Cis6MTBFOTMwMDA2MkREMDEwMDAwMDBBODA4RTBCMTAwMDAyMzk1MDA0MDVFCis6MTBFOTQwMDA4MUIyMDAwMDdDMDAyREYwODRCMDAxMDAwMjAwMDBGMEQ0Cis6MTBFOTUwMDA5OEY0MDEwMDJDOTUyMDRDODQ2QzAwMDA4ODAwMDA0MDQ1Cis6MTBFOTYwMDA0Mzk5MDEwMDJDOTUyMEYyODQ2QzAwMDAwMDAwMDA0MEM3Cis6MTBFOTcwMDA4NUIwMDEwMDk4MDAyRDE0ODJCMDAxMDAwMDAwMDBGMDY1Cis6MTBFOTgwMDA5OEIwMDEwMEEzMDAyRDE0OThEMDAxMDAzMTk1MjA0Q0JGCis6MTBFOTkwMDA4NDZDMDAwMDAwMDAwMDRDODRCMDAxMDAwMDAwMDBGMzEzCis6MTBFOUEwMDA4MEUwMDEwMDM0OTUyMzQwODQ2QzAwMDAwMDAwMDA0MEFBCis6MTBFOUIwMDA4NEIwMDEwMEQwMDAyMDE0RTBCMTAxMDA5ODAwMjU0MjhECis6MTBFOUMwMDA4MEIwMDEwMDAwMDA2RUYzODBGMDAxMDAwMDAwQTY0MjVDCis6MTBFOUQwMDA4MkMwMDAwMDNBOTVBMDQwMTY0MDAwMDAwMDAwMDA0MUFGCis6MTBFOUUwMDAxN0MwMDEwMDAwMDA5RkYwODJFQzAwMDA5ODAwQTA0MUQ5Cis6MTBFOUYwMDBFMEIxMDEwMDAwMDAyRTEwNDhCMTAxMDBBODAxMDA0MDY0Cis6MTBFQTAwMDBGMTk5MDEwMDAwMDAwMDA1RjBCMTAxMDAwOTAwMDAwN0M0Cis6MTBFQTEwMDA5NkU0MDEwMDAwMDA2MEE3OTdDMDAxMDAwMDAwMDAxMDBDCis6MTBFQTIwMDA2MkIxMDEwMDAwMDBBODQwODFCMjAwMDA0MTk1MDA0MEExCis6MTBFQTMwMDA4MUIyMDAwMEE4MDAyRDFDOEFCMDAxMDAwMDAwOUZGMEU4Cis6MTBFQTQwMDA4QUQwMDAwMDAwMDBBMjQwOEJFQzAwMDA4QTAwMjA0MDI5Cis6MTBFQTUwMDBFN0IxMDEwMEI0MDAwMDQwNDc5OTAxMDBBNDAwMkQ0NTMyCis6MTBFQTYwMDBFMEQxMDEwMDRFOTU5QzE3ODAzMjAwMDBCRTAwMkZBQjE0Cis6MTBFQTcwMDA4M0IwMDEwMEExOTUwMDE0ODI1MDAxMDA1Mzk1MDA0MDFECis6MTBFQTgwMDA4MUIyMDAwMDUzOTUyMkYyODIzMDAwMDA4QzAwMDA0MEQ5Cis6MTBFQTkwMDA0Mzk5MDEwMDUzOTU5RjFDRTA2RDAwMDBCRTAwMDA0MEFCCis6MTBFQUEwMDA0Nzk5MDEwMEExOTUwMDQwODEzMjAxMDBBODAwMjAxQzc3Cis6MTBFQUIwMDBFMEIxMDEwMDlDMDAyRDMwODFCMDAxMDA4ODAwMkRGMEY0Cis6MTBFQUMwMDA4NEIwMDEwMDk0MDAyREYyODZCMDAxMDA2Njk1MjNGMDE5Cis6MTBFQUQwMDA4NDZDMDAwMDVCOTUyMzkyODc2QzAwMDBDOTA0MDBBNjNCCis6MTBFQUUwMDA5NEIwMDEwMDVEOTUwMDQwODFCMjAwMDAyMDAwMDBBNkI2Cis6MTBFQUYwMDA5NEIwMDEwMDYwODkwMDRBOTQ5ODAxMDA1RDk1Njg0MEQ3Cis6MTBFQjAwMDA4MTMyMDAwMDAwMDAwMDRBQjBCMTAxMDBCRjAwMkQ0Mjc4Cis6MTBFQjEwMDBCMkIxMDEwMDkwMDAyREYzODBFMDAxMDA2MTk1RDQ0MDc2Cis6MTBFQjIwMDA4MTMyMDAwMDAwMDA3OERBODRDMDAxMDA2Qjk1MjM0MDM4Cis6MTBFQjMwMDA4NDZDMDAwMDk0MDAyMDlERTFCMTAxMDA2Qjk1MDA0MEMxCis6MTBFQjQwMDA4NEIwMDAwMEJGMDAyRDQzODRDMDAxMDA5MDAwMkRGMzZECis6MTBFQjUwMDA4MEUwMDEwMDZCOTUyMzQwODQ2QzAwMDA5NDAwMjA5REIwCis6MTBFQjYwMDBFMUIxMDEwMDAwMDAwMDQwODRCMDAxMDA2Rjk1QTJGMDA3Cis6MTBFQjcwMDAzODZDMDAwMDlDMDAyMDQyRTBCMTAxMDAwMDAwMDA1RjAyCis6MTBFQjgwMDAxMzk0MDEwMDAwMDA4MDQ2MTk4MDAxMDA5QzAwMjA0MjdGCis6MTBFQjkwMDBFMEIxMDEwMDM3MDAwMDQwNDM5OTAxMDAwNDAwMDBGMzk4Cis6MTBFQkEwMDA4MEY0MDEwMDBGMDAwMEYzODI4ODAxMDA3NTk1MjM0MTc1Cis6MTBFQkIwMDA4MDZDMDAwMDAwMDAwMDVGMTM5NDAxMDAwMDAwODkwQ0NECis6MTBFQkMwMDA4MEIyMDAwMEJDMDAwMDQwNDM5OTAxMDBBMDAwQTBGMjA4Cis6MTBFQkQwMDBFNEIxMDEwMDAwMDA5RjQxMjRFQzAwMDA3Rjk1QTY0MEI1Cis6MTBFQkUwMDA4MTMyMDAwMDAwMDA5RjQyMzhFQzAwMDA3Rjk1QTY0MDczCis6MTBFQkYwMDA4MTMyMDAwMEI0MDAwMDQwNDM5OTAxMDA4MTk1QTNGMEU4Cis6MTBFQzAwMDAzQTZDMDAwMDAwMDA4MDQwODFCMjAxMDBCNDAwMDA0MDc2Cis6MTBFQzEwMDA0Mzk5MDEwMDg1OTUyMkYwM0E2QzAwMDBCNDAwMjAxRDU0Cis6MTBFQzIwMDBFMEIxMDEwMDgwMDAyRDVGMTM5NDAxMDA4NTk1MjNGMDcxCis6MTBFQzMwMDAzQTZDMDAwMDgwMDAyMDFERTBCMTAxMDBDMDAwMjAxMkVECis6MTBFQzQwMDBFMEIxMDEwMEM0MDBBMDFDRTBCMTAxMDAwMDgwMDAwMzlECis6MTBFQzUwMDA0NEM5MDEwMDAwMDAwMDQyRTBCMTAxMDAxMjAwMDA0MDgwCis6MTBFQzYwMDA4Nzk4MDEwMDhFOTU5RjQxMjQ2QzAwMDAwMDAwMDA0MUIwCis6MTBFQzcwMDA4Q0IwMDEwMDAwMDAwMDEyOENEMDAxMDA4Rjk1MDA0MTgzCis6MTBFQzgwMDAyNEIwMDAwMDAwMDAwMDQwOERCMDAxMDBERjk1MDA0MDdFCis6MTBFQzkwMDA4MTMyMDEwMDAwMDAwMDQ1NjFCMTAxMDA0MDAwMDAxMDE4Cis6MTBFQ0EwMDA2MkREMDEwMDAwMDBBODQwODFCMjAwMDA5MTk1MDA0MEEzCis6MTBFQ0IwMDA4MUIyMDAwMEEyOTIwMDQwODEzMjAxMDAwMDAwMDAxNkUzCis6MTBFQ0MwMDA4MEIyMDEwMDAwMDBBNzA4ODAzMjAxMDA5OTk1QTI0MDlGCis6MTBFQ0QwMDA5NTZDMDAwMEIwOTIwMDQwODEzMjAxMDAwMDgyMDBBNkQ1Cis6MTBFQ0UwMDAwNEIwMDEwMDAwMDAwMDQwMkRCMDAxMDBBMDk4MkY0MEFBCis6MTBFQ0YwMDAxMUIwMDEwMDMwMDUwMDQxODlCMDAwMDAwMDAwOUZGODBDCis6MTBFRDAwMDAzRUVDMDAwMDAwMDA5RjEyRTBFRDAwMDBDODAwMjBBQkM4Cis6MTBFRDEwMDBFMUIxMDEwMENDMDBBMDFGRTBCMTAxMDBBMzk1QTM1RjA5Cis6MTBFRDIwMDBFNzZEMDAwMDAwMDAwMDQxRTdDMTAxMDBBNjAwMDA0MEJGCis6MTBFRDMwMDA0Nzk5MDEwMEI3OTUyMkYyODYzMDAwMDAwMzAwMDA0Mzk2Cis6MTBFRDQwMDA4NEY0MDEwMDAxMDAwMDQxODBDQzAxMDBCODAwMkQ0Mjk0Cis6MTBFRDUwMDA4MEQwMDEwMDAwMDA2MjQwODZDMDAxMDBBQjk1MUY0M0Q3Cis6MTBFRDYwMDA4MDMyMDAwMEFDOTVBMjQwODc2QzAwMDAwMDAwNjI0MTM4Cis6MTBFRDcwMDA4N0IwMDEwMEIwOTU5RjQwODAzMjAwMDAwMDAwMDA0MDQ1Cis6MTBFRDgwMDA4NUIwMDEwMDAwMDAwMDQwODREMDAxMDAwMDAwMDA0Mjc2Cis6MTBFRDkwMDA4MEIwMDEwMDAwMDAwMEYyODhCMDAxMDAwMjAwMDA0NEQxCis6MTBFREEwMDA4NEY0MDEwMEI4MDAyRTQyODBEMDAxMDAwMDAwNjI0MENGCis6MTBFREIwMDA4OEMwMDEwMEI2OTUxRjQ0ODAzMjAwMDBCQTk1QTI0MDc5Cis6MTBFREMwMDA4OTZDMDAwMEJBOTU2MjQxODlCMDAwMDAwMzAwNjI0MTdECis6MTBFREQwMDA4NkU0MDEwMEI4MDAwMDQwNDU5OTAxMDAwMTAwNjI0MTRECis6MTBFREUwMDA4OEU0MDEwMEE0MDAyMDQwRTVCMTAxMDBBMjAwMjA0MDE5Cis6MTBFREYwMDBFN0IxMDEwMEJDMDAyRTQzODdGMDAxMDAwMDAwMDA0NDkxCis6MTBFRTAwMDA4NkMwMDEwMEMwOTUyMDQzODc2QzAwMDAwMDAwODA0MzRECis6MTBFRTEwMDBFNUIxMDEwMDQwMDEwMDQzODBDRTAxMDAwMDAwQTQ0M0ExCis6MTBFRTIwMDBFNDMxMDEwMDQwMDFFMjQwODc5ODAxMDA4ODAwMkQ0NDUwCis6MTBFRTMwMDA4MUIwMDEwMDkwMDAyREYyMkVCMDAxMDA5QzAwMkRGMDU5Cis6MTBFRTQwMDA4NkIwMDEwMDkwMDAyREYwODJCMDAxMDBCQTAwMkRGMEQ0Cis6MTBFRTUwMDA5OEIwMDEwMENEOTVBMjEyOTg2QzAwMDBCQzAwMkRGMjc0Cis6MTBFRTYwMDA5OEIwMDEwMENEOTVBMEYyOTg2QzAwMDAwMDAwMDAxNzRBCis6MTBFRTcwMDA4MkIwMDEwMDlDMDAyMDQxRTBCMTAxMDBCNDAwMkQxMkRECis6MTBFRTgwMDA4NkQwMDEwMEQwOTVBMzQxRTA2RDAwMDBEMTk1MDBGMDNGCis6MTBFRTkwMDA4NEIwMDAwMDAwMDAwMDQxODRCMDAxMDA4MDAwMkQ0M0Q4Cis6MTBFRUEwMDA4NEQwMDEwMEQ0OTU5RjQyODAzMjAwMDAwMDAwMDA0MEQxCis6MTBFRUIwMDA4NUIwMDEwMEQ2OTVBMzQyMTQ2QzAwMDBENzk1MDAwQUQ2Cis6MTBFRUMwMDAwQ0IwMDAwMDAwMDAwMDQyMENCMDAxMDBEOTk1QTAxNzYyCis6MTBFRUQwMDAwQzZDMDAwMDAwMDA4MDE3MENCMDAxMDBERTk1MjI0MDkxCis6MTBFRUUwMDAwRDZDMDAwMDAwMDBBMDBBMENFQzAwMDAwMTAwMDBGMDE2Cis6MTBFRUYwMDA4MkY0MDEwMERFOTVBMDQxMEM2QzAwMDAwMDAwQTJGMDNECis6MTBFRjAwMDA4MDMyMDEwMDAwMDA4MDQwODFCMDAxMDBCNDkyMDA0MEQ2Cis6MTBFRjEwMDA4MTMyMDEwMDA0ODAwMDAzNDRDOTAxMDAwMDAwMDA0NjYyCis6MTBFRjIwMDBGMEIxMDEwMDAwMDAwMDQwRjFCMTAxMDAwMDAwNjA0MUJCCis6MTBFRjMwMDA4Nzk0MDEwMDAwODAwMDEwNDRDOTAxMDAwMDAwMDA1MEM3Cis6MTBFRjQwMDBGMUIxMDEwMDAwMDAwMDQ4RjBCMTAxMDAwMDAwMDA0OUVCCis6MTBFRjUwMDBGMEIxMDEwMDAwMDAwMDAzRTBCMTAxMDAwMDAwMDA0NTM1Cis6MTBFRjYwMDA2MUIxMDEwMDIwMDAwMDEwNjJERDAxMDAwMDAwQTg1RDE5Cis6MTBFRjcwMDAwNTkwMDAwMEVBOTUwMDQwODFCMjAwMDAwMDAwMkU0QjkxCis6MTBFRjgwMDAxOTkwMDEwMDA1MDAyQTBDRTRCMTAxMDAwMDAwODAwNDgyCis6MTBFRjkwMDBFNkIxMDEwMEYwOTU0NTQ4NjEzMTAwMDAwMDEwMDAwODFECis6MTBFRkEwMDA2MkREMDEwMEY1OTUyODQwODczMDAwMDBGMTk1MjI0ODg4Cis6MTBFRkIwMDA3NzdEMDAwMDk1OTQxRDQ2ODdCMDAwMDBGODk1MjI1RjhDCis6MTBFRkMwMDAxMTdDMDAwMDA0MDAyMjE1NjIzMTAwMDBGNjk1QTg0MDczCis6MTBFRkQwMDA4MTMyMDAwMDAwMDA5RDQwODFCMjAxMDAwMDAwMDA0MDJECis6MTBFRkUwMDA0OUIxMDEwMDAwMTQyRjRDODNCMDAxMDAwMDAwMDA0MDIzCis6MTBFRkYwMDBGMUIxMDEwMEZCOTVBMjQxODM1MDAwMDAwMDAwODA0MDY4Cis6MTBGMDAwMDA4MUIyMDEwMDAwMDAwMDQwNDlCMTAxMDAzMDAwMDA0MDIxCis6MTBGMDEwMDBBMTk5MDEwMDAwMDAwMDQwOTNCMDAxMDAwMDAwMDA0MEYxCis6MTBGMDIwMDAxRkIwMDEwMDRFOTYwMDQ5OTYzMDAxMDAwNzAwMDA0OUNDCis6MTBGMDMwMDAwNkU0MDEwMDAwMzkwMDAzMDZDODAxMDAwMDAwMDA0MDlBCis6MTBGMDQwMDAwNUIwMDEwMDIwMDAwMEQwQTBDOTAxMDAwMDAwMDA0MTZGCis6MTBGMDUwMDA5M0MwMDEwMDAyOTZBMDU0OTM2QzAwMDAwMDAwMkUwNTlFCis6MTBGMDYwMDA5N0IwMDEwMDAwODAwMDQwNDk5OTAxMDAwMDAwMDA0MDc1Cis6MTBGMDcwMDBFMUIxMDEwMDAwMDIwMEEyNDRDOTAxMDAwQjk2QTI0MUM3Cis6MTBGMDgwMDA5NzUwMDAwMDAwMDAwMDIwNDlCMzAxMDA1NDk2MDA0MDUyCis6MTBGMDkwMDA0OTMxMDEwMERGOTIwMDQwODEzMjAxMDAwMEI1MkUwOEE1Cis6MTBGMEEwMDA5N0IwMDEwMDAwMDAwMDQwRjFCMTAxMDAxMjk2QTI0MUFBCis6MTBGMEIwMDA5NzUwMDAwMDE4MDAwMDQwOTc5ODAxMDAwMDk3MkU0MERDCis6MTBGMEMwMDA4MUIyMDEwMDAwMDAwMDQwRjFCMTAxMDAxNjk2QTI0MTlBCis6MTBGMEQwMDA5NzUwMDAwMDAwMDAwMDQwNDlCMTAxMDA0MDE4MkUwNTgzCis6MTBGMEUwMDA5N0IwMDEwMDAwMDAwMDQwRjFCMTAxMDAxQTk2QTI0MTYyCis6MTBGMEYwMDA5NzUwMDAwMDU3OTUyMDQwRTdCMTAxMDAzMDk0MDA0MDQwCis6MTBGMTAwMDA0NTk5MDEwMDY0MDAwMDQwRTU5OTAxMDA1Njk1MjA0MEIyCis6MTBGMTEwMDBFN0IxMDEwMEI4OTQyMDQxRTVCMTAxMDBCQTk0MjA0MTYzCis6MTBGMTIwMDBFNUIxMDEwMDk4OTQwMDQwNDU5OTAxMDAwMjAwMDA0MEJCCis6MTBGMTMwMDA5Nzk4MDEwMDAwMDAwMDQwRjFCMTAxMDAyNDk2QTI0MTFGCis6MTBGMTQwMDA5NzUwMDAwMDAwMDAwMDQwOTdCMDAxMDAwMDAwMDA0MDEwCis6MTBGMTUwMDA2RkIxMDEwMDAwMDAwMDRCNjhCMTAxMDAyODk2ODU0MUE1Cis6MTBGMTYwMDA5NzQwMDAwMDgwMDQwMDQwODEzMjAxMDAwMDAwMDA0MDEwCis6MTBGMTcwMDAzOUIzMDEwMDAwMDAwMDQwMzdCMzAxMDAwMDAwMDA0MDM3Cis6MTBGMTgwMDAzNUIzMDEwMDAwMDAwMDQwMzNCMzAxMDAwMDAwMDA0MDJGCis6MTBGMTkwMDA0MUIzMDEwMDAwMDAwMDQwM0ZCMzAxMDBFRTA1MDA0MDE0Cis6MTBGMUEwMDAyNTlCMDEwMDQyMDAwMDQwNEI5QjAxMDAwMDAwMDA0MEY1Cis6MTBGMUIwMDAyRkIzMDEwMDAwMDAwMDQwMkRCMzAxMDAwMDAwMDA0MDBCCis6MTBGMUMwMDA0N0IzMDEwMDAwMDAwMDQwNDNCMzAxMDA2MDAwMDA0MDZECis6MTBGMUQwMDAyQjlCMDEwMDAwMDAwMDU0RUY5MzAxMDAwMDAwMDA1NTNDCis6MTBGMUUwMDBGMTkzMDEwMEZGRkYwMEE1M0M4QjAxMDAwMDAwMDAyQzAzCis6MTBGMUYwMDA1QkIzMDEwMDAwMDAwMDJDNDVCMzAxMDAwMDAwMDA0MDlCCis6MTBGMjAwMDA1OUIzMDEwMDAwMDAwMDQwNTdCMzAxMDAwMDAwMDA0MDY2Cis6MTBGMjEwMDAyN0IzMDEwMDAwMDAwMDQwNTNCMzAxMDA0NDk2QTI1MDAwCis6MTBGMjIwMDBGRDdGMDAwMDQ0OTZBMjUxRkQ3RjAwMDA0NTk2MDA0MEZFCis6MTBGMjMwMDAxREIzMDAwMDUwNDYwMDQwMUQ5QjAxMDAwMEMwMDBBNjA5Cis6MTBGMjQwMDA4OEIzMDEwMEZGM0YwMEE2M0FCMzAxMDAwMEMwMDA5RDUzCis6MTBGMjUwMDAzQjlCMDEwMEI0MDUwMDQwMjM5QjAxMDAwMDAwMDA0MERGCis6MTBGMjYwMDA0REIzMDEwMDA4MEEwMEE2MTRCMzAxMDAwMTAxMDA4QTkxCis6MTBGMjcwMDAxNTlCMDEwMDAwODAwMEE2NTZCMTAxMDAwMDAwODA1RUQxCis6MTBGMjgwMDA1N0I1MDEwMDE4MDAwMDRCMjBFNDAxMDAwNjAwMDA0QkI4Cis6MTBGMjkwMDA5NkU0MDEwMDAwNDMwMDRCOTZDODAxMDAxODAwMDAxMERFCis6MTBGMkEwMDAyMERDMDEwMDAwMDAwMDRCMjA5NDAxMDAwMDAwODA1NzhBCis6MTBGMkIwMDAyMTkwMDEwMDAwOTkyRTBBOTdCMDAxMDAwMDAwMDA0MDQzCis6MTBGMkMwMDBGMUIxMDEwMDU1OTZBMjQxOTc1MDAwMDAwMDAzMDA0MEEzCis6MTBGMkQwMDA5Nzk4MDEwMDAwQTkwMDQwNDU5OTAxMDAwMDAwMDA0MEY2Cis6MTBGMkUwMDBGMUIxMDEwMDU5OTZBMjQxOTc1MDAwMDAzMDAwMDA0MDUyCis6MTBGMkYwMDA5Nzk4MDEwMDAwMDAwMDU1NjFCMTAxMDAwMDAwMDA0QjJCCis6MTBGMzAwMDA2MkIxMDEwMDVEOTZBODQwODEzMjAwMDA1RDk2QTI0MTg1Cis6MTBGMzEwMDA5NzUwMDAwMDAwMDA4MDQwODFCMjAxMDAwMDAwODA0MDUyCis6MTBGMzIwMDA4MUIyMDEwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTBGMzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERGCis6MTBGMzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENGCis6MTBGMzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJGCis6MTBGMzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFGCis6MTBGMzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlGCis6MTBGMzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhGCis6MTBGMzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdGCis6MTBGM0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZGCis6MTBGM0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVGCis6MTBGM0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRGCis6MTBGM0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNGCis6MTBGM0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJGCis6MTBGM0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFGCis6MTBGNDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBFCis6MTBGNDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZFCis6MTBGNDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVFCis6MTBGNDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERFCis6MTBGNDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENFCis6MTBGNDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJFCis6MTBGNDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFFCis6MTBGNDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlFCis6MTBGNDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhFCis6MTBGNDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdFCis6MTBGNEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZFCis6MTBGNEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVFCis6MTBGNEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRFCis6MTBGNEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNFCis6MTBGNEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJFCis6MTBGNEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFFCis6MTBGNTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBECis6MTBGNTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZECis6MTBGNTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVECis6MTBGNTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERECis6MTBGNTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENECis6MTBGNTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJECis6MTBGNTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFECis6MTBGNTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlECis6MTBGNTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhECis6MTBGNTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdECis6MTBGNUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZECis6MTBGNUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVECis6MTBGNUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRECis6MTBGNUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNECis6MTBGNUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJECis6MTBGNUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFECis6MTBGNjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBDCis6MTBGNjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZDCis6MTBGNjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVDCis6MTBGNjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERDCis6MTBGNjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENDCis6MTBGNjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJDCis6MTBGNjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFDCis6MTBGNjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlDCis6MTBGNjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhDCis6MTBGNjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdDCis6MTBGNkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZDCis6MTBGNkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVDCis6MTBGNkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRDCis6MTBGNkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNDCis6MTBGNkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJDCis6MTBGNkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFDCis6MTBGNzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBCCis6MTBGNzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZCCis6MTBGNzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVCCis6MTBGNzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERCCis6MTBGNzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENCCis6MTBGNzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJCCis6MTBGNzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFCCis6MTBGNzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlCCis6MTBGNzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhCCis6MTBGNzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdCCis6MTBGN0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZCCis6MTBGN0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVCCis6MTBGN0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRCCis6MTBGN0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNCCis6MTBGN0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJCCis6MTBGN0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFCCis6MTBGODAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDBBCis6MTBGODEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEZBCis6MTBGODIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEVBCis6MTBGODMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MERBCis6MTBGODQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MENBCis6MTBGODUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEJBCis6MTBGODYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEFBCis6MTBGODcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDlBCis6MTBGODgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDhBCis6MTBGODkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDdBCis6MTBGOEEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDZBCis6MTBGOEIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDVBCis6MTBGOEMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDRBCis6MTBGOEQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDNBCis6MTBGOEUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDJBCis6MTBGOEYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDFBCis6MTBGOTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA5Cis6MTBGOTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY5Cis6MTBGOTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU5Cis6MTBGOTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ5Cis6MTBGOTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM5Cis6MTBGOTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI5Cis6MTBGOTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE5Cis6MTBGOTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk5Cis6MTBGOTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg5Cis6MTBGOTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc5Cis6MTBGOUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY5Cis6MTBGOUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU5Cis6MTBGOUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ5Cis6MTBGOUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM5Cis6MTBGOUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI5Cis6MTBGOUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE5Cis6MTBGQTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA4Cis6MTBGQTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY4Cis6MTBGQTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU4Cis6MTBGQTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ4Cis6MTBGQTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM4Cis6MTBGQTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI4Cis6MTBGQTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE4Cis6MTBGQTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk4Cis6MTBGQTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg4Cis6MTBGQTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc4Cis6MTBGQUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY4Cis6MTBGQUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU4Cis6MTBGQUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ4Cis6MTBGQUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM4Cis6MTBGQUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI4Cis6MTBGQUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE4Cis6MTBGQjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA3Cis6MTBGQjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY3Cis6MTBGQjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU3Cis6MTBGQjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ3Cis6MTBGQjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM3Cis6MTBGQjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI3Cis6MTBGQjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE3Cis6MTBGQjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk3Cis6MTBGQjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg3Cis6MTBGQjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc3Cis6MTBGQkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY3Cis6MTBGQkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU3Cis6MTBGQkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ3Cis6MTBGQkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM3Cis6MTBGQkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI3Cis6MTBGQkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE3Cis6MTBGQzAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA2Cis6MTBGQzEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY2Cis6MTBGQzIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU2Cis6MTBGQzMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ2Cis6MTBGQzQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM2Cis6MTBGQzUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI2Cis6MTBGQzYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE2Cis6MTBGQzcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk2Cis6MTBGQzgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg2Cis6MTBGQzkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc2Cis6MTBGQ0EwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY2Cis6MTBGQ0IwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU2Cis6MTBGQ0MwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ2Cis6MTBGQ0QwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM2Cis6MTBGQ0UwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI2Cis6MTBGQ0YwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE2Cis6MTBGRDAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA1Cis6MTBGRDEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY1Cis6MTBGRDIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU1Cis6MTBGRDMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ1Cis6MTBGRDQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM1Cis6MTBGRDUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI1Cis6MTBGRDYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE1Cis6MTBGRDcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk1Cis6MTBGRDgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg1Cis6MTBGRDkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc1Cis6MTBGREEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY1Cis6MTBGREIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU1Cis6MTBGREMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ1Cis6MTBGREQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM1Cis6MTBGREUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI1Cis6MTBGREYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE1Cis6MTBGRTAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDA0Cis6MTBGRTEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEY0Cis6MTBGRTIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEU0Cis6MTBGRTMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQ0Cis6MTBGRTQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEM0Cis6MTBGRTUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEI0Cis6MTBGRTYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEE0Cis6MTBGRTcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDk0Cis6MTBGRTgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDg0Cis6MTBGRTkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDc0Cis6MTBGRUEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDY0Cis6MTBGRUIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDU0Cis6MTBGRUMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQ0Cis6MTBGRUQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDM0Cis6MTBGRUUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDI0Cis6MTBGRUYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDE0Cis6MTBGRjAwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDAzCis6MTBGRjEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEYzCis6MTBGRjIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEUzCis6MTBGRjMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEQzCis6MTBGRjQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEMzCis6MTBGRjUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEIzCis6MTBGRjYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MEEzCis6MTBGRjcwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDkzCis6MTBGRjgwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDgzCis6MTBGRjkwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDczCis6MTBGRkEwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDYzCis6MTBGRkIwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDUzCis6MTBGRkMwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDQzCis6MTBGRkQwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDMzCis6MTBGRkUwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDIzCis6MTBGRkYwMDA4MUIyMDAwMDA0MDAwMDQwODFCMjAwMDAwNDAwMDA0MDEzCis6MDIwMDAwMDIxMDAwRUMKKzoxMDAwMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDIKKzoxMDAwMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjIKKzoxMDAwMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTIKKzoxMDAwMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDIKKzoxMDAwNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzIKKzoxMDAwNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjIKKzoxMDAwNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTIKKzoxMDAwNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTIKKzoxMDAwODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODIKKzoxMDAwOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzIKKzoxMDAwQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjIKKzoxMDAwQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTIKKzoxMDAwQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDIKKzoxMDAwRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzIKKzoxMDAwRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjIKKzoxMDAwRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTIKKzoxMDAxMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDEKKzoxMDAxMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjEKKzoxMDAxMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTEKKzoxMDAxMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDEKKzoxMDAxNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzEKKzoxMDAxNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjEKKzoxMDAxNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTEKKzoxMDAxNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTEKKzoxMDAxODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODEKKzoxMDAxOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzEKKzoxMDAxQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjEKKzoxMDAxQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTEKKzoxMDAxQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDEKKzoxMDAxRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzEKKzoxMDAxRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjEKKzoxMDAxRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTEKKzoxMDAyMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDAKKzoxMDAyMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjAKKzoxMDAyMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTAKKzoxMDAyMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDAKKzoxMDAyNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzAKKzoxMDAyNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjAKKzoxMDAyNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTAKKzoxMDAyNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTAKKzoxMDAyODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODAKKzoxMDAyOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzAKKzoxMDAyQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjAKKzoxMDAyQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTAKKzoxMDAyQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDAKKzoxMDAyRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzAKKzoxMDAyRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjAKKzoxMDAyRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTAKKzoxMDAzMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkYKKzoxMDAzMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUYKKzoxMDAzMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREYKKzoxMDAzMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0YKKzoxMDAzNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkYKKzoxMDAzNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUYKKzoxMDAzNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUYKKzoxMDAzNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEYKKzoxMDAzODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0YKKzoxMDAzOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkYKKzoxMDAzQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUYKKzoxMDAzQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEYKKzoxMDAzQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0YKKzoxMDAzRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkYKKzoxMDAzRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUYKKzoxMDAzRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEYKKzoxMDA0MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkUKKzoxMDA0MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUUKKzoxMDA0MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDA0MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0UKKzoxMDA0NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkUKKzoxMDA0NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUUKKzoxMDA0NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUUKKzoxMDA0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEUKKzoxMDA0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0UKKzoxMDA0OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkUKKzoxMDA0QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDA0QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEUKKzoxMDA0QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0UKKzoxMDA0RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkUKKzoxMDA0RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUUKKzoxMDA0RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEUKKzoxMDA1MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkQKKzoxMDA1MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUQKKzoxMDA1MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREQKKzoxMDA1MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0QKKzoxMDA1NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkQKKzoxMDA1NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUQKKzoxMDA1NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUQKKzoxMDA1NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEQKKzoxMDA1ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0QKKzoxMDA1OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkQKKzoxMDA1QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUQKKzoxMDA1QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEQKKzoxMDA1QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0QKKzoxMDA1RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkQKKzoxMDA1RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUQKKzoxMDA1RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEQKKzoxMDA2MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkMKKzoxMDA2MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUMKKzoxMDA2MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREMKKzoxMDA2MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0MKKzoxMDA2NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkMKKzoxMDA2NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUMKKzoxMDA2NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUMKKzoxMDA2NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEMKKzoxMDA2ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0MKKzoxMDA2OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkMKKzoxMDA2QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUMKKzoxMDA2QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEMKKzoxMDA2QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0MKKzoxMDA2RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkMKKzoxMDA2RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUMKKzoxMDA2RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEMKKzoxMDA3MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkIKKzoxMDA3MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUIKKzoxMDA3MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREIKKzoxMDA3MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0IKKzoxMDA3NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkIKKzoxMDA3NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUIKKzoxMDA3NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUIKKzoxMDA3NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEIKKzoxMDA3ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0IKKzoxMDA3OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkIKKzoxMDA3QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUIKKzoxMDA3QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEIKKzoxMDA3QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0IKKzoxMDA3RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkIKKzoxMDA3RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUIKKzoxMDA3RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEIKKzoxMDA4MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkEKKzoxMDA4MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUEKKzoxMDA4MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREEKKzoxMDA4MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0EKKzoxMDA4NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkEKKzoxMDA4NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUEKKzoxMDA4NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUEKKzoxMDA4NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEEKKzoxMDA4ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0EKKzoxMDA4OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkEKKzoxMDA4QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUEKKzoxMDA4QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEEKKzoxMDA4QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0EKKzoxMDA4RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkEKKzoxMDA4RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUEKKzoxMDA4RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEEKKzoxMDA5MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjkKKzoxMDA5MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTkKKzoxMDA5MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDkKKzoxMDA5MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzkKKzoxMDA5NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjkKKzoxMDA5NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTkKKzoxMDA5NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTkKKzoxMDA5NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODkKKzoxMDA5ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzkKKzoxMDA5OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjkKKzoxMDA5QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTkKKzoxMDA5QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDkKKzoxMDA5QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzkKKzoxMDA5RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjkKKzoxMDA5RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTkKKzoxMDA5RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDkKKzoxMDBBMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjgKKzoxMDBBMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTgKKzoxMDBBMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDgKKzoxMDBBMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzgKKzoxMDBBNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjgKKzoxMDBBNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTgKKzoxMDBBNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTgKKzoxMDBBNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODgKKzoxMDBBODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzgKKzoxMDBBOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjgKKzoxMDBBQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTgKKzoxMDBBQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDgKKzoxMDBBQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzgKKzoxMDBBRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjgKKzoxMDBBRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTgKKzoxMDBBRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDgKKzoxMDBCMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjcKKzoxMDBCMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTcKKzoxMDBCMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDcKKzoxMDBCMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzcKKzoxMDBCNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjcKKzoxMDBCNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTcKKzoxMDBCNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTcKKzoxMDBCNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODcKKzoxMDBCODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzcKKzoxMDBCOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjcKKzoxMDBCQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTcKKzoxMDBCQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDcKKzoxMDBCQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzcKKzoxMDBCRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjcKKzoxMDBCRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTcKKzoxMDBCRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDcKKzoxMDBDMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjYKKzoxMDBDMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTYKKzoxMDBDMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDYKKzoxMDBDMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzYKKzoxMDBDNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjYKKzoxMDBDNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTYKKzoxMDBDNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTYKKzoxMDBDNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODYKKzoxMDBDODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzYKKzoxMDBDOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjYKKzoxMDBDQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTYKKzoxMDBDQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDYKKzoxMDBDQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzYKKzoxMDBDRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjYKKzoxMDBDRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTYKKzoxMDBDRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDYKKzoxMDBEMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjUKKzoxMDBEMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTUKKzoxMDBEMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDUKKzoxMDBEMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzUKKzoxMDBENDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjUKKzoxMDBENTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTUKKzoxMDBENjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTUKKzoxMDBENzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODUKKzoxMDBEODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzUKKzoxMDBEOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjUKKzoxMDBEQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTUKKzoxMDBEQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDUKKzoxMDBEQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzUKKzoxMDBERDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjUKKzoxMDBERTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTUKKzoxMDBERjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDUKKzoxMDBFMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjQKKzoxMDBFMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTQKKzoxMDBFMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDQKKzoxMDBFMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzQKKzoxMDBFNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjQKKzoxMDBFNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTQKKzoxMDBFNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTQKKzoxMDBFNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODQKKzoxMDBFODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzQKKzoxMDBFOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjQKKzoxMDBFQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTQKKzoxMDBFQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDQKKzoxMDBFQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzQKKzoxMDBFRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjQKKzoxMDBFRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTQKKzoxMDBFRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDQKKzoxMDBGMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjMKKzoxMDBGMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTMKKzoxMDBGMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDMKKzoxMDBGMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzMKKzoxMDBGNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjMKKzoxMDBGNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTMKKzoxMDBGNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTMKKzoxMDBGNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODMKKzoxMDBGODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzMKKzoxMDBGOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjMKKzoxMDBGQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTMKKzoxMDBGQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDMKKzoxMDBGQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzMKKzoxMDBGRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjMKKzoxMDBGRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTMKKzoxMDBGRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDMKKzoxMDEwMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjIKKzoxMDEwMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTIKKzoxMDEwMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDIKKzoxMDEwMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzIKKzoxMDEwNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjIKKzoxMDEwNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTIKKzoxMDEwNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTIKKzoxMDEwNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODIKKzoxMDEwODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzIKKzoxMDEwOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjIKKzoxMDEwQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTIKKzoxMDEwQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDIKKzoxMDEwQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzIKKzoxMDEwRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjIKKzoxMDEwRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTIKKzoxMDEwRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDIKKzoxMDExMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjEKKzoxMDExMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTEKKzoxMDExMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDEKKzoxMDExMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzEKKzoxMDExNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjEKKzoxMDExNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTEKKzoxMDExNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTEKKzoxMDExNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODEKKzoxMDExODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzEKKzoxMDExOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjEKKzoxMDExQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTEKKzoxMDExQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDEKKzoxMDExQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzEKKzoxMDExRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjEKKzoxMDExRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTEKKzoxMDExRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDEKKzoxMDEyMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjAKKzoxMDEyMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTAKKzoxMDEyMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDAKKzoxMDEyMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzAKKzoxMDEyNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjAKKzoxMDEyNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTAKKzoxMDEyNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTAKKzoxMDEyNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODAKKzoxMDEyODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzAKKzoxMDEyOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjAKKzoxMDEyQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTAKKzoxMDEyQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDAKKzoxMDEyQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzAKKzoxMDEyRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjAKKzoxMDEyRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTAKKzoxMDEyRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDAKKzoxMDEzMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUYKKzoxMDEzMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREYKKzoxMDEzMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0YKKzoxMDEzMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkYKKzoxMDEzNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUYKKzoxMDEzNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUYKKzoxMDEzNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEYKKzoxMDEzNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0YKKzoxMDEzODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkYKKzoxMDEzOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUYKKzoxMDEzQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEYKKzoxMDEzQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0YKKzoxMDEzQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkYKKzoxMDEzRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUYKKzoxMDEzRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEYKKzoxMDEzRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkYKKzoxMDE0MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUUKKzoxMDE0MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDE0MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0UKKzoxMDE0MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkUKKzoxMDE0NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUUKKzoxMDE0NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUUKKzoxMDE0NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEUKKzoxMDE0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0UKKzoxMDE0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkUKKzoxMDE0OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDE0QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEUKKzoxMDE0QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0UKKzoxMDE0QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkUKKzoxMDE0RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUUKKzoxMDE0RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEUKKzoxMDE0RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkUKKzoxMDE1MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUQKKzoxMDE1MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREQKKzoxMDE1MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0QKKzoxMDE1MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkQKKzoxMDE1NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUQKKzoxMDE1NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUQKKzoxMDE1NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEQKKzoxMDE1NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0QKKzoxMDE1ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkQKKzoxMDE1OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUQKKzoxMDE1QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEQKKzoxMDE1QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0QKKzoxMDE1QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkQKKzoxMDE1RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUQKKzoxMDE1RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEQKKzoxMDE1RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkQKKzoxMDE2MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUMKKzoxMDE2MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREMKKzoxMDE2MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0MKKzoxMDE2MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkMKKzoxMDE2NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUMKKzoxMDE2NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUMKKzoxMDE2NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEMKKzoxMDE2NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0MKKzoxMDE2ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkMKKzoxMDE2OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUMKKzoxMDE2QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEMKKzoxMDE2QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0MKKzoxMDE2QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkMKKzoxMDE2RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUMKKzoxMDE2RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEMKKzoxMDE2RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkMKKzoxMDE3MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUIKKzoxMDE3MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREIKKzoxMDE3MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0IKKzoxMDE3MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkIKKzoxMDE3NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUIKKzoxMDE3NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUIKKzoxMDE3NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEIKKzoxMDE3NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0IKKzoxMDE3ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkIKKzoxMDE3OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUIKKzoxMDE3QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEIKKzoxMDE3QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0IKKzoxMDE3QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkIKKzoxMDE3RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUIKKzoxMDE3RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEIKKzoxMDE3RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkIKKzoxMDE4MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUEKKzoxMDE4MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREEKKzoxMDE4MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0EKKzoxMDE4MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkEKKzoxMDE4NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUEKKzoxMDE4NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUEKKzoxMDE4NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEEKKzoxMDE4NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0EKKzoxMDE4ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkEKKzoxMDE4OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUEKKzoxMDE4QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEEKKzoxMDE4QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0EKKzoxMDE4QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkEKKzoxMDE4RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUEKKzoxMDE4RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEEKKzoxMDE4RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkEKKzoxMDE5MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTkKKzoxMDE5MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDkKKzoxMDE5MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzkKKzoxMDE5MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjkKKzoxMDE5NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTkKKzoxMDE5NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTkKKzoxMDE5NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODkKKzoxMDE5NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzkKKzoxMDE5ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjkKKzoxMDE5OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTkKKzoxMDE5QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDkKKzoxMDE5QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzkKKzoxMDE5QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjkKKzoxMDE5RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTkKKzoxMDE5RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDkKKzoxMDE5RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjkKKzoxMDFBMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTgKKzoxMDFBMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDgKKzoxMDFBMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzgKKzoxMDFBMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjgKKzoxMDFBNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTgKKzoxMDFBNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTgKKzoxMDFBNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODgKKzoxMDFBNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzgKKzoxMDFBODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjgKKzoxMDFBOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTgKKzoxMDFBQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDgKKzoxMDFBQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzgKKzoxMDFBQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjgKKzoxMDFBRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTgKKzoxMDFBRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDgKKzoxMDFBRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjgKKzoxMDFCMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTcKKzoxMDFCMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDcKKzoxMDFCMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzcKKzoxMDFCMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjcKKzoxMDFCNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTcKKzoxMDFCNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTcKKzoxMDFCNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODcKKzoxMDFCNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzcKKzoxMDFCODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjcKKzoxMDFCOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTcKKzoxMDFCQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDcKKzoxMDFCQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzcKKzoxMDFCQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjcKKzoxMDFCRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTcKKzoxMDFCRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDcKKzoxMDFCRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjcKKzoxMDFDMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTYKKzoxMDFDMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDYKKzoxMDFDMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzYKKzoxMDFDMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjYKKzoxMDFDNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTYKKzoxMDFDNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTYKKzoxMDFDNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODYKKzoxMDFDNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzYKKzoxMDFDODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjYKKzoxMDFDOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTYKKzoxMDFDQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDYKKzoxMDFDQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzYKKzoxMDFDQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjYKKzoxMDFDRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTYKKzoxMDFDRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDYKKzoxMDFDRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjYKKzoxMDFEMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTUKKzoxMDFEMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDUKKzoxMDFEMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzUKKzoxMDFEMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjUKKzoxMDFENDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTUKKzoxMDFENTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTUKKzoxMDFENjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODUKKzoxMDFENzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzUKKzoxMDFEODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjUKKzoxMDFEOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTUKKzoxMDFEQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDUKKzoxMDFEQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzUKKzoxMDFEQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjUKKzoxMDFERDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTUKKzoxMDFERTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDUKKzoxMDFERjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjUKKzoxMDFFMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTQKKzoxMDFFMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDQKKzoxMDFFMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzQKKzoxMDFFMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjQKKzoxMDFFNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTQKKzoxMDFFNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTQKKzoxMDFFNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODQKKzoxMDFFNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzQKKzoxMDFFODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjQKKzoxMDFFOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTQKKzoxMDFFQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDQKKzoxMDFFQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzQKKzoxMDFFQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjQKKzoxMDFFRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTQKKzoxMDFFRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDQKKzoxMDFFRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjQKKzoxMDFGMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTMKKzoxMDFGMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDMKKzoxMDFGMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzMKKzoxMDFGMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjMKKzoxMDFGNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTMKKzoxMDFGNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTMKKzoxMDFGNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODMKKzoxMDFGNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzMKKzoxMDFGODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjMKKzoxMDFGOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTMKKzoxMDFGQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDMKKzoxMDFGQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzMKKzoxMDFGQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjMKKzoxMDFGRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTMKKzoxMDFGRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDMKKzoxMDFGRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjMKKzoxMDIwMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTIKKzoxMDIwMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDIKKzoxMDIwMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzIKKzoxMDIwMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjIKKzoxMDIwNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTIKKzoxMDIwNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTIKKzoxMDIwNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODIKKzoxMDIwNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzIKKzoxMDIwODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjIKKzoxMDIwOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTIKKzoxMDIwQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDIKKzoxMDIwQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzIKKzoxMDIwQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjIKKzoxMDIwRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTIKKzoxMDIwRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDIKKzoxMDIwRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjIKKzoxMDIxMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTEKKzoxMDIxMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDEKKzoxMDIxMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzEKKzoxMDIxMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjEKKzoxMDIxNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTEKKzoxMDIxNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTEKKzoxMDIxNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODEKKzoxMDIxNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzEKKzoxMDIxODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjEKKzoxMDIxOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTEKKzoxMDIxQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDEKKzoxMDIxQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzEKKzoxMDIxQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjEKKzoxMDIxRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTEKKzoxMDIxRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDEKKzoxMDIxRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjEKKzoxMDIyMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTAKKzoxMDIyMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDAKKzoxMDIyMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzAKKzoxMDIyMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjAKKzoxMDIyNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTAKKzoxMDIyNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTAKKzoxMDIyNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODAKKzoxMDIyNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzAKKzoxMDIyODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjAKKzoxMDIyOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTAKKzoxMDIyQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDAKKzoxMDIyQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzAKKzoxMDIyQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjAKKzoxMDIyRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTAKKzoxMDIyRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDAKKzoxMDIyRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjAKKzoxMDIzMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREYKKzoxMDIzMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0YKKzoxMDIzMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkYKKzoxMDIzMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUYKKzoxMDIzNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUYKKzoxMDIzNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEYKKzoxMDIzNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0YKKzoxMDIzNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkYKKzoxMDIzODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUYKKzoxMDIzOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEYKKzoxMDIzQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0YKKzoxMDIzQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkYKKzoxMDIzQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUYKKzoxMDIzRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEYKKzoxMDIzRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkYKKzoxMDIzRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUYKKzoxMDI0MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDI0MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0UKKzoxMDI0MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkUKKzoxMDI0MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUUKKzoxMDI0NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUUKKzoxMDI0NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEUKKzoxMDI0NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0UKKzoxMDI0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkUKKzoxMDI0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDI0OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEUKKzoxMDI0QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0UKKzoxMDI0QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkUKKzoxMDI0QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUUKKzoxMDI0RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEUKKzoxMDI0RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkUKKzoxMDI0RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUUKKzoxMDI1MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREQKKzoxMDI1MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0QKKzoxMDI1MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkQKKzoxMDI1MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUQKKzoxMDI1NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUQKKzoxMDI1NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEQKKzoxMDI1NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0QKKzoxMDI1NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkQKKzoxMDI1ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUQKKzoxMDI1OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEQKKzoxMDI1QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0QKKzoxMDI1QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkQKKzoxMDI1QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUQKKzoxMDI1RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEQKKzoxMDI1RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkQKKzoxMDI1RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUQKKzoxMDI2MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREMKKzoxMDI2MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0MKKzoxMDI2MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkMKKzoxMDI2MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUMKKzoxMDI2NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUMKKzoxMDI2NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEMKKzoxMDI2NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0MKKzoxMDI2NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkMKKzoxMDI2ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUMKKzoxMDI2OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEMKKzoxMDI2QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0MKKzoxMDI2QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkMKKzoxMDI2QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUMKKzoxMDI2RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEMKKzoxMDI2RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkMKKzoxMDI2RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUMKKzoxMDI3MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREIKKzoxMDI3MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0IKKzoxMDI3MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkIKKzoxMDI3MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUIKKzoxMDI3NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUIKKzoxMDI3NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEIKKzoxMDI3NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0IKKzoxMDI3NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkIKKzoxMDI3ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUIKKzoxMDI3OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEIKKzoxMDI3QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0IKKzoxMDI3QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkIKKzoxMDI3QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUIKKzoxMDI3RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEIKKzoxMDI3RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkIKKzoxMDI3RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUIKKzoxMDI4MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREEKKzoxMDI4MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0EKKzoxMDI4MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkEKKzoxMDI4MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUEKKzoxMDI4NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUEKKzoxMDI4NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEEKKzoxMDI4NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0EKKzoxMDI4NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkEKKzoxMDI4ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUEKKzoxMDI4OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEEKKzoxMDI4QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0EKKzoxMDI4QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkEKKzoxMDI4QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUEKKzoxMDI4RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEEKKzoxMDI4RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkEKKzoxMDI4RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUEKKzoxMDI5MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDkKKzoxMDI5MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzkKKzoxMDI5MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjkKKzoxMDI5MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTkKKzoxMDI5NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTkKKzoxMDI5NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODkKKzoxMDI5NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzkKKzoxMDI5NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjkKKzoxMDI5ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTkKKzoxMDI5OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDkKKzoxMDI5QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzkKKzoxMDI5QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjkKKzoxMDI5QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTkKKzoxMDI5RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDkKKzoxMDI5RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjkKKzoxMDI5RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTkKKzoxMDJBMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDgKKzoxMDJBMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzgKKzoxMDJBMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjgKKzoxMDJBMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTgKKzoxMDJBNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTgKKzoxMDJBNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODgKKzoxMDJBNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzgKKzoxMDJBNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjgKKzoxMDJBODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTgKKzoxMDJBOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDgKKzoxMDJBQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzgKKzoxMDJBQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjgKKzoxMDJBQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTgKKzoxMDJBRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDgKKzoxMDJBRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjgKKzoxMDJBRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTgKKzoxMDJCMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDcKKzoxMDJCMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzcKKzoxMDJCMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjcKKzoxMDJCMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTcKKzoxMDJCNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTcKKzoxMDJCNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODcKKzoxMDJCNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzcKKzoxMDJCNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjcKKzoxMDJCODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTcKKzoxMDJCOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDcKKzoxMDJCQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzcKKzoxMDJCQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjcKKzoxMDJCQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTcKKzoxMDJCRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDcKKzoxMDJCRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjcKKzoxMDJCRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTcKKzoxMDJDMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDYKKzoxMDJDMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzYKKzoxMDJDMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjYKKzoxMDJDMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTYKKzoxMDJDNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTYKKzoxMDJDNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODYKKzoxMDJDNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzYKKzoxMDJDNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjYKKzoxMDJDODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTYKKzoxMDJDOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDYKKzoxMDJDQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzYKKzoxMDJDQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjYKKzoxMDJDQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTYKKzoxMDJDRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDYKKzoxMDJDRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjYKKzoxMDJDRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTYKKzoxMDJEMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDUKKzoxMDJEMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzUKKzoxMDJEMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjUKKzoxMDJEMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTUKKzoxMDJENDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTUKKzoxMDJENTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODUKKzoxMDJENjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzUKKzoxMDJENzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjUKKzoxMDJEODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTUKKzoxMDJEOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDUKKzoxMDJEQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzUKKzoxMDJEQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjUKKzoxMDJEQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTUKKzoxMDJERDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDUKKzoxMDJERTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjUKKzoxMDJERjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTUKKzoxMDJFMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDQKKzoxMDJFMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzQKKzoxMDJFMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjQKKzoxMDJFMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTQKKzoxMDJFNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTQKKzoxMDJFNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODQKKzoxMDJFNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzQKKzoxMDJFNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjQKKzoxMDJFODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTQKKzoxMDJFOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDQKKzoxMDJFQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzQKKzoxMDJFQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjQKKzoxMDJFQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTQKKzoxMDJFRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDQKKzoxMDJFRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjQKKzoxMDJFRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTQKKzoxMDJGMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDMKKzoxMDJGMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzMKKzoxMDJGMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjMKKzoxMDJGMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTMKKzoxMDJGNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTMKKzoxMDJGNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODMKKzoxMDJGNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzMKKzoxMDJGNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjMKKzoxMDJGODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTMKKzoxMDJGOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDMKKzoxMDJGQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzMKKzoxMDJGQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjMKKzoxMDJGQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTMKKzoxMDJGRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDMKKzoxMDJGRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjMKKzoxMDJGRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTMKKzoxMDMwMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDIKKzoxMDMwMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzIKKzoxMDMwMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjIKKzoxMDMwMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTIKKzoxMDMwNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTIKKzoxMDMwNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODIKKzoxMDMwNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzIKKzoxMDMwNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjIKKzoxMDMwODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTIKKzoxMDMwOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDIKKzoxMDMwQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzIKKzoxMDMwQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjIKKzoxMDMwQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTIKKzoxMDMwRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDIKKzoxMDMwRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjIKKzoxMDMwRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTIKKzoxMDMxMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDEKKzoxMDMxMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzEKKzoxMDMxMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjEKKzoxMDMxMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTEKKzoxMDMxNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTEKKzoxMDMxNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODEKKzoxMDMxNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzEKKzoxMDMxNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjEKKzoxMDMxODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTEKKzoxMDMxOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDEKKzoxMDMxQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzEKKzoxMDMxQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjEKKzoxMDMxQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTEKKzoxMDMxRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDEKKzoxMDMxRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjEKKzoxMDMxRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTEKKzoxMDMyMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDAKKzoxMDMyMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzAKKzoxMDMyMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjAKKzoxMDMyMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTAKKzoxMDMyNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTAKKzoxMDMyNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODAKKzoxMDMyNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzAKKzoxMDMyNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjAKKzoxMDMyODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTAKKzoxMDMyOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDAKKzoxMDMyQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzAKKzoxMDMyQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjAKKzoxMDMyQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTAKKzoxMDMyRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDAKKzoxMDMyRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjAKKzoxMDMyRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTAKKzoxMDMzMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0YKKzoxMDMzMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkYKKzoxMDMzMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUYKKzoxMDMzMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUYKKzoxMDMzNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEYKKzoxMDMzNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0YKKzoxMDMzNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkYKKzoxMDMzNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUYKKzoxMDMzODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEYKKzoxMDMzOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0YKKzoxMDMzQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkYKKzoxMDMzQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUYKKzoxMDMzQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEYKKzoxMDMzRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkYKKzoxMDMzRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUYKKzoxMDMzRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREYKKzoxMDM0MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0UKKzoxMDM0MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkUKKzoxMDM0MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUUKKzoxMDM0MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUUKKzoxMDM0NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEUKKzoxMDM0NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0UKKzoxMDM0NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkUKKzoxMDM0NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUUKKzoxMDM0ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEUKKzoxMDM0OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0UKKzoxMDM0QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkUKKzoxMDM0QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUUKKzoxMDM0QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEUKKzoxMDM0RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkUKKzoxMDM0RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUUKKzoxMDM0RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREUKKzoxMDM1MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0QKKzoxMDM1MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkQKKzoxMDM1MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUQKKzoxMDM1MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUQKKzoxMDM1NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEQKKzoxMDM1NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0QKKzoxMDM1NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkQKKzoxMDM1NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUQKKzoxMDM1ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEQKKzoxMDM1OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0QKKzoxMDM1QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkQKKzoxMDM1QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUQKKzoxMDM1QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEQKKzoxMDM1RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkQKKzoxMDM1RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUQKKzoxMDM1RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREQKKzoxMDM2MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0MKKzoxMDM2MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkMKKzoxMDM2MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUMKKzoxMDM2MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUMKKzoxMDM2NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEMKKzoxMDM2NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0MKKzoxMDM2NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkMKKzoxMDM2NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUMKKzoxMDM2ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEMKKzoxMDM2OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0MKKzoxMDM2QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkMKKzoxMDM2QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUMKKzoxMDM2QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEMKKzoxMDM2RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkMKKzoxMDM2RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUMKKzoxMDM2RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREMKKzoxMDM3MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0IKKzoxMDM3MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkIKKzoxMDM3MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUIKKzoxMDM3MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUIKKzoxMDM3NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEIKKzoxMDM3NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0IKKzoxMDM3NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkIKKzoxMDM3NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUIKKzoxMDM3ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEIKKzoxMDM3OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0IKKzoxMDM3QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkIKKzoxMDM3QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUIKKzoxMDM3QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEIKKzoxMDM3RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkIKKzoxMDM3RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUIKKzoxMDM3RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREIKKzoxMDM4MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQ0EKKzoxMDM4MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQkEKKzoxMDM4MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQUEKKzoxMDM4MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOUEKKzoxMDM4NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOEEKKzoxMDM4NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwN0EKKzoxMDM4NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNkEKKzoxMDM4NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNUEKKzoxMDM4ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNEEKKzoxMDM4OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwM0EKKzoxMDM4QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMkEKKzoxMDM4QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMUEKKzoxMDM4QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMEEKKzoxMDM4RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRkEKKzoxMDM4RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRUEKKzoxMDM4RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwREEKKzoxMDM5MDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzkKKzoxMDM5MTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjkKKzoxMDM5MjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTkKKzoxMDM5MzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTkKKzoxMDM5NDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODkKKzoxMDM5NTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzkKKzoxMDM5NjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjkKKzoxMDM5NzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTkKKzoxMDM5ODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDkKKzoxMDM5OTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzkKKzoxMDM5QTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjkKKzoxMDM5QjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTkKKzoxMDM5QzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDkKKzoxMDM5RDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjkKKzoxMDM5RTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTkKKzoxMDM5RjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDkKKzoxMDNBMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzgKKzoxMDNBMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjgKKzoxMDNBMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTgKKzoxMDNBMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTgKKzoxMDNBNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODgKKzoxMDNBNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzgKKzoxMDNBNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjgKKzoxMDNBNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTgKKzoxMDNBODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDgKKzoxMDNBOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzgKKzoxMDNBQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjgKKzoxMDNBQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTgKKzoxMDNBQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDgKKzoxMDNBRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjgKKzoxMDNBRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTgKKzoxMDNBRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDgKKzoxMDNCMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzcKKzoxMDNCMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjcKKzoxMDNCMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTcKKzoxMDNCMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTcKKzoxMDNCNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODcKKzoxMDNCNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzcKKzoxMDNCNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjcKKzoxMDNCNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTcKKzoxMDNCODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDcKKzoxMDNCOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzcKKzoxMDNCQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjcKKzoxMDNCQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTcKKzoxMDNCQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDcKKzoxMDNCRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjcKKzoxMDNCRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTcKKzoxMDNCRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDcKKzoxMDNDMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzYKKzoxMDNDMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjYKKzoxMDNDMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTYKKzoxMDNDMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTYKKzoxMDNDNDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODYKKzoxMDNDNTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNzYKKzoxMDNDNjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNjYKKzoxMDNDNzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNTYKKzoxMDNDODAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDYKKzoxMDNDOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzYKKzoxMDNDQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjYKKzoxMDNDQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTYKKzoxMDNDQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDYKKzoxMDNDRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjYKKzoxMDNDRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTYKKzoxMDNDRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDYKKzoxMDNEMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzUKKzoxMDNEMTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQjUKKzoxMDNEMjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQTUKKzoxMDNEMzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwOTUKKzoxMDNENDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwODUKKzoxMDNENTAwMDgxQjIwMDAwQUU5RjAwODg5QUIwMDAwMEFFOUYwMDg4M0MKKzoxMDNENjAwMDlBQjAwMDAwQUU5RjAwODg5QUIwMDAwMEFFOUYwMDg4MTUKKzoxMDNENzAwMDlBQjAwMDAwQUU5RjAwODg5QUIwMDAwMDAwMDAwMDg4NTIKKzoxMDNEODAwMDlBQjAwMTAwQUU5RjQxNDA4MTMyMDAwMEIyOUYyMjQwQjQKKzoxMDNEOTAwMDdCNkYwMDAwMDAwMDE5NDA4MUIyMDEwMEFFOUYwMDQwMUYKKzoxMDNEQTAwMDgxQjIwMDAwMDAwMDE5NDE3QkIzMDEwMDAwMDAwMEE0QjMKKzoxMDNEQjAwMEM0QjMwMTAwMDAwMDAwQTFDNkIzMDEwMDAwMDAyRkEyOUYKKzoxMDNEQzAwMEM4QjMwMTAwMDgxNDAwNDA0OTk5MDEwMEE4OUYwMDREQTQKKzoxMDNERDAwMDlBQ0MwMTAwQkI5RjI2NDA4MTMyMDAwMDAwMDAwMDRDQkQKKzoxMDNERTAwMDQ5QzEwMTAwQjk5RkEyNDE5QjUwMDAwMEJGOUY4MDgwNDQKKzoxMDNERjAwMDgwMzIwMDAwMDAwMDUyNDlGRDkzMDEwMDAwMDAwMDRBOUIKKzoxMDNFMDAwMEZEOTMwMTAwQzI5RjAwNDJDRDkzMDAwMDAwMDA1MTRBODMKKzoxMDNFMTAwMEZEOTMwMTAwMDAwMDAwNDlGRDkzMDEwMEMyOUYwMDQzOTMKKzoxMDNFMjAwMENCOTMwMDAwMDAwMDUwNDA4MUIyMDEwMEQyOUYwMDQwQkYKKzoxMDNFMzAwMDE5OTkwMTAwMDAwMDAwRjA5QUIwMDEwMDAwMDAwMDQ0NTAKKzoxMDNFNDAwMDQ5RDEwMTAwMDAwMDQwRjA4MEIyMDEwMDAwMDA0MTRENjYKKzoxMDNFNTAwMDgwQjIwMTAwQ0E5RjAwNDAxOTk5MDEwMDAwMDA0QzQwNDcKKzoxMDNFNjAwMDgxQjIwMTAwMDAwMDAwNDQ0OUQxMDEwMDAwMDAwMEYwQ0YKKzoxMDNFNzAwMDlBQjAwMTAwMDAwMDAwNEQxMEIxMDAwMDAwMDAwMEUyMDcKKzoxMDNFODAwMDQ5QjEwMTAwMDAwMDAwRTM0M0IxMDEwMDAwMDAwMEU0N0IKKzoxMDNFOTAwMDQ1QjEwMTAwMDAwMDAwNDA3QkIzMDEwMDAwMDA0ODRGMjUKKzoxMDNFQTAwMDQwQjEwMTAwRDI5RjAwNDA4MUIyMDAwMDA0MDAwMDQwRjgKKzoxMDNFQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTQKKzoxMDNFQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDQKKzoxMDNFRDAwMDgxQjIwMDAwMDQwMDAwQ0I4MUM4MDEwMEY0ODIwMDQwRTAKKzoxMDNFRTAwMEYyOTMwMDAwNDA4MjAwNDA4MUIyMDAwMDQwMDUwMDQwOTMKKzoxMDNFRjAwMDgxQjIwMDAwMTgwNjAwNDA4MUIyMDAwMEY0ODIwMDQwNDgKKzoxMDNGMDAwMDgxQjIwMDAwQUY4MjAwNDA4MUIyMDAwMDM4ODEwMDQwRTEKKzoxMDNGMTAwMDgxQjIwMDAwMzY4MTAwNDA4MUIyMDAwMEI4ODAwMDQwQ0MKKzoxMDNGMjAwMDgxQjIwMDAwMUE4NzAwNDA4MUIyMDAwMEFGODIwMDQwRDkKKzoxMDNGMzAwMDgxQjIwMDAwRjU4MjAwNDA4MUIyMDAwMEFCOTIwMDQwRTcKKzoxMDNGNDAwMDgxQjIwMDAwRjA5NTAwNDA4MUIyMDAwMDczOTIwMDQwMDEKKzoxMDNGNTAwMDgxQjIwMDAwREY5NTAwNDA4MUIyMDAwMDRBOTMwMDQwMkEKKzoxMDNGNjAwMDgxQjIwMDAwRUQ5MjAwNDA4MUIyMDAwMEU3OTIwMDQwNzMKKzoxMDNGNzAwMDgxQjIwMDAwOUE4MjAwNDA4MUIyMDAwMDAwMDA4MDQwQkYKKzoxMDNGODAwMDgxQjIwMTAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwNDIKKzoxMDNGOTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMzMKKzoxMDNGQTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMjMKKzoxMDNGQjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMTMKKzoxMDNGQzAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwMDMKKzoxMDNGRDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRjMKKzoxMDNGRTAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRTMKKzoxMDNGRjAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwRDMKKzoxMDQwMDAwMDgxQjIwMDAwMDQwMDAwNDA4MUIyMDAwMDA0MDAwMDQwQzIKKzowNDQwMTAwMDgxQjIwMDAwNzkKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9zbGljb3NzL29hc2lzcmN2dWNvZGUuc3lzLmloZXggYi9maXJtd2FyZS9zbGljb3NzL29hc2lzcmN2dWNvZGUuc3lzLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEzYmVhNAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL3NsaWNvc3Mvb2FzaXNyY3Z1Y29kZS5zeXMuaWhleApAQCAtMCwwICsxLDE2MiBAQAorOjEwMDAwMDAwMDAwMjAwMDA0Nzc1MDEwMDA0QTAxMzAxMDAxQ0I3NUI0QgorOjEwMDAxMDAwMDkzMDAwQjY1RjAxMDAxQzAwMDAwMDIwMTgzQjc4M0E1MAorOjEwMDAyMDAwMDAxQ0EyNzcwMTAwMUMwNzFEMDE3MDE4QUQ3QkYxRkZCOQorOjEwMDAzMDAwMUNCMzdCQTlBQTFFQjQ3QjAxMEMxQ0I1N0IwRDA2MUM0RQorOjEwMDA0MDAwMDAwMDMwNjQwODBDMzE1QTcwMDQwQzMxNUE4MDA0MENFMgorOjEwMDA1MDAwMzE0RTkwMDQwQzMxNEFBMDAwMDkyNTU1QzAwNDBDMzFFMgorOjEwMDA2MDAwNTJCMDAwRTkyNDU1QzAwNENDQjMwMDFDMUNFQjJEMDE5OAorOjEwMDA3MDAwMDAxQzA2NTYzMkQ0MDgwNzlEMDAwMDFDN0JCNzAyMDAwNgorOjEwMDA4MDAwMTBBMDBGMzE1NDA5MDY1NjVFQzAwNEEwMzA1NDAzMDA3RQorOjEwMDA5MDAwQUMzMDU1MDMwMENEMDMzQTAwMUM3QkI3MDIwMDFDNjA1NgorOjEwMDBBMDAwOEUzMTU0MDkyOTI1NTUwMzAwODA4RTMxNTQwOThDMzAzNgorOjEwMDBCMDAwOTEwMDA0NDcxQzAxMDAxQ0EwMEYzMTU0MDkwMDAwNjQ4QQorOjEwMDBDMDAwMDAwNDQ3MUM2NUMwMDQ0NzFDNTUwMzAwNkMzMDAxMDA0OAorOjEwMDBEMDAwMUM0RDM0MDIwMDFDN0JCNzAyMDAxQ0EwMEYzMTU0MDlEOAorOjEwMDBFMDAwQzg4MzM3MDAxQzgwMDEwMDAwMUMwMDAwNjQwMDA0QTBDRAorOjEwMDBGMDAwMEYzMDU0MDkwMDAwNTRDMzA0N0JGQkYyMDAxQ0NDMzNDNgorOjEwMDEwMDAwMEQwMDFDQjQ3QkZEMDMxQzgwMEUzMDU0MDlFMEZCMDU4MAorOjEwMDExMDAwMDAxQzAwMDA4QzAzMDBCMzBGMzE1NDA5MDAwMEVDNzA4OAorOjEwMDEyMDAwMDQwMDAwRUM4MDA0MDAwMDhDOTMwMDYxNzY4REMzMDQxMQorOjEwMDEzMDAwQzA4RDMxNTQwOUUwN0IwMEMwMUZBMEZEQzUwMTAwQ0M3QgorOjEwMDE0MDAwMzMwNTAwMUNENDAzMDAzQzFDRDREMzFCMDAxQ0MwRDNCQgorOjEwMDE1MDAwNTIwMDFDMDAwMDVDMTMwNDhFOEUzMjU0MDk1QjgwNUVEQQorOjEwMDE2MDAwMTMwNDAwMDAwMDAwMUMwMDAwOTQwMTAwQTAwRjMxNTQ5MworOjEwMDE3MDAwMDlBMDBGMzE1NDA5QzAwM0ZDN0YxQ0EwMDFBMDAxMDA5RAorOjEwMDE4MDAwMDAwMEE0MDEwMEEwMEYzMTU0MDlDMDAzRkMwMzFDRjVCQQorOjEwMDE5MDAwNzcwMTAwMUMyNjdBRTYwNTFDQTAwRjMxNTQwOUIzMEYyNQorOjEwMDFBMDAwMzE1NDA5QjUwMjAyMDAxQ0EwMEYzMTU0MDk3QTdFMDJCNQorOjEwMDFCMDAwMDAxQ0I1MDIwMjAwMUM1MzBGMzI1NDA5QUYwMzAxMDBBQQorOjEwMDFDMDAwMUM3QTBFMzI1NDA5QjUwMjAyMDAxQzAwMDAwMjAwMUMwOQorOjEwMDFEMDAwQTAzREFBMTEwNDAwMDBBQzExMDRENEQzNTIwMDFDQjVGOAorOjEwMDFFMDAwM0VCMjAxMDAyMEZCRkRGRjFGODAyQzZDMDMwMEI5M0FEQQorOjEwMDFGMDAwOUUwMTAwNzUzQjAyMDAxQ0E3MUMwMTAwMTBEQjgzMTY0QQorOjEwMDIwMDAwMDAxQ0M3MUQyMUMxMDRCOTNCOERDMTA0OEIyQzAxMDAwQQorOjEwMDIxMDAwMUM2QjJDMzVDMTA0MDAwMDc4MTEwMENCMkM3OUMxMDQ3MworOjEwMDIyMDAwQTAwRjMxNTQwOUEwMEYzMTU0MDk1NEQwMDIwMDFDNDlDOQorOjEwMDIzMDAwMjVCMTAxMDBBQjJDODFDMTA0QTcxRDU1MDMwMENDMzNBRgorOjEwMDI0MDAwMDkwMDFDRUIyRDAxMDAxQ0VBMjkwMTAwMUNBMDBGMzE0NAorOjEwMDI1MDAwNTQwOUFFMEYzMTU0MDlBMDBGMzE1NDA5RDQwN0ZDMDNERgorOjEwMDI2MDAwMUM5OTNBMDIwMDFDQkIzODAyMDAxQzAwMzgwMDAwMUMxQworOjEwMDI3MDAwMDAwMEZDMDEwNERCM0I3RTAwMUNDNzFEMDEwMDFDMjZBNgorOjEwMDI4MDAwN0FGQTA1MUMyNzFEMDEwMDFDQjMwRjMxNTQwOTdBMEVBMAorOjEwMDI5MDAwMzI1NDA5NTMwRjMyNTQwOTdBMEUzMjU0MDk1MzBGMzIzMworOjEwMDJBMDAwNTQwOTdBMEUzMjU0MDk1MzBGMzI1NDA5QTAwRjMxNTRCNQorOjEwMDJCMDAwMDk3QTA2MDIwMDFDNTMwRjMyNTQwOUFGMDMwMTAwMUNENworOjEwMDJDMDAwN0EwRTMyNTQwOTUzMEYzMjU0MDk3QTBFMzI1NDA5NTNCQworOjEwMDJEMDAwMEYzMjU0MDk3QTBFMzI1NDA5NTMwRjMyNTQwOTdBMEVGMAorOjEwMDJFMDAwMzI1NDA5MDAzRDAyMDAxQzAwMDA1ODEyMDBDQjJDMDFDMgorOjEwMDJGMDAwMDAxQzc1M0IwMjAwMUNBNzFDMDEwMDEwQ0IyRjA1MDA0MQorOjEwMDMwMDAwMUM2MDJDMDAwMDFDQzcxQ0M5MDIwMEEwMEYzMTU0MDkzRQorOjEwMDMxMDAwNTMwNzAyMDAxQzQ2N0FDQTA1MUM3QTBFMzI1NDA5NDA2MworOjEwMDMyMDAwRkExOTAwMUMwMDAwODgwMjA0NDY3QUNBMDUxQ0EwMEZCNgorOjEwMDMzMDAwMzE1NDA5QTAwRjMxNTQwOUEwMEYzMTU0MDlBMDBGMzFENQorOjEwMDM0MDAwNTQwOUIzN0IwMUMwMUY3NDBFMzA1NDA5QzAwMzlDMDBENAorOjEwMDM1MDAwMUM4MDAwRDgwMjAwMDAwMEQ4MDIwNDAwMDBBQzEyMDU4NgorOjEwMDM2MDAwMDcxRDAxMDAxQ0Q0RDMyQjAwMUNENEQzNTIwMDFDODBDOQorOjEwMDM3MDAwNzY3RDEzMDQwMDAwRTAwMjAwQTY3Qjk1MDMxMEM3OUM2NQorOjEwMDM4MDAwMDAwMDFDODAyQzAwMDAxQzAwMDA2QzAyMDQwMDAwNTRDMworOjEwMDM5MDAwQzMwNEFCMkREOTEyMDUwNzFEQjVDMjA0OEIyRDAxMDA3NgorOjEwMDNBMDAwMUM2OTI1MDEwMDFDQTY3Qjk1MDMxMENCMkYwOTAwMUM5RQorOjEwMDNCMDAwNjAyQzAwMDAxQzAwMDA0ODAzMDA1MzBGMzI1NDA5NDYxMworOjEwMDNDMDAwN0FDQTA1MUM3QTBFMzI1NDA5NDBGQTE5MDAxQzAwMDA0MgorOjEwMDNEMDAwMTAwMzA0NDY3QUNBMDUxQ0I1MEYzMTU0MDlBMDBGMzEyOQorOjEwMDNFMDAwNTQwOTczRUMyQTAzMDQ2MDJDMDAwMDFDMDAwMDI4MDM0RAorOjEwMDNGMDAwMDBDNzFDMDEwMDFDMDAwMDI4MTMwNTA3MUQwMTAwMUM3QworOjEwMDQwMDAwQzBENzIyMDAxQzc1NTY3RTEzMDQ2MDJDMDAwMDFDRTcyOAorOjEwMDQxMDAwMUM0NTAzMDRFNzlDMDAwMDFDQTY3Qjk1MDMxMDgwMkM2MAorOjEwMDQyMDAwMDAwMDFDMDAwMEY4MDIwNDAwMDA1NEMzMDRCOTdCMDE2MgorOjEwMDQzMDAwMDAxQzAwMDA4Q0MzMDRDQkFGRkMwNzFDQ0IyRjAxMDRCNQorOjEwMDQ0MDAwMUNDNzlGODAwMzFDMDAwMDhDQzMwNENCQUZGQzA3MUM5RgorOjEwMDQ1MDAwQ0IyRjBEMDQxQ0M3OUY4MDAzMUMwMDAwOENDMzA0Q0I1MgorOjEwMDQ2MDAwQUYwMEY4MURDQjJGMDEwMDFEQTY3Qjk1MDMxQ0M3OUM3OAorOjEwMDQ3MDAwOENDMzA0MDAwMDhDMTMwNTA3MUQwMTAwMUNDMDFEREM4QgorOjEwMDQ4MDAwRDMwODI3OURFNDAzMDBBMEVFNDZENDAwRkI3NTA5MTRCMQorOjEwMDQ5MDAwMDQyMDdCMDYwMDFDQzAxQzFDMDQwMDAwMDBCMEQzMDgxNAorOjEwMDRBMDAwMDAwMDAwRjQwMEMwRUZGMjAwMUMyMDI1NUMxNDA0NjA4MgorOjEwMDRCMDAwQjdEMjAzMDAwMDAwMEMxNTAwQ0NCM0ZDMDMxQ0NDMzNGNgorOjEwMDRDMDAwMDUwMjFDMDAwMDBDQzUwNDYwQjcwRTA1MDQwMDAwMENGQQorOjEwMDREMDAwMTUwNDAwMDA1Q0M0MDRDMDFEOThGMzA0MDAwMDY4QzQ0NworOjEwMDRFMDAwMDQwNzlEMDAwMDFDMUI3NEZERjMwNEE2N0JGMTAzMUM5NAorOjEwMDRGMDAwQTAwRjY5NTQwOUUwN0IwMEZDMUYzOTdGMDIwMDFDMDczNAorOjEwMDUwMDAwMUQ5REMzMDRBNjdCQUQwMzFDMDAwMDY4QzQwNEUwMUM1MQorOjEwMDUxMDAwMDAwMDFDMDAwMEE0MDMwNENCQUYwMEY4MURDQjJGMDE4QQorOjEwMDUyMDAwMTAxRDAwMDBBQ0MzMDQwMDAwQUMwMzA0Q0JBRjAwRjgwNgorOjEwMDUzMDAwMURDQjJGMDExODFEQzc5RjAwMEIxQzAwMDBBQ0MzMDQ2RQorOjEwMDU0MDAwRkI3NTAxMDAxQzA3MUQwMTAwMUNDQ0IzRkMwMzFDQ0M3NworOjEwMDU1MDAwMzMwMTAyMUMwMDAwQUNDMzA0QTAxQzAwMDAxQ0EwRUU3MAorOjEwMDU2MDAwQTIwMzA0Q0JBRkZDMDcxQ0NCMkYwOTA0MUNGQjc1MDFCNQorOjEwMDU3MDAwMDAxQzAwMDBBQ0MzMDRDQ0IzRkMwMzFDQ0MzMzAxMDI1MAorOjEwMDU4MDAwMUMwMDAwMENDNTA0MDAwMDc4MzQwNUNDQjNGQzAzMUMyRgorOjEwMDU5MDAwQ0MzMzE1MDIxQzQ3OUQ1NEM0MDQwMDAwNzg0NDAwODBFRAorOjEwMDVBMDAwMUQ3QzU0MDQ4NzFEOEQwNDAwQ0U3NjAxMDAxQ0VGNzY1RgorOjEwMDVCMDAwOURDNDA0QTQ3NzhEMjQwOUU0NzYwMTAwMUNDNDc2MDE0RgorOjEwMDVDMDAwMDAxQzAwMDA5ODU0MDRENzc2MDE1MDE4RjY3NjAxMDBGQworOjEwMDVEMDAwMUMwMDAwMDAzMDE4MDAwMDAwMDAxMENDMzA0NUM1MDQ5RAorOjEwMDVFMDAwRUIyRDAxMDAxQ0VBMjkwMTAwMUNDMDU5MDEwMDFDRjU3QgorOjEwMDVGMDAwNzcyOUM1MDRFMDMwREMwNDAwMDA0Q0IwMDQwMDIwNEMzNgorOjEwMDYwMDAwRjQwNDAwMDAwMEU4MDQwMENDQjNGQzAzMUNDQzMzMDk2NAorOjEwMDYxMDAwMDIxQ0VCMkRCNUM0MDRDQ0IzRkMwMzFDQ0MzMzE5MDI3MworOjEwMDYyMDAwMUNFQjJEQjVDNDA0Q0NCM0ZDMDMxQ0NDMzMwRDAyMUM1NQorOjEwMDYzMDAwRUIyREI1QzQwNENDQjNGQzAzMUNDQzMzMTEwMjFDRUI3MgorOjEwMDY0MDAwMkRCNUM0MDQwMDdCMDA4MDFDQUU3NzQ1MDUwMDAwMDA3QQorOjEwMDY1MDAwMDRDMDA0RDM4QjAwRkMxRjYwN0EzQzAwMUM2MDRDQzBCQgorOjEwMDY2MDAwMDQwMEMwMkYyMDA1MUZFMDMwQjAwNDAwODAyNUIwMDQzNgorOjEwMDY3MDAwMDBCNTVCQjEwNDA0NjkyNjAxMDAxQzZBMkIwMTAwMUM1MworOjEwMDY4MDAwODAxRDAwMDAxQ0E5MjU0NTA1MDBFRTMwMDAwMDFDQUZCMAorOjEwMDY5MDAwNzcwMTA1MDAwMDAwQUMyNDA0QjQ1RjAxNDAxODA3OURGOQorOjEwMDZBMDAwNDg1NTA0Qjc3NjAxMDAxQzk2NzYwMTAwMUM0NzFEMDFEMQorOjEwMDZCMDAwMDAxQ0E0MzMwMTYwMThBNDJGMDE2MDE4NjQ3NzAxNjA0NgorOjEwMDZDMDAwMTgyNDc3MDE2MDE4NDQ3NzAxMDAxQzY0ODgwMzAwMUMxQgorOjEwMDZEMDAwQTQzRjAxMDAxQ0E0M0IwMTAwMUM1MzdCMDBDMDFDRDNBMQorOjEwMDZFMDAwQ0YxQjAwMUM1MzRGMDIwMDFDREFDRjAwQzAxRkQ1NTc5MAorOjEwMDZGMDAwMEYwMDFDRDNEMzM3MDAxQ0Q0NTMwRjAwMUNFMDI5MDA3QgorOjEwMDcwMDAwMDAxQ0Y1RDVCMDA1MDAwMDAwOUM1NTA0Nzc1NjAxMDA4QgorOjEwMDcxMDAwMUM1NjUzMDEwMDFDMDAwMDAwMTAxODAwMDAwNEMwMDQwNworOjEwMDcyMDAwRjU1NTAxMDAxQzAwMDBCNDU1MDQ3NzU2MDEwMDFDNTYxNQorOjEwMDczMDAwNTMwMTAwMUMwMDAwMDAxMDE4MDAwMDA0QzAwNENCMkY1RgorOjEwMDc0MDAwMDExODEwQ0IyRjAxMTAxMENCMkYwMTA4MTBDQjJGMDE1NworOjEwMDc1MDAwMDgxMENCMkYwMTIwMTBDQjJGMDEyODEwQ0IyRjAxMDAyOAorOjEwMDc2MDAwMTA4OTI1NjFDMjA0MDAwMEVDQzIwNDAwMDA1NEMzMDRENworOjEwMDc3MDAwMDAwMDU0QzMwNDAwMDA1NEMzMDQwMDAwNjBDMjA0MDAxRAorOjEwMDc4MDAwMDBFQ0MyMDQwMDAwNTRDMzA0MDAwMDU0QzMwNDAwMDA4MQorOjEwMDc5MDAwNTRDMzA0NDAxQzZDQzAwNDQwMUM5Q0MwMDRBNzc3NTU4MworOjEwMDdBMDAwQzMwNDAwMDBDNEMwMDQyNzFERjFDMDA0MDAwMDU0QzNFQQorOjEwMDdCMDAwMDQwMDAwNTRDMzA0MDAwMDU0QzMwNDAwMDAyQ0M2MDQwOQorOjEwMDdDMDAwMDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDA0NworOjEwMDdEMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAzNworOjEwMDdFMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNGQgorOjEwMDdGMDAwQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzY1MQorOjEwMDgwMDAwMDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMgorOjEwMDgxMDAwMDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDBGNgorOjEwMDgyMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDBFNgorOjEwMDgzMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNBQQorOjEwMDg0MDAwQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwMAorOjEwMDg1MDAwMDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDRCMgorOjEwMDg2MDAwMDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDBBNgorOjEwMDg3MDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDA5NgorOjEwMDg4MDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkM1QQorOjEwMDg5MDAwQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzZCMAorOjEwMDhBMDAwMDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQ2MgorOjEwMDhCMDAwMDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDA1NgorOjEwMDhDMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDA0NgorOjEwMDhEMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkMwQQorOjEwMDhFMDAwQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzY2MAorOjEwMDhGMDAwMDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQxMgorOjEwMDkwMDAwMDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwNQorOjEwMDkxMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDBGNQorOjEwMDkyMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNCOQorOjEwMDkzMDAwQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwRgorOjEwMDk0MDAwMDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDRDMQorOjEwMDk1MDAwMDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDBCNQorOjEwMDk2MDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDBBNQorOjEwMDk3MDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkM2OQorOjEwMDk4MDAwQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzZCRgorOjEwMDk5MDAwMDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQ3MQorOjEwMDlBMDAwMDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDA2NQorOjEwMDlCMDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDA1NQorOjEwMDlDMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkMxOQorOjEwMDlEMDAwQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAwMDJDQzY2RgorOjEwMDlFMDAwMDQwMDAwMkNDNjA0MDAwMDJDQzYwNDAwMDAyQ0M2MDQyMQorOjEwMDlGMDAwMDAwMDJDQzYwNDAwMDAyQ0M2MDQwMDAwMkNDNjA0MDAxNQorOjA0MEEwMDAwMDAyQ0M2MDRGQworOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL3N4Zy9zYWhhcmFkYmdkb3dubG9hZEIuc3lzLmloZXggYi9maXJtd2FyZS9zeGcvc2FoYXJhZGJnZG93bmxvYWRCLnN5cy5paGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMDE2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9maXJtd2FyZS9zeGcvc2FoYXJhZGJnZG93bmxvYWRCLnN5cy5paGV4CkBAIC0wLDAgKzEsMzkzNyBAQAorOjEwMDAwMDAwMDIwMDAwMDBEQ0Y1MDAwMDBDMDAwMDAwMDAwMDAwMDAxMQorOjEwMDAxMDAwRkYxRjAwMDAwMTAwMDAwMDAwMDAwMDg4ODI0RDI5M0EwNworOjEwMDAyMDAwMDAwMDA0MDQwMDAwMDA4MDAyMDAwMDkwMDAwMDA5MDBBRAorOjEwMDAzMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwOTAwMDAwMDAwODAyNQorOjEwMDA0MDAwMDIwMDAwOTAwMDAwMDkwMDAwMDAwMDgwMDIwMDAwOTAwMworOjEwMDA1MDAwMDAwMDA5MDAwMDAwMDA4MDAyMDAwMDkwMDAwMDA5MDA3QworOjEwMDA2MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwOTAwMDAwMDAwODBGNQorOjEwMDA3MDAwMDIwMDAwOTAwMDAwMDkwMDAwMDAwMDgwMDIwMDAwOTBEMworOjEwMDA4MDAwRkVGRjAwMDAwMDAwMDBBQzAyMDAzNjMyMDAwMDM2MDAyNworOjEwMDA5MDAwMDAwMDAwQTgwMjAwMDA5MjAwMDAxNjEzMDAwMDAwODA3QgorOjEwMDBBMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA4MworOjEwMDBCMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNEQworOjEwMDBDMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA3NQorOjEwMDBEMDAwMDIwMDAwOTAwMDAwMjAwMDAwMDAwMEQ4MEY4MDI4OTI0RAorOjEwMDBFMDAwMDAwMDIxMDAwMDAwMDBEODBGODAyODkyMDAwMDIyMDBBQworOjEwMDBGMDAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyMzAwMDAwMDAwRDhFNAorOjEwMDEwMDAwMEY0MDJCOTIwMDAwMjQwMDAwMDAwMEQ4MEY4MDI4OTI5RQorOjEwMDExMDAwMDAwMDI1MDAwMDAwMDBEODBGODAyODkyMDAwMDI2MDA3MworOjEwMDEyMDAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyNzAwMDAwMDAwRDhBRgorOjEwMDEzMDAwMEY4MDI4OTIwMDAwMjgwMDAwMDAwMEQ4MEY4MDI4OTIyRAorOjEwMDE0MDAwMDAwMDI5MDAwMDAwMDBEODBGODAyODkyMDAwMDJBMDAzQgorOjEwMDE1MDAwMDAwMDAwRDgwRjgwMjg5MjAwMDAzNjAwMDAwMDAwOThCMAorOjEwMDE2MDAwMUU4MEU5OUEwMDAwMkMwMDAwMDAwMEQ4MEY4MDI4OTIyMQorOjEwMDE3MDAwMDAwMDJEMDAwMDAwMDBEODBGODAyODkyMDAwMDJFMDAwMworOjEwMDE4MDAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyRjAwMDAwMDAwRDg0NworOjEwMDE5MDAwMEY4MDI4OTIwMDAwMzAwMDAwMDAwMEQ0MEYwMDAwOTI3MQorOjEwMDFBMDAwMDAwMDMwMDAwMDAwMDBENDBGNDAwMDkyMDAwMDMwMDAzQQorOjEwMDFCMDAwMDAwMDAwRDQwRjgwMDA5MjAwMDAzNDAwMDAwMDAwRDQ0MgorOjEwMDFDMDAwMEZDMDAwOTIwMDAwMzAwMDAwMDAwMEQ0MEYwMDAxOTIyOAorOjEwMDFEMDAwMDAwMDMwMDAwMDAwMDBENDBGNDAwMTkyMDAwMDMwMDAwOQorOjEwMDFFMDAwMDAwMDAwRDQwRjgwMDE5MjAwMDAzMDAwMDAwMDAwRDQxNQorOjEwMDFGMDAwMEZDMDAxOTIwMDAwMzAwMDAwMDAwMEQ0MEYwMDAyOTJGNgorOjEwMDIwMDAwMDAwMDMwMDAwMDAwMDBENDBGNDAwMjkyMDAwMDMwMDBENworOjEwMDIxMDAwMDAwMDAwRDQwRjgwMDI5MjAwMDAxNjEzMDAwMDAwODAzRQorOjEwMDIyMDAwMDIwMDAwOTAwMDAwMzAwMDAwMDAwMEQ0MEYwMDAzOTI5NAorOjEwMDIzMDAwMDAwMDMwMDAwMDAwMDBENDBGNDAwMzkyMDAwMDMwMDBBNgorOjEwMDI0MDAwMDAwMDAwRDQwRjgwMDM5MjAwMDAzMDAwMDAwMDAwRDRCMgorOjEwMDI1MDAwMEZDMDAzOTIwMDAwMDAwMDAwMDAwMEQwNUYzRjAwMzQ5OAorOjEwMDI2MDAwMDAwMDE2MTMwNDAwMDA4MDQyRkZGQ0IwMDAwMDAwMDBGNAorOjEwMDI3MDAwMDAwMDAwODgxMjgwRkQzQTAwMDAxNjEzMDAwMDAwODA4NAorOjEwMDI4MDAwMDIwMDAwOTAxNjEzMTYxMzAyMDEwMDgwODI4REZEQkMzRgorOjEwMDI5MDAwMDAwMDAwMDAwMDAwMDA4ODEyODBGRDNBMDAwMDAwMDAwRAorOjEwMDJBMDAwMDAwMDAwRjgwM0MwMDEzMjM4MDAwMDAwMDAwMTAwODRBMworOjEwMDJCMDAwODI0RDI4MUEwMDAwMzYwMDAwMDAwMDc0MDk0MDAwOTJBOAorOjEwMDJDMDAwMDAwMDRGMDAwMDAwMDBGQzAyMDAwMDkyMDAwMDQ4MDAwNworOjEwMDJEMDAwMDAwMDAwODAwMjAwMDA5MDAwMDA0RDAwMDAwMDAwOTAyRgorOjEwMDJFMDAwMEU4MDE4OTIwMDAwMUIwMzAwMDAwMDAwMDhDMDIwOTIzRQorOjEwMDJGMDAwMDAwMDg5MDAwMDAwMDAwMDA4MDAyMTkyMDAwMDE5MDM5RQorOjEwMDMwMDAwMDAwMDAwMDAwODQwMjE5MjAwMDA4NjAwMDAwMDAwMDA2QworOjEwMDMxMDAwMDg4NTIxOTAwMDAwOUIwMzAwMDAwMEVDMDJDMDIyOTI5RgorOjEwMDMyMDAwMDAwMDk0MDQwMDAwMDA4MDAyMDAwMDkwMDAwMDU4MDBDQgorOjEwMDMzMDAwMDAwMDAwRkMwMjQwMTg5RDAwMDA1MTAwMDAwMDAwRDBBOQorOjEwMDM0MDAwMDIwMDAwOTIwMDAwRTAwMzAwMDAwMDgwMDIwMDAwOTAyNAorOjEwMDM1MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDA2MgorOjEwMDM2MDAwMDAwMTAwODAwMjAwMDA3MDAwMDA0QzAwMDAwMDAwMDA0RQorOjEwMDM3MDAwMDlDMDIxOTIwMDAwNEEwMDEyMDEwMDAwMDg4NTIyQjA0NQorOjEwMDM4MDAwMTgwMDM2MDAwMDAwMDBGODczOEEwMjk5MDAwMDhFMDAwMQorOjEwMDM5MDAwNkEwMDAwODAwMjAwMDBCMDA4MDA4RTAwMDAwMDAwRjgzMworOjEwMDNBMDAwMjM0MDAxOTkwMDAwMDAwMDAwMDEwMEU4MDIwMDkwNzI2MworOjEwMDNCMDAwMDAwMDE2MTM4MDAxMDA4MEIyMDBFOUI2MDAwMDAyMDRCQworOjEwMDNDMDAwMDAwMDAwN0MxRUMwRTc5QTA4MDAwMDAwMDAwMDAwRjg1MgorOjEwMDNEMDAwMTM0MDAxMzkwMDAwRjYwMzAwMDAwMDA4QjgwMTAwOTQ0MgorOjEwMDNFMDAwMDAwMDE2MTMwMzAwMDA3ODA5NDAxQUJEMDAwMDE2MTMyMAorOjEwMDNGMDAwMDQwMTAwODBFMjgwOTdCQzAwMDAwMDAwMDAwMDAwQTAyMworOjEwMDQwMDAwRTEyNTAwMzQwODAwMDAwMDAwMDAwMEY4QjM0MDAxMzk4NQorOjEwMDQxMDAwMDAwMDAyMDRCMjAwMDBEODAyMDAwMEIyMDAwMDE2MTM2RgorOjEwMDQyMDAwMTcwMTAwODAwMjAwMDBCMDAwMDAxRjA2MDAxMDAxRjg1NAorOjEwMDQzMDAwMDIwMDZFOTIwMDAwNUIwMDBBMDEwMENDMDIwMDAwQjJENAorOjEwMDQ0MDAwMDAwMDcwMDAwMzAxMDBGQzAyNDAxOUJEMDgwMDAyMDQxNgorOjEwMDQ1MDAwMDAwMDAwRjhBMzQwMDE5OTAwMDAwMDAwMDAwMDAwODRBMworOjEwMDQ2MDAwMDFDMDJGMzIwMDAwMDAwMDAwMDAwMDkwRjEwMTAwMzRCNAorOjEwMDQ3MDAwMDAwMDAwMDAwMDAwMDA5NDAxQzAyRjMyMDAwMDYwMDA2NgorOjEwMDQ4MDAwODAwMTAwODAxMjgxRkNCNjAwMDAxNjEzMDQwMTAwODA3OAorOjEwMDQ5MDAwMDJDMDJGQkMwMjAwNjAwMEIwMDAwMEEwRjIwQjAwQjk0NworOjEwMDRBMDAwMDAwMDYzMDAwNDAxMDA4MDAyQzBCMEJDMDAwMDZFMDBDOAorOjEwMDRCMDAwQTAwMDAwODAwMjAwMDA5MDAwMDA2NTAwODAwMTAwODAyNAorOjEwMDRDMDAwRjI0QkQwQjYwMDAwNkUwMEEwMDAwMDgwMDIwMDAwOTA0OQorOjEwMDREMDAwMDAwMDAwMDBBMDAwMDAwNEZENEJEMDM0MDAwMDZCMDBDMQorOjEwMDRFMDAwODAwMTAwODAxMjgxRkNCNjAwMDBDMjExMDAwMDAwRDgxQgorOjEwMDRGMDAwMDIwMDAwRDIwMDAwMTYxMzA0MDAwMDgwMDI4MDkyQkNBQgorOjEwMDUwMDAwMTgwMDAwMDAwMDAwMDBGODczMEEwMzM5NkUwMDM2MDA3RQorOjEwMDUxMDAwMDAwMDAwQzAwMjAwMzY5MjAwMDA5NjExMDAwMDAwRDhEMgorOjEwMDUyMDAwMDIwMDAwRDIwMDAwMTYxMzA0MDAwMDgwMDI4MDkyQkM3QQorOjEwMDUzMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDVCMDBBMQorOjEwMDU0MDAwMDMwMTAwRkMwMjQwMThCRDAwMDA4NTAwMDMwMDAwRkMxMAorOjEwMDU1MDAwMDI0MDE5QkQwMDAwMDAwMDAwMDAwMDk0MDFDMDJGMzJDRAorOjEwMDU2MDAwMDAwMDAwMDAwMDAwMDA4MEYxMDEwMDM0MDAwMDAwMDBFNQorOjEwMDU3MDAwMDAwMDAwODQwMUMwMkYzMjAwMDA3NTAwODAwMTAwODA1RgorOjEwMDU4MDAwMTI4MUZDQjYwMDAwMTYxMzA0MDEwMDgwMDJDMDJGQkNDQgorOjEwMDU5MDAwMDIwMDc1MDBCMDAwMDBBMEYyMEIwMEI5MDAwMDc4MDA2NgorOjEwMDVBMDAwMDQwMTAwODAwMkMwQjBCQzAwMDA4MzAwQTAwMDAwODBGNQorOjEwMDVCMDAwMDIwMDAwOTAwMDAwN0EwMDgwMDEwMDgwRjI0QkQwQjY2QgorOjEwMDVDMDAwMDAwMDgzMDBBMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDBGNgorOjEwMDVEMDAwQTAwMDAwMDRGRDRCRDAzNDAwMDA4MDAwODAwMTAwODBBQQorOjEwMDVFMDAwMTI4MUZDQjYwMDAwQzIxMTAwMDAwMEQ4MDIwMDAwRDI0NworOjEwMDVGMDAwMDAwMDE2MTMwNDAwMDA4MDAyODA5MkJDMTgwMDAwMDA2NgorOjEwMDYwMDAwMDAwMDAwRjg3MzBBMDMzOTgzMDAzNjAwMDAwMDAwQzBDMAorOjEwMDYxMDAwMDIwMDM2OTIwMDAwOTYxMTAwMDAwMEQ4MDIwMDAwRDJCRAorOjEwMDYyMDAwMDAwMDE2MTMwNDAwMDA4MDAyODA5MkJDMTgwMDM2MDBGRgorOjEwMDYzMDAwMDAwMDAwRjg3MzBBMDNGOTAwMDA3MDAwMDMwMTAwRkNEOQorOjEwMDY0MDAwMDI0MDE5QkQwMDAwNUIwMDAzMDEwMEZDMDI0MDE4QkQyMAorOjEwMDY1MDAwMDgwMDAyMDQwMDAwMDBGOEEzNDAwMTk5MDgwMDAwMDAwRgorOjEwMDY2MDAwMDAwMDAwRjg3MzQwMDEzOTAwMDA4RTAwODAwMTAwODAxNgorOjEwMDY3MDAwRTIwMTgwQjYwMDAwOEIwMDAwMDAwMDgwMDIwMDAwOTBDNAorOjEwMDY4MDAwMDgwMDkxMDMwQzAwMDBGODUzNDAwMUI5MDAwMDhEMDBGMAorOjEwMDY5MDAwODAwMTAwODBFMjAxODBCNjAwMDAxNjEzMTIwMDAwNjg5RAorOjEwMDZBMDAwMDIwNTgwQjAwMDAwRjYwMzAwMDAwMDZDMUZDMEY2OUEzRgorOjEwMDZCMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDU4MDMwMDAwMDAwMDA3RAorOjEwMDZDMDAwMDAwMDAwRkMwMjAwMDEzMjAwMDAwMDAwMDAwMDAwMTBFOQorOjEwMDZEMDAwMDg4MDNEMzIwMDAwMDAwMDAwMDAwMENDMDIwMDAwMzIyMworOjEwMDZFMDAwMDAwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTJGNworOjEwMDZGMDAwMDAwMDAwMTQwOTAwODBEMjAwMDAxNjEzODAwMDAwODA2MgorOjEwMDcwMDAwNjI4MDJGQjYwMDAwMTYxMzAyMDEwMDgwODIzQTgwQkM3RQorOjEwMDcxMDAwMDAwMDE2MTMwNjAxMDA4MDkyM0E4MEJDMDA5MDE2MTM2OAorOjEwMDcyMDAwMDQwMTAwODBBMjBEODBCMDAwMDAxNjEzMTIwMTAwQkM2RAorOjEwMDczMDAwMDhDMDIxQjIwMDAwMDAwMDAwMDAwMEQ0MDIwMDAwMzIxNgorOjEwMDc0MDAwMDJBMDAwMDAwMDAwMDAwMEE5MEQ4MDMyMDAwMDE2MTM3NgorOjEwMDc1MDAwMTIwMDAwNTQwMkE0MzhCMjAwMDIwMDgwMDAwMDAwMkNGNQorOjEwMDc2MDAwMDgwMDM3MzIxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjk1OQorOjEwMDc3MDAwMDAwMDAwMDAwMDA4MDAwNDA4ODA3MjMyMDAwMEEyMDA5RgorOjEwMDc4MDAwOUYwMDAwNUMwODAwNzJCMjgzMDBBMTAwODAwMTAwODAxRAorOjEwMDc5MDAwODJDRDg1QjAwMDAwQjYwMDAwMDAwMDJDRDhDMTgyOTQ0NAorOjEwMDdBMDAwMDAwMEI2MDAwMDAwMDAyQzg4QzE4Mjk0MDAwMDE2MTNERgorOjEwMDdCMDAwMDYwMTAwODA4MjdEODBCQzAwMEZBQzAwMDQwMTAwODAzNworOjEwMDdDMDAwODJDRDg1QjAwMDAwQUMwMDgwMDAwMDgwMzI4MUZDQjY5NAorOjEwMDdEMDAwMDAwMDE2MTMxMjAwMDA2ODAyMDU4MEIwMDAwMDAwMDAzRgorOjEwMDdFMDAwMDAwMDAwNkMxRkMwRjYzQTAwMDAwMDAwMDAwMDAwRkM5MgorOjEwMDdGMDAwMDIwMDAxMzIwMDAwQUEwMDA0MDEwMERDNDM2MDNEQjNBNgorOjEwMDgwMDAwMDAwMEY2MDMwMDAwMDBGQzAyMDAwMDkyMTgwMDAwMDA0NworOjEwMDgxMDAwMDAwMDAwRjg3MzhBMDMzOUE3MDAzNjAwMDAwMDAwQzAwQQorOjEwMDgyMDAwMDIwMDM2OTIwMDAwQUUwMDgwMDEwMDgwRjJDMDg1QjY2MgorOjEwMDgzMDAwMDAwMEJFMDAwMDAwMDAyQzk4QzE4Mjk0MTAwMEMzMDA4QworOjEwMDg0MDAwODcwMDAwMDA3OTIxMTZCODAwMDBDMzAwODAwMTAwNzhGRAorOjEwMDg1MDAwMzkwMDkwQjA4MzAwQzMwMDg3MDAwMDc4ODlDRDg1QjA0RgorOjEwMDg2MDAwMDAwMEIzMDA4MDAwMDA4MDAyODA5N0I2MDAwMEI2MDA1MAorOjEwMDg3MDAwMDAwMDAwMkM4OEMxODI5NDAwMDBCNTAwODAwMDAwODAzOAorOjEwMDg4MDAwMjJDMTg1QjYwMDAwQjYwMDAwMDAwMDJDRDhDMTgyOTRCOQorOjEwMDg5MDAwMDAwMEMzMDAwMDAwMDAyQzk4QzE4Mjk0MDAwMEJDMDAzRQorOjEwMDhBMDAwODAwMTAwODBEMkMxODJCNjAwMDBDMzAwODAwMTAwODBCOAorOjEwMDhCMDAwNzI4MEZDQjYwMDAwMDAwMDAwMTgwMEE4NDIzRDcyMzBCMworOjEwMDhDMDAwMDAwMDAwMDA1NDE4MDlGRUYyQzA3QzMwMDAwMEVBMDA2RAorOjEwMDhEMDAwODAwMTAwODBGMkMxODVCNjAwMDBDNTAwMDAwMDAwODBFNAorOjEwMDhFMDAwMDIwMDAwOTAwMDAwMTYxMzgwMDEwMDgwODJDMTgyQjZEMQorOjEwMDhGMDAwMDAwMEI4MDA4MDAwMDA4MDgyODBGQ0I2MDkwMEMzMDBDMAorOjEwMDkwMDAwMDQwMDAwQjQyOEJGMTdCODgzMDBDNTAwODcwMDAwQUNGRQorOjEwMDkxMDAwODhDRDg1QjAwMDAwQzMwMDA0MDAwMDgwRDJFMjhBQjAxOAorOjEwMDkyMDAwMDAwMDAwMDAwMDE4MDBBODQyM0Q3MjMwMDAwMEM1MDAyMQorOjEwMDkzMDAwNTQxODA5RkVGMkMwN0M5MDAwMDAwMDAwNTQwMDAwRkMzNgorOjEwMDk0MDAwMDIwMDAwMzIwMDAwMDAwMDAwMTgwMDIwMDcwMDAwMzIwMgorOjEwMDk1MDAwODAwMDgwMjAwMDAwMDA4MEMyQ0Q4NTMwMDAwMERBMDBEOQorOjEwMDk2MDAwMEIwMDAwODAwMjAwMDBCMDE4MDAwMDAwMDAwMDAwNzhCQQorOjEwMDk3MDAwNzlBMTE2MzgyMDAwRUEwMDA0MDAwMDgwODI4RDk3QkMxRgorOjEwMDk4MDAwMDAwMEQxMDA4MDAxMDA4MDYyODBGQ0I2ODMwMEQxMDBBRAorOjEwMDk5MDAwODcwMDAwNzg4OUNEODVCMDAwMDBDRDAwODAwMDAwODAwMAorOjEwMDlBMDAwMDI4MDk3QjYwMDAwRDEwMDgwMDEwMDgwMTI4MDk3QjZDNworOjEwMDlCMDAwMDAwMEQxMDA4MDAxMDA4MDcyQzE4NUI2MTAwMDAwMDBFNworOjEwMDlDMDAwMDAwMDAwNzg3OTYxMTYzODAwMDBEODAwMDQwMTAwODAyQQorOjEwMDlEMDAwMzI4MDk3QkMwMDAwRUEwMDAwMDAwMDJDQjhDMTgyOTQ2RAorOjEwMDlFMDAwMDAwMEQ4MDA4MDAxMDA4MDUyODBGQ0I2MDAwMEQ4MDBEMgorOjEwMDlGMDAwODAwMDAwODA3MkMxODVCNjAwMDBEODAwODAwMTAwODBCMAorOjEwMEEwMDAwMDJDMTg1QjYwMDAwRDgwMDgwMDEwMDgwRDJDMTg1QjY0MQorOjEwMEExMDAwMTgwMDAwMDAwMDAwMDA3ODc5RTExNjM4MDAwMEQ4MDBDNgorOjEwMEEyMDAwMDQwMTAwODAzMjgwOTdCQzAwMDBFQTAwMDAwMDAwMkMyNgorOjEwMEEzMDAwQzhDMTgyOTQwMDAwMDAwMDAwMDAwMDA0MDgwMDA0MzJENQorOjEwMEE0MDAwMDAwMEVBMDAwMDAwMDAyQ0E4QzE4Mjk0MDgwMDAwMDAwOQorOjEwMEE1MDAwMDAwMDAwNzg3OTIxMTczODAwMDBFQTAwMDQwMDAwODBDNworOjEwMEE2MDAwMzI4MDk3QkMwMDAwRUEwMDA0MDEwMDgwMjI4MDk3QkMxRAorOjEwMEE3MDAwMUYwMDAwMDAwMDEyMDAwODg5Q0Q3MjMwMDUwMDAwMDA0MAorOjEwMEE4MDAwMDAxMjAwMDBCOURDMTczODAwMDAwMDAwMDAwMDAwQThDOAorOjEwMEE5MDAwMjIwMDkwMzcwMDAwRUEwMDgwMDA4NjgwMjIyNDdDQjY4NQorOjEwMEFBMDAwMDAwMDAwMDAwMDAwMDA3ODA5MDU4MDMwMDAwMDE2MTNFNworOjEwMEFCMDAwMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzMDYwMTAwODA3NAorOjEwMEFDMDAwOTJCQTk3QkMwMDAwMTYxMzEyMDAwMDY4MDIwNTgwQjBBRAorOjEwMEFEMDAwMDAwMDAwMDAwMDAwMDBGQzAyMDAwMTMyMDAwMEU4MDBGRAorOjEwMEFFMDAwMDQwMTAwREM0MzYwM0RCMzAwMDBGNjAzMDAwMDAwRkM5RAorOjEwMEFGMDAwMDIwMDAwOTIxODAwMDAwMDAwMDAwMEY4NzM4QTAzMzkxOQorOjEwMEIwMDAwRTUwMDM2MDAwMDAwMDBDMDAyMDAzNjkyMDIwMDAwMDAzRQorOjEwMEIxMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDAwMDAwMTRBRQorOjEwMEIyMDAwMDkwMDgwRDIwMDAwRjEwMDEyMDEwMDYwMDg0MDIzQjJFOQorOjEwMEIzMDAwMzIwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTI3MAorOjEwMEI0MDAwMDAwMDAwMTQwOTAwODBEMjAwODIwMDAwMDAwMDAwMDhBQworOjEwMEI1MDAwMDg4MDM2MzIwMDAwRTEwMDAwMDAwMDY0MUY0MEY2OUE3MQorOjEwMEI2MDAwMDAwMDE2MTMxMjAwMDAyNDA4MDAyM0IyMDAwMDE2MTMyMAorOjEwMEI3MDAwMTIwMDAwMjAwOEMwMjNCMjAwMDAxNjEzMTIwMDAwMTg1MworOjEwMEI4MDAwMDg4MDIzQjIwMDAwMDAwMDAwMDAwMEZDMDIwMDAxMzJENworOjEwMEI5MDAwMDAwMEY4MDAwNDAwMDBEQzQzNjAzREIzMTgwMDAwMDBEMgorOjEwMEJBMDAwMDAwMDAwRjg3MzhBMDMzOUY0MDAzNjAwMDAwMDAwQzAyQQorOjEwMEJCMDAwMDIwMDM2OTIwMDAwMDAwMDAwMDAwMEZDMDIwMDg1MzJCNgorOjEwMEJDMDAwMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyMDAwMDAwMDA5OAorOjEwMEJEMDAwMDAwMDAwRDAwMjAwMDAzMjAwQzAwNzAxMTgwMTAwMEMyNAorOjEwMEJFMDAwQThDRDNFQjIwMDAwRjgwMDEyMDAwMDM4MDI4MDgxQjJBOQorOjEwMEJGMDAwMDAwMDAwMDAwMDAwMDAzQzAyMDA4MjMyMDAwMDAwMDAwMworOjEwMEMwMDAwMDAwMDAwMzAwMjQwODIzMjAwMDAwMDAwMDAwMDAwMzQ4QQorOjEwMEMxMDAwMDIwMDg2MzIyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzI4MgorOjEwMEMyMDAwMDAwMDAwMDAwMDAwMDA1QzFGQzBGNTNBMDAwMDAwMDA1QQorOjEwMEMzMDAwMDAwMDAwNzgwOTA1ODAzMDAwMDAxNjEzMDIwMTAwODBEMgorOjEwMEM0MDAwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwOTJCQTk3QkNDNgorOjEwMEM1MDAwMDAwMEY2MDMxMjAxMDA2ODAyMDU4MEIwMDAwMDE2MTNDMAorOjEwMEM2MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwMDAxODAwNzhFMgorOjEwMEM3MDAwMDkwMDcyMzIwMDIzMEEwMTA0MDEwMDgwQTJDRDgyQjA3MworOjEwMEM4MDAwMDAwMDBCMDEwMDAwMDAwMDA5MDAwMDkyMDAwMDE2MTM5NAorOjEwMEM5MDAwOUYxNjAwMDAyOUMxNzJCQzAwMDAwMDAwMDAxODAwMDA2RgorOjEwMENBMDAwMDc4MDgxMzIwMDAwMDAwMDAwMjAwMDAwMDcwMDgyMzIyRgorOjEwMENCMDAwMDAwMDAwMDAwMDI4MDAwMDA3ODA5NzMyMTAwMDAwMDBBQworOjEwMENDMDAwMDAzMDAwMDAxNzIwOTAzOTAwMDAwMDAwMDAzODAwMDBCQworOjEwMENEMDAwMDdDMDgyMzIwMDAwMDAwMDAwMDAwMEQ4MDIwMDAwMzI4RAorOjEwMENFMDAwMDAwMDAwMDAwMDAwMDAwMDA3NDA4MDMyMDAwMDE0MDFGNgorOjEwMENGMDAwODAwMTAwODBBMkMxODJCNjAwMDAxNTAxMDAwODAwMDAzQQorOjEwMEQwMDAwNTcwMDgwOTcwNTAwMDAwMDAwMDgwMDAwMDdBMDA0Mzk4NAorOjEwMEQxMDAwMDAwMDE2MTMwNDEwMDAwMDA3NDA4MkIyMDAwMDAwMDAxQgorOjEwMEQyMDAwMDAxODAwMDAwNzAwODYzMjAwMDAxNjEzMTIwMDAwNTA2MQorOjEwMEQzMDAwRjJDMTM4QjQxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjk1NQorOjEwMEQ0MDAwMDAwMDE2MTMxMjAwMDA2ODAyMDU4MEIwMDAwMDAwMDBDOQorOjEwMEQ1MDAwMDAwMDAwNzgwOTA1ODAzMDAwMDAxNjEzMDIwMTAwODBCMQorOjEwMEQ2MDAwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwOTJCQTk3QkNBNQorOjEwMEQ3MDAwMDAwMDE2MTMxMjAwMDA0ODAyQzA4MEIyMDAwMEY2MDMwMworOjEwMEQ4MDAwQ0EwMTAwMDhFODgxODA5NDAwMDAwMDAwMDAwMDAwODA5MworOjEwMEQ5MDAwMDI0NTkwMzAwMDAwMTYxMzA0MDEwMDgwMTIwMDI4QkNBOAorOjEwMERBMDAwMDAwMDE2MTMxMjAxMDBCQzA4QzAyMUIyMDgwMDAwMDBBOAorOjEwMERCMDAwMDAwMDAwRjg5MzQwMDEzOTEwMDAwMDAwNTQwMDAwRkNDRQorOjEwMERDMDAwODI0RDkwMzYwMDAwMTYxMzAyMDAwMDgwNDJDMDJGQkNGNgorOjEwMEREMDAwMDAwMDI1MDFGMDAxMDBEODAyMDAwMEIyMDAwMDAwMDA3MAorOjEwMERFMDAwNjIwNDAxQTgwMkMwNkUzMjAwMDAwMDAwMDAwNDAxMDA4RAorOjEwMERGMDAwNTlDMDZFMzcwMDAwMDAwMDAwMDQwMTc4MTlDMDZFM0EzNworOjEwMEUwMDAwMDAwMDAwMDA0RTA0MDFFQzA2QkQ5NzMwMDAwMDAwMDAxOQorOjEwMEUxMDAwRTAwMDAwRjQxRTQwRUYzQTAwMDAxNjEzMDQxOTBCODJBNAorOjEwMEUyMDAwMDJDMDdDQkMwMDAwMDAwMDAwMTgwQkNFMDc0MDAwMzI1RQorOjEwMEUzMDAwMDAwMDAwMDAwMDAwMDAwMDA3NDAwOTMyMDAwMDE2MTMwNworOjEwMEU0MDAwMDQwMTAwODAwMjAwMzZCQzAwMDAwMDAwMDAwODAwMDAyMQorOjEwMEU1MDAwNzdDMDI5MzcwMDAwMTYxMzA0MTAwMDAwMTczRDkwQkEyMAorOjEwMEU2MDAwMDAwMDAwMDAwMDE4MDAwMDA3ODBGNDMyMDAwMDE2MTM5NAorOjEwMEU3MDAwMTIwMDAwNDBGMkMxMzhCNDBCMDAwMDAwMDAwMDAwMTA2NgorOjEwMEU4MDAwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MDk4MDgzRDI2RAorOjEwMEU5MDAwMDAwMDAwMDAwMDAwMDBGQzMyQzAyRjMwMDAwMDAwMDAwNQorOjEwMEVBMDAwMDAwMDAwMTAwODgwM0QzMjE4MDAzNjAwMDAwMDAwRjhGNQorOjEwMEVCMDAwNzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ0MDIwMDAwMzJCMQorOjEwMEVDMDAwMDAwMDE2MTMwNDAxMDA4MDAyODAyREJDMDAwMENFMDEzQQorOjEwMEVEMDAwODAzODAwODAyMkMwNzJCNjAwMDAzRTAxMTIwMDAwQzhCNworOjEwMEVFMDAwMDIwMDIwQjIwMDAwNDUwMTEyMDEwMDVDMDg4MDIwQjIxRgorOjEwMEVGMDAwMDAwMDE2MTMxMjAwMDA2MDAyODAyQ0IyMTgwMDAwMDBERgorOjEwMEYwMDAwMDAwMDAwRjg3MzhBMDMzOTNCMDEzNjAwMDAwMDAwQzA3RQorOjEwMEYxMDAwMDIwMDM2OTIwMDAwMDAwMDAwMDAwMEY4MUY4MEZGM0EzNworOjEwMEYyMDAwMDAwMDAwMDAwMDAwMDBGQzMyMDA4NTMwMDAwMEEzMDEzQQorOjEwMEYzMDAwMDQwMDAwODA0MjYwM0RCMzE4MDAwMDAwMDAwMDAwRjg4QgorOjEwMEY0MDAwNzM4QTAzMzk0MTAxMzYwMDAwMDAwMEMwMDIwMDM2OTI2NgorOjEwMEY1MDAwMDgwMDAwMDAwMDAwMDAwMDg4Q0Q4NTM3MDAwMDAwMDA3OAorOjEwMEY2MDAwMDAwMDAwMjAwODAwNzIzMjAwMDAwMDAwMDAwODAwMjQ4OQorOjEwMEY3MDAwMDgwMDcyMzIwMDAwMTYxMzA0MTAwMDZDMDgwMDcyQjJGMAorOjEwMEY4MDAwMDAwMDAwMDAwMDE4MDA0QzA4MDA3MjMyMDAwMDE2MTMyOAorOjEwMEY5MDAwMDQyMDAwMTgwODAwNzJCMjAwMDAwMDAwMDAzMDAwMjg5MQorOjEwMEZBMDAwMDgwMDcyMzIwMDAwMTYxMzAyMDAwMDgwODJCRDgyQkM2RAorOjEwMEZCMDAwMDAwMDAwMDAwMDI4MDAzMDA4MDA3MjMyMDAwMDAwMDAyRAorOjEwMEZDMDAwMDAwMDAwNjAwODgwODIzMjAwMDA1NjAxMDYwMDAwODBBOAorOjEwMEZEMDAwNjJBMDgyQkMwMDAwMTYxMzlGM0MwMDE0Mjg4MDcyQkNFMworOjEwMEZFMDAwMDAwMDAwMDAwMDAwMDAwMDA3MDAwNjMyMDcwMDAwMDBCQgorOjEwMEZGMDAwMDAwODAwMDA3NzRBMDkzOTAwMDAxNjEzMDQxMDAwMDBBOQorOjEwMTAwMDAwMDcwMDgyQjIwMDAwMDAwMENBMTkwMDAwMDc0MDgyMzJDNworOjEwMTAxMDAwMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0MDAwMDAwMDBCNgorOjEwMTAyMDAwMDAwMDAwRDgwMjQwMDAzMjAwMDA3RDAxMDQzODAwNzg0MgorOjEwMTAzMDAwRDlDNTcyQjAwMDAwNUEwMTgwMDEwMDgwMDI4MDk3QjZDNQorOjEwMTA0MDAwMDAwMDAwMDAwMDAwMDBGODgyODAyRjM0MDAwMDVDMDFFNgorOjEwMTA1MDAwODAwMTAwODAxMjgwOTdCNjAwMDAwMDAwMDAwMDAwRjhCOAorOjEwMTA2MDAwOTI4MDJGMzQwMDAwMTYxMzA0MDEwMDgwMDI0MDJEQkMzMgorOjEwMTA3MDAwMDQwMDAwMDAwMDM4MDAzQ0I4MUMxNzM4MDAwMDAwMDBENQorOjEwMTA4MDAwMDAwMDAwM0MyOEMwODMzNzAwMDAwMDAwMDAzQTAwMkMxQworOjEwMTA5MDAwMDhDMDcyMzIwMDAwMDAwMDAwMDAwMDFDQjhFMDgzM0E3MworOjEwMTBBMDAwMDAwMDAwMDBDQjI5MDAyMDA3MDAwMDMyMDAwMDdDMDE3NgorOjEwMTBCMDAwMDQwMDAwODAwMkMwODFCQzAwMDAwMDAwMDAwMDAwMzQ3OQorOjEwMTBDMDAwNzhBMDgxM0UwMDAwMDAwMDAwMDAwMDFDRDhFMDgxM0NCOAorOjEwMTBEMDAwMDAwMDZBMDEwNjNBMDA4MEIyNUM4M0JDMDAwMDAwMDA5OAorOjEwMTBFMDAwMDAzQTAwMDA4OUMxNzIzNzA3MDA2OTAxMkIwMTAwMDQzMgorOjEwMTBGMDAwNzkwQTA0QjkwMDAwMDAwMENCMDAwMDA0MTk0MTkwMzRDMworOjEwMTEwMDAwMDAwMDZEMDEwMDNBMDAyQzA3MDAwMDkyMDAwMDAwMDA3MgorOjEwMTExMDAwMDAzQTAwMkNEN0UwNzIzQzAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMTEyMDAwMDkwMDAwMzIwMDAwMDAwMDAwMDAwMDA0MDkwMDAwMzI0NQorOjEwMTEzMDAwMDAwMDAwMDAwMDAwMDAwMDA3NjQ4MzMyMDAwMDAwMDA4RgorOjEwMTE0MDAwMDAwODAwMDAwNzAwODAzMjAwMDAxNjEzMDQxMDAwMDBBMQorOjEwMTE1MDAwMDdDMDg2QjIwMDAwMDAwMDAwMTgwMDAwMDdDMDg0MzJGQgorOjEwMTE2MDAwMDAwMDhDMDEwNDAwMDAyOEQ4QTA4MkJDMDAwMDE2MTNFNworOjEwMTE3MDAwMDkwMTAwODAwMjAwMDBCMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwMTE4MDAwRDgyMDgwM0EwMDAwNzcwMTA0MDAwMDgwNzI4MDJEQkNENgorOjEwMTE5MDAwMDAwMDE2MTMxMjAwMDA0NDEyRTQzOEIyMDAwMDc4MDE3NworOjEwMTFBMDAwMDAwMDAwRDgxMjgwMkQ5QTAwMDA3NTEyMDAwMDAwMDQ4MworOjEwMTFCMDAwRjk0MTkwRjQwMDAwN0EwMTA0MDAwMDE4RDhBMDgxQkMyNQorOjEwMTFDMDAwMDAwMDYyMDEwMDAwMDA2Q0Q4RTA4NjlBMDAwMDIwMTI0NgorOjEwMTFEMDAwMDAwMDAwNDQwODgwMkRGMjAwMDA2MjAxMDAwMDAwMzA5MQorOjEwMTFFMDAwMDgwMDAwOTIwMDAwMDAwMENCMTkwMDIwMDcwMDAwMzIyOAorOjEwMTFGMDAwMDcwMDdGMDEyQjAxMDAwNDc5MEEwMkI5MDAwMDAwMDBGQQorOjEwMTIwMDAwQ0IwMDAwMDQxOTQxOTAzNDAwMDAwMDAwNEQwMDAwMDBBNAorOjEwMTIxMDAwQTdBMDgxM0UwMDAwMDAwMDAwMDgwMDAwMDcwMDgwMzIwNworOjEwMTIyMDAwMDAwMDE2MTMwNDEwMDAwMDA3QzA4NkIyMDAwMDAwMDA4MgorOjEwMTIzMDAwMDAxODAwMDAwN0MwODQzMjAwMDA4QzAxMDQwMDAwMjg2MAorOjEwMTI0MDAwRDhBMDgyQkMwMDAwMTYxMzA0MDEwMDgwNjI2MDgzQkMzOQorOjEwMTI1MDAwMDAwMDAwMDAwMDAwMDAwMEQ4MjA4MDNBMDAwMDg5MDE1MgorOjEwMTI2MDAwMDQwMDAwODA3MjgwMkRCQzAwMDAxNjEzMTIwMDAwNDRBMAorOjEwMTI3MDAwMTJFNDM4QjIwMDAwOEEwMTAwMDAwMEQ4MTI4MDJEOUFEMgorOjEwMTI4MDAwMDAwMDc1MTIwMDAwMDAwNEY5NDE5MEY0MDAwMDIwMTJFMworOjEwMTI5MDAwMDAwMDAwNDQwODgwMkRGMjAwMDA3RDAxMDAwMDAwMzBCNQorOjEwMTJBMDAwMDgwMDAwOTIwMDAwMTYxMzgwMDAwMDgwQTI4MDJGQjY3NAorOjEwMTJCMDAwMDAwMDAwMDAwMDAwMDAwNEY5NDE5MDM0MDAwMDE2MTMwMworOjEwMTJDMDAwMTIwMDAwNDQxMkU0MzhCMjE4MDAzNjAwMDAwMDAwRjhBMgorOjEwMTJEMDAwNzMwQTAzRjkwMDAwMTYxMzA0MDAwMDgwMDI4MDJEQkM3RAorOjEwMTJFMDAwMDAwMDAwMDAwMDE4MDAwNDA5ODA3MzMyMDAwMDAwMDBCNAorOjEwMTJGMDAwMDAyODAwMDg4OTgwNzMzNzAwMDAwMDAwMDAwMDAwODA4QgorOjEwMTMwMDAwMDcwMDg2MzI0MTAwMDAwMDAwMDYwMDhDMDcwMDM2MzJEQworOjEwMTMxMDAwMDAwMDk4MDEyOTA4MDA4MDA3QzA4NUIyMDAwMDlCMDFFOQorOjEwMTMyMDAwMjgxMDAwOEMwNzAwMDBCMjAwMDA5QzAxMDAxMjAwODQwRAorOjEwMTMzMDAwMDcwMDAwOTIwMDAwMDAwMDAwMTAwMDhDRjdFMDgyM0FFNQorOjEwMTM0MDAwMDAwMDlCMDEyODE4MDA4MDA3NDA5MEIyMDAwMDlDMDExQgorOjEwMTM1MDAwMDAxMjAwODQwNzAwMDA5MjAwMDAwMDAwMDAxMjAwODRDOAorOjEwMTM2MDAwMjdFNDgyMzIwMDAwMDAwMDAwMDAwMDc4MzkwMDg1MzA1OAorOjEwMTM3MDAwMDAwMDE2MTMwNDAxMDA4MEYyOEI5N0JDMDAwMEExMDE0RAorOjEwMTM4MDAwMDQwMDAwODA0MjYwM0RCMzE4MDAwMDAwMDAwMDAwRjgzNworOjEwMTM5MDAwNzM4QTAzMzk5QzAxMzYwMDAwMDAwMEMwMDIwMDM2OTJCNworOjEwMTNBMDAwMDAwMDAwMDAwMDAwMDBGQzAyMDA4NTMyMDAwMDE2MTM1RgorOjEwMTNCMDAwMTIwMDAwNUM1MjgxMkNCNDAwMDAwMDAwMDAwMDAwRDgzNAorOjEwMTNDMDAwMDI4MDAxMzIwMDAwMDAwMDAwMDAwMDgwMDIwMDNCMzI3OQorOjEwMTNEMDAwMDg0MEE1MDFGMDAxMDAwODA4ODAzNkIyMDAwMDAwMDBCNgorOjEwMTNFMDAwMDAwNDAxMzgwOEMwNkUzMjAwMDAwMDAwRTAwMDAwRjQ4NAorOjEwMTNGMDAwMUU0MEVGM0MwMDAwQUMwMTBCMDEwMDhDMDgwMDAwQjI2NQorOjEwMTQwMDAwMDAwMEE5MDFGMjAxMDA4MDAyMDAwMEIwMDAwMDAwMDAwRAorOjEwMTQxMDAwMDAwMDAwRjAwRTAwM0EzMjAwMDBCRTAxRTIwMDAwODA0MQorOjEwMTQyMDAwMEU4MDgzOTIwMDAwQUMwMUYyMDEwMDc4QzkzQjNBQkMwNworOjEwMTQzMDAwMDAwMEI2MDEwMjAxMDA4MDgyODA5N0JDMDAwMDAwMDAxRAorOjEwMTQ0MDAwMDAwMDAwQTgwMjAwRTgzMjAwMDBCMTAxMDQwMDAwODBBMgorOjEwMTQ1MDAwMjJBMjJBQkMwMDAwQjUwMTA0MTkwQjgyMDJDMDdDQkM4OAorOjEwMTQ2MDAwMDAwMDAwMDAwMDAwMDA4QzE4QzA4ODNBMDAwMDAwMDA1NgorOjEwMTQ3MDAwMDAwMDAwQTgxMjgwMkEzQTAwMDAwMDAwMDAwMDAwQTgyNgorOjEwMTQ4MDAwMDJCRDJBMzAwMDAwQUYwMTA0MDEwMDgwRTJBMDJBQkNBNgorOjEwMTQ5MDAwMDAwMEJCMDEwMjAwMDA4MDgyQzA4OEJDMDAwMDAwMDA4OAorOjEwMTRBMDAwRTIwMDAwMDgwODAwMDAzMjAwMDAwMDAwMDAwMDAwQTg3MAorOjEwMTRCMDAwMDI4MDg4MzIwMDAwMTYxMzA0MTkwQjgyMTJDMDdDQkMxMworOjEwMTRDMDAwMDAwMDAwMDAwMDE4MEJDRTA3MDAwMDMyMDAwMEY2MDNGOQorOjEwMTREMDAwMDAwMDAwREMwMzAwMDA5MjAwMDAwMDAwMDAwMDAwMzg2MworOjEwMTRFMDAwMDg4MDJBMzIwMDAwMDAwMDAwMDAwMEYwMEUwMDNBMzJBRQorOjEwMTRGMDAwMDAwMDAwMDBFMjAwMDA4MDBFODAyQTMyMDAwMDAwMDBBMAorOjEwMTUwMDAwMDAwMDAwQTgwMjgwODgzMjAwMDAxNjEzMDQxOTBCODIyNAorOjEwMTUxMDAwMTJDMDdDQkMwMDAwMDAwMDAwMTgwQkNFMDcwMDAwMzI5NworOjEwMTUyMDAwMDAwMDAwMDAwMDAwMDBEQzAzMDAwMDMyMDAwMDE2MTM4MQorOjEwMTUzMDAwMDQwMDAwODAyMjdBRThCQTAwMDAwMDAwMDAwMDAwMDBFOQorOjEwMTU0MDAwMDc4MDgzMzIwMDAwMDAwMDAwMDAwMDAwNzlDMDI5MzdDNgorOjEwMTU1MDAwNjAyMDAwMDAwMDAwMDAwMDg5MEQ5MDNBMDAwMDAwMDBBQgorOjEwMTU2MDAwQ0EwMTAwRDgxMjgwMkQzQTAwMDAwMDAwMDAwMDAwMDBERgorOjEwMTU3MDAwMDcwMDAxMzIwMDAwMDAwMDAwMDgwMDAwMDcwMDkwMzI2MAorOjEwMTU4MDAwMDAwMDAwMDAwMDEwMDAwMDA3NDBFODMyMDAwMDAwMDBFQQorOjEwMTU5MDAwMDAxODAwMDAwNzgwRTgzMjAwMDAwMDAwMDAwMDAwRkM5NgorOjEwMTVBMDAwMDIwMDAwMzIwMDAwRjYwMzEyMDEwMDQ4RjJDMTM4QjQxNAorOjEwMTVCMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNDNworOjEwMTVDMDAwMDQwMTAwODAwMjQwMkRCQzAwMDAxNjEzMDQwMTAwODBCRAorOjEwMTVEMDAwMDI4MDJEQkMwMDAwMTYxMzgwMDAwMDgwNzI4MDJGQjZBMAorOjEwMTVFMDAwMDAwMDAwMDAwMDMwMDA3ODA4ODA3MjMyMDQwMDAwMDAyMworOjEwMTVGMDAwMDAzODAwNTRBODVDMTYzODBCMDAwMDAwMDAzODAwMkM5RQorOjEwMTYwMDAwQThEQzE2MzgxNDAwMDAwMDAwMDAwMDFDODg0RDg1M0E0NAorOjEwMTYxMDAwMjIwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMTAwMDgwMTI4NQorOjEwMTYyMDAwMDAzODAwMTRBOTlDODdEOTAwMDAwMDAwMDAwMDAwMjBBOQorOjEwMTYzMDAwMDgwMDcyMzIwMDAwMDAwMDAwMDgwMDI0MDgwMDcyMzIyNgorOjEwMTY0MDAwMDAwMDAwMDAwMDEwMDA2QzA4MDA3MjMyMDAwMDAwMDA3MgorOjEwMTY1MDAwMDAxODAwNEMwODAwNzIzMjAwMDAxNjEzMDQyMDAwMTgxNQorOjEwMTY2MDAwMDgwMDcyQjIwMDAwMDAwMDAwMjgwMDMwMDgwMDcyMzI0QQorOjEwMTY3MDAwMDAwMDE2MTM5RjNDMDAxNDE4ODA3MkJDMDAwMEU1MDFBNgorOjEwMTY4MDAwMDQwMDAwODAwMjQwODFCQzAwMDAwMDAwMDAwMDAwMTQ0MworOjEwMTY5MDAwMTg0MDgxM0MwMDAwMDAwMDAwMDAwMDAwMDcwMDA2MzJGNgorOjEwMTZBMDAwMDcwMDAwMDAwMDA4MDAwMDc3NEEwOTM5MDAwMDE2MTNGRgorOjEwMTZCMDAwMDQxMDAwMDAwNzAwODJCMjAwMDAwMDAwQ0ExOTAwMDBGOAorOjEwMTZDMDAwMDc0MDgyMzIwMDAwMTYxMzEyMDAwMDQwRjJDMTM4QjQwNQorOjEwMTZEMDAwMDAwMDAwMDAwMDAwMDBEODAyNDAwMDMyMDAwMDAwMDBCRQorOjEwMTZFMDAwMDAwMDAwNjQ3OEMwMjkzNzAyMTAwMDAwMDAwMDAwNjQ4OAorOjEwMTZGMDAwODg0RDg2M0EwMDAwMDAwMDAwMDAwMDgwMDgwMDAwMzI5QgorOjEwMTcwMDAwMDAwMDAwMDAwMDAwMDA0MDA4MDAwMDMyMDAwMDAwMDA1RgorOjEwMTcxMDAwNEQwMDAwMDA3N0EwODEzRTAwMDAwMDAwMDAwODAwMDA5RQorOjEwMTcyMDAwMDc0MDg2MzIwMDAwMTYxMzA0MTAwMDAwMDdDMDg2QjI3RQorOjEwMTczMDAwMDAwMDAwMDAwMDE4MDAwMDA3QzA4NDMyMDAwMDAwMDIxMgorOjEwMTc0MDAwMDQwMDAwMUNEOEUwODFCQzAwMDAxNjEzMDkwMTAwODBEMQorOjEwMTc1MDAwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMDY0RDg2MDg2M0E3QgorOjEwMTc2MDAwMDAwMEY0MDEwNDAwMDA4MDcyODAyREJDMDAwMDE2MTNGQworOjEwMTc3MDAwMTIwMDAwNDAwMkMwMzhCMjAwMDBGQzAxMDAwMDAwRDg5NgorOjEwMTc4MDAwMTI4MDJEOUEwMDAwMTYxMzEyMDAwMDQwRjJDMTM4QjRFNgorOjEwMTc5MDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMEZBMDE4RgorOjEwMTdBMDAwMDQwMTAwODAwMjgwMkRCQzAwMDAxNjEzODAwMTAwODAxRgorOjEwMTdCMDAwQTI4MDJGQjYwMDAwRjUwMTY3MDAwMEY4QTI4MDJGQjVDNworOjEwMTdDMDAwMDAwMDE2MTMxMjAwMDBFODAyQzAyMUIyMDAwMDE2MTMzOAorOjEwMTdEMDAwMDQwMTAwODA3MjgwMkRCQzAwMDAwMDAwMDAwMDAwRDhEMQorOjEwMTdFMDAwMDI0MDAwMzIwMDAwRkUwMTA0MDAwMDE4RDhBMDgxQkNCNQorOjEwMTdGMDAwMDAwMEVBMDEwMDAwMDA2Q0Q4RTA4NjlBMDAwMEM5MTBFMQorOjEwMTgwMDAwMDAwMDAwNDQwODgwMkRGMjAwMDBFQTAxMDAwMDAwMzBEMgorOjEwMTgxMDAwMDgwMDAwOTIwMDAwMTYxMzEyMDAwMDQwRjJDMTM4QjQxNAorOjEwMTgyMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDA2MDJGMQorOjEwMTgzMDAwMDQwMTAwODAwMjgwMkRCQzAwMDAxNjEzODAwMTAwODA4RQorOjEwMTg0MDAwQTI4MDJGQjYwMDAwMDEwMjY3MDAwMEY4QTI4MDJGQjUyOQorOjEwMTg1MDAwMDAwMDE2MTMxMjAwMDBFODAyQzAyMUIyMDAwMDEyMDJCQworOjEwMTg2MDAwMDQwMTAwODAwMjAwODRCQzAwMDAwMDAwMDAwMDAwRDRERAorOjEwMTg3MDAwMDI0MDAwMzIwMDAwMDAwMDAwMDAwMEE0MjI0MDg1M0EyRgorOjEwMTg4MDAwMDQwMDAwMDAwMDE4MDA0MDg4Q0Q3NDM2MDAwMDAwMDBGRAorOjEwMTg5MDAwMDAwMDAwNDAyODAwODQzNzAwMDAwMDAwMDAwMDAwRDQ1MQorOjEwMThBMDAwMDIwMDAwMzIxNDAwMTIwMjA0MDAwMDFDODgwRDg0QkNFNworOjEwMThCMDAwMDAwMDE2MTMwOTAxMDA4MDAyMDAwMEIwMDAwMDAwMDBDMworOjEwMThDMDAwMDAwMDAwNzgwOTYxODUzQTgwMDAxNjEzMDYwMTAwODA0NworOjEwMThEMDAwODI4RDk3QkMwMDAwMDAwMDAwMDAwMDY0RDg2MDg2M0E0QQorOjEwMThFMDAwMDAwMEZDMDEwMDAwMDBEODAyNDAwMDkyMDAwMDE0MDIzOQorOjEwMThGMDAwMDQwMDAwMThEOEEwODFCQzAwMDAxNjAyMDAwMDAwNkM5MworOjEwMTkwMDAwRDhFMDg2OUEwMDAwQzkxMDAwMDAwMDQ0MDg4MDJERjIzQgorOjEwMTkxMDAwMDAwMDAwMDAwMDAwMDAzMDA4MDAwMDMyMDAwMDAwMDA1RAorOjEwMTkyMDAwMDAwMDAwRDQwMjQwMDAzMjAwMDAwMDAwMDAwMDAwQTRDQgorOjEwMTkzMDAwMjJDMDgyM0EwMDAwMDAwMDAwMDAwMDNDQjg2MDg1M0NGNAorOjEwMTk0MDAwMDQwMDFDMDI4MTAwMDA2MDg4Q0Q3NEI2MDAwMDAwMDAxNQorOjEwMTk1MDAwMDAwNDAwMjhGOEEwNzUzQzAwMDAxRDAyMDAwODAwNzQ3NworOjEwMTk2MDAwMDg4MDc1OTIwMDAwMDAwMDAwMDgwMDI4RjhBMDc1M0M2RgorOjEwMTk3MDAwMDAwMDAwMDAwMDAwMDAyODA4QTE4MjNDMDAwMDAwMDBEOAorOjEwMTk4MDAwMDAwMDAwQTRGMjYwMkEzQTAwMDAwMDAwMDAwODAwNDhBRAorOjEwMTk5MDAwMDgwMDc1MzIwMDAwMDAwMDAwMjAwMDdDMDg4MDc1MzJDRAorOjEwMTlBMDAwMDkwMDIzMDIwNDFBMDA3MDg4Q0Q3NEIwMDkwMDAwMDBGOQorOjEwMTlCMDAwMDAxQTAwNEM4N0NENzQzMTdGMDAwMDAwMDAwMDAwNjRFNQorOjEwMTlDMDAwODg0RDg2MzEwMDAwMDAwMDAwMDAwMDY0Mjg0MDg2M0FGRgorOjEwMTlEMDAwMjMwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTJEMQorOjEwMTlFMDAwMDAwMDAwMTQwOTgwODJEMjBDMDAwMDAwMDAwMDAwMTBFQQorOjEwMTlGMDAwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MDk4MDg0RDJGMQorOjEwMUEwMDAwMDAwMDAwMDAwMDAwMDBEODAyNDAwMDMyMDAwMDAwMDA4QQorOjEwMUExMDAwMDAxMDAwMDAwNzQwODYzMjAwMDAwMDAwMDAwMDAwRDhERgorOjEwMUEyMDAwMDI4MDAwMzIwMDAwMDAwMDAwMTAwMDAwNTc2MTg2M0E3QQorOjEwMUEzMDAwMDAwMDMwMDIxMjAwMDBDODAyMDAyMEIyMDAwMDMzMDI5MQorOjEwMUE0MDAwMTIwMTAwNUMwODgwMjBCMjAwMDAxNjEzMTIwMDAwNjAzMgorOjEwMUE1MDAwMDI4MDJDQjIwMDAwNDAwMTJBMDEwMEQ0MDIwMDAwQjIzMgorOjEwMUE2MDAwMTgwMDM2MDBDQTAwMDBGODczMEEwM0Y5MDAwMDQxMDFBQgorOjEwMUE3MDAwMDAwMDAwRjgxRjgwRkY5QTAwMDAwMDAwMDAwMDAwRDQ2MgorOjEwMUE4MDAwMDI0MDAwMzIwODAwMDAwMDAwMDAwMDAwODhDRDg1MzdDOQorOjEwMUE5MDAwMDAwMDAwMDAwMDAwMDAxQ0U4QTE4MjNFMDAwMDAwMDBFMQorOjEwMUFBMDAwMDAwMDAwQTQyMjQwODUzQTAwMDAwMDAwMDAwODAwNTAxOQorOjEwMUFCMDAwMDc4MDg0MzIwMDAwM0EwMjA0MDEwMDgwNzJBMDgyQkNEOAorOjEwMUFDMDAwMDAwMDAwMDAwMDFBMDA0Q0M3RTE3NDMyMDAwMDAwMDA2MgorOjEwMUFEMDAwMDAwMDAwNjgwOEUxODEzQTAwMDAzRDAyOTAwMTAwNzhCMgorOjEwMUFFMDAwRjlBMTg2QkEwMDAwMDAwMDAwMDAwMDc4MTk4MDk3M0EzQQorOjEwMUFGMDAwMDAwMDAwMDAwMDIwMDA1ODA3ODA5NzMyMDAwMDAwMDAxRQorOjEwMUIwMDAwMDAwMDAwRDgwMjgwMDAzMjAwMDAwMDAwMDAwMDAwMDA0OQorOjEwMUIxMDAwMDcwMDg0MzIwMDAwMDAwMDQwMDgwMDAwNTcyMTgwM0E4RQorOjEwMUIyMDAwMDAwMDQxMDIxMjAwMDA0Q0YyQzEzOEI0MDAwMDAwMDA3NQorOjEwMUIzMDAwMDAwMDAwMDAwODIxODAzQTAwMDAwMDAwMDAwMDAwMDRCRQorOjEwMUI0MDAwMDhDMDgxMzIwMDAwMDAwMDUxMDAwMEQ4MDJDMDAwMzJGRAorOjEwMUI1MDAwMDAwMDAwMDAwMDAwMDBENDAyMDAwMDMyMDAwMDAwMDA3RAorOjEwMUI2MDAwQ0IxOTAwMjAwNzAwMDAzMjAwMDAxNjEzMDIwMTAwODA4QworOjEwMUI3MDAwMzI4MDJEQkMwNzAwNEEwMjJCMDEwMDg0NzgwQTAyQjk4QQorOjEwMUI4MDAwMDAwMDAwMDBDQjAwMDA4NDE4NDE4ODM0MDAwMDAwMDBGMQorOjEwMUI5MDAwNEQwMDAwMDA3N0EwODEzRTAwMDAwMDAwMDAwODAwMDAxQQorOjEwMUJBMDAwMDcwMDgwMzIwMDAwMTYxMzA0MTAwMDAwMDdDMDg2QjI0MAorOjEwMUJCMDAwMDAwMDAwMDAwMDE4MDAwMDA3QzA4NDMyMDAwMDE2MTM2NworOjEwMUJDMDAwOUYwMDAwMjhEOEEwODJCQzAwMDA2ODAyMDQwMDAwMUMwRQorOjEwMUJEMDAwRDhFMDgxQkMwMDAwMTYxMzA0MDEwMDgwNjI2MDgzQkM2MQorOjEwMUJFMDAwMDAwMDU5MDIyRDAwMDAwMEQ4MjA4MEJBMDAwMDU0MDJFNQorOjEwMUJGMDAwMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwMDAwMDAwRjgwRgorOjEwMUMwMDAwNzMwQTAzRjkwMDAwNTYwMjA0MDEwMDgwMjI4MDJEQkNGMworOjEwMUMxMDAwMDAwMDU5MDJDRDAxMDBEODAyNDA4NDkyMDAwMDE2MTM0MgorOjEwMUMyMDAwMDQwMTAwODAwMjgwMkRCQzAwMDAxNjEzODAwMTAwODA5QQorOjEwMUMzMDAwQTI4MDJGQjYwMDAwNTMwMjAwMDAwMEY4QTI4MDJGOTU2QQorOjEwMUM0MDAwMDAwMDVDMDIwNDAwMDA4MDcyODAyREJDMDAwMDE2MTNBRQorOjEwMUM1MDAwMTIwMDAwNDQxMkUyMzhCMjAwMDA2NjAyMDAwMDAwRDgxMAorOjEwMUM2MDAwMTI4MDJEOUEwMDAwMDAwMDAwMDAwMDg0Rjg0MTg4MzRBMgorOjEwMUM3MDAwMDAwMDE2MTMxMjAwMDA0NDEyRTIzOEIyMTgwMDM2MDBCOQorOjEwMUM4MDAwMDAwMDAwRjg3MzBBMDNGOTAwMDA2NDAyMDYwMTAwODBGNgorOjEwMUM5MDAwMjI4MDJEQkMwMDAwMTYxMzA0MDEwMDgwMDI4MDJEQkNBMAorOjEwMUNBMDAwMDAwMDE2MTM4MDAxMDA4MEEyODAyRkI2MDAwMDVFMDJBMworOjEwMUNCMDAwNjcwMDAwRjhBMjgwMkZCNTAwMDA1RjAyMDAwMDAwRTg3NgorOjEwMUNDMDAwMDJDMDIxOTIwMDAwMTYxMzA0MDEwMDgwNzI4MDJEQkMxNgorOjEwMUNEMDAwMDAwMDAwMDAwMDAwMDBEODAyQzAwMDMyMDAwMEM5MTA1RgorOjEwMUNFMDAwMDAwMDAwNDQwODgwMkRGMjAwMDA0NzAyMDAwMDAwMzA5MAorOjEwMUNGMDAwMDgwMDAwOTIwMDAwNzAwMjgwMDAwMDgwRDI4MDJGQjZBMQorOjEwMUQwMDAwMDAwMDZCMDIxMjAxMDBFODAyQzAyMUIyMTgwMDM2MDA4OAorOjEwMUQxMDAwMDAwMDAwRjg3MzBBMDNGOTAwMDA2RDAyMDQwMTAwODA1RQorOjEwMUQyMDAwMjI4MDJEQkMwMDAwNzAwMjAwMDAwMEQ4MDI0MDg0OTI4NgorOjEwMUQzMDAwMDAwMDE2MTMwNDAxMDA4MDAyODAyREJDMDAwMDE2MTM2MQorOjEwMUQ0MDAwODAwMTAwODBBMjgwMkZCNjAwMDA2QTAyMDAwMDAwRjgyNworOjEwMUQ1MDAwQTI4MDJGOTUwMDAwMDAwMENEMDAwMDg0Rjg0MTg4MzQ1NworOjEwMUQ2MDAwMDAwMDE2MTMxMjAwMDA0NDEyRTIzOEIyMDAwMDAwMDAxNgorOjEwMUQ3MDAwMDAwMDAwRDQwMjQwMDAzMjAwMDAwMDAwMDAwMDAwQTQ3NworOjEwMUQ4MDAwMjJDMDgyM0EwMDAwNzkwMjA0MDEwMDgwNDIwMDg2QkMzMQorOjEwMUQ5MDAwMDAwMDAwMDAwMDA4MDA1ODA3NDA4NzMyMDAwMDc4MDI2OQorOjEwMURBMDAwOEYwMTAwNzQxODQwODdCQTAwMDAwMDAwMDAwMDAwNzQyMgorOjEwMURCMDAwMDgwMDAwMzIwMDAwN0IwMjAwMDQwMDU4RjdBMDg2OUE1OQorOjEwMURDMDAwMDAwMDAwMDAwMDAwMDA3OEY5QTA4NjNBMjgwMDAwMDAxQQorOjEwMUREMDAwMDAwODAwNTg4NzhEOTczQzAwMDAwMDAwMDAwMDAwRDhFNAorOjEwMURFMDAwMDI0MDAwMzIxODAwMDAwMDAwMDAwMDAwQjc2MDg1Mzk5MgorOjEwMURGMDAwMDgwMDAwMDAwMDA4MDAwMDg3Q0Q4NTM3MDAwMDdFMDI0MworOjEwMUUwMDAwMTIwMDAwNENGMkMxMzhCNDAwMDAwMDAwMDAwMDAwNDg4RAorOjEwMUUxMDAwMThBMDg0M0EwMDAwMDAwMDAwMDAwMEQ0MDIwMDAwMzI0NAorOjEwMUUyMDAwMDAwMDAwMDAwMDAwMDA4MDU3QTE4NjNBNDEwMDAwMDAzOQorOjEwMUUzMDAwMDAwNjAwOEMwNzAwMzYzMjAwMDAwMDAwMDAwODAwODAxOQorOjEwMUU0MDAwMDdDMDg1MzIwMDAwMDAwMDAwMTAwMDhDMDc0MDg1MzI3QQorOjEwMUU1MDAwMDAwMDAwMDAwMDAwMDBEODAyODAwMDMyMDAwMDE2MTNDRAorOjEwMUU2MDAwMDQwMDAwNTgwODgwNzFCMjAwMDAwMDAwMDAwMDAwODBFQgorOjEwMUU3MDAwMDg4MDAwMzIxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjlFOQorOjEwMUU4MDAwMDAwMDhDMDIwNDAxMDA4MDAyODAyREJDMDAwMDE2MTNBQgorOjEwMUU5MDAwODAwMTAwODBBMjgwMkZCNjAwMDA4ODAyMDAwMDAwRjhCOAorOjEwMUVBMDAwQTI4MDJGOTUwMDAwODgwMjA0MDEwMDgwMTgwMDg4QkNFMQorOjEwMUVCMDAwMDAwMDhGMDI5MDE5MDA1OEU4OUM4NUJBMDAwMDAwMDBDRAorOjEwMUVDMDAwMDAwMDAwNTgxODgwODUzQTAwMDAwMDAwMDAxODAwODBDQgorOjEwMUVEMDAwMDc4NTg1MzAwMDAwOTQwMjA0MDEwMDgwNDIwMDg2QkMyMgorOjEwMUVFMDAwMDAwMDAwMDAwMDAwMDBEODAyNDAwMDMyMDAwMDAwMDBBNgorOjEwMUVGMDAwMDAwMDAwMDg4OTgwNzEzNzAwMDA5NTAyMDAxMjAwODRGQworOjEwMUYwMDAwMjdFNDgyOTIwMDAwMDAwMDAwMTIwMDg0MDcwMDAwMzJFMworOjEwMUYxMDAwMDAwMDk5MDIyNzAwMDBGQzAyMDA4NUIyMDAwMDk5MDIyRgorOjEwMUYyMDAwMDQwMDAwODA0MjYwM0RCMzE4MDAwMDAwMDAwMDAwRjg4QgorOjEwMUYzMDAwNzM4QTAzMzk5NTAyMzYwMDAwMDAwMEMwMDIwMDM2OTIxMQorOjEwMUY0MDAwMDAwMDE2MTMxMjAwMDA1QzUyODEyQ0I0MDAwMDlEMDJBOAorOjEwMUY1MDAwMDQwMTAwODAwMjgwODJCQzAwMDAxNjEzODAwMDAwODAxMworOjEwMUY2MDAwQTI4MDJGQjYwMDAwQTMwMTAwMDAwMEQ0MDIwMDAwOTI1RQorOjEwMUY3MDAwMDAwMEEwMDIwNDAxMDAxOEQ4QTA4MUJDMDAwMEM5MTAxNAorOjEwMUY4MDAwMDAwMDAwNDQwODgwMkRGMjAwMDAyRDAyQzcwMTAwMzAzRgorOjEwMUY5MDAwMDgwMDAwOTIwMDAwMkQwMkM3MDEwMDZDRDhFMDg2OUE2QworOjEwMUZBMDAwMDgwMDAwMDBDNjAxMDBGODkzNDAwMTM5MTkwMDAwMDA0NAorOjEwMUZCMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDAwMDAwMTRGQQorOjEwMUZDMDAwMDk0MDgxRDIwMDAwMDAwMDAwMDAwMDE0MDg0NTgxMzA2MworOjEwMUZEMDAwMDAwMDE2MTMxMjAxMDBCQzA4QzAyMUIyMDAwMDE2MTM0NQorOjEwMUZFMDAwODAwMDAwODBBMjgwMkZCNjAwMDBGNjAzODAwMTgwODA3MAorOjEwMUZGMDAwMzIwQjZBQjYwMDAwNkExMDAwMDAwMDNDMDMwMDM4RjJBMQorOjEwMjAwMDAwMDAwMEFDMDIwNDA2MDE4MDAyQzA2RUJDMDAwMDE2MTM4MgorOjEwMjAxMDAwODcwNjAxRUM1NkUwNkVCQTAwMDBGMzAzMDAwMDAwODA3MgorOjEwMjAyMDAwMDIwMDAwOTAwMDAwMTYxMzg3MDYwMUVDNTZFMDZFQkExRAorOjEwMjAzMDAwMDAwMDAwMDAwMDAwMDBGODQyODAyRjM0MDhDMDE2MTM5MgorOjEwMjA0MDAwMTIwMDAwNDBBMkNEMzlCMjE4MDAzNjAwMDAwMDAwRjg5RQorOjEwMjA1MDAwNzMwQTAzRjkwMDAwMTYxMzAzQjgwMDAwMDlDMDZFQkQyRgorOjEwMjA2MDAwQjIwMjAwMDAwMDAwMDA4ODgyMEQ5MDNBMkYwMDVFMDY0OAorOjEwMjA3MDAwMDAwMDAwMUMwODAwMzY5MjAwMDAxNjEzMDAwMDAwODBDQgorOjEwMjA4MDAwMDIwMDAwOTAyQzAwNUUwNjAwMDAwMDFDMDgwMDM2OTI0MgorOjEwMjA5MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNEQworOjEwMjBBMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA3NQorOjEwMjBCMDAwMDIwMDAwOTAzODAwNUUwNjAwMDAwMDFDMDgwMDM2OTIwNgorOjEwMjBDMDAwMzkwMDVFMDYwMDAwMDAxQzA4MDAzNjkyMDgwMDAwMDA3RgorOjEwMjBEMDAwMDAwMDAwRjg5MzQwMDEzOTAwMDAxNjEzMTIwMTAwQkMwMworOjEwMjBFMDAwMDhDMDIxQjIwMDAwMTYxMzgwMDAwMDgwQTI4MDJGQjYyNQorOjEwMjBGMDAwMDAwMDE2MTM4MDAwODA4MDMyMEI2QUI2MDAwMDZBMTA2MAorOjEwMjEwMDAwMDAwMDAwM0MwMzAwMzhGMjAwMDBDMTAyMDQwMDAwODAxRgorOjEwMjExMDAwNTI0MDgyQkMwMDAwMTYxMzA0MDEwMDgwNjI0MDgyQkM2MQorOjEwMjEyMDAwMDAwMDE2MTMwNDA1MDE4MDAyQzA2RUJDMDAwMDAwMDAxMAorOjEwMjEzMDAwMDAwMDAwRjg0MjgwMkYzNDA4QzAxNjEzMTIwMDAwNDAzRgorOjEwMjE0MDAwQTJDRDM5QjIxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjk3NgorOjEwMjE1MDAwMDAwMDAwMDAwMDA0MDE3ODA5QzA2RTMyMDAwMDAwMDA5OQorOjEwMjE2MDAwMDA2MjAxRUMwNjgwOTczMjA5MDAwMDAwMDAwMDAwMTBCOAorOjEwMjE3MDAwMDkwMDM2MzIwMDAwODAxMjAwMDQwMTE0MDlDMDZFRDIzQQorOjEwMjE4MDAwMDIwMENCMDIwNEI4MDA4MDgyQ0Q2RUJDMDgwMDE2MTM5QQorOjEwMjE5MDAwMDRCOTAwODA4MkNENkVCQzAwMDAwMDAwMDAwNjAxRUM5NgorOjEwMjFBMDAwMDY0MDAwMzIwMDAwQ0MwMkI1MDAwMEQ4MDIwMDAwQjJBOAorOjEwMjFCMDAwMDAwMDAwMDBBNTAwODBBMDM2MEI2QTM0MDAwMDAwMDA3QgorOjEwMjFDMDAwMDAzMDAyRTgwNkMwMkMzMjAwMDAwMDAwMDAwMDAwMDBEMQorOjEwMjFEMDAwMDc4MDAwMzIwMDAwMDAwMDAwMDAwMDc4QTkwMDJEMzdDMQorOjEwMjFFMDAwMTgwNTAxMDAwMDA4MDAwMEM3OEQ5NzNBMDAwMDAwMDBBNAorOjEwMjFGMDAwMDAwMDAwNzg5OUMwMkMzNzE4MDEwMDAwMDAwMDAwNzgxQQorOjEwMjIwMDAwODk4RDk3M0EwMDAwMTYxMzAyMTAwMDAwODdCRjk3QkExNQorOjEwMjIxMDAwMDAwMDAwMDAwMDE4MDAwMDA3NDBGRTMyMDAwMDE2MTMwNgorOjEwMjIyMDAwMTIwMDAwNDhGMkMxMzhCNDE4MDAzNjAwMDAwMDAwRjg2RgorOjEwMjIzMDAwNzMwQTAzRjkwMDAwMDAwMDAwMTgwMUUwMDYwMDAwMzJGNAorOjEwMjI0MDAwMDAwMDAwMDAwMDAwMDBGODgyODUyRjMwMDAwMDY4MDZDMgorOjEwMjI1MDAwMDAwMDAwMUMwODAwMzY5MjA4MDAwMDAwMDAwMDAwRjg5MgorOjEwMjI2MDAwOTM0MDAxMzkwMDAwMTYxMzEyMDEwMEJDMDhDMDIxQjJDRQorOjEwMjI3MDAwMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2NjAwMDE2MTNBNQorOjEwMjI4MDAwMDQwMTAwRjg4MjhEMkZCMDA3MDAwMDAwMDAwMDAwMTA0QworOjEwMjI5MDAwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MDk0MDgxRDI4QgorOjEwMjJBMDAwMDAwMEU1MDI4MDAwODA4MDMyMEI2QUI2MTcwMDAwMDA1MworOjEwMjJCMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDAzODAwMTRCRgorOjEwMjJDMDAwMDlDMDZFRDIwMDAwRjYwMzAwMDAwMDgwMDIwMDAwOTBGQQorOjEwMjJEMDAwMDAwMDZBMTAwMDAwMDAzODAzMDAzOEYyMDAwMEU4MDIzNQorOjEwMjJFMDAwMDQwMjAxODAwMkMwNkVCQzAwMDBGMzAzMDAwMjAxRUM5NgorOjEwMjJGMDAwNTZFMDZFOUEwMDAwMDAwMEMwMDMwMUVDNTZFMDZFM0ExMgorOjEwMjMwMDAwMDAwMDE2MTM4MDAxMDA4MDAyODAyRkI2MDBDMDE2MTM1MworOjEwMjMxMDAwMTIwMDAwNDBBMjhEMzlCMjE4MDAzNjAwMDAwMDAwRjgwQgorOjEwMjMyMDAwNzMwQTAzRjkyMDAwMTYxMzA0MzkwMDgwODJDRDZFQkNCNQorOjEwMjMzMDAwMTIwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTI3OAorOjEwMjM0MDAwMDAzMDAwMTQwOTAwNkVEMjE1MDAwMDAwMDAwMDAwMTBEQgorOjEwMjM1MDAwMDkwMDM2MzIxODAwMDAwMDAwMDIwMTE0ODlDRDZFMzdFMgorOjEwMjM2MDAwMDAwMDgwMTIwMDIwMDExNDg5NUI5MUQyMUIwMEY0MDI0RQorOjEwMjM3MDAwMzgwMTAwMTAwOTAwMzZCMjAwMDA4MDEyMDAzMDAxMTQ0QworOjEwMjM4MDAwMDkwMDZFRDIxODAwMDAwMDAwMDAwMDEwMDkwMDM2MzI2QgorOjEwMjM5MDAwMDgwMDAwMDAwMDAwMDAxNDc5MEIxNDM4MTAwMDgwMTJBRgorOjEwMjNBMDAwMDA1MDAxMTRBOTVCOTFEOTAwMDBGOTAyMDQyODAxMTQxRQorOjEwMjNCMDAwMDkwMDZFQjIxQzAwODAxMjAwMDAwMDEwMDkwMDM2RDIyNQorOjEwMjNDMDAwMDAwMDA1MDMzODI4MDAxODA5MDA2RUIyMDAwMEZEMDI2NQorOjEwMjNEMDAwMDQyMTAxMDg2OTI0NkVCQzAwMDAxNjEzMDkwMTAwODA2NQorOjEwMjNFMDAwMDIwMDAwQjAwMzAwNjgwNjAwMDAwMDFDMDgwMDM2OTJERQorOjEwMjNGMDAwMDAwMDAxMDMwMjMwMDA4MDgyOUI5MEJDMDAwMDAwMDNCQgorOjEwMjQwMDAwMDYwMzAxODAxMkMwNkVCQzA0MDA2ODA2MDAwMDAwMUNCOAorOjEwMjQxMDAwMDgwMDM2OTIwNTAwNjgwNjAwMDAwMDFDMDgwMDM2OTI4RAorOjEwMjQyMDAwMDAwMDE2MTMwNDMwMDA4MDAyMDA2RUIyMDAwMDA0MDNBNgorOjEwMjQzMDAwMDYwMzAxODAxMkMwNkVCQzBCMDA2ODA2MDAwMDAwMUM4MQorOjEwMjQ0MDAwMDgwMDM2OTIwQzAwNjgwNjAwMDAwMDFDMDgwMDM2OTI1NgorOjEwMjQ1MDAwMDAwMDA4MDMwNDIxMDEwODY5MjQ2RUJDMDAwMDE2MTM2MworOjEwMjQ2MDAwMDkwMTAwODAwMjAwMDBCMDAzMDA2ODA2MDAwMDAwMUNBMworOjEwMjQ3MDAwMDgwMDM2OTIwMDAwMEMwMzAyMzAwMDgwODI5QjkwQkM2MgorOjEwMjQ4MDAwMDAwMDBCMDMwNjAzMDE4MDEyQzA2RUJDMDQwMDY4MDY0NgorOjEwMjQ5MDAwMDAwMDAwMUMwODAwMzY5MjA1MDA2ODA2MDAwMDAwMUNDMQorOjEwMjRBMDAwMDgwMDM2OTIwMDAwMEUwMzlGMzEwMTBDNjkyNDZFQkNCNworOjEwMjRCMDAwMDAwMDAwMDAwMDAwMDAwQzA5MDAwMDMyMDAwMDEyMDNDMAorOjEwMjRDMDAwMDQzMTAwMDQ4OTlCOTBCQzAwMDAxMTAzMDYwMzAxODBDNQorOjEwMjREMDAwMTJDMDZFQkMyMDAwNjgwNjAwMDAwMDFDMDgwMDM2OTI4NgorOjEwMjRFMDAwMjEwMDY4MDYwMDAwMDAxQzA4MDAzNjkyMDAwMDE2MTM0OAorOjEwMjRGMDAwOUYwMDAwODAwMjQwOTBCMjAwMDAxNTAzMDQwMjAxODA5QQorOjEwMjUwMDAwMTJDMDZFQkMyMjAwNjgwNjAwMDAwMDFDMDgwMDM2OTI1MworOjEwMjUxMDAwMDAwMDE3MDMwNDAxMDAwMDM5QTQ5MEJDMjMwMDY4MDZFMgorOjEwMjUyMDAwMDAwMDAwMUMwODAwMzY5MjAwMDAxNjEzOUYwMDAwODA3NworOjEwMjUzMDAwMDIwMDkwQjIyNDAwNjgwNjAwMDAwMDFDMDgwMDM2OTJEOQorOjEwMjU0MDAwMDgwMDE2MTMwQzAwMDBGODYzNDAwMUI5MTAwMDFEMDNDOQorOjEwMjU1MDAwQzUwMTAwQ0MwMjIwMTU5ODA4MDA5MTAzMEMwMDAwRjg3QQorOjEwMjU2MDAwNDM0MDAxQjkxMDAwMDAwMEM1MDEwMENDMDIyMDE1MzgxRAorOjEwMjU3MDAwMDAwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTI0OAorOjEwMjU4MDAwMDAwMDAwMTQwOTAwODBEMjAwMDAxNjEzMTIwMTAwQkNFNAorOjEwMjU5MDAwMDhDMDIxQjIwMDAwNkExMDAwMDAwMDNDMDMwMDM4RjJCRAorOjEwMjVBMDAwMDAwMDAwMDAwMDAwMDA1QzA4MDU4MDMwMDAwMDE2MTNFOQorOjEwMjVCMDAwMDQwMTAwODAwMjQwMkRCQzAwMDAxNjEzMDIwMTAwODBCRgorOjEwMjVDMDAwODJGQTg1QkMwMDAwMTYxMzA2MDEwMDgwOTJGQTg1QkNEMQorOjEwMjVEMDAwMDAwMDI3MDMzNjAxMDA4MDAyMDAwMEIwMEYwMDY4MDZFQgorOjEwMjVFMDAwMDAwMDAwMUMwODAwMzY5MjEwMDAwMDAwMDAyQzAyMDBDMQorOjEwMjVGMDAwQTlEQjg1MzkwMDAwMTYxMzEyMDAwMDU0MDJBNDM4QjI3QQorOjEwMjYwMDAwMDAwMDAwMDAwMDA4MDI4QzA4QzA2RTMyMDAwMDAwMDBDQworOjEwMjYxMDAwMDAwQzAyOTgyODgwNkUzNzAwMDAwMDAwMDAwMDAwOUMyQgorOjEwMjYyMDAwMzgyMjE0MzcwMDAwMzIwMzA0MzAwMDI4MDgwMDZFQjI0QworOjEwMjYzMDAwMDAwMDE2MTMwNDEwMDA2QzA4MDA2RUIyMDAwMDAwMDBDOQorOjEwMjY0MDAwMDAxODAwNEMwODAwNkUzMjAwMDAxNjEzMDQyMDAwMTgxOQorOjEwMjY1MDAwMDgwMDZFQjIwMDAwMDAwMDAwM0MwMDE0MDg4MDZFMzJEQQorOjEwMjY2MDAwMDUwMDM1MDMwMDM4MDIwMDc4RTE2RTk5MDAwMDAwMDA5MworOjEwMjY3MDAwNTEwMDAwRDgwMjAwMDAzMjAwMDAwMDAwMDAzODAyNzg0QgorOjEwMjY4MDAwMDlDMDZFMzIwNTAwMDAwMDY4MDgwMDAwNzdBMTk3Mzk4NAorOjEwMjY5MDAwMDAwMDM3MDMxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDAwMworOjEwMjZBMDAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwNTQ1NDAxRkMxNAorOjEwMjZCMDAwMDJDMDZFMzIxNDEwM0IwMzA0MDAwMDgwQTIwRDcyQjAwMQorOjEwMjZDMDAwMDAwMEYzMTEwMDAwMDAyODA5QzAwMkYyMEUwMDY4MDZBNQorOjEwMjZEMDAwMDAwMDAwMUMwODAwMzY5MjAwMDAxNjEzMDYwOTAwODA1NgorOjEwMjZFMDAwODJCRDcyQkMwMDAwNEYwMzMzMTUwMEE0MDJDMDcyQjI1OQorOjEwMjZGMDAwMDAwMDhDMDM4MDAxMDA4MEIyMDE3MkI2MDEwMTQyMDMyOAorOjEwMjcwMDAwMDQyOTAwODA4MjhENzRCQzA4MEE4QzAzMDQyRDAwODA4QgorOjEwMjcxMDAwODI4RDc0QkMwMDAwMDAwMDAwMzAwMDdDMDgwMDc1MzIxRgorOjEwMjcyMDAwMDAwMDQ5MDMwMDM4MDA4ODE4MDA3NTlDMDgwQThDMDNEMworOjEwMjczMDAwMDQyOTAwODA4MjhENzRCQzEwMDAwMDAwMDAyQzAwN0NGNQorOjEwMjc0MDAwODg4RDc1MzcwMDAwMDAwMDAwMzAwMDdDNjhERDg3MzIxRQorOjEwMjc1MDAwMDAwMDQ4MDM5RjM5MDA4ODE4ODA3NUJDMTAwMDAwMDBGNQorOjEwMjc2MDAwMDAzNDAwODg4ODhENzUzNzAwMDA0OTAzMDAwMDAwODgxOAorOjEwMjc3MDAwMTg4MDg4OUMxMDAwMDAwMDAwMzQwMDg4Njg5RDg4MzkwQgorOjEwMjc4MDAwMzcwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTJGRgorOjEwMjc5MDAwMDAwMDAwMTQwOUMwODdEMjNCMDAwMDAwMDAwMDAwMTBCOAorOjEwMjdBMDAwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MDk4MDg4RDIyRgorOjEwMjdCMDAwMDAwMDUwMDM5RkYxMDE4MDgyREI4N0JDMDAwMDhDMDM4NgorOjEwMjdDMDAwMDAwMDAwODAwMjAwMDA5MDAwMDA4QzAzODAwMDAwODA2OAorOjEwMjdEMDAwQjIwMTcyQjYwMDAwMDAwMDAwMDgwMDQ4MDgwMDc1MzIxRgorOjEwMjdFMDAwMDAwMDAwMDAwMDEwMDA3MDA4MDA3NTMyMDAwMDAwMDBCQQorOjEwMjdGMDAwMDAxQzAwNzQzOEEyNzUzNzAwMDA1NTAzODMxQjAwNzg1NQorOjEwMjgwMDAwMDhDMDc0QjIwMDAwMDAwMDAwMDAwMEY4QzI4MDJGMzQzRAorOjEwMjgxMDAwMkYwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTI3NgorOjEwMjgyMDAwMDAwMDAwMTQwOTgwODREMjM0MDAwMDAwMDAwMDAwMTA3MQorOjEwMjgzMDAwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MDkwMDg3RDIxRgorOjEwMjg0MDAwMDAwMDZCMDM5Rjc4MDE4MEMyMjE2RUJDMDAwMDVEMDMxNQorOjEwMjg1MDAwOUY5OTAxNjQ4ODFCODdCQzAwMDA2QzAzOUY2ODAxNjQxQQorOjEwMjg2MDAwODg1Qjg2QkEwMDAwMDAwMDAwMDAwMDY0MDgwMDAwMzJBNworOjEwMjg3MDAwMDAwMDAwMDAwMDE2MDBBNDAyQzA3MjMyMDAwMDAwMDAzOAorOjEwMjg4MDAwMDAzQzAyQTRCMjVCMkEzQTAwMDAwMDAwMDAzQTAyNzg0MQorOjEwMjg5MDAwMDlDMDZFMzIwMDAwNkQwMzA4MDEwMDA0RThBNTc1QkM5NAorOjEwMjhBMDAwM0YwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMTAwMDgwMTJDNgorOjEwMjhCMDAwMDAwNDAwMTQ2OTVEODBEOTEwMDA4QzAzMEIwMTAwMUMxQQorOjEwMjhDMDAwMDgwMDM2QjIwMDAwNkIwMzA0QTEwMTgwODI5Qjg0QkMyNworOjEwMjhEMDAwMDAwMDY4MDY5Rjk4MDE4MEMyMjE2RUJDMDAwMDY4MDY1NworOjEwMjhFMDAwMDZCMTAxODA4MjVCODdCQzAwMDA4QjAzMEIwMTAwODA3NgorOjEwMjhGMDAwMDIwMDAwQjAwMDAwNkMwMzA0OTkwMTgwQzIyMTZFQkM4QworOjEwMjkwMDAwMDAwMDg5MDMwMkQ0MDE4MDkyRkI2RUJDMTYwMDY4MDZBOQorOjEwMjkxMDAwMDAwMDAwMUMwODAwMzY5MjE3MDA2ODA2MDAwMDAwMUMyQQorOjEwMjkyMDAwMDgwMDM2OTIxQzAwNjgwNjAwMDAwMDFDMDgwMDM2OTI2MQorOjEwMjkzMDAwM0YwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMTAwMDgwMTIzNQorOjEwMjk0MDAwMDAwNDAwMTQ2OTVEODBEOTAwMDA3MTAzMDRBMTAxODBCNgorOjEwMjk1MDAwODI5Qjg0QkMwMDAwNzgwMzA2QTgwMTgwODI1QjgwQkM1NworOjEwMjk2MDAwMDAwMDc1MDMwNEE5MDE4MDAyMDA2RUJDMDAwMDhBMDMwOAorOjEwMjk3MDAwMDRBMTAxODA4MjlCODRCQzAwMDA4QTAzMDQwMTAwODBDMgorOjEwMjk4MDAwMTI0MDgwQkMxNDAwNjgwNjAwMDAwMDFDMDgwMDM2OTI0QgorOjEwMjk5MDAwMDAwMDhBMDM5RkEwMDE3ODI5MjE2RUJDMDAwMDhBMDNGMQorOjEwMjlBMDAwMDIwMTAwODAxMkEwOTdCQzAwMDA2QjAzMDAwMDAwODBCMQorOjEwMjlCMDAwMDIwMDAwOTAwMDAwODUwMzA0MDAwMDgwMDI4MDgyQkNCOQorOjEwMjlDMDAwMDAwMDE2MTMwNDAyMDE4MDAyQzA2RUJDMDAwMDdFMDNFQQorOjEwMjlEMDAwMDIwMDAwODBBMjYwODBCQzA2MDA2ODA2MkMwMTAwMUM3QQorOjEwMjlFMDAwMDgwMDM2QjIwMEMwODIwMzA0MDEwMDgwQTI4RDJGQjAxRgorOjEwMjlGMDAwMDYwMDY4MDYwMDAwMDAxQzA4MDAzNjkyMDAwMDgyMDNGMgorOjEwMkEwMDAwMDQwMDAwODBBMjYwODBCQzAwMDA4MTAzMDYwMzAxODBGNgorOjEwMkExMDAwMTJDMDZFQkMwOTAwNjgwNjAwMDAwMDFDMDgwMDM2OTI1NworOjEwMkEyMDAwMEEwMDY4MDYwMDAwMDAxQzA4MDAzNjkyMDAwMDg0MDNCQgorOjEwMkEzMDAwMDYwMzAxODAxMkMwNkVCQzA3MDA2ODA2MDAwMDAwMUM3RgorOjEwMkE0MDAwMDgwMDM2OTIwODAwNjgwNjAwMDAwMDFDMDgwMDM2OTI1NAorOjEwMkE1MDAwMDIwMDY4MDYzODAxMDAxQzA4MDAzNkIyMDAwMDg4MDMzNgorOjEwMkE2MDAwMDIwQzAyODBBMjVCODBCQzFGMDA2ODA2MDAwMDAwMUNGNAorOjEwMkE3MDAwMDgwMDM2OTIxRTAwNjgwNjAwMDAwMDFDMDgwMDM2OTIwRQorOjEwMkE4MDAwMDAwMDhEMDMwMDAwMDAyODA5NDAwMDkyMDAwMDhEMDMyMworOjEwMkE5MDAwMDAwMDAwMjgwOTgwMDA5MjAwMDA4RDAzMDAwMDAwMjgzQgorOjEwMkFBMDAwMDlDMDAwOTIwMDAwOEQwMzAwMDAwMDI4MDkwMDAxOTI3NworOjEwMkFCMDAwMzAwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTJEMworOjEwMkFDMDAwMDAwMDAwMTQwOTgwOTJEMjBFMDBGMzExMDAwMDAwMUNENworOjEwMkFEMDAwMDgwMDM2RjIwMDAwNjgwNjAwMDAwMDgwMDIwMDAwOTA0NgorOjEwMkFFMDAwMTAwMDE2MTMyQTAwMDBDQzAyMjAxNUI4MEQwMDAwMDBCQgorOjEwMkFGMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDAwMDAwMTRBRgorOjEwMkIwMDAwMDkwMDgwRDIwMDAwMTYxMzEyMDEwMEJDMDhDMDIxQjJENworOjEwMkIxMDAwMDAwMDZBMTAwMDAwMDAzQzAzMDAzOEYyMUQwMDk5MDMxOQorOjEwMkIyMDAwODAwMTAwNzgwOUUwMDBCODAwMDAxNjEzMDQwMTAwODA1RAorOjEwMkIzMDAwMzI4MDk3QkMxRDAwNjgwNjAwMDAwMDFDMDgwMDM2OTIxOQorOjEwMkI0MDAwMDAwMDE2MTMwNDAxMDA4MDIyODA5N0JDMTUwMDY4MDY1RgorOjEwMkI1MDAwMDAwMDAwMUMwODAwMzY5MjAwMDAwMDAwMDAwMDAwMUM2RAorOjEwMkI2MDAwQTgwNTI4MzAwMDAwMTYxMzA0MDAwMDgwMDJDMDJDQkMwOQorOjEwMkI3MDAwMDAwMDE2MTMxMjAxMDBCQzA4QzAyMUIyMDAwMDE2MTM5OQorOjEwMkI4MDAwODAwMDAwODBBMjgwMkZCNjYwMDAxNjEzMDQwMTAwRjhCOAorOjEwMkI5MDAwODI4RDJGQjAwODAwMDAwMDAwMDAwMEY4ODM0MDAxMzk0QQorOjEwMkJBMDAwMzYwMEE0MDMwNDAwMDA4MDgyQ0Q4MUJDMDUwMDAwMDAzMworOjEwMkJCMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDAwMDAwMTRFRQorOjEwMkJDMDAwMDlDMDgxRDIwMDAwMDIwNDgwMDE4MDgwMzIwQjZBQjYwNQorOjEwMkJEMDAwMDAwMDZBMTAwMDAwMDAzODAzMDAzOEYyMkMwMDY4MDY3QworOjEwMkJFMDAwMDIwMTAwODA4MkNEODFCQzAwMDA1RTA2MDAwMDAwODBGMgorOjEwMkJGMDAwMDIwMDAwOTAwMDAwMTYxMzEyMDEwMEJDMDhDMDIxQjJCMAorOjEwMkMwMDAwMDAwMEFCMDMxRDQxMDI1Q0Y4MDE2OEI0NDEwMEYzMDMwRQorOjEwMkMxMDAwMDAwMDAwRjhBMjhEMkY5MTM1MDAwMDAwMDAwMDAwMTA4OAorOjEwMkMyMDAwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MDlDMDg1RDI2RAorOjEwMkMzMDAwMTAwMDAwMDBEMDJDMDIwMEE5REI4NTM5MDAwMDI5MDMxOAorOjEwMkM0MDAwMTIwMTAwNTQwMkE0MzhCMjAwMDAxNjEzMDAwMDAwODBFNAorOjEwMkM1MDAwMDIwMDAwOTAwMDAwQjQwMzA0QjAwMDgwMDIwMDZFQkNDQgorOjEwMkM2MDAwMDAwMEI0MDM4MEI5MDA4MDgyODA2RUI2MDAwMDAwMTNCQgorOjEwMkM3MDAwMDA3ODAxNjAwODAwNkVGMjMwMDA1RTA2RDcwMDAwMUM4QworOjEwMkM4MDAwMDgwMDM2OTIwMDAwQjYwMzgwMDEwMDgwRDI4MTJGQjY4MgorOjEwMkM5MDAwMzEwMDVFMDZENzAwMDAxQzA4MDAzNjkyMDAwMEI4MDMyMQorOjEwMkNBMDAwODAwMTAwODA0MjgxMkZCNjM1MDA1RTA2RDcwMDAwMUNFRgorOjEwMkNCMDAwMDgwMDM2OTIwMDAwQzUwMzA0QTgwMTA4MDkwMDZFQjI5RQorOjEwMkNDMDAwMDAwMDAwMDAwMDIwMDIwODg5OUI5MDNFMDAwMDAwMDBFOAorOjEwMkNEMDAwMDBBMDAxMDg4OTlCOTAzQTAwMDBDNTAzOUY4ODAxMDg2NQorOjEwMkNFMDAwODk5QjkwQkMwMDAwMDAwMDAwMzQwMjAwMDlDMDZFM0RDQQorOjEwMkNGMDAwMDAwMDAwMDAwMDBDMDIwNDA5QTQ2RTM3MDAwMEMxMDNBQworOjEwMkQwMDAwMDIwMDAwODAxMkE0OTBCQzAwMDAwMDAwMDAwMDAwMDgzNworOjEwMkQxMDAwMTk4MDkwMzcwMDAwQzUwMzAyMDEwMjgwODI5QjkwQkM5RAorOjEwMkQyMDAwMzEwMDVFMDZENzAwMDAxQzA4MDAzNjkyMDAwMEM1MDM4MworOjEwMkQzMDAwMDRCMDAwODAwMjAwNkVCQzAwMTJDNTAzMDQwMTAwODBENAorOjEwMkQ0MDAwQTI4RDJGQjAzMjAwNUUwNkQ3MDAwMDFDMDgwMDM2OTIxQworOjEwMkQ1MDAwMDAwMEYzMDMwMDAwMDBGODcyODEyRjk1MDAwMDAwMDBDRQorOjEwMkQ2MDAwMDAwMDAwRjg0MjgwMkYzNDA4QzBBRjAyMTIwMTAwNDA3QQorOjEwMkQ3MDAwQTJDRDM5QjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBCRQorOjEwMkQ4MDAwMDgwMDAwMDAwMDAwMDBGODkzNDAwMTM5MDgwMDAwMDAyRQorOjEwMkQ5MDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDAwMDAwMTQwQworOjEwMkRBMDAwMDlDMDgxRDIwMDAwMTYxMzA0MDAwMDgwMDJDMDJDQkNCMAorOjEwMkRCMDAwMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2NjAwMDE2MTM1QQorOjEwMkRDMDAwMDQwMTAwRjg4MjhEMkZCMDAwMDAwMjA0ODAwMTgwODA5MQorOjEwMkREMDAwMzIwQjZBQjYwMDAwMDAwMDAwMDAwMDE0MDg0MDkwMzI3OAorOjEwMkRFMDAwMDAwMDZBMTAwMDAwMDAzODAzMDAzOEYyMkMwMDY4MDY2QQorOjEwMkRGMDAwMDIwMTAwODA4MkNEODFCQzAwMDA1RTA2MDAwMDAwODBFMAorOjEwMkUwMDAwMDIwMDAwOTAwODAwMDAwMDAwMDAwMEY4OTM0MDAxMzkyMworOjEwMkUxMDAwMDgwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMTAwMDgwMTI4NworOjEwMkUyMDAwMDAwMDAwMTQ4OTREODFENzAwMDAxNjEzMDQwMDAwODBCMworOjEwMkUzMDAwMDJDMDJDQkMwMDAwMTYxMzgwMDAwMDgwQTI4MDJGQjZCOAorOjEwMkU0MDAwNjAwMDE2MTMwNDAxMDBGODgyOEQyRkIwMDAwMDAyMDQwOAorOjEwMkU1MDAwODAwMTgwODAzMjBCNkFCNjAwMDA2QTEwMDAwMDAwMzhFMgorOjEwMkU2MDAwMDMwMDM4RjIwMDAwREYwMzA0MjAwMTgwNTIyMDZFQkMxMgorOjEwMkU3MDAwMDAwMDE2MTMwOTAxMDA4MDAyMDAwMEIwMjYwMDY4MDY1OQorOjEwMkU4MDAwMDAwMDAwMUMwODAwMzY5MjI1MDA2ODA2MDAwMDAwMUNBNworOjEwMkU5MDAwMDgwMDM2OTIwMDAwRTUwMzA0MDEwMEQ4MUU4MEVEQkM1NgorOjEwMkVBMDAwMDAwMEUxMDNCNzAwMDBEODBFQzBFREIyMDAwMEU0MDM1QgorOjEwMkVCMDAwMDQwMTAwODA0MjNCRUVCQzAwMDAwMDAwMDAwMDAwRTA4NgorOjEwMkVDMDAwMUUwMEVFM0EwMDAwMDAwMEE3MDAwMEQwMEUwMEVFMzIxNworOjEwMkVEMDAwMDAwMDAwMDAwMDc0ODZDQzAyODA2QzMyMDAwMDAwMDAwQworOjEwMkVFMDAwMDAwMDAwMDAwOTQwRTczMjAwMDBFOTAzODAwMTgwODAxMworOjEwMkVGMDAwMzIwQjZBQjYzNjAwMTYxMzEyMDAwMDJDODJDRDJFQjJBOQorOjEwMkYwMDAwMDAwMEVCMDMwNDAxMDA4MDQyQzUyQ0JDMDAwMEVDMDM3MAorOjEwMkYxMDAwMDAwMDAwQ0MwMjAwMDA5MjAwMDAwMDAwMDAwMDAwQ0M4NQorOjEwMkYyMDAwMTJDMDJDM0EwMDAwRTcwMzA0MDEwMDAwMTkwMDkwQkMxNQorOjEwMkYzMDAwMDAwMDAwMDAwMDc0ODZDODA2QzAyQzMyMDgwMDAyMDQ5RAorOjEwMkY0MDAwMDAwMDAwRjhDMzQwMDE5OTAwMDBGMTAzMDQwMDAwODA3NAorOjEwMkY1MDAwMDI4MDgwQkMwMDAwMTYxMzA0NTUwMTgwQjJEQjJGQkMzOAorOjEwMkY2MDAwMDAwMDU0MTAwMDAwMDAyQzA5MDAwMEYyMDAwMEY2MDNERAorOjEwMkY3MDAwMDAwMDAwODAwMjAwMDA5MDAwMDBGNTAzMDQwMDAwODBDMworOjEwMkY4MDAwMDI4MDgwQkMwMDAwMTYxMzA0NTUwMTgwQjJEQjJGQkMwOAorOjEwMkY5MDAwMDAwMDU0MTAwMDAwMDAyQ0Y5MDEwMEY0MDAwMEZGMDNCMQorOjEwMkZBMDAwMDQwMDAwMjgwOTgwODBCMjAwMDAwMDAwMDAwMDAwRDg2MgorOjEwMkZCMDAwMDIwMDAwMzIwMDAwODExMTAwMDAwMDA4MDgwMDAwRDI2OQorOjEwMkZDMDAwMDAwMEZGMDMwNDAwMDA4MDAyODA5MkJDMTgwMDM2MDA1RAorOjEwMkZEMDAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMjA0ODAwMTAwODA3OQorOjEwMkZFMDAwQTI4MDJGQjYwMDAwMDIwNDEyMDEwMDAwMDlDMDIxQjIyNQorOjEwMkZGMDAwMTgwMDAwMDAwMDAwMDBGODczMEEwMzM5MDIwNDM2MDBDQworOjEwMzAwMDAwMDAwMDAwQzAwMjAwMzY5MjAwMDAwMjA0ODAwMTAwODAyRgorOjEwMzAxMDAwQTI4MDJGQjYwMDAwMDIwNDEyMDEwMDAwMDlDMDIxQjJGNAorOjEwMzAyMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDBFMQorOjEwMzAzMDAwMDAwMDAwRjgwMjAwMDAzMjE4MDAzNjAwMDAwMDAwRjgxRQorOjEwMzA0MDAwNzM4QTAyOTkxMDAwMDAwMDAwMDAwMEU0MDMwMDM2MzI4OQorOjEwMzA1MDAwMDIwMDAwMDEwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDAyMQorOjEwMzA2MDAwMDAwMDAwRTQwMzAwMzYzMjA0MDAwMDAxMDAwMDAwRTAyQworOjEwMzA3MDAwMDMwMDM3MzJBQTA0MDAwMDAwMDAwMEU0MDMwMDM2MzJFNworOjEwMzA4MDAwMDkwMDAwMDEwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDBFQQorOjEwMzA5MDAwMDAwMDAwQ0MwRjAwMDAzMjAwMDcwMDAwMDAwMDAwRTQzOAorOjEwMzBBMDAwMDMwMDM2MzIwNjAwMDAwMTAwMDAwMEUwMDMwMDM3MzI2MgorOjEwMzBCMDAwMjAwMDAwMDAwMDAwMDBFNDAzMDAzNjMyMDgwMDAwMDE5OAorOjEwMzBDMDAwMDAwMDAwRTAwMzAwMzczMjAwMDEwMDAwMDAwMDAwRTRDRgorOjEwMzBEMDAwMDMwMDM2MzIwNTAwMDAwMTAwMDAwMEUwMDMwMDM3MzIzMworOjEwMzBFMDAwMzAwMDAwMDAwMDAwMDBFNDAzMDAzNjMyMDcwMDAwMDE1OQorOjEwMzBGMDAwMDAwMDAwRTAwMzAwMzczMjAwQTAwMDAwMDAwMDAwRTQwMAorOjEwMzEwMDAwMDMwMDM2MzIwODAwMDAwODAwMDAwMEUwMDMwMDM3MzJGOAorOjEwMzExMDAwMDAwMDAwMDAwMDAwMDBBMDAyMDAwMDMyMDAwMDAwMDBEQgorOjEwMzEyMDAwMDAwMDAwMDAwQjAwMDAzMjAwMDAxNjA0OEIwMTAwQTAxQworOjEwMzEzMDAwMTIwMDJBQkEwMDAwMDAwMDAwMDAwMEE4MDIwMDAwMzJCRAorOjEwMzE0MDAwMDAwMDAwMDAwMDAwMDBFMDA3MDAwMDMyMDAwMDE5MDQ0OQorOjEwMzE1MDAwMDYwMTAwODAwMjgwMkFCQzAwMDAwMDAwMDAwMDAwOUNFNAorOjEwMzE2MDAwMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQ0MDIwMDAwMzIyMworOjEwMzE3MDAwMDAwMDAwMDAwMDAwMDBDQzAyMDAwMDMyMDAwMDAwMDA0RgorOjEwMzE4MDAwMDAwMDAwRDgwMjAwMDAzMjAwMDAwMDAwMDAwMDAwRDA2MworOjEwMzE5MDAwMDIwMDAwMzIwMDAwMDAwMDAwMDAwMERDMDIwMDAwMzJFQgorOjEwMzFBMDAwMDAwMDAwMDAwMDAwMDBGODAyMDAwMDMyMDAwMDAwMDBGMworOjEwMzFCMDAwMDAwMDAwQzgwMjAwMDAzMjAwMDAwMDAwMDAwMDAwQzQ0RgorOjEwMzFDMDAwMDIwMDAwMzIwMDAwMUMwNDg1MDEwMDlDMTJDMDI5QkFENAorOjEwMzFEMDAwMDAwMDAwMDAwMDAwMDBFNDAzMDAzNjMyMEIwMDAwMDQ5MQorOjEwMzFFMDAwMDAwMDAwRTAwMzAwMzczMjgwMDAwMDAwMDAwMDAwRTQyRgorOjEwMzFGMDAwMDMwMDM2MzIxMzAwMDAwNDAwMDAwMEUwMDMwMDM3MzIwMQorOjEwMzIwMDAwMDAyMDAwMDAwMDAwMDBFNDAzMDAzNjMyMEMwMDAwMDQzRgorOjEwMzIxMDAwMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwMDAwMDAwRTQ3RQorOjEwMzIyMDAwMDMwMDA2MzIwRjAwMDAwNDAwMDAwMEUwMDMwMDM3MzIwNAorOjEwMzIzMDAwMDAwNDAxMDAwMDAwMDBFNDAzMDAzNzMyMEQwMDAwMDQyOAorOjEwMzI0MDAwMDAwMDAwRTAwMzAwMzczMjAwMDQwMDAwMDAwMDAwRTQ0QQorOjEwMzI1MDAwMDMwMDM2MzIxNDAwMDAwNDAwMDAwMEUwMDMwMDM3MzI5RgorOjEwMzI2MDAwOUYwMDAwMDAwMDAwMDBFNDAzMDAzNjMyMTUwMDAwMDQ1NworOjEwMzI3MDAwMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwMDAwMDAwRTQxRQorOjEwMzI4MDAwMDMwMDM2MzIxODAwMDAwNDAwMDAwMEUwMDMwMDM3MzI2QgorOjEwMzI5MDAwNjAwMDAwMDAwMDAwMDBFNDAzMDAzNjMyMUQwMDAwMDQ1RQorOjEwMzJBMDAwMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwMDAwMDAwRTRFRQorOjEwMzJCMDAwMDMwMDA0MzIxRTAwMDAwNDAwMDAwMEUwMDMwMDM3MzI2NworOjEwMzJDMDAwNzAwMDAwMDAwMDAwMDBFNDAzMDAzNjMyMUYwMDAwMDQxQworOjEwMzJEMDAwMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwMDAwMDAwRTRCRQorOjEwMzJFMDAwMDMwMDAwMzIyMDAwMDAwNDAwMDAwMEUwMDMwMDM3MzIzOQorOjEwMzJGMDAwQTAwMzAwMDAwMDAwMDBFNDAzMDAzNjMyMTcwMDAwMDRDMQorOjEwMzMwMDAwMDAwMDAwRTAwMzAwMzczMjQwMDAwMDAwMDAwMDAwRTQ0RAorOjEwMzMxMDAwMDMwMDM2MzIxQjAwMDAwNDAwMDAwMEUwMDMwMDM3MzJENworOjEwMzMyMDAwNjAwMDAwMDAwMDAwMDBFNDAzMDAzNjMyMUMwMDAwMDRDRQorOjEwMzMzMDAwMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwMDAwMDAwRTQ1RAorOjEwMzM0MDAwMDM0MDAwMzIxNjAwMDAwNDAwMDAwMEUwMDMwMDM3MzJBMgorOjEwMzM1MDAwMDAwMTAwMDAwMDAwMDBFNDAzMDAzNjMyMUEwMDAwMDRGRgorOjEwMzM2MDAwMDAwMDAwRTAwMzAwMzczMjIwMDEwMDAwMDAwMDAwRTQwQworOjEwMzM3MDAwMDMwMDM2MzIxOTAwMDAwNDAwMDAwMEUwMDMwMDM3MzI3OQorOjEwMzM4MDAwODAwMDAwMDAwMDAwMDBFNDAzMDAzNjMyMEIwMDAwMDE2MgorOjEwMzM5MDAwMDAwMDAwRTAwMzAwMzczMjAwMDEwMDAwMDAwMDAwRTRGQworOjEwMzNBMDAwMDMwMDM2MzIwQzAwMDAwMTAwMDAwMEUwMDMwMDM3MzI1OQorOjEwMzNCMDAwRkVGRjAwMDAwMDAwMDBBQzAyMDAzNjMyMDAwMDAwMDBGQQorOjEwMzNDMDAwMDAwMDAwMDAwOTAwMDAzMjE4MDAwMDAwMDAwMDAwRjhCMgorOjEwMzNEMDAwMDM2NDAyMzkwMDAwNEYwNDg1MDEwMDAwMTkwMDkwQkEwRgorOjEwMzNFMDAwMjUyNjAwMDAwMDAwMDBFNDAzMDAzNjMyMDEwMDAwMDE0MQorOjEwMzNGMDAwMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwMDAwMDAwODAwMQorOjEwMzQwMDAwMEYwMDAwMzIwMDAwMDAwMDAwMDAwMDg0MEYwMDAwMzJCNgorOjEwMzQxMDAwMDgwMDAwMDAwMDAwMDBGOEYzNDAwMTM5MDgwMDAwMDAzNworOjEwMzQyMDAwMDAwMDAwRjhFMzQwMDEzOTA4MDAwMDAwMDAwMDAwRjg0NworOjEwMzQzMDAwQzM0MDAxMzkwODAwMDAwMDAwMDAwMEY4QjM0MDAxMzkyMgorOjEwMzQ0MDAwMDgwMDAwMDAwMDAwMDBGOEEzNDAwMTM5MDgwMDAwMDA1NworOjEwMzQ1MDAwMDAwMDAwRjg5MzQwMDEzOTA4MDAwMDAwMDAwMDAwRjg2NworOjEwMzQ2MDAwODM0MDAxMzkwODAwMDAwMDAwMDAwMEY4NzM0MDAxMzk3MgorOjEwMzQ3MDAwMDgwMDAwMDAwMDAwMDBGODYzNDAwMTM5MDgwMDAwMDA2NworOjEwMzQ4MDAwMDAwMDAwRjg1MzQwMDEzOTA4MDAwMDAwMDAwMDAwRjg3NworOjEwMzQ5MDAwNDM0MDAxMzkwODAwMDAwMDAwMDAwMEY4MzM0MDAxMzlDMgorOjEwMzRBMDAwMDgwMDAwMDAwMDAwMDBGODEzNDAwMTM5MDAwMDAwMDA4RgorOjEwMzRCMDAwMDAwMDAwRjgwMzgwMDAzMjAwMDAwMDAwMDAwMDAwQzg5NworOjEwMzRDMDAwM0Y4MEZDMzUwMDAwMDAwMDAwMDAwMDlDMDIwMDAwMzIzQworOjEwMzREMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDAwMDMyM0UwMDAwMDA3OQorOjEwMzRFMDAwMDAwMDAwRDAwMjAwMzYzMjAwMDAwMDAwMDAwMDAwMjg3QQorOjEwMzRGMDAwMDM0MDM4MzIwMDAwMTYxMzA0MDEwMDgwRDIwMTMwQjZCOAorOjEwMzUwMDAwMDAwMDY3MDQwNDAxMDBEMDEyMDAyREJDQTAwNDAwMDBEQworOjEwMzUxMDAwMDAwMDAwRTQwMzAwMzYzMjAzMDAwMDAxMDAwMDAwRTA3OAorOjEwMzUyMDAwMDMwMDM3MzIwMDAwMDAwMDE3MDAwMEQwMDIwMDAwMzIxNAorOjEwMzUzMDAwMDAwMDAwMDAwMDAwMDBBQ0UxMDAwMDM0MDAwMDAwMDBDQQorOjEwMzU0MDAwMDAwMDAxRTAwNjAwMDAzMjAwMDAwMDAwMDAwODAxRTQ3NQorOjEwMzU1MDAwMDYwMDAwMzIwMDAwMDAwMDAwMEUwMUVDMDYwMDAwMzIwMAorOjEwMzU2MDAwMDAwMDAwMDAwMDEwMDFFMDA2MDAwMDMyMDAwMDAwMDAzMgorOjEwMzU3MDAwMDAwMDAwRDAxMjAwMkQzQTNFMDA2RjA0MDIwMTAwODBDRQorOjEwMzU4MDAwODIwRDJEQkMwMjAwMDAwMDAwMDAwMDlDQUUwRDAyMzIzNgorOjEwMzU5MDAwMDAwMDAwMDAwMDAwMDBBODAyMDAwMDMyMzAwMDAwMDAxRgorOjEwMzVBMDAwMDA4ODg2Q0MwNzAwMzYzMjAwMDAwMDAwMDA4QTg2Q0NGNgorOjEwMzVCMDAwMDcwMDAwM0EwMDI0MDAwMDAwMDAwMDA0MDk4MDM2MzJCMQorOjEwMzVDMDAwMDAwMDE2MTMxMjAwMDA2NDAyNDA5MEIyMDAwMDAwMDBEOAorOjEwMzVEMDAwMDAwMDAwMDQyOTQwOTAzQTAwMDA3QjA0MTIwMDAwNzhBQgorOjEwMzVFMDAwMDlDMDIwQjIwMDAwMTYxMzgwMDEwMDgwRjI4MTk3QjY1NgorOjEwMzVGMDAwMUQwMDE2MTM4MDAxMDA3OEU5RTUwMEI4MDAwMDAwMDAwNgorOjEwMzYwMDAwMDAwMDAwNzgwOTQ1OTAzMDAwMDA3OTA0MDIwMTAwODAzNAorOjEwMzYxMDAwQzI4Mjk3QkMwMDAwMDAwMDAwMDAwMDg0MDIwMDAwMzI1QgorOjEwMzYyMDAwMDAwMDAwMDAwMDAwMDBDQzAzMDAwMDMyMDAwMDgxMDQxNAorOjEwMzYzMDAwOEUwMTAwODAwMjQwMjhCMjAwMDBCRDEwMDAwMDAwRDhCQQorOjEwMzY0MDAwMDIwMDAwRDJBQTExMDAwMDAwMDAwMDhDMEUwMDM2MzJFOQorOjEwMzY1MDAwNTIwMDAwMDAwMDAwMDA3NDBFMDAzNjMyMTgwMDAwMDAxNgorOjEwMzY2MDAwMDAwMDAwRTQwMzAwMzYzMjA5MDAwMDAyMDAwMDAwRTAyMAorOjEwMzY3MDAwMDMwMDM3MzJGRUNBMDAwMDAwMDAwMEU0MDMwMDM2MzJDNworOjEwMzY4MDAwMEEwMDAwMDIwMDAwMDBFMDAzMDAzNzMyMDAwMDhDMDQ1MgorOjEwMzY5MDAwMTIwMTAwMDAwOTQwMjBCMjAwMDA4QTA0MDAwMDAwODBFRQorOjEwMzZBMDAwMDIwMDAwOTAwMDAwOEMwNDEyMDAwMDA0MDk0MDIwQjJDNworOjEwMzZCMDAwMDAwMDhGMDQ5RjAxMDA4MDAyMDA5MEIyMDAwMDhFMDQ4MQorOjEwMzZDMDAwMTIwMDAwMDgwOTQwMjBCMjAyMDA4QTA0MDQwMTAwNzhCOAorOjEwMzZEMDAwMDkyNDE3QjgwNjAwMDAwMDAwMDAwMDc4MDk2NDE2MzhCNQorOjEwMzZFMDAwMDAwMDhBMDQwNDAxMDA4MDAyODE5N0JDRkUwMDAwMDBGMworOjEwMzZGMDAwMDAwMDAwNDQwMzAwMzYzMkZFMDAzNjAwMDAwMDAwNDg5RgorOjEwMzcwMDAwMDMwMDM2OTIwMDAwMTYxMzEyMDAwMDAwMDk0MDIwQjI5OAorOjEwMzcxMDAwMDAwMDk1MDQxMjAwMDAwNDA5NDAyMEIyMDAwMDk4MDQ0MworOjEwMzcyMDAwOUYwMTAwODAwMjAwOTBCMjAwMDA5NzA0MTIwMDAwMDg4MAorOjEwMzczMDAwMDk0MDIwQjIwMDAwMDAwMDAwMDAwMEI0MDIwMDkwMzJGNgorOjEwMzc0MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTMxNQorOjEwMzc1MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBBRQorOjEwMzc2MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA4QworOjEwMzc3MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNFNQorOjEwMzc4MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA3RQorOjEwMzc5MDAwMDIwMDAwOTAwNjAwQUEwNDAwMDAwMDBDMDk2NDE2OThCQworOjEwMzdBMDAwMDAwMEExMDIwMDAwMDAxNDA4NDA5MDkyMDAwMERCMDIxQgorOjEwMzdCMDAwMDAwMDAwMTQwODQwOTA5MjM0MDBDOTAzMDAwMDAwMUM2RgorOjEwMzdDMDAwMDgwMDM2OTIxMjAwQzkwMzAwMDAwMDFDMDgwMDM2OTI1RgorOjEwMzdEMDAwM0EwMEM5MDMwMDAwMDAxQzA4MDAzNjkyMDAwMDE2MTNDRQorOjEwMzdFMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBCQTAyMDAwMDAwMTRGNworOjEwMzdGMDAwMDg0MDkwOTIwMDAwREUwNDAwMDAwMDgwMDIwMDAwOTA2QgorOjEwMzgwMDAwMDAwMEQ0MDMwMDAwMDAxNDA4NDA5MDkyQUIwNDAwMDBCNAorOjEwMzgxMDAwMDAwMDAwODg4MkNEOTAzQTBEMDBDRDA0MDAwMDAwRkMyRAorOjEwMzgyMDAwMDJFNDE2OTgwRDAwREYwNDAwMDAwMEZDMDJFNDE2OTg4NAorOjEwMzgzMDAwMEQwMEU4MDQwMDAwMDBGQzAyRTQxNjk4MDAwMEY2MDQwNQorOjEwMzg0MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDA1MDAwMDAwMDA2MQorOjEwMzg1MDAwMDk0MDkwOUQwMDAwMDYwNTAwMDAwMDgwMDIwMDAwOTBENQorOjEwMzg2MDAwMDAwMDEwMDUwMDAwMDA4MDAyMDAwMDkwMDAwMDFBMDUxMgorOjEwMzg3MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAyNDA1MDAwMDAwMDAwRAorOjEwMzg4MDAwMDk0MDkwOUQwMDAwMkIwNTAwMDAwMDgwMDIwMDAwOTA4MAorOjEwMzg5MDAwMDAwMDM0MDUwMDAwMDAwMDA5NDA5MDlEMDAwMDNCMDUzOQorOjEwMzhBMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBBQTA1MDAwMDAwMDA1NworOjEwMzhCMDAwMDkwMDAwOTIwMDAwQUEwNTAwMDAwMDAwMDk0MDAwOTJFMworOjEwMzhDMDAwMUQwN0FDMDUwMDAwMDBBMDAyMDAzNjkyMDAwMEJBMDVGQQorOjEwMzhEMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAyRAorOjEwMzhFMDAwMDIwMDAwOTAwMDAwREUwNDAwMDAwMERDMEY0MDkwOTIxNworOjEwMzhGMDAwMDAwMDdFMDUwMDAwMDA4MDAyMDAwMDkwMDAwMDgzMDVBQgorOjEwMzkwMDAwMDAwMDAwRDQwMjAwMDA5MjEwMDA5ODA1MDAwMDAwODQxRQorOjEwMzkxMDAwMUY2NDE0OTgwMDAwREUwNDAwMDAwMEVDMEU0MDkwOTIzQQorOjEwMzkyMDAwMDAwMEE0MDUwMDAwMDA4MDAyMDAwMDkwMDAwMERFMDRGQQorOjEwMzkzMDAwMDAwMDAwRDQwRTQwOTA5MjAwMDBBNzA1MDAwMDAwODAxNworOjEwMzk0MDAwMDIwMDAwOTAwMDAwNEUwNjAwMDAwMERDMEU0MDkwOTI0NQorOjEwMzk1MDAwMDAwMENCMDUwMDAwMDA4MDAyMDAwMDkwMDgwMEQwMDVBOAorOjEwMzk2MDAwMDAwMDAwNTAxRjI0MTY5ODAwMDBFODA1MDAwMDAwRDg1MQorOjEwMzk3MDAwMDIwMDAwOTIwRDAwRjMwNTAwMDAwMEZDMDJFNDE2OTgxRQorOjEwMzk4MDAwMDAwMEY0MDUwMDAwMDBEMDAyMDAwMDkyMDAwMDFGMDFCQQorOjEwMzk5MDAwMDAwMDAwRDAwMjAwMDA5MjAwMDAxNTEzMDAwMDAwODAxQgorOjEwMzlBMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA0QQorOjEwMzlCMDAwMDgwMDAwMDAwMDAwMDBGODkzNDAwMTM5MDAwMDAwMDBGQQorOjEwMzlDMDAwMDAwMDAwNzgwOTQ1OTAzMDAwMDAxNjEzMDYwMTAwODBDMQorOjEwMzlEMDAwMjI4MDk3QkMzRjAwMTYxMzA0MDEwMDgwODIwRDAwQjBDNgorOjEwMzlFMDAwMDIwMEQxMDRCMDAwMDBBMEYyMEIwMEI5MDAwMDAwMDBGQQorOjEwMzlGMDAwQTAwMDAwMDQ2QjQxOTAzNDAwMDAwMjA0ODAwMTAwODBBQworOjEwM0EwMDAwMDI0MEIwQjYwMDAwMDIwNDA0MDAwMDgwMDI4MEIwQkM5NgorOjEwM0ExMDAwMDAwMDAwMDAwMDAwMDBEODAyMDAwMDMyMDAwMDAwMDA5QQorOjEwM0EyMDAwMDAwMDAwQTgyMkMwMkYzNzAwMDAwMDAwMDAwMDAwMDBBNgorOjEwM0EzMDAwNjcwMTAwMzQwMDQyMDAwMDAwMDgwMDAwODc4RDJBM0EyOAorOjEwM0E0MDAwMDAwMDE2MTMwNDEwMDAwMDA3MDBCMEIyMDAwMDAwMDBEMAorOjEwM0E1MDAwMDAxODAwMDAwNzAwRDAzMjAwMDAxNjEzMTIwMDAwNDhDMgorOjEwM0E2MDAwRjJDMTM4QjQxODAwMDAwMDAwMDAwMEY4NzMwQTAzMzlFRQorOjEwM0E3MDAwMDIwNDM2MDAwMDAwMDBDMDAyMDAzNjkyMDgwMDAyMDQ3MgorOjEwM0E4MDAwMDAwMDAwRjg5MzQwMDE5OTAwMDBFMjA0OUYwMDAwODBDQworOjEwM0E5MDAwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4MDk0MDkwMzJDRgorOjEwM0FBMDAwMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyMDIwMEUyMDQzMgorOjEwM0FCMDAwQjAwMDAwQTBGMjBCMDBCOTAwMDAwMDAwMDAwMDAwMDAwMAorOjEwM0FDMDAwMEI4MDkwMzIwMDAwMDAwMDAwMDAwMDAwMEQ0MDkwMzI5QQorOjEwM0FEMDAwMDAwMDAwMDBBMDAwMDAwNDNCNDBCMDMxMDAwMERFMDQwNAorOjEwM0FFMDAwMDQwMDAwODAwMkMwMkZCQzg0MTFERTA0MDAwMDAwOENBMgorOjEwM0FGMDAwMEUwMDM2OTIwMDAwMTYxMzAyMDAwMDgwMDJDMTJGQkM5NworOjEwM0IwMDAwMDgwMDAwMDAwMDAwMDBGODkzNDAwMTM5MDIwMEVBMDRCOAorOjEwM0IxMDAwQjAwMDAwQTBGMjBCMDBCOTAwMDBFRDA0ODAwMTAwODBBRAorOjEwM0IyMDAwMTI0MEIwQjYwMDAwMDAwMDAwMDAwMDA0M0I0MEIwMzM3QgorOjEwM0IzMDAwMDAwMDAwMDAwMDAwMDAwNEZENEJEMDM1MDAwMDAwMDAzNAorOjEwM0I0MDAwMDAwMDAwMDgwQjAwMDAzMjAwMDAwMDAwQTAwMDAwMEM4NAorOjEwM0I1MDAwMUJFNEIwMzIwMDAwMDIwNDBCMDAwMDgwMDIwMDAwQjA0MQorOjEwM0I2MDAwMDAwMEYzMDQwNDAwMDA4MDAyNDA5MEIyMUYwMDAyMDQzMQorOjEwM0I3MDAwMDAwMDAwODAxMTQwMDA5OTAwMDBGMjA0MDQwMDAwODA2MQorOjEwM0I4MDAwMTIzRUY4QkEwMDAwMDAwMDAwMDAwMDgwMDEwMEY4MzI4OAorOjEwM0I5MDAwMDAwMDAyMDQwMDAwMDA5MDAxNDBGODkyMDAwMDE2MTM5QgorOjEwM0JBMDAwODAwMDAwODAwMjgxRkNCNjAwMDBGQTA0OUYwMDAwODBDMworOjEwM0JCMDAwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4MDk0MDkwMzJBRQorOjEwM0JDMDAwMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyMDAwMDE2MTNEMAorOjEwM0JEMDAwMDQwMTAwODA0Mjg1OTBCMDAwMDAwMDAwMDAwMDAwRTQ3NQorOjEwM0JFMDAwMDM4MDkwMzIwOTAwMDAwNDAwMDAwMEUwMDMwMDM3MzIzNworOjEwM0JGMDAwMDAwMDAwMDAwMDAwMDBFNDAzNDA5MDMyMEEwMDAwMDRDRQorOjEwM0MwMDAwMDAwMDAwRTAwMzAwMzczMjAwMDBERTA0MDAwMDAwQzhCRQorOjEwM0MxMDAwMEY4MUZDOTQwMDAwMTYxMzAyMDEwMDgwNzI0MjkwQkNEOAorOjEwM0MyMDAwMDAwMDE2MTMwNjAxMDA4MEUyNDI5MEJDMDAwMDE2MTM0QgorOjEwM0MzMDAwMDQwMTAwNzgwOTY0OTBCNTAwMDAwMDAwMDAwMDAwRTQ3MQorOjEwM0M0MDAwNzMwMDkwM0MxMDAwMDAwNDAwMDAwMEUwMDMwMDM3MzJENQorOjEwM0M1MDAwMDAwMERFMDQwMDAwMDA4MDAyMDAwMDkwMDAwMDA5MDU2MgorOjEwM0M2MDAwOUYwMDAwODAwMjAwOTBCMjAwMDAwMDAwMDAwMDAwMDhFOQorOjEwM0M3MDAwMDk0MDkwMzIwMDAwMDAwMDAwMDAwMDA0MDlDMEZEMzIzRAorOjEwM0M4MDAwMDAwMDE2MTMwNDAxMDA4MDQyODU5MEIwMDAwMDAwMDA3RgorOjEwM0M5MDAwMDAwMDAwRTQwMzgwOTAzMjAxMDAwMDA0MDAwMDAwRTAxNgorOjEwM0NBMDAwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEUwMEY4MDkwMzI3NworOjEwM0NCMDAwMDAwMDAwMDAwMDAwMDBFNDAzNDA5MDMyMDIwMDAwMDQxNQorOjEwM0NDMDAwMDAwMDAwRTAwMzAwMzczMjAwMDBERTA0MDAwMDAwRTRFMgorOjEwM0NEMDAwMEY0MDkwOTIwMDAwMTMwNTlGMDAwMDgwMDIwMDkwQjJGOAorOjEwM0NFMDAwMDAwMDAwMDAwMDAwMDAwODA5NDA5MDMyMDAwMDAwMDBDMQorOjEwM0NGMDAwMDAwMDAwMDQwOUMwRkQzMjAwMDAxNjEzMDQwMTAwODAxQQorOjEwM0QwMDAwNDI4NTkwQjAwMDAwMDAwMDAwMDAwMEU0MDM4MDkwMzI4MworOjEwM0QxMDAwMDMwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDA1MAorOjEwM0QyMDAwMDAwMDAwQTgwRTgwOTAzMjAwMDAwMDAwMDAwMDAwRTRCNworOjEwM0QzMDAwMDM0MDkwMzIwNDAwMDAwNDAwMDAwMEUwMDMwMDM3MzIyQQorOjEwM0Q0MDAwMDAwMERFMDQwMDAwMDBBQzBFNDA5MDkyMDAwMDFEMDU1MworOjEwM0Q1MDAwOUYwMDAwODAwMjAwOTBCMjAwMDAwMDAwMDAwMDAwMDhGOAorOjEwM0Q2MDAwMDk0MDkwMzIwMDAwMDAwMDAwMDAwMDA0MDlDMEZEMzI0QworOjEwM0Q3MDAwMDAwMDE2MTMwNDAxMDA4MDQyODU5MEIwMDAwMDAwMDA4RQorOjEwM0Q4MDAwMDAwMDAwRTQwMzgwOTAzMjA1MDAwMDA0MDAwMDAwRTAyMQorOjEwM0Q5MDAwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0MDM0MDkwMzJDRQorOjEwM0RBMDAwMDYwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDBCRAorOjEwM0RCMDAwMDAwMDAwNDQwRjgwOTAzMjAwMDBERTA0MDAwMDAwNDg0NAorOjEwM0RDMDAwMEY0MDkwOTIwMDAwMTYxMzA2MDEwMDgwODI0MjkwQkNDMgorOjEwM0REMDAwMDAwMDE2MTMwNDAxMDA3ODA5NjQ5MEI1MDAwMDI4MDU1RQorOjEwM0RFMDAwMDQwMTAwODA4MjQyOTBCQzAwMDAwMDAwMDAwMDAwMDAzRQorOjEwM0RGMDAwMDkwMDAwMzIwMDAwMDAwMDAwMDAwMEU0MDMwMDkwMzJERgorOjEwM0UwMDAwMTIwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMDAwMERFMDQ2RQorOjEwM0UxMDAwMDAwMDAwNDAxRjQwOTA5QzAwMDAyRTA1OUYwMDAwODA4NQorOjEwM0UyMDAwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4MDk0MDkwMzIzQgorOjEwM0UzMDAwMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyMDAwMDE2MTM1RAorOjEwM0U0MDAwMDQwMTAwODA0Mjg1OTBCMDAwMDAwMDAwMDAwMDAwRTQwMgorOjEwM0U1MDAwMDM4MDkwMzIwNzAwMDAwNDAwMDAwMEUwMDMwMDM3MzJDNgorOjEwM0U2MDAwMDAwMDAwMDAwMDAwMDBFNDAzNDA5MDMyMDgwMDAwMDQ1RAorOjEwM0U3MDAwMDAwMDAwRTAwMzAwMzczMjAwMDBERTA0MDAwMDAwODA5NAorOjEwM0U4MDAwMDIwMDAwOTAwMDAwMTYxMzA2MDEwMDgwODI0MjkwQkNFMAorOjEwM0U5MDAwMDAwMDE2MTMwNDAxMDA3ODA5NjQ5MEI1MDAwMDM4MDU4RAorOjEwM0VBMDAwMDQwMTAwODA4MjQyOTBCQzAwMDAwMDAwMDAwMDAwMDA3RAorOjEwM0VCMDAwMDkwMDAwMzIwMDAwMDAwMDAwMDAwMEU0MDMwMDkwMzIxRQorOjEwM0VDMDAwMTEwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMDAwMERFMDRBRgorOjEwM0VEMDAwMDAwMDAwRkMxRjQwOTA5QzAwMDAzRTA1OUYwMDAwODBGOQorOjEwM0VFMDAwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4MDk0MDkwMzI3QgorOjEwM0VGMDAwMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyMDMwOTAwMDBCQQorOjEwM0YwMDAwMDAwMDAwMjgwODAwMzYzMjAwMDA1NzA1MDAwMDAwMzA4RAorOjEwM0YxMDAwMDgwMDM2RDIwMDAwNjEwNTAwMDAwMDQ0MDg4MDAwRDI4RAorOjEwM0YyMDAwMDAwMDQ3MDUwNDAxMDA4MDAyMDA4NEIyMDMwRTAwMDA3NworOjEwM0YzMDAwMDAwMDAwMjgwODAwMzYzMjgwMDA1NzA1MDAwMDAwMzBERAorOjEwM0Y0MDAwMDgwMDM2RDIwMDAwNjEwNTAwMDAwMDQ0MDhDMDAwRDIxRAorOjEwM0Y1MDAwMDAwMDQ3MDUwNDAxMDA4MDAyMDA4NEIyMDAwMDRFMDUwNQorOjEwM0Y2MDAwMDAwMDAwNDQwODAwMDE5MjgwMDIwMDAwMDAwMDAwMDBGMAorOjEwM0Y3MDAwMDcwMDM2MzI4QzA1MDEwMDAwMDgwMDAwMDcwMDM3MzJDOAorOjEwM0Y4MDAwMDAwMDE2MTMwNDEwMDAwMDA3ODA5MEIyMDAwMDAwMDAyQgorOjEwM0Y5MDAwMDAxODAwMDAwNzQwOTAzMjAwMDAwMDAwMDAwMDAwNDhCOAorOjEwM0ZBMDAwRjJDMTM4MzQwMDAwMTYxMzEyMDAwMDgwMDIwMDAwQjA4NQorOjEwM0ZCMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MjAwMDAwMDAyMgorOjEwM0ZDMDAwMDAwMDAwRTQwMzAwMzYzMjA5MDAwMDAyMDAwMDAwRTBCNworOjEwM0ZEMDAwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0MDM0MDg0MzI5OAorOjEwM0ZFMDAwMEEwMDAwMDIwMDAwMDBFMDAzMDAzNzMyOEMwNTAxMDBFNworOjEwM0ZGMDAwMDAwMDAwQTgwMjAwMzczMkEwMDAwMDAwMDAwMDAwMDAwRQorOjEwNDAwMDAwMDkwMDM2MzIwMDAwMDAwMDAwMDAwMEUwMDcwMDAwMzIyNgorOjEwNDAxMDAwMDAwMDU0MDUwNjAxMDAwMDE5MDA5MEJDMDAwMERFMDRGOQorOjEwNDAyMDAwMDAwMDAwODAwMjAwMDA5MDhDMDUwMTAwMDAwMDAwQzgyNAorOjEwNDAzMDAwMDIwMDM3MzI4MDAyMDAwMDAwMDAwMDNDMDgwMDM2MzJFNworOjEwNDA0MDAwMDAwMDAwMDAwMDAwMDAzNDA4MDAwMTMyMDAwMDVDMDVBMAorOjEwNDA1MDAwMDIwMDAwODBEMkUwODNCQzAwMDAwMDAwMDAwMDAwMzRCOQorOjEwNDA2MDAwMDhDMDgzMzIwMDAwNzIwNTAwMDAwMDgwMDIwMDAwRjBFQQorOjEwNDA3MDAwMDAwMDAwMDAwMDAwMDBBMDA3ODA4MzMyMDAwMDAwMDA2NAorOjEwNDA4MDAwMDAwMDAwMzBEODIwODMzQTAwMDA1QTA1MDQwMTAwM0NBQgorOjEwNDA5MDAwRDhFMDgzQkMwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNTA1NgorOjEwNDBBMDAwMDAwMDAwMDAwMDAwMDA0MDA4MDAwMDMyMDAwMDAwMDA5NgorOjEwNDBCMDAwMDAwMDAwNDgwODAwMDAzMjhDMDUwMTAwMDAwMDAwQzgyNAorOjEwNDBDMDAwMDIwMDM3MzIwMDAyMDAwMDAwMDAwMEM4ODI4RDJDM0E0NgorOjEwNDBEMDAwODAwMDAwMDAwMDAwMDAzQzA4MDAzNjMyMDAwMDAwMDBCNAorOjEwNDBFMDAwMDAwMDAwNzgwOTgwNzgzMjVBNUEwMDAwMDQwMTAwODBFQworOjEwNDBGMDAwODI4RDk3NUMwMDAwNkEwNTAyMDEwMDQ4QTg5RTg0QkE4MAorOjEwNDEwMDAwMDAwMDAwMDAwMDAwMDA0ODE4ODA4NDNBMDAwMDY4MDVBNAorOjEwNDExMDAwMDYwMTAwM0MyOEMwODNCQzAwMDAwMDAwMDAwMDAwNzhCRAorOjEwNDEyMDAwMDk4NTg0MzAxMDAwMDAwMDAwMDAwMDQ4ODg4RDg0MzYyNgorOjEwNDEzMDAwMDAwMDZGMDU5MDAxMDA0OEU4QTU4NEJBMDAwMDAwMDA2NworOjEwNDE0MDAwMDAwMDAwNDgxODgwODQzQTAwMDAwMDAwMDAwMDAwNDg4OQorOjEwNDE1MDAwMDg4NTg0MzAwMDAwMDAwMDA0MDEwMDgwMDI4NTg0NUMzMgorOjEwNDE2MDAwMDAwMDAwMDAwMDAxMDA0MDA4NDAwMDUyMDAwMDAwMDA3NAorOjEwNDE3MDAwMDAwMDAwRTQwMzAwODMzMjAxMDAwMDAyMDAwMDAwRTBDMAorOjEwNDE4MDAwMDMwMDM3MzIwQzAwNzgwNTAwMDAwMDJDRDhBMDgyRjkxQgorOjEwNDE5MDAwMDUwMDAwMDIwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDBDQworOjEwNDFBMDAwMDAwMDAwODAwMjAwMDAzMDAwMDAwMDAwMDAwMTAwMzgyNAorOjEwNDFCMDAwMDg0MDNFNzIwMDAwMDAwMDAwMDAwMEU0MDNDMDgyMzJBQworOjEwNDFDMDAwMDIwMDAwMDIwMDAwMDBFMDAzMDAzNzMyMDIwMDAwMDI5QgorOjEwNDFEMDAwMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwMDAwMDAwODAxMworOjEwNDFFMDAwMDIwMDAwMzAwMDAwN0EwNTgwMDAwMDgwRjI0MDNFQjZGOAorOjEwNDFGMDAwMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwMDAwMDgxMDU0NgorOjEwNDIwMDAwOUYwMDAwODAwMjAwOTBCMjAwMDAwMDAwMDAwMDAwMDg0MworOjEwNDIxMDAwMDk0MDkwMzIwMDAwMDAwMDAwMDAwMDA0MDlDMEZEMzI5NworOjEwNDIyMDAwMDAwMDAwMDAwMDAwMDA4NDBFODA5MDMyMDAwMERFMDREOAorOjEwNDIzMDAwMDAwMDAwODgwRTQwOTA5MjA4MDAwMDAwMDAwMDAwRjg4NgorOjEwNDI0MDAwOTM0MDAxMzkwMDAwODcwNTlGMDAwMDgwMDIwMDkwQjI3MgorOjEwNDI1MDAwMDAwMDAwMDAwMDAwMDAwODA5NDA5MDMyMDAwMDAwMDA0QgorOjEwNDI2MDAwMDAwMDAwMDQwOUMwRkQzMjAwMDAwMDAwMDAwMDAwMjAzMgorOjEwNDI3MDAwMDc0MEY1MzIwMDAwMDAwMDAwMDgwMDIwMDcwMDAwMzI2RgorOjEwNDI4MDAwMDAwMDAwMDAwMDEwMDAyMDA3QzBGNTMyMDAwMDAwMDAxMAorOjEwNDI5MDAwMDAxODAwMjAwNzQwRjYzMjAwMDAwMDAwMDAyMDAwMjAzNworOjEwNDJBMDAwMDc4MEY2MzIwMDAwMDAwMDAwMjgwMDIwMDdDMEY2MzIyOAorOjEwNDJCMDAwMDAwMDAwMDAwMDMwMDAyMDA3MDBGNzMyMDAwMDAwMDA3RQorOjEwNDJDMDAwMDAzODAwMjAwNzgwRkYzMjAwMDAwMDAwMDAwMDAwRDgwNgorOjEwNDJEMDAwMDIwMDAwMzIwMDAwMDAwMDAwMDAwMDAwMDc0MDA5MzIyOAorOjEwNDJFMDAwMDAwMDAwMDAwMDA4MDAwMDc3QzAyOTM3MDAwMDAwMDAyRgorOjEwNDJGMDAwMDAxMDAwMDAwNzgwOTAzMjAwMDAwMDAwMDAxODAwMDA0RAorOjEwNDMwMDAwMDc0MDkwMzIwMDAwMTYxMzEyMDAwMDQ4RjJDMTM4QjQ4MgorOjEwNDMxMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDBERQorOjEwNDMyMDAwMDAwMDAwMDhDODAxMDAzNDAwMDBGNjAzMDAwMDAwRkM5MworOjEwNDMzMDAwMDIwMDAwOTIwMDAwOUEwNTgwMDEwMDgwRjI0MTkwQjZEMAorOjEwNDM0MDAwMDAwMDlCMDUwMDAwMDBDODJGODFGQzk0MDAwMDAwMDBDNQorOjEwNDM1MDAwMDAwMDAwQzgyRjgxRkMzNTAwMDAwMDAwMDAwMDAwODAzNAorOjEwNDM2MDAwMEY0NTkwMzAwMDAwOUUwNTAyMDAwMDgwMDI3RUY4QkNFMAorOjEwNDM3MDAwMDAwMDAwMDAwMDAwMDA4NDBGMDBGODMyMDAwMDAwMDA4MAorOjEwNDM4MDAwMDAwMDAwMDAxOTQwRjgzNzAwMDAwMDAwMDAwMDAwODQyMQorOjEwNDM5MDAwM0Y0MEY4MzcwMDAwMDAwMDAwMDAwMDg0MEY2NEY4M0E0NgorOjEwNDNBMDAwMDAwMDAwMDAwMDAwMDAwMDE5MDBGODM3MDAwMDAwMDBDNQorOjEwNDNCMDAwMDAwMDAwODAzRjAwRjgzNzAwMDBERTA0MDAwMDAwODBBRAorOjEwNDNDMDAwMEYyNEY4OUEwMDAwQTYwNTgwMDEwMDgwRjI0MTkwQjYwMworOjEwNDNEMDAwMDAwMERFMDQwMDAwMDBDODNGODFGQzk0MDAwMERFMDQwMQorOjEwNDNFMDAwMDAwMDAwQzgzRjgxRkM5NTAwMDBBOTA1MDQwMTAwODA4MQorOjEwNDNGMDAwMDI0MDkwQkMwMDAwMDAwMDAwMDAwMDA0MDlDMDAwMzIzMAorOjEwNDQwMDAwMDAwMERFMDQwMDAwMDBFNDFFNDA5MDlDMDAwMDAwMDA1QworOjEwNDQxMDAwMDAwMDAwQTgyMjAwOTAzNzAwMDBERTA0MDAwMDg2QzBFMworOjEwNDQyMDAwMDc0MDkwOTIwODAwMDAwMDAwMDAwMEY4OTM0MDAxMzkxNgorOjEwNDQzMDAwMEQwMDAwMDAwMDAwMDBGQzAyRTQxNjM4MDAwMDAwMDAzRgorOjEwNDQ0MDAwMDAwMDAwMDAwOTAwMDIzMjAwMDBCNDA1MDQwMDAwODBGMgorOjEwNDQ1MDAwMDIwMEIwQjIwMDAwMDAwMDAwMDAwMDAwMEIwMDAwMzJCQgorOjEwNDQ2MDAwMjAwMDAwMDAwMDAwMDBBMDgyMEQyQTNBMDAwMEFGMDVFNQorOjEwNDQ3MDAwMDQwMTAwMDAxOTAwOTBCQzAwMDBCNjA1MDAwMDAwMjhFRgorOjEwNDQ4MDAwNzkwMTAwOTQwMDAwMDAwMDAwMDAwMEM4M0Y4MEZDMzQ2NworOjEwNDQ5MDAwNDA4MDAwMDAwMDAwMDAyODA5ODAzNjMyMDAwMDgxMTFCMQorOjEwNDRBMDAwMDAwMDAwRDgwMjAwMDBEMjAwMDAwMjA0MDQwMDAwODBENgorOjEwNDRCMDAwMDI4MDkyQkMxODAwMDAwMDAwMDAwMEY4NzMwQTAzMzk2MworOjEwNDRDMDAwMDIwNDM2MDAwMDAwMDBDMDAyMDAzNjkyRUEwNUMwMDU3MgorOjEwNDREMDAwMDQwMTAwODA4MjREOTBCQzAwMDAwMDAwMDAwMDAwRUM1MAorOjEwNDRFMDAwMEYwMDE1MzIwMEZFMUYwMDAwMDAwMEYwMEYwMDM3MzJGMQorOjEwNDRGMDAwRjBGRjAwMDAwMDAwMDBFODBGMDAzNjMyOTgwNTAwMDBEMQorOjEwNDUwMDAwMDAwMDAwRjQwRjAwMzYzMjAwMDBDNjA1MDAwMDAwQzhBRAorOjEwNDUxMDAwNEY4MEZDOTUzNjIzMTYxMzA0MDEwMDgwODI0RDkwQkMxOQorOjEwNDUyMDAwMDAwMDAwMDAwMDAwMDBFQzBGODAxNDMyMDBGODFGMDBCMworOjEwNDUzMDAwMDAwMDAwRjAwRjAwMzczMkMwRkYwMDAwMDAwMDAwRTg2QworOjEwNDU0MDAwMEYwMDM2MzI5ODI3MDAwMDAwMDAwMEY0MEYwMDM2MzJDQQorOjEwNDU1MDAwMDAwMDAwMDAwMDAwMDBDODRGODBGQzM0MDQwMDAwMDA5MAorOjEwNDU2MDAwMDAwMDAwNjA4RjREOTAzQTAwMDAxNjEzNjAwMTAwODAzQgorOjEwNDU3MDAwMDIwMDAwQjAwMDAwMTYxMzdBMDEwMDgwMDIwMDAwQjBCMworOjEwNDU4MDAwMDAwMDQyMTEwMDAwMDA4MDAyMDAwMEQwMDAwMERFMDRBNAorOjEwNDU5MDAwMDAwMDAwODAwMjAwMDA5MDAwMDBDRDA1ODAwMTAwODAzNgorOjEwNDVBMDAwMDI0MDkwQjYwMDAwMDAwMDAwMDAwMEM4NkY4MEZDMzQ5QworOjEwNDVCMDAwMDAwMENGMDU4MDAxMDA4MDEyNDA5MEI2MDAwMDAwMDA4RQorOjEwNDVDMDAwMDAwMDAwQzg1RjgwRkMzNDAwMDBERTA0MDAwMDAwODBCMgorOjEwNDVEMDAwMDIwMDAwOTAwMDAwRDIwNTA0MDEwMDgwQjI0MTkwQjBCQQorOjEwNDVFMDAwODAwN0RFMDQwMDAwMDBDODhGOERGQzkxMDAwMEQ0MDUxOAorOjEwNDVGMDAwODAwMDAwODAxMjQwOTBCNjAwMDBENTA1MDAwMDAwQzg4MQorOjEwNDYwMDAwN0Y4MEZDOTUwMDAwMDAwMDAwMDAwMEM4N0Y4MEZDMzQyMworOjEwNDYxMDAwMDAwMEQ3MDU4MDAwMDA4MDAyNDA5MEI2MDAwMEQ4MDU1OQorOjEwNDYyMDAwMDAwMDAwQzg4RjgwRkM5NTAwMDAwMDAwMDAwMDAwQzg1QQorOjEwNDYzMDAwOEY4MEZDMzQwMDAwREEwNTgwMDAwMDgwNDI0MDkwQjY5NAorOjEwNDY0MDAwMDAwMERCMDUwMDAwMDBDODlGODBGQzk1MDAwMDAwMDAxMgorOjEwNDY1MDAwMDAwMDAwQzg5RjgwRkMzNDAwMDBERDA1ODAwMDAwODA2MQorOjEwNDY2MDAwMzI0MDkwQjYwMDAwREUwNTAwMDAwMEM4QUY4MEZDOTUyNworOjEwNDY3MDAwMDAwMDAwMDAwMDAwMDBDOEFGODBGQzM0MDAwMEUxMDUyRAorOjEwNDY4MDAwODAwMDAwODAyMjQwOTBCNjg0MTEwMDAwMDAwMDAwOEM2MQorOjEwNDY5MDAwMEUwMDM2MzIwMDAwRTMwNTAwMDAwMEM4MUY4MUZDOTVDMworOjEwNDZBMDAwQUExMTAwMDAwMDAwMDA4QzBFMDAzNjMyMDAwMDAwMDA0RAorOjEwNDZCMDAwMDAwMDAwQzgxRjgxRkMzNDAwMDAxNjEzMDYwMTAwODBCMgorOjEwNDZDMDAwODIwMkY1QkMwMDAwMTYxMzAzMDAwMDc4MDkwMEY1QkQ1NgorOjEwNDZEMDAwMDAwMDE2MTMwNDAxMDA4MEUyMjVGNUI1MTAwMDAwMDA2QgorOjEwNDZFMDAwMDAwMDAwNEMxRjI0MTYzODAwMDBERTA0MDAwMDAwNTBCQgorOjEwNDZGMDAwMUYwMEY1OUM4MDA3MTYxMzA0MDAwMDgwODI4REZDQjAxQgorOjEwNDcwMDAwMDAwMEVDMDU5RjAwMDA4MDAyMDA5MEIyMDAwMDAwMDA1NQorOjEwNDcxMDAwMDAwMDAwMDgwOTQwOTAzMjAwMDAwMDAwMDAwMDAwMDQ4MgorOjEwNDcyMDAwMDlDMEZEMzIwMDAwMDAwMDAwMDAwMDAwMTcwMEY1M0E0QgorOjEwNDczMDAwOEMwNDAxMDAwMDA4MDAwMDA3MDAzNzMyMDAwMDE2MTM0NworOjEwNDc0MDAwMDQxMDAwMDAwNzgwOTBCMjAwMDAwMDAwMDAxODAwMDA3NAorOjEwNDc1MDAwMDc0MDkwMzIwMDAwMTYxMzEyMDAwMDQwRjJDMTM4QjQzNgorOjEwNDc2MDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMERFMDRBOAorOjEwNDc3MDAwMDAwMDAwODAwMjAwMDA5MDAwMDBERTA0MDAwMDAwRUM1OQorOjEwNDc4MDAwMDM0MDkwOTIwMDAwMTYxMzA0MDAwMDgwMDI0MDkwQkM4OQorOjEwNDc5MDAwMDAwMEY1MDVCMjAwMDBEODAyMDAwMEIyMDAwMDAwMDBFMQorOjEwNDdBMDAwMDAwMjAxRUMxNkU0NkUzQTA4MDAwMDAwMDAwMDAwRjg3OAorOjEwNDdCMDAwOTM0MDAxMzkwMDAwMUYwNjE3MTAwMUY4MDIwMDZFQjI4NQorOjEwNDdDMDAwMDYwMDAwMDYwNDAxMDA4MDgyOEQyRkIwMDMwMDAwMDA2NworOjEwNDdEMDAwMDAwMDAwRjg4MjhEMkYzMjAwQzA2MTEwMDAwMDAwMjgxOAorOjEwNDdFMDAwMDk4MDM2RDIwMDAwMDAwMDAwMDIwMUVDMTZDMDZFM0NDOQorOjEwNDdGMDAwMDAwMDAwMDAwMDE4ODZDODA2MDAwMDMyMTgwMDM2MDBDRAorOjEwNDgwMDAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMTA2MDAwMDAwRDA2MAorOjEwNDgxMDAwMDIwMDAwOTIwMDAwMDcwNjA0MTk4NjgwMDI4MDZDQkMyQQorOjEwNDgyMDAwMDAwMDE2MTM4MDAxMDA4MDEyODAyRkI2MDAwMDAwMDBFNworOjEwNDgzMDAwMDAwMDAwMDAwOTAwNkUzMjAwMDAwMDAwQzEwODAwMDQwMgorOjEwNDg0MDAwMDkwMDZFMzIwMDAwMDAwMEMwMTU4Njc4MEZDMDZDMzI3RgorOjEwNDg1MDAwMDAwMDBEMDY4MDAxMDA4MDIyODAyRkI2MDAwMDBEMDZBQQorOjEwNDg2MDAwMDAxODg2QzgwNjQwMDA5MjAwMDAxNjEzODAwMTAwODBFMAorOjEwNDg3MDAwMjI4MDJGQjYwMDAwMDAwMDAwNDAwMDAwMDkwMDZFMzJDOAorOjEwNDg4MDAwMDAwMDAwMDBDMjQ4MDAwNDA5MDA2RTMyMDAwMDAwMDA3MQorOjEwNDg5MDAwQzAxNjg2NzgwRkMwNkMzMjAwMDAwRDA2ODAwMTAwODBDMworOjEwNDhBMDAwMTI4MDJGQjYwMDAwMDAwMDAwMTg4NkM4MDYwMDAwMzJGMworOjEwNDhCMDAwMDA0MDAwMDAwMDAwMDAyODA5ODAzNjMyMDAwMDE1MDY4NAorOjEwNDhDMDAwMDQwMjAxODAwMkMwNkVCQzAwMDA2MTEwMDAwMjAxRUMxNQorOjEwNDhEMDAwMTZDMDZFREMwMDAwMTMwNjgwMDAwMDgwMDI4MDJGQjYzOAorOjEwNDhFMDAwMDAwMDE1MDY4MTAwMDBGODIyODAyRkI0MDAwMDE1MDY5NAorOjEwNDhGMDAwMDAxODg2QzgwNjQwMDA5MjAwMDAxNTA2ODIwMDAwRjhFNQorOjEwNDkwMDAwMTI4MDJGQjQwMDAwMDAwMDAwMTg4NkM4MDYwMDAwMzI5NAorOjEwNDkxMDAwMDAwMDE2MTMwNDAxMDA4MDAyMDAyREJDMDAwMDE2MTNENQorOjEwNDkyMDAwMDQwMTAwODAwMjgwMkRCQzAwMDAwMDAwMDAxMDg2QzgzOQorOjEwNDkzMDAwMDYwMDAwMzIwMDAwMDAwMDAwMDAwMDAwMDdDMDBBMzIzQworOjEwNDk0MDAwMDAzODAwMDAwMDA4MDAwMDA3MDAzNjMyMDAwMDE2MTM4RgorOjEwNDk1MDAwMDQxMDAwMDAwNzAwOTBCMjAwMDAwMDAwMDAxODAwMDBFMgorOjEwNDk2MDAwMDc0MDkwMzIwMDAwMTYxMzEyMDAwMDQwRjJDMTM4QjQyNAorOjEwNDk3MDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDA3OAorOjEwNDk4MDAwMTcwMTAwRjhBMjgwMkYzNDAwMDAxNjEzMDIxMDg2ODA1MQorOjEwNDk5MDAwNzI4MjZDQkMwMDAwMDAwMDAwMTA4NkE4NDI4MDZDMzc1OAorOjEwNDlBMDAwMDAwMDJBMDYxMjAwNzAzODAyMDA3RUIyMDAwMDE2MTNDMgorOjEwNDlCMDAwMTIwMDcwM0MwMjAwN0VCMjAwMDAxNjEzMTIwMDcwMzAyQworOjEwNDlDMDAwMDIwMDdFQjIwMDAwMTYxMzEyMDA3MDM0MDIwMDdFQjJBNAorOjEwNDlEMDAwMDAwMDIxMDYwMjAxMDA4MEIyODIyQUJDMDAwMDAwMDAxMworOjEwNDlFMDAwMTcwMDAwRDAwMjAwMDAzMjA2MDAwMDA2MDQwMTAwODAxQgorOjEwNDlGMDAwODI4RDJGQjAwMDAwRkEwNTA0MDMwMTgwMDJDMDZFQkM1NgorOjEwNEEwMDAwMDAwMDM1MDYwMDAwMDA4MDAyMDAwMDkwMDAwMDJDMDYyNworOjEwNEExMDAwMDQwMzAxODAwMkMwNkVCQzAwMDAzNTA2MDAxMDg2Qzg4OQorOjEwNEEyMDAwNDY4MDJBOTYwMDAwMDAwMDAwMTA4NkM4NDY4MDJBMzY3QworOjEwNEEzMDAwMDAwMDMwMDY4MDAwMDA4MDEyODAyRkI2MDMwMDMyMDY4RQorOjEwNEE0MDAwMjIwMDAwRjg4MjhEMkZCMjAwMDAzMjA2MDAxODg2QzhCRQorOjEwNEE1MDAwMDYwMDAwOTIwMDAwMzUwNjgwMDAwMDgwMjI4MDJGQjZGQworOjEwNEE2MDAwMDAwMDAwMDBDMjAxMDBGODAyODAyRjM1MDBDMDYxMTA3NAorOjEwNEE3MDAwMDAwMDAwMjgwOTgwMzZEMjAwMDAwMDAwMDAwMjAxRUM4RQorOjEwNEE4MDAwMTZDMDZFM0MxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjlFNworOjEwNEE5MDAwMDAwMDAwMDAwMDEwMDFFMDA2ODAyRjMyMDAwMDAwMDAzRQorOjEwNEFBMDAwMDAwMDAwQThFMTAwMDAzNDAwMDAwMDAwQTIwMDAwRkNBQgorOjEwNEFCMDAwMDIwMDAwMzIwMDAwRjYwMzgwMDEwMDgwQTI4MDJGQjZDMQorOjEwNEFDMDAwMDAwMDNCMDZCOTAxMDBEODAyODAwMUIyMDAwMEY2MDNFNQorOjEwNEFEMDAwMDAwMDAwRjgwMjAwMDA5MjAwMDAwMDAwMDAwMDAwMzgxMgorOjEwNEFFMDAwMTg4MEY3M0EwMDAwMDAwMDAwMDAwMDM4RjhCRjgzMzA1QgorOjEwNEFGMDAwMDAwMDNGMDYwNDAxMDA4MEYyQkQ4M0JDMDAwMEY2MDMwNQorOjEwNEIwMDAwQTkwMDAwRjgwMjAwMDA5MjAwQzA0NjA2MTgwMTAwMEMzRgorOjEwNEIxMDAwQThDRDNFQjIwMDAwNDIwNjg0MDAwMDc0MUY0MEY3QkFFMAorOjEwNEIyMDAwMDAwMEY2MDNBOTAwMDBGODAyMDAwMDkyMDAwMDAwMDA1NworOjEwNEIzMDAwMDAwMDAwNzQwRjAwMDAzMjAwQzA0NjA2MTgwMTAwMEM4RgorOjEwNEI0MDAwQThDRDNFQjIxODAwMzYwMDAwMDAwMEY4NzM4QTAzRjlDMQorOjEwNEI1MDAwMDAwMDQzMDYwMDAwMDBCMDAyMDAwMDkyMDAwMDAwMDBDOAorOjEwNEI2MDAwMDAwMDAwN0MwRjgwODMzMjAwMDAwMDAwMDAyODAwMDA1RAorOjEwNEI3MDAwMDcwMDAwMzIwMDAwMDAwMDAwMzAwMDAwMDcwMDAwMzI5MworOjEwNEI4MDAwMDAwMTAwODAwMDM4MDAwMDA3MDAzNzMyMDAwMDAwMDBGQworOjEwNEI5MDAwMDAzQzAwMEMwNzgwODMzMjAwMDAxNjEzMTIwMDAwNDgwRQorOjEwNEJBMDAwMDJDMDgwQjIwMDAwMTYxMzgwMDEwMDgwQTI4MDJGQjZFMAorOjEwNEJCMDAwMDAwMEY2MDNBOTAwMDAwOEU4MDEwMDk0MDAwMDU0MDY3NAorOjEwNEJDMDAwMDQwMTAwODBBMkMwRURCQzUyMDAwMDAwMDAwMDAwNzQ4RgorOjEwNEJEMDAwMEUwMDM2MzIwMDAwMDAwMDAwMDAwMEMwMEU0MDAxMzIxRQorOjEwNEJFMDAwNDA3RTA1MDAwMDAwMDBCNDBFMDAzNzMyMDAwMDAwMDBENworOjEwNEJGMDAwMDAwMDAwQzQwRTgwMDczMjY0MDA1QTA2MDAwMDAwQ0M5QQorOjEwNEMwMDAwMEUwMDM2OTI2NDAwMTYxMzA0MDEwMDgwODJDREVEQkNDNAorOjEwNEMxMDAwMjkwMDAwMDAwMDAwMDA3NDBFMDAzNjMyMDAwMDAwMDA4MQorOjEwNEMyMDAwMDAwMDAwQzAwRTQwMDAzMkEwOEMwMDAwMDAwMDAwQjQ2NAorOjEwNEMzMDAwMEUwMDM2MzIwMDAwMDAwMDAwMDAwMEM0MEVDMDAwMzIzQQorOjEwNEM0MDAwMDAwMDAwMDAwMDAwMDBDQzBFODAwMjMyMTAwMDAwMDBDNgorOjEwNEM1MDAwMDAwMDAwRTQzMzdCRUMzOTFFMDAwMDAxMDAwMDAwRTA5RQorOjEwNEM2MDAwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEM4NkVDMEVDMzdCRgorOjEwNEM3MDAwMDAwMERFMDQwMDAwMDBEODBFQzBFRDkyMDAwMDE2MTMwNAorOjEwNEM4MDAwMDQzMTAyODBBMkRCMkNCQzAwMDAxNjEzMDQwMTAwODA1QQorOjEwNEM5MDAwMDI4MDgwQjIwMDAwMTYxMzAyMUMwMTgwNTJDMDZFQkM1QworOjEwNENBMDAwMkMwMDE2MTMwMjAxMDA4MDgyQ0Q4MUJDM0YwMDE2MTMzOAorOjEwNENCMDAwMDIwMDAwODA4MkNEODFCQzM2MDA2NzA2MDQwMDAwODBCRgorOjEwNENDMDAwODJDRDgxQkMwRjAwMDAwMDAwMDAwMDEwMDkwMDM2MzJDOAorOjEwNENEMDAwMkMwMDAwMDAwMDAwMDAxNDg5Q0Q4MTNDMTAwMDgwMTJERgorOjEwNENFMDAwMDAxQzAxMTQ1OUU0NkVEOTZGMDYwMDAwMDAwMDAwODgxMgorOjEwNENGMDAwODJDRDgxM0EwMDAwMTYxMzA0MDEwMDgwMDI4MDgwQjI0OAorOjEwNEQwMDAwMDAwMDE2MTMwNDMxMDI4MEEyREIyQ0JDMDAwMDE2MTMzNQorOjEwNEQxMDAwMDIxODAxODA5MkMwNkVCQzJDMDAxNjEzMDIwMDAwODBBNQorOjEwNEQyMDAwODJDRDgxQkMxMDAwMDAwMDAwMDAwMDEwMDkwMDM2MzI2NgorOjEwNEQzMDAwMTAwMDgwMTIwMDE4MDExNDc5RTA2RUQ5NkYwNjAwMDA4RgorOjEwNEQ0MDAwMDAwMDAwODg4MkNEODEzQUFFMDYwMDAwMDAxODAxODg3QworOjEwNEQ1MDAwODJDRDZFM0FCNzA2MDAwMDAwMTgwMTg4ODJDRDZFM0EwNworOjEwNEQ2MDAwQzAwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBQzkwNjAwMDAxNgorOjEwNEQ3MDAwMDAxODAxODg4MkNENkUzQUQyMDYwMDAwMDAxODAxODgyMgorOjEwNEQ4MDAwODJDRDZFM0FEQjA2MDAwMDAwMTgwMTg4ODJDRDZFM0FCMworOjEwNEQ5MDAwRTQwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBRUQwNjAwMDA5RQorOjEwNERBMDAwMDAxODAxODg4MkNENkUzQUY2MDYwMDAwMDAxODAxODhDRQorOjEwNERCMDAwODJDRDZFM0FGRjA2MDAwMDAwMTgwMTg4ODJDRDZFM0E1RgorOjEwNERDMDAwMDgwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBMTEwNzAwMDAyNAorOjEwNEREMDAwMDAxODAxODg4MkNENkUzQTFBMDcwMDAwMDAxODAxODg3OQorOjEwNERFMDAwODJDRDZFM0EyMzA3MDAwMDAwMTgwMTg4ODJDRDZFM0EwQQorOjEwNERGMDAwMkMwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBMzUwNzAwMDBBQworOjEwNEUwMDAwMDAxODAxODg4MkNENkUzQTNFMDcwMDAwMDAxODAxODgyNAorOjEwNEUxMDAwODJDRDZFM0E0NzA3MDAwMDAwMTgwMTg4ODJDRDZFM0FCNQorOjEwNEUyMDAwNTAwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBNTkwNzAwMDAzMworOjEwNEUzMDAwMDAxODAxODg4MkNENkUzQTYyMDcwMDAwMDAxODAxODhEMAorOjEwNEU0MDAwODJDRDZFM0E2QjA3MDAwMDAwMTgwMTg4ODJDRDZFM0E2MQorOjEwNEU1MDAwNzQwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBN0QwNzAwMDBCQgorOjEwNEU2MDAwMDAxODAxODg4MkNENkUzQTg2MDcwMDAwMDAxODAxODg3QworOjEwNEU3MDAwODJDRDZFM0E4RjA3MDAwMDAwMTgwMTg4ODJDRDZFM0EwRAorOjEwNEU4MDAwOTgwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBQTEwNzAwMDA0MworOjEwNEU5MDAwMDAxODAxODg4MkNENkUzQUFBMDcwMDAwMDAxODAxODgyOAorOjEwNEVBMDAwODJDRDZFM0FCMzA3MDAwMDAwMTgwMTg4ODJDRDZFM0FCOQorOjEwNEVCMDAwQkMwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBQzUwNzAwMDBDQgorOjEwNEVDMDAwMDAxODAxODg4MkNENkUzQUNFMDcwMDAwMDAxODAxODhENAorOjEwNEVEMDAwODJDRDZFM0FENzA3MDAwMDAwMTgwMTg4ODJDRDZFM0E2NQorOjEwNEVFMDAwRTAwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBRTkwNzAwMDA1MworOjEwNEVGMDAwMDAxODAxODg4MkNENkUzQUYyMDcwMDAwMDAxODAxODg4MAorOjEwNEYwMDAwODJDRDZFM0FGQjA3MDAwMDAwMTgwMTg4ODJDRDZFM0ExMAorOjEwNEYxMDAwMDQwODAwMDAwMDE4MDE4ODgyQ0Q2RTNBMEQwODAwMDBEOAorOjEwNEYyMDAwMDAxODAxODg4MkNENkUzQTE2MDgwMDAwMDAxODAxODgyQQorOjEwNEYzMDAwODJDRDZFM0ExRjA4MDAwMDAwMTgwMTg4ODJDRDZFM0FCQgorOjEwNEY0MDAwMDAwMEE4MDMwMDAwMDBENDAyMDAwMDkyMDAwMEVDMDI2MAorOjEwNEY1MDAwMDAwMDAwODAwMjAwMDA5MDI4MDgwMDAwMDAxQzAxODg2QQorOjEwNEY2MDAwODJDRDZFM0EyRDA4MDAwMDAwMUMwMTg4ODJDRDZFM0E3OQorOjEwNEY3MDAwMzIwODAwMDAwMDFDMDE4ODgyQ0Q2RTNBMzcwODAwMDAxQworOjEwNEY4MDAwMDAxQzAxODg4MkNENkUzQTNDMDgwMDAwMDAxQzAxODg5QworOjEwNEY5MDAwODJDRDZFM0E0MTA4MDAwMDAwMUMwMTg4ODJDRDZFM0EzNQorOjEwNEZBMDAwNDYwODAwMDAwMDFDMDE4ODgyQ0Q2RTNBNEIwODAwMDBDNAorOjEwNEZCMDAwMDAxQzAxODg4MkNENkUzQTUwMDgwMDAwMDAxQzAxODg1OAorOjEwNEZDMDAwODJDRDZFM0E1NTA4MDAwMDAwMUMwMTg4ODJDRDZFM0FGMQorOjEwNEZEMDAwNUEwODAwMDAwMDFDMDE4ODgyQ0Q2RTNBNUYwODAwMDA2QworOjEwNEZFMDAwMDAxQzAxODg4MkNENkUzQTY0MDgwMDAwMDAxQzAxODgxNAorOjEwNEZGMDAwODJDRDZFM0E2OTA4MDAwMDAwMUMwMTg4ODJDRDZFM0FBRAorOjEwNTAwMDAwNkUwODAwMDAwMDFDMDE4ODgyQ0Q2RTNBNzMwODAwMDAxMworOjEwNTAxMDAwMDAxQzAxODg4MkNENkUzQTc4MDgwMDAwMDAxQzAxODhDRgorOjEwNTAyMDAwODJDRDZFM0EwMDAwQjAwMzAwMDAwMEQ0MDIwMDAwOTI2RQorOjEwNTAzMDAwMDAwMEM2MDMwMDAwMDBENDAyMDAwMDkyMDAwMDcxMEFDNAorOjEwNTA0MDAwMDAwMDAwMTAwODgwMDE5MjAwMDAxNjEzMDAwMDAwODA4QworOjEwNTA1MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA4MworOjEwNTA2MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNEQworOjEwNTA3MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA3NQorOjEwNTA4MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA1MworOjEwNTA5MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNBQworOjEwNTBBMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA0NQorOjEwNTBCMDAwMDIwMDAwOTAwMDAwQjEwQTAwMDAwMDEwMDg4MDAwOTI3OQorOjEwNTBDMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM3QworOjEwNTBEMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAxNQorOjEwNTBFMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBGMworOjEwNTBGMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM0QworOjEwNTEwMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBFNAorOjEwNTExMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBDMgorOjEwNTEyMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEMwMEE3QQorOjEwNTEzMDAwMDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzMDAwMDAwODA5QworOjEwNTE0MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA5MgorOjEwNTE1MDAwMDAwMDEzMEIwMDAwMDAxMDA4NDAwMTkyMDAwMDE2MTMxRAorOjEwNTE2MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA4NAorOjEwNTE3MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA2MgorOjEwNTE4MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNCQgorOjEwNTE5MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxQjBCMDAwMDAwMTBDNworOjEwNTFBMDAwMDhDMDAwOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA2QQorOjEwNTFCMDAwMDAwMDFCMEIwMDAwMDAxMDA4QzAwMDkyMDAwMDIyMEUyRgorOjEwNTFDMDAwMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMDAwMDAwODA0QgorOjEwNTFEMDAwMDIwMDAwOTAwMDAwMUIwQjAwMDAwMDEwMDhDMDAwOTJBRAorOjEwNTFFMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM1QgorOjEwNTFGMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBGNAorOjEwNTIwMDAwMDIwMDAwOTAwMDAwMkUwQjAwMDAwMDEwMDhDMDAwOTI2OQorOjEwNTIxMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDJFMEIxQQorOjEwNTIyMDAwMDAwMDAwMTAwOEMwMDA5MjAwMDAyMjBFMDAwMDAwMTBENAorOjEwNTIzMDAwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA1OAorOjEwNTI0MDAwMDAwMDJFMEIwMDAwMDAxMDA4QzAwMDkyMDAwMDE2MTM5MgorOjEwNTI1MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA5MworOjEwNTI2MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA3MQorOjEwNTI3MDAwMDAwMDJDMEIwMDAwMDAxMDA4QzAwMDkyMDAwMDE2MTM2NAorOjEwNTI4MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAyQzBCMDAwMDAwMTBDNQorOjEwNTI5MDAwMDhDMDAwOTIwMDAwMjIwRTAwMDAwMDEwMDg0MDAxOTI5OQorOjEwNTJBMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDJDMEI4QworOjEwNTJCMDAwMDAwMDAwMTAwOEMwMDA5MjAwMDAxNjEzMDAwMDAwODBEQgorOjEwNTJDMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAxMQorOjEwNTJEMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM2QQorOjEwNTJFMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBGNTBCMDAwMDAwMTA5QworOjEwNTJGMDAwMDhDMDAwOTIwMDAwMTgwQjAwMDAwMDEwMDgwMDAxOTI4NgorOjEwNTMwMDAwMDAwMDEzMEIwMDAwMDAxMDA4NDAwMTkyMDAwMDE2MTM2QgorOjEwNTMxMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBEMgorOjEwNTMyMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBCMAorOjEwNTMzMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTMwOQorOjEwNTM0MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBBMgorOjEwNTM1MDAwMDIwMDAwOTAwMDAwRUIwQjAwMDAwMDEwMDg4MDAwOTI5QgorOjEwNTM2MDAwMDAwMDE4MEIwMDAwMDAxMDA4MDAwMTkyMDAwMDEzMEI1MQorOjEwNTM3MDAwMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMDAwMDAwODA5OQorOjEwNTM4MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA1MAorOjEwNTM5MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNBOQorOjEwNTNBMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA0MgorOjEwNTNCMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAyMAorOjEwNTNDMDAwMDAwMEVCMEIwMDAwMDAxMDA4MDAwMTkyMDAwMDE4MEIxOQorOjEwNTNEMDAwMDAwMDAwMTAwODAwMDE5MjAwMDAxMzBCMDAwMDAwMTBGNAorOjEwNTNFMDAwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBBNworOjEwNTNGMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM0OQorOjEwNTQwMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBFMQorOjEwNTQxMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBCRgorOjEwNTQyMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDc5MENCQworOjEwNTQzMDAwMDAwMDAwMTAwODgwMDA5MjAwMDAxODBCMDAwMDAwMTAwRgorOjEwNTQ0MDAwMDgwMDAxOTIwMDAwMTMwQjAwMDAwMDEwMDg0MDAxOTJCOAorOjEwNTQ1MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNFOAorOjEwNTQ2MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA4MQorOjEwNTQ3MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA1RgorOjEwNTQ4MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNCOAorOjEwNTQ5MDAwMDAwMDAwODAwMjAwMDA5MDAwMDA3OTBDMDAwMDAwMTA2NQorOjEwNTRBMDAwMDgwMDAxOTIwMDAwMTgwQjAwMDAwMDEwMDgwMDAxOTI5MworOjEwNTRCMDAwMDAwMDEzMEIwMDAwMDAxMDA4NDAwMTkyMDAwMDE2MTNCQQorOjEwNTRDMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAyMQorOjEwNTREMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBGRgorOjEwNTRFMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM1OAorOjEwNTRGMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAyRDBCMDAwMDAwMTA1MgorOjEwNTUwMDAwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA0NgorOjEwNTUxMDAwMDAwMDJEMEIwMDAwMDAxMDA4ODAwMDkyMDAwMDIyMEVGOQorOjEwNTUyMDAwMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMDAwMDAwODBFNworOjEwNTUzMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA5RQorOjEwNTU0MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNGNworOjEwNTU1MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA5MAorOjEwNTU2MDAwMDIwMDAwOTAwMDAwMkQwQjAwMDAwMDEwMDgwMDAxOTJDNgorOjEwNTU3MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDJEMEJCOAorOjEwNTU4MDAwMDAwMDAwMTAwODAwMDE5MjAwMDAyMjBFMDAwMDAwMTAzMAorOjEwNTU5MDAwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBGNQorOjEwNTVBMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM5NworOjEwNTVCMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAzMAorOjEwNTVDMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAwRQorOjEwNTVEMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDdEMDgwQgorOjEwNTVFMDAwMDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzMDAwMDAwODA2NworOjEwNTVGMDAwMDIwMDAwOTAwMDAwN0QwODAwMDAwMDEwMDg0MDAxOTJBOQorOjEwNTYwMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTMzNgorOjEwNTYxMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBDRgorOjEwNTYyMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBBRAorOjEwNTYzMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDQzMEVERQorOjEwNTY0MDAwMDAwMDAwMTAwODQwMDE5MjAwMDAzOTBFMDAwMDAwMTAxOAorOjEwNTY1MDAwMDg0MDAxOTIwMDAwNDMwRTAwMDAwMDEwMDg0MDAxOTIzMworOjEwNTY2MDAwMDAwMDEzMEIwMDAwMDAxMDA4NDAwMTkyMDAwMDE2MTMwOAorOjEwNTY3MDAwMDAwMDAwODAwMjAwMDA5MDAwMDA0MzBFMDAwMDAwMTBCNworOjEwNTY4MDAwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAwNAorOjEwNTY5MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEI5MEEwQworOjEwNTZBMDAwMDAwMDAwMTAwODQwMDA5MjAwMDBCOTBBMDAwMDAwMTAzRAorOjEwNTZCMDAwMDg4MDAwOTIwMDAwQjkwQTAwMDAwMDEwMDhDMDAwOTJBMworOjEwNTZDMDAwMDAwMEI5MEEwMDAwMDAxMDA4MDAwMTkyMDAwMEJFMEFBNAorOjEwNTZEMDAwMDAwMDAwMTAwODQwMDE5MjAwMDBCOTBBMDAwMDAwMTAwQworOjEwNTZFMDAwMDg4MDAxOTIwMDAwQjkwQTAwMDAwMDEwMDhDMDAxOTI3MQorOjEwNTZGMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM0NgorOjEwNTcwMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBERQorOjEwNTcxMDAwMDIwMDAwOTAwMDAwRjYwQzAwMDAwMDEwMDg4MDAwOTJDQgorOjEwNTcyMDAwMDAwMEY2MEMwMDAwMDAxMDA4QzAwMDkyMDAwMEY2MEMwQgorOjEwNTczMDAwMDAwMDAwMTAwODAwMDE5MjAwMDAxMzBCMDAwMDAwMTA5MAorOjEwNTc0MDAwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA0MworOjEwNTc1MDAwMDAwMEY2MEMwMDAwMDAxMDA4QzAwMTkyMDAwMDE2MTNCMworOjEwNTc2MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA3RQorOjEwNTc3MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA1QworOjEwNTc4MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNCNQorOjEwNTc5MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA0RQorOjEwNTdBMDAwMDIwMDAwOTAwMDAwNEQwRTAwMDAwMDEwMDg0MDAxOTIyMQorOjEwNTdCMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM4NQorOjEwNTdDMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAxRQorOjEwNTdEMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBGQworOjEwNTdFMDAwMDAwMENCMEUwMDAwMDAxMDA4NDAwMTkyMDAwMENGMEUxOAorOjEwNTdGMDAwMDAwMDAwMTAwODQwMDE5MjAwMDAzMTBFMDAwMDAwMTA2RgorOjEwNTgwMDAwMDg0MDAxOTIwMDAwQ0YwRTAwMDAwMDEwMDg0MDAxOTJGNQorOjEwNTgxMDAwMDAwMDdEMDgwMDAwMDAxMDA4NDAwMTkyMDAwMDE2MTNFRgorOjEwNTgyMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBDRjBFMDAwMDAwMTA3OQorOjEwNTgzMDAwMDg0MDAxOTIwMDAwN0UwODAwMDAwMDEwMDgwMDAyOTI1QgorOjEwNTg0MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNGNAorOjEwNTg1MDAwMDAwMDAwODAwMjAwMDA5MDAwMDBEMDBFMDAwMDAwMTA0OAorOjEwNTg2MDAwMDg0MDAxOTIwMDAwMzEwRTAwMDAwMDEwMDg0MDAxOTIzMworOjEwNTg3MDAwMDAwMEQwMEUwMDAwMDAxMDA4NDAwMTkyMDAwMDdEMDhEQQorOjEwNTg4MDAwMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMDAwMDAwODA4NAorOjEwNTg5MDAwMDIwMDAwOTAwMDAwRDAwRTAwMDAwMDEwMDg0MDAxOTJBRAorOjEwNThBMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM5NAorOjEwNThCMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAyRAorOjEwNThDMDAwMDIwMDAwOTAwMDAwRDUwRTAwMDAwMDEwMDg4MDAwOTIzOQorOjEwNThEMDAwMDAwMEQ1MEUwMDAwMDAxMDA4QzAwMDkyMDAwMEQ1MEU5OAorOjEwNThFMDAwMDAwMDAwMTAwODAwMDE5MjAwMDAxMzBCMDAwMDAwMTBERgorOjEwNThGMDAwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA5MgorOjEwNTkwMDAwMDAwMEQ1MEUwMDAwMDAxMDA4QzAwMTkyMDAwMDE2MTMyMAorOjEwNTkxMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBDQworOjEwNTkyMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBBQQorOjEwNTkzMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTMwMworOjEwNTk0MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA5QworOjEwNTk1MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA3QQorOjEwNTk2MDAwMDAwMEEwMEEwMDAwMDAxMDA4NDAwMDkyMDAwMDE2MTM3QQorOjEwNTk3MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA2QworOjEwNTk4MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA0QQorOjEwNTk5MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEVBMEVENAorOjEwNTlBMDAwMDAwMDAwMTAwODgwMDA5MjAwMDBFQTBFMDAwMDAwMTBDNQorOjEwNTlCMDAwMDhDMDAwOTIwMDAwRUEwRTAwMDAwMDEwMDgwMDAxOTJFQQorOjEwNTlDMDAwMDAwMDEzMEIwMDAwMDAxMDA4NDAwMTkyMDAwMDE2MTNBNQorOjEwNTlEMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBFQTBFMDAwMDAwMTBBRAorOjEwNTlFMDAwMDhDMDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAyMQorOjEwNTlGMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM0MworOjEwNUEwMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwMzBGMDAwMDAwMTA2MgorOjEwNUExMDAwMDg4MDAwOTIwMDAwMDMwRjAwMDAwMDEwMDhDMDAwOTJGMAorOjEwNUEyMDAwMDAwMDAzMEYwMDAwMDAxMDA4MDAwMTkyMDAwMDEzMEI5QgorOjEwNUEzMDAwMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMDAwMDAwODBEMgorOjEwNUE0MDAwMDIwMDAwOTAwMDAwMDMwRjAwMDAwMDEwMDhDMDAxOTI0NworOjEwNUE1MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDdEMDg4NgorOjEwNUE2MDAwMDAwMDAwMTAwODAwMDA5MjAwMDAxNjEzMDAwMDAwODBFMworOjEwNUE3MDAwMDIwMDAwOTAwMDAwN0QwODAwMDAwMDEwMDg4MDAwOTJFNQorOjEwNUE4MDAwMDAwMDE1MEYwMDAwMDAxMDA4QzAwMDkyMDAwMDdEMDgwMworOjEwNUE5MDAwMDAwMDAwMTAwODAwMDE5MjAwMDA3RDA4MDAwMDAwMTBDNgorOjEwNUFBMDAwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBFMAorOjEwNUFCMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM4MgorOjEwNUFDMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAxQgorOjEwNUFEMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBGOQorOjEwNUFFMDAwMDAwMDdEMDgwMDAwMDAxMDA4ODAwMDkyMDAwMDI2MEZEMgorOjEwNUFGMDAwMDAwMDAwMTAwODgwMDA5MjAwMDA3RDA4MDAwMDAwMTBFNworOjEwNUIwMDAwMDgwMDAxOTIwMDAwN0QwODAwMDAwMDEwMDg0MDAxOTI4QQorOjEwNUIxMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTMyMQorOjEwNUIyMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBCQQorOjEwNUIzMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA5OAorOjEwNUI0MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDdEMDg5NQorOjEwNUI1MDAwMDAwMDAwMTAwODgwMDA5MjAwMDAyNjBGMDAwMDAwMTBENgorOjEwNUI2MDAwMDgwMDAxOTIwMDAwN0QwODAwMDAwMDEwMDgwMDAxOTI2QQorOjEwNUI3MDAwMDAwMDdEMDgwMDAwMDAxMDA4NDAwMTkyMDAwMDE2MTM4QworOjEwNUI4MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA1QQorOjEwNUI5MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAzOAorOjEwNUJBMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM5MQorOjEwNUJCMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAyQQorOjEwNUJDMDAwMDIwMDAwOTAwMDAwN0QwODAwMDAwMDEwMDg4MDAwOTI5NAorOjEwNUJEMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDdEMDgwNQorOjEwNUJFMDAwMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMDAwMDAwODAyMQorOjEwNUJGMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBEOAorOjEwNUMwMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTMzMAorOjEwNUMxMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBDOQorOjEwNUMyMDAwMDIwMDAwOTAwMDAwRkEwRTAwMDAwMDEwMDg4MDAwOTJCMAorOjEwNUMzMDAwMDAwMEZBMEUwMDAwMDAxMDA4QzAwMDkyMDAwMEZBMEVFQQorOjEwNUM0MDAwMDAwMDAwMTAwODAwMDE5MjAwMDAxMzBCMDAwMDAwMTA3QgorOjEwNUM1MDAwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAyRQorOjEwNUM2MDAwMDAwMEZBMEUwMDAwMDAxMDA4QzAwMTkyMDAwMDE2MTM5OAorOjEwNUM3MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA2OQorOjEwNUM4MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA0NworOjEwNUM5MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNBMAorOjEwNUNBMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAzOQorOjEwNUNCMDAwMDIwMDAwOTAwMDAwMzkwRjAwMDAwMDEwMDgwMDAyOTI1RQorOjEwNUNDMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM3MAorOjEwNUNEMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAwOQorOjEwNUNFMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBFNworOjEwNUNGMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEMwMEE5RgorOjEwNUQwMDAwMDAwMDAwMTAwOEMwMDE5MjAwMDAxNjEzMDAwMDAwODA3RgorOjEwNUQxMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBCNgorOjEwNUQyMDAwMDAwMDEzMEIwMDAwMDAxMDA4NDAwMTkyMDAwMDE2MTM0MQorOjEwNUQzMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwMTBCMDAwMDAwMTAzNQorOjEwNUQ0MDAwMDhDMDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBCRAorOjEwNUQ1MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNERgorOjEwNUQ2MDAwMDAwMDAwODAwMjAwMDA5MDAwMDBDMDBBMDAwMDAwMTA0NworOjEwNUQ3MDAwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBDRQorOjEwNUQ4MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDEzMEJCQQorOjEwNUQ5MDAwMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMDAwMDAwODA2RgorOjEwNURBMDAwMDIwMDAwOTAwMDAwMDEwQjAwMDAwMDEwMDhDMDAxOTJFQQorOjEwNURCMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM3RgorOjEwNURDMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAxOAorOjEwNUREMDAwMDIwMDAwOTAwMDAwMjYwRDAwMDAwMDEwMDg4MDAwOTJENAorOjEwNURFMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDI2MEQ0NQorOjEwNURGMDAwMDAwMDAwMTAwODgwMDA5MjAwMDAyMjBFMDAwMDAwMTAzOQorOjEwNUUwMDAwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA3QworOjEwNUUxMDAwMDAwMDI2MEQwMDAwMDAxMDA4ODAwMDkyMDAwMDE2MTNGQworOjEwNUUyMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBCNworOjEwNUUzMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA5NQorOjEwNUU0MDAwMDAwMDI2MEQwMDAwMDAxMDA4MDAwMTkyMDAwMDE2MTM0QgorOjEwNUU1MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAyNjBEMDAwMDAwMTBFRAorOjEwNUU2MDAwMDgwMDAxOTIwMDAwMjIwRTAwMDAwMDEwMDg0MDAxOTI3QworOjEwNUU3MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDI2MERCNAorOjEwNUU4MDAwMDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzMDAwMDAwODBCRQorOjEwNUU5MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAzNQorOjEwNUVBMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDI2MEQ4NAorOjEwNUVCMDAwMDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzMDAwMDAwODA4RQorOjEwNUVDMDAwMDIwMDAwOTAwMDAwMjYwRDAwMDAwMDEwMDgwMDAxOTI2MgorOjEwNUVEMDAwMDAwMDIyMEUwMDAwMDAxMDA4NDAwMTkyMDAwMDE2MTM3RQorOjEwNUVFMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAyNjBEMDAwMDAwMTA1RAorOjEwNUVGMDAwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBDQworOjEwNUYwMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTMyRAorOjEwNUYxMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAyNjBEMDAwMDAwMTAyQworOjEwNUYyMDAwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAxQworOjEwNUYzMDAwMDAwMDI2MEQwMDAwMDAxMDA4ODAwMDkyMDAwMDIyMEVENAorOjEwNUY0MDAwMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMDAwMDAwODBCRAorOjEwNUY1MDAwMDIwMDAwOTAwMDAwMjYwRDAwMDAwMDEwMDg4MDAwOTI1MgorOjEwNUY2MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNDRAorOjEwNUY3MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA2NgorOjEwNUY4MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA0NAorOjEwNUY5MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDI2MEQ5MworOjEwNUZBMDAwMDAwMDAwMTAwOEMwMDE5MjAwMDAyMjBFMDAwMDAwMTA0NgorOjEwNUZCMDAwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBDQgorOjEwNUZDMDAwMDAwMDI2MEQwMDAwMDAxMDA4QzAwMTkyMDAwMDE2MTMwQQorOjEwNUZEMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAwNgorOjEwNUZFMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBFNAorOjEwNUZGMDAwMDAwMEFCMEQwMDAwMDAxMDA4ODAwMDkyMDAwMDE2MTM5NgorOjEwNjAwMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBENQorOjEwNjAxMDAwMDIwMDAwOTAwMDAwN0QwODAwMDAwMDEwMDg0MDAxOTI3RQorOjEwNjAyMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEFCMEQ3RAorOjEwNjAzMDAwMDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzMDAwMDAwODA4RAorOjEwNjA0MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA4MworOjEwNjA1MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEFCMEQ0RAorOjEwNjA2MDAwMDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzMDAwMDAwODA1RAorOjEwNjA3MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA1MworOjEwNjA4MDAwMDAwMDdEMDgwMDAwMDAxMDA4NDAwMTkyMDAwMDE2MTM3NworOjEwNjA5MDAwMDAwMDAwODAwMjAwMDA5MDAwMDBBQjBEMDAwMDAwMTAyNgorOjEwNjBBMDAwMDhDMDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA1QQorOjEwNjBCMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM3QworOjEwNjBDMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAxNQorOjEwNjBEMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBGMworOjEwNjBFMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDdEMDhGMAorOjEwNjBGMDAwMDAwMDAwMTAwODQwMDE5MjAwMDAxNjEzMDAwMDAwODAwQworOjEwNjEwMDAwMDIwMDAwOTAwMDAwQjUwRDAwMDAwMDEwMDhDMDAxOTJEMAorOjEwNjExMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTMxQgorOjEwNjEyMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBCNAorOjEwNjEzMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA5MgorOjEwNjE0MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNFQgorOjEwNjE1MDAwMDAwMDAwODAwMjAwMDA5MDAwMDA3RDA4MDAwMDAwMTA5OAorOjEwNjE2MDAwMDg0MDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAxOQorOjEwNjE3MDAwMDAwMEI1MEQwMDAwMDAxMDA4ODAwMDkyMDAwMDE2MTMwQQorOjEwNjE4MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA1NAorOjEwNjE5MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAzMgorOjEwNjFBMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM4QgorOjEwNjFCMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAyNAorOjEwNjFDMDAwMDIwMDAwOTAwMDAwQjMwRTAwMDAwMDEwMDg0MDAxOTI5MQorOjEwNjFEMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTM1QgorOjEwNjFFMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBGNAorOjEwNjFGMDAwMDIwMDAwOTAwMDAwODYwODAwMDAwMDEwMDg0MDAwOTI5NQorOjEwNjIwMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTMyQQorOjEwNjIxMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODBDMworOjEwNjIyMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBBMQorOjEwNjIzMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEREMDgzRQorOjEwNjI0MDAwMDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzMDAwMDAwODA3QgorOjEwNjI1MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA3MQorOjEwNjI2MDAwMDAwMEM2MDkwMDAwMDAxMDA4MDAwMTkyMDAwMDE2MTM4QgorOjEwNjI3MDAwMDAwMDAwODAwMjAwMDA5MDAwMDA4NTA4MDAwMDAwMTA2RgorOjEwNjI4MDAwMDgwMDAxOTIwMDAwRDAwOTAwMDAwMDEwMDgwMDAxOTJFRgorOjEwNjI5MDAwMDAwMEQwMDkwMDAwMDAxMDA4MDAwMTkyMDAwMEQwMDlBMQorOjEwNjJBMDAwMDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzMDAwMDAwODA5QQorOjEwNjJCMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAxMQorOjEwNjJDMDAwMDAwMEVGMDgwMDAwMDAxMDA4ODAwMDkyMDAwMDE2MTM4NAorOjEwNjJEMDAwMDAwMDAwODAwMjAwMDA5MDAwMDA4NTA4MDAwMDAwMTAwRgorOjEwNjJFMDAwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBEOAorOjEwNjJGMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDk1QQorOjEwNjMwMDAwMDAwMDAwMTAwODgwMDA5MjAwMDBDNDA5MDAwMDAwMTA4NgorOjEwNjMxMDAwMDg4MDAwOTIwMDAwODUwODAwMDAwMDEwMDgwMDAxOTIyQgorOjEwNjMyMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEU2MDk0MworOjEwNjMzMDAwMDAwMDAwMTAwODQwMDA5MjAwMDBFNjA5MDAwMDAwMTA3NAorOjEwNjM0MDAwMDg4MDAwOTIwMDAwRTYwOTAwMDAwMDEwMDhDMDAwOTJEQQorOjEwNjM1MDAwMDAwMDg1MDgwMDAwMDAxMDA4MDAwMTkyMDAwMDE2MTNEQworOjEwNjM2MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA3MgorOjEwNjM3MDAwMDIwMDAwOTAwMDAwMEMwQTAwMDAwMDEwMDhDMDAwOTIwQgorOjEwNjM4MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDg1MDg0NQorOjEwNjM5MDAwMDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzMDAwMDAwODBBOQorOjEwNjNBMDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAyMAorOjEwNjNCMDAwMDAwMDBGMEEwMDAwMDAxMDA4MDAwMTkyMDAwMDBGMEEwMAorOjEwNjNDMDAwMDAwMDAwMTAwODAwMDE5MjAwMDA4NTA4MDAwMDAwMTA4NQorOjEwNjNEMDAwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBFNworOjEwNjNFMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDExMEE1NworOjEwNjNGMDAwMDAwMDAwMTAwODgwMDA5MjAwMDAxMTBBMDAwMDAwMTA0OAorOjEwNjQwMDAwMDhDMDAwOTIwMDAwODUwODAwMDAwMDEwMDgwMDAxOTJGQQorOjEwNjQxMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDg1MDhCNAorOjEwNjQyMDAwMDAwMDAwMTAwODQwMDA5MjAwMDBEQzA5MDAwMDAwMTA4RAorOjEwNjQzMDAwMDg4MDAwOTIwMDAwREMwOTAwMDAwMDEwMDhDMDAwOTJGMworOjEwNjQ0MDAwMDAwMDg1MDgwMDAwMDAxMDA4MDAwMTkyMDAwMDg1MDg4NworOjEwNjQ1MDAwMDAwMDAwMTAwODAwMDA5MjAwMDA4NTA4MDAwMDAwMTBGNQorOjEwNjQ2MDAwMDg0MDAwOTIwMDAwMjUwQTAwMDAwMDEwMDg4MDAwOTJGOQorOjEwNjQ3MDAwMDAwMDI1MEEwMDAwMDAxMDA4QzAwMDkyMDAwMDg1MDhGNgorOjEwNjQ4MDAwMDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzMDAwMDAwODBCOAorOjEwNjQ5MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAyRgorOjEwNjRBMDAwMDAwMDYwMEEwMDAwMDAxMDA4ODAwMDkyMDAwMDg1MDhDQgorOjEwNjRCMDAwMDAwMDAwMTAwOEMwMDA5MjAwMDA4NTA4MDAwMDAwMTBENQorOjEwNjRDMDAwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBGNgorOjEwNjREMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDNGMEEzOAorOjEwNjRFMDAwMDAwMDAwMTAwODgwMDA5MjAwMDAxNjEzMDAwMDAwODBEOQorOjEwNjRGMDAwMDIwMDAwOTAwMDAwODUwODAwMDAwMDEwMDgwMDAxOTJEMgorOjEwNjUwMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTMyNworOjEwNjUxMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBFQzA4MDAwMDAwMTA2NQorOjEwNjUyMDAwMDg4MDAwOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAxNgorOjEwNjUzMDAwMDAwMDg1MDgwMDAwMDAxMDA4MDAwMTkyMDAwMDE2MTNGQQorOjEwNjU0MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODA5MAorOjEwNjU1MDAwMDIwMDAwOTAwMDAwNTQwQTAwMDAwMDEwMDg4MDAwOTIyMQorOjEwNjU2MDAwMDAwMDU0MEEwMDAwMDAxMDA4QzAwMDkyMDAwMDg1MDhENgorOjEwNjU3MDAwMDAwMDAwMTAwODAwMDE5MjAwMDAxNjEzMDAwMDAwODBDNworOjEwNjU4MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAzRQorOjEwNjU5MDAwMDAwMDFDMEEwMDAwMDAxMDA4ODAwMDkyMDAwMDFDMEE4NQorOjEwNjVBMDAwMDAwMDAwMTAwOEMwMDA5MjAwMDA4NTA4MDAwMDAwMTBFNAorOjEwNjVCMDAwMDgwMDAxOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAwNQorOjEwNjVDMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDZEMEExOQorOjEwNjVEMDAwMDAwMDAwMTAwODgwMDA5MjAwMDA2RDBBMDAwMDAwMTAwQQorOjEwNjVFMDAwMDhDMDAwOTIwMDAwODUwODAwMDAwMDEwMDgwMDAxOTIxOQorOjEwNjVGMDAwMDgwMEYzMDMwMDE4MDFFODc2MjA4MTk5MDgwMEVGMDNGMgorOjEwNjYwMDAwMDAxODAxRTg3NjIwODE5OTAwMDA0QjEyMDAwMDAwODBGQworOjEwNjYxMDAwMDIwMDAwRjAwODAwODIwODFEMTkwMUU4NzYyMDgxQjkwNworOjEwNjYyMDAwMDAwMEYzMDMwMDAwMDBGODYyODEyRjk1MDAwMEYzMDNERgorOjEwNjYzMDAwODAwMDAwODAwMjgxMkZCNjJBMDAxNjEzMTIwMDAwMkM2MQorOjEwNjY0MDAwODJDRDJFQjIwMDAwRjMwMzAwMDAwMEY4MDI4MTJGOTRFNworOjEwNjY1MDAwMDgwMEYzMDMwMDFDMDFFODc2MjA4MTk5MDAwMDE2MTM1RQorOjEwNjY2MDAwODAwRjAxODAwMkMwNkVCNjAwMDAwMDAwMDAwMDAwRDg1QworOjEwNjY3MDAwMDIwMDAwMzIwMDAwMDAwMDAwMEUwMUVDMDZDMDZFMzU4MgorOjEwNjY4MDAwNTQwMDAwMDAwMDAwMDAwMDA3MDAzNjMyMDAwMDAwMDA0NworOjEwNjY5MDAwMDAwMDAwQkNBODAwMkQzN0I0MDQwMTAwMDAwODAwMDA3MQorOjEwNjZBMDAwQzdDRDhCM0EwMDAwMDAwMDAwMDAwMDc4OTlDMDJDMzc1RAorOjEwNjZCMDAwQjQwMDAwMDAwMDAwMDA3ODg5OEQ5NzNBMDAwMDE2MTM5RQorOjEwNjZDMDAwMDIxMDAwMDA4N0JGOTdCQTAwMDAwMDAwMDAxODAwMDAwOQorOjEwNjZEMDAwMDc0MEZFMzIwMDAwMTYxMzEyMDAwMDQwRjJDMTM4QjQyOQorOjEwNjZFMDAwMDAwMDAwMDAwMDkwMDA3ODA5MDA2RTMyMDAwMDE2MTNEMAorOjEwNjZGMDAwMDRBMDAwMDAwOTgwNkVCMjAwMDA5NTA4MDRBNTAwMDQwMworOjEwNjcwMDAwMDk4MDZFQjIwMDAwMDAwMDAwMDAwMDA0MDkwMDkwMzIxMQorOjEwNjcxMDAwMDAwMDE2MTMwMjAxMDA4MDAyNjQ5MEJDMDAwMDk4MDg3QgorOjEwNjcyMDAwMDQwMTAwMDQwOTY0OTBCQzAwMDAwMDAwMDAwMDAwMDRBMworOjEwNjczMDAwMDk0MDAwMzIwODAwMDAwMDZFMzQwMkU4MTYyNDkwMzk0NworOjEwNjc0MDAwMDAwMDk5MDhCNzEwMDJFMDA2ODA5N0IyMDAwMDlDMDg4QworOjEwNjc1MDAwODAwMDAwODBGMjgwRkNCNjAwMDA5RDA4MDAwMDAwQzhBOAorOjEwNjc2MDAwRkY4MEZDOTQwMDAwOUUwODlGOTkwMDgwODIxQkVFQkM3NQorOjEwNjc3MDAwMDAwMDAwMDAwMDk4MDBFMDBFMDA2RTMyMDAwMDAwMDBGMworOjEwNjc4MDAwQTcwMDAwODAwMjAwMDAzMDE4MDAzNjAwMDAwMDAwRjg2QQorOjEwNjc5MDAwNzMwQTAzRjkwMDAwMDAwMDAwMTAwMjFDMDkwMDZFMzJBOQorOjEwNjdBMDAwNDAwMEEzMDgwNjAxMDA4MDgyQ0Q5MUJDMDBDMEE0MDg2RgorOjEwNjdCMDAwMDAxODAyRTAwNjgwMzY5MjAwRTAwMDAwMDAxODAyRTBCNworOjEwNjdDMDAwMDY4MDM2MzIwMDAwMDAwMDAwMDAwMDIwMDk4MDAzMzJGRAorOjEwNjdEMDAwMDAwMEE3MDg4MEQ3MDE4MDMyQzA2RUI2MDAwMDAwMDAxQworOjEwNjdFMDAwMDAwMDAwMjA0OTAwOTIzQTAwMDAwMDAwMDA5ODAxMThDMworOjEwNjdGMDAwMDkwMDZFMzIwMDAwMDAwMDAwMEEwMjI0MDlDMDZFMzI1NworOjEwNjgwMDAwMDAwMDAwMDAwMEMwMDEyODA5ODA2RTMyMDAwMEI1MDhCOQorOjEwNjgxMDAwODAwRTAxODAxMkMwNkVCNjAyMDAwMDAwMDAzQzAyRUM0NworOjEwNjgyMDAwMDYwMDM2MzIwMDAwMDAwMDAwMDAwMDAwNDkwMTkyM0FFNAorOjEwNjgzMDAwMDAwMEIxMDg4MEQ2MDE4MDQyQzA2RUI2MDA4MjAwMDAyMAorOjEwNjg0MDAwMDAxMDAyRTBBNkNEOTEzMjAwQTAwMDAwMDAyQzAyRTg2QQorOjEwNjg1MDAwMDYwMDM2MzIyODAwQkYwODAwM0EwMkVDMDYwMDM2OTJFNQorOjEwNjg2MDAwMDAwMDAwMDBEMzAxMDAxQ0Q5QzE5MTM0MDA4MjAwMDA1NworOjEwNjg3MDAwMDAxMDAyRTBBNkNEOTEzMjAwQTAwMDAwMDAyQzAyRTgzQQorOjEwNjg4MDAwMDYwMDM2MzIzNDAwQkYwODAwM0EwMkVDMDYwMDM2OTJBOQorOjEwNjg5MDAwMDQwMDAwMDAwMDNDMDJFQzA2MDAzNjMyMjgwMDAwMDAzNAorOjEwNjhBMDAwMDAwMDAwMDA4OTBEOTIzQTAwMDBCQjA4ODBENjAxODBFQworOjEwNjhCMDAwNDJDMDZFQjYwMDg2MDAwMDAwMTAwMkUwQTZDRDkxMzIwNAorOjEwNjhDMDAwMDRBMDAwMDAwMDJDMDJFODA2MDAzNjMyMTQwMEJGMDhDNQorOjEwNjhEMDAwMDAzQTAyRUMwNjAwMzY5MjAwMDAwMDAwRDMwMTAwMUNEMgorOjEwNjhFMDAwRDlDMTkxMzQwMDg2MDAwMDAwMTAwMkUwQTZDRDkxMzI5QgorOjEwNjhGMDAwMDRBMDAwMDAwMDJDMDJFODA2MDAzNjMyMjAwMEJGMDg4OQorOjEwNjkwMDAwMDAzQTAyRUMwNjAwMzY5MjEyMDAwMDAwMDAzODAyRUM1OQorOjEwNjkxMDAwODZDRDkxM0EwODAwMDAwMDAwMjgwMkU4ODYyNDkwMzlDQworOjEwNjkyMDAwMDAwMDAwMDAwMDIwMDJFMDk2MjQxNDM3MDAwMDAwMDA2MAorOjEwNjkzMDAwMDA0MDAxRTAwNjgwOTEzMjAwMDBDNTA4MDQwMTAwODA5QgorOjEwNjk0MDAwMDI4MDkyQkMwMDAwMDAwMDAwQzAwMUUwMDYwMDAwMzI5RQorOjEwNjk1MDAwMDAwMDAwMDAwMDMwMDBFMDA2MDAwMDMyMDAwMDAwMDBFRgorOjEwNjk2MDAwMDBCMDAwRTAwNjAwMDAzMjIwMDAwMDAwMDAwMDAwMDAzRgorOjEwNjk3MDAwMDcwMDM2MzIwMDAwMDAwMDAwMDAwMDc4QTkwMDJEMzcyMworOjEwNjk4MDAwMDAwNTAxMDAwMDA4MDAwMEM3OEQ5NzNBMDAwMDAwMDBENAorOjEwNjk5MDAwMDAwMDAwNzg5OUMwMkMzNzAwMDEwMDAwMDAwMDAwNzg0QQorOjEwNjlBMDAwODk4RDk3M0EwMDAwMTYxMzAyMTAwMDAwODdCRjk3QkEyRQorOjEwNjlCMDAwMDAwMDAwMDAwMDE4MDAwMDA3NDBGRTMyMDAwMDE2MTMxRgorOjEwNjlDMDAwMTIwMDAwNDhGMkMxMzhCNDAwMDBEMjA4ODBENzAxMkM3MAorOjEwNjlEMDAwMDlDMDZFQjIwMDAwMDAwMERBRDcwMUVDMDZDMDZFMzVDNworOjEwNjlFMDAwMDAwMDAwMDAwMDVBMDFFQzA2NDBFRDMyQUUwMDAwMDA0RAorOjEwNjlGMDAwMDAwMDAwNzgxOTAwMzYzQUFGMDAxNjEzMDQwMTAwODAzOQorOjEwNkEwMDAwODI4RDk3QkMwMDAwMDAwMDAwNUMwMUU4MDY4MDhCMzI5QworOjEwNkExMDAwMDAwMEQ3MDg4MDAxMDA4MDYyQzA5MkI2MDAwMDAwMDAyQworOjEwNkEyMDAwMDAwMDAwRjg4MjgxMkYzNDE4MDAzNjAwMDAwMDAwRjhDMgorOjEwNkEzMDAwNzMwQTAzRjkwMDAwMDAwMDAwMDQwMTM4MDhDMDZFMzIzOAorOjEwNkE0MDAwMDAwMDE2MTMwNEM5MDE4MDAyODA2RUJDMDAwMDAwMDAyMworOjEwNkE1MDAwMDA2MjAxRUMwNjgwODMzMjAxMDA4NTA4MTIwMTAwMkNERgorOjEwNkE2MDAwODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBCQworOjEwNkE3MDAwMDAwMDAwMDAwMDU0MDFGQzAyQzA2RTMyMDAwMDAwMDA2MworOjEwNkE4MDAwMDAwMDAwRDgwMjgwMDEzMjAwQzBFMzA4MTgwMTAwMENBOQorOjEwNkE5MDAwQThDRDNFQjIyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzJGOQorOjEwNkFBMDAwMkQwMEVGMDMxMjAxMDAyQzgyQ0QyRUIyMDAwMDE2MTMzMAorOjEwNkFCMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwMDA2MjAxMzgyOQorOjEwNkFDMDAwMDhDMDZFMzIwMDA4MDA4MDAwMDAwMDI4MDkwMDM3MzIzQworOjEwNkFEMDAwMDA2MEVCMTEwMDAwMDAwODA4ODAzNkYyMDAwMDE2MTM3OQorOjEwNkFFMDAwODcwNjAxRUMxNkMwNkVCQzAwMDA4NTA4MEIwMDAwODAxNAorOjEwNkFGMDAwMDIwMDAwQjAwMDAwODUwODgwMDAwMDgwNzI4MTJGQjY3RgorOjEwNkIwMDAwMDAwMDAwMDAwMDAwMDBGODcyODEyRjM0M0QwMDg1MDg2RAorOjEwNkIxMDAwMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMDAwMDAwODA1RQorOjEwNkIyMDAwMDIwMDAwOTAwMDAwMTYxMzA0MDcwMTgwMTJDMDZFQkMyMgorOjEwNkIzMDAwMDAwMDE2MTM4MDAwMDA4MEIyODEyRkI2MDAwMEVGMDgxRAorOjEwNkI0MDAwMDAwMDAwRjhCMjgxMkY5NDAwMDAxNjEzMDRBMDAwMTg3MgorOjEwNkI1MDAwMDgwMDZFQjIwMDAwMTYxMzA0MDYwMTgwMDJDMDZFQkM2RAorOjEwNkI2MDAwMDAwMDlFMTIwMDAwMDA4MDAyMDAwMEYwMDAwMDAwMTNGMAorOjEwNkI3MDAwMDA3ODAxNjAwODAwNkVGMjAwMDBGNTA4MTIwMTAwQzhGQworOjEwNkI4MDAwMDIwMDIwQjIwMDAwRjgwODAwMDAwMDgwMDIwMDAwOTAxRgorOjEwNkI5MDAwMDAwMDA1MDkxMjAxMDA1QzA4ODAyMEIyMDAwMEY4MDgxRQorOjEwNkJBMDAwMTIwMTAwNjAwMjgwMkNCMjAwMDAxNjEzMDAwMDAwODA2OQorOjEwNkJCMDAwMDIwMDAwOTAwMDAwRkEwODA0MDAwMDgwMDI0MDgwQkMzRgorOjEwNkJDMDAwMDAwMDAwMDAwMDAwMDBGODFGODBGRjNBMDAwMEZEMDhGMAorOjEwNkJEMDAwODAwMTAwODBBMjgwMkZCNjE4MDAzNjAwQ0EwMDAwRjg5RAorOjEwNkJFMDAwNzMwQTAzRjkwMDAwMTYxMzA0MDEwMDgwMDI4MDJEQkMxMworOjEwNkJGMDAwMDAwMDg1MDg4MDAwMDA4MDcyODEyRkI2M0QwMDE2MTNDQQorOjEwNkMwMDAwMTIwMDAwMkM4MkNEMkVCMjAwMDA4NTA4MDAwMDAwRjg5MgorOjEwNkMxMDAwNzI4MTJGOTQwMDAwMTYxMzA0MDYwMTgwMDJDMDZFQkMxRQorOjEwNkMyMDAwMDAwMDAwMDAwMEJDMDAxNDA4ODA2RTMyMDAwMEY4MDg2QworOjEwNkMzMDAwMTIwMDAwQzgwMjAwMjBCMjAwMDBGNjA4MTIwMDAwNUMzQQorOjEwNkM0MDAwMDg4MDIwQjIwMDAwMTYxMzA0QTAwMDE4MDgwMDZFQjJERAorOjEwNkM1MDAwMDAwMDAwMDAwMDAwMDA3ODc5NjEzODMyMDAwMDE2MTM0RgorOjEwNkM2MDAwMTIxODAyNENFMjI1NkVCMjAwMDAxNjEzMDQwMTAwODBENworOjEwNkM3MDAwMDI0MDJEQkMwODAwMDAwMDAwMTAwMjAwNzhFMTZFMzlDRgorOjEwNkM4MDAwMDAwMDAwMDAwMDE4MDAyMDA3MDAwMDMyMDcwMDAwMDA4QworOjEwNkM5MDAwMDAwMDAwMzg3OENBRTkzOTAwMDAxNjEzMDQwMDAwM0NFRgorOjEwNkNBMDAwMDg0MDgwQjIwMDAwMDAwMDAwOTAwMDZDMDgwMDZFMzJDNgorOjEwNkNCMDAwMDAwMDAwMDAwMDk4MDA0QzA4MDA2RTMyMDAwMDE2MTMxRgorOjEwNkNDMDAwMDQwMDAwODAzMkUxODZCMjAwMDAwMDAwNTEwMDAwRDhDQworOjEwNkNEMDAwMDIwMDAwMzIwMDAwMDAwMDREMDAwMDAwNjdFMDgzM0UyQgorOjEwNkNFMDAwMDAwMDAwMDAwMDA4MDAwMDA3MDA4MDMyMDAwMDAwMDBFMworOjEwNkNGMDAwMDAxMDAwMDAwN0MwODYzMjAwMDAwMDAwMDAxODAwMDBFRAorOjEwNkQwMDAwMDdDMDg0MzIwMDAwMDAwMDAwMDAwMDE4RDhBMDgxM0NCOQorOjEwNkQxMDAwMDAwMDg0MDkwNEIwMDBFMEQ2MjA2RUJDMDAwMDE2MTMwOQorOjEwNkQyMDAwMDkwMTAwODAwMjAwMDBCMDAwMDA0MzA5MDQwMDAwM0M5QgorOjEwNkQzMDAwRDhFMDgzQkMwMDAwMTYxMzA0MDEwMDgwMDI4MDgxQkNFRgorOjEwNkQ0MDAwMDAwMDI0MDk4MDAwMDA4MDkyODAyRkI2MDAwMDFDMDlGQQorOjEwNkQ1MDAwMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjgzRQorOjEwNkQ2MDAwNzMwQTAzRjkxRDAwMDAwMDAwMDAwMDc4MDlBNDE3MzgxOQorOjEwNkQ3MDAwMDAwMDIxMDkwNDAxMDA4MDEyODA5N0JDMDAwMDE2MTM1NgorOjEwNkQ4MDAwODAwMTAwODBBMjgwMkZCNjAwMDAxQjA5NjcwMDAwRjg3OAorOjEwNkQ5MDAwQTI4MDJGQjUwMDAwMUMwOTAwMDAwMDAwMDlDMDIxOTI0QworOjEwNkRBMDAwMDAwMDIzMDkwNDAwMDA4MDIyODA5N0JDMDAwMDE2MTMxNQorOjEwNkRCMDAwMDQwMTAwODAzMjgwOTdCQzAwMDAwMDAwQzkwMTAwRDhBNworOjEwNkRDMDAwMDI0MDg0MzIwMDAwMjcwOTA0MDAwMDgwNzI4MDJEQkMzQworOjEwNkREMDAwMDAwMDE2MTMxMjAwMDA0NEUyRTAzOEIyMDAwMDM0MDk0QgorOjEwNkRFMDAwNTEwMDAwRDgxMjgwMkQ5QTAwMDAwMDAwMDAwMDAwNzhBOQorOjEwNkRGMDAwRjk4MTgzMzQwMDAwMTYxMzEyMDAwMDQ0RTJFNTM4QjIzMgorOjEwNkUwMDAwMDAwMDJDMDk4MDAwMDA4MDgyODAyRkI2MDAwMEY3MTE1RQorOjEwNkUxMDAwMDBBMDAxNTAwODAwNkVGMjAwMDAwMDAwMDBGODAxRTA0MAorOjEwNkUyMDAwMDYwMDg1MzIwMDAwMkUwOTEyMDEwMEU4MDJDMDIxQjJERQorOjEwNkUzMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDMyMDk1OAorOjEwNkU0MDAwMDQwMTAwODAwMjgwMkRCQzAwMDAxNjEzODAwMTAwODAyOAorOjEwNkU1MDAwQTI4MDJGQjYwMDAwMkQwOTY3MDAwMEY4QTI4MDJGQjU5MAorOjEwNkU2MDAwMDAwMDE2MTMxMjAwMDBFODAyQzAyMUIyMDAwMDE2MTM0MQorOjEwNkU3MDAwMDQwMTAwODA3MjgwMkRCQzAwMDAwMDAwNTEwMDAwRDg4OQorOjEwNkU4MDAwMDIwMDAwMzIwMDAwMzkwOTJBMDEwMDAwRDgyMDgwQkEyRgorOjEwNkU5MDAwMDAwMDM4MDkxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDBCNAorOjEwNkVBMDAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwMDAwMDAwRDg5OQorOjEwNkVCMDAwMDI0MDg0MzIxRDAwMTYxMzA0MDAwMDgwMDJBNDE3Qjg5QgorOjEwNkVDMDAwMDAwMDAwMDBDQUUwMDA2QzA4MDA2RTMyMDAwMDAwMDAwNAorOjEwNkVEMDAwMDBFODAwNEMwODAwNkUzMjAwMDAxNjEzMDRGMDAwMThBMQorOjEwNkVFMDAwMDgwMDZFQjIwMDAwMDAwMDAwMDAwMDM4MTg4MTgzMzVGMQorOjEwNkVGMDAwMDAwMDEwMDkwNEIwMDA4MDgyOUI4MUJDMDAwMDE2MTNDMgorOjEwNkYwMDAwMEQwMTAwODAwMjAwMDBCMDAwMDAxNjEzOUYwMDAwMTQ2NQorOjEwNkYxMDAwMTg0MDgxQkMwMDAwMDAwMENBMDEwMEY4NDI4MDJGMzVGMworOjEwNkYyMDAwMDhBMDEwMDkxMjAxMDA0MEEyQ0QzOUIyMDAwMDE2MTNDQQorOjEwNkYzMDAwMDAwMDAwODAwMjAwMDA5MDAwMDA0RTA5MjkzNDAyQjhEMQorOjEwNkY0MDAwMDg4MDZFQjIwMDAwNDYwOTEyMDEwMDAwMDlDMDIxQjI5QgorOjEwNkY1MDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MUQwMDAwMDA1NQorOjEwNkY2MDAwMDAwMDAwNzgwOUE0MTczODAwMDA0QjA5MDQwMTAwODBENAorOjEwNkY3MDAwMTI4MDk3QkMwMDAwMTYxMzgwMDEwMDgwQTI4MDJGQjZGQgorOjEwNkY4MDAwMDAwMDQ1MDk2NzAwMDBGOEEyODAyRkI1MDAwMDQ2MDlGRgorOjEwNkY5MDAwMDAwMDAwMDAwOUMwMjE5MjAwMDA0RDA5MDQwMDAwODA5QgorOjEwNkZBMDAwMjI4MDk3QkMwMDAwMTYxMzA0MDEwMDgwMzI4MDk3QkMzOQorOjEwNkZCMDAwMDAwMDAwMDBDOTAxMDBEODAyNDA4NDMyMDAwMDAwMDAzNworOjEwNkZDMDAwMDAwMDAwNzhGOTgxODMzNDAwMDAxNjEzMTIwMDAwNDQ5OQorOjEwNkZEMDAwRTJFNTM4QjIwMDAwNTYwOTI4MDAwMDZDRDhFMDg2QkExNQorOjEwNkZFMDAwMDAwMEY2MTEwMEEwMDE1MDA4MDA2RUYyMDAwMDU2MDlFMgorOjEwNkZGMDAwMURGODAxRTAwNjAwODVCMjAwMDA1NjA5ODAwMDAwODBGRgorOjEwNzAwMDAwMDI4MTJGQjYyQTAwMTYxMzEyMDAwMDJDODJDRDJFQjI1OAorOjEwNzAxMDAwMDAwMDAwMDAwMDAwMDBGODAyODEyRjM0MDAwMDVDMDkyRAorOjEwNzAyMDAwMDRBMDAwRTAwNjgwODFCMjAwMDAwMDAwMDBCQzAwRTg3RgorOjEwNzAzMDAwMDY0MDgxMzIwMDAwMDAwMDAwOTAwMEUwMDZDMDg2MzI2OQorOjEwNzA0MDAwMDAwMDAwMDAwMDk4MDBFMDA2QzA4NDMyMDAwMDE2MTMyMworOjEwNzA1MDAwMDQwMDAwODAzMkUxODZCMjAwMDA3MDA5MDAwMDAwODA2OAorOjEwNzA2MDAwMDIwMDAwOTAwMDAwNjIwOTgwMDEwMDgwQTI4MDJGQjYxQgorOjEwNzA3MDAwMDAwMDVGMDkxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDBBQgorOjEwNzA4MDAwMDAwMDAwRjg3MzBBMDNGOTFEMDA2MjA5MDQwMTAwODA4MgorOjEwNzA5MDAwMDJBNDE3QjgwMDAwMTYxMzgwMDAwMDgwRTI4MDJGQjYwQgorOjEwNzBBMDAwMDAwMDVFMDkwMDAwMDBGOEUyODAyRjk0MDAwMDAwMDA1QworOjEwNzBCMDAwMDBFMDAwNkMwODAwNkUzMjAwMDAwMDAwQ0FFODAwNENERQorOjEwNzBDMDAwMDgwMDZFMzIwMDAwMTYxMzA0MDAwMDgwMzJFMTg2QjIyMAorOjEwNzBEMDAwMDAwMDE2MTMwNEYwMDAxODA4MDA2RUIyMDAwMDZCMDlERgorOjEwNzBFMDAwMDRCMDAwODA4MjlCODFCQzAwMDAxNjEzMEQwMTAwODA1QgorOjEwNzBGMDAwMDIwMDAwQjAwMDAwMTYxMzlGMDAwMDE0MTg0MDgxQkM2RAorOjEwNzEwMDAwMDAwMDAwMDBDQTAxMDBGODQyODAyRjM1MDhBMDE2MTNDNQorOjEwNzExMDAwMTIwMDAwNDBBMkNEMzlCMjAwMDAwMDAwMDBBMDAwRTA0MworOjEwNzEyMDAwMDY4MDgxMzIwMDAwMDAwMDAwOTgwMEUwMDZDMDg0MzIzMgorOjEwNzEzMDAwMDAwMDAwMDAwMDkwMDBFMDA2QzA4NjMyMDAwMDE2MTMzOAorOjEwNzE0MDAwMDQwMDAwODAzMkUxODZCMjAwMDAwMDAwMDBCQzAwRThDQworOjEwNzE1MDAwMDY0MDgxMzIwMDAwNzYwOTJBNUQwMUU4MDY4MDhCQjI4NAorOjEwNzE2MDAwMDAwMDczMDkxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDBBNgorOjEwNzE3MDAwMDAwMDAwRjg3MzBBMDNGOTFEMDA3NjA5MDQwMTAwODA3RAorOjEwNzE4MDAwMDJBNDE3QjgwMDAwMTYxMzgwMDAwMDgwRTI4MDJGQjYxQQorOjEwNzE5MDAwMDAwMDcyMDkwMDAwMDBGOEUyODAyRjk0MTAyNDc5MDlBMQorOjEwNzFBMDAwMzcwMDAwRjhBMjhEMkZCMTNEMDAxNjEzMTIwMDAwMkNGRAorOjEwNzFCMDAwODJDRDJFQjIwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQ1MgorOjEwNzFDMDAwMDgwMDAwMDBDQTFDMDFFODc2MjA4MTM5MDAwMDU0MTAzNAorOjEwNzFEMDAwMDAwMDAwMkNGOTAxMDBGNDAwMDA3RjA5ODAwMDAwODAwRAorOjEwNzFFMDAwRTI4MDJGQjYwMDAwN0UwOTEyMDEwMDAwMDlDMDIxQjIyMgorOjEwNzFGMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MUQwMDE2MTM4QQorOjEwNzIwMDAwMDQwMTAwODAwMkE0MTdCODAwMDAxNjEzODAwMTAwODA1QQorOjEwNzIxMDAwODI4MDJGQjYwMDAwMTYxMzA0MDEwMDgwQzIwMDAzQkM1OAorOjEwNzIyMDAwMTAwMDAwMDAwMDE4MDA4MDY3QTE3MzM5MzAwMEY2MDNEOQorOjEwNzIzMDAwMTIwMTAwNUNBMjhEMkNCMjAwMDAxNjEzMDAwMDAwODAyOQorOjEwNzI0MDAwMDIwMDAwOTAwMDAwOEEwOTgwMDAwMDgwOTI4MDJGQjYyMgorOjEwNzI1MDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MUQwMDE2MTMyOQorOjEwNzI2MDAwMDQwMDAwNzgwOUE0MTdCODAwMDA4OTA5MDQwMDAwODAxMAorOjEwNzI3MDAwMjI4MDk3QkMwMDAwMTYxMzA0MDEwMDgwMzI4MDk3QkM2NgorOjEwNzI4MDAwMDAwMDAwMDBDOTAxMDBEODAyNDA4NDMyMDAwMDE2MTMzQgorOjEwNzI5MDAwMDQwMTAwODBEMkUwODNCQzAwMDAxNjEzMkEwMDAwNzhBRAorOjEwNzJBMDAwRjk4MTgzQjQwMDAwMTYxMzEyMDAwMDQ0RTJFNTM4QjJGRAorOjEwNzJCMDAwMDAwMDY0MTEwMDAwMDAzMDAzMDAzOEYyMDAwMDkyMDk2MQorOjEwNzJDMDAwMUQwMDAwMzgxODgxODNCNTAwMDA5MjA5ODAwMDAwODBGRAorOjEwNzJEMDAwMDI4MTJGQjYyQTAwMTYxMzEyMDAwMDJDODJDRDJFQjI4NgorOjEwNzJFMDAwMDAwMDAwMDAwMDAwMDBGODAyODEyRjM0MDAwMDE2MTM5NworOjEwNzJGMDAwODcwNjAxRUMxNkMwNkVCQzAwMDA5NjA5MEIwMDAwODBFQQorOjEwNzMwMDAwMDIwMDAwQjAwMDAwMDAwMENBMDEwMEY4NDI4MDJGMzRFMworOjEwNzMxMDAwMDhDMDE2MTMxMjAwMDA0MEEyQ0QzOUIyMDAwMDk5MDkyRQorOjEwNzMyMDAwODAwMDAwODA4MjgwMkZCNjAwMDBGNzExMDBBMDAxNTA3RAorOjEwNzMzMDAwMDgwMDZFRjIwMDAwMDAwMDAwRjgwMUUwMDYwMDg1MzI0RgorOjEwNzM0MDAwMDAwMDlCMDkxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDA5QworOjEwNzM1MDAwMDAwMDAwRjg3MzBBMDNGOTAwMDBCRDA5MkEzNTAyQjhERAorOjEwNzM2MDAwMDg4MDZFQjIwMDAwOUUwOTEyMDEwMDAwMDlDMDIxQjIxRgorOjEwNzM3MDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDA0RQorOjEwNzM4MDAwMDAwMDAwRjhBMjgwMkYzNTAwMDBCNTA5MDQwMDAwODAzRAorOjEwNzM5MDAwMDI2MTgwQkMwMDAwQUQwOTgwQjgwMDAwMDlDMDZFQjI3NworOjEwNzNBMDAwNDAwMEE1MDkwNDAwMDA4MDgyMEQ5MEJDODAwMDE2MTNFNworOjEwNzNCMDAwMDQwMTAwODA4MjBEOTBCQzAwMDBBNTA5MDJCMDAwODA4RAorOjEwNzNDMDAwODIxQjg0QkMwMDAwQUQwOTAwMDAwMEY4QjI4MTJGOTQzQworOjEwNzNEMDAwMDAwMDE2MTMwNDA3MDE4MDEyQzA2RUJDMDAwMDE2MTNEMworOjEwNzNFMDAwODAwMDAwODBCMjgxMkZCNjAwMDAxNjEzODBENjAxODA4NQorOjEwNzNGMDAwNTJDMDZFQjYwMDAwMDAwMDAwRDYwMUVDNTZDMDZFMzREQworOjEwNzQwMDAwMDAwMDAwMDAwMDAwMDA2MDE4MDA4NjNBMDAwMDAwMDA0NAorOjEwNzQxMDAwMDAwMDAwODBCNzAxNzgzNDAwMDAwMDAwMDA3ODAxRTAyRgorOjEwNzQyMDAwMDYwMDg2MzI0MDAwQkQwOTA0MDAwMDgwODIwRDkwQkMzOQorOjEwNzQzMDAwMDAwMDE2MTMwNEEwMDAxODA4MDA2RUIyMDAwMDlFMTI4RgorOjEwNzQ0MDAwMDAwMDAwMDBEODIwODBGQTAwMDAxNjEzMDYwMDAwM0M1RgorOjEwNzQ1MDAwMTgyMDg0QkMwMDAwMTYxMzA0QjAwMDNDODhEQjgzQkVGNworOjEwNzQ2MDAwMDAwMDE2MTM4MDAxMDA4MEMyMDE3OEI2MDAwMDAwMDAwMQorOjEwNzQ3MDAwMDAwMDAwODBGNzIwNzgzQTAwMDAwMDAwNTg3ODAxRTAxMgorOjEwNzQ4MDAwRjYyMDg2M0EwMDAwMEMwOTAwMDAwMDA0Rjg2MDgwOUE5QgorOjEwNzQ5MDAwMDAwMEI4MDk4MEI5MDAwMDA5QzA2RUIyMkYwMEJEMDkxNAorOjEwNzRBMDAwMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMDAwMDAwODBDNQorOjEwNzRCMDAwMDIwMDAwOTA0MDAwQkEwOTA0MDEwMDgwODIwRDkwQkNENworOjEwNzRDMDAwMzgwMEJDMDkwMDAwMDA3ODA5MDAzNjkyODAwMDE2MTNDRAorOjEwNzREMDAwMDQwMTAwODA4MjBEOTBCQzM5MDAwMDAwMDAwMDAwNzg5QgorOjEwNzRFMDAwMDkwMDM2MzIwMDAwMTYxMzEyMDAwMDJDRTJFNTJFQjIxRAorOjEwNzRGMDAwMDAwMDE2MTM4MDAxMDA4MDgyODAyRkI2MDAwMDE2MTM1MgorOjEwNzUwMDAwMDQwMTAwODBDMjAwMDNCQzEwMDAwMDAwMDAxODAwODBDRAorOjEwNzUxMDAwNjdBMTczMzkwMDAwMDAwMDAwNUMwMUU4MDY4MDhCMzIyRgorOjEwNzUyMDAwMTAyNDAwMDAwMDAwMDBGOEEyOEQyRjMxMzAwMDg1MDhFMworOjEwNzUzMDAwMTIwMTAwNUNBMjhEMkNCMjAwMDAxNjEzMDAwMDAwODAyNgorOjEwNzU0MDAwMDIwMDAwOTAwMDAwMTYxMzgwMDEwMDgwQzI4MTJGQjY1NworOjEwNzU1MDAwMDAwMDAwMDkwMDAwMDBGOEMyODEyRjk1MDAwMDAwMDAyMworOjEwNzU2MDAwMDA1NDAxRkMwMkMwNkUzMjAwMDAwMDAwMDAwMDAwRDg5MAorOjEwNzU3MDAwMDI4MDAxMzIwMEMwQ0MwOTE4MDEwMDBDQThDRDNFQjIzNworOjEwNzU4MDAwMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyMkQwMEVGMDM0NAorOjEwNzU5MDAwMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMDAwMDAwODBENAorOjEwNzVBMDAwMDIwMDAwOTAwMDAwMDAwMDAwNjIwMTM4MDhDMDZFMzI0NgorOjEwNzVCMDAwMDAwODAwODAwMDAwMDAyODA5MDAzNzMyMDA2MEVCMTE0RAorOjEwNzVDMDAwMDAwMDAwMDgwODgwMzZGMjAwMDBEQTA5MDAwMDAwODBBMAorOjEwNzVEMDAwMDIwMDAwOTAwMDAwRDIwOTgwMDAwMDgwQzI4MTJGQjYxNgorOjEwNzVFMDAwMDAwMEQ1MDkwMEQwMDFFODA2MDAwMDkyMDAwMDAwMDA2QworOjEwNzVGMDAwMDAwMDAwRjhDMjgxMkYzNTAwMDBENTA5MDREMTAxODBCOAorOjEwNzYwMDAwMDI4MDZFQkMwMDAwMDAwMDAwRDYwMUVDMjZDMDZFMzQ4MworOjEwNzYxMDAwMDAwMEQ3MDk4MDAwMDA4MDkyODEyRkI2MDAwMERBMDlBRgorOjEwNzYyMDAwMDBDODAxRTgwNjAwMDA5MjAwMDAwMDAwMDAwMDAwRjgxOQorOjEwNzYzMDAwOTI4MTJGMzUwMDAwREEwOTA0QzkwMTgwMDI4MDZFQkNGNgorOjEwNzY0MDAwMDAwMDAwMDAwMEQ2MDFFQzE2QzA2RTM0MTEwMDg1MDg2MQorOjEwNzY1MDAwMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMDAwMDAwODAxMworOjEwNzY2MDAwMDIwMDAwOTAwMDAwODUwODlBMDEwMEY4NDI4MTJGQjVDMQorOjEwNzY3MDAwMDAwMEUzMDkxMjAxMDBDODAyMDAyMEIyMDAwMDAwMDA2RgorOjEwNzY4MDAwMDA1QzAxRUMwNjQwMDAzMjAwMDA4NTA4MzcwMDAwRjg3RAorOjEwNzY5MDAwNDI4MTJGQjQwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzRGNgorOjEwNzZBMDAwM0QwMDg1MDgxMjAxMDAyQzgyQ0QyRUIyMDAwMDE2MTM3OQorOjEwNzZCMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBFRTA5MTIwMTAwNUM1MgorOjEwNzZDMDAwMDg4MDIwQjIwMDAwREUwOTEyMDEwMDYwMDI4MDJDQjJBNgorOjEwNzZEMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEVCMDk3QgorOjEwNzZFMDAwMTIwMTAwQzgwMjAwMjBCMjAwMDA4NTA4MzcwMDAwRjgyRgorOjEwNzZGMDAwRDI4MTJGQjQwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQwNgorOjEwNzcwMDAwM0QwMDg1MDgxMjAxMDAyQzgyQ0QyRUIyMDAwMDE2MTMxOAorOjEwNzcxMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBFRTA5MTIwMTAwNUNGMQorOjEwNzcyMDAwMDg4MDIwQjIwMDAwRTcwOTEyMDEwMDYwMDI4MDJDQjIzQworOjEwNzczMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAwRQorOjEwNzc0MDAwMDAwMDAwNzg3OTYxMzgzMjAwMDAxNjEzMTIxODAyNENEQworOjEwNzc1MDAwRTIyNTZFQjIwMDAwMDAwMDAwMzQwMkI4MDg4MDZFMzJFQworOjEwNzc2MDAwMDAwMDAwMDAwMEEwMDE1MDA4MDA2RTMyMDAwMDAwMDA4MAorOjEwNzc3MDAwMDA3ODAxNjAwODAwNkUzMjAwMDBGNTA5OUQxMTAyMzRBNgorOjEwNzc4MDAwMDkwMDZFQjIwMDAwMDAwMDAwRjAwMTg4MDgwMDZFMzJBRgorOjEwNzc5MDAwMDAwMDEyMTIwMEE4MDEwODA5MDA2RUYyMDAwMDAwMDBBQgorOjEwNzdBMDAwRDRGODAxRTAwNjAwODUzMjAwMDAwMDAwREE1QzAxRTg1MAorOjEwNzdCMDAwMDY4MDhCMzIwMDAwNjQxMUREMDAwMDMwMDMwMDM4RjJENworOjEwNzdDMDAwMDAwMEZCMDkyMzI5MDIwNDA5ODA2RUIyM0UwMDE2MTM1MworOjEwNzdEMDAwMTIwMDAwMkM4MkNEMkVCMjA4MDBGRjA5MUQxQzAxRTgwQQorOjEwNzdFMDAwNzYyMDgxQjkwMDAwRkYwOTgwMDAwMDgwMDI4MTJGQjY1OQorOjEwNzdGMDAwMkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyMDAwMDAwMDBDOQorOjEwNzgwMDAwMDAwMDAwRjgwMjgxMkYzNDAwMDA1NDEwMDAwMDAwMkMwQQorOjEwNzgxMDAwRjkwMTAwRjQwMDAwMDMwQTlEMDEwMDgwMDc0MDkzQjJDMworOjEwNzgyMDAwMDAwMDAwMDAwMDMwMDA4MDA3ODA4ODMyMDAwMDAwMDA2NworOjEwNzgzMDAwMDAzODAwODAwNzAwRUUzMjAwMDAwMDAwMDAwODAwODBFMQorOjEwNzg0MDAwMDdDMDg1MzIwMDAwMDAwMDAwMTAwMDgwMDc0MDkwMzIyMQorOjEwNzg1MDAwMTAwMDAwMDAwMDE4MDA4MDg3OEQ4NTM3MDAwMDAwMDBCMAorOjEwNzg2MDAwMDAyMDAwODAwNzAwODYzMjAwMDAwMDAwMDAyODAwODAxMQorOjEwNzg3MDAwMDcwMDg1MzIwMDAwMEEwQTEyMDEwMDAwMDlDMDIxQjI4NworOjEwNzg4MDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MzAwMEY2MDMxMAorOjEwNzg5MDAwMTIwMTAwNUNBMjhEMkNCMjAwMDAxNjEzMDAwMDAwODBDMworOjEwNzhBMDAwMDIwMDAwOTAwMDEyMTYxMzA0MDEwMDgwQTI4RDJGQjA3OAorOjEwNzhCMDAwMDAwMDAwMDAwMENDMDE3ODA5ODA2RTMyMDAwMDg1MDhDRAorOjEwNzhDMDAwRENEMTAxRTgwNjgwOTc5MjEzMDA4NTA4MTIwMTAwMkM5NAorOjEwNzhEMDAwODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAzRQorOjEwNzhFMDAwMDAwMEUzMEYwMDAwMDAxODA5NDA4MUYyMDAwMEM3MEZGQworOjEwNzhGMDAwMDBBODAxMjAwOTAwNkVGMjAwMDA4NTA4ODAwMTAwODBDOAorOjEwNzkwMDAwRjI4MDJGQjYwMDAwMTkwQTEyMDEwMEM4MDIwMDIwQjI0RQorOjEwNzkxMDAwMDAwMDg1MDg4MDAwMDA4MDcyODEyRkI2MDAwMDAwMDAwMgorOjEwNzkyMDAwMDAwMDAwRjg3MjgxMkYzNDNEMDA4NTA4MTIwMTAwMkMwMAorOjEwNzkzMDAwODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBERAorOjEwNzk0MDAwMDAwMEVFMDkxMjAxMDA1QzA4ODAyMEIyMDAwMDE1MEE1OAorOjEwNzk1MDAwMTIwMTAwNjAwMjgwMkNCMjAwMDAxNjEzMDAwMDAwODBBQgorOjEwNzk2MDAwMDIwMDAwOTAwMDAwODUwODM1MDEwMEY4MTI4MTJGQjU1MworOjEwNzk3MDAwMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyMDAwMDAwMDA3QQorOjEwNzk4MDAwMDA1NDAxRkMwMkMwNkUzMjAwQzAyMzBBMTgwMTAwMEMzMgorOjEwNzk5MDAwQThDRDNFQjIyMDgwMDAwMEQxMDEwMDA4MDg4MDM2MzIxOAorOjEwNzlBMDAwM0IwMEYzMDMxMjAxMDAyQzgyQ0QyRUIyMDAwMDE2MTMwRgorOjEwNzlCMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBFMjExMDA5ODAxMjgwMQorOjEwNzlDMDAwMDkwMDZFRjIwMDAwODUwODAwMDAwMDgwMDIwMDAwOTBBRgorOjEwNzlEMDAwMDAwMDJGMEE4MDAxMDA4MEEyODEyRkI2MDAwMDJGMEEyQworOjEwNzlFMDAwODAwMDAwODA0MjgxMkZCNjFGMDAwMDAwMDAwMDAwMTBDMAorOjEwNzlGMDAwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MDk4MDJGRDJFNgorOjEwN0EwMDAwM0MwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTIyNworOjEwN0ExMDAwMDAwMDAwMTQwOTgwM0NEMjAwMDAyRjBBMDg1QjAxRUMzMgorOjEwN0EyMDAwMDZGQjZFQkMwMDAwMDAwMDAwNUEwMUVDMDYwMDAwMzJBQworOjEwN0EzMDAwMDAwMDJGMEEzNzAwMDBGODQyODEyRkI0M0QwMDAwMDBGQgorOjEwN0E0MDAwRDcwMTAwMkM4MkNEMkUzMjAwMDAzNjBBODAwMTAwODA0MgorOjEwN0E1MDAwOTI4MTJGQjYwMDAwMTYxMzgwMDAwMDgwQzI4MTJGQjZERAorOjEwN0E2MDAwMDAwMDNEMEEwOEM5MDFFODA2QkI2RUJDMDAwMDAwMDAyQQorOjEwN0E3MDAwMDBDODAxRTgwNjAwMDAzMjMzMDAxNjEzMTIwMDAwMkM4MworOjEwN0E4MDAwODJDRDJFQjIwMDAwRjMxMTAwMDAwMDI4MDk4MDAxRjIxRgorOjEwN0E5MDAwMDAwMDg1MDgwMDAwMDA4MDAyMDAwMDkwMDAwMDNEMEEwMAorOjEwN0FBMDAwODAwMTAwODBDMjgxMkZCNjAwMDAxNjEzODAwMDAwODA4NAorOjEwN0FCMDAwOTI4MTJGQjYwMDAwM0QwQTA4RDEwMUU4MDZCQjZFQkNEQQorOjEwN0FDMDAwMDAwMDAwMDAwMEQwMDFFODA2MDAwMDMyMzMwMDE2MTM2OQorOjEwN0FEMDAwMTIwMDAwMkM4MkNEMkVCMjAwMDBGMzExMDAwMDAwMjgwRAorOjEwN0FFMDAwMDlDMDAxRjIwMDAwODUwODAwMDAwMDgwMDIwMDAwOTAzQgorOjEwN0FGMDAwMDAwMDg1MDg4MDAxMDA4MEYyODEyRkI2MTgwMDg1MDhGQgorOjEwN0IwMDAwMDAwMDAwMkM4MkNEMkU5MjAwMDAxNjEzMDQwNzAxODA4NQorOjEwN0IxMDAwMTJDMDZFQkMwMDAwNDMwQTEyMDAwMEM4MDIwMDIwQjI2RQorOjEwN0IyMDAwMDAwMDQ2MEExMjAxMDA1QzA4ODAyMEIyMDAwMDE2MTMxMworOjEwN0IzMDAwMTIwMDAwNjAwMjgwMkNCMjAwMDAwMDAwMDAwMDAwRjg3QgorOjEwN0I0MDAwMUY4MEZGM0EwMDAwRjMwMzEyMDEwMDJDNzJFMDJFQjJGNgorOjEwN0I1MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDBFQQorOjEwN0I2MDAwMDAwMDAwNzg3OTYxMzgzMjAwMDAxNjEzMTIxODAyNENCOAorOjEwN0I3MDAwRTIyNTZFQjIwMDAwMDAwMDAwMzQwMkI4MDg4MDZFMzJDOAorOjEwN0I4MDAwMDAwMDAwMDBENEEwMDE1MDA4MDA2RTMyMDAwMDAwMDA4OAorOjEwN0I5MDAwREI3OTAxNjAwODAwNkUzMjAwMDBGNzExREQwMDAwMDQ5RgorOjEwN0JBMDAwMDgwMDAwRjIxMDAwMDAwMDAwMTgwMDgwODc4RDg1Mzc2MworOjEwN0JCMDAwMDAwMDAwMDAwMEY4MDFFMDA2MDA4NTMyMDAwMDUwMEFENQorOjEwN0JDMDAwMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjhDMAorOjEwN0JEMDAwNzMwQTAzRjkzMDAwMTYxMzEyMDAwMDVDQTI4RDJDQjI1OAorOjEwN0JFMDAwMDAwMDE2MTMwNDA3MDFFQzE2QzA2RUJDMDAwMDAwMDA3NAorOjEwN0JGMDAwMDBCMDAwRTAwNjAwMDAzMjAwMDA4NTA4REE1QzAxRTgxMQorOjEwN0MwMDAwMDY4MDhCOTIwMDAwODUwODlGNDEwMTgwNTIyMDZFQkM0NworOjEwN0MxMDAwMDAwMDVGMEE5Rjk4MDE4MDUyMjA2RUJDMDAwMDAwMDBBNworOjEwN0MyMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwMDA1NDAxRkM3NgorOjEwN0MzMDAwMDJDMDZFMzIwMEMwNUQwQTE4MDEwMDBDQThDRDNFQjIzMQorOjEwN0M0MDAwMjA4MDg1MDgzMTAwMDAwODA4ODAzNkIyMDAwMDAwMDA1RQorOjEwN0M1MDAwMDAwMDAwRjgxMjgxMkYzNDNCMDA4NTA4MTIwMTAwMkMyRgorOjEwN0M2MDAwODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBBQQorOjEwN0M3MDAwMDAwMEUyMTEwMDk4MDEyODA5MDA2RUYyMDAwMDg1MDg1QQorOjEwN0M4MDAwMDAwMDAwODAwMjAwMDA5MDAwMDA4NTA4RDU0MTAxRTA1RQorOjEwN0M5MDAwMDY0MDgxOTIwMDAwODUwODA0QjAwMDgwMDIwMDZFQkM5RQorOjEwN0NBMDAwMDAwMDAwMDAwMDkwMDEwMDA4MDA2RTMyMDAwMDAwMTM4OAorOjEwN0NCMDAwMDA3ODAxNjAwODAwNkVGMjAwMDA4NTA4MDAwMDAwODA3NgorOjEwN0NDMDAwMDIwMDAwOTAwMDAwMDAwMDAwMEMwMjc4MDk4MDZFMzI3MworOjEwN0NEMDAwMDAwMDY3MEEwNEQ0MDE4MDEyQzA2RUJDMDAwMDAwMDBERQorOjEwN0NFMDAwMDAwMDAwNzgxOTgwOTczNzAwMDAwMDAwMDA5MDAxRTA0NAorOjEwN0NGMDAwRTYyNTZFM0EwMDAwMDAxMzAwMDAwMDgwMDIwMDAwRjA0QworOjEwN0QwMDAwMDAwMDZCMEEwMDAwMDA4MDAyMDAwMDkwMDAwMDg1MDg1RgorOjEwN0QxMDAwMDA5MDAxRTAwNjAwODA5MjAwMDAwMDAwMDA5MDAxRTA2OQorOjEwN0QyMDAwMDYwMDgwMzIwMDAwMDAwOTAwMDAwMDgwMDIwMDAwOTA4MAorOjEwN0QzMDAwMDAwMDE2MTM4MDAwMDA4MEYyODAyRkI2MDAwMEM3MEZFRAorOjEwN0Q0MDAwMDBBODAxMjAwOTAwNkVGMjAwMDAxNDBBODAwMDAwODBFMworOjEwN0Q1MDAwRjI4MDJGQjYwMDAwODUwODAwMDAwMDgwMDIwMDAwOTAyRAorOjEwN0Q2MDAwMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyMDAwMDAwMDA4NgorOjEwN0Q3MDAwMDAwMDAwNzgwOTAwNkUzMjAyMDA3NjBBMDRCOTAwODAyMworOjEwN0Q4MDAwODJDRDZFQkMwMDAwNzgwQTgwMDAwMDgwNzI4MEZDQjY1NAorOjEwN0Q5MDAwMDAwMDdCMEEwMDAwMDBGQzAyMDAwMDkyMDAwMDc4MEE0QworOjEwN0RBMDAwODAwMDAwODA4MjgwRkNCNjAwMDA3QjBBMDAwMDAwRkM5RQorOjEwN0RCMDAwMDIwMDAwOTIwMDAwMTYxMzA0MDAwMDgwMDIwMEY1QkNDRgorOjEwN0RDMDAwMDAwMDAwMDAwMDAwMDBBODQyQkQ5NzMwMDAwMDAwMDA0NQorOjEwN0REMDAwNTQxODA5RkVGMkMwN0MzMDAwQzA4MTBBMTgwMTAwMEM2MgorOjEwN0RFMDAwQThDRDNFQjIwMDAwMDAwMDAwMEUwMUVDMDYwMDAwMzRGOQorOjEwN0RGMDAwMDAwMDAwMDAwMDU0MDFFQzA2QzAyRjMyMjA4MDAwMDA3QgorOjEwN0UwMDAwMDAwMDAwMDgwODgwMzYzMjAwMDBGMzAzMTIwMTAwMkM0NQorOjEwN0UxMDAwODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBGOAorOjEwN0UyMDAwMDAwMDAwMDAwMDYyMDEzODA4QzA2RTMyMDAwODAwODBDNworOjEwN0UzMDAwMDAwMDAwMjgwOTAwMzczMjAwMDBFQjExMDAwMDAwMDhBNAorOjEwN0U0MDAwRTgwMTAwRjQwMDAwMTYxMzA0MDcwMUVDMTZDMDZFQkMzNAorOjEwN0U1MDAwMDAwMDAwMDAwMDAwMDBBOEEyMDAyRDM3MEEwMDAwMDA2QQorOjEwN0U2MDAwMDAwMDAwNzgwOTAwMzYzMjAwMDAwMDAwMDAxODA5RTIyNgorOjEwN0U3MDAwMDcwMDAwMzIwMDAwODcwQTA0MDEwMDc4MTk4MDk3QkNDRgorOjEwN0U4MDAwMDIwMDkyMEEwNEI5MDA4MDgyQ0Q2RUJDMDAwMDAwNDg1NgorOjEwN0U5MDAwRDYwMTAwNzhDOUNEMkMzMjAwMDA4QjBBQjYwMDAwODBENAorOjEwN0VBMDAwMDIwMDAwQjAwMDAwMTYxMzEyMDAwMDY0MDI4MDk3QjJCNgorOjEwN0VCMDAwMDAwMDhEMEExMjA4MDA2NDAyMDA2RUIyMDAwMDhFMEFGMworOjEwN0VDMDAwMTIxODAwNjQwMjAwNkVCMjAwMDA4RjBBMTIxMDAwNjRFMworOjEwN0VEMDAwMDIwMDZFQjIwMDAwMDAwMEE2NTQwMUVDMDZDMDJGMzI3MgorOjEwN0VFMDAwMDAwMDdEMDgwMDBFMDFFQzA2MDAwMDk0MDAyMDAwNEMwQworOjEwN0VGMDAwRDYwMTAwNzhDOUNEMkMzMjAwMDA5MzBBQjYwMDAwODA2QworOjEwN0YwMDAwMDIwMDAwQjAwMDAwMTYxMzEyMDAwMDY0MDI4MDk3QjI1NQorOjEwN0YxMDAwMDAwMDk1MEExMjA4MDA2NDAyMDA2RUIyMDAwMDk2MEE4MgorOjEwN0YyMDAwMTIzMDAwNjQwMjAwNkVCMjAwMDA5NzBBMTIzODAwNjQzQQorOjEwN0YzMDAwMDIwMDZFQjIwMDAwOTgwQTEyNDAwMDY0MDIwMDZFQjJBNQorOjEwN0Y0MDAwMDAwMDk5MEExMjQ4MDA2NDAyMDA2RUIyMDAwMDlBMEEwQQorOjEwN0Y1MDAwMTIxMDAwNjQwMjAwNkVCMjAwMDA5QjBBMTIxODAwNjQ0NgorOjEwN0Y2MDAwMDIwMDZFQjIwMDAwOUMwQTEyMjAwMDY0MDIwMDZFQjI5MQorOjEwN0Y3MDAwMDAwMDlEMEExMjI4MDA2NDAyMDA2RUIyMDAwMDAwMDA5QQorOjEwN0Y4MDAwQTY1NDAxRUMwNkMwMkYzMjAzMDA3RDA4MDAwRTAxRUM2MAorOjEwN0Y5MDAwMDYwMDM2OTIwMDAwMDAwMDAwMDAwMEZDMDIwMDAxMzJFMgorOjEwN0ZBMDAwMDAwMEEzMEEwMDAwMDAxNDA4ODAzRDkyMDAwMDAwMDBCOQorOjEwN0ZCMDAwMDAwMDAwRkMwMjAwMDEzMjAwMDBBNjBBMDQwMDAwREMwMAorOjEwN0ZDMDAwNTM2MDNEQjMxODAwMDAwMDAwMDAwMEY4NzM4QTAzMzlDNQorOjEwN0ZEMDAwQTIwQTM2MDAwMDAwMDBDMDAyMDAzNjkyMDAwMDAwMDAzNQorOjEwN0ZFMDAwMDA1NDAxRkMwMkMwNkUzMjAwMDAwMDAwMDAwMDAwRDgwNgorOjEwN0ZGMDAwMDI4MDAxMzIwMEMwQUMwQTE4MDEwMDBDQThDRDNFQjJDQworOjEwODAwMDAwMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyMTUwMEVGMDNEMQorOjEwODAxMDAwMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMDAwMDAwODA0OQorOjEwODAyMDAwMDIwMDAwOTAwMDAwMDAwMDAwMjgwMDAwMDcwMDAwMzI1RAorOjEwODAzMDAwMDAwMDAwMDAwMDMwMDAwMDA3QzAyQzMyMDAxMDAwODI1OQorOjEwODA0MDAwMDAzODAwMDAwNzAwMzczMjAwMDAxNjEzMTIwMDAwNDgwNQorOjEwODA1MDAwMDJDMDgwQjIwMDAwN0QwOENBMDEwMDA4RTgwMTAwOTQ1NworOjEwODA2MDAwMDAwMDE2MTM4MDAxMDA4MDYyODEyRkI2MkQwMDE2MTNDOAorOjEwODA3MDAwMTIwMDAwMkM4MkNEMkVCMjAwMDBCNTBBMUQwMTAwODAzNgorOjEwODA4MDAwMDIwMDAwQjAwMDAwN0QwODAwMDAwMEY4NjI4MTJGOTUxQQorOjEwODA5MDAwMDAwMDE2MTM4MDAwMDA4MDAyODEyRkI2MDAwMDAwMDA0RgorOjEwODBBMDAwMDAwMDAwRjgwMjgxMkYzNDJBMDA3RDA4MTIwMTAwMkMwNAorOjEwODBCMDAwODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA1NgorOjEwODBDMDAwMDAwMEQ3MTEwMDAwMDAyQzA5QzA4NUQyMDAwMDY0MTEwNworOjEwODBEMDAwMDAwMDAwMzAwMzAwMzhGMjAwMDBGMzAzMjMwMTAwRjgzMQorOjEwODBFMDAwMjI4MTJGQjQzRTAwRjMwMzEyMDEwMDJDODJDRDJFQjI2OAorOjEwODBGMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEQ3MTE1RAorOjEwODEwMDAwMDAwMDAwMkMwOUMwODVEMjAwMDBGMzAzMDAwMDAwRjgzNQorOjEwODExMDAwMjI4MTJGOTQwMDAwQzUwQTM4MDEwMEQ4MDI4MDAxQjJFNAorOjEwODEyMDAwMDAwMEMzMEExRTAwMDA4MDAyMDAwMEIwMDAwMEM1MEE2MworOjEwODEzMDAwMUEwMTAwODAwMjAwMDBCMDAwMDAzODEyMDAwMDAwNjg0MAorOjEwODE0MDAwMUY4MEY2RkEwMDAwRjMwMzAwMDAwMDgwMDIwMDAwOTA5OAorOjEwODE1MDAwMDAwMEM5MEExMjAxMDA2MDA4NDAyM0IyMDA4MjAwMDAzQQorOjEwODE2MDAwMDAwMDAwMDgwODgwMzYzMjAwMDAzODEyMDAwMDAwNjQ2OQorOjEwODE3MDAwMUY0MEY2RkEwMDAwRjMwMzAwMDAwMDgwMDIwMDAwOTBBOAorOjEwODE4MDAwMDAwMDE2MTMxMjAwMDAyNDA4MDAyM0IyMDAwMDE2MTM4QQorOjEwODE5MDAwMTIwMDAwMjAwOEMwMjNCMjAwMDAxNjEzMTIwMDAwMThCRAorOjEwODFBMDAwMDg4MDIzQjIwMEMwRDQwQTE4MDEwMDBDQThDRDNFQjI0QQorOjEwODFCMDAwMDAwMENDMEExMjAwMDAzODAyODA4MUIyMDAwMDE2MTNDMQorOjEwODFDMDAwMTIwMDAwM0MwMjAwODJCMjAwMDAxNjEzMTIwMDAwMzBDMAorOjEwODFEMDAwMDI0MDgyQjIwMDAwMTYxMzEyMDAwMDM0MDIwMDg2QjI4MAorOjEwODFFMDAwMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyMDAwMDM4MTJBRAorOjEwODFGMDAwMDAwMDAwNUMxRkMwRjVGQTAwMDBGMzAzMDAwMDAwODBERgorOjEwODIwMDAwMDIwMDAwOTAwMDAwMDAwMDQ1MDAwMEQ4MDIwMDAwMzI4QgorOjEwODIxMDAwMDAwMDAwMDAwMDAwMDAwMDA3NDA4MDMyMDAwMDAwMDA2NQorOjEwODIyMDAwMDAxMDAwMDAwNzQwODIzMjAwMDAwMDAwMDAxODAwMDAyQgorOjEwODIzMDAwMDcwMDg2MzIwMDAwMTYxMzEyMDAwMDUwRjJDMTM4QjQ1NQorOjEwODI0MDAwMDAwMDdBMEYwMDMwMDFFMDE2MjA2RUZBMDAwMEREMEEwRgorOjEwODI1MDAwMzgwMTAwMkNGODAxMEJCNDAwMDBERDBBMDIwRDAyODA4OQorOjEwODI2MDAwQTI1QjgwQkMwMDAwMDAwMDAwMDAwMDJDQzhDMTgyMzQ2QQorOjEwODI3MDAwMDAwMERGMEE4MDAwMDA4MDQyODEyRkI2MDAwMEI0MEZBQQorOjEwODI4MDAwMDAwMDAwODAwMjAwMDBGMDAwMDAxNjEzOUZBODAxRTAyQgorOjEwODI5MDAwMTYyMDZFQkMwMDAwRDQwRjAwMDAwMDgwMDIwMDAwRjAyOQorOjEwODJBMDAwMDAwMEU1MEEyNzAxMDBEODAyODAwMUIyMDAwMDAwMDBBQQorOjEwODJCMDAwQzcwMDAwMkNFOEMwODIzNDAwMDAwMDAwMDAwMDAwMDg2NQorOjEwODJDMDAwRDgwMTAwMzQwMDAwMDAwMEQ1NDAwMUUwMDYwMDg3MzJFQworOjEwODJEMDAwMDgwMDRCMTIwMDE4MDFFODc2MjA4MUY5MDAwMDY0MTFCMworOjEwODJFMDAwMDAwMDAwMzAwMzAwMzhGMjAwMDBFOTBBMjMxOTAwMDAwMgorOjEwODJGMDAwMDc4MDgxQjIzRTAwMTYxMzEyMDAwMDJDODJDRDJFQjJGMAorOjEwODMwMDAwMDAwMEVCMEExRDIxMDAwMDA3MDA4MkIyMDAwMEVFMEEwNworOjEwODMxMDAwMDAwMDAwRjg2MjgxMkY5NTAwMDBFRTBBODAwMDAwODBDNgorOjEwODMyMDAwMDI4MTJGQjYyQTAwMTYxMzEyMDAwMDJDODJDRDJFQjIyNQorOjEwODMzMDAwMDAwMDAwMDAwMDAwMDBGODAyODEyRjM0MDAwMDE2MTMzNgorOjEwODM0MDAwODAwMDAwODBBMjgwMkZCNjAwMDA1NDEwMDAwMDAwMkM5NgorOjEwODM1MDAwRjkwMTAwRjQwMDAwMTYxMzA0MDEwMDgwNjI4MDJEQkNCNgorOjEwODM2MDAwMTAwMEY0MEEyQzMwMDAwMDE3RTAyQ0I5MDAwMEY2MEFDNworOjEwODM3MDAwOEUzOTAwMDAwN0MwODJCMjAwMDBGNjBBMDAwODAwMDAzMworOjEwODM4MDAwMDcwMDg3OTIwMDAwRjYwQThFMzkwMDAwQjdDMTgyQjQ1OAorOjEwODM5MDAwMDAwMDAwMDAwMDA4MDAwMDA3MDA4NzMyMDAwMEY4MEExMworOjEwODNBMDAwMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwMDAwMDAwRjhGNworOjEwODNCMDAwNzMwQTAzRjkwMDAwRjYwQTlGMDEwMDE0MTg0MDgxQkNGQgorOjEwODNDMDAwMDAwMEZFMEEwNDAwMDA4MDAyQzA4NUJDMDAwMDE2MTNGNQorOjEwODNEMDAwMTIwMDAwNjgwMkM1ODVCMDAwMDAwMDAwMDAwMDAwNzhBRgorOjEwODNFMDAwMDlDNTg1MzAwMDAwMTYxMzAyMDEwMDgwODJCQTk3QkNDRgorOjEwODNGMDAwMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDMDAwMDE2MTMwNQorOjEwODQwMDAwMTIwMDAwNDgwMkMwODBCMjAwMDAxNjEzMDQwMTAwODA3MAorOjEwODQxMDAwRDI4MTgwQjUwMDAwRjYwM0NBMDEwMDA4RTg4MTgwOTQ4QgorOjEwODQyMDAwMDAwMDE2MTM4MDAxMDA4MDgyODEyRkI2MDAwMDA0MEIyQgorOjEwODQzMDAwMUUwMDAwODAwMjAwMDBCMDAwMDAwNjBCMUEwMTAwODA0MAorOjEwODQ0MDAwMDIwMDAwQjAwMDAwMzgxMjAwMDAwMDY4MUY4MEY2RkEzOQorOjEwODQ1MDAwMDAwMEYzMDMwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNFQgorOjEwODQ2MDAwOUZBODAxRTAxNjIwNkVCQzAwMDA3QTBGMDAwMDAwMTRFNworOjEwODQ3MDAwMDgwMDAwRjIwMDAwMEEwQjgwMDAwMDgwNDI4MTJGQjY0NQorOjEwODQ4MDAwMDAwMEI0MEYwMDAwMDA4MDAyMDAwMEYwMDAwMEQ0MEZENAorOjEwODQ5MDAwMDAwMDAwODAwMjAwMDBGMDAwMDA3RjA4MDQwMDAwODA1RgorOjEwODRBMDAwMDI0MDgxQkMwMDAwMEUwQjEyMDEwMEU4MDJDMDIxQjJBNAorOjEwODRCMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDBGRAorOjEwODRDMDAwMDAwMDAwNzgwOUM1ODUzMDAwMDAxNjEzMDIwMTAwODAwNQorOjEwODREMDAwODJCQTk3QkMwMDAwMTYxMzA2MDEwMDgwOTJCQTk3QkNCRQorOjEwODRFMDAwMDAwMDdGMDgxMjAxMDA2ODAyQzU4NUIwMDAwMDE2MTM2NQorOjEwODRGMDAwMDAwMDAwODAwMjAwMDA5MDAwMDA3RDA4ODAwMDAwODBFNQorOjEwODUwMDAwRjJDMTg1QjYwMDAwMTcwQjFDNDEwMjgwMDZDMDg1QjI3RgorOjEwODUxMDAwMDAwMDAwMDAwMDAwMDA2ODAyQzU4NTMwMDAwMDAwMDA3NworOjEwODUyMDAwMDAwMDAwNzAxRjAwRjczQTAwMDA3RDA4MDAwMDAwRjgwRQorOjEwODUzMDAwMjI4MTJGOTQwMDAwN0QwODgwMDAwMDgwRjJDMTg1QjY2MgorOjEwODU0MDAwMDAwMEQ3MTEwMDAwMDAyQzA5QzA4NUQyMDAwMEYzMDMwMQorOjEwODU1MDAwRDIwMTAwOTQxRTQwRTk5QTAwMDAxNjEzMDQyMDAwMTg2RQorOjEwODU2MDAwMDgwMDZFQjIwMDAwMTYxMzgwMDAwMDgwRjI4MTJGQjY2MgorOjEwODU3MDAwMDAwMDhDMTIwMDAwMDA4MDAyMDAwMEYwMDAwMDE2MTNDMgorOjEwODU4MDAwMDQwMTAwODAwMjgwODBCQzAwMDAxNjEzMDQ1MTAxODBBOQorOjEwODU5MDAwMDI4MDZFQkMwMDAwMTYxMzA0MjEwMTgwMDIwMDZFQkMzNAorOjEwODVBMDAwMDAwMDAwMDAwMDNDMDBFODA2NDA4MTMyMDAwMDI1MEI3RQorOjEwODVCMDAwMUYwMDAwODAwMjAwMDBCMDAwMDAyMjBCOUU0MDAyNzhFNQorOjEwODVDMDAwMDk0MDY4QjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAwRAorOjEwODVEMDAwMDAwMDI5MEI4MDAxMDA4MDgyODEyRkI2MDAwMDdGMDhGNworOjEwODVFMDAwMkEzMTAxRTAwNjAwMDBCMjE4MDAwMDAwQ0EwMDAwRjhCRAorOjEwODVGMDAwNzMwQTAzMzk3RjA4MzYwMDAwMDAwMEMwMDIwMDM2OTI3QgorOjEwODYwMDAwMDAwMDdGMDg4MDAxMDA4MEEyODAyRkI2MTgwMDAwMDBDMworOjEwODYxMDAwQ0EwMDAwRjg3MzBBMDMzOTdGMDgzNjAwMDAwMDAwQzA2MgorOjEwODYyMDAwMDIwMDM2OTIwRDAwMkYwQjAwMDAwMDU4MDgwMDM2OTIxMQorOjEwODYzMDAwMDAwMDJGMEIwMDAwMDA1ODA4MDAwMDkyMUIwMDAwMDBGMworOjEwODY0MDAwMDAwMDAwNTgwODAwMzYzMjAwMDAxNjEzMDQyMDAwMThGRAorOjEwODY1MDAwMDgwMDZFQjIwMDAwMTYxMzgwMDAwMDgwRjI4MTJGQjY3MQorOjEwODY2MDAwMDAwMDhDMTIwMDAwMDA4MDAyMDAwMEYwMDAwMDAwMDBGQQorOjEwODY3MDAwMDAzMDAwMjgwODAwNkUzMjAwMDAwMDAwNTQ1NDAxRkM1NQorOjEwODY4MDAwMDJDMDZFMzIwMDAwOTQwQjM4MDAwMEE0MDg4MDgyQjI1MQorOjEwODY5MDAwMDAwMDk0MEIwNDI4MDEwNDA4MDA2RUIyMDAwMDE2MTNCOQorOjEwODZBMDAwOUY1MDAxMDRBODVCODBCQzAwMDAwMDAwMDA1MDAxRTg1RQorOjEwODZCMDAwMDYwMDAwMzIwMDAwNUUwQjA4MDEwMDc4MTlBMDgyQkNBMQorOjEwODZDMDAwMDAwMDAwMDAwMDI4MDFFMEE2NjA4MDNDMDAwMDNDMEI5OAorOjEwODZEMDAwMkEwMTAwMTQwODAwMDBCMjAwMDAwMDAwQ0EwMDAwMTRDMworOjEwODZFMDAwMTg0MDgxM0EwMDAwQzcwRjAwQTgwMTIwQTkyMDZFRkFBNworOjEwODZGMDAwMDAwMDE2MTMwNjAxMDI4MDgyMUI5MkJDMDAwMDAwMDBERAorOjEwODcwMDAwMDAyMDAxRTBBNjIwNkUzQzAwMDAwMDAwMDAzMDAwRTBFOAorOjEwODcxMDAwMDYwMDAwMzIwMDAwMDAwMDAwQTgwMUUwMDYwMDkyMzJDRQorOjEwODcyMDAwMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyMDBDMDUwMEJBMQorOjEwODczMDAwMTgwMTAwMENBOENEM0VCMjAwMDA0NzBCMDQwMDAwODBEOQorOjEwODc0MDAwMDI0MDgxQkMwMDAwMDAwMDAwMDAwMDE0MDgwMDAwMzI1QworOjEwODc1MDAwMTgwMDAwMDAwMDAwMDBGODczMEEwMzM5NDEwQjM2MDBDRQorOjEwODc2MDAwMDAwMDAwQzAwMjAwMzY5MjIwODAwMDAwMDAwMDAwMjhCNworOjEwODc3MDAwMDk4MDM2MzIwMDAwODExMTAwMDAwMEQ4MDIwMDAwRDJDQQorOjEwODc4MDAwMDAwMDRCMEIwNDAwMDA4MDAyODA5MkJDMTgwMDM2MDBGMQorOjEwODc5MDAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwMDAwMDAwRDg5MAorOjEwODdBMDAwMDI4MDAxMzIwMEMwNTAwQjE4MDEwMDBDQThDRDNFQjI2RgorOjEwODdCMDAwMTgwMDAwMDAwMDAwMDBGODczOEEwMzM5NEIwQjAwMDAxQQorOjEwODdDMDAwMDAwMDAwQzAwMjAwMzYzMjAwMDAzNjAwMDAwMDAwODBDOQorOjEwODdEMDAwMDIwMDAwOTAwMDAwMDAwMERFMDAwMDA4RTgwMTAwMzQwNAorOjEwODdFMDAwMDAwMDAwMDBERjAwMDEzODA4QzA2RTMyMDAwMDAwMDAwOQorOjEwODdGMDAwMDAxMDAwMDAwNzAwMDAzMjAwMDAwMDAwMDAxODAwMDAxOAorOjEwODgwMDAwMDc4MDgyMzIwMDAwMDAwMDAwMzAwMDAwMDdDMDJDMzJEOAorOjEwODgxMDAwMDAyMDAwODAwMDM4MDAwMDA3MDAzNzMyMDAwMDAwMDAxMAorOjEwODgyMDAwQ0EzRDAwMEMwNzgwODMzMjAwMDAwMDAwMDAwMDAwMTRFNQorOjEwODgzMDAwMTg0MDgxM0EwMDAwNUMwQjA0MDIwMUVDMTZDMDZFQkNDQgorOjEwODg0MDAwMDAwMDAwMDBDMDAxMDAxNDE4NDA4MTNBMDAwMDAwMDA0MAorOjEwODg1MDAwMDAwMDAwRjg5MjgwMkYzNDAwQzAxNjEzMTIwMDAwNDA3MAorOjEwODg2MDAwQTI4RDM5QjIwMDAwRDcwQjEyMDEwMDQ4MDJDMDgwQjJCRAorOjEwODg3MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDBCRAorOjEwODg4MDAwMDAwMDAwMjgwODgwOTczMjAwMDAwMDAwMDAwMDAwQTRDQgorOjEwODg5MDAwMDg4MDgyMzIwMDAwMDAwMDAwMTAwMDZDMTgyMDZFM0E0MAorOjEwODhBMDAwMDAwMDAwMDAwMDE4MDA0QzA4MDA2RTMyMDAwMEM3MEZFNgorOjEwODhCMDAwMDBBODAxMjAxOTIwNkVGQTAwMDAxNjEzMDYwMTAyODA5QworOjEwODhDMDAwODIxQjkyQkMwMDAwMDAwMDAwMjAwMUUwMTYyMDZFM0NEQworOjEwODhEMDAwMDAwMDAwMDAwMEE4MDFFMDA2MDA5MjMyMDAwMDY5MEJEMQorOjEwODhFMDAwMDAzODAxRTAwNjQwODA5MjAwMDAwMDAwMDA2MDAwNkM0QgorOjEwODhGMDAwMTgyMDZFM0EwMDAwMDAwMDAwNjgwMDRDMDgwMDZFMzIzQworOjEwODkwMDAwMDAwMDZCMEI5RjAxMDAwNDY4NjA4MEJDMDAwMDc0MEJDQQorOjEwODkxMDAwMDAwMDAwMTgxODIwMDA5QzAwMDAxNjEzODAwMTAwODA0MQorOjEwODkyMDAwQTI4MDJGQjYwMDAwNkUwQjEyMDEwMEU4MDJDMDIxQjIzNworOjEwODkzMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDA3OAorOjEwODk0MDAwQ0E3MDAwMTgwODAwNkUzMjAwMDA2NzBCMDIwMTAwODAzOAorOjEwODk1MDAwNjI2MDgwQkMwMDAwMTYxMzlGMDAwMDE0MTg0MDgxQkNBOAorOjEwODk2MDAwMDAwMDAwMDBDQTAxMDBGODAyODAyRjM1MDBBMDY5MEI0QQorOjEwODk3MDAwMTIwMTAwNDBBMjhEMzlCMjAwMDAxNjEzMDAwMDAwODBFMQorOjEwODk4MDAwMDIwMDAwOTAwMDAwNzkwQjgwMDAwMDgwQTI4MDJGQjZDQQorOjEwODk5MDAwMDAwMDdDMEIwNDAwMDA4MEEyQTA4MUJDMDAwMDE2MTMyNAorOjEwODlBMDAwOUYwMDAwMTQxODQwODFCQzAwMDAwMDAwQ0EwMTAwRjhCQworOjEwODlCMDAwMDI4MDJGMzUwMEEwMTYxMzEyMDAwMDQwQTI4RDM5QjI5QworOjEwODlDMDAwMDAwMDAwMDAwMDAwMDBGOEEyODAyRjM1MDAwMDdDMEJBMgorOjEwODlEMDAwMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwMDAwMDAwRjhDMQorOjEwODlFMDAwNzMwQTAzRjkwMDAwMDAwMDAwMjgwMUUwMDYwMDAwMzJDRAorOjEwODlGMDAwMDAwMDAwMDAwMDNDMDBFODA2NDA4MTMyMDAwMDAwMDA1QQorOjEwOEEwMDAwMDAzMDAwRTAwNjgwODIzMjAwMDAwMDAwMDAyMDAwRTAxQworOjEwOEExMDAwMDY4MDgxMzIwMDAwMDAwMDAwMTAwMEUwMDZDMDg2MzJBRgorOjEwOEEyMDAwMDAwMDAwMDAwMDE4MDBFMDA2QzA4NDMyMDAwMDE2MTNBOQorOjEwOEEzMDAwMDQwMDAwODAzMkUxODZCMjAwMDA4NjBCMUYwMTAwMDhBRQorOjEwOEE0MDAwMDkwMDAwQjIwMDAwOTcwQjA0MjAwMTgwMDIwMDZFQkNGOAorOjEwOEE1MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMTAwMDAwMDBDQgorOjEwOEE2MDAwMDAwMDAwMTA3OTBCMTYzODA4MDAwMDAwMDAwMDAwMEMxMAorOjEwOEE3MDAwNzkwQjE2MzgwMDAwMDAwMDAwMDAwMDA0QTkwMDJEMzcxMworOjEwOEE4MDAwMDAwNDAxMDAwMDAwMDAwNEM5NEQ5MDNBMDIwMDAwMDBGQgorOjEwOEE5MDAwMDAwMDAwQTg4MjBEOTEzNzAwMDAwMDAwMDAwMDAwQTgyRgorOjEwOEFBMDAwMTJBNDJBM0EwMDAwOEYwQjgwNDAwMjgwRTIwMTdDQjZCQgorOjEwOEFCMDAwMDAwMDE2MTMwNDQwMDI3OEI5M0Y3Q0IwMDAwMDAwMDBBQgorOjEwOEFDMDAwMDAwMDAwMDhFOUE1OTAzQTAwMDA5MTBCOUYwMTAwMTBGQQorOjEwOEFEMDAwMTkwMDkxQkM5RjAwMDAwMDAwMDAwMDEwMDkwMDM2MzIxMAorOjEwOEFFMDAwMDAwMDhBMEIwNDAxMDA4MDQyRTQ5MEJDMDAwMDE2MTNEMQorOjEwOEFGMDAwMDQyMTAxODA4MjlCOTBCQzAwMDA5NzBCMDAwMDAwODA0NQorOjEwOEIwMDAwMDIwMDAwOTAwMDAwMDAwMDAwMTAwMDZDMDgwMDZFMzJBRgorOjEwOEIxMDAwMDAwMDAwMDAwMDE4MDA0QzA4MDA2RTMyMDAwMDE2MTMyMAorOjEwOEIyMDAwMDQwMDAwODAzMkUxODZCMjAwMDAzMjEwNTEwMDAwRDgwQgorOjEwOEIzMDAwMDIwMDAwRjIwMDAwOUEwQjAwNTAwMTNDQTg1QjgwOUNGMAorOjEwOEI0MDAwMDAwMDdGMDgwMDMwMDFFMDA2MDAwMDkyMDAwMDlGMEI0QgorOjEwOEI1MDAwM0U1MTAxMDBBODFCODBCQTAwMDAwMDAwREUwMDAwRjhCMgorOjEwOEI2MDAwRjI4MTJGMzQwMDAwMDAwMDAwNTgwMUVDMDZDMEVFMzIwNAorOjEwOEI3MDAwMDAwMDlGMEI4MDAxMDA4MDMyODA4N0I2MDAwMDAwMDA1QgorOjEwOEI4MDAwMDAwMDAwRjhFMjgwMkYzNDAwMDBFMzEwNjAzMDAxRTBDNAorOjEwOEI5MDAwMDYwMDAwRjIwMDAwRTkwQjAwMDAwMDgwMDIwMDAwOTBENworOjEwOEJBMDAwMDAwMDAwMDAwMDAwMDAxNDA4MDAwMDMyMDAwMEE5MEJDMworOjEwOEJCMDAwMDQwMjAxRUMxNkMwNkVCQzAwMDAwMDAwQzkwMTAwMTRFNAorOjEwOEJDMDAwMTg0MDgxM0EwMDAwMDAwMEMwMDEwMTM4MDhDMDZFMzIzMAorOjEwOEJEMDAwMDAwMDAwMDBERjAwMDBBNEE4NjA4QTNDMDAwMDE2MTMxQgorOjEwOEJFMDAwMEYwMDAwODAwMjAwMDBCMDAwQzBBRDBCMTIwMTAwNDA3OQorOjEwOEJGMDAwQTI4RDM5QjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAyMAorOjEwOEMwMDAwMDAwMDAwMDAwMDMwMDBFMDA2MDAwMDMyMDAwMDAwMDAxQworOjEwOEMxMDAwREYwMDAwQTRBODYwOEEzQzAwMDAxNjEzMEYwMDAwODA0QgorOjEwOEMyMDAwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMTM4MDhDMDZFMzJGMQorOjEwOEMzMDAwMDAwMDAwMDBERUE4MDEyMDk5MjI2RTNBMDAwMDE2MTMwMQorOjEwOEM0MDAwMDYwMTAyODA4MjFCOTJCQzAwMDAxNjEzOUYyMDAxRTBFNworOjEwOEM1MDAwOTYyMjZFQkMwMDAwQjIwQjgwMDAwMDgwRjI4MDJGQjYxRQorOjEwOEM2MDAwMDAwMEM3MEYwMDAwMDA4MDAyMDAwMEYwMDAwMEI5MEJGOAorOjEwOEM3MDAwMUY1MDAxRTgwNjAwMDBCMjAwMDBCNTBCMDQwMDAwODBBMAorOjEwOEM4MDAwMDJDMDgzQkMwMDAwQjkwQjAwNTAwMUU4RjY2MDgwOUM3NAorOjEwOEM5MDAwMDgwMDAwMDAwMDQwMDI3ODM5OUFGRTM4MDAwMDE2MTNFMAorOjEwOENBMDAwMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzMDYwMTAwODAwMgorOjEwOENCMDAwOTJCQTk3QkMwODAwMDAwMDAwNDAwMjY4MTI5QUZFMzg4MQorOjEwOENDMDAwMDAwMEJFMEIyQUE5MDFFMDA2MDA5MkIyMTgwMDM2MDA4RgorOjEwOENEMDAwQ0EwMDAwRjg3MzBBMDNGOTFEMDBCRTBCMDQwMDAwODBFRgorOjEwOENFMDAwMDJBNDE3QjgwMDAwQkEwQjA0MDAwMDE0MTg0MDgxQkM5RAorOjEwOENGMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDY0MTFDNAorOjEwOEQwMDAwMDAwMDAwMzAwMzAwMzhGMjAwMDBDMTBCODAwMTAwODAzOQorOjEwOEQxMDAwMzI4MDJGQjYzRTAwMTYxMzEyMDAwMDJDODJDRDJFQjJFOAorOjEwOEQyMDAwMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyMDBDMEQyMEIxOQorOjEwOEQzMDAwMTgwMTAwMENBOENEM0VCMjIwODAwMDAwQzMwMDAwMjgxRQorOjEwOEQ0MDAwMDk4MDM2MzIwMDAwODExMTAwMDAwMEQ4MDIwMDAwRDJGNAorOjEwOEQ1MDAwMDAwMEM3MEIwNDAwMDA4MDAyODA5MkJDMDAwMDAwMDBFRAorOjEwOEQ2MDAwMDAwMDAwMTQxODQwODEzQTAwMDBDQzBCMDQwMDAwODA4MQorOjEwOEQ3MDAwMDI0MDgxQkMxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjlCNQorOjEwOEQ4MDAwMDAwMEQwMEIwNDAwMDAxNDE4NDA4MUJDMDAwMEM4MEI4OAorOjEwOEQ5MDAwMTIwMDAwMDAwOUMwMjFCMjAwMDBDOTBCMDAwMDAwODBEMQorOjEwOERBMDAwMDIwMDAwOTAxODAwMzYwMDAwMDAwMEY4NzM4QTAzRjlGMgorOjEwOERCMDAwMDAwMDY0MTEwMDAwMDAzMDAzMDAzOEYyMDAwMEQwMEIwNgorOjEwOERDMDAwODAwMTAwODAzMjgwMkZCNjNFMDAxNjEzMTIwMDAwMkM2NgorOjEwOEREMDAwODJDRDJFQjIwMDAwMDAwMEMzMDAwMEQ4MDI4MDAxMzIxNAorOjEwOERFMDAwMDBDMENDMEIxODAwMDAwQ0E4Q0QzRUIyMDAwMDE2MTMzQQorOjEwOERGMDAwODAwMDAwODA3MjgwMkZCNjAwMjAwMDgwMDAwMDAwMjhENAorOjEwOEUwMDAwMDkwMDM3MzIwMDAwNjYxMjAwMDAwMDA4RTgwMTAwRjQ5MworOjEwOEUxMDAwMDAwMDE2MTMxMjAwMDA0ODAyQzA4MEIyMDAwMDAwMDBEQgorOjEwOEUyMDAwMDAwMDAwMTQxODQwODEzQTAwMDAxNjEzODAwMTAwODBGMQorOjEwOEUzMDAwQTI4MDJGQjYxODAwMzYwMENBMDAwMEY4NzMwQTAzRjlBMgorOjEwOEU0MDAwMUQwMDE2MTMwNDAwMDA4MDAyQTQxN0I4MDAwMDE2MTNCQQorOjEwOEU1MDAwOUYwMDAwMTQxODQwODFCQzAwMDBEODBCMEIwMTAwODA1QgorOjEwOEU2MDAwMDIwMDAwQjAwMDAwNEIxMjAwMDAwMDgwMDIwMDAwRjA4MQorOjEwOEU3MDAwMDAwMEUwMEI4MDAxMDA4MDkyODAyRkI2MkIwMEU2MEJGMworOjEwOEU4MDAwMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMDAwMDAwODBDQgorOjEwOEU5MDAwMDIwMDAwOTAwMDAwRTMwQjFEMDEwMDgwMDIwMDAwQjAwMgorOjEwOEVBMDAwMDAwMEU2MEI4MDAxMDA4MDYyODEyRkI2MDAwMDE2MTNERgorOjEwOEVCMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBFNjBCODAwMDAwODBBRgorOjEwOEVDMDAwMDI4MTJGQjYyQTAwMTYxMzEyMDAwMDJDODJDRDJFQjI3QQorOjEwOEVEMDAwMDAwMDAwMDAwMDAwMDBGODAyODEyRjM0MDAwMDdEMDgyRgorOjEwOEVFMDAwMDQwMDAwODAwMjgwODVCQzAwMDA1RDEyMDAwMDAwODA0QworOjEwOEVGMDAwMDIwMDAwRjAwMDAwNjkwNjAwMDAwMDFDMDg4MDg1OTI1NgorOjEwOEYwMDAwMDAwMDdGMDg4MDAxMDA4MEEyODAyRkI2MDAwMDE2MTNBOQorOjEwOEYxMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzODAwMDAwODAxNgorOjEwOEYyMDAwRTI4MDJGQjYwMDAwRUUwQjgwMDEwMDgwODI4MTJGQjYxOAorOjEwOEYzMDAwMDAwMDE2MTMwNDMxMDE4MDAyMDA2RUJDMDAwMDE2MTNGRAorOjEwOEY0MDAwMDQzMTAwODA4MjlCODJCQzAwMDAxNjEzMDIwMTAwODA2NQorOjEwOEY1MDAwMTJBMDgyQkMwMDAwMDAwMENFMDEwMEQ4MDI4MDAxMzJDNQorOjEwOEY2MDAwMDBDMEY1MEIxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDAxNworOjEwOEY3MDAwMDAwMDAwMDgwODgwMzYzMjAwMDAzODEyMDAwMDAwNUM1MworOjEwOEY4MDAwMUZDMEY1RkEwMDAwRjMwMzAwMDAwMDgwMDIwMDAwOTAwQgorOjEwOEY5MDAwMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2MDAwMDE2MTM3OAorOjEwOEZBMDAwODAwMDAwODA4MjgwMkZCNjAwMDAxNjEzMDQwMDAwODAyRAorOjEwOEZCMDAwMDI4MDgyQkMwMDAwMDAwMDYwMDAwMEQ4MDIwMDAwMzI4NQorOjEwOEZDMDAwMDAwMEZEMEIzRjAwMDAzQzA4NDA4MEIyMDAwMEZEMEI5QworOjEwOEZEMDAwODAwMTAwODBFMjgxMkZCNjAwMDAwMDAwREUwMDAwRjg3MgorOjEwOEZFMDAwRjI4MTJGMzQwMDAwMDAwMDAwNTgwMUVDMDZDMEVFMzI4MAorOjEwOEZGMDAwMDAwMDAwMDA0RDAwMDAwMDY3RTA4MzNFMDAwMDAwMDAxQworOjEwOTAwMDAwMDAwODAwMDAwNzAwODAzMjAwMDAwMDAwMDAxMDAwMDA4RgorOjEwOTAxMDAwMDdDMDg2MzIwMDAwMDAwMDAwMTgwMDAwMDdDMDg0MzIzQworOjEwOTAyMDAwMDAwMDQ5MEMwNDAwMDAyOEQ4QTA4MkJDMDAwMDE2MTNFMAorOjEwOTAzMDAwMDkwMTAwODAwMjAwMDBCMDAwMDAwMDAwMDAwMDAwMThEQworOjEwOTA0MDAwRDhBMDgxM0MwMDAwMUYwQzA0MDAwMDNDRDhFMDgzQkM4OQorOjEwOTA1MDAwMDAwMDE2MTMwNDAxMDA4MDAyODA4MUJDMDAwMDA5MEM4RQorOjEwOTA2MDAwMDQwMDAwODA3MjgwMkRCQzAwMDAxNjEzMTIwMDAwNTAxNgorOjEwOTA3MDAwMDJDMDM4QjIwMDAwMUQwQzUxMDAwMEQ4MTI4MDJEOUE5OQorOjEwOTA4MDAwMDAwMDE2MTMxMjAwMDA1MEYyQzEzOEI0MDAwMDE2MEM5NAorOjEwOTA5MDAwMjgwMDAwRDgwMjAwMDBCMjAwMDAxMzBDODAwMTAwODBGQworOjEwOTBBMDAwRjJDMTg1QjYwMDAwMEYwQzFGNDAwMjg0RTYwMTAwQjQzNworOjEwOTBCMDAwMDAwMDEzMEMxRDAxMDBGODIyODEyRkI0MDAwMDEzMENENgorOjEwOTBDMDAwMDAwMDAwRjg2MjgxMkY5NTAwMDAxMTBDMUQwMTAwODA0NgorOjEwOTBEMDAwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4NjI4MTJGMzU5RgorOjEwOTBFMDAwMDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyMDAwMDE2MTNCOQorOjEwOTBGMDAwMUYwMTAwODAwMjAwMDBCMDAwMDAxNTBDMzQzMDAwRTBCOQorOjEwOTEwMDAwMTYyMDZFQkMwMDAwQjQwRjAwMDAwMDgwMDIwMDAwRjBDQQorOjEwOTExMDAwMDAwMEQ1MEZEQTVCMDFFQzA2NDBFREYyMTgwMDM2MDBENgorOjEwOTEyMDAwMDAwMDAwRjg3MzBBMDNGOTAwMDAxQjBDMDQwMDAwODAyMworOjEwOTEzMDAwNzI4MDJEQkMwMDAwMTYxMzgwMDEwMDgwQTI4MDJGQjYyMworOjEwOTE0MDAwMDAwMDE2MEM2NzAwMDBGOEEyODAyRkI1MDAwMDE2MTM2RgorOjEwOTE1MDAwMTIwMDAwRTgwMkMwMjFCMjAwMDAxNjEzMDQwMTAwODBEMgorOjEwOTE2MDAwNzI4MDJEQkMwMDAwMDAwMDUxMDAwMEQ4MDIwMDAwMzJDNworOjEwOTE3MDAwMDAwMDNFMTAwMDAwMDAwMEQ4MjA4MEZBMDAwMEZFMEIyNgorOjEwOTE4MDAwNEQwMDAwMDA2N0UwODM5RTAwMDAxNjEzMTIwMDAwNTA5RgorOjEwOTE5MDAwRjJDMTM4QjQwMDAwMkMwQzI4MDAwMDgwMDg0MDAwQjI1NgorOjEwOTFBMDAwMDAwMDI5MEM4MDAxMDA4MEYyQzE4NUI2MDAwMDI1MEM2QQorOjEwOTFCMDAwMUY0MDAyODRFNjAxMDBCNDAwMDAyOTBDMUQwMTAwRjhFNAorOjEwOTFDMDAwMjI4MTJGQjQwMDAwMjkwQzAwMDAwMEY4NjI4MTJGOTU0NQorOjEwOTFEMDAwMDAwMDI3MEMxRDAxMDA4MDAyMDAwMEIwMDAwMDAwMDAwQworOjEwOTFFMDAwMDAwMDAwRjg2MjgxMkYzNTAwMDAwMDAwMDA0MDAyODA3RQorOjEwOTFGMDAwMDI0MDY4MzIwMDAwMTYxMzFGMDEwMDgwMDIwMDAwQjAxOAorOjEwOTIwMDAwMDAwMDJCMEMzNDMwMDBFMDE2MjA2RUJDMDAwMEI0MEZDMAorOjEwOTIxMDAwMDAwMDAwODAwMjAwMDBGMDAwMDBENTBGREE1QjAxRUNENgorOjEwOTIyMDAwMDY0MEVERjIwMDAwNEYwQzgwMDAwMDgwRTI4MDJGQjY3NworOjEwOTIzMDAwMDAwMDMwMEMwNDIxMDBFMDA2ODA4MUIyMDAwMDNFMTBFNgorOjEwOTI0MDAwMDAwMDAwMzQwODAwMDBGMjAwMDAwMDAwMDAyMDAwRTBGMAorOjEwOTI1MDAwMDY4MDgxMzIwMDAwMDAwMDAwM0MwMEU4MDY0MDgxMzJCOAorOjEwOTI2MDAwMDAwMDM2MEMyQTExMDBFMEQ2RTA4NkJBMTgwMDM2MDA1RAorOjEwOTI3MDAwQ0EwMDAwRjg3MzBBMDNGOTFEMDAzNjBDMDQwMTAwODBDRgorOjEwOTI4MDAwMDJBNDE3QjgwMDAwMzIwQzlGMDEwMDgwMTgwMDg4QkNBRgorOjEwOTI5MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDRCMTIzNgorOjEwOTJBMDAwMDAwMDAwODAwMjAwMDBGMDAwMDA2NDExMDAwMDAwMzBBNworOjEwOTJCMDAwMDMwMDM4RjIwODAwM0EwQzIzMTkwMUU4NzYyMDgxQjkzRQorOjEwOTJDMDAwM0UwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyMDAwMDNFMEM4MAorOjEwOTJEMDAwMUQxODAwRTAwNkMwODRCMjAwMDAzRTBDODAwMDAwODAzMworOjEwOTJFMDAwMDI4MTJGQjYyQTAwMTYxMzEyMDAwMDJDODJDRDJFQjI1NgorOjEwOTJGMDAwMDAwMDAwMDAwMDAwMDBGODAyODEyRjM0MDAwMDU0MTAyQworOjEwOTMwMDAwMDAwMDAwMkNGOTAxMDBGNDAwMDA0MzBDMDQwMDAwODA3MAorOjEwOTMxMDAwMDIwMDg4QkMwMDAwNDIwQzEyMDEwMDAwMDlDMDIxQjIwQQorOjEwOTMyMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MUQwMDE2MTMzOAorOjEwOTMzMDAwMDQwMTAwODAwMkE0MTdCODAwMDAxNjEzMDQwMTAwODA4NQorOjEwOTM0MDAwMDI4MDgwQkMwMDAwMDAwMDAwMDAwMDc4MDlDNTg1MzA2NAorOjEwOTM1MDAwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDMDAwMDE2MTNBOQorOjEwOTM2MDAwMDYwMTAwODA5MkJBOTdCQzAwMDBGNjAzMTIwMTAwNjg2MworOjEwOTM3MDAwMDJDNTg1QjAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBCNgorOjEwOTM4MDAwMDAwMDAwMDAwMDMwMDA3ODE5MjA2RTNDMDAwMDE2MTMyOQorOjEwOTM5MDAwMDQwMTAwODBFMkE1ODJCQzAwMDAxNjEzODAwMDAwODA1QQorOjEwOTNBMDAwQTI4MDJGQjYwMDAwMTYxMzA0MDEwMDgwMDIwMDg4QkNDMgorOjEwOTNCMDAwMDAwMDE2MTMwNDAxMDA4MDAyODA4MEJDMDAwMDE2MTMxOAorOjEwOTNDMDAwMTIwMDAwNTBGMkMxMzhCNDAwMDAwMDAwQzAwMTAxMzhBMgorOjEwOTNEMDAwMDhDMDZFMzIwMDAwNTMwQzA0MDIwMUVDMTZDMDZFQkNEMworOjEwOTNFMDAwMDBDMDE2MTMxMjAwMDA0MEEyOEQzOUIyMDAwMDU0MENDOAorOjEwOTNGMDAwQzkwMTAwMTQwODAwMDA5MjAwMDAwMDAwNDUzMDAwRTBBMAorOjEwOTQwMDAwMDYwMDAwMzIwMDAwNjAwQzI4MDAwMDA4RTgwMTAwQjRFQgorOjEwOTQxMDAwMDAwMDVEMEM4MDAxMDA4MEYyQzE4NUI2MDAwMDU5MEM4RgorOjEwOTQyMDAwMUY0MDAyODRFNjAxMDBCNDAwMDA1RDBDMUQwMTAwRjgzRAorOjEwOTQzMDAwMjI4MTJGQjQwMDAwNUQwQzAwMDAwMEY4NjI4MTJGOTU5RQorOjEwOTQ0MDAwMDAwMDVCMEMxRDAxMDA4MDAyMDAwMEIwMDAwMDAwMDA2NQorOjEwOTQ1MDAwMDAwMDAwRjg2MjgxMkYzNTAwMDAwMDAwMDA0MDAyODAwQgorOjEwOTQ2MDAwMDI0MDY4MzIwMDAwMTYxMzFGMDEwMDgwMDIwMDAwQjBBNQorOjEwOTQ3MDAwMDAwMDVGMEM4MDAwMDA4MDQyODEyRkI2MDAwMEI0MEYxNgorOjEwOTQ4MDAwMDAwMDAwODAwMjAwMDBGMDAwMDBENTBGREE1QjAxRUM2NAorOjEwOTQ5MDAwMDY0MEVERjIwMDIwMDA4MERGMDAwMDI4MDkwMDM3MzI4RQorOjEwOTRBMDAwMDAwMDY2MTJERTAwMDBEODAyODAwMUYyMDgwMDRCMTJCNAorOjEwOTRCMDAwMDAxODAxRTg3NjIwODFGOTAwMDA2NDExMDAwMDAwMzBGNgorOjEwOTRDMDAwMDMwMDM4RjIwMDAwNjYwQzgwMDEwMDgwMzI4MDJGQjY2NQorOjEwOTREMDAwM0UwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyMDAwMDZCMEM0MQorOjEwOTRFMDAwMjkwODAxRTQwNkMwMkRCMjAwMDA3MDBDMUQwMDAwODBBOAorOjEwOTRGMDAwMDIwMDAwQjAwMDAwNzAwQzgwMDAwMDgwMDI4MTJGQjZENgorOjEwOTUwMDAwMkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyMDAwMDcwMEMxRgorOjEwOTUxMDAwMDAwMDAwRjgwMjgxMkY5NDAwMDA2RDBDMTIwMTAwMDA4MQorOjEwOTUyMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjlFMAorOjEwOTUzMDAwMUQwMDZGMEMwNDAxMDA4MDAyQTQxN0I4MDAwMDZDMEMyMQorOjEwOTU0MDAwMDAwMDAwMTQxODQwODE5QzJCMDAxNjEzMTIwMDAwMkMwMAorOjEwOTU1MDAwODJDRDJFQjIwMDAwNTUxMDAwMDAwMDJDRjkwMTAwRjQ1RAorOjEwOTU2MDAwMDAwMDczMEMwNDAxMDA4MDAyNDA4MUJDMTgwMDM2MDAyQQorOjEwOTU3MDAwMDAwMDAwRjg3MzBBMDNGOTAwMDAxNjEzMTIwMDAwNDhGNworOjEwOTU4MDAwMDJDMDgwQjIwMDAwMDAwMDAwMDAwMDc4MDlDNTg1MzBFQworOjEwOTU5MDAwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDMDAwMDE2MTM2NworOjEwOTVBMDAwMDYwMTAwODA5MkJBOTdCQzAwMDBGNjAzMTIwMTAwNjgyMQorOjEwOTVCMDAwMDJDNTg1QjAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA3NAorOjEwOTVDMDAwMDAwMDE2MTM4MDAwMDA4MDgyODAyRkI2MDAwMDE2MTM2MgorOjEwOTVEMDAwMDQzMTAwODA4MjlCODJCQzAwMDAxNjEzMDIwMDAwODBEMAorOjEwOTVFMDAwMTJBMDgyQkMwMDAwMTYxMzA0MDAwMDgwMDI4MDgyQkMxRQorOjEwOTVGMDAwMjUwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMTAwMDgwMTIyMworOjEwOTYwMDAwMDAwMDAwMTRBOTYwODBEOTAwMDAwMDAwMDAwMDAwRDgwQworOjEwOTYxMDAwMDI4MDAxMzIwMEMwODQwQzE4MDEwMDBDQThDRDNFQjJCQgorOjEwOTYyMDAwMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyMDAwMDM4MTI1OAorOjEwOTYzMDAwMDAwMDAwNUMxRkMwRjVGQTAwMDBGMzAzMDAwMDAwODA4QQorOjEwOTY0MDAwMDIwMDAwOTAwMEMwMDAwMDAwMDAwMEY4QTI4RDJGMzE0MQorOjEwOTY1MDAwMDAwMDAwMDAwMDAwMDBEODAyMDAwMDMyMDAwMDAwMDBGRQorOjEwOTY2MDAwMDAwMDAwMDAwNzgwODEzMjAwMDAwMDAwMDAwODAwMDBCOAorOjEwOTY3MDAwMDcwMDgwMzIwMDAwMDAwMDAwMTAwMDAwMDdDMDg2MzJBMgorOjEwOTY4MDAwMDAwMDAwMDAwMDE4MDAwMDA3QzA4NDMyMDAwMDE2MTMxQworOjEwOTY5MDAwMTIwMDAwNTBGMkMxMzhCNDAwMDA5MDBDODAwMDAwODAyRAorOjEwOTZBMDAwODI4MDJGQjYwMDAwMDAwMDAwMDAwMDY4QTg2MDgwM0NBNworOjEwOTZCMDAwMDAwMDAwMDAwMDAwMDAzQzA4NDA4MDMyMDAwMEQ0MEY5MQorOjEwOTZDMDAwMDAwMDAwMDQwODgwODJGMjAwMDA5MTBDMTIwMTAwMDBFQQorOjEwOTZEMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkyRgorOjEwOTZFMDAwMUQwMDk0MEMwNDAwMDA4MDAyQTQxN0I4MDAwMDE2MTM5QgorOjEwOTZGMDAwODAwMTAwODBBMjgwMkZCNjAwMDA5MDBDMDAwMDAwRjhDRQorOjEwOTcwMDAwQTI4MDJGOTUwMDAwMDAwMDAwMDAwMDAwNjgyMDgwM0EzMQorOjEwOTcxMDAwMDAwMDlBMEMwNDAwMDAyODY4QTA4MkJDMDAwMDE2MTMwOAorOjEwOTcyMDAwMEMwMDAwODAwMjAwMDBCMDAwMDAxNjEzODAwMDAwODBEMgorOjEwOTczMDAwRTI4MDJGQjYwMDAwM0UxMDAwMDAwMDgwMDIwMDAwRjAyMgorOjEwOTc0MDAwMDAwMDg2MEMwMDAwMDBEODAyMDAwMDkyMDAwMDE2MTNGMgorOjEwOTc1MDAwODAwMDAwODBBMjgwMkZCNjAwMDAwMDAwMDAwMDAwRDgyQQorOjEwOTc2MDAwMDI4MDAxMzIwMDIwMDA4MDAwMDAwMDI4MDkwMDM3MzIwQQorOjEwOTc3MDAwMDAwMDYyMTIwMDAwMDAwOEU4MDEwMEY0MTgwMDM2MDA0MgorOjEwOTc4MDAwQ0EwMDAwRjg3MzBBMDNGOTAwMDBBNTBDMDQwMjAxRUNGQQorOjEwOTc5MDAwMTZDMDZFQkMwMDAwMDAwMEMwMDEwMEY4OTI4MDJGMzQ5QgorOjEwOTdBMDAwMDBDMEEzMEMxMjAxMDA0MEEyOEQzOUIyMDAwMDE2MTNCNAorOjEwOTdCMDAwMDAwMDAwODAwMjAwMDA5MDJCMDBBNTBDMTIwMTAwMkM3QworOjEwOTdDMDAwODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAyRgorOjEwOTdEMDAwMDAwMDE2MTMxRjAxMDA4MDAyMDAwMEIwMDAwMEE4MEM1QQorOjEwOTdFMDAwODAwMTAwODA4MjgxMkZCNjAwMDAxNjEzMDQzMTAxODBCMQorOjEwOTdGMDAwMDIwMDZFQkMwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzJCMAorOjEwOTgwMDAwMDAwMEFCMEMxMjAxMDA2MDA4NDAyM0IyMDA4MkI0MENDRgorOjEwOTgxMDAwMDAwMDAwMDhBODhEODA5MjAwMDAxNjEzMTIwMDAwMjQ5QQorOjEwOTgyMDAwMDgwMDIzQjIwMDAwMTYxMzEyMDAwMDIwMDhDMDIzQjI2MworOjEwOTgzMDAwMDAwMDE2MTMxMjAwMDAxODA4ODAyM0IyMDBDMEM5MENFMworOjEwOTg0MDAwMTgwMTAwMENBOENEM0VCMjAwMDBBRTBDMTIwMDAwMzg4QQorOjEwOTg1MDAwMDI4MDgxQjIwMDAwMTYxMzEyMDAwMDNDMDIwMDgyQjJBNgorOjEwOTg2MDAwMDAwMDE2MTMxMjAwMDAzMDAyNDA4MkIyMDAwMDE2MTNFRQorOjEwOTg3MDAwMTIwMDAwMzQwMjAwODZCMjIwODAwMDAwMDAwMDAwMDhDMAorOjEwOTg4MDAwQTg4RDgwMzIwMDAwQkMwQzgwMDEwMDgwRjJDMTg1QjYzQQorOjEwOTg5MDAwMDAwMEI4MEMxRjQwMDI4NEU2MDEwMEI0MDAwMEJDMENCQworOjEwOThBMDAwMUQwMTAwRjgyMjgxMkZCNDAwMDBCQzBDMDAwMDAwRjg1QworOjEwOThCMDAwNjI4MTJGOTUwMDAwQkEwQzFEMDEwMDgwMDIwMDAwQjBFQgorOjEwOThDMDAwMDAwMDAwMDAwMDAwMDBGODYyODEyRjM1MDAwMDAwMDA1OQorOjEwOThEMDAwMDA0MDAyODAwMjQwNjgzMjAwMDAxNjEzMUYwMTAwODAyMQorOjEwOThFMDAwMDIwMDAwQjAzMjAwMDAwMDAwMDAwMDEwMDkwMDM2MzIxMworOjEwOThGMDAwMDAwMDgwMTIwMDAwMDAxNDA5MDA4MEQyMDAwMDE2MTMzRQorOjEwOTkwMDAwMTIwMDAwNjgwMkM1ODVCMDAwMDAwMDAwMDAwMDAwNzg2OQorOjEwOTkxMDAwMDlDNTg1MzAwMDAwMTYxMzAyMDEwMDgwODJCQTk3QkM4OQorOjEwOTkyMDAwMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDMDAwMEM0MEMxOAorOjEwOTkzMDAwMzQwMDAwNUMxRkMwRjVCQTAwMDBCNDBGMDAwMDAwODBDNgorOjEwOTk0MDAwMDIwMDAwRjAwMDAwQzYwQzgwMDAwMDgwOTI4MDJGQjY1QworOjEwOTk1MDAwMDAwMDdGMDgwMDMwMDBFMDA2MDAwMDkyMDAwMDdGMDg1MQorOjEwOTk2MDAwMTIwMTAwRTgwMkMwMjFCMjE4MDAwMDAwMDAwMDAwRjg1NworOjEwOTk3MDAwNzMwQTAzMzk3RjA4MzYwMDAwMDAwMEMwMDIwMDM2OTJFNworOjEwOTk4MDAwMDAwMDAwMDA0NTAwMDBEODAyNDAwMDMyMDAwMDAwMDA0NgorOjEwOTk5MDAwNDEwMDAwMDAwNzgwODYzMjAwMDAwMDAwMDAwODAwMDAzRgorOjEwOTlBMDAwMDcwMDgwMzIwMDAwMDAwMDAwMTAwMDAwMDc0MDgyMzJGMworOjEwOTlCMDAwMDAwMDAwMDAwMDE4MDAwMDA3MDA4NjMyMDAwMDE2MTNBNworOjEwOTlDMDAwMTIwMDAwNTBGMkMxMzhCNDAwMDAwMDAwMDAwMDAwNzgxRQorOjEwOTlEMDAwMzg4MDg3MzUwMDAwMTYxMzgwMDAwMDgwNzI4MDg3QjZCQgorOjEwOTlFMDAwMDAwMDAwMDAwMEEwMDFFMDE2MjA2RTNBMDAwMDAwMDAxOAorOjEwOTlGMDAwMDAwMDAwNzgwOUM1ODUzMDAwMDAwMDAwMDBBODAxRTBFMworOjEwOUEwMDAwMTYyMDZFM0MwODAwMDAwMEQyMDEwMDc4RTlFNTgzMzk5OQorOjEwOUExMDAwMTgwMDE2MTMxRjQxMDI4NEU2QTE5N0I5MDAwMEQ5MEM2MworOjEwOUEyMDAwMzY1MTAxRTgxNkUwODNCQzAwMDBEOTBDMUQwMTAwODAwRQorOjEwOUEzMDAwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4NjI4MTJGMzUzNQorOjEwOUE0MDAwMDAwMDE2MTM5RjIwMDFFMDA2NDA4MEIyMDAwMERDMENFRAorOjEwOUE1MDAwODAwMTAwODA4MjgxMkZCNjAwMDAwMDAwMDAzMDAxRTAwQworOjEwOUE2MDAwMDY0MDgwMzIwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzI3MQorOjEwOUE3MDAwMDAwMERGMEMzNDE4MDAwMDA3ODA4MUIyMDAwMEI0MEYzMgorOjEwOUE4MDAwMDAwMDAwODAwMjAwMDBGMDEwMDA0QjEyMDAzMDAwMDBDNworOjEwOUE5MDAwMTdFMDJDRjkwMDEwMDA4MDAwMzgwMDAwMDcwMDM3MzI3MgorOjEwOUFBMDAwMDAwMDY0MTEwMDAwMDAzMDAzMDAzOEYyMDAwMEU0MENGNAorOjEwOUFCMDAwODAwMTAwODAzMjgwMkZCNjNFMDAxNjEzMTIwMDAwMkM2OQorOjEwOUFDMDAwODJDRDJFQjIwMDAwRTkwQzI5MjEwMDAwMDcwMDgyQjJFRAorOjEwOUFEMDAwMDAwMEU3MEMxMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDA5NgorOjEwOUFFMDAwMDAwMDAwRjg3MzBBMDNGOTFEMDBFRjBDMDQwMTAwODA2OAorOjEwOUFGMDAwMDJBNDE3QjgwMDAwRTUwQzAwMDAwMDE0MDgwMDAwOTI1MgorOjEwOUIwMDAwMDAwMEVDMEMxRDMxMDBFMDA2MDAwMEIyMDAwMEVGMEM3QworOjEwOUIxMDAwODAwMTAwODA2MjgxMkZCNjAwMDAxNjEzMDAwMDAwODBEMworOjEwOUIyMDAwMDIwMDAwOTAwMDAwRUYwQzgwMDAwMDgwMDI4MTJGQjY0MAorOjEwOUIzMDAwMkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyMDAwMDAwMDA2NQorOjEwOUI0MDAwMDAwMDAwRjgwMjgxMkYzNDAwMDA1RDEyMDAwMDAwMkM5QworOjEwOUI1MDAwRjkwMTAwRjQwMDAwNTQxMDAwMDAwMEY4QTI4MDJGRjQ3NgorOjEwOUI2MDAwMDAwMEY0MEMwNDAwMDA4MDAyNDA4MUJDMDAwMEY0MENGMgorOjEwOUI3MDAwMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwMDAwMDAwRjgwRgorOjEwOUI4MDAwNzMwQTAzRjkwMDAwRjYwMzEyMDEwMDQ4MDJDMDgwQjIxNAorOjEwOUI5MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEZFMEM4MAorOjEwOUJBMDAwODAwMTAwODBGMkMxODVCNjAwMDBGQTBDMUY0MDAyODREQgorOjEwOUJCMDAwRTYwMTAwQjQwMDAwRkUwQzFEMDEwMEY4MjI4MTJGQjQ2NAorOjEwOUJDMDAwMDAwMEZFMEMwMDAwMDBGODYyODEyRjk1MDAwMEZDMENFNAorOjEwOUJEMDAwMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwMDAwMDAwRjgzRAorOjEwOUJFMDAwNjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwMDI0MDY4MzI5MAorOjEwOUJGMDAwMDAwMDE2MTMxRjAxMDA4MDAyMDAwMEIwMDAwMDAwMERERAorOjEwOUMwMDAwMDQwMDAwODAwMjQwODZCQzAwMDBBQjEyMDA5MDAxMDhGNgorOjEwOUMxMDAwMDkwMDZFRjIwMDAwREYxMjAwMDAwMDgwMDIwMDAwRjA3OAorOjEwOUMyMDAwMDAwMDA3MEQzMzAxMDBEODAyODAwMUIyMDAwMDA3MERDQgorOjEwOUMzMDAwODAwMTAwODBCMjAxNzJCNjAwMDAwNzBEOUZGMDAxODAyNAorOjEwOUM0MDAwODJEQjg3QkMwMDAwMDcwRDlGRjgwMTgwMjIyMTZFQkNEQgorOjEwOUM1MDAwMDAwMDAwMDAwMEU4MDFFMDA2MDBFRTMyMDAwMDAwMDAxNQorOjEwOUM2MDAwMDBGMDAxRTAwNkMwODczMjA4MDAwMDAwMDAxODAxRTg5QgorOjEwOUM3MDAwNzYyMDgxMzkwMDAwMEQwRDgwMDEwMDgwRDI4MDJGQjY0MgorOjEwOUM4MDAwMDAwMDBEMEQwNEIwMDA4MDAyMDA2RUJDMDAwMDAwMDA1QQorOjEwOUM5MDAwQ0QwMDAwRjg3MjgxMkYzNDNEMDAwRDBEMTIwMTAwMkMxMworOjEwOUNBMDAwODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA0QQorOjEwOUNCMDAwMDAwMDFDMEQyNzA5MDFFNDA2QzAyREIyMDBDMDE0MERFMAorOjEwOUNDMDAwMTgwMTAwMENBOENEM0VCMjAwMDAwMDAwMDAwMDAwNzg5MgorOjEwOUNEMDAwMDlDNTg1MzAwMDAwMTYxMzAyMDEwMDgwODJCQTk3QkNDNgorOjEwOUNFMDAwMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDMDAwMDE2MTNGQworOjEwOUNGMDAwMTIwMDAwNjgwMkM1ODVCMDIwODA3RjA4MDAwMDAwMDhCRgorOjEwOUQwMDAwMDg4MDM2OTIyQzAwMDAwMDAwMDAwMDEwMDkwMDM2MzI1NgorOjEwOUQxMDAwMDAwMDgwMTIwMDk4MDExNDA5MDA2RUQyMDAwMDAwMDBCQgorOjEwOUQyMDAwMDA0MDAxRTAwNjQwODgzMjAwMDAwMDAwRDUwODAwMDAzNQorOjEwOUQzMDAwMDc0MDg4MzIwMDAwMDAwMDAwMzAwMDAwMDdDMDJDMzJDRAorOjEwOUQ0MDAwMDA0MDAwODBDQTM5MDAwMDA3MDAzNzMyMDAwMDE2MTNCNworOjEwOUQ1MDAwMTIwMDAwNDgwMkMwODBCMjAwNjAwMDAwMDAwMDAwMDg0RAorOjEwOUQ2MDAwMDg4MDM2MzIwMDAwMjAwRDFEMDAwMDgwMDIwMDAwQjA4NworOjEwOUQ3MDAwMDAwMDIwMEQ4MDAwMDA4MDAyODEyRkI2MkEwMDE2MTNGQgorOjEwOUQ4MDAwMTIwMDAwMkM4MkNEMkVCMjAwMDAwMDAwMDAwMDAwRjg2RQorOjEwOUQ5MDAwMDI4MTJGMzQwMDAwNTUxMDAwMDAwMDJDRjkwMTAwRjQ1RQorOjEwOURBMDAwMDAwMDAwMDAwMDAwMDA3ODA5QzU4NTMwMDAwMDE2MTM4RgorOjEwOURCMDAwMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzMDYwMTAwODBFMQorOjEwOURDMDAwOTJCQTk3QkMwMDAwRjYwMzEyMDEwMDY4MDJDNTg1QjA4NAorOjEwOUREMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDA0OAorOjEwOURFMDAwNTQ1NDAxRkMwMkMwNkUzMjAwMDAwMDAwMDAwMDAwRDg5NAorOjEwOURGMDAwMDI4MDAxMzIwMEMwMkMwRDE4MDEwMDBDQThDRDNFQjIyQgorOjEwOUUwMDAwMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyMDAwMEYzMDNDNAorOjEwOUUxMDAwMTIwMTAwMkM3MkUwMkVCMjAwMDAxNjEzMDAwMDAwODAyOAorOjEwOUUyMDAwMDIwMDAwOTAwMDAwMTYxMzgwMDEwMDgwODI4MTJGQjY4RQorOjEwOUUzMDAwMDAwMDhDMTIwMDIwMDAxODA4MDA2RUYyMDAwMDE2MTNCQgorOjEwOUU0MDAwMUYzMDAwMjgwODAwNkVCMjAwMDAwMDAwMDAwMDAwQTRDRgorOjEwOUU1MDAwMDg4MDgyMzIwMDAwMDAwMDAwMTAwMDZDMDgwMDZFMzJBMgorOjEwOUU2MDAwMDAwMDAwMDAwMDE4MDA0QzA4MDA2RTMyMDAwMDE2MTNCRAorOjEwOUU3MDAwMDQwMDAwODAzMkUxODZCMjAwMDAzMjEwMDAwMDAwODA1MQorOjEwOUU4MDAwMDIwMDAwRjAwMDAwMzYwRDAwNTAwMTNDQTg1QjgwOUNGMQorOjEwOUU5MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDA4NworOjEwOUVBMDAwMDA1MDAxMDBBODFCODAzQTAwMDAwMDAwMDAwMDAwODA2NAorOjEwOUVCMDAwMDgwMDAwMzIwMDAwMDAwMDUxMDAwMEQ4MDIwMDAwMzIwQgorOjEwOUVDMDAwMDAwMDAwMDA0RDAwMDAwMDY3RTA4MzNFMDAwMDAwMDAzRAorOjEwOUVEMDAwMDAwODAwMDAwNzAwODAzMjAwMDAwMDAwMDAxMDAwMDBCMQorOjEwOUVFMDAwMDdDMDg2MzIwMDAwMDAwMDAwMTgwMDAwMDdDMDg0MzI1RQorOjEwOUVGMDAwMDAwMDZEMEQwNDAwMDAyOEQ4QTA4MkJDMDAwMDE2MTNERAorOjEwOUYwMDAwMDkwMTAwODAwMjAwMDBCMDAwMDAwMDAwMDAwMDAwMThGRAorOjEwOUYxMDAwRDhBMDgxM0MwMDAwNTQwRDA0MDAwMDNDRDhFMDgzQkM3NAorOjEwOUYyMDAwMDAwMDE2MTMwNDAxMDA4MDAyODA4MUJDMDAwMDQ1MEQ3MgorOjEwOUYzMDAwMDQwMDAwODA3MjgwMkRCQzAwMDAxNjEzMTIwMDAwNTAzNworOjEwOUY0MDAwMDJDMDM4QjIwMDAwNEQwRDUxMDAwMEQ4MTI4MDJEOUE4OQorOjEwOUY1MDAwMDAwMDE2MTMxMjAwMDA1MEYyQzEzOEI0MTgwMDM2MDA4OQorOjEwOUY2MDAwMDAwMDAwRjg3MzBBMDNGOTAwMDA0QjBEMDQwMDAwODBBNAorOjEwOUY3MDAwNzI4MDJEQkMwMDAwMTYxMzgwMDEwMDgwQTI4MDJGQjZENQorOjEwOUY4MDAwMDAwMDQ2MEQ2NzAwMDBGOEEyODAyRkI1MDAwMDE2MTNGMAorOjEwOUY5MDAwMTIwMDAwRTgwMkMwMjFCMjAwMDAxNjEzMDQwMTAwODA4NAorOjEwOUZBMDAwNzI4MDJEQkMwMDAwMDAwMDUxMDAwMEQ4MDIwMDAwMzI3OQorOjEwOUZCMDAwMDAwMDUyMEQyQTAxMDAwMEQ4MjA4MEJBMDAwMDUxMEQ4NworOjEwOUZDMDAwMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwMDAwMDAwRjg5QworOjEwOUZEMDAwNzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4MDI0MDg0MzIzOAorOjEwOUZFMDAwMUQwMDE2MTMwNDAwMDA4MDAyQTQxN0I4MDAwMDQ2MTBEQworOjEwOUZGMDAwMDA2MDAwNkMwODAwNkVGMjAwMDAzQTBENEQwMDAwMDA5OQorOjEwQTAwMDAwNjdFMDgzOUUwMDAwMTYxMzEyMDAwMDUwRjJDMTM4QjRCRQorOjEwQTAxMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MUQwMDVCMERGQworOjEwQTAyMDAwMDQwMDAwODAwMkE0MTdCODAwMDAxNjEzODAwMTAwODAwRAorOjEwQTAzMDAwQTI4MDJGQjYwMDAwNTUwRDY3MDAwMEY4QTI4MDJGQjU1MgorOjEwQTA0MDAwMDAwMDE2MTMxMjAwMDAwMDA5QzAyMUIyMUQwMDE2MTNGMworOjEwQTA1MDAwMDQwMTAwODAwMkE0MTdCODA4MDAwMDAwMDA0MDAyNzg0NAorOjEwQTA2MDAwMzk5QUZFMzgwMDAwMTYxMzAyMDEwMDgwODJCQTk3QkNBQworOjEwQTA3MDAwMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDMDgwMDE2MTM2MAorOjEwQTA4MDAwMTI0MDAyNjgxMjlBRkVCODAwMDAxNjEzMEIwMDAwODBGRQorOjEwQTA5MDAwMDIwMDAwQjAwMDAwNjQxMTAwMDAwMDMwMDMwMDM4RjIzQworOjEwQTBBMDAwMDAwMDE2MTMxRjAwMDA2Q0Q4RTA4NkJBMDAwMDMyMTBDMgorOjEwQTBCMDAwNTEwMDAwRDgwMjAwMDBGMjAwMDA2NTBEMDAwMDAwM0NENQorOjEwQTBDMDAwMDg0MDgwOTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBGQgorOjEwQTBEMDAwMDAwMDM5MEQwNDAxMDA4MDAyODA4MUJDMDAwMDZCMEQ3RQorOjEwQTBFMDAwODAwMTAwODBBMjgwMkZCNjAwMDA2QTBEMTIwMTAwMDBERQorOjEwQTBGMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjkwNQorOjEwQTEwMDAwMDAwMDAwMDAwMDAwMDBEODAyNDA4NDMyMUQwMDE2MTMzOQorOjEwQTExMDAwMDQwMDAwODAwMkE0MTdCODAwMDA0NjEwMDA2MDAwNkMyNAorOjEwQTEyMDAwMDgwMDZFRjIwMDAwM0EwRDREMDAwMDAwNjdFMDgzOUVDQgorOjEwQTEzMDAwMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2MDAwMDAwMDBFRgorOjEwQTE0MDAwQzAwMTAxMzgwOEMwNkUzMjAwMDAwMDAwNDUzMDAwRTA1OAorOjEwQTE1MDAwMDYwMDAwMzIwMDAwMTYxMzEyMDAwMDUwRjJDMTM4QjQ5RAorOjEwQTE2MDAwMDAwMDc1MEQwNDAyMDFFQzE2QzA2RUJDMDAwMDAwMDA3QQorOjEwQTE3MDAwQzkwMTAwMTQxODQwODEzQTAwQzA3NTBEMTIwMTAwNDA1OQorOjEwQTE4MDAwQTI4RDM5QjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA3QQorOjEwQTE5MDAwMDBDMDAwMDAwMDAwMDBGOEEyOEQyRjMxMDAwMDAwMDA3OAorOjEwQTFBMDAwMDBBODAxMjA5OTIyNkUzQTAwMDAxNjEzMDYwMTAyODBEMQorOjEwQTFCMDAwODIxQjkyQkMwMDAwMTYxMzlGMjAwMUUwOTYyMjZFQkMwOQorOjEwQTFDMDAwMDAwMDdCMEQ4MDAwMDA4MEYyODAyRkI2MDAwMEM3MEZEQQorOjEwQTFEMDAwMDAwMDAwODAwMjAwMDBGMDAwMDA3RjBEMDQwMDAwM0M0MQorOjEwQTFFMDAwRDhFMDgzQkMwMDAwN0UwRDlGMzEwMUUwOTYyMjZFQkM1QQorOjEwQTFGMDAwMDAwMDAwMDAwMDMwMDFFMDA2MDAwMDMyMDAwMDg2MEQ4MworOjEwQTIwMDAwMDA1MDAxRThGNjYwODA5QzA4MDAwMDAwMDA0MDAyNzhFMQorOjEwQTIxMDAwMzk5QUZFMzgwMDAwMTYxMzAyMDEwMDgwODJCQTk3QkNGQQorOjEwQTIyMDAwMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDMDgwMDAwMDBENworOjEwQTIzMDAwMDA0MDAyNjgxMjlBRkUzODAwMDA4NTBEOUYzMTAxRTA0RgorOjEwQTI0MDAwOTYyMjZFQkMwMDAwMDAwMDAwMzAwMUUwMDYwMDAwMzJFMworOjEwQTI1MDAwMDAwMDAwMDAwMDUwMDFFODA2MDAwMDMyMDAwMDAwMDA4RAorOjEwQTI2MDAwMDBBODAxRTAwNjAwOTIzMjE4MDAzNjAwMDAwMDAwRjg1NQorOjEwQTI3MDAwNzMwQTAzRjkxRDAwOEIwRDA0MDAwMDgwMDJBNDE3QjhCNworOjEwQTI4MDAwMDAwMDg3MEQwNDAwMDAxNDE4NDA4MUJDMDAwMDE2MTM2NAorOjEwQTI5MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzODAwMDAwODA4MworOjEwQTJBMDAwNzI4MDJGQjYwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzI0QQorOjEwQTJCMDAwMDAyMDAwODAwMDAwMDAyODA5MDAzNzMyMDAwMDY2MTJFQworOjEwQTJDMDAwMDAwMDAwMDhFODAxMDBGNDAwMDAxNjEzMTIwMDAwNDgyNgorOjEwQTJEMDAwMDJDMDgwQjIwMDAwNjQxMTAwMDAwMDMwMDMwMDM4RjJCOAorOjEwQTJFMDAwMDAwMDkzMEQyMzAxMDAxNDE4NDA4MUJBM0UwMDE2MTM5QworOjEwQTJGMDAwMTIwMDAwMkM4MkNEMkVCMjAwMDAxNjEzODAwMTAwODBDNworOjEwQTMwMDAwQTI4MDJGQjYxODAwMzYwMENBMDAwMEY4NzMwQTAzRjlCRAorOjEwQTMxMDAwMUQwMDE2MTMwNDAwMDA4MDAyQTQxN0I4MDAwMDE2MTNENQorOjEwQTMyMDAwOUYwMDAwMTQxODQwODFCQzAwMDA5NDBEMEIwMTAwODBCOAorOjEwQTMzMDAwMDIwMDAwQjAwMDAwNEIxMjAwMDAwMDgwMDIwMDAwRjA5QworOjEwQTM0MDAwMDAwMDlDMEQyOTMxMDEwQzA5MDA2RUIyMkIwMDdEMDgyNAorOjEwQTM1MDAwMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMDAwMDAwODBFNgorOjEwQTM2MDAwMDIwMDAwOTAwMDAwQkUwRjAwMEMwMjAwMDk4MDZFRjI5NworOjEwQTM3MDAwMDAwMEE1MEQwMDAwMDA4MDAyMDAwMDkwMDAwMDVEMTJBQQorOjEwQTM4MDAwMDAwMDAwODAwMjAwMDBGMDAwMDAwMDAwMDAwMDAwMUMzRgorOjEwQTM5MDAwMDgwMDkwMzIwMDAwQTQwRDA0MDAwMDI4MDk4MDgwQjI1QgorOjEwQTNBMDAwMDAwMDgxMTEwMDAwMDBEODAyMDAwMEQyMDAwMEE0MERCRQorOjEwQTNCMDAwMDQwMDAwODAwMjgwOTJCQzE4MDAzNjAwMDAwMDAwRjgwMworOjEwQTNDMDAwNzMwQTAzRjkwMDAwNjgwNjAwMDAwMDA4MDgwMDAwOTIwNAorOjEwQTNEMDAwMDAwMEE4MEQxRDAxMDA4MDAyMDAwMEIwMDAwMDdEMDhGMworOjEwQTNFMDAwODAwMTAwODA2MjgxMkZCNjAwMDAxNjEzMDAwMDAwODBGQgorOjEwQTNGMDAwMDIwMDAwOTAwMDAwN0QwODgwMDAwMDgwMDI4MTJGQjZERQorOjEwQTQwMDAwMkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyMDAwMDdEMDgwNworOjEwQTQxMDAwMDAwMDAwRjgwMjgxMkY5NDAwMDAxNjEzODAwMTAwODBENAorOjEwQTQyMDAwODI4MTJGQjYwMDAwMTYxMzA0MDAwMDE4MDk0MDgxQjI4MworOjEwQTQzMDAwMDAwMEUzMEYwMDAwMDA4MDAyMDAwMEYwMDAwMEM3MEZFMgorOjEwQTQ0MDAwMDBBODAxMjAwOTAwNkVGMjAwMDAwMDAwMDAzMDAxMEM5RAorOjEwQTQ1MDAwMDkwMDZFMzIwMDAwQkUwRjAwMEMwMjAwMDk4MDZFRjI4RgorOjEwQTQ2MDAwMDAwMDdGMDgwMDAwMDA4MDAyMDAwMDkwMDAwMDRCMTJGNgorOjEwQTQ3MDAwMDAwMDAwODAwMjAwMDBGMDAwMDA1RDEyMDAwMDAwODA3QgorOjEwQTQ4MDAwMDIwMDAwRjAwMDAwNjgwNjAwMDAwMDFDMDgwMDkwOTIyNgorOjEwQTQ5MDAwMDAwMDAwMDA1NDU0MDFGQzAyQzA2RTMyMDAwMDE2MTM4QworOjEwQTRBMDAwODAwMTAwODA4MjgxMkZCNjAwMDAxNjEzMUYwMDAwODBGQgorOjEwQTRCMDAwMDIwMDAwQjAxMDAwMDAwMDAwMDAwMEE4NzgwQjE2Mzg2MQorOjEwQTRDMDAwMDgwMDAwMDAwMDAwMDBBQzc4MEIxNjM4MDAwMDAwMDAwNworOjEwQTREMDAwMDAwMDAwQjBBODAwMkQzNzAwMDQwMTAwMDAwMDAwQjAwQgorOjEwQTRFMDAwQzgwRDhCM0EwMDAwMDAwMDAwNTAwMUI0MDg4MDZFMzJBNQorOjEwQTRGMDAwMDAwMEM3MEQwNDMxMDE5MDA4MDA2RUIyMDIwMDAwMDA5OAorOjEwQTUwMDAwMDAwMDAwQzg4MjhEOEEzNzAwMDAwMDAwMDAwMDAwQzhFQgorOjEwQTUxMDAwQzJBMjJDM0ExODAwQzUwRDg2NDEwMjc4ODgwRDc4QjY4MworOjEwQTUyMDAwMDAwMDE2MTMwNDAwMDA4MEEyRTI4QUJDMDAwMDE2MTM4QgorOjEwQTUzMDAwMDQ0MTAyODBCMjNGNzhCMDAwMDBCRTBEOUYwMTAwQTgyOAorOjEwQTU0MDAwMTg4MDhBQkM5RjAwQkUwRDAwMDAwMEE4MDgwMDM2OTI0QgorOjEwQTU1MDAwMDAwMDAwMDAwMDQwMDIwNEI4M0Y3ODMwMDAwMERBMEQyRgorOjEwQTU2MDAwMDAwMDAwMDREODYyODA5QzAwMDAxNjEzMDIwQzAyODBEOAorOjEwQTU3MDAwQTIxQjg5QkMwMDAwMTYxMzgwMDAwMDgwODI4MDJGQjZDOQorOjEwQTU4MDAwMDIwMDAwMDAwMDAwMDBDODgyOEQ4QTM3MDAwMDAwMDAzMQorOjEwQTU5MDAwMDAwMDAwQzhDMkEyMkMzQTE4MDBEMDBEODY0MTAyNzhGMworOjEwQTVBMDAwODgwRDc4QjYwMDAwMTYxMzA0MDAwMDgwQTJFMjhBQkM3MQorOjEwQTVCMDAwMDAwMDE2MTMwNDQxMDI4MEIyM0Y3OEIwMDAwMEM5MERCQworOjEwQTVDMDAwOUYwMTAwQTgxODgwOEFCQzlGMDBDOTBEMDAwMDAwQTg0OAorOjEwQTVEMDAwMDgwMDM2OTIwMDAwRDMwRDI4NDAwMjA0QjgzRjc4QjAzRQorOjEwQTVFMDAwMDAwMDAwMDBDODAxMDAwNEQ4NjI4MDNDMDAwMDE2MTM3RgorOjEwQTVGMDAwOUYwMDAwODAwMjQwODBCMjAwMDBENzBEMDIwMTAwOTA1MQorOjEwQTYwMDAwMTgyMDg5QkMwMDAwMDAwMDAwMDAwMEI0MDgwMDAwMzJERgorOjEwQTYxMDAwMDAwMEM5MEQ5RjAxMDBBODE4ODA4QUJDOUYwMEM5MERDOQorOjEwQTYyMDAwMDAwMDAwQTgwODAwMzY5MjAwMDBEQTBEMDQwMDAwOTAzNworOjEwQTYzMDAwMTgyMDg5QkEwMDAwMTYxMzlGMDAwMDA0NDg2MjgwQkNFRAorOjEwQTY0MDAwMDAwMDE2MTM5MDAwMDBCNDQ4NjI4QkJBMDMwMDE2MTM4MgorOjEwQTY1MDAwMDQ0MDAyMDAwODFFRkZCODAwMDBFMjBEMDAwMDAwMDBFOAorOjEwQTY2MDAwRDgyMjgwOUEwMDAwMDkwRTA0MDAwMDgwQTJFMjhBQkM3MQorOjEwQTY3MDAwMDIwMDAwMDAwMDAwMDBDODgyOEQ4QTM3MDAwMDAwMDA0MAorOjEwQTY4MDAwMDAwMDAwQzhDMkEyMkMzQTE4MDAwNzBFODY0MDAyNzhDQgorOjEwQTY5MDAwODgwRDc4QjYwMDAwMTYxMzA0NDAwMjA0QjgzRjc4QjA2NQorOjEwQTZBMDAwMDMwMDE2MTMwNDQwMDIwMDA4MUVGRkI4MzgwMDAwMDAyMworOjEwQTZCMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDAwMDAwMTQ3MworOjEwQTZDMDAwMDkwMDgwRDIwMDAwRTgwRDEyMDEwMDYwMDg0MDIzQjJBQQorOjEwQTZEMDAwMDA4MjAwMDAwMDAwMDAwODA4ODAzNjMyMDAwMEYzMDMwQQorOjEwQTZFMDAwMTIwMTAwMkM3MkUwMkVCMjAwMDAxNjEzMDAwMDAwODA1MAorOjEwQTZGMDAwMDIwMDAwOTAwMDAwMTYxMzEyMDAwMDI0MDgwMDIzQjI4QworOjEwQTcwMDAwMDAwMDE2MTMxMjAwMDAyMDA4QzAyM0IyMDAwMDE2MTMyOAorOjEwQTcxMDAwMTIwMDAwMTgwODgwMjNCMjAwMDAwMDAwMDAwMDAwRDhEQQorOjEwQTcyMDAwMDI4MDAxMzIwMEMwRjIwRDE4MDEwMDBDQThDRDNFQjIyQgorOjEwQTczMDAwMDAwMEVDMEQxMjAwMDAzODAyODA4MUIyMDAwMDE2MTNGOAorOjEwQTc0MDAwMTIwMDAwM0MwMjAwODJCMjAwMDAxNjEzMTIwMDAwMzAxQQorOjEwQTc1MDAwMDI0MDgyQjIwMDAwMTYxMzEyMDAwMDM0MDIwMDg2QjJEQQorOjEwQTc2MDAwMjA4MEU2MEQwMDAwMDAwODA4ODAzNjkyMDAwMDAwMDBGRQorOjEwQTc3MDAwMDAwMDAwRDgwMjAwMDAzMjAwMDAwMDAwMDAzODAyMDA5MworOjEwQTc4MDAwQjgxQjgwM0EwMDAwMDAwMDY0MzAwMUUwMTYyMDZFM0FFOQorOjEwQTc5MDAwMDAwMDAwMDAwMDAwMDAwMDA3NDA4MDMyMDAwMDAwMDBDMAorOjEwQTdBMDAwMDAwODAwMDAwNzAwODAzMjAwMDAwMDAwMDAxMDAwMDBEOAorOjEwQTdCMDAwMDc0MDgyMzIwMDAwMDAwMDAwMTgwMDAwMDcwMDg2MzJDNworOjEwQTdDMDAwMDAwMDE2MTMxMjAwMDA1MEYyQzEzOEI0MDAwMDAwMDA1RgorOjEwQTdEMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwMDAxODAwMDBENAorOjEwQTdFMDAwMDc4MDgxMzIwMDAwMDAwMDAwMjAwMDAwMDcwMDgyMzI1NAorOjEwQTdGMDAwMTAwMDAwMDAwMDMwMDAwMDE3RTAyQzM5MDAwMDAwMDBCRAorOjEwQTgwMDAwMDAzODAwMDBGNzAxMEIzNDAwMDAwMTBFODAwMTAwODBDOQorOjEwQTgxMDAwMzI4MDg3QjYwMDAwMDAwMDAwMzgwMDAwQjcwMTcwMzRCNQorOjEwQTgyMDAwMDAwMDAwMDAwMDAwMDAwOEU4MDEwMDM0MDAwMDEzMEVFMgorOjEwQTgzMDAwMDIwQzAyODBBMjFCODlCQzE4MDAzNjAwMDAwMDAwRjg0MAorOjEwQTg0MDAwNzMwQTAzRjkwMDAwNjQxMTAwMDAwMDMwMDMwMDM4RjJCRAorOjEwQTg1MDAwMDAwMDE2MTMxMjAwMDA0ODAyQzA4MEIyMTgwMDM2MDAzMworOjEwQTg2MDAwMDAwMDAwRjg3MzBBMDNGOTAwMDBEQzBEOUYwMTAwQTg0NgorOjEwQTg3MDAwMTg4MDhBQkM5RjAwREMwRDAwMDAwMEE4MDgwMDM2OTJGQQorOjEwQTg4MDAwMjgwMDBDMEUwNDAxMDA4MDgyQ0Q4MUJDMDAwMDAwMDA3NQorOjEwQTg5MDAwMDAyMDAxNzgwOTAwNkUzMjAwMDAxNjEzMDQwMTAwODBDOAorOjEwQThBMDAwNDJBMjk3QkMwMDAwMEUwRTgwMDEwMDgwMzI4MDJGQjZCRAorOjEwQThCMDAwM0UwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyMDAwMDEwMEVBNgorOjEwQThDMDAwMUQwMTAwODAwMjAwMDBCMDAwMDA3RDA4MDAwMDAwRjhCQgorOjEwQThEMDAwNjI4MTJGOTUwMDAwN0QwODgwMDAwMDgwMDI4MTJGQjZFNAorOjEwQThFMDAwMkEwMDE2MTMxMjAwMDAyQzgyQ0QyRUIyMDAwMDdEMDgyMworOjEwQThGMDAwMDAwMDAwRjgwMjgxMkY5NDAwMDAwMDAwMDAzODAwMDBFMgorOjEwQTkwMDAwQzcwMTcwMzQwMDAwNjQxMTAwMDAwMDMwMDMwMDM4RjIwOQorOjEwQTkxMDAwMDgwMDE3MEUyMzE5MDFFODc2MjA4MUI5M0UwMDE2MTNBRQorOjEwQTkyMDAwMTIwMDAwMkM4MkNEMkVCMjAwMDAxOTBFMUQwMTAwODBGNQorOjEwQTkzMDAwMDIwMDAwQjAwMDAwMUMwRTAwMDAwMEY4NjI4MTJGOTU5QworOjEwQTk0MDAwMDAwMDFDMEU4MDAwMDA4MDAyODEyRkI2MkEwMDE2MTMyMgorOjEwQTk1MDAwMTIwMDAwMkM4MkNEMkVCMjAwMDAwMDAwMDAwMDAwRjg5MgorOjEwQTk2MDAwMDI4MTJGMzQwMDAwMTYxMzgwMDAwMDgwQTI4MDJGQjZEMQorOjEwQTk3MDAwMDAwMDU0MTAwMDAwMDAyQ0Y5MDEwMEY0MDAwMDIwMEUyQgorOjEwQTk4MDAwMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwMDAwMDAwRjhGMQorOjEwQTk5MDAwNzMwQTAzRjkwMDAwMTYxMzEyMDAwMDQ4MDJDMDgwQjJDNworOjEwQTlBMDAwMDAwMEY2MDMwMDAwMDBGOEEyODAyRjk0MDAwMDAwMDBEMQorOjEwQTlCMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwMDAzMDAwMjhCMgorOjEwQTlDMDAwMDgwMDZFMzIwMDAwMDAwMDU0NTQwMUZDMDJDMDZFMzJEOAorOjEwQTlEMDAwMDBDMDJFMEUxODAxMDAwQ0E4Q0QzRUIyMjA4MDAwMDA1MQorOjEwQTlFMDAwMDAwMDAwMjgwOTgwMzYzMjAwMDA4MTExMDAwMDAwRDhFNAorOjEwQTlGMDAwMDIwMDAwRDIwMDAwMkIwRTA0MDAwMDgwMDI4MDkyQkNGNgorOjEwQUEwMDAwMTgwMDAwMDAwMDAwMDBGODczMEEwMzM5MkMwRTM2MDAwRAorOjEwQUExMDAwMDAwMDAwQzAwMjAwMzY5MjE4MDAzNjAwMDAwMDAwRjg2NgorOjEwQUEyMDAwNzM4QTAzRjkwMDAwMDAwMDAwMDAwMEQ4MDI4MDAxMzJBMAorOjEwQUEzMDAwMDBDMDJCMEUxODAwMDAwQ0E4Q0QzRUIyMDAyMDAwODRGMAorOjEwQUE0MDAwMDAwMDAwMjgwOTAwMzczMjAwMDA2MjEyMDAwMDAwMDhGMAorOjEwQUE1MDAwRTgwMTAwRjQwMDAwN0QwODAwMDAwMDgwMDIwMDAwOTA4MgorOjEwQUE2MDAwMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyMDAwMDAwMDA1OQorOjEwQUE3MDAwNTQ1NDAxRkMwMkMwNkUzMjAwQzAzNzBFMTgwMTAwMENBNQorOjEwQUE4MDAwQThDRDNFQjIyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzJDOQorOjEwQUE5MDAwMDAwMEVGMDMxMjAxMDAyQzcyRTAyRUIyMDAwMDE2MTMyQQorOjEwQUFBMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBGMzExMDAwMDAwMjg2OAorOjEwQUFCMDAwMDkwMDAyRjIwMDAwM0YwRTAwMDAwMDVDMDgwMDAwOTI1NgorOjEwQUFDMDAwMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyMDAwMDAwMDBGOQorOjEwQUFEMDAwNTQ1NDAxRkMwMkMwNkUzMjAwQzAzRjBFMTgwMTAwMEMzRAorOjEwQUFFMDAwQThDRDNFQjIyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzI2OQorOjEwQUFGMDAwMDAwMDM4MTIwMDAwMDA1QzFGQzBGNUZBMDAwMEYzMDNFQworOjEwQUIwMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwMDAzMDAwMjhEQgorOjEwQUIxMDAwMDgwMDZFMzIwMDIwMDA4NDAwMDAwMDI4MDkwMDM3MzI0RgorOjEwQUIyMDAwMDAwMDYyMTIwMDAwMDAwOEU4MDEwMEY0MDAwMDQ0MEU3QQorOjEwQUIzMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwMDhGQgorOjEwQUI0MDAwMDgwMDAwMzIwMDAwNEEwRTA0MDAwMDgwMDJDMDg1QjJGNgorOjEwQUI1MDAwMDAwMDRBMEU4MDAwMDA4MEYyQzE4NUI2MDAwMDQ5MEU1OAorOjEwQUI2MDAwMUM0MTAyODAwNkMwODVCMjAwMDAwMDAwMDAwMDAwNjhBMQorOjEwQUI3MDAwMDJDNTg1MzAwMDAwMDAwMDAwMDAwMDcwMUYwMEY3M0E5OQorOjEwQUI4MDAwMDAwMDAwMDAwMDAwMDBGODIyODEyRjM0MDAwMEQwMEVFOQorOjEwQUI5MDAwODAwMTAwODBBMjgwMkZCNjE4MDAwMDAwMDAwMDAwRjg5RAorOjEwQUJBMDAwNzMwQTAzMzlEMDBFMzYwMENBMDAwMEMwMDIwMDM2OTI4NAorOjEwQUJCMDAwMDAwMDk5MEU4MDAxMDA4MDgyODEyRkI2MDAwMEExMEU1NgorOjEwQUJDMDAwMUYyMDAxMDgwOTAwNkVCMjAwMDA5OTBFMDQzMDAxMDgzMAorOjEwQUJEMDAwODk5QjkwQkMwMDAwNTYwRTA0MzEwMTgwMDIwMDZFQkNCRgorOjEwQUJFMDAwMDAwMDMyMTAwMDAwMDA4MDAyMDAwMEYwMDAwMDU0MEU0RgorOjEwQUJGMDAwMDA1MDAxNDgwODgwNkU5MjAwMDAxNjEzMDAwMDAwODA4QgorOjEwQUMwMDAwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMDA0Mjg2MTgwM0M2OQorOjEwQUMxMDAwMDAwMDZCMEUwMDAwMDAwMDI4MjE4MDlBMDAwMDE2MTMyRgorOjEwQUMyMDAwOUYwMDAwODAwMjgwOTBCMjAwMDAzMjEwMDAzMDAxNDg4NgorOjEwQUMzMDAwMDgwMDZFRjIwMDAwNUEwRTAwNTAwMTA0QTg1QjgwOUNEMAorOjEwQUM0MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDBDOQorOjEwQUM1MDAwMDA1MDAxMDBBODFCODAzQTAwMDA2ODBFMDcwMDAwNDg2MQorOjEwQUM2MDAwMThBMDg0QkMwODAwMDAwMDAwNDAwMjAwMTg5QUZFMzhCQQorOjEwQUM3MDAwMDAwMDE2MTMwMjAxMDA4MDgyM0E4MEJDMDAwMDE2MTMwNworOjEwQUM4MDAwMDYwMTAwODA5MjNBODBCQzAwMDAwMDAwMDAwMDAwNjhDRAorOjEwQUM5MDAwMDIwMDgwMzIwMDAwMzIxMDAwMDAwMDgwMDIwMDAwRjA0QworOjEwQUNBMDAwMDAwMDYzMEUwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNGOAorOjEwQUNCMDAwMDAwMDAwODAwMjAwMDA5MDAwMDA2ODBFMDcwMDAwNDhCRAorOjEwQUNDMDAwMThBMDg0QkMwODAwMDAwMDAwNDAwMjAwMTg5QUZFMzg1QQorOjEwQUNEMDAwMDAwMDE2MTMwMjAxMDA4MDgyM0E4MEJDMDAwMDE2MTNBNworOjEwQUNFMDAwMDYwMTAwODA5MjNBODBCQzAwMDA2MDBFMDAwMDAwNjhGRgorOjEwQUNGMDAwMDIwMDgwOTIwMDAwNkIwRTA0MDAwMDQ4MThBMDg0QkE4NQorOjEwQUQwMDAwMDAwMDE2MTM5RjAwMDAwNDI4NjE4MEJDMDAwMDAwMDBCMgorOjEwQUQxMDAwMDAwMDAwMDAyODIxODAzQTAwMDAwMDAwMDA1NDAxRkNERgorOjEwQUQyMDAwMDJDMDZFMzIwMDAwNzQwRTEyMDEwMDYwMDg0MDIzQjJBRgorOjEwQUQzMDAwMDA4MjAwMDBENjAxMDAwODA4ODAzNjMyMDMwMDE2MTM5NgorOjEwQUQ0MDAwMDQ0MDAyMDAzODFBRkZCODAzMDAwMDAwMDAwMDAwNzgzOQorOjEwQUQ1MDAwMDk2MDgwMzkxODAwMDAwMEQyNDEwMjhDRTZBMTk3MzlDMQorOjEwQUQ2MDAwMDAwMDAwMDAwMDUwMDFFODA2ODA4NDMyMjkwMEYzMDM0RgorOjEwQUQ3MDAwMTIwMTAwMkM4MkNEMkVCMjAwMDAxNjEzMDAwMDAwODBCQworOjEwQUQ4MDAwMDIwMDAwOTAwMDAwMTYxMzEyMDAwMDI0MDgwMDIzQjJGNQorOjEwQUQ5MDAwMDAwMDE2MTMxMjAwMDAyMDA4QzAyM0IyMDAwMDE2MTM5MgorOjEwQURBMDAwMTIwMDAwMTgwODgwMjNCMjAwMDAwMDAwMDAwMDAwRDg0NAorOjEwQURCMDAwMDI4MDAxMzIwMEMwN0YwRTE4MDEwMDBDQThDRDNFQjIwNworOjEwQURDMDAwMjA4MDAwMDBENjAxMDAwODA4ODAzNjMyMDAwMDc5MEU4RAorOjEwQUREMDAwMTIwMDAwMzgwMjgwODFCMjAwMDAxNjEzMTIwMDAwM0NGRAorOjEwQURFMDAwMDIwMDgyQjIwMDAwMTYxMzEyMDAwMDMwMDI0MDgyQjI0QworOjEwQURGMDAwMDAwMDZFMEUxMjAxMDAzNDAyMDA4NkIyMDAwMDE2MTMyRAorOjEwQUUwMDAwMDAwMDAwODAwMjAwMDA5MDA4MDAwMDAwMDA0MDAyNUM4QQorOjEwQUUxMDAwMTg5QUZFMzgwMDAwMDAwMDAwMDAwMDQ4MDgwMDAwMzJDOAorOjEwQUUyMDAwMDAwMDAwMDAwMDAwMDBEODAyMDAwMDMyMDAwMDAwMDAxNgorOjEwQUUzMDAwMDAwMDAwMDAwNzQwODAzMjAwMDAwMDAwMDAwODAwMDAxMQorOjEwQUU0MDAwMDcwMDgwMzIwMDAwMDAwMDAwMTAwMDAwMDc0MDgyMzIzRQorOjEwQUU1MDAwMDAwMDAwMDAwMDE4MDAwMDA3MDA4NjMyMDAwMDE2MTNGMgorOjEwQUU2MDAwMTIwMDAwNTBGMkMxMzhCNDAwMDAwMDAwRDYwMTAwRDgzMgorOjEwQUU3MDAwMDI4MDAxMzIwMDAwMDAwMDAwMTgwMDAwMDc4MDgxMzJDQgorOjEwQUU4MDAwMDAwMDAwMDAwMDIwMDAwMDA3MDA4MjMyMTAwMDAwMDBENworOjEwQUU5MDAwMDAzMDAwMDAxN0UwMkMzOTAwMDA4RTBFODAwMDAwODA4QQorOjEwQUVBMDAwMzI4MDg3QjYwMDEwMDA4MDAwMzgwMDAwMDcwMDM3MzI3QgorOjEwQUVCMDAwMDAwMDhGMEUwMDAwMDA4MDAyMDAwMDkwMDAxMDAwODg0QgorOjEwQUVDMDAwMDAzODAwMDAwNzAwMzczMjE4MDAzNjAwMDAwMDAwRjg5NAorOjEwQUVEMDAwNzMwQTAzRjkwMDAwMDAwMDAwMDAwMDY4MDJDMDg1MzIxOAorOjEwQUVFMDAwMDAwMDE2MTMwMjAxMDA4MDgyRkE4NUJDMDAwMDE2MTNEMAorOjEwQUVGMDAwMDYwMTAwODA5MkZBODVCQzAwMDAwMDAwMDAwMDAwMDhGNgorOjEwQUYwMDAwRTgwMTAwMzQwMDAwMTYxMzEyMDAwMDQ4MDJDMDgwQjJBRAorOjEwQUYxMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDMyMTAzMAorOjEwQUYyMDAwMDAwMDAwODAwMjAwMDBGMDAwMDA2QjBFMDAwMDAwODBCNgorOjEwQUYzMDAwMDIwMDAwOTAwMDAwQTEwRTAwMDAwMDgwMDIwMDAwOTBCRQorOjEwQUY0MDAwMDAwMDMyMTAwMDAwMDA4MDAyMDAwMEYwMDAwMDlDMEVBMworOjEwQUY1MDAwMDAzODAyMDBCODFCODA5QzAwMDBBMTBFMDAwMDAwODA5OQorOjEwQUY2MDAwMDIwMDAwOTAwNTAwMDAwMDAwMDAwMDY4MDJBMEZFMzgwQQorOjEwQUY3MDAwMDUwMDAwMDAwMDAwMDA3ODA5QTBGRTM4MDAwMDE2MTM0QworOjEwQUY4MDAwMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzMDYwMTAwODBGRgorOjEwQUY5MDAwOTJCQTk3QkMwMDAwOTkwRTAwNDAwMjgwMDI0MDY4OTI2RAorOjEwQUZBMDAwMDAwMDAwMDBDQTAxMDBEODAyMDAwMDMyMDAwMEE1MEUxNworOjEwQUZCMDAwMDRCODAxODAwMjAwNkVCQzAwMDAxNjEzOUZCODAxNzgyRgorOjEwQUZDMDAwODkxQkVFQkMwMDAwMDAwMDAwQjgwMUUwODYxQkVFM0NDRgorOjEwQUZEMDAwNEMwMDAwMDAwMDAwMDAwMDA3MDAzNjMyMDAwMDAwMDBCNgorOjEwQUZFMDAwMDAwMDAwNzhBOTAwMkQzN0I0MDQwMTAwMDAwODAwMDAxQgorOjEwQUZGMDAwQzc4RDk3M0EwMDAwMDAwMDAwMDAwMDc4OTlDMDJDMzdGOAorOjEwQjAwMDAwQjQwMDAwMDAwMDAwMDA3ODg5OEQ5NzNBMDAwMDE2MTMwNAorOjEwQjAxMDAwMDIxMDAwMDA4N0JGOTdCQTAwMDAwMDAwMDAxODAwMDA2RgorOjEwQjAyMDAwMDc0MEZFMzIwMDAwMTYxMzEyMDAwMDQ4RjJDMTM4QjQ4NworOjEwQjAzMDAwMDAwMEFEMEVCNjAwMDA4MDAyMDAwMEIwMDAyMDE2MTMyNAorOjEwQjA0MDAwMTIwMDAwNjRBMkNEMkNCMjAwMDAwMDAwQTYwMDAwODAxNworOjEwQjA1MDAwMDIwMDAwMzAwMDAwQjIwRTgwMDEwMDgwQTI4MDJGQjZGNgorOjEwQjA2MDAwMTgwMDM2MDBDQTAwMDBGODczMEEwM0Y5MDAwMDdEMDhEMgorOjEwQjA3MDAwMDA1NDAxRkMwMkMwNkU5MjAwMDAxNjEzODAwMTAwODA5MworOjEwQjA4MDAwNjI4MTJGQjYwMDAwMTYxMzgwMDEwMDgwODI4MTJGQjZFNgorOjEwQjA5MDAwMDAwMDE2MTMxRjAwMDA4MDAyMDAwMEIwMDAwMDAwMDAzNgorOjEwQjBBMDAwMDA1NDAxRkMwMkMwNkUzMjAwMDBCQjBFMTIwMTAwNjBCMQorOjEwQjBCMDAwMDg0MDIzQjIwMDgyMDAwMDAwMDAwMDA4MDg4MDM2MzJGOQorOjEwQjBDMDAwMjkwMEYzMDMxMjAxMDAyQzgyQ0QyRUIyMDAwMDE2MTNDQQorOjEwQjBEMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMTIwMDAwMjRGRgorOjEwQjBFMDAwMDgwMDIzQjIwMDAwMTYxMzEyMDAwMDIwMDhDMDIzQjI4QgorOjEwQjBGMDAwMDAwMDE2MTMxMjAwMDAxODA4ODAyM0IyMDAwMDAwMDBBMAorOjEwQjEwMDAwMDAwMDAwRDgwMjgwMDEzMjAwQzBDNjBFMTgwMTAwMENGOQorOjEwQjExMDAwQThDRDNFQjIyMDgwMDAwMDAwMDAwMDA4MDg4MDM2MzIzMgorOjEwQjEyMDAwMDAwMEMwMEUxMjAwMDAzODAyODA4MUIyMDAwMDE2MTMyOQorOjEwQjEzMDAwMTIwMDAwM0MwMjAwODJCMjAwMDAxNjEzMTIwMDAwMzAyMAorOjEwQjE0MDAwMDI0MDgyQjIwMDAwQjkwRTEyMDEwMDM0MDIwMDg2QjI0MQorOjEwQjE1MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDMyMTA3MgorOjEwQjE2MDAwMDAwMDAwNDgwODAwMDBGMjA4MDBDOTBFMDA0MDAyNUMyMAorOjEwQjE3MDAwMTg5QUZFOTgwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA0QworOjEwQjE4MDAwMDAwMDAwMDAwMDUwMDEwMEE4MUI4MDNBMDAwMDgxMEU2MgorOjEwQjE5MDAwMDAwMDAwNDgwODAwMDA5MjAwMDAxNjEzMUYwMTAwODAwNAorOjEwQjFBMDAwMDIwMDAwQjAwMDAwMDAwMDAwNTQwMUZDMDJDMDZFMzIzQQorOjEwQjFCMDAwMDAwMEYzMTEwMDAwMDAyODA5ODAwMkYyMDAwMEFEMEUyQgorOjEwQjFDMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBGMzExMDAwMDAwMjg0MQorOjEwQjFEMDAwMDkwMDAyRjIwMDAwRDMwRTlBMDEwMEY4NjI4MTJGQjQzOAorOjEwQjFFMDAwMTAyNDAwMDAwMDAwMDBGOEEyOEQyRjMxMDAwMDAwMDBBNAorOjEwQjFGMDAwMDBENjAxRUMwNkMwNkUzNDJFMDA3RDA4MTIwMTAwMkMzMgorOjEwQjIwMDAwODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBENAorOjEwQjIxMDAwMDAwMDE2MTMwNEE5MDE4MDAyMDA2RUIyMDAwMERFMEVDOQorOjEwQjIyMDAwODAwMTAwODBGMkMxODVCNjAwMDBEQTBFMUY0MDAyODQ2MgorOjEwQjIzMDAwRTYwMTAwQjQwMDAwREUwRTFEMDEwMEY4MjI4MTJGQjRFQgorOjEwQjI0MDAwMDAwMERFMEUwMDAwMDBGODYyODEyRjk1MDAwMERDMEU4OQorOjEwQjI1MDAwMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwMDAwMDAwRjhBNgorOjEwQjI2MDAwNjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwMDI0MDY4MzJGOQorOjEwQjI3MDAwMDAwMDE2MTMxRjAxMDA4MDAyMDAwMEIwMDAwMEUwMEU2NQorOjEwQjI4MDAwMDQ5ODAxNjQ4ODFCODdCQzAwMDBBQjEyMDA5MDAxMDg4MQorOjEwQjI5MDAwMDkwMDZFRjIwMDAwREYxMjAwMDAwMDgwMDIwMDAwRjBFMgorOjEwQjJBMDAwMDAwMDAwMDAwMDAwMDA3ODA5QzU4NTMwMDAwMDE2MTM3QQorOjEwQjJCMDAwMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzMDYwMTAwODBDQworOjEwQjJDMDAwOTJCQTk3QkMwMDAwMTYxMzEyMDAwMDY4MDJDNTg1QjA0MAorOjEwQjJEMDAwMDAwMDAwMDAwMDAwMDBGOEQyODAyRjM1MDAwMDdGMDgzOQorOjEwQjJFMDAwMzcwMDAwRjhEMjgxMkZCNDAwMDAwMDAwMDAwMDAwRjgwMQorOjEwQjJGMDAwNzI4MTJGMzQzRDAwN0YwODEyMDEwMDJDODJDRDJFQjJDNgorOjEwQjMwMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEYyMEUwMgorOjEwQjMxMDAwODAwMTAwODBGMkMxODVCNjAwMDBFRTBFMUY0MDAyODQ1RAorOjEwQjMyMDAwRTYwMTAwQjQwMDAwRjIwRTFEMDEwMEY4MjI4MTJGQjRFNgorOjEwQjMzMDAwMDAwMEYyMEUwMDAwMDBGODYyODEyRjk1MDAwMEYwMEU3MAorOjEwQjM0MDAwMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwMDAwMDAwRjhCNQorOjEwQjM1MDAwNjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwMDI0MDY4MzIwOAorOjEwQjM2MDAwMDAwMDE2MTMxRjAxMDA4MDAyMDAwMEIwMDAwMDAwMDA2MgorOjEwQjM3MDAwMDBENDAxRUMxNkMwNkUzQTAwMDAwMDAwMDAwMDAwNzgxNgorOjEwQjM4MDAwMDlDNTg1MzAwMDAwMTYxMzAyMDEwMDgwODJCQTk3QkNGRgorOjEwQjM5MDAwMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDMDAwMDE2MTMzNQorOjEwQjNBMDAwMTIwMDAwNjgwMkM1ODVCMDAwMDA3RjA4MDRCMDAwODA2QworOjEwQjNCMDAwMDIwMDZFQkMzNzAwN0YwODEyMDEwMDJDODJDRDJFQjIzNQorOjEwQjNDMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDAyMEYzMQorOjEwQjNEMDAwODAwMTAwODBGMkMxODVCNjAwMDBGRTBFMUY0MDAyODQ4RAorOjEwQjNFMDAwRTYwMTAwQjQwMDAwMDIwRjFEMDEwMEY4MjI4MTJGQjQxNQorOjEwQjNGMDAwMDAwMDAyMEYwMDAwMDBGODYyODEyRjk1MDAwMDAwMEY4RQorOjEwQjQwMDAwMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwMDAwMDAwRjhGNAorOjEwQjQxMDAwNjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwMDI0MDY4MzI0NworOjEwQjQyMDAwMDAwMDE2MTMxRjAxMDA4MDAyMDAwMEIwMDAwMDBGMEY4MworOjEwQjQzMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwQjBGODAwMTAwODBERgorOjEwQjQ0MDAwRjJDMTg1QjYwMDAwMDcwRjFGNDAwMjg0RTYwMTAwQjQ3OAorOjEwQjQ1MDAwMDAwMDBCMEYxRDAxMDBGODIyODEyRkI0MDAwMDBCMEYxQworOjEwQjQ2MDAwMDAwMDAwRjg2MjgxMkY5NTAwMDAwOTBGMUQwMTAwODA4NworOjEwQjQ3MDAwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4NjI4MTJGMzVEQgorOjEwQjQ4MDAwMDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyMDAwMDE2MTNGNQorOjEwQjQ5MDAwMUYwMTAwODAwMjAwMDBCMDAwMDAwRjBGMzcwMDAwRjgwRAorOjEwQjRBMDAwRDI4MTJGQjQwMDAwMDAwMDAwMDAwMEY4NzI4MTJGMzQxOAorOjEwQjRCMDAwM0QwMDBGMEYxMjAxMDAyQzgyQ0QyRUIyMDAwMDE2MTM5QQorOjEwQjRDMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwMDBENDAxRUNBOQorOjEwQjREMDAwMDYwMDAwMzIwMDAwMDAwMDAwMDAwMDc4MDlDNTg1MzAzOQorOjEwQjRFMDAwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDMDAwMDE2MTNGOAorOjEwQjRGMDAwMDYwMTAwODA5MkJBOTdCQzAwMDA3RjA4MTIwMTAwNjgyNAorOjEwQjUwMDAwMDJDNTg1QjAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAwNAorOjEwQjUxMDAwMDAwMDdEMDg4MDAxMDA4MEYyODEyRkI2MDAwMDdEMDhDOAorOjEwQjUyMDAwODAwMDAwODBFMjgxMkZCNjAwMDAxOTBGODAwMDAwODBBQgorOjEwQjUzMDAwMDI4MTJGQjYwMDAwMTYxMzFEMDEwMDgwMDIwMDAwQjAyQQorOjEwQjU0MDAwMDAwMDE2MTMwNDU4MDE4MDAyQzA2RUJDMDAwMDdEMDg4NAorOjEwQjU1MDAwMDg1OTAxRUMwNkZCNkVCQzAwMDAwMDAwMDAwMDAwRDg5QQorOjEwQjU2MDAwMDI4MDAxMzIwMDAwMDAwMDU0NTQwMUZDMDJDMDZFMzIxRgorOjEwQjU3MDAwMDBDMDIyMEYxODAxMDAwQ0E4Q0QzRUIyMDAwMDAwMDA1MAorOjEwQjU4MDAwMDA1ODAxRUMwNkZCNkUzQTIwODAwMDAwMDAwMDAwMDgyNQorOjEwQjU5MDAwMDg4MDM2MzIwMDAwRUYwMzEyMDEwMDJDNzJFMDJFQjI1OAorOjEwQjVBMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDVEMTJGMQorOjEwQjVCMDAwMDAwMDAwRjhFMjgxMkZGNDAwMDAyNTBGMDYwMzAxODA0RgorOjEwQjVDMDAwMTJDMDZFQkMxOTAwNjgwNjAwMDAwMDFDMDgwMDM2OTIwQworOjEwQjVEMDAwMUEwMDY4MDYwMDAwMDAxQzA4MDAzNjkyMDAwMDE2MTNDRQorOjEwQjVFMDAwODAwMTAwODBGMjgxMkZCNjAwMDAxNjEzODAwMTAwODBEOAorOjEwQjVGMDAwRTI4MTJGQjYwMDAwMTYxMzA0NTUwMTgwQjJEQjJGQkM4OAorOjEwQjYwMDAwMDBDMDAwMDAwMDAwMDBGOEEyOEQyRjMxMDAwMDAwMDBGMworOjEwQjYxMDAwMDAwMDAwRDgwMjgwMDEzMjAwMjAwMEMwMDAwMDAwMjg5NQorOjEwQjYyMDAwMDkwMDM3MzIwMDAwMDAwMDAwMzAwMDI4MDgwMDZFMzJBOAorOjEwQjYzMDAwMDAwMDAwMDA0NTMwMDBFMDA2MDAwMDMyMDAwMDYyMTIwOQorOjEwQjY0MDAwMDAwMDAwMDhFODAxMDBGNDAwMDAzNDBGMDQwMjAxRUNERgorOjEwQjY1MDAwMTZDMDZFQkMwMDAwMDAwMEM5MDEwMDE0MTg0MDgxM0FGOQorOjEwQjY2MDAwMDAwMDAwMDAwMDAwMDBGODAyODAyRjM0MDBDMDM0MEZGQQorOjEwQjY3MDAwMTIwMTAwNDBBMjhEMzlCMjAwMDAxNjEzMDAwMDAwODBCNAorOjEwQjY4MDAwMDIwMDAwOTAxODAwMzYwMENBMDAwMEY4NzMwQTAzRjk5RgorOjEwQjY5MDAwMDAwMDM0MEY5RjAxMDAxNDE4NDA4MUJDMDAwMDdGMDg5NworOjEwQjZBMDAwODAwMTAwODA5MjgwMkZCNjJCMDA3RjA4MTIwMTAwMkNCMQorOjEwQjZCMDAwODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAyMAorOjEwQjZDMDAwMDAwMDE2MTMxRjAxMDBEODAyODAwMUIyMDAwMDAwMDAyNAorOjEwQjZEMDAwMDA1NDAxRkMwMkMwNkUzMjAwQzA0NDBGMTgwMTAwMEM3RgorOjEwQjZFMDAwQThDRDNFQjIyMDgwMDAwMDAwMDAwMDI4MDk4MDM2MzIzQworOjEwQjZGMDAwMDAwMDgxMTEwMDAwMDBEODAyMDAwMEQyMDAwMDQxMEZCQworOjEwQjcwMDAwMDQwMDAwODAwMjgwOTJCQzE4MDAwMDAwMDAwMDAwRjhENQorOjEwQjcxMDAwNzMwQTAzMzk0MjBGMzYwMDAwMDAwMEMwMDIwMDM2OTI1RgorOjEwQjcyMDAwMTgwMDM2MDAwMDAwMDBGODczOEEwM0Y5MDAwMDAwMDBEQQorOjEwQjczMDAwMDAwMDAwRDgwMjgwMDEzMjAwQzA0MTBGMTgwMDAwMEM0OAorOjEwQjc0MDAwQThDRDNFQjIwMDAwNUQxMjAwMDAwMEQ4MDI0MDAwRjIxOQorOjEwQjc1MDAwMDBGMDRDMEYxRDQwMDIwMEE4MEQ2OEIxMDAwMDE2MTM0OAorOjEwQjc2MDAwMEIwMDAwODAwMjAwMDBCMDAwMDAxNjEzMUU0MDAyODQ4RgorOjEwQjc3MDAwMDYwMDAwQjIwMDAwNEEwRjEyMDAwMDI4MDIwNTgwQjA0NworOjEwQjc4MDAwMDgwMDQ1MEYwMDAwMDBGODIzNDAwMTk5MDAwMDQ1MEYxNAorOjEwQjc5MDAwMTIwMTAwNjgwMjA1ODBCMDAwMDAxNjEzMDAwMDAwODA0RQorOjEwQjdBMDAwMDIwMDAwOTAwMDAwNEMwRkI1MDAwMDgwMDIwMDAwQjBDNQorOjEwQjdCMDAwMDAwMDAwMDBBNTAwODBBMDM2MEI2QTM1MDAwMDAwMDBFNAorOjEwQjdDMDAwMDAwMDAwNTAwOUMwMjkzMjAwMDAwMDAwMDA1NjAxMjg4NgorOjEwQjdEMDAwMDhDMDZFMzIwMDAwMDAwMDAwMDAwMDc4MzkwQjJFMzJFNQorOjEwQjdFMDAwMDAwMDAwMDAwMDAwMDAyMEYzODE5NzM0MDAwMDU2MEY5NQorOjEwQjdGMDAwMDQwMDAwNzhEOTAxMzBCNjAwMDAxNjEzMDQwMTAwODA1RgorOjEwQjgwMDAwMzI4MDk3QkMwMDAwMDAwMDAwMDAwMDAwQjkwNTMwMzAxNQorOjEwQjgxMDAwMTgwMDAwMDAwMDAwMDBGODAzQTQwMzM5MDAwMDAwMDAzNQorOjEwQjgyMDAwMDAwMDAwMzQzMzBCMkYzMjAwMDA2RjBGMDQwMDAwNzg0QgorOjEwQjgzMDAwRDkwMTMwQjYwMDAwMTYxMzA0MDEwMDgwMzI4MDk3QkM5NQorOjEwQjg0MDAwMDAwMDAwMDAwMDAwMDA3OEI5MDUzMDMwMDAwMDVEMEZGNgorOjEwQjg1MDAwMDQwMDAwODA0MkU1MjlCQzAwMDAwMDAwMDAwMDAwRjg2MAorOjEwQjg2MDAwMDIwMDAwMzIxODAwMDAwMDAwMDAwMEY4NzM4QTAyMzk1QworOjEwQjg3MDAwMDAwMDAwMDAwMDAwMDA5QzAyODA5NzMyMEEwMDAwMDBENworOjEwQjg4MDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDAwMDAwMTQ5MQorOjEwQjg5MDAwMDlDMDI5RDIwMDAwNjkwRjI1MDEwMDA4MDgwMDAwQjI4NAorOjEwQjhBMDAwMDAwMDE2MTM4MDAwMDA4MEYyMDE4MEI2MDAwMDAwMDA0NgorOjEwQjhCMDAwMDAwMDAwMkMwOTA1ODAzMDAwMDAxNjEzMDIwMTAwODBGMgorOjEwQjhDMDAwODJGQTkyQkMwMDAwMTYxMzA2MDEwMDgwOTJGQTkyQkMyNAorOjEwQjhEMDAwMDAwMDY3MEYxMjAwMDAyODAyMDU4MEIwMDgwMDY5MEYwMQorOjEwQjhFMDAwMDAwMDAwRjgyMzQwMDE5OTAwMDA2OTBGMTIwMTAwNjg3MAorOjEwQjhGMDAwMDIwNTgwQjAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBENgorOjEwQjkwMDAwMDAwMDZEMEYwNDAwMDA4MDAyNDAyRkJDMDAwMDAwMDAwQQorOjEwQjkxMDAwMDAwMDAwNzgwOTAwMkMzMjIxMDMxNjEzMDQwMDAwODA3NworOjEwQjkyMDAwODI4RDk3QkM5NjAzMTYxMzA0MDAwMDgwODI4RDk3QkMwRAorOjEwQjkzMDAwMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2MDAwMDU2MEY3MgorOjEwQjk0MDAwMDAwMDAwRjQwMjAwMDA5MjAwMDA3MzBGMDQwMDAwODA2OQorOjEwQjk1MDAwNDJFNTI5QkMwMDAwMDAwMDAwMDAwMEY4MDIwMDAwMzJBRgorOjEwQjk2MDAwMTgwMDAwMDAwMDAwMDBGODczOEEwMjM5MDAwMDAwMDA4RgorOjEwQjk3MDAwMDAwMDAwOUMwMjAwOTUzMjAwMDAwMDAwQ0EwMTAwRDhCRgorOjEwQjk4MDAwMDI4MDAxMzIwMDAwMDAwMDAwMzAwMDAwMDdDMDJDMzJBRAorOjEwQjk5MDAwMDAxMDAwQTAwMDM4MDAwMDA3MDAzNzMyMDAwMDAwMDA0RgorOjEwQjlBMDAwMDAyMDAwMDAwNzAwRUUzMjAwMDAwMDAwMDAzODAwMEMwQworOjEwQjlCMDAwMDc4MDgyMzIwMDAwMTYxMzEyMDAwMDQ4MDJDMDgwQjJENQorOjEwQjlDMDAwMDAwMEY2MDMwMDAwMDAwOEU4MDEwMDk0MDAwMDkzMEY1NworOjEwQjlEMDAwMDIwMDAwODBBMjQyODBCQzAwMDA5MzBGODAwMDAwODAyMworOjEwQjlFMDAwRjJDMTg1QjYwMDAwOTMwRjFGNDAwMjA4QjlCRjY4QjBDRQorOjEwQjlGMDAwMDAwMDgzMEY4MDQxMDI4MEUyODE2OEI2MDgwMDAwMDBFOQorOjEwQkEwMDAwMDAwMDAwMTA3OTYxODAzOTAwMDAxNjEzOUYyMDAxRTBDQQorOjEwQkExMDAwMTYyMDZFQkEwMDAwMDAwMDAwMDAwMEY4MjI4MTJGMzRDQQorOjEwQkEyMDAwMTgwMDAwMDAwMDQwMDI4OEU2MjE5MTM5MDAwMDAwMDA2MworOjEwQkEzMDAwMDAwMTAwNUMwODAwMDA3MjAwMDAwMDAwMDAwMDAwMEMyMworOjEwQkE0MDAwMTlBMDkwM0EwMDAwOTMwRjA2MDEwMDgwRDJGRjkwQkMyRAorOjEwQkE1MDAwMDAwMDg3MEYyQzQxMDI3OEY5ODE2OEI0MDAwMDAwMDBEMworOjEwQkE2MDAwMDAwMDAwNzhCOTgxOTczNDAxMDAwMDAwMDAwMDAwMTA0OAorOjEwQkE3MDAwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0NTlDMDg1RDczQQorOjEwQkE4MDAwMDMwMDAwMDAwMDQwMDIwMDI5MUFGRjM4MDAwMDAwMDBGNworOjEwQkE5MDAwMDAzODAyMDBCOTFCOTAzQTAwMDAwMDAwRDI0MTAyODgzMQorOjEwQkFBMDAwMTZBMDk3M0EwMDAwMDAwMDQ1MDAwMEQ4MDI0MDAwMzI3RQorOjEwQkFCMDAwMDAwMDE2MTM5RjIwMDFFMDE2MjA2RUJBMDAwMDAwMDA1RgorOjEwQkFDMDAwMDAwMDAwMDAwNzQwODAzMjAwMDAwMDAwMDAwODAwMDA3NQorOjEwQkFEMDAwMjcyNDkwM0EwMDAwMDAwMDAwMTAwMDAwMDcwMDhBMzI3RQorOjEwQkFFMDAwMDAwMDAwMDAxMjAxMDA1OEYyQzEzODc0MDAwMDE2MTM2MworOjEwQkFGMDAwMDAwMDAwODAwMjAwMDA5MDA4MDBBMjBGMUEwMDAwMzQyRAorOjEwQkIwMDAwNzk2MTgwQjkwMDAwQUUwRjFFMDEwMDgwMDIwMDAwQjAxNAorOjEwQkIxMDAwMDAwMEFFMEYxRjQwMDIwMDA5NDA2OEIyMDAwMDk1MEYwMAorOjEwQkIyMDAwODAwMDAwODBFMjAxOTBCNjAwMDAxNjEzMzgwMDAwNTQzNworOjEwQkIzMDAwMUY0MEY1QkEwMDAwMDAwMDAwMDAwMDA4QjkzRjkwMzAzNworOjEwQkI0MDAwMDAwMDAwMDAwMDI4MDFFMDI2MjQ2RTNBMDgwMDE2MTNDOQorOjEwQkI1MDAwMUUwMDAwMDAwOUE0RkVCODNEMDAwMDAwMDAwMDAwMTAxNworOjEwQkI2MDAwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MDkwMDkwRDI1MworOjEwQkI3MDAwMDAwMDAwMDAwMDAwMDA3ODA5MDU5MDMwMDAwMDE2MTM1NgorOjEwQkI4MDAwMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzMDYwMTAwODBGMworOjEwQkI5MDAwOTJCQTk3QkMwMDAwQUUwRjEyMDEwMDY4MDIwNTkwQjA4NworOjEwQkJBMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEFFMEY5RAorOjEwQkJCMDAwODAwMDAwODA4MjgxMkZCNjAwMDBBQzBGMUY0MTAyMDA4MAorOjEwQkJDMDAwMDk0MDY4QjIwMDAwMDAwMDAwMjgwMUUwMTYyMDZFM0EyQgorOjEwQkJEMDAwMDAwMEE4MEY4MDAxMDA4MEYyQzE4NUI2MDAwMDAwMDBCRgorOjEwQkJFMDAwMDA0MDAyODRFNjAxMDAzNDAwMDAwMDAwMDAwMDAwODBGNAorOjEwQkJGMDAwMDIwMDAwMzAwMDAwMDAwMDAwNDAwMjgwMDI0MDY4MzI3NQorOjEwQkMwMDAwMDAwMDE2MTMzODAwMDA1NDFGNDBGNUJBMDAwMDE2MTM0OAorOjEwQkMxMDAwOUYyMDAxRTAxNjIwNkVCQTAwMDAwMDAwMDAwMTAwODBBNQorOjEwQkMyMDAwMDIwMDAwNzAwMDAwQTMwRjgwMDAwMDgwRTIwMTkwQjZDNworOjEwQkMzMDAwMDAwMDk3MEYwMDAwMDA1NDFGNDBGNTlBMDAwMDAwMDAxQworOjEwQkM0MDAwMDAwMDAwNUMwODAwMDAzMjAwMDAxNjEzOUYyMDAxRTA5NQorOjEwQkM1MDAwMTYyMDZFQkEwMDAwMDAwMDAwMDAwMEY4MjI4MTJGMzQ4OAorOjEwQkM2MDAwMTgwMDAwMDAxRTQxMDI4NEU2NjE5Mzc5MDAwMDE2MTM1QgorOjEwQkM3MDAwMDAwMDAwODAwMjAwMDA5MDAwMDBGRkZGMDAwMDAwODAzNAorOjEwQkM4MDAwMDIwMDAwOTAwMDAwQjkwRjFENUQwMUVDMTZDMDZFQkNGMworOjEwQkM5MDAwMDAwMDAwMDAwRjAxMDA4MDAyMDAwMDcwMDAwMDE2MTM3OQorOjEwQkNBMDAwMDQ1RDAxODAwMkMwNkVCQzAwMDAxNjEzODAwMDAwODA5RAorOjEwQkNCMDAwNDI4MTJGQjYwMDAwMDAwMDAwMDEwMEY4QjI4MDJGNzQwRQorOjEwQkNDMDAwMDAwMDAwMDAwRjAxMDA4MDAyMDAwMDcwMDAwMEI3MEZBQworOjEwQkNEMDAwMDQ1RTAxRUMxNkMwNkVCQzAwMDAwMDAwMDA1QzAxRUNDQworOjEwQkNFMDAwMDY0MDAwMzIwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNzBFOQorOjEwQkNGMDAwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDAzNAorOjEwQkQwMDAwMDQyMDAxODA4MkRCOTA3QzAwMDAxNjEzMDQyMDAxODA1NworOjEwQkQxMDAwMDIwMDZFQkMwMDAwMTYxMzFGMDAwMDgwMDIwMDAwQjA3RAorOjEwQkQyMDAwMDAwMDAwMDAwMjBDMDI4MEEyREI5MDdDMDAwMEM0MEYyNworOjEwQkQzMDAwMDYyMTAxODA4MjFCOTBCQzI3MDBDNTBGMDAwMDAwMDA3NworOjEwQkQ0MDAwMDkwMDM2OTIyODAwMDAwMDAwMDAwMDAwMDkwMDM2MzI4OQorOjEwQkQ1MDAwMDAwMDAwMDAwMDAwMDA4ODEyMDAyQzNBMDAwMEZGRkZFNQorOjEwQkQ2MDAwMDAwMDAwODAwMjAwMDA5MDA2MDAwMDAwMDAwMDAwMTBBQgorOjEwQkQ3MDAwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MDkwMDkyRDIzRgorOjEwQkQ4MDAwMDAwMDE2MTMwNDAwMDA4MDAyMDA5MkJDMDAwMDAwMDBCNgorOjEwQkQ5MDAwMkZBMDAxNzg4OTFCOTI3QTAwMDAwMDAwMDY4ODAxNzhBNAorOjEwQkRBMDAwODk5Qjk3N0MwMDAwMDAwMDAwMzQwMjA0MDlDMDZFM0RBRQorOjEwQkRCMDAwMDAwMDAwMDAwMDBDMDIwMDE5QTQ2RTM3MDAwMEQyMEYzMgorOjEwQkRDMDAwMDIwMDAwODAwMkE0OTdCQzAwMDBEMjBGMDIwMDAwODA5NQorOjEwQkREMDAwMDIwMDAwQjAwMTAwMDAwMDAwMDAwMDc4ODk4RDk3Mzc1NAorOjEwQkRFMDAwMDAwMDAwMDAwMjAxMDI4MDgyOUI5NzdDMDAwMDAwMDA5RQorOjEwQkRGMDAwMDAwMTAwRjhGMjgwMkY3NDAwMDBGRkZGMDAwMDAwODBCNworOjEwQkUwMDAwMDIwMDAwOTAwMDAwMDAwMERBNUIwMUVDMDY0MEVEMzIxOQorOjEwQkUxMDAwMkQwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTJFMgorOjEwQkUyMDAwMDA1QzAxMTQwOTgwNkVEMjAwMDBEQTBGMDQwMTAwODA2QQorOjEwQkUzMDAwMDI0MDg2QkMwMDAwMDAwMDAwQTAwMUUwMTYyMDZFM0ExRgorOjEwQkU0MDAwMDAwMERDMEYwMEQ0MDFFQzA2MDAwMDkyMDAwMEFCMTJGMQorOjEwQkU1MDAwMDA5MDAxMDgwOTAwNkVGMjAwMDAwMDAwMDBBMDAxRTA1RgorOjEwQkU2MDAwMTYyMDZFM0EwMDAwREYxMjMzMDEwMEY4ODI4MDJGQjRGMgorOjEwQkU3MDAwMDAwMERGMTI5RkYwMDE4MDgyREI4N0JDMDAwMERGMTIzMAorOjEwQkU4MDAwOUZGODAxODAyMjIxNkVCQzAwMDAwMDAwMDBFODAxRTA2NAorOjEwQkU5MDAwMDYwMEVFMzIwMDAwMDAwMDAwRjAwMUUwMDZDMDg3MzIyQworOjEwQkVBMDAwMDAwMERGMTIwMDAwMDA4MDAyMDAwMDkwMDAwMEZGRkY5MQorOjEwQkVCMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDgwMDAwODBCRgorOjEwQkVDMDAwMDI4MDkxQkMxMTAwMDAwMDAwMDAwMDEwMDkwMDM2MzIxMQorOjEwQkVEMDAwMTAwMDgwMTIwMDUwMDExNEE5OUI5MUQ5MTUwMDAwMDA5OAorOjEwQkVFMDAwMDAwMDAwMTAwOTAwMzYzMjEwMDAwMDAwMDAyMDAxMTQ4QworOjEwQkVGMDAwODkwRDZFMzcwMDAwODAxMjAwMzAwMTE0ODk1QjkxRDJFOQorOjEwQkYwMDAwMUEwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTIwNAorOjEwQkYxMDAwMDAwMDAwMTQwOUMwMkREMjAwMDAxNjEzMDYyMTAxODA3NAorOjEwQkYyMDAwODI5QjkxQkMwMDAwMDAwMDAwQTgwMTc4MDkwMDZFMzJERAorOjEwQkYzMDAwMDAwMDE2MTMwNjAxMDI4MDgyOUI5N0JDMDAwMDAxMTBDRQorOjEwQkY0MDAwMDQyMTAxMzA2OTI0NkVCQzAwMDAwMDAwMDA1MDAxMDA5MworOjEwQkY1MDAwQTk5QjkxM0EwMDAwRjkwRjFGNDAwMjI0MDk0MDY4QjJFMgorOjEwQkY2MDAwMDAwMEYwMEY4MDAwMDA4MEUyNDE5MkI2MDAwMDAwMDA2NworOjEwQkY3MDAwMDAwMDAwMDhCOTdGOTIzMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwQkY4MDAwMjkyNDkwM0MwODAwMDAwMDAwMDAwMDc4OTlBNEZFMzhBNQorOjEwQkY5MDAwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDMDAwMDE2MTMzRAorOjEwQkZBMDAwMDYwMTAwODA5MkJBOTdCQzA4MDBGMDBGMTIwMTAwNjhFOQorOjEwQkZCMDAwOTJBNEZFQjgwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA1QQorOjEwQkZDMDAwMDAwMDE2MTMwNDI5MDE4MDgyMUI5MEJDMDAwMDAwMDBCMQorOjEwQkZEMDAwMDBBODAxRTA2NjI0NkUzQTAwMDAxNjEzOUYyMDAxRTBERAorOjEwQkZFMDAwMDYwMDkzQjIwMDAwRkUwRjgwMDAwMDgwODI4MTJGQjYxMQorOjEwQkZGMDAwMDAwMEZGMEYwMDI4MDFFMDA2MDAwMDkyMDAwMDAwMDA5MgorOjEwQzAwMDAwMDAzMDAxRTAwNjAwMDAzMjAwMDAwMDAwMDA1MDAxRThBRQorOjEwQzAxMDAwMDYwMDAwMzIwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNzBGNQorOjEwQzAyMDAwMDAwMDA3MTAzODUxMDEwMEE5OUI5MUJBMDAwMDA1MTBDQgorOjEwQzAzMDAwMDQ0MTAyMDhCOUZGNjhCMDAwMDAxNjEzODA0MTAyODA3NQorOjEwQzA0MDAwRTJDMTY4QjYwMDAwMDIxMDAwNDAwMjgwMDI0MDY4OTIxRgorOjEwQzA1MDAwMDAwMDE0MTA5RjMxMDFFMDY2MjQ2RUJDMDAwMDE0MTAzMworOjEwQzA2MDAwMDAzMDAxRTAwNjAwMDA5MjAwMDAxMTEwMDQyODAxMDRENQorOjEwQzA3MDAwMDkwMDZFQjIwMDAwMTYxMzA2NTAwMTgwQTI1QjkwQkM0RQorOjEwQzA4MDAwMDAwMDBGMTA5RjAxMDAwMDE5MjQ5MEJDMDAwMDAwMDA2OAorOjEwQzA5MDAwMDBBODAxRTA2NjI0NkUzQTAwMDAwMDAwMDAyODAxRTBEQworOjEwQzBBMDAwMDYyNDAwM0MwMDAwMDAwMDAwNTAwMUU4MDYwMDAwMzJCOQorOjEwQzBCMDAwMDAwMDE2MTM5RjIwMDFFMDA2MDA5M0IyMDAwMDAwMDA2QworOjEwQzBDMDAwMDAwMTAwODAwMjAwMDA3MDAwMDAwMDAwMDAyODAxRTA3NAorOjEwQzBEMDAwMDYwMDAwMzIwMDAwMUQxMDA0MDAwMDgwMDIwMDkwQkMyOQorOjEwQzBFMDAwMDAwMDE0MTAwNDQxMDIwOEI5RkY2OEIwMDAwMDE2MTNFNAorOjEwQzBGMDAwODA0MTAyODBFMkMxNjhCNjAwMDAxMTEwMDA0MDAyODA1OQorOjEwQzEwMDAwMDI0MDY4OTIwMDAwMTgxMDAyMDAwMDgwMjIyNDkwQkNCNworOjEwQzExMDAwMDAwMDFEMTA4MDQwMDI4MEYyQzE2OEI2MDAwMDAwMDBERgorOjEwQzEyMDAwMDA0MDAyOENCNkMxNjgzNTAwMDAxRDEwMDAwMDAwRjgwOAorOjEwQzEzMDAwMjI4MTJGOTQwODAwMDAwMDAwNDAwMjc4Mzk5QUZFMzhDRQorOjEwQzE0MDAwMDAwMDE2MTMwMjAxMDA4MDgyQkE5N0JDMDAwMDE2MTM4QgorOjEwQzE1MDAwMDYwMTAwODA5MkJBOTdCQzA4MDAxNjEzMTI0MDAyNjhDQworOjEwQzE2MDAwMTI5QUZFQjgwMDAwMTExMDA0MDEwMDAwMjkyNDkwQkNBRQorOjEwQzE3MDAwMDAwMDAwMDAwMDAwMDAwODA5MDAwMDMyMTAwMDAwMDA2QworOjEwQzE4MDAwMDAwMDAwMTA3OTBCMTYzODA4MDAwMDAwMDAwMDAwMENCOQorOjEwQzE5MDAwNzkwQjE2MzgwMDAwMTYxMzA0MDAwMDgwNDJFNDkwQkNBRQorOjEwQzFBMDAwMDAwMDAwMDAwMDAwMDAwNEE5MDAyRDM3MDAwNDAxMDA3OQorOjEwQzFCMDAwMDAwMDAwMDRDOTREOTAzQTAyMDAwMDAwMDAwMDAwQThGMQorOjEwQzFDMDAwODIwRDkxMzcwMDAwMDAwMDAwMDAwMEE4MTJBNDJBM0E1NgorOjEwQzFEMDAwMDAwMDI4MTA4MDQwMDI4MEUyMDE3Q0I2MDAwMDE2MTNBNworOjEwQzFFMDAwMDQ0MDAyNzhCOTNGN0NCMDAwMDAwMDAwMDAwMDAwMDg2NQorOjEwQzFGMDAwRTlBNTkwM0EwMDAwMkExMDlGMDEwMDEwMTkwMDkxQkM5NworOjEwQzIwMDAwOUYwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDIzMTBEQgorOjEwQzIxMDAwMDQwMTAwODA0MkU0OTBCQzAwMDAwMDAwMDAwMDAwNzhBRgorOjEwQzIyMDAwQzkyNDkwM0EwMDAwMTYxMzA0MDEwMDgwMjJBNDk3QkM5MAorOjEwQzIzMDAwMDAwMDAwMDAwMEE4MDFFMDY2MjQ2RTNBMDAwMDAwMDA0MworOjEwQzI0MDAwMDA1MDAxRTgwNjAwOTAzMjAwMDAxNjEzOUYyMDAxRTAyNAorOjEwQzI1MDAwMDYwMDkzQjIwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNzBBMAorOjEwQzI2MDAwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMTgwMDM0MTA2MgorOjEwQzI3MDAwMUY0MTAyNzg4OENENjhCNjAwMDAwMDAwMDAwMDAwODhFOQorOjEwQzI4MDAwMTIwMDJDM0EwMDAwMzcxMDgwMDEwMDgwNjI4MDg3QjZDRgorOjEwQzI5MDAwMDAwMDE2MTMwNDQxMDI4MEIyRkY2OEIwMDAwMDMyMTBBMworOjEwQzJBMDAwMDA0MDAyODAwMjQwNjg5MjAzMDAxNjEzMDQ0MDAyMDAxRQorOjEwQzJCMDAwMzgxQUZGQjgwMDAwMTYxMzFGNDAwMjA0QjhGRjY4QjAxOAorOjEwQzJDMDAwMDAwMDAwMDAwMDM4MDIwMEI4MUI4MDNBMkUwMDAwMDA3OQorOjEwQzJEMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDAwMDAwMTQzNworOjEwQzJFMDAwMDkwMDgwRDIwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNzAwMAorOjEwQzJGMDAwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMDAwMDQ1MTBEOQorOjEwQzMwMDAwODAwMTAwODBBMjgwMkZCNjAwMDA0MjEwMTIwMTAwMDBDMAorOjEwQzMxMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjlDMgorOjEwQzMyMDAwMDAwMDAwMDAwMDAwMDBEODAyNDA4NDMyMUQwMDQ1MTBDQgorOjEwQzMzMDAwMDQwMTAwODAwMkE0MTdCODAwMDAzRjEwOUYwMTAwODA5NAorOjEwQzM0MDAwMTgwMDg4QkMwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA1NgorOjEwQzM1MDAwMDAwMDAwMDAwMDYwMDA2QzA4MDA2RTMyMDAwMDAwMDA2OQorOjEwQzM2MDAwQ0E2ODAwNEMwODAwNkUzMjAwMDAxNjEzMDQ3MDAwMThGMgorOjEwQzM3MDAwMDgwMDZFQjIyMDAwMDAwMDAwMDAwMDEwMDkwMDM2MzJGNAorOjEwQzM4MDAwMTAwMDgwMTIwMDAwMDAxNEE5NjA4MUQ5MDAwMDAwMDA5NAorOjEwQzM5MDAwMDQwMDAwODBBMkEwODE3QzAwMDAxNjEzMEQwMTAwODAyMworOjEwQzNBMDAwMDIwMDAwQjAwMDAwNEYxMDgwMDEwMDgwRTI4MDJGQjYzNAorOjEwQzNCMDAwMDAwMDRGMTAxQjAwMDA4MDAyMDAwMEIwMDAwMDAwMDBEMQorOjEwQzNDMDAwMDYwMDAwODA2MkUwODM3QzAwMDAxNjEzOUYwMDAwMTRDQQorOjEwQzNEMDAwMTg0MDgxQkMwMDAwMDAwMENBMDEwMEY4MDI4MDJGMzUxRgorOjEwQzNFMDAwMDBBMDAwMDAxMjAxMDA0MEEyOEQzOTcyMDAwMDE2MTM1NworOjEwQzNGMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBGRkZGMDAwMDAwODBBRAorOjEwQzQwMDAwMDIwMDAwOTAwMDAwMDAwMDAwMDgwMUU0MDZDMDJEMzI4OAorOjEwQzQxMDAwRUVGRjAwMDAwMDEwMDFFMDg2OEQyRjMxMDAwMDAwMDBDQgorOjEwQzQyMDAwMDAwMDAwMUNCM0U0MzkzMjAwMDA1QjEwMDQwMDAwNzgwNworOjEwQzQzMDAwRDkwMTMwQjYwMDAwMTYxMzA0MDEwMDgwMzI4MDk3QkM4OQorOjEwQzQ0MDAwMDAwMDAwMDAwMDAwMDA3OEI5MDUzMDMwMTgwMDAwMDAzRQorOjEwQzQ1MDAwMDAwMDAwRjhFM0E1MDMzOTAwMDAwMDAwMDAwMDAwMzRFQworOjEwQzQ2MDAwMzMwQjJGMzIwMDAwMDAwMDA0MDAwMDc4RDkwMTMwNzYzMQorOjEwQzQ3MDAwMDAwMDE2MTMwNDAxMDA4MDMyODA5N0JDMDAwMDAwMDAwOQorOjEwQzQ4MDAwMDAwMDAwNzhCOTA1MzAzMDE4MDAwMDAwMDAwMTAwRjgwNQorOjEwQzQ5MDAwRTNBNTAzNzkwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTA4OAorOjEwQzRBMDAwMDAwMDE2MTMwNDAxMDA4MDAyMDAyREJDMDAwMDE2MTNDQQorOjEwQzRCMDAwMDQwMTAwODAwMjgwMkRCQzAwMDAwMDAwMDAwMDAwQ0NDMAorOjEwQzRDMDAwMDIwMDAwMzIwMDAwNjYxMDIwMDAwMTJDMDlDMDZFQjI4QworOjEwQzREMDAwMDAwMDY3MTAwMDE2ODZDQzA2QzA5MjkyMDAwMDAwMDA5MworOjEwQzRFMDAwMDAxNDg2Q0MwNkMwOTIzMjAwMDAwMDAwMTIwMTAwNDAwOQorOjEwQzRGMDAwNjI4RTkyNTIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTAyRAorOjEwQzUwMDAwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMDAwMDZEMTA5RQorOjEwQzUxMDAwMDQwMDAwNzhEOTAxMzBCNjAwMDAxNjEzMDQwMTAwODAzMQorOjEwQzUyMDAwNDI4MDk3QkM2RDEwMzYwMDAwMDAwMEMwMDIwMDM2OTJCOQorOjEwQzUzMDAwNjAwMDE2MTMwNDAxMDA4MDgyOEQyRkIxMDAwMDAwMDBGRQorOjEwQzU0MDAwMDAwMDAwMTQwMzAwMzgzMjAwMDAwMDAwMDAwMDAwRTA4QQorOjEwQzU1MDAwMDIwMDMwMzIwMDAwQjkxMDA0MDAwMDI0RDgwMTMwQjZDNworOjEwQzU2MDAwNzIxMDAwMDAwMDAwMDA4ODgyNEQ4MjNBMDAwMDE2MTMwRAorOjEwQzU3MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzMDAwMDAwODAwMAorOjEwQzU4MDAwMDIwMDAwOTAwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBERQorOjEwQzU5MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwNkQxMDM2MDBBRAorOjEwQzVBMDAwMDAwMDAwQzAwMjAwMzY5MjAwMDA5RTEwMDAwMDAwODBEMworOjEwQzVCMDAwMDIwMDAwOTAwMDAwN0ExMDAwMDAwMDIwNDgwNTMwOTAzMgorOjEwQzVDMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDg2MTA5QQorOjEwQzVEMDAwOTIxMTAxQkMwODAwNkVCMjAwMDAwMDAwMDAwODAxRENFRQorOjEwQzVFMDAwMDI0MDZFMzIwMDAwN0UxMDFGMTEwMUUwMjZDMThCQjVBMworOjEwQzVGMDAwMDAwMDg2MTAxRDAwMDA4MDAyMDAwMEIwMDAwMDAwMDA1NgorOjEwQzYwMDAwMDAwMDAwRDgwMjAwMDAzMjgwMDIwMDAwMDAwMDAwMDA5QworOjEwQzYxMDAwMDcwMDM2MzIwMDAwMDAwMDAwMDAwMDc4QTkwMDJEMzcyNgorOjEwQzYyMDAwMjAwNTAxMDAwMDA4MDAwMEM3OEQ5NzNBMEEwMDAwMDBBRAorOjEwQzYzMDAwMDAwMDAwNzg4OTBEODIzNzAwMDAwMDAwMDAxMDAwMDAyMworOjEwQzY0MDAwQTdCQTk3M0EwMDAwMDAwMDAwMTgwMDAwMDdDMEVBMzJCRAorOjEwQzY1MDAwMDAwMDE2MTMxMjAwMDA0ODAyQzAzOEIyMDAwMDhBMTAxMQorOjEwQzY2MDAwODAwRTAxQkMwOEMwNkVCMjAwMDAwMDAwMDAwMDAwMDA5NworOjEwQzY3MDAwMTkwRTgyMzIwMEUwOTIxMDEyMDEwMDQ4QTIwRDkwQjIxMQorOjEwQzY4MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDA2RgorOjEwQzY5MDAwMDAwMDAwRDgwMjQwMDAzMkI0MDAwMDAwMDAwMDAwMDA5QQorOjEwQzZBMDAwMDcwMDM2MzIwMDAwMDAwMDAwMDAwMDc4QTkwMDJEMzc5NgorOjEwQzZCMDAwMDAwNDAxMDAwMDA4MDAwMEM3OEQ5NzNBMDAwMDAwMDA0OAorOjEwQzZDMDAwMDAwMDAwNzg5OTAwODIzNzAwMDAxNjEzMDIxMDAwMDA2NQorOjEwQzZEMDAwODdCRjk3QkEwMDAwMDAwMDAwMTgwMDAwMDc0MEZFMzIzNAorOjEwQzZFMDAwMDAwMDE2MTMxMjAwMDA0OEYyQzEzOEI0MTgwMDM2MDBEQQorOjEwQzZGMDAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwMDAwMDAwMDRDNQorOjEwQzcwMDAwODk2MDM4MzIxRDAwMDAwMDAwMDAwMDc4MDlBNDE3Mzg0NQorOjEwQzcxMDAwMDAwMDk4MTA4MDAwMDA4MDAyQzA4QkI2MDAwMDk5MTBDNQorOjEwQzcyMDAwMDQwMDAwODAzMjgwOTdCQzAwMDAxNjEzMDAwMDAwODBENworOjEwQzczMDAwMDIwMDAwOTAwMDAwMTYxMzA0MDEwMDgwMDI4MDk3QkNFNAorOjEwQzc0MDAwMDAwMDAwMDAwMDAwMDAxOEYzNDE5MDM0MDAwMDlFMTAyQgorOjEwQzc1MDAwMDQwMDAwNzhEOTAxMzBCNjAwMDAxNjEzMDQwMTAwODBFRgorOjEwQzc2MDAwMzI4MDk3QkMwMDAwMDAwMDAwMDAwMDAwQjkwNTMwMzBBNgorOjEwQzc3MDAwMTgwMDAwMDAwMDAwMDBGODAzQTQwMzM5MDAwMDAwMDBDNgorOjEwQzc4MDAwMDAwMDAwMDAxOUNFMkMzMjAwNjAxNjEzMTIwMDAwNDA4OQorOjEwQzc5MDAwQTIwRDkwQjIwMDAwMDAwMDAwMDAwMEQ4MDIwMDAwMzI5QworOjEwQzdBMDAwNjAwMDAwMDAwMDAwMDAwMDA3MDAzNjMyMDAwMDAwMDBCQQorOjEwQzdCMDAwMDAwMDAwQkNBODAwMkQzN0EwMDcwMTAwMDAwODAwMDAwMQorOjEwQzdDMDAwQzdDRDhCM0EwQTAwMDAwMDAwMDAwMDc4ODlDRDJDMzdENQorOjEwQzdEMDAwODAwMjAwMDAwMDAwMDA3ODg5OEQ5NzNBMDAwMDAwMDA3OAorOjEwQzdFMDAwMDAxMDAwMDBBN0JBOTczQTAwMDAwMDAwMDAxODAwMDBFRgorOjEwQzdGMDAwMDdDMEVBMzIwMDAwMTYxMzEyMDAwMDQwRjJDMTM4QjQzQworOjEwQzgwMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDA2OQorOjEwQzgxMDAwMDAwODAxREMwMjQwNkUzMjFEMDAwMDAwMDAwMDAwNzhCQworOjEwQzgyMDAwMDlBNDE3MzgwMDAwMTYxMzA0MDEwMDgwMDI4MDk3QkM4OQorOjEwQzgzMDAwMDAwMDE2MTM4MDEwMDE4MDIyMDE2RUI2MEEwMEIwMTBBRAorOjEwQzg0MDAwMUYwMTAwNzg4OUNEMkNCNzAwMDBCNzEwMUQxMDAxRjgyQQorOjEwQzg1MDAwMDIwMDZFQjI4MDAyMDAwMDAwMDAwMDAwMDcwMDM2MzJDNQorOjEwQzg2MDAwMjAwNTAxMDAwMDA4MDAwMEM3Q0Q4QjNBMDAwMDAwMDA0MQorOjEwQzg3MDAwMDAxMDAwMDBBN0JBOTczQTAwMDAwMDAwMDAxODAwMDA1RQorOjEwQzg4MDAwMDdDMEVBMzIwMDAwMTYxMzEyMDAwMDQwRjJDMTM4QjRBQgorOjEwQzg5MDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDBEOQorOjEwQzhBMDAwMDAxMDAxRjgwMjAwNkUzMkVFRkYxNjEzMDQwMTAwODA0MgorOjEwQzhCMDAwODI4RDJGQjAwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNzA5NworOjEwQzhDMDAwRUVGRjE2MTMwNDExMDE4MDgyMEQ2RUIwMDAwMDAwMDAwRgorOjEwQzhEMDAwMDAxMDAxRjgwMjAwNkUzMjAwMDAwMDAwMDAwOTAxRENDNworOjEwQzhFMDAwMDI0MDZFNzIwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTAxNgorOjEwQzhGMDAwMDAwMDAwMDAwMDAwMDAwMDA5MDAwMDMyMEUwMDAwMDBFRgorOjEwQzkwMDAwMDAwMDAwMDQ4OTREMEQzNjAwMDAwMDAwMDAwMDAwMDAwQQorOjEwQzkxMDAwMDc4MDBCMzIwMDAwMDAwMDAwMDgwMDAwMDcwMDkwMzI4MgorOjEwQzkyMDAwMDAwMDAwMDAwMDEwMDAwMDA3MDAzNjMyMDAwMEMyMTBCNgorOjEwQzkzMDAwMTIwMDAwNENGMkMxMzhCNDAwMDAwMDAwMDAwMDAwODA3QQorOjEwQzk0MDAwMDIwMDAwMzAwMDAwQzMxMDEyMDAwMDgwMDJDMDIxQjJCQgorOjEwQzk1MDAwMDAwMDAwMDAwMDAwMDAwMEU5MDI5MDNBMDAwMEJGMTA1MworOjEwQzk2MDAwMDQwMTAwMDQxOTQwOTBCQzAwMDAwMDAwMDAwMTAwODA5OAorOjEwQzk3MDAwMDIwMDAwNTAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTA1NQorOjEwQzk4MDAwMDAwMEQyMTA4MDAxMDA4MEEyODAyRkI2MDAwMENDMTBFMQorOjEwQzk5MDAwMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwMDAwMDAwRjhDMQorOjEwQzlBMDAwNzMwQTAzRjkwMDAwRDExMDA0MDAwMDgwMDI4MDJEQkMzRQorOjEwQzlCMDAwMDAwMDE2MTMwNDAxMDA4MDIyODAyREJDMDAwMDE2MTMxNQorOjEwQzlDMDAwOUYwMDAwODAxODAwODhCQzAwMDBDQzEwMTIwMTAwRTgxNQorOjEwQzlEMDAwMDJDMDIxQjIwMDAwQ0IxMDAwMDAwMDgwMDIwMDAwOTBENQorOjEwQzlFMDAwMDAwMDAwMDBDQTAwMDBEODAyNDA4NDMyMDAwMDE2MTM4NAorOjEwQzlGMDAwMDQwMTAwODAwMjQwMkRCQzAwMDAxNjEzMDQwMDAwODBEQQorOjEwQ0EwMDAwMDI4MDJEQkMwMDAwMDAwMDAwNDAwMDZDODgxQzgzM0FBRQorOjEwQ0ExMDAwMDAwMDAwMDAwMDQ4MDA0QzA4MDA3MjMyMDAwMDE2MTNBRAorOjEwQ0EyMDAwMDg1MDAwMThDODIwNzJCQzAwMDAwMDAwMDQwMDAwODBGQworOjEwQ0EzMDAwMDI0MDgxN0MwMDAwMDAwMDAwMDAwMDE0MTg0MDgxM0M4RQorOjEwQ0E0MDAwMDAwMDE2MTMwMjAwMDAyMDg4MDE4MkJBMDAwMDAwMDBENgorOjEwQ0E1MDAwMDAwMDAwRDgwMjAwMDAzMjAwMDAwMDAwMDAwMDAwMDBDQQorOjEwQ0E2MDAwMDcwMDA2MzIwMDAwMTYxMzA0MDEwMDgwMDIwMDM2QkNFNQorOjEwQ0E3MDAwMDcwMDAwMDAwMDA4MDAwMDc3NEEwOTM5MDAwMDAwMDBBNAorOjEwQ0E4MDAwMDAxMDAwMDAwNzAwODIzMjAwMDAwMDAwQ0ExOTAwMDBGOAorOjEwQ0E5MDAwMDc0MDgyMzIwMDAwMTYxMzEyMDAwMDQwRjJDMTM4QjQ4MQorOjEwQ0FBMDAwMDAwMDAwMDAwMDAxMDBEODAyNDA4NDcyMDAwMEZGRkY3NworOjEwQ0FCMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNEQwMDAwMDAxNworOjEwQ0FDMDAwNjdFMDgzM0UwMDAwMDAwMDAwMDgwMDAwMDcwMDgwMzI5RAorOjEwQ0FEMDAwMDAwMDAwMDAwMDEwMDAwMDA3QzA4NjMyMDAwMDAwMDBDNworOjEwQ0FFMDAwMDAxODAwMDAwN0MwODQzMjAwMDAzQzExMDQwMDAwMjgzOAorOjEwQ0FGMDAwRDhBMDgyQkMwMDAwMTYxMzA5MDEwMDgwMDIwMDAwQjAxQgorOjEwQ0IwMDAwMDAwMDAwMDAwMDAwMDAxOEQ4QTA4MTNDMDAwMEZFMTBDQQorOjEwQ0IxMDAwMDQwMDAwM0NEOEUwODNCQzAwMDAxNjEzMDQwMTAwODAzMAorOjEwQ0IyMDAwMDI4MDgxQkMwMDAwRUYxMDA0MDAwMDgwNzI4MDJEQkNFOAorOjEwQ0IzMDAwMDAwMDE2MTMxMjAwMDA1MDAyQzAzOEIyMDAwMEY3MTBCNworOjEwQ0I0MDAwNTEwMDAwRDgxMjgwMkQ5QTAwMDAxNjEzMTIwMDAwNTBEOAorOjEwQ0I1MDAwRjJDMTM4QjQxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjk3NworOjEwQ0I2MDAwMDAwMEY1MTAwNDAwMDA4MDcyODAyREJDMDAwMDE2MTMzOAorOjEwQ0I3MDAwODAwMTAwODBBMjgwMkZCNjAwMDBGMDEwNjcwMDAwRjg0RQorOjEwQ0I4MDAwQTI4MDJGQjUwMDAwMTYxMzEyMDAwMEU4MDJDMDIxQjJFNworOjEwQ0I5MDAwMDAwMDE2MTMwNDAxMDA4MDcyODAyREJDMDAwMDAwMDAwQworOjEwQ0JBMDAwNTEwMDAwRDgwMjAwMDAzMjAwMDBGQzEwMkEwMTAwMDBGMQorOjEwQ0JCMDAwRDgyMDgwQkEwMDAwRkIxMDEyMDEwMDAwMDlDMDIxQjI4OQorOjEwQ0JDMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDAwMDAwMDBBNgorOjEwQ0JEMDAwMDAwMDAwRDgwMjQwODQzMjFEMDAxNjEzMDQwMDAwODBCQgorOjEwQ0JFMDAwMDJBNDE3QjgwMDAwNDYxMDAwNjAwMDZDMDgwMDZFRjI0NgorOjEwQ0JGMDAwMDAwMEU0MTA0RDAwMDAwMDY3RTA4MzlFMDAwMDE2MTM2MworOjEwQ0MwMDAwMTIwMDAwNTBGMkMxMzhCNDE4MDAzNjAwMDAwMDAwRjhERAorOjEwQ0MxMDAwNzMwQTAzRjkxRDAwMDUxMTA0MDAwMDgwMDJBNDE3Qjg2RgorOjEwQ0MyMDAwMDAwMDE2MTM4MDAxMDA4MEEyODAyRkI2MDAwMEZGMTBDNAorOjEwQ0MzMDAwNjcwMDAwRjhBMjgwMkZCNTAwMDAxNjEzMTIwMDAwMDA1NAorOjEwQ0M0MDAwMDlDMDIxQjIxRDAwMTYxMzA0MDEwMDgwMDJBNDE3QjgwOAorOjEwQ0M1MDAwMDgwMDAwMDAwMDQwMDI3ODM5OUFGRTM4MDAwMDE2MTNFMAorOjEwQ0M2MDAwMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzMDYwMTAwODAwMgorOjEwQ0M3MDAwOTJCQTk3QkMwODAwMTYxMzEyNDAwMjY4MTI5QUZFQjhDNgorOjEwQ0M4MDAwMDAwMDE2MTMwQjAwMDA4MDAyMDAwMEIwMDAwMDY0MTFDOQorOjEwQ0M5MDAwMDAwMDAwMzAwMzAwMzhGMjAwMDAxQjExMUYwMDAwNkM4MAorOjEwQ0NBMDAwRDhFMDg2QkEwMDAwMzIxMDUxMDAwMEQ4MDIwMDAwRjIyRAorOjEwQ0NCMDAwMDAwMDBGMTEwMDAwMDAzQzA4NDA4MDkyMDAwMDFCMTE5MgorOjEwQ0NDMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxMzExODAwMTAwODAyRAorOjEwQ0NEMDAwRjI4MTJGQjYwMDAwMTMxMTgwMDAwMDgwRTI4MDJGQjY5MQorOjEwQ0NFMDAwMDAwMDEzMTE4MDAxMDA4MDMyODA4N0I2MDAwMDAwMDAzMAorOjEwQ0NGMDAwMDAwMDAwRjhFMjgwMkYzNDAwMDBFMzEwMDQwMTAwODBGRgorOjEwQ0QwMDAwMDI4MDgxQkMwMDAwMTkxMTgwMDEwMDgwQTI4MDJGQjYzMgorOjEwQ0QxMDAwMDAwMDE4MTExMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDBFRAorOjEwQ0QyMDAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwMDAwMDAwRDhCQQorOjEwQ0QzMDAwMDI0MDg0MzIxRDAwMTYxMzA0MDAwMDgwMDJBNDE3QjhCQworOjEwQ0Q0MDAwMDAwMDQ2MTAwMDYwMDA2QzA4MDA2RUYyMDAwMEU0MTA2NQorOjEwQ0Q1MDAwNEQwMDAwMDA2N0UwODM5RTAwMDAyMDExODAwMTAwODBFQworOjEwQ0Q2MDAwRTI4MDJGQjYwMDAwNDAxMTgwMDEwMDgwQTI4MDJGQjYyMworOjEwQ0Q3MDAwMTgwMDM2MDBDQTAwMDBGODczMEEwM0Y5MUQwMDQwMTFCQworOjEwQ0Q4MDAwMDQwMTAwODAwMkE0MTdCODAwMDAxNjEzMDAwMDAwODAwMAorOjEwQ0Q5MDAwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMEE0QTg2MDhBM0M4RgorOjEwQ0RBMDAwMDAwMDE2MTMwNDIxMDE4MDgyNUI4QUJDMDAwMDI0MTE1QworOjEwQ0RCMDAwMkZBODAxMjA5OTIyNkVCQTAwMDBDNzBGMDAwMDAwODA0MgorOjEwQ0RDMDAwMDIwMDAwRjAwMDAwMTYxMzA2MDEwMjgwODIxQjkyQkNENAorOjEwQ0REMDAwMDAwMDAwMDAwMEE4MDFFMDA2MDA5MjMyMDAwMDAwMDAwMAorOjEwQ0RFMDAwMDA1MDAxRTgwNjAwMDAzMjAwMDAyOTExMjMyMTAxRTA3MworOjEwQ0RGMDAwMDYwMDAwQjIzRTAwMTYxMzEyMDAwMDJDODJDRDJFQjJBNworOjEwQ0UwMDAwMDAwMDE2MTMwNDMwMDBFMDA2ODA4MkIyMDAwMDMzMTFFNworOjEwQ0UxMDAwMDQyMTAwRTAwNjgwODFCMjAwMDAxNjEzODAwMDAwODAyQgorOjEwQ0UyMDAwRTI4MDJGQjYwMDAwMzExMTgwMDEwMDgwQTI4MDJGQjY3MQorOjEwQ0UzMDAwMDAwMDMwMTExMjAxMDAwMDA5QzAyMUIyMTgwMDM2MDBCNAorOjEwQ0U0MDAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwMDAwMDAwRDg5OQorOjEwQ0U1MDAwMDI0MDg0MzIxRDAwMTYxMzA0MDAwMDgwMDJBNDE3Qjg5QgorOjEwQ0U2MDAwMDAwMDQ2MTAwMDYwMDA2QzA4MDA2RUYyMDAwMDAwMDAzOAorOjEwQ0U3MDAwMDAyMDAwRTAwNjgwODEzMjAwMDAwMDAwMDAzQzAwRTg1NQorOjEwQ0U4MDAwMDY0MDgxMzIwMDAwMDAwMDAwMTAwMEUwMDZDMDg2MzIzQgorOjEwQ0U5MDAwMDAwMDAwMDAwMDE4MDBFMDA2QzA4NDMyMDAwMDE2MTNGNQorOjEwQ0VBMDAwMDQwMDAwODAzMkUxODZCMjAwMDAwMDAwMkEwMTAwODAwOAorOjEwQ0VCMDAwMDIwMDAwNzAwMDAwM0ExMTEyMDEwMDAwMDlDMDIxQjIwNgorOjEwQ0VDMDAwMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MUQwMDE2MTM1RAorOjEwQ0VEMDAwMDQwMDAwODAwMkE0MTdCODAwMDAwMDAwMDAwMTAwRjg2MAorOjEwQ0VFMDAwQTI4MDJGNzUwMDAwMDAwMDAwMDAwMDNDRDhFMDgzM0NDOQorOjEwQ0VGMDAwMDAwMDE2MTMxMjAwMDA1MEYyQzEzOEI0MDAwMDE2MTNERgorOjEwQ0YwMDAwODAwMDAwODBBMjgwMkZCNjAwMDAwMDAwMDAwMDAwRjgyMgorOjEwQ0YxMDAwQTI4MDJGMzQwMDAwMDAwMDAwMDAwMDg4MTIwMDJDM0E4QworOjEwQ0YyMDAwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDBGMQorOjEwQ0YzMDAwMDAwMDAwMDAwOTAwMDAzMjAwMDAwMDAwMDAwMDAwNzgzRQorOjEwQ0Y0MDAwMDkwMDAwMzIwMDAwMDAwMDAwMDAwMEE4MDIwMDAwMzJDQQorOjEwQ0Y1MDAwRUUwNTQ4MTEwNDAxMDA4MDgyMERGNkJDMDAwNjAwMDBCOQorOjEwQ0Y2MDAwMDAwMDAwMDgwOTAwMzYzMjAwMDA0QTExMDAwMDAwMDRFOQorOjEwQ0Y3MDAwMDlDMDA5OTIwMDI4MDAwMDAwMDAwMDA4MDkwMDM2MzJBQworOjEwQ0Y4MDAwMDAwMDAwMDAwMDAwMDAwNDA5ODAwOTMyMUUwMDAwMDBCQgorOjEwQ0Y5MDAwMDAwMDYwQzA4N0NEMDAzNzAwMDAwMDAwMDAwODYwQzBCRQorOjEwQ0ZBMDAwMDc4MDk3MzIwMDMwMDAwMDAwMDAwMDc4ODk4RDJBM0EwRgorOjEwQ0ZCMDAwMDAwMDE2MTMxMjAwMDA1QzUyODE5N0I0MDAwMDAwMDBCQworOjEwQ0ZDMDAwMDAwMDAwMDAyOTI0OTAzQTA4MDAwMDAwMDAwMDAwNzhDQQorOjEwQ0ZEMDAwODkwRDkwMzYwMDAwMDAwMDAwMDAwMDA0MTk0MDkwM0NDQworOjEwQ0ZFMDAwMDAwMDAwMDAwMDAwMDBBODUyODIyQTNBMDAwODRBMTFGRQorOjEwQ0ZGMDAwMDIwMTAwODA4MjhEMkFCQzAwMDA1QjExMDYwMDAwODBDNworOjEwRDAwMDAwMDI0MDkwQkMwMDAwMTYxMzEyMDAwMEE4MDIwMDIwQjJEQgorOjEwRDAxMDAwMUUwMDAwMDAwMDAwMDBDMDg3Q0QwMDM3MDAwMDAwMDBBNworOjEwRDAyMDAwMDAwODAwQzAwNzgwOTczMjAwMDAxNjEzMTIwMDAwNUM1MQorOjEwRDAzMDAwNTI4MTJBQjQwMDAwMDAwMDAwMDAwMDAwMjkyNDkwM0EyOAorOjEwRDA0MDAwMDgwMDAwMDAwMDAwMDA3ODg5MEQ5MDM2MDAwMDU0MTE5RgorOjEwRDA1MDAwMDQwMTAwMDQxOTQwOTBCQzA1MDAwMDAwMDAwMDAwNzhBNQorOjEwRDA2MDAwODkwRDkwMzYwMDAwMDAwMDAwMDAwMEEwMEU4MDk3MzI2RAorOjEwRDA3MDAwMDAwMDE2MTMxMjAwMDA2ODAyODA5N0IyMDAwMDAwMDA0MgorOjEwRDA4MDAwMDAwMDAwQTQwRTgwOTczMjAwMDAwMDAwMDAwMDAwMDBBNQorOjEwRDA5MDAwMjkyNDkwM0EwMDAwMDAwMDAwMDAwMDc4NTkwMDkwMzZFMgorOjEwRDBBMDAwMDAwMDVEMTE5NTAxMDA4MDIyMjQ5MEJBMDAwMDAwMDA2QworOjEwRDBCMDAwMDAwMTAwODAwMjAwMDA1MDAwMDBGRkZGMDAwMDAwODAxRgorOjEwRDBDMDAwMDIwMDAwOTAwMDAwN0UxMTA0MDEwMDc4RDkwMTMwQjYwMgorOjEwRDBEMDAwMDAwMDAwMDAwMDAwMDAyODA5QzAyOTMyMDAwMDAwMDAwNAorOjEwRDBFMDAwMDAwMDAwOUNCMjQ1MjgzMDAwMDA3MDExODYwMTAwMDg0NQorOjEwRDBGMDAwMDk4MDJGQjIwMDAwMDAwMDAwMDAwMDJDMDk0MDgxMzI5RQorOjEwRDEwMDAwMDAwMDAwMDAwMDAwMDBGODAyMDAwMDMyMDAwMDAwMDBGMworOjEwRDExMDAwMDAwMDAwRjQwMjAwMDAzMjE4MDAwMDAwMDAwMDAwRjhENworOjEwRDEyMDAwNzM4QTAyMzkwMDAwMDAwMDAwMDAwMDlDMDI4MDkyMzJFNQorOjEwRDEzMDAwMDAwMDZGMTEwNDA3MDE4MDAyQzA2RUJDMDAwMDc5MTE2RAorOjEwRDE0MDAwQzMwNzAxRUNCNkU0NkU5QTAwMDA3OTExMDAwNjAxRUMwOQorOjEwRDE1MDAwQjZFNDZFOUEwMDAwMTYxMzgwMDEwMDgwNTI4MDkwQjZFQgorOjEwRDE2MDAwMDAwMDAwMDAwMDAwMDAyQzA5MDU4MDMwMDAwMDAwMDBENQorOjEwRDE3MDAwMDAwMDAwRjgwMjAwMDAzMjAwMDAwMDAwMDAwMDAwRjQ4RgorOjEwRDE4MDAwMDIwMDAwMzIxODAwMDAwMDAwMDAwMEY4NzM4QTAyMzkyMworOjEwRDE5MDAwMDAwMDAwMDAwMDAwMDA5QzAyODA5MjMyMDAwMDE2MTM4NAorOjEwRDFBMDAwMDIwMTAwODA4MkZBOTJCQzAwMDAxNjEzMDYwMTAwODA4MgorOjEwRDFCMDAwOTJGQTkyQkMwMDAwRDcxMTAwMDAwMDgwMDIwMDAwRDA1QgorOjEwRDFDMDAwMjEwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTIyQgorOjEwRDFEMDAwMDAwMDAwMTQwOUMwOTJEMjAwMDAwMDAwMDAwMDAwMzBERQorOjEwRDFFMDAwMDMwMDM4MzIwMDAwN0UxMTA0MDEwMDc4RDkwMTMwQjYwNgorOjEwRDFGMDAwMDAwMDY3MTEwMDAwMDA5Q0IyNDUyODkwMDAwMDAwMDA2QworOjEwRDIwMDAwMDQwMDAwODAyMjgwOTc3QzAwMDAxNjEzMDAwMDAwODAzQworOjEwRDIxMDAwMDIwMDAwOTAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTA2QworOjEwRDIyMDAwMDAwMDE2MTMwNDAwMDA4MDAyQzBFOEJDMDAwMDE2MTNDMgorOjEwRDIzMDAwMDIwMDAwODAwMkMxMkZCQzAwMDAwMDAwMDAwMDAwODgzNgorOjEwRDI0MDAwMDJDMEU4MzIwMjAwODQxMUIwMDAwMEEwRjIwQjAwQjk2NQorOjEwRDI1MDAwMDAwMDAwMDAwMDAwMDAwQ0FCRTRCMDMyMDAwMDg5MTFCNworOjEwRDI2MDAwODAwMTAwODBGMjRCRDBCNjAwMDAwMDAwQTAwMDAwMjgzMgorOjEwRDI3MDAwMDkwMDAwMzIwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNTBBMAorOjEwRDI4MDAwMDAwMDhCMTEwNDAxMDA4MDEyM0VGOEJBMDAwMDk2MTFENAorOjEwRDI5MDAwQTAwMDAwMDRGRDRCRDA5NDAwMDA5MjExODAwMTAwODA5QQorOjEwRDJBMDAwRDI4MTkyQjYwMDAwOTIxMTgwMDEwMDgwMjI4MUZDQjZFQQorOjEwRDJCMDAwMDAwMDAwMDBBMDAwMDAwNEZENEJEMDM0MDAwMDAwMDA3RQorOjEwRDJDMDAwMDAwMDAwODQwMUMwMkYzMjAwMDAwMDAwMDAwMDAwODAzOAorOjEwRDJEMDAwRjEwMTAwMzQwMDAwMDAwMDAwMDAwMDk0MDFDMDJGMzI3MgorOjEwRDJFMDAwMDAwMDk2MTEwMDAwMDA5MEYxMDEwMDk0MDAwMDAwMDA4MQorOjEwRDJGMDAwQTAwMDAwODQwMUMwMkYzMjAwMDAwMDAwMDAwMDAwODA2OAorOjEwRDMwMDAwRjEwMUY4MzQwMDAwMDAwMDAwMDAwMDkwMDE0MEY4MzIwNAorOjEwRDMxMDAwMDAwMDAwMDAwMDAxMDAyODA5MDAwMDUyMDAwMDE2MTM2MAorOjEwRDMyMDAwODAwMTAwODBGMjRCRDBCNjAwMDA5QzExMDQwMTAwMjg1RgorOjEwRDMzMDAwMDkzNEIwQkEwMDAwMTYxMzgwMDEwMDgwRjI0QkQwQjY1OQorOjEwRDM0MDAwMDAwMDk5MTFCMDAwMDA4MDAyMDAwMEIwMDAwMDAwMDA1MQorOjEwRDM1MDAwQTAwMDAwMDRGRDRCRDAzNTAwMDAwMDAwMDAwMTAwMjhCMworOjEwRDM2MDAwMDkwMDAwNTIwMDAwOUMxMUIwMDAwMEE4MjJDMDJGQjc5NQorOjEwRDM3MDAwMDAwMDE2MTMwNDAwODRDMDM3QUNCMEIyMDAwMDAwMDBGNworOjEwRDM4MDAwQTAwMDAwMEMwQjAwMDAzMkZGRkYwMDAwMDAwMDAwNzgzRQorOjEwRDM5MDAwQTk0REIwMzAwMDAwQTQxMTgwMDAwMDgwMDI0MEIwQjY1QQorOjEwRDNBMDAwMDAwMDE2MTM4MDAwMDA4MDEyNDBCMEI2MDAwMDAwMDA5QworOjEwRDNCMDAwMDAwMDAwNzg2OTgxOTczNTAwMDAwMDAwMDAwMDg0MDhCMworOjEwRDNDMDAwMEIwMDdDMzIwMDAwMDAwMDAwMDAwMDAwRTcyNTAxMzI2NQorOjEwRDNEMDAwMDA0MjAwMDAwMDA4MDAwMDg3OEQyQTNBMDAwMDAwMDA4QgorOjEwRDNFMDAwMDAxMDAwMDAwNzAwQjAzMjAwMDAwMDAwMDAxODAwMDAyQworOjEwRDNGMDAwMDcwMEQwMzIwMDAwMDAwMDEyMDEwMDQ4RjJDMTM4NTQ4QQorOjEwRDQwMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEFBMTEyNgorOjEwRDQxMDAwQjAwMDAwQTAwMjAwMDBCMjAwMDAwMDAwMDAwMDAwMENGQworOjEwRDQyMDAwQUJFNEIwMzIwMDAwQUYxMTgwMDEwMDgwMDI0MEQwQjYwMgorOjEwRDQzMDAwMDAwMDAwMDBBMDAwMDAyODA5MDAwMDMyMDAwMDAwMDBFOQorOjEwRDQ0MDAwMDAwMTAwODAwMjAwMDA1MDAwMDBCMTExMDQwMTAwODBDMgorOjEwRDQ1MDAwMTIzRUY4QkEwMDAwQzIxMUEwMDAwMDA0MEQ0MEQwOTRBMgorOjEwRDQ2MDAwMDAwMEJCMTE4MDAxMDA4MEQyODE5MkI2MDAwMEJCMTE4OAorOjEwRDQ3MDAwODAwMTAwODAyMjgxRkNCNjAwMDAwMDAwQTAwMDAwMDRCMgorOjEwRDQ4MDAwMEQ0MEQwMzQwMDAwMDAwMDAwMDAwMDc4MDlDMDJGMzJBOQorOjEwRDQ5MDAwMDAwMDAwMDAwMDAwMDBGQzAyMDAwMDMyMDAwMDAwMDA1QworOjEwRDRBMDAwMDAwMDAwODQwMUMwMkYzMjAwMDAwMDAwMDAwMDAwODA1NgorOjEwRDRCMDAwRjEwMTAwMzQwMDAwMDAwMDAwMDAwMDk0MDFDMDJGMzI5MAorOjEwRDRDMDAwMDAwMDAwMDAwMDAwMDA5MEYxMDEwMDM0MDAwMEMyMTFEMworOjEwRDREMDAwMDAwMDAwRkMwMjgwOTc5MjAwMDAwMDAwQTAwMDAwNzg4RAorOjEwRDRFMDAwMDlDMDJGMzIwMDAwMDAwMDAwMDAwMEZDMDIwMDAwMzJFMgorOjEwRDRGMDAwMDAwMDAwMDAwMDAwMDA4NDAxQzAyRjMyMDAwMDAwMDA4NgorOjEwRDUwMDAwMDAwMDAwODBGMTAxRjgzNDAwMDAwMDAwMDAwMDAwOTBFRAorOjEwRDUxMDAwMDE0MEY4MzIwMDAwMDAwMDAwMDAwMEZDMDI4MDk3MzI1OQorOjEwRDUyMDAwMDAwMDAwMDAwMDAxMDAyODA5MDAwMDUyMDAwMDE2MTM0RQorOjEwRDUzMDAwODAwMTAwODAwMjQwRDBCNjAwMDBDODExMDQwMTAwMjgxQworOjEwRDU0MDAwMDkzNEIwQkEwMDAwMTYxMzgwMDEwMDgwMDI0MEQwQjY0MgorOjEwRDU1MDAwMDAwMEM1MTFCMDAwMDA4MDAyMDAwMEIwMDAwMDAwMDAxMworOjEwRDU2MDAwQTAwMDAwMDQwRDQwRDAzNTAwMDAwMDAwMDAwMTAwMjg5QworOjEwRDU3MDAwMDkwMDAwNTIwMDAwQzgxMUIwMDAwMEE4MDIwMDAwQjI2QgorOjEwRDU4MDAwMDAwMDE2MTMwNDAwODRDMDM3QUNCMEIyMDAwMDAwMDBFNQorOjEwRDU5MDAwQTAwMDAwMEMwQjAwMDAzMkZGRkYwMDAwMDAwMDAwNzgyQworOjEwRDVBMDAwQTk0REIwMzAwMDAwRDAxMTgwMDAwMDgwMDI0MEIwQjYxQworOjEwRDVCMDAwMDAwMDE2MTM4MDAwMDA4MDEyNDBCMEI2MDAwMDAwMDA4QQorOjEwRDVDMDAwMDAwMDAwNzg2OTgxOTczNTAwMDAwMDAwMDAwMDg0MDhBMQorOjEwRDVEMDAwMEIwMDdDMzIwMDAwMDAwMDAwMDAwMDAwRTcyNTAxMzI1MworOjEwRDVFMDAwMDA0MjAwMDAwMDA4MDAwMDg3OEQyQTNBMDAwMDAwMDA3OQorOjEwRDVGMDAwMDAxMDAwMDAwNzAwQjAzMjAwMDAwMDAwMDAxODAwMDAxQQorOjEwRDYwMDAwMDcwMEQwMzIwMDAwMDAwMDEyMDEwMDQ4RjJDMTM4NTQ3NworOjEwRDYxMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEZGRkZEMQorOjEwRDYyMDAwMDAwMDAwODAwMjAwMDA5MDAwMDBEOTExMUM0MDAyODAyMAorOjEwRDYzMDAwMDZDMDkyQjI0NDAwMDAwMDAwMDEwMEY4QTI4RDJGNTJGMworOjEwRDY0MDAwMDAwMDAwMDAwMDAwMDA3ODA5QzU5MjMwMDAwMDE2MTNBOQorOjEwRDY1MDAwMDIwMTAwODA4MkJBOTdCQzAwMDAxNjEzMDYwMTAwODAwOAorOjEwRDY2MDAwOTJCQTk3QkMwMDAwMTYxMzEyMDAwMDY4MDJDNTkyQjA2RgorOjEwRDY3MDAwMDAwMDE2MTMwQjAwMDA4MDAyMDAwMEIwMjQwMDAwMDAyMAorOjEwRDY4MDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDAwMDAwMTQ3MworOjEwRDY5MDAwMDlDMDkyRDIwMDAwMDAwMDAwMDEwMDcwMUYwMEY3NUE3QworOjEwRDZBMDAwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMkMwMDAwMDAzRQorOjEwRDZCMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDAwMDAwMTQ0MworOjEwRDZDMDAwMDk4MDkyRDIwMDAwMDAwMEQ1MDgwMDAwMDc4MDkyMzI0NQorOjEwRDZEMDAwMDAwMDAwMDAwMDMwMDAwMDA3QzAyQzMyMDA0MDAwODAzNQorOjEwRDZFMDAwMDAzODAwMDAwNzAwMzczMjAwMDAwMDAwQ0E0MTAxRTBBNgorOjEwRDZGMDAwMDY4MDkyMzIwMDAwMTYxMzEyMDAwMDQ4MDJDMDgwQjI2OQorOjEwRDcwMDAwMDA2MDAwMDAwMDAxMDAwODA4ODAzNjcyMDAwMEZGRkY4MgorOjEwRDcxMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzODAwMDAwODBDRQorOjEwRDcyMDAwQTI4MDJGQjYwMDAwMTYxMzA0MDEwMDgwNjI4MDJEQkM3OQorOjEwRDczMDAwMDAwMDAwMDAwMDM4MDAwMDA3ODA5MjMyMDAwMDAwMDA2NgorOjEwRDc0MDAwMDAzMDAwMDAwN0MwMkMzMjAwMDAwMDAwQ0EzRDAwMEM3MQorOjEwRDc1MDAwMDc4MDgzMzIwMDAwMDAwMDEyMDEwMDQ4MDJDMDgwNzI3RQorOjEwRDc2MDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMEZGRkY4MAorOjEwRDc3MDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwMDQ1NzAxODBCQgorOjEwRDc4MDAwMDJDMDZFN0MwMDAwMDAwMDAwNTcwMUVDMDY4MDkyNzIxRgorOjEwRDc5MDAwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMDAwMDY0MTEwNAorOjEwRDdBMDAwMDAwMDAwMzAwMzAwMzhGMjMzMDAwMDAwMDAwMDAwMTBEOQorOjEwRDdCMDAwMDkwMDM2MzIxMDAwODAxMjAwMDAwMDE0MTlBMDJDRDk4NAorOjEwRDdDMDAwMDAwMEZCMTE5RDExMDIwQzA5MDA2RUIyMDAwMEZDMTE1QgorOjEwRDdEMDAwMDBGMDAxMUMwOTAwNkU5MjAwMDAwMDAwMDBCODAxMUM1RQorOjEwRDdFMDAwMDkwMDZFMzIwMDAwRkUxMTJDQ0QwMTE4MDk4MDZFQjJDNgorOjEwRDdGMDAwMDAwMDAwMDAwMDAwMDAwQ0M5QzE5MDM0MDAwMDAyMTJCQgorOjEwRDgwMDAwM0IyOTAyMDQwOTgwNkVCMjAwMDAxNjEzODBENjAxODAwNQorOjEwRDgxMDAwNTJDMDZFQjYwMDAwMDAwMDAwRDYwMUVDNTZDMDZFMzQ1NworOjEwRDgyMDAwMDAwMDAwMDAwMDAwMDAwQ0I5QzE5MDM0MDAwMDEyMTI4QQorOjEwRDgzMDAwMDBBODAxMDgwOTAwNkVGMjAwMDAwNjEyOUQwMTAwODA5OAorOjEwRDg0MDAwMTdFMDkwQkEwMDAwMDAwMDAwMzAwMDgwMDdDMDkxMzI1RAorOjEwRDg1MDAwMDAwMDA5MTIwMDM4MDA4MDA3MDBFRTkyMDAwMDA5MTI1MworOjEwRDg2MDAwMDQwMTAwODAwMkMwOTFCQzAwMDAwMDAwMDBCODAxRTA4QgorOjEwRDg3MDAwMDYwMEVFMzIwMDAwMDAwMDAwNzAwMUUwMDYwMDg2MzI3MworOjEwRDg4MDAwMDAwMDBDMTIzOTA4MDA4MDA3QzA4NUIyMDAwMDE2MTM5MgorOjEwRDg5MDAwODAwMDAwODBDMjgxMkZCNjAwMDAwMDAwRDlDOTAxRThENQorOjEwRDhBMDAwMDY4MDkxMzIwMDAwMDAwMEM4MTEwMDgwMDc0MDkwMzJDRAorOjEwRDhCMDAwMDAwMDBGMTIzQjIxMDA4MDA3MDA4NkIyMDAwMDAwMDAyQworOjEwRDhDMDAwREIwMDAwNjAxODAwODYzQTAwMDAwMDAwNTg3ODAxRTA5NAorOjEwRDhEMDAwMTYyMDg2M0EwMDAwMDAwMDAwMjkwMDgwMDcwMDg1NzJBQgorOjEwRDhFMDAwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTIwMAorOjEwRDhGMDAwMDIwQzAyODBBMjlCOTBCQzAwMDAwMDAwMDAwMDAyNzg5NQorOjEwRDkwMDAwMjkwMDZFMzYwMDAwMTYxMjAyMDAwMDgwRTJBNTkwQkNDRAorOjEwRDkxMDAwMDAwMDAwMDAwMDAwMDAwODA5MDAwMDMyMDAwMDE4MTI5QQorOjEwRDkyMDAwOUY4OTAxNzg0OTIxNkVCQzAwMDAwMDAwMDAwMDAwNzg0QQorOjEwRDkzMDAwMDkwMDAwMzIwMDAwMDAwMDAwMDAwMDA4RTlBNTkwM0Y0NworOjEwRDk0MDAwMDAwMDFFMTIwNDIwMDIwODg5OUI5MEJFMDAwMDAwMDAwNworOjEwRDk1MDAwMDAwQTAyNThCODlCOTAzNjAwMDAwMDAwMDAwMDAwNzhEMgorOjEwRDk2MDAwNDlBMTkwM0EwMDAwMDAwMDlGODgwMTgwODI5Qjk3N0MyQgorOjEwRDk3MDAwMDAwMDAwMDAwMDg5MDFFMDA2ODA5NzcyMDAwMDAwMDBBRQorOjEwRDk4MDAwMDAwQjAyNThCODlCOTA3NjAwMDBGRkZGMDAwMDAwODA1QgorOjEwRDk5MDAwMDIwMDAwOTAwMDAwMjcxMjgwMDEwMDgwQTI4MDJGQjZCNAorOjEwRDlBMDAwMDAwMDI1MTIxMjAxMDA3ODA5QzAyMUIyMTgwMDM2MDBDQgorOjEwRDlCMDAwMDAwMDAwRjg3MzBBMDNGOTAwMDAxNjEzMDQwMTAwODA0OAorOjEwRDlDMDAwMDI4MDJEQkMwMDAwMjcxMkNBMDAwMEQ4MDI0MDg0OTJCOQorOjEwRDlEMDAwMTUwMDE2MTMwNDAxMDA3OEU5NjUxN0I4MDAwMDAwMDA2RgorOjEwRDlFMDAwMDAwMDAwRjhBMjgwMkYzNTAwMDAxNjEzMDQwMTAwODAwQgorOjEwRDlGMDAwMDI0MDJEQkMwMDAwMTYxMzA0MDAwMDgwMDI4MDJEQkNFNAorOjEwREEwMDAwMDAwMDAwMDAwMDQwMDA2Qzg4MUM4MzNBMDAwMDAwMDAwOQorOjEwREExMDAwMDA0ODAwNEMwODAwNzIzMjAwMDAxNjEzMDg1MDAwMTgyRAorOjEwREEyMDAwQzgyMDcyQkMwMDAwMDAwMDA2MDAwMDgwNjJBMDgyN0M1QQorOjEwREEzMDAwMDAwMDE2MTM5RjAwMDAxNDE4NDA4MUJDMDAwMDE2MTM0QworOjEwREE0MDAwMDIwMDAwMjA4ODAxODJCQTAwMDAwMDAwMDAwMDAwRDgxNworOjEwREE1MDAwMDIwMDAwMzIwMDAwMDAwMDAwMDAwMDAwMDcwMDA2MzI1MworOjEwREE2MDAwMDAwMDE2MTMwNDAxMDA4MDAyMDAzNkJDMDcwMDAwMDAwRAorOjEwREE3MDAwMDAwODAwMDA3NzRBMDkzOTAwMDAwMDAwMDAxMDAwMDA4QgorOjEwREE4MDAwMDcwMDgyMzIwMDAwMDAwMENBMTkwMDAwMDc0MDgyMzJGRAorOjEwREE5MDAwMDAwMDE2MTMxMjAwMDA0MEYyQzEzOEI0MDAwMDAwMDA2QworOjEwREFBMDAwMDAwMTAwRDgwMjQwODQ3MjAwMDBGRkZGMDAwMDAwODBFNworOjEwREFCMDAwMDIwMDAwOTAyQjAwMDAwMDAwMDAwMDEwMDkwMDM2MzIyOAorOjEwREFDMDAwMDAwMDgwMTIwMDAwMDAxNDA5QzA4NUQyMDAwMDQyMTIzQworOjEwREFEMDAwODAwMTAwODBGMkMxODVCNjAwMDAzRTEyMUY0MDAyODQyMgorOjEwREFFMDAwRTYwMTAwQjQwMDAwNDIxMjFEMDEwMEY4MjI4MTJGQjRBQgorOjEwREFGMDAwMDAwMDQyMTIwMDAwMDBGODYyODEyRjk1MDAwMDQwMTJFMQorOjEwREIwMDAwMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwMDAwMDAwRjhDRAorOjEwREIxMDAwNjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwMDI0MDY4MzIyMAorOjEwREIyMDAwMDAwMDE2MTMxRjAxMDA4MDAyMDAwMEIwMDAwMDE2MTM1MQorOjEwREIzMDAwMTIwMDAwNjgwMkM1ODVCMDAwMDAwMDAwMDAwMDAwNzhGNworOjEwREI0MDAwMDlDNTg1MzAwMDAwMTYxMzAyMDEwMDgwODJCQTk3QkMxNworOjEwREI1MDAwMDAwMDE2MTMwNjAxMDA4MDkyQkE5N0JDMDAwMDAwMDA3NgorOjEwREI2MDAwMUQwMDAwODAwMjAwMDA3MDAxMDAwMDAwMDQwMTAwODAyMAorOjEwREI3MDAwQTI4RDJGNzAyQTAwMTYxMzEyMDAwMDJDODJDRDJFQjIxNworOjEwREI4MDAwMDAwMDAwMDAwMDAxMDBGODAyODEyRjc0MDAwMEZGRkY3OAorOjEwREI5MDAwMDAwMDAwODAwMjAwMDA5MDgwQTgwMDAwMDQwMDAwODBDNworOjEwREJBMDAwODI4RDJGNzAwMDAwNTIxMjgwMDEwMDgwRDI4MDJGQjYyQgorOjEwREJCMDAwMDAwMDE2MTM4MDAwMDA4MDcyODEyRkI2MDAwMDUyMTIwMAorOjEwREJDMDAwMDRCMDAwODAwMjAwNkVCQzAwMDAwMDAwMDAwMDAwRjhGRAorOjEwREJEMDAwNzI4MTJGMzQzRDAwNTUxMjEyMDEwMDJDODJDRDJFQjJERAorOjEwREJFMDAwMDAwMDE2MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDU1MTI5MworOjEwREJGMDAwODAwMTAwODBGMjgwMkZCNjNDMDA1ODEyMTIwMTAwMkNFOAorOjEwREMwMDAwODJDRDJFQjIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTBBQQorOjEwREMxMDAwMDAwMDU4MTI4MDAxMDA4MEIyODAyRkI2MzUwMDE2MTMyNAorOjEwREMyMDAwMTIwMDAwMkM4MkNEMkVCMjAwMDAwMDAwMDAwMDAwRjg4RgorOjEwREMzMDAwNDI4MTJGMzQ4MDAwMDAwMDA0MDAwMDgwODI4RDJGNzAwQworOjEwREM0MDAwMDIwMDAwMDAwNDAxMDA4MEEyOEQyRjcwM0IwMDE2MTMxQgorOjEwREM1MDAwMTIwMDAwMkM4MkNEMkVCMjAwMDAwMDAwMDAwMTAwRjg1RQorOjEwREM2MDAwMTI4MTJGNzQwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTA2RQorOjEwREM3MDAwMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2MDAwMDE2MTM0QgorOjEwREM4MDAwMDQzMTAyODBBMkRCMkNCQzA4MDAwMDAwMDAxODAxRTg2RgorOjEwREM5MDAwNzYyMDgxMzlFRUZGMDAwMDAwMDEwMEY4ODI4RDJGNzE5RgorOjEwRENBMDAwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMDAwMDY2MTJFQworOjEwRENCMDAwMDAwMDAxMzgwOEMwNkVGMjAwMDAwMDAwMTIwMTAwNDhBOAorOjEwRENDMDAwMDJDMDgwNzIwMDAwMTYxMzAwMDAwMDgwMDIwMDAwOTA2NQorOjEwRENEMDAwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMEUwMDAwMDAyNgorOjEwRENFMDAwMDAwMDAwMTAwOTAwMzYzMjAwMDA4MDEyMDAzODAxMTRENAorOjEwRENGMDAwMDkwMDZFRDIwMDAwNkExMjA0MzgwMTc4MDkwMDZFQjI4MQorOjEwREQwMDAwMDAwMDAwMDAwMDM4MDFFMDA2MDAwMDMyMDAwMDE2MTM5OQorOjEwREQxMDAwODAwMDAwODBBMjgwMkZCNjAwMDAwMDAwQ0ExMTAwMDAyMQorOjEwREQyMDAwMDc4MDgyMzIwMDAwNkUxMjJFMTkwMDAwMDc4MDk3QjIyMQorOjEwREQzMDAwMDAwMDAwMDAwMDAwMDAyOEU5ODE5MjM0MDAwMDczMTIwNgorOjEwREQ0MDAwMjczMTAwMDAwN0MwMkNCMjAwMDAwMDAwRDUwODAwMDBGOQorOjEwREQ1MDAwMDcwMDg3MzIwMDAwMDAwMEM3MDAwMDI4RTk4MDkyMzRFNQorOjEwREQ2MDAwMDAwMDAwMDAwMDQwMDFFMDA2MDA4NzMyMDAwMDAwMDBEMworOjEwREQ3MDAwMDAwMDAwMDhEODgxODAzNDEwMDAwMDAwMDAzOTAwMDA0NQorOjEwREQ4MDAwRTdBMDkyNzkwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTBGMQorOjEwREQ5MDAwMTQwMDAwMDAwMDAwMDAxMDA5MDAzNjMyMDAwMDgwMTI1QworOjEwRERBMDAwMDAwMDAwMTQwOTQwOTBEMjAwMDAxNjEzMTIwMDAwNDQzNQorOjEwRERCMDAwMTJFNDM4QjIxODAwMzYwMDAwMDAwMEY4NzMwQTAzRjlDNAorOjEwRERDMDAwMDAwMDdEMTIwNDAxMDA4MDAyODAyREJDMDAwMDE2MTNBQgorOjEwREREMDAwODAwMTAwODBBMjgwMkZCNjAwMDA3ODEyNjcwMDAwRjg1MgorOjEwRERFMDAwQTI4MDJGQjUwMDAwMTYxMzEyMDAwMEU4MDJDMDIxQjI3NQorOjEwRERGMDAwMDAwMDE2MTMwNDAxMDA4MDcyODAyREJDMDAwMDAwMDA5QQorOjEwREUwMDAwMDAwMTAwRDgwMjQwMDA3MjAwMDBGRkZGMDAwMDAwODAwNworOjEwREUxMDAwMDIwMDAwOTAxQjAwMDAwMDAwMDAwMDEwNzkwQTkxMzlGOAorOjEwREUyMDAwMEYwMDAwMDAwMDAwMDAxMDM5MEI5MTM5MEMwMDAwMDBCOQorOjEwREUzMDAwMDAwMDAwMTA1OTBBOTEzOTA5MDA4MzEyRjEwMTAwMTAwNQorOjEwREU0MDAwNjkwQjkxQjkwMzAwMDAwMDAwMjQ4NkE4ODI4RDZDMzcwRAorOjEwREU1MDAwMDAwMDAwMDAwMDAwODhFMDA3MDA5MTMyMDAwMDAwMDA5MAorOjEwREU2MDAwMDAwMDg4RTAwNzQwOTEzMjAwQzA4OTEyMDIwMTAwODA2MgorOjEwREU3MDAwODI4RDJBQkMwMDAwOEExMkUxMjQ4NkM4MDYwMDAwOTIyNgorOjEwREU4MDAwMDMwMDAwMDBFMTI0ODZDODg2OEQyQTM2MDAwMDAwMDBDOQorOjEwREU5MDAwMDAwMTAwODAwMjAwMDA1MDAwMDBGRkZGMDAwMDAwODAzMQorOjEwREVBMDAwMDIwMDAwOTAwMDAwOTIxMjA0MzAwMDgwODI5QjgxQkMyRQorOjEwREVCMDAwMDAwMDE2MTMwRDAxMDA4MDAyMDAwMEIwMDAwMDE2MTNEMAorOjEwREVDMDAwOUYzQzAwMTQyODgwNkVCQzAwMDAxNjEzODAwMDAwODA2OAorOjEwREVEMDAwQTI4MDJGQjYwMDAwMDAwMENBMDEwMEY4MDI4MDJGMzU5MgorOjEwREVFMDAwMDBBMDE2MTMxMjAwMDA0MEEyOEQzOUIyMDAwMDk0MTI1NworOjEwREVGMDAwODAzOTAwODBFMjgwNkVCNjAwMDAxNjEzODAzODAwODAwMgorOjEwREYwMDAwRjI4MDZFQjYwMEMwMTYxMzA0MDEwMDgwQTI4RDJGQjBGRgorOjEwREYxMDAwMDBDMDlBMTIwNDM4MDA3ODg5OEQ2RUIwMTAwMDlBMTJGMQorOjEwREYyMDAwOUYwMTAwRjhFMkE1MkZCOTAwMDAxNjEzMDQwMDAwODAzRAorOjEwREYzMDAwMDJDMEVFQkMwMDAwMDAwMDAwNTgwMUVDMDZDMEVFMzI0QQorOjEwREY0MDAwMDAwMDAwMDAwMDAwMDA4MDAyMDAwMDMwMDAwMDAwMDAxRgorOjEwREY1MDAwMDQyODAwMTgwOTAwNkU3MjAwMDBFMzBGMDAwMDAwODAyMgorOjEwREY2MDAwMDIwMDAwRjAwMDAwQzcwRjAwQTgwMTIwMDkwMDZFOTIxNworOjEwREY3MDAwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMDAwMEE3MTJEOAorOjEwREY4MDAwMDRCMDAwODA4MjlCODFCQzAwMDAxNjEzMEQwMTAwODA0QworOjEwREY5MDAwMDIwMDAwQjAwMDAwMTYxMzlGQkMwMDE0Mjg4MDZFQkM2NQorOjEwREZBMDAwMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2MDAwMDE2MTMxOAorOjEwREZCMDAwODBCODAwODA4MjgwNkVCNjAwMDAwMDAwMDBCODAwRThFMworOjEwREZDMDAwODY4MDZFMzQwMDAwMDAwMENBMDEwMEY4NDI4MDJGMzVDMAorOjEwREZEMDAwMDhBMDAwMDAxMjAxMDA0MEEyQ0QzOTcyMDAwMDE2MTMwMworOjEwREZFMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAxNjEzODBCODAwODAzRQorOjEwREZGMDAwODI4MDZFQjYwMDAwMDAwMDAwQjgwMEU4ODY4MDZFMzRCMworOjEwRTAwMDAwMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwMDAwMEZGRkYxRgorOjEwRTAxMDAwMDAwMDAwODAwMjAwMDA5MDI4MDAwMDAwMDAwMDAwMTBCNgorOjEwRTAyMDAwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MDk4MDkwRDJFRQorOjEwRTAzMDAwMDAwMEIwMTIzM0NEMDFCQzA4ODA2RUIyMDAwMEVFMTJCOQorOjEwRTA0MDAwMDAwMDAwMjgyOTIyRUVEQzAwMDBCNTEyMDAwMDAwODA0QworOjEwRTA1MDAwMDIwMDAwOTAwMDAwQjUxMjA0QjgwMTI4MDkwMDZFQjI1OQorOjEwRTA2MDAwMDAwMEI1MTI5RjcxMDE4MEMyMjE2RUJDMDAwMDE2MTMyMgorOjEwRTA3MDAwOUYwMDAwMjhBOTI0RUVCQzAwMDBFRTEyMDAwMDAwMjgzQQorOjEwRTA4MDAwMTk4MDkyREYwMDAwMDAwMDAwMDAwMDgwMDIwMDAwMzBENAorOjEwRTA5MDAwMDAwMEM5MTIwMjgxMDE4MDgyOUI5MEJDMDAwMDE2MTMwRgorOjEwRTBBMDAwMDQwMDAwODAwMjgwOTBCQ0VFMDVDMTEyMDYwQzAyODBDNAorOjEwRTBCMDAwODI4RDZFQkMwMDkwNEMwMDAwMDAwMDg0MDIwMDM3MzI1QworOjEwRTBDMDAwMDAwMEJCMTJCODAxMDA4MDAyMDAwMEIwMDAwMEI5MTJDRAorOjEwRTBEMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwQzQ2QQorOjEwRTBFMDAwMDM4MDkwMzIwMDAwMDAwMDAwQjAwMUUwOTYyMTZFM0NGOQorOjEwRTBGMDAwMDAwMDAwMDA2MTk4MDFFMDA2MDA4NzMyMDAwMDAwMDA4NworOjEwRTEwMDAwMDBENDAxRUMwNjAwMDAzMjAwMDAwMDAwQTgwMDAwNzhGNgorOjEwRTExMDAwNDk0MDNDMzcwMDAwQ0UxMjAwMDAwMDA4RTlBNTkwOUE2MworOjEwRTEyMDAwNjA4OTIwMDAwMDAwMDA4NDAyMDAzNzMyMDAwMEM0MTIyMQorOjEwRTEzMDAwQjgwMTAwODAwMjAwMDBCMDAwMDBDMjEyMDAwMDAwODBBMAorOjEwRTE0MDAwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMEM0MDM4MDkwMzIzNAorOjEwRTE1MDAwMDAwMDAwMDAwMEIwMDFFMDk2MjE2RTNDMDAwMDAwMDBDRAorOjEwRTE2MDAwNjE5ODAxRTAwNjAwODczMjAwMDAwMDAwMDBENDAxRUM1NQorOjEwRTE3MDAwMDYwMDAwMzIwMDAwQ0UxMkE4MDAwMDA4MTk4RjkwOUEwNQorOjEwRTE4MDAwMDAwMDAwMDAwMDAwMDA3ODk5QTE4OTNFMDAwMDAwMDAxNgorOjEwRTE5MDAwMDAwMDAwMDhFOUE1OTAzQTAwMDAwMDAwMDBCMDAxRTA4RQorOjEwRTFBMDAwOTYyMTZFM0MwMDAwMDAwMDYxOTgwMUUwMDYwMDg3MzI3NQorOjEwRTFCMDAwMDAwMDAwMDAwMEQ0MDFFQzA2MDAwMDMyMDAwMEQxMTI4MworOjEwRTFDMDAwMDYwMDAwODA3MkEyOTBCQzAwQzBGRjNGMDA4MDAxRTAwQQorOjEwRTFEMDAwMDYwMDM3MzIwMDAwMDAwMDAwMDAwMDA4MDlDMDg5MzI0NAorOjEwRTFFMDAwMDAwMEQ2MTIwNDc5MDE4MDgyMUI4N0JDMDAwMEQ0MTI4MworOjEwRTFGMDAwMDRCMDAwODAwMjAwNkVCQzAwMDBEOTEyRDk5MDAxRTA4QQorOjEwRTIwMDAwMDY4MDkwOTIwMDAwREMxMjgwMDAwMDgwNTI4MTJGQjZDMAorOjEwRTIxMDAwMDAwMERDMTJENTQxMDFFMDA2MDA4NzkyMDAwMEQ5MTIwRgorOjEwRTIyMDAwM0M5MDAxRTAwNjgwOTBCMjAwMDAxNjEzODAwMTAwODA0RgorOjEwRTIzMDAwOTI4MTJGQjYwMDAwMDAwMDAwQzgwMUU4MDZDMDhCMzJCMgorOjEwRTI0MDAwMDAwMDAwMDA5NTAxMDA4MDAyODAyRjcyMDAwMEREMTJBNgorOjEwRTI1MDAwOUY0MTAxODA4MjFCODdCQzAwMDAwMDAwMDAwMTAwODBGQworOjEwRTI2MDAwMDIwMDAwNzAwMDAwMDAwMEQ5OTAwMUUwMDY4MDkwMzJBQQorOjEwRTI3MDAwMDAwMDAwMDAwMDAxMDBGODcyODAyRjc0MDAwMEZGRkYxMgorOjEwRTI4MDAwMDAwMDAwODAwMjAwMDA5MDI3MDAwMDAwMDAwMDAwMTA0NQorOjEwRTI5MDAwMDkwMDM2MzIwMDAwODAxMjAwMDAwMDE0MDk0MDg3RDJDNQorOjEwRTJBMDAwMDAwMEU3MTI5RkQ4MDE4MDIyMjE2RUJDMDAwMDAwMDAxMAorOjEwRTJCMDAwMEIwMTAwODAwMjAwMDA3MDAwMDBFNzEyOUZFMDAxODA2NworOjEwRTJDMDAwQzIyMTZFQkMwMDAwMDAwMDBCMDEwMDgwMDIwMDAwNzA0MworOjEwRTJEMDAwMDAwMEU3MTI5RkIwMDE4MEQyMjE2RUJDMDAwMDAwMDA1OAorOjEwRTJFMDAwMDAwMTAwODAwMjAwMDA3MDAwMDBFOTEyMDY2ODAxODA1MQorOjEwRTJGMDAwODI1Qjg3QkMwMDAwMDAwMDAwNjgwMUUwMDY0MDg3MzJCNgorOjEwRTMwMDAwMDAwMEVCMTIzN0IwMDFFMDA2NDA4N0IyMDAwMDAwMDBDOQorOjEwRTMxMDAwMDAwMDAwRjhEMjgwMkYzNDAwMDAwMDAwMDBEODAxRTA5NworOjEwRTMyMDAwMDY4MDg0MzIwMDAwMDAwMDAwRTEwMUUwMDYwMDg3NzJGMAorOjEwRTMzMDAwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMDAwMDE2MTNBNAorOjEwRTM0MDAwMDgwMDAwODAwMjgwOTJCQzAwMDBGQjEyMDRDMTAxODQxRQorOjEwRTM1MDAwMDIwMDZFQjIwNTAwMDAwMDAwQzAwMUU4ODY4RDkyMzcxMQorOjEwRTM2MDAwMDMwMDAwMDAwMEM0MDFFODg2OEQ5MjM3MDAwMDAwMDAyMQorOjEwRTM3MDAwMDAwMDAwODAwMjAwMDAzMDAzMDAwMDAwMDBDMDAxMkNGQgorOjEwRTM4MDAwODk4RDZFMzYwMDAwMDAwMDAwQzQwMTJDQTlEQjkyM0E5MgorOjEwRTM5MDAwMDAwMDAwMDAwMDAwMDAyQzI5QzA5MjM2MDAwMDAwMDBBMAorOjEwRTNBMDAwMDAwMDAwMkMxOUZCOTIzRjAwMDAwMDAwMDAwMDAwMjgzNAorOjEwRTNCMDAwMjk4MDkyM0EwMDAwMDAwMDAwMDAwMDJDQTlFNDkyM0Y1RQorOjEwRTNDMDAwMDAwMDAwMDA2RkNDMDFFODI2RkI5MjNFMDAwMDAwMDAzOAorOjEwRTNEMDAwMDBCOTAxRTAwNjAwMDA1MjAwMDAwMDAwMDAwMDAwOTRCNworOjEwRTNFMDAwMDI4MDkyMzIwMDAwMDAwMDAwQzAwMUUwMDY0MDI4MzJBNgorOjEwRTNGMDAwMTAwMDAwMDA2RkNDMDFFODg2Q0QyQTM2MDAwMDAwMDAzNgorOjEwRTQwMDAwMDBCOTAxRTAwNjAwMDA1MjAwMDBGRkZGMDAwMDAwODA5QworOjEwRTQxMDAwMDIwMDAwOTAwMDAwMTYxMzA0QjAwMDgwMDIwMDZFQjJFQgorOjEwRTQyMDAwMDAwMDAwMDAwMDkwMDFCQzA4MDA2RTMyMDAwMDAwMDBGNworOjEwRTQzMDAwMDBCMDAxQkM4OERCOEIzRTAwMDAwMDAwMDA5ODAxQkNFRQorOjEwRTQ0MDAwODhEQjhCM0EwMDAwMEMxMzlGMDAwMEJDODhFMThCQkM3QQorOjEwRTQ1MDAwMDAwMDBDMTMwNDBDMDI0MEE4REI4QkJFMDAwMDAwMDA3RgorOjEwRTQ2MDAwMDBCMDAwMDQ4ODFCODQzRTAwMDAwOTEzMDRCMTAwODA0MgorOjEwRTQ3MDAwODI1QjgwQkMwMDAwMDAwMDAwMDEwMEY4QzI4MDJGNzRBNQorOjEwRTQ4MDAwMDAwMDAwMDAwNDBDMDI4MEEyNUI4MDdDMDAwMDBDMTNFMgorOjEwRTQ5MDAwMDQ2ODAxNzgxOTAwNkVCNjAwMDAwMDAwMDIwMDAwODBEOAorOjEwRTRBMDAwRTI2NTgwN0MyOTAwMDAwMDAwMDAwMDEwMDkwMDM2MzI3RgorOjEwRTRCMDAwMDAwMDgwMTIwMDAwMDAxNDA5QzA4QkQyMDAwMDAwMDA5MAorOjEwRTRDMDAwMDAwMDAwODgxMjAwMkMzQTAwMDBGRkZGMDAwMDAwODBDRQorOjEwRTREMDAwMDIwMDAwOTAwMDAwMTYxMzA0MzEwMjgwQTJEQjJDQkM2NQorOjEwRTRFMDAwMDAwMDE2MTM4MDAwMDA4MEEyODAyRkI2MDgwMDAwMDBGNAorOjEwRTRGMDAwMDAxQzAxRTg3NjIwODEzOUVFRkYwMDAwMDAwMTAwRjhFMQorOjEwRTUwMDAwODI4RDJGNzEwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTA0QworOjEwRTUxMDAwMDAwMDE2MTMwMDAwMDBCNDBGNDBGQjk0MDAwMDAwMDA0MAorOjEwRTUyMDAwMDAwMDAwODgwRjQwMkIzMjAwMDAwMDAwMDAwMDAwOTAyNworOjEwRTUzMDAwMEYwMDI4MzIwMDAwMDAwMDAwMDAwMDk0MEYwMDI5MzI3NAorOjEwRTU0MDAwMTAwMDAwMDAwMDAwMDBCODVGNDYxODM5RkYwMDAwMDAwRQorOjEwRTU1MDAwMDAwMDAwOUMwRjAwMzYzMjAwMDAwMDAwMDAwMDAwOUMwQworOjEwRTU2MDAwNUZDQUY5MzUwMDAwMDAwMDAwMDAwMDQ0MDNDMEY5MzIyMgorOjEwRTU3MDAwMDAwMDAwMDAwMDAwMDBFNDAzMDAwMDMyNDEwMDAwMTAzMQorOjEwRTU4MDAwMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwMDAwMDAwRTQ1QgorOjEwRTU5MDAwMDMwMDAwMzI0MDAwMDAxMDAwMDAwMEUwMDMwMDM3MzJBQQorOjEwRTVBMDAwMDAwMDI1MTM2NzAwMDA5ODBGODAyQUIyMDAwMDAwMDBDOQorOjEwRTVCMDAwMDAwMDAwQTgwMjAwMDAzMjAwMDAyMzEzMTJDMTg2RTAxMAorOjEwRTVDMDAwMDdDMDIxQjIwMDAwMDAwMDAwQjg4NkMwMDY4MDJBMzJEMQorOjEwRTVEMDAwNEM0MjAwMDAwMDAwMDBBODAyMDAzNjMyMjcxMzM4MTQxNQorOjEwRTVFMDAwMDAwMDAwQjAwRjAwMzY5MjAwMDAwMDAwMDAwMDAwOUMwOAorOjEwRTVGMDAwMDIwMDAwMzIwMDAxMjQxNDAwMDAwMEFDMEYwMDM2RDJFQgorOjEwRTYwMDAwMDAwMDAwMDAwMDAwMDBBQzBGODAyQTMyMDAyMDAwMDA1MworOjEwRTYxMDAwMDAwMDAwQTgwMjAwMzYzMjAwMDAwMDAwMDAwMDAwOUM0QworOjEwRTYyMDAwMEYwMDdFMzIwMDAwMDAwMDAwMDAwMEEwMEYwMDdFMzJDQworOjEwRTYzMDAwMDAwMDAwMDAwMDAwMDBBNDBGMDA3RTMyMDAwMDAwMDA3NworOjEwRTY0MDAwMDAwMDAwQTgwRjAwN0UzMjAwMDAwMDAwMDAwMDAwQThCQgorOjEwRTY1MDAwMDJDMEZBMzIwMDAwMDAwMDAwMDAwMEUwMDdDMEY5MzJGQQorOjEwRTY2MDAwMDAwMDAwMDAwMDAwMDBFMDA3MDBGQTMyMDAwMDAwMDA5NworOjEwRTY3MDAwMDAwMDAwRTAwNzQwRkEzMjAwMDAzQjEzMDAwMDAwRTAxOQorOjEwRTY4MDAwMDc4MEZBRDIwMDAwMDAwMDAwMDAwMEUwMDc4MEZCMzJBMworOjEwRTY5MDAwMDEwMDYyMTMwNDAxMDBCNDhGNERGQkIwMDIwMDAwMDBDMgorOjEwRTZBMDAwMDAwMDAwQTAwMjAwMDAzOTQwODAwMDAwMDAwMDAwMENDMworOjEwRTZCMDAwQUJDREIwMzIxMDAwMDAwMDAwMDAwMDBDNUJDQUIwMzlENgorOjEwRTZDMDAwMDAwMDAwMDAwMDAwMDAwQzJCRkVCMDMyMDAwMDYxMTRCRQorOjEwRTZEMDAwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwMDAwMDAwRjgzMAorOjEwRTZFMDAwMDMwMDAxMzIwMDAwMDAwMDAwMDEwMEUwMDc4MDNGNTJGQgorOjEwRTZGMDAwMTgwMDAwMDAwMDAwMDBGODczOEEwMjM5MDAwMDAwMDBEMgorOjEwRTcwMDAwMDAwMDAwNDQ1MzBBMTYzNTAwMDAwMDAwMDAwMDAwOUM4MQorOjEwRTcxMDAwMEY4MDk2MzIwMDAwMDAwMDAwMDAwMEEwMEZDMDk2MzI2QgorOjEwRTcyMDAwMDAwMDAwMDAwMDAwMDBBNDBGMDA5NzMyQTI2MDAzMDA2OAorOjEwRTczMDAwMDAwMDAwNTgwMzAwMzczMjQ4MTMwMDAwMDAwMDAwNUM1RQorOjEwRTc0MDAwMDMwMDM2MzIwMDAwMDAwMDAwMDAwMDUwODMwRDAwMzQ0QQorOjEwRTc1MDAwMDAwMDAwMDAwMDAwMDA0ODgzMEQwMDM0MDAwMDAwMDBBRAorOjEwRTc2MDAwMDAwMDAwNDQ1MzBBMDAzNDAwMDAzNjAwMDAwMDAwODAxRQorOjEwRTc3MDAwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMDY4MDlDMEY5MzJBQgorOjEwRTc4MDAwMDAwMDAwMDAwMDAwMDA2QzA5MDBGQTMyMDAwMDAwMDBFOAorOjEwRTc5MDAwMDAwMDAwNzAwOTQwRkEzMjAwMDA1QTEzMDAwMDAwODBBNworOjEwRTdBMDAwMDIwMDAwOTAwMjAwMDAwMDAwMDAwMEEwRjIwQjAwMzlGRgorOjEwRTdCMDAwMDAwMDRGMTM4MDAxMDA4MDEyNDBCMEI2MDAwMDAwMDAzRQorOjEwRTdDMDAwMDAwMDAwMDQzQjQwQjAzMzAwMDAwMDAwMDAwMDAwMDRFMworOjEwRTdEMDAwRkQ0QkQwMzUwMDAwNTMxMzAwMDAwMDBDMEIwMDk3OTI0NgorOjEwRTdFMDAwMDIwMDAwMDAwMDAwMDBBMEYyMEIwMDM5MDAwMDUzMTNFQgorOjEwRTdGMDAwMDAwMDAwMDQ2QjAxOTc5NDAwMDA1MzEzMTIwMDAwNjg5RQorOjEwRTgwMDAwMDk0MDIwQjIwMDAwNTQxMzEyMDAwMDZDMDk0MDIwQjJFRAorOjEwRTgxMDAwMEQwMDAwMDAwMDAwMDBGQ0EyRTUxNjM4MDAwMDU5MTNBRQorOjEwRTgyMDAwOUYwMDAwODAwMjgwOTZCMjAwMDAwMDAwMDAwMDAwNzA4RgorOjEwRTgzMDAwMDlDMDk2MzIwMDAwNUExMzAwMDAwMDZDMDlDMEZEOTIxNgorOjEwRTg0MDAwMDAwMDU5MTMxMjAwMDA3MDA5NDAyMEIyMDAwMDAwMDBCRgorOjEwRTg1MDAwMDAwMDAwOUMwMjAwMDAzMjAwMDAwMDAwMDAwMDAwRDgxMAorOjEwRTg2MDAwMDIwMDAwMzIwMjAwNTMxMzA0MDEwMEJDQUYyNTE3QjhBOAorOjEwRTg3MDAwMDYwMDUxMTMwNDAwMDBCQ0FGNjUxNkI4MDAwMDRDMTMyRAorOjEwRTg4MDAwMDQwMDAwODAyMkMwRkJCQzAwMDA2QTEzMDQwMDAwODA2QQorOjEwRTg5MDAwMTJDMUZCQkMyMDAwNTMxMzA0MDEwMDgwODJDREZCQkNERAorOjEwRThBMDAwMDIwMDAwMDAwMDAwMDBBMEYyMEIwMDM5MDAwMDZCMTMxMgorOjEwRThCMDAwMDAwMDAwODAwMjAwMDBEMDY0MTMwMDAwMDAwMDAwODgwNworOjEwRThDMDAwODJDREY5M0EwMDAwNUExNDAwMDAwMDgwMDIwMDAwOTA0NgorOjEwRThEMDAwMDAwMDkzMTMwMDAwMDA4MDAyMDAwMDkwMDAwMDk0MTNEOQorOjEwRThFMDAwMDAwMDAwODAwMjAwMDA5MDAwMDA5ODEzMDAwMDAwODBFQgorOjEwRThGMDAwMDIwMDAwOTAwMDAwQTAxMzAwMDAwMDgwMDIwMDAwOTBDMQorOjEwRTkwMDAwMDAwMEY5MTMwMDAwMDA4MDAyMDAwMDkwMDAwMDUzMTM4MworOjEwRTkxMDAwMDAwMDAwREMwRjAwOTc5MjAwMDAwMDAwMDAwMDAwMDBFMworOjEwRTkyMDAwMDcwMDAzMzI0MDQyMDAwMDAwMDAwMEE4MDIwMDM2MzIxNworOjEwRTkzMDAwMDAwMDAwMDAwMDA4MDAwMDA3ODAyQTMyMDAwMDAwMDBFQworOjEwRTk0MDAwMDAxMDAwMDAwNzAwOTczMjAwMDAwMDAwMDAxODAwMDBDRgorOjEwRTk1MDAwMDdDMDk2MzIwODgwNzAxMzEyMDAwMDQwMDI4MDM2QjI2MQorOjEwRTk2MDAwMDAwMDAwMDAwMDAwMDA4MDAyMDAwMDMwMDAwMDcyMTM3MAorOjEwRTk3MDAwMTIwMDAwOUMwRkMwMjFCMjFEMDA3NTEzMDQwMDAwODAxRQorOjEwRTk4MDAwNzJCRTE3QjgwMDAwNzIxMzAwMDAwMEY4MUU4MEVGOUFFNAorOjEwRTk5MDAwMTMwMDAwMDAwMDAwMDA5QzdGQkUxNzM4MDAwMDc4MTNCMQorOjEwRTlBMDAwMDQwMDAwODAxMkMwRjlCQzAwMDA3MjEzMDAwMDAwRjhERgorOjEwRTlCMDAwMUU4MEVGOUEwMDAwMDAwMDAwMDAwMDlDMEYwMDdFMzJENQorOjEwRTlDMDAwMDAwMDAwMDAwMDAwMDBBMDBGMDA3RTMyMDAwMDAwMDBFOAorOjEwRTlEMDAwMDAwMDAwQTQwRjAwN0UzMjAwMDAwMDAwMDAwMTAwMDBEMworOjEwRTlFMDAwMDcwMEZBNTIwMDAwMDAwMDAwMDAwMDlDMDIwMDAwMzIwNAorOjEwRTlGMDAwNEM0MjAwMDAwMDAwMDBBODAyMDAzNjMyMDAwMDAwMDA3NworOjEwRUEwMDAwMDAwODAwMDAwNzgwMkEzMjAwMDA0RTE0MDAwMDAwODAzOQorOjEwRUExMDAwMDIwMDAwRDAwMDAwNTIxNDAwMDAwMDgwMDIwMDAwRDA2QworOjEwRUEyMDAwMDAwMDAwMDAwMDAwMDAwQ0NCQzFCMDM0MDAwMDAwMDA2QQorOjEwRUEzMDAwMDAwMDAwOUMwMjAwMDAzMjAwMDAwMDAwMDAwMDAwRDgyRQorOjEwRUE0MDAwMDIwMDAwMzIwMDAwODExMTAwMDAwMDI4MDlDMEIwRDI4RAorOjEwRUE1MDAwMDAwMDgyMTMwNDAwMDA4MDAyODA5MkIyMDAwMDg2MTMzRQorOjEwRUE2MDAwMTIwMDAwOUMwRkMwMjFCMjFEMDA4OTEzMDQwMDAwODAxOQorOjEwRUE3MDAwNzJCRTE3QjgwMDAwODYxMzAwMDAwMEY4MUU4MEVGOUFERgorOjEwRUE4MDAwMTMwMDAwMDAwMDAwMDA5QzdGQkUxNzM4MDAwMDhDMTNBQworOjEwRUE5MDAwMDQwMDAwODAxMkMwRjlCQzAwMDA4NjEzMDAwMDAwRjhEQQorOjEwRUFBMDAwMUU4MEVGOUEwMjAwOEUxMzA0MDEwMEI0OEY0REZCQjA1QworOjEwRUFCMDAwMDAwMDUzMTMwMDAwMDA4MDAyMDAwMDkwMDgwMDAwMDBENgorOjEwRUFDMDAwMDAwMDAwRjg5MzQwMDEzOTAwMDAwMDAwMDAwMDAwQjQ4RAorOjEwRUFEMDAwMUY0MEZCMzVGRTAwMDAwMDAwMDAwMDQ4MDMwMDM2MzJGNgorOjEwRUFFMDAwMDAwMDAwMDAwMDAwMDA0NDAzMDAwMDM0MDAwMDgyMTMxNgorOjEwRUFGMDAwMDAwMDAwMEM4QkMxQjA5NDAwMDA1RTE0MDAwODAwMDAwMAorOjEwRUIwMDAwMDc0MEZBOTIwMDAwNEUxNDAwMDgwMDAwMDc0MEZBRDJCNQorOjEwRUIxMDAwMDg4MDk1MTMxMjAwMDA1MDAyODAzNkIyMDAwMDUzMTQ5MgorOjEwRUIyMDAwMDAwMDAwODAwMjAwMDBEMDAwMDA2MDE0MDAwMDAwODA5RgorOjEwRUIzMDAwMDIwMDAwOTAwMDA4MDAwMDAwMDAwMDlDMEYwMDM2MzIyOAorOjEwRUI0MDAwMDAwNDAxMDAwMDAwMDBBODAyMDAzNzMyMDAwMDAwMDBBRAorOjEwRUI1MDAwMDAwMDAwQTAwMjAwMDAzMjAwMDAwMDAwMDAwMDAwRTAwMQorOjEwRUI2MDAwMDcwMEIwMzIwMDAwMDAwMDAwMDAwMEEwMTIwMDJBM0FBNgorOjEwRUI3MDAwMDAwMDlCMTMwNDAxMDA5QzFGQzBGOUJDMDAwNDAxMDBBRAorOjEwRUI4MDAwMDAwMDAwQTgwMjAwMzczMjAyMDA1RDE0MDAwMDAwQTA1RgorOjEwRUI5MDAwRjIwQjAwOTkwMDAwQTgxMzA0MDEwMDgwMDI0MEZBQjJCMQorOjEwRUJBMDAwMDAwNDAxMDAwMDAwMDBBODAyMDAzNzMyMDAwMEFBMTM5MAorOjEwRUJCMDAwMDAwMDAwODAwMjAwMDBEMDAwMDBCNzEzMDAwMDAwODRCNQorOjEwRUJDMDAwMDIwMDAwRDIwMDAwMDAwMDAwMDAwMEUwMDdDMDNDMzI1QworOjEwRUJEMDAwMDAwMEE0MTM4RTAxMDA4MDAyNDAyOEIyMDAwNDAxMDA0RQorOjEwRUJFMDAwMDAwMDAwQTQwRjAwMzczMjAwMDA5MzEzMDAwMDAwODBFMworOjEwRUJGMDAwMDIwMDAwOTAwMDA0MDEwMDAwMDAwMEE0Q0Y0REZBM0E4QQorOjEwRUMwMDAwMDAwMDkzMTMwMDAwMDA4MDAyMDAwMDkwMDAwMDAwMDA0QworOjEwRUMxMDAwMDAwMDAwOUMwRjAwMDAzMjEwMDAwMDAxMDAwMDAwQUM1QQorOjEwRUMyMDAwMEYwMDM3MzIwMDAwQkMxMzAwMDAwMDgwMDIwMDAwRDA0QgorOjEwRUMzMDAwMDgwMEFDMTMwNDAxMDA4MDgyQ0RGOUJDMDAwMDAwMDA4NAorOjEwRUM0MDAwMDAwMDAwOUMwRjAwMDAzMjBFMDAwMDAxMDAwMDAwQUMyQworOjEwRUM1MDAwMEYwMDM3MzIwMDAwQkMxMzAwMDAwMDgwMDIwMDAwRDAxQgorOjEwRUM2MDAwMEIwMEIwMTMwNDAxMDA4MDgyQ0RGOUJDMjAwMDAwMDAyRAorOjEwRUM3MDAwMDAwMDAwOUMwRjAwMzYzMjBGMDAwMDAxMDAwMDAwQUNDNQorOjEwRUM4MDAwMEYwMDM3MzIwMDAwQkMxMzAwMDAwMDgwMDIwMDAwRDBFQgorOjEwRUM5MDAwMjcwMEI0MTMwNDAxMDA4MDgyQ0RGOUJDMDAwMDAwMDBGRAorOjEwRUNBMDAwMDAwMTAwODAwMjAwMDA1MDAwMDAwMDAwMDAwMDAwOUNGNQorOjEwRUNCMDAwMEYwMDAwMzIwRjAwMDAwMTAwMDAwMEFDMEYwMDM3MzJERgorOjEwRUNDMDAwMDAwMEJDMTMwMDAwMDA4MDAyMDAwMEQwMjAwMEI5MTMzNworOjEwRUNEMDAwMDQwMTAwODA4MkNERjlCQzAwMDAwMDAwMDAwMTAwODAyQQorOjEwRUNFMDAwMDIwMDAwNTAwMDAwMDAwMDAwMDAwMEU0MDNDMEY5MzIwMAorOjEwRUNGMDAwMEQwMDAwMDEwMDAwMDBFMDAzMDAzNzMyMDAwMDAwMDBCQQorOjEwRUQwMDAwMDAwMDAwRTAwM0MwRkEzMjAwMDAwMDAwMDAwMDAwRTA1NAorOjEwRUQxMDAwMDc0MDNFMzIwMDAwMDAwMDAwMDEwMDlDMUZDMEY5NUE2RAorOjEwRUQyMDAwMDAwMDAwMDAwMDAwMDBFMDAzQzBGOTMyMDAwMDAwMDAxNQorOjEwRUQzMDAwMDAwMDAwRTAwNzQwM0UzMjAwMDAwMDAwMDAwMDAwOUNBMAorOjEwRUQ0MDAwMUZDMEY5M0FGRjAwMDAwMDAwMDEwMEFDOEZDREY5NTA2MAorOjEwRUQ1MDAwMDAwMDAwMDAwMDAwMDA5QzBGQzAyRjMyMDAwMDAwMDBFNworOjEwRUQ2MDAwMDAwMDAwRkMwMjAwMDAzMjAwMDAwMDAwMDAwMDAwRTA5MworOjEwRUQ3MDAwMDc4MDNFMzIwMDAwMDAwMDAwMDAwMEZDMTJDMDJGM0E2NQorOjEwRUQ4MDAwMEYwMEM3MTMwNDAxMDA4MDgyQ0QyRkJDMDAwMDAwMDBEQgorOjEwRUQ5MDAwMDAwMDAwRTAwNzgwM0UzMjAwMDAwMDAwMDAwMTAwRkM5RgorOjEwRURBMDAwMDJDMEY5NTIwMDAwMDAwMDAwMDAwMEUwMDcwMDNBMzIwMworOjEwRURCMDAwMDAwMDAwMDAwMDAwMDBFMDA3NDAzQTMyMDAwMDAwMDBDMAorOjEwRURDMDAwMDAwMDAwRTAwNzgwM0EzMjAwMDAwMDAwMDAwMDAwRTA5MAorOjEwRUREMDAwMDdDMDNBMzIwMDAwMDAwMDAwMDAwMDlDMEZDMDJGMzIzNAorOjEwRURFMDAwMDAwMDAwMDAwMDAwMDBGQzAyMDAwMDMyMDAwMDAwMDBGMworOjEwRURGMDAwMDAwMDAwRTAwNzAwM0QzMjAwMDAwMDAwMDAwMDAwRTBERAorOjEwRUUwMDAwMDc0MDNEMzIwMDAwRDIxMzgzMDEwMEZDMTJDMDJGQkEyQworOjEwRUUxMDAwMDAwMDAwMDAwMDAxMDBGQzAyQzBGOTUyMDAwMDAwMDBFOAorOjEwRUUyMDAwMDAwMDAwOUMwRjAwMDAzMjBDMDAwMDAwMDAwMDAwMDhGMQorOjEwRUUzMDAwNzMzRTAwMzkwMDAwMDAwMDAwMDAwMEUwMDcwMDMwMzI5RgorOjEwRUU0MDAwMDAwMDAwMDAwMDAwMDA5QzFGQzBGOTNBNzAwMEQ3MTNCQQorOjEwRUU1MDAwMDQwMTAwODA4MkNERjlCQzAwMDAwMDAwMDAwMDAwMEMxRAorOjEwRUU2MDAwMDMwMDAwMzIwMDAwMDAwMDAwMDAwMEUwMDcwMDMwMzIyNAorOjEwRUU3MDAwMDAwMDAwMDAwMDAwMDAxMDAzMDAwMDMyMDAwMDAwMDA0RAorOjEwRUU4MDAwMDAwMDAwRTAwNzAwMzAzMjAwMDAwMDAwMDAwMDAwOUM5RAorOjEwRUU5MDAwMEYwMDAwMzIwMDAwMDAwMDAwMDAwMEEwMEZDMDI5MzI2NworOjEwRUVBMDAwMDAwMDAwMDAwMDAwMDA5QzAyQzBGOTMyMDAwMDAwMDBEOQorOjEwRUVCMDAwMDAwMDAwQTQwRkMwMkMzMjAwMDAwMDAwMDAwMDAwOUNFNQorOjEwRUVDMDAwMDIwMEZBMzIxODAwMDAwMDAwMDAwMDJDNzM3RUZBMzlBQworOjEwRUVEMDAwMDAwMDAwMDAwMDAwMDBFMDA3MDAzMDMyMDAwMEUwMTNGNgorOjEwRUVFMDAwODUwMTAwOUMxRkMwRjlCQTAwMDAwMDAwMDAwMTAwODBFRAorOjEwRUVGMDAwMDIwMDAwNTAwMTAwMDAwMTAwMDAwMDlDMEYwMDM3MzJBQQorOjEwRUYwMDAwMDAwMEMxMTMwMDAwMDA4MDAyMDAwMEQwMEUwMEVGMTNDQgorOjEwRUYxMDAwMDQwMTAwODA4MkNERkFCQzAwMDAwMDAwMDAwMDAwRTA4NworOjEwRUYyMDAwMDcwMDAwMzIwMDAwMDAwMDAwMDAwMEUwMDcwMDAwMzI4RgorOjEwRUYzMDAwMDAwMDAwMDAwMDAwMDBFMDA3MDAwMDMyMDAwMEU5MTNCQworOjEwRUY0MDAwMDAwMDAwOUMzRkMwRjk5QTFDMDBFOTEzMDQwMTAwODBGNgorOjEwRUY1MDAwODJDREZBQkMwMjAwQzExMzAwMDAwMDlDOEZDREY5REEwQgorOjEwRUY2MDAwMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDUwMDEwMDAwMDJDQgorOjEwRUY3MDAwMDAwMDAwOUMwRjAwMzczMjAwMDBDMTEzMDAwMDAwODAyOQorOjEwRUY4MDAwMDIwMDAwRDAwRTAwRjcxMzA0MDEwMDgwODJDREZBQkMwRAorOjEwRUY5MDAwMDAwMDAwMDAwMDAwMDBFMDA3MDAwMDMyMDAwMEYzMTM1MgorOjEwRUZBMDAwMDAwMDAwOUMxRkMwRjk5QTI2MDBGMzEzMDQwMTAwODBBMgorOjEwRUZCMDAwODJDREZBQkMwMDAwMDAwMDAwMDEwMDgwMDIwMDAwNTA3OQorOjEwRUZDMDAwMDAwMDAwMDAwMDAwMDBBODBGNDAyOTMyMDAwNDAxMDBFQQorOjEwRUZEMDAwMDAwMDAwQTgwMjAwMzczMjAwMDBFODEzMDAwMDAwODBBMworOjEwRUZFMDAwMDIwMDAwRDAwMDAwRjIxMzAwMDAwMDgwMDIwMDAwRDBGOAorOjEwRUZGMDAwMDAwMEM1MTMwMDAwMDA4MDAyMDAwMEQwMDAwMDAwMDBFNworOjEwRjAwMDAwMDAwMDAwRTAwNzgwMTgzMjAwMDAwMDAwMDAwMDAwRTA2RgorOjEwRjAxMDAwMDc0MDFBMzIwMDAwMDAwMDAwMDAwMEUwMDcwMDFBMzIyQQorOjEwRjAyMDAwMDAwMDAwMDAwMDAwMDBFMDA3ODAxQTMyMDAwMDAwMDAyRAorOjEwRjAzMDAwMDAwMDAwRTAwN0MwMUEzMjAwMDAwMDAwMDAwMDAwQTAzRAorOjEwRjA0MDAwMEYwMDAwMzJBMjYwMDMwMDAwMDAwMDU4MDMwMDM3MzJCNgorOjEwRjA1MDAwMEIxNDAwMDAwMDAwMDA1QzAzMDAzNjMyMDAwMDAwMDBDQQorOjEwRjA2MDAwMDAwMDAwOUMwRjgwMkEzMjAwMDAwQjE0MDQwMDAwODA3NgorOjEwRjA3MDAwMDI0MDI5QjIwMDAwMDAwMDAwMDAwMDUwODMzRTAwMzQyRQorOjEwRjA4MDAwMDAwMDAwMDAwMDAwMDA0ODgzM0UwMDM0MDAwMDAwMDA0MworOjEwRjA5MDAwMDAwMDAwNDQ1MzBBMDAzNDAwMDAwQzE0MDAwMDAwODhGMworOjEwRjBBMDAwMEY0MDJCOTIwMDAwMDAwMDAwMDAwMDkwMEYwMDI4MzI1QgorOjEwRjBCMDAwMDAwMDAwMDAwMDAwMDA5NDBGMDAyOTMyMDAwMDAwMDA1MgorOjEwRjBDMDAwMDAwMDAwOTgwRjgwMkEzMjAwMDAwMDAwMDAwMDAwQTgxNQorOjEwRjBEMDAwMDJDMEY5MzIxMTE0MzgxNDAwMDAwMEIwMEYwMDM2OTI0QgorOjEwRjBFMDAwMDcwMDE0MTQwNDAwMDA4MDgyNEQyOUJDMDAwMDAwMDBCOQorOjEwRjBGMDAwMDAwMDAwQTAxRjAwRkEzQTAwMDAwODE0MDAwMDAwOUM2NQorOjEwRjEwMDAwMEY4MDJBOTJDMDAxMDAwMDAwMDAwMEFDMEYwMDM2MzJEMAorOjEwRjExMDAwMDEwMDAwMDAwMDAwMDA5QzAyMDAzNjMyMDAwMDI0MTRCMAorOjEwRjEyMDAwMDAwMDAwODAwMjAwMDBEMDFGMDAxQTE0MDQwMDAwODBCQworOjEwRjEzMDAwODJDRDI5QkNDMDAwMDAwMDAwMDAwMEFDOEZDREZBM0E5RgorOjEwRjE0MDAwMDAwMDE2MTQwMDAwMDA5QzEyQzAyOTlBMDAwMEQ2MTM3QgorOjEwRjE1MDAwMDAwMDAwODAwMjAwMDBEMDAwMDBDQzEzMDAwMDAwODBGRQorOjEwRjE2MDAwMDIwMDAwRDAwMDAwMjIxNDA0MDAwMDgwNTI4QUZBQkM4MQorOjEwRjE3MDAwQTI2MDAzMDAwMDAwMDA1ODAzMDAzNzMyMjIxNDAwMDA5MAorOjEwRjE4MDAwMDAwMDAwNUMwMzAwMzYzMjAwMDAwMDAwMDAwMDAwNTA2OAorOjEwRjE5MDAwQTMzRTAwMzQwMDAwMDAwMDAwMDAwMDQ4QTMzRTAwMzRGRAorOjEwRjFBMDAwMDAwMDAwMDAwMDAwMDA0NDUzMEEwMDM0MDAwNDAxMDA4NQorOjEwRjFCMDAwMDAwMDAwQTQwRjAwMzczMjAwMDA5MzEzMDAwMDAwODAwRAorOjEwRjFDMDAwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMEM0MDJDMEZBMzJGQgorOjEwRjFEMDAwMDMwMDAwMDAwMDAwMDA5QzBGMDAzNjMyMDAwMDAwMDAxOQorOjEwRjFFMDAwMDAwMDAwQkMwRjQwMkYzMjAwMDAyQjE0MDQwMDAwOUNENAorOjEwRjFGMDAwMUZDMEY5QkMwMDAwMkExNDA0MDAwMDgwMDI0MDJGQjI5NgorOjEwRjIwMDAwMDAwMDI3MTQwMDAwMDBFMDA3MDAyQzkyMDAwMDI3MTRFMworOjEwRjIxMDAwMDAwMDAwRTAwNzAwMzY5MjAwMDAwMDAwMDAwMDAwRTA1RgorOjEwRjIyMDAwMDc0MDJDMzIwMDAwMDAwMDAwMDAwMEUwMDc4MDJDMzI3NAorOjEwRjIzMDAwMDAwMDAwMDAwMDAwMDBFMDA3QzAyQzMyMDAwMDAwMDBDOQorOjEwRjI0MDAwMDAwMDAwRTAwNzAwMkQzMjAwMDAwMDAwMDAwMDAwRTA5OAorOjEwRjI1MDAwMDc0MDJEMzIwMDAwMDAwMDAwMDAwMEUwMDc4MDJEMzI0MgorOjEwRjI2MDAwMDAwMDAwMDAwMDAwMDBFMDA3QzAyRDMyMDAwMDAwMDA5OAorOjEwRjI3MDAwMDAwMDAwRTAwN0MwRkIzMjAwMDAwMDAwMDAwMDAwRTBEQQorOjEwRjI4MDAwMDc4MDJGMzIwMDAwMDAwMDAwMDAwMEUwMDdDMDJGMzI4RQorOjEwRjI5MDAwMTgwMDAwMDAwMDAwMDBGODczMEEwMjM5MDAwMDAwMDBBNgorOjEwRjJBMDAwMDAwMTAwRTAwNzgwM0Y1MkZGMDAwMDAwMDAwMDAwNDQyMgorOjEwRjJCMDAwMDMwMDM2MzIwMDAwMDAwMDAwMDAwMEUwMDcwMEY5MzJEMQorOjEwRjJDMDAwMDAwMDAwMDAwMDAwMDBFMDA3NDAyODMyMDAwMDAwMDBCRAorOjEwRjJEMDAwMDAwMDAwRTAwNzgwRjgzMjAzMDAwMDAwMDAwMDAwOUNGRQorOjEwRjJFMDAwMEYwMDM2MzIwMDAwMDAwMDAwMDAwMEJDMEZDMDJCMzJCRgorOjEwRjJGMDAwMDAwMDQxMTQwNDAwMDA5QzFGQzBGOUJDMDAwMDQwMTQzMQorOjEwRjMwMDAwMDQwMDAwODAwMkMwMkJCMjAwMDAzRDE0MDAwMDAwRTBBOQorOjEwRjMxMDAwMDdDMDI4OTIwMDAwM0QxNDAwMDAwMEUwMDcwMDM2OTI2QworOjEwRjMyMDAwMDAwMDAwMDAwMDAwMDBFMDA3NDBGOTMyMDAwMDAwMDA4QgorOjEwRjMzMDAwMDAwMDAwRTAwNzQwMjkzMjAwMDAwMDAwMDAwMDAwRTA2QgorOjEwRjM0MDAwMDc4MDI5MzIwMDAwMDAwMDAwMDAwMEUwMDdDMDI5MzJEOQorOjEwRjM1MDAwMDAwMDAwMDAwMDAwMDBFMDA3MDAyQTMyMDAwMDAwMDA2QQorOjEwRjM2MDAwMDAwMDAwRTAwNzQwMkEzMjAwMDAwMDAwMDAwMDAwRTAzQQorOjEwRjM3MDAwMDc4MEY5MzIwMDAwMDAwMDAwMDAwMEUwMDdDMDJBMzJEOAorOjEwRjM4MDAwMDAwMDAwMDAwMDAwMDBFMDA3QzAyRjMyMDAwMDAwMDA3NQorOjEwRjM5MDAwMDAwMDAwRTAwNzQwMkIzMjAwMDAwMDAwMDAwMDAwRTAwOQorOjEwRjNBMDAwMDc4MDJCMzIwMDAwMDAwMDAwMDAwMEUwMDdDMEZCMzJBNQorOjEwRjNCMDAwMDAwMDAwMDAwMDAwMDA4ODAyMDBGQjMyMDAwMDAwMDA5NgorOjEwRjNDMDAwMDAwMDAwOUMwMjAwMDAzMjAwMDAwMDAwMDAwMDAwRDg5NQorOjEwRjNEMDAwMDIwMDAwMzIwMDAwMDAwMDAwMTAwMDAwMDcwMDk3MzIxOQorOjEwRjNFMDAwMDAwMDAwMDAwMDE5MDAwMDA3QzA5NjUyMDg4MDUyMTQ2NworOjEwRjNGMDAwMTIwMDAwNDgwMjgwMzZCMjAwMDAwMDAwMDAwMDAwODBDOQorOjEwRjQwMDAwMDIwMDAwMzAwMDAwNTQxNDEyMDAwMDlDMEZDMDIxQjIxMgorOjEwRjQxMDAwMUQwMDU3MTQwNDAwMDA4MDcyQkUxN0I4MDAwMDU0MTQ3OQorOjEwRjQyMDAwMDAwMDAwRjgxRTgwRUY5QTEzMDAwMDAwMDAwMDAwOUMwRQorOjEwRjQzMDAwN0ZCRTE3MzgwMDAwMDAwMDA0MDAwMDgwMTJDMEY5NUM5NQorOjEwRjQ0MDAwMDAwMDU0MTQwMDAwMDBGODFFODBFRjlBMDAwMDAwMDAzNQorOjEwRjQ1MDAwMDAwMDAwQjQwRjQwRkIzNTAwMDAwMDAwMDAwMDAwOUNERAorOjEwRjQ2MDAwMDIwMDAwMzI0QzQyMDAwMDAwMDAwMEE4MDIwMDM2MzJDOAorOjEwRjQ3MDAwMDAwMDAwMDAwMDA4MDAwMDA3ODAyQTMyMDAwMDRFMTQzRgorOjEwRjQ4MDAwMDAwMDAwODAwMjAwMDBEMDAwMDA1MjE0MDAwMDAwODA0NAorOjEwRjQ5MDAwMDIwMDAwRDAwMDAwMDAwMDAwMDAwMDBDQ0JDMUIwMzQxRQorOjEwRjRBMDAwMDAwMDAwMDAwMDAwMDA5QzAyMDAwMDMyMDAwMDAwMDA4QworOjEwRjRCMDAwMDAwMDAwRDgwMjAwMDAzMjAwMDA2QjE0MDAwMDAwMjg5OQorOjEwRjRDMDAwMDlDMEIwRDIwMDAwNjExNDA0MDAwMDgwMDI4MDkyQjIzMgorOjEwRjREMDAwMDAwMDY1MTQxMjAwMDA5QzBGQzAyMUIyMUQwMDY4MTRDQQorOjEwRjRFMDAwMDQwMDAwODA3MkJFMTdCODAwMDA2NTE0MDAwMDAwRjgyOAorOjEwRjRGMDAwMUU4MEVGOUExMzAwMDAwMDAwMDAwMDlDN0ZCRTE3MzhBQQorOjEwRjUwMDAwMDAwMDUzMTMwNDAwMDA4MDEyQzBGOUJDMDAwMDY1MTQxMQorOjEwRjUxMDAwMDAwMDAwRjgxRTgwRUY5QTAwMDAwMDAwMDAwMDAwRkNEMAorOjEwRjUyMDAwMDIwMDAwMzIwMjAwMDAwMDAwMDAwMEEwRjIwQjAwMzlDRgorOjEwRjUzMDAwMDAwMDZGMTQwNDAxMDAyODA5MzRCMEJBMDAwMDAwMDA3NAorOjEwRjU0MDAwMDAwMTAwMjgwOTAwMDA1MjAwMDAwMDAwMDAwMDAwQTg4RgorOjEwRjU1MDAwMjJDMDJGMzcwMDAwMDAwMDAwMDA4NEMwMzdBQ0IwMzI1QQorOjEwRjU2MDAwMDAwMDAwMDAwMDAwMDAwQzBCMDAwMDMyRkZGRjAwMDA1NAorOjEwRjU3MDAwMDAwMDAwQzBBRjREQjAzMDAwMDA3NTE0ODAwMDAwODA2NgorOjEwRjU4MDAwMDI0MEIwQjYwMDAwMDAwMDAwMDAwMEMwNkYwMUZDMzU3MgorOjEwRjU5MDAwMDAwMDAwMDAwMDAwMDAwMDA3M0YwMTMyMDA0MjAwMDBCMAorOjEwRjVBMDAwMDAwODAwMDA4NzhEMkEzQTAwMDAwMDAwMDAxMDAwMDBDQgorOjEwRjVCMDAwMDcwMEIwMzIwMDAwMDAwMDAwMTgwMDAwMDcwMEQwMzI0MQorOjEwRjVDMDAwMDAwMDAwMDAwMDAwMDBDMDNGQzEzODM0MDAwMDAwMDAwRgorOjEwRjVEMDAwMTIwMTAwNDhGMjAxRkM1NDAwMDA3QTE0MDAwMDAwODA3RgorOjEwRjVFMDAwMDIwMDAwOTAwMDAwRkZGRjAwMDAwMDgwMDIwMDAwOTA3OQorOjBDRjVGMDAwMDAwMDM2MDAwMDAwMDA4MDAyMDAwMDkwQzcKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS9zeGcvc2FoYXJhZG93bmxvYWRCLnN5cy5paGV4IGIvZmlybXdhcmUvc3hnL3NhaGFyYWRvd25sb2FkQi5zeXMuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzA5ODUyCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvc3hnL3NhaGFyYWRvd25sb2FkQi5zeXMuaWhleApAQCAtMCwwICsxLDMzODUgQEAKKzoxMDAwMDAwMDAyMDAwMDAwNUNEMzAwMDAwQzAwMDAwMDAwMDAwMDAwQjMKKzoxMDAwMTAwMEZGMUYwMDAwMDEwMDAwMDAwMDAwMDA4ODgyNEQyOTNBMDcKKzoxMDAwMjAwMDAwMDA0MDAzMDAwMDAwODAwMjAwMDA5MDAwMDAwOTAwNzIKKzoxMDAwMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDkwMDAwMDAwMDgwMjUKKzoxMDAwNDAwMDAyMDAwMDkwMDAwMDA5MDAwMDAwMDA4MDAyMDAwMDkwMDMKKzoxMDAwNTAwMDAwMDAwOTAwMDAwMDAwODAwMjAwMDA5MDAwMDAwOTAwN0MKKzoxMDAwNjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDkwMDAwMDAwMDgwRjUKKzoxMDAwNzAwMDAyMDAwMDkwMDAwMDA5MDAwMDAwMDA4MDAyMDAwMDkwRDMKKzoxMDAwODAwMEZFRkYwMDAwMDAwMDAwQUMwMjAwMzYzMjAwMDAzNjAwMjcKKzoxMDAwOTAwMDAwMDAwMEE4MDIwMDAwOTIwMDAwMzYxMDAwMDAwMDgwNUUKKzoxMDAwQTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNjYKKzoxMDAwQjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwQTIKKzoxMDAwQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwNTgKKzoxMDAwRDAwMDAyMDAwMDkwMDAwMDIwMDAwMDAwMDBEODBGODAyODkyNEQKKzoxMDAwRTAwMDAwMDAyMTAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyMjAwQUMKKzoxMDAwRjAwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMjMwMDAwMDAwMEQ4RTQKKzoxMDAxMDAwMDBGNDAyQjkyMDAwMDI0MDAwMDAwMDBEODBGODAyODkyOUUKKzoxMDAxMTAwMDAwMDAyNTAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyNjAwNzMKKzoxMDAxMjAwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMjcwMDAwMDAwMEQ4QUYKKzoxMDAxMzAwMDBGODAyODkyMDAwMDI4MDAwMDAwMDBEODBGODAyODkyMkQKKzoxMDAxNDAwMDAwMDAyOTAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyQTAwM0IKKzoxMDAxNTAwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMzYwMDAwMDAwMDk4QjAKKzoxMDAxNjAwMDFFODBFOTlBMDAwMDJDMDAwMDAwMDBEODBGODAyODkyMjEKKzoxMDAxNzAwMDAwMDAyRDAwMDAwMDAwRDgwRjgwMjg5MjAwMDAyRTAwMDMKKzoxMDAxODAwMDAwMDAwMEQ4MEY4MDI4OTIwMDAwMkYwMDAwMDAwMEQ4NDcKKzoxMDAxOTAwMDBGODAyODkyMDAwMDMwMDAwMDAwMDBENDBGMDAwMDkyNzEKKzoxMDAxQTAwMDAwMDAzMDAwMDAwMDAwRDQwRjQwMDA5MjAwMDAzMDAwM0EKKzoxMDAxQjAwMDAwMDAwMEQ0MEY4MDAwOTIwMDAwMzQwMDAwMDAwMEQ0NDIKKzoxMDAxQzAwMDBGQzAwMDkyMDAwMDMwMDAwMDAwMDBENDBGMDAwMTkyMjgKKzoxMDAxRDAwMDAwMDAzMDAwMDAwMDAwRDQwRjQwMDE5MjAwMDAzMDAwMDkKKzoxMDAxRTAwMDAwMDAwMEQ0MEY4MDAxOTIwMDAwMzAwMDAwMDAwMEQ0MTUKKzoxMDAxRjAwMDBGQzAwMTkyMDAwMDMwMDAwMDAwMDBENDBGMDAwMjkyRjYKKzoxMDAyMDAwMDAwMDAzMDAwMDAwMDAwRDQwRjQwMDI5MjAwMDAzMDAwRDcKKzoxMDAyMTAwMDAwMDAwMEQ0MEY4MDAyOTIwMDAwMzYxMDAwMDAwMDgwMjEKKzoxMDAyMjAwMDAyMDAwMDkwMDAwMDMwMDAwMDAwMDBENDBGMDAwMzkyOTQKKzoxMDAyMzAwMDAwMDAzMDAwMDAwMDAwRDQwRjQwMDM5MjAwMDAzMDAwQTYKKzoxMDAyNDAwMDAwMDAwMEQ0MEY4MDAzOTIwMDAwMzAwMDAwMDAwMEQ0QjIKKzoxMDAyNTAwMDBGQzAwMzkyMDAwMDAwMDAwMDAwMDBEMDVGM0YwMDM0OTgKKzoxMDAyNjAwMDAwMDAzNjEwMDQwMDAwODA0MkZGRkNCMDAwMDAwMDAwRDcKKzoxMDAyNzAwMDAwMDAwMDg4MTI4MEZEM0EwMDAwMzYxMDAwMDAwMDgwNjcKKzoxMDAyODAwMDAyMDAwMDkwMzYxMDM2MTAwMjAxMDA4MDgyOERGREJDMDUKKzoxMDAyOTAwMDAwMDAwMDAwMDAwMDAwODgxMjgwRkQzQTAwMDAwMDAwMEQKKzoxMDAyQTAwMDAwMDAwMEY4MDNDMDAxMzIzODAwMDAwMDAwMDEwMDg0QTMKKzoxMDAyQjAwMDgyNEQyODFBMDAwMDM2MDAwMDAwMDA3NDA5NDAwMDkyQTgKKzoxMDAyQzAwMDAwMDA0RjAwMDAwMDAwRkMwMjAwMDA5MjAwMDA0ODAwMDcKKzoxMDAyRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNEQwMDAwMDAwMDkwMkYKKzoxMDAyRTAwMDBFODAxODkyMDAwMDhGMDIwMDAwMDAwMDA4QzAyMDkyQ0IKKzoxMDAyRjAwMDAwMDA3RjAwMDAwMDAwMDAwODAwMjE5MjAwMDA4RDAyMzUKKzoxMDAzMDAwMDAwMDAwMDAwMDg0MDIxOTIwMDAwN0MwMDAwMDAwMDAwNzYKKzoxMDAzMTAwMDA4ODUyMTkwMDAwMEYyMDIwMDAwMDBFQzAyQzAyMjkyNDkKKzoxMDAzMjAwMDAwMDBDRTAzMDAwMDAwODAwMjAwMDA5MDAwMDA1NjAwOTQKKzoxMDAzMzAwMDAwMDAwMEZDMDI0MDE4OUQwMDAwNTEwMDAwMDAwMEQwQTkKKzoxMDAzNDAwMDAyMDAwMDkyMDAwMDIwMDMwMDAwMDA4MDAyMDAwMDkwRTQKKzoxMDAzNTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNDUKKzoxMDAzNjAwMDAwMDEwMDgwMDIwMDAwNzAwMDAwNEMwMDAwMDAwMDAwNEUKKzoxMDAzNzAwMDA5QzAyMTkyMDAwMDRBMDAxMjAxMDAwMDA4ODUyMkIwNDUKKzoxMDAzODAwMDE4MDAzNjAwMDAwMDAwRjg3MzhBMDI5OTAwMDA4NDAwMEIKKzoxMDAzOTAwMDZBMDAwMDgwMDIwMDAwQjAwODAwODQwMDAwMDAwMEY4M0QKKzoxMDAzQTAwMDIzNDAwMTk5MDAwMDAwMDAwMDAxMDBFODAyMDA5MDcyNjMKKzoxMDAzQjAwMDAwMDAzNjEwODAwMTAwODBCMjAwRTlCNjAwMDAzRTAzNjQKKzoxMDAzQzAwMDAwMDAwMDdDMUVDMEU3OUEwODAwMDAwMDAwMDAwMEY4NTIKKzoxMDAzRDAwMDEzNDAwMTM5MDAwMDMyMDMwMDAwMDAwOEI4MDEwMDk0MDYKKzoxMDAzRTAwMDAwMDAzNjEwMDMwMDAwNzgwOTQwMUFCRDAwMDAwMDAwMkMKKzoxMDAzRjAwMDAwMDAwMEEwRTEyNTAwMzQwODAwMDAwMDAwMDAwMEY4MjMKKzoxMDA0MDAwMEIzNDAwMTM5MDAwMDNFMDNCMjAwMDBEODAyMDAwMEIyNDAKKzoxMDA0MTAwMDAwMDA0MDA1MDAxMDAxRjgwMjAwNkU5MjAwMDA1OTAwMzMKKzoxMDA0MjAwMDBBMDEwMENDMDIwMDAwQjIwMDAwNkEwMDAzMDEwMEZDRDcKKzoxMDA0MzAwMDAyNDAxOUJEMDgwMDNFMDMwMDAwMDBGOEEzNDAwMTk5RTYKKzoxMDA0NDAwMDAwMDAwMDAwMDAwMDAwODQwMUMwMkYzMjAwMDAwMDAwMDYKKzoxMDA0NTAwMDAwMDAwMDkwRjEwMTAwMzQwMDAwMDAwMDAwMDAwMDk0NTIKKzoxMDA0NjAwMDAxQzAyRjMyMDIwMDVDMDBCMDAwMDBBMEYyMEIwMEI5MDYKKzoxMDA0NzAwMDAwMDA1RjAwMDQwMTAwODAwMkMwQjBCQzAwMDA2ODAwMDIKKzoxMDA0ODAwMEEwMDAwMDgwMDIwMDAwOTAwMDAwNjEwMDgwMDEwMDgwNTgKKzoxMDA0OTAwMEYyNEJEMEI2MDAwMDY4MDBBMDAwMDA4MDAyMDAwMDkwN0YKKzoxMDA0QTAwMDAwMDAwMDAwQTAwMDAwMDRGRDRCRDAzNDAwMDA2NjAwRjYKKzoxMDA0QjAwMDgwMDEwMDgwMTI4MUZDQjYwMDAwMkQwRjAwMDAwMEQ4RTIKKzoxMDA0QzAwMDAyMDAwMEQyMTgwMDAwMDAwMDAwMDBGODczMEEwMzM5OEYKKzoxMDA0RDAwMDY4MDAzNjAwMDAwMDAwQzAwMjAwMzY5MjAwMDAwNDBGRTEKKzoxMDA0RTAwMDAwMDAwMEQ4MDIwMDAwRDIxODAwMzYwMDAwMDAwMEY4MUEKKzoxMDA0RjAwMDczMEEwM0Y5MDAwMDU5MDAwMzAxMDBGQzAyNDAxOEJEMTMKKzoxMDA1MDAwMDAwMDA3QjAwMDMwMDAwRkMwMjQwMTlCRDAwMDAwMDAwNTkKKzoxMDA1MTAwMDAwMDAwMDk0MDFDMDJGMzIwMDAwMDAwMDAwMDAwMDgwQTUKKzoxMDA1MjAwMEYxMDEwMDM0MDAwMDAwMDAwMDAwMDA4NDAxQzAyRjMyRkYKKzoxMDA1MzAwMDAyMDA2RDAwQjAwMDAwQTBGMjBCMDBCOTAwMDA3MDAwRDYKKzoxMDA1NDAwMDA0MDEwMDgwMDJDMEIwQkMwMDAwNzkwMEEwMDAwMDgwNUYKKzoxMDA1NTAwMDAyMDAwMDkwMDAwMDcyMDA4MDAxMDA4MEYyNEJEMEI2RDMKKzoxMDA1NjAwMDAwMDA3OTAwQTAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNjAKKzoxMDA1NzAwMEEwMDAwMDA0RkQ0QkQwMzQwMDAwNzcwMDgwMDEwMDgwMTMKKzoxMDA1ODAwMDEyODFGQ0I2MDAwMDJEMEYwMDAwMDBEODAyMDAwMEQyM0UKKzoxMDA1OTAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOTc5MDAzNjAwRTMKKzoxMDA1QTAwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMDQwRjAwMDAwMEQ4RDYKKzoxMDA1QjAwMDAyMDAwMEQyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5QTgKKzoxMDA1QzAwMDAwMDA2QTAwMDMwMTAwRkMwMjQwMTlCRDAwMDA1OTAwNTAKKzoxMDA1RDAwMDAzMDEwMEZDMDI0MDE4QkQwODAwM0UwMzAwMDAwMEY4QzMKKzoxMDA1RTAwMEEzNDAwMTk5MDgwMDAwMDAwMDAwMDBGODczNDAwMTM5QTEKKzoxMDA1RjAwMDAwMDA4NDAwODAwMTAwODBFMjAxODBCNjAwMDA4MTAwREMKKzoxMDA2MDAwMDAwMDAwMDgwMDIwMDAwOTAwODAwRUQwMjBDMDAwMEY4REQKKzoxMDA2MTAwMDUzNDAwMUI5MDAwMDgzMDA4MDAxMDA4MEUyMDE4MEI2RjAKKzoxMDA2MjAwMDAwMDAzNjEwMTIwMDAwNjgwMjA1ODBCMDAwMDAzMjAzOUUKKzoxMDA2MzAwMDAwMDAwMDZDMUZDMEY2OUEwMDAwMDAwMDAwMDAwMDAwREYKKzoxMDA2NDAwMDA4MDU4MDMwMDAwMDAwMDAwMDAwMDBGQzAyMDAwMTMyQkMKKzoxMDA2NTAwMDAwMDAwMDAwMDAwMDAwMTAwODgwM0QzMjAwMDAwMDAwOTMKKzoxMDA2NjAwMDAwMDAwMEQ0MDIwMDAwMzIwMkEwMDAwMDAwMDAwMDAwRTAKKzoxMDA2NzAwMEE5MEQ4MDMyMDAwMDg4MDAxMjAwMDA1NDAyQTQzOEIyOTQKKzoxMDA2ODAwMDAwMDIwMDgwMDAwMDAwMkMwODAwMzczMjE4MDAzNjAwRkQKKzoxMDA2OTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDgwMDA0REQKKzoxMDA2QTAwMDA4ODA3MjMyMDAwMDkwMDA5RjAwMDA1QzA4MDA3MkIyNjcKKzoxMDA2QjAwMDg3MDA4RjAwODAwMTAwODA4MkNEODVCMDAwMDBBMTAwRkUKKzoxMDA2QzAwMDAwMDAwMDJDRDhDMTgyOTQwMDAwQTEwMDAwMDAwMDJDODIKKzoxMDA2RDAwMDg4QzE4Mjk0MDAwRjk5MDAwNDAxMDA4MDgyQ0Q4NUIwMEEKKzoxMDA2RTAwMDAwMDA5OTAwODAwMDAwODA0MjgxRkNCNjAwMDAzNjEwQjYKKzoxMDA2RjAwMDEyMDAwMDY4MDIwNTgwQjAwMDAwMDAwMDAwMDAwMDZDREQKKzoxMDA3MDAwMDFGQzBGNjNBMDAwMDAwMDAwMDAwMDBGQzAyMDAwMTMyQTkKKzoxMDA3MTAwMDAwMDA5NzAwMDQwMTAwREM0MzYwM0RCMzAwMDAzMjAzOTkKKzoxMDA3MjAwMDAwMDAwMEZDMDIwMDAwOTIxODAwMDAwMDAwMDAwMEY4MjkKKzoxMDA3MzAwMDczOEEwMzM5OTQwMDM2MDAwMDAwMDBDMDAyMDAzNjkyMkMKKzoxMDA3NDAwMDEwMDA5RjAwODcwMDAwNzg3OTIxMTZCODAxMDA5RjAwRjMKKzoxMDA3NTAwMDA0MDEwMDgwODI4RDk3QkM4NzAwQTgwMDg3MDAwMDc4ODQKKzoxMDA3NjAwMDg5Q0Q4NUIwMDAwMDlFMDAwNDAxMDA4MDEyODA5N0JDRjYKKzoxMDA3NzAwMDAwMDBBMTAwMDAwMDAwMkNEOEMxODI5NDAwMDBBMTAwNUMKKzoxMDA3ODAwMDAwMDAwMDJDODhDMTgyOTQwMDAwQTgwMDgwMDEwMDgwMzUKKzoxMDA3OTAwMEYyQzA4NUI2MDAwMEE4MDAwMDAwMDAyQzk4QzE4Mjk0MjkKKzoxMDA3QTAwMDAwMDBBNzAwODAwMTAwODBEMkMxODJCNjAwMDBBODAwMkUKKzoxMDA3QjAwMDgwMDEwMDgwNzI4MEZDQjYwMDAwMDAwMDAwMTgwMEE4RDQKKzoxMDA3QzAwMDQyM0Q3MjMwMDAwMDAwMDA1NDE4ODlGQ0YyQzA3QzMwQjkKKzoxMDA3RDAwMDAwMDBDQjAwODAwMTAwODBGMkMxODVCNjAwMDBBOTAwQjYKKzoxMDA3RTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQTMwMDgwMDAwMDgwNTQKKzoxMDA3RjAwMDgyODBGQ0I2MDAwMDAwMDA1NDAwMDBGQzAyMDAwMDMyQzEKKzoxMDA4MDAwMDgwMDA4MDIwMDAwMDAwODBDMkNEODUzMDAwMDBCRTAwNDYKKzoxMDA4MTAwMDBCMDAwMDgwMDIwMDAwQjAxODAwMDAwMDAwMDAwMDc4MEIKKzoxMDA4MjAwMDc5QTExNjM4MjAwMENCMDAwNDAwMDA4MDgyOEQ5N0JDOEYKKzoxMDA4MzAwMDAwMDBCNTAwODAwMTAwODA2MjgwRkNCNjg3MDBCNTAwMzIKKzoxMDA4NDAwMDg3MDAwMDc4ODlDRDg1QjAwMDAwQjEwMDA0MDAwMDgwRTkKKzoxMDA4NTAwMDEyODA5N0JDMDAwMEI1MDAwNDAxMDA4MDIyODA5N0JDODQKKzoxMDA4NjAwMDAwMDBCNTAwODAwMTAwODA3MkMxODVCNjEwMDAwMDAwNTQKKzoxMDA4NzAwMDAwMDAwMDc4Nzk2MTE2MzgwMDAwQkMwMDA0MDEwMDgwOTcKKzoxMDA4ODAwMDMyODA5N0JDMDAwMENCMDAwMDAwMDAyQ0I4QzE4Mjk0REQKKzoxMDA4OTAwMDAwMDBCQzAwODAwMTAwODA1MjgwRkNCNjAwMDBCQzAwNUIKKzoxMDA4QTAwMDgwMDAwMDgwNzJDMTg1QjYwMDAwQkMwMDgwMDEwMDgwMUQKKzoxMDA4QjAwMDAyQzE4NUI2MDAwMEJDMDA4MDAxMDA4MEQyQzE4NUI2QUYKKzoxMDA4QzAwMDE4MDAwMDAwMDAwMDAwNzg3OUUxMTYzODAwMDBCQzAwMzQKKzoxMDA4RDAwMDA0MDEwMDgwMzI4MDk3QkMwMDAwQ0IwMDAwMDAwMDJDOTcKKzoxMDA4RTAwMEM4QzE4Mjk0MDAwMDAwMDAwMDAwMDAwNDA4MDAwNDMyMjcKKzoxMDA4RjAwMDAwMDBDQjAwMDAwMDAwMkNBOEMxODI5NDA4MDAwMDAwN0EKKzoxMDA5MDAwMDAwMDAwMDc4NzkyMTE3MzgwMDAwQ0IwMDA0MDAwMDgwMzcKKzoxMDA5MTAwMDMyODA5N0JDMDAwMENCMDAwNDAxMDA4MDIyODA5N0JDOEQKKzoxMDA5MjAwMDFGMDAwMDAwMDAxMjAwMDg4OUNENzIzMDA1MDAwMDAwOTEKKzoxMDA5MzAwMDAwMTIwMDAwQjlEQzE3MzgwMDAwMDAwMDAwMDAwMEE4MTkKKzoxMDA5NDAwMDIyMDA5MDM3MDAwMENCMDA4MDAwODY4MDIyMjQ3Q0I2RjUKKzoxMDA5NTAwMDAwMDAzNjEwMTIwMDAwNjgwMjA1ODBCMDAwMDAwMDAwQTAKKzoxMDA5NjAwMDAwMDAwMEZDMDIwMDAxMzIwMDAwQzkwMDA0MDEwMERDQUMKKzoxMDA5NzAwMDQzNjAzREIzMDAwMDMyMDMwMDAwMDBGQzAyMDAwMDkyMUYKKzoxMDA5ODAwMDE4MDAwMDAwMDAwMDAwRjg3MzhBMDMzOUM2MDAzNjAwMjIKKzoxMDA5OTAwMDAwMDAwMEMwMDIwMDM2OTIwMDAwQ0UwMDEyMDEwMDYwOEMKKzoxMDA5QTAwMDA4NDAyM0IyMDA4MjAwMDAwMDAwMDAwODA4ODAzNjMyQjAKKzoxMDA5QjAwMDAwMDBDNTAwMDAwMDAwNjQxRjQwRjY5QTAwMDAzNjEwRDkKKzoxMDA5QzAwMDEyMDAwMDI0MDgwMDIzQjIwMDAwMzYxMDEyMDAwMDIwOUMKKzoxMDA5RDAwMDA4QzAyM0IyMDAwMDM2MTAxMjAwMDAxODA4ODAyM0IyQUQKKzoxMDA5RTAwMDAwMDAwMDAwMDAwMDAwRkMwMjAwMDEzMjAwMDBENTAwMDEKKzoxMDA5RjAwMDA0MDAwMERDNDM2MDNEQjMxODAwMDAwMDAwMDAwMEY4NzQKKzoxMDBBMDAwMDczOEEwMzM5RDEwMDM2MDAwMDAwMDBDMDAyMDAzNjkyMUMKKzoxMDBBMTAwMDAwMDAwMDAwMDAwMDAwRkMwMjAwODUzMjAwMDAwMDAwMjEKKzoxMDBBMjAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMDAwMDAwMEQwNjkKKzoxMDBBMzAwMDAyMDAwMDMyMDBDMEUxMDAxODAxMDAwQ0E4Q0QzRUIyNTcKKzoxMDBBNDAwMDAwMDBENTAwMTIwMDAwMzgwMjgwODFCMjAwMDAwMDAwRDIKKzoxMDBBNTAwMDAwMDAwMDNDMDIwMDgyMzIwMDAwMDAwMDAwMDAwMDMwNzQKKzoxMDBBNjAwMDAyNDA4MjMyMDAwMDAwMDAwMDAwMDAzNDAyMDA4NjMyQTIKKzoxMDBBNzAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjAwMDAwMDAwREUKKzoxMDBBODAwMDAwMDAwMDVDMUZDMEY1M0EwMDAwMzIwMzEyMDEwMDY4NEMKKzoxMDBBOTAwMDAyMDU4MEIwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQzcKKzoxMDBBQTAwMDAwMDAwMDAwMDAxODAwNzgwOTAwNzIzMjAwMjNFNDAwMDIKKzoxMDBBQjAwMDA0MDEwMDgwQTJDRDgyQjAwMDAwRTUwMDAwMDAwMDAwMkIKKzoxMDBBQzAwMDA5MDAwMDkyMDAwMDM2MTA5RjE2MDAwMDI5QzE3MkJDNzgKKzoxMDBBRDAwMDAwMDAwMDAwMDAxODAwMDAwNzgwODEzMjAwMDAwMDAwQzQKKzoxMDBBRTAwMDAwMjAwMDAwMDcwMDgyMzIwMDAwMDAwMDAwMjgwMDAwMDMKKzoxMDBBRjAwMDA3ODA5NzMyMTAwMDAwMDAwMDMwMDAwMDE3MjA5MDM5NjYKKzoxMDBCMDAwMDAwMDAwMDAwMDAzODAwMDAwN0MwODIzMjAwMDAwMDAwMzIKKzoxMDBCMTAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDAwMDAwMDAwQzkKKzoxMDBCMjAwMDA3NDA4MDMyMDAwMEVFMDA4MDAxMDA4MEEyQzE4MkI2NDIKKzoxMDBCMzAwMDAwMDBFRjAwMDAwODAwMDA1NzAwODA5NzA1MDAwMDAwNEIKKzoxMDBCNDAwMDAwMDgwMDAwMDdBMDA0MzkwMDAwMzYxMDA0MTAwMDAwNUYKKzoxMDBCNTAwMDA3NDA4MkIyMDAwMDAwMDAwMDE4MDAwMDA3MDA4NjMyNDMKKzoxMDBCNjAwMDAwMDBGMTAwMTIwMDAwNTBGMkMxMzhCNDE4MDAzNjAwNDUKKzoxMDBCNzAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMzYxMDEyMDAwMDY4NDQKKzoxMDBCODAwMDAyMDU4MEIwMDAwMEY0MDAxMjAwMDA0ODAyQzA4MEIyRUMKKzoxMDBCOTAwMDAwMDAzMjAzQ0EwMTAwMDhFODgxODA5NDA4MDAwMDAwQzgKKzoxMDBCQTAwMDAwMDAwMEY4OTM0MDAxMzkxMDAwMDAwMDU0MDAwMEZDRTAKKzoxMDBCQjAwMDgyNEQ5MDM2MDAwMEY4MDBGMDAxMDBEODAyMDAwMEIyMkIKKzoxMDBCQzAwMDAwMDAwMDAwNjIwNDAxQTgwMkMwNkUzMjAwMDAwMDAwQjQKKzoxMDBCRDAwMDAwMDQwMTAwNTlDMDZFMzcwMDAwMDAwMDAwMDQwMTc4RDUKKzoxMDBCRTAwMDE5QzA2RTNBMDAwMDAwMDA0RTA0MDFFQzA2QkQ5NzMwQkIKKzoxMDBCRjAwMDAwMDAwMDAwRTAwMDAwRjQxRTQwRUYzQTAwMDAwMDAwOUEKKzoxMDBDMDAwMDAwMTg4QkNDMDc0MDAwMzIwMDAwMDAwMDAwMDAwMDAwRkMKKzoxMDBDMTAwMDA3NDAwOTMyMDAwMDAwMDAwMDA4MDAwMDc3QzAyOTM3QjMKKzoxMDBDMjAwMDAwMDAzNjEwMDQxMDAwMDAxNzNEOTBCQTAwMDAwMDAwQ0MKKzoxMDBDMzAwMDAwMTgwMDAwMDc4MEY0MzIwMDAwMDMwMTEyMDAwMDQwOTkKKzoxMDBDNDAwMEYyQzEzOEI0MDAwMDAwMDAwMDAwMDBGQzMyQzAyRjMwQjgKKzoxMDBDNTAwMDAwMDAwMDAwMDAwMDAwMTAwODgwM0QzMjE4MDAzNjAwM0YKKzoxMDBDNjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ0M0YKKzoxMDBDNzAwMDAyMDAwMDMyMDAwMDkwMDE4MDM4MDA4MDIyQzA3MkI2NkQKKzoxMDBDODAwMDAwMDAwQzAxMTIwMDAwQzgwMjAwMjBCMjAwMDAxMzAxOTUKKzoxMDBDOTAwMDEyMDEwMDVDMDg4MDIwQjIwMDAwMzYxMDEyMDAwMDYwRDMKKzoxMDBDQTAwMDAyODAyQ0IyMTgwMDAwMDAwMDAwMDBGODczOEEwMzM5OUIKKzoxMDBDQjAwMDA5MDEzNjAwMDAwMDAwQzAwMjAwMzY5MjAwMDAwMDAwNkEKKzoxMDBDQzAwMDAwMDAwMEY4MUY4MEZGM0EwMDAwMDAwMDAwMDAwMEZDNTgKKzoxMDBDRDAwMDMyMDA4NTMwMDAwMDY4MDEwNDAwMDA4MDQyNjAzREIzQUUKKzoxMDBDRTAwMDE4MDAwMDAwMDAwMDAwRjg3MzhBMDMzOTBGMDEzNjAwNzUKKzoxMDBDRjAwMDAwMDAwMEMwMDIwMDM2OTIwODAwMDAwMDAwMDAwMDAwNjIKKzoxMDBEMDAwMDg4Q0Q4NTM3MDAwMDAwMDAwMDAwMDAyMDA4MDA3MjMyMDYKKzoxMDBEMTAwMDAwMDAwMDAwMDAwODAwMjQwODAwNzIzMjAwMDAzNjEwQjUKKzoxMDBEMjAwMDA0MTAwMDZDMDgwMDcyQjIwMDAwMDAwMDAwMTgwMDRDQjMKKzoxMDBEMzAwMDA4MDA3MjMyMDAwMDM2MTAwNDIwMDAxODA4MDA3MkIyNTkKKzoxMDBENDAwMDAwMDAwMDAwMDAzMDAwMjgwODAwNzIzMjAwMDAwMDAwOUYKKzoxMDBENTAwMDAwMjgwMDMwMDgwMDcyMzIwMDAwMDAwMDAwMDAwMDYwMkYKKzoxMDBENjAwMDA4ODA4MjMyMDAwMDIyMDEwNjAwMDA4MDYyQTA4MkJDNUUKKzoxMDBENzAwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMDYzMjA3MDAwMDAwMkQKKzoxMDBEODAwMDAwMDgwMDAwNzc0QTA5MzkwMDAwMzYxMDA0MTAwMDAwRkUKKzoxMDBEOTAwMDA3MDA4MkIyMDAwMDAwMDBDQTE5MDAwMDA3NDA4MjMyM0EKKzoxMDBEQTAwMDAwMDAyMTAxMTIwMDAwNDBGMkMxMzhCNDAwMDAwMDAwMzAKKzoxMDBEQjAwMDAwMDAwMEQ4MDI0MDAwMzIwMDAwNDcwMTA0MzgwMDc4RUIKKzoxMDBEQzAwMEQ5QzU3MkIwMDAwMDI2MDE4MDAxMDA4MDAyODA5N0I2NkMKKzoxMDBERDAwMDAwMDAwMDAwMDAwMDAwRjg4MjgwMkYzNDAwMDAyODAxOEQKKzoxMDBERTAwMDgwMDEwMDgwMTI4MDk3QjYwMDAwMDAwMDAwMDAwMEY4MkIKKzoxMDBERjAwMDkyODAyRjM0MDQwMDAwMDAwMDM4MDAzQ0I4MUMxNzM4RTMKKzoxMDBFMDAwMDAwMDAwMDAwMDAwMDAwM0MyOEMwODMzNzAwMDAwMDAwMDQKKzoxMDBFMTAwMDAwM0EwMDJDMDhDMDcyMzIwMDAwMDAwMDAwMDAwMDFDRTQKKzoxMDBFMjAwMEI4RTA4MzNBMDAwMDAwMDBDQjI5MDAyMDA3MDAwMDMyMjAKKzoxMDBFMzAwMDAwMDA0NjAxMDQwMDAwODAwMkMwODFCQzAwMDAwMDAwRTgKKzoxMDBFNDAwMDAwMDAwMDM0NzhBMDgxM0UwMDAwMDAwMDAwMDAwMDFDN0IKKzoxMDBFNTAwMEQ4RTA4MTNDMDAwMDM1MDEwNjNBMDA4MEIyNUM4M0JDREEKKzoxMDBFNjAwMDAwMDAwMDAwMDAzQTAwMDA4OUMxNzIzNzA3MDAzNDAxMTkKKzoxMDBFNzAwMDJCMDEwMDA0NzkwQTA0QjkwMDAwMDAwMENCMDAwMDA0MzMKKzoxMDBFODAwMDE5NDE5MDM0MDAwMDM4MDEwMDNBMDAyQzA3MDAwMDkyMEMKKzoxMDBFOTAwMDAwMDAwMDAwMDAzQTAwMkNEN0UwNzIzQzAwMDAwMDAwODcKKzoxMDBFQTAwMDAwMDAwMDAwMDkwMDAwMzIwMDAwMDAwMDAwMDAwMDA0MDMKKzoxMDBFQjAwMDA5MDAwMDMyMDAwMDAwMDAwMDAwMDAwMDA3NjQ4MzMyRDcKKzoxMDBFQzAwMDAwMDAwMDAwMDAwODAwMDAwNzAwODAzMjAwMDAzNjEwMUIKKzoxMDBFRDAwMDA0MTAwMDAwMDdDMDg2QjIwMDAwMDAwMDAwMTgwMDAwRTcKKzoxMDBFRTAwMDA3QzA4NDMyMDAwMDU1MDEwNDAwMDAyOEQ4QTA4MkJDNEQKKzoxMDBFRjAwMDAwMDAwMDAwMDAwMDAwMDBEODIwODAzQTAwMDA0MTAxRkUKKzoxMDBGMDAwMDA0MDAwMDgwNzI4MDJEQkMwMDAwM0YwMTEyMDAwMDQ0RUMKKzoxMDBGMTAwMDEyRTQzOEIyMDAwMDQyMDEwMDAwMDBEODEyODAyRDlBN0QKKzoxMDBGMjAwMDAwMDBCRDBGMDAwMDAwMDRGOTQxOTBGNDAwMDA0NDAxRUUKKzoxMDBGMzAwMDA0MDAwMDE4RDhBMDgxQkMwMDAwMkQwMTAwMDAwMDZDNDYKKzoxMDBGNDAwMEQ4RTA4NjlBMDAwMDdBMEYwMDAwMDA0NDA4ODAyREYyNTUKKzoxMDBGNTAwMDAwMDAyRDAxMDAwMDAwMzAwODAwMDA5MjAwMDAwMDAwOTkKKzoxMDBGNjAwMENCMTkwMDIwMDcwMDAwMzIwNzAwNDkwMTJCMDEwMDA0QzMKKzoxMDBGNzAwMDc5MEEwMkI5MDAwMDAwMDBDQjAwMDAwNDE5NDE5MDM0NDYKKzoxMDBGODAwMDAwMDAwMDAwNEQwMDAwMDBBN0EwODEzRTAwMDAwMDAwMEUKKzoxMDBGOTAwMDAwMDgwMDAwMDcwMDgwMzIwMDAwMzYxMDA0MTAwMDAwMzYKKzoxMDBGQTAwMDA3QzA4NkIyMDAwMDAwMDAwMDE4MDAwMDA3QzA4NDMyQUQKKzoxMDBGQjAwMDAwMDA1NTAxMDQwMDAwMjhEOEEwODJCQzAwMDAwMDAwRjkKKzoxMDBGQzAwMDAwMDAwMDAwRDgyMDgwM0EwMDAwNTIwMTA0MDAwMDgwOTgKKzoxMDBGRDAwMDcyODAyREJDMDAwMDUwMDExMjAwMDA0NDEyRTQzOEIyQUYKKzoxMDBGRTAwMDAwMDA1MzAxMDAwMDAwRDgxMjgwMkQ5QTAwMDBCRDBGQjAKKzoxMDBGRjAwMDAwMDAwMDA0Rjk0MTkwRjQwMDAwN0EwRjAwMDAwMDQ0NjIKKzoxMDEwMDAwMDA4ODAyREYyMDAwMDQ3MDEwMDAwMDAzMDA4MDAwMDkyMjcKKzoxMDEwMTAwMDAwMDAwMDAwMDAwMDAwMDRGOTQxOTAzNDAwMDA1NjAxNzcKKzoxMDEwMjAwMDEyMDAwMDQ0MTJFNDM4QjIxODAwMzYwMDAwMDAwMEY4NDQKKzoxMDEwMzAwMDczMEEwM0Y5MDAwMDAwMDAwMDE4MDAwNDA5ODA3MzMyRUQKKzoxMDEwNDAwMDAwMDAwMDAwMDAyODAwMDg4OTgwNzMzNzAwMDAwMDAwQkQKKzoxMDEwNTAwMDAwMDAwMDgwMDcwMDg2MzI0MTAwMDAwMDAwMDYwMDhDN0UKKzoxMDEwNjAwMDA3MDAzNjMyMDAwMDVGMDEyOTA4MDA4MDA3QzA4NUIyMDIKKzoxMDEwNzAwMDAwMDA2MjAxMjgxMDAwOEMwNzAwMDBCMjAwMDA2MzAxMkMKKzoxMDEwODAwMDAwMTIwMDg0MDcwMDAwOTIwMDAwMDAwMDAwMTAwMDhDOTUKKzoxMDEwOTAwMEY3RTA4MjNBMDAwMDYyMDEyODE4MDA4MDA3NDA5MEIyMTEKKzoxMDEwQTAwMDAwMDA2MzAxMDAxMjAwODQwNzAwMDA5MjAwMDAwMDAwQUQKKzoxMDEwQjAwMDAwMTIwMDg0MjdFNDgyMzIwMDAwNjYwMTA0MDAwMDgwRjAKKzoxMDEwQzAwMDQyNjAzREIzMTgwMDAwMDAwMDAwMDBGODczOEEwMzM5NDUKKzoxMDEwRDAwMDYzMDEzNjAwMDAwMDAwQzAwMjAwMzY5MjAwMDAwMDAwRUMKKzoxMDEwRTAwMDAwMDAwMEZDMDIwMDg1MzIwMDAwMzYxMDEyMDAwMDVDOTcKKzoxMDEwRjAwMDUyODEyQ0I0MDAwMDAwMDAwMDAwMDBEODAyODAwMTMyQjAKKzoxMDExMDAwMDAwMDAwMDAwMDAwMDAwODAwMjAwM0IzMjA4NDA2QTAxM0QKKzoxMDExMTAwMEYwMDEwMDA4MDg4MDM2QjIwMDAwMDAwMDAwMDQwMTM4MjkKKzoxMDExMjAwMDA4QzA2RTMyMDAwMDAwMDBFMDAwMDBGNDFFNDBFRjNDRkEKKzoxMDExMzAwMDAwMDA3MTAxMEIwMTAwOEMwODAwMDBCMjAwMDA2RTAxN0MKKzoxMDExNDAwMEYyMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEYwOEEKKzoxMDExNTAwMDBFMDAzQTMyMDAwMDgyMDFFMjAwMDA4MDBFODA4MzkyOEQKKzoxMDExNjAwMDAwMDA3MTAxRjIwMTAwNzhDOTNCM0FCQzAwMDA3QjAxMkMKKzoxMDExNzAwMDAyMDEwMDgwODI4MDk3QkMwMDAwMDAwMDAwMDAwMEE4RUYKKzoxMDExODAwMDAyMDBFODMyMDAwMDc2MDEwNDAwMDA4MDIyQTIyQUJDOUUKKzoxMDExOTAwMDAwMDA3QTAxMDQxOThCODAwMkMwN0NCQzAwMDAwMDAwQjIKKzoxMDExQTAwMDAwMDAwMDhDMThDMDg4M0EwMDAwMDAwMDAwMDAwMEE4NzEKKzoxMDExQjAwMDEyODAyQTNBMDAwMDAwMDAwMDAwMDBBODAyQkQyQTMwNzgKKzoxMDExQzAwMDAwMDA3NDAxMDQwMTAwODBFMkEwMkFCQzAwMDA3RjAxM0QKKzoxMDExRDAwMDAyMDAwMDgwODJDMDg4QkMwMDAwMDAwMEUyMDAwMDA4MUQKKzoxMDExRTAwMDA4MDAwMDMyMDAwMDAwMDAwMDAwMDBBODAyODA4ODMyRTEKKzoxMDExRjAwMDAwMDAwMDAwMDAxODhCQ0MwNzAwMDAzMjAwMDAzMjAzMTIKKzoxMDEyMDAwMDAwMDAwMERDMDMwMDAwOTIwMDAwMDAwMDAwMDAwMDM4MzUKKzoxMDEyMTAwMDA4ODAyQTMyMDAwMDAwMDAwMDAwMDBGMDBFMDAzQTMyODAKKzoxMDEyMjAwMDAwMDAwMDAwRTIwMDAwODAwRTgwMkEzMjAwMDAwMDAwNzIKKzoxMDEyMzAwMDAwMDAwMEE4MDI4MDg4MzIwMDAwMDAwMDAwMTg4QkNDNUIKKzoxMDEyNDAwMDA3MDAwMDMyMDAwMDAwMDAwMDAwMDBEQzAzMDAwMDMyNTQKKzoxMDEyNTAwMDAwMDAwMDAwMDAwMDAwMDAwNzgwODMzMjAwMDAwMDAwNTIKKzoxMDEyNjAwMDAwMDAwMDAwNzlDMDI5Mzc2MDIwMDAwMDAwMDAwMDAwNjUKKzoxMDEyNzAwMDg5MEQ5MDNBMDAwMDAwMDBDQTAxMDBEODEyODAyRDNBNzIKKzoxMDEyODAwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMDEzMjAwMDAwMDAwMjQKKzoxMDEyOTAwMDAwMDgwMDAwMDcwMDkwMzIwMDAwMDAwMDAwMTAwMDAwNkQKKzoxMDEyQTAwMDA3NDBFODMyMDAwMDAwMDAwMDE4MDAwMDA3ODBFODMyMjQKKzoxMDEyQjAwMDAwMDAwMDAwMDAwMDAwRkMwMjAwMDAzMjAwMDAzMjAzQzkKKzoxMDEyQzAwMDEyMDEwMDQ4RjJDMTM4QjQwMDAwOEUwMTAwMDAwMDgwMTUKKzoxMDEyRDAwMDAyMDAwMDkwMDAwMDAwMDAwMDMwMDA3ODA4ODA3MjMyQTgKKzoxMDEyRTAwMDA0MDAwMDAwMDAzODAwNTRBODVDMTYzODBCMDAwMDAwMTEKKzoxMDEyRjAwMDAwMzgwMDJDQThEQzE2MzgxNDAwMDAwMDAwMDAwMDFDODgKKzoxMDEzMDAwMDg4NEQ4NTNBMDAwMDAwMDAwMDAwMDAyMDA4MDA3MjMyN0QKKzoxMDEzMTAwMDAwMDAwMDAwMDAwODAwMjQwODAwNzIzMjAwMDAwMDAwRjUKKzoxMDEzMjAwMDAwMTAwMDZDMDgwMDcyMzIwMDAwMDAwMDAwMTgwMDRDMzEKKzoxMDEzMzAwMDA4MDA3MjMyMDAwMDM2MTAwNDIwMDAxODA4MDA3MkIyNTMKKzoxMDEzNDAwMDAwMDAwMDAwMDAyODAwMzAwODAwNzIzMjAwMDBBMTAxRjcKKzoxMDEzNTAwMDA4M0MwMDE0MTg4MDcyQkMwMDAwMDAwMDAwMDAwMDE0NUIKKzoxMDEzNjAwMDE4NDA4MTNDMDAwMDAwMDAwMDAwMDAwMDA3MDAwNjMyMjkKKzoxMDEzNzAwMDA3MDAwMDAwMDAwODAwMDA3NzRBMDkzOTAwMDAzNjEwMTUKKzoxMDEzODAwMDA0MTAwMDAwMDcwMDgyQjIwMDAwMDAwMENBMTkwMDAwMkIKKzoxMDEzOTAwMDA3NDA4MjMyMDAwMEEwMDExMjAwMDA0MEYyQzEzOEI0QzAKKzoxMDEzQTAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwMDAzMjAwMDAwMDAwRjEKKzoxMDEzQjAwMDAwMDAwMDY0NzhDMDI5MzcwMjEwMDAwMDAwMDAwMDY0QkIKKzoxMDEzQzAwMDg4NEQ4NjNBMDAwMDAwMDAwMDAwMDA4MDA4MDAwMDMyQ0UKKzoxMDEzRDAwMDAwMDAwMDAwMDAwMDAwNDAwODAwMDAzMjAwMDAwMDAwOTMKKzoxMDEzRTAwMDREMDAwMDAwNzdBMDgxM0UwMDAwMDAwMDAwMDgwMDAwRDIKKzoxMDEzRjAwMDA3NDA4NjMyMDAwMDM2MTAwNDEwMDAwMDA3QzA4NkIyOTUKKzoxMDE0MDAwMDAwMDAwMDAwMDAxODAwMDAwN0MwODQzMjAwMDBCOTAxOEQKKzoxMDE0MTAwMDA0MDAwMDFDRDhFMDgxQkMwMDAwMDAwMDAwMDAwMDY0NTMKKzoxMDE0MjAwMEQ4NjA4NjNBMDAwMEFGMDEwNDAwMDA4MDcyODAyREJDQjUKKzoxMDE0MzAwMDAwMDBBRDAxMTIwMDAwNDAwMkMwMzhCMjAwMDBCNTAxNEEKKzoxMDE0NDAwMDAwMDAwMEQ4MTI4MDJEOUEwMDAwQUYwMTEyMDAwMDQwNjkKKzoxMDE0NTAwMEYyQzEzOEI0MTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MkUKKzoxMDE0NjAwMDAwMDBCNDAxMDQwMTAwODAwMjgwMkRCQzAwMDBCMDAxMjYKKzoxMDE0NzAwMDY3MDAwMEY4QTI4MDJGQjUwMDAwMzYxMDEyMDAwMEU4QzcKKzoxMDE0ODAwMDAyQzAyMUIyMDAwMDAwMDAwMDAwMDBEODAyNDAwMDMyN0IKKzoxMDE0OTAwMDAwMDBCNzAxMDQwMDAwMThEOEEwODFCQzAwMDBBNjAxMUMKKzoxMDE0QTAwMDAwMDAwMDZDRDhFMDg2OUEwMDAwNUQwRTAwMDAwMDQ0NDkKKzoxMDE0QjAwMDA4ODAyREYyMDAwMEE2MDEwMDAwMDAzMDA4MDAwMDkyMTQKKzoxMDE0QzAwMDAwMDBCOTAxMTIwMDAwNDBGMkMxMzhCNDE4MDAzNjAwMjMKKzoxMDE0RDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwQkUwMTA0MDEwMDgwNTcKKzoxMDE0RTAwMDAyODAyREJDMDAwMEJBMDE2NzAwMDBGOEEyODAyRkI1NzEKKzoxMDE0RjAwMDAwMDAzNjEwMTIwMDAwRTgwMkMwMjFCMjAwMDBDOTAxNEQKKzoxMDE1MDAwMDA0MDEwMDgwMDIwMDg0QkMwMDAwMDAwMDAwMDAwMEQ0NDAKKzoxMDE1MTAwMDAyNDAwMDMyMDAwMDAwMDAwMDAwMDBBNDIyNDA4NTNBOTIKKzoxMDE1MjAwMDA0MDAwMDAwMDAxODAwNDA4OENENzQzNjAwMDAwMDAwNjAKKzoxMDE1MzAwMDAwMDAwMDQwMjgwMDg0MzcwMDAwMDAwMDAwMDAwMEQ0QjQKKzoxMDE1NDAwMDAyMDAwMDMyMTQwMEM5MDEwNDAwMDAxQzg4MEQ4NEJDOTQKKzoxMDE1NTAwMDAwMDAwMDAwMDAwMDAwNzgwOTYxODUzQTgwMDAzNjEwMjQKKzoxMDE1NjAwMDA2MDEwMDgwODI4RDk3QkMwMDAwMDAwMDAwMDAwMDY0MkUKKzoxMDE1NzAwMEQ4NjA4NjNBMDAwMEI1MDEwMDAwMDBEODAyNDAwMDkyMTEKKzoxMDE1ODAwMDAwMDBDQjAxMDQwMDAwMThEOEEwODFCQzAwMDBDRDAxRjAKKzoxMDE1OTAwMDAwMDAwMDZDRDhFMDg2OUEwMDAwNUQwRTAwMDAwMDQ0NTgKKzoxMDE1QTAwMDA4ODAyREYyMDAwMDAwMDAwMDAwMDAzMDA4MDAwMDMyMkEKKzoxMDE1QjAwMDAwMDAwMDAwMDAwMDAwRDQwMjQwMDAzMjAwMDAwMDAwRTMKKzoxMDE1QzAwMDAwMDAwMEE0MjJDMDgyM0EwMDAwMDAwMDAwMDAwMDNDOUQKKzoxMDE1RDAwMEI4NjA4NTNDMDQwMEQzMDE4MTAwMDA2MDg4Q0Q3NEI2RkEKKzoxMDE1RTAwMDAwMDAwMDAwMDAwNDAwMjhGOEEwNzUzQzAwMDBENDAxQjEKKzoxMDE1RjAwMDAwMDgwMDc0MDg4MDc1OTIwMDAwMDAwMDAwMDgwMDI4QjAKKzoxMDE2MDAwMEY4QTA3NTNDMDAwMDAwMDAwMDAwMDAyODA4QTE4MjNDMDIKKzoxMDE2MTAwMDAwMDAwMDAwMDAwMDAwQTRGMjYwMkEzQTAwMDAwMDAwNzAKKzoxMDE2MjAwMDAwMDgwMDQ4MDgwMDc1MzIwMDAwMDAwMDAwMjAwMDdDMUYKKzoxMDE2MzAwMDA4ODA3NTMyMDkwMERBMDEwNDFBMDA3MDg4Q0Q3NEIwOTAKKzoxMDE2NDAwMDA5MDAwMDAwMDAxQTAwNEM4N0NENzQzMTdGMDAwMDAwQjMKKzoxMDE2NTAwMDAwMDAwMDY0ODg0RDg2MzEwMDAwMDAwMDAwMDAwMDY0MzYKKzoxMDE2NjAwMDI4NDA4NjNBMDAwMDAwMDAwMDAwMDBEODAyNDAwMDMyMDYKKzoxMDE2NzAwMDAwMDAwMDAwMDAxMDAwMDAwNzQwODYzMjAwMDAwMDAwNUIKKzoxMDE2ODAwMDAwMDAwMEQ4MDI4MDAwMzIwMDAwMDAwMDAwMTAwMDAwQkUKKzoxMDE2OTAwMDU3NjE4NjNBMDAwMEUzMDExMjAwMDBDODAyMDAyMEIyNDAKKzoxMDE2QTAwMDAwMDBFNjAxMTIwMTAwNUMwODgwMjBCMjAwMDAzNjEwNDQKKzoxMDE2QjAwMDEyMDAwMDYwMDI4MDJDQjIwMDAwMEUwMTJBMDEwMEQ0NEEKKzoxMDE2QzAwMDAyMDAwMEIyMTgwMDM2MDBDQTAwMDBGODczMEEwM0Y5REQKKzoxMDE2RDAwMDAwMDAwRjAxMDAwMDAwRjgxRjgwRkY5QTAwMDAwMDAwQ0EKKzoxMDE2RTAwMDAwMDAwMEQ0MDI0MDAwMzIwODAwMDAwMDAwMDAwMDAwQUEKKzoxMDE2RjAwMDg4Q0Q4NTM3MDAwMDAwMDAwMDAwMDAxQ0U4QTE4MjNFNzQKKzoxMDE3MDAwMDAwMDAwMDAwMDAwMDAwQTQyMjQwODUzQTAwMDAwMDAwMTQKKzoxMDE3MTAwMDAwMDgwMDUwMDc4MDg0MzIwMDAwRUQwMTA0MDEwMDgwQzEKKzoxMDE3MjAwMDcyQTA4MkJDMDAwMDAwMDAwMDFBMDA0Q0M3RTE3NDMyQjUKKzoxMDE3MzAwMDAwMDAwMDAwMDAwMDAwNjgwOEUxODEzQTAwMDBGMDAxQUMKKzoxMDE3NDAwMDkwMDEwMDc4RjlBMTg2QkEwMDAwMDAwMDAwMDAwMDc4M0UKKzoxMDE3NTAwMDE5ODA5NzNBMDAwMDAwMDAwMDIwMDA1ODA3ODA5NzMyNTcKKzoxMDE3NjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDAzMjAwMDAwMDAwRUQKKzoxMDE3NzAwMDAwMDAwMDAwMDcwMDg0MzIwMDAwMDAwMDQwMDgwMDAwNjQKKzoxMDE3ODAwMDU3MjE4MDNBMDAwMEY0MDExMjAwMDA0Q0YyQzEzOEI0MzUKKzoxMDE3OTAwMDAwMDAwMDAwMDAwMDAwMDAwODIxODAzQTAwMDAwMDAwNjYKKzoxMDE3QTAwMDAwMDAwMDA0MDhDMDgxMzIwMDAwMDAwMDUxMDAwMEQ4OTEKKzoxMDE3QjAwMDAyQzAwMDMyMDAwMDAwMDAwMDAwMDBENDAyMDAwMDMyMkQKKzoxMDE3QzAwMDAwMDAwMDAwQ0IxOTAwMjAwNzAwMDAzMjA3MDBGQzAxRDgKKzoxMDE3RDAwMDJCMDEwMDg0NzgwQTAyQjkwMDAwMDAwMENCMDAwMDg0Q0QKKzoxMDE3RTAwMDE4NDE4ODM0MDAwMDAwMDA0RDAwMDAwMDc3QTA4MTNFQzEKKzoxMDE3RjAwMDAwMDAwMDAwMDAwODAwMDAwNzAwODAzMjAwMDAzNjEwRTIKKzoxMDE4MDAwMDA0MTAwMDAwMDdDMDg2QjIwMDAwMDAwMDAwMTgwMDAwQUQKKzoxMDE4MTAwMDA3QzA4NDMyMDAwMDM2MTA5RjAwMDAyOEQ4QTA4MkJDODgKKzoxMDE4MjAwMDAwMDAxNDAyMDQwMDAwMUNEOEUwODFCQzAwMDAwODAyODMKKzoxMDE4MzAwMDJEMDAwMDAwRDgyMDgwQkEwMDAwMDUwMjEyMDEwMEU4NDcKKzoxMDE4NDAwMDAyQzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5NDQKKzoxMDE4NTAwMDAwMDAwNzAyMDQwMTAwODAyMjgwMkRCQzAwMDAwODAyNjUKKzoxMDE4NjAwMENEMDEwMEQ4MDI0MDg0OTIwMDAwMDQwMjAwMDAwMEY4N0MKKzoxMDE4NzAwMEEyODAyRjk1MDAwMDBCMDIwNDAwMDA4MDcyODAyREJDMTYKKzoxMDE4ODAwMDAwMDAwOTAyMTIwMDAwNDQxMkUyMzhCMjAwMDAxMjAyMDUKKzoxMDE4OTAwMDAwMDAwMEQ4MTI4MDJEOUEwMDAwMDAwMDAwMDAwMDg0OTMKKzoxMDE4QTAwMEY4NDE4ODM0MDAwMDBDMDIxMjAwMDA0NDEyRTIzOEIyMDEKKzoxMDE4QjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAxMTAyNTYKKzoxMDE4QzAwMDA2MDEwMDgwMjI4MDJEQkMwMDAwMEQwMjY3MDAwMEY4OTgKKzoxMDE4RDAwMEEyODAyRkI1MDAwMDBFMDIwMDAwMDBFODAyQzAyMTkyOTUKKzoxMDE4RTAwMDAwMDAwMDAwMDAwMDAwRDgwMkMwMDAzMjAwMDA1RDBFQzEKKzoxMDE4RjAwMDAwMDAwMDQ0MDg4MDJERjIwMDAwRkEwMTAwMDAwMDMwRDIKKzoxMDE5MDAwMDA4MDAwMDkyMDAwMDFBMDI4MDAwMDA4MEQyODAyRkI2RUEKKzoxMDE5MTAwMDAwMDAxNzAyMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwRDAKKzoxMDE5MjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMTkwMjA0MDEwMDgwQTYKKzoxMDE5MzAwMDIyODAyREJDMDAwMDFBMDIwMDAwMDBEODAyNDA4NDkyRDAKKzoxMDE5NDAwMDAwMDAxNjAyMDAwMDAwRjhBMjgwMkY5NTAwMDAwMDAwQTEKKzoxMDE5NTAwMENEMDAwMDg0Rjg0MTg4MzQwMDAwMUIwMjEyMDAwMDQ0Q0UKKzoxMDE5NjAwMDEyRTIzOEIyMDAwMDAwMDAwMDAwMDBENDAyNDAwMDMyNTEKKzoxMDE5NzAwMDAwMDAwMDAwMDAwMDAwQTQyMkMwODIzQTAwMDAyMzAyMDAKKzoxMDE5ODAwMDA0MDEwMDgwNDIwMDg2QkMwMDAwMDAwMDAwMDgwMDU4RUUKKzoxMDE5OTAwMDA3NDA4NzMyMDAwMDIyMDI4RjAxMDA3NDE4NDA4N0JBODYKKzoxMDE5QTAwMDAwMDAwMDAwMDAwMDAwNzQwODAwMDAzMjAwMDAyNTAyNjIKKzoxMDE5QjAwMDAwMDQwMDU4RjdBMDg2OUEwMDAwMDAwMDAwMDAwMDc4OUMKKzoxMDE5QzAwMEY5QTA4NjNBMjgwMDAwMDAwMDA4MDA1ODg3OEQ5NzNDNEYKKzoxMDE5RDAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwMDAzMjE4MDAwMDAwQTMKKzoxMDE5RTAwMDAwMDAwMDAwQjc2MDg1MzkwODAwMDAwMDAwMDgwMDAwMTIKKzoxMDE5RjAwMDg3Q0Q4NTM3MDAwMDI4MDIxMjAwMDA0Q0YyQzEzOEI0QjAKKzoxMDFBMDAwMDAwMDAwMDAwMDAwMDAwNDgxOEEwODQzQTAwMDAwMDAwMTgKKzoxMDFBMTAwMDAwMDAwMEQ0MDIwMDAwMzIwMDAwMDAwMDAwMDAwMDgwM0UKKzoxMDFBMjAwMDU3QTE4NjNBNDEwMDAwMDAwMDA2MDA4QzA3MDAzNjMyQkMKKzoxMDFBMzAwMDAwMDAwMDAwMDAwODAwODAwN0MwODUzMjAwMDAwMDAwQTAKKzoxMDFBNDAwMDAwMTAwMDhDMDc0MDg1MzIwMDAwMDAwMDAwMDAwMEQ4MjQKKzoxMDFBNTAwMDAyODAwMDMyMDAwMDM2MTAwNDAwMDA1ODA4ODA3MUIyODUKKzoxMDFBNjAwMDAwMDAwMDAwMDAwMDAwODAwODgwMDAzMjE4MDAzNjAwRUUKKzoxMDFBNzAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMzUwMjA0MDEwMDgwMzkKKzoxMDFBODAwMDAyODAyREJDMDAwMDMyMDIwMDAwMDBGOEEyODAyRjk1RDkKKzoxMDFBOTAwMDAwMDAzMjAyMDQwMTAwODAxODAwODhCQzAwMDAzODAyRjcKKzoxMDFBQTAwMDkwMTkwMDU4RTg5Qzg1QkEwMDAwMDAwMDAwMDAwMDU4MUEKKzoxMDFBQjAwMDE4ODA4NTNBMDAwMDAwMDAwMDE4MDA4MDA3ODU4NTMwRjYKKzoxMDFBQzAwMDAwMDAzRDAyMDQwMTAwODA0MjAwODZCQzAwMDAwMDAwQ0UKKzoxMDFBRDAwMDAwMDAwMEQ4MDI0MDAwMzIwMDAwMDAwMDAwMDAwMDA4QjIKKzoxMDFBRTAwMDg5ODA3MTM3MDAwMDNFMDIwMDEyMDA4NDI3RTQ4MjkyNTAKKzoxMDFBRjAwMDAwMDAwMDAwMDAxMjAwODQwNzAwMDAzMjAwMDA0MjAyRDMKKzoxMDFCMDAwMDI3MDAwMEZDMDIwMDg1QjIwMDAwNDIwMjA0MDAwMDgwQjEKKzoxMDFCMTAwMDQyNjAzREIzMTgwMDAwMDAwMDAwMDBGODczOEEwMzM5RUEKKzoxMDFCMjAwMDNFMDIzNjAwMDAwMDAwQzAwMjAwMzY5MjAwMDAzNjEwNkYKKzoxMDFCMzAwMDEyMDAwMDVDNTI4MTJDQjQwMDAwNDUwMjA0MDEwMDgwQjgKKzoxMDFCNDAwMDAyODA4MkJDMDAwMDY4MDEwMDAwMDBENDAyMDAwMDkyMDQKKzoxMDFCNTAwMDAwMDA0ODAyMDQwMTAwMThEOEEwODFCQzAwMDA1RDBFRkUKKzoxMDFCNjAwMDAwMDAwMDQ0MDg4MDJERjIwMDAwRTAwMUM3MDEwMDMwQjEKKzoxMDFCNzAwMDA4MDAwMDkyMDAwMEUwMDFDNzAxMDA2Q0Q4RTA4NjlBREUKKzoxMDFCODAwMDA4MDAwMDAwQzYwMTAwRjg5MzQwMDEzOTAwMDAzMjAzNEMKKzoxMDFCOTAwMDgwMDE4MDgwMzIwQjZBQjYwMDAwMEMwRTAwMDAwMDNDMTEKKzoxMDFCQTAwMDAzMDAzOEYyMDAwMDRFMDIwNDA2MDE4MDAyQzA2RUJDNDEKKzoxMDFCQjAwMDAwMDAzMTAzMDAwNjAxRUM1NkUwNkU5QTAwMDAwMDAwQzAKKzoxMDFCQzAwMEM0MDcwMUVDNTZFMDZFM0EwOEMwNEYwMjEyMDAwMDQwMTQKKzoxMDFCRDAwMEEyQ0QzOUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5RUMKKzoxMDFCRTAwMDAwMDAzNjEwMDNCODAwMDAwOUMwNkVCRDUzMDIwMDAwQUIKKzoxMDFCRjAwMDAwMDAwMDg4ODIwRDkwM0EyRjAwN0MwNTAwMDAwMDFDMzgKKzoxMDFDMDAwMDA4MDAzNjkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQUMKKzoxMDFDMTAwMDJDMDA3QzA1MDAwMDAwMUMwODAwMzY5MjAwMDAzNjEwRTUKKzoxMDFDMjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwREMKKzoxMDFDMzAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQkEKKzoxMDFDNDAwMDM4MDA3QzA1MDAwMDAwMUMwODAwMzY5MjM5MDA3QzA1MzUKKzoxMDFDNTAwMDAwMDAwMDFDMDgwMDM2OTIwODAwMDAwMDAwMDAwMEY4OTgKKzoxMDFDNjAwMDkzNDAwMTM5MDAwMDBDMEUwMDAwMDAzQzAzMDAzOEYyRTQKKzoxMDFDNzAwMDAwMDAwMDAwMDAwMDAwRjg0MjgwMkYzNDA4QzA1RTAyMUYKKzoxMDFDODAwMDEyMDAwMDQwQTJDRDM5QjIxODAwMzYwMDAwMDAwMEY4NjIKKzoxMDFDOTAwMDczMEEwM0Y5MDAwMDAwMDAwMDA0MDE3ODA5QzA2RTMyRTUKKzoxMDFDQTAwMDAwMDAwMDAwMDA2MjAxRUMwNjgwOTczMjAwMDAwMDAwOTYKKzoxMDFDQjAwMDAwMDYwMUVDMDY0MDAwMzIwMDAwNjMwMkI1MDAwMEQ4QzcKKzoxMDFDQzAwMDAyMDAwMEIyMDAwMDAwMDBBNTAwODBBMDM2MEI2QTM0QkMKKzoxMDFDRDAwMDAwMDAwMDAwMDAzMDAyRTgwNkMwMkMzMjAwMDAwMDAwQzYKKzoxMDFDRTAwMDAwMTgwMUUwMDYwMDAwMzIwMDAwMDAwMDAwMDAwMEY4Q0IKKzoxMDFDRjAwMDgyODUyRjMwMDAwMDdEMDUwMDAwMDAxQzA4MDAzNjkyMTAKKzoxMDFEMDAwMDA4MDAwMDAwMDAwMDAwRjg5MzQwMDEzOTAwMDA2QzAyNTgKKzoxMDFEMTAwMDgwMDA4MDgwMzIwQjZBQjYwMDAwMzIwMzAwMDAwMDgwMzEKKzoxMDFEMjAwMDAyMDAwMDkwMDAwMDBDMEUwMDAwMDAzODAzMDAzOEYyQTIKKzoxMDFEMzAwMDAwMDA2RjAyMDQwMjAxODAwMkMwNkVCQzAwMDAzMTAzOEIKKzoxMDFENDAwMDAwMDIwMUVDNTZFMDZFOUEwMDAwMDAwMEMwMDMwMUVDQjYKKzoxMDFENTAwMDU2RTA2RTNBMDBDMDcwMDIxMjAwMDA0MEEyOEQzOUIyMDcKKzoxMDFENjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDA3QzAyMzYKKzoxMDFENzAwMDM4MjgwMDE4MDkwMDZFQjIwMDAwNzUwMjA0MjEwMTA4MUQKKzoxMDFEODAwMDY5MjQ2RUJDMDMwMDdEMDUwMDAwMDAxQzA4MDAzNjkyMkIKKzoxMDFEOTAwMDAwMDA3OTAyMDIzMDAwODA4MjlCOTBCQzAwMDA3ODAyMzMKKzoxMDFEQTAwMDA2MDMwMTgwMTJDMDZFQkMwNDAwN0QwNTAwMDAwMDFDMEIKKzoxMDFEQjAwMDA4MDAzNjkyMDUwMDdEMDUwMDAwMDAxQzA4MDAzNjkyRTAKKzoxMDFEQzAwMDAwMDA3QjAyMDYwMzAxODAxMkMwNkVCQzBCMDA3RDA1ODMKKzoxMDFERDAwMDAwMDAwMDFDMDgwMDM2OTIwQzAwN0QwNTAwMDAwMDFDNkQKKzoxMDFERTAwMDA4MDAzNjkyMDAwMDdFMDIwNDIxMDEwODY5MjQ2RUJDQkUKKzoxMDFERjAwMDAzMDA3RDA1MDAwMDAwMUMwODAwMzY5MjAwMDA4MjAyRUUKKzoxMDFFMDAwMDAyMzAwMDgwODI5QjkwQkMwMDAwODEwMjA2MDMwMTgwQUEKKzoxMDFFMTAwMDEyQzA2RUJDMDQwMDdEMDUwMDAwMDAxQzA4MDAzNjkyNTQKKzoxMDFFMjAwMDA1MDA3RDA1MDAwMDAwMUMwODAwMzY5MjAwMDA4NDAyQjkKKzoxMDFFMzAwMDlGMzEwMTBDNjkyNDZFQkMwMDAwMDAwMDAwMDAwMDBDMDIKKzoxMDFFNDAwMDA5MDAwMDMyMDAwMDg4MDIwNDMxMDAwNDg5OUI5MEJDMjQKKzoxMDFFNTAwMDAwMDA4NzAyMDYwMzAxODAxMkMwNkVCQzIwMDA3RDA1RDEKKzoxMDFFNjAwMDAwMDAwMDFDMDgwMDM2OTIyMTAwN0QwNTAwMDAwMDFDQzcKKzoxMDFFNzAwMDA4MDAzNjkyMDAwMDhBMDIwNDAyMDE4MDEyQzA2RUJDODMKKzoxMDFFODAwMDIyMDA3RDA1MDAwMDAwMUMwODAwMzY5MjAwMDA4QzAyMzQKKzoxMDFFOTAwMDA0MDEwMDAwMzlBNDkwQkMyMzAwN0QwNTAwMDAwMDFDNTMKKzoxMDFFQTAwMDA4MDAzNjkyMjQwMDdEMDUwMDAwMDAxQzA4MDAzNjkyRDAKKzoxMDFFQjAwMDA4MDAzNjEwMEMwMDAwRjg2MzQwMDFCOTEwMDA5MTAyRDAKKzoxMDFFQzAwMEM1MDEwMENDMDIyMDE1OTgwODAwRUQwMjBDMDAwMEY4QjYKKzoxMDFFRDAwMDQzNDAwMUI5MTAwMDAwMDBDNTAxMDBDQzAyMjAxNTM4QjQKKzoxMDFFRTAwMDAwMDAwQzBFMDAwMDAwM0MwMzAwMzhGMjAwMDA5NDAyRDkKKzoxMDFFRjAwMDM2MDEwMDVDMDgwNTgwQjAwRjAwN0QwNTAwMDAwMDFDNjUKKzoxMDFGMDAwMDA4MDAzNjkyMTAwMDAwMDAwMDJDMDIwMEE5REI4NTM5ODEKKzoxMDFGMTAwMDAwMDA5NTAyMTIwMDAwNTQwMkE0MzhCMjAwMDAwMDAwMzQKKzoxMDFGMjAwMDAwMDgwMjhDMDhDMDZFMzIwMDAwMDAwMDAwMEMwMjk4MEQKKzoxMDFGMzAwMDI4ODA2RTM3MDAwMDAwMDAwMDAwMDA5QzM4MjIxNDM3MTMKKzoxMDFGNDAwMDAwMDA5RTAyMDQzMDAwMjgwODAwNkVCMjAwMDAzNjEwMjcKKzoxMDFGNTAwMDA0MTAwMDZDMDgwMDZFQjIwMDAwMDAwMDAwMTgwMDRDNzUKKzoxMDFGNjAwMDA4MDA2RTMyMDAwMDM2MTAwNDIwMDAxODA4MDA2RUIyMUYKKzoxMDFGNzAwMDA1MDBBMTAyMDAzODAyMDA3OEUxNkU5OTAwMDAwMDAwMUYKKzoxMDFGODAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDAwMzgwMjc4NDIKKzoxMDFGOTAwMDA5QzA2RTMyMDUwMDAwMDA2ODA4MDAwMDc3QTE5NzM5N0IKKzoxMDFGQTAwMDAwMDBBMzAyMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwOEYKKzoxMDFGQjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDU0NTQwMUZDMEIKKzoxMDFGQzAwMDAyQzA2RTMyMTQxMEE3MDIwNDAwMDA4MEEyMEQ3MkIwOEQKKzoxMDFGRDAwMDAwMDA1MTBGMDAwMDAwMjgwOUMwMDJGMjBFMDA3RDA1MkMKKzoxMDFGRTAwMDAwMDAwMDFDMDgwMDM2OTIwMDAwQjYwMjMzMTUwMEE0NjEKKzoxMDFGRjAwMDAyQzA3MkIyMDAwMEVBMDI4MDAxMDA4MEIyMDE3MkI2MzMKKzoxMDIwMDAwMDAxMDFBRDAyMDQyOTAwODA4MjhENzRCQzA4MEFFQTAyMzUKKzoxMDIwMTAwMDA0MkQwMDgwODI4RDc0QkMwMDAwMDAwMDAwMzAwMDdDMjQKKzoxMDIwMjAwMDA4MDA3NTMyMDAwMEI0MDIwMDM4MDA4ODE4MDA3NTlDNjIKKzoxMDIwMzAwMDA4MEFFQTAyMDQyOTAwODA4MjhENzRCQzEwMDAwMDAwQTYKKzoxMDIwNDAwMDAwMkMwMDdDODg4RDc1MzcwMDAwMDAwMDAwMzAwMDdDN0IKKzoxMDIwNTAwMDY4REQ4NzMyMDAwMEIzMDI5RjM5MDA4ODE4ODA3NUJDQTQKKzoxMDIwNjAwMDEwMDAwMDAwMDAzNDAwODg4ODhENzUzNzAwMDBCNDAyMkQKKzoxMDIwNzAwMDAwMDAwMDg4MTg4MDg4OUMxMDAwMDAwMDAwMzQwMDg4NTAKKzoxMDIwODAwMDY4OUQ4ODM5MDAwMEI3MDI5RkYxMDE4MDgyREI4N0JDMjAKKzoxMDIwOTAwMDAwMDBFQTAyMDAwMDAwODAwMjAwMDA5MDAwMDBFQTAyNTYKKzoxMDIwQTAwMDgwMDAwMDgwQjIwMTcyQjYwMDAwMDAwMDAwMDgwMDQ4MDUKKzoxMDIwQjAwMDA4MDA3NTMyMDAwMDAwMDAwMDEwMDA3MDA4MDA3NTMyNDIKKzoxMDIwQzAwMDAwMDAwMDAwMDAxQzAwNzQzOEEyNzUzNzAwMDBCQzAyM0MKKzoxMDIwRDAwMDgzMUIwMDc4MDhDMDc0QjIwMDAwMDAwMDAwMDAwMEY4MDQKKzoxMDIwRTAwMEMyODAyRjM0MDAwMENDMDI5Rjc4MDE4MEMyMjE2RUJDRDgKKzoxMDIwRjAwMDAwMDBDMDAyOUY5OTAxNjQ4ODFCODdCQzAwMDBDRDAyQ0MKKzoxMDIxMDAwMDlGNjgwMTY0ODg1Qjg2QkEwMDAwMDAwMDAwMDAwMDY0REMKKzoxMDIxMTAwMDA4MDAwMDMyMDAwMDAwMDAwMDE2MDBBNDAyQzA3MjMyNjUKKzoxMDIxMjAwMDAwMDAwMDAwMDAzQzAyQTRCMjVCMkEzQTAwMDAwMDAwNUMKKzoxMDIxMzAwMDAwM0EwMjc4MDlDMDZFMzIwMDAwQ0UwMjA4MDEwMDA0QTUKKzoxMDIxNDAwMEU4QTU3NUJDMTAwMEVBMDIwQjAxMDAxQzA4MDAzNkIyQkQKKzoxMDIxNTAwMDAwMDBDQzAyMDRBMTAxODA4MjlCODRCQzAwMDA3RDA1QUMKKzoxMDIxNjAwMDlGOTgwMTgwQzIyMTZFQkMwMDAwN0QwNTA2QjEwMTgwRjAKKzoxMDIxNzAwMDgyNUI4N0JDMDAwMEU5MDIwQjAxMDA4MDAyMDAwMEIwMTYKKzoxMDIxODAwMDAwMDBDRDAyMDQ5OTAxODBDMjIxNkVCQzAwMDBFNzAyNkMKKzoxMDIxOTAwMDAyRDQwMTgwOTJGQjZFQkMxNjAwN0QwNTAwMDAwMDFDN0QKKzoxMDIxQTAwMDA4MDAzNjkyMTcwMDdEMDUwMDAwMDAxQzA4MDAzNjkyREEKKzoxMDIxQjAwMDFDMDA3RDA1MDAwMDAwMUMwODAwMzY5MjAwMDBEMDAyQzMKKzoxMDIxQzAwMDA0QTEwMTgwODI5Qjg0QkMwMDAwRDcwMjA2QTgwMTgwODQKKzoxMDIxRDAwMDgyNUI4MEJDMDAwMEQ0MDIwNEE5MDE4MDAyMDA2RUJDQjYKKzoxMDIxRTAwMDAwMDBFODAyMDRBMTAxODA4MjlCODRCQzAwMDBFODAyOTgKKzoxMDIxRjAwMDA0MDEwMDgwMTI0MDgwQkMxNDAwN0QwNTAwMDAwMDFDMUEKKzoxMDIyMDAwMDA4MDAzNjkyMDAwMEU4MDI5RkEwMDE3ODI5MjE2RUJDRTgKKzoxMDIyMTAwMDAwMDBFODAyMDIwMTAwODAxMkEwOTdCQzAwMDBDQzAyN0UKKzoxMDIyMjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTMwMjA0MDAwMDgwMzMKKzoxMDIyMzAwMDAyODA4MkJDMDAwMERDMDIwMjAwMDA4MEEyNjA4MEJDNDAKKzoxMDIyNDAwMDA2MDA3RDA1MkMwMTAwMUMwODAwMzZCMjAwQzBFMDAyMkIKKzoxMDIyNTAwMDA0MDEwMDgwQTI4RDJGQjAwNjAwN0QwNTAwMDAwMDFDNDcKKzoxMDIyNjAwMDA4MDAzNjkyMDAwMEUwMDIwNDAwMDA4MEEyNjA4MEJDRkEKKzoxMDIyNzAwMDAwMDBERjAyMDYwMzAxODAxMkMwNkVCQzA5MDA3RDA1NkMKKzoxMDIyODAwMDAwMDAwMDFDMDgwMDM2OTIwQTAwN0QwNTAwMDAwMDFDQkEKKzoxMDIyOTAwMDA4MDAzNjkyMDAwMEUyMDIwNjAzMDE4MDEyQzA2RUJDMDQKKzoxMDIyQTAwMDA3MDA3RDA1MDAwMDAwMUMwODAwMzY5MjA4MDA3RDA1MkYKKzoxMDIyQjAwMDAwMDAwMDFDMDgwMDM2OTIwMjAwN0QwNTM4MDEwMDFDNTkKKzoxMDIyQzAwMDA4MDAzNkIyMDAwMEU2MDIwMjBDMDI4MEEyNUI4MEJDNkQKKzoxMDIyRDAwMDFGMDA3RDA1MDAwMDAwMUMwODAwMzY5MjFFMDA3RDA1RDEKKzoxMDIyRTAwMDAwMDAwMDFDMDgwMDM2OTIwMDAwRUIwMjAwMDAwMDI4RUQKKzoxMDIyRjAwMDA5NDAwMDkyMDAwMEVCMDIwMDAwMDAyODA5ODAwMDkyRDMKKzoxMDIzMDAwMDAwMDBFQjAyMDAwMDAwMjgwOUMwMDA5MjAwMDBFQjAyNzAKKzoxMDIzMTAwMDAwMDAwMDI4MDkwMDAxOTIwRTAwNTEwRjAwMDAwMDFDNkYKKzoxMDIzMjAwMDA4MDAzNkYyMDAwMDdEMDUwMDAwMDA4MDAyMDAwMDkwRTkKKzoxMDIzMzAwMDEwMDAzNjEwMkEwMDAwQ0MwMjIwMTVCODAwMDAwQzBFNDgKKzoxMDIzNDAwMDAwMDAwMDNDMDMwMDM4RjIxRDAwRjEwMjgwMDEwMDc4MUIKKzoxMDIzNTAwMDA5RTAwMEI4MUQwMDdEMDUwMDAwMDAxQzA4MDAzNjkyNTEKKzoxMDIzNjAwMDE1MDA3RDA1MDAwMDAwMUMwODAwMzY5MjAwMDAwMDAwRUEKKzoxMDIzNzAwMDAwMDAwMDFDQTgwNTI4MzAwODAwMDAwMDAwMDAwMEY4M0MKKzoxMDIzODAwMDgzNDAwMTM5MDAwMDNFMDM4MDAxODA4MDMyMEI2QUI2MzEKKzoxMDIzOTAwMDAwMDAwQzBFMDAwMDAwMzgwMzAwMzhGMjdFMDUwMDAwM0IKKzoxMDIzQTAwMDAwMDAwMDg4ODJDRDgxM0EwMDAwRjkwMjFENDEwMjVDRTQKKzoxMDIzQjAwMEY4MDE2OEI0NDEwMDMxMDMwMDAwMDBGOEEyOEQyRjkxQUMKKzoxMDIzQzAwMDEwMDAwMDAwRDAyQzAyMDBBOURCODUzOTAwMDA5NjAyMjUKKzoxMDIzRDAwMDEyMDEwMDU0MDJBNDM4QjIwMDAwRkEwMjAwMDAwMDgwOEEKKzoxMDIzRTAwMDAyMDAwMDkwMDAwMDAwMDMwNEIwMDA4MDAyMDA2RUJDRjgKKzoxMDIzRjAwMDAwMDAwMDAzODBCOTAwODA4MjgwNkVCNjAwMDAyNTEwQzYKKzoxMDI0MDAwMDAwNzgwMTYwMDgwMDZFRjIzMDAwN0MwNUQ3MDAwMDFDRTcKKzoxMDI0MTAwMDA4MDAzNjkyMDAwMDAyMDM4MDAxMDA4MEQyODEyRkI2QUUKKzoxMDI0MjAwMDMxMDA3QzA1RDcwMDAwMUMwODAwMzY5MjAwMDAwNDAzMzAKKzoxMDI0MzAwMDgwMDEwMDgwNDI4MTJGQjYzNTAwN0MwNUQ3MDAwMDFDNEEKKzoxMDI0NDAwMDA4MDAzNjkyMDAwMDExMDMwNEE4MDEwODA5MDA2RUIyQ0EKKzoxMDI0NTAwMDAwMDAwMDAwMDAyMDAyMDg4OTlCOTAzRTAwMDAwMDAwNjAKKzoxMDI0NjAwMDAwQTAwMTA4ODk5QjkwM0EwMDAwMTEwMzlGODgwMTA4OTEKKzoxMDI0NzAwMDg5OUI5MEJDMDAwMDAwMDAwMDM0MDIwMDA5QzA2RTNENDIKKzoxMDI0ODAwMDAwMDAwMDAwMDAwQzAyMDQwOUE0NkUzNzAwMDAwRDAzRDgKKzoxMDI0OTAwMDAyMDAwMDgwMTJBNDkwQkMwMDAwMDAwMDAwMDAwMDA4QjAKKzoxMDI0QTAwMDE5ODA5MDM3MDAwMDExMDMwMjAxMDI4MDgyOUI5MEJDQ0EKKzoxMDI0QjAwMDMxMDA3QzA1RDcwMDAwMUMwODAwMzY5MjAwMDAxMTAzOTMKKzoxMDI0QzAwMDA0QjAwMDgwMDIwMDZFQkMwMDEyMTEwMzA0MDEwMDgwMDEKKzoxMDI0RDAwMEEyOEQyRkIwMzIwMDdDMDVENzAwMDAxQzA4MDAzNjkyNzgKKzoxMDI0RTAwMDAwMDAzMTAzMDAwMDAwRjg3MjgxMkY5NTAwMDAwMDAwMDkKKzoxMDI0RjAwMDAwMDAwMEY4NDI4MDJGMzQwOEMwNTAwMjEyMDEwMDQwNTIKKzoxMDI1MDAwMEEyQ0QzOUIyMDAwMDEzMDMwMDAwMDA4MDAyMDAwMDkwNDkKKzoxMDI1MTAwMDA4MDAwMDAwMDAwMDAwRjg5MzQwMDEzOTAwMDAzRTAzNkQKKzoxMDI1MjAwMDgwMDE4MDgwMzIwQjZBQjYwMDAwMDAwMDAwMDAwMDE0QjkKKzoxMDI1MzAwMDA4NDA5MDMyMDAwMDBDMEUwMDAwMDAzODAzMDAzOEYyMTIKKzoxMDI1NDAwMDdFMDUwMDAwMDAwMDAwODg4MkNEODEzQTA4MDAwMDAwNkUKKzoxMDI1NTAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwM0UwMzgwMDE4MDgwQjQKKzoxMDI1NjAwMDMyMEI2QUI2MDAwMDBDMEUwMDAwMDAzODAzMDAzOEYyOEYKKzoxMDI1NzAwMDAwMDAxRjAzMDQyMDAxODA1MjIwNkVCQzI2MDA3RDA1NTAKKzoxMDI1ODAwMDAwMDAwMDFDMDgwMDM2OTIyNTAwN0QwNTAwMDAwMDFDOUMKKzoxMDI1OTAwMDA4MDAzNjkyMDAwMDI1MDMwNDAxMDBEODFFODBFREJDMUYKKzoxMDI1QTAwMDAwMDAyMTAzQjcwMDAwRDgwRUMwRURCMjAwMDAyNDAzRTQKKzoxMDI1QjAwMDA0MDEwMDgwNDIzQkVFQkMwMDAwMDAwMDAwMDAwMEUwOEYKKzoxMDI1QzAwMDFFMDBFRTNBMDAwMDAwMDBBNzAwMDBEMDBFMDBFRTMyMjAKKzoxMDI1RDAwMDAwMDAwMDAwMDA3NDg2Q0MwMjgwNkMzMjAwMDAwMDAwMTUKKzoxMDI1RTAwMDAwMDAwMDAwMDk0MEU3MzIwMDAwMjkwMzgwMDE4MDgwREMKKzoxMDI1RjAwMDMyMEI2QUI2MzYwMDI4MDMxMjAwMDAyQzgyQ0QyRUIyQjAKKzoxMDI2MDAwMDAwMDAyQjAzMDQwMTAwODA0MkM1MkNCQzAwMDAyQzAzRjkKKzoxMDI2MTAwMDAwMDAwMENDMDIwMDAwOTIwMDAwMDAwMDAwMDAwMENDOEUKKzoxMDI2MjAwMDEyQzAyQzNBMDAwMDI3MDMwNDAxMDAwMDE5MDA5MEJDREUKKzoxMDI2MzAwMDAwMDAwMDAwMDA3NDg2QzgwNkMwMkMzMjA4MDAzRTAzNkIKKzoxMDI2NDAwMDAwMDAwMEY4QzM0MDAxOTkwMDAwRkEwRDAwMDAwMDJDQzIKKzoxMDI2NTAwMDA5MDAwMEYyMDAwMDMyMDMwMDAwMDA4MDAyMDAwMDkwMzgKKzoxMDI2NjAwMDAwMDBGQTBEMDAwMDAwMkNGOTAxMDBGNDAwMDAzQjAzMEIKKzoxMDI2NzAwMDA0MDAwMDI4MDk4MDgwQjIwMDAwMDAwMDAwMDAwMEQ4OUIKKzoxMDI2ODAwMDAyMDAwMDMyMDAwMEYxMEUwMDAwMDAwODA4MDAwMEQyMzUKKzoxMDI2OTAwMDAwMDAzQjAzMDQwMDAwODAwMjgwOTJCQzE4MDAzNjAwNUEKKzoxMDI2QTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwM0UwMzgwMDEwMDgwNzcKKzoxMDI2QjAwMEEyODAyRkI2MDAwMDNFMDMxMjAxMDAwMDA5QzAyMUIyMjMKKzoxMDI2QzAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDMzOTNFMDMzNjAwQ0EKKzoxMDI2RDAwMDAwMDAwMEMwMDIwMDM2OTIwMDAwM0UwMzgwMDEwMDgwMkUKKzoxMDI2RTAwMEEyODAyRkI2MDAwMDNFMDMxMjAxMDAwMDA5QzAyMUIyRjMKKzoxMDI2RjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwMUIKKzoxMDI3MDAwMDAwMDAwMEY4MDIwMDAwMzIxODAwMzYwMDAwMDAwMEY4NTcKKzoxMDI3MTAwMDczOEEwMjk5MTAwMDAwMDAwMDAwMDBFNDAzMDAzNjMyQzIKKzoxMDI3MjAwMDAyMDAwMDAxMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwNUEKKzoxMDI3MzAwMDAwMDAwMEU0MDMwMDM2MzIwNDAwMDAwMTAwMDAwMEUwNjUKKzoxMDI3NDAwMDAzMDAzNzMyQUEwNDAwMDAwMDAwMDBFNDAzMDAzNjMyMjAKKzoxMDI3NTAwMDA5MDAwMDAxMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwMjMKKzoxMDI3NjAwMDAwMDAwMENDMEYwMDAwMzIwMDA3MDAwMDAwMDAwMEU0NzEKKzoxMDI3NzAwMDAzMDAzNjMyMDYwMDAwMDEwMDAwMDBFMDAzMDAzNzMyOUIKKzoxMDI3ODAwMDIwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjA4MDAwMDAxRDEKKzoxMDI3OTAwMDAwMDAwMEUwMDMwMDM3MzIwMDAxMDAwMDAwMDAwMEU0MDgKKzoxMDI3QTAwMDAzMDAzNjMyMDUwMDAwMDEwMDAwMDBFMDAzMDAzNzMyNkMKKzoxMDI3QjAwMDMwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjA3MDAwMDAxOTIKKzoxMDI3QzAwMDAwMDAwMEUwMDMwMDM3MzIwMEEwMDAwMDAwMDAwMEU0MzkKKzoxMDI3RDAwMDAzMDAzNjMyMDgwMDAwMDgwMDAwMDBFMDAzMDAzNzMyMzIKKzoxMDI3RTAwMDAwMDAwMDAwMDAwMDAwQTAwMjAwMDAzMjAwMDAwMDAwMTUKKzoxMDI3RjAwMDAwMDAwMDAwMEIwMDAwMzIwMDAwNTIwMzhCMDEwMEEwMUIKKzoxMDI4MDAwMDEyMDAyQUJBMDAwMDAwMDAwMDAwMDBBODAyMDAwMDMyRjYKKzoxMDI4MTAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMDAzMjAwMDA1NTAzNDcKKzoxMDI4MjAwMDA2MDEwMDgwMDI4MDJBQkMwMDAwMDAwMDAwMDAwMDlDMUQKKzoxMDI4MzAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDBENDAyMDAwMDMyNUMKKzoxMDI4NDAwMDAwMDAwMDAwMDAwMDAwQ0MwMjAwMDAzMjAwMDAwMDAwODgKKzoxMDI4NTAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQwOUMKKzoxMDI4NjAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDBEQzAyMDAwMDMyMjQKKzoxMDI4NzAwMDAwMDAwMDAwMDAwMDAwRjgwMjAwMDAzMjAwMDAwMDAwMkMKKzoxMDI4ODAwMDAwMDAwMEM4MDIwMDAwMzIwMDAwMDAwMDAwMDAwMEM0ODgKKzoxMDI4OTAwMDAyMDAwMDMyMDAwMDU4MDM4NTAxMDA5QzEyQzAyOUJBRDIKKzoxMDI4QTAwMDAwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjBCMDAwMDA0Q0EKKzoxMDI4QjAwMDAwMDAwMEUwMDMwMDM3MzI4MDAwMDAwMDAwMDAwMEU0NjgKKzoxMDI4QzAwMDAzMDAzNjMyMTMwMDAwMDQwMDAwMDBFMDAzMDAzNzMyM0EKKzoxMDI4RDAwMDAwMjAwMDAwMDAwMDAwRTQwMzAwMzYzMjBDMDAwMDA0NzkKKzoxMDI4RTAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0QjgKKzoxMDI4RjAwMDAzMDAwNjMyMEYwMDAwMDQwMDAwMDBFMDAzMDAzNzMyM0UKKzoxMDI5MDAwMDAwNDQwMDAwMDAwMDAwRTQwMzAwMzYzMjBEMDAwMDA0MjMKKzoxMDI5MTAwMDAwMDAwMEUwMDMwMDM3MzIwMDA0MDAwMDAwMDAwMEU0ODMKKzoxMDI5MjAwMDAzMDAzNjMyMTQwMDAwMDQwMDAwMDBFMDAzMDAzNzMyRDgKKzoxMDI5MzAwMDlGMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjE1MDAwMDA0OTAKKzoxMDI5NDAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0NTcKKzoxMDI5NTAwMDAzMDAzNjMyMTgwMDAwMDQwMDAwMDBFMDAzMDAzNzMyQTQKKzoxMDI5NjAwMDYwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjFEMDAwMDA0OTcKKzoxMDI5NzAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0MjcKKzoxMDI5ODAwMDAzMDAwNDMyMUUwMDAwMDQwMDAwMDBFMDAzMDAzNzMyQTAKKzoxMDI5OTAwMDcwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjFGMDAwMDA0NTUKKzoxMDI5QTAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0RjcKKzoxMDI5QjAwMDAzMDAwMDMyMjAwMDAwMDQwMDAwMDBFMDAzMDAzNzMyNzIKKzoxMDI5QzAwMEEwMDMwMDAwMDAwMDAwRTQwMzAwMzYzMjE3MDAwMDA0RkEKKzoxMDI5RDAwMDAwMDAwMEUwMDMwMDM3MzI0MDAwMDAwMDAwMDAwMEU0ODcKKzoxMDI5RTAwMDAzMDAzNjMyMUIwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMTEKKzoxMDI5RjAwMDYwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjFDMDAwMDA0MDgKKzoxMDJBMDAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0OTYKKzoxMDJBMTAwMDAzNDAwMDMyMTYwMDAwMDQwMDAwMDBFMDAzMDAzNzMyREIKKzoxMDJBMjAwMDAwMDEwMDAwMDAwMDAwRTQwMzAwMzYzMjFBMDAwMDA0MzgKKzoxMDJBMzAwMDAwMDAwMEUwMDMwMDM3MzIyMDAxMDAwMDAwMDAwMEU0NDUKKzoxMDJBNDAwMDAzMDAzNjMyMTkwMDAwMDQwMDAwMDBFMDAzMDAzNzMyQjIKKzoxMDJBNTAwMDgwMDAwMDAwMDAwMDAwRTQwMzAwMzYzMjBCMDAwMDAxOUIKKzoxMDJBNjAwMDAwMDAwMEUwMDMwMDM3MzIwMDAxMDAwMDAwMDAwMEU0MzUKKzoxMDJBNzAwMDAzMDAzNjMyMEMwMDAwMDEwMDAwMDBFMDAzMDAzNzMyOTIKKzoxMDJBODAwMEZFRkYwMDAwMDAwMDAwQUMwMjAwMzYzMjAwMDAwMDAwMzMKKzoxMDJBOTAwMDAwMDAwMDAwMDkwMDAwMzIxODAwMDAwMDAwMDAwMEY4RUIKKzoxMDJBQTAwMDAzNjQwMjM5MDAwMDhCMDM4NTAxMDAwMDE5MDA5MEJBMEQKKzoxMDJBQjAwMDI1MjYwMDAwMDAwMDAwRTQwMzAwMzYzMjAxMDAwMDAxN0EKKzoxMDJBQzAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMDgwM0EKKzoxMDJBRDAwMDBGMDAwMDMyMDAwMDAwMDAwMDAwMDA4NDBGMDAwMDMyRjAKKzoxMDJBRTAwMDA4MDAwMDAwMDAwMDAwRjhGMzQwMDEzOTA4MDAwMDAwNzEKKzoxMDJBRjAwMDAwMDAwMEY4RTM0MDAxMzkwODAwMDAwMDAwMDAwMEY4ODEKKzoxMDJCMDAwMEMzNDAwMTM5MDgwMDAwMDAwMDAwMDBGOEIzNDAwMTM5NUIKKzoxMDJCMTAwMDA4MDAwMDAwMDAwMDAwRjhBMzQwMDEzOTA4MDAwMDAwOTAKKzoxMDJCMjAwMDAwMDAwMEY4OTM0MDAxMzkwODAwMDAwMDAwMDAwMEY4QTAKKzoxMDJCMzAwMDgzNDAwMTM5MDgwMDAwMDAwMDAwMDBGODczNDAwMTM5QUIKKzoxMDJCNDAwMDA4MDAwMDAwMDAwMDAwRjg2MzQwMDEzOTA4MDAwMDAwQTAKKzoxMDJCNTAwMDAwMDAwMEY4NTM0MDAxMzkwODAwMDAwMDAwMDAwMEY4QjAKKzoxMDJCNjAwMDQzNDAwMTM5MDgwMDAwMDAwMDAwMDBGODMzNDAwMTM5RkIKKzoxMDJCNzAwMDA4MDAwMDAwMDAwMDAwRjgxMzQwMDEzOTAwMDAwMDAwQzgKKzoxMDJCODAwMDAwMDAwMEY4MDM4MDAwMzIwMDAwMDAwMDAwMDAwMEM4RDAKKzoxMDJCOTAwMDNGODBGQzM1MDAwMDAwMDAwMDAwMDA5QzAyMDAwMDMyNzUKKzoxMDJCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwMDAzMjZFMDAwMDAwODIKKzoxMDJCQjAwMDAwMDAwMEQwMDIwMDM2MzIwMDAwMDAwMDAwMDAwMDI4QjMKKzoxMDJCQzAwMDAzNDAzODMyMDAwMDM2MTAwNDAxMDA4MEQyMDEzMEI2RDQKKzoxMDJCRDAwMDAwMDBBMzAzMDQwMTAwRDAxMjAwMkRCQ0UwMDMwMDAwOUMKKzoxMDJCRTAwMDAwMDAwMEU0MDMwMDM2MzIwMzAwMDAwMTAwMDAwMEUwQjIKKzoxMDJCRjAwMDAzMDAzNzMyMDAwMDAwMDAxNzAwMDBEMDAyMDAwMDMyNEUKKzoxMDJDMDAwMDAwMDAwMDAwMDAwMDAwQUNFMTAwMDAzNDAwMDAwMDAwMDMKKzoxMDJDMTAwMDAwMDAwMUUwMDYwMDAwMzIwMDAwMDAwMDAwMDgwMUU0QUUKKzoxMDJDMjAwMDA2MDAwMDMyMDAwMDAwMDAwMDBFMDFFQzA2MDAwMDMyMzkKKzoxMDJDMzAwMDAwMDAwMDAwMDAxMDAxRTAwNjAwMDAzMjAwMDAwMDAwNkIKKzoxMDJDNDAwMDAwMDAwMEQwMTIwMDJEM0E2RTAwQUIwMzAyMDEwMDgwOUMKKzoxMDJDNTAwMDgyMEQyREJDMDIwMDAwMDAwMDAwMDA5Q0FFMEQwMjMyNkYKKzoxMDJDNjAwMDAwMDAwMDAwMDAwMDAwQTgwMjAwMDAzMjAwMDAwMDAwODgKKzoxMDJDNzAwMDAwODg4NkNDMDcwMDM2MzIwMDAwMDAwMDAwOEE4NkNDMkYKKzoxMDJDODAwMDA3MDAwMDNBMDAyNDAwMDAwMDAwMDAwNDA5ODAzNjMyRUEKKzoxMDJDOTAwMDAwMDAzNjEwMTIwMDAwNjQwMjQwOTBCMjAwMDAwMDAwRjQKKzoxMDJDQTAwMDAwMDAwMDA0Mjk0MDkwM0EwMDAwQjcwMzEyMDAwMDc4QTkKKzoxMDJDQjAwMDA5QzAyMEIyMDAwMDAwMDAwMDAwMDA3ODA5NDU5MDMwRjMKKzoxMDJDQzAwMDAwMDBCNTAzMDIwMTAwODBDMjgyOTdCQzAwMDAwMDAwMzIKKzoxMDJDRDAwMDAwMDAwMDg0MDIwMDAwMzIwMDAwMDAwMDAwMDAwMENDNzAKKzoxMDJDRTAwMDAzMDAwMDMyMDAwMEJCMDM4RTAxMDA4MDAyNDAyOEIyQzYKKzoxMDJDRjAwMDAwMDA1MTBFMDAwMDAwRDgwMjAwMDBEMjE1MEYwMDAwQTUKKzoxMDJEMDAwMDAwMDAwMDhDMEUwMDM2MzI1MjAwMDAwMDAwMDAwMDc0RkIKKzoxMDJEMTAwMDBFMDAzNjMyMTgwMDAwMDAwMDAwMDBFNDAzMDAzNjMyRDYKKzoxMDJEMjAwMDA5MDAwMDAyMDAwMDAwRTAwMzAwMzczMkZFQ0EwMDAwODQKKzoxMDJEMzAwMDAwMDAwMEU0MDMwMDM2MzIwQTAwMDAwMjAwMDAwMEUwNTgKKzoxMDJENDAwMDAzMDAzNzMyMDAwMEM2MDMxMjAxMDAwMDA5NDAyMEIyMjAKKzoxMDJENTAwMDAwMDBDNDAzMDAwMDAwODAwMjAwMDA5MDAwMDBDNjAzRDEKKzoxMDJENjAwMDEyMDAwMDA0MDk0MDIwQjIwMDAwQzkwMzlGMDEwMDgwNDYKKzoxMDJENzAwMDAyMDA5MEIyMDAwMEM4MDMxMjAwMDAwODA5NDAyMEIyMEYKKzoxMDJEODAwMDAyMDBDNDAzMDQwMTAwNzgwOTI0MTdCODA2MDAwMDAwRkIKKzoxMDJEOTAwMDAwMDAwMDc4MDk2NDE2MzgwMDAwQzQwMzA0MDEwMDgwQjQKKzoxMDJEQTAwMDAyODE5N0JDRkUwMDAwMDAwMDAwMDA0NDAzMDAzNjMyQTAKKzoxMDJEQjAwMEZFMDAzNjAwMDAwMDAwNDgwMzAwMzY5MjAwMDAzNjEwODYKKzoxMDJEQzAwMDEyMDAwMDAwMDk0MDIwQjIwMDAwQ0YwMzEyMDAwMDA0RUUKKzoxMDJERDAwMDA5NDAyMEIyMDAwMEQyMDM5RjAxMDA4MDAyMDA5MEIyOUYKKzoxMDJERTAwMDAwMDBEMTAzMTIwMDAwMDgwOTQwMjBCMjAwMDAwMDAwREEKKzoxMDJERjAwMDAwMDAwMEI0MDIwMDkwMzIwMDAwMzYxMDAwMDAwMDgwOTUKKzoxMDJFMDAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwRDgKKzoxMDJFMTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwMTQKKzoxMDJFMjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwQ0EKKzoxMDJFMzAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQTgKKzoxMDJFNDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwRTQKKzoxMDJFNTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwOUEKKzoxMDJFNjAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNzgKKzoxMDJFNzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwQjQKKzoxMDJFODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwNkEKKzoxMDJFOTAwMDAyMDAwMDkwMDYwMEVBMDMwMDAwMDAwQzA5NjQxNjk4ODYKKzoxMDJFQTAwMDAwMDA0OTAyMDAwMDAwMTQwODQwOTA5MjAwMDA2OTAyRUUKKzoxMDJFQjAwMDAwMDAwMDE0MDg0MDkwOTIzNDAwMTUwMzAwMDAwMDFDMkMKKzoxMDJFQzAwMDA4MDAzNjkyMTIwMDE1MDMwMDAwMDAxQzA4MDAzNjkyMUMKKzoxMDJFRDAwMDNBMDAxNTAzMDAwMDAwMUMwODAwMzY5MjAwMDAzNjEwNkUKKzoxMDJFRTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNUIwMjAwMDAwMDE0NUYKKzoxMDJFRjAwMDA4NDA5MDkyMDAwMDFEMDQwMDAwMDA4MDAyMDAwMDkwMzUKKzoxMDJGMDAwMDAwMDAxQTAzMDAwMDAwMTQwODQwOTA5MkVCMDMwMDAwMzgKKzoxMDJGMTAwMDAwMDAwMDg4ODJDRDkwM0EwRDAwMEQwNDAwMDAwMEZDRjYKKzoxMDJGMjAwMDAyRTQxNjk4MEQwMDFFMDQwMDAwMDBGQzAyRTQxNjk4NEUKKzoxMDJGMzAwMDBEMDAyNzA0MDAwMDAwRkMwMkU0MTY5ODAwMDAzNDA0OTEKKzoxMDJGNDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwM0QwNDAwMDAwMDAwMkUKKzoxMDJGNTAwMDA5NDA5MDlEMDAwMDQwMDQwMDAwMDA4MDAyMDAwMDkwQTUKKzoxMDJGNjAwMDAwMDA0OTA0MDAwMDAwODAwMjAwMDA5MDAwMDA1MjA0QUMKKzoxMDJGNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNUIwNDAwMDAwMDAwRTAKKzoxMDJGODAwMDA5NDA5MDlEMDAwMDYwMDQwMDAwMDA4MDAyMDAwMDkwNTUKKzoxMDJGOTAwMDAwMDA2ODA0MDAwMDAwMDAwOTQwOTA5RDAwMDA2RDA0REUKKzoxMDJGQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwREMwNDAwMDAwMDAwMkYKKzoxMDJGQjAwMDA5MDAwMDkyMDAwMERDMDQwMDAwMDAwMDA5NDAwMDkyQkIKKzoxMDJGQzAwMDFEMDdERTA0MDAwMDAwQTAwMjAwMzY5MjAwMDBFQzA0QTEKKzoxMDJGRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwMTkKKzoxMDJGRTAwMDAyMDAwMDkwMDAwMDFEMDQwMDAwMDBEQzBGNDA5MDkyRTEKKzoxMDJGRjAwMDAwMDBCMDA0MDAwMDAwODAwMjAwMDA5MDAwMDBCNTA0NTIKKzoxMDMwMDAwMDAwMDAwMEQ0MDIwMDAwOTIxMDAwQ0EwNDAwMDAwMDg0RjYKKzoxMDMwMTAwMDFGNjQxNDk4MDAwMDFEMDQwMDAwMDBFQzBFNDA5MDkyMDQKKzoxMDMwMjAwMDAwMDBENjA0MDAwMDAwODAwMjAwMDA5MDAwMDAxRDA0OTMKKzoxMDMwMzAwMDAwMDAwMEQ0MEU0MDkwOTIwMDAwRDkwNDAwMDAwMDgwRUYKKzoxMDMwNDAwMDAyMDAwMDkwMDAwMDZEMDUwMDAwMDBEQzBFNDA5MDkyMzAKKzoxMDMwNTAwMDAwMDBGQjA0MDAwMDAwODAwMjAwMDA5MDA4MDAwMDA1NTIKKzoxMDMwNjAwMDAwMDAwMDUwMUYyNDE2OTgwMDAwMEYwNTAwMDAwMEQ4MzMKKzoxMDMwNzAwMDAyMDAwMDkyMEQwMDE5MDUwMDAwMDBGQzAyRTQxNjk4MDEKKzoxMDMwODAwMDAwMDAxQTA1MDAwMDAwRDAwMjAwMDA5MjAwMDBGNjAwQzcKKzoxMDMwOTAwMDAwMDAwMEQwMDIwMDAwOTIwMDAwMzUxMDAwMDAwMDgwMDcKKzoxMDMwQTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMzYKKzoxMDMwQjAwMDA4MDAwMDAwMDAwMDAwRjg5MzQwMDEzOTAwMDAwMDAwMDMKKzoxMDMwQzAwMDAwMDAwMDc4MDk0NTkwMzAwMDAwM0UwMzA2MDEwMDgwQjIKKzoxMDMwRDAwMDIyODA5N0JDMDIwMDEwMDRCMDAwMDBBMEYyMEIwMEI5REYKKzoxMDMwRTAwMDAwMDAwMDAwQTAwMDAwMDQ2QjQxOTAzNDAwMDAzRTAzOEIKKzoxMDMwRjAwMDgwMDEwMDgwMDI0MEIwQjYwMDAwM0UwMzA0MDAwMDgwNjIKKzoxMDMxMDAwMDAyODBCMEJDMDAwMDAwMDAwMDAwMDBEODAyMDAwMDMyQzUKKzoxMDMxMTAwMDAwMDAwMDAwMDAwMDAwQTgyMkMwMkYzNzAwMDAwMDAwQkYKKzoxMDMxMjAwMDAwMDAwMDAwNjcwMTAwMzQwMDQyMDAwMDAwMDgwMDAwQjkKKzoxMDMxMzAwMDg3OEQyQTNBMDAwMDM2MTAwNDEwMDAwMDA3MDBCMEIyNTQKKzoxMDMxNDAwMDAwMDAwMDAwMDAxODAwMDAwNzAwRDAzMjAwMDAxQTA0NDAKKzoxMDMxNTAwMDEyMDAwMDQ4RjJDMTM4QjQxODAwMDAwMDAwMDAwMEY4NjYKKzoxMDMxNjAwMDczMEEwMzM5M0UwMzM2MDAwMDAwMDBDMDAyMDAzNjkyQTUKKzoxMDMxNzAwMDA4MDAzRTAzMDAwMDAwRjg5MzQwMDE5OTAwMDAyMTA0N0MKKzoxMDMxODAwMDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4RDQKKzoxMDMxOTAwMDA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyMjgKKzoxMDMxQTAwMDAyMDAyMTA0QjAwMDAwQTBGMjBCMDBCOTAwMDAwMDAwRjIKKzoxMDMxQjAwMDAwMDAwMDAwMEI4MDkwMzIwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDMxQzAwMDBENDA5MDMyMDAwMDAwMDBBMDAwMDAwNDNCNDBCMDMxRjAKKzoxMDMxRDAwMDAwMDAxRDA0MDQwMDAwODAwMkMwMkZCQ0YyMEUxRDA0N0MKKzoxMDMxRTAwMDAwMDAwMDhDMEUwMDM2OTIwODAwMDAwMDAwMDAwMEY4N0QKKzoxMDMxRjAwMDkzNDAwMTM5MDIwMDI4MDRCMDAwMDBBMEYyMEIwMEI5OEUKKzoxMDMyMDAwMDAwMDAyQjA0ODAwMTAwODAxMjQwQjBCNjAwMDAwMDAwRDYKKzoxMDMyMTAwMDAwMDAwMDA0M0I0MEIwMzMwMDAwMDAwMDAwMDAwMDA0NDgKKzoxMDMyMjAwMEZENEJEMDM1MDAwMDAwMDAwMDAwMDAwODBCMDAwMDMyMEMKKzoxMDMyMzAwMDAwMDAwMDAwQTAwMDAwMEMxQkU0QjAzMjAwMDAzRTAzQzAKKzoxMDMyNDAwMDBCMDAwMDgwMDIwMDAwQjAwMDAwMzEwNDA0MDAwMDgwODgKKzoxMDMyNTAwMDAyNDA5MEIyMUYwMDNFMDMwMDAwMDA4MDExNDAwMDk5MjAKKzoxMDMyNjAwMDAwMDAzMDA0MDQwMDAwODAxMjNFRjhCQTAwMDAwMDAwQTQKKzoxMDMyNzAwMDAwMDAwMDgwMDEwMEY4MzIwMDAwM0UwMzAwMDAwMDkwRDIKKzoxMDMyODAwMDAxNDBGODkyMDAwMDM2MTA4MDAwMDA4MDAyODFGQ0I2RjgKKzoxMDMyOTAwMDAwMDAzODA0OUYwMDAwODAwMjAwOTBCMjAwMDAwMDAwOEYKKzoxMDMyQTAwMDAwMDAwMDA4MDk0MDkwMzIwMDAwMDAwMDAwMDAwMDA0MDcKKzoxMDMyQjAwMDA5QzBGRDMyMDAwMDAwMDAwMDAwMDBFNDAzODA5MDMyRUQKKzoxMDMyQzAwMDA5MDAwMDA0MDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwQTUKKzoxMDMyRDAwMDAwMDAwMEU0MDM0MDkwMzIwQTAwMDAwNDAwMDAwMEUwMTcKKzoxMDMyRTAwMDAzMDAzNzMyMDAwMDFEMDQwMDAwMDBDODBGODFGQzk0NjkKKzoxMDMyRjAwMDAwMDAwMDAwMDAwMDAwRTQ3MzAwOTAzQzEwMDAwMDA0OTcKKzoxMDMzMDAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMUQwNDAwMDAwMDgwRDAKKzoxMDMzMTAwMDAyMDAwMDkwMDAwMDQzMDQ5RjAwMDA4MDAyMDA5MEIyNzEKKzoxMDMzMjAwMDAwMDAwMDAwMDAwMDAwMDgwOTQwOTAzMjAwMDAwMDAwOEEKKzoxMDMzMzAwMDAwMDAwMDA0MDlDMEZEMzIwMDAwMDAwMDAwMDAwMEU0QUQKKzoxMDMzNDAwMDAzODA5MDMyMDEwMDAwMDQwMDAwMDBFMDAzMDAzNzMyRTcKKzoxMDMzNTAwMDAwMDAwMDAwMDAwMDAwRTAwRjgwOTAzMjAwMDAwMDAwM0MKKzoxMDMzNjAwMDAwMDAwMEU0MDM0MDkwMzIwMjAwMDAwNDAwMDAwMEUwOEUKKzoxMDMzNzAwMDAzMDAzNzMyMDAwMDFEMDQwMDAwMDBFNDBGNDA5MDkyNkIKKzoxMDMzODAwMDAwMDA0QzA0OUYwMDAwODAwMjAwOTBCMjAwMDAwMDAwOEEKKzoxMDMzOTAwMDAwMDAwMDA4MDk0MDkwMzIwMDAwMDAwMDAwMDAwMDA0MTYKKzoxMDMzQTAwMDA5QzBGRDMyMDAwMDAwMDAwMDAwMDBFNDAzODA5MDMyRkMKKzoxMDMzQjAwMDAzMDAwMDA0MDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwQkEKKzoxMDMzQzAwMDAwMDAwMEE4MEU4MDkwMzIwMDAwMDAwMDAwMDAwMEU0MjEKKzoxMDMzRDAwMDAzNDA5MDMyMDQwMDAwMDQwMDAwMDBFMDAzMDAzNzMyOTQKKzoxMDMzRTAwMDAwMDAxRDA0MDAwMDAwQUMwRTQwOTA5MjAwMDA1NTA0NDcKKzoxMDMzRjAwMDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4NjIKKzoxMDM0MDAwMDA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyQjUKKzoxMDM0MTAwMDAwMDAwMDAwMDAwMDAwRTQwMzgwOTAzMjA1MDAwMDA0N0EKKzoxMDM0MjAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0NkMKKzoxMDM0MzAwMDAzNDA5MDMyMDYwMDAwMDQwMDAwMDBFMDAzMDAzNzMyMzEKKzoxMDM0NDAwMDAwMDAwMDAwMDAwMDAwNDQwRjgwOTAzMjAwMDAxRDA0QzYKKzoxMDM0NTAwMDAwMDAwMDQ4MEY0MDkwOTIwMDAwNUQwNDA0MDEwMDgwQ0QKKzoxMDM0NjAwMDgyNDI5MEJDMDAwMDAwMDAwMDAwMDAwMDA5MDAwMDMyMTEKKzoxMDM0NzAwMDAwMDAwMDAwMDAwMDAwRTQwMzAwOTAzMjEyMDAwMDA0OEQKKzoxMDM0ODAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMUQwNDAwMDAwMDQwOEYKKzoxMDM0OTAwMDFGNDA5MDlDMDAwMDYzMDQ5RjAwMDA4MDAyMDA5MEIyRDcKKzoxMDM0QTAwMDAwMDAwMDAwMDAwMDAwMDgwOTQwOTAzMjAwMDAwMDAwMDkKKzoxMDM0QjAwMDAwMDAwMDA0MDlDMEZEMzIwMDAwMDAwMDAwMDAwMEU0MkMKKzoxMDM0QzAwMDAzODA5MDMyMDcwMDAwMDQwMDAwMDBFMDAzMDAzNzMyNjAKKzoxMDM0RDAwMDAwMDAwMDAwMDAwMDAwRTQwMzQwOTAzMjA4MDAwMDA0RjcKKzoxMDM0RTAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMUQwNDAwMDAwMDgwRUYKKzoxMDM0RjAwMDAyMDAwMDkwMDAwMDZBMDQwNDAxMDA4MDgyNDI5MEJDMzcKKzoxMDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAwMDAzMjAwMDAwMDAwODAKKzoxMDM1MTAwMDAwMDAwMEU0MDMwMDkwMzIxMTAwMDAwNDAwMDAwMEUwMEQKKzoxMDM1MjAwMDAzMDAzNzMyMDAwMDFEMDQwMDAwMDBGQzFGNDA5MDlDODcKKzoxMDM1MzAwMDAwMDA3MDA0OUYwMDAwODAwMjAwOTBCMjAwMDAwMDAwQjQKKzoxMDM1NDAwMDAwMDAwMDA4MDk0MDkwMzIwMDAwMDAwMDAwMDAwMDA0NjQKKzoxMDM1NTAwMDA5QzBGRDMyMDMwOTAwMDAwMDAwMDAyODA4MDAzNjMyQ0YKKzoxMDM1NjAwMDAwMDA4OTA0MDAwMDAwMzAwODAwMzZEMjAwMDA5MzA0RjcKKzoxMDM1NzAwMDAwMDAwMDQ0MDg4MDAwRDIwMDAwNzkwNDA0MDEwMDgwQUIKKzoxMDM1ODAwMDAyMDA4NEIyMDMwRTAwMDAwMDAwMDAyODA4MDAzNjMyNUEKKzoxMDM1OTAwMDgwMDA4OTA0MDAwMDAwMzAwODAwMzZEMjAwMDA5MzA0NDcKKzoxMDM1QTAwMDAwMDAwMDQ0MDhDMDAwRDIwMDAwNzkwNDA0MDEwMDgwM0IKKzoxMDM1QjAwMDAyMDA4NEIyMDAwMDgwMDQwMDAwMDA0NDA4MDAwMTkyNzAKKzoxMDM1QzAwMDgwMDIwMDAwMDAwMDAwMDAwNzAwMzYzMjhDNDUwMDAwMzkKKzoxMDM1RDAwMDAwMDgwMDAwMDcwMDM2MzIwMDAwMzYxMDA0MTAwMDAwMUEKKzoxMDM1RTAwMDA3ODA5MEIyMDAwMDAwMDAwMDE4MDAwMDA3NDA5MDMyRjEKKzoxMDM1RjAwMDAwMDAwMDAwMDAwMDAwNDhGMkMxMzgzNDAwMDA3RTA0RTIKKzoxMDM2MDAwMDEyMDAwMDgwMDIwMDAwQjAxODAwMzYwMDAwMDAwMEY4MzAKKzoxMDM2MTAwMDczMEEwM0Y5MjAwMDAwMDAwMDAwMDBFNDAzMDAzNjMyQzIKKzoxMDM2MjAwMDA5MDAwMDAyMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwNDMKKzoxMDM2MzAwMDAwMDAwMEU0MDM0MDg0MzIwQTAwMDAwMjAwMDAwMEUwQzEKKzoxMDM2NDAwMDAzMDAzNzMyOEM0NTAwMDAwMDAwMDBBODAyMDAzNjMyMkIKKzoxMDM2NTAwMEEwMDAwMDAwMDAwMDAwMDAwOTAwMzYzMjAwMDAwMDAwNTkKKzoxMDM2NjAwMDAwMDAwMEUwMDcwMDAwMzIwMDAwODYwNDA2MDEwMDAwQjAKKzoxMDM2NzAwMDE5MDA5MEJDMDAwMDFEMDQwMDAwMDA4MDAyMDAwMDkwQjIKKzoxMDM2ODAwMDhDNDUwMDAwMDAwMDAwQzgwMjAwMzYzMjgwMDIwMDAwQjUKKzoxMDM2OTAwMDAwMDAwMDNDMDgwMDM2MzIwMDAwMDAwMDAwMDAwMDM0NEEKKzoxMDM2QTAwMDA4MDAwMTMyMDAwMDhFMDQwMjAwMDA4MEQyRTA4M0JDREEKKzoxMDM2QjAwMDAwMDAwMDAwMDAwMDAwMzQwOEMwODMzMjAwMDBBNDA0QjEKKzoxMDM2QzAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwMDAwMDAwMDAwMEEwRTgKKzoxMDM2RDAwMDA3ODA4MzMyMDAwMDAwMDAwMDAwMDAzMEQ4MjA4MzNBQzkKKzoxMDM2RTAwMDAwMDA4QzA0MDQwMTAwM0NEOEUwODNCQzAwMDAwMDAwMTIKKzoxMDM2RjAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwMDAwMDAwMDAwMDQwQjcKKzoxMDM3MDAwMDA4MDAwMDMyMDAwMDAwMDAwMDAwMDA0ODA4MDAwMDMyRkQKKzoxMDM3MTAwMDhDNDUwMDAwMDAwMDAwQzgwMjAwMzYzMjAwMDIwMDAwQTQKKzoxMDM3MjAwMDAwMDAwMEM4ODI4RDJDM0E4MDAwMDAwMDAwMDAwMDNDQTAKKzoxMDM3MzAwMDA4MDAzNjMyMDAwMDAwMDAwMDAwMDA3ODA5ODA3ODMyNkUKKzoxMDM3NDAwMDVBNUEwMDAwMDQwMTAwODA4MjhEOTc1QzAwMDA5QzA0OUUKKzoxMDM3NTAwMDAyMDEwMDQ4QTg5RTg0QkEwMDAwMDAwMDAwMDAwMDQ4NTIKKzoxMDM3NjAwMDE4ODA4NDNBMDAwMDlBMDQwNjAxMDAzQzI4QzA4M0JDRkIKKzoxMDM3NzAwMDAwMDAwMDAwMDAwMDAwNzgwOTg1ODQzMDEwMDAwMDAwN0YKKzoxMDM3ODAwMDAwMDAwMDQ4ODg4RDg0MzYwMDAwQTEwNDkwMDEwMDQ4QTQKKzoxMDM3OTAwMEU4QTU4NEJBMDAwMDAwMDAwMDAwMDA0ODE4ODA4NDNBQzAKKzoxMDM3QTAwMDAwMDAwMDAwMDAwMDAwNDgwODg1ODQzMDAwMDAwMDAwOTAKKzoxMDM3QjAwMDA0MDEwMDgwMDI4NTg0NUMwMDAwMDAwMDAwMDEwMDQwREMKKzoxMDM3QzAwMDA4NDAwMDUyMDAwMDAwMDAwMDAwMDBFNDAzMDA4MzMyQzMKKzoxMDM3RDAwMDAxMDAwMDAyMDAwMDAwRTAwMzAwMzczMjBDMDBBQTA0RTAKKzoxMDM3RTAwMDAwMDAwMDJDRDhBMDgyRjkwNTAwMDAwMjAwMDAwMEUwRDMKKzoxMDM3RjAwMDAzMDAzNzMyMDAwMDAwMDAwMDAwMDA4MDAyMDAwMDMwQUIKKzoxMDM4MDAwMDAwMDAwMDAwMDAwMTAwMzgwODQwM0U3MjAwMDAwMDAwODcKKzoxMDM4MTAwMDAwMDAwMEU0MDNDMDgyMzIwMjAwMDAwMjAwMDAwMEUwNjkKKzoxMDM4MjAwMDAzMDAzNzMyMDIwMDAwMDIwMDAwMDBFMDAzMDAzNzMyREMKKzoxMDM4MzAwMDAwMDAwMDAwMDAwMDAwODAwMjAwMDAzMDAwMDBBQzA0MjYKKzoxMDM4NDAwMDgwMDAwMDgwRjI0MDNFQjYwMDAwMDAwMDAwMDEwMDgwRDEKKzoxMDM4NTAwMDAyMDAwMDcwMDAwMEIzMDQ5RjAwMDA4MDAyMDA5MEIyREMKKzoxMDM4NjAwMDAwMDAwMDAwMDAwMDAwMDgwOTQwOTAzMjAwMDAwMDAwNDUKKzoxMDM4NzAwMDAwMDAwMDA0MDlDMEZEMzIwMDAwMDAwMDAwMDAwMDg0QzgKKzoxMDM4ODAwMDBFODA5MDMyMDAwMDFEMDQwMDAwMDA4ODBFNDA5MDkyQ0YKKzoxMDM4OTAwMDA4MDAwMDAwMDAwMDAwRjg5MzQwMDEzOTAwMDBCOTA0NUUKKzoxMDM4QTAwMDlGMDAwMDgwMDIwMDkwQjIwMDAwMDAwMDAwMDAwMDA4QUQKKzoxMDM4QjAwMDA5NDA5MDMyMDAwMDAwMDAwMDAwMDAwNDA5QzBGRDMyMDEKKzoxMDM4QzAwMDAwMDAwMDAwMDAwMDAwMjAwNzQwRjUzMjAwMDAwMDAwNkEKKzoxMDM4RDAwMDAwMDgwMDIwMDcwMDAwMzIwMDAwMDAwMDAwMTAwMDIwNTcKKzoxMDM4RTAwMDA3QzBGNTMyMDAwMDAwMDAwMDE4MDAyMDA3NDBGNjMyNDMKKzoxMDM4RjAwMDAwMDAwMDAwMDAyMDAwMjAwNzgwRjYzMjAwMDAwMDAwRDkKKzoxMDM5MDAwMDAwMjgwMDIwMDdDMEY2MzIwMDAwMDAwMDAwMzAwMDIwMzAKKzoxMDM5MTAwMDA3MDBGNzMyMDAwMDAwMDAwMDM4MDAyMDA3ODBGRjMyNjcKKzoxMDM5MjAwMDAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMjAwMDAwMDAwOEIKKzoxMDM5MzAwMDAwMDAwMDAwMDc0MDA5MzIwMDAwMDAwMDAwMDgwMDAwRkQKKzoxMDM5NDAwMDc3QzAyOTM3MDAwMDAwMDAwMDEwMDAwMDA3ODA5MDMyODcKKzoxMDM5NTAwMDAwMDAwMDAwMDAxODAwMDAwNzQwOTAzMjAwMDBDNjA0N0MKKzoxMDM5NjAwMDEyMDAwMDQ4RjJDMTM4QjQxODAwMzYwMDAwMDAwMEY4MTgKKzoxMDM5NzAwMDczMEEwM0Y5MDAwMDAwMDAwMDAwMDAwOEM4MDEwMDM0QzkKKzoxMDM5ODAwMDAwMDAzMjAzMDAwMDAwRkMwMjAwMDA5MjAwMDBDQzA0QTIKKzoxMDM5OTAwMDgwMDEwMDgwRjI0MTkwQjYwMDAwQ0QwNDAwMDAwMEM4MTQKKzoxMDM5QTAwMDJGODFGQzk0MDAwMDAwMDAwMDAwMDBDODJGODFGQzM1MkUKKzoxMDM5QjAwMDAwMDAwMDAwMDAwMDAwODAwRjQ1OTAzMDAwMDBEMDA0OUYKKzoxMDM5QzAwMDAyMDAwMDgwMDI3RUY4QkMwMDAwMDAwMDAwMDAwMDg0QkQKKzoxMDM5RDAwMDBGMDBGODMyMDAwMDAwMDAwMDAwMDAwMDE5NDBGODM3MjYKKzoxMDM5RTAwMDAwMDAwMDAwMDAwMDAwODQzRjQwRjgzNzAwMDAwMDAwQTUKKzoxMDM5RjAwMDAwMDAwMDg0MEY2NEY4M0EwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDNBMDAwMDE5MDBGODM3MDAwMDAwMDAwMDAwMDA4MDNGMDBGODM3ODAKKzoxMDNBMTAwMDAwMDAxRDA0MDAwMDAwODAwRjI0Rjg5QTAwMDBEODA0NjQKKzoxMDNBMjAwMDgwMDEwMDgwRjI0MTkwQjYwMDAwMUQwNDAwMDAwMEM4MzMKKzoxMDNBMzAwMDRGODFGQzk0MDAwMDFEMDQwMDAwMDBDODRGODFGQzk1REMKKzoxMDNBNDAwMDAwMDBEQjA0MDQwMTAwODAwMjQwOTBCQzAwMDAwMDAwODQKKzoxMDNBNTAwMDAwMDAwMDA0MDlDMDAwMzIwMDAwMUQwNDAwMDAwMEU0NjIKKzoxMDNBNjAwMDFFNDA5MDlDMDAwMDAwMDAwMDAwMDBBODIyMDA5MDM3M0IKKzoxMDNBNzAwMDAwMDAxRDA0MDAwMDg2QzAwNzQwOTA5MjA4MDAwMDAwNkUKKzoxMDNBODAwMDAwMDAwMEY4OTM0MDAxMzkwRDAwMDAwMDAwMDAwMEZDMjgKKzoxMDNBOTAwMDAyRTQxNjM4MDAwMDAwMDAwMDAwMDAwMDA5MDAwMjMyQjUKKzoxMDNBQTAwMDAwMDBFNjA0MDQwMDAwODAwMjAwQjBCMjAwMDAwMDAwNDQKKzoxMDNBQjAwMDAwMDAwMDAwMEIwMDAwMzIyMDAwMDAwMDAwMDAwMEEwMDkKKzoxMDNBQzAwMDgyMEQyQTNBMDAwMEUxMDQwNDAxMDAwMDE5MDA5MEJDQjQKKzoxMDNBRDAwMDAwMDBFODA0MDAwMDAwMjg3OTAxMDA5NDAwMDAwMDAwQzQKKzoxMDNBRTAwMDAwMDAwMEM4M0Y4MEZDMzQ0MDgwMDAwMDAwMDAwMDI4MzcKKzoxMDNBRjAwMDA5ODAzNjMyMDAwMEYxMEUwMDAwMDBEODAyMDAwMEQyMkEKKzoxMDNCMDAwMDAwMDAzRTAzMDQwMDAwODAwMjgwOTJCQzE4MDAwMDAwMDgKKzoxMDNCMTAwMDAwMDAwMEY4NzMwQTAzMzkzRTAzMzYwMDAwMDAwMEMwQkQKKzoxMDNCMjAwMDAyMDAzNjkyRUEwNUYyMDQwNDAxMDA4MDgyNEQ5MEJDNDYKKzoxMDNCMzAwMDAwMDAwMDAwMDAwMDAwRUMwRjAwMTUzMjAwRkUxRjAwMjYKKzoxMDNCNDAwMDAwMDAwMEYwMEYwMDM3MzJGMEZGMDAwMDAwMDAwMEU4MzYKKzoxMDNCNTAwMDBGMDAzNjMyOTgwNTAwMDAwMDAwMDBGNDBGMDAzNjMyRTYKKzoxMDNCNjAwMDAwMDBGODA0MDAwMDAwQzg0RjgwRkM5NTM2MjMzNjEwOTIKKzoxMDNCNzAwMDA0MDEwMDgwODI0RDkwQkMwMDAwMDAwMDAwMDAwMEVDQjkKKzoxMDNCODAwMDBGODAxNDMyMDBGODFGMDAwMDAwMDBGMDBGMDAzNzMyRTEKKzoxMDNCOTAwMEMwRkYwMDAwMDAwMDAwRTgwRjAwMzYzMjk4MjcwMDAwNDgKKzoxMDNCQTAwMDAwMDAwMEY0MEYwMDM2MzIwMDAwMDAwMDAwMDAwMEM4RTIKKzoxMDNCQjAwMDRGODBGQzM0MDQwMDAwMDAwMDAwMDA2MDhGNEQ5MDNBRkMKKzoxMDNCQzAwMDAwMDBCQzBFMDAwMDAwODAwMjAwMDBEMDAwMDAxRDA0QjgKKzoxMDNCRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRkQwNDgwMDEwMDgwRDEKKzoxMDNCRTAwMDAyNDA5MEI2MDAwMDAwMDAwMDAwMDBDODZGODBGQzM0NjYKKzoxMDNCRjAwMDAwMDBGRjA0ODAwMTAwODAxMjQwOTBCNjAwMDAwMDAwMjkKKzoxMDNDMDAwMDAwMDAwMEM4NUY4MEZDMzQwMDAwMUQwNDAwMDAwMDgwM0MKKzoxMDNDMTAwMDAyMDAwMDkwMDAwMDAyMDUwNDAxMDA4MDMyNDA5MEIwRDQKKzoxMDNDMjAwMDgwMDExRDA0MDAwMDAwQzg4RjhERkM5MTAwMDAwNDA1NzgKKzoxMDNDMzAwMDgwMDAwMDgwMTI0MDkwQjYwMDAwMDUwNTAwMDAwMEM4MUEKKzoxMDNDNDAwMDdGODBGQzk1MDAwMDAwMDAwMDAwMDBDODdGODBGQzM0RUQKKzoxMDNDNTAwMDAwMDAwNzA1ODAwMDAwODAwMjQwOTBCNjAwMDAwODA1QzMKKzoxMDNDNjAwMDAwMDAwMEM4OEY4MEZDOTUwMDAwMDAwMDAwMDAwMEM4MjQKKzoxMDNDNzAwMDhGODBGQzM0MDAwMDBCMDU4MDAwMDA4MDIyNDA5MEI2NEQKKzoxMDNDODAwMEYyMEUwMDAwMDAwMDAwOEMwRTAwMzYzMjAwMDAwRDA1MjAKKzoxMDNDOTAwMDAwMDAwMEM4MUY4MUZDOTUxNTBGMDAwMDAwMDAwMDhDN0IKKzoxMDNDQTAwMDBFMDAzNjMyMDAwMDAwMDAwMDAwMDBDODFGODFGQzM0MDYKKzoxMDNDQjAwMDEwMDAwMDAwMDAwMDAwNEMxRjI0MTYzODAwMDAxRDA0RjYKKzoxMDNDQzAwMDAwMDAwMDUwMUYwMEY1OUMwMDAwMTIwNTlGMDAwMDgwQkUKKzoxMDNDRDAwMDAyMDA5MEIyMDAwMDAwMDAwMDAwMDAwODA5NDA5MDMyOEQKKzoxMDNDRTAwMDAwMDAwMDAwMDAwMDAwMDQwOUMwRkQzMjAwMDAwMDAwRDgKKzoxMDNDRjAwMDAwMDAwMDAwMTcwMEY1M0E4QzQ0MDAwMDAwMDgwMDAwQTYKKzoxMDNEMDAwMDA3MDAzNjMyMDAwMDM2MTAwNDEwMDAwMDA3ODA5MEIyMjEKKzoxMDNEMTAwMDAwMDAwMDAwMDAxODAwMDAwNzQwOTAzMjAwMDAxNjA1NjcKKzoxMDNEMjAwMDEyMDAwMDQwRjJDMTM4QjQxODAwMzYwMDAwMDAwMEY4NUMKKzoxMDNEMzAwMDczMEEwM0Y5MDAwMDFEMDQwMDAwMDA4MDAyMDAwMDkwRDcKKzoxMDNENDAwMDAwMDAxRDA0MDAwMDAwRUMwMzQwOTA5MjAwMDAxQTA1RTIKKzoxMDNENTAwMEIyMDAwMEQ4MDIwMDAwQjIwMDAwMDAwMDAwMDIwMUVDMzYKKzoxMDNENjAwMDE2RTQ2RTNBMDgwMDAwMDAwMDAwMDBGODkzNDAwMTM5QTQKKzoxMDNENzAwMDAwMDA0MDA1MTcxMDAxRjgwMjAwNkVCMjA2MDAyNTA1OEMKKzoxMDNEODAwMDA0MDEwMDgwODI4RDJGQjAwMzAwMDAwMDAwMDAwMEY4QzUKKzoxMDNEOTAwMDgyOEQyRjMyMDBDMDA1MEUwMDAwMDAyODA5ODAzNkQyMjcKKzoxMDNEQTAwMDAwMDAwMDAwMDAwMjAxRUMxNkMwNkUzQzAwMDAwMDAwQTQKKzoxMDNEQjAwMDAwMTg4NkM4MDYwMDAwMzIxODAwMzYwMDAwMDAwMEY4MUYKKzoxMDNEQzAwMDczMEEwM0Y5MDAwMDI2MDUwMDAwMDBEMDAyMDAwMDkyRUIKKzoxMDNERDAwMDAwMDAyQjA1MDQxOTg2ODAwMjgwNkNCQzAwMDAwMDAwRTYKKzoxMDNERTAwMDAwMDAwMDAwMDkwMDZFMzIwMDAwMDAwMEMxMDgwMDA0NUQKKzoxMDNERjAwMDA5MDA2RTMyMDAwMDAwMDBDMDE1ODY3ODBGQzA2QzMyREEKKzoxMDNFMDAwMDAwMDAzMDA1ODAwMTAwODAyMjgwMkZCNjAwMDAzMDA1QzAKKzoxMDNFMTAwMDAwMTg4NkM4MDY0MDAwOTIwMDAwMDAwMDAwNDAwMDAwMjQKKzoxMDNFMjAwMDA5MDA2RTMyMDAwMDAwMDBDMjQ4MDAwNDA5MDA2RTMyMzIKKzoxMDNFMzAwMDAwMDAwMDAwQzAxNjg2NzgwRkMwNkMzMjAwMDAzMDA1MEMKKzoxMDNFNDAwMDgwMDEwMDgwMTI4MDJGQjYwMDAwMDAwMDAwMTg4NkM4OTQKKzoxMDNFNTAwMDA2MDAwMDMyMDA0MDAwMDAwMDAwMDAyODA5ODAzNjMyRDEKKzoxMDNFNjAwMDAwMDAzODA1MDQwMjAxODAwMkMwNkVCQzAwMDAwNTBFOEYKKzoxMDNFNzAwMDAwMDIwMUVDMTZDMDZFREMwMDAwMzYwNTgwMDAwMDgwRjgKKzoxMDNFODAwMDAyODAyRkI2MDAwMDM4MDU4MTAwMDBGODIyODAyRkI0OTAKKzoxMDNFOTAwMDAwMDAzODA1MDAxODg2QzgwNjQwMDA5MjAwMDAzODA1NkEKKzoxMDNFQTAwMDgyMDAwMEY4MTI4MDJGQjQwMDAwMDAwMDAwMTg4NkM4QkQKKzoxMDNFQjAwMDA2MDAwMDMyMDAwMDAwMDAwMDEwODZDODA2MDAwMDMyMzQKKzoxMDNFQzAwMDAwMDAwMDAwMDAwMDAwMDAwN0MwMEEzMjAwMzgwMDAwQjcKKzoxMDNFRDAwMDAwMDgwMDAwMDcwMDM2MzIwMDAwMzYxMDA0MTAwMDAwMTEKKzoxMDNFRTAwMDA3MDA5MEIyMDAwMDAwMDAwMDE4MDAwMDA3NDA5MDMyNjgKKzoxMDNFRjAwMDAwMDAzRDA1MTIwMDAwNDBGMkMxMzhCNDE4MDAzNjAwNDEKKzoxMDNGMDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDE3MDEwMEY4MzAKKzoxMDNGMTAwMEEyODAyRjM0MDAwMDAwMDAwMDEwODZBODQyODA2QzM3NzkKKzoxMDNGMjAwMDAwMDA0QTA1MTIwMDcwMzgwMjAwN0VCMjAwMDAzNjEwMTAKKzoxMDNGMzAwMDEyMDA3MDNDMDIwMDdFQjIwMDAwMzYxMDEyMDA3MDMwOTkKKzoxMDNGNDAwMDAyMDA3RUIyMDAwMDM2MTAxMjAwNzAzNDAyMDA3RUIyMTEKKzoxMDNGNTAwMDAwMDA0MTA1MDIwMTAwODBCMjgyMkFCQzAwMDAwMDAwN0UKKzoxMDNGNjAwMDE3MDAwMEQwMDIwMDAwMzIwNjAwMjUwNTA0MDEwMDgwODEKKzoxMDNGNzAwMDgyOEQyRkIwMDAwMDFGMDUwNDAzMDE4MDAyQzA2RUJDQkIKKzoxMDNGODAwMDAwMDA1NTA1MDAwMDAwODAwMjAwMDA5MDAwMDA0QzA1NzQKKzoxMDNGOTAwMDA0MDMwMTgwMDJDMDZFQkMwMDAwNTUwNTAwMTA4NkM4RjUKKzoxMDNGQTAwMDQ2ODAyQTk2MDAwMDAwMDAwMDEwODZDODQ2ODAyQTM2MDcKKzoxMDNGQjAwMDAwMDA1MDA1ODAwMDAwODAxMjgwMkZCNjAzMDA1MjA1REIKKzoxMDNGQzAwMDIyMDAwMEY4ODI4RDJGQjIwMDAwNTIwNTAwMTg4NkM4MkEKKzoxMDNGRDAwMDA2MDAwMDkyMDAwMDU1MDU4MDAwMDA4MDIyODAyRkI2NjgKKzoxMDNGRTAwMDAwMDAwMDAwQzIwMTAwRjgwMjgwMkYzNTAwQzAwNTBFNUQKKzoxMDNGRjAwMDAwMDAwMDI4MDk4MDM2RDIwMDAwMDAwMDAwMDIwMUVDMTkKKzoxMDQwMDAwMDE2QzA2RTNDMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5NzEKKzoxMDQwMTAwMDAwMDAwMDAwMDAxMDAxRTAwNjgwMkYzMjAwMDAwMDAwQzgKKzoxMDQwMjAwMDAwMDAwMEE4RTEwMDAwMzQwMDAwMDAwMEEyMDAwMEZDMzUKKzoxMDQwMzAwMDAyMDAwMDMyMDAwMDMyMDM4MDAxMDA4MEEyODAyRkI2MEYKKzoxMDQwNDAwMDAwMDA1QjA1QjkwMTAwRDgwMjgwMDFCMjAwMDAzMjAzMTQKKzoxMDQwNTAwMDAwMDAwMEY4MDIwMDAwOTIwMDAwMDAwMDAwMDAwMDM4OUMKKzoxMDQwNjAwMDE4ODBGNzNBMDAwMDAwMDAwMDAwMDAzOEY4QkY4MzMwRTUKKzoxMDQwNzAwMDAwMDA1RjA1MDQwMTAwODBGMkJEODNCQzAwMDAzMjAzMzQKKzoxMDQwODAwMEE5MDAwMEY4MDIwMDAwOTIwMEMwNjYwNTE4MDEwMDBDQUIKKzoxMDQwOTAwMEE4Q0QzRUIyMDAwMDYyMDU4NDAwMDA3NDFGNDBGN0JBNEMKKzoxMDQwQTAwMDAwMDAzMjAzQTkwMDAwRjgwMjAwMDA5MjAwMDAwMDAwQTYKKzoxMDQwQjAwMDAwMDAwMDc0MEYwMDAwMzIwMEMwNjYwNTE4MDEwMDBDRkIKKzoxMDQwQzAwMEE4Q0QzRUIyMTgwMDM2MDAwMDAwMDBGODczOEEwM0Y5NEMKKzoxMDQwRDAwMDAwMDA2MzA1MDAwMDAwQjAwMjAwMDA5MjAwMDAwMDAwMzQKKzoxMDQwRTAwMDAwMDAwMDdDMEY4MDgzMzIwMDAwMDAwMDAwMjgwMDAwRTgKKzoxMDQwRjAwMDA3MDAwMDMyMDAwMDAwMDAwMDMwMDAwMDA3MDAwMDMyMUUKKzoxMDQxMDAwMDAwMDEwMDgwMDAzODAwMDAwNzAwMzczMjAwMDAwMDAwODYKKzoxMDQxMTAwMDAwM0MwMDBDMDc4MDgzMzIwMDAwNkIwNTEyMDAwMDQ4NTEKKzoxMDQxMjAwMDAyQzA4MEIyMDAwMDMyMDNBOTAwMDAwOEU4MDEwMDk0MzgKKzoxMDQxMzAwMDAwMDA3MzA1MDQwMTAwODBBMkMwRURCQzUyMDAwMDAwMjUKKzoxMDQxNDAwMDAwMDAwMDc0MEUwMDM2MzIwMDAwMDAwMDAwMDAwMEMwQzUKKzoxMDQxNTAwMDBFNDAwMTMyNDA3RTA1MDAwMDAwMDBCNDBFMDAzNzMyRjAKKzoxMDQxNjAwMDAwMDAwMDAwMDAwMDAwQzQwRTgwMDczMjY0MDA3ODA1RTMKKzoxMDQxNzAwMDAwMDAwMENDMEUwMDM2OTIyOTAwMDAwMDAwMDAwMDc0MDAKKzoxMDQxODAwMDBFMDAzNjMyMDAwMDAwMDAwMDAwMDBDMDBFNDAwMDMyNzkKKzoxMDQxOTAwMEEwOEMwMDAwMDAwMDAwQjQwRTAwMzYzMjAwMDAwMDAwQzkKKzoxMDQxQTAwMDAwMDAwMEM0MEVDMDAwMzIwMDAwMDAwMDAwMDAwMENDN0YKKzoxMDQxQjAwMDBFODAwMjMyMTAwMDAwMDAwMDAwMDBFNDMzN0JFQzM5NzYKKzoxMDQxQzAwMDFFMDAwMDAxMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwODQKKzoxMDQxRDAwMDAwMDAwMEM4NkVDMEVDMzcwMDAwMUQwNDAwMDAwMEQ4Q0QKKzoxMDQxRTAwMDBFQzBFRDkyN0UwNTAwMDAwMDAwMDA4ODgyQ0Q4MTNBNkQKKzoxMDQxRjAwMDdFMDUwMDAwMDAwMDAwODg4MkNEODEzQUJEMDUwMDAwRTgKKzoxMDQyMDAwMDAwMTgwMTg4ODJDRDZFM0FDNjA1MDAwMDAwMTgwMTg4QUEKKzoxMDQyMTAwMDgyQ0Q2RTNBQ0YwNTAwMDAwMDE4MDE4ODgyQ0Q2RTNBM0IKKzoxMDQyMjAwMEQ4MDUwMDAwMDAxODAxODg4MkNENkUzQUUxMDUwMDAwMzMKKzoxMDQyMzAwMDAwMTgwMTg4ODJDRDZFM0FFQTA1MDAwMDAwMTgwMTg4NTYKKzoxMDQyNDAwMDgyQ0Q2RTNBRjMwNTAwMDAwMDE4MDE4ODgyQ0Q2RTNBRTcKKzoxMDQyNTAwMEZDMDUwMDAwMDAxODAxODg4MkNENkUzQTA1MDYwMDAwQkEKKzoxMDQyNjAwMDAwMTgwMTg4ODJDRDZFM0EwRTA2MDAwMDAwMTgwMTg4MDEKKzoxMDQyNzAwMDgyQ0Q2RTNBMTcwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBOTIKKzoxMDQyODAwMDIwMDYwMDAwMDAxODAxODg4MkNENkUzQTI5MDYwMDAwNDEKKzoxMDQyOTAwMDAwMTgwMTg4ODJDRDZFM0EzMjA2MDAwMDAwMTgwMTg4QUQKKzoxMDQyQTAwMDgyQ0Q2RTNBM0IwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBM0UKKzoxMDQyQjAwMDQ0MDYwMDAwMDAxODAxODg4MkNENkUzQTREMDYwMDAwQzkKKzoxMDQyQzAwMDAwMTgwMTg4ODJDRDZFM0E1NjA2MDAwMDAwMTgwMTg4NTkKKzoxMDQyRDAwMDgyQ0Q2RTNBNUYwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBRUEKKzoxMDQyRTAwMDY4MDYwMDAwMDAxODAxODg4MkNENkUzQTcxMDYwMDAwNTEKKzoxMDQyRjAwMDAwMTgwMTg4ODJDRDZFM0E3QTA2MDAwMDAwMTgwMTg4MDUKKzoxMDQzMDAwMDgyQ0Q2RTNBODMwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBOTUKKzoxMDQzMTAwMDhDMDYwMDAwMDAxODAxODg4MkNENkUzQTk1MDYwMDAwRDgKKzoxMDQzMjAwMDAwMTgwMTg4ODJDRDZFM0E5RTA2MDAwMDAwMTgwMTg4QjAKKzoxMDQzMzAwMDgyQ0Q2RTNBQTcwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBNDEKKzoxMDQzNDAwMEIwMDYwMDAwMDAxODAxODg4MkNENkUzQUI5MDYwMDAwNjAKKzoxMDQzNTAwMDAwMTgwMTg4ODJDRDZFM0FDMjA2MDAwMDAwMTgwMTg4NUMKKzoxMDQzNjAwMDgyQ0Q2RTNBQ0IwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBRUQKKzoxMDQzNzAwMEQ0MDYwMDAwMDAxODAxODg4MkNENkUzQUREMDYwMDAwRTgKKzoxMDQzODAwMDAwMTgwMTg4ODJDRDZFM0FFNjA2MDAwMDAwMTgwMTg4MDgKKzoxMDQzOTAwMDgyQ0Q2RTNBRUYwNjAwMDAwMDE4MDE4ODgyQ0Q2RTNBOTkKKzoxMDQzQTAwMEY4MDYwMDAwMDAxODAxODg4MkNENkUzQTAxMDcwMDAwNkYKKzoxMDQzQjAwMDAwMTgwMTg4ODJDRDZFM0EwQTA3MDAwMDAwMTgwMTg4QjMKKzoxMDQzQzAwMDgyQ0Q2RTNBMTMwNzAwMDAwMDE4MDE4ODgyQ0Q2RTNBNDQKKzoxMDQzRDAwMDFDMDcwMDAwMDAxODAxODg4MkNENkUzQTI1MDcwMDAwRjYKKzoxMDQzRTAwMDAwMTgwMTg4ODJDRDZFM0EyRTA3MDAwMDAwMTgwMTg4NUYKKzoxMDQzRjAwMDgyQ0Q2RTNBMDAwMEY3MDIwMDAwMDBENDAyMDAwMDkyNjUKKzoxMDQ0MDAwMDAwMDA3MjAyMDAwMDAwODAwMjAwMDA5MDM3MDcwMDAwRTgKKzoxMDQ0MTAwMDAwMUMwMTg4ODJDRDZFM0EzQzA3MDAwMDAwMUMwMTg4MTgKKzoxMDQ0MjAwMDgyQ0Q2RTNBNDEwNzAwMDAwMDFDMDE4ODgyQ0Q2RTNBQjEKKzoxMDQ0MzAwMDQ2MDcwMDAwMDAxQzAxODg4MkNENkUzQTRCMDcwMDAwNDEKKzoxMDQ0NDAwMDAwMUMwMTg4ODJDRDZFM0E1MDA3MDAwMDAwMUMwMTg4RDQKKzoxMDQ0NTAwMDgyQ0Q2RTNBNTUwNzAwMDAwMDFDMDE4ODgyQ0Q2RTNBNkQKKzoxMDQ0NjAwMDVBMDcwMDAwMDAxQzAxODg4MkNENkUzQTVGMDcwMDAwRTkKKzoxMDQ0NzAwMDAwMUMwMTg4ODJDRDZFM0E2NDA3MDAwMDAwMUMwMTg4OTAKKzoxMDQ0ODAwMDgyQ0Q2RTNBNjkwNzAwMDAwMDFDMDE4ODgyQ0Q2RTNBMjkKKzoxMDQ0OTAwMDZFMDcwMDAwMDAxQzAxODg4MkNENkUzQTczMDcwMDAwOTEKKzoxMDQ0QTAwMDAwMUMwMTg4ODJDRDZFM0E3ODA3MDAwMDAwMUMwMTg4NEMKKzoxMDQ0QjAwMDgyQ0Q2RTNBN0QwNzAwMDAwMDFDMDE4ODgyQ0Q2RTNBRTUKKzoxMDQ0QzAwMDgyMDcwMDAwMDAxQzAxODg4MkNENkUzQTg3MDcwMDAwMzkKKzoxMDQ0RDAwMDAwMUMwMTg4ODJDRDZFM0EwMDAwRkMwMjAwMDAwMEQ0NkUKKzoxMDQ0RTAwMDAyMDAwMDkyMDAwMDEyMDMwMDAwMDBENDAyMDAwMDkyQkIKKzoxMDQ0RjAwMDAwMDAzQzA5MDAwMDAwMTAwODgwMDE5MjAwMDAzNjEwMDYKKzoxMDQ1MDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwRDMKKzoxMDQ1MTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQjEKKzoxMDQ1MjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwRUQKKzoxMDQ1MzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwQTMKKzoxMDQ1NDAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwODEKKzoxMDQ1NTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwQkQKKzoxMDQ1NjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwN0IwOTAwMDAwMDEwQTUKKzoxMDQ1NzAwMDA4ODAwMDkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQzkKKzoxMDQ1ODAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwOEQKKzoxMDQ1OTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwNDMKKzoxMDQ1QTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMjEKKzoxMDQ1QjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwNUQKKzoxMDQ1QzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwMTMKKzoxMDQ1RDAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwRjEKKzoxMDQ1RTAwMDAwMDA4ODA5MDAwMDAwMTAwODgwMDA5MjAwMDAzNjEwQ0EKKzoxMDQ1RjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwRTMKKzoxMDQ2MDAwMDAyMDAwMDkwMDAwMENGMDkwMDAwMDAxMDA4NDAwMTkyNTUKKzoxMDQ2MTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwRkMKKzoxMDQ2MjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwQjIKKzoxMDQ2MzAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwOTAKKzoxMDQ2NDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDBENzA5MzIKKzoxMDQ2NTAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwMzYxMDAwMDAwMDgwMkEKKzoxMDQ2NjAwMDAyMDAwMDkwMDAwMEQ3MDkwMDAwMDAxMDA4QzAwMDkyNkUKKzoxMDQ2NzAwMDAwMDAzRDBDMDAwMDAwMTAwODQwMDE5MjAwMDAzNjEwQzAKKzoxMDQ2ODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRDcwOTAwMDAwMDEwMjgKKzoxMDQ2OTAwMDA4QzAwMDkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNjgKKzoxMDQ2QTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwNkMKKzoxMDQ2QjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTQwOTAwMDAwMDEwRUIKKzoxMDQ2QzAwMDA4QzAwMDkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMzgKKzoxMDQ2RDAwMDAwMDBFNDA5MDAwMDAwMTAwOEMwMDA5MjAwMDAzRDBDM0EKKzoxMDQ2RTAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDAwMDAwMDgwMTkKKzoxMDQ2RjAwMDAyMDAwMDkwMDAwMEU0MDkwMDAwMDAxMDA4QzAwMDkyRDEKKzoxMDQ3MDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwMEIKKzoxMDQ3MTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwQzEKKzoxMDQ3MjAwMDAyMDAwMDkwMDAwMEUyMDkwMDAwMDAxMDA4QzAwMDkyQTIKKzoxMDQ3MzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDBFMjA5MzYKKzoxMDQ3NDAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwM0QwQzAwMDAwMDEwQTYKKzoxMDQ3NTAwMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMjYKKzoxMDQ3NjAwMDAwMDBFMjA5MDAwMDAwMTAwOEMwMDA5MjAwMDAzNjEwQUUKKzoxMDQ3NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwNjEKKzoxMDQ3ODAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwM0YKKzoxMDQ3OTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDA3QTBBM0QKKzoxMDQ3QTAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwRDQwOTAwMDAwMDEwQjIKKzoxMDQ3QjAwMDA4MDAwMTkyMDAwMENGMDkwMDAwMDAxMDA4NDAwMTkyOUIKKzoxMDQ3QzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwNEIKKzoxMDQ3RDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwMDEKKzoxMDQ3RTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwREYKKzoxMDQ3RjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwMUIKKzoxMDQ4MDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNzUwQTAwMDAwMDEwMDcKKzoxMDQ4MTAwMDA4ODAwMDkyMDAwMEQ0MDkwMDAwMDAxMDA4MDAwMTkyRjYKKzoxMDQ4MjAwMDAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MjAwMDAzNjEwN0YKKzoxMDQ4MzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwQTAKKzoxMDQ4NDAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwN0UKKzoxMDQ4NTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwQkEKKzoxMDQ4NjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwNzAKKzoxMDQ4NzAwMDAyMDAwMDkwMDAwMDc1MEEwMDAwMDAxMDA4MDAwMTkyN0MKKzoxMDQ4ODAwMDAwMDBENDA5MDAwMDAwMTAwODAwMDE5MjAwMDBDRjA5QzgKKzoxMDQ4OTAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDAwMDAwMDgwNjcKKzoxMDQ4QTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMUUKKzoxMDQ4QjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwNUEKKzoxMDQ4QzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwMTAKKzoxMDQ4RDAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwRUUKKzoxMDQ4RTAwMDAwMDBFNDBBMDAwMDAwMTAwODgwMDA5MjAwMDBENDA5RDMKKzoxMDQ4RjAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwQ0YwOTAwMDAwMDEwMjUKKzoxMDQ5MDAwMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNzQKKzoxMDQ5MTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwRjkKKzoxMDQ5MjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwQUYKKzoxMDQ5MzAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwOEQKKzoxMDQ5NDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDBFNDBBMjEKKzoxMDQ5NTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwRDQwOTAwMDAwMDEwQkYKKzoxMDQ5NjAwMDA4MDAwMTkyMDAwMENGMDkwMDAwMDAxMDA4NDAwMTkyRTkKKzoxMDQ5NzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwOTkKKzoxMDQ5ODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwNEYKKzoxMDQ5OTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMkQKKzoxMDQ5QTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDBFMzA5QzMKKzoxMDQ5QjAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMDAwMDAwMDgwMDcKKzoxMDQ5QzAwMDAyMDAwMDkwMDAwMEUzMDkwMDAwMDAxMDA4ODAwMDkyM0YKKzoxMDQ5RDAwMDAwMDAzRDBDMDAwMDAwMTAwODQwMDE5MjAwMDAzNjEwNUQKKzoxMDQ5RTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwRUYKKzoxMDQ5RjAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQ0QKKzoxMDRBMDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwMDgKKzoxMDRBMTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTMwOTAwMDAwMDEwODgKKzoxMDRBMjAwMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwOTMKKzoxMDRBMzAwMDAwMDBFMzA5MDAwMDAwMTAwODAwMDE5MjAwMDAzRDBDOTYKKzoxMDRBNDAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDAwMDAwMDgwQjUKKzoxMDRBNTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNkMKKzoxMDRBNjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwQTgKKzoxMDRBNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwNUUKKzoxMDRBODAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwM0MKKzoxMDRBOTAwMDAwMDA4QzA3MDAwMDAwMTAwODAwMDE5MjAwMDAzNjEwOTIKKzoxMDRBQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOEMwNzAwMDAwMDEwNTEKKzoxMDRBQjAwMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQzMKKzoxMDRBQzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwNDgKKzoxMDRBRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwRkUKKzoxMDRBRTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwREMKKzoxMDRBRjAwMDAwMDA1RTBDMDAwMDAwMTAwODQwMDE5MjAwMDA1NDBDMDEKKzoxMDRCMDAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwNUUwQzAwMDAwMDEwNDAKKzoxMDRCMTAwMDA4NDAwMTkyMDAwMENGMDkwMDAwMDAxMDA4NDAwMTkyRjcKKzoxMDRCMjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDA1RTBDQzMKKzoxMDRCMzAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDAwMDAwMDgwQzQKKzoxMDRCNDAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwN0IKKzoxMDRCNTAwMDAwMDA4MTA5MDAwMDAwMTAwODQwMDA5MjAwMDA4MTA5NTcKKzoxMDRCNjAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwODEwOTAwMDAwMDEwODEKKzoxMDRCNzAwMDA4QzAwMDkyMDAwMDgxMDkwMDAwMDAxMDA4MDAwMTkyQTYKKzoxMDRCODAwMDAwMDA4NjA5MDAwMDAwMTAwODQwMDE5MjAwMDA4MTA5MjEKKzoxMDRCOTAwMDAwMDAwMDEwMDg4MDAxOTIwMDAwODEwOTAwMDAwMDEwNTAKKzoxMDRCQTAwMDA4QzAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNTIKKzoxMDRCQjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwNTcKKzoxMDRCQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNDkwQjAwMDAwMDEwNkYKKzoxMDRCRDAwMDA4ODAwMDkyMDAwMDQ5MEIwMDAwMDAxMDA4QzAwMDkyRkQKKzoxMDRCRTAwMDAwMDA0OTBCMDAwMDAwMTAwODAwMDE5MjAwMDBDRjA5RUUKKzoxMDRCRjAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDAwMDAwMDgwMDQKKzoxMDRDMDAwMDAyMDAwMDkwMDAwMDQ5MEIwMDAwMDAxMDA4QzAwMTkyNTMKKzoxMDRDMTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwRjYKKzoxMDRDMjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwQUMKKzoxMDRDMzAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwOEEKKzoxMDRDNDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwQzYKKzoxMDRDNTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNjgwQzAwMDAwMDEwQkUKKzoxMDRDNjAwMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMTEKKzoxMDRDNzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwOTYKKzoxMDRDODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwNEMKKzoxMDRDOTAwMDAyMDAwMDkwMDAwMEQ4MEMwMDAwMDAxMDA4NDAwMTkyQjMKKzoxMDRDQTAwMDAwMDBEQjBDMDAwMDAwMTAwODQwMDE5MjAwMDA0QzBDREEKKzoxMDRDQjAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwREIwQzAwMDAwMDEwMTIKKzoxMDRDQzAwMDA4NDAwMTkyMDAwMDhDMDcwMDAwMDAxMDA4NDAwMTkyOEIKKzoxMDRDRDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDBEQjBDOTUKKzoxMDRDRTAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwOEQwNzAwMDAwMDEwMzUKKzoxMDRDRjAwMDA4MDAwMjkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQzAKKzoxMDREMDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDBEQzBDNjMKKzoxMDREMTAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwNEMwQzAwMDAwMDEwNDAKKzoxMDREMjAwMDA4NDAwMTkyMDAwMERDMEMwMDAwMDAxMDA4NDAwMTkyRDUKKzoxMDREMzAwMDAwMDA4QzA3MDAwMDAwMTAwODQwMDE5MjAwMDAzNjEwQUYKKzoxMDRENDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwREMwQzAwMDAwMDEwNTkKKzoxMDRENTAwMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMjAKKzoxMDRENjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwQTUKKzoxMDRENzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTEwQzAwMDAwMDEwMjQKKzoxMDREODAwMDA4ODAwMDkyMDAwMEUxMEMwMDAwMDAxMDA4QzAwMDkyQjIKKzoxMDREOTAwMDAwMDBFMTBDMDAwMDAwMTAwODAwMDE5MjAwMDBDRjA5QTMKKzoxMDREQTAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDAwMDAwMDgwNTIKKzoxMDREQjAwMDAyMDAwMDkwMDAwMEUxMEMwMDAwMDAxMDA4QzAwMTkyMDkKKzoxMDREQzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwNDUKKzoxMDRERDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwRkIKKzoxMDRERTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwRDkKKzoxMDRERjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwMTUKKzoxMDRFMDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwQ0EKKzoxMDRFMTAwMDAyMDAwMDkwMDAwMDZBMDkwMDAwMDAxMDA4NDAwMDkyQTMKKzoxMDRFMjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwRTQKKzoxMDRFMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwOUEKKzoxMDRFNDAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNzgKKzoxMDRFNTAwMDAwMDBGMTBDMDAwMDAwMTAwODgwMDA5MjAwMDBGMTBDMkUKKzoxMDRFNjAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwRjEwQzAwMDAwMDEwQ0IKKzoxMDRFNzAwMDA4MDAwMTkyMDAwMENGMDkwMDAwMDAxMDA4NDAwMTkyRDQKKzoxMDRFODAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDBGMTBDQ0QKKzoxMDRFOTAwMDAwMDAwMDEwMDhDMDAxOTIwMDAwMzYxMDAwMDAwMDgwRTEKKzoxMDRFQTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMTgKKzoxMDRFQjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAwNTBEODgKKzoxMDRFQzAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMDUwRDAwMDAwMDEwOTYKKzoxMDRFRDAwMDA4QzAwMDkyMDAwMDA1MEQwMDAwMDAxMDA4MDAwMTkyQkIKKzoxMDRFRTAwMDAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MjAwMDAzNjEwQjkKKzoxMDRFRjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDUwRDAwMDAwMDEwN0UKKzoxMDRGMDAwMDA4QzAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwRUUKKzoxMDRGMTAwMDAwMDA4QzA3MDAwMDAwMTAwODAwMDA5MjAwMDAzNjEwMEUKKzoxMDRGMjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOEMwNzAwMDAwMDEwQ0MKKzoxMDRGMzAwMDA4ODAwMDkyMDAwMDEzMEQwMDAwMDAxMDA4QzAwMDkyQ0QKKzoxMDRGNDAwMDAwMDA4QzA3MDAwMDAwMTAwODAwMDE5MjAwMDA4QzA3OTAKKzoxMDRGNTAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDAwMDAwMDgwQTAKKzoxMDRGNjAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNTcKKzoxMDRGNzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwOTMKKzoxMDRGODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwNDkKKzoxMDRGOTAwMDAyMDAwMDkwMDAwMDhDMDcwMDAwMDAxMDA4ODAwMDkyQzIKKzoxMDRGQTAwMDAwMDAyMTBEMDAwMDAwMTAwODgwMDA5MjAwMDA4QzA3MTYKKzoxMDRGQjAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwOEMwNzAwMDAwMDEwQTMKKzoxMDRGQzAwMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQUUKKzoxMDRGRDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwMzMKKzoxMDRGRTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwRTkKKzoxMDRGRjAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQzcKKzoxMDUwMDAwMDAwMDA4QzA3MDAwMDAwMTAwODgwMDA5MjAwMDAyMTBEQjUKKzoxMDUwMTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwOEMwNzAwMDAwMDEwNDIKKzoxMDUwMjAwMDA4MDAwMTkyMDAwMDhDMDcwMDAwMDAxMDA4NDAwMTkyNjcKKzoxMDUwMzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwRDIKKzoxMDUwNDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwODgKKzoxMDUwNTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNjYKKzoxMDUwNjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwQTIKKzoxMDUwNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOEMwNzAwMDAwMDEwN0IKKzoxMDUwODAwMDA4ODAwMDkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQUUKKzoxMDUwOTAwMDAwMDA4QzA3MDAwMDAwMTAwODQwMDE5MjAwMDAzNjEwNEMKKzoxMDUwQTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwMjgKKzoxMDUwQjAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMDYKKzoxMDUwQzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwNDIKKzoxMDUwRDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRkQwQzAwMDAwMDEwQTUKKzoxMDUwRTAwMDA4ODAwMDkyMDAwMEZEMEMwMDAwMDAxMDA4QzAwMDkyMzMKKzoxMDUwRjAwMDAwMDBGRDBDMDAwMDAwMTAwODAwMDE5MjAwMDBDRjA5MjQKKzoxMDUxMDAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDAwMDAwMDgwRUUKKzoxMDUxMTAwMDAyMDAwMDkwMDAwMEZEMEMwMDAwMDAxMDA4QzAwMTkyODkKKzoxMDUxMjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwRTEKKzoxMDUxMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwOTcKKzoxMDUxNDAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNzUKKzoxMDUxNTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwQjEKKzoxMDUxNjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzEwRDAwMDAwMDEwREYKKzoxMDUxNzAwMDA4MDAwMjkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwM0IKKzoxMDUxODAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwODEKKzoxMDUxOTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwMzcKKzoxMDUxQTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMTUKKzoxMDUxQjAwMDAwMDA4ODA5MDAwMDAwMTAwOEMwMDE5MjAwMDAzNjEwQUQKKzoxMDUxQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwMDcKKzoxMDUxRDAwMDAyMDAwMDkwMDAwMENGMDkwMDAwMDAxMDA4NDAwMTkyN0EKKzoxMDUxRTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDBDMTA5OUQKKzoxMDUxRjAwMDAwMDAwMDEwMDhDMDAxOTIwMDAwMzYxMDAwMDAwMDgwN0UKKzoxMDUyMDAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQjQKKzoxMDUyMTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDA4ODA5QTUKKzoxMDUyMjAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMDAwMDAwMDgwOEUKKzoxMDUyMzAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwODQKKzoxMDUyNDAwMDAwMDBDRjA5MDAwMDAwMTAwODQwMDE5MjAwMDAzNjEwNTUKKzoxMDUyNTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQzEwOTAwMDAwMDEwNjIKKzoxMDUyNjAwMDA4QzAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwOEIKKzoxMDUyNzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwOTAKKzoxMDUyODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNkYwQjAwMDAwMDEwODIKKzoxMDUyOTAwMDA4ODAwMDkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwOUMKKzoxMDUyQTAwMDAwMDA2RjBCMDAwMDAwMTAwODgwMDA5MjAwMDAzRDBDMTEKKzoxMDUyQjAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDAwMDAwMDgwM0QKKzoxMDUyQzAwMDAyMDAwMDkwMDAwMDZGMEIwMDAwMDAxMDA4ODAwMDkyQTgKKzoxMDUyRDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwMzAKKzoxMDUyRTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwRTYKKzoxMDUyRjAwMDAyMDAwMDkwMDAwMDZGMEIwMDAwMDAxMDA4MDAwMTkyRjcKKzoxMDUzMDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDA2RjBCQ0IKKzoxMDUzMTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwM0QwQzAwMDAwMDEwODkKKzoxMDUzMjAwMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNEEKKzoxMDUzMzAwMDAwMDA2RjBCMDAwMDAwMTAwODAwMDE5MjAwMDAzNjEwMDIKKzoxMDUzNDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwODUKKzoxMDUzNTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNjMKKzoxMDUzNjAwMDAwMDA2RjBCMDAwMDAwMTAwODAwMDE5MjAwMDAzNjEwRDIKKzoxMDUzNzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNkYwQjAwMDAwMDEwOTEKKzoxMDUzODAwMDA4MDAwMTkyMDAwMDNEMEMwMDAwMDAxMDA4NDAwMTkyNEUKKzoxMDUzOTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDA2RjBCM0IKKzoxMDUzQTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMDAwMDAwMDgwOEMKKzoxMDUzQjAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMDMKKzoxMDUzQzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDA2RjBCMEIKKzoxMDUzRDAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMDAwMDAwMDgwREQKKzoxMDUzRTAwMDAyMDAwMDkwMDAwMDZGMEIwMDAwMDAxMDA4ODAwMDkyODcKKzoxMDUzRjAwMDAwMDAzRDBDMDAwMDAwMTAwODQwMDE5MjAwMDAzNjEwMzMKKzoxMDU0MDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNkYwQjAwMDAwMDEwMDAKKzoxMDU0MTAwMDA4ODAwMDkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMUEKKzoxMDU0MjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwREUKKzoxMDU0MzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwOTQKKzoxMDU0NDAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNzIKKzoxMDU0NTAwMDAwMDA2RjBCMDAwMDAwMTAwOEMwMDE5MjAwMDAzRDBDMUUKKzoxMDU0NjAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDAwMDAwMDgwOEIKKzoxMDU0NzAwMDAyMDAwMDkwMDAwMDZGMEIwMDAwMDAxMDA4QzAwMTkyQjUKKzoxMDU0ODAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwN0UKKzoxMDU0OTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwMzQKKzoxMDU0QTAwMDAyMDAwMDkwMDAwMEQ3MEIwMDAwMDAxMDA4ODAwMDkyNUUKKzoxMDU0QjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwNEUKKzoxMDU0QzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOEMwNzAwMDAwMDEwMjcKKzoxMDU0RDAwMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwOTkKKzoxMDU0RTAwMDAwMDBENzBCMDAwMDAwMTAwODgwMDA5MjAwMDAzNjEwNkEKKzoxMDU0RjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwRDQKKzoxMDU1MDAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQjEKKzoxMDU1MTAwMDAwMDBENzBCMDAwMDAwMTAwODgwMDA5MjAwMDAzNjEwMzkKKzoxMDU1MjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwQTMKKzoxMDU1MzAwMDAyMDAwMDkwMDAwMDhDMDcwMDAwMDAxMDA4NDAwMTkyNUIKKzoxMDU1NDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDBENzBCMjEKKzoxMDU1NTAwMDAwMDAwMDEwMDhDMDAxOTIwMDAwMzYxMDAwMDAwMDgwMUEKKzoxMDU1NjAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNTEKKzoxMDU1NzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwOEQKKzoxMDU1ODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwNDMKKzoxMDU1OTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMjEKKzoxMDU1QTAwMDAwMDA4QzA3MDAwMDAwMTAwODQwMDE5MjAwMDAzNjEwMzcKKzoxMDU1QjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwREYwQjAwMDAwMDEwREYKKzoxMDU1QzAwMDA4QzAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMjgKKzoxMDU1RDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwMkQKKzoxMDU1RTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwRTMKKzoxMDU1RjAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQzEKKzoxMDU2MDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDA4QzA3QUYKKzoxMDU2MTAwMDAwMDAwMDEwMDg0MDAxOTIwMDAwMzYxMDAwMDAwMDgwRDkKKzoxMDU2MjAwMDAyMDAwMDkwMDAwMERGMEIwMDAwMDAxMDA4ODAwMDkyRDQKKzoxMDU2MzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwQ0MKKzoxMDU2NDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwODIKKzoxMDU2NTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNjAKKzoxMDU2NjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwOUMKKzoxMDU2NzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQzMwQzAwMDAwMDEwMzkKKzoxMDU2ODAwMDA4NDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwRTcKKzoxMDU2OTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwNkMKKzoxMDU2QTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOTQwNzAwMDAwMDEwM0QKKzoxMDU2QjAwMDA4NDAwMDkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQjgKKzoxMDU2QzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwM0MKKzoxMDU2RDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwRjIKKzoxMDU2RTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwRDAKKzoxMDU2RjAwMDAwMDBFNjA3MDAwMDAwMTAwODgwMDA5MjAwMDAzNjEwNEQKKzoxMDU3MDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwQzEKKzoxMDU3MTAwMDAyMDAwMDkwMDAwMDlCMDgwMDAwMDAxMDA4MDAwMTkyQTkKKzoxMDU3MjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDA5MzA3ODcKKzoxMDU3MzAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwQTUwODAwMDAwMDEwMDEKKzoxMDU3NDAwMDA4MDAwMTkyMDAwMEE1MDgwMDAwMDAxMDA4MDAwMTkyNjYKKzoxMDU3NTAwMDAwMDBBNTA4MDAwMDAwMTAwODAwMDE5MjAwMDAzNjEwQUIKKzoxMDU3NjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwNjEKKzoxMDU3NzAwMDAyMDAwMDkwMDAwMEY1MDcwMDAwMDAxMDA4ODAwMDkyNzEKKzoxMDU3ODAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDA5MzA3MjcKKzoxMDU3OTAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMDAwMDAwMDgwOTgKKzoxMDU3QTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMEYKKzoxMDU3QjAwMDAwMDAwMzA4MDAwMDAwMTAwODgwMDA5MjAwMDA5QTA4MTIKKzoxMDU3QzAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwOTMwNzAwMDAwMDEwMDUKKzoxMDU3RDAwMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwRDYKKzoxMDU3RTAwMDAwMDBCQjA4MDAwMDAwMTAwODQwMDA5MjAwMDBCQjA4NDkKKzoxMDU3RjAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwQkIwODAwMDAwMDEwQUMKKzoxMDU4MDAwMDA4QzAwMDkyMDAwMDkzMDcwMDAwMDAxMDA4MDAwMTkyRjkKKzoxMDU4MTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwRUEKKzoxMDU4MjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTAwODAwMDAwMDEwNkUKKzoxMDU4MzAwMDA4QzAwMDkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQjYKKzoxMDU4NDAwMDAwMDA5MzA3MDAwMDAwMTAwODAwMDE5MjAwMDAzNjEwQ0QKKzoxMDU4NTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwNzAKKzoxMDU4NjAwMDAyMDAwMDkwMDAwMEUyMDgwMDAwMDAxMDA4MDAwMTkyMTEKKzoxMDU4NzAwMDAwMDBFMjA4MDAwMDAwMTAwODAwMDE5MjAwMDA5MzA3RjkKKzoxMDU4ODAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMDAwMDAwMDgwQTcKKzoxMDU4OTAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMUUKKzoxMDU4QTAwMDAwMDBFNDA4MDAwMDAwMTAwODgwMDA5MjAwMDBFNDA4RjYKKzoxMDU4QjAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwOTMwNzAwMDAwMDEwRDQKKzoxMDU4QzAwMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwRTUKKzoxMDU4RDAwMDAwMDA5MzA3MDAwMDAwMTAwODQwMDA5MjAwMDBCMTA4OEIKKzoxMDU4RTAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwQjEwODAwMDAwMDEwQzUKKzoxMDU4RjAwMDA4QzAwMDkyMDAwMDkzMDcwMDAwMDAxMDA4MDAwMTkyMDkKKzoxMDU5MDAwMDAwMDA5MzA3MDAwMDAwMTAwODAwMDA5MjAwMDA5MzA3QjkKKzoxMDU5MTAwMDAwMDAwMDEwMDg0MDAwOTIwMDAwRjgwODAwMDAwMDEwOEQKKzoxMDU5MjAwMDA4ODAwMDkyMDAwMEY4MDgwMDAwMDAxMDA4QzAwMDkyRjMKKzoxMDU5MzAwMDAwMDA5MzA3MDAwMDAwMTAwODAwMDE5MjAwMDAzNjEwREMKKzoxMDU5NDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwN0YKKzoxMDU5NTAwMDAyMDAwMDkwMDAwMDJDMDkwMDAwMDAxMDA4ODAwMDkyNTYKKzoxMDU5NjAwMDAwMDA5MzA3MDAwMDAwMTAwOEMwMDA5MjAwMDA5MzA3OTkKKzoxMDU5NzAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMDAwMDAwMDgwQjYKKzoxMDU5ODAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwMkQKKzoxMDU5OTAwMDAwMDAwQzA5MDAwMDAwMTAwODgwMDA5MjAwMDAzNjEwODIKKzoxMDU5QTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOTMwNzAwMDAwMDEwM0IKKzoxMDU5QjAwMDA4MDAwMTkyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwRjQKKzoxMDU5QzAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDBGNDA3ODQKKzoxMDU5RDAwMDAwMDAwMDEwMDg4MDAwOTIwMDAwMzYxMDAwMDAwMDgwRDcKKzoxMDU5RTAwMDAyMDAwMDkwMDAwMDkzMDcwMDAwMDAxMDA4MDAwMTkyRTAKKzoxMDU5RjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwMDkKKzoxMDVBMDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMjAwOTAwMDAwMDEwNEIKKzoxMDVBMTAwMDA4ODAwMDkyMDAwMDIwMDkwMDAwMDAxMDA4QzAwMDkyRDkKKzoxMDVBMjAwMDAwMDA5MzA3MDAwMDAwMTAwODAwMDE5MjAwMDAzNjEwRUIKKzoxMDVBMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwOEUKKzoxMDVBNDAwMDAyMDAwMDkwMDAwMEVGMDgwMDAwMDAxMDA4ODAwMDkyQTMKKzoxMDVBNTAwMDAwMDBFRjA4MDAwMDAwMTAwOEMwMDA5MjAwMDA5MzA3NEIKKzoxMDVBNjAwMDAwMDAwMDEwMDgwMDAxOTIwMDAwMzYxMDAwMDAwMDgwQzUKKzoxMDVBNzAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwM0MKKzoxMDVBODAwMDAwMDAzOTA5MDAwMDAwMTAwODgwMDA5MjAwMDAzOTA5NjgKKzoxMDVBOTAwMDAwMDAwMDEwMDhDMDAwOTIwMDAwOTMwNzAwMDAwMDEwRjIKKzoxMDVBQTAwMDA4MDAwMTkyMDgwMDMxMDMwMDE4MDFFODc2MjA4MTk5NkUKKzoxMDVBQjAwMDA4MDAyRjAzMDAxODAxRTg3NjIwODE5OTAwMDA5OTBGNTMKKzoxMDVBQzAwMDAwMDAwMDgwMDIwMDAwRjAwODAwOTEwNzFEMTkwMUU4QTUKKzoxMDVBRDAwMDc2MjA4MUI5MDAwMDMxMDMwMDAwMDBGODYyODEyRjk1MjMKKzoxMDVBRTAwMDAwMDAzMTAzODAwMDAwODAwMjgxMkZCNjJBMDAzMTAzQkMKKzoxMDVBRjAwMEQwMDEwMDJDODJDRDJFOTIwODAwMzEwMzAwMUMwMUU4NTkKKzoxMDVCMDAwMDc2MjA4MTk5MDAwMDAwMDAwMDAwMDBEODAyMDAwMDMyRDkKKzoxMDVCMTAwMDAwMDAwMDAwMDAwRTAxRUMwNkMwNkUzNTU0MDAwMDAwQ0QKKzoxMDVCMjAwMDAwMDAwMDAwMDcwMDM2MzIwMDAwMDAwMDAwMDAwMEJDNEEKKzoxMDVCMzAwMEE4MDAyRDM3QjQ0NDAwMDAwMDA4MDAwMDg3Q0Q4QjNBNDAKKzoxMDVCNDAwMDAwMDAwMDAwMDAwMDAwNzg5OUMwMkMzN0I0MDAwMDAwNkQKKzoxMDVCNTAwMDAwMDAwMDc4ODk4RDk3M0EwMDAwMzYxMDAyMTAwMDAwOEUKKzoxMDVCNjAwMDg3QkY5N0JBMDAwMDAwMDAwMDE4MDAwMDA3NDBGRTMyMEYKKzoxMDVCNzAwMDAwMDA5RDA3MTIwMDAwNDBGMkMxMzhCNDAwMDAwMDAwOTAKKzoxMDVCODAwMDAwOTAwMDc4MDkwMDZFMzIwMDAwMzYxMDA0QTAwMDAwN0EKKzoxMDVCOTAwMDA5ODA2RUIyMDAwMEEyMDcwNEE1MDAwNDA5ODA2RUIyNUQKKzoxMDVCQTAwMDAwMDAwMDAwMDAwMDAwMDQwOTAwOTAzMjAwMDBBNDA3N0IKKzoxMDVCQjAwMDA0MDEwMDA0MDk2NDkwQkMwMDAwMDAwMDAwMDAwMDA0MUYKKzoxMDVCQzAwMDA5NDAwMDMyMDgwMDAwMDA2RTM0MDJFODE2MjQ5MDM5QzMKKzoxMDVCRDAwMDAwMDBBNTA3QjcxMDAyRTAwNjgwOTdCMjAwMDBBODA3RjIKKzoxMDVCRTAwMDgwMDAwMDgwRjI4MEZDQjYwMDAwQTkwNzAwMDAwMEM4MTkKKzoxMDVCRjAwMEZGODBGQzk0MDAwMEFBMDc5Rjk5MDA4MDgyMUJFRUJDRTYKKzoxMDVDMDAwMDAwMDAwMDAwMDA5ODAwRTAwRTAwNkUzMjAwMDAwMDAwNkUKKzoxMDVDMTAwMEE3MDAwMDgwMDIwMDAwMzAxODAwMzYwMDAwMDAwMEY4RTUKKzoxMDVDMjAwMDczMEEwM0Y5MDAwMDAwMDAwMDEwMDIxQzA5MDA2RTMyMjQKKzoxMDVDMzAwMDQwMDBBRjA3MDYwMTAwODA4MkNEOTFCQzAwQzBCMDA3RDQKKzoxMDVDNDAwMDAwMTgwMkUwMDY4MDM2OTIwMEUwMDAwMDAwMTgwMkUwMzIKKzoxMDVDNTAwMDA2ODAzNjMyMDAwMDAwMDAwMDAwMDAyMDA5ODAwMzMyNzgKKzoxMDVDNjAwMDAwMDBCMzA3ODBENzAxODAzMkMwNkVCNjAwMDAwMDAwOEMKKzoxMDVDNzAwMDAwMDAwMDIwNDkwMDkyM0EwMDAwMDAwMDAwOTgwMTE4M0UKKzoxMDVDODAwMDA5MDA2RTMyMDAwMDAwMDAwMDBBMDIyNDA5QzA2RTMyRDIKKzoxMDVDOTAwMDAwMDAwMDAwMDBDMDAxMjgwOTgwNkUzMjAwMDBDMTA3MkEKKzoxMDVDQTAwMDgwMEUwMTgwMTJDMDZFQjYwMjAwMDAwMDAwM0MwMkVDQzMKKzoxMDVDQjAwMDA2MDAzNjMyMDAwMDAwMDAwMDAwMDAwMDQ5MDE5MjNBNjAKKzoxMDVDQzAwMDAwMDBCRDA3ODBENjAxODA0MkMwNkVCNjAwODIwMDAwOTEKKzoxMDVDRDAwMDAwMTAwMkUwQTZDRDkxMzIwMEEwMDAwMDAwMkMwMkU4RTYKKzoxMDVDRTAwMDA2MDAzNjMyMjgwMENCMDcwMDNBMDJFQzA2MDAzNjkyNTYKKzoxMDVDRjAwMDAwMDAwMDAwRDMwMTAwMUNEOUMxOTEzNDAwODIwMDAwRDMKKzoxMDVEMDAwMDAwMTAwMkUwQTZDRDkxMzIwMEEwMDAwMDAwMkMwMkU4QjUKKzoxMDVEMTAwMDA2MDAzNjMyMzQwMENCMDcwMDNBMDJFQzA2MDAzNjkyMTkKKzoxMDVEMjAwMDA0MDAwMDAwMDAzQzAyRUMwNjAwMzYzMjI4MDAwMDAwQUYKKzoxMDVEMzAwMDAwMDAwMDAwODkwRDkyM0EwMDAwQzcwNzgwRDYwMTgwNUMKKzoxMDVENDAwMDQyQzA2RUI2MDA4NjAwMDAwMDEwMDJFMEE2Q0Q5MTMyN0YKKzoxMDVENTAwMDA0QTAwMDAwMDAyQzAyRTgwNjAwMzYzMjE0MDBDQjA3MzUKKzoxMDVENjAwMDAwM0EwMkVDMDYwMDM2OTIwMDAwMDAwMEQzMDEwMDFDNEQKKzoxMDVENzAwMEQ5QzE5MTM0MDA4NjAwMDAwMDEwMDJFMEE2Q0Q5MTMyMTYKKzoxMDVEODAwMDA0QTAwMDAwMDAyQzAyRTgwNjAwMzYzMjIwMDBDQjA3RjkKKzoxMDVEOTAwMDAwM0EwMkVDMDYwMDM2OTIxMjAwMDAwMDAwMzgwMkVDRDUKKzoxMDVEQTAwMDg2Q0Q5MTNBMDgwMDAwMDAwMDI4MDJFODg2MjQ5MDM5NDgKKzoxMDVEQjAwMDAwMDAwMDAwMDAyMDAyRTA5NjI0MTQzNzAwMDAwMDAwREMKKzoxMDVEQzAwMDAwNDAwMUUwMDY4MDkxMzIwMDAwRDEwNzA0MDEwMDgwMEMKKzoxMDVERDAwMDAyODA5MkJDMDAwMDAwMDAwMEMwMDFFMDA2MDAwMDMyMUEKKzoxMDVERTAwMDAwMDAwMDAwMDAzMDAwRTAwNjAwMDAzMjAwMDAwMDAwNkIKKzoxMDVERjAwMDAwQjAwMEUwMDYwMDAwMzIyMDAwMDAwMDAwMDAwMDAwQkIKKzoxMDVFMDAwMDA3MDAzNjMyMDAwMDAwMDAwMDAwMDA3OEE5MDAyRDM3OUUKKzoxMDVFMTAwMDAwNDUwMDAwMDAwODAwMDA4NzhEOTczQTAwMDAwMDAwNTAKKzoxMDVFMjAwMDAwMDAwMDc4OTlDMDJDMzcwMDAxMDAwMDAwMDAwMDc4QzUKKzoxMDVFMzAwMDg5OEQ5NzNBMDAwMDM2MTAwMjEwMDAwMDg3QkY5N0JBOEMKKzoxMDVFNDAwMDAwMDAwMDAwMDAxODAwMDAwNzQwRkUzMjAwMDBEQTA3RTIKKzoxMDVFNTAwMDEyMDAwMDQ4RjJDMTM4QjQwMDAwREUwNzgwRDcwMTJDRTAKKzoxMDVFNjAwMDA5QzA2RUIyMDAwMDAwMDBEQUQ3MDFFQzA2QzA2RTM1NDIKKzoxMDVFNzAwMDAwMDAwMDAwMDA1QTAxRUMwNjQwRUQzMjAwMDAwMDAwNzYKKzoxMDVFODAwMDAwNUMwMUU4MDY4MDhCMzIwMDAwRTEwNzgwMDEwMDgwQTEKKzoxMDVFOTAwMDYyQzA5MkI2MDAwMDAwMDAwMDAwMDBGODgyODEyRjM0M0EKKzoxMDVFQTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwMzMKKzoxMDVFQjAwMDAwMDQwMTM4MDhDMDZFMzIwMDAwMDAwMDAwNjIwMUVDRUUKKzoxMDVFQzAwMDA2ODA4MzMyMDEwMDkzMDcxMjAxMDAyQzgyQ0QyRUIyOEUKKzoxMDVFRDAwMDAwMDBFNDA3MDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwQzUKKzoxMDVFRTAwMDAwNTQwMUZDMDJDMDZFMzIwMDAwMDAwMDAwMDAwMEQ4MjcKKzoxMDVFRjAwMDAyODAwMTMyMDBDMEVDMDcxODAxMDAwQ0E4Q0QzRUIyQjAKKzoxMDVGMDAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjJEMDAyRjAzOUEKKzoxMDVGMTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwRUEwNzAwMDAwMDgwQTIKKzoxMDVGMjAwMDAyMDAwMDkwMDAwMDAwMDAwMDYyMDEzODA4QzA2RTMyREMKKzoxMDVGMzAwMDAwMDgwMDgwMDAwMDAwMjgwOTAwMzczMjAwNjA0QjBGODUKKzoxMDVGNDAwMDAwMDAwMDA4MDg4MDM2RjIwMDAwOTMwNzA0MDYwMUVDMDgKKzoxMDVGNTAwMDE2QzA2RUJDMDAwMDkzMDc4MDAwMDA4MDcyODEyRkI2Q0YKKzoxMDVGNjAwMDAwMDAwMDAwMDAwMDAwRjg3MjgxMkYzNDNEMDA5MzA3MEMKKzoxMDVGNzAwMDEyMDEwMDJDODJDRDJFQjIwMDAwRjIwNzAwMDAwMDgwM0EKKzoxMDVGODAwMDAyMDAwMDkwMDAwMEY1MDcwMDAwMDBGOEIyODEyRjk0OTUKKzoxMDVGOTAwMDAwMDBDRjBGMDBBMDAwMTgwODAwNkVGMjAwMDAyNTEwQ0UKKzoxMDVGQTAwMDAwNzgwMTYwMDgwMDZFRjIwMDAwRjkwNzEyMDEwMEM4RDUKKzoxMDVGQjAwMDAyMDAyMEIyMDAwMEZDMDcwMDAwMDA4MDAyMDAwMDkwRjgKKzoxMDVGQzAwMDAwMDAwNjA4MTIwMTAwNUMwODgwMjBCMjAwMDBGQzA3RjcKKzoxMDVGRDAwMDEyMDEwMDYwMDI4MDJDQjIwMDAwRkEwNzAwMDAwMDgwNkQKKzoxMDVGRTAwMDAyMDAwMDkwMDAwMEZFMDcwNDAwMDA4MDAyNDA4MEJDMTgKKzoxMDVGRjAwMDAwMDAwMDAwMDAwMDAwRjgxRjgwRkYzQTAwMDAwMDA4QzkKKzoxMDYwMDAwMDgwMDEwMDgwQTI4MDJGQjYxODAwMzYwMENBMDAwMEY4NzgKKzoxMDYwMTAwMDczMEEwM0Y5MDAwMDkzMDc4MDAwMDA4MDcyODEyRkI2OTUKKzoxMDYwMjAwMDNEMDAwMTA4MTIwMDAwMkM4MkNEMkVCMjAwMDA5MzA3MjMKKzoxMDYwMzAwMDAwMDAwMEY4NzI4MTJGOTQwMDAwRkMwNzEyMDAwMEM4RDUKKzoxMDYwNDAwMDAyMDAyMEIyMDAwMEZBMDcxMjAwMDA1QzA4ODAyMEIyQjMKKzoxMDYwNTAwMDAwMDAzNjEwMDRBMDAwMTgwODAwNkVCMjAwMDAwMDAwMTYKKzoxMDYwNjAwMDAwMDAwMDc4Nzk2MTM4MzIwMDAwMDcwODEyMTgwMjRDRUQKKzoxMDYwNzAwMEUyMjU2RUIyMDgwMDAwMDAwMDEwMDIwMDc4RTE2RTM5REYKKzoxMDYwODAwMDAwMDAwMDAwMDAxODAwMjAwNzAwMDAzMjA3MDAwMDAwOTgKKzoxMDYwOTAwMDAwMDAwMDM4NzhDQUU5MzkwMDAwMzYxMDA0MDAwMDNDREUKKzoxMDYwQTAwMDA4NDA4MEIyMDAwMDM2MTAwNDkwMDA2QzA4MDA2RUIyMDgKKzoxMDYwQjAwMDAwMDAwMDAwMDA5ODAwNEMwODAwNkUzMjAwMDAwMDAwNTQKKzoxMDYwQzAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDREMDAwMDAwMjYKKzoxMDYwRDAwMDY3RTA4MzNFMDAwMDAwMDAwMDA4MDAwMDA3MDA4MDMyRjcKKzoxMDYwRTAwMDAwMDAwMDAwMDAxMDAwMDAwN0MwODYzMjAwMDAwMDAwMjEKKzoxMDYwRjAwMDAwMTgwMDAwMDdDMDg0MzIwMDAwMDAwMDAwMDAwMDE4RjMKKzoxMDYxMDAwMEQ4QTA4MTNDMDAwMDY4MDgwNEIwMDBFMEQ2MjA2RUJDMzYKKzoxMDYxMTAwMDAwMDAzODA4MDQwMDAwM0NEOEUwODNCQzAwMDAxRTA4RTIKKzoxMDYxMjAwMDgwMDAwMDgwOTI4MDJGQjYwMDAwMTkwODEyMDEwMDAwNDQKKzoxMDYxMzAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MDQKKzoxMDYxNDAwMDFEMDAwMDAwMDAwMDAwNzgwOUE0MTczODAwMDAxRDA4OTkKKzoxMDYxNTAwMDA0MDEwMDgwMTI4MDk3QkMwMDAwMTgwODY3MDAwMEY4NTYKKzoxMDYxNjAwMEEyODAyRkI1MDAwMDE5MDgwMDAwMDAwMDA5QzAyMTkyOEMKKzoxMDYxNzAwMDAwMDAwMDAwQzkwMTAwRDgwMjQwODQzMjAwMDAyMTA4NUMKKzoxMDYxODAwMDA0MDAwMDgwNzI4MDJEQkMwMDAwMUYwODEyMDAwMDQ0MzMKKzoxMDYxOTAwMEUyRTAzOEIyMDAwMDJDMDg1MTAwMDBEODEyODAyRDlBOUQKKzoxMDYxQTAwMDAwMDAwMDAwMDAwMDAwNzhGOTgxODMzNDAwMDAyMjA4MUMKKzoxMDYxQjAwMDEyMDAwMDQ0RTJFNTM4QjIwMDAwMjYwODgwMDAwMDgwQUEKKzoxMDYxQzAwMDgyODAyRkI2MDAwMDU1MEYwMEEwMDE1MDA4MDA2RUYyMkIKKzoxMDYxRDAwMDAwMDAwMDAwMDBGODAxRTAwNjAwODUzMjAwMDAyODA4RjkKKzoxMDYxRTAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4RDkKKzoxMDYxRjAwMDczMEEwM0Y5MDAwMDJCMDgwNDAxMDA4MDAyODAyREJDMDMKKzoxMDYyMDAwMDAwMDAyNzA4NjcwMDAwRjhBMjgwMkZCNTAwMDAzNjEwQjQKKzoxMDYyMTAwMDEyMDAwMEU4MDJDMDIxQjIwMDAwMDAwMDUxMDAwMEQ4QzYKKzoxMDYyMjAwMDAyMDAwMDMyMDAwMDMwMDgyQTAxMDAwMEQ4MjA4MEJBQTUKKzoxMDYyMzAwMDAwMDAzMDA4MTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwMjkKKzoxMDYyNDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4MDUKKzoxMDYyNTAwMDAyNDA4NDMyMDAwMDAwMDBDQUUwMDA2QzA4MDA2RTMyODgKKzoxMDYyNjAwMDAwMDAwMDAwMDBFODAwNEMwODAwNkUzMjAwMDAzNjEwMEMKKzoxMDYyNzAwMDA0RjAwMDE4MDgwMDZFQjIwMDAwMDAwMDAwMDAwMDM4QjIKKzoxMDYyODAwMDE4ODE4MzM1MDAwMDBGMDgwNEIwMDA4MDgyOUI4MUJDMTgKKzoxMDYyOTAwMDAwMDAwMDAwQ0EwMTAwRjg0MjgwMkYzNTA4QTAwRjA4NTYKKzoxMDYyQTAwMDEyMDEwMDQwQTJDRDM5QjIwMDAwMzYwODAwMDAwMDgwODMKKzoxMDYyQjAwMDAyMDAwMDkwMDAwMDQwMDgyOTM0MDJCODA4ODA2RUIyNDUKKzoxMDYyQzAwMDAwMDAzQjA4MTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwOEUKKzoxMDYyRDAwMDAwMDAwMEY4NzMwQTAzRjkxRDAwMDAwMDAwMDAwMDc4QjgKKzoxMDYyRTAwMDA5QTQxNzM4MDAwMDNGMDgwNDAxMDA4MDEyODA5N0JDMDEKKzoxMDYyRjAwMDAwMDAzQTA4NjcwMDAwRjhBMjgwMkZCNTAwMDAzQjA4QjQKKzoxMDYzMDAwMDAwMDAwMDAwMDlDMDIxOTIwMDAwMDAwMEM5MDEwMEQ4NkYKKzoxMDYzMTAwMDAyNDA4NDMyMDAwMDAwMDAwMDAwMDA3OEY5ODE4MzM0REMKKzoxMDYzMjAwMDAwMDA0MTA4MTIwMDAwNDRFMkU1MzhCMjAwMDA0NzA4Q0UKKzoxMDYzMzAwMDI4MDAwMDZDRDhFMDg2QkEwMDAwNTQwRjAwQTAwMTUwN0QKKzoxMDYzNDAwMDA4MDA2RUYyMDAwMDQ3MDgxREY4MDFFMDA2MDA4NUIyNjMKKzoxMDYzNTAwMDAwMDA0NzA4ODAwMDAwODAwMjgxMkZCNjJBMDAwMDAwNUMKKzoxMDYzNjAwMEQwMDEwMDJDODJDRDJFMzIwMDAwNEEwODA0QTAwMEUwQUIKKzoxMDYzNzAwMDA2ODA4MUIyMDAwMDM2MTAwNDkwMDBFMDA2QzA4NkIyQUMKKzoxMDYzODAwMDAwMDA1ODA4MDA5ODAwRTAwNkMwODQ5MjAwMDA0RjA4MDIKKzoxMDYzOTAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwNEQwODEyMDEwMDAwOEQKKzoxMDYzQTAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5OTIKKzoxMDYzQjAwMDFEMDA0RjA4MDQwMTAwODAwMkE0MTdCODAwMDA0QzA4MUIKKzoxMDYzQzAwMDAwMDAwMEY4RTI4MDJGOTQwMDAwMzYxMDA0RTAwMDZDMUEKKzoxMDYzRDAwMDA4MDA2RUIyMDAwMDAwMDBDQUU4MDA0QzA4MDA2RTMyRUYKKzoxMDYzRTAwMDAwMDAzNjEwMDRGMDAwMTgwODAwNkVCMjAwMDA1NTA4RDYKKzoxMDYzRjAwMDA0QjAwMDgwODI5QjgxQkMwMDAwMDAwMENBMDEwMEY4NEMKKzoxMDY0MDAwMDQyODAyRjM1MDhBMDU0MDgxMjAwMDA0MEEyQ0QzOUIyQjYKKzoxMDY0MTAwMDAwMDAwMDAwMDBBMDAwRTAwNjgwODEzMjAwMDAwMDAwQzMKKzoxMDY0MjAwMDAwOTgwMEUwMDZDMDg0MzIwMDAwMzYxMDA0OTAwMEUwQkUKKzoxMDY0MzAwMDA2QzA4NkIyMDAwMDVEMDgyQTVEMDFFODA2ODA4QkIyQzYKKzoxMDY0NDAwMDAwMDA1QjA4MTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwRUMKKzoxMDY0NTAwMDAwMDAwMEY4NzMwQTAzRjkxRDAwNUQwODA0MDEwMDgwQzQKKzoxMDY0NjAwMDAyQTQxN0I4MDAwMDVBMDgwMDAwMDBGOEUyODAyRjk0MzgKKzoxMDY0NzAwMDEwMjQ2MDA4MzcwMDAwRjhBMjhEMkZCMTNEMDA1RTA4OUYKKzoxMDY0ODAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMDAwMDAwMDAwMEY4QTcKKzoxMDY0OTAwMDcyODEyRjM0MDgwMDAwMDBDQTFDMDFFODc2MjA4MTM5N0YKKzoxMDY0QTAwMDAwMDBGQTBEMDAwMDAwMkNGOTAxMDBGNDAwMDA2NTA4NUUKKzoxMDY0QjAwMDgwMDAwMDgwRTI4MDJGQjYwMDAwNjUwODEyMDEwMDAwMTUKKzoxMDY0QzAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5NzEKKzoxMDY0RDAwMDEwMDAwMDAwMDAxODAwODA2N0ExNzMzOTMwMDAzMjAzRkIKKzoxMDY0RTAwMDEyMDEwMDVDQTI4RDJDQjIwMDAwMzYxMDAwMDAwMDgwNkEKKzoxMDY0RjAwMDAyMDAwMDkwMDAwMDZCMDg4MDAwMDA4MDkyODAyRkI2QTAKKzoxMDY1MDAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwQ0MKKzoxMDY1MTAwMEM5MDEwMEQ4MDI0MDg0MzIwMDAwMzYxMDJBMDAwMDc4RjkKKzoxMDY1MjAwMEY5ODE4M0I0MDAwMDZDMDgxMjAwMDA0NEUyRTUzOEIyM0YKKzoxMDY1MzAwMDAwMDBEQzBFMDAwMDAwMzAwMzAwMzhGMjAwMDA3MTA4OUIKKzoxMDY1NDAwMDFEMDAwMDM4MTg4MTgzQjUwMDAwNzEwODgwMDAwMDgwQUMKKzoxMDY1NTAwMDAyODEyRkI2MkEwMDAwMDBEMDAxMDAyQzgyQ0QyRTMyRkQKKzoxMDY1NjAwMDAwMDA3NDA4MDQwNjAxRUMxNkMwNkVCQzAwMDAwMDAwQjgKKzoxMDY1NzAwMENBMDEwMEY4NDI4MDJGMzQwOEMwNzMwODEyMDAwMDQwOUUKKzoxMDY1ODAwMEEyQ0QzOUIyMDAwMDc3MDg4MDAwMDA4MDgyODAyRkI2NEIKKzoxMDY1OTAwMDAwMDA1NTBGMDBBMDAxNTAwODAwNkVGMjAwMDAwMDAwM0UKKzoxMDY1QTAwMDAwRjgwMUUwMDYwMDg1MzIwMDAwNzkwODEyMDEwMDAwQzEKKzoxMDY1QjAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5ODAKKzoxMDY1QzAwMDAwMDA5NTA4MkEzNTAyQjgwODgwNkVCMjAwMDA3QzA4RTkKKzoxMDY1RDAwMDEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4QzYKKzoxMDY1RTAwMDczMEEwM0Y5MDAwMDAwMDAwMDAwMDBGOEEyODAyRjM1QjQKKzoxMDY1RjAwMDAwMDA4RTA4MDQwMDAwODAwMjYxODBCQzAwMDA4NzA4NTMKKzoxMDY2MDAwMDgwQjgwMDAwMDlDMDZFQjI0MDAwODIwODA0MDAwMDgwMUIKKzoxMDY2MTAwMDgyMEQ5MEJDMDAwMDgyMDgwMkIwMDA4MDgyMUI4NEJDMDYKKzoxMDY2MjAwMDAwMDA4NzA4MDAwMDAwRjhCMjgxMkY5NDAwMDAwMDAwRUQKKzoxMDY2MzAwMDAwRDYwMUVDNTZDMDZFMzQwMDAwMDAwMDAwMDAwMDYwN0YKKzoxMDY2NDAwMDE4MDA4NjNBMDAwMDAwMDAwMDAwMDA4MEI3MDE3ODM0OEUKKzoxMDY2NTAwMDAwMDAwMDAwMDA3ODAxRTAwNjAwODYzMjQwMDA5NTA4NDYKKzoxMDY2NjAwMDA0MDAwMDgwODIwRDkwQkMwMDAwMzYxMDA0QTAwMDE4QzkKKzoxMDY2NzAwMDA4MDA2RUIyMDAwMENGMEYwMDAwMDAwMEQ4MjA4MEZBQTIKKzoxMDY2ODAwMDAwMDAzNjEwMDYwMDAwM0MxODIwODRCQzAwMDAzNjEwQzQKKzoxMDY2OTAwMDA0QjAwMDNDODhEQjgzQkUwMDAwMDAwMDAwMDAwMDgwRTYKKzoxMDY2QTAwMEY3MjA3ODNBMDAwMDAwMDA1ODc4MDFFMEY2MjA4NjNBOUEKKzoxMDY2QjAwMDAwMDAwQzA4MDAwMDAwMDRGODYwODA5QTAwMDA5MTA4QjcKKzoxMDY2QzAwMDgwQjkwMDAwMDlDMDZFQjIyRjAwOTUwODEyMDEwMDJDOUQKKzoxMDY2RDAwMDgyQ0QyRUIyMDAwMDhGMDgwMDAwMDA4MDAyMDAwMDkwRTIKKzoxMDY2RTAwMDQwMDA5MzA4MDQwMTAwODA4MjBEOTBCQzM4MDA5NDA4OUIKKzoxMDY2RjAwMDAwMDAwMDc4MDkwMDM2OTIzOTAwMDAwMDAwMDAwMDc4QTAKKzoxMDY3MDAwMDA5MDAzNjMyMDAwMDk0MDgxMjAwMDAyQ0UyRTUyRUIyOTcKKzoxMDY3MTAwMDEwMDAwMDAwMDAxODAwODA2N0ExNzMzOTAwMDAwMDAwMUQKKzoxMDY3MjAwMDAwNUMwMUU4MDY4MDhCMzIxMDI0MDAwMDAwMDAwMEY4QjUKKzoxMDY3MzAwMEEyOEQyRjMxMzAwMDkzMDcxMjAxMDA1Q0EyOEQyQ0IyODQKKzoxMDY3NDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAwMzA4RTYKKzoxMDY3NTAwMDAwMDAwMEY4QzI4MTJGOTUwMDAwMDAwMDAwNTQwMUZDRTkKKzoxMDY3NjAwMDAyQzA2RTMyMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyM0EKKzoxMDY3NzAwMDAwQzBBMTA4MTgwMTAwMENBOENEM0VCMjIwODAwMDAwODYKKzoxMDY3ODAwMDAwMDAwMDA4MDg4MDM2MzIyRDAwMkYwMzEyMDEwMDJDNzMKKzoxMDY3OTAwMDgyQ0QyRUIyMDAwMDlGMDgwMDAwMDA4MDAyMDAwMDkwMTEKKzoxMDY3QTAwMDAwMDAwMDAwMDA2MjAxMzgwOEMwNkUzMjAwMDgwMDgwNUUKKzoxMDY3QjAwMDAwMDAwMDI4MDkwMDM3MzIwMDYwNEIwRjAwMDAwMDA4N0QKKzoxMDY3QzAwMDA4ODAzNkYyMDAwMEFGMDgwMDAwMDA4MDAyMDAwMDkwNTAKKzoxMDY3RDAwMDAwMDBBNzA4ODAwMDAwODBDMjgxMkZCNjAwMDBBQTA4MzAKKzoxMDY3RTAwMDAwRDAwMUU4MDYwMDAwOTIwMDAwMDAwMDAwMDAwMEY4NjAKKzoxMDY3RjAwMEMyODEyRjM1MDAwMEFBMDgwNEQxMDE4MDAyODA2RUJDM0UKKzoxMDY4MDAwMDAwMDAwMDAwMDBENjAxRUMyNkMwNkUzNDAwMDBBQzA4ODkKKzoxMDY4MTAwMDgwMDAwMDgwOTI4MTJGQjYwMDAwQUYwODAwQzgwMUU4MTgKKzoxMDY4MjAwMDA2MDAwMDkyMDAwMDAwMDAwMDAwMDBGODkyODEyRjM1NjEKKzoxMDY4MzAwMDAwMDBBRjA4MDRDOTAxODAwMjgwNkVCQzAwMDAwMDAwQTcKKzoxMDY4NDAwMDAwRDYwMUVDMTZDMDZFMzQxMTAwOTMwNzEyMDEwMDJDMjMKKzoxMDY4NTAwMDgyQ0QyRUIyMDAwMEFGMDgwMDAwMDA4MDAyMDAwMDkwNDAKKzoxMDY4NjAwMDAwMDA5MzA3OUEwMTAwRjg0MjgxMkZCNTAwMDBCODA4OTQKKzoxMDY4NzAwMDEyMDEwMEM4MDIwMDIwQjIwMDAwMDAwMDAwNUMwMUVDMjAKKzoxMDY4ODAwMDA2NDAwMDMyMDAwMDkzMDczNzAwMDBGODQyODEyRkI0MjEKKzoxMDY4OTAwMDAwMDAwMDAwMDAwMDAwRjg3MjgxMkYzNDNEMDA5MzA3RDMKKzoxMDY4QTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwQjYwODAwMDAwMDgwM0MKKzoxMDY4QjAwMDAyMDAwMDkwMDAwMEMzMDgxMjAxMDA1QzA4ODAyMEIyQjIKKzoxMDY4QzAwMDAwMDBCMzA4MTIwMTAwNjAwMjgwMkNCMjAwMDAzNjEwRjQKKzoxMDY4RDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQzAwODEyMDEwMEM4MDMKKzoxMDY4RTAwMDAyMDAyMEIyMDAwMDkzMDczNzAwMDBGOEQyODEyRkI0RDUKKzoxMDY4RjAwMDAwMDAwMDAwMDAwMDAwRjg3MjgxMkYzNDNEMDA5MzA3NzMKKzoxMDY5MDAwMDEyMDEwMDJDODJDRDJFQjIwMDAwQkUwODAwMDAwMDgwRDMKKzoxMDY5MTAwMDAyMDAwMDkwMDAwMEMzMDgxMjAxMDA1QzA4ODAyMEIyNTEKKzoxMDY5MjAwMDAwMDBCQzA4MTIwMTAwNjAwMjgwMkNCMjAwMDAzNjEwOEEKKzoxMDY5MzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMDc4Q0QKKzoxMDY5NDAwMDc5NjEzODMyMDAwMEM0MDgxMjE4MDI0Q0UyMjU2RUIyOTgKKzoxMDY5NTAwMDAwMDAwMDAwMDAzNDAyQjgwODgwNkUzMjAwMDAwMDAwMjEKKzoxMDY5NjAwMDAwQTAwMTUwMDgwMDZFMzIwMDAwMDAwMDAwNzgwMTYwQjUKKzoxMDY5NzAwMDA4MDA2RTMyMDAwMENBMDg5RDExMDIzNDA5MDA2RUIyOTAKKzoxMDY5ODAwMDAwMDAwMDAwMDBGMDAxODgwODAwNkUzMjAwMDA2QzBGNkIKKzoxMDY5OTAwMDAwQTgwMTA4MDkwMDZFRjIwMDAwMDAwMEQ0RjgwMUUwMzAKKzoxMDY5QTAwMDA2MDA4NTMyMDAwMDAwMDBEQTVDMDFFODA2ODA4QjMyQzgKKzoxMDY5QjAwMDAwMDBEQzBFREQwMDAwMzAwMzAwMzhGMjAwMDBEMDA4REIKKzoxMDY5QzAwMDIzMjkwMjA0MDk4MDZFQjIzRTAwQ0YwODEyMDAwMDJDNzkKKzoxMDY5RDAwMDgyQ0QyRUIyMDgwMEQzMDgxRDFDMDFFODc2MjA4MUI5QjMKKzoxMDY5RTAwMDAwMDBEMzA4ODAwMDAwODAwMjgxMkZCNjJBMDAwMDAwM0EKKzoxMDY5RjAwMEQwMDEwMDJDODJDRDJFMzIwMDAwRkEwRDAwMDAwMDJDQjgKKzoxMDZBMDAwMEY5MDEwMEY0MDAwMEQ3MDg5RDAxMDA4MDA3NDA5M0IyMEYKKzoxMDZBMTAwMDAwMDAwMDAwMDAzMDAwODAwNzgwODgzMjAwMDAwMDAwODUKKzoxMDZBMjAwMDAwMzgwMDgwMDcwMEVFMzIwMDAwMDAwMDAwMDgwMDgwRkYKKzoxMDZBMzAwMDA3QzA4NTMyMDAwMDAwMDAwMDEwMDA4MDA3NDA5MDMyM0YKKzoxMDZBNDAwMDEwMDAwMDAwMDAxODAwODA4NzhEODUzNzAwMDAwMDAwQ0UKKzoxMDZBNTAwMDAwMjAwMDgwMDcwMDg2MzIwMDAwMDAwMDAwMjgwMDgwMkYKKzoxMDZBNjAwMDA3MDA4NTMyMDAwMERFMDgxMjAxMDAwMDA5QzAyMUIyRDMKKzoxMDZBNzAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTMwMDAzMjAzRjIKKzoxMDZBODAwMDEyMDEwMDVDQTI4RDJDQjIwMDAwMzYxMDAwMDAwMDgwQzQKKzoxMDZBOTAwMDAyMDAwMDkwMDAwMDAwMDAwMENDMDE3ODA5ODA2RTMyRjYKKzoxMDZBQTAwMDAwMDA5MzA3RENEMTAxRTgwNjgwOTc5MjEzMDA5MzA3NUEKKzoxMDZBQjAwMDEyMDEwMDJDODJDRDJFQjIwMDAwRTIwODAwMDAwMDgwRkUKKzoxMDZBQzAwMDAyMDAwMDkwMDAwMEJBMEQwMDAwMDAxODA5NDA4MUYyOTkKKzoxMDZBRDAwMDAwMDBBMzBEMDBBODAxMjAwOTAwNkVGMjAwMDA5MzA3M0EKKzoxMDZBRTAwMDgwMDEwMDgwRjI4MDJGQjYwMDAwRUMwODEyMDEwMEM4N0YKKzoxMDZBRjAwMDAyMDAyMEIyMDAwMDkzMDc4MDAwMDA4MDcyODEyRkI2NTAKKzoxMDZCMDAwMDAwMDAwMDAwMDAwMDAwRjg3MjgxMkYzNDNEMDA5MzA3NjAKKzoxMDZCMTAwMDEyMDEwMDJDODJDRDJFQjIwMDAwRUEwODAwMDAwMDgwOTUKKzoxMDZCMjAwMDAyMDAwMDkwMDAwMEMzMDgxMjAxMDA1QzA4ODAyMEIyM0YKKzoxMDZCMzAwMDAwMDBFODA4MTIwMTAwNjAwMjgwMkNCMjAwMDAzNjEwNEMKKzoxMDZCNDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOTMwNzM1MDEwMEY4NkIKKzoxMDZCNTAwMDEyODEyRkI1MDAwMDAwMDAwMDAwMDBEODAyODAwMTMyMzEKKzoxMDZCNjAwMDAwMDAwMDAwMDA1NDAxRkMwMkMwNkUzMjAwQzBGNjA4QjQKKzoxMDZCNzAwMDE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMEQxMDEwMDA4MTEKKzoxMDZCODAwMDA4ODAzNjMyM0IwMDMxMDMxMjAxMDAyQzgyQ0QyRUIyMzgKKzoxMDZCOTAwMDAwMDBGNDA4MDAwMDAwODAwMjAwMDA5MDAwMDA0NDBGOTQKKzoxMDZCQTAwMDAwOTgwMTI4MDkwMDZFRjIwMDAwOTMwNzAwMDAwMDgwQTEKKzoxMDZCQjAwMDAyMDAwMDkwMDAwMEZFMDg4MDAxMDA4MEEyODEyRkI2MzQKKzoxMDZCQzAwMDAwMDBGRTA4ODAwMDAwODA0MjgxMkZCNjAwMDBGRTA4MTEKKzoxMDZCRDAwMDA4NUIwMUVDMDZGQjZFQkMwMDAwMDAwMDAwNUEwMUVDRjMKKzoxMDZCRTAwMDA2MDAwMDMyMDAwMEZFMDgzNzAwMDBGODQyODEyRkI0OTIKKzoxMDZCRjAwMDNEMDAwMDAwRDcwMTAwMkM4MkNEMkUzMjAwMDAwNDA5OTgKKzoxMDZDMDAwMDgwMDEwMDgwOTI4MTJGQjYwMDAwMEEwOTA4QzkwMUU4QkUKKzoxMDZDMTAwMDA2QkI2RUJDMDAwMDAwMDAwMEM4MDFFODA2MDAwMDMyQTAKKzoxMDZDMjAwMDMzMDAwMTA5MTIwMDAwMkM4MkNEMkVCMjAwMDA1MTBGNUEKKzoxMDZDMzAwMDAwMDAwMDI4MDk4MDAxRjIwMDAwOTMwNzAwMDAwMDgwOTYKKzoxMDZDNDAwMDAyMDAwMDkwMDAwMDBBMDk4MDAxMDA4MEMyODEyRkI2NzYKKzoxMDZDNTAwMDAwMDAwQTA5MDhEMTAxRTgwNkJCNkVCQzAwMDAwMDAwNzQKKzoxMDZDNjAwMDAwRDAwMUU4MDYwMDAwMzIzMzAwMDcwOTEyMDAwMDJDQjIKKzoxMDZDNzAwMDgyQ0QyRUIyMDAwMDUxMEYwMDAwMDAyODA5QzAwMUYyQTEKKzoxMDZDODAwMDAwMDA5MzA3MDAwMDAwODAwMjAwMDA5MDAwMDA5MzA3QkUKKzoxMDZDOTAwMDgwMDEwMDgwRjI4MTJGQjYxODAwOTMwNzAwMDAwMDJDQkQKKzoxMDZDQTAwMDgyQ0QyRTkyMDAwMDBGMDkxMjAwMDBDODAyMDAyMEIyMEYKKzoxMDZDQjAwMDAwMDAxMjA5MTIwMTAwNUMwODgwMjBCMjAwMDAzNjEwQUEKKzoxMDZDQzAwMDEyMDAwMDYwMDI4MDJDQjIwMDAwMDAwMDAwMDAwMEY4RkEKKzoxMDZDRDAwMDFGODBGRjNBMDAwMDMxMDMxMjAxMDAyQzcyRTAyRUIyMzcKKzoxMDZDRTAwMDAwMDAxMDA5MDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNzkKKzoxMDZDRjAwMDAwMDAwMDc4Nzk2MTM4MzIwMDAwMTMwOTEyMTgwMjRDNDQKKzoxMDZEMDAwMEUyMjU2RUIyMDAwMDAwMDAwMDM0MDJCODA4ODA2RTMyNDYKKzoxMDZEMTAwMDAwMDAwMDAwRDRBMDAxNTAwODAwNkUzMjAwMDAwMDAwMDYKKzoxMDZEMjAwMERCNzkwMTYwMDgwMDZFMzIwMDAwNTUwRkREMDAwMDA0QzEKKzoxMDZEMzAwMDA4MDAwMEYyMTAwMDAwMDAwMDE4MDA4MDg3OEQ4NTM3RTEKKzoxMDZENDAwMDAwMDAwMDAwMDBGODAxRTAwNjAwODUzMjAwMDAxQzA5ODgKKzoxMDZENTAwMDEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4M0UKKzoxMDZENjAwMDczMEEwM0Y5MzAwMDM2MTAxMjAwMDA1Q0EyOEQyQ0IyQjkKKzoxMDZENzAwMDAwMDAzNjEwMDQwNzAxRUMxNkMwNkVCQzAwMDAwMDAwRDUKKzoxMDZEODAwMDAwQjAwMEUwMDYwMDAwMzIwMDAwOTMwN0RBNUMwMUU4ODIKKzoxMDZEOTAwMDA2ODA4QjkyMDAwMDkzMDc5RjQxMDE4MDUyMjA2RUJDQjkKKzoxMDZEQTAwMDAwMDAyQjA5OUY5ODAxODA1MjIwNkVCQzAwMDAwMDAwNUIKKzoxMDZEQjAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMDAwNTQwMUZDRjUKKzoxMDZEQzAwMDAyQzA2RTMyMDBDMDI5MDkxODAxMDAwQ0E4Q0QzRUIyRTUKKzoxMDZERDAwMDIwODA5MzA3MzEwMDAwMDgwODgwMzZCMjAwMDAwMDAwRDAKKzoxMDZERTAwMDAwMDAwMEY4MTI4MTJGMzQzQjAwOTMwNzEyMDEwMDJDQTEKKzoxMDZERjAwMDgyQ0QyRUIyMDAwMDI3MDkwMDAwMDA4MDAyMDAwMDkwMjIKKzoxMDZFMDAwMDAwMDA0NDBGMDA5ODAxMjgwOTAwNkVGMjAwMDA5MzA3NkIKKzoxMDZFMTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOTMwN0Q1NDEwMUUwQ0YKKzoxMDZFMjAwMDA2NDA4MTkyMDAwMDkzMDcwNEIwMDA4MDAyMDA2RUJDMEYKKzoxMDZFMzAwMDAwMDAwMDAwMDA5MDAxMDAwODAwNkUzMjAwMDAyNTEwRTQKKzoxMDZFNDAwMDAwNzgwMTYwMDgwMDZFRjIwMDAwOTMwNzAwMDAwMDgwRTcKKzoxMDZFNTAwMDAyMDAwMDkwMDAwMDAwMDAwMDBDMDI3ODA5ODA2RTMyRjEKKzoxMDZFNjAwMDAwMDAzMzA5MDRENDAxODAxMkMwNkVCQzAwMDAwMDAwOTEKKzoxMDZFNzAwMDAwMDAwMDc4MTk4MDk3MzcwMDAwMDAwMDAwOTAwMUUwQzIKKzoxMDZFODAwMEU2MjU2RTNBMDAwMDI1MTAwMDAwMDA4MDAyMDAwMEYwQTgKKzoxMDZFOTAwMDAwMDAzNzA5MDAwMDAwODAwMjAwMDA5MDAwMDA5MzA3MDYKKzoxMDZFQTAwMDAwOTAwMUUwMDYwMDgwOTIwMDAwMDAwMDAwOTAwMUUwRTgKKzoxMDZFQjAwMDA2MDA4MDMyMDAwMDAzMDgwMDAwMDA4MDAyMDAwMDkwRkQKKzoxMDZFQzAwMDAwMDBBMzBEMDBBODAxMjAwOTAwNkVGMjAwMDBFNzA4RjEKKzoxMDZFRDAwMDgwMDAwMDgwRjI4MDJGQjYwMDAwOTMwNzAwMDAwMDgwNDEKKzoxMDZFRTAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyODMKKzoxMDZFRjAwMDAwMDAwMDAwMDAwMDAwNzgwOTAwNkUzMjAyMDA0MTA5MjUKKzoxMDZGMDAwMDA0QjkwMDgwODJDRDZFQkMwMDAwNDMwOTgwMDAwMDgwN0YKKzoxMDZGMTAwMDcyODBGQ0I2MDAwMDQ1MDkwMDAwMDBGQzAyMDAwMDkyRUYKKzoxMDZGMjAwMDAwMDA0MzA5ODAwMDAwODA4MjgwRkNCNjAwMDA0NTA5MTMKKzoxMDZGMzAwMDAwMDAwMEZDMDIwMDAwOTIwMDAwMDAwMDAwMDAwMEE4MTkKKzoxMDZGNDAwMDQyQkQ5NzMwMDAwMDAwMDA1NDE4ODlGQ0YyQzA3QzMwMkMKKzoxMDZGNTAwMDAwQzA0QjA5MTgwMTAwMENBOENEM0VCMjAwMDAwMDAwOTMKKzoxMDZGNjAwMDAwMEUwMUVDMDYwMDAwMzQwMDAwMDAwMDAwNTQwMUVDQUIKKzoxMDZGNzAwMDA2QzAyRjMyMjA4MDAwMDAwMDAwMDAwODA4ODAzNjMyNTIKKzoxMDZGODAwMDAwMDAzMTAzMTIwMTAwMkM4MkNEMkVCMjAwMDA0OTA5MEQKKzoxMDZGOTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwNjIwMTM4NDQKKzoxMDZGQTAwMDA4QzA2RTMyMDAwODAwODAwMDAwMDAyODA5MDAzNzMyNTcKKzoxMDZGQjAwMDAwMDA0QjBGMDAwMDAwMDhFODAxMDBGNDAwMDAzNjEwNEMKKzoxMDZGQzAwMDA0MDcwMUVDMTZDMDZFQkMwMDAwMDAwMDAwMDAwMEE4MjEKKzoxMDZGRDAwMEEyMDAyRDM3MEEwMDAwMDAwMDAwMDA3ODA5MDAzNjMyQjgKKzoxMDZGRTAwMDAwMDAwMDAwMDAxODg5RTAwNzAwMDAzMjAwMDA1MTA5OEQKKzoxMDZGRjAwMDA0MDEwMDc4MTk4MDk3QkMwMjAwNUMwOTA0QjkwMDgwODQKKzoxMDcwMDAwMDgyQ0Q2RUJDMDAwMDAwNDhENjAxMDA3OEM5Q0QyQzMyN0MKKzoxMDcwMTAwMDAwMDA1NTA5QjYwMDAwODAwMjAwMDBCMDAwMDA1NjA5Q0IKKzoxMDcwMjAwMDEyMDAwMDY0MDI4MDk3QjIwMDAwNTcwOTEyMDgwMDY0NDEKKzoxMDcwMzAwMDAyMDA2RUIyMDAwMDU4MDkxMjE4MDA2NDAyMDA2RUIyMUQKKzoxMDcwNDAwMDAwMDA1OTA5MTIxMDAwNjQwMjAwNkVCMjAwMDAwMDAwMzYKKzoxMDcwNTAwMEE2NTQwMUVDMDZDMDJGMzIwMDAwOEMwNzAwMEUwMUVDOTQKKzoxMDcwNjAwMDA2MDAwMDk0MDAyMDAwNENENjAxMDA3OEM5Q0QyQzMyRDcKKzoxMDcwNzAwMDAwMDA1RDA5QjYwMDAwODAwMjAwMDBCMDAwMDA1RTA5NUIKKzoxMDcwODAwMDEyMDAwMDY0MDI4MDk3QjIwMDAwNUYwOTEyMDgwMDY0RDkKKzoxMDcwOTAwMDAyMDA2RUIyMDAwMDYwMDkxMjMwMDA2NDAyMDA2RUIyOUQKKzoxMDcwQTAwMDAwMDA2MTA5MTIzODAwNjQwMjAwNkVCMjAwMDA2MjA5M0IKKzoxMDcwQjAwMDEyNDAwMDY0MDIwMDZFQjIwMDAwNjMwOTEyNDgwMDY0Q0UKKzoxMDcwQzAwMDAyMDA2RUIyMDAwMDY0MDkxMjEwMDA2NDAyMDA2RUIyODkKKzoxMDcwRDAwMDAwMDA2NTA5MTIxODAwNjQwMjAwNkVCMjAwMDA2NjA5MjMKKzoxMDcwRTAwMDEyMjAwMDY0MDIwMDZFQjIwMDAwNjcwOTEyMjgwMDY0REEKKzoxMDcwRjAwMDAyMDA2RUIyMDAwMDAwMDBBNjU0MDFFQzA2QzAyRjMyNjAKKzoxMDcxMDAwMDAzMDA4QzA3MDAwRTAxRUMwNjAwMzY5MjAwMDAwMDAwMjAKKzoxMDcxMTAwMDAwMDAwMEZDMDIwMDAxMzIwMDAwNkQwOTAwMDAwMDE0QjQKKzoxMDcxMjAwMDA4ODAzRDkyMDAwMDAwMDAwMDAwMDBGQzAyMDAwMTMyRDcKKzoxMDcxMzAwMDAwMDA3MDA5MDQwMDAwREM1MzYwM0RCMzE4MDAwMDAwM0IKKzoxMDcxNDAwMDAwMDAwMEY4NzM4QTAzMzk2QzA5MzYwMDAwMDAwMEMwQTMKKzoxMDcxNTAwMDAyMDAzNjkyMDAwMDAwMDAwMDU0MDFGQzAyQzA2RTMyQjIKKzoxMDcxNjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwQzA3NjA5NTMKKzoxMDcxNzAwMDE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMDAwMDAwMDA4REQKKzoxMDcxODAwMDA4ODAzNjMyMTUwMDJGMDMxMjAxMDAyQzgyQ0QyRUIyNUEKKzoxMDcxOTAwMDAwMDA3NDA5MDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNjAKKzoxMDcxQTAwMDAwMjgwMDAwMDcwMDAwMzIwMDAwMDAwMDAwMzAwMDAwNEUKKzoxMDcxQjAwMDA3QzAyQzMyMDAxMDAwODIwMDM4MDAwMDA3MDAzNzMyNzAKKzoxMDcxQzAwMDAwMDA3OTA5MTIwMDAwNDgwMkMwODBCMjAwMDA4QzA3NUMKKzoxMDcxRDAwMENBMDEwMDA4RTgwMTAwOTQyRDAwN0IwOTEyMDAwMDJDNzAKKzoxMDcxRTAwMDgyQ0QyRUIyMDAwMDdFMDkxRDAxMDA4MDAyMDAwMEIwOTkKKzoxMDcxRjAwMDAwMDA4QzA3MDAwMDAwRjg2MjgxMkY5NTAwMDAwMDAwNUQKKzoxMDcyMDAwMDAwMDAwMEY4MDI4MTJGMzQyQTAwOEMwNzEyMDEwMDJDQTQKKzoxMDcyMTAwMDgyQ0QyRUIyMDAwMDdGMDkwMDAwMDA4MDAyMDAwMDkwQTUKKzoxMDcyMjAwMDAwMDAzRjBGMDAwMDAwMkMwOUMwODVEMjAwMDBEQzBFREEKKzoxMDcyMzAwMDAwMDAwMDMwMDMwMDM4RjIwMDAwMzEwMzIzMDEwMEY4QTEKKzoxMDcyNDAwMDIyODEyRkI0M0UwMDMxMDMxMjAxMDAyQzgyQ0QyRUIyRDgKKzoxMDcyNTAwMDAwMDA4NDA5MDAwMDAwODAwMjAwMDA5MDAwMDAzRjBGNDEKKzoxMDcyNjAwMDAwMDAwMDJDMDlDMDg1RDIwMDAwMzEwMzAwMDAwMEY4QTYKKzoxMDcyNzAwMDIyODEyRjk0MDAwMDhEMDkzODAxMDBEODAyODAwMUIyQ0MKKzoxMDcyODAwMDAwMDA4QjA5MUUwMDAwODAwMjAwMDBCMDAwMDA4RDA5ODQKKzoxMDcyOTAwMDFBMDEwMDgwMDIwMDAwQjAwMDAwOEMwRjAwMDAwMDY4OUUKKzoxMDcyQTAwMDFGODBGNkZBMDAwMDMxMDMwMDAwMDA4MDAyMDAwMDkwMDkKKzoxMDcyQjAwMDAwMDA5MTA5MTIwMTAwNjAwODQwMjNCMjAwODIwMDAwMjIKKzoxMDcyQzAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwOEMwRjAwMDAwMDY0QzcKKzoxMDcyRDAwMDFGNDBGNkZBMDAwMDMxMDMwMDAwMDA4MDAyMDAwMDkwMTkKKzoxMDcyRTAwMDAwMDAzNjEwMTIwMDAwMjQwODAwMjNCMjAwMDAzNjEwRkYKKzoxMDcyRjAwMDEyMDAwMDIwMDhDMDIzQjIwMDAwMzYxMDEyMDAwMDE4NEYKKzoxMDczMDAwMDA4ODAyM0IyMDBDMDlDMDkxODAxMDAwQ0E4Q0QzRUIyMzEKKzoxMDczMTAwMDAwMDA5NDA5MTIwMDAwMzgwMjgwODFCMjAwMDAzNjEwOEIKKzoxMDczMjAwMDEyMDAwMDNDMDIwMDgyQjIwMDAwMzYxMDEyMDAwMDMwNTEKKzoxMDczMzAwMDAyNDA4MkIyMDAwMDM2MTAxMjAwMDAzNDAyMDA4NkIyMTEKKzoxMDczNDAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjAwMDA4QzBGMEEKKzoxMDczNTAwMDAwMDAwMDVDMUZDMEY1RkEwMDAwMzEwMzAwMDAwMDgwNEYKKzoxMDczNjAwMDAyMDAwMDkwMDAwMDAwMDA0NTAwMDBEODAyMDAwMDMyM0EKKzoxMDczNzAwMDAwMDAwMDAwMDAwMDAwMDAwNzQwODAzMjAwMDAwMDAwMTQKKzoxMDczODAwMDAwMTAwMDAwMDc0MDgyMzIwMDAwMDAwMDAwMTgwMDAwREEKKzoxMDczOTAwMDA3MDA4NjMyMDAwMEEwMDkxMjAwMDA1MEYyQzEzOEI0ODQKKzoxMDczQTAwMDAwMDA2NDBEMDAzMDAxRTAxNjIwNkVGQTAwMDBBNTA5MEYKKzoxMDczQjAwMDM4MDEwMDJDRjgwMTBCQjQwMDAwQTUwOTAyMEQwMjgwNzEKKzoxMDczQzAwMEEyNUI4MEJDMDAwMDAwMDAwMDAwMDAyQ0M4QzE4MjM0MTkKKzoxMDczRDAwMDAwMDBBNzA5ODAwMDAwODA0MjgxMkZCNjAwMDA5NDBEQjQKKzoxMDczRTAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwQUQwRDAwQTgwMUUwRTgKKzoxMDczRjAwMDE2MjA2RUZDMDAwMEFDMDkyNzAxMDBEODAyODAwMUIyMDMKKzoxMDc0MDAwMDAwMDAwMDAwQzcwMDAwMkNFOEMwODIzNDAwMDAwMDAwMkIKKzoxMDc0MTAwMDAwMDAwMDA4RDgwMTAwMzQwMDAwMDAwMEQ1NDAwMUUwNjEKKzoxMDc0MjAwMDA2MDA4NzMyMDgwMDk5MEYwMDE4MDFFODc2MjA4MUY5REMKKzoxMDc0MzAwMDAwMDBEQzBFMDAwMDAwMzAwMzAwMzhGMjAwMDBCMDA5NEMKKzoxMDc0NDAwMDIzMTkwMDAwMDc4MDgxQjIzRTAwQUYwOTEyMDAwMDJDMTIKKzoxMDc0NTAwMDgyQ0QyRUIyMDAwMEIyMDkxRDIxMDAwMDA3MDA4MkIyQzkKKzoxMDc0NjAwMDAwMDBCNDA5MDAwMDAwRjg2MjgxMkY5NTAwMDBCNDA5MDMKKzoxMDc0NzAwMDgwMDAwMDgwMDI4MTJGQjYyQTAwMDAwMEQwMDEwMDJDN0QKKzoxMDc0ODAwMDgyQ0QyRTMyMDAwMEZBMEQwMDAwMDAyQ0Y5MDEwMEY0MkMKKzoxMDc0OTAwMDEwMDBCODA5MkMzMDAwMDAxN0UwMkNCOTAwMDBCQTA5MjAKKzoxMDc0QTAwMDhFMzkwMDAwMDdDMDgyQjIwMDAwQkEwOTAwMDgwMDAwNEYKKzoxMDc0QjAwMDA3MDA4NzkyMDAwMEJBMDk4RTM5MDAwMEI3QzE4MkI0NzQKKzoxMDc0QzAwMDAwMDAwMDAwMDAwODAwMDAwNzAwODczMjAwMDBCQzA5MkYKKzoxMDc0RDAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4RDYKKzoxMDc0RTAwMDczMEEwM0Y5MDAwMEJBMDk5RjAxMDAxNDE4NDA4MUJDMTcKKzoxMDc0RjAwMDAwMDBCRjA5MDQwMDAwODAwMkMwODVCQzAwMDAzNjEwRjcKKzoxMDc1MDAwMDEyMDAwMDY4MDJDNTg1QjAwMDAwQkYwOTEyMDAwMDQ4RTMKKzoxMDc1MTAwMDAyQzA4MEIyMDAwMDMyMDNDQTAxMDAwOEU4ODE4MDk0RjIKKzoxMDc1MjAwMDAwMDBDMzA5MUUwMDAwODAwMjAwMDBCMDAwMDBDNTA5NzEKKzoxMDc1MzAwMDFBMDEwMDgwMDIwMDAwQjAwMDAwOEMwRjAwMDAwMDY4RkIKKzoxMDc1NDAwMDFGODBGNkZBMDAwMDMxMDMwMDAwMDA4MDAyMDAwMDkwNjYKKzoxMDc1NTAwMDAwMDAzNjEwOUZBODAxRTAxNjIwNkVCQzAwMDA2NDBERUMKKzoxMDc1NjAwMDAwMDAwMDE0MDgwMDAwRjIwMDAwQzkwOTgwMDAwMDgwM0IKKzoxMDc1NzAwMDQyODEyRkI2MDAwMDk0MEQwMDAwMDA4MDAyMDAwMEYwNTAKKzoxMDc1ODAwMDAwMDBBRDBEMDAwMDAwODAwMjAwMDBGMDAwMDA4RTA3M0EKKzoxMDc1OTAwMDA0MDAwMDgwMDI0MDgxQkMwMDAwQ0QwOTEyMDEwMEU4MTcKKzoxMDc1QTAwMDAyQzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5ODcKKzoxMDc1QjAwMDAwMDA4RTA3MTIwMTAwNjgwMkM1ODVCMDAwMDAzNjEwNzkKKzoxMDc1QzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOEMwNzgwMDAwMDgwMTYKKzoxMDc1RDAwMEYyQzE4NUI2MDAwMEQzMDkxQzQxMDI4MDA2QzA4NUIyMDUKKzoxMDc1RTAwMDAwMDAwMDAwMDAwMDAwNjgwMkM1ODUzMDAwMDAwMDAwQjcKKzoxMDc1RjAwMDAwMDAwMDcwMUYwMEY3M0EwMDAwOEMwNzAwMDAwMEY4NDAKKzoxMDc2MDAwMDIyODEyRjk0MDAwMDhDMDc4MDAwMDA4MEYyQzE4NUI2OTMKKzoxMDc2MTAwMDAwMDAzRjBGMDAwMDAwMkMwOUMwODVEMjAwMDAzMTAzOUMKKzoxMDc2MjAwMEQyMDEwMDk0MUU0MEU5OUEwMDAwQzQwRjAwMjAwMDE4MDcKKzoxMDc2MzAwMDA4MDA2RUYyMDAwMERCMDkxRjAwMDA4MDAyMDAwMEIwQUQKKzoxMDc2NDAwMDAwMDBEODA5OUU0MDAyNzgwOTQwNjhCMjAwMDAzNjEwNTgKKzoxMDc2NTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwREYwOTgwMDEwMDgwMkYKKzoxMDc2NjAwMDgyODEyRkI2MDAwMDhFMDcyQTMxMDFFMDA2MDAwMEIyQTkKKzoxMDc2NzAwMDE4MDAwMDAwQ0EwMDAwRjg3MzBBMDMzOThFMDczNjAwQUMKKzoxMDc2ODAwMDAwMDAwMEMwMDIwMDM2OTIwMDAwOEUwNzgwMDEwMDgwREEKKzoxMDc2OTAwMEEyODAyRkI2MTgwMDAwMDBDQTAwMDBGODczMEEwMzM5NTAKKzoxMDc2QTAwMDhFMDczNjAwMDAwMDAwQzAwMjAwMzY5MjBEMDBFNTA5OEEKKzoxMDc2QjAwMDAwMDAwMDU4MDgwMDM2OTIwMDAwRTUwOTAwMDAwMDU4NUMKKzoxMDc2QzAwMDA4MDAwMDkyMUIwMDAwMDAwMDAwMDA1ODA4MDAzNjMyM0QKKzoxMDc2RDAwMDAwMDBDNDBGMDAyMDAwMTgwODAwNkVGMjAwMDAwMDAwMzcKKzoxMDc2RTAwMDAwMzAwMDI4MDgwMDZFMzIwMDAwMDAwMDU0NTQwMUZDRjUKKzoxMDc2RjAwMDAyQzA2RTMyMDAwMDMwMEEzODAwMDBBNDA4ODA4MkIyNTYKKzoxMDc3MDAwMDAwMDAzMDBBMDQyODAxMDQwODAwNkVCMjAwMDAzNjEwQTAKKzoxMDc3MTAwMDlGNTAwMTA0QTg1QjgwQkMwMDAwMDAwMDAwNTAwMUU4RkQKKzoxMDc3MjAwMDA2MDAwMDMyMDAwMDExMEEwODAxMDA3ODE5QTA4MkJDOEUKKzoxMDc3MzAwMDAwMDAwMDAwMDAyODAxRTBBNjYwODAzQzAwMDBGMDA5ODUKKzoxMDc3NDAwMDJBMDEwMDE0MDgwMDAwQjIwMDAwMDAwMENBMDAwMDE0NjIKKzoxMDc3NTAwMDE4NDA4MTNBMDAwMEEzMEQwMEE4MDEyMEE5MjA2RUZBNkMKKzoxMDc3NjAwMDAwMDAwMDAwMDAyMDAxRTBBNjIwNkUzQzAwMDAwMDAwQTgKKzoxMDc3NzAwMDAwMzAwMEUwMDYwMDAwMzIwMDAwMDAwMDAwQTgwMUUwMzgKKzoxMDc3ODAwMDA2MDA5MjMyMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyQTIKKzoxMDc3OTAwMDAwQzAwMzBBMTgwMTAwMENBOENEM0VCMjAwMDBGQTA5OEYKKzoxMDc3QTAwMDA0MDAwMDgwMDI0MDgxQkMwMDAwMDAwMDAwMDAwMDE0QzIKKzoxMDc3QjAwMDA4MDAwMDMyMTgwMDAwMDAwMDAwMDBGODczMEEwMzM5QzYKKzoxMDc3QzAwMEY0MDkzNjAwMDAwMDAwQzAwMjAwMzY5MjIwODAwMDAwNUMKKzoxMDc3RDAwMDAwMDAwMDI4MDk4MDM2MzIwMDAwRjEwRTAwMDAwMEQ4QjkKKzoxMDc3RTAwMDAyMDAwMEQyMDAwMEZFMDkwNDAwMDA4MDAyODA5MkJDNkEKKzoxMDc3RjAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwQ0EKKzoxMDc4MDAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwMDMwQTE4MDEwMDBDRjkKKzoxMDc4MTAwMEE4Q0QzRUIyMTgwMDAwMDAwMDAwMDBGODczOEEwMzM5QkEKKzoxMDc4MjAwMEZFMDkwMDAwMDAwMDAwQzAwMjAwMzYzMjAwMDAzNjAwRjEKKzoxMDc4MzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMERFMDAwMDA4NTAKKzoxMDc4NDAwMEU4MDEwMDM0MDAwMDAwMDBERjAwMDEzODA4QzA2RTMyOUIKKzoxMDc4NTAwMDAwMDAwMDAwMDAxMDAwMDAwNzAwMDAzMjAwMDAwMDAwREYKKzoxMDc4NjAwMDAwMTgwMDAwMDc4MDgyMzIwMDAwMDAwMDAwMzAwMDAwOTUKKzoxMDc4NzAwMDA3QzAyQzMyMDAyMDAwODAwMDM4MDAwMDA3MDAzNzMyOUIKKzoxMDc4ODAwMDAwMDAwMDAwQ0EzRDAwMEMwNzgwODMzMjAwMDAwMDAwQTkKKzoxMDc4OTAwMDAwMDAwMDE0MTg0MDgxM0EwMDAwMEYwQTA0MDIwMUVDQjUKKzoxMDc4QTAwMDE2QzA2RUJDMDAwMDAwMDBDMDAxMDAxNDE4NDA4MTNBRjAKKzoxMDc4QjAwMDAwMDAwMDAwMDAwMDAwRjg5MjgwMkYzNDAwQzAwRTBBODMKKzoxMDc4QzAwMDEyMDAwMDQwQTI4RDM5QjIwMDAwNjkwQTEyMDEwMDQ4N0UKKzoxMDc4RDAwMDAyQzA4MEIyMDAwMDBGMEEwMDAwMDA4MDAyMDAwMDkwODkKKzoxMDc4RTAwMDAwMDAwMDAwMDAwMDAwMjgwODgwOTczMjAwMDAwMDAwMUYKKzoxMDc4RjAwMDAwMDAwMEE0MDg4MDgyMzIwMDAwMDAwMDAwMTAwMDZDMkMKKzoxMDc5MDAwMDE4MjA2RTNBMDAwMDAwMDAwMDE4MDA0QzA4MDA2RTMyOEIKKzoxMDc5MTAwMDAwMDBBMzBEMDBBODAxMjAxOTIwNkVGQTAwMDAwMDAwNEQKKzoxMDc5MjAwMDAwMjAwMUUwMTYyMDZFM0MwMDAwMDAwMDAwQTgwMUUwRUQKKzoxMDc5MzAwMDA2MDA5MjMyMDAwMDFCMEEwMDM4MDFFMDA2NDA4MDkyRTcKKzoxMDc5NDAwMDAwMDAwMDAwMDA2MDAwNkMxODIwNkUzQTAwMDAwMDAwOEIKKzoxMDc5NTAwMDAwNjgwMDRDMDgwMDZFMzIwMDAwMUQwQTlGMDEwMDA0MDAKKzoxMDc5NjAwMDY4NjA4MEJDMDAwMDI0MEEwMDAwMDAxODE4MjAwMDlDRjkKKzoxMDc5NzAwMDAwMDAxRjBBMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwMDAKKzoxMDc5ODAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMENBNzAwMDE4MzQKKzoxMDc5OTAwMDA4MDA2RTMyMDAwMDE5MEEwMjAxMDA4MDYyNjA4MEJDOUIKKzoxMDc5QTAwMDAwMDAwMDAwQ0EwMTAwRjgwMjgwMkYzNTAwQTAxQjBBNjkKKzoxMDc5QjAwMDEyMDEwMDQwQTI4RDM5QjIwMDAwMjIwQTAwMDAwMDgwQUUKKzoxMDc5QzAwMDAyMDAwMDkwMDAwMDI4MEE4MDAwMDA4MEEyODAyRkI2RUMKKzoxMDc5RDAwMDAwMDAyQjBBMDQwMDAwODBBMkEwODFCQzAwMDAwMDAwNkYKKzoxMDc5RTAwMENBMDEwMEY4MDI4MDJGMzUwMEEwMjcwQTEyMDAwMDQwQ0IKKzoxMDc5RjAwMEEyOEQzOUIyMDAwMDAwMDAwMDAwMDBGOEEyODAyRjM1RUYKKzoxMDdBMDAwMDAwMDAyQjBBMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwNjMKKzoxMDdBMTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMjgwMUUwRUMKKzoxMDdBMjAwMDA2MDAwMDMyMDAwMDAwMDAwMDMwMDBFMDA2ODA4MjMyRDQKKzoxMDdBMzAwMDAwMDAwMDAwMDAyMDAwRTAwNjgwODEzMjAwMDAzNjEwQzcKKzoxMDdBNDAwMDA0MTAwMEUwMDZDMDg2QjIwMDAwMzIwQTAwMTgwMEUwMTAKKzoxMDdBNTAwMDA2QzA4NDkyMDAwMDM2MTAwNDEwMDA2QzA4MDA2RUIyNUMKKzoxMDdBNjAwMDAwMDAwMDAwMDAxODAwNEMwODAwNkUzMjAwMDBFMDBEMUQKKzoxMDdBNzAwMDUxMDAwMEQ4MDIwMDAwRjIwMDAwMzUwQTAwNTAwMTNDMUQKKzoxMDdBODAwMEE4NUI4MDlDMDAwMDhFMDcwMDMwMDFFMDA2MDAwMDkyOTkKKzoxMDdBOTAwMDAwMDAzQTBBM0U1MTAxMDBBODFCODBCQTAwMDAwMDAwMTUKKzoxMDdBQTAwMERFMDAwMEY4RjI4MTJGMzQwMDAwMDAwMDAwNTgwMUVDRTUKKzoxMDdBQjAwMDA2QzBFRTMyMDAwMDNBMEE4MDAxMDA4MDMyODA4N0I2QUMKKzoxMDdBQzAwMDAwMDAwMDAwMDAwMDAwRjhFMjgwMkYzNDAwMDA3MzBFNzgKKzoxMDdBRDAwMDYwMzAwMUUwMDYwMDAwRjIwMDAwOEUwNzAwMDAwMDgwMjgKKzoxMDdBRTAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDAxNDA4MDAwMDMyQjYKKzoxMDdBRjAwMDAwMDA0MzBBMDQwMjAxRUMxNkMwNkVCQzAwMDAwMDAwNDYKKzoxMDdCMDAwMEM5MDEwMDE0MTg0MDgxM0EwMDAwMDAwMEMwMDEwMTM4OEEKKzoxMDdCMTAwMDA4QzA2RTMyMDAwMDAwMDBERjAwMDBBNEE4NjA4QTNDQUMKKzoxMDdCMjAwMDAwQzA0NjBBMTIwMTAwNDBBMjhEMzlCMjAwMDA0MTBBOEQKKzoxMDdCMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMzAwMEUwMjMKKzoxMDdCNDAwMDA2MDAwMDMyMDAwMDAwMDBERjAwMDBBNEE4NjA4QTNDQUMKKzoxMDdCNTAwMDAwMDAwMDAwMDAwMDAxMzgwOEMwNkUzMjAwMDAwMDAwODQKKzoxMDdCNjAwMERFQTgwMTIwOTkyMjZFM0EwMDAwNDkwQTJGMjAwMUUwODgKKzoxMDdCNzAwMDk2MjI2RUJDMDAwMEEzMEQwMDAwMDA4MDAyMDAwMEYwMDEKKzoxMDdCODAwMDAwMDA0RDBBMUY1MDAxRTgwNjAwMDBCMjAwMDA0QzBBMzgKKzoxMDdCOTAwMDA0MDAwMDgwMDJDMDgzQkMwMDAwNEQwQTAwNTAwMUU4RDAKKzoxMDdCQTAwMEY2NjA4MDlDMDgwMDAwMDAwMDQwMDI2ODEyOUFGRTM4Q0YKKzoxMDdCQjAwMDAwMDA1MTBBMkFBOTAxRTAwNjAwOTJCMjE4MDAzNjAwMUUKKzoxMDdCQzAwMENBMDAwMEY4NzMwQTAzRjkxRDAwNTEwQTA0MDAwMDgwN0UKKzoxMDdCRDAwMDAyQTQxN0I4MDAwMDRFMEEwMDAwMDAxNDE4NDA4MTlDNEYKKzoxMDdCRTAwMDAwMDBEQzBFMDAwMDAwMzAwMzAwMzhGMjAwMDA1NDBBRjAKKzoxMDdCRjAwMDgwMDEwMDgwMzI4MDJGQjYzRTAwNTMwQTEyMDAwMDJDMTQKKzoxMDdDMDAwMDgyQ0QyRUIyMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyQjgKKzoxMDdDMTAwMDAwQzA2NTBBMTgwMTAwMENBOENEM0VCMjIwODAwMDAwMEIKKzoxMDdDMjAwMEMzMDAwMDI4MDk4MDM2MzIwMDAwRjEwRTAwMDAwMEQ4QTEKKzoxMDdDMzAwMDAyMDAwMEQyMDAwMDVBMEEwNDAwMDA4MDAyODA5MkJDQjgKKzoxMDdDNDAwMDAwMDAwMDAwMDAwMDAwMTQxODQwODEzQTAwMDA1RjBBQTQKKzoxMDdDNTAwMDA0MDAwMDgwMDI0MDgxQkMxODAwMzYwMDAwMDAwMEY4REIKKzoxMDdDNjAwMDczMEEwM0Y5MDAwMDYzMEEwNDAwMDAxNDE4NDA4MUJDODEKKzoxMDdDNzAwMDAwMDA1QjBBMTIwMDAwMDAwOUMwMjFCMjAwMDA1QzBBOEIKKzoxMDdDODAwMDAwMDAwMDgwMDIwMDAwOTAxODAwMzYwMDAwMDAwMEY4OUMKKzoxMDdDOTAwMDczOEEwM0Y5MDAwMERDMEUwMDAwMDAzMDAzMDAzOEYyQTQKKzoxMDdDQTAwMDAwMDA2MzBBODAwMTAwODAzMjgwMkZCNjNFMDA2MjBBMjUKKzoxMDdDQjAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMDAwMEMzMDAwMEQ4QkMKKzoxMDdDQzAwMDAyODAwMTMyMDBDMDVGMEExODAwMDAwQ0E4Q0QzRUIyNEQKKzoxMDdDRDAwMDAwMjAwMDgwMDAwMDAwMjgwOTAwMzczMjAwMDBCMTBGQUEKKzoxMDdDRTAwMDAwMDAwMDA4RTgwMTAwRjQwMDAwNjcwQTEyMDAwMDQ4RTQKKzoxMDdDRjAwMDAyQzA4MEIyMDAwMDAwMDAwMDAwMDAxNDE4NDA4MTNBNjkKKzoxMDdEMDAwMDE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTAwMDA2OTBBNzcKKzoxMDdEMTAwMDA0MDEwMDE0MTg0MDgxQkMwMDAwOTkwRjAwMDAwMDgwOEQKKzoxMDdEMjAwMDAyMDAwMEYwMDAwMDZGMEE4MDAxMDA4MDkyODAyRkI2RjAKKzoxMDdEMzAwMDJCMDA3MjBBMTIwMTAwMkM4MkNEMkVCMjAwMDA2RDBBQjcKKzoxMDdENDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNzIwQTFEMDAwMDgwMDgKKzoxMDdENTAwMDAyMDAwMEIwMDAwMDcyMEE4MDAwMDA4MDAyODEyRkI2OEQKKzoxMDdENjAwMDJBMDAwMDAwRDAwMTAwMkM4MkNEMkUzMjAwMDA4QzA3QUEKKzoxMDdENzAwMDA0MDAwMDgwMDI4MDg1QkMwMDAwQUEwRjAwMDAwMDgwODMKKzoxMDdEODAwMDAyMDAwMEYwMDAwMDdEMDUwMDAwMDAxQzA4ODA4NTkyQzQKKzoxMDdEOTAwMDAwMDAwMDAwQ0UwMTAwRDgwMjgwMDEzMjAwQzA3QTBBNDMKKzoxMDdEQTAwMDE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMDAwMDAwMDA4QTEKKzoxMDdEQjAwMDA4ODAzNjMyMDAwMDhDMEYwMDAwMDA1QzFGQzBGNUZBMEUKKzoxMDdEQzAwMDAwMDAzMTAzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNkQKKzoxMDdERDAwMDYwMDAwMEQ4MDIwMDAwMzIwMDAwN0YwQTNGMDAwMDNDMzMKKzoxMDdERTAwMDA4NDA4MEIyMDAwMDdGMEE4MDAxMDA4MEUyODEyRkI2NDcKKzoxMDdERjAwMDAwMDAwMDAwREUwMDAwRjhGMjgxMkYzNDAwMDAwMDAwRDcKKzoxMDdFMDAwMDAwNTgwMUVDMDZDMEVFMzIwMDAwMDAwMDREMDAwMDAwRkEKKzoxMDdFMTAwMDY3RTA4MzNFMDAwMDAwMDAwMDA4MDAwMDA3MDA4MDMyOTkKKzoxMDdFMjAwMDAwMDAwMDAwMDAxMDAwMDAwN0MwODYzMjAwMDAwMDAwQzMKKzoxMDdFMzAwMDAwMTgwMDAwMDdDMDg0MzIwMDAwQkUwQTA0MDAwMDI4QjkKKzoxMDdFNDAwMEQ4QTA4MkJDMDAwMDAwMDAwMDAwMDAxOEQ4QTA4MTNDMkYKKzoxMDdFNTAwMDAwMDA5QzBBMDQwMDAwM0NEOEUwODNCQzAwMDA4OTBBQjIKKzoxMDdFNjAwMDA0MDAwMDgwNzI4MDJEQkMwMDAwODcwQTEyMDAwMDUwQzAKKzoxMDdFNzAwMDAyQzAzOEIyMDAwMDlBMEE1MTAwMDBEODEyODAyRDlBMzAKKzoxMDdFODAwMDAwMDA4OTBBMTIwMDAwNTBGMkMxMzhCNDAwMDA5NTBBQkYKKzoxMDdFOTAwMDI4MDAwMEQ4MDIwMDAwQjIwMDAwOTIwQTgwMDEwMDgwOTEKKzoxMDdFQTAwMEYyQzE4NUI2MDAwMDhGMEExRjQwMDI4NEU2MDEwMEI0Q0IKKzoxMDdFQjAwMDAwMDA5MjBBMUQwMTAwRjgyMjgxMkZCNDAwMDA5MjBBRUUKKzoxMDdFQzAwMDAwMDAwMEY4NjI4MTJGOTUwMDAwOTEwQTFEMDEwMDgwREEKKzoxMDdFRDAwMDAyMDAwMEIwMDAwMDAwMDAwMDAwMDBGODYyODEyRjM1QjEKKzoxMDdFRTAwMDAwMDAwMDAwMDA0MDAyODAwMjQwNjgzMjAwMDA5NDBBNTYKKzoxMDdFRjAwMDM0MzAwMEUwMTYyMDZFQkMwMDAwOTQwRDAwMDAwMDgwQkQKKzoxMDdGMDAwMDAyMDAwMEYwMDAwMEFFMEREQTVCMDFFQzA2NDBFREYyN0QKKzoxMDdGMTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDA5OTBBRkYKKzoxMDdGMjAwMDA0MDAwMDgwNzI4MDJEQkMwMDAwOTUwQTY3MDAwMEY4RjQKKzoxMDdGMzAwMEEyODAyRkI1MDAwMDM2MTAxMjAwMDBFODAyQzAyMUIyNjYKKzoxMDdGNDAwMDAwMDAwMDAwNTEwMDAwRDgwMjAwMDAzMjAwMDBFODBEREYKKzoxMDdGNTAwMDAwMDAwMDAwRDgyMDgwRkEwMDAwODAwQTREMDAwMDAwRDgKKzoxMDdGNjAwMDY3RTA4MzlFMDAwMDlDMEExMjAwMDA1MEYyQzEzOEI0MDIKKzoxMDdGNzAwMDAwMDBBODBBMjgwMDAwODAwODQwMDBCMjAwMDBBNTBBRkUKKzoxMDdGODAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwQTIwQTFGNDAwMjg0NzEKKzoxMDdGOTAwMEU2MDEwMEI0MDAwMEE1MEExRDAxMDBGODIyODEyRkI0RkIKKzoxMDdGQTAwMDAwMDBBNTBBMDAwMDAwRjg2MjgxMkY5NTAwMDBBNDBBRDUKKzoxMDdGQjAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4NzkKKzoxMDdGQzAwMDYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyQ0MKKzoxMDdGRDAwMDAwMDBBNzBBMzQzMDAwRTAxNjIwNkVCQzAwMDA5NDBEQUIKKzoxMDdGRTAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwQUUwRERBNUIwMUVDNDIKKzoxMDdGRjAwMDA2NDBFREYyMDAwMEJGMEE4MDAwMDA4MEUyODAyRkI2NEMKKzoxMDgwMDAwMDAwMDBBQzBBMDQyMTAwRTAwNjgwODFCMjAwMDBFODBEMDcKKzoxMDgwMTAwMDAwMDAwMDM0MDgwMDAwRjIwMDAwMDAwMDAwMjAwMEUwMzIKKzoxMDgwMjAwMDA2ODA4MTMyMDAwMEIxMEEyQTExMDBFMEQ2RTA4NkJBNEIKKzoxMDgwMzAwMDE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTFEMDBCMTBBREYKKzoxMDgwNDAwMDA0MDEwMDgwMDJBNDE3QjgwMDAwQUQwQTlGMDEwMDgwNUYKKzoxMDgwNTAwMDE4MDA4OEJDMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNkMKKzoxMDgwNjAwMDAwMDA5OTBGMDAwMDAwODAwMjAwMDBGMDAwMDBEQzBFMEMKKzoxMDgwNzAwMDAwMDAwMDMwMDMwMDM4RjIwODAwQjUwQTIzMTkwMUU4QjcKKzoxMDgwODAwMDc2MjA4MUI5M0UwMEI0MEExMjAwMDAyQzgyQ0QyRUIyQjcKKzoxMDgwOTAwMDAwMDBCODBBMUQxODAwRTAwNkMwODRCMjAwMDBCODBBNEIKKzoxMDgwQTAwMDgwMDAwMDgwMDI4MTJGQjYyQTAwMDAwMEQwMDEwMDJDNDEKKzoxMDgwQjAwMDgyQ0QyRTMyMDAwMEZBMEQwMDAwMDAyQ0Y5MDEwMEY0RjAKKzoxMDgwQzAwMDAwMDBCQzBBMDQwMDAwODAwMjAwODhCQzAwMDBCQzBBNUEKKzoxMDgwRDAwMDEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4QUIKKzoxMDgwRTAwMDczMEEwM0Y5MDAwMDMyMDMxMjAxMDA2ODAyQzU4NUIwNkIKKzoxMDgwRjAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDBCRTBBNjAKKzoxMDgxMDAwMDEyMDAwMDUwRjJDMTM4QjQwMDAwMDAwMEMwMDEwMTM4NzQKKzoxMDgxMTAwMDA4QzA2RTMyMDAwMEMzMEEwNDAyMDFFQzE2QzA2RUJDMzcKKzoxMDgxMjAwMDAwQzBDMTBBMTIwMDAwNDBBMjhEMzlCMjAwMDBDNDBBOEEKKzoxMDgxMzAwMEM5MDEwMDE0MDgwMDAwOTIwMDAwMDAwMDQ1MzAwMEUwNzIKKzoxMDgxNDAwMDA2MDAwMDMyMDAwMENGMEEyODAwMDAwOEU4MDEwMEI0NTEKKzoxMDgxNTAwMDAwMDBDQzBBODAwMTAwODBGMkMxODVCNjAwMDBDOTBBODcKKzoxMDgxNjAwMDFGNDAwMjg0RTYwMTAwQjQwMDAwQ0MwQTFEMDEwMEY4QTMKKzoxMDgxNzAwMDIyODEyRkI0MDAwMENDMEEwMDAwMDBGODYyODEyRjk1MDQKKzoxMDgxODAwMDAwMDBDQjBBMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwQ0EKKzoxMDgxOTAwMDAwMDAwMEY4NjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwREUKKzoxMDgxQTAwMDAyNDA2ODMyMDAwMENFMEE4MDAwMDA4MDQyODEyRkI2NzMKKzoxMDgxQjAwMDAwMDA5NDBEMDAwMDAwODAwMjAwMDBGMDAwMDBBRTBERjEKKzoxMDgxQzAwMERBNUIwMUVDMDY0MEVERjIwMDIwMDA4MERGMDAwMDI4QzEKKzoxMDgxRDAwMDA5MDAzNzMyMDAwMEIxMEZERTAwMDBEODAyODAwMUYyNDIKKzoxMDgxRTAwMDA4MDA5OTBGMDAxODAxRTg3NjIwODFGOTAwMDBEQzBFRTQKKzoxMDgxRjAwMDAwMDAwMDMwMDMwMDM4RjIwMDAwRDUwQTgwMDEwMDgwNDIKKzoxMDgyMDAwMDMyODAyRkI2M0UwMEQ0MEExMjAwMDAyQzgyQ0QyRUIyNEUKKzoxMDgyMTAwMDAwMDBEOTBBMjkwODAxRTQwNkMwMkRCMjAwMDBERTBBRDgKKzoxMDgyMjAwMDFEMDAwMDgwMDIwMDAwQjAwMDAwREUwQTgwMDAwMDgwMTcKKzoxMDgyMzAwMDAyODEyRkI2MkEwMERFMEFEMDAxMDAyQzgyQ0QyRTkyQjgKKzoxMDgyNDAwMDAwMDBEQjBBMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwNEMKKzoxMDgyNTAwMDAwMDAwMEY4NzMwQTAzRjkxRDAwREQwQTA0MDEwMDgwMjQKKzoxMDgyNjAwMDAyQTQxN0I4MDAwMERBMEEwMDAwMDAxNDE4NDA4MTlDMkMKKzoxMDgyNzAwMDJCMDBERDBBMTIwMDAwMkM4MkNEMkVCMjAwMDBGQjBENzcKKzoxMDgyODAwMDAwMDAwMDJDRjkwMTAwRjQwMDAwRTEwQTA0MDEwMDgwNjQKKzoxMDgyOTAwMDAyNDA4MUJDMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5QTAKKzoxMDgyQTAwMDAwMDBFMTBBMTIwMDAwNDgwMkMwODBCMjAwMDAzMjAzNjAKKzoxMDgyQjAwMDEyMDEwMDY4MDJDNTg1QjAwMDAwRTIwQTAwMDAwMDgwREIKKzoxMDgyQzAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyOEYKKzoxMDgyRDAwMDAwQzBFOTBBMTgwMTAwMENBOENEM0VCMjIwODAwMDAwQzEKKzoxMDgyRTAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwOEMwRjAwMDAwMDVDOUYKKzoxMDgyRjAwMDFGQzBGNUZBMDAwMDMxMDMwMDAwMDA4MDAyMDAwMDkwNkEKKzoxMDgzMDAwMDAwQzAwMDAwMDAwMDAwRjhBMjhEMkYzMTAwMDAwMDAwMjYKKzoxMDgzMTAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwMDAwMDAwMDAwMDAwNTEKKzoxMDgzMjAwMDA3ODA4MTMyMDAwMDAwMDAwMDA4MDAwMDA3MDA4MDMyNTIKKzoxMDgzMzAwMDAwMDAwMDAwMDAxMDAwMDAwN0MwODYzMjAwMDAwMDAwQUUKKzoxMDgzNDAwMDAwMTgwMDAwMDdDMDg0MzIwMDAwRUYwQTEyMDAwMDUwM0QKKzoxMDgzNTAwMEYyQzEzOEI0MDAwMEY1MEE4MDAwMDA4MDgyODAyRkI2OTgKKzoxMDgzNjAwMDAwMDAwMDAwMDAwMDAwNjhBODYwODAzQzAwMDAwMDAwRTEKKzoxMDgzNzAwMDAwMDAwMDNDMDg0MDgwMzIwMDAwQUQwRDAwMDAwMDA0MDkKKzoxMDgzODAwMDA4ODA4MkYyMDAwMEY2MEExMjAxMDAwMDA5QzAyMUIyNDIKKzoxMDgzOTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDBGODBBRkYKKzoxMDgzQTAwMDA0MDAwMDgwMDJBNDE3QjgwMDAwRjUwQTAwMDAwMEY4REQKKzoxMDgzQjAwMEEyODAyRjk1MDAwMDAwMDAwMDAwMDAwMDY4MjA4MDNBOTUKKzoxMDgzQzAwMDAwMDBGQzBBMDQwMDAwMjg2OEEwODJCQzAwMDBFODBENDAKKzoxMDgzRDAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwRUIwQTAwMDAwMEQ4NUUKKzoxMDgzRTAwMDAyMDAwMDkyMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyNkMKKzoxMDgzRjAwMDAwMjAwMDgwMDAwMDAwMjgwOTAwMzczMjAwMDBBRDBGODcKKzoxMDg0MDAwMDAwMDAwMDA4RTgwMTAwRjQxODAwMzYwMENBMDAwMEY4NzcKKzoxMDg0MTAwMDczMEEwM0Y5MDAwMDA2MEIwNDAyMDFFQzE2QzA2RUJDREYKKzoxMDg0MjAwMDAwMDAwMDAwQzAwMTAwRjg5MjgwMkYzNDAwQzAwNDBCNEYKKzoxMDg0MzAwMDEyMDEwMDQwQTI4RDM5QjIwMDAwMDIwQjAwMDAwMDgwNDIKKzoxMDg0NDAwMDAyMDAwMDkwMkIwMDA2MEIxMjAxMDAyQzgyQ0QyRUIyRjAKKzoxMDg0NTAwMDAwMDAwNDBCMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwRkIKKzoxMDg0NjAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDkwQjEyMDEwMDYwRjgKKzoxMDg0NzAwMDA4NDAyM0IyMDA4MjEyMEIwMDAwMDAwOEE4OEQ4MDkyRjEKKzoxMDg0ODAwMDAwMDAzNjEwMTIwMDAwMjQwODAwMjNCMjAwMDAzNjEwNEQKKzoxMDg0OTAwMDEyMDAwMDIwMDhDMDIzQjIwMDAwMzYxMDEyMDAwMDE4OUQKKzoxMDg0QTAwMDA4ODAyM0IyMDBDMDIxMEIxODAxMDAwQ0E4Q0QzRUIyRjkKKzoxMDg0QjAwMDAwMDAwQzBCMTIwMDAwMzgwMjgwODFCMjAwMDAzNjEwNjAKKzoxMDg0QzAwMDEyMDAwMDNDMDIwMDgyQjIwMDAwMzYxMDEyMDAwMDMwQTAKKzoxMDg0RDAwMDAyNDA4MkIyMDAwMDM2MTAxMjAwMDAzNDAyMDA4NkIyNjAKKzoxMDg0RTAwMDIwODAwMDAwMDAwMDAwMDhBODhEODAzMjAwMDAxOTBCRDkKKzoxMDg0RjAwMDgwMDEwMDgwRjJDMTg1QjYwMDAwMTYwQjFGNDAwMjg0ODcKKzoxMDg1MDAwMEU2MDEwMEI0MDAwMDE5MEIxRDAxMDBGODIyODEyRkI0MTAKKzoxMDg1MTAwMDAwMDAxOTBCMDAwMDAwRjg2MjgxMkY5NTAwMDAxODBCNzUKKzoxMDg1MjAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4MDMKKzoxMDg1MzAwMDYyODEyRjM1MDAwMDAwMDAwMDQwMDI4MDAyNDA2ODMyNTYKKzoxMDg1NDAwMDAwMDAzNjEwMTIwMDAwNjgwMkM1ODVCMDAwMDAxQzBCNDgKKzoxMDg1NTAwMDM0MDAwMDVDMUZDMEY1QkEwMDAwOTQwRDAwMDAwMDgwREMKKzoxMDg1NjAwMDAyMDAwMEYwMDAwMDFFMEI4MDAwMDA4MDkyODAyRkI2RjkKKzoxMDg1NzAwMDAwMDA4RTA3MDAzMDAwRTAwNjAwMDA5MjAwMDA4RTA3MjkKKzoxMDg1ODAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMDAwMDAwMDAwMEY4NEIKKzoxMDg1OTAwMDczMEEwMzM5OEUwNzM2MDAwMDAwMDBDMDAyMDAzNjkyQ0QKKzoxMDg1QTAwMDAwMDAwMDAwNDUwMDAwRDgwMjQwMDAzMjAwMDAwMDAwM0EKKzoxMDg1QjAwMDQxMDAwMDAwMDc4MDg2MzIwMDAwMDAwMDAwMDgwMDAwMzMKKzoxMDg1QzAwMDA3MDA4MDMyMDAwMDAwMDAwMDEwMDAwMDA3NDA4MjMyRTcKKzoxMDg1RDAwMDAwMDAwMDAwMDAxODAwMDAwNzAwODYzMjAwMDAyNjBCOTMKKzoxMDg1RTAwMDEyMDAwMDUwRjJDMTM4QjQwMDAwMDAwMDAwMDAwMDc4MTIKKzoxMDg1RjAwMDM4ODA4NzM1MDAwMDAwMDAwMEEwMDFFMDE2MjA2RTNBQTgKKzoxMDg2MDAwMDAwMDAwMDAwMDAwMDAwNzgwOUM1ODUzMDAwMDAwMDAwNkYKKzoxMDg2MTAwMDAwQTgwMUUwMTYyMDZFM0MwODAwMDAwMEQyMDEwMDc4OUUKKzoxMDg2MjAwMEU5RTU4MzM5MTgwMDM2MTAxRjQxMDI4NEU2QTE5N0I5QTUKKzoxMDg2MzAwMDAwMDAzMDBCMzY1MTAxRTgxNkUwODNCQzAwMDAzMDBCMUYKKzoxMDg2NDAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwMDAwMDAwMDAwMEY4RTIKKzoxMDg2NTAwMDYyODEyRjM1MDAwMDMyMEIzODIxMDFFMDA2NDA4MEIyRTQKKzoxMDg2NjAwMDAwMDAwMDAwMDAzMDAxRTAwNjQwODAzMjAwMDAwMDAwMDEKKzoxMDg2NzAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMzUwQjM0MTgwMDAwRTEKKzoxMDg2ODAwMDA3ODA4MUIyMDAwMDk0MEQwMDAwMDA4MDAyMDAwMEYwMUQKKzoxMDg2OTAwMDEwMDA5OTBGMDAzMDAwMDAxN0UwMkNGOTAwMTAwMDgwNDYKKzoxMDg2QTAwMDAwMzgwMDAwMDcwMDM3MzIwMDAwREMwRTAwMDAwMDMwMDgKKzoxMDg2QjAwMDAzMDAzOEYyMDAwMDNBMEI4MDAxMDA4MDMyODAyRkI2QjAKKzoxMDg2QzAwMDNFMDAzOTBCMTIwMDAwMkM4MkNEMkVCMjAwMDAzRjBCNzEKKzoxMDg2RDAwMDI5MjEwMDAwMDcwMDgyQjIwMDAwM0QwQjEyMDEwMDAwQkEKKzoxMDg2RTAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5MkYKKzoxMDg2RjAwMDFEMDA0MjBCMDQwMTAwODAwMkE0MTdCODAwMDAzQjBCRDAKKzoxMDg3MDAwMDAwMDAwMDE0MDgwMDAwOTIwMDAwNDIwQjFEMzAwMEUwNDEKKzoxMDg3MTAwMDA2MDAwMEIyMDAwMDQyMEI4MDAwMDA4MDAyODEyRkI2RUMKKzoxMDg3MjAwMDJBMDAwMDAwRDAwMTAwMkM4MkNEMkUzMjAwMDBBQTBGQkEKKzoxMDg3MzAwMDAwMDAwMDJDRjkwMTAwRjQwMDAwRkEwRDAwMDAwMEY4MjAKKzoxMDg3NDAwMEEyODAyRkY0MDAwMDQ3MEIwNDAwMDA4MDAyNDA4MUJDOEYKKzoxMDg3NTAwMDAwMDA0NzBCMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwRTkKKzoxMDg3NjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMzIwMzEyMDEwMDQ4MDgKKzoxMDg3NzAwMDAyQzA4MEIyMDAwMDQ3MEIwMDAwMDA4MDAyMDAwMDkwQTEKKzoxMDg3ODAwMDAwMDA1MDBCODAwMTAwODBGMkMxODVCNjAwMDA0RDBCNDcKKzoxMDg3OTAwMDFGNDAwMjg0RTYwMTAwQjQwMDAwNTAwQjFEMDEwMEY4RTgKKzoxMDg3QTAwMDIyODEyRkI0MDAwMDUwMEIwMDAwMDBGODYyODEyRjk1NDkKKzoxMDg3QjAwMDAwMDA0RjBCMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwMEYKKzoxMDg3QzAwMDAwMDAwMEY4NjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwQTgKKzoxMDg3RDAwMDAyNDA2ODMyMDAwMDUyMEIwNDAwMDA4MDAyNDA4NkJDNTgKKzoxMDg3RTAwMDAwMDBENzBGMDA5MDAxMDgwOTAwNkVGMjAwMDAwNzEwOEEKKzoxMDg3RjAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwNTkwQjMzMDEwMEQ4OTcKKzoxMDg4MDAwMDAyODAwMUIyMDAwMDU5MEI4MDAxMDA4MEIyMDE3MkI2RjMKKzoxMDg4MTAwMDAwMDA1OTBCOUZGMDAxODA4MkRCODdCQzAwMDA1OTBCRTAKKzoxMDg4MjAwMDlGRjgwMTgwMjIyMTZFQkMwMDAwMDAwMDAwRTgwMUUwRkEKKzoxMDg4MzAwMDA2MDBFRTMyMDAwMDAwMDAwMEYwMDFFMDA2QzA4NzMyQzIKKzoxMDg4NDAwMDA4MDAwMDAwMDAxODAxRTg3NjIwODEzOTAwMDA1RjBCNjUKKzoxMDg4NTAwMDgwMDEwMDgwRDI4MDJGQjYwMDAwNUYwQjA0QjAwMDgwNDIKKzoxMDg4NjAwMDAyMDA2RUJDMDAwMDAwMDBDRDAwMDBGODcyODEyRjM0QzEKKzoxMDg4NzAwMDNEMDA1RjBCMTIwMTAwMkM4MkNEMkVCMjAwMDA1RDBCN0IKKzoxMDg4ODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNjkwQjI3MDkwMUU0NEQKKzoxMDg4OTAwMDA2QzAyREIyMDBDMDYzMEIxODAxMDAwQ0E4Q0QzRUIyN0IKKzoxMDg4QTAwMDAwMDAzNjEwMTIwMDAwNjgwMkM1ODVCMDIwODA4RTA3RDcKKzoxMDg4QjAwMDAwMDAwMDA4MDg4MDM2OTIwMDAwMDAwMDAwNDAwMUUwM0YKKzoxMDg4QzAwMDA2NDA4ODMyMDAwMDAwMDBENTA4MDAwMDA3NDA4ODMyQ0EKKzoxMDg4RDAwMDAwMDAwMDAwMDAzMDAwMDAwN0MwMkMzMjAwNDAwMDgwODMKKzoxMDg4RTAwMENBMzkwMDAwMDcwMDM3MzIwMDAwNjcwQjEyMDAwMDQ4NDkKKzoxMDg4RjAwMDAyQzA4MEIyMDA2MDAwMDAwMDAwMDAwODA4ODAzNjMyMkMKKzoxMDg5MDAwMDAwMDA2QzBCMUQwMDAwODAwMjAwMDBCMDAwMDA2QzBCMkEKKzoxMDg5MTAwMDgwMDAwMDgwMDI4MTJGQjYyQTAwMDAwMEQwMDEwMDJDQzgKKzoxMDg5MjAwMDgyQ0QyRTMyMDAwMEZCMEQwMDAwMDAyQ0Y5MDEwMEY0NzYKKzoxMDg5MzAwMDAwMDAzMjAzMTIwMTAwNjgwMkM1ODVCMDAwMDAzNjEwNDUKKzoxMDg5NDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDU0NTQwMUZDNzAKKzoxMDg5NTAwMDAyQzA2RTMyMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyMjgKKzoxMDg5NjAwMDAwQzA3NTBCMTgwMTAwMENBOENEM0VCMjIwODAwMDAwOUQKKzoxMDg5NzAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwMzEwMzEyMDEwMDJDOEMKKzoxMDg5ODAwMDcyRTAyRUIyMDAwMDczMEIwMDAwMDA4MDAyMDAwMDkwMjUKKzoxMDg5OTAwMDAwMDBDNDBGMDAyMDAwMTgwODAwNkVGMjAwMDAzNjEwMUUKKzoxMDg5QTAwMDFGMzAwMDI4MDgwMDZFQjIwMDAwMDAwMDAwMDAwMEE0ODQKKzoxMDg5QjAwMDA4ODA4MjMyMDAwMDM2MTAwNDEwMDA2QzA4MDA2RUIyOEQKKzoxMDg5QzAwMDAwMDBFMDBEMDAxODAwNEMwODAwNkVGMjAwMDA3QzBCNjcKKzoxMDg5RDAwMDAwNTAwMTNDQTg1QjgwOUMwMDAwMzYxMDAwMDAwMDgwMjUKKzoxMDg5RTAwMDAyMDAwMDkwMDAwMDAwMDAwMDUwMDEwMEE4MUI4MDNBMjcKKzoxMDg5RjAwMDAwMDAwMDAwNTEwMDAwRDgwMjAwMDAzMjAwMDAwMDAwMUEKKzoxMDhBMDAwMDREMDAwMDAwNjdFMDgzM0UwMDAwMDAwMDAwMDgwMDAwMDkKKzoxMDhBMTAwMDA3MDA4MDMyMDAwMDAwMDAwMDEwMDAwMDA3QzA4NjMyMEUKKzoxMDhBMjAwMDAwMDAwMDAwMDAxODAwMDAwN0MwODQzMjAwMDBBNjBCMDAKKzoxMDhBMzAwMDA0MDAwMDI4RDhBMDgyQkMwMDAwMDAwMDAwMDAwMDE4M0MKKzoxMDhBNDAwMEQ4QTA4MTNDMDAwMDk0MEIwNDAwMDAzQ0Q4RTA4M0JDMUIKKzoxMDhBNTAwMDAwMDA4ODBCMDQwMDAwODA3MjgwMkRCQzAwMDA4NjBCOTMKKzoxMDhBNjAwMDEyMDAwMDUwMDJDMDM4QjIwMDAwOEUwQjUxMDAwMEQ4MzYKKzoxMDhBNzAwMDEyODAyRDlBMDAwMDg4MEIxMjAwMDA1MEYyQzEzOEI0MDkKKzoxMDhBODAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDA4RDBCOEYKKzoxMDhBOTAwMDA0MDAwMDgwNzI4MDJEQkMwMDAwODkwQjY3MDAwMEY4ODQKKzoxMDhBQTAwMEEyODAyRkI1MDAwMDM2MTAxMjAwMDBFODAyQzAyMUIyRUIKKzoxMDhBQjAwMDAwMDAwMDAwNTEwMDAwRDgwMjAwMDAzMjAwMDA5MjBCQkMKKzoxMDhBQzAwMDJBMDEwMDAwRDgyMDgwQkEwMDAwOTIwQjEyMDEwMDAwOTkKKzoxMDhBRDAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5M0IKKzoxMDhBRTAwMDAwMDAwMDAwMDAwMDAwRDgwMjQwODQzMjAwMDBGMDBEQjkKKzoxMDhBRjAwMDAwNjAwMDZDMDgwMDZFRjIwMDAwN0YwQjREMDAwMDAwNkIKKzoxMDhCMDAwMDY3RTA4MzlFMDAwMDk0MEIxMjAwMDA1MEYyQzEzOEI0NUQKKzoxMDhCMTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTFEMDA5OTBCRDUKKzoxMDhCMjAwMDA0MDAwMDgwMDJBNDE3QjgwMDAwOTUwQjY3MDAwMEY4NEQKKzoxMDhCMzAwMEEyODAyRkI1MDAwMDM2MTAxMjAwMDAwMDA5QzAyMUIyM0IKKzoxMDhCNDAwMDA4MDAzNjEwMTI0MDAyNjgxMjlBRkVCODAwMDBEQzBFQ0YKKzoxMDhCNTAwMDAwMDAwMDMwMDMwMDM4RjIwMDAwMzYxMDFGMDAwMDZDRTcKKzoxMDhCNjAwMEQ4RTA4NkJBMDAwMEUwMEQ1MTAwMDBEODAyMDAwMEYyMDMKKzoxMDhCNzAwMDAwMDA5RjBCMDAwMDAwM0MwODQwODA5MjAwMDAzNjEwNkYKKzoxMDhCODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwN0UwQjA0MDEwMDgwQzUKKzoxMDhCOTAwMDAyODA4MUJDMDAwMEE0MEI4MDAxMDA4MEEyODAyRkI2NUYKKzoxMDhCQTAwMDAwMDBBNDBCMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwMTkKKzoxMDhCQjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4NkMKKzoxMDhCQzAwMDAyNDA4NDMyMDAwMEYwMEQwMDYwMDA2QzA4MDA2RUYyN0MKKzoxMDhCRDAwMDAwMDA3RjBCNEQwMDAwMDA2N0UwODM5RTAwMDAwMDAwNTYKKzoxMDhCRTAwMEMwMDEwMTM4MDhDMDZFMzIwMDAwMDAwMDQ1MzAwMEUwQ0UKKzoxMDhCRjAwMDA2MDAwMDMyMDAwMEE4MEIxMjAwMDA1MEYyQzEzOEI0ODkKKzoxMDhDMDAwMDAwMDBBRDBCMDQwMjAxRUMxNkMwNkVCQzAwMDAwMDAwQjkKKzoxMDhDMTAwMEM5MDEwMDE0MTg0MDgxM0EwMEMwQUQwQjEyMDEwMDQwOTgKKzoxMDhDMjAwMEEyOEQzOUIyMDAwMEFCMEIwMDAwMDA4MDAyMDAwMDkwNjIKKzoxMDhDMzAwMDAwQzAwMDAwMDAwMDAwRjhBMjhEMkYzMTAwMDAwMDAwRUQKKzoxMDhDNDAwMDAwQTgwMTIwOTkyMjZFM0EwMDAwQjEwQjJGMjAwMUUwMEMKKzoxMDhDNTAwMDk2MjI2RUJDMDAwMEEzMEQwMDAwMDA4MDAyMDAwMEYwMTAKKzoxMDhDNjAwMDAwMDBCNTBCMDQwMDAwM0NEOEUwODNCQzAwMDBCNDBCNEUKKzoxMDhDNzAwMDlGMzEwMUUwOTYyMjZFQkMwMDAwMDAwMDAwMzAwMUUwNTAKKzoxMDhDODAwMDA2MDAwMDMyMDAwMEI5MEIwMDUwMDFFOEY2NjA4MDlDM0QKKzoxMDhDOTAwMDA4MDAwMDAwMDA0MDAyNjgxMjlBRkUzODAwMDBCODBCN0QKKzoxMDhDQTAwMDlGMzEwMUUwOTYyMjZFQkMwMDAwMDAwMDAwMzAwMUUwMjAKKzoxMDhDQjAwMDA2MDAwMDMyMDAwMDAwMDAwMDUwMDFFODA2MDAwMDMyMEIKKzoxMDhDQzAwMDAwMDAwMDAwMDBBODAxRTAwNjAwOTIzMjE4MDAzNjAwMDMKKzoxMDhDRDAwMDAwMDAwMEY4NzMwQTAzRjkxRDAwQkQwQjA0MDAwMDgwQkEKKzoxMDhDRTAwMDAyQTQxN0I4MDAwMEJBMEIwMDAwMDAxNDE4NDA4MTlDQzEKKzoxMDhDRjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMjAwMDgwNDcKKzoxMDhEMDAwMDAwMDAwMDI4MDkwMDM3MzIwMDAwQjEwRjAwMDAwMDA4MDEKKzoxMDhEMTAwMEU4MDEwMEY0MDAwMEMwMEIxMjAwMDA0ODAyQzA4MEIyNUQKKzoxMDhEMjAwMDAwMDBEQzBFMDAwMDAwMzAwMzAwMzhGMjAwMDBDNDBCMkQKKzoxMDhEMzAwMDIzMDEwMDE0MTg0MDgxQkEzRTAwQzMwQjEyMDAwMDJDMUUKKzoxMDhENDAwMDgyQ0QyRUIyMTgwMDM2MDBDQTAwMDBGODczMEEwM0Y5NkIKKzoxMDhENTAwMDAwMDBDNDBCMDQwMTAwMTQxODQwODFCQzAwMDA5OTBGRUUKKzoxMDhENjAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwQ0EwQjI5MzEwMTBDNTUKKzoxMDhENzAwMDA5MDA2RUIyMkIwMDhDMDcxMjAxMDAyQzgyQ0QyRUIyOUUKKzoxMDhEODAwMDAwMDBDODBCMDAwMDAwODAwMjAwMDA5MDAwMDA5QzBENTUKKzoxMDhEOTAwMDAwMEMwMjAwMDk4MDZFRjIwMDAwRDMwQjAwMDAwMDgwN0UKKzoxMDhEQTAwMDAyMDAwMDkwMDAwMEFBMEYwMDAwMDA4MDAyMDAwMEYwMDYKKzoxMDhEQjAwMDAwMDAwMDAwMDAwMDAwMUMwODAwOTAzMjAwMDBEMjBCRjAKKzoxMDhEQzAwMDA0MDAwMDI4MDk4MDgwQjIwMDAwRjEwRTAwMDAwMEQ4RTUKKzoxMDhERDAwMDAyMDAwMEQyMDAwMEQyMEIwNDAwMDA4MDAyODA5MkJDOEUKKzoxMDhERTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDA3RDA1NDIKKzoxMDhERjAwMDAwMDAwMDA4MDgwMDAwOTIwMDAwOEMwNzFEMDAwMDgwQTEKKzoxMDhFMDAwMDAyMDAwMEIwMDAwMDhDMDc4MDAwMDA4MDAyODEyRkI2QjUKKzoxMDhFMTAwMDJBMDBENTBCMTIwMDAwMkM4MkNEMkVCMjAwMDA4QzA3NDgKKzoxMDhFMjAwMDAwMDAwMEY4MDI4MTJGOTQwMDAwQkEwRDAwMDAwMDE4MjUKKzoxMDhFMzAwMDA5NDA4MUYyMDAwMEEzMEQwMEE4MDEyMDA5MDA2RUYyOTQKKzoxMDhFNDAwMDAwMDAwMDAwMDAzMDAxMEMwOTAwNkUzMjAwMDA5QzBEOTMKKzoxMDhFNTAwMDAwMEMwMjAwMDk4MDZFRjIwMDAwOEUwNzAwMDAwMDgwMDYKKzoxMDhFNjAwMDAyMDAwMDkwMDAwMDk5MEYwMDAwMDA4MDAyMDAwMEYwNTYKKzoxMDhFNzAwMDAwMDBBQTBGMDAwMDAwODAwMjAwMDBGMDAwMDA3RDA1NDUKKzoxMDhFODAwMDAwMDAwMDFDMDgwMDkwOTIwMDAwMDAwMDU0NTQwMUZDRjcKKzoxMDhFOTAwMDAyQzA2RTMyMTAwMDAwMDAwMDAwMDBBODc4MEIxNjM4RTcKKzoxMDhFQTAwMDA4MDAwMDAwMDAwMDAwQUM3ODBCMTYzODAwMDAwMDAwM0QKKzoxMDhFQjAwMDAwMDAwMEIwQTgwMDJEMzcwMDQ0MDAwMDAwMDAwMEIwMDIKKzoxMDhFQzAwMDg4MEQ4QjNBMDAwMDAwMDAwMDUwMDFCNDA4ODA2RTMyMUIKKzoxMDhFRDAwMDAwMDBFRDBCMDQzMTAxOTAwODAwNkVCMjAyMDAwMDAwQUEKKzoxMDhFRTAwMDAwMDAwMEM4ODI4RDhBMzcwMDAwMDAwMDAwMDAwMEM4MjIKKzoxMDhFRjAwMEMyQTIyQzNBMTgwMEVCMEI4NjQxMDI3ODg4MEQ3OEI2OTYKKzoxMDhGMDAwMDAwMDBFNjBCOUYwMTAwQTgxODgwOEFCQzlGMDBFNjBCQkEKKzoxMDhGMTAwMDAwMDAwMEE4MDgwMDM2OTIwMDAwMDAwMDAwNDAwMjA0OTMKKzoxMDhGMjAwMEI4M0Y3ODMwMDAwMEZCMEIwMDAwMDAwNEQ4NjI4MDlDNDIKKzoxMDhGMzAwMDAyMDAwMDAwMDAwMDAwQzg4MjhEOEEzNzAwMDAwMDAwOTcKKzoxMDhGNDAwMDAwMDAwMEM4QzJBMjJDM0ExODAwRjIwQjg2NDEwMjc4MzkKKzoxMDhGNTAwMDg4MEQ3OEI2MDAwMEVEMEI5RjAxMDBBODE4ODA4QUJDMzAKKzoxMDhGNjAwMDlGMDBFRDBCMDAwMDAwQTgwODAwMzY5MjAwMDBGNDBCRjMKKzoxMDhGNzAwMDI4NDAwMjA0QjgzRjc4QjAwMDAwMDAwMEM4MDEwMDA0OTcKKzoxMDhGODAwMEQ4NjI4MDNDMDAwMEY4MEIwMjAxMDA5MDE4MjA4OUJDRDgKKzoxMDhGOTAwMDAwMDAwMDAwMDAwMDAwQjQwODAwMDAzMjAwMDBFRDBCRUIKKzoxMDhGQTAwMDlGMDEwMEE4MTg4MDhBQkM5RjAwRUQwQjAwMDAwMEE4NUMKKzoxMDhGQjAwMDA4MDAzNjkyMDAwMEZCMEIwNDAwMDA5MDE4MjA4OUJBQ0MKKzoxMDhGQzAwMDAwMDAzNjEwOUYwMDAwMDQ0ODYyODBCQzAwMDAzNjEwOEMKKzoxMDhGRDAwMDkwMDAwMEI0NDg2MjhCQkEwMzAwMzYxMDA0NDAwMjAwQ0YKKzoxMDhGRTAwMDA4MUVGRkI4MDAwMDAzMEMwMDAwMDAwMEQ4MjI4MDlBODEKKzoxMDhGRjAwMDAwMDAyODBDMDQwMDAwODBBMkUyOEFCQzAyMDAwMDAwRUQKKzoxMDkwMDAwMDAwMDAwMEM4ODI4RDhBMzcwMDAwMDAwMDAwMDAwMEM4MDAKKzoxMDkwMTAwMEMyQTIyQzNBMTgwMDI2MEM4NjQwMDI3ODg4MEQ3OEI2MzkKKzoxMDkwMjAwMDAwMDAzNjEwMDQ0MDAyMDRCODNGNzhCMDAzMDAzNjEwNDgKKzoxMDkwMzAwMDA0NDAwMjAwMDgxRUZGQjgwMDAwMDcwQzEyMDEwMDYwODcKKzoxMDkwNDAwMDA4NDAyM0IyMDA4MjAwMDAwMDAwMDAwODA4ODAzNjMyODkKKzoxMDkwNTAwMDAwMDAzMTAzMTIwMTAwMkM3MkUwMkVCMjAwMDAwNTBDNUEKKzoxMDkwNjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDEyMDAwMDI0NzIKKzoxMDkwNzAwMDA4MDAyM0IyMDAwMDM2MTAxMjAwMDAyMDA4QzAyM0IyRkUKKzoxMDkwODAwMDAwMDAzNjEwMTIwMDAwMTgwODgwMjNCMjAwMDAwMDAwMTMKKzoxMDkwOTAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwMTEwQzE4MDEwMDBDNDEKKzoxMDkwQTAwMEE4Q0QzRUIyMDAwMDBCMEMxMjAwMDAzODAyODA4MUIyNDUKKzoxMDkwQjAwMDAwMDAzNjEwMTIwMDAwM0MwMjAwODJCMjAwMDAzNjEwQTAKKzoxMDkwQzAwMDEyMDAwMDMwMDI0MDgyQjIwMDAwMzYxMDEyMDAwMDM0NUMKKzoxMDkwRDAwMDAyMDA4NkIyMjA4MDA1MEMwMDAwMDAwODA4ODAzNjkyNEQKKzoxMDkwRTAwMDAwMDAwMDAwMDAwMDAwRDgwMjAwMDAzMjAwMDAwMDAwNzQKKzoxMDkwRjAwMDAwMzgwMjAwQjgxQjgwM0EwMDAwMDAwMDY0MzAwMUUwMzQKKzoxMDkxMDAwMDE2MjA2RTNBMDAwMDAwMDAwMDAwMDAwMDA3NDA4MDMyODgKKzoxMDkxMTAwMDAwMDAwMDAwMDAwODAwMDAwNzAwODAzMjAwMDAwMDAwOEUKKzoxMDkxMjAwMDAwMTAwMDAwMDc0MDgyMzIwMDAwMDAwMDAwMTgwMDAwMUMKKzoxMDkxMzAwMDA3MDA4NjMyMDAwMDE4MEMxMjAwMDA1MEYyQzEzOEI0NEIKKzoxMDkxNDAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwOTIKKzoxMDkxNTAwMDAwMTgwMDAwMDc4MDgxMzIwMDAwMDAwMDAwMjAwMDAwOUQKKzoxMDkxNjAwMDA3MDA4MjMyMTAwMDAwMDAwMDMwMDAwMDE3RTAyQzM5QTgKKzoxMDkxNzAwMDAwMDAwMDAwMDAzODAwMDBGNzAxMEIzNDAwMDAyMDBDNTQKKzoxMDkxODAwMDgwMDEwMDgwMzI4MDg3QjYwMDAwMDAwMDAwMzgwMDAwQjcKKzoxMDkxOTAwMEI3MDE3MDM0MDAwMDAwMDAwMDAwMDAwOEU4MDEwMDM0NEUKKzoxMDkxQTAwMDAwMDAyRjBDMDIwQzAyODBBMjFCODlCQzE4MDAzNjAwQTQKKzoxMDkxQjAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwREMwRTAwMDAwMDMwMjQKKzoxMDkxQzAwMDAzMDAzOEYyMDAwMDI0MEMxMjAwMDA0ODAyQzA4MEIyRjQKKzoxMDkxRDAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDBGRDBCQzgKKzoxMDkxRTAwMDlGMDEwMEE4MTg4MDhBQkM5RjAwRkQwQjAwMDAwMEE4MEEKKzoxMDkxRjAwMDA4MDAzNjkyMDAwMDJBMEM4MDAxMDA4MDMyODAyRkI2RDEKKzoxMDkyMDAwMDNFMDAyOTBDMTIwMDAwMkM4MkNEMkVCMjAwMDAyQzBDNDYKKzoxMDkyMTAwMDFEMDEwMDgwMDIwMDAwQjAwMDAwOEMwNzAwMDAwMEY4NzMKKzoxMDkyMjAwMDYyODEyRjk1MDAwMDhDMDc4MDAwMDA4MDAyODEyRkI2OUMKKzoxMDkyMzAwMDJBMDAyRDBDMTIwMDAwMkM4MkNEMkVCMjAwMDA4QzA3Q0IKKzoxMDkyNDAwMDAwMDAwMEY4MDI4MTJGOTQwMDAwMDAwMDAwMzgwMDAwQTgKKzoxMDkyNTAwMEM3MDE3MDM0MDAwMERDMEUwMDAwMDAzMDAzMDAzOEYyNUIKKzoxMDkyNjAwMDA4MDAzMzBDMjMxOTAxRTg3NjIwODFCOTNFMDAzMjBDNDYKKzoxMDkyNzAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMzUwQzFEMDEwMDgwQTIKKzoxMDkyODAwMDAyMDAwMEIwMDAwMDM4MEMwMDAwMDBGODYyODEyRjk1NDkKKzoxMDkyOTAwMDAwMDAzODBDODAwMDAwODAwMjgxMkZCNjJBMDAzNjBDQjYKKzoxMDkyQTAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMDAwMDAwMDAwMEY4NTkKKzoxMDkyQjAwMDAyODEyRjM0MDAwMEZBMEQwMDAwMDAyQ0Y5MDEwMEY0QTcKKzoxMDkyQzAwMDAwMDAzQjBDMTIwMTAwRTgwMkMwMjFCMjE4MDAzNjAwNzkKKzoxMDkyRDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwM0IwQzEyMDAwMDQ4N0MKKzoxMDkyRTAwMDAyQzA4MEIyMDAwMDMyMDMwMDAwMDBGOEEyODAyRjk0NzgKKzoxMDkyRjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwMDAwMDAwRTEKKzoxMDkzMDAwMDAwMzAwMDI4MDgwMDZFMzIwMDAwMDAwMDU0NTQwMUZDQjgKKzoxMDkzMTAwMDAyQzA2RTMyMDBDMDQ5MEMxODAxMDAwQ0E4Q0QzRUIyNEMKKzoxMDkzMjAwMDIwODAwMDAwMDAwMDAwMjgwOTgwMzYzMjAwMDBGMTBFODUKKzoxMDkzMzAwMDAwMDAwMEQ4MDIwMDAwRDIwMDAwNDYwQzA0MDAwMDgwQUIKKzoxMDkzNDAwMDAyODA5MkJDMTgwMDAwMDAwMDAwMDBGODczMEEwMzM5ODQKKzoxMDkzNTAwMDQ3MEMzNjAwMDAwMDAwQzAwMjAwMzY5MjE4MDAzNjAwQUMKKzoxMDkzNjAwMDAwMDAwMEY4NzM4QTAzRjkwMDAwMDAwMDAwMDAwMEQ4MzQKKzoxMDkzNzAwMDAyODAwMTMyMDBDMDQ2MEMxODAwMDAwQ0E4Q0QzRUIyOUQKKzoxMDkzODAwMDAwMjAwMDg0MDAwMDAwMjgwOTAwMzczMjAwMDBBRDBGRTMKKzoxMDkzOTAwMDAwMDAwMDA4RTgwMTAwRjQwMDAwOEMwNzAwMDAwMDgwRDUKKzoxMDkzQTAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyOUUKKzoxMDkzQjAwMDAwMDAwMDAwNTQ1NDAxRkMwMkMwNkUzMjAwQzA1MjBDODgKKzoxMDkzQzAwMDE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMDAwMDAwMDA4NkIKKzoxMDkzRDAwMDA4ODAzNjMyMDAwMDJGMDMxMjAxMDAyQzcyRTAyRUIyRkEKKzoxMDkzRTAwMDAwMDA1MDBDMDAwMDAwODAwMjAwMDA5MDAwMDA1MTBGQUYKKzoxMDkzRjAwMDAwMDAwMDI4MDkwMDAyRjIwMDAwNUEwQzAwMDAwMDVDODYKKzoxMDk0MDAwMDA4MDAwMDkyMDAwMDAwMDAwMDAwMDBEODAyODAwMTMyMzUKKzoxMDk0MTAwMDAwMDAwMDAwNTQ1NDAxRkMwMkMwNkUzMjAwQzA1QTBDMUYKKzoxMDk0MjAwMDE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMDAwMDAwMDA4MEEKKzoxMDk0MzAwMDA4ODAzNjMyMDAwMDhDMEYwMDAwMDA1QzFGQzBGNUZBNzcKKzoxMDk0NDAwMDAwMDAzMTAzMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwRDYKKzoxMDk0NTAwMDAwMzAwMDI4MDgwMDZFMzIwMDIwMDA4NDAwMDAwMDI4NDAKKzoxMDk0NjAwMDA5MDAzNzMyMDAwMEFEMEYwMDAwMDAwOEU4MDEwMEY0RTkKKzoxMDk0NzAwMDAwMDA1RjBDMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNkYKKzoxMDk0ODAwMDAwMDAwMDA4MDgwMDAwMzIwMDAwNjUwQzA0MDAwMDgwQTUKKzoxMDk0OTAwMDAyQzA4NUIyMDAwMDY1MEM4MDAwMDA4MEYyQzE4NUI2NzQKKzoxMDk0QTAwMDAwMDA2NDBDMUM0MTAyODAwNkMwODVCMjAwMDAwMDAwNzAKKzoxMDk0QjAwMDAwMDAwMDY4MDJDNTg1MzAwMDAwMDAwMDAwMDAwMDcwNTgKKzoxMDk0QzAwMDFGMDBGNzNBMDAwMDAwMDAwMDAwMDBGODIyODEyRjM0NEUKKzoxMDk0RDAwMDAwMDBEQzBDODAwMTAwODBBMjgwMkZCNjE4MDAwMDAwODQKKzoxMDk0RTAwMDAwMDAwMEY4NzMwQTAzMzlEQzBDMzYwMENBMDAwMEMwMjMKKzoxMDk0RjAwMDAyMDAzNjkyMDAwMEFEMEM4MDAxMDA4MDgyODEyRkI2MDAKKzoxMDk1MDAwMDAwMDBCMjBDMUYyMDAxMDgwOTAwNkVCMjAwMDBBRDBDNzMKKzoxMDk1MTAwMDA0MzAwMTA4ODk5QjkwQkMwMDAwNzEwQzA0MzEwMTgwNkIKKzoxMDk1MjAwMDAyMDA2RUJDMDAwMEUwMEQwMDAwMDA4MDAyMDAwMEYwQjAKKzoxMDk1MzAwMDAwMDA2RjBDMDA1MDAxNDgwODgwNkU5MjAwMDAzNjEwNDkKKzoxMDk1NDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMDA0MDUKKzoxMDk1NTAwMDI4NjE4MDNDMDAwMDgxMEMwMDAwMDAwMDI4MjE4MDlBRDYKKzoxMDk1NjAwMDAwMDBFMDBEMDAzMDAxNDgwODAwNkVGMjAwMDA3NDBDQUQKKzoxMDk1NzAwMDAwNTAwMTA0QTg1QjgwOUMwMDAwMzYxMDAwMDAwMDgwQjEKKzoxMDk1ODAwMDAyMDAwMDkwMDAwMDAwMDAwMDUwMDEwMEE4MUI4MDNBN0IKKzoxMDk1OTAwMDAwMDA3RTBDMDcwMDAwNDgxOEEwODRCQzA4MDAwMDAwRjIKKzoxMDk1QTAwMDAwNDAwMjAwMTg5QUZFMzgwMDAwMDAwMDAwMDAwMDY4MjkKKzoxMDk1QjAwMDAyMDA4MDMyMDAwMEUwMEQwMDAwMDA4MDAyMDAwMEYwOTgKKzoxMDk1QzAwMDAwMDA3QjBDMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwQkMKKzoxMDk1RDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwN0UwQzA3MDAwMDQ4QTAKKzoxMDk1RTAwMDE4QTA4NEJDMDgwMDAwMDAwMDQwMDIwMDE4OUFGRTM4NTEKKzoxMDk1RjAwMDAwMDA3ODBDMDAwMDAwNjgwMjAwODA5MjAwMDA4MTBDREUKKzoxMDk2MDAwMDA0MDAwMDQ4MThBMDg0QkEwMDAwMzYxMDlGMDAwMDA0MkYKKzoxMDk2MTAwMDI4NjE4MEJDMDAwMDAwMDAwMDAwMDAwMDI4MjE4MDNBODIKKzoxMDk2MjAwMDAwMDAwMDAwMDA1NDAxRkMwMkMwNkUzMjAwMDA4QTBDRjEKKzoxMDk2MzAwMDEyMDEwMDYwMDg0MDIzQjIwMDgyMDAwMEQ2MDEwMDA4MzkKKzoxMDk2NDAwMDA4ODAzNjMyMDMwMDM2MTAwNDQwMDIwMDM4MUFGRkI4OTIKKzoxMDk2NTAwMDAzMDAwMDAwMDAwMDAwNzgwOTYwODAzOTE4MDAwMDAwNTUKKzoxMDk2NjAwMEQyNDEwMjhDRTZBMTk3MzkwMDAwMDAwMDAwNTAwMUU4QzkKKzoxMDk2NzAwMDA2ODA4NDMyMjkwMDMxMDMxMjAxMDAyQzgyQ0QyRUIyRTMKKzoxMDk2ODAwMDAwMDA4ODBDMDAwMDAwODAwMjAwMDA5MDAwMDAzNjEwRUUKKzoxMDk2OTAwMDEyMDAwMDI0MDgwMDIzQjIwMDAwMzYxMDEyMDAwMDIwM0YKKzoxMDk2QTAwMDA4QzAyM0IyMDAwMDM2MTAxMjAwMDAxODA4ODAyM0IyNTAKKzoxMDk2QjAwMDAwMDAwMDAwMDAwMDAwRDgwMjgwMDEzMjAwQzA5NTBDQkMKKzoxMDk2QzAwMDE4MDEwMDBDQThDRDNFQjIyMDgwMDAwMEQ2MDEwMDA4OTEKKzoxMDk2RDAwMDA4ODAzNjMyMDAwMDhGMEMxMjAwMDAzODAyODA4MUIyMDAKKzoxMDk2RTAwMDAwMDAzNjEwMTIwMDAwM0MwMjAwODJCMjAwMDAzNjEwNkEKKzoxMDk2RjAwMDEyMDAwMDMwMDI0MDgyQjIwMDAwODQwQzEyMDEwMDM0REIKKzoxMDk3MDAwMDAyMDA4NkIyMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwQzcKKzoxMDk3MTAwMDA4MDAwMDAwMDA0MDAyNUMxODlBRkUzODAwMDAwMDAwQkIKKzoxMDk3MjAwMDAwMDAwMDQ4MDgwMDAwMzIwMDAwMDAwMDAwMDAwMEQ4REYKKzoxMDk3MzAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDAwMDA3NDA4MDMyRkMKKzoxMDk3NDAwMDAwMDAwMDAwMDAwODAwMDAwNzAwODAzMjAwMDAwMDAwNTgKKzoxMDk3NTAwMDAwMTAwMDAwMDc0MDgyMzIwMDAwMDAwMDAwMTgwMDAwRTYKKzoxMDk3NjAwMDA3MDA4NjMyMDAwMDlDMEMxMjAwMDA1MEYyQzEzOEI0OTEKKzoxMDk3NzAwMDAwMDAwMDAwRDYwMTAwRDgwMjgwMDEzMjAwMDAwMDAwODUKKzoxMDk3ODAwMDAwMTgwMDAwMDc4MDgxMzIwMDAwMDAwMDAwMjAwMDAwNjcKKzoxMDk3OTAwMDA3MDA4MjMyMTAwMDAwMDAwMDMwMDAwMDE3RTAyQzM5NzIKKzoxMDk3QTAwMDAwMDBBNDBDODAwMDAwODAzMjgwODdCNjAwMTAwMDgwOEEKKzoxMDk3QjAwMDAwMzgwMDAwMDcwMDM3MzIwMDAwQTUwQzAwMDAwMDgwRDAKKzoxMDk3QzAwMDAyMDAwMDkwMDAxMDAwODgwMDM4MDAwMDA3MDAzNzMyQzcKKzoxMDk3RDAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwQ0EKKzoxMDk3RTAwMDAwMDAwMDY4MDJDMDg1MzIwMDAwMDAwMDAwMDAwMDA4OTAKKzoxMDk3RjAwMEU4MDEwMDM0MDAwMEE4MEMxMjAwMDA0ODAyQzA4MEIyNEEKKzoxMDk4MDAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDBFMDBEQUMKKzoxMDk4MTAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwODEwQzAwMDAwMDgwQzkKKzoxMDk4MjAwMDAyMDAwMDkwMDAwMEIyMEMwMDAwMDA4MDAyMDAwMDkwRDYKKzoxMDk4MzAwMDAwMDBFMDBEMDAwMDAwODAwMjAwMDBGMDAwMDBCMDBDMEQKKzoxMDk4NDAwMDAwMzgwMjAwQjgxQjgwOUMwMDAwQjIwQzAwMDAwMDgwQjEKKzoxMDk4NTAwMDAyMDAwMDkwMDUwMDAwMDAwMDAwMDA2ODAyQTBGRTM4MzEKKzoxMDk4NjAwMDAwMDBBRDBDMDA0MDAyODAwMjQwNjg5MjAwMDAwMDAwNDEKKzoxMDk4NzAwMENBMDEwMEQ4MDIwMDAwMzIwMDAwQjUwQzA0QjgwMTgwMTMKKzoxMDk4ODAwMDAyMDA2RUJDMDAwMDAwMDAwMEI4MDFFMDg2MUJFRTNDNDgKKzoxMDk4OTAwMDRDMDAwMDAwMDAwMDAwMDAwNzAwMzYzMjAwMDAwMDAwMEQKKzoxMDk4QTAwMDAwMDAwMDc4QTkwMDJEMzdCNDQ0MDAwMDAwMDgwMDAwMzMKKzoxMDk4QjAwMDg3OEQ5NzNBMDAwMDAwMDAwMDAwMDA3ODk5QzAyQzM3OEYKKzoxMDk4QzAwMEI0MDAwMDAwMDAwMDAwNzg4OThEOTczQTAwMDAzNjEwM0YKKzoxMDk4RDAwMDAyMTAwMDAwODdCRjk3QkEwMDAwMDAwMDAwMTgwMDAwQzcKKzoxMDk4RTAwMDA3NDBGRTMyMDAwMEJDMEMxMjAwMDA0OEYyQzEzOEI0NDAKKzoxMDk4RjAwMDAwMDBCRDBDQjYwMDAwODAwMjAwMDBCMDAwMjBCRTBDQ0QKKzoxMDk5MDAwMDEyMDAwMDY0QTJDRDJDQjIwMDAwMDAwMEE2MDAwMDgwNkUKKzoxMDk5MTAwMDAyMDAwMDMwMDAwMEMyMEM4MDAxMDA4MEEyODAyRkI2M0YKKzoxMDk5MjAwMDE4MDAzNjAwQ0EwMDAwRjg3MzBBMDNGOTAwMDA4QzA3MUIKKzoxMDk5MzAwMDAwNTQwMUZDMDJDMDZFOTIwMDAwMDAwMDAwNTQwMUZDQzMKKzoxMDk5NDAwMDAyQzA2RTMyMDAwMEM4MEMxMjAxMDA2MDA4NDAyM0IyNTEKKzoxMDk5NTAwMDAwODIwMDAwMDAwMDAwMDgwODgwMzYzMjI5MDAzMTAzMzAKKzoxMDk5NjAwMDEyMDEwMDJDODJDRDJFQjIwMDAwQzYwQzAwMDAwMDgwMzcKKzoxMDk5NzAwMDAyMDAwMDkwMDAwMDM2MTAxMjAwMDAyNDA4MDAyM0IyRkMKKzoxMDk5ODAwMDAwMDAzNjEwMTIwMDAwMjAwOEMwMjNCMjAwMDAzNjEwN0MKKzoxMDk5OTAwMDEyMDAwMDE4MDg4MDIzQjIwMDAwMDAwMDAwMDAwMEQ4NjgKKzoxMDk5QTAwMDAyODAwMTMyMDBDMEQzMEMxODAxMDAwQ0E4Q0QzRUIyRDkKKzoxMDk5QjAwMDIwODAwMDAwMDAwMDAwMDgwODgwMzYzMjAwMDBDRDBDMzYKKzoxMDk5QzAwMDEyMDAwMDM4MDI4MDgxQjIwMDAwMzYxMDEyMDAwMDNDMDQKKzoxMDk5RDAwMDAyMDA4MkIyMDAwMDM2MTAxMjAwMDAzMDAyNDA4MkIyNTMKKzoxMDk5RTAwMDAwMDBDNjBDMTIwMTAwMzQwMjAwODZCMjAwMDAzNjEwREUKKzoxMDk5RjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRTAwRDAwMDAwMDQ4MjAKKzoxMDlBMDAwMDA4MDAwMEYyMDgwMEQ2MEMwMDQwMDI1QzE4OUFGRTk4OEMKKzoxMDlBMTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwRUUKKzoxMDlBMjAwMDAwNTAwMTAwQTgxQjgwM0EwMDAwOTcwQzAwMDAwMDQ4N0QKKzoxMDlBMzAwMDA4MDAwMDkyMDAwMDAwMDAwMDU0MDFGQzAyQzA2RTMyRDkKKzoxMDlBNDAwMDAwMDA1MTBGMDAwMDAwMjgwOTgwMDJGMjAwMDBCRDBDNDgKKzoxMDlBNTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNTEwRjAwMDAwMDI4NkMKKzoxMDlBNjAwMDA5MDAwMkYyMDAwMERGMEM5QTAxMDBGODYyODEyRkI0QjUKKzoxMDlBNzAwMDEwMjQwMDAwMDAwMDAwRjhBMjhEMkYzMTAwMDAwMDAwMkIKKzoxMDlBODAwMDAwRDYwMUVDMDZDMDZFMzQyRTAwOEMwNzEyMDEwMDJDQUIKKzoxMDlBOTAwMDgyQ0QyRUIyMDAwMERGMEMwMDAwMDA4MDAyMDAwMDkwOUEKKzoxMDlBQTAwMDAwMDBFODBDODAwMTAwODBGMkMxODVCNjAwMDBFNTBDRTIKKzoxMDlBQjAwMDFGNDAwMjg0RTYwMTAwQjQwMDAwRTgwQzFEMDEwMEY4MUMKKzoxMDlBQzAwMDIyODEyRkI0MDAwMEU4MEMwMDAwMDBGODYyODEyRjk1N0QKKzoxMDlBRDAwMDAwMDBFNzBDMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwNDMKKzoxMDlBRTAwMDAwMDAwMEY4NjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwNzUKKzoxMDlBRjAwMDAyNDA2ODMyMDAwMEVBMEMwNDk4MDE2NDg4MUI4N0JDQUQKKzoxMDlCMDAwMDAwMDBENzBGMDA5MDAxMDgwOTAwNkVGMjAwMDAwNzEwNTYKKzoxMDlCMTAwMDAwMDAwMDgwMDIwMDAwRjAwMDAwMzYxMDEyMDAwMDY4MTMKKzoxMDlCMjAwMDAyQzU4NUIwMDAwMDAwMDAwMDAwMDBGOEQyODAyRjM1OEIKKzoxMDlCMzAwMDAwMDA4RTA3MzcwMDAwRjhEMjgxMkZCNDAwMDAwMDAwMkIKKzoxMDlCNDAwMDAwMDAwMEY4NzI4MTJGMzQzRDAwOEUwNzEyMDEwMDJDQjYKKzoxMDlCNTAwMDgyQ0QyRUIyMDAwMEVGMEMwMDAwMDA4MDAyMDAwMDkwQzkKKzoxMDlCNjAwMDAwMDBGODBDODAwMTAwODBGMkMxODVCNjAwMDBGNTBDMDEKKzoxMDlCNzAwMDFGNDAwMjg0RTYwMTAwQjQwMDAwRjgwQzFEMDEwMEY4NEIKKzoxMDlCODAwMDIyODEyRkI0MDAwMEY4MEMwMDAwMDBGODYyODEyRjk1QUMKKzoxMDlCOTAwMDAwMDBGNzBDMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwNzIKKzoxMDlCQTAwMDAwMDAwMEY4NjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwQjQKKzoxMDlCQjAwMDAyNDA2ODMyMDAwMDAwMDAwMEQ0MDFFQzE2QzA2RTNBOEEKKzoxMDlCQzAwMDAwMDAzNjEwMTIwMDAwNjgwMkM1ODVCMDAwMDA4RTA3NDQKKzoxMDlCRDAwMDA0QjAwMDgwMDIwMDZFQkMzNzAwOEUwNzEyMDEwMDJDMUEKKzoxMDlCRTAwMDgyQ0QyRUIyMDAwMEZCMEMwMDAwMDA4MDAyMDAwMDkwMkQKKzoxMDlCRjAwMDAwMDAwNDBEODAwMTAwODBGMkMxODVCNjAwMDAwMTBENTcKKzoxMDlDMDAwMDFGNDAwMjg0RTYwMTAwQjQwMDAwMDQwRDFEMDEwMEY4QUQKKzoxMDlDMTAwMDIyODEyRkI0MDAwMDA0MEQwMDAwMDBGODYyODEyRjk1MEUKKzoxMDlDMjAwMDAwMDAwMzBEMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwRDQKKzoxMDlDMzAwMDAwMDAwMEY4NjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwMjMKKzoxMDlDNDAwMDAyNDA2ODMyMDAwMDEwMEQwMDAwMDA4MDAyMDAwMDkwMDkKKzoxMDlDNTAwMDAwMDAwQzBEODAwMTAwODBGMkMxODVCNjAwMDAwOTBERTYKKzoxMDlDNjAwMDFGNDAwMjg0RTYwMTAwQjQwMDAwMEMwRDFEMDEwMEY4NDUKKzoxMDlDNzAwMDIyODEyRkI0MDAwMDBDMEQwMDAwMDBGODYyODEyRjk1QTYKKzoxMDlDODAwMDAwMDAwQjBEMUQwMTAwODAwMjAwMDBCMDAwMDAwMDAwNkMKKzoxMDlDOTAwMDAwMDAwMEY4NjI4MTJGMzUwMDAwMDAwMDAwNDAwMjgwQzMKKzoxMDlDQTAwMDAyNDA2ODMyMDAwMDEwMEQzNzAwMDBGOEQyODEyRkI0NTYKKzoxMDlDQjAwMDAwMDAwMDAwMDAwMDAwRjg3MjgxMkYzNDNEMDAxMDBERkMKKzoxMDlDQzAwMDEyMDEwMDJDODJDRDJFQjIwMDAwMEUwRDAwMDAwMDgwOEIKKzoxMDlDRDAwMDAyMDAwMDkwMDAwMDAwMDAwMEQ0MDFFQzA2MDAwMDMyRjkKKzoxMDlDRTAwMDAwMDA4RTA3MTIwMTAwNjgwMkM1ODVCMDAwMDAzNjEwMjIKKzoxMDlDRjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwOEMwNzgwMDEwMDgwQkUKKzoxMDlEMDAwMEYyODEyRkI2MDAwMDhDMDc4MDAwMDA4MEUyODEyRkI2MjAKKzoxMDlEMTAwMDAwMDA4QzA3MDg1OTAxRUMwNkZCNkVCQzAwMDAwMDAwMzcKKzoxMDlEMjAwMDAwMDAwMEQ4MDI4MDAxMzIwMDAwMDAwMDU0NTQwMUZDMDEKKzoxMDlEMzAwMDAyQzA2RTMyMDBDMDFEMEQxODAxMDAwQ0E4Q0QzRUIyNEQKKzoxMDlENDAwMDAwMDAwMDAwMDA1ODAxRUMwNkZCNkUzQTIwODAwMDAwODUKKzoxMDlENTAwMDAwMDAwMDA4MDg4MDM2MzIwMDAwMkYwMzEyMDEwMDJDOUEKKzoxMDlENjAwMDcyRTAyRUIyMDAwMDFCMEQwMDAwMDA4MDAyMDAwMDkwODcKKzoxMDlENzAwMDAwMDBBQTBGMDAwMDAwRjhFMjgxMkZGNDAwMDAyMDBEN0YKKzoxMDlEODAwMDA2MDMwMTgwMTJDMDZFQkMxOTAwN0QwNTAwMDAwMDFDOTYKKzoxMDlEOTAwMDA4MDAzNjkyMUEwMDdEMDUwMDAwMDAxQzA4MDAzNjkyNkIKKzoxMDlEQTAwMDAwQzAwMDAwMDAwMDAwRjhBMjhEMkYzMTAwMDAwMDAwNkMKKzoxMDlEQjAwMDAwMDAwMEQ4MDI4MDAxMzIwMDIwMDBDMDAwMDAwMDI4MEUKKzoxMDlEQzAwMDA5MDAzNzMyMDAwMDAwMDAwMDMwMDAyODA4MDA2RTMyMjEKKzoxMDlERDAwMDAwMDAwMDAwNDUzMDAwRTAwNjAwMDAzMjAwMDBBRDBGM0EKKzoxMDlERTAwMDAwMDAwMDA4RTgwMTAwRjQwMDAwMkMwRDA0MDIwMUVDNjIKKzoxMDlERjAwMDE2QzA2RUJDMDAwMDAwMDBDOTAxMDAxNDE4NDA4MTNBNzIKKzoxMDlFMDAwMDAwMDAwMDAwMDAwMDAwRjgwMjgwMkYzNDAwQzAyQzBEN0MKKzoxMDlFMTAwMDEyMDEwMDQwQTI4RDM5QjIwMDAwMkEwRDAwMDAwMDgwMUUKKzoxMDlFMjAwMDAyMDAwMDkwMTgwMDM2MDBDQTAwMDBGODczMEEwM0Y5MTcKKzoxMDlFMzAwMDAwMDAyQzBEOUYwMTAwMTQxODQwODFCQzAwMDA4RTA3MEIKKzoxMDlFNDAwMDgwMDEwMDgwOTI4MDJGQjYyQjAwOEUwNzEyMDEwMDJDMUIKKzoxMDlFNTAwMDgyQ0QyRUIyMDAwMDJGMEQwMDAwMDA4MDAyMDAwMDkwODUKKzoxMDlFNjAwMDAwMDAzNjEwMUYwMTAwRDgwMjgwMDFCMjAwMDAwMDAwN0YKKzoxMDlFNzAwMDAwNTQwMUZDMDJDMDZFMzIwMEMwM0MwRDE4MDEwMDBDMDEKKzoxMDlFODAwMEE4Q0QzRUIyMjA4MDAwMDAwMDAwMDAyODA5ODAzNjMyQjQKKzoxMDlFOTAwMDAwMDBGMTBFMDAwMDAwRDgwMjAwMDBEMjAwMDAzOTBERDEKKzoxMDlFQTAwMDA0MDAwMDgwMDI4MDkyQkMxODAwMDAwMDAwMDAwMEY4NEUKKzoxMDlFQjAwMDczMEEwMzM5M0EwRDM2MDAwMDAwMDBDMDAyMDAzNjkyRTIKKzoxMDlFQzAwMDE4MDAzNjAwMDAwMDAwRjg3MzhBMDNGOTAwMDAwMDAwNTMKKzoxMDlFRDAwMDAwMDAwMEQ4MDI4MDAxMzIwMEMwMzkwRDE4MDAwMDBDQ0IKKzoxMDlFRTAwMEE4Q0QzRUIyMDAwMEFBMEYwMDAwMDBEODAyNDAwMEYyNDgKKzoxMDlFRjAwMDAwRjA0MzBEMUQ0MDAyMDBBODBENjhCMTAwMDAzNjEwQUYKKzoxMDlGMDAwMDFFNDAwMjg0MDYwMDAwQjIwMDAwNDEwRDEyMDAwMDI4MkQKKzoxMDlGMTAwMDAyMDU4MEIwMDgwMDNEMEQwMDAwMDBGODIzNDAwMTk5QzMKKzoxMDlGMjAwMDAwMDAzRDBEMTIwMTAwNjgwMjA1ODBCMDAwMDAzNjEwRUYKKzoxMDlGMzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNDMwREI1MDAwMDgwOEEKKzoxMDlGNDAwMDAyMDAwMEIwMDAwMDAwMDBBNTAwODBBMDM2MEI2QTM1QkEKKzoxMDlGNTAwMDAwMDAwMDAwMDAwMDAwNTAwOUMwMjkzMjAwMDAwMDAwOEQKKzoxMDlGNjAwMDAwNTYwMTI4MDhDMDZFMzIwMDAwMDAwMDAwMDAwMDc4OTIKKzoxMDlGNzAwMDM5MEIyRTMyMDAwMDAwMDAwMDAwMDAyMEYzODE5NzM0REUKKzoxMDlGODAwMDAwMDA0QzBEMDQwMDAwNzhEOTAxMzBCNjAwMDAwMDAwM0MKKzoxMDlGOTAwMDAwMDAwMDAwQjkwNTMwMzAxODAwMDAwMDAwMDAwMEY4OTMKKzoxMDlGQTAwMDAzQTQwMzM5MDAwMDAwMDAwMDAwMDAzNDMzMEIyRjMyRkIKKzoxMDlGQjAwMDAwMDA1OTBEMDQwMDAwNzhEOTAxMzBCNjAwMDAwMDAwRkYKKzoxMDlGQzAwMDAwMDAwMDc4QjkwNTMwMzAwMDAwNTIwRDA0MDAwMDgwMTgKKzoxMDlGRDAwMDQyRTUyOUJDMDAwMDAwMDAwMDAwMDBGODAyMDAwMDMyNDkKKzoxMDlGRTAwMDE4MDAwMDAwMDAwMDAwRjg3MzhBMDIzOTAwMDAwMDAwMjkKKzoxMDlGRjAwMDAwMDAwMDlDMDI4MDk3MzIwMDAwNTgwRDI1MDEwMDA4RTcKKzoxMEEwMDAwMDA4MDAwMEIyMDAwMDU2MEQxMjAwMDAyODAyMDU4MEIwQzIKKzoxMEEwMTAwMDA4MDA1ODBEMDAwMDAwRjgyMzQwMDE5OTAwMDA1ODBENzkKKzoxMEEwMjAwMDEyMDEwMDY4MDIwNTgwQjAwMDAwMzYxMDAwMDAwMDgwQjgKKzoxMEEwMzAwMDAyMDAwMDkwMDAwMDRDMEQwMDAwMDBGNDAyMDAwMDkyQUQKKzoxMEEwNDAwMDAwMDA1RDBEMDQwMDAwODA0MkU1MjlCQzAwMDAwMDAwMTYKKzoxMEEwNTAwMDAwMDAwMEY4MDIwMDAwMzIxODAwMDAwMDAwMDAwMEY4QzQKKzoxMEEwNjAwMDczOEEwMjM5MDAwMDAwMDAwMDAwMDA5QzAyMDA5NTMyNTMKKzoxMEEwNzAwMDAwMDAwMDAwQ0EwMTAwRDgwMjgwMDEzMjAwMDAwMDAwODgKKzoxMEEwODAwMDAwMzAwMDAwMDdDMDJDMzIwMDEwMDBBMDAwMzgwMDAwOTMKKzoxMEEwOTAwMDA3MDAzNzMyMDAwMDAwMDAwMDIwMDAwMDA3MDBFRTMyMDkKKzoxMEEwQTAwMDAwMDAwMDAwMDAzODAwMEMwNzgwODIzMjAwMDA2MjBEQzIKKzoxMEEwQjAwMDEyMDAwMDQ4MDJDMDgwQjIwMDAwMzIwMzAwMDAwMDA4MTUKKzoxMEEwQzAwMEU4MDEwMDk0MDAwMDdBMEQwMjAwMDA4MEEyNDI4MEJDRUEKKzoxMEEwRDAwMDAwMDA3QTBEODAwMDAwODBGMkMxODVCNjAwMDA3QTBEODQKKzoxMEEwRTAwMDFGNDAwMjA4QjlCRjY4QjAwMDAwNkMwRDgwNDEwMjgwQkIKKzoxMEEwRjAwMEUyODE2OEI2MDgwMDAwMDAwMDAwMDAxMDc5NjE4MDM5MzQKKzoxMEExMDAwMDAwMDAwMDAwRDIyMTAxRTAxNjIwNkUzQTE4MDAwMDAwODUKKzoxMEExMTAwMDAwNDAwMjg4RTYyMTkxMzkwMDAwMDAwMDAwMDEwMDVDNDcKKzoxMEExMjAwMDA4MDAwMDcyMDAwMDAwMDAwMDAwMDAwQzE5QTA5MDNBMjYKKzoxMEExMzAwMDAwMDA3QTBEMDYwMTAwODBEMkZGOTBCQzAwMDA3MDBENzcKKzoxMEExNDAwMDJDNDEwMjc4Rjk4MTY4QjQwMDAwMDAwMDAwMDAwMDc4MUEKKzoxMEExNTAwMEI5ODE5NzM0MDMwMDAwMDAwMDQwMDIwMDI5MUFGRjM4M0IKKzoxMEExNjAwMDAwMDAwMDAwMDAzODAyMDBCOTFCOTAzQTAwMDAwMDAwMTcKKzoxMEExNzAwMEQyNDEwMjg4MTZBMDk3M0EwMDAwMDAwMDQ1MDAwMEQ4OUUKKzoxMEExODAwMDAyNDAwMDMyMDAwMDM2MTA5RjIwMDFFMDE2MjA2RUJBMTcKKzoxMEExOTAwMDAwMDAwMDAwMDAwMDAwMDAwNzQwODAzMjAwMDAwMDAwQzYKKzoxMEExQTAwMDAwMDgwMDAwMjcyNDkwM0EwMDAwMDAwMDAwMTAwMDAwODIKKzoxMEExQjAwMDA3MDA4QTMyMDAwMDAwMDAxMjAxMDA1OEYyQzEzODc0MTIKKzoxMEExQzAwMDAwMDA3ODBEMDAwMDAwODAwMjAwMDA5MDA4MDA4NDBENUYKKzoxMEExRDAwMDFBMDAwMDM0Nzk2MTgwQjkwMDAwOEYwRDFFMDEwMDgwRTMKKzoxMEExRTAwMDAyMDAwMEIwMDAwMDhGMEQxRjQwMDIwMDA5NDA2OEIyNUQKKzoxMEExRjAwMDAwMDA3QzBEODAwMDAwODBFMjAxOTBCNjAwMDAzNjEwNjcKKzoxMEEyMDAwMDM4MDAwMDU0MUY0MEY1QkEwMDAwMDAwMDAwMDAwMDA4QUMKKzoxMEEyMTAwMEI5M0Y5MDMwMDAwMDAwMDAwMDI4MDFFMDI2MjQ2RTNBOEIKKzoxMEEyMjAwMDA4MDAzNjEwMUUwMDAwMDAwOUE0RkVCODAwMDA4RjBEQzMKKzoxMEEyMzAwMDEyMDEwMDY4MDIwNTkwQjAwMDAwMzYxMDAwMDAwMDgwOTYKKzoxMEEyNDAwMDAyMDAwMDkwMDAwMDhGMEQ4MDAwMDA4MDgyODEyRkI2RjgKKzoxMEEyNTAwMDAwMDA4RDBEMUY0MTAyMDAwOTQwNjhCMjAwMDAwMDAwOUYKKzoxMEEyNjAwMDAwMjgwMUUwMTYyMDZFM0EwMDAwOEEwRDgwMDEwMDgwNkYKKzoxMEEyNzAwMEYyQzE4NUI2MDAwMDAwMDAwMDQwMDI4NEU2MDEwMDM0MEYKKzoxMEEyODAwMDAwMDAwMDAwMDAwMDAwODAwMjAwMDAzMDAwMDAwMDAwMUMKKzoxMEEyOTAwMDAwNDAwMjgwMDI0MDY4MzIwMDAwMzYxMDM4MDAwMDU0NEUKKzoxMEEyQTAwMDFGNDBGNUJBMDAwMDAwMDAwMDIxMDFFMDE2MjA2RTdBODAKKzoxMEEyQjAwMDAwMDA4NTBEODAwMDAwODBFMjAxOTBCNjAwMDA3RTBENTgKKzoxMEEyQzAwMDAwMDAwMDU0MUY0MEY1OUEwMDAwMDAwMDAwMDAwMDVDRjAKKzoxMEEyRDAwMDA4MDAwMDMyMDAwMDAwMDBEMjIxMDFFMDE2MjA2RTNBOTIKKzoxMEEyRTAwMDE4MDAwMDAwMUU0MTAyODRFNjYxOTM3OTAwMDAzNjEwRDgKKzoxMEEyRjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRkZGRjAwMDAwMDgwQ0UKKzoxMEEzMDAwMDAyMDAwMDkwMDAwMDk3MEQxRDVEMDFFQzE2QzA2RUJDQjAKKzoxMEEzMTAwMDAwMDAwMDAwMEYwMTAwODAwMjAwMDA3MDAwMDAwMDAwM0IKKzoxMEEzMjAwMDAwMDEwMEY4QjI4MDJGNzQwMDAwMDAwMDBGMDEwMDgwQ0YKKzoxMEEzMzAwMDAyMDAwMDcwMDAwMDk2MEQwNDVFMDFFQzE2QzA2RUJDQjkKKzoxMEEzNDAwMDAwMDAwMDAwMDA1QzAxRUMwNjQwMDAzMjAwMDAwMDAwNEMKKzoxMEEzNTAwMDAwMDEwMDgwMDIwMDAwNzAwMDAwRkZGRjAwMDAwMDgwOEMKKzoxMEEzNjAwMDAyMDAwMDkwMDAwMDAwMDAwNDIwMDE4MDgyREI5MDdDNEQKKzoxMEEzNzAwMDAwMDAwMDAwMDIwQzAyODBBMkRCOTA3QzAwMDBBMDBEMTcKKzoxMEEzODAwMDA2MjEwMTgwODIxQjkwQkMyNzAwQTEwRDAwMDAwMDAwNjcKKzoxMEEzOTAwMDA5MDAzNjkyMjgwMDAwMDAwMDAwMDAwMDA5MDAzNjMyNTMKKzoxMEEzQTAwMDAwMDAwMDAwMDAwMDAwODgxMjAwMkMzQTAwMDBGRkZGQUYKKzoxMEEzQjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDJGQTAwMTc4NDMKKzoxMEEzQzAwMDg5MUI5MjdBMDAwMDAwMDAwNjg4MDE3ODg5OUI5NzdDOUYKKzoxMEEzRDAwMDAwMDAwMDAwMDAzNDAyMDQwOUMwNkUzRDAwMDAwMDAwQ0YKKzoxMEEzRTAwMDAwMEMwMjAwMTlBNDZFMzcwMDAwQUIwRDAyMDAwMDgwQzMKKzoxMEEzRjAwMDAyQTQ5N0JDMDAwMEFCMEQwMjAwMDA4MDAyMDAwMEIwNzgKKzoxMEE0MDAwMDAxMDAwMDAwMDAwMDAwNzg4OThEOTczNzAwMDAwMDAwRUYKKzoxMEE0MTAwMDAyMDEwMjgwODI5Qjk3N0MwMDAwMDAwMDAwMDEwMEY4OEUKKzoxMEE0MjAwMEYyODAyRjc0MDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMDcKKzoxMEE0MzAwMDAwMDAwMDAwREE1QjAxRUMwNjQwRUQzMjAwMDBCMTBERDcKKzoxMEE0NDAwMDA0MDEwMDgwMDI0MDg2QkMwMDAwMDAwMDAwQTAwMUUwODIKKzoxMEE0NTAwMDE2MjA2RTNBMDAwMEIzMEQwMEQ0MDFFQzA2MDAwMDkyMDUKKzoxMEE0NjAwMDAwMDBENzBGMDA5MDAxMDgwOTAwNkVGMjAwMDAwMDAwMDQKKzoxMEE0NzAwMDAwQTAwMUUwMTYyMDZFM0EwMDAwMDcxMDMzMDEwMEY4M0EKKzoxMEE0ODAwMDgyODAyRkI0MDAwMDA3MTA5RkYwMDE4MDgyREI4N0JDMjAKKzoxMEE0OTAwMDAwMDAwNzEwOUZGODAxODAyMjIxNkVCQzAwMDAwMDAwMjAKKzoxMEE0QTAwMDAwRTgwMUUwMDYwMEVFMzIwMDAwMDAwMDAwRjAwMUUwRUMKKzoxMEE0QjAwMDA2QzA4NzMyMDAwMDA3MTAwMDAwMDA4MDAyMDAwMDkwRjQKKzoxMEE0QzAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDBDNTBEQUEKKzoxMEE0RDAwMDA0MjEwMTMwNjkyNDZFQkMwMDAwQkYwRDFGNDAwMjI0MUUKKzoxMEE0RTAwMDA5NDA2OEIyMDAwMEJCMEQ4MDAwMDA4MEUyNDE5MkI2RDYKKzoxMEE0RjAwMDA4MDBCQjBEMTIwMTAwNjg5MkE0RkVCODAwMDAzNjEwREYKKzoxMEE1MDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwQTgwMUUwQjAKKzoxMEE1MTAwMDY2MjQ2RTNBMDAwMEMyMEQzODIwMDFFMDA2MDA5M0IyQjYKKzoxMEE1MjAwMDAwMDBDMzBEMDAyODAxRTAwNjAwMDA5MjAwMDAwMDAwQkEKKzoxMEE1MzAwMDAwMzAwMUUwMDYwMDAwMzIwMDAwMDAwMDAwNTAwMUU4OTkKKzoxMEE1NDAwMDA2MDAwMDMyMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwRTAKKzoxMEE1NTAwMDAwMDBDQTBEMzg1MTAxMDBBOTlCOTFCQTAwMDBDODBEMzYKKzoxMEE1NjAwMDA0NDEwMjA4QjlGRjY4QjAwMDAwQzYwRDAwNDAwMjgwMzcKKzoxMEE1NzAwMDAyNDA2ODkyMDAwMEQ1MEQ5RjMxMDFFMDY2MjQ2RUJDNTgKKzoxMEE1ODAwMDAwMDBENTBEMDAzMDAxRTAwNjAwMDA5MjAwMDBEMzBENjAKKzoxMEE1OTAwMDA0MjgwMTA0MDkwMDZFQjIwMDAwRDEwRDlGMDEwMDAwRTMKKzoxMEE1QTAwMDE5MjQ5MEJDMDAwMDAwMDAwMEE4MDFFMDY2MjQ2RTNBNjcKKzoxMEE1QjAwMDAwMDAwMDAwMDAyODAxRTAwNjI0MDAzQzAwMDAwMDAwMkMKKzoxMEE1QzAwMDAwNTAwMUU4MDYwMDAwMzIwMDAwMzYxMDlGMjAwMUUwMzQKKzoxMEE1RDAwMDA2MDA5M0IyMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwM0QKKzoxMEE1RTAwMDAwMDAwMDAwMDAyODAxRTAwNjAwMDAzMjAwMDBEQjBENDIKKzoxMEE1RjAwMDA0MDAwMDgwMDIwMDkwQkMwMDAwRDUwRDA0NDEwMjA4NTgKKzoxMEE2MDAwMEI5RkY2OEIwMDAwMEQzMEQwMDQwMDI4MDAyNDA2ODkyOUMKKzoxMEE2MTAwMDAwMDBEOTBEMDIwMDAwODAyMjI0OTBCQzAwMDBEQjBENTgKKzoxMEE2MjAwMDgwNDAwMjgwRjJDMTY4QjYwMDAwMDAwMDAwNDAwMjhDNDkKKzoxMEE2MzAwMEI2QzE2ODM1MDAwMERCMEQwMDAwMDBGODIyODEyRjk0QzAKKzoxMEE2NDAwMDA4MDAzNjEwMTI0MDAyNjgxMjlBRkVCODAwMDBEMzBEQkUKKzoxMEE2NTAwMDA0MDEwMDAwMjkyNDkwQkMwMDAwMDAwMDAwQTgwMUUwRDMKKzoxMEE2NjAwMDY2MjQ2RTNBMDAwMDAwMDAwMDUwMDFFODA2MDA5MDMyQjcKKzoxMEE2NzAwMDAwMDAzNjEwOUYyMDAxRTAwNjAwOTNCMjAwMDAwMDAwQTkKKzoxMEE2ODAwMDAwMDEwMDgwMDIwMDAwNzAwMDAwRkZGRjAwMDAwMDgwNTkKKzoxMEE2OTAwMDAyMDAwMDkwMTgwMEUyMEQxRjQxMDI3ODg4Q0Q2OEI2RDQKKzoxMEE2QTAwMDAwMDAwMDAwMDAwMDAwODgxMjAwMkMzQTAwMDBFNDBEQjkKKzoxMEE2QjAwMDgwMDEwMDgwNjI4MDg3QjYwMDAwRTAwRDAwNDAwMjgwQ0IKKzoxMEE2QzAwMDAyNDA2ODkyMDMwMDM2MTAwNDQwMDIwMDM4MUFGRkI4QjYKKzoxMEE2RDAwMDAwMDAzNjEwMUY0MDAyMDRCOEZGNjhCMDAwMDAwMDAwMDAKKzoxMEE2RTAwMDAwMzkwMjAwQjgxQjgwN0EwMDAwRkZGRjAwMDAwMDgwRTQKKzoxMEE2RjAwMDAyMDAwMDkwMDAwMEVGMEQ4MDAxMDA4MEEyODAyRkI2QzQKKzoxMEE3MDAwMDAwMDBFQzBEMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwNTMKKzoxMEE3MTAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4RjAKKzoxMEE3MjAwMDAyNDA4NDMyMUQwMEVGMEQwNDAxMDA4MDAyQTQxN0I4MUUKKzoxMEE3MzAwMDAwMDBFOTBEOUYwMTAwODAxODAwODhCQzAwMDAzNjEwNjEKKzoxMEE3NDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwNjAwMDZDMkIKKzoxMEE3NTAwMDA4MDA2RTMyMDAwMDAwMDBDQTY4MDA0QzA4MDA2RTMyMkIKKzoxMEE3NjAwMDAwMDAzNjEwMDQ3MDAwMTgwODAwNkVCMjAwMDAwMDAwRUYKKzoxMEE3NzAwMDA0MDAwMDgwQTJBMDgxN0MwMDAwRjYwRDgwMDEwMDgwMTIKKzoxMEE3ODAwMEUyODAyRkI2MDAwMEY2MEQxQjAwMDA4MDAyMDAwMEIwMzIKKzoxMEE3OTAwMDAwMDAwMDAwMDYwMDAwODA2MkUwODM3QzAwMDAwMDAwRjIKKzoxMEE3QTAwMENBMDEwMEY4MDI4MDJGMzUwMEEwMDAwMDEyMDEwMDQwMEQKKzoxMEE3QjAwMEEyOEQzOTcyMDAwMEY3MEQwMDAwMDA4MDAyMDAwMDkwQTkKKzoxMEE3QzAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwNzkKKzoxMEE3RDAwMDAwMDgwMUU0MDZDMDJEMzJFRUZGMDAwMDAwMTAwMUUwODkKKzoxMEE3RTAwMDg2OEQyRjMxMDAwMDAwMDAwMDAwMDAxQ0IzRTQzOTMyRDgKKzoxMEE3RjAwMDAwMDAwMDBFMDQwMDAwNzhEOTAxMzBCNjAwMDAwMDAwMEYKKzoxMEE4MDAwMDAwMDAwMDc4QjkwNTMwMzAxODAwMDAwMDAwMDAwMEY4QTIKKzoxMEE4MTAwMEUzQTUwMzM5MDAwMDAwMDAwMDAwMDAzNDMzMEIyRjMyQTEKKzoxMEE4MjAwMDAwMDAwMDAwMDQwMDAwNzhEOTAxMzA3NjAwMDAwMDAwMkMKKzoxMEE4MzAwMDAwMDAwMDc4QjkwNTMwMzAxODAwMDAwMDAwMDEwMEY4NzEKKzoxMEE4NDAwMEUzQTUwMzc5MDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwRjQKKzoxMEE4NTAwMDAwMDAwMDAwMDAwMDAwQ0MwMjAwMDAzMjAwMDAwODBFRTIKKzoxMEE4NjAwMDIwMDAwMTJDMDlDMDZFQjIwMDAwMDkwRTAwMTY4NkNDMzMKKzoxMEE4NzAwMDA2QzA5MjkyMDAwMDAwMDAwMDE0ODZDQzA2QzA5MjMyRkUKKzoxMEE4ODAwMDAwMDAwMDAwMTIwMTAwNDA2MjhFOTI1MjAwMDAwOTBFOEEKKzoxMEE4OTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRkZGRjAwMDAwMDgwMjgKKzoxMEE4QTAwMDAyMDAwMDkwMDAwMDBFMEUwNDAwMDA3OEQ5MDEzMEI2QkUKKzoxMEE4QjAwMDBFMEUzNjAwMDAwMDAwQzAwMjAwMzY5MjAwMDAwMDAwQkMKKzoxMEE4QzAwMDAwMDAwMDE0MDMwMDM4MzIwMDAwMDAwMDAwMDAwMEUwMjcKKzoxMEE4RDAwMDAyMDAzMDMyMDAwMDRFMEUwNDAwMDAyNEQ4MDEzMEI2RDEKKzoxMEE4RTAwMDEyMEUwMDAwMDAwMDAwODg4MjREODIzQTAwMDAzNjEwRUYKKzoxMEE4RjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMzYxMDAwMDAwMDgwODAKKzoxMEE5MDAwMDAyMDAwMDkwMDAwMDM2MTAwMDAwMDA4MDAyMDAwMDkwNUQKKzoxMEE5MTAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDBFMEUzNjAwOEQKKzoxMEE5MjAwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMzgwRTAwMDAwMDgwRDcKKzoxMEE5MzAwMDAyMDAwMDkwMDAwMDFBMEUwMDAwMDAyMDQ4MDUzMDkwMzAKKzoxMEE5NDAwMDAwMDAzNjEwMDAwMDAwODAwMjAwMDA5MDAwMDAyNjBFN0IKKzoxMEE5NTAwMDkyMTEwMUJDMDgwMDZFQjIwMDAwMDAwMDAwMDgwMURDOEEKKzoxMEE5NjAwMDAyNDA2RTMyMDAwMDFFMEUxRjExMDFFMDI2QzE4QkI1QTEKKzoxMEE5NzAwMDAwMDAyNjBFMUQwMDAwODAwMjAwMDBCMDAwMDAwMDAwNTQKKzoxMEE5ODAwMDAwMDAwMEQ4MDIwMDAwMzI4MDAyMDAwMDAwMDAwMDAwMzkKKzoxMEE5OTAwMDA3MDAzNjMyMDAwMDAwMDAwMDAwMDA3OEE5MDAyRDM3QzMKKzoxMEE5QTAwMDIwNDUwMDAwMDAwODAwMDA4NzhEOTczQTBBMDAwMDAwNEIKKzoxMEE5QjAwMDAwMDAwMDc4ODkwRDgyMzcwMDAwMDAwMDAwMTAwMDAwQzAKKzoxMEE5QzAwMEE3QkE5NzNBMDAwMDAwMDAwMDE4MDAwMDA3QzBFQTMyNUEKKzoxMEE5RDAwMDAwMDAyNTBFMTIwMDAwNDgwMkMwMzhCMjAwMDAyQTBFMDYKKzoxMEE5RTAwMDgwMEUwMUJDMDhDMDZFQjIwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMEE5RjAwMDE5MEU4MjMyMDBFMDMyMEUxMjAxMDA0OEEyMEQ5MEIyMTAKKzoxMEFBMDAwMDAwMDAyODBFMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwRkUKKzoxMEFBMTAwMDAwMDAwMEQ4MDI0MDAwMzJCNDAwMDAwMDAwMDAwMDAwMzYKKzoxMEFBMjAwMDA3MDAzNjMyMDAwMDAwMDAwMDAwMDA3OEE5MDAyRDM3MzIKKzoxMEFBMzAwMDAwNDQwMDAwMDAwODAwMDA4NzhEOTczQTAwMDAwMDAwRTUKKzoxMEFBNDAwMDAwMDAwMDc4OTkwMDgyMzcwMDAwMzYxMDAyMTAwMDAwRTQKKzoxMEFBNTAwMDg3QkY5N0JBMDAwMDAwMDAwMDE4MDAwMDA3NDBGRTMyRDAKKzoxMEFBNjAwMDAwMDAzMTBFMTIwMDAwNDhGMkMxMzhCNDE4MDAzNjAwNjAKKzoxMEFBNzAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMDA0NjEKKzoxMEFBODAwMDg5NjAzODMyMDAwMDAwMDAwMDAwMDAxOEYzNDE5MDM0NjMKKzoxMEFBOTAwMDAwMDAzODBFMDQwMDAwNzhEOTAxMzBCNjAwMDAwMDAwMzQKKzoxMEFBQTAwMDAwMDAwMDAwQjkwNTMwMzAxODAwMDAwMDAwMDAwMEY4NzgKKzoxMEFBQjAwMDAzQTQwMzM5MDAwMDAwMDAwMDAwMDAwMDE5Q0UyQzMyNkUKKzoxMEFBQzAwMDAwNjAzOTBFMTIwMDAwNDBBMjBEOTBCMjAwMDAwMDAwOUMKKzoxMEFBRDAwMDAwMDAwMEQ4MDIwMDAwMzI2MDAwMDAwMDAwMDAwMDAwMEEKKzoxMEFBRTAwMDA3MDAzNjMyMDAwMDAwMDAwMDAwMDBCQ0E4MDAyRDM3MkYKKzoxMEFBRjAwMEEwNDcwMDAwMDAwODAwMDA4N0NEOEIzQTBBMDAwMDAwNDQKKzoxMEFCMDAwMDAwMDAwMDc4ODlDRDJDMzc4MDAyMDAwMDAwMDAwMDc4MUEKKzoxMEFCMTAwMDg5OEQ5NzNBMDAwMDAwMDAwMDEwMDAwMEE3QkE5NzNBMEMKKzoxMEFCMjAwMDAwMDAwMDAwMDAxODAwMDAwN0MwRUEzMjAwMDA0MjBFREEKKzoxMEFCMzAwMDEyMDAwMDQwRjJDMTM4QjQxODAwMzYwMDAwMDAwMEY4REUKKzoxMEFCNDAwMDczMEEwM0Y5MDAwMDAwMDAwMDA4MDFEQzAyNDA2RTMyQzUKKzoxMEFCNTAwMDBBMDA0NzBFMUYwMTAwNzg4OUNEMkNCNzAwMDAwMDAwQzUKKzoxMEFCNjAwMDFEMTAwMUY4MDIwMDZFNzI4MDAyMDAwMDAwMDAwMDAwNUIKKzoxMEFCNzAwMDA3MDAzNjMyMjA0NTAwMDAwMDA4MDAwMDg3Q0Q4QjNBRTAKKzoxMEFCODAwMDAwMDAwMDAwMDAxMDAwMDBBN0JBOTczQTAwMDAwMDAwODMKKzoxMEFCOTAwMDAwMTgwMDAwMDdDMEVBMzIwMDAwNEIwRTEyMDAwMDQwMEYKKzoxMEFCQTAwMEYyQzEzOEI0MTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5NDcKKzoxMEFCQjAwMDAwMDAwMDAwMDAxMTAxRjgwMjAwNkU3MjAwMDAwMDAwQTkKKzoxMEFCQzAwMDAwMTAwMUY4MDIwMDZFMzIwMDAwMDAwMDAwMDkwMURDRjQKKzoxMEFCRDAwMDAyNDA2RTcyMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNDMKKzoxMEFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwOTAwMDAzMjBFMDAwMDAwMUMKKzoxMEFCRjAwMDAwMDAwMDA0ODk0RDBEMzYwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEFDMDAwMDA3ODAwQjMyMDAwMDAwMDAwMDA4MDAwMDA3MDA5MDMyQUYKKzoxMEFDMTAwMDAwMDAwMDAwMDAxMDAwMDAwNzAwMzYzMjAwMDA1NjBFNTEKKzoxMEFDMjAwMDEyMDAwMDRDRjJDMTM4QjQwMDAwMDAwMDAwMDAwMDgwQTcKKzoxMEFDMzAwMDAyMDAwMDMwMDAwMDU3MEUxMjAwMDA4MDAyQzAyMUIyNTYKKzoxMEFDNDAwMDAwMDAwMDAwMDAwMDAwMDBFOTAyOTAzQTAwMDA1MzBFRUUKKzoxMEFDNTAwMDA0MDEwMDA0MTk0MDkwQkMwMDAwMDAwMDAwMDEwMDgwQzUKKzoxMEFDNjAwMDAyMDAwMDUwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwODIKKzoxMEFDNzAwMDAwMDA2NTBFODAwMTAwODBBMjgwMkZCNjAwMDA2MDBFRUIKKzoxMEFDODAwMDEyMDEwMEU4MDJDMDIxQjIxODAwMzYwMDAwMDAwMEY4RUUKKzoxMEFDOTAwMDczMEEwM0Y5MDAwMDY0MEUwNDAwMDA4MDAyODAyREJDREEKKzoxMEFDQTAwMDAwMDAzNjEwOUYwMDAwODAxODAwODhCQzAwMDA2MDBFNzUKKzoxMEFDQjAwMDEyMDEwMEU4MDJDMDIxQjIwMDAwNUYwRTAwMDAwMDgwMTcKKzoxMEFDQzAwMDAyMDAwMDkwMDAwMDAwMDBDQTAwMDBEODAyNDA4NDMyNTgKKzoxMEFDRDAwMDAwMDAwMDAwMDA0MDAwNkM4ODFDODMzQTAwMDAwMDAwNjcKKzoxMEFDRTAwMDAwNDgwMDRDMDgwMDcyMzIwMDAwMzYxMDA4NTAwMDE4NkUKKzoxMEFDRjAwMEM4MjA3MkJDMDAwMDAwMDAwNDAwMDA4MDAyNDA4MTdDN0IKKzoxMEFEMDAwMDAwMDAwMDAwMDAwMDAwMTQxODQwODEzQzAwMDAzNjEwRDQKKzoxMEFEMTAwMDAyMDAwMDIwODgwMTgyQkEwMDAwMDAwMDAwMDAwMEQ4NzQKKzoxMEFEMjAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDAwMDA3MDAwNjMyQjAKKzoxMEFEMzAwMDA3MDAwMDAwMDAwODAwMDA3NzRBMDkzOTAwMDAwMDAwMDEKKzoxMEFENDAwMDAwMTAwMDAwMDcwMDgyMzIwMDAwMDAwMENBMTkwMDAwNTUKKzoxMEFENTAwMDA3NDA4MjMyMDAwMDcwMEUxMjAwMDA0MEYyQzEzOEI0ODkKKzoxMEFENjAwMDAwMDAwMDAwMDAwMTAwRDgwMjQwODQ3MjAwMDBGRkZGRDQKKzoxMEFENzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDREMDAwMDAwNzQKKzoxMEFEODAwMDY3RTA4MzNFMDAwMDAwMDAwMDA4MDAwMDA3MDA4MDMyRkEKKzoxMEFEOTAwMDAwMDAwMDAwMDAxMDAwMDAwN0MwODYzMjAwMDAwMDAwMjQKKzoxMEFEQTAwMDAwMTgwMDAwMDdDMDg0MzIwMDAwQjcwRTA0MDAwMDI4MUQKKzoxMEFEQjAwMEQ4QTA4MkJDMDAwMDAwMDAwMDAwMDAxOEQ4QTA4MTNDOTAKKzoxMEFEQzAwMDAwMDA4OTBFMDQwMDAwM0NEOEUwODNCQzAwMDA3RDBFMkEKKzoxMEFERDAwMDA0MDAwMDgwNzI4MDJEQkMwMDAwN0IwRTEyMDAwMDUwMjkKKzoxMEFERTAwMDAyQzAzOEIyMDAwMDgzMEU1MTAwMDBEODEyODAyRDlBQTQKKzoxMEFERjAwMDAwMDA3RDBFMTIwMDAwNTBGMkMxMzhCNDE4MDAzNjAwNzkKKzoxMEFFMDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwODIwRTA0MDAwMDgwQkQKKzoxMEFFMTAwMDcyODAyREJDMDAwMDdFMEU2NzAwMDBGOEEyODAyRkI1NjYKKzoxMEFFMjAwMDAwMDAzNjEwMTIwMDAwRTgwMkMwMjFCMjAwMDAwMDAwNEQKKzoxMEFFMzAwMDUxMDAwMEQ4MDIwMDAwMzIwMDAwODcwRTJBMDEwMDAwRjUKKzoxMEFFNDAwMEQ4MjA4MEJBMDAwMDg3MEUxMjAxMDAwMDA5QzAyMUIyOEMKKzoxMEFFNTAwMDE4MDAzNjAwMDAwMDAwRjg3MzBBMDNGOTAwMDAwMDAwMzMKKzoxMEFFNjAwMDAwMDAwMEQ4MDI0MDg0MzIwMDAwRjAwRDAwNjAwMDZDNDkKKzoxMEFFNzAwMDA4MDA2RUYyMDAwMDc0MEU0RDAwMDAwMDY3RTA4MzlFMzMKKzoxMEFFODAwMDAwMDA4OTBFMTIwMDAwNTBGMkMxMzhCNDE4MDAzNjAwREMKKzoxMEFFOTAwMDAwMDAwMEY4NzMwQTAzRjkxRDAwOEUwRTA0MDAwMDgwMDQKKzoxMEFFQTAwMDAyQTQxN0I4MDAwMDhBMEU2NzAwMDBGOEEyODAyRkI1MzAKKzoxMEFFQjAwMDAwMDAzNjEwMTIwMDAwMDAwOUMwMjFCMjA4MDAzNjEwNTAKKzoxMEFFQzAwMDEyNDAwMjY4MTI5QUZFQjgwMDAwREMwRTAwMDAwMDMwNEEKKzoxMEFFRDAwMDAzMDAzOEYyMDAwMDlGMEUxRjAwMDA2Q0Q4RTA4NkJBMTUKKzoxMEFFRTAwMDAwMDBFMDBENTEwMDAwRDgwMjAwMDBGMjAwMDA5NDBFQjYKKzoxMEFFRjAwMDAwMDAwMDNDMDg0MDgwOTIwMDAwOUYwRTAwMDAwMDgwOEYKKzoxMEFGMDAwMDAyMDAwMDkwMDAwMDk4MEU4MDAxMDA4MEYyODEyRkI2QjAKKzoxMEFGMTAwMDAwMDA5ODBFODAwMDAwODBFMjgwMkZCNjAwMDA5ODBFOUUKKzoxMEFGMjAwMDgwMDEwMDgwMzI4MDg3QjYwMDAwMDAwMDAwMDAwMEY4MzkKKzoxMEFGMzAwMEUyODAyRjM0MDAwMDczMEUwNDAxMDA4MDAyODA4MUJDODcKKzoxMEFGNDAwMDAwMDA5RDBFODAwMTAwODBBMjgwMkZCNjAwMDA5RDBFQTMKKzoxMEFGNTAwMDEyMDEwMDAwMDlDMDIxQjIxODAwMzYwMDAwMDAwMEY4RkMKKzoxMEFGNjAwMDczMEEwM0Y5MDAwMDAwMDAwMDAwMDBEODAyNDA4NDMyOTgKKzoxMEFGNzAwMDAwMDBGMDBEMDA2MDAwNkMwODAwNkVGMjAwMDA3NDBFMUUKKzoxMEFGODAwMDREMDAwMDAwNjdFMDgzOUUwMDAwQTMwRTgwMDEwMDgwNUEKKzoxMEFGOTAwMEUyODAyRkI2MDAwMEJBMEU4MDAxMDA4MEEyODAyRkI2OUEKKzoxMEFGQTAwMDE4MDAwMDAwQ0EwMDAwRjg3MzBBMDMzOUJBMEUzNjAwMTAKKzoxMEFGQjAwMDAwMDAwMEMwMDIwMDM2OTIwMDAwMDAwMDAwMDAwMEE0NjMKKzoxMEFGQzAwMEE4NjA4QTNDMDAwMEE2MEUyRkE4MDEyMDk5MjI2RUJBMjQKKzoxMEFGRDAwMDAwMDBBMzBEMDAwMDAwODAwMjAwMDBGMDAwMDAwMDAwNEYKKzoxMEFGRTAwMDAwQTgwMUUwMDYwMDkyMzIwMDAwMDAwMDAwNTAwMUU4RDUKKzoxMEFGRjAwMDA2MDAwMDMyMDAwMEFBMEUyMzIxMDFFMDA2MDAwMEIyODQKKzoxMEIwMDAwMDNFMDBBOTBFMTIwMDAwMkM4MkNEMkVCMjAwMDAzNjEwOTgKKzoxMEIwMTAwMDA0MzAwMEUwMDY4MDgyQjIwMDAwQjIwRTA0MjEwMEUwOUQKKzoxMEIwMjAwMDA2ODA4MUIyMDAwMEIwMEU4MDAxMDA4MEEyODAyRkI2QTEKKzoxMEIwMzAwMDAwMDBCMDBFMTIwMTAwMDAwOUMwMjFCMjE4MDAzNjAwNTUKKzoxMEIwNDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwMDAwMDAwMDAwMEQ4QjcKKzoxMEIwNTAwMDAyNDA4NDMyMDAwMEYwMEQwMDYwMDA2QzA4MDA2RUYyQzcKKzoxMEIwNjAwMDAwMDAwMDAwMDAyMDAwRTAwNjgwODEzMjAwMDAzNjEwNjEKKzoxMEIwNzAwMDA0MTAwMEUwMDZDMDg2QjIwMDAwMDAwMDJBMTkwMEUwQkIKKzoxMEIwODAwMDA2QzA4NDcyMDAwMDAwMDAwMDAwMDBGOEEyODAyRjM1ODYKKzoxMEIwOTAwMDAwMDAwMDAwMTIwMTAwMDAwOUMwMjE3MjE4MDAzNjAwRjMKKzoxMEIwQTAwMDAwMDAwMEY4NzMwQTAzOTkwMDAwMDAwMDAwMDAwMDNDNTMKKzoxMEIwQjAwMEQ4RTA4MzNDMDAwMEI4MEUxMjAwMDA1MEYyQzEzOEI0NTIKKzoxMEIwQzAwMDAwMDAwMDAwMDAwMDAwRjhBMjgwMkYzNDAwMDAwMDAwMDMKKzoxMEIwRDAwMDAwMDAwMDg4MTIwMDJDM0EwMDAwRkZGRjAwMDAwMDgwRjIKKzoxMEIwRTAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDAwMDA5MDAwMDMyOTMKKzoxMEIwRjAwMDAwMDAwMDAwMDAwMDAwNzgwOTAwMDAzMjAwMDAwMDAwOUQKKzoxMEIxMDAwMDAwMDAwMEE4MDIwMDAwMzJFRTA1QzIwRTA0MDEwMDgwMUIKKzoxMEIxMTAwMDgyMERGNkJDMDAwNjAwMDAwMDAwMDAwODA5MDAzNjMyNkYKKzoxMEIxMjAwMDAwMDBDNDBFMDAwMDAwMDQwOUMwMDk5MjAwMjgwMDAwQkQKKzoxMEIxMzAwMDAwMDAwMDA4MDkwMDM2MzIwMDAwMDAwMDAwMDAwMDA0OTIKKzoxMEIxNDAwMDA5ODAwOTMyMUUwMDAwMDAwMDAwNjBDMDg3Q0QwMDM3NzIKKzoxMEIxNTAwMDAwMDAwMDAwMDAwODYwQzAwNzgwOTczMjAwMzAwMDAwNDcKKzoxMEIxNjAwMDAwMDAwMDc4ODk4RDJBM0EwMDAwMzYxMDEyMDAwMDVDMzkKKzoxMEIxNzAwMDUyODE5N0I0MDAwMDAwMDAwMDAwMDAwMDI5MjQ5MDNBOUEKKzoxMEIxODAwMDA4MDAwMDAwMDAwMDAwNzg4OTBEOTAzNjAwMDAwMDAwRTMKKzoxMEIxOTAwMDAwMDAwMDA0MTk0MDkwM0MwMDAwMDAwMDAwMDAwMEE4REUKKzoxMEIxQTAwMDUyODIyQTNBMDAwOEM0MEUwMjAxMDA4MDgyOEQyQUJDMTUKKzoxMEIxQjAwMDAwMDBENTBFMDYwMDAwODAwMjQwOTBCQzAwMDAzNjEwNTIKKzoxMEIxQzAwMDEyMDAwMEE4MDIwMDIwQjIxRTAwMDAwMDAwMDAwMEMwMTMKKzoxMEIxRDAwMDg3Q0QwMDM3MDAwMDAwMDAwMDA4MDBDMDA3ODA5NzMyQ0MKKzoxMEIxRTAwMDAwMDAzNjEwMTIwMDAwNUM1MjgxMkFCNDAwMDAwMDAwRkEKKzoxMEIxRjAwMDAwMDAwMDAwMjkyNDkwM0EwODAwMDAwMDAwMDAwMDc4QjgKKzoxMEIyMDAwMDg5MEQ5MDM2MDAwMENFMEUwNDAxMDAwNDE5NDA5MEJDNTgKKzoxMEIyMTAwMDA1MDAwMDAwMDAwMDAwNzg4OTBEOTAzNjAwMDAzNjEwMEYKKzoxMEIyMjAwMDEyMDAwMDY4MDI4MDk3QjIwMDAwMDAwMDAwMDAwMDAwRDkKKzoxMEIyMzAwMDI5MjQ5MDNBMDAwMDAwMDAwMDAwMDA3ODU5MDA5MDM2NjAKKzoxMEIyNDAwMDAwMDBENjBFOTUwMTAwODAyMjI0OTBCQTAwMDAwMDAwNzQKKzoxMEIyNTAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwRkZGRjAwMDAwMDgwOUQKKzoxMEIyNjAwMDAyMDAwMDkwMDAwMDAwMDAwNDAxMDA3OEQ5MDEzMDc2NEYKKzoxMEIyNzAwMDAwMDAwMDAwMDAwMDAwMjgwOUMwMjkzMjAwMDAwMDAwODIKKzoxMEIyODAwMDAwMDAwMDlDQjI0NTI4MzAwMDAwRTgwRTg2MDEwMDA4NEUKKzoxMEIyOTAwMDA5ODAyRkIyMDAwMDAwMDAwMDAwMDAyQzA5NDA4MTMyMUMKKzoxMEIyQTAwMDAwMDAwMDAwMDAwMDAwRjgwMjAwMDAzMjAwMDAwMDAwNzIKKzoxMEIyQjAwMDAwMDAwMEY0MDIwMDAwMzIxODAwMDAwMDAwMDAwMEY4NTYKKzoxMEIyQzAwMDczOEEwMjM5MDAwMDAwMDAwMDAwMDA5QzAyODA5MjMyNjQKKzoxMEIyRDAwMDAwMDBFNzBFMDQwNzAxODAwMkMwNkVCQzAwMDBFRDBFMDYKKzoxMEIyRTAwMEMzMDcwMUVDQjZFNDZFOUEwMDAwRUQwRTAwMDYwMUVDMTcKKzoxMEIyRjAwMEI2RTQ2RTlBMDAwMDAwMDAwMDAwMDAyQzA5MDU4MDMwQzIKKzoxMEIzMDAwMDAwMDAwMDAwMDAwMDAwRjgwMjAwMDAzMjAwMDAwMDAwMTEKKzoxMEIzMTAwMDAwMDAwMEY0MDIwMDAwMzIxODAwMDAwMDAwMDAwMEY4RjUKKzoxMEIzMjAwMDczOEEwMjM5MDAwMDNGMEYwMDAwMDA5QzAyODA5MkQyMTUKKzoxMEIzMzAwMDAwMDAwMDAwMDAwMDAwMzAwMzAwMzgzMjAwMDAwMDAwNzAKKzoxMEIzNDAwMDA0MDEwMDc4RDkwMTMwNzYwMDAwREYwRTAwMDAwMDlDNzcKKzoxMEIzNTAwMEIyNDUyODkwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMkUKKzoxMEIzNjAwMDAwMDAwMDAwMDAwMDAwODgwMkMwRTgzMjAyMDBGMjBFNzcKKzoxMEIzNzAwMEIwMDAwMEEwRjIwQjAwQjkwMDAwMDAwMDAwMDAwMDBDQkIKKzoxMEIzODAwMEFCRTRCMDMyMDAwMEY3MEU4MDAxMDA4MEYyNEJEMEI2ODMKKzoxMEIzOTAwMDAwMDAwMDAwQTAwMDAwMjgwOTAwMDAzMjAwMDAwMDAwQUEKKzoxMEIzQTAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwRjkwRTA0MDEwMDgwM0UKKzoxMEIzQjAwMDEyM0VGOEJBMDAwMDA0MEZBMDAwMDAwNEZENEJEMDk0MjgKKzoxMEIzQzAwMDAwMDAwMDBGODAwMTAwODBEMjgxOTJCNjAwMDAwMDBGQzMKKzoxMEIzRDAwMDgwMDEwMDgwMjI4MUZDQjYwMDAwMDAwMEEwMDAwMDA0NzMKKzoxMEIzRTAwMEZENEJEMDM0MDAwMDAwMDAwMDAwMDA4NDAxQzAyRjMyNkIKKzoxMEIzRjAwMDAwMDAwMDAwMDAwMDAwODBGMTAxMDAzNDAwMDAwMDAwQTcKKzoxMEI0MDAwMDAwMDAwMDk0MDFDMDJGMzIwMDAwMDQwRjAwMDAwMDkwRTMKKzoxMEI0MTAwMEYxMDEwMDk0MDAwMDAwMDBBMDAwMDA4NDAxQzAyRjMyNjAKKzoxMEI0MjAwMDAwMDAwMDAwMDAwMDAwODBGMTAxRjgzNDAwMDAwMDAwN0UKKzoxMEI0MzAwMDAwMDAwMDkwMDE0MEY4MzIwMDAwMDAwMDAwMDEwMDI4RTgKKzoxMEI0NDAwMDA5MDAwMDUyMDAwMDA4MEYwNDAxMDAyODA5MzRCMEJBQjYKKzoxMEI0NTAwMDAwMDAwNTBGQjAwMDAwODAwMjAwMDBCMDAwMDAwMDAwRjYKKzoxMEI0NjAwMEEwMDAwMDA0RkQ0QkQwMzUwMDAwMDAwMDAwMDEwMDI4QzIKKzoxMEI0NzAwMDA5MDAwMDUyMDAwMDA4MEZCMDAwMDBBODIyQzAyRkI3M0EKKzoxMEI0ODAwMDAwMDAwNjBGMDQwMDg0QzAzN0FDQjBCMjAwMDAwMDAwMUEKKzoxMEI0OTAwMEEwMDAwMDBDMEIwMDAwMzJGRkZGMDAwMDAwMDAwMDc4NEQKKzoxMEI0QTAwMEE5NERCMDMwMDAwMDBGMEY4MDAwMDA4MDAyNDBCMEI2MDAKKzoxMEI0QjAwMDAwMDAwMDAwMDAwMDAwNzg2OTgxOTczNTAwMDAwMDAwNUUKKzoxMEI0QzAwMDAwMDA4NDA4MEIwMDdDMzIwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMEI0RDAwMEU3MjUwMTMyMDA0MjAwMDAwMDA4MDAwMDg3OEQyQTNBNkIKKzoxMEI0RTAwMDAwMDAwMDAwMDAxMDAwMDAwNzAwQjAzMjAwMDAwMDAwNjMKKzoxMEI0RjAwMDAwMTgwMDAwMDcwMEQwMzIwMDAwMDAwMDEyMDEwMDQ4RDAKKzoxMEI1MDAwMEYyQzEzODU0MDAwMDEzMEYwMDAwMDA4MDAyMDAwMDkwQzgKKzoxMEI1MTAwMDAwMDAxNTBGQjAwMDAwQTAwMjAwMDBCMjAwMDAwMDAwMDMKKzoxMEI1MjAwMDAwMDAwMDBDQUJFNEIwMzIwMDAwMUEwRjgwMDEwMDgwNzQKKzoxMEI1MzAwMDAyNDBEMEI2MDAwMDAwMDBBMDAwMDAyODA5MDAwMDMyNDAKKzoxMEI1NDAwMDAwMDAwMDAwMDAwMTAwODAwMjAwMDA1MDAwMDAxQzBGRkQKKzoxMEI1NTAwMDA0MDEwMDgwMTIzRUY4QkEwMDAwMkQwRkEwMDAwMDA0ODQKKzoxMEI1NjAwMDBENDBEMDk0MDAwMDI2MEY4MDAxMDA4MEQyODE5MkI2NTkKKzoxMEI1NzAwMDAwMDAyNjBGODAwMTAwODAyMjgxRkNCNjAwMDAwMDAwNDAKKzoxMEI1ODAwMEEwMDAwMDA0MEQ0MEQwMzQwMDAwMDAwMDAwMDAwMDc4NEUKKzoxMEI1OTAwMDA5QzAyRjMyMDAwMDAwMDAwMDAwMDBGQzAyMDAwMDMyNTEKKzoxMEI1QTAwMDAwMDAwMDAwMDAwMDAwODQwMUMwMkYzMjAwMDAwMDAwRjUKKzoxMEI1QjAwMDAwMDAwMDgwRjEwMTAwMzQwMDAwMDAwMDAwMDAwMDk0NTEKKzoxMEI1QzAwMDAxQzAyRjMyMDAwMDAwMDAwMDAwMDA5MEYxMDEwMDM0QTMKKzoxMEI1RDAwMDAwMDAyRDBGMDAwMDAwRkMwMjgwOTc5MjAwMDAwMDAwODgKKzoxMEI1RTAwMEEwMDAwMDc4MDlDMDJGMzIwMDAwMDAwMDAwMDAwMEZDMUQKKzoxMEI1RjAwMDAyMDAwMDMyMDAwMDAwMDAwMDAwMDA4NDAxQzAyRjMyNzEKKzoxMEI2MDAwMDAwMDAwMDAwMDAwMDAwODBGMTAxRjgzNDAwMDAwMDAwOUMKKzoxMEI2MTAwMDAwMDAwMDkwMDE0MEY4MzIwMDAwMDAwMDAwMDAwMEZDMzMKKzoxMEI2MjAwMDAyODA5NzMyMDAwMDAwMDAwMDAxMDAyODA5MDAwMDUyNEIKKzoxMEI2MzAwMDAwMDAzMTBGMDQwMTAwMjgwOTM0QjBCQTAwMDAyRTBGQjkKKzoxMEI2NDAwMEIwMDAwMDgwMDIwMDAwQjAwMDAwMDAwMEEwMDAwMDA0NzQKKzoxMEI2NTAwMDBENDBEMDM1MDAwMDAwMDAwMDAxMDAyODA5MDAwMDUyMTQKKzoxMEI2NjAwMDAwMDAzMTBGQjAwMDAwQTgwMjAwMDBCMjAwMDAyRjBGNTAKKzoxMEI2NzAwMDA0MDA4NEMwMzdBQ0IwQjIwMDAwMDAwMEEwMDAwMDBDOTEKKzoxMEI2ODAwMDBCMDAwMDMyRkZGRjAwMDAwMDAwMDA3OEE5NERCMDMwMzEKKzoxMEI2OTAwMDAwMDAzODBGODAwMDAwODAwMjQwQjBCNjAwMDAwMDAwQkIKKzoxMEI2QTAwMDAwMDAwMDc4Njk4MTk3MzUwMDAwMDAwMDAwMDA4NDA4RTAKKzoxMEI2QjAwMDBCMDA3QzMyMDAwMDAwMDAwMDAwMDAwMEU3MjUwMTMyOTIKKzoxMEI2QzAwMDAwNDIwMDAwMDAwODAwMDA4NzhEMkEzQTAwMDAwMDAwQjgKKzoxMEI2RDAwMDAwMTAwMDAwMDcwMEIwMzIwMDAwMDAwMDAwMTgwMDAwNTkKKzoxMEI2RTAwMDA3MDBEMDMyMDAwMDAwMDAxMjAxMDA0OEYyQzEzODU0QjcKKzoxMEI2RjAwMDAwMDAzQzBGMDAwMDAwODAwMjAwMDA5MDAwMDBGRkZGRUYKKzoxMEI3MDAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwNDEwRjFDNDAwMjgwRjkKKzoxMEI3MTAwMDA2QzA5MkIyNDQwMDAwMDAwMDAxMDBGOEEyOEQyRjUyMzIKKzoxMEI3MjAwMDAwMDAzNjEwMTIwMDAwNjgwMkM1OTJCMDAwMDAwMDAwNTAKKzoxMEI3MzAwMDAwMDEwMDcwMUYwMEY3NUEwMDAwRkZGRjAwMDAwMDgwQUEKKzoxMEI3NDAwMDAyMDAwMDkwMDAwMDAwMDBENTA4MDAwMDA3ODA5MjMyM0YKKzoxMEI3NTAwMDAwMDAwMDAwMDAzMDAwMDAwN0MwMkMzMjAwNDAwMDgwRDQKKzoxMEI3NjAwMDAwMzgwMDAwMDcwMDM3MzIwMDAwMDAwMENBNDEwMUUwNDUKKzoxMEI3NzAwMDA2ODA5MjMyMDAwMDQ4MEYxMjAwMDA0ODAyQzA4MEIyREEKKzoxMEI3ODAwMDAwNjAwMDAwMDAwMTAwMDgwODgwMzY3MjAwMDBGRkZGMjIKKzoxMEI3OTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMzgwMDAwNUYKKzoxMEI3QTAwMDA3ODA5MjMyMDAwMDAwMDAwMDMwMDAwMDA3QzAyQzMyRjkKKzoxMEI3QjAwMDAwMDAwMDAwQ0EzRDAwMEMwNzgwODMzMjAwMDAwMDAwM0EKKzoxMEI3QzAwMDEyMDEwMDQ4MDJDMDgwNzIwMDAwNEUwRjAwMDAwMDgwOEQKKzoxMEI3RDAwMDAyMDAwMDkwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwQzcKKzoxMEI3RTAwMDAwMDAwMDAwMDQ1NzAxODAwMkMwNkU3QzAwMDAwMDAwRDEKKzoxMEI3RjAwMDAwNTcwMUVDMDY4MDkyNzIwMDAwRkZGRjAwMDAwMDgwRkQKKzoxMEI4MDAwMDAyMDAwMDkwMDAwMERDMEUwMDAwMDAzMDAzMDAzOEYyNUYKKzoxMEI4MTAwMDAwMDA1NzBGOUQxMTAyMEMwOTAwNkVCMjAwMDA1ODBGNzYKKzoxMEI4MjAwMDAwRjAwMTFDMDkwMDZFOTIwMDAwMDAwMDAwQjgwMTFDMkQKKzoxMEI4MzAwMDA5MDA2RTMyMDAwMDVBMEYyQ0NEMDExODA5ODA2RUIyM0IKKzoxMEI4NDAwMDAwMDAwMDAwMDAwMDAwMENDOUMxOTAzNDAwMDA1RDBGMzIKKzoxMEI4NTAwMDNCMjkwMjA0MDk4MDZFQjIwMDAwMDAwMDAwRDYwMUVDMTIKKzoxMEI4NjAwMDU2QzA2RTM0MDAwMDAwMDAwMDAwMDAwQ0I5QzE5MDM0RDYKKzoxMEI4NzAwMDAwMDA2QzBGMDBBODAxMDgwOTAwNkVGMjAwMDA2MTBGQzMKKzoxMEI4ODAwMDlEMDEwMDgwMTdFMDkwQkEwMDAwMDAwMDAwMzAwMDgwQTkKKzoxMEI4OTAwMDA3QzA5MTMyMDAwMDY0MEYwMDM4MDA4MDA3MDBFRTkyNkMKKzoxMEI4QTAwMDAwMDA2NDBGMDQwMTAwODAwMkMwOTFCQzAwMDAwMDAwOTEKKzoxMEI4QjAwMDAwQjgwMUUwMDYwMEVFMzIwMDAwMDAwMDAwNzAwMUUwNzgKKzoxMEI4QzAwMDA2MDA4NjMyMDAwMDY2MEYzOTA4MDA4MDA3QzA4NUIyODYKKzoxMEI4RDAwMDAwMDAwMDAwRDlDOTAxRTgwNjgwOTEzMjAwMDAwMDAwOTQKKzoxMEI4RTAwMEM4MTEwMDgwMDc0MDkwMzIwMDAwNjkwRjNCMjEwMDgwQTIKKzoxMEI4RjAwMDA3MDA4NkIyMDAwMDAwMDBEQjAwMDA2MDE4MDA4NjNBRjYKKzoxMEI5MDAwMDAwMDAwMDAwNTg3ODAxRTAxNjIwODYzQTAwMDAwMDAwOTAKKzoxMEI5MTAwMDAwMjkwMDgwMDcwMDg1NzIwMDAwRkZGRjAwMDAwMDgwMDIKKzoxMEI5MjAwMDAyMDAwMDkwMDAwMDcwMEYwMjBDMDI4MEEyOUI5MEJDRUQKKzoxMEI5MzAwMDAwMDAwMDAwMDAwMDAyNzgyOTAwNkUzNjAwMDA3MDBGNDEKKzoxMEI5NDAwMDAyMDAwMDgwRTJBNTkwQkMwMDAwMDAwMDAwMDAwMDA4OUEKKzoxMEI5NTAwMDA5MDAwMDMyMDAwMDcyMEY5Rjg5MDE3ODQ5MjE2RUJDRjYKKzoxMEI5NjAwMDAwMDAwMDAwMDAwMDAwNzgwOTAwMDAzMjAwMDAwMDAwMjQKKzoxMEI5NzAwMDAwMDAwMDA4RTlBNTkwM0YwMDAwNzgwRjA0MjAwMjA4QUQKKzoxMEI5ODAwMDg5OUI5MEJFMDAwMDAwMDAwMDBBMDI1OEI4OUI5MDM2QzgKKzoxMEI5OTAwMDAwMDAwMDAwMDAwMDAwNzg0OUExOTAzQTAwMDAwMDAwN0IKKzoxMEI5QTAwMDlGODgwMTgwODI5Qjk3N0MwMDAwMDAwMDAwODkwMUUwNTUKKzoxMEI5QjAwMDA2ODA5NzcyMDAwMDAwMDAwMDBCMDI1OEI4OUI5MDc2M0EKKzoxMEI5QzAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDAwMDA3RjBGRDkKKzoxMEI5RDAwMDgwMDEwMDgwQTI4MDJGQjYwMDAwN0UwRjEyMDEwMDc4NDcKKzoxMEI5RTAwMDA5QzAyMUIyMTgwMDM2MDAwMDAwMDBGODczMEEwM0Y5RkMKKzoxMEI5RjAwMDAwMDA3RjBGQ0EwMDAwRDgwMjQwODQ5MjAwMDAwMDAwQkYKKzoxMEJBMDAwMDAwMDAwMEY4QTI4MDJGMzUwMDAwMDAwMDAwNDAwMDZDMEMKKzoxMEJBMTAwMDg4MUM4MzNBMDAwMDAwMDAwMDQ4MDA0QzA4MDA3MjMyODUKKzoxMEJBMjAwMDAwMDAzNjEwMDg1MDAwMThDODIwNzJCQzAwMDAwMDAwNEEKKzoxMEJBMzAwMDA2MDAwMDgwNjJBMDgyN0MwMDAwMzYxMDAyMDAwMDIwMTgKKzoxMEJBNDAwMDg4MDE4MkJBMDAwMDAwMDAwMDAwMDBEODAyMDAwMDMyMjUKKzoxMEJBNTAwMDAwMDAwMDAwMDAwMDAwMDAwNzAwMDYzMjA3MDAwMDAwQTAKKzoxMEJBNjAwMDAwMDgwMDAwNzc0QTA5MzkwMDAwMDAwMDAwMTAwMDAwQkIKKzoxMEJBNzAwMDA3MDA4MjMyMDAwMDAwMDBDQTE5MDAwMDA3NDA4MjMyMkQKKzoxMEJBODAwMDAwMDA4OTBGMTIwMDAwNDBGMkMxMzhCNDAwMDAwMDAwMkQKKzoxMEJBOTAwMDAwMDEwMEQ4MDI0MDg0NzIwMDAwRkZGRjAwMDAwMDgwMTcKKzoxMEJBQTAwMDAyMDAwMDkwMDAwMDkzMEY4MDAxMDA4MEYyQzE4NUI2NzMKKzoxMEJBQjAwMDAwMDA5MDBGMUY0MDAyODRFNjAxMDBCNDAwMDA5MzBGQzUKKzoxMEJBQzAwMDFEMDEwMEY4MjI4MTJGQjQwMDAwOTMwRjAwMDAwMEY4NDAKKzoxMEJBRDAwMDYyODEyRjk1MDAwMDkyMEYxRDAxMDA4MDAyMDAwMEIwQ0UKKzoxMEJBRTAwMDAwMDAwMDAwMDAwMDAwRjg2MjgxMkYzNTAwMDAwMDAwMTcKKzoxMEJBRjAwMDAwNDAwMjgwMDI0MDY4MzIwMDAwMzYxMDEyMDAwMDY4RTgKKzoxMEJCMDAwMDAyQzU4NUIwMDAwMDAwMDAxRDAwMDA4MDAyMDAwMDcwMkEKKzoxMEJCMTAwMDAxMDAwMDAwMDQwMTAwODBBMjhEMkY3MDJBMDA5NjBGMDIKKzoxMEJCMjAwMDEyMDAwMDJDODJDRDJFQjIwMDAwMDAwMDAwMDEwMEY4QUYKKzoxMEJCMzAwMDAyODEyRjc0MDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwQ0YKKzoxMEJCNDAwMDgwQTgwMDAwMDQwMDAwODA4MjhEMkY3MDAwMDA5RjBGRUQKKzoxMEJCNTAwMDgwMDEwMDgwRDI4MDJGQjYwMDAwOUYwRjA0QjAwMDgwQ0IKKzoxMEJCNjAwMDAyMDA2RUJDMDAwMDAwMDAwMDAwMDBGODcyODEyRjM0NUIKKzoxMEJCNzAwMDNEMDBBMjBGMTIwMTAwMkM4MkNEMkVCMjAwMDA5RDBGQkQKKzoxMEJCODAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQTIwRjgwMDEwMDgwRjEKKzoxMEJCOTAwMEYyODAyRkI2M0MwMEE1MEYxMjAxMDAyQzgyQ0QyRUIyRjAKKzoxMEJCQTAwMDAwMDBBMDBGMDAwMDAwODAwMjAwMDA5MDAwMDBBNTBGMjAKKzoxMEJCQjAwMDgwMDEwMDgwQjI4MDJGQjYzNTAwQTMwRjEyMDAwMDJDNDgKKzoxMEJCQzAwMDgyQ0QyRUIyMDAwMDAwMDAwMDAwMDBGODQyODEyRjM0MjgKKzoxMEJCRDAwMDgwMDAwMDAwMDQwMDAwODA4MjhEMkY3MDAyMDAwMDAwQjEKKzoxMEJCRTAwMDA0MDEwMDgwQTI4RDJGNzAzQjAwQTcwRjEyMDAwMDJDRDMKKzoxMEJCRjAwMDgyQ0QyRUIyMDAwMDAwMDAwMDAxMDBGODEyODEyRjc0RTcKKzoxMEJDMDAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDA4MDAwMDAwMUMKKzoxMEJDMTAwMDAwMTgwMUU4NzYyMDgxMzlFRUZGMDAwMDAwMDEwMEY4RUQKKzoxMEJDMjAwMDgyOEQyRjcxMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNTUKKzoxMEJDMzAwMDAwMDBCMTBGMDAwMDAxMzgwOEMwNkVGMjAwMDAwMDAwRTMKKzoxMEJDNDAwMDEyMDEwMDQ4MDJDMDgwNzIwMDAwQUUwRjAwMDAwMDgwQTgKKzoxMEJDNTAwMDAyMDAwMDkwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwNDIKKzoxMEJDNjAwMDAwMDBCMzBGMDQzODAxNzgwOTAwNkVCMjAwMDAwMDAwMzQKKzoxMEJDNzAwMDAwMzgwMUUwMDYwMDAwMzIwMDAwMDAwMENBMTEwMDAwOTgKKzoxMEJDODAwMDA3ODA4MjMyMDAwMEI2MEYyRTE5MDAwMDA3ODA5N0IyOUQKKzoxMEJDOTAwMDAwMDAwMDAwMDAwMDAwMjhFOTgxOTIzNDAwMDBCQjBGODIKKzoxMEJDQTAwMDI3MzEwMDAwMDdDMDJDQjIwMDAwMDAwMEQ1MDgwMDAwQkEKKzoxMEJDQjAwMDA3MDA4NzMyMDAwMDAwMDBDNzAwMDAyOEU5ODA5MjM0QTYKKzoxMEJDQzAwMDAwMDAwMDAwMDA0MDAxRTAwNjAwODczMjAwMDAwMDAwOTQKKzoxMEJDRDAwMDAwMDAwMDA4RDg4MTgwMzQxMDAwMDAwMDAwMzkwMDAwMDYKKzoxMEJDRTAwMEU3QTA5Mjc5MDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwQjIKKzoxMEJDRjAwMDAwMDBCRDBGMTIwMDAwNDQxMkU0MzhCMjE4MDAzNjAwRjQKKzoxMEJEMDAwMDAwMDAwMEY4NzMwQTAzRjkwMDAwQzIwRjA0MDEwMDgwNkMKKzoxMEJEMTAwMDAyODAyREJDMDAwMEJFMEY2NzAwMDBGOEEyODAyRkI1ODYKKzoxMEJEMjAwMDAwMDAzNjEwMTIwMDAwRTgwMkMwMjFCMjAwMDAwMDAwM0UKKzoxMEJEMzAwMDAwMDEwMEQ4MDI0MDAwNzIwMDAwRkZGRjAwMDAwMDgwRjgKKzoxMEJENDAwMDAyMDAwMDkwMDAwMEM3MEYwNDMwMDA4MDgyOUI4MUJDN0QKKzoxMEJENTAwMDAwMDAwMDAwQ0EwMTAwRjgwMjgwMkYzNTAwQTBDNjBGQzUKKzoxMEJENjAwMDEyMDAwMDQwQTI4RDM5QjIwMEMwQ0IwRjA0MzgwMDc4MTkKKzoxMEJENzAwMDg5OEQ2RUIwMTAwMENCMEY5RjAxMDBGOEUyQTUyRkI5OUUKKzoxMEJEODAwMDAwMDAwMDAwMDA1ODAxRUMwNkMwRUUzMjAwMDAwMDAwODgKKzoxMEJEOTAwMDAwMDAwMDgwMDIwMDAwMzAwMDAwMDAwMDA0MjgwMDE4QUQKKzoxMEJEQTAwMDA5MDA2RTcyMDAwMEJBMEQwMDAwMDA4MDAyMDAwMEYwNzEKKzoxMEJEQjAwMDAwMDBBMzBEMDBBODAxMjAwOTAwNkU5MjAwMDBGRkZGMDMKKzoxMEJEQzAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwRDQwRjA0QjAwMDgwNEEKKzoxMEJERDAwMDgyOUI4MUJDMDAwMDAwMDAwMEI4MDBFODg2ODA2RTM0QzEKKzoxMEJERTAwMDAwMDAwMDAwQ0EwMTAwRjg0MjgwMkYzNTA4QTAwMDAwQzIKKzoxMEJERjAwMDEyMDEwMDQwQTJDRDM5NzIwMDAwRDIwRjAwMDAwMDgwNzUKKzoxMEJFMDAwMDAyMDAwMDkwMDAwMDAwMDAwMEI4MDBFODg2ODA2RTM0NTgKKzoxMEJFMTAwMDAwMDAwMDAwMDAwMTAwODAwMjAwMDA3MDAwMDBGRkZGMzEKKzoxMEJFMjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwREEwRjMzQ0QwMUJDNUEKKzoxMEJFMzAwMDA4ODA2RUIyMDAwMDE0MTAwMDAwMDAyODI5MjJFRURDRjkKKzoxMEJFNDAwMDAwMDBERjBGMDAwMDAwODAwMjAwMDA5MDAwMDBERjBGMDQKKzoxMEJFNTAwMDA0QjgwMTI4MDkwMDZFQjIwMDAwREYwRjlGNzEwMTgwNTUKKzoxMEJFNjAwMEMyMjE2RUJDMDAwMDM2MTA5RjAwMDAyOEE5MjRFRUJDNDEKKzoxMEJFNzAwMDAwMDAxNDEwMDAwMDAwMjgxOTgwOTJERjAwMDAwMDAwNkMKKzoxMEJFODAwMDAwMDAwMDgwMDIwMDAwMzAwMDAwRjIwRjAyODEwMTgwRkIKKzoxMEJFOTAwMDgyOUI5MEJDRUUwNUVBMEYwNjBDMDI4MDgyOEQ2RUJDODAKKzoxMEJFQTAwMDAwOTA0QzAwMDAwMDAwODQwMjAwMzczMjAwMDBFNDBGRDQKKzoxMEJFQjAwMEI4MDEwMDgwMDIwMDAwQjAwMDAwRTIwRjAwMDAwMDgwMjYKKzoxMEJFQzAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBDNDAzODA5MDMyRDcKKzoxMEJFRDAwMDAwMDAwMDAwMDBCMDAxRTA5NjIxNkUzQzAwMDAwMDAwNzAKKzoxMEJFRTAwMDYxOTgwMUUwMDYwMDg3MzIwMDAwMDAwMDAwRDQwMUVDRjgKKzoxMEJFRjAwMDA2MDAwMDMyMDAwMDAwMDBBODAwMDA3ODQ5NDAzQzM3RUUKKzoxMEJGMDAwMDAwMDBGNzBGMDAwMDAwMDhFOUE1OTA5QTYwODkyMDAwNjIKKzoxMEJGMTAwMDAwMDAwMDg0MDIwMDM3MzIwMDAwRUQwRkI4MDEwMDgwRkQKKzoxMEJGMjAwMDAyMDAwMEIwMDAwMEVCMEYwMDAwMDA4MDAyMDAwMDkwNTMKKzoxMEJGMzAwMDAwMDAwMDAwMDAwMDAwQzQwMzgwOTAzMjAwMDAwMDAwRjgKKzoxMEJGNDAwMDAwQjAwMUUwOTYyMTZFM0MwMDAwMDAwMDYxOTgwMUUwMjUKKzoxMEJGNTAwMDA2MDA4NzMyMDAwMDAwMDAwMEQ0MDFFQzA2MDAwMDMyMjkKKzoxMEJGNjAwMDAwMDBGNzBGQTgwMDAwMDgxOThGOTA5QTAwMDAwMDAwNDkKKzoxMEJGNzAwMDAwMDAwMDc4OTlBMTg5M0UwMDAwMDAwMDAwMDAwMDA4NDAKKzoxMEJGODAwMEU5QTU5MDNBMDAwMDAwMDAwMEIwMDFFMDk2MjE2RTNDNjcKKzoxMEJGOTAwMDAwMDAwMDAwNjE5ODAxRTAwNjAwODczMjAwMDAwMDAwMDgKKzoxMEJGQTAwMDAwRDQwMUVDMDYwMDAwMzIwMDAwRkEwRjA2MDAwMDgwMDkKKzoxMEJGQjAwMDcyQTI5MEJDMDBDMEZGM0YwMDgwMDFFMDA2MDAzNzMyNTMKKzoxMEJGQzAwMDAwMDAwMDAwMDAwMDAwMDgwOUMwODkzMjAwMDBGRjBGRDcKKzoxMEJGRDAwMDA0NzkwMTgwODIxQjg3QkMwMDAwRkQwRjA0QjAwMDgwNDMKKzoxMEJGRTAwMDAyMDA2RUJDMDAwMDAxMTBEOTkwMDFFMDA2ODA5MDkyMjIKKzoxMEJGRjAwMDAwMDAwNDEwODAwMDAwODA1MjgxMkZCNjAwMDAwNDEwNjEKKzoxMEMwMDAwMEQ1NDEwMUUwMDYwMDg3OTIwMDAwMDExMDNDOTAwMUUwNUMKKzoxMEMwMTAwMDA2ODA5MEIyMDAwMDAwMDAwMEM4MDFFODA2QzA4QjMyMjQKKzoxMEMwMjAwMDAwMDAwMDAwOTUwMTAwODAwMjgwMkY3MjAwMDAwNTEwQzIKKzoxMEMwMzAwMDlGNDEwMTgwODIxQjg3QkMwMDAwMDAwMDAwMDEwMDgwM0UKKzoxMEMwNDAwMDAyMDAwMDcwMDAwMDAwMDBEOTkwMDFFMDA2ODA5MDMyRUMKKzoxMEMwNTAwMDAwMDAwMDAwMDAwMTAwRjg3MjgwMkY3NDAwMDBGRkZGNTQKKzoxMEMwNjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMEQxMDlGRDgwMTgwQTkKKzoxMEMwNzAwMDIyMjE2RUJDMDAwMDAwMDAwQjAxMDA4MDAyMDAwMDcwNTUKKzoxMEMwODAwMDAwMDAwRDEwOUZFMDAxODBDMjIxNkVCQzAwMDAwMDAwODYKKzoxMEMwOTAwMDBCMDEwMDgwMDIwMDAwNzAwMDAwMEQxMDlGQjAwMTgwQjUKKzoxMEMwQTAwMEQyMjE2RUJDMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDcwODAKKzoxMEMwQjAwMDAwMDAwRjEwMDY2ODAxODA4MjVCODdCQzAwMDAwMDAwNTIKKzoxMEMwQzAwMDAwNjgwMUUwMDY0MDg3MzIwMDAwMTExMDM3QjAwMUUwM0YKKzoxMEMwRDAwMDA2NDA4N0IyMDAwMDAwMDAwMDAwMDBGOEQyODAyRjM0MzQKKzoxMEMwRTAwMDAwMDAwMDAwMDBEODAxRTAwNjgwODQzMjAwMDAwMDAwNUIKKzoxMEMwRjAwMDAwRTEwMUUwMDYwMDg3NzIwMDAwRkZGRjAwMDAwMDgwMDEKKzoxMEMxMDAwMDAyMDAwMDkwMDAwMDIwMTAwNEMxMDE4NDAyMDA2RUIyMDEKKzoxMEMxMTAwMDA1MDAwMDAwMDBDMDAxRTg4NjhEOTIzNzAzMDAwMDAwOTIKKzoxMEMxMjAwMDAwQzQwMUU4ODY4RDkyMzcwMDAwMDAwMDAwMDAwMDgwMDYKKzoxMEMxMzAwMDAyMDAwMDMwMDMwMDAwMDAwMEMwMDEyQzg5OEQ2RTM2MjMKKzoxMEMxNDAwMDAwMDAwMDAwMDBDNDAxMkNBOURCOTIzQTAwMDAwMDAwQUUKKzoxMEMxNTAwMDAwMDAwMDJDMjlDMDkyMzYwMDAwMDAwMDAwMDAwMDJDRDYKKzoxMEMxNjAwMDE5RkI5MjNGMDAwMDAwMDAwMDAwMDAyODI5ODA5MjNBNEQKKzoxMEMxNzAwMDAwMDAwMDAwMDAwMDAwMkNBOUU0OTIzRjAwMDAwMDAwMzUKKzoxMEMxODAwMDZGQ0MwMUU4MjZGQjkyM0UwMDAwMDAwMDAwQjkwMUUwMDAKKzoxMEMxOTAwMDA2MDAwMDUyMDAwMDAwMDAwMDAwMDA5NDAyODA5MjMyNkQKKzoxMEMxQTAwMDAwMDAwMDAwMDBDMDAxRTAwNjQwMjgzMjEwMDAwMDAwM0UKKzoxMEMxQjAwMDZGQ0MwMUU4ODZDRDJBMzYwMDAwMDAwMDAwQjkwMUUwMEUKKzoxMEMxQzAwMDA2MDAwMDUyMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMDcKKzoxMEMxRDAwMDAwMDAwMDAwMDA5MDAxQkMwODAwNkUzMjAwMDAwMDAwNkEKKzoxMEMxRTAwMDAwQjAwMUJDODhEQjhCM0UwMDAwMDAwMDAwOTgwMUJDNjEKKzoxMEMxRjAwMDg4REI4QjNBMDAwMDMwMTA5RjAwMDBCQzg4RTE4QkJDQ0MKKzoxMEMyMDAwMDAwMDAzMDEwMDQwQzAyNDBBOERCOEJCRTAwMDAwMDAwRDAKKzoxMEMyMTAwMDAwQjAwMDA0ODgxQjg0M0UwMDAwMkQxMDA0QjEwMDgwOTMKKzoxMEMyMjAwMDgyNUI4MEJDMDAwMDAwMDAwMDAxMDBGOEMyODAyRjc0MTcKKzoxMEMyMzAwMDAwMDAwMDAwMDQwQzAyODBBMjVCODA3QzAwMDAzMDEwMzMKKzoxMEMyNDAwMDA0NjgwMTc4MTkwMDZFQjYwMDAwMDAwMDAyMDAwMDgwNEEKKzoxMEMyNTAwMEUyNjU4MDdDMDAwMDAwMDAwMDAwMDA4ODEyMDAyQzNBOUIKKzoxMEMyNjAwMDAwMDBGRkZGMDAwMDAwODAwMjAwMDA5MDA4MDAwMDAwQjYKKzoxMEMyNzAwMDAwMUMwMUU4NzYyMDgxMzlFRUZGMDAwMDAwMDEwMEY4ODMKKzoxMEMyODAwMDgyOEQyRjcxMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwRUYKKzoxMEMyOTAwMDAwMDAzNjEwMDAwMDAwQjQwRjQwRkI5NDAwMDAwMDAwQzYKKzoxMEMyQTAwMDAwMDAwMDg4MEY0MDJCMzIwMDAwMDAwMDAwMDAwMDkwQ0EKKzoxMEMyQjAwMDBGMDAyODMyMDAwMDAwMDAwMDAwMDA5NDBGMDAyOTMyMTcKKzoxMEMyQzAwMDEwMDAwMDAwMDAwMDAwQjg1RjQ2MTgzOUZGMDAwMDAwQjEKKzoxMEMyRDAwMDAwMDAwMDlDMEYwMDM2MzIwMDAwMDAwMDAwMDAwMDlDQUYKKzoxMEMyRTAwMDVGQ0FGOTM1MDAwMDAwMDAwMDAwMDA0NDAzQzBGOTMyQzUKKzoxMEMyRjAwMDAwMDAwMDAwMDAwMDAwRTQwMzAwMDAzMjQxMDAwMDEwRDQKKzoxMEMzMDAwMDAwMDAwMEUwMDMwMDM3MzIwMDAwMDAwMDAwMDAwMEU0RkQKKzoxMEMzMTAwMDAzMDAwMDMyNDAwMDAwMTAwMDAwMDBFMDAzMDAzNzMyNEMKKzoxMEMzMjAwMDAwMDA0NTEwNjcwMDAwOTgwRjgwMkFCMjAwMDAwMDAwNEUKKzoxMEMzMzAwMDAwMDAwMEE4MDIwMDAwMzIwMDAwNDMxMDEyQzE4NkUwOTUKKzoxMEMzNDAwMDA3QzAyMUIyMDAwMDAwMDAwMEI4ODZDMDA2ODAyQTMyNzMKKzoxMEMzNTAwMDRDNDIwMDAwMDAwMDAwQTgwMjAwMzYzMjQ3MTA1ODExN0QKKzoxMEMzNjAwMDAwMDAwMEIwMEYwMDM2OTIwMDAwMDAwMDAwMDAwMDlDQUEKKzoxMEMzNzAwMDAyMDAwMDMyMDAwMTQ0MTEwMDAwMDBBQzBGMDAzNkQyNzAKKzoxMEMzODAwMDAwMDAwMDAwMDAwMDAwQUMwRjgwMkEzMjAwMjAwMDAwRjYKKzoxMEMzOTAwMDAwMDAwMEE4MDIwMDM2MzIwMDAwMDAwMDAwMDAwMDlDRUYKKzoxMEMzQTAwMDBGMDA3RTMyMDAwMDAwMDAwMDAwMDBBMDBGMDA3RTMyNkYKKzoxMEMzQjAwMDAwMDAwMDAwMDAwMDAwQTQwRjAwN0UzMjAwMDAwMDAwMUEKKzoxMEMzQzAwMDAwMDAwMEE4MEYwMDdFMzIwMDAwMDAwMDAwMDAwMEE4NUUKKzoxMEMzRDAwMDAyQzBGQTMyMDAwMDAwMDAwMDAwMDBFMDA3QzBGOTMyOUQKKzoxMEMzRTAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwRkEzMjAwMDAwMDAwM0EKKzoxMEMzRjAwMDAwMDAwMEUwMDc0MEZBMzIwMDAwNUIxMDAwMDAwMEUwOUYKKzoxMEM0MDAwMDA3ODBGQUQyMDAwMDAwMDAwMDAwMDBFMDA3ODBGQjMyNDUKKzoxMEM0MTAwMDAxMDA4MjEwMDQwMTAwQjQ4RjRERkJCMDAyMDAwMDAwNDcKKzoxMEM0MjAwMDAwMDAwMEEwMDIwMDAwMzk0MDgwMDAwMDAwMDAwMDBDNjUKKzoxMEM0MzAwMEFCQ0RCMDMyMTAwMDAwMDAwMDAwMDAwQzVCQ0FCMDM5NzgKKzoxMEM0NDAwMDAwMDAwMDAwMDAwMDAwMEMyQkZFQjAzMjAwMDA4MTExNDMKKzoxMEM0NTAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwMDAwMDAwMDAwMEY4RDIKKzoxMEM0NjAwMDAzMDAwMTMyMDAwMDAwMDAwMDAxMDBFMDA3ODAzRjUyOUQKKzoxMEM0NzAwMDE4MDAwMDAwMDAwMDAwRjg3MzhBMDIzOTAwMDAwMDAwNzQKKzoxMEM0ODAwMDAwMDAwMDQ0NTMwQTE2MzUwMDAwMDAwMDAwMDAwMDlDMjQKKzoxMEM0OTAwMDBGODA5NjMyMDAwMDAwMDAwMDAwMDBBMDBGQzA5NjMyMEUKKzoxMEM0QTAwMDAwMDAwMDAwMDAwMDAwQTQwRjAwOTczMkEyNjAwMzAwMEIKKzoxMEM0QjAwMDAwMDAwMDU4MDMwMDM3MzI2ODEwMDAwMDAwMDAwMDVDRTQKKzoxMEM0QzAwMDAzMDAzNjMyMDAwMDAwMDAwMDAwMDA1MDgzMEQwMDM0RUQKKzoxMEM0RDAwMDAwMDAwMDAwMDAwMDAwNDg4MzBEMDAzNDAwMDAwMDAwNTAKKzoxMEM0RTAwMDAwMDAwMDQ0NTMwQTAwMzQwMDAwMzYwMDAwMDAwMDgwQzEKKzoxMEM0RjAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDA2ODA5QzBGOTMyNEUKKzoxMEM1MDAwMDAwMDAwMDAwMDAwMDAwNkMwOTAwRkEzMjAwMDAwMDAwOEEKKzoxMEM1MTAwMDAwMDAwMDcwMDk0MEZBMzIwMDAwN0ExMDAwMDAwMDgwMkMKKzoxMEM1MjAwMDAyMDAwMDkwMDIwMDAwMDAwMDAwMDBBMEYyMEIwMDM5QTEKKzoxMEM1MzAwMDAwMDA2RjEwODAwMTAwODAxMjQwQjBCNjAwMDAwMDAwQzMKKzoxMEM1NDAwMDAwMDAwMDA0M0I0MEIwMzMwMDAwMDAwMDAwMDAwMDA0ODUKKzoxMEM1NTAwMEZENEJEMDM1MDAwMDczMTAwMDAwMDAwQzBCMDA5NzkyQ0IKKzoxMEM1NjAwMDAyMDAwMDAwMDAwMDAwQTBGMjBCMDAzOTAwMDA3MzEwNzAKKzoxMEM1NzAwMDAwMDAwMDA0NkIwMTk3OTQwMDAwNzMxMDEyMDAwMDY4MjMKKzoxMEM1ODAwMDA5NDAyMEIyMDAwMDc0MTAxMjAwMDA2QzA5NDAyMEIyNzMKKzoxMEM1OTAwMDBEMDAwMDAwMDAwMDAwRkNBMkU1MTYzODAwMDA3OTEwMzQKKzoxMEM1QTAwMDlGMDAwMDgwMDI4MDk2QjIwMDAwMDAwMDAwMDAwMDcwMzIKKzoxMEM1QjAwMDA5QzA5NjMyMDAwMDdBMTAwMDAwMDA2QzA5QzBGRDkyOUMKKzoxMEM1QzAwMDAwMDA3OTEwMTIwMDAwNzAwOTQwMjBCMjAwMDAwMDAwNDUKKzoxMEM1RDAwMDAwMDAwMDlDMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQ4QjMKKzoxMEM1RTAwMDAyMDAwMDMyMDIwMDczMTAwNDAxMDBCQ0FGMjUxN0I4MkUKKzoxMEM1RjAwMDA2MDA3MTEwMDQwMDAwQkNBRjY1MTZCODAwMDA2QzEwOTYKKzoxMEM2MDAwMDA0MDAwMDgwMjJDMEZCQkMwMDAwOEExMDA0MDAwMDgwRUYKKzoxMEM2MTAwMDEyQzFGQkJDMjAwMDczMTAwNDAxMDA4MDgyQ0RGQkJDNjIKKzoxMEM2MjAwMDAyMDAwMDAwMDAwMDAwQTBGMjBCMDAzOTAwMDA4QjEwOTcKKzoxMEM2MzAwMDAwMDAwMDgwMDIwMDAwRDA4NDEwMDAwMDAwMDAwMDg4OEMKKzoxMEM2NDAwMDgyQ0RGOTNBMDAwMDdBMTEwMDAwMDA4MDAyMDAwMDkwQ0IKKzoxMEM2NTAwMDAwMDBCMzEwMDAwMDAwODAwMjAwMDA5MDAwMDBCNDEwNDEKKzoxMEM2NjAwMDAwMDAwMDgwMDIwMDAwOTAwMDAwQjgxMDAwMDAwMDgwNzAKKzoxMEM2NzAwMDAyMDAwMDkwMDAwMEMwMTAwMDAwMDA4MDAyMDAwMDkwNDYKKzoxMEM2ODAwMDAwMDAxOTExMDAwMDAwODAwMjAwMDA5MDAwMDA3MzEwRUIKKzoxMEM2OTAwMDAwMDAwMERDMEYwMDk3OTIwMDAwMDAwMDAwMDAwMDAwODYKKzoxMEM2QTAwMDA3MDAwMzMyNDA0MjAwMDAwMDAwMDBBODAyMDAzNjMyQkEKKzoxMEM2QjAwMDAwMDAwMDAwMDAwODAwMDAwNzgwMkEzMjAwMDAwMDAwOEYKKzoxMEM2QzAwMDAwMTAwMDAwMDcwMDk3MzIwMDAwMDAwMDAwMTgwMDAwNzIKKzoxMEM2RDAwMDA3QzA5NjMyMDg4MDkwMTAxMjAwMDA0MDAyODAzNkIyRTcKKzoxMEM2RTAwMDAwMDAwMDAwMDAwMDAwODAwMjAwMDAzMDAwMDA5MjEwRjYKKzoxMEM2RjAwMDEyMDAwMDlDMEZDMDIxQjIxRDAwOTUxMDA0MDAwMDgwQTQKKzoxMEM3MDAwMDcyQkUxN0I4MDAwMDkyMTAwMDAwMDBGODFFODBFRjlBNjkKKzoxMEM3MTAwMDEzMDAwMDAwMDAwMDAwOUM3RkJFMTczODAwMDA5ODEwMzYKKzoxMEM3MjAwMDA0MDAwMDgwMTJDMEY5QkMwMDAwOTIxMDAwMDAwMEY4NjQKKzoxMEM3MzAwMDFFODBFRjlBMDAwMDAwMDAwMDAwMDA5QzBGMDA3RTMyNzcKKzoxMEM3NDAwMDAwMDAwMDAwMDAwMDAwQTAwRjAwN0UzMjAwMDAwMDAwOEEKKzoxMEM3NTAwMDAwMDAwMEE0MEYwMDdFMzIwMDAwMDAwMDAwMDEwMDAwNzUKKzoxMEM3NjAwMDA3MDBGQTUyMDAwMDAwMDAwMDAwMDA5QzAyMDAwMDMyQTYKKzoxMEM3NzAwMDRDNDIwMDAwMDAwMDAwQTgwMjAwMzYzMjAwMDAwMDAwMTkKKzoxMEM3ODAwMDAwMDgwMDAwMDc4MDJBMzIwMDAwNkUxMTAwMDAwMDgwQkYKKzoxMEM3OTAwMDAyMDAwMEQwMDAwMDcyMTEwMDAwMDA4MDAyMDAwMEQwRjIKKzoxMEM3QTAwMDAwMDAwMDAwMDAwMDAwMENDQkMxQjAzNDAwMDAwMDAwMEQKKzoxMEM3QjAwMDAwMDAwMDlDMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQ4RDEKKzoxMEM3QzAwMDAyMDAwMDMyMDAwMEYxMEUwMDAwMDAyODA5QzBCMEQyQzMKKzoxMEM3RDAwMDAwMDBBMjEwMDQwMDAwODAwMjgwOTJCMjAwMDBBNjEwQTcKKzoxMEM3RTAwMDEyMDAwMDlDMEZDMDIxQjIxRDAwQTkxMDA0MDAwMDgwOUYKKzoxMEM3RjAwMDcyQkUxN0I4MDAwMEE2MTAwMDAwMDBGODFFODBFRjlBNjUKKzoxMEM4MDAwMDEzMDAwMDAwMDAwMDAwOUM3RkJFMTczODAwMDBBQzEwMzEKKzoxMEM4MTAwMDA0MDAwMDgwMTJDMEY5QkMwMDAwQTYxMDAwMDAwMEY4NUYKKzoxMEM4MjAwMDFFODBFRjlBMDIwMEFFMTAwNDAxMDBCNDhGNERGQkIwRTEKKzoxMEM4MzAwMDAwMDA3MzEwMDAwMDAwODAwMjAwMDA5MDA4MDAwMDAwNUIKKzoxMEM4NDAwMDAwMDAwMEY4OTM0MDAxMzkwMDAwMDAwMDAwMDAwMEI0MkYKKzoxMEM4NTAwMDFGNDBGQjM1RkUwMDAwMDAwMDAwMDA0ODAzMDAzNjMyOTgKKzoxMEM4NjAwMDAwMDAwMDAwMDAwMDAwNDQwMzAwMDAzNDAwMDBBMjEwOUIKKzoxMEM4NzAwMDAwMDAwMDBDOEJDMUIwOTQwMDAwN0UxMTAwMDgwMDAwODUKKzoxMEM4ODAwMDA3NDBGQTkyMDAwMDZFMTEwMDA4MDAwMDA3NDBGQUQyM0IKKzoxMEM4OTAwMDA4ODBCNTEwMTIwMDAwNTAwMjgwMzZCMjAwMDA3MzExRkIKKzoxMEM4QTAwMDAwMDAwMDgwMDIwMDAwRDAwMDAwODAxMTAwMDAwMDgwMjUKKzoxMEM4QjAwMDAyMDAwMDkwMDAwODAwMDAwMDAwMDA5QzBGMDAzNjMyQ0IKKzoxMEM4QzAwMDAwNDQwMDAwMDAwMDAwQTgwMjAwMzYzMjAwMDAwMDAwMTIKKzoxMEM4RDAwMDAwMDAwMEEwMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEUwQTQKKzoxMEM4RTAwMDA3MDBCMDMyMDAwMDAwMDAwMDAwMDBBMDEyMDAyQTNBNDkKKzoxMEM4RjAwMDAwMDBCQjEwMDQwMTAwOUMxRkMwRjlCQzAwNDQwMDAwRjQKKzoxMEM5MDAwMDAwMDAwMEE4MDIwMDM2MzIwMjAwN0QxMTAwMDAwMEEwRTUKKzoxMEM5MTAwMEYyMEIwMDk5MDAwMEM4MTAwNDAxMDA4MDAyNDBGQUIyMzYKKzoxMEM5MjAwMDAwNDQwMDAwMDAwMDAwQTgwMjAwMzYzMjAwMDBDQTEwRDcKKzoxMEM5MzAwMDAwMDAwMDgwMDIwMDAwRDAwMDAwRDcxMDAwMDAwMDg0M0EKKzoxMEM5NDAwMDAyMDAwMEQyMDAwMDAwMDAwMDAwMDBFMDA3QzAzQzMyRkUKKzoxMEM5NTAwMDAwMDBDNDEwOEUwMTAwODAwMjQwMjhCMjAwNDQwMDAwOTQKKzoxMEM5NjAwMDAwMDAwMEE0MEYwMDM2MzIwMDAwQjMxMDAwMDAwMDgwNjkKKzoxMEM5NzAwMDAyMDAwMDkwMDA0NDAwMDAwMDAwMDBBNDhGNERGQTNBMkQKKzoxMEM5ODAwMDAwMDBCMzEwMDAwMDAwODAwMjAwMDA5MDAwMDAwMDAwRDIKKzoxMEM5OTAwMDAwMDAwMDlDMEYwMDAwMzIxMDAwMDAwMTAwMDAwMEFDRkQKKzoxMEM5QTAwMDBGMDAzNzMyMDAwMERDMTAwMDAwMDA4MDAyMDAwMEQwRDEKKzoxMEM5QjAwMDA4MDBDQzEwMDQwMTAwODA4MkNERjlCQzAwMDAwMDAwMEEKKzoxMEM5QzAwMDAwMDAwMDlDMEYwMDAwMzIwRTAwMDAwMTAwMDAwMEFDQ0YKKzoxMEM5RDAwMDBGMDAzNzMyMDAwMERDMTAwMDAwMDA4MDAyMDAwMEQwQTEKKzoxMEM5RTAwMDBCMDBEMDEwMDQwMTAwODA4MkNERjlCQzIwMDAwMDAwQjMKKzoxMEM5RjAwMDAwMDAwMDlDMEYwMDM2MzIwRjAwMDAwMTAwMDAwMEFDNjgKKzoxMENBMDAwMDBGMDAzNzMyMDAwMERDMTAwMDAwMDA4MDAyMDAwMEQwNzAKKzoxMENBMTAwMDI3MDBENDEwMDQwMTAwODA4MkNERjlCQzAwMDAwMDAwODIKKzoxMENBMjAwMDAwMDEwMDgwMDIwMDAwNTAwMDAwMDAwMDAwMDAwMDlDOTcKKzoxMENBMzAwMDBGMDAwMDMyMEYwMDAwMDEwMDAwMDBBQzBGMDAzNzMyODEKKzoxMENBNDAwMDAwMDBEQzEwMDAwMDAwODAwMjAwMDBEMDIwMDBEOTEwOUYKKzoxMENBNTAwMDA0MDEwMDgwODJDREY5QkMwMDAwMDAwMDAwMDEwMDgwQ0MKKzoxMENBNjAwMDAyMDAwMDUwMDAwMDAwMDAwMDAwMDBFNDAzQzBGOTMyQTIKKzoxMENBNzAwMDBEMDAwMDAxMDAwMDAwRTAwMzAwMzczMjAwMDAwMDAwNUMKKzoxMENBODAwMDAwMDAwMEUwMDNDMEZBMzIwMDAwMDAwMDAwMDAwMEUwRjcKKzoxMENBOTAwMDA3NDAzRTMyMDAwMDAwMDAwMDAxMDA5QzFGQzBGOTVBMTAKKzoxMENBQTAwMDAwMDAwMDAwMDAwMDAwRTAwM0MwRjkzMjAwMDAwMDAwQjgKKzoxMENBQjAwMDAwMDAwMEUwMDc0MDNFMzIwMDAwMDAwMDAwMDAwMDlDNDMKKzoxMENBQzAwMDFGQzBGOTNBRkYwMDAwMDAwMDAxMDBBQzhGQ0RGOTUwMDMKKzoxMENBRDAwMDAwMDAwMDAwMDAwMDAwOUMwRkMwMkYzMjAwMDAwMDAwOEEKKzoxMENBRTAwMDAwMDAwMEZDMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEUwMzYKKzoxMENBRjAwMDA3ODAzRTMyMDAwMDAwMDAwMDAwMDBGQzEyQzAyRjNBMDgKKzoxMENCMDAwMDBGMDBFNzEwMDQwMTAwODA4MkNEMkZCQzAwMDAwMDAwNjAKKzoxMENCMTAwMDAwMDAwMEUwMDc4MDNFMzIwMDAwMDAwMDAwMDEwMEZDNDEKKzoxMENCMjAwMDAyQzBGOTUyMDAwMDAwMDAwMDAwMDBFMDA3MDAzQTMyQTUKKzoxMENCMzAwMDAwMDAwMDAwMDAwMDAwRTAwNzQwM0EzMjAwMDAwMDAwNjIKKzoxMENCNDAwMDAwMDAwMEUwMDc4MDNBMzIwMDAwMDAwMDAwMDAwMEUwMzIKKzoxMENCNTAwMDA3QzAzQTMyMDAwMDAwMDAwMDAwMDA5QzBGQzAyRjMyRDYKKzoxMENCNjAwMDAwMDAwMDAwMDAwMDAwRkMwMjAwMDAzMjAwMDAwMDAwOTUKKzoxMENCNzAwMDAwMDAwMEUwMDcwMDNEMzIwMDAwMDAwMDAwMDAwMEUwN0YKKzoxMENCODAwMDA3NDAzRDMyMDAwMEYyMTA4MzAxMDBGQzEyQzAyRkJBQjIKKzoxMENCOTAwMDAwMDAwMDAwMDAwMTAwRkMwMkMwRjk1MjAwMDAwMDAwOEIKKzoxMENCQTAwMDAwMDAwMDlDMEYwMDAwMzIwQzAwMDAwMDAwMDAwMDA4OTQKKzoxMENCQjAwMDczM0UwMDM5MDAwMDAwMDAwMDAwMDBFMDA3MDAzMDMyNDIKKzoxMENCQzAwMDAwMDAwMDAwMDAwMDAwOUMxRkMwRjkzQTcwMDBGNzEwNDAKKzoxMENCRDAwMDA0MDEwMDgwODJDREY5QkMwMDAwMDAwMDAwMDAwMDBDQzAKKzoxMENCRTAwMDAzMDAwMDMyMDAwMDAwMDAwMDAwMDBFMDA3MDAzMDMyQzcKKzoxMENCRjAwMDAwMDAwMDAwMDAwMDAwMTAwMzAwMDAzMjAwMDAwMDAwRjAKKzoxMENDMDAwMDAwMDAwMEUwMDcwMDMwMzIwMDAwMDAwMDAwMDAwMDlDM0YKKzoxMENDMTAwMDBGMDAwMDMyMDAwMDAwMDAwMDAwMDBBMDBGQzAyOTMyMDkKKzoxMENDMjAwMDAwMDAwMDAwMDAwMDAwOUMwMkMwRjkzMjAwMDAwMDAwN0IKKzoxMENDMzAwMDAwMDAwMEE0MEZDMDJDMzIwMDAwMDAwMDAwMDAwMDlDODcKKzoxMENDNDAwMDAyMDBGQTMyMTgwMDAwMDAwMDAwMDAyQzczN0VGQTM5NEUKKzoxMENDNTAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMzAzMjAwMDAwMDExN0EKKzoxMENDNjAwMDg1MDEwMDlDMUZDMEY5QkEwMDAwMDAwMDAwMDEwMDgwOEYKKzoxMENDNzAwMDAyMDAwMDUwMDEwMDAwMDEwMDAwMDA5QzBGMDAzNzMyNEMKKzoxMENDODAwMDAwMDBFMTEwMDAwMDAwODAwMjAwMDBEMDBFMDAwRjExMzMKKzoxMENDOTAwMDA0MDEwMDgwODJDREZBQkMwMDAwMDAwMDAwMDAwMEUwMkEKKzoxMENDQTAwMDA3MDAwMDMyMDAwMDAwMDAwMDAwMDBFMDA3MDAwMDMyMzIKKzoxMENDQjAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMDAzMjAwMDAwOTExNDEKKzoxMENDQzAwMDAwMDAwMDlDM0ZDMEY5OUExQzAwMDkxMTA0MDEwMDgwN0IKKzoxMENDRDAwMDgyQ0RGQUJDMDIwMEUxMTAwMDAwMDA5QzhGQ0RGOURBOTEKKzoxMENDRTAwMDAwMDAwMDAwMDAwMTAwODAwMjAwMDA1MDAxMDAwMDAyNkUKKzoxMENDRjAwMDAwMDAwMDlDMEYwMDM3MzIwMDAwRTExMDAwMDAwMDgwQUYKKzoxMENEMDAwMDAyMDAwMEQwMEUwMDE3MTEwNDAxMDA4MDgyQ0RGQUJDOTEKKzoxMENEMTAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMDAzMjAwMDAxMzExRDYKKzoxMENEMjAwMDAwMDAwMDlDMUZDMEY5OUEyNjAwMTMxMTA0MDEwMDgwMjYKKzoxMENEMzAwMDgyQ0RGQUJDMDAwMDAwMDAwMDAxMDA4MDAyMDAwMDUwMUIKKzoxMENENDAwMDAwMDAwMDAwMDAwMDAwQTgwRjQwMjkzMjAwNDQwMDAwNEQKKzoxMENENTAwMDAwMDAwMEE4MDIwMDM2MzIwMDAwMDgxMTAwMDAwMDgwMjgKKzoxMENENjAwMDAyMDAwMEQwMDAwMDEyMTEwMDAwMDA4MDAyMDAwMEQwN0MKKzoxMENENzAwMDAwMDBFNTEwMDAwMDAwODAwMjAwMDBEMDAwMDAwMDAwNkMKKzoxMENEODAwMDAwMDAwMEUwMDc4MDE4MzIwMDAwMDAwMDAwMDAwMEUwMTIKKzoxMENEOTAwMDA3NDAxQTMyMDAwMDAwMDAwMDAwMDBFMDA3MDAxQTMyQ0QKKzoxMENEQTAwMDAwMDAwMDAwMDAwMDAwRTAwNzgwMUEzMjAwMDAwMDAwRDAKKzoxMENEQjAwMDAwMDAwMEUwMDdDMDFBMzIwMDAwMDAwMDAwMDAwMEEwRTAKKzoxMENEQzAwMDBGMDAwMDMyQTI2MDAzMDAwMDAwMDA1ODAzMDAzNzMyNTkKKzoxMENERDAwMDJCMTEwMDAwMDAwMDAwNUMwMzAwMzYzMjAwMDAwMDAwNTAKKzoxMENERTAwMDAwMDAwMDlDMEY4MDJBMzIwMDAwMkIxMTA0MDAwMDgwRkMKKzoxMENERjAwMDAyNDAyOUIyMDAwMDAwMDAwMDAwMDA1MDgzM0UwMDM0RDEKKzoxMENFMDAwMDAwMDAwMDAwMDAwMDAwNDg4MzNFMDAzNDAwMDAwMDAwRTUKKzoxMENFMTAwMDAwMDAwMDQ0NTMwQTAwMzQwMDAwMkMxMTAwMDAwMDg4NzgKKzoxMENFMjAwMDBGNDAyQjkyMDAwMDAwMDAwMDAwMDA5MDBGMDAyODMyRkQKKzoxMENFMzAwMDAwMDAwMDAwMDAwMDAwOTQwRjAwMjkzMjAwMDAwMDAwRjQKKzoxMENFNDAwMDAwMDAwMDk4MEY4MDJBMzIwMDAwMDAwMDAwMDAwMEE4QjcKKzoxMENFNTAwMDAyQzBGOTMyMzExMTU4MTEwMDAwMDBCMDBGMDAzNjkyQjMKKzoxMENFNjAwMDA3MDAzNDExMDQwMDAwODA4MjREMjlCQzAwMDAwMDAwM0UKKzoxMENFNzAwMDAwMDAwMEEwMUYwMEZBM0EwMDAwMjgxMTAwMDAwMDlDRUEKKzoxMENFODAwMDBGODAyQTkyQzAwMTAwMDAwMDAwMDBBQzBGMDAzNjMyNzMKKzoxMENFOTAwMDAxMDAwMDAwMDAwMDAwOUMwMjAwMzYzMjAwMDA0NDExMzYKKzoxMENFQTAwMDAwMDAwMDgwMDIwMDAwRDAxRjAwM0ExMTA0MDAwMDgwNDIKKzoxMENFQjAwMDgyQ0QyOUJDQzAwMDAwMDAwMDAwMDBBQzhGQ0RGQTNBNDIKKzoxMENFQzAwMDAwMDAzNjExMDAwMDAwOUMxMkMwMjk5QTAwMDBGNjEwRTQKKzoxMENFRDAwMDAwMDAwMDgwMDIwMDAwRDAwMDAwRUMxMDAwMDAwMDgwODQKKzoxMENFRTAwMDAyMDAwMEQwMDAwMDQyMTEwNDAwMDA4MDUyOEFGQUJDMDcKKzoxMENFRjAwMEEyNjAwMzAwMDAwMDAwNTgwMzAwMzczMjQyMTEwMDAwMTYKKzoxMENGMDAwMDAwMDAwMDVDMDMwMDM2MzIwMDAwMDAwMDAwMDAwMDUwMEEKKzoxMENGMTAwMEEzM0UwMDM0MDAwMDAwMDAwMDAwMDA0OEEzM0UwMDM0OUYKKzoxMENGMjAwMDAwMDAwMDAwMDAwMDAwNDQ1MzBBMDAzNDAwNDQwMDAwRTgKKzoxMENGMzAwMDAwMDAwMEE0MEYwMDM2MzIwMDAwQjMxMDAwMDAwMDgwOTMKKzoxMENGNDAwMDAyMDAwMDkwMDAwMDAwMDAwMDAwMDBDNDAyQzBGQTMyOUQKKzoxMENGNTAwMDAzMDAwMDAwMDAwMDAwOUMwRjAwMzYzMjAwMDAwMDAwQkIKKzoxMENGNjAwMDAwMDAwMEJDMEY0MDJGMzIwMDAwNEIxMTA0MDAwMDlDNTkKKzoxMENGNzAwMDFGQzBGOUJDMDAwMDRBMTEwNDAwMDA4MDAyNDAyRkIyMUIKKzoxMENGODAwMDAwMDA0NzExMDAwMDAwRTAwNzAwMkM5MjAwMDA0NzExNEMKKzoxMENGOTAwMDAwMDAwMEUwMDcwMDM2OTIwMDAwMDAwMDAwMDAwMEUwMDIKKzoxMENGQTAwMDA3NDAyQzMyMDAwMDAwMDAwMDAwMDBFMDA3ODAyQzMyMTcKKzoxMENGQjAwMDAwMDAwMDAwMDAwMDAwRTAwN0MwMkMzMjAwMDAwMDAwNkMKKzoxMENGQzAwMDAwMDAwMEUwMDcwMDJEMzIwMDAwMDAwMDAwMDAwMEUwM0IKKzoxMENGRDAwMDA3NDAyRDMyMDAwMDAwMDAwMDAwMDBFMDA3ODAyRDMyRTUKKzoxMENGRTAwMDAwMDAwMDAwMDAwMDAwRTAwN0MwMkQzMjAwMDAwMDAwM0IKKzoxMENGRjAwMDAwMDAwMEUwMDdDMEZCMzIwMDAwMDAwMDAwMDAwMEUwN0QKKzoxMEQwMDAwMDA3ODAyRjMyMDAwMDAwMDAwMDAwMDBFMDA3QzAyRjMyMzAKKzoxMEQwMTAwMDE4MDAwMDAwMDAwMDAwRjg3MzBBMDIzOTAwMDAwMDAwNDgKKzoxMEQwMjAwMDAwMDEwMEUwMDc4MDNGNTJGRjAwMDAwMDAwMDAwMDQ0QzQKKzoxMEQwMzAwMDAzMDAzNjMyMDAwMDAwMDAwMDAwMDBFMDA3MDBGOTMyNzMKKzoxMEQwNDAwMDAwMDAwMDAwMDAwMDAwRTAwNzQwMjgzMjAwMDAwMDAwNUYKKzoxMEQwNTAwMDAwMDAwMEUwMDc4MEY4MzIwMzAwMDAwMDAwMDAwMDlDQTAKKzoxMEQwNjAwMDBGMDAzNjMyMDAwMDAwMDAwMDAwMDBCQzBGQzAyQjMyNjEKKzoxMEQwNzAwMDAwMDA2MTExMDQwMDAwOUMxRkMwRjlCQzAwMDA2MDExOTkKKzoxMEQwODAwMDA0MDAwMDgwMDJDMDJCQjIwMDAwNUQxMTAwMDAwMEUwMkYKKzoxMEQwOTAwMDA3QzAyODkyMDAwMDVEMTEwMDAwMDBFMDA3MDAzNjkyRjIKKzoxMEQwQTAwMDAwMDAwMDAwMDAwMDAwRTAwNzQwRjkzMjAwMDAwMDAwMkUKKzoxMEQwQjAwMDAwMDAwMEUwMDc0MDI5MzIwMDAwMDAwMDAwMDAwMEUwMEUKKzoxMEQwQzAwMDA3ODAyOTMyMDAwMDAwMDAwMDAwMDBFMDA3QzAyOTMyN0MKKzoxMEQwRDAwMDAwMDAwMDAwMDAwMDAwRTAwNzAwMkEzMjAwMDAwMDAwMEQKKzoxMEQwRTAwMDAwMDAwMEUwMDc0MDJBMzIwMDAwMDAwMDAwMDAwMEUwREQKKzoxMEQwRjAwMDA3ODBGOTMyMDAwMDAwMDAwMDAwMDBFMDA3QzAyQTMyN0IKKzoxMEQxMDAwMDAwMDAwMDAwMDAwMDAwRTAwN0MwMkYzMjAwMDAwMDAwMTcKKzoxMEQxMTAwMDAwMDAwMEUwMDc0MDJCMzIwMDAwMDAwMDAwMDAwMEUwQUIKKzoxMEQxMjAwMDA3ODAyQjMyMDAwMDAwMDAwMDAwMDBFMDA3QzBGQjMyNDcKKzoxMEQxMzAwMDAwMDAwMDAwMDAwMDAwODgwMjAwRkIzMjAwMDAwMDAwMzgKKzoxMEQxNDAwMDAwMDAwMDlDMDIwMDAwMzIwMDAwMDAwMDAwMDAwMEQ4MzcKKzoxMEQxNTAwMDAyMDAwMDMyMDAwMDAwMDAwMDEwMDAwMDA3MDA5NzMyQkIKKzoxMEQxNjAwMDAwMDAwMDAwMDAxOTAwMDAwN0MwOTY1MjA4ODA3MjExRUMKKzoxMEQxNzAwMDEyMDAwMDQ4MDI4MDM2QjIwMDAwMDAwMDAwMDAwMDgwNkIKKzoxMEQxODAwMDAyMDAwMDMwMDAwMDc0MTExMjAwMDA5QzBGQzAyMUIyOTgKKzoxMEQxOTAwMDFEMDA3NzExMDQwMDAwODA3MkJFMTdCODAwMDA3NDExRTIKKzoxMEQxQTAwMDAwMDAwMEY4MUU4MEVGOUExMzAwMDAwMDAwMDAwMDlDQjEKKzoxMEQxQjAwMDdGQkUxNzM4MDAwMDAwMDAwNDAwMDA4MDEyQzBGOTVDMzgKKzoxMEQxQzAwMDAwMDA3NDExMDAwMDAwRjgxRTgwRUY5QTAwMDAwMDAwQkIKKzoxMEQxRDAwMDAwMDAwMEI0MEY0MEZCMzUwMDAwMDAwMDAwMDAwMDlDODAKKzoxMEQxRTAwMDAyMDAwMDMyNEM0MjAwMDAwMDAwMDBBODAyMDAzNjMyNkIKKzoxMEQxRjAwMDAwMDAwMDAwMDAwODAwMDAwNzgwMkEzMjAwMDA2RTExQzUKKzoxMEQyMDAwMDAwMDAwMDgwMDIwMDAwRDAwMDAwNzIxMTAwMDAwMDgwQzkKKzoxMEQyMTAwMDAyMDAwMEQwMDAwMDAwMDAwMDAwMDAwQ0NCQzFCMDM0QzAKKzoxMEQyMjAwMDAwMDAwMDAwMDAwMDAwOUMwMjAwMDAzMjAwMDAwMDAwMkUKKzoxMEQyMzAwMDAwMDAwMEQ4MDIwMDAwMzIwMDAwOEIxMTAwMDAwMDI4MUUKKzoxMEQyNDAwMDA5QzBCMEQyMDAwMDgxMTEwNDAwMDA4MDAyODA5MkIyQjcKKzoxMEQyNTAwMDAwMDA4NTExMTIwMDAwOUMwRkMwMjFCMjFEMDA4ODExMzIKKzoxMEQyNjAwMDA0MDAwMDgwNzJCRTE3QjgwMDAwODUxMTAwMDAwMEY4QUQKKzoxMEQyNzAwMDFFODBFRjlBMTMwMDAwMDAwMDAwMDA5QzdGQkUxNzM4NEMKKzoxMEQyODAwMDAwMDA3MzEwMDQwMDAwODAxMkMwRjlCQzAwMDA4NTExN0EKKzoxMEQyOTAwMDAwMDAwMEY4MUU4MEVGOUEwMDAwMDAwMDAwMDAwMEZDNzMKKzoxMEQyQTAwMDAyMDAwMDMyMDIwMDAwMDAwMDAwMDBBMEYyMEIwMDM5NzIKKzoxMEQyQjAwMDAwMDA4RjExMDQwMTAwMjgwOTM0QjBCQTAwMDAwMDAwRkEKKzoxMEQyQzAwMDAwMDEwMDI4MDkwMDAwNTIwMDAwMDAwMDAwMDAwMEE4MzIKKzoxMEQyRDAwMDIyQzAyRjM3MDAwMDAwMDAwMDAwODRDMDM3QUNCMDMyRkQKKzoxMEQyRTAwMDAwMDAwMDAwMDAwMDAwMEMwQjAwMDAzMkZGRkYwMDAwRjcKKzoxMEQyRjAwMDAwMDAwMEMwQUY0REIwMzAwMDAwOTUxMTgwMDAwMDgwRUMKKzoxMEQzMDAwMDAyNDBCMEI2MDAwMDAwMDAwMDAwMDBDMDZGMDFGQzM1MTQKKzoxMEQzMTAwMDAwMDAwMDAwMDAwMDAwMDAwNzNGMDEzMjAwNDIwMDAwNTIKKzoxMEQzMjAwMDAwMDgwMDAwODc4RDJBM0EwMDAwMDAwMDAwMTAwMDAwNkQKKzoxMEQzMzAwMDA3MDBCMDMyMDAwMDAwMDAwMDE4MDAwMDA3MDBEMDMyRTMKKzoxMEQzNDAwMDAwMDAwMDAwMDAwMDAwQzAzRkMxMzgzNDAwMDAwMDAwQjEKKzoxMEQzNTAwMDEyMDEwMDQ4RjIwMUZDNTQwMDAwOUExMTAwMDAwMDgwMDQKKzoxMEQzNjAwMDAyMDAwMDkwMDAwMEZGRkYwMDAwMDA4MDAyMDAwMDkwMUIKKzowQ0QzNzAwMDAwMDAzNjAwMDAwMDAwODAwMjAwMDA5MDY5Cis6MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUveWFtLzEyMDAuYmluLmloZXggYi9maXJtd2FyZS95YW0vMTIwMC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDM0ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUveWFtLzEyMDAuYmluLmloZXgKQEAgLTAsMCArMSwzNDIgQEAKKzoxMDAwMDAwMEZGRjIwMEE1QURGRkZFOUZGRkVGRjNDQkZGREJGQ0YyOUQKKzoxMDAwMTAwMEZGRjZGRjNDQkZGREJGREY2RTNGNkZGMTdEQjRGREJGNUMKKzoxMDAwMjAwMERGNkYzRjZGRjcwQkZGREJGREYyRkZGNkZGRkZGRkZGMTgKKzoxMDAwMzAwMEYwQ0ZGRkZGRkZGRUZGRkZERkZGRkZGRkVGRkZGRkZGNDAKKzoxMDAwNDAwMEZERkZGRkZGRkVGRkZGRkZGRkZGRjFGRkZGRkZGRkJGMTEKKzoxMDAwNTAwMEZGRkZGN0ZGRkZGQkZGRkZGRkZDRkZGRUZGRkZGRkYwQ0YKKzoxMDAwNjAwMDVGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNDEKKzoxMDAwNzAwMEZGRkZGRkZGRkZGN0ZGRkZGRkYxRkZGRkZFN0ZCRkZGNjcKKzoxMDAwODAwMEZGRkZGRkZGRkZGRkZGRkZGN0ZGRkJGRkZGRkZGMDlGRkIKKzoxMDAwOTAwMEZGRkZGRkZFRkZGREZGRkZGRkZGREZGRkZGRkZGN0ZGOUIKKzoxMDAwQTAwMEZGRkZGQkZGRkJGRkZGRkZGMEZGRkZGRkZGRkZGRkZGNzcKKzoxMDAwQjAwMEY3RkZGRkZCRkZGRkZGRkVGRkZGRkZFRkZGRjA1RkZGMUMKKzoxMDAwQzAwMEZGRkZGRUZGRkZFRkZGRkZGQkZGRkZGRkZGRkZGRkZGNTUKKzoxMDAwRDAwMEZGQkZGRkZGREZGN0ZGRjFGRkZGRkZGRkZGRkZGRkZGQTYKKzoxMDAwRTAwMEZGRkZGRkZGRkZGQkZFRkZGRkZGRkZGRkYwRkZGRkZGMzQKKzoxMDAwRjAwMEZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVCMjUKKzoxMDAxMDAwMEZGRkZGRkZERkZCRkYxRkZGRkZGRkZERkZGRkZGRkZCNzMKKzoxMDAxMTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDZGRkZGRkZGOEUKKzoxMDAxMjAwMEZFRkZGRkZGRkZGRkZGRkZGRkZGREZGRkZGRkZGRkZGMDAKKzoxMDAxMzAwMEZGRkZGN0ZGRkZGMUZGRkZGN0JGRTdGRkZGRkZGRkZCNDkKKzoxMDAxNDAwMEZGRkZGRkZGRkZGRjc3RkZGRkZGRjBGRkZGRkZGRkZFNTcKKzoxMDAxNTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQUYKKzoxMDAxNjAwMEZGRkZGRkZGRjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQUQKKzoxMDAxNzAwMEZGRkZGRkZGRkZGRkZGRkZGRkYwMUZGRkZGRkZGRURCQTMKKzoxMDAxODAwMEZGRkZGNUE1RkQ0QjZFRUYzMzMyREREMzRBRDY5MkZFNkQKKzoxMDAxOTAwMEIzM0ZCREYxRkFEQkZFRjdGNjk2QkRCREZGQkRGRkVENDcKKzoxMDAxQTAwMDdGNkI3RkZCREZGRUZCRkU5MENGRkZGRkZGRkVCRUVGMEUKKzoxMDAxQjAwMEZGRkZEQjVGRjZGRkY2OEZGREE1RERGRkZGRkZGRjZGQTMKKzoxMDAxQzAwMDdGREJGMUZDQkZGRjZGRkZFRkZDNUI1RERBREZGNEZGNkQKKzoxMDAxRDAwMEYyRkZGREJGRkZGRkZGRDAxRkZGRkZGRkZFRkZGRkZGOEUKKzoxMDAxRTAwMEZGRkJFRkI3RkMzM0ZGRkJGRjA0NkFGMzNDMzZGRkYwODUKKzoxMDAxRjAwMDBGRjEwRkZGRkZGRkYzMTU3MjBGRjE2RkZGRkU5NDNGM0EKKzoxMDAyMDAwMEZGRkZGRjdCRkZGRkYwRkZGRkZGRkZGRUZGRkZGRkYwQTEKKzoxMDAyMTAwMEY3RUZCN0ZDMzNGRkZGRkYwNDZBRjMzQzM2RkZGMDBGNDQKKzoxMDAyMjAwMEYxMEZGRkZGRkZGMzE1NzM4RkYyNkZGRkZFOTQzRkZGOTcKKzoxMDAyMzAwMEZGRkY3RDlGRkZGMDBGRkZGRkZGRkVGRkZGRkZGRjlFMTEKKzoxMDAyNDAwMEZGRkNFRkQzRkJGRjdGRjU1RkZFNTlGRkZGRkZGQ0YxRTMKKzoxMDAyNTAwMEZFN0ZGRkZGRkExN0ZGRTdFRkVGRkZGRjNGRjFGRkZGMjIKKzoxMDAyNjAwMEZGRkZGRkZGRjBGRkZGRkZGRkZFRjVGRkJGRkZGQ0VBMTAKKzoxMDAyNzAwMEZGRjBGRkZGQkZGOTNGQjFFRkZGRDdGRkZCRkZGMEZGM0MKKzoxMDAyODAwMEZGRjNGRkRGRkY3QkZGRkRGRkY2RkZCRkZGRkZCRkZGQjkKKzoxMDAyOTAwMEZGRkZEQUYwRkZGRkZGRkZGRUYyQzAwMTAwMDAwMjAyRTUKKzoxMDAyQTAwMDAyMDIwMDQwNDA0MDEwMDAwMDAwMjAwMDAwMDEwMDAwNTkKKzoxMDAyQjAwMDAwMDAwMDAwMTkwMDA0MDQwMDAwMDAwMDAwMDAwMDEwMEQKKzoxMDAyQzAwMDAwM0NGMEFGRkZGRkZGRkVGREJGRkZGRkZCRkZGREZGQTgKKzoxMDAyRDAwMEZGN0ZGRkZGQkZGRkVGRkZGRkZERkZGRkYxRkZERkZGMkUKKzoxMDAyRTAwMEZGRkZGRkZGRkZCRkZFRkZGRkZFRkZGRkZGRkZGRkRGODAKKzoxMDAyRjAwMERCRjA2RkZGRkZGRkZFRjBCRkRGRkY3RkZGRkZGRkZGQzEKKzoxMDAzMDAwMERGREZGRkVGRkY5RUVGRkZGRjdGRkZGMUVGRkZGRkZGNUMKKzoxMDAzMTAwMEY3RkFCRkZGRkZGRTQ3RUZGRkJERjZGRkZGREZGNUYwODcKKzoxMDAzMjAwMEYwRUZGRkZGRkZGRUY4MzAwMDAwMDAwNDAwMDEwMjA4QkMKKzoxMDAzMzAwMDE2MDAwMDAwODAwMDAxMDIwMDgwMDEwQzAyMDAwMDAxOTQKKzoxMDAzNDAwMDAwMDAyMDAwMDAwNjAwMjAwMDEwMDAxNDAwMDRDMUYwOEUKKzoxMDAzNTAwMDJGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZCRkZGRjdGMDIKKzoxMDAzNjAwMEVDRkZGRkZBRkZCRkZGNkZGRkUxRkZGRkZGRkZCREZFRTYKKzoxMDAzNzAwMDQ2RkZFRjdGQ0RERkZGRkZGREZGQkRGRjdGN0ZGMDRGMkIKKzoxMDAzODAwMEZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0UKKzoxMDAzOTAwMEZGRkZGRkZGRkZGRkZGRkZGMUZGRkZGRkZGRkZGRkZGN0IKKzoxMDAzQTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwRkZGNUMKKzoxMDAzQjAwMEZGRkZGRUZGRkZGRkZEQTRCQ0NENkQ2QjZGNUJEQzMzNjkKKzoxMDAzQzAwMDVBRjZGN0Y2QjMzRkJEQzFGQTVBRjZGNkI2RjdGRkJERDcKKzoxMDAzRDAwMEJCM0NDRUNGMzRFRjMzQkJDQ0ZGRkZGRkYwNEZGRkZGNzIKKzoxMDAzRTAwMEZGRkVCRkZGRkZGRkRCRkZGNkQ2RkZGREZEQkZGRkFENEEKKzoxMDAzRjAwMEJGRjk3RjZGRkNEQkYxRkRCRkZGNkZGRkZGREFEQkZDQjYKKzoxMDA0MDAwMERCRkY3NjhGRjZGRkNEQUJGRUZCRkZEMEZGRkZGRkZGREMKKzoxMDA0MTAwMEZFRkY5RkZGRjQyMEFGNkQwQkMxN0JGRkZGRkZDQkZGMDMKKzoxMDA0MjAwMDNGRjBFRjdGMEZGMUMzM0NGRkZGRkZGRkZGRkZGODBCMzMKKzoxMDA0MzAwMDFENkE2NDA1NkI5OTAxRkZGREVGRjAyRkZGRkZGRkZFQzIKKzoxMDA0NDAwMEZGRkZGRkY0MDAyRkNDMEJDMzdGRkZGRkZGMEFERkJGQ0UKKzoxMDA0NTAwMEZEN0ZGRkZGRjFDM0JGRkZGRkZGRkZGRkZGRjA0QTBFNkQKKzoxMDA0NjAwMDk2NjQwMjk3OTkxMEZGRkZGRkYwREZGRkZGRkZGRUZGOEEKKzoxMDA0NzAwMEZGRkZGRTg0RjlENTI3RjE3RkZGRjhFQkRGRjNDRjNGRDUKKzoxMDA0ODAwMDFGRkZGNzExRkZDRkZGRkU2N0ZGRkZGRkZGQzRGRkZGNTYKKzoxMDA0OTAwMEIzQTFGRkY5RTBGRkZGRkZGMEVGRkZGRkZGRkVGNUZGNjUKKzoxMDA0QTAwMEZGRkI3RkUwRkZDN0ZFN0YzRkZGRkQ3NzhEN0YwRkZGRTQKKzoxMDA0QjAwMEMzRkZGMUJGOEZDRkZGRkZERDdCRkZGNkZBRjdGRjQwRjEKKzoxMDA0QzAwMDlGRjk3RkQ4RkZGRkZBRjAxRkZGRkZGRkZFRjFDMDAwOEEKKzoxMDA0RDAwMDAwMDMwMDAwMDAwMDAwMDAwMDAwNDAwMDEwMDAwMDEwQjkKKzoxMDA0RTAwMDAwMDEwMDEwMjAyMDAwMDAxMDAwMDQwMTA1MDAwMDAwQTEKKzoxMDA0RjAwMDAwNDA0MDAwMDAzQ0YwMUZGRkZGRkZGRUZEQkZGRkZGN0MKKzoxMDA1MDAwMEZGRkZGRTdGN0ZGRkVGRkZGRkRGRkZGRkRGRkZFRkY3NjQKKzoxMDA1MTAwMEYxRkZGRkZGRkZERkZGRkZGN0ZGRkZGRkZDRkRGRjdGQTYKKzoxMDA1MjAwMDdFRkZGRkZGREJGMDZGRkZGRkZGRkVGMEJCRkZGRkZGNzMKKzoxMDA1MzAwMEZGRkZGRUVCRkQ2RkZGRjdGRUY1N0ZGRkZGN0ZCRkIxMTMKKzoxMDA1NDAwMEZGRkY5RkJGRkJGRkZFRkZGRUZGRjdFQkRGQkY1RkREOUYKKzoxMDA1NTAwMEZGREJGREQwRjA2RkZGRkZGRkZFRjgzMDIwMDA0MjAwMTAKKzoxMDA1NjAwMDAwMDAzMDE4MDQwODA5MjE4MjgwMDIwMDA4MDAwMTAwMDAKKzoxMDA1NzAwMDAwMDAwQzIwMTAwMDExMDA0NDg0MDAyMDIwODQ4MDAwMjIKKzoxMDA1ODAwMDAwMDBDMUYwREZGRkZGRkZGRUZGRjdGRkZCRERGOUZGMUIKKzoxMDA1OTAwMERBRkZEQ0RERkNGQkZGQkZGQjNFRDc5NkZFNjFGN0ZGMTkKKzoxMDA1QTAwMDdGRkYzRkZERkZERkNGRjdERkY3QkZGREZGRkVFRkVGODAKKzoxMDA1QjAwMEZFRkZGMDdGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGREMKKzoxMDA1QzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxRkZGRkZGNDkKKzoxMDA1RDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMkIKKzoxMDA1RTAwMEZGRjAyRkZGRkZGRkZFRkZGRkZGRjNCREZENEI3NENGQkEKKzoxMDA1RjAwMDczNUJDQjNCREZGRUY3RkVEMzc1QUNBMUZCREZGRUY3RjEKKzoxMDA2MDAwMDc2OTZCNTI0QkRBNUFENDkyRjY5MkI1MjVCQkRGRkZGODIKKzoxMDA2MTAwMEYwQ0ZGRkZGRkZGRUJGRkZGRkZGREJGRkY2RkVGRkNDQ0IKKzoxMDA2MjAwMEE3RkJBREZGN0Y2RkZGNkQ3RkRCRjFGREJGRkY2RkZGQUUKKzoxMDA2MzAwMDZGRkZEQkZGREJGRkY2OTdGNkZGQjVCNUZGRkZGRkQwREYKKzoxMDA2NDAwMEVGRkZGRkZGRkVGRkZGRkZGREE1QkM0M0ZDN0MwM0U3QzAKKzoxMDA2NTAwMEZGRkYyMEZGRkZGRkNDRkQ3REYxRkZGRkZGRkZENTU5MUUKKzoxMDA2NjAwMEJBNTY2NjZBQUQ5QUE5OUE5N0E1QUFCQkZGRkZGMDBGODIKKzoxMDA2NzAwMEZGRkZGRkZFRkVGQkZGRkRGN0ZENDNGRkZENkJFN0ZGMDYKKzoxMDA2ODAwMEZGREZGRkZGRkZGRkZGM0ZGMUZGRkZGRkZGRDU1OUI1ODIKKzoxMDA2OTAwMEE2NjY2QUFEOUFBOTk5NkI1QUFBRkZGRkI3RjAzRkZGMDkKKzoxMDA2QTAwMEZGRkZGRUZGRkZGRkZFOUNGN0ZERDI0MUZGRkZGMjdGNDEKKzoxMDA2QjAwMDhGRkZGRjNERjNGRjE3RjFGRkZGRkZGRkZGN0ZERkZDMjEKKzoxMDA2QzAwMDhGMzhGRkVGMjNGRkZCRjdDOEZGRkZGRkYwOUZGRkZGMEYKKzoxMDA2RDAwMEZGRkVGNTdGRkZGREZGRTRGRkVCRkZDRkJGRkFGRkFCQUYKKzoxMDA2RTAwMEVGRkZGQkZGRjNGRDYxRkZGRkZGRkZGQUZGRkJGRDBERDcKKzoxMDA2RjAwMEZGRkVGRjQzN0ZGRUJGRDBGREZGRkFGMDNGRkZGRkZGOEQKKzoxMDA3MDAwMEZFRjNDMDAwMDAwMDAyMDAwMjAxMDA2MEMwNDAwMDAwRDMKKzoxMDA3MTAwMDAwMDAzNDA0MDAwMTAwMDAwMDAwMDAwMDAwMDg4ODAwMTAKKzoxMDA3MjAwMDAwMDMwMDAwNDAwMDQwMDAwMDNDRjAzRkZGRkZGRkZFRTAKKzoxMDA3MzAwMEZEM0ZGRkZGRkZGRkZGRkY3RjdGQkZGRkZGRkZGRkZGQ0IKKzoxMDA3NDAwMEZGRkZGRkY3RjFGRkZGRkZGRkZGRjdGRkZGRkZGREZGRDkKKzoxMDA3NTAwMEZGRkZGRkZFRkU1RkZGRkZDQkYwREZGRkZGRkZGRUYwQkUKKzoxMDA3NjAwMEZGRkZGREZGRUZFM0RFRUVEOUM1OTNGRkZGRkVGRUZGQzcKKzoxMDA3NzAwMEZCRUVGRUYxRkZGRkZGRkZGRkZERkZCRkY3RkZGRjdGNzcKKzoxMDA3ODAwMEFGQkRERkRGRkJGM0YzRjBGMEFGRkZGRkZGRkVGODM0QTgKKzoxMDA3OTAwMDAwMDY2MTAwMTgwMUEwMDUxNzAwMjAwNTI4MjAwMDAwQjAKKzoxMDA3QTAwMDA1MDA0MTAwMDA0MDAwMDkwMDAxMjA4NjgyMDg0MDAzNDYKKzoxMDA3QjAwMDgwMzA3MDA4MTQwMkMxRjBDRkZGRkZGRkZFRkZGRkZGODMKKzoxMDA3QzAwMEZGRkZCREVGRkJGRkZGRkI5QzdGRUZERkZGQkZFQkRFMUIKKzoxMDA3RDAwMEZGQzE3RkZGRkI3RkZGRkZGRjVGRkZGRkZGREZCRkVGN0IKKzoxMDA3RTAwMDNGRjc4RkVGN0ZGRkYwN0ZGRkZGRkZGRUZGRkZGRkZGNzEKKzoxMDA3RjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDkKKzoxMDA4MDAwMEYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDYKKzoxMDA4MTAwMEZGRkZGRkZGRkZGMDNGRkZGRkZGRkVGRkZGRkZGRkJERkEKKzoxMDA4MjAwMERGRUY3RDZEMkI1QTVERDJERkY2OTJCNkIyQjNBQ0ExOEQKKzoxMDA4MzAwMEZCREZGRUYxRUVGNUY2QkM2QkJEN0RBRjFBRUY1RjZCMzMKKzoxMDA4NDAwMEM2RkZGRkZGRjA1RkZGRkZGRkZFQkZGRkZGRkZEQkZGMDUKKzoxMDA4NTAwMEY2RkZGNkI3RkRBREZEQkZGMzZGRkY2RkZGREJEMUZEMTgKKzoxMDA4NjAwMEJGRkY2RkY1NkJCQzVCM0NEQUVGMTZBRjE2RkZDREFCOEQKKzoxMDA4NzAwMEZGNkZGRkQwRkZGRkZGRkZGRUZGRkZGRkZDQkZGRkZGOEIKKzoxMDA4ODAwMEZGNkMwMzEwQzFGM0ZGRjMzQUYzQ0FGRkFGRjFGRkZGQjAKKzoxMDA4OTAwMEZGRkZEOTk2QTY2NUE2NjY2QTk1Njk2OTZBNUE1QUZGRTYKKzoxMDA4QTAwMEZGNUZGMDFGRkZGRkZGRkVGRkZGRkZGRkJGRkZGRkZGMjgKKzoxMDA4QjAwMEVBMEY1MEMzRjM3RkZGRjNGM0MzRkZBRkYxRkZGRkZGNzYKKzoxMDA4QzAwMEZGRDk5NkE2NjVBNjY2NkE5NTY5Njk2QTVBNUFGRkZGQjYKKzoxMDA4RDAwMEZGRjAzRkZGRkZGRkZFRkZGRkZGRkZEN0ZGRkY1RkMxRkUKKzoxMDA4RTAwMDNGRjc1RUY1Q0U5RTVGM0YxN0ZGRjNFMUZGRkZGRkZGOEYKKzoxMDA4RjAwMEQ4RkZGQUZFNjdGRkZFQkY1QUZGRkZBRkY1RkZGRkZGMEQKKzoxMDA5MDAwMEYwMkZGRkZGRkZGRUY1RkZGRkZERkZGN0ZGRkQ0RTNENjAKKzoxMDA5MTAwMDNGRTcwQkJGOEZGOUZGRUJFM0ZGRTFGRkZGRkNGRkM3RjIKKzoxMDA5MjAwMDlGRkYzRTM5RTVGRkNGOUJGOUZGRkZDNUZGRkZGQUYwQzAKKzoxMDA5MzAwMDVGRkZGRkZGRkVGM0MwMDAwMDAwMDAwMDAwMDA0MDAwNkEKKzoxMDA5NDAwMDAwMDAwMDYwMDAwMDAwMDAwMDAxMDAwMDAwMjAwMDIwMDYKKzoxMDA5NTAwMDAwMDExMDA4MDAwMDAwMDAwMDAwMDAwMDAwM0NGMDRGMDMKKzoxMDA5NjAwMEZGRkZGRkZFRkRCRkZGRkZGRkZGRkZGRkZFRkZGRkJGMUIKKzoxMDA5NzAwMDNGRkZGRkJGRkZGRkZGRkJGMUZGRkZGRkZGRjdGRkY3QTkKKzoxMDA5ODAwMEZGRURGRkZCRkVGRjdGRkY3RkRGRkZGRkRERjAzRkZGOUYKKzoxMDA5OTAwMEZGRkZGRUYwRkZGRkYzRkZGN0ZGRkU1RkZGRjdGRkZGMzQKKzoxMDA5QTAwMERGRkZGRkZGRjdGRTdCRjFGRkZERkRGRkRGREZGRjdERDgKKzoxMDA5QjAwMDczRjlGRkMzN0VGRUZGRUZEN0ZGQ0ZEMEYwNkZGRkZGQ0QKKzoxMDA5QzAwMEZGRkVGODMwMDAwMDQwMDQwMDAxNDEyMDAwMDQwMDAyNTYKKzoxMDA5RDAwMEQ1MDkwMDAyODAwMjAxMDAwMDAwMEEwNDAwMDcwMDAxOUUKKzoxMDA5RTAwMDUwMDE4MDAyNjE0MDQxMEMxNDA4QzFGMDlGRkZGRkZGREQKKzoxMDA5RjAwMEZFRkZGRkZGRkVGRkZGRkZGRURGQ0I1RkZFRUZGRkZFMTAKKzoxMDBBMDAwMEZGM0ZGRjdGRkRDMUZGRkY3RkZGREZGREZDRkRGN0VFMzYKKzoxMDBBMTAwMEZGRkY0RUZGREZDRkRCRUJGRkZGRjAxRkZGRkZGRkZFMEYKKzoxMDBBMjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDYKKzoxMDBBMzAwMEZGRkZGRkZGRjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDQKKzoxMDBBNDAwMEZGRkZGRkZGRkZGRkZGRkZGRkYwMkZGRkZGRkZGRTdGMTYKKzoxMDBBNTAwMEZGRkZGRkZERkZGRkZGRkZGRkZGRkZGRkRGRkZGRkZGQzgKKzoxMDBBNjAwMEY3RkJGRkYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQjAKKzoxMDBBNzAwMEZGRkY3RkZGRkZGRjdGRkZGMDFGRkZGRkZGRkVEREZGOTgKKzoxMDBBODAwMEZGRkZBNUZGNkY2QkU5NkZEQUNBRkJEREVFRjdGNkIyODkKKzoxMDBBOTAwMEIzQTRBMTVCNUJGNkQ3RjRGNzdCQkRCREFEQ0ZFRjdGMTEKKzoxMDBBQTAwMDZCN0YzQkRGREJGRkZGMzBDRkZGRkZGRkZFQkZGRkZGQjIKKzoxMDBBQjAwMEZGRkZGRkY2RkU5NkZGRkRCNUZEQkZBRDdGRkY2RkZGQTkKKzoxMDBBQzAwMERFRDFBREFERTlGRkYxRUNFRkRFM0ZDQkZGRjZGRjMyNUIKKzoxMDBBRDAwMEZGQzVCREZGRkZGRkQwQkZGRkZGRkZGRUZFRkJGRkY0MjIKKzoxMDBBRTAwMDI4QkZGRkZERkJEM0ZGRkY0MkZGRkZGRkVBQjNGQ0MzQkMKKzoxMDBBRjAwMEMxRkYzM0ZGQzAxNTZCNzBGRkYwRjI0RkZGRkMzRTk3NTQKKzoxMDBCMDAwMDNDRkZGRkZERUZGMEJGRkZGRkZGRkVGRkZGRkZGRTc4QTIKKzoxMDBCMTAwMEJGRkZGREYzRUY1NUZGN0VGRkZGRkZFQUIzRkNDM0MxNEMKKzoxMDBCMjAwMEZGMzNGRkMwMTU2RkZGMEZGMEYwMEZGRkZDM0Q2QkMzRUQKKzoxMDBCMzAwMEZGRkZGRUY3RjBDRkZGRkZGRkZFRkZGRkZGRkZGQ0ZGMTEKKzoxMDBCNDAwMEZGMjNGODdGRkY0RUZGRkZGRkZCRjkxN0ZGRjZGMUZGRDIKKzoxMDBCNTAwMENGRUZGRkZGMTNERkU2MkZDN0ZGRkZFN0MxRkRGRkZFNkIKKzoxMDBCNjAwMEZGRkZGRkYwNEZGRkZGRkZGRUY1RkZGRkZGRkVBRUZGQjEKKzoxMDBCNzAwMEZGN0YzQjNGRkM3RkZDRUZGRkZDRTI3QkZGRjFGREVERTUKKzoxMDBCODAwMEVGRkZGRjM1NzNGRkZGRkVGQUZGRkZGRkZFQkZGRkZGMjIKKzoxMDBCOTAwMEZGRkFGMDhGRkZGRkZGRkVGMUMwMDAwMDAwMDAwMDAwMzEKKzoxMDBCQTAwMDAwMDAwMDgwMDAwMDQwMDAwMDAwMEMwNDAxNDA0MDAwRjQKKzoxMDBCQjAwMDAwMzAyODA0MDAwODAwMDAwMDAxMDAwMTAwMDAwMDAwQ0YKKzoxMDBCQzAwMDM4RjAwRkZGRkZGRkZFRkRCRkZGRkZGRkZGRkJGRjdGQzIKKzoxMDBCRDAwMEZGRkY5RkZGRkZGRkZGRkZGRkZGRkZGMUZGREZERkZGRDMKKzoxMDBCRTAwMEZGRkZGRkVERkZGREZGRkZGRkZGRkZCRkJGRkZGRkMzRTUKKzoxMDBCRjAwMEYwM0ZGRkZGRkZGRUYwQkZGREZGQkZGRkZGRkRGRkZGNjgKKzoxMDBDMDAwMEZGRkZGRkZEN0JGRjdGRkZCREZGRjFFRkZGRkZGRERGN0MKKzoxMDBDMTAwMEZERkJGRkZGQkZCRUZGQ0Q3RkZDRjdGNzZGQkZEOEYwMzYKKzoxMDBDMjAwMEVGRkZGRkZGRkVGODMwMDAwMDAwMDQwMDAwQTAwMDAwMEUKKzoxMDBDMzAwMEMwMDAwMDIwMzQwMDAwMDAwQzgxMDAyMEE0MjAwMDEwMUYKKzoxMDBDNDAwMDA4MDQ0ODA4MDA0MDkzMDAxMDAwMzgxODIwQzFGMDNGMDUKKzoxMDBDNTAwMEZGRkZGRkZFRkZGQkZGRkZCOURGRkVCM0ZGRkZFN0ZENzYKKzoxMDBDNjAwMEZGRkYzQkZGN0ZGRkJGRkZDMUZGRkNGRkZGM0Y3N0ZFQTIKKzoxMDBDNzAwMEZFQ0ZGRkJGRkRCRkZGRkVFREYyRkRGN0ZGRjAyRkZGNDAKKzoxMDBDODAwMEZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNzUKKzoxMDBDOTAwMEZGRkZGRkZGRkZGRkZGRjFGRkZGRkZGRkZGRkZGRkZGNzIKKzoxMDBDQTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwQkZGRkZGQTMKKzoxMDBDQjAwMEZGRkVGRkZGRkZGM0FEQ0ZFRjcwQzk3MzNCREY1QjRBNzEKKzoxMDBDQzAwMEY2QjdGRUQ3RjVCQ0MxMzNDQUQ2Qjc2RUY3RkJCREM1QzQKKzoxMDBDRDAwMDI0Q0Y2RjJGNEQyQkJBNUFGRkZGRkZGMEFGRkZGRkZGNUUKKzoxMDBDRTAwMEZFQkZGRkZGRkZGRkY2RjZEN0ZGRkZBREJERkZGRkZGMjMKKzoxMDBDRjAwMEVGRjc3RkZDNUJCMUZEQkQ3NTZGRUY2QUZENUJGQkRCNjIKKzoxMDBEMDAwMDNBQkY4RTlGRkZCRkZERkY2RkZGRDA2RkZGRkZGRkZFNUIKKzoxMDBEMTAwMEZGQkJGRkYwM0ZGRkZGRkRGQjdGREVGRkZGNUFENkJGQUIKKzoxMDBEMjAwMEQ4MkFCRkJGRjFFNUZGQ0NDMEE5NzBGRkYzM0MzQ0ZENjIKKzoxMDBEMzAwMDU3RkQ5ODAzMDBDM0ZGRkZGRkYwQUZGRkZGRkZGRUZGNkIKKzoxMDBENDAwMEZGRkZGRjNEQkZGRkZERkJGRkRCRkZGRjBGRkMzRkQ4QjkKKzoxMDBENTAwMDJBQkZCRkYxRUZGRkNDQzA5NkJFRkZGMzNGRkZGRDU3QTgKKzoxMDBENjAwMEZEOTkwRkZGQzNGRkZGRkZGMDRGRkZGRkZGRkVGRkZGRTcKKzoxMDBENzAwMEZGRjFFN0ZGRkZGMzhFN0JGRkE4RkZERjdGOEU3ODczMjUKKzoxMDBEODAwMEZGRjE1MTYyRkZGQzRCRkZGM0ZGN0VDRkY5RkZGREZGNDgKKzoxMDBEOTAwMEZGN0ZGRkUwRkZGRkZGRjA0RkZGRkZGRkZFRjVGRkZGQ0MKKzoxMDBEQTAwMEZCRkRBRUZGRkNGRTZGM0ZGOEZENzdBRkZFMzdGRTdCMkQKKzoxMDBEQjAwMEZGQjE4Q0ZGRUZGREY4RTdCRkZGRjFGRTNFRjdGRTk1QjgKKzoxMDBEQzAwMDNFQkZGRkZGRkZGQUYwQkZGRkZGRkZGRUYxQzAwMDAwRDQKKzoxMDBERDAwMDAxMDQwMDAwMDAwMDgwMDIwMDAwMTAwMDEwMDAxMDA4NTQKKzoxMDBERTAwMDQxODAxMDAwMDAwODEwODQwMDBDMDQwMjYxMDAwMDgxQTIKKzoxMDBERjAwMDAwMDAwMDAwM0RGMDdGRkZGRkZGRkVGREJGRkZGRkZGOTMKKzoxMDBFMDAwMEZGRkY3RkZGRkVGREJGRkZGRkZGRkZGRkZGRkZGRkYxQzMKKzoxMDBFMTAwMDdGQkZGNzdGRUZGRkVGRkZGN0ZERkZGRkZEN0ZGRkJFMTcKKzoxMDBFMjAwMERGRkZGRkQ5RjBCRkZGRkZGRkZFRjBCQkZGN0ZGQkZGM0YKKzoxMDBFMzAwMEZCRkZCRkZGRjM3RkZCRkRFQjdGREZGQUZGREVGMEVEOTMKKzoxMDBFNDAwMEZGQjFGN0Y5MUZCNTVCRkU3RUY3QkVGRDdGNUZCNUY3MUIKKzoxMDBFNTAwMEZGRkZEMEYwNEZGRkZGRkZGRUY4MzAwMTAwMDc0MjAxMTcKKzoxMDBFNjAwMDAwNkExODUwODAwMDAwMDI0MDAxMDEyMDAxMDEyNDE0OTIKKzoxMDBFNzAwMDIxMTAwMjA4MDcwODAwNDAxMDgwNTgwMDg0ODAxODEwRDQKKzoxMDBFODAwMDQwQzFGMEJGRkZGRkZGRkVGRkZGRkZGN0ZGREJCN0YzM0YKKzoxMDBFOTAwMERGN0NGODc0RkZGRjZGN0QzRjdFRUM3RkMxRjVGRkNGRjUKKzoxMDBFQTAwMDZGOUZGOURGQkVFNUU3RkZEN0YzRERGQkZGRkNGRkJGNzgKKzoxMDBFQjAwMEZGRjBGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGNTIKKzoxMDBFQzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMUZGRkZGRkZGNDAKKzoxMDBFRDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMjIKKzoxMDBFRTAwMEYwMkZGRkZGRkZGRUQ3RkZGRkZGQjRDRkVGNzc2RjczNDkKKzoxMDBFRjAwMDNBNEEzQUNCRDRGNzJFRDZCREJEQTEzQkRGRDZGN0VFQUEKKzoxMDBGMDAwMEQzMzVCREZCQkRDRUVCMkI0RDJGQkJEQUZGRkZGRUIwQzMKKzoxMDBGMTAwMDVGRkZGRkZGRkVCRkZGRkZGRkRGNUYzNkFGM0ZFREI3QjUKKzoxMDBGMjAwMEY1RkRGMzJCRUY3N0ZGRkJEQUIxQkRBMzc3Njk3RjRGQjgKKzoxMDBGMzAwMEZGREJGQTVCRkZGMkZFRkY5NkZGRkZGRURGRkZEMEFGQTUKKzoxMDBGNDAwMEZGRkZGRkZFRkZGRkZGRkQ4RkZENDA2RjlFODM1QTBGRTcKKzoxMDBGNTAwMEZBQzNGRkZGRkNFOTdGRjMwMUQwMDBGRUJGQ0QzRkYwRjUKKzoxMDBGNjAwMEVGRkNDNTBDM0ZGRDY4MEJGRkZGRkZGRURGRjBGRkZGNEUKKzoxMDBGNzAwMEZGRkZGRUZGQkJGRkZEODVGRkQ0NkY5RkMzNUEwRkZGMkUKKzoxMDBGODAwMEZGRkZGRkZDRTk3RkYzMDFGMEZCQzJCRkZDMDAzN0VGN0UKKzoxMDBGOTAwMEZDQ0RCQzNGRkYwQ0JGRkZGRkZGRkZGRkYwNUZGRkZGN0IKKzoxMDBGQTAwMEZGRkVGRkZGRkZGRkQ5RjdEMUI3N0U3RkYxRTRGREZGMjIKKzoxMDBGQjAwMEZCRkJGRjVGRkY3RkIxQkMwRjY3RUJCODNGRkZFMkZGQkEKKzoxMDBGQzAwMEU5RkZGREUzRkYzRjlGQzJGRkZGRkZGMDlGRkZGRkZGMzEKKzoxMDBGRDAwMEZFRjU3RkZGRjAzRkJDRkZENUY1Q0UzRkZFRkZGRTZENzcKKzoxMDBGRTAwMEZGRjFCRjdCRkZGMUZERkY0RkZGODdGRkFFRkZCMUY4QzEKKzoxMDBGRjAwMEZFRkZGRjc4MDFCOUZGRkZGRkZBRjAyRkZGRkZGRkZFQjIKKzoxMDEwMDAwMEYzQzAwMDAwMDAwNDAyMTMwMjAwODA0MDAwOTAxMDAwQjIKKzoxMDEwMTAwMDEwMDAwMjAwMDEyMDgwMTIxMDAwNDAwODAwMDQwMDAwQUYKKzoxMDEwMjAwMDAyMDAwMTQwMDA4MDAwMDAzQ0YwRUZGRkZGRkZGRUZERUEKKzoxMDEwMzAwMDFGRkZGRkZGN0ZGRkZGRkZGRjdGRkY3RkY3REZGN0ZGNTAKKzoxMDEwNDAwMEY3RkJFQkQxRkZGRkZGRkZFRkY3RkZGRkZCRkZGRUZGMUIKKzoxMDEwNTAwMEZGN0VGRkZCRkZGRkZGREJGMEZGRkZGRkZGRkVGMEZGNjgKKzoxMDEwNjAwMEZGQjdFQkY3REZGRkZFRjU2QkU3RURGNzNFRUNGRjU0NjQKKzoxMDEwNzAwMEVGNkZGMUY1QUY2RkY2RkRGRkREN0JGRkVGQkY3RkZGOTkKKzoxMDEwODAwMEZGRjdGRkYzNUZGN0QwRjBDRkZGRkZGRkZFRjgzMDAwNzAKKzoxMDEwOTAwMDgwNDAwNDAwODEyQzA0MjQwMDAyMDFDODAyMDAwMjI0QzQKKzoxMDEwQTAwMDAwMDFCNDQyREM0NDAyMTU5MDAyMDM0ODM5MTAwMjI0QzYKKzoxMDEwQjAwMEEwQkEwMDAwNDBDMUYwQkZGRkZGRkZGRUZGRkZGRkZGMkYKKzoxMDEwQzAwMEZFRkNGN0YwRUVCNjVERkRGNUZGREJGNzdGN0ZCRUZGQzAKKzoxMDEwRDAwMEMxRkVCRkZBRkE1RkZGQURGRkVGRkY3RkRGN0ZGRUJGMEMKKzoxMDEwRTAwMEI3OTRCRkZGRkZGMDlGRkZGRkZGRkVGRkZGRkZGRkZGNzMKKzoxMDEwRjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxMEUKKzoxMDExMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUYKKzoxMDExMTAwMEZGRkZGRkZGRjA4RkZGRkZGRkZFRDdGRkZGRkJCNUZGRDUKKzoxMDExMjAwMEVGN0NFQjJCNTI1QjNCREFENEYzMzY5NkI1QkRGMUZCOEIKKzoxMDExMzAwMERBRUVGNkZFRDMzNUJEREZBRENGRUY3RUNENkJCQkRGOTQKKzoxMDExNDAwMEZGRkZGREIwRUZGRkZGRkZGRUJGRkZGRkZGRDM1RkY2MjYKKzoxMDExNTAwMEZGRjZGRkZEQURGREZGN0ZFRkZGNkY3RkRCRjFBNUEzODYKKzoxMDExNjAwMDdGNkY2QjRGRkZEQkZCQ0JGRkY2RkZGNEQ3RkRCRkZFQkUKKzoxMDExNzAwMERGRkZEMENGRkZGRkZGRkVGRkZGRkZGN0RGRkZGRkZGMjcKKzoxMDExODAwMDNGN0ZGQ0U1RkYyMEZFRkZGRkRGN0ZGRkYxN0ZGRkZFREIKKzoxMDExOTAwMEZGRjA3QzNENEZGM0MzM0ZGRkZGNkZDM0ZGMEZGRkZGMjcKKzoxMDExQTAwMEFGRjAyRkZGRkZGRkZFRkZGRkZCQjdFMDBGRkZGRjJCQUUKKzoxMDExQjAwMEZGN0RCRkZGREZGRkZGRjg5RjdGRkZGMTU1RkZGRkZGQzAKKzoxMDExQzAwMEZEN0MzQ0ZGRjNDMzNGRkZGRkVGQzNGRkRGRkZGRkZGRUIKKzoxMDExRDAwMEYwOUZGRkZGRkZGRUZGRkZGRkZGRUZGRkZGOUZCRjdGQkYKKzoxMDExRTAwMEY5MTk0NzhFRTc5RjNGMTdGRkZDODFDMTdFRjNEOUY5QkMKKzoxMDExRjAwMDczREZGNDdGRkFGRkZGRkZGQjdGNzdDN0ZGRkZGRkYwOEUKKzoxMDEyMDAwMDJGRkZGRkZGRkVGNUY3RkZGQkZGRjczRkZDQkYzRTNGNjEKKzoxMDEyMTAwMEVDRkY4MUFGRkU0RkYzQkJGRkYwN0VGRjZGRkY4N0ZGNTgKKzoxMDEyMjAwMEJCRkZENUZDRkY3RkZDNkZGRkVGRTdGRkZGRkFGMDNGNEUKKzoxMDEyMzAwMEZGRkZGRkZFRjNDMDAwMDAwMDAwMDAwMDAwMDAwMDgwODAKKzoxMDEyNDAwMDAwMzAxMDYwMjAwMDA4MDAwMTIwODAwMDEwMDAwNDAwMjEKKzoxMDEyNTAwMDAwMDAwMDAwMDAwMjAwODA0MDAwMDgyMDNDRjA2RkZGMEEKKzoxMDEyNjAwMEZGRkZGRUY1QkZGRkZGRkVGRkZGRkZGRjdGRkUzRkZGMUIKKzoxMDEyNzAwMEZGRkZGRkZGRUZGRkZGRjFERkRGRkZGRkZGN0ZERkZGN0MKKzoxMDEyODAwMEZEQkRGRkZGRkZGQkRGRkZGRkZGRkY1QkYwRkZGRkZGODkKKzoxMDEyOTAwMEZGRkVGMEJGQkZCRkZGRjdGQkZGRkVFRUZBRkZGRkZGNTEKKzoxMDEyQTAwMDNEM0JGRkZGRkVGQkYxRkZCRjdCRkZGRkVGRkZCRkZGRkIKKzoxMDEyQjAwMEZGRkZGRkZGRkVGRkY3RUZGRkZCRDBGMERGRkZGRkZGQjkKKzoxMDEyQzAwMEZFRjgzMDAwMDAwMDAwMDAwQjEwMDUwMTAwMDgwMDAyQ0QKKzoxMDEyRDAwMDAxMDEwMDAwMTAwMUM4MDgwMDAwMDAwMDQyMDIwMDAwRTcKKzoxMDEyRTAwMDAwODAwMjAwMDA0MDI0ODAwMEMxRjAzRkZGRkZGRkZFQUQKKzoxMDEyRjAwMEZGRkZGRkZGRjdGREY3RkFFRkVFRjlGREZGRjdGRUJGODcKKzoxMDEzMDAwMDFGRkQ5RUZERDFFRkZGRjc3RjlGRkZFRkZGRjZGRkZFNzIKKzoxMDEzMTAwMEZFN0JGRkJERkY3RUZGRkZGRkYwM0ZGRkZGRkZGRUZGRjUKKzoxMDEzMjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ0QKKzoxMDEzMzAwMEZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ0IKKzoxMDEzNDAwMEZGRkZGRkZGRkZGRkZGRkZGMEFGRkZGRkZGRkVGRkZGMEQKKzoxMDEzNTAwMEZGRjdGRkZGRkZGRjdGRkZGRkZGREZGREZGRkZERkZGNjcKKzoxMDEzNjAwMEZGNUZGMUJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0IKKzoxMDEzNzAwMEZGRkZGRkZGRkZGRkZGRjBERkZGRkZGRkZFRkZFRkZGQkQKKzoxMDEzODAwMEY3RkZGRkZGRkZGRkZGRkZGRjNGRkJGRkZGRUZGQkZENEYKKzoxMDEzOTAwMEZGRjFGRkZGRkJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNkYKKzoxMDEzQTAwMEZGRkZGRkZGRkZGRkYwMkZGRkZGRkZGRUY3RkZGRkZGMzUKKzoxMDEzQjAwMEZGRkZGRkZGRkRGRkZGRkZGRkZGRkY3RkZGRkZFN0ZGRDcKKzoxMDEzQzAwMEYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGM0IKKzoxMDEzRDAwMEZGRkZGRkZGRkZGMEZGRkZGRkZGRkVGRkZGRkZGRkZGMkQKKzoxMDEzRTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGQ0ZGRkZCRkZGQkYxNTMKKzoxMDEzRjAwMEZGRkZGQkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDEKKzoxMDE0MDAwMEZGRkZGRkZGRjAyRkZGRkZGRkZFRkZGRkZGRkZGRkZGQ0MKKzoxMDE0MTAwMEZGRkZGRkZGRkZGRkZGRkY3QkZGRkZGRjdGRkZGMUZGRUUKKzoxMDE0MjAwMEZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUMKKzoxMDE0MzAwMEZGRkZGRkYwN0ZGRkZGRkZGRUZGRkZGRkVGRkZGRkZGNUMKKzoxMDE0NDAwMEZGRkZGRkZGRkZGRkZGREY1N0ZGRkVCRkZCRjFGRkZGQzcKKzoxMDE0NTAwMEZERjdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQTYKKzoxMDE0NjAwMEQ3RkZGMDdGRkZGRkZGRkVGRkZGRkZGN0RCRkZEQkZEOTYKKzoxMDE0NzAwMEY2RkZGNkZGM0NCQ0JDQkZERjZGRUYyRkYxM0NCRkJDRkIKKzoxMDE0ODAwMEJGREY2RkZGNkZGN0RCRkZEQkZERjZGRkY2RkZGRkZGNTAKKzoxMDE0OTAwMDAxRTJFRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGODgKKzoxMDE0QTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNEMKKzowNjE0QjAwMEZGRkZGRkZGRkZGRjNDCis6MDAwMDAwMDFGRgorLyoKKyAqCisgKiBGaWxlIHlhbTFrMmI1Lm1jcyBjb252ZXJ0ZWQgdG8gaCBmb3JtYXQgYnkgbWNzMmgKKyAqCisgKiAoQykgRjZGQkIgMTk5OAorICoKKyAqIFR1ZSBBdWcgMjUgMjA6MjQ6MDggMTk5OAorICoKKyAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUveWFtLzk2MDAuYmluLmloZXggYi9maXJtd2FyZS95YW0vOTYwMC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTdhMzRiCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUveWFtLzk2MDAuYmluLmloZXgKQEAgLTAsMCArMSwzNDIgQEAKKzoxMDAwMDAwMEZGRjIwMEE1QURGRkZFOUZGRkVGRkJDQkZGREJGRUYyOTMKKzoxMDAwMTAwMEZGRjZGRjlDQkZGREJGRUYyRTNGNkZGMUZEQjRGREJGQUMKKzoxMDAwMjAwMEZGNkZGRjZGRkYwQkZGREJGRkYyRkZGNkZGRkZGRkZGMkUKKzoxMDAwMzAwMEYwNkZGRkZGRkZGRUZGRkRERkZGRkZGRkY3RkZGRkZGOUEKKzoxMDAwNDAwMEZCRkZGRkY3RkZGRkZGRkVGRjdGRjFGRkZFRkZCRkJGREMKKzoxMDAwNTAwMEZGRkZGRkZGRkZGN0ZGRkZGRkZFRkZGRUZGRkZGRkYwQzkKKzoxMDAwNjAwMEVGRkZGRkZGRkVGRkZGRkZGRkZGRkZCRkZGRkZGRkY3RjkKKzoxMDAwNzAwMEZGRkZGN0VGRkZGRkZGRkZGRkYxRkZGRkZGN0VGRkZGMzcKKzoxMDAwODAwMEZGRkZGRkZGREZGRkZGRkZGRkZGRkRGRkZGRkZGMERGRDEKKzoxMDAwOTAwMEZGRkZGRkZFRkZGRkRGRkZGRkZGRkZGRkZGRkZGRkZGOTEKKzoxMDAwQTAwMEZGRkZFRkZGRjNGQkZFRkZGMUZGRkRGRkZGRkZGRkZGOTEKKzoxMDAwQjAwMEZGRkZGRkZGRkZGRkZGRkVGRkZGRkZERkZGRjA3RkZGMDAKKzoxMDAwQzAwMEZGRkZGRUZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGNTEKKzoxMDAwRDAwMEZGRkZERkZGRkZGRkY3RjFGRkZGRkZERkZGRkZGRkZGODYKKzoxMDAwRTAwMEZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkYwMEZGRkZGMjAKKzoxMDAwRjAwMEZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGOTEKKzoxMDAxMDAwMEZGRkZGRkZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRkY1MTcKKzoxMDAxMTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDJGRkZGRkZGQ0UKKzoxMDAxMjAwMEZFRkZGRkZGRkZGRkZGRkJGRkZGRkZFRkZGN0ZGRkVGODQKKzoxMDAxMzAwMEZGRUZGRjdGRUZGMUZGRUZGRjdGRkZGRkZGRkZGRkZGMEQKKzoxMDAxNDAwMEZGRkZGRkZGRkZGRUZGRkZGRkZGRjA5RkZGRkZGRkZFMzAKKzoxMDAxNTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQUYKKzoxMDAxNjAwMEZGRkZGRkZGRjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQUQKKzoxMDAxNzAwMEZGRkZGRkZGRkZGRkZGRkZGRkYwQkZGRkZGRkZGRUZGREYKKzoxMDAxODAwMEZGRkZGRkJERkZFRjdGRUY3RkZCREZEMzVBRkVEN0Q2MjgKKzoxMDAxOTAwMEY3N0ZCREYxQkI1REQ2RjdGRTk2RkZCREFGQURCRkVGRkMKKzoxMDAxQTAwMDdGNkI3RkZCRDZGRUY3RkYxMEVGRkZGRkZGRkVCRUVGN0EKKzoxMDAxQjAwMEZGRkZEQkZGRjZGRkY2RkZGREJGRkRCRkZGN0ZGRjdGMDkKKzoxMDAxQzAwMERGREJGMUZEMzVGRjZGRkY2RkZGREJGRkNCRkZGNkZGREUKKzoxMDAxRDAwMEYyRkRGREJGRkZGRkZGRDBFRkZGRkZGRkZFRkZGRkZGQzAKKzoxMDAxRTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGNTVGRkNDQzAzRkZGRkIKKzoxMDAxRjAwMEZGRjEyNEYwRkZGRkNGRUYzRkZGRjBGRkZGRkZGQzNGRDkKKzoxMDAyMDAwMEZGRkZGRkZGRkZGRkYwQ0ZGRkZGRkZGRUZGRkZGRkZGM0UKKzoxMDAyMTAwMEZGRkZGRkZGRkZGRkZGRkZGRjU1RkZDQ0MwM0ZGRkZGQ0EKKzoxMDAyMjAwMEYxMDBGMEZGRkZDRkRGRkZGRkYwRkZGRkZGRkMzRkZGMUMKKzoxMDAyMzAwMEZGRkY3REZGRkZGMEZGRkZGRkZGRkVGRkZGRkZGRkZGNjAKKzoxMDAyNDAwMEZGRkZGRkZGRkZGRkZGRkZERkZFN0ZERkZGRkZGRkYxOEQKKzoxMDAyNTAwMEZGQ0ZGRkYzRkY5N0ZGRkY4RkU3RkZGRkZDNzFGRkZGNkIKKzoxMDAyNjAwMEZGRkZGRkZGRjBFRkZGRkZGRkZFRjVGRkJGRkZGRkZGMDgKKzoxMDAyNzAwMEZGRkZGRkZGRkZGRkUzRjdFRkZGRkZGQzdCRkZGMTNGMTcKKzoxMDAyODAwMEZGRUZGRkNGRTNFM0ZGRkZGRkZGM0ZGRkZGRkZCRkZGRjYKKzoxMDAyOTAwMEJGRkZEQUYwN0ZGRkZGRkZGRUYyQzAwMDAwMDAwMDAwQUEKKzoxMDAyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwNEQKKzoxMDAyQjAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDIwMDAwMDAwMDAwM0IKKzoxMDAyQzAwMDAxM0NGMEFGRkZGRkZGRkVGREJGRkZGRkZGRkZGRkZGQTEKKzoxMDAyRDAwMEZGRkZGRkZGRkZEQkZGRkZGRkZGRkZGRkYxRkY5RkZGQzAKKzoxMDAyRTAwMEZGRkZGN0ZGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMzYKKzoxMDAyRjAwMERCRjA3RkZGRkZGRkZFRjBCQkRGRkZGRkZGRkZGRkZGMzUKKzoxMDAzMDAwMEZGRkZGRkZGRkZGRkZGRUZGQkRGQkZGMUZFRkRGN0ZGOEEKKzoxMDAzMTAwMEZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGNzdGREYyODUKKzoxMDAzMjAwMEYwMUZGRkZGRkZGRUY4MzgwMDAwMDAwMDAwMDAwMDAzOTAKKzoxMDAzMzAwMDAwMDAwMDAyMDA5MDAwMDAwMDBDMDEwMDAwMDQyNDAwRjYKKzoxMDAzNDAwMDQwMDEwMDAwMDA0MDAwMDAwMDAwMDIwMDAwMDFDMEYwNzkKKzoxMDAzNTAwMDRGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNUUKKzoxMDAzNjAwMEZGRkZCRkZGRkY2RkZGREZGRkQxRkZGRUZGRkZGRkZGQkMKKzoxMDAzNzAwMEZGRkZERkZGRkJGRkZCRUZGRkZGRUVGRkZGN0ZGMERGODUKKzoxMDAzODAwMEZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0UKKzoxMDAzOTAwMEZGRkZGRkZGRkZGRkZGRkZGMUZGRkZGRkZGRkZGRkZGN0IKKzoxMDAzQTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjA4RkZGREMKKzoxMDAzQjAwMEZGRkZGRUZGRkZGRkY1QURGRjY5MkFFRDZCRkJERjNBQTQKKzoxMDAzQzAwMERDRjQ5NkVFQjMzRDM1QzFCQkRERkVGNkZFRDZCNUFEMzEKKzoxMDAzRDAwMEJGQTVBRDQ5MkY0RjJCREE1RkZGRkZGRkYwMkZGRkZGQzcKKzoxMDAzRTAwMEZGRkVCRkZGRkZGQjVCRjdGNkZGRjZGRkZEQkZGREE1QkUKKzoxMDAzRjAwMEYzNkZGMzZFRkE3QkQxRkRCNTc3NkZFOTZGRkZEQkZCMkYKKzoxMDA0MDAwMERCREZGNkZGRjZGRkZEM0ZGRUY3RkZEMDRGRkZGRkZGRkMKKzoxMDA0MTAwMEZFRkY5RkZGRkYwRkZGQzAzRjlDMDNGRkZGOEJBNUZFNkEKKzoxMDA0MjAwMDgwM0VDMkJGQUNCMTI0RkZGRkZGRkZGRkZGMEZGRkEzNjEKKzoxMDA0MzAwMEZGRkQ2QkZGRkZGMEE1RkZGRkZGRjBBRkZGRkZGRkZFMkIKKzoxMDA0NDAwMEZGRkZGRkZGMEZGRkMwM0ZENDZCRkZGRkRCRkZGRTg2MDgKKzoxMDA0NTAwMEJGQzJCRjMwQTEyNEZGRkZGRkZGQ0NGRjBGRkZBM0ZGRjAKKzoxMDA0NjAwMDA1NkJGRkZGRjBBNUZGRkZGRkYwN0ZGRkZGRkZGRUZGMjMKKzoxMDA0NzAwMEZGRkZGQkM3RkZDNEZGRkY3RkZGRUNGRTdGREZEOEI5QTQKKzoxMDA0ODAwMDQ3RkMzNkMxREZGRkZGRjlGRkYzRkZGN0ZGRkNGRkZEN0QKKzoxMDA0OTAwMDNGRkZGRkZGM0ZGRkZGRkZGMDdGRkZGRkZGRkVGNUZGODYKKzoxMDA0QTAwMEZGRkZGRkZFRkZGRjdFQkQzRkZGMkJGRTJGRjVBM0ZDRUUKKzoxMDA0QjAwMDVCRkU2MTlGN0ZFRkZGRkZBN0ZCRkZGRkZBRkVGRjMzQUQKKzoxMDA0QzAwMEYxRkZCRkZGRkZGRkZBRjA3RkZGRkZGRkZFRjFDMDAwNkIKKzoxMDA0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMzAyNDA0ODQKKzoxMDA0RTAwMDAwMDEwMDgwNDAwMDA4MDAwMDAwMDIwMTAxMDAwMjAwM0QKKzoxMDA0RjAwMDAwMDAwMDAwMDEzREYwMkZGRkZGRkZGRUZEQkRGRkZERUUKKzoxMDA1MDAwMEZGRkZGRkZGRkZGQkZGRkY3RkY2RUZCRkY3RkY3M0VCODAKKzoxMDA1MTAwMEYxRkZGRkZGREZGRkZGRkZGRkZGRjlGRkZERkVGRkZGMjIKKzoxMDA1MjAwMEZGRkZGRkZGRDlGMERGRkZGRkZGRkVGMEJGN0ZGRkZGMDAKKzoxMDA1MzAwMEZGN0ZGRkZGREVGRkZGRUZERERFNzdGMkZCRURFN0YxOTAKKzoxMDA1NDAwMDczRkRGRERGRkY3REJFREZGRkZCRkZFRkZGRUZGRkZGNzIKKzoxMDA1NTAwMEZGRkZGRkQwRjBCRkZGRkZGRkZFRjgzMDIwMDIwMDIyQjgKKzoxMDA1NjAwMDQwQzAwMDAwMDAwODAwMDI0MTAyMTIwMDIxODc4MTAwMDMKKzoxMDA1NzAwMDAwODAwNDBCMjgwMUIwMDA4MjAwNDAwMDAwMDAwMDAwNTEKKzoxMDA1ODAwMDAwMDBDMUYwREZGRkZGRkZGRUZGRkZGRkZGRkZGREZGRTkKKzoxMDA1OTAwMEY3RkZGRTdGRUQ3OUZGREVFQjdGNzRGN0Y3RTFGOUZGMDAKKzoxMDA1QTAwMEY2NUY3RkZGRkZGRkQ3REJFRkZGQkJGRkZGRkZDQ0ZGNTcKKzoxMDA1QjAwMEZGRkZGMENGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGOEIKKzoxMDA1QzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxRkZGRkZGNDkKKzoxMDA1RDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMkIKKzoxMDA1RTAwMEZGRjAwRkZGRkZGRkZFRkZGRkZGRkQzRENENDk3RjZGRDcKKzoxMDA1RjAwMDJCQkE1Q0QyREFGNkYzM0VGN0ZGQkRGMUZBREZGRUY3NzUKKzoxMDA2MDAwMENDRjZCQkE1QjNBREJGNkY3RDZGNkJEQkRGQkRGRkZFNkYKKzoxMDA2MTAwMEIwNUZGRkZGRkZGRUJGRkZGRkZCREI1N0Y2RkU5RkQ1N0UKKzoxMDA2MjAwMEI3RkZBRkU1M0ZGRkZGNkZGRkRCRjFGREJGRkY2RjY5NzYKKzoxMDA2MzAwMDZDREZEQURGQ0JGRkY2RkY3NkZERkRCRkZGRkZGRkQwRkIKKzoxMDA2NDAwMDNGRkZGRkZGRkVGRkZGRkZGRkZEQkQwODAzODk0RjVBN0QKKzoxMDA2NTAwMDBGRjBGRkY4QkZGRkZGRkZGRkYxNUFGRkZGRkZGRkYzQUYKKzoxMDA2NjAwMEZBQTBGMEYyQkZGRkZGRkZGRkZGRkZGRkZGRkZGMEZGNjkKKzoxMDA2NzAwMEZGRkZGRkZFRkZGRkZGRkZGQ0ZEMDA2QkZGRkY1QTBGQjgKKzoxMDA2ODAwMEYwRkZGRkZGRkZGRkZGRkZGMTVBRkZGRkZGRkZCM0Y1OTIKKzoxMDA2OTAwMDUwRjBGMEZGRkZGRkQ3RkZGRkZGRkZGRkZGRjA3RkZGRUUKKzoxMDA2QTAwMEZGRkZGRUZGRkZGRkZEQkNGRkU0RTc3MUZGRjlDNEY0QUQKKzoxMDA2QjAwMDdGN0ZDRkZGRkZGRkZGRjFGRkZGRkZGQkY3NzNCRjE0NEIKKzoxMDA2QzAwMEZGRTZGRkZGRTE3REZGRkZFN0ZGRkZGRkYwM0ZGRkZGREEKKzoxMDA2RDAwMEZGRkVGNUZGRkZGRUQyRkFGRkM0RjQ1Q0JGRkFGRkZGOTYKKzoxMDA2RTAwMEVDN0VCRkZGRkZGRkYxRkZGRkVGRkZGRjZCREJGRkRGRTQKKzoxMDA2RjAwMEY5RkJCRkZGRjFGRkJGRkZGRkZGRkJGMEJGRkZGRkZGRjUKKzoxMDA3MDAwMEZFRjNDMDAwMDIwMDAwMDAwMDgyMDAwMDAwMDA4MDAwMzQKKzoxMDA3MTAwMDAwMDAwMDQwMDAwMTAwMDAwMDAxMDgyMDAwMDAwMDAwNkYKKzoxMDA3MjAwMDAxMDAwMTAwMDA4MDAyMDAwMTNDRjA1RkZGRkZGRkZFQkUKKzoxMDA3MzAwMEZEQkZGRkZGRkZERkZGRkZGRkZGN0ZGRkRGRkZFRkZGREIKKzoxMDA3NDAwMEZGRkZGRkZGRjFGRkZGRkZGRkZGRjdGRkZCRkZGREZGRDUKKzoxMDA3NTAwMEZGRkZGRkZGRkZGREZGRkZDM0YwQUZGRkZGRkZGRUYwNTYKKzoxMDA3NjAwMEZGREZGRkZGRjcyM0ZGRkZGREZGRUZGRkZFN0Y3REY3QkEKKzoxMDA3NzAwMEZFRkY3RjcxRkZGQjdGRkZGRkZGNkVGREY3RkRGRkJGRjkKKzoxMDA3ODAwMEZGQkZGOUZERkZERkVGRjBGMEFGRkZGRkZGRkVGODMwMzYKKzoxMDA3OTAwMDQwMDEwMDgzMDAwMDAwMEMwNjA4MDQyNjI2MDAwMDA2MjUKKzoxMDA3QTAwMDAzMDAwMTAwMDAwMDAwMDQwMDcwMDg4MDAwMjAwMTIwMDgKKzoxMDA3QjAwMDAwMDIwMDMwMDAwMEMxRjA1RkZGRkZGRkZFRkZGRkZGRkYKKzoxMDA3QzAwMEZGRkY3QjNGRjdGRkQ3RkVGRUZCRkUzQkZFQkRGRjJGOEIKKzoxMDA3RDAwMEZGNzFGRkZCN0ZFN0ZGRjlFRkZGRDdGQUZGQjdCQkZFMjMKKzoxMDA3RTAwMEZGRkY3NEZGRjdGRkYwQ0ZGRkZGRkZGRUZGRkZGRkZGRUMKKzoxMDA3RjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDkKKzoxMDA4MDAwMEYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDYKKzoxMDA4MTAwMEZGRkZGRkZGRkZGMDhGRkZGRkZGRkVGRkZGRkZGRkI1QjIKKzoxMDA4MjAwMEJENkY3Q0VCN0ZGQkRCRDM0QkVFRDZGNkI3RkRBQ0ExMDcKKzoxMDA4MzAwMEZCREZGRUY3RjQ5NkJEQjRDNUE1QUY2RjY5NEY3RkJBNzUKKzoxMDA4NDAwMERCRkZGRkZGRjAzRkZGRkZGRkZFQkZGRkZGRkZEQkZGMTAKKzoxMDA4NTAwMEY2RkZGNkZGQkRCRkE1QkZGRjdEN0ZFRkZGRkJGMUZERkMKKzoxMDA4NjAwMEJGRkY2RkZGNkI3QURCRkZEQkRGRjZGRUI2RkRGREJGODAKKzoxMDA4NzAwMEZFRjdGRkQwRUZGRkZGRkZGRUZGRkZGRkZGRjQyRkZGQUMKKzoxMDA4ODAwMEZDNDM2QkZGRkZGRjBERkZGQzMzM0ZGMDVGRjFGRkZGMDkKKzoxMDA4OTAwMEZGRkZGOURFRjA0Q0ZFNzdBRkZGRkZFRkZGRjBGRkRCNkQKKzoxMDA4QTAwMEZGNUZGMEVGRkZGRkZGRkVGRkZFRjdGRkYwMkZGRkZEMDIKKzoxMDA4QjAwMDQzN0ZGRkZGRjEwRkZGRkMzMzNGRkZBRkYxRkZGRkZGNkYKKzoxMDA4QzAwMEZGRjZEN0ZGQkNGREJERkZGRkZGRkZGRkYwRkZGRkZGRkYKKzoxMDA4RDAwMEZGRjBFRkZGRkZGRkZFRkZGRkZGRkZGQ0ZGRkZGQkYxNUQKKzoxMDA4RTAwMEJGRkZGOUZEQ0ZGMjcwRkYxRjlGRjNGMUZGRkZGRkZGODYKKzoxMDA4RjAwMEZDRjdGRjEzOUZGQ0ZGRkY4NEY3RkZGRjQ3RkZGRkZGOUQKKzoxMDA5MDAwMEYwQkZGRkZGRkZGRUY1RkZGRkZGRjFGQ0ZGRkVGRTc5RUEKKzoxMDA5MTAwMDNGRkYxRDQ2Q0ZGRkNGRkM3QkZGRjFGRkZGRkZGRkVENDkKKzoxMDA5MjAwMEYzQUJGRkNCRkZGOEZGRkNGNUZGQkZGRkZGRkZGQUYwRDMKKzoxMDA5MzAwMDhGRkZGRkZGRkVGM0MyMDAwMDAwMDAwMDAwMDAwMTAwNzcKKzoxMDA5NDAwMDAwMDAyMDAwMjAwMDAwMDQwODAxMDAwMDAwMDAwMDIwM0EKKzoxMDA5NTAwMDBDMDAwMDA0MDEwMDAxMDAwMDgwMDAwMDAxM0NGMDdGNTkKKzoxMDA5NjAwMEZGRkZGRkZFRkRCRkZGRkZGREZFRkZGRkZGRkZGRUZGREUKKzoxMDA5NzAwMERGRkZGRkY3RkZGRkZGRUZGMUZGRkZGRkZGRkZGRkVCRTEKKzoxMDA5ODAwMEZGREZGRkZGRkJGNzdGRkZGRUZGRkZCRkRCRjBGRkZGOTcKKzoxMDA5OTAwMEZGRkZGRUYwRkZGRkZGRkZGRkRGRkZGRkZGN0ZGN0ZGMUYKKzoxMDA5QTAwMEJGQkZDRkZGRkZGRjNFRjE3RkZGRkZFRkZGRkZGRkZFNjcKKzoxMDA5QjAwMEZGRkRGRkJGQkRGRUZGRkJGN0RGRkJEMEYwOUZGRkZGOUEKKzoxMDA5QzAwMEZGRkVGODMwMjAwMDQwMDE4MEMwMzAwMDAwMjAwMDEwMDEKKzoxMDA5RDAwMDUwODgyMDAwMDAxMzAxMDAwMDAwMDAwMDAwMTAwMDAwRkIKKzoxMDA5RTAwMDAwMDAwMTgwMDgwMDAwQTAwMDEwQzFGMEVGRkZGRkZGMzEKKzoxMDA5RjAwMEZFRkRFRjdGRkZGRkJGRkZGN0ZGRUZGQkZENzdFRkJGRDAKKzoxMDBBMDAwMEY3N0ZGRkZGQkZEMTdGRkZGRkY3RkZGRkZGRkZBRkZGQzQKKzoxMDBBMTAwMERGRjdGQkZGRkRGRkZDRkZGREZGRjBGRkZGRkZGRkZFMjkKKzoxMDBBMjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDYKKzoxMDBBMzAwMEZGRkZGRkZGRjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDQKKzoxMDBBNDAwMEZGRkZGRkZGRkZGRkZGRkZGRkYwNUZGRkZGRkZGRUZGNjYKKzoxMDBBNTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkRGRkZGRkZGQzYKKzoxMDBBNjAwMEZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQTQKKzoxMDBBNzAwMEZGRkZGRkZGRkZGRkZGRkZFMDNGRkZGRkZGRkVEREZGODgKKzoxMDBBODAwMEZGRkZBNUZENkY3RDZEN0Y1MkRGNUE0QkVFQjZFRUYyOTQKKzoxMDBBOTAwMEJCQUNBMTVCNERENkY3RkVCMkJEMzVCNUI1REQ2RjdGMDIKKzoxMDBBQTAwMEU5NUY1MkRGQkRGRkZGRjBERkZGRkZGRkZFQkZGRkZGOEIKKzoxMDBBQjAwMEZGREJGRUY2RkZGNkZGRkRCRkZEQjVCRkY5N0Y2RkZGNjEKKzoxMDBBQzAwMERCRjFGREJGRkY2RkZGNjk3RkRCRkZEM0ZGRjZGRUYyQjcKKzoxMDBBRDAwMEZGQURCRkZGRkZGRkQwREZGRkZGRkZGRUZGRkZGRkY1MTIKKzoxMDBBRTAwMDMwMEZGRkZGRkQ2QkNBRkZGMDBGRDZCRkNGM0ZGRkZGRjgKKzoxMDBBRjAwMEYxRkZGRkZGQ0FGRUJGRkZGMDA1QUYwRkZGRkNGMENGMTUKKzoxMDBCMDAwMEYwRkZGRkZGRkZGMEVGRkZGRkZGRkVGRkZGRkZGNTMwRkQKKzoxMDBCMTAwMDBGRkZGRkZDM0ZDQUZGMEYwRkQ2QkZGRkZGRjU1RkYxQ0UKKzoxMDBCMjAwMEZGOEJGRkMzRkZGRkZGRkZGRkZGMEZGRkZDRjBDRkYwQzYKKzoxMDBCMzAwMEZGRkZGRkZGRjAzRkZGRkZGRkZFRkZGRkZGRkZDRkZGQzUKKzoxMDBCNDAwMEZGQkY5RjNGRkVGQ0ZGNEZGRkZGRkZGRkZGRjdGMUZGREYKKzoxMDBCNTAwMERGRkU3RTNGOUZGNEZDN0ZGQ0ZGRkYzRkZGM0ZGRTNGMzkKKzoxMDBCNjAwMEZGRkZGRkYwNEZGRkZGRkZGRUY1RkZGRkZCRkZGRUZGNjQKKzoxMDBCNzAwMEZGRkZGRkJGRkJGRkY4RURGRjhGRkZCQkZGQjFGM0VGMDAKKzoxMDBCODAwMDhGRjdGRkZGREJGRkZGRkZFRkJGRkQ3OUJGQkZGRkZGNjkKKzoxMDBCOTAwMEZGRkJGMERGRkZGRkZGRkVGM0MwMDAwMDAwMDQwMDAwREEKKzoxMDBCQTAwMDAwMDAwMDAwMDAwMDAwODAwMDA0MDgwODAxMDEwMDkwMUYKKzoxMDBCQjAwMDAwMDAwMDA0MDAwODAwMDAwMDAwMDgwMDA0MDAwMDAxMUMKKzoxMDBCQzAwMDNDRjBERkZGRkZGRkZFRkRCRkZGRkZGRkZGRkZGRkZGNkEKKzoxMDBCRDAwMEZGRkZGRkZGOUZGRkFGREZGRkZGRkZGMUZGRkZGRkZGMDMKKzoxMDBCRTAwMEJGRUZGRkZGRkZFREZGRkZGRkVGRkZCRkZGRkZGRkMzMDMKKzoxMDBCRjAwMEYwM0ZGRkZGRkZGRUYwRkZGREZGRkZGRkZCRkZCQkZGMkUKKzoxMDBDMDAwMEZGRkY3RkY2RkY3RkZCRkRFREZGRjFGRkZFN0ZGRkZGQTQKKzoxMDBDMTAwMEZGNUZGRkY3RkY3RUZGRkRGRkVGRkZGRkZGRUZGMEYwNEQKKzoxMDBDMjAwMDhGRkZGRkZGRkVGODMwODAwMDA0MDAwMDQwMDIwMDAzNDkKKzoxMDBDMzAwMDAwMDUwNDIwMDAwMDAxRDAwMDgxMDAyMDA0MDQwMDAwMTEKKzoxMDBDNDAwMDgxMDQwODgwMTAwMEMwMDAwMDAwMjAwMDA4QzFGMDZGN0YKKzoxMDBDNTAwMEZGRkZGRkZFRkZGRjdGRkZGRkZGRkZGM0ZERkZFREZDNDgKKzoxMDBDNjAwMEZGRkY5RkZCRkRGRkZGRkZGMUZGRkY3RkZCM0VGRjlGQUQKKzoxMDBDNzAwMEZGRkZGRkZGRkRGOUZGRkZGRkZERkZGRkZGRjA2RkZGMkQKKzoxMDBDODAwMEZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNzUKKzoxMDBDOTAwMEZGRkZGRkZGRkZGRkZGRjFGRkZGRkZGRkZGRkZGRkZGNzIKKzoxMDBDQTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYwQ0ZGRkZGOTMKKzoxMDBDQjAwMEZGRkVGRkZGRkZGREJERkZFRjdDRUI3RkZCREJGQURDMDAKKzoxMDBDQzAwMEVFRjdGNkQ3RjUyREExQkJEREVFRjc1NEY3RkIyQ0I1MEIKKzoxMDBDRDAwMEI0QkQ2QjZGRUY2RkJCREZGRkZGRkZGMDFGRkZGRkZGQzgKKzoxMDBDRTAwMEZFQkZGRkZGRkZGQkZGRjZGRkY2RkZGREJGRkZCRkVGRkQKKzoxMDBDRjAwMDZGRkY2RkZBREJGMUM1QkRGNTZGRkY2RkNBREJGRkRCN0UKKzoxMDBEMDAwMEZCRjY5N0Y2RkZGREJGRkVGN0ZGRDA5RkZGRkZGRkZFNEMKKzoxMDBEMTAwMEZGRkZGRkZGRkZGRkZGRkY4QjdGRkZGRkU3NjNGRkZGOEIKKzoxMDBEMjAwMEZGRkM3N0RGRjFEQkZGRDZBODNGRkZGRjA4MkZGMEZGQzYKKzoxMDBEMzAwMEMzRkZFQkZGRkZGRkZGRkY1RkYwRUZGRkZGRkZGRUZGRDMKKzoxMDBENDAwMEZGRkZGRkZGRkZGRkZGOEJGRkZGRkZGRkZGRkZGRkZGMjcKKzoxMDBENTAwMEZDRkZDRkYxREJGRkQ2QTgzRkZGRkYwODJGRjBGRkMzNUEKKzoxMDBENjAwMEZGRUJGRkZGRkZGRkZGRkZGMDVGRkZGRkZGRkVGRkZGNTcKKzoxMDBENzAwMEZGRkZGRkZGRkZGRkY1QkZGRkNBRkY5RkZGRkFCOUU3QzUKKzoxMDBEODAwMDlGRjM4MUZGRkZGQzczRDdGRkZGNzdGRkZERkZGQ0ZGQTEKKzoxMDBEOTAwMEZGRkZGRkNGRkZGRkZGRjAxRkZGRkZGRkZFRjVGRkZGOEQKKzoxMDBEQTAwMEZGRjdERUZGRkU3RUZGQkZGRkJGRjFCM0ZGRkZFM0ZCRjgKKzoxMDBEQjAwMEZGRTExRjdGRkZGODc4RkZGQjFFRkZGN0ZFRTdGRkZGNTUKKzoxMDBEQzAwMEZGQkZGRkZGRkZGQUYwNEZGRkZGRkZGRUYzQzAwMDAwODEKKzoxMDBERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwMDAwMDAwNDAwQkYKKzoxMDBERTAwMDAxODA0MDQwMjAwMDAwMDgwMDAwMDAwMDAzMDAwMDAwRDcKKzoxMDBERjAwMDgwMDAwMDAxM0NGMEFGRkZGRkZGRkVGREJGRkZGQkZGRTcKKzoxMDBFMDAwMEZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRUZGN0YxMTkKKzoxMDBFMTAwMEZERkZGRkZGREZGRkVGRkZGRkZGRkZGRkZGRkY3RkZGOTQKKzoxMDBFMjAwMEZGRkZGRkRCRjA4RkZGRkZGRkZFRjBGRkRGRkZGRjdGMjUKKzoxMDBFMzAwMEZGRkZGRkJFRDdGRkVEQkQ3RUJGRkVGNjdGQkY3MUZGOTgKKzoxMDBFNDAwMEZGREFGRkY5RkZCRjdGRkVGRjZGN0ZGRkZGRkZGRkZGQUUKKzoxMDBFNTAwMDdGRkZEMEYwQ0ZGRkZGRkZGRUY4MzA0MjAwMDAwMDAwMjAKKzoxMDBFNjAwMDgwQzEwMDAwOTAwMEM0MDAwMDEyMjA0MzIyODE4NDAwNTEKKzoxMDBFNzAwMDAwMTQwMDAxMDAwODgwMDAwMjAwMDIwMDA0MDIwMDAwQ0IKKzoxMDBFODAwMDEwQzFGMDFGRkZGRkZGRkVGRkZGRkRGRkZGRERGRUZGQjQKKzoxMDBFOTAwMEI2NzZFNUJDRjlGN0FGNUZCRkZDREZDRkYxRkZFRjc5QzYKKzoxMDBFQTAwMEZGQkRGRkVGRkZGRkY3NkY1RkZGRkZGREVGRUZCRkZGM0UKKzoxMDBFQjAwMEZGRjA5RkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGQjIKKzoxMDBFQzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMUZGRkZGRkZGNDAKKzoxMDBFRDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMjIKKzoxMDBFRTAwMEYwRkZGRkZGRkZGRURCRkZGRkZEMkRGRjY5MkFFRjc3MUQKKzoxMDBFRjAwMEJCREQ1QURGRjZGNkQ2Rjc3REJERDFCMjRBRDZCMkJFMUIKKzoxMDBGMDAwMDk3RjVCREIzQURGRkVGN0Y2OTZCRkJERkZGRkZGRkYwMzAKKzoxMDBGMTAwMDJGRkZGRkZGRkVCRkZGRkZGRkRCRkZGNkZFOUZENEJGRUIKKzoxMDBGMjAwMEVEQUZGRjZCNkZGN0ZGREREQjMxRkRCRkZGNkY3RkZGQzUKKzoxMDBGMzAwMEZGREJGRkNCREZGNkZGRjZGRkZEQkZGRUY3RkZEMDhGMzUKKzoxMDBGNDAwMEZGRkZGRkZFRkZGRkZGRkQxRkZGNDYyRjlGRkZGRkZGN0QKKzoxMDBGNTAwMEE1RkZGRkZGREZCN0ZGRkZGMUZGRkZGRkY3RTk2QUJGNjQKKzoxMDBGNjAwMEZGRkZGREZGRkZGRDU1NTdGRkZGRkZGRkFGRjA0RkZGRjYKKzoxMDBGNzAwMEZGRkZGRUZFREZGRkZEMUZGRjQ2MkY5RkZGRkZGRkE1QzgKKzoxMDBGODAwMEZGRkZGRkMwMzdGRkZGRjE5OThFREM3RkU5NkFCRkZGRUIKKzoxMDBGOTAwMEYwMEZGRkZGRkQ1NTU3RkZGRkZGRkZGRkYwMEZGRkZGQjMKKzoxMDBGQTAwMEZGRkVGRkZGRkZGRjA3RkZDMEJFRkZGRkNGRUY5RkZGNkEKKzoxMDBGQjAwMEZGRkJGRkU3RkZGRkExRTNDRTNDNTgzRkYzRkZGREVGNTAKKzoxMDBGQzAwMEY5RkZGRkY3RjE3RkZGQ0JGRkZGRkZGMDJGRkZGRkZGRTAKKzoxMDBGRDAwMEZFRjU3RkZGRjBGRkZFRkZDNDc1RTdCOUZGRkZGRkVGRUYKKzoxMDBGRTAwMEZGQzczNzNCRkZGMDEzOUUwRkY0RkZGRUZCRkZGRkY5MzcKKzoxMDBGRjAwMEZDRkZGRkZGRkZCRkZGRkZGRkZBRjBFRkZGRkZGRkZFNjkKKzoxMDEwMDAwMEYzQzAwMTAwMDAwMjAwMDIyMjAwMDBDMDQwMDA0MDAwQzYKKzoxMDEwMTAwMDA0MDgwNDBBMDEwMTEwMjAyMDAwMDAwNDA4MDgwNDAwNEMKKzoxMDEwMjAwMDAwMDAwMDAwMDEwMDAwMDEzQ0YwQ0ZGRkZGRkZGRUZEQ0IKKzoxMDEwMzAwMDNGRkZGRkZGRkZGRkZGN0ZGRjdGRkY3RkZGQ0Y5REZGOTIKKzoxMDEwNDAwMEZGRjdGREYxRkZGRkZGRUVCRkZGRkZGRkZGRkVGRkZGMUEKKzoxMDEwNTAwMEZGRkZGRkZGRkZGRkZGREJGMDZGRkZGRkZGRkVGMEZGNzMKKzoxMDEwNjAwMEZGRkZGN0Y3RkZGRkZFQkZGN0ZGRkY1QkZGQkZGN0ZGRDUKKzoxMDEwNzAwMEZEN0Y3MUZERkZFREY3RkVFRkZGRkY3RkZGRkZGRkZGM0QKKzoxMDEwODAwMEZGRkZFRkZGN0ZGRkQwRjBGRkZGRkZGRkZFRjgzMDExMDMKKzoxMDEwOTAwMDAwNDg2MDQwODI2MDI0NjAwMENDMDA4MDA0MDEwMDAwQjEKKzoxMDEwQTAwMDE0MDEwQzA0MDAzMDAwMDAwMDA4MDgwMDAxMDBDMjAwMTgKKzoxMDEwQjAwMDAwMDIwMDgwMDBDMUYwNUZGRkZGRkZGRUZGRkZGRkZGQTcKKzoxMDEwQzAwMEY3N0JGRkYzRUJCRkZGRjdGRkZGRkZFNzVEM0ZGRkY2QTcKKzoxMDEwRDAwMEQxRkRGRkVCRjczREZGRkZGRjVGRkY3RjdGRjNGRkZGREEKKzoxMDEwRTAwMEVGRkRCRkZGRkZGMDVGRkZGRkZGRkVGRkZGRkZGRkZGMTIKKzoxMDEwRjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxMEUKKzoxMDExMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUYKKzoxMDExMTAwMEZGRkZGRkZGRjBERkZGRkZGRkZFRkZGRkZGRjVCNURGODMKKzoxMDExMjAwMDZGN0Q2OTdGRkJERjUyNUZGNkY3RkVGNkYzQkRCMURBNDQKKzoxMDExMzAwMENERkVGNkVFRDJCREE1QUZCREZGNkY3Q0VCMkJGQURBOEMKKzoxMDExNDAwMEZGRkVERkYwNEZGRkZGRkZGRUJGRkZGRkZGREJGRkY2RkQKKzoxMDExNTAwMEZGRjZGRkJEQkZDREJGRUI2RkY3NkZERkRCNTFGREJEMEUKKzoxMDExNjAwMEZGNkZGRjZGRkI1QkZGREJGRkY2RkVGNkZERkRCRkZFRDMKKzoxMDExNzAwMEY3RkZEMEZGRkZGRkZGRkVGRkZGRkZGQTUwRkZGRkZGNkIKKzoxMDExODAwMEYwNkZGRkZGRjA5NkZGRkZDNjJCRkZGRkYxRkNGRkZGQTQKKzoxMDExOTAwMEY3REJDM0ZGMDBGRkZGRkZGRkZGQzE0RkMzRkZGRkZGRjAKKzoxMDExQTAwMEFGRjA5RkZGRkZGRkZFRkZGRkZGRjVBMEZGRkZGRkYwODcKKzoxMDExQjAwMDZGRkZGRkYwOTZGRkZGQzYyQkZGRkZGMTVBRkZGRkZGMDcKKzoxMDExQzAwMEYzQzNGRjAwRkZGRkZGRkZGRkMxNEZDM0ZGRkZGRkZGQTAKKzoxMDExRDAwMEYwQ0ZGRkZGRkZGRUZGRkZGRkZGRkNGRkZGOUZGMDdGNTEKKzoxMDExRTAwMEZGRjlGQzRGRjNGRjI3RUJGRkZDODFGQzdGRkU3QkZGNDkKKzoxMDExRjAwMEY3RkYxMjdGRkZGRkZGRkYxOEZGRkZGRkZGRkZGRkYwNkEKKzoxMDEyMDAwMDdGRkZGRkZGRkVGNUZGRkZGRkRGRkVGRkZDN0U3RkJGREUKKzoxMDEyMTAwMEZGRkZBRkVGRkZERkRGRkJGRkYxQzNGRTZGRjFDRjNGNUIKKzoxMDEyMjAwMEZCRkZGRkNGRkVGRkZGRkU3RkJGRkZGRkJGRkFGMERGMzgKKzoxMDEyMzAwMEZGRkZGRkZFRjNDMDAwMDAwMTAwMDAwMDAwMDEwMDAwRkUKKzoxMDEyNDAwMDIwMDAwMTAwMTAwMDAwMDAwMTAwMDIwMDAwMDAwMDAwNkEKKzoxMDEyNTAwMDAwMDAwMDAyMDAwMDgwMDAwMjgwMDAwMjNDRjAyRkZGMkUKKzoxMDEyNjAwMEZGRkZGRUZEQkZGRkZCRkRGRkZGRkZGRkZGRkZGRkZGRDcKKzoxMDEyNzAwMEZGRkZGRkZGRkZGRkY1RjFGRjdGRkZGRkZGRkZFRkZGMjYKKzoxMDEyODAwMEZGRkZGRkZGRkVGRkZGRkZGRkZGRkZEQkYwMkZGRkZGNzIKKzoxMDEyOTAwMEZGRkVGMEZGRkZGRkZCRkZCRkZGRkZGRkZGRjdCRkZCRkUKKzoxMDEyQTAwMEZGRkZGRkRGRjdGRkYxRjdCRkZCRkZGRkZGN0ZERUZGNzEKKzoxMDEyQjAwMEZGRkZGRkZGRkZFREY3RkZGRjdGRDBGMDNGRkZGRkZGRDYKKzoxMDEyQzAwMEZFRjgzMDAwMDAwMDAwNDAwMDAwMDAwMEUwMDAwMDgwNTgKKzoxMDEyRDAwMDIwMDEwMTkyMDAwMTAxMDBFMDFDNjAyMDMwMDgwODAwOUMKKzoxMDEyRTAwMDAwMDAwMDAwMDAwMDAwODAwMEMxRjA2RkZGRkZGRkZFNjMKKzoxMDEyRjAwMEZGRkZGRkZGRkZEQkZFRkZGRkRGRkZGQzdGRkJCRkZGMEEKKzoxMDEzMDAwMEZGRkZGRkZGRjFGNkZGRjc3RTNGRkY3RkZGRkZGRkY3RDUKKzoxMDEzMTAwMEZGRkZGRkVERkZERkZGQjdGRkYwM0ZGRkZGRkZGRUZGMjcKKzoxMDEzMjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ0QKKzoxMDEzMzAwMEZGRkZGRkYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ0IKKzoxMDEzNDAwMEZGRkZGRkZGRkZGRkZGRkZGMEZGRkZGRkZGRkVGRkZGQkQKKzoxMDEzNTAwMEZGRkZGRkZGREZGRkZGRkZERkZGRkZGRkZGQkZGRkRGM0QKKzoxMDEzNjAwMDU3RUZGMUZERkU3RkZGRkZGRkZGRkZGRkZGREZGQkZGRkEKKzoxMDEzNzAwMEZGRkZGRkZGRkZGRkZGRjA3RkZGRkZGRkZFRkZGRkZGMEQKKzoxMDEzODAwMEZGRkZGRjdGRkZGRkZGRkZGRkZGRkZGRkZCRkZERkZGMTEKKzoxMDEzOTAwMEZGRjFGREZGN0ZCRkZGRkZGRkZGRkZGRkZGRkZGRkZGMkQKKzoxMDEzQTAwMEZGRkVGRkZGRkZGRkYwOUZGRkZGRkZGRUY3RkRGRkZGQzgKKzoxMDEzQjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGQkZGRkZGRkZGRkZGN0QKKzoxMDEzQzAwMEYxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGM0IKKzoxMDEzRDAwMEZGRkZGRkZGRkZGMDZGRkZGRkZGRkVGRkZGRkZGRkZGQkQKKzoxMDEzRTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxMUIKKzoxMDEzRjAwMEZGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKKzoxMDE0MDAwMEZGRkZGRkZGRjBDRkZGRkZGRkZFRkZGRkZGRkZGRkZGMkMKKzoxMDE0MTAwMEZGRkJGRkZGRkZGRUZGRkZGQjZGRkZGRUJGRkZGMUZGQzQKKzoxMDE0MjAwMEY3RkZGRjdGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZENTYKKzoxMDE0MzAwMEZGRkZGRkYwRUZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGREMKKzoxMDE0NDAwMEZCRkZGRkZGRkVGRkZGRkY1N0ZGRkRCRkZGRjFGRkVGQjkKKzoxMDE0NTAwMEZFRkZCRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGREUKKzoxMDE0NjAwMERFRkZGMENGRkZGRkZGRkVGRkZGRkZGN0RCRkZEQkZEM0YKKzoxMDE0NzAwMEY2RkZGNkZGM0NCQ0JDQkZERjZGRTcyRkYxM0NCRkZEQzIKKzoxMDE0ODAwMEJGREY2RkZGNkZGN0RCRkZEQkZERjZGRkY2RkZGRkZGNTAKKzoxMDE0OTAwMDAyMDFERkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRkZGNzgKKzoxMDE0QTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNEMKKzowNjE0QjAwMEZGRkZGRkZGRkZGRjNDCis6MDAwMDAwMDFGRgorLyoKKyAqCisgKiBGaWxlIHlhbTExMS5tY3MgY29udmVydGVkIHRvIGggZm9ybWF0IGJ5IG1jczJoCisgKgorICogKEMpIEY2RkJCIDE5OTgKKyAqCisgKiBUdWUgQXVnIDI1IDIwOjIzOjAzIDE5OTgKKyAqCisgKi8KZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IGNlZjhiMTguLjg2YjIwM2YgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtNjYsNiArNjYsMTMgQEAKIAlib29sCiAJc2VsZWN0IEZTX1BPU0lYX0FDTAogCittZW51ICJDYWNoZXMiCisKK3NvdXJjZSAiZnMvZnNjYWNoZS9LY29uZmlnIgorc291cmNlICJmcy9jYWNoZWZpbGVzL0tjb25maWciCisKK2VuZG1lbnUKKwogaWYgQkxPQ0sKIG1lbnUgIkNELVJPTS9EVkQgRmlsZXN5c3RlbXMiCiAKQEAgLTE2OSw2ICsxNzYsOCBAQAogc291cmNlICJmcy9zeXN2L0tjb25maWciCiBzb3VyY2UgImZzL3Vmcy9LY29uZmlnIgogCitzb3VyY2UgImZzL2V4b2ZzL0tjb25maWciCisKIGVuZGlmICMgTUlTQ19GSUxFU1lTVEVNUwogCiBtZW51Y29uZmlnIE5FVFdPUktfRklMRVNZU1RFTVMKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggNmU4MmEzMC4uNzBiMmFlZCAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTExLDcgKzExLDcgQEAKIAkJYXR0ci5vIGJhZF9pbm9kZS5vIGZpbGUubyBmaWxlc3lzdGVtcy5vIG5hbWVzcGFjZS5vIFwKIAkJc2VxX2ZpbGUubyB4YXR0ci5vIGxpYmZzLm8gZnMtd3JpdGViYWNrLm8gXAogCQlwbm9kZS5vIGRyb3BfY2FjaGVzLm8gc3BsaWNlLm8gc3luYy5vIHV0aW1lcy5vIFwKLQkJc3RhY2subworCQlzdGFjay5vIGZzX3N0cnVjdC5vCiAKIGlmZXEgKCQoQ09ORklHX0JMT0NLKSx5KQogb2JqLXkgKz0JYnVmZmVyLm8gYmlvLm8gYmxvY2tfZGV2Lm8gZGlyZWN0LWlvLm8gbXBhZ2UubyBpb3ByaW8ubwpAQCAtNjMsNiArNjMsNyBAQAogb2JqLSQoQ09ORklHX0RMTSkJCSs9IGRsbS8KICAKICMgRG8gbm90IGFkZCBhbnkgZmlsZXN5c3RlbXMgYmVmb3JlIHRoaXMgbGluZQorb2JqLSQoQ09ORklHX0ZTQ0FDSEUpCQkrPSBmc2NhY2hlLwogb2JqLSQoQ09ORklHX1JFSVNFUkZTX0ZTKQkrPSByZWlzZXJmcy8KIG9iai0kKENPTkZJR19FWFQzX0ZTKQkJKz0gZXh0My8gIyBCZWZvcmUgZXh0MiBzbyByb290IGZzIGNhbiBiZSBleHQzCiBvYmotJChDT05GSUdfRVhUMl9GUykJCSs9IGV4dDIvCkBAIC0xMTYsNyArMTE3LDkgQEAKIG9iai0kKENPTkZJR19CRUZTX0ZTKQkJKz0gYmVmcy8KIG9iai0kKENPTkZJR19IT1NURlMpCQkrPSBob3N0ZnMvCiBvYmotJChDT05GSUdfSFBQRlMpCQkrPSBocHBmcy8KK29iai0kKENPTkZJR19DQUNIRUZJTEVTKQkrPSBjYWNoZWZpbGVzLwogb2JqLSQoQ09ORklHX0RFQlVHX0ZTKQkJKz0gZGVidWdmcy8KIG9iai0kKENPTkZJR19PQ0ZTMl9GUykJCSs9IG9jZnMyLwogb2JqLSQoQ09ORklHX0JUUkZTX0ZTKQkJKz0gYnRyZnMvCiBvYmotJChDT05GSUdfR0ZTMl9GUykgICAgICAgICAgICs9IGdmczIvCitvYmotJChDT05GSUdfRVhPRlNfRlMpICAgICAgICAgICs9IGV4b2ZzLwpkaWZmIC0tZ2l0IGEvZnMvYWRmcy9zdXBlci5jIGIvZnMvYWRmcy9zdXBlci5jCmluZGV4IDdmODNhNDYuLmRkOWJlY2MgMTAwNjQ0Ci0tLSBhL2ZzL2FkZnMvc3VwZXIuYworKysgYi9mcy9hZGZzL3N1cGVyLmMKQEAgLTIxOSwxNiArMjE5LDIwIEBACiAKIHN0YXRpYyBpbnQgYWRmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewotCXN0cnVjdCBhZGZzX3NiX2luZm8gKmFzYiA9IEFERlNfU0IoZGVudHJ5LT5kX3NiKTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOworCXN0cnVjdCBhZGZzX3NiX2luZm8gKnNiaSA9IEFERlNfU0Ioc2IpOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzYi0+c19iZGV2LT5iZF9kZXYpOwogCiAJYnVmLT5mX3R5cGUgICAgPSBBREZTX1NVUEVSX01BR0lDOwotCWJ1Zi0+Zl9uYW1lbGVuID0gYXNiLT5zX25hbWVsZW47Ci0JYnVmLT5mX2JzaXplICAgPSBkZW50cnktPmRfc2ItPnNfYmxvY2tzaXplOwotCWJ1Zi0+Zl9ibG9ja3MgID0gYXNiLT5zX3NpemU7Ci0JYnVmLT5mX2ZpbGVzICAgPSBhc2ItPnNfaWRzX3Blcl96b25lICogYXNiLT5zX21hcF9zaXplOworCWJ1Zi0+Zl9uYW1lbGVuID0gc2JpLT5zX25hbWVsZW47CisJYnVmLT5mX2JzaXplICAgPSBzYi0+c19ibG9ja3NpemU7CisJYnVmLT5mX2Jsb2NrcyAgPSBzYmktPnNfc2l6ZTsKKwlidWYtPmZfZmlsZXMgICA9IHNiaS0+c19pZHNfcGVyX3pvbmUgKiBzYmktPnNfbWFwX3NpemU7CiAJYnVmLT5mX2JhdmFpbCAgPQotCWJ1Zi0+Zl9iZnJlZSAgID0gYWRmc19tYXBfZnJlZShkZW50cnktPmRfc2IpOworCWJ1Zi0+Zl9iZnJlZSAgID0gYWRmc19tYXBfZnJlZShzYik7CiAJYnVmLT5mX2ZmcmVlICAgPSAobG9uZykoYnVmLT5mX2JmcmVlICogYnVmLT5mX2ZpbGVzKSAvIChsb25nKWJ1Zi0+Zl9ibG9ja3M7CisJYnVmLT5mX2ZzaWQudmFsWzBdID0gKHUzMilpZDsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKShpZCA+PiAzMik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2FmZnMvc3VwZXIuYyBiL2ZzL2FmZnMvc3VwZXIuYwppbmRleCBhMTlkNjRiLi41Y2U2OTVlIDEwMDY0NAotLS0gYS9mcy9hZmZzL3N1cGVyLmMKKysrIGIvZnMvYWZmcy9zdXBlci5jCkBAIC01MzMsNiArNTMzLDcgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOwogCWludAkJIGZyZWU7CisJdTY0CQkgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCXByX2RlYnVnKCJBRkZTOiBzdGF0ZnMoKSBwYXJ0c2l6ZT0lZCwgcmVzZXJ2ZWQ9JWRcbiIsQUZGU19TQihzYiktPnNfcGFydGl0aW9uX3NpemUsCiAJICAgICBBRkZTX1NCKHNiKS0+c19yZXNlcnZlZCk7CkBAIC01NDMsNiArNTQ0LDkgQEAKIAlidWYtPmZfYmxvY2tzICA9IEFGRlNfU0Ioc2IpLT5zX3BhcnRpdGlvbl9zaXplIC0gQUZGU19TQihzYiktPnNfcmVzZXJ2ZWQ7CiAJYnVmLT5mX2JmcmVlICAgPSBmcmVlOwogCWJ1Zi0+Zl9iYXZhaWwgID0gZnJlZTsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKKwlidWYtPmZfbmFtZWxlbiA9IDMwOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9hZnMvS2NvbmZpZyBiL2ZzL2Fmcy9LY29uZmlnCmluZGV4IGU3YjUyMmYuLjVjNGU2MWQgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9LY29uZmlnCisrKyBiL2ZzL2Fmcy9LY29uZmlnCkBAIC0xOSwzICsxOSwxMSBAQAogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvYWZzLnR4dD4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBBRlNfRlNDQUNIRQorCWJvb2wgIlByb3ZpZGUgQUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEFGU19GUz1tICYmIEZTQ0FDSEUgfHwgQUZTX0ZTPXkgJiYgRlNDQUNIRT15CisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBBRlMgZGF0YSB0byBiZSBjYWNoZWQgbG9jYWxseSBvbiBkaXNrIHRocm91Z2gKKwkgIHRoZSBnZW5lcmljIGZpbGVzeXN0ZW0gY2FjaGUgbWFuYWdlcgpkaWZmIC0tZ2l0IGEvZnMvYWZzL01ha2VmaWxlIGIvZnMvYWZzL01ha2VmaWxlCmluZGV4IGE2NjY3MTAuLjRmNjRiOTUgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9NYWtlZmlsZQorKysgYi9mcy9hZnMvTWFrZWZpbGUKQEAgLTIsNyArMiwxMCBAQAogIyBNYWtlZmlsZSBmb3IgUmVkIEhhdCBMaW51eCBBRlMgY2xpZW50LgogIwogCithZnMtY2FjaGUtJChDT05GSUdfQUZTX0ZTQ0FDSEUpIDo9IGNhY2hlLm8KKwoga2Fmcy1vYmpzIDo9IFwKKwkkKGFmcy1jYWNoZS15KSBcCiAJY2FsbGJhY2subyBcCiAJY2VsbC5vIFwKIAljbXNlcnZpY2UubyBcCmRpZmYgLS1naXQgYS9mcy9hZnMvY2FjaGUuYyBiL2ZzL2Fmcy9jYWNoZS5jCmluZGV4IGRlMGQ3ZGUuLmUyYjFkM2YgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9jYWNoZS5jCisrKyBiL2ZzL2Fmcy9jYWNoZS5jCkBAIC0xLDYgKzEsNiBAQAogLyogQUZTIGNhY2hpbmcgc3R1ZmYKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC05LDI0OCArOSwzOTUgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyBjYWNoZWZzX21hdGNoX3ZhbF90IGFmc19jZWxsX2NhY2hlX21hdGNoKHZvaWQgKnRhcmdldCwKLQkJCQkJCWNvbnN0IHZvaWQgKmVudHJ5KTsKLXN0YXRpYyB2b2lkIGFmc19jZWxsX2NhY2hlX3VwZGF0ZSh2b2lkICpzb3VyY2UsIHZvaWQgKmVudHJ5KTsKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCi1zdHJ1Y3QgY2FjaGVmc19pbmRleF9kZWYgYWZzX2NhY2hlX2NlbGxfaW5kZXhfZGVmID0gewotCS5uYW1lCQkJPSAiY2VsbF9peCIsCi0JLmRhdGFfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IGFmc19jYWNoZV9jZWxsKSwKLQkua2V5c1swXQkJPSB7IENBQ0hFRlNfSU5ERVhfS0VZU19BU0NJSVosIDY0IH0sCi0JLm1hdGNoCQkJPSBhZnNfY2VsbF9jYWNoZV9tYXRjaCwKLQkudXBkYXRlCQkJPSBhZnNfY2VsbF9jYWNoZV91cGRhdGUsCitzdGF0aWMgdWludDE2X3QgYWZzX2NlbGxfY2FjaGVfZ2V0X2tleShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgICAgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZsZW4pOworc3RhdGljIHVpbnQxNl90IGFmc19jZWxsX2NhY2hlX2dldF9hdXgoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbGVuKTsKK3N0YXRpYyBlbnVtIGZzY2FjaGVfY2hlY2thdXggYWZzX2NlbGxfY2FjaGVfY2hlY2tfYXV4KHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkJICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCQkJICAgICAgdWludDE2X3QgYnVmbGVuKTsKKworc3RhdGljIHVpbnQxNl90IGFmc192bG9jYXRpb25fY2FjaGVfZ2V0X2tleShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJICAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbGVuKTsKK3N0YXRpYyB1aW50MTZfdCBhZnNfdmxvY2F0aW9uX2NhY2hlX2dldF9hdXgoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zmxlbik7CitzdGF0aWMgZW51bSBmc2NhY2hlX2NoZWNrYXV4IGFmc192bG9jYXRpb25fY2FjaGVfY2hlY2tfYXV4KAorCXZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLCBjb25zdCB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zmxlbik7CisKK3N0YXRpYyB1aW50MTZfdCBhZnNfdm9sdW1lX2NhY2hlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zmxlbik7CisKK3N0YXRpYyB1aW50MTZfdCBhZnNfdm5vZGVfY2FjaGVfZ2V0X2tleShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZsZW4pOworc3RhdGljIHZvaWQgYWZzX3Zub2RlX2NhY2hlX2dldF9hdHRyKGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSAgICAgdWludDY0X3QgKnNpemUpOworc3RhdGljIHVpbnQxNl90IGFmc192bm9kZV9jYWNoZV9nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQl2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zmxlbik7CitzdGF0aWMgZW51bSBmc2NhY2hlX2NoZWNrYXV4IGFmc192bm9kZV9jYWNoZV9jaGVja19hdXgodm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCQkgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCQkJICAgICAgIHVpbnQxNl90IGJ1Zmxlbik7CitzdGF0aWMgdm9pZCBhZnNfdm5vZGVfY2FjaGVfbm93X3VuY2FjaGVkKHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhKTsKKworc3RydWN0IGZzY2FjaGVfbmV0ZnMgYWZzX2NhY2hlX25ldGZzID0geworCS5uYW1lCQkJPSAiYWZzIiwKKwkudmVyc2lvbgkJPSAwLAogfTsKLSNlbmRpZgorCitzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGFmc19jZWxsX2NhY2hlX2luZGV4X2RlZiA9IHsKKwkubmFtZQkJPSAiQUZTLmNlbGwiLAorCS50eXBlCQk9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgsCisJLmdldF9rZXkJPSBhZnNfY2VsbF9jYWNoZV9nZXRfa2V5LAorCS5nZXRfYXV4CT0gYWZzX2NlbGxfY2FjaGVfZ2V0X2F1eCwKKwkuY2hlY2tfYXV4CT0gYWZzX2NlbGxfY2FjaGVfY2hlY2tfYXV4LAorfTsKKworc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBhZnNfdmxvY2F0aW9uX2NhY2hlX2luZGV4X2RlZiA9IHsKKwkubmFtZQkJCT0gIkFGUy52bGRiIiwKKwkudHlwZQkJCT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCwKKwkuZ2V0X2tleQkJPSBhZnNfdmxvY2F0aW9uX2NhY2hlX2dldF9rZXksCisJLmdldF9hdXgJCT0gYWZzX3Zsb2NhdGlvbl9jYWNoZV9nZXRfYXV4LAorCS5jaGVja19hdXgJCT0gYWZzX3Zsb2NhdGlvbl9jYWNoZV9jaGVja19hdXgsCit9OworCitzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGFmc192b2x1bWVfY2FjaGVfaW5kZXhfZGVmID0geworCS5uYW1lCQk9ICJBRlMudm9sdW1lIiwKKwkudHlwZQkJPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYLAorCS5nZXRfa2V5CT0gYWZzX3ZvbHVtZV9jYWNoZV9nZXRfa2V5LAorfTsKKworc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBhZnNfdm5vZGVfY2FjaGVfaW5kZXhfZGVmID0geworCS5uYW1lCQkJPSAiQUZTLnZub2RlIiwKKwkudHlwZQkJCT0gRlNDQUNIRV9DT09LSUVfVFlQRV9EQVRBRklMRSwKKwkuZ2V0X2tleQkJPSBhZnNfdm5vZGVfY2FjaGVfZ2V0X2tleSwKKwkuZ2V0X2F0dHIJCT0gYWZzX3Zub2RlX2NhY2hlX2dldF9hdHRyLAorCS5nZXRfYXV4CQk9IGFmc192bm9kZV9jYWNoZV9nZXRfYXV4LAorCS5jaGVja19hdXgJCT0gYWZzX3Zub2RlX2NhY2hlX2NoZWNrX2F1eCwKKwkubm93X3VuY2FjaGVkCQk9IGFmc192bm9kZV9jYWNoZV9ub3dfdW5jYWNoZWQsCit9OwogCiAvKgotICogbWF0Y2ggYSBjZWxsIHJlY29yZCBvYnRhaW5lZCBmcm9tIHRoZSBjYWNoZQorICogc2V0IHRoZSBrZXkgZm9yIHRoZSBpbmRleCBlbnRyeQogICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotc3RhdGljIGNhY2hlZnNfbWF0Y2hfdmFsX3QgYWZzX2NlbGxfY2FjaGVfbWF0Y2godm9pZCAqdGFyZ2V0LAotCQkJCQkJY29uc3Qgdm9pZCAqZW50cnkpCitzdGF0aWMgdWludDE2X3QgYWZzX2NlbGxfY2FjaGVfZ2V0X2tleShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgICAgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCiB7Ci0JY29uc3Qgc3RydWN0IGFmc19jYWNoZV9jZWxsICpjY2VsbCA9IGVudHJ5OwotCXN0cnVjdCBhZnNfY2VsbCAqY2VsbCA9IHRhcmdldDsKKwljb25zdCBzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwl1aW50MTZfdCBrbGVuOwogCi0JX2VudGVyKCJ7JXN9LHslc30iLCBjY2VsbC0+bmFtZSwgY2VsbC0+bmFtZSk7CisJX2VudGVyKCIlcCwlcCwldSIsIGNlbGwsIGJ1ZmZlciwgYnVmbWF4KTsKIAotCWlmIChzdHJuY21wKGNjZWxsLT5uYW1lLCBjZWxsLT5uYW1lLCBzaXplb2YoY2NlbGwtPm5hbWUpKSA9PSAwKSB7Ci0JCV9sZWF2ZSgiID0gU1VDQ0VTUyIpOwotCQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9TVUNDRVNTOworCWtsZW4gPSBzdHJsZW4oY2VsbC0+bmFtZSk7CisJaWYgKGtsZW4gPiBidWZtYXgpCisJCXJldHVybiAwOworCisJbWVtY3B5KGJ1ZmZlciwgY2VsbC0+bmFtZSwga2xlbik7CisJcmV0dXJuIGtsZW47Cit9CisKKy8qCisgKiBwcm92aWRlIG5ldyBhdXhpbGxpYXJ5IGNhY2hlIGRhdGEKKyAqLworc3RhdGljIHVpbnQxNl90IGFmc19jZWxsX2NhY2hlX2dldF9hdXgoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICAgICAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQoreworCWNvbnN0IHN0cnVjdCBhZnNfY2VsbCAqY2VsbCA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGRsZW47CisKKwlfZW50ZXIoIiVwLCVwLCV1IiwgY2VsbCwgYnVmZmVyLCBidWZtYXgpOworCisJZGxlbiA9IGNlbGwtPnZsX25hZGRycyAqIHNpemVvZihjZWxsLT52bF9hZGRyc1swXSk7CisJZGxlbiA9IG1pbihkbGVuLCBidWZtYXgpOworCWRsZW4gJj0gfihzaXplb2YoY2VsbC0+dmxfYWRkcnNbMF0pIC0gMSk7CisKKwltZW1jcHkoYnVmZmVyLCBjZWxsLT52bF9hZGRycywgZGxlbik7CisJcmV0dXJuIGRsZW47Cit9CisKKy8qCisgKiBjaGVjayB0aGF0IHRoZSBhdXhpbGxpYXJ5IGRhdGEgaW5kaWNhdGVzIHRoYXQgdGhlIGVudHJ5IGlzIHN0aWxsIHZhbGlkCisgKi8KK3N0YXRpYyBlbnVtIGZzY2FjaGVfY2hlY2thdXggYWZzX2NlbGxfY2FjaGVfY2hlY2tfYXV4KHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkJICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCQkJICAgICAgdWludDE2X3QgYnVmbGVuKQoreworCV9sZWF2ZSgiID0gT0tBWSIpOworCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09LQVk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBzZXQgdGhlIGtleSBmb3IgdGhlIGluZGV4IGVudHJ5CisgKi8KK3N0YXRpYyB1aW50MTZfdCBhZnNfdmxvY2F0aW9uX2NhY2hlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgYWZzX3Zsb2NhdGlvbiAqdmxvY2F0aW9uID0gY29va2llX25ldGZzX2RhdGE7CisJdWludDE2X3Qga2xlbjsKKworCV9lbnRlcigieyVzfSwlcCwldSIsIHZsb2NhdGlvbi0+dmxkYi5uYW1lLCBidWZmZXIsIGJ1Zm1heCk7CisKKwlrbGVuID0gc3Rybmxlbih2bG9jYXRpb24tPnZsZGIubmFtZSwgc2l6ZW9mKHZsb2NhdGlvbi0+dmxkYi5uYW1lKSk7CisJaWYgKGtsZW4gPiBidWZtYXgpCisJCXJldHVybiAwOworCisJbWVtY3B5KGJ1ZmZlciwgdmxvY2F0aW9uLT52bGRiLm5hbWUsIGtsZW4pOworCisJX2xlYXZlKCIgPSAldSIsIGtsZW4pOworCXJldHVybiBrbGVuOworfQorCisvKgorICogcHJvdmlkZSBuZXcgYXV4aWxsaWFyeSBjYWNoZSBkYXRhCisgKi8KK3N0YXRpYyB1aW50MTZfdCBhZnNfdmxvY2F0aW9uX2NhY2hlX2dldF9hdXgoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgYWZzX3Zsb2NhdGlvbiAqdmxvY2F0aW9uID0gY29va2llX25ldGZzX2RhdGE7CisJdWludDE2X3QgZGxlbjsKKworCV9lbnRlcigieyVzfSwlcCwldSIsIHZsb2NhdGlvbi0+dmxkYi5uYW1lLCBidWZmZXIsIGJ1Zm1heCk7CisKKwlkbGVuID0gc2l6ZW9mKHN0cnVjdCBhZnNfY2FjaGVfdmxvY2F0aW9uKTsKKwlkbGVuIC09IG9mZnNldG9mKHN0cnVjdCBhZnNfY2FjaGVfdmxvY2F0aW9uLCBuc2VydmVycyk7CisJaWYgKGRsZW4gPiBidWZtYXgpCisJCXJldHVybiAwOworCisJbWVtY3B5KGJ1ZmZlciwgKHVpbnQ4X3QgKikmdmxvY2F0aW9uLT52bGRiLm5zZXJ2ZXJzLCBkbGVuKTsKKworCV9sZWF2ZSgiID0gJXUiLCBkbGVuKTsKKwlyZXR1cm4gZGxlbjsKK30KKworLyoKKyAqIGNoZWNrIHRoYXQgdGhlIGF1eGlsbGlhcnkgZGF0YSBpbmRpY2F0ZXMgdGhhdCB0aGUgZW50cnkgaXMgc3RpbGwgdmFsaWQKKyAqLworc3RhdGljCitlbnVtIGZzY2FjaGVfY2hlY2thdXggYWZzX3Zsb2NhdGlvbl9jYWNoZV9jaGVja19hdXgodm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCQkgICAgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCQkJICAgIHVpbnQxNl90IGJ1ZmxlbikKK3sKKwljb25zdCBzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbiAqY3ZsZGI7CisJc3RydWN0IGFmc192bG9jYXRpb24gKnZsb2NhdGlvbiA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IGRsZW47CisKKwlfZW50ZXIoInslc30sJXAsJXUiLCB2bG9jYXRpb24tPnZsZGIubmFtZSwgYnVmZmVyLCBidWZsZW4pOworCisJLyogY2hlY2sgdGhlIHNpemUgb2YgdGhlIGRhdGEgaXMgd2hhdCB3ZSdyZSBleHBlY3RpbmcgKi8KKwlkbGVuID0gc2l6ZW9mKHN0cnVjdCBhZnNfY2FjaGVfdmxvY2F0aW9uKTsKKwlkbGVuIC09IG9mZnNldG9mKHN0cnVjdCBhZnNfY2FjaGVfdmxvY2F0aW9uLCBuc2VydmVycyk7CisJaWYgKGRsZW4gIT0gYnVmbGVuKQorCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKKworCWN2bGRiID0gY29udGFpbmVyX29mKGJ1ZmZlciwgc3RydWN0IGFmc19jYWNoZV92bG9jYXRpb24sIG5zZXJ2ZXJzKTsKKworCS8qIGlmIHdoYXQncyBvbiBkaXNrIGlzIG1vcmUgdmFsaWQgdGhhbiB3aGF0J3MgaW4gbWVtb3J5LCB0aGVuIHVzZSB0aGUKKwkgKiBWTCByZWNvcmQgZnJvbSB0aGUgY2FjaGUgKi8KKwlpZiAoIXZsb2NhdGlvbi0+dmFsaWQgfHwgdmxvY2F0aW9uLT52bGRiLnJ0aW1lID09IGN2bGRiLT5ydGltZSkgeworCQltZW1jcHkoKHVpbnQ4X3QgKikmdmxvY2F0aW9uLT52bGRiLm5zZXJ2ZXJzLCBidWZmZXIsIGRsZW4pOworCQl2bG9jYXRpb24tPnZhbGlkID0gMTsKKwkJX2xlYXZlKCIgPSBTVUNDRVNTIFtjLT5tXSIpOworCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PS0FZOwogCX0KIAotCV9sZWF2ZSgiID0gRkFJTEVEIik7Ci0JcmV0dXJuIENBQ0hFRlNfTUFUQ0hfRkFJTEVEOwotfQotI2VuZGlmCi0KLS8qCi0gKiB1cGRhdGUgYSBjZWxsIHJlY29yZCBpbiB0aGUgY2FjaGUKLSAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyB2b2lkIGFmc19jZWxsX2NhY2hlX3VwZGF0ZSh2b2lkICpzb3VyY2UsIHZvaWQgKmVudHJ5KQotewotCXN0cnVjdCBhZnNfY2FjaGVfY2VsbCAqY2NlbGwgPSBlbnRyeTsKLQlzdHJ1Y3QgYWZzX2NlbGwgKmNlbGwgPSBzb3VyY2U7Ci0KLQlfZW50ZXIoIiVwLCVwIiwgc291cmNlLCBlbnRyeSk7Ci0KLQlzdHJuY3B5KGNjZWxsLT5uYW1lLCBjZWxsLT5uYW1lLCBzaXplb2YoY2NlbGwtPm5hbWUpKTsKLQotCW1lbWNweShjY2VsbC0+dmxfc2VydmVycywKLQkgICAgICAgY2VsbC0+dmxfYWRkcnMsCi0JICAgICAgIG1pbihzaXplb2YoY2NlbGwtPnZsX3NlcnZlcnMpLCBzaXplb2YoY2VsbC0+dmxfYWRkcnMpKSk7Ci0KLX0KLSNlbmRpZgotCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotc3RhdGljIGNhY2hlZnNfbWF0Y2hfdmFsX3QgYWZzX3Zsb2NhdGlvbl9jYWNoZV9tYXRjaCh2b2lkICp0YXJnZXQsCi0JCQkJCQkgICAgIGNvbnN0IHZvaWQgKmVudHJ5KTsKLXN0YXRpYyB2b2lkIGFmc192bG9jYXRpb25fY2FjaGVfdXBkYXRlKHZvaWQgKnNvdXJjZSwgdm9pZCAqZW50cnkpOwotCi1zdHJ1Y3QgY2FjaGVmc19pbmRleF9kZWYgYWZzX3Zsb2NhdGlvbl9jYWNoZV9pbmRleF9kZWYgPSB7Ci0JLm5hbWUJCT0gInZsZGIiLAotCS5kYXRhX3NpemUJPSBzaXplb2Yoc3RydWN0IGFmc19jYWNoZV92bG9jYXRpb24pLAotCS5rZXlzWzBdCT0geyBDQUNIRUZTX0lOREVYX0tFWVNfQVNDSUlaLCA2NCB9LAotCS5tYXRjaAkJPSBhZnNfdmxvY2F0aW9uX2NhY2hlX21hdGNoLAotCS51cGRhdGUJCT0gYWZzX3Zsb2NhdGlvbl9jYWNoZV91cGRhdGUsCi19OwotI2VuZGlmCi0KLS8qCi0gKiBtYXRjaCBhIFZMREIgcmVjb3JkIHN0b3JlZCBpbiB0aGUgY2FjaGUKLSAqIC0gbWF5IGFsc28gbG9hZCB0YXJnZXQgZnJvbSBlbnRyeQotICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotc3RhdGljIGNhY2hlZnNfbWF0Y2hfdmFsX3QgYWZzX3Zsb2NhdGlvbl9jYWNoZV9tYXRjaCh2b2lkICp0YXJnZXQsCi0JCQkJCQkgICAgIGNvbnN0IHZvaWQgKmVudHJ5KQotewotCWNvbnN0IHN0cnVjdCBhZnNfY2FjaGVfdmxvY2F0aW9uICp2bGRiID0gZW50cnk7Ci0Jc3RydWN0IGFmc192bG9jYXRpb24gKnZsb2NhdGlvbiA9IHRhcmdldDsKLQotCV9lbnRlcigieyVzfSx7JXN9IiwgdmxvY2F0aW9uLT52bGRiLm5hbWUsIHZsZGItPm5hbWUpOwotCi0JaWYgKHN0cm5jbXAodmxvY2F0aW9uLT52bGRiLm5hbWUsIHZsZGItPm5hbWUsIHNpemVvZih2bGRiLT5uYW1lKSkgPT0gMAotCSAgICApIHsKLQkJaWYgKCF2bG9jYXRpb24tPnZhbGlkIHx8Ci0JCSAgICB2bG9jYXRpb24tPnZsZGIucnRpbWUgPT0gdmxkYi0+cnRpbWUKKwkvKiBuZWVkIHRvIHVwZGF0ZSB0aGUgY2FjaGUgaWYgdGhlIGNhY2hlZCBpbmZvIGRpZmZlcnMgKi8KKwlpZiAobWVtY21wKCZ2bG9jYXRpb24tPnZsZGIsIGJ1ZmZlciwgZGxlbikgIT0gMCkgeworCQkvKiBkZWxldGUgaWYgdGhlIHZvbHVtZSBJRHMgZm9yIHRoaXMgbmFtZSBkaWZmZXIgKi8KKwkJaWYgKG1lbWNtcCgmdmxvY2F0aW9uLT52bGRiLnZpZCwgJmN2bGRiLT52aWQsCisJCQkgICBzaXplb2YoY3ZsZGItPnZpZCkpICE9IDAKIAkJICAgICkgewotCQkJdmxvY2F0aW9uLT52bGRiID0gKnZsZGI7Ci0JCQl2bG9jYXRpb24tPnZhbGlkID0gMTsKLQkJCV9sZWF2ZSgiID0gU1VDQ0VTUyBbYy0+bV0iKTsKLQkJCXJldHVybiBDQUNIRUZTX01BVENIX1NVQ0NFU1M7Ci0JCX0gZWxzZSBpZiAobWVtY21wKCZ2bG9jYXRpb24tPnZsZGIsIHZsZGIsIHNpemVvZigqdmxkYikpICE9IDApIHsKLQkJCS8qIGRlbGV0ZSBpZiBWSURzIGZvciB0aGlzIG5hbWUgZGlmZmVyICovCi0JCQlpZiAobWVtY21wKCZ2bG9jYXRpb24tPnZsZGIudmlkLAotCQkJCSAgICZ2bGRiLT52aWQsCi0JCQkJICAgc2l6ZW9mKHZsZGItPnZpZCkpICE9IDApIHsKLQkJCQlfbGVhdmUoIiA9IERFTEVURSIpOwotCQkJCXJldHVybiBDQUNIRUZTX01BVENIX1NVQ0NFU1NfREVMRVRFOwotCQkJfQotCi0JCQlfbGVhdmUoIiA9IFVQREFURSIpOwotCQkJcmV0dXJuIENBQ0hFRlNfTUFUQ0hfU1VDQ0VTU19VUERBVEU7Ci0JCX0gZWxzZSB7Ci0JCQlfbGVhdmUoIiA9IFNVQ0NFU1MiKTsKLQkJCXJldHVybiBDQUNIRUZTX01BVENIX1NVQ0NFU1M7CisJCQlfbGVhdmUoIiA9IE9CU09MRVRFIik7CisJCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKIAkJfQorCisJCV9sZWF2ZSgiID0gVVBEQVRFIik7CisJCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX05FRURTX1VQREFURTsKIAl9CiAKLQlfbGVhdmUoIiA9IEZBSUxFRCIpOwotCXJldHVybiBDQUNIRUZTX01BVENIX0ZBSUxFRDsKKwlfbGVhdmUoIiA9IE9LQVkiKTsKKwlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PS0FZOwogfQotI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBzZXQgdGhlIGtleSBmb3IgdGhlIHZvbHVtZSBpbmRleCBlbnRyeQorICovCitzdGF0aWMgdWludDE2X3QgYWZzX3ZvbHVtZV9jYWNoZV9nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQl2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgYWZzX3ZvbHVtZSAqdm9sdW1lID0gY29va2llX25ldGZzX2RhdGE7CisJdWludDE2X3Qga2xlbjsKKworCV9lbnRlcigieyV1fSwlcCwldSIsIHZvbHVtZS0+dHlwZSwgYnVmZmVyLCBidWZtYXgpOworCisJa2xlbiA9IHNpemVvZih2b2x1bWUtPnR5cGUpOworCWlmIChrbGVuID4gYnVmbWF4KQorCQlyZXR1cm4gMDsKKworCW1lbWNweShidWZmZXIsICZ2b2x1bWUtPnR5cGUsIHNpemVvZih2b2x1bWUtPnR5cGUpKTsKKworCV9sZWF2ZSgiID0gJXUiLCBrbGVuKTsKKwlyZXR1cm4ga2xlbjsKKworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogc2V0IHRoZSBrZXkgZm9yIHRoZSBpbmRleCBlbnRyeQorICovCitzdGF0aWMgdWludDE2X3QgYWZzX3Zub2RlX2NhY2hlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCXZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQoreworCWNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gY29va2llX25ldGZzX2RhdGE7CisJdWludDE2X3Qga2xlbjsKKworCV9lbnRlcigieyV4LCV4LCVsbHh9LCVwLCV1IiwKKwkgICAgICAgdm5vZGUtPmZpZC52bm9kZSwgdm5vZGUtPmZpZC51bmlxdWUsIHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uLAorCSAgICAgICBidWZmZXIsIGJ1Zm1heCk7CisKKwlrbGVuID0gc2l6ZW9mKHZub2RlLT5maWQudm5vZGUpOworCWlmIChrbGVuID4gYnVmbWF4KQorCQlyZXR1cm4gMDsKKworCW1lbWNweShidWZmZXIsICZ2bm9kZS0+ZmlkLnZub2RlLCBzaXplb2Yodm5vZGUtPmZpZC52bm9kZSkpOworCisJX2xlYXZlKCIgPSAldSIsIGtsZW4pOworCXJldHVybiBrbGVuOworfQogCiAvKgotICogdXBkYXRlIGEgVkxEQiByZWNvcmQgc3RvcmVkIGluIHRoZSBjYWNoZQorICogcHJvdmlkZSB1cGRhdGVkIGZpbGUgYXR0cmlidXRlcwogICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotc3RhdGljIHZvaWQgYWZzX3Zsb2NhdGlvbl9jYWNoZV91cGRhdGUodm9pZCAqc291cmNlLCB2b2lkICplbnRyeSkKK3N0YXRpYyB2b2lkIGFmc192bm9kZV9jYWNoZV9nZXRfYXR0cihjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkgICAgIHVpbnQ2NF90ICpzaXplKQogewotCXN0cnVjdCBhZnNfY2FjaGVfdmxvY2F0aW9uICp2bGRiID0gZW50cnk7Ci0Jc3RydWN0IGFmc192bG9jYXRpb24gKnZsb2NhdGlvbiA9IHNvdXJjZTsKKwljb25zdCBzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IGNvb2tpZV9uZXRmc19kYXRhOwogCi0JX2VudGVyKCIiKTsKKwlfZW50ZXIoInsleCwleCwlbGx4fSwiLAorCSAgICAgICB2bm9kZS0+ZmlkLnZub2RlLCB2bm9kZS0+ZmlkLnVuaXF1ZSwKKwkgICAgICAgdm5vZGUtPnN0YXR1cy5kYXRhX3ZlcnNpb24pOwogCi0JKnZsZGIgPSB2bG9jYXRpb24tPnZsZGI7CisJKnNpemUgPSB2bm9kZS0+c3RhdHVzLnNpemU7CiB9Ci0jZW5kaWYKLQotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyBjYWNoZWZzX21hdGNoX3ZhbF90IGFmc192b2x1bWVfY2FjaGVfbWF0Y2godm9pZCAqdGFyZ2V0LAotCQkJCQkJICBjb25zdCB2b2lkICplbnRyeSk7Ci1zdGF0aWMgdm9pZCBhZnNfdm9sdW1lX2NhY2hlX3VwZGF0ZSh2b2lkICpzb3VyY2UsIHZvaWQgKmVudHJ5KTsKLQotc3RydWN0IGNhY2hlZnNfaW5kZXhfZGVmIGFmc192b2x1bWVfY2FjaGVfaW5kZXhfZGVmID0gewotCS5uYW1lCQk9ICJ2b2x1bWUiLAotCS5kYXRhX3NpemUJPSBzaXplb2Yoc3RydWN0IGFmc19jYWNoZV92aGFzaCksCi0JLmtleXNbMF0JPSB7IENBQ0hFRlNfSU5ERVhfS0VZU19CSU4sIDEgfSwKLQkua2V5c1sxXQk9IHsgQ0FDSEVGU19JTkRFWF9LRVlTX0JJTiwgMSB9LAotCS5tYXRjaAkJPSBhZnNfdm9sdW1lX2NhY2hlX21hdGNoLAotCS51cGRhdGUJCT0gYWZzX3ZvbHVtZV9jYWNoZV91cGRhdGUsCi19OwotI2VuZGlmCiAKIC8qCi0gKiBtYXRjaCBhIHZvbHVtZSBoYXNoIHJlY29yZCBzdG9yZWQgaW4gdGhlIGNhY2hlCisgKiBwcm92aWRlIG5ldyBhdXhpbGxpYXJ5IGNhY2hlIGRhdGEKICAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyBjYWNoZWZzX21hdGNoX3ZhbF90IGFmc192b2x1bWVfY2FjaGVfbWF0Y2godm9pZCAqdGFyZ2V0LAotCQkJCQkJICBjb25zdCB2b2lkICplbnRyeSkKK3N0YXRpYyB1aW50MTZfdCBhZnNfdm5vZGVfY2FjaGVfZ2V0X2F1eChjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCiB7Ci0JY29uc3Qgc3RydWN0IGFmc19jYWNoZV92aGFzaCAqdmhhc2ggPSBlbnRyeTsKLQlzdHJ1Y3QgYWZzX3ZvbHVtZSAqdm9sdW1lID0gdGFyZ2V0OworCWNvbnN0IHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gY29va2llX25ldGZzX2RhdGE7CisJdWludDE2X3QgZGxlbjsKIAotCV9lbnRlcigieyV1fSx7JXV9Iiwgdm9sdW1lLT50eXBlLCB2aGFzaC0+dnR5cGUpOworCV9lbnRlcigieyV4LCV4LCVMeH0sJXAsJXUiLAorCSAgICAgICB2bm9kZS0+ZmlkLnZub2RlLCB2bm9kZS0+ZmlkLnVuaXF1ZSwgdm5vZGUtPnN0YXR1cy5kYXRhX3ZlcnNpb24sCisJICAgICAgIGJ1ZmZlciwgYnVmbWF4KTsKIAotCWlmICh2b2x1bWUtPnR5cGUgPT0gdmhhc2gtPnZ0eXBlKSB7Ci0JCV9sZWF2ZSgiID0gU1VDQ0VTUyIpOwotCQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9TVUNDRVNTOworCWRsZW4gPSBzaXplb2Yodm5vZGUtPmZpZC51bmlxdWUpICsgc2l6ZW9mKHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uKTsKKwlpZiAoZGxlbiA+IGJ1Zm1heCkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkoYnVmZmVyLCAmdm5vZGUtPmZpZC51bmlxdWUsIHNpemVvZih2bm9kZS0+ZmlkLnVuaXF1ZSkpOworCWJ1ZmZlciArPSBzaXplb2Yodm5vZGUtPmZpZC51bmlxdWUpOworCW1lbWNweShidWZmZXIsICZ2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbiwKKwkgICAgICAgc2l6ZW9mKHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uKSk7CisKKwlfbGVhdmUoIiA9ICV1IiwgZGxlbik7CisJcmV0dXJuIGRsZW47Cit9CisKKy8qCisgKiBjaGVjayB0aGF0IHRoZSBhdXhpbGxpYXJ5IGRhdGEgaW5kaWNhdGVzIHRoYXQgdGhlIGVudHJ5IGlzIHN0aWxsIHZhbGlkCisgKi8KK3N0YXRpYyBlbnVtIGZzY2FjaGVfY2hlY2thdXggYWZzX3Zub2RlX2NhY2hlX2NoZWNrX2F1eCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJCSAgICAgICBjb25zdCB2b2lkICpidWZmZXIsCisJCQkJCQkgICAgICAgdWludDE2X3QgYnVmbGVuKQoreworCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gY29va2llX25ldGZzX2RhdGE7CisJdWludDE2X3QgZGxlbjsKKworCV9lbnRlcigieyV4LCV4LCVsbHh9LCVwLCV1IiwKKwkgICAgICAgdm5vZGUtPmZpZC52bm9kZSwgdm5vZGUtPmZpZC51bmlxdWUsIHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uLAorCSAgICAgICBidWZmZXIsIGJ1Zmxlbik7CisKKwkvKiBjaGVjayB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBpcyB3aGF0IHdlJ3JlIGV4cGVjdGluZyAqLworCWRsZW4gPSBzaXplb2Yodm5vZGUtPmZpZC51bmlxdWUpICsgc2l6ZW9mKHZub2RlLT5zdGF0dXMuZGF0YV92ZXJzaW9uKTsKKwlpZiAoZGxlbiAhPSBidWZsZW4pIHsKKwkJX2xlYXZlKCIgPSBPQlNPTEVURSBbbGVuICVoeCAhPSAlaHhdIiwgZGxlbiwgYnVmbGVuKTsKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CiAJfQogCi0JX2xlYXZlKCIgPSBGQUlMRUQiKTsKLQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9GQUlMRUQ7Ci19Ci0jZW5kaWYKKwlpZiAobWVtY21wKGJ1ZmZlciwKKwkJICAgJnZub2RlLT5maWQudW5pcXVlLAorCQkgICBzaXplb2Yodm5vZGUtPmZpZC51bmlxdWUpCisJCSAgICkgIT0gMCkgeworCQl1bnNpZ25lZCB1bmlxdWU7CiAKLS8qCi0gKiB1cGRhdGUgYSB2b2x1bWUgaGFzaCByZWNvcmQgc3RvcmVkIGluIHRoZSBjYWNoZQotICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotc3RhdGljIHZvaWQgYWZzX3ZvbHVtZV9jYWNoZV91cGRhdGUodm9pZCAqc291cmNlLCB2b2lkICplbnRyeSkKLXsKLQlzdHJ1Y3QgYWZzX2NhY2hlX3ZoYXNoICp2aGFzaCA9IGVudHJ5OwotCXN0cnVjdCBhZnNfdm9sdW1lICp2b2x1bWUgPSBzb3VyY2U7CisJCW1lbWNweSgmdW5pcXVlLCBidWZmZXIsIHNpemVvZih1bmlxdWUpKTsKIAotCV9lbnRlcigiIik7Ci0KLQl2aGFzaC0+dnR5cGUgPSB2b2x1bWUtPnR5cGU7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyBjYWNoZWZzX21hdGNoX3ZhbF90IGFmc192bm9kZV9jYWNoZV9tYXRjaCh2b2lkICp0YXJnZXQsCi0JCQkJCQkgY29uc3Qgdm9pZCAqZW50cnkpOwotc3RhdGljIHZvaWQgYWZzX3Zub2RlX2NhY2hlX3VwZGF0ZSh2b2lkICpzb3VyY2UsIHZvaWQgKmVudHJ5KTsKLQotc3RydWN0IGNhY2hlZnNfaW5kZXhfZGVmIGFmc192bm9kZV9jYWNoZV9pbmRleF9kZWYgPSB7Ci0JLm5hbWUJCT0gInZub2RlIiwKLQkuZGF0YV9zaXplCT0gc2l6ZW9mKHN0cnVjdCBhZnNfY2FjaGVfdm5vZGUpLAotCS5rZXlzWzBdCT0geyBDQUNIRUZTX0lOREVYX0tFWVNfQklOLCA0IH0sCi0JLm1hdGNoCQk9IGFmc192bm9kZV9jYWNoZV9tYXRjaCwKLQkudXBkYXRlCQk9IGFmc192bm9kZV9jYWNoZV91cGRhdGUsCi19OwotI2VuZGlmCi0KLS8qCi0gKiBtYXRjaCBhIHZub2RlIHJlY29yZCBzdG9yZWQgaW4gdGhlIGNhY2hlCi0gKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgY2FjaGVmc19tYXRjaF92YWxfdCBhZnNfdm5vZGVfY2FjaGVfbWF0Y2godm9pZCAqdGFyZ2V0LAotCQkJCQkJIGNvbnN0IHZvaWQgKmVudHJ5KQotewotCWNvbnN0IHN0cnVjdCBhZnNfY2FjaGVfdm5vZGUgKmN2bm9kZSA9IGVudHJ5OwotCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gdGFyZ2V0OwotCi0JX2VudGVyKCJ7JXgsJXgsJUx4fSx7JXgsJXgsJUx4fSIsCi0JICAgICAgIHZub2RlLT5maWQudm5vZGUsCi0JICAgICAgIHZub2RlLT5maWQudW5pcXVlLAotCSAgICAgICB2bm9kZS0+c3RhdHVzLnZlcnNpb24sCi0JICAgICAgIGN2bm9kZS0+dm5vZGVfaWQsCi0JICAgICAgIGN2bm9kZS0+dm5vZGVfdW5pcXVlLAotCSAgICAgICBjdm5vZGUtPmRhdGFfdmVyc2lvbik7Ci0KLQlpZiAodm5vZGUtPmZpZC52bm9kZSAhPSBjdm5vZGUtPnZub2RlX2lkKSB7Ci0JCV9sZWF2ZSgiID0gRkFJTEVEIik7Ci0JCXJldHVybiBDQUNIRUZTX01BVENIX0ZBSUxFRDsKKwkJX2xlYXZlKCIgPSBPQlNPTEVURSBbdW5pcSAleCAhPSAleF0iLAorCQkgICAgICAgdW5pcXVlLCB2bm9kZS0+ZmlkLnVuaXF1ZSk7CisJCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFOwogCX0KIAotCWlmICh2bm9kZS0+ZmlkLnVuaXF1ZSAhPSBjdm5vZGUtPnZub2RlX3VuaXF1ZSB8fAotCSAgICB2bm9kZS0+c3RhdHVzLnZlcnNpb24gIT0gY3Zub2RlLT5kYXRhX3ZlcnNpb24pIHsKLQkJX2xlYXZlKCIgPSBERUxFVEUiKTsKLQkJcmV0dXJuIENBQ0hFRlNfTUFUQ0hfU1VDQ0VTU19ERUxFVEU7CisJaWYgKG1lbWNtcChidWZmZXIgKyBzaXplb2Yodm5vZGUtPmZpZC51bmlxdWUpLAorCQkgICAmdm5vZGUtPnN0YXR1cy5kYXRhX3ZlcnNpb24sCisJCSAgIHNpemVvZih2bm9kZS0+c3RhdHVzLmRhdGFfdmVyc2lvbikKKwkJICAgKSAhPSAwKSB7CisJCWFmc19kYXRhdmVyc2lvbl90IHZlcnNpb247CisKKwkJbWVtY3B5KCZ2ZXJzaW9uLCBidWZmZXIgKyBzaXplb2Yodm5vZGUtPmZpZC51bmlxdWUpLAorCQkgICAgICAgc2l6ZW9mKHZlcnNpb24pKTsKKworCQlfbGVhdmUoIiA9IE9CU09MRVRFIFt2ZXJzICVsbHggIT0gJWxseF0iLAorCQkgICAgICAgdmVyc2lvbiwgdm5vZGUtPnN0YXR1cy5kYXRhX3ZlcnNpb24pOworCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKIAl9CiAKIAlfbGVhdmUoIiA9IFNVQ0NFU1MiKTsKLQlyZXR1cm4gQ0FDSEVGU19NQVRDSF9TVUNDRVNTOworCXJldHVybiBGU0NBQ0hFX0NIRUNLQVVYX09LQVk7CiB9Ci0jZW5kaWYKIAogLyoKLSAqIHVwZGF0ZSBhIHZub2RlIHJlY29yZCBzdG9yZWQgaW4gdGhlIGNhY2hlCisgKiBpbmRpY2F0aW9uIHRoZSBjb29raWUgaXMgbm8gbG9uZ2VyIHVuY2FjaGVkCisgKiAtIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGJhY2tpbmcgc3RvcmUgY3VycmVudGx5IGNhY2hpbmcgYSBjb29raWUKKyAqICAgaXMgcmVtb3ZlZAorICogLSB0aGUgbmV0ZnMgc2hvdWxkIHVzZSB0aGlzIHRvIGNsZWFuIHVwIGFueSBtYXJrZXJzIGluZGljYXRpbmcgY2FjaGVkIHBhZ2VzCisgKiAtIHRoaXMgaXMgbWFuZGF0b3J5IGZvciBhbnkgb2JqZWN0IHRoYXQgbWF5IGhhdmUgZGF0YQogICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotc3RhdGljIHZvaWQgYWZzX3Zub2RlX2NhY2hlX3VwZGF0ZSh2b2lkICpzb3VyY2UsIHZvaWQgKmVudHJ5KQorc3RhdGljIHZvaWQgYWZzX3Zub2RlX2NhY2hlX25vd191bmNhY2hlZCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSkKIHsKLQlzdHJ1Y3QgYWZzX2NhY2hlX3Zub2RlICpjdm5vZGUgPSBlbnRyeTsKLQlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IHNvdXJjZTsKKwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXN0cnVjdCBwYWdldmVjIHB2ZWM7CisJcGdvZmZfdCBmaXJzdDsKKwlpbnQgbG9vcCwgbnJfcGFnZXM7CiAKLQlfZW50ZXIoIiIpOworCV9lbnRlcigieyV4LCV4LCVMeH0iLAorCSAgICAgICB2bm9kZS0+ZmlkLnZub2RlLCB2bm9kZS0+ZmlkLnVuaXF1ZSwgdm5vZGUtPnN0YXR1cy5kYXRhX3ZlcnNpb24pOwogCi0JY3Zub2RlLT52bm9kZV9pZAk9IHZub2RlLT5maWQudm5vZGU7Ci0JY3Zub2RlLT52bm9kZV91bmlxdWUJPSB2bm9kZS0+ZmlkLnVuaXF1ZTsKLQljdm5vZGUtPmRhdGFfdmVyc2lvbgk9IHZub2RlLT5zdGF0dXMudmVyc2lvbjsKKwlwYWdldmVjX2luaXQoJnB2ZWMsIDApOworCWZpcnN0ID0gMDsKKworCWZvciAoOzspIHsKKwkJLyogZ3JhYiBhIGJ1bmNoIG9mIHBhZ2VzIHRvIGNsZWFuICovCisJCW5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXAoJnB2ZWMsIHZub2RlLT52ZnNfaW5vZGUuaV9tYXBwaW5nLAorCQkJCQkgIGZpcnN0LAorCQkJCQkgIFBBR0VWRUNfU0laRSAtIHBhZ2V2ZWNfY291bnQoJnB2ZWMpKTsKKwkJaWYgKCFucl9wYWdlcykKKwkJCWJyZWFrOworCisJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBucl9wYWdlczsgbG9vcCsrKQorCQkJQ2xlYXJQYWdlRnNDYWNoZShwdmVjLnBhZ2VzW2xvb3BdKTsKKworCQlmaXJzdCA9IHB2ZWMucGFnZXNbbnJfcGFnZXMgLSAxXS0+aW5kZXggKyAxOworCisJCXB2ZWMubnIgPSBucl9wYWdlczsKKwkJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorCisJX2xlYXZlKCIiKTsKIH0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYWZzL2NhY2hlLmggYi9mcy9hZnMvY2FjaGUuaAppbmRleCAzNmEzNjQyLi41YzRmNmI0IDEwMDY0NAotLS0gYS9mcy9hZnMvY2FjaGUuaAorKysgYi9mcy9hZnMvY2FjaGUuaApAQCAtMSw2ICsxLDYgQEAKIC8qIEFGUyBsb2NhbCBjYWNoZSBtYW5hZ2VtZW50IGludGVyZmFjZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTksMTUgKzksNCBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaWZuZGVmIEFGU19DQUNIRV9ICi0jZGVmaW5lIEFGU19DQUNIRV9ICi0KLSN1bmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLSNpbmNsdWRlIDxsaW51eC9jYWNoZWZzLmg+Ci0jZW5kaWYKLSNpbmNsdWRlICJ0eXBlcy5oIgotCi0jZW5kaWYgLyogQUZTX0NBQ0hFX0ggKi8KKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLmg+CmRpZmYgLS1naXQgYS9mcy9hZnMvY2VsbC5jIGIvZnMvYWZzL2NlbGwuYwppbmRleCA1ZTFkZjE0Li5lMTljMTNmIDEwMDY0NAotLS0gYS9mcy9hZnMvY2VsbC5jCisrKyBiL2ZzL2Fmcy9jZWxsLmMKQEAgLTE0NywxMiArMTQ3LDExIEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0JLyogcHV0IGl0IHVwIGZvciBjYWNoaW5nICovCi0JY2FjaGVmc19hY3F1aXJlX2Nvb2tpZShhZnNfY2FjaGVfbmV0ZnMucHJpbWFyeV9pbmRleCwKLQkJCSAgICAgICAmYWZzX3Zsb2NhdGlvbl9jYWNoZV9pbmRleF9kZWYsCi0JCQkgICAgICAgY2VsbCwKLQkJCSAgICAgICAmY2VsbC0+Y2FjaGUpOworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCS8qIHB1dCBpdCB1cCBmb3IgY2FjaGluZyAodGhpcyBuZXZlciByZXR1cm5zIGFuIGVycm9yKSAqLworCWNlbGwtPmNhY2hlID0gZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZShhZnNfY2FjaGVfbmV0ZnMucHJpbWFyeV9pbmRleCwKKwkJCQkJICAgICAmYWZzX2NlbGxfY2FjaGVfaW5kZXhfZGVmLAorCQkJCQkgICAgIGNlbGwpOwogI2VuZGlmCiAKIAkvKiBhZGQgdG8gdGhlIGNlbGwgbGlzdHMgKi8KQEAgLTM2MiwxMCArMzYxLDkgQEAKIAlsaXN0X2RlbF9pbml0KCZjZWxsLT5wcm9jX2xpbmspOwogCXVwX3dyaXRlKCZhZnNfcHJvY19jZWxsc19zZW0pOwogCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCWNhY2hlZnNfcmVsaW5xdWlzaF9jb29raWUoY2VsbC0+Y2FjaGUsIDApOworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUoY2VsbC0+Y2FjaGUsIDApOwogI2VuZGlmCi0KIAlrZXlfcHV0KGNlbGwtPmFub255bW91c19rZXkpOwogCWtmcmVlKGNlbGwpOwogCmRpZmYgLS1naXQgYS9mcy9hZnMvZmlsZS5jIGIvZnMvYWZzL2ZpbGUuYwppbmRleCBhMzkwMTc2Li43YTFkOTQyIDEwMDY0NAotLS0gYS9mcy9hZnMvZmlsZS5jCisrKyBiL2ZzL2Fmcy9maWxlLmMKQEAgLTIzLDYgKzIzLDkgQEAKIHN0YXRpYyBpbnQgYWZzX3JlbGVhc2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnBfZmxhZ3MpOwogc3RhdGljIGludCBhZnNfbGF1bmRlcl9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKIAorc3RhdGljIGludCBhZnNfcmVhZHBhZ2VzKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywgdW5zaWduZWQgbnJfcGFnZXMpOworCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLm9wZW4JCT0gYWZzX29wZW4sCiAJLnJlbGVhc2UJPSBhZnNfcmVsZWFzZSwKQEAgLTQ2LDYgKzQ5LDcgQEAKIAogY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhZnNfZnNfYW9wcyA9IHsKIAkucmVhZHBhZ2UJPSBhZnNfcmVhZHBhZ2UsCisJLnJlYWRwYWdlcwk9IGFmc19yZWFkcGFnZXMsCiAJLnNldF9wYWdlX2RpcnR5CT0gYWZzX3NldF9wYWdlX2RpcnR5LAogCS5sYXVuZGVyX3BhZ2UJPSBhZnNfbGF1bmRlcl9wYWdlLAogCS5yZWxlYXNlcGFnZQk9IGFmc19yZWxlYXNlcGFnZSwKQEAgLTEwMSwzNyArMTA1LDE4IEBACiAvKgogICogZGVhbCB3aXRoIG5vdGlmaWNhdGlvbiB0aGF0IGEgcGFnZSB3YXMgcmVhZCBmcm9tIHRoZSBjYWNoZQogICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotc3RhdGljIHZvaWQgYWZzX3JlYWRwYWdlX3JlYWRfY29tcGxldGUodm9pZCAqY29va2llX2RhdGEsCi0JCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCSAgICAgICB2b2lkICpkYXRhLAotCQkJCSAgICAgICBpbnQgZXJyb3IpCitzdGF0aWMgdm9pZCBhZnNfZmlsZV9yZWFkcGFnZV9yZWFkX2NvbXBsZXRlKHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkgICAgdm9pZCAqZGF0YSwKKwkJCQkJICAgIGludCBlcnJvcikKIHsKLQlfZW50ZXIoIiVwLCVwLCVwLCVkIiwgY29va2llX2RhdGEsIHBhZ2UsIGRhdGEsIGVycm9yKTsKKwlfZW50ZXIoIiVwLCVwLCVkIiwgcGFnZSwgZGF0YSwgZXJyb3IpOwogCi0JaWYgKGVycm9yKQotCQlTZXRQYWdlRXJyb3IocGFnZSk7Ci0JZWxzZQorCS8qIGlmIHRoZSByZWFkIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLCB3ZSBqdXN0IHVubG9jayB0aGUgcGFnZSBhbmQgbGV0CisJICogdGhlIFZNIHJlaXNzdWUgdGhlIHJlYWRwYWdlICovCisJaWYgKCFlcnJvcikKIAkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCXVubG9ja19wYWdlKHBhZ2UpOwotCiB9Ci0jZW5kaWYKLQotLyoKLSAqIGRlYWwgd2l0aCBub3RpZmljYXRpb24gdGhhdCBhIHBhZ2Ugd2FzIHdyaXR0ZW4gdG8gdGhlIGNhY2hlCi0gKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1zdGF0aWMgdm9pZCBhZnNfcmVhZHBhZ2Vfd3JpdGVfY29tcGxldGUodm9pZCAqY29va2llX2RhdGEsCi0JCQkJCXN0cnVjdCBwYWdlICpwYWdlLAotCQkJCQl2b2lkICpkYXRhLAotCQkJCQlpbnQgZXJyb3IpCi17Ci0JX2VudGVyKCIlcCwlcCwlcCwlZCIsIGNvb2tpZV9kYXRhLCBwYWdlLCBkYXRhLCBlcnJvcik7Ci0KLQl1bmxvY2tfcGFnZShwYWdlKTsKLX0KLSNlbmRpZgogCiAvKgogICogQUZTIHJlYWQgcGFnZSBmcm9tIGZpbGUsIGRpcmVjdG9yeSBvciBzeW1saW5rCkBAIC0xNjEsOSArMTQ2LDkgQEAKIAlpZiAodGVzdF9iaXQoQUZTX1ZOT0RFX0RFTEVURUQsICZ2bm9kZS0+ZmxhZ3MpKQogCQlnb3RvIGVycm9yOwogCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAogCS8qIGlzIGl0IGNhY2hlZD8gKi8KLQlyZXQgPSBjYWNoZWZzX3JlYWRfb3JfYWxsb2NfcGFnZSh2bm9kZS0+Y2FjaGUsCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJcmV0ID0gZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2Uodm5vZGUtPmNhY2hlLAogCQkJCQkgcGFnZSwKIAkJCQkJIGFmc19maWxlX3JlYWRwYWdlX3JlYWRfY29tcGxldGUsCiAJCQkJCSBOVUxMLApAQCAtMTcxLDIwICsxNTYsMjEgQEAKICNlbHNlCiAJcmV0ID0gLUVOT0JVRlM7CiAjZW5kaWYKLQogCXN3aXRjaCAocmV0KSB7Ci0JCS8qIHJlYWQgQklPIHN1Ym1pdHRlZCBhbmQgd2Itam91cm5hbCBlbnRyeSBmb3VuZCAqLwotCWNhc2UgMToKLQkJQlVHKCk7IC8vIFRPRE8gLSBoYW5kbGUgd2Itam91cm5hbCBtYXRjaAotCiAJCS8qIHJlYWQgQklPIHN1Ym1pdHRlZCAocGFnZSBpbiBjYWNoZSkgKi8KIAljYXNlIDA6CiAJCWJyZWFrOwogCi0JCS8qIG5vIHBhZ2UgYXZhaWxhYmxlIGluIGNhY2hlICovCi0JY2FzZSAtRU5PQlVGUzoKKwkJLyogcGFnZSBub3QgeWV0IGNhY2hlZCAqLwogCWNhc2UgLUVOT0RBVEE6CisJCV9kZWJ1ZygiY2FjaGUgc2FpZCBFTk9EQVRBIik7CisJCWdvdG8gZ29fb247CisKKwkJLyogcGFnZSB3aWxsIG5vdCBiZSBjYWNoZWQgKi8KKwljYXNlIC1FTk9CVUZTOgorCQlfZGVidWcoImNhY2hlIHNhaWQgRU5PQlVGUyIpOwogCWRlZmF1bHQ6CisJZ29fb246CiAJCW9mZnNldCA9IHBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJCWxlbiA9IG1pbl90KHNpemVfdCwgaV9zaXplX3JlYWQoaW5vZGUpIC0gb2Zmc2V0LCBQQUdFX1NJWkUpOwogCkBAIC0xOTgsMjcgKzE4NCwyNSBAQAogCQkJCXNldF9iaXQoQUZTX1ZOT0RFX0RFTEVURUQsICZ2bm9kZS0+ZmxhZ3MpOwogCQkJCXJldCA9IC1FU1RBTEU7CiAJCQl9Ci0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCQkJY2FjaGVmc191bmNhY2hlX3BhZ2Uodm5vZGUtPmNhY2hlLCBwYWdlKTsKKworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCQkJZnNjYWNoZV91bmNhY2hlX3BhZ2Uodm5vZGUtPmNhY2hlLCBwYWdlKTsKICNlbmRpZgorCQkJQlVHX09OKFBhZ2VGc0NhY2hlKHBhZ2UpKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAogCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CiAKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0JCWlmIChjYWNoZWZzX3dyaXRlX3BhZ2Uodm5vZGUtPmNhY2hlLAotCQkJCSAgICAgICBwYWdlLAotCQkJCSAgICAgICBhZnNfZmlsZV9yZWFkcGFnZV93cml0ZV9jb21wbGV0ZSwKLQkJCQkgICAgICAgTlVMTCwKLQkJCQkgICAgICAgR0ZQX0tFUk5FTCkgIT0gMAotCQkgICAgKSB7Ci0JCQljYWNoZWZzX3VuY2FjaGVfcGFnZSh2bm9kZS0+Y2FjaGUsIHBhZ2UpOwotCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCS8qIHNlbmQgdGhlIHBhZ2UgdG8gdGhlIGNhY2hlICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJCWlmIChQYWdlRnNDYWNoZShwYWdlKSAmJgorCQkgICAgZnNjYWNoZV93cml0ZV9wYWdlKHZub2RlLT5jYWNoZSwgcGFnZSwgR0ZQX0tFUk5FTCkgIT0gMCkgeworCQkJZnNjYWNoZV91bmNhY2hlX3BhZ2Uodm5vZGUtPmNhY2hlLCBwYWdlKTsKKwkJCUJVR19PTihQYWdlRnNDYWNoZShwYWdlKSk7CiAJCX0KLSNlbHNlCi0JCXVubG9ja19wYWdlKHBhZ2UpOwogI2VuZGlmCisJCXVubG9ja19wYWdlKHBhZ2UpOwogCX0KIAogCV9sZWF2ZSgiID0gMCIpOwpAQCAtMjMyLDM0ICsyMTYsNTkgQEAKIH0KIAogLyoKLSAqIGludmFsaWRhdGUgcGFydCBvciBhbGwgb2YgYSBwYWdlCisgKiByZWFkIGEgc2V0IG9mIHBhZ2VzCiAgKi8KLXN0YXRpYyB2b2lkIGFmc19pbnZhbGlkYXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCitzdGF0aWMgaW50IGFmc19yZWFkcGFnZXMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLCB1bnNpZ25lZCBucl9wYWdlcykKIHsKLQlpbnQgcmV0ID0gMTsKKwlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZTsKKwlpbnQgcmV0ID0gMDsKIAotCV9lbnRlcigieyVsdX0sJWx1IiwgcGFnZS0+aW5kZXgsIG9mZnNldCk7CisJX2VudGVyKCIseyVsdX0sLCVkIiwgbWFwcGluZy0+aG9zdC0+aV9pbm8sIG5yX3BhZ2VzKTsKIAotCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7Ci0KLQlpZiAoUGFnZVByaXZhdGUocGFnZSkpIHsKLQkJLyogV2UgcmVsZWFzZSBidWZmZXJzIG9ubHkgaWYgdGhlIGVudGlyZSBwYWdlIGlzIGJlaW5nCi0JCSAqIGludmFsaWRhdGVkLgotCQkgKiBUaGUgZ2V0X2Jsb2NrIGNhY2hlZCB2YWx1ZSBoYXMgYmVlbiB1bmNvbmRpdGlvbmFsbHkKLQkJICogaW52YWxpZGF0ZWQsIHNvIHJlYWwgSU8gaXMgbm90IHBvc3NpYmxlIGFueW1vcmUuCi0JCSAqLwotCQlpZiAob2Zmc2V0ID09IDApIHsKLQkJCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7Ci0KLQkJCXJldCA9IDA7Ci0JCQlpZiAoIVBhZ2VXcml0ZWJhY2socGFnZSkpCi0JCQkJcmV0ID0gcGFnZS0+bWFwcGluZy0+YV9vcHMtPnJlbGVhc2VwYWdlKHBhZ2UsCi0JCQkJCQkJCQkwKTsKLQkJCS8qIHBvc3NpYmx5IHNob3VsZCBCVUdfT04oIXJldCk7IC0gbmVpbGIgKi8KLQkJfQorCXZub2RlID0gQUZTX0ZTX0kobWFwcGluZy0+aG9zdCk7CisJaWYgKHZub2RlLT5mbGFncyAmIEFGU19WTk9ERV9ERUxFVEVEKSB7CisJCV9sZWF2ZSgiID0gLUVTVEFMRSIpOworCQlyZXR1cm4gLUVTVEFMRTsKIAl9CiAKLQlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwkvKiBhdHRlbXB0IHRvIHJlYWQgYXMgbWFueSBvZiB0aGUgcGFnZXMgYXMgcG9zc2libGUgKi8KKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlyZXQgPSBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZXModm5vZGUtPmNhY2hlLAorCQkJCQkgIG1hcHBpbmcsCisJCQkJCSAgcGFnZXMsCisJCQkJCSAgJm5yX3BhZ2VzLAorCQkJCQkgIGFmc19maWxlX3JlYWRwYWdlX3JlYWRfY29tcGxldGUsCisJCQkJCSAgTlVMTCwKKwkJCQkJICBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpKTsKKyNlbHNlCisJcmV0ID0gLUVOT0JVRlM7CisjZW5kaWYKKworCXN3aXRjaCAocmV0KSB7CisJCS8qIGFsbCBwYWdlcyBhcmUgYmVpbmcgcmVhZCBmcm9tIHRoZSBjYWNoZSAqLworCWNhc2UgMDoKKwkJQlVHX09OKCFsaXN0X2VtcHR5KHBhZ2VzKSk7CisJCUJVR19PTihucl9wYWdlcyAhPSAwKTsKKwkJX2xlYXZlKCIgPSAwIFtyZWFkaW5nIGFsbF0iKTsKKwkJcmV0dXJuIDA7CisKKwkJLyogdGhlcmUgd2VyZSBwYWdlcyB0aGF0IGNvdWxkbid0IGJlIHJlYWQgZnJvbSB0aGUgY2FjaGUgKi8KKwljYXNlIC1FTk9EQVRBOgorCWNhc2UgLUVOT0JVRlM6CisJCWJyZWFrOworCisJCS8qIG90aGVyIGVycm9yICovCisJZGVmYXVsdDoKKwkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogbG9hZCB0aGUgbWlzc2luZyBwYWdlcyBmcm9tIHRoZSBuZXR3b3JrICovCisJcmV0ID0gcmVhZF9jYWNoZV9wYWdlcyhtYXBwaW5nLCBwYWdlcywgKHZvaWQgKikgYWZzX3JlYWRwYWdlLCBmaWxlKTsKKworCV9sZWF2ZSgiID0gJWQgW25ldHRpbmddIiwgcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtMjczLDI1ICsyODIsODIgQEAKIH0KIAogLyoKLSAqIHJlbGVhc2UgYSBwYWdlIGFuZCBjbGVhbnVwIGl0cyBwcml2YXRlIGRhdGEKKyAqIGludmFsaWRhdGUgcGFydCBvciBhbGwgb2YgYSBwYWdlCisgKiAtIHJlbGVhc2UgYSBwYWdlIGFuZCBjbGVhbiB1cCBpdHMgcHJpdmF0ZSBkYXRhIGlmIG9mZnNldCBpcyAwIChpbmRpY2F0aW5nCisgKiAgIHRoZSBlbnRpcmUgcGFnZSkKKyAqLworc3RhdGljIHZvaWQgYWZzX2ludmFsaWRhdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKwlzdHJ1Y3QgYWZzX3dyaXRlYmFjayAqd2IgPSAoc3RydWN0IGFmc193cml0ZWJhY2sgKikgcGFnZV9wcml2YXRlKHBhZ2UpOworCisJX2VudGVyKCJ7JWx1fSwlbHUiLCBwYWdlLT5pbmRleCwgb2Zmc2V0KTsKKworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisKKwkvKiB3ZSBjbGVhbiB1cCBvbmx5IGlmIHRoZSBlbnRpcmUgcGFnZSBpcyBiZWluZyBpbnZhbGlkYXRlZCAqLworCWlmIChvZmZzZXQgPT0gMCkgeworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCQlpZiAoUGFnZUZzQ2FjaGUocGFnZSkpIHsKKwkJCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCk7CisJCQlmc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZSh2bm9kZS0+Y2FjaGUsIHBhZ2UpOworCQkJZnNjYWNoZV91bmNhY2hlX3BhZ2Uodm5vZGUtPmNhY2hlLCBwYWdlKTsKKwkJCUNsZWFyUGFnZUZzQ2FjaGUocGFnZSk7CisJCX0KKyNlbmRpZgorCisJCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkgeworCQkJaWYgKHdiICYmICFQYWdlV3JpdGViYWNrKHBhZ2UpKSB7CisJCQkJc2V0X3BhZ2VfcHJpdmF0ZShwYWdlLCAwKTsKKwkJCQlhZnNfcHV0X3dyaXRlYmFjayh3Yik7CisJCQl9CisKKwkJCWlmICghcGFnZV9wcml2YXRlKHBhZ2UpKQorCQkJCUNsZWFyUGFnZVByaXZhdGUocGFnZSk7CisJCX0KKwl9CisKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogcmVsZWFzZSBhIHBhZ2UgYW5kIGNsZWFuIHVwIGl0cyBwcml2YXRlIHN0YXRlIGlmIGl0J3Mgbm90IGJ1c3kKKyAqIC0gcmV0dXJuIHRydWUgaWYgdGhlIHBhZ2UgY2FuIG5vdyBiZSByZWxlYXNlZCwgZmFsc2UgaWYgbm90CiAgKi8KIHN0YXRpYyBpbnQgYWZzX3JlbGVhc2VwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CisJc3RydWN0IGFmc193cml0ZWJhY2sgKndiID0gKHN0cnVjdCBhZnNfd3JpdGViYWNrICopIHBhZ2VfcHJpdmF0ZShwYWdlKTsKIAlzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSA9IEFGU19GU19JKHBhZ2UtPm1hcHBpbmctPmhvc3QpOwotCXN0cnVjdCBhZnNfd3JpdGViYWNrICp3YjsKIAogCV9lbnRlcigie3sleDoldX1bJWx1XSwlbHh9LCV4IiwKIAkgICAgICAgdm5vZGUtPmZpZC52aWQsIHZub2RlLT5maWQudm5vZGUsIHBhZ2UtPmluZGV4LCBwYWdlLT5mbGFncywKIAkgICAgICAgZ2ZwX2ZsYWdzKTsKIAorCS8qIGRlbnkgaWYgcGFnZSBpcyBiZWluZyB3cml0dGVuIHRvIHRoZSBjYWNoZSBhbmQgdGhlIGNhbGxlciBoYXNuJ3QKKwkgKiBlbGVjdGVkIHRvIHdhaXQgKi8KKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlpZiAoUGFnZUZzQ2FjaGUocGFnZSkpIHsKKwkJaWYgKGZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZSh2bm9kZS0+Y2FjaGUsIHBhZ2UpKSB7CisJCQlpZiAoIShnZnBfZmxhZ3MgJiBfX0dGUF9XQUlUKSkgeworCQkJCV9sZWF2ZSgiID0gRiBbY2FjaGUgYnVzeV0iKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKHZub2RlLT5jYWNoZSwgcGFnZSk7CisJCX0KKworCQlmc2NhY2hlX3VuY2FjaGVfcGFnZSh2bm9kZS0+Y2FjaGUsIHBhZ2UpOworCQlDbGVhclBhZ2VGc0NhY2hlKHBhZ2UpOworCX0KKyNlbmRpZgorCiAJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKSB7Ci0JCXdiID0gKHN0cnVjdCBhZnNfd3JpdGViYWNrICopIHBhZ2VfcHJpdmF0ZShwYWdlKTsKLQkJQVNTRVJUKHdiICE9IE5VTEwpOwotCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIDApOworCQlpZiAod2IpIHsKKwkJCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7CisJCQlhZnNfcHV0X3dyaXRlYmFjayh3Yik7CisJCX0KIAkJQ2xlYXJQYWdlUHJpdmF0ZShwYWdlKTsKLQkJYWZzX3B1dF93cml0ZWJhY2sod2IpOwogCX0KIAotCV9sZWF2ZSgiID0gMCIpOwotCXJldHVybiAwOworCS8qIGluZGljYXRlIHRoYXQgdGhlIHBhZ2UgY2FuIGJlIHJlbGVhc2VkICovCisJX2xlYXZlKCIgPSBUIik7CisJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9mcy9hZnMvaW5vZGUuYyBiL2ZzL2Fmcy9pbm9kZS5jCmluZGV4IGJiNDcyMTcuLmMwNDhmMDYgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbm9kZS5jCisrKyBiL2ZzL2Fmcy9pbm9kZS5jCkBAIC02MSw2ICs2MSwxMSBAQAogCQlyZXR1cm4gLUVCQURNU0c7CiAJfQogCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJaWYgKHZub2RlLT5zdGF0dXMuc2l6ZSAhPSBpbm9kZS0+aV9zaXplKQorCQlmc2NhY2hlX2F0dHJfY2hhbmdlZCh2bm9kZS0+Y2FjaGUpOworI2VuZGlmCisKIAlpbm9kZS0+aV9ubGluawkJPSB2bm9kZS0+c3RhdHVzLm5saW5rOwogCWlub2RlLT5pX3VpZAkJPSB2bm9kZS0+c3RhdHVzLm93bmVyOwogCWlub2RlLT5pX2dpZAkJPSAwOwpAQCAtMTQ5LDE1ICsxNTQsNiBAQAogCQlyZXR1cm4gaW5vZGU7CiAJfQogCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCS8qIHNldCB1cCBjYWNoaW5nIGJlZm9yZSByZWFkaW5nIHRoZSBzdGF0dXMsIGFzIGZldGNoLXN0YXR1cyByZWFkcyB0aGUKLQkgKiBmaXJzdCBwYWdlIG9mIHN5bWxpbmtzIHRvIHNlZSBpZiB0aGV5J3JlIHJlYWxseSBtbnRwdHMgKi8KLQljYWNoZWZzX2FjcXVpcmVfY29va2llKHZub2RlLT52b2x1bWUtPmNhY2hlLAotCQkJICAgICAgIE5VTEwsCi0JCQkgICAgICAgdm5vZGUsCi0JCQkgICAgICAgJnZub2RlLT5jYWNoZSk7Ci0jZW5kaWYKLQogCWlmICghc3RhdHVzKSB7CiAJCS8qIGl0J3MgYSByZW1vdGVseSBleHRhbnQgaW5vZGUgKi8KIAkJc2V0X2JpdChBRlNfVk5PREVfQ0JfQlJPS0VOLCAmdm5vZGUtPmZsYWdzKTsKQEAgLTE4Myw2ICsxNzksMTUgQEAKIAkJfQogCX0KIAorCS8qIHNldCB1cCBjYWNoaW5nIGJlZm9yZSBtYXBwaW5nIHRoZSBzdGF0dXMsIGFzIG1hcC1zdGF0dXMgcmVhZHMgdGhlCisJICogZmlyc3QgcGFnZSBvZiBzeW1saW5rcyB0byBzZWUgaWYgdGhleSdyZSByZWFsbHkgbW91bnRwb2ludHMgKi8KKwlpbm9kZS0+aV9zaXplID0gdm5vZGUtPnN0YXR1cy5zaXplOworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCXZub2RlLT5jYWNoZSA9IGZzY2FjaGVfYWNxdWlyZV9jb29raWUodm5vZGUtPnZvbHVtZS0+Y2FjaGUsCisJCQkJCSAgICAgICZhZnNfdm5vZGVfY2FjaGVfaW5kZXhfZGVmLAorCQkJCQkgICAgICB2bm9kZSk7CisjZW5kaWYKKwogCXJldCA9IGFmc19pbm9kZV9tYXBfc3RhdHVzKHZub2RlLCBrZXkpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGJhZF9pbm9kZTsKQEAgLTE5Niw2ICsyMDEsMTAgQEAKIAogCS8qIGZhaWx1cmUgKi8KIGJhZF9pbm9kZToKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKHZub2RlLT5jYWNoZSwgMCk7CisJdm5vZGUtPmNhY2hlID0gTlVMTDsKKyNlbmRpZgogCWlnZXRfZmFpbGVkKGlub2RlKTsKIAlfbGVhdmUoIiA9ICVkIFtiYWRdIiwgcmV0KTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwpAQCAtMzQwLDggKzM0OSw4IEBACiAJQVNTRVJUKGxpc3RfZW1wdHkoJnZub2RlLT53cml0ZWJhY2tzKSk7CiAJQVNTRVJUKCF2bm9kZS0+Y2JfcHJvbWlzZWQpOwogCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCWNhY2hlZnNfcmVsaW5xdWlzaF9jb29raWUodm5vZGUtPmNhY2hlLCAwKTsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKHZub2RlLT5jYWNoZSwgMCk7CiAJdm5vZGUtPmNhY2hlID0gTlVMTDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oCmluZGV4IDY3ZjI1OWQuLjEwNmJlNjYgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oCisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlICJhZnMuaCIKICNpbmNsdWRlICJhZnNfdmwuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgogCiAjZGVmaW5lIEFGU19DRUxMX01BWF9BRERSUyAxNQogCkBAIC0xOTMsOCArMTk0LDggQEAKIAlzdHJ1Y3Qga2V5CQkqYW5vbnltb3VzX2tleTsJLyogYW5vbnltb3VzIHVzZXIga2V5IGZvciB0aGlzIGNlbGwgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXByb2NfbGluazsJLyogL3Byb2MgY2VsbCBsaXN0IGxpbmsgKi8KIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKnByb2NfZGlyOwkvKiAvcHJvYyBkaXIgZm9yIHRoaXMgY2VsbCAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQlzdHJ1Y3QgY2FjaGVmc19jb29raWUJKmNhY2hlOwkJLyogY2FjaGluZyBjb29raWUgKi8KKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUJKmNhY2hlOwkJLyogY2FjaGluZyBjb29raWUgKi8KICNlbmRpZgogCiAJLyogc2VydmVyIHJlY29yZCBtYW5hZ2VtZW50ICovCkBAIC0yNDksOCArMjUwLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWdyYXZlOwkJLyogbGluayBpbiBtYXN0ZXIgZ3JhdmV5YXJkIGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXVwZGF0ZTsJCS8qIGxpbmsgaW4gbWFzdGVyIHVwZGF0ZSBsaXN0ICovCiAJc3RydWN0IGFmc19jZWxsCQkqY2VsbDsJCS8qIGNlbGwgdG8gd2hpY2ggdm9sdW1lIGJlbG9uZ3MgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0Jc3RydWN0IGNhY2hlZnNfY29va2llCSpjYWNoZTsJCS8qIGNhY2hpbmcgY29va2llICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJc3RydWN0IGZzY2FjaGVfY29va2llCSpjYWNoZTsJCS8qIGNhY2hpbmcgY29va2llICovCiAjZW5kaWYKIAlzdHJ1Y3QgYWZzX2NhY2hlX3Zsb2NhdGlvbiB2bGRiOwkvKiB2b2x1bWUgaW5mb3JtYXRpb24gREIgcmVjb3JkICovCiAJc3RydWN0IGFmc192b2x1bWUJKnZvbHNbM107CS8qIHZvbHVtZSBhY2Nlc3MgcmVjb3JkIHBvaW50ZXIgKGluZGV4IGJ5IHR5cGUpICovCkBAIC0zMDIsOCArMzAzLDggQEAKIAlhdG9taWNfdAkJdXNhZ2U7CiAJc3RydWN0IGFmc19jZWxsCQkqY2VsbDsJCS8qIGNlbGwgdG8gd2hpY2ggYmVsb25ncyAodW5yZWZkIHB0cikgKi8KIAlzdHJ1Y3QgYWZzX3Zsb2NhdGlvbgkqdmxvY2F0aW9uOwkvKiB2b2x1bWUgbG9jYXRpb24gKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0Jc3RydWN0IGNhY2hlZnNfY29va2llCSpjYWNoZTsJCS8qIGNhY2hpbmcgY29va2llICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJc3RydWN0IGZzY2FjaGVfY29va2llCSpjYWNoZTsJCS8qIGNhY2hpbmcgY29va2llICovCiAjZW5kaWYKIAlhZnNfdm9saWRfdAkJdmlkOwkJLyogdm9sdW1lIElEICovCiAJYWZzX3ZvbHR5cGVfdAkJdHlwZTsJCS8qIHR5cGUgb2Ygdm9sdW1lICovCkBAIC0zMzMsOCArMzM0LDggQEAKIAlzdHJ1Y3QgYWZzX3NlcnZlcgkqc2VydmVyOwkvKiBzZXJ2ZXIgY3VycmVudGx5IHN1cHBseWluZyB0aGlzIGZpbGUgKi8KIAlzdHJ1Y3QgYWZzX2ZpZAkJZmlkOwkJLyogdGhlIGZpbGUgaWRlbnRpZmllciBmb3IgdGhpcyBpbm9kZSAqLwogCXN0cnVjdCBhZnNfZmlsZV9zdGF0dXMJc3RhdHVzOwkJLyogQUZTIHN0YXR1cyBpbmZvIGZvciB0aGlzIGZpbGUgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0Jc3RydWN0IGNhY2hlZnNfY29va2llCSpjYWNoZTsJCS8qIGNhY2hpbmcgY29va2llICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJc3RydWN0IGZzY2FjaGVfY29va2llCSpjYWNoZTsJCS8qIGNhY2hpbmcgY29va2llICovCiAjZW5kaWYKIAlzdHJ1Y3QgYWZzX3Blcm1pdHMJKnBlcm1pdHM7CS8qIGNhY2hlIG9mIHBlcm1pdHMgc28gZmFyIG9idGFpbmVkICovCiAJc3RydWN0IG11dGV4CQlwZXJtaXRzX2xvY2s7CS8qIGxvY2sgZm9yIGFsdGVyaW5nIHBlcm1pdHMgbGlzdCAqLwpAQCAtNDI4LDYgKzQyOSwyMiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgorICogY2FjaGUuYworICovCisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCitleHRlcm4gc3RydWN0IGZzY2FjaGVfbmV0ZnMgYWZzX2NhY2hlX25ldGZzOworZXh0ZXJuIHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgYWZzX2NlbGxfY2FjaGVfaW5kZXhfZGVmOworZXh0ZXJuIHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgYWZzX3Zsb2NhdGlvbl9jYWNoZV9pbmRleF9kZWY7CitleHRlcm4gc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZjsKK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGFmc192bm9kZV9jYWNoZV9pbmRleF9kZWY7CisjZWxzZQorI2RlZmluZSBhZnNfY2VsbF9jYWNoZV9pbmRleF9kZWYJKCooc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiAqKSBOVUxMKQorI2RlZmluZSBhZnNfdmxvY2F0aW9uX2NhY2hlX2luZGV4X2RlZgkoKihzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmICopIE5VTEwpCisjZGVmaW5lIGFmc192b2x1bWVfY2FjaGVfaW5kZXhfZGVmCSgqKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgKikgTlVMTCkKKyNkZWZpbmUgYWZzX3Zub2RlX2NhY2hlX2luZGV4X2RlZgkoKihzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmICopIE5VTEwpCisjZW5kaWYKKworLyoKICAqIGNhbGxiYWNrLmMKICAqLwogZXh0ZXJuIHZvaWQgYWZzX2luaXRfY2FsbGJhY2tfc3RhdGUoc3RydWN0IGFmc19zZXJ2ZXIgKik7CkBAIC00NDYsOSArNDYzLDYgQEAKICAqLwogZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgYWZzX3Byb2NfY2VsbHNfc2VtOwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYWZzX3Byb2NfY2VsbHM7Ci0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotZXh0ZXJuIHN0cnVjdCBjYWNoZWZzX2luZGV4X2RlZiBhZnNfY2FjaGVfY2VsbF9pbmRleF9kZWY7Ci0jZW5kaWYKIAogI2RlZmluZSBhZnNfZ2V0X2NlbGwoQykgZG8geyBhdG9taWNfaW5jKCYoQyktPnVzYWdlKTsgfSB3aGlsZSgwKQogZXh0ZXJuIGludCBhZnNfY2VsbF9pbml0KGNoYXIgKik7CkBAIC01NTQsOSArNTY4LDYgQEAKICAqIG1haW4uYwogICovCiBleHRlcm4gc3RydWN0IGFmc191dWlkIGFmc191dWlkOwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLWV4dGVybiBzdHJ1Y3QgY2FjaGVmc19uZXRmcyBhZnNfY2FjaGVfbmV0ZnM7Ci0jZW5kaWYKIAogLyoKICAqIG1pc2MuYwpAQCAtNjM3LDEwICs2NDgsNiBAQAogLyoKICAqIHZsY2xpZW50LmMKICAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLWV4dGVybiBzdHJ1Y3QgY2FjaGVmc19pbmRleF9kZWYgYWZzX3Zsb2NhdGlvbl9jYWNoZV9pbmRleF9kZWY7Ci0jZW5kaWYKLQogZXh0ZXJuIGludCBhZnNfdmxfZ2V0X2VudHJ5X2J5X25hbWUoc3RydWN0IGluX2FkZHIgKiwgc3RydWN0IGtleSAqLAogCQkJCSAgICBjb25zdCBjaGFyICosIHN0cnVjdCBhZnNfY2FjaGVfdmxvY2F0aW9uICosCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBhZnNfd2FpdF9tb2RlICopOwpAQCAtNjY0LDEyICs2NzEsNiBAQAogLyoKICAqIHZub2RlLmMKICAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLWV4dGVybiBzdHJ1Y3QgY2FjaGVmc19pbmRleF9kZWYgYWZzX3Zub2RlX2NhY2hlX2luZGV4X2RlZjsKLSNlbmRpZgotCi1leHRlcm4gc3RydWN0IGFmc190aW1lcl9vcHMgYWZzX3Zub2RlX2NiX3RpbWVkX291dF9vcHM7Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFmc192bm9kZSAqQUZTX0ZTX0koc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgYWZzX3Zub2RlLCB2ZnNfaW5vZGUpOwpAQCAtNzExLDEwICs3MTIsNiBAQAogLyoKICAqIHZvbHVtZS5jCiAgKi8KLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi1leHRlcm4gc3RydWN0IGNhY2hlZnNfaW5kZXhfZGVmIGFmc192b2x1bWVfY2FjaGVfaW5kZXhfZGVmOwotI2VuZGlmCi0KICNkZWZpbmUgYWZzX2dldF92b2x1bWUoVikgZG8geyBhdG9taWNfaW5jKCYoViktPnVzYWdlKTsgfSB3aGlsZSgwKQogCiBleHRlcm4gdm9pZCBhZnNfcHV0X3ZvbHVtZShzdHJ1Y3QgYWZzX3ZvbHVtZSAqKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9tYWluLmMgYi9mcy9hZnMvbWFpbi5jCmluZGV4IDJkM2U1ZDQuLjY2ZDU0ZDMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9tYWluLmMKKysrIGIvZnMvYWZzL21haW4uYwpAQCAtMSw2ICsxLDYgQEAKIC8qIEFGUyBjbGllbnQgZmlsZSBzeXN0ZW0KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAyLDUgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI5LDE4ICsyOSw2IEBACiBtb2R1bGVfcGFyYW0ocm9vdGNlbGwsIGNoYXJwLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0Mocm9vdGNlbGwsICJyb290IEFGUyBjZWxsIG5hbWUgYW5kIFZMIHNlcnZlciBJUCBhZGRyIGxpc3QiKTsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLXN0YXRpYyBzdHJ1Y3QgY2FjaGVmc19uZXRmc19vcGVyYXRpb25zIGFmc19jYWNoZV9vcHMgPSB7Ci0JLmdldF9wYWdlX2Nvb2tpZQk9IGFmc19jYWNoZV9nZXRfcGFnZV9jb29raWUsCi19OwotCi1zdHJ1Y3QgY2FjaGVmc19uZXRmcyBhZnNfY2FjaGVfbmV0ZnMgPSB7Ci0JLm5hbWUJCQk9ICJhZnMiLAotCS52ZXJzaW9uCQk9IDAsCi0JLm9wcwkJCT0gJmFmc19jYWNoZV9vcHMsCi19OwotI2VuZGlmCi0KIHN0cnVjdCBhZnNfdXVpZCBhZnNfdXVpZDsKIAogLyoKQEAgLTEwNCwxMCArOTIsOSBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAorI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQogCS8qIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBjYWNoZSAqLwotCXJldCA9IGNhY2hlZnNfcmVnaXN0ZXJfbmV0ZnMoJmFmc19jYWNoZV9uZXRmcywKLQkJCQkgICAgICZhZnNfY2FjaGVfY2VsbF9pbmRleF9kZWYpOworCXJldCA9IGZzY2FjaGVfcmVnaXN0ZXJfbmV0ZnMoJmFmc19jYWNoZV9uZXRmcyk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3JfY2FjaGU7CiAjZW5kaWYKQEAgLTE0Miw4ICsxMjksOCBAQAogZXJyb3Jfb3Blbl9zb2NrZXQ6CiBlcnJvcl92bF91cGRhdGVfaW5pdDoKIGVycm9yX2NlbGxfaW5pdDoKLSNpZmRlZiBBRlNfQ0FDSElOR19TVVBQT1JUCi0JY2FjaGVmc191bnJlZ2lzdGVyX25ldGZzKCZhZnNfY2FjaGVfbmV0ZnMpOworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCWZzY2FjaGVfdW5yZWdpc3Rlcl9uZXRmcygmYWZzX2NhY2hlX25ldGZzKTsKIGVycm9yX2NhY2hlOgogI2VuZGlmCiAJYWZzX2NhbGxiYWNrX3VwZGF0ZV9raWxsKCk7CkBAIC0xNzUsOCArMTYyLDggQEAKIAlhZnNfdmxvY2F0aW9uX3B1cmdlKCk7CiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAlhZnNfY2VsbF9wdXJnZSgpOwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQljYWNoZWZzX3VucmVnaXN0ZXJfbmV0ZnMoJmFmc19jYWNoZV9uZXRmcyk7CisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJZnNjYWNoZV91bnJlZ2lzdGVyX25ldGZzKCZhZnNfY2FjaGVfbmV0ZnMpOwogI2VuZGlmCiAJYWZzX3Byb2NfY2xlYW51cCgpOwogCXJjdV9iYXJyaWVyKCk7CmRpZmYgLS1naXQgYS9mcy9hZnMvbW50cHQuYyBiL2ZzL2Fmcy9tbnRwdC5jCmluZGV4IDc4ZGI0OTUuLjJiOWUyZDAgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9tbnRwdC5jCisrKyBiL2ZzL2Fmcy9tbnRwdC5jCkBAIC0xNzMsOSArMTczLDkgQEAKIAlpZiAoUGFnZUVycm9yKHBhZ2UpKQogCQlnb3RvIGVycm9yOwogCi0JYnVmID0ga21hcChwYWdlKTsKKwlidWYgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CiAJbWVtY3B5KGRldm5hbWUsIGJ1Ziwgc2l6ZSk7Ci0Ja3VubWFwKHBhZ2UpOworCWt1bm1hcF9hdG9taWMoYnVmLCBLTV9VU0VSMCk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCXBhZ2UgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9mcy9hZnMvdmxvY2F0aW9uLmMgYi9mcy9hZnMvdmxvY2F0aW9uLmMKaW5kZXggODQ5ZmMzMS4uZWMyYTc0MyAxMDA2NDQKLS0tIGEvZnMvYWZzL3Zsb2NhdGlvbi5jCisrKyBiL2ZzL2Fmcy92bG9jYXRpb24uYwpAQCAtMjgxLDkgKzI4MSw4IEBACiAKIAl2bC0+dmxkYiA9ICp2bGRiOwogCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCS8qIHVwZGF0ZSB2b2x1bWUgZW50cnkgaW4gbG9jYWwgY2FjaGUgKi8KLQljYWNoZWZzX3VwZGF0ZV9jb29raWUodmwtPmNhY2hlKTsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlmc2NhY2hlX3VwZGF0ZV9jb29raWUodmwtPmNhY2hlKTsKICNlbmRpZgogfQogCkBAIC0zMDQsMTEgKzMwMyw5IEBACiAJbWVtc2V0KCZ2bGRiLCAwLCBzaXplb2YodmxkYikpOwogCiAJLyogc2VlIGlmIHdlIGhhdmUgYW4gaW4tY2FjaGUgY29weSAod2lsbCBzZXQgdmwtPnZhbGlkIGlmIHRoZXJlIGlzKSAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQljYWNoZWZzX2FjcXVpcmVfY29va2llKGNlbGwtPmNhY2hlLAotCQkJICAgICAgICZhZnNfdm9sdW1lX2NhY2hlX2luZGV4X2RlZiwKLQkJCSAgICAgICB2bG9jYXRpb24sCi0JCQkgICAgICAgJnZsLT5jYWNoZSk7CisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJdmwtPmNhY2hlID0gZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSh2bC0+Y2VsbC0+Y2FjaGUsCisJCQkJCSAgICZhZnNfdmxvY2F0aW9uX2NhY2hlX2luZGV4X2RlZiwgdmwpOwogI2VuZGlmCiAKIAlpZiAodmwtPnZhbGlkKSB7CkBAIC00MjAsNiArNDE3LDExIEBACiAJc3Bpbl91bmxvY2soJnZsLT5sb2NrKTsKIAl3YWtlX3VwKCZ2bC0+d2FpdHEpOwogCisJLyogdXBkYXRlIHZvbHVtZSBlbnRyeSBpbiBsb2NhbCBjYWNoZSAqLworI2lmZGVmIENPTkZJR19BRlNfRlNDQUNIRQorCWZzY2FjaGVfdXBkYXRlX2Nvb2tpZSh2bC0+Y2FjaGUpOworI2VuZGlmCisKIAkvKiBzY2hlZHVsZSBmb3IgcmVndWxhciB1cGRhdGVzICovCiAJYWZzX3Zsb2NhdGlvbl9xdWV1ZV9mb3JfdXBkYXRlcyh2bCk7CiAJZ290byBzdWNjZXNzOwpAQCAtNDY1LDcgKzQ2Nyw3IEBACiAJc3Bpbl91bmxvY2soJnZsLT5sb2NrKTsKIAogc3VjY2VzczoKLQlfbGVhdmUoIiA9ICVwIix2bCk7CisJX2xlYXZlKCIgPSAlcCIsIHZsKTsKIAlyZXR1cm4gdmw7CiAKIGVycm9yX2FiYW5kb246CkBAIC01MjMsMTAgKzUyNSw5IEBACiB7CiAJX2VudGVyKCIlcCIsIHZsKTsKIAotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQljYWNoZWZzX3JlbGlucXVpc2hfY29va2llKHZsLT5jYWNoZSwgMCk7CisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZSh2bC0+Y2FjaGUsIDApOwogI2VuZGlmCi0KIAlhZnNfcHV0X2NlbGwodmwtPmNlbGwpOwogCWtmcmVlKHZsKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2Fmcy92b2x1bWUuYyBiL2ZzL2Fmcy92b2x1bWUuYwppbmRleCA4YmFiMGUzLi5hMzUzZTY5IDEwMDY0NAotLS0gYS9mcy9hZnMvdm9sdW1lLmMKKysrIGIvZnMvYWZzL3ZvbHVtZS5jCkBAIC0xMjQsMTMgKzEyNCwxMSBAQAogCX0KIAogCS8qIGF0dGFjaCB0aGUgY2FjaGUgYW5kIHZvbHVtZSBsb2NhdGlvbiAqLwotI2lmZGVmIEFGU19DQUNISU5HX1NVUFBPUlQKLQljYWNoZWZzX2FjcXVpcmVfY29va2llKHZsb2NhdGlvbi0+Y2FjaGUsCi0JCQkgICAgICAgJmFmc192bm9kZV9jYWNoZV9pbmRleF9kZWYsCi0JCQkgICAgICAgdm9sdW1lLAotCQkJICAgICAgICZ2b2x1bWUtPmNhY2hlKTsKKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwl2b2x1bWUtPmNhY2hlID0gZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSh2bG9jYXRpb24tPmNhY2hlLAorCQkJCQkgICAgICAgJmFmc192b2x1bWVfY2FjaGVfaW5kZXhfZGVmLAorCQkJCQkgICAgICAgdm9sdW1lKTsKICNlbmRpZgotCiAJYWZzX2dldF92bG9jYXRpb24odmxvY2F0aW9uKTsKIAl2b2x1bWUtPnZsb2NhdGlvbiA9IHZsb2NhdGlvbjsKIApAQCAtMTk0LDggKzE5Miw4IEBACiAJdXBfd3JpdGUoJnZsb2NhdGlvbi0+Y2VsbC0+dmxfc2VtKTsKIAogCS8qIGZpbmlzaCBjbGVhbmluZyB1cCB0aGUgdm9sdW1lICovCi0jaWZkZWYgQUZTX0NBQ0hJTkdfU1VQUE9SVAotCWNhY2hlZnNfcmVsaW5xdWlzaF9jb29raWUodm9sdW1lLT5jYWNoZSwgMCk7CisjaWZkZWYgQ09ORklHX0FGU19GU0NBQ0hFCisJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZSh2b2x1bWUtPmNhY2hlLCAwKTsKICNlbmRpZgogCWFmc19wdXRfdmxvY2F0aW9uKHZsb2NhdGlvbik7CiAKZGlmZiAtLWdpdCBhL2ZzL2Fmcy93cml0ZS5jIGIvZnMvYWZzL3dyaXRlLmMKaW5kZXggM2ZiMzZkNC4uYzJlN2E3ZiAxMDA2NDQKLS0tIGEvZnMvYWZzL3dyaXRlLmMKKysrIGIvZnMvYWZzL3dyaXRlLmMKQEAgLTc4MCwzICs3ODAsMjQgQEAKIAlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQorCisvKgorICogbm90aWZpY2F0aW9uIHRoYXQgYSBwcmV2aW91c2x5IHJlYWQtb25seSBwYWdlIGlzIGFib3V0IHRvIGJlY29tZSB3cml0YWJsZQorICogLSBpZiBpdCByZXR1cm5zIGFuIGVycm9yLCB0aGUgY2FsbGVyIHdpbGwgZGVsaXZlciBhIGJ1cyBlcnJvciBzaWduYWwKKyAqLworaW50IGFmc19wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBhZnNfdm5vZGUgKnZub2RlID0gQUZTX0ZTX0kodm1hLT52bV9maWxlLT5mX21hcHBpbmctPmhvc3QpOworCisJX2VudGVyKCJ7eyV4OiV1fX0seyVseH0iLAorCSAgICAgICB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSwgcGFnZS0+aW5kZXgpOworCisJLyogd2FpdCBmb3IgdGhlIHBhZ2UgdG8gYmUgd3JpdHRlbiB0byB0aGUgY2FjaGUgYmVmb3JlIHdlIGFsbG93IGl0IHRvCisJICogYmUgbW9kaWZpZWQgKi8KKyNpZmRlZiBDT05GSUdfQUZTX0ZTQ0FDSEUKKwlmc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZSh2bm9kZS0+Y2FjaGUsIHBhZ2UpOworI2VuZGlmCisKKwlfbGVhdmUoIiA9IDAiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaCBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAppbmRleCBhNzY4MDMxLi5iN2ZmMzNjIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2F1dG9mc19pLmgKKysrIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCkBAIC0xODYsNiArMTg2LDggQEAKIGludCBhdXRvZnM0X2V4cGlyZV9ydW4oc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCB2ZnNtb3VudCAqLAogCQkJc3RydWN0IGF1dG9mc19zYl9pbmZvICosCiAJCQlzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9leHBpcmUgX191c2VyICopOworaW50IGF1dG9mczRfZG9fZXhwaXJlX211bHRpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLCBpbnQgd2hlbik7CiBpbnQgYXV0b2ZzNF9leHBpcmVfbXVsdGkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCB2ZnNtb3VudCAqLAogCQkJc3RydWN0IGF1dG9mc19zYl9pbmZvICosIGludCBfX3VzZXIgKik7CiBzdHJ1Y3QgZGVudHJ5ICphdXRvZnM0X2V4cGlyZV9kaXJlY3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvZGV2LWlvY3RsLmMgYi9mcy9hdXRvZnM0L2Rldi1pb2N0bC5jCmluZGV4IDAyNWUxMDUuLjllNWFlOGEgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvZGV2LWlvY3RsLmMKKysrIGIvZnMvYXV0b2ZzNC9kZXYtaW9jdGwuYwpAQCAtNTI1LDQwICs1MjUsMTMgQEAKIAkJCQkgICBzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwKIAkJCQkgICBzdHJ1Y3QgYXV0b2ZzX2Rldl9pb2N0bCAqcGFyYW0pCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCXN0cnVjdCB2ZnNtb3VudCAqbW50OwotCWludCBlcnIgPSAtRUFHQUlOOwogCWludCBob3c7CiAKIAlob3cgPSBwYXJhbS0+ZXhwaXJlLmhvdzsKIAltbnQgPSBmcC0+Zl9wYXRoLm1udDsKIAotCWlmIChhdXRvZnNfdHlwZV90cmlnZ2VyKHNiaS0+dHlwZSkpCi0JCWRlbnRyeSA9IGF1dG9mczRfZXhwaXJlX2RpcmVjdChzYmktPnNiLCBtbnQsIHNiaSwgaG93KTsKLQllbHNlCi0JCWRlbnRyeSA9IGF1dG9mczRfZXhwaXJlX2luZGlyZWN0KHNiaS0+c2IsIG1udCwgc2JpLCBob3cpOwotCi0JaWYgKGRlbnRyeSkgewotCQlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOwotCi0JCS8qCi0JCSAqIFRoaXMgaXMgc3luY2hyb25vdXMgYmVjYXVzZSBpdCBtYWtlcyB0aGUgZGFlbW9uIGEKLQkJICogbGl0dGxlIGVhc2llcgotCQkqLwotCQllcnIgPSBhdXRvZnM0X3dhaXQoc2JpLCBkZW50cnksIE5GWV9FWFBJUkUpOwotCi0JCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKLQkJaWYgKGluby0+ZmxhZ3MgJiBBVVRPRlNfSU5GX01PVU5UUE9JTlQpIHsKLQkJCWluby0+ZmxhZ3MgJj0gfkFVVE9GU19JTkZfTU9VTlRQT0lOVDsKLQkJCXNiaS0+c2ItPnNfcm9vdC0+ZF9tb3VudGVkKys7Ci0JCX0KLQkJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9FWFBJUklORzsKLQkJY29tcGxldGVfYWxsKCZpbm8tPmV4cGlyZV9jb21wbGV0ZSk7Ci0JCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwotCQlkcHV0KGRlbnRyeSk7Ci0JfQotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gYXV0b2ZzNF9kb19leHBpcmVfbXVsdGkoc2JpLT5zYiwgbW50LCBzYmksIGhvdyk7CiB9CiAKIC8qIENoZWNrIGlmIGF1dG9mcyBtb3VudCBwb2ludCBpcyBpbiB1c2UgKi8KZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvZXhwaXJlLmMgYi9mcy9hdXRvZnM0L2V4cGlyZS5jCmluZGV4IGUzYmQ1MDcuLjc1ZjdkZGEgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvZXhwaXJlLmMKKysrIGIvZnMvYXV0b2ZzNC9leHBpcmUuYwpAQCAtNDc4LDIyICs0NzgsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBDYWxsIHJlcGVhdGVkbHkgdW50aWwgaXQgcmV0dXJucyAtRUFHQUlOLCBtZWFuaW5nIHRoZXJlJ3Mgbm90aGluZwotICAgbW9yZSB0byBiZSBkb25lICovCi1pbnQgYXV0b2ZzNF9leHBpcmVfbXVsdGkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHZmc21vdW50ICptbnQsCi0JCQlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwgaW50IF9fdXNlciAqYXJnKQoraW50IGF1dG9mczRfZG9fZXhwaXJlX211bHRpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCB2ZnNtb3VudCAqbW50LAorCQkJICAgIHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLCBpbnQgd2hlbikKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJaW50IHJldCA9IC1FQUdBSU47Ci0JaW50IGRvX25vdyA9IDA7Ci0KLQlpZiAoYXJnICYmIGdldF91c2VyKGRvX25vdywgYXJnKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoYXV0b2ZzX3R5cGVfdHJpZ2dlcihzYmktPnR5cGUpKQotCQlkZW50cnkgPSBhdXRvZnM0X2V4cGlyZV9kaXJlY3Qoc2IsIG1udCwgc2JpLCBkb19ub3cpOworCQlkZW50cnkgPSBhdXRvZnM0X2V4cGlyZV9kaXJlY3Qoc2IsIG1udCwgc2JpLCB3aGVuKTsKIAllbHNlCi0JCWRlbnRyeSA9IGF1dG9mczRfZXhwaXJlX2luZGlyZWN0KHNiLCBtbnQsIHNiaSwgZG9fbm93KTsKKwkJZGVudHJ5ID0gYXV0b2ZzNF9leHBpcmVfaW5kaXJlY3Qoc2IsIG1udCwgc2JpLCB3aGVuKTsKIAogCWlmIChkZW50cnkpIHsKIAkJc3RydWN0IGF1dG9mc19pbmZvICppbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGVudHJ5KTsKQEAgLTUxNiwzICs1MTAsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBDYWxsIHJlcGVhdGVkbHkgdW50aWwgaXQgcmV0dXJucyAtRUFHQUlOLCBtZWFuaW5nIHRoZXJlJ3Mgbm90aGluZworICAgbW9yZSB0byBiZSBkb25lICovCitpbnQgYXV0b2ZzNF9leHBpcmVfbXVsdGkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHZmc21vdW50ICptbnQsCisJCQlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSwgaW50IF9fdXNlciAqYXJnKQoreworCWludCBkb19ub3cgPSAwOworCisJaWYgKGFyZyAmJiBnZXRfdXNlcihkb19ub3csIGFyZykpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIGF1dG9mczRfZG9fZXhwaXJlX211bHRpKHNiLCBtbnQsIHNiaSwgZG9fbm93KTsKK30KKwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9yb290LmMgYi9mcy9hdXRvZnM0L3Jvb3QuYwppbmRleCA3NGIxNDY5Li5lMzgzYmYwIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L3Jvb3QuYworKysgYi9mcy9hdXRvZnM0L3Jvb3QuYwpAQCAtNDg1LDIyICs0ODUsNiBAQAogCURQUklOVEsoInBpZCA9ICV1LCBwZ3JwID0gJXUsIGNhdGF0b25pYyA9ICVkLCBvel9tb2RlID0gJWQiLAogCQkgY3VycmVudC0+cGlkLCB0YXNrX3BncnBfbnIoY3VycmVudCksIHNiaS0+Y2F0YXRvbmljLCBvel9tb2RlKTsKIAotCWV4cGlyaW5nID0gYXV0b2ZzNF9sb29rdXBfZXhwaXJpbmcoc2JpLCBkZW50cnktPmRfcGFyZW50LCAmZGVudHJ5LT5kX25hbWUpOwotCWlmIChleHBpcmluZykgewotCQkvKgotCQkgKiBJZiB3ZSBhcmUgcmFjaW5nIHdpdGggZXhwaXJlIHRoZSByZXF1ZXN0IG1pZ2h0IG5vdAotCQkgKiBiZSBxdWl0ZSBjb21wbGV0ZSBidXQgdGhlIGRpcmVjdG9yeSBoYXMgYmVlbiByZW1vdmVkCi0JCSAqIHNvIGl0IG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWwsIHNvIGp1c3Qgd2FpdCBmb3IgaXQuCi0JCSAqLwotCQlpbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZXhwaXJpbmcpOwotCQlhdXRvZnM0X2V4cGlyZV93YWl0KGV4cGlyaW5nKTsKLQkJc3Bpbl9sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZpbm8tPmV4cGlyaW5nKSkKLQkJCWxpc3RfZGVsX2luaXQoJmluby0+ZXhwaXJpbmcpOwotCQlzcGluX3VubG9jaygmc2JpLT5sb29rdXBfbG9jayk7Ci0JCWRwdXQoZXhwaXJpbmcpOwotCX0KLQogCXVuaGFzaGVkID0gYXV0b2ZzNF9sb29rdXBfYWN0aXZlKHNiaSwgZGVudHJ5LT5kX3BhcmVudCwgJmRlbnRyeS0+ZF9uYW1lKTsKIAlpZiAodW5oYXNoZWQpCiAJCWRlbnRyeSA9IHVuaGFzaGVkOwpAQCAtNTM4LDE0ICs1MjIsMzEgQEAKIAl9CiAKIAlpZiAoIW96X21vZGUpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOworCQlleHBpcmluZyA9IGF1dG9mczRfbG9va3VwX2V4cGlyaW5nKHNiaSwKKwkJCQkJCSAgIGRlbnRyeS0+ZF9wYXJlbnQsCisJCQkJCQkgICAmZGVudHJ5LT5kX25hbWUpOworCQlpZiAoZXhwaXJpbmcpIHsKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgcmFjaW5nIHdpdGggZXhwaXJlIHRoZSByZXF1ZXN0IG1pZ2h0IG5vdAorCQkJICogYmUgcXVpdGUgY29tcGxldGUgYnV0IHRoZSBkaXJlY3RvcnkgaGFzIGJlZW4gcmVtb3ZlZAorCQkJICogc28gaXQgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bCwgc28ganVzdCB3YWl0IGZvciBpdC4KKwkJCSAqLworCQkJaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGV4cGlyaW5nKTsKKwkJCWF1dG9mczRfZXhwaXJlX3dhaXQoZXhwaXJpbmcpOworCQkJc3Bpbl9sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmaW5vLT5leHBpcmluZykpCisJCQkJbGlzdF9kZWxfaW5pdCgmaW5vLT5leHBpcmluZyk7CisJCQlzcGluX3VubG9jaygmc2JpLT5sb29rdXBfbG9jayk7CisJCQlkcHV0KGV4cGlyaW5nKTsKKwkJfQorCiAJCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQlkZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX0FVVE9GU19QRU5ESU5HOwogCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwotCQlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9yZXZhbGlkYXRlKSB7Ci0JCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CisJCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUpCiAJCQkoZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUpKGRlbnRyeSwgbmQpOwotCQkJbXV0ZXhfbG9jaygmZGlyLT5pX211dGV4KTsKLQkJfQorCQltdXRleF9sb2NrKCZkaXItPmlfbXV0ZXgpOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggZDA2Y2IwMi4uNzZhZmQwZCAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtOTAwLDYgKzkwMCw3IEBACiBiZWZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWJlZnNfZGVidWcoc2IsICItLS0+IGJlZnNfc3RhdGZzKCkiKTsKIApAQCAtOTEwLDYgKzkxMSw4IEBACiAJYnVmLT5mX2JhdmFpbCA9IGJ1Zi0+Zl9iZnJlZTsKIAlidWYtPmZfZmlsZXMgPSAwOwkvKiBVTktOT1dOICovCiAJYnVmLT5mX2ZmcmVlID0gMDsJLyogVU5LTk9XTiAqLworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gQkVGU19OQU1FX0xFTjsKIAogCWJlZnNfZGVidWcoc2IsICI8LS0tIGJlZnNfc3RhdGZzKCkiKTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCAzM2I3MjM1Li40MDM4MWRmIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmLmMKKysrIGIvZnMvYmluZm10X2VsZi5jCkBAIC0xMiw4ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0yMSwyMCArMTksMTUgQEAKICNpbmNsdWRlIDxsaW51eC9iaW5mbXRzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NobS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9lbGYuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CkBAIC01NzYsNyArNTY5LDYgQEAKIAl1bnNpZ25lZCBsb25nIGVycm9yOwogCXN0cnVjdCBlbGZfcGhkciAqZWxmX3BwbnQsICplbGZfcGhkYXRhOwogCXVuc2lnbmVkIGxvbmcgZWxmX2JzcywgZWxmX2JyazsKLQlpbnQgZWxmX2V4ZWNfZmlsZW5vOwogCWludCByZXR2YWwsIGk7CiAJdW5zaWduZWQgaW50IHNpemU7CiAJdW5zaWduZWQgbG9uZyBlbGZfZW50cnk7CkBAIC02MzEsMTIgKzYyMyw2IEBACiAJCWdvdG8gb3V0X2ZyZWVfcGg7CiAJfQogCi0JcmV0dmFsID0gZ2V0X3VudXNlZF9mZCgpOwotCWlmIChyZXR2YWwgPCAwKQotCQlnb3RvIG91dF9mcmVlX3BoOwotCWdldF9maWxlKGJwcm0tPmZpbGUpOwotCWZkX2luc3RhbGwoZWxmX2V4ZWNfZmlsZW5vID0gcmV0dmFsLCBicHJtLT5maWxlKTsKLQogCWVsZl9wcG50ID0gZWxmX3BoZGF0YTsKIAllbGZfYnNzID0gMDsKIAllbGZfYnJrID0gMDsKQEAgLTY1NSwxMyArNjQxLDEzIEBACiAJCQlyZXR2YWwgPSAtRU5PRVhFQzsKIAkJCWlmIChlbGZfcHBudC0+cF9maWxlc3ogPiBQQVRIX01BWCB8fCAKIAkJCSAgICBlbGZfcHBudC0+cF9maWxlc3ogPCAyKQotCQkJCWdvdG8gb3V0X2ZyZWVfZmlsZTsKKwkJCQlnb3RvIG91dF9mcmVlX3BoOwogCiAJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQkJZWxmX2ludGVycHJldGVyID0ga21hbGxvYyhlbGZfcHBudC0+cF9maWxlc3osCiAJCQkJCQkgIEdGUF9LRVJORUwpOwogCQkJaWYgKCFlbGZfaW50ZXJwcmV0ZXIpCi0JCQkJZ290byBvdXRfZnJlZV9maWxlOworCQkJCWdvdG8gb3V0X2ZyZWVfcGg7CiAKIAkJCXJldHZhbCA9IGtlcm5lbF9yZWFkKGJwcm0tPmZpbGUsIGVsZl9wcG50LT5wX29mZnNldCwKIAkJCQkJICAgICBlbGZfaW50ZXJwcmV0ZXIsCkBAIC05NTYsOCArOTQyLDYgQEAKIAogCWtmcmVlKGVsZl9waGRhdGEpOwogCi0Jc3lzX2Nsb3NlKGVsZl9leGVjX2ZpbGVubyk7Ci0KIAlzZXRfYmluZm10KCZlbGZfZm9ybWF0KTsKIAogI2lmZGVmIEFSQ0hfSEFTX1NFVFVQX0FERElUSU9OQUxfUEFHRVMKQEAgLTEwMjgsOCArMTAxMiw2IEBACiAJCWZwdXQoaW50ZXJwcmV0ZXIpOwogb3V0X2ZyZWVfaW50ZXJwOgogCWtmcmVlKGVsZl9pbnRlcnByZXRlcik7Ci1vdXRfZnJlZV9maWxlOgotCXN5c19jbG9zZShlbGZfZXhlY19maWxlbm8pOwogb3V0X2ZyZWVfcGg6CiAJa2ZyZWUoZWxmX3BoZGF0YSk7CiAJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKaW5kZXggZjNlNzJjNS4uNzBjZmM0YiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZl9mZHBpYy5jCisrKyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwpAQCAtOTcyLDkgKzk3MiwxMiBAQAogCQkJcGFyYW1zLT5lbGZoZHJfYWRkciA9IHNlZy0+YWRkcjsKIAogCQkvKiBjbGVhciBhbnkgc3BhY2UgYWxsb2NhdGVkIGJ1dCBub3QgbG9hZGVkICovCi0JCWlmIChwaGRyLT5wX2ZpbGVzeiA8IHBoZHItPnBfbWVtc3opCi0JCQljbGVhcl91c2VyKCh2b2lkICopIChzZWctPmFkZHIgKyBwaGRyLT5wX2ZpbGVzeiksCi0JCQkJICAgcGhkci0+cF9tZW1zeiAtIHBoZHItPnBfZmlsZXN6KTsKKwkJaWYgKHBoZHItPnBfZmlsZXN6IDwgcGhkci0+cF9tZW1zeikgeworCQkJcmV0ID0gY2xlYXJfdXNlcigodm9pZCAqKSAoc2VnLT5hZGRyICsgcGhkci0+cF9maWxlc3opLAorCQkJCQkgcGhkci0+cF9tZW1zeiAtIHBoZHItPnBfZmlsZXN6KTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQogCiAJCWlmIChtbSkgewogCQkJaWYgKHBoZHItPnBfZmxhZ3MgJiBQRl9YKSB7CkBAIC0xMDE0LDcgKzEwMTcsNyBAQAogCXN0cnVjdCBlbGYzMl9mZHBpY19sb2Fkc2VnICpzZWc7CiAJc3RydWN0IGVsZjMyX3BoZHIgKnBoZHI7CiAJdW5zaWduZWQgbG9uZyBsb2FkX2FkZHIsIGRlbHRhX3ZhZGRyOwotCWludCBsb29wLCBkdnNldDsKKwlpbnQgbG9vcCwgZHZzZXQsIHJldDsKIAogCWxvYWRfYWRkciA9IHBhcmFtcy0+bG9hZF9hZGRyOwogCWRlbHRhX3ZhZGRyID0gMDsKQEAgLTExMTQsNyArMTExNyw5IEBACiAJCSAqIFBUX0xPQUQgKi8KIAkJaWYgKHByb3QgJiBQUk9UX1dSSVRFICYmIGRpc3AgPiAwKSB7CiAJCQlrZGVidWcoImNsZWFyWyVkXSBhZD0lbHggc3o9JWx4IiwgbG9vcCwgbWFkZHIsIGRpc3ApOwotCQkJY2xlYXJfdXNlcigodm9pZCBfX3VzZXIgKikgbWFkZHIsIGRpc3ApOworCQkJcmV0ID0gY2xlYXJfdXNlcigodm9pZCBfX3VzZXIgKikgbWFkZHIsIGRpc3ApOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OwogCQkJbWFkZHIgKz0gZGlzcDsKIAkJfQogCkBAIC0xMTQ5LDE1ICsxMTU0LDE5IEBACiAJCWlmIChwcm90ICYgUFJPVF9XUklURSAmJiBleGNlc3MxID4gMCkgewogCQkJa2RlYnVnKCJjbGVhclslZF0gYWQ9JWx4IHN6PSVseCIsCiAJCQkgICAgICAgbG9vcCwgbWFkZHIgKyBwaGRyLT5wX2ZpbGVzeiwgZXhjZXNzMSk7Ci0JCQljbGVhcl91c2VyKCh2b2lkIF9fdXNlciAqKSBtYWRkciArIHBoZHItPnBfZmlsZXN6LAotCQkJCSAgIGV4Y2VzczEpOworCQkJcmV0ID0gY2xlYXJfdXNlcigodm9pZCBfX3VzZXIgKikgbWFkZHIgKyBwaGRyLT5wX2ZpbGVzeiwKKwkJCQkJIGV4Y2VzczEpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OwogCQl9CiAKICNlbHNlCiAJCWlmIChleGNlc3MgPiAwKSB7CiAJCQlrZGVidWcoImNsZWFyWyVkXSBhZD0lbHggc3o9JWx4IiwKIAkJCSAgICAgICBsb29wLCBtYWRkciArIHBoZHItPnBfZmlsZXN6LCBleGNlc3MpOwotCQkJY2xlYXJfdXNlcigodm9pZCAqKSBtYWRkciArIHBoZHItPnBfZmlsZXN6LCBleGNlc3MpOworCQkJcmV0ID0gY2xlYXJfdXNlcigodm9pZCAqKSBtYWRkciArIHBoZHItPnBfZmlsZXN6LCBleGNlc3MpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OwogCQl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZnMvYmluZm10X3NvbS5jIGIvZnMvYmluZm10X3NvbS5jCmluZGV4IDA4NjQ0YTYuLmVmZjc0YjkgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9zb20uYworKysgYi9mcy9iaW5mbXRfc29tLmMKQEAgLTE4OCw3ICsxODgsNiBAQAogc3RhdGljIGludAogbG9hZF9zb21fYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7Ci0JaW50IHNvbV9leGVjX2ZpbGVubzsKIAlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGludCBzaXplOwogCXVuc2lnbmVkIGxvbmcgc29tX2VudHJ5OwpAQCAtMjIwLDEyICsyMTksNiBAQAogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCXJldHZhbCA9IGdldF91bnVzZWRfZmQoKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBvdXRfZnJlZTsKLQlnZXRfZmlsZShicHJtLT5maWxlKTsKLQlmZF9pbnN0YWxsKHNvbV9leGVjX2ZpbGVubyA9IHJldHZhbCwgYnBybS0+ZmlsZSk7Ci0KIAkvKiBGbHVzaCBhbGwgdHJhY2VzIG9mIHRoZSBjdXJyZW50bHkgcnVubmluZyBleGVjdXRhYmxlICovCiAJcmV0dmFsID0gZmx1c2hfb2xkX2V4ZWMoYnBybSk7CiAJaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2ZzL2Jpby5jIGIvZnMvYmlvLmMKaW5kZXggYTA0MGNkZS4uZTBjOWU1NCAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTE0MjAsOCArMTQyMCw3IEBACiB9CiAKIC8qCi0gKiBzcGxpdCBhIGJpbyAtIG9ubHkgd29ycnkgYWJvdXQgYSBiaW8gd2l0aCBhIHNpbmdsZSBwYWdlCi0gKiBpbiBpdCdzIGlvdmVjCisgKiBzcGxpdCBhIGJpbyAtIG9ubHkgd29ycnkgYWJvdXQgYSBiaW8gd2l0aCBhIHNpbmdsZSBwYWdlIGluIGl0cyBpb3ZlYwogICovCiBzdHJ1Y3QgYmlvX3BhaXIgKmJpb19zcGxpdChzdHJ1Y3QgYmlvICpiaSwgaW50IGZpcnN0X3NlY3RvcnMpCiB7CmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDhjM2M2ODkuLmY0NWRiYzEgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0yMDQsNiArMjA0LDcgQEAKIAl9CiAJcmV0dXJuIHN5bmNfYmxvY2tkZXYoYmRldik7CiB9CitFWFBPUlRfU1lNQk9MKGZzeW5jX2JkZXYpOwogCiAvKioKICAqIGZyZWV6ZV9iZGV2ICAtLSAgbG9jayBhIGZpbGVzeXN0ZW0gYW5kIGZvcmNlIGl0IGludG8gYSBjb25zaXN0ZW50IHN0YXRlCmRpZmYgLS1naXQgYS9mcy9idHJmcy9NYWtlZmlsZSBiL2ZzL2J0cmZzL01ha2VmaWxlCmluZGV4IGQyY2Y1YTUuLjlhZGY1ZTQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL01ha2VmaWxlCisrKyBiL2ZzL2J0cmZzL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogCSAgIGV4dGVudF9tYXAubyBzeXNmcy5vIHN0cnVjdC1mdW5jcy5vIHhhdHRyLm8gb3JkZXJlZC1kYXRhLm8gXAogCSAgIGV4dGVudF9pby5vIHZvbHVtZXMubyBhc3luYy10aHJlYWQubyBpb2N0bC5vIGxvY2tpbmcubyBvcnBoYW4ubyBcCiAJICAgcmVmLWNhY2hlLm8gZXhwb3J0Lm8gdHJlZS1sb2cubyBhY2wubyBmcmVlLXNwYWNlLWNhY2hlLm8gemxpYi5vIFwKLQkgICBjb21wcmVzc2lvbi5vCisJICAgY29tcHJlc3Npb24ubyBkZWxheWVkLXJlZi5vCiBlbHNlCiAKICMgTm9ybWFsIE1ha2VmaWxlCmRpZmYgLS1naXQgYS9mcy9idHJmcy9hY2wuYyBiL2ZzL2J0cmZzL2FjbC5jCmluZGV4IDFkNTNiNjIuLjdmZGQxODQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FjbC5jCisrKyBiL2ZzL2J0cmZzL2FjbC5jCkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJfQogCiAJCWlmICghYWNsKQotCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCX0KIAogCWlmIChJU19QT1NJWEFDTChkaXIpICYmIGFjbCkgewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvYXN5bmMtdGhyZWFkLmMgYi9mcy9idHJmcy9hc3luYy10aHJlYWQuYwppbmRleCBjODRjYTFmLi41MWJmZGZjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9hc3luYy10aHJlYWQuYworKysgYi9mcy9idHJmcy9hc3luYy10aHJlYWQuYwpAQCAtMjAsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlICJhc3luYy10aHJlYWQuaCIKIAogI2RlZmluZSBXT1JLX1FVRVVFRF9CSVQgMApAQCAtMTk1LDYgKzE5NCw5IEBACiAJCQkJaWYgKCFsaXN0X2VtcHR5KCZ3b3JrZXItPnBlbmRpbmcpKQogCQkJCQljb250aW51ZTsKIAorCQkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQkJCWJyZWFrOworCiAJCQkJLyogc3RpbGwgbm8gbW9yZSB3b3JrPywgc2xlZXAgZm9yIHJlYWwgKi8KIAkJCQlzcGluX2xvY2tfaXJxKCZ3b3JrZXItPmxvY2spOwogCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CkBAIC0yMDgsNyArMjEwLDggQEAKIAkJCQl3b3JrZXItPndvcmtpbmcgPSAwOwogCQkJCXNwaW5fdW5sb2NrX2lycSgmd29ya2VyLT5sb2NrKTsKIAotCQkJCXNjaGVkdWxlKCk7CisJCQkJaWYgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCisJCQkJCXNjaGVkdWxlKCk7CiAJCQl9CiAJCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmggYi9mcy9idHJmcy9idHJmc19pbm9kZS5oCmluZGV4IDcyNjc3Y2UuLmIzMDk4NmYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2J0cmZzX2lub2RlLmgKKysrIGIvZnMvYnRyZnMvYnRyZnNfaW5vZGUuaApAQCAtNjYsNiArNjYsMTIgQEAKIAkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGFsbG9jX2lub2RlczsKIAorCS8qCisJICogbGlzdCBmb3IgdHJhY2tpbmcgaW5vZGVzIHRoYXQgbXVzdCBiZSBzZW50IHRvIGRpc2sgYmVmb3JlIGEKKwkgKiByZW5hbWUgb3IgdHJ1bmNhdGUgY29tbWl0CisJICovCisJc3RydWN0IGxpc3RfaGVhZCBvcmRlcmVkX29wZXJhdGlvbnM7CisKIAkvKiB0aGUgc3BhY2VfaW5mbyBmb3Igd2hlcmUgdGhpcyBpbm9kZSdzIGRhdGEgYWxsb2NhdGlvbnMgYXJlIGRvbmUgKi8KIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc3BhY2VfaW5mbzsKIApAQCAtODYsMTIgKzkyLDYgQEAKIAkgKi8KIAl1NjQgbG9nZ2VkX3RyYW5zOwogCi0JLyoKLQkgKiB0cmFucyB0aGF0IGxhc3QgbWFkZSBhIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdWxseSBmc3luYydkLiAgVGhpcwotCSAqIGdldHMgcmVzZXQgdG8gemVybyBlYWNoIHRpbWUgdGhlIGlub2RlIGlzIGxvZ2dlZAotCSAqLwotCXU2NCBsb2dfZGlydHlfdHJhbnM7Ci0KIAkvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgcGVuZGluZyBkZWxhbGxvYywgdXNlZCBieSBzdGF0IHRvIGNhbGMgdGhlCiAJICogcmVhbCBibG9jayB1c2FnZSBvZiB0aGUgZmlsZQogCSAqLwpAQCAtMTIxLDYgKzEyMSwyNSBAQAogCS8qIHRoZSBzdGFydCBvZiBibG9jayBncm91cCBwcmVmZXJyZWQgZm9yIGFsbG9jYXRpb25zLiAqLwogCXU2NCBibG9ja19ncm91cDsKIAorCS8qIHRoZSBmc3luYyBsb2cgaGFzIHNvbWUgY29ybmVyIGNhc2VzIHRoYXQgbWVhbiB3ZSBoYXZlIHRvIGNoZWNrCisJICogZGlyZWN0b3JpZXMgdG8gc2VlIGlmIGFueSB1bmxpbmtzIGhhdmUgYmVlbiBkb25lIGJlZm9yZQorCSAqIHRoZSBkaXJlY3Rvcnkgd2FzIGxvZ2dlZC4gIFNlZSB0cmVlLWxvZy5jIGZvciBhbGwgdGhlCisJICogZGV0YWlscworCSAqLworCXU2NCBsYXN0X3VubGlua190cmFuczsKKworCS8qCisJICogb3JkZXJlZF9kYXRhX2Nsb3NlIGlzIHNldCBieSB0cnVuY2F0ZSB3aGVuIGEgZmlsZSB0aGF0IHVzZWQKKwkgKiB0byBoYXZlIGdvb2QgZGF0YSBoYXMgYmVlbiB0cnVuY2F0ZWQgdG8gemVyby4gIFdoZW4gaXQgaXMgc2V0CisJICogdGhlIGJ0cmZzIGZpbGUgcmVsZWFzZSBjYWxsIHdpbGwgYWRkIHRoaXMgaW5vZGUgdG8gdGhlCisJICogb3JkZXJlZCBvcGVyYXRpb25zIGxpc3Qgc28gdGhhdCB3ZSBtYWtlIHN1cmUgdG8gZmx1c2ggb3V0IGFueQorCSAqIG5ldyBkYXRhIHRoZSBhcHBsaWNhdGlvbiBtYXkgaGF2ZSB3cml0dGVuIGJlZm9yZSBjb21taXQuCisJICoKKwkgKiB5ZXMsIGl0cyBzaWxseSB0byBoYXZlIGEgc2luZ2xlIGJpdGZsYWcsIGJ1dCB3ZSBtaWdodCBncm93IG1vcmUKKwkgKiBvZiB0aGVzZS4KKwkgKi8KKwl1bnNpZ25lZCBvcmRlcmVkX2RhdGFfY2xvc2U6MTsKKwogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiB9OwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5jIGIvZnMvYnRyZnMvY3RyZWUuYwppbmRleCAzN2YzMWI1Li5lNWIyNTMzIDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmMKQEAgLTI1NCwxOCArMjU0LDEzIEBACiAgKiBlbXB0eV9zaXplIC0tIGEgaGludCB0aGF0IHlvdSBwbGFuIG9uIGRvaW5nIG1vcmUgY293LiAgVGhpcyBpcyB0aGUgc2l6ZSBpbgogICogYnl0ZXMgdGhlIGFsbG9jYXRvciBzaG91bGQgdHJ5IHRvIGZpbmQgZnJlZSBuZXh0IHRvIHRoZSBibG9jayBpdCByZXR1cm5zLgogICogVGhpcyBpcyBqdXN0IGEgaGludCBhbmQgbWF5IGJlIGlnbm9yZWQgYnkgdGhlIGFsbG9jYXRvci4KLSAqCi0gKiBwcmVhbGxvY19kZXN0IC0tIGlmIHlvdSBoYXZlIGFscmVhZHkgcmVzZXJ2ZWQgYSBkZXN0aW5hdGlvbiBmb3IgdGhlIGNvdywKLSAqIHRoaXMgdXNlcyB0aGF0IGJsb2NrIGluc3RlYWQgb2YgYWxsb2NhdGluZyBhIG5ldyBvbmUuCi0gKiBidHJmc19hbGxvY19yZXNlcnZlZF9leHRlbnQgaXMgdXNlZCB0byBmaW5pc2ggdGhlIGFsbG9jYXRpb24uCiAgKi8KIHN0YXRpYyBub2lubGluZSBpbnQgX19idHJmc19jb3dfYmxvY2soc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYnVmLAogCQkJICAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqcGFyZW50LCBpbnQgcGFyZW50X3Nsb3QsCiAJCQkgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICoqY293X3JldCwKLQkJCSAgICAgdTY0IHNlYXJjaF9zdGFydCwgdTY0IGVtcHR5X3NpemUsCi0JCQkgICAgIHU2NCBwcmVhbGxvY19kZXN0KQorCQkJICAgICB1NjQgc2VhcmNoX3N0YXJ0LCB1NjQgZW1wdHlfc2l6ZSkKIHsKIAl1NjQgcGFyZW50X3N0YXJ0OwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpjb3c7CkBAIC0yOTEsMjYgKzI4NiwxMCBAQAogCWxldmVsID0gYnRyZnNfaGVhZGVyX2xldmVsKGJ1Zik7CiAJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGJ1Zik7CiAKLQlpZiAocHJlYWxsb2NfZGVzdCkgewotCQlzdHJ1Y3QgYnRyZnNfa2V5IGluczsKLQotCQlpbnMub2JqZWN0aWQgPSBwcmVhbGxvY19kZXN0OwotCQlpbnMub2Zmc2V0ID0gYnVmLT5sZW47Ci0JCWlucy50eXBlID0gQlRSRlNfRVhURU5UX0lURU1fS0VZOwotCi0JCXJldCA9IGJ0cmZzX2FsbG9jX3Jlc2VydmVkX2V4dGVudCh0cmFucywgcm9vdCwgcGFyZW50X3N0YXJ0LAotCQkJCQkJICByb290LT5yb290X2tleS5vYmplY3RpZCwKLQkJCQkJCSAgdHJhbnMtPnRyYW5zaWQsIGxldmVsLCAmaW5zKTsKLQkJQlVHX09OKHJldCk7Ci0JCWNvdyA9IGJ0cmZzX2luaXRfbmV3X2J1ZmZlcih0cmFucywgcm9vdCwgcHJlYWxsb2NfZGVzdCwKLQkJCQkJICAgIGJ1Zi0+bGVuLCBsZXZlbCk7Ci0JfSBlbHNlIHsKLQkJY293ID0gYnRyZnNfYWxsb2NfZnJlZV9ibG9jayh0cmFucywgcm9vdCwgYnVmLT5sZW4sCi0JCQkJCSAgICAgcGFyZW50X3N0YXJ0LAotCQkJCQkgICAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAotCQkJCQkgICAgIHRyYW5zLT50cmFuc2lkLCBsZXZlbCwKLQkJCQkJICAgICBzZWFyY2hfc3RhcnQsIGVtcHR5X3NpemUpOwotCX0KKwljb3cgPSBidHJmc19hbGxvY19mcmVlX2Jsb2NrKHRyYW5zLCByb290LCBidWYtPmxlbiwKKwkJCQkgICAgIHBhcmVudF9zdGFydCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCisJCQkJICAgICB0cmFucy0+dHJhbnNpZCwgbGV2ZWwsCisJCQkJICAgICBzZWFyY2hfc3RhcnQsIGVtcHR5X3NpemUpOwogCWlmIChJU19FUlIoY293KSkKIAkJcmV0dXJuIFBUUl9FUlIoY293KTsKIApAQCAtNDEzLDcgKzM5Miw3IEBACiBub2lubGluZSBpbnQgYnRyZnNfY293X2Jsb2NrKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYsCiAJCSAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqcGFyZW50LCBpbnQgcGFyZW50X3Nsb3QsCi0JCSAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqKmNvd19yZXQsIHU2NCBwcmVhbGxvY19kZXN0KQorCQkgICAgc3RydWN0IGV4dGVudF9idWZmZXIgKipjb3dfcmV0KQogewogCXU2NCBzZWFyY2hfc3RhcnQ7CiAJaW50IHJldDsKQEAgLTQzNiw3ICs0MTUsNiBAQAogCSAgICBidHJmc19oZWFkZXJfb3duZXIoYnVmKSA9PSByb290LT5yb290X2tleS5vYmplY3RpZCAmJgogCSAgICAhYnRyZnNfaGVhZGVyX2ZsYWcoYnVmLCBCVFJGU19IRUFERVJfRkxBR19XUklUVEVOKSkgewogCQkqY293X3JldCA9IGJ1ZjsKLQkJV0FSTl9PTihwcmVhbGxvY19kZXN0KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC00NDcsOCArNDI1LDcgQEAKIAlidHJmc19zZXRfbG9ja19ibG9ja2luZyhidWYpOwogCiAJcmV0ID0gX19idHJmc19jb3dfYmxvY2sodHJhbnMsIHJvb3QsIGJ1ZiwgcGFyZW50LAotCQkJCSBwYXJlbnRfc2xvdCwgY293X3JldCwgc2VhcmNoX3N0YXJ0LCAwLAotCQkJCSBwcmVhbGxvY19kZXN0KTsKKwkJCQkgcGFyZW50X3Nsb3QsIGNvd19yZXQsIHNlYXJjaF9zdGFydCwgMCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjE3LDcgKzU5NCw3IEBACiAJCWVyciA9IF9fYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCBjdXIsIHBhcmVudCwgaSwKIAkJCQkJJmN1ciwgc2VhcmNoX3N0YXJ0LAogCQkJCQltaW4oMTYgKiBibG9ja3NpemUsCi0JCQkJCSAgICAoZW5kX3Nsb3QgLSBpKSAqIGJsb2Nrc2l6ZSksIDApOworCQkJCQkgICAgKGVuZF9zbG90IC0gaSkgKiBibG9ja3NpemUpKTsKIAkJaWYgKGVycikgewogCQkJYnRyZnNfdHJlZV91bmxvY2soY3VyKTsKIAkJCWZyZWVfZXh0ZW50X2J1ZmZlcihjdXIpOwpAQCAtOTM3LDcgKzkxNCw3IEBACiAJCUJVR19PTighY2hpbGQpOwogCQlidHJmc190cmVlX2xvY2soY2hpbGQpOwogCQlidHJmc19zZXRfbG9ja19ibG9ja2luZyhjaGlsZCk7Ci0JCXJldCA9IGJ0cmZzX2Nvd19ibG9jayh0cmFucywgcm9vdCwgY2hpbGQsIG1pZCwgMCwgJmNoaWxkLCAwKTsKKwkJcmV0ID0gYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCBjaGlsZCwgbWlkLCAwLCAmY2hpbGQpOwogCQlCVUdfT04ocmV0KTsKIAogCQlzcGluX2xvY2soJnJvb3QtPm5vZGVfbG9jayk7CkBAIC05NDUsNiArOTIyLDcgQEAKIAkJc3Bpbl91bmxvY2soJnJvb3QtPm5vZGVfbG9jayk7CiAKIAkJcmV0ID0gYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGNoaWxkLT5zdGFydCwKKwkJCQkJICAgICAgY2hpbGQtPmxlbiwKIAkJCQkJICAgICAgbWlkLT5zdGFydCwgY2hpbGQtPnN0YXJ0LAogCQkJCQkgICAgICByb290LT5yb290X2tleS5vYmplY3RpZCwKIAkJCQkJICAgICAgdHJhbnMtPnRyYW5zaWQsIGxldmVsIC0gMSk7CkBAIC05NzEsNiArOTQ5LDEwIEBACiAJICAgIEJUUkZTX05PREVQVFJTX1BFUl9CTE9DSyhyb290KSAvIDQpCiAJCXJldHVybiAwOwogCisJaWYgKHRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nICYmCisJICAgIGJ0cmZzX2hlYWRlcl9ucml0ZW1zKG1pZCkgPiAyKQorCQlyZXR1cm4gMDsKKwogCWlmIChidHJmc19oZWFkZXJfbnJpdGVtcyhtaWQpIDwgMikKIAkJZXJyX29uX2Vub3NwYyA9IDE7CiAKQEAgLTk3OSw3ICs5NjEsNyBAQAogCQlidHJmc190cmVlX2xvY2sobGVmdCk7CiAJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKGxlZnQpOwogCQl3cmV0ID0gYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCBsZWZ0LAotCQkJCSAgICAgICBwYXJlbnQsIHBzbG90IC0gMSwgJmxlZnQsIDApOworCQkJCSAgICAgICBwYXJlbnQsIHBzbG90IC0gMSwgJmxlZnQpOwogCQlpZiAod3JldCkgewogCQkJcmV0ID0gd3JldDsKIAkJCWdvdG8gZW5vc3BjOwpAQCAtOTkwLDcgKzk3Miw3IEBACiAJCWJ0cmZzX3RyZWVfbG9jayhyaWdodCk7CiAJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKHJpZ2h0KTsKIAkJd3JldCA9IGJ0cmZzX2Nvd19ibG9jayh0cmFucywgcm9vdCwgcmlnaHQsCi0JCQkJICAgICAgIHBhcmVudCwgcHNsb3QgKyAxLCAmcmlnaHQsIDApOworCQkJCSAgICAgICBwYXJlbnQsIHBzbG90ICsgMSwgJnJpZ2h0KTsKIAkJaWYgKHdyZXQpIHsKIAkJCXJldCA9IHdyZXQ7CiAJCQlnb3RvIGVub3NwYzsKQEAgLTExNzEsNyArMTE1Myw3IEBACiAJCQl3cmV0ID0gMTsKIAkJfSBlbHNlIHsKIAkJCXJldCA9IGJ0cmZzX2Nvd19ibG9jayh0cmFucywgcm9vdCwgbGVmdCwgcGFyZW50LAotCQkJCQkgICAgICBwc2xvdCAtIDEsICZsZWZ0LCAwKTsKKwkJCQkJICAgICAgcHNsb3QgLSAxLCAmbGVmdCk7CiAJCQlpZiAocmV0KQogCQkJCXdyZXQgPSAxOwogCQkJZWxzZSB7CkBAIC0xMjIyLDcgKzEyMDQsNyBAQAogCQl9IGVsc2UgewogCQkJcmV0ID0gYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCByaWdodCwKIAkJCQkJICAgICAgcGFyZW50LCBwc2xvdCArIDEsCi0JCQkJCSAgICAgICZyaWdodCwgMCk7CisJCQkJCSAgICAgICZyaWdodCk7CiAJCQlpZiAocmV0KQogCQkJCXdyZXQgPSAxOwogCQkJZWxzZSB7CkBAIC0xMjYyLDkgKzEyNDQsOSBAQAogICogcmVhZGFoZWFkIG9uZSBmdWxsIG5vZGUgb2YgbGVhdmVzLCBmaW5kaW5nIHRoaW5ncyB0aGF0IGFyZSBjbG9zZQogICogdG8gdGhlIGJsb2NrIGluICdzbG90JywgYW5kIHRyaWdnZXJpbmcgcmEgb24gdGhlbS4KICAqLwotc3RhdGljIG5vaW5saW5lIHZvaWQgcmVhZGFfZm9yX3NlYXJjaChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkgICAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKLQkJCQkgICAgICBpbnQgbGV2ZWwsIGludCBzbG90LCB1NjQgb2JqZWN0aWQpCitzdGF0aWMgdm9pZCByZWFkYV9mb3Jfc2VhcmNoKHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKKwkJCSAgICAgaW50IGxldmVsLCBpbnQgc2xvdCwgdTY0IG9iamVjdGlkKQogewogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpub2RlOwogCXN0cnVjdCBidHJmc19kaXNrX2tleSBkaXNrX2tleTsKQEAgLTE0NjUsNiArMTQ0NywxMTcgQEAKIH0KIAogLyoKKyAqIGhlbHBlciBmdW5jdGlvbiBmb3IgYnRyZnNfc2VhcmNoX3Nsb3QuICBUaGUgZ29hbCBpcyB0byBmaW5kIGEgYmxvY2sKKyAqIGluIGNhY2hlIHdpdGhvdXQgc2V0dGluZyB0aGUgcGF0aCB0byBibG9ja2luZy4gIElmIHdlIGZpbmQgdGhlIGJsb2NrCisgKiB3ZSByZXR1cm4gemVybyBhbmQgdGhlIHBhdGggaXMgdW5jaGFuZ2VkLgorICoKKyAqIElmIHdlIGNhbid0IGZpbmQgdGhlIGJsb2NrLCB3ZSBzZXQgdGhlIHBhdGggYmxvY2tpbmcgYW5kIGRvIHNvbWUKKyAqIHJlYWRhLiAgLUVBR0FJTiBpcyByZXR1cm5lZCBhbmQgdGhlIHNlYXJjaCBtdXN0IGJlIHJlcGVhdGVkLgorICovCitzdGF0aWMgaW50CityZWFkX2Jsb2NrX2Zvcl9zZWFyY2goc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGJ0cmZzX3BhdGggKnAsCisJCSAgICAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqKmViX3JldCwgaW50IGxldmVsLCBpbnQgc2xvdCwKKwkJICAgICAgIHN0cnVjdCBidHJmc19rZXkgKmtleSkKK3sKKwl1NjQgYmxvY2tucjsKKwl1NjQgZ2VuOworCXUzMiBibG9ja3NpemU7CisJc3RydWN0IGV4dGVudF9idWZmZXIgKmIgPSAqZWJfcmV0OworCXN0cnVjdCBleHRlbnRfYnVmZmVyICp0bXA7CisKKwlibG9ja25yID0gYnRyZnNfbm9kZV9ibG9ja3B0cihiLCBzbG90KTsKKwlnZW4gPSBidHJmc19ub2RlX3B0cl9nZW5lcmF0aW9uKGIsIHNsb3QpOworCWJsb2Nrc2l6ZSA9IGJ0cmZzX2xldmVsX3NpemUocm9vdCwgbGV2ZWwgLSAxKTsKKworCXRtcCA9IGJ0cmZzX2ZpbmRfdHJlZV9ibG9jayhyb290LCBibG9ja25yLCBibG9ja3NpemUpOworCWlmICh0bXAgJiYgYnRyZnNfYnVmZmVyX3VwdG9kYXRlKHRtcCwgZ2VuKSkgeworCQkqZWJfcmV0ID0gdG1wOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIHJlZHVjZSBsb2NrIGNvbnRlbnRpb24gYXQgaGlnaCBsZXZlbHMKKwkgKiBvZiB0aGUgYnRyZWUgYnkgZHJvcHBpbmcgbG9ja3MgYmVmb3JlCisJICogd2UgcmVhZC4KKwkgKi8KKwlidHJmc19yZWxlYXNlX3BhdGgoTlVMTCwgcCk7CisJaWYgKHRtcCkKKwkJZnJlZV9leHRlbnRfYnVmZmVyKHRtcCk7CisJaWYgKHAtPnJlYWRhKQorCQlyZWFkYV9mb3Jfc2VhcmNoKHJvb3QsIHAsIGxldmVsLCBzbG90LCBrZXktPm9iamVjdGlkKTsKKworCXRtcCA9IHJlYWRfdHJlZV9ibG9jayhyb290LCBibG9ja25yLCBibG9ja3NpemUsIGdlbik7CisJaWYgKHRtcCkKKwkJZnJlZV9leHRlbnRfYnVmZmVyKHRtcCk7CisJcmV0dXJuIC1FQUdBSU47Cit9CisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gZm9yIGJ0cmZzX3NlYXJjaF9zbG90LiAgVGhpcyBkb2VzIGFsbCBvZiB0aGUgY2hlY2tzCisgKiBmb3Igbm9kZS1sZXZlbCBibG9ja3MgYW5kIGRvZXMgYW55IGJhbGFuY2luZyByZXF1aXJlZCBiYXNlZCBvbgorICogdGhlIGluc19sZW4uCisgKgorICogSWYgbm8gZXh0cmEgd29yayB3YXMgcmVxdWlyZWQsIHplcm8gaXMgcmV0dXJuZWQuICBJZiB3ZSBoYWQgdG8KKyAqIGRyb3AgdGhlIHBhdGgsIC1FQUdBSU4gaXMgcmV0dXJuZWQgYW5kIGJ0cmZzX3NlYXJjaF9zbG90IG11c3QKKyAqIHN0YXJ0IG92ZXIKKyAqLworc3RhdGljIGludAorc2V0dXBfbm9kZXNfZm9yX3NlYXJjaChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgYnRyZnNfcGF0aCAqcCwKKwkJICAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICpiLCBpbnQgbGV2ZWwsIGludCBpbnNfbGVuKQoreworCWludCByZXQ7CisJaWYgKChwLT5zZWFyY2hfZm9yX3NwbGl0IHx8IGluc19sZW4gPiAwKSAmJiBidHJmc19oZWFkZXJfbnJpdGVtcyhiKSA+PQorCSAgICBCVFJGU19OT0RFUFRSU19QRVJfQkxPQ0socm9vdCkgLSAzKSB7CisJCWludCBzcmV0OworCisJCXNyZXQgPSByZWFkYV9mb3JfYmFsYW5jZShyb290LCBwLCBsZXZlbCk7CisJCWlmIChzcmV0KQorCQkJZ290byBhZ2FpbjsKKworCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwKTsKKwkJc3JldCA9IHNwbGl0X25vZGUodHJhbnMsIHJvb3QsIHAsIGxldmVsKTsKKwkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwLCBOVUxMKTsKKworCQlCVUdfT04oc3JldCA+IDApOworCQlpZiAoc3JldCkgeworCQkJcmV0ID0gc3JldDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQliID0gcC0+bm9kZXNbbGV2ZWxdOworCX0gZWxzZSBpZiAoaW5zX2xlbiA8IDAgJiYgYnRyZnNfaGVhZGVyX25yaXRlbXMoYikgPAorCQkgICBCVFJGU19OT0RFUFRSU19QRVJfQkxPQ0socm9vdCkgLyA0KSB7CisJCWludCBzcmV0OworCisJCXNyZXQgPSByZWFkYV9mb3JfYmFsYW5jZShyb290LCBwLCBsZXZlbCk7CisJCWlmIChzcmV0KQorCQkJZ290byBhZ2FpbjsKKworCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwKTsKKwkJc3JldCA9IGJhbGFuY2VfbGV2ZWwodHJhbnMsIHJvb3QsIHAsIGxldmVsKTsKKwkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwLCBOVUxMKTsKKworCQlpZiAoc3JldCkgeworCQkJcmV0ID0gc3JldDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQliID0gcC0+bm9kZXNbbGV2ZWxdOworCQlpZiAoIWIpIHsKKwkJCWJ0cmZzX3JlbGVhc2VfcGF0aChOVUxMLCBwKTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwkJQlVHX09OKGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGIpID09IDEpOworCX0KKwlyZXR1cm4gMDsKKworYWdhaW46CisJcmV0ID0gLUVBR0FJTjsKK2RvbmU6CisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIGxvb2sgZm9yIGtleSBpbiB0aGUgdHJlZS4gIHBhdGggaXMgZmlsbGVkIGluIHdpdGggbm9kZXMgYWxvbmcgdGhlIHdheQogICogaWYga2V5IGlzIGZvdW5kLCB3ZSByZXR1cm4gemVybyBhbmQgeW91IGNhbiBmaW5kIHRoZSBpdGVtIGluIHRoZSBsZWFmCiAgKiBsZXZlbCBvZiB0aGUgcGF0aCAobGV2ZWwgMCkKQEAgLTE0ODIsMTcgKzE1NzUsMTEgQEAKIAkJICAgICAgaW5zX2xlbiwgaW50IGNvdykKIHsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYjsKLQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqdG1wOwogCWludCBzbG90OwogCWludCByZXQ7CiAJaW50IGxldmVsOwotCWludCBzaG91bGRfcmVhZGEgPSBwLT5yZWFkYTsKIAlpbnQgbG93ZXN0X3VubG9jayA9IDE7Ci0JaW50IGJsb2Nrc2l6ZTsKIAl1OCBsb3dlc3RfbGV2ZWwgPSAwOwotCXU2NCBibG9ja25yOwotCXU2NCBnZW47Ci0Jc3RydWN0IGJ0cmZzX2tleSBwcmVhbGxvY19ibG9jazsKIAogCWxvd2VzdF9sZXZlbCA9IHAtPmxvd2VzdF9sZXZlbDsKIAlXQVJOX09OKGxvd2VzdF9sZXZlbCAmJiBpbnNfbGVuID4gMCk7CkBAIC0xNTAxLDggKzE1ODgsNiBAQAogCWlmIChpbnNfbGVuIDwgMCkKIAkJbG93ZXN0X3VubG9jayA9IDI7CiAKLQlwcmVhbGxvY19ibG9jay5vYmplY3RpZCA9IDA7Ci0KIGFnYWluOgogCWlmIChwLT5za2lwX2xvY2tpbmcpCiAJCWIgPSBidHJmc19yb290X25vZGUocm9vdCk7CkBAIC0xNTIzLDUwICsxNjA4LDIxIEBACiAJCWlmIChjb3cpIHsKIAkJCWludCB3cmV0OwogCi0JCQkvKiBpcyBhIGNvdyBvbiB0aGlzIGJsb2NrIG5vdCByZXF1aXJlZCAqLworCQkJLyoKKwkJCSAqIGlmIHdlIGRvbid0IHJlYWxseSBuZWVkIHRvIGNvdyB0aGlzIGJsb2NrCisJCQkgKiB0aGVuIHdlIGRvbid0IHdhbnQgdG8gc2V0IHRoZSBwYXRoIGJsb2NraW5nLAorCQkJICogc28gd2UgdGVzdCBpdCBoZXJlCisJCQkgKi8KIAkJCWlmIChidHJmc19oZWFkZXJfZ2VuZXJhdGlvbihiKSA9PSB0cmFucy0+dHJhbnNpZCAmJgogCQkJICAgIGJ0cmZzX2hlYWRlcl9vd25lcihiKSA9PSByb290LT5yb290X2tleS5vYmplY3RpZCAmJgogCQkJICAgICFidHJmc19oZWFkZXJfZmxhZyhiLCBCVFJGU19IRUFERVJfRkxBR19XUklUVEVOKSkgewogCQkJCWdvdG8gY293X2RvbmU7CiAJCQl9Ci0KLQkJCS8qIG9rLCB3ZSBoYXZlIHRvIGNvdywgaXMgb3VyIG9sZCBwcmVhbGxvYyB0aGUgcmlnaHQKLQkJCSAqIHNpemU/Ci0JCQkgKi8KLQkJCWlmIChwcmVhbGxvY19ibG9jay5vYmplY3RpZCAmJgotCQkJICAgIHByZWFsbG9jX2Jsb2NrLm9mZnNldCAhPSBiLT5sZW4pIHsKLQkJCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcCk7Ci0JCQkJYnRyZnNfZnJlZV9yZXNlcnZlZF9leHRlbnQocm9vdCwKLQkJCQkJICAgcHJlYWxsb2NfYmxvY2sub2JqZWN0aWQsCi0JCQkJCSAgIHByZWFsbG9jX2Jsb2NrLm9mZnNldCk7Ci0JCQkJcHJlYWxsb2NfYmxvY2sub2JqZWN0aWQgPSAwOwotCQkJCWdvdG8gYWdhaW47Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBmb3IgaGlnaGVyIGxldmVsIGJsb2NrcywgdHJ5IG5vdCB0byBhbGxvY2F0ZSBibG9ja3MKLQkJCSAqIHdpdGggdGhlIGJsb2NrIGFuZCB0aGUgcGFyZW50IGxvY2tzIGhlbGQuCi0JCQkgKi8KLQkJCWlmIChsZXZlbCA+IDAgJiYgIXByZWFsbG9jX2Jsb2NrLm9iamVjdGlkKSB7Ci0JCQkJdTMyIHNpemUgPSBiLT5sZW47Ci0JCQkJdTY0IGhpbnQgPSBiLT5zdGFydDsKLQotCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwKTsKLQkJCQlyZXQgPSBidHJmc19yZXNlcnZlX2V4dGVudCh0cmFucywgcm9vdCwKLQkJCQkJCQkgICBzaXplLCBzaXplLCAwLAotCQkJCQkJCSAgIGhpbnQsICh1NjQpLTEsCi0JCQkJCQkJICAgJnByZWFsbG9jX2Jsb2NrLCAwKTsKLQkJCQlCVUdfT04ocmV0KTsKLQkJCQlnb3RvIGFnYWluOwotCQkJfQotCiAJCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwKTsKIAogCQkJd3JldCA9IGJ0cmZzX2Nvd19ibG9jayh0cmFucywgcm9vdCwgYiwKIAkJCQkJICAgICAgIHAtPm5vZGVzW2xldmVsICsgMV0sCi0JCQkJCSAgICAgICBwLT5zbG90c1tsZXZlbCArIDFdLAotCQkJCQkgICAgICAgJmIsIHByZWFsbG9jX2Jsb2NrLm9iamVjdGlkKTsKLQkJCXByZWFsbG9jX2Jsb2NrLm9iamVjdGlkID0gMDsKKwkJCQkJICAgICAgIHAtPnNsb3RzW2xldmVsICsgMV0sICZiKTsKIAkJCWlmICh3cmV0KSB7CiAJCQkJZnJlZV9leHRlbnRfYnVmZmVyKGIpOwogCQkJCXJldCA9IHdyZXQ7CkBAIC0xNjExLDUxICsxNjY3LDE1IEBACiAJCQlpZiAocmV0ICYmIHNsb3QgPiAwKQogCQkJCXNsb3QgLT0gMTsKIAkJCXAtPnNsb3RzW2xldmVsXSA9IHNsb3Q7Ci0JCQlpZiAoKHAtPnNlYXJjaF9mb3Jfc3BsaXQgfHwgaW5zX2xlbiA+IDApICYmCi0JCQkgICAgYnRyZnNfaGVhZGVyX25yaXRlbXMoYikgPj0KLQkJCSAgICBCVFJGU19OT0RFUFRSU19QRVJfQkxPQ0socm9vdCkgLSAzKSB7Ci0JCQkJaW50IHNyZXQ7CisJCQlyZXQgPSBzZXR1cF9ub2Rlc19mb3Jfc2VhcmNoKHRyYW5zLCByb290LCBwLCBiLCBsZXZlbCwKKwkJCQkJCSAgICAgaW5zX2xlbik7CisJCQlpZiAocmV0ID09IC1FQUdBSU4pCisJCQkJZ290byBhZ2FpbjsKKwkJCWVsc2UgaWYgKHJldCkKKwkJCQlnb3RvIGRvbmU7CisJCQliID0gcC0+bm9kZXNbbGV2ZWxdOworCQkJc2xvdCA9IHAtPnNsb3RzW2xldmVsXTsKIAotCQkJCXNyZXQgPSByZWFkYV9mb3JfYmFsYW5jZShyb290LCBwLCBsZXZlbCk7Ci0JCQkJaWYgKHNyZXQpCi0JCQkJCWdvdG8gYWdhaW47Ci0KLQkJCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwKTsKLQkJCQlzcmV0ID0gc3BsaXRfbm9kZSh0cmFucywgcm9vdCwgcCwgbGV2ZWwpOwotCQkJCWJ0cmZzX2NsZWFyX3BhdGhfYmxvY2tpbmcocCwgTlVMTCk7Ci0KLQkJCQlCVUdfT04oc3JldCA+IDApOwotCQkJCWlmIChzcmV0KSB7Ci0JCQkJCXJldCA9IHNyZXQ7Ci0JCQkJCWdvdG8gZG9uZTsKLQkJCQl9Ci0JCQkJYiA9IHAtPm5vZGVzW2xldmVsXTsKLQkJCQlzbG90ID0gcC0+c2xvdHNbbGV2ZWxdOwotCQkJfSBlbHNlIGlmIChpbnNfbGVuIDwgMCAmJgotCQkJCSAgIGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGIpIDwKLQkJCQkgICBCVFJGU19OT0RFUFRSU19QRVJfQkxPQ0socm9vdCkgLyA0KSB7Ci0JCQkJaW50IHNyZXQ7Ci0KLQkJCQlzcmV0ID0gcmVhZGFfZm9yX2JhbGFuY2Uocm9vdCwgcCwgbGV2ZWwpOwotCQkJCWlmIChzcmV0KQotCQkJCQlnb3RvIGFnYWluOwotCi0JCQkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocCk7Ci0JCQkJc3JldCA9IGJhbGFuY2VfbGV2ZWwodHJhbnMsIHJvb3QsIHAsIGxldmVsKTsKLQkJCQlidHJmc19jbGVhcl9wYXRoX2Jsb2NraW5nKHAsIE5VTEwpOwotCi0JCQkJaWYgKHNyZXQpIHsKLQkJCQkJcmV0ID0gc3JldDsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KLQkJCQliID0gcC0+bm9kZXNbbGV2ZWxdOwotCQkJCWlmICghYikgewotCQkJCQlidHJmc19yZWxlYXNlX3BhdGgoTlVMTCwgcCk7Ci0JCQkJCWdvdG8gYWdhaW47Ci0JCQkJfQotCQkJCXNsb3QgPSBwLT5zbG90c1tsZXZlbF07Ci0JCQkJQlVHX09OKGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGIpID09IDEpOwotCQkJfQogCQkJdW5sb2NrX3VwKHAsIGxldmVsLCBsb3dlc3RfdW5sb2NrKTsKIAogCQkJLyogdGhpcyBpcyBvbmx5IHRydWUgd2hpbGUgZHJvcHBpbmcgYSBzbmFwc2hvdCAqLwpAQCAtMTY2NCw0NCArMTY4NCwxMSBAQAogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAotCQkJYmxvY2tuciA9IGJ0cmZzX25vZGVfYmxvY2twdHIoYiwgc2xvdCk7Ci0JCQlnZW4gPSBidHJmc19ub2RlX3B0cl9nZW5lcmF0aW9uKGIsIHNsb3QpOwotCQkJYmxvY2tzaXplID0gYnRyZnNfbGV2ZWxfc2l6ZShyb290LCBsZXZlbCAtIDEpOworCQkJcmV0ID0gcmVhZF9ibG9ja19mb3Jfc2VhcmNoKHRyYW5zLCByb290LCBwLAorCQkJCQkJICAgICZiLCBsZXZlbCwgc2xvdCwga2V5KTsKKwkJCWlmIChyZXQgPT0gLUVBR0FJTikKKwkJCQlnb3RvIGFnYWluOwogCi0JCQl0bXAgPSBidHJmc19maW5kX3RyZWVfYmxvY2socm9vdCwgYmxvY2tuciwgYmxvY2tzaXplKTsKLQkJCWlmICh0bXAgJiYgYnRyZnNfYnVmZmVyX3VwdG9kYXRlKHRtcCwgZ2VuKSkgewotCQkJCWIgPSB0bXA7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogcmVkdWNlIGxvY2sgY29udGVudGlvbiBhdCBoaWdoIGxldmVscwotCQkJCSAqIG9mIHRoZSBidHJlZSBieSBkcm9wcGluZyBsb2NrcyBiZWZvcmUKLQkJCQkgKiB3ZSByZWFkLgotCQkJCSAqLwotCQkJCWlmIChsZXZlbCA+IDApIHsKLQkJCQkJYnRyZnNfcmVsZWFzZV9wYXRoKE5VTEwsIHApOwotCQkJCQlpZiAodG1wKQotCQkJCQkJZnJlZV9leHRlbnRfYnVmZmVyKHRtcCk7Ci0JCQkJCWlmIChzaG91bGRfcmVhZGEpCi0JCQkJCQlyZWFkYV9mb3Jfc2VhcmNoKHJvb3QsIHAsCi0JCQkJCQkJCSBsZXZlbCwgc2xvdCwKLQkJCQkJCQkJIGtleS0+b2JqZWN0aWQpOwotCi0JCQkJCXRtcCA9IHJlYWRfdHJlZV9ibG9jayhyb290LCBibG9ja25yLAotCQkJCQkJCSBibG9ja3NpemUsIGdlbik7Ci0JCQkJCWlmICh0bXApCi0JCQkJCQlmcmVlX2V4dGVudF9idWZmZXIodG1wKTsKLQkJCQkJZ290byBhZ2FpbjsKLQkJCQl9IGVsc2UgewotCQkJCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwKTsKLQkJCQkJaWYgKHRtcCkKLQkJCQkJCWZyZWVfZXh0ZW50X2J1ZmZlcih0bXApOwotCQkJCQlpZiAoc2hvdWxkX3JlYWRhKQotCQkJCQkJcmVhZGFfZm9yX3NlYXJjaChyb290LCBwLAotCQkJCQkJCQkgbGV2ZWwsIHNsb3QsCi0JCQkJCQkJCSBrZXktPm9iamVjdGlkKTsKLQkJCQkJYiA9IHJlYWRfbm9kZV9zbG90KHJvb3QsIGIsIHNsb3QpOwotCQkJCX0KLQkJCX0KIAkJCWlmICghcC0+c2tpcF9sb2NraW5nKSB7CiAJCQkJaW50IGxyZXQ7CiAKQEAgLTE3NDIsMTIgKzE3MjksOCBAQAogCSAqIHdlIGRvbid0IHJlYWxseSBrbm93IHdoYXQgdGhleSBwbGFuIG9uIGRvaW5nIHdpdGggdGhlIHBhdGgKIAkgKiBmcm9tIGhlcmUgb24sIHNvIGZvciBub3cganVzdCBtYXJrIGl0IGFzIGJsb2NraW5nCiAJICovCi0JYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocCk7Ci0JaWYgKHByZWFsbG9jX2Jsb2NrLm9iamVjdGlkKSB7Ci0JCWJ0cmZzX2ZyZWVfcmVzZXJ2ZWRfZXh0ZW50KHJvb3QsCi0JCQkgICBwcmVhbGxvY19ibG9jay5vYmplY3RpZCwKLQkJCSAgIHByZWFsbG9jX2Jsb2NrLm9mZnNldCk7Ci0JfQorCWlmICghcC0+bGVhdmVfc3Bpbm5pbmcpCisJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHApOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE3NjgsNyArMTc1MSw3IEBACiAJaW50IHJldDsKIAogCWViID0gYnRyZnNfbG9ja19yb290X25vZGUocm9vdCk7Ci0JcmV0ID0gYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCBlYiwgTlVMTCwgMCwgJmViLCAwKTsKKwlyZXQgPSBidHJmc19jb3dfYmxvY2sodHJhbnMsIHJvb3QsIGViLCBOVUxMLCAwLCAmZWIpOwogCUJVR19PTihyZXQpOwogCiAJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcoZWIpOwpAQCAtMTgyNiw3ICsxODA5LDcgQEAKIAkJCX0KIAogCQkJcmV0ID0gYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCBlYiwgcGFyZW50LCBzbG90LAotCQkJCQkgICAgICAmZWIsIDApOworCQkJCQkgICAgICAmZWIpOwogCQkJQlVHX09OKHJldCk7CiAKIAkJCWlmIChyb290LT5yb290X2tleS5vYmplY3RpZCA9PQpAQCAtMjEzOSw3ICsyMTIyLDcgQEAKIAlzcGluX3VubG9jaygmcm9vdC0+bm9kZV9sb2NrKTsKIAogCXJldCA9IGJ0cmZzX3VwZGF0ZV9leHRlbnRfcmVmKHRyYW5zLCByb290LCBsb3dlci0+c3RhcnQsCi0JCQkJICAgICAgbG93ZXItPnN0YXJ0LCBjLT5zdGFydCwKKwkJCQkgICAgICBsb3dlci0+bGVuLCBsb3dlci0+c3RhcnQsIGMtPnN0YXJ0LAogCQkJCSAgICAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAogCQkJCSAgICAgIHRyYW5zLT50cmFuc2lkLCBsZXZlbCAtIDEpOwogCUJVR19PTihyZXQpOwpAQCAtMjE3NCw4ICsyMTU3LDcgQEAKIAlCVUdfT04oIXBhdGgtPm5vZGVzW2xldmVsXSk7CiAJbG93ZXIgPSBwYXRoLT5ub2Rlc1tsZXZlbF07CiAJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxvd2VyKTsKLQlpZiAoc2xvdCA+IG5yaXRlbXMpCi0JCUJVRygpOworCUJVR19PTihzbG90ID4gbnJpdGVtcyk7CiAJaWYgKG5yaXRlbXMgPT0gQlRSRlNfTk9ERVBUUlNfUEVSX0JMT0NLKHJvb3QpKQogCQlCVUcoKTsKIAlpZiAoc2xvdCAhPSBucml0ZW1zKSB7CkBAIC0yMjIxLDcgKzIyMDMsNyBAQAogCQlyZXQgPSBpbnNlcnRfbmV3X3Jvb3QodHJhbnMsIHJvb3QsIHBhdGgsIGxldmVsICsgMSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCX0gZWxzZSB7CisJfSBlbHNlIGlmICghdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnMuZmx1c2hpbmcpIHsKIAkJcmV0ID0gcHVzaF9ub2Rlc19mb3JfaW5zZXJ0KHRyYW5zLCByb290LCBwYXRoLCBsZXZlbCk7CiAJCWMgPSBwYXRoLT5ub2Rlc1tsZXZlbF07CiAJCWlmICghcmV0ICYmIGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGMpIDwKQEAgLTIzMjksNjYgKzIzMTEsMjcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogcHVzaCBzb21lIGRhdGEgaW4gdGhlIHBhdGggbGVhZiB0byB0aGUgcmlnaHQsIHRyeWluZyB0byBmcmVlIHVwIGF0Ci0gKiBsZWFzdCBkYXRhX3NpemUgYnl0ZXMuICByZXR1cm5zIHplcm8gaWYgdGhlIHB1c2ggd29ya2VkLCBub256ZXJvIG90aGVyd2lzZQotICoKLSAqIHJldHVybnMgMSBpZiB0aGUgcHVzaCBmYWlsZWQgYmVjYXVzZSB0aGUgb3RoZXIgbm9kZSBkaWRuJ3QgaGF2ZSBlbm91Z2gKLSAqIHJvb20sIDAgaWYgZXZlcnl0aGluZyB3b3JrZWQgb3V0IGFuZCA8IDAgaWYgdGhlcmUgd2VyZSBtYWpvciBlcnJvcnMuCi0gKi8KLXN0YXRpYyBpbnQgcHVzaF9sZWFmX3JpZ2h0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCBzdHJ1Y3QgYnRyZnNfcm9vdAotCQkJICAgKnJvb3QsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgZGF0YV9zaXplLAotCQkJICAgaW50IGVtcHR5KQorc3RhdGljIG5vaW5saW5lIGludCBfX3B1c2hfbGVhZl9yaWdodChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQkgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgICAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKKwkJCQkgICAgICBpbnQgZGF0YV9zaXplLCBpbnQgZW1wdHksCisJCQkJICAgICAgc3RydWN0IGV4dGVudF9idWZmZXIgKnJpZ2h0LAorCQkJCSAgICAgIGludCBmcmVlX3NwYWNlLCB1MzIgbGVmdF9ucml0ZW1zKQogewogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWZ0ID0gcGF0aC0+bm9kZXNbMF07Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKnJpZ2h0OwotCXN0cnVjdCBleHRlbnRfYnVmZmVyICp1cHBlcjsKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqdXBwZXIgPSBwYXRoLT5ub2Rlc1sxXTsKIAlzdHJ1Y3QgYnRyZnNfZGlza19rZXkgZGlza19rZXk7CiAJaW50IHNsb3Q7CiAJdTMyIGk7Ci0JaW50IGZyZWVfc3BhY2U7CiAJaW50IHB1c2hfc3BhY2UgPSAwOwogCWludCBwdXNoX2l0ZW1zID0gMDsKIAlzdHJ1Y3QgYnRyZnNfaXRlbSAqaXRlbTsKLQl1MzIgbGVmdF9ucml0ZW1zOwogCXUzMiBucjsKIAl1MzIgcmlnaHRfbnJpdGVtczsKIAl1MzIgZGF0YV9lbmQ7CiAJdTMyIHRoaXNfaXRlbV9zaXplOwogCWludCByZXQ7CiAKLQlzbG90ID0gcGF0aC0+c2xvdHNbMV07Ci0JaWYgKCFwYXRoLT5ub2Rlc1sxXSkKLQkJcmV0dXJuIDE7Ci0KLQl1cHBlciA9IHBhdGgtPm5vZGVzWzFdOwotCWlmIChzbG90ID49IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHVwcGVyKSAtIDEpCi0JCXJldHVybiAxOwotCi0JYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKHBhdGgtPm5vZGVzWzFdKTsKLQotCXJpZ2h0ID0gcmVhZF9ub2RlX3Nsb3Qocm9vdCwgdXBwZXIsIHNsb3QgKyAxKTsKLQlidHJmc190cmVlX2xvY2socmlnaHQpOwotCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKHJpZ2h0KTsKLQotCWZyZWVfc3BhY2UgPSBidHJmc19sZWFmX2ZyZWVfc3BhY2Uocm9vdCwgcmlnaHQpOwotCWlmIChmcmVlX3NwYWNlIDwgZGF0YV9zaXplKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQkvKiBjb3cgYW5kIGRvdWJsZSBjaGVjayAqLwotCXJldCA9IGJ0cmZzX2Nvd19ibG9jayh0cmFucywgcm9vdCwgcmlnaHQsIHVwcGVyLAotCQkJICAgICAgc2xvdCArIDEsICZyaWdodCwgMCk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0JZnJlZV9zcGFjZSA9IGJ0cmZzX2xlYWZfZnJlZV9zcGFjZShyb290LCByaWdodCk7Ci0JaWYgKGZyZWVfc3BhY2UgPCBkYXRhX3NpemUpCi0JCWdvdG8gb3V0X3VubG9jazsKLQotCWxlZnRfbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlZnQpOwotCWlmIChsZWZ0X25yaXRlbXMgPT0gMCkKLQkJZ290byBvdXRfdW5sb2NrOwotCiAJaWYgKGVtcHR5KQogCQluciA9IDA7CiAJZWxzZQpAQCAtMjM5Nyw2ICsyMzQwLDcgQEAKIAlpZiAocGF0aC0+c2xvdHNbMF0gPj0gbGVmdF9ucml0ZW1zKQogCQlwdXNoX3NwYWNlICs9IGRhdGFfc2l6ZTsKIAorCXNsb3QgPSBwYXRoLT5zbG90c1sxXTsKIAlpID0gbGVmdF9ucml0ZW1zIC0gMTsKIAl3aGlsZSAoaSA+PSBucikgewogCQlpdGVtID0gYnRyZnNfaXRlbV9ucihsZWZ0LCBpKTsKQEAgLTI1MjgsMjQgKzI0NzIsODIgQEAKIH0KIAogLyoKKyAqIHB1c2ggc29tZSBkYXRhIGluIHRoZSBwYXRoIGxlYWYgdG8gdGhlIHJpZ2h0LCB0cnlpbmcgdG8gZnJlZSB1cCBhdAorICogbGVhc3QgZGF0YV9zaXplIGJ5dGVzLiAgcmV0dXJucyB6ZXJvIGlmIHRoZSBwdXNoIHdvcmtlZCwgbm9uemVybyBvdGhlcndpc2UKKyAqCisgKiByZXR1cm5zIDEgaWYgdGhlIHB1c2ggZmFpbGVkIGJlY2F1c2UgdGhlIG90aGVyIG5vZGUgZGlkbid0IGhhdmUgZW5vdWdoCisgKiByb29tLCAwIGlmIGV2ZXJ5dGhpbmcgd29ya2VkIG91dCBhbmQgPCAwIGlmIHRoZXJlIHdlcmUgbWFqb3IgZXJyb3JzLgorICovCitzdGF0aWMgaW50IHB1c2hfbGVhZl9yaWdodChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QKKwkJCSAgICpyb290LCBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwgaW50IGRhdGFfc2l6ZSwKKwkJCSAgIGludCBlbXB0eSkKK3sKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVmdCA9IHBhdGgtPm5vZGVzWzBdOworCXN0cnVjdCBleHRlbnRfYnVmZmVyICpyaWdodDsKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqdXBwZXI7CisJaW50IHNsb3Q7CisJaW50IGZyZWVfc3BhY2U7CisJdTMyIGxlZnRfbnJpdGVtczsKKwlpbnQgcmV0OworCisJaWYgKCFwYXRoLT5ub2Rlc1sxXSkKKwkJcmV0dXJuIDE7CisKKwlzbG90ID0gcGF0aC0+c2xvdHNbMV07CisJdXBwZXIgPSBwYXRoLT5ub2Rlc1sxXTsKKwlpZiAoc2xvdCA+PSBidHJmc19oZWFkZXJfbnJpdGVtcyh1cHBlcikgLSAxKQorCQlyZXR1cm4gMTsKKworCWJ0cmZzX2Fzc2VydF90cmVlX2xvY2tlZChwYXRoLT5ub2Rlc1sxXSk7CisKKwlyaWdodCA9IHJlYWRfbm9kZV9zbG90KHJvb3QsIHVwcGVyLCBzbG90ICsgMSk7CisJYnRyZnNfdHJlZV9sb2NrKHJpZ2h0KTsKKwlidHJmc19zZXRfbG9ja19ibG9ja2luZyhyaWdodCk7CisKKwlmcmVlX3NwYWNlID0gYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIHJpZ2h0KTsKKwlpZiAoZnJlZV9zcGFjZSA8IGRhdGFfc2l6ZSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyogY293IGFuZCBkb3VibGUgY2hlY2sgKi8KKwlyZXQgPSBidHJmc19jb3dfYmxvY2sodHJhbnMsIHJvb3QsIHJpZ2h0LCB1cHBlciwKKwkJCSAgICAgIHNsb3QgKyAxLCAmcmlnaHQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWZyZWVfc3BhY2UgPSBidHJmc19sZWFmX2ZyZWVfc3BhY2Uocm9vdCwgcmlnaHQpOworCWlmIChmcmVlX3NwYWNlIDwgZGF0YV9zaXplKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlsZWZ0X25yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWZ0KTsKKwlpZiAobGVmdF9ucml0ZW1zID09IDApCisJCWdvdG8gb3V0X3VubG9jazsKKworCXJldHVybiBfX3B1c2hfbGVhZl9yaWdodCh0cmFucywgcm9vdCwgcGF0aCwgZGF0YV9zaXplLCBlbXB0eSwKKwkJCQlyaWdodCwgZnJlZV9zcGFjZSwgbGVmdF9ucml0ZW1zKTsKK291dF91bmxvY2s6CisJYnRyZnNfdHJlZV91bmxvY2socmlnaHQpOworCWZyZWVfZXh0ZW50X2J1ZmZlcihyaWdodCk7CisJcmV0dXJuIDE7Cit9CisKKy8qCiAgKiBwdXNoIHNvbWUgZGF0YSBpbiB0aGUgcGF0aCBsZWFmIHRvIHRoZSBsZWZ0LCB0cnlpbmcgdG8gZnJlZSB1cCBhdAogICogbGVhc3QgZGF0YV9zaXplIGJ5dGVzLiAgcmV0dXJucyB6ZXJvIGlmIHRoZSBwdXNoIHdvcmtlZCwgbm9uemVybyBvdGhlcndpc2UKICAqLwotc3RhdGljIGludCBwdXNoX2xlYWZfbGVmdChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QKLQkJCSAgKnJvb3QsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgZGF0YV9zaXplLAotCQkJICBpbnQgZW1wdHkpCitzdGF0aWMgbm9pbmxpbmUgaW50IF9fcHVzaF9sZWFmX2xlZnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgZGF0YV9zaXplLAorCQkJCSAgICAgaW50IGVtcHR5LCBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVmdCwKKwkJCQkgICAgIGludCBmcmVlX3NwYWNlLCBpbnQgcmlnaHRfbnJpdGVtcykKIHsKIAlzdHJ1Y3QgYnRyZnNfZGlza19rZXkgZGlza19rZXk7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKnJpZ2h0ID0gcGF0aC0+bm9kZXNbMF07Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKmxlZnQ7CiAJaW50IHNsb3Q7CiAJaW50IGk7Ci0JaW50IGZyZWVfc3BhY2U7CiAJaW50IHB1c2hfc3BhY2UgPSAwOwogCWludCBwdXNoX2l0ZW1zID0gMDsKIAlzdHJ1Y3QgYnRyZnNfaXRlbSAqaXRlbTsKIAl1MzIgb2xkX2xlZnRfbnJpdGVtczsKLQl1MzIgcmlnaHRfbnJpdGVtczsKIAl1MzIgbnI7CiAJaW50IHJldCA9IDA7CiAJaW50IHdyZXQ7CkBAIC0yNTUzLDQxICsyNTU1LDYgQEAKIAl1MzIgb2xkX2xlZnRfaXRlbV9zaXplOwogCiAJc2xvdCA9IHBhdGgtPnNsb3RzWzFdOwotCWlmIChzbG90ID09IDApCi0JCXJldHVybiAxOwotCWlmICghcGF0aC0+bm9kZXNbMV0pCi0JCXJldHVybiAxOwotCi0JcmlnaHRfbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHJpZ2h0KTsKLQlpZiAocmlnaHRfbnJpdGVtcyA9PSAwKQotCQlyZXR1cm4gMTsKLQotCWJ0cmZzX2Fzc2VydF90cmVlX2xvY2tlZChwYXRoLT5ub2Rlc1sxXSk7Ci0KLQlsZWZ0ID0gcmVhZF9ub2RlX3Nsb3Qocm9vdCwgcGF0aC0+bm9kZXNbMV0sIHNsb3QgLSAxKTsKLQlidHJmc190cmVlX2xvY2sobGVmdCk7Ci0JYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcobGVmdCk7Ci0KLQlmcmVlX3NwYWNlID0gYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGxlZnQpOwotCWlmIChmcmVlX3NwYWNlIDwgZGF0YV9zaXplKSB7Ci0JCXJldCA9IDE7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGNvdyBhbmQgZG91YmxlIGNoZWNrICovCi0JcmV0ID0gYnRyZnNfY293X2Jsb2NrKHRyYW5zLCByb290LCBsZWZ0LAotCQkJICAgICAgcGF0aC0+bm9kZXNbMV0sIHNsb3QgLSAxLCAmbGVmdCwgMCk7Ci0JaWYgKHJldCkgewotCQkvKiB3ZSBoaXQgLUVOT1NQQywgYnV0IGl0IGlzbid0IGZhdGFsIGhlcmUgKi8KLQkJcmV0ID0gMTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZnJlZV9zcGFjZSA9IGJ0cmZzX2xlYWZfZnJlZV9zcGFjZShyb290LCBsZWZ0KTsKLQlpZiAoZnJlZV9zcGFjZSA8IGRhdGFfc2l6ZSkgewotCQlyZXQgPSAxOwotCQlnb3RvIG91dDsKLQl9CiAKIAlpZiAoZW1wdHkpCiAJCW5yID0gcmlnaHRfbnJpdGVtczsKQEAgLTI3NTUsMTQ1ICsyNzIyLDg1IEBACiB9CiAKIC8qCisgKiBwdXNoIHNvbWUgZGF0YSBpbiB0aGUgcGF0aCBsZWFmIHRvIHRoZSBsZWZ0LCB0cnlpbmcgdG8gZnJlZSB1cCBhdAorICogbGVhc3QgZGF0YV9zaXplIGJ5dGVzLiAgcmV0dXJucyB6ZXJvIGlmIHRoZSBwdXNoIHdvcmtlZCwgbm9uemVybyBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBwdXNoX2xlYWZfbGVmdChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QKKwkJCSAgKnJvb3QsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLCBpbnQgZGF0YV9zaXplLAorCQkJICBpbnQgZW1wdHkpCit7CisJc3RydWN0IGV4dGVudF9idWZmZXIgKnJpZ2h0ID0gcGF0aC0+bm9kZXNbMF07CisJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlZnQ7CisJaW50IHNsb3Q7CisJaW50IGZyZWVfc3BhY2U7CisJdTMyIHJpZ2h0X25yaXRlbXM7CisJaW50IHJldCA9IDA7CisKKwlzbG90ID0gcGF0aC0+c2xvdHNbMV07CisJaWYgKHNsb3QgPT0gMCkKKwkJcmV0dXJuIDE7CisJaWYgKCFwYXRoLT5ub2Rlc1sxXSkKKwkJcmV0dXJuIDE7CisKKwlyaWdodF9ucml0ZW1zID0gYnRyZnNfaGVhZGVyX25yaXRlbXMocmlnaHQpOworCWlmIChyaWdodF9ucml0ZW1zID09IDApCisJCXJldHVybiAxOworCisJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKHBhdGgtPm5vZGVzWzFdKTsKKworCWxlZnQgPSByZWFkX25vZGVfc2xvdChyb290LCBwYXRoLT5ub2Rlc1sxXSwgc2xvdCAtIDEpOworCWJ0cmZzX3RyZWVfbG9jayhsZWZ0KTsKKwlidHJmc19zZXRfbG9ja19ibG9ja2luZyhsZWZ0KTsKKworCWZyZWVfc3BhY2UgPSBidHJmc19sZWFmX2ZyZWVfc3BhY2Uocm9vdCwgbGVmdCk7CisJaWYgKGZyZWVfc3BhY2UgPCBkYXRhX3NpemUpIHsKKwkJcmV0ID0gMTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogY293IGFuZCBkb3VibGUgY2hlY2sgKi8KKwlyZXQgPSBidHJmc19jb3dfYmxvY2sodHJhbnMsIHJvb3QsIGxlZnQsCisJCQkgICAgICBwYXRoLT5ub2Rlc1sxXSwgc2xvdCAtIDEsICZsZWZ0KTsKKwlpZiAocmV0KSB7CisJCS8qIHdlIGhpdCAtRU5PU1BDLCBidXQgaXQgaXNuJ3QgZmF0YWwgaGVyZSAqLworCQlyZXQgPSAxOworCQlnb3RvIG91dDsKKwl9CisKKwlmcmVlX3NwYWNlID0gYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGxlZnQpOworCWlmIChmcmVlX3NwYWNlIDwgZGF0YV9zaXplKSB7CisJCXJldCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCXJldHVybiBfX3B1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCBkYXRhX3NpemUsCisJCQkgICAgICAgZW1wdHksIGxlZnQsIGZyZWVfc3BhY2UsIHJpZ2h0X25yaXRlbXMpOworb3V0OgorCWJ0cmZzX3RyZWVfdW5sb2NrKGxlZnQpOworCWZyZWVfZXh0ZW50X2J1ZmZlcihsZWZ0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogc3BsaXQgdGhlIHBhdGgncyBsZWFmIGluIHR3bywgbWFraW5nIHN1cmUgdGhlcmUgaXMgYXQgbGVhc3QgZGF0YV9zaXplCiAgKiBhdmFpbGFibGUgZm9yIHRoZSByZXN1bHRpbmcgbGVhZiBsZXZlbCBvZiB0aGUgcGF0aC4KICAqCiAgKiByZXR1cm5zIDAgaWYgYWxsIHdlbnQgd2VsbCBhbmQgPCAwIG9uIGZhaWx1cmUuCiAgKi8KLXN0YXRpYyBub2lubGluZSBpbnQgc3BsaXRfbGVhZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKK3N0YXRpYyBub2lubGluZSBpbnQgY29weV9mb3Jfc3BsaXQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkgICAgICAgc3RydWN0IGJ0cmZzX2tleSAqaW5zX2tleSwKLQkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwgaW50IGRhdGFfc2l6ZSwKLQkJCSAgICAgICBpbnQgZXh0ZW5kKQorCQkJICAgICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAorCQkJICAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICpsLAorCQkJICAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICpyaWdodCwKKwkJCSAgICAgICBpbnQgc2xvdCwgaW50IG1pZCwgaW50IG5yaXRlbXMpCiB7Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKmw7Ci0JdTMyIG5yaXRlbXM7Ci0JaW50IG1pZDsKLQlpbnQgc2xvdDsKLQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqcmlnaHQ7CiAJaW50IGRhdGFfY29weV9zaXplOwogCWludCBydF9kYXRhX29mZjsKIAlpbnQgaTsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgd3JldDsKLQlpbnQgZG91YmxlX3NwbGl0OwotCWludCBudW1fZG91YmxlcyA9IDA7CiAJc3RydWN0IGJ0cmZzX2Rpc2tfa2V5IGRpc2tfa2V5OwogCi0JLyogZmlyc3QgdHJ5IHRvIG1ha2Ugc29tZSByb29tIGJ5IHB1c2hpbmcgbGVmdCBhbmQgcmlnaHQgKi8KLQlpZiAoZGF0YV9zaXplICYmIGluc19rZXktPnR5cGUgIT0gQlRSRlNfRElSX0lURU1fS0VZKSB7Ci0JCXdyZXQgPSBwdXNoX2xlYWZfcmlnaHQodHJhbnMsIHJvb3QsIHBhdGgsIGRhdGFfc2l6ZSwgMCk7Ci0JCWlmICh3cmV0IDwgMCkKLQkJCXJldHVybiB3cmV0OwotCQlpZiAod3JldCkgewotCQkJd3JldCA9IHB1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCBkYXRhX3NpemUsIDApOwotCQkJaWYgKHdyZXQgPCAwKQotCQkJCXJldHVybiB3cmV0OwotCQl9Ci0JCWwgPSBwYXRoLT5ub2Rlc1swXTsKLQotCQkvKiBkaWQgdGhlIHB1c2hlcyB3b3JrPyAqLwotCQlpZiAoYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGwpID49IGRhdGFfc2l6ZSkKLQkJCXJldHVybiAwOwotCX0KLQotCWlmICghcGF0aC0+bm9kZXNbMV0pIHsKLQkJcmV0ID0gaW5zZXJ0X25ld19yb290KHRyYW5zLCByb290LCBwYXRoLCAxKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotYWdhaW46Ci0JZG91YmxlX3NwbGl0ID0gMDsKLQlsID0gcGF0aC0+bm9kZXNbMF07Ci0Jc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwotCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsKTsKLQltaWQgPSAobnJpdGVtcyArIDEpIC8gMjsKLQotCXJpZ2h0ID0gYnRyZnNfYWxsb2NfZnJlZV9ibG9jayh0cmFucywgcm9vdCwgcm9vdC0+bGVhZnNpemUsCi0JCQkJCXBhdGgtPm5vZGVzWzFdLT5zdGFydCwKLQkJCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCi0JCQkJCXRyYW5zLT50cmFuc2lkLCAwLCBsLT5zdGFydCwgMCk7Ci0JaWYgKElTX0VSUihyaWdodCkpIHsKLQkJQlVHX09OKDEpOwotCQlyZXR1cm4gUFRSX0VSUihyaWdodCk7Ci0JfQotCi0JbWVtc2V0X2V4dGVudF9idWZmZXIocmlnaHQsIDAsIDAsIHNpemVvZihzdHJ1Y3QgYnRyZnNfaGVhZGVyKSk7Ci0JYnRyZnNfc2V0X2hlYWRlcl9ieXRlbnIocmlnaHQsIHJpZ2h0LT5zdGFydCk7Ci0JYnRyZnNfc2V0X2hlYWRlcl9nZW5lcmF0aW9uKHJpZ2h0LCB0cmFucy0+dHJhbnNpZCk7Ci0JYnRyZnNfc2V0X2hlYWRlcl9vd25lcihyaWdodCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQpOwotCWJ0cmZzX3NldF9oZWFkZXJfbGV2ZWwocmlnaHQsIDApOwotCXdyaXRlX2V4dGVudF9idWZmZXIocmlnaHQsIHJvb3QtPmZzX2luZm8tPmZzaWQsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpYnRyZnNfaGVhZGVyX2ZzaWQocmlnaHQpLAotCQkJICAgIEJUUkZTX0ZTSURfU0laRSk7Ci0KLQl3cml0ZV9leHRlbnRfYnVmZmVyKHJpZ2h0LCByb290LT5mc19pbmZvLT5jaHVua190cmVlX3V1aWQsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpYnRyZnNfaGVhZGVyX2NodW5rX3RyZWVfdXVpZChyaWdodCksCi0JCQkgICAgQlRSRlNfVVVJRF9TSVpFKTsKLQlpZiAobWlkIDw9IHNsb3QpIHsKLQkJaWYgKG5yaXRlbXMgPT0gMSB8fAotCQkgICAgbGVhZl9zcGFjZV91c2VkKGwsIG1pZCwgbnJpdGVtcyAtIG1pZCkgKyBkYXRhX3NpemUgPgotCQkJQlRSRlNfTEVBRl9EQVRBX1NJWkUocm9vdCkpIHsKLQkJCWlmIChzbG90ID49IG5yaXRlbXMpIHsKLQkJCQlidHJmc19jcHVfa2V5X3RvX2Rpc2soJmRpc2tfa2V5LCBpbnNfa2V5KTsKLQkJCQlidHJmc19zZXRfaGVhZGVyX25yaXRlbXMocmlnaHQsIDApOwotCQkJCXdyZXQgPSBpbnNlcnRfcHRyKHRyYW5zLCByb290LCBwYXRoLAotCQkJCQkJICAmZGlza19rZXksIHJpZ2h0LT5zdGFydCwKLQkJCQkJCSAgcGF0aC0+c2xvdHNbMV0gKyAxLCAxKTsKLQkJCQlpZiAod3JldCkKLQkJCQkJcmV0ID0gd3JldDsKLQotCQkJCWJ0cmZzX3RyZWVfdW5sb2NrKHBhdGgtPm5vZGVzWzBdKTsKLQkJCQlmcmVlX2V4dGVudF9idWZmZXIocGF0aC0+bm9kZXNbMF0pOwotCQkJCXBhdGgtPm5vZGVzWzBdID0gcmlnaHQ7Ci0JCQkJcGF0aC0+c2xvdHNbMF0gPSAwOwotCQkJCXBhdGgtPnNsb3RzWzFdICs9IDE7Ci0JCQkJYnRyZnNfbWFya19idWZmZXJfZGlydHkocmlnaHQpOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCQltaWQgPSBzbG90OwotCQkJaWYgKG1pZCAhPSBucml0ZW1zICYmCi0JCQkgICAgbGVhZl9zcGFjZV91c2VkKGwsIG1pZCwgbnJpdGVtcyAtIG1pZCkgKwotCQkJICAgIGRhdGFfc2l6ZSA+IEJUUkZTX0xFQUZfREFUQV9TSVpFKHJvb3QpKSB7Ci0JCQkJZG91YmxlX3NwbGl0ID0gMTsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChsZWFmX3NwYWNlX3VzZWQobCwgMCwgbWlkKSArIGRhdGFfc2l6ZSA+Ci0JCQlCVFJGU19MRUFGX0RBVEFfU0laRShyb290KSkgewotCQkJaWYgKCFleHRlbmQgJiYgZGF0YV9zaXplICYmIHNsb3QgPT0gMCkgewotCQkJCWJ0cmZzX2NwdV9rZXlfdG9fZGlzaygmZGlza19rZXksIGluc19rZXkpOwotCQkJCWJ0cmZzX3NldF9oZWFkZXJfbnJpdGVtcyhyaWdodCwgMCk7Ci0JCQkJd3JldCA9IGluc2VydF9wdHIodHJhbnMsIHJvb3QsIHBhdGgsCi0JCQkJCQkgICZkaXNrX2tleSwKLQkJCQkJCSAgcmlnaHQtPnN0YXJ0LAotCQkJCQkJICBwYXRoLT5zbG90c1sxXSwgMSk7Ci0JCQkJaWYgKHdyZXQpCi0JCQkJCXJldCA9IHdyZXQ7Ci0JCQkJYnRyZnNfdHJlZV91bmxvY2socGF0aC0+bm9kZXNbMF0pOwotCQkJCWZyZWVfZXh0ZW50X2J1ZmZlcihwYXRoLT5ub2Rlc1swXSk7Ci0JCQkJcGF0aC0+bm9kZXNbMF0gPSByaWdodDsKLQkJCQlwYXRoLT5zbG90c1swXSA9IDA7Ci0JCQkJaWYgKHBhdGgtPnNsb3RzWzFdID09IDApIHsKLQkJCQkJd3JldCA9IGZpeHVwX2xvd19rZXlzKHRyYW5zLCByb290LAotCQkJCQkJICAgICAgcGF0aCwgJmRpc2tfa2V5LCAxKTsKLQkJCQkJaWYgKHdyZXQpCi0JCQkJCQlyZXQgPSB3cmV0OwotCQkJCX0KLQkJCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShyaWdodCk7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0gZWxzZSBpZiAoKGV4dGVuZCB8fCAhZGF0YV9zaXplKSAmJiBzbG90ID09IDApIHsKLQkJCQltaWQgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQltaWQgPSBzbG90OwotCQkJCWlmIChtaWQgIT0gbnJpdGVtcyAmJgotCQkJCSAgICBsZWFmX3NwYWNlX3VzZWQobCwgbWlkLCBucml0ZW1zIC0gbWlkKSArCi0JCQkJICAgIGRhdGFfc2l6ZSA+IEJUUkZTX0xFQUZfREFUQV9TSVpFKHJvb3QpKSB7Ci0JCQkJCWRvdWJsZV9zcGxpdCA9IDE7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQogCW5yaXRlbXMgPSBucml0ZW1zIC0gbWlkOwogCWJ0cmZzX3NldF9oZWFkZXJfbnJpdGVtcyhyaWdodCwgbnJpdGVtcyk7CiAJZGF0YV9jb3B5X3NpemUgPSBidHJmc19pdGVtX2VuZF9ucihsLCBtaWQpIC0gbGVhZl9kYXRhX2VuZChyb290LCBsKTsKQEAgLTI5NTksMTEgKzI4NjYsMTYxIEBACiAKIAlCVUdfT04ocGF0aC0+c2xvdHNbMF0gPCAwKTsKIAorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBzcGxpdCB0aGUgcGF0aCdzIGxlYWYgaW4gdHdvLCBtYWtpbmcgc3VyZSB0aGVyZSBpcyBhdCBsZWFzdCBkYXRhX3NpemUKKyAqIGF2YWlsYWJsZSBmb3IgdGhlIHJlc3VsdGluZyBsZWFmIGxldmVsIG9mIHRoZSBwYXRoLgorICoKKyAqIHJldHVybnMgMCBpZiBhbGwgd2VudCB3ZWxsIGFuZCA8IDAgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIG5vaW5saW5lIGludCBzcGxpdF9sZWFmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgICAgIHN0cnVjdCBidHJmc19rZXkgKmluc19rZXksCisJCQkgICAgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIGludCBkYXRhX3NpemUsCisJCQkgICAgICAgaW50IGV4dGVuZCkKK3sKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbDsKKwl1MzIgbnJpdGVtczsKKwlpbnQgbWlkOworCWludCBzbG90OworCXN0cnVjdCBleHRlbnRfYnVmZmVyICpyaWdodDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgd3JldDsKKwlpbnQgZG91YmxlX3NwbGl0OworCWludCBudW1fZG91YmxlcyA9IDA7CisKKwkvKiBmaXJzdCB0cnkgdG8gbWFrZSBzb21lIHJvb20gYnkgcHVzaGluZyBsZWZ0IGFuZCByaWdodCAqLworCWlmIChkYXRhX3NpemUgJiYgaW5zX2tleS0+dHlwZSAhPSBCVFJGU19ESVJfSVRFTV9LRVkgJiYKKwkgICAgIXRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nKSB7CisJCXdyZXQgPSBwdXNoX2xlYWZfcmlnaHQodHJhbnMsIHJvb3QsIHBhdGgsIGRhdGFfc2l6ZSwgMCk7CisJCWlmICh3cmV0IDwgMCkKKwkJCXJldHVybiB3cmV0OworCQlpZiAod3JldCkgeworCQkJd3JldCA9IHB1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCBkYXRhX3NpemUsIDApOworCQkJaWYgKHdyZXQgPCAwKQorCQkJCXJldHVybiB3cmV0OworCQl9CisJCWwgPSBwYXRoLT5ub2Rlc1swXTsKKworCQkvKiBkaWQgdGhlIHB1c2hlcyB3b3JrPyAqLworCQlpZiAoYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGwpID49IGRhdGFfc2l6ZSkKKwkJCXJldHVybiAwOworCX0KKworCWlmICghcGF0aC0+bm9kZXNbMV0pIHsKKwkJcmV0ID0gaW5zZXJ0X25ld19yb290KHRyYW5zLCByb290LCBwYXRoLCAxKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorYWdhaW46CisJZG91YmxlX3NwbGl0ID0gMDsKKwlsID0gcGF0aC0+bm9kZXNbMF07CisJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOworCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsKTsKKwltaWQgPSAobnJpdGVtcyArIDEpIC8gMjsKKworCXJpZ2h0ID0gYnRyZnNfYWxsb2NfZnJlZV9ibG9jayh0cmFucywgcm9vdCwgcm9vdC0+bGVhZnNpemUsCisJCQkJCXBhdGgtPm5vZGVzWzFdLT5zdGFydCwKKwkJCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCisJCQkJCXRyYW5zLT50cmFuc2lkLCAwLCBsLT5zdGFydCwgMCk7CisJaWYgKElTX0VSUihyaWdodCkpIHsKKwkJQlVHX09OKDEpOworCQlyZXR1cm4gUFRSX0VSUihyaWdodCk7CisJfQorCisJbWVtc2V0X2V4dGVudF9idWZmZXIocmlnaHQsIDAsIDAsIHNpemVvZihzdHJ1Y3QgYnRyZnNfaGVhZGVyKSk7CisJYnRyZnNfc2V0X2hlYWRlcl9ieXRlbnIocmlnaHQsIHJpZ2h0LT5zdGFydCk7CisJYnRyZnNfc2V0X2hlYWRlcl9nZW5lcmF0aW9uKHJpZ2h0LCB0cmFucy0+dHJhbnNpZCk7CisJYnRyZnNfc2V0X2hlYWRlcl9vd25lcihyaWdodCwgcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQpOworCWJ0cmZzX3NldF9oZWFkZXJfbGV2ZWwocmlnaHQsIDApOworCXdyaXRlX2V4dGVudF9idWZmZXIocmlnaHQsIHJvb3QtPmZzX2luZm8tPmZzaWQsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpYnRyZnNfaGVhZGVyX2ZzaWQocmlnaHQpLAorCQkJICAgIEJUUkZTX0ZTSURfU0laRSk7CisKKwl3cml0ZV9leHRlbnRfYnVmZmVyKHJpZ2h0LCByb290LT5mc19pbmZvLT5jaHVua190cmVlX3V1aWQsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpYnRyZnNfaGVhZGVyX2NodW5rX3RyZWVfdXVpZChyaWdodCksCisJCQkgICAgQlRSRlNfVVVJRF9TSVpFKTsKKworCWlmIChtaWQgPD0gc2xvdCkgeworCQlpZiAobnJpdGVtcyA9PSAxIHx8CisJCSAgICBsZWFmX3NwYWNlX3VzZWQobCwgbWlkLCBucml0ZW1zIC0gbWlkKSArIGRhdGFfc2l6ZSA+CisJCQlCVFJGU19MRUFGX0RBVEFfU0laRShyb290KSkgeworCQkJaWYgKHNsb3QgPj0gbnJpdGVtcykgeworCQkJCXN0cnVjdCBidHJmc19kaXNrX2tleSBkaXNrX2tleTsKKworCQkJCWJ0cmZzX2NwdV9rZXlfdG9fZGlzaygmZGlza19rZXksIGluc19rZXkpOworCQkJCWJ0cmZzX3NldF9oZWFkZXJfbnJpdGVtcyhyaWdodCwgMCk7CisJCQkJd3JldCA9IGluc2VydF9wdHIodHJhbnMsIHJvb3QsIHBhdGgsCisJCQkJCQkgICZkaXNrX2tleSwgcmlnaHQtPnN0YXJ0LAorCQkJCQkJICBwYXRoLT5zbG90c1sxXSArIDEsIDEpOworCQkJCWlmICh3cmV0KQorCQkJCQlyZXQgPSB3cmV0OworCisJCQkJYnRyZnNfdHJlZV91bmxvY2socGF0aC0+bm9kZXNbMF0pOworCQkJCWZyZWVfZXh0ZW50X2J1ZmZlcihwYXRoLT5ub2Rlc1swXSk7CisJCQkJcGF0aC0+bm9kZXNbMF0gPSByaWdodDsKKwkJCQlwYXRoLT5zbG90c1swXSA9IDA7CisJCQkJcGF0aC0+c2xvdHNbMV0gKz0gMTsKKwkJCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShyaWdodCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCW1pZCA9IHNsb3Q7CisJCQlpZiAobWlkICE9IG5yaXRlbXMgJiYKKwkJCSAgICBsZWFmX3NwYWNlX3VzZWQobCwgbWlkLCBucml0ZW1zIC0gbWlkKSArCisJCQkgICAgZGF0YV9zaXplID4gQlRSRlNfTEVBRl9EQVRBX1NJWkUocm9vdCkpIHsKKwkJCQlkb3VibGVfc3BsaXQgPSAxOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKGxlYWZfc3BhY2VfdXNlZChsLCAwLCBtaWQpICsgZGF0YV9zaXplID4KKwkJCUJUUkZTX0xFQUZfREFUQV9TSVpFKHJvb3QpKSB7CisJCQlpZiAoIWV4dGVuZCAmJiBkYXRhX3NpemUgJiYgc2xvdCA9PSAwKSB7CisJCQkJc3RydWN0IGJ0cmZzX2Rpc2tfa2V5IGRpc2tfa2V5OworCisJCQkJYnRyZnNfY3B1X2tleV90b19kaXNrKCZkaXNrX2tleSwgaW5zX2tleSk7CisJCQkJYnRyZnNfc2V0X2hlYWRlcl9ucml0ZW1zKHJpZ2h0LCAwKTsKKwkJCQl3cmV0ID0gaW5zZXJ0X3B0cih0cmFucywgcm9vdCwgcGF0aCwKKwkJCQkJCSAgJmRpc2tfa2V5LAorCQkJCQkJICByaWdodC0+c3RhcnQsCisJCQkJCQkgIHBhdGgtPnNsb3RzWzFdLCAxKTsKKwkJCQlpZiAod3JldCkKKwkJCQkJcmV0ID0gd3JldDsKKwkJCQlidHJmc190cmVlX3VubG9jayhwYXRoLT5ub2Rlc1swXSk7CisJCQkJZnJlZV9leHRlbnRfYnVmZmVyKHBhdGgtPm5vZGVzWzBdKTsKKwkJCQlwYXRoLT5ub2Rlc1swXSA9IHJpZ2h0OworCQkJCXBhdGgtPnNsb3RzWzBdID0gMDsKKwkJCQlpZiAocGF0aC0+c2xvdHNbMV0gPT0gMCkgeworCQkJCQl3cmV0ID0gZml4dXBfbG93X2tleXModHJhbnMsIHJvb3QsCisJCQkJCQkgICAgICBwYXRoLCAmZGlza19rZXksIDEpOworCQkJCQlpZiAod3JldCkKKwkJCQkJCXJldCA9IHdyZXQ7CisJCQkJfQorCQkJCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KHJpZ2h0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfSBlbHNlIGlmICgoZXh0ZW5kIHx8ICFkYXRhX3NpemUpICYmIHNsb3QgPT0gMCkgeworCQkJCW1pZCA9IDE7CisJCQl9IGVsc2UgeworCQkJCW1pZCA9IHNsb3Q7CisJCQkJaWYgKG1pZCAhPSBucml0ZW1zICYmCisJCQkJICAgIGxlYWZfc3BhY2VfdXNlZChsLCBtaWQsIG5yaXRlbXMgLSBtaWQpICsKKwkJCQkgICAgZGF0YV9zaXplID4gQlRSRlNfTEVBRl9EQVRBX1NJWkUocm9vdCkpIHsKKwkJCQkJZG91YmxlX3NwbGl0ID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXQgPSBjb3B5X2Zvcl9zcGxpdCh0cmFucywgcm9vdCwgcGF0aCwgbCwgcmlnaHQsIHNsb3QsIG1pZCwgbnJpdGVtcyk7CisJQlVHX09OKHJldCk7CisKIAlpZiAoZG91YmxlX3NwbGl0KSB7CiAJCUJVR19PTihudW1fZG91YmxlcyAhPSAwKTsKIAkJbnVtX2RvdWJsZXMrKzsKIAkJZ290byBhZ2FpbjsKIAl9CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMDIxLDI2ICszMDc4LDI3IEBACiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAorCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHBhdGgpOwogCXJldCA9IHNwbGl0X2xlYWYodHJhbnMsIHJvb3QsICZvcmlnX2tleSwgcGF0aCwKIAkJCSBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pLCAxKTsKIAlwYXRoLT5rZWVwX2xvY2tzID0gMDsKIAlCVUdfT04ocmV0KTsKIAorCWJ0cmZzX3VubG9ja191cF9zYWZlKHBhdGgsIDEpOworCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKKwlCVUdfT04oYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGxlYWYpIDwgc2l6ZW9mKHN0cnVjdCBidHJmc19pdGVtKSk7CisKK3NwbGl0OgogCS8qCiAJICogbWFrZSBzdXJlIGFueSBjaGFuZ2VzIHRvIHRoZSBwYXRoIGZyb20gc3BsaXRfbGVhZiBsZWF2ZSBpdAogCSAqIGluIGEgYmxvY2tpbmcgc3RhdGUKIAkgKi8KIAlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwYXRoKTsKIAotCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKLQlCVUdfT04oYnRyZnNfbGVhZl9mcmVlX3NwYWNlKHJvb3QsIGxlYWYpIDwgc2l6ZW9mKHN0cnVjdCBidHJmc19pdGVtKSk7Ci0KLXNwbGl0OgogCWl0ZW0gPSBidHJmc19pdGVtX25yKGxlYWYsIHBhdGgtPnNsb3RzWzBdKTsKIAlvcmlnX29mZnNldCA9IGJ0cmZzX2l0ZW1fb2Zmc2V0KGxlYWYsIGl0ZW0pOwogCWl0ZW1fc2l6ZSA9IGJ0cmZzX2l0ZW1fc2l6ZShsZWFmLCBpdGVtKTsKIAotCiAJYnVmID0ga21hbGxvYyhpdGVtX3NpemUsIEdGUF9OT0ZTKTsKIAlyZWFkX2V4dGVudF9idWZmZXIobGVhZiwgYnVmLCBidHJmc19pdGVtX3B0cl9vZmZzZXQobGVhZiwKIAkJCSAgICBwYXRoLT5zbG90c1swXSksIGl0ZW1fc2l6ZSk7CkBAIC0zNDQ1LDM5ICszNTAzLDI3IEBACiB9CiAKIC8qCi0gKiBHaXZlbiBhIGtleSBhbmQgc29tZSBkYXRhLCBpbnNlcnQgaXRlbXMgaW50byB0aGUgdHJlZS4KLSAqIFRoaXMgZG9lcyBhbGwgdGhlIHBhdGggaW5pdCByZXF1aXJlZCwgbWFraW5nIHJvb20gaW4gdGhlIHRyZWUgaWYgbmVlZGVkLgorICogdGhpcyBpcyBhIGhlbHBlciBmb3IgYnRyZnNfaW5zZXJ0X2VtcHR5X2l0ZW1zLCB0aGUgbWFpbiBnb2FsIGhlcmUgaXMKKyAqIHRvIHNhdmUgc3RhY2sgZGVwdGggYnkgZG9pbmcgdGhlIGJ1bGsgb2YgdGhlIHdvcmsgaW4gYSBmdW5jdGlvbgorICogdGhhdCBkb2Vzbid0IGNhbGwgYnRyZnNfc2VhcmNoX3Nsb3QKICAqLwotaW50IGJ0cmZzX2luc2VydF9lbXB0eV9pdGVtcyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCSAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKLQkJCSAgICBzdHJ1Y3QgYnRyZnNfa2V5ICpjcHVfa2V5LCB1MzIgKmRhdGFfc2l6ZSwKLQkJCSAgICBpbnQgbnIpCitzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIGludAorc2V0dXBfaXRlbXNfZm9yX2luc2VydChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAorCQkgICAgICBzdHJ1Y3QgYnRyZnNfa2V5ICpjcHVfa2V5LCB1MzIgKmRhdGFfc2l6ZSwKKwkJICAgICAgdTMyIHRvdGFsX2RhdGEsIHUzMiB0b3RhbF9zaXplLCBpbnQgbnIpCiB7Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CiAJc3RydWN0IGJ0cmZzX2l0ZW0gKml0ZW07Ci0JaW50IHJldCA9IDA7Ci0JaW50IHNsb3Q7Ci0JaW50IHNsb3Rfb3JpZzsKIAlpbnQgaTsKIAl1MzIgbnJpdGVtczsKLQl1MzIgdG90YWxfc2l6ZSA9IDA7Ci0JdTMyIHRvdGFsX2RhdGEgPSAwOwogCXVuc2lnbmVkIGludCBkYXRhX2VuZDsKIAlzdHJ1Y3QgYnRyZnNfZGlza19rZXkgZGlza19rZXk7CisJaW50IHJldDsKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVhZjsKKwlpbnQgc2xvdDsKIAotCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQotCQl0b3RhbF9kYXRhICs9IGRhdGFfc2l6ZVtpXTsKLQotCXRvdGFsX3NpemUgPSB0b3RhbF9kYXRhICsgKG5yICogc2l6ZW9mKHN0cnVjdCBidHJmc19pdGVtKSk7Ci0JcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QodHJhbnMsIHJvb3QsIGNwdV9rZXksIHBhdGgsIHRvdGFsX3NpemUsIDEpOwotCWlmIChyZXQgPT0gMCkKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0Jc2xvdF9vcmlnID0gcGF0aC0+c2xvdHNbMF07CiAJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOworCXNsb3QgPSBwYXRoLT5zbG90c1swXTsKIAogCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKTsKIAlkYXRhX2VuZCA9IGxlYWZfZGF0YV9lbmQocm9vdCwgbGVhZik7CkBAIC0zNDg5LDkgKzM1MzUsNiBAQAogCQlCVUcoKTsKIAl9CiAKLQlzbG90ID0gcGF0aC0+c2xvdHNbMF07Ci0JQlVHX09OKHNsb3QgPCAwKTsKLQogCWlmIChzbG90ICE9IG5yaXRlbXMpIHsKIAkJdW5zaWduZWQgaW50IG9sZF9kYXRhID0gYnRyZnNfaXRlbV9lbmRfbnIobGVhZiwgc2xvdCk7CiAKQEAgLTM1NDcsMjEgKzM1OTAsNjAgQEAKIAkJZGF0YV9lbmQgLT0gZGF0YV9zaXplW2ldOwogCQlidHJmc19zZXRfaXRlbV9zaXplKGxlYWYsIGl0ZW0sIGRhdGFfc2l6ZVtpXSk7CiAJfQorCiAJYnRyZnNfc2V0X2hlYWRlcl9ucml0ZW1zKGxlYWYsIG5yaXRlbXMgKyBucik7Ci0JYnRyZnNfbWFya19idWZmZXJfZGlydHkobGVhZik7CiAKIAlyZXQgPSAwOwogCWlmIChzbG90ID09IDApIHsKKwkJc3RydWN0IGJ0cmZzX2Rpc2tfa2V5IGRpc2tfa2V5OwogCQlidHJmc19jcHVfa2V5X3RvX2Rpc2soJmRpc2tfa2V5LCBjcHVfa2V5KTsKIAkJcmV0ID0gZml4dXBfbG93X2tleXModHJhbnMsIHJvb3QsIHBhdGgsICZkaXNrX2tleSwgMSk7CiAJfQorCWJ0cmZzX3VubG9ja191cF9zYWZlKHBhdGgsIDEpOworCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KGxlYWYpOwogCiAJaWYgKGJ0cmZzX2xlYWZfZnJlZV9zcGFjZShyb290LCBsZWFmKSA8IDApIHsKIAkJYnRyZnNfcHJpbnRfbGVhZihyb290LCBsZWFmKTsKIAkJQlVHKCk7CiAJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIGtleSBhbmQgc29tZSBkYXRhLCBpbnNlcnQgaXRlbXMgaW50byB0aGUgdHJlZS4KKyAqIFRoaXMgZG9lcyBhbGwgdGhlIHBhdGggaW5pdCByZXF1aXJlZCwgbWFraW5nIHJvb20gaW4gdGhlIHRyZWUgaWYgbmVlZGVkLgorICovCitpbnQgYnRyZnNfaW5zZXJ0X2VtcHR5X2l0ZW1zKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAorCQkJICAgIHN0cnVjdCBidHJmc19rZXkgKmNwdV9rZXksIHUzMiAqZGF0YV9zaXplLAorCQkJICAgIGludCBucikKK3sKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVhZjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgc2xvdDsKKwlpbnQgaTsKKwl1MzIgdG90YWxfc2l6ZSA9IDA7CisJdTMyIHRvdGFsX2RhdGEgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJCXRvdGFsX2RhdGEgKz0gZGF0YV9zaXplW2ldOworCisJdG90YWxfc2l6ZSA9IHRvdGFsX2RhdGEgKyAobnIgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pKTsKKwlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdCwgY3B1X2tleSwgcGF0aCwgdG90YWxfc2l6ZSwgMSk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gLUVFWElTVDsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlsZWFmID0gcGF0aC0+bm9kZXNbMF07CisJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOworCUJVR19PTihzbG90IDwgMCk7CisKKwlyZXQgPSBzZXR1cF9pdGVtc19mb3JfaW5zZXJ0KHRyYW5zLCByb290LCBwYXRoLCBjcHVfa2V5LCBkYXRhX3NpemUsCisJCQkgICAgICAgdG90YWxfZGF0YSwgdG90YWxfc2l6ZSwgbnIpOworCiBvdXQ6Ci0JYnRyZnNfdW5sb2NrX3VwX3NhZmUocGF0aCwgMSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzc0OSw3ICszODMxLDggQEAKIAkJfQogCiAJCS8qIGRlbGV0ZSB0aGUgbGVhZiBpZiBpdCBpcyBtb3N0bHkgZW1wdHkgKi8KLQkJaWYgKHVzZWQgPCBCVFJGU19MRUFGX0RBVEFfU0laRShyb290KSAvIDQpIHsKKwkJaWYgKHVzZWQgPCBCVFJGU19MRUFGX0RBVEFfU0laRShyb290KSAvIDQgJiYKKwkJICAgICF0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmcy5mbHVzaGluZykgewogCQkJLyogcHVzaF9sZWFmX2xlZnQgZml4ZXMgdGhlIHBhdGguCiAJCQkgKiBtYWtlIHN1cmUgdGhlIHBhdGggc3RpbGwgcG9pbnRzIHRvIG91ciBsZWFmCiAJCQkgKiBmb3IgcG9zc2libGUgY2FsbCB0byBkZWxfcHRyIGJlbG93CkBAIC0zNzU3LDYgKzM4NDAsNyBAQAogCQkJc2xvdCA9IHBhdGgtPnNsb3RzWzFdOwogCQkJZXh0ZW50X2J1ZmZlcl9nZXQobGVhZik7CiAKKwkJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHBhdGgpOwogCQkJd3JldCA9IHB1c2hfbGVhZl9sZWZ0KHRyYW5zLCByb290LCBwYXRoLCAxLCAxKTsKIAkJCWlmICh3cmV0IDwgMCAmJiB3cmV0ICE9IC1FTk9TUEMpCiAJCQkJcmV0ID0gd3JldDsKQEAgLTQwNDIsMjggKzQxMjYsNDQgQEAKIGludCBidHJmc19uZXh0X2xlYWYoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBidHJmc19wYXRoICpwYXRoKQogewogCWludCBzbG90OwotCWludCBsZXZlbCA9IDE7CisJaW50IGxldmVsOwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpjOwotCXN0cnVjdCBleHRlbnRfYnVmZmVyICpuZXh0ID0gTlVMTDsKKwlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbmV4dDsKIAlzdHJ1Y3QgYnRyZnNfa2V5IGtleTsKIAl1MzIgbnJpdGVtczsKIAlpbnQgcmV0OworCWludCBvbGRfc3Bpbm5pbmcgPSBwYXRoLT5sZWF2ZV9zcGlubmluZzsKKwlpbnQgZm9yY2VfYmxvY2tpbmcgPSAwOwogCiAJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHBhdGgtPm5vZGVzWzBdKTsKIAlpZiAobnJpdGVtcyA9PSAwKQogCQlyZXR1cm4gMTsKIAotCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShwYXRoLT5ub2Rlc1swXSwgJmtleSwgbnJpdGVtcyAtIDEpOworCS8qCisJICogd2UgdGFrZSB0aGUgYmxvY2tzIGluIGFuIG9yZGVyIHRoYXQgdXBzZXRzIGxvY2tkZXAuICBVc2luZworCSAqIGJsb2NraW5nIG1vZGUgaXMgdGhlIG9ubHkgd2F5IGFyb3VuZCBpdC4KKwkgKi8KKyNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQworCWZvcmNlX2Jsb2NraW5nID0gMTsKKyNlbmRpZgogCisJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KHBhdGgtPm5vZGVzWzBdLCAma2V5LCBucml0ZW1zIC0gMSk7CithZ2FpbjoKKwlsZXZlbCA9IDE7CisJbmV4dCA9IE5VTEw7CiAJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOworCiAJcGF0aC0+a2VlcF9sb2NrcyA9IDE7CisKKwlpZiAoIWZvcmNlX2Jsb2NraW5nKQorCQlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CisKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCByb290LCAma2V5LCBwYXRoLCAwLCAwKTsKIAlwYXRoLT5rZWVwX2xvY2tzID0gMDsKIAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7CiAJbnJpdGVtcyA9IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKHBhdGgtPm5vZGVzWzBdKTsKIAkvKgogCSAqIGJ5IHJlbGVhc2luZyB0aGUgcGF0aCBhYm92ZSB3ZSBkcm9wcGVkIGFsbCBvdXIgbG9ja3MuICBBIGJhbGFuY2UKQEAgLTQwNzMsMTkgKzQxNzMsMjQgQEAKIAkgKi8KIAlpZiAobnJpdGVtcyA+IDAgJiYgcGF0aC0+c2xvdHNbMF0gPCBucml0ZW1zIC0gMSkgewogCQlwYXRoLT5zbG90c1swXSsrOworCQlyZXQgPSAwOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJd2hpbGUgKGxldmVsIDwgQlRSRlNfTUFYX0xFVkVMKSB7Ci0JCWlmICghcGF0aC0+bm9kZXNbbGV2ZWxdKQotCQkJcmV0dXJuIDE7CisJCWlmICghcGF0aC0+bm9kZXNbbGV2ZWxdKSB7CisJCQlyZXQgPSAxOworCQkJZ290byBkb25lOworCQl9CiAKIAkJc2xvdCA9IHBhdGgtPnNsb3RzW2xldmVsXSArIDE7CiAJCWMgPSBwYXRoLT5ub2Rlc1tsZXZlbF07CiAJCWlmIChzbG90ID49IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGMpKSB7CiAJCQlsZXZlbCsrOwotCQkJaWYgKGxldmVsID09IEJUUkZTX01BWF9MRVZFTCkKLQkJCQlyZXR1cm4gMTsKKwkJCWlmIChsZXZlbCA9PSBCVFJGU19NQVhfTEVWRUwpIHsKKwkJCQlyZXQgPSAxOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTQwOTQsMTYgKzQxOTksMjIgQEAKIAkJCWZyZWVfZXh0ZW50X2J1ZmZlcihuZXh0KTsKIAkJfQogCi0JCS8qIHRoZSBwYXRoIHdhcyBzZXQgdG8gYmxvY2tpbmcgYWJvdmUgKi8KLQkJaWYgKGxldmVsID09IDEgJiYgKHBhdGgtPmxvY2tzWzFdIHx8IHBhdGgtPnNraXBfbG9ja2luZykgJiYKLQkJICAgIHBhdGgtPnJlYWRhKQotCQkJcmVhZGFfZm9yX3NlYXJjaChyb290LCBwYXRoLCBsZXZlbCwgc2xvdCwgMCk7CisJCW5leHQgPSBjOworCQlyZXQgPSByZWFkX2Jsb2NrX2Zvcl9zZWFyY2goTlVMTCwgcm9vdCwgcGF0aCwgJm5leHQsIGxldmVsLAorCQkJCQkgICAgc2xvdCwgJmtleSk7CisJCWlmIChyZXQgPT0gLUVBR0FJTikKKwkJCWdvdG8gYWdhaW47CiAKLQkJbmV4dCA9IHJlYWRfbm9kZV9zbG90KHJvb3QsIGMsIHNsb3QpOwogCQlpZiAoIXBhdGgtPnNraXBfbG9ja2luZykgewotCQkJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKGMpOwotCQkJYnRyZnNfdHJlZV9sb2NrKG5leHQpOwotCQkJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcobmV4dCk7CisJCQlyZXQgPSBidHJmc190cnlfc3Bpbl9sb2NrKG5leHQpOworCQkJaWYgKCFyZXQpIHsKKwkJCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwYXRoKTsKKwkJCQlidHJmc190cmVlX2xvY2sobmV4dCk7CisJCQkJaWYgKCFmb3JjZV9ibG9ja2luZykKKwkJCQkJYnRyZnNfY2xlYXJfcGF0aF9ibG9ja2luZyhwYXRoLCBuZXh0KTsKKwkJCX0KKwkJCWlmIChmb3JjZV9ibG9ja2luZykKKwkJCQlidHJmc19zZXRfbG9ja19ibG9ja2luZyhuZXh0KTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC00MTEzLDI3ICs0MjI0LDQyIEBACiAJCWMgPSBwYXRoLT5ub2Rlc1tsZXZlbF07CiAJCWlmIChwYXRoLT5sb2Nrc1tsZXZlbF0pCiAJCQlidHJmc190cmVlX3VubG9jayhjKTsKKwogCQlmcmVlX2V4dGVudF9idWZmZXIoYyk7CiAJCXBhdGgtPm5vZGVzW2xldmVsXSA9IG5leHQ7CiAJCXBhdGgtPnNsb3RzW2xldmVsXSA9IDA7CiAJCWlmICghcGF0aC0+c2tpcF9sb2NraW5nKQogCQkJcGF0aC0+bG9ja3NbbGV2ZWxdID0gMTsKKwogCQlpZiAoIWxldmVsKQogCQkJYnJlYWs7CiAKLQkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7Ci0JCWlmIChsZXZlbCA9PSAxICYmIHBhdGgtPmxvY2tzWzFdICYmIHBhdGgtPnJlYWRhKQotCQkJcmVhZGFfZm9yX3NlYXJjaChyb290LCBwYXRoLCBsZXZlbCwgc2xvdCwgMCk7Ci0JCW5leHQgPSByZWFkX25vZGVfc2xvdChyb290LCBuZXh0LCAwKTsKKwkJcmV0ID0gcmVhZF9ibG9ja19mb3Jfc2VhcmNoKE5VTEwsIHJvb3QsIHBhdGgsICZuZXh0LCBsZXZlbCwKKwkJCQkJICAgIDAsICZrZXkpOworCQlpZiAocmV0ID09IC1FQUdBSU4pCisJCQlnb3RvIGFnYWluOworCiAJCWlmICghcGF0aC0+c2tpcF9sb2NraW5nKSB7CiAJCQlidHJmc19hc3NlcnRfdHJlZV9sb2NrZWQocGF0aC0+bm9kZXNbbGV2ZWxdKTsKLQkJCWJ0cmZzX3RyZWVfbG9jayhuZXh0KTsKLQkJCWJ0cmZzX3NldF9sb2NrX2Jsb2NraW5nKG5leHQpOworCQkJcmV0ID0gYnRyZnNfdHJ5X3NwaW5fbG9jayhuZXh0KTsKKwkJCWlmICghcmV0KSB7CisJCQkJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7CisJCQkJYnRyZnNfdHJlZV9sb2NrKG5leHQpOworCQkJCWlmICghZm9yY2VfYmxvY2tpbmcpCisJCQkJCWJ0cmZzX2NsZWFyX3BhdGhfYmxvY2tpbmcocGF0aCwgbmV4dCk7CisJCQl9CisJCQlpZiAoZm9yY2VfYmxvY2tpbmcpCisJCQkJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcobmV4dCk7CiAJCX0KIAl9CisJcmV0ID0gMDsKIGRvbmU6CiAJdW5sb2NrX3VwKHBhdGgsIDAsIDEpOwotCXJldHVybiAwOworCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gb2xkX3NwaW5uaW5nOworCWlmICghb2xkX3NwaW5uaW5nKQorCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwYXRoKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9idHJmcy9jdHJlZS5oIGIvZnMvYnRyZnMvY3RyZWUuaAppbmRleCA1ZTFkNGUzLi5hZDk2NDk1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9jdHJlZS5oCisrKyBiL2ZzL2J0cmZzL2N0cmVlLmgKQEAgLTQ1LDYgKzQ1LDEzIEBACiAKICNkZWZpbmUgQlRSRlNfTUFYX0xFVkVMIDgKIAorLyoKKyAqIGZpbGVzIGJpZ2dlciB0aGFuIHRoaXMgZ2V0IHNvbWUgcHJlLWZsdXNoaW5nIHdoZW4gdGhleSBhcmUgYWRkZWQKKyAqIHRvIHRoZSBvcmRlcmVkIG9wZXJhdGlvbnMgbGlzdC4gIFRoYXQgd2F5IHdlIGxpbWl0IHRoZSB0b3RhbAorICogd29yayBkb25lIGJ5IHRoZSBjb21taXQKKyAqLworI2RlZmluZSBCVFJGU19PUkRFUkVEX09QRVJBVElPTlNfRkxVU0hfTElNSVQgKDggKiAxMDI0ICogMTAyNCkKKwogLyogaG9sZHMgcG9pbnRlcnMgdG8gYWxsIG9mIHRoZSB0cmVlIHJvb3RzICovCiAjZGVmaW5lIEJUUkZTX1JPT1RfVFJFRV9PQkpFQ1RJRCAxVUxMCiAKQEAgLTEzNiwxMiArMTQzLDE1IEBACiAjZGVmaW5lIEJUUkZTX0ZUX01BWAkJOQogCiAvKgotICogdGhlIGtleSBkZWZpbmVzIHRoZSBvcmRlciBpbiB0aGUgdHJlZSwgYW5kIHNvIGl0IGFsc28gZGVmaW5lcyAob3B0aW1hbCkKLSAqIGJsb2NrIGxheW91dC4gIG9iamVjdGlkIGNvcnJlc29uZHMgdG8gdGhlIGlub2RlIG51bWJlci4gIFRoZSBmbGFncwotICogdGVsbHMgdXMgdGhpbmdzIGFib3V0IHRoZSBvYmplY3QsIGFuZCBpcyBhIGtpbmQgb2Ygc3RyZWFtIHNlbGVjdG9yLgotICogc28gZm9yIGEgZ2l2ZW4gaW5vZGUsIGtleXMgd2l0aCBmbGFncyBvZiAxIG1pZ2h0IHJlZmVyIHRvIHRoZSBpbm9kZQotICogZGF0YSwgZmxhZ3Mgb2YgMiBtYXkgcG9pbnQgdG8gZmlsZSBkYXRhIGluIHRoZSBidHJlZSBhbmQgZmxhZ3MgPT0gMwotICogbWF5IHBvaW50IHRvIGV4dGVudHMuCisgKiBUaGUga2V5IGRlZmluZXMgdGhlIG9yZGVyIGluIHRoZSB0cmVlLCBhbmQgc28gaXQgYWxzbyBkZWZpbmVzIChvcHRpbWFsKQorICogYmxvY2sgbGF5b3V0LgorICoKKyAqIG9iamVjdGlkIGNvcnJlc3BvbmRzIHRvIHRoZSBpbm9kZSBudW1iZXIuCisgKgorICogdHlwZSB0ZWxscyB1cyB0aGluZ3MgYWJvdXQgdGhlIG9iamVjdCwgYW5kIGlzIGEga2luZCBvZiBzdHJlYW0gc2VsZWN0b3IuCisgKiBzbyBmb3IgYSBnaXZlbiBpbm9kZSwga2V5cyB3aXRoIHR5cGUgb2YgMSBtaWdodCByZWZlciB0byB0aGUgaW5vZGUgZGF0YSwKKyAqIHR5cGUgb2YgMiBtYXkgcG9pbnQgdG8gZmlsZSBkYXRhIGluIHRoZSBidHJlZSBhbmQgdHlwZSA9PSAzIG1heSBwb2ludCB0bworICogZXh0ZW50cy4KICAqCiAgKiBvZmZzZXQgaXMgdGhlIHN0YXJ0aW5nIGJ5dGUgb2Zmc2V0IGZvciB0aGlzIGtleSBpbiB0aGUgc3RyZWFtLgogICoKQEAgLTE5Myw3ICsyMDMsNyBAQAogCiAJLyoKIAkgKiBzdGFydGluZyBieXRlIG9mIHRoaXMgcGFydGl0aW9uIG9uIHRoZSBkZXZpY2UsCi0JICogdG8gYWxsb3dyIGZvciBzdHJpcGUgYWxpZ25tZW50IGluIHRoZSBmdXR1cmUKKwkgKiB0byBhbGxvdyBmb3Igc3RyaXBlIGFsaWdubWVudCBpbiB0aGUgZnV0dXJlCiAJICovCiAJX19sZTY0IHN0YXJ0X29mZnNldDsKIApAQCAtNDAxLDE1ICs0MTEsMTYgQEAKIAlpbnQgbG9ja3NbQlRSRlNfTUFYX0xFVkVMXTsKIAlpbnQgcmVhZGE7CiAJLyoga2VlcCBzb21lIHVwcGVyIGxvY2tzIGFzIHdlIHdhbGsgZG93biAqLwotCWludCBrZWVwX2xvY2tzOwotCWludCBza2lwX2xvY2tpbmc7CiAJaW50IGxvd2VzdF9sZXZlbDsKIAogCS8qCiAJICogc2V0IGJ5IGJ0cmZzX3NwbGl0X2l0ZW0sIHRlbGxzIHNlYXJjaF9zbG90IHRvIGtlZXAgYWxsIGxvY2tzCiAJICogYW5kIHRvIGZvcmNlIGNhbGxzIHRvIGtlZXAgc3BhY2UgaW4gdGhlIG5vZGVzCiAJICovCi0JaW50IHNlYXJjaF9mb3Jfc3BsaXQ7CisJdW5zaWduZWQgaW50IHNlYXJjaF9mb3Jfc3BsaXQ6MTsKKwl1bnNpZ25lZCBpbnQga2VlcF9sb2NrczoxOworCXVuc2lnbmVkIGludCBza2lwX2xvY2tpbmc6MTsKKwl1bnNpZ25lZCBpbnQgbGVhdmVfc3Bpbm5pbmc6MTsKIH07CiAKIC8qCkBAIC02MjUsMTggKzYzNiwzNSBAQAogCXN0cnVjdCByd19zZW1hcGhvcmUgZ3JvdXBzX3NlbTsKIH07CiAKLXN0cnVjdCBidHJmc19mcmVlX3NwYWNlIHsKLQlzdHJ1Y3QgcmJfbm9kZSBieXRlc19pbmRleDsKLQlzdHJ1Y3QgcmJfbm9kZSBvZmZzZXRfaW5kZXg7Ci0JdTY0IG9mZnNldDsKLQl1NjQgYnl0ZXM7CisvKgorICogZnJlZSBjbHVzdGVycyBhcmUgdXNlZCB0byBjbGFpbSBmcmVlIHNwYWNlIGluIHJlbGF0aXZlbHkgbGFyZ2UgY2h1bmtzLAorICogYWxsb3dpbmcgdXMgdG8gZG8gbGVzcyBzZWVreSB3cml0ZXMuICBUaGV5IGFyZSB1c2VkIGZvciBhbGwgbWV0YWRhdGEKKyAqIGFsbG9jYXRpb25zIGFuZCBkYXRhIGFsbG9jYXRpb25zIGluIHNzZCBtb2RlLgorICovCitzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyIHsKKwlzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdCByZWZpbGxfbG9jazsKKwlzdHJ1Y3QgcmJfcm9vdCByb290OworCisJLyogbGFyZ2VzdCBleHRlbnQgaW4gdGhpcyBjbHVzdGVyICovCisJdTY0IG1heF9zaXplOworCisJLyogZmlyc3QgZXh0ZW50IHN0YXJ0aW5nIG9mZnNldCAqLworCXU2NCB3aW5kb3dfc3RhcnQ7CisKKwlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwOworCS8qCisJICogd2hlbiBhIGNsdXN0ZXIgaXMgYWxsb2NhdGVkIGZyb20gYSBibG9jayBncm91cCwgd2UgcHV0IHRoZQorCSAqIGNsdXN0ZXIgb250byBhIGxpc3QgaW4gdGhlIGJsb2NrIGdyb3VwIHNvIHRoYXQgaXQgY2FuCisJICogYmUgZnJlZWQgYmVmb3JlIHRoZSBibG9jayBncm91cCBpcyBmcmVlZC4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGJsb2NrX2dyb3VwX2xpc3Q7CiB9OwogCiBzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgewogCXN0cnVjdCBidHJmc19rZXkga2V5OwogCXN0cnVjdCBidHJmc19ibG9ja19ncm91cF9pdGVtIGl0ZW07CiAJc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBtdXRleCBhbGxvY19tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggY2FjaGVfbXV0ZXg7CiAJdTY0IHBpbm5lZDsKIAl1NjQgcmVzZXJ2ZWQ7CkBAIC02NDgsNiArNjc2LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc3BhY2VfaW5mbzsKIAogCS8qIGZyZWUgc3BhY2UgY2FjaGUgc3R1ZmYgKi8KKwlzcGlubG9ja190IHRyZWVfbG9jazsKIAlzdHJ1Y3QgcmJfcm9vdCBmcmVlX3NwYWNlX2J5dGVzOwogCXN0cnVjdCByYl9yb290IGZyZWVfc3BhY2Vfb2Zmc2V0OwogCkBAIC02NTksNiArNjg4LDExIEBACiAKIAkvKiB1c2FnZSBjb3VudCAqLwogCWF0b21pY190IGNvdW50OworCisJLyogTGlzdCBvZiBzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVycyBmb3IgdGhpcyBibG9jayBncm91cC4KKwkgKiBUb2RheSBpdCB3aWxsIG9ubHkgaGF2ZSBvbmUgdGhpbmcgb24gaXQsIGJ1dCB0aGF0IG1heSBjaGFuZ2UKKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGNsdXN0ZXJfbGlzdDsKIH07CiAKIHN0cnVjdCBidHJmc19sZWFmX3JlZl90cmVlIHsKQEAgLTY4OCwxNSArNzIyLDE4IEBACiAJc3RydWN0IHJiX3Jvb3QgYmxvY2tfZ3JvdXBfY2FjaGVfdHJlZTsKIAogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSBwaW5uZWRfZXh0ZW50czsKLQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgcGVuZGluZ19kZWw7Ci0Jc3RydWN0IGV4dGVudF9pb190cmVlIGV4dGVudF9pbnM7CiAKIAkvKiBsb2dpY2FsLT5waHlzaWNhbCBleHRlbnQgbWFwcGluZyAqLwogCXN0cnVjdCBidHJmc19tYXBwaW5nX3RyZWUgbWFwcGluZ190cmVlOwogCiAJdTY0IGdlbmVyYXRpb247CiAJdTY0IGxhc3RfdHJhbnNfY29tbWl0dGVkOwotCXU2NCBsYXN0X3RyYW5zX25ld19ibG9ja2dyb3VwOworCisJLyoKKwkgKiB0aGlzIGlzIHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgdHJhbnMgZXZlcnkgdGltZSBhIGZ1bGwgY29tbWl0CisJICogaXMgcmVxdWlyZWQgaW5zdGVhZCBvZiB0aGUgZmFzdGVyIHNob3J0IGZzeW5jIGxvZyBjb21taXRzCisJICovCisJdTY0IGxhc3RfdHJhbnNfbG9nX2Z1bGxfY29tbWl0OwogCXU2NCBvcGVuX2lvY3RsX3RyYW5zOwogCXVuc2lnbmVkIGxvbmcgbW91bnRfb3B0OwogCXU2NCBtYXhfZXh0ZW50OwpAQCAtNzE3LDEyICs3NTQsMjAgQEAKIAlzdHJ1Y3QgbXV0ZXggdHJlZV9sb2dfbXV0ZXg7CiAJc3RydWN0IG11dGV4IHRyYW5zYWN0aW9uX2t0aHJlYWRfbXV0ZXg7CiAJc3RydWN0IG11dGV4IGNsZWFuZXJfbXV0ZXg7Ci0Jc3RydWN0IG11dGV4IGV4dGVudF9pbnNfbXV0ZXg7Ci0Jc3RydWN0IG11dGV4IHBpbm5lZF9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggY2h1bmtfbXV0ZXg7CiAJc3RydWN0IG11dGV4IGRyb3BfbXV0ZXg7CiAJc3RydWN0IG11dGV4IHZvbHVtZV9tdXRleDsKIAlzdHJ1Y3QgbXV0ZXggdHJlZV9yZWxvY19tdXRleDsKKworCS8qCisJICogdGhpcyBwcm90ZWN0cyB0aGUgb3JkZXJlZCBvcGVyYXRpb25zIGxpc3Qgb25seSB3aGlsZSB3ZSBhcmUKKwkgKiBwcm9jZXNzaW5nIGFsbCBvZiB0aGUgZW50cmllcyBvbiBpdC4gIFRoaXMgd2F5IHdlIG1ha2UKKwkgKiBzdXJlIHRoZSBjb21taXQgY29kZSBkb2Vzbid0IGZpbmQgdGhlIGxpc3QgdGVtcG9yYXJpbHkgZW1wdHkKKwkgKiBiZWNhdXNlIGFub3RoZXIgZnVuY3Rpb24gaGFwcGVucyB0byBiZSBkb2luZyBub24td2FpdGluZyBwcmVmbHVzaAorCSAqIGJlZm9yZSBqdW1waW5nIGludG8gdGhlIG1haW4gY29tbWl0LgorCSAqLworCXN0cnVjdCBtdXRleCBvcmRlcmVkX29wZXJhdGlvbnNfbXV0ZXg7CisKIAlzdHJ1Y3QgbGlzdF9oZWFkIHRyYW5zX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBoYXNoZXJzOwogCXN0cnVjdCBsaXN0X2hlYWQgZGVhZF9yb290czsKQEAgLTczNywxMCArNzgyLDI5IEBACiAJICogb3JkZXJlZCBleHRlbnRzCiAJICovCiAJc3BpbmxvY2tfdCBvcmRlcmVkX2V4dGVudF9sb2NrOworCisJLyoKKwkgKiBhbGwgb2YgdGhlIGRhdGE9b3JkZXJlZCBleHRlbnRzIHBlbmRpbmcgd3JpdGViYWNrCisJICogdGhlc2UgY2FuIHNwYW4gbXVsdGlwbGUgdHJhbnNhY3Rpb25zIGFuZCBiYXNpY2FsbHkgaW5jbHVkZQorCSAqIGV2ZXJ5IGRpcnR5IGRhdGEgcGFnZSB0aGF0IGlzbid0IGZyb20gbm9kYXRhY293CisJICovCiAJc3RydWN0IGxpc3RfaGVhZCBvcmRlcmVkX2V4dGVudHM7CisKKwkvKgorCSAqIGFsbCBvZiB0aGUgaW5vZGVzIHRoYXQgaGF2ZSBkZWxhbGxvYyBieXRlcy4gIEl0IGlzIHBvc3NpYmxlIGZvcgorCSAqIHRoaXMgbGlzdCB0byBiZSBlbXB0eSBldmVuIHdoZW4gdGhlcmUgaXMgc3RpbGwgZGlydHkgZGF0YT1vcmRlcmVkCisJICogZXh0ZW50cyB3YWl0aW5nIHRvIGZpbmlzaCBJTy4KKwkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGFsbG9jX2lub2RlczsKIAogCS8qCisJICogc3BlY2lhbCByZW5hbWUgYW5kIHRydW5jYXRlIHRhcmdldHMgdGhhdCBtdXN0IGJlIG9uIGRpc2sgYmVmb3JlCisJICogd2UncmUgYWxsb3dlZCB0byBjb21taXQuICBUaGlzIGlzIGJhc2ljYWxseSB0aGUgZXh0MyBzdHlsZQorCSAqIGRhdGE9b3JkZXJlZCBsaXN0LgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgb3JkZXJlZF9vcGVyYXRpb25zOworCisJLyoKIAkgKiB0aGVyZSBpcyBhIHBvb2wgb2Ygd29ya2VyIHRocmVhZHMgZm9yIGNoZWNrc3VtbWluZyBkdXJpbmcgd3JpdGVzCiAJICogYW5kIGEgcG9vbCBmb3IgY2hlY2tzdW1taW5nIGFmdGVyIHJlYWRzLiAgVGhpcyBpcyBiZWNhdXNlIHJlYWRlcnMKIAkgKiBjYW4gcnVuIHdpdGggRlMgbG9ja3MgaGVsZCwgYW5kIHRoZSB3cml0ZXJzIG1heSBiZSB3YWl0aW5nIGZvcgpAQCAtNzgxLDYgKzg0NSwxMSBAQAogCWF0b21pY190IHRocm90dGxlX2dlbjsKIAogCXU2NCB0b3RhbF9waW5uZWQ7CisKKwkvKiBwcm90ZWN0ZWQgYnkgdGhlIGRlbGFsbG9jIGxvY2ssIHVzZWQgdG8ga2VlcCBmcm9tIHdyaXRpbmcKKwkgKiBtZXRhZGF0YSB1bnRpbCB0aGVyZSBpcyBhIG5pY2UgYmF0Y2gKKwkgKi8KKwl1NjQgZGlydHlfbWV0YWRhdGFfYnl0ZXM7CiAJc3RydWN0IGxpc3RfaGVhZCBkaXJ0eV9jb3dvbmx5X3Jvb3RzOwogCiAJc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKmZzX2RldmljZXM7CkBAIC03OTUsOCArODY0LDEyIEBACiAJc3BpbmxvY2tfdCBkZWxhbGxvY19sb2NrOwogCXNwaW5sb2NrX3QgbmV3X3RyYW5zX2xvY2s7CiAJdTY0IGRlbGFsbG9jX2J5dGVzOwotCXU2NCBsYXN0X2FsbG9jOwotCXU2NCBsYXN0X2RhdGFfYWxsb2M7CisKKwkvKiBkYXRhX2FsbG9jX2NsdXN0ZXIgaXMgb25seSB1c2VkIGluIHNzZCBtb2RlICovCisJc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciBkYXRhX2FsbG9jX2NsdXN0ZXI7CisKKwkvKiBhbGwgbWV0YWRhdGEgYWxsb2NhdGlvbnMgZ28gdGhyb3VnaCB0aGlzIGNsdXN0ZXIgKi8KKwlzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyIG1ldGFfYWxsb2NfY2x1c3RlcjsKIAogCXNwaW5sb2NrX3QgcmVmX2NhY2hlX2xvY2s7CiAJdTY0IHRvdGFsX3JlZl9jYWNoZV9zaXplOwpAQCAtODg4LDcgKzk2MSw2IEBACiB9OwogCiAvKgotCiAgKiBpbm9kZSBpdGVtcyBoYXZlIHRoZSBkYXRhIHR5cGljYWxseSByZXR1cm5lZCBmcm9tIHN0YXQgYW5kIHN0b3JlIG90aGVyCiAgKiBpbmZvIGFib3V0IG9iamVjdCBjaGFyYWN0ZXJpc3RpY3MuICBUaGVyZSBpcyBvbmUgZm9yIGV2ZXJ5IGZpbGUgYW5kIGRpciBpbgogICogdGhlIEZTCkBAIC05MTksNyArOTkxLDcgQEAKICNkZWZpbmUgQlRSRlNfRVhURU5UX0NTVU1fS0VZCTEyOAogCiAvKgotICogcm9vdCBpdGVtcyBwb2ludCB0byB0cmVlIHJvb3RzLiAgVGhlcmUgYXJlIHR5cGljYWxseSBpbiB0aGUgcm9vdAorICogcm9vdCBpdGVtcyBwb2ludCB0byB0cmVlIHJvb3RzLiAgVGhleSBhcmUgdHlwaWNhbGx5IGluIHRoZSByb290CiAgKiB0cmVlIHVzZWQgYnkgdGhlIHN1cGVyIGJsb2NrIHRvIGZpbmQgYWxsIHRoZSBvdGhlciB0cmVlcwogICovCiAjZGVmaW5lIEJUUkZTX1JPT1RfSVRFTV9LRVkJMTMyCkBAIC05NjYsNiArMTAzOCw4IEBACiAjZGVmaW5lIEJUUkZTX01PVU5UX1NTRAkJCSgxIDw8IDMpCiAjZGVmaW5lIEJUUkZTX01PVU5UX0RFR1JBREVECQkoMSA8PCA0KQogI2RlZmluZSBCVFJGU19NT1VOVF9DT01QUkVTUwkJKDEgPDwgNSkKKyNkZWZpbmUgQlRSRlNfTU9VTlRfTk9UUkVFTE9HICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBCVFJGU19NT1VOVF9GTFVTSE9OQ09NTUlUICAgICAgICgxIDw8IDcpCiAKICNkZWZpbmUgYnRyZnNfY2xlYXJfb3B0KG8sIG9wdCkJCSgobykgJj0gfkJUUkZTX01PVU5UXyMjb3B0KQogI2RlZmluZSBidHJmc19zZXRfb3B0KG8sIG9wdCkJCSgobykgfD0gQlRSRlNfTU9VTlRfIyNvcHQpCkBAIC0xNzA0LDE4ICsxNzc4LDE2IEBACiB9CiAKIC8qIGV4dGVudC10cmVlLmMgKi8KK3ZvaWQgYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqY2FjaGUpOworaW50IGJ0cmZzX3J1bl9kZWxheWVkX3JlZnMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CiBpbnQgYnRyZnNfbG9va3VwX2V4dGVudChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IHN0YXJ0LCB1NjQgbGVuKTsKLWludCBidHJmc19sb29rdXBfZXh0ZW50X3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGJ5dGVuciwKLQkJCSAgICB1NjQgbnVtX2J5dGVzLCB1MzIgKnJlZnMpOwogaW50IGJ0cmZzX3VwZGF0ZV9waW5uZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCQl1NjQgYnl0ZW5yLCB1NjQgbnVtLCBpbnQgcGluKTsKIGludCBidHJmc19kcm9wX2xlYWZfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmKTsKIGludCBidHJmc19jcm9zc19yZWZfZXhpc3Qoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgb2JqZWN0aWQsIHU2NCBieXRlbnIpOwotaW50IGJ0cmZzX2V4dGVudF9wb3N0X29wKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc19jb3B5X3Bpbm5lZChzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGV4dGVudF9pb190cmVlICpjb3B5KTsKIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKAogCQkJCQkJIHN0cnVjdCBidHJmc19mc19pbmZvICppbmZvLApAQCAtMTc3Nyw3ICsxODQ5LDcgQEAKIAkJCSB1NjQgcm9vdF9vYmplY3RpZCwgdTY0IHJlZl9nZW5lcmF0aW9uLAogCQkJIHU2NCBvd25lcl9vYmplY3RpZCk7CiBpbnQgYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCisJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsCiAJCQkgICAgdTY0IG9yaWdfcGFyZW50LCB1NjQgcGFyZW50LAogCQkJICAgIHU2NCByb290X29iamVjdGlkLCB1NjQgcmVmX2dlbmVyYXRpb24sCiAJCQkgICAgdTY0IG93bmVyX29iamVjdGlkKTsKQEAgLTE4MzgsNyArMTkxMCw3IEBACiBpbnQgYnRyZnNfY293X2Jsb2NrKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYsCiAJCSAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqcGFyZW50LCBpbnQgcGFyZW50X3Nsb3QsCi0JCSAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqKmNvd19yZXQsIHU2NCBwcmVhbGxvY19kZXN0KTsKKwkJICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICoqY293X3JldCk7CiBpbnQgYnRyZnNfY29weV9yb290KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJICAgICAgc3RydWN0IGV4dGVudF9idWZmZXIgKmJ1ZiwKQEAgLTIwNjAsNyArMjEzMiw3IEBACiB1bnNpZ25lZCBsb25nIGJ0cmZzX2ZvcmNlX3JhKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJICAgICAgc3RydWN0IGZpbGVfcmFfc3RhdGUgKnJhLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICAgIHBnb2ZmX3Qgb2Zmc2V0LCBwZ29mZl90IGxhc3RfaW5kZXgpOwotaW50IGJ0cmZzX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpOworaW50IGJ0cmZzX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpOwogaW50IGJ0cmZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiB2b2lkIGJ0cmZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHZvaWQgYnRyZnNfcHV0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpAQCAtMjEzMywyMSArMjIwNSw0IEBACiBpbnQgYnRyZnNfaW5pdF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpOwogaW50IGJ0cmZzX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAotLyogZnJlZS1zcGFjZS1jYWNoZS5jICovCi1pbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKLQkJCSB1NjQgYnl0ZW5yLCB1NjQgc2l6ZSk7Ci1pbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2VfbG9jayhzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJICAgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKTsKLWludCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJICAgIHU2NCBieXRlbnIsIHU2NCBzaXplKTsKLWludCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZV9sb2NrKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkJIHU2NCBvZmZzZXQsIHU2NCBieXRlcyk7Ci12b2lkIGJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlX2NhY2hlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZQotCQkJCSAgICpibG9ja19ncm91cCk7Ci1zdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqYnRyZnNfZmluZF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZQotCQkJCQkgICAgICAgKmJsb2NrX2dyb3VwLCB1NjQgb2Zmc2V0LAotCQkJCQkgICAgICAgdTY0IGJ5dGVzKTsKLXZvaWQgYnRyZnNfZHVtcF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkgICB1NjQgYnl0ZXMpOwotdTY0IGJ0cmZzX2Jsb2NrX2dyb3VwX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2RlbGF5ZWQtcmVmLmMgYi9mcy9idHJmcy9kZWxheWVkLXJlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YzAxYzAKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9idHJmcy9kZWxheWVkLXJlZi5jCkBAIC0wLDAgKzEsNjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgImN0cmVlLmgiCisjaW5jbHVkZSAiZGVsYXllZC1yZWYuaCIKKyNpbmNsdWRlICJ0cmFuc2FjdGlvbi5oIgorCisvKgorICogZGVsYXllZCBiYWNrIHJlZmVyZW5jZSB1cGRhdGUgdHJhY2tpbmcuICBGb3Igc3Vidm9sdW1lIHRyZWVzCisgKiB3ZSBxdWV1ZSB1cCBleHRlbnQgYWxsb2NhdGlvbnMgYW5kIGJhY2tyZWYgbWFpbnRlbmFuY2UgZm9yCisgKiBkZWxheWVkIHByb2Nlc3NpbmcuICAgVGhpcyBhdm9pZHMgZGVlcCBjYWxsIGNoYWlucyB3aGVyZSB3ZQorICogYWRkIGV4dGVudHMgaW4gdGhlIG1pZGRsZSBvZiBidHJmc19zZWFyY2hfc2xvdCwgYW5kIGl0IGFsbG93cworICogdXMgdG8gYnVmZmVyIHVwIGZyZXF1ZW50bHkgbW9kaWZpZWQgYmFja3JlZnMgaW4gYW4gcmIgdHJlZSBpbnN0ZWFkCisgKiBvZiBoYW1tZXJpbmcgdXBkYXRlcyBvbiB0aGUgZXh0ZW50IGFsbG9jYXRpb24gdHJlZS4KKyAqCisgKiBSaWdodCBub3cgdGhpcyBjb2RlIGlzIG9ubHkgdXNlZCBmb3IgcmVmZXJlbmNlIGNvdW50ZWQgdHJlZXMsIGJ1dAorICogdGhlIGxvbmcgdGVybSBnb2FsIGlzIHRvIGdldCByaWQgb2YgdGhlIHNpbWlsYXIgY29kZSBmb3IgZGVsYXllZAorICogZXh0ZW50IHRyZWUgbW9kaWZpY2F0aW9ucy4KKyAqLworCisvKgorICogZW50cmllcyBpbiB0aGUgcmIgdHJlZSBhcmUgb3JkZXJlZCBieSB0aGUgYnl0ZSBudW1iZXIgb2YgdGhlIGV4dGVudAorICogYW5kIGJ5IHRoZSBieXRlIG51bWJlciBvZiB0aGUgcGFyZW50IGJsb2NrLgorICovCitzdGF0aWMgaW50IGNvbXBfZW50cnkoc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKnJlZiwKKwkJICAgICAgdTY0IGJ5dGVuciwgdTY0IHBhcmVudCkKK3sKKwlpZiAoYnl0ZW5yIDwgcmVmLT5ieXRlbnIpCisJCXJldHVybiAtMTsKKwlpZiAoYnl0ZW5yID4gcmVmLT5ieXRlbnIpCisJCXJldHVybiAxOworCWlmIChwYXJlbnQgPCByZWYtPnBhcmVudCkKKwkJcmV0dXJuIC0xOworCWlmIChwYXJlbnQgPiByZWYtPnBhcmVudCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBpbnNlcnQgYSBuZXcgcmVmIGludG8gdGhlIHJidHJlZS4gIFRoaXMgcmV0dXJucyBhbnkgZXhpc3RpbmcgcmVmcworICogZm9yIHRoZSBzYW1lIChieXRlbnIscGFyZW50KSB0dXBsZSwgb3IgTlVMTCBpZiB0aGUgbmV3IG5vZGUgd2FzIHByb3Blcmx5CisgKiBpbnNlcnRlZC4KKyAqLworc3RhdGljIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICp0cmVlX2luc2VydChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwKKwkJCQkJCSAgdTY0IGJ5dGVuciwgdTY0IHBhcmVudCwKKwkJCQkJCSAgc3RydWN0IHJiX25vZGUgKm5vZGUpCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnJvb3QtPnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudF9ub2RlID0gTlVMTDsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqZW50cnk7CisJaW50IGNtcDsKKworCXdoaWxlICgqcCkgeworCQlwYXJlbnRfbm9kZSA9ICpwOworCQllbnRyeSA9IHJiX2VudHJ5KHBhcmVudF9ub2RlLCBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSwKKwkJCQkgcmJfbm9kZSk7CisKKwkJY21wID0gY29tcF9lbnRyeShlbnRyeSwgYnl0ZW5yLCBwYXJlbnQpOworCQlpZiAoY21wIDwgMCkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoY21wID4gMCkKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBlbnRyeTsKKwl9CisKKwllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlLCByYl9ub2RlKTsKKwlyYl9saW5rX25vZGUobm9kZSwgcGFyZW50X25vZGUsIHApOworCXJiX2luc2VydF9jb2xvcihub2RlLCByb290KTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGZpbmQgYW4gZW50cnkgYmFzZWQgb24gKGJ5dGVucixwYXJlbnQpLiAgVGhpcyByZXR1cm5zIHRoZSBkZWxheWVkCisgKiByZWYgaWYgaXQgd2FzIGFibGUgdG8gZmluZCBvbmUsIG9yIE5VTEwgaWYgbm90aGluZyB3YXMgaW4gdGhhdCBzcG90CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqdHJlZV9zZWFyY2goc3RydWN0IHJiX3Jvb3QgKnJvb3QsCisJCQkJICB1NjQgYnl0ZW5yLCB1NjQgcGFyZW50LAorCQkJCSAgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKipsYXN0KQoreworCXN0cnVjdCByYl9ub2RlICpuID0gcm9vdC0+cmJfbm9kZTsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqZW50cnk7CisJaW50IGNtcDsKKworCXdoaWxlIChuKSB7CisJCWVudHJ5ID0gcmJfZW50cnkobiwgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUsIHJiX25vZGUpOworCQlXQVJOX09OKCFlbnRyeS0+aW5fdHJlZSk7CisJCWlmIChsYXN0KQorCQkJKmxhc3QgPSBlbnRyeTsKKworCQljbXAgPSBjb21wX2VudHJ5KGVudHJ5LCBieXRlbnIsIHBhcmVudCk7CisJCWlmIChjbXAgPCAwKQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQluID0gbi0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBlbnRyeTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBidHJmc19kZWxheWVkX3JlZl9sb2NrKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKworCWRlbGF5ZWRfcmVmcyA9ICZ0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmczsKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisJaWYgKG11dGV4X3RyeWxvY2soJmhlYWQtPm11dGV4KSkKKwkJcmV0dXJuIDA7CisKKwlhdG9taWNfaW5jKCZoZWFkLT5ub2RlLnJlZnMpOworCXNwaW5fdW5sb2NrKCZkZWxheWVkX3JlZnMtPmxvY2spOworCisJbXV0ZXhfbG9jaygmaGVhZC0+bXV0ZXgpOworCXNwaW5fbG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKwlpZiAoIWhlYWQtPm5vZGUuaW5fdHJlZSkgeworCQltdXRleF91bmxvY2soJmhlYWQtPm11dGV4KTsKKwkJYnRyZnNfcHV0X2RlbGF5ZWRfcmVmKCZoZWFkLT5ub2RlKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCWJ0cmZzX3B1dF9kZWxheWVkX3JlZigmaGVhZC0+bm9kZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBidHJmc19maW5kX3JlZl9jbHVzdGVyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqY2x1c3RlciwgdTY0IHN0YXJ0KQoreworCWludCBjb3VudCA9IDA7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqcmVmOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICpoZWFkOworCisJZGVsYXllZF9yZWZzID0gJnRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzOworCWlmIChzdGFydCA9PSAwKSB7CisJCW5vZGUgPSByYl9maXJzdCgmZGVsYXllZF9yZWZzLT5yb290KTsKKwl9IGVsc2UgeworCQlyZWYgPSBOVUxMOworCQl0cmVlX3NlYXJjaCgmZGVsYXllZF9yZWZzLT5yb290LCBzdGFydCwgKHU2NCktMSwgJnJlZik7CisJCWlmIChyZWYpIHsKKwkJCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICp0bXA7CisKKwkJCW5vZGUgPSByYl9wcmV2KCZyZWYtPnJiX25vZGUpOworCQkJd2hpbGUgKG5vZGUpIHsKKwkJCQl0bXAgPSByYl9lbnRyeShub2RlLAorCQkJCQkgICAgICAgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUsCisJCQkJCSAgICAgICByYl9ub2RlKTsKKwkJCQlpZiAodG1wLT5ieXRlbnIgPCBzdGFydCkKKwkJCQkJYnJlYWs7CisJCQkJcmVmID0gdG1wOworCQkJCW5vZGUgPSByYl9wcmV2KCZyZWYtPnJiX25vZGUpOworCQkJfQorCQkJbm9kZSA9ICZyZWYtPnJiX25vZGU7CisJCX0gZWxzZQorCQkJbm9kZSA9IHJiX2ZpcnN0KCZkZWxheWVkX3JlZnMtPnJvb3QpOworCX0KK2FnYWluOgorCXdoaWxlIChub2RlICYmIGNvdW50IDwgMzIpIHsKKwkJcmVmID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUsIHJiX25vZGUpOworCQlpZiAoYnRyZnNfZGVsYXllZF9yZWZfaXNfaGVhZChyZWYpKSB7CisJCQloZWFkID0gYnRyZnNfZGVsYXllZF9ub2RlX3RvX2hlYWQocmVmKTsKKwkJCWlmIChsaXN0X2VtcHR5KCZoZWFkLT5jbHVzdGVyKSkgeworCQkJCWxpc3RfYWRkX3RhaWwoJmhlYWQtPmNsdXN0ZXIsIGNsdXN0ZXIpOworCQkJCWRlbGF5ZWRfcmVmcy0+cnVuX2RlbGF5ZWRfc3RhcnQgPQorCQkJCQloZWFkLT5ub2RlLmJ5dGVucjsKKwkJCQljb3VudCsrOworCisJCQkJV0FSTl9PTihkZWxheWVkX3JlZnMtPm51bV9oZWFkc19yZWFkeSA9PSAwKTsKKwkJCQlkZWxheWVkX3JlZnMtPm51bV9oZWFkc19yZWFkeS0tOworCQkJfSBlbHNlIGlmIChjb3VudCkgeworCQkJCS8qIHRoZSBnb2FsIG9mIHRoZSBjbHVzdGVyaW5nIGlzIHRvIGZpbmQgZXh0ZW50cworCQkJCSAqIHRoYXQgYXJlIGxpa2VseSB0byBlbmQgdXAgaW4gdGhlIHNhbWUgZXh0ZW50CisJCQkJICogbGVhZiBvbiBkaXNrLiAgU28sIHdlIGRvbid0IHdhbnQgdGhlbSBzcHJlYWQKKwkJCQkgKiBhbGwgb3ZlciB0aGUgdHJlZS4gIFN0b3Agbm93IGlmIHdlJ3ZlIGhpdAorCQkJCSAqIGEgaGVhZCB0aGF0IHdhcyBhbHJlYWR5IGluIHVzZQorCQkJCSAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCX0KKwlpZiAoY291bnQpIHsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmIChzdGFydCkgeworCQkvKgorCQkgKiB3ZSd2ZSBnb25lIHRvIHRoZSBlbmQgb2YgdGhlIHJidHJlZSB3aXRob3V0IGZpbmRpbmcgYW55CisJCSAqIGNsdXN0ZXJzLiAgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIGFuZCB0cnkgYWdhaW4KKwkJICovCisJCXN0YXJ0ID0gMDsKKwkJbm9kZSA9IHJiX2ZpcnN0KCZkZWxheWVkX3JlZnMtPnJvb3QpOworCQlnb3RvIGFnYWluOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFRoaXMgY2hlY2tzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGRlbGF5ZWQgcmVmcyBpbiB0aGUKKyAqIGJ0cmVlIGZvciBhIGdpdmVuIGJ5dGVuci4gIEl0IHJldHVybnMgb25lIGlmIGl0IGZpbmRzIGFueQorICogYW5kIHplcm8gb3RoZXJ3aXNlLgorICoKKyAqIElmIGl0IG9ubHkgZmluZHMgYSBoZWFkIG5vZGUsIGl0IHJldHVybnMgMC4KKyAqCisgKiBUaGUgaWRlYSBpcyB0byB1c2UgdGhpcyB3aGVuIGRlY2lkaW5nIGlmIHlvdSBjYW4gc2FmZWx5IGRlbGV0ZSBhbgorICogZXh0ZW50IGZyb20gdGhlIGV4dGVudCBhbGxvY2F0aW9uIHRyZWUuICBUaGVyZSBtYXkgYmUgYSBwZW5kaW5nCisgKiByZWYgaW4gdGhlIHJidHJlZSB0aGF0IGFkZHMgb3IgcmVtb3ZlcyByZWZlcmVuY2VzLCBzbyBhcyBsb25nIGFzIHRoaXMKKyAqIHJldHVybnMgb25lIHlvdSBuZWVkIHRvIGxlYXZlIHRoZSBCVFJGU19FWFRFTlRfSVRFTSBpbiB0aGUgZXh0ZW50CisgKiBhbGxvY2F0aW9uIHRyZWUuCisgKi8KK2ludCBidHJmc19kZWxheWVkX3JlZl9wZW5kaW5nKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLCB1NjQgYnl0ZW5yKQoreworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICpyZWY7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKwlzdHJ1Y3QgcmJfbm9kZSAqcHJldl9ub2RlOworCWludCByZXQgPSAwOworCisJZGVsYXllZF9yZWZzID0gJnRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzOworCXNwaW5fbG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKworCXJlZiA9IHRyZWVfc2VhcmNoKCZkZWxheWVkX3JlZnMtPnJvb3QsIGJ5dGVuciwgKHU2NCktMSwgTlVMTCk7CisJaWYgKHJlZikgeworCQlwcmV2X25vZGUgPSByYl9wcmV2KCZyZWYtPnJiX25vZGUpOworCQlpZiAoIXByZXZfbm9kZSkKKwkJCWdvdG8gb3V0OworCQlyZWYgPSByYl9lbnRyeShwcmV2X25vZGUsIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlLAorCQkJICAgICAgIHJiX25vZGUpOworCQlpZiAocmVmLT5ieXRlbnIgPT0gYnl0ZW5yKQorCQkJcmV0ID0gMTsKKwl9CitvdXQ6CisJc3Bpbl91bmxvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGhlbHBlciBmdW5jdGlvbiB0byBsb29rdXAgcmVmZXJlbmNlIGNvdW50CisgKgorICogdGhlIGhlYWQgbm9kZSBmb3IgZGVsYXllZCByZWYgaXMgdXNlZCB0byBzdG9yZSB0aGUgc3VtIG9mIGFsbCB0aGUKKyAqIHJlZmVyZW5jZSBjb3VudCBtb2RpZmljYXRpb25zIHF1ZXVlZCB1cCBpbiB0aGUgcmJ0cmVlLiAgVGhpcyB3YXkgeW91CisgKiBjYW4gY2hlY2sgdG8gc2VlIHdoYXQgdGhlIHJlZmVyZW5jZSBjb3VudCB3b3VsZCBiZSBpZiBhbGwgb2YgdGhlCisgKiBkZWxheWVkIHJlZnMgYXJlIHByb2Nlc3NlZC4KKyAqLworaW50IGJ0cmZzX2xvb2t1cF9leHRlbnRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgYnl0ZW5yLAorCQkJICAgIHU2NCBudW1fYnl0ZXMsIHUzMiAqcmVmcykKK3sKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqcmVmOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICpoZWFkOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9yb290ICpkZWxheWVkX3JlZnM7CisJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CisJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CisJc3RydWN0IGJ0cmZzX2V4dGVudF9pdGVtICplaTsKKwlzdHJ1Y3QgYnRyZnNfa2V5IGtleTsKKwl1MzIgbnVtX3JlZnM7CisJaW50IHJldDsKKworCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWtleS5vYmplY3RpZCA9IGJ5dGVucjsKKwlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWTsKKwlrZXkub2Zmc2V0ID0gbnVtX2J5dGVzOworCWRlbGF5ZWRfcmVmcyA9ICZ0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmczsKK2FnYWluOgorCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwKKwkJCQkma2V5LCBwYXRoLCAwLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAocmV0ID09IDApIHsKKwkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOworCQllaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIHBhdGgtPnNsb3RzWzBdLAorCQkJCSAgICBzdHJ1Y3QgYnRyZnNfZXh0ZW50X2l0ZW0pOworCQludW1fcmVmcyA9IGJ0cmZzX2V4dGVudF9yZWZzKGxlYWYsIGVpKTsKKwl9IGVsc2UgeworCQludW1fcmVmcyA9IDA7CisJCXJldCA9IDA7CisJfQorCisJc3Bpbl9sb2NrKCZkZWxheWVkX3JlZnMtPmxvY2spOworCXJlZiA9IHRyZWVfc2VhcmNoKCZkZWxheWVkX3JlZnMtPnJvb3QsIGJ5dGVuciwgKHU2NCktMSwgTlVMTCk7CisJaWYgKHJlZikgeworCQloZWFkID0gYnRyZnNfZGVsYXllZF9ub2RlX3RvX2hlYWQocmVmKTsKKwkJaWYgKG11dGV4X3RyeWxvY2soJmhlYWQtPm11dGV4KSkgeworCQkJbnVtX3JlZnMgKz0gcmVmLT5yZWZfbW9kOworCQkJbXV0ZXhfdW5sb2NrKCZoZWFkLT5tdXRleCk7CisJCQkqcmVmcyA9IG51bV9yZWZzOworCQkJZ290byBvdXQ7CisJCX0KKworCQlhdG9taWNfaW5jKCZyZWYtPnJlZnMpOworCQlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKworCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsIHBhdGgpOworCisJCW11dGV4X2xvY2soJmhlYWQtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZoZWFkLT5tdXRleCk7CisJCWJ0cmZzX3B1dF9kZWxheWVkX3JlZihyZWYpOworCQlnb3RvIGFnYWluOworCX0gZWxzZSB7CisJCSpyZWZzID0gbnVtX3JlZnM7CisJfQorb3V0OgorCXNwaW5fdW5sb2NrKCZkZWxheWVkX3JlZnMtPmxvY2spOworCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogaGVscGVyIGZ1bmN0aW9uIHRvIHVwZGF0ZSBhbiBleHRlbnQgZGVsYXllZCByZWYgaW4gdGhlCisgKiByYnRyZWUuICBleGlzdGluZyBhbmQgdXBkYXRlIG11c3QgYm90aCBoYXZlIHRoZSBzYW1lCisgKiBieXRlbnIgYW5kIHBhcmVudAorICoKKyAqIFRoaXMgbWF5IGZyZWUgZXhpc3RpbmcgaWYgdGhlIHVwZGF0ZSBjYW5jZWxzIG91dCB3aGF0ZXZlcgorICogb3BlcmF0aW9uIGl0IHdhcyBkb2luZy4KKyAqLworc3RhdGljIG5vaW5saW5lIHZvaWQKK3VwZGF0ZV9leGlzdGluZ19yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgICBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfcm9vdCAqZGVsYXllZF9yZWZzLAorCQkgICAgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKmV4aXN0aW5nLAorCQkgICAgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKnVwZGF0ZSkKK3sKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYgKmV4aXN0aW5nX3JlZjsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYgKnJlZjsKKworCWV4aXN0aW5nX3JlZiA9IGJ0cmZzX2RlbGF5ZWRfbm9kZV90b19yZWYoZXhpc3RpbmcpOworCXJlZiA9IGJ0cmZzX2RlbGF5ZWRfbm9kZV90b19yZWYodXBkYXRlKTsKKworCWlmIChyZWYtPnBpbikKKwkJZXhpc3RpbmdfcmVmLT5waW4gPSAxOworCisJaWYgKHJlZi0+YWN0aW9uICE9IGV4aXN0aW5nX3JlZi0+YWN0aW9uKSB7CisJCS8qCisJCSAqIHRoaXMgaXMgZWZmZWN0aXZlbHkgdW5kb2luZyBlaXRoZXIgYW4gYWRkIG9yIGEKKwkJICogZHJvcC4gIFdlIGRlY3JlbWVudCB0aGUgcmVmX21vZCwgYW5kIGlmIGl0IGdvZXMKKwkJICogZG93biB0byB6ZXJvIHdlIGp1c3QgZGVsZXRlIHRoZSBlbnRyeSB3aXRob3V0CisJCSAqIGV2ZXJ5IGNoYW5naW5nIHRoZSBleHRlbnQgYWxsb2NhdGlvbiB0cmVlLgorCQkgKi8KKwkJZXhpc3RpbmctPnJlZl9tb2QtLTsKKwkJaWYgKGV4aXN0aW5nLT5yZWZfbW9kID09IDApIHsKKwkJCXJiX2VyYXNlKCZleGlzdGluZy0+cmJfbm9kZSwKKwkJCQkgJmRlbGF5ZWRfcmVmcy0+cm9vdCk7CisJCQlleGlzdGluZy0+aW5fdHJlZSA9IDA7CisJCQlidHJmc19wdXRfZGVsYXllZF9yZWYoZXhpc3RpbmcpOworCQkJZGVsYXllZF9yZWZzLT5udW1fZW50cmllcy0tOworCQkJaWYgKHRyYW5zLT5kZWxheWVkX3JlZl91cGRhdGVzKQorCQkJCXRyYW5zLT5kZWxheWVkX3JlZl91cGRhdGVzLS07CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZXhpc3RpbmdfcmVmLT5hY3Rpb24gPT0gQlRSRlNfQUREX0RFTEFZRURfUkVGKSB7CisJCQkvKiBpZiB3ZSdyZSBhZGRpbmcgcmVmcywgbWFrZSBzdXJlIGFsbCB0aGUKKwkJCSAqIGRldGFpbHMgbWF0Y2ggdXAuICBUaGUgZXh0ZW50IGNvdWxkCisJCQkgKiBoYXZlIGJlZW4gdG90YWxseSBmcmVlZCBhbmQgcmVhbGxvY2F0ZWQKKwkJCSAqIGJ5IGEgZGlmZmVyZW50IG93bmVyIGJlZm9yZSB0aGUgZGVsYXllZAorCQkJICogcmVmIGVudHJpZXMgd2VyZSByZW1vdmVkLgorCQkJICovCisJCQlleGlzdGluZ19yZWYtPm93bmVyX29iamVjdGlkID0gcmVmLT5vd25lcl9vYmplY3RpZDsKKwkJCWV4aXN0aW5nX3JlZi0+Z2VuZXJhdGlvbiA9IHJlZi0+Z2VuZXJhdGlvbjsKKwkJCWV4aXN0aW5nX3JlZi0+cm9vdCA9IHJlZi0+cm9vdDsKKwkJCWV4aXN0aW5nLT5udW1fYnl0ZXMgPSB1cGRhdGUtPm51bV9ieXRlczsKKwkJfQorCQkvKgorCQkgKiB0aGUgYWN0aW9uIG9uIHRoZSBleGlzdGluZyByZWYgbWF0Y2hlcworCQkgKiB0aGUgYWN0aW9uIG9uIHRoZSByZWYgd2UncmUgdHJ5aW5nIHRvIGFkZC4KKwkJICogQnVtcCB0aGUgcmVmX21vZCBieSBvbmUgc28gdGhlIGJhY2tyZWYgdGhhdAorCQkgKiBpcyBldmVudHVhbGx5IGFkZGVkL3JlbW92ZWQgaGFzIHRoZSBjb3JyZWN0CisJCSAqIHJlZmVyZW5jZSBjb3VudAorCQkgKi8KKwkJZXhpc3RpbmctPnJlZl9tb2QgKz0gdXBkYXRlLT5yZWZfbW9kOworCX0KK30KKworLyoKKyAqIGhlbHBlciBmdW5jdGlvbiB0byB1cGRhdGUgdGhlIGFjY291bnRpbmcgaW4gdGhlIGhlYWQgcmVmCisgKiBleGlzdGluZyBhbmQgdXBkYXRlIG11c3QgaGF2ZSB0aGUgc2FtZSBieXRlbnIKKyAqLworc3RhdGljIG5vaW5saW5lIHZvaWQKK3VwZGF0ZV9leGlzdGluZ19oZWFkX3JlZihzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqZXhpc3RpbmcsCisJCQkgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKnVwZGF0ZSkKK3sKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCAqZXhpc3RpbmdfcmVmOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICpyZWY7CisKKwlleGlzdGluZ19yZWYgPSBidHJmc19kZWxheWVkX25vZGVfdG9faGVhZChleGlzdGluZyk7CisJcmVmID0gYnRyZnNfZGVsYXllZF9ub2RlX3RvX2hlYWQodXBkYXRlKTsKKworCWlmIChyZWYtPm11c3RfaW5zZXJ0X3Jlc2VydmVkKSB7CisJCS8qIGlmIHRoZSBleHRlbnQgd2FzIGZyZWVkIGFuZCB0aGVuCisJCSAqIHJlYWxsb2NhdGVkIGJlZm9yZSB0aGUgZGVsYXllZCByZWYKKwkJICogZW50cmllcyB3ZXJlIHByb2Nlc3NlZCwgd2UgY2FuIGVuZCB1cAorCQkgKiB3aXRoIGFuIGV4aXN0aW5nIGhlYWQgcmVmIHdpdGhvdXQKKwkJICogdGhlIG11c3RfaW5zZXJ0X3Jlc2VydmVkIGZsYWcgc2V0LgorCQkgKiBTZXQgaXQgYWdhaW4gaGVyZQorCQkgKi8KKwkJZXhpc3RpbmdfcmVmLT5tdXN0X2luc2VydF9yZXNlcnZlZCA9IHJlZi0+bXVzdF9pbnNlcnRfcmVzZXJ2ZWQ7CisKKwkJLyoKKwkJICogdXBkYXRlIHRoZSBudW1fYnl0ZXMgc28gd2UgbWFrZSBzdXJlIHRoZSBhY2NvdW50aW5nCisJCSAqIGlzIGRvbmUgY29ycmVjdGx5CisJCSAqLworCQlleGlzdGluZy0+bnVtX2J5dGVzID0gdXBkYXRlLT5udW1fYnl0ZXM7CisKKwl9CisKKwkvKgorCSAqIHVwZGF0ZSB0aGUgcmVmZXJlbmNlIG1vZCBvbiB0aGUgaGVhZCB0byByZWZsZWN0IHRoaXMgbmV3IG9wZXJhdGlvbgorCSAqLworCWV4aXN0aW5nLT5yZWZfbW9kICs9IHVwZGF0ZS0+cmVmX21vZDsKK30KKworLyoKKyAqIGhlbHBlciBmdW5jdGlvbiB0byBhY3R1YWxseSBpbnNlcnQgYSBkZWxheWVkIHJlZiBpbnRvIHRoZSByYnRyZWUuCisgKiB0aGlzIGRvZXMgYWxsIHRoZSBkaXJ0eSB3b3JrIGluIHRlcm1zIG9mIG1haW50YWluaW5nIHRoZSBjb3JyZWN0CisgKiBvdmVyYWxsIG1vZGlmaWNhdGlvbiBjb3VudCBpbiB0aGUgaGVhZCBub2RlIGFuZCBwcm9wZXJseSBkZWFsaW5nCisgKiB3aXRoIHVwZGF0aW5nIGV4aXN0aW5nIG5vZGVzIGFzIG5ldyBtb2RpZmljYXRpb25zIGFyZSBxdWV1ZWQuCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgX19idHJmc19hZGRfZGVsYXllZF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICpyZWYsCisJCQkgIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsIHU2NCBwYXJlbnQsIHU2NCByZWZfcm9vdCwKKwkJCSAgdTY0IHJlZl9nZW5lcmF0aW9uLCB1NjQgb3duZXJfb2JqZWN0aWQsIGludCBhY3Rpb24sCisJCQkgIGludCBwaW4pCit7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKmV4aXN0aW5nOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZiAqZnVsbF9yZWY7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgKmhlYWRfcmVmID0gTlVMTDsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfcm9vdCAqZGVsYXllZF9yZWZzOworCWludCBjb3VudF9tb2QgPSAxOworCWludCBtdXN0X2luc2VydF9yZXNlcnZlZCA9IDA7CisKKwkvKgorCSAqIHRoZSBoZWFkIG5vZGUgc3RvcmVzIHRoZSBzdW0gb2YgYWxsIHRoZSBtb2RzLCBzbyBkcm9wcGluZyBhIHJlZgorCSAqIHNob3VsZCBkcm9wIHRoZSBzdW0gaW4gdGhlIGhlYWQgbm9kZSBieSBvbmUuCisJICovCisJaWYgKHBhcmVudCA9PSAodTY0KS0xKSB7CisJCWlmIChhY3Rpb24gPT0gQlRSRlNfRFJPUF9ERUxBWUVEX1JFRikKKwkJCWNvdW50X21vZCA9IC0xOworCQllbHNlIGlmIChhY3Rpb24gPT0gQlRSRlNfVVBEQVRFX0RFTEFZRURfSEVBRCkKKwkJCWNvdW50X21vZCA9IDA7CisJfQorCisJLyoKKwkgKiBCVFJGU19BRERfREVMQVlFRF9FWFRFTlQgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHVwZGF0ZQorCSAqIHRoZSByZXNlcnZlZCBhY2NvdW50aW5nIHdoZW4gdGhlIGV4dGVudCBpcyBmaW5hbGx5IGFkZGVkLCBvcgorCSAqIGlmIGEgbGF0ZXIgbW9kaWZpY2F0aW9uIGRlbGV0ZXMgdGhlIGRlbGF5ZWQgcmVmIHdpdGhvdXQgZXZlcgorCSAqIGluc2VydGluZyB0aGUgZXh0ZW50IGludG8gdGhlIGV4dGVudCBhbGxvY2F0aW9uIHRyZWUuCisJICogcmVmLT5tdXN0X2luc2VydF9yZXNlcnZlZCBpcyB0aGUgZmxhZyB1c2VkIHRvIHJlY29yZAorCSAqIHRoYXQgYWNjb3VudGluZyBtb2RzIGFyZSByZXF1aXJlZC4KKwkgKgorCSAqIE9uY2Ugd2UgcmVjb3JkIG11c3RfaW5zZXJ0X3Jlc2VydmVkLCBzd2l0Y2ggdGhlIGFjdGlvbiB0bworCSAqIEJUUkZTX0FERF9ERUxBWUVEX1JFRiBiZWNhdXNlIG90aGVyIHNwZWNpYWwgY2FzaW5nIGlzIG5vdCByZXF1aXJlZC4KKwkgKi8KKwlpZiAoYWN0aW9uID09IEJUUkZTX0FERF9ERUxBWUVEX0VYVEVOVCkgeworCQltdXN0X2luc2VydF9yZXNlcnZlZCA9IDE7CisJCWFjdGlvbiA9IEJUUkZTX0FERF9ERUxBWUVEX1JFRjsKKwl9IGVsc2UgeworCQltdXN0X2luc2VydF9yZXNlcnZlZCA9IDA7CisJfQorCisKKwlkZWxheWVkX3JlZnMgPSAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnM7CisKKwkvKiBmaXJzdCBzZXQgdGhlIGJhc2ljIHJlZiBub2RlIHN0cnVjdCB1cCAqLworCWF0b21pY19zZXQoJnJlZi0+cmVmcywgMSk7CisJcmVmLT5ieXRlbnIgPSBieXRlbnI7CisJcmVmLT5wYXJlbnQgPSBwYXJlbnQ7CisJcmVmLT5yZWZfbW9kID0gY291bnRfbW9kOworCXJlZi0+aW5fdHJlZSA9IDE7CisJcmVmLT5udW1fYnl0ZXMgPSBudW1fYnl0ZXM7CisKKwlpZiAoYnRyZnNfZGVsYXllZF9yZWZfaXNfaGVhZChyZWYpKSB7CisJCWhlYWRfcmVmID0gYnRyZnNfZGVsYXllZF9ub2RlX3RvX2hlYWQocmVmKTsKKwkJaGVhZF9yZWYtPm11c3RfaW5zZXJ0X3Jlc2VydmVkID0gbXVzdF9pbnNlcnRfcmVzZXJ2ZWQ7CisJCUlOSVRfTElTVF9IRUFEKCZoZWFkX3JlZi0+Y2x1c3Rlcik7CisJCW11dGV4X2luaXQoJmhlYWRfcmVmLT5tdXRleCk7CisJfSBlbHNlIHsKKwkJZnVsbF9yZWYgPSBidHJmc19kZWxheWVkX25vZGVfdG9fcmVmKHJlZik7CisJCWZ1bGxfcmVmLT5yb290ID0gcmVmX3Jvb3Q7CisJCWZ1bGxfcmVmLT5nZW5lcmF0aW9uID0gcmVmX2dlbmVyYXRpb247CisJCWZ1bGxfcmVmLT5vd25lcl9vYmplY3RpZCA9IG93bmVyX29iamVjdGlkOworCQlmdWxsX3JlZi0+cGluID0gcGluOworCQlmdWxsX3JlZi0+YWN0aW9uID0gYWN0aW9uOworCX0KKworCWV4aXN0aW5nID0gdHJlZV9pbnNlcnQoJmRlbGF5ZWRfcmVmcy0+cm9vdCwgYnl0ZW5yLAorCQkJICAgICAgIHBhcmVudCwgJnJlZi0+cmJfbm9kZSk7CisKKwlpZiAoZXhpc3RpbmcpIHsKKwkJaWYgKGJ0cmZzX2RlbGF5ZWRfcmVmX2lzX2hlYWQocmVmKSkKKwkJCXVwZGF0ZV9leGlzdGluZ19oZWFkX3JlZihleGlzdGluZywgcmVmKTsKKwkJZWxzZQorCQkJdXBkYXRlX2V4aXN0aW5nX3JlZih0cmFucywgZGVsYXllZF9yZWZzLCBleGlzdGluZywgcmVmKTsKKworCQkvKgorCQkgKiB3ZSd2ZSB1cGRhdGVkIHRoZSBleGlzdGluZyByZWYsIGZyZWUgdGhlIG5ld2x5CisJCSAqIGFsbG9jYXRlZCByZWYKKwkJICovCisJCWtmcmVlKHJlZik7CisJfSBlbHNlIHsKKwkJaWYgKGJ0cmZzX2RlbGF5ZWRfcmVmX2lzX2hlYWQocmVmKSkgeworCQkJZGVsYXllZF9yZWZzLT5udW1faGVhZHMrKzsKKwkJCWRlbGF5ZWRfcmVmcy0+bnVtX2hlYWRzX3JlYWR5Kys7CisJCX0KKwkJZGVsYXllZF9yZWZzLT5udW1fZW50cmllcysrOworCQl0cmFucy0+ZGVsYXllZF9yZWZfdXBkYXRlcysrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGFkZCBhIGRlbGF5ZWQgcmVmIHRvIHRoZSB0cmVlLiAgVGhpcyBkb2VzIGFsbCBvZiB0aGUgYWNjb3VudGluZyByZXF1aXJlZAorICogdG8gbWFrZSBzdXJlIHRoZSBkZWxheWVkIHJlZiBpcyBldmVudHVhbGx5IHByb2Nlc3NlZCBiZWZvcmUgdGhpcworICogdHJhbnNhY3Rpb24gY29tbWl0cy4KKyAqLworaW50IGJ0cmZzX2FkZF9kZWxheWVkX3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCSAgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgdTY0IHBhcmVudCwgdTY0IHJlZl9yb290LAorCQkJICB1NjQgcmVmX2dlbmVyYXRpb24sIHU2NCBvd25lcl9vYmplY3RpZCwgaW50IGFjdGlvbiwKKwkJCSAgaW50IHBpbikKK3sKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYgKnJlZjsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCAqaGVhZF9yZWY7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKwlpbnQgcmV0OworCisJcmVmID0ga21hbGxvYyhzaXplb2YoKnJlZiksIEdGUF9OT0ZTKTsKKwlpZiAoIXJlZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIHRoZSBwYXJlbnQgPSAwIGNhc2UgY29tZXMgZnJvbSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBhY3R1YWxseQorCSAqIGtub3cgdGhlIHBhcmVudCB5ZXQuICBJdCB3aWxsIGdldCB1cGRhdGVkIGxhdGVyIHZpYSBhIGFkZC9kcm9wCisJICogcGFpci4KKwkgKi8KKwlpZiAocGFyZW50ID09IDApCisJCXBhcmVudCA9IGJ5dGVucjsKKworCWhlYWRfcmVmID0ga21hbGxvYyhzaXplb2YoKmhlYWRfcmVmKSwgR0ZQX05PRlMpOworCWlmICghaGVhZF9yZWYpIHsKKwkJa2ZyZWUocmVmKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRlbGF5ZWRfcmVmcyA9ICZ0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmczsKKwlzcGluX2xvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisKKwkvKgorCSAqIGluc2VydCBib3RoIHRoZSBoZWFkIG5vZGUgYW5kIHRoZSBuZXcgcmVmIHdpdGhvdXQgZHJvcHBpbmcKKwkgKiB0aGUgc3BpbiBsb2NrCisJICovCisJcmV0ID0gX19idHJmc19hZGRfZGVsYXllZF9yZWYodHJhbnMsICZoZWFkX3JlZi0+bm9kZSwgYnl0ZW5yLCBudW1fYnl0ZXMsCisJCQkJICAgICAgKHU2NCktMSwgMCwgMCwgMCwgYWN0aW9uLCBwaW4pOworCUJVR19PTihyZXQpOworCisJcmV0ID0gX19idHJmc19hZGRfZGVsYXllZF9yZWYodHJhbnMsICZyZWYtPm5vZGUsIGJ5dGVuciwgbnVtX2J5dGVzLAorCQkJCSAgICAgIHBhcmVudCwgcmVmX3Jvb3QsIHJlZl9nZW5lcmF0aW9uLAorCQkJCSAgICAgIG93bmVyX29iamVjdGlkLCBhY3Rpb24sIHBpbik7CisJQlVHX09OKHJldCk7CisJc3Bpbl91bmxvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB0aGlzIGRvZXMgYSBzaW1wbGUgc2VhcmNoIGZvciB0aGUgaGVhZCBub2RlIGZvciBhIGdpdmVuIGV4dGVudC4KKyAqIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGRlbGF5ZWQgcmVmIHNwaW5sb2NrIGhlbGQsIGFuZCBpdCByZXR1cm5zCisgKiB0aGUgaGVhZCBub2RlIGlmIGFueSB3aGVyZSBmb3VuZCwgb3IgTlVMTCBpZiBub3QuCisgKi8KK3N0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICoKK2J0cmZzX2ZpbmRfZGVsYXllZF9yZWZfaGVhZChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgdTY0IGJ5dGVucikKK3sKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqcmVmOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9yb290ICpkZWxheWVkX3JlZnM7CisKKwlkZWxheWVkX3JlZnMgPSAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnM7CisJcmVmID0gdHJlZV9zZWFyY2goJmRlbGF5ZWRfcmVmcy0+cm9vdCwgYnl0ZW5yLCAodTY0KS0xLCBOVUxMKTsKKwlpZiAocmVmKQorCQlyZXR1cm4gYnRyZnNfZGVsYXllZF9ub2RlX3RvX2hlYWQocmVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGFkZCBhIGRlbGF5ZWQgcmVmIHRvIHRoZSB0cmVlLiAgVGhpcyBkb2VzIGFsbCBvZiB0aGUgYWNjb3VudGluZyByZXF1aXJlZAorICogdG8gbWFrZSBzdXJlIHRoZSBkZWxheWVkIHJlZiBpcyBldmVudHVhbGx5IHByb2Nlc3NlZCBiZWZvcmUgdGhpcworICogdHJhbnNhY3Rpb24gY29tbWl0cy4KKyAqCisgKiBUaGUgbWFpbiBwb2ludCBvZiB0aGlzIGNhbGwgaXMgdG8gYWRkIGFuZCByZW1vdmUgYSBiYWNrcmVmZXJlbmNlIGluIGEgc2luZ2xlCisgKiBzaG90LCB0YWtpbmcgdGhlIGxvY2sgb25seSBvbmNlLCBhbmQgb25seSBzZWFyY2hpbmcgZm9yIHRoZSBoZWFkIG5vZGUgb25jZS4KKyAqCisgKiBJdCBpcyB0aGUgc2FtZSBhcyBkb2luZyBhIHJlZiBhZGQgYW5kIGRlbGV0ZSBpbiB0d28gc2VwYXJhdGUgY2FsbHMuCisgKi8KK2ludCBidHJmc191cGRhdGVfZGVsYXllZF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsIHU2NCBvcmlnX3BhcmVudCwKKwkJCSAgdTY0IHBhcmVudCwgdTY0IG9yaWdfcmVmX3Jvb3QsIHU2NCByZWZfcm9vdCwKKwkJCSAgdTY0IG9yaWdfcmVmX2dlbmVyYXRpb24sIHU2NCByZWZfZ2VuZXJhdGlvbiwKKwkJCSAgdTY0IG93bmVyX29iamVjdGlkLCBpbnQgcGluKQoreworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZiAqcmVmOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZiAqb2xkX3JlZjsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCAqaGVhZF9yZWY7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKwlpbnQgcmV0OworCisJcmVmID0ga21hbGxvYyhzaXplb2YoKnJlZiksIEdGUF9OT0ZTKTsKKwlpZiAoIXJlZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvbGRfcmVmID0ga21hbGxvYyhzaXplb2YoKm9sZF9yZWYpLCBHRlBfTk9GUyk7CisJaWYgKCFvbGRfcmVmKSB7CisJCWtmcmVlKHJlZik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qCisJICogdGhlIHBhcmVudCA9IDAgY2FzZSBjb21lcyBmcm9tIGNhc2VzIHdoZXJlIHdlIGRvbid0IGFjdHVhbGx5CisJICoga25vdyB0aGUgcGFyZW50IHlldC4gIEl0IHdpbGwgZ2V0IHVwZGF0ZWQgbGF0ZXIgdmlhIGEgYWRkL2Ryb3AKKwkgKiBwYWlyLgorCSAqLworCWlmIChwYXJlbnQgPT0gMCkKKwkJcGFyZW50ID0gYnl0ZW5yOworCWlmIChvcmlnX3BhcmVudCA9PSAwKQorCQlvcmlnX3BhcmVudCA9IGJ5dGVucjsKKworCWhlYWRfcmVmID0ga21hbGxvYyhzaXplb2YoKmhlYWRfcmVmKSwgR0ZQX05PRlMpOworCWlmICghaGVhZF9yZWYpIHsKKwkJa2ZyZWUocmVmKTsKKwkJa2ZyZWUob2xkX3JlZik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkZWxheWVkX3JlZnMgPSAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnM7CisJc3Bpbl9sb2NrKCZkZWxheWVkX3JlZnMtPmxvY2spOworCisJLyoKKwkgKiBpbnNlcnQgYm90aCB0aGUgaGVhZCBub2RlIGFuZCB0aGUgbmV3IHJlZiB3aXRob3V0IGRyb3BwaW5nCisJICogdGhlIHNwaW4gbG9jaworCSAqLworCXJldCA9IF9fYnRyZnNfYWRkX2RlbGF5ZWRfcmVmKHRyYW5zLCAmaGVhZF9yZWYtPm5vZGUsIGJ5dGVuciwgbnVtX2J5dGVzLAorCQkJCSAgICAgICh1NjQpLTEsIDAsIDAsIDAsCisJCQkJICAgICAgQlRSRlNfVVBEQVRFX0RFTEFZRURfSEVBRCwgMCk7CisJQlVHX09OKHJldCk7CisKKwlyZXQgPSBfX2J0cmZzX2FkZF9kZWxheWVkX3JlZih0cmFucywgJnJlZi0+bm9kZSwgYnl0ZW5yLCBudW1fYnl0ZXMsCisJCQkJICAgICAgcGFyZW50LCByZWZfcm9vdCwgcmVmX2dlbmVyYXRpb24sCisJCQkJICAgICAgb3duZXJfb2JqZWN0aWQsIEJUUkZTX0FERF9ERUxBWUVEX1JFRiwgMCk7CisJQlVHX09OKHJldCk7CisKKwlyZXQgPSBfX2J0cmZzX2FkZF9kZWxheWVkX3JlZih0cmFucywgJm9sZF9yZWYtPm5vZGUsIGJ5dGVuciwgbnVtX2J5dGVzLAorCQkJCSAgICAgIG9yaWdfcGFyZW50LCBvcmlnX3JlZl9yb290LAorCQkJCSAgICAgIG9yaWdfcmVmX2dlbmVyYXRpb24sIG93bmVyX29iamVjdGlkLAorCQkJCSAgICAgIEJUUkZTX0RST1BfREVMQVlFRF9SRUYsIHBpbik7CisJQlVHX09OKHJldCk7CisJc3Bpbl91bmxvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9kZWxheWVkLXJlZi5oIGIvZnMvYnRyZnMvZGVsYXllZC1yZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmVjMmZmCi0tLSAvZGV2L251bGwKKysrIGIvZnMvYnRyZnMvZGVsYXllZC1yZWYuaApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2MiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMTAtMTMwNywgVVNBLgorICovCisjaWZuZGVmIF9fREVMQVlFRF9SRUZfXworI2RlZmluZSBfX0RFTEFZRURfUkVGX18KKworLyogdGhlc2UgYXJlIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2Ygc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmLT5hY3Rpb24gKi8KKyNkZWZpbmUgQlRSRlNfQUREX0RFTEFZRURfUkVGICAgIDEgLyogYWRkIG9uZSBiYWNrcmVmIHRvIHRoZSB0cmVlICovCisjZGVmaW5lIEJUUkZTX0RST1BfREVMQVlFRF9SRUYgICAyIC8qIGRlbGV0ZSBvbmUgYmFja3JlZiBmcm9tIHRoZSB0cmVlICovCisjZGVmaW5lIEJUUkZTX0FERF9ERUxBWUVEX0VYVEVOVCAzIC8qIHJlY29yZCBhIGZ1bGwgZXh0ZW50IGFsbG9jYXRpb24gKi8KKyNkZWZpbmUgQlRSRlNfVVBEQVRFX0RFTEFZRURfSEVBRCA0IC8qIG5vdCBjaGFuZ2luZyByZWYgY291bnQgb24gaGVhZCByZWYgKi8KKworc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgeworCXN0cnVjdCByYl9ub2RlIHJiX25vZGU7CisKKwkvKiB0aGUgc3RhcnRpbmcgYnl0ZW5yIG9mIHRoZSBleHRlbnQgKi8KKwl1NjQgYnl0ZW5yOworCisJLyogdGhlIHBhcmVudCBvdXIgYmFja3JlZiB3aWxsIHBvaW50IHRvICovCisJdTY0IHBhcmVudDsKKworCS8qIHRoZSBzaXplIG9mIHRoZSBleHRlbnQgKi8KKwl1NjQgbnVtX2J5dGVzOworCisJLyogcmVmIGNvdW50IG9uIHRoaXMgZGF0YSBzdHJ1Y3R1cmUgKi8KKwlhdG9taWNfdCByZWZzOworCisJLyoKKwkgKiBob3cgbWFueSByZWZzIGlzIHRoaXMgZW50cnkgYWRkaW5nIG9yIGRlbGV0aW5nLiAgRm9yCisJICogaGVhZCByZWZzLCB0aGlzIG1heSBiZSBhIG5lZ2F0aXZlIG51bWJlciBiZWNhdXNlIGl0IGlzIGtlZXBpbmcKKwkgKiB0cmFjayBvZiB0aGUgdG90YWwgbW9kcyBkb25lIHRvIHRoZSByZWZlcmVuY2UgY291bnQuCisJICogRm9yIGluZGl2aWR1YWwgcmVmcywgdGhpcyB3aWxsIGFsd2F5cyBiZSBhIHBvc2l0aXZlIG51bWJlcgorCSAqCisJICogSXQgbWF5IGJlIG1vcmUgdGhhbiBvbmUsIHNpbmNlIGl0IGlzIHBvc3NpYmxlIGZvciBhIHNpbmdsZQorCSAqIHBhcmVudCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgcmVmIG9uIGFuIGV4dGVudAorCSAqLworCWludCByZWZfbW9kOworCisJLyogaXMgdGhpcyBub2RlIHN0aWxsIGluIHRoZSByYnRyZWU/ICovCisJdW5zaWduZWQgaW50IGluX3RyZWU6MTsKK307CisKKy8qCisgKiB0aGUgaGVhZCByZWZzIGFyZSB1c2VkIHRvIGhvbGQgYSBsb2NrIG9uIGEgZ2l2ZW4gZXh0ZW50LCB3aGljaCBhbGxvd3MgdXMKKyAqIHRvIG1ha2Ugc3VyZSB0aGF0IG9ubHkgb25lIHByb2Nlc3MgaXMgcnVubmluZyB0aGUgZGVsYXllZCByZWZzCisgKiBhdCBhIHRpbWUgZm9yIGEgc2luZ2xlIGV4dGVudC4gIFRoZXkgYWxzbyBzdG9yZSB0aGUgc3VtIG9mIGFsbCB0aGUKKyAqIHJlZmVyZW5jZSBjb3VudCBtb2RpZmljYXRpb25zIHdlJ3ZlIHF1ZXVlZCB1cC4KKyAqLworc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgeworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlIG5vZGU7CisKKwkvKgorCSAqIHRoZSBtdXRleCBpcyBoZWxkIHdoaWxlIHJ1bm5pbmcgdGhlIHJlZnMsIGFuZCBpdCBpcyBhbHNvCisJICogaGVsZCB3aGVuIGNoZWNraW5nIHRoZSBzdW0gb2YgcmVmZXJlbmNlIG1vZGlmaWNhdGlvbnMuCisJICovCisJc3RydWN0IG11dGV4IG11dGV4OworCisJc3RydWN0IGxpc3RfaGVhZCBjbHVzdGVyOworCisJLyoKKwkgKiB3aGVuIGEgbmV3IGV4dGVudCBpcyBhbGxvY2F0ZWQsIGl0IGlzIGp1c3QgcmVzZXJ2ZWQgaW4gbWVtb3J5CisJICogVGhlIGFjdHVhbCBleHRlbnQgaXNuJ3QgaW5zZXJ0ZWQgaW50byB0aGUgZXh0ZW50IGFsbG9jYXRpb24gdHJlZQorCSAqIHVudGlsIHRoZSBkZWxheWVkIHJlZiBpcyBwcm9jZXNzZWQuICBtdXN0X2luc2VydF9yZXNlcnZlZCBpcworCSAqIHVzZWQgdG8gZmxhZyBhIGRlbGF5ZWQgcmVmIHNvIHRoZSBhY2NvdW50aW5nIGNhbiBiZSB1cGRhdGVkCisJICogd2hlbiBhIGZ1bGwgaW5zZXJ0IGlzIGRvbmUuCisJICoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0aGUgZXh0ZW50IHdpbGwgYmUgZnJlZWQgYmVmb3JlIGl0IGlzIGV2ZXIKKwkgKiBpbnNlcnRlZCBpbnRvIHRoZSBleHRlbnQgYWxsb2NhdGlvbiB0cmVlLiAgSW4gdGhpcyBjYXNlCisJICogd2UgbmVlZCB0byB1cGRhdGUgdGhlIGluIHJhbSBhY2NvdW50aW5nIHRvIHByb3Blcmx5IHJlZmxlY3QKKwkgKiB0aGUgZnJlZSBoYXMgaGFwcGVuZWQuCisJICovCisJdW5zaWduZWQgaW50IG11c3RfaW5zZXJ0X3Jlc2VydmVkOjE7Cit9OworCitzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYgeworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlIG5vZGU7CisKKwkvKiB0aGUgcm9vdCBvYmplY3RpZCBvdXIgcmVmIHdpbGwgcG9pbnQgdG8gKi8KKwl1NjQgcm9vdDsKKworCS8qIHRoZSBnZW5lcmF0aW9uIGZvciB0aGUgYmFja3JlZiAqLworCXU2NCBnZW5lcmF0aW9uOworCisJLyogb3duZXJfb2JqZWN0aWQgb2YgdGhlIGJhY2tyZWYgICovCisJdTY0IG93bmVyX29iamVjdGlkOworCisJLyogb3BlcmF0aW9uIGRvbmUgYnkgdGhpcyBlbnRyeSBpbiB0aGUgcmJ0cmVlICovCisJdTggYWN0aW9uOworCisJLyogaWYgcGluID09IDEsIHdoZW4gdGhlIGV4dGVudCBpcyBmcmVlZCBpdCB3aWxsIGJlIHBpbm5lZCB1bnRpbAorCSAqIHRyYW5zYWN0aW9uIGNvbW1pdAorCSAqLworCXVuc2lnbmVkIGludCBwaW46MTsKK307CisKK3N0cnVjdCBidHJmc19kZWxheWVkX3JlZl9yb290IHsKKwlzdHJ1Y3QgcmJfcm9vdCByb290OworCisJLyogdGhpcyBzcGluIGxvY2sgcHJvdGVjdHMgdGhlIHJidHJlZSBhbmQgdGhlIGVudHJpZXMgaW5zaWRlICovCisJc3BpbmxvY2tfdCBsb2NrOworCisJLyogaG93IG1hbnkgZGVsYXllZCByZWYgdXBkYXRlcyB3ZSd2ZSBxdWV1ZWQsIHVzZWQgYnkgdGhlCisJICogdGhyb3R0bGluZyBjb2RlCisJICovCisJdW5zaWduZWQgbG9uZyBudW1fZW50cmllczsKKworCS8qIHRvdGFsIG51bWJlciBvZiBoZWFkIG5vZGVzIGluIHRyZWUgKi8KKwl1bnNpZ25lZCBsb25nIG51bV9oZWFkczsKKworCS8qIHRvdGFsIG51bWJlciBvZiBoZWFkIG5vZGVzIHJlYWR5IGZvciBwcm9jZXNzaW5nICovCisJdW5zaWduZWQgbG9uZyBudW1faGVhZHNfcmVhZHk7CisKKwkvKgorCSAqIHNldCB3aGVuIHRoZSB0cmVlIGlzIGZsdXNoaW5nIGJlZm9yZSBhIHRyYW5zYWN0aW9uIGNvbW1pdCwKKwkgKiB1c2VkIGJ5IHRoZSB0aHJvdHRsaW5nIGNvZGUgdG8gZGVjaWRlIGlmIG5ldyB1cGRhdGVzIG5lZWQKKwkgKiB0byBiZSBydW4gcmlnaHQgYXdheQorCSAqLworCWludCBmbHVzaGluZzsKKworCXU2NCBydW5fZGVsYXllZF9zdGFydDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidHJmc19wdXRfZGVsYXllZF9yZWYoc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKnJlZikKK3sKKwlXQVJOX09OKGF0b21pY19yZWFkKCZyZWYtPnJlZnMpID09IDApOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZyZWYtPnJlZnMpKSB7CisJCVdBUk5fT04ocmVmLT5pbl90cmVlKTsKKwkJa2ZyZWUocmVmKTsKKwl9Cit9CisKK2ludCBidHJmc19hZGRfZGVsYXllZF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsIHU2NCBwYXJlbnQsIHU2NCByZWZfcm9vdCwKKwkJCSAgdTY0IHJlZl9nZW5lcmF0aW9uLCB1NjQgb3duZXJfb2JqZWN0aWQsIGludCBhY3Rpb24sCisJCQkgIGludCBwaW4pOworCitzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCAqCitidHJmc19maW5kX2RlbGF5ZWRfcmVmX2hlYWQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsIHU2NCBieXRlbnIpOworaW50IGJ0cmZzX2RlbGF5ZWRfcmVmX3BlbmRpbmcoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsIHU2NCBieXRlbnIpOworaW50IGJ0cmZzX2xvb2t1cF9leHRlbnRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgYnl0ZW5yLAorCQkJICAgIHU2NCBudW1fYnl0ZXMsIHUzMiAqcmVmcyk7CitpbnQgYnRyZnNfdXBkYXRlX2RlbGF5ZWRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICB1NjQgYnl0ZW5yLCB1NjQgbnVtX2J5dGVzLCB1NjQgb3JpZ19wYXJlbnQsCisJCQkgIHU2NCBwYXJlbnQsIHU2NCBvcmlnX3JlZl9yb290LCB1NjQgcmVmX3Jvb3QsCisJCQkgIHU2NCBvcmlnX3JlZl9nZW5lcmF0aW9uLCB1NjQgcmVmX2dlbmVyYXRpb24sCisJCQkgIHU2NCBvd25lcl9vYmplY3RpZCwgaW50IHBpbik7CitpbnQgYnRyZnNfZGVsYXllZF9yZWZfbG9jayhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCSAgIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICpoZWFkKTsKK2ludCBidHJmc19maW5kX3JlZl9jbHVzdGVyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqY2x1c3RlciwgdTY0IHNlYXJjaF9zdGFydCk7CisvKgorICogYSBub2RlIG1pZ2h0IGxpdmUgaW4gYSBoZWFkIG9yIGEgcmVndWxhciByZWYsIHRoaXMgbGV0cyB5b3UKKyAqIHRlc3QgZm9yIHRoZSBwcm9wZXIgdHlwZSB0byB1c2UuCisgKi8KK3N0YXRpYyBpbnQgYnRyZnNfZGVsYXllZF9yZWZfaXNfaGVhZChzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqbm9kZSkKK3sKKwlyZXR1cm4gbm9kZS0+cGFyZW50ID09ICh1NjQpLTE7Cit9CisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb25zIHRvIGNhc3QgYSBub2RlIGludG8gaXRzIGNvbnRhaW5lcgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZiAqCitidHJmc19kZWxheWVkX25vZGVfdG9fcmVmKHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICpub2RlKQoreworCVdBUk5fT04oYnRyZnNfZGVsYXllZF9yZWZfaXNfaGVhZChub2RlKSk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYsIG5vZGUpOworCit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgKgorYnRyZnNfZGVsYXllZF9ub2RlX3RvX2hlYWQoc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKm5vZGUpCit7CisJV0FSTl9PTighYnRyZnNfZGVsYXllZF9yZWZfaXNfaGVhZChub2RlKSk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCwgbm9kZSk7CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlyLWl0ZW0uYyBiL2ZzL2J0cmZzL2Rpci1pdGVtLmMKaW5kZXggOTI2YTBiMi4uMWQ3MDIzNiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlyLWl0ZW0uYworKysgYi9mcy9idHJmcy9kaXItaXRlbS5jCkBAIC0xNDUsNyArMTQ1LDEwIEBACiAJa2V5Lm9iamVjdGlkID0gZGlyOwogCWJ0cmZzX3NldF9rZXlfdHlwZSgma2V5LCBCVFJGU19ESVJfSVRFTV9LRVkpOwogCWtleS5vZmZzZXQgPSBidHJmc19uYW1lX2hhc2gobmFtZSwgbmFtZV9sZW4pOworCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CisKIAlkYXRhX3NpemUgPSBzaXplb2YoKmRpcl9pdGVtKSArIG5hbWVfbGVuOwogCWRpcl9pdGVtID0gaW5zZXJ0X3dpdGhfb3ZlcmZsb3codHJhbnMsIHJvb3QsIHBhdGgsICZrZXksIGRhdGFfc2l6ZSwKIAkJCQkJbmFtZSwgbmFtZV9sZW4pOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IDZlYzgwYzAuLjkyY2FhODAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJsb2NraW5nLmgiCiAjaW5jbHVkZSAicmVmLWNhY2hlLmgiCiAjaW5jbHVkZSAidHJlZS1sb2cuaCIKKyNpbmNsdWRlICJmcmVlLXNwYWNlLWNhY2hlLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgZXh0ZW50X2lvX29wcyBidHJlZV9leHRlbnRfaW9fb3BzOwogc3RhdGljIHZvaWQgZW5kX3dvcmtxdWV1ZV9mbihzdHJ1Y3QgYnRyZnNfd29yayAqd29yayk7CkBAIC02NjgsMTQgKzY2OSwzMSBAQAogc3RhdGljIGludCBidHJlZV93cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZTsKLQl0cmVlID0gJkJUUkZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCktPmlvX3RyZWU7CisJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKHBhZ2UtPm1hcHBpbmctPmhvc3QpLT5yb290OworCXN0cnVjdCBleHRlbnRfYnVmZmVyICplYjsKKwlpbnQgd2FzX2RpcnR5OwogCi0JaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpIHsKLQkJcmVkaXJ0eV9wYWdlX2Zvcl93cml0ZXBhZ2Uod2JjLCBwYWdlKTsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXJldHVybiAwOworCXRyZWUgPSAmQlRSRlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KS0+aW9fdHJlZTsKKwlpZiAoIShjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKSkgeworCQlyZXR1cm4gZXh0ZW50X3dyaXRlX2Z1bGxfcGFnZSh0cmVlLCBwYWdlLAorCQkJCQkgICAgICBidHJlZV9nZXRfZXh0ZW50LCB3YmMpOwogCX0KLQlyZXR1cm4gZXh0ZW50X3dyaXRlX2Z1bGxfcGFnZSh0cmVlLCBwYWdlLCBidHJlZV9nZXRfZXh0ZW50LCB3YmMpOworCisJcmVkaXJ0eV9wYWdlX2Zvcl93cml0ZXBhZ2Uod2JjLCBwYWdlKTsKKwllYiA9IGJ0cmZzX2ZpbmRfdHJlZV9ibG9jayhyb290LCBwYWdlX29mZnNldChwYWdlKSwKKwkJCQkgICAgICBQQUdFX0NBQ0hFX1NJWkUpOworCVdBUk5fT04oIWViKTsKKworCXdhc19kaXJ0eSA9IHRlc3RfYW5kX3NldF9iaXQoRVhURU5UX0JVRkZFUl9ESVJUWSwgJmViLT5iZmxhZ3MpOworCWlmICghd2FzX2RpcnR5KSB7CisJCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CisJCXJvb3QtPmZzX2luZm8tPmRpcnR5X21ldGFkYXRhX2J5dGVzICs9IFBBR0VfQ0FDSEVfU0laRTsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOworCX0KKwlmcmVlX2V4dGVudF9idWZmZXIoZWIpOworCisJdW5sb2NrX3BhZ2UocGFnZSk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYnRyZWVfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKQEAgLTY4NCwxNSArNzAyLDE1IEBACiAJc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlOwogCXRyZWUgPSAmQlRSRlNfSShtYXBwaW5nLT5ob3N0KS0+aW9fdHJlZTsKIAlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19OT05FKSB7CisJCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShtYXBwaW5nLT5ob3N0KS0+cm9vdDsKIAkJdTY0IG51bV9kaXJ0eTsKLQkJdTY0IHN0YXJ0ID0gMDsKIAkJdW5zaWduZWQgbG9uZyB0aHJlc2ggPSAzMiAqIDEwMjQgKiAxMDI0OwogCiAJCWlmICh3YmMtPmZvcl9rdXBkYXRlKQogCQkJcmV0dXJuIDA7CiAKLQkJbnVtX2RpcnR5ID0gY291bnRfcmFuZ2VfYml0cyh0cmVlLCAmc3RhcnQsICh1NjQpLTEsCi0JCQkJCSAgICAgdGhyZXNoLCBFWFRFTlRfRElSVFkpOworCQkvKiB0aGlzIGlzIGEgYml0IHJhY3ksIGJ1dCB0aGF0J3Mgb2sgKi8KKwkJbnVtX2RpcnR5ID0gcm9vdC0+ZnNfaW5mby0+ZGlydHlfbWV0YWRhdGFfYnl0ZXM7CiAJCWlmIChudW1fZGlydHkgPCB0aHJlc2gpCiAJCQlyZXR1cm4gMDsKIAl9CkBAIC04NTksOSArODc3LDE3IEBACiAJICAgIHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPnRyYW5zaWQpIHsKIAkJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKGJ1Zik7CiAKLQkJLyogdWdoLCBjbGVhcl9leHRlbnRfYnVmZmVyX2RpcnR5IGNhbiBiZSBleHBlbnNpdmUgKi8KLQkJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcoYnVmKTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChFWFRFTlRfQlVGRkVSX0RJUlRZLCAmYnVmLT5iZmxhZ3MpKSB7CisJCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOworCQkJaWYgKHJvb3QtPmZzX2luZm8tPmRpcnR5X21ldGFkYXRhX2J5dGVzID49IGJ1Zi0+bGVuKQorCQkJCXJvb3QtPmZzX2luZm8tPmRpcnR5X21ldGFkYXRhX2J5dGVzIC09IGJ1Zi0+bGVuOworCQkJZWxzZQorCQkJCVdBUk5fT04oMSk7CisJCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CisJCX0KIAorCQkvKiB1Z2gsIGNsZWFyX2V4dGVudF9idWZmZXJfZGlydHkgbmVlZHMgdG8gbG9jayB0aGUgcGFnZSAqLworCQlidHJmc19zZXRfbG9ja19ibG9ja2luZyhidWYpOwogCQljbGVhcl9leHRlbnRfYnVmZmVyX2RpcnR5KCZCVFJGU19JKGJ0cmVlX2lub2RlKS0+aW9fdHJlZSwKIAkJCQkJICBidWYpOwogCX0KQEAgLTEzODcsOCArMTQxMyw2IEBACiAKIAlyZXQgPSBleHRlbnRfcmFuZ2VfdXB0b2RhdGUoaW9fdHJlZSwgc3RhcnQgKyBsZW5ndGgsCiAJCQkJICAgIHN0YXJ0ICsgYnVmX2xlbiAtIDEpOwotCWlmIChyZXQgPT0gMSkKLQkJcmV0dXJuIHJldDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDcxLDEyICsxNDk1LDYgQEAKIAkJdmZzX2NoZWNrX2Zyb3plbihyb290LT5mc19pbmZvLT5zYiwgU0JfRlJFRVpFX1dSSVRFKTsKIAkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fa3RocmVhZF9tdXRleCk7CiAKLQkJaWYgKHJvb3QtPmZzX2luZm8tPnRvdGFsX3JlZl9jYWNoZV9zaXplID4gMjAgKiAxMDI0ICogMTAyNCkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnM6IHRvdGFsIHJlZmVyZW5jZSBjYWNoZSAiCi0JCQkgICAgICAgInNpemUgJWxsdVxuIiwKLQkJCSAgICAgICByb290LT5mc19pbmZvLT50b3RhbF9yZWZfY2FjaGVfc2l6ZSk7Ci0JCX0KLQogCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWN1ciA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247CiAJCWlmICghY3VyKSB7CkBAIC0xNDkzLDYgKzE1MTEsNyBAQAogCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKIAkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwogc2xlZXA6CiAJCXdha2VfdXBfcHJvY2Vzcyhyb290LT5mc19pbmZvLT5jbGVhbmVyX2t0aHJlYWQpOwogCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX2t0aHJlYWRfbXV0ZXgpOwpAQCAtMTU1Miw2ICsxNTcxLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmZnNfaW5mby0+ZGVhZF9yb290cyk7CiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPmhhc2hlcnMpOwogCUlOSVRfTElTVF9IRUFEKCZmc19pbmZvLT5kZWxhbGxvY19pbm9kZXMpOworCUlOSVRfTElTVF9IRUFEKCZmc19pbmZvLT5vcmRlcmVkX29wZXJhdGlvbnMpOwogCXNwaW5fbG9ja19pbml0KCZmc19pbmZvLT5kZWxhbGxvY19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+bmV3X3RyYW5zX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZmc19pbmZvLT5yZWZfY2FjaGVfbG9jayk7CkBAIC0xNjExLDEwICsxNjMxLDYgQEAKIAogCWV4dGVudF9pb190cmVlX2luaXQoJmZzX2luZm8tPnBpbm5lZF9leHRlbnRzLAogCQkJICAgICBmc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nLCBHRlBfTk9GUyk7Ci0JZXh0ZW50X2lvX3RyZWVfaW5pdCgmZnNfaW5mby0+cGVuZGluZ19kZWwsCi0JCQkgICAgIGZzX2luZm8tPmJ0cmVlX2lub2RlLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKLQlleHRlbnRfaW9fdHJlZV9pbml0KCZmc19pbmZvLT5leHRlbnRfaW5zLAotCQkJICAgICBmc19pbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nLCBHRlBfTk9GUyk7CiAJZnNfaW5mby0+ZG9fYmFycmllcnMgPSAxOwogCiAJSU5JVF9MSVNUX0hFQUQoJmZzX2luZm8tPmRlYWRfcmVsb2Nfcm9vdHMpOwpAQCAtMTYyNywxNSArMTY0MywxOCBAQAogCWluc2VydF9pbm9kZV9oYXNoKGZzX2luZm8tPmJ0cmVlX2lub2RlKTsKIAogCW11dGV4X2luaXQoJmZzX2luZm8tPnRyYW5zX211dGV4KTsKKwltdXRleF9pbml0KCZmc19pbmZvLT5vcmRlcmVkX29wZXJhdGlvbnNfbXV0ZXgpOwogCW11dGV4X2luaXQoJmZzX2luZm8tPnRyZWVfbG9nX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT5kcm9wX211dGV4KTsKLQltdXRleF9pbml0KCZmc19pbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQltdXRleF9pbml0KCZmc19pbmZvLT5waW5uZWRfbXV0ZXgpOwogCW11dGV4X2luaXQoJmZzX2luZm8tPmNodW5rX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT50cmFuc2FjdGlvbl9rdGhyZWFkX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT5jbGVhbmVyX211dGV4KTsKIAltdXRleF9pbml0KCZmc19pbmZvLT52b2x1bWVfbXV0ZXgpOwogCW11dGV4X2luaXQoJmZzX2luZm8tPnRyZWVfcmVsb2NfbXV0ZXgpOworCisJYnRyZnNfaW5pdF9mcmVlX2NsdXN0ZXIoJmZzX2luZm8tPm1ldGFfYWxsb2NfY2x1c3Rlcik7CisJYnRyZnNfaW5pdF9mcmVlX2NsdXN0ZXIoJmZzX2luZm8tPmRhdGFfYWxsb2NfY2x1c3Rlcik7CisKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmc19pbmZvLT50cmFuc2FjdGlvbl90aHJvdHRsZSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZnNfaW5mby0+dHJhbnNhY3Rpb25fd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZnNfaW5mby0+YXN5bmNfc3VibWl0X3dhaXQpOwpAQCAtMjM1OCw4ICsyMzc3LDcgQEAKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koYnVmLT5maXJzdF9wYWdlLT5tYXBwaW5nLT5ob3N0KS0+cm9vdDsKIAl1NjQgdHJhbnNpZCA9IGJ0cmZzX2hlYWRlcl9nZW5lcmF0aW9uKGJ1Zik7CiAJc3RydWN0IGlub2RlICpidHJlZV9pbm9kZSA9IHJvb3QtPmZzX2luZm8tPmJ0cmVlX2lub2RlOwotCi0JYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcoYnVmKTsKKwlpbnQgd2FzX2RpcnR5OwogCiAJYnRyZnNfYXNzZXJ0X3RyZWVfbG9ja2VkKGJ1Zik7CiAJaWYgKHRyYW5zaWQgIT0gcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbikgewpAQCAtMjM3MCw3ICsyMzg4LDEzIEBACiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24pOwogCQlXQVJOX09OKDEpOwogCX0KLQlzZXRfZXh0ZW50X2J1ZmZlcl9kaXJ0eSgmQlRSRlNfSShidHJlZV9pbm9kZSktPmlvX3RyZWUsIGJ1Zik7CisJd2FzX2RpcnR5ID0gc2V0X2V4dGVudF9idWZmZXJfZGlydHkoJkJUUkZTX0koYnRyZWVfaW5vZGUpLT5pb190cmVlLAorCQkJCQkgICAgYnVmKTsKKwlpZiAoIXdhc19kaXJ0eSkgeworCQlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOworCQlyb290LT5mc19pbmZvLT5kaXJ0eV9tZXRhZGF0YV9ieXRlcyArPSBidWYtPmxlbjsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOworCX0KIH0KIAogdm9pZCBidHJmc19idHJlZV9iYWxhbmNlX2RpcnR5KHN0cnVjdCBidHJmc19yb290ICpyb290LCB1bnNpZ25lZCBsb25nIG5yKQpAQCAtMjQxMCw2ICsyNDM0LDcgQEAKIGludCBidHJlZV9sb2NrX3BhZ2VfaG9vayhzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqaW9fdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+aW9fdHJlZTsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqZWI7CiAJdW5zaWduZWQgbG9uZyBsZW47CkBAIC0yNDI1LDYgKzI0NTAsMTYgQEAKIAogCWJ0cmZzX3RyZWVfbG9jayhlYik7CiAJYnRyZnNfc2V0X2hlYWRlcl9mbGFnKGViLCBCVFJGU19IRUFERVJfRkxBR19XUklUVEVOKTsKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRVhURU5UX0JVRkZFUl9ESVJUWSwgJmViLT5iZmxhZ3MpKSB7CisJCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CisJCWlmIChyb290LT5mc19pbmZvLT5kaXJ0eV9tZXRhZGF0YV9ieXRlcyA+PSBlYi0+bGVuKQorCQkJcm9vdC0+ZnNfaW5mby0+ZGlydHlfbWV0YWRhdGFfYnl0ZXMgLT0gZWItPmxlbjsKKwkJZWxzZQorCQkJV0FSTl9PTigxKTsKKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2xvY2spOworCX0KKwogCWJ0cmZzX3RyZWVfdW5sb2NrKGViKTsKIAlmcmVlX2V4dGVudF9idWZmZXIoZWIpOwogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5oIGIvZnMvYnRyZnMvZGlzay1pby5oCmluZGV4IDk1MDI5ZGIuLmM5NThlY2IgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uaAorKysgYi9mcy9idHJmcy9kaXNrLWlvLmgKQEAgLTcyLDYgKzcyLDcgQEAKIHZvaWQgYnRyZnNfYnRyZWVfYmFsYW5jZV9kaXJ0eShzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdW5zaWduZWQgbG9uZyBucik7CiBpbnQgYnRyZnNfZnJlZV9mc19yb290KHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvLCBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCk7CiB2b2lkIGJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYpOwordm9pZCBidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eV9ub25ibG9ja2luZyhzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYnVmKTsKIGludCBidHJmc19idWZmZXJfdXB0b2RhdGUoc3RydWN0IGV4dGVudF9idWZmZXIgKmJ1ZiwgdTY0IHBhcmVudF90cmFuc2lkKTsKIGludCBidHJmc19zZXRfYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBleHRlbnRfYnVmZmVyICpidWYpOwogaW50IHdhaXRfb25fdHJlZV9ibG9ja193cml0ZWJhY2soc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCBmZWZlODNhLi4xNzhkZjRjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJ2b2x1bWVzLmgiCiAjaW5jbHVkZSAibG9ja2luZy5oIgogI2luY2x1ZGUgInJlZi1jYWNoZS5oIgorI2luY2x1ZGUgImZyZWUtc3BhY2UtY2FjaGUuaCIKIAogI2RlZmluZSBQRU5ESU5HX0VYVEVOVF9JTlNFUlQgMAogI2RlZmluZSBQRU5ESU5HX0VYVEVOVF9ERUxFVEUgMQpAQCAtNDksMTcgKzUwLDIzIEBACiAJaW50IGRlbDsKIH07CiAKLXN0YXRpYyBpbnQgZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqZXh0ZW50X3Jvb3QsIGludCBhbGwpOwotc3RhdGljIGludCBkZWxfcGVuZGluZ19leHRlbnRzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpleHRlbnRfcm9vdCwgaW50IGFsbCk7Ci1zdGF0aWMgaW50IHBpbl9kb3duX2J5dGVzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCSAgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgaW50IGlzX2RhdGEpOworc3RhdGljIGludCBfX2J0cmZzX2FsbG9jX3Jlc2VydmVkX2V4dGVudChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgcGFyZW50LAorCQkJCQkgdTY0IHJvb3Rfb2JqZWN0aWQsIHU2NCByZWZfZ2VuZXJhdGlvbiwKKwkJCQkJIHU2NCBvd25lciwgc3RydWN0IGJ0cmZzX2tleSAqaW5zLAorCQkJCQkgaW50IHJlZl9tb2QpOworc3RhdGljIGludCB1cGRhdGVfcmVzZXJ2ZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkgICB1NjQgYnl0ZW5yLCB1NjQgbnVtLCBpbnQgcmVzZXJ2ZSk7CiBzdGF0aWMgaW50IHVwZGF0ZV9ibG9ja19ncm91cChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICAgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgaW50IGFsbG9jLAogCQkJICAgICAgaW50IG1hcmtfZnJlZSk7CitzdGF0aWMgbm9pbmxpbmUgaW50IF9fYnRyZnNfZnJlZV9leHRlbnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCQl1NjQgYnl0ZW5yLCB1NjQgbnVtX2J5dGVzLCB1NjQgcGFyZW50LAorCQkJCQl1NjQgcm9vdF9vYmplY3RpZCwgdTY0IHJlZl9nZW5lcmF0aW9uLAorCQkJCQl1NjQgb3duZXJfb2JqZWN0aWQsIGludCBwaW4sCisJCQkJCWludCByZWZfdG9fZHJvcCk7CiAKIHN0YXRpYyBpbnQgZG9fY2h1bmtfYWxsb2Moc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgIHN0cnVjdCBidHJmc19yb290ICpleHRlbnRfcm9vdCwgdTY0IGFsbG9jX2J5dGVzLApAQCAtMTYwLDcgKzE2Nyw2IEBACiAJdTY0IGV4dGVudF9zdGFydCwgZXh0ZW50X2VuZCwgc2l6ZTsKIAlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmaW5mby0+cGlubmVkX211dGV4KTsKIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKIAkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KCZpbmZvLT5waW5uZWRfZXh0ZW50cywgc3RhcnQsCiAJCQkJCSAgICAmZXh0ZW50X3N0YXJ0LCAmZXh0ZW50X2VuZCwKQEAgLTE4Niw3ICsxOTIsNiBAQAogCQlyZXQgPSBidHJmc19hZGRfZnJlZV9zcGFjZShibG9ja19ncm91cCwgc3RhcnQsIHNpemUpOwogCQlCVUdfT04ocmV0KTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5waW5uZWRfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODUsOCArMjkwLDggQEAKIAkJCSAgIGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQgKwogCQkJICAgYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQpOwogCi0JcmVtb3ZlX3NiX2Zyb21fY2FjaGUocm9vdCwgYmxvY2tfZ3JvdXApOwogCWJsb2NrX2dyb3VwLT5jYWNoZWQgPSAxOworCXJlbW92ZV9zYl9mcm9tX2NhY2hlKHJvb3QsIGJsb2NrX2dyb3VwKTsKIAlyZXQgPSAwOwogZXJyOgogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKQEAgLTMyMCw3ICszMjUsNyBAQAogCXJldHVybiBjYWNoZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHB1dF9ibG9ja19ncm91cChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmNhY2hlKQordm9pZCBidHJmc19wdXRfYmxvY2tfZ3JvdXAoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpjYWNoZSkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2FjaGUtPmNvdW50KSkKIAkJa2ZyZWUoY2FjaGUpOwpAQCAtMzkzLDEyICszOTgsMTIgQEAKIAkJCSAgICBkaXZfZmFjdG9yKGNhY2hlLT5rZXkub2Zmc2V0LCBmYWN0b3IpKSB7CiAJCQkJZ3JvdXBfc3RhcnQgPSBjYWNoZS0+a2V5Lm9iamVjdGlkOwogCQkJCXNwaW5fdW5sb2NrKCZjYWNoZS0+bG9jayk7Ci0JCQkJcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwkJCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOwogCQkJCWdvdG8gZm91bmQ7CiAJCQl9CiAJCX0KIAkJc3Bpbl91bmxvY2soJmNhY2hlLT5sb2NrKTsKLQkJcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQogCWlmICghd3JhcHBlZCkgewpAQCAtNTU0LDI2MiArNTU5LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIHVwZGF0ZXMgYWxsIHRoZSBiYWNrcmVmcyB0aGF0IGFyZSBwZW5kaW5nIG9uIHVwZGF0ZV9saXN0IGZvciB0aGUKLSAqIGV4dGVudF9yb290Ci0gKi8KLXN0YXRpYyBub2lubGluZSBpbnQgdXBkYXRlX2JhY2tyZWZzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqZXh0ZW50X3Jvb3QsCi0JCQkJICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAotCQkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICp1cGRhdGVfbGlzdCkKLXsKLQlzdHJ1Y3QgYnRyZnNfa2V5IGtleTsKLQlzdHJ1Y3QgYnRyZnNfZXh0ZW50X3JlZiAqcmVmOwotCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gZXh0ZW50X3Jvb3QtPmZzX2luZm87Ci0Jc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wICpvcDsKLQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVhZjsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpjdXIgPSB1cGRhdGVfbGlzdC0+bmV4dDsKLQl1NjQgcmVmX29iamVjdGlkOwotCXU2NCByZWZfcm9vdCA9IGV4dGVudF9yb290LT5yb290X2tleS5vYmplY3RpZDsKLQotCW9wID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCwgbGlzdCk7Ci0KLXNlYXJjaDoKLQlrZXkub2JqZWN0aWQgPSBvcC0+Ynl0ZW5yOwotCWtleS50eXBlID0gQlRSRlNfRVhURU5UX1JFRl9LRVk7Ci0Ja2V5Lm9mZnNldCA9IG9wLT5vcmlnX3BhcmVudDsKLQotCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCBleHRlbnRfcm9vdCwgJmtleSwgcGF0aCwgMCwgMSk7Ci0JQlVHX09OKHJldCk7Ci0KLQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0KLWxvb3A6Ci0JcmVmID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sIHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKLQotCXJlZl9vYmplY3RpZCA9IGJ0cmZzX3JlZl9vYmplY3RpZChsZWFmLCByZWYpOwotCi0JaWYgKGJ0cmZzX3JlZl9yb290KGxlYWYsIHJlZikgIT0gcmVmX3Jvb3QgfHwKLQkgICAgYnRyZnNfcmVmX2dlbmVyYXRpb24obGVhZiwgcmVmKSAhPSBvcC0+b3JpZ19nZW5lcmF0aW9uIHx8Ci0JICAgIChyZWZfb2JqZWN0aWQgIT0gb3AtPmxldmVsICYmCi0JICAgICByZWZfb2JqZWN0aWQgIT0gQlRSRlNfTVVMVElQTEVfT0JKRUNUSURTKSkgewotCQlwcmludGsoS0VSTl9FUlIgImJ0cmZzIGNvdWxkbid0IGZpbmQgJWxsdSwgcGFyZW50ICVsbHUsICIKLQkJICAgICAgICJyb290ICVsbHUsIG93bmVyICV1XG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvcC0+Ynl0ZW5yLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvcC0+b3JpZ19wYXJlbnQsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlZl9yb290LCBvcC0+bGV2ZWwpOwotCQlidHJmc19wcmludF9sZWFmKGV4dGVudF9yb290LCBsZWFmKTsKLQkJQlVHKCk7Ci0JfQotCi0Ja2V5Lm9iamVjdGlkID0gb3AtPmJ5dGVucjsKLQlrZXkub2Zmc2V0ID0gb3AtPnBhcmVudDsKLQlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9SRUZfS0VZOwotCXJldCA9IGJ0cmZzX3NldF9pdGVtX2tleV9zYWZlKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCwgJmtleSk7Ci0JQlVHX09OKHJldCk7Ci0JcmVmID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sIHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKLQlidHJmc19zZXRfcmVmX2dlbmVyYXRpb24obGVhZiwgcmVmLCBvcC0+Z2VuZXJhdGlvbik7Ci0KLQljdXIgPSBjdXItPm5leHQ7Ci0KLQlsaXN0X2RlbF9pbml0KCZvcC0+bGlzdCk7Ci0JdW5sb2NrX2V4dGVudCgmaW5mby0+ZXh0ZW50X2lucywgb3AtPmJ5dGVuciwKLQkJICAgICAgb3AtPmJ5dGVuciArIG9wLT5udW1fYnl0ZXMgLSAxLCBHRlBfTk9GUyk7Ci0Ja2ZyZWUob3ApOwotCi0JaWYgKGN1ciA9PSB1cGRhdGVfbGlzdCkgewotCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXRoLT5ub2Rlc1swXSk7Ci0JCWJ0cmZzX3JlbGVhc2VfcGF0aChleHRlbnRfcm9vdCwgcGF0aCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCW9wID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCwgbGlzdCk7Ci0KLQlwYXRoLT5zbG90c1swXSsrOwotCXdoaWxlIChwYXRoLT5zbG90c1swXSA8IGJ0cmZzX2hlYWRlcl9ucml0ZW1zKGxlYWYpKSB7Ci0JCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShsZWFmLCAma2V5LCBwYXRoLT5zbG90c1swXSk7Ci0JCWlmIChrZXkub2JqZWN0aWQgPT0gb3AtPmJ5dGVuciAmJgotCQkgICAga2V5LnR5cGUgPT0gQlRSRlNfRVhURU5UX1JFRl9LRVkpCi0JCQlnb3RvIGxvb3A7Ci0JCXBhdGgtPnNsb3RzWzBdKys7Ci0JfQotCi0JYnRyZnNfbWFya19idWZmZXJfZGlydHkocGF0aC0+bm9kZXNbMF0pOwotCWJ0cmZzX3JlbGVhc2VfcGF0aChleHRlbnRfcm9vdCwgcGF0aCk7Ci0JZ290byBzZWFyY2g7Ci0KLW91dDoKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIG5vaW5saW5lIGludCBpbnNlcnRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCQkgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqZXh0ZW50X3Jvb3QsCi0JCQkJICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCi0JCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqaW5zZXJ0X2xpc3QsIGludCBucikKLXsKLQlzdHJ1Y3QgYnRyZnNfa2V5ICprZXlzOwotCXUzMiAqZGF0YV9zaXplOwotCXN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCAqb3A7Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqY3VyID0gaW5zZXJ0X2xpc3QtPm5leHQ7Ci0Jc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSBleHRlbnRfcm9vdC0+ZnNfaW5mbzsKLQl1NjQgcmVmX3Jvb3QgPSBleHRlbnRfcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQ7Ci0JaW50IGkgPSAwLCBsYXN0ID0gMCwgcmV0OwotCWludCB0b3RhbCA9IG5yICogMjsKLQotCWlmICghbnIpCi0JCXJldHVybiAwOwotCi0Ja2V5cyA9IGt6YWxsb2ModG90YWwgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2tleSksIEdGUF9OT0ZTKTsKLQlpZiAoIWtleXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGF0YV9zaXplID0ga3phbGxvYyh0b3RhbCAqIHNpemVvZih1MzIpLCBHRlBfTk9GUyk7Ci0JaWYgKCFkYXRhX3NpemUpIHsKLQkJa2ZyZWUoa2V5cyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkob3AsIGluc2VydF9saXN0LCBsaXN0KSB7Ci0JCWtleXNbaV0ub2JqZWN0aWQgPSBvcC0+Ynl0ZW5yOwotCQlrZXlzW2ldLm9mZnNldCA9IG9wLT5udW1fYnl0ZXM7Ci0JCWtleXNbaV0udHlwZSA9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWTsKLQkJZGF0YV9zaXplW2ldID0gc2l6ZW9mKHN0cnVjdCBidHJmc19leHRlbnRfaXRlbSk7Ci0JCWkrKzsKLQotCQlrZXlzW2ldLm9iamVjdGlkID0gb3AtPmJ5dGVucjsKLQkJa2V5c1tpXS5vZmZzZXQgPSBvcC0+cGFyZW50OwotCQlrZXlzW2ldLnR5cGUgPSBCVFJGU19FWFRFTlRfUkVGX0tFWTsKLQkJZGF0YV9zaXplW2ldID0gc2l6ZW9mKHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKLQkJaSsrOwotCX0KLQotCW9wID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCwgbGlzdCk7Ci0JaSA9IDA7Ci0Jd2hpbGUgKGkgPCB0b3RhbCkgewotCQlpbnQgYzsKLQkJcmV0ID0gYnRyZnNfaW5zZXJ0X3NvbWVfaXRlbXModHJhbnMsIGV4dGVudF9yb290LCBwYXRoLAotCQkJCQkgICAgICBrZXlzK2ksIGRhdGFfc2l6ZStpLCB0b3RhbC1pKTsKLQkJQlVHX09OKHJldCA8IDApOwotCi0JCWlmIChsYXN0ICYmIHJldCA+IDEpCi0JCQlCVUcoKTsKLQotCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0JCWZvciAoYyA9IDA7IGMgPCByZXQ7IGMrKykgewotCQkJaW50IHJlZl9maXJzdCA9IGtleXNbaV0udHlwZSA9PSBCVFJGU19FWFRFTlRfUkVGX0tFWTsKLQotCQkJLyoKLQkJCSAqIGlmIHRoZSBmaXJzdCBpdGVtIHdlIGluc2VydGVkIHdhcyBhIGJhY2tyZWYsIHRoZW4KLQkJCSAqIHRoZSBFWFRFTlRfSVRFTSB3aWxsIGJlIHRoZSBvZGQgYydzLCBlbHNlIGl0IHdpbGwKLQkJCSAqIGJlIHRoZSBldmVuIGMncwotCQkJICovCi0JCQlpZiAoKHJlZl9maXJzdCAmJiAoYyAlIDIpKSB8fAotCQkJICAgICghcmVmX2ZpcnN0ICYmICEoYyAlIDIpKSkgewotCQkJCXN0cnVjdCBidHJmc19leHRlbnRfaXRlbSAqaXRtOwotCi0JCQkJaXRtID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0gKyBjLAotCQkJCQkJICAgICBzdHJ1Y3QgYnRyZnNfZXh0ZW50X2l0ZW0pOwotCQkJCWJ0cmZzX3NldF9leHRlbnRfcmVmcyhwYXRoLT5ub2Rlc1swXSwgaXRtLCAxKTsKLQkJCQlvcC0+ZGVsKys7Ci0JCQl9IGVsc2UgewotCQkJCXN0cnVjdCBidHJmc19leHRlbnRfcmVmICpyZWY7Ci0KLQkJCQlyZWYgPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSArIGMsCi0JCQkJCQkgICAgIHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKLQkJCQlidHJmc19zZXRfcmVmX3Jvb3QobGVhZiwgcmVmLCByZWZfcm9vdCk7Ci0JCQkJYnRyZnNfc2V0X3JlZl9nZW5lcmF0aW9uKGxlYWYsIHJlZiwKLQkJCQkJCQkgb3AtPmdlbmVyYXRpb24pOwotCQkJCWJ0cmZzX3NldF9yZWZfb2JqZWN0aWQobGVhZiwgcmVmLCBvcC0+bGV2ZWwpOwotCQkJCWJ0cmZzX3NldF9yZWZfbnVtX3JlZnMobGVhZiwgcmVmLCAxKTsKLQkJCQlvcC0+ZGVsKys7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiB1c2luZyBkZWwgdG8gc2VlIHdoZW4gaXRzIG9rIHRvIGZyZWUgdXAgdGhlCi0JCQkgKiBwZW5kaW5nX2V4dGVudF9vcC4gIEluIHRoZSBjYXNlIHdoZXJlIHdlIGluc2VydCB0aGUKLQkJCSAqIGxhc3QgaXRlbSBvbiB0aGUgbGlzdCBpbiBvcmRlciB0byBoZWxwIGRvIGJhdGNoaW5nCi0JCQkgKiB3ZSBuZWVkIHRvIG5vdCBmcmVlIHRoZSBleHRlbnQgb3AgdW50aWwgd2UgYWN0dWFsbHkKLQkJCSAqIGluc2VydCB0aGUgZXh0ZW50X2l0ZW0KLQkJCSAqLwotCQkJaWYgKG9wLT5kZWwgPT0gMikgewotCQkJCXVubG9ja19leHRlbnQoJmluZm8tPmV4dGVudF9pbnMsIG9wLT5ieXRlbnIsCi0JCQkJCSAgICAgIG9wLT5ieXRlbnIgKyBvcC0+bnVtX2J5dGVzIC0gMSwKLQkJCQkJICAgICAgR0ZQX05PRlMpOwotCQkJCWN1ciA9IGN1ci0+bmV4dDsKLQkJCQlsaXN0X2RlbF9pbml0KCZvcC0+bGlzdCk7Ci0JCQkJa2ZyZWUob3ApOwotCQkJCWlmIChjdXIgIT0gaW5zZXJ0X2xpc3QpCi0JCQkJCW9wID0gbGlzdF9lbnRyeShjdXIsCi0JCQkJCQlzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AsCi0JCQkJCQlsaXN0KTsKLQkJCX0KLQkJfQotCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKLQkJYnRyZnNfcmVsZWFzZV9wYXRoKGV4dGVudF9yb290LCBwYXRoKTsKLQotCQkvKgotCQkgKiBPayBiYWNrcmVmJ3MgYW5kIGl0ZW1zIHVzdWFsbHkgZ28gcmlnaHQgbmV4dCB0byBlYWNob3RoZXIsCi0JCSAqIGJ1dCBpZiB3ZSBjb3VsZCBvbmx5IGluc2VydCAxIGl0ZW0gdGhhdCBtZWFucyB0aGF0IHdlCi0JCSAqIGluc2VydGVkIG9uIHRoZSBlbmQgb2YgYSBsZWFmLCBhbmQgd2UgaGF2ZSBubyBpZGVhIHdoYXQgbWF5Ci0JCSAqIGJlIG9uIHRoZSBuZXh0IGxlYWYgc28gd2UganVzdCBwbGF5IGl0IHNhZmUuICBJbiBvcmRlciB0bwotCQkgKiB0cnkgYW5kIGhlbHAgdGhpcyBjYXNlIHdlIGluc2VydCB0aGUgbGFzdCB0aGluZyBvbiBvdXIKLQkJICogaW5zZXJ0IGxpc3Qgc28gaG9wZWZ1bGx5IGl0IHdpbGwgZW5kIHVwIGJlaW5nIHRoZSBsYXN0Ci0JCSAqIHRoaW5nIG9uIHRoZSBsZWFmIGFuZCBldmVyeXRoaW5nIGVsc2Ugd2lsbCBiZSBiZWZvcmUgaXQsCi0JCSAqIHdoaWNoIHdpbGwgbGV0IHVzIGluc2VydCBhIHdob2xlIGJ1bmNoIG9mIGl0ZW1zIGF0IHRoZSBzYW1lCi0JCSAqIHRpbWUuCi0JCSAqLwotCQlpZiAocmV0ID09IDEgJiYgIWxhc3QgJiYgKGkgKyByZXQgPCB0b3RhbCkpIHsKLQkJCS8qCi0JCQkgKiBsYXN0OiB3aGVyZSB3ZSB3aWxsIHBpY2sgdXAgdGhlIG5leHQgdGltZSBhcm91bmQKLQkJCSAqIGk6IG91ciBjdXJyZW50IGtleSB0byBpbnNlcnQsIHdpbGwgYmUgdG90YWwgLSAxCi0JCQkgKiBjdXI6IHRoZSBjdXJyZW50IG9wIHdlIGFyZSBzY3Jld2luZyB3aXRoCi0JCQkgKiBvcDogZHVoCi0JCQkgKi8KLQkJCWxhc3QgPSBpICsgcmV0OwotCQkJaSA9IHRvdGFsIC0gMTsKLQkJCWN1ciA9IGluc2VydF9saXN0LT5wcmV2OwotCQkJb3AgPSBsaXN0X2VudHJ5KGN1ciwgc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wLCBsaXN0KTsKLQkJfSBlbHNlIGlmIChsYXN0KSB7Ci0JCQkvKgotCQkJICogb2sgd2Ugc3VjY2Vzc2Z1bGx5IGluc2VydGVkIHRoZSBsYXN0IGl0ZW0gb24gdGhlCi0JCQkgKiBsaXN0LCBsZXRzIHJlc2V0IGV2ZXJ5dGhpbmcKLQkJCSAqCi0JCQkgKiBpOiBvdXIgY3VycmVudCBrZXkgdG8gaW5zZXJ0LCBzbyB3aGVyZSB3ZSBsZWZ0IG9mZgotCQkJICogICAgbGFzdCB0aW1lCi0JCQkgKiBsYXN0OiBkb25lIHdpdGggdGhpcwotCQkJICogY3VyOiB0aGUgb3Agd2UgYXJlIG1lc3Npbmcgd2l0aAotCQkJICogb3A6IGR1aAotCQkJICogdG90YWw6IHNpbmNlIHdlIGluc2VydGVkIHRoZSBsYXN0IGtleSwgd2UgbmVlZCB0bwotCQkJICogICAgICAgIGRlY3JlbWVudCB0b3RhbCBzbyB3ZSBkb250IG92ZXJmbG93Ci0JCQkgKi8KLQkJCWkgPSBsYXN0OwotCQkJbGFzdCA9IDA7Ci0JCQl0b3RhbC0tOwotCQkJaWYgKGkgPCB0b3RhbCkgewotCQkJCWN1ciA9IGluc2VydF9saXN0LT5uZXh0OwotCQkJCW9wID0gbGlzdF9lbnRyeShjdXIsIHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCwKLQkJCQkJCWxpc3QpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaSArPSByZXQ7Ci0JCX0KLQotCQljb25kX3Jlc2NoZWQoKTsKLQl9Ci0JcmV0ID0gMDsKLQlrZnJlZShrZXlzKTsKLQlrZnJlZShkYXRhX3NpemUpOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBub2lubGluZSBpbnQgaW5zZXJ0X2V4dGVudF9iYWNrcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCQkgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCQkgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAogCQkJCQkgIHU2NCBieXRlbnIsIHU2NCBwYXJlbnQsCiAJCQkJCSAgdTY0IHJlZl9yb290LCB1NjQgcmVmX2dlbmVyYXRpb24sCi0JCQkJCSAgdTY0IG93bmVyX29iamVjdGlkKQorCQkJCQkgIHU2NCBvd25lcl9vYmplY3RpZCwKKwkJCQkJICBpbnQgcmVmc190b19hZGQpCiB7CiAJc3RydWN0IGJ0cmZzX2tleSBrZXk7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmxlYWY7CkBAIC04MjksOSArNTg1LDEwIEBACiAJCWJ0cmZzX3NldF9yZWZfcm9vdChsZWFmLCByZWYsIHJlZl9yb290KTsKIAkJYnRyZnNfc2V0X3JlZl9nZW5lcmF0aW9uKGxlYWYsIHJlZiwgcmVmX2dlbmVyYXRpb24pOwogCQlidHJmc19zZXRfcmVmX29iamVjdGlkKGxlYWYsIHJlZiwgb3duZXJfb2JqZWN0aWQpOwotCQlidHJmc19zZXRfcmVmX251bV9yZWZzKGxlYWYsIHJlZiwgMSk7CisJCWJ0cmZzX3NldF9yZWZfbnVtX3JlZnMobGVhZiwgcmVmLCByZWZzX3RvX2FkZCk7CiAJfSBlbHNlIGlmIChyZXQgPT0gLUVFWElTVCkgewogCQl1NjQgZXhpc3Rpbmdfb3duZXI7CisKIAkJQlVHX09OKG93bmVyX29iamVjdGlkIDwgQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCk7CiAJCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKIAkJcmVmID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sCkBAIC04NDUsNyArNjAyLDcgQEAKIAogCQludW1fcmVmcyA9IGJ0cmZzX3JlZl9udW1fcmVmcyhsZWFmLCByZWYpOwogCQlCVUdfT04obnVtX3JlZnMgPT0gMCk7Ci0JCWJ0cmZzX3NldF9yZWZfbnVtX3JlZnMobGVhZiwgcmVmLCBudW1fcmVmcyArIDEpOworCQlidHJmc19zZXRfcmVmX251bV9yZWZzKGxlYWYsIHJlZiwgbnVtX3JlZnMgKyByZWZzX3RvX2FkZCk7CiAKIAkJZXhpc3Rpbmdfb3duZXIgPSBidHJmc19yZWZfb2JqZWN0aWQobGVhZiwgcmVmKTsKIAkJaWYgKGV4aXN0aW5nX293bmVyICE9IG93bmVyX29iamVjdGlkICYmCkBAIC04NTcsNiArNjE0LDcgQEAKIAl9IGVsc2UgewogCQlnb3RvIG91dDsKIAl9CisJYnRyZnNfdW5sb2NrX3VwX3NhZmUocGF0aCwgMSk7CiAJYnRyZnNfbWFya19idWZmZXJfZGlydHkocGF0aC0+bm9kZXNbMF0pOwogb3V0OgogCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKQEAgLTg2NSw3ICs2MjMsOCBAQAogCiBzdGF0aWMgbm9pbmxpbmUgaW50IHJlbW92ZV9leHRlbnRfYmFja3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkJICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCQkJICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCkKKwkJCQkJICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKKwkJCQkJICBpbnQgcmVmc190b19kcm9wKQogewogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwogCXN0cnVjdCBidHJmc19leHRlbnRfcmVmICpyZWY7CkBAIC04NzUsOCArNjM0LDggQEAKIAlsZWFmID0gcGF0aC0+bm9kZXNbMF07CiAJcmVmID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgcGF0aC0+c2xvdHNbMF0sIHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKIAludW1fcmVmcyA9IGJ0cmZzX3JlZl9udW1fcmVmcyhsZWFmLCByZWYpOwotCUJVR19PTihudW1fcmVmcyA9PSAwKTsKLQludW1fcmVmcyAtPSAxOworCUJVR19PTihudW1fcmVmcyA8IHJlZnNfdG9fZHJvcCk7CisJbnVtX3JlZnMgLT0gcmVmc190b19kcm9wOwogCWlmIChudW1fcmVmcyA9PSAwKSB7CiAJCXJldCA9IGJ0cmZzX2RlbF9pdGVtKHRyYW5zLCByb290LCBwYXRoKTsKIAl9IGVsc2UgewpAQCAtOTI3LDMzMiArNjg2LDI4IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIG5vaW5saW5lIGludCBmcmVlX2V4dGVudHMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkJIHN0cnVjdCBidHJmc19yb290ICpleHRlbnRfcm9vdCwKLQkJCQkgc3RydWN0IGxpc3RfaGVhZCAqZGVsX2xpc3QpCi17Ci0Jc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSBleHRlbnRfcm9vdC0+ZnNfaW5mbzsKLQlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKLQlzdHJ1Y3QgYnRyZnNfa2V5IGtleSwgZm91bmRfa2V5OwotCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwotCXN0cnVjdCBsaXN0X2hlYWQgKmN1cjsKLQlzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AgKm9wOwotCXN0cnVjdCBidHJmc19leHRlbnRfaXRlbSAqZWk7Ci0JaW50IHJldCwgbnVtX3RvX2RlbCwgZXh0ZW50X3Nsb3QgPSAwLCBmb3VuZF9leHRlbnQgPSAwOwotCXUzMiByZWZzOwotCXU2NCBieXRlc19mcmVlZCA9IDA7Ci0KLQlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwotCWlmICghcGF0aCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcGF0aC0+cmVhZGEgPSAxOwotCi1zZWFyY2g6Ci0JLyogc2VhcmNoIGZvciB0aGUgYmFja3JlZiBmb3IgdGhlIGN1cnJlbnQgcmVmIHdlIHdhbnQgdG8gZGVsZXRlICovCi0JY3VyID0gZGVsX2xpc3QtPm5leHQ7Ci0Jb3AgPSBsaXN0X2VudHJ5KGN1ciwgc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wLCBsaXN0KTsKLQlyZXQgPSBsb29rdXBfZXh0ZW50X2JhY2tyZWYodHJhbnMsIGV4dGVudF9yb290LCBwYXRoLCBvcC0+Ynl0ZW5yLAotCQkJCSAgICBvcC0+b3JpZ19wYXJlbnQsCi0JCQkJICAgIGV4dGVudF9yb290LT5yb290X2tleS5vYmplY3RpZCwKLQkJCQkgICAgb3AtPm9yaWdfZ2VuZXJhdGlvbiwgb3AtPmxldmVsLCAxKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgdW5hYmxlIHRvIGZpbmQgYmFja3JlZiBieXRlIG5yICVsbHUgIgotCQkgICAgICAgInJvb3QgJWxsdSBnZW4gJWxsdSBvd25lciAldVxuIiwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb3AtPmJ5dGVuciwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZXh0ZW50X3Jvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvcC0+b3JpZ19nZW5lcmF0aW9uLCBvcC0+bGV2ZWwpOwotCQlidHJmc19wcmludF9sZWFmKGV4dGVudF9yb290LCBwYXRoLT5ub2Rlc1swXSk7Ci0JCVdBUk5fT04oMSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWV4dGVudF9zbG90ID0gcGF0aC0+c2xvdHNbMF07Ci0JbnVtX3RvX2RlbCA9IDE7Ci0JZm91bmRfZXh0ZW50ID0gMDsKLQotCS8qCi0JICogaWYgd2UgYXJlbid0IHRoZSBmaXJzdCBpdGVtIG9uIHRoZSBsZWFmIHdlIGNhbiBtb3ZlIGJhY2sgb25lIGFuZCBzZWUKLQkgKiBpZiBvdXIgcmVmIGlzIHJpZ2h0IG5leHQgdG8gb3VyIGV4dGVudCBpdGVtCi0JICovCi0JaWYgKGxpa2VseShleHRlbnRfc2xvdCkpIHsKLQkJZXh0ZW50X3Nsb3QtLTsKLQkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KHBhdGgtPm5vZGVzWzBdLCAmZm91bmRfa2V5LAotCQkJCSAgICAgIGV4dGVudF9zbG90KTsKLQkJaWYgKGZvdW5kX2tleS5vYmplY3RpZCA9PSBvcC0+Ynl0ZW5yICYmCi0JCSAgICBmb3VuZF9rZXkudHlwZSA9PSBCVFJGU19FWFRFTlRfSVRFTV9LRVkgJiYKLQkJICAgIGZvdW5kX2tleS5vZmZzZXQgPT0gb3AtPm51bV9ieXRlcykgewotCQkJbnVtX3RvX2RlbCsrOwotCQkJZm91bmRfZXh0ZW50ID0gMTsKLQkJfQotCX0KLQotCS8qCi0JICogaWYgd2UgZGlkbid0IGZpbmQgdGhlIGV4dGVudCB3ZSBuZWVkIHRvIGRlbGV0ZSB0aGUgYmFja3JlZiBhbmQgdGhlbgotCSAqIHNlYXJjaCBmb3IgdGhlIGV4dGVudCBpdGVtIGtleSBzbyB3ZSBjYW4gdXBkYXRlIGl0cyByZWYgY291bnQKLQkgKi8KLQlpZiAoIWZvdW5kX2V4dGVudCkgewotCQlrZXkub2JqZWN0aWQgPSBvcC0+Ynl0ZW5yOwotCQlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWTsKLQkJa2V5Lm9mZnNldCA9IG9wLT5udW1fYnl0ZXM7Ci0KLQkJcmV0ID0gcmVtb3ZlX2V4dGVudF9iYWNrcmVmKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCk7Ci0JCUJVR19PTihyZXQpOwotCQlidHJmc19yZWxlYXNlX3BhdGgoZXh0ZW50X3Jvb3QsIHBhdGgpOwotCQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgZXh0ZW50X3Jvb3QsICZrZXksIHBhdGgsIC0xLCAxKTsKLQkJQlVHX09OKHJldCk7Ci0JCWV4dGVudF9zbG90ID0gcGF0aC0+c2xvdHNbMF07Ci0JfQotCi0JLyogdGhpcyBpcyB3aGVyZSB3ZSB1cGRhdGUgdGhlIHJlZiBjb3VudCBmb3IgdGhlIGV4dGVudCAqLwotCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKLQllaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIGV4dGVudF9zbG90LCBzdHJ1Y3QgYnRyZnNfZXh0ZW50X2l0ZW0pOwotCXJlZnMgPSBidHJmc19leHRlbnRfcmVmcyhsZWFmLCBlaSk7Ci0JQlVHX09OKHJlZnMgPT0gMCk7Ci0JcmVmcy0tOwotCWJ0cmZzX3NldF9leHRlbnRfcmVmcyhsZWFmLCBlaSwgcmVmcyk7Ci0KLQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKLQotCS8qCi0JICogVGhpcyBleHRlbnQgbmVlZHMgZGVsZXRpbmcuICBUaGUgcmVhc29uIGN1cl9zbG90IGlzIGV4dGVudF9zbG90ICsKLQkgKiBudW1fdG9fZGVsIGlzIGJlY2F1c2UgZXh0ZW50X3Nsb3QgcG9pbnRzIHRvIHRoZSBzbG90IHdoZXJlIHRoZSBleHRlbnQKLQkgKiBpcywgYW5kIGlmIHRoZSBiYWNrcmVmIHdhcyBub3QgcmlnaHQgbmV4dCB0byB0aGUgZXh0ZW50IHdlIHdpbGwgYmUKLQkgKiBkZWxldGluZyBhdCBsZWFzdCAxIGl0ZW0sIGFuZCB3aWxsIHdhbnQgdG8gc3RhcnQgc2VhcmNoaW5nIGF0IHRoZQotCSAqIHNsb3QgZGlyZWN0bHkgbmV4dCB0byBleHRlbnRfc2xvdC4gIEhvd2V2ZXIgaWYgd2UgZGlkIGZpbmQgdGhlCi0JICogYmFja3JlZiBuZXh0IHRvIHRoZSBleHRlbnQgaXRlbSB0aGVtIHdlIHdpbGwgYmUgZGVsZXRpbmcgYXQgbGVhc3QgMgotCSAqIGl0ZW1zIGFuZCB3aWxsIHdhbnQgdG8gc3RhcnQgc2VhcmNoaW5nIGRpcmVjdGx5IGFmdGVyIHRoZSByZWYgc2xvdAotCSAqLwotCWlmICghcmVmcykgewotCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuLCAqZW5kOwotCQlpbnQgY3VyX3Nsb3QgPSBleHRlbnRfc2xvdCtudW1fdG9fZGVsOwotCQl1NjQgc3VwZXJfdXNlZDsKLQkJdTY0IHJvb3RfdXNlZDsKLQotCQlwYXRoLT5zbG90c1swXSA9IGV4dGVudF9zbG90OwotCQlieXRlc19mcmVlZCA9IG9wLT5udW1fYnl0ZXM7Ci0KLQkJbXV0ZXhfbG9jaygmaW5mby0+cGlubmVkX211dGV4KTsKLQkJcmV0ID0gcGluX2Rvd25fYnl0ZXModHJhbnMsIGV4dGVudF9yb290LCBvcC0+Ynl0ZW5yLAotCQkJCSAgICAgb3AtPm51bV9ieXRlcywgb3AtPmxldmVsID49Ci0JCQkJICAgICBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKTsKLQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5waW5uZWRfbXV0ZXgpOwotCQlCVUdfT04ocmV0IDwgMCk7Ci0JCW9wLT5kZWwgPSByZXQ7Ci0KLQkJLyoKLQkJICogd2UgbmVlZCB0byBzZWUgaWYgd2UgY2FuIGRlbGV0ZSBtdWx0aXBsZSB0aGluZ3MgYXQgb25jZSwgc28KLQkJICogc3RhcnQgbG9vcGluZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGV4dGVudHMgd2UgYXJlIHdhbnRpbmcgdG8KLQkJICogZGVsZXRlIGFuZCBzZWUgaWYgdGhlaXIgZXh0ZW50L2JhY2tyZWYncyBhcmUgcmlnaHQgbmV4dCB0bwotCQkgKiBlYWNob3RoZXIgYW5kIHRoZSBleHRlbnRzIG9ubHkgaGF2ZSAxIHJlZgotCQkgKi8KLQkJZm9yIChwb3MgPSBjdXItPm5leHQ7IHBvcyAhPSBkZWxfbGlzdDsgcG9zID0gcG9zLT5uZXh0KSB7Ci0JCQlzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AgKnRtcDsKLQotCQkJdG1wID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCwgbGlzdCk7Ci0KLQkJCS8qIHdlIG9ubHkgd2FudCB0byBkZWxldGUgZXh0ZW50K3JlZiBhdCB0aGlzIHN0YWdlICovCi0JCQlpZiAoY3VyX3Nsb3QgPj0gYnRyZnNfaGVhZGVyX25yaXRlbXMobGVhZikgLSAxKQotCQkJCWJyZWFrOwotCi0JCQlidHJmc19pdGVtX2tleV90b19jcHUobGVhZiwgJmZvdW5kX2tleSwgY3VyX3Nsb3QpOwotCQkJaWYgKGZvdW5kX2tleS5vYmplY3RpZCAhPSB0bXAtPmJ5dGVuciB8fAotCQkJICAgIGZvdW5kX2tleS50eXBlICE9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWSB8fAotCQkJICAgIGZvdW5kX2tleS5vZmZzZXQgIT0gdG1wLT5udW1fYnl0ZXMpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGlzIGV4dGVudCBvbmx5IGhhcyBvbmUgcmVmICovCi0JCQllaSA9IGJ0cmZzX2l0ZW1fcHRyKGxlYWYsIGN1cl9zbG90LAotCQkJCQkgICAgc3RydWN0IGJ0cmZzX2V4dGVudF9pdGVtKTsKLQkJCWlmIChidHJmc19leHRlbnRfcmVmcyhsZWFmLCBlaSkgIT0gMSkKLQkJCQlicmVhazsKLQotCQkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZmb3VuZF9rZXksIGN1cl9zbG90KzEpOwotCQkJaWYgKGZvdW5kX2tleS5vYmplY3RpZCAhPSB0bXAtPmJ5dGVuciB8fAotCQkJICAgIGZvdW5kX2tleS50eXBlICE9IEJUUkZTX0VYVEVOVF9SRUZfS0VZIHx8Ci0JCQkgICAgZm91bmRfa2V5Lm9mZnNldCAhPSB0bXAtPm9yaWdfcGFyZW50KQotCQkJCWJyZWFrOwotCi0JCQkvKgotCQkJICogdGhlIHJlZiBpcyByaWdodCBuZXh0IHRvIHRoZSBleHRlbnQsIHdlIGNhbiBzZXQgdGhlCi0JCQkgKiByZWYgY291bnQgdG8gMCBzaW5jZSB3ZSB3aWxsIGRlbGV0ZSB0aGVtIGJvdGggbm93Ci0JCQkgKi8KLQkJCWJ0cmZzX3NldF9leHRlbnRfcmVmcyhsZWFmLCBlaSwgMCk7Ci0KLQkJCS8qIHBpbiBkb3duIHRoZSBieXRlcyBmb3IgdGhpcyBleHRlbnQgKi8KLQkJCW11dGV4X2xvY2soJmluZm8tPnBpbm5lZF9tdXRleCk7Ci0JCQlyZXQgPSBwaW5fZG93bl9ieXRlcyh0cmFucywgZXh0ZW50X3Jvb3QsIHRtcC0+Ynl0ZW5yLAotCQkJCQkgICAgIHRtcC0+bnVtX2J5dGVzLCB0bXAtPmxldmVsID49Ci0JCQkJCSAgICAgQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCk7Ci0JCQltdXRleF91bmxvY2soJmluZm8tPnBpbm5lZF9tdXRleCk7Ci0JCQlCVUdfT04ocmV0IDwgMCk7Ci0KLQkJCS8qCi0JCQkgKiB1c2UgdGhlIGRlbCBmaWVsZCB0byB0ZWxsIGlmIHdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kCi0JCQkgKiBmcmVlIHVwIHRoZSBleHRlbnQgd2hlbiB3ZSBkZWxldGUgdGhlIGl0ZW0gb3Igbm90LgotCQkJICovCi0JCQl0bXAtPmRlbCA9IHJldDsKLQkJCWJ5dGVzX2ZyZWVkICs9IHRtcC0+bnVtX2J5dGVzOwotCi0JCQludW1fdG9fZGVsICs9IDI7Ci0JCQljdXJfc2xvdCArPSAyOwotCQl9Ci0JCWVuZCA9IHBvczsKLQotCQkvKiB1cGRhdGUgdGhlIGZyZWUgc3BhY2UgY291bnRlcnMgKi8KLQkJc3Bpbl9sb2NrKCZpbmZvLT5kZWxhbGxvY19sb2NrKTsKLQkJc3VwZXJfdXNlZCA9IGJ0cmZzX3N1cGVyX2J5dGVzX3VzZWQoJmluZm8tPnN1cGVyX2NvcHkpOwotCQlidHJmc19zZXRfc3VwZXJfYnl0ZXNfdXNlZCgmaW5mby0+c3VwZXJfY29weSwKLQkJCQkJICAgc3VwZXJfdXNlZCAtIGJ5dGVzX2ZyZWVkKTsKLQotCQlyb290X3VzZWQgPSBidHJmc19yb290X3VzZWQoJmV4dGVudF9yb290LT5yb290X2l0ZW0pOwotCQlidHJmc19zZXRfcm9vdF91c2VkKCZleHRlbnRfcm9vdC0+cm9vdF9pdGVtLAotCQkJCSAgICByb290X3VzZWQgLSBieXRlc19mcmVlZCk7Ci0JCXNwaW5fdW5sb2NrKCZpbmZvLT5kZWxhbGxvY19sb2NrKTsKLQotCQkvKiBkZWxldGUgdGhlIGl0ZW1zICovCi0JCXJldCA9IGJ0cmZzX2RlbF9pdGVtcyh0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgsCi0JCQkJICAgICAgcGF0aC0+c2xvdHNbMF0sIG51bV90b19kZWwpOwotCQlCVUdfT04ocmV0KTsKLQotCQkvKgotCQkgKiBsb29wIHRocm91Z2ggdGhlIGV4dGVudHMgd2UgZGVsZXRlZCBhbmQgZG8gdGhlIGNsZWFudXAgd29yawotCQkgKiBvbiB0aGVtCi0JCSAqLwotCQlmb3IgKHBvcyA9IGN1ciwgbiA9IHBvcy0+bmV4dDsgcG9zICE9IGVuZDsKLQkJICAgICBwb3MgPSBuLCBuID0gcG9zLT5uZXh0KSB7Ci0JCQlzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AgKnRtcDsKLQkJCXRtcCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AsIGxpc3QpOwotCi0JCQkvKgotCQkJICogcmVtZW1iZXIgdG1wLT5kZWwgdGVsbHMgdXMgd2V0aGVyIG9yIG5vdCB3ZSBwaW5uZWQKLQkJCSAqIGRvd24gdGhlIGV4dGVudAotCQkJICovCi0JCQlyZXQgPSB1cGRhdGVfYmxvY2tfZ3JvdXAodHJhbnMsIGV4dGVudF9yb290LAotCQkJCQkJIHRtcC0+Ynl0ZW5yLCB0bXAtPm51bV9ieXRlcywgMCwKLQkJCQkJCSB0bXAtPmRlbCk7Ci0JCQlCVUdfT04ocmV0KTsKLQotCQkJbGlzdF9kZWxfaW5pdCgmdG1wLT5saXN0KTsKLQkJCXVubG9ja19leHRlbnQoJmluZm8tPmV4dGVudF9pbnMsIHRtcC0+Ynl0ZW5yLAotCQkJCSAgICAgIHRtcC0+Ynl0ZW5yICsgdG1wLT5udW1fYnl0ZXMgLSAxLAotCQkJCSAgICAgIEdGUF9OT0ZTKTsKLQkJCWtmcmVlKHRtcCk7Ci0JCX0KLQl9IGVsc2UgaWYgKHJlZnMgJiYgZm91bmRfZXh0ZW50KSB7Ci0JCS8qCi0JCSAqIHRoZSByZWYgYW5kIGV4dGVudCB3ZXJlIHJpZ2h0IG5leHQgdG8gZWFjaG90aGVyLCBidXQgdGhlCi0JCSAqIGV4dGVudCBzdGlsbCBoYXMgYSByZWYsIHNvIGp1c3QgZnJlZSB0aGUgYmFja3JlZiBhbmQga2VlcAotCQkgKiBnb2luZwotCQkgKi8KLQkJcmV0ID0gcmVtb3ZlX2V4dGVudF9iYWNrcmVmKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCk7Ci0JCUJVR19PTihyZXQpOwotCi0JCWxpc3RfZGVsX2luaXQoJm9wLT5saXN0KTsKLQkJdW5sb2NrX2V4dGVudCgmaW5mby0+ZXh0ZW50X2lucywgb3AtPmJ5dGVuciwKLQkJCSAgICAgIG9wLT5ieXRlbnIgKyBvcC0+bnVtX2J5dGVzIC0gMSwgR0ZQX05PRlMpOwotCQlrZnJlZShvcCk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogdGhlIGV4dGVudCBoYXMgbXVsdGlwbGUgcmVmcyBhbmQgdGhlIGJhY2tyZWYgd2Ugd2VyZSBsb29raW5nCi0JCSAqIGZvciB3YXMgbm90IHJpZ2h0IG5leHQgdG8gaXQsIHNvIGp1c3QgdW5sb2NrIGFuZCBnbyBuZXh0LAotCQkgKiB3ZSdyZSBnb29kIHRvIGdvCi0JCSAqLwotCQlsaXN0X2RlbF9pbml0KCZvcC0+bGlzdCk7Ci0JCXVubG9ja19leHRlbnQoJmluZm8tPmV4dGVudF9pbnMsIG9wLT5ieXRlbnIsCi0JCQkgICAgICBvcC0+Ynl0ZW5yICsgb3AtPm51bV9ieXRlcyAtIDEsIEdGUF9OT0ZTKTsKLQkJa2ZyZWUob3ApOwotCX0KLQotCWJ0cmZzX3JlbGVhc2VfcGF0aChleHRlbnRfcm9vdCwgcGF0aCk7Ci0JaWYgKCFsaXN0X2VtcHR5KGRlbF9saXN0KSkKLQkJZ290byBzZWFyY2g7Ci0KLW91dDoKLQlidHJmc19mcmVlX3BhdGgocGF0aCk7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBfX2J0cmZzX3VwZGF0ZV9leHRlbnRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJCSAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCisJCQkJICAgICB1NjQgbnVtX2J5dGVzLAogCQkJCSAgICAgdTY0IG9yaWdfcGFyZW50LCB1NjQgcGFyZW50LAogCQkJCSAgICAgdTY0IG9yaWdfcm9vdCwgdTY0IHJlZl9yb290LAogCQkJCSAgICAgdTY0IG9yaWdfZ2VuZXJhdGlvbiwgdTY0IHJlZl9nZW5lcmF0aW9uLAogCQkJCSAgICAgdTY0IG93bmVyX29iamVjdGlkKQogewogCWludCByZXQ7Ci0Jc3RydWN0IGJ0cmZzX3Jvb3QgKmV4dGVudF9yb290ID0gcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3Q7Ci0Jc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CisJaW50IHBpbiA9IG93bmVyX29iamVjdGlkIDwgQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRDsKIAotCWlmIChyb290ID09IHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290KSB7Ci0JCXN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCAqZXh0ZW50X29wOwotCQl1NjQgbnVtX2J5dGVzOwotCi0JCUJVR19PTihvd25lcl9vYmplY3RpZCA+PSBCVFJGU19NQVhfTEVWRUwpOwotCQludW1fYnl0ZXMgPSBidHJmc19sZXZlbF9zaXplKHJvb3QsIChpbnQpb3duZXJfb2JqZWN0aWQpOwotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQkJaWYgKHRlc3RfcmFuZ2VfYml0KCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zLCBieXRlbnIsCi0JCQkJYnl0ZW5yICsgbnVtX2J5dGVzIC0gMSwgRVhURU5UX1dSSVRFQkFDSywgMCkpIHsKLQkJCXU2NCBwcml2OwotCQkJcmV0ID0gZ2V0X3N0YXRlX3ByaXZhdGUoJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnMsCi0JCQkJCQlieXRlbnIsICZwcml2KTsKLQkJCUJVR19PTihyZXQpOwotCQkJZXh0ZW50X29wID0gKHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCAqKQotCQkJCQkJCSh1bnNpZ25lZCBsb25nKXByaXY7Ci0JCQlCVUdfT04oZXh0ZW50X29wLT5wYXJlbnQgIT0gb3JpZ19wYXJlbnQpOwotCQkJQlVHX09OKGV4dGVudF9vcC0+Z2VuZXJhdGlvbiAhPSBvcmlnX2dlbmVyYXRpb24pOwotCi0JCQlleHRlbnRfb3AtPnBhcmVudCA9IHBhcmVudDsKLQkJCWV4dGVudF9vcC0+Z2VuZXJhdGlvbiA9IHJlZl9nZW5lcmF0aW9uOwotCQl9IGVsc2UgewotCQkJZXh0ZW50X29wID0ga21hbGxvYyhzaXplb2YoKmV4dGVudF9vcCksIEdGUF9OT0ZTKTsKLQkJCUJVR19PTighZXh0ZW50X29wKTsKLQotCQkJZXh0ZW50X29wLT50eXBlID0gUEVORElOR19CQUNLUkVGX1VQREFURTsKLQkJCWV4dGVudF9vcC0+Ynl0ZW5yID0gYnl0ZW5yOwotCQkJZXh0ZW50X29wLT5udW1fYnl0ZXMgPSBudW1fYnl0ZXM7Ci0JCQlleHRlbnRfb3AtPnBhcmVudCA9IHBhcmVudDsKLQkJCWV4dGVudF9vcC0+b3JpZ19wYXJlbnQgPSBvcmlnX3BhcmVudDsKLQkJCWV4dGVudF9vcC0+Z2VuZXJhdGlvbiA9IHJlZl9nZW5lcmF0aW9uOwotCQkJZXh0ZW50X29wLT5vcmlnX2dlbmVyYXRpb24gPSBvcmlnX2dlbmVyYXRpb247Ci0JCQlleHRlbnRfb3AtPmxldmVsID0gKGludClvd25lcl9vYmplY3RpZDsKLQkJCUlOSVRfTElTVF9IRUFEKCZleHRlbnRfb3AtPmxpc3QpOwotCQkJZXh0ZW50X29wLT5kZWwgPSAwOwotCi0JCQlzZXRfZXh0ZW50X2JpdHMoJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnMsCi0JCQkJCWJ5dGVuciwgYnl0ZW5yICsgbnVtX2J5dGVzIC0gMSwKLQkJCQkJRVhURU5UX1dSSVRFQkFDSywgR0ZQX05PRlMpOwotCQkJc2V0X3N0YXRlX3ByaXZhdGUoJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnMsCi0JCQkJCSAgYnl0ZW5yLCAodW5zaWduZWQgbG9uZylleHRlbnRfb3ApOwotCQl9Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci0JaWYgKCFwYXRoKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSBsb29rdXBfZXh0ZW50X2JhY2tyZWYodHJhbnMsIGV4dGVudF9yb290LCBwYXRoLAotCQkJCSAgICBieXRlbnIsIG9yaWdfcGFyZW50LCBvcmlnX3Jvb3QsCi0JCQkJICAgIG9yaWdfZ2VuZXJhdGlvbiwgb3duZXJfb2JqZWN0aWQsIDEpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCXJldCA9IHJlbW92ZV9leHRlbnRfYmFja3JlZih0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCXJldCA9IGluc2VydF9leHRlbnRfYmFja3JlZih0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgsIGJ5dGVuciwKLQkJCQkgICAgcGFyZW50LCByZWZfcm9vdCwgcmVmX2dlbmVyYXRpb24sCi0JCQkJICAgIG93bmVyX29iamVjdGlkKTsKKwlyZXQgPSBidHJmc191cGRhdGVfZGVsYXllZF9yZWYodHJhbnMsIGJ5dGVuciwgbnVtX2J5dGVzLAorCQkJCSAgICAgICBvcmlnX3BhcmVudCwgcGFyZW50LCBvcmlnX3Jvb3QsCisJCQkJICAgICAgIHJlZl9yb290LCBvcmlnX2dlbmVyYXRpb24sCisJCQkJICAgICAgIHJlZl9nZW5lcmF0aW9uLCBvd25lcl9vYmplY3RpZCwgcGluKTsKIAlCVUdfT04ocmV0KTsKLQlmaW5pc2hfY3VycmVudF9pbnNlcnQodHJhbnMsIGV4dGVudF9yb290LCAwKTsKLQlkZWxfcGVuZGluZ19leHRlbnRzKHRyYW5zLCBleHRlbnRfcm9vdCwgMCk7Ci1vdXQ6Ci0JYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiByZXQ7CiB9CiAKIGludCBidHJmc191cGRhdGVfZXh0ZW50X3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGJ5dGVuciwKLQkJCSAgICB1NjQgb3JpZ19wYXJlbnQsIHU2NCBwYXJlbnQsCisJCQkgICAgdTY0IG51bV9ieXRlcywgdTY0IG9yaWdfcGFyZW50LCB1NjQgcGFyZW50LAogCQkJICAgIHU2NCByZWZfcm9vdCwgdTY0IHJlZl9nZW5lcmF0aW9uLAogCQkJICAgIHU2NCBvd25lcl9vYmplY3RpZCkKIHsKQEAgLTEyNjAsMjAgKzcxNSwzNiBAQAogCWlmIChyZWZfcm9vdCA9PSBCVFJGU19UUkVFX0xPR19PQkpFQ1RJRCAmJgogCSAgICBvd25lcl9vYmplY3RpZCA8IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpCiAJCXJldHVybiAwOwotCXJldCA9IF9fYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwgb3JpZ19wYXJlbnQsCi0JCQkJCXBhcmVudCwgcmVmX3Jvb3QsIHJlZl9yb290LAotCQkJCQlyZWZfZ2VuZXJhdGlvbiwgcmVmX2dlbmVyYXRpb24sCi0JCQkJCW93bmVyX29iamVjdGlkKTsKKworCXJldCA9IF9fYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLAorCQkJCQlvcmlnX3BhcmVudCwgcGFyZW50LCByZWZfcm9vdCwKKwkJCQkJcmVmX3Jvb3QsIHJlZl9nZW5lcmF0aW9uLAorCQkJCQlyZWZfZ2VuZXJhdGlvbiwgb3duZXJfb2JqZWN0aWQpOwogCXJldHVybiByZXQ7CiB9Ci0KIHN0YXRpYyBpbnQgX19idHJmc19pbmNfZXh0ZW50X3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgIHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgYnl0ZW5yLAorCQkJCSAgdTY0IG51bV9ieXRlcywKIAkJCQkgIHU2NCBvcmlnX3BhcmVudCwgdTY0IHBhcmVudCwKIAkJCQkgIHU2NCBvcmlnX3Jvb3QsIHU2NCByZWZfcm9vdCwKIAkJCQkgIHU2NCBvcmlnX2dlbmVyYXRpb24sIHU2NCByZWZfZ2VuZXJhdGlvbiwKIAkJCQkgIHU2NCBvd25lcl9vYmplY3RpZCkKIHsKKwlpbnQgcmV0OworCisJcmV0ID0gYnRyZnNfYWRkX2RlbGF5ZWRfcmVmKHRyYW5zLCBieXRlbnIsIG51bV9ieXRlcywgcGFyZW50LCByZWZfcm9vdCwKKwkJCQkgICAgcmVmX2dlbmVyYXRpb24sIG93bmVyX29iamVjdGlkLAorCQkJCSAgICBCVFJGU19BRERfREVMQVlFRF9SRUYsIDApOworCUJVR19PTihyZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IGFkZF9leHRlbnRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGJ5dGVuciwKKwkJCSAgdTY0IG51bV9ieXRlcywgdTY0IHBhcmVudCwgdTY0IHJlZl9yb290LAorCQkJICB1NjQgcmVmX2dlbmVyYXRpb24sIHU2NCBvd25lcl9vYmplY3RpZCwKKwkJCSAgaW50IHJlZnNfdG9fYWRkKQorewogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCWludCByZXQ7CiAJc3RydWN0IGJ0cmZzX2tleSBrZXk7CkBAIC0xMjg2LDE3ICs3NTcsMjQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlwYXRoLT5yZWFkYSA9IDE7CisJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCWtleS5vYmplY3RpZCA9IGJ5dGVucjsKIAlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWTsKLQlrZXkub2Zmc2V0ID0gKHU2NCktMTsKKwlrZXkub2Zmc2V0ID0gbnVtX2J5dGVzOwogCi0JcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QodHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LCAma2V5LCBwYXRoLAotCQkJCTAsIDEpOwotCWlmIChyZXQgPCAwKQorCS8qIGZpcnN0IGZpbmQgdGhlIGV4dGVudCBpdGVtIGFuZCB1cGRhdGUgaXRzIHJlZmVyZW5jZSBjb3VudCAqLworCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgJmtleSwKKwkJCQlwYXRoLCAwLCAxKTsKKwlpZiAocmV0IDwgMCkgeworCQlidHJmc19zZXRfcGF0aF9ibG9ja2luZyhwYXRoKTsKIAkJcmV0dXJuIHJldDsKLQlCVUdfT04ocmV0ID09IDAgfHwgcGF0aC0+c2xvdHNbMF0gPT0gMCk7CisJfQogCi0JcGF0aC0+c2xvdHNbMF0tLTsKKwlpZiAocmV0ID4gMCkgeworCQlXQVJOX09OKDEpOworCQlidHJmc19mcmVlX3BhdGgocGF0aCk7CisJCXJldHVybiAtRUlPOworCX0KIAlsID0gcGF0aC0+bm9kZXNbMF07CiAKIAlidHJmc19pdGVtX2tleV90b19jcHUobCwgJmtleSwgcGF0aC0+c2xvdHNbMF0pOwpAQCAtMTMxMCwyMSArNzg4LDI0IEBACiAJQlVHX09OKGtleS50eXBlICE9IEJUUkZTX0VYVEVOVF9JVEVNX0tFWSk7CiAKIAlpdGVtID0gYnRyZnNfaXRlbV9wdHIobCwgcGF0aC0+c2xvdHNbMF0sIHN0cnVjdCBidHJmc19leHRlbnRfaXRlbSk7CisKIAlyZWZzID0gYnRyZnNfZXh0ZW50X3JlZnMobCwgaXRlbSk7Ci0JYnRyZnNfc2V0X2V4dGVudF9yZWZzKGwsIGl0ZW0sIHJlZnMgKyAxKTsKKwlidHJmc19zZXRfZXh0ZW50X3JlZnMobCwgaXRlbSwgcmVmcyArIHJlZnNfdG9fYWRkKTsKKwlidHJmc191bmxvY2tfdXBfc2FmZShwYXRoLCAxKTsKKwogCWJ0cmZzX21hcmtfYnVmZmVyX2RpcnR5KHBhdGgtPm5vZGVzWzBdKTsKIAogCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgcGF0aCk7CiAKIAlwYXRoLT5yZWFkYSA9IDE7CisJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOworCisJLyogbm93IGluc2VydCB0aGUgYWN0dWFsIGJhY2tyZWYgKi8KIAlyZXQgPSBpbnNlcnRfZXh0ZW50X2JhY2tyZWYodHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAogCQkJCSAgICBwYXRoLCBieXRlbnIsIHBhcmVudCwKIAkJCQkgICAgcmVmX3Jvb3QsIHJlZl9nZW5lcmF0aW9uLAotCQkJCSAgICBvd25lcl9vYmplY3RpZCk7CisJCQkJICAgIG93bmVyX29iamVjdGlkLCByZWZzX3RvX2FkZCk7CiAJQlVHX09OKHJldCk7Ci0JZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgMCk7Ci0JZGVsX3BlbmRpbmdfZXh0ZW50cyh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsIDApOwotCiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCXJldHVybiAwOwogfQpAQCAtMTMzOSw2OCArODIwLDI3OCBAQAogCWlmIChyZWZfcm9vdCA9PSBCVFJGU19UUkVFX0xPR19PQkpFQ1RJRCAmJgogCSAgICBvd25lcl9vYmplY3RpZCA8IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpCiAJCXJldHVybiAwOwotCXJldCA9IF9fYnRyZnNfaW5jX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwgMCwgcGFyZW50LAorCisJcmV0ID0gX19idHJmc19pbmNfZXh0ZW50X3JlZih0cmFucywgcm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsIDAsIHBhcmVudCwKIAkJCQkgICAgIDAsIHJlZl9yb290LCAwLCByZWZfZ2VuZXJhdGlvbiwKIAkJCQkgICAgIG93bmVyX29iamVjdGlkKTsKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYnRyZnNfZXh0ZW50X3Bvc3Rfb3Aoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCitzdGF0aWMgaW50IGRyb3BfZGVsYXllZF9yZWYoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCQlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqbm9kZSkKIHsKLQl1NjQgc3RhcnQ7Ci0JdTY0IGVuZDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYgKnJlZiA9IGJ0cmZzX2RlbGF5ZWRfbm9kZV90b19yZWYobm9kZSk7CisKKwlCVUdfT04obm9kZS0+cmVmX21vZCA9PSAwKTsKKwlyZXQgPSBfX2J0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBub2RlLT5ieXRlbnIsIG5vZGUtPm51bV9ieXRlcywKKwkJCQkgIG5vZGUtPnBhcmVudCwgcmVmLT5yb290LCByZWYtPmdlbmVyYXRpb24sCisJCQkJICByZWYtPm93bmVyX29iamVjdGlkLCByZWYtPnBpbiwgbm9kZS0+cmVmX21vZCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBoZWxwZXIgZnVuY3Rpb24gdG8gYWN0dWFsbHkgcHJvY2VzcyBhIHNpbmdsZSBkZWxheWVkIHJlZiBlbnRyeSAqLworc3RhdGljIG5vaW5saW5lIGludCBydW5fb25lX2RlbGF5ZWRfcmVmKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJCQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQkJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKm5vZGUsCisJCQkJCWludCBpbnNlcnRfcmVzZXJ2ZWQpCit7CiAJaW50IHJldDsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWYgKnJlZjsKIAotCXdoaWxlKDEpIHsKLQkJZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgMSk7Ci0JCWRlbF9wZW5kaW5nX2V4dGVudHModHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LCAxKTsKKwlpZiAobm9kZS0+cGFyZW50ID09ICh1NjQpLTEpIHsKKwkJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgKmhlYWQ7CisJCS8qCisJCSAqIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBjaGFpbiBhbmQgd2Ugd2VyZSBzdXBwb3NlZAorCQkgKiB0byBpbnNlcnQgdGhpcyBleHRlbnQgaW50byB0aGUgdHJlZS4gIEJ1dCwgaXQgZ290CisJCSAqIGRlbGV0ZWQgYmVmb3JlIHdlIGV2ZXIgbmVlZGVkIHRvIGluc2VydCBpdCwgc28gYWxsCisJCSAqIHdlIGhhdmUgdG8gZG8gaXMgY2xlYW4gdXAgdGhlIGFjY291bnRpbmcKKwkJICovCisJCWlmIChpbnNlcnRfcmVzZXJ2ZWQpIHsKKwkJCXVwZGF0ZV9yZXNlcnZlZF9leHRlbnRzKHJvb3QsIG5vZGUtPmJ5dGVuciwKKwkJCQkJCW5vZGUtPm51bV9ieXRlcywgMCk7CisJCX0KKwkJaGVhZCA9IGJ0cmZzX2RlbGF5ZWRfbm9kZV90b19oZWFkKG5vZGUpOworCQltdXRleF91bmxvY2soJmhlYWQtPm11dGV4KTsKKwkJcmV0dXJuIDA7CisJfQogCi0JCS8qIGlzIHRoZXJlIG1vcmUgd29yayB0byBkbz8gKi8KLQkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KCZyb290LT5mc19pbmZvLT5wZW5kaW5nX2RlbCwKLQkJCQkJICAgIDAsICZzdGFydCwgJmVuZCwgRVhURU5UX1dSSVRFQkFDSyk7Ci0JCWlmICghcmV0KQotCQkJY29udGludWU7Ci0JCXJldCA9IGZpbmRfZmlyc3RfZXh0ZW50X2JpdCgmcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X2lucywKLQkJCQkJICAgIDAsICZzdGFydCwgJmVuZCwgRVhURU5UX1dSSVRFQkFDSyk7Ci0JCWlmICghcmV0KQotCQkJY29udGludWU7Ci0JCWJyZWFrOworCXJlZiA9IGJ0cmZzX2RlbGF5ZWRfbm9kZV90b19yZWYobm9kZSk7CisJaWYgKHJlZi0+YWN0aW9uID09IEJUUkZTX0FERF9ERUxBWUVEX1JFRikgeworCQlpZiAoaW5zZXJ0X3Jlc2VydmVkKSB7CisJCQlzdHJ1Y3QgYnRyZnNfa2V5IGluczsKKworCQkJaW5zLm9iamVjdGlkID0gbm9kZS0+Ynl0ZW5yOworCQkJaW5zLm9mZnNldCA9IG5vZGUtPm51bV9ieXRlczsKKwkJCWlucy50eXBlID0gQlRSRlNfRVhURU5UX0lURU1fS0VZOworCisJCQkvKiByZWNvcmQgdGhlIGZ1bGwgZXh0ZW50IGFsbG9jYXRpb24gKi8KKwkJCXJldCA9IF9fYnRyZnNfYWxsb2NfcmVzZXJ2ZWRfZXh0ZW50KHRyYW5zLCByb290LAorCQkJCQlub2RlLT5wYXJlbnQsIHJlZi0+cm9vdCwKKwkJCQkJcmVmLT5nZW5lcmF0aW9uLCByZWYtPm93bmVyX29iamVjdGlkLAorCQkJCQkmaW5zLCBub2RlLT5yZWZfbW9kKTsKKwkJCXVwZGF0ZV9yZXNlcnZlZF9leHRlbnRzKHJvb3QsIG5vZGUtPmJ5dGVuciwKKwkJCQkJCW5vZGUtPm51bV9ieXRlcywgMCk7CisJCX0gZWxzZSB7CisJCQkvKiBqdXN0IGFkZCBvbmUgYmFja3JlZiAqLworCQkJcmV0ID0gYWRkX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIG5vZGUtPmJ5dGVuciwKKwkJCQkgICAgIG5vZGUtPm51bV9ieXRlcywKKwkJCQkgICAgIG5vZGUtPnBhcmVudCwgcmVmLT5yb290LCByZWYtPmdlbmVyYXRpb24sCisJCQkJICAgICByZWYtPm93bmVyX29iamVjdGlkLCBub2RlLT5yZWZfbW9kKTsKKwkJfQorCQlCVUdfT04ocmV0KTsKKwl9IGVsc2UgaWYgKHJlZi0+YWN0aW9uID09IEJUUkZTX0RST1BfREVMQVlFRF9SRUYpIHsKKwkJV0FSTl9PTihpbnNlcnRfcmVzZXJ2ZWQpOworCQlyZXQgPSBkcm9wX2RlbGF5ZWRfcmVmKHRyYW5zLCByb290LCBub2RlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLWludCBidHJmc19sb29rdXBfZXh0ZW50X3JlZihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IGJ5dGVuciwKLQkJCSAgICB1NjQgbnVtX2J5dGVzLCB1MzIgKnJlZnMpCitzdGF0aWMgbm9pbmxpbmUgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKgorc2VsZWN0X2RlbGF5ZWRfcmVmKHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9oZWFkICpoZWFkKQogewotCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwotCWludCByZXQ7Ci0Jc3RydWN0IGJ0cmZzX2tleSBrZXk7Ci0Jc3RydWN0IGV4dGVudF9idWZmZXIgKmw7Ci0Jc3RydWN0IGJ0cmZzX2V4dGVudF9pdGVtICppdGVtOwotCi0JV0FSTl9PTihudW1fYnl0ZXMgPCByb290LT5zZWN0b3JzaXplKTsKLQlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwotCXBhdGgtPnJlYWRhID0gMTsKLQlrZXkub2JqZWN0aWQgPSBieXRlbnI7Ci0Ja2V5Lm9mZnNldCA9IG51bV9ieXRlczsKLQlidHJmc19zZXRfa2V5X3R5cGUoJmtleSwgQlRSRlNfRVhURU5UX0lURU1fS0VZKTsKLQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsICZrZXksIHBhdGgsCi0JCQkJMCwgMCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCWlmIChyZXQgIT0gMCkgewotCQlidHJmc19wcmludF9sZWFmKHJvb3QsIHBhdGgtPm5vZGVzWzBdKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYnRyZnMgZmFpbGVkIHRvIGZpbmQgYmxvY2sgbnVtYmVyICVsbHVcbiIsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJ5dGVucik7Ci0JCUJVRygpOworCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICpyZWY7CisJaW50IGFjdGlvbiA9IEJUUkZTX0FERF9ERUxBWUVEX1JFRjsKK2FnYWluOgorCS8qCisJICogc2VsZWN0IGRlbGF5ZWQgcmVmIG9mIHR5cGUgQlRSRlNfQUREX0RFTEFZRURfUkVGIGZpcnN0LgorCSAqIHRoaXMgcHJldmVudHMgcmVmIGNvdW50IGZyb20gZ29pbmcgZG93biB0byB6ZXJvIHdoZW4KKwkgKiB0aGVyZSBzdGlsbCBhcmUgcGVuZGluZyBkZWxheWVkIHJlZi4KKwkgKi8KKwlub2RlID0gcmJfcHJldigmaGVhZC0+bm9kZS5yYl9ub2RlKTsKKwl3aGlsZSAoMSkgeworCQlpZiAoIW5vZGUpCisJCQlicmVhazsKKwkJcmVmID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUsCisJCQkJcmJfbm9kZSk7CisJCWlmIChyZWYtPmJ5dGVuciAhPSBoZWFkLT5ub2RlLmJ5dGVucikKKwkJCWJyZWFrOworCQlpZiAoYnRyZnNfZGVsYXllZF9ub2RlX3RvX3JlZihyZWYpLT5hY3Rpb24gPT0gYWN0aW9uKQorCQkJcmV0dXJuIHJlZjsKKwkJbm9kZSA9IHJiX3ByZXYobm9kZSk7CiAJfQotCWwgPSBwYXRoLT5ub2Rlc1swXTsKLQlpdGVtID0gYnRyZnNfaXRlbV9wdHIobCwgcGF0aC0+c2xvdHNbMF0sIHN0cnVjdCBidHJmc19leHRlbnRfaXRlbSk7Ci0JKnJlZnMgPSBidHJmc19leHRlbnRfcmVmcyhsLCBpdGVtKTsKKwlpZiAoYWN0aW9uID09IEJUUkZTX0FERF9ERUxBWUVEX1JFRikgeworCQlhY3Rpb24gPSBCVFJGU19EUk9QX0RFTEFZRURfUkVGOworCQlnb3RvIGFnYWluOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIG5vaW5saW5lIGludCBydW5fY2x1c3RlcmVkX3JlZnMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbHVzdGVyKQoreworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9yb290ICpkZWxheWVkX3JlZnM7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX25vZGUgKnJlZjsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCAqbG9ja2VkX3JlZiA9IE5VTEw7CisJaW50IHJldDsKKwlpbnQgY291bnQgPSAwOworCWludCBtdXN0X2luc2VydF9yZXNlcnZlZCA9IDA7CisKKwlkZWxheWVkX3JlZnMgPSAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnM7CisJd2hpbGUgKDEpIHsKKwkJaWYgKCFsb2NrZWRfcmVmKSB7CisJCQkvKiBwaWNrIGEgbmV3IGhlYWQgcmVmIGZyb20gdGhlIGNsdXN0ZXIgbGlzdCAqLworCQkJaWYgKGxpc3RfZW1wdHkoY2x1c3RlcikpCisJCQkJYnJlYWs7CisKKwkJCWxvY2tlZF9yZWYgPSBsaXN0X2VudHJ5KGNsdXN0ZXItPm5leHQsCisJCQkJICAgICBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCwgY2x1c3Rlcik7CisKKwkJCS8qIGdyYWIgdGhlIGxvY2sgdGhhdCBzYXlzIHdlIGFyZSBnb2luZyB0byBwcm9jZXNzCisJCQkgKiBhbGwgdGhlIHJlZnMgZm9yIHRoaXMgaGVhZCAqLworCQkJcmV0ID0gYnRyZnNfZGVsYXllZF9yZWZfbG9jayh0cmFucywgbG9ja2VkX3JlZik7CisKKwkJCS8qCisJCQkgKiB3ZSBtYXkgaGF2ZSBkcm9wcGVkIHRoZSBzcGluIGxvY2sgdG8gZ2V0IHRoZSBoZWFkCisJCQkgKiBtdXRleCBsb2NrLCBhbmQgdGhhdCBtaWdodCBoYXZlIGdpdmVuIHNvbWVvbmUgZWxzZQorCQkJICogdGltZSB0byBmcmVlIHRoZSBoZWFkLiAgSWYgdGhhdCdzIHRydWUsIGl0IGhhcyBiZWVuCisJCQkgKiByZW1vdmVkIGZyb20gb3VyIGxpc3QgYW5kIHdlIGNhbiBtb3ZlIG9uLgorCQkJICovCisJCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKKwkJCQlsb2NrZWRfcmVmID0gTlVMTDsKKwkJCQljb3VudCsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogcmVjb3JkIHRoZSBtdXN0IGluc2VydCByZXNlcnZlZCBmbGFnIGJlZm9yZSB3ZQorCQkgKiBkcm9wIHRoZSBzcGluIGxvY2suCisJCSAqLworCQltdXN0X2luc2VydF9yZXNlcnZlZCA9IGxvY2tlZF9yZWYtPm11c3RfaW5zZXJ0X3Jlc2VydmVkOworCQlsb2NrZWRfcmVmLT5tdXN0X2luc2VydF9yZXNlcnZlZCA9IDA7CisKKwkJLyoKKwkJICogbG9ja2VkX3JlZiBpcyB0aGUgaGVhZCBub2RlLCBzbyB3ZSBoYXZlIHRvIGdvIG9uZQorCQkgKiBub2RlIGJhY2sgZm9yIGFueSBkZWxheWVkIHJlZiB1cGRhdGVzCisJCSAqLworCQlyZWYgPSBzZWxlY3RfZGVsYXllZF9yZWYobG9ja2VkX3JlZik7CisJCWlmICghcmVmKSB7CisJCQkvKiBBbGwgZGVsYXllZCByZWZzIGhhdmUgYmVlbiBwcm9jZXNzZWQsIEdvIGFoZWFkCisJCQkgKiBhbmQgc2VuZCB0aGUgaGVhZCBub2RlIHRvIHJ1bl9vbmVfZGVsYXllZF9yZWYsCisJCQkgKiBzbyB0aGF0IGFueSBhY2NvdW50aW5nIGZpeGVzIGNhbiBoYXBwZW4KKwkJCSAqLworCQkJcmVmID0gJmxvY2tlZF9yZWYtPm5vZGU7CisJCQlsaXN0X2RlbF9pbml0KCZsb2NrZWRfcmVmLT5jbHVzdGVyKTsKKwkJCWxvY2tlZF9yZWYgPSBOVUxMOworCQl9CisKKwkJcmVmLT5pbl90cmVlID0gMDsKKwkJcmJfZXJhc2UoJnJlZi0+cmJfbm9kZSwgJmRlbGF5ZWRfcmVmcy0+cm9vdCk7CisJCWRlbGF5ZWRfcmVmcy0+bnVtX2VudHJpZXMtLTsKKwkJc3Bpbl91bmxvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisKKwkJcmV0ID0gcnVuX29uZV9kZWxheWVkX3JlZih0cmFucywgcm9vdCwgcmVmLAorCQkJCQkgIG11c3RfaW5zZXJ0X3Jlc2VydmVkKTsKKwkJQlVHX09OKHJldCk7CisJCWJ0cmZzX3B1dF9kZWxheWVkX3JlZihyZWYpOworCisJCWNvdW50Kys7CisJCWNvbmRfcmVzY2hlZCgpOworCQlzcGluX2xvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisJfQorCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHRoaXMgc3RhcnRzIHByb2Nlc3NpbmcgdGhlIGRlbGF5ZWQgcmVmZXJlbmNlIGNvdW50IHVwZGF0ZXMgYW5kCisgKiBleHRlbnQgaW5zZXJ0aW9ucyB3ZSBoYXZlIHF1ZXVlZCB1cCBzbyBmYXIuICBjb3VudCBjYW4gYmUKKyAqIDAsIHdoaWNoIG1lYW5zIHRvIHByb2Nlc3MgZXZlcnl0aGluZyBpbiB0aGUgdHJlZSBhdCB0aGUgc3RhcnQKKyAqIG9mIHRoZSBydW4gKGJ1dCBub3QgbmV3bHkgYWRkZWQgZW50cmllcyksIG9yIGl0IGNhbiBiZSBzb21lIHRhcmdldAorICogbnVtYmVyIHlvdSdkIGxpa2UgdG8gcHJvY2Vzcy4KKyAqLworaW50IGJ0cmZzX3J1bl9kZWxheWVkX3JlZnMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfcm9vdCAqZGVsYXllZF9yZWZzOworCXN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlICpyZWY7CisJc3RydWN0IGxpc3RfaGVhZCBjbHVzdGVyOworCWludCByZXQ7CisJaW50IHJ1bl9hbGwgPSBjb3VudCA9PSAodW5zaWduZWQgbG9uZyktMTsKKwlpbnQgcnVuX21vc3QgPSAwOworCisJaWYgKHJvb3QgPT0gcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QpCisJCXJvb3QgPSByb290LT5mc19pbmZvLT50cmVlX3Jvb3Q7CisKKwlkZWxheWVkX3JlZnMgPSAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnM7CisJSU5JVF9MSVNUX0hFQUQoJmNsdXN0ZXIpOworYWdhaW46CisJc3Bpbl9sb2NrKCZkZWxheWVkX3JlZnMtPmxvY2spOworCWlmIChjb3VudCA9PSAwKSB7CisJCWNvdW50ID0gZGVsYXllZF9yZWZzLT5udW1fZW50cmllcyAqIDI7CisJCXJ1bl9tb3N0ID0gMTsKKwl9CisJd2hpbGUgKDEpIHsKKwkJaWYgKCEocnVuX2FsbCB8fCBydW5fbW9zdCkgJiYKKwkJICAgIGRlbGF5ZWRfcmVmcy0+bnVtX2hlYWRzX3JlYWR5IDwgNjQpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBnbyBmaW5kIHNvbWV0aGluZyB3ZSBjYW4gcHJvY2VzcyBpbiB0aGUgcmJ0cmVlLiAgV2Ugc3RhcnQgYXQKKwkJICogdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJlZSwgYW5kIHRoZW4gYnVpbGQgYSBjbHVzdGVyCisJCSAqIG9mIHJlZnMgdG8gcHJvY2VzcyBzdGFydGluZyBhdCB0aGUgZmlyc3Qgb25lIHdlIGFyZSBhYmxlIHRvCisJCSAqIGxvY2sKKwkJICovCisJCXJldCA9IGJ0cmZzX2ZpbmRfcmVmX2NsdXN0ZXIodHJhbnMsICZjbHVzdGVyLAorCQkJCQkgICAgIGRlbGF5ZWRfcmVmcy0+cnVuX2RlbGF5ZWRfc3RhcnQpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisKKwkJcmV0ID0gcnVuX2NsdXN0ZXJlZF9yZWZzKHRyYW5zLCByb290LCAmY2x1c3Rlcik7CisJCUJVR19PTihyZXQgPCAwKTsKKworCQljb3VudCAtPSBtaW5fdCh1bnNpZ25lZCBsb25nLCByZXQsIGNvdW50KTsKKworCQlpZiAoY291bnQgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChydW5fYWxsKSB7CisJCW5vZGUgPSByYl9maXJzdCgmZGVsYXllZF9yZWZzLT5yb290KTsKKwkJaWYgKCFub2RlKQorCQkJZ290byBvdXQ7CisJCWNvdW50ID0gKHVuc2lnbmVkIGxvbmcpLTE7CisKKwkJd2hpbGUgKG5vZGUpIHsKKwkJCXJlZiA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19kZWxheWVkX3JlZl9ub2RlLAorCQkJCSAgICAgICByYl9ub2RlKTsKKwkJCWlmIChidHJmc19kZWxheWVkX3JlZl9pc19oZWFkKHJlZikpIHsKKwkJCQlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfaGVhZCAqaGVhZDsKKworCQkJCWhlYWQgPSBidHJmc19kZWxheWVkX25vZGVfdG9faGVhZChyZWYpOworCQkJCWF0b21pY19pbmMoJnJlZi0+cmVmcyk7CisKKwkJCQlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKwkJCQltdXRleF9sb2NrKCZoZWFkLT5tdXRleCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZoZWFkLT5tdXRleCk7CisKKwkJCQlidHJmc19wdXRfZGVsYXllZF9yZWYocmVmKTsKKwkJCQljb25kX3Jlc2NoZWQoKTsKKwkJCQlnb3RvIGFnYWluOworCQkJfQorCQkJbm9kZSA9IHJiX25leHQobm9kZSk7CisJCX0KKwkJc3Bpbl91bmxvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CisJCXNjaGVkdWxlX3RpbWVvdXQoMSk7CisJCWdvdG8gYWdhaW47CisJfQogb3V0OgotCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYyNCw3ICsxMzE1LDcgQEAKIAlpbnQgcmVmaSA9IDA7CiAJaW50IHNsb3Q7CiAJaW50ICgqcHJvY2Vzc19mdW5jKShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICosIHN0cnVjdCBidHJmc19yb290ICosCi0JCQkgICAgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQpOworCQkJICAgIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQpOwogCiAJcmVmX3Jvb3QgPSBidHJmc19oZWFkZXJfb3duZXIoYnVmKTsKIAlyZWZfZ2VuZXJhdGlvbiA9IGJ0cmZzX2hlYWRlcl9nZW5lcmF0aW9uKGJ1Zik7CkBAIC0xNjk2LDEyICsxMzg3LDE5IEBACiAKIAkJaWYgKGxldmVsID09IDApIHsKIAkJCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShidWYsICZrZXksIHNsb3QpOworCQkJZmkgPSBidHJmc19pdGVtX3B0cihidWYsIHNsb3QsCisJCQkJCSAgICBzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSk7CisKKwkJCWJ5dGVuciA9IGJ0cmZzX2ZpbGVfZXh0ZW50X2Rpc2tfYnl0ZW5yKGJ1ZiwgZmkpOworCQkJaWYgKGJ5dGVuciA9PSAwKQorCQkJCWNvbnRpbnVlOwogCiAJCQlyZXQgPSBwcm9jZXNzX2Z1bmModHJhbnMsIHJvb3QsIGJ5dGVuciwKLQkJCQkJICAgb3JpZ19idWYtPnN0YXJ0LCBidWYtPnN0YXJ0LAotCQkJCQkgICBvcmlnX3Jvb3QsIHJlZl9yb290LAotCQkJCQkgICBvcmlnX2dlbmVyYXRpb24sIHJlZl9nZW5lcmF0aW9uLAotCQkJCQkgICBrZXkub2JqZWN0aWQpOworCQkJCSAgIGJ0cmZzX2ZpbGVfZXh0ZW50X2Rpc2tfbnVtX2J5dGVzKGJ1ZiwgZmkpLAorCQkJCSAgIG9yaWdfYnVmLT5zdGFydCwgYnVmLT5zdGFydCwKKwkJCQkgICBvcmlnX3Jvb3QsIHJlZl9yb290LAorCQkJCSAgIG9yaWdfZ2VuZXJhdGlvbiwgcmVmX2dlbmVyYXRpb24sCisJCQkJICAga2V5Lm9iamVjdGlkKTsKIAogCQkJaWYgKHJldCkgewogCQkJCWZhaWxpID0gc2xvdDsKQEAgLTE3MDksNyArMTQwNyw3IEBACiAJCQkJZ290byBmYWlsOwogCQkJfQogCQl9IGVsc2UgewotCQkJcmV0ID0gcHJvY2Vzc19mdW5jKHRyYW5zLCByb290LCBieXRlbnIsCisJCQlyZXQgPSBwcm9jZXNzX2Z1bmModHJhbnMsIHJvb3QsIGJ5dGVuciwgYnVmLT5sZW4sCiAJCQkJCSAgIG9yaWdfYnVmLT5zdGFydCwgYnVmLT5zdGFydCwKIAkJCQkJICAgb3JpZ19yb290LCByZWZfcm9vdCwKIAkJCQkJICAgb3JpZ19nZW5lcmF0aW9uLCByZWZfZ2VuZXJhdGlvbiwKQEAgLTE3ODYsMTcgKzE0ODQsMTcgQEAKIAkJCWlmIChieXRlbnIgPT0gMCkKIAkJCQljb250aW51ZTsKIAkJCXJldCA9IF9fYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwKLQkJCQkJICAgIG9yaWdfYnVmLT5zdGFydCwgYnVmLT5zdGFydCwKLQkJCQkJICAgIG9yaWdfcm9vdCwgcmVmX3Jvb3QsCi0JCQkJCSAgICBvcmlnX2dlbmVyYXRpb24sIHJlZl9nZW5lcmF0aW9uLAotCQkJCQkgICAga2V5Lm9iamVjdGlkKTsKKwkJCQkgICAgYnRyZnNfZmlsZV9leHRlbnRfZGlza19udW1fYnl0ZXMoYnVmLCBmaSksCisJCQkJICAgIG9yaWdfYnVmLT5zdGFydCwgYnVmLT5zdGFydCwKKwkJCQkgICAgb3JpZ19yb290LCByZWZfcm9vdCwgb3JpZ19nZW5lcmF0aW9uLAorCQkJCSAgICByZWZfZ2VuZXJhdGlvbiwga2V5Lm9iamVjdGlkKTsKIAkJCWlmIChyZXQpCiAJCQkJZ290byBmYWlsOwogCQl9IGVsc2UgewogCQkJYnl0ZW5yID0gYnRyZnNfbm9kZV9ibG9ja3B0cihidWYsIHNsb3QpOwogCQkJcmV0ID0gX19idHJmc191cGRhdGVfZXh0ZW50X3JlZih0cmFucywgcm9vdCwgYnl0ZW5yLAotCQkJCQkgICAgb3JpZ19idWYtPnN0YXJ0LCBidWYtPnN0YXJ0LAotCQkJCQkgICAgb3JpZ19yb290LCByZWZfcm9vdCwKKwkJCQkJICAgIGJ1Zi0+bGVuLCBvcmlnX2J1Zi0+c3RhcnQsCisJCQkJCSAgICBidWYtPnN0YXJ0LCBvcmlnX3Jvb3QsIHJlZl9yb290LAogCQkJCQkgICAgb3JpZ19nZW5lcmF0aW9uLCByZWZfZ2VuZXJhdGlvbiwKIAkJCQkJICAgIGxldmVsIC0gMSk7CiAJCQlpZiAocmV0KQpAQCAtMTgxNSw3ICsxNTEzLDYgQEAKIAkJCQkgc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpjYWNoZSkKIHsKIAlpbnQgcmV0OwotCWludCBwZW5kaW5nX3JldDsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqZXh0ZW50X3Jvb3QgPSByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdDsKIAl1bnNpZ25lZCBsb25nIGJpOwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwpAQCAtMTgzMSwxMiArMTUyOCw4IEBACiAJYnRyZnNfbWFya19idWZmZXJfZGlydHkobGVhZik7CiAJYnRyZnNfcmVsZWFzZV9wYXRoKGV4dGVudF9yb290LCBwYXRoKTsKIGZhaWw6Ci0JZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCBleHRlbnRfcm9vdCwgMCk7Ci0JcGVuZGluZ19yZXQgPSBkZWxfcGVuZGluZ19leHRlbnRzKHRyYW5zLCBleHRlbnRfcm9vdCwgMCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQlpZiAocGVuZGluZ19yZXQpCi0JCXJldHVybiBwZW5kaW5nX3JldDsKIAlyZXR1cm4gMDsKIAogfQpAQCAtMTkwMCw3ICsxNTkzLDcgQEAKIAlpZiAoIWJsb2NrX2dyb3VwIHx8IGJsb2NrX2dyb3VwLT5ybykKIAkJcmVhZG9ubHkgPSAxOwogCWlmIChibG9ja19ncm91cCkKLQkJcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKKwkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAlyZXR1cm4gcmVhZG9ubHk7CiB9CiAKQEAgLTIzMjQsNyArMjAxNyw3IEBACiAJCQkJV0FSTl9PTihyZXQpOwogCQkJfQogCQl9Ci0JCXB1dF9ibG9ja19ncm91cChjYWNoZSk7CisJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChjYWNoZSk7CiAJCXRvdGFsIC09IG51bV9ieXRlczsKIAkJYnl0ZW5yICs9IG51bV9ieXRlczsKIAl9CkBAIC0yMzQxLDcgKzIwMzQsNyBAQAogCQlyZXR1cm4gMDsKIAogCWJ5dGVuciA9IGNhY2hlLT5rZXkub2JqZWN0aWQ7Ci0JcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwlidHJmc19wdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOwogCiAJcmV0dXJuIGJ5dGVucjsKIH0KQEAgLTIzNTMsNyArMjA0Niw2IEBACiAJc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpjYWNoZTsKIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IHJvb3QtPmZzX2luZm87CiAKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnJvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCkpOwogCWlmIChwaW4pIHsKIAkJc2V0X2V4dGVudF9kaXJ0eSgmZnNfaW5mby0+cGlubmVkX2V4dGVudHMsCiAJCQkJYnl0ZW5yLCBieXRlbnIgKyBudW0gLSAxLCBHRlBfTk9GUyk7CkBAIC0yMzYxLDYgKzIwNTMsNyBAQAogCQljbGVhcl9leHRlbnRfZGlydHkoJmZzX2luZm8tPnBpbm5lZF9leHRlbnRzLAogCQkJCWJ5dGVuciwgYnl0ZW5yICsgbnVtIC0gMSwgR0ZQX05PRlMpOwogCX0KKwogCXdoaWxlIChudW0gPiAwKSB7CiAJCWNhY2hlID0gYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKGZzX2luZm8sIGJ5dGVucik7CiAJCUJVR19PTighY2FjaGUpOwpAQCAtMjM4NSw3ICsyMDc4LDcgQEAKIAkJCWlmIChjYWNoZS0+Y2FjaGVkKQogCQkJCWJ0cmZzX2FkZF9mcmVlX3NwYWNlKGNhY2hlLCBieXRlbnIsIGxlbik7CiAJCX0KLQkJcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKIAkJYnl0ZW5yICs9IGxlbjsKIAkJbnVtIC09IGxlbjsKIAl9CkBAIC0yNDE2LDcgKzIxMDksNyBAQAogCQl9CiAJCXNwaW5fdW5sb2NrKCZjYWNoZS0+bG9jayk7CiAJCXNwaW5fdW5sb2NrKCZjYWNoZS0+c3BhY2VfaW5mby0+bG9jayk7Ci0JCXB1dF9ibG9ja19ncm91cChjYWNoZSk7CisJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChjYWNoZSk7CiAJCWJ5dGVuciArPSBsZW47CiAJCW51bSAtPSBsZW47CiAJfQpAQCAtMjQzMSw3ICsyMTI0LDYgQEAKIAlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnBpbm5lZF9leHRlbnRzID0gJnJvb3QtPmZzX2luZm8tPnBpbm5lZF9leHRlbnRzOwogCWludCByZXQ7CiAKLQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOwogCXdoaWxlICgxKSB7CiAJCXJldCA9IGZpbmRfZmlyc3RfZXh0ZW50X2JpdChwaW5uZWRfZXh0ZW50cywgbGFzdCwKIAkJCQkJICAgICZzdGFydCwgJmVuZCwgRVhURU5UX0RJUlRZKTsKQEAgLTI0NDAsNyArMjEzMiw2IEBACiAJCXNldF9leHRlbnRfZGlydHkoY29weSwgc3RhcnQsIGVuZCwgR0ZQX05PRlMpOwogCQlsYXN0ID0gZW5kICsgMTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDUyLDcgKzIxNDMsNiBAQAogCXU2NCBlbmQ7CiAJaW50IHJldDsKIAotCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCk7CiAJd2hpbGUgKDEpIHsKIAkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KHVucGluLCAwLCAmc3RhcnQsICZlbmQsCiAJCQkJCSAgICBFWFRFTlRfRElSVFkpOwpAQCAtMjQ2MSwyMDkgKzIxNTEsMjAgQEAKIAogCQlyZXQgPSBidHJmc19kaXNjYXJkX2V4dGVudChyb290LCBzdGFydCwgZW5kICsgMSAtIHN0YXJ0KTsKIAorCQkvKiB1bmxvY2tzIHRoZSBwaW5uZWQgbXV0ZXggKi8KIAkJYnRyZnNfdXBkYXRlX3Bpbm5lZF9leHRlbnRzKHJvb3QsIHN0YXJ0LCBlbmQgKyAxIC0gc3RhcnQsIDApOwogCQljbGVhcl9leHRlbnRfZGlydHkodW5waW4sIHN0YXJ0LCBlbmQsIEdGUF9OT0ZTKTsKIAotCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKLQkJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKLQkJCWNvbmRfcmVzY2hlZCgpOwotCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKLQkJfQorCQljb25kX3Jlc2NoZWQoKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqZXh0ZW50X3Jvb3QsIGludCBhbGwpCi17Ci0JdTY0IHN0YXJ0OwotCXU2NCBlbmQ7Ci0JdTY0IHByaXY7Ci0JdTY0IHNlYXJjaCA9IDA7Ci0Jc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSBleHRlbnRfcm9vdC0+ZnNfaW5mbzsKLQlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKLQlzdHJ1Y3QgcGVuZGluZ19leHRlbnRfb3AgKmV4dGVudF9vcCwgKnRtcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGluc2VydF9saXN0LCB1cGRhdGVfbGlzdDsKLQlpbnQgcmV0OwotCWludCBudW1faW5zZXJ0cyA9IDAsIG1heF9pbnNlcnRzLCByZXN0YXJ0ID0gMDsKLQotCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmluc2VydF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmdXBkYXRlX2xpc3QpOwotCi0JbWF4X2luc2VydHMgPSBleHRlbnRfcm9vdC0+bGVhZnNpemUgLwotCQkoMiAqIHNpemVvZihzdHJ1Y3QgYnRyZnNfa2V5KSArIDIgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2l0ZW0pICsKLQkJIHNpemVvZihzdHJ1Y3QgYnRyZnNfZXh0ZW50X3JlZikgKwotCQkgc2l6ZW9mKHN0cnVjdCBidHJmc19leHRlbnRfaXRlbSkpOwotYWdhaW46Ci0JbXV0ZXhfbG9jaygmaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0Jd2hpbGUgKDEpIHsKLQkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KCZpbmZvLT5leHRlbnRfaW5zLCBzZWFyY2gsICZzdGFydCwKLQkJCQkJICAgICZlbmQsIEVYVEVOVF9XUklURUJBQ0spOwotCQlpZiAocmV0KSB7Ci0JCQlpZiAocmVzdGFydCAmJiAhbnVtX2luc2VydHMgJiYKLQkJCSAgICBsaXN0X2VtcHR5KCZ1cGRhdGVfbGlzdCkpIHsKLQkJCQlyZXN0YXJ0ID0gMDsKLQkJCQlzZWFyY2ggPSAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQotCQlyZXQgPSB0cnlfbG9ja19leHRlbnQoJmluZm8tPmV4dGVudF9pbnMsIHN0YXJ0LCBlbmQsIEdGUF9OT0ZTKTsKLQkJaWYgKCFyZXQpIHsKLQkJCWlmIChhbGwpCi0JCQkJcmVzdGFydCA9IDE7Ci0JCQlzZWFyY2ggPSBlbmQgKyAxOwotCQkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQkJCQljb25kX3Jlc2NoZWQoKTsKLQkJCQltdXRleF9sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcmV0ID0gZ2V0X3N0YXRlX3ByaXZhdGUoJmluZm8tPmV4dGVudF9pbnMsIHN0YXJ0LCAmcHJpdik7Ci0JCUJVR19PTihyZXQpOwotCQlleHRlbnRfb3AgPSAoc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wICopKHVuc2lnbmVkIGxvbmcpIHByaXY7Ci0KLQkJaWYgKGV4dGVudF9vcC0+dHlwZSA9PSBQRU5ESU5HX0VYVEVOVF9JTlNFUlQpIHsKLQkJCW51bV9pbnNlcnRzKys7Ci0JCQlsaXN0X2FkZF90YWlsKCZleHRlbnRfb3AtPmxpc3QsICZpbnNlcnRfbGlzdCk7Ci0JCQlzZWFyY2ggPSBlbmQgKyAxOwotCQkJaWYgKG51bV9pbnNlcnRzID09IG1heF9pbnNlcnRzKSB7Ci0JCQkJcmVzdGFydCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoZXh0ZW50X29wLT50eXBlID09IFBFTkRJTkdfQkFDS1JFRl9VUERBVEUpIHsKLQkJCWxpc3RfYWRkX3RhaWwoJmV4dGVudF9vcC0+bGlzdCwgJnVwZGF0ZV9saXN0KTsKLQkJCXNlYXJjaCA9IGVuZCArIDE7Ci0JCX0gZWxzZSB7Ci0JCQlCVUcoKTsKLQkJfQotCX0KLQotCS8qCi0JICogcHJvY2VzcyB0aGUgdXBkYXRlIGxpc3QsIGNsZWFyIHRoZSB3cml0ZWJhY2sgYml0IGZvciBpdCwgYW5kIGlmCi0JICogc29tZWJvZHkgbWFya2VkIHRoaXMgdGhpbmcgZm9yIGRlbGV0aW9uIHRoZW4ganVzdCB1bmxvY2sgaXQgYW5kIGJlCi0JICogZG9uZSwgdGhlIGZyZWVfZXh0ZW50cyB3aWxsIGhhbmRsZSBpdAotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShleHRlbnRfb3AsIHRtcCwgJnVwZGF0ZV9saXN0LCBsaXN0KSB7Ci0JCWNsZWFyX2V4dGVudF9iaXRzKCZpbmZvLT5leHRlbnRfaW5zLCBleHRlbnRfb3AtPmJ5dGVuciwKLQkJCQkgIGV4dGVudF9vcC0+Ynl0ZW5yICsgZXh0ZW50X29wLT5udW1fYnl0ZXMgLSAxLAotCQkJCSAgRVhURU5UX1dSSVRFQkFDSywgR0ZQX05PRlMpOwotCQlpZiAoZXh0ZW50X29wLT5kZWwpIHsKLQkJCWxpc3RfZGVsX2luaXQoJmV4dGVudF9vcC0+bGlzdCk7Ci0JCQl1bmxvY2tfZXh0ZW50KCZpbmZvLT5leHRlbnRfaW5zLCBleHRlbnRfb3AtPmJ5dGVuciwKLQkJCQkgICAgICBleHRlbnRfb3AtPmJ5dGVuciArIGV4dGVudF9vcC0+bnVtX2J5dGVzCi0JCQkJICAgICAgLSAxLCBHRlBfTk9GUyk7Ci0JCQlrZnJlZShleHRlbnRfb3ApOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0KLQkvKgotCSAqIHN0aWxsIGhhdmUgdGhpbmdzIGxlZnQgb24gdGhlIHVwZGF0ZSBsaXN0LCBnbyBhaGVhZCBhbiB1cGRhdGUKLQkgKiBldmVyeXRoaW5nCi0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZ1cGRhdGVfbGlzdCkpIHsKLQkJcmV0ID0gdXBkYXRlX2JhY2tyZWZzKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCwgJnVwZGF0ZV9saXN0KTsKLQkJQlVHX09OKHJldCk7Ci0KLQkJLyogd2UgbWF5IGhhdmUgQ09XJ2VkIG5ldyBibG9ja3MsIHNvIGxldHMgc3RhcnQgb3ZlciAqLwotCQlpZiAoYWxsKQotCQkJcmVzdGFydCA9IDE7Ci0JfQotCi0JLyoKLQkgKiBpZiBubyBpbnNlcnRzIG5lZWQgdG8gYmUgZG9uZSwgYnV0IHdlIHNraXBwZWQgc29tZSBleHRlbnRzIGFuZCB3ZQotCSAqIG5lZWQgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgY2xlYW5lZCB0aGVuIHJlc2V0IGV2ZXJ5dGhpbmcgYW5kCi0JICogZ28gYmFjayB0byB0aGUgYmVnaW5uaW5nCi0JICovCi0JaWYgKCFudW1faW5zZXJ0cyAmJiByZXN0YXJ0KSB7Ci0JCXNlYXJjaCA9IDA7Ci0JCXJlc3RhcnQgPSAwOwotCQlJTklUX0xJU1RfSEVBRCgmdXBkYXRlX2xpc3QpOwotCQlJTklUX0xJU1RfSEVBRCgmaW5zZXJ0X2xpc3QpOwotCQlnb3RvIGFnYWluOwotCX0gZWxzZSBpZiAoIW51bV9pbnNlcnRzKSB7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogcHJvY2VzcyB0aGUgaW5zZXJ0IGV4dGVudHMgbGlzdC4gIEFnYWluIGlmIHdlIGFyZSBkZWxldGluZyB0aGlzCi0JICogZXh0ZW50LCB0aGVuIGp1c3QgdW5sb2NrIGl0LCBwaW4gZG93biB0aGUgYnl0ZXMgaWYgbmVlZCBiZSwgYW5kIGJlCi0JICogZG9uZSB3aXRoIGl0LiAgU2F2ZXMgdXMgZnJvbSBoYXZpbmcgdG8gYWN0dWFsbHkgaW5zZXJ0IHRoZSBleHRlbnQKLQkgKiBpbnRvIHRoZSB0cmVlIGFuZCB0aGVuIHN1YnNlcXVlbnRseSBjb21lIGFsb25nIGFuZCBkZWxldGUgaXQKLQkgKi8KLQltdXRleF9sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXh0ZW50X29wLCB0bXAsICZpbnNlcnRfbGlzdCwgbGlzdCkgewotCQljbGVhcl9leHRlbnRfYml0cygmaW5mby0+ZXh0ZW50X2lucywgZXh0ZW50X29wLT5ieXRlbnIsCi0JCQkJICBleHRlbnRfb3AtPmJ5dGVuciArIGV4dGVudF9vcC0+bnVtX2J5dGVzIC0gMSwKLQkJCQkgIEVYVEVOVF9XUklURUJBQ0ssIEdGUF9OT0ZTKTsKLQkJaWYgKGV4dGVudF9vcC0+ZGVsKSB7Ci0JCQl1NjQgdXNlZDsKLQkJCWxpc3RfZGVsX2luaXQoJmV4dGVudF9vcC0+bGlzdCk7Ci0JCQl1bmxvY2tfZXh0ZW50KCZpbmZvLT5leHRlbnRfaW5zLCBleHRlbnRfb3AtPmJ5dGVuciwKLQkJCQkgICAgICBleHRlbnRfb3AtPmJ5dGVuciArIGV4dGVudF9vcC0+bnVtX2J5dGVzCi0JCQkJICAgICAgLSAxLCBHRlBfTk9GUyk7Ci0KLQkJCW11dGV4X2xvY2soJmV4dGVudF9yb290LT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOwotCQkJcmV0ID0gcGluX2Rvd25fYnl0ZXModHJhbnMsIGV4dGVudF9yb290LAotCQkJCQkgICAgIGV4dGVudF9vcC0+Ynl0ZW5yLAotCQkJCQkgICAgIGV4dGVudF9vcC0+bnVtX2J5dGVzLCAwKTsKLQkJCW11dGV4X3VubG9jaygmZXh0ZW50X3Jvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCk7Ci0KLQkJCXNwaW5fbG9jaygmaW5mby0+ZGVsYWxsb2NfbG9jayk7Ci0JCQl1c2VkID0gYnRyZnNfc3VwZXJfYnl0ZXNfdXNlZCgmaW5mby0+c3VwZXJfY29weSk7Ci0JCQlidHJmc19zZXRfc3VwZXJfYnl0ZXNfdXNlZCgmaW5mby0+c3VwZXJfY29weSwKLQkJCQkJdXNlZCAtIGV4dGVudF9vcC0+bnVtX2J5dGVzKTsKLQkJCXVzZWQgPSBidHJmc19yb290X3VzZWQoJmV4dGVudF9yb290LT5yb290X2l0ZW0pOwotCQkJYnRyZnNfc2V0X3Jvb3RfdXNlZCgmZXh0ZW50X3Jvb3QtPnJvb3RfaXRlbSwKLQkJCQkJdXNlZCAtIGV4dGVudF9vcC0+bnVtX2J5dGVzKTsKLQkJCXNwaW5fdW5sb2NrKCZpbmZvLT5kZWxhbGxvY19sb2NrKTsKLQotCQkJcmV0ID0gdXBkYXRlX2Jsb2NrX2dyb3VwKHRyYW5zLCBleHRlbnRfcm9vdCwKLQkJCQkJCSBleHRlbnRfb3AtPmJ5dGVuciwKLQkJCQkJCSBleHRlbnRfb3AtPm51bV9ieXRlcywKLQkJCQkJCSAwLCByZXQgPiAwKTsKLQkJCUJVR19PTihyZXQpOwotCQkJa2ZyZWUoZXh0ZW50X29wKTsKLQkJCW51bV9pbnNlcnRzLS07Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQotCXJldCA9IGluc2VydF9leHRlbnRzKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCwgJmluc2VydF9saXN0LAotCQkJICAgICBudW1faW5zZXJ0cyk7Ci0JQlVHX09OKHJldCk7Ci0KLQkvKgotCSAqIGlmIHJlc3RhcnQgaXMgc2V0IGZvciB3aGF0ZXZlciByZWFzb24gd2UgbmVlZCB0byBnbyBiYWNrIGFuZCBzdGFydAotCSAqIHNlYXJjaGluZyB0aHJvdWdoIHRoZSBwZW5kaW5nIGxpc3QgYWdhaW4uCi0JICoKLQkgKiBXZSBqdXN0IGluc2VydGVkIHNvbWUgZXh0ZW50cywgd2hpY2ggY291bGQgaGF2ZSByZXN1bHRlZCBpbiBuZXcKLQkgKiBibG9ja3MgYmVpbmcgYWxsb2NhdGVkLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gbmV3IGJsb2NrcyBuZWVkaW5nCi0JICogdXBkYXRlcywgc28gaWYgYWxsIGlzIHNldCB3ZSBfbXVzdF8gcmVzdGFydCB0byBnZXQgdGhlIHVwZGF0ZWQKLQkgKiBibG9ja3MuCi0JICovCi0JaWYgKHJlc3RhcnQgfHwgYWxsKSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZpbnNlcnRfbGlzdCk7Ci0JCUlOSVRfTElTVF9IRUFEKCZ1cGRhdGVfbGlzdCk7Ci0JCXNlYXJjaCA9IDA7Ci0JCXJlc3RhcnQgPSAwOwotCQludW1faW5zZXJ0cyA9IDA7Ci0JCWdvdG8gYWdhaW47Ci0JfQotb3V0OgotCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBwaW5fZG93bl9ieXRlcyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkgIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsIGludCBpc19kYXRhKQorCQkJICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKKwkJCSAgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgaW50IGlzX2RhdGEsCisJCQkgIHN0cnVjdCBleHRlbnRfYnVmZmVyICoqbXVzdF9jbGVhbikKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqYnVmOwpAQCAtMjY4NiwxNyArMjE4NywxOCBAQAogCQl1NjQgaGVhZGVyX3RyYW5zaWQgPSBidHJmc19oZWFkZXJfZ2VuZXJhdGlvbihidWYpOwogCQlpZiAoaGVhZGVyX293bmVyICE9IEJUUkZTX1RSRUVfTE9HX09CSkVDVElEICYmCiAJCSAgICBoZWFkZXJfb3duZXIgIT0gQlRSRlNfVFJFRV9SRUxPQ19PQkpFQ1RJRCAmJgorCQkgICAgaGVhZGVyX293bmVyICE9IEJUUkZTX0RBVEFfUkVMT0NfVFJFRV9PQkpFQ1RJRCAmJgogCQkgICAgaGVhZGVyX3RyYW5zaWQgPT0gdHJhbnMtPnRyYW5zaWQgJiYKIAkJICAgICFidHJmc19oZWFkZXJfZmxhZyhidWYsIEJUUkZTX0hFQURFUl9GTEFHX1dSSVRURU4pKSB7Ci0JCQljbGVhbl90cmVlX2Jsb2NrKE5VTEwsIHJvb3QsIGJ1Zik7Ci0JCQlidHJmc190cmVlX3VubG9jayhidWYpOwotCQkJZnJlZV9leHRlbnRfYnVmZmVyKGJ1Zik7CisJCQkqbXVzdF9jbGVhbiA9IGJ1ZjsKIAkJCXJldHVybiAxOwogCQl9CiAJCWJ0cmZzX3RyZWVfdW5sb2NrKGJ1Zik7CiAJfQogCWZyZWVfZXh0ZW50X2J1ZmZlcihidWYpOwogcGluaXQ6CisJYnRyZnNfc2V0X3BhdGhfYmxvY2tpbmcocGF0aCk7CisJLyogdW5sb2NrcyB0aGUgcGlubmVkIG11dGV4ICovCiAJYnRyZnNfdXBkYXRlX3Bpbm5lZF9leHRlbnRzKHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCAxKTsKIAogCUJVR19PTihlcnIgPCAwKTsKQEAgLTI3MTAsNyArMjIxMiw4IEBACiAJCQkgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgdTY0IHBhcmVudCwKIAkJCSB1NjQgcm9vdF9vYmplY3RpZCwgdTY0IHJlZl9nZW5lcmF0aW9uLAotCQkJIHU2NCBvd25lcl9vYmplY3RpZCwgaW50IHBpbiwgaW50IG1hcmtfZnJlZSkKKwkJCSB1NjQgb3duZXJfb2JqZWN0aWQsIGludCBwaW4sIGludCBtYXJrX2ZyZWUsCisJCQkgaW50IHJlZnNfdG9fZHJvcCkKIHsKIAlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKIAlzdHJ1Y3QgYnRyZnNfa2V5IGtleTsKQEAgLTI3MzIsNiArMjIzNSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcGF0aC0+cmVhZGEgPSAxOworCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAlyZXQgPSBsb29rdXBfZXh0ZW50X2JhY2tyZWYodHJhbnMsIGV4dGVudF9yb290LCBwYXRoLAogCQkJCSAgICBieXRlbnIsIHBhcmVudCwgcm9vdF9vYmplY3RpZCwKIAkJCQkgICAgcmVmX2dlbmVyYXRpb24sIG93bmVyX29iamVjdGlkLCAxKTsKQEAgLTI3NTMsOSArMjI1NywxMSBAQAogCQkJCWJyZWFrOwogCQl9CiAJCWlmICghZm91bmRfZXh0ZW50KSB7Ci0JCQlyZXQgPSByZW1vdmVfZXh0ZW50X2JhY2tyZWYodHJhbnMsIGV4dGVudF9yb290LCBwYXRoKTsKKwkJCXJldCA9IHJlbW92ZV9leHRlbnRfYmFja3JlZih0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgsCisJCQkJCQkgICAgcmVmc190b19kcm9wKTsKIAkJCUJVR19PTihyZXQpOwogCQkJYnRyZnNfcmVsZWFzZV9wYXRoKGV4dGVudF9yb290LCBwYXRoKTsKKwkJCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAkJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCBleHRlbnRfcm9vdCwKIAkJCQkJCSZrZXksIHBhdGgsIC0xLCAxKTsKIAkJCWlmIChyZXQpIHsKQEAgLTI3NzEsOCArMjI3Nyw5IEBACiAJCWJ0cmZzX3ByaW50X2xlYWYoZXh0ZW50X3Jvb3QsIHBhdGgtPm5vZGVzWzBdKTsKIAkJV0FSTl9PTigxKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJidHJmcyB1bmFibGUgdG8gZmluZCByZWYgYnl0ZSBuciAlbGx1ICIKLQkJICAgICAgICJyb290ICVsbHUgZ2VuICVsbHUgb3duZXIgJWxsdVxuIiwKKwkJICAgICAgICJwYXJlbnQgJWxsdSByb290ICVsbHUgZ2VuICVsbHUgb3duZXIgJWxsdVxuIiwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYnl0ZW5yLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwYXJlbnQsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJvb3Rfb2JqZWN0aWQsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJlZl9nZW5lcmF0aW9uLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvd25lcl9vYmplY3RpZCk7CkBAIC0yNzgyLDE3ICsyMjg5LDIzIEBACiAJZWkgPSBidHJmc19pdGVtX3B0cihsZWFmLCBleHRlbnRfc2xvdCwKIAkJCSAgICBzdHJ1Y3QgYnRyZnNfZXh0ZW50X2l0ZW0pOwogCXJlZnMgPSBidHJmc19leHRlbnRfcmVmcyhsZWFmLCBlaSk7Ci0JQlVHX09OKHJlZnMgPT0gMCk7Ci0JcmVmcyAtPSAxOwotCWJ0cmZzX3NldF9leHRlbnRfcmVmcyhsZWFmLCBlaSwgcmVmcyk7CiAKKwkvKgorCSAqIHdlJ3JlIG5vdCBhbGxvd2VkIHRvIGRlbGV0ZSB0aGUgZXh0ZW50IGl0ZW0gaWYgdGhlcmUKKwkgKiBhcmUgb3RoZXIgZGVsYXllZCByZWYgdXBkYXRlcyBwZW5kaW5nCisJICovCisKKwlCVUdfT04ocmVmcyA8IHJlZnNfdG9fZHJvcCk7CisJcmVmcyAtPSByZWZzX3RvX2Ryb3A7CisJYnRyZnNfc2V0X2V4dGVudF9yZWZzKGxlYWYsIGVpLCByZWZzKTsKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKIAotCWlmIChyZWZzID09IDAgJiYgZm91bmRfZXh0ZW50ICYmIHBhdGgtPnNsb3RzWzBdID09IGV4dGVudF9zbG90ICsgMSkgeworCWlmIChyZWZzID09IDAgJiYgZm91bmRfZXh0ZW50ICYmCisJICAgIHBhdGgtPnNsb3RzWzBdID09IGV4dGVudF9zbG90ICsgMSkgewogCQlzdHJ1Y3QgYnRyZnNfZXh0ZW50X3JlZiAqcmVmOwogCQlyZWYgPSBidHJmc19pdGVtX3B0cihsZWFmLCBwYXRoLT5zbG90c1swXSwKIAkJCQkgICAgIHN0cnVjdCBidHJmc19leHRlbnRfcmVmKTsKLQkJQlVHX09OKGJ0cmZzX3JlZl9udW1fcmVmcyhsZWFmLCByZWYpICE9IDEpOworCQlCVUdfT04oYnRyZnNfcmVmX251bV9yZWZzKGxlYWYsIHJlZikgIT0gcmVmc190b19kcm9wKTsKIAkJLyogaWYgdGhlIGJhY2sgcmVmIGFuZCB0aGUgZXh0ZW50IGFyZSBuZXh0IHRvIGVhY2ggb3RoZXIKIAkJICogdGhleSBnZXQgZGVsZXRlZCBiZWxvdyBpbiBvbmUgc2hvdAogCQkgKi8KQEAgLTI4MDAsMTEgKzIzMTMsMTMgQEAKIAkJbnVtX3RvX2RlbCA9IDI7CiAJfSBlbHNlIGlmIChmb3VuZF9leHRlbnQpIHsKIAkJLyogb3RoZXJ3aXNlIGRlbGV0ZSB0aGUgZXh0ZW50IGJhY2sgcmVmICovCi0JCXJldCA9IHJlbW92ZV9leHRlbnRfYmFja3JlZih0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgpOworCQlyZXQgPSByZW1vdmVfZXh0ZW50X2JhY2tyZWYodHJhbnMsIGV4dGVudF9yb290LCBwYXRoLAorCQkJCQkgICAgcmVmc190b19kcm9wKTsKIAkJQlVHX09OKHJldCk7CiAJCS8qIGlmIHJlZnMgYXJlIDAsIHdlIG5lZWQgdG8gc2V0dXAgdGhlIHBhdGggZm9yIGRlbGV0aW9uICovCiAJCWlmIChyZWZzID09IDApIHsKIAkJCWJ0cmZzX3JlbGVhc2VfcGF0aChleHRlbnRfcm9vdCwgcGF0aCk7CisJCQlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJCQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgZXh0ZW50X3Jvb3QsICZrZXksIHBhdGgsCiAJCQkJCQktMSwgMSk7CiAJCQlCVUdfT04ocmV0KTsKQEAgLTI4MTQsMTYgKzIzMjksMTggQEAKIAlpZiAocmVmcyA9PSAwKSB7CiAJCXU2NCBzdXBlcl91c2VkOwogCQl1NjQgcm9vdF91c2VkOworCQlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbXVzdF9jbGVhbiA9IE5VTEw7CiAKIAkJaWYgKHBpbikgewotCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKLQkJCXJldCA9IHBpbl9kb3duX2J5dGVzKHRyYW5zLCByb290LCBieXRlbnIsIG51bV9ieXRlcywKLQkJCQlvd25lcl9vYmplY3RpZCA+PSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKTsKLQkJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKKwkJCXJldCA9IHBpbl9kb3duX2J5dGVzKHRyYW5zLCByb290LCBwYXRoLAorCQkJCWJ5dGVuciwgbnVtX2J5dGVzLAorCQkJCW93bmVyX29iamVjdGlkID49IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQsCisJCQkJJm11c3RfY2xlYW4pOwogCQkJaWYgKHJldCA+IDApCiAJCQkJbWFya19mcmVlID0gMTsKIAkJCUJVR19PTihyZXQgPCAwKTsKIAkJfQorCiAJCS8qIGJsb2NrIGFjY291bnRpbmcgZm9yIHN1cGVyIGJsb2NrICovCiAJCXNwaW5fbG9jaygmaW5mby0+ZGVsYWxsb2NfbG9jayk7CiAJCXN1cGVyX3VzZWQgPSBidHJmc19zdXBlcl9ieXRlc191c2VkKCZpbmZvLT5zdXBlcl9jb3B5KTsKQEAgLTI4MzUsMTQgKzIzNTIsMzQgQEAKIAkJYnRyZnNfc2V0X3Jvb3RfdXNlZCgmcm9vdC0+cm9vdF9pdGVtLAogCQkJCQkgICByb290X3VzZWQgLSBudW1fYnl0ZXMpOwogCQlzcGluX3VubG9jaygmaW5mby0+ZGVsYWxsb2NfbG9jayk7CisKKwkJLyoKKwkJICogaXQgaXMgZ29pbmcgdG8gYmUgdmVyeSByYXJlIGZvciBzb21lb25lIHRvIGJlIHdhaXRpbmcKKwkJICogb24gdGhlIGJsb2NrIHdlJ3JlIGZyZWVpbmcuICBkZWxfaXRlbXMgbWlnaHQgbmVlZCB0bworCQkgKiBzY2hlZHVsZSwgc28gcmF0aGVyIHRoYW4gZ2V0IGZhbmN5LCBqdXN0IGZvcmNlIGl0CisJCSAqIHRvIGJsb2NraW5nIGhlcmUKKwkJICovCisJCWlmIChtdXN0X2NsZWFuKQorCQkJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcobXVzdF9jbGVhbik7CisKIAkJcmV0ID0gYnRyZnNfZGVsX2l0ZW1zKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCwgcGF0aC0+c2xvdHNbMF0sCiAJCQkJICAgICAgbnVtX3RvX2RlbCk7CiAJCUJVR19PTihyZXQpOwogCQlidHJmc19yZWxlYXNlX3BhdGgoZXh0ZW50X3Jvb3QsIHBhdGgpOwogCisJCWlmIChtdXN0X2NsZWFuKSB7CisJCQljbGVhbl90cmVlX2Jsb2NrKE5VTEwsIHJvb3QsIG11c3RfY2xlYW4pOworCQkJYnRyZnNfdHJlZV91bmxvY2sobXVzdF9jbGVhbik7CisJCQlmcmVlX2V4dGVudF9idWZmZXIobXVzdF9jbGVhbik7CisJCX0KKwogCQlpZiAob3duZXJfb2JqZWN0aWQgPj0gQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCkgewogCQkJcmV0ID0gYnRyZnNfZGVsX2NzdW1zKHRyYW5zLCByb290LCBieXRlbnIsIG51bV9ieXRlcyk7CiAJCQlCVUdfT04ocmV0KTsKKwkJfSBlbHNlIHsKKwkJCWludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhpbmZvLT5idHJlZV9pbm9kZS0+aV9tYXBwaW5nLAorCQkJICAgICBieXRlbnIgPj4gUEFHRV9DQUNIRV9TSElGVCwKKwkJCSAgICAgKGJ5dGVuciArIG51bV9ieXRlcyAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQpOwogCQl9CiAKIAkJcmV0ID0gdXBkYXRlX2Jsb2NrX2dyb3VwKHRyYW5zLCByb290LCBieXRlbnIsIG51bV9ieXRlcywgMCwKQEAgLTI4NTAsMjE4ICsyMzg3LDEwMyBAQAogCQlCVUdfT04ocmV0KTsKIAl9CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCWZpbmlzaF9jdXJyZW50X2luc2VydCh0cmFucywgZXh0ZW50X3Jvb3QsIDApOwogCXJldHVybiByZXQ7CiB9CiAKIC8qCi0gKiBmaW5kIGFsbCB0aGUgYmxvY2tzIG1hcmtlZCBhcyBwZW5kaW5nIGluIHRoZSByYWRpeCB0cmVlIGFuZCByZW1vdmUKLSAqIHRoZW0gZnJvbSB0aGUgZXh0ZW50IG1hcAotICovCi1zdGF0aWMgaW50IGRlbF9wZW5kaW5nX2V4dGVudHMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKmV4dGVudF9yb290LCBpbnQgYWxsKQotewotCWludCByZXQ7Ci0JaW50IGVyciA9IDA7Ci0JdTY0IHN0YXJ0OwotCXU2NCBlbmQ7Ci0JdTY0IHByaXY7Ci0JdTY0IHNlYXJjaCA9IDA7Ci0JaW50IG5yID0gMCwgc2tpcHBlZCA9IDA7Ci0Jc3RydWN0IGV4dGVudF9pb190cmVlICpwZW5kaW5nX2RlbDsKLQlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmV4dGVudF9pbnM7Ci0Jc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wICpleHRlbnRfb3A7Ci0Jc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSBleHRlbnRfcm9vdC0+ZnNfaW5mbzsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGV0ZV9saXN0OwotCi0JSU5JVF9MSVNUX0hFQUQoJmRlbGV0ZV9saXN0KTsKLQlleHRlbnRfaW5zID0gJmV4dGVudF9yb290LT5mc19pbmZvLT5leHRlbnRfaW5zOwotCXBlbmRpbmdfZGVsID0gJmV4dGVudF9yb290LT5mc19pbmZvLT5wZW5kaW5nX2RlbDsKLQotYWdhaW46Ci0JbXV0ZXhfbG9jaygmaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0Jd2hpbGUgKDEpIHsKLQkJcmV0ID0gZmluZF9maXJzdF9leHRlbnRfYml0KHBlbmRpbmdfZGVsLCBzZWFyY2gsICZzdGFydCwgJmVuZCwKLQkJCQkJICAgIEVYVEVOVF9XUklURUJBQ0spOwotCQlpZiAocmV0KSB7Ci0JCQlpZiAoYWxsICYmIHNraXBwZWQgJiYgIW5yKSB7Ci0JCQkJc2VhcmNoID0gMDsKLQkJCQlza2lwcGVkID0gMDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCW11dGV4X3VubG9jaygmaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldCA9IHRyeV9sb2NrX2V4dGVudChleHRlbnRfaW5zLCBzdGFydCwgZW5kLCBHRlBfTk9GUyk7Ci0JCWlmICghcmV0KSB7Ci0JCQlzZWFyY2ggPSBlbmQrMTsKLQkJCXNraXBwZWQgPSAxOwotCi0JCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKLQkJCQltdXRleF91bmxvY2soJmluZm8tPmV4dGVudF9pbnNfbXV0ZXgpOwotCQkJCWNvbmRfcmVzY2hlZCgpOwotCQkJCW11dGV4X2xvY2soJmluZm8tPmV4dGVudF9pbnNfbXV0ZXgpOwotCQkJfQotCi0JCQljb250aW51ZTsKLQkJfQotCQlCVUdfT04ocmV0IDwgMCk7Ci0KLQkJcmV0ID0gZ2V0X3N0YXRlX3ByaXZhdGUocGVuZGluZ19kZWwsIHN0YXJ0LCAmcHJpdik7Ci0JCUJVR19PTihyZXQpOwotCQlleHRlbnRfb3AgPSAoc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wICopKHVuc2lnbmVkIGxvbmcpcHJpdjsKLQotCQljbGVhcl9leHRlbnRfYml0cyhwZW5kaW5nX2RlbCwgc3RhcnQsIGVuZCwgRVhURU5UX1dSSVRFQkFDSywKLQkJCQkgIEdGUF9OT0ZTKTsKLQkJaWYgKCF0ZXN0X3JhbmdlX2JpdChleHRlbnRfaW5zLCBzdGFydCwgZW5kLAotCQkJCSAgICBFWFRFTlRfV1JJVEVCQUNLLCAwKSkgewotCQkJbGlzdF9hZGRfdGFpbCgmZXh0ZW50X29wLT5saXN0LCAmZGVsZXRlX2xpc3QpOwotCQkJbnIrKzsKLQkJfSBlbHNlIHsKLQkJCWtmcmVlKGV4dGVudF9vcCk7Ci0KLQkJCXJldCA9IGdldF9zdGF0ZV9wcml2YXRlKCZpbmZvLT5leHRlbnRfaW5zLCBzdGFydCwKLQkJCQkJCSZwcml2KTsKLQkJCUJVR19PTihyZXQpOwotCQkJZXh0ZW50X29wID0gKHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCAqKQotCQkJCQkJKHVuc2lnbmVkIGxvbmcpcHJpdjsKLQotCQkJY2xlYXJfZXh0ZW50X2JpdHMoJmluZm8tPmV4dGVudF9pbnMsIHN0YXJ0LCBlbmQsCi0JCQkJCSAgRVhURU5UX1dSSVRFQkFDSywgR0ZQX05PRlMpOwotCi0JCQlpZiAoZXh0ZW50X29wLT50eXBlID09IFBFTkRJTkdfQkFDS1JFRl9VUERBVEUpIHsKLQkJCQlsaXN0X2FkZF90YWlsKCZleHRlbnRfb3AtPmxpc3QsICZkZWxldGVfbGlzdCk7Ci0JCQkJc2VhcmNoID0gZW5kICsgMTsKLQkJCQlucisrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQltdXRleF9sb2NrKCZleHRlbnRfcm9vdC0+ZnNfaW5mby0+cGlubmVkX211dGV4KTsKLQkJCXJldCA9IHBpbl9kb3duX2J5dGVzKHRyYW5zLCBleHRlbnRfcm9vdCwgc3RhcnQsCi0JCQkJCSAgICAgZW5kICsgMSAtIHN0YXJ0LCAwKTsKLQkJCW11dGV4X3VubG9jaygmZXh0ZW50X3Jvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCk7Ci0KLQkJCXJldCA9IHVwZGF0ZV9ibG9ja19ncm91cCh0cmFucywgZXh0ZW50X3Jvb3QsIHN0YXJ0LAotCQkJCQkJZW5kICsgMSAtIHN0YXJ0LCAwLCByZXQgPiAwKTsKLQotCQkJdW5sb2NrX2V4dGVudChleHRlbnRfaW5zLCBzdGFydCwgZW5kLCBHRlBfTk9GUyk7Ci0JCQlCVUdfT04ocmV0KTsKLQkJCWtmcmVlKGV4dGVudF9vcCk7Ci0JCX0KLQkJaWYgKHJldCkKLQkJCWVyciA9IHJldDsKLQotCQlzZWFyY2ggPSBlbmQgKyAxOwotCi0JCWlmIChuZWVkX3Jlc2NoZWQoKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQkJCWNvbmRfcmVzY2hlZCgpOwotCQkJbXV0ZXhfbG9jaygmaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0JCX0KLQl9Ci0KLQlpZiAobnIpIHsKLQkJcmV0ID0gZnJlZV9leHRlbnRzKHRyYW5zLCBleHRlbnRfcm9vdCwgJmRlbGV0ZV9saXN0KTsKLQkJQlVHX09OKHJldCk7Ci0JfQotCi0JaWYgKGFsbCAmJiBza2lwcGVkKSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZWxldGVfbGlzdCk7Ci0JCXNlYXJjaCA9IDA7Ci0JCW5yID0gMDsKLQkJZ290byBhZ2FpbjsKLQl9Ci0KLQlpZiAoIWVycikKLQkJZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCBleHRlbnRfcm9vdCwgMCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKICAqIHJlbW92ZSBhbiBleHRlbnQgZnJvbSB0aGUgcm9vdCwgcmV0dXJucyAwIG9uIHN1Y2Nlc3MKICAqLwogc3RhdGljIGludCBfX2J0cmZzX2ZyZWVfZXh0ZW50KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAotCQkJICAgICAgIHU2NCBieXRlbnIsIHU2NCBudW1fYnl0ZXMsIHU2NCBwYXJlbnQsCi0JCQkgICAgICAgdTY0IHJvb3Rfb2JqZWN0aWQsIHU2NCByZWZfZ2VuZXJhdGlvbiwKLQkJCSAgICAgICB1NjQgb3duZXJfb2JqZWN0aWQsIGludCBwaW4pCisJCQkJCXN0cnVjdCBidHJmc19yb290ICpyb290LAorCQkJCQl1NjQgYnl0ZW5yLCB1NjQgbnVtX2J5dGVzLCB1NjQgcGFyZW50LAorCQkJCQl1NjQgcm9vdF9vYmplY3RpZCwgdTY0IHJlZl9nZW5lcmF0aW9uLAorCQkJCQl1NjQgb3duZXJfb2JqZWN0aWQsIGludCBwaW4sCisJCQkJCWludCByZWZzX3RvX2Ryb3ApCiB7Ci0Jc3RydWN0IGJ0cmZzX3Jvb3QgKmV4dGVudF9yb290ID0gcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3Q7Ci0JaW50IHBlbmRpbmdfcmV0OwotCWludCByZXQ7Ci0KIAlXQVJOX09OKG51bV9ieXRlcyA8IHJvb3QtPnNlY3RvcnNpemUpOwotCWlmIChyb290ID09IGV4dGVudF9yb290KSB7Ci0JCXN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCAqZXh0ZW50X29wID0gTlVMTDsKIAotCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQkJaWYgKHRlc3RfcmFuZ2VfYml0KCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zLCBieXRlbnIsCi0JCQkJYnl0ZW5yICsgbnVtX2J5dGVzIC0gMSwgRVhURU5UX1dSSVRFQkFDSywgMCkpIHsKLQkJCXU2NCBwcml2OwotCQkJcmV0ID0gZ2V0X3N0YXRlX3ByaXZhdGUoJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnMsCi0JCQkJCQlieXRlbnIsICZwcml2KTsKLQkJCUJVR19PTihyZXQpOwotCQkJZXh0ZW50X29wID0gKHN0cnVjdCBwZW5kaW5nX2V4dGVudF9vcCAqKQotCQkJCQkJKHVuc2lnbmVkIGxvbmcpcHJpdjsKLQotCQkJZXh0ZW50X29wLT5kZWwgPSAxOwotCQkJaWYgKGV4dGVudF9vcC0+dHlwZSA9PSBQRU5ESU5HX0VYVEVOVF9JTlNFUlQpIHsKLQkJCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnNfbXV0ZXgpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQl9Ci0KLQkJaWYgKGV4dGVudF9vcCkgewotCQkJcmVmX2dlbmVyYXRpb24gPSBleHRlbnRfb3AtPm9yaWdfZ2VuZXJhdGlvbjsKLQkJCXBhcmVudCA9IGV4dGVudF9vcC0+b3JpZ19wYXJlbnQ7Ci0JCX0KLQotCQlleHRlbnRfb3AgPSBrbWFsbG9jKHNpemVvZigqZXh0ZW50X29wKSwgR0ZQX05PRlMpOwotCQlCVUdfT04oIWV4dGVudF9vcCk7Ci0KLQkJZXh0ZW50X29wLT50eXBlID0gUEVORElOR19FWFRFTlRfREVMRVRFOwotCQlleHRlbnRfb3AtPmJ5dGVuciA9IGJ5dGVucjsKLQkJZXh0ZW50X29wLT5udW1fYnl0ZXMgPSBudW1fYnl0ZXM7Ci0JCWV4dGVudF9vcC0+cGFyZW50ID0gcGFyZW50OwotCQlleHRlbnRfb3AtPm9yaWdfcGFyZW50ID0gcGFyZW50OwotCQlleHRlbnRfb3AtPmdlbmVyYXRpb24gPSByZWZfZ2VuZXJhdGlvbjsKLQkJZXh0ZW50X29wLT5vcmlnX2dlbmVyYXRpb24gPSByZWZfZ2VuZXJhdGlvbjsKLQkJZXh0ZW50X29wLT5sZXZlbCA9IChpbnQpb3duZXJfb2JqZWN0aWQ7Ci0JCUlOSVRfTElTVF9IRUFEKCZleHRlbnRfb3AtPmxpc3QpOwotCQlleHRlbnRfb3AtPmRlbCA9IDA7Ci0KLQkJc2V0X2V4dGVudF9iaXRzKCZyb290LT5mc19pbmZvLT5wZW5kaW5nX2RlbCwKLQkJCQlieXRlbnIsIGJ5dGVuciArIG51bV9ieXRlcyAtIDEsCi0JCQkJRVhURU5UX1dSSVRFQkFDSywgR0ZQX05PRlMpOwotCQlzZXRfc3RhdGVfcHJpdmF0ZSgmcm9vdC0+ZnNfaW5mby0+cGVuZGluZ19kZWwsCi0JCQkJICBieXRlbnIsICh1bnNpZ25lZCBsb25nKWV4dGVudF9vcCk7Ci0JCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X2luc19tdXRleCk7Ci0JCXJldHVybiAwOwotCX0KLQkvKiBpZiBtZXRhZGF0YSBhbHdheXMgcGluICovCi0JaWYgKG93bmVyX29iamVjdGlkIDwgQlRSRlNfRklSU1RfRlJFRV9PQkpFQ1RJRCkgewotCQlpZiAocm9vdC0+cm9vdF9rZXkub2JqZWN0aWQgPT0gQlRSRlNfVFJFRV9MT0dfT0JKRUNUSUQpIHsKLQkJCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnBpbm5lZF9tdXRleCk7Ci0JCQlidHJmc191cGRhdGVfcGlubmVkX2V4dGVudHMocm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsIDEpOwotCQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOwotCQkJdXBkYXRlX3Jlc2VydmVkX2V4dGVudHMocm9vdCwgYnl0ZW5yLCBudW1fYnl0ZXMsIDApOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkvKgorCSAqIGlmIG1ldGFkYXRhIGFsd2F5cyBwaW4KKwkgKiBpZiBkYXRhIHBpbiB3aGVuIGFueSB0cmFuc2FjdGlvbiBoYXMgY29tbWl0dGVkIHRoaXMKKwkgKi8KKwlpZiAob3duZXJfb2JqZWN0aWQgPCBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEIHx8CisJICAgIHJlZl9nZW5lcmF0aW9uICE9IHRyYW5zLT50cmFuc2lkKQogCQlwaW4gPSAxOwotCX0KIAotCS8qIGlmIGRhdGEgcGluIHdoZW4gYW55IHRyYW5zYWN0aW9uIGhhcyBjb21taXR0ZWQgdGhpcyAqLwogCWlmIChyZWZfZ2VuZXJhdGlvbiAhPSB0cmFucy0+dHJhbnNpZCkKIAkJcGluID0gMTsKIAotCXJldCA9IF9fZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCBwYXJlbnQsCisJcmV0dXJuIF9fZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCBwYXJlbnQsCiAJCQkgICAgcm9vdF9vYmplY3RpZCwgcmVmX2dlbmVyYXRpb24sCi0JCQkgICAgb3duZXJfb2JqZWN0aWQsIHBpbiwgcGluID09IDApOworCQkJICAgIG93bmVyX29iamVjdGlkLCBwaW4sIHBpbiA9PSAwLCByZWZzX3RvX2Ryb3ApOworfQogCi0JZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgMCk7Ci0JcGVuZGluZ19yZXQgPSBkZWxfcGVuZGluZ19leHRlbnRzKHRyYW5zLCByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdCwgMCk7Ci0JcmV0dXJuIHJldCA/IHJldCA6IHBlbmRpbmdfcmV0OworLyoKKyAqIHdoZW4gd2UgZnJlZSBhbiBleHRlbnQsIGl0IGlzIHBvc3NpYmxlIChhbmQgbGlrZWx5KSB0aGF0IHdlIGZyZWUgdGhlIGxhc3QKKyAqIGRlbGF5ZWQgcmVmIGZvciB0aGF0IGV4dGVudCBhcyB3ZWxsLiAgVGhpcyBzZWFyY2hlcyB0aGUgZGVsYXllZCByZWYgdHJlZSBmb3IKKyAqIGEgZ2l2ZW4gZXh0ZW50LCBhbmQgaWYgdGhlcmUgYXJlIG5vIG90aGVyIGRlbGF5ZWQgcmVmcyB0byBiZSBwcm9jZXNzZWQsIGl0CisgKiByZW1vdmVzIGl0IGZyb20gdGhlIHRyZWUuCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgY2hlY2tfcmVmX2NsZWFudXAoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIpCit7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX2hlYWQgKmhlYWQ7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgKmRlbGF5ZWRfcmVmczsKKwlzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSAqcmVmOworCXN0cnVjdCByYl9ub2RlICpub2RlOworCWludCByZXQ7CisKKwlkZWxheWVkX3JlZnMgPSAmdHJhbnMtPnRyYW5zYWN0aW9uLT5kZWxheWVkX3JlZnM7CisJc3Bpbl9sb2NrKCZkZWxheWVkX3JlZnMtPmxvY2spOworCWhlYWQgPSBidHJmc19maW5kX2RlbGF5ZWRfcmVmX2hlYWQodHJhbnMsIGJ5dGVucik7CisJaWYgKCFoZWFkKQorCQlnb3RvIG91dDsKKworCW5vZGUgPSByYl9wcmV2KCZoZWFkLT5ub2RlLnJiX25vZGUpOworCWlmICghbm9kZSkKKwkJZ290byBvdXQ7CisKKwlyZWYgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZGVsYXllZF9yZWZfbm9kZSwgcmJfbm9kZSk7CisKKwkvKiB0aGVyZSBhcmUgc3RpbGwgZW50cmllcyBmb3IgdGhpcyByZWYsIHdlIGNhbid0IGRyb3AgaXQgKi8KKwlpZiAocmVmLT5ieXRlbnIgPT0gYnl0ZW5yKQorCQlnb3RvIG91dDsKKworCS8qCisJICogd2FpdGluZyBmb3IgdGhlIGxvY2sgaGVyZSB3b3VsZCBkZWFkbG9jay4gIElmIHNvbWVvbmUgZWxzZSBoYXMgaXQKKwkgKiBsb2NrZWQgdGhleSBhcmUgYWxyZWFkeSBpbiB0aGUgcHJvY2VzcyBvZiBkcm9wcGluZyBpdCBhbnl3YXkKKwkgKi8KKwlpZiAoIW11dGV4X3RyeWxvY2soJmhlYWQtPm11dGV4KSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIGhlYWQgd2l0aCBubyBvdGhlciBlbnRyaWVzLiAgR28KKwkgKiBhaGVhZCBhbmQgcHJvY2VzcyBpdC4KKwkgKi8KKwloZWFkLT5ub2RlLmluX3RyZWUgPSAwOworCXJiX2VyYXNlKCZoZWFkLT5ub2RlLnJiX25vZGUsICZkZWxheWVkX3JlZnMtPnJvb3QpOworCisJZGVsYXllZF9yZWZzLT5udW1fZW50cmllcy0tOworCisJLyoKKwkgKiB3ZSBkb24ndCB0YWtlIGEgcmVmIG9uIHRoZSBub2RlIGJlY2F1c2Ugd2UncmUgcmVtb3ZpbmcgaXQgZnJvbSB0aGUKKwkgKiB0cmVlLCBzbyB3ZSBqdXN0IHN0ZWFsIHRoZSByZWYgdGhlIHRyZWUgd2FzIGhvbGRpbmcuCisJICovCisJZGVsYXllZF9yZWZzLT5udW1faGVhZHMtLTsKKwlpZiAobGlzdF9lbXB0eSgmaGVhZC0+Y2x1c3RlcikpCisJCWRlbGF5ZWRfcmVmcy0+bnVtX2hlYWRzX3JlYWR5LS07CisKKwlsaXN0X2RlbF9pbml0KCZoZWFkLT5jbHVzdGVyKTsKKwlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKworCXJldCA9IHJ1bl9vbmVfZGVsYXllZF9yZWYodHJhbnMsIHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCwKKwkJCQkgICZoZWFkLT5ub2RlLCBoZWFkLT5tdXN0X2luc2VydF9yZXNlcnZlZCk7CisJQlVHX09OKHJldCk7CisJYnRyZnNfcHV0X2RlbGF5ZWRfcmVmKCZoZWFkLT5ub2RlKTsKKwlyZXR1cm4gMDsKK291dDoKKwlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGJ0cmZzX2ZyZWVfZXh0ZW50KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLApAQCAtMzA3Miw5ICsyNDk0LDI4IEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IF9fYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCBwYXJlbnQsCi0JCQkJICByb290X29iamVjdGlkLCByZWZfZ2VuZXJhdGlvbiwKLQkJCQkgIG93bmVyX29iamVjdGlkLCBwaW4pOworCS8qCisJICogdHJlZSBsb2cgYmxvY2tzIG5ldmVyIGFjdHVhbGx5IGdvIGludG8gdGhlIGV4dGVudCBhbGxvY2F0aW9uCisJICogdHJlZSwganVzdCB1cGRhdGUgcGlubmluZyBpbmZvIGFuZCBleGl0IGVhcmx5LgorCSAqCisJICogZGF0YSBleHRlbnRzIHJlZmVyZW5jZWQgYnkgdGhlIHRyZWUgbG9nIGRvIG5lZWQgdG8gaGF2ZQorCSAqIHRoZWlyIHJlZmVyZW5jZSBjb3VudHMgYnVtcGVkLgorCSAqLworCWlmIChyb290LT5yb290X2tleS5vYmplY3RpZCA9PSBCVFJGU19UUkVFX0xPR19PQkpFQ1RJRCAmJgorCSAgICBvd25lcl9vYmplY3RpZCA8IEJUUkZTX0ZJUlNUX0ZSRUVfT0JKRUNUSUQpIHsKKwkJLyogdW5sb2NrcyB0aGUgcGlubmVkIG11dGV4ICovCisJCWJ0cmZzX3VwZGF0ZV9waW5uZWRfZXh0ZW50cyhyb290LCBieXRlbnIsIG51bV9ieXRlcywgMSk7CisJCXVwZGF0ZV9yZXNlcnZlZF9leHRlbnRzKHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLCAwKTsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlyZXQgPSBidHJmc19hZGRfZGVsYXllZF9yZWYodHJhbnMsIGJ5dGVuciwgbnVtX2J5dGVzLCBwYXJlbnQsCisJCQkJICAgICAgIHJvb3Rfb2JqZWN0aWQsIHJlZl9nZW5lcmF0aW9uLAorCQkJCSAgICAgICBvd25lcl9vYmplY3RpZCwKKwkJCQkgICAgICAgQlRSRlNfRFJPUF9ERUxBWUVEX1JFRiwgMSk7CisJCUJVR19PTihyZXQpOworCQlyZXQgPSBjaGVja19yZWZfY2xlYW51cCh0cmFucywgcm9vdCwgYnl0ZW5yKTsKKwkJQlVHX09OKHJldCk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMxMDMsMjI4ICsyNTQ0LDIzNyBAQAogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gb3JpZ19yb290LT5mc19pbmZvLT5leHRlbnRfcm9vdDsKLQl1NjQgdG90YWxfbmVlZGVkID0gbnVtX2J5dGVzOwotCXU2NCAqbGFzdF9wdHIgPSBOVUxMOwotCXU2NCBsYXN0X3dhbnRlZCA9IDA7CisJc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqbGFzdF9wdHIgPSBOVUxMOwogCXN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAgPSBOVUxMOwotCWludCBjaHVua19hbGxvY19kb25lID0gMDsKIAlpbnQgZW1wdHlfY2x1c3RlciA9IDIgKiAxMDI0ICogMTAyNDsKIAlpbnQgYWxsb3dlZF9jaHVua19hbGxvYyA9IDA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IE5VTEwsICpjdXIgPSBOVUxMOwotCWludCBsb29wID0gMDsKLQlpbnQgZXh0cmFfbG9vcCA9IDA7CiAJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnNwYWNlX2luZm87CisJaW50IGxhc3RfcHRyX2xvb3AgPSAwOworCWludCBsb29wID0gMDsKIAogCVdBUk5fT04obnVtX2J5dGVzIDwgcm9vdC0+c2VjdG9yc2l6ZSk7CiAJYnRyZnNfc2V0X2tleV90eXBlKGlucywgQlRSRlNfRVhURU5UX0lURU1fS0VZKTsKIAlpbnMtPm9iamVjdGlkID0gMDsKIAlpbnMtPm9mZnNldCA9IDA7CiAKKwlzcGFjZV9pbmZvID0gX19maW5kX3NwYWNlX2luZm8ocm9vdC0+ZnNfaW5mbywgZGF0YSk7CisKIAlpZiAob3JpZ19yb290LT5yZWZfY293cyB8fCBlbXB0eV9zaXplKQogCQlhbGxvd2VkX2NodW5rX2FsbG9jID0gMTsKIAogCWlmIChkYXRhICYgQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEpIHsKLQkJbGFzdF9wdHIgPSAmcm9vdC0+ZnNfaW5mby0+bGFzdF9hbGxvYzsKKwkJbGFzdF9wdHIgPSAmcm9vdC0+ZnNfaW5mby0+bWV0YV9hbGxvY19jbHVzdGVyOwogCQlpZiAoIWJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIFNTRCkpCiAJCQllbXB0eV9jbHVzdGVyID0gNjQgKiAxMDI0OwogCX0KIAotCWlmICgoZGF0YSAmIEJUUkZTX0JMT0NLX0dST1VQX0RBVEEpICYmIGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIFNTRCkpCi0JCWxhc3RfcHRyID0gJnJvb3QtPmZzX2luZm8tPmxhc3RfZGF0YV9hbGxvYzsKKwlpZiAoKGRhdGEgJiBCVFJGU19CTE9DS19HUk9VUF9EQVRBKSAmJiBidHJmc190ZXN0X29wdChyb290LCBTU0QpKSB7CisJCWxhc3RfcHRyID0gJnJvb3QtPmZzX2luZm8tPmRhdGFfYWxsb2NfY2x1c3RlcjsKKwl9CiAKIAlpZiAobGFzdF9wdHIpIHsKLQkJaWYgKCpsYXN0X3B0cikgewotCQkJaGludF9ieXRlID0gKmxhc3RfcHRyOwotCQkJbGFzdF93YW50ZWQgPSAqbGFzdF9wdHI7Ci0JCX0gZWxzZQotCQkJZW1wdHlfc2l6ZSArPSBlbXB0eV9jbHVzdGVyOwotCX0gZWxzZSB7Ci0JCWVtcHR5X2NsdXN0ZXIgPSAwOworCQlzcGluX2xvY2soJmxhc3RfcHRyLT5sb2NrKTsKKwkJaWYgKGxhc3RfcHRyLT5ibG9ja19ncm91cCkKKwkJCWhpbnRfYnl0ZSA9IGxhc3RfcHRyLT53aW5kb3dfc3RhcnQ7CisJCXNwaW5fdW5sb2NrKCZsYXN0X3B0ci0+bG9jayk7CiAJfQorCiAJc2VhcmNoX3N0YXJ0ID0gbWF4KHNlYXJjaF9zdGFydCwgZmlyc3RfbG9naWNhbF9ieXRlKHJvb3QsIDApKTsKIAlzZWFyY2hfc3RhcnQgPSBtYXgoc2VhcmNoX3N0YXJ0LCBoaW50X2J5dGUpOwogCi0JaWYgKGxhc3Rfd2FudGVkICYmIHNlYXJjaF9zdGFydCAhPSBsYXN0X3dhbnRlZCkgewotCQlsYXN0X3dhbnRlZCA9IDA7Ci0JCWVtcHR5X3NpemUgKz0gZW1wdHlfY2x1c3RlcjsKKwlpZiAoIWxhc3RfcHRyKSB7CisJCWVtcHR5X2NsdXN0ZXIgPSAwOworCQlsb29wID0gMTsKIAl9CiAKLQl0b3RhbF9uZWVkZWQgKz0gZW1wdHlfc2l6ZTsKLQlibG9ja19ncm91cCA9IGJ0cmZzX2xvb2t1cF9ibG9ja19ncm91cChyb290LT5mc19pbmZvLCBzZWFyY2hfc3RhcnQpOwotCWlmICghYmxvY2tfZ3JvdXApCi0JCWJsb2NrX2dyb3VwID0gYnRyZnNfbG9va3VwX2ZpcnN0X2Jsb2NrX2dyb3VwKHJvb3QtPmZzX2luZm8sCi0JCQkJCQkJICAgICBzZWFyY2hfc3RhcnQpOwotCXNwYWNlX2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhyb290LT5mc19pbmZvLCBkYXRhKTsKKwlpZiAoc2VhcmNoX3N0YXJ0ID09IGhpbnRfYnl0ZSkgeworCQlibG9ja19ncm91cCA9IGJ0cmZzX2xvb2t1cF9ibG9ja19ncm91cChyb290LT5mc19pbmZvLAorCQkJCQkJICAgICAgIHNlYXJjaF9zdGFydCk7CisJCWlmIChibG9ja19ncm91cCAmJiBibG9ja19ncm91cF9iaXRzKGJsb2NrX2dyb3VwLCBkYXRhKSkgeworCQkJZG93bl9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKKwkJCWdvdG8gaGF2ZV9ibG9ja19ncm91cDsKKwkJfSBlbHNlIGlmIChibG9ja19ncm91cCkgeworCQkJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKKwkJfQorCX0KIAorc2VhcmNoOgogCWRvd25fcmVhZCgmc3BhY2VfaW5mby0+Z3JvdXBzX3NlbSk7Ci0Jd2hpbGUgKDEpIHsKLQkJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmZyZWVfc3BhY2U7Ci0JCS8qCi0JCSAqIHRoZSBvbmx5IHdheSB0aGlzIGhhcHBlbnMgaWYgb3VyIGhpbnQgcG9pbnRzIHRvIGEgYmxvY2sKLQkJICogZ3JvdXAgdGhhdHMgbm90IG9mIHRoZSBwcm9wZXIgdHlwZSwgd2hpbGUgbG9vcGluZyB0aGlzCi0JCSAqIHNob3VsZCBuZXZlciBoYXBwZW4KLQkJICovCi0JCWlmIChlbXB0eV9zaXplKQotCQkJZXh0cmFfbG9vcCA9IDE7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShibG9ja19ncm91cCwgJnNwYWNlX2luZm8tPmJsb2NrX2dyb3VwcywgbGlzdCkgeworCQl1NjQgb2Zmc2V0OwogCi0JCWlmICghYmxvY2tfZ3JvdXApCi0JCQlnb3RvIG5ld19ncm91cF9ub19sb2NrOworCQlhdG9taWNfaW5jKCZibG9ja19ncm91cC0+Y291bnQpOworCQlzZWFyY2hfc3RhcnQgPSBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkOwogCitoYXZlX2Jsb2NrX2dyb3VwOgogCQlpZiAodW5saWtlbHkoIWJsb2NrX2dyb3VwLT5jYWNoZWQpKSB7CiAJCQltdXRleF9sb2NrKCZibG9ja19ncm91cC0+Y2FjaGVfbXV0ZXgpOwogCQkJcmV0ID0gY2FjaGVfYmxvY2tfZ3JvdXAocm9vdCwgYmxvY2tfZ3JvdXApOwogCQkJbXV0ZXhfdW5sb2NrKCZibG9ja19ncm91cC0+Y2FjaGVfbXV0ZXgpOwotCQkJaWYgKHJldCkKKwkJCWlmIChyZXQpIHsKKwkJCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCQkJCWJyZWFrOworCQkJfQogCQl9CiAKLQkJbXV0ZXhfbG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKLQkJaWYgKHVubGlrZWx5KCFibG9ja19ncm91cF9iaXRzKGJsb2NrX2dyb3VwLCBkYXRhKSkpCi0JCQlnb3RvIG5ld19ncm91cDsKLQogCQlpZiAodW5saWtlbHkoYmxvY2tfZ3JvdXAtPnJvKSkKLQkJCWdvdG8gbmV3X2dyb3VwOworCQkJZ290byBsb29wOwogCi0JCWZyZWVfc3BhY2UgPSBidHJmc19maW5kX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIHNlYXJjaF9zdGFydCwKLQkJCQkJCSAgIHRvdGFsX25lZWRlZCk7Ci0JCWlmIChmcmVlX3NwYWNlKSB7Ci0JCQl1NjQgc3RhcnQgPSBibG9ja19ncm91cC0+a2V5Lm9iamVjdGlkOwotCQkJdTY0IGVuZCA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQgKwotCQkJCWJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0OwotCi0JCQlzZWFyY2hfc3RhcnQgPSBzdHJpcGVfYWxpZ24ocm9vdCwgZnJlZV9zcGFjZS0+b2Zmc2V0KTsKLQotCQkJLyogbW92ZSBvbiB0byB0aGUgbmV4dCBncm91cCAqLwotCQkJaWYgKHNlYXJjaF9zdGFydCArIG51bV9ieXRlcyA+PSBzZWFyY2hfZW5kKQotCQkJCWdvdG8gbmV3X2dyb3VwOwotCi0JCQkvKiBtb3ZlIG9uIHRvIHRoZSBuZXh0IGdyb3VwICovCi0JCQlpZiAoc2VhcmNoX3N0YXJ0ICsgbnVtX2J5dGVzID4gZW5kKQotCQkJCWdvdG8gbmV3X2dyb3VwOwotCi0JCQlpZiAobGFzdF93YW50ZWQgJiYgc2VhcmNoX3N0YXJ0ICE9IGxhc3Rfd2FudGVkKSB7Ci0JCQkJdG90YWxfbmVlZGVkICs9IGVtcHR5X2NsdXN0ZXI7Ci0JCQkJZW1wdHlfc2l6ZSArPSBlbXB0eV9jbHVzdGVyOwotCQkJCWxhc3Rfd2FudGVkID0gMDsKLQkJCQkvKgotCQkJCSAqIGlmIHNlYXJjaF9zdGFydCBpcyBzdGlsbCBpbiB0aGlzIGJsb2NrIGdyb3VwCi0JCQkJICogdGhlbiB3ZSBqdXN0IHJlLXNlYXJjaCB0aGlzIGJsb2NrIGdyb3VwCi0JCQkJICovCi0JCQkJaWYgKHNlYXJjaF9zdGFydCA+PSBzdGFydCAmJgotCQkJCSAgICBzZWFyY2hfc3RhcnQgPCBlbmQpIHsKLQkJCQkJbXV0ZXhfdW5sb2NrKCZibG9ja19ncm91cC0+YWxsb2NfbXV0ZXgpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0KLQkJCQkvKiBlbHNlIHdlIGdvIHRvIHRoZSBuZXh0IGJsb2NrIGdyb3VwICovCi0JCQkJZ290byBuZXdfZ3JvdXA7Ci0JCQl9Ci0KLQkJCWlmIChleGNsdWRlX25yID4gMCAmJgotCQkJICAgIChzZWFyY2hfc3RhcnQgKyBudW1fYnl0ZXMgPiBleGNsdWRlX3N0YXJ0ICYmCi0JCQkgICAgIHNlYXJjaF9zdGFydCA8IGV4Y2x1ZGVfc3RhcnQgKyBleGNsdWRlX25yKSkgewotCQkJCXNlYXJjaF9zdGFydCA9IGV4Y2x1ZGVfc3RhcnQgKyBleGNsdWRlX25yOwotCQkJCS8qCi0JCQkJICogaWYgc2VhcmNoX3N0YXJ0IGlzIHN0aWxsIGluIHRoaXMgYmxvY2sgZ3JvdXAKLQkJCQkgKiB0aGVuIHdlIGp1c3QgcmUtc2VhcmNoIHRoaXMgYmxvY2sgZ3JvdXAKLQkJCQkgKi8KLQkJCQlpZiAoc2VhcmNoX3N0YXJ0ID49IHN0YXJ0ICYmCi0JCQkJICAgIHNlYXJjaF9zdGFydCA8IGVuZCkgewotCQkJCQltdXRleF91bmxvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7Ci0JCQkJCWxhc3Rfd2FudGVkID0gMDsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCi0JCQkJLyogZWxzZSB3ZSBnbyB0byB0aGUgbmV4dCBibG9jayBncm91cCAqLwotCQkJCWdvdG8gbmV3X2dyb3VwOwotCQkJfQotCi0JCQlpbnMtPm9iamVjdGlkID0gc2VhcmNoX3N0YXJ0OwotCQkJaW5zLT5vZmZzZXQgPSBudW1fYnl0ZXM7Ci0KLQkJCWJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlX2xvY2soYmxvY2tfZ3JvdXAsIHNlYXJjaF9zdGFydCwKLQkJCQkJCSAgICAgbnVtX2J5dGVzKTsKLQkJCS8qIHdlIGFyZSBhbGwgZ29vZCwgbGV0cyByZXR1cm4gKi8KLQkJCW11dGV4X3VubG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKLQkJCWJyZWFrOwotCQl9Ci1uZXdfZ3JvdXA6Ci0JCW11dGV4X3VubG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKLQkJcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKLQkJYmxvY2tfZ3JvdXAgPSBOVUxMOwotbmV3X2dyb3VwX25vX2xvY2s6Ci0JCS8qIGRvbid0IHRyeSB0byBjb21wYXJlIG5ldyBhbGxvY2F0aW9ucyBhZ2FpbnN0IHRoZQotCQkgKiBsYXN0IGFsbG9jYXRpb24gYW55IG1vcmUKLQkJICovCi0JCWxhc3Rfd2FudGVkID0gMDsKLQotCQkvKgotCQkgKiBIZXJlJ3MgaG93IHRoaXMgd29ya3MuCi0JCSAqIGxvb3AgPT0gMDogd2Ugd2VyZSBzZWFyY2hpbmcgYSBibG9jayBncm91cCB2aWEgYSBoaW50Ci0JCSAqCQlhbmQgZGlkbid0IGZpbmQgYW55dGhpbmcsIHNvIHdlIHN0YXJ0IGF0Ci0JCSAqCQl0aGUgaGVhZCBvZiB0aGUgYmxvY2sgZ3JvdXBzIGFuZCBrZWVwIHNlYXJjaGluZwotCQkgKiBsb29wID09IDE6IHdlJ3JlIHNlYXJjaGluZyB0aHJvdWdoIGFsbCBvZiB0aGUgYmxvY2sgZ3JvdXBzCi0JCSAqCQlpZiB3ZSBoaXQgdGhlIGhlYWQgYWdhaW4gd2UgaGF2ZSBzZWFyY2hlZAotCQkgKgkJYWxsIG9mIHRoZSBibG9jayBncm91cHMgZm9yIHRoaXMgc3BhY2UgYW5kIHdlCi0JCSAqCQluZWVkIHRvIHRyeSBhbmQgYWxsb2NhdGUsIGlmIHdlIGNhbnQgZXJyb3Igb3V0LgotCQkgKiBsb29wID09IDI6IHdlIGFsbG9jYXRlZCBtb3JlIHNwYWNlIGFuZCBhcmUgbG9vcGluZyB0aHJvdWdoCi0JCSAqCQlhbGwgb2YgdGhlIGJsb2NrIGdyb3VwcyBhZ2Fpbi4KLQkJICovCi0JCWlmIChsb29wID09IDApIHsKLQkJCWhlYWQgPSAmc3BhY2VfaW5mby0+YmxvY2tfZ3JvdXBzOwotCQkJY3VyID0gaGVhZC0+bmV4dDsKLQkJCWxvb3ArKzsKLQkJfSBlbHNlIGlmIChsb29wID09IDEgJiYgY3VyID09IGhlYWQpIHsKLQkJCWludCBrZWVwX2dvaW5nOwotCi0JCQkvKiBhdCB0aGlzIHBvaW50IHdlIGdpdmUgdXAgb24gdGhlIGVtcHR5X3NpemUKLQkJCSAqIGFsbG9jYXRpb25zIGFuZCBqdXN0IHRyeSB0byBhbGxvY2F0ZSB0aGUgbWluCi0JCQkgKiBzcGFjZS4KLQkJCSAqCi0JCQkgKiBUaGUgZXh0cmFfbG9vcCBmaWVsZCB3YXMgc2V0IGlmIGFuIGVtcHR5X3NpemUKLQkJCSAqIGFsbG9jYXRpb24gd2FzIGF0dGVtcHRlZCBhYm92ZSwgYW5kIGlmIHRoaXMKLQkJCSAqIGlzIHRyeSB3ZSBuZWVkIHRvIHRyeSB0aGUgbG9vcCBhZ2FpbiB3aXRob3V0Ci0JCQkgKiB0aGUgYWRkaXRpb25hbCBlbXB0eV9zaXplLgorCQlpZiAobGFzdF9wdHIpIHsKKwkJCS8qCisJCQkgKiB0aGUgcmVmaWxsIGxvY2sga2VlcHMgb3V0IG90aGVyCisJCQkgKiBwZW9wbGUgdHJ5aW5nIHRvIHN0YXJ0IGEgbmV3IGNsdXN0ZXIKIAkJCSAqLwotCQkJdG90YWxfbmVlZGVkIC09IGVtcHR5X3NpemU7Ci0JCQllbXB0eV9zaXplID0gMDsKLQkJCWtlZXBfZ29pbmcgPSBleHRyYV9sb29wOwotCQkJbG9vcCsrOworCQkJc3Bpbl9sb2NrKCZsYXN0X3B0ci0+cmVmaWxsX2xvY2spOworCQkJb2Zmc2V0ID0gYnRyZnNfYWxsb2NfZnJvbV9jbHVzdGVyKGJsb2NrX2dyb3VwLCBsYXN0X3B0ciwKKwkJCQkJCSBudW1fYnl0ZXMsIHNlYXJjaF9zdGFydCk7CisJCQlpZiAob2Zmc2V0KSB7CisJCQkJLyogd2UgaGF2ZSBhIGJsb2NrLCB3ZSdyZSBkb25lICovCisJCQkJc3Bpbl91bmxvY2soJmxhc3RfcHRyLT5yZWZpbGxfbG9jayk7CisJCQkJZ290byBjaGVja3M7CisJCQl9CiAKLQkJCWlmIChhbGxvd2VkX2NodW5rX2FsbG9jICYmICFjaHVua19hbGxvY19kb25lKSB7Ci0JCQkJdXBfcmVhZCgmc3BhY2VfaW5mby0+Z3JvdXBzX3NlbSk7Ci0JCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCi0JCQkJCQkgICAgIDIgKiAxMDI0ICogMTAyNCwgZGF0YSwgMSk7Ci0JCQkJZG93bl9yZWFkKCZzcGFjZV9pbmZvLT5ncm91cHNfc2VtKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJZ290byBsb29wX2NoZWNrOwotCQkJCWhlYWQgPSAmc3BhY2VfaW5mby0+YmxvY2tfZ3JvdXBzOworCQkJc3Bpbl9sb2NrKCZsYXN0X3B0ci0+bG9jayk7CisJCQkvKgorCQkJICogd2hvb3BzLCB0aGlzIGNsdXN0ZXIgZG9lc24ndCBhY3R1YWxseSBwb2ludCB0bworCQkJICogdGhpcyBibG9jayBncm91cC4gIEdldCBhIHJlZiBvbiB0aGUgYmxvY2sKKwkJCSAqIGdyb3VwIGlzIGRvZXMgcG9pbnQgdG8gYW5kIHRyeSBhZ2FpbgorCQkJICovCisJCQlpZiAoIWxhc3RfcHRyX2xvb3AgJiYgbGFzdF9wdHItPmJsb2NrX2dyb3VwICYmCisJCQkgICAgbGFzdF9wdHItPmJsb2NrX2dyb3VwICE9IGJsb2NrX2dyb3VwKSB7CisKKwkJCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOworCQkJCWJsb2NrX2dyb3VwID0gbGFzdF9wdHItPmJsb2NrX2dyb3VwOworCQkJCWF0b21pY19pbmMoJmJsb2NrX2dyb3VwLT5jb3VudCk7CisJCQkJc3Bpbl91bmxvY2soJmxhc3RfcHRyLT5sb2NrKTsKKwkJCQlzcGluX3VubG9jaygmbGFzdF9wdHItPnJlZmlsbF9sb2NrKTsKKworCQkJCWxhc3RfcHRyX2xvb3AgPSAxOworCQkJCXNlYXJjaF9zdGFydCA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQ7CisJCQkJZ290byBoYXZlX2Jsb2NrX2dyb3VwOworCQkJfQorCQkJc3Bpbl91bmxvY2soJmxhc3RfcHRyLT5sb2NrKTsKKworCQkJLyoKKwkJCSAqIHRoaXMgY2x1c3RlciBkaWRuJ3Qgd29yayBvdXQsIGZyZWUgaXQgYW5kCisJCQkgKiBzdGFydCBvdmVyCisJCQkgKi8KKwkJCWJ0cmZzX3JldHVybl9jbHVzdGVyX3RvX2ZyZWVfc3BhY2UoTlVMTCwgbGFzdF9wdHIpOworCisJCQlsYXN0X3B0cl9sb29wID0gMDsKKworCQkJLyogYWxsb2NhdGUgYSBjbHVzdGVyIGluIHRoaXMgYmxvY2sgZ3JvdXAgKi8KKwkJCXJldCA9IGJ0cmZzX2ZpbmRfc3BhY2VfY2x1c3Rlcih0cmFucywKKwkJCQkJICAgICAgIGJsb2NrX2dyb3VwLCBsYXN0X3B0ciwKKwkJCQkJICAgICAgIG9mZnNldCwgbnVtX2J5dGVzLAorCQkJCQkgICAgICAgZW1wdHlfY2x1c3RlciArIGVtcHR5X3NpemUpOworCQkJaWYgKHJldCA9PSAwKSB7CiAJCQkJLyoKLQkJCQkgKiB3ZSd2ZSBhbGxvY2F0ZWQgYSBuZXcgY2h1bmssIGtlZXAKLQkJCQkgKiB0cnlpbmcKKwkJCQkgKiBub3cgcHVsbCBvdXIgYWxsb2NhdGlvbiBvdXQgb2YgdGhpcworCQkJCSAqIGNsdXN0ZXIKIAkJCQkgKi8KLQkJCQlrZWVwX2dvaW5nID0gMTsKLQkJCQljaHVua19hbGxvY19kb25lID0gMTsKLQkJCX0gZWxzZSBpZiAoIWFsbG93ZWRfY2h1bmtfYWxsb2MpIHsKLQkJCQlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IDE7CisJCQkJb2Zmc2V0ID0gYnRyZnNfYWxsb2NfZnJvbV9jbHVzdGVyKGJsb2NrX2dyb3VwLAorCQkJCQkJICBsYXN0X3B0ciwgbnVtX2J5dGVzLAorCQkJCQkJICBzZWFyY2hfc3RhcnQpOworCQkJCWlmIChvZmZzZXQpIHsKKwkJCQkJLyogd2UgZm91bmQgb25lLCBwcm9jZWVkICovCisJCQkJCXNwaW5fdW5sb2NrKCZsYXN0X3B0ci0+cmVmaWxsX2xvY2spOworCQkJCQlnb3RvIGNoZWNrczsKKwkJCQl9CiAJCQl9Ci1sb29wX2NoZWNrOgotCQkJaWYgKGtlZXBfZ29pbmcpIHsKLQkJCQljdXIgPSBoZWFkLT5uZXh0OwotCQkJCWV4dHJhX2xvb3AgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsKKwkJCS8qCisJCQkgKiBhdCB0aGlzIHBvaW50IHdlIGVpdGhlciBkaWRuJ3QgZmluZCBhIGNsdXN0ZXIKKwkJCSAqIG9yIHdlIHdlcmVuJ3QgYWJsZSB0byBhbGxvY2F0ZSBhIGJsb2NrIGZyb20gb3VyCisJCQkgKiBjbHVzdGVyLiAgRnJlZSB0aGUgY2x1c3RlciB3ZSd2ZSBiZWVuIHRyeWluZworCQkJICogdG8gdXNlLCBhbmQgZ28gdG8gdGhlIG5leHQgYmxvY2sgZ3JvdXAKKwkJCSAqLworCQkJaWYgKGxvb3AgPCAyKSB7CisJCQkJYnRyZnNfcmV0dXJuX2NsdXN0ZXJfdG9fZnJlZV9zcGFjZShOVUxMLAorCQkJCQkJCQkgICBsYXN0X3B0cik7CisJCQkJc3Bpbl91bmxvY2soJmxhc3RfcHRyLT5yZWZpbGxfbG9jayk7CisJCQkJZ290byBsb29wOwogCQkJfQotCQl9IGVsc2UgaWYgKGN1ciA9PSBoZWFkKSB7Ci0JCQlicmVhazsKKwkJCXNwaW5fdW5sb2NrKCZsYXN0X3B0ci0+cmVmaWxsX2xvY2spOwogCQl9CiAKLQkJYmxvY2tfZ3JvdXAgPSBsaXN0X2VudHJ5KGN1ciwgc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlLAotCQkJCQkgbGlzdCk7Ci0JCWF0b21pY19pbmMoJmJsb2NrX2dyb3VwLT5jb3VudCk7CisJCW9mZnNldCA9IGJ0cmZzX2ZpbmRfc3BhY2VfZm9yX2FsbG9jKGJsb2NrX2dyb3VwLCBzZWFyY2hfc3RhcnQsCisJCQkJCQkgICAgbnVtX2J5dGVzLCBlbXB0eV9zaXplKTsKKwkJaWYgKCFvZmZzZXQpCisJCQlnb3RvIGxvb3A7CitjaGVja3M6CisJCXNlYXJjaF9zdGFydCA9IHN0cmlwZV9hbGlnbihyb290LCBvZmZzZXQpOwogCi0JCXNlYXJjaF9zdGFydCA9IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQ7Ci0JCWN1ciA9IGN1ci0+bmV4dDsKKwkJLyogbW92ZSBvbiB0byB0aGUgbmV4dCBncm91cCAqLworCQlpZiAoc2VhcmNoX3N0YXJ0ICsgbnVtX2J5dGVzID49IHNlYXJjaF9lbmQpIHsKKwkJCWJ0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsIG51bV9ieXRlcyk7CisJCQlnb3RvIGxvb3A7CisJCX0KKworCQkvKiBtb3ZlIG9uIHRvIHRoZSBuZXh0IGdyb3VwICovCisJCWlmIChzZWFyY2hfc3RhcnQgKyBudW1fYnl0ZXMgPgorCQkgICAgYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCArIGJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0KSB7CisJCQlidHJmc19hZGRfZnJlZV9zcGFjZShibG9ja19ncm91cCwgb2Zmc2V0LCBudW1fYnl0ZXMpOworCQkJZ290byBsb29wOworCQl9CisKKwkJaWYgKGV4Y2x1ZGVfbnIgPiAwICYmCisJCSAgICAoc2VhcmNoX3N0YXJ0ICsgbnVtX2J5dGVzID4gZXhjbHVkZV9zdGFydCAmJgorCQkgICAgIHNlYXJjaF9zdGFydCA8IGV4Y2x1ZGVfc3RhcnQgKyBleGNsdWRlX25yKSkgeworCQkJc2VhcmNoX3N0YXJ0ID0gZXhjbHVkZV9zdGFydCArIGV4Y2x1ZGVfbnI7CisKKwkJCWJ0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsIG51bV9ieXRlcyk7CisJCQkvKgorCQkJICogaWYgc2VhcmNoX3N0YXJ0IGlzIHN0aWxsIGluIHRoaXMgYmxvY2sgZ3JvdXAKKwkJCSAqIHRoZW4gd2UganVzdCByZS1zZWFyY2ggdGhpcyBibG9jayBncm91cAorCQkJICovCisJCQlpZiAoc2VhcmNoX3N0YXJ0ID49IGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQgJiYKKwkJCSAgICBzZWFyY2hfc3RhcnQgPCAoYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZCArCisJCQkJCSAgICBibG9ja19ncm91cC0+a2V5Lm9mZnNldCkpCisJCQkJZ290byBoYXZlX2Jsb2NrX2dyb3VwOworCQkJZ290byBsb29wOworCQl9CisKKwkJaW5zLT5vYmplY3RpZCA9IHNlYXJjaF9zdGFydDsKKwkJaW5zLT5vZmZzZXQgPSBudW1fYnl0ZXM7CisKKwkJaWYgKG9mZnNldCA8IHNlYXJjaF9zdGFydCkKKwkJCWJ0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsCisJCQkJCSAgICAgc2VhcmNoX3N0YXJ0IC0gb2Zmc2V0KTsKKwkJQlVHX09OKG9mZnNldCA+IHNlYXJjaF9zdGFydCk7CisKKwkJLyogd2UgYXJlIGFsbCBnb29kLCBsZXRzIHJldHVybiAqLworCQlicmVhazsKK2xvb3A6CisJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CisJfQorCXVwX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOworCisJLyogbG9vcCA9PSAwLCB0cnkgdG8gZmluZCBhIGNsdXN0ZXJlZCBhbGxvYyBpbiBldmVyeSBibG9jayBncm91cAorCSAqIGxvb3AgPT0gMSwgdHJ5IGFnYWluIGFmdGVyIGZvcmNpbmcgYSBjaHVuayBhbGxvY2F0aW9uCisJICogbG9vcCA9PSAyLCBzZXQgZW1wdHlfc2l6ZSBhbmQgZW1wdHlfY2x1c3RlciB0byAwIGFuZCB0cnkgYWdhaW4KKwkgKi8KKwlpZiAoIWlucy0+b2JqZWN0aWQgJiYgbG9vcCA8IDMgJiYKKwkgICAgKGVtcHR5X3NpemUgfHwgZW1wdHlfY2x1c3RlciB8fCBhbGxvd2VkX2NodW5rX2FsbG9jKSkgeworCQlpZiAobG9vcCA+PSAyKSB7CisJCQllbXB0eV9zaXplID0gMDsKKwkJCWVtcHR5X2NsdXN0ZXIgPSAwOworCQl9CisKKwkJaWYgKGFsbG93ZWRfY2h1bmtfYWxsb2MpIHsKKwkJCXJldCA9IGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LCBudW1fYnl0ZXMgKworCQkJCQkgICAgIDIgKiAxMDI0ICogMTAyNCwgZGF0YSwgMSk7CisJCQlhbGxvd2VkX2NodW5rX2FsbG9jID0gMDsKKwkJfSBlbHNlIHsKKwkJCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMTsKKwkJfQorCisJCWlmIChsb29wIDwgMykgeworCQkJbG9vcCsrOworCQkJZ290byBzZWFyY2g7CisJCX0KKwkJcmV0ID0gLUVOT1NQQzsKKwl9IGVsc2UgaWYgKCFpbnMtPm9iamVjdGlkKSB7CisJCXJldCA9IC1FTk9TUEM7CiAJfQogCiAJLyogd2UgZm91bmQgd2hhdCB3ZSBuZWVkZWQgKi8KQEAgLTMzMzIsMjEgKzI3ODIsMTAgQEAKIAkJaWYgKCEoZGF0YSAmIEJUUkZTX0JMT0NLX0dST1VQX0RBVEEpKQogCQkJdHJhbnMtPmJsb2NrX2dyb3VwID0gYmxvY2tfZ3JvdXAtPmtleS5vYmplY3RpZDsKIAotCQlpZiAobGFzdF9wdHIpCi0JCQkqbGFzdF9wdHIgPSBpbnMtPm9iamVjdGlkICsgaW5zLT5vZmZzZXQ7CisJCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJCXJldCA9IDA7Ci0JfSBlbHNlIGlmICghcmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgc2VhcmNoaW5nIGZvciAlbGx1IGJ5dGVzLCAiCi0JCSAgICAgICAibnVtX2J5dGVzICVsbHUsIGxvb3AgJWQsIGFsbG93ZWRfYWxsb2MgJWRcbiIsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXRvdGFsX25lZWRlZCwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbnVtX2J5dGVzLAotCQkgICAgICAgbG9vcCwgYWxsb3dlZF9jaHVua19hbGxvYyk7Ci0JCXJldCA9IC1FTk9TUEM7CiAJfQotCWlmIChibG9ja19ncm91cCkKLQkJcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAotCXVwX3JlYWQoJnNwYWNlX2luZm8tPmdyb3Vwc19zZW0pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0NTEsNyArMjg5MCw3IEBACiAJcmV0ID0gYnRyZnNfZGlzY2FyZF9leHRlbnQocm9vdCwgc3RhcnQsIGxlbik7CiAKIAlidHJmc19hZGRfZnJlZV9zcGFjZShjYWNoZSwgc3RhcnQsIGxlbik7Ci0JcHV0X2Jsb2NrX2dyb3VwKGNhY2hlKTsKKwlidHJmc19wdXRfYmxvY2tfZ3JvdXAoY2FjaGUpOwogCXVwZGF0ZV9yZXNlcnZlZF9leHRlbnRzKHJvb3QsIHN0YXJ0LCBsZW4sIDApOwogCiAJcmV0dXJuIHJldDsKQEAgLTM0NzUsMTAgKzI5MTQsMTAgQEAKIHN0YXRpYyBpbnQgX19idHJmc19hbGxvY19yZXNlcnZlZF9leHRlbnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJCSBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IHBhcmVudCwKIAkJCQkJIHU2NCByb290X29iamVjdGlkLCB1NjQgcmVmX2dlbmVyYXRpb24sCi0JCQkJCSB1NjQgb3duZXIsIHN0cnVjdCBidHJmc19rZXkgKmlucykKKwkJCQkJIHU2NCBvd25lciwgc3RydWN0IGJ0cmZzX2tleSAqaW5zLAorCQkJCQkgaW50IHJlZl9tb2QpCiB7CiAJaW50IHJldDsKLQlpbnQgcGVuZGluZ19yZXQ7CiAJdTY0IHN1cGVyX3VzZWQ7CiAJdTY0IHJvb3RfdXNlZDsKIAl1NjQgbnVtX2J5dGVzID0gaW5zLT5vZmZzZXQ7CkBAIC0zNTAzLDMzICsyOTQyLDYgQEAKIAlidHJmc19zZXRfcm9vdF91c2VkKCZyb290LT5yb290X2l0ZW0sIHJvb3RfdXNlZCArIG51bV9ieXRlcyk7CiAJc3Bpbl91bmxvY2soJmluZm8tPmRlbGFsbG9jX2xvY2spOwogCi0JaWYgKHJvb3QgPT0gZXh0ZW50X3Jvb3QpIHsKLQkJc3RydWN0IHBlbmRpbmdfZXh0ZW50X29wICpleHRlbnRfb3A7Ci0KLQkJZXh0ZW50X29wID0ga21hbGxvYyhzaXplb2YoKmV4dGVudF9vcCksIEdGUF9OT0ZTKTsKLQkJQlVHX09OKCFleHRlbnRfb3ApOwotCi0JCWV4dGVudF9vcC0+dHlwZSA9IFBFTkRJTkdfRVhURU5UX0lOU0VSVDsKLQkJZXh0ZW50X29wLT5ieXRlbnIgPSBpbnMtPm9iamVjdGlkOwotCQlleHRlbnRfb3AtPm51bV9ieXRlcyA9IGlucy0+b2Zmc2V0OwotCQlleHRlbnRfb3AtPnBhcmVudCA9IHBhcmVudDsKLQkJZXh0ZW50X29wLT5vcmlnX3BhcmVudCA9IDA7Ci0JCWV4dGVudF9vcC0+Z2VuZXJhdGlvbiA9IHJlZl9nZW5lcmF0aW9uOwotCQlleHRlbnRfb3AtPm9yaWdfZ2VuZXJhdGlvbiA9IDA7Ci0JCWV4dGVudF9vcC0+bGV2ZWwgPSAoaW50KW93bmVyOwotCQlJTklUX0xJU1RfSEVBRCgmZXh0ZW50X29wLT5saXN0KTsKLQkJZXh0ZW50X29wLT5kZWwgPSAwOwotCi0JCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnNfbXV0ZXgpOwotCQlzZXRfZXh0ZW50X2JpdHMoJnJvb3QtPmZzX2luZm8tPmV4dGVudF9pbnMsIGlucy0+b2JqZWN0aWQsCi0JCQkJaW5zLT5vYmplY3RpZCArIGlucy0+b2Zmc2V0IC0gMSwKLQkJCQlFWFRFTlRfV1JJVEVCQUNLLCBHRlBfTk9GUyk7Ci0JCXNldF9zdGF0ZV9wcml2YXRlKCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zLAotCQkJCSAgaW5zLT5vYmplY3RpZCwgKHVuc2lnbmVkIGxvbmcpZXh0ZW50X29wKTsKLQkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5leHRlbnRfaW5zX211dGV4KTsKLQkJZ290byB1cGRhdGVfYmxvY2s7Ci0JfQotCiAJbWVtY3B5KCZrZXlzWzBdLCBpbnMsIHNpemVvZigqaW5zKSk7CiAJa2V5c1sxXS5vYmplY3RpZCA9IGlucy0+b2JqZWN0aWQ7CiAJa2V5c1sxXS50eXBlID0gQlRSRlNfRVhURU5UX1JFRl9LRVk7CkBAIC0zNTQwLDM3ICsyOTUyLDMxIEBACiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlCVUdfT04oIXBhdGgpOwogCisJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCXJldCA9IGJ0cmZzX2luc2VydF9lbXB0eV9pdGVtcyh0cmFucywgZXh0ZW50X3Jvb3QsIHBhdGgsIGtleXMsCiAJCQkJICAgICAgIHNpemVzLCAyKTsKIAlCVUdfT04ocmV0KTsKIAogCWV4dGVudF9pdGVtID0gYnRyZnNfaXRlbV9wdHIocGF0aC0+bm9kZXNbMF0sIHBhdGgtPnNsb3RzWzBdLAogCQkJCSAgICAgc3RydWN0IGJ0cmZzX2V4dGVudF9pdGVtKTsKLQlidHJmc19zZXRfZXh0ZW50X3JlZnMocGF0aC0+bm9kZXNbMF0sIGV4dGVudF9pdGVtLCAxKTsKKwlidHJmc19zZXRfZXh0ZW50X3JlZnMocGF0aC0+bm9kZXNbMF0sIGV4dGVudF9pdGVtLCByZWZfbW9kKTsKIAlyZWYgPSBidHJmc19pdGVtX3B0cihwYXRoLT5ub2Rlc1swXSwgcGF0aC0+c2xvdHNbMF0gKyAxLAogCQkJICAgICBzdHJ1Y3QgYnRyZnNfZXh0ZW50X3JlZik7CiAKIAlidHJmc19zZXRfcmVmX3Jvb3QocGF0aC0+bm9kZXNbMF0sIHJlZiwgcm9vdF9vYmplY3RpZCk7CiAJYnRyZnNfc2V0X3JlZl9nZW5lcmF0aW9uKHBhdGgtPm5vZGVzWzBdLCByZWYsIHJlZl9nZW5lcmF0aW9uKTsKIAlidHJmc19zZXRfcmVmX29iamVjdGlkKHBhdGgtPm5vZGVzWzBdLCByZWYsIG93bmVyKTsKLQlidHJmc19zZXRfcmVmX251bV9yZWZzKHBhdGgtPm5vZGVzWzBdLCByZWYsIDEpOworCWJ0cmZzX3NldF9yZWZfbnVtX3JlZnMocGF0aC0+bm9kZXNbMF0sIHJlZiwgcmVmX21vZCk7CiAKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXRoLT5ub2Rlc1swXSk7CiAKIAl0cmFucy0+YWxsb2NfZXhjbHVkZV9zdGFydCA9IDA7CiAJdHJhbnMtPmFsbG9jX2V4Y2x1ZGVfbnIgPSAwOwogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQlmaW5pc2hfY3VycmVudF9pbnNlcnQodHJhbnMsIGV4dGVudF9yb290LCAwKTsKLQlwZW5kaW5nX3JldCA9IGRlbF9wZW5kaW5nX2V4dGVudHModHJhbnMsIGV4dGVudF9yb290LCAwKTsKIAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwotCWlmIChwZW5kaW5nX3JldCkgewotCQlyZXQgPSBwZW5kaW5nX3JldDsKLQkJZ290byBvdXQ7Ci0JfQogCi11cGRhdGVfYmxvY2s6CiAJcmV0ID0gdXBkYXRlX2Jsb2NrX2dyb3VwKHRyYW5zLCByb290LCBpbnMtPm9iamVjdGlkLAogCQkJCSBpbnMtPm9mZnNldCwgMSwgMCk7CiAJaWYgKHJldCkgewpAQCAtMzU5Miw5ICsyOTk4LDEyIEBACiAKIAlpZiAocm9vdF9vYmplY3RpZCA9PSBCVFJGU19UUkVFX0xPR19PQkpFQ1RJRCkKIAkJcmV0dXJuIDA7Ci0JcmV0ID0gX19idHJmc19hbGxvY19yZXNlcnZlZF9leHRlbnQodHJhbnMsIHJvb3QsIHBhcmVudCwgcm9vdF9vYmplY3RpZCwKLQkJCQkJICAgIHJlZl9nZW5lcmF0aW9uLCBvd25lciwgaW5zKTsKLQl1cGRhdGVfcmVzZXJ2ZWRfZXh0ZW50cyhyb290LCBpbnMtPm9iamVjdGlkLCBpbnMtPm9mZnNldCwgMCk7CisKKwlyZXQgPSBidHJmc19hZGRfZGVsYXllZF9yZWYodHJhbnMsIGlucy0+b2JqZWN0aWQsCisJCQkJICAgIGlucy0+b2Zmc2V0LCBwYXJlbnQsIHJvb3Rfb2JqZWN0aWQsCisJCQkJICAgIHJlZl9nZW5lcmF0aW9uLCBvd25lciwKKwkJCQkgICAgQlRSRlNfQUREX0RFTEFZRURfRVhURU5ULCAwKTsKKwlCVUdfT04ocmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNjE5LDkgKzMwMjgsOSBAQAogCXJldCA9IGJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbnMtPm9iamVjdGlkLAogCQkJCSAgICAgIGlucy0+b2Zmc2V0KTsKIAlCVUdfT04ocmV0KTsKLQlwdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOworCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAJcmV0ID0gX19idHJmc19hbGxvY19yZXNlcnZlZF9leHRlbnQodHJhbnMsIHJvb3QsIHBhcmVudCwgcm9vdF9vYmplY3RpZCwKLQkJCQkJICAgIHJlZl9nZW5lcmF0aW9uLCBvd25lciwgaW5zKTsKKwkJCQkJICAgIHJlZl9nZW5lcmF0aW9uLCBvd25lciwgaW5zLCAxKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNjQwLDIwICszMDQ5LDE4IEBACiAJCSAgICAgICB1NjQgc2VhcmNoX2VuZCwgc3RydWN0IGJ0cmZzX2tleSAqaW5zLCB1NjQgZGF0YSkKIHsKIAlpbnQgcmV0OwotCiAJcmV0ID0gX19idHJmc19yZXNlcnZlX2V4dGVudCh0cmFucywgcm9vdCwgbnVtX2J5dGVzLAogCQkJCSAgICAgbWluX2FsbG9jX3NpemUsIGVtcHR5X3NpemUsIGhpbnRfYnl0ZSwKIAkJCQkgICAgIHNlYXJjaF9lbmQsIGlucywgZGF0YSk7CiAJQlVHX09OKHJldCk7CiAJaWYgKHJvb3Rfb2JqZWN0aWQgIT0gQlRSRlNfVFJFRV9MT0dfT0JKRUNUSUQpIHsKLQkJcmV0ID0gX19idHJmc19hbGxvY19yZXNlcnZlZF9leHRlbnQodHJhbnMsIHJvb3QsIHBhcmVudCwKLQkJCQkJcm9vdF9vYmplY3RpZCwgcmVmX2dlbmVyYXRpb24sCi0JCQkJCW93bmVyX29iamVjdGlkLCBpbnMpOworCQlyZXQgPSBidHJmc19hZGRfZGVsYXllZF9yZWYodHJhbnMsIGlucy0+b2JqZWN0aWQsCisJCQkJCSAgICBpbnMtPm9mZnNldCwgcGFyZW50LCByb290X29iamVjdGlkLAorCQkJCQkgICAgcmVmX2dlbmVyYXRpb24sIG93bmVyX29iamVjdGlkLAorCQkJCQkgICAgQlRSRlNfQUREX0RFTEFZRURfRVhURU5ULCAwKTsKIAkJQlVHX09OKHJldCk7Ci0KLQl9IGVsc2UgewotCQl1cGRhdGVfcmVzZXJ2ZWRfZXh0ZW50cyhyb290LCBpbnMtPm9iamVjdGlkLCBpbnMtPm9mZnNldCwgMSk7CiAJfQorCXVwZGF0ZV9yZXNlcnZlZF9leHRlbnRzKHJvb3QsIGlucy0+b2JqZWN0aWQsIGlucy0+b2Zmc2V0LCAxKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNzg5LDcgKzMxOTYsNyBAQAogCiAJCWZpID0gYnRyZnNfaXRlbV9wdHIobGVhZiwgc2xvdCwgc3RydWN0IGJ0cmZzX2ZpbGVfZXh0ZW50X2l0ZW0pOwogCi0JCXJldCA9IF9fYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGRpc2tfYnl0ZW5yLAorCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgZGlza19ieXRlbnIsCiAJCQkJYnRyZnNfZmlsZV9leHRlbnRfZGlza19udW1fYnl0ZXMobGVhZiwgZmkpLAogCQkJCWxlYWYtPnN0YXJ0LCBsZWFmX293bmVyLCBsZWFmX2dlbmVyYXRpb24sCiAJCQkJa2V5Lm9iamVjdGlkLCAwKTsKQEAgLTM4MjksNyArMzIzNiw3IEBACiAJICovCiAJZm9yIChpID0gMDsgaSA8IHJlZi0+bnJpdGVtczsgaSsrKSB7CiAJCWluZm8gPSByZWYtPmV4dGVudHMgKyBzb3J0ZWRbaV0uc2xvdDsKLQkJcmV0ID0gX19idHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgaW5mby0+Ynl0ZW5yLAorCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgaW5mby0+Ynl0ZW5yLAogCQkJCQkgIGluZm8tPm51bV9ieXRlcywgcmVmLT5ieXRlbnIsCiAJCQkJCSAgcmVmLT5vd25lciwgcmVmLT5nZW5lcmF0aW9uLAogCQkJCQkgIGluZm8tPm9iamVjdGlkLCAwKTsKQEAgLTM4NDYsMTIgKzMyNTMsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkcm9wX3NuYXBfbG9va3VwX3JlZmNvdW50KHN0cnVjdCBidHJmc19yb290ICpyb290LCB1NjQgc3RhcnQsCitzdGF0aWMgaW50IGRyb3Bfc25hcF9sb29rdXBfcmVmY291bnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTY0IHN0YXJ0LAogCQkJCSAgICAgdTY0IGxlbiwgdTMyICpyZWZzKQogewogCWludCByZXQ7CiAKLQlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X3JlZihOVUxMLCByb290LCBzdGFydCwgbGVuLCByZWZzKTsKKwlyZXQgPSBidHJmc19sb29rdXBfZXh0ZW50X3JlZih0cmFucywgcm9vdCwgc3RhcnQsIGxlbiwgcmVmcyk7CiAJQlVHX09OKHJldCk7CiAKICNpZiAwIC8qIHNvbWUgZGVidWdnaW5nIGNvZGUgaW4gY2FzZSB3ZSBzZWUgcHJvYmxlbXMgaGVyZSAqLwpAQCAtMzk1OSw3ICszMzY3LDggQEAKIAkJICogd2UganVzdCBkZWNyZW1lbnQgaXQgYmVsb3cgYW5kIGRvbid0IHVwZGF0ZSBhbnkKIAkJICogb2YgdGhlIHJlZnMgdGhlIGxlYWYgcG9pbnRzIHRvLgogCQkgKi8KLQkJcmV0ID0gZHJvcF9zbmFwX2xvb2t1cF9yZWZjb3VudChyb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwgJnJlZnMpOworCQlyZXQgPSBkcm9wX3NuYXBfbG9va3VwX3JlZmNvdW50KHRyYW5zLCByb290LCBieXRlbnIsCisJCQkJCQlibG9ja3NpemUsICZyZWZzKTsKIAkJQlVHX09OKHJldCk7CiAJCWlmIChyZWZzICE9IDEpCiAJCQljb250aW51ZTsKQEAgLTQwMTAsNyArMzQxOSw3IEBACiAJICovCiAJZm9yIChpID0gMDsgaSA8IHJlZmk7IGkrKykgewogCQlieXRlbnIgPSBzb3J0ZWRbaV0uYnl0ZW5yOwotCQlyZXQgPSBfX2J0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsCisJCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsCiAJCQkJCWJsb2Nrc2l6ZSwgZWItPnN0YXJ0LAogCQkJCQlyb290X293bmVyLCByb290X2dlbiwgMCwgMSk7CiAJCUJVR19PTihyZXQpOwpAQCAtNDA1Myw3ICszNDYyLDcgQEAKIAogCVdBUk5fT04oKmxldmVsIDwgMCk7CiAJV0FSTl9PTigqbGV2ZWwgPj0gQlRSRlNfTUFYX0xFVkVMKTsKLQlyZXQgPSBkcm9wX3NuYXBfbG9va3VwX3JlZmNvdW50KHJvb3QsIHBhdGgtPm5vZGVzWypsZXZlbF0tPnN0YXJ0LAorCXJldCA9IGRyb3Bfc25hcF9sb29rdXBfcmVmY291bnQodHJhbnMsIHJvb3QsIHBhdGgtPm5vZGVzWypsZXZlbF0tPnN0YXJ0LAogCQkJCXBhdGgtPm5vZGVzWypsZXZlbF0tPmxlbiwgJnJlZnMpOwogCUJVR19PTihyZXQpOwogCWlmIChyZWZzID4gMSkKQEAgLTQxMDQsNyArMzUxMyw4IEBACiAJCXB0cl9nZW4gPSBidHJmc19ub2RlX3B0cl9nZW5lcmF0aW9uKGN1ciwgcGF0aC0+c2xvdHNbKmxldmVsXSk7CiAJCWJsb2Nrc2l6ZSA9IGJ0cmZzX2xldmVsX3NpemUocm9vdCwgKmxldmVsIC0gMSk7CiAKLQkJcmV0ID0gZHJvcF9zbmFwX2xvb2t1cF9yZWZjb3VudChyb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwgJnJlZnMpOworCQlyZXQgPSBkcm9wX3NuYXBfbG9va3VwX3JlZmNvdW50KHRyYW5zLCByb290LCBieXRlbnIsCisJCQkJCQlibG9ja3NpemUsICZyZWZzKTsKIAkJQlVHX09OKHJldCk7CiAKIAkJLyoKQEAgLTQxMTksNyArMzUyOSw3IEBACiAJCQlyb290X2dlbiA9IGJ0cmZzX2hlYWRlcl9nZW5lcmF0aW9uKHBhcmVudCk7CiAJCQlwYXRoLT5zbG90c1sqbGV2ZWxdKys7CiAKLQkJCXJldCA9IF9fYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwKKwkJCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsCiAJCQkJCQlibG9ja3NpemUsIHBhcmVudC0+c3RhcnQsCiAJCQkJCQlyb290X293bmVyLCByb290X2dlbiwKIAkJCQkJCSpsZXZlbCAtIDEsIDEpOwpAQCAtNDE2NSw3ICszNTc1LDcgQEAKIAkgKiBjbGVhbnVwIGFuZCBmcmVlIHRoZSByZWZlcmVuY2Ugb24gdGhlIGxhc3Qgbm9kZQogCSAqIHdlIHByb2Nlc3NlZAogCSAqLwotCXJldCA9IF9fYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGJ5dGVuciwgYmxvY2tzaXplLAorCXJldCA9IGJ0cmZzX2ZyZWVfZXh0ZW50KHRyYW5zLCByb290LCBieXRlbnIsIGJsb2Nrc2l6ZSwKIAkJCQkgIHBhcmVudC0+c3RhcnQsIHJvb3Rfb3duZXIsIHJvb3RfZ2VuLAogCQkJCSAgKmxldmVsLCAxKTsKIAlmcmVlX2V4dGVudF9idWZmZXIocGF0aC0+bm9kZXNbKmxldmVsXSk7CkBAIC00MzU0LDYgKzM3NjQsNyBAQAogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCWludCBpOwogCWludCBvcmlnX2xldmVsOworCWludCB1cGRhdGVfY291bnQ7CiAJc3RydWN0IGJ0cmZzX3Jvb3RfaXRlbSAqcm9vdF9pdGVtID0gJnJvb3QtPnJvb3RfaXRlbTsKIAogCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmcm9vdC0+ZnNfaW5mby0+ZHJvcF9tdXRleCkpOwpAQCAtNDM5NSw2ICszODA2LDcgQEAKIAkJfQogCX0KIAl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBsb25nIHVwZGF0ZTsKIAkJd3JldCA9IHdhbGtfZG93bl90cmVlKHRyYW5zLCByb290LCBwYXRoLCAmbGV2ZWwpOwogCQlpZiAod3JldCA+IDApCiAJCQlicmVhazsKQEAgLTQ0MDcsMTIgKzM4MTksMjEgQEAKIAkJCWJyZWFrOwogCQlpZiAod3JldCA8IDApCiAJCQlyZXQgPSB3cmV0OwotCQlpZiAodHJhbnMtPnRyYW5zYWN0aW9uLT5pbl9jb21taXQpIHsKKwkJaWYgKHRyYW5zLT50cmFuc2FjdGlvbi0+aW5fY29tbWl0IHx8CisJCSAgICB0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmcy5mbHVzaGluZykgewogCQkJcmV0ID0gLUVBR0FJTjsKIAkJCWJyZWFrOwogCQl9CiAJCWF0b21pY19pbmMoJnJvb3QtPmZzX2luZm8tPnRocm90dGxlX2dlbik7CiAJCXdha2VfdXAoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3Rocm90dGxlKTsKKwkJZm9yICh1cGRhdGVfY291bnQgPSAwOyB1cGRhdGVfY291bnQgPCAxNjsgdXBkYXRlX2NvdW50KyspIHsKKwkJCXVwZGF0ZSA9IHRyYW5zLT5kZWxheWVkX3JlZl91cGRhdGVzOworCQkJdHJhbnMtPmRlbGF5ZWRfcmVmX3VwZGF0ZXMgPSAwOworCQkJaWYgKHVwZGF0ZSkKKwkJCQlidHJmc19ydW5fZGVsYXllZF9yZWZzKHRyYW5zLCByb290LCB1cGRhdGUpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CiAJfQogCWZvciAoaSA9IDA7IGkgPD0gb3JpZ19sZXZlbDsgaSsrKSB7CiAJCWlmIChwYXRoLT5ub2Rlc1tpXSkgewpAQCAtNTQ1Nyw2ICs0ODc4LDcgQEAKIAkJCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCiAJCQkJCXRyYW5zLT50cmFuc2lkLCBrZXkub2JqZWN0aWQpOwogCQlCVUdfT04ocmV0KTsKKwogCQlyZXQgPSBidHJmc19mcmVlX2V4dGVudCh0cmFucywgcm9vdCwKIAkJCQkJYnl0ZW5yLCBudW1fYnl0ZXMsIGxlYWYtPnN0YXJ0LAogCQkJCQlidHJmc19oZWFkZXJfb3duZXIobGVhZiksCkBAIC01NzY4LDkgKzUxOTAsNiBAQAogCQkJCXJlZl9wYXRoLCBOVUxMLCBOVUxMKTsKIAlCVUdfT04ocmV0KTsKIAotCWlmIChyb290ID09IHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290KQotCQlidHJmc19leHRlbnRfcG9zdF9vcCh0cmFucywgcm9vdCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjAzOCw2ICs1NDU3LDcgQEAKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtRU5PTUVNOwogCisJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCXJldCA9IGJ0cmZzX2luc2VydF9lbXB0eV9pbm9kZSh0cmFucywgcm9vdCwgcGF0aCwgb2JqZWN0aWQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpAQCAtNjIwOCw2ICs1NjI4LDkgQEAKIAlidHJmc19yZW1vdmVfbGVhZl9yZWZzKGluZm8tPnRyZWVfcm9vdCwgKHU2NCktMSwgMSk7CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5jbGVhbmVyX211dGV4KTsKIAorCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24oaW5mby0+dHJlZV9yb290LCAxKTsKKwlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIGluZm8tPnRyZWVfcm9vdCk7CisKIAl3aGlsZSAoMSkgewogCQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCByb290LCAma2V5LCBwYXRoLCAwLCAwKTsKIAkJaWYgKHJldCA8IDApCkBAIC02Mjk0LDcgKzU3MTcsNyBAQAogCVdBUk5fT04oYmxvY2tfZ3JvdXAtPnJlc2VydmVkID4gMCk7CiAJV0FSTl9PTihidHJmc19ibG9ja19ncm91cF91c2VkKCZibG9ja19ncm91cC0+aXRlbSkgPiAwKTsKIAlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPmxvY2spOwotCXB1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CisJYnRyZnNfcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKIAlyZXQgPSAwOwogb3V0OgogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKQEAgLTY0MjEsOSArNTg0NCwxMCBAQAogCiAJCWF0b21pY19zZXQoJmNhY2hlLT5jb3VudCwgMSk7CiAJCXNwaW5fbG9ja19pbml0KCZjYWNoZS0+bG9jayk7Ci0JCW11dGV4X2luaXQoJmNhY2hlLT5hbGxvY19tdXRleCk7CisJCXNwaW5fbG9ja19pbml0KCZjYWNoZS0+dHJlZV9sb2NrKTsKIAkJbXV0ZXhfaW5pdCgmY2FjaGUtPmNhY2hlX211dGV4KTsKIAkJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5saXN0KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5jbHVzdGVyX2xpc3QpOwogCQlyZWFkX2V4dGVudF9idWZmZXIobGVhZiwgJmNhY2hlLT5pdGVtLAogCQkJCSAgIGJ0cmZzX2l0ZW1fcHRyX29mZnNldChsZWFmLCBwYXRoLT5zbG90c1swXSksCiAJCQkJICAgc2l6ZW9mKGNhY2hlLT5pdGVtKSk7CkBAIC02NDY2LDcgKzU4OTAsNyBAQAogCiAJZXh0ZW50X3Jvb3QgPSByb290LT5mc19pbmZvLT5leHRlbnRfcm9vdDsKIAotCXJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfbmV3X2Jsb2NrZ3JvdXAgPSB0cmFucy0+dHJhbnNpZDsKKwlyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA9IHRyYW5zLT50cmFuc2lkOwogCiAJY2FjaGUgPSBremFsbG9jKHNpemVvZigqY2FjaGUpLCBHRlBfTk9GUyk7CiAJaWYgKCFjYWNoZSkKQEAgLTY0NzcsOSArNTkwMSwxMCBAQAogCWNhY2hlLT5rZXkudHlwZSA9IEJUUkZTX0JMT0NLX0dST1VQX0lURU1fS0VZOwogCWF0b21pY19zZXQoJmNhY2hlLT5jb3VudCwgMSk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT5sb2NrKTsKLQltdXRleF9pbml0KCZjYWNoZS0+YWxsb2NfbXV0ZXgpOworCXNwaW5fbG9ja19pbml0KCZjYWNoZS0+dHJlZV9sb2NrKTsKIAltdXRleF9pbml0KCZjYWNoZS0+Y2FjaGVfbXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+bGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5jbHVzdGVyX2xpc3QpOwogCiAJYnRyZnNfc2V0X2Jsb2NrX2dyb3VwX3VzZWQoJmNhY2hlLT5pdGVtLCBieXRlc191c2VkKTsKIAlidHJmc19zZXRfYmxvY2tfZ3JvdXBfY2h1bmtfb2JqZWN0aWQoJmNhY2hlLT5pdGVtLCBjaHVua19vYmplY3RpZCk7CkBAIC02NTAwLDkgKzU5MjUsNiBAQAogCQkJCXNpemVvZihjYWNoZS0+aXRlbSkpOwogCUJVR19PTihyZXQpOwogCi0JZmluaXNoX2N1cnJlbnRfaW5zZXJ0KHRyYW5zLCBleHRlbnRfcm9vdCwgMCk7Ci0JcmV0ID0gZGVsX3BlbmRpbmdfZXh0ZW50cyh0cmFucywgZXh0ZW50X3Jvb3QsIDApOwotCUJVR19PTihyZXQpOwogCXNldF9hdmFpbF9hbGxvY19iaXRzKGV4dGVudF9yb290LT5mc19pbmZvLCB0eXBlKTsKIAogCXJldHVybiAwOwpAQCAtNjU0Miw4ICs1OTY0LDggQEAKIAlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnNwYWNlX2luZm8tPmxvY2spOwogCWJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvLT5mdWxsID0gMDsKIAotCXB1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7Ci0JcHV0X2Jsb2NrX2dyb3VwKGJsb2NrX2dyb3VwKTsKKwlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOworCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CiAKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdCwgJmtleSwgcGF0aCwgLTEsIDEpOwogCWlmIChyZXQgPiAwKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMgYi9mcy9idHJmcy9leHRlbnRfaW8uYwppbmRleCBlYmU2YjI5Li5lYjJiZWU4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uYworKysgYi9mcy9idHJmcy9leHRlbnRfaW8uYwpAQCAtMjg4NCwyNSArMjg4NCwxOSBAQAogCQlkaXNrbyA9IDA7CiAJCWZsYWdzID0gMDsKIAotCQlzd2l0Y2ggKGVtLT5ibG9ja19zdGFydCkgewotCQljYXNlIEVYVEVOVF9NQVBfTEFTVF9CWVRFOgorCQlpZiAoZW0tPmJsb2NrX3N0YXJ0ID09IEVYVEVOVF9NQVBfTEFTVF9CWVRFKSB7CiAJCQllbmQgPSAxOwogCQkJZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9MQVNUOwotCQkJYnJlYWs7Ci0JCWNhc2UgRVhURU5UX01BUF9IT0xFOgorCQl9IGVsc2UgaWYgKGVtLT5ibG9ja19zdGFydCA9PSBFWFRFTlRfTUFQX0hPTEUpIHsKIAkJCWZsYWdzIHw9IEZJRU1BUF9FWFRFTlRfVU5XUklUVEVOOwotCQkJYnJlYWs7Ci0JCWNhc2UgRVhURU5UX01BUF9JTkxJTkU6CisJCX0gZWxzZSBpZiAoZW0tPmJsb2NrX3N0YXJ0ID09IEVYVEVOVF9NQVBfSU5MSU5FKSB7CiAJCQlmbGFncyB8PSAoRklFTUFQX0VYVEVOVF9EQVRBX0lOTElORSB8CiAJCQkJICBGSUVNQVBfRVhURU5UX05PVF9BTElHTkVEKTsKLQkJCWJyZWFrOwotCQljYXNlIEVYVEVOVF9NQVBfREVMQUxMT0M6CisJCX0gZWxzZSBpZiAoZW0tPmJsb2NrX3N0YXJ0ID09IEVYVEVOVF9NQVBfREVMQUxMT0MpIHsKIAkJCWZsYWdzIHw9IChGSUVNQVBfRVhURU5UX0RFTEFMTE9DIHwKIAkJCQkgIEZJRU1BUF9FWFRFTlRfVU5LTk9XTik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKKwkJfSBlbHNlIHsKIAkJCWRpc2tvID0gZW0tPmJsb2NrX3N0YXJ0OwotCQkJYnJlYWs7CiAJCX0KIAkJaWYgKHRlc3RfYml0KEVYVEVOVF9GTEFHX0NPTVBSRVNTRUQsICZlbS0+ZmxhZ3MpKQogCQkJZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9FTkNPREVEOwpAQCAtMzEyNCwyMCArMzExOCwxNSBAQAogaW50IGNsZWFyX2V4dGVudF9idWZmZXJfZGlydHkoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkJICAgICAgc3RydWN0IGV4dGVudF9idWZmZXIgKmViKQogewotCWludCBzZXQ7CiAJdW5zaWduZWQgbG9uZyBpOwogCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JdTY0IHN0YXJ0ID0gZWItPnN0YXJ0OwotCXU2NCBlbmQgPSBzdGFydCArIGViLT5sZW4gLSAxOwotCi0Jc2V0ID0gY2xlYXJfZXh0ZW50X2RpcnR5KHRyZWUsIHN0YXJ0LCBlbmQsIEdGUF9OT0ZTKTsKIAludW1fcGFnZXMgPSBudW1fZXh0ZW50X3BhZ2VzKGViLT5zdGFydCwgZWItPmxlbik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKIAkJcGFnZSA9IGV4dGVudF9idWZmZXJfcGFnZShlYiwgaSk7Ci0JCWlmICghc2V0ICYmICFQYWdlRGlydHkocGFnZSkpCisJCWlmICghUGFnZURpcnR5KHBhZ2UpKQogCQkJY29udGludWU7CiAKIAkJbG9ja19wYWdlKHBhZ2UpOwpAQCAtMzE0NiwyMiArMzEzNSw2IEBACiAJCWVsc2UKIAkJCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgRVhURU5UX1BBR0VfUFJJVkFURSk7CiAKLQkJLyoKLQkJICogaWYgd2UncmUgb24gdGhlIGxhc3QgcGFnZSBvciB0aGUgZmlyc3QgcGFnZSBhbmQgdGhlCi0JCSAqIGJsb2NrIGlzbid0IGFsaWduZWQgb24gYSBwYWdlIGJvdW5kYXJ5LCBkbyBleHRyYSBjaGVja3MKLQkJICogdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNsZWFuIHBhZ2UgdGhhdCBpcyBwYXJ0aWFsbHkgZGlydHkKLQkJICovCi0JCWlmICgoaSA9PSAwICYmIChlYi0+c3RhcnQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSkpKSB8fAotCQkgICAgKChpID09IG51bV9wYWdlcyAtIDEpICYmCi0JCSAgICAgKChlYi0+c3RhcnQgKyBlYi0+bGVuKSAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKSkpKSB7Ci0JCQlzdGFydCA9ICh1NjQpcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVDsKLQkJCWVuZCAgPSBzdGFydCArIFBBR0VfQ0FDSEVfU0laRSAtIDE7Ci0JCQlpZiAodGVzdF9yYW5nZV9iaXQodHJlZSwgc3RhcnQsIGVuZCwKLQkJCQkJICAgRVhURU5UX0RJUlRZLCAwKSkgewotCQkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9CiAJCWNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpOwogCQlzcGluX2xvY2tfaXJxKCZwYWdlLT5tYXBwaW5nLT50cmVlX2xvY2spOwogCQlpZiAoIVBhZ2VEaXJ0eShwYWdlKSkgewpAQCAtMzE4NywyOSArMzE2MCwxMyBAQAogewogCXVuc2lnbmVkIGxvbmcgaTsKIAl1bnNpZ25lZCBsb25nIG51bV9wYWdlczsKKwlpbnQgd2FzX2RpcnR5ID0gMDsKIAorCXdhc19kaXJ0eSA9IHRlc3RfYW5kX3NldF9iaXQoRVhURU5UX0JVRkZFUl9ESVJUWSwgJmViLT5iZmxhZ3MpOwogCW51bV9wYWdlcyA9IG51bV9leHRlbnRfcGFnZXMoZWItPnN0YXJ0LCBlYi0+bGVuKTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBleHRlbnRfYnVmZmVyX3BhZ2UoZWIsIGkpOwotCQkvKiB3cml0ZXBhZ2UgbWF5IG5lZWQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwgZm9yIHRoZQotCQkgKiBmaXJzdCBwYWdlLCB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSBwYWdlLT5wcml2YXRlIGlzCi0JCSAqIHByb3Blcmx5IHNldC4gIHJlbGVhc2VwYWdlIG1heSBkcm9wIHBhZ2UtPnByaXZhdGUKLQkJICogb24gdXMgaWYgdGhlIHBhZ2UgaXNuJ3QgYWxyZWFkeSBkaXJ0eS4KLQkJICovCi0JCWxvY2tfcGFnZShwYWdlKTsKLQkJaWYgKGkgPT0gMCkgewotCQkJc2V0X3BhZ2VfZXh0ZW50X2hlYWQocGFnZSwgZWItPmxlbik7Ci0JCX0gZWxzZSBpZiAoUGFnZVByaXZhdGUocGFnZSkgJiYKLQkJCSAgIHBhZ2UtPnByaXZhdGUgIT0gRVhURU5UX1BBR0VfUFJJVkFURSkgewotCQkJc2V0X3BhZ2VfZXh0ZW50X21hcHBlZChwYWdlKTsKLQkJfQorCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKIAkJX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMoZXh0ZW50X2J1ZmZlcl9wYWdlKGViLCBpKSk7Ci0JCXNldF9leHRlbnRfZGlydHkodHJlZSwgcGFnZV9vZmZzZXQocGFnZSksCi0JCQkJIHBhZ2Vfb2Zmc2V0KHBhZ2UpICsgUEFHRV9DQUNIRV9TSVpFIC0gMSwKLQkJCQkgR0ZQX05PRlMpOwotCQl1bmxvY2tfcGFnZShwYWdlKTsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHdhc19kaXJ0eTsKIH0KIAogaW50IGNsZWFyX2V4dGVudF9idWZmZXJfdXB0b2RhdGUoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLApAQCAtMzc4OSw2ICszNzQ2LDEwIEBACiAJCXJldCA9IDA7CiAJCWdvdG8gb3V0OwogCX0KKwlpZiAodGVzdF9iaXQoRVhURU5UX0JVRkZFUl9ESVJUWSwgJmViLT5iZmxhZ3MpKSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KIAkvKiBhdCB0aGlzIHBvaW50IHdlIGNhbiBzYWZlbHkgcmVsZWFzZSB0aGUgZXh0ZW50IGJ1ZmZlciAqLwogCW51bV9wYWdlcyA9IG51bV9leHRlbnRfcGFnZXMoZWItPnN0YXJ0LCBlYi0+bGVuKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uaCBiL2ZzL2J0cmZzL2V4dGVudF9pby5oCmluZGV4IDFmOWRmODguLjViYzIwYWIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5oCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5oCkBAIC0yNSw2ICsyNSw3IEBACiAvKiB0aGVzZSBhcmUgYml0IG51bWJlcnMgZm9yIHRlc3Qvc2V0IGJpdCAqLwogI2RlZmluZSBFWFRFTlRfQlVGRkVSX1VQVE9EQVRFIDAKICNkZWZpbmUgRVhURU5UX0JVRkZFUl9CTE9DS0lORyAxCisjZGVmaW5lIEVYVEVOVF9CVUZGRVJfRElSVFkgMgogCiAvKgogICogcGFnZS0+cHJpdmF0ZSB2YWx1ZXMuICBFdmVyeSBwYWdlIHRoYXQgaXMgY29udHJvbGxlZCBieSB0aGUgZXh0ZW50CkBAIC0yNTQsNiArMjU1LDggQEAKIAkJCSAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICplYik7CiBpbnQgc2V0X2V4dGVudF9idWZmZXJfZGlydHkoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkJICAgICBzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqZWIpOworaW50IHRlc3RfZXh0ZW50X2J1ZmZlcl9kaXJ0eShzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCisJCQkgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICplYik7CiBpbnQgc2V0X2V4dGVudF9idWZmZXJfdXB0b2RhdGUoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLAogCQkJICAgICAgIHN0cnVjdCBleHRlbnRfYnVmZmVyICplYik7CiBpbnQgY2xlYXJfZXh0ZW50X2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfbWFwLmMgYi9mcy9idHJmcy9leHRlbnRfbWFwLmMKaW5kZXggNTBkYTY5ZC4uYjE4NzkxNyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X21hcC5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwpAQCAtMjM0LDcgKzIzNCw2IEBACiAJcmIgPSB0cmVlX2luc2VydCgmdHJlZS0+bWFwLCBlbS0+c3RhcnQsICZlbS0+cmJfbm9kZSk7CiAJaWYgKHJiKSB7CiAJCXJldCA9IC1FRVhJU1Q7Ci0JCWZyZWVfZXh0ZW50X21hcChtZXJnZSk7CiAJCWdvdG8gb3V0OwogCX0KIAlhdG9taWNfaW5jKCZlbS0+cmVmcyk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9maWxlLWl0ZW0uYyBiL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jCmluZGV4IDk2NDY1MjQuLjliOTk4ODYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jCisrKyBiL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jCkBAIC01Miw2ICs1Miw3IEBACiAJZmlsZV9rZXkub2Zmc2V0ID0gcG9zOwogCWJ0cmZzX3NldF9rZXlfdHlwZSgmZmlsZV9rZXksIEJUUkZTX0VYVEVOVF9EQVRBX0tFWSk7CiAKKwlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJcmV0ID0gYnRyZnNfaW5zZXJ0X2VtcHR5X2l0ZW0odHJhbnMsIHJvb3QsIHBhdGgsICZmaWxlX2tleSwKIAkJCQkgICAgICBzaXplb2YoKml0ZW0pKTsKIAlpZiAocmV0IDwgMCkKQEAgLTUyMyw2ICs1MjQsNyBAQAogCQlrZXkub2Zmc2V0ID0gZW5kX2J5dGUgLSAxOwogCQlrZXkudHlwZSA9IEJUUkZTX0VYVEVOVF9DU1VNX0tFWTsKIAorCQlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LCAma2V5LCBwYXRoLCAtMSwgMSk7CiAJCWlmIChyZXQgPiAwKSB7CiAJCQlpZiAocGF0aC0+c2xvdHNbMF0gPT0gMCkKQEAgLTc1Nyw4ICs3NTksMTAgQEAKIAl9IGVsc2UgewogCQlpbnNfc2l6ZSA9IGNzdW1fc2l6ZTsKIAl9CisJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCXJldCA9IGJ0cmZzX2luc2VydF9lbXB0eV9pdGVtKHRyYW5zLCByb290LCBwYXRoLCAmZmlsZV9rZXksCiAJCQkJICAgICAgaW5zX3NpemUpOworCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMDsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBmYWlsX3VubG9jazsKIAlpZiAocmV0ICE9IDApIHsKQEAgLTc3Niw3ICs3ODAsNiBAQAogCWl0ZW1fZW5kID0gKHN0cnVjdCBidHJmc19jc3VtX2l0ZW0gKikoKHVuc2lnbmVkIGNoYXIgKilpdGVtX2VuZCArCiAJCQkJICAgICAgYnRyZnNfaXRlbV9zaXplX25yKGxlYWYsIHBhdGgtPnNsb3RzWzBdKSk7CiAJZWJfdG9rZW4gPSBOVUxMOwotCWNvbmRfcmVzY2hlZCgpOwogbmV4dF9zZWN0b3I6CiAKIAlpZiAoIWViX3Rva2VuIHx8CkBAIC04MTcsOSArODIwLDkgQEAKIAkJZWJfdG9rZW4gPSBOVUxMOwogCX0KIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXRoLT5ub2Rlc1swXSk7Ci0JY29uZF9yZXNjaGVkKCk7CiAJaWYgKHRvdGFsX2J5dGVzIDwgc3Vtcy0+bGVuKSB7CiAJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKKwkJY29uZF9yZXNjaGVkKCk7CiAJCWdvdG8gYWdhaW47CiAJfQogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IGRjNzg5NTQuLjljOWZiNDYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTYwNiw2ICs2MDYsNyBAQAogCQkJYnRyZnNfc2V0X2tleV90eXBlKCZpbnMsIEJUUkZTX0VYVEVOVF9EQVRBX0tFWSk7CiAKIAkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKKwkJCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAkJCXJldCA9IGJ0cmZzX2luc2VydF9lbXB0eV9pdGVtKHRyYW5zLCByb290LCBwYXRoLCAmaW5zLAogCQkJCQkJICAgICAgc2l6ZW9mKCpleHRlbnQpKTsKIAkJCUJVR19PTihyZXQpOwpAQCAtNjM5LDE3ICs2NDAsMjIgQEAKIAkJCQkJCQlyYW1fYnl0ZXMpOwogCQkJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X3R5cGUobGVhZiwgZXh0ZW50LCBmb3VuZF90eXBlKTsKIAorCQkJYnRyZnNfdW5sb2NrX3VwX3NhZmUocGF0aCwgMSk7CiAJCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShwYXRoLT5ub2Rlc1swXSk7CisJCQlidHJmc19zZXRfbG9ja19ibG9ja2luZyhwYXRoLT5ub2Rlc1swXSk7CiAKIAkJCWlmIChkaXNrX2J5dGVuciAhPSAwKSB7CiAJCQkJcmV0ID0gYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsCi0JCQkJCQlkaXNrX2J5dGVuciwgb3JpZ19wYXJlbnQsCisJCQkJCQlkaXNrX2J5dGVuciwKKwkJCQkJCWxlNjRfdG9fY3B1KG9sZC5kaXNrX251bV9ieXRlcyksCisJCQkJCQlvcmlnX3BhcmVudCwKIAkJCQkJCWxlYWYtPnN0YXJ0LAogCQkJCQkJcm9vdC0+cm9vdF9rZXkub2JqZWN0aWQsCiAJCQkJCQl0cmFucy0+dHJhbnNpZCwgaW5zLm9iamVjdGlkKTsKIAogCQkJCUJVR19PTihyZXQpOwogCQkJfQorCQkJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAwOwogCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCQkJaWYgKGRpc2tfYnl0ZW5yICE9IDApCiAJCQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBleHRlbnRfZW5kIC0gZW5kKTsKQEAgLTkxMiw3ICs5MTgsNyBAQAogCWJ0cmZzX3NldF9maWxlX2V4dGVudF9vdGhlcl9lbmNvZGluZyhsZWFmLCBmaSwgMCk7CiAKIAlpZiAob3JpZ19wYXJlbnQgIT0gbGVhZi0+c3RhcnQpIHsKLQkJcmV0ID0gYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwKKwkJcmV0ID0gYnRyZnNfdXBkYXRlX2V4dGVudF9yZWYodHJhbnMsIHJvb3QsIGJ5dGVuciwgbnVtX2J5dGVzLAogCQkJCQkgICAgICBvcmlnX3BhcmVudCwgbGVhZi0+c3RhcnQsCiAJCQkJCSAgICAgIHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkLAogCQkJCQkgICAgICB0cmFucy0+dHJhbnNpZCwgaW5vZGUtPmlfaW5vKTsKQEAgLTExNTUsNiArMTE2MSwyMCBAQAogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGlubmVkWzFdKTsKIAkqcHBvcyA9IHBvczsKIAorCS8qCisJICogd2Ugd2FudCB0byBtYWtlIHN1cmUgZnN5bmMgZmluZHMgdGhpcyBjaGFuZ2UKKwkgKiBidXQgd2UgaGF2ZW4ndCBqb2luZWQgYSB0cmFuc2FjdGlvbiBydW5uaW5nIHJpZ2h0IG5vdy4KKwkgKgorCSAqIExhdGVyIG9uLCBzb21lb25lIGlzIHN1cmUgdG8gdXBkYXRlIHRoZSBpbm9kZSBhbmQgZ2V0IHRoZQorCSAqIHJlYWwgdHJhbnNpZCByZWNvcmRlZC4KKwkgKgorCSAqIFdlIHNldCBsYXN0X3RyYW5zIG5vdyB0byB0aGUgZnNfaW5mbyBnZW5lcmF0aW9uICsgMSwKKwkgKiB0aGlzIHdpbGwgZWl0aGVyIGJlIG9uZSBtb3JlIHRoYW4gdGhlIHJ1bm5pbmcgdHJhbnNhY3Rpb24KKwkgKiBvciB0aGUgZ2VuZXJhdGlvbiB1c2VkIGZvciB0aGUgbmV4dCB0cmFuc2FjdGlvbiBpZiB0aGVyZSBpc24ndAorCSAqIG9uZSBydW5uaW5nIHJpZ2h0IG5vdy4KKwkgKi8KKwlCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyA9IHJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24gKyAxOworCiAJaWYgKG51bV93cml0dGVuID4gMCAmJiB3aWxsX3dyaXRlKSB7CiAJCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwogCkBAIC0xMTY3LDggKzExODcsMTEgQEAKIAkJCXJldCA9IGJ0cmZzX2xvZ19kZW50cnlfc2FmZSh0cmFucywgcm9vdCwKIAkJCQkJCSAgICBmaWxlLT5mX2RlbnRyeSk7CiAJCQlpZiAocmV0ID09IDApIHsKLQkJCQlidHJmc19zeW5jX2xvZyh0cmFucywgcm9vdCk7Ci0JCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJCQlyZXQgPSBidHJmc19zeW5jX2xvZyh0cmFucywgcm9vdCk7CisJCQkJaWYgKHJldCA9PSAwKQorCQkJCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQkJCWVsc2UKKwkJCQkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCX0gZWxzZSB7CiAJCQkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCX0KQEAgLTExODUsNiArMTIwOCwxOCBAQAogCiBpbnQgYnRyZnNfcmVsZWFzZV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogeworCS8qCisJICogb3JkZXJlZF9kYXRhX2Nsb3NlIGlzIHNldCBieSBzZXR0YXR0ciB3aGVuIHdlIGFyZSBhYm91dCB0byB0cnVuY2F0ZQorCSAqIGEgZmlsZSBmcm9tIGEgbm9uLXplcm8gc2l6ZSB0byBhIHplcm8gc2l6ZS4gIFRoaXMgdHJpZXMgdG8KKwkgKiBmbHVzaCBkb3duIG5ldyBieXRlcyB0aGF0IG1heSBoYXZlIGJlZW4gd3JpdHRlbiBpZiB0aGUKKwkgKiBhcHBsaWNhdGlvbiB3ZXJlIHVzaW5nIHRydW5jYXRlIHRvIHJlcGxhY2UgYSBmaWxlIGluIHBsYWNlLgorCSAqLworCWlmIChCVFJGU19JKGlub2RlKS0+b3JkZXJlZF9kYXRhX2Nsb3NlKSB7CisJCUJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX2RhdGFfY2xvc2UgPSAwOworCQlidHJmc19hZGRfb3JkZXJlZF9vcGVyYXRpb24oTlVMTCwgQlRSRlNfSShpbm9kZSktPnJvb3QsIGlub2RlKTsKKwkJaWYgKGlub2RlLT5pX3NpemUgPiBCVFJGU19PUkRFUkVEX09QRVJBVElPTlNfRkxVU0hfTElNSVQpCisJCQlmaWxlbWFwX2ZsdXNoKGlub2RlLT5pX21hcHBpbmcpOworCX0KIAlpZiAoZmlscC0+cHJpdmF0ZV9kYXRhKQogCQlidHJmc19pb2N0bF90cmFuc19lbmQoZmlscCk7CiAJcmV0dXJuIDA7CkBAIC0xMjYwLDggKzEyOTUsMTEgQEAKIAlpZiAocmV0ID4gMCkgewogCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0gZWxzZSB7Ci0JCWJ0cmZzX3N5bmNfbG9nKHRyYW5zLCByb290KTsKLQkJcmV0ID0gYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKKwkJcmV0ID0gYnRyZnNfc3luY19sb2codHJhbnMsIHJvb3QpOworCQlpZiAocmV0ID09IDApCisJCQlyZXQgPSBidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOworCQllbHNlCisJCQlyZXQgPSBidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0KIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCmluZGV4IGQxZTVmMGUuLjc2OGI5NTIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYworKysgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKQEAgLTE4LDYgKzE4LDE1IEBACiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgImN0cmVlLmgiCisjaW5jbHVkZSAiZnJlZS1zcGFjZS1jYWNoZS5oIgorI2luY2x1ZGUgInRyYW5zYWN0aW9uLmgiCisKK3N0cnVjdCBidHJmc19mcmVlX3NwYWNlIHsKKwlzdHJ1Y3QgcmJfbm9kZSBieXRlc19pbmRleDsKKwlzdHJ1Y3QgcmJfbm9kZSBvZmZzZXRfaW5kZXg7CisJdTY0IG9mZnNldDsKKwl1NjQgYnl0ZXM7Cit9OwogCiBzdGF0aWMgaW50IHRyZWVfaW5zZXJ0X29mZnNldChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgdTY0IG9mZnNldCwKIAkJCSAgICAgIHN0cnVjdCByYl9ub2RlICpub2RlKQpAQCAtNjgsMTQgKzc3LDI0IEBACiB9CiAKIC8qCi0gKiBzZWFyY2hlcyB0aGUgdHJlZSBmb3IgdGhlIGdpdmVuIG9mZnNldC4gIElmIGNvbnRhaW5zIGlzIHNldCB3ZSB3aWxsIHJldHVybgotICogdGhlIGZyZWUgc3BhY2UgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gb2Zmc2V0LiAgSWYgY29udGFpbnMgaXMgbm90IHNldCB3ZQotICogd2lsbCByZXR1cm4gdGhlIGZyZWUgc3BhY2UgdGhhdCBzdGFydHMgYXQgb3IgYWZ0ZXIgdGhlIGdpdmVuIG9mZnNldCBhbmQgaXMKLSAqIGF0IGxlYXN0IGJ5dGVzIGxvbmcuCisgKiBzZWFyY2hlcyB0aGUgdHJlZSBmb3IgdGhlIGdpdmVuIG9mZnNldC4KKyAqCisgKiBmdXp6eSA9PSAxOiB0aGlzIGlzIHVzZWQgZm9yIGFsbG9jYXRpb25zIHdoZXJlIHdlIGFyZSBnaXZlbiBhIGhpbnQgb2Ygd2hlcmUKKyAqIHRvIGxvb2sgZm9yIGZyZWUgc3BhY2UuICBCZWNhdXNlIHRoZSBoaW50IG1heSBub3QgYmUgY29tcGxldGVseSBvbiBhbiBvZmZzZXQKKyAqIG1hcmssIG9yIHRoZSBoaW50IG1heSBubyBsb25nZXIgcG9pbnQgdG8gZnJlZSBzcGFjZSB3ZSBuZWVkIHRvIGZ1ZGdlIG91cgorICogcmVzdWx0cyBhIGJpdC4gIFNvIHdlIGxvb2sgZm9yIGZyZWUgc3BhY2Ugc3RhcnRpbmcgYXQgb3IgYWZ0ZXIgb2Zmc2V0IHdpdGggYXQKKyAqIGxlYXN0IGJ5dGVzIHNpemUuICBXZSBwcmVmZXIgdG8gZmluZCBhcyBjbG9zZSB0byB0aGUgZ2l2ZW4gb2Zmc2V0IGFzIHdlIGNhbi4KKyAqIEFsc28gaWYgdGhlIG9mZnNldCBpcyB3aXRoaW4gYSBmcmVlIHNwYWNlIHJhbmdlLCB0aGVuIHdlIHdpbGwgcmV0dXJuIHRoZSBmcmVlCisgKiBzcGFjZSB0aGF0IGNvbnRhaW5zIHRoZSBnaXZlbiBvZmZzZXQsIHdoaWNoIG1lYW5zIHdlIGNhbiByZXR1cm4gYSBmcmVlIHNwYWNlCisgKiBjaHVuayB3aXRoIGFuIG9mZnNldCBiZWZvcmUgdGhlIHByb3ZpZGVkIG9mZnNldC4KKyAqCisgKiBmdXp6eSA9PSAwOiB0aGlzIGlzIGp1c3QgYSBub3JtYWwgdHJlZSBzZWFyY2guICBHaXZlIHVzIHRoZSBmcmVlIHNwYWNlIHRoYXQKKyAqIHN0YXJ0cyBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IHdoaWNoIGlzIGF0IGxlYXN0IGJ5dGVzIHNpemUsIGFuZCBpZiBpdHMgbm90IHRoZXJlCisgKiByZXR1cm4gTlVMTC4KICAqLwogc3RhdGljIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICp0cmVlX3NlYXJjaF9vZmZzZXQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsCiAJCQkJCQkgICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsCi0JCQkJCQkgICBpbnQgY29udGFpbnMpCisJCQkJCQkgICBpbnQgZnV6enkpCiB7CiAJc3RydWN0IHJiX25vZGUgKm4gPSByb290LT5yYl9ub2RlOwogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeSwgKnJldCA9IE5VTEw7CkBAIC04NCwxMyArMTAzLDE0IEBACiAJCWVudHJ5ID0gcmJfZW50cnkobiwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIG9mZnNldF9pbmRleCk7CiAKIAkJaWYgKG9mZnNldCA8IGVudHJ5LT5vZmZzZXQpIHsKLQkJCWlmICghY29udGFpbnMgJiYKKwkJCWlmIChmdXp6eSAmJgogCQkJICAgICghcmV0IHx8IGVudHJ5LT5vZmZzZXQgPCByZXQtPm9mZnNldCkgJiYKIAkJCSAgICAoYnl0ZXMgPD0gZW50cnktPmJ5dGVzKSkKIAkJCQlyZXQgPSBlbnRyeTsKIAkJCW4gPSBuLT5yYl9sZWZ0OwogCQl9IGVsc2UgaWYgKG9mZnNldCA+IGVudHJ5LT5vZmZzZXQpIHsKLQkJCWlmICgoZW50cnktPm9mZnNldCArIGVudHJ5LT5ieXRlcyAtIDEpID49IG9mZnNldCAmJgorCQkJaWYgKGZ1enp5ICYmCisJCQkgICAgKGVudHJ5LT5vZmZzZXQgKyBlbnRyeS0+Ynl0ZXMgLSAxKSA+PSBvZmZzZXQgJiYKIAkJCSAgICBieXRlcyA8PSBlbnRyeS0+Ynl0ZXMpIHsKIAkJCQlyZXQgPSBlbnRyeTsKIAkJCQlicmVhazsKQEAgLTE3MSw2ICsxOTEsNyBAQAogCWludCByZXQgPSAwOwogCiAKKwlCVUdfT04oIWluZm8tPmJ5dGVzKTsKIAlyZXQgPSB0cmVlX2luc2VydF9vZmZzZXQoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCwgaW5mby0+b2Zmc2V0LAogCQkJCSAmaW5mby0+b2Zmc2V0X2luZGV4KTsKIAlpZiAocmV0KQpAQCAtMTg0LDEwOCArMjA1LDcwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2J0cmZzX2FkZF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkJICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMpCitpbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMpCiB7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKnJpZ2h0X2luZm87CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmxlZnRfaW5mbzsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbyA9IE5VTEw7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmFsbG9jX2luZm87CiAJaW50IHJldCA9IDA7CiAKLQlhbGxvY19pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UpLCBHRlBfTk9GUyk7Ci0JaWYgKCFhbGxvY19pbmZvKQorCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSksIEdGUF9OT0ZTKTsKKwlpZiAoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCisJaW5mby0+b2Zmc2V0ID0gb2Zmc2V0OworCWluZm8tPmJ5dGVzID0gYnl0ZXM7CisKKwlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCiAJLyoKIAkgKiBmaXJzdCB3ZSB3YW50IHRvIHNlZSBpZiB0aGVyZSBpcyBmcmVlIHNwYWNlIGFkamFjZW50IHRvIHRoZSByYW5nZSB3ZQogCSAqIGFyZSBhZGRpbmcsIGlmIHRoZXJlIGlzIHJlbW92ZSB0aGF0IHN0cnVjdCBhbmQgYWRkIGEgbmV3IG9uZSB0bwogCSAqIGNvdmVyIHRoZSBlbnRpcmUgcmFuZ2UKIAkgKi8KIAlyaWdodF9pbmZvID0gdHJlZV9zZWFyY2hfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsCi0JCQkJCW9mZnNldCtieXRlcywgMCwgMSk7CisJCQkJCW9mZnNldCtieXRlcywgMCwgMCk7CiAJbGVmdF9pbmZvID0gdHJlZV9zZWFyY2hfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsCiAJCQkJICAgICAgIG9mZnNldC0xLCAwLCAxKTsKIAotCWlmIChyaWdodF9pbmZvICYmIHJpZ2h0X2luZm8tPm9mZnNldCA9PSBvZmZzZXQrYnl0ZXMpIHsKKwlpZiAocmlnaHRfaW5mbykgewogCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgcmlnaHRfaW5mbyk7Ci0JCWluZm8gPSByaWdodF9pbmZvOwotCQlpbmZvLT5vZmZzZXQgPSBvZmZzZXQ7Ci0JCWluZm8tPmJ5dGVzICs9IGJ5dGVzOwotCX0gZWxzZSBpZiAocmlnaHRfaW5mbyAmJiByaWdodF9pbmZvLT5vZmZzZXQgIT0gb2Zmc2V0K2J5dGVzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgYWRkaW5nIHNwYWNlIGluIHRoZSBtaWRkbGUgb2YgYW4gIgotCQkgICAgICAgImV4aXN0aW5nIGZyZWUgc3BhY2UgYXJlYS4gZXhpc3Rpbmc6ICIKLQkJICAgICAgICJvZmZzZXQ9JWxsdSwgYnl0ZXM9JWxsdS4gbmV3OiBvZmZzZXQ9JWxsdSwgIgotCQkgICAgICAgImJ5dGVzPSVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpcmlnaHRfaW5mby0+b2Zmc2V0LAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyaWdodF9pbmZvLT5ieXRlcywKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0LAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylieXRlcyk7Ci0JCUJVRygpOworCQlpbmZvLT5ieXRlcyArPSByaWdodF9pbmZvLT5ieXRlczsKKwkJa2ZyZWUocmlnaHRfaW5mbyk7CiAJfQogCi0JaWYgKGxlZnRfaW5mbykgeworCWlmIChsZWZ0X2luZm8gJiYgbGVmdF9pbmZvLT5vZmZzZXQgKyBsZWZ0X2luZm8tPmJ5dGVzID09IG9mZnNldCkgewogCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgbGVmdF9pbmZvKTsKLQotCQlpZiAodW5saWtlbHkoKGxlZnRfaW5mby0+b2Zmc2V0ICsgbGVmdF9pbmZvLT5ieXRlcykgIT0KLQkJCSAgICAgb2Zmc2V0KSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJidHJmcyBmcmVlIHNwYWNlIHRvIHRoZSBsZWZ0ICIKLQkJCSAgICAgICAib2YgbmV3IGZyZWUgc3BhY2UgaXNuJ3QgIgotCQkJICAgICAgICJxdWl0ZSByaWdodC4gZXhpc3Rpbmc6IG9mZnNldD0lbGx1LCAiCi0JCQkgICAgICAgImJ5dGVzPSVsbHUuIG5ldzogb2Zmc2V0PSVsbHUsIGJ5dGVzPSVsbHVcbiIsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZWZ0X2luZm8tPm9mZnNldCwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlZnRfaW5mby0+Ynl0ZXMsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvZmZzZXQsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylieXRlcyk7Ci0JCQlCVUcoKTsKLQkJfQotCi0JCWlmIChpbmZvKSB7Ci0JCQlpbmZvLT5vZmZzZXQgPSBsZWZ0X2luZm8tPm9mZnNldDsKLQkJCWluZm8tPmJ5dGVzICs9IGxlZnRfaW5mby0+Ynl0ZXM7Ci0JCQlrZnJlZShsZWZ0X2luZm8pOwotCQl9IGVsc2UgewotCQkJaW5mbyA9IGxlZnRfaW5mbzsKLQkJCWluZm8tPmJ5dGVzICs9IGJ5dGVzOwotCQl9CisJCWluZm8tPm9mZnNldCA9IGxlZnRfaW5mby0+b2Zmc2V0OworCQlpbmZvLT5ieXRlcyArPSBsZWZ0X2luZm8tPmJ5dGVzOworCQlrZnJlZShsZWZ0X2luZm8pOwogCX0KIAotCWlmIChpbmZvKSB7Ci0JCXJldCA9IGxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbyk7Ci0JCWlmICghcmV0KQotCQkJaW5mbyA9IE5VTEw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWluZm8gPSBhbGxvY19pbmZvOwotCWFsbG9jX2luZm8gPSBOVUxMOwotCWluZm8tPm9mZnNldCA9IG9mZnNldDsKLQlpbmZvLT5ieXRlcyA9IGJ5dGVzOwotCiAJcmV0ID0gbGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbmZvKTsKIAlpZiAocmV0KQogCQlrZnJlZShpbmZvKTsKLW91dDoKKworCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJidHJmczogdW5hYmxlIHRvIGFkZCBmcmVlIHNwYWNlIDolZFxuIiwgcmV0KTsKLQkJaWYgKHJldCA9PSAtRUVYSVNUKQotCQkJQlVHKCk7CisJCUJVR19PTihyZXQgPT0gLUVFWElTVCk7CiAJfQogCi0Ja2ZyZWUoYWxsb2NfaW5mbyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1fX2J0cmZzX3JlbW92ZV9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkgIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKK2ludCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKIHsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbzsKIAlpbnQgcmV0ID0gMDsKIAorCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisKIAlpbmZvID0gdHJlZV9zZWFyY2hfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsIG9mZnNldCwgMCwKIAkJCQkgIDEpOwotCiAJaWYgKGluZm8gJiYgaW5mby0+b2Zmc2V0ID09IG9mZnNldCkgewogCQlpZiAoaW5mby0+Ynl0ZXMgPCBieXRlcykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJGb3VuZCBmcmVlIHNwYWNlIGF0ICVsbHUsIHNpemUgJWxsdSwiCkBAIC0yOTUsMTIgKzI3OCwxNCBAQAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYnl0ZXMpOwogCQkJV0FSTl9PTigxKTsKIAkJCXJldCA9IC1FSU5WQUw7CisJCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CiAJCQlnb3RvIG91dDsKIAkJfQogCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbyk7CiAKIAkJaWYgKGluZm8tPmJ5dGVzID09IGJ5dGVzKSB7CiAJCQlrZnJlZShpbmZvKTsKKwkJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTMwOCw2ICsyOTMsNyBAQAogCQlpbmZvLT5ieXRlcyAtPSBieXRlczsKIAogCQlyZXQgPSBsaW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGluZm8pOworCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CiAJCUJVR19PTihyZXQpOwogCX0gZWxzZSBpZiAoaW5mbyAmJiBpbmZvLT5vZmZzZXQgPCBvZmZzZXQgJiYKIAkJICAgaW5mby0+b2Zmc2V0ICsgaW5mby0+Ynl0ZXMgPj0gb2Zmc2V0ICsgYnl0ZXMpIHsKQEAgLTMzMyw3MCArMzE5LDMzIEBACiAJCQkgKi8KIAkJCWtmcmVlKGluZm8pOwogCQl9Ci0KKwkJc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOwogCQkvKiBzdGVwIHR3bywgaW5zZXJ0IGEgbmV3IGluZm8gc3RydWN0IHRvIGNvdmVyIGFueXRoaW5nCiAJCSAqIGJlZm9yZSB0aGUgaG9sZQogCQkgKi8KLQkJcmV0ID0gX19idHJmc19hZGRfZnJlZV9zcGFjZShibG9ja19ncm91cCwgb2xkX3N0YXJ0LAotCQkJCQkgICAgIG9mZnNldCAtIG9sZF9zdGFydCk7CisJCXJldCA9IGJ0cmZzX2FkZF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvbGRfc3RhcnQsCisJCQkJCSAgIG9mZnNldCAtIG9sZF9zdGFydCk7CiAJCUJVR19PTihyZXQpOwogCX0gZWxzZSB7CisJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKwkJaWYgKCFpbmZvKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImNvdWxkbid0IGZpbmQgc3BhY2UgJWxsdSB0byBmcmVlXG4iLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0KTsKKwkJCXByaW50ayhLRVJOX0VSUiAiY2FjaGVkIGlzICVkLCBvZmZzZXQgJWxsdSBieXRlcyAlbGx1XG4iLAorCQkJICAgICAgIGJsb2NrX2dyb3VwLT5jYWNoZWQsIGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQsCisJCQkgICAgICAgYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQpOworCQkJYnRyZnNfZHVtcF9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBieXRlcyk7CisJCX0gZWxzZSBpZiAoaW5mbykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJobW0sIGZvdW5kIG9mZnNldD0lbGx1IGJ5dGVzPSVsbHUsICIKKwkJCSAgICAgICAiYnV0IHdhbnRlZCBvZmZzZXQ9JWxsdSBieXRlcz0lbGx1XG4iLAorCQkJICAgICAgIGluZm8tPm9mZnNldCwgaW5mby0+Ynl0ZXMsIG9mZnNldCwgYnl0ZXMpOworCQl9CiAJCVdBUk5fT04oMSk7CiAJfQogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKLWludCBidHJmc19hZGRfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpzcDsKLQotCW11dGV4X2xvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7Ci0JcmV0ID0gX19idHJmc19hZGRfZnJlZV9zcGFjZShibG9ja19ncm91cCwgb2Zmc2V0LCBieXRlcyk7Ci0Jc3AgPSB0cmVlX3NlYXJjaF9vZmZzZXQoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCwgb2Zmc2V0LCAwLCAxKTsKLQlCVUdfT04oIXNwKTsKLQltdXRleF91bmxvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgYnRyZnNfYWRkX2ZyZWVfc3BhY2VfbG9jayhzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJICAgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQotewotCWludCByZXQ7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKnNwOwotCi0JcmV0ID0gX19idHJmc19hZGRfZnJlZV9zcGFjZShibG9ja19ncm91cCwgb2Zmc2V0LCBieXRlcyk7Ci0Jc3AgPSB0cmVlX3NlYXJjaF9vZmZzZXQoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX29mZnNldCwgb2Zmc2V0LCAwLCAxKTsKLQlCVUdfT04oIXNwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJICAgIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKLXsKLQlpbnQgcmV0ID0gMDsKLQotCW11dGV4X2xvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7Ci0JcmV0ID0gX19idHJmc19yZW1vdmVfZnJlZV9zcGFjZShibG9ja19ncm91cCwgb2Zmc2V0LCBieXRlcyk7Ci0JbXV0ZXhfdW5sb2NrKCZibG9ja19ncm91cC0+YWxsb2NfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IGJ0cmZzX3JlbW92ZV9mcmVlX3NwYWNlX2xvY2soc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKLQkJCQkgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBfX2J0cmZzX3JlbW92ZV9mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBvZmZzZXQsIGJ5dGVzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHZvaWQgYnRyZnNfZHVtcF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCiAJCQkgICB1NjQgYnl0ZXMpCiB7CkBAIC00MDgsNiArMzU3LDggQEAKIAkJaW5mbyA9IHJiX2VudHJ5KG4sIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOwogCQlpZiAoaW5mby0+Ynl0ZXMgPj0gYnl0ZXMpCiAJCQljb3VudCsrOworCQlwcmludGsoS0VSTl9FUlIgImVudHJ5IG9mZnNldCAlbGx1LCBieXRlcyAlbGx1XG4iLCBpbmZvLT5vZmZzZXQsCisJCSAgICAgICBpbmZvLT5ieXRlcyk7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVkIGJsb2NrcyBvZiBmcmVlIHNwYWNlIGF0IG9yIGJpZ2dlciB0aGFuIGJ5dGVzIGlzIgogCSAgICAgICAiXG4iLCBjb3VudCk7CkBAIC00MjgsNjggKzM3OSwzMzcgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogZm9yIGEgZ2l2ZW4gY2x1c3RlciwgcHV0IGFsbCBvZiBpdHMgZXh0ZW50cyBiYWNrIGludG8gdGhlIGZyZWUKKyAqIHNwYWNlIGNhY2hlLiAgSWYgdGhlIGJsb2NrIGdyb3VwIHBhc3NlZCBkb2Vzbid0IG1hdGNoIHRoZSBibG9jayBncm91cAorICogcG9pbnRlZCB0byBieSB0aGUgY2x1c3Rlciwgc29tZW9uZSBlbHNlIHJhY2VkIGluIGFuZCBmcmVlZCB0aGUKKyAqIGNsdXN0ZXIgYWxyZWFkeS4gIEluIHRoYXQgY2FzZSwgd2UganVzdCByZXR1cm4gd2l0aG91dCBjaGFuZ2luZyBhbnl0aGluZworICovCitzdGF0aWMgaW50CitfX2J0cmZzX3JldHVybl9jbHVzdGVyX3RvX2ZyZWVfc3BhY2UoCisJCQkgICAgIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgIHN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIpCit7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmVudHJ5OworCXN0cnVjdCByYl9ub2RlICpub2RlOworCisJc3Bpbl9sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwlpZiAoY2x1c3Rlci0+YmxvY2tfZ3JvdXAgIT0gYmxvY2tfZ3JvdXApCisJCWdvdG8gb3V0OworCisJY2x1c3Rlci0+d2luZG93X3N0YXJ0ID0gMDsKKwlub2RlID0gcmJfZmlyc3QoJmNsdXN0ZXItPnJvb3QpOworCXdoaWxlKG5vZGUpIHsKKwkJZW50cnkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgb2Zmc2V0X2luZGV4KTsKKwkJbm9kZSA9IHJiX25leHQoJmVudHJ5LT5vZmZzZXRfaW5kZXgpOworCQlyYl9lcmFzZSgmZW50cnktPm9mZnNldF9pbmRleCwgJmNsdXN0ZXItPnJvb3QpOworCQlsaW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKKwl9CisJbGlzdF9kZWxfaW5pdCgmY2x1c3Rlci0+YmxvY2tfZ3JvdXBfbGlzdCk7CisKKwlidHJmc19wdXRfYmxvY2tfZ3JvdXAoY2x1c3Rlci0+YmxvY2tfZ3JvdXApOworCWNsdXN0ZXItPmJsb2NrX2dyb3VwID0gTlVMTDsKKwljbHVzdGVyLT5yb290LnJiX25vZGUgPSBOVUxMOworb3V0OgorCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKwogdm9pZCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZV9jYWNoZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvOwogCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXI7CisJc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqc2FmZTsKIAotCW11dGV4X2xvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7CisJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbHVzdGVyLCBzYWZlLCAmYmxvY2tfZ3JvdXAtPmNsdXN0ZXJfbGlzdCwKKwkJCQkgYmxvY2tfZ3JvdXBfbGlzdCkgeworCisJCVdBUk5fT04oY2x1c3Rlci0+YmxvY2tfZ3JvdXAgIT0gYmxvY2tfZ3JvdXApOworCQlfX2J0cmZzX3JldHVybl9jbHVzdGVyX3RvX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGNsdXN0ZXIpOworCX0KKwogCXdoaWxlICgobm9kZSA9IHJiX2xhc3QoJmJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2J5dGVzKSkgIT0gTlVMTCkgewogCQlpbmZvID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIGJ5dGVzX2luZGV4KTsKIAkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGluZm8pOwogCQlrZnJlZShpbmZvKTsKIAkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7Ci0JCQltdXRleF91bmxvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7CisJCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CiAJCQljb25kX3Jlc2NoZWQoKTsKLQkJCW11dGV4X2xvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7CisJCQlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOwogCQl9CiAJfQotCW11dGV4X3VubG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKKwlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CiB9CiAKLSNpZiAwCi1zdGF0aWMgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmJ0cmZzX2ZpbmRfZnJlZV9zcGFjZV9vZmZzZXQoc3RydWN0Ci0JCQkJCQkgICAgICBidHJmc19ibG9ja19ncm91cF9jYWNoZQotCQkJCQkJICAgICAgKmJsb2NrX2dyb3VwLCB1NjQgb2Zmc2V0LAotCQkJCQkJICAgICAgdTY0IGJ5dGVzKQordTY0IGJ0cmZzX2ZpbmRfc3BhY2VfZm9yX2FsbG9jKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgICAgdTY0IG9mZnNldCwgdTY0IGJ5dGVzLCB1NjQgZW1wdHlfc2l6ZSkKIHsKLQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqcmV0OworCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeSA9IE5VTEw7CisJdTY0IHJldCA9IDA7CiAKLQltdXRleF9sb2NrKCZibG9ja19ncm91cC0+YWxsb2NfbXV0ZXgpOwotCXJldCA9IHRyZWVfc2VhcmNoX29mZnNldCgmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0LCBvZmZzZXQsCi0JCQkJIGJ5dGVzLCAwKTsKLQltdXRleF91bmxvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7CisJc3Bpbl9sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKwllbnRyeSA9IHRyZWVfc2VhcmNoX29mZnNldCgmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0LCBvZmZzZXQsCisJCQkJICAgYnl0ZXMgKyBlbXB0eV9zaXplLCAxKTsKKwlpZiAoIWVudHJ5KQorCQllbnRyeSA9IHRyZWVfc2VhcmNoX2J5dGVzKCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9ieXRlcywKKwkJCQkJICBvZmZzZXQsIGJ5dGVzICsgZW1wdHlfc2l6ZSk7CisJaWYgKGVudHJ5KSB7CisJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBlbnRyeSk7CisJCXJldCA9IGVudHJ5LT5vZmZzZXQ7CisJCWVudHJ5LT5vZmZzZXQgKz0gYnl0ZXM7CisJCWVudHJ5LT5ieXRlcyAtPSBieXRlczsKKworCQlpZiAoIWVudHJ5LT5ieXRlcykKKwkJCWtmcmVlKGVudHJ5KTsKKwkJZWxzZQorCQkJbGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBlbnRyeSk7CisJfQorCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqYnRyZnNfZmluZF9mcmVlX3NwYWNlX2J5dGVzKHN0cnVjdAotCQkJCQkJICAgICBidHJmc19ibG9ja19ncm91cF9jYWNoZQotCQkJCQkJICAgICAqYmxvY2tfZ3JvdXAsIHU2NCBvZmZzZXQsCi0JCQkJCQkgICAgIHU2NCBieXRlcykKKy8qCisgKiBnaXZlbiBhIGNsdXN0ZXIsIHB1dCBhbGwgb2YgaXRzIGV4dGVudHMgYmFjayBpbnRvIHRoZSBmcmVlIHNwYWNlCisgKiBjYWNoZS4gIElmIGEgYmxvY2sgZ3JvdXAgaXMgcGFzc2VkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSBmcmVlCisgKiBhIGNsdXN0ZXIgdGhhdCBiZWxvbmdzIHRvIHRoZSBwYXNzZWQgYmxvY2sgZ3JvdXAuCisgKgorICogT3RoZXJ3aXNlLCBpdCdsbCBnZXQgYSByZWZlcmVuY2Ugb24gdGhlIGJsb2NrIGdyb3VwIHBvaW50ZWQgdG8gYnkgdGhlCisgKiBjbHVzdGVyIGFuZCByZW1vdmUgdGhlIGNsdXN0ZXIgZnJvbSBpdC4KKyAqLworaW50IGJ0cmZzX3JldHVybl9jbHVzdGVyX3RvX2ZyZWVfc3BhY2UoCisJCQkgICAgICAgc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyKQogewotCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpyZXQ7CisJaW50IHJldDsKIAotCW11dGV4X2xvY2soJmJsb2NrX2dyb3VwLT5hbGxvY19tdXRleCk7CisJLyogZmlyc3QsIGdldCBhIHNhZmUgcG9pbnRlciB0byB0aGUgYmxvY2sgZ3JvdXAgKi8KKwlzcGluX2xvY2soJmNsdXN0ZXItPmxvY2spOworCWlmICghYmxvY2tfZ3JvdXApIHsKKwkJYmxvY2tfZ3JvdXAgPSBjbHVzdGVyLT5ibG9ja19ncm91cDsKKwkJaWYgKCFibG9ja19ncm91cCkgeworCQkJc3Bpbl91bmxvY2soJmNsdXN0ZXItPmxvY2spOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgaWYgKGNsdXN0ZXItPmJsb2NrX2dyb3VwICE9IGJsb2NrX2dyb3VwKSB7CisJCS8qIHNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBmcmVlZCBpdCBkb24ndCByZWRvIHRoZWlyIHdvcmsgKi8KKwkJc3Bpbl91bmxvY2soJmNsdXN0ZXItPmxvY2spOworCQlyZXR1cm4gMDsKKwl9CisJYXRvbWljX2luYygmYmxvY2tfZ3JvdXAtPmNvdW50KTsKKwlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CiAKLQlyZXQgPSB0cmVlX3NlYXJjaF9ieXRlcygmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfYnl0ZXMsIG9mZnNldCwgYnl0ZXMpOwotCW11dGV4X3VubG9jaygmYmxvY2tfZ3JvdXAtPmFsbG9jX211dGV4KTsKKwkvKiBub3cgcmV0dXJuIGFueSBleHRlbnRzIHRoZSBjbHVzdGVyIGhhZCBvbiBpdCAqLworCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisJcmV0ID0gX19idHJmc19yZXR1cm5fY2x1c3Rlcl90b19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBjbHVzdGVyKTsKKwlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisKKwkvKiBmaW5hbGx5IGRyb3Agb3VyIHJlZiAqLworCWJ0cmZzX3B1dF9ibG9ja19ncm91cChibG9ja19ncm91cCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGdpdmVuIGEgY2x1c3RlciwgdHJ5IHRvIGFsbG9jYXRlICdieXRlcycgZnJvbSBpdCwgcmV0dXJucyAwCisgKiBpZiBpdCBjb3VsZG4ndCBmaW5kIGFueXRoaW5nIHN1aXRhYmx5IGxhcmdlLCBvciBhIGxvZ2ljYWwgZGlzayBvZmZzZXQKKyAqIGlmIHRoaW5ncyB3b3JrZWQgb3V0CisgKi8KK3U2NCBidHJmc19hbGxvY19mcm9tX2NsdXN0ZXIoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciwgdTY0IGJ5dGVzLAorCQkJICAgICB1NjQgbWluX3N0YXJ0KQoreworCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeSA9IE5VTEw7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJdTY0IHJldCA9IDA7CisKKwlzcGluX2xvY2soJmNsdXN0ZXItPmxvY2spOworCWlmIChieXRlcyA+IGNsdXN0ZXItPm1heF9zaXplKQorCQlnb3RvIG91dDsKKworCWlmIChjbHVzdGVyLT5ibG9ja19ncm91cCAhPSBibG9ja19ncm91cCkKKwkJZ290byBvdXQ7CisKKwlub2RlID0gcmJfZmlyc3QoJmNsdXN0ZXItPnJvb3QpOworCWlmICghbm9kZSkKKwkJZ290byBvdXQ7CisKKwllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOworCisJd2hpbGUoMSkgeworCQlpZiAoZW50cnktPmJ5dGVzIDwgYnl0ZXMgfHwgZW50cnktPm9mZnNldCA8IG1pbl9zdGFydCkgeworCQkJc3RydWN0IHJiX25vZGUgKm5vZGU7CisKKwkJCW5vZGUgPSByYl9uZXh0KCZlbnRyeS0+b2Zmc2V0X2luZGV4KTsKKwkJCWlmICghbm9kZSkKKwkJCQlicmVhazsKKwkJCWVudHJ5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsCisJCQkJCSBvZmZzZXRfaW5kZXgpOworCQkJY29udGludWU7CisJCX0KKwkJcmV0ID0gZW50cnktPm9mZnNldDsKKworCQllbnRyeS0+b2Zmc2V0ICs9IGJ5dGVzOworCQllbnRyeS0+Ynl0ZXMgLT0gYnl0ZXM7CisKKwkJaWYgKGVudHJ5LT5ieXRlcyA9PSAwKSB7CisJCQlyYl9lcmFzZSgmZW50cnktPm9mZnNldF9pbmRleCwgJmNsdXN0ZXItPnJvb3QpOworCQkJa2ZyZWUoZW50cnkpOworCQl9CisJCWJyZWFrOworCX0KK291dDoKKwlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGhlcmUgd2UgdHJ5IHRvIGZpbmQgYSBjbHVzdGVyIG9mIGJsb2NrcyBpbiBhIGJsb2NrIGdyb3VwLiAgVGhlIGdvYWwKKyAqIGlzIHRvIGZpbmQgYXQgbGVhc3QgYnl0ZXMgZnJlZSBhbmQgdXAgdG8gZW1wdHlfc2l6ZSArIGJ5dGVzIGZyZWUuCisgKiBXZSBtaWdodCBub3QgZmluZCB0aGVtIGFsbCBpbiBvbmUgY29udGlndW91cyBhcmVhLgorICoKKyAqIHJldHVybnMgemVybyBhbmQgc2V0cyB1cCBjbHVzdGVyIGlmIHRoaW5ncyB3b3JrZWQgb3V0LCBvdGhlcndpc2UKKyAqIGl0IHJldHVybnMgLWVub3NwYworICovCitpbnQgYnRyZnNfZmluZF9zcGFjZV9jbHVzdGVyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgICBzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyLAorCQkJICAgICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsIHU2NCBlbXB0eV9zaXplKQoreworCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeSA9IE5VTEw7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKm5leHQ7CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmxhc3Q7CisJdTY0IG1pbl9ieXRlczsKKwl1NjQgd2luZG93X3N0YXJ0OworCXU2NCB3aW5kb3dfZnJlZTsKKwl1NjQgbWF4X2V4dGVudCA9IDA7CisJaW50IHRvdGFsX3JldHJpZXMgPSAwOworCWludCByZXQ7CisKKwkvKiBmb3IgbWV0YWRhdGEsIGFsbG93IGFsbG9jYXRlcyB3aXRoIG1vcmUgaG9sZXMgKi8KKwlpZiAoYmxvY2tfZ3JvdXAtPmZsYWdzICYgQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEpIHsKKwkJLyoKKwkJICogd2Ugd2FudCB0byBkbyBsYXJnZXIgYWxsb2NhdGlvbnMgd2hlbiB3ZSBhcmUKKwkJICogZmx1c2hpbmcgb3V0IHRoZSBkZWxheWVkIHJlZnMsIGl0IGhlbHBzIHByZXZlbnQKKwkJICogbWFraW5nIG1vcmUgd29yayBhcyB3ZSBnbyBhbG9uZy4KKwkJICovCisJCWlmICh0cmFucy0+dHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmcy5mbHVzaGluZykKKwkJCW1pbl9ieXRlcyA9IG1heChieXRlcywgKGJ5dGVzICsgZW1wdHlfc2l6ZSkgPj4gMSk7CisJCWVsc2UKKwkJCW1pbl9ieXRlcyA9IG1heChieXRlcywgKGJ5dGVzICsgZW1wdHlfc2l6ZSkgPj4gNCk7CisJfSBlbHNlCisJCW1pbl9ieXRlcyA9IG1heChieXRlcywgKGJ5dGVzICsgZW1wdHlfc2l6ZSkgPj4gMik7CisKKwlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCXNwaW5fbG9jaygmY2x1c3Rlci0+bG9jayk7CisKKwkvKiBzb21lb25lIGFscmVhZHkgZm91bmQgYSBjbHVzdGVyLCBob29yYXkgKi8KKwlpZiAoY2x1c3Rlci0+YmxvY2tfZ3JvdXApIHsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorYWdhaW46CisJbWluX2J5dGVzID0gbWluKG1pbl9ieXRlcywgYnl0ZXMgKyBlbXB0eV9zaXplKTsKKwllbnRyeSA9IHRyZWVfc2VhcmNoX2J5dGVzKCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9ieXRlcywKKwkJCQkgIG9mZnNldCwgbWluX2J5dGVzKTsKKwlpZiAoIWVudHJ5KSB7CisJCXJldCA9IC1FTk9TUEM7CisJCWdvdG8gb3V0OworCX0KKwl3aW5kb3dfc3RhcnQgPSBlbnRyeS0+b2Zmc2V0OworCXdpbmRvd19mcmVlID0gZW50cnktPmJ5dGVzOworCWxhc3QgPSBlbnRyeTsKKwltYXhfZXh0ZW50ID0gZW50cnktPmJ5dGVzOworCisJd2hpbGUoMSkgeworCQkvKiBvdXQgd2luZG93IGlzIGp1c3QgcmlnaHQsIGxldHMgZmlsbCBpdCAqLworCQlpZiAod2luZG93X2ZyZWUgPj0gYnl0ZXMgKyBlbXB0eV9zaXplKQorCQkJYnJlYWs7CisKKwkJbm9kZSA9IHJiX25leHQoJmxhc3QtPm9mZnNldF9pbmRleCk7CisJCWlmICghbm9kZSkgeworCQkJcmV0ID0gLUVOT1NQQzsKKwkJCWdvdG8gb3V0OworCQl9CisJCW5leHQgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSwgb2Zmc2V0X2luZGV4KTsKKworCQkvKgorCQkgKiB3ZSBoYXZlbid0IGZpbGxlZCB0aGUgZW1wdHkgc2l6ZSBhbmQgdGhlIHdpbmRvdyBpcworCQkgKiB2ZXJ5IGxhcmdlLiAgcmVzZXQgYW5kIHRyeSBhZ2FpbgorCQkgKi8KKwkJaWYgKG5leHQtPm9mZnNldCAtIHdpbmRvd19zdGFydCA+IChieXRlcyArIGVtcHR5X3NpemUpICogMikgeworCQkJZW50cnkgPSBuZXh0OworCQkJd2luZG93X3N0YXJ0ID0gZW50cnktPm9mZnNldDsKKwkJCXdpbmRvd19mcmVlID0gZW50cnktPmJ5dGVzOworCQkJbGFzdCA9IGVudHJ5OworCQkJbWF4X2V4dGVudCA9IDA7CisJCQl0b3RhbF9yZXRyaWVzKys7CisJCQlpZiAodG90YWxfcmV0cmllcyAlIDI1NiA9PSAwKSB7CisJCQkJaWYgKG1pbl9ieXRlcyA+PSAoYnl0ZXMgKyBlbXB0eV9zaXplKSkgeworCQkJCQlyZXQgPSAtRU5PU1BDOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJLyoKKwkJCQkgKiBncm93IG91ciBhbGxvY2F0aW9uIGEgYml0LCB3ZSdyZSBub3QgaGF2aW5nCisJCQkJICogbXVjaCBsdWNrCisJCQkJICovCisJCQkJbWluX2J5dGVzICo9IDI7CisJCQkJZ290byBhZ2FpbjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJd2luZG93X2ZyZWUgKz0gbmV4dC0+Ynl0ZXM7CisJCQlpZiAoZW50cnktPmJ5dGVzID4gbWF4X2V4dGVudCkKKwkJCQltYXhfZXh0ZW50ID0gZW50cnktPmJ5dGVzOworCQl9CisJfQorCisJY2x1c3Rlci0+d2luZG93X3N0YXJ0ID0gZW50cnktPm9mZnNldDsKKworCS8qCisJICogbm93IHdlJ3ZlIGZvdW5kIG91ciBlbnRyaWVzLCBwdWxsIHRoZW0gb3V0IG9mIHRoZSBmcmVlIHNwYWNlCisJICogY2FjaGUgYW5kIHB1dCB0aGVtIGludG8gdGhlIGNsdXN0ZXIgcmJ0cmVlCisJICoKKwkgKiBUaGUgY2x1c3RlciBpbmNsdWRlcyBhbiByYnRyZWUsIGJ1dCBvbmx5IHVzZXMgdGhlIG9mZnNldCBpbmRleAorCSAqIG9mIGVhY2ggZnJlZSBzcGFjZSBjYWNoZSBlbnRyeS4KKwkgKi8KKwl3aGlsZSgxKSB7CisJCW5vZGUgPSByYl9uZXh0KCZlbnRyeS0+b2Zmc2V0X2luZGV4KTsKKwkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKKwkJcmV0ID0gdHJlZV9pbnNlcnRfb2Zmc2V0KCZjbHVzdGVyLT5yb290LCBlbnRyeS0+b2Zmc2V0LAorCQkJCQkgJmVudHJ5LT5vZmZzZXRfaW5kZXgpOworCQlCVUdfT04ocmV0KTsKKworCQlpZiAoIW5vZGUgfHwgZW50cnkgPT0gbGFzdCkKKwkJCWJyZWFrOworCisJCWVudHJ5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIG9mZnNldF9pbmRleCk7CisJfQorCXJldCA9IDA7CisJY2x1c3Rlci0+bWF4X3NpemUgPSBtYXhfZXh0ZW50OworCWF0b21pY19pbmMoJmJsb2NrX2dyb3VwLT5jb3VudCk7CisJbGlzdF9hZGRfdGFpbCgmY2x1c3Rlci0+YmxvY2tfZ3JvdXBfbGlzdCwgJmJsb2NrX2dyb3VwLT5jbHVzdGVyX2xpc3QpOworCWNsdXN0ZXItPmJsb2NrX2dyb3VwID0gYmxvY2tfZ3JvdXA7CitvdXQ6CisJc3Bpbl91bmxvY2soJmNsdXN0ZXItPmxvY2spOworCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9Ci0jZW5kaWYKIAotc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmJ0cmZzX2ZpbmRfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUKLQkJCQkJICAgICAgICpibG9ja19ncm91cCwgdTY0IG9mZnNldCwKLQkJCQkJICAgICAgIHU2NCBieXRlcykKKy8qCisgKiBzaW1wbGUgY29kZSB0byB6ZXJvIG91dCBhIGNsdXN0ZXIKKyAqLwordm9pZCBidHJmc19pbml0X2ZyZWVfY2x1c3RlcihzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyKQogewotCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpyZXQgPSBOVUxMOwotCi0JcmV0ID0gdHJlZV9zZWFyY2hfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsIG9mZnNldCwKLQkJCQkgYnl0ZXMsIDApOwotCWlmICghcmV0KQotCQlyZXQgPSB0cmVlX3NlYXJjaF9ieXRlcygmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfYnl0ZXMsCi0JCQkJCW9mZnNldCwgYnl0ZXMpOwotCi0JcmV0dXJuIHJldDsKKwlzcGluX2xvY2tfaW5pdCgmY2x1c3Rlci0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmNsdXN0ZXItPnJlZmlsbF9sb2NrKTsKKwljbHVzdGVyLT5yb290LnJiX25vZGUgPSBOVUxMOworCWNsdXN0ZXItPm1heF9zaXplID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmY2x1c3Rlci0+YmxvY2tfZ3JvdXBfbGlzdCk7CisJY2x1c3Rlci0+YmxvY2tfZ3JvdXAgPSBOVUxMOwogfQorCmRpZmYgLS1naXQgYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmggYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIwYmRjMAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHYyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0JUUkZTX0ZSRUVfU1BBQ0VfQ0FDSEUKKyNkZWZpbmUgX19CVFJGU19GUkVFX1NQQUNFX0NBQ0hFCisKK2ludCBidHJmc19hZGRfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJIHU2NCBieXRlbnIsIHU2NCBzaXplKTsKK2ludCBidHJmc19yZW1vdmVfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgIHU2NCBieXRlbnIsIHU2NCBzaXplKTsKK3ZvaWQgYnRyZnNfcmVtb3ZlX2ZyZWVfc3BhY2VfY2FjaGUoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlCisJCQkJICAgKmJsb2NrX2dyb3VwKTsKK3U2NCBidHJmc19maW5kX3NwYWNlX2Zvcl9hbGxvYyhzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJICAgICAgIHU2NCBvZmZzZXQsIHU2NCBieXRlcywgdTY0IGVtcHR5X3NpemUpOwordm9pZCBidHJmc19kdW1wX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgIHU2NCBieXRlcyk7Cit1NjQgYnRyZnNfYmxvY2tfZ3JvdXBfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwKTsKK2ludCBidHJmc19maW5kX3NwYWNlX2NsdXN0ZXIoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICAgIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgIHN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIsCisJCQkgICAgIHU2NCBvZmZzZXQsIHU2NCBieXRlcywgdTY0IGVtcHR5X3NpemUpOwordm9pZCBidHJmc19pbml0X2ZyZWVfY2x1c3RlcihzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyKTsKK3U2NCBidHJmc19hbGxvY19mcm9tX2NsdXN0ZXIoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciwgdTY0IGJ5dGVzLAorCQkJICAgICB1NjQgbWluX3N0YXJ0KTsKK2ludCBidHJmc19yZXR1cm5fY2x1c3Rlcl90b19mcmVlX3NwYWNlKAorCQkJICAgICAgIHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3Rlcik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLWl0ZW0uYyBiL2ZzL2J0cmZzL2lub2RlLWl0ZW0uYwppbmRleCAzZDQ2ZmExLi42YjYyN2M2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS1pdGVtLmMKKysrIGIvZnMvYnRyZnMvaW5vZGUtaXRlbS5jCkBAIC03Myw2ICs3Myw4IEBACiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKKwogCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KHRyYW5zLCByb290LCAma2V5LCBwYXRoLCAtMSwgMSk7CiAJaWYgKHJldCA+IDApIHsKIAkJcmV0ID0gLUVOT0VOVDsKQEAgLTEyNyw2ICsxMjksNyBAQAogCWlmICghcGF0aCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJcmV0ID0gYnRyZnNfaW5zZXJ0X2VtcHR5X2l0ZW0odHJhbnMsIHJvb3QsIHBhdGgsICZrZXksCiAJCQkJICAgICAgaW5zX2xlbik7CiAJaWYgKHJldCA9PSAtRUVYSVNUKSB7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCA3ZDRmOTQ4Li5hMGQxZGQ0IDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTEzNCw2ICsxMzQsNyBAQAogCWlmICghcGF0aCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAKIAlrZXkub2JqZWN0aWQgPSBpbm9kZS0+aV9pbm87CkBAIC0xNjcsOSArMTY4LDkgQEAKIAkJCWN1cl9zaXplID0gbWluX3QodW5zaWduZWQgbG9uZywgY29tcHJlc3NlZF9zaXplLAogCQkJCSAgICAgICBQQUdFX0NBQ0hFX1NJWkUpOwogCi0JCQlrYWRkciA9IGttYXAoY3BhZ2UpOworCQkJa2FkZHIgPSBrbWFwX2F0b21pYyhjcGFnZSwgS01fVVNFUjApOwogCQkJd3JpdGVfZXh0ZW50X2J1ZmZlcihsZWFmLCBrYWRkciwgcHRyLCBjdXJfc2l6ZSk7Ci0JCQlrdW5tYXAoY3BhZ2UpOworCQkJa3VubWFwX2F0b21pYyhrYWRkciwgS01fVVNFUjApOwogCiAJCQlpKys7CiAJCQlwdHIgKz0gY3VyX3NpemU7CkBAIC0yMDQsNyArMjA1LDcgQEAKICAqIGRvZXMgdGhlIGNoZWNrcyByZXF1aXJlZCB0byBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgc21hbGwgZW5vdWdoCiAgKiB0byBmaXQgYXMgYW4gaW5saW5lIGV4dGVudC4KICAqLwotc3RhdGljIGludCBjb3dfZmlsZV9yYW5nZV9pbmxpbmUoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCitzdGF0aWMgbm9pbmxpbmUgaW50IGNvd19maWxlX3JhbmdlX2lubGluZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCQkgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCiAJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzdGFydCwgdTY0IGVuZCwKIAkJCQkgc2l6ZV90IGNvbXByZXNzZWRfc2l6ZSwKQEAgLTg1NCwxMSArODU1LDYgQEAKIAl1NjQgY3VyX2VuZDsKIAlpbnQgbGltaXQgPSAxMCAqIDEwMjQgKiAxMDQyOwogCi0JaWYgKCFidHJmc190ZXN0X29wdChyb290LCBDT01QUkVTUykpIHsKLQkJcmV0dXJuIGNvd19maWxlX3JhbmdlKGlub2RlLCBsb2NrZWRfcGFnZSwgc3RhcnQsIGVuZCwKLQkJCQkgICAgICBwYWdlX3N0YXJ0ZWQsIG5yX3dyaXR0ZW4sIDEpOwotCX0KLQogCWNsZWFyX2V4dGVudF9iaXQoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBzdGFydCwgZW5kLCBFWFRFTlRfTE9DS0VEIHwKIAkJCSBFWFRFTlRfREVMQUxMT0MsIDEsIDAsIEdGUF9OT0ZTKTsKIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKQEAgLTkzNSw3ICs5MzEsOCBAQAogICogSWYgbm8gY293IGNvcGllcyBvciBzbmFwc2hvdHMgZXhpc3QsIHdlIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSBleGlzdGluZwogICogYmxvY2tzIG9uIGRpc2sKICAqLwotc3RhdGljIGludCBydW5fZGVsYWxsb2Nfbm9jb3coc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKmxvY2tlZF9wYWdlLAorc3RhdGljIG5vaW5saW5lIGludCBydW5fZGVsYWxsb2Nfbm9jb3coc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICAgc3RydWN0IHBhZ2UgKmxvY2tlZF9wYWdlLAogCQkJICAgICAgdTY0IHN0YXJ0LCB1NjQgZW5kLCBpbnQgKnBhZ2Vfc3RhcnRlZCwgaW50IGZvcmNlLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyAqbnJfd3JpdHRlbikKIHsKQEAgLTExMzMsNiArMTEzMCw3IEBACiAJCQkgICAgICB1bnNpZ25lZCBsb25nICpucl93cml0dGVuKQogewogCWludCByZXQ7CisJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAogCWlmIChidHJmc190ZXN0X2ZsYWcoaW5vZGUsIE5PREFUQUNPVykpCiAJCXJldCA9IHJ1bl9kZWxhbGxvY19ub2Nvdyhpbm9kZSwgbG9ja2VkX3BhZ2UsIHN0YXJ0LCBlbmQsCkBAIC0xMTQwLDEwICsxMTM4LDEyIEBACiAJZWxzZSBpZiAoYnRyZnNfdGVzdF9mbGFnKGlub2RlLCBQUkVBTExPQykpCiAJCXJldCA9IHJ1bl9kZWxhbGxvY19ub2Nvdyhpbm9kZSwgbG9ja2VkX3BhZ2UsIHN0YXJ0LCBlbmQsCiAJCQkJCSBwYWdlX3N0YXJ0ZWQsIDAsIG5yX3dyaXR0ZW4pOworCWVsc2UgaWYgKCFidHJmc190ZXN0X29wdChyb290LCBDT01QUkVTUykpCisJCXJldCA9IGNvd19maWxlX3JhbmdlKGlub2RlLCBsb2NrZWRfcGFnZSwgc3RhcnQsIGVuZCwKKwkJCQkgICAgICBwYWdlX3N0YXJ0ZWQsIG5yX3dyaXR0ZW4sIDEpOwogCWVsc2UKIAkJcmV0ID0gY293X2ZpbGVfcmFuZ2VfYXN5bmMoaW5vZGUsIGxvY2tlZF9wYWdlLCBzdGFydCwgZW5kLAogCQkJCQkgICBwYWdlX3N0YXJ0ZWQsIG5yX3dyaXR0ZW4pOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTQ1Myw2ICsxNDUzLDcgQEAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwogCUJVR19PTighcGF0aCk7CiAKKwlwYXRoLT5sZWF2ZV9zcGlubmluZyA9IDE7CiAJcmV0ID0gYnRyZnNfZHJvcF9leHRlbnRzKHRyYW5zLCByb290LCBpbm9kZSwgZmlsZV9wb3MsCiAJCQkJIGZpbGVfcG9zICsgbnVtX2J5dGVzLCBmaWxlX3BvcywgJmhpbnQpOwogCUJVR19PTihyZXQpOwpAQCAtMTQ3NSw2ICsxNDc2LDEwIEBACiAJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X2NvbXByZXNzaW9uKGxlYWYsIGZpLCBjb21wcmVzc2lvbik7CiAJYnRyZnNfc2V0X2ZpbGVfZXh0ZW50X2VuY3J5cHRpb24obGVhZiwgZmksIGVuY3J5cHRpb24pOwogCWJ0cmZzX3NldF9maWxlX2V4dGVudF9vdGhlcl9lbmNvZGluZyhsZWFmLCBmaSwgb3RoZXJfZW5jb2RpbmcpOworCisJYnRyZnNfdW5sb2NrX3VwX3NhZmUocGF0aCwgMSk7CisJYnRyZnNfc2V0X2xvY2tfYmxvY2tpbmcobGVhZik7CisKIAlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKIAogCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtX2J5dGVzKTsKQEAgLTE0ODcsMTEgKzE0OTIsMzUgQEAKIAkJCQkJICByb290LT5yb290X2tleS5vYmplY3RpZCwKIAkJCQkJICB0cmFucy0+dHJhbnNpZCwgaW5vZGUtPmlfaW5vLCAmaW5zKTsKIAlCVUdfT04ocmV0KTsKLQogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwogCXJldHVybiAwOwogfQogCisvKgorICogaGVscGVyIGZ1bmN0aW9uIGZvciBidHJmc19maW5pc2hfb3JkZXJlZF9pbywgdGhpcworICoganVzdCByZWFkcyBpbiBzb21lIG9mIHRoZSBjc3VtIGxlYXZlcyB0byBwcmltZSB0aGVtIGludG8gcmFtCisgKiBiZWZvcmUgd2Ugc3RhcnQgdGhlIHRyYW5zYWN0aW9uLiAgSXQgbGltaXRzIHRoZSBhbW91bnQgb2YgYnRyZWUKKyAqIHJlYWRzIHJlcXVpcmVkIHdoaWxlIGluc2lkZSB0aGUgdHJhbnNhY3Rpb24uCisgKi8KK3N0YXRpYyBub2lubGluZSB2b2lkIHJlYWRhX2NzdW0oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsCisJCQkJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkX2V4dGVudCkKK3sKKwlzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9zdW0gKnN1bTsKKwl1NjQgYnl0ZW5yOworCisJc3VtID0gbGlzdF9lbnRyeShvcmRlcmVkX2V4dGVudC0+bGlzdC5uZXh0LCBzdHJ1Y3QgYnRyZnNfb3JkZXJlZF9zdW0sCisJCQkgbGlzdCk7CisJYnl0ZW5yID0gc3VtLT5zdW1zWzBdLmJ5dGVucjsKKworCS8qCisJICogd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcmVzdWx0cywgdGhlIHBvaW50IG9mIHRoaXMgc2VhcmNoIGlzCisJICoganVzdCB0byBnZXQgdGhlIGJ0cmVlIGxlYXZlcyBpbnRvIHJhbQorCSAqLworCWJ0cmZzX2xvb2t1cF9jc3VtKE5VTEwsIHJvb3QtPmZzX2luZm8tPmNzdW1fcm9vdCwgcGF0aCwgYnl0ZW5yLCAwKTsKK30KKwogLyogYXMgb3JkZXJlZCBkYXRhIElPIGZpbmlzaGVzLCB0aGlzIGdldHMgY2FsbGVkIHNvIHdlIGNhbiBmaW5pc2gKICAqIGFuIG9yZGVyZWQgZXh0ZW50IGlmIHRoZSByYW5nZSBvZiBieXRlcyBpbiB0aGUgZmlsZSBpdCBjb3ZlcnMgYXJlCiAgKiBmdWxseSB3cml0dGVuLgpAQCAtMTUwMCw4ICsxNTI5LDkgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwotCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqb3JkZXJlZF9leHRlbnQ7CisJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkX2V4dGVudCA9IE5VTEw7CiAJc3RydWN0IGV4dGVudF9pb190cmVlICppb190cmVlID0gJkJUUkZTX0koaW5vZGUpLT5pb190cmVlOworCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCWludCBjb21wcmVzc2VkID0gMDsKIAlpbnQgcmV0OwogCkBAIC0xNTA5LDkgKzE1MzksMzMgQEAKIAlpZiAoIXJldCkKIAkJcmV0dXJuIDA7CiAKKwkvKgorCSAqIGJlZm9yZSB3ZSBqb2luIHRoZSB0cmFuc2FjdGlvbiwgdHJ5IHRvIGRvIHNvbWUgb2Ygb3VyIElPLgorCSAqIFRoaXMgd2lsbCBsaW1pdCB0aGUgYW1vdW50IG9mIElPIHRoYXQgd2UgaGF2ZSB0byBkbyB3aXRoCisJICogdGhlIHRyYW5zYWN0aW9uIHJ1bm5pbmcuICBXZSdyZSB1bmxpa2VseSB0byBuZWVkIHRvIGRvIGFueQorCSAqIElPIGlmIHRoZSBmaWxlIGV4dGVudHMgYXJlIG5ldywgdGhlIGRpc2tfaV9zaXplIGNoZWNrcworCSAqIGNvdmVycyB0aGUgbW9zdCBjb21tb24gY2FzZS4KKwkgKi8KKwlpZiAoc3RhcnQgPCBCVFJGU19JKGlub2RlKS0+ZGlza19pX3NpemUpIHsKKwkJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwkJaWYgKHBhdGgpIHsKKwkJCXJldCA9IGJ0cmZzX2xvb2t1cF9maWxlX2V4dGVudChOVUxMLCByb290LCBwYXRoLAorCQkJCQkJICAgICAgIGlub2RlLT5pX2lubywKKwkJCQkJCSAgICAgICBzdGFydCwgMCk7CisJCQlvcmRlcmVkX2V4dGVudCA9IGJ0cmZzX2xvb2t1cF9vcmRlcmVkX2V4dGVudChpbm9kZSwKKwkJCQkJCQkJICAgICBzdGFydCk7CisJCQlpZiAoIWxpc3RfZW1wdHkoJm9yZGVyZWRfZXh0ZW50LT5saXN0KSkgeworCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKKwkJCQlyZWFkYV9jc3VtKHJvb3QsIHBhdGgsIG9yZGVyZWRfZXh0ZW50KTsKKwkJCX0KKwkJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwkJfQorCX0KKwogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKIAotCW9yZGVyZWRfZXh0ZW50ID0gYnRyZnNfbG9va3VwX29yZGVyZWRfZXh0ZW50KGlub2RlLCBzdGFydCk7CisJaWYgKCFvcmRlcmVkX2V4dGVudCkKKwkJb3JkZXJlZF9leHRlbnQgPSBidHJmc19sb29rdXBfb3JkZXJlZF9leHRlbnQoaW5vZGUsIHN0YXJ0KTsKIAlCVUdfT04oIW9yZGVyZWRfZXh0ZW50KTsKIAlpZiAodGVzdF9iaXQoQlRSRlNfT1JERVJFRF9OT0NPVywgJm9yZGVyZWRfZXh0ZW50LT5mbGFncykpCiAJCWdvdG8gbm9jb3c7CkBAIC0yMTAxLDYgKzIxNTUsNyBAQAogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKIAlCVUdfT04oIXBhdGgpOworCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAlyZXQgPSBidHJmc19sb29rdXBfaW5vZGUodHJhbnMsIHJvb3QsIHBhdGgsCiAJCQkJICZCVFJGU19JKGlub2RlKS0+bG9jYXRpb24sIDEpOwogCWlmIChyZXQpIHsKQEAgLTIxNDcsNiArMjIwMiw3IEBACiAJCWdvdG8gZXJyOwogCX0KIAorCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAlkaSA9IGJ0cmZzX2xvb2t1cF9kaXJfaXRlbSh0cmFucywgcm9vdCwgcGF0aCwgZGlyLT5pX2lubywKIAkJCQkgICAgbmFtZSwgbmFtZV9sZW4sIC0xKTsKIAlpZiAoSVNfRVJSKGRpKSkgewpAQCAtMjE5MCw4ICsyMjQ2LDYgQEAKIAlyZXQgPSBidHJmc19kZWxfaW5vZGVfcmVmX2luX2xvZyh0cmFucywgcm9vdCwgbmFtZSwgbmFtZV9sZW4sCiAJCQkJCSBpbm9kZSwgZGlyLT5pX2lubyk7CiAJQlVHX09OKHJldCAhPSAwICYmIHJldCAhPSAtRU5PRU5UKTsKLQlpZiAocmV0ICE9IC1FTk9FTlQpCi0JCUJUUkZTX0koZGlyKS0+bG9nX2RpcnR5X3RyYW5zID0gdHJhbnMtPnRyYW5zaWQ7CiAKIAlyZXQgPSBidHJmc19kZWxfZGlyX2VudHJpZXNfaW5fbG9nKHRyYW5zLCByb290LCBuYW1lLCBuYW1lX2xlbiwKIAkJCQkJICAgZGlyLCBpbmRleCk7CkBAIC0yMjI0LDYgKzIyNzgsOSBAQAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGRpcik7CisKKwlidHJmc19yZWNvcmRfdW5saW5rX2Rpcih0cmFucywgZGlyLCBkZW50cnktPmRfaW5vZGUsIDApOworCiAJcmV0ID0gYnRyZnNfdW5saW5rX2lub2RlKHRyYW5zLCByb290LCBkaXIsIGRlbnRyeS0+ZF9pbm9kZSwKIAkJCQkgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuKTsKIApAQCAtMjQ5OCw2ICsyNTU1LDcgQEAKIAlrZXkudHlwZSA9ICh1OCktMTsKIAogc2VhcmNoX2FnYWluOgorCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdCh0cmFucywgcm9vdCwgJmtleSwgcGF0aCwgLTEsIDEpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yOwpAQCAtMjY0NCw2ICsyNzAyLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChmb3VuZF9leHRlbnQpIHsKKwkJCWJ0cmZzX3NldF9wYXRoX2Jsb2NraW5nKHBhdGgpOwogCQkJcmV0ID0gYnRyZnNfZnJlZV9leHRlbnQodHJhbnMsIHJvb3QsIGV4dGVudF9zdGFydCwKIAkJCQkJCWV4dGVudF9udW1fYnl0ZXMsCiAJCQkJCQlsZWFmLT5zdGFydCwgcm9vdF9vd25lciwKQEAgLTI4NDgsMTEgKzI5MDcsMjEgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYKLQkgICAgYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUgJiYgYXR0ci0+aWFfc2l6ZSA+IGlub2RlLT5pX3NpemUpIHsKLQkJZXJyID0gYnRyZnNfY29udF9leHBhbmQoaW5vZGUsIGF0dHItPmlhX3NpemUpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpKSB7CisJCWlmIChhdHRyLT5pYV9zaXplID4gaW5vZGUtPmlfc2l6ZSkgeworCQkJZXJyID0gYnRyZnNfY29udF9leHBhbmQoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9IGVsc2UgaWYgKGlub2RlLT5pX3NpemUgPiAwICYmCisJCQkgICBhdHRyLT5pYV9zaXplID09IDApIHsKKworCQkJLyogd2UncmUgdHJ1bmNhdGluZyBhIGZpbGUgdGhhdCB1c2VkIHRvIGhhdmUgZ29vZAorCQkJICogZGF0YSBkb3duIHRvIHplcm8uICBNYWtlIHN1cmUgaXQgZ2V0cyBpbnRvCisJCQkgKiB0aGUgb3JkZXJlZCBmbHVzaCBsaXN0IHNvIHRoYXQgYW55IG5ldyB3cml0ZXMKKwkJCSAqIGdldCBkb3duIHRvIGRpc2sgcXVpY2tseS4KKwkJCSAqLworCQkJQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfZGF0YV9jbG9zZSA9IDE7CisJCX0KIAl9CiAKIAllcnIgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKQEAgLTI5ODQsMTMgKzMwNTMsMTQgQEAKIAliaS0+ZGlza19pX3NpemUgPSAwOwogCWJpLT5mbGFncyA9IDA7CiAJYmktPmluZGV4X2NudCA9ICh1NjQpLTE7Ci0JYmktPmxvZ19kaXJ0eV90cmFucyA9IDA7CisJYmktPmxhc3RfdW5saW5rX3RyYW5zID0gMDsKIAlleHRlbnRfbWFwX3RyZWVfaW5pdCgmQlRSRlNfSShpbm9kZSktPmV4dGVudF90cmVlLCBHRlBfTk9GUyk7CiAJZXh0ZW50X2lvX3RyZWVfaW5pdCgmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsCiAJCQkgICAgIGlub2RlLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKIAlleHRlbnRfaW9fdHJlZV9pbml0KCZCVFJGU19JKGlub2RlKS0+aW9fZmFpbHVyZV90cmVlLAogCQkJICAgICBpbm9kZS0+aV9tYXBwaW5nLCBHRlBfTk9GUyk7CiAJSU5JVF9MSVNUX0hFQUQoJkJUUkZTX0koaW5vZGUpLT5kZWxhbGxvY19pbm9kZXMpOworCUlOSVRfTElTVF9IRUFEKCZCVFJGU19JKGlub2RlKS0+b3JkZXJlZF9vcGVyYXRpb25zKTsKIAlidHJmc19vcmRlcmVkX2lub2RlX3RyZWVfaW5pdCgmQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfdHJlZSk7CiAJbXV0ZXhfaW5pdCgmQlRSRlNfSShpbm9kZSktPmV4dGVudF9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmQlRSRlNfSShpbm9kZSktPmxvZ19tdXRleCk7CkBAIC0zNDExLDggKzM0ODEsMTAgQEAKIAogCWlmIChkaXIpIHsKIAkJcmV0ID0gYnRyZnNfc2V0X2lub2RlX2luZGV4KGRpciwgaW5kZXgpOwotCQlpZiAocmV0KQorCQlpZiAocmV0KSB7CisJCQlpcHV0KGlub2RlKTsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CisJCX0KIAl9CiAJLyoKIAkgKiBpbmRleF9jbnQgaXMgaWdub3JlZCBmb3IgZXZlcnl0aGluZyBidXQgYSBkaXIsCkBAIC0zNDQ5LDYgKzM1MjEsNyBAQAogCXNpemVzWzBdID0gc2l6ZW9mKHN0cnVjdCBidHJmc19pbm9kZV9pdGVtKTsKIAlzaXplc1sxXSA9IG5hbWVfbGVuICsgc2l6ZW9mKCpyZWYpOwogCisJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCXJldCA9IGJ0cmZzX2luc2VydF9lbXB0eV9pdGVtcyh0cmFucywgcm9vdCwgcGF0aCwga2V5LCBzaXplcywgMik7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGZhaWw7CkBAIC0zNDk0LDYgKzM1NjcsNyBAQAogCWlmIChkaXIpCiAJCUJUUkZTX0koZGlyKS0+aW5kZXhfY250LS07CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOworCWlwdXQoaW5vZGUpOwogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKQEAgLTM3MjcsNiArMzgwMSw4IEBACiAJCWRyb3BfaW5vZGUgPSAxOwogCiAJbnIgPSB0cmFucy0+YmxvY2tzX3VzZWQ7CisKKwlidHJmc19sb2dfbmV3X25hbWUodHJhbnMsIGlub2RlLCBOVUxMLCBkZW50cnktPmRfcGFyZW50KTsKIAlidHJmc19lbmRfdHJhbnNhY3Rpb25fdGhyb3R0bGUodHJhbnMsIHJvb3QpOwogZmFpbDoKIAlpZiAoZHJvcF9pbm9kZSkgewpAQCAtNDI5Miw4ICs0MzY4LDkgQEAKICAqIGJleW9uZCBFT0YsIHRoZW4gdGhlIHBhZ2UgaXMgZ3VhcmFudGVlZCBzYWZlIGFnYWluc3QgdHJ1bmNhdGlvbiB1bnRpbCB3ZQogICogdW5sb2NrIHRoZSBwYWdlLgogICovCi1pbnQgYnRyZnNfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK2ludCBidHJmc19wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogeworCXN0cnVjdCBwYWdlICpwYWdlID0gdm1mLT5wYWdlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmZGVudHJ5KHZtYS0+dm1fZmlsZSktPmRfaW5vZGU7CiAJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKIAlzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKmlvX3RyZWUgPSAmQlRSRlNfSShpbm9kZSktPmlvX3RyZWU7CkBAIC00MzA2LDEwICs0MzgzLDE1IEBACiAJdTY0IHBhZ2VfZW5kOwogCiAJcmV0ID0gYnRyZnNfY2hlY2tfZGF0YV9mcmVlX3NwYWNlKHJvb3QsIGlub2RlLCBQQUdFX0NBQ0hFX1NJWkUpOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlpZiAocmV0ID09IC1FTk9NRU0pCisJCQlyZXQgPSBWTV9GQVVMVF9PT007CisJCWVsc2UgLyogLUVOT1NQQywgLUVJTywgZXRjICovCisJCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiAJCWdvdG8gb3V0OworCX0KIAotCXJldCA9IC1FSU5WQUw7CisJcmV0ID0gVk1fRkFVTFRfTk9QQUdFOyAvKiBtYWtlIHRoZSBWTSByZXRyeSB0aGUgZmF1bHQgKi8KIGFnYWluOgogCWxvY2tfcGFnZShwYWdlKTsKIAlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwpAQCAtNDM1Nyw2ICs0NDM5LDggQEAKIAl9CiAJQ2xlYXJQYWdlQ2hlY2tlZChwYWdlKTsKIAlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKKworCUJUUkZTX0koaW5vZGUpLT5sYXN0X3RyYW5zID0gcm9vdC0+ZnNfaW5mby0+Z2VuZXJhdGlvbiArIDE7CiAJdW5sb2NrX2V4dGVudChpb190cmVlLCBwYWdlX3N0YXJ0LCBwYWdlX2VuZCwgR0ZQX05PRlMpOwogCiBvdXRfdW5sb2NrOgpAQCAtNDM4Miw2ICs0NDY2LDI3IEBACiAJYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCBpbm9kZS0+aV9zaXplICYgKH5tYXNrKSwgKHU2NCktMSk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCisJLyoKKwkgKiBzZXRhdHRyIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBvcmRlcmVkX2RhdGFfY2xvc2UgZmxhZywKKwkgKiBidXQgdGhhdCBpcyBvbmx5IHRlc3RlZCBkdXJpbmcgdGhlIGxhc3QgZmlsZSByZWxlYXNlLiAgVGhhdAorCSAqIGNvdWxkIGhhcHBlbiB3ZWxsIGFmdGVyIHRoZSBuZXh0IGNvbW1pdCwgbGVhdmluZyBhIGdyZWF0IGJpZworCSAqIHdpbmRvdyB3aGVyZSBuZXcgd3JpdGVzIG1heSBnZXQgbG9zdCBpZiBzb21lb25lIGNob29zZXMgdG8gd3JpdGUKKwkgKiB0byB0aGlzIGZpbGUgYWZ0ZXIgdHJ1bmNhdGluZyB0byB6ZXJvCisJICoKKwkgKiBUaGUgaW5vZGUgZG9lc24ndCBoYXZlIGFueSBkaXJ0eSBkYXRhIGhlcmUsIGFuZCBzbyBpZiB3ZSBjb21taXQKKwkgKiB0aGlzIGlzIGEgbm9vcC4gIElmIHNvbWVvbmUgaW1tZWRpYXRlbHkgc3RhcnRzIHdyaXRpbmcgdG8gdGhlIGlub2RlCisJICogaXQgaXMgdmVyeSBsaWtlbHkgd2UnbGwgY2F0Y2ggc29tZSBvZiB0aGVpciB3cml0ZXMgaW4gdGhpcworCSAqIHRyYW5zYWN0aW9uLCBhbmQgdGhlIGNvbW1pdCB3aWxsIGZpbmQgdGhpcyBmaWxlIG9uIHRoZSBvcmRlcmVkCisJICogZGF0YSBsaXN0IHdpdGggZ29vZCB0aGluZ3MgdG8gc2VuZCBkb3duLgorCSAqCisJICogVGhpcyBpcyBhIGJlc3QgZWZmb3J0IHNvbHV0aW9uLCB0aGVyZSBpcyBzdGlsbCBhIHdpbmRvdyB3aGVyZQorCSAqIHVzaW5nIHRydW5jYXRlIHRvIHJlcGxhY2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHdpbGwKKwkgKiBlbmQgdXAgd2l0aCBhIHplcm8gbGVuZ3RoIGZpbGUgYWZ0ZXIgYSBjcmFzaC4KKwkgKi8KKwlpZiAoaW5vZGUtPmlfc2l6ZSA9PSAwICYmIEJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX2RhdGFfY2xvc2UpCisJCWJ0cmZzX2FkZF9vcmRlcmVkX29wZXJhdGlvbih0cmFucywgcm9vdCwgaW5vZGUpOworCiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJYnRyZnNfaV9zaXplX3dyaXRlKGlub2RlLCBpbm9kZS0+aV9zaXplKTsKIApAQCAtNDQ1OCwxMiArNDU2MywxNSBAQAogCWVpLT5pX2FjbCA9IEJUUkZTX0FDTF9OT1RfQ0FDSEVEOwogCWVpLT5pX2RlZmF1bHRfYWNsID0gQlRSRlNfQUNMX05PVF9DQUNIRUQ7CiAJSU5JVF9MSVNUX0hFQUQoJmVpLT5pX29ycGhhbik7CisJSU5JVF9MSVNUX0hFQUQoJmVpLT5vcmRlcmVkX29wZXJhdGlvbnMpOwogCXJldHVybiAmZWktPnZmc19pbm9kZTsKIH0KIAogdm9pZCBidHJmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGJ0cmZzX29yZGVyZWRfZXh0ZW50ICpvcmRlcmVkOworCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CisKIAlXQVJOX09OKCFsaXN0X2VtcHR5KCZpbm9kZS0+aV9kZW50cnkpKTsKIAlXQVJOX09OKGlub2RlLT5pX2RhdGEubnJwYWdlcyk7CiAKQEAgLTQ0NzQsMTMgKzQ1ODIsMjQgQEAKIAkgICAgQlRSRlNfSShpbm9kZSktPmlfZGVmYXVsdF9hY2wgIT0gQlRSRlNfQUNMX05PVF9DQUNIRUQpCiAJCXBvc2l4X2FjbF9yZWxlYXNlKEJUUkZTX0koaW5vZGUpLT5pX2RlZmF1bHRfYWNsKTsKIAotCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPnJvb3QtPmxpc3RfbG9jayk7CisJLyoKKwkgKiBNYWtlIHN1cmUgd2UncmUgcHJvcGVybHkgcmVtb3ZlZCBmcm9tIHRoZSBvcmRlcmVkIG9wZXJhdGlvbgorCSAqIGxpc3RzLgorCSAqLworCXNtcF9tYigpOworCWlmICghbGlzdF9lbXB0eSgmQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfb3BlcmF0aW9ucykpIHsKKwkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5vcmRlcmVkX2V4dGVudF9sb2NrKTsKKwkJbGlzdF9kZWxfaW5pdCgmQlRSRlNfSShpbm9kZSktPm9yZGVyZWRfb3BlcmF0aW9ucyk7CisJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5vcmRlcmVkX2V4dGVudF9sb2NrKTsKKwl9CisKKwlzcGluX2xvY2soJnJvb3QtPmxpc3RfbG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZCVFJGU19JKGlub2RlKS0+aV9vcnBoYW4pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQlRSRlM6IGlub2RlICVsdTogaW5vZGUgc3RpbGwgb24gdGhlIG9ycGhhbiIKIAkJICAgICAgICIgbGlzdFxuIiwgaW5vZGUtPmlfaW5vKTsKIAkJZHVtcF9zdGFjaygpOwogCX0KLQlzcGluX3VubG9jaygmQlRSRlNfSShpbm9kZSktPnJvb3QtPmxpc3RfbG9jayk7CisJc3Bpbl91bmxvY2soJnJvb3QtPmxpc3RfbG9jayk7CiAKIAl3aGlsZSAoMSkgewogCQlvcmRlcmVkID0gYnRyZnNfbG9va3VwX2ZpcnN0X29yZGVyZWRfZXh0ZW50KGlub2RlLCAodTY0KS0xKTsKQEAgLTQ2MDUsOCArNDcyNCwzNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VubG9jazsKIAorCS8qCisJICogd2UncmUgdXNpbmcgcmVuYW1lIHRvIHJlcGxhY2Ugb25lIGZpbGUgd2l0aCBhbm90aGVyLgorCSAqIGFuZCB0aGUgcmVwbGFjZW1lbnQgZmlsZSBpcyBsYXJnZS4gIFN0YXJ0IElPIG9uIGl0IG5vdyBzbworCSAqIHdlIGRvbid0IGFkZCB0b28gbXVjaCB3b3JrIHRvIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uCisJICovCisJaWYgKG5ld19pbm9kZSAmJiBvbGRfaW5vZGUgJiYgU19JU1JFRyhvbGRfaW5vZGUtPmlfbW9kZSkgJiYKKwkgICAgbmV3X2lub2RlLT5pX3NpemUgJiYKKwkgICAgb2xkX2lub2RlLT5pX3NpemUgPiBCVFJGU19PUkRFUkVEX09QRVJBVElPTlNfRkxVU0hfTElNSVQpCisJCWZpbGVtYXBfZmx1c2gob2xkX2lub2RlLT5pX21hcHBpbmcpOworCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKIAorCS8qCisJICogbWFrZSBzdXJlIHRoZSBpbm9kZSBnZXRzIGZsdXNoZWQgaWYgaXQgaXMgcmVwbGFjaW5nCisJICogc29tZXRoaW5nLgorCSAqLworCWlmIChuZXdfaW5vZGUgJiYgbmV3X2lub2RlLT5pX3NpemUgJiYKKwkgICAgb2xkX2lub2RlICYmIFNfSVNSRUcob2xkX2lub2RlLT5pX21vZGUpKSB7CisJCWJ0cmZzX2FkZF9vcmRlcmVkX29wZXJhdGlvbih0cmFucywgcm9vdCwgb2xkX2lub2RlKTsKKwl9CisKKwkvKgorCSAqIHRoaXMgaXMgYW4gdWdseSBsaXR0bGUgcmFjZSwgYnV0IHRoZSByZW5hbWUgaXMgcmVxdWlyZWQgdG8gbWFrZQorCSAqIHN1cmUgdGhhdCBpZiB3ZSBjcmFzaCwgdGhlIGlub2RlIGlzIGVpdGhlciBhdCB0aGUgb2xkIG5hbWUKKwkgKiBvciB0aGUgbmV3IG9uZS4gIHBpbm5pbmcgdGhlIGxvZyB0cmFuc2FjdGlvbiBsZXRzIHVzIG1ha2Ugc3VyZQorCSAqIHdlIGRvbid0IGFsbG93IGEgbG9nIGNvbW1pdCB0byBjb21lIGluIGFmdGVyIHdlIHVubGluayB0aGUKKwkgKiBuYW1lIGJ1dCBiZWZvcmUgd2UgYWRkIHRoZSBuZXcgbmFtZSBiYWNrIGluLgorCSAqLworCWJ0cmZzX3Bpbl9sb2dfdHJhbnMocm9vdCk7CisKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIG5ld19kaXIpOwogCiAJYnRyZnNfaW5jX25saW5rKG9sZF9kZW50cnktPmRfaW5vZGUpOwpAQCAtNDYxNCw2ICs0NzYxLDkgQEAKIAluZXdfZGlyLT5pX2N0aW1lID0gbmV3X2Rpci0+aV9tdGltZSA9IGN0aW1lOwogCW9sZF9pbm9kZS0+aV9jdGltZSA9IGN0aW1lOwogCisJaWYgKG9sZF9kZW50cnktPmRfcGFyZW50ICE9IG5ld19kZW50cnktPmRfcGFyZW50KQorCQlidHJmc19yZWNvcmRfdW5saW5rX2Rpcih0cmFucywgb2xkX2Rpciwgb2xkX2lub2RlLCAxKTsKKwogCXJldCA9IGJ0cmZzX3VubGlua19pbm9kZSh0cmFucywgcm9vdCwgb2xkX2Rpciwgb2xkX2RlbnRyeS0+ZF9pbm9kZSwKIAkJCQkgb2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJIG9sZF9kZW50cnktPmRfbmFtZS5sZW4pOwpAQCAtNDY0NSw3ICs0Nzk1LDE0IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZmFpbDsKIAorCWJ0cmZzX2xvZ19uZXdfbmFtZSh0cmFucywgb2xkX2lub2RlLCBvbGRfZGlyLAorCQkJCSAgICAgICBuZXdfZGVudHJ5LT5kX3BhcmVudCk7CiBvdXRfZmFpbDoKKworCS8qIHRoaXMgYnRyZnNfZW5kX2xvZ190cmFucyBqdXN0IGFsbG93cyB0aGUgY3VycmVudAorCSAqIGxvZy1zdWIgdHJhbnNhY3Rpb24gdG8gY29tcGxldGUKKwkgKi8KKwlidHJmc19lbmRfbG9nX3RyYW5zKHJvb3QpOwogCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgcm9vdCk7CiBvdXRfdW5sb2NrOgogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pb2N0bC5jIGIvZnMvYnRyZnMvaW9jdGwuYwppbmRleCBiY2E3MjlmLi43NTk0YmVjIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pb2N0bC5jCisrKyBiL2ZzL2J0cmZzL2lvY3RsLmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCQlnb3RvIG91dF9kcHV0OwogCiAJaWYgKCFJU19QT1NJWEFDTChwYXJlbnQtPmRlbnRyeS0+ZF9pbm9kZSkpCi0JCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCiAJZXJyb3IgPSBtbnRfd2FudF93cml0ZShwYXJlbnQtPm1udCk7CiAJaWYgKGVycm9yKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvbG9ja2luZy5jIGIvZnMvYnRyZnMvbG9ja2luZy5jCmluZGV4IDQ3YjBhODguLjFjMzZlNWMgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2xvY2tpbmcuYworKysgYi9mcy9idHJmcy9sb2NraW5nLmMKQEAgLTYwLDggKzYwLDggQEAKIAogLyoKICAqIHVuZm9ydHVuYXRlbHksIG1hbnkgb2YgdGhlIHBsYWNlcyB0aGF0IGN1cnJlbnRseSBzZXQgYSBsb2NrIHRvIGJsb2NraW5nCi0gKiBkb24ndCBlbmQgdXAgYmxvY2tpbmcgZm9yIGV2ZXJ5IGxvbmcsIGFuZCBvZnRlbiB0aGV5IGRvbid0IGJsb2NrCi0gKiBhdCBhbGwuICBGb3IgYSBkYmVuY2ggNTAgcnVuLCBpZiB3ZSBkb24ndCBzcGluIG9uZSB0aGUgYmxvY2tpbmcgYml0CisgKiBkb24ndCBlbmQgdXAgYmxvY2tpbmcgZm9yIHZlcnkgbG9uZywgYW5kIG9mdGVuIHRoZXkgZG9uJ3QgYmxvY2sKKyAqIGF0IGFsbC4gIEZvciBhIGRiZW5jaCA1MCBydW4sIGlmIHdlIGRvbid0IHNwaW4gb24gdGhlIGJsb2NraW5nIGJpdAogICogYXQgYWxsLCB0aGUgY29udGV4dCBzd2l0Y2ggcmF0ZSBjYW4ganVtcCB1cCB0byA0MDAsMDAwL3NlYyBvciBtb3JlLgogICoKICAqIFNvLCB3ZSdyZSBzdGlsbCBzdHVjayB3aXRoIHRoaXMgY3J1bW15IHNwaW4gb24gdGhlIGJsb2NraW5nIGJpdCwKQEAgLTcxLDEyICs3MSwxMyBAQAogc3RhdGljIGludCBidHJmc19zcGluX29uX2Jsb2NrKHN0cnVjdCBleHRlbnRfYnVmZmVyICplYikKIHsKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCA1MTI7IGkrKykgewotCQljcHVfcmVsYXgoKTsKIAkJaWYgKCF0ZXN0X2JpdChFWFRFTlRfQlVGRkVSX0JMT0NLSU5HLCAmZWItPmJmbGFncykpCiAJCQlyZXR1cm4gMTsKIAkJaWYgKG5lZWRfcmVzY2hlZCgpKQogCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTk1LDEzICs5NiwxNSBAQAogewogCWludCBpOwogCi0Jc3Bpbl9uZXN0ZWQoZWIpOwotCWlmICghdGVzdF9iaXQoRVhURU5UX0JVRkZFUl9CTE9DS0lORywgJmViLT5iZmxhZ3MpKQotCQlyZXR1cm4gMTsKLQlzcGluX3VubG9jaygmZWItPmxvY2spOwotCisJaWYgKGJ0cmZzX3NwaW5fb25fYmxvY2soZWIpKSB7CisJCXNwaW5fbmVzdGVkKGViKTsKKwkJaWYgKCF0ZXN0X2JpdChFWFRFTlRfQlVGRkVSX0JMT0NLSU5HLCAmZWItPmJmbGFncykpCisJCQlyZXR1cm4gMTsKKwkJc3Bpbl91bmxvY2soJmViLT5sb2NrKTsKKwl9CiAJLyogc3BpbiBmb3IgYSBiaXQgb24gdGhlIEJMT0NLSU5HIGZsYWcgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWNwdV9yZWxheCgpOwogCQlpZiAoIWJ0cmZzX3NwaW5fb25fYmxvY2soZWIpKQogCQkJYnJlYWs7CiAKQEAgLTE0OCw2ICsxNTEsOSBAQAogCURFRklORV9XQUlUKHdhaXQpOwogCXdhaXQuZnVuYyA9IGJ0cmZzX3dha2VfZnVuY3Rpb247CiAKKwlpZiAoIWJ0cmZzX3NwaW5fb25fYmxvY2soZWIpKQorCQlnb3RvIHNsZWVwOworCiAJd2hpbGUoMSkgewogCQlzcGluX25lc3RlZChlYik7CiAKQEAgLTE2NSw5ICsxNzEsMTAgQEAKIAkJICogc3BpbiBmb3IgYSBiaXQsIGFuZCBpZiB0aGUgYmxvY2tpbmcgZmxhZyBnb2VzIGF3YXksCiAJCSAqIGxvb3AgYXJvdW5kCiAJCSAqLworCQljcHVfcmVsYXgoKTsKIAkJaWYgKGJ0cmZzX3NwaW5fb25fYmxvY2soZWIpKQogCQkJY29udGludWU7Ci0KK3NsZWVwOgogCQlwcmVwYXJlX3RvX3dhaXRfZXhjbHVzaXZlKCZlYi0+bG9ja193cSwgJndhaXQsCiAJCQkJCSAgVEFTS19VTklOVEVSUlVQVElCTEUpOwogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuYyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCmluZGV4IDc3YzI0MTEuLjUzYzg3YjEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCisrKyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jCkBAIC0zMTAsNiArMzEwLDE2IEBACiAKIAlzcGluX2xvY2soJkJUUkZTX0koaW5vZGUpLT5yb290LT5mc19pbmZvLT5vcmRlcmVkX2V4dGVudF9sb2NrKTsKIAlsaXN0X2RlbF9pbml0KCZlbnRyeS0+cm9vdF9leHRlbnRfbGlzdCk7CisKKwkvKgorCSAqIHdlIGhhdmUgbm8gbW9yZSBvcmRlcmVkIGV4dGVudHMgZm9yIHRoaXMgaW5vZGUgYW5kCisJICogbm8gZGlydHkgcGFnZXMuICBXZSBjYW4gc2FmZWx5IHJlbW92ZSBpdCBmcm9tIHRoZQorCSAqIGxpc3Qgb2Ygb3JkZXJlZCBleHRlbnRzCisJICovCisJaWYgKFJCX0VNUFRZX1JPT1QoJnRyZWUtPnRyZWUpICYmCisJICAgICFtYXBwaW5nX3RhZ2dlZChpbm9kZS0+aV9tYXBwaW5nLCBQQUdFQ0FDSEVfVEFHX0RJUlRZKSkgeworCQlsaXN0X2RlbF9pbml0KCZCVFJGU19JKGlub2RlKS0+b3JkZXJlZF9vcGVyYXRpb25zKTsKKwl9CiAJc3Bpbl91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5yb290LT5mc19pbmZvLT5vcmRlcmVkX2V4dGVudF9sb2NrKTsKIAogCW11dGV4X3VubG9jaygmdHJlZS0+bXV0ZXgpOwpAQCAtMzcwLDYgKzM4MCw2OCBAQAogfQogCiAvKgorICogdGhpcyBpcyB1c2VkIGR1cmluZyB0cmFuc2FjdGlvbiBjb21taXQgdG8gd3JpdGUgYWxsIHRoZSBpbm9kZXMKKyAqIGFkZGVkIHRvIHRoZSBvcmRlcmVkIG9wZXJhdGlvbiBsaXN0LiAgVGhlc2UgZmlsZXMgbXVzdCBiZSBmdWxseSBvbgorICogZGlzayBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdHMuCisgKgorICogd2UgaGF2ZSB0d28gbW9kZXMgaGVyZSwgb25lIGlzIHRvIGp1c3Qgc3RhcnQgdGhlIElPIHZpYSBmaWxlbWFwX2ZsdXNoCisgKiBhbmQgdGhlIG90aGVyIGlzIHRvIHdhaXQgZm9yIGFsbCB0aGUgaW8uICBXaGVuIHdlIHdhaXQsIHdlIGhhdmUgYW4KKyAqIGV4dHJhIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgb3JkZXJlZCBvcGVyYXRpb24gbGlzdCByZWFsbHkgaXMgZW1wdHkKKyAqIGJlZm9yZSB3ZSByZXR1cm4KKyAqLworaW50IGJ0cmZzX3J1bl9vcmRlcmVkX29wZXJhdGlvbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCB3YWl0KQoreworCXN0cnVjdCBidHJmc19pbm9kZSAqYnRyZnNfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNwbGljZTsKKworCUlOSVRfTElTVF9IRUFEKCZzcGxpY2UpOworCisJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9vcGVyYXRpb25zX211dGV4KTsKKwlzcGluX2xvY2soJnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfZXh0ZW50X2xvY2spOworYWdhaW46CisJbGlzdF9zcGxpY2VfaW5pdCgmcm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9vcGVyYXRpb25zLCAmc3BsaWNlKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmc3BsaWNlKSkgeworCQlidHJmc19pbm9kZSA9IGxpc3RfZW50cnkoc3BsaWNlLm5leHQsIHN0cnVjdCBidHJmc19pbm9kZSwKKwkJCQkgICBvcmRlcmVkX29wZXJhdGlvbnMpOworCisJCWlub2RlID0gJmJ0cmZzX2lub2RlLT52ZnNfaW5vZGU7CisKKwkJbGlzdF9kZWxfaW5pdCgmYnRyZnNfaW5vZGUtPm9yZGVyZWRfb3BlcmF0aW9ucyk7CisKKwkJLyoKKwkJICogdGhlIGlub2RlIG1heSBiZSBnZXR0aW5nIGZyZWVkIChpbiBzeXNfdW5saW5rIHBhdGgpLgorCQkgKi8KKwkJaW5vZGUgPSBpZ3JhYihpbm9kZSk7CisKKwkJaWYgKCF3YWl0ICYmIGlub2RlKSB7CisJCQlsaXN0X2FkZF90YWlsKCZCVFJGU19JKGlub2RlKS0+b3JkZXJlZF9vcGVyYXRpb25zLAorCQkJICAgICAgJnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfb3BlcmF0aW9ucyk7CisJCX0KKwkJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfZXh0ZW50X2xvY2spOworCisJCWlmIChpbm9kZSkgeworCQkJaWYgKHdhaXQpCisJCQkJYnRyZnNfd2FpdF9vcmRlcmVkX3JhbmdlKGlub2RlLCAwLCAodTY0KS0xKTsKKwkJCWVsc2UKKwkJCQlmaWxlbWFwX2ZsdXNoKGlub2RlLT5pX21hcHBpbmcpOworCQkJaXB1dChpbm9kZSk7CisJCX0KKworCQljb25kX3Jlc2NoZWQoKTsKKwkJc3Bpbl9sb2NrKCZyb290LT5mc19pbmZvLT5vcmRlcmVkX2V4dGVudF9sb2NrKTsKKwl9CisJaWYgKHdhaXQgJiYgIWxpc3RfZW1wdHkoJnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfb3BlcmF0aW9ucykpCisJCWdvdG8gYWdhaW47CisKKwlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9leHRlbnRfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT5vcmRlcmVkX29wZXJhdGlvbnNfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBVc2VkIHRvIHN0YXJ0IElPIG9yIHdhaXQgZm9yIGEgZ2l2ZW4gb3JkZXJlZCBleHRlbnQgdG8gZmluaXNoLgogICoKICAqIElmIHdhaXQgaXMgb25lLCB0aGlzIGVmZmVjdGl2ZWx5IHdhaXRzIG9uIHBhZ2Ugd3JpdGViYWNrIGZvciBhbGwgdGhlIHBhZ2VzCkBAIC03MjYsMyArNzk4LDQ5IEBACiAKIAlyZXR1cm4gcmV0OwogfQorCisvKgorICogYWRkIGEgZ2l2ZW4gaW5vZGUgdG8gdGhlIGxpc3Qgb2YgaW5vZGVzIHRoYXQgbXVzdCBiZSBmdWxseSBvbgorICogZGlzayBiZWZvcmUgYSB0cmFuc2FjdGlvbiBjb21taXQgZmluaXNoZXMuCisgKgorICogVGhpcyBiYXNpY2FsbHkgZ2l2ZXMgdXMgdGhlIGV4dDMgc3R5bGUgZGF0YT1vcmRlcmVkIG1vZGUsIGFuZCBpdCBpcyBtb3N0bHkKKyAqIHVzZWQgdG8gbWFrZSBzdXJlIHJlbmFtZWQgZmlsZXMgYXJlIGZ1bGx5IG9uIGRpc2suCisgKgorICogSXQgaXMgYSBub29wIGlmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGZ1bGx5IG9uIGRpc2suCisgKgorICogSWYgdHJhbnMgaXMgbm90IG51bGwsIHdlJ2xsIGRvIGEgZnJpZW5kbHkgY2hlY2sgZm9yIGEgdHJhbnNhY3Rpb24gdGhhdAorICogaXMgYWxyZWFkeSBmbHVzaGluZyB0aGluZ3MgYW5kIGZvcmNlIHRoZSBJTyBkb3duIG91cnNlbHZlcy4KKyAqLworaW50IGJ0cmZzX2FkZF9vcmRlcmVkX29wZXJhdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKKwkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXU2NCBsYXN0X21vZDsKKworCWxhc3RfbW9kID0gbWF4KEJUUkZTX0koaW5vZGUpLT5nZW5lcmF0aW9uLCBCVFJGU19JKGlub2RlKS0+bGFzdF90cmFucyk7CisKKwkvKgorCSAqIGlmIHRoaXMgZmlsZSBoYXNuJ3QgYmVlbiBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRyYW5zYWN0aW9uCisJICogY29tbWl0LCB3ZSBjYW4gc2FmZWx5IHJldHVybiB3aXRob3V0IGRvaW5nIGFueXRoaW5nCisJICovCisJaWYgKGxhc3RfbW9kIDwgcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19jb21taXR0ZWQpCisJCXJldHVybiAwOworCisJLyoKKwkgKiB0aGUgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBjb21taXR0aW5nLiAgSnVzdCBzdGFydCB0aGUgSU8gYW5kCisJICogZG9uJ3QgYm90aGVyIHdpdGggYWxsIG9mIHRoaXMgbGlzdCBub25zZW5zZQorCSAqLworCWlmICh0cmFucyAmJiByb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uLT5ibG9ja2VkKSB7CisJCWJ0cmZzX3dhaXRfb3JkZXJlZF9yYW5nZShpbm9kZSwgMCwgKHU2NCktMSk7CisJCXJldHVybiAwOworCX0KKworCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9leHRlbnRfbG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJkJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX29wZXJhdGlvbnMpKSB7CisJCWxpc3RfYWRkX3RhaWwoJkJUUkZTX0koaW5vZGUpLT5vcmRlcmVkX29wZXJhdGlvbnMsCisJCQkgICAgICAmcm9vdC0+ZnNfaW5mby0+b3JkZXJlZF9vcGVyYXRpb25zKTsKKwl9CisJc3Bpbl91bmxvY2soJnJvb3QtPmZzX2luZm8tPm9yZGVyZWRfZXh0ZW50X2xvY2spOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9mcy9idHJmcy9vcmRlcmVkLWRhdGEuaCBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oCmluZGV4IGFiNjZkNWUuLjNkMzFjODggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oCisrKyBiL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oCkBAIC0xNTUsNCArMTU1LDggQEAKIGludCBidHJmc19mZGF0YXdyaXRlX3JhbmdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3Qgc3RhcnQsCiAJCQkgICBsb2ZmX3QgZW5kLCBpbnQgc3luY19tb2RlKTsKIGludCBidHJmc193YWl0X29yZGVyZWRfZXh0ZW50cyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgaW50IG5vY293X29ubHkpOworaW50IGJ0cmZzX3J1bl9vcmRlcmVkX29wZXJhdGlvbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIGludCB3YWl0KTsKK2ludCBidHJmc19hZGRfb3JkZXJlZF9vcGVyYXRpb24oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJc3RydWN0IGlub2RlICppbm9kZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDE5YTRkYWYuLjk3NDRhZjkgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgpAQCAtNjYsNyArNjcsOCBAQAogZW51bSB7CiAJT3B0X2RlZ3JhZGVkLCBPcHRfc3Vidm9sLCBPcHRfZGV2aWNlLCBPcHRfbm9kYXRhc3VtLCBPcHRfbm9kYXRhY293LAogCU9wdF9tYXhfZXh0ZW50LCBPcHRfbWF4X2lubGluZSwgT3B0X2FsbG9jX3N0YXJ0LCBPcHRfbm9iYXJyaWVyLAotCU9wdF9zc2QsIE9wdF90aHJlYWRfcG9vbCwgT3B0X25vYWNsLCAgT3B0X2NvbXByZXNzLCBPcHRfZXJyLAorCU9wdF9zc2QsIE9wdF90aHJlYWRfcG9vbCwgT3B0X25vYWNsLCAgT3B0X2NvbXByZXNzLCBPcHRfbm90cmVlbG9nLAorCU9wdF9mbHVzaG9uY29tbWl0LCBPcHRfZXJyLAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtODMsNiArODUsOCBAQAogCXtPcHRfY29tcHJlc3MsICJjb21wcmVzcyJ9LAogCXtPcHRfc3NkLCAic3NkIn0sCiAJe09wdF9ub2FjbCwgIm5vYWNsIn0sCisJe09wdF9ub3RyZWVsb2csICJub3RyZWVsb2cifSwKKwl7T3B0X2ZsdXNob25jb21taXQsICJmbHVzaG9uY29tbWl0In0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIApAQCAtMjIyLDYgKzIyNiwxNCBAQAogCQljYXNlIE9wdF9ub2FjbDoKIAkJCXJvb3QtPmZzX2luZm8tPnNiLT5zX2ZsYWdzICY9IH5NU19QT1NJWEFDTDsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9ub3RyZWVsb2c6CisJCQlwcmludGsoS0VSTl9JTkZPICJidHJmczogZGlzYWJsaW5nIHRyZWUgbG9nXG4iKTsKKwkJCWJ0cmZzX3NldF9vcHQoaW5mby0+bW91bnRfb3B0LCBOT1RSRUVMT0cpOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2ZsdXNob25jb21taXQ6CisJCQlwcmludGsoS0VSTl9JTkZPICJidHJmczogdHVybmluZyBvbiBmbHVzaC1vbi1jb21taXRcbiIpOworCQkJYnRyZnNfc2V0X29wdChpbmZvLT5tb3VudF9vcHQsIEZMVVNIT05DT01NSVQpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtMzYzLDkgKzM3NSw4IEBACiBpbnQgYnRyZnNfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFuczsKLQlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdDsKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IGJ0cmZzX3NiKHNiKTsKIAlpbnQgcmV0OwotCXJvb3QgPSBidHJmc19zYihzYik7CiAKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiAwOwpAQCAtMzg1LDYgKzM5Niw0MSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYnRyZnNfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBzdHJ1Y3QgdmZzbW91bnQgKnZmcykKK3sKKwlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IGJ0cmZzX3NiKHZmcy0+bW50X3NiKTsKKwlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqaW5mbyA9IHJvb3QtPmZzX2luZm87CisKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgREVHUkFERUQpKQorCQlzZXFfcHV0cyhzZXEsICIsZGVncmFkZWQiKTsKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgTk9EQVRBU1VNKSkKKwkJc2VxX3B1dHMoc2VxLCAiLG5vZGF0YXN1bSIpOworCWlmIChidHJmc190ZXN0X29wdChyb290LCBOT0RBVEFDT1cpKQorCQlzZXFfcHV0cyhzZXEsICIsbm9kYXRhY293Iik7CisJaWYgKGJ0cmZzX3Rlc3Rfb3B0KHJvb3QsIE5PQkFSUklFUikpCisJCXNlcV9wdXRzKHNlcSwgIixub2JhcnJpZXIiKTsKKwlpZiAoaW5mby0+bWF4X2V4dGVudCAhPSAodTY0KS0xKQorCQlzZXFfcHJpbnRmKHNlcSwgIixtYXhfZXh0ZW50PSVsbHUiLCBpbmZvLT5tYXhfZXh0ZW50KTsKKwlpZiAoaW5mby0+bWF4X2lubGluZSAhPSA4MTkyICogMTAyNCkKKwkJc2VxX3ByaW50ZihzZXEsICIsbWF4X2lubGluZT0lbGx1IiwgaW5mby0+bWF4X2lubGluZSk7CisJaWYgKGluZm8tPmFsbG9jX3N0YXJ0ICE9IDApCisJCXNlcV9wcmludGYoc2VxLCAiLGFsbG9jX3N0YXJ0PSVsbHUiLCBpbmZvLT5hbGxvY19zdGFydCk7CisJaWYgKGluZm8tPnRocmVhZF9wb29sX3NpemUgIT0gIG1pbl90KHVuc2lnbmVkIGxvbmcsCisJCQkJCSAgICAgbnVtX29ubGluZV9jcHVzKCkgKyAyLCA4KSkKKwkJc2VxX3ByaW50ZihzZXEsICIsdGhyZWFkX3Bvb2w9JWQiLCBpbmZvLT50aHJlYWRfcG9vbF9zaXplKTsKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgQ09NUFJFU1MpKQorCQlzZXFfcHV0cyhzZXEsICIsY29tcHJlc3MiKTsKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgU1NEKSkKKwkJc2VxX3B1dHMoc2VxLCAiLHNzZCIpOworCWlmIChidHJmc190ZXN0X29wdChyb290LCBOT1RSRUVMT0cpKQorCQlzZXFfcHV0cyhzZXEsICIsbm8tdHJlZWxvZyIpOworCWlmIChidHJmc190ZXN0X29wdChyb290LCBGTFVTSE9OQ09NTUlUKSkKKwkJc2VxX3B1dHMoc2VxLCAiLGZsdXNoLW9uLWNvbW1pdCIpOworCWlmICghKHJvb3QtPmZzX2luZm8tPnNiLT5zX2ZsYWdzICYgTVNfUE9TSVhBQ0wpKQorCQlzZXFfcHV0cyhzZXEsICIsbm9hY2wiKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgYnRyZnNfd3JpdGVfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzYi0+c19kaXJ0ID0gMDsKQEAgLTYzMCw3ICs2NzYsNyBAQAogCS5wdXRfc3VwZXIJPSBidHJmc19wdXRfc3VwZXIsCiAJLndyaXRlX3N1cGVyCT0gYnRyZnNfd3JpdGVfc3VwZXIsCiAJLnN5bmNfZnMJPSBidHJmc19zeW5jX2ZzLAotCS5zaG93X29wdGlvbnMJPSBnZW5lcmljX3Nob3dfb3B0aW9ucywKKwkuc2hvd19vcHRpb25zCT0gYnRyZnNfc2hvd19vcHRpb25zLAogCS53cml0ZV9pbm9kZQk9IGJ0cmZzX3dyaXRlX2lub2RlLAogCS5kaXJ0eV9pbm9kZQk9IGJ0cmZzX2RpcnR5X2lub2RlLAogCS5hbGxvY19pbm9kZQk9IGJ0cmZzX2FsbG9jX2lub2RlLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKaW5kZXggNDExMmQ1My4uMjg2OWIzMyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYworKysgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCkBAIC01Myw4ICs1Myw2IEBACiAJCQkJCSAgICAgR0ZQX05PRlMpOwogCQlCVUdfT04oIWN1cl90cmFucyk7CiAJCXJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24rKzsKLQkJcm9vdC0+ZnNfaW5mby0+bGFzdF9hbGxvYyA9IDA7Ci0JCXJvb3QtPmZzX2luZm8tPmxhc3RfZGF0YV9hbGxvYyA9IDA7CiAJCWN1cl90cmFucy0+bnVtX3dyaXRlcnMgPSAxOwogCQljdXJfdHJhbnMtPm51bV9qb2luZWQgPSAwOwogCQljdXJfdHJhbnMtPnRyYW5zaWQgPSByb290LT5mc19pbmZvLT5nZW5lcmF0aW9uOwpAQCAtNjUsNiArNjMsMTUgQEAKIAkJY3VyX3RyYW5zLT51c2VfY291bnQgPSAxOwogCQljdXJfdHJhbnMtPmNvbW1pdF9kb25lID0gMDsKIAkJY3VyX3RyYW5zLT5zdGFydF90aW1lID0gZ2V0X3NlY29uZHMoKTsKKworCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5yb290LnJiX25vZGUgPSBOVUxMOworCQljdXJfdHJhbnMtPmRlbGF5ZWRfcmVmcy5udW1fZW50cmllcyA9IDA7CisJCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLm51bV9oZWFkc19yZWFkeSA9IDA7CisJCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLm51bV9oZWFkcyA9IDA7CisJCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nID0gMDsKKwkJY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMucnVuX2RlbGF5ZWRfc3RhcnQgPSAwOworCQlzcGluX2xvY2tfaW5pdCgmY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMubG9jayk7CisKIAkJSU5JVF9MSVNUX0hFQUQoJmN1cl90cmFucy0+cGVuZGluZ19zbmFwc2hvdHMpOwogCQlsaXN0X2FkZF90YWlsKCZjdXJfdHJhbnMtPmxpc3QsICZyb290LT5mc19pbmZvLT50cmFuc19saXN0KTsKIAkJZXh0ZW50X2lvX3RyZWVfaW5pdCgmY3VyX3RyYW5zLT5kaXJ0eV9wYWdlcywKQEAgLTE4Miw2ICsxODksOCBAQAogCWgtPmJsb2NrX2dyb3VwID0gMDsKIAloLT5hbGxvY19leGNsdWRlX25yID0gMDsKIAloLT5hbGxvY19leGNsdWRlX3N0YXJ0ID0gMDsKKwloLT5kZWxheWVkX3JlZl91cGRhdGVzID0gMDsKKwogCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPnVzZV9jb3VudCsrOwogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCXJldHVybiBoOwpAQCAtMjcxLDcgKzI4MCw2IEBACiAJaWYgKCFyb290LT5mc19pbmZvLT5vcGVuX2lvY3RsX3RyYW5zKQogCQl3YWl0X2N1cnJlbnRfdHJhbnMocm9vdCk7CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7Ci0KIAl0aHJvdHRsZV9vbl9kcm9wcyhyb290KTsKIH0KIApAQCAtMjgwLDYgKzI4OCwyNyBAQAogewogCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqY3VyX3RyYW5zOwogCXN0cnVjdCBidHJmc19mc19pbmZvICppbmZvID0gcm9vdC0+ZnNfaW5mbzsKKwlpbnQgY291bnQgPSAwOworCisJd2hpbGUgKGNvdW50IDwgNCkgeworCQl1bnNpZ25lZCBsb25nIGN1ciA9IHRyYW5zLT5kZWxheWVkX3JlZl91cGRhdGVzOworCQl0cmFucy0+ZGVsYXllZF9yZWZfdXBkYXRlcyA9IDA7CisJCWlmIChjdXIgJiYKKwkJICAgIHRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzLm51bV9oZWFkc19yZWFkeSA+IDY0KSB7CisJCQl0cmFucy0+ZGVsYXllZF9yZWZfdXBkYXRlcyA9IDA7CisKKwkJCS8qCisJCQkgKiBkbyBhIGZ1bGwgZmx1c2ggaWYgdGhlIHRyYW5zYWN0aW9uIGlzIHRyeWluZworCQkJICogdG8gY2xvc2UKKwkJCSAqLworCQkJaWYgKHRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nKQorCQkJCWN1ciA9IDA7CisJCQlidHJmc19ydW5fZGVsYXllZF9yZWZzKHRyYW5zLCByb290LCBjdXIpOworCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwkJY291bnQrKzsKKwl9CiAKIAltdXRleF9sb2NrKCZpbmZvLT50cmFuc19tdXRleCk7CiAJY3VyX3RyYW5zID0gaW5mby0+cnVubmluZ190cmFuc2FjdGlvbjsKQEAgLTQyNCw5ICs0NTMsMTAgQEAKIAl1NjQgb2xkX3Jvb3RfYnl0ZW5yOwogCXN0cnVjdCBidHJmc19yb290ICp0cmVlX3Jvb3QgPSByb290LT5mc19pbmZvLT50cmVlX3Jvb3Q7CiAKLQlidHJmc19leHRlbnRfcG9zdF9vcCh0cmFucywgcm9vdCk7CiAJYnRyZnNfd3JpdGVfZGlydHlfYmxvY2tfZ3JvdXBzKHRyYW5zLCByb290KTsKLQlidHJmc19leHRlbnRfcG9zdF9vcCh0cmFucywgcm9vdCk7CisKKwlyZXQgPSBidHJmc19ydW5fZGVsYXllZF9yZWZzKHRyYW5zLCByb290LCAodW5zaWduZWQgbG9uZyktMSk7CisJQlVHX09OKHJldCk7CiAKIAl3aGlsZSAoMSkgewogCQlvbGRfcm9vdF9ieXRlbnIgPSBidHJmc19yb290X2J5dGVucigmcm9vdC0+cm9vdF9pdGVtKTsKQEAgLTQzOCwxNCArNDY4LDE0IEBACiAJCQkJICAgICBidHJmc19oZWFkZXJfbGV2ZWwocm9vdC0+bm9kZSkpOwogCQlidHJmc19zZXRfcm9vdF9nZW5lcmF0aW9uKCZyb290LT5yb290X2l0ZW0sIHRyYW5zLT50cmFuc2lkKTsKIAotCQlidHJmc19leHRlbnRfcG9zdF9vcCh0cmFucywgcm9vdCk7Ci0KIAkJcmV0ID0gYnRyZnNfdXBkYXRlX3Jvb3QodHJhbnMsIHRyZWVfcm9vdCwKIAkJCQkJJnJvb3QtPnJvb3Rfa2V5LAogCQkJCQkmcm9vdC0+cm9vdF9pdGVtKTsKIAkJQlVHX09OKHJldCk7CiAJCWJ0cmZzX3dyaXRlX2RpcnR5X2Jsb2NrX2dyb3Vwcyh0cmFucywgcm9vdCk7Ci0JCWJ0cmZzX2V4dGVudF9wb3N0X29wKHRyYW5zLCByb290KTsKKworCQlyZXQgPSBidHJmc19ydW5fZGVsYXllZF9yZWZzKHRyYW5zLCByb290LCAodW5zaWduZWQgbG9uZyktMSk7CisJCUJVR19PTihyZXQpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQ1OSwxNSArNDg5LDE4IEBACiAJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8gPSByb290LT5mc19pbmZvOwogCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQ7CiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmViOworCWludCByZXQ7CiAKLQlidHJmc19leHRlbnRfcG9zdF9vcCh0cmFucywgZnNfaW5mby0+dHJlZV9yb290KTsKKwlyZXQgPSBidHJmc19ydW5fZGVsYXllZF9yZWZzKHRyYW5zLCByb290LCAodW5zaWduZWQgbG9uZyktMSk7CisJQlVHX09OKHJldCk7CiAKIAllYiA9IGJ0cmZzX2xvY2tfcm9vdF9ub2RlKGZzX2luZm8tPnRyZWVfcm9vdCk7Ci0JYnRyZnNfY293X2Jsb2NrKHRyYW5zLCBmc19pbmZvLT50cmVlX3Jvb3QsIGViLCBOVUxMLCAwLCAmZWIsIDApOworCWJ0cmZzX2Nvd19ibG9jayh0cmFucywgZnNfaW5mby0+dHJlZV9yb290LCBlYiwgTlVMTCwgMCwgJmViKTsKIAlidHJmc190cmVlX3VubG9jayhlYik7CiAJZnJlZV9leHRlbnRfYnVmZmVyKGViKTsKIAotCWJ0cmZzX2V4dGVudF9wb3N0X29wKHRyYW5zLCBmc19pbmZvLT50cmVlX3Jvb3QpOworCXJldCA9IGJ0cmZzX3J1bl9kZWxheWVkX3JlZnModHJhbnMsIHJvb3QsICh1bnNpZ25lZCBsb25nKS0xKTsKKwlCVUdfT04ocmV0KTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmZnNfaW5mby0+ZGlydHlfY293b25seV9yb290cykpIHsKIAkJbmV4dCA9IGZzX2luZm8tPmRpcnR5X2Nvd29ubHlfcm9vdHMubmV4dDsKQEAgLTQ3NSw2ICs1MDgsOSBAQAogCQlyb290ID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgYnRyZnNfcm9vdCwgZGlydHlfbGlzdCk7CiAKIAkJdXBkYXRlX2Nvd29ubHlfcm9vdCh0cmFucywgcm9vdCk7CisKKwkJcmV0ID0gYnRyZnNfcnVuX2RlbGF5ZWRfcmVmcyh0cmFucywgcm9vdCwgKHVuc2lnbmVkIGxvbmcpLTEpOworCQlCVUdfT04ocmV0KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC02MzUsNiArNjcxLDMxIEBACiB9CiAKIC8qCisgKiB3aGVuIGRyb3BwaW5nIHNuYXBzaG90cywgd2UgZ2VuZXJhdGUgYSB0b24gb2YgZGVsYXllZCByZWZzLCBhbmQgaXQgbWFrZXMKKyAqIHNlbnNlIG5vdCB0byBqb2luIHRoZSB0cmFuc2FjdGlvbiB3aGlsZSBpdCBpcyB0cnlpbmcgdG8gZmx1c2ggdGhlIGN1cnJlbnQKKyAqIHF1ZXVlIG9mIGRlbGF5ZWQgcmVmcyBvdXQuCisgKgorICogVGhpcyBpcyB1c2VkIGJ5IHRoZSBkcm9wIHNuYXBzaG90IGNvZGUgb25seQorICovCitzdGF0aWMgbm9pbmxpbmUgaW50IHdhaXRfdHJhbnNhY3Rpb25fcHJlX2ZsdXNoKHN0cnVjdCBidHJmc19mc19pbmZvICppbmZvKQoreworCURFRklORV9XQUlUKHdhaXQpOworCisJbXV0ZXhfbG9jaygmaW5mby0+dHJhbnNfbXV0ZXgpOworCXdoaWxlIChpbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uICYmCisJICAgICAgIGluZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24tPmRlbGF5ZWRfcmVmcy5mbHVzaGluZykgeworCQlwcmVwYXJlX3RvX3dhaXQoJmluZm8tPnRyYW5zYWN0aW9uX3dhaXQsICZ3YWl0LAorCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJbXV0ZXhfdW5sb2NrKCZpbmZvLT50cmFuc19tdXRleCk7CisJCXNjaGVkdWxlKCk7CisJCW11dGV4X2xvY2soJmluZm8tPnRyYW5zX211dGV4KTsKKwkJZmluaXNoX3dhaXQoJmluZm8tPnRyYW5zYWN0aW9uX3dhaXQsICZ3YWl0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZpbmZvLT50cmFuc19tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCiAgKiBHaXZlbiBhIGxpc3Qgb2Ygcm9vdHMgdGhhdCBuZWVkIHRvIGJlIGRlbGV0ZWQsIGNhbGwgYnRyZnNfZHJvcF9zbmFwc2hvdCBvbgogICogYWxsIG9mIHRoZW0KICAqLwpAQCAtNjYxLDcgKzcyMiwyMiBAQAogCQlhdG9taWNfaW5jKCZyb290LT5mc19pbmZvLT50aHJvdHRsZXMpOwogCiAJCXdoaWxlICgxKSB7CisJCQkvKgorCQkJICogd2UgZG9uJ3Qgd2FudCB0byBqdW1wIGluIGFuZCBjcmVhdGUgYSBidW5jaCBvZgorCQkJICogZGVsYXllZCByZWZzIGlmIHRoZSB0cmFuc2FjdGlvbiBpcyBzdGFydGluZyB0byBjbG9zZQorCQkJICovCisJCQl3YWl0X3RyYW5zYWN0aW9uX3ByZV9mbHVzaCh0cmVlX3Jvb3QtPmZzX2luZm8pOwogCQkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbih0cmVlX3Jvb3QsIDEpOworCisJCQkvKgorCQkJICogd2UndmUgam9pbmVkIGEgdHJhbnNhY3Rpb24sIG1ha2Ugc3VyZSBpdCBpc24ndAorCQkJICogY2xvc2luZyByaWdodCBub3cKKwkJCSAqLworCQkJaWYgKHRyYW5zLT50cmFuc2FjdGlvbi0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nKSB7CisJCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCB0cmVlX3Jvb3QpOworCQkJCWNvbnRpbnVlOworCQkJfQorCiAJCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT5kcm9wX211dGV4KTsKIAkJCXJldCA9IGJ0cmZzX2Ryb3Bfc25hcHNob3QodHJhbnMsIGRpcnR5LT5yb290KTsKIAkJCWlmIChyZXQgIT0gLUVBR0FJTikKQEAgLTc2Niw3ICs4NDIsNyBAQAogCWJ0cmZzX3NldF9rZXlfdHlwZSgma2V5LCBCVFJGU19ST09UX0lURU1fS0VZKTsKIAogCW9sZCA9IGJ0cmZzX2xvY2tfcm9vdF9ub2RlKHJvb3QpOwotCWJ0cmZzX2Nvd19ibG9jayh0cmFucywgcm9vdCwgb2xkLCBOVUxMLCAwLCAmb2xkLCAwKTsKKwlidHJmc19jb3dfYmxvY2sodHJhbnMsIHJvb3QsIG9sZCwgTlVMTCwgMCwgJm9sZCk7CiAKIAlidHJmc19jb3B5X3Jvb3QodHJhbnMsIHJvb3QsIG9sZCwgJnRtcCwgb2JqZWN0aWQpOwogCWJ0cmZzX3RyZWVfdW5sb2NrKG9sZCk7CkBAIC04OTQsMTIgKzk3MCwzMiBAQAogCXN0cnVjdCBleHRlbnRfaW9fdHJlZSAqcGlubmVkX2NvcHk7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAJaW50IHJldDsKKwlpbnQgc2hvdWxkX2dyb3cgPSAwOworCXVuc2lnbmVkIGxvbmcgbm93ID0gZ2V0X3NlY29uZHMoKTsKKwlpbnQgZmx1c2hfb25fY29tbWl0ID0gYnRyZnNfdGVzdF9vcHQocm9vdCwgRkxVU0hPTkNPTU1JVCk7CiAKLQlJTklUX0xJU1RfSEVBRCgmZGlydHlfZnNfcm9vdHMpOworCWJ0cmZzX3J1bl9vcmRlcmVkX29wZXJhdGlvbnMocm9vdCwgMCk7CisKKwkvKiBtYWtlIGEgcGFzcyB0aHJvdWdoIGFsbCB0aGUgZGVsYXllZCByZWZzIHdlIGhhdmUgc28gZmFyCisJICogYW55IHJ1bm5pbmdzIHByb2NzIG1heSBhZGQgbW9yZSB3aGlsZSB3ZSBhcmUgaGVyZQorCSAqLworCXJldCA9IGJ0cmZzX3J1bl9kZWxheWVkX3JlZnModHJhbnMsIHJvb3QsIDApOworCUJVR19PTihyZXQpOworCisJY3VyX3RyYW5zID0gdHJhbnMtPnRyYW5zYWN0aW9uOworCS8qCisJICogc2V0IHRoZSBmbHVzaGluZyBmbGFnIHNvIHByb2NzIGluIHRoaXMgdHJhbnNhY3Rpb24gaGF2ZSB0bworCSAqIHN0YXJ0IHNlbmRpbmcgdGhlaXIgd29yayBkb3duLgorCSAqLworCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLmZsdXNoaW5nID0gMTsKKworCXJldCA9IGJ0cmZzX3J1bl9kZWxheWVkX3JlZnModHJhbnMsIHJvb3QsIDApOworCUJVR19PTihyZXQpOworCiAJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwotCWlmICh0cmFucy0+dHJhbnNhY3Rpb24tPmluX2NvbW1pdCkgewotCQljdXJfdHJhbnMgPSB0cmFucy0+dHJhbnNhY3Rpb247Ci0JCXRyYW5zLT50cmFuc2FjdGlvbi0+dXNlX2NvdW50Kys7CisJSU5JVF9MSVNUX0hFQUQoJmRpcnR5X2ZzX3Jvb3RzKTsKKwlpZiAoY3VyX3RyYW5zLT5pbl9jb21taXQpIHsKKwkJY3VyX3RyYW5zLT51c2VfY291bnQrKzsKIAkJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAKQEAgLTkyMiw3ICsxMDE4LDYgQEAKIAogCXRyYW5zLT50cmFuc2FjdGlvbi0+aW5fY29tbWl0ID0gMTsKIAl0cmFucy0+dHJhbnNhY3Rpb24tPmJsb2NrZWQgPSAxOwotCWN1cl90cmFucyA9IHRyYW5zLT50cmFuc2FjdGlvbjsKIAlpZiAoY3VyX3RyYW5zLT5saXN0LnByZXYgIT0gJnJvb3QtPmZzX2luZm8tPnRyYW5zX2xpc3QpIHsKIAkJcHJldl90cmFucyA9IGxpc3RfZW50cnkoY3VyX3RyYW5zLT5saXN0LnByZXYsCiAJCQkJCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiwgbGlzdCk7CkBAIC05MzcsNiArMTAzMiw5IEBACiAJCX0KIAl9CiAKKwlpZiAobm93IDwgY3VyX3RyYW5zLT5zdGFydF90aW1lIHx8IG5vdyAtIGN1cl90cmFucy0+c3RhcnRfdGltZSA8IDEpCisJCXNob3VsZF9ncm93ID0gMTsKKwogCWRvIHsKIAkJaW50IHNuYXBfcGVuZGluZyA9IDA7CiAJCWpvaW5lZCA9IGN1cl90cmFucy0+bnVtX2pvaW5lZDsKQEAgLTk0OSwyNiArMTA0Nyw0MiBAQAogCiAJCWlmIChjdXJfdHJhbnMtPm51bV93cml0ZXJzID4gMSkKIAkJCXRpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKLQkJZWxzZQorCQllbHNlIGlmIChzaG91bGRfZ3JvdykKIAkJCXRpbWVvdXQgPSAxOwogCiAJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCi0JCWlmIChzbmFwX3BlbmRpbmcpIHsKKwkJaWYgKGZsdXNoX29uX2NvbW1pdCB8fCBzbmFwX3BlbmRpbmcpIHsKKwkJCWlmIChmbHVzaF9vbl9jb21taXQpCisJCQkJYnRyZnNfc3RhcnRfZGVsYWxsb2NfaW5vZGVzKHJvb3QpOwogCQkJcmV0ID0gYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMSk7CiAJCQlCVUdfT04ocmV0KTsKIAkJfQogCi0JCXNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CisJCS8qCisJCSAqIHJlbmFtZSBkb24ndCB1c2UgYnRyZnNfam9pbl90cmFuc2FjdGlvbiwgc28sIG9uY2Ugd2UKKwkJICogc2V0IHRoZSB0cmFuc2FjdGlvbiB0byBibG9ja2VkIGFib3ZlLCB3ZSBhcmVuJ3QgZ29pbmcKKwkJICogdG8gZ2V0IGFueSBuZXcgb3JkZXJlZCBvcGVyYXRpb25zLiAgV2UgY2FuIHNhZmVseSBydW4KKwkJICogaXQgaGVyZSBhbmQgbm8gZm9yIHN1cmUgdGhhdCBub3RoaW5nIG5ldyB3aWxsIGJlIGFkZGVkCisJCSAqIHRvIHRoZSBsaXN0CisJCSAqLworCQlidHJmc19ydW5fb3JkZXJlZF9vcGVyYXRpb25zKHJvb3QsIDEpOworCisJCXNtcF9tYigpOworCQlpZiAoY3VyX3RyYW5zLT5udW1fd3JpdGVycyA+IDEgfHwgc2hvdWxkX2dyb3cpCisJCQlzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwogCiAJCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJZmluaXNoX3dhaXQoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQsICZ3YWl0KTsKIAl9IHdoaWxlIChjdXJfdHJhbnMtPm51bV93cml0ZXJzID4gMSB8fAotCQkgKGN1cl90cmFucy0+bnVtX2pvaW5lZCAhPSBqb2luZWQpKTsKKwkJIChzaG91bGRfZ3JvdyAmJiBjdXJfdHJhbnMtPm51bV9qb2luZWQgIT0gam9pbmVkKSk7CiAKIAlyZXQgPSBjcmVhdGVfcGVuZGluZ19zbmFwc2hvdHModHJhbnMsIHJvb3QtPmZzX2luZm8pOwogCUJVR19PTihyZXQpOwogCisJcmV0ID0gYnRyZnNfcnVuX2RlbGF5ZWRfcmVmcyh0cmFucywgcm9vdCwgKHVuc2lnbmVkIGxvbmcpLTEpOworCUJVR19PTihyZXQpOworCiAJV0FSTl9PTihjdXJfdHJhbnMgIT0gdHJhbnMtPnRyYW5zYWN0aW9uKTsKIAogCS8qIGJ0cmZzX2NvbW1pdF90cmVlX3Jvb3RzIGlzIHJlc3BvbnNpYmxlIGZvciBnZXR0aW5nIHRoZQpAQCAtMTAzMiw2ICsxMTQ2LDcgQEAKIAlidHJmc19jb3B5X3Bpbm5lZChyb290LCBwaW5uZWRfY29weSk7CiAKIAl0cmFucy0+dHJhbnNhY3Rpb24tPmJsb2NrZWQgPSAwOworCiAJd2FrZV91cCgmcm9vdC0+ZnNfaW5mby0+dHJhbnNhY3Rpb25fdGhyb3R0bGUpOwogCXdha2VfdXAoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQpOwogCkBAIC0xMDU4LDYgKzExNzMsNyBAQAogCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCWN1cl90cmFucy0+Y29tbWl0X2RvbmUgPSAxOworCiAJcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19jb21taXR0ZWQgPSBjdXJfdHJhbnMtPnRyYW5zaWQ7CiAJd2FrZV91cCgmY3VyX3RyYW5zLT5jb21taXRfd2FpdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmggYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCmluZGV4IGVhMjkyMTEuLjk0ZjViZGUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaApAQCAtMTksMTAgKzE5LDE2IEBACiAjaWZuZGVmIF9fQlRSRlNfVFJBTlNBQ1RJT05fXwogI2RlZmluZSBfX0JUUkZTX1RSQU5TQUNUSU9OX18KICNpbmNsdWRlICJidHJmc19pbm9kZS5oIgorI2luY2x1ZGUgImRlbGF5ZWQtcmVmLmgiCiAKIHN0cnVjdCBidHJmc190cmFuc2FjdGlvbiB7CiAJdTY0IHRyYW5zaWQ7CisJLyoKKwkgKiB0b3RhbCB3cml0ZXJzIGluIHRoaXMgdHJhbnNhY3Rpb24sIGl0IG11c3QgYmUgemVybyBiZWZvcmUgdGhlCisJICogdHJhbnNhY3Rpb24gY2FuIGVuZAorCSAqLwogCXVuc2lnbmVkIGxvbmcgbnVtX3dyaXRlcnM7CisKIAl1bnNpZ25lZCBsb25nIG51bV9qb2luZWQ7CiAJaW50IGluX2NvbW1pdDsKIAlpbnQgdXNlX2NvdW50OwpAQCAtMzQsNiArNDAsNyBAQAogCXdhaXRfcXVldWVfaGVhZF90IHdyaXRlcl93YWl0OwogCXdhaXRfcXVldWVfaGVhZF90IGNvbW1pdF93YWl0OwogCXN0cnVjdCBsaXN0X2hlYWQgcGVuZGluZ19zbmFwc2hvdHM7CisJc3RydWN0IGJ0cmZzX2RlbGF5ZWRfcmVmX3Jvb3QgZGVsYXllZF9yZWZzOwogfTsKIAogc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSB7CkBAIC00NCw2ICs1MSw3IEBACiAJdTY0IGJsb2NrX2dyb3VwOwogCXU2NCBhbGxvY19leGNsdWRlX3N0YXJ0OwogCXU2NCBhbGxvY19leGNsdWRlX25yOworCXVuc2lnbmVkIGxvbmcgZGVsYXllZF9yZWZfdXBkYXRlczsKIH07CiAKIHN0cnVjdCBidHJmc19wZW5kaW5nX3NuYXBzaG90IHsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtZGVmcmFnLmMgYi9mcy9idHJmcy90cmVlLWRlZnJhZy5jCmluZGV4IDk4ZDI1ZmEuLmIxMGVhY2QgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtZGVmcmFnLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1kZWZyYWcuYwpAQCAtMTI0LDggKzEyNCw2IEBACiAJfQogCiAJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwotCWlmIChpc19leHRlbnQpCi0JCWJ0cmZzX2V4dGVudF9wb3N0X29wKHRyYW5zLCByb290KTsKIG91dDoKIAlpZiAocGF0aCkKIAkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuYyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKaW5kZXggOWM0NjJmYi4uMjVmMjBlYSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuYworKysgYi9mcy9idHJmcy90cmVlLWxvZy5jCkBAIC0zNSw2ICszNSw0OSBAQAogI2RlZmluZSBMT0dfSU5PREVfRVhJU1RTIDEKIAogLyoKKyAqIGRpcmVjdG9yeSB0cm91YmxlIGNhc2VzCisgKgorICogMSkgb24gcmVuYW1lIG9yIHVubGluaywgaWYgdGhlIGlub2RlIGJlaW5nIHVubGlua2VkIGlzbid0IGluIHRoZSBmc3luYworICogbG9nLCB3ZSBtdXN0IGZvcmNlIGEgZnVsbCBjb21taXQgYmVmb3JlIGRvaW5nIGFuIGZzeW5jIG9mIHRoZSBkaXJlY3RvcnkKKyAqIHdoZXJlIHRoZSB1bmxpbmsgd2FzIGRvbmUuCisgKiAtLS0+IHJlY29yZCB0cmFuc2lkIG9mIGxhc3QgdW5saW5rL3JlbmFtZSBwZXIgZGlyZWN0b3J5CisgKgorICogbWtkaXIgZm9vL3NvbWVfZGlyCisgKiBub3JtYWwgY29tbWl0CisgKiByZW5hbWUgZm9vL3NvbWVfZGlyIGZvbzIvc29tZV9kaXIKKyAqIG1rZGlyIGZvby9zb21lX2RpcgorICogZnN5bmMgZm9vL3NvbWVfZGlyL3NvbWVfZmlsZQorICoKKyAqIFRoZSBmc3luYyBhYm92ZSB3aWxsIHVubGluayB0aGUgb3JpZ2luYWwgc29tZV9kaXIgd2l0aG91dCByZWNvcmRpbmcKKyAqIGl0IGluIGl0cyBuZXcgbG9jYXRpb24gKGZvbzIpLiAgQWZ0ZXIgYSBjcmFzaCwgc29tZV9kaXIgd2lsbCBiZSBnb25lCisgKiB1bmxlc3MgdGhlIGZzeW5jIG9mIHNvbWVfZmlsZSBmb3JjZXMgYSBmdWxsIGNvbW1pdAorICoKKyAqIDIpIHdlIG11c3QgbG9nIGFueSBuZXcgbmFtZXMgZm9yIGFueSBmaWxlIG9yIGRpciB0aGF0IGlzIGluIHRoZSBmc3luYworICogbG9nLiAtLS0+IGNoZWNrIGlub2RlIHdoaWxlIHJlbmFtaW5nL2xpbmtpbmcuCisgKgorICogMmEpIHdlIG11c3QgbG9nIGFueSBuZXcgbmFtZXMgZm9yIGFueSBmaWxlIG9yIGRpciBkdXJpbmcgcmVuYW1lCisgKiB3aGVuIHRoZSBkaXJlY3RvcnkgdGhleSBhcmUgYmVpbmcgcmVtb3ZlZCBmcm9tIHdhcyBsb2dnZWQuCisgKiAtLS0+IGNoZWNrIGlub2RlIGFuZCBvbGQgcGFyZW50IGRpciBkdXJpbmcgcmVuYW1lCisgKgorICogIDJhIGlzIGFjdHVhbGx5IHRoZSBtb3JlIGltcG9ydGFudCB2YXJpYW50LiAgV2l0aCB0aGUgZXh0cmEgbG9nZ2luZworICogIGEgY3Jhc2ggbWlnaHQgdW5saW5rIHRoZSBvbGQgbmFtZSB3aXRob3V0IHJlY3JlYXRpbmcgdGhlIG5ldyBvbmUKKyAqCisgKiAzKSBhZnRlciBhIGNyYXNoLCB3ZSBtdXN0IGdvIHRocm91Z2ggYW55IGRpcmVjdG9yaWVzIHdpdGggYSBsaW5rIGNvdW50CisgKiBvZiB6ZXJvIGFuZCByZWRvIHRoZSBybSAtcmYKKyAqCisgKiBta2RpciBmMS9mb28KKyAqIG5vcm1hbCBjb21taXQKKyAqIHJtIC1yZiBmMS9mb28KKyAqIGZzeW5jKGYxKQorICoKKyAqIFRoZSBkaXJlY3RvcnkgZjEgd2FzIGZ1bGx5IHJlbW92ZWQgZnJvbSB0aGUgRlMsIGJ1dCBmc3luYyB3YXMgbmV2ZXIKKyAqIGNhbGxlZCBvbiBmMSwgb25seSBpdHMgcGFyZW50IGRpci4gIEFmdGVyIGEgY3Jhc2ggdGhlIHJtIC1yZiBtdXN0CisgKiBiZSByZXBsYXllZC4gIFRoaXMgbXVzdCBiZSBhYmxlIHRvIHJlY3Vyc2UgZG93biB0aGUgZW50aXJlCisgKiBkaXJlY3RvcnkgdHJlZS4gIFRoZSBpbm9kZSBsaW5rIGNvdW50IGZpeHVwIGNvZGUgdGFrZXMgY2FyZSBvZiB0aGUKKyAqIHVnbHkgZGV0YWlscy4KKyAqLworCisvKgogICogc3RhZ2VzIGZvciB0aGUgdHJlZSB3YWxraW5nLiAgVGhlIGZpcnN0CiAgKiBzdGFnZSAoMCkgaXMgdG8gb25seSBwaW4gZG93biB0aGUgYmxvY2tzIHdlIGZpbmQKICAqIHRoZSBzZWNvbmQgc3RhZ2UgKDEpIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgaW5vZGVzCkBAIC00NywxMiArOTAsMTcgQEAKICNkZWZpbmUgTE9HX1dBTEtfUkVQTEFZX0lOT0RFUyAxCiAjZGVmaW5lIExPR19XQUxLX1JFUExBWV9BTEwgMgogCi1zdGF0aWMgaW50IF9fYnRyZnNfbG9nX2lub2RlKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorc3RhdGljIGludCBidHJmc19sb2dfaW5vZGUoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgICBpbnQgaW5vZGVfb25seSk7CiBzdGF0aWMgaW50IGxpbmtfdG9fZml4dXBfZGlyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKIAkJCSAgICAgc3RydWN0IGJ0cmZzX3BhdGggKnBhdGgsIHU2NCBvYmplY3RpZCk7CitzdGF0aWMgbm9pbmxpbmUgaW50IHJlcGxheV9kaXJfZGVsZXRlcyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKKwkJCQkgICAgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCisJCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpsb2csCisJCQkJICAgICAgIHN0cnVjdCBidHJmc19wYXRoICpwYXRoLAorCQkJCSAgICAgICB1NjQgZGlyaWQsIGludCBkZWxfYWxsKTsKIAogLyoKICAqIHRyZWUgbG9nZ2luZyBpcyBhIHNwZWNpYWwgd3JpdGUgYWhlYWQgbG9nIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQKQEAgLTEzMywxMCArMTgxLDI1IEBACiB9CiAKIC8qCisgKiBUaGlzIGVpdGhlciBtYWtlcyB0aGUgY3VycmVudCBydW5uaW5nIGxvZyB0cmFuc2FjdGlvbiB3YWl0CisgKiB1bnRpbCB5b3UgY2FsbCBidHJmc19lbmRfbG9nX3RyYW5zKCkgb3IgaXQgbWFrZXMgYW55IGZ1dHVyZQorICogbG9nIHRyYW5zYWN0aW9ucyB3YWl0IHVudGlsIHlvdSBjYWxsIGJ0cmZzX2VuZF9sb2dfdHJhbnMoKQorICovCitpbnQgYnRyZnNfcGluX2xvZ190cmFucyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKK3sKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKworCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CisJYXRvbWljX2luYygmcm9vdC0+bG9nX3dyaXRlcnMpOworCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogaW5kaWNhdGUgd2UncmUgZG9uZSBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbG9nIHRyZWUKICAqIGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIHRvIGRvIGEgc3luYwogICovCi1zdGF0aWMgaW50IGVuZF9sb2dfdHJhbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCitpbnQgYnRyZnNfZW5kX2xvZ190cmFucyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcm9vdC0+bG9nX3dyaXRlcnMpKSB7CiAJCXNtcF9tYigpOwpAQCAtMTk5LDEyICsyNjIsOSBAQAogCQkJICAgICAgc3RydWN0IGV4dGVudF9idWZmZXIgKmViLAogCQkJICAgICAgc3RydWN0IHdhbGtfY29udHJvbCAqd2MsIHU2NCBnZW4pCiB7Ci0JaWYgKHdjLT5waW4pIHsKLQkJbXV0ZXhfbG9jaygmbG9nLT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOworCWlmICh3Yy0+cGluKQogCQlidHJmc191cGRhdGVfcGlubmVkX2V4dGVudHMobG9nLT5mc19pbmZvLT5leHRlbnRfcm9vdCwKIAkJCQkJICAgIGViLT5zdGFydCwgZWItPmxlbiwgMSk7Ci0JCW11dGV4X3VubG9jaygmbG9nLT5mc19pbmZvLT5waW5uZWRfbXV0ZXgpOwotCX0KIAogCWlmIChidHJmc19idWZmZXJfdXB0b2RhdGUoZWIsIGdlbikpIHsKIAkJaWYgKHdjLT53cml0ZSkKQEAgLTYwMyw2ICs2NjMsNyBAQAogCiAJcmV0ID0gbGlua190b19maXh1cF9kaXIodHJhbnMsIHJvb3QsIHBhdGgsIGxvY2F0aW9uLm9iamVjdGlkKTsKIAlCVUdfT04ocmV0KTsKKwogCXJldCA9IGJ0cmZzX3VubGlua19pbm9kZSh0cmFucywgcm9vdCwgZGlyLCBpbm9kZSwgbmFtZSwgbmFtZV9sZW4pOwogCUJVR19PTihyZXQpOwogCWtmcmVlKG5hbWUpOwpAQCAtODA0LDYgKzg2NSw3IEBACiAJCQkJCSAgICB2aWN0aW1fbmFtZV9sZW4pKSB7CiAJCQkJYnRyZnNfaW5jX25saW5rKGlub2RlKTsKIAkJCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CisKIAkJCQlyZXQgPSBidHJmc191bmxpbmtfaW5vZGUodHJhbnMsIHJvb3QsIGRpciwKIAkJCQkJCQkgaW5vZGUsIHZpY3RpbV9uYW1lLAogCQkJCQkJCSB2aWN0aW1fbmFtZV9sZW4pOwpAQCAtOTIyLDEzICs5ODQsMjAgQEAKIAkJa2V5Lm9mZnNldC0tOwogCQlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CiAJfQotCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwlidHJmc19yZWxlYXNlX3BhdGgocm9vdCwgcGF0aCk7CiAJaWYgKG5saW5rICE9IGlub2RlLT5pX25saW5rKSB7CiAJCWlub2RlLT5pX25saW5rID0gbmxpbms7CiAJCWJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwogCX0KIAlCVFJGU19JKGlub2RlKS0+aW5kZXhfY250ID0gKHU2NCktMTsKIAorCWlmIChpbm9kZS0+aV9ubGluayA9PSAwICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJcmV0ID0gcmVwbGF5X2Rpcl9kZWxldGVzKHRyYW5zLCByb290LCBOVUxMLCBwYXRoLAorCQkJCQkgaW5vZGUtPmlfaW5vLCAxKTsKKwkJQlVHX09OKHJldCk7CisJfQorCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwogCXJldHVybiAwOwogfQogCkBAIC05NzEsOSArMTA0MCwxMiBAQAogCiAJCWlwdXQoaW5vZGUpOwogCi0JCWlmIChrZXkub2Zmc2V0ID09IDApCi0JCQlicmVhazsKLQkJa2V5Lm9mZnNldC0tOworCQkvKgorCQkgKiBmaXh1cCBvbiBhIGRpcmVjdG9yeSBtYXkgY3JlYXRlIG5ldyBlbnRyaWVzLAorCQkgKiBtYWtlIHN1cmUgd2UgYWx3YXlzIGxvb2sgZm9yIHRoZSBoaWdoc2V0IHBvc3NpYmxlCisJCSAqIG9mZnNldAorCQkgKi8KKwkJa2V5Lm9mZnNldCA9ICh1NjQpLTE7CiAJfQogCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKIAlyZXR1cm4gMDsKQEAgLTExNTAsOCArMTIyMiw3IEBACiAJcmV0ID0gaW5zZXJ0X29uZV9uYW1lKHRyYW5zLCByb290LCBwYXRoLCBrZXktPm9iamVjdGlkLCBrZXktPm9mZnNldCwKIAkJCSAgICAgIG5hbWUsIG5hbWVfbGVuLCBsb2dfdHlwZSwgJmxvZ19rZXkpOwogCi0JaWYgKHJldCAmJiByZXQgIT0gLUVOT0VOVCkKLQkJQlVHKCk7CisJQlVHX09OKHJldCAmJiByZXQgIT0gLUVOT0VOVCk7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTEzMTMsMTEgKzEzODQsMTEgQEAKIAkJcmVhZF9leHRlbnRfYnVmZmVyKGViLCBuYW1lLCAodW5zaWduZWQgbG9uZykoZGkgKyAxKSwKIAkJCQkgIG5hbWVfbGVuKTsKIAkJbG9nX2RpID0gTlVMTDsKLQkJaWYgKGRpcl9rZXktPnR5cGUgPT0gQlRSRlNfRElSX0lURU1fS0VZKSB7CisJCWlmIChsb2cgJiYgZGlyX2tleS0+dHlwZSA9PSBCVFJGU19ESVJfSVRFTV9LRVkpIHsKIAkJCWxvZ19kaSA9IGJ0cmZzX2xvb2t1cF9kaXJfaXRlbSh0cmFucywgbG9nLCBsb2dfcGF0aCwKIAkJCQkJCSAgICAgICBkaXJfa2V5LT5vYmplY3RpZCwKIAkJCQkJCSAgICAgICBuYW1lLCBuYW1lX2xlbiwgMCk7Ci0JCX0gZWxzZSBpZiAoZGlyX2tleS0+dHlwZSA9PSBCVFJGU19ESVJfSU5ERVhfS0VZKSB7CisJCX0gZWxzZSBpZiAobG9nICYmIGRpcl9rZXktPnR5cGUgPT0gQlRSRlNfRElSX0lOREVYX0tFWSkgewogCQkJbG9nX2RpID0gYnRyZnNfbG9va3VwX2Rpcl9pbmRleF9pdGVtKHRyYW5zLCBsb2csCiAJCQkJCQkgICAgIGxvZ19wYXRoLAogCQkJCQkJICAgICBkaXJfa2V5LT5vYmplY3RpZCwKQEAgLTEzNzgsNyArMTQ0OSw3IEBACiAJCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqbG9nLAogCQkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aCwKLQkJCQkgICAgICAgdTY0IGRpcmlkKQorCQkJCSAgICAgICB1NjQgZGlyaWQsIGludCBkZWxfYWxsKQogewogCXU2NCByYW5nZV9zdGFydDsKIAl1NjQgcmFuZ2VfZW5kOwpAQCAtMTQwOCwxMCArMTQ3OSwxNCBAQAogCXJhbmdlX3N0YXJ0ID0gMDsKIAlyYW5nZV9lbmQgPSAwOwogCXdoaWxlICgxKSB7Ci0JCXJldCA9IGZpbmRfZGlyX3JhbmdlKGxvZywgcGF0aCwgZGlyaWQsIGtleV90eXBlLAotCQkJCSAgICAgJnJhbmdlX3N0YXJ0LCAmcmFuZ2VfZW5kKTsKLQkJaWYgKHJldCAhPSAwKQotCQkJYnJlYWs7CisJCWlmIChkZWxfYWxsKQorCQkJcmFuZ2VfZW5kID0gKHU2NCktMTsKKwkJZWxzZSB7CisJCQlyZXQgPSBmaW5kX2Rpcl9yYW5nZShsb2csIHBhdGgsIGRpcmlkLCBrZXlfdHlwZSwKKwkJCQkJICAgICAmcmFuZ2Vfc3RhcnQsICZyYW5nZV9lbmQpOworCQkJaWYgKHJldCAhPSAwKQorCQkJCWJyZWFrOworCQl9CiAKIAkJZGlyX2tleS5vZmZzZXQgPSByYW5nZV9zdGFydDsKIAkJd2hpbGUgKDEpIHsKQEAgLTE0MzcsNyArMTUxMiw4IEBACiAJCQkJYnJlYWs7CiAKIAkJCXJldCA9IGNoZWNrX2l0ZW1faW5fbG9nKHRyYW5zLCByb290LCBsb2csIHBhdGgsCi0JCQkJCQlsb2dfcGF0aCwgZGlyLCAmZm91bmRfa2V5KTsKKwkJCQkJCWxvZ19wYXRoLCBkaXIsCisJCQkJCQkmZm91bmRfa2V5KTsKIAkJCUJVR19PTihyZXQpOwogCQkJaWYgKGZvdW5kX2tleS5vZmZzZXQgPT0gKHU2NCktMSkKIAkJCQlicmVhazsKQEAgLTE1MTQsNyArMTU5MCw3IEBACiAJCQltb2RlID0gYnRyZnNfaW5vZGVfbW9kZShlYiwgaW5vZGVfaXRlbSk7CiAJCQlpZiAoU19JU0RJUihtb2RlKSkgewogCQkJCXJldCA9IHJlcGxheV9kaXJfZGVsZXRlcyh3Yy0+dHJhbnMsCi0JCQkJCSByb290LCBsb2csIHBhdGgsIGtleS5vYmplY3RpZCk7CisJCQkJCSByb290LCBsb2csIHBhdGgsIGtleS5vYmplY3RpZCwgMCk7CiAJCQkJQlVHX09OKHJldCk7CiAJCQl9CiAJCQlyZXQgPSBvdmVyd3JpdGVfaXRlbSh3Yy0+dHJhbnMsIHJvb3QsIHBhdGgsCkBAIC0xNTMzLDYgKzE2MDksMTcgQEAKIAkJCQkJcm9vdCwgaW5vZGUsIGlub2RlLT5pX3NpemUsCiAJCQkJCUJUUkZTX0VYVEVOVF9EQVRBX0tFWSk7CiAJCQkJQlVHX09OKHJldCk7CisKKwkJCQkvKiBpZiB0aGUgbmxpbmsgY291bnQgaXMgemVybyBoZXJlLCB0aGUgaXB1dAorCQkJCSAqIHdpbGwgZnJlZSB0aGUgaW5vZGUuICBXZSBidW1wIGl0IHRvIG1ha2UKKwkJCQkgKiBzdXJlIGl0IGRvZXNuJ3QgZ2V0IGZyZWVkIHVudGlsIHRoZSBsaW5rCisJCQkJICogY291bnQgZml4dXAgaXMgZG9uZQorCQkJCSAqLworCQkJCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKSB7CisJCQkJCWJ0cmZzX2luY19ubGluayhpbm9kZSk7CisJCQkJCWJ0cmZzX3VwZGF0ZV9pbm9kZSh3Yy0+dHJhbnMsCisJCQkJCQkJICAgcm9vdCwgaW5vZGUpOworCQkJCX0KIAkJCQlpcHV0KGlub2RlKTsKIAkJCX0KIAkJCXJldCA9IGxpbmtfdG9fZml4dXBfZGlyKHdjLT50cmFucywgcm9vdCwKQEAgLTE4NDAsNyArMTkyNyw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB3YWl0X2xvZ19jb21taXQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHVuc2lnbmVkIGxvbmcgdHJhbnNpZCkKK3N0YXRpYyBpbnQgd2FpdF9sb2dfY29tbWl0KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHVuc2lnbmVkIGxvbmcgdHJhbnNpZCkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAlpbnQgaW5kZXggPSB0cmFuc2lkICUgMjsKQEAgLTE4NTQsOSArMTk0MiwxMiBAQAogCQlwcmVwYXJlX3RvX3dhaXQoJnJvb3QtPmxvZ19jb21taXRfd2FpdFtpbmRleF0sCiAJCQkJJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwotCQlpZiAocm9vdC0+bG9nX3RyYW5zaWQgPCB0cmFuc2lkICsgMiAmJgorCisJCWlmIChyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCAhPQorCQkgICAgdHJhbnMtPnRyYW5zaWQgJiYgcm9vdC0+bG9nX3RyYW5zaWQgPCB0cmFuc2lkICsgMiAmJgogCQkgICAgYXRvbWljX3JlYWQoJnJvb3QtPmxvZ19jb21taXRbaW5kZXhdKSkKIAkJCXNjaGVkdWxlKCk7CisKIAkJZmluaXNoX3dhaXQoJnJvb3QtPmxvZ19jb21taXRfd2FpdFtpbmRleF0sICZ3YWl0KTsKIAkJbXV0ZXhfbG9jaygmcm9vdC0+bG9nX211dGV4KTsKIAl9IHdoaWxlIChyb290LT5sb2dfdHJhbnNpZCA8IHRyYW5zaWQgKyAyICYmCkBAIC0xODY0LDE0ICsxOTU1LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2FpdF9mb3Jfd3JpdGVyKHN0cnVjdCBidHJmc19yb290ICpyb290KQorc3RhdGljIGludCB3YWl0X2Zvcl93cml0ZXIoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAl3aGlsZSAoYXRvbWljX3JlYWQoJnJvb3QtPmxvZ193cml0ZXJzKSkgewogCQlwcmVwYXJlX3RvX3dhaXQoJnJvb3QtPmxvZ193cml0ZXJfd2FpdCwKIAkJCQkmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQltdXRleF91bmxvY2soJnJvb3QtPmxvZ19tdXRleCk7Ci0JCWlmIChhdG9taWNfcmVhZCgmcm9vdC0+bG9nX3dyaXRlcnMpKQorCQlpZiAocm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19sb2dfZnVsbF9jb21taXQgIT0KKwkJICAgIHRyYW5zLT50cmFuc2lkICYmIGF0b21pY19yZWFkKCZyb290LT5sb2dfd3JpdGVycykpCiAJCQlzY2hlZHVsZSgpOwogCQltdXRleF9sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwogCQlmaW5pc2hfd2FpdCgmcm9vdC0+bG9nX3dyaXRlcl93YWl0LCAmd2FpdCk7CkBAIC0xODgyLDcgKzE5NzUsMTQgQEAKIC8qCiAgKiBidHJmc19zeW5jX2xvZyBkb2VzIHNlbmRzIGEgZ2l2ZW4gdHJlZSBsb2cgZG93biB0byB0aGUgZGlzayBhbmQKICAqIHVwZGF0ZXMgdGhlIHN1cGVyIGJsb2NrcyB0byByZWNvcmQgaXQuICBXaGVuIHRoaXMgY2FsbCBpcyBkb25lLAotICogeW91IGtub3cgdGhhdCBhbnkgaW5vZGVzIHByZXZpb3VzbHkgbG9nZ2VkIGFyZSBzYWZlbHkgb24gZGlzaworICogeW91IGtub3cgdGhhdCBhbnkgaW5vZGVzIHByZXZpb3VzbHkgbG9nZ2VkIGFyZSBzYWZlbHkgb24gZGlzayBvbmx5CisgKiBpZiBpdCByZXR1cm5zIDAuCisgKgorICogQW55IG90aGVyIHJldHVybiB2YWx1ZSBtZWFucyB5b3UgbmVlZCB0byBjYWxsIGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbi4KKyAqIFNvbWUgb2YgdGhlIGVkZ2UgY2FzZXMgZm9yIGZzeW5jaW5nIGRpcmVjdG9yaWVzIHRoYXQgaGF2ZSBoYWQgdW5saW5rcworICogb3IgcmVuYW1lcyBkb25lIGluIHRoZSBwYXN0IG1lYW4gdGhhdCBzb21ldGltZXMgdGhlIG9ubHkgc2FmZQorICogZnN5bmMgaXMgdG8gY29tbWl0IHRoZSB3aG9sZSBGUy4gIFdoZW4gYnRyZnNfc3luY19sb2cgcmV0dXJucyAtRUFHQUlOLAorICogdGhhdCBoYXMgaGFwcGVuZWQuCiAgKi8KIGludCBidHJmc19zeW5jX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCkBAIC0xODk2LDcgKzE5OTYsNyBAQAogCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7CiAJaW5kZXgxID0gcm9vdC0+bG9nX3RyYW5zaWQgJSAyOwogCWlmIChhdG9taWNfcmVhZCgmcm9vdC0+bG9nX2NvbW1pdFtpbmRleDFdKSkgewotCQl3YWl0X2xvZ19jb21taXQocm9vdCwgcm9vdC0+bG9nX3RyYW5zaWQpOworCQl3YWl0X2xvZ19jb21taXQodHJhbnMsIHJvb3QsIHJvb3QtPmxvZ190cmFuc2lkKTsKIAkJbXV0ZXhfdW5sb2NrKCZyb290LT5sb2dfbXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xOTA0LDE4ICsyMDA0LDI2IEBACiAKIAkvKiB3YWl0IGZvciBwcmV2aW91cyB0cmVlIGxvZyBzeW5jIHRvIGNvbXBsZXRlICovCiAJaWYgKGF0b21pY19yZWFkKCZyb290LT5sb2dfY29tbWl0WyhpbmRleDEgKyAxKSAlIDJdKSkKLQkJd2FpdF9sb2dfY29tbWl0KHJvb3QsIHJvb3QtPmxvZ190cmFuc2lkIC0gMSk7CisJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgcm9vdCwgcm9vdC0+bG9nX3RyYW5zaWQgLSAxKTsKIAogCXdoaWxlICgxKSB7CiAJCXVuc2lnbmVkIGxvbmcgYmF0Y2ggPSByb290LT5sb2dfYmF0Y2g7CiAJCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CiAJCW11dGV4X2xvY2soJnJvb3QtPmxvZ19tdXRleCk7Ci0JCXdhaXRfZm9yX3dyaXRlcihyb290KTsKKworCQl3YWl0X2Zvcl93cml0ZXIodHJhbnMsIHJvb3QpOwogCQlpZiAoYmF0Y2ggPT0gcm9vdC0+bG9nX2JhdGNoKQogCQkJYnJlYWs7CiAJfQogCisJLyogYmFpbCBvdXQgaWYgd2UgbmVlZCB0byBkbyBhIGZ1bGwgY29tbWl0ICovCisJaWYgKHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfbG9nX2Z1bGxfY29tbWl0ID09IHRyYW5zLT50cmFuc2lkKSB7CisJCXJldCA9IC1FQUdBSU47CisJCW11dGV4X3VubG9jaygmcm9vdC0+bG9nX211dGV4KTsKKwkJZ290byBvdXQ7CisJfQorCiAJcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMobG9nLCAmbG9nLT5kaXJ0eV9sb2dfcGFnZXMpOwogCUJVR19PTihyZXQpOwogCkBAIC0xOTUxLDE2ICsyMDU5LDI5IEBACiAKIAlpbmRleDIgPSBsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCAlIDI7CiAJaWYgKGF0b21pY19yZWFkKCZsb2dfcm9vdF90cmVlLT5sb2dfY29tbWl0W2luZGV4Ml0pKSB7Ci0JCXdhaXRfbG9nX2NvbW1pdChsb2dfcm9vdF90cmVlLCBsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCk7CisJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgbG9nX3Jvb3RfdHJlZSwKKwkJCQlsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKIAkJZ290byBvdXQ7CiAJfQogCWF0b21pY19zZXQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbaW5kZXgyXSwgMSk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbKGluZGV4MiArIDEpICUgMl0pKQotCQl3YWl0X2xvZ19jb21taXQobG9nX3Jvb3RfdHJlZSwgbG9nX3Jvb3RfdHJlZS0+bG9nX3RyYW5zaWQgLSAxKTsKKwlpZiAoYXRvbWljX3JlYWQoJmxvZ19yb290X3RyZWUtPmxvZ19jb21taXRbKGluZGV4MiArIDEpICUgMl0pKSB7CisJCXdhaXRfbG9nX2NvbW1pdCh0cmFucywgbG9nX3Jvb3RfdHJlZSwKKwkJCQlsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZCAtIDEpOworCX0KIAotCXdhaXRfZm9yX3dyaXRlcihsb2dfcm9vdF90cmVlKTsKKwl3YWl0X2Zvcl93cml0ZXIodHJhbnMsIGxvZ19yb290X3RyZWUpOworCisJLyoKKwkgKiBub3cgdGhhdCB3ZSd2ZSBtb3ZlZCBvbiB0byB0aGUgdHJlZSBvZiBsb2cgdHJlZSByb290cywKKwkgKiBjaGVjayB0aGUgZnVsbCBjb21taXQgZmxhZyBhZ2FpbgorCSAqLworCWlmIChyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA9PSB0cmFucy0+dHJhbnNpZCkgeworCQltdXRleF91bmxvY2soJmxvZ19yb290X3RyZWUtPmxvZ19tdXRleCk7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0X3dha2VfbG9nX3Jvb3Q7CisJfQogCiAJcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfbWFya2VkX2V4dGVudHMobG9nX3Jvb3RfdHJlZSwKIAkJCQkmbG9nX3Jvb3RfdHJlZS0+ZGlydHlfbG9nX3BhZ2VzKTsKQEAgLTE5ODUsNyArMjEwNiw5IEBACiAJICogaW4gYW5kIGNhdXNlIHByb2JsZW1zIGVpdGhlci4KIAkgKi8KIAl3cml0ZV9jdHJlZV9zdXBlcih0cmFucywgcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290LCAyKTsKKwlyZXQgPSAwOwogCitvdXRfd2FrZV9sb2dfcm9vdDoKIAlhdG9taWNfc2V0KCZsb2dfcm9vdF90cmVlLT5sb2dfY29tbWl0W2luZGV4Ml0sIDApOwogCXNtcF9tYigpOwogCWlmICh3YWl0cXVldWVfYWN0aXZlKCZsb2dfcm9vdF90cmVlLT5sb2dfY29tbWl0X3dhaXRbaW5kZXgyXSkpCkBAIC0xOTk4LDcgKzIxMjEsOCBAQAogCXJldHVybiAwOwogfQogCi0vKiAqIGZyZWUgYWxsIHRoZSBleHRlbnRzIHVzZWQgYnkgdGhlIHRyZWUgbG9nLiAgVGhpcyBzaG91bGQgYmUgY2FsbGVkCisvKgorICogZnJlZSBhbGwgdGhlIGV4dGVudHMgdXNlZCBieSB0aGUgdHJlZSBsb2cuICBUaGlzIHNob3VsZCBiZSBjYWxsZWQKICAqIGF0IGNvbW1pdCB0aW1lIG9mIHRoZSBmdWxsIHRyYW5zYWN0aW9uCiAgKi8KIGludCBidHJmc19mcmVlX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpCkBAIC0yMTMyLDcgKzIyNTYsNyBAQAogCiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwogCW11dGV4X3VubG9jaygmQlRSRlNfSShkaXIpLT5sb2dfbXV0ZXgpOwotCWVuZF9sb2dfdHJhbnMocm9vdCk7CisJYnRyZnNfZW5kX2xvZ190cmFucyhyb290KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjE1OSw3ICsyMjgzLDcgQEAKIAlyZXQgPSBidHJmc19kZWxfaW5vZGVfcmVmKHRyYW5zLCBsb2csIG5hbWUsIG5hbWVfbGVuLCBpbm9kZS0+aV9pbm8sCiAJCQkJICBkaXJpZCwgJmluZGV4KTsKIAltdXRleF91bmxvY2soJkJUUkZTX0koaW5vZGUpLT5sb2dfbXV0ZXgpOwotCWVuZF9sb2dfdHJhbnMocm9vdCk7CisJYnRyZnNfZW5kX2xvZ190cmFucyhyb290KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNTU5LDcgKzI2ODMsNyBAQAogICoKICAqIFRoaXMgaGFuZGxlcyBib3RoIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KICAqLwotc3RhdGljIGludCBfX2J0cmZzX2xvZ19pbm9kZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKK3N0YXRpYyBpbnQgYnRyZnNfbG9nX2lub2RlKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAogCQkJICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAgaW50IGlub2RlX29ubHkpCiB7CkBAIC0yNTg1LDI4ICsyNzA5LDE3IEBACiAJbWluX2tleS5vZmZzZXQgPSAwOwogCiAJbWF4X2tleS5vYmplY3RpZCA9IGlub2RlLT5pX2lubzsKKworCS8qIHRvZGF5IHRoZSBjb2RlIGNhbiBvbmx5IGRvIHBhcnRpYWwgbG9nZ2luZyBvZiBkaXJlY3RvcmllcyAqLworCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkgICAgaW5vZGVfb25seSA9IExPR19JTk9ERV9BTEw7CisKIAlpZiAoaW5vZGVfb25seSA9PSBMT0dfSU5PREVfRVhJU1RTIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCW1heF9rZXkudHlwZSA9IEJUUkZTX1hBVFRSX0lURU1fS0VZOwogCWVsc2UKIAkJbWF4X2tleS50eXBlID0gKHU4KS0xOwogCW1heF9rZXkub2Zmc2V0ID0gKHU2NCktMTsKIAotCS8qCi0JICogaWYgdGhpcyBpbm9kZSBoYXMgYWxyZWFkeSBiZWVuIGxvZ2dlZCBhbmQgd2UncmUgaW4gaW5vZGVfb25seQotCSAqIG1vZGUsIHdlIGRvbid0IHdhbnQgdG8gZGVsZXRlIHRoZSB0aGluZ3MgdGhhdCBoYXZlIGFscmVhZHkKLQkgKiBiZWVuIHdyaXR0ZW4gdG8gdGhlIGxvZy4KLQkgKgotCSAqIEJ1dCwgaWYgdGhlIGlub2RlIGhhcyBiZWVuIHRocm91Z2ggYW4gaW5vZGVfb25seSBsb2csCi0JICogdGhlIGxvZ2dlZF90cmFucyBmaWVsZCBpcyBub3Qgc2V0LiAgVGhpcyBhbGxvd3MgdXMgdG8gY2F0Y2gKLQkgKiBhbnkgbmV3IG5hbWVzIGZvciB0aGlzIGlub2RlIGluIHRoZSBiYWNrcmVmcyBieSBsb2dnaW5nIGl0Ci0JICogYWdhaW4KLQkgKi8KLQlpZiAoaW5vZGVfb25seSA9PSBMT0dfSU5PREVfRVhJU1RTICYmCi0JICAgIEJUUkZTX0koaW5vZGUpLT5sb2dnZWRfdHJhbnMgPT0gdHJhbnMtPnRyYW5zaWQpIHsKLQkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwotCQlidHJmc19mcmVlX3BhdGgoZHN0X3BhdGgpOwotCQlnb3RvIG91dDsKLQl9CiAJbXV0ZXhfbG9jaygmQlRSRlNfSShpbm9kZSktPmxvZ19tdXRleCk7CiAKIAkvKgpAQCAtMjY5Myw3ICsyODA2LDYgQEAKIAlpZiAoaW5vZGVfb25seSA9PSBMT0dfSU5PREVfQUxMICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKIAkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCQlidHJmc19yZWxlYXNlX3BhdGgobG9nLCBkc3RfcGF0aCk7Ci0JCUJUUkZTX0koaW5vZGUpLT5sb2dfZGlydHlfdHJhbnMgPSAwOwogCQlyZXQgPSBsb2dfZGlyZWN0b3J5X2NoYW5nZXModHJhbnMsIHJvb3QsIGlub2RlLCBwYXRoLCBkc3RfcGF0aCk7CiAJCUJVR19PTihyZXQpOwogCX0KQEAgLTI3MDIsMTkgKzI4MTQsNjkgQEAKIAogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAlidHJmc19mcmVlX3BhdGgoZHN0X3BhdGgpOwotb3V0OgogCXJldHVybiAwOwogfQogCi1pbnQgYnRyZnNfbG9nX2lub2RlKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgICBpbnQgaW5vZGVfb25seSkKKy8qCisgKiBmb2xsb3cgdGhlIGRlbnRyeSBwYXJlbnQgcG9pbnRlcnMgdXAgdGhlIGNoYWluIGFuZCBzZWUgaWYgYW55CisgKiBvZiB0aGUgZGlyZWN0b3JpZXMgaW4gaXQgcmVxdWlyZSBhIGZ1bGwgY29tbWl0IGJlZm9yZSB0aGV5IGNhbgorICogYmUgbG9nZ2VkLiAgUmV0dXJucyB6ZXJvIGlmIG5vdGhpbmcgc3BlY2lhbCBuZWVkcyB0byBiZSBkb25lIG9yIDEgaWYKKyAqIGEgZnVsbCBjb21taXQgaXMgcmVxdWlyZWQuCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgY2hlY2tfcGFyZW50X2RpcnNfZm9yX3N5bmMoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorCQkJCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJICAgICAgIHU2NCBsYXN0X2NvbW1pdHRlZCkKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOworCXN0cnVjdCBidHJmc19yb290ICpyb290OwogCi0Jc3RhcnRfbG9nX3RyYW5zKHRyYW5zLCByb290KTsKLQlyZXQgPSBfX2J0cmZzX2xvZ19pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUsIGlub2RlX29ubHkpOwotCWVuZF9sb2dfdHJhbnMocm9vdCk7CisJLyoKKwkgKiBmb3IgcmVndWxhciBmaWxlcywgaWYgaXRzIGlub2RlIGlzIGFscmVhZHkgb24gZGlzaywgd2UgZG9uJ3QKKwkgKiBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBwYXJlbnRzIGF0IGFsbC4gIFRoaXMgaXMgYmVjYXVzZQorCSAqIHdlIGNhbiB1c2UgdGhlIGxhc3RfdW5saW5rX3RyYW5zIGZpZWxkIHRvIHJlY29yZCByZW5hbWVzCisJICogYW5kIG90aGVyIGZ1biBpbiB0aGlzIGZpbGUuCisJICovCisJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYKKwkgICAgQlRSRlNfSShpbm9kZSktPmdlbmVyYXRpb24gPD0gbGFzdF9jb21taXR0ZWQgJiYKKwkgICAgQlRSRlNfSShpbm9kZSktPmxhc3RfdW5saW5rX3RyYW5zIDw9IGxhc3RfY29tbWl0dGVkKQorCQkJZ290byBvdXQ7CisKKwlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+ZF9pbm9kZSB8fCBzYiAhPSBwYXJlbnQtPmRfaW5vZGUtPmlfc2IpCisJCQlnb3RvIG91dDsKKwkJaW5vZGUgPSBwYXJlbnQtPmRfaW5vZGU7CisJfQorCisJd2hpbGUgKDEpIHsKKwkJQlRSRlNfSShpbm9kZSktPmxvZ2dlZF90cmFucyA9IHRyYW5zLT50cmFuc2lkOworCQlzbXBfbWIoKTsKKworCQlpZiAoQlRSRlNfSShpbm9kZSktPmxhc3RfdW5saW5rX3RyYW5zID4gbGFzdF9jb21taXR0ZWQpIHsKKwkJCXJvb3QgPSBCVFJGU19JKGlub2RlKS0+cm9vdDsKKworCQkJLyoKKwkJCSAqIG1ha2Ugc3VyZSBhbnkgY29tbWl0cyB0byB0aGUgbG9nIGFyZSBmb3JjZWQKKwkJCSAqIHRvIGJlIGZ1bGwgY29tbWl0cworCQkJICovCisJCQlyb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2xvZ19mdWxsX2NvbW1pdCA9CisJCQkJdHJhbnMtPnRyYW5zaWQ7CisJCQlyZXQgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5kX2lub2RlIHx8IHNiICE9IHBhcmVudC0+ZF9pbm9kZS0+aV9zYikKKwkJCWJyZWFrOworCisJCWlmIChwYXJlbnQgPT0gc2ItPnNfcm9vdCkKKwkJCWJyZWFrOworCisJCXBhcmVudCA9IHBhcmVudC0+ZF9wYXJlbnQ7CisJCWlub2RlID0gcGFyZW50LT5kX2lub2RlOworCisJfQorb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI3MjQsMzEgKzI4ODYsNzAgQEAKICAqIG9ubHkgbG9nZ2luZyBpcyBkb25lIG9mIGFueSBwYXJlbnQgZGlyZWN0b3JpZXMgdGhhdCBhcmUgb2xkZXIgdGhhbgogICogdGhlIGxhc3QgY29tbWl0dGVkIHRyYW5zYWN0aW9uCiAgKi8KLWludCBidHJmc19sb2dfZGVudHJ5KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAotCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK2ludCBidHJmc19sb2dfaW5vZGVfcGFyZW50KHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGludCBleGlzdHNfb25seSkKIHsKLQlpbnQgaW5vZGVfb25seSA9IExPR19JTk9ERV9BTEw7CisJaW50IGlub2RlX29ubHkgPSBleGlzdHNfb25seSA/IExPR19JTk9ERV9FWElTVFMgOiBMT0dfSU5PREVfQUxMOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKKwl1NjQgbGFzdF9jb21taXR0ZWQgPSByb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZDsKKworCXNiID0gaW5vZGUtPmlfc2I7CisKKwlpZiAoYnRyZnNfdGVzdF9vcHQocm9vdCwgTk9UUkVFTE9HKSkgeworCQlyZXQgPSAxOworCQlnb3RvIGVuZF9ub190cmFuczsKKwl9CisKKwlpZiAocm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19sb2dfZnVsbF9jb21taXQgPgorCSAgICByb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZCkgeworCQlyZXQgPSAxOworCQlnb3RvIGVuZF9ub190cmFuczsKKwl9CisKKwlyZXQgPSBjaGVja19wYXJlbnRfZGlyc19mb3Jfc3luYyh0cmFucywgaW5vZGUsIHBhcmVudCwKKwkJCQkJIHNiLCBsYXN0X2NvbW1pdHRlZCk7CisJaWYgKHJldCkKKwkJZ290byBlbmRfbm9fdHJhbnM7CiAKIAlzdGFydF9sb2dfdHJhbnModHJhbnMsIHJvb3QpOwotCXNiID0gZGVudHJ5LT5kX2lub2RlLT5pX3NiOworCisJcmV0ID0gYnRyZnNfbG9nX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSwgaW5vZGVfb25seSk7CisJQlVHX09OKHJldCk7CisKKwkvKgorCSAqIGZvciByZWd1bGFyIGZpbGVzLCBpZiBpdHMgaW5vZGUgaXMgYWxyZWFkeSBvbiBkaXNrLCB3ZSBkb24ndAorCSAqIGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlIHBhcmVudHMgYXQgYWxsLiAgVGhpcyBpcyBiZWNhdXNlCisJICogd2UgY2FuIHVzZSB0aGUgbGFzdF91bmxpbmtfdHJhbnMgZmllbGQgdG8gcmVjb3JkIHJlbmFtZXMKKwkgKiBhbmQgb3RoZXIgZnVuIGluIHRoaXMgZmlsZS4KKwkgKi8KKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJgorCSAgICBCVFJGU19JKGlub2RlKS0+Z2VuZXJhdGlvbiA8PSBsYXN0X2NvbW1pdHRlZCAmJgorCSAgICBCVFJGU19JKGlub2RlKS0+bGFzdF91bmxpbmtfdHJhbnMgPD0gbGFzdF9jb21taXR0ZWQpCisJCQlnb3RvIG5vX3BhcmVudDsKKworCWlub2RlX29ubHkgPSBMT0dfSU5PREVfRVhJU1RTOwogCXdoaWxlICgxKSB7Ci0JCXJldCA9IF9fYnRyZnNfbG9nX2lub2RlKHRyYW5zLCByb290LCBkZW50cnktPmRfaW5vZGUsCi0JCQkJCWlub2RlX29ubHkpOwotCQlCVUdfT04ocmV0KTsKLQkJaW5vZGVfb25seSA9IExPR19JTk9ERV9FWElTVFM7Ci0KLQkJZGVudHJ5ID0gZGVudHJ5LT5kX3BhcmVudDsKLQkJaWYgKCFkZW50cnkgfHwgIWRlbnRyeS0+ZF9pbm9kZSB8fCBzYiAhPSBkZW50cnktPmRfaW5vZGUtPmlfc2IpCisJCWlmICghcGFyZW50IHx8ICFwYXJlbnQtPmRfaW5vZGUgfHwgc2IgIT0gcGFyZW50LT5kX2lub2RlLT5pX3NiKQogCQkJYnJlYWs7CiAKLQkJaWYgKEJUUkZTX0koZGVudHJ5LT5kX2lub2RlKS0+Z2VuZXJhdGlvbiA8PQotCQkgICAgcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19jb21taXR0ZWQpCisJCWlub2RlID0gcGFyZW50LT5kX2lub2RlOworCQlpZiAoQlRSRlNfSShpbm9kZSktPmdlbmVyYXRpb24gPgorCQkgICAgcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19jb21taXR0ZWQpIHsKKwkJCXJldCA9IGJ0cmZzX2xvZ19pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUsIGlub2RlX29ubHkpOworCQkJQlVHX09OKHJldCk7CisJCX0KKwkJaWYgKHBhcmVudCA9PSBzYi0+c19yb290KQogCQkJYnJlYWs7CisKKwkJcGFyZW50ID0gcGFyZW50LT5kX3BhcmVudDsKIAl9Ci0JZW5kX2xvZ190cmFucyhyb290KTsKLQlyZXR1cm4gMDsKK25vX3BhcmVudDoKKwlyZXQgPSAwOworCWJ0cmZzX2VuZF9sb2dfdHJhbnMocm9vdCk7CitlbmRfbm9fdHJhbnM6CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTI3NjAsMTIgKzI5NjEsOCBAQAogaW50IGJ0cmZzX2xvZ19kZW50cnlfc2FmZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKLQl1NjQgZ2VuOwotCWdlbiA9IHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfbmV3X2Jsb2NrZ3JvdXA7Ci0JaWYgKGdlbiA+IHJvb3QtPmZzX2luZm8tPmxhc3RfdHJhbnNfY29tbWl0dGVkKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiBidHJmc19sb2dfZGVudHJ5KHRyYW5zLCByb290LCBkZW50cnkpOworCXJldHVybiBidHJmc19sb2dfaW5vZGVfcGFyZW50KHRyYW5zLCByb290LCBkZW50cnktPmRfaW5vZGUsCisJCQkJICAgICAgZGVudHJ5LT5kX3BhcmVudCwgMCk7CiB9CiAKIC8qCkBAIC0yODg0LDMgKzMwODEsOTQgQEAKIAlrZnJlZShsb2dfcm9vdF90cmVlKTsKIAlyZXR1cm4gMDsKIH0KKworLyoKKyAqIHRoZXJlIGFyZSBzb21lIGNvcm5lciBjYXNlcyB3aGVyZSB3ZSB3YW50IHRvIGZvcmNlIGEgZnVsbAorICogY29tbWl0IGluc3RlYWQgb2YgYWxsb3dpbmcgYSBkaXJlY3RvcnkgdG8gYmUgbG9nZ2VkLgorICoKKyAqIFRoZXkgcmV2b2x2ZSBhcm91bmQgZmlsZXMgdGhlcmUgd2VyZSB1bmxpbmtlZCBmcm9tIHRoZSBkaXJlY3RvcnksIGFuZAorICogdGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHNvIHRoYXQgYSBmdWxsIGNvbW1pdCBpcworICogcHJvcGVybHkgZG9uZSBpZiBpdCBpcyBmc3luYydkIGxhdGVyIGFmdGVyIHRoZSB1bmxpbmtzIGFyZSBkb25lLgorICovCit2b2lkIGJ0cmZzX3JlY29yZF91bmxpbmtfZGlyKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgaW50IGZvcl9yZW5hbWUpCit7CisJLyoKKwkgKiB3aGVuIHdlJ3JlIGxvZ2dpbmcgYSBmaWxlLCBpZiBpdCBoYXNuJ3QgYmVlbiByZW5hbWVkCisJICogb3IgdW5saW5rZWQsIGFuZCBpdHMgaW5vZGUgaXMgZnVsbHkgY29tbWl0dGVkIG9uIGRpc2ssCisJICogd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB3YWxraW5nIHVwIHRoZSBkaXJlY3RvcnkgY2hhaW4KKwkgKiB0byBsb2cgaXRzIHBhcmVudHMuCisJICoKKwkgKiBTbywgd2UgdXNlIHRoZSBsYXN0X3VubGlua190cmFucyBmaWVsZCB0byBwdXQgdGhpcyB0cmFuc2lkCisJICogaW50byB0aGUgZmlsZS4gIFdoZW4gdGhlIGZpbGUgaXMgbG9nZ2VkIHdlIGNoZWNrIGl0IGFuZAorCSAqIGRvbid0IGxvZyB0aGUgcGFyZW50cyBpZiB0aGUgZmlsZSBpcyBmdWxseSBvbiBkaXNrLgorCSAqLworCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCQlCVFJGU19JKGlub2RlKS0+bGFzdF91bmxpbmtfdHJhbnMgPSB0cmFucy0+dHJhbnNpZDsKKworCS8qCisJICogaWYgdGhpcyBkaXJlY3Rvcnkgd2FzIGFscmVhZHkgbG9nZ2VkIGFueSBuZXcKKwkgKiBuYW1lcyBmb3IgdGhpcyBmaWxlL2RpciB3aWxsIGdldCByZWNvcmRlZAorCSAqLworCXNtcF9tYigpOworCWlmIChCVFJGU19JKGRpciktPmxvZ2dlZF90cmFucyA9PSB0cmFucy0+dHJhbnNpZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBpZiB0aGUgaW5vZGUgd2UncmUgYWJvdXQgdG8gdW5saW5rIHdhcyBsb2dnZWQsCisJICogdGhlIGxvZyB3aWxsIGJlIHByb3Blcmx5IHVwZGF0ZWQgZm9yIGFueSBuZXcgbmFtZXMKKwkgKi8KKwlpZiAoQlRSRlNfSShpbm9kZSktPmxvZ2dlZF90cmFucyA9PSB0cmFucy0+dHJhbnNpZCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiB3aGVuIHJlbmFtaW5nIGZpbGVzIGFjcm9zcyBkaXJlY3RvcmllcywgaWYgdGhlIGRpcmVjdG9yeQorCSAqIHRoZXJlIHdlJ3JlIHVubGlua2luZyBmcm9tIGdldHMgZnN5bmMnZCBsYXRlciBvbiwgdGhlcmUncworCSAqIG5vIHdheSB0byBmaW5kIHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgbGF0ZXIgYW5kIGZzeW5jIGl0CisJICogcHJvcGVybHkuICBTbywgd2UgaGF2ZSB0byBiZSBjb25zZXJ2YXRpdmUgYW5kIGZvcmNlIGNvbW1pdHMKKwkgKiBzbyB0aGUgbmV3IG5hbWUgZ2V0cyBkaXNjb3ZlcmVkLgorCSAqLworCWlmIChmb3JfcmVuYW1lKQorCQlnb3RvIHJlY29yZDsKKworCS8qIHdlIGNhbiBzYWZlbHkgZG8gdGhlIHVubGluayB3aXRob3V0IGFueSBzcGVjaWFsIHJlY29yZGluZyAqLworCXJldHVybjsKKworcmVjb3JkOgorCUJUUkZTX0koZGlyKS0+bGFzdF91bmxpbmtfdHJhbnMgPSB0cmFucy0+dHJhbnNpZDsKK30KKworLyoKKyAqIENhbGwgdGhpcyBhZnRlciBhZGRpbmcgYSBuZXcgbmFtZSBmb3IgYSBmaWxlIGFuZCBpdCB3aWxsIHByb3Blcmx5CisgKiB1cGRhdGUgdGhlIGxvZyB0byByZWZsZWN0IHRoZSBuZXcgbmFtZS4KKyAqCisgKiBJdCB3aWxsIHJldHVybiB6ZXJvIGlmIGFsbCBnb2VzIHdlbGwsIGFuZCBpdCB3aWxsIHJldHVybiAxIGlmIGEKKyAqIGZ1bGwgdHJhbnNhY3Rpb24gY29tbWl0IGlzIHJlcXVpcmVkLgorICovCitpbnQgYnRyZnNfbG9nX25ld19uYW1lKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLAorCQkJc3RydWN0IGRlbnRyeSAqcGFyZW50KQoreworCXN0cnVjdCBidHJmc19yb290ICogcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OworCisJLyoKKwkgKiB0aGlzIHdpbGwgZm9yY2UgdGhlIGxvZ2dpbmcgY29kZSB0byB3YWxrIHRoZSBkZW50cnkgY2hhaW4KKwkgKiB1cCBmb3IgdGhlIGZpbGUKKwkgKi8KKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJQlRSRlNfSShpbm9kZSktPmxhc3RfdW5saW5rX3RyYW5zID0gdHJhbnMtPnRyYW5zaWQ7CisKKwkvKgorCSAqIGlmIHRoaXMgaW5vZGUgaGFzbid0IGJlZW4gbG9nZ2VkIGFuZCBkaXJlY3Rvcnkgd2UncmUgcmVuYW1pbmcgaXQKKwkgKiBmcm9tIGhhc24ndCBiZWVuIGxvZ2dlZCwgd2UgZG9uJ3QgbmVlZCB0byBsb2cgaXQKKwkgKi8KKwlpZiAoQlRSRlNfSShpbm9kZSktPmxvZ2dlZF90cmFucyA8PQorCSAgICByb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZCAmJgorCSAgICAoIW9sZF9kaXIgfHwgQlRSRlNfSShvbGRfZGlyKS0+bG9nZ2VkX3RyYW5zIDw9CisJCSAgICByb290LT5mc19pbmZvLT5sYXN0X3RyYW5zX2NvbW1pdHRlZCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIGJ0cmZzX2xvZ19pbm9kZV9wYXJlbnQodHJhbnMsIHJvb3QsIGlub2RlLCBwYXJlbnQsIDEpOworfQorCmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmVlLWxvZy5oIGIvZnMvYnRyZnMvdHJlZS1sb2cuaAppbmRleCBiOTQwOWIzLi5kMDljNzYwIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmVlLWxvZy5oCisrKyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmgKQEAgLTIyLDE0ICsyMiw5IEBACiBpbnQgYnRyZnNfc3luY19sb2coc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCSAgIHN0cnVjdCBidHJmc19yb290ICpyb290KTsKIGludCBidHJmc19mcmVlX2xvZyhzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOwotaW50IGJ0cmZzX2xvZ19kZW50cnkoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCi0JCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGludCBidHJmc19yZWNvdmVyX2xvZ190cmVlcyhzdHJ1Y3QgYnRyZnNfcm9vdCAqdHJlZV9yb290KTsKIGludCBidHJmc19sb2dfZGVudHJ5X3NhZmUoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgIHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IGJ0cmZzX2xvZ19pbm9kZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKLQkJICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkgICAgaW50IGlub2RlX29ubHkpOwogaW50IGJ0cmZzX2RlbF9kaXJfZW50cmllc19pbl9sb2coc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkJIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZV9sZW4sCkBAIC0zOCw0ICszMywxNiBAQAogCQkJICAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lX2xlbiwKIAkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgZGlyaWQpOworaW50IGJ0cmZzX2pvaW5fcnVubmluZ19sb2dfdHJhbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOworaW50IGJ0cmZzX2VuZF9sb2dfdHJhbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOworaW50IGJ0cmZzX3Bpbl9sb2dfdHJhbnMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QpOworaW50IGJ0cmZzX2xvZ19pbm9kZV9wYXJlbnQoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCSAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgaW50IGV4aXN0c19vbmx5KTsKK3ZvaWQgYnRyZnNfcmVjb3JkX3VubGlua19kaXIoc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICBpbnQgZm9yX3JlbmFtZSk7CitpbnQgYnRyZnNfbG9nX25ld19uYW1lKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLAorCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpvbGRfZGlyLAorCQkJc3RydWN0IGRlbnRyeSAqcGFyZW50KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdm9sdW1lcy5jIGIvZnMvYnRyZnMvdm9sdW1lcy5jCmluZGV4IGRkMDZlMTguLmUwOTEzZTQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3ZvbHVtZXMuYworKysgYi9mcy9idHJmcy92b2x1bWVzLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgImNvbXBhdC5oIgogI2luY2x1ZGUgImN0cmVlLmgiCkBAIC0xNDUsOCArMTQ2LDkgQEAKIAlpbnQgYWdhaW4gPSAwOwogCXVuc2lnbmVkIGxvbmcgbnVtX3J1biA9IDA7CiAJdW5zaWduZWQgbG9uZyBsaW1pdDsKKwl1bnNpZ25lZCBsb25nIGxhc3Rfd2FpdGVkID0gMDsKIAotCWJkaSA9IGRldmljZS0+YmRldi0+YmRfaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKKwliZGkgPSBibGtfZ2V0X2JhY2tpbmdfZGV2X2luZm8oZGV2aWNlLT5iZGV2KTsKIAlmc19pbmZvID0gZGV2aWNlLT5kZXZfcm9vdC0+ZnNfaW5mbzsKIAlsaW1pdCA9IGJ0cmZzX2FzeW5jX3N1Ym1pdF9saW1pdChmc19pbmZvKTsKIAlsaW1pdCA9IGxpbWl0ICogMiAvIDM7CkBAIC0yMDcsNyArMjA5LDMyIEBACiAJCWlmIChwZW5kaW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSAmJiBudW1fcnVuID4gMTYgJiYKIAkJICAgIGZzX2luZm8tPmZzX2RldmljZXMtPm9wZW5fZGV2aWNlcyA+IDEpIHsKIAkJCXN0cnVjdCBiaW8gKm9sZF9oZWFkOworCQkJc3RydWN0IGlvX2NvbnRleHQgKmlvYzsKIAorCQkJaW9jID0gY3VycmVudC0+aW9fY29udGV4dDsKKworCQkJLyoKKwkJCSAqIHRoZSBtYWluIGdvYWwgaGVyZSBpcyB0aGF0IHdlIGRvbid0IHdhbnQgdG8KKwkJCSAqIGJsb2NrIGlmIHdlJ3JlIGdvaW5nIHRvIGJlIGFibGUgdG8gc3VibWl0CisJCQkgKiBtb3JlIHJlcXVlc3RzIHdpdGhvdXQgYmxvY2tpbmcuCisJCQkgKgorCQkJICogVGhpcyBjb2RlIGRvZXMgdHdvIGdyZWF0IHRoaW5ncywgaXQgcG9rZXMgaW50bworCQkJICogdGhlIGVsZXZhdG9yIGNvZGUgZnJvbSBhIGZpbGVzeXN0ZW0gX2FuZF8KKwkJCSAqIGl0IG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IGhvdyBiYXRjaGluZyB3b3Jrcy4KKwkJCSAqLworCQkJaWYgKGlvYyAmJiBpb2MtPm5yX2JhdGNoX3JlcXVlc3RzID4gMCAmJgorCQkJICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIGlvYy0+bGFzdF93YWl0ZWQgKyBIWi81MFVMKSAmJgorCQkJICAgIChsYXN0X3dhaXRlZCA9PSAwIHx8CisJCQkgICAgIGlvYy0+bGFzdF93YWl0ZWQgPT0gbGFzdF93YWl0ZWQpKSB7CisJCQkJLyoKKwkJCQkgKiB3ZSB3YW50IHRvIGdvIHRocm91Z2ggb3VyIGJhdGNoIG9mCisJCQkJICogcmVxdWVzdHMgYW5kIHN0b3AuICBTbywgd2UgY29weSBvdXQKKwkJCQkgKiB0aGUgaW9jLT5sYXN0X3dhaXRlZCB0aW1lIGFuZCB0ZXN0CisJCQkJICogYWdhaW5zdCBpdCBiZWZvcmUgbG9vcGluZworCQkJCSAqLworCQkJCWxhc3Rfd2FpdGVkID0gaW9jLT5sYXN0X3dhaXRlZDsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCXNwaW5fbG9jaygmZGV2aWNlLT5pb19sb2NrKTsKIAogCQkJb2xkX2hlYWQgPSBkZXZpY2UtPnBlbmRpbmdfYmlvczsKQEAgLTIzMSw2ICsyNTgsMTggQEAKIAlpZiAoZGV2aWNlLT5wZW5kaW5nX2Jpb3MpCiAJCWdvdG8gbG9vcF9sb2NrOwogCXNwaW5fdW5sb2NrKCZkZXZpY2UtPmlvX2xvY2spOworCisJLyoKKwkgKiBJTyBoYXMgYWxyZWFkeSBiZWVuIHRocm91Z2ggYSBsb25nIHBhdGggdG8gZ2V0IGhlcmUuICBDaGVja3N1bW1pbmcsCisJICogYXN5bmMgaGVscGVyIHRocmVhZHMsIHBlcmhhcHMgY29tcHJlc3Npb24uICBXZSd2ZSBkb25lIGEgcHJldHR5CisJICogZ29vZCBqb2Igb2YgY29sbGVjdGluZyBhIGJhdGNoIG9mIElPIGFuZCBzaG91bGQganVzdCB1bnBsdWcKKwkgKiB0aGUgZGV2aWNlIHJpZ2h0IGF3YXkuCisJICoKKwkgKiBUaGlzIHdpbGwgaGVscCBhbnlvbmUgd2hvIGlzIHdhaXRpbmcgb24gdGhlIElPLCB0aGV5IG1pZ2h0IGhhdmUKKwkgKiBhbHJlYWR5IHVucGx1Z2dlZCwgYnV0IG1hbmFnZWQgdG8gZG8gc28gYmVmb3JlIHRoZSBiaW8gdGhleQorCSAqIGNhcmVkIGFib3V0IGZvdW5kIGl0cyB3YXkgZG93biBoZXJlLgorCSAqLworCWJsa19ydW5fYmFja2luZ19kZXYoYmRpLCBOVUxMKTsKIGRvbmU6CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9idHJmcy92b2x1bWVzLmggYi9mcy9idHJmcy92b2x1bWVzLmgKaW5kZXggODZjNDRlOS4uMjE4NWRlNyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdm9sdW1lcy5oCisrKyBiL2ZzL2J0cmZzL3ZvbHVtZXMuaApAQCAtNzYsNyArNzYsNyBAQAogc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgewogCXU4IGZzaWRbQlRSRlNfRlNJRF9TSVpFXTsgLyogRlMgc3BlY2lmaWMgdXVpZCAqLwogCi0JLyogdGhlIGRldmljZSB3aXRoIHRoaXMgaWQgaGFzIHRoZSBtb3N0IHJlY2VudCBjb3lwIG9mIHRoZSBzdXBlciAqLworCS8qIHRoZSBkZXZpY2Ugd2l0aCB0aGlzIGlkIGhhcyB0aGUgbW9zdCByZWNlbnQgY29weSBvZiB0aGUgc3VwZXIgKi8KIAl1NjQgbGF0ZXN0X2RldmlkOwogCXU2NCBsYXRlc3RfdHJhbnM7CiAJdTY0IG51bV9kZXZpY2VzOwpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCBhMmZkNzQzLi41ZDU1YTg5IDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtMTk5LDEzICsxOTksMTMgQEAKIAloZWFkID0gcGFnZV9idWZmZXJzKHBhZ2UpOwogCWJoID0gaGVhZDsKIAlkbyB7Ci0JCWlmIChiaC0+Yl9ibG9ja25yID09IGJsb2NrKSB7CisJCWlmICghYnVmZmVyX21hcHBlZChiaCkpCisJCQlhbGxfbWFwcGVkID0gMDsKKwkJZWxzZSBpZiAoYmgtPmJfYmxvY2tuciA9PSBibG9jaykgewogCQkJcmV0ID0gYmg7CiAJCQlnZXRfYmgoYmgpOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9Ci0JCWlmICghYnVmZmVyX21hcHBlZChiaCkpCi0JCQlhbGxfbWFwcGVkID0gMDsKIAkJYmggPSBiaC0+Yl90aGlzX3BhZ2U7CiAJfSB3aGlsZSAoYmggIT0gaGVhZCk7CiAKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQkJCQkJJnpvbmUpOwogCQlpZiAoem9uZSkKIAkJCXRyeV90b19mcmVlX3BhZ2VzKG5vZGVfem9uZWxpc3QobmlkLCBHRlBfTk9GUyksIDAsCi0JCQkJCQlHRlBfTk9GUyk7CisJCQkJCQlHRlBfTk9GUywgTlVMTCk7CiAJfQogfQogCkBAIC01NDcsNiArNTQ3LDM5IEBACiAJcmV0dXJuIGVycjsKIH0KIAordm9pZCBkb190aGF3X2FsbCh1bnNpZ25lZCBsb25nIHVudXNlZCkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOworCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKKworCXNwaW5fbG9jaygmc2JfbG9jayk7CityZXN0YXJ0OgorCWxpc3RfZm9yX2VhY2hfZW50cnkoc2IsICZzdXBlcl9ibG9ja3MsIHNfbGlzdCkgeworCQlzYi0+c19jb3VudCsrOworCQlzcGluX3VubG9jaygmc2JfbG9jayk7CisJCWRvd25fcmVhZCgmc2ItPnNfdW1vdW50KTsKKwkJd2hpbGUgKHNiLT5zX2JkZXYgJiYgIXRoYXdfYmRldihzYi0+c19iZGV2LCBzYikpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJFbWVyZ2VuY3kgVGhhdyBvbiAlc1xuIiwKKwkJCSAgICAgICBiZGV2bmFtZShzYi0+c19iZGV2LCBiKSk7CisJCXVwX3JlYWQoJnNiLT5zX3Vtb3VudCk7CisJCXNwaW5fbG9jaygmc2JfbG9jayk7CisJCWlmIChfX3B1dF9zdXBlcl9hbmRfbmVlZF9yZXN0YXJ0KHNiKSkKKwkJCWdvdG8gcmVzdGFydDsKKwl9CisJc3Bpbl91bmxvY2soJnNiX2xvY2spOworCXByaW50ayhLRVJOX1dBUk5JTkcgIkVtZXJnZW5jeSBUaGF3IGNvbXBsZXRlXG4iKTsKK30KKworLyoqCisgKiBlbWVyZ2VuY3lfdGhhd19hbGwgLS0gZm9yY2libHkgdGhhdyBldmVyeSBmcm96ZW4gZmlsZXN5c3RlbQorICoKKyAqIFVzZWQgZm9yIGVtZXJnZW5jeSB1bmZyZWV6ZSBvZiBhbGwgZmlsZXN5c3RlbXMgdmlhIFN5c1JxCisgKi8KK3ZvaWQgZW1lcmdlbmN5X3RoYXdfYWxsKHZvaWQpCit7CisJcGRmbHVzaF9vcGVyYXRpb24oZG9fdGhhd19hbGwsIDApOworfQorCiAvKioKICAqIHN5bmNfbWFwcGluZ19idWZmZXJzIC0gd3JpdGUgb3V0ICYgd2FpdCB1cG9uIGEgbWFwcGluZydzICJhc3NvY2lhdGVkIiBidWZmZXJzCiAgKiBAbWFwcGluZzogdGhlIG1hcHBpbmcgd2hpY2ggd2FudHMgdGhvc2UgYnVmZmVycyB3cml0dGVuCkBAIC02MjEsMTQgKzY1NCw3IEBACiAJc3Bpbl9sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKIAlpZiAocGFnZS0+bWFwcGluZykgewkvKiBSYWNlIHdpdGggdHJ1bmNhdGU/ICovCiAJCVdBUk5fT05fT05DRSh3YXJuICYmICFQYWdlVXB0b2RhdGUocGFnZSkpOwotCi0JCWlmIChtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpKSB7Ci0JCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9ESVJUWSk7Ci0JCQlfX2luY19iZGlfc3RhdChtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLAotCQkJCQlCRElfUkVDTEFJTUFCTEUpOwotCQkJdGFza19kaXJ0eV9pbmMoY3VycmVudCk7Ci0JCQl0YXNrX2lvX2FjY291bnRfd3JpdGUoUEFHRV9DQUNIRV9TSVpFKTsKLQkJfQorCQlhY2NvdW50X3BhZ2VfZGlydGllZChwYWdlLCBtYXBwaW5nKTsKIAkJcmFkaXhfdHJlZV90YWdfc2V0KCZtYXBwaW5nLT5wYWdlX3RyZWUsCiAJCQkJcGFnZV9pbmRleChwYWdlKSwgUEFHRUNBQ0hFX1RBR19ESVJUWSk7CiAJfQpAQCAtMTU2OSw2ICsxNTk1LDcgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqaGVhZDsKIAljb25zdCB1bnNpZ25lZCBibG9ja3NpemUgPSAxIDw8IGlub2RlLT5pX2Jsa2JpdHM7CiAJaW50IG5yX3VuZGVyd2F5ID0gMDsKKwlpbnQgd3JpdGVfb3AgPSAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgPyBXUklURV9TWU5DIDogV1JJVEUpOwogCiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIApAQCAtMTY2MCw3ICsxNjg3LDcgQEAKIAlkbyB7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV4dCA9IGJoLT5iX3RoaXNfcGFnZTsKIAkJaWYgKGJ1ZmZlcl9hc3luY193cml0ZShiaCkpIHsKLQkJCXN1Ym1pdF9iaChXUklURSwgYmgpOworCQkJc3VibWl0X2JoKHdyaXRlX29wLCBiaCk7CiAJCQlucl91bmRlcndheSsrOwogCQl9CiAJCWJoID0gbmV4dDsKQEAgLTE3MTQsNyArMTc0MSw3IEBACiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV4dCA9IGJoLT5iX3RoaXNfcGFnZTsKIAkJaWYgKGJ1ZmZlcl9hc3luY193cml0ZShiaCkpIHsKIAkJCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JCQlzdWJtaXRfYmgoV1JJVEUsIGJoKTsKKwkJCXN1Ym1pdF9iaCh3cml0ZV9vcCwgYmgpOwogCQkJbnJfdW5kZXJ3YXkrKzsKIAkJfQogCQliaCA9IG5leHQ7CkBAIC0yMzIwLDEzICsyMzQ3LDE0IEBACiAgKiB1bmxvY2sgdGhlIHBhZ2UuCiAgKi8KIGludAotYmxvY2tfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKK2Jsb2NrX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiAJCSAgIGdldF9ibG9ja190IGdldF9ibG9jaykKIHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtZi0+cGFnZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXVuc2lnbmVkIGxvbmcgZW5kOwogCWxvZmZfdCBzaXplOwotCWludCByZXQgPSAtRUlOVkFMOworCWludCByZXQgPSBWTV9GQVVMVF9OT1BBR0U7IC8qIG1ha2UgdGhlIFZNIHJldHJ5IHRoZSBmYXVsdCAqLwogCiAJbG9ja19wYWdlKHBhZ2UpOwogCXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CkBAIC0yMzQ2LDYgKzIzNzQsMTMgQEAKIAlpZiAoIXJldCkKIAkJcmV0ID0gYmxvY2tfY29tbWl0X3dyaXRlKHBhZ2UsIDAsIGVuZCk7CiAKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlpZiAocmV0ID09IC1FTk9NRU0pCisJCQlyZXQgPSBWTV9GQVVMVF9PT007CisJCWVsc2UgLyogLUVOT1NQQywgLUVJTywgZXRjICovCisJCQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CisJfQorCiBvdXRfdW5sb2NrOgogCXVubG9ja19wYWdlKHBhZ2UpOwogCXJldHVybiByZXQ7CkBAIC0zMjgxLDcgKzMzMTYsNiBAQAogRVhQT1JUX1NZTUJPTChlbmRfYnVmZmVyX3JlYWRfc3luYyk7CiBFWFBPUlRfU1lNQk9MKGVuZF9idWZmZXJfd3JpdGVfc3luYyk7CiBFWFBPUlRfU1lNQk9MKGZpbGVfZnN5bmMpOwotRVhQT1JUX1NZTUJPTChmc3luY19iZGV2KTsKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19ibG9ja19ibWFwKTsKIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUpOwogRVhQT1JUX1NZTUJPTChpbml0X2J1ZmZlcik7CmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL0tjb25maWcgYi9mcy9jYWNoZWZpbGVzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlOWM2MQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NhY2hlZmlsZXMvS2NvbmZpZwpAQCAtMCwwICsxLDM5IEBACisKK2NvbmZpZyBDQUNIRUZJTEVTCisJdHJpc3RhdGUgIkZpbGVzeXN0ZW0gY2FjaGluZyBvbiBmaWxlcyIKKwlkZXBlbmRzIG9uIEZTQ0FDSEUgJiYgQkxPQ0sKKwloZWxwCisJICBUaGlzIHBlcm1pdHMgdXNlIG9mIGEgbW91bnRlZCBmaWxlc3lzdGVtIGFzIGEgY2FjaGUgZm9yIG90aGVyCisJICBmaWxlc3lzdGVtcyAtIHByaW1hcmlseSBuZXR3b3JraW5nIGZpbGVzeXN0ZW1zIC0gdGh1cyBhbGxvd2luZyBmYXN0CisJICBsb2NhbCBkaXNrIHRvIGVuaGFuY2UgdGhlIHNwZWVkIG9mIHNsb3dlciBkZXZpY2VzLgorCisJICBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2NhY2hlZmlsZXMudHh0IGZvciBtb3JlCisJICBpbmZvcm1hdGlvbi4KKworY29uZmlnIENBQ0hFRklMRVNfREVCVUcKKwlib29sICJEZWJ1ZyBDYWNoZUZpbGVzIgorCWRlcGVuZHMgb24gQ0FDSEVGSUxFUworCWhlbHAKKwkgIFRoaXMgcGVybWl0cyBkZWJ1Z2dpbmcgdG8gYmUgZHluYW1pY2FsbHkgZW5hYmxlZCBpbiB0aGUgZmlsZXN5c3RlbQorCSAgY2FjaGluZyBvbiBmaWxlcyBtb2R1bGUuICBJZiB0aGlzIGlzIHNldCwgdGhlIGRlYnVnZ2luZyBvdXRwdXQgbWF5IGJlCisJICBlbmFibGVkIGJ5IHNldHRpbmcgYml0cyBpbiAvc3lzL21vZHVsZXMvY2FjaGVmaWxlcy9wYXJhbWV0ZXIvZGVidWcgb3IKKwkgIGJ5IGluY2x1ZGluZyBhIGRlYnVnZ2luZyBzcGVjaWZpZXIgaW4gL2V0Yy9jYWNoZWZpbGVzZC5jb25mLgorCitjb25maWcgQ0FDSEVGSUxFU19ISVNUT0dSQU0KKwlib29sICJHYXRoZXIgbGF0ZW5jeSBpbmZvcm1hdGlvbiBvbiBDYWNoZUZpbGVzIgorCWRlcGVuZHMgb24gQ0FDSEVGSUxFUyAmJiBQUk9DX0ZTCisJaGVscAorCisJICBUaGlzIG9wdGlvbiBjYXVzZXMgbGF0ZW5jeSBpbmZvcm1hdGlvbiB0byBiZSBnYXRoZXJlZCBvbiBDYWNoZUZpbGVzCisJICBvcGVyYXRpb24gYW5kIGV4cG9ydGVkIHRocm91Z2ggZmlsZToKKworCQkvcHJvYy9mcy9jYWNoZWZpbGVzL2hpc3RvZ3JhbQorCisJICBUaGUgZ2VuZXJhdGlvbiBvZiB0aGlzIGhpc3RvZ3JhbSBhZGRzIGEgY2VydGFpbiBhbW91bnQgb2Ygb3ZlcmhlYWQgdG8KKwkgIGV4ZWN1dGlvbiBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcG9pbnRzIGF0IHdoaWNoIGRhdGEgaXMgZ2F0aGVyZWQsCisJICBhbmQgb24gYSBtdWx0aS1DUFUgc3lzdGVtIHRoZXNlIG1heSBiZSBvbiBjYWNoZWxpbmVzIHRoYXQga2VlcAorCSAgYm91bmNpbmcgYmV0d2VlbiBDUFVzLiAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSBoaXN0b2dyYW0gbWF5IGJlCisJICB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIFNheWluZyAnTicgaGVyZSBpcyByZWNvbW1lbmRlZC4KKworCSAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9jYWNoZWZpbGVzLnR4dCBmb3IgbW9yZQorCSAgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL01ha2VmaWxlIGIvZnMvY2FjaGVmaWxlcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmNiYWIwCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACisjCisjIE1ha2VmaWxlIGZvciBjYWNoaW5nIGluIGEgbW91bnRlZCBmaWxlc3lzdGVtCisjCisKK2NhY2hlZmlsZXMteSA6PSBcCisJYmluZC5vIFwKKwlkYWVtb24ubyBcCisJaW50ZXJmYWNlLm8gXAorCWtleS5vIFwKKwltYWluLm8gXAorCW5hbWVpLm8gXAorCXJkd3IubyBcCisJc2VjdXJpdHkubyBcCisJeGF0dHIubworCitjYWNoZWZpbGVzLSQoQ09ORklHX0NBQ0hFRklMRVNfSElTVE9HUkFNKSArPSBwcm9jLm8KKworb2JqLSQoQ09ORklHX0NBQ0hFRklMRVMpIDo9IGNhY2hlZmlsZXMubwpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9iaW5kLmMgYi9mcy9jYWNoZWZpbGVzL2JpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzk3ZTAwCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9iaW5kLmMKQEAgLTAsMCArMSwyODYgQEAKKy8qIEJpbmQgYW5kIHVuYmluZCBhIGNhY2hlIGZyb20gdGhlIGZpbGVzeXN0ZW0gYmFja2luZyBpdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2FkZF9jYWNoZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGVzKTsKKworLyoKKyAqIGJpbmQgYSBkaXJlY3RvcnkgYXMgYSBjYWNoZQorICovCitpbnQgY2FjaGVmaWxlc19kYWVtb25fYmluZChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpCit7CisJX2VudGVyKCJ7JXUsJXUsJXUsJXUsJXUsJXV9LCVzIiwKKwkgICAgICAgY2FjaGUtPmZydW5fcGVyY2VudCwKKwkgICAgICAgY2FjaGUtPmZjdWxsX3BlcmNlbnQsCisJICAgICAgIGNhY2hlLT5mc3RvcF9wZXJjZW50LAorCSAgICAgICBjYWNoZS0+YnJ1bl9wZXJjZW50LAorCSAgICAgICBjYWNoZS0+YmN1bGxfcGVyY2VudCwKKwkgICAgICAgY2FjaGUtPmJzdG9wX3BlcmNlbnQsCisJICAgICAgIGFyZ3MpOworCisJLyogc3RhcnQgYnkgY2hlY2tpbmcgdGhpbmdzIG92ZXIgKi8KKwlBU1NFUlQoY2FjaGUtPmZzdG9wX3BlcmNlbnQgPj0gMCAmJgorCSAgICAgICBjYWNoZS0+ZnN0b3BfcGVyY2VudCA8IGNhY2hlLT5mY3VsbF9wZXJjZW50ICYmCisJICAgICAgIGNhY2hlLT5mY3VsbF9wZXJjZW50IDwgY2FjaGUtPmZydW5fcGVyY2VudCAmJgorCSAgICAgICBjYWNoZS0+ZnJ1bl9wZXJjZW50ICA8IDEwMCk7CisKKwlBU1NFUlQoY2FjaGUtPmJzdG9wX3BlcmNlbnQgPj0gMCAmJgorCSAgICAgICBjYWNoZS0+YnN0b3BfcGVyY2VudCA8IGNhY2hlLT5iY3VsbF9wZXJjZW50ICYmCisJICAgICAgIGNhY2hlLT5iY3VsbF9wZXJjZW50IDwgY2FjaGUtPmJydW5fcGVyY2VudCAmJgorCSAgICAgICBjYWNoZS0+YnJ1bl9wZXJjZW50ICA8IDEwMCk7CisKKwlpZiAoKmFyZ3MpIHsKKwkJa2Vycm9yKCInYmluZCcgY29tbWFuZCBkb2Vzbid0IHRha2UgYW4gYXJndW1lbnQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFjYWNoZS0+cm9vdGRpcm5hbWUpIHsKKwkJa2Vycm9yKCJObyBjYWNoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGRvbid0IHBlcm1pdCBhbHJlYWR5IGJvdW5kIGNhY2hlcyB0byBiZSByZS1ib3VuZCAqLworCWlmICh0ZXN0X2JpdChDQUNIRUZJTEVTX1JFQURZLCAmY2FjaGUtPmZsYWdzKSkgeworCQlrZXJyb3IoIkNhY2hlIGFscmVhZHkgYm91bmQiKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBjb3BpZXMgb2YgdGhlIHRhZyBhbmQgZGlybmFtZSBzdHJpbmdzICovCisJaWYgKCFjYWNoZS0+dGFnKSB7CisJCS8qIHRoZSB0YWcgc3RyaW5nIGlzIHJlbGVhc2VkIGJ5IHRoZSBmb3BzLT5yZWxlYXNlKCkKKwkJICogZnVuY3Rpb24sIHNvIHdlIGRvbid0IHJlbGVhc2UgaXQgb24gZXJyb3IgaGVyZSAqLworCQljYWNoZS0+dGFnID0ga3N0cmR1cCgiQ2FjaGVGaWxlcyIsIEdGUF9LRVJORUwpOworCQlpZiAoIWNhY2hlLT50YWcpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBhZGQgdGhlIGNhY2hlICovCisJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX2FkZF9jYWNoZShjYWNoZSk7Cit9CisKKy8qCisgKiBhZGQgYSBjYWNoZQorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2FkZF9jYWNoZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpmc2RlZjsKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCXN0cnVjdCBrc3RhdGZzIHN0YXRzOworCXN0cnVjdCBkZW50cnkgKmdyYXZleWFyZCwgKmNhY2hlZGlyLCAqcm9vdDsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIiKTsKKworCS8qIHdlIHdhbnQgdG8gd29yayB1bmRlciB0aGUgbW9kdWxlJ3Mgc2VjdXJpdHkgSUQgKi8KKwlyZXQgPSBjYWNoZWZpbGVzX2dldF9zZWN1cml0eV9JRChjYWNoZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljYWNoZWZpbGVzX2JlZ2luX3NlY3VyZShjYWNoZSwgJnNhdmVkX2NyZWQpOworCisJLyogYWxsb2NhdGUgdGhlIHJvb3QgaW5kZXggb2JqZWN0ICovCisJcmV0ID0gLUVOT01FTTsKKworCWZzZGVmID0ga21lbV9jYWNoZV9hbGxvYyhjYWNoZWZpbGVzX29iamVjdF9qYXIsIEdGUF9LRVJORUwpOworCWlmICghZnNkZWYpCisJCWdvdG8gZXJyb3Jfcm9vdF9vYmplY3Q7CisKKwlBU1NFUlRDTVAoZnNkZWYtPmJhY2tlciwgPT0sIE5VTEwpOworCisJYXRvbWljX3NldCgmZnNkZWYtPnVzYWdlLCAxKTsKKwlmc2RlZi0+dHlwZSA9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVg7CisKKwlfZGVidWcoIi0gZnNkZWYgJXAiLCBmc2RlZik7CisKKwkvKiBsb29rIHVwIHRoZSBkaXJlY3RvcnkgYXQgdGhlIHJvb3Qgb2YgdGhlIGNhY2hlICovCisJbWVtc2V0KCZuZCwgMCwgc2l6ZW9mKG5kKSk7CisKKwlyZXQgPSBwYXRoX2xvb2t1cChjYWNoZS0+cm9vdGRpcm5hbWUsIExPT0tVUF9ESVJFQ1RPUlksICZuZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3Jfb3Blbl9yb290OworCisJY2FjaGUtPm1udCA9IG1udGdldChuZC5wYXRoLm1udCk7CisJcm9vdCA9IGRnZXQobmQucGF0aC5kZW50cnkpOworCXBhdGhfcHV0KCZuZC5wYXRoKTsKKworCS8qIGNoZWNrIHBhcmFtZXRlcnMgKi8KKwlyZXQgPSAtRU9QTk9UU1VQUDsKKwlpZiAoIXJvb3QtPmRfaW5vZGUgfHwKKwkgICAgIXJvb3QtPmRfaW5vZGUtPmlfb3AgfHwKKwkgICAgIXJvb3QtPmRfaW5vZGUtPmlfb3AtPmxvb2t1cCB8fAorCSAgICAhcm9vdC0+ZF9pbm9kZS0+aV9vcC0+bWtkaXIgfHwKKwkgICAgIXJvb3QtPmRfaW5vZGUtPmlfb3AtPnNldHhhdHRyIHx8CisJICAgICFyb290LT5kX2lub2RlLT5pX29wLT5nZXR4YXR0ciB8fAorCSAgICAhcm9vdC0+ZF9zYiB8fAorCSAgICAhcm9vdC0+ZF9zYi0+c19vcCB8fAorCSAgICAhcm9vdC0+ZF9zYi0+c19vcC0+c3RhdGZzIHx8CisJICAgICFyb290LT5kX3NiLT5zX29wLT5zeW5jX2ZzKQorCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOworCisJcmV0ID0gLUVST0ZTOworCWlmIChyb290LT5kX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQorCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOworCisJLyogZGV0ZXJtaW5lIHRoZSBzZWN1cml0eSBvZiB0aGUgb24tZGlzayBjYWNoZSBhcyB0aGlzIGdvdmVybnMKKwkgKiBzZWN1cml0eSBJRCBvZiBmaWxlcyB3ZSBjcmVhdGUgKi8KKwlyZXQgPSBjYWNoZWZpbGVzX2RldGVybWluZV9jYWNoZV9zZWN1cml0eShjYWNoZSwgcm9vdCwgJnNhdmVkX2NyZWQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOworCisJLyogZ2V0IHRoZSBjYWNoZSBzaXplIGFuZCBibG9ja3NpemUgKi8KKwlyZXQgPSB2ZnNfc3RhdGZzKHJvb3QsICZzdGF0cyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfdW5zdXBwb3J0ZWQ7CisKKwlyZXQgPSAtRVJBTkdFOworCWlmIChzdGF0cy5mX2JzaXplIDw9IDApCisJCWdvdG8gZXJyb3JfdW5zdXBwb3J0ZWQ7CisKKwlyZXQgPSAtRU9QTk9UU1VQUDsKKwlpZiAoc3RhdHMuZl9ic2l6ZSA+IFBBR0VfU0laRSkKKwkJZ290byBlcnJvcl91bnN1cHBvcnRlZDsKKworCWNhY2hlLT5ic2l6ZSA9IHN0YXRzLmZfYnNpemU7CisJY2FjaGUtPmJzaGlmdCA9IDA7CisJaWYgKHN0YXRzLmZfYnNpemUgPCBQQUdFX1NJWkUpCisJCWNhY2hlLT5ic2hpZnQgPSBQQUdFX1NISUZUIC0gaWxvZzIoc3RhdHMuZl9ic2l6ZSk7CisKKwlfZGVidWcoImJsa3NpemUgJXUgKHNoaWZ0ICV1KSIsCisJICAgICAgIGNhY2hlLT5ic2l6ZSwgY2FjaGUtPmJzaGlmdCk7CisKKwlfZGVidWcoInNpemUgJWxsdSwgYXZhaWwgJWxsdSIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXRzLmZfYmxvY2tzLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0cy5mX2JhdmFpbCk7CisKKwkvKiBzZXQgdXAgY2FjaGluZyBsaW1pdHMgKi8KKwlkb19kaXYoc3RhdHMuZl9maWxlcywgMTAwKTsKKwljYWNoZS0+ZnN0b3AgPSBzdGF0cy5mX2ZpbGVzICogY2FjaGUtPmZzdG9wX3BlcmNlbnQ7CisJY2FjaGUtPmZjdWxsID0gc3RhdHMuZl9maWxlcyAqIGNhY2hlLT5mY3VsbF9wZXJjZW50OworCWNhY2hlLT5mcnVuICA9IHN0YXRzLmZfZmlsZXMgKiBjYWNoZS0+ZnJ1bl9wZXJjZW50OworCisJX2RlYnVnKCJsaW1pdHMgeyVsbHUsJWxsdSwlbGx1fSBmaWxlcyIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mcnVuLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjYWNoZS0+ZmN1bGwsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mc3RvcCk7CisKKwlzdGF0cy5mX2Jsb2NrcyA+Pj0gY2FjaGUtPmJzaGlmdDsKKwlkb19kaXYoc3RhdHMuZl9ibG9ja3MsIDEwMCk7CisJY2FjaGUtPmJzdG9wID0gc3RhdHMuZl9ibG9ja3MgKiBjYWNoZS0+YnN0b3BfcGVyY2VudDsKKwljYWNoZS0+YmN1bGwgPSBzdGF0cy5mX2Jsb2NrcyAqIGNhY2hlLT5iY3VsbF9wZXJjZW50OworCWNhY2hlLT5icnVuICA9IHN0YXRzLmZfYmxvY2tzICogY2FjaGUtPmJydW5fcGVyY2VudDsKKworCV9kZWJ1ZygibGltaXRzIHslbGx1LCVsbHUsJWxsdX0gYmxvY2tzIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJydW4sCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5iY3VsbCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJzdG9wKTsKKworCS8qIGdldCB0aGUgY2FjaGUgZGlyZWN0b3J5IGFuZCBjaGVjayBpdHMgdHlwZSAqLworCWNhY2hlZGlyID0gY2FjaGVmaWxlc19nZXRfZGlyZWN0b3J5KGNhY2hlLCByb290LCAiY2FjaGUiKTsKKwlpZiAoSVNfRVJSKGNhY2hlZGlyKSkgeworCQlyZXQgPSBQVFJfRVJSKGNhY2hlZGlyKTsKKwkJZ290byBlcnJvcl91bnN1cHBvcnRlZDsKKwl9CisKKwlmc2RlZi0+ZGVudHJ5ID0gY2FjaGVkaXI7CisJZnNkZWYtPmZzY2FjaGUuY29va2llID0gTlVMTDsKKworCXJldCA9IGNhY2hlZmlsZXNfY2hlY2tfb2JqZWN0X3R5cGUoZnNkZWYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX3Vuc3VwcG9ydGVkOworCisJLyogZ2V0IHRoZSBncmF2ZXlhcmQgZGlyZWN0b3J5ICovCisJZ3JhdmV5YXJkID0gY2FjaGVmaWxlc19nZXRfZGlyZWN0b3J5KGNhY2hlLCByb290LCAiZ3JhdmV5YXJkIik7CisJaWYgKElTX0VSUihncmF2ZXlhcmQpKSB7CisJCXJldCA9IFBUUl9FUlIoZ3JhdmV5YXJkKTsKKwkJZ290byBlcnJvcl91bnN1cHBvcnRlZDsKKwl9CisKKwljYWNoZS0+Z3JhdmV5YXJkID0gZ3JhdmV5YXJkOworCisJLyogcHVibGlzaCB0aGUgY2FjaGUgKi8KKwlmc2NhY2hlX2luaXRfY2FjaGUoJmNhY2hlLT5jYWNoZSwKKwkJCSAgICZjYWNoZWZpbGVzX2NhY2hlX29wcywKKwkJCSAgICIlcyIsCisJCQkgICBmc2RlZi0+ZGVudHJ5LT5kX3NiLT5zX2lkKTsKKworCWZzY2FjaGVfb2JqZWN0X2luaXQoJmZzZGVmLT5mc2NhY2hlLCBOVUxMLCAmY2FjaGUtPmNhY2hlKTsKKworCXJldCA9IGZzY2FjaGVfYWRkX2NhY2hlKCZjYWNoZS0+Y2FjaGUsICZmc2RlZi0+ZnNjYWNoZSwgY2FjaGUtPnRhZyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfYWRkX2NhY2hlOworCisJLyogZG9uZSAqLworCXNldF9iaXQoQ0FDSEVGSUxFU19SRUFEWSwgJmNhY2hlLT5mbGFncyk7CisJZHB1dChyb290KTsKKworCXByaW50ayhLRVJOX0lORk8gIkNhY2hlRmlsZXM6IgorCSAgICAgICAiIEZpbGUgY2FjaGUgb24gJXMgcmVnaXN0ZXJlZFxuIiwKKwkgICAgICAgY2FjaGUtPmNhY2hlLmlkZW50aWZpZXIpOworCisJLyogY2hlY2sgaG93IG11Y2ggc3BhY2UgdGhlIGNhY2hlIGhhcyAqLworCWNhY2hlZmlsZXNfaGFzX3NwYWNlKGNhY2hlLCAwLCAwKTsKKwljYWNoZWZpbGVzX2VuZF9zZWN1cmUoY2FjaGUsIHNhdmVkX2NyZWQpOworCXJldHVybiAwOworCitlcnJvcl9hZGRfY2FjaGU6CisJZHB1dChjYWNoZS0+Z3JhdmV5YXJkKTsKKwljYWNoZS0+Z3JhdmV5YXJkID0gTlVMTDsKK2Vycm9yX3Vuc3VwcG9ydGVkOgorCW1udHB1dChjYWNoZS0+bW50KTsKKwljYWNoZS0+bW50ID0gTlVMTDsKKwlkcHV0KGZzZGVmLT5kZW50cnkpOworCWZzZGVmLT5kZW50cnkgPSBOVUxMOworCWRwdXQocm9vdCk7CitlcnJvcl9vcGVuX3Jvb3Q6CisJa21lbV9jYWNoZV9mcmVlKGNhY2hlZmlsZXNfb2JqZWN0X2phciwgZnNkZWYpOworZXJyb3Jfcm9vdF9vYmplY3Q6CisJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKKwlrZXJyb3IoIkZhaWxlZCB0byByZWdpc3RlcjogJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB1bmJpbmQgYSBjYWNoZSBvbiBmZCByZWxlYXNlCisgKi8KK3ZvaWQgY2FjaGVmaWxlc19kYWVtb25fdW5iaW5kKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSkKK3sKKwlfZW50ZXIoIiIpOworCisJaWYgKHRlc3RfYml0KENBQ0hFRklMRVNfUkVBRFksICZjYWNoZS0+ZmxhZ3MpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNhY2hlRmlsZXM6IgorCQkgICAgICAgIiBGaWxlIGNhY2hlIG9uICVzIHVucmVnaXN0ZXJpbmdcbiIsCisJCSAgICAgICBjYWNoZS0+Y2FjaGUuaWRlbnRpZmllcik7CisKKwkJZnNjYWNoZV93aXRoZHJhd19jYWNoZSgmY2FjaGUtPmNhY2hlKTsKKwl9CisKKwlkcHV0KGNhY2hlLT5ncmF2ZXlhcmQpOworCW1udHB1dChjYWNoZS0+bW50KTsKKworCWtmcmVlKGNhY2hlLT5yb290ZGlybmFtZSk7CisJa2ZyZWUoY2FjaGUtPnNlY2N0eCk7CisJa2ZyZWUoY2FjaGUtPnRhZyk7CisKKwlfbGVhdmUoIiIpOworfQpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9kYWVtb24uYyBiL2ZzL2NhY2hlZmlsZXMvZGFlbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYxODUxNgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NhY2hlZmlsZXMvZGFlbW9uLmMKQEAgLTAsMCArMSw3NTUgQEAKKy8qIERhZW1vbiBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworc3RhdGljIHNzaXplX3QgY2FjaGVmaWxlc19kYWVtb25fcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsCisJCQkJICAgICAgbG9mZl90ICopOworc3RhdGljIHNzaXplX3QgY2FjaGVmaWxlc19kYWVtb25fd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwKKwkJCQkgICAgICAgc2l6ZV90LCBsb2ZmX3QgKik7CitzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlZmlsZXNfZGFlbW9uX3BvbGwoc3RydWN0IGZpbGUgKiwKKwkJCQkJICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9mcnVuKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICosIGNoYXIgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2ZjdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICosIGNoYXIgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2ZzdG9wKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICosIGNoYXIgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2JydW4oc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fYmN1bGwoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fYnN0b3Aoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fY3VsbChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqLCBjaGFyICopOworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9kZWJ1ZyhzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqLCBjaGFyICopOworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25faW51c2Uoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKiwgY2hhciAqKTsKK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fc2VjY3R4KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICosIGNoYXIgKik7CitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX3RhZyhzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqLCBjaGFyICopOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWNoZWZpbGVzX29wZW47CisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FjaGVmaWxlc19kYWVtb25fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY2FjaGVmaWxlc19kYWVtb25fb3BlbiwKKwkucmVsZWFzZQk9IGNhY2hlZmlsZXNfZGFlbW9uX3JlbGVhc2UsCisJLnJlYWQJCT0gY2FjaGVmaWxlc19kYWVtb25fcmVhZCwKKwkud3JpdGUJCT0gY2FjaGVmaWxlc19kYWVtb25fd3JpdGUsCisJLnBvbGwJCT0gY2FjaGVmaWxlc19kYWVtb25fcG9sbCwKK307CisKK3N0cnVjdCBjYWNoZWZpbGVzX2RhZW1vbl9jbWQgeworCWNoYXIgbmFtZVs4XTsKKwlpbnQgKCpoYW5kbGVyKShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjYWNoZWZpbGVzX2RhZW1vbl9jbWQgY2FjaGVmaWxlc19kYWVtb25fY21kc1tdID0geworCXsgImJpbmQiLAljYWNoZWZpbGVzX2RhZW1vbl9iaW5kCQl9LAorCXsgImJydW4iLAljYWNoZWZpbGVzX2RhZW1vbl9icnVuCQl9LAorCXsgImJjdWxsIiwJY2FjaGVmaWxlc19kYWVtb25fYmN1bGwJCX0sCisJeyAiYnN0b3AiLAljYWNoZWZpbGVzX2RhZW1vbl9ic3RvcAkJfSwKKwl7ICJjdWxsIiwJY2FjaGVmaWxlc19kYWVtb25fY3VsbAkJfSwKKwl7ICJkZWJ1ZyIsCWNhY2hlZmlsZXNfZGFlbW9uX2RlYnVnCQl9LAorCXsgImRpciIsCWNhY2hlZmlsZXNfZGFlbW9uX2RpcgkJfSwKKwl7ICJmcnVuIiwJY2FjaGVmaWxlc19kYWVtb25fZnJ1bgkJfSwKKwl7ICJmY3VsbCIsCWNhY2hlZmlsZXNfZGFlbW9uX2ZjdWxsCQl9LAorCXsgImZzdG9wIiwJY2FjaGVmaWxlc19kYWVtb25fZnN0b3AJCX0sCisJeyAiaW51c2UiLAljYWNoZWZpbGVzX2RhZW1vbl9pbnVzZQkJfSwKKwl7ICJzZWNjdHgiLAljYWNoZWZpbGVzX2RhZW1vbl9zZWNjdHgJfSwKKwl7ICJ0YWciLAljYWNoZWZpbGVzX2RhZW1vbl90YWcJCX0sCisJeyAiIiwJCU5VTEwJCQkJfQorfTsKKworCisvKgorICogZG8gdmFyaW91cyBjaGVja3MKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKworCV9lbnRlcigiIik7CisKKwkvKiBvbmx5IHRoZSBzdXBlcnVzZXIgbWF5IGRvIHRoaXMgKi8KKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiB0aGUgY2FjaGVmaWxlcyBkZXZpY2UgbWF5IG9ubHkgYmUgb3BlbiBvbmNlIGF0IGEgdGltZSAqLworCWlmICh4Y2hnKCZjYWNoZWZpbGVzX29wZW4sIDEpID09IDEpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBhbGxvY2F0ZSBhIGNhY2hlIHJlY29yZCAqLworCWNhY2hlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhY2hlKSB7CisJCWNhY2hlZmlsZXNfb3BlbiA9IDA7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW11dGV4X2luaXQoJmNhY2hlLT5kYWVtb25fbXV0ZXgpOworCWNhY2hlLT5hY3RpdmVfbm9kZXMgPSBSQl9ST09UOworCXJ3bG9ja19pbml0KCZjYWNoZS0+YWN0aXZlX2xvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhY2hlLT5kYWVtb25fcG9sbHdxKTsKKworCS8qIHNldCBkZWZhdWx0IGNhY2hpbmcgbGltaXRzCisJICogLSBsaW1pdCBhdCAxJSBmcmVlIHNwYWNlIGFuZC9vciBmcmVlIGZpbGVzCisJICogLSBjdWxsIGJlbG93IDUlIGZyZWUgc3BhY2UgYW5kL29yIGZyZWUgZmlsZXMKKwkgKiAtIGNlYXNlIGN1bGxpbmcgYWJvdmUgNyUgZnJlZSBzcGFjZSBhbmQvb3IgZnJlZSBmaWxlcworCSAqLworCWNhY2hlLT5mcnVuX3BlcmNlbnQgPSA3OworCWNhY2hlLT5mY3VsbF9wZXJjZW50ID0gNTsKKwljYWNoZS0+ZnN0b3BfcGVyY2VudCA9IDE7CisJY2FjaGUtPmJydW5fcGVyY2VudCA9IDc7CisJY2FjaGUtPmJjdWxsX3BlcmNlbnQgPSA1OworCWNhY2hlLT5ic3RvcF9wZXJjZW50ID0gMTsKKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNhY2hlOworCWNhY2hlLT5jYWNoZWZpbGVzZCA9IGZpbGU7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZWxlYXNlIGEgY2FjaGUKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCV9lbnRlcigiIik7CisKKwlBU1NFUlQoY2FjaGUpOworCisJc2V0X2JpdChDQUNIRUZJTEVTX0RFQUQsICZjYWNoZS0+ZmxhZ3MpOworCisJY2FjaGVmaWxlc19kYWVtb25fdW5iaW5kKGNhY2hlKTsKKworCUFTU0VSVCghY2FjaGUtPmFjdGl2ZV9ub2Rlcy5yYl9ub2RlKTsKKworCS8qIGNsZWFuIHVwIHRoZSBjb250cm9sIGZpbGUgaW50ZXJmYWNlICovCisJY2FjaGUtPmNhY2hlZmlsZXNkID0gTlVMTDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCWNhY2hlZmlsZXNfb3BlbiA9IDA7CisKKwlrZnJlZShjYWNoZSk7CisKKwlfbGVhdmUoIiIpOworCXJldHVybiAwOworfQorCisvKgorICogcmVhZCB0aGUgY2FjaGUgc3RhdGUKKyAqLworc3RhdGljIHNzaXplX3QgY2FjaGVmaWxlc19kYWVtb25fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKl9idWZmZXIsCisJCQkJICAgICAgc2l6ZV90IGJ1ZmxlbiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmZmVyWzI1Nl07CisJaW50IG47CisKKwkvL19lbnRlcigiLCwlenUsIiwgYnVmbGVuKTsKKworCWlmICghdGVzdF9iaXQoQ0FDSEVGSUxFU19SRUFEWSwgJmNhY2hlLT5mbGFncykpCisJCXJldHVybiAwOworCisJLyogY2hlY2sgaG93IG11Y2ggc3BhY2UgdGhlIGNhY2hlIGhhcyAqLworCWNhY2hlZmlsZXNfaGFzX3NwYWNlKGNhY2hlLCAwLCAwKTsKKworCS8qIHN1bW1hcmlzZSAqLworCWNsZWFyX2JpdChDQUNIRUZJTEVTX1NUQVRFX0NIQU5HRUQsICZjYWNoZS0+ZmxhZ3MpOworCisJbiA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisJCSAgICAgImN1bGw9JWMiCisJCSAgICAgIiBmcnVuPSVsbHgiCisJCSAgICAgIiBmY3VsbD0lbGx4IgorCQkgICAgICIgZnN0b3A9JWxseCIKKwkJICAgICAiIGJydW49JWxseCIKKwkJICAgICAiIGJjdWxsPSVsbHgiCisJCSAgICAgIiBic3RvcD0lbGx4IiwKKwkJICAgICB0ZXN0X2JpdChDQUNIRUZJTEVTX0NVTExJTkcsICZjYWNoZS0+ZmxhZ3MpID8gJzEnIDogJzAnLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mcnVuLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mY3VsbCwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjYWNoZS0+ZnN0b3AsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJydW4sCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJjdWxsLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5ic3RvcAorCQkgICAgICk7CisKKwlpZiAobiA+IGJ1ZmxlbikKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCWlmIChjb3B5X3RvX3VzZXIoX2J1ZmZlciwgYnVmZmVyLCBuKSAhPSAwKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBuOworfQorCisvKgorICogY29tbWFuZCB0aGUgY2FjaGUKKyAqLworc3RhdGljIHNzaXplX3QgY2FjaGVmaWxlc19kYWVtb25fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICpfZGF0YSwKKwkJCQkgICAgICAgc2l6ZV90IGRhdGFsZW4sCisJCQkJICAgICAgIGxvZmZfdCAqcG9zKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZWZpbGVzX2RhZW1vbl9jbWQgKmNtZDsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3NpemVfdCByZXQ7CisJY2hhciAqZGF0YSwgKmFyZ3MsICpjcDsKKworCS8vX2VudGVyKCIsLCV6dSwiLCBkYXRhbGVuKTsKKworCUFTU0VSVChjYWNoZSk7CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19ERUFELCAmY2FjaGUtPmZsYWdzKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoZGF0YWxlbiA8IDAgfHwgZGF0YWxlbiA+IFBBR0VfU0laRSAtIDEpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIGRyYWcgdGhlIGNvbW1hbmQgc3RyaW5nIGludG8gdGhlIGtlcm5lbCBzbyB3ZSBjYW4gcGFyc2UgaXQgKi8KKwlkYXRhID0ga21hbGxvYyhkYXRhbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEsIF9kYXRhLCBkYXRhbGVuKSAhPSAwKQorCQlnb3RvIGVycm9yOworCisJZGF0YVtkYXRhbGVuXSA9ICdcMCc7CisKKwlyZXQgPSAtRUlOVkFMOworCWlmIChtZW1jaHIoZGF0YSwgJ1wwJywgZGF0YWxlbikpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBzdHJpcCBhbnkgbmV3bGluZSAqLworCWNwID0gbWVtY2hyKGRhdGEsICdcbicsIGRhdGFsZW4pOworCWlmIChjcCkgeworCQlpZiAoY3AgPT0gZGF0YSkKKwkJCWdvdG8gZXJyb3I7CisKKwkJKmNwID0gJ1wwJzsKKwl9CisKKwkvKiBwYXJzZSB0aGUgY29tbWFuZCAqLworCXJldCA9IC1FT1BOT1RTVVBQOworCisJZm9yIChhcmdzID0gZGF0YTsgKmFyZ3M7IGFyZ3MrKykKKwkJaWYgKGlzc3BhY2UoKmFyZ3MpKQorCQkJYnJlYWs7CisJaWYgKCphcmdzKSB7CisJCWlmIChhcmdzID09IGRhdGEpCisJCQlnb3RvIGVycm9yOworCQkqYXJncyA9ICdcMCc7CisJCWZvciAoYXJncysrOyBpc3NwYWNlKCphcmdzKTsgYXJncysrKQorCQkJY29udGludWU7CisJfQorCisJLyogcnVuIHRoZSBhcHByb3ByaWF0ZSBjb21tYW5kIGhhbmRsZXIgKi8KKwlmb3IgKGNtZCA9IGNhY2hlZmlsZXNfZGFlbW9uX2NtZHM7IGNtZC0+bmFtZVswXTsgY21kKyspCisJCWlmIChzdHJjbXAoY21kLT5uYW1lLCBkYXRhKSA9PSAwKQorCQkJZ290byBmb3VuZF9jb21tYW5kOworCitlcnJvcjoKKwlrZnJlZShkYXRhKTsKKwkvL19sZWF2ZSgiID0gJXpkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitmb3VuZF9jb21tYW5kOgorCW11dGV4X2xvY2soJmNhY2hlLT5kYWVtb25fbXV0ZXgpOworCisJcmV0ID0gLUVJTzsKKwlpZiAoIXRlc3RfYml0KENBQ0hFRklMRVNfREVBRCwgJmNhY2hlLT5mbGFncykpCisJCXJldCA9IGNtZC0+aGFuZGxlcihjYWNoZSwgYXJncyk7CisKKwltdXRleF91bmxvY2soJmNhY2hlLT5kYWVtb25fbXV0ZXgpOworCisJaWYgKHJldCA9PSAwKQorCQlyZXQgPSBkYXRhbGVuOworCWdvdG8gZXJyb3I7Cit9CisKKy8qCisgKiBwb2xsIGZvciBjdWxsaW5nIHN0YXRlCisgKiAtIHVzZSBQT0xMT1VUIHRvIGluZGljYXRlIGN1bGxpbmcgc3RhdGUKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBjYWNoZWZpbGVzX2RhZW1vbl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKnBvbGwpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBtYXNrOworCisJcG9sbF93YWl0KGZpbGUsICZjYWNoZS0+ZGFlbW9uX3BvbGx3cSwgcG9sbCk7CisJbWFzayA9IDA7CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19TVEFURV9DSEFOR0VELCAmY2FjaGUtPmZsYWdzKSkKKwkJbWFzayB8PSBQT0xMSU47CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19DVUxMSU5HLCAmY2FjaGUtPmZsYWdzKSkKKwkJbWFzayB8PSBQT0xMT1VUOworCisJcmV0dXJuIG1hc2s7Cit9CisKKy8qCisgKiBnaXZlIGEgcmFuZ2UgZXJyb3IgZm9yIGNhY2hlIHNwYWNlIGNvbnN0cmFpbnRzCisgKiAtIGNhbiBiZSB0YWlsLWNhbGxlZAorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJIGNoYXIgKmFyZ3MpCit7CisJa2Vycm9yKCJGcmVlIHNwYWNlIGxpbWl0cyBtdXN0IGJlIGluIHJhbmdlIgorCSAgICAgICAiIDAlJTw9c3RvcDxjdWxsPHJ1bjwxMDAlJSIpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBzZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgZmlsZXMgYXQgd2hpY2ggdG8gc3RvcCBjdWxsaW5nCisgKiAtIGNvbW1hbmQ6ICJmcnVuIDxOPiUiCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fZnJ1bihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpCit7CisJdW5zaWduZWQgbG9uZyBmcnVuOworCisJX2VudGVyKCIsJXMiLCBhcmdzKTsKKworCWlmICghKmFyZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJZnJ1biA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3MsICZhcmdzLCAxMCk7CisJaWYgKGFyZ3NbMF0gIT0gJyUnIHx8IGFyZ3NbMV0gIT0gJ1wwJykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZnJ1biA8PSBjYWNoZS0+ZmN1bGxfcGVyY2VudCB8fCBmcnVuID49IDEwMCkKKwkJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKGNhY2hlLCBhcmdzKTsKKworCWNhY2hlLT5mcnVuX3BlcmNlbnQgPSBmcnVuOworCXJldHVybiAwOworfQorCisvKgorICogc2V0IHRoZSBwZXJjZW50YWdlIG9mIGZpbGVzIGF0IHdoaWNoIHRvIHN0YXJ0IGN1bGxpbmcKKyAqIC0gY29tbWFuZDogImZjdWxsIDxOPiUiCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fZmN1bGwoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCXVuc2lnbmVkIGxvbmcgZmN1bGw7CisKKwlfZW50ZXIoIiwlcyIsIGFyZ3MpOworCisJaWYgKCEqYXJncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmY3VsbCA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3MsICZhcmdzLCAxMCk7CisJaWYgKGFyZ3NbMF0gIT0gJyUnIHx8IGFyZ3NbMV0gIT0gJ1wwJykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZmN1bGwgPD0gY2FjaGUtPmZzdG9wX3BlcmNlbnQgfHwgZmN1bGwgPj0gY2FjaGUtPmZydW5fcGVyY2VudCkKKwkJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKGNhY2hlLCBhcmdzKTsKKworCWNhY2hlLT5mY3VsbF9wZXJjZW50ID0gZmN1bGw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgZmlsZXMgYXQgd2hpY2ggdG8gc3RvcCBhbGxvY2F0aW5nCisgKiAtIGNvbW1hbmQ6ICJmc3RvcCA8Tj4lIgorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2ZzdG9wKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwl1bnNpZ25lZCBsb25nIGZzdG9wOworCisJX2VudGVyKCIsJXMiLCBhcmdzKTsKKworCWlmICghKmFyZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJZnN0b3AgPSBzaW1wbGVfc3RydG91bChhcmdzLCAmYXJncywgMTApOworCWlmIChhcmdzWzBdICE9ICclJyB8fCBhcmdzWzFdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZzdG9wIDwgMCB8fCBmc3RvcCA+PSBjYWNoZS0+ZmN1bGxfcGVyY2VudCkKKwkJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKGNhY2hlLCBhcmdzKTsKKworCWNhY2hlLT5mc3RvcF9wZXJjZW50ID0gZnN0b3A7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgYmxvY2tzIGF0IHdoaWNoIHRvIHN0b3AgY3VsbGluZworICogLSBjb21tYW5kOiAiYnJ1biA8Tj4lIgorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2JydW4oc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCXVuc2lnbmVkIGxvbmcgYnJ1bjsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoISphcmdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJydW4gPSBzaW1wbGVfc3RydG91bChhcmdzLCAmYXJncywgMTApOworCWlmIChhcmdzWzBdICE9ICclJyB8fCBhcmdzWzFdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJydW4gPD0gY2FjaGUtPmJjdWxsX3BlcmNlbnQgfHwgYnJ1biA+PSAxMDApCisJCXJldHVybiBjYWNoZWZpbGVzX2RhZW1vbl9yYW5nZV9lcnJvcihjYWNoZSwgYXJncyk7CisKKwljYWNoZS0+YnJ1bl9wZXJjZW50ID0gYnJ1bjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNldCB0aGUgcGVyY2VudGFnZSBvZiBibG9ja3MgYXQgd2hpY2ggdG8gc3RhcnQgY3VsbGluZworICogLSBjb21tYW5kOiAiYmN1bGwgPE4+JSIKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9iY3VsbChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpCit7CisJdW5zaWduZWQgbG9uZyBiY3VsbDsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoISphcmdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJjdWxsID0gc2ltcGxlX3N0cnRvdWwoYXJncywgJmFyZ3MsIDEwKTsKKwlpZiAoYXJnc1swXSAhPSAnJScgfHwgYXJnc1sxXSAhPSAnXDAnKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChiY3VsbCA8PSBjYWNoZS0+YnN0b3BfcGVyY2VudCB8fCBiY3VsbCA+PSBjYWNoZS0+YnJ1bl9wZXJjZW50KQorCQlyZXR1cm4gY2FjaGVmaWxlc19kYWVtb25fcmFuZ2VfZXJyb3IoY2FjaGUsIGFyZ3MpOworCisJY2FjaGUtPmJjdWxsX3BlcmNlbnQgPSBiY3VsbDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNldCB0aGUgcGVyY2VudGFnZSBvZiBibG9ja3MgYXQgd2hpY2ggdG8gc3RvcCBhbGxvY2F0aW5nCisgKiAtIGNvbW1hbmQ6ICJic3RvcCA8Tj4lIgorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2JzdG9wKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwl1bnNpZ25lZCBsb25nIGJzdG9wOworCisJX2VudGVyKCIsJXMiLCBhcmdzKTsKKworCWlmICghKmFyZ3MpCisJCXJldHVybiAtRUlOVkFMOworCisJYnN0b3AgPSBzaW1wbGVfc3RydG91bChhcmdzLCAmYXJncywgMTApOworCWlmIChhcmdzWzBdICE9ICclJyB8fCBhcmdzWzFdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJzdG9wIDwgMCB8fCBic3RvcCA+PSBjYWNoZS0+YmN1bGxfcGVyY2VudCkKKwkJcmV0dXJuIGNhY2hlZmlsZXNfZGFlbW9uX3JhbmdlX2Vycm9yKGNhY2hlLCBhcmdzKTsKKworCWNhY2hlLT5ic3RvcF9wZXJjZW50ID0gYnN0b3A7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIGNhY2hlIGRpcmVjdG9yeQorICogLSBjb21tYW5kOiAiZGlyIDxuYW1lPiIKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9kaXIoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCWNoYXIgKmRpcjsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoISphcmdzKSB7CisJCWtlcnJvcigiRW1wdHkgZGlyZWN0b3J5IHNwZWNpZmllZCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY2FjaGUtPnJvb3RkaXJuYW1lKSB7CisJCWtlcnJvcigiU2Vjb25kIGNhY2hlIGRpcmVjdG9yeSBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJZGlyID0ga3N0cmR1cChhcmdzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRpcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYWNoZS0+cm9vdGRpcm5hbWUgPSBkaXI7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzZXQgdGhlIGNhY2hlIHNlY3VyaXR5IGNvbnRleHQKKyAqIC0gY29tbWFuZDogInNlY2N0eCA8Y3R4PiIKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9zZWNjdHgoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCWNoYXIgKnNlY2N0eDsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoISphcmdzKSB7CisJCWtlcnJvcigiRW1wdHkgc2VjdXJpdHkgY29udGV4dCBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNhY2hlLT5zZWNjdHgpIHsKKwkJa2Vycm9yKCJTZWNvbmQgc2VjdXJpdHkgY29udGV4dCBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2VjY3R4ID0ga3N0cmR1cChhcmdzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNlY2N0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYWNoZS0+c2VjY3R4ID0gc2VjY3R4OworCXJldHVybiAwOworfQorCisvKgorICogc2V0IHRoZSBjYWNoZSB0YWcKKyAqIC0gY29tbWFuZDogInRhZyA8bmFtZT4iCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25fdGFnKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwljaGFyICp0YWc7CisKKwlfZW50ZXIoIiwlcyIsIGFyZ3MpOworCisJaWYgKCEqYXJncykgeworCQlrZXJyb3IoIkVtcHR5IHRhZyBzcGVjaWZpZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNhY2hlLT50YWcpCisJCXJldHVybiAtRUVYSVNUOworCisJdGFnID0ga3N0cmR1cChhcmdzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRhZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljYWNoZS0+dGFnID0gdGFnOworCXJldHVybiAwOworfQorCisvKgorICogcmVxdWVzdCBhIG5vZGUgaW4gdGhlIGNhY2hlIGJlIGN1bGxlZCBmcm9tIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CisgKiAtIGNvbW1hbmQ6ICJjdWxsIDxuYW1lPiIKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2RhZW1vbl9jdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmczsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXI7CisJY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQ7CisJaW50IHJldDsKKworCV9lbnRlcigiLCVzIiwgYXJncyk7CisKKwlpZiAoc3RyY2hyKGFyZ3MsICcvJykpCisJCWdvdG8gaW52YWw7CisKKwlpZiAoIXRlc3RfYml0KENBQ0hFRklMRVNfUkVBRFksICZjYWNoZS0+ZmxhZ3MpKSB7CisJCWtlcnJvcigiY3VsbCBhcHBsaWVkIHRvIHVucmVhZHkgY2FjaGUiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKHRlc3RfYml0KENBQ0hFRklMRVNfREVBRCwgJmNhY2hlLT5mbGFncykpIHsKKwkJa2Vycm9yKCJjdWxsIGFwcGxpZWQgdG8gZGVhZCBjYWNoZSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBleHRyYWN0IHRoZSBkaXJlY3RvcnkgZGVudHJ5IGZyb20gdGhlIGN3ZCAqLworCWZzID0gY3VycmVudC0+ZnM7CisJcmVhZF9sb2NrKCZmcy0+bG9jayk7CisJZGlyID0gZGdldChmcy0+cHdkLmRlbnRyeSk7CisJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKKworCWlmICghU19JU0RJUihkaXItPmRfaW5vZGUtPmlfbW9kZSkpCisJCWdvdG8gbm90ZGlyOworCisJY2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsICZzYXZlZF9jcmVkKTsKKwlyZXQgPSBjYWNoZWZpbGVzX2N1bGwoY2FjaGUsIGRpciwgYXJncyk7CisJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKKworCWRwdXQoZGlyKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitub3RkaXI6CisJZHB1dChkaXIpOworCWtlcnJvcigiY3VsbCBjb21tYW5kIHJlcXVpcmVzIGRpcmZkIHRvIGJlIGEgZGlyZWN0b3J5Iik7CisJcmV0dXJuIC1FTk9URElSOworCitpbnZhbDoKKwlrZXJyb3IoImN1bGwgY29tbWFuZCByZXF1aXJlcyBkaXJmZCBhbmQgZmlsZW5hbWUiKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIHNldCBkZWJ1Z2dpbmcgbW9kZQorICogLSBjb21tYW5kOiAiZGVidWcgPG1hc2s+IgorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfZGFlbW9uX2RlYnVnKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgY2hhciAqYXJncykKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwlfZW50ZXIoIiwlcyIsIGFyZ3MpOworCisJbWFzayA9IHNpbXBsZV9zdHJ0b3VsKGFyZ3MsICZhcmdzLCAwKTsKKwlpZiAoYXJnc1swXSAhPSAnXDAnKQorCQlnb3RvIGludmFsOworCisJY2FjaGVmaWxlc19kZWJ1ZyA9IG1hc2s7CisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7CisKK2ludmFsOgorCWtlcnJvcigiZGVidWcgY29tbWFuZCByZXF1aXJlcyBtYXNrIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qCisgKiBmaW5kIG91dCB3aGV0aGVyIGFuIG9iamVjdCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyBpbiB1c2Ugb3Igbm90CisgKiAtIGNvbW1hbmQ6ICJpbnVzZSA8bmFtZT4iCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19kYWVtb25faW51c2Uoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLCBjaGFyICphcmdzKQoreworCXN0cnVjdCBmc19zdHJ1Y3QgKmZzOworCXN0cnVjdCBkZW50cnkgKmRpcjsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKKwlpbnQgcmV0OworCisJLy9fZW50ZXIoIiwlcyIsIGFyZ3MpOworCisJaWYgKHN0cmNocihhcmdzLCAnLycpKQorCQlnb3RvIGludmFsOworCisJaWYgKCF0ZXN0X2JpdChDQUNIRUZJTEVTX1JFQURZLCAmY2FjaGUtPmZsYWdzKSkgeworCQlrZXJyb3IoImludXNlIGFwcGxpZWQgdG8gdW5yZWFkeSBjYWNoZSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19ERUFELCAmY2FjaGUtPmZsYWdzKSkgeworCQlrZXJyb3IoImludXNlIGFwcGxpZWQgdG8gZGVhZCBjYWNoZSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBleHRyYWN0IHRoZSBkaXJlY3RvcnkgZGVudHJ5IGZyb20gdGhlIGN3ZCAqLworCWZzID0gY3VycmVudC0+ZnM7CisJcmVhZF9sb2NrKCZmcy0+bG9jayk7CisJZGlyID0gZGdldChmcy0+cHdkLmRlbnRyeSk7CisJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKKworCWlmICghU19JU0RJUihkaXItPmRfaW5vZGUtPmlfbW9kZSkpCisJCWdvdG8gbm90ZGlyOworCisJY2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsICZzYXZlZF9jcmVkKTsKKwlyZXQgPSBjYWNoZWZpbGVzX2NoZWNrX2luX3VzZShjYWNoZSwgZGlyLCBhcmdzKTsKKwljYWNoZWZpbGVzX2VuZF9zZWN1cmUoY2FjaGUsIHNhdmVkX2NyZWQpOworCisJZHB1dChkaXIpOworCS8vX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKKworbm90ZGlyOgorCWRwdXQoZGlyKTsKKwlrZXJyb3IoImludXNlIGNvbW1hbmQgcmVxdWlyZXMgZGlyZmQgdG8gYmUgYSBkaXJlY3RvcnkiKTsKKwlyZXR1cm4gLUVOT1RESVI7CisKK2ludmFsOgorCWtlcnJvcigiaW51c2UgY29tbWFuZCByZXF1aXJlcyBkaXJmZCBhbmQgZmlsZW5hbWUiKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIHNlZSBpZiB3ZSBoYXZlIHNwYWNlIGZvciBhIG51bWJlciBvZiBwYWdlcyBhbmQvb3IgYSBudW1iZXIgb2YgZmlsZXMgaW4gdGhlCisgKiBjYWNoZQorICovCitpbnQgY2FjaGVmaWxlc19oYXNfc3BhY2Uoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJIHVuc2lnbmVkIGZuciwgdW5zaWduZWQgYm5yKQoreworCXN0cnVjdCBrc3RhdGZzIHN0YXRzOworCWludCByZXQ7CisKKwkvL19lbnRlcigieyVsbHUsJWxsdSwlbGx1LCVsbHUsJWxsdSwlbGx1fSwldSwldSIsCisJLy8gICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmZydW4sCisJLy8gICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmZjdWxsLAorCS8vICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGNhY2hlLT5mc3RvcCwKKwkvLyAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjYWNoZS0+YnJ1biwKKwkvLyAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBjYWNoZS0+YmN1bGwsCisJLy8gICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgY2FjaGUtPmJzdG9wLAorCS8vICAgICAgIGZuciwgYm5yKTsKKworCS8qIGZpbmQgb3V0IGhvdyBtYW55IHBhZ2VzIG9mIGJsb2NrZGV2IGFyZSBhdmFpbGFibGUgKi8KKwltZW1zZXQoJnN0YXRzLCAwLCBzaXplb2Yoc3RhdHMpKTsKKworCXJldCA9IHZmc19zdGF0ZnMoY2FjaGUtPm1udC0+bW50X3Jvb3QsICZzdGF0cyk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRUlPKQorCQkJY2FjaGVmaWxlc19pb19lcnJvcihjYWNoZSwgInN0YXRmcyBmYWlsZWQiKTsKKwkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJc3RhdHMuZl9iYXZhaWwgPj49IGNhY2hlLT5ic2hpZnQ7CisKKwkvL19kZWJ1ZygiYXZhaWwgJWxsdSwlbGx1IiwKKwkvLyAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0cy5mX2ZmcmVlLAorCS8vICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXRzLmZfYmF2YWlsKTsKKworCS8qIHNlZSBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IHNwYWNlICovCisJaWYgKHN0YXRzLmZfZmZyZWUgPiBmbnIpCisJCXN0YXRzLmZfZmZyZWUgLT0gZm5yOworCWVsc2UKKwkJc3RhdHMuZl9mZnJlZSA9IDA7CisKKwlpZiAoc3RhdHMuZl9iYXZhaWwgPiBibnIpCisJCXN0YXRzLmZfYmF2YWlsIC09IGJucjsKKwllbHNlCisJCXN0YXRzLmZfYmF2YWlsID0gMDsKKworCXJldCA9IC1FTk9CVUZTOworCWlmIChzdGF0cy5mX2ZmcmVlIDwgY2FjaGUtPmZzdG9wIHx8CisJICAgIHN0YXRzLmZfYmF2YWlsIDwgY2FjaGUtPmJzdG9wKQorCQlnb3RvIGJlZ2luX2N1bGw7CisKKwlyZXQgPSAwOworCWlmIChzdGF0cy5mX2ZmcmVlIDwgY2FjaGUtPmZjdWxsIHx8CisJICAgIHN0YXRzLmZfYmF2YWlsIDwgY2FjaGUtPmJjdWxsKQorCQlnb3RvIGJlZ2luX2N1bGw7CisKKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19DVUxMSU5HLCAmY2FjaGUtPmZsYWdzKSAmJgorCSAgICBzdGF0cy5mX2ZmcmVlID49IGNhY2hlLT5mcnVuICYmCisJICAgIHN0YXRzLmZfYmF2YWlsID49IGNhY2hlLT5icnVuICYmCisJICAgIHRlc3RfYW5kX2NsZWFyX2JpdChDQUNIRUZJTEVTX0NVTExJTkcsICZjYWNoZS0+ZmxhZ3MpCisJICAgICkgeworCQlfZGVidWcoImNlYXNlIGN1bGxpbmciKTsKKwkJY2FjaGVmaWxlc19zdGF0ZV9jaGFuZ2VkKGNhY2hlKTsKKwl9CisKKwkvL19sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworCitiZWdpbl9jdWxsOgorCWlmICghdGVzdF9hbmRfc2V0X2JpdChDQUNIRUZJTEVTX0NVTExJTkcsICZjYWNoZS0+ZmxhZ3MpKSB7CisJCV9kZWJ1ZygiIyMjIENVTEwgQ0FDSEUgIyMjIik7CisJCWNhY2hlZmlsZXNfc3RhdGVfY2hhbmdlZChjYWNoZSk7CisJfQorCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvaW50ZXJmYWNlLmMgYi9mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOTYyMzQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jYWNoZWZpbGVzL2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsNDQ5IEBACisvKiBGUy1DYWNoZSBpbnRlcmZhY2UgdG8gQ2FjaGVGaWxlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKyNkZWZpbmUgbGlzdF90b19wYWdlKGhlYWQpIChsaXN0X2VudHJ5KChoZWFkKS0+cHJldiwgc3RydWN0IHBhZ2UsIGxydSkpCisKK3N0cnVjdCBjYWNoZWZpbGVzX2xvb2t1cF9kYXRhIHsKKwlzdHJ1Y3QgY2FjaGVmaWxlc194YXR0cgkqYXV4ZGF0YTsJLyogYXV4aWxpYXJ5IGRhdGEgKi8KKwljaGFyCQkJKmtleTsJCS8qIGtleSBwYXRoICovCit9OworCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfYXR0cl9jaGFuZ2VkKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCk7CisKKy8qCisgKiBhbGxvY2F0ZSBhbiBvYmplY3QgcmVjb3JkIGZvciBhIGNvb2tpZSBsb29rdXAgYW5kIHByZXBhcmUgdGhlIGxvb2t1cCBkYXRhCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKmNhY2hlZmlsZXNfYWxsb2Nfb2JqZWN0KAorCXN0cnVjdCBmc2NhY2hlX2NhY2hlICpfY2FjaGUsCisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfbG9va3VwX2RhdGEgKmxvb2t1cF9kYXRhOworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4ZGF0YTsKKwl1bnNpZ25lZCBrZXlsZW4sIGF1eGxlbjsKKwl2b2lkICpidWZmZXI7CisJY2hhciAqa2V5OworCisJY2FjaGUgPSBjb250YWluZXJfb2YoX2NhY2hlLCBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOworCisJX2VudGVyKCJ7JXN9LCVwLCIsIGNhY2hlLT5jYWNoZS5pZGVudGlmaWVyLCBjb29raWUpOworCisJbG9va3VwX2RhdGEgPSBrbWFsbG9jKHNpemVvZigqbG9va3VwX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvb2t1cF9kYXRhKQorCQlnb3RvIG5vbWVtX2xvb2t1cF9kYXRhOworCisJLyogY3JlYXRlIGEgbmV3IG9iamVjdCByZWNvcmQgYW5kIGEgdGVtcG9yYXJ5IGxlYWYgaW1hZ2UgKi8KKwlvYmplY3QgPSBrbWVtX2NhY2hlX2FsbG9jKGNhY2hlZmlsZXNfb2JqZWN0X2phciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvYmplY3QpCisJCWdvdG8gbm9tZW1fb2JqZWN0OworCisJQVNTRVJUQ01QKG9iamVjdC0+YmFja2VyLCA9PSwgTlVMTCk7CisKKwlCVUdfT04odGVzdF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmb2JqZWN0LT5mbGFncykpOworCWF0b21pY19zZXQoJm9iamVjdC0+dXNhZ2UsIDEpOworCisJZnNjYWNoZV9vYmplY3RfaW5pdCgmb2JqZWN0LT5mc2NhY2hlLCBjb29raWUsICZjYWNoZS0+Y2FjaGUpOworCisJb2JqZWN0LT50eXBlID0gY29va2llLT5kZWYtPnR5cGU7CisKKwkvKiBnZXQgaG9sZCBvZiB0aGUgcmF3IGtleQorCSAqIC0gc3RpY2sgdGhlIGxlbmd0aCBvbiB0aGUgZnJvbnQgYW5kIGxlYXZlIHNwYWNlIG9uIHRoZSBiYWNrIGZvciB0aGUKKwkgKiAgIGVuY29kZXIKKwkgKi8KKwlidWZmZXIgPSBrbWFsbG9jKCgyICsgNTEyKSArIDMsIEdGUF9LRVJORUwpOworCWlmICghYnVmZmVyKQorCQlnb3RvIG5vbWVtX2J1ZmZlcjsKKworCWtleWxlbiA9IGNvb2tpZS0+ZGVmLT5nZXRfa2V5KGNvb2tpZS0+bmV0ZnNfZGF0YSwgYnVmZmVyICsgMiwgNTEyKTsKKwlBU1NFUlRDTVAoa2V5bGVuLCA8LCA1MTIpOworCisJKih1aW50MTZfdCAqKWJ1ZmZlciA9IGtleWxlbjsKKwkoKGNoYXIgKilidWZmZXIpW2tleWxlbiArIDJdID0gMDsKKwkoKGNoYXIgKilidWZmZXIpW2tleWxlbiArIDNdID0gMDsKKwkoKGNoYXIgKilidWZmZXIpW2tleWxlbiArIDRdID0gMDsKKworCS8qIHR1cm4gdGhlIHJhdyBrZXkgaW50byBzb21ldGhpbmcgdGhhdCBjYW4gd29yayB3aXRoIGFzIGEgZmlsZW5hbWUgKi8KKwlrZXkgPSBjYWNoZWZpbGVzX2Nvb2tfa2V5KGJ1ZmZlciwga2V5bGVuICsgMiwgb2JqZWN0LT50eXBlKTsKKwlpZiAoIWtleSkKKwkJZ290byBub21lbV9rZXk7CisKKwkvKiBnZXQgaG9sZCBvZiB0aGUgYXV4aWxpYXJ5IGRhdGEgYW5kIHByZXBlbmQgdGhlIG9iamVjdCB0eXBlICovCisJYXV4ZGF0YSA9IGJ1ZmZlcjsKKwlhdXhsZW4gPSAwOworCWlmIChjb29raWUtPmRlZi0+Z2V0X2F1eCkgeworCQlhdXhsZW4gPSBjb29raWUtPmRlZi0+Z2V0X2F1eChjb29raWUtPm5ldGZzX2RhdGEsCisJCQkJCSAgICAgIGF1eGRhdGEtPmRhdGEsIDUxMSk7CisJCUFTU0VSVENNUChhdXhsZW4sIDwsIDUxMSk7CisJfQorCisJYXV4ZGF0YS0+bGVuID0gYXV4bGVuICsgMTsKKwlhdXhkYXRhLT50eXBlID0gY29va2llLT5kZWYtPnR5cGU7CisKKwlsb29rdXBfZGF0YS0+YXV4ZGF0YSA9IGF1eGRhdGE7CisJbG9va3VwX2RhdGEtPmtleSA9IGtleTsKKwlvYmplY3QtPmxvb2t1cF9kYXRhID0gbG9va3VwX2RhdGE7CisKKwlfbGVhdmUoIiA9ICVwIFslcF0iLCAmb2JqZWN0LT5mc2NhY2hlLCBsb29rdXBfZGF0YSk7CisJcmV0dXJuICZvYmplY3QtPmZzY2FjaGU7CisKK25vbWVtX2tleToKKwlrZnJlZShidWZmZXIpOworbm9tZW1fYnVmZmVyOgorCUJVR19PTih0ZXN0X2JpdChDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUsICZvYmplY3QtPmZsYWdzKSk7CisJa21lbV9jYWNoZV9mcmVlKGNhY2hlZmlsZXNfb2JqZWN0X2phciwgb2JqZWN0KTsKKwlmc2NhY2hlX29iamVjdF9kZXN0cm95ZWQoJmNhY2hlLT5jYWNoZSk7Citub21lbV9vYmplY3Q6CisJa2ZyZWUobG9va3VwX2RhdGEpOworbm9tZW1fbG9va3VwX2RhdGE6CisJX2xlYXZlKCIgPSAtRU5PTUVNIik7CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cit9CisKKy8qCisgKiBhdHRlbXB0IHRvIGxvb2sgdXAgdGhlIG5vbWluYXRlZCBub2RlIGluIHRoaXMgY2FjaGUKKyAqLworc3RhdGljIHZvaWQgY2FjaGVmaWxlc19sb29rdXBfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19sb29rdXBfZGF0YSAqbG9va3VwX2RhdGE7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpwYXJlbnQsICpvYmplY3Q7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlOworCWNvbnN0IHN0cnVjdCBjcmVkICpzYXZlZF9jcmVkOworCWludCByZXQ7CisKKwlfZW50ZXIoIntPQkoleH0iLCBfb2JqZWN0LT5kZWJ1Z19pZCk7CisKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihfb2JqZWN0LT5jYWNoZSwgc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUsIGNhY2hlKTsKKwlwYXJlbnQgPSBjb250YWluZXJfb2YoX29iamVjdC0+cGFyZW50LAorCQkJICAgICAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKwlvYmplY3QgPSBjb250YWluZXJfb2YoX29iamVjdCwgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKwlsb29rdXBfZGF0YSA9IG9iamVjdC0+bG9va3VwX2RhdGE7CisKKwlBU1NFUlRDTVAobG9va3VwX2RhdGEsICE9LCBOVUxMKTsKKworCS8qIGxvb2sgdXAgdGhlIGtleSwgY3JlYXRpbmcgYW55IG1pc3NpbmcgYml0cyAqLworCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCAmc2F2ZWRfY3JlZCk7CisJcmV0ID0gY2FjaGVmaWxlc193YWxrX3RvX29iamVjdChwYXJlbnQsIG9iamVjdCwKKwkJCQkJbG9va3VwX2RhdGEtPmtleSwKKwkJCQkJbG9va3VwX2RhdGEtPmF1eGRhdGEpOworCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgc2F2ZWRfY3JlZCk7CisKKwkvKiBwb2xpc2ggb2ZmIGJ5IHNldHRpbmcgdGhlIGF0dHJpYnV0ZXMgb2Ygbm9uLWluZGV4IGZpbGVzICovCisJaWYgKHJldCA9PSAwICYmCisJICAgIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPmRlZi0+dHlwZSAhPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYKQorCQljYWNoZWZpbGVzX2F0dHJfY2hhbmdlZCgmb2JqZWN0LT5mc2NhY2hlKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhY2hlRmlsZXM6IExvb2t1cCBmYWlsZWQgZXJyb3IgJWRcbiIsCisJCSAgICAgICByZXQpOworCQlmc2NhY2hlX29iamVjdF9sb29rdXBfZXJyb3IoJm9iamVjdC0+ZnNjYWNoZSk7CisJfQorCisJX2xlYXZlKCIgWyVkXSIsIHJldCk7Cit9CisKKy8qCisgKiBpbmRpY2F0aW9uIG9mIGxvb2t1cCBjb21wbGV0aW9uCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfbG9va3VwX2NvbXBsZXRlKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihfb2JqZWN0LCBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCisJX2VudGVyKCJ7T0JKJXgsJXB9Iiwgb2JqZWN0LT5mc2NhY2hlLmRlYnVnX2lkLCBvYmplY3QtPmxvb2t1cF9kYXRhKTsKKworCWlmIChvYmplY3QtPmxvb2t1cF9kYXRhKSB7CisJCWtmcmVlKG9iamVjdC0+bG9va3VwX2RhdGEtPmtleSk7CisJCWtmcmVlKG9iamVjdC0+bG9va3VwX2RhdGEtPmF1eGRhdGEpOworCQlrZnJlZShvYmplY3QtPmxvb2t1cF9kYXRhKTsKKwkJb2JqZWN0LT5sb29rdXBfZGF0YSA9IE5VTEw7CisJfQorfQorCisvKgorICogaW5jcmVtZW50IHRoZSB1c2FnZSBjb3VudCBvbiBhbiBpbm9kZSBvYmplY3QgKG1heSBmYWlsIGlmIHVubW91bnRpbmcpCisgKi8KK3N0YXRpYworc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpjYWNoZWZpbGVzX2dyYWJfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCA9CisJCWNvbnRhaW5lcl9vZihfb2JqZWN0LCBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCisJX2VudGVyKCJ7T0JKJXgsJWR9IiwgX29iamVjdC0+ZGVidWdfaWQsIGF0b21pY19yZWFkKCZvYmplY3QtPnVzYWdlKSk7CisKKyNpZmRlZiBDQUNIRUZJTEVTX0RFQlVHX1NMQUIKKwlBU1NFUlQoKGF0b21pY19yZWFkKCZvYmplY3QtPnVzYWdlKSAmIDB4ZmZmZjAwMDApICE9IDB4NmI2YjAwMDApOworI2VuZGlmCisKKwlhdG9taWNfaW5jKCZvYmplY3QtPnVzYWdlKTsKKwlyZXR1cm4gJm9iamVjdC0+ZnNjYWNoZTsKK30KKworLyoKKyAqIHVwZGF0ZSB0aGUgYXV4aWxsaWFyeSBkYXRhIGZvciBhbiBvYmplY3Qgb2JqZWN0IG9uIGRpc2sKKyAqLworc3RhdGljIHZvaWQgY2FjaGVmaWxlc191cGRhdGVfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4ZGF0YTsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGU7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWU7CisJY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQ7CisJdW5zaWduZWQgYXV4bGVuOworCisJX2VudGVyKCJ7T0JKJXh9IiwgX29iamVjdC0+ZGVidWdfaWQpOworCisJb2JqZWN0ID0gY29udGFpbmVyX29mKF9vYmplY3QsIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCwgZnNjYWNoZSk7CisJY2FjaGUgPSBjb250YWluZXJfb2Yob2JqZWN0LT5mc2NhY2hlLmNhY2hlLCBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwKKwkJCSAgICAgY2FjaGUpOworCWNvb2tpZSA9IG9iamVjdC0+ZnNjYWNoZS5jb29raWU7CisKKwlpZiAoIWNvb2tpZS0+ZGVmLT5nZXRfYXV4KSB7CisJCV9sZWF2ZSgiIFtubyBhdXhdIik7CisJCXJldHVybjsKKwl9CisKKwlhdXhkYXRhID0ga21hbGxvYygyICsgNTEyICsgMywgR0ZQX0tFUk5FTCk7CisJaWYgKCFhdXhkYXRhKSB7CisJCV9sZWF2ZSgiIFtub21lbV0iKTsKKwkJcmV0dXJuOworCX0KKworCWF1eGxlbiA9IGNvb2tpZS0+ZGVmLT5nZXRfYXV4KGNvb2tpZS0+bmV0ZnNfZGF0YSwgYXV4ZGF0YS0+ZGF0YSwgNTExKTsKKwlBU1NFUlRDTVAoYXV4bGVuLCA8LCA1MTEpOworCisJYXV4ZGF0YS0+bGVuID0gYXV4bGVuICsgMTsKKwlhdXhkYXRhLT50eXBlID0gY29va2llLT5kZWYtPnR5cGU7CisKKwljYWNoZWZpbGVzX2JlZ2luX3NlY3VyZShjYWNoZSwgJnNhdmVkX2NyZWQpOworCWNhY2hlZmlsZXNfdXBkYXRlX29iamVjdF94YXR0cihvYmplY3QsIGF1eGRhdGEpOworCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgc2F2ZWRfY3JlZCk7CisJa2ZyZWUoYXV4ZGF0YSk7CisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIGRpc2NhcmQgdGhlIHJlc291cmNlcyBwaW5uZWQgYnkgYW4gb2JqZWN0IGFuZCBlZmZlY3QgcmV0aXJlbWVudCBpZgorICogcmVxdWVzdGVkCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfZHJvcF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpfb2JqZWN0KQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKKworCUFTU0VSVChfb2JqZWN0KTsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihfb2JqZWN0LCBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCisJX2VudGVyKCJ7T0JKJXgsJWR9IiwKKwkgICAgICAgb2JqZWN0LT5mc2NhY2hlLmRlYnVnX2lkLCBhdG9taWNfcmVhZCgmb2JqZWN0LT51c2FnZSkpOworCisJY2FjaGUgPSBjb250YWluZXJfb2Yob2JqZWN0LT5mc2NhY2hlLmNhY2hlLAorCQkJICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOworCisjaWZkZWYgQ0FDSEVGSUxFU19ERUJVR19TTEFCCisJQVNTRVJUKChhdG9taWNfcmVhZCgmb2JqZWN0LT51c2FnZSkgJiAweGZmZmYwMDAwKSAhPSAweDZiNmIwMDAwKTsKKyNlbmRpZgorCisJLyogZGVsZXRlIHJldGlyZWQgb2JqZWN0cyAqLworCWlmIChvYmplY3QtPmZzY2FjaGUuc3RhdGUgPT0gRlNDQUNIRV9PQkpFQ1RfUkVDWUNMSU5HICYmCisJICAgIF9vYmplY3QgIT0gY2FjaGUtPmNhY2hlLmZzZGVmCisJICAgICkgeworCQlfZGVidWcoIi0gcmV0aXJlIG9iamVjdCBPQkoleCIsIG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCk7CisJCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCAmc2F2ZWRfY3JlZCk7CisJCWNhY2hlZmlsZXNfZGVsZXRlX29iamVjdChjYWNoZSwgb2JqZWN0KTsKKwkJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKKwl9CisKKwkvKiBjbG9zZSB0aGUgZmlsZXN5c3RlbSBzdHVmZiBhdHRhY2hlZCB0byB0aGUgb2JqZWN0ICovCisJaWYgKG9iamVjdC0+YmFja2VyICE9IG9iamVjdC0+ZGVudHJ5KQorCQlkcHV0KG9iamVjdC0+YmFja2VyKTsKKwlvYmplY3QtPmJhY2tlciA9IE5VTEw7CisKKwkvKiBub3RlIHRoYXQgdGhlIG9iamVjdCBpcyBub3cgaW5hY3RpdmUgKi8KKwlpZiAodGVzdF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmb2JqZWN0LT5mbGFncykpIHsKKwkJd3JpdGVfbG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKwkJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLAorCQkJCQkmb2JqZWN0LT5mbGFncykpCisJCQlCVUcoKTsKKwkJcmJfZXJhc2UoJm9iamVjdC0+YWN0aXZlX25vZGUsICZjYWNoZS0+YWN0aXZlX25vZGVzKTsKKwkJd2FrZV91cF9iaXQoJm9iamVjdC0+ZmxhZ3MsIENBQ0hFRklMRVNfT0JKRUNUX0FDVElWRSk7CisJCXdyaXRlX3VubG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKwl9CisKKwlkcHV0KG9iamVjdC0+ZGVudHJ5KTsKKwlvYmplY3QtPmRlbnRyeSA9IE5VTEw7CisKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogZGlzcG9zZSBvZiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QKKyAqLworc3RhdGljIHZvaWQgY2FjaGVmaWxlc19wdXRfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGU7CisKKwlBU1NFUlQoX29iamVjdCk7CisKKwlvYmplY3QgPSBjb250YWluZXJfb2YoX29iamVjdCwgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKworCV9lbnRlcigie09CSiV4LCVkfSIsCisJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCwgYXRvbWljX3JlYWQoJm9iamVjdC0+dXNhZ2UpKTsKKworI2lmZGVmIENBQ0hFRklMRVNfREVCVUdfU0xBQgorCUFTU0VSVCgoYXRvbWljX3JlYWQoJm9iamVjdC0+dXNhZ2UpICYgMHhmZmZmMDAwMCkgIT0gMHg2YjZiMDAwMCk7CisjZW5kaWYKKworCUFTU0VSVElGQ01QKG9iamVjdC0+ZnNjYWNoZS5wYXJlbnQsCisJCSAgICBvYmplY3QtPmZzY2FjaGUucGFyZW50LT5uX2NoaWxkcmVuLCA+LCAwKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZvYmplY3QtPnVzYWdlKSkgeworCQlfZGVidWcoIi0ga2lsbCBvYmplY3QgT0JKJXgiLCBvYmplY3QtPmZzY2FjaGUuZGVidWdfaWQpOworCisJCUFTU0VSVCghdGVzdF9iaXQoQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLCAmb2JqZWN0LT5mbGFncykpOworCQlBU1NFUlRDTVAob2JqZWN0LT5mc2NhY2hlLnBhcmVudCwgPT0sIE5VTEwpOworCQlBU1NFUlRDTVAob2JqZWN0LT5iYWNrZXIsID09LCBOVUxMKTsKKwkJQVNTRVJUQ01QKG9iamVjdC0+ZGVudHJ5LCA9PSwgTlVMTCk7CisJCUFTU0VSVENNUChvYmplY3QtPmZzY2FjaGUubl9vcHMsID09LCAwKTsKKwkJQVNTRVJUQ01QKG9iamVjdC0+ZnNjYWNoZS5uX2NoaWxkcmVuLCA9PSwgMCk7CisKKwkJaWYgKG9iamVjdC0+bG9va3VwX2RhdGEpIHsKKwkJCWtmcmVlKG9iamVjdC0+bG9va3VwX2RhdGEtPmtleSk7CisJCQlrZnJlZShvYmplY3QtPmxvb2t1cF9kYXRhLT5hdXhkYXRhKTsKKwkJCWtmcmVlKG9iamVjdC0+bG9va3VwX2RhdGEpOworCQkJb2JqZWN0LT5sb29rdXBfZGF0YSA9IE5VTEw7CisJCX0KKworCQljYWNoZSA9IG9iamVjdC0+ZnNjYWNoZS5jYWNoZTsKKwkJa21lbV9jYWNoZV9mcmVlKGNhY2hlZmlsZXNfb2JqZWN0X2phciwgb2JqZWN0KTsKKwkJZnNjYWNoZV9vYmplY3RfZGVzdHJveWVkKGNhY2hlKTsKKwl9CisKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogc3luYyBhIGNhY2hlCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfc3luY19jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqX2NhY2hlKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqc2F2ZWRfY3JlZDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIlcCIsIF9jYWNoZSk7CisKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihfY2FjaGUsIHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlLCBjYWNoZSk7CisKKwkvKiBtYWtlIHN1cmUgYWxsIHBhZ2VzIHBpbm5lZCBieSBvcGVyYXRpb25zIG9uIGJlaGFsZiBvZiB0aGUgbmV0ZnMgYXJlCisJICogd3JpdHRlbiB0byBkaXNjICovCisJY2FjaGVmaWxlc19iZWdpbl9zZWN1cmUoY2FjaGUsICZzYXZlZF9jcmVkKTsKKwlyZXQgPSBmc3luY19zdXBlcihjYWNoZS0+bW50LT5tbnRfc2IpOworCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgc2F2ZWRfY3JlZCk7CisKKwlpZiAocmV0ID09IC1FSU8pCisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsCisJCQkJICAgICJBdHRlbXB0IHRvIHN5bmMgYmFja2luZyBmcyBzdXBlcmJsb2NrIgorCQkJCSAgICAiIHJldHVybmVkIGVycm9yICVkIiwKKwkJCQkgICAgcmV0KTsKK30KKworLyoKKyAqIG5vdGlmaWNhdGlvbiB0aGUgYXR0cmlidXRlcyBvbiBhbiBvYmplY3QgaGF2ZSBjaGFuZ2VkCisgKiAtIGNhbGxlZCB3aXRoIHJlYWRzL3dyaXRlcyBleGNsdWRlZCBieSBGUy1DYWNoZQorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfYXR0cl9jaGFuZ2VkKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqX29iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGU7CisJY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQ7CisJc3RydWN0IGlhdHRyIG5ld2F0dHJzOworCXVpbnQ2NF90IG5pX3NpemU7CisJbG9mZl90IG9pX3NpemU7CisJaW50IHJldDsKKworCV9vYmplY3QtPmNvb2tpZS0+ZGVmLT5nZXRfYXR0cihfb2JqZWN0LT5jb29raWUtPm5ldGZzX2RhdGEsICZuaV9zaXplKTsKKworCV9lbnRlcigie09CSiV4fSxbJWxsdV0iLAorCSAgICAgICBfb2JqZWN0LT5kZWJ1Z19pZCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgbmlfc2l6ZSk7CisKKwlvYmplY3QgPSBjb250YWluZXJfb2YoX29iamVjdCwgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihvYmplY3QtPmZzY2FjaGUuY2FjaGUsCisJCQkgICAgIHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlLCBjYWNoZSk7CisKKwlpZiAobmlfc2l6ZSA9PSBvYmplY3QtPmlfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW9iamVjdC0+YmFja2VyKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwlBU1NFUlQoU19JU1JFRyhvYmplY3QtPmJhY2tlci0+ZF9pbm9kZS0+aV9tb2RlKSk7CisKKwlmc2NhY2hlX3NldF9zdG9yZV9saW1pdCgmb2JqZWN0LT5mc2NhY2hlLCBuaV9zaXplKTsKKworCW9pX3NpemUgPSBpX3NpemVfcmVhZChvYmplY3QtPmJhY2tlci0+ZF9pbm9kZSk7CisJaWYgKG9pX3NpemUgPT0gbmlfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwluZXdhdHRycy5pYV9zaXplID0gbmlfc2l6ZTsKKwluZXdhdHRycy5pYV92YWxpZCA9IEFUVFJfU0laRTsKKworCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCAmc2F2ZWRfY3JlZCk7CisJbXV0ZXhfbG9jaygmb2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IG5vdGlmeV9jaGFuZ2Uob2JqZWN0LT5iYWNrZXIsICZuZXdhdHRycyk7CisJbXV0ZXhfdW5sb2NrKCZvYmplY3QtPmJhY2tlci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJY2FjaGVmaWxlc19lbmRfc2VjdXJlKGNhY2hlLCBzYXZlZF9jcmVkKTsKKworCWlmIChyZXQgPT0gLUVJTykgeworCQlmc2NhY2hlX3NldF9zdG9yZV9saW1pdCgmb2JqZWN0LT5mc2NhY2hlLCAwKTsKKwkJY2FjaGVmaWxlc19pb19lcnJvcl9vYmoob2JqZWN0LCAiU2l6ZSBzZXQgZmFpbGVkIik7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBkaXNzb2NpYXRlIGEgY2FjaGUgZnJvbSBhbGwgdGhlIHBhZ2VzIGl0IHdhcyBiYWNraW5nCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfZGlzc29jaWF0ZV9wYWdlcyhzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpCit7CisJX2VudGVyKCIiKTsKK30KKworY29uc3Qgc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzIGNhY2hlZmlsZXNfY2FjaGVfb3BzID0geworCS5uYW1lCQkJPSAiY2FjaGVmaWxlcyIsCisJLmFsbG9jX29iamVjdAkJPSBjYWNoZWZpbGVzX2FsbG9jX29iamVjdCwKKwkubG9va3VwX29iamVjdAkJPSBjYWNoZWZpbGVzX2xvb2t1cF9vYmplY3QsCisJLmxvb2t1cF9jb21wbGV0ZQk9IGNhY2hlZmlsZXNfbG9va3VwX2NvbXBsZXRlLAorCS5ncmFiX29iamVjdAkJPSBjYWNoZWZpbGVzX2dyYWJfb2JqZWN0LAorCS51cGRhdGVfb2JqZWN0CQk9IGNhY2hlZmlsZXNfdXBkYXRlX29iamVjdCwKKwkuZHJvcF9vYmplY3QJCT0gY2FjaGVmaWxlc19kcm9wX29iamVjdCwKKwkucHV0X29iamVjdAkJPSBjYWNoZWZpbGVzX3B1dF9vYmplY3QsCisJLnN5bmNfY2FjaGUJCT0gY2FjaGVmaWxlc19zeW5jX2NhY2hlLAorCS5hdHRyX2NoYW5nZWQJCT0gY2FjaGVmaWxlc19hdHRyX2NoYW5nZWQsCisJLnJlYWRfb3JfYWxsb2NfcGFnZQk9IGNhY2hlZmlsZXNfcmVhZF9vcl9hbGxvY19wYWdlLAorCS5yZWFkX29yX2FsbG9jX3BhZ2VzCT0gY2FjaGVmaWxlc19yZWFkX29yX2FsbG9jX3BhZ2VzLAorCS5hbGxvY2F0ZV9wYWdlCQk9IGNhY2hlZmlsZXNfYWxsb2NhdGVfcGFnZSwKKwkuYWxsb2NhdGVfcGFnZXMJCT0gY2FjaGVmaWxlc19hbGxvY2F0ZV9wYWdlcywKKwkud3JpdGVfcGFnZQkJPSBjYWNoZWZpbGVzX3dyaXRlX3BhZ2UsCisJLnVuY2FjaGVfcGFnZQkJPSBjYWNoZWZpbGVzX3VuY2FjaGVfcGFnZSwKKwkuZGlzc29jaWF0ZV9wYWdlcwk9IGNhY2hlZmlsZXNfZGlzc29jaWF0ZV9wYWdlcywKK307CmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL2ludGVybmFsLmggYi9mcy9jYWNoZWZpbGVzL2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkyMThlMQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NhY2hlZmlsZXMvaW50ZXJuYWwuaApAQCAtMCwwICsxLDM2MCBAQAorLyogR2VuZXJhbCBuZXRmcyBjYWNoZSBvbiBjYWNoZSBmaWxlcyBpbnRlcm5hbCBkZWZzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLWNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKworc3RydWN0IGNhY2hlZmlsZXNfY2FjaGU7CitzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3Q7CisKK2V4dGVybiB1bnNpZ25lZCBjYWNoZWZpbGVzX2RlYnVnOworI2RlZmluZSBDQUNIRUZJTEVTX0RFQlVHX0tFTlRFUgkxCisjZGVmaW5lIENBQ0hFRklMRVNfREVCVUdfS0xFQVZFCTIKKyNkZWZpbmUgQ0FDSEVGSUxFU19ERUJVR19LREVCVUcJNAorCisvKgorICogbm9kZSByZWNvcmRzCisgKi8KK3N0cnVjdCBjYWNoZWZpbGVzX29iamVjdCB7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0CQlmc2NhY2hlOwkvKiBmc2NhY2hlIGhhbmRsZSAqLworCXN0cnVjdCBjYWNoZWZpbGVzX2xvb2t1cF9kYXRhCSpsb29rdXBfZGF0YTsJLyogY2FjaGVkIGxvb2t1cCBkYXRhICovCisJc3RydWN0IGRlbnRyeQkJCSpkZW50cnk7CS8qIHRoZSBmaWxlL2RpciByZXByZXNlbnRpbmcgdGhpcyBvYmplY3QgKi8KKwlzdHJ1Y3QgZGVudHJ5CQkJKmJhY2tlcjsJLyogYmFja2luZyBmaWxlICovCisJbG9mZl90CQkJCWlfc2l6ZTsJCS8qIG9iamVjdCBzaXplICovCisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworI2RlZmluZSBDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUJMAkJLyogVCBpZiBtYXJrZWQgYWN0aXZlICovCisJYXRvbWljX3QJCQl1c2FnZTsJCS8qIG9iamVjdCB1c2FnZSBjb3VudCAqLworCXVpbnQ4X3QJCQkJdHlwZTsJCS8qIG9iamVjdCB0eXBlICovCisJdWludDhfdAkJCQluZXc7CQkvKiBUIGlmIG9iamVjdCBuZXcgKi8KKwlzcGlubG9ja190CQkJd29ya19sb2NrOworCXN0cnVjdCByYl9ub2RlCQkJYWN0aXZlX25vZGU7CS8qIGxpbmsgaW4gYWN0aXZlIHRyZWUgKGRlbnRyeSBpcyBrZXkpICovCit9OworCitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlZmlsZXNfb2JqZWN0X2phcjsKKworLyoKKyAqIENhY2hlIGZpbGVzIGNhY2hlIGRlZmluaXRpb24KKyAqLworc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgeworCXN0cnVjdCBmc2NhY2hlX2NhY2hlCQljYWNoZTsJCS8qIEZTLUNhY2hlIHJlY29yZCAqLworCXN0cnVjdCB2ZnNtb3VudAkJCSptbnQ7CQkvKiBtb3VudHBvaW50IGhvbGRpbmcgdGhlIGNhY2hlICovCisJc3RydWN0IGRlbnRyeQkJCSpncmF2ZXlhcmQ7CS8qIGRpcmVjdG9yeSBpbnRvIHdoaWNoIGRlYWQgb2JqZWN0cyBnbyAqLworCXN0cnVjdCBmaWxlCQkJKmNhY2hlZmlsZXNkOwkvKiBtYW5hZ2VyIGRhZW1vbiBoYW5kbGUgKi8KKwljb25zdCBzdHJ1Y3QgY3JlZAkJKmNhY2hlX2NyZWQ7CS8qIHNlY3VyaXR5IG92ZXJyaWRlIGZvciBhY2Nlc3NpbmcgY2FjaGUgKi8KKwlzdHJ1Y3QgbXV0ZXgJCQlkYWVtb25fbXV0ZXg7CS8qIGNvbW1hbmQgc2VyaWFsaXNhdGlvbiBtdXRleCAqLworCXdhaXRfcXVldWVfaGVhZF90CQlkYWVtb25fcG9sbHdxOwkvKiBwb2xsIHdhaXRxdWV1ZSBmb3IgZGFlbW9uICovCisJc3RydWN0IHJiX3Jvb3QJCQlhY3RpdmVfbm9kZXM7CS8qIGFjdGl2ZSBub2RlcyAoY2FuJ3QgYmUgY3VsbGVkKSAqLworCXJ3bG9ja190CQkJYWN0aXZlX2xvY2s7CS8qIGxvY2sgZm9yIGFjdGl2ZV9ub2RlcyAqLworCWF0b21pY190CQkJZ3JhdmVjb3VudGVyOwkvKiBncmF2ZXlhcmQgdW5pcXVpZmllciAqLworCXVuc2lnbmVkCQkJZnJ1bl9wZXJjZW50OwkvKiB3aGVuIHRvIHN0b3AgY3VsbGluZyAoJSBmaWxlcykgKi8KKwl1bnNpZ25lZAkJCWZjdWxsX3BlcmNlbnQ7CS8qIHdoZW4gdG8gc3RhcnQgY3VsbGluZyAoJSBmaWxlcykgKi8KKwl1bnNpZ25lZAkJCWZzdG9wX3BlcmNlbnQ7CS8qIHdoZW4gdG8gc3RvcCBhbGxvY2F0aW5nICglIGZpbGVzKSAqLworCXVuc2lnbmVkCQkJYnJ1bl9wZXJjZW50OwkvKiB3aGVuIHRvIHN0b3AgY3VsbGluZyAoJSBibG9ja3MpICovCisJdW5zaWduZWQJCQliY3VsbF9wZXJjZW50OwkvKiB3aGVuIHRvIHN0YXJ0IGN1bGxpbmcgKCUgYmxvY2tzKSAqLworCXVuc2lnbmVkCQkJYnN0b3BfcGVyY2VudDsJLyogd2hlbiB0byBzdG9wIGFsbG9jYXRpbmcgKCUgYmxvY2tzKSAqLworCXVuc2lnbmVkCQkJYnNpemU7CQkvKiBjYWNoZSdzIGJsb2NrIHNpemUgKi8KKwl1bnNpZ25lZAkJCWJzaGlmdDsJCS8qIG1pbihpbG9nMihQQUdFX1NJWkUgLyBic2l6ZSksIDApICovCisJdWludDY0X3QJCQlmcnVuOwkJLyogd2hlbiB0byBzdG9wIGN1bGxpbmcgKi8KKwl1aW50NjRfdAkJCWZjdWxsOwkJLyogd2hlbiB0byBzdGFydCBjdWxsaW5nICovCisJdWludDY0X3QJCQlmc3RvcDsJCS8qIHdoZW4gdG8gc3RvcCBhbGxvY2F0aW5nICovCisJc2VjdG9yX3QJCQlicnVuOwkJLyogd2hlbiB0byBzdG9wIGN1bGxpbmcgKi8KKwlzZWN0b3JfdAkJCWJjdWxsOwkJLyogd2hlbiB0byBzdGFydCBjdWxsaW5nICovCisJc2VjdG9yX3QJCQlic3RvcDsJCS8qIHdoZW4gdG8gc3RvcCBhbGxvY2F0aW5nICovCisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworI2RlZmluZSBDQUNIRUZJTEVTX1JFQURZCQkwCS8qIFQgaWYgY2FjaGUgcHJlcGFyZWQgKi8KKyNkZWZpbmUgQ0FDSEVGSUxFU19ERUFECQkJMQkvKiBUIGlmIGNhY2hlIGRlYWQgKi8KKyNkZWZpbmUgQ0FDSEVGSUxFU19DVUxMSU5HCQkyCS8qIFQgaWYgY3VsbCBlbmdhZ2VkICovCisjZGVmaW5lIENBQ0hFRklMRVNfU1RBVEVfQ0hBTkdFRAkzCS8qIFQgaWYgc3RhdGUgY2hhbmdlZCAocG9sbCB0cmlnZ2VyKSAqLworCWNoYXIJCQkJKnJvb3RkaXJuYW1lOwkvKiBuYW1lIG9mIGNhY2hlIHJvb3QgZGlyZWN0b3J5ICovCisJY2hhcgkJCQkqc2VjY3R4OwkvKiBMU00gc2VjdXJpdHkgY29udGV4dCAqLworCWNoYXIJCQkJKnRhZzsJCS8qIGNhY2hlIGJpbmRpbmcgdGFnICovCit9OworCisvKgorICogYmFja2luZyBmaWxlIHJlYWQgdHJhY2tpbmcKKyAqLworc3RydWN0IGNhY2hlZmlsZXNfb25lX3JlYWQgeworCXdhaXRfcXVldWVfdAkJCW1vbml0b3I7CS8qIGxpbmsgaW50byBtb25pdG9yZWQgd2FpdHF1ZXVlICovCisJc3RydWN0IHBhZ2UJCQkqYmFja19wYWdlOwkvKiBiYWNraW5nIGZpbGUgcGFnZSB3ZSdyZSB3YWl0aW5nIGZvciAqLworCXN0cnVjdCBwYWdlCQkJKm5ldGZzX3BhZ2U7CS8qIG5ldGZzIHBhZ2Ugd2UncmUgZ29pbmcgdG8gZmlsbCAqLworCXN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbAkqb3A7CQkvKiByZXRyaWV2YWwgb3AgY292ZXJpbmcgdGhpcyAqLworCXN0cnVjdCBsaXN0X2hlYWQJCW9wX2xpbms7CS8qIGxpbmsgaW4gb3AncyB0b2RvIGxpc3QgKi8KK307CisKKy8qCisgKiBiYWNraW5nIGZpbGUgd3JpdGUgdHJhY2tpbmcKKyAqLworc3RydWN0IGNhY2hlZmlsZXNfb25lX3dyaXRlIHsKKwlzdHJ1Y3QgcGFnZQkJCSpuZXRmc19wYWdlOwkvKiBuZXRmcyBwYWdlIHRvIGNvcHkgKi8KKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QJKm9iamVjdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlvYmpfbGluazsJLyogbGluayBpbiBvYmplY3QncyBsaXN0cyAqLworCWZzY2FjaGVfcndfY29tcGxldGVfdAkJZW5kX2lvX2Z1bmM7CisJdm9pZAkJCQkqY29udGV4dDsKK307CisKKy8qCisgKiBhdXhpbGlhcnkgZGF0YSB4YXR0ciBidWZmZXIKKyAqLworc3RydWN0IGNhY2hlZmlsZXNfeGF0dHIgeworCXVpbnQxNl90CQkJbGVuOworCXVpbnQ4X3QJCQkJdHlwZTsKKwl1aW50OF90CQkJCWRhdGFbXTsKK307CisKKy8qCisgKiBub3RlIGNoYW5nZSBvZiBzdGF0ZSBmb3IgZGFlbW9uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZWZpbGVzX3N0YXRlX2NoYW5nZWQoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlKQoreworCXNldF9iaXQoQ0FDSEVGSUxFU19TVEFURV9DSEFOR0VELCAmY2FjaGUtPmZsYWdzKTsKKwl3YWtlX3VwX2FsbCgmY2FjaGUtPmRhZW1vbl9wb2xsd3EpOworfQorCisvKgorICogY2YtYmluZC5jCisgKi8KK2V4dGVybiBpbnQgY2FjaGVmaWxlc19kYWVtb25fYmluZChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIGNoYXIgKmFyZ3MpOworZXh0ZXJuIHZvaWQgY2FjaGVmaWxlc19kYWVtb25fdW5iaW5kKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSk7CisKKy8qCisgKiBjZi1kYWVtb24uYworICovCitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYWNoZWZpbGVzX2RhZW1vbl9mb3BzOworCitleHRlcm4gaW50IGNhY2hlZmlsZXNfaGFzX3NwYWNlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQl1bnNpZ25lZCBmbnIsIHVuc2lnbmVkIGJucik7CisKKy8qCisgKiBjZi1pbnRlcmZhY2UuYworICovCitleHRlcm4gY29uc3Qgc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzIGNhY2hlZmlsZXNfY2FjaGVfb3BzOworCisvKgorICogY2Yta2V5LmMKKyAqLworZXh0ZXJuIGNoYXIgKmNhY2hlZmlsZXNfY29va19rZXkoY29uc3QgdTggKnJhdywgaW50IGtleWxlbiwgdWludDhfdCB0eXBlKTsKKworLyoKKyAqIGNmLW5hbWVpLmMKKyAqLworZXh0ZXJuIGludCBjYWNoZWZpbGVzX2RlbGV0ZV9vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJCSAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfd2Fsa190b19vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpwYXJlbnQsCisJCQkJICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmtleSwKKwkJCQkgICAgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKTsKK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpjYWNoZWZpbGVzX2dldF9kaXJlY3Rvcnkoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGlyLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiBpbnQgY2FjaGVmaWxlc19jdWxsKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgc3RydWN0IGRlbnRyeSAqZGlyLAorCQkJICAgY2hhciAqZmlsZW5hbWUpOworCitleHRlcm4gaW50IGNhY2hlZmlsZXNfY2hlY2tfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkaXIsIGNoYXIgKmZpbGVuYW1lKTsKKworLyoKKyAqIGNmLXByb2MuYworICovCisjaWZkZWYgQ09ORklHX0NBQ0hFRklMRVNfSElTVE9HUkFNCitleHRlcm4gYXRvbWljX3QgY2FjaGVmaWxlc19sb29rdXBfaGlzdG9ncmFtW0haXTsKK2V4dGVybiBhdG9taWNfdCBjYWNoZWZpbGVzX21rZGlyX2hpc3RvZ3JhbVtIWl07CitleHRlcm4gYXRvbWljX3QgY2FjaGVmaWxlc19jcmVhdGVfaGlzdG9ncmFtW0haXTsKKworZXh0ZXJuIGludCBfX2luaXQgY2FjaGVmaWxlc19wcm9jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBjYWNoZWZpbGVzX3Byb2NfY2xlYW51cCh2b2lkKTsKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgY2FjaGVmaWxlc19oaXN0KGF0b21pY190IGhpc3RvZ3JhbVtdLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2ppZikKK3sKKwl1bnNpZ25lZCBsb25nIGppZiA9IGppZmZpZXMgLSBzdGFydF9qaWY7CisJaWYgKGppZiA+PSBIWikKKwkJamlmID0gSFogLSAxOworCWF0b21pY19pbmMoJmhpc3RvZ3JhbVtqaWZdKTsKK30KKworI2Vsc2UKKyNkZWZpbmUgY2FjaGVmaWxlc19wcm9jX2luaXQoKQkJKDApCisjZGVmaW5lIGNhY2hlZmlsZXNfcHJvY19jbGVhbnVwKCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIGNhY2hlZmlsZXNfaGlzdChoaXN0LCBzdGFydF9qaWYpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiBjZi1yZHdyLmMKKyAqLworZXh0ZXJuIGludCBjYWNoZWZpbGVzX3JlYWRfb3JfYWxsb2NfcGFnZShzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKiwKKwkJCQkJIHN0cnVjdCBwYWdlICosIGdmcF90KTsKK2V4dGVybiBpbnQgY2FjaGVmaWxlc19yZWFkX29yX2FsbG9jX3BhZ2VzKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqLAorCQkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKiwgdW5zaWduZWQgKiwKKwkJCQkJICBnZnBfdCk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfYWxsb2NhdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKiwgc3RydWN0IHBhZ2UgKiwKKwkJCQkgICAgZ2ZwX3QpOworZXh0ZXJuIGludCBjYWNoZWZpbGVzX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqLAorCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqLCB1bnNpZ25lZCAqLCBnZnBfdCk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfd3JpdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICosIHN0cnVjdCBwYWdlICopOworZXh0ZXJuIHZvaWQgY2FjaGVmaWxlc191bmNhY2hlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICosIHN0cnVjdCBwYWdlICopOworCisvKgorICogY2Ytc2VjdXJpdHkuYworICovCitleHRlcm4gaW50IGNhY2hlZmlsZXNfZ2V0X3NlY3VyaXR5X0lEKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfZGV0ZXJtaW5lX2NhY2hlX3NlY3VyaXR5KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJICAgICAgIHN0cnVjdCBkZW50cnkgKnJvb3QsCisJCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqKl9zYXZlZF9jcmVkKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJICAgY29uc3Qgc3RydWN0IGNyZWQgKipfc2F2ZWRfY3JlZCkKK3sKKwkqX3NhdmVkX2NyZWQgPSBvdmVycmlkZV9jcmVkcyhjYWNoZS0+Y2FjaGVfY3JlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZWZpbGVzX2VuZF9zZWN1cmUoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJCQkgY29uc3Qgc3RydWN0IGNyZWQgKnNhdmVkX2NyZWQpCit7CisJcmV2ZXJ0X2NyZWRzKHNhdmVkX2NyZWQpOworfQorCisvKgorICogY2YteGF0dHIuYworICovCitleHRlcm4gaW50IGNhY2hlZmlsZXNfY2hlY2tfb2JqZWN0X3R5cGUoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpOworZXh0ZXJuIGludCBjYWNoZWZpbGVzX3NldF9vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJICAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKTsKK2V4dGVybiBpbnQgY2FjaGVmaWxlc191cGRhdGVfb2JqZWN0X3hhdHRyKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LAorCQkJCQkgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKTsKK2V4dGVybiBpbnQgY2FjaGVmaWxlc19jaGVja19vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJCSBzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4ZGF0YSk7CitleHRlcm4gaW50IGNhY2hlZmlsZXNfcmVtb3ZlX29iamVjdF94YXR0cihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCisJCQkJCSAgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKKworCisvKgorICogZXJyb3IgaGFuZGxpbmcKKyAqLworI2RlZmluZSBrZXJyb3IoRk1ULCAuLi4pIHByaW50ayhLRVJOX0VSUiAiQ2FjaGVGaWxlczogIkZNVCJcbiIsICMjX19WQV9BUkdTX18pCisKKyNkZWZpbmUgY2FjaGVmaWxlc19pb19lcnJvcihfX19jYWNoZSwgRk1ULCAuLi4pCQlcCitkbyB7CQkJCQkJCVwKKwlrZXJyb3IoIkkvTyBFcnJvcjogIiBGTVQsICMjX19WQV9BUkdTX18pOwlcCisJZnNjYWNoZV9pb19lcnJvcigmKF9fX2NhY2hlKS0+Y2FjaGUpOwkJXAorCXNldF9iaXQoQ0FDSEVGSUxFU19ERUFELCAmKF9fX2NhY2hlKS0+ZmxhZ3MpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGNhY2hlZmlsZXNfaW9fZXJyb3Jfb2JqKG9iamVjdCwgRk1ULCAuLi4pCQkJXAorZG8gewkJCQkJCQkJCVwKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqX19fY2FjaGU7CQkJCVwKKwkJCQkJCQkJCVwKKwlfX19jYWNoZSA9IGNvbnRhaW5lcl9vZigob2JqZWN0KS0+ZnNjYWNoZS5jYWNoZSwJCVwKKwkJCQlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOwlcCisJY2FjaGVmaWxlc19pb19lcnJvcihfX19jYWNoZSwgRk1ULCAjI19fVkFfQVJHU19fKTsJCVwKK30gd2hpbGUgKDApCisKKworLyoKKyAqIGRlYnVnIHRyYWNpbmcKKyAqLworI2RlZmluZSBkYmdwcmludGsoRk1ULCAuLi4pIFwKKwlwcmludGsoS0VSTl9ERUJVRyAiWyUtNi42c10gIkZNVCJcbiIsIGN1cnJlbnQtPmNvbW0sICMjX19WQV9BUkdTX18pCisKKy8qIG1ha2Ugc3VyZSB3ZSBtYWludGFpbiB0aGUgZm9ybWF0IHN0cmluZ3MsIGV2ZW4gd2hlbiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZGJwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMSwgMikpKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZGJwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCit7Cit9CisKKyNkZWZpbmUga2VudGVyKEZNVCwgLi4uKSBkYmdwcmludGsoIj09PiAlcygiRk1UIikiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUga2xlYXZlKEZNVCwgLi4uKSBkYmdwcmludGsoIjw9PSAlcygpIkZNVCIiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUga2RlYnVnKEZNVCwgLi4uKSBkYmdwcmludGsoRk1ULCAjI19fVkFfQVJHU19fKQorCisKKyNpZiBkZWZpbmVkKF9fS0RFQlVHKQorI2RlZmluZSBfZW50ZXIoRk1ULCAuLi4pIGtlbnRlcihGTVQsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIF9sZWF2ZShGTVQsIC4uLikga2xlYXZlKEZNVCwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKSBrZGVidWcoRk1ULCAjI19fVkFfQVJHU19fKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19DQUNIRUZJTEVTX0RFQlVHKQorI2RlZmluZSBfZW50ZXIoRk1ULCAuLi4pCQkJCVwKK2RvIHsJCQkJCQkJXAorCWlmIChjYWNoZWZpbGVzX2RlYnVnICYgQ0FDSEVGSUxFU19ERUJVR19LRU5URVIpCVwKKwkJa2VudGVyKEZNVCwgIyNfX1ZBX0FSR1NfXyk7CQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9sZWF2ZShGTVQsIC4uLikJCQkJXAorZG8gewkJCQkJCQlcCisJaWYgKGNhY2hlZmlsZXNfZGVidWcgJiBDQUNIRUZJTEVTX0RFQlVHX0tMRUFWRSkJXAorCQlrbGVhdmUoRk1ULCAjI19fVkFfQVJHU19fKTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKQkJCQlcCitkbyB7CQkJCQkJCVwKKwlpZiAoY2FjaGVmaWxlc19kZWJ1ZyAmIENBQ0hFRklMRVNfREVCVUdfS0RFQlVHKQlcCisJCWtkZWJ1ZyhGTVQsICMjX19WQV9BUkdTX18pOwkJXAorfSB3aGlsZSAoMCkKKworI2Vsc2UKKyNkZWZpbmUgX2VudGVyKEZNVCwgLi4uKSBfZGJwcmludGsoIj09PiAlcygiRk1UIikiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2xlYXZlKEZNVCwgLi4uKSBfZGJwcmludGsoIjw9PSAlcygpIkZNVCIiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKSBfZGJwcmludGsoRk1ULCAjI19fVkFfQVJHU19fKQorI2VuZGlmCisKKyNpZiAxIC8qIGRlZmluZWQoX19LREVCVUdBTEwpICovCisKKyNkZWZpbmUgQVNTRVJUKFgpCQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KCEoWCkpKSB7CQkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiQ2FjaGVGaWxlczogQXNzZXJ0aW9uIGZhaWxlZFxuIik7CVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEFTU0VSVENNUChYLCBPUCwgWSkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseSghKChYKSBPUCAoWSkpKSkgewkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiQ2FjaGVGaWxlczogQXNzZXJ0aW9uIGZhaWxlZFxuIik7CVwKKwkJcHJpbnRrKEtFUk5fRVJSICIlbHggIiAjT1AgIiAlbHggaXMgZmFsc2VcbiIsCQlcCisJCSAgICAgICAodW5zaWduZWQgbG9uZykoWCksICh1bnNpZ25lZCBsb25nKShZKSk7CQlcCisJCUJVRygpOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBBU1NFUlRJRihDLCBYKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseSgoQykgJiYgIShYKSkpIHsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIkNhY2hlRmlsZXM6IEFzc2VydGlvbiBmYWlsZWRcbiIpOwlcCisJCUJVRygpOwkJCQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBBU1NFUlRJRkNNUChDLCBYLCBPUCwgWSkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHVubGlrZWx5KChDKSAmJiAhKChYKSBPUCAoWSkpKSkgewkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiBBc3NlcnRpb24gZmFpbGVkXG4iKTsJXAorCQlwcmludGsoS0VSTl9FUlIgIiVseCAiICNPUCAiICVseCBpcyBmYWxzZVxuIiwJCVwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKShYKSwgKHVuc2lnbmVkIGxvbmcpKFkpKTsJCVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIEFTU0VSVChYKQkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBBU1NFUlRDTVAoWCwgT1AsIFkpCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQVNTRVJUSUYoQywgWCkJCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQVNTRVJUSUZDTVAoQywgWCwgT1AsIFkpCWRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMva2V5LmMgYi9mcy9jYWNoZWZpbGVzL2tleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYjhiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jYWNoZWZpbGVzL2tleS5jCkBAIC0wLDAgKzEsMTU5IEBACisvKiBLZXkgdG8gcGF0aG5hbWUgZW5jb2RlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGNhY2hlZmlsZXNfY2hhcm1hcFs2NF0gPQorCSIwMTIzNDU2Nzg5IgkJCS8qIDAgLSA5ICovCisJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgkvKiAxMCAtIDM1ICovCisJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgkvKiAzNiAtIDYxICovCisJIl8tIgkJCQkvKiA2MiAtIDYzICovCisJOworCitzdGF0aWMgY29uc3QgY2hhciBjYWNoZWZpbGVzX2ZpbGVjaGFybWFwWzI1Nl0gPSB7CisJLyogd2Ugc2tpcCBzcGFjZSBhbmQgdGFiIGFuZCBjb250cm9sIGNoYXJzICovCisJWzMzIC4uLiA0Nl0gPSAxLAkJLyogJyEnIC0+ICcuJyAqLworCS8qIHdlIHNraXAgJy8nIGFzIGl0J3Mgc2lnbmlmaWNhbnQgdG8gcGF0aHdhbGsgKi8KKwlbNDggLi4uIDEyN10gPSAxLAkJLyogJzAnIC0+ICd+JyAqLworfTsKKworLyoKKyAqIHR1cm4gdGhlIHJhdyBrZXkgaW50byBzb21ldGhpbmcgY29va2VkCisgKiAtIHRoZSByYXcga2V5IHNob3VsZCBpbmNsdWRlIHRoZSBsZW5ndGggaW4gdGhlIHR3byBieXRlcyBhdCB0aGUgZnJvbnQKKyAqIC0gdGhlIGtleSBtYXkgYmUgdXAgdG8gNTE0IGJ5dGVzIGluIGxlbmd0aCAoaW5jbHVkaW5nIHRoZSBsZW5ndGggd29yZCkKKyAqICAgLSAiYmFzZTY0IiBlbmNvZGUgdGhlIHN0cmFuZ2Uga2V5cywgbWFwcGluZyAzIGJ5dGVzIG9mIHJhdyB0byBmb3VyIG9mCisgKiAgICAgY29va2VkCisgKiAgIC0gbmVlZCB0byBjdXQgdGhlIGNvb2tlZCBrZXkgaW50byAyNTIgY2hhciBsZW5ndGhzICgxODkgcmF3IGJ5dGVzKQorICovCitjaGFyICpjYWNoZWZpbGVzX2Nvb2tfa2V5KGNvbnN0IHU4ICpyYXcsIGludCBrZXlsZW4sIHVpbnQ4X3QgdHlwZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGNzdW0sIGNoOworCXVuc2lnbmVkIGludCBhY2M7CisJY2hhciAqa2V5OworCWludCBsb29wLCBsZW4sIG1heCwgc2VnLCBtYXJrLCBwcmludDsKKworCV9lbnRlcigiLCVkIiwga2V5bGVuKTsKKworCUJVR19PTihrZXlsZW4gPCAyIHx8IGtleWxlbiA+IDUxNCk7CisKKwljc3VtID0gcmF3WzBdICsgcmF3WzFdOworCXByaW50ID0gMTsKKwlmb3IgKGxvb3AgPSAyOyBsb29wIDwga2V5bGVuOyBsb29wKyspIHsKKwkJY2ggPSByYXdbbG9vcF07CisJCWNzdW0gKz0gY2g7CisJCXByaW50ICY9IGNhY2hlZmlsZXNfZmlsZWNoYXJtYXBbY2hdOworCX0KKworCWlmIChwcmludCkgeworCQkvKiBpZiB0aGUgcGF0aCBpcyB1c2FibGUgQVNDSUksIHRoZW4gd2UgcmVuZGVyIGl0IGRpcmVjdGx5ICovCisJCW1heCA9IGtleWxlbiAtIDI7CisJCW1heCArPSAyOwkvKiB0d28gYmFzZTY0J2QgbGVuZ3RoIGNoYXJzIG9uIHRoZSBmcm9udCAqLworCQltYXggKz0gNTsJLyogQGNoZWNrc3VtL00gKi8KKwkJbWF4ICs9IDMgKiAyOwkvKiBtYXhpbXVtIG51bWJlciBvZiBzZWdtZW50IGRpdmlkZXJzICgiLi4uL00iKQorCQkJCSAqIGlzICgoNTE0ICsgMjUxKSAvIDI1MikgPSAzCisJCQkJICovCisJCW1heCArPSAxOwkvKiBOVUwgb24gZW5kICovCisJfSBlbHNlIHsKKwkJLyogY2FsY3VsYXRlIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgY29va2VkIGtleSAqLworCQlrZXlsZW4gPSAoa2V5bGVuICsgMikgLyAzOworCisJCW1heCA9IGtleWxlbiAqIDQ7CisJCW1heCArPSA1OwkvKiBAY2hlY2tzdW0vTSAqLworCQltYXggKz0gMyAqIDI7CS8qIG1heGltdW0gbnVtYmVyIG9mIHNlZ21lbnQgZGl2aWRlcnMgKCIuLi4vTSIpCisJCQkJICogaXMgKCg1MTQgKyAxODgpIC8gMTg5KSA9IDMKKwkJCQkgKi8KKwkJbWF4ICs9IDE7CS8qIE5VTCBvbiBlbmQgKi8KKwl9CisKKwltYXggKz0gMTsJLyogMm5kIE5VTCBvbiBlbmQgKi8KKworCV9kZWJ1ZygibWF4OiAlZCIsIG1heCk7CisKKwlrZXkgPSBrbWFsbG9jKG1heCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrZXkpCisJCXJldHVybiBOVUxMOworCisJbGVuID0gMDsKKworCS8qIGJ1aWxkIHRoZSBjb29rZWQga2V5ICovCisJc3ByaW50ZihrZXksICJAJTAyeCVjKyIsICh1bnNpZ25lZCkgY3N1bSwgMCk7CisJbGVuID0gNTsKKwltYXJrID0gbGVuIC0gMTsKKworCWlmIChwcmludCkgeworCQlhY2MgPSAqKHVpbnQxNl90ICopIHJhdzsKKwkJcmF3ICs9IDI7CisKKwkJa2V5W2xlbiArIDFdID0gY2FjaGVmaWxlc19jaGFybWFwW2FjYyAmIDYzXTsKKwkJYWNjID4+PSA2OworCQlrZXlbbGVuXSA9IGNhY2hlZmlsZXNfY2hhcm1hcFthY2MgJiA2M107CisJCWxlbiArPSAyOworCisJCXNlZyA9IDI1MDsKKwkJZm9yIChsb29wID0ga2V5bGVuOyBsb29wID4gMDsgbG9vcC0tKSB7CisJCQlpZiAoc2VnIDw9IDApIHsKKwkJCQlrZXlbbGVuKytdID0gJ1wwJzsKKwkJCQltYXJrID0gbGVuOworCQkJCWtleVtsZW4rK10gPSAnKyc7CisJCQkJc2VnID0gMjUyOworCQkJfQorCisJCQlrZXlbbGVuKytdID0gKnJhdysrOworCQkJQVNTRVJUKGxlbiA8IG1heCk7CisJCX0KKworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYOgkJdHlwZSA9ICdJJzsJYnJlYWs7CisJCWNhc2UgRlNDQUNIRV9DT09LSUVfVFlQRV9EQVRBRklMRToJdHlwZSA9ICdEJzsJYnJlYWs7CisJCWRlZmF1bHQ6CQkJCXR5cGUgPSAnUyc7CWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc2VnID0gMjUyOworCQlmb3IgKGxvb3AgPSBrZXlsZW47IGxvb3AgPiAwOyBsb29wLS0pIHsKKwkJCWlmIChzZWcgPD0gMCkgeworCQkJCWtleVtsZW4rK10gPSAnXDAnOworCQkJCW1hcmsgPSBsZW47CisJCQkJa2V5W2xlbisrXSA9ICcrJzsKKwkJCQlzZWcgPSAyNTI7CisJCQl9CisKKwkJCWFjYyA9ICpyYXcrKzsKKwkJCWFjYyB8PSAqcmF3KysgPDwgODsKKwkJCWFjYyB8PSAqcmF3KysgPDwgMTY7CisKKwkJCV9kZWJ1ZygiYWNjOiAlMDZ4IiwgYWNjKTsKKworCQkJa2V5W2xlbisrXSA9IGNhY2hlZmlsZXNfY2hhcm1hcFthY2MgJiA2M107CisJCQlhY2MgPj49IDY7CisJCQlrZXlbbGVuKytdID0gY2FjaGVmaWxlc19jaGFybWFwW2FjYyAmIDYzXTsKKwkJCWFjYyA+Pj0gNjsKKwkJCWtleVtsZW4rK10gPSBjYWNoZWZpbGVzX2NoYXJtYXBbYWNjICYgNjNdOworCQkJYWNjID4+PSA2OworCQkJa2V5W2xlbisrXSA9IGNhY2hlZmlsZXNfY2hhcm1hcFthY2MgJiA2M107CisKKwkJCUFTU0VSVChsZW4gPCBtYXgpOworCQl9CisKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWDoJCXR5cGUgPSAnSic7CWJyZWFrOworCQljYXNlIEZTQ0FDSEVfQ09PS0lFX1RZUEVfREFUQUZJTEU6CXR5cGUgPSAnRSc7CWJyZWFrOworCQlkZWZhdWx0OgkJCQl0eXBlID0gJ1QnOwlicmVhazsKKwkJfQorCX0KKworCWtleVttYXJrXSA9IHR5cGU7CisJa2V5W2xlbisrXSA9IDA7CisJa2V5W2xlbl0gPSAwOworCisJX2xlYXZlKCIgPSAlcCAlZCIsIGtleSwgbGVuKTsKKwlyZXR1cm4ga2V5OworfQpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy9tYWluLmMgYi9mcy9jYWNoZWZpbGVzL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZhOGNmCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9tYWluLmMKQEAgLTAsMCArMSwxMDYgQEAKKy8qIE5ldHdvcmsgZmlsZXN5c3RlbSBjYWNoaW5nIGJhY2tlbmQgdG8gdXNlIGNhY2hlIGZpbGVzIG9uIGEgcHJlbW91bnRlZAorICogZmlsZXN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhdGZzLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3Vuc2lnbmVkIGNhY2hlZmlsZXNfZGVidWc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGNhY2hlZmlsZXNfZGVidWcsIHVpbnQsIFNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoY2FjaGVmaWxlc19kZWJ1ZywgIkNhY2hlRmlsZXMgZGVidWdnaW5nIG1hc2siKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNb3VudGVkLWZpbGVzeXN0ZW0gYmFzZWQgY2FjaGUiKTsKK01PRFVMRV9BVVRIT1IoIlJlZCBIYXQsIEluYy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlZmlsZXNfb2JqZWN0X2phcjsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGNhY2hlZmlsZXNfZGV2ID0geworCS5taW5vcgk9IE1JU0NfRFlOQU1JQ19NSU5PUiwKKwkubmFtZQk9ICJjYWNoZWZpbGVzIiwKKwkuZm9wcwk9ICZjYWNoZWZpbGVzX2RhZW1vbl9mb3BzLAorfTsKKworc3RhdGljIHZvaWQgY2FjaGVmaWxlc19vYmplY3RfaW5pdF9vbmNlKHZvaWQgKl9vYmplY3QpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QgPSBfb2JqZWN0OworCisJbWVtc2V0KG9iamVjdCwgMCwgc2l6ZW9mKCpvYmplY3QpKTsKKwlzcGluX2xvY2tfaW5pdCgmb2JqZWN0LT53b3JrX2xvY2spOworfQorCisvKgorICogaW5pdGlhbGlzZSB0aGUgZnMgY2FjaGluZyBtb2R1bGUKKyAqLworc3RhdGljIGludCBfX2luaXQgY2FjaGVmaWxlc19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmNhY2hlZmlsZXNfZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9kZXY7CisKKwkvKiBjcmVhdGUgYW4gb2JqZWN0IGphciAqLworCXJldCA9IC1FTk9NRU07CisJY2FjaGVmaWxlc19vYmplY3RfamFyID0KKwkJa21lbV9jYWNoZV9jcmVhdGUoImNhY2hlZmlsZXNfb2JqZWN0X2phciIsCisJCQkJICBzaXplb2Yoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0KSwKKwkJCQkgIDAsCisJCQkJICBTTEFCX0hXQ0FDSEVfQUxJR04sCisJCQkJICBjYWNoZWZpbGVzX29iamVjdF9pbml0X29uY2UpOworCWlmICghY2FjaGVmaWxlc19vYmplY3RfamFyKSB7CisJCXByaW50ayhLRVJOX05PVElDRQorCQkgICAgICAgIkNhY2hlRmlsZXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBhbiBvYmplY3QgamFyXG4iKTsKKwkJZ290byBlcnJvcl9vYmplY3RfamFyOworCX0KKworCXJldCA9IGNhY2hlZmlsZXNfcHJvY19pbml0KCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcHJvYzsKKworCXByaW50ayhLRVJOX0lORk8gIkNhY2hlRmlsZXM6IExvYWRlZFxuIik7CisJcmV0dXJuIDA7CisKK2Vycm9yX3Byb2M6CisJa21lbV9jYWNoZV9kZXN0cm95KGNhY2hlZmlsZXNfb2JqZWN0X2phcik7CitlcnJvcl9vYmplY3RfamFyOgorCW1pc2NfZGVyZWdpc3RlcigmY2FjaGVmaWxlc19kZXYpOworZXJyb3JfZGV2OgorCWtlcnJvcigiZmFpbGVkIHRvIHJlZ2lzdGVyOiAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworZnNfaW5pdGNhbGwoY2FjaGVmaWxlc19pbml0KTsKKworLyoKKyAqIGNsZWFuIHVwIG9uIG1vZHVsZSByZW1vdmFsCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBjYWNoZWZpbGVzX2V4aXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJDYWNoZUZpbGVzOiBVbmxvYWRpbmdcbiIpOworCisJY2FjaGVmaWxlc19wcm9jX2NsZWFudXAoKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koY2FjaGVmaWxlc19vYmplY3RfamFyKTsKKwltaXNjX2RlcmVnaXN0ZXIoJmNhY2hlZmlsZXNfZGV2KTsKK30KKworbW9kdWxlX2V4aXQoY2FjaGVmaWxlc19leGl0KTsKZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYyBiL2ZzL2NhY2hlZmlsZXMvbmFtZWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2U4MThhCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9uYW1laS5jCkBAIC0wLDAgKzEsNzcxIEBACisvKiBDYWNoZUZpbGVzIHBhdGggd2Fsa2luZyBhbmQgcmVsYXRlZCByb3V0aW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9mc25vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CisjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfd2FpdF9iaXQodm9pZCAqZmxhZ3MpCit7CisJc2NoZWR1bGUoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlY29yZCB0aGUgZmFjdCB0aGF0IGFuIG9iamVjdCBpcyBub3cgYWN0aXZlCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfbWFya19vYmplY3RfYWN0aXZlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKnhvYmplY3Q7CisJc3RydWN0IHJiX25vZGUgKipfcCwgKl9wYXJlbnQgPSBOVUxMOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKworCV9lbnRlcigiLCVwIiwgb2JqZWN0KTsKKwordHJ5X2FnYWluOgorCXdyaXRlX2xvY2soJmNhY2hlLT5hY3RpdmVfbG9jayk7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUsICZvYmplY3QtPmZsYWdzKSkKKwkJQlVHKCk7CisKKwlkZW50cnkgPSBvYmplY3QtPmRlbnRyeTsKKwlfcCA9ICZjYWNoZS0+YWN0aXZlX25vZGVzLnJiX25vZGU7CisJd2hpbGUgKCpfcCkgeworCQlfcGFyZW50ID0gKl9wOworCQl4b2JqZWN0ID0gcmJfZW50cnkoX3BhcmVudCwKKwkJCQkgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGFjdGl2ZV9ub2RlKTsKKworCQlBU1NFUlQoeG9iamVjdCAhPSBvYmplY3QpOworCisJCWlmICh4b2JqZWN0LT5kZW50cnkgPiBkZW50cnkpCisJCQlfcCA9ICYoKl9wKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoeG9iamVjdC0+ZGVudHJ5IDwgZGVudHJ5KQorCQkJX3AgPSAmKCpfcCktPnJiX3JpZ2h0OworCQllbHNlCisJCQlnb3RvIHdhaXRfZm9yX29sZF9vYmplY3Q7CisJfQorCisJcmJfbGlua19ub2RlKCZvYmplY3QtPmFjdGl2ZV9ub2RlLCBfcGFyZW50LCBfcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZvYmplY3QtPmFjdGl2ZV9ub2RlLCAmY2FjaGUtPmFjdGl2ZV9ub2Rlcyk7CisKKwl3cml0ZV91bmxvY2soJmNhY2hlLT5hY3RpdmVfbG9jayk7CisJX2xlYXZlKCIiKTsKKwlyZXR1cm47CisKKwkvKiBhbiBvbGQgb2JqZWN0IGZyb20gYSBwcmV2aW91cyBpbmNhcm5hdGlvbiBpcyBob2dnaW5nIHRoZSBzbG90IC0gd2UKKwkgKiBuZWVkIHRvIHdhaXQgZm9yIGl0IHRvIGJlIGRlc3Ryb3llZCAqLword2FpdF9mb3Jfb2xkX29iamVjdDoKKwlpZiAoeG9iamVjdC0+ZnNjYWNoZS5zdGF0ZSA8IEZTQ0FDSEVfT0JKRUNUX0RZSU5HKSB7CisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiBFcnJvcjoiCisJCSAgICAgICAiIFVuZXhwZWN0ZWQgb2JqZWN0IGNvbGxpc2lvblxuIik7CisJCXByaW50ayhLRVJOX0VSUiAieG9iamVjdDogT0JKJXhcbiIsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLmRlYnVnX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4b2Jqc3RhdGU9JXNcbiIsCisJCSAgICAgICBmc2NhY2hlX29iamVjdF9zdGF0ZXNbeG9iamVjdC0+ZnNjYWNoZS5zdGF0ZV0pOworCQlwcmludGsoS0VSTl9FUlIgInhvYmpmbGFncz0lbHhcbiIsIHhvYmplY3QtPmZzY2FjaGUuZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIgInhvYmpldmVudD0lbHggWyVseF1cbiIsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLmV2ZW50cywgeG9iamVjdC0+ZnNjYWNoZS5ldmVudF9tYXNrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4b3BzPSV1IGlucD0ldSBleGM9JXVcbiIsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLm5fb3BzLCB4b2JqZWN0LT5mc2NhY2hlLm5faW5fcHJvZ3Jlc3MsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLm5fZXhjbHVzaXZlKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJ4Y29va2llPSVwIFtwcj0lcCBuZD0lcCBmbD0lbHhdXG4iLAorCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5jb29raWUsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+cGFyZW50LAorCQkgICAgICAgeG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPm5ldGZzX2RhdGEsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+ZmxhZ3MpOworCQlwcmludGsoS0VSTl9FUlIgInhwYXJlbnQ9JXBcbiIsCisJCSAgICAgICB4b2JqZWN0LT5mc2NhY2hlLnBhcmVudCk7CisJCXByaW50ayhLRVJOX0VSUiAib2JqZWN0OiBPQkoleFxuIiwKKwkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5kZWJ1Z19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiY29va2llPSVwIFtwcj0lcCBuZD0lcCBmbD0lbHhdXG4iLAorCQkgICAgICAgb2JqZWN0LT5mc2NhY2hlLmNvb2tpZSwKKwkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPnBhcmVudCwKKwkJICAgICAgIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPm5ldGZzX2RhdGEsCisJCSAgICAgICBvYmplY3QtPmZzY2FjaGUuY29va2llLT5mbGFncyk7CisJCXByaW50ayhLRVJOX0VSUiAicGFyZW50PSVwXG4iLAorCQkgICAgICAgb2JqZWN0LT5mc2NhY2hlLnBhcmVudCk7CisJCUJVRygpOworCX0KKwlhdG9taWNfaW5jKCZ4b2JqZWN0LT51c2FnZSk7CisJd3JpdGVfdW5sb2NrKCZjYWNoZS0+YWN0aXZlX2xvY2spOworCisJX2RlYnVnKCI+Pj4gd2FpdCIpOworCXdhaXRfb25fYml0KCZ4b2JqZWN0LT5mbGFncywgQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFLAorCQkgICAgY2FjaGVmaWxlc193YWl0X2JpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCV9kZWJ1ZygiPDw8IHdhaXRlZCIpOworCisJY2FjaGUtPmNhY2hlLm9wcy0+cHV0X29iamVjdCgmeG9iamVjdC0+ZnNjYWNoZSk7CisJZ290byB0cnlfYWdhaW47Cit9CisKKy8qCisgKiBkZWxldGUgYW4gb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIGNhY2hlCisgKiAtIGZpbGUgYmFja2VkIG9iamVjdHMgYXJlIHVubGlua2VkCisgKiAtIGRpcmVjdG9yeSBiYWNrZWQgb2JqZWN0cyBhcmUgc3R1ZmZlZCBpbnRvIHRoZSBncmF2ZXlhcmQgZm9yIHVzZXJzcGFjZSB0bworICogICBkZWxldGUKKyAqIC0gdW5sb2NrcyB0aGUgZGlyZWN0b3J5IG11dGV4CisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19idXJ5X29iamVjdChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCisJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkaXIsCisJCQkJICBzdHJ1Y3QgZGVudHJ5ICpyZXApCit7CisJc3RydWN0IGRlbnRyeSAqZ3JhdmUsICp0cmFwOworCWNoYXIgbmJ1ZmZlcls4ICsgOCArIDFdOworCWludCByZXQ7CisKKwlfZW50ZXIoIiwnJSouKnMnLCclKi4qcyciLAorCSAgICAgICBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLmxlbiwgZGlyLT5kX25hbWUubmFtZSwKKwkgICAgICAgcmVwLT5kX25hbWUubGVuLCByZXAtPmRfbmFtZS5sZW4sIHJlcC0+ZF9uYW1lLm5hbWUpOworCisJLyogbm9uLWRpcmVjdG9yaWVzIGNhbiBqdXN0IGJlIHVubGlua2VkICovCisJaWYgKCFTX0lTRElSKHJlcC0+ZF9pbm9kZS0+aV9tb2RlKSkgeworCQlfZGVidWcoInVubGluayBzdGFsZSBvYmplY3QiKTsKKwkJcmV0ID0gdmZzX3VubGluayhkaXItPmRfaW5vZGUsIHJlcCk7CisKKwkJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJCWlmIChyZXQgPT0gLUVJTykKKwkJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJVbmxpbmsgZmFpbGVkIik7CisKKwkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogZGlyZWN0b3JpZXMgaGF2ZSB0byBiZSBtb3ZlZCB0byB0aGUgZ3JhdmV5YXJkICovCisJX2RlYnVnKCJtb3ZlIHN0YWxlIG9iamVjdCB0byBncmF2ZXlhcmQiKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisKK3RyeV9hZ2FpbjoKKwkvKiBmaXJzdCBzdGVwIGlzIHRvIG1ha2UgdXAgYSBncmF2ZSBkZW50cnkgaW4gdGhlIGdyYXZleWFyZCAqLworCXNwcmludGYobmJ1ZmZlciwgIiUwOHglMDh4IiwKKwkJKHVpbnQzMl90KSBnZXRfc2Vjb25kcygpLAorCQkodWludDMyX3QpIGF0b21pY19pbmNfcmV0dXJuKCZjYWNoZS0+Z3JhdmVjb3VudGVyKSk7CisKKwkvKiBkbyB0aGUgbXVsdGl3YXkgbG9jayBtYWdpYyAqLworCXRyYXAgPSBsb2NrX3JlbmFtZShjYWNoZS0+Z3JhdmV5YXJkLCBkaXIpOworCisJLyogZG8gc29tZSBjaGVja3MgYmVmb3JlIGdldHRpbmcgdGhlIGdyYXZlIGRlbnRyeSAqLworCWlmIChyZXAtPmRfcGFyZW50ICE9IGRpcikgeworCQkvKiB0aGUgZW50cnkgd2FzIHByb2JhYmx5IGN1bGxlZCB3aGVuIHdlIGRyb3BwZWQgdGhlIHBhcmVudCBkaXIKKwkJICogbG9jayAqLworCQl1bmxvY2tfcmVuYW1lKGNhY2hlLT5ncmF2ZXlhcmQsIGRpcik7CisJCV9sZWF2ZSgiID0gMCBbY3VsbGVkP10iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFTX0lTRElSKGNhY2hlLT5ncmF2ZXlhcmQtPmRfaW5vZGUtPmlfbW9kZSkpIHsKKwkJdW5sb2NrX3JlbmFtZShjYWNoZS0+Z3JhdmV5YXJkLCBkaXIpOworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiR3JhdmV5YXJkIG5vIGxvbmdlciBhIGRpcmVjdG9yeSIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAodHJhcCA9PSByZXApIHsKKwkJdW5sb2NrX3JlbmFtZShjYWNoZS0+Z3JhdmV5YXJkLCBkaXIpOworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiTWF5IG5vdCBtYWtlIGRpcmVjdG9yeSBsb29wIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChkX21vdW50cG9pbnQocmVwKSkgeworCQl1bmxvY2tfcmVuYW1lKGNhY2hlLT5ncmF2ZXlhcmQsIGRpcik7CisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJNb3VudHBvaW50IGluIGNhY2hlIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWdyYXZlID0gbG9va3VwX29uZV9sZW4obmJ1ZmZlciwgY2FjaGUtPmdyYXZleWFyZCwgc3RybGVuKG5idWZmZXIpKTsKKwlpZiAoSVNfRVJSKGdyYXZlKSkgeworCQl1bmxvY2tfcmVuYW1lKGNhY2hlLT5ncmF2ZXlhcmQsIGRpcik7CisKKwkJaWYgKFBUUl9FUlIoZ3JhdmUpID09IC1FTk9NRU0pIHsKKwkJCV9sZWF2ZSgiID0gLUVOT01FTSIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiTG9va3VwIGVycm9yICVsZCIsCisJCQkJICAgIFBUUl9FUlIoZ3JhdmUpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGdyYXZlLT5kX2lub2RlKSB7CisJCXVubG9ja19yZW5hbWUoY2FjaGUtPmdyYXZleWFyZCwgZGlyKTsKKwkJZHB1dChncmF2ZSk7CisJCWdyYXZlID0gTlVMTDsKKwkJY29uZF9yZXNjaGVkKCk7CisJCWdvdG8gdHJ5X2FnYWluOworCX0KKworCWlmIChkX21vdW50cG9pbnQoZ3JhdmUpKSB7CisJCXVubG9ja19yZW5hbWUoY2FjaGUtPmdyYXZleWFyZCwgZGlyKTsKKwkJZHB1dChncmF2ZSk7CisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJNb3VudHBvaW50IGluIGdyYXZleWFyZCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiB0YXJnZXQgc2hvdWxkIG5vdCBiZSBhbiBhbmNlc3RvciBvZiBzb3VyY2UgKi8KKwlpZiAodHJhcCA9PSBncmF2ZSkgeworCQl1bmxvY2tfcmVuYW1lKGNhY2hlLT5ncmF2ZXlhcmQsIGRpcik7CisJCWRwdXQoZ3JhdmUpOworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiTWF5IG5vdCBtYWtlIGRpcmVjdG9yeSBsb29wIik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIGF0dGVtcHQgdGhlIHJlbmFtZSAqLworCXJldCA9IHZmc19yZW5hbWUoZGlyLT5kX2lub2RlLCByZXAsIGNhY2hlLT5ncmF2ZXlhcmQtPmRfaW5vZGUsIGdyYXZlKTsKKwlpZiAocmV0ICE9IDAgJiYgcmV0ICE9IC1FTk9NRU0pCisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJSZW5hbWUgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCByZXQpOworCisJdW5sb2NrX3JlbmFtZShjYWNoZS0+Z3JhdmV5YXJkLCBkaXIpOworCWRwdXQoZ3JhdmUpOworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworfQorCisvKgorICogZGVsZXRlIGFuIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBjYWNoZQorICovCitpbnQgY2FjaGVmaWxlc19kZWxldGVfb2JqZWN0KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGRlbnRyeSAqZGlyOworCWludCByZXQ7CisKKwlfZW50ZXIoIix7JXB9Iiwgb2JqZWN0LT5kZW50cnkpOworCisJQVNTRVJUKG9iamVjdC0+ZGVudHJ5KTsKKwlBU1NFUlQob2JqZWN0LT5kZW50cnktPmRfaW5vZGUpOworCUFTU0VSVChvYmplY3QtPmRlbnRyeS0+ZF9wYXJlbnQpOworCisJZGlyID0gZGdldF9wYXJlbnQob2JqZWN0LT5kZW50cnkpOworCisJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwlyZXQgPSBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KGNhY2hlLCBkaXIsIG9iamVjdC0+ZGVudHJ5KTsKKworCWRwdXQoZGlyKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogd2FsayBmcm9tIHRoZSBwYXJlbnQgb2JqZWN0IHRvIHRoZSBjaGlsZCBvYmplY3QgdGhyb3VnaCB0aGUgYmFja2luZworICogZmlsZXN5c3RlbSwgY3JlYXRpbmcgZGlyZWN0b3JpZXMgYXMgd2UgZ28KKyAqLworaW50IGNhY2hlZmlsZXNfd2Fsa190b19vYmplY3Qoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpwYXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmtleSwKKwkJCSAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgZGVudHJ5ICpkaXIsICpuZXh0ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IHJldCwgbmxlbjsKKworCV9lbnRlcigieyVwfSwsJXMsIiwgcGFyZW50LT5kZW50cnksIGtleSk7CisKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihwYXJlbnQtPmZzY2FjaGUuY2FjaGUsCisJCQkgICAgIHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlLCBjYWNoZSk7CisKKwlBU1NFUlQocGFyZW50LT5kZW50cnkpOworCUFTU0VSVChwYXJlbnQtPmRlbnRyeS0+ZF9pbm9kZSk7CisKKwlpZiAoIShTX0lTRElSKHBhcmVudC0+ZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSkgeworCQkvLyBUT0RPOiBjb252ZXJ0IGZpbGUgdG8gZGlyCisJCV9sZWF2ZSgibG9va2luZyB1cCBpbiBub25lIGRpcmVjdG9yeSIpOworCQlyZXR1cm4gLUVOT0JVRlM7CisJfQorCisJZGlyID0gZGdldChwYXJlbnQtPmRlbnRyeSk7CisKK2FkdmFuY2U6CisJLyogYXR0ZW1wdCB0byB0cmFuc2l0IHRoZSBmaXJzdCBkaXJlY3RvcnkgY29tcG9uZW50ICovCisJbmFtZSA9IGtleTsKKwlubGVuID0gc3RybGVuKGtleSk7CisKKwkvKiBrZXkgZW5kcyBpbiBhIGRvdWJsZSBOVUwgKi8KKwlrZXkgPSBrZXkgKyBubGVuICsgMTsKKwlpZiAoISprZXkpCisJCWtleSA9IE5VTEw7CisKK2xvb2t1cF9hZ2FpbjoKKwkvKiBzZWFyY2ggdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGZvciB0aGUgZWxlbWVudCBuYW1lICovCisJX2RlYnVnKCJsb29rdXAgJyVzJyIsIG5hbWUpOworCisJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKworCXN0YXJ0ID0gamlmZmllczsKKwluZXh0ID0gbG9va3VwX29uZV9sZW4obmFtZSwgZGlyLCBubGVuKTsKKwljYWNoZWZpbGVzX2hpc3QoY2FjaGVmaWxlc19sb29rdXBfaGlzdG9ncmFtLCBzdGFydCk7CisJaWYgKElTX0VSUihuZXh0KSkKKwkJZ290byBsb29rdXBfZXJyb3I7CisKKwlfZGVidWcoIm5leHQgLT4gJXAgJXMiLCBuZXh0LCBuZXh0LT5kX2lub2RlID8gInBvc2l0aXZlIiA6ICJuZWdhdGl2ZSIpOworCisJaWYgKCFrZXkpCisJCW9iamVjdC0+bmV3ID0gIW5leHQtPmRfaW5vZGU7CisKKwkvKiBpZiB0aGlzIGVsZW1lbnQgb2YgdGhlIHBhdGggZG9lc24ndCBleGlzdCwgdGhlbiB0aGUgbG9va3VwIHBoYXNlCisJICogZmFpbGVkLCBhbmQgd2UgY2FuIHJlbGVhc2UgYW55IHJlYWRlcnMgaW4gdGhlIGNlcnRhaW4ga25vd2xlZGdlIHRoYXQKKwkgKiB0aGVyZSdzIG5vdGhpbmcgZm9yIHRoZW0gdG8gYWN0dWFsbHkgcmVhZCAqLworCWlmICghbmV4dC0+ZF9pbm9kZSkKKwkJZnNjYWNoZV9vYmplY3RfbG9va3VwX25lZ2F0aXZlKCZvYmplY3QtPmZzY2FjaGUpOworCisJLyogd2UgbmVlZCB0byBjcmVhdGUgdGhlIG9iamVjdCBpZiBpdCdzIG5lZ2F0aXZlICovCisJaWYgKGtleSB8fCBvYmplY3QtPnR5cGUgPT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCkgeworCQkvKiBpbmRleCBvYmplY3RzIGFuZCBpbnRlcnZlbmluZyB0cmVlIGxldmVscyBtdXN0IGJlIHN1YmRpcnMgKi8KKwkJaWYgKCFuZXh0LT5kX2lub2RlKSB7CisJCQlyZXQgPSBjYWNoZWZpbGVzX2hhc19zcGFjZShjYWNoZSwgMSwgMCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGNyZWF0ZV9lcnJvcjsKKworCQkJc3RhcnQgPSBqaWZmaWVzOworCQkJcmV0ID0gdmZzX21rZGlyKGRpci0+ZF9pbm9kZSwgbmV4dCwgMCk7CisJCQljYWNoZWZpbGVzX2hpc3QoY2FjaGVmaWxlc19ta2Rpcl9oaXN0b2dyYW0sIHN0YXJ0KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gY3JlYXRlX2Vycm9yOworCisJCQlBU1NFUlQobmV4dC0+ZF9pbm9kZSk7CisKKwkJCV9kZWJ1ZygibWtkaXIgLT4gJXB7JXB7aW5vPSVsdX19IiwKKwkJCSAgICAgICBuZXh0LCBuZXh0LT5kX2lub2RlLCBuZXh0LT5kX2lub2RlLT5pX2lubyk7CisKKwkJfSBlbHNlIGlmICghU19JU0RJUihuZXh0LT5kX2lub2RlLT5pX21vZGUpKSB7CisJCQlrZXJyb3IoImlub2RlICVsdSBpcyBub3QgYSBkaXJlY3RvcnkiLAorCQkJICAgICAgIG5leHQtPmRfaW5vZGUtPmlfaW5vKTsKKwkJCXJldCA9IC1FTk9CVUZTOworCQkJZ290byBlcnJvcjsKKwkJfQorCisJfSBlbHNlIHsKKwkJLyogbm9uLWluZGV4IG9iamVjdHMgc3RhcnQgb3V0IGxpZmUgYXMgZmlsZXMgKi8KKwkJaWYgKCFuZXh0LT5kX2lub2RlKSB7CisJCQlyZXQgPSBjYWNoZWZpbGVzX2hhc19zcGFjZShjYWNoZSwgMSwgMCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGNyZWF0ZV9lcnJvcjsKKworCQkJc3RhcnQgPSBqaWZmaWVzOworCQkJcmV0ID0gdmZzX2NyZWF0ZShkaXItPmRfaW5vZGUsIG5leHQsIFNfSUZSRUcsIE5VTEwpOworCQkJY2FjaGVmaWxlc19oaXN0KGNhY2hlZmlsZXNfY3JlYXRlX2hpc3RvZ3JhbSwgc3RhcnQpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBjcmVhdGVfZXJyb3I7CisKKwkJCUFTU0VSVChuZXh0LT5kX2lub2RlKTsKKworCQkJX2RlYnVnKCJjcmVhdGUgLT4gJXB7JXB7aW5vPSVsdX19IiwKKwkJCSAgICAgICBuZXh0LCBuZXh0LT5kX2lub2RlLCBuZXh0LT5kX2lub2RlLT5pX2lubyk7CisKKwkJfSBlbHNlIGlmICghU19JU0RJUihuZXh0LT5kX2lub2RlLT5pX21vZGUpICYmCisJCQkgICAhU19JU1JFRyhuZXh0LT5kX2lub2RlLT5pX21vZGUpCisJCQkgICApIHsKKwkJCWtlcnJvcigiaW5vZGUgJWx1IGlzIG5vdCBhIGZpbGUgb3IgZGlyZWN0b3J5IiwKKwkJCSAgICAgICBuZXh0LT5kX2lub2RlLT5pX2lubyk7CisJCQlyZXQgPSAtRU5PQlVGUzsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwkvKiBwcm9jZXNzIHRoZSBuZXh0IGNvbXBvbmVudCAqLworCWlmIChrZXkpIHsKKwkJX2RlYnVnKCJhZHZhbmNlIik7CisJCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwkJZHB1dChkaXIpOworCQlkaXIgPSBuZXh0OworCQluZXh0ID0gTlVMTDsKKwkJZ290byBhZHZhbmNlOworCX0KKworCS8qIHdlJ3ZlIGZvdW5kIHRoZSBvYmplY3Qgd2Ugd2VyZSBsb29raW5nIGZvciAqLworCW9iamVjdC0+ZGVudHJ5ID0gbmV4dDsKKworCS8qIGlmIHdlJ3ZlIGZvdW5kIHRoYXQgdGhlIHRlcm1pbmFsIG9iamVjdCBleGlzdHMsIHRoZW4gd2UgbmVlZCB0bworCSAqIGNoZWNrIGl0cyBhdHRyaWJ1dGVzIGFuZCBkZWxldGUgaXQgaWYgaXQncyBvdXQgb2YgZGF0ZSAqLworCWlmICghb2JqZWN0LT5uZXcpIHsKKwkJX2RlYnVnKCJ2YWxpZGF0ZSAnJSouKnMnIiwKKwkJICAgICAgIG5leHQtPmRfbmFtZS5sZW4sIG5leHQtPmRfbmFtZS5sZW4sIG5leHQtPmRfbmFtZS5uYW1lKTsKKworCQlyZXQgPSBjYWNoZWZpbGVzX2NoZWNrX29iamVjdF94YXR0cihvYmplY3QsIGF1eGRhdGEpOworCQlpZiAocmV0ID09IC1FU1RBTEUpIHsKKwkJCS8qIGRlbGV0ZSB0aGUgb2JqZWN0ICh0aGUgZGVsZXRlciBkcm9wcyB0aGUgZGlyZWN0b3J5CisJCQkgKiBtdXRleCkgKi8KKwkJCW9iamVjdC0+ZGVudHJ5ID0gTlVMTDsKKworCQkJcmV0ID0gY2FjaGVmaWxlc19idXJ5X29iamVjdChjYWNoZSwgZGlyLCBuZXh0KTsKKwkJCWRwdXQobmV4dCk7CisJCQluZXh0ID0gTlVMTDsKKworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBkZWxldGVfZXJyb3I7CisKKwkJCV9kZWJ1ZygicmVkbyBsb29rdXAiKTsKKwkJCWdvdG8gbG9va3VwX2FnYWluOworCQl9CisJfQorCisJLyogbm90ZSB0aGF0IHdlJ3JlIG5vdyB1c2luZyB0aGlzIG9iamVjdCAqLworCWNhY2hlZmlsZXNfbWFya19vYmplY3RfYWN0aXZlKGNhY2hlLCBvYmplY3QpOworCisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCWRwdXQoZGlyKTsKKwlkaXIgPSBOVUxMOworCisJX2RlYnVnKCI9PT0gT0JUQUlORURfT0JKRUNUID09PSIpOworCisJaWYgKG9iamVjdC0+bmV3KSB7CisJCS8qIGF0dGFjaCBkYXRhIHRvIGEgbmV3bHkgY29uc3RydWN0ZWQgdGVybWluYWwgb2JqZWN0ICovCisJCXJldCA9IGNhY2hlZmlsZXNfc2V0X29iamVjdF94YXR0cihvYmplY3QsIGF1eGRhdGEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gY2hlY2tfZXJyb3I7CisJfSBlbHNlIHsKKwkJLyogYWx3YXlzIHVwZGF0ZSB0aGUgYXRpbWUgb24gYW4gb2JqZWN0IHdlJ3ZlIGp1c3QgbG9va2VkIHVwCisJCSAqICh0aGlzIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBjdWxsaW5nLCBhbmQgYXRpbWVzIGFyZSBvbmx5CisJCSAqIHVwZGF0ZWQgYnkgcmVhZCwgd3JpdGUgYW5kIHJlYWRkaXIgYnV0IG5vdCBsb29rdXAgb3IKKwkJICogb3BlbikgKi8KKwkJdG91Y2hfYXRpbWUoY2FjaGUtPm1udCwgbmV4dCk7CisJfQorCisJLyogb3BlbiBhIGZpbGUgaW50ZXJmYWNlIG9udG8gYSBkYXRhIGZpbGUgKi8KKwlpZiAob2JqZWN0LT50eXBlICE9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgpIHsKKwkJaWYgKFNfSVNSRUcob2JqZWN0LT5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKKwkJCWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgKmFvcHM7CisKKwkJCXJldCA9IC1FUEVSTTsKKwkJCWFvcHMgPSBvYmplY3QtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nLT5hX29wczsKKwkJCWlmICghYW9wcy0+Ym1hcCkKKwkJCQlnb3RvIGNoZWNrX2Vycm9yOworCisJCQlvYmplY3QtPmJhY2tlciA9IG9iamVjdC0+ZGVudHJ5OworCQl9IGVsc2UgeworCQkJQlVHKCk7IC8vIFRPRE86IG9wZW4gZmlsZSBpbiBkYXRhLWNsYXNzIHN1YmRpcgorCQl9CisJfQorCisJb2JqZWN0LT5uZXcgPSAwOworCWZzY2FjaGVfb2J0YWluZWRfb2JqZWN0KCZvYmplY3QtPmZzY2FjaGUpOworCisJX2xlYXZlKCIgPSAwIFslbHVdIiwgb2JqZWN0LT5kZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKKwlyZXR1cm4gMDsKKworY3JlYXRlX2Vycm9yOgorCV9kZWJ1ZygiY3JlYXRlIGVycm9yICVkIiwgcmV0KTsKKwlpZiAocmV0ID09IC1FSU8pCisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJDcmVhdGUvbWtkaXIgZmFpbGVkIik7CisJZ290byBlcnJvcjsKKworY2hlY2tfZXJyb3I6CisJX2RlYnVnKCJjaGVjayBlcnJvciAlZCIsIHJldCk7CisJd3JpdGVfbG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKwlyYl9lcmFzZSgmb2JqZWN0LT5hY3RpdmVfbm9kZSwgJmNhY2hlLT5hY3RpdmVfbm9kZXMpOworCWNsZWFyX2JpdChDQUNIRUZJTEVTX09CSkVDVF9BQ1RJVkUsICZvYmplY3QtPmZsYWdzKTsKKwl3YWtlX3VwX2JpdCgmb2JqZWN0LT5mbGFncywgQ0FDSEVGSUxFU19PQkpFQ1RfQUNUSVZFKTsKKwl3cml0ZV91bmxvY2soJmNhY2hlLT5hY3RpdmVfbG9jayk7CisKKwlkcHV0KG9iamVjdC0+ZGVudHJ5KTsKKwlvYmplY3QtPmRlbnRyeSA9IE5VTEw7CisJZ290byBlcnJvcl9vdXQ7CisKK2RlbGV0ZV9lcnJvcjoKKwlfZGVidWcoImRlbGV0ZSBlcnJvciAlZCIsIHJldCk7CisJZ290byBlcnJvcl9vdXQyOworCitsb29rdXBfZXJyb3I6CisJX2RlYnVnKCJsb29rdXAgZXJyb3IgJWxkIiwgUFRSX0VSUihuZXh0KSk7CisJcmV0ID0gUFRSX0VSUihuZXh0KTsKKwlpZiAocmV0ID09IC1FSU8pCisJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsICJMb29rdXAgZmFpbGVkIik7CisJbmV4dCA9IE5VTEw7CitlcnJvcjoKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZHB1dChuZXh0KTsKK2Vycm9yX291dDI6CisJZHB1dChkaXIpOworZXJyb3Jfb3V0OgorCWlmIChyZXQgPT0gLUVOT1NQQykKKwkJcmV0ID0gLUVOT0JVRlM7CisKKwlfbGVhdmUoIiA9IGVycm9yICVkIiwgLXJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGdldCBhIHN1YmRpcmVjdG9yeQorICovCitzdHJ1Y3QgZGVudHJ5ICpjYWNoZWZpbGVzX2dldF9kaXJlY3Rvcnkoc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlLAorCQkJCQlzdHJ1Y3QgZGVudHJ5ICpkaXIsCisJCQkJCWNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJc3RydWN0IGRlbnRyeSAqc3ViZGlyOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJaW50IHJldDsKKworCV9lbnRlcigiLCwlcyIsIGRpcm5hbWUpOworCisJLyogc2VhcmNoIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmb3IgdGhlIGVsZW1lbnQgbmFtZSAqLworCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwlzdGFydCA9IGppZmZpZXM7CisJc3ViZGlyID0gbG9va3VwX29uZV9sZW4oZGlybmFtZSwgZGlyLCBzdHJsZW4oZGlybmFtZSkpOworCWNhY2hlZmlsZXNfaGlzdChjYWNoZWZpbGVzX2xvb2t1cF9oaXN0b2dyYW0sIHN0YXJ0KTsKKwlpZiAoSVNfRVJSKHN1YmRpcikpIHsKKwkJaWYgKFBUUl9FUlIoc3ViZGlyKSA9PSAtRU5PTUVNKQorCQkJZ290byBub21lbV9kX2FsbG9jOworCQlnb3RvIGxvb2t1cF9lcnJvcjsKKwl9CisKKwlfZGVidWcoInN1YmRpciAtPiAlcCAlcyIsCisJICAgICAgIHN1YmRpciwgc3ViZGlyLT5kX2lub2RlID8gInBvc2l0aXZlIiA6ICJuZWdhdGl2ZSIpOworCisJLyogd2UgbmVlZCB0byBjcmVhdGUgdGhlIHN1YmRpciBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldCAqLworCWlmICghc3ViZGlyLT5kX2lub2RlKSB7CisJCXJldCA9IGNhY2hlZmlsZXNfaGFzX3NwYWNlKGNhY2hlLCAxLCAwKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG1rZGlyX2Vycm9yOworCisJCV9kZWJ1ZygiYXR0ZW1wdCBta2RpciIpOworCisJCXJldCA9IHZmc19ta2RpcihkaXItPmRfaW5vZGUsIHN1YmRpciwgMDcwMCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBta2Rpcl9lcnJvcjsKKworCQlBU1NFUlQoc3ViZGlyLT5kX2lub2RlKTsKKworCQlfZGVidWcoIm1rZGlyIC0+ICVweyVwe2lubz0lbHV9fSIsCisJCSAgICAgICBzdWJkaXIsCisJCSAgICAgICBzdWJkaXItPmRfaW5vZGUsCisJCSAgICAgICBzdWJkaXItPmRfaW5vZGUtPmlfaW5vKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwkvKiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc3ViZGlyIGlzIGEgZGlyZWN0b3J5ICovCisJQVNTRVJUKHN1YmRpci0+ZF9pbm9kZSk7CisKKwlpZiAoIVNfSVNESVIoc3ViZGlyLT5kX2lub2RlLT5pX21vZGUpKSB7CisJCWtlcnJvcigiJXMgaXMgbm90IGEgZGlyZWN0b3J5IiwgZGlybmFtZSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gY2hlY2tfZXJyb3I7CisJfQorCisJcmV0ID0gLUVQRVJNOworCWlmICghc3ViZGlyLT5kX2lub2RlLT5pX29wIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPnNldHhhdHRyIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPmdldHhhdHRyIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPmxvb2t1cCB8fAorCSAgICAhc3ViZGlyLT5kX2lub2RlLT5pX29wLT5ta2RpciB8fAorCSAgICAhc3ViZGlyLT5kX2lub2RlLT5pX29wLT5jcmVhdGUgfHwKKwkgICAgIXN1YmRpci0+ZF9pbm9kZS0+aV9vcC0+cmVuYW1lIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPnJtZGlyIHx8CisJICAgICFzdWJkaXItPmRfaW5vZGUtPmlfb3AtPnVubGluaykKKwkJZ290byBjaGVja19lcnJvcjsKKworCV9sZWF2ZSgiID0gWyVsdV0iLCBzdWJkaXItPmRfaW5vZGUtPmlfaW5vKTsKKwlyZXR1cm4gc3ViZGlyOworCitjaGVja19lcnJvcjoKKwlkcHV0KHN1YmRpcik7CisJX2xlYXZlKCIgPSAlZCBbY2hlY2tdIiwgcmV0KTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworCitta2Rpcl9lcnJvcjoKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZHB1dChzdWJkaXIpOworCWtlcnJvcigibWtkaXIgJXMgZmFpbGVkIHdpdGggZXJyb3IgJWQiLCBkaXJuYW1lLCByZXQpOworCXJldHVybiBFUlJfUFRSKHJldCk7CisKK2xvb2t1cF9lcnJvcjoKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJcmV0ID0gUFRSX0VSUihzdWJkaXIpOworCWtlcnJvcigiTG9va3VwICVzIGZhaWxlZCB3aXRoIGVycm9yICVkIiwgZGlybmFtZSwgcmV0KTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworCitub21lbV9kX2FsbG9jOgorCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKK30KKworLyoKKyAqIGZpbmQgb3V0IGlmIGFuIG9iamVjdCBpcyBpbiB1c2Ugb3Igbm90CisgKiAtIGlmIGZpbmRzIG9iamVjdCBhbmQgaXQncyBub3QgaW4gdXNlOgorICogICAtIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBvYmplY3QgYW5kIGEgcmVmZXJlbmNlIG9uIGl0CisgKiAgIC0gcmV0dXJucyB3aXRoIHRoZSBkaXJlY3RvcnkgbG9ja2VkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjYWNoZWZpbGVzX2NoZWNrX2FjdGl2ZShzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCisJCQkJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRpciwKKwkJCQkJICAgICAgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IHJiX25vZGUgKl9uOworCXN0cnVjdCBkZW50cnkgKnZpY3RpbTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWludCByZXQ7CisKKwkvL19lbnRlcigiLCUqLipzLywlcyIsCisJLy8gICAgICAgZGlyLT5kX25hbWUubGVuLCBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLm5hbWUsIGZpbGVuYW1lKTsKKworCS8qIGxvb2sgdXAgdGhlIHZpY3RpbSAqLworCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgsIDEpOworCisJc3RhcnQgPSBqaWZmaWVzOworCXZpY3RpbSA9IGxvb2t1cF9vbmVfbGVuKGZpbGVuYW1lLCBkaXIsIHN0cmxlbihmaWxlbmFtZSkpOworCWNhY2hlZmlsZXNfaGlzdChjYWNoZWZpbGVzX2xvb2t1cF9oaXN0b2dyYW0sIHN0YXJ0KTsKKwlpZiAoSVNfRVJSKHZpY3RpbSkpCisJCWdvdG8gbG9va3VwX2Vycm9yOworCisJLy9fZGVidWcoInZpY3RpbSAtPiAlcCAlcyIsCisJLy8gICAgICAgdmljdGltLCB2aWN0aW0tPmRfaW5vZGUgPyAicG9zaXRpdmUiIDogIm5lZ2F0aXZlIik7CisKKwkvKiBpZiB0aGUgb2JqZWN0IGlzIG5vIGxvbmdlciB0aGVyZSB0aGVuIHdlIHByb2JhYmx5IHJldGlyZWQgdGhlIG9iamVjdAorCSAqIGF0IHRoZSBuZXRmcydzIHJlcXVlc3Qgd2hpbHN0IHRoZSBjdWxsIHdhcyBpbiBwcm9ncmVzcworCSAqLworCWlmICghdmljdGltLT5kX2lub2RlKSB7CisJCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwkJZHB1dCh2aWN0aW0pOworCQlfbGVhdmUoIiA9IC1FTk9FTlQgW2Fic2VudF0iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisJfQorCisJLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHVzaW5nIHRoaXMgb2JqZWN0ICovCisJcmVhZF9sb2NrKCZjYWNoZS0+YWN0aXZlX2xvY2spOworCisJX24gPSBjYWNoZS0+YWN0aXZlX25vZGVzLnJiX25vZGU7CisKKwl3aGlsZSAoX24pIHsKKwkJb2JqZWN0ID0gcmJfZW50cnkoX24sIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCwgYWN0aXZlX25vZGUpOworCisJCWlmIChvYmplY3QtPmRlbnRyeSA+IHZpY3RpbSkKKwkJCV9uID0gX24tPnJiX2xlZnQ7CisJCWVsc2UgaWYgKG9iamVjdC0+ZGVudHJ5IDwgdmljdGltKQorCQkJX24gPSBfbi0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCWdvdG8gb2JqZWN0X2luX3VzZTsKKwl9CisKKwlyZWFkX3VubG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKworCS8vX2xlYXZlKCIgPSAlcCIsIHZpY3RpbSk7CisJcmV0dXJuIHZpY3RpbTsKKworb2JqZWN0X2luX3VzZToKKwlyZWFkX3VubG9jaygmY2FjaGUtPmFjdGl2ZV9sb2NrKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZHB1dCh2aWN0aW0pOworCS8vX2xlYXZlKCIgPSAtRUJVU1kgW2luIHVzZV0iKTsKKwlyZXR1cm4gRVJSX1BUUigtRUJVU1kpOworCitsb29rdXBfZXJyb3I6CisJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCXJldCA9IFBUUl9FUlIodmljdGltKTsKKwlpZiAocmV0ID09IC1FTk9FTlQpIHsKKwkJLyogZmlsZSBvciBkaXIgbm93IGFic2VudCAtIHByb2JhYmx5IHJldGlyZWQgYnkgbmV0ZnMgKi8KKwkJX2xlYXZlKCIgPSAtRVNUQUxFIFthYnNlbnRdIik7CisJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOworCX0KKworCWlmIChyZXQgPT0gLUVJTykgeworCQljYWNoZWZpbGVzX2lvX2Vycm9yKGNhY2hlLCAiTG9va3VwIGZhaWxlZCIpOworCX0gZWxzZSBpZiAocmV0ICE9IC1FTk9NRU0pIHsKKwkJa2Vycm9yKCJJbnRlcm5hbCBlcnJvcjogJWQiLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKKy8qCisgKiBjdWxsIGFuIG9iamVjdCBpZiBpdCdzIG5vdCBpbiB1c2UKKyAqIC0gY2FsbGVkIG9ubHkgYnkgY2FjaGUgbWFuYWdlciBkYWVtb24KKyAqLworaW50IGNhY2hlZmlsZXNfY3VsbChzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsIHN0cnVjdCBkZW50cnkgKmRpciwKKwkJICAgIGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBkZW50cnkgKnZpY3RpbTsKKwlpbnQgcmV0OworCisJX2VudGVyKCIsJSouKnMvLCVzIiwKKwkgICAgICAgZGlyLT5kX25hbWUubGVuLCBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLm5hbWUsIGZpbGVuYW1lKTsKKworCXZpY3RpbSA9IGNhY2hlZmlsZXNfY2hlY2tfYWN0aXZlKGNhY2hlLCBkaXIsIGZpbGVuYW1lKTsKKwlpZiAoSVNfRVJSKHZpY3RpbSkpCisJCXJldHVybiBQVFJfRVJSKHZpY3RpbSk7CisKKwlfZGVidWcoInZpY3RpbSAtPiAlcCAlcyIsCisJICAgICAgIHZpY3RpbSwgdmljdGltLT5kX2lub2RlID8gInBvc2l0aXZlIiA6ICJuZWdhdGl2ZSIpOworCisJLyogb2theS4uLiB0aGUgdmljdGltIGlzIG5vdCBiZWluZyB1c2VkIHNvIHdlIGNhbiBjdWxsIGl0CisJICogLSBzdGFydCBieSBtYXJraW5nIGl0IGFzIHN0YWxlCisJICovCisJX2RlYnVnKCJ2aWN0aW0gaXMgY3VsbGFibGUiKTsKKworCXJldCA9IGNhY2hlZmlsZXNfcmVtb3ZlX29iamVjdF94YXR0cihjYWNoZSwgdmljdGltKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl91bmxvY2s7CisKKwkvKiAgYWN0dWFsbHkgcmVtb3ZlIHRoZSB2aWN0aW0gKGRyb3BzIHRoZSBkaXIgbXV0ZXgpICovCisJX2RlYnVnKCJidXJ5Iik7CisKKwlyZXQgPSBjYWNoZWZpbGVzX2J1cnlfb2JqZWN0KGNhY2hlLCBkaXIsIHZpY3RpbSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlkcHV0KHZpY3RpbSk7CisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7CisKK2Vycm9yX3VubG9jazoKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CitlcnJvcjoKKwlkcHV0KHZpY3RpbSk7CisJaWYgKHJldCA9PSAtRU5PRU5UKSB7CisJCS8qIGZpbGUgb3IgZGlyIG5vdyBhYnNlbnQgLSBwcm9iYWJseSByZXRpcmVkIGJ5IG5ldGZzICovCisJCV9sZWF2ZSgiID0gLUVTVEFMRSBbYWJzZW50XSIpOworCQlyZXR1cm4gLUVTVEFMRTsKKwl9CisKKwlpZiAocmV0ICE9IC1FTk9NRU0pIHsKKwkJa2Vycm9yKCJJbnRlcm5hbCBlcnJvcjogJWQiLCByZXQpOworCQlyZXQgPSAtRUlPOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBmaW5kIG91dCBpZiBhbiBvYmplY3QgaXMgaW4gdXNlIG9yIG5vdAorICogLSBjYWxsZWQgb25seSBieSBjYWNoZSBtYW5hZ2VyIGRhZW1vbgorICogLSByZXR1cm5zIC1FQlVTWSBvciAwIHRvIGluZGljYXRlIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGluIHVzZSBvciBub3QKKyAqLworaW50IGNhY2hlZmlsZXNfY2hlY2tfaW5fdXNlKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwgc3RydWN0IGRlbnRyeSAqZGlyLAorCQkJICAgIGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBkZW50cnkgKnZpY3RpbTsKKworCS8vX2VudGVyKCIsJSouKnMvLCVzIiwKKwkvLyAgICAgICBkaXItPmRfbmFtZS5sZW4sIGRpci0+ZF9uYW1lLmxlbiwgZGlyLT5kX25hbWUubmFtZSwgZmlsZW5hbWUpOworCisJdmljdGltID0gY2FjaGVmaWxlc19jaGVja19hY3RpdmUoY2FjaGUsIGRpciwgZmlsZW5hbWUpOworCWlmIChJU19FUlIodmljdGltKSkKKwkJcmV0dXJuIFBUUl9FUlIodmljdGltKTsKKworCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKKwlkcHV0KHZpY3RpbSk7CisJLy9fbGVhdmUoIiA9IDAiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvcHJvYy5jIGIvZnMvY2FjaGVmaWxlcy9wcm9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNjZDMzOQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2NhY2hlZmlsZXMvcHJvYy5jCkBAIC0wLDAgKzEsMTM0IEBACisvKiBDYWNoZUZpbGVzIHN0YXRpc3RpY3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK2F0b21pY190IGNhY2hlZmlsZXNfbG9va3VwX2hpc3RvZ3JhbVtIWl07CithdG9taWNfdCBjYWNoZWZpbGVzX21rZGlyX2hpc3RvZ3JhbVtIWl07CithdG9taWNfdCBjYWNoZWZpbGVzX2NyZWF0ZV9oaXN0b2dyYW1bSFpdOworCisvKgorICogZGlzcGxheSB0aGUgbGF0ZW5jeSBoaXN0b2dyYW0KKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2hpc3RvZ3JhbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwl1bnNpZ25lZCBsb25nIGluZGV4OworCXVuc2lnbmVkIHgsIHksIHosIHQ7CisKKwlzd2l0Y2ggKCh1bnNpZ25lZCBsb25nKSB2KSB7CisJY2FzZSAxOgorCQlzZXFfcHV0cyhtLCAiSklGUyAgU0VDUyAgTE9PS1VQUyAgIE1LRElSUyAgICBDUkVBVEVTXG4iKTsKKwkJcmV0dXJuIDA7CisJY2FzZSAyOgorCQlzZXFfcHV0cyhtLCAiPT09PT0gPT09PT0gPT09PT09PT09ID09PT09PT09PSA9PT09PT09PT1cbiIpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlpbmRleCA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMzsKKwkJeCA9IGF0b21pY19yZWFkKCZjYWNoZWZpbGVzX2xvb2t1cF9oaXN0b2dyYW1baW5kZXhdKTsKKwkJeSA9IGF0b21pY19yZWFkKCZjYWNoZWZpbGVzX21rZGlyX2hpc3RvZ3JhbVtpbmRleF0pOworCQl6ID0gYXRvbWljX3JlYWQoJmNhY2hlZmlsZXNfY3JlYXRlX2hpc3RvZ3JhbVtpbmRleF0pOworCQlpZiAoeCA9PSAwICYmIHkgPT0gMCAmJiB6ID09IDApCisJCQlyZXR1cm4gMDsKKworCQl0ID0gKGluZGV4ICogMTAwMCkgLyBIWjsKKworCQlzZXFfcHJpbnRmKG0sICIlNGx1ICAwLiUwM3UgJTl1ICU5dSAlOXVcbiIsIGluZGV4LCB0LCB4LCB5LCB6KTsKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKgorICogc2V0IHVwIHRoZSBpdGVyYXRvciB0byBzdGFydCByZWFkaW5nIGZyb20gdGhlIGZpcnN0IGxpbmUKKyAqLworc3RhdGljIHZvaWQgKmNhY2hlZmlsZXNfaGlzdG9ncmFtX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpfcG9zKQoreworCWlmICgodW5zaWduZWQgbG9uZyBsb25nKSpfcG9zID49IEhaICsgMikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCpfcG9zID09IDApCisJCSpfcG9zID0gMTsKKwlyZXR1cm4gKHZvaWQgKikodW5zaWduZWQgbG9uZykgKl9wb3M7Cit9CisKKy8qCisgKiBtb3ZlIHRvIHRoZSBuZXh0IGxpbmUKKyAqLworc3RhdGljIHZvaWQgKmNhY2hlZmlsZXNfaGlzdG9ncmFtX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkoKnBvcykrKzsKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZykqcG9zID4gSFogKyAyID8KKwkJTlVMTCA6ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpICpwb3M7Cit9CisKKy8qCisgKiBjbGVhbiB1cCBhZnRlciByZWFkaW5nCisgKi8KK3N0YXRpYyB2b2lkIGNhY2hlZmlsZXNfaGlzdG9ncmFtX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGNhY2hlZmlsZXNfaGlzdG9ncmFtX29wcyA9IHsKKwkuc3RhcnQJCT0gY2FjaGVmaWxlc19oaXN0b2dyYW1fc3RhcnQsCisJLnN0b3AJCT0gY2FjaGVmaWxlc19oaXN0b2dyYW1fc3RvcCwKKwkubmV4dAkJPSBjYWNoZWZpbGVzX2hpc3RvZ3JhbV9uZXh0LAorCS5zaG93CQk9IGNhY2hlZmlsZXNfaGlzdG9ncmFtX3Nob3csCit9OworCisvKgorICogb3BlbiAiL3Byb2MvZnMvY2FjaGVmaWxlcy9YWFgiIHdoaWNoIHByb3ZpZGUgc3RhdGlzdGljcyBzdW1tYXJpZXMKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2hpc3RvZ3JhbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmY2FjaGVmaWxlc19oaXN0b2dyYW1fb3BzKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FjaGVmaWxlc19oaXN0b2dyYW1fZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY2FjaGVmaWxlc19oaXN0b2dyYW1fb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKKworLyoKKyAqIGluaXRpYWxpc2UgdGhlIC9wcm9jL2ZzL2NhY2hlZmlsZXMvIGRpcmVjdG9yeQorICovCitpbnQgX19pbml0IGNhY2hlZmlsZXNfcHJvY19pbml0KHZvaWQpCit7CisJX2VudGVyKCIiKTsKKworCWlmICghcHJvY19ta2RpcigiZnMvY2FjaGVmaWxlcyIsIE5VTEwpKQorCQlnb3RvIGVycm9yX2RpcjsKKworCWlmICghcHJvY19jcmVhdGUoImZzL2NhY2hlZmlsZXMvaGlzdG9ncmFtIiwgU19JRlJFRyB8IDA0NDQsIE5VTEwsCisJCQkgJmNhY2hlZmlsZXNfaGlzdG9ncmFtX2ZvcHMpKQorCQlnb3RvIGVycm9yX2hpc3RvZ3JhbTsKKworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworCitlcnJvcl9oaXN0b2dyYW06CisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2NhY2hlZmlsZXMiLCBOVUxMKTsKK2Vycm9yX2RpcjoKKwlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoKKyAqIGNsZWFuIHVwIHRoZSAvcHJvYy9mcy9jYWNoZWZpbGVzLyBkaXJlY3RvcnkKKyAqLwordm9pZCBjYWNoZWZpbGVzX3Byb2NfY2xlYW51cCh2b2lkKQoreworCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9jYWNoZWZpbGVzL2hpc3RvZ3JhbSIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9jYWNoZWZpbGVzIiwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9mcy9jYWNoZWZpbGVzL3Jkd3IuYyBiL2ZzL2NhY2hlZmlsZXMvcmR3ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTc4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jYWNoZWZpbGVzL3Jkd3IuYwpAQCAtMCwwICsxLDg3OSBAQAorLyogU3RvcmFnZSBvYmplY3QgcmVhZC93cml0ZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyoKKyAqIGRldGVjdCB3YWtlIHVwIGV2ZW50cyBnZW5lcmF0ZWQgYnkgdGhlIHVubG9ja2luZyBvZiBwYWdlcyBpbiB3aGljaCB3ZSdyZQorICogaW50ZXJlc3RlZAorICogLSB3ZSB1c2UgdGhpcyB0byBkZXRlY3QgcmVhZCBjb21wbGV0aW9uIG9mIGJhY2tpbmcgcGFnZXMKKyAqIC0gdGhlIGNhbGxlciBob2xkcyB0aGUgd2FpdHF1ZXVlIGxvY2sKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX3JlYWRfd2FpdGVyKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwKKwkJCQkgIGludCBzeW5jLCB2b2lkICpfa2V5KQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29uZV9yZWFkICptb25pdG9yID0KKwkJY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCBjYWNoZWZpbGVzX29uZV9yZWFkLCBtb25pdG9yKTsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICprZXkgPSBfa2V5OworCXN0cnVjdCBwYWdlICpwYWdlID0gd2FpdC0+cHJpdmF0ZTsKKworCUFTU0VSVChrZXkpOworCisJX2VudGVyKCJ7JWx1fSwldSwlZCx7JXAsJXV9IiwKKwkgICAgICAgbW9uaXRvci0+bmV0ZnNfcGFnZS0+aW5kZXgsIG1vZGUsIHN5bmMsCisJICAgICAgIGtleS0+ZmxhZ3MsIGtleS0+Yml0X25yKTsKKworCWlmIChrZXktPmZsYWdzICE9ICZwYWdlLT5mbGFncyB8fAorCSAgICBrZXktPmJpdF9uciAhPSBQR19sb2NrZWQpCisJCXJldHVybiAwOworCisJX2RlYnVnKCItLS0gbW9uaXRvciAlcCAlbHggLS0tIiwgcGFnZSwgcGFnZS0+ZmxhZ3MpOworCisJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkgJiYgIVBhZ2VFcnJvcihwYWdlKSkKKwkJZHVtcF9zdGFjaygpOworCisJLyogcmVtb3ZlIGZyb20gdGhlIHdhaXRxdWV1ZSAqLworCWxpc3RfZGVsKCZ3YWl0LT50YXNrX2xpc3QpOworCisJLyogbW92ZSBvbnRvIHRoZSBhY3Rpb24gbGlzdCBhbmQgcXVldWUgZm9yIEZTLUNhY2hlIHRocmVhZCBwb29sICovCisJQVNTRVJUKG1vbml0b3ItPm9wKTsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihtb25pdG9yLT5vcC0+b3Aub2JqZWN0LAorCQkJICAgICAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKworCXNwaW5fbG9jaygmb2JqZWN0LT53b3JrX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJm1vbml0b3ItPm9wX2xpbmssICZtb25pdG9yLT5vcC0+dG9fZG8pOworCXNwaW5fdW5sb2NrKCZvYmplY3QtPndvcmtfbG9jayk7CisKKwlmc2NhY2hlX2VucXVldWVfcmV0cmlldmFsKG1vbml0b3ItPm9wKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNvcHkgZGF0YSBmcm9tIGJhY2tpbmcgcGFnZXMgdG8gbmV0ZnMgcGFnZXMgdG8gY29tcGxldGUgYSByZWFkIG9wZXJhdGlvbgorICogLSBkcml2ZW4gYnkgRlMtQ2FjaGUncyB0aHJlYWQgcG9vbAorICovCitzdGF0aWMgdm9pZCBjYWNoZWZpbGVzX3JlYWRfY29waWVyKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqX29wKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29uZV9yZWFkICptb25pdG9yOworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3A7CisJc3RydWN0IHBhZ2V2ZWMgcGFnZXZlYzsKKwlpbnQgZXJyb3IsIG1heDsKKworCW9wID0gY29udGFpbmVyX29mKF9vcCwgc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsLCBvcCk7CisJb2JqZWN0ID0gY29udGFpbmVyX29mKG9wLT5vcC5vYmplY3QsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCisJX2VudGVyKCJ7aW5vPSVsdX0iLCBvYmplY3QtPmJhY2tlci0+ZF9pbm9kZS0+aV9pbm8pOworCisJcGFnZXZlY19pbml0KCZwYWdldmVjLCAwKTsKKworCW1heCA9IDg7CisJc3Bpbl9sb2NrX2lycSgmb2JqZWN0LT53b3JrX2xvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZvcC0+dG9fZG8pKSB7CisJCW1vbml0b3IgPSBsaXN0X2VudHJ5KG9wLT50b19kby5uZXh0LAorCQkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfb25lX3JlYWQsIG9wX2xpbmspOworCQlsaXN0X2RlbCgmbW9uaXRvci0+b3BfbGluayk7CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZvYmplY3QtPndvcmtfbG9jayk7CisKKwkJX2RlYnVnKCItIGNvcHkgeyVsdX0iLCBtb25pdG9yLT5iYWNrX3BhZ2UtPmluZGV4KTsKKworCQllcnJvciA9IC1FSU87CisJCWlmIChQYWdlVXB0b2RhdGUobW9uaXRvci0+YmFja19wYWdlKSkgeworCQkJY29weV9oaWdocGFnZShtb25pdG9yLT5uZXRmc19wYWdlLCBtb25pdG9yLT5iYWNrX3BhZ2UpOworCisJCQlwYWdldmVjX2FkZCgmcGFnZXZlYywgbW9uaXRvci0+bmV0ZnNfcGFnZSk7CisJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG1vbml0b3ItPm9wLCAmcGFnZXZlYyk7CisJCQllcnJvciA9IDA7CisJCX0KKworCQlpZiAoZXJyb3IpCisJCQljYWNoZWZpbGVzX2lvX2Vycm9yX29iaigKKwkJCQlvYmplY3QsCisJCQkJIlJlYWRwYWdlIGZhaWxlZCBvbiBiYWNraW5nIGZpbGUgJWx4IiwKKwkJCQkodW5zaWduZWQgbG9uZykgbW9uaXRvci0+YmFja19wYWdlLT5mbGFncyk7CisKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKG1vbml0b3ItPmJhY2tfcGFnZSk7CisKKwkJZnNjYWNoZV9lbmRfaW8ob3AsIG1vbml0b3ItPm5ldGZzX3BhZ2UsIGVycm9yKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKG1vbml0b3ItPm5ldGZzX3BhZ2UpOworCQlmc2NhY2hlX3B1dF9yZXRyaWV2YWwob3ApOworCQlrZnJlZShtb25pdG9yKTsKKworCQkvKiBsZXQgdGhlIHRocmVhZCBwb29sIGhhdmUgc29tZSBhaXIgb2NjYXNpb25hbGx5ICovCisJCW1heC0tOworCQlpZiAobWF4IDwgMCB8fCBuZWVkX3Jlc2NoZWQoKSkgeworCQkJaWYgKCFsaXN0X2VtcHR5KCZvcC0+dG9fZG8pKQorCQkJCWZzY2FjaGVfZW5xdWV1ZV9yZXRyaWV2YWwob3ApOworCQkJX2xlYXZlKCIgW21heGVkIG91dF0iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCXNwaW5fbG9ja19pcnEoJm9iamVjdC0+d29ya19sb2NrKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJm9iamVjdC0+d29ya19sb2NrKTsKKwlfbGVhdmUoIiIpOworfQorCisvKgorICogcmVhZCB0aGUgY29ycmVzcG9uZGluZyBwYWdlIHRvIHRoZSBnaXZlbiBzZXQgZnJvbSB0aGUgYmFja2luZyBmaWxlCisgKiAtIGFuIHVuY2VydGFpbiBwYWdlIGlzIHNpbXBseSBkaXNjYXJkZWQsIHRvIGJlIHRyaWVkIGFnYWluIGFub3RoZXIgdGltZQorICovCitzdGF0aWMgaW50IGNhY2hlZmlsZXNfcmVhZF9iYWNraW5nX2ZpbGVfb25lKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LAorCQkJCQkgICAgc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkJICAgIHN0cnVjdCBwYWdlICpuZXRwYWdlLAorCQkJCQkgICAgc3RydWN0IHBhZ2V2ZWMgKnBhZ2V2ZWMpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb25lX3JlYWQgKm1vbml0b3I7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmJtYXBwaW5nOworCXN0cnVjdCBwYWdlICpuZXdwYWdlLCAqYmFja3BhZ2U7CisJaW50IHJldDsKKworCV9lbnRlcigiIik7CisKKwlwYWdldmVjX3JlaW5pdChwYWdldmVjKTsKKworCV9kZWJ1ZygicmVhZCBiYWNrICVweyVsdSwlZH0iLAorCSAgICAgICBuZXRwYWdlLCBuZXRwYWdlLT5pbmRleCwgcGFnZV9jb3VudChuZXRwYWdlKSk7CisKKwltb25pdG9yID0ga3phbGxvYyhzaXplb2YoKm1vbml0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1vbml0b3IpCisJCWdvdG8gbm9tZW07CisKKwltb25pdG9yLT5uZXRmc19wYWdlID0gbmV0cGFnZTsKKwltb25pdG9yLT5vcCA9IGZzY2FjaGVfZ2V0X3JldHJpZXZhbChvcCk7CisKKwlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZtb25pdG9yLT5tb25pdG9yLCBjYWNoZWZpbGVzX3JlYWRfd2FpdGVyKTsKKworCS8qIGF0dGVtcHQgdG8gZ2V0IGhvbGQgb2YgdGhlIGJhY2tpbmcgcGFnZSAqLworCWJtYXBwaW5nID0gb2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbWFwcGluZzsKKwluZXdwYWdlID0gTlVMTDsKKworCWZvciAoOzspIHsKKwkJYmFja3BhZ2UgPSBmaW5kX2dldF9wYWdlKGJtYXBwaW5nLCBuZXRwYWdlLT5pbmRleCk7CisJCWlmIChiYWNrcGFnZSkKKwkJCWdvdG8gYmFja2luZ19wYWdlX2FscmVhZHlfcHJlc2VudDsKKworCQlpZiAoIW5ld3BhZ2UpIHsKKwkJCW5ld3BhZ2UgPSBwYWdlX2NhY2hlX2FsbG9jX2NvbGQoYm1hcHBpbmcpOworCQkJaWYgKCFuZXdwYWdlKQorCQkJCWdvdG8gbm9tZW1fbW9uaXRvcjsKKwkJfQorCisJCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKG5ld3BhZ2UsIGJtYXBwaW5nLAorCQkJCQluZXRwYWdlLT5pbmRleCwgR0ZQX0tFUk5FTCk7CisJCWlmIChyZXQgPT0gMCkKKwkJCWdvdG8gaW5zdGFsbGVkX25ld19iYWNraW5nX3BhZ2U7CisJCWlmIChyZXQgIT0gLUVFWElTVCkKKwkJCWdvdG8gbm9tZW1fcGFnZTsKKwl9CisKKwkvKiB3ZSd2ZSBpbnN0YWxsZWQgYSBuZXcgYmFja2luZyBwYWdlLCBzbyBub3cgd2UgbmVlZCB0byBhZGQgaXQKKwkgKiB0byB0aGUgTFJVIGxpc3QgYW5kIHN0YXJ0IGl0IHJlYWRpbmcgKi8KK2luc3RhbGxlZF9uZXdfYmFja2luZ19wYWdlOgorCV9kZWJ1ZygiLSBuZXcgJXAiLCBuZXdwYWdlKTsKKworCWJhY2twYWdlID0gbmV3cGFnZTsKKwluZXdwYWdlID0gTlVMTDsKKworCXBhZ2VfY2FjaGVfZ2V0KGJhY2twYWdlKTsKKwlwYWdldmVjX2FkZChwYWdldmVjLCBiYWNrcGFnZSk7CisJX19wYWdldmVjX2xydV9hZGRfZmlsZShwYWdldmVjKTsKKworcmVhZF9iYWNraW5nX3BhZ2U6CisJcmV0ID0gYm1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZShOVUxMLCBiYWNrcGFnZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcmVhZF9lcnJvcjsKKworCS8qIHNldCB0aGUgbW9uaXRvciB0byB0cmFuc2ZlciB0aGUgZGF0YSBhY3Jvc3MgKi8KK21vbml0b3JfYmFja2luZ19wYWdlOgorCV9kZWJ1ZygiLSBtb25pdG9yIGFkZCIpOworCisJLyogaW5zdGFsbCB0aGUgbW9uaXRvciAqLworCXBhZ2VfY2FjaGVfZ2V0KG1vbml0b3ItPm5ldGZzX3BhZ2UpOworCXBhZ2VfY2FjaGVfZ2V0KGJhY2twYWdlKTsKKwltb25pdG9yLT5iYWNrX3BhZ2UgPSBiYWNrcGFnZTsKKwltb25pdG9yLT5tb25pdG9yLnByaXZhdGUgPSBiYWNrcGFnZTsKKwlhZGRfcGFnZV93YWl0X3F1ZXVlKGJhY2twYWdlLCAmbW9uaXRvci0+bW9uaXRvcik7CisJbW9uaXRvciA9IE5VTEw7CisKKwkvKiBidXQgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiByZWFkIGJlZm9yZSB0aGUgbW9uaXRvciB3YXMgaW5zdGFsbGVkLCBzbworCSAqIHRoZSBtb25pdG9yIG1heSBtaXNzIHRoZSBldmVudCAtIHNvIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgd2UgZG8gZ2V0CisJICogb25lIGluIHN1Y2ggYSBjYXNlICovCisJaWYgKHRyeWxvY2tfcGFnZShiYWNrcGFnZSkpIHsKKwkJX2RlYnVnKCJqdW1wc3RhcnQgJXAgeyVseH0iLCBiYWNrcGFnZSwgYmFja3BhZ2UtPmZsYWdzKTsKKwkJdW5sb2NrX3BhZ2UoYmFja3BhZ2UpOworCX0KKwlnb3RvIHN1Y2Nlc3M7CisKKwkvKiBpZiB0aGUgYmFja2luZyBwYWdlIGlzIGFscmVhZHkgcHJlc2VudCwgaXQgY2FuIGJlIGluIG9uZSBvZgorCSAqIHRocmVlIHN0YXRlczogcmVhZCBpbiBwcm9ncmVzcywgcmVhZCBmYWlsZWQgb3IgcmVhZCBva2F5ICovCitiYWNraW5nX3BhZ2VfYWxyZWFkeV9wcmVzZW50OgorCV9kZWJ1ZygiLSBwcmVzZW50Iik7CisKKwlpZiAobmV3cGFnZSkgeworCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV3cGFnZSk7CisJCW5ld3BhZ2UgPSBOVUxMOworCX0KKworCWlmIChQYWdlRXJyb3IoYmFja3BhZ2UpKQorCQlnb3RvIGlvX2Vycm9yOworCisJaWYgKFBhZ2VVcHRvZGF0ZShiYWNrcGFnZSkpCisJCWdvdG8gYmFja2luZ19wYWdlX2FscmVhZHlfdXB0b2RhdGU7CisKKwlpZiAoIXRyeWxvY2tfcGFnZShiYWNrcGFnZSkpCisJCWdvdG8gbW9uaXRvcl9iYWNraW5nX3BhZ2U7CisJX2RlYnVnKCJyZWFkICVwIHslbHh9IiwgYmFja3BhZ2UsIGJhY2twYWdlLT5mbGFncyk7CisJZ290byByZWFkX2JhY2tpbmdfcGFnZTsKKworCS8qIHRoZSBiYWNraW5nIHBhZ2UgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBhdHRhY2ggdGhlIG5ldGZzCisJICogcGFnZSB0byB0aGUgcGFnZWNhY2hlIGFuZCBMUlUgYW5kIGNvcHkgdGhlIGRhdGEgYWNyb3NzICovCitiYWNraW5nX3BhZ2VfYWxyZWFkeV91cHRvZGF0ZToKKwlfZGVidWcoIi0gdXB0b2RhdGUiKTsKKworCXBhZ2V2ZWNfYWRkKHBhZ2V2ZWMsIG5ldHBhZ2UpOworCWZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQob3AsIHBhZ2V2ZWMpOworCisJY29weV9oaWdocGFnZShuZXRwYWdlLCBiYWNrcGFnZSk7CisJZnNjYWNoZV9lbmRfaW8ob3AsIG5ldHBhZ2UsIDApOworCitzdWNjZXNzOgorCV9kZWJ1Zygic3VjY2VzcyIpOworCXJldCA9IDA7CisKK291dDoKKwlpZiAoYmFja3BhZ2UpCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShiYWNrcGFnZSk7CisJaWYgKG1vbml0b3IpIHsKKwkJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG1vbml0b3ItPm9wKTsKKwkJa2ZyZWUobW9uaXRvcik7CisJfQorCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7CisKK3JlYWRfZXJyb3I6CisJX2RlYnVnKCJyZWFkIGVycm9yICVkIiwgcmV0KTsKKwlpZiAocmV0ID09IC1FTk9NRU0pCisJCWdvdG8gb3V0OworaW9fZXJyb3I6CisJY2FjaGVmaWxlc19pb19lcnJvcl9vYmoob2JqZWN0LCAiUGFnZSByZWFkIGVycm9yIG9uIGJhY2tpbmcgZmlsZSIpOworCXJldCA9IC1FTk9CVUZTOworCWdvdG8gb3V0OworCitub21lbV9wYWdlOgorCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXdwYWdlKTsKK25vbWVtX21vbml0b3I6CisJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG1vbml0b3ItPm9wKTsKKwlrZnJlZShtb25pdG9yKTsKK25vbWVtOgorCV9sZWF2ZSgiID0gLUVOT01FTSIpOworCXJldHVybiAtRU5PTUVNOworfQorCisvKgorICogcmVhZCBhIHBhZ2UgZnJvbSB0aGUgY2FjaGUgb3IgYWxsb2NhdGUgYSBibG9jayBpbiB3aGljaCB0byBzdG9yZSBpdAorICogLSBjYWNoZSB3aXRoZHJhd2FsIGlzIHByZXZlbnRlZCBieSB0aGUgY2FsbGVyCisgKiAtIHJldHVybnMgLUVJTlRSIGlmIGludGVycnVwdGVkCisgKiAtIHJldHVybnMgLUVOT01FTSBpZiByYW4gb3V0IG9mIG1lbW9yeQorICogLSByZXR1cm5zIC1FTk9CVUZTIGlmIG5vIGJ1ZmZlcnMgY2FuIGJlIG1hZGUgYXZhaWxhYmxlCisgKiAtIHJldHVybnMgLUVOT0JVRlMgaWYgcGFnZSBpcyBiZXlvbmQgRU9GCisgKiAtIGlmIHRoZSBwYWdlIGlzIGJhY2tlZCBieSBhIGJsb2NrIGluIHRoZSBjYWNoZToKKyAqICAgLSBhIHJlYWQgd2lsbCBiZSBzdGFydGVkIHdoaWNoIHdpbGwgY2FsbCB0aGUgY2FsbGJhY2sgb24gY29tcGxldGlvbgorICogICAtIDAgd2lsbCBiZSByZXR1cm5lZAorICogLSBlbHNlIGlmIHRoZSBwYWdlIGlzIHVuYmFja2VkOgorICogICAtIHRoZSBtZXRhZGF0YSB3aWxsIGJlIHJldGFpbmVkCisgKiAgIC0gLUVOT0RBVEEgd2lsbCBiZSByZXR1cm5lZAorICovCitpbnQgY2FjaGVmaWxlc19yZWFkX29yX2FsbG9jX3BhZ2Uoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgcGFnZXZlYyBwYWdldmVjOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc2VjdG9yX3QgYmxvY2swLCBibG9jazsKKwl1bnNpZ25lZCBzaGlmdDsKKwlpbnQgcmV0OworCisJb2JqZWN0ID0gY29udGFpbmVyX29mKG9wLT5vcC5vYmplY3QsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCWNhY2hlID0gY29udGFpbmVyX29mKG9iamVjdC0+ZnNjYWNoZS5jYWNoZSwKKwkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUsIGNhY2hlKTsKKworCV9lbnRlcigieyVwfSx7JWx4fSwsLCIsIG9iamVjdCwgcGFnZS0+aW5kZXgpOworCisJaWYgKCFvYmplY3QtPmJhY2tlcikKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJaW5vZGUgPSBvYmplY3QtPmJhY2tlci0+ZF9pbm9kZTsKKwlBU1NFUlQoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSk7CisJQVNTRVJUKGlub2RlLT5pX21hcHBpbmctPmFfb3BzLT5ibWFwKTsKKwlBU1NFUlQoaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMtPnJlYWRwYWdlcyk7CisKKwkvKiBjYWxjdWxhdGUgdGhlIHNoaWZ0IHJlcXVpcmVkIHRvIHVzZSBibWFwICovCisJaWYgKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSA+IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJc2hpZnQgPSBQQUdFX1NISUZUIC0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CisKKwlvcC0+b3AuZmxhZ3MgPSBGU0NBQ0hFX09QX0ZBU1Q7CisJb3AtPm9wLnByb2Nlc3NvciA9IGNhY2hlZmlsZXNfcmVhZF9jb3BpZXI7CisKKwlwYWdldmVjX2luaXQoJnBhZ2V2ZWMsIDApOworCisJLyogd2UgYXNzdW1lIHRoZSBhYnNlbmNlIG9yIHByZXNlbmNlIG9mIHRoZSBmaXJzdCBibG9jayBpcyBhIGdvb2QKKwkgKiBlbm91Z2ggaW5kaWNhdGlvbiBmb3IgdGhlIHBhZ2UgYXMgYSB3aG9sZQorCSAqIC0gVE9ETzogZG9uJ3QgdXNlIGJtYXAoKSBmb3IgdGhpcyBhcyBpdCBpcyBfbm90XyBhY3R1YWxseSBnb29kCisJICogICBlbm91Z2ggZm9yIHRoaXMgYXMgaXQgZG9lc24ndCBpbmRpY2F0ZSBlcnJvcnMsIGJ1dCBpdCdzIGFsbCB3ZSd2ZQorCSAqICAgZ290IGZvciB0aGUgbW9tZW50CisJICovCisJYmxvY2swID0gcGFnZS0+aW5kZXg7CisJYmxvY2swIDw8PSBzaGlmdDsKKworCWJsb2NrID0gaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMtPmJtYXAoaW5vZGUtPmlfbWFwcGluZywgYmxvY2swKTsKKwlfZGVidWcoIiVsbHggLT4gJWxseCIsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGJsb2NrMCwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYmxvY2spOworCisJaWYgKGJsb2NrKSB7CisJCS8qIHN1Ym1pdCB0aGUgYXBwYXJlbnRseSB2YWxpZCBwYWdlIHRvIHRoZSBiYWNraW5nIGZzIHRvIGJlCisJCSAqIHJlYWQgZnJvbSBkaXNrICovCisJCXJldCA9IGNhY2hlZmlsZXNfcmVhZF9iYWNraW5nX2ZpbGVfb25lKG9iamVjdCwgb3AsIHBhZ2UsCisJCQkJCQkgICAgICAgJnBhZ2V2ZWMpOworCX0gZWxzZSBpZiAoY2FjaGVmaWxlc19oYXNfc3BhY2UoY2FjaGUsIDAsIDEpID09IDApIHsKKwkJLyogdGhlcmUncyBzcGFjZSBpbiB0aGUgY2FjaGUgd2UgY2FuIHVzZSAqLworCQlwYWdldmVjX2FkZCgmcGFnZXZlYywgcGFnZSk7CisJCWZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQob3AsICZwYWdldmVjKTsKKwkJcmV0ID0gLUVOT0RBVEE7CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVOT0JVRlM7CisJfQorCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHJlYWQgdGhlIGNvcnJlc3BvbmRpbmcgcGFnZXMgdG8gdGhlIGdpdmVuIHNldCBmcm9tIHRoZSBiYWNraW5nIGZpbGUKKyAqIC0gYW55IHVuY2VydGFpbiBwYWdlcyBhcmUgc2ltcGx5IGRpc2NhcmRlZCwgdG8gYmUgdHJpZWQgYWdhaW4gYW5vdGhlciB0aW1lCisgKi8KK3N0YXRpYyBpbnQgY2FjaGVmaWxlc19yZWFkX2JhY2tpbmdfZmlsZShzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdCwKKwkJCQkJc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCQkJc3RydWN0IHBhZ2V2ZWMgKm1hcmtfcHZlYykKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vbmVfcmVhZCAqbW9uaXRvciA9IE5VTEw7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmJtYXBwaW5nID0gb2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbWFwcGluZzsKKwlzdHJ1Y3QgcGFnZXZlYyBscnVfcHZlYzsKKwlzdHJ1Y3QgcGFnZSAqbmV3cGFnZSA9IE5VTEwsICpuZXRwYWdlLCAqX24sICpiYWNrcGFnZSA9IE5VTEw7CisJaW50IHJldCA9IDA7CisKKwlfZW50ZXIoIiIpOworCisJcGFnZXZlY19pbml0KCZscnVfcHZlYywgMCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV0cGFnZSwgX24sIGxpc3QsIGxydSkgeworCQlsaXN0X2RlbCgmbmV0cGFnZS0+bHJ1KTsKKworCQlfZGVidWcoInJlYWQgYmFjayAlcHslbHUsJWR9IiwKKwkJICAgICAgIG5ldHBhZ2UsIG5ldHBhZ2UtPmluZGV4LCBwYWdlX2NvdW50KG5ldHBhZ2UpKTsKKworCQlpZiAoIW1vbml0b3IpIHsKKwkJCW1vbml0b3IgPSBremFsbG9jKHNpemVvZigqbW9uaXRvciksIEdGUF9LRVJORUwpOworCQkJaWYgKCFtb25pdG9yKQorCQkJCWdvdG8gbm9tZW07CisKKwkJCW1vbml0b3ItPm9wID0gZnNjYWNoZV9nZXRfcmV0cmlldmFsKG9wKTsKKwkJCWluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoJm1vbml0b3ItPm1vbml0b3IsCisJCQkJCQkgIGNhY2hlZmlsZXNfcmVhZF93YWl0ZXIpOworCQl9CisKKwkJZm9yICg7OykgeworCQkJYmFja3BhZ2UgPSBmaW5kX2dldF9wYWdlKGJtYXBwaW5nLCBuZXRwYWdlLT5pbmRleCk7CisJCQlpZiAoYmFja3BhZ2UpCisJCQkJZ290byBiYWNraW5nX3BhZ2VfYWxyZWFkeV9wcmVzZW50OworCisJCQlpZiAoIW5ld3BhZ2UpIHsKKwkJCQluZXdwYWdlID0gcGFnZV9jYWNoZV9hbGxvY19jb2xkKGJtYXBwaW5nKTsKKwkJCQlpZiAoIW5ld3BhZ2UpCisJCQkJCWdvdG8gbm9tZW07CisJCQl9CisKKwkJCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKG5ld3BhZ2UsIGJtYXBwaW5nLAorCQkJCQkJbmV0cGFnZS0+aW5kZXgsIEdGUF9LRVJORUwpOworCQkJaWYgKHJldCA9PSAwKQorCQkJCWdvdG8gaW5zdGFsbGVkX25ld19iYWNraW5nX3BhZ2U7CisJCQlpZiAocmV0ICE9IC1FRVhJU1QpCisJCQkJZ290byBub21lbTsKKwkJfQorCisJCS8qIHdlJ3ZlIGluc3RhbGxlZCBhIG5ldyBiYWNraW5nIHBhZ2UsIHNvIG5vdyB3ZSBuZWVkIHRvIGFkZCBpdAorCQkgKiB0byB0aGUgTFJVIGxpc3QgYW5kIHN0YXJ0IGl0IHJlYWRpbmcgKi8KKwlpbnN0YWxsZWRfbmV3X2JhY2tpbmdfcGFnZToKKwkJX2RlYnVnKCItIG5ldyAlcCIsIG5ld3BhZ2UpOworCisJCWJhY2twYWdlID0gbmV3cGFnZTsKKwkJbmV3cGFnZSA9IE5VTEw7CisKKwkJcGFnZV9jYWNoZV9nZXQoYmFja3BhZ2UpOworCQlpZiAoIXBhZ2V2ZWNfYWRkKCZscnVfcHZlYywgYmFja3BhZ2UpKQorCQkJX19wYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOworCisJcmVyZWFkX2JhY2tpbmdfcGFnZToKKwkJcmV0ID0gYm1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZShOVUxMLCBiYWNrcGFnZSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byByZWFkX2Vycm9yOworCisJCS8qIGFkZCB0aGUgbmV0ZnMgcGFnZSB0byB0aGUgcGFnZWNhY2hlIGFuZCBMUlUsIGFuZCBzZXQgdGhlCisJCSAqIG1vbml0b3IgdG8gdHJhbnNmZXIgdGhlIGRhdGEgYWNyb3NzICovCisJbW9uaXRvcl9iYWNraW5nX3BhZ2U6CisJCV9kZWJ1ZygiLSBtb25pdG9yIGFkZCIpOworCisJCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKG5ldHBhZ2UsIG9wLT5tYXBwaW5nLCBuZXRwYWdlLT5pbmRleCwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAocmV0ID09IC1FRVhJU1QpIHsKKwkJCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV0cGFnZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlnb3RvIG5vbWVtOworCQl9CisKKwkJcGFnZV9jYWNoZV9nZXQobmV0cGFnZSk7CisJCWlmICghcGFnZXZlY19hZGQoJmxydV9wdmVjLCBuZXRwYWdlKSkKKwkJCV9fcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKKworCQkvKiBpbnN0YWxsIGEgbW9uaXRvciAqLworCQlwYWdlX2NhY2hlX2dldChuZXRwYWdlKTsKKwkJbW9uaXRvci0+bmV0ZnNfcGFnZSA9IG5ldHBhZ2U7CisKKwkJcGFnZV9jYWNoZV9nZXQoYmFja3BhZ2UpOworCQltb25pdG9yLT5iYWNrX3BhZ2UgPSBiYWNrcGFnZTsKKwkJbW9uaXRvci0+bW9uaXRvci5wcml2YXRlID0gYmFja3BhZ2U7CisJCWFkZF9wYWdlX3dhaXRfcXVldWUoYmFja3BhZ2UsICZtb25pdG9yLT5tb25pdG9yKTsKKwkJbW9uaXRvciA9IE5VTEw7CisKKwkJLyogYnV0IHRoZSBwYWdlIG1heSBoYXZlIGJlZW4gcmVhZCBiZWZvcmUgdGhlIG1vbml0b3Igd2FzCisJCSAqIGluc3RhbGxlZCwgc28gdGhlIG1vbml0b3IgbWF5IG1pc3MgdGhlIGV2ZW50IC0gc28gd2UgaGF2ZSB0bworCQkgKiBlbnN1cmUgdGhhdCB3ZSBkbyBnZXQgb25lIGluIHN1Y2ggYSBjYXNlICovCisJCWlmICh0cnlsb2NrX3BhZ2UoYmFja3BhZ2UpKSB7CisJCQlfZGVidWcoIjJ1bmxvY2sgJXAgeyVseH0iLCBiYWNrcGFnZSwgYmFja3BhZ2UtPmZsYWdzKTsKKwkJCXVubG9ja19wYWdlKGJhY2twYWdlKTsKKwkJfQorCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShiYWNrcGFnZSk7CisJCWJhY2twYWdlID0gTlVMTDsKKworCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV0cGFnZSk7CisJCW5ldHBhZ2UgPSBOVUxMOworCQljb250aW51ZTsKKworCQkvKiBpZiB0aGUgYmFja2luZyBwYWdlIGlzIGFscmVhZHkgcHJlc2VudCwgaXQgY2FuIGJlIGluIG9uZSBvZgorCQkgKiB0aHJlZSBzdGF0ZXM6IHJlYWQgaW4gcHJvZ3Jlc3MsIHJlYWQgZmFpbGVkIG9yIHJlYWQgb2theSAqLworCWJhY2tpbmdfcGFnZV9hbHJlYWR5X3ByZXNlbnQ6CisJCV9kZWJ1ZygiLSBwcmVzZW50ICVwIiwgYmFja3BhZ2UpOworCisJCWlmIChQYWdlRXJyb3IoYmFja3BhZ2UpKQorCQkJZ290byBpb19lcnJvcjsKKworCQlpZiAoUGFnZVVwdG9kYXRlKGJhY2twYWdlKSkKKwkJCWdvdG8gYmFja2luZ19wYWdlX2FscmVhZHlfdXB0b2RhdGU7CisKKwkJX2RlYnVnKCItIG5vdCByZWFkeSAlcHslbHh9IiwgYmFja3BhZ2UsIGJhY2twYWdlLT5mbGFncyk7CisKKwkJaWYgKCF0cnlsb2NrX3BhZ2UoYmFja3BhZ2UpKQorCQkJZ290byBtb25pdG9yX2JhY2tpbmdfcGFnZTsKKworCQlpZiAoUGFnZUVycm9yKGJhY2twYWdlKSkgeworCQkJX2RlYnVnKCJlcnJvciAlbHgiLCBiYWNrcGFnZS0+ZmxhZ3MpOworCQkJdW5sb2NrX3BhZ2UoYmFja3BhZ2UpOworCQkJZ290byBpb19lcnJvcjsKKwkJfQorCisJCWlmIChQYWdlVXB0b2RhdGUoYmFja3BhZ2UpKQorCQkJZ290byBiYWNraW5nX3BhZ2VfYWxyZWFkeV91cHRvZGF0ZV91bmxvY2s7CisKKwkJLyogd2UndmUgbG9ja2VkIGEgcGFnZSB0aGF0J3MgbmVpdGhlciB1cCB0byBkYXRlIG5vciBlcnJvbmVvdXMsCisJCSAqIHNvIHdlIG5lZWQgdG8gYXR0ZW1wdCB0byByZWFkIGl0IGFnYWluICovCisJCWdvdG8gcmVyZWFkX2JhY2tpbmdfcGFnZTsKKworCQkvKiB0aGUgYmFja2luZyBwYWdlIGlzIGFscmVhZHkgdXAgdG8gZGF0ZSwgYXR0YWNoIHRoZSBuZXRmcworCQkgKiBwYWdlIHRvIHRoZSBwYWdlY2FjaGUgYW5kIExSVSBhbmQgY29weSB0aGUgZGF0YSBhY3Jvc3MgKi8KKwliYWNraW5nX3BhZ2VfYWxyZWFkeV91cHRvZGF0ZV91bmxvY2s6CisJCV9kZWJ1ZygidXB0b2RhdGUgJWx4IiwgYmFja3BhZ2UtPmZsYWdzKTsKKwkJdW5sb2NrX3BhZ2UoYmFja3BhZ2UpOworCWJhY2tpbmdfcGFnZV9hbHJlYWR5X3VwdG9kYXRlOgorCQlfZGVidWcoIi0gdXB0b2RhdGUiKTsKKworCQlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZShuZXRwYWdlLCBvcC0+bWFwcGluZywgbmV0cGFnZS0+aW5kZXgsCisJCQkJCUdGUF9LRVJORUwpOworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKHJldCA9PSAtRUVYSVNUKSB7CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG5ldHBhZ2UpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZ290byBub21lbTsKKwkJfQorCisJCWNvcHlfaGlnaHBhZ2UobmV0cGFnZSwgYmFja3BhZ2UpOworCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShiYWNrcGFnZSk7CisJCWJhY2twYWdlID0gTlVMTDsKKworCQlpZiAoIXBhZ2V2ZWNfYWRkKG1hcmtfcHZlYywgbmV0cGFnZSkpCisJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG9wLCBtYXJrX3B2ZWMpOworCisJCXBhZ2VfY2FjaGVfZ2V0KG5ldHBhZ2UpOworCQlpZiAoIXBhZ2V2ZWNfYWRkKCZscnVfcHZlYywgbmV0cGFnZSkpCisJCQlfX3BhZ2V2ZWNfbHJ1X2FkZF9maWxlKCZscnVfcHZlYyk7CisKKwkJZnNjYWNoZV9lbmRfaW8ob3AsIG5ldHBhZ2UsIDApOworCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV0cGFnZSk7CisJCW5ldHBhZ2UgPSBOVUxMOworCQljb250aW51ZTsKKwl9CisKKwluZXRwYWdlID0gTlVMTDsKKworCV9kZWJ1Zygib3V0Iik7CisKK291dDoKKwkvKiB0aWR5IHVwICovCisJcGFnZXZlY19scnVfYWRkX2ZpbGUoJmxydV9wdmVjKTsKKworCWlmIChuZXdwYWdlKQorCQlwYWdlX2NhY2hlX3JlbGVhc2UobmV3cGFnZSk7CisJaWYgKG5ldHBhZ2UpCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXRwYWdlKTsKKwlpZiAoYmFja3BhZ2UpCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShiYWNrcGFnZSk7CisJaWYgKG1vbml0b3IpIHsKKwkJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG9wKTsKKwkJa2ZyZWUobW9uaXRvcik7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5ldHBhZ2UsIF9uLCBsaXN0LCBscnUpIHsKKwkJbGlzdF9kZWwoJm5ldHBhZ2UtPmxydSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXRwYWdlKTsKKwl9CisKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitub21lbToKKwlfZGVidWcoIm5vbWVtIik7CisJcmV0ID0gLUVOT01FTTsKKwlnb3RvIG91dDsKKworcmVhZF9lcnJvcjoKKwlfZGVidWcoInJlYWQgZXJyb3IgJWQiLCByZXQpOworCWlmIChyZXQgPT0gLUVOT01FTSkKKwkJZ290byBvdXQ7Citpb19lcnJvcjoKKwljYWNoZWZpbGVzX2lvX2Vycm9yX29iaihvYmplY3QsICJQYWdlIHJlYWQgZXJyb3Igb24gYmFja2luZyBmaWxlIik7CisJcmV0ID0gLUVOT0JVRlM7CisJZ290byBvdXQ7Cit9CisKKy8qCisgKiByZWFkIGEgbGlzdCBvZiBwYWdlcyBmcm9tIHRoZSBjYWNoZSBvciBhbGxvY2F0ZSBibG9ja3MgaW4gd2hpY2ggdG8gc3RvcmUKKyAqIHRoZW0KKyAqLworaW50IGNhY2hlZmlsZXNfcmVhZF9vcl9hbGxvY19wYWdlcyhzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCSAgIHVuc2lnbmVkICpucl9wYWdlcywKKwkJCQkgICBnZnBfdCBnZnApCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlOworCXN0cnVjdCBsaXN0X2hlYWQgYmFja3BhZ2VzOworCXN0cnVjdCBwYWdldmVjIHBhZ2V2ZWM7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSwgKl9uOworCXVuc2lnbmVkIHNoaWZ0LCBucmJhY2twYWdlczsKKwlpbnQgcmV0LCByZXQyLCBzcGFjZTsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihvcC0+b3Aub2JqZWN0LAorCQkJICAgICAgc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0LCBmc2NhY2hlKTsKKwljYWNoZSA9IGNvbnRhaW5lcl9vZihvYmplY3QtPmZzY2FjaGUuY2FjaGUsCisJCQkgICAgIHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlLCBjYWNoZSk7CisKKwlfZW50ZXIoIntPQkoleCwlZH0sLCVkLCwiLAorCSAgICAgICBvYmplY3QtPmZzY2FjaGUuZGVidWdfaWQsIGF0b21pY19yZWFkKCZvcC0+b3AudXNhZ2UpLAorCSAgICAgICAqbnJfcGFnZXMpOworCisJaWYgKCFvYmplY3QtPmJhY2tlcikKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJc3BhY2UgPSAxOworCWlmIChjYWNoZWZpbGVzX2hhc19zcGFjZShjYWNoZSwgMCwgKm5yX3BhZ2VzKSA8IDApCisJCXNwYWNlID0gMDsKKworCWlub2RlID0gb2JqZWN0LT5iYWNrZXItPmRfaW5vZGU7CisJQVNTRVJUKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpOworCUFTU0VSVChpbm9kZS0+aV9tYXBwaW5nLT5hX29wcy0+Ym1hcCk7CisJQVNTRVJUKGlub2RlLT5pX21hcHBpbmctPmFfb3BzLT5yZWFkcGFnZXMpOworCisJLyogY2FsY3VsYXRlIHRoZSBzaGlmdCByZXF1aXJlZCB0byB1c2UgYm1hcCAqLworCWlmIChpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgPiBQQUdFX1NJWkUpCisJCXJldHVybiAtRU5PQlVGUzsKKworCXNoaWZ0ID0gUEFHRV9TSElGVCAtIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCisJcGFnZXZlY19pbml0KCZwYWdldmVjLCAwKTsKKworCW9wLT5vcC5mbGFncyA9IEZTQ0FDSEVfT1BfRkFTVDsKKwlvcC0+b3AucHJvY2Vzc29yID0gY2FjaGVmaWxlc19yZWFkX2NvcGllcjsKKworCUlOSVRfTElTVF9IRUFEKCZiYWNrcGFnZXMpOworCW5yYmFja3BhZ2VzID0gMDsKKworCXJldCA9IHNwYWNlID8gLUVOT0RBVEEgOiAtRU5PQlVGUzsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFnZSwgX24sIHBhZ2VzLCBscnUpIHsKKwkJc2VjdG9yX3QgYmxvY2swLCBibG9jazsKKworCQkvKiB3ZSBhc3N1bWUgdGhlIGFic2VuY2Ugb3IgcHJlc2VuY2Ugb2YgdGhlIGZpcnN0IGJsb2NrIGlzIGEKKwkJICogZ29vZCBlbm91Z2ggaW5kaWNhdGlvbiBmb3IgdGhlIHBhZ2UgYXMgYSB3aG9sZQorCQkgKiAtIFRPRE86IGRvbid0IHVzZSBibWFwKCkgZm9yIHRoaXMgYXMgaXQgaXMgX25vdF8gYWN0dWFsbHkKKwkJICogICBnb29kIGVub3VnaCBmb3IgdGhpcyBhcyBpdCBkb2Vzbid0IGluZGljYXRlIGVycm9ycywgYnV0CisJCSAqICAgaXQncyBhbGwgd2UndmUgZ290IGZvciB0aGUgbW9tZW50CisJCSAqLworCQlibG9jazAgPSBwYWdlLT5pbmRleDsKKwkJYmxvY2swIDw8PSBzaGlmdDsKKworCQlibG9jayA9IGlub2RlLT5pX21hcHBpbmctPmFfb3BzLT5ibWFwKGlub2RlLT5pX21hcHBpbmcsCisJCQkJCQkgICAgICBibG9jazApOworCQlfZGVidWcoIiVsbHggLT4gJWxseCIsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBibG9jazAsCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBibG9jayk7CisKKwkJaWYgKGJsb2NrKSB7CisJCQkvKiB3ZSBoYXZlIGRhdGEgLSBhZGQgaXQgdG8gdGhlIGxpc3QgdG8gZ2l2ZSB0byB0aGUKKwkJCSAqIGJhY2tpbmcgZnMgKi8KKwkJCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmYmFja3BhZ2VzKTsKKwkJCSgqbnJfcGFnZXMpLS07CisJCQlucmJhY2twYWdlcysrOworCQl9IGVsc2UgaWYgKHNwYWNlICYmIHBhZ2V2ZWNfYWRkKCZwYWdldmVjLCBwYWdlKSA9PSAwKSB7CisJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG9wLCAmcGFnZXZlYyk7CisJCQlyZXQgPSAtRU5PREFUQTsKKwkJfQorCX0KKworCWlmIChwYWdldmVjX2NvdW50KCZwYWdldmVjKSA+IDApCisJCWZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQob3AsICZwYWdldmVjKTsKKworCWlmIChsaXN0X2VtcHR5KHBhZ2VzKSkKKwkJcmV0ID0gMDsKKworCS8qIHN1Ym1pdCB0aGUgYXBwYXJlbnRseSB2YWxpZCBwYWdlcyB0byB0aGUgYmFja2luZyBmcyB0byBiZSByZWFkIGZyb20KKwkgKiBkaXNrICovCisJaWYgKG5yYmFja3BhZ2VzID4gMCkgeworCQlyZXQyID0gY2FjaGVmaWxlc19yZWFkX2JhY2tpbmdfZmlsZShvYmplY3QsIG9wLCAmYmFja3BhZ2VzLAorCQkJCQkJICAgICZwYWdldmVjKTsKKwkJaWYgKHJldDIgPT0gLUVOT01FTSB8fCByZXQyID09IC1FSU5UUikKKwkJCXJldCA9IHJldDI7CisJfQorCisJaWYgKHBhZ2V2ZWNfY291bnQoJnBhZ2V2ZWMpID4gMCkKKwkJZnNjYWNoZV9tYXJrX3BhZ2VzX2NhY2hlZChvcCwgJnBhZ2V2ZWMpOworCisJX2xlYXZlKCIgPSAlZCBbbnI9JXUlc10iLAorCSAgICAgICByZXQsICpucl9wYWdlcywgbGlzdF9lbXB0eShwYWdlcykgPyAiIGVtcHR5IiA6ICIiKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogYWxsb2NhdGUgYSBibG9jayBpbiB0aGUgY2FjaGUgaW4gd2hpY2ggdG8gc3RvcmUgYSBwYWdlCisgKiAtIGNhY2hlIHdpdGhkcmF3YWwgaXMgcHJldmVudGVkIGJ5IHRoZSBjYWxsZXIKKyAqIC0gcmV0dXJucyAtRUlOVFIgaWYgaW50ZXJydXB0ZWQKKyAqIC0gcmV0dXJucyAtRU5PTUVNIGlmIHJhbiBvdXQgb2YgbWVtb3J5CisgKiAtIHJldHVybnMgLUVOT0JVRlMgaWYgbm8gYnVmZmVycyBjYW4gYmUgbWFkZSBhdmFpbGFibGUKKyAqIC0gcmV0dXJucyAtRU5PQlVGUyBpZiBwYWdlIGlzIGJleW9uZCBFT0YKKyAqIC0gb3RoZXJ3aXNlOgorICogICAtIHRoZSBtZXRhZGF0YSB3aWxsIGJlIHJldGFpbmVkCisgKiAgIC0gMCB3aWxsIGJlIHJldHVybmVkCisgKi8KK2ludCBjYWNoZWZpbGVzX2FsbG9jYXRlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGU7CisJc3RydWN0IHBhZ2V2ZWMgcGFnZXZlYzsKKwlpbnQgcmV0OworCisJb2JqZWN0ID0gY29udGFpbmVyX29mKG9wLT5vcC5vYmplY3QsCisJCQkgICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCWNhY2hlID0gY29udGFpbmVyX29mKG9iamVjdC0+ZnNjYWNoZS5jYWNoZSwKKwkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUsIGNhY2hlKTsKKworCV9lbnRlcigiJXAseyVseH0sIiwgb2JqZWN0LCBwYWdlLT5pbmRleCk7CisKKwlyZXQgPSBjYWNoZWZpbGVzX2hhc19zcGFjZShjYWNoZSwgMCwgMSk7CisJaWYgKHJldCA9PSAwKSB7CisJCXBhZ2V2ZWNfaW5pdCgmcGFnZXZlYywgMCk7CisJCXBhZ2V2ZWNfYWRkKCZwYWdldmVjLCBwYWdlKTsKKwkJZnNjYWNoZV9tYXJrX3BhZ2VzX2NhY2hlZChvcCwgJnBhZ2V2ZWMpOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSBibG9ja3MgaW4gdGhlIGNhY2hlIGluIHdoaWNoIHRvIHN0b3JlIGEgc2V0IG9mIHBhZ2VzCisgKiAtIGNhY2hlIHdpdGhkcmF3YWwgaXMgcHJldmVudGVkIGJ5IHRoZSBjYWxsZXIKKyAqIC0gcmV0dXJucyAtRUlOVFIgaWYgaW50ZXJydXB0ZWQKKyAqIC0gcmV0dXJucyAtRU5PTUVNIGlmIHJhbiBvdXQgb2YgbWVtb3J5CisgKiAtIHJldHVybnMgLUVOT0JVRlMgaWYgc29tZSBidWZmZXJzIGNvdWxkbid0IGJlIG1hZGUgYXZhaWxhYmxlCisgKiAtIHJldHVybnMgLUVOT0JVRlMgaWYgc29tZSBwYWdlcyBhcmUgYmV5b25kIEVPRgorICogLSBvdGhlcndpc2U6CisgKiAgIC0gLUVOT0RBVEEgd2lsbCBiZSByZXR1cm5lZAorICogLSBtZXRhZGF0YSB3aWxsIGJlIHJldGFpbmVkIGZvciBhbnkgcGFnZSBtYXJrZWQKKyAqLworaW50IGNhY2hlZmlsZXNfYWxsb2NhdGVfcGFnZXMoc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJICAgICAgdW5zaWduZWQgKm5yX3BhZ2VzLAorCQkJICAgICAgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgcGFnZXZlYyBwYWdldmVjOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXQ7CisKKwlvYmplY3QgPSBjb250YWluZXJfb2Yob3AtPm9wLm9iamVjdCwKKwkJCSAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCwgZnNjYWNoZSk7CisJY2FjaGUgPSBjb250YWluZXJfb2Yob2JqZWN0LT5mc2NhY2hlLmNhY2hlLAorCQkJICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOworCisJX2VudGVyKCIlcCwsLCVkLCIsIG9iamVjdCwgKm5yX3BhZ2VzKTsKKworCXJldCA9IGNhY2hlZmlsZXNfaGFzX3NwYWNlKGNhY2hlLCAwLCAqbnJfcGFnZXMpOworCWlmIChyZXQgPT0gMCkgeworCQlwYWdldmVjX2luaXQoJnBhZ2V2ZWMsIDApOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkocGFnZSwgcGFnZXMsIGxydSkgeworCQkJaWYgKHBhZ2V2ZWNfYWRkKCZwYWdldmVjLCBwYWdlKSA9PSAwKQorCQkJCWZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQob3AsICZwYWdldmVjKTsKKwkJfQorCisJCWlmIChwYWdldmVjX2NvdW50KCZwYWdldmVjKSA+IDApCisJCQlmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKG9wLCAmcGFnZXZlYyk7CisJCXJldCA9IC1FTk9EQVRBOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiByZXF1ZXN0IGEgcGFnZSBiZSBzdG9yZWQgaW4gdGhlIGNhY2hlCisgKiAtIGNhY2hlIHdpdGhkcmF3YWwgaXMgcHJldmVudGVkIGJ5IHRoZSBjYWxsZXIKKyAqIC0gdGhpcyByZXF1ZXN0IG1heSBiZSBpZ25vcmVkIGlmIHRoZXJlJ3Mgbm8gY2FjaGUgYmxvY2sgYXZhaWxhYmxlLCBpbiB3aGljaAorICogICBjYXNlIC1FTk9CVUZTIHdpbGwgYmUgcmV0dXJuZWQKKyAqIC0gaWYgdGhlIG9wIGlzIGluIHByb2dyZXNzLCAwIHdpbGwgYmUgcmV0dXJuZWQKKyAqLworaW50IGNhY2hlZmlsZXNfd3JpdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICpvcCwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUgKmNhY2hlOworCW1tX3NlZ21lbnRfdCBvbGRfZnM7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJbG9mZl90IHBvczsKKwl2b2lkICpkYXRhOworCWludCByZXQ7CisKKwlBU1NFUlQob3AgIT0gTlVMTCk7CisJQVNTRVJUKHBhZ2UgIT0gTlVMTCk7CisKKwlvYmplY3QgPSBjb250YWluZXJfb2Yob3AtPm9wLm9iamVjdCwKKwkJCSAgICAgIHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCwgZnNjYWNoZSk7CisKKwlfZW50ZXIoIiVwLCVweyVseH0sLCwiLCBvYmplY3QsIHBhZ2UsIHBhZ2UtPmluZGV4KTsKKworCWlmICghb2JqZWN0LT5iYWNrZXIpIHsKKwkJX2xlYXZlKCIgPSAtRU5PQlVGUyIpOworCQlyZXR1cm4gLUVOT0JVRlM7CisJfQorCisJQVNTRVJUKFNfSVNSRUcob2JqZWN0LT5iYWNrZXItPmRfaW5vZGUtPmlfbW9kZSkpOworCisJY2FjaGUgPSBjb250YWluZXJfb2Yob2JqZWN0LT5mc2NhY2hlLmNhY2hlLAorCQkJICAgICBzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSwgY2FjaGUpOworCisJLyogd3JpdGUgdGhlIHBhZ2UgdG8gdGhlIGJhY2tpbmcgZmlsZXN5c3RlbSBhbmQgbGV0IGl0IHN0b3JlIGl0IGluIGl0cworCSAqIG93biB0aW1lICovCisJZGdldChvYmplY3QtPmJhY2tlcik7CisJbW50Z2V0KGNhY2hlLT5tbnQpOworCWZpbGUgPSBkZW50cnlfb3BlbihvYmplY3QtPmJhY2tlciwgY2FjaGUtPm1udCwgT19SRFdSLAorCQkJICAgY2FjaGUtPmNhY2hlX2NyZWQpOworCWlmIChJU19FUlIoZmlsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihmaWxlKTsKKwl9IGVsc2UgeworCQlyZXQgPSAtRUlPOworCQlpZiAoZmlsZS0+Zl9vcC0+d3JpdGUpIHsKKwkJCXBvcyA9IChsb2ZmX3QpIHBhZ2UtPmluZGV4IDw8IFBBR0VfU0hJRlQ7CisJCQlkYXRhID0ga21hcChwYWdlKTsKKwkJCW9sZF9mcyA9IGdldF9mcygpOworCQkJc2V0X2ZzKEtFUk5FTF9EUyk7CisJCQlyZXQgPSBmaWxlLT5mX29wLT53cml0ZSgKKwkJCQlmaWxlLCAoY29uc3Qgdm9pZCBfX3VzZXIgKikgZGF0YSwgUEFHRV9TSVpFLAorCQkJCSZwb3MpOworCQkJc2V0X2ZzKG9sZF9mcyk7CisJCQlrdW5tYXAocGFnZSk7CisJCQlpZiAocmV0ICE9IFBBR0VfU0laRSkKKwkJCQlyZXQgPSAtRUlPOworCQl9CisJCWZwdXQoZmlsZSk7CisJfQorCisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRUlPKQorCQkJY2FjaGVmaWxlc19pb19lcnJvcl9vYmooCisJCQkJb2JqZWN0LCAiV3JpdGUgcGFnZSB0byBiYWNraW5nIGZpbGUgZmFpbGVkIik7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBkZXRhY2ggYSBiYWNraW5nIGJsb2NrIGZyb20gYSBwYWdlCisgKiAtIGNhY2hlIHdpdGhkcmF3YWwgaXMgcHJldmVudGVkIGJ5IHRoZSBjYWxsZXIKKyAqLwordm9pZCBjYWNoZWZpbGVzX3VuY2FjaGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKl9vYmplY3QsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0OworCXN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZTsKKworCW9iamVjdCA9IGNvbnRhaW5lcl9vZihfb2JqZWN0LCBzdHJ1Y3QgY2FjaGVmaWxlc19vYmplY3QsIGZzY2FjaGUpOworCWNhY2hlID0gY29udGFpbmVyX29mKG9iamVjdC0+ZnNjYWNoZS5jYWNoZSwKKwkJCSAgICAgc3RydWN0IGNhY2hlZmlsZXNfY2FjaGUsIGNhY2hlKTsKKworCV9lbnRlcigiJXAseyVsdX0iLCBvYmplY3QsIHBhZ2UtPmluZGV4KTsKKworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmZzY2FjaGUuY29va2llLT5sb2NrKTsKK30KZGlmZiAtLWdpdCBhL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYyBiL2ZzL2NhY2hlZmlsZXMvc2VjdXJpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTgwOGNkCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2FjaGVmaWxlcy9zZWN1cml0eS5jCkBAIC0wLDAgKzEsMTE2IEBACisvKiBDYWNoZUZpbGVzIHNlY3VyaXR5IG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY3JlZC5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKKy8qCisgKiBkZXRlcm1pbmUgdGhlIHNlY3VyaXR5IGNvbnRleHQgd2l0aGluIHdoaWNoIHdlIGFjY2VzcyB0aGUgY2FjaGUgZnJvbSB3aXRoaW4KKyAqIHRoZSBrZXJuZWwKKyAqLworaW50IGNhY2hlZmlsZXNfZ2V0X3NlY3VyaXR5X0lEKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSkKK3sKKwlzdHJ1Y3QgY3JlZCAqbmV3OworCWludCByZXQ7CisKKwlfZW50ZXIoInslc30iLCBjYWNoZS0+c2VjY3R4KTsKKworCW5ldyA9IHByZXBhcmVfa2VybmVsX2NyZWQoY3VycmVudCk7CisJaWYgKCFuZXcpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAoY2FjaGUtPnNlY2N0eCkgeworCQlyZXQgPSBzZXRfc2VjdXJpdHlfb3ZlcnJpZGVfZnJvbV9jdHgobmV3LCBjYWNoZS0+c2VjY3R4KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXB1dF9jcmVkKG5ldyk7CisJCQlwcmludGsoS0VSTl9FUlIgIkNhY2hlRmlsZXM6IgorCQkJICAgICAgICIgU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbm9taW5hdGUiCisJCQkgICAgICAgIiBzZWN1cml0eSBjb250ZXh0OiBlcnJvciAlZFxuIiwKKwkJCSAgICAgICByZXQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCWNhY2hlLT5jYWNoZV9jcmVkID0gbmV3OworCXJldCA9IDA7CitlcnJvcjoKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogc2VlIGlmIG1rZGlyIGFuZCBjcmVhdGUgY2FuIGJlIHBlcmZvcm1lZCBpbiB0aGUgcm9vdCBkaXJlY3RvcnkKKyAqLworc3RhdGljIGludCBjYWNoZWZpbGVzX2NoZWNrX2NhY2hlX2RpcihzdHJ1Y3QgY2FjaGVmaWxlc19jYWNoZSAqY2FjaGUsCisJCQkJICAgICAgc3RydWN0IGRlbnRyeSAqcm9vdCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc2VjdXJpdHlfaW5vZGVfbWtkaXIocm9vdC0+ZF9pbm9kZSwgcm9vdCwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiIKKwkJICAgICAgICIgU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gbWFrZSBkaXJzOiBlcnJvciAlZCIsCisJCSAgICAgICByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShyb290LT5kX2lub2RlLCByb290LCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJDYWNoZUZpbGVzOiIKKwkJICAgICAgICIgU2VjdXJpdHkgZGVuaWVzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGZpbGVzOiBlcnJvciAlZCIsCisJCSAgICAgICByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGNoZWNrIHRoZSBzZWN1cml0eSBkZXRhaWxzIG9mIHRoZSBvbi1kaXNrIGNhY2hlCisgKiAtIG11c3QgYmUgY2FsbGVkIHdpdGggc2VjdXJpdHkgb3ZlcnJpZGUgaW4gZm9yY2UKKyAqLworaW50IGNhY2hlZmlsZXNfZGV0ZXJtaW5lX2NhY2hlX3NlY3VyaXR5KHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkJc3RydWN0IGRlbnRyeSAqcm9vdCwKKwkJCQkJY29uc3Qgc3RydWN0IGNyZWQgKipfc2F2ZWRfY3JlZCkKK3sKKwlzdHJ1Y3QgY3JlZCAqbmV3OworCWludCByZXQ7CisKKwlfZW50ZXIoIiIpOworCisJLyogZHVwbGljYXRlIHRoZSBjYWNoZSBjcmVkcyBmb3IgQ09XICh0aGUgb3ZlcnJpZGUgaXMgY3VycmVudGx5IGluCisJICogZm9yY2UsIHNvIHdlIGNhbiB1c2UgcHJlcGFyZV9jcmVkcygpIHRvIGRvIHRoaXMpICovCisJbmV3ID0gcHJlcGFyZV9jcmVkcygpOworCWlmICghbmV3KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNhY2hlZmlsZXNfZW5kX3NlY3VyZShjYWNoZSwgKl9zYXZlZF9jcmVkKTsKKworCS8qIHVzZSB0aGUgY2FjaGUgcm9vdCBkaXIncyBzZWN1cml0eSBjb250ZXh0IGFzIHRoZSBiYXNpcyB3aXRoCisJICogd2hpY2ggY3JlYXRlIGZpbGVzICovCisJcmV0ID0gc2V0X2NyZWF0ZV9maWxlc19hcyhuZXcsIHJvb3QtPmRfaW5vZGUpOworCWlmIChyZXQgPCAwKSB7CisJCV9sZWF2ZSgiID0gJWQgW2NmYV0iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXB1dF9jcmVkKGNhY2hlLT5jYWNoZV9jcmVkKTsKKwljYWNoZS0+Y2FjaGVfY3JlZCA9IG5ldzsKKworCWNhY2hlZmlsZXNfYmVnaW5fc2VjdXJlKGNhY2hlLCBfc2F2ZWRfY3JlZCk7CisJcmV0ID0gY2FjaGVmaWxlc19jaGVja19jYWNoZV9kaXIoY2FjaGUsIHJvb3QpOworCisJaWYgKHJldCA9PSAtRU9QTk9UU1VQUCkKKwkJcmV0ID0gMDsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZnMvY2FjaGVmaWxlcy94YXR0ci5jIGIvZnMvY2FjaGVmaWxlcy94YXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZTdhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jYWNoZWZpbGVzL3hhdHRyLmMKQEAgLTAsMCArMSwyOTEgQEAKKy8qIENhY2hlRmlsZXMgZXh0ZW5kZWQgYXR0cmlidXRlIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgY2FjaGVmaWxlc194YXR0cl9jYWNoZVtdID0KKwlYQVRUUl9VU0VSX1BSRUZJWCAiQ2FjaGVGaWxlcy5jYWNoZSI7CisKKy8qCisgKiBjaGVjayB0aGUgdHlwZSBsYWJlbCBvbiBhbiBvYmplY3QKKyAqIC0gZG9uZSB1c2luZyB4YXR0cnMKKyAqLworaW50IGNhY2hlZmlsZXNfY2hlY2tfb2JqZWN0X3R5cGUoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gb2JqZWN0LT5kZW50cnk7CisJY2hhciB0eXBlWzNdLCB4dHlwZVszXTsKKwlpbnQgcmV0OworCisJQVNTRVJUKGRlbnRyeSk7CisJQVNTRVJUKGRlbnRyeS0+ZF9pbm9kZSk7CisKKwlpZiAoIW9iamVjdC0+ZnNjYWNoZS5jb29raWUpCisJCXN0cmNweSh0eXBlLCAiQzMiKTsKKwllbHNlCisJCXNucHJpbnRmKHR5cGUsIDMsICIlMDJ4Iiwgb2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+ZGVmLT50eXBlKTsKKworCV9lbnRlcigiJXB7JXN9Iiwgb2JqZWN0LCB0eXBlKTsKKworCS8qIGF0dGVtcHQgdG8gaW5zdGFsbCBhIHR5cGUgbGFiZWwgZGlyZWN0bHkgKi8KKwlyZXQgPSB2ZnNfc2V0eGF0dHIoZGVudHJ5LCBjYWNoZWZpbGVzX3hhdHRyX2NhY2hlLCB0eXBlLCAyLAorCQkJICAgWEFUVFJfQ1JFQVRFKTsKKwlpZiAocmV0ID09IDApIHsKKwkJX2RlYnVnKCJTRVQiKTsgLyogd2Ugc3VjY2VlZGVkICovCisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHJldCAhPSAtRUVYSVNUKSB7CisJCWtlcnJvcigiQ2FuJ3Qgc2V0IHhhdHRyIG9uICUqLipzIFslbHVdIChlcnIgJWQpIiwKKwkJICAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubGVuLAorCQkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlLT5pX2lubywKKwkJICAgICAgIC1yZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIHJlYWQgdGhlIGN1cnJlbnQgdHlwZSBsYWJlbCAqLworCXJldCA9IHZmc19nZXR4YXR0cihkZW50cnksIGNhY2hlZmlsZXNfeGF0dHJfY2FjaGUsIHh0eXBlLCAzKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0ID09IC1FUkFOR0UpCisJCQlnb3RvIGJhZF90eXBlX2xlbmd0aDsKKworCQlrZXJyb3IoIkNhbid0IHJlYWQgeGF0dHIgb24gJSouKnMgWyVsdV0gKGVyciAlZCkiLAorCQkgICAgICAgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5sZW4sCisJCSAgICAgICBkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfaW5vZGUtPmlfaW5vLAorCQkgICAgICAgLXJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogY2hlY2sgdGhlIHR5cGUgaXMgd2hhdCB3ZSdyZSBleHBlY3RpbmcgKi8KKwlpZiAocmV0ICE9IDIpCisJCWdvdG8gYmFkX3R5cGVfbGVuZ3RoOworCisJaWYgKHh0eXBlWzBdICE9IHR5cGVbMF0gfHwgeHR5cGVbMV0gIT0gdHlwZVsxXSkKKwkJZ290byBiYWRfdHlwZTsKKworCXJldCA9IDA7CisKK2Vycm9yOgorCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7CisKK2JhZF90eXBlX2xlbmd0aDoKKwlrZXJyb3IoIkNhY2hlIG9iamVjdCAlbHUgdHlwZSB4YXR0ciBsZW5ndGggaW5jb3JyZWN0IiwKKwkgICAgICAgZGVudHJ5LT5kX2lub2RlLT5pX2lubyk7CisJcmV0ID0gLUVJTzsKKwlnb3RvIGVycm9yOworCitiYWRfdHlwZToKKwl4dHlwZVsyXSA9IDA7CisJa2Vycm9yKCJDYWNoZSBvYmplY3QgJSouKnMgWyVsdV0gdHlwZSAlcyBub3QgJXMiLAorCSAgICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLmxlbiwKKwkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlLT5pX2lubywKKwkgICAgICAgeHR5cGUsIHR5cGUpOworCXJldCA9IC1FSU87CisJZ290byBlcnJvcjsKK30KKworLyoKKyAqIHNldCB0aGUgc3RhdGUgeGF0dHIgb24gYSBjYWNoZSBmaWxlCisgKi8KK2ludCBjYWNoZWZpbGVzX3NldF9vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJc3RydWN0IGNhY2hlZmlsZXNfeGF0dHIgKmF1eGRhdGEpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gb2JqZWN0LT5kZW50cnk7CisJaW50IHJldDsKKworCUFTU0VSVChvYmplY3QtPmZzY2FjaGUuY29va2llKTsKKwlBU1NFUlQoZGVudHJ5KTsKKworCV9lbnRlcigiJXAsIyVkIiwgb2JqZWN0LCBhdXhkYXRhLT5sZW4pOworCisJLyogYXR0ZW1wdCB0byBpbnN0YWxsIHRoZSBjYWNoZSBtZXRhZGF0YSBkaXJlY3RseSAqLworCV9kZWJ1ZygiU0VUICVzICMldSIsIG9iamVjdC0+ZnNjYWNoZS5jb29raWUtPmRlZi0+bmFtZSwgYXV4ZGF0YS0+bGVuKTsKKworCXJldCA9IHZmc19zZXR4YXR0cihkZW50cnksIGNhY2hlZmlsZXNfeGF0dHJfY2FjaGUsCisJCQkgICAmYXV4ZGF0YS0+dHlwZSwgYXV4ZGF0YS0+bGVuLAorCQkJICAgWEFUVFJfQ1JFQVRFKTsKKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVOT01FTSkKKwkJY2FjaGVmaWxlc19pb19lcnJvcl9vYmooCisJCQlvYmplY3QsCisJCQkiRmFpbGVkIHRvIHNldCB4YXR0ciB3aXRoIGVycm9yICVkIiwgcmV0KTsKKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB1cGRhdGUgdGhlIHN0YXRlIHhhdHRyIG9uIGEgY2FjaGUgZmlsZQorICovCitpbnQgY2FjaGVmaWxlc191cGRhdGVfb2JqZWN0X3hhdHRyKHN0cnVjdCBjYWNoZWZpbGVzX29iamVjdCAqb2JqZWN0LAorCQkJCSAgIHN0cnVjdCBjYWNoZWZpbGVzX3hhdHRyICphdXhkYXRhKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IG9iamVjdC0+ZGVudHJ5OworCWludCByZXQ7CisKKwlBU1NFUlQob2JqZWN0LT5mc2NhY2hlLmNvb2tpZSk7CisJQVNTRVJUKGRlbnRyeSk7CisKKwlfZW50ZXIoIiVwLCMlZCIsIG9iamVjdCwgYXV4ZGF0YS0+bGVuKTsKKworCS8qIGF0dGVtcHQgdG8gaW5zdGFsbCB0aGUgY2FjaGUgbWV0YWRhdGEgZGlyZWN0bHkgKi8KKwlfZGVidWcoIlNFVCAlcyAjJXUiLCBvYmplY3QtPmZzY2FjaGUuY29va2llLT5kZWYtPm5hbWUsIGF1eGRhdGEtPmxlbik7CisKKwlyZXQgPSB2ZnNfc2V0eGF0dHIoZGVudHJ5LCBjYWNoZWZpbGVzX3hhdHRyX2NhY2hlLAorCQkJICAgJmF1eGRhdGEtPnR5cGUsIGF1eGRhdGEtPmxlbiwKKwkJCSAgIFhBVFRSX1JFUExBQ0UpOworCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRU5PTUVNKQorCQljYWNoZWZpbGVzX2lvX2Vycm9yX29iaigKKwkJCW9iamVjdCwKKwkJCSJGYWlsZWQgdG8gdXBkYXRlIHhhdHRyIHdpdGggZXJyb3IgJWQiLCByZXQpOworCisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGNoZWNrIHRoZSBzdGF0ZSB4YXR0ciBvbiBhIGNhY2hlIGZpbGUKKyAqIC0gcmV0dXJuIC1FU1RBTEUgaWYgdGhlIG9iamVjdCBzaG91bGQgYmUgZGVsZXRlZAorICovCitpbnQgY2FjaGVmaWxlc19jaGVja19vYmplY3RfeGF0dHIoc3RydWN0IGNhY2hlZmlsZXNfb2JqZWN0ICpvYmplY3QsCisJCQkJICBzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4ZGF0YSkKK3sKKwlzdHJ1Y3QgY2FjaGVmaWxlc194YXR0ciAqYXV4YnVmOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IG9iamVjdC0+ZGVudHJ5OworCWludCByZXQ7CisKKwlfZW50ZXIoIiVwLCMlZCIsIG9iamVjdCwgYXV4ZGF0YS0+bGVuKTsKKworCUFTU0VSVChkZW50cnkpOworCUFTU0VSVChkZW50cnktPmRfaW5vZGUpOworCisJYXV4YnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhY2hlZmlsZXNfeGF0dHIpICsgNTEyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWF1eGJ1ZikgeworCQlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogcmVhZCB0aGUgY3VycmVudCB0eXBlIGxhYmVsICovCisJcmV0ID0gdmZzX2dldHhhdHRyKGRlbnRyeSwgY2FjaGVmaWxlc194YXR0cl9jYWNoZSwKKwkJCSAgICZhdXhidWYtPnR5cGUsIDUxMiArIDEpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPT0gLUVOT0RBVEEpCisJCQlnb3RvIHN0YWxlOyAvKiBubyBhdHRyaWJ1dGUgLSBwb3dlciB3ZW50IG9mZgorCQkJCSAgICAgKiBtaWQtY3VsbD8gKi8KKworCQlpZiAocmV0ID09IC1FUkFOR0UpCisJCQlnb3RvIGJhZF90eXBlX2xlbmd0aDsKKworCQljYWNoZWZpbGVzX2lvX2Vycm9yX29iaihvYmplY3QsCisJCQkJCSJDYW4ndCByZWFkIHhhdHRyIG9uICVsdSAoZXJyICVkKSIsCisJCQkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sIC1yZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIGNoZWNrIHRoZSBvbi1kaXNrIG9iamVjdCAqLworCWlmIChyZXQgPCAxKQorCQlnb3RvIGJhZF90eXBlX2xlbmd0aDsKKworCWlmIChhdXhidWYtPnR5cGUgIT0gYXV4ZGF0YS0+dHlwZSkKKwkJZ290byBzdGFsZTsKKworCWF1eGJ1Zi0+bGVuID0gcmV0OworCisJLyogY29uc3VsdCB0aGUgbmV0ZnMgKi8KKwlpZiAob2JqZWN0LT5mc2NhY2hlLmNvb2tpZS0+ZGVmLT5jaGVja19hdXgpIHsKKwkJZW51bSBmc2NhY2hlX2NoZWNrYXV4IHJlc3VsdDsKKwkJdW5zaWduZWQgaW50IGRsZW47CisKKwkJZGxlbiA9IGF1eGJ1Zi0+bGVuIC0gMTsKKworCQlfZGVidWcoImNoZWNrYXV4ICVzICMldSIsCisJCSAgICAgICBvYmplY3QtPmZzY2FjaGUuY29va2llLT5kZWYtPm5hbWUsIGRsZW4pOworCisJCXJlc3VsdCA9IGZzY2FjaGVfY2hlY2tfYXV4KCZvYmplY3QtPmZzY2FjaGUsCisJCQkJCSAgICZhdXhidWYtPmRhdGEsIGRsZW4pOworCisJCXN3aXRjaCAocmVzdWx0KSB7CisJCQkvKiBlbnRyeSBva2F5IGFzIGlzICovCisJCWNhc2UgRlNDQUNIRV9DSEVDS0FVWF9PS0FZOgorCQkJZ290byBva2F5OworCisJCQkvKiBlbnRyeSByZXF1aXJlcyB1cGRhdGUgKi8KKwkJY2FzZSBGU0NBQ0hFX0NIRUNLQVVYX05FRURTX1VQREFURToKKwkJCWJyZWFrOworCisJCQkvKiBlbnRyeSByZXF1aXJlcyBkZWxldGlvbiAqLworCQljYXNlIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU6CisJCQlnb3RvIHN0YWxlOworCisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCisJCS8qIHVwZGF0ZSB0aGUgY3VycmVudCBsYWJlbCAqLworCQlyZXQgPSB2ZnNfc2V0eGF0dHIoZGVudHJ5LCBjYWNoZWZpbGVzX3hhdHRyX2NhY2hlLAorCQkJCSAgICZhdXhkYXRhLT50eXBlLCBhdXhkYXRhLT5sZW4sCisJCQkJICAgWEFUVFJfUkVQTEFDRSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQljYWNoZWZpbGVzX2lvX2Vycm9yX29iaihvYmplY3QsCisJCQkJCQkiQ2FuJ3QgdXBkYXRlIHhhdHRyIG9uICVsdSIKKwkJCQkJCSIgKGVycm9yICVkKSIsCisJCQkJCQlkZW50cnktPmRfaW5vZGUtPmlfaW5vLCAtcmV0KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKK29rYXk6CisJcmV0ID0gMDsKKworZXJyb3I6CisJa2ZyZWUoYXV4YnVmKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitiYWRfdHlwZV9sZW5ndGg6CisJa2Vycm9yKCJDYWNoZSBvYmplY3QgJWx1IHhhdHRyIGxlbmd0aCBpbmNvcnJlY3QiLAorCSAgICAgICBkZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKKwlyZXQgPSAtRUlPOworCWdvdG8gZXJyb3I7CisKK3N0YWxlOgorCXJldCA9IC1FU1RBTEU7CisJZ290byBlcnJvcjsKK30KKworLyoKKyAqIHJlbW92ZSB0aGUgb2JqZWN0J3MgeGF0dHIgdG8gbWFyayBpdCBzdGFsZQorICovCitpbnQgY2FjaGVmaWxlc19yZW1vdmVfb2JqZWN0X3hhdHRyKHN0cnVjdCBjYWNoZWZpbGVzX2NhY2hlICpjYWNoZSwKKwkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IHJldDsKKworCXJldCA9IHZmc19yZW1vdmV4YXR0cihkZW50cnksIGNhY2hlZmlsZXNfeGF0dHJfY2FjaGUpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPT0gLUVOT0VOVCB8fCByZXQgPT0gLUVOT0RBVEEpCisJCQlyZXQgPSAwOworCQllbHNlIGlmIChyZXQgIT0gLUVOT01FTSkKKwkJCWNhY2hlZmlsZXNfaW9fZXJyb3IoY2FjaGUsCisJCQkJCSAgICAiQ2FuJ3QgcmVtb3ZlIHhhdHRyIGZyb20gJWx1IgorCQkJCQkgICAgIiAoZXJyb3IgJWQpIiwKKwkJCQkJICAgIGRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8sIC1yZXQpOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Rpci5jIGIvZnMvY2lmcy9kaXIuYwppbmRleCAyZjM1Y2NjZi4uNTRkY2U3OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9kaXIuYworKysgYi9mcy9jaWZzL2Rpci5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAlpZiAob3Bsb2NrRW5hYmxlZCkKIAkJb3Bsb2NrID0gUkVRX09QTE9DSzsKIApAQCAtNDc5LDcgKzQ3OSw3IEBACiAJCXJjID0gLUVOT01FTTsKIAllbHNlIGlmIChwVGNvbi0+dW5peF9leHQpIHsKIAkJc3RydWN0IGNpZnNfdW5peF9zZXRfaW5mb19hcmdzIGFyZ3MgPSB7Ci0JCQkubW9kZQk9IG1vZGUgJiB+Y3VycmVudC0+ZnMtPnVtYXNrLAorCQkJLm1vZGUJPSBtb2RlICYgfmN1cnJlbnRfdW1hc2soKSwKIAkJCS5jdGltZQk9IE5PX0NIQU5HRV82NCwKIAkJCS5hdGltZQk9IE5PX0NIQU5HRV82NCwKIAkJCS5tdGltZQk9IE5PX0NIQU5HRV82NCwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvaW5vZGUuYyBiL2ZzL2NpZnMvaW5vZGUuYwppbmRleCBhODc5N2NjLi5mMTIxYTgwIDEwMDY0NAotLS0gYS9mcy9jaWZzL2lub2RlLmMKKysrIGIvZnMvY2lmcy9pbm9kZS5jCkBAIC0xMTI1LDcgKzExMjUsNyBAQAogCQkJZ290byBta2Rpcl9vdXQ7CiAJCX0KIAotCQltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAkJcmMgPSBDSUZTUE9TSVhDcmVhdGUoeGlkLCBwVGNvbiwgU01CX09fRElSRUNUT1JZIHwgU01CX09fQ1JFQVQsCiAJCQkJbW9kZSwgTlVMTCAvKiBuZXRmaWQgKi8sIHBJbmZvLCAmb3Bsb2NrLAogCQkJCWZ1bGxfcGF0aCwgY2lmc19zYi0+bG9jYWxfbmxzLApAQCAtMTIwNCw3ICsxMjA0LDcgQEAKIAkJaWYgKChkaXJlbnRyeS0+ZF9pbm9kZSkgJiYgKGRpcmVudHJ5LT5kX2lub2RlLT5pX25saW5rIDwgMikpCiAJCQkJZGlyZW50cnktPmRfaW5vZGUtPmlfbmxpbmsgPSAyOwogCi0JCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCQkvKiBtdXN0IHR1cm4gb24gc2V0Z2lkIGJpdCBpZiBwYXJlbnQgZGlyIGhhcyBpdCAqLwogCQlpZiAoaW5vZGUtPmlfbW9kZSAmIFNfSVNHSUQpCiAJCQltb2RlIHw9IFNfSVNHSUQ7CmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IDU1ZWZkZmUuLjNmODRkNWYgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdC5jCisrKyBiL2ZzL2NvbXBhdC5jCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZXZlbnRwb2xsLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgpAQCAtMTE5NSwxNiArMTE5NiwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLWFzbWxpbmthZ2Ugc3NpemVfdAotY29tcGF0X3N5c19yZWFkdih1bnNpZ25lZCBsb25nIGZkLCBjb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLCB1bnNpZ25lZCBsb25nIHZsZW4pCitzdGF0aWMgc2l6ZV90IGNvbXBhdF9yZWFkdihzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIGNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsCisJCQkgICB1bnNpZ25lZCBsb25nIHZsZW4sIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBmaWxlICpmaWxlOwogCXNzaXplX3QgcmV0ID0gLUVCQURGOwogCi0JZmlsZSA9IGZnZXQoZmQpOwotCWlmICghZmlsZSkKLQkJcmV0dXJuIC1FQkFERjsKLQogCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQogCQlnb3RvIG91dDsKIApAQCAtMTIxMiwyNSArMTIwOSw1NiBAQAogCWlmICghZmlsZS0+Zl9vcCB8fCAoIWZpbGUtPmZfb3AtPmFpb19yZWFkICYmICFmaWxlLT5mX29wLT5yZWFkKSkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBjb21wYXRfZG9fcmVhZHZfd3JpdGV2KFJFQUQsIGZpbGUsIHZlYywgdmxlbiwgJmZpbGUtPmZfcG9zKTsKKwlyZXQgPSBjb21wYXRfZG9fcmVhZHZfd3JpdGV2KFJFQUQsIGZpbGUsIHZlYywgdmxlbiwgcG9zKTsKIAogb3V0OgogCWlmIChyZXQgPiAwKQogCQlhZGRfcmNoYXIoY3VycmVudCwgcmV0KTsKIAlpbmNfc3lzY3IoY3VycmVudCk7Ci0JZnB1dChmaWxlKTsKIAlyZXR1cm4gcmV0OwogfQogCiBhc21saW5rYWdlIHNzaXplX3QKLWNvbXBhdF9zeXNfd3JpdGV2KHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsIHVuc2lnbmVkIGxvbmcgdmxlbikKK2NvbXBhdF9zeXNfcmVhZHYodW5zaWduZWQgbG9uZyBmZCwgY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywKKwkJIHVuc2lnbmVkIGxvbmcgdmxlbikKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlzc2l6ZV90IHJldCA9IC1FQkFERjsKKwlpbnQgZnB1dF9uZWVkZWQ7CisJc3NpemVfdCByZXQ7CiAKLQlmaWxlID0gZmdldChmZCk7CisJZmlsZSA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7CiAJaWYgKCFmaWxlKQogCQlyZXR1cm4gLUVCQURGOworCXJldCA9IGNvbXBhdF9yZWFkdihmaWxlLCB2ZWMsIHZsZW4sICZmaWxlLT5mX3Bvcyk7CisJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CisJcmV0dXJuIHJldDsKK30KKworYXNtbGlua2FnZSBzc2l6ZV90Citjb21wYXRfc3lzX3ByZWFkdih1bnNpZ25lZCBsb25nIGZkLCBjb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLAorCQkgIHVuc2lnbmVkIGxvbmcgdmxlbiwgdTMyIHBvc19sb3csIHUzMiBwb3NfaGlnaCkKK3sKKwlsb2ZmX3QgcG9zID0gKChsb2ZmX3QpcG9zX2hpZ2ggPDwgMzIpIHwgcG9zX2xvdzsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlpbnQgZnB1dF9uZWVkZWQ7CisJc3NpemVfdCByZXQ7CisKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZmlsZSA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7CisJaWYgKCFmaWxlKQorCQlyZXR1cm4gLUVCQURGOworCXJldCA9IGNvbXBhdF9yZWFkdihmaWxlLCB2ZWMsIHZsZW4sICZwb3MpOworCWZwdXRfbGlnaHQoZmlsZSwgZnB1dF9uZWVkZWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzaXplX3QgY29tcGF0X3dyaXRldihzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgdmxlbiwgbG9mZl90ICpwb3MpCit7CisJc3NpemVfdCByZXQgPSAtRUJBREY7CisKIAlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCiAJCWdvdG8gb3V0OwogCkBAIC0xMjM4LDEzICsxMjY2LDQ3IEBACiAJaWYgKCFmaWxlLT5mX29wIHx8ICghZmlsZS0+Zl9vcC0+YWlvX3dyaXRlICYmICFmaWxlLT5mX29wLT53cml0ZSkpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gY29tcGF0X2RvX3JlYWR2X3dyaXRldihXUklURSwgZmlsZSwgdmVjLCB2bGVuLCAmZmlsZS0+Zl9wb3MpOworCXJldCA9IGNvbXBhdF9kb19yZWFkdl93cml0ZXYoV1JJVEUsIGZpbGUsIHZlYywgdmxlbiwgcG9zKTsKIAogb3V0OgogCWlmIChyZXQgPiAwKQogCQlhZGRfd2NoYXIoY3VycmVudCwgcmV0KTsKIAlpbmNfc3lzY3coY3VycmVudCk7Ci0JZnB1dChmaWxlKTsKKwlyZXR1cm4gcmV0OworfQorCithc21saW5rYWdlIHNzaXplX3QKK2NvbXBhdF9zeXNfd3JpdGV2KHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsCisJCSAgdW5zaWduZWQgbG9uZyB2bGVuKQoreworCXN0cnVjdCBmaWxlICpmaWxlOworCWludCBmcHV0X25lZWRlZDsKKwlzc2l6ZV90IHJldDsKKworCWZpbGUgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOworCWlmICghZmlsZSkKKwkJcmV0dXJuIC1FQkFERjsKKwlyZXQgPSBjb21wYXRfd3JpdGV2KGZpbGUsIHZlYywgdmxlbiwgJmZpbGUtPmZfcG9zKTsKKwlmcHV0X2xpZ2h0KGZpbGUsIGZwdXRfbmVlZGVkKTsKKwlyZXR1cm4gcmV0OworfQorCithc21saW5rYWdlIHNzaXplX3QKK2NvbXBhdF9zeXNfcHdyaXRldih1bnNpZ25lZCBsb25nIGZkLCBjb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLAorCQkgICB1bnNpZ25lZCBsb25nIHZsZW4sIHUzMiBwb3NfbG93LCB1MzIgcG9zX2hpZ2gpCit7CisJbG9mZl90IHBvcyA9ICgobG9mZl90KXBvc19oaWdoIDw8IDMyKSB8IHBvc19sb3c7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJaW50IGZwdXRfbmVlZGVkOworCXNzaXplX3QgcmV0OworCisJaWYgKHBvcyA8IDApCisJCXJldHVybiAtRUlOVkFMOworCWZpbGUgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOworCWlmICghZmlsZSkKKwkJcmV0dXJuIC1FQkFERjsKKwlyZXQgPSBjb21wYXRfd3JpdGV2KGZpbGUsIHZlYywgdmxlbiwgJnBvcyk7CisJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTQ0MSwxMiArMTUwMywxNSBAQAogCWJwcm0tPmNyZWQgPSBwcmVwYXJlX2V4ZWNfY3JlZHMoKTsKIAlpZiAoIWJwcm0tPmNyZWQpCiAJCWdvdG8gb3V0X3VubG9jazsKLQljaGVja191bnNhZmVfZXhlYyhicHJtKTsKKworCXJldHZhbCA9IGNoZWNrX3Vuc2FmZV9leGVjKGJwcm0pOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0X3VubG9jazsKIAogCWZpbGUgPSBvcGVuX2V4ZWMoZmlsZW5hbWUpOwogCXJldHZhbCA9IFBUUl9FUlIoZmlsZSk7CiAJaWYgKElTX0VSUihmaWxlKSkKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF91bm1hcms7CiAKIAlzY2hlZF9leGVjKCk7CiAKQEAgLTE0ODgsNiArMTU1Myw5IEBACiAJCWdvdG8gb3V0OwogCiAJLyogZXhlY3ZlIHN1Y2NlZWRlZCAqLworCXdyaXRlX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwljdXJyZW50LT5mcy0+aW5fZXhlYyA9IDA7CisJd3JpdGVfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAJYWNjdF91cGRhdGVfaW50ZWdyYWxzKGN1cnJlbnQpOwpAQCAtMTUwNiw2ICsxNTc0LDExIEBACiAJCWZwdXQoYnBybS0+ZmlsZSk7CiAJfQogCitvdXRfdW5tYXJrOgorCXdyaXRlX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwljdXJyZW50LT5mcy0+aW5fZXhlYyA9IDA7CisJd3JpdGVfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisKIG91dF91bmxvY2s6CiAJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IGZmNzg2NjguLjNlODdjZTQgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9icmlkZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWRfdS5oPgogI2luY2x1ZGUgPGxpbnV4L2tkLmg+CiAjaW5jbHVkZSA8bGludXgvcm91dGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KZGlmZiAtLWdpdCBhL2ZzL2NyYW1mcy9pbm9kZS5jIGIvZnMvY3JhbWZzL2lub2RlLmMKaW5kZXggYTA3MzM4ZC4uZGQzNjM0ZSAxMDA2NDQKLS0tIGEvZnMvY3JhbWZzL2lub2RlLmMKKysrIGIvZnMvY3JhbWZzL2lub2RlLmMKQEAgLTMxOCw2ICszMTgsNyBAQAogc3RhdGljIGludCBjcmFtZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzYi0+c19iZGV2LT5iZF9kZXYpOwogCiAJYnVmLT5mX3R5cGUgPSBDUkFNRlNfTUFHSUM7CiAJYnVmLT5mX2JzaXplID0gUEFHRV9DQUNIRV9TSVpFOwpAQCAtMzI2LDYgKzMyNyw4IEBACiAJYnVmLT5mX2JhdmFpbCA9IDA7CiAJYnVmLT5mX2ZpbGVzID0gQ1JBTUZTX1NCKHNiKS0+ZmlsZXM7CiAJYnVmLT5mX2ZmcmVlID0gMDsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAlidWYtPmZfbmFtZWxlbiA9IENSQU1GU19NQVhQQVRITEVOOwogCXJldHVybiAwOwogfQpAQCAtNDU5LDExICs0NjIsMTQgQEAKIHN0YXRpYyBpbnQgY3JhbWZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqIHBhZ2UpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7Ci0JdTMyIG1heGJsb2NrLCBieXRlc19maWxsZWQ7CisJdTMyIG1heGJsb2NrOworCWludCBieXRlc19maWxsZWQ7CiAJdm9pZCAqcGdkYXRhOwogCiAJbWF4YmxvY2sgPSAoaW5vZGUtPmlfc2l6ZSArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJYnl0ZXNfZmlsbGVkID0gMDsKKwlwZ2RhdGEgPSBrbWFwKHBhZ2UpOworCiAJaWYgKHBhZ2UtPmluZGV4IDwgbWF4YmxvY2spIHsKIAkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCQl1MzIgYmxrcHRyX29mZnNldCA9IE9GRlNFVChpbm9kZSkgKyBwYWdlLT5pbmRleCo0OwpAQCAtNDcyLDMwICs0NzgsNDMgQEAKIAkJc3RhcnRfb2Zmc2V0ID0gT0ZGU0VUKGlub2RlKSArIG1heGJsb2NrKjQ7CiAJCW11dGV4X2xvY2soJnJlYWRfbXV0ZXgpOwogCQlpZiAocGFnZS0+aW5kZXgpCi0JCQlzdGFydF9vZmZzZXQgPSAqKHUzMiAqKSBjcmFtZnNfcmVhZChzYiwgYmxrcHRyX29mZnNldC00LCA0KTsKLQkJY29tcHJfbGVuID0gKCoodTMyICopIGNyYW1mc19yZWFkKHNiLCBibGtwdHJfb2Zmc2V0LCA0KSAtIHN0YXJ0X29mZnNldCk7CisJCQlzdGFydF9vZmZzZXQgPSAqKHUzMiAqKSBjcmFtZnNfcmVhZChzYiwgYmxrcHRyX29mZnNldC00LAorCQkJCTQpOworCQljb21wcl9sZW4gPSAoKih1MzIgKikgY3JhbWZzX3JlYWQoc2IsIGJsa3B0cl9vZmZzZXQsIDQpIC0KKwkJCXN0YXJ0X29mZnNldCk7CiAJCW11dGV4X3VubG9jaygmcmVhZF9tdXRleCk7Ci0JCXBnZGF0YSA9IGttYXAocGFnZSk7CisKIAkJaWYgKGNvbXByX2xlbiA9PSAwKQogCQkJOyAvKiBob2xlICovCi0JCWVsc2UgaWYgKGNvbXByX2xlbiA+IChQQUdFX0NBQ0hFX1NJWkUgPDwgMSkpCi0JCQlwcmludGsoS0VSTl9FUlIgImNyYW1mczogYmFkIGNvbXByZXNzZWQgYmxvY2tzaXplICV1XG4iLCBjb21wcl9sZW4pOwotCQllbHNlIHsKKwkJZWxzZSBpZiAodW5saWtlbHkoY29tcHJfbGVuID4gKFBBR0VfQ0FDSEVfU0laRSA8PCAxKSkpIHsKKwkJCXByX2VycigiY3JhbWZzOiBiYWQgY29tcHJlc3NlZCBibG9ja3NpemUgJXVcbiIsCisJCQkJY29tcHJfbGVuKTsKKwkJCWdvdG8gZXJyOworCQl9IGVsc2UgewogCQkJbXV0ZXhfbG9jaygmcmVhZF9tdXRleCk7CiAJCQlieXRlc19maWxsZWQgPSBjcmFtZnNfdW5jb21wcmVzc19ibG9jayhwZ2RhdGEsCiAJCQkJIFBBR0VfQ0FDSEVfU0laRSwKIAkJCQkgY3JhbWZzX3JlYWQoc2IsIHN0YXJ0X29mZnNldCwgY29tcHJfbGVuKSwKIAkJCQkgY29tcHJfbGVuKTsKIAkJCW11dGV4X3VubG9jaygmcmVhZF9tdXRleCk7CisJCQlpZiAodW5saWtlbHkoYnl0ZXNfZmlsbGVkIDwgMCkpCisJCQkJZ290byBlcnI7CiAJCX0KLQl9IGVsc2UKLQkJcGdkYXRhID0ga21hcChwYWdlKTsKKwl9CisKIAltZW1zZXQocGdkYXRhICsgYnl0ZXNfZmlsbGVkLCAwLCBQQUdFX0NBQ0hFX1NJWkUgLSBieXRlc19maWxsZWQpOwotCWt1bm1hcChwYWdlKTsKIAlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKKwlrdW5tYXAocGFnZSk7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCXJldHVybiAwOworCitlcnI6CisJa3VubWFwKHBhZ2UpOworCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOworCVNldFBhZ2VFcnJvcihwYWdlKTsKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgY3JhbWZzX2FvcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9jcmFtZnMvdW5jb21wcmVzcy5jIGIvZnMvY3JhbWZzL3VuY29tcHJlc3MuYwppbmRleCBmYzNjY2I3Li4wMjMzMjk4IDEwMDY0NAotLS0gYS9mcy9jcmFtZnMvdW5jb21wcmVzcy5jCisrKyBiL2ZzL2NyYW1mcy91bmNvbXByZXNzLmMKQEAgLTUwLDcgKzUwLDcgQEAKIGVycjoKIAlwcmludGsoIkVycm9yICVkIHdoaWxlIGRlY29tcHJlc3NpbmchXG4iLCBlcnIpOwogCXByaW50aygiJXAoJWQpLT4lcCglZClcbiIsIHNyYywgc3JjbGVuLCBkc3QsIGRzdGxlbik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIC1FSU87CiB9CiAKIGludCBjcmFtZnNfdW5jb21wcmVzc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDkwYmJkN2UuLjc2MWQzMGIgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCisrKyBiL2ZzL2RjYWNoZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZkdGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtMzIsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcWxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIGludCBzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlIF9fcmVhZF9tb3N0bHkgPSAxMDA7CmRpZmYgLS1naXQgYS9mcy9kZWJ1Z2ZzL2lub2RlLmMgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKaW5kZXggODFhZTllYS4uMDY2MmJhNiAxMDA2NDQKLS0tIGEvZnMvZGVidWdmcy9pbm9kZS5jCisrKyBiL2ZzL2RlYnVnZnMvaW5vZGUuYwpAQCAtMzAsNiArMzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpkZWJ1Z2ZzX21vdW50Owogc3RhdGljIGludCBkZWJ1Z2ZzX21vdW50X2NvdW50Oworc3RhdGljIGJvb2wgZGVidWdmc19yZWdpc3RlcmVkOwogCiBzdGF0aWMgc3RydWN0IGlub2RlICpkZWJ1Z2ZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgZGV2X3QgZGV2KQogewpAQCAtNDk2LDYgKzQ5NywxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGVidWdmc19yZW5hbWUpOwogCisvKioKKyAqIGRlYnVnZnNfaW5pdGlhbGl6ZWQgLSBUZWxscyB3aGV0aGVyIGRlYnVnZnMgaGFzIGJlZW4gcmVnaXN0ZXJlZAorICovCitib29sIGRlYnVnZnNfaW5pdGlhbGl6ZWQodm9pZCkKK3sKKwlyZXR1cm4gZGVidWdmc19yZWdpc3RlcmVkOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGVidWdmc19pbml0aWFsaXplZCk7CisKKwogc3RhdGljIHN0cnVjdCBrb2JqZWN0ICpkZWJ1Z19rb2JqOwogCiBzdGF0aWMgaW50IF9faW5pdCBkZWJ1Z2ZzX2luaXQodm9pZCkKQEAgLTUwOSwxMSArNTIwLDE2IEBACiAJcmV0dmFsID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZGVidWdfZnNfdHlwZSk7CiAJaWYgKHJldHZhbCkKIAkJa29iamVjdF9wdXQoZGVidWdfa29iaik7CisJZWxzZQorCQlkZWJ1Z2ZzX3JlZ2lzdGVyZWQgPSB0cnVlOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGRlYnVnZnNfZXhpdCh2b2lkKQogeworCWRlYnVnZnNfcmVnaXN0ZXJlZCA9IGZhbHNlOworCiAJc2ltcGxlX3JlbGVhc2VfZnMoJmRlYnVnZnNfbW91bnQsICZkZWJ1Z2ZzX21vdW50X2NvdW50KTsKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmRlYnVnX2ZzX3R5cGUpOwogCWtvYmplY3RfcHV0KGRlYnVnX2tvYmopOwpkaWZmIC0tZ2l0IGEvZnMvZHJvcF9jYWNoZXMuYyBiL2ZzL2Ryb3BfY2FjaGVzLmMKaW5kZXggNDRkNzI1Zi4uYjZhNzE5YSAxMDA2NDQKLS0tIGEvZnMvZHJvcF9jYWNoZXMuYworKysgYi9mcy9kcm9wX2NhY2hlcy5jCkBAIC0xOCw3ICsxOCw3IEBACiAKIAlzcGluX2xvY2soJmlub2RlX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsICZzYi0+c19pbm9kZXMsIGlfc2JfbGlzdCkgewotCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfV0lMTF9GUkVFfElfTkVXKSkKKwkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX0NMRUFSfElfV0lMTF9GUkVFfElfTkVXKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoaW5vZGUtPmlfbWFwcGluZy0+bnJwYWdlcyA9PSAwKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jIGIvZnMvZWNyeXB0ZnMva2V5c3RvcmUuYwppbmRleCBlNGE2MjIzLi5hZjczN2JiIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9rZXlzdG9yZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2tleXN0b3JlLmMKQEAgLTc0MCw4ICs3NDAsNyBAQAogb3V0X3JlbGVhc2VfZnJlZV91bmxvY2s6CiAJY3J5cHRvX2ZyZWVfaGFzaChzLT5oYXNoX2Rlc2MudGZtKTsKIG91dF9mcmVlX3VubG9jazoKLQltZW1zZXQocy0+YmxvY2tfYWxpZ25lZF9maWxlbmFtZSwgMCwgcy0+YmxvY2tfYWxpZ25lZF9maWxlbmFtZV9zaXplKTsKLQlrZnJlZShzLT5ibG9ja19hbGlnbmVkX2ZpbGVuYW1lKTsKKwlremZyZWUocy0+YmxvY2tfYWxpZ25lZF9maWxlbmFtZSk7CiBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jayhzLT50Zm1fbXV0ZXgpOwogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMgYi9mcy9lY3J5cHRmcy9tZXNzYWdpbmcuYwppbmRleCA5NmVmNTE0Li4yOTVlN2ZhNSAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKKysrIGIvZnMvZWNyeXB0ZnMvbWVzc2FnaW5nLmMKQEAgLTI5MSw4ICsyOTEsNyBAQAogCWlmIChkYWVtb24tPnVzZXJfbnMpCiAJCXB1dF91c2VyX25zKGRhZW1vbi0+dXNlcl9ucyk7CiAJbXV0ZXhfdW5sb2NrKCZkYWVtb24tPm11eCk7Ci0JbWVtc2V0KGRhZW1vbiwgMCwgc2l6ZW9mKCpkYWVtb24pKTsKLQlrZnJlZShkYWVtb24pOworCWt6ZnJlZShkYWVtb24pOwogb3V0OgogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2ZzL2Vmcy9zdXBlci5jIGIvZnMvZWZzL3N1cGVyLmMKaW5kZXggNzNiMTljZi4uZjA0OTQyOCAxMDA2NDQKLS0tIGEvZnMvZWZzL3N1cGVyLmMKKysrIGIvZnMvZWZzL3N1cGVyLmMKQEAgLTMyOSwxOCArMzI5LDIyIEBACiB9CiAKIHN0YXRpYyBpbnQgZWZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpIHsKLQlzdHJ1Y3QgZWZzX3NiX2luZm8gKnNiID0gU1VQRVJfSU5GTyhkZW50cnktPmRfc2IpOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJc3RydWN0IGVmc19zYl9pbmZvICpzYmkgPSBTVVBFUl9JTkZPKHNiKTsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWJ1Zi0+Zl90eXBlICAgID0gRUZTX1NVUEVSX01BR0lDOwkvKiBlZnMgbWFnaWMgbnVtYmVyICovCiAJYnVmLT5mX2JzaXplICAgPSBFRlNfQkxPQ0tTSVpFOwkJLyogYmxvY2tzaXplICovCi0JYnVmLT5mX2Jsb2NrcyAgPSBzYi0+dG90YWxfZ3JvdXBzICoJLyogdG90YWwgZGF0YSBibG9ja3MgKi8KLQkJCShzYi0+Z3JvdXBfc2l6ZSAtIHNiLT5pbm9kZV9ibG9ja3MpOwotCWJ1Zi0+Zl9iZnJlZSAgID0gc2ItPmRhdGFfZnJlZTsJCS8qIGZyZWUgZGF0YSBibG9ja3MgKi8KLQlidWYtPmZfYmF2YWlsICA9IHNiLT5kYXRhX2ZyZWU7CQkvKiBmcmVlIGJsb2NrcyBmb3Igbm9uLXJvb3QgKi8KLQlidWYtPmZfZmlsZXMgICA9IHNiLT50b3RhbF9ncm91cHMgKgkvKiB0b3RhbCBpbm9kZXMgKi8KLQkJCXNiLT5pbm9kZV9ibG9ja3MgKgorCWJ1Zi0+Zl9ibG9ja3MgID0gc2JpLT50b3RhbF9ncm91cHMgKgkvKiB0b3RhbCBkYXRhIGJsb2NrcyAqLworCQkJKHNiaS0+Z3JvdXBfc2l6ZSAtIHNiaS0+aW5vZGVfYmxvY2tzKTsKKwlidWYtPmZfYmZyZWUgICA9IHNiaS0+ZGF0YV9mcmVlOwkvKiBmcmVlIGRhdGEgYmxvY2tzICovCisJYnVmLT5mX2JhdmFpbCAgPSBzYmktPmRhdGFfZnJlZTsJLyogZnJlZSBibG9ja3MgZm9yIG5vbi1yb290ICovCisJYnVmLT5mX2ZpbGVzICAgPSBzYmktPnRvdGFsX2dyb3VwcyAqCS8qIHRvdGFsIGlub2RlcyAqLworCQkJc2JpLT5pbm9kZV9ibG9ja3MgKgogCQkJKEVGU19CTE9DS1NJWkUgLyBzaXplb2Yoc3RydWN0IGVmc19kaW5vZGUpKTsKLQlidWYtPmZfZmZyZWUgICA9IHNiLT5pbm9kZV9mcmVlOwkvKiBmcmVlIGlub2RlcyAqLworCWJ1Zi0+Zl9mZnJlZSAgID0gc2JpLT5pbm9kZV9mcmVlOwkvKiBmcmVlIGlub2RlcyAqLworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gRUZTX01BWE5BTUVMRU47CS8qIG1heCBmaWxlbmFtZSBsZW5ndGggKi8KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRmZC5jIGIvZnMvZXZlbnRmZC5jCmluZGV4IDVkZTJjMmQuLjJhNzAxZDUgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50ZmQuYworKysgYi9mcy9ldmVudGZkLmMKQEAgLTI4LDYgKzI4LDcgQEAKIAkgKiBpc3N1ZSBhIHdha2V1cC4KIAkgKi8KIAlfX3U2NCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9OwogCiAvKgpAQCAtNTAsNyArNTEsNyBAQAogCQluID0gKGludCkgKFVMTE9OR19NQVggLSBjdHgtPmNvdW50KTsKIAljdHgtPmNvdW50ICs9IG47CiAJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmN0eC0+d3FoKSkKLQkJd2FrZV91cF9sb2NrZWQoJmN0eC0+d3FoKTsKKwkJd2FrZV91cF9sb2NrZWRfcG9sbCgmY3R4LT53cWgsIFBPTExJTik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3R4LT53cWgubG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIG47CkBAIC04NywyMiArODgsMjAgQEAKIHsKIAlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzc2l6ZV90IHJlczsKLQlfX3U2NCB1Y250OworCV9fdTY0IHVjbnQgPSAwOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCiAJaWYgKGNvdW50IDwgc2l6ZW9mKHVjbnQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlzcGluX2xvY2tfaXJxKCZjdHgtPndxaC5sb2NrKTsKIAlyZXMgPSAtRUFHQUlOOwotCXVjbnQgPSBjdHgtPmNvdW50OwotCWlmICh1Y250ID4gMCkKKwlpZiAoY3R4LT5jb3VudCA+IDApCiAJCXJlcyA9IHNpemVvZih1Y250KTsKIAllbHNlIGlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkgewogCQlfX2FkZF93YWl0X3F1ZXVlKCZjdHgtPndxaCwgJndhaXQpOwogCQlmb3IgKHJlcyA9IDA7OykgewogCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJCWlmIChjdHgtPmNvdW50ID4gMCkgewotCQkJCXVjbnQgPSBjdHgtPmNvdW50OwogCQkJCXJlcyA9IHNpemVvZih1Y250KTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTExNywxMCArMTE2LDExIEBACiAJCV9fcmVtb3ZlX3dhaXRfcXVldWUoJmN0eC0+d3FoLCAmd2FpdCk7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAl9Ci0JaWYgKHJlcyA+IDApIHsKLQkJY3R4LT5jb3VudCA9IDA7CisJaWYgKGxpa2VseShyZXMgPiAwKSkgeworCQl1Y250ID0gKGN0eC0+ZmxhZ3MgJiBFRkRfU0VNQVBIT1JFKSA/IDEgOiBjdHgtPmNvdW50OworCQljdHgtPmNvdW50IC09IHVjbnQ7CiAJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZjdHgtPndxaCkpCi0JCQl3YWtlX3VwX2xvY2tlZCgmY3R4LT53cWgpOworCQkJd2FrZV91cF9sb2NrZWRfcG9sbCgmY3R4LT53cWgsIFBPTExPVVQpOwogCX0KIAlzcGluX3VubG9ja19pcnEoJmN0eC0+d3FoLmxvY2spOwogCWlmIChyZXMgPiAwICYmIHB1dF91c2VyKHVjbnQsIChfX3U2NCBfX3VzZXIgKikgYnVmKSkKQEAgLTE2NiwxMCArMTY2LDEwIEBACiAJCV9fcmVtb3ZlX3dhaXRfcXVldWUoJmN0eC0+d3FoLCAmd2FpdCk7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAl9Ci0JaWYgKHJlcyA+IDApIHsKKwlpZiAobGlrZWx5KHJlcyA+IDApKSB7CiAJCWN0eC0+Y291bnQgKz0gdWNudDsKIAkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmN0eC0+d3FoKSkKLQkJCXdha2VfdXBfbG9ja2VkKCZjdHgtPndxaCk7CisJCQl3YWtlX3VwX2xvY2tlZF9wb2xsKCZjdHgtPndxaCwgUE9MTElOKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZjdHgtPndxaC5sb2NrKTsKIApAQCAtMjA3LDcgKzIwNyw3IEBACiAJQlVJTERfQlVHX09OKEVGRF9DTE9FWEVDICE9IE9fQ0xPRVhFQyk7CiAJQlVJTERfQlVHX09OKEVGRF9OT05CTE9DSyAhPSBPX05PTkJMT0NLKTsKIAotCWlmIChmbGFncyAmIH4oRUZEX0NMT0VYRUMgfCBFRkRfTk9OQkxPQ0spKQorCWlmIChmbGFncyAmIH5FRkRfRkxBR1NfU0VUKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWN0eCA9IGttYWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKQEAgLTIxNiwxMyArMjE2LDE0IEBACiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdHgtPndxaCk7CiAJY3R4LT5jb3VudCA9IGNvdW50OworCWN0eC0+ZmxhZ3MgPSBmbGFnczsKIAogCS8qCiAJICogV2hlbiB3ZSBjYWxsIHRoaXMsIHRoZSBpbml0aWFsaXphdGlvbiBtdXN0IGJlIGNvbXBsZXRlLCBzaW5jZQogCSAqIGFub25faW5vZGVfZ2V0ZmQoKSB3aWxsIGluc3RhbGwgdGhlIGZkLgogCSAqLwogCWZkID0gYW5vbl9pbm9kZV9nZXRmZCgiW2V2ZW50ZmRdIiwgJmV2ZW50ZmRfZm9wcywgY3R4LAotCQkJICAgICAgZmxhZ3MgJiAoT19DTE9FWEVDIHwgT19OT05CTE9DSykpOworCQkJICAgICAgZmxhZ3MgJiBFRkRfU0hBUkVEX0ZDTlRMX0ZMQUdTKTsKIAlpZiAoZmQgPCAwKQogCQlrZnJlZShjdHgpOwogCXJldHVybiBmZDsKQEAgLTIzMiwzICsyMzMsNCBAQAogewogCXJldHVybiBzeXNfZXZlbnRmZDIoY291bnQsIDApOwogfQorCmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jCmluZGV4IGM1YzQyNGYuLmE4OWYzNzAgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCisrKyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqICBmcy9ldmVudHBvbGwuYyAoRWZmaWNlbnQgZXZlbnQgcG9sbGluZyBpbXBsZW1lbnRhdGlvbikKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEsLi4uLDIwMDcJIERhdmlkZSBMaWJlbnppCisgKiAgZnMvZXZlbnRwb2xsLmMgKEVmZmljaWVudCBldmVudCByZXRyaWV2YWwgaW1wbGVtZW50YXRpb24pCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLC4uLiwyMDA5CSBEYXZpZGUgTGliZW56aQogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC03MSwyOSArNzEsMTEgQEAKICAqIGEgYmV0dGVyIHNjYWxhYmlsaXR5LgogICovCiAKLSNkZWZpbmUgREVCVUdfRVBPTEwgMAotCi0jaWYgREVCVUdfRVBPTEwgPiAwCi0jZGVmaW5lIERQUklOVEsoeCkgcHJpbnRrIHgKLSNkZWZpbmUgRE5QUklOVEsobiwgeCkgZG8geyBpZiAoKG4pIDw9IERFQlVHX0VQT0xMKSBwcmludGsgeDsgfSB3aGlsZSAoMCkKLSNlbHNlIC8qICNpZiBERUJVR19FUE9MTCA+IDAgKi8KLSNkZWZpbmUgRFBSSU5USyh4KSAodm9pZCkgMAotI2RlZmluZSBETlBSSU5USyhuLCB4KSAodm9pZCkgMAotI2VuZGlmIC8qICNpZiBERUJVR19FUE9MTCA+IDAgKi8KLQotI2RlZmluZSBERUJVR19FUEkgMAotCi0jaWYgREVCVUdfRVBJICE9IDAKLSNkZWZpbmUgRVBJX1NMQUJfREVCVUcgKFNMQUJfREVCVUdfRlJFRSB8IFNMQUJfUkVEX1pPTkUgLyogfCBTTEFCX1BPSVNPTiAqLykKLSNlbHNlIC8qICNpZiBERUJVR19FUEkgIT0gMCAqLwotI2RlZmluZSBFUElfU0xBQl9ERUJVRyAwCi0jZW5kaWYgLyogI2lmIERFQlVHX0VQSSAhPSAwICovCi0KIC8qIEVwb2xsIHByaXZhdGUgYml0cyBpbnNpZGUgdGhlIGV2ZW50IG1hc2sgKi8KICNkZWZpbmUgRVBfUFJJVkFURV9CSVRTIChFUE9MTE9ORVNIT1QgfCBFUE9MTEVUKQogCi0vKiBNYXhpbXVtIG51bWJlciBvZiBwb2xsIHdha2UgdXAgbmVzdHMgd2UgYXJlIGFsbG93aW5nICovCi0jZGVmaW5lIEVQX01BWF9QT0xMV0FLRV9ORVNUUyA0CisvKiBNYXhpbXVtIG51bWJlciBvZiBuZXN0aW5nIGFsbG93ZWQgaW5zaWRlIGVwb2xsIHNldHMgKi8KKyNkZWZpbmUgRVBfTUFYX05FU1RTIDQKIAogLyogTWF4aW11bSBtc2VjIHRpbWVvdXQgdmFsdWUgc3RvcmVhYmxlIGluIGEgbG9uZyBpbnQgKi8KICNkZWZpbmUgRVBfTUFYX01TVElNRU8gbWluKDEwMDBVTEwgKiBNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaLCAoTE9OR19NQVggLSA5OTlVTEwpIC8gSFopCkBAIC0xMTAsMjQgKzkyLDIxIEBACiB9OwogCiAvKgotICogTm9kZSB0aGF0IGlzIGxpbmtlZCBpbnRvIHRoZSAid2FrZV90YXNrX2xpc3QiIG1lbWJlciBvZiB0aGUgInN0cnVjdCBwb2xsX3NhZmV3YWtlIi4KLSAqIEl0IGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvbiBhbGwgdGFza3MgdGhhdCBhcmUgY3VycmVudGx5IGluc2lkZSB0aGUgd2FrZV91cCgpIGNvZGUKLSAqIHRvIDEpIHNob3J0LWNpcmN1aXQgdGhlIG9uZSBjb21pbmcgZnJvbSB0aGUgc2FtZSB0YXNrIGFuZCBzYW1lIHdhaXQgcXVldWUgaGVhZAotICogKGxvb3ApIDIpIGFsbG93IGEgbWF4aW11bSBudW1iZXIgb2YgZXBvbGwgZGVzY3JpcHRvcnMgaW5jbHVzaW9uIG5lc3RpbmcKLSAqIDMpIGxldCBnbyB0aGUgb25lcyBjb21pbmcgZnJvbSBvdGhlciB0YXNrcy4KKyAqIFN0cnVjdHVyZSB1c2VkIHRvIHRyYWNrIHBvc3NpYmxlIG5lc3RlZCBjYWxscywgZm9yIHRvbyBkZWVwIHJlY3Vyc2lvbnMKKyAqIGFuZCBsb29wIGN5Y2xlcy4KICAqLwotc3RydWN0IHdha2VfdGFza19ub2RlIHsKK3N0cnVjdCBuZXN0ZWRfY2FsbF9ub2RlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxsaW5rOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7CisJdm9pZCAqY29va2llOworCWludCBjcHU7CiB9OwogCiAvKgotICogVGhpcyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgc2FmZSBwb2xsIHdha2UgdXAgYXZvaWRpbmcgdG8gcmVlbnRlcgotICogdGhlIHBvbGwgY2FsbGJhY2sgZnJvbSBpbnNpZGUgd2FrZV91cCgpLgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBhcyBjb2xsZWN0b3IgZm9yIG5lc3RlZCBjYWxscywgdG8gY2hlY2sgZm9yCisgKiBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0IGFuZCBsb29wIGN5Y2xlcy4KICAqLwotc3RydWN0IHBvbGxfc2FmZXdha2UgewotCXN0cnVjdCBsaXN0X2hlYWQgd2FrZV90YXNrX2xpc3Q7CitzdHJ1Y3QgbmVzdGVkX2NhbGxzIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHRhc2tzX2NhbGxfbGlzdDsKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCkBAIC0yMTMsNyArMTkyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxsaW5rOwogCiAJLyogVGhlICJiYXNlIiBwb2ludGVyIGlzIHNldCB0byB0aGUgY29udGFpbmVyICJzdHJ1Y3QgZXBpdGVtIiAqLwotCXZvaWQgKmJhc2U7CisJc3RydWN0IGVwaXRlbSAqYmFzZTsKIAogCS8qCiAJICogV2FpdCBxdWV1ZSBpdGVtIHRoYXQgd2lsbCBiZSBsaW5rZWQgdG8gdGhlIHRhcmdldCBmaWxlIHdhaXQKQEAgLTIzMSw2ICsyMTAsMTIgQEAKIAlzdHJ1Y3QgZXBpdGVtICplcGk7CiB9OwogCisvKiBVc2VkIGJ5IHRoZSBlcF9zZW5kX2V2ZW50cygpIGZ1bmN0aW9uIGFzIGNhbGxiYWNrIHByaXZhdGUgZGF0YSAqLworc3RydWN0IGVwX3NlbmRfZXZlbnRzX2RhdGEgeworCWludCBtYXhldmVudHM7CisJc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzOworfTsKKwogLyoKICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgaW5zaWRlIC9wcm9jL3N5cy9mcy9lcG9sbC8KICAqLwpAQCAtMjQyLDggKzIyNywxMSBAQAogICovCiBzdGF0aWMgREVGSU5FX01VVEVYKGVwbXV0ZXgpOwogCi0vKiBTYWZlIHdha2UgdXAgaW1wbGVtZW50YXRpb24gKi8KLXN0YXRpYyBzdHJ1Y3QgcG9sbF9zYWZld2FrZSBwc3c7CisvKiBVc2VkIGZvciBzYWZlIHdha2UgdXAgaW1wbGVtZW50YXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgbmVzdGVkX2NhbGxzIHBvbGxfc2FmZXdha2VfbmNhbGxzOworCisvKiBVc2VkIHRvIGNhbGwgZmlsZSdzIGZfb3AtPnBvbGwoKSB1bmRlciB0aGUgbmVzdGVkIGNhbGxzIGJvdW5kYXJpZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgbmVzdGVkX2NhbGxzIHBvbGxfcmVhZHl3YWxrX25jYWxsczsKIAogLyogU2xhYiBjYWNoZSB1c2VkIHRvIGFsbG9jYXRlICJzdHJ1Y3QgZXBpdGVtIiAqLwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICplcGlfY2FjaGUgX19yZWFkX21vc3RseTsKQEAgLTMxMiwxMSArMzAwLDEwMCBAQAogfQogCiAvKiBJbml0aWFsaXplIHRoZSBwb2xsIHNhZmUgd2FrZSB1cCBzdHJ1Y3R1cmUgKi8KLXN0YXRpYyB2b2lkIGVwX3BvbGxfc2FmZXdha2VfaW5pdChzdHJ1Y3QgcG9sbF9zYWZld2FrZSAqcHN3KQorc3RhdGljIHZvaWQgZXBfbmVzdGVkX2NhbGxzX2luaXQoc3RydWN0IG5lc3RlZF9jYWxscyAqbmNhbGxzKQogeworCUlOSVRfTElTVF9IRUFEKCZuY2FsbHMtPnRhc2tzX2NhbGxfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJm5jYWxscy0+bG9jayk7Cit9CiAKLQlJTklUX0xJU1RfSEVBRCgmcHN3LT53YWtlX3Rhc2tfbGlzdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnBzdy0+bG9jayk7CisvKioKKyAqIGVwX2NhbGxfbmVzdGVkIC0gUGVyZm9ybSBhIGJvdW5kIChwb3NzaWJseSkgbmVzdGVkIGNhbGwsIGJ5IGNoZWNraW5nCisgKiAgICAgICAgICAgICAgICAgIHRoYXQgdGhlIHJlY3Vyc2lvbiBsaW1pdCBpcyBub3QgZXhjZWVkZWQsIGFuZCB0aGF0CisgKiAgICAgICAgICAgICAgICAgIHRoZSBzYW1lIG5lc3RlZCBjYWxsIChieSB0aGUgbWVhbmluZyBvZiBzYW1lIGNvb2tpZSkgaXMKKyAqICAgICAgICAgICAgICAgICAgbm8gcmUtZW50ZXJlZC4KKyAqCisgKiBAbmNhbGxzOiBQb2ludGVyIHRvIHRoZSBuZXN0ZWRfY2FsbHMgc3RydWN0dXJlIHRvIGJlIHVzZWQgZm9yIHRoaXMgY2FsbC4KKyAqIEBtYXhfbmVzdHM6IE1heGltdW0gbnVtYmVyIG9mIGFsbG93ZWQgbmVzdGluZyBjYWxscy4KKyAqIEBucHJvYzogTmVzdGVkIGNhbGwgY29yZSBmdW5jdGlvbiBwb2ludGVyLgorICogQHByaXY6IE9wYXF1ZSBkYXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgQG5wcm9jIGNhbGxiYWNrLgorICogQGNvb2tpZTogQ29va2llIHRvIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhpcyBuZXN0ZWQgY2FsbC4KKyAqCisgKiBSZXR1cm5zOiBSZXR1cm5zIHRoZSBjb2RlIHJldHVybmVkIGJ5IHRoZSBAbnByb2MgY2FsbGJhY2ssIG9yIC0xIGlmCisgKiAgICAgICAgICB0aGUgbWF4aW11bSByZWN1cnNpb24gbGltaXQgaGFzIGJlZW4gZXhjZWVkZWQuCisgKi8KK3N0YXRpYyBpbnQgZXBfY2FsbF9uZXN0ZWQoc3RydWN0IG5lc3RlZF9jYWxscyAqbmNhbGxzLCBpbnQgbWF4X25lc3RzLAorCQkJICBpbnQgKCpucHJvYykodm9pZCAqLCB2b2lkICosIGludCksIHZvaWQgKnByaXYsCisJCQkgIHZvaWQgKmNvb2tpZSkKK3sKKwlpbnQgZXJyb3IsIGNhbGxfbmVzdHMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHRoaXNfY3B1ID0gZ2V0X2NwdSgpOworCXN0cnVjdCBsaXN0X2hlYWQgKmxzdGhlYWQgPSAmbmNhbGxzLT50YXNrc19jYWxsX2xpc3Q7CisJc3RydWN0IG5lc3RlZF9jYWxsX25vZGUgKnRuY3VyOworCXN0cnVjdCBuZXN0ZWRfY2FsbF9ub2RlIHRub2RlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5jYWxscy0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBUcnkgdG8gc2VlIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxyZWFkeSBpbnNpZGUgdGhpcyB3YWtldXAgY2FsbC4KKwkgKiBXZSB1c2UgYSBsaXN0IGhlcmUsIHNpbmNlIHRoZSBwb3B1bGF0aW9uIGluc2lkZSB0aGlzIHNldCBpcyBhbHdheXMKKwkgKiB2ZXJ5IG11Y2ggbGltaXRlZC4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRuY3VyLCBsc3RoZWFkLCBsbGluaykgeworCQlpZiAodG5jdXItPmNwdSA9PSB0aGlzX2NwdSAmJgorCQkgICAgKHRuY3VyLT5jb29raWUgPT0gY29va2llIHx8ICsrY2FsbF9uZXN0cyA+IG1heF9uZXN0cykpIHsKKwkJCS8qCisJCQkgKiBPcHMgLi4uIGxvb3AgZGV0ZWN0ZWQgb3IgbWF4aW11bSBuZXN0IGxldmVsIHJlYWNoZWQuCisJCQkgKiBXZSBhYm9ydCB0aGlzIHdha2UgYnkgYnJlYWtpbmcgdGhlIGN5Y2xlIGl0c2VsZi4KKwkJCSAqLworCQkJZXJyb3IgPSAtMTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCX0KKworCS8qIEFkZCB0aGUgY3VycmVudCB0YXNrIGFuZCBjb29raWUgdG8gdGhlIGxpc3QgKi8KKwl0bm9kZS5jcHUgPSB0aGlzX2NwdTsKKwl0bm9kZS5jb29raWUgPSBjb29raWU7CisJbGlzdF9hZGQoJnRub2RlLmxsaW5rLCBsc3RoZWFkKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5jYWxscy0+bG9jaywgZmxhZ3MpOworCisJLyogQ2FsbCB0aGUgbmVzdGVkIGZ1bmN0aW9uICovCisJZXJyb3IgPSAoKm5wcm9jKShwcml2LCBjb29raWUsIGNhbGxfbmVzdHMpOworCisJLyogUmVtb3ZlIHRoZSBjdXJyZW50IHRhc2sgZnJvbSB0aGUgbGlzdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZuY2FsbHMtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmdG5vZGUubGxpbmspOworIG91dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmNhbGxzLT5sb2NrLCBmbGFncyk7CisKKwlwdXRfY3B1KCk7CisJcmV0dXJuIGVycm9yOworfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKK3N0YXRpYyBpbmxpbmUgdm9pZCBlcF93YWtlX3VwX25lc3RlZCh3YWl0X3F1ZXVlX2hlYWRfdCAqd3F1ZXVlLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBldmVudHMsIGludCBzdWJjbGFzcykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKCZ3cXVldWUtPmxvY2ssIGZsYWdzLCBzdWJjbGFzcyk7CisJd2FrZV91cF9sb2NrZWRfcG9sbCh3cXVldWUsIGV2ZW50cyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3F1ZXVlLT5sb2NrLCBmbGFncyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGVwX3dha2VfdXBfbmVzdGVkKHdhaXRfcXVldWVfaGVhZF90ICp3cXVldWUsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGV2ZW50cywgaW50IHN1YmNsYXNzKQoreworCXdha2VfdXBfcG9sbCh3cXVldWUsIGV2ZW50cyk7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBlcF9wb2xsX3dha2V1cF9wcm9jKHZvaWQgKnByaXYsIHZvaWQgKmNvb2tpZSwgaW50IGNhbGxfbmVzdHMpCit7CisJZXBfd2FrZV91cF9uZXN0ZWQoKHdhaXRfcXVldWVfaGVhZF90ICopIGNvb2tpZSwgUE9MTElOLAorCQkJICAxICsgY2FsbF9uZXN0cyk7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zMjQsNzkgKzQwMSwxMzEgQEAKICAqIHdpdGggdGhlIG5ldyBjYWxsYmFjaydkIHdha2UgdXAgc3lzdGVtLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZQogICogcG9sbCBjYWxsYmFjayBpcyByZWVudGVyZWQgZnJvbSBpbnNpZGUgdGhlIGNhbGwgdG8gd2FrZV91cCgpIGRvbmUKICAqIG9uIHRoZSBwb2xsIHdhaXQgcXVldWUgaGVhZC4gVGhlIHJ1bGUgaXMgdGhhdCB3ZSBjYW5ub3QgcmVlbnRlciB0aGUKLSAqIHdha2UgdXAgY29kZSBmcm9tIHRoZSBzYW1lIHRhc2sgbW9yZSB0aGFuIEVQX01BWF9QT0xMV0FLRV9ORVNUUyB0aW1lcywKKyAqIHdha2UgdXAgY29kZSBmcm9tIHRoZSBzYW1lIHRhc2sgbW9yZSB0aGFuIEVQX01BWF9ORVNUUyB0aW1lcywKICAqIGFuZCB3ZSBjYW5ub3QgcmVlbnRlciB0aGUgc2FtZSB3YWl0IHF1ZXVlIGhlYWQgYXQgYWxsLiBUaGlzIHdpbGwKICAqIGVuYWJsZSB0byBoYXZlIGEgaGllcmFyY2h5IG9mIGVwb2xsIGZpbGUgZGVzY3JpcHRvciBvZiBubyBtb3JlIHRoYW4KLSAqIEVQX01BWF9QT0xMV0FLRV9ORVNUUyBkZWVwLiBXZSBuZWVkIHRoZSBpcnEgdmVyc2lvbiBvZiB0aGUgc3BpbiBsb2NrCi0gKiBiZWNhdXNlIHRoaXMgb25lIGdldHMgY2FsbGVkIGJ5IHRoZSBwb2xsIGNhbGxiYWNrLCB0aGF0IGluIHR1cm4gaXMgY2FsbGVkCi0gKiBmcm9tIGluc2lkZSBhIHdha2VfdXAoKSwgdGhhdCBtaWdodCBiZSBjYWxsZWQgZnJvbSBpcnEgY29udGV4dC4KKyAqIEVQX01BWF9ORVNUUyBkZWVwLgogICovCi1zdGF0aWMgdm9pZCBlcF9wb2xsX3NhZmV3YWtlKHN0cnVjdCBwb2xsX3NhZmV3YWtlICpwc3csIHdhaXRfcXVldWVfaGVhZF90ICp3cSkKK3N0YXRpYyB2b2lkIGVwX3BvbGxfc2FmZXdha2Uod2FpdF9xdWV1ZV9oZWFkX3QgKndxKQogewotCWludCB3YWtlX25lc3RzID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhpc190YXNrID0gY3VycmVudDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsc3RoZWFkID0gJnBzdy0+d2FrZV90YXNrX2xpc3Q7Ci0Jc3RydWN0IHdha2VfdGFza19ub2RlICp0bmN1cjsKLQlzdHJ1Y3Qgd2FrZV90YXNrX25vZGUgdG5vZGU7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHN3LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBUcnkgdG8gc2VlIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxyZWFkeSBpbnNpZGUgdGhpcyB3YWtldXAgY2FsbCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkodG5jdXIsIGxzdGhlYWQsIGxsaW5rKSB7Ci0KLQkJaWYgKHRuY3VyLT53cSA9PSB3cSB8fAotCQkgICAgKHRuY3VyLT50YXNrID09IHRoaXNfdGFzayAmJiArK3dha2VfbmVzdHMgPiBFUF9NQVhfUE9MTFdBS0VfTkVTVFMpKSB7Ci0JCQkvKgotCQkJICogT3BzIC4uLiBsb29wIGRldGVjdGVkIG9yIG1heGltdW0gbmVzdCBsZXZlbCByZWFjaGVkLgotCQkJICogV2UgYWJvcnQgdGhpcyB3YWtlIGJ5IGJyZWFraW5nIHRoZSBjeWNsZSBpdHNlbGYuCi0JCQkgKi8KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzdy0+bG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JLyogQWRkIHRoZSBjdXJyZW50IHRhc2sgdG8gdGhlIGxpc3QgKi8KLQl0bm9kZS50YXNrID0gdGhpc190YXNrOwotCXRub2RlLndxID0gd3E7Ci0JbGlzdF9hZGQoJnRub2RlLmxsaW5rLCBsc3RoZWFkKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBzdy0+bG9jaywgZmxhZ3MpOwotCi0JLyogRG8gcmVhbGx5IHdha2UgdXAgbm93ICovCi0Jd2FrZV91cF9uZXN0ZWQod3EsIDEgKyB3YWtlX25lc3RzKTsKLQotCS8qIFJlbW92ZSB0aGUgY3VycmVudCB0YXNrIGZyb20gdGhlIGxpc3QgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHN3LT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9kZWwoJnRub2RlLmxsaW5rKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwc3ctPmxvY2ssIGZsYWdzKTsKKwllcF9jYWxsX25lc3RlZCgmcG9sbF9zYWZld2FrZV9uY2FsbHMsIEVQX01BWF9ORVNUUywKKwkJICAgICAgIGVwX3BvbGxfd2FrZXVwX3Byb2MsIE5VTEwsIHdxKTsKIH0KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlciBwb2xsIGNhbGxiYWNrcyBmcm9tIHRoZSBhc3NvY2lhdGVkIGZpbGUgZGVzY3JpcHRvci4KLSAqIFNpbmNlIHRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aG91dCBob2xkaW5nICJlcC0+bG9jayIgdGhlIGF0b21pYyBleGNoYW5nZSB0cmljawotICogd2lsbCBwcm90ZWN0IHVzIGZyb20gbXVsdGlwbGUgdW5yZWdpc3Rlci4KKyAqIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgcG9sbCBjYWxsYmFja3MgZnJvbSB0aGUgYXNzb2NpYXRlZCBmaWxlCisgKiBkZXNjcmlwdG9yLiAgTXVzdCBiZSBjYWxsZWQgd2l0aCAibXR4IiBoZWxkIChvciAiZXBtdXRleCIgaWYgY2FsbGVkIGZyb20KKyAqIGVwX2ZyZWUpLgogICovCiBzdGF0aWMgdm9pZCBlcF91bnJlZ2lzdGVyX3BvbGx3YWl0KHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBpdGVtICplcGkpCiB7Ci0JaW50IG53YWl0OwogCXN0cnVjdCBsaXN0X2hlYWQgKmxzdGhlYWQgPSAmZXBpLT5wd3FsaXN0OwogCXN0cnVjdCBlcHBvbGxfZW50cnkgKnB3cTsKIAotCS8qIFRoaXMgaXMgY2FsbGVkIHdpdGhvdXQgbG9ja3MsIHNvIHdlIG5lZWQgdGhlIGF0b21pYyBleGNoYW5nZSAqLwotCW53YWl0ID0geGNoZygmZXBpLT5ud2FpdCwgMCk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KGxzdGhlYWQpKSB7CisJCXB3cSA9IGxpc3RfZmlyc3RfZW50cnkobHN0aGVhZCwgc3RydWN0IGVwcG9sbF9lbnRyeSwgbGxpbmspOwogCi0JaWYgKG53YWl0KSB7Ci0JCXdoaWxlICghbGlzdF9lbXB0eShsc3RoZWFkKSkgewotCQkJcHdxID0gbGlzdF9maXJzdF9lbnRyeShsc3RoZWFkLCBzdHJ1Y3QgZXBwb2xsX2VudHJ5LCBsbGluayk7Ci0KLQkJCWxpc3RfZGVsX2luaXQoJnB3cS0+bGxpbmspOwotCQkJcmVtb3ZlX3dhaXRfcXVldWUocHdxLT53aGVhZCwgJnB3cS0+d2FpdCk7Ci0JCQlrbWVtX2NhY2hlX2ZyZWUocHdxX2NhY2hlLCBwd3EpOwotCQl9CisJCWxpc3RfZGVsKCZwd3EtPmxsaW5rKTsKKwkJcmVtb3ZlX3dhaXRfcXVldWUocHdxLT53aGVhZCwgJnB3cS0+d2FpdCk7CisJCWttZW1fY2FjaGVfZnJlZShwd3FfY2FjaGUsIHB3cSk7CiAJfQogfQogCisvKioKKyAqIGVwX3NjYW5fcmVhZHlfbGlzdCAtIFNjYW5zIHRoZSByZWFkeSBsaXN0IGluIGEgd2F5IHRoYXQgbWFrZXMgcG9zc2libGUgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICB0aGUgc2NhbiBjb2RlLCB0byBjYWxsIGZfb3AtPnBvbGwoKS4gQWxzbyBhbGxvd3MgZm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBPKE51bVJlYWR5KSBwZXJmb3JtYW5jZS4KKyAqCisgKiBAZXA6IFBvaW50ZXIgdG8gdGhlIGVwb2xsIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAc3Byb2M6IFBvaW50ZXIgdG8gdGhlIHNjYW4gY2FsbGJhY2suCisgKiBAcHJpdjogUHJpdmF0ZSBvcGFxdWUgZGF0YSBwYXNzZWQgdG8gdGhlIEBzcHJvYyBjYWxsYmFjay4KKyAqCisgKiBSZXR1cm5zOiBUaGUgc2FtZSBpbnRlZ2VyIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgdGhlIEBzcHJvYyBjYWxsYmFjay4KKyAqLworc3RhdGljIGludCBlcF9zY2FuX3JlYWR5X2xpc3Qoc3RydWN0IGV2ZW50cG9sbCAqZXAsCisJCQkgICAgICBpbnQgKCpzcHJvYykoc3RydWN0IGV2ZW50cG9sbCAqLAorCQkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICosIHZvaWQgKiksCisJCQkgICAgICB2b2lkICpwcml2KQoreworCWludCBlcnJvciwgcHdha2UgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGVwaXRlbSAqZXBpLCAqbmVwaTsKKwlMSVNUX0hFQUQodHhsaXN0KTsKKworCS8qCisJICogV2UgbmVlZCB0byBsb2NrIHRoaXMgYmVjYXVzZSB3ZSBjb3VsZCBiZSBoaXQgYnkKKwkgKiBldmVudHBvbGxfcmVsZWFzZV9maWxlKCkgYW5kIGVwb2xsX2N0bCgpLgorCSAqLworCW11dGV4X2xvY2soJmVwLT5tdHgpOworCisJLyoKKwkgKiBTdGVhbCB0aGUgcmVhZHkgbGlzdCwgYW5kIHJlLWluaXQgdGhlIG9yaWdpbmFsIG9uZSB0byB0aGUKKwkgKiBlbXB0eSBsaXN0LiBBbHNvLCBzZXQgZXAtPm92Zmxpc3QgdG8gTlVMTCBzbyB0aGF0IGV2ZW50cworCSAqIGhhcHBlbmluZyB3aGlsZSBsb29waW5nIHcvb3V0IGxvY2tzLCBhcmUgbm90IGxvc3QuIFdlIGNhbm5vdAorCSAqIGhhdmUgdGhlIHBvbGwgY2FsbGJhY2sgdG8gcXVldWUgZGlyZWN0bHkgb24gZXAtPnJkbGxpc3QsCisJICogYmVjYXVzZSB3ZSB3YW50IHRoZSAic3Byb2MiIGNhbGxiYWNrIHRvIGJlIGFibGUgdG8gZG8gaXQKKwkgKiBpbiBhIGxvY2tsZXNzIHdheS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZV9pbml0KCZlcC0+cmRsbGlzdCwgJnR4bGlzdCk7CisJZXAtPm92Zmxpc3QgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CisKKwkvKgorCSAqIE5vdyBjYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KKwkgKi8KKwllcnJvciA9ICgqc3Byb2MpKGVwLCAmdHhsaXN0LCBwcml2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOworCS8qCisJICogRHVyaW5nIHRoZSB0aW1lIHdlIHNwZW50IGluc2lkZSB0aGUgInNwcm9jIiBjYWxsYmFjaywgc29tZQorCSAqIG90aGVyIGV2ZW50cyBtaWdodCBoYXZlIGJlZW4gcXVldWVkIGJ5IHRoZSBwb2xsIGNhbGxiYWNrLgorCSAqIFdlIHJlLWluc2VydCB0aGVtIGluc2lkZSB0aGUgbWFpbiByZWFkeS1saXN0IGhlcmUuCisJICovCisJZm9yIChuZXBpID0gZXAtPm92Zmxpc3Q7IChlcGkgPSBuZXBpKSAhPSBOVUxMOworCSAgICAgbmVwaSA9IGVwaS0+bmV4dCwgZXBpLT5uZXh0ID0gRVBfVU5BQ1RJVkVfUFRSKSB7CisJCS8qCisJCSAqIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGl0ZW0gaXMgYWxyZWFkeSBpbiB0aGUgbGlzdC4KKwkJICogRHVyaW5nIHRoZSAic3Byb2MiIGNhbGxiYWNrIGV4ZWN1dGlvbiB0aW1lLCBpdGVtcyBhcmUKKwkJICogcXVldWVkIGludG8gLT5vdmZsaXN0IGJ1dCB0aGUgInR4bGlzdCIgbWlnaHQgYWxyZWFkeQorCQkgKiBjb250YWluIHRoZW0sIGFuZCB0aGUgbGlzdF9zcGxpY2UoKSBiZWxvdyB0YWtlcyBjYXJlIG9mIHRoZW0uCisJCSAqLworCQlpZiAoIWVwX2lzX2xpbmtlZCgmZXBpLT5yZGxsaW5rKSkKKwkJCWxpc3RfYWRkX3RhaWwoJmVwaS0+cmRsbGluaywgJmVwLT5yZGxsaXN0KTsKKwl9CisJLyoKKwkgKiBXZSBuZWVkIHRvIHNldCBiYWNrIGVwLT5vdmZsaXN0IHRvIEVQX1VOQUNUSVZFX1BUUiwgc28gdGhhdCBhZnRlcgorCSAqIHJlbGVhc2luZyB0aGUgbG9jaywgZXZlbnRzIHdpbGwgYmUgcXVldWVkIGluIHRoZSBub3JtYWwgd2F5IGluc2lkZQorCSAqIGVwLT5yZGxsaXN0LgorCSAqLworCWVwLT5vdmZsaXN0ID0gRVBfVU5BQ1RJVkVfUFRSOworCisJLyoKKwkgKiBRdWlja2x5IHJlLWluamVjdCBpdGVtcyBsZWZ0IG9uICJ0eGxpc3QiLgorCSAqLworCWxpc3Rfc3BsaWNlKCZ0eGxpc3QsICZlcC0+cmRsbGlzdCk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmVwLT5yZGxsaXN0KSkgeworCQkvKgorCQkgKiBXYWtlIHVwIChpZiBhY3RpdmUpIGJvdGggdGhlIGV2ZW50cG9sbCB3YWl0IGxpc3QgYW5kCisJCSAqIHRoZSAtPnBvbGwoKSB3YWl0IGxpc3QgKGRlbGF5ZWQgYWZ0ZXIgd2UgcmVsZWFzZSB0aGUgbG9jaykuCisJCSAqLworCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZXAtPndxKSkKKwkJCXdha2VfdXBfbG9ja2VkKCZlcC0+d3EpOworCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZXAtPnBvbGxfd2FpdCkpCisJCQlwd2FrZSsrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOworCisJbXV0ZXhfdW5sb2NrKCZlcC0+bXR4KTsKKworCS8qIFdlIGhhdmUgdG8gY2FsbCB0aGlzIG91dHNpZGUgdGhlIGxvY2sgKi8KKwlpZiAocHdha2UpCisJCWVwX3BvbGxfc2FmZXdha2UoJmVwLT5wb2xsX3dhaXQpOworCisJcmV0dXJuIGVycm9yOworfQorCiAvKgogICogUmVtb3ZlcyBhICJzdHJ1Y3QgZXBpdGVtIiBmcm9tIHRoZSBldmVudHBvbGwgUkIgdHJlZSBhbmQgZGVhbGxvY2F0ZXMKICAqIGFsbCB0aGUgYXNzb2NpYXRlZCByZXNvdXJjZXMuIE11c3QgYmUgY2FsbGVkIHdpdGggIm10eCIgaGVsZC4KQEAgLTQzNCw5ICs1NjMsNiBAQAogCiAJYXRvbWljX2RlYygmZXAtPnVzZXItPmVwb2xsX3dhdGNoZXMpOwogCi0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IGVwX3JlbW92ZSglcCwgJXApXG4iLAotCQkgICAgIGN1cnJlbnQsIGVwLCBmaWxlKSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDQ3LDcgKzU3Myw3IEBACiAKIAkvKiBXZSBuZWVkIHRvIHJlbGVhc2UgYWxsIHRhc2tzIHdhaXRpbmcgZm9yIHRoZXNlIGZpbGUgKi8KIAlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmZXAtPnBvbGxfd2FpdCkpCi0JCWVwX3BvbGxfc2FmZXdha2UoJnBzdywgJmVwLT5wb2xsX3dhaXQpOworCQllcF9wb2xsX3NhZmV3YWtlKCZlcC0+cG9sbF93YWl0KTsKIAogCS8qCiAJICogV2UgbmVlZCB0byBsb2NrIHRoaXMgYmVjYXVzZSB3ZSBjb3VsZCBiZSBoaXQgYnkKQEAgLTQ5MiwyNiArNjE4LDU0IEBACiAJaWYgKGVwKQogCQllcF9mcmVlKGVwKTsKIAotCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBjbG9zZSgpIGVwPSVwXG4iLCBjdXJyZW50LCBlcCkpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGVwX3JlYWRfZXZlbnRzX3Byb2Moc3RydWN0IGV2ZW50cG9sbCAqZXAsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkgICAgICAgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgZXBpdGVtICplcGksICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXBpLCB0bXAsIGhlYWQsIHJkbGxpbmspIHsKKwkJaWYgKGVwaS0+ZmZkLmZpbGUtPmZfb3AtPnBvbGwoZXBpLT5mZmQuZmlsZSwgTlVMTCkgJgorCQkgICAgZXBpLT5ldmVudC5ldmVudHMpCisJCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKKwkJZWxzZSB7CisJCQkvKgorCQkJICogSXRlbSBoYXMgYmVlbiBkcm9wcGVkIGludG8gdGhlIHJlYWR5IGxpc3QgYnkgdGhlIHBvbGwKKwkJCSAqIGNhbGxiYWNrLCBidXQgaXQncyBub3QgYWN0dWFsbHkgcmVhZHksIGFzIGZhciBhcworCQkJICogY2FsbGVyIHJlcXVlc3RlZCBldmVudHMgZ29lcy4gV2UgY2FuIHJlbW92ZSBpdCBoZXJlLgorCQkJICovCisJCQlsaXN0X2RlbF9pbml0KCZlcGktPnJkbGxpbmspOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXBfcG9sbF9yZWFkeWV2ZW50c19wcm9jKHZvaWQgKnByaXYsIHZvaWQgKmNvb2tpZSwgaW50IGNhbGxfbmVzdHMpCit7CisJcmV0dXJuIGVwX3NjYW5fcmVhZHlfbGlzdChwcml2LCBlcF9yZWFkX2V2ZW50c19wcm9jLCBOVUxMKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGludCBlcF9ldmVudHBvbGxfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKLQl1bnNpZ25lZCBpbnQgcG9sbGZsYWdzID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBwb2xsZmxhZ3M7CiAJc3RydWN0IGV2ZW50cG9sbCAqZXAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAkvKiBJbnNlcnQgaW5zaWRlIG91ciBwb2xsIHdhaXQgcXVldWUgKi8KIAlwb2xsX3dhaXQoZmlsZSwgJmVwLT5wb2xsX3dhaXQsIHdhaXQpOwogCi0JLyogQ2hlY2sgb3VyIGNvbmRpdGlvbiAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOwotCWlmICghbGlzdF9lbXB0eSgmZXAtPnJkbGxpc3QpKQotCQlwb2xsZmxhZ3MgPSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBQcm9jZWVkIHRvIGZpbmQgb3V0IGlmIHdhbnRlZCBldmVudHMgYXJlIHJlYWxseSBhdmFpbGFibGUgaW5zaWRlCisJICogdGhlIHJlYWR5IGxpc3QuIFRoaXMgbmVlZCB0byBiZSBkb25lIHVuZGVyIGVwX2NhbGxfbmVzdGVkKCkKKwkgKiBzdXBlcnZpc2lvbiwgc2luY2UgdGhlIGNhbGwgdG8gZl9vcC0+cG9sbCgpIGRvbmUgb24gbGlzdGVkIGZpbGVzCisJICogY291bGQgcmUtZW50ZXIgaGVyZS4KKwkgKi8KKwlwb2xsZmxhZ3MgPSBlcF9jYWxsX25lc3RlZCgmcG9sbF9yZWFkeXdhbGtfbmNhbGxzLCBFUF9NQVhfTkVTVFMsCisJCQkJICAgZXBfcG9sbF9yZWFkeWV2ZW50c19wcm9jLCBlcCwgZXApOwogCi0JcmV0dXJuIHBvbGxmbGFnczsKKwlyZXR1cm4gcG9sbGZsYWdzICE9IC0xID8gcG9sbGZsYWdzIDogMDsKIH0KIAogLyogRmlsZSBjYWxsYmFja3MgdGhhdCBpbXBsZW1lbnQgdGhlIGV2ZW50cG9sbCBmaWxlIGJlaGF2aW91ciAqLwpAQCAtNTQxLDcgKzY5NSw3IEBACiAJICogV2UgZG9uJ3Qgd2FudCB0byBnZXQgImZpbGUtPmZfbG9jayIgYmVjYXVzZSBpdCBpcyBub3QKIAkgKiBuZWNlc3NhcnkuIEl0IGlzIG5vdCBuZWNlc3NhcnkgYmVjYXVzZSB3ZSdyZSBpbiB0aGUgInN0cnVjdCBmaWxlIgogCSAqIGNsZWFudXAgcGF0aCwgYW5kIHRoaXMgbWVhbnMgdGhhdCBub29uZSBpcyB1c2luZyB0aGlzIGZpbGUgYW55bW9yZS4KLQkgKiBTbywgZm9yIGV4YW1wbGUsIGVwb2xsX2N0bCgpIGNhbm5vdCBoaXQgaGVyZSBzaWNuZSBpZiB3ZSByZWFjaCB0aGlzCisJICogU28sIGZvciBleGFtcGxlLCBlcG9sbF9jdGwoKSBjYW5ub3QgaGl0IGhlcmUgc2luY2UgaWYgd2UgcmVhY2ggdGhpcwogCSAqIHBvaW50LCB0aGUgZmlsZSBjb3VudGVyIGFscmVhZHkgd2VudCB0byB6ZXJvIGFuZCBmZ2V0KCkgd291bGQgZmFpbC4KIAkgKiBUaGUgb25seSBoaXQgbWlnaHQgY29tZSBmcm9tIGVwX2ZyZWUoKSBidXQgYnkgaG9sZGluZyB0aGUgbXV0ZXgKIAkgKiB3aWxsIGNvcnJlY3RseSBzZXJpYWxpemUgdGhlIG9wZXJhdGlvbi4gV2UgZG8gbmVlZCB0byBhY3F1aXJlCkBAIC01ODgsOCArNzQyLDYgQEAKIAogCSpwZXAgPSBlcDsKIAotCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBlcF9hbGxvYygpIGVwPSVwXG4iLAotCQkgICAgIGN1cnJlbnQsIGVwKSk7CiAJcmV0dXJuIDA7CiAKIGZyZWVfdWlkOgpAQCAtNjIzLDkgKzc3NSw2IEBACiAJCX0KIAl9CiAKLQlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogZXBfZmluZCglcCkgLT4gJXBcbiIsCi0JCSAgICAgY3VycmVudCwgZmlsZSwgZXBpcikpOwotCiAJcmV0dXJuIGVwaXI7CiB9CiAKQEAgLTY0MSw5ICs3OTAsNiBAQAogCXN0cnVjdCBlcGl0ZW0gKmVwaSA9IGVwX2l0ZW1fZnJvbV93YWl0KHdhaXQpOwogCXN0cnVjdCBldmVudHBvbGwgKmVwID0gZXBpLT5lcDsKIAotCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBwb2xsX2NhbGxiYWNrKCVwKSBlcGk9JXAgZXA9JXBcbiIsCi0JCSAgICAgY3VycmVudCwgZXBpLT5mZmQuZmlsZSwgZXBpLCBlcCkpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CiAKIAkvKgpAQCAtNjU2LDYgKzgwMiwxNSBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKgorCSAqIENoZWNrIHRoZSBldmVudHMgY29taW5nIHdpdGggdGhlIGNhbGxiYWNrLiBBdCB0aGlzIHN0YWdlLCBub3QKKwkgKiBldmVyeSBkZXZpY2UgcmVwb3J0cyB0aGUgZXZlbnRzIGluIHRoZSAia2V5IiBwYXJhbWV0ZXIgb2YgdGhlCisJICogY2FsbGJhY2suIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBoYW5kbGUgYm90aCBjYXNlcyBoZXJlLCBoZW5jZSB0aGUKKwkgKiB0ZXN0IGZvciAia2V5IiAhPSBOVUxMIGJlZm9yZSB0aGUgZXZlbnQgbWF0Y2ggdGVzdC4KKwkgKi8KKwlpZiAoa2V5ICYmICEoKHVuc2lnbmVkIGxvbmcpIGtleSAmIGVwaS0+ZXZlbnQuZXZlbnRzKSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJLyoKIAkgKiBJZiB3ZSBhcmUgdHJhc2ZlcmluZyBldmVudHMgdG8gdXNlcnNwYWNlLCB3ZSBjYW4gaG9sZCBubyBsb2NrcwogCSAqIChiZWNhdXNlIHdlJ3JlIGFjY2Vzc2luZyB1c2VyIG1lbW9yeSwgYW5kIGJlY2F1c2Ugb2YgbGludXggZl9vcC0+cG9sbCgpCiAJICogc2VtYW50aWNzKS4gQWxsIHRoZSBldmVudHMgdGhhdCBoYXBwZW5zIGR1cmluZyB0aGF0IHBlcmlvZCBvZiB0aW1lIGFyZQpAQCAtNjcwLDEyICs4MjUsOSBAQAogCX0KIAogCS8qIElmIHRoaXMgZmlsZSBpcyBhbHJlYWR5IGluIHRoZSByZWFkeSBsaXN0IHdlIGV4aXQgc29vbiAqLwotCWlmIChlcF9pc19saW5rZWQoJmVwaS0+cmRsbGluaykpCi0JCWdvdG8gaXNfbGlua2VkOworCWlmICghZXBfaXNfbGlua2VkKCZlcGktPnJkbGxpbmspKQorCQlsaXN0X2FkZF90YWlsKCZlcGktPnJkbGxpbmssICZlcC0+cmRsbGlzdCk7CiAKLQlsaXN0X2FkZF90YWlsKCZlcGktPnJkbGxpbmssICZlcC0+cmRsbGlzdCk7Ci0KLWlzX2xpbmtlZDoKIAkvKgogCSAqIFdha2UgdXAgKCBpZiBhY3RpdmUgKSBib3RoIHRoZSBldmVudHBvbGwgd2FpdCBsaXN0IGFuZCB0aGUgLT5wb2xsKCkKIAkgKiB3YWl0IGxpc3QuCkBAIC02OTAsNyArODQyLDcgQEAKIAogCS8qIFdlIGhhdmUgdG8gY2FsbCB0aGlzIG91dHNpZGUgdGhlIGxvY2sgKi8KIAlpZiAocHdha2UpCi0JCWVwX3BvbGxfc2FmZXdha2UoJnBzdywgJmVwLT5wb2xsX3dhaXQpOworCQllcF9wb2xsX3NhZmV3YWtlKCZlcC0+cG9sbF93YWl0KTsKIAogCXJldHVybiAxOwogfQpAQCAtODE3LDEwICs5NjksNyBAQAogCiAJLyogV2UgaGF2ZSB0byBjYWxsIHRoaXMgb3V0c2lkZSB0aGUgbG9jayAqLwogCWlmIChwd2FrZSkKLQkJZXBfcG9sbF9zYWZld2FrZSgmcHN3LCAmZXAtPnBvbGxfd2FpdCk7Ci0KLQlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogZXBfaW5zZXJ0KCVwLCAlcCwgJWQpXG4iLAotCQkgICAgIGN1cnJlbnQsIGVwLCB0ZmlsZSwgZmQpKTsKKwkJZXBfcG9sbF9zYWZld2FrZSgmZXAtPnBvbGxfd2FpdCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtODUxLDE1ICsxMDAwLDE0IEBACiB7CiAJaW50IHB3YWtlID0gMDsKIAl1bnNpZ25lZCBpbnQgcmV2ZW50czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKLQkgKiBTZXQgdGhlIG5ldyBldmVudCBpbnRlcmVzdCBtYXNrIGJlZm9yZSBjYWxsaW5nIGZfb3AtPnBvbGwoKSwgb3RoZXJ3aXNlCi0JICogYSBwb3RlbnRpYWwgcmFjZSBtaWdodCBvY2N1ci4gSW4gZmFjdCBpZiB3ZSBkbyB0aGlzIG9wZXJhdGlvbiBpbnNpZGUKLQkgKiB0aGUgbG9jaywgYW4gZXZlbnQgbWlnaHQgaGFwcGVuIGJldHdlZW4gdGhlIGZfb3AtPnBvbGwoKSBjYWxsIGFuZCB0aGUKLQkgKiBuZXcgZXZlbnQgc2V0IHJlZ2lzdGVyaW5nLgorCSAqIFNldCB0aGUgbmV3IGV2ZW50IGludGVyZXN0IG1hc2sgYmVmb3JlIGNhbGxpbmcgZl9vcC0+cG9sbCgpOworCSAqIG90aGVyd2lzZSB3ZSBtaWdodCBtaXNzIGFuIGV2ZW50IHRoYXQgaGFwcGVucyBiZXR3ZWVuIHRoZQorCSAqIGZfb3AtPnBvbGwoKSBjYWxsIGFuZCB0aGUgbmV3IGV2ZW50IHNldCByZWdpc3RlcmluZy4KIAkgKi8KIAllcGktPmV2ZW50LmV2ZW50cyA9IGV2ZW50LT5ldmVudHM7CisJZXBpLT5ldmVudC5kYXRhID0gZXZlbnQtPmRhdGE7IC8qIHByb3RlY3RlZCBieSBtdHggKi8KIAogCS8qCiAJICogR2V0IGN1cnJlbnQgZXZlbnQgYml0cy4gV2UgY2FuIHNhZmVseSB1c2UgdGhlIGZpbGUqIGhlcmUgYmVjYXVzZQpAQCAtODY3LDE2ICsxMDE1LDEyIEBACiAJICovCiAJcmV2ZW50cyA9IGVwaS0+ZmZkLmZpbGUtPmZfb3AtPnBvbGwoZXBpLT5mZmQuZmlsZSwgTlVMTCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKLQotCS8qIENvcHkgdGhlIGRhdGEgbWVtYmVyIGZyb20gaW5zaWRlIHRoZSBsb2NrICovCi0JZXBpLT5ldmVudC5kYXRhID0gZXZlbnQtPmRhdGE7Ci0KIAkvKgogCSAqIElmIHRoZSBpdGVtIGlzICJob3QiIGFuZCBpdCBpcyBub3QgcmVnaXN0ZXJlZCBpbnNpZGUgdGhlIHJlYWR5CiAJICogbGlzdCwgcHVzaCBpdCBpbnNpZGUuCiAJICovCiAJaWYgKHJldmVudHMgJiBldmVudC0+ZXZlbnRzKSB7CisJCXNwaW5fbG9ja19pcnEoJmVwLT5sb2NrKTsKIAkJaWYgKCFlcF9pc19saW5rZWQoJmVwaS0+cmRsbGluaykpIHsKIAkJCWxpc3RfYWRkX3RhaWwoJmVwaS0+cmRsbGluaywgJmVwLT5yZGxsaXN0KTsKIApAQCAtODg2LDE0MiArMTAzMCw4NCBAQAogCQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmVwLT5wb2xsX3dhaXQpKQogCQkJCXB3YWtlKys7CiAJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZlcC0+bG9jayk7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBXZSBoYXZlIHRvIGNhbGwgdGhpcyBvdXRzaWRlIHRoZSBsb2NrICovCiAJaWYgKHB3YWtlKQotCQllcF9wb2xsX3NhZmV3YWtlKCZwc3csICZlcC0+cG9sbF93YWl0KTsKKwkJZXBfcG9sbF9zYWZld2FrZSgmZXAtPnBvbGxfd2FpdCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlcF9zZW5kX2V2ZW50cyhzdHJ1Y3QgZXZlbnRwb2xsICplcCwgc3RydWN0IGVwb2xsX2V2ZW50IF9fdXNlciAqZXZlbnRzLAotCQkJICBpbnQgbWF4ZXZlbnRzKQorc3RhdGljIGludCBlcF9zZW5kX2V2ZW50c19wcm9jKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAorCQkJICAgICAgIHZvaWQgKnByaXYpCiB7Ci0JaW50IGV2ZW50Y250LCBlcnJvciA9IC1FRkFVTFQsIHB3YWtlID0gMDsKKwlzdHJ1Y3QgZXBfc2VuZF9ldmVudHNfZGF0YSAqZXNlZCA9IHByaXY7CisJaW50IGV2ZW50Y250OwogCXVuc2lnbmVkIGludCByZXZlbnRzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGVwaXRlbSAqZXBpLCAqbmVwaTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHR4bGlzdDsKLQotCUlOSVRfTElTVF9IRUFEKCZ0eGxpc3QpOworCXN0cnVjdCBlcGl0ZW0gKmVwaTsKKwlzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICp1ZXZlbnQ7CiAKIAkvKgotCSAqIFdlIG5lZWQgdG8gbG9jayB0aGlzIGJlY2F1c2Ugd2UgY291bGQgYmUgaGl0IGJ5Ci0JICogZXZlbnRwb2xsX3JlbGVhc2VfZmlsZSgpIGFuZCBlcG9sbF9jdGwoRVBPTExfQ1RMX0RFTCkuCisJICogV2UgY2FuIGxvb3Agd2l0aG91dCBsb2NrIGJlY2F1c2Ugd2UgYXJlIHBhc3NlZCBhIHRhc2sgcHJpdmF0ZSBsaXN0LgorCSAqIEl0ZW1zIGNhbm5vdCB2YW5pc2ggZHVyaW5nIHRoZSBsb29wIGJlY2F1c2UgZXBfc2Nhbl9yZWFkeV9saXN0KCkgaXMKKwkgKiBob2xkaW5nICJtdHgiIGR1cmluZyB0aGlzIGNhbGwuCiAJICovCi0JbXV0ZXhfbG9jaygmZXAtPm10eCk7Ci0KLQkvKgotCSAqIFN0ZWFsIHRoZSByZWFkeSBsaXN0LCBhbmQgcmUtaW5pdCB0aGUgb3JpZ2luYWwgb25lIHRvIHRoZQotCSAqIGVtcHR5IGxpc3QuIEFsc28sIHNldCBlcC0+b3ZmbGlzdCB0byBOVUxMIHNvIHRoYXQgZXZlbnRzCi0JICogaGFwcGVuaW5nIHdoaWxlIGxvb3Bpbmcgdy9vdXQgbG9ja3MsIGFyZSBub3QgbG9zdC4gV2UgY2Fubm90Ci0JICogaGF2ZSB0aGUgcG9sbCBjYWxsYmFjayB0byBxdWV1ZSBkaXJlY3RseSBvbiBlcC0+cmRsbGlzdCwKLQkgKiBiZWNhdXNlIHdlIGFyZSBkb2luZyBpdCBpbiB0aGUgbG9vcCBiZWxvdywgaW4gYSBsb2NrbGVzcyB3YXkuCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9zcGxpY2UoJmVwLT5yZGxsaXN0LCAmdHhsaXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmZXAtPnJkbGxpc3QpOwotCWVwLT5vdmZsaXN0ID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBXZSBjYW4gbG9vcCB3aXRob3V0IGxvY2sgYmVjYXVzZSB0aGlzIGlzIGEgdGFzayBwcml2YXRlIGxpc3QuCi0JICogV2UganVzdCBzcGxpY2UnZCBvdXQgdGhlIGVwLT5yZGxsaXN0IGluIGVwX2NvbGxlY3RfcmVhZHlfaXRlbXMoKS4KLQkgKiBJdGVtcyBjYW5ub3QgdmFuaXNoIGR1cmluZyB0aGUgbG9vcCBiZWNhdXNlIHdlIGFyZSBob2xkaW5nICJtdHgiLgotCSAqLwotCWZvciAoZXZlbnRjbnQgPSAwOyAhbGlzdF9lbXB0eSgmdHhsaXN0KSAmJiBldmVudGNudCA8IG1heGV2ZW50czspIHsKLQkJZXBpID0gbGlzdF9maXJzdF9lbnRyeSgmdHhsaXN0LCBzdHJ1Y3QgZXBpdGVtLCByZGxsaW5rKTsKKwlmb3IgKGV2ZW50Y250ID0gMCwgdWV2ZW50ID0gZXNlZC0+ZXZlbnRzOworCSAgICAgIWxpc3RfZW1wdHkoaGVhZCkgJiYgZXZlbnRjbnQgPCBlc2VkLT5tYXhldmVudHM7KSB7CisJCWVwaSA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGVwaXRlbSwgcmRsbGluayk7CiAKIAkJbGlzdF9kZWxfaW5pdCgmZXBpLT5yZGxsaW5rKTsKIAotCQkvKgotCQkgKiBHZXQgdGhlIHJlYWR5IGZpbGUgZXZlbnQgc2V0LiBXZSBjYW4gc2FmZWx5IHVzZSB0aGUgZmlsZQotCQkgKiBiZWNhdXNlIHdlIGFyZSBob2xkaW5nIHRoZSAibXR4IiBhbmQgdGhpcyB3aWxsIGd1YXJhbnRlZQotCQkgKiB0aGF0IGJvdGggdGhlIGZpbGUgYW5kIHRoZSBpdGVtIHdpbGwgbm90IHZhbmlzaC4KLQkJICovCi0JCXJldmVudHMgPSBlcGktPmZmZC5maWxlLT5mX29wLT5wb2xsKGVwaS0+ZmZkLmZpbGUsIE5VTEwpOwotCQlyZXZlbnRzICY9IGVwaS0+ZXZlbnQuZXZlbnRzOworCQlyZXZlbnRzID0gZXBpLT5mZmQuZmlsZS0+Zl9vcC0+cG9sbChlcGktPmZmZC5maWxlLCBOVUxMKSAmCisJCQllcGktPmV2ZW50LmV2ZW50czsKIAogCQkvKgotCQkgKiBJcyB0aGUgZXZlbnQgbWFzayBpbnRlcnNlY3QgdGhlIGNhbGxlci1yZXF1ZXN0ZWQgb25lLAotCQkgKiBkZWxpdmVyIHRoZSBldmVudCB0byB1c2Vyc3BhY2UuIEFnYWluLCB3ZSBhcmUgaG9sZGluZwotCQkgKiAibXR4Iiwgc28gbm8gb3BlcmF0aW9ucyBjb21pbmcgZnJvbSB1c2Vyc3BhY2UgY2FuIGNoYW5nZQotCQkgKiB0aGUgaXRlbS4KKwkJICogSWYgdGhlIGV2ZW50IG1hc2sgaW50ZXJzZWN0IHRoZSBjYWxsZXItcmVxdWVzdGVkIG9uZSwKKwkJICogZGVsaXZlciB0aGUgZXZlbnQgdG8gdXNlcnNwYWNlLiBBZ2FpbiwgZXBfc2Nhbl9yZWFkeV9saXN0KCkKKwkJICogaXMgaG9sZGluZyAibXR4Iiwgc28gbm8gb3BlcmF0aW9ucyBjb21pbmcgZnJvbSB1c2Vyc3BhY2UKKwkJICogY2FuIGNoYW5nZSB0aGUgaXRlbS4KIAkJICovCiAJCWlmIChyZXZlbnRzKSB7Ci0JCQlpZiAoX19wdXRfdXNlcihyZXZlbnRzLAotCQkJCSAgICAgICAmZXZlbnRzW2V2ZW50Y250XS5ldmVudHMpIHx8Ci0JCQkgICAgX19wdXRfdXNlcihlcGktPmV2ZW50LmRhdGEsCi0JCQkJICAgICAgICZldmVudHNbZXZlbnRjbnRdLmRhdGEpKQotCQkJCWdvdG8gZXJyeGl0OworCQkJaWYgKF9fcHV0X3VzZXIocmV2ZW50cywgJnVldmVudC0+ZXZlbnRzKSB8fAorCQkJICAgIF9fcHV0X3VzZXIoZXBpLT5ldmVudC5kYXRhLCAmdWV2ZW50LT5kYXRhKSkgeworCQkJCWxpc3RfYWRkKCZlcGktPnJkbGxpbmssIGhlYWQpOworCQkJCXJldHVybiBldmVudGNudCA/IGV2ZW50Y250IDogLUVGQVVMVDsKKwkJCX0KKwkJCWV2ZW50Y250Kys7CisJCQl1ZXZlbnQrKzsKIAkJCWlmIChlcGktPmV2ZW50LmV2ZW50cyAmIEVQT0xMT05FU0hPVCkKIAkJCQllcGktPmV2ZW50LmV2ZW50cyAmPSBFUF9QUklWQVRFX0JJVFM7Ci0JCQlldmVudGNudCsrOworCQkJZWxzZSBpZiAoIShlcGktPmV2ZW50LmV2ZW50cyAmIEVQT0xMRVQpKSB7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGlzIGZpbGUgaGFzIGJlZW4gYWRkZWQgd2l0aCBMZXZlbAorCQkJCSAqIFRyaWdnZXIgbW9kZSwgd2UgbmVlZCB0byBpbnNlcnQgYmFjayBpbnNpZGUKKwkJCQkgKiB0aGUgcmVhZHkgbGlzdCwgc28gdGhhdCB0aGUgbmV4dCBjYWxsIHRvCisJCQkJICogZXBvbGxfd2FpdCgpIHdpbGwgY2hlY2sgYWdhaW4gdGhlIGV2ZW50cworCQkJCSAqIGF2YWlsYWJpbGl0eS4gQXQgdGhpcyBwb2ludCwgbm9vbmUgY2FuIGluc2VydAorCQkJCSAqIGludG8gZXAtPnJkbGxpc3QgYmVzaWRlcyB1cy4gVGhlIGVwb2xsX2N0bCgpCisJCQkJICogY2FsbGVycyBhcmUgbG9ja2VkIG91dCBieQorCQkJCSAqIGVwX3NjYW5fcmVhZHlfbGlzdCgpIGhvbGRpbmcgIm10eCIgYW5kIHRoZQorCQkJCSAqIHBvbGwgY2FsbGJhY2sgd2lsbCBxdWV1ZSB0aGVtIGluIGVwLT5vdmZsaXN0LgorCQkJCSAqLworCQkJCWxpc3RfYWRkX3RhaWwoJmVwaS0+cmRsbGluaywgJmVwLT5yZGxsaXN0KTsKKwkJCX0KIAkJfQotCQkvKgotCQkgKiBBdCB0aGlzIHBvaW50LCBub29uZSBjYW4gaW5zZXJ0IGludG8gZXAtPnJkbGxpc3QgYmVzaWRlcwotCQkgKiB1cy4gVGhlIGVwb2xsX2N0bCgpIGNhbGxlcnMgYXJlIGxvY2tlZCBvdXQgYnkgdXMgaG9sZGluZwotCQkgKiAibXR4IiBhbmQgdGhlIHBvbGwgY2FsbGJhY2sgd2lsbCBxdWV1ZSB0aGVtIGluIGVwLT5vdmZsaXN0LgotCQkgKi8KLQkJaWYgKCEoZXBpLT5ldmVudC5ldmVudHMgJiBFUE9MTEVUKSAmJgotCQkgICAgKHJldmVudHMgJiBlcGktPmV2ZW50LmV2ZW50cykpCi0JCQlsaXN0X2FkZF90YWlsKCZlcGktPnJkbGxpbmssICZlcC0+cmRsbGlzdCk7CiAJfQotCWVycm9yID0gMDsKIAotZXJyeGl0OgorCXJldHVybiBldmVudGNudDsKK30KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOwotCS8qCi0JICogRHVyaW5nIHRoZSB0aW1lIHdlIHNwZW50IGluIHRoZSBsb29wIGFib3ZlLCBzb21lIG90aGVyIGV2ZW50cwotCSAqIG1pZ2h0IGhhdmUgYmVlbiBxdWV1ZWQgYnkgdGhlIHBvbGwgY2FsbGJhY2suIFdlIHJlLWluc2VydCB0aGVtCi0JICogaW5zaWRlIHRoZSBtYWluIHJlYWR5LWxpc3QgaGVyZS4KLQkgKi8KLQlmb3IgKG5lcGkgPSBlcC0+b3ZmbGlzdDsgKGVwaSA9IG5lcGkpICE9IE5VTEw7Ci0JICAgICBuZXBpID0gZXBpLT5uZXh0LCBlcGktPm5leHQgPSBFUF9VTkFDVElWRV9QVFIpIHsKLQkJLyoKLQkJICogSWYgdGhlIGFib3ZlIGxvb3AgcXVpdCB3aXRoIGVycm9ycywgdGhlIGVwb2xsIGl0ZW0gbWlnaHQgc3RpbGwKLQkJICogYmUgbGlua2VkIHRvICJ0eGxpc3QiLCBhbmQgdGhlIGxpc3Rfc3BsaWNlKCkgZG9uZSBiZWxvdyB3aWxsCi0JCSAqIHRha2UgY2FyZSBvZiB0aG9zZSBjYXNlcy4KLQkJICovCi0JCWlmICghZXBfaXNfbGlua2VkKCZlcGktPnJkbGxpbmspKQotCQkJbGlzdF9hZGRfdGFpbCgmZXBpLT5yZGxsaW5rLCAmZXAtPnJkbGxpc3QpOwotCX0KLQkvKgotCSAqIFdlIG5lZWQgdG8gc2V0IGJhY2sgZXAtPm92Zmxpc3QgdG8gRVBfVU5BQ1RJVkVfUFRSLCBzbyB0aGF0IGFmdGVyCi0JICogcmVsZWFzaW5nIHRoZSBsb2NrLCBldmVudHMgd2lsbCBiZSBxdWV1ZWQgaW4gdGhlIG5vcm1hbCB3YXkgaW5zaWRlCi0JICogZXAtPnJkbGxpc3QuCi0JICovCi0JZXAtPm92Zmxpc3QgPSBFUF9VTkFDVElWRV9QVFI7CitzdGF0aWMgaW50IGVwX3NlbmRfZXZlbnRzKHN0cnVjdCBldmVudHBvbGwgKmVwLAorCQkJICBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsIGludCBtYXhldmVudHMpCit7CisJc3RydWN0IGVwX3NlbmRfZXZlbnRzX2RhdGEgZXNlZDsKIAotCS8qCi0JICogSW4gY2FzZSBvZiBlcnJvciBpbiB0aGUgZXZlbnQtc2VuZCBsb29wLCBvciBpbiBjYXNlIHRoZSBudW1iZXIgb2YKLQkgKiByZWFkeSBldmVudHMgZXhjZWVkcyB0aGUgdXNlcnNwYWNlIGxpbWl0LCB3ZSBuZWVkIHRvIHNwbGljZSB0aGUKLQkgKiAidHhsaXN0IiBiYWNrIGluc2lkZSBlcC0+cmRsbGlzdC4KLQkgKi8KLQlsaXN0X3NwbGljZSgmdHhsaXN0LCAmZXAtPnJkbGxpc3QpOworCWVzZWQubWF4ZXZlbnRzID0gbWF4ZXZlbnRzOworCWVzZWQuZXZlbnRzID0gZXZlbnRzOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZlcC0+cmRsbGlzdCkpIHsKLQkJLyoKLQkJICogV2FrZSB1cCAoaWYgYWN0aXZlKSBib3RoIHRoZSBldmVudHBvbGwgd2FpdCBsaXN0IGFuZCB0aGUgLT5wb2xsKCkKLQkJICogd2FpdCBsaXN0IChkZWxheWVkIGFmdGVyIHdlIHJlbGVhc2UgdGhlIGxvY2spLgotCQkgKi8KLQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmVwLT53cSkpCi0JCQl3YWtlX3VwX2xvY2tlZCgmZXAtPndxKTsKLQkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmVwLT5wb2xsX3dhaXQpKQotCQkJcHdha2UrKzsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKLQotCW11dGV4X3VubG9jaygmZXAtPm10eCk7Ci0KLQkvKiBXZSBoYXZlIHRvIGNhbGwgdGhpcyBvdXRzaWRlIHRoZSBsb2NrICovCi0JaWYgKHB3YWtlKQotCQllcF9wb2xsX3NhZmV3YWtlKCZwc3csICZlcC0+cG9sbF93YWl0KTsKLQotCXJldHVybiBldmVudGNudCA9PSAwID8gZXJyb3I6IGV2ZW50Y250OworCXJldHVybiBlcF9zY2FuX3JlYWR5X2xpc3QoZXAsIGVwX3NlbmRfZXZlbnRzX3Byb2MsICZlc2VkKTsKIH0KIAogc3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsCkBAIC0xMDMzLDcgKzExMTksNyBAQAogCXdhaXRfcXVldWVfdCB3YWl0OwogCiAJLyoKLQkgKiBDYWxjdWxhdGUgdGhlIHRpbWVvdXQgYnkgY2hlY2tpbmcgZm9yIHRoZSAiaW5maW5pdGUiIHZhbHVlICggLTEgKQorCSAqIENhbGN1bGF0ZSB0aGUgdGltZW91dCBieSBjaGVja2luZyBmb3IgdGhlICJpbmZpbml0ZSIgdmFsdWUgKC0xKQogCSAqIGFuZCB0aGUgb3ZlcmZsb3cgY29uZGl0aW9uLiBUaGUgcGFzc2VkIHRpbWVvdXQgaXMgaW4gbWlsbGlzZWNvbmRzLAogCSAqIHRoYXQgd2h5ICh0ICogSFopIC8gMTAwMC4KIAkgKi8KQEAgLTEwNzYsOSArMTE2Miw4IEBACiAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAl9Ci0KIAkvKiBJcyBpdCB3b3J0aCB0byB0cnkgdG8gZGlnIGZvciBldmVudHMgPyAqLwotCWVhdmFpbCA9ICFsaXN0X2VtcHR5KCZlcC0+cmRsbGlzdCk7CisJZWF2YWlsID0gIWxpc3RfZW1wdHkoJmVwLT5yZGxsaXN0KSB8fCBlcC0+b3ZmbGlzdCAhPSBFUF9VTkFDVElWRV9QVFI7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwogCkBAIC0xMDk5LDQxICsxMTg0LDMwIEBACiAgKi8KIFNZU0NBTExfREVGSU5FMShlcG9sbF9jcmVhdGUxLCBpbnQsIGZsYWdzKQogewotCWludCBlcnJvciwgZmQgPSAtMTsKLQlzdHJ1Y3QgZXZlbnRwb2xsICplcDsKKwlpbnQgZXJyb3I7CisJc3RydWN0IGV2ZW50cG9sbCAqZXAgPSBOVUxMOwogCiAJLyogQ2hlY2sgdGhlIEVQT0xMXyogY29uc3RhbnQgZm9yIGNvbnNpc3RlbmN5LiAgKi8KIAlCVUlMRF9CVUdfT04oRVBPTExfQ0xPRVhFQyAhPSBPX0NMT0VYRUMpOwogCiAJaWYgKGZsYWdzICYgfkVQT0xMX0NMT0VYRUMpCiAJCXJldHVybiAtRUlOVkFMOwotCi0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IHN5c19lcG9sbF9jcmVhdGUoJWQpXG4iLAotCQkgICAgIGN1cnJlbnQsIGZsYWdzKSk7Ci0KIAkvKgotCSAqIENyZWF0ZSB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgKCAic3RydWN0IGV2ZW50cG9sbCIgKS4KKwkgKiBDcmVhdGUgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlICgic3RydWN0IGV2ZW50cG9sbCIpLgogCSAqLwogCWVycm9yID0gZXBfYWxsb2MoJmVwKTsKLQlpZiAoZXJyb3IgPCAwKSB7Ci0JCWZkID0gZXJyb3I7Ci0JCWdvdG8gZXJyb3JfcmV0dXJuOwotCX0KLQorCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAkvKgogCSAqIENyZWF0ZXMgYWxsIHRoZSBpdGVtcyBuZWVkZWQgdG8gc2V0dXAgYW4gZXZlbnRwb2xsIGZpbGUuIFRoYXQgaXMsCiAJICogYSBmaWxlIHN0cnVjdHVyZSBhbmQgYSBmcmVlIGZpbGUgZGVzY3JpcHRvci4KIAkgKi8KLQlmZCA9IGFub25faW5vZGVfZ2V0ZmQoIltldmVudHBvbGxdIiwgJmV2ZW50cG9sbF9mb3BzLCBlcCwKLQkJCSAgICAgIGZsYWdzICYgT19DTE9FWEVDKTsKLQlpZiAoZmQgPCAwKQorCWVycm9yID0gYW5vbl9pbm9kZV9nZXRmZCgiW2V2ZW50cG9sbF0iLCAmZXZlbnRwb2xsX2ZvcHMsIGVwLAorCQkJCSBmbGFncyAmIE9fQ0xPRVhFQyk7CisJaWYgKGVycm9yIDwgMCkKIAkJZXBfZnJlZShlcCk7CiAKLWVycm9yX3JldHVybjoKLQlETlBSSU5USygzLCAoS0VSTl9JTkZPICJbJXBdIGV2ZW50cG9sbDogc3lzX2Vwb2xsX2NyZWF0ZSglZCkgPSAlZFxuIiwKLQkJICAgICBjdXJyZW50LCBmbGFncywgZmQpKTsKLQotCXJldHVybiBmZDsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIFNZU0NBTExfREVGSU5FMShlcG9sbF9jcmVhdGUsIGludCwgc2l6ZSkKQEAgLTExNTgsOSArMTIzMiw2IEBACiAJc3RydWN0IGVwaXRlbSAqZXBpOwogCXN0cnVjdCBlcG9sbF9ldmVudCBlcGRzOwogCi0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IHN5c19lcG9sbF9jdGwoJWQsICVkLCAlZCwgJXApXG4iLAotCQkgICAgIGN1cnJlbnQsIGVwZmQsIG9wLCBmZCwgZXZlbnQpKTsKLQogCWVycm9yID0gLUVGQVVMVDsKIAlpZiAoZXBfb3BfaGFzX2V2ZW50KG9wKSAmJgogCSAgICBjb3B5X2Zyb21fdXNlcigmZXBkcywgZXZlbnQsIHNpemVvZihzdHJ1Y3QgZXBvbGxfZXZlbnQpKSkKQEAgLTEyMTEsNyArMTI4Miw2IEBACiAJY2FzZSBFUE9MTF9DVExfQUREOgogCQlpZiAoIWVwaSkgewogCQkJZXBkcy5ldmVudHMgfD0gUE9MTEVSUiB8IFBPTExIVVA7Ci0KIAkJCWVycm9yID0gZXBfaW5zZXJ0KGVwLCAmZXBkcywgdGZpbGUsIGZkKTsKIAkJfSBlbHNlCiAJCQllcnJvciA9IC1FRVhJU1Q7CkBAIC0xMjM3LDggKzEzMDcsNiBAQAogZXJyb3JfZnB1dDoKIAlmcHV0KGZpbGUpOwogZXJyb3JfcmV0dXJuOgotCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBzeXNfZXBvbGxfY3RsKCVkLCAlZCwgJWQsICVwKSA9ICVkXG4iLAotCQkgICAgIGN1cnJlbnQsIGVwZmQsIG9wLCBmZCwgZXZlbnQsIGVycm9yKSk7CiAKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0xMjU0LDkgKzEzMjIsNiBAQAogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBldmVudHBvbGwgKmVwOwogCi0JRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IHN5c19lcG9sbF93YWl0KCVkLCAlcCwgJWQsICVkKVxuIiwKLQkJICAgICBjdXJyZW50LCBlcGZkLCBldmVudHMsIG1heGV2ZW50cywgdGltZW91dCkpOwotCiAJLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGV2ZW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8gKi8KIAlpZiAobWF4ZXZlbnRzIDw9IDAgfHwgbWF4ZXZlbnRzID4gRVBfTUFYX0VWRU5UUykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjkzLDggKzEzNTgsNiBAQAogZXJyb3JfZnB1dDoKIAlmcHV0KGZpbGUpOwogZXJyb3JfcmV0dXJuOgotCUROUFJJTlRLKDMsIChLRVJOX0lORk8gIlslcF0gZXZlbnRwb2xsOiBzeXNfZXBvbGxfd2FpdCglZCwgJXAsICVkLCAlZCkgPSAlZFxuIiwKLQkJICAgICBjdXJyZW50LCBlcGZkLCBldmVudHMsIG1heGV2ZW50cywgdGltZW91dCwgZXJyb3IpKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTEzNTksMTcgKzE0MjIsMTggQEAKIAkJRVBfSVRFTV9DT1NUOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlIHVzZWQgdG8gcGVyZm9ybSBzYWZlIHBvbGwgd2FpdCBoZWFkIHdha2UgdXBzICovCi0JZXBfcG9sbF9zYWZld2FrZV9pbml0KCZwc3cpOworCWVwX25lc3RlZF9jYWxsc19pbml0KCZwb2xsX3NhZmV3YWtlX25jYWxscyk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmUgdXNlZCB0byBwZXJmb3JtIGZpbGUncyBmX29wLT5wb2xsKCkgY2FsbHMgKi8KKwllcF9uZXN0ZWRfY2FsbHNfaW5pdCgmcG9sbF9yZWFkeXdhbGtfbmNhbGxzKTsKIAogCS8qIEFsbG9jYXRlcyBzbGFiIGNhY2hlIHVzZWQgdG8gYWxsb2NhdGUgInN0cnVjdCBlcGl0ZW0iIGl0ZW1zICovCiAJZXBpX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImV2ZW50cG9sbF9lcGkiLCBzaXplb2Yoc3RydWN0IGVwaXRlbSksCi0JCQkwLCBTTEFCX0hXQ0FDSEVfQUxJR058RVBJX1NMQUJfREVCVUd8U0xBQl9QQU5JQywKLQkJCU5VTEwpOworCQkJMCwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQywgTlVMTCk7CiAKIAkvKiBBbGxvY2F0ZXMgc2xhYiBjYWNoZSB1c2VkIHRvIGFsbG9jYXRlICJzdHJ1Y3QgZXBwb2xsX2VudHJ5IiAqLwogCXB3cV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJldmVudHBvbGxfcHdxIiwKLQkJCXNpemVvZihzdHJ1Y3QgZXBwb2xsX2VudHJ5KSwgMCwKLQkJCUVQSV9TTEFCX0RFQlVHfFNMQUJfUEFOSUMsIE5VTEwpOworCQkJc2l6ZW9mKHN0cnVjdCBlcHBvbGxfZW50cnkpLCAwLCBTTEFCX1BBTklDLCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IGM1MTI4ZmIuLjA1MmE5NjEgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CkBAIC0xMDU2LDI4ICsxMDU3LDM1IEBACiAgKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIGN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCB0byBwcm90ZWN0IGFnYWluc3QKICAqICAgUFRSQUNFX0FUVEFDSAogICovCi12b2lkIGNoZWNrX3Vuc2FmZV9leGVjKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCitpbnQgY2hlY2tfdW5zYWZlX2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjdXJyZW50LCAqdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIG5fZnMsIG5fc2lnaGFuZDsKKwl1bnNpZ25lZCBuX2ZzOworCWludCByZXMgPSAwOwogCiAJYnBybS0+dW5zYWZlID0gdHJhY2Vob29rX3Vuc2FmZV9leGVjKHApOwogCiAJbl9mcyA9IDE7Ci0Jbl9zaWdoYW5kID0gMTsKKwl3cml0ZV9sb2NrKCZwLT5mcy0+bG9jayk7CiAJbG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKTsKIAlmb3IgKHQgPSBuZXh0X3RocmVhZChwKTsgdCAhPSBwOyB0ID0gbmV4dF90aHJlYWQodCkpIHsKIAkJaWYgKHQtPmZzID09IHAtPmZzKQogCQkJbl9mcysrOwotCQluX3NpZ2hhbmQrKzsKIAl9CiAKLQlpZiAoYXRvbWljX3JlYWQoJnAtPmZzLT5jb3VudCkgPiBuX2ZzIHx8Ci0JICAgIGF0b21pY19yZWFkKCZwLT5zaWdoYW5kLT5jb3VudCkgPiBuX3NpZ2hhbmQpCisJaWYgKHAtPmZzLT51c2VycyA+IG5fZnMpIHsKIAkJYnBybS0+dW5zYWZlIHw9IExTTV9VTlNBRkVfU0hBUkU7CisJfSBlbHNlIHsKKwkJaWYgKHAtPmZzLT5pbl9leGVjKQorCQkJcmVzID0gLUVBR0FJTjsKKwkJcC0+ZnMtPmluX2V4ZWMgPSAxOworCX0KIAogCXVubG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKTsKKwl3cml0ZV91bmxvY2soJnAtPmZzLT5sb2NrKTsKKworCXJldHVybiByZXM7CiB9CiAKIC8qIApAQCAtMTI5NiwxMiArMTMwNCwxNSBAQAogCWJwcm0tPmNyZWQgPSBwcmVwYXJlX2V4ZWNfY3JlZHMoKTsKIAlpZiAoIWJwcm0tPmNyZWQpCiAJCWdvdG8gb3V0X3VubG9jazsKLQljaGVja191bnNhZmVfZXhlYyhicHJtKTsKKworCXJldHZhbCA9IGNoZWNrX3Vuc2FmZV9leGVjKGJwcm0pOworCWlmIChyZXR2YWwpCisJCWdvdG8gb3V0X3VubG9jazsKIAogCWZpbGUgPSBvcGVuX2V4ZWMoZmlsZW5hbWUpOwogCXJldHZhbCA9IFBUUl9FUlIoZmlsZSk7CiAJaWYgKElTX0VSUihmaWxlKSkKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF91bm1hcms7CiAKIAlzY2hlZF9leGVjKCk7CiAKQEAgLTEzNDQsNiArMTM1NSw5IEBACiAJCWdvdG8gb3V0OwogCiAJLyogZXhlY3ZlIHN1Y2NlZWRlZCAqLworCXdyaXRlX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwljdXJyZW50LT5mcy0+aW5fZXhlYyA9IDA7CisJd3JpdGVfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CiAJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAJYWNjdF91cGRhdGVfaW50ZWdyYWxzKGN1cnJlbnQpOwpAQCAtMTM2Miw2ICsxMzc2LDExIEBACiAJCWZwdXQoYnBybS0+ZmlsZSk7CiAJfQogCitvdXRfdW5tYXJrOgorCXdyaXRlX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwljdXJyZW50LT5mcy0+aW5fZXhlYyA9IDA7CisJd3JpdGVfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisKIG91dF91bmxvY2s6CiAJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9leG9mcy9CVUdTIGIvZnMvZXhvZnMvQlVHUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjJkNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZXhvZnMvQlVHUwpAQCAtMCwwICsxLDMgQEAKKy0gT3V0LW9mLXNwYWNlIG1heSBjYXVzZSBhIHNldmVyZSBwcm9ibGVtIGlmIHRoZSBvYmplY3QgKGFuZCBkaXJlY3RvcnkgZW50cnkpCisgIHdlcmUgd3JpdHRlbiwgYnV0IHRoZSBpbm9kZSBhdHRyaWJ1dGVzIGZhaWxlZC4gVGhlbiBpZiB0aGUgZmlsZXN5c3RlbSB3YXMKKyAgdW5tb3VudGVkIGFuZCBtb3VudGVkIHRoZSBrZXJuZWwgY2FuIGdldCBpbnRvIGFuIGVuZGxlc3MgbG9vcCBkb2luZyBhIHJlYWRkaXIuCmRpZmYgLS1naXQgYS9mcy9leG9mcy9LYnVpbGQgYi9mcy9leG9mcy9LYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyZDIyZAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2V4b2ZzL0tidWlsZApAQCAtMCwwICsxLDE2IEBACisjCisjIEtidWlsZCBmb3IgdGhlIEVYT0ZTIG1vZHVsZQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDggUGFuYXNhcyBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBBdXRob3JzOgorIyAgIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisjCisjIEtidWlsZCAtIEdldHMgaW5jbHVkZWQgZnJvbSB0aGUgS2VybmVscyBNYWtlZmlsZSBhbmQgYnVpbGQgc3lzdGVtCisjCisKK2V4b2ZzLXkgOj0gb3NkLm8gaW5vZGUubyBmaWxlLm8gc3ltbGluay5vIG5hbWVpLm8gZGlyLm8gc3VwZXIubworb2JqLSQoQ09ORklHX0VYT0ZTX0ZTKSArPSBleG9mcy5vCmRpZmYgLS1naXQgYS9mcy9leG9mcy9LY29uZmlnIGIvZnMvZXhvZnMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjE5NGIyCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZXhvZnMvS2NvbmZpZwpAQCAtMCwwICsxLDEzIEBACitjb25maWcgRVhPRlNfRlMKKwl0cmlzdGF0ZSAiZXhvZnM6IE9TRCBiYXNlZCBmaWxlIHN5c3RlbSBzdXBwb3J0IgorCWRlcGVuZHMgb24gU0NTSV9PU0RfVUxECisJaGVscAorCSAgRVhPRlMgaXMgYSBmaWxlIHN5c3RlbSB0aGF0IHVzZXMgYW4gT1NEIHN0b3JhZ2UgZGV2aWNlLAorCSAgYXMgaXRzIGJhY2tpbmcgc3RvcmFnZS4KKworIyBEZWJ1Z2dpbmctcmVsYXRlZCBzdHVmZgorY29uZmlnIEVYT0ZTX0RFQlVHCisJYm9vbCAiRW5hYmxlIGRlYnVnZ2luZyIKKwlkZXBlbmRzIG9uIEVYT0ZTX0ZTCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBFWE9GUyBkZWJ1ZyBwcmludHMuCmRpZmYgLS1naXQgYS9mcy9leG9mcy9jb21tb24uaCBiL2ZzL2V4b2ZzL2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNTEyYzQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9jb21tb24uaApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIGNvbW1vbi5oIC0gQ29tbW9uIGRlZmluaXRpb25zIGZvciBib3RoIEtlcm5lbCBhbmQgdXNlci1tb2RlIHV0aWxpdGllcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogQXZpc2hheSBUcmFlZ2VyIChhdmlzaGF5QGdtYWlsLmNvbSkgKGF2aXNoYXlAaWwuaWJtLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIENvcHlyaWdodHMgZm9yIGNvZGUgdGFrZW4gZnJvbSBleHQyOgorICogICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogICAgIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqICAgICBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqICAgICBmcm9tCisgKiAgICAgbGludXgvZnMvbWluaXgvaW5vZGUuYworICogICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBfX0VYT0ZTX0NPTV9IX18KKyNkZWZpbmUgX19FWE9GU19DT01fSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8c2NzaS9vc2RfYXR0cmlidXRlcy5oPgorI2luY2x1ZGUgPHNjc2kvb3NkX2luaXRpYXRvci5oPgorI2luY2x1ZGUgPHNjc2kvb3NkX3NlYy5oPgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogT2JqZWN0IElEIHJlbGF0ZWQgZGVmaW5lcworICogTk9URTogaW5vZGUjID0gb2JqZWN0IElEIC0gRVhPRlNfT0JKX09GRgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEVYT0ZTX01JTl9QSUQgICAweDEwMDAwCS8qIFNtYWxsZXN0IHBhcnRpdGlvbiBJRCAqLworI2RlZmluZSBFWE9GU19PQkpfT0ZGCTB4MTAwMDAJLyogb2Zmc2V0IGZvciBvYmplY3RzICovCisjZGVmaW5lIEVYT0ZTX1NVUEVSX0lECTB4MTAwMDAJLyogb2JqZWN0IElEIGZvciBvbi1kaXNrIHN1cGVyYmxvY2sgKi8KKyNkZWZpbmUgRVhPRlNfUk9PVF9JRAkweDEwMDAyCS8qIG9iamVjdCBJRCBmb3Igcm9vdCBkaXJlY3RvcnkgKi8KKworLyogZXhvZnMgQXBwbGljYXRpb24gc3BlY2lmaWMgcGFnZS9hdHRyaWJ1dGUgKi8KKyMgZGVmaW5lIEVYT0ZTX0FQQUdFX0ZTX0RBVEEJKE9TRF9BUEFHRV9BUFBfREVGSU5FRF9GSVJTVCArIDMpCisjIGRlZmluZSBFWE9GU19BVFRSX0lOT0RFX0RBVEEJMQorCisvKgorICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHdlIGNhbiBoYXZlIGlzIGxpbWl0ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisgKiBpbm9kZSBudW1iZXIuICBUaGlzIGlzIHRoZSBsYXJnZXN0IG9iamVjdCBJRCB0aGF0IHRoZSBmaWxlIHN5c3RlbSBzdXBwb3J0cy4KKyAqIE9iamVjdCBJRHMgMCwgMSwgYW5kIDIgYXJlIGFsd2F5cyBpbiB1c2UgKHNlZSBhYm92ZSBkZWZpbmVzKS4KKyAqLworZW51bSB7CisJRVhPRlNfTUFYX0lOT19JRCA9IChzaXplb2YoaW5vX3QpICogOCA9PSA2NCkgPyBVTExPTkdfTUFYIDoKKwkJCQkJKDFVTEwgPDwgKHNpemVvZihpbm9fdCkgKiA4VUxMIC0gMVVMTCkpLAorCUVYT0ZTX01BWF9JRAkgPSAoRVhPRlNfTUFYX0lOT19JRCAtIDEgLSBFWE9GU19PQkpfT0ZGKSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNaXNjLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEVYT0ZTX0JMS1NISUZUCTEyCisjZGVmaW5lIEVYT0ZTX0JMS1NJWkUJKDFVTCA8PCBFWE9GU19CTEtTSElGVCkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN1cGVyYmxvY2stcmVsYXRlZCB0aGluZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBFWE9GU19TVVBFUl9NQUdJQwkweDVERjUKKworLyoKKyAqIFRoZSBmaWxlIHN5c3RlbSBjb250cm9sIGJsb2NrIC0gc3RvcmVkIGluIGFuIG9iamVjdCdzIGRhdGEgKG1haW5seSwgdGhlIG9uZQorICogd2l0aCBJRCBFWE9GU19TVVBFUl9JRCkuICBUaGlzIGlzIHdoZXJlIHRoZSBpbi1tZW1vcnkgc3VwZXJibG9jayBpcyBzdG9yZWQKKyAqIG9uIGRpc2suICBSaWdodCBub3cgaXQganVzdCBoYXMgYSBtYWdpYyB2YWx1ZSwgd2hpY2ggaXMgYmFzaWNhbGx5IGEgc2FuaXR5CisgKiBjaGVjayBvbiBvdXIgYWJpbGl0eSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBvYmplY3Qgc3RvcmUuCisgKi8KK3N0cnVjdCBleG9mc19mc2NiIHsKKwlfX2xlNjQgIHNfbmV4dGlkOwkvKiBIaWdoZXN0IG9iamVjdCBJRCB1c2VkICovCisJX19sZTMyICBzX251bWZpbGVzOwkvKiBOdW1iZXIgb2YgZmlsZXMgb24gZnMgKi8KKwlfX2xlMTYgIHNfbWFnaWM7CS8qIE1hZ2ljIHNpZ25hdHVyZSAqLworCV9fbGUxNiAgc19uZXdmczsJLyogTm9uLXplcm8gaWYgdGhpcyBpcyBhIG5ldyBmcyAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlub2RlLXJlbGF0ZWQgdGhpbmdzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgRVhPRlNfSURBVEEJCTUKKworLyoKKyAqIFRoZSBmaWxlIGNvbnRyb2wgYmxvY2sgLSBzdG9yZWQgaW4gYW4gb2JqZWN0J3MgYXR0cmlidXRlcy4gIFRoaXMgaXMgd2hlcmUKKyAqIHRoZSBpbi1tZW1vcnkgaW5vZGUgaXMgc3RvcmVkIG9uIGRpc2suCisgKi8KK3N0cnVjdCBleG9mc19mY2IgeworCV9fbGU2NCAgaV9zaXplOwkJCS8qIFNpemUgb2YgdGhlIGZpbGUgKi8KKwlfX2xlMTYgIGlfbW9kZTsgICAgICAgICAJLyogRmlsZSBtb2RlICovCisJX19sZTE2ICBpX2xpbmtzX2NvdW50OyAgCS8qIExpbmtzIGNvdW50ICovCisJX19sZTMyICBpX3VpZDsgICAgICAgICAgCS8qIE93bmVyIFVpZCAqLworCV9fbGUzMiAgaV9naWQ7ICAgICAgICAgIAkvKiBHcm91cCBJZCAqLworCV9fbGUzMiAgaV9hdGltZTsgICAgICAgIAkvKiBBY2Nlc3MgdGltZSAqLworCV9fbGUzMiAgaV9jdGltZTsgICAgICAgIAkvKiBDcmVhdGlvbiB0aW1lICovCisJX19sZTMyICBpX210aW1lOyAgICAgICAgCS8qIE1vZGlmaWNhdGlvbiB0aW1lICovCisJX19sZTMyICBpX2ZsYWdzOyAgICAgICAgCS8qIEZpbGUgZmxhZ3MgKHVudXNlZCBmb3Igbm93KSovCisJX19sZTMyICBpX2dlbmVyYXRpb247ICAgCS8qIEZpbGUgdmVyc2lvbiAoZm9yIE5GUykgKi8KKwlfX2xlMzIgIGlfZGF0YVtFWE9GU19JREFUQV07CS8qIFNob3J0IHN5bWxpbmsgbmFtZXMgYW5kIGRldmljZSAjcyAqLworfTsKKworI2RlZmluZSBFWE9GU19JTk9fQVRUUl9TSVpFCXNpemVvZihzdHJ1Y3QgZXhvZnNfZmNiKQorCisvKiBUaGlzIGlzIHRoZSBBdHRyaWJ1dGUgdGhlIGZjYiBpcyBzdG9yZWQgaW4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX193ZWFrIG9zZF9hdHRyIGdfYXR0cl9pbm9kZV9kYXRhID0gQVRUUl9ERUYoCisJRVhPRlNfQVBBR0VfRlNfREFUQSwKKwlFWE9GU19BVFRSX0lOT0RFX0RBVEEsCisJRVhPRlNfSU5PX0FUVFJfU0laRSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBkZW50cnktcmVsYXRlZCB0aGluZ3MKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBFWE9GU19OQU1FX0xFTgkyNTUKKworLyoKKyAqIFRoZSBvbi1kaXNrIGRpcmVjdG9yeSBlbnRyeQorICovCitzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5IHsKKwlfX2xlNjQJCWlub2RlX25vOwkJLyogaW5vZGUgbnVtYmVyICAgICAgICAgICAqLworCV9fbGUxNgkJcmVjX2xlbjsJCS8qIGRpcmVjdG9yeSBlbnRyeSBsZW5ndGggKi8KKwl1OAkJbmFtZV9sZW47CQkvKiBuYW1lIGxlbmd0aCAgICAgICAgICAgICovCisJdTgJCWZpbGVfdHlwZTsJCS8qIHVtbS4uLmZpbGUgdHlwZSAgICAgICAgKi8KKwljaGFyCQluYW1lW0VYT0ZTX05BTUVfTEVOXTsJLyogZmlsZSBuYW1lICAgICAgICAgICAgICAqLworfTsKKworZW51bSB7CisJRVhPRlNfRlRfVU5LTk9XTiwKKwlFWE9GU19GVF9SRUdfRklMRSwKKwlFWE9GU19GVF9ESVIsCisJRVhPRlNfRlRfQ0hSREVWLAorCUVYT0ZTX0ZUX0JMS0RFViwKKwlFWE9GU19GVF9GSUZPLAorCUVYT0ZTX0ZUX1NPQ0ssCisJRVhPRlNfRlRfU1lNTElOSywKKwlFWE9GU19GVF9NQVgKK307CisKKyNkZWZpbmUgRVhPRlNfRElSX1BBRAkJCTQKKyNkZWZpbmUgRVhPRlNfRElSX1JPVU5ECQkJKEVYT0ZTX0RJUl9QQUQgLSAxKQorI2RlZmluZSBFWE9GU19ESVJfUkVDX0xFTihuYW1lX2xlbikgXAorCSgoKG5hbWVfbGVuKSArIG9mZnNldG9mKHN0cnVjdCBleG9mc19kaXJfZW50cnksIG5hbWUpICArIFwKKwkgIEVYT0ZTX0RJUl9ST1VORCkgJiB+RVhPRlNfRElSX1JPVU5EKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZnVuY3Rpb24gZGVjbGFyYXRpb25zICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogb3NkLmMgICAgICAgICAgICAgICAgICovCit2b2lkIGV4b2ZzX21ha2VfY3JlZGVudGlhbCh1OCBjcmVkX2FbT1NEX0NBUF9MRU5dLAorCQkJICAgY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaik7CisKK2ludCBleG9mc19jaGVja19va19yZXNpZChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCB1NjQgKmluX3Jlc2lkLCB1NjQgKm91dF9yZXNpZCk7CitzdGF0aWMgaW5saW5lIGludCBleG9mc19jaGVja19vayhzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yKQoreworCXJldHVybiBleG9mc19jaGVja19va19yZXNpZChvciwgTlVMTCwgTlVMTCk7Cit9CitpbnQgZXhvZnNfc3luY19vcChzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBpbnQgdGltZW91dCwgdTggKmNyZWQpOworaW50IGV4b2ZzX2FzeW5jX29wKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJb3NkX3JlcV9kb25lX2ZuICphc3luY19kb25lLCB2b2lkICpjYWxsZXJfY29udGV4dCwgdTggKmNyZWQpOworCitpbnQgZXh0cmFjdF9hdHRyX2Zyb21fcmVxKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHN0cnVjdCBvc2RfYXR0ciAqYXR0cik7CisKK2ludCBvc2RfcmVxX3JlYWRfa2VybihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIHU2NCBvZmZzZXQsIHZvaWQgKmJ1ZmYsIHU2NCBsZW4pOworCitpbnQgb3NkX3JlcV93cml0ZV9rZXJuKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsCisJY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwgdTY0IG9mZnNldCwgdm9pZCAqYnVmZiwgdTY0IGxlbik7CisKKyNlbmRpZiAvKmlmbmRlZiBfX0VYT0ZTX0NPTV9IX18qLwpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvZGlyLmMgYi9mcy9leG9mcy9kaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWIwYzhjCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZXhvZnMvZGlyLmMKQEAgLTAsMCArMSw2NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYKKyAqIEF2aXNoYXkgVHJhZWdlciAoYXZpc2hheUBnbWFpbC5jb20pIChhdmlzaGF5QGlsLmlibS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYKKyAqIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOQorICogQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyAqCisgKiBDb3B5cmlnaHRzIGZvciBjb2RlIHRha2VuIGZyb20gZXh0MjoKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUKKyAqICAgICBSZW15IENhcmQgKGNhcmRAbWFzaS5pYnAuZnIpCisgKiAgICAgTGFib3JhdG9pcmUgTUFTSSAtIEluc3RpdHV0IEJsYWlzZSBQYXNjYWwKKyAqICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCisgKiAgICAgZnJvbQorICogICAgIGxpbnV4L2ZzL21pbml4L2lub2RlLmMKKyAqICAgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgZXhvZnMuCisgKgorICogZXhvZnMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBTaW5jZSBpdCBpcyBiYXNlZCBvbiBleHQyLCBhbmQgdGhlIG9ubHkKKyAqIHZhbGlkIHZlcnNpb24gb2YgR1BMIGZvciB0aGUgTGludXgga2VybmVsIGlzIHZlcnNpb24gMiwgdGhlIG9ubHkgdmFsaWQKKyAqIHZlcnNpb24gb2YgR1BMIGZvciBleG9mcyBpcyB2ZXJzaW9uIDIuCisgKgorICogZXhvZnMgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIGV4b2ZzOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJleG9mcy5oIgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGV4b2ZzX2NodW5rX3NpemUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXhvZnNfcHV0X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJa3VubWFwKHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKK30KKworLyogQWNjZXNzZXMgZGlyJ3MgaW5vZGUtPmlfc2l6ZSBtdXN0IGJlIGNhbGxlZCB1bmRlciBpbm9kZSBsb2NrICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZGlyX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIChpbm9kZS0+aV9zaXplICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGV4b2ZzX2xhc3RfYnl0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBsb25nIHBhZ2VfbnIpCit7CisJbG9mZl90IGxhc3RfYnl0ZSA9IGlub2RlLT5pX3NpemU7CisKKwlsYXN0X2J5dGUgLT0gcGFnZV9uciA8PCBQQUdFX0NBQ0hFX1NISUZUOworCWlmIChsYXN0X2J5dGUgPiBQQUdFX0NBQ0hFX1NJWkUpCisJCWxhc3RfYnl0ZSA9IFBBR0VfQ0FDSEVfU0laRTsKKwlyZXR1cm4gbGFzdF9ieXRlOworfQorCitzdGF0aWMgaW50IGV4b2ZzX2NvbW1pdF9jaHVuayhzdHJ1Y3QgcGFnZSAqcGFnZSwgbG9mZl90IHBvcywgdW5zaWduZWQgbGVuKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKwlzdHJ1Y3QgaW5vZGUgKmRpciA9IG1hcHBpbmctPmhvc3Q7CisJaW50IGVyciA9IDA7CisKKwlkaXItPmlfdmVyc2lvbisrOworCisJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpCisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKworCWlmIChwb3MrbGVuID4gZGlyLT5pX3NpemUpIHsKKwkJaV9zaXplX3dyaXRlKGRpciwgcG9zK2xlbik7CisJCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKKwl9CisJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisKKwlpZiAoSVNfRElSU1lOQyhkaXIpKQorCQllcnIgPSB3cml0ZV9vbmVfcGFnZShwYWdlLCAxKTsKKwllbHNlCisJCXVubG9ja19wYWdlKHBhZ2UpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgZXhvZnNfY2hlY2tfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmRpciA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJdW5zaWduZWQgY2h1bmtfc2l6ZSA9IGV4b2ZzX2NodW5rX3NpemUoZGlyKTsKKwljaGFyICprYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwl1bnNpZ25lZCBvZmZzLCByZWNfbGVuOworCXVuc2lnbmVkIGxpbWl0ID0gUEFHRV9DQUNIRV9TSVpFOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKnA7CisJY2hhciAqZXJyb3I7CisKKwkvKiBpZiB0aGUgcGFnZSBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIGRpcmVjdG9yeSAqLworCWlmICgoZGlyLT5pX3NpemUgPj4gUEFHRV9DQUNIRV9TSElGVCkgPT0gcGFnZS0+aW5kZXgpIHsKKwkJbGltaXQgPSBkaXItPmlfc2l6ZSAmIH5QQUdFX0NBQ0hFX01BU0s7CisJCWlmIChsaW1pdCAmIChjaHVua19zaXplIC0gMSkpCisJCQlnb3RvIEViYWRzaXplOworCQlpZiAoIWxpbWl0KQorCQkJZ290byBvdXQ7CisJfQorCWZvciAob2ZmcyA9IDA7IG9mZnMgPD0gbGltaXQgLSBFWE9GU19ESVJfUkVDX0xFTigxKTsgb2ZmcyArPSByZWNfbGVuKSB7CisJCXAgPSAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKShrYWRkciArIG9mZnMpOworCQlyZWNfbGVuID0gbGUxNl90b19jcHUocC0+cmVjX2xlbik7CisKKwkJaWYgKHJlY19sZW4gPCBFWE9GU19ESVJfUkVDX0xFTigxKSkKKwkJCWdvdG8gRXNob3J0OworCQlpZiAocmVjX2xlbiAmIDMpCisJCQlnb3RvIEVhbGlnbjsKKwkJaWYgKHJlY19sZW4gPCBFWE9GU19ESVJfUkVDX0xFTihwLT5uYW1lX2xlbikpCisJCQlnb3RvIEVuYW1lbGVuOworCQlpZiAoKChvZmZzICsgcmVjX2xlbiAtIDEpIF4gb2ZmcykgJiB+KGNodW5rX3NpemUtMSkpCisJCQlnb3RvIEVzcGFuOworCX0KKwlpZiAob2ZmcyAhPSBsaW1pdCkKKwkJZ290byBFZW5kOworb3V0OgorCVNldFBhZ2VDaGVja2VkKHBhZ2UpOworCXJldHVybjsKKworRWJhZHNpemU6CisJRVhPRlNfRVJSKCJFUlJPUiBbZXhvZnNfY2hlY2tfcGFnZV06ICIKKwkJInNpemUgb2YgZGlyZWN0b3J5ICMlbHUgaXMgbm90IGEgbXVsdGlwbGUgb2YgY2h1bmsgc2l6ZSIsCisJCWRpci0+aV9pbm8KKwkpOworCWdvdG8gZmFpbDsKK0VzaG9ydDoKKwllcnJvciA9ICJyZWNfbGVuIGlzIHNtYWxsZXIgdGhhbiBtaW5pbWFsIjsKKwlnb3RvIGJhZF9lbnRyeTsKK0VhbGlnbjoKKwllcnJvciA9ICJ1bmFsaWduZWQgZGlyZWN0b3J5IGVudHJ5IjsKKwlnb3RvIGJhZF9lbnRyeTsKK0VuYW1lbGVuOgorCWVycm9yID0gInJlY19sZW4gaXMgdG9vIHNtYWxsIGZvciBuYW1lX2xlbiI7CisJZ290byBiYWRfZW50cnk7CitFc3BhbjoKKwllcnJvciA9ICJkaXJlY3RvcnkgZW50cnkgYWNyb3NzIGJsb2NrcyI7CisJZ290byBiYWRfZW50cnk7CitiYWRfZW50cnk6CisJRVhPRlNfRVJSKAorCQkiRVJST1IgW2V4b2ZzX2NoZWNrX3BhZ2VdOiBiYWQgZW50cnkgaW4gZGlyZWN0b3J5ICMlbHU6ICVzIC0gIgorCQkib2Zmc2V0PSVsdSwgaW5vZGU9JWxsdSwgcmVjX2xlbj0lZCwgbmFtZV9sZW49JWQiLAorCQlkaXItPmlfaW5vLCBlcnJvciwgKHBhZ2UtPmluZGV4PDxQQUdFX0NBQ0hFX1NISUZUKStvZmZzLAorCQlfTExVKGxlNjRfdG9fY3B1KHAtPmlub2RlX25vKSksCisJCXJlY19sZW4sIHAtPm5hbWVfbGVuKTsKKwlnb3RvIGZhaWw7CitFZW5kOgorCXAgPSAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKShrYWRkciArIG9mZnMpOworCUVYT0ZTX0VSUigiRVJST1IgW2V4b2ZzX2NoZWNrX3BhZ2VdOiAiCisJCSJlbnRyeSBpbiBkaXJlY3RvcnkgIyVsdSBzcGFucyB0aGUgcGFnZSBib3VuZGFyeSIKKwkJIm9mZnNldD0lbHUsIGlub2RlPSVsbHUiLAorCQlkaXItPmlfaW5vLCAocGFnZS0+aW5kZXg8PFBBR0VfQ0FDSEVfU0hJRlQpK29mZnMsCisJCV9MTFUobGU2NF90b19jcHUocC0+aW5vZGVfbm8pKSk7CitmYWlsOgorCVNldFBhZ2VDaGVja2VkKHBhZ2UpOworCVNldFBhZ2VFcnJvcihwYWdlKTsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpleG9mc19nZXRfcGFnZShzdHJ1Y3QgaW5vZGUgKmRpciwgdW5zaWduZWQgbG9uZyBuKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZGlyLT5pX21hcHBpbmc7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBuLCBOVUxMKTsKKworCWlmICghSVNfRVJSKHBhZ2UpKSB7CisJCWttYXAocGFnZSk7CisJCWlmICghUGFnZUNoZWNrZWQocGFnZSkpCisJCQlleG9mc19jaGVja19wYWdlKHBhZ2UpOworCQlpZiAoUGFnZUVycm9yKHBhZ2UpKQorCQkJZ290byBmYWlsOworCX0KKwlyZXR1cm4gcGFnZTsKKworZmFpbDoKKwlleG9mc19wdXRfcGFnZShwYWdlKTsKKwlyZXR1cm4gRVJSX1BUUigtRUlPKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXhvZnNfbWF0Y2goaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKKwkJCQkJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGUpCit7CisJaWYgKGxlbiAhPSBkZS0+bmFtZV9sZW4pCisJCXJldHVybiAwOworCWlmICghZGUtPmlub2RlX25vKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gIW1lbWNtcChuYW1lLCBkZS0+bmFtZSwgbGVuKTsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZXhvZnNfbmV4dF9lbnRyeShzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpwKQoreworCXJldHVybiAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKSgoY2hhciAqKXAgKyBsZTE2X3RvX2NwdShwLT5yZWNfbGVuKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQKK2V4b2ZzX3ZhbGlkYXRlX2VudHJ5KGNoYXIgKmJhc2UsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbWFzaykKK3sKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZSA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopKGJhc2UgKyBvZmZzZXQpOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKnAgPQorCQkJKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKikoYmFzZSArIChvZmZzZXQmbWFzaykpOworCXdoaWxlICgoY2hhciAqKXAgPCAoY2hhciAqKWRlKSB7CisJCWlmIChwLT5yZWNfbGVuID09IDApCisJCQlicmVhazsKKwkJcCA9IGV4b2ZzX25leHRfZW50cnkocCk7CisJfQorCXJldHVybiAoY2hhciAqKXAgLSBiYXNlOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBleG9mc19maWxldHlwZV90YWJsZVtFWE9GU19GVF9NQVhdID0geworCVtFWE9GU19GVF9VTktOT1dOXQk9IERUX1VOS05PV04sCisJW0VYT0ZTX0ZUX1JFR19GSUxFXQk9IERUX1JFRywKKwlbRVhPRlNfRlRfRElSXQkJPSBEVF9ESVIsCisJW0VYT0ZTX0ZUX0NIUkRFVl0JPSBEVF9DSFIsCisJW0VYT0ZTX0ZUX0JMS0RFVl0JPSBEVF9CTEssCisJW0VYT0ZTX0ZUX0ZJRk9dCQk9IERUX0ZJRk8sCisJW0VYT0ZTX0ZUX1NPQ0tdCQk9IERUX1NPQ0ssCisJW0VYT0ZTX0ZUX1NZTUxJTktdCT0gRFRfTE5LLAorfTsKKworI2RlZmluZSBTX1NISUZUIDEyCitzdGF0aWMgdW5zaWduZWQgY2hhciBleG9mc190eXBlX2J5X21vZGVbU19JRk1UID4+IFNfU0hJRlRdID0geworCVtTX0lGUkVHID4+IFNfU0hJRlRdCT0gRVhPRlNfRlRfUkVHX0ZJTEUsCisJW1NfSUZESVIgPj4gU19TSElGVF0JPSBFWE9GU19GVF9ESVIsCisJW1NfSUZDSFIgPj4gU19TSElGVF0JPSBFWE9GU19GVF9DSFJERVYsCisJW1NfSUZCTEsgPj4gU19TSElGVF0JPSBFWE9GU19GVF9CTEtERVYsCisJW1NfSUZJRk8gPj4gU19TSElGVF0JPSBFWE9GU19GVF9GSUZPLAorCVtTX0lGU09DSyA+PiBTX1NISUZUXQk9IEVYT0ZTX0ZUX1NPQ0ssCisJW1NfSUZMTksgPj4gU19TSElGVF0JPSBFWE9GU19GVF9TWU1MSU5LLAorfTsKKworc3RhdGljIGlubGluZQordm9pZCBleG9mc19zZXRfZGVfdHlwZShzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwltb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CisJZGUtPmZpbGVfdHlwZSA9IGV4b2ZzX3R5cGVfYnlfbW9kZVsobW9kZSAmIFNfSUZNVCkgPj4gU19TSElGVF07Cit9CisKK3N0YXRpYyBpbnQKK2V4b2ZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCit7CisJbG9mZl90IHBvcyA9IGZpbHAtPmZfcG9zOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCXVuc2lnbmVkIGludCBvZmZzZXQgPSBwb3MgJiB+UEFHRV9DQUNIRV9NQVNLOworCXVuc2lnbmVkIGxvbmcgbiA9IHBvcyA+PiBQQUdFX0NBQ0hFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gZGlyX3BhZ2VzKGlub2RlKTsKKwl1bnNpZ25lZCBjaHVua19tYXNrID0gfihleG9mc19jaHVua19zaXplKGlub2RlKS0xKTsKKwl1bnNpZ25lZCBjaGFyICp0eXBlcyA9IE5VTEw7CisJaW50IG5lZWRfcmV2YWxpZGF0ZSA9IChmaWxwLT5mX3ZlcnNpb24gIT0gaW5vZGUtPmlfdmVyc2lvbik7CisKKwlpZiAocG9zID4gaW5vZGUtPmlfc2l6ZSAtIEVYT0ZTX0RJUl9SRUNfTEVOKDEpKQorCQlyZXR1cm4gMDsKKworCXR5cGVzID0gZXhvZnNfZmlsZXR5cGVfdGFibGU7CisKKwlmb3IgKCA7IG4gPCBucGFnZXM7IG4rKywgb2Zmc2V0ID0gMCkgeworCQljaGFyICprYWRkciwgKmxpbWl0OworCQlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBleG9mc19nZXRfcGFnZShpbm9kZSwgbik7CisKKwkJaWYgKElTX0VSUihwYWdlKSkgeworCQkJRVhPRlNfRVJSKCJFUlJPUjogIgorCQkJCSAgICJiYWQgcGFnZSBpbiAjJWx1IiwKKwkJCQkgICBpbm9kZS0+aV9pbm8pOworCQkJZmlscC0+Zl9wb3MgKz0gUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0OworCQkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CisJCX0KKwkJa2FkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJCWlmICh1bmxpa2VseShuZWVkX3JldmFsaWRhdGUpKSB7CisJCQlpZiAob2Zmc2V0KSB7CisJCQkJb2Zmc2V0ID0gZXhvZnNfdmFsaWRhdGVfZW50cnkoa2FkZHIsIG9mZnNldCwKKwkJCQkJCQkJY2h1bmtfbWFzayk7CisJCQkJZmlscC0+Zl9wb3MgPSAobjw8UEFHRV9DQUNIRV9TSElGVCkgKyBvZmZzZXQ7CisJCQl9CisJCQlmaWxwLT5mX3ZlcnNpb24gPSBpbm9kZS0+aV92ZXJzaW9uOworCQkJbmVlZF9yZXZhbGlkYXRlID0gMDsKKwkJfQorCQlkZSA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopKGthZGRyICsgb2Zmc2V0KTsKKwkJbGltaXQgPSBrYWRkciArIGV4b2ZzX2xhc3RfYnl0ZShpbm9kZSwgbikgLQorCQkJCQkJCUVYT0ZTX0RJUl9SRUNfTEVOKDEpOworCQlmb3IgKDsgKGNoYXIgKilkZSA8PSBsaW1pdDsgZGUgPSBleG9mc19uZXh0X2VudHJ5KGRlKSkgeworCQkJaWYgKGRlLT5yZWNfbGVuID09IDApIHsKKwkJCQlFWE9GU19FUlIoIkVSUk9SOiAiCisJCQkJCSJ6ZXJvLWxlbmd0aCBkaXJlY3RvcnkgZW50cnkiKTsKKwkJCQlleG9mc19wdXRfcGFnZShwYWdlKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKwkJCWlmIChkZS0+aW5vZGVfbm8pIHsKKwkJCQlpbnQgb3ZlcjsKKwkJCQl1bnNpZ25lZCBjaGFyIGRfdHlwZSA9IERUX1VOS05PV047CisKKwkJCQlpZiAodHlwZXMgJiYgZGUtPmZpbGVfdHlwZSA8IEVYT0ZTX0ZUX01BWCkKKwkJCQkJZF90eXBlID0gdHlwZXNbZGUtPmZpbGVfdHlwZV07CisKKwkJCQlvZmZzZXQgPSAoY2hhciAqKWRlIC0ga2FkZHI7CisJCQkJb3ZlciA9IGZpbGxkaXIoZGlyZW50LCBkZS0+bmFtZSwgZGUtPm5hbWVfbGVuLAorCQkJCQkJKG48PFBBR0VfQ0FDSEVfU0hJRlQpIHwgb2Zmc2V0LAorCQkJCQkJbGU2NF90b19jcHUoZGUtPmlub2RlX25vKSwKKwkJCQkJCWRfdHlwZSk7CisJCQkJaWYgKG92ZXIpIHsKKwkJCQkJZXhvZnNfcHV0X3BhZ2UocGFnZSk7CisJCQkJCXJldHVybiAwOworCQkJCX0KKwkJCX0KKwkJCWZpbHAtPmZfcG9zICs9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKKwkJfQorCQlleG9mc19wdXRfcGFnZShwYWdlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZXhvZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHBhZ2UgKipyZXNfcGFnZSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lID0gZGVudHJ5LT5kX25hbWUubmFtZTsKKwlpbnQgbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKKwl1bnNpZ25lZCByZWNsZW4gPSBFWE9GU19ESVJfUkVDX0xFTihuYW1lbGVuKTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBuOworCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gZGlyX3BhZ2VzKGRpcik7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShkaXIpOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlOworCisJaWYgKG5wYWdlcyA9PSAwKQorCQlnb3RvIG91dDsKKworCSpyZXNfcGFnZSA9IE5VTEw7CisKKwlzdGFydCA9IG9pLT5pX2Rpcl9zdGFydF9sb29rdXA7CisJaWYgKHN0YXJ0ID49IG5wYWdlcykKKwkJc3RhcnQgPSAwOworCW4gPSBzdGFydDsKKwlkbyB7CisJCWNoYXIgKmthZGRyOworCQlwYWdlID0gZXhvZnNfZ2V0X3BhZ2UoZGlyLCBuKTsKKwkJaWYgKCFJU19FUlIocGFnZSkpIHsKKwkJCWthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCQkJZGUgPSAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKSBrYWRkcjsKKwkJCWthZGRyICs9IGV4b2ZzX2xhc3RfYnl0ZShkaXIsIG4pIC0gcmVjbGVuOworCQkJd2hpbGUgKChjaGFyICopIGRlIDw9IGthZGRyKSB7CisJCQkJaWYgKGRlLT5yZWNfbGVuID09IDApIHsKKwkJCQkJRVhPRlNfRVJSKAorCQkJCQkJIkVSUk9SOiBleG9mc19maW5kX2VudHJ5OiAiCisJCQkJCQkiemVyby1sZW5ndGggZGlyZWN0b3J5IGVudHJ5Iik7CisJCQkJCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJaWYgKGV4b2ZzX21hdGNoKG5hbWVsZW4sIG5hbWUsIGRlKSkKKwkJCQkJZ290byBmb3VuZDsKKwkJCQlkZSA9IGV4b2ZzX25leHRfZW50cnkoZGUpOworCQkJfQorCQkJZXhvZnNfcHV0X3BhZ2UocGFnZSk7CisJCX0KKwkJaWYgKCsrbiA+PSBucGFnZXMpCisJCQluID0gMDsKKwl9IHdoaWxlIChuICE9IHN0YXJ0KTsKK291dDoKKwlyZXR1cm4gTlVMTDsKKworZm91bmQ6CisJKnJlc19wYWdlID0gcGFnZTsKKwlvaS0+aV9kaXJfc3RhcnRfbG9va3VwID0gbjsKKwlyZXR1cm4gZGU7Cit9CisKK3N0cnVjdCBleG9mc19kaXJfZW50cnkgKmV4b2ZzX2RvdGRvdChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHBhZ2UgKipwKQoreworCXN0cnVjdCBwYWdlICpwYWdlID0gZXhvZnNfZ2V0X3BhZ2UoZGlyLCAwKTsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZSA9IE5VTEw7CisKKwlpZiAoIUlTX0VSUihwYWdlKSkgeworCQlkZSA9IGV4b2ZzX25leHRfZW50cnkoCisJCQkJKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKilwYWdlX2FkZHJlc3MocGFnZSkpOworCQkqcCA9IHBhZ2U7CisJfQorCXJldHVybiBkZTsKK30KKworaW5vX3QgZXhvZnNfcGFyZW50X2lubyhzdHJ1Y3QgZGVudHJ5ICpjaGlsZCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZTsKKwlpbm9fdCBpbm87CisKKwlkZSA9IGV4b2ZzX2RvdGRvdChjaGlsZC0+ZF9pbm9kZSwgJnBhZ2UpOworCWlmICghZGUpCisJCXJldHVybiAwOworCisJaW5vID0gbGU2NF90b19jcHUoZGUtPmlub2RlX25vKTsKKwlleG9mc19wdXRfcGFnZShwYWdlKTsKKwlyZXR1cm4gaW5vOworfQorCitpbm9fdCBleG9mc19pbm9kZV9ieV9uYW1lKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW5vX3QgcmVzID0gMDsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCWRlID0gZXhvZnNfZmluZF9lbnRyeShkaXIsIGRlbnRyeSwgJnBhZ2UpOworCWlmIChkZSkgeworCQlyZXMgPSBsZTY0X3RvX2NwdShkZS0+aW5vZGVfbm8pOworCQlleG9mc19wdXRfcGFnZShwYWdlKTsKKwl9CisJcmV0dXJuIHJlczsKK30KKworaW50IGV4b2ZzX3NldF9saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkZSwKKwkJCXN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWxvZmZfdCBwb3MgPSBwYWdlX29mZnNldChwYWdlKSArCisJCQkoY2hhciAqKSBkZSAtIChjaGFyICopIHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwl1bnNpZ25lZCBsZW4gPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CisJaW50IGVycjsKKworCWxvY2tfcGFnZShwYWdlKTsKKwllcnIgPSBleG9mc193cml0ZV9iZWdpbihOVUxMLCBwYWdlLT5tYXBwaW5nLCBwb3MsIGxlbiwKKwkJCQlBT1BfRkxBR19VTklOVEVSUlVQVElCTEUsICZwYWdlLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlFWE9GU19FUlIoImV4b2ZzX3NldF9saW5rOiBleG9mc193cml0ZV9iZWdpbiBGQUlMRCA9PiAlZFxuIiwKKwkJCSAgZXJyKTsKKworCWRlLT5pbm9kZV9ubyA9IGNwdV90b19sZTY0KGlub2RlLT5pX2lubyk7CisJZXhvZnNfc2V0X2RlX3R5cGUoZGUsIGlub2RlKTsKKwlpZiAobGlrZWx5KCFlcnIpKQorCQllcnIgPSBleG9mc19jb21taXRfY2h1bmsocGFnZSwgcG9zLCBsZW4pOworCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworCWRpci0+aV9tdGltZSA9IGRpci0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwltYXJrX2lub2RlX2RpcnR5KGRpcik7CisJcmV0dXJuIGVycjsKK30KKworaW50IGV4b2ZzX2FkZF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7CisJaW50IG5hbWVsZW4gPSBkZW50cnktPmRfbmFtZS5sZW47CisJdW5zaWduZWQgY2h1bmtfc2l6ZSA9IGV4b2ZzX2NodW5rX3NpemUoZGlyKTsKKwl1bnNpZ25lZCByZWNsZW4gPSBFWE9GU19ESVJfUkVDX0xFTihuYW1lbGVuKTsKKwl1bnNpZ25lZCBzaG9ydCByZWNfbGVuLCBuYW1lX2xlbjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CisJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGU7CisJdW5zaWduZWQgbG9uZyBucGFnZXMgPSBkaXJfcGFnZXMoZGlyKTsKKwl1bnNpZ25lZCBsb25nIG47CisJY2hhciAqa2FkZHI7CisJbG9mZl90IHBvczsKKwlpbnQgZXJyOworCisJZm9yIChuID0gMDsgbiA8PSBucGFnZXM7IG4rKykgeworCQljaGFyICpkaXJfZW5kOworCisJCXBhZ2UgPSBleG9mc19nZXRfcGFnZShkaXIsIG4pOworCQllcnIgPSBQVFJfRVJSKHBhZ2UpOworCQlpZiAoSVNfRVJSKHBhZ2UpKQorCQkJZ290byBvdXQ7CisJCWxvY2tfcGFnZShwYWdlKTsKKwkJa2FkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisJCWRpcl9lbmQgPSBrYWRkciArIGV4b2ZzX2xhc3RfYnl0ZShkaXIsIG4pOworCQlkZSA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopa2FkZHI7CisJCWthZGRyICs9IFBBR0VfQ0FDSEVfU0laRSAtIHJlY2xlbjsKKwkJd2hpbGUgKChjaGFyICopZGUgPD0ga2FkZHIpIHsKKwkJCWlmICgoY2hhciAqKWRlID09IGRpcl9lbmQpIHsKKwkJCQluYW1lX2xlbiA9IDA7CisJCQkJcmVjX2xlbiA9IGNodW5rX3NpemU7CisJCQkJZGUtPnJlY19sZW4gPSBjcHVfdG9fbGUxNihjaHVua19zaXplKTsKKwkJCQlkZS0+aW5vZGVfbm8gPSAwOworCQkJCWdvdG8gZ290X2l0OworCQkJfQorCQkJaWYgKGRlLT5yZWNfbGVuID09IDApIHsKKwkJCQlFWE9GU19FUlIoIkVSUk9SOiBleG9mc19hZGRfbGluazogIgorCQkJCQkiemVyby1sZW5ndGggZGlyZWN0b3J5IGVudHJ5Iik7CisJCQkJZXJyID0gLUVJTzsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisJCQllcnIgPSAtRUVYSVNUOworCQkJaWYgKGV4b2ZzX21hdGNoKG5hbWVsZW4sIG5hbWUsIGRlKSkKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQluYW1lX2xlbiA9IEVYT0ZTX0RJUl9SRUNfTEVOKGRlLT5uYW1lX2xlbik7CisJCQlyZWNfbGVuID0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOworCQkJaWYgKCFkZS0+aW5vZGVfbm8gJiYgcmVjX2xlbiA+PSByZWNsZW4pCisJCQkJZ290byBnb3RfaXQ7CisJCQlpZiAocmVjX2xlbiA+PSBuYW1lX2xlbiArIHJlY2xlbikKKwkJCQlnb3RvIGdvdF9pdDsKKwkJCWRlID0gKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKikgKChjaGFyICopIGRlICsgcmVjX2xlbik7CisJCX0KKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworCX0KKworCUVYT0ZTX0VSUigiZXhvZnNfYWRkX2xpbms6IEJBRCBkZW50cnk9JXAgb3IgaW5vZGU9JXAiLCBkZW50cnksIGlub2RlKTsKKwlyZXR1cm4gLUVJTlZBTDsKKworZ290X2l0OgorCXBvcyA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpICsKKwkJKGNoYXIgKilkZSAtIChjaGFyICopcGFnZV9hZGRyZXNzKHBhZ2UpOworCWVyciA9IGV4b2ZzX3dyaXRlX2JlZ2luKE5VTEwsIHBhZ2UtPm1hcHBpbmcsIHBvcywgcmVjX2xlbiwgMCwKKwkJCQkJCQkmcGFnZSwgTlVMTCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfdW5sb2NrOworCWlmIChkZS0+aW5vZGVfbm8pIHsKKwkJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGUxID0KKwkJCShzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopKChjaGFyICopZGUgKyBuYW1lX2xlbik7CisJCWRlMS0+cmVjX2xlbiA9IGNwdV90b19sZTE2KHJlY19sZW4gLSBuYW1lX2xlbik7CisJCWRlLT5yZWNfbGVuID0gY3B1X3RvX2xlMTYobmFtZV9sZW4pOworCQlkZSA9IGRlMTsKKwl9CisJZGUtPm5hbWVfbGVuID0gbmFtZWxlbjsKKwltZW1jcHkoZGUtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOworCWRlLT5pbm9kZV9ubyA9IGNwdV90b19sZTY0KGlub2RlLT5pX2lubyk7CisJZXhvZnNfc2V0X2RlX3R5cGUoZGUsIGlub2RlKTsKKwllcnIgPSBleG9mc19jb21taXRfY2h1bmsocGFnZSwgcG9zLCByZWNfbGVuKTsKKwlkaXItPmlfbXRpbWUgPSBkaXItPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJbWFya19pbm9kZV9kaXJ0eShkaXIpOworCXNiaS0+c19udW1maWxlcysrOworCitvdXRfcHV0OgorCWV4b2ZzX3B1dF9wYWdlKHBhZ2UpOworb3V0OgorCXJldHVybiBlcnI7CitvdXRfdW5sb2NrOgorCXVubG9ja19wYWdlKHBhZ2UpOworCWdvdG8gb3V0X3B1dDsKK30KKworaW50IGV4b2ZzX2RlbGV0ZV9lbnRyeShzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkaXIsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKKwljaGFyICprYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwl1bnNpZ25lZCBmcm9tID0gKChjaGFyICopZGlyIC0ga2FkZHIpICYgfihleG9mc19jaHVua19zaXplKGlub2RlKS0xKTsKKwl1bnNpZ25lZCB0byA9ICgoY2hhciAqKWRpciAtIGthZGRyKSArIGxlMTZfdG9fY3B1KGRpci0+cmVjX2xlbik7CisJbG9mZl90IHBvczsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpwZGUgPSBOVUxMOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlID0gKHN0cnVjdCBleG9mc19kaXJfZW50cnkgKikgKGthZGRyICsgZnJvbSk7CisJaW50IGVycjsKKworCXdoaWxlIChkZSA8IGRpcikgeworCQlpZiAoZGUtPnJlY19sZW4gPT0gMCkgeworCQkJRVhPRlNfRVJSKCJFUlJPUjogZXhvZnNfZGVsZXRlX2VudHJ5OiIKKwkJCQkiemVyby1sZW5ndGggZGlyZWN0b3J5IGVudHJ5Iik7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKwkJcGRlID0gZGU7CisJCWRlID0gZXhvZnNfbmV4dF9lbnRyeShkZSk7CisJfQorCWlmIChwZGUpCisJCWZyb20gPSAoY2hhciAqKXBkZSAtIChjaGFyICopcGFnZV9hZGRyZXNzKHBhZ2UpOworCXBvcyA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpICsgZnJvbTsKKwlsb2NrX3BhZ2UocGFnZSk7CisJZXJyID0gZXhvZnNfd3JpdGVfYmVnaW4oTlVMTCwgcGFnZS0+bWFwcGluZywgcG9zLCB0byAtIGZyb20sIDAsCisJCQkJCQkJJnBhZ2UsIE5VTEwpOworCWlmIChlcnIpCisJCUVYT0ZTX0VSUigiZXhvZnNfZGVsZXRlX2VudHJ5OiBleG9mc193cml0ZV9iZWdpbiBGQUlMRCA9PiAlZFxuIiwKKwkJCSAgZXJyKTsKKwlpZiAocGRlKQorCQlwZGUtPnJlY19sZW4gPSBjcHVfdG9fbGUxNih0byAtIGZyb20pOworCWRpci0+aW5vZGVfbm8gPSAwOworCWlmIChsaWtlbHkoIWVycikpCisJCWVyciA9IGV4b2ZzX2NvbW1pdF9jaHVuayhwYWdlLCBwb3MsIHRvIC0gZnJvbSk7CisJaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlzYmktPnNfbnVtZmlsZXMtLTsKK291dDoKKwlleG9mc19wdXRfcGFnZShwYWdlKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBrZXB0IGFsaWduZWQgb24gNCBieXRlcyAqLworI2RlZmluZSBUSElTX0RJUiAiLlwwXDAiCisjZGVmaW5lIFBBUkVOVF9ESVIgIi4uXDAiCisKK2ludCBleG9mc19tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50KQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShtYXBwaW5nLCAwKTsKKwl1bnNpZ25lZCBjaHVua19zaXplID0gZXhvZnNfY2h1bmtfc2l6ZShpbm9kZSk7CisJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGU7CisJaW50IGVycjsKKwl2b2lkICprYWRkcjsKKworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBleG9mc193cml0ZV9iZWdpbihOVUxMLCBwYWdlLT5tYXBwaW5nLCAwLCBjaHVua19zaXplLCAwLAorCQkJCQkJCSZwYWdlLCBOVUxMKTsKKwlpZiAoZXJyKSB7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlnb3RvIGZhaWw7CisJfQorCisJa2FkZHIgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJZGUgPSAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKWthZGRyOworCWRlLT5uYW1lX2xlbiA9IDE7CisJZGUtPnJlY19sZW4gPSBjcHVfdG9fbGUxNihFWE9GU19ESVJfUkVDX0xFTigxKSk7CisJbWVtY3B5KGRlLT5uYW1lLCBUSElTX0RJUiwgc2l6ZW9mKFRISVNfRElSKSk7CisJZGUtPmlub2RlX25vID0gY3B1X3RvX2xlNjQoaW5vZGUtPmlfaW5vKTsKKwlleG9mc19zZXRfZGVfdHlwZShkZSwgaW5vZGUpOworCisJZGUgPSAoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqKShrYWRkciArIEVYT0ZTX0RJUl9SRUNfTEVOKDEpKTsKKwlkZS0+bmFtZV9sZW4gPSAyOworCWRlLT5yZWNfbGVuID0gY3B1X3RvX2xlMTYoY2h1bmtfc2l6ZSAtIEVYT0ZTX0RJUl9SRUNfTEVOKDEpKTsKKwlkZS0+aW5vZGVfbm8gPSBjcHVfdG9fbGU2NChwYXJlbnQtPmlfaW5vKTsKKwltZW1jcHkoZGUtPm5hbWUsIFBBUkVOVF9ESVIsIHNpemVvZihQQVJFTlRfRElSKSk7CisJZXhvZnNfc2V0X2RlX3R5cGUoZGUsIGlub2RlKTsKKwlrdW5tYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwllcnIgPSBleG9mc19jb21taXRfY2h1bmsocGFnZSwgMCwgY2h1bmtfc2l6ZSk7CitmYWlsOgorCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgZXhvZnNfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgaSwgbnBhZ2VzID0gZGlyX3BhZ2VzKGlub2RlKTsKKworCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7IGkrKykgeworCQljaGFyICprYWRkcjsKKwkJc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqZGU7CisJCXBhZ2UgPSBleG9mc19nZXRfcGFnZShpbm9kZSwgaSk7CisKKwkJaWYgKElTX0VSUihwYWdlKSkKKwkJCWNvbnRpbnVlOworCisJCWthZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCQlkZSA9IChzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICopa2FkZHI7CisJCWthZGRyICs9IGV4b2ZzX2xhc3RfYnl0ZShpbm9kZSwgaSkgLSBFWE9GU19ESVJfUkVDX0xFTigxKTsKKworCQl3aGlsZSAoKGNoYXIgKilkZSA8PSBrYWRkcikgeworCQkJaWYgKGRlLT5yZWNfbGVuID09IDApIHsKKwkJCQlFWE9GU19FUlIoIkVSUk9SOiBleG9mc19lbXB0eV9kaXI6ICIKKwkJCQkJICAiemVyby1sZW5ndGggZGlyZWN0b3J5IGVudHJ5IgorCQkJCQkgICJrYWRkcj0lcCwgZGU9JXBcbiIsIGthZGRyLCBkZSk7CisJCQkJZ290byBub3RfZW1wdHk7CisJCQl9CisJCQlpZiAoZGUtPmlub2RlX25vICE9IDApIHsKKwkJCQkvKiBjaGVjayBmb3IgLiBhbmQgLi4gKi8KKwkJCQlpZiAoZGUtPm5hbWVbMF0gIT0gJy4nKQorCQkJCQlnb3RvIG5vdF9lbXB0eTsKKwkJCQlpZiAoZGUtPm5hbWVfbGVuID4gMikKKwkJCQkJZ290byBub3RfZW1wdHk7CisJCQkJaWYgKGRlLT5uYW1lX2xlbiA8IDIpIHsKKwkJCQkJaWYgKGxlNjRfdG9fY3B1KGRlLT5pbm9kZV9ubykgIT0KKwkJCQkJICAgIGlub2RlLT5pX2lubykKKwkJCQkJCWdvdG8gbm90X2VtcHR5OworCQkJCX0gZWxzZSBpZiAoZGUtPm5hbWVbMV0gIT0gJy4nKQorCQkJCQlnb3RvIG5vdF9lbXB0eTsKKwkJCX0KKwkJCWRlID0gZXhvZnNfbmV4dF9lbnRyeShkZSk7CisJCX0KKwkJZXhvZnNfcHV0X3BhZ2UocGFnZSk7CisJfQorCXJldHVybiAxOworCitub3RfZW1wdHk6CisJZXhvZnNfcHV0X3BhZ2UocGFnZSk7CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXhvZnNfZGlyX29wZXJhdGlvbnMgPSB7CisJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAorCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCisJLnJlYWRkaXIJPSBleG9mc19yZWFkZGlyLAorfTsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2V4b2ZzLmggYi9mcy9leG9mcy9leG9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZDRjNzg1Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZXhvZnMvZXhvZnMuaApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogQXZpc2hheSBUcmFlZ2VyIChhdmlzaGF5QGdtYWlsLmNvbSkgKGF2aXNoYXlAaWwuaWJtLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIENvcHlyaWdodHMgZm9yIGNvZGUgdGFrZW4gZnJvbSBleHQyOgorICogICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogICAgIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqICAgICBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqICAgICBmcm9tCisgKiAgICAgbGludXgvZnMvbWluaXgvaW5vZGUuYworICogICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisjaWZuZGVmIF9fRVhPRlNfSF9fCisjZGVmaW5lIF9fRVhPRlNfSF9fCisKKyNkZWZpbmUgRVhPRlNfRVJSKGZtdCwgYS4uLikgcHJpbnRrKEtFUk5fRVJSICJleG9mczogIiBmbXQsICMjYSkKKworI2lmZGVmIENPTkZJR19FWE9GU19ERUJVRworI2RlZmluZSBFWE9GU19EQkdNU0coZm10LCBhLi4uKSBcCisJcHJpbnRrKEtFUk5fTk9USUNFICJleG9mcyBAJXM6JWQ6ICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18sICMjYSkKKyNlbHNlCisjZGVmaW5lIEVYT0ZTX0RCR01TRyhmbXQsIGEuLi4pIFwKKwlkbyB7IGlmICgwKSBwcmludGsoZm10LCAjI2EpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIHU2NCBoYXMgcHJvYmxlbXMgd2l0aCBwcmludGsgdGhpcyB3aWxsIGNhc3QgaXQgdG8gdW5zaWduZWQgbG9uZyBsb25nICovCisjZGVmaW5lIF9MTFUoeCkgKHVuc2lnbmVkIGxvbmcgbG9uZykoeCkKKworLyoKKyAqIG91ciBleHRlbnNpb24gdG8gdGhlIGluLW1lbW9yeSBzdXBlcmJsb2NrCisgKi8KK3N0cnVjdCBleG9mc19zYl9pbmZvIHsKKwlzdHJ1Y3Qgb3NkX2Rldgkqc19kZXY7CQkJLyogcmV0dXJuZWQgYnkgZ2V0X29zZF9kZXYgICAgKi8KKwlvc2RfaWQJCXNfcGlkOwkJCS8qIHBhcnRpdGlvbiBJRCBvZiBmaWxlIHN5c3RlbSovCisJaW50CQlzX3RpbWVvdXQ7CQkvKiB0aW1lb3V0IGZvciBPU0Qgb3BlcmF0aW9ucyAqLworCXVpbnQ2NF90CXNfbmV4dGlkOwkJLyogaGlnaGVzdCBvYmplY3QgSUQgdXNlZCAgICAgKi8KKwl1aW50MzJfdAlzX251bWZpbGVzOwkJLyogbnVtYmVyIG9mIGZpbGVzIG9uIGZzICAgICAgKi8KKwlzcGlubG9ja190CXNfbmV4dF9nZW5fbG9jazsJLyogc3BpbmxvY2sgZm9yIGdlbiAjIHVwZGF0ZSAgKi8KKwl1MzIJCXNfbmV4dF9nZW5lcmF0aW9uOwkvKiBuZXh0IGdlbiAjIHRvIHVzZSAgICAgICAgICAqLworCWF0b21pY190CXNfY3Vycl9wZW5kaW5nOwkJLyogbnVtYmVyIG9mIHBlbmRpbmcgY29tbWFuZHMgKi8KKwl1aW50OF90CQlzX2NyZWRbT1NEX0NBUF9MRU5dOwkvKiBhbGwtcG93ZXJmdWwgY3JlZGVudGlhbCAgICAqLworfTsKKworLyoKKyAqIG91ciBleHRlbnNpb24gdG8gdGhlIGluLW1lbW9yeSBpbm9kZQorICovCitzdHJ1Y3QgZXhvZnNfaV9pbmZvIHsKKwl1bnNpZ25lZCBsb25nICBpX2ZsYWdzOyAgICAgICAgICAgIC8qIHZhcmlvdXMgYXRvbWljIGZsYWdzICAgICAgICAgICAgKi8KKwl1aW50MzJfdCAgICAgICBpX2RhdGFbRVhPRlNfSURBVEFdOy8qc2hvcnQgc3ltbGluayBuYW1lcyBhbmQgZGV2aWNlICNzKi8KKwl1aW50MzJfdCAgICAgICBpX2Rpcl9zdGFydF9sb29rdXA7IC8qIHdoaWNoIHBhZ2UgdG8gc3RhcnQgbG9va3VwICAgICAgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBpX3dxOyAgICAgICAgICAgIC8qIHdhaXQgcXVldWUgZm9yIGlub2RlICAgICAgICAgICAgKi8KKwl1aW50NjRfdCAgICAgICBpX2NvbW1pdF9zaXplOyAgICAgIC8qIHRoZSBvYmplY3QncyB3cml0dGVuIGxlbmd0aCAgICAgKi8KKwl1aW50OF90ICAgICAgICBpX2NyZWRbT1NEX0NBUF9MRU5dOy8qIGFsbC1wb3dlcmZ1bCBjcmVkZW50aWFsICAgICAgICAgKi8KKwlzdHJ1Y3QgaW5vZGUgICB2ZnNfaW5vZGU7ICAgICAgICAgIC8qIG5vcm1hbCBpbi1tZW1vcnkgaW5vZGUgICAgICAgICAgKi8KK307CisKKy8qCisgKiBvdXIgaW5vZGUgZmxhZ3MKKyAqLworI2RlZmluZSBPQkpfMkJDUkVBVEVECTAJLyogb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCBzb29uKi8KKyNkZWZpbmUgT0JKX0NSRUFURUQJMQkvKiBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCBvbiB0aGUgb3NkKi8KKworc3RhdGljIGlubGluZSBpbnQgb2JqXzJiY3JlYXRlZChzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoT0JKXzJCQ1JFQVRFRCwgJm9pLT5pX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9vYmpfMmJjcmVhdGVkKHN0cnVjdCBleG9mc19pX2luZm8gKm9pKQoreworCXNldF9iaXQoT0JKXzJCQ1JFQVRFRCwgJm9pLT5pX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgb2JqX2NyZWF0ZWQoc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kpCit7CisJcmV0dXJuIHRlc3RfYml0KE9CSl9DUkVBVEVELCAmb2ktPmlfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X29ial9jcmVhdGVkKHN0cnVjdCBleG9mc19pX2luZm8gKm9pKQoreworCXNldF9iaXQoT0JKX0NSRUFURUQsICZvaS0+aV9mbGFncyk7Cit9CisKK2ludCBfX2V4b2ZzX3dhaXRfb2JqX2NyZWF0ZWQoc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kpOworc3RhdGljIGlubGluZSBpbnQgd2FpdF9vYmpfY3JlYXRlZChzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSkKK3sKKwlpZiAobGlrZWx5KG9ial9jcmVhdGVkKG9pKSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIF9fZXhvZnNfd2FpdF9vYmpfY3JlYXRlZChvaSk7Cit9CisKKy8qCisgKiBnZXQgdG8gb3VyIGlub2RlIGZyb20gdGhlIHZmcyBpbm9kZQorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBleG9mc19pX2luZm8gKmV4b2ZzX2koc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgZXhvZnNfaV9pbmZvLCB2ZnNfaW5vZGUpOworfQorCisvKgorICogTWF4aW11bSBjb3VudCBvZiBsaW5rcyB0byBhIGZpbGUKKyAqLworI2RlZmluZSBFWE9GU19MSU5LX01BWCAgICAgICAgICAgMzIwMDAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIGlub2RlLmMgICAgICAgICAgICAgICAqLwordm9pZCBleG9mc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2ludCBleG9mc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOworaW50IGV4b2ZzX3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKKwkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSk7CitleHRlcm4gc3RydWN0IGlub2RlICpleG9mc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKTsKK3N0cnVjdCBpbm9kZSAqZXhvZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworZXh0ZXJuIGludCBleG9mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiB2b2lkIGV4b2ZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CisKKy8qIGRpci5jOiAgICAgICAgICAgICAgICAqLworaW50IGV4b2ZzX2FkZF9saW5rKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOworaW5vX3QgZXhvZnNfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKK2ludCBleG9mc19kZWxldGVfZW50cnkoc3RydWN0IGV4b2ZzX2Rpcl9lbnRyeSAqLCBzdHJ1Y3QgcGFnZSAqKTsKK2ludCBleG9mc19tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7CitzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpleG9mc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCisJCQkJCSBzdHJ1Y3QgcGFnZSAqKik7CitpbnQgZXhvZnNfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqKTsKK3N0cnVjdCBleG9mc19kaXJfZW50cnkgKmV4b2ZzX2RvdGRvdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKiopOworaW5vX3QgZXhvZnNfcGFyZW50X2lubyhzdHJ1Y3QgZGVudHJ5ICpjaGlsZCk7CitpbnQgZXhvZnNfc2V0X2xpbmsoc3RydWN0IGlub2RlICosIHN0cnVjdCBleG9mc19kaXJfZW50cnkgKiwgc3RydWN0IHBhZ2UgKiwKKwkJICAgIHN0cnVjdCBpbm9kZSAqKTsKKworLyoqKioqKioqKioqKioqKioqKioqKgorICogb3BlcmF0aW9uIHZlY3RvcnMgKgorICoqKioqKioqKioqKioqKioqKioqKi8KKy8qIGRpci5jOiAgICAgICAgICAgICovCitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleG9mc19kaXJfb3BlcmF0aW9uczsKKworLyogZmlsZS5jICAgICAgICAgICAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19maWxlX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleG9mc19maWxlX29wZXJhdGlvbnM7CisKKy8qIGlub2RlLmMgICAgICAgICAgICovCitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBleG9mc19hb3BzOworCisvKiBuYW1laS5jICAgICAgICAgICAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4b2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4b2ZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKKworLyogc3ltbGluay5jICAgICAgICAgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZXhvZnNfZmFzdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvZmlsZS5jIGIvZnMvZXhvZnMvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZDdmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9maWxlLmMKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogQXZpc2hheSBUcmFlZ2VyIChhdmlzaGF5QGdtYWlsLmNvbSkgKGF2aXNoYXlAaWwuaWJtLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIENvcHlyaWdodHMgZm9yIGNvZGUgdGFrZW4gZnJvbSBleHQyOgorICogICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogICAgIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqICAgICBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqICAgICBmcm9tCisgKiAgICAgbGludXgvZnMvbWluaXgvaW5vZGUuYworICogICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisKKyNpbmNsdWRlICJleG9mcy5oIgorCitzdGF0aWMgaW50IGV4b2ZzX3JlbGVhc2VfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBleG9mc19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkgICAgaW50IGRhdGFzeW5jKQoreworCWludCByZXQ7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxwLT5mX21hcHBpbmc7CisKKwlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KG1hcHBpbmcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKk5vdGU6IGZpbGVfZnN5bmMgYmVsb3cgYWxzbyBjYWxsZXMgc3luY19ibG9ja2Rldiwgd2hpY2ggaXMgYSBuby1vcAorCSAqICAgICAgZm9yIGV4b2ZzLCBidXQgb3RoZXIgdGhlbiB0aGF0IGl0IGRvZXMgc3luY19pbm9kZSBhbmQKKwkgKiAgICAgIHN5bmNfc3VwZXJibG9jayB3aGljaCBpcyB3aGF0IHdlIG5lZWQgaGVyZS4KKwkgKi8KKwlyZXR1cm4gZmlsZV9mc3luYyhmaWxwLCBkZW50cnksIGRhdGFzeW5jKTsKK30KKworc3RhdGljIGludCBleG9mc19mbHVzaChzdHJ1Y3QgZmlsZSAqZmlsZSwgZmxfb3duZXJfdCBpZCkKK3sKKwlleG9mc19maWxlX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnksIDEpOworCS8qIFRPRE86IEZsdXNoIHRoZSBPU0QgdGFyZ2V0ICovCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXhvZnNfZmlsZV9vcGVyYXRpb25zID0geworCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCisJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAorCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAorCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAorCS5vcGVuCQk9IGdlbmVyaWNfZmlsZV9vcGVuLAorCS5yZWxlYXNlCT0gZXhvZnNfcmVsZWFzZV9maWxlLAorCS5mc3luYwkJPSBleG9mc19maWxlX2ZzeW5jLAorCS5mbHVzaAkJPSBleG9mc19mbHVzaCwKKwkuc3BsaWNlX3JlYWQJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCisJLnNwbGljZV93cml0ZQk9IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUsCit9OworCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7CisJLnRydW5jYXRlCT0gZXhvZnNfdHJ1bmNhdGUsCisJLnNldGF0dHIJPSBleG9mc19zZXRhdHRyLAorfTsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2lub2RlLmMgYi9mcy9leG9mcy9pbm9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOGQ5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9pbm9kZS5jCkBAIC0wLDAgKzEsMTMwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogQXZpc2hheSBUcmFlZ2VyIChhdmlzaGF5QGdtYWlsLmNvbSkgKGF2aXNoYXlAaWwuaWJtLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIENvcHlyaWdodHMgZm9yIGNvZGUgdGFrZW4gZnJvbSBleHQyOgorICogICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogICAgIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqICAgICBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqICAgICBmcm9tCisgKiAgICAgbGludXgvZnMvbWluaXgvaW5vZGUuYworICogICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgorCisjaW5jbHVkZSAiZXhvZnMuaCIKKworI2lmZGVmIENPTkZJR19FWE9GU19ERUJVRworIyAgZGVmaW5lIEVYT0ZTX0RFQlVHX09CSl9JU0laRSAxCisjZW5kaWYKKworc3RydWN0IHBhZ2VfY29sbGVjdCB7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaTsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcmVxX3E7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwl1bnNpZ25lZCBleHBlY3RlZF9wYWdlczsKKworCXN0cnVjdCBiaW8gKmJpbzsKKwl1bnNpZ25lZCBucl9wYWdlczsKKwl1bnNpZ25lZCBsb25nIGxlbmd0aDsKKwlsb2ZmX3QgcGdfZmlyc3Q7IC8qIGtlZXAgNjRiaXQgYWxzbyBpbiAzMi1hcmNoZXMgKi8KK307CisKK3N0YXRpYyB2b2lkIF9wY29sX2luaXQoc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCwgdW5zaWduZWQgZXhwZWN0ZWRfcGFnZXMsCisJCXN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9IGlub2RlLT5pX3NiLT5zX2ZzX2luZm87CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnJlcV9xID0gc2JpLT5zX2Rldi0+c2NzaV9kZXZpY2UtPnJlcXVlc3RfcXVldWU7CisKKwlwY29sLT5zYmkgPSBzYmk7CisJcGNvbC0+cmVxX3EgPSByZXFfcTsKKwlwY29sLT5pbm9kZSA9IGlub2RlOworCXBjb2wtPmV4cGVjdGVkX3BhZ2VzID0gZXhwZWN0ZWRfcGFnZXM7CisKKwlwY29sLT5iaW8gPSBOVUxMOworCXBjb2wtPm5yX3BhZ2VzID0gMDsKKwlwY29sLT5sZW5ndGggPSAwOworCXBjb2wtPnBnX2ZpcnN0ID0gLTE7CisKKwlFWE9GU19EQkdNU0coIl9wY29sX2luaXQgaW5vPTB4JWx4IGV4cGVjdGVkX3BhZ2VzPSV1XG4iLCBpbm9kZS0+aV9pbm8sCisJCSAgICAgZXhwZWN0ZWRfcGFnZXMpOworfQorCitzdGF0aWMgdm9pZCBfcGNvbF9yZXNldChzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sKQoreworCXBjb2wtPmV4cGVjdGVkX3BhZ2VzIC09IG1pbihwY29sLT5ucl9wYWdlcywgcGNvbC0+ZXhwZWN0ZWRfcGFnZXMpOworCisJcGNvbC0+YmlvID0gTlVMTDsKKwlwY29sLT5ucl9wYWdlcyA9IDA7CisJcGNvbC0+bGVuZ3RoID0gMDsKKwlwY29sLT5wZ19maXJzdCA9IC0xOworCUVYT0ZTX0RCR01TRygiX3Bjb2xfcmVzZXQgaW5vPTB4JWx4IGV4cGVjdGVkX3BhZ2VzPSV1XG4iLAorCQkgICAgIHBjb2wtPmlub2RlLT5pX2lubywgcGNvbC0+ZXhwZWN0ZWRfcGFnZXMpOworCisJLyogdGhpcyBpcyBwcm9iYWJseSB0aGUgZW5kIG9mIHRoZSBsb29wIGJ1dCBpbiB3cml0ZXMKKwkgKiBpdCBtaWdodCBub3QgZW5kIGhlcmUuIGRvbid0IGJlIGxlZnQgd2l0aCBub3RoaW5nCisJICovCisJaWYgKCFwY29sLT5leHBlY3RlZF9wYWdlcykKKwkJcGNvbC0+ZXhwZWN0ZWRfcGFnZXMgPSAxMjg7Cit9CisKK3N0YXRpYyBpbnQgcGNvbF90cnlfYWxsb2Moc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCkKK3sKKwlpbnQgcGFnZXMgPSBtaW5fdCh1bnNpZ25lZCwgcGNvbC0+ZXhwZWN0ZWRfcGFnZXMsIEJJT19NQVhfUEFHRVMpOworCisJZm9yICg7IHBhZ2VzOyBwYWdlcyA+Pj0gMSkgeworCQlwY29sLT5iaW8gPSBiaW9fYWxsb2MoR0ZQX0tFUk5FTCwgcGFnZXMpOworCQlpZiAobGlrZWx5KHBjb2wtPmJpbykpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlFWE9GU19FUlIoIkZhaWxlZCB0byBrY2FsbG9jIGV4cGVjdGVkX3BhZ2VzPSV1XG4iLAorCQkgIHBjb2wtPmV4cGVjdGVkX3BhZ2VzKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgcGNvbF9mcmVlKHN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wpCit7CisJYmlvX3B1dChwY29sLT5iaW8pOworCXBjb2wtPmJpbyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcGNvbF9hZGRfcGFnZShzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSB1bnNpZ25lZCBsZW4pCit7CisJaW50IGFkZGVkX2xlbiA9IGJpb19hZGRfcGNfcGFnZShwY29sLT5yZXFfcSwgcGNvbC0+YmlvLCBwYWdlLCBsZW4sIDApOworCWlmICh1bmxpa2VseShsZW4gIT0gYWRkZWRfbGVuKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkrK3Bjb2wtPm5yX3BhZ2VzOworCXBjb2wtPmxlbmd0aCArPSBsZW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX3JlYWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJldCkKK3sKKwlpZiAocmV0ID09IDApIHsKKwkJLyogRXZlcnl0aGluZyBpcyBPSyAqLworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCWlmIChQYWdlRXJyb3IocGFnZSkpCisJCQlDbGVhclBhZ2VFcnJvcihwYWdlKTsKKwl9IGVsc2UgaWYgKHJldCA9PSAtRUZBVUxUKSB7CisJCS8qIEluIHRoaXMgY2FzZSB3ZSB3ZXJlIHRyeWluZyB0byByZWFkIHNvbWV0aGluZyB0aGF0IHdhc24ndCBvbgorCQkgKiBkaXNrIHlldCAtIHJldHVybiBhIHBhZ2UgZnVsbCBvZiB6ZXJvZXMuICBUaGlzIHNob3VsZCBiZSBPSywKKwkJICogYmVjYXVzZSB0aGUgb2JqZWN0IHNob3VsZCBiZSBlbXB0eSAoaWYgdGhlcmUgd2FzIGEgd3JpdGUKKwkJICogYmVmb3JlIHRoaXMgcmVhZCwgdGhlIHJlYWQgd291bGQgYmUgd2FpdGluZyB3aXRoIHRoZSBwYWdlCisJCSAqIGxvY2tlZCAqLworCQljbGVhcl9oaWdocGFnZShwYWdlKTsKKworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCWlmIChQYWdlRXJyb3IocGFnZSkpCisJCQlDbGVhclBhZ2VFcnJvcihwYWdlKTsKKwkJcmV0ID0gMDsgLyogcmVjb3ZlcmVkIGVycm9yICovCisJCUVYT0ZTX0RCR01TRygicmVjb3ZlcmVkIHJlYWQgZXJyb3JcbiIpOworCX0gZWxzZSAvKiBFcnJvciAqLworCQlTZXRQYWdlRXJyb3IocGFnZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfd3JpdGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJldCkKK3sKKwlpZiAocmV0KSB7CisJCW1hcHBpbmdfc2V0X2Vycm9yKHBhZ2UtPm1hcHBpbmcsIHJldCk7CisJCVNldFBhZ2VFcnJvcihwYWdlKTsKKwl9CisJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworfQorCisvKiBDYWxsZWQgYXQgdGhlIGVuZCBvZiByZWFkcywgdG8gb3B0aW9uYWxseSB1bmxvY2sgcGFnZXMgYW5kIHVwZGF0ZSB0aGVpcgorICogc3RhdHVzLgorICovCitzdGF0aWMgaW50IF9fcmVhZHBhZ2VzX2RvbmUoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCwKKwkJCSAgICBib29sIGRvX3VubG9jaykKK3sKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYzsKKwlpbnQgaTsKKwl1NjQgcmVzaWQ7CisJdTY0IGdvb2RfYnl0ZXM7CisJdTY0IGxlbmd0aCA9IDA7CisJaW50IHJldCA9IGV4b2ZzX2NoZWNrX29rX3Jlc2lkKG9yLCAmcmVzaWQsIE5VTEwpOworCisJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKworCWlmIChsaWtlbHkoIXJldCkpCisJCWdvb2RfYnl0ZXMgPSBwY29sLT5sZW5ndGg7CisJZWxzZSBpZiAoIXJlc2lkKQorCQlnb29kX2J5dGVzID0gMDsKKwllbHNlCisJCWdvb2RfYnl0ZXMgPSBwY29sLT5sZW5ndGggLSByZXNpZDsKKworCUVYT0ZTX0RCR01TRygicmVhZHBhZ2VzX2RvbmUoMHglbHgpIGdvb2RfYnl0ZXM9MHglbGx4IgorCQkgICAgICIgbGVuZ3RoPTB4JWx4IG5yX3BhZ2VzPSV1XG4iLAorCQkgICAgIHBjb2wtPmlub2RlLT5pX2lubywgX0xMVShnb29kX2J5dGVzKSwgcGNvbC0+bGVuZ3RoLAorCQkgICAgIHBjb2wtPm5yX3BhZ2VzKTsKKworCV9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgcGNvbC0+YmlvLCBpLCAwKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gYnZlYy0+YnZfcGFnZTsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJCWludCBwYWdlX3N0YXQ7CisKKwkJaWYgKGlub2RlICE9IHBjb2wtPmlub2RlKQorCQkJY29udGludWU7IC8qIG9zZCBtaWdodCBhZGQgbW9yZSBwYWdlcyBhdCBlbmQgKi8KKworCQlpZiAobGlrZWx5KGxlbmd0aCA8IGdvb2RfYnl0ZXMpKQorCQkJcGFnZV9zdGF0ID0gMDsKKwkJZWxzZQorCQkJcGFnZV9zdGF0ID0gcmV0OworCisJCUVYT0ZTX0RCR01TRygiICAgIHJlYWRwYWdlc19kb25lKDB4JWx4LCAweCVseCkgJXNcbiIsCisJCQkgIGlub2RlLT5pX2lubywgcGFnZS0+aW5kZXgsCisJCQkgIHBhZ2Vfc3RhdCA/ICJiYWRfYnl0ZXMiIDogImdvb2RfYnl0ZXMiKTsKKworCQlyZXQgPSB1cGRhdGVfcmVhZF9wYWdlKHBhZ2UsIHBhZ2Vfc3RhdCk7CisJCWlmIChkb191bmxvY2spCisJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJbGVuZ3RoICs9IGJ2ZWMtPmJ2X2xlbjsKKwl9CisKKwlwY29sX2ZyZWUocGNvbCk7CisJRVhPRlNfREJHTVNHKCJyZWFkcGFnZXNfZG9uZSBFTkRcbiIpOworCXJldHVybiByZXQ7Cit9CisKKy8qIGNhbGxiYWNrIG9mIGFzeW5jIHJlYWRzICovCitzdGF0aWMgdm9pZCByZWFkcGFnZXNfZG9uZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCB2b2lkICpwKQoreworCXN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wgPSBwOworCisJX19yZWFkcGFnZXNfZG9uZShvciwgcGNvbCwgdHJ1ZSk7CisJYXRvbWljX2RlYygmcGNvbC0+c2JpLT5zX2N1cnJfcGVuZGluZyk7CisJa2ZyZWUocCk7Cit9CisKK3N0YXRpYyB2b2lkIF91bmxvY2tfcGNvbF9wYWdlcyhzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sLCBpbnQgcmV0LCBpbnQgcncpCit7CisJc3RydWN0IGJpb192ZWMgKmJ2ZWM7CisJaW50IGk7CisKKwlfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGJ2ZWMsIHBjb2wtPmJpbywgaSwgMCkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ2ZWMtPmJ2X3BhZ2U7CisKKwkJaWYgKHJ3ID09IFJFQUQpCisJCQl1cGRhdGVfcmVhZF9wYWdlKHBhZ2UsIHJldCk7CisJCWVsc2UKKwkJCXVwZGF0ZV93cml0ZV9wYWdlKHBhZ2UsIHJldCk7CisKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJfQorCXBjb2xfZnJlZShwY29sKTsKK30KKworc3RhdGljIGludCByZWFkX2V4ZWMoc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCwgYm9vbCBpc19zeW5jKQoreworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShwY29sLT5pbm9kZSk7CisJc3RydWN0IG9zZF9vYmpfaWQgb2JqID0ge3Bjb2wtPnNiaS0+c19waWQsCisJCQkJCXBjb2wtPmlub2RlLT5pX2lubyArIEVYT0ZTX09CSl9PRkZ9OworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3IgPSBOVUxMOworCXN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2xfY29weSA9IE5VTEw7CisJbG9mZl90IGlfc3RhcnQgPSBwY29sLT5wZ19maXJzdCA8PCBQQUdFX0NBQ0hFX1NISUZUOworCWludCByZXQ7CisKKwlpZiAoIXBjb2wtPmJpbykKKwkJcmV0dXJuIDA7CisKKwkvKiBzZWUgY29tbWVudCBpbiBfcmVhZHBhZ2UoKSBhYm91dCBzeW5jIHJlYWRzICovCisJV0FSTl9PTihpc19zeW5jICYmIChwY29sLT5ucl9wYWdlcyAhPSAxKSk7CisKKwlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHBjb2wtPnNiaS0+c19kZXYsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghb3IpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCW9zZF9yZXFfcmVhZChvciwgJm9iaiwgcGNvbC0+YmlvLCBpX3N0YXJ0KTsKKworCWlmIChpc19zeW5jKSB7CisJCWV4b2ZzX3N5bmNfb3Aob3IsIHBjb2wtPnNiaS0+c190aW1lb3V0LCBvaS0+aV9jcmVkKTsKKwkJcmV0dXJuIF9fcmVhZHBhZ2VzX2RvbmUob3IsIHBjb2wsIGZhbHNlKTsKKwl9CisKKwlwY29sX2NvcHkgPSBrbWFsbG9jKHNpemVvZigqcGNvbF9jb3B5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY29sX2NvcHkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJKnBjb2xfY29weSA9ICpwY29sOworCXJldCA9IGV4b2ZzX2FzeW5jX29wKG9yLCByZWFkcGFnZXNfZG9uZSwgcGNvbF9jb3B5LCBvaS0+aV9jcmVkKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBlcnI7CisKKwlhdG9taWNfaW5jKCZwY29sLT5zYmktPnNfY3Vycl9wZW5kaW5nKTsKKworCUVYT0ZTX0RCR01TRygicmVhZF9leGVjIG9iaj0weCVsbHggc3RhcnQ9MHglbGx4IGxlbmd0aD0weCVseFxuIiwKKwkJICBvYmouaWQsIF9MTFUoaV9zdGFydCksIHBjb2wtPmxlbmd0aCk7CisKKwkvKiBwYWdlcyBvd25lcnNoaXAgd2FzIHBhc3NlZCB0byBwY29sX2NvcHkgKi8KKwlfcGNvbF9yZXNldChwY29sKTsKKwlyZXR1cm4gMDsKKworZXJyOgorCWlmICghaXNfc3luYykKKwkJX3VubG9ja19wY29sX3BhZ2VzKHBjb2wsIHJldCwgUkVBRCk7CisJa2ZyZWUocGNvbF9jb3B5KTsKKwlpZiAob3IpCisJCW9zZF9lbmRfcmVxdWVzdChvcik7CisJcmV0dXJuIHJldDsKK30KKworLyogcmVhZHBhZ2Vfc3RyaXAgaXMgY2FsbGVkIGVpdGhlciBkaXJlY3RseSBmcm9tIHJlYWRwYWdlKCkgb3IgYnkgdGhlIFZGUyBmcm9tCisgKiB3aXRoaW4gcmVhZF9jYWNoZV9wYWdlcygpLCB0byBhZGQgb25lIG1vcmUgcGFnZSB0byBiZSByZWFkLiBJdCB3aWxsIHRyeSB0bworICogY29sbGVjdCBhcyBtYW55IGNvbnRpZ3VvdXMgcGFnZXMgYXMgcG9zaWJsZS4gSWYgYSBkaXNjb250aW51aXR5IGlzCisgKiBlbmNvdW50ZXJlZCwgb3IgaXQgcnVucyBvdXQgb2YgcmVzb3VyY2VzLCBpdCB3aWxsIHN1Ym1pdCB0aGUgcHJldmlvdXMgc2VnbWVudAorICogYW5kIHdpbGwgc3RhcnQgYSBuZXcgY29sbGVjdGlvbi4gRXZlbnR1YWxseSBjYWxsZXIgbXVzdCBzdWJtaXQgdGhlIGxhc3QKKyAqIHNlZ21lbnQgaWYgcHJlc2VudC4KKyAqLworc3RhdGljIGludCByZWFkcGFnZV9zdHJpcCh2b2lkICpkYXRhLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sID0gZGF0YTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGNvbC0+aW5vZGU7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBleG9mc19pKGlub2RlKTsKKwlsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCXBnb2ZmX3QgZW5kX2luZGV4ID0gaV9zaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJc2l6ZV90IGxlbjsKKwlpbnQgcmV0OworCisJLyogRklYTUU6IEp1c3QgZm9yIGRlYnVnZ2luZywgd2lsbCBiZSByZW1vdmVkICovCisJaWYgKFBhZ2VVcHRvZGF0ZShwYWdlKSkKKwkJRVhPRlNfRVJSKCJQYWdlVXB0b2RhdGUoMHglbHgsIDB4JWx4KVxuIiwgcGNvbC0+aW5vZGUtPmlfaW5vLAorCQkJICBwYWdlLT5pbmRleCk7CisKKwlpZiAocGFnZS0+aW5kZXggPCBlbmRfaW5kZXgpCisJCWxlbiA9IFBBR0VfQ0FDSEVfU0laRTsKKwllbHNlIGlmIChwYWdlLT5pbmRleCA9PSBlbmRfaW5kZXgpCisJCWxlbiA9IGlfc2l6ZSAmIH5QQUdFX0NBQ0hFX01BU0s7CisJZWxzZQorCQlsZW4gPSAwOworCisJaWYgKCFsZW4gfHwgIW9ial9jcmVhdGVkKG9pKSkgeworCQkvKiB0aGlzIHdpbGwgYmUgb3V0IG9mIGJvdW5kcywgb3IgZG9lc24ndCBleGlzdCB5ZXQuCisJCSAqIEN1cnJlbnQgcGFnZSBpcyBjbGVhcmVkIGFuZCB0aGUgcmVxdWVzdCBpcyBzcGxpdAorCQkgKi8KKwkJY2xlYXJfaGlnaHBhZ2UocGFnZSk7CisKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQlpZiAoUGFnZUVycm9yKHBhZ2UpKQorCQkJQ2xlYXJQYWdlRXJyb3IocGFnZSk7CisKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCUVYT0ZTX0RCR01TRygicmVhZHBhZ2Vfc3RyaXAoMHglbHgsIDB4JWx4KSBlbXB0eSBwYWdlLCIKKwkJCSAgICAgIiBzcGxpdHRpbmdcbiIsIGlub2RlLT5pX2lubywgcGFnZS0+aW5kZXgpOworCisJCXJldHVybiByZWFkX2V4ZWMocGNvbCwgZmFsc2UpOworCX0KKwordHJ5X2FnYWluOgorCisJaWYgKHVubGlrZWx5KHBjb2wtPnBnX2ZpcnN0ID09IC0xKSkgeworCQlwY29sLT5wZ19maXJzdCA9IHBhZ2UtPmluZGV4OworCX0gZWxzZSBpZiAodW5saWtlbHkoKHBjb2wtPnBnX2ZpcnN0ICsgcGNvbC0+bnJfcGFnZXMpICE9CisJCSAgIHBhZ2UtPmluZGV4KSkgeworCQkvKiBEaXNjb250aW51aXR5IGRldGVjdGVkLCBzcGxpdCB0aGUgcmVxdWVzdCAqLworCQlyZXQgPSByZWFkX2V4ZWMocGNvbCwgZmFsc2UpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWdvdG8gZmFpbDsKKwkJZ290byB0cnlfYWdhaW47CisJfQorCisJaWYgKCFwY29sLT5iaW8pIHsKKwkJcmV0ID0gcGNvbF90cnlfYWxsb2MocGNvbCk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJZ290byBmYWlsOworCX0KKworCWlmIChsZW4gIT0gUEFHRV9DQUNIRV9TSVpFKQorCQl6ZXJvX3VzZXIocGFnZSwgbGVuLCBQQUdFX0NBQ0hFX1NJWkUgLSBsZW4pOworCisJRVhPRlNfREJHTVNHKCIgICAgcmVhZHBhZ2Vfc3RyaXAoMHglbHgsIDB4JWx4KSBsZW49MHglenhcbiIsCisJCSAgICAgaW5vZGUtPmlfaW5vLCBwYWdlLT5pbmRleCwgbGVuKTsKKworCXJldCA9IHBjb2xfYWRkX3BhZ2UocGNvbCwgcGFnZSwgbGVuKTsKKwlpZiAocmV0KSB7CisJCUVYT0ZTX0RCR01TRygiRmFpbGVkIHBjb2xfYWRkX3BhZ2UgcGFnZXNbaV09JXAgIgorCQkJICAidGhpc19sZW49MHglenggbnJfcGFnZXM9JXUgbGVuZ3RoPTB4JWx4XG4iLAorCQkJICBwYWdlLCBsZW4sIHBjb2wtPm5yX3BhZ2VzLCBwY29sLT5sZW5ndGgpOworCisJCS8qIHNwbGl0IHRoZSByZXF1ZXN0LCBhbmQgc3RhcnQgYWdhaW4gd2l0aCBjdXJyZW50IHBhZ2UgKi8KKwkJcmV0ID0gcmVhZF9leGVjKHBjb2wsIGZhbHNlKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlnb3RvIGZhaWw7CisKKwkJZ290byB0cnlfYWdhaW47CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJLyogU2V0UGFnZUVycm9yKHBhZ2UpOyA/Pz8gKi8KKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGV4b2ZzX3JlYWRwYWdlcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywgdW5zaWduZWQgbnJfcGFnZXMpCit7CisJc3RydWN0IHBhZ2VfY29sbGVjdCBwY29sOworCWludCByZXQ7CisKKwlfcGNvbF9pbml0KCZwY29sLCBucl9wYWdlcywgbWFwcGluZy0+aG9zdCk7CisKKwlyZXQgPSByZWFkX2NhY2hlX3BhZ2VzKG1hcHBpbmcsIHBhZ2VzLCByZWFkcGFnZV9zdHJpcCwgJnBjb2wpOworCWlmIChyZXQpIHsKKwkJRVhPRlNfRVJSKCJyZWFkX2NhY2hlX3BhZ2VzID0+ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZWFkX2V4ZWMoJnBjb2wsIGZhbHNlKTsKK30KKworc3RhdGljIGludCBfcmVhZHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGJvb2wgaXNfc3luYykKK3sKKwlzdHJ1Y3QgcGFnZV9jb2xsZWN0IHBjb2w7CisJaW50IHJldDsKKworCV9wY29sX2luaXQoJnBjb2wsIDEsIHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCisJLyogcmVhZHBhZ2Vfc3RyaXAgbWlnaHQgY2FsbCByZWFkX2V4ZWMoLGFzeW5jKSBpbnNpZGUgYXQgc2V2ZXJhbCBwbGFjZXMKKwkgKiBidXQgdGhpcyBpcyBzYWZlIGZvciBpc19hc3luYz0wIHNpbmNlIHJlYWRfZXhlYyB3aWxsIG5vdCBkbyBhbnl0aGluZworCSAqIHdoZW4gd2UgaGF2ZSBhIHNpbmdsZSBwYWdlLgorCSAqLworCXJldCA9IHJlYWRwYWdlX3N0cmlwKCZwY29sLCBwYWdlKTsKKwlpZiAocmV0KSB7CisJCUVYT0ZTX0VSUigiX3JlYWRwYWdlID0+ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiByZWFkX2V4ZWMoJnBjb2wsIGlzX3N5bmMpOworfQorCisvKgorICogV2UgZG9uJ3QgbmVlZCB0aGUgZmlsZQorICovCitzdGF0aWMgaW50IGV4b2ZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gX3JlYWRwYWdlKHBhZ2UsIGZhbHNlKTsKK30KKworLyogQ2FsbGJhY2sgZm9yIG9zZF93cml0ZS4gQWxsIHdyaXRlcyBhcmUgYXN5bmNocm9ub3VzZSAqLworc3RhdGljIHZvaWQgd3JpdGVwYWdlc19kb25lKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHZvaWQgKnApCit7CisJc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCA9IHA7CisJc3RydWN0IGJpb192ZWMgKmJ2ZWM7CisJaW50IGk7CisJdTY0IHJlc2lkOworCXU2NCAgZ29vZF9ieXRlczsKKwl1NjQgIGxlbmd0aCA9IDA7CisKKwlpbnQgcmV0ID0gZXhvZnNfY2hlY2tfb2tfcmVzaWQob3IsIE5VTEwsICZyZXNpZCk7CisKKwlvc2RfZW5kX3JlcXVlc3Qob3IpOworCWF0b21pY19kZWMoJnBjb2wtPnNiaS0+c19jdXJyX3BlbmRpbmcpOworCisJaWYgKGxpa2VseSghcmV0KSkKKwkJZ29vZF9ieXRlcyA9IHBjb2wtPmxlbmd0aDsKKwllbHNlIGlmICghcmVzaWQpCisJCWdvb2RfYnl0ZXMgPSAwOworCWVsc2UKKwkJZ29vZF9ieXRlcyA9IHBjb2wtPmxlbmd0aCAtIHJlc2lkOworCisJRVhPRlNfREJHTVNHKCJ3cml0ZXBhZ2VzX2RvbmUoMHglbHgpIGdvb2RfYnl0ZXM9MHglbGx4IgorCQkgICAgICIgbGVuZ3RoPTB4JWx4IG5yX3BhZ2VzPSV1XG4iLAorCQkgICAgIHBjb2wtPmlub2RlLT5pX2lubywgX0xMVShnb29kX2J5dGVzKSwgcGNvbC0+bGVuZ3RoLAorCQkgICAgIHBjb2wtPm5yX3BhZ2VzKTsKKworCV9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgcGNvbC0+YmlvLCBpLCAwKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gYnZlYy0+YnZfcGFnZTsKKwkJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJCWludCBwYWdlX3N0YXQ7CisKKwkJaWYgKGlub2RlICE9IHBjb2wtPmlub2RlKQorCQkJY29udGludWU7IC8qIG9zZCBtaWdodCBhZGQgbW9yZSBwYWdlcyB0byBhIGJpbyAqLworCisJCWlmIChsaWtlbHkobGVuZ3RoIDwgZ29vZF9ieXRlcykpCisJCQlwYWdlX3N0YXQgPSAwOworCQllbHNlCisJCQlwYWdlX3N0YXQgPSByZXQ7CisKKwkJdXBkYXRlX3dyaXRlX3BhZ2UocGFnZSwgcGFnZV9zdGF0KTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCUVYT0ZTX0RCR01TRygiICAgIHdyaXRlcGFnZXNfZG9uZSgweCVseCwgMHglbHgpIHN0YXR1cz0lZFxuIiwKKwkJCSAgICAgaW5vZGUtPmlfaW5vLCBwYWdlLT5pbmRleCwgcGFnZV9zdGF0KTsKKworCQlsZW5ndGggKz0gYnZlYy0+YnZfbGVuOworCX0KKworCXBjb2xfZnJlZShwY29sKTsKKwlrZnJlZShwY29sKTsKKwlFWE9GU19EQkdNU0coIndyaXRlcGFnZXNfZG9uZSBFTkRcbiIpOworfQorCitzdGF0aWMgaW50IHdyaXRlX2V4ZWMoc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCkKK3sKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2kocGNvbC0+aW5vZGUpOworCXN0cnVjdCBvc2Rfb2JqX2lkIG9iaiA9IHtwY29sLT5zYmktPnNfcGlkLAorCQkJCQlwY29sLT5pbm9kZS0+aV9pbm8gKyBFWE9GU19PQkpfT0ZGfTsKKwlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yID0gTlVMTDsKKwlzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sX2NvcHkgPSBOVUxMOworCWxvZmZfdCBpX3N0YXJ0ID0gcGNvbC0+cGdfZmlyc3QgPDwgUEFHRV9DQUNIRV9TSElGVDsKKwlpbnQgcmV0OworCisJaWYgKCFwY29sLT5iaW8pCisJCXJldHVybiAwOworCisJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChwY29sLT5zYmktPnNfZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIW9yKSkgeworCQlFWE9GU19FUlIoIndyaXRlX2V4ZWM6IEZhaWxkIHRvIG9zZF9zdGFydF9yZXF1ZXN0KClcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlwY29sX2NvcHkgPSBrbWFsbG9jKHNpemVvZigqcGNvbF9jb3B5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwY29sX2NvcHkpIHsKKwkJRVhPRlNfRVJSKCJ3cml0ZV9leGVjOiBGYWlsZCB0byBrbWFsbG9jKHBjb2wpXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJKnBjb2xfY29weSA9ICpwY29sOworCisJb3NkX3JlcV93cml0ZShvciwgJm9iaiwgcGNvbF9jb3B5LT5iaW8sIGlfc3RhcnQpOworCXJldCA9IGV4b2ZzX2FzeW5jX29wKG9yLCB3cml0ZXBhZ2VzX2RvbmUsIHBjb2xfY29weSwgb2ktPmlfY3JlZCk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJRVhPRlNfRVJSKCJ3cml0ZV9leGVjOiBleG9mc19hc3luY19vcCgpIEZhaWxkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJYXRvbWljX2luYygmcGNvbC0+c2JpLT5zX2N1cnJfcGVuZGluZyk7CisJRVhPRlNfREJHTVNHKCJ3cml0ZV9leGVjKDB4JWx4LCAweCVsbHgpIHN0YXJ0PTB4JWxseCBsZW5ndGg9MHglbHhcbiIsCisJCSAgcGNvbC0+aW5vZGUtPmlfaW5vLCBwY29sLT5wZ19maXJzdCwgX0xMVShpX3N0YXJ0KSwKKwkJICBwY29sLT5sZW5ndGgpOworCS8qIHBhZ2VzIG93bmVyc2hpcCB3YXMgcGFzc2VkIHRvIHBjb2xfY29weSAqLworCV9wY29sX3Jlc2V0KHBjb2wpOworCXJldHVybiAwOworCitlcnI6CisJX3VubG9ja19wY29sX3BhZ2VzKHBjb2wsIHJldCwgV1JJVEUpOworCWtmcmVlKHBjb2xfY29weSk7CisJaWYgKG9yKQorCQlvc2RfZW5kX3JlcXVlc3Qob3IpOworCXJldHVybiByZXQ7Cit9CisKKy8qIHdyaXRlcGFnZV9zdHJpcCBpcyBjYWxsZWQgZWl0aGVyIGRpcmVjdGx5IGZyb20gd3JpdGVwYWdlKCkgb3IgYnkgdGhlIFZGUyBmcm9tCisgKiB3aXRoaW4gd3JpdGVfY2FjaGVfcGFnZXMoKSwgdG8gYWRkIG9uZSBtb3JlIHBhZ2UgdG8gYmUgd3JpdHRlbiB0byBzdG9yYWdlLgorICogSXQgd2lsbCB0cnkgdG8gY29sbGVjdCBhcyBtYW55IGNvbnRpZ3VvdXMgcGFnZXMgYXMgcG9zc2libGUuIElmIGEKKyAqIGRpc2NvbnRpbnVpdHkgaXMgZW5jb3VudGVyZWQgb3IgaXQgcnVucyBvdXQgb2YgcmVzb3VyY2VzIGl0IHdpbGwgc3VibWl0IHRoZQorICogcHJldmlvdXMgc2VnbWVudCBhbmQgd2lsbCBzdGFydCBhIG5ldyBjb2xsZWN0aW9uLgorICogRXZlbnR1YWxseSBjYWxsZXIgbXVzdCBzdWJtaXQgdGhlIGxhc3Qgc2VnbWVudCBpZiBwcmVzZW50LgorICovCitzdGF0aWMgaW50IHdyaXRlcGFnZV9zdHJpcChzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjX3VudXNlZCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sID0gZGF0YTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGNvbC0+aW5vZGU7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBleG9mc19pKGlub2RlKTsKKwlsb2ZmX3QgaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCXBnb2ZmX3QgZW5kX2luZGV4ID0gaV9zaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJc2l6ZV90IGxlbjsKKwlpbnQgcmV0OworCisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKworCXJldCA9IHdhaXRfb2JqX2NyZWF0ZWQob2kpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlpZiAocGFnZS0+aW5kZXggPCBlbmRfaW5kZXgpCisJCS8qIGluIHRoaXMgY2FzZSwgdGhlIHBhZ2UgaXMgd2l0aGluIHRoZSBsaW1pdHMgb2YgdGhlIGZpbGUgKi8KKwkJbGVuID0gUEFHRV9DQUNIRV9TSVpFOworCWVsc2UgeworCQlsZW4gPSBpX3NpemUgJiB+UEFHRV9DQUNIRV9NQVNLOworCisJCWlmIChwYWdlLT5pbmRleCA+IGVuZF9pbmRleCB8fCAhbGVuKSB7CisJCQkvKiBpbiB0aGlzIGNhc2UsIHRoZSBwYWdlIGlzIG91dHNpZGUgdGhlIGxpbWl0cworCQkJICogKHRydW5jYXRlIGluIHByb2dyZXNzKQorCQkJICovCisJCQlyZXQgPSB3cml0ZV9leGVjKHBjb2wpOworCQkJaWYgKHVubGlrZWx5KHJldCkpCisJCQkJZ290byBmYWlsOworCQkJaWYgKFBhZ2VFcnJvcihwYWdlKSkKKwkJCQlDbGVhclBhZ2VFcnJvcihwYWdlKTsKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKK3RyeV9hZ2FpbjoKKworCWlmICh1bmxpa2VseShwY29sLT5wZ19maXJzdCA9PSAtMSkpIHsKKwkJcGNvbC0+cGdfZmlyc3QgPSBwYWdlLT5pbmRleDsKKwl9IGVsc2UgaWYgKHVubGlrZWx5KChwY29sLT5wZ19maXJzdCArIHBjb2wtPm5yX3BhZ2VzKSAhPQorCQkgICBwYWdlLT5pbmRleCkpIHsKKwkJLyogRGlzY29udGludWl0eSBkZXRlY3RlZCwgc3BsaXQgdGhlIHJlcXVlc3QgKi8KKwkJcmV0ID0gd3JpdGVfZXhlYyhwY29sKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlnb3RvIGZhaWw7CisJCWdvdG8gdHJ5X2FnYWluOworCX0KKworCWlmICghcGNvbC0+YmlvKSB7CisJCXJldCA9IHBjb2xfdHJ5X2FsbG9jKHBjb2wpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlFWE9GU19EQkdNU0coIiAgICB3cml0ZXBhZ2Vfc3RyaXAoMHglbHgsIDB4JWx4KSBsZW49MHglenhcbiIsCisJCSAgICAgaW5vZGUtPmlfaW5vLCBwYWdlLT5pbmRleCwgbGVuKTsKKworCXJldCA9IHBjb2xfYWRkX3BhZ2UocGNvbCwgcGFnZSwgbGVuKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlFWE9GU19EQkdNU0coIkZhaWxlZCBwY29sX2FkZF9wYWdlICIKKwkJCSAgICAgIm5yX3BhZ2VzPSV1IHRvdGFsX2xlbmd0aD0weCVseFxuIiwKKwkJCSAgICAgcGNvbC0+bnJfcGFnZXMsIHBjb2wtPmxlbmd0aCk7CisKKwkJLyogc3BsaXQgdGhlIHJlcXVlc3QsIG5leHQgbG9vcCB3aWxsIHN0YXJ0IGFnYWluICovCisJCXJldCA9IHdyaXRlX2V4ZWMocGNvbCk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlFWE9GU19EQkdNU0coIndyaXRlX2V4ZWMgZmFpbGQgPT4gJWQiLCByZXQpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJZ290byB0cnlfYWdhaW47CisJfQorCisJQlVHX09OKFBhZ2VXcml0ZWJhY2socGFnZSkpOworCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKworCXJldHVybiAwOworCitmYWlsOgorCXNldF9iaXQoQVNfRUlPLCAmcGFnZS0+bWFwcGluZy0+ZmxhZ3MpOworCXVubG9ja19wYWdlKHBhZ2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJICAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCXN0cnVjdCBwYWdlX2NvbGxlY3QgcGNvbDsKKwlsb25nIHN0YXJ0LCBlbmQsIGV4cGVjdGVkX3BhZ2VzOworCWludCByZXQ7CisKKwlzdGFydCA9IHdiYy0+cmFuZ2Vfc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwllbmQgPSAod2JjLT5yYW5nZV9lbmQgPT0gTExPTkdfTUFYKSA/CisJCQlzdGFydCArIG1hcHBpbmctPm5ycGFnZXMgOgorCQkJd2JjLT5yYW5nZV9lbmQgPj4gUEFHRV9DQUNIRV9TSElGVDsKKworCWlmIChzdGFydCB8fCBlbmQpCisJCWV4cGVjdGVkX3BhZ2VzID0gbWluKGVuZCAtIHN0YXJ0ICsgMSwgMzJMKTsKKwllbHNlCisJCWV4cGVjdGVkX3BhZ2VzID0gbWFwcGluZy0+bnJwYWdlczsKKworCUVYT0ZTX0RCR01TRygiaW5vZGUoMHglbHgpIHdiYy0+c3RhcnQ9MHglbGx4IHdiYy0+ZW5kPTB4JWxseCIKKwkJICAgICAiIG0tPm5ycGFnZXM9JWx1IHN0YXJ0PTB4JWx4IGVuZD0weCVseFxuIiwKKwkJICAgICBtYXBwaW5nLT5ob3N0LT5pX2lubywgd2JjLT5yYW5nZV9zdGFydCwgd2JjLT5yYW5nZV9lbmQsCisJCSAgICAgbWFwcGluZy0+bnJwYWdlcywgc3RhcnQsIGVuZCk7CisKKwlfcGNvbF9pbml0KCZwY29sLCBleHBlY3RlZF9wYWdlcywgbWFwcGluZy0+aG9zdCk7CisKKwlyZXQgPSB3cml0ZV9jYWNoZV9wYWdlcyhtYXBwaW5nLCB3YmMsIHdyaXRlcGFnZV9zdHJpcCwgJnBjb2wpOworCWlmIChyZXQpIHsKKwkJRVhPRlNfRVJSKCJ3cml0ZV9jYWNoZV9wYWdlcyA9PiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gd3JpdGVfZXhlYygmcGNvbCk7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKK3sKKwlzdHJ1Y3QgcGFnZV9jb2xsZWN0IHBjb2w7CisJaW50IHJldDsKKworCV9wY29sX2luaXQoJnBjb2wsIDEsIHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCisJcmV0ID0gd3JpdGVwYWdlX3N0cmlwKHBhZ2UsIE5VTEwsICZwY29sKTsKKwlpZiAocmV0KSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfd3JpdGVwYWdlID0+ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiB3cml0ZV9leGVjKCZwY29sKTsKK30KKworaW50IGV4b2ZzX3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKKwkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCXBhZ2UgPSAqcGFnZXA7CisJaWYgKHBhZ2UgPT0gTlVMTCkgeworCQlyZXQgPSBzaW1wbGVfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwKKwkJCQkJIGZzZGF0YSk7CisJCWlmIChyZXQpIHsKKwkJCUVYT0ZTX0RCR01TRygic2ltcGxlX3dyaXRlX2JlZ2luIGZhaWxkXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlwYWdlID0gKnBhZ2VwOworCX0KKworCSAvKiByZWFkIG1vZGlmeSB3cml0ZSAqLworCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpICYmIChsZW4gIT0gUEFHRV9DQUNIRV9TSVpFKSkgeworCQlyZXQgPSBfcmVhZHBhZ2UocGFnZSwgdHJ1ZSk7CisJCWlmIChyZXQpIHsKKwkJCS8qU2V0UGFnZUVycm9yIHdhcyBkb25lIGJ5IF9yZWFkcGFnZS4gSXMgaXQgb2s/Ki8KKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJRVhPRlNfREJHTVNHKCJfX3JlYWRwYWdlX2ZpbGxlciBmYWlsZFxuIik7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGV4b2ZzX3dyaXRlX2JlZ2luX2V4cG9ydChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgZmxhZ3MsCisJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCit7CisJKnBhZ2VwID0gTlVMTDsKKworCXJldHVybiBleG9mc193cml0ZV9iZWdpbihmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgZmxhZ3MsIHBhZ2VwLAorCQkJCQlmc2RhdGEpOworfQorCitjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGV4b2ZzX2FvcHMgPSB7CisJLnJlYWRwYWdlCT0gZXhvZnNfcmVhZHBhZ2UsCisJLnJlYWRwYWdlcwk9IGV4b2ZzX3JlYWRwYWdlcywKKwkud3JpdGVwYWdlCT0gZXhvZnNfd3JpdGVwYWdlLAorCS53cml0ZXBhZ2VzCT0gZXhvZnNfd3JpdGVwYWdlcywKKwkud3JpdGVfYmVnaW4JPSBleG9mc193cml0ZV9iZWdpbl9leHBvcnQsCisJLndyaXRlX2VuZAk9IHNpbXBsZV93cml0ZV9lbmQsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJTk9ERSBPUEVSQVRJT05TCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUZXN0IHdoZXRoZXIgYW4gaW5vZGUgaXMgYSBmYXN0IHN5bWxpbmsuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGV4b2ZzX2lub2RlX2lzX2Zhc3Rfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShpbm9kZSk7CisKKwlyZXR1cm4gU19JU0xOSyhpbm9kZS0+aV9tb2RlKSAmJiAob2ktPmlfZGF0YVswXSAhPSAwKTsKK30KKworLyoKKyAqIGdldF9ibG9ja190IC0gRmlsbCBpbiBhIGJ1ZmZlcl9oZWFkCisgKiBBbiBPU0QgdGFrZXMgY2FyZSBvZiBibG9jayBhbGxvY2F0aW9uIHNvIHdlIGp1c3QgZmFrZSBhbiBhbGxvY2F0aW9uIGJ5CisgKiBwdXR0aW5nIGluIHRoZSBpbm9kZSdzIHNlY3Rvcl90IGluIHRoZSBidWZmZXJfaGVhZC4KKyAqIFRPRE86IFdoYXQgYWJvdXQgdGhlIGNhc2Ugb2YgY3JlYXRlPT0wIGFuZCBAaWJsb2NrIGRvZXMgbm90IGV4aXN0IGluIHRoZQorICogb2JqZWN0PworICovCitzdGF0aWMgaW50IGV4b2ZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCisJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKK3sKKwltYXBfYmgoYmhfcmVzdWx0LCBpbm9kZS0+aV9zYiwgaWJsb2NrKTsKKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IG9zZF9hdHRyIGdfYXR0cl9sb2dpY2FsX2xlbmd0aCA9IEFUVFJfREVGKAorCU9TRF9BUEFHRV9PQkpFQ1RfSU5GT1JNQVRJT04sIE9TRF9BVFRSX09JX0xPR0lDQUxfTEVOR1RILCA4KTsKKworLyoKKyAqIFRydW5jYXRlIGEgZmlsZSB0byB0aGUgc3BlY2lmaWVkIHNpemUgLSBhbGwgd2UgaGF2ZSB0byBkbyBpcyBzZXQgdGhlIHNpemUKKyAqIGF0dHJpYnV0ZS4gIFdlIG1ha2Ugc3VyZSB0aGUgb2JqZWN0IGV4aXN0cyBmaXJzdC4KKyAqLwordm9pZCBleG9mc190cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pID0gZXhvZnNfaShpbm9kZSk7CisJc3RydWN0IG9zZF9vYmpfaWQgb2JqID0ge3NiaS0+c19waWQsIGlub2RlLT5pX2lubyArIEVYT0ZTX09CSl9PRkZ9OworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CisJc3RydWN0IG9zZF9hdHRyIGF0dHI7CisJbG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCV9fYmU2NCBuZXdzaXplOworCWludCByZXQ7CisKKwlpZiAoIShTX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkKKwkgICAgIHx8IFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpKQorCQlyZXR1cm47CisJaWYgKGV4b2ZzX2lub2RlX2lzX2Zhc3Rfc3ltbGluayhpbm9kZSkpCisJCXJldHVybjsKKwlpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFCTEUoaW5vZGUpKQorCQlyZXR1cm47CisJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKworCW5vYmhfdHJ1bmNhdGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpc2l6ZSwgZXhvZnNfZ2V0X2Jsb2NrKTsKKworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qoc2JpLT5zX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJRVhPRlNfRVJSKCJFUlJPUjogZXhvZnNfdHJ1bmNhdGU6IG9zZF9zdGFydF9yZXF1ZXN0IGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlvc2RfcmVxX3NldF9hdHRyaWJ1dGVzKG9yLCAmb2JqKTsKKworCW5ld3NpemUgPSBjcHVfdG9fYmU2NCgodTY0KWlzaXplKTsKKwlhdHRyID0gZ19hdHRyX2xvZ2ljYWxfbGVuZ3RoOworCWF0dHIudmFsX3B0ciA9ICZuZXdzaXplOworCW9zZF9yZXFfYWRkX3NldF9hdHRyX2xpc3Qob3IsICZhdHRyLCAxKTsKKworCS8qIGlmIHdlIGFyZSBhYm91dCB0byB0cnVuY2F0ZSBhbiBvYmplY3QsIGFuZCBpdCBoYXNuJ3QgYmVlbgorCSAqIGNyZWF0ZWQgeWV0LCB3YWl0CisJICovCisJaWYgKHVubGlrZWx5KHdhaXRfb2JqX2NyZWF0ZWQob2kpKSkKKwkJZ290byBmYWlsOworCisJcmV0ID0gZXhvZnNfc3luY19vcChvciwgc2JpLT5zX3RpbWVvdXQsIG9pLT5pX2NyZWQpOworCW9zZF9lbmRfcmVxdWVzdChvcik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCitvdXQ6CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJcmV0dXJuOworZmFpbDoKKwltYWtlX2JhZF9pbm9kZShpbm9kZSk7CisJZ290byBvdXQ7Cit9CisKKy8qCisgKiBTZXQgaW5vZGUgYXR0cmlidXRlcyAtIGp1c3QgY2FsbCBnZW5lcmljIGZ1bmN0aW9ucy4KKyAqLworaW50IGV4b2ZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGlhdHRyKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWVycm9yID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgaWF0dHIpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIFJlYWQgYW4gaW5vZGUgZnJvbSB0aGUgT1NELCBhbmQgcmV0dXJuIGl0IGFzIGlzLiAgV2UgYWxzbyByZXR1cm4gdGhlIHNpemUKKyAqIGF0dHJpYnV0ZSBpbiB0aGUgJ3Nhbml0eScgYXJndW1lbnQgaWYgd2UgZ290IGNvbXBpbGVkIHdpdGggZGVidWdnaW5nIHR1cm5lZAorICogb24uCisgKi8KK3N0YXRpYyBpbnQgZXhvZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBleG9mc19pX2luZm8gKm9pLAorCQkgICAgc3RydWN0IGV4b2ZzX2ZjYiAqaW5vZGUsIHVpbnQ2NF90ICpzYW5pdHkpCit7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9IHNiLT5zX2ZzX2luZm87CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKwlzdHJ1Y3Qgb3NkX2F0dHIgYXR0cjsKKwlzdHJ1Y3Qgb3NkX29ial9pZCBvYmogPSB7c2JpLT5zX3BpZCwKKwkJCQkgb2ktPnZmc19pbm9kZS5pX2lubyArIEVYT0ZTX09CSl9PRkZ9OworCWludCByZXQ7CisKKwlleG9mc19tYWtlX2NyZWRlbnRpYWwob2ktPmlfY3JlZCwgJm9iaik7CisKKwlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHNiaS0+c19kZXYsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghb3IpKSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfZ2V0X2lub2RlOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW9zZF9yZXFfZ2V0X2F0dHJpYnV0ZXMob3IsICZvYmopOworCisJLyogd2UgbmVlZCB0aGUgaW5vZGUgYXR0cmlidXRlICovCisJb3NkX3JlcV9hZGRfZ2V0X2F0dHJfbGlzdChvciwgJmdfYXR0cl9pbm9kZV9kYXRhLCAxKTsKKworI2lmZGVmIEVYT0ZTX0RFQlVHX09CSl9JU0laRQorCS8qIHdlIGdldCB0aGUgc2l6ZSBhdHRyaWJ1dGVzIHRvIGRvIGEgc2FuaXR5IGNoZWNrICovCisJb3NkX3JlcV9hZGRfZ2V0X2F0dHJfbGlzdChvciwgJmdfYXR0cl9sb2dpY2FsX2xlbmd0aCwgMSk7CisjZW5kaWYKKworCXJldCA9IGV4b2ZzX3N5bmNfb3Aob3IsIHNiaS0+c190aW1lb3V0LCBvaS0+aV9jcmVkKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWF0dHIgPSBnX2F0dHJfaW5vZGVfZGF0YTsKKwlyZXQgPSBleHRyYWN0X2F0dHJfZnJvbV9yZXEob3IsICZhdHRyKTsKKwlpZiAocmV0KSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfZ2V0X2lub2RlOiBleHRyYWN0X2F0dHJfZnJvbV9yZXEgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJV0FSTl9PTihhdHRyLmxlbiAhPSBFWE9GU19JTk9fQVRUUl9TSVpFKTsKKwltZW1jcHkoaW5vZGUsIGF0dHIudmFsX3B0ciwgRVhPRlNfSU5PX0FUVFJfU0laRSk7CisKKyNpZmRlZiBFWE9GU19ERUJVR19PQkpfSVNJWkUKKwlhdHRyID0gZ19hdHRyX2xvZ2ljYWxfbGVuZ3RoOworCXJldCA9IGV4dHJhY3RfYXR0cl9mcm9tX3JlcShvciwgJmF0dHIpOworCWlmIChyZXQpIHsKKwkJRVhPRlNfRVJSKCJFUlJPUjogZXh0cmFjdCBhdHRyIGZyb20gb3IgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCSpzYW5pdHkgPSBnZXRfdW5hbGlnbmVkX2JlNjQoYXR0ci52YWxfcHRyKTsKKyNlbmRpZgorCitvdXQ6CisJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRmlsbCBpbiBhbiBpbm9kZSByZWFkIGZyb20gdGhlIE9TRCBhbmQgc2V0IGl0IHVwIGZvciB1c2UKKyAqLworc3RydWN0IGlub2RlICpleG9mc19pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKQoreworCXN0cnVjdCBleG9mc19pX2luZm8gKm9pOworCXN0cnVjdCBleG9mc19mY2IgZmNiOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJdWludDY0X3QgdW5pbml0aWFsaXplZF92YXIoc2FuaXR5KTsKKwlpbnQgcmV0OworCisJaW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgaW5vKTsKKwlpZiAoIWlub2RlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSkKKwkJcmV0dXJuIGlub2RlOworCW9pID0gZXhvZnNfaShpbm9kZSk7CisKKwkvKiByZWFkIHRoZSBpbm9kZSBmcm9tIHRoZSBvc2QgKi8KKwlyZXQgPSBleG9mc19nZXRfaW5vZGUoc2IsIG9pLCAmZmNiLCAmc2FuaXR5KTsKKwlpZiAocmV0KQorCQlnb3RvIGJhZF9pbm9kZTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm9pLT5pX3dxKTsKKwlzZXRfb2JqX2NyZWF0ZWQob2kpOworCisJLyogY29weSBzdHVmZiBmcm9tIG9uLWRpc2sgc3RydWN0IHRvIGluLW1lbW9yeSBzdHJ1Y3QgKi8KKwlpbm9kZS0+aV9tb2RlID0gbGUxNl90b19jcHUoZmNiLmlfbW9kZSk7CisJaW5vZGUtPmlfdWlkID0gbGUzMl90b19jcHUoZmNiLmlfdWlkKTsKKwlpbm9kZS0+aV9naWQgPSBsZTMyX3RvX2NwdShmY2IuaV9naWQpOworCWlub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUoZmNiLmlfbGlua3NfY291bnQpOworCWlub2RlLT5pX2N0aW1lLnR2X3NlYyA9IChzaWduZWQpbGUzMl90b19jcHUoZmNiLmlfY3RpbWUpOworCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9IChzaWduZWQpbGUzMl90b19jcHUoZmNiLmlfYXRpbWUpOworCWlub2RlLT5pX210aW1lLnR2X3NlYyA9IChzaWduZWQpbGUzMl90b19jcHUoZmNiLmlfbXRpbWUpOworCWlub2RlLT5pX2N0aW1lLnR2X25zZWMgPQorCQlpbm9kZS0+aV9hdGltZS50dl9uc2VjID0gaW5vZGUtPmlfbXRpbWUudHZfbnNlYyA9IDA7CisJb2ktPmlfY29tbWl0X3NpemUgPSBsZTY0X3RvX2NwdShmY2IuaV9zaXplKTsKKwlpX3NpemVfd3JpdGUoaW5vZGUsIG9pLT5pX2NvbW1pdF9zaXplKTsKKwlpbm9kZS0+aV9ibGtiaXRzID0gRVhPRlNfQkxLU0hJRlQ7CisJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KGZjYi5pX2dlbmVyYXRpb24pOworCisjaWZkZWYgRVhPRlNfREVCVUdfT0JKX0lTSVpFCisJaWYgKChpbm9kZS0+aV9zaXplICE9IHNhbml0eSkgJiYKKwkJKCFleG9mc19pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSkgeworCQlFWE9GU19FUlIoIldBUk5JTkc6IFNpemUgb2Ygb2JqZWN0IGZyb20gaW5vZGUgYW5kICIKKwkJCSAgImF0dHJpYnV0ZXMgZGlmZmVyICglbGxkICE9ICVsbHUpXG4iLAorCQkJICBpbm9kZS0+aV9zaXplLCBfTExVKHNhbml0eSkpOworCX0KKyNlbmRpZgorCisJb2ktPmlfZGlyX3N0YXJ0X2xvb2t1cCA9IDA7CisKKwlpZiAoKGlub2RlLT5pX25saW5rID09IDApICYmIChpbm9kZS0+aV9tb2RlID09IDApKSB7CisJCXJldCA9IC1FU1RBTEU7CisJCWdvdG8gYmFkX2lub2RlOworCX0KKworCWlmIChTX0lTQ0hSKGlub2RlLT5pX21vZGUpIHx8IFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkpIHsKKwkJaWYgKGZjYi5pX2RhdGFbMF0pCisJCQlpbm9kZS0+aV9yZGV2ID0KKwkJCQlvbGRfZGVjb2RlX2RldihsZTMyX3RvX2NwdShmY2IuaV9kYXRhWzBdKSk7CisJCWVsc2UKKwkJCWlub2RlLT5pX3JkZXYgPQorCQkJCW5ld19kZWNvZGVfZGV2KGxlMzJfdG9fY3B1KGZjYi5pX2RhdGFbMV0pKTsKKwl9IGVsc2UgeworCQltZW1jcHkob2ktPmlfZGF0YSwgZmNiLmlfZGF0YSwgc2l6ZW9mKGZjYi5pX2RhdGEpKTsKKwl9CisKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgeworCQlpbm9kZS0+aV9vcCA9ICZleG9mc19maWxlX2lub2RlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX2ZvcCA9ICZleG9mc19maWxlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmV4b2ZzX2FvcHM7CisJfSBlbHNlIGlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCWlub2RlLT5pX29wID0gJmV4b2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9mb3AgPSAmZXhvZnNfZGlyX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmV4b2ZzX2FvcHM7CisJfSBlbHNlIGlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKSB7CisJCWlmIChleG9mc19pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKQorCQkJaW5vZGUtPmlfb3AgPSAmZXhvZnNfZmFzdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CisJCWVsc2UgeworCQkJaW5vZGUtPmlfb3AgPSAmZXhvZnNfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworCQkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmZXhvZnNfYW9wczsKKwkJfQorCX0gZWxzZSB7CisJCWlub2RlLT5pX29wID0gJmV4b2ZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKKwkJaWYgKGZjYi5pX2RhdGFbMF0pCisJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsCisJCQkgICBvbGRfZGVjb2RlX2RldihsZTMyX3RvX2NwdShmY2IuaV9kYXRhWzBdKSkpOworCQllbHNlCisJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsCisJCQkgICBuZXdfZGVjb2RlX2RldihsZTMyX3RvX2NwdShmY2IuaV9kYXRhWzFdKSkpOworCX0KKworCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOworCXJldHVybiBpbm9kZTsKKworYmFkX2lub2RlOgorCWlnZXRfZmFpbGVkKGlub2RlKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCitpbnQgX19leG9mc193YWl0X29ial9jcmVhdGVkKHN0cnVjdCBleG9mc19pX2luZm8gKm9pKQoreworCWlmICghb2JqX2NyZWF0ZWQob2kpKSB7CisJCUJVR19PTighb2JqXzJiY3JlYXRlZChvaSkpOworCQl3YWl0X2V2ZW50KG9pLT5pX3dxLCBvYmpfY3JlYXRlZChvaSkpOworCX0KKwlyZXR1cm4gdW5saWtlbHkoaXNfYmFkX2lub2RlKCZvaS0+dmZzX2lub2RlKSkgPyAtRUlPIDogMDsKK30KKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmcm9tIGV4b2ZzX25ld19pbm9kZSgpLiAgVGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IHdlCisgKiBzZXQgdGhlIG9ial9jcmVhdGVkIGZsYWcgc28gdGhhdCBvdGhlciBtZXRob2RzIGtub3cgdGhhdCB0aGUgb2JqZWN0IGV4aXN0cyBvbgorICogdGhlIE9TRC4KKyAqLworc3RhdGljIHZvaWQgY3JlYXRlX2RvbmUoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcDsKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koaW5vZGUpOworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOworCWludCByZXQ7CisKKwlyZXQgPSBleG9mc19jaGVja19vayhvcik7CisJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwlhdG9taWNfZGVjKCZzYmktPnNfY3Vycl9wZW5kaW5nKTsKKworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUVYT0ZTX0VSUigib2JqZWN0PTB4JWxseCBjcmVhdGlvbiBmYWlsZCBpbiBwaWQ9MHglbGx4IiwKKwkJCSAgX0xMVShzYmktPnNfcGlkKSwgX0xMVShpbm9kZS0+aV9pbm8gKyBFWE9GU19PQkpfT0ZGKSk7CisJCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKKwl9IGVsc2UKKwkJc2V0X29ial9jcmVhdGVkKG9pKTsKKworCWF0b21pY19kZWMoJmlub2RlLT5pX2NvdW50KTsKKwl3YWtlX3VwKCZvaS0+aV93cSk7Cit9CisKKy8qCisgKiBTZXQgdXAgYSBuZXcgaW5vZGUgYW5kIGNyZWF0ZSBhbiBvYmplY3QgZm9yIGl0IG9uIHRoZSBPU0QKKyAqLworc3RydWN0IGlub2RlICpleG9mc19uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIGludCBtb2RlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaTsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpOworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CisJc3RydWN0IG9zZF9vYmpfaWQgb2JqOworCWludCByZXQ7CisKKwlzYiA9IGRpci0+aV9zYjsKKwlpbm9kZSA9IG5ld19pbm9kZShzYik7CisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlvaSA9IGV4b2ZzX2koaW5vZGUpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmb2ktPmlfd3EpOworCXNldF9vYmpfMmJjcmVhdGVkKG9pKTsKKworCXNiaSA9IHNiLT5zX2ZzX2luZm87CisKKwlzYi0+c19kaXJ0ID0gMTsKKwlpbm9kZS0+aV91aWQgPSBjdXJyZW50LT5jcmVkLT5mc3VpZDsKKwlpZiAoZGlyLT5pX21vZGUgJiBTX0lTR0lEKSB7CisJCWlub2RlLT5pX2dpZCA9IGRpci0+aV9naWQ7CisJCWlmIChTX0lTRElSKG1vZGUpKQorCQkJbW9kZSB8PSBTX0lTR0lEOworCX0gZWxzZSB7CisJCWlub2RlLT5pX2dpZCA9IGN1cnJlbnQtPmNyZWQtPmZzZ2lkOworCX0KKwlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKworCWlub2RlLT5pX2lubyA9IHNiaS0+c19uZXh0aWQrKzsKKwlpbm9kZS0+aV9ibGtiaXRzID0gRVhPRlNfQkxLU0hJRlQ7CisJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCW9pLT5pX2NvbW1pdF9zaXplID0gaW5vZGUtPmlfc2l6ZSA9IDA7CisJc3Bpbl9sb2NrKCZzYmktPnNfbmV4dF9nZW5fbG9jayk7CisJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IHNiaS0+c19uZXh0X2dlbmVyYXRpb24rKzsKKwlzcGluX3VubG9jaygmc2JpLT5zX25leHRfZ2VuX2xvY2spOworCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKKworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCisJb2JqLnBhcnRpdGlvbiA9IHNiaS0+c19waWQ7CisJb2JqLmlkID0gaW5vZGUtPmlfaW5vICsgRVhPRlNfT0JKX09GRjsKKwlleG9mc19tYWtlX2NyZWRlbnRpYWwob2ktPmlfY3JlZCwgJm9iaik7CisKKwlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHNiaS0+c19kZXYsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghb3IpKSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfbmV3X2lub2RlOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWRcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlvc2RfcmVxX2NyZWF0ZV9vYmplY3Qob3IsICZvYmopOworCisJLyogaW5jcmVtZW50IHRoZSByZWZjb3VudCBzbyB0aGF0IHRoZSBpbm9kZSB3aWxsIHN0aWxsIGJlIGFyb3VuZCB3aGVuIHdlCisJICogcmVhY2ggdGhlIGNhbGxiYWNrCisJICovCisJYXRvbWljX2luYygmaW5vZGUtPmlfY291bnQpOworCisJcmV0ID0gZXhvZnNfYXN5bmNfb3Aob3IsIGNyZWF0ZV9kb25lLCBpbm9kZSwgb2ktPmlfY3JlZCk7CisJaWYgKHJldCkgeworCQlhdG9taWNfZGVjKCZpbm9kZS0+aV9jb3VudCk7CisJCW9zZF9lbmRfcmVxdWVzdChvcik7CisJCXJldHVybiBFUlJfUFRSKC1FSU8pOworCX0KKwlhdG9taWNfaW5jKCZzYmktPnNfY3Vycl9wZW5kaW5nKTsKKworCXJldHVybiBpbm9kZTsKK30KKworLyoKKyAqIHN0cnVjdCB0byBwYXNzIHR3byBhcmd1bWVudHMgdG8gdXBkYXRlX2lub2RlJ3MgY2FsbGJhY2sKKyAqLworc3RydWN0IHVwZGF0ZWlfYXJncyB7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8JKnNiaTsKKwlzdHJ1Y3QgZXhvZnNfZmNiCWZjYjsKK307CisKKy8qCisgKiBDYWxsYmFjayBmdW5jdGlvbiBmcm9tIGV4b2ZzX3VwZGF0ZV9pbm9kZSgpLgorICovCitzdGF0aWMgdm9pZCB1cGRhdGVpX2RvbmUoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgdXBkYXRlaV9hcmdzICphcmdzID0gcDsKKworCW9zZF9lbmRfcmVxdWVzdChvcik7CisKKwlhdG9taWNfZGVjKCZhcmdzLT5zYmktPnNfY3Vycl9wZW5kaW5nKTsKKworCWtmcmVlKGFyZ3MpOworfQorCisvKgorICogV3JpdGUgdGhlIGlub2RlIHRvIHRoZSBPU0QuICBKdXN0IGZpbGwgdXAgdGhlIHN0cnVjdCwgYW5kIHNldCB0aGUgYXR0cmlidXRlCisgKiBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5IGRlcGVuZGluZyBvbiB0aGUgZG9fc3luYyBmbGFnLgorICovCitzdGF0aWMgaW50IGV4b2ZzX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKK3sKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koaW5vZGUpOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gc2ItPnNfZnNfaW5mbzsKKwlzdHJ1Y3Qgb3NkX29ial9pZCBvYmogPSB7c2JpLT5zX3BpZCwgaW5vZGUtPmlfaW5vICsgRVhPRlNfT0JKX09GRn07CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKwlzdHJ1Y3Qgb3NkX2F0dHIgYXR0cjsKKwlzdHJ1Y3QgZXhvZnNfZmNiICpmY2I7CisJc3RydWN0IHVwZGF0ZWlfYXJncyAqYXJnczsKKwlpbnQgcmV0OworCisJYXJncyA9IGt6YWxsb2Moc2l6ZW9mKCphcmdzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcmdzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZjYiA9ICZhcmdzLT5mY2I7CisKKwlmY2ItPmlfbW9kZSA9IGNwdV90b19sZTE2KGlub2RlLT5pX21vZGUpOworCWZjYi0+aV91aWQgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV91aWQpOworCWZjYi0+aV9naWQgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9naWQpOworCWZjYi0+aV9saW5rc19jb3VudCA9IGNwdV90b19sZTE2KGlub2RlLT5pX25saW5rKTsKKwlmY2ItPmlfY3RpbWUgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9jdGltZS50dl9zZWMpOworCWZjYi0+aV9hdGltZSA9IGNwdV90b19sZTMyKGlub2RlLT5pX2F0aW1lLnR2X3NlYyk7CisJZmNiLT5pX210aW1lID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfbXRpbWUudHZfc2VjKTsKKwlvaS0+aV9jb21taXRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwlmY2ItPmlfc2l6ZSA9IGNwdV90b19sZTY0KG9pLT5pX2NvbW1pdF9zaXplKTsKKwlmY2ItPmlfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKGlub2RlLT5pX2dlbmVyYXRpb24pOworCisJaWYgKFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkgeworCQlpZiAob2xkX3ZhbGlkX2Rldihpbm9kZS0+aV9yZGV2KSkgeworCQkJZmNiLT5pX2RhdGFbMF0gPQorCQkJCWNwdV90b19sZTMyKG9sZF9lbmNvZGVfZGV2KGlub2RlLT5pX3JkZXYpKTsKKwkJCWZjYi0+aV9kYXRhWzFdID0gMDsKKwkJfSBlbHNlIHsKKwkJCWZjYi0+aV9kYXRhWzBdID0gMDsKKwkJCWZjYi0+aV9kYXRhWzFdID0KKwkJCQljcHVfdG9fbGUzMihuZXdfZW5jb2RlX2Rldihpbm9kZS0+aV9yZGV2KSk7CisJCQlmY2ItPmlfZGF0YVsyXSA9IDA7CisJCX0KKwl9IGVsc2UKKwkJbWVtY3B5KGZjYi0+aV9kYXRhLCBvaS0+aV9kYXRhLCBzaXplb2YoZmNiLT5pX2RhdGEpKTsKKworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qoc2JpLT5zX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJRVhPRlNfRVJSKCJleG9mc191cGRhdGVfaW5vZGU6IG9zZF9zdGFydF9yZXF1ZXN0IGZhaWxlZC5cbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfYXJnczsKKwl9CisKKwlvc2RfcmVxX3NldF9hdHRyaWJ1dGVzKG9yLCAmb2JqKTsKKworCWF0dHIgPSBnX2F0dHJfaW5vZGVfZGF0YTsKKwlhdHRyLnZhbF9wdHIgPSBmY2I7CisJb3NkX3JlcV9hZGRfc2V0X2F0dHJfbGlzdChvciwgJmF0dHIsIDEpOworCisJaWYgKCFvYmpfY3JlYXRlZChvaSkpIHsKKwkJRVhPRlNfREJHTVNHKCIhb2JqX2NyZWF0ZWRcbiIpOworCQlCVUdfT04oIW9ial8yYmNyZWF0ZWQob2kpKTsKKwkJd2FpdF9ldmVudChvaS0+aV93cSwgb2JqX2NyZWF0ZWQob2kpKTsKKwkJRVhPRlNfREJHTVNHKCJ3YWl0X2V2ZW50IGRvbmVcbiIpOworCX0KKworCWlmIChkb19zeW5jKSB7CisJCXJldCA9IGV4b2ZzX3N5bmNfb3Aob3IsIHNiaS0+c190aW1lb3V0LCBvaS0+aV9jcmVkKTsKKwkJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwkJZ290byBmcmVlX2FyZ3M7CisJfSBlbHNlIHsKKwkJYXJncy0+c2JpID0gc2JpOworCisJCXJldCA9IGV4b2ZzX2FzeW5jX29wKG9yLCB1cGRhdGVpX2RvbmUsIGFyZ3MsIG9pLT5pX2NyZWQpOworCQlpZiAocmV0KSB7CisJCQlvc2RfZW5kX3JlcXVlc3Qob3IpOworCQkJZ290byBmcmVlX2FyZ3M7CisJCX0KKwkJYXRvbWljX2luYygmc2JpLT5zX2N1cnJfcGVuZGluZyk7CisJCWdvdG8gb3V0OyAvKiBkZWFsbG9jYXRpb24gaW4gdXBkYXRlaV9kb25lICovCisJfQorCitmcmVlX2FyZ3M6CisJa2ZyZWUoYXJncyk7CitvdXQ6CisJRVhPRlNfREJHTVNHKCJyZXQ9PiVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBleG9mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKK3sKKwlyZXR1cm4gZXhvZnNfdXBkYXRlX2lub2RlKGlub2RlLCB3YWl0KTsKK30KKworLyoKKyAqIENhbGxiYWNrIGZ1bmN0aW9uIGZyb20gZXhvZnNfZGVsZXRlX2lub2RlKCkgLSBkb24ndCBoYXZlIG11Y2ggY2xlYW5pbmcgdXAgdG8KKyAqIGRvLgorICovCitzdGF0aWMgdm9pZCBkZWxldGVfZG9uZShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCB2b2lkICpwKQoreworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmk7CisJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwlzYmkgPSBwOworCWF0b21pY19kZWMoJnNiaS0+c19jdXJyX3BlbmRpbmcpOworfQorCisvKgorICogQ2FsbGVkIHdoZW4gdGhlIHJlZmNvdW50IG9mIGFuIGlub2RlIHJlYWNoZXMgemVyby4gIFdlIHJlbW92ZSB0aGUgb2JqZWN0CisgKiBmcm9tIHRoZSBPU0QgaGVyZS4gIFdlIG1ha2Ugc3VyZSB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkIGJlZm9yZSB3ZSB0cnkgYW5kCisgKiBkZWxldGUgaXQuCisgKi8KK3ZvaWQgZXhvZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBleG9mc19pKGlub2RlKTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9IHNiLT5zX2ZzX2luZm87CisJc3RydWN0IG9zZF9vYmpfaWQgb2JqID0ge3NiaS0+c19waWQsIGlub2RlLT5pX2lubyArIEVYT0ZTX09CSl9PRkZ9OworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CisJaW50IHJldDsKKworCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKworCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQorCQlnb3RvIG5vX2RlbGV0ZTsKKworCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCWV4b2ZzX3VwZGF0ZV9pbm9kZShpbm9kZSwgaW5vZGVfbmVlZHNfc3luYyhpbm9kZSkpOworCisJaW5vZGUtPmlfc2l6ZSA9IDA7CisJaWYgKGlub2RlLT5pX2Jsb2NrcykKKwkJZXhvZnNfdHJ1bmNhdGUoaW5vZGUpOworCisJY2xlYXJfaW5vZGUoaW5vZGUpOworCisJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChzYmktPnNfZGV2LCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIW9yKSkgeworCQlFWE9GU19FUlIoImV4b2ZzX2RlbGV0ZV9pbm9kZTogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW9zZF9yZXFfcmVtb3ZlX29iamVjdChvciwgJm9iaik7CisKKwkvKiBpZiB3ZSBhcmUgZGVsZXRpbmcgYW4gb2JqIHRoYXQgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQsIHdhaXQgKi8KKwlpZiAoIW9ial9jcmVhdGVkKG9pKSkgeworCQlCVUdfT04oIW9ial8yYmNyZWF0ZWQob2kpKTsKKwkJd2FpdF9ldmVudChvaS0+aV93cSwgb2JqX2NyZWF0ZWQob2kpKTsKKwl9CisKKwlyZXQgPSBleG9mc19hc3luY19vcChvciwgZGVsZXRlX2RvbmUsIHNiaSwgb2ktPmlfY3JlZCk7CisJaWYgKHJldCkgeworCQlFWE9GU19FUlIoCisJCSAgICAgICAiRVJST1I6IEBleG9mc19kZWxldGVfaW5vZGUgZXhvZnNfYXN5bmNfb3AgZmFpbGVkXG4iKTsKKwkJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwkJcmV0dXJuOworCX0KKwlhdG9taWNfaW5jKCZzYmktPnNfY3Vycl9wZW5kaW5nKTsKKworCXJldHVybjsKKworbm9fZGVsZXRlOgorCWNsZWFyX2lub2RlKGlub2RlKTsKK30KZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL25hbWVpLmMgYi9mcy9leG9mcy9uYW1laS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZmRkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9uYW1laS5jCkBAIC0wLDAgKzEsMzQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBBdmlzaGF5IFRyYWVnZXIgKGF2aXNoYXlAZ21haWwuY29tKSAoYXZpc2hheUBpbC5pYm0uY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkKKyAqIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKgorICogQ29weXJpZ2h0cyBmb3IgY29kZSB0YWtlbiBmcm9tIGV4dDI6CisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiAgICAgUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogICAgIExhYm9yYXRvaXJlIE1BU0kgLSBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICogICAgIGZyb20KKyAqICAgICBsaW51eC9mcy9taW5peC9pbm9kZS5jCisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGV4b2ZzLgorICoKKyAqIGV4b2ZzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgU2luY2UgaXQgaXMgYmFzZWQgb24gZXh0MiwgYW5kIHRoZSBvbmx5CisgKiB2YWxpZCB2ZXJzaW9uIG9mIEdQTCBmb3IgdGhlIExpbnV4IGtlcm5lbCBpcyB2ZXJzaW9uIDIsIHRoZSBvbmx5IHZhbGlkCisgKiB2ZXJzaW9uIG9mIEdQTCBmb3IgZXhvZnMgaXMgdmVyc2lvbiAyLgorICoKKyAqIGV4b2ZzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBleG9mczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiZXhvZnMuaCIKKworc3RhdGljIGlubGluZSBpbnQgZXhvZnNfYWRkX25vbmRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaW50IGVyciA9IGV4b2ZzX2FkZF9saW5rKGRlbnRyeSwgaW5vZGUpOworCWlmICghZXJyKSB7CisJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJCXJldHVybiAwOworCX0KKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJaXB1dChpbm9kZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmV4b2ZzX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCSAgIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW5vX3QgaW5vOworCisJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IEVYT0ZTX05BTUVfTEVOKQorCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKKworCWlubyA9IGV4b2ZzX2lub2RlX2J5X25hbWUoZGlyLCBkZW50cnkpOworCWlub2RlID0gTlVMTDsKKwlpZiAoaW5vKSB7CisJCWlub2RlID0gZXhvZnNfaWdldChkaXItPmlfc2IsIGlubyk7CisJCWlmIChJU19FUlIoaW5vZGUpKQorCQkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKKwl9CisJcmV0dXJuIGRfc3BsaWNlX2FsaWFzKGlub2RlLCBkZW50cnkpOworfQorCitzdGF0aWMgaW50IGV4b2ZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKKwkJCSBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZXhvZnNfbmV3X2lub2RlKGRpciwgbW9kZSk7CisJaW50IGVyciA9IFBUUl9FUlIoaW5vZGUpOworCWlmICghSVNfRVJSKGlub2RlKSkgeworCQlpbm9kZS0+aV9vcCA9ICZleG9mc19maWxlX2lub2RlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX2ZvcCA9ICZleG9mc19maWxlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmV4b2ZzX2FvcHM7CisJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCQllcnIgPSBleG9mc19hZGRfbm9uZGlyKGRlbnRyeSwgaW5vZGUpOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGV4b2ZzX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAorCQkgICAgICAgZGV2X3QgcmRldikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCBlcnI7CisKKwlpZiAoIW5ld192YWxpZF9kZXYocmRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5vZGUgPSBleG9mc19uZXdfaW5vZGUoZGlyLCBtb2RlKTsKKwllcnIgPSBQVFJfRVJSKGlub2RlKTsKKwlpZiAoIUlTX0VSUihpbm9kZSkpIHsKKwkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCByZGV2KTsKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJCWVyciA9IGV4b2ZzX2FkZF9ub25kaXIoZGVudHJ5LCBpbm9kZSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICBjb25zdCBjaGFyICpzeW1uYW1lKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7CisJaW50IGVyciA9IC1FTkFNRVRPT0xPTkc7CisJdW5zaWduZWQgbCA9IHN0cmxlbihzeW1uYW1lKSsxOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2k7CisKKwlpZiAobCA+IHNiLT5zX2Jsb2Nrc2l6ZSkKKwkJZ290byBvdXQ7CisKKwlpbm9kZSA9IGV4b2ZzX25ld19pbm9kZShkaXIsIFNfSUZMTksgfCBTX0lSV1hVR08pOworCWVyciA9IFBUUl9FUlIoaW5vZGUpOworCWlmIChJU19FUlIoaW5vZGUpKQorCQlnb3RvIG91dDsKKworCW9pID0gZXhvZnNfaShpbm9kZSk7CisJaWYgKGwgPiBzaXplb2Yob2ktPmlfZGF0YSkpIHsKKwkJLyogc2xvdyBzeW1saW5rICovCisJCWlub2RlLT5pX29wID0gJmV4b2ZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmZXhvZnNfYW9wczsKKwkJbWVtc2V0KG9pLT5pX2RhdGEsIDAsIHNpemVvZihvaS0+aV9kYXRhKSk7CisKKwkJZXJyID0gcGFnZV9zeW1saW5rKGlub2RlLCBzeW1uYW1lLCBsKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X2ZhaWw7CisJfSBlbHNlIHsKKwkJLyogZmFzdCBzeW1saW5rICovCisJCWlub2RlLT5pX29wID0gJmV4b2ZzX2Zhc3Rfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOworCQltZW1jcHkob2ktPmlfZGF0YSwgc3ltbmFtZSwgbCk7CisJCWlub2RlLT5pX3NpemUgPSBsLTE7CisJfQorCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCisJZXJyID0gZXhvZnNfYWRkX25vbmRpcihkZW50cnksIGlub2RlKTsKK291dDoKKwlyZXR1cm4gZXJyOworCitvdXRfZmFpbDoKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJaXB1dChpbm9kZSk7CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOworCisJaWYgKGlub2RlLT5pX25saW5rID49IEVYT0ZTX0xJTktfTUFYKQorCQlyZXR1cm4gLUVNTElOSzsKKworCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCWlub2RlX2luY19saW5rX2NvdW50KGlub2RlKTsKKwlhdG9taWNfaW5jKCZpbm9kZS0+aV9jb3VudCk7CisKKwlyZXR1cm4gZXhvZnNfYWRkX25vbmRpcihkZW50cnksIGlub2RlKTsKK30KKworc3RhdGljIGludCBleG9mc19ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCBlcnIgPSAtRU1MSU5LOworCisJaWYgKGRpci0+aV9ubGluayA+PSBFWE9GU19MSU5LX01BWCkKKwkJZ290byBvdXQ7CisKKwlpbm9kZV9pbmNfbGlua19jb3VudChkaXIpOworCisJaW5vZGUgPSBleG9mc19uZXdfaW5vZGUoZGlyLCBTX0lGRElSIHwgbW9kZSk7CisJZXJyID0gUFRSX0VSUihpbm9kZSk7CisJaWYgKElTX0VSUihpbm9kZSkpCisJCWdvdG8gb3V0X2RpcjsKKworCWlub2RlLT5pX29wID0gJmV4b2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworCWlub2RlLT5pX2ZvcCA9ICZleG9mc19kaXJfb3BlcmF0aW9uczsKKwlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZleG9mc19hb3BzOworCisJaW5vZGVfaW5jX2xpbmtfY291bnQoaW5vZGUpOworCisJZXJyID0gZXhvZnNfbWFrZV9lbXB0eShpbm9kZSwgZGlyKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mYWlsOworCisJZXJyID0gZXhvZnNfYWRkX2xpbmsoZGVudHJ5LCBpbm9kZSk7CisJaWYgKGVycikKKwkJZ290byBvdXRfZmFpbDsKKworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CitvdXQ6CisJcmV0dXJuIGVycjsKKworb3V0X2ZhaWw6CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOworCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKKwlpcHV0KGlub2RlKTsKK291dF9kaXI6CisJaW5vZGVfZGVjX2xpbmtfY291bnQoZGlyKTsKKwlnb3RvIG91dDsKK30KKworc3RhdGljIGludCBleG9mc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBleG9mc19kaXJfZW50cnkgKmRlOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBlcnIgPSAtRU5PRU5UOworCisJZGUgPSBleG9mc19maW5kX2VudHJ5KGRpciwgZGVudHJ5LCAmcGFnZSk7CisJaWYgKCFkZSkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBleG9mc19kZWxldGVfZW50cnkoZGUsIHBhZ2UpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWU7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOworCWVyciA9IDA7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBleG9mc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJaW50IGVyciA9IC1FTk9URU1QVFk7CisKKwlpZiAoZXhvZnNfZW1wdHlfZGlyKGlub2RlKSkgeworCQllcnIgPSBleG9mc191bmxpbmsoZGlyLCBkZW50cnkpOworCQlpZiAoIWVycikgeworCQkJaW5vZGUtPmlfc2l6ZSA9IDA7CisJCQlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CisJCQlpbm9kZV9kZWNfbGlua19jb3VudChkaXIpOworCQl9CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZXhvZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKKwkJc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQoreworCXN0cnVjdCBpbm9kZSAqb2xkX2lub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZSA9IG5ld19kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHBhZ2UgKmRpcl9wYWdlID0gTlVMTDsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpkaXJfZGUgPSBOVUxMOworCXN0cnVjdCBwYWdlICpvbGRfcGFnZTsKKwlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpvbGRfZGU7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwlvbGRfZGUgPSBleG9mc19maW5kX2VudHJ5KG9sZF9kaXIsIG9sZF9kZW50cnksICZvbGRfcGFnZSk7CisJaWYgKCFvbGRfZGUpCisJCWdvdG8gb3V0OworCisJaWYgKFNfSVNESVIob2xkX2lub2RlLT5pX21vZGUpKSB7CisJCWVyciA9IC1FSU87CisJCWRpcl9kZSA9IGV4b2ZzX2RvdGRvdChvbGRfaW5vZGUsICZkaXJfcGFnZSk7CisJCWlmICghZGlyX2RlKQorCQkJZ290byBvdXRfb2xkOworCX0KKworCWlmIChuZXdfaW5vZGUpIHsKKwkJc3RydWN0IHBhZ2UgKm5ld19wYWdlOworCQlzdHJ1Y3QgZXhvZnNfZGlyX2VudHJ5ICpuZXdfZGU7CisKKwkJZXJyID0gLUVOT1RFTVBUWTsKKwkJaWYgKGRpcl9kZSAmJiAhZXhvZnNfZW1wdHlfZGlyKG5ld19pbm9kZSkpCisJCQlnb3RvIG91dF9kaXI7CisKKwkJZXJyID0gLUVOT0VOVDsKKwkJbmV3X2RlID0gZXhvZnNfZmluZF9lbnRyeShuZXdfZGlyLCBuZXdfZGVudHJ5LCAmbmV3X3BhZ2UpOworCQlpZiAoIW5ld19kZSkKKwkJCWdvdG8gb3V0X2RpcjsKKwkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwkJZXJyID0gZXhvZnNfc2V0X2xpbmsobmV3X2RpciwgbmV3X2RlLCBuZXdfcGFnZSwgb2xkX2lub2RlKTsKKwkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCQlpZiAoZGlyX2RlKQorCQkJZHJvcF9ubGluayhuZXdfaW5vZGUpOworCQlpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfZGlyOworCX0gZWxzZSB7CisJCWlmIChkaXJfZGUpIHsKKwkJCWVyciA9IC1FTUxJTks7CisJCQlpZiAobmV3X2Rpci0+aV9ubGluayA+PSBFWE9GU19MSU5LX01BWCkKKwkJCQlnb3RvIG91dF9kaXI7CisJCX0KKwkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwkJZXJyID0gZXhvZnNfYWRkX2xpbmsobmV3X2RlbnRyeSwgb2xkX2lub2RlKTsKKwkJaWYgKGVycikgeworCQkJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwkJCWdvdG8gb3V0X2RpcjsKKwkJfQorCQlpZiAoZGlyX2RlKQorCQkJaW5vZGVfaW5jX2xpbmtfY291bnQobmV3X2Rpcik7CisJfQorCisJb2xkX2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCisJZXhvZnNfZGVsZXRlX2VudHJ5KG9sZF9kZSwgb2xkX3BhZ2UpOworCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisKKwlpZiAoZGlyX2RlKSB7CisJCWVyciA9IGV4b2ZzX3NldF9saW5rKG9sZF9pbm9kZSwgZGlyX2RlLCBkaXJfcGFnZSwgbmV3X2Rpcik7CisJCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9kaXIpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfZGlyOworCX0KKwlyZXR1cm4gMDsKKworCitvdXRfZGlyOgorCWlmIChkaXJfZGUpIHsKKwkJa3VubWFwKGRpcl9wYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKGRpcl9wYWdlKTsKKwl9CitvdXRfb2xkOgorCWt1bm1hcChvbGRfcGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkuY3JlYXRlIAk9IGV4b2ZzX2NyZWF0ZSwKKwkubG9va3VwIAk9IGV4b2ZzX2xvb2t1cCwKKwkubGluayAgIAk9IGV4b2ZzX2xpbmssCisJLnVubGluayAJPSBleG9mc191bmxpbmssCisJLnN5bWxpbmsJPSBleG9mc19zeW1saW5rLAorCS5ta2RpciAgCT0gZXhvZnNfbWtkaXIsCisJLnJtZGlyICAJPSBleG9mc19ybWRpciwKKwkubWtub2QgIAk9IGV4b2ZzX21rbm9kLAorCS5yZW5hbWUgCT0gZXhvZnNfcmVuYW1lLAorCS5zZXRhdHRyCT0gZXhvZnNfc2V0YXR0ciwKK307CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGV4b2ZzX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkuc2V0YXR0cgk9IGV4b2ZzX3NldGF0dHIsCit9OwpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvb3NkLmMgYi9mcy9leG9mcy9vc2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjQ5YWU5Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZXhvZnMvb3NkLmMKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYKKyAqIEF2aXNoYXkgVHJhZWdlciAoYXZpc2hheUBnbWFpbC5jb20pIChhdmlzaGF5QGlsLmlibS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYKKyAqIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOQorICogQm9heiBIYXJyb3NoIDxiaGFycm9zaEBwYW5hc2FzLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL29zZF9zZW5zZS5oPgorCisjaW5jbHVkZSAiZXhvZnMuaCIKKworaW50IGV4b2ZzX2NoZWNrX29rX3Jlc2lkKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIHU2NCAqaW5fcmVzaWQsIHU2NCAqb3V0X3Jlc2lkKQoreworCXN0cnVjdCBvc2Rfc2Vuc2VfaW5mbyBvc2k7CisJaW50IHJldCA9IG9zZF9yZXFfZGVjb2RlX3NlbnNlKG9yLCAmb3NpKTsKKworCWlmIChyZXQpIHsgLyogdHJhbnNsYXRlIHRvIExpbnV4IGNvZGVzICovCisJCWlmIChvc2kuYWRkaXRpb25hbF9jb2RlID09IHNjc2lfaW52YWxpZF9maWVsZF9pbl9jZGIpIHsKKwkJCWlmIChvc2kuY2RiX2ZpZWxkX29mZnNldCA9PSBPU0RfQ0ZPX1NUQVJUSU5HX0JZVEUpCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWlmIChvc2kuY2RiX2ZpZWxkX29mZnNldCA9PSBPU0RfQ0ZPX09CSkVDVF9JRCkKKwkJCQlyZXQgPSAtRU5PRU5UOworCQkJZWxzZQorCQkJCXJldCA9IC1FSU5WQUw7CisJCX0gZWxzZSBpZiAob3NpLmFkZGl0aW9uYWxfY29kZSA9PSBvc2RfcXVvdGFfZXJyb3IpCisJCQlyZXQgPSAtRU5PU1BDOworCQllbHNlCisJCQlyZXQgPSAtRUlPOworCX0KKworCS8qIEZJWE1FOiBzaG91bGQgYmUgaW5jbHVkZSBpbiBvc2Rfc2Vuc2VfaW5mbyAqLworCWlmIChpbl9yZXNpZCkKKwkJKmluX3Jlc2lkID0gb3ItPmluLnJlcSA/IG9yLT5pbi5yZXEtPmRhdGFfbGVuIDogMDsKKworCWlmIChvdXRfcmVzaWQpCisJCSpvdXRfcmVzaWQgPSBvci0+b3V0LnJlcSA/IG9yLT5vdXQucmVxLT5kYXRhX2xlbiA6IDA7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGV4b2ZzX21ha2VfY3JlZGVudGlhbCh1OCBjcmVkX2FbT1NEX0NBUF9MRU5dLCBjb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqKQoreworCW9zZF9zZWNfaW5pdF9ub3NlY19kb2FsbF9jYXBzKGNyZWRfYSwgb2JqLCBmYWxzZSwgdHJ1ZSk7Cit9CisKKy8qCisgKiBQZXJmb3JtIGEgc3luY2hyb25vdXMgT1NEIG9wZXJhdGlvbi4KKyAqLworaW50IGV4b2ZzX3N5bmNfb3Aoc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwgaW50IHRpbWVvdXQsIHVpbnQ4X3QgKmNyZWRlbnRpYWwpCit7CisJaW50IHJldDsKKworCW9yLT50aW1lb3V0ID0gdGltZW91dDsKKwlyZXQgPSBvc2RfZmluYWxpemVfcmVxdWVzdChvciwgMCwgY3JlZGVudGlhbCwgTlVMTCk7CisJaWYgKHJldCkgeworCQlFWE9GU19EQkdNU0coIkZhaWxkIHRvIG9zZF9maW5hbGl6ZV9yZXF1ZXN0KCkgPT4gJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb3NkX2V4ZWN1dGVfcmVxdWVzdChvcik7CisKKwlpZiAocmV0KQorCQlFWE9GU19EQkdNU0coIm9zZF9leGVjdXRlX3JlcXVlc3QoKSA9PiAlZFxuIiwgcmV0KTsKKwkvKiBvc2RfcmVxX2RlY29kZV9zZW5zZShvciwgcmV0KTsgKi8KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgT1NEIG9wZXJhdGlvbi4KKyAqLworaW50IGV4b2ZzX2FzeW5jX29wKHN0cnVjdCBvc2RfcmVxdWVzdCAqb3IsIG9zZF9yZXFfZG9uZV9mbiAqYXN5bmNfZG9uZSwKKwkJICAgdm9pZCAqY2FsbGVyX2NvbnRleHQsIHU4ICpjcmVkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBvc2RfZmluYWxpemVfcmVxdWVzdChvciwgMCwgY3JlZCwgTlVMTCk7CisJaWYgKHJldCkgeworCQlFWE9GU19EQkdNU0coIkZhaWxkIHRvIG9zZF9maW5hbGl6ZV9yZXF1ZXN0KCkgPT4gJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gb3NkX2V4ZWN1dGVfcmVxdWVzdF9hc3luYyhvciwgYXN5bmNfZG9uZSwgY2FsbGVyX2NvbnRleHQpOworCisJaWYgKHJldCkKKwkJRVhPRlNfREJHTVNHKCJvc2RfZXhlY3V0ZV9yZXF1ZXN0X2FzeW5jKCkgPT4gJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGV4dHJhY3RfYXR0cl9mcm9tX3JlcShzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLCBzdHJ1Y3Qgb3NkX2F0dHIgKmF0dHIpCit7CisJc3RydWN0IG9zZF9hdHRyIGN1cl9hdHRyID0gey5hdHRyX3BhZ2UgPSAwfTsgLyogc3RhcnQgd2l0aCB6ZXJvcyAqLworCXZvaWQgKml0ZXIgPSBOVUxMOworCWludCBuZWxlbTsKKworCWRvIHsKKwkJbmVsZW0gPSAxOworCQlvc2RfcmVxX2RlY29kZV9nZXRfYXR0cl9saXN0KG9yLCAmY3VyX2F0dHIsICZuZWxlbSwgJml0ZXIpOworCQlpZiAoKGN1cl9hdHRyLmF0dHJfcGFnZSA9PSBhdHRyLT5hdHRyX3BhZ2UpICYmCisJCSAgICAoY3VyX2F0dHIuYXR0cl9pZCA9PSBhdHRyLT5hdHRyX2lkKSkgeworCQkJYXR0ci0+bGVuID0gY3VyX2F0dHIubGVuOworCQkJYXR0ci0+dmFsX3B0ciA9IGN1cl9hdHRyLnZhbF9wdHI7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gd2hpbGUgKGl0ZXIpOworCisJcmV0dXJuIC1FSU87Cit9CisKK2ludCBvc2RfcmVxX3JlYWRfa2VybihzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yLAorCWNvbnN0IHN0cnVjdCBvc2Rfb2JqX2lkICpvYmosIHU2NCBvZmZzZXQsIHZvaWQqIGJ1ZmYsIHU2NCBsZW4pCit7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnJlcV9xID0gb3ItPm9zZF9kZXYtPnNjc2lfZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlOworCXN0cnVjdCBiaW8gKmJpbyA9IGJpb19tYXBfa2VybihyZXFfcSwgYnVmZiwgbGVuLCBHRlBfS0VSTkVMKTsKKworCWlmICghYmlvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW9zZF9yZXFfcmVhZChvciwgb2JqLCBiaW8sIG9mZnNldCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBvc2RfcmVxX3dyaXRlX2tlcm4oc3RydWN0IG9zZF9yZXF1ZXN0ICpvciwKKwljb25zdCBzdHJ1Y3Qgb3NkX29ial9pZCAqb2JqLCB1NjQgb2Zmc2V0LCB2b2lkKiBidWZmLCB1NjQgbGVuKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpyZXFfcSA9IG9yLT5vc2RfZGV2LT5zY3NpX2RldmljZS0+cmVxdWVzdF9xdWV1ZTsKKwlzdHJ1Y3QgYmlvICpiaW8gPSBiaW9fbWFwX2tlcm4ocmVxX3EsIGJ1ZmYsIGxlbiwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJpbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvc2RfcmVxX3dyaXRlKG9yLCBvYmosIGJpbywgb2Zmc2V0KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL3N1cGVyLmMgYi9mcy9leG9mcy9zdXBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMTk4NWUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9zdXBlci5jCkBAIC0wLDAgKzEsNTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBBdmlzaGF5IFRyYWVnZXIgKGF2aXNoYXlAZ21haWwuY29tKSAoYXZpc2hheUBpbC5pYm0uY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2CisgKiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkKKyAqIEJvYXogSGFycm9zaCA8YmhhcnJvc2hAcGFuYXNhcy5jb20+CisgKgorICogQ29weXJpZ2h0cyBmb3IgY29kZSB0YWtlbiBmcm9tIGV4dDI6CisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1CisgKiAgICAgUmVteSBDYXJkIChjYXJkQG1hc2kuaWJwLmZyKQorICogICAgIExhYm9yYXRvaXJlIE1BU0kgLSBJbnN0aXR1dCBCbGFpc2UgUGFzY2FsCisgKiAgICAgVW5pdmVyc2l0ZSBQaWVycmUgZXQgTWFyaWUgQ3VyaWUgKFBhcmlzIFZJKQorICogICAgIGZyb20KKyAqICAgICBsaW51eC9mcy9taW5peC9pbm9kZS5jCisgKiAgICAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGV4b2ZzLgorICoKKyAqIGV4b2ZzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgU2luY2UgaXQgaXMgYmFzZWQgb24gZXh0MiwgYW5kIHRoZSBvbmx5CisgKiB2YWxpZCB2ZXJzaW9uIG9mIEdQTCBmb3IgdGhlIExpbnV4IGtlcm5lbCBpcyB2ZXJzaW9uIDIsIHRoZSBvbmx5IHZhbGlkCisgKiB2ZXJzaW9uIG9mIEdQTCBmb3IgZXhvZnMgaXMgdmVyc2lvbiAyLgorICoKKyAqIGV4b2ZzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCBleG9mczsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CisjaW5jbHVkZSA8bGludXgvdmZzLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KKworI2luY2x1ZGUgImV4b2ZzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1PVU5UIE9QVElPTlMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHN0cnVjdCB0byBob2xkIHdoYXQgd2UgZ2V0IGZyb20gbW91bnQgb3B0aW9ucworICovCitzdHJ1Y3QgZXhvZnNfbW91bnRvcHQgeworCWNvbnN0IGNoYXIgKmRldl9uYW1lOworCXVpbnQ2NF90IHBpZDsKKwlpbnQgdGltZW91dDsKK307CisKKy8qCisgKiBleG9mcy1zcGVjaWZpYyBtb3VudC10aW1lIG9wdGlvbnMuCisgKi8KK2VudW0geyBPcHRfcGlkLCBPcHRfdG8sIE9wdF9ta2ZzLCBPcHRfZm9ybWF0LCBPcHRfZXJyIH07CisKKy8qCisgKiBPdXIgbW91bnQtdGltZSBvcHRpb25zLiAgVGhlc2Ugc2hvdWxkIGlkZWFsbHkgYmUgNjQtYml0IHVuc2lnbmVkLCBidXQgdGhlCisgKiBrZXJuZWwncyBwYXJzaW5nIGZ1bmN0aW9ucyBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhhdC4gIDMyLWJpdCBzaG91bGQgYmUKKyAqIHN1ZmZpY2llbnQgZm9yIG1vc3QgYXBwbGljYXRpb25zIG5vdy4KKyAqLworc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0geworCXtPcHRfcGlkLCAicGlkPSV1In0sCisJe09wdF90bywgInRvPSV1In0sCisJe09wdF9lcnIsIE5VTEx9Cit9OworCisvKgorICogVGhlIG1haW4gb3B0aW9uIHBhcnNpbmcgbWV0aG9kLiAgQWxzbyBtYWtlcyBzdXJlIHRoYXQgYWxsIG9mIHRoZSBtYW5kYXRvcnkKKyAqIG1vdW50IG9wdGlvbnMgd2VyZSBzZXQuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2Vfb3B0aW9ucyhjaGFyICpvcHRpb25zLCBzdHJ1Y3QgZXhvZnNfbW91bnRvcHQgKm9wdHMpCit7CisJY2hhciAqcDsKKwlzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107CisJaW50IG9wdGlvbjsKKwlib29sIHNfcGlkID0gZmFsc2U7CisKKwlFWE9GU19EQkdNU0coInBhcnNlX29wdGlvbnMgJXNcbiIsIG9wdGlvbnMpOworCS8qIGRlZmF1bHRzICovCisJbWVtc2V0KG9wdHMsIDAsIHNpemVvZigqb3B0cykpOworCW9wdHMtPnRpbWVvdXQgPSBCTEtfREVGQVVMVF9TR19USU1FT1VUOworCisJd2hpbGUgKChwID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7CisJCWludCB0b2tlbjsKKwkJY2hhciBzdHJbMzJdOworCisJCWlmICghKnApCisJCQljb250aW51ZTsKKworCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHRva2VucywgYXJncyk7CisJCXN3aXRjaCAodG9rZW4pIHsKKwkJY2FzZSBPcHRfcGlkOgorCQkJaWYgKDAgPT0gbWF0Y2hfc3RybGNweShzdHIsICZhcmdzWzBdLCBzaXplb2Yoc3RyKSkpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlvcHRzLT5waWQgPSBzaW1wbGVfc3RydG91bGwoc3RyLCBOVUxMLCAwKTsKKwkJCWlmIChvcHRzLT5waWQgPCBFWE9GU19NSU5fUElEKSB7CisJCQkJRVhPRlNfRVJSKCJQYXJ0aXRpb24gSUQgbXVzdCBiZSA+PSAldSIsCisJCQkJCSAgRVhPRlNfTUlOX1BJRCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlzX3BpZCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfdG86CisJCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWlmIChvcHRpb24gPD0gMCkgeworCQkJCUVYT0ZTX0VSUigiVGltb3V0IG11c3QgYmUgPiAwIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlvcHRzLT50aW1lb3V0ID0gb3B0aW9uICogSFo7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghc19waWQpIHsKKwkJRVhPRlNfRVJSKCJOZWVkIHRvIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBvcHRpb25zOlxuIik7CisJCUVYT0ZTX0VSUigiICAgIC1vIHBpZD1waWRfbm9fdG9fdXNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElOT0RFIENBQ0hFCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBPdXIgaW5vZGUgY2FjaGUuICBJc24ndCBpdCBwcmV0dHk/CisgKi8KK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZXhvZnNfaW5vZGVfY2FjaGVwOworCisvKgorICogQWxsb2NhdGUgYW4gaW5vZGUgaW4gdGhlIGNhY2hlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4b2ZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2k7CisKKwlvaSA9IGttZW1fY2FjaGVfYWxsb2MoZXhvZnNfaW5vZGVfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9pKQorCQlyZXR1cm4gTlVMTDsKKworCW9pLT52ZnNfaW5vZGUuaV92ZXJzaW9uID0gMTsKKwlyZXR1cm4gJm9pLT52ZnNfaW5vZGU7Cit9CisKKy8qCisgKiBSZW1vdmUgYW4gaW5vZGUgZnJvbSB0aGUgY2FjaGUKKyAqLworc3RhdGljIHZvaWQgZXhvZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWttZW1fY2FjaGVfZnJlZShleG9mc19pbm9kZV9jYWNoZXAsIGV4b2ZzX2koaW5vZGUpKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGlub2RlCisgKi8KK3N0YXRpYyB2b2lkIGV4b2ZzX2luaXRfb25jZSh2b2lkICpmb28pCit7CisJc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kgPSBmb287CisKKwlpbm9kZV9pbml0X29uY2UoJm9pLT52ZnNfaW5vZGUpOworfQorCisvKgorICogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBpbm9kZSBjYWNoZQorICovCitzdGF0aWMgaW50IGluaXRfaW5vZGVjYWNoZSh2b2lkKQoreworCWV4b2ZzX2lub2RlX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJleG9mc19pbm9kZV9jYWNoZSIsCisJCQkJc2l6ZW9mKHN0cnVjdCBleG9mc19pX2luZm8pLCAwLAorCQkJCVNMQUJfUkVDTEFJTV9BQ0NPVU5UIHwgU0xBQl9NRU1fU1BSRUFELAorCQkJCWV4b2ZzX2luaXRfb25jZSk7CisJaWYgKGV4b2ZzX2lub2RlX2NhY2hlcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERlc3Ryb3kgdGhlIGlub2RlIGNhY2hlCisgKi8KK3N0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShleG9mc19pbm9kZV9jYWNoZXApOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTVVBFUkJMT0NLIEZVTkNUSU9OUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4b2ZzX3NvcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGV4b2ZzX2V4cG9ydF9vcHM7CisKKy8qCisgKiBXcml0ZSB0aGUgc3VwZXJibG9jayB0byB0aGUgT1NECisgKi8KK3N0YXRpYyB2b2lkIGV4b2ZzX3dyaXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaTsKKwlzdHJ1Y3QgZXhvZnNfZnNjYiAqZnNjYjsKKwlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yOworCXN0cnVjdCBvc2Rfb2JqX2lkIG9iajsKKwlpbnQgcmV0OworCisJZnNjYiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBleG9mc19mc2NiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmc2NiKSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfd3JpdGVfc3VwZXI6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOworCQlyZXR1cm47CisJfQorCisJbG9ja19rZXJuZWwoKTsKKwlzYmkgPSBzYi0+c19mc19pbmZvOworCWZzY2ItPnNfbmV4dGlkID0gY3B1X3RvX2xlNjQoc2JpLT5zX25leHRpZCk7CisJZnNjYi0+c19udW1maWxlcyA9IGNwdV90b19sZTMyKHNiaS0+c19udW1maWxlcyk7CisJZnNjYi0+c19tYWdpYyA9IGNwdV90b19sZTE2KHNiLT5zX21hZ2ljKTsKKwlmc2NiLT5zX25ld2ZzID0gMDsKKworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3Qoc2JpLT5zX2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJRVhPRlNfRVJSKCJleG9mc193cml0ZV9zdXBlcjogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkLlxuIik7CisJCWdvdG8gb3V0OworCX0KKworCW9iai5wYXJ0aXRpb24gPSBzYmktPnNfcGlkOworCW9iai5pZCA9IEVYT0ZTX1NVUEVSX0lEOworCXJldCA9IG9zZF9yZXFfd3JpdGVfa2VybihvciwgJm9iaiwgMCwgZnNjYiwgc2l6ZW9mKCpmc2NiKSk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJRVhPRlNfRVJSKCJleG9mc193cml0ZV9zdXBlcjogb3NkX3JlcV93cml0ZV9rZXJuIGZhaWxlZC5cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBleG9mc19zeW5jX29wKG9yLCBzYmktPnNfdGltZW91dCwgc2JpLT5zX2NyZWQpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUVYT0ZTX0VSUigiZXhvZnNfd3JpdGVfc3VwZXI6IGV4b2ZzX3N5bmNfb3AgZmFpbGVkLlxuIik7CisJCWdvdG8gb3V0OworCX0KKwlzYi0+c19kaXJ0ID0gMDsKKworb3V0OgorCWlmIChvcikKKwkJb3NkX2VuZF9yZXF1ZXN0KG9yKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJa2ZyZWUoZnNjYik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB2ZnMgaXMgZnJlZWluZyB0aGUgc3VwZXJibG9jay4gIFdlIGp1c3QKKyAqIG5lZWQgdG8gZnJlZSBvdXIgb3duIHBhcnQuCisgKi8KK3N0YXRpYyB2b2lkIGV4b2ZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCBudW1fcGVuZDsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gc2ItPnNfZnNfaW5mbzsKKworCS8qIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcGVuZGluZyBjb21tYW5kcyAqLworCWZvciAobnVtX3BlbmQgPSBhdG9taWNfcmVhZCgmc2JpLT5zX2N1cnJfcGVuZGluZyk7IG51bV9wZW5kID4gMDsKKwkgICAgIG51bV9wZW5kID0gYXRvbWljX3JlYWQoJnNiaS0+c19jdXJyX3BlbmRpbmcpKSB7CisJCXdhaXRfcXVldWVfaGVhZF90IHdxOworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3cSk7CisJCXdhaXRfZXZlbnRfdGltZW91dCh3cSwKKwkJCQkgIChhdG9taWNfcmVhZCgmc2JpLT5zX2N1cnJfcGVuZGluZykgPT0gMCksCisJCQkJICBtc2Vjc190b19qaWZmaWVzKDEwMCkpOworCX0KKworCW9zZHVsZF9wdXRfZGV2aWNlKHNiaS0+c19kZXYpOworCWtmcmVlKHNiLT5zX2ZzX2luZm8pOworCXNiLT5zX2ZzX2luZm8gPSBOVUxMOworfQorCisvKgorICogUmVhZCB0aGUgc3VwZXJibG9jayBmcm9tIHRoZSBPU0QgYW5kIGZpbGwgaW4gdGhlIGZpZWxkcworICovCitzdGF0aWMgaW50IGV4b2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKnJvb3Q7CisJc3RydWN0IGV4b2ZzX21vdW50b3B0ICpvcHRzID0gZGF0YTsKKwlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpOwkvKmV4dGVuZGVkIGluZm8gICAgICAgICAgICAgICAgICAqLworCXN0cnVjdCBleG9mc19mc2NiIGZzY2I7CQkvKm9uLWRpc2sgc3VwZXJibG9jayBpbmZvICAgICAgICAqLworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3IgPSBOVUxMOworCXN0cnVjdCBvc2Rfb2JqX2lkIG9iajsKKwlpbnQgcmV0OworCisJc2JpID0ga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOworCWlmICghc2JpKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzYi0+c19mc19pbmZvID0gc2JpOworCisJLyogdXNlIG1vdW50IG9wdGlvbnMgdG8gZmlsbCBzdXBlcmJsb2NrICovCisJc2JpLT5zX2RldiA9IG9zZHVsZF9wYXRoX2xvb2t1cChvcHRzLT5kZXZfbmFtZSk7CisJaWYgKElTX0VSUihzYmktPnNfZGV2KSkgeworCQlyZXQgPSBQVFJfRVJSKHNiaS0+c19kZXYpOworCQlzYmktPnNfZGV2ID0gTlVMTDsKKwkJZ290byBmcmVlX3NiaTsKKwl9CisKKwlzYmktPnNfcGlkID0gb3B0cy0+cGlkOworCXNiaS0+c190aW1lb3V0ID0gb3B0cy0+dGltZW91dDsKKworCS8qIGZpbGwgaW4gc29tZSBvdGhlciBkYXRhIGJ5IGhhbmQgKi8KKwltZW1zZXQoc2ItPnNfaWQsIDAsIHNpemVvZihzYi0+c19pZCkpOworCXN0cmNweShzYi0+c19pZCwgImV4b2ZzIik7CisJc2ItPnNfYmxvY2tzaXplID0gRVhPRlNfQkxLU0laRTsKKwlzYi0+c19ibG9ja3NpemVfYml0cyA9IEVYT0ZTX0JMS1NISUZUOworCXNiLT5zX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKKwlhdG9taWNfc2V0KCZzYmktPnNfY3Vycl9wZW5kaW5nLCAwKTsKKwlzYi0+c19iZGV2ID0gTlVMTDsKKwlzYi0+c19kZXYgPSAwOworCisJLyogcmVhZCBkYXRhIGZyb20gb24tZGlzayBzdXBlcmJsb2NrIG9iamVjdCAqLworCW9iai5wYXJ0aXRpb24gPSBzYmktPnNfcGlkOworCW9iai5pZCA9IEVYT0ZTX1NVUEVSX0lEOworCWV4b2ZzX21ha2VfY3JlZGVudGlhbChzYmktPnNfY3JlZCwgJm9iaik7CisKKwlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHNiaS0+c19kZXYsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghb3IpKSB7CisJCWlmICghc2lsZW50KQorCQkJRVhPRlNfRVJSKAorCQkJICAgICAgICJleG9mc19maWxsX3N1cGVyOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWQuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX3NiaTsKKwl9CisJcmV0ID0gb3NkX3JlcV9yZWFkX2tlcm4ob3IsICZvYmosIDAsICZmc2NiLCBzaXplb2YoZnNjYikpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWlmICghc2lsZW50KQorCQkJRVhPRlNfRVJSKAorCQkJICAgICAgICJleG9mc19maWxsX3N1cGVyOiBvc2RfcmVxX3JlYWRfa2VybiBmYWlsZWQuXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX3NiaTsKKwl9CisKKwlyZXQgPSBleG9mc19zeW5jX29wKG9yLCBzYmktPnNfdGltZW91dCwgc2JpLT5zX2NyZWQpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWlmICghc2lsZW50KQorCQkJRVhPRlNfRVJSKCJleG9mc19maWxsX3N1cGVyOiBleG9mc19zeW5jX29wIGZhaWxlZC5cbiIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGZyZWVfc2JpOworCX0KKworCXNiLT5zX21hZ2ljID0gbGUxNl90b19jcHUoZnNjYi5zX21hZ2ljKTsKKwlzYmktPnNfbmV4dGlkID0gbGU2NF90b19jcHUoZnNjYi5zX25leHRpZCk7CisJc2JpLT5zX251bWZpbGVzID0gbGUzMl90b19jcHUoZnNjYi5zX251bWZpbGVzKTsKKworCS8qIG1ha2Ugc3VyZSB3aGF0IHdlIHJlYWQgZnJvbSB0aGUgb2JqZWN0IHN0b3JlIGlzIGNvcnJlY3QgKi8KKwlpZiAoc2ItPnNfbWFnaWMgIT0gRVhPRlNfU1VQRVJfTUFHSUMpIHsKKwkJaWYgKCFzaWxlbnQpCisJCQlFWE9GU19FUlIoIkVSUk9SOiBCYWQgbWFnaWMgdmFsdWVcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZyZWVfc2JpOworCX0KKworCS8qIHN0YXJ0IGdlbmVyYXRpb24gbnVtYmVycyBmcm9tIGEgcmFuZG9tIHBvaW50ICovCisJZ2V0X3JhbmRvbV9ieXRlcygmc2JpLT5zX25leHRfZ2VuZXJhdGlvbiwgc2l6ZW9mKHUzMikpOworCXNwaW5fbG9ja19pbml0KCZzYmktPnNfbmV4dF9nZW5fbG9jayk7CisKKwkvKiBzZXQgdXAgb3BlcmF0aW9uIHZlY3RvcnMgKi8KKwlzYi0+c19vcCA9ICZleG9mc19zb3BzOworCXNiLT5zX2V4cG9ydF9vcCA9ICZleG9mc19leHBvcnRfb3BzOworCXJvb3QgPSBleG9mc19pZ2V0KHNiLCBFWE9GU19ST09UX0lEIC0gRVhPRlNfT0JKX09GRik7CisJaWYgKElTX0VSUihyb290KSkgeworCQlFWE9GU19FUlIoIkVSUk9SOiBleG9mc19pZ2V0IGZhaWxlZFxuIik7CisJCXJldCA9IFBUUl9FUlIocm9vdCk7CisJCWdvdG8gZnJlZV9zYmk7CisJfQorCXNiLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3Qocm9vdCk7CisJaWYgKCFzYi0+c19yb290KSB7CisJCWlwdXQocm9vdCk7CisJCUVYT0ZTX0VSUigiRVJST1I6IGdldCByb290IGlub2RlIGZhaWxlZFxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9zYmk7CisJfQorCisJaWYgKCFTX0lTRElSKHJvb3QtPmlfbW9kZSkpIHsKKwkJZHB1dChzYi0+c19yb290KTsKKwkJc2ItPnNfcm9vdCA9IE5VTEw7CisJCUVYT0ZTX0VSUigiRVJST1I6IGNvcnJ1cHQgcm9vdCBpbm9kZSAobW9kZSA9ICVoZClcbiIsCisJCSAgICAgICByb290LT5pX21vZGUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZyZWVfc2JpOworCX0KKworCXJldCA9IDA7CitvdXQ6CisJaWYgKG9yKQorCQlvc2RfZW5kX3JlcXVlc3Qob3IpOworCXJldHVybiByZXQ7CisKK2ZyZWVfc2JpOgorCW9zZHVsZF9wdXRfZGV2aWNlKHNiaS0+c19kZXYpOyAvKiBOVUxMIHNhZmUgKi8KKwlrZnJlZShzYmkpOworCWdvdG8gb3V0OworfQorCisvKgorICogU2V0IHVwIHRoZSBzdXBlcmJsb2NrIChjYWxscyBleG9mc19maWxsX3N1cGVyIGV2ZW50dWFsbHkpCisgKi8KK3N0YXRpYyBpbnQgZXhvZnNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLAorCQkJICBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLAorCQkJICB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlzdHJ1Y3QgZXhvZnNfbW91bnRvcHQgb3B0czsKKwlpbnQgcmV0OworCisJcmV0ID0gcGFyc2Vfb3B0aW9ucyhkYXRhLCAmb3B0cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW9wdHMuZGV2X25hbWUgPSBkZXZfbmFtZTsKKwlyZXR1cm4gZ2V0X3NiX25vZGV2KHR5cGUsIGZsYWdzLCAmb3B0cywgZXhvZnNfZmlsbF9zdXBlciwgbW50KTsKK30KKworLyoKKyAqIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZSBzeXN0ZW0gc3RhdGUgaW4gdGhlIGJ1ZmZlci4gIFRoaXMgaXMgdXNlZAorICogYnkgdGhlICdkZicgY29tbWFuZCwgZm9yIGV4YW1wbGUuCisgKi8KK3N0YXRpYyBpbnQgZXhvZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOworCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBzYi0+c19mc19pbmZvOworCXN0cnVjdCBvc2Rfb2JqX2lkIG9iaiA9IHtzYmktPnNfcGlkLCAwfTsKKwlzdHJ1Y3Qgb3NkX2F0dHIgYXR0cnNbXSA9IHsKKwkJQVRUUl9ERUYoT1NEX0FQQUdFX1BBUlRJVElPTl9RVU9UQVMsCisJCQlPU0RfQVRUUl9QUV9DQVBBQ0lUWV9RVU9UQSwgc2l6ZW9mKF9fYmU2NCkpLAorCQlBVFRSX0RFRihPU0RfQVBBR0VfUEFSVElUSU9OX0lORk9STUFUSU9OLAorCQkJT1NEX0FUVFJfUElfVVNFRF9DQVBBQ0lUWSwgc2l6ZW9mKF9fYmU2NCkpLAorCX07CisJdWludDY0X3QgY2FwYWNpdHkgPSBVTExPTkdfTUFYOworCXVpbnQ2NF90IHVzZWQgPSBVTExPTkdfTUFYOworCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CisJdWludDhfdCBjcmVkX2FbT1NEX0NBUF9MRU5dOworCWludCByZXQ7CisKKwkvKiBnZXQgdXNlZC9jYXBhY2l0eSBhdHRyaWJ1dGVzICovCisJZXhvZnNfbWFrZV9jcmVkZW50aWFsKGNyZWRfYSwgJm9iaik7CisKKwlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHNiaS0+c19kZXYsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghb3IpKSB7CisJCUVYT0ZTX0RCR01TRygiZXhvZnNfc3RhdGZzOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJb3NkX3JlcV9nZXRfYXR0cmlidXRlcyhvciwgJm9iaik7CisJb3NkX3JlcV9hZGRfZ2V0X2F0dHJfbGlzdChvciwgYXR0cnMsIEFSUkFZX1NJWkUoYXR0cnMpKTsKKwlyZXQgPSBleG9mc19zeW5jX29wKG9yLCBzYmktPnNfdGltZW91dCwgY3JlZF9hKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBleHRyYWN0X2F0dHJfZnJvbV9yZXEob3IsICZhdHRyc1swXSk7CisJaWYgKGxpa2VseSghcmV0KSkKKwkJY2FwYWNpdHkgPSBnZXRfdW5hbGlnbmVkX2JlNjQoYXR0cnNbMF0udmFsX3B0cik7CisJZWxzZQorCQlFWE9GU19EQkdNU0coImV4b2ZzX3N0YXRmczogZ2V0IGNhcGFjaXR5IGZhaWxlZC5cbiIpOworCisJcmV0ID0gZXh0cmFjdF9hdHRyX2Zyb21fcmVxKG9yLCAmYXR0cnNbMV0pOworCWlmIChsaWtlbHkoIXJldCkpCisJCXVzZWQgPSBnZXRfdW5hbGlnbmVkX2JlNjQoYXR0cnNbMV0udmFsX3B0cik7CisJZWxzZQorCQlFWE9GU19EQkdNU0coImV4b2ZzX3N0YXRmczogZ2V0IHVzZWQtc3BhY2UgZmFpbGVkLlxuIik7CisKKwkvKiBmaWxsIGluIHRoZSBzdGF0cyBidWZmZXIgKi8KKwlidWYtPmZfdHlwZSA9IEVYT0ZTX1NVUEVSX01BR0lDOworCWJ1Zi0+Zl9ic2l6ZSA9IEVYT0ZTX0JMS1NJWkU7CisJYnVmLT5mX2Jsb2NrcyA9IChjYXBhY2l0eSA+PiBFWE9GU19CTEtTSElGVCk7CisJYnVmLT5mX2JmcmVlID0gKChjYXBhY2l0eSAtIHVzZWQpID4+IEVYT0ZTX0JMS1NISUZUKTsKKwlidWYtPmZfYmF2YWlsID0gYnVmLT5mX2JmcmVlOworCWJ1Zi0+Zl9maWxlcyA9IHNiaS0+c19udW1maWxlczsKKwlidWYtPmZfZmZyZWUgPSBFWE9GU19NQVhfSUQgLSBzYmktPnNfbnVtZmlsZXM7CisJYnVmLT5mX25hbWVsZW4gPSBFWE9GU19OQU1FX0xFTjsKKworb3V0OgorCW9zZF9lbmRfcmVxdWVzdChvcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGV4b2ZzX3NvcHMgPSB7CisJLmFsbG9jX2lub2RlICAgID0gZXhvZnNfYWxsb2NfaW5vZGUsCisJLmRlc3Ryb3lfaW5vZGUgID0gZXhvZnNfZGVzdHJveV9pbm9kZSwKKwkud3JpdGVfaW5vZGUgICAgPSBleG9mc193cml0ZV9pbm9kZSwKKwkuZGVsZXRlX2lub2RlICAgPSBleG9mc19kZWxldGVfaW5vZGUsCisJLnB1dF9zdXBlciAgICAgID0gZXhvZnNfcHV0X3N1cGVyLAorCS53cml0ZV9zdXBlciAgICA9IGV4b2ZzX3dyaXRlX3N1cGVyLAorCS5zdGF0ZnMgICAgICAgICA9IGV4b2ZzX3N0YXRmcywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVYUE9SVCBPUEVSQVRJT05TCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBkZW50cnkgKmV4b2ZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpCit7CisJdW5zaWduZWQgbG9uZyBpbm8gPSBleG9mc19wYXJlbnRfaW5vKGNoaWxkKTsKKworCWlmICghaW5vKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBkX29idGFpbl9hbGlhcyhleG9mc19pZ2V0KGNoaWxkLT5kX2lub2RlLT5pX3NiLCBpbm8pKTsKK30KKworc3RhdGljIHN0cnVjdCBpbm9kZSAqZXhvZnNfbmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQl1NjQgaW5vLCB1MzIgZ2VuZXJhdGlvbikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJaW5vZGUgPSBleG9mc19pZ2V0KHNiLCBpbm8pOworCWlmIChJU19FUlIoaW5vZGUpKQorCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOworCWlmIChnZW5lcmF0aW9uICYmIGlub2RlLT5pX2dlbmVyYXRpb24gIT0gZ2VuZXJhdGlvbikgeworCQkvKiB3ZSBkaWRuJ3QgZmluZCB0aGUgcmlnaHQgaW5vZGUuLiAqLworCQlpcHV0KGlub2RlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7CisJfQorCXJldHVybiBpbm9kZTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmV4b2ZzX2ZoX3RvX2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCXN0cnVjdCBmaWQgKmZpZCwgaW50IGZoX2xlbiwgaW50IGZoX3R5cGUpCit7CisJcmV0dXJuIGdlbmVyaWNfZmhfdG9fZGVudHJ5KHNiLCBmaWQsIGZoX2xlbiwgZmhfdHlwZSwKKwkJCQkgICAgZXhvZnNfbmZzX2dldF9pbm9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleG9mc19maF90b19wYXJlbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQlzdHJ1Y3QgZmlkICpmaWQsIGludCBmaF9sZW4sIGludCBmaF90eXBlKQoreworCXJldHVybiBnZW5lcmljX2ZoX3RvX3BhcmVudChzYiwgZmlkLCBmaF9sZW4sIGZoX3R5cGUsCisJCQkJICAgIGV4b2ZzX25mc19nZXRfaW5vZGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGV4b2ZzX2V4cG9ydF9vcHMgPSB7CisJLmZoX3RvX2RlbnRyeSA9IGV4b2ZzX2ZoX3RvX2RlbnRyeSwKKwkuZmhfdG9fcGFyZW50ID0gZXhvZnNfZmhfdG9fcGFyZW50LAorCS5nZXRfcGFyZW50ID0gZXhvZnNfZ2V0X3BhcmVudCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElOU01PRC9STU1PRAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogc3RydWN0IHRoYXQgZGVzY3JpYmVzIHRoaXMgZmlsZSBzeXN0ZW0KKyAqLworc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGV4b2ZzX3R5cGUgPSB7CisJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJLm5hbWUgICAgICAgICAgID0gImV4b2ZzIiwKKwkuZ2V0X3NiICAgICAgICAgPSBleG9mc19nZXRfc2IsCisJLmtpbGxfc2IgICAgICAgID0gZ2VuZXJpY19zaHV0ZG93bl9zdXBlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfZXhvZnModm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gaW5pdF9pbm9kZWNhY2hlKCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZleG9mc190eXBlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9kOworCisJcmV0dXJuIDA7CitvdXRfZDoKKwlkZXN0cm95X2lub2RlY2FjaGUoKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9leG9mcyh2b2lkKQoreworCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZXhvZnNfdHlwZSk7CisJZGVzdHJveV9pbm9kZWNhY2hlKCk7Cit9CisKK01PRFVMRV9BVVRIT1IoIkF2aXNoYXkgVHJhZWdlciA8YXZpc2hheUBnbWFpbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImV4b2ZzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGluaXRfZXhvZnMpCittb2R1bGVfZXhpdChleGl0X2V4b2ZzKQpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvc3ltbGluay5jIGIvZnMvZXhvZnMvc3ltbGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZTJkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leG9mcy9zeW1saW5rLmMKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogQXZpc2hheSBUcmFlZ2VyIChhdmlzaGF5QGdtYWlsLmNvbSkgKGF2aXNoYXlAaWwuaWJtLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNgorICogSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5CisgKiBCb2F6IEhhcnJvc2ggPGJoYXJyb3NoQHBhbmFzYXMuY29tPgorICoKKyAqIENvcHlyaWdodHMgZm9yIGNvZGUgdGFrZW4gZnJvbSBleHQyOgorICogICAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NQorICogICAgIFJlbXkgQ2FyZCAoY2FyZEBtYXNpLmlicC5mcikKKyAqICAgICBMYWJvcmF0b2lyZSBNQVNJIC0gSW5zdGl0dXQgQmxhaXNlIFBhc2NhbAorICogICAgIFVuaXZlcnNpdGUgUGllcnJlIGV0IE1hcmllIEN1cmllIChQYXJpcyBWSSkKKyAqICAgICBmcm9tCisgKiAgICAgbGludXgvZnMvbWluaXgvaW5vZGUuYworICogICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBleG9mcy4KKyAqCisgKiBleG9mcyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFNpbmNlIGl0IGlzIGJhc2VkIG9uIGV4dDIsIGFuZCB0aGUgb25seQorICogdmFsaWQgdmVyc2lvbiBvZiBHUEwgZm9yIHRoZSBMaW51eCBrZXJuZWwgaXMgdmVyc2lvbiAyLCB0aGUgb25seSB2YWxpZAorICogdmVyc2lvbiBvZiBHUEwgZm9yIGV4b2ZzIGlzIHZlcnNpb24gMi4KKyAqCisgKiBleG9mcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggZXhvZnM7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisKKyNpbmNsdWRlICJleG9mcy5oIgorCitzdGF0aWMgdm9pZCAqZXhvZnNfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaSA9IGV4b2ZzX2koZGVudHJ5LT5kX2lub2RlKTsKKworCW5kX3NldF9saW5rKG5kLCAoY2hhciAqKW9pLT5pX2RhdGEpOworCXJldHVybiBOVUxMOworfQorCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnMgPSB7CisJLnJlYWRsaW5rCT0gZ2VuZXJpY19yZWFkbGluaywKKwkuZm9sbG93X2xpbmsJPSBwYWdlX2ZvbGxvd19saW5rX2xpZ2h0LAorCS5wdXRfbGluawk9IHBhZ2VfcHV0X2xpbmssCit9OworCitjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBleG9mc19mYXN0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkucmVhZGxpbmsJPSBnZW5lcmljX3JlYWRsaW5rLAorCS5mb2xsb3dfbGluawk9IGV4b2ZzX2ZvbGxvd19saW5rLAorfTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvYWNsLmMgYi9mcy9leHQyL2FjbC5jCmluZGV4IGFlOGM0ZjguLmQ0NmUzOGMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvYWNsLmMKKysrIGIvZnMvZXh0Mi9hY2wuYwpAQCAtMzE4LDcgKzMxOCw3IEBACiAJCQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAkJfQogCQlpZiAoIWFjbCkKLQkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9CiAJaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBQT1NJWF9BQ0wpICYmIGFjbCkgewogICAgICAgICAgICAgICAgc3RydWN0IHBvc2l4X2FjbCAqY2xvbmU7CmRpZmYgLS1naXQgYS9mcy9leHQzL2FjbC5jIGIvZnMvZXh0My9hY2wuYwppbmRleCBiNjBiYjI0Li5kODFlZjJmIDEwMDY0NAotLS0gYS9mcy9leHQzL2FjbC5jCisrKyBiL2ZzL2V4dDMvYWNsLmMKQEAgLTMyMyw3ICszMjMsNyBAQAogCQkJCXJldHVybiBQVFJfRVJSKGFjbCk7CiAJCX0KIAkJaWYgKCFhY2wpCi0JCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJfQogCWlmICh0ZXN0X29wdChpbm9kZS0+aV9zYiwgUE9TSVhfQUNMKSAmJiBhY2wpIHsKIAkJc3RydWN0IHBvc2l4X2FjbCAqY2xvbmU7CmRpZmYgLS1naXQgYS9mcy9leHQzL2Rpci5jIGIvZnMvZXh0My9kaXIuYwppbmRleCA1ODUzZjQ0Li4zZDcyNGE5IDEwMDY0NAotLS0gYS9mcy9leHQzL2Rpci5jCisrKyBiL2ZzL2V4dDMvZGlyLmMKQEAgLTQyLDcgKzQyLDcgQEAKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IGV4dDNfcmVhZGRpciwJCS8qIHdlIHRha2UgQktMLiBuZWVkZWQ/Ki8KLQkuaW9jdGwJCT0gZXh0M19pb2N0bCwJCS8qIEJLTCBoZWxkICovCisJLnVubG9ja2VkX2lvY3RsCT0gZXh0M19pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IGV4dDNfY29tcGF0X2lvY3RsLAogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9leHQzL2ZpbGUuYyBiL2ZzL2V4dDMvZmlsZS5jCmluZGV4IDNiZTFlMDYuLjViNDk3MDQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZmlsZS5jCisrKyBiL2ZzL2V4dDMvZmlsZS5jCkBAIC0zMyw2ICszMywxMCBAQAogICovCiBzdGF0aWMgaW50IGV4dDNfcmVsZWFzZV9maWxlIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQogeworCWlmIChFWFQzX0koaW5vZGUpLT5pX3N0YXRlICYgRVhUM19TVEFURV9GTFVTSF9PTl9DTE9TRSkgeworCQlmaWxlbWFwX2ZsdXNoKGlub2RlLT5pX21hcHBpbmcpOworCQlFWFQzX0koaW5vZGUpLT5pX3N0YXRlICY9IH5FWFQzX1NUQVRFX0ZMVVNIX09OX0NMT1NFOworCX0KIAkvKiBpZiB3ZSBhcmUgdGhlIGxhc3Qgd3JpdGVyIG9uIHRoZSBpbm9kZSwgZHJvcCB0aGUgYmxvY2sgcmVzZXJ2YXRpb24gKi8KIAlpZiAoKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgogCQkJKGF0b21pY19yZWFkKCZpbm9kZS0+aV93cml0ZWNvdW50KSA9PSAxKSkKQEAgLTExMiw3ICsxMTYsNyBAQAogCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAogCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKIAkuYWlvX3dyaXRlCT0gZXh0M19maWxlX3dyaXRlLAotCS5pb2N0bAkJPSBleHQzX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bAk9IGV4dDNfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfaW9jdGwJPSBleHQzX2NvbXBhdF9pb2N0bCwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IDRhMDlmZjEuLjQ2NmEzMzIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTExNDksMTIgKzExNDksMTUgQEAKIAkJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VwLCB2b2lkICoqZnNkYXRhKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwotCWludCByZXQsIG5lZWRlZF9ibG9ja3MgPSBleHQzX3dyaXRlcGFnZV90cmFuc19ibG9ja3MoaW5vZGUpOworCWludCByZXQ7CiAJaGFuZGxlX3QgKmhhbmRsZTsKIAlpbnQgcmV0cmllcyA9IDA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJcGdvZmZfdCBpbmRleDsKIAl1bnNpZ25lZCBmcm9tLCB0bzsKKwkvKiBSZXNlcnZlIG9uZSBibG9jayBtb3JlIGZvciBhZGRpdGlvbiB0byBvcnBoYW4gbGlzdCBpbiBjYXNlCisJICogd2UgYWxsb2NhdGUgYmxvY2tzIGJ1dCB3cml0ZSBmYWlscyBmb3Igc29tZSByZWFzb24gKi8KKwlpbnQgbmVlZGVkX2Jsb2NrcyA9IGV4dDNfd3JpdGVwYWdlX3RyYW5zX2Jsb2Nrcyhpbm9kZSkgKyAxOwogCiAJaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAlmcm9tID0gcG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwpAQCAtMTE4NCwxNSArMTE4NywyMCBAQAogCX0KIHdyaXRlX2JlZ2luX2ZhaWxlZDoKIAlpZiAocmV0KSB7Ci0JCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCS8qCiAJCSAqIGJsb2NrX3dyaXRlX2JlZ2luIG1heSBoYXZlIGluc3RhbnRpYXRlZCBhIGZldyBibG9ja3MKIAkJICogb3V0c2lkZSBpX3NpemUuICBUcmltIHRoZXNlIG9mZiBhZ2Fpbi4gRG9uJ3QgbmVlZAogCQkgKiBpX3NpemVfcmVhZCBiZWNhdXNlIHdlIGhvbGQgaV9tdXRleC4KKwkJICoKKwkJICogQWRkIGlub2RlIHRvIG9ycGhhbiBsaXN0IGluIGNhc2Ugd2UgY3Jhc2ggYmVmb3JlIHRydW5jYXRlCisJCSAqIGZpbmlzaGVzLgogCQkgKi8KIAkJaWYgKHBvcyArIGxlbiA+IGlub2RlLT5pX3NpemUpCisJCQlleHQzX29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7CisJCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCWlmIChwb3MgKyBsZW4gPiBpbm9kZS0+aV9zaXplKQogCQkJdm10cnVuY2F0ZShpbm9kZSwgaW5vZGUtPmlfc2l6ZSk7CiAJfQogCWlmIChyZXQgPT0gLUVOT1NQQyAmJiBleHQzX3Nob3VsZF9yZXRyeV9hbGxvYyhpbm9kZS0+aV9zYiwgJnJldHJpZXMpKQpAQCAtMTIxMSw2ICsxMjE5LDE4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyogRm9yIG9yZGVyZWQgd3JpdGVwYWdlIGFuZCB3cml0ZV9lbmQgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IGpvdXJuYWxfZGlydHlfZGF0YV9mbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCS8qCisJICogV3JpdGUgY291bGQgaGF2ZSBtYXBwZWQgdGhlIGJ1ZmZlciBidXQgaXQgZGlkbid0IGNvcHkgdGhlIGRhdGEgaW4KKwkgKiB5ZXQuIFNvIGF2b2lkIGZpbGluZyBzdWNoIGJ1ZmZlciBpbnRvIGEgdHJhbnNhY3Rpb24uCisJICovCisJaWYgKGJ1ZmZlcl9tYXBwZWQoYmgpICYmIGJ1ZmZlcl91cHRvZGF0ZShiaCkpCisJCXJldHVybiBleHQzX2pvdXJuYWxfZGlydHlfZGF0YShoYW5kbGUsIGJoKTsKKwlyZXR1cm4gMDsKK30KKwogLyogRm9yIHdyaXRlX2VuZCgpIGluIGRhdGE9am91cm5hbCBtb2RlICovCiBzdGF0aWMgaW50IHdyaXRlX2VuZF9mbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewpAQCAtMTIyMSwyNiArMTI0MSwyMCBAQAogfQogCiAvKgotICogR2VuZXJpYyB3cml0ZV9lbmQgaGFuZGxlciBmb3Igb3JkZXJlZCBhbmQgd3JpdGViYWNrIGV4dDMgam91cm5hbCBtb2Rlcy4KLSAqIFdlIGNhbid0IHVzZSBnZW5lcmljX3dyaXRlX2VuZCwgYmVjYXVzZSB0aGF0IHVubG9ja3MgdGhlIHBhZ2UgYW5kIHdlIG5lZWQgdG8KLSAqIHVubG9jayB0aGUgcGFnZSBhZnRlciBleHQzX2pvdXJuYWxfc3RvcCwgYnV0IGV4dDNfam91cm5hbF9zdG9wIG11c3QgcnVuCi0gKiBhZnRlciBibG9ja193cml0ZV9lbmQuCisgKiBUaGlzIGlzIG5hc3R5IGFuZCBzdWJ0bGU6IGV4dDNfd3JpdGVfYmVnaW4oKSBjb3VsZCBoYXZlIGFsbG9jYXRlZCBibG9ja3MKKyAqIGZvciB0aGUgd2hvbGUgcGFnZSBidXQgbGF0ZXIgd2UgZmFpbGVkIHRvIGNvcHkgdGhlIGRhdGEgaW4uIFVwZGF0ZSBpbm9kZQorICogc2l6ZSBhY2NvcmRpbmcgdG8gd2hhdCB3ZSBtYW5hZ2VkIHRvIGNvcHkuIFRoZSByZXN0IGlzIGdvaW5nIHRvIGJlCisgKiB0cnVuY2F0ZWQgaW4gd3JpdGVfZW5kIGZ1bmN0aW9uLgogICovCi1zdGF0aWMgaW50IGV4dDNfZ2VuZXJpY193cml0ZV9lbmQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCi0JCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmZzZGF0YSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9maWxlX3NpemVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHVuc2lnbmVkIGNvcGllZCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwotCi0JY29waWVkID0gYmxvY2tfd3JpdGVfZW5kKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBjb3BpZWQsIHBhZ2UsIGZzZGF0YSk7Ci0KLQlpZiAocG9zK2NvcGllZCA+IGlub2RlLT5pX3NpemUpIHsKLQkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MrY29waWVkKTsKKwkvKiBXaGF0IG1hdHRlcnMgdG8gdXMgaXMgaV9kaXNrc2l6ZS4gV2UgZG9uJ3Qgd3JpdGUgaV9zaXplIGFueXdoZXJlICovCisJaWYgKHBvcyArIGNvcGllZCA+IGlub2RlLT5pX3NpemUpCisJCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zICsgY29waWVkKTsKKwlpZiAocG9zICsgY29waWVkID4gRVhUM19JKGlub2RlKS0+aV9kaXNrc2l6ZSkgeworCQlFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplID0gcG9zICsgY29waWVkOwogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAl9Ci0KLQlyZXR1cm4gY29waWVkOwogfQogCiAvKgpAQCAtMTI2MCwzNSArMTI3NCwyOSBAQAogCXVuc2lnbmVkIGZyb20sIHRvOwogCWludCByZXQgPSAwLCByZXQyOwogCisJY29waWVkID0gYmxvY2tfd3JpdGVfZW5kKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBjb3BpZWQsIHBhZ2UsIGZzZGF0YSk7CisKIAlmcm9tID0gcG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwotCXRvID0gZnJvbSArIGxlbjsKLQorCXRvID0gZnJvbSArIGNvcGllZDsKIAlyZXQgPSB3YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIHBhZ2VfYnVmZmVycyhwYWdlKSwKLQkJZnJvbSwgdG8sIE5VTEwsIGV4dDNfam91cm5hbF9kaXJ0eV9kYXRhKTsKKwkJZnJvbSwgdG8sIE5VTEwsIGpvdXJuYWxfZGlydHlfZGF0YV9mbik7CiAKLQlpZiAocmV0ID09IDApIHsKLQkJLyoKLQkJICogZ2VuZXJpY193cml0ZV9lbmQoKSB3aWxsIHJ1biBtYXJrX2lub2RlX2RpcnR5KCkgaWYgaV9zaXplCi0JCSAqIGNoYW5nZXMuICBTbyBsZXQncyBwaWdneWJhY2sgdGhlIGlfZGlza3NpemUgbWFya19pbm9kZV9kaXJ0eQotCQkgKiBpbnRvIHRoYXQuCi0JCSAqLwotCQlsb2ZmX3QgbmV3X2lfc2l6ZTsKLQotCQluZXdfaV9zaXplID0gcG9zICsgY29waWVkOwotCQlpZiAobmV3X2lfc2l6ZSA+IEVYVDNfSShpbm9kZSktPmlfZGlza3NpemUpCi0JCQlFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplID0gbmV3X2lfc2l6ZTsKLQkJcmV0MiA9IGV4dDNfZ2VuZXJpY193cml0ZV9lbmQoZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGNvcGllZCwKLQkJCQkJCQlwYWdlLCBmc2RhdGEpOwotCQljb3BpZWQgPSByZXQyOwotCQlpZiAocmV0MiA8IDApCi0JCQlyZXQgPSByZXQyOwotCX0KKwlpZiAocmV0ID09IDApCisJCXVwZGF0ZV9maWxlX3NpemVzKGlub2RlLCBwb3MsIGNvcGllZCk7CisJLyoKKwkgKiBUaGVyZSBtYXkgYmUgYWxsb2NhdGVkIGJsb2NrcyBvdXRzaWRlIG9mIGlfc2l6ZSBiZWNhdXNlCisJICogd2UgZmFpbGVkIHRvIGNvcHkgc29tZSBkYXRhLiBQcmVwYXJlIGZvciB0cnVuY2F0ZS4KKwkgKi8KKwlpZiAocG9zICsgbGVuID4gaW5vZGUtPmlfc2l6ZSkKKwkJZXh0M19vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpOwogCXJldDIgPSBleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCWlmICghcmV0KQogCQlyZXQgPSByZXQyOwogCXVubG9ja19wYWdlKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAorCWlmIChwb3MgKyBsZW4gPiBpbm9kZS0+aV9zaXplKQorCQl2bXRydW5jYXRlKGlub2RlLCBpbm9kZS0+aV9zaXplKTsKIAlyZXR1cm4gcmV0ID8gcmV0IDogY29waWVkOwogfQogCkBAIC0xMjk5LDI1ICsxMzA3LDIyIEBACiB7CiAJaGFuZGxlX3QgKmhhbmRsZSA9IGV4dDNfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7Ci0JaW50IHJldCA9IDAsIHJldDI7Ci0JbG9mZl90IG5ld19pX3NpemU7CisJaW50IHJldDsKIAotCW5ld19pX3NpemUgPSBwb3MgKyBjb3BpZWQ7Ci0JaWYgKG5ld19pX3NpemUgPiBFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplKQotCQlFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplID0gbmV3X2lfc2l6ZTsKLQotCXJldDIgPSBleHQzX2dlbmVyaWNfd3JpdGVfZW5kKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBjb3BpZWQsCi0JCQkJCQkJcGFnZSwgZnNkYXRhKTsKLQljb3BpZWQgPSByZXQyOwotCWlmIChyZXQyIDwgMCkKLQkJcmV0ID0gcmV0MjsKLQotCXJldDIgPSBleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCWlmICghcmV0KQotCQlyZXQgPSByZXQyOworCWNvcGllZCA9IGJsb2NrX3dyaXRlX2VuZChmaWxlLCBtYXBwaW5nLCBwb3MsIGxlbiwgY29waWVkLCBwYWdlLCBmc2RhdGEpOworCXVwZGF0ZV9maWxlX3NpemVzKGlub2RlLCBwb3MsIGNvcGllZCk7CisJLyoKKwkgKiBUaGVyZSBtYXkgYmUgYWxsb2NhdGVkIGJsb2NrcyBvdXRzaWRlIG9mIGlfc2l6ZSBiZWNhdXNlCisJICogd2UgZmFpbGVkIHRvIGNvcHkgc29tZSBkYXRhLiBQcmVwYXJlIGZvciB0cnVuY2F0ZS4KKwkgKi8KKwlpZiAocG9zICsgbGVuID4gaW5vZGUtPmlfc2l6ZSkKKwkJZXh0M19vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpOworCXJldCA9IGV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCisJaWYgKHBvcyArIGxlbiA+IGlub2RlLT5pX3NpemUpCisJCXZtdHJ1bmNhdGUoaW5vZGUsIGlub2RlLT5pX3NpemUpOwogCXJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7CiB9CiAKQEAgLTEzMzgsMTUgKzEzNDMsMjMgQEAKIAlpZiAoY29waWVkIDwgbGVuKSB7CiAJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKQogCQkJY29waWVkID0gMDsKLQkJcGFnZV96ZXJvX25ld19idWZmZXJzKHBhZ2UsIGZyb20rY29waWVkLCB0byk7CisJCXBhZ2VfemVyb19uZXdfYnVmZmVycyhwYWdlLCBmcm9tICsgY29waWVkLCB0byk7CisJCXRvID0gZnJvbSArIGNvcGllZDsKIAl9CiAKIAlyZXQgPSB3YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIHBhZ2VfYnVmZmVycyhwYWdlKSwgZnJvbSwKIAkJCQl0bywgJnBhcnRpYWwsIHdyaXRlX2VuZF9mbik7CiAJaWYgKCFwYXJ0aWFsKQogCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JaWYgKHBvcytjb3BpZWQgPiBpbm9kZS0+aV9zaXplKQotCQlpX3NpemVfd3JpdGUoaW5vZGUsIHBvcytjb3BpZWQpOworCisJaWYgKHBvcyArIGNvcGllZCA+IGlub2RlLT5pX3NpemUpCisJCWlfc2l6ZV93cml0ZShpbm9kZSwgcG9zICsgY29waWVkKTsKKwkvKgorCSAqIFRoZXJlIG1heSBiZSBhbGxvY2F0ZWQgYmxvY2tzIG91dHNpZGUgb2YgaV9zaXplIGJlY2F1c2UKKwkgKiB3ZSBmYWlsZWQgdG8gY29weSBzb21lIGRhdGEuIFByZXBhcmUgZm9yIHRydW5jYXRlLgorCSAqLworCWlmIChwb3MgKyBsZW4gPiBpbm9kZS0+aV9zaXplKQorCQlleHQzX29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7CiAJRVhUM19JKGlub2RlKS0+aV9zdGF0ZSB8PSBFWFQzX1NUQVRFX0pEQVRBOwogCWlmIChpbm9kZS0+aV9zaXplID4gRVhUM19JKGlub2RlKS0+aV9kaXNrc2l6ZSkgewogCQlFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKQEAgLTEzNjEsNiArMTM3NCw4IEBACiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCisJaWYgKHBvcyArIGxlbiA+IGlub2RlLT5pX3NpemUpCisJCXZtdHJ1bmNhdGUoaW5vZGUsIGlub2RlLT5pX3NpemUpOwogCXJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7CiB9CiAKQEAgLTE0MjgsMTcgKzE0NDMsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBqb3VybmFsX2RpcnR5X2RhdGFfZm4oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKLXsKLQlpZiAoYnVmZmVyX21hcHBlZChiaCkpCi0JCXJldHVybiBleHQzX2pvdXJuYWxfZGlydHlfZGF0YShoYW5kbGUsIGJoKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBidWZmZXJfdW5tYXBwZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAlyZXR1cm4gIWJ1ZmZlcl9tYXBwZWQoYmgpOwogfQorCiAvKgogICogTm90ZSB0aGF0IHdlIGFsd2F5cyBzdGFydCBhIHRyYW5zYWN0aW9uIGV2ZW4gaWYgd2UncmUgbm90IGpvdXJuYWxsaW5nCiAgKiBkYXRhLiAgVGhpcyBpcyB0byBwcmVzZXJ2ZSBvcmRlcmluZzogYW55IGhvbGUgaW5zdGFudGlhdGlvbiB3aXRoaW4KQEAgLTIzNTQsNiArMjM2Myw5IEBACiAJaWYgKCFleHQzX2Nhbl90cnVuY2F0ZShpbm9kZSkpCiAJCXJldHVybjsKIAorCWlmIChpbm9kZS0+aV9zaXplID09IDAgJiYgZXh0M19zaG91bGRfd3JpdGViYWNrX2RhdGEoaW5vZGUpKQorCQllaS0+aV9zdGF0ZSB8PSBFWFQzX1NUQVRFX0ZMVVNIX09OX0NMT1NFOworCiAJLyoKIAkgKiBXZSBoYXZlIHRvIGxvY2sgdGhlIEVPRiBwYWdlIGhlcmUsIGJlY2F1c2UgbG9ja19wYWdlKCkgbmVzdHMKIAkgKiBvdXRzaWRlIGpvdXJuYWxfc3RhcnQoKS4KZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW9jdGwuYyBiL2ZzL2V4dDMvaW9jdGwuYwppbmRleCA1ZTg2Y2U5Li44ODk3NDgxIDEwMDY0NAotLS0gYS9mcy9leHQzL2lvY3RsLmMKKysrIGIvZnMvZXh0My9pb2N0bC5jCkBAIC0xNSwxMiArMTUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLWludCBleHQzX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAotCQl1bnNpZ25lZCBsb25nIGFyZykKK2xvbmcgZXh0M19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBleHQzX2lub2RlX2luZm8gKmVpID0gRVhUM19JKGlub2RlKTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdW5zaWduZWQgc2hvcnQgcnN2X3dpbmRvd19zaXplOwpAQCAtMzksMjkgKzM4LDI1IEBACiAJCXVuc2lnbmVkIGludCBvbGRmbGFnczsKIAkJdW5zaWduZWQgaW50IGpmbGFnOwogCisJCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwkJCXJldHVybiAtRUFDQ0VTOworCisJCWlmIChnZXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKikgYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCiAJCWVyciA9IG1udF93YW50X3dyaXRlKGZpbHAtPmZfcGF0aC5tbnQpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpIHsKLQkJCWVyciA9IC1FQUNDRVM7Ci0JCQlnb3RvIGZsYWdzX291dDsKLQkJfQotCi0JCWlmIChnZXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKikgYXJnKSkgewotCQkJZXJyID0gLUVGQVVMVDsKLQkJCWdvdG8gZmxhZ3Nfb3V0OwotCQl9Ci0KIAkJZmxhZ3MgPSBleHQzX21hc2tfZmxhZ3MoaW5vZGUtPmlfbW9kZSwgZmxhZ3MpOwogCiAJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwogCQkvKiBJcyBpdCBxdW90YSBmaWxlPyBEbyBub3QgYWxsb3cgdXNlciB0byBtZXNzIHdpdGggaXQgKi8KLQkJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7Ci0JCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCWVyciA9IC1FUEVSTTsKKwkJZXJyID0gLUVQRVJNOworCQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCiAJCQlnb3RvIGZsYWdzX291dDsKLQkJfQorCiAJCW9sZGZsYWdzID0gZWktPmlfZmxhZ3M7CiAKIAkJLyogVGhlIEpPVVJOQUxfREFUQSBmbGFnIGlzIG1vZGlmaWFibGUgb25seSBieSByb290ICovCkBAIC03NCwxMSArNjksOCBAQAogCQkgKiBUaGlzIHRlc3QgbG9va3MgbmljZXIuIFRoYW5rcyB0byBQYXVsaW5lIE1pZGRlbGluawogCQkgKi8KIAkJaWYgKChmbGFncyBeIG9sZGZsYWdzKSAmIChFWFQzX0FQUEVORF9GTCB8IEVYVDNfSU1NVVRBQkxFX0ZMKSkgewotCQkJaWYgKCFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCQkJZXJyID0gLUVQRVJNOworCQkJaWYgKCFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKQogCQkJCWdvdG8gZmxhZ3Nfb3V0OwotCQkJfQogCQl9CiAKIAkJLyoKQEAgLTg2LDE3ICs3OCwxMiBAQAogCQkgKiB0aGUgcmVsZXZhbnQgY2FwYWJpbGl0eS4KIAkJICovCiAJCWlmICgoamZsYWcgXiBvbGRmbGFncykgJiAoRVhUM19KT1VSTkFMX0RBVEFfRkwpKSB7Ci0JCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpIHsKLQkJCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCQllcnIgPSAtRVBFUk07CisJCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpCiAJCQkJZ290byBmbGFnc19vdXQ7Ci0JCQl9CiAJCX0KIAotCiAJCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChpbm9kZSwgMSk7CiAJCWlmIChJU19FUlIoaGFuZGxlKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCQllcnIgPSBQVFJfRVJSKGhhbmRsZSk7CiAJCQlnb3RvIGZsYWdzX291dDsKIAkJfQpAQCAtMTE2LDE1ICsxMDMsMTMgQEAKIAkJZXJyID0gZXh0M19tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgJmlsb2MpOwogZmxhZ3NfZXJyOgogCQlleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwotCQlpZiAoZXJyKSB7Ci0JCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KKwkJaWYgKGVycikKKwkJCWdvdG8gZmxhZ3Nfb3V0OwogCiAJCWlmICgoamZsYWcgXiBvbGRmbGFncykgJiAoRVhUM19KT1VSTkFMX0RBVEFfRkwpKQogCQkJZXJyID0gZXh0M19jaGFuZ2VfaW5vZGVfam91cm5hbF9mbGFnKGlub2RlLCBqZmxhZyk7Ci0JCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogZmxhZ3Nfb3V0OgorCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTQwLDYgKzEyNSw3IEBACiAKIAkJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQogCQkJcmV0dXJuIC1FUEVSTTsKKwogCQllcnIgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CkBAIC0xNDcsNiArMTMzLDcgQEAKIAkJCWVyciA9IC1FRkFVTFQ7CiAJCQlnb3RvIHNldHZlcnNpb25fb3V0OwogCQl9CisKIAkJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCAxKTsKIAkJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGhhbmRsZSk7CkBAIC0yOTksOSArMjg2LDYgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBsb25nIGV4dDNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgcmV0OwotCiAJLyogVGhlc2UgYXJlIGp1c3QgbWlzbmFtZWQsIHRoZXkgYWN0dWFsbHkgZ2V0L3B1dCBmcm9tL3RvIHVzZXIgYW4gaW50ICovCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEVYVDNfSU9DMzJfR0VURkxBR1M6CkBAIC0zNDEsOSArMzI1LDYgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KLQlsb2NrX2tlcm5lbCgpOwotCXJldCA9IGV4dDNfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGV4dDNfaW9jdGwoZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgY29tcGF0X3B0cihhcmcpKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9uYW1laS5jIGIvZnMvZXh0My9uYW1laS5jCmluZGV4IGUyZmM2M2MuLjZmZjdiOTcgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvbmFtZWkuYworKysgYi9mcy9leHQzL25hbWVpLmMKQEAgLTE2MSwxMiArMTYxLDEyIEBACiAJCQkJIHN0cnVjdCBkeF9mcmFtZSAqZnJhbWUsCiAJCQkJIGludCAqZXJyKTsKIHN0YXRpYyB2b2lkIGR4X3JlbGVhc2UgKHN0cnVjdCBkeF9mcmFtZSAqZnJhbWVzKTsKLXN0YXRpYyBpbnQgZHhfbWFrZV9tYXAgKHN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICpkZSwgaW50IHNpemUsCitzdGF0aWMgaW50IGR4X21ha2VfbWFwKHN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICpkZSwgdW5zaWduZWQgYmxvY2tzaXplLAogCQkJc3RydWN0IGR4X2hhc2hfaW5mbyAqaGluZm8sIHN0cnVjdCBkeF9tYXBfZW50cnkgbWFwW10pOwogc3RhdGljIHZvaWQgZHhfc29ydF9tYXAoc3RydWN0IGR4X21hcF9lbnRyeSAqbWFwLCB1bnNpZ25lZCBjb3VudCk7CiBzdGF0aWMgc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmR4X21vdmVfZGlyZW50cyAoY2hhciAqZnJvbSwgY2hhciAqdG8sCiAJCXN0cnVjdCBkeF9tYXBfZW50cnkgKm9mZnNldHMsIGludCBjb3VudCk7Ci1zdGF0aWMgc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIqIGR4X3BhY2tfZGlyZW50cyAoY2hhciAqYmFzZSwgaW50IHNpemUpOworc3RhdGljIHN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICpkeF9wYWNrX2RpcmVudHMoY2hhciAqYmFzZSwgdW5zaWduZWQgYmxvY2tzaXplKTsKIHN0YXRpYyB2b2lkIGR4X2luc2VydF9ibG9jayAoc3RydWN0IGR4X2ZyYW1lICpmcmFtZSwgdTMyIGhhc2gsIHUzMiBibG9jayk7CiBzdGF0aWMgaW50IGV4dDNfaHRyZWVfbmV4dF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmRpciwgX191MzIgaGFzaCwKIAkJCQkgc3RydWN0IGR4X2ZyYW1lICpmcmFtZSwKQEAgLTcwOCwxNCArNzA4LDE0IEBACiAgKiBDcmVhdGUgbWFwIG9mIGhhc2ggdmFsdWVzLCBvZmZzZXRzLCBhbmQgc2l6ZXMsIHN0b3JlZCBhdCBlbmQgb2YgYmxvY2suCiAgKiBSZXR1cm5zIG51bWJlciBvZiBlbnRyaWVzIG1hcHBlZC4KICAqLwotc3RhdGljIGludCBkeF9tYWtlX21hcCAoc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmRlLCBpbnQgc2l6ZSwKLQkJCXN0cnVjdCBkeF9oYXNoX2luZm8gKmhpbmZvLCBzdHJ1Y3QgZHhfbWFwX2VudHJ5ICptYXBfdGFpbCkKK3N0YXRpYyBpbnQgZHhfbWFrZV9tYXAoc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKmRlLCB1bnNpZ25lZCBibG9ja3NpemUsCisJCXN0cnVjdCBkeF9oYXNoX2luZm8gKmhpbmZvLCBzdHJ1Y3QgZHhfbWFwX2VudHJ5ICptYXBfdGFpbCkKIHsKIAlpbnQgY291bnQgPSAwOwogCWNoYXIgKmJhc2UgPSAoY2hhciAqKSBkZTsKIAlzdHJ1Y3QgZHhfaGFzaF9pbmZvIGggPSAqaGluZm87CiAKLQl3aGlsZSAoKGNoYXIgKikgZGUgPCBiYXNlICsgc2l6ZSkKKwl3aGlsZSAoKGNoYXIgKikgZGUgPCBiYXNlICsgYmxvY2tzaXplKQogCXsKIAkJaWYgKGRlLT5uYW1lX2xlbiAmJiBkZS0+aW5vZGUpIHsKIAkJCWV4dDNmc19kaXJoYXNoKGRlLT5uYW1lLCBkZS0+bmFtZV9sZW4sICZoKTsKQEAgLTEwNDcsOCArMTA0NywxNiBAQAogCQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiAJCX0KIAkJaW5vZGUgPSBleHQzX2lnZXQoZGlyLT5pX3NiLCBpbm8pOwotCQlpZiAoSVNfRVJSKGlub2RlKSkKLQkJCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7CisJCWlmICh1bmxpa2VseShJU19FUlIoaW5vZGUpKSkgeworCQkJaWYgKFBUUl9FUlIoaW5vZGUpID09IC1FU1RBTEUpIHsKKwkJCQlleHQzX2Vycm9yKGRpci0+aV9zYiwgX19mdW5jX18sCisJCQkJCQkiZGVsZXRlZCBpbm9kZSByZWZlcmVuY2VkOiAlbHUiLAorCQkJCQkJaW5vKTsKKwkJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKKwkJCX0KKwkJfQogCX0KIAlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7CiB9CkBAIC0xMTIwLDEzICsxMTI4LDE0IEBACiAgKiBDb21wYWN0IGVhY2ggZGlyIGVudHJ5IGluIHRoZSByYW5nZSB0byB0aGUgbWluaW1hbCByZWNfbGVuLgogICogUmV0dXJucyBwb2ludGVyIHRvIGxhc3QgZW50cnkgaW4gcmFuZ2UuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiogZHhfcGFja19kaXJlbnRzKGNoYXIgKmJhc2UsIGludCBzaXplKQorc3RhdGljIHN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICpkeF9wYWNrX2RpcmVudHMoY2hhciAqYmFzZSwgdW5zaWduZWQgYmxvY2tzaXplKQogewotCXN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICpuZXh0LCAqdG8sICpwcmV2LCAqZGUgPSAoc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKikgYmFzZTsKKwlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqbmV4dCwgKnRvLCAqcHJldjsKKwlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqZGUgPSAoc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKiliYXNlOwogCXVuc2lnbmVkIHJlY19sZW4gPSAwOwogCiAJcHJldiA9IHRvID0gZGU7Ci0Jd2hpbGUgKChjaGFyKilkZSA8IGJhc2UgKyBzaXplKSB7CisJd2hpbGUgKChjaGFyICopZGUgPCBiYXNlICsgYmxvY2tzaXplKSB7CiAJCW5leHQgPSBleHQzX25leHRfZW50cnkoZGUpOwogCQlpZiAoZGUtPmlub2RlICYmIGRlLT5uYW1lX2xlbikgewogCQkJcmVjX2xlbiA9IEVYVDNfRElSX1JFQ19MRU4oZGUtPm5hbWVfbGVuKTsKQEAgLTIyNjUsNyArMjI3NCw3IEBACiAJc3RydWN0IGlub2RlICogb2xkX2lub2RlLCAqIG5ld19pbm9kZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBvbGRfYmgsICogbmV3X2JoLCAqIGRpcl9iaDsKIAlzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqIG9sZF9kZSwgKiBuZXdfZGU7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsLCBmbHVzaF9maWxlID0gMDsKIAogCW9sZF9iaCA9IG5ld19iaCA9IGRpcl9iaCA9IE5VTEw7CiAKQEAgLTI0MDEsNiArMjQxMCw4IEBACiAJCWV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIG5ld19pbm9kZSk7CiAJCWlmICghbmV3X2lub2RlLT5pX25saW5rKQogCQkJZXh0M19vcnBoYW5fYWRkKGhhbmRsZSwgbmV3X2lub2RlKTsKKwkJaWYgKGV4dDNfc2hvdWxkX3dyaXRlYmFja19kYXRhKG5ld19pbm9kZSkpCisJCQlmbHVzaF9maWxlID0gMTsKIAl9CiAJcmV0dmFsID0gMDsKIApAQCAtMjQwOSw2ICsyNDIwLDggQEAKIAlicmVsc2UgKG9sZF9iaCk7CiAJYnJlbHNlIChuZXdfYmgpOwogCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CisJaWYgKHJldHZhbCA9PSAwICYmIGZsdXNoX2ZpbGUpCisJCWZpbGVtYXBfZmx1c2gob2xkX2lub2RlLT5pX21hcHBpbmcpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvS2NvbmZpZyBiL2ZzL2V4dDQvS2NvbmZpZwppbmRleCA3NTA1NDgyLi40MThiNmYzIDEwMDY0NAotLS0gYS9mcy9leHQ0L0tjb25maWcKKysrIGIvZnMvZXh0NC9LY29uZmlnCkBAIC0xOCw3ICsxOCw3IEBACiAJICBmaWxlc3lzdGVtOyB3aGlsZSB0aGVyZSB3aWxsIGJlIHNvbWUgcGVyZm9ybWFuY2UgZ2FpbnMgZnJvbQogCSAgdGhlIGRlbGF5ZWQgYWxsb2NhdGlvbiBhbmQgaW5vZGUgdGFibGUgcmVhZGFoZWFkLCB0aGUgYmVzdAogCSAgcGVyZm9ybWFuY2UgZ2FpbnMgd2lsbCByZXF1aXJlIGVuYWJsaW5nIGV4dDQgZmVhdHVyZXMgaW4gdGhlCi0JICBmaWxlc3lzdGVtLCBvciBmb3JtYXRpbmcgYSBuZXcgZmlsZXN5c3RlbSBhcyBhbiBleHQ0CisJICBmaWxlc3lzdGVtLCBvciBmb3JtYXR0aW5nIGEgbmV3IGZpbGVzeXN0ZW0gYXMgYW4gZXh0NAogCSAgZmlsZXN5c3RlbSBpbml0aWFsbHkuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBmaWxlIHN5c3RlbSBzdXBwb3J0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYWNsLmMgYi9mcy9leHQ0L2FjbC5jCmluZGV4IDY5NGVkNmYuLjY0N2UwZDYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYWNsLmMKKysrIGIvZnMvZXh0NC9hY2wuYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJCQkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKIAkJfQogCQlpZiAoIWFjbCkKLQkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9CiAJaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBQT1NJWF9BQ0wpICYmIGFjbCkgewogCQlzdHJ1Y3QgcG9zaXhfYWNsICpjbG9uZTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYmFsbG9jLmMgYi9mcy9leHQ0L2JhbGxvYy5jCmluZGV4IDM4ZjQwZDUuLjUzYzcyYWQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9iYWxsb2MuYwpAQCAtNTUsNyArNTUsOCBAQAogfQogCiBzdGF0aWMgaW50IGV4dDRfZ3JvdXBfdXNlZF9tZXRhX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkJCWV4dDRfZ3JvdXBfdCBibG9ja19ncm91cCkKKwkJCQkgICAgICAgZXh0NF9ncm91cF90IGJsb2NrX2dyb3VwLAorCQkJCSAgICAgICBzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHApCiB7CiAJZXh0NF9mc2Jsa190IHRtcDsKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKQEAgLTYzLDEwICs2NCw2IEBACiAJaW50IHVzZWRfYmxvY2tzID0gc2JpLT5zX2l0Yl9wZXJfZ3JvdXAgKyAyOwogCiAJaWYgKEVYVDRfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKSkgewotCQlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHA7Ci0JCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Ci0KLQkJZ2RwID0gZXh0NF9nZXRfZ3JvdXBfZGVzYyhzYiwgYmxvY2tfZ3JvdXAsICZiaCk7CiAJCWlmICghZXh0NF9ibG9ja19pbl9ncm91cChzYiwgZXh0NF9ibG9ja19iaXRtYXAoc2IsIGdkcCksCiAJCQkJCWJsb2NrX2dyb3VwKSkKIAkJCXVzZWRfYmxvY2tzLS07CkBAIC0xNzcsNyArMTc0LDcgQEAKIAkJICovCiAJCW1hcmtfYml0bWFwX2VuZChncm91cF9ibG9ja3MsIHNiLT5zX2Jsb2Nrc2l6ZSAqIDgsIGJoLT5iX2RhdGEpOwogCX0KLQlyZXR1cm4gZnJlZV9ibG9ja3MgLSBleHQ0X2dyb3VwX3VzZWRfbWV0YV9ibG9ja3Moc2IsIGJsb2NrX2dyb3VwKTsKKwlyZXR1cm4gZnJlZV9ibG9ja3MgLSBleHQ0X2dyb3VwX3VzZWRfbWV0YV9ibG9ja3Moc2IsIGJsb2NrX2dyb3VwLCBnZHApOwogfQogCiAKQEAgLTQ3Myw5ICs0NzAsOCBAQAogCiAJaWYgKHNiaS0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4KSB7CiAJCWV4dDRfZ3JvdXBfdCBmbGV4X2dyb3VwID0gZXh0NF9mbGV4X2dyb3VwKHNiaSwgYmxvY2tfZ3JvdXApOwotCQlzcGluX2xvY2soc2JfYmdsX2xvY2soc2JpLCBmbGV4X2dyb3VwKSk7Ci0JCXNiaS0+c19mbGV4X2dyb3Vwc1tmbGV4X2dyb3VwXS5mcmVlX2Jsb2NrcyArPSBibG9ja3NfZnJlZWQ7Ci0JCXNwaW5fdW5sb2NrKHNiX2JnbF9sb2NrKHNiaSwgZmxleF9ncm91cCkpOworCQlhdG9taWNfYWRkKGJsb2Nrc19mcmVlZCwKKwkJCSAgICZzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0uZnJlZV9ibG9ja3MpOwogCX0KIAkvKgogCSAqIHJlcXVlc3QgdG8gcmVsb2FkIHRoZSBidWRkeSB3aXRoIHRoZQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9kaXIuYyBiL2ZzL2V4dDQvZGlyLmMKaW5kZXggMmRmMmU0MC4uYjY0Nzg5OSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9kaXIuYworKysgYi9mcy9leHQ0L2Rpci5jCkBAIC02Nyw3ICs2Nyw4IEBACiAJCQkgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKIAljb25zdCBjaGFyICplcnJvcl9tc2cgPSBOVUxMOwotCWNvbnN0IGludCBybGVuID0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbik7CisJY29uc3QgaW50IHJsZW4gPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuLAorCQkJCQkJZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CiAKIAlpZiAocmxlbiA8IEVYVDRfRElSX1JFQ19MRU4oMSkpCiAJCWVycm9yX21zZyA9ICJyZWNfbGVuIGlzIHNtYWxsZXIgdGhhbiBtaW5pbWFsIjsKQEAgLTE3OCwxMCArMTc5LDExIEBACiAJCQkJICogbGVhc3QgdGhhdCBpdCBpcyBub24temVyby4gIEEKIAkJCQkgKiBmYWlsdXJlIHdpbGwgYmUgZGV0ZWN0ZWQgaW4gdGhlCiAJCQkJICogZGlyZW50IHRlc3QgYmVsb3cuICovCi0JCQkJaWYgKGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4pCi0JCQkJCQk8IEVYVDRfRElSX1JFQ19MRU4oMSkpCisJCQkJaWYgKGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4sCisJCQkJCXNiLT5zX2Jsb2Nrc2l6ZSkgPCBFWFQ0X0RJUl9SRUNfTEVOKDEpKQogCQkJCQlicmVhazsKLQkJCQlpICs9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4pOworCQkJCWkgKz0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbiwKKwkJCQkJCQkgICAgc2ItPnNfYmxvY2tzaXplKTsKIAkJCX0KIAkJCW9mZnNldCA9IGk7CiAJCQlmaWxwLT5mX3BvcyA9IChmaWxwLT5mX3BvcyAmIH4oc2ItPnNfYmxvY2tzaXplIC0gMSkpCkBAIC0yMDMsNyArMjA1LDggQEAKIAkJCQlyZXQgPSBzdG9yZWQ7CiAJCQkJZ290byBvdXQ7CiAJCQl9Ci0JCQlvZmZzZXQgKz0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbik7CisJCQlvZmZzZXQgKz0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbiwKKwkJCQkJc2ItPnNfYmxvY2tzaXplKTsKIAkJCWlmIChsZTMyX3RvX2NwdShkZS0+aW5vZGUpKSB7CiAJCQkJLyogV2UgbWlnaHQgYmxvY2sgaW4gdGhlIG5leHQgc2VjdGlvbgogCQkJCSAqIGlmIHRoZSBkYXRhIGRlc3RpbmF0aW9uIGlzCkBAIC0yMjUsNyArMjI4LDggQEAKIAkJCQkJZ290byByZXZhbGlkYXRlOwogCQkJCXN0b3JlZCsrOwogCQkJfQotCQkJZmlscC0+Zl9wb3MgKz0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbik7CisJCQlmaWxwLT5mX3BvcyArPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuLAorCQkJCQkJc2ItPnNfYmxvY2tzaXplKTsKIAkJfQogCQlvZmZzZXQgPSAwOwogCQlicmVsc2UoYmgpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCA2MDgzYmIzOC4uZDBmMTVlZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTMzLDE0ICszMyw2IEBACiAjdW5kZWYgRVhUNEZTX0RFQlVHCiAKIC8qCi0gKiBEZWZpbmUgRVhUNF9SRVNFUlZBVElPTiB0byByZXNlcnZlIGRhdGEgYmxvY2tzIGZvciBleHBhbmRpbmcgZmlsZXMKLSAqLwotI2RlZmluZSBFWFQ0X0RFRkFVTFRfUkVTRVJWRV9CTE9DS1MJOAotLyptYXggd2luZG93IHNpemU6IDEwMjQoZGlyZWN0IGJsb2NrcykgKyAzKFt0LGRdaW5kaXJlY3QgYmxvY2tzKSAqLwotI2RlZmluZSBFWFQ0X01BWF9SRVNFUlZFX0JMT0NLUwkJMTAyNwotI2RlZmluZSBFWFQ0X1JFU0VSVkVfV0lORE9XX05PVF9BTExPQ0FURUQgMAotCi0vKgogICogRGVidWcgY29kZQogICovCiAjaWZkZWYgRVhUNEZTX0RFQlVHCkBAIC01NCw4ICs0Niw2IEBACiAjZGVmaW5lIGV4dDRfZGVidWcoZiwgYS4uLikJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBFWFQ0X01VTFRJQkxPQ0tfQUxMT0NBVE9SCTEKLQogLyogcHJlZmVyIGdvYWwgYWdhaW4uIGxlbmd0aCAqLwogI2RlZmluZSBFWFQ0X01CX0hJTlRfTUVSR0UJCTEKIC8qIGJsb2NrcyBhbHJlYWR5IHJlc2VydmVkICovCkBAIC0xODAsOCArMTcwLDkgQEAKICAqLwogCiBzdHJ1Y3QgZmxleF9ncm91cHMgewotCV9fdTMyIGZyZWVfaW5vZGVzOwotCV9fdTMyIGZyZWVfYmxvY2tzOworCWF0b21pY190IGZyZWVfaW5vZGVzOworCWF0b21pY190IGZyZWVfYmxvY2tzOworCWF0b21pY190IHVzZWRfZGlyczsKIH07CiAKICNkZWZpbmUgRVhUNF9CR19JTk9ERV9VTklOSVQJMHgwMDAxIC8qIElub2RlIHRhYmxlL2JpdG1hcCBub3QgaW4gdXNlICovCkBAIC0yNDksNiArMjQwLDMwIEBACiAjZGVmaW5lIEVYVDRfRkxfVVNFUl9WSVNJQkxFCQkweDAwMEJERkZGIC8qIFVzZXIgdmlzaWJsZSBmbGFncyAqLwogI2RlZmluZSBFWFQ0X0ZMX1VTRVJfTU9ESUZJQUJMRQkJMHgwMDBCODBGRiAvKiBVc2VyIG1vZGlmaWFibGUgZmxhZ3MgKi8KIAorLyogRmxhZ3MgdGhhdCBzaG91bGQgYmUgaW5oZXJpdGVkIGJ5IG5ldyBpbm9kZXMgZnJvbSB0aGVpciBwYXJlbnQuICovCisjZGVmaW5lIEVYVDRfRkxfSU5IRVJJVEVEIChFWFQ0X1NFQ1JNX0ZMIHwgRVhUNF9VTlJNX0ZMIHwgRVhUNF9DT01QUl9GTCB8XAorCQkJICAgRVhUNF9TWU5DX0ZMIHwgRVhUNF9JTU1VVEFCTEVfRkwgfCBFWFQ0X0FQUEVORF9GTCB8XAorCQkJICAgRVhUNF9OT0RVTVBfRkwgfCBFWFQ0X05PQVRJTUVfRkwgfFwKKwkJCSAgIEVYVDRfTk9DT01QUl9GTCB8IEVYVDRfSk9VUk5BTF9EQVRBX0ZMIHxcCisJCQkgICBFWFQ0X05PVEFJTF9GTCB8IEVYVDRfRElSU1lOQ19GTCkKKworLyogRmxhZ3MgdGhhdCBhcmUgYXBwcm9wcmlhdGUgZm9yIHJlZ3VsYXIgZmlsZXMgKGFsbCBidXQgZGlyLXNwZWNpZmljIG9uZXMpLiAqLworI2RlZmluZSBFWFQ0X1JFR19GTE1BU0sgKH4oRVhUNF9ESVJTWU5DX0ZMIHwgRVhUNF9UT1BESVJfRkwpKQorCisvKiBGbGFncyB0aGF0IGFyZSBhcHByb3ByaWF0ZSBmb3Igbm9uLWRpcmVjdG9yaWVzL3JlZ3VsYXIgZmlsZXMuICovCisjZGVmaW5lIEVYVDRfT1RIRVJfRkxNQVNLIChFWFQ0X05PRFVNUF9GTCB8IEVYVDRfTk9BVElNRV9GTCkKKworLyogTWFzayBvdXQgZmxhZ3MgdGhhdCBhcmUgaW5hcHByb3ByaWF0ZSBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgaW5vZGUuICovCitzdGF0aWMgaW5saW5lIF9fdTMyIGV4dDRfbWFza19mbGFncyh1bW9kZV90IG1vZGUsIF9fdTMyIGZsYWdzKQoreworCWlmIChTX0lTRElSKG1vZGUpKQorCQlyZXR1cm4gZmxhZ3M7CisJZWxzZSBpZiAoU19JU1JFRyhtb2RlKSkKKwkJcmV0dXJuIGZsYWdzICYgRVhUNF9SRUdfRkxNQVNLOworCWVsc2UKKwkJcmV0dXJuIGZsYWdzICYgRVhUNF9PVEhFUl9GTE1BU0s7Cit9CisKIC8qCiAgKiBJbm9kZSBkeW5hbWljIHN0YXRlIGZsYWdzCiAgKi8KQEAgLTI1Niw2ICsyNzEsNyBAQAogI2RlZmluZSBFWFQ0X1NUQVRFX05FVwkJCTB4MDAwMDAwMDIgLyogaW5vZGUgaXMgbmV3bHkgY3JlYXRlZCAqLwogI2RlZmluZSBFWFQ0X1NUQVRFX1hBVFRSCQkweDAwMDAwMDA0IC8qIGhhcyBpbi1pbm9kZSB4YXR0cnMgKi8KICNkZWZpbmUgRVhUNF9TVEFURV9OT19FWFBBTkQJCTB4MDAwMDAwMDggLyogTm8gc3BhY2UgZm9yIGV4cGFuc2lvbiAqLworI2RlZmluZSBFWFQ0X1NUQVRFX0RBX0FMTE9DX0NMT1NFCTB4MDAwMDAwMTAgLyogQWxsb2MgREEgYmxrcyBvbiBjbG9zZSAqLwogCiAvKiBVc2VkIHRvIHBhc3MgZ3JvdXAgZGVzY3JpcHRvciBkYXRhIHdoZW4gb25saW5lIHJlc2l6ZSBpcyBkb25lICovCiBzdHJ1Y3QgZXh0NF9uZXdfZ3JvdXBfaW5wdXQgewpAQCAtMzAzLDcgKzMxOSw5IEBACiAjZGVmaW5lIEVYVDRfSU9DX0dST1VQX0VYVEVORAkJX0lPVygnZicsIDcsIHVuc2lnbmVkIGxvbmcpCiAjZGVmaW5lIEVYVDRfSU9DX0dST1VQX0FERAkJX0lPVygnZicsIDgsIHN0cnVjdCBleHQ0X25ld19ncm91cF9pbnB1dCkKICNkZWZpbmUgRVhUNF9JT0NfTUlHUkFURQkJX0lPKCdmJywgOSkKKyAvKiBub3RlIGlvY3RsIDEwIHJlc2VydmVkIGZvciBhbiBlYXJseSB2ZXJzaW9uIG9mIHRoZSBGSUVNQVAgaW9jdGwgKi8KICAvKiBub3RlIGlvY3RsIDExIHJlc2VydmVkIGZvciBmaWxlc3lzdGVtLWluZGVwZW5kZW50IEZJRU1BUCBpb2N0bCAqLworI2RlZmluZSBFWFQ0X0lPQ19BTExPQ19EQV9CTEtTCQlfSU8oJ2YnLCAxMikKIAogLyoKICAqIGlvY3RsIGNvbW1hbmRzIGluIDMyIGJpdCBlbXVsYXRpb24KQEAgLTUzMSw3ICs1NDksNyBAQAogI2RlZmluZSBFWFQ0X01PVU5UX05PX1VJRDMyCQkweDAyMDAwICAvKiBEaXNhYmxlIDMyLWJpdCBVSURzICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfWEFUVFJfVVNFUgkJMHgwNDAwMAkvKiBFeHRlbmRlZCB1c2VyIGF0dHJpYnV0ZXMgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9QT1NJWF9BQ0wJCTB4MDgwMDAJLyogUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMgKi8KLSNkZWZpbmUgRVhUNF9NT1VOVF9SRVNFUlZBVElPTgkJMHgxMDAwMAkvKiBQcmVhbGxvY2F0aW9uICovCisjZGVmaW5lIEVYVDRfTU9VTlRfTk9fQVVUT19EQV9BTExPQwkweDEwMDAwCS8qIE5vIGF1dG8gZGVsYWxsb2MgbWFwcGluZyAqLwogI2RlZmluZSBFWFQ0X01PVU5UX0JBUlJJRVIJCTB4MjAwMDAgLyogVXNlIGJsb2NrIGJhcnJpZXJzICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfTk9CSAkJCTB4NDAwMDAgLyogTm8gYnVmZmVyaGVhZHMgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9RVU9UQQkJMHg4MDAwMCAvKiBTb21lIHF1b3RhIG9wdGlvbiBzZXQgKi8KQEAgLTY2Niw3ICs2ODQsOCBAQAogCV9fdTgJc19sb2dfZ3JvdXBzX3Blcl9mbGV4OyAgLyogRkxFWF9CRyBncm91cCBzaXplICovCiAJX191OAlzX3Jlc2VydmVkX2NoYXJfcGFkMjsKIAlfX2xlMTYgIHNfcmVzZXJ2ZWRfcGFkOwotCV9fdTMyICAgc19yZXNlcnZlZFsxNjJdOyAgICAgICAgLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLworCV9fbGU2NAlzX2tieXRlc193cml0dGVuOwkvKiBuciBvZiBsaWZldGltZSBraWxvYnl0ZXMgd3JpdHRlbiAqLworCV9fdTMyICAgc19yZXNlcnZlZFsxNjBdOyAgICAgICAgLyogUGFkZGluZyB0byB0aGUgZW5kIG9mIHRoZSBibG9jayAqLwogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KQEAgLTgxNCw2ICs4MzMsMTIgQEAKICNkZWZpbmUgRVhUNF9ERUZfTUFYX0JBVENIX1RJTUUJMTUwMDAgLyogMTVtcyAqLwogCiAvKgorICogTWluaW11bSBudW1iZXIgb2YgZ3JvdXBzIGluIGEgZmxleGdyb3VwIGJlZm9yZSB3ZSBzZXBhcmF0ZSBvdXQKKyAqIGRpcmVjdG9yaWVzIGludG8gdGhlIGZpcnN0IGJsb2NrIGdyb3VwIG9mIGEgZmxleGdyb3VwCisgKi8KKyNkZWZpbmUgRVhUNF9GTEVYX1NJWkVfRElSX0FMTE9DX1NDSEVNRQk0CisKKy8qCiAgKiBTdHJ1Y3R1cmUgb2YgYSBkaXJlY3RvcnkgZW50cnkKICAqLwogI2RlZmluZSBFWFQ0X05BTUVfTEVOIDI1NQpAQCAtODY1LDI0ICs4OTAsNiBAQAogCQkJCQkgfkVYVDRfRElSX1JPVU5EKQogI2RlZmluZSBFWFQ0X01BWF9SRUNfTEVOCQkoKDE8PDE2KS0xKQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soX19sZTE2IGRsZW4pCi17Ci0JdW5zaWduZWQgbGVuID0gbGUxNl90b19jcHUoZGxlbik7Ci0KLQlpZiAobGVuID09IEVYVDRfTUFYX1JFQ19MRU4gfHwgbGVuID09IDApCi0JCXJldHVybiAxIDw8IDE2OwotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgX19sZTE2IGV4dDRfcmVjX2xlbl90b19kaXNrKHVuc2lnbmVkIGxlbikKLXsKLQlpZiAobGVuID09ICgxIDw8IDE2KSkKLQkJcmV0dXJuIGNwdV90b19sZTE2KEVYVDRfTUFYX1JFQ19MRU4pOwotCWVsc2UgaWYgKGxlbiA+ICgxIDw8IDE2KSkKLQkJQlVHKCk7Ci0JcmV0dXJuIGNwdV90b19sZTE2KGxlbik7Ci19Ci0KIC8qCiAgKiBIYXNoIFRyZWUgRGlyZWN0b3J5IGluZGV4aW5nCiAgKiAoYykgRGFuaWVsIFBoaWxsaXBzLCAyMDAxCkBAIC05NzAsMjIgKzk3Nyw2IEBACiAKIGV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmV4dDRfcHJvY19yb290OwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDRfdWlfcHJvY19mb3BzOwotCi0jZGVmaW5lCUVYVDRfUFJPQ19IQU5ETEVSKG5hbWUsIHZhcikJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JcHJvYyA9IHByb2NfY3JlYXRlX2RhdGEobmFtZSwgbW9kZSwgc2JpLT5zX3Byb2MsCQlcCi0JCQkJJmV4dDRfdWlfcHJvY19mb3BzLCAmc2JpLT5zXyMjdmFyKTsJXAotCWlmIChwcm9jID09IE5VTEwpIHsJCQkJCQlcCi0JCXByaW50ayhLRVJOX0VSUiAiRVhUNC1mczogY2FuJ3QgY3JlYXRlICVzXG4iLCBuYW1lKTsJXAotCQlnb3RvIGVycl9vdXQ7CQkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBFWFQ0X1BST0NfSEFORExFUihuYW1lLCB2YXIpCi0jZW5kaWYKLQogLyoKICAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKICAqLwpAQCAtMTA5MiwxMyArMTA4MywxNCBAQAogZXh0ZXJuIHZvaWQgZXh0NF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBleHQ0X3NldF9pbm9kZV9mbGFncyhzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBleHQ0X2dldF9pbm9kZV9mbGFncyhzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICopOworZXh0ZXJuIGludCBleHQ0X2FsbG9jX2RhX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiB2b2lkIGV4dDRfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gaW50IGV4dDRfd3JpdGVwYWdlX3RyYW5zX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IGV4dDRfbWV0YV90cmFuc19ibG9ja3Moc3RydWN0IGlub2RlICosIGludCBucmJsb2NrcywgaW50IGlkeGJsb2Nrcyk7CiBleHRlcm4gaW50IGV4dDRfY2h1bmtfdHJhbnNfYmxvY2tzKHN0cnVjdCBpbm9kZSAqLCBpbnQgbnJibG9ja3MpOwogZXh0ZXJuIGludCBleHQ0X2Jsb2NrX3RydW5jYXRlX3BhZ2UoaGFuZGxlX3QgKmhhbmRsZSwKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBmcm9tKTsKLWV4dGVybiBpbnQgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiBpbnQgZXh0NF9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKTsKIGV4dGVybiBxc2l6ZV90IGV4dDRfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogCiAvKiBpb2N0bC5jICovCkBAIC0xMTA3LDcgKzEwOTksMTAgQEAKIAogLyogbWlncmF0ZS5jICovCiBleHRlcm4gaW50IGV4dDRfZXh0X21pZ3JhdGUoc3RydWN0IGlub2RlICopOworCiAvKiBuYW1laS5jICovCitleHRlcm4gdW5zaWduZWQgaW50IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soX19sZTE2IGRsZW4sIHVuc2lnbmVkIGJsb2Nrc2l6ZSk7CitleHRlcm4gX19sZTE2IGV4dDRfcmVjX2xlbl90b19kaXNrKHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgYmxvY2tzaXplKTsKIGV4dGVybiBpbnQgZXh0NF9vcnBoYW5fYWRkKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgZXh0NF9vcnBoYW5fZGVsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgZXh0NF9odHJlZV9maWxsX3RyZWUoc3RydWN0IGZpbGUgKmRpcl9maWxlLCBfX3UzMiBzdGFydF9oYXNoLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X2V4dGVudHMuaCBiL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgKaW5kZXggMThjYjY3Yi4uZjBjM2VjODUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9leHRlbnRzLmgKKysrIGIvZnMvZXh0NC9leHQ0X2V4dGVudHMuaApAQCAtMjQxLDUgKzI0MSw2IEBACiBleHRlcm4gaW50IGV4dDRfZXh0X3NlYXJjaF9yaWdodChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dDRfZXh0X3BhdGggKiwKIAkJCQkJCWV4dDRfbGJsa190ICosIGV4dDRfZnNibGtfdCAqKTsKIGV4dGVybiB2b2lkIGV4dDRfZXh0X2Ryb3BfcmVmcyhzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqKTsKK2V4dGVybiBpbnQgZXh0NF9leHRfY2hlY2tfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7CiAjZW5kaWYgLyogX0VYVDRfRVhURU5UUyAqLwogCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDRfaS5oIGIvZnMvZXh0NC9leHQ0X2kuaAppbmRleCBlNjlhY2MxLi40Y2UyMTg3IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfaS5oCisrKyBiL2ZzL2V4dDQvZXh0NF9pLmgKQEAgLTMzLDkgKzMzLDYgQEAKIC8qIGRhdGEgdHlwZSBmb3IgYmxvY2sgZ3JvdXAgbnVtYmVyICovCiB0eXBlZGVmIHVuc2lnbmVkIGludCBleHQ0X2dyb3VwX3Q7CiAKLSNkZWZpbmUgcnN2X3N0YXJ0IHJzdl93aW5kb3cuX3Jzdl9zdGFydAotI2RlZmluZSByc3ZfZW5kIHJzdl93aW5kb3cuX3Jzdl9lbmQKLQogLyoKICAqIHN0b3JhZ2UgZm9yIGNhY2hlZCBleHRlbnQKICAqLwpAQCAtMTI1LDYgKzEyMiw5IEBACiAJc3RydWN0IGxpc3RfaGVhZCBpX3ByZWFsbG9jX2xpc3Q7CiAJc3BpbmxvY2tfdCBpX3ByZWFsbG9jX2xvY2s7CiAKKwkvKiBpYWxsb2MgKi8KKwlleHQ0X2dyb3VwX3QJaV9sYXN0X2FsbG9jX2dyb3VwOworCiAJLyogYWxsb2NhdGlvbiByZXNlcnZhdGlvbiBpbmZvIGZvciBkZWxhbGxvYyAqLwogCXVuc2lnbmVkIGludCBpX3Jlc2VydmVkX2RhdGFfYmxvY2tzOwogCXVuc2lnbmVkIGludCBpX3Jlc2VydmVkX21ldGFfYmxvY2tzOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X3NiLmggYi9mcy9leHQ0L2V4dDRfc2IuaAppbmRleCAwMzliNmVhLi41N2I3MWZlIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDRfc2IuaAorKysgYi9mcy9leHQ0L2V4dDRfc2IuaApAQCAtNjIsMTIgKzYyLDEwIEBACiAJc3RydWN0IHBlcmNwdV9jb3VudGVyIHNfZnJlZWlub2Rlc19jb3VudGVyOwogCXN0cnVjdCBwZXJjcHVfY291bnRlciBzX2RpcnNfY291bnRlcjsKIAlzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgc19kaXJ0eWJsb2Nrc19jb3VudGVyOwotCXN0cnVjdCBibG9ja2dyb3VwX2xvY2sgc19ibG9ja2dyb3VwX2xvY2s7CisJc3RydWN0IGJsb2NrZ3JvdXBfbG9jayAqc19ibG9ja2dyb3VwX2xvY2s7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzX3Byb2M7Ci0KLQkvKiByb290IG9mIHRoZSBwZXIgZnMgcmVzZXJ2YXRpb24gd2luZG93IHRyZWUgKi8KLQlzcGlubG9ja190IHNfcnN2X3dpbmRvd19sb2NrOwotCXN0cnVjdCByYl9yb290IHNfcnN2X3dpbmRvd19yb290OworCXN0cnVjdCBrb2JqZWN0IHNfa29iajsKKwlzdHJ1Y3QgY29tcGxldGlvbiBzX2tvYmpfdW5yZWdpc3RlcjsKIAogCS8qIEpvdXJuYWxpbmcgKi8KIAlzdHJ1Y3QgaW5vZGUgKnNfam91cm5hbF9pbm9kZTsKQEAgLTE0Niw2ICsxNDQsMTAgQEAKIAkvKiBsb2NhbGl0eSBncm91cHMgKi8KIAlzdHJ1Y3QgZXh0NF9sb2NhbGl0eV9ncm91cCAqc19sb2NhbGl0eV9ncm91cHM7CiAKKwkvKiBmb3Igd3JpdGUgc3RhdGlzdGljcyAqLworCXVuc2lnbmVkIGxvbmcgc19zZWN0b3JzX3dyaXR0ZW5fc3RhcnQ7CisJdTY0IHNfa2J5dGVzX3dyaXR0ZW47CisKIAl1bnNpZ25lZCBpbnQgc19sb2dfZ3JvdXBzX3Blcl9mbGV4OwogCXN0cnVjdCBmbGV4X2dyb3VwcyAqc19mbGV4X2dyb3VwczsKIH07CkBAIC0xNTMsNyArMTU1LDcgQEAKIHN0YXRpYyBpbmxpbmUgc3BpbmxvY2tfdCAqCiBzYl9iZ2xfbG9jayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksIHVuc2lnbmVkIGludCBibG9ja19ncm91cCkKIHsKLQlyZXR1cm4gYmdsX2xvY2tfcHRyKCZzYmktPnNfYmxvY2tncm91cF9sb2NrLCBibG9ja19ncm91cCk7CisJcmV0dXJuIGJnbF9sb2NrX3B0cihzYmktPnNfYmxvY2tncm91cF9sb2NrLCBibG9ja19ncm91cCk7CiB9CiAKICNlbmRpZgkvKiBfRVhUNF9TQiAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCBlMGFhNGZlLi5hYzc3ZDhiIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYworKysgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtMTUyLDYgKzE1Miw4IEBACiAJZXh0NF9mc2Jsa190IGJnX3N0YXJ0OwogCWV4dDRfZnNibGtfdCBsYXN0X2Jsb2NrOwogCWV4dDRfZ3JwYmxrX3QgY29sb3VyOworCWV4dDRfZ3JvdXBfdCBibG9ja19ncm91cDsKKwlpbnQgZmxleF9zaXplID0gZXh0NF9mbGV4X2JnX3NpemUoRVhUNF9TQihpbm9kZS0+aV9zYikpOwogCWludCBkZXB0aDsKIAogCWlmIChwYXRoKSB7CkBAIC0xNzAsMTAgKzE3MiwzMSBAQAogCX0KIAogCS8qIE9LLiB1c2UgaW5vZGUncyBncm91cCAqLwotCWJnX3N0YXJ0ID0gKGVpLT5pX2Jsb2NrX2dyb3VwICogRVhUNF9CTE9DS1NfUEVSX0dST1VQKGlub2RlLT5pX3NiKSkgKworCWJsb2NrX2dyb3VwID0gZWktPmlfYmxvY2tfZ3JvdXA7CisJaWYgKGZsZXhfc2l6ZSA+PSBFWFQ0X0ZMRVhfU0laRV9ESVJfQUxMT0NfU0NIRU1FKSB7CisJCS8qCisJCSAqIElmIHRoZXJlIGFyZSBhdCBsZWFzdCBFWFQ0X0ZMRVhfU0laRV9ESVJfQUxMT0NfU0NIRU1FCisJCSAqIGJsb2NrIGdyb3VwcyBwZXIgZmxleGdyb3VwLCByZXNlcnZlIHRoZSBmaXJzdCBibG9jayAKKwkJICogZ3JvdXAgZm9yIGRpcmVjdG9yaWVzIGFuZCBzcGVjaWFsIGZpbGVzLiAgUmVndWxhciAKKwkJICogZmlsZXMgd2lsbCBzdGFydCBhdCB0aGUgc2Vjb25kIGJsb2NrIGdyb3VwLiAgVGhpcworCQkgKiB0ZW5kcyB0byBzcGVlZCB1cCBkaXJlY3RvcnkgYWNjZXNzIGFuZCBpbXByb3ZlcyAKKwkJICogZnNjayB0aW1lcy4KKwkJICovCisJCWJsb2NrX2dyb3VwICY9IH4oZmxleF9zaXplLTEpOworCQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJCWJsb2NrX2dyb3VwKys7CisJfQorCWJnX3N0YXJ0ID0gKGJsb2NrX2dyb3VwICogRVhUNF9CTE9DS1NfUEVSX0dST1VQKGlub2RlLT5pX3NiKSkgKwogCQlsZTMyX3RvX2NwdShFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19lcy0+c19maXJzdF9kYXRhX2Jsb2NrKTsKIAlsYXN0X2Jsb2NrID0gZXh0NF9ibG9ja3NfY291bnQoRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfZXMpIC0gMTsKIAorCS8qCisJICogSWYgd2UgYXJlIGRvaW5nIGRlbGF5ZWQgYWxsb2NhdGlvbiwgd2UgZG9uJ3QgbmVlZCB0YWtlCisJICogY29sb3VyIGludG8gYWNjb3VudC4KKwkgKi8KKwlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIERFTEFMTE9DKSkKKwkJcmV0dXJuIGJnX3N0YXJ0OworCiAJaWYgKGJnX3N0YXJ0ICsgRVhUNF9CTE9DS1NfUEVSX0dST1VQKGlub2RlLT5pX3NiKSA8PSBsYXN0X2Jsb2NrKQogCQljb2xvdXIgPSAoY3VycmVudC0+cGlkICUgMTYpICoKIAkJCShFWFQ0X0JMT0NLU19QRVJfR1JPVVAoaW5vZGUtPmlfc2IpIC8gMTYpOwpAQCAtMzAxLDcgKzMyNCw2NCBAQAogCXJldHVybiBtYXg7CiB9CiAKLXN0YXRpYyBpbnQgX19leHQ0X2V4dF9jaGVja19oZWFkZXIoY29uc3QgY2hhciAqZnVuY3Rpb24sIHN0cnVjdCBpbm9kZSAqaW5vZGUsCitzdGF0aWMgaW50IGV4dDRfdmFsaWRfZXh0ZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X2V4dGVudCAqZXh0KQoreworCWV4dDRfZnNibGtfdCBibG9jayA9IGV4dF9wYmxvY2soZXh0KTsKKwlpbnQgbGVuID0gZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXh0KTsKKwlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMgPSBFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19lczsKKwlpZiAodW5saWtlbHkoYmxvY2sgPCBsZTMyX3RvX2NwdShlcy0+c19maXJzdF9kYXRhX2Jsb2NrKSB8fAorCQkJKChibG9jayArIGxlbikgPiBleHQ0X2Jsb2Nrc19jb3VudChlcykpKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBleHQ0X3ZhbGlkX2V4dGVudF9pZHgoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQlzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4ICpleHRfaWR4KQoreworCWV4dDRfZnNibGtfdCBibG9jayA9IGlkeF9wYmxvY2soZXh0X2lkeCk7CisJc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzID0gRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfZXM7CisJaWYgKHVubGlrZWx5KGJsb2NrIDwgbGUzMl90b19jcHUoZXMtPnNfZmlyc3RfZGF0YV9ibG9jaykgfHwKKwkJCShibG9jayA+IGV4dDRfYmxvY2tzX2NvdW50KGVzKSkpKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGV4dDRfdmFsaWRfZXh0ZW50X2VudHJpZXMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaCwKKwkJCQlpbnQgZGVwdGgpCit7CisJc3RydWN0IGV4dDRfZXh0ZW50ICpleHQ7CisJc3RydWN0IGV4dDRfZXh0ZW50X2lkeCAqZXh0X2lkeDsKKwl1bnNpZ25lZCBzaG9ydCBlbnRyaWVzOworCWlmIChlaC0+ZWhfZW50cmllcyA9PSAwKQorCQlyZXR1cm4gMTsKKworCWVudHJpZXMgPSBsZTE2X3RvX2NwdShlaC0+ZWhfZW50cmllcyk7CisKKwlpZiAoZGVwdGggPT0gMCkgeworCQkvKiBsZWFmIGVudHJpZXMgKi8KKwkJZXh0ID0gRVhUX0ZJUlNUX0VYVEVOVChlaCk7CisJCXdoaWxlIChlbnRyaWVzKSB7CisJCQlpZiAoIWV4dDRfdmFsaWRfZXh0ZW50KGlub2RlLCBleHQpKQorCQkJCXJldHVybiAwOworCQkJZXh0Kys7CisJCQllbnRyaWVzLS07CisJCX0KKwl9IGVsc2UgeworCQlleHRfaWR4ID0gRVhUX0ZJUlNUX0lOREVYKGVoKTsKKwkJd2hpbGUgKGVudHJpZXMpIHsKKwkJCWlmICghZXh0NF92YWxpZF9leHRlbnRfaWR4KGlub2RlLCBleHRfaWR4KSkKKwkJCQlyZXR1cm4gMDsKKwkJCWV4dF9pZHgrKzsKKwkJCWVudHJpZXMtLTsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2V4dDRfZXh0X2NoZWNrKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaCwKIAkJCQkJaW50IGRlcHRoKQogewpAQCAtMzI5LDExICs0MDksMTUgQEAKIAkJZXJyb3JfbXNnID0gImludmFsaWQgZWhfZW50cmllcyI7CiAJCWdvdG8gY29ycnVwdGVkOwogCX0KKwlpZiAoIWV4dDRfdmFsaWRfZXh0ZW50X2VudHJpZXMoaW5vZGUsIGVoLCBkZXB0aCkpIHsKKwkJZXJyb3JfbXNnID0gImludmFsaWQgZXh0ZW50IGVudHJpZXMiOworCQlnb3RvIGNvcnJ1cHRlZDsKKwl9CiAJcmV0dXJuIDA7CiAKIGNvcnJ1cHRlZDoKIAlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCBmdW5jdGlvbiwKLQkJCSJiYWQgaGVhZGVyIGluIGlub2RlICMlbHU6ICVzIC0gbWFnaWMgJXgsICIKKwkJCSJiYWQgaGVhZGVyL2V4dGVudCBpbiBpbm9kZSAjJWx1OiAlcyAtIG1hZ2ljICV4LCAiCiAJCQkiZW50cmllcyAldSwgbWF4ICV1KCV1KSwgZGVwdGggJXUoJXUpIiwKIAkJCWlub2RlLT5pX2lubywgZXJyb3JfbXNnLCBsZTE2X3RvX2NwdShlaC0+ZWhfbWFnaWMpLAogCQkJbGUxNl90b19jcHUoZWgtPmVoX2VudHJpZXMpLCBsZTE2X3RvX2NwdShlaC0+ZWhfbWF4KSwKQEAgLTM0Miw4ICs0MjYsMTMgQEAKIAlyZXR1cm4gLUVJTzsKIH0KIAotI2RlZmluZSBleHQ0X2V4dF9jaGVja19oZWFkZXIoaW5vZGUsIGVoLCBkZXB0aCkJXAotCV9fZXh0NF9leHRfY2hlY2tfaGVhZGVyKF9fZnVuY19fLCBpbm9kZSwgZWgsIGRlcHRoKQorI2RlZmluZSBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIGRlcHRoKQlcCisJX19leHQ0X2V4dF9jaGVjayhfX2Z1bmNfXywgaW5vZGUsIGVoLCBkZXB0aCkKKworaW50IGV4dDRfZXh0X2NoZWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIGV4dDRfZXh0X2NoZWNrKGlub2RlLCBleHRfaW5vZGVfaGRyKGlub2RlKSwgZXh0X2RlcHRoKGlub2RlKSk7Cit9CiAKICNpZmRlZiBFWFRfREVCVUcKIHN0YXRpYyB2b2lkIGV4dDRfZXh0X3Nob3dfcGF0aChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCkKQEAgLTU0Nyw5ICs2MzYsNiBAQAogCiAJZWggPSBleHRfaW5vZGVfaGRyKGlub2RlKTsKIAlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7Ci0JaWYgKGV4dDRfZXh0X2NoZWNrX2hlYWRlcihpbm9kZSwgZWgsIGRlcHRoKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7Ci0KIAogCS8qIGFjY291bnQgcG9zc2libGUgZGVwdGggaW5jcmVhc2UgKi8KIAlpZiAoIXBhdGgpIHsKQEAgLTU2NSw2ICs2NTEsOCBAQAogCWkgPSBkZXB0aDsKIAkvKiB3YWxrIHRocm91Z2ggdGhlIHRyZWUgKi8KIAl3aGlsZSAoaSkgeworCQlpbnQgbmVlZF90b192YWxpZGF0ZSA9IDA7CisKIAkJZXh0X2RlYnVnKCJkZXB0aCAlZDogbnVtICVkLCBtYXggJWRcbiIsCiAJCQkgIHBwb3MsIGxlMTZfdG9fY3B1KGVoLT5laF9lbnRyaWVzKSwgbGUxNl90b19jcHUoZWgtPmVoX21heCkpOwogCkBAIC01NzMsMTAgKzY2MSwxNyBAQAogCQlwYXRoW3Bwb3NdLnBfZGVwdGggPSBpOwogCQlwYXRoW3Bwb3NdLnBfZXh0ID0gTlVMTDsKIAotCQliaCA9IHNiX2JyZWFkKGlub2RlLT5pX3NiLCBwYXRoW3Bwb3NdLnBfYmxvY2spOwotCQlpZiAoIWJoKQorCQliaCA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgcGF0aFtwcG9zXS5wX2Jsb2NrKTsKKwkJaWYgKHVubGlrZWx5KCFiaCkpCiAJCQlnb3RvIGVycjsKLQorCQlpZiAoIWJoX3VwdG9kYXRlX29yX2xvY2soYmgpKSB7CisJCQlpZiAoYmhfc3VibWl0X3JlYWQoYmgpIDwgMCkgeworCQkJCXB1dF9iaChiaCk7CisJCQkJZ290byBlcnI7CisJCQl9CisJCQkvKiB2YWxpZGF0ZSB0aGUgZXh0ZW50IGVudHJpZXMgKi8KKwkJCW5lZWRfdG9fdmFsaWRhdGUgPSAxOworCQl9CiAJCWVoID0gZXh0X2Jsb2NrX2hkcihiaCk7CiAJCXBwb3MrKzsKIAkJQlVHX09OKHBwb3MgPiBkZXB0aCk7CkBAIC01ODQsNyArNjc5LDcgQEAKIAkJcGF0aFtwcG9zXS5wX2hkciA9IGVoOwogCQlpLS07CiAKLQkJaWYgKGV4dDRfZXh0X2NoZWNrX2hlYWRlcihpbm9kZSwgZWgsIGkpKQorCQlpZiAobmVlZF90b192YWxpZGF0ZSAmJiBleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIGkpKQogCQkJZ290byBlcnI7CiAJfQogCkBAIC0xMTgxLDcgKzEyNzYsNyBAQAogCQkJcmV0dXJuIC1FSU87CiAJCWVoID0gZXh0X2Jsb2NrX2hkcihiaCk7CiAJCS8qIHN1YnRyYWN0IGZyb20gcF9kZXB0aCB0byBnZXQgcHJvcGVyIGVoX2RlcHRoICovCi0JCWlmIChleHQ0X2V4dF9jaGVja19oZWFkZXIoaW5vZGUsIGVoLCBwYXRoLT5wX2RlcHRoIC0gZGVwdGgpKSB7CisJCWlmIChleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIHBhdGgtPnBfZGVwdGggLSBkZXB0aCkpIHsKIAkJCXB1dF9iaChiaCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpAQCAtMTE5NCw3ICsxMjg5LDcgQEAKIAlpZiAoYmggPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU87CiAJZWggPSBleHRfYmxvY2tfaGRyKGJoKTsKLQlpZiAoZXh0NF9leHRfY2hlY2tfaGVhZGVyKGlub2RlLCBlaCwgcGF0aC0+cF9kZXB0aCAtIGRlcHRoKSkgeworCWlmIChleHQ0X2V4dF9jaGVjayhpbm9kZSwgZWgsIHBhdGgtPnBfZGVwdGggLSBkZXB0aCkpIHsKIAkJcHV0X2JoKGJoKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMjEzNyw3ICsyMjMyLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXBhdGhbMF0ucF9oZHIgPSBleHRfaW5vZGVfaGRyKGlub2RlKTsKLQlpZiAoZXh0NF9leHRfY2hlY2tfaGVhZGVyKGlub2RlLCBwYXRoWzBdLnBfaGRyLCBkZXB0aCkpIHsKKwlpZiAoZXh0NF9leHRfY2hlY2soaW5vZGUsIHBhdGhbMF0ucF9oZHIsIGRlcHRoKSkgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMTkxLDcgKzIyODYsNyBAQAogCQkJCWVyciA9IC1FSU87CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlpZiAoZXh0NF9leHRfY2hlY2tfaGVhZGVyKGlub2RlLCBleHRfYmxvY2tfaGRyKGJoKSwKKwkJCWlmIChleHQ0X2V4dF9jaGVjayhpbm9kZSwgZXh0X2Jsb2NrX2hkcihiaCksCiAJCQkJCQkJZGVwdGggLSBpIC0gMSkpIHsKIAkJCQllcnIgPSAtRUlPOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuYwppbmRleCBmNzMxY2I1Li41ODhhZjhjIDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZpbGUuYworKysgYi9mcy9leHQ0L2ZpbGUuYwpAQCAtMzMsOSArMzMsMTQgQEAKICAqLwogc3RhdGljIGludCBleHQ0X3JlbGVhc2VfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKKwlpZiAoRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmIEVYVDRfU1RBVEVfREFfQUxMT0NfQ0xPU0UpIHsKKwkJZXh0NF9hbGxvY19kYV9ibG9ja3MoaW5vZGUpOworCQlFWFQ0X0koaW5vZGUpLT5pX3N0YXRlICY9IH5FWFQ0X1NUQVRFX0RBX0FMTE9DX0NMT1NFOworCX0KIAkvKiBpZiB3ZSBhcmUgdGhlIGxhc3Qgd3JpdGVyIG9uIHRoZSBpbm9kZSwgZHJvcCB0aGUgYmxvY2sgcmVzZXJ2YXRpb24gKi8KIAlpZiAoKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgotCQkJKGF0b21pY19yZWFkKCZpbm9kZS0+aV93cml0ZWNvdW50KSA9PSAxKSkKKwkJCShhdG9taWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkgPT0gMSkgJiYKKwkJICAgICAgICAhRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcykKIAl7CiAJCWRvd25fd3JpdGUoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pOwogCQlleHQ0X2Rpc2NhcmRfcHJlYWxsb2NhdGlvbnMoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pYWxsb2MuYyBiL2ZzL2V4dDQvaWFsbG9jLmMKaW5kZXggZmI1MWI0MC4uNDdiODRlOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pYWxsb2MuYworKysgYi9mcy9leHQ0L2lhbGxvYy5jCkBAIC0xODksNyArMTg5LDYgQEAKIAlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXM7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpOwogCWludCBmYXRhbCA9IDAsIGVyciwgY291bnQsIGNsZWFyZWQ7Ci0JZXh0NF9ncm91cF90IGZsZXhfZ3JvdXA7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSA+IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJleHQ0X2ZyZWVfaW5vZGU6IGlub2RlIGhhcyBjb3VudD0lZFxuIiwKQEAgLTI2OCw2ICsyNjcsMTMgQEAKIAkJCWlmIChpc19kaXJlY3RvcnkpIHsKIAkJCQljb3VudCA9IGV4dDRfdXNlZF9kaXJzX2NvdW50KHNiLCBnZHApIC0gMTsKIAkJCQlleHQ0X3VzZWRfZGlyc19zZXQoc2IsIGdkcCwgY291bnQpOworCQkJCWlmIChzYmktPnNfbG9nX2dyb3Vwc19wZXJfZmxleCkgeworCQkJCQlleHQ0X2dyb3VwX3QgZjsKKworCQkJCQlmID0gZXh0NF9mbGV4X2dyb3VwKHNiaSwgYmxvY2tfZ3JvdXApOworCQkJCQlhdG9taWNfZGVjKCZzYmktPnNfZmxleF9ncm91cHNbZl0uZnJlZV9pbm9kZXMpOworCQkJCX0KKwogCQkJfQogCQkJZ2RwLT5iZ19jaGVja3N1bSA9IGV4dDRfZ3JvdXBfZGVzY19jc3VtKHNiaSwKIAkJCQkJCQlibG9ja19ncm91cCwgZ2RwKTsKQEAgLTI3NywxMCArMjgzLDEwIEBACiAJCQkJcGVyY3B1X2NvdW50ZXJfZGVjKCZzYmktPnNfZGlyc19jb3VudGVyKTsKIAogCQkJaWYgKHNiaS0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4KSB7Ci0JCQkJZmxleF9ncm91cCA9IGV4dDRfZmxleF9ncm91cChzYmksIGJsb2NrX2dyb3VwKTsKLQkJCQlzcGluX2xvY2soc2JfYmdsX2xvY2soc2JpLCBmbGV4X2dyb3VwKSk7Ci0JCQkJc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZsZXhfZ3JvdXBdLmZyZWVfaW5vZGVzKys7Ci0JCQkJc3Bpbl91bmxvY2soc2JfYmdsX2xvY2soc2JpLCBmbGV4X2dyb3VwKSk7CisJCQkJZXh0NF9ncm91cF90IGY7CisKKwkJCQlmID0gZXh0NF9mbGV4X2dyb3VwKHNiaSwgYmxvY2tfZ3JvdXApOworCQkJCWF0b21pY19pbmMoJnNiaS0+c19mbGV4X2dyb3Vwc1tmXS5mcmVlX2lub2Rlcyk7CiAJCQl9CiAJCX0KIAkJQlVGRkVSX1RSQUNFKGJoMiwgImNhbGwgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEiKTsKQEAgLTM2MCw5ICszNjYsOSBAQAogCQlzYmktPnNfbG9nX2dyb3Vwc19wZXJfZmxleDsKIAogZmluZF9jbG9zZV90b19wYXJlbnQ6Ci0JZmxleGJnX2ZyZWVfYmxvY2tzID0gZmxleF9ncm91cFtiZXN0X2ZsZXhdLmZyZWVfYmxvY2tzOworCWZsZXhiZ19mcmVlX2Jsb2NrcyA9IGF0b21pY19yZWFkKCZmbGV4X2dyb3VwW2Jlc3RfZmxleF0uZnJlZV9ibG9ja3MpOwogCWZsZXhfZnJlZWJfcmF0aW8gPSBmbGV4YmdfZnJlZV9ibG9ja3MgKiAxMDAgLyBibG9ja3NfcGVyX2ZsZXg7Ci0JaWYgKGZsZXhfZ3JvdXBbYmVzdF9mbGV4XS5mcmVlX2lub2RlcyAmJgorCWlmIChhdG9taWNfcmVhZCgmZmxleF9ncm91cFtiZXN0X2ZsZXhdLmZyZWVfaW5vZGVzKSAmJgogCSAgICBmbGV4X2ZyZWViX3JhdGlvID4gZnJlZV9ibG9ja19yYXRpbykKIAkJZ290byBmb3VuZF9mbGV4Ymc7CiAKQEAgLTM3NSwyNCArMzgxLDI0IEBACiAJCWlmIChpID09IHBhcmVudF9mYmdfZ3JvdXAgfHwgaSA9PSBwYXJlbnRfZmJnX2dyb3VwIC0gMSkKIAkJCWNvbnRpbnVlOwogCi0JCWZsZXhiZ19mcmVlX2Jsb2NrcyA9IGZsZXhfZ3JvdXBbaV0uZnJlZV9ibG9ja3M7CisJCWZsZXhiZ19mcmVlX2Jsb2NrcyA9IGF0b21pY19yZWFkKCZmbGV4X2dyb3VwW2ldLmZyZWVfYmxvY2tzKTsKIAkJZmxleF9mcmVlYl9yYXRpbyA9IGZsZXhiZ19mcmVlX2Jsb2NrcyAqIDEwMCAvIGJsb2Nrc19wZXJfZmxleDsKIAogCQlpZiAoZmxleF9mcmVlYl9yYXRpbyA+IGZyZWVfYmxvY2tfcmF0aW8gJiYKLQkJICAgIGZsZXhfZ3JvdXBbaV0uZnJlZV9pbm9kZXMpIHsKKwkJICAgIChhdG9taWNfcmVhZCgmZmxleF9ncm91cFtpXS5mcmVlX2lub2RlcykpKSB7CiAJCQliZXN0X2ZsZXggPSBpOwogCQkJZ290byBmb3VuZF9mbGV4Ymc7CiAJCX0KIAotCQlpZiAoZmxleF9ncm91cFtiZXN0X2ZsZXhdLmZyZWVfaW5vZGVzID09IDAgfHwKLQkJICAgIChmbGV4X2dyb3VwW2ldLmZyZWVfYmxvY2tzID4KLQkJICAgICBmbGV4X2dyb3VwW2Jlc3RfZmxleF0uZnJlZV9ibG9ja3MgJiYKLQkJICAgICBmbGV4X2dyb3VwW2ldLmZyZWVfaW5vZGVzKSkKKwkJaWYgKChhdG9taWNfcmVhZCgmZmxleF9ncm91cFtiZXN0X2ZsZXhdLmZyZWVfaW5vZGVzKSA9PSAwKSB8fAorCQkgICAgKChhdG9taWNfcmVhZCgmZmxleF9ncm91cFtpXS5mcmVlX2Jsb2NrcykgPgorCQkgICAgICBhdG9taWNfcmVhZCgmZmxleF9ncm91cFtiZXN0X2ZsZXhdLmZyZWVfYmxvY2tzKSkgJiYKKwkJICAgICBhdG9taWNfcmVhZCgmZmxleF9ncm91cFtpXS5mcmVlX2lub2RlcykpKQogCQkJYmVzdF9mbGV4ID0gaTsKIAl9CiAKLQlpZiAoIWZsZXhfZ3JvdXBbYmVzdF9mbGV4XS5mcmVlX2lub2RlcyB8fAotCSAgICAhZmxleF9ncm91cFtiZXN0X2ZsZXhdLmZyZWVfYmxvY2tzKQorCWlmICghYXRvbWljX3JlYWQoJmZsZXhfZ3JvdXBbYmVzdF9mbGV4XS5mcmVlX2lub2RlcykgfHwKKwkgICAgIWF0b21pY19yZWFkKCZmbGV4X2dyb3VwW2Jlc3RfZmxleF0uZnJlZV9ibG9ja3MpKQogCQlyZXR1cm4gLTE7CiAKIGZvdW5kX2ZsZXhiZzoKQEAgLTQxMCw2ICs0MTYsNDIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RydWN0IG9ybG92X3N0YXRzIHsKKwlfX3UzMiBmcmVlX2lub2RlczsKKwlfX3UzMiBmcmVlX2Jsb2NrczsKKwlfX3UzMiB1c2VkX2RpcnM7Cit9OworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBPcmxvdidzIGFsbG9jYXRvcjsgcmV0dXJucyBjcml0aWNhbCBpbmZvcm1hdGlvbgorICogZm9yIGEgcGFydGljdWxhciBibG9jayBncm91cCBvciBmbGV4X2JnLiAgSWYgZmxleF9zaXplIGlzIDEsIHRoZW4gZworICogaXMgYSBibG9jayBncm91cCBudW1iZXI7IG90aGVyd2lzZSBpdCBpcyBmbGV4X2JnIG51bWJlci4KKyAqLwordm9pZCBnZXRfb3Jsb3Zfc3RhdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgZXh0NF9ncm91cF90IGcsCisJCSAgICAgICBpbnQgZmxleF9zaXplLCBzdHJ1Y3Qgb3Jsb3Zfc3RhdHMgKnN0YXRzKQoreworCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmRlc2M7CisJc3RydWN0IGZsZXhfZ3JvdXBzICpmbGV4X2dyb3VwID0gRVhUNF9TQihzYiktPnNfZmxleF9ncm91cHM7CisKKwlpZiAoZmxleF9zaXplID4gMSkgeworCQlzdGF0cy0+ZnJlZV9pbm9kZXMgPSBhdG9taWNfcmVhZCgmZmxleF9ncm91cFtnXS5mcmVlX2lub2Rlcyk7CisJCXN0YXRzLT5mcmVlX2Jsb2NrcyA9IGF0b21pY19yZWFkKCZmbGV4X2dyb3VwW2ddLmZyZWVfYmxvY2tzKTsKKwkJc3RhdHMtPnVzZWRfZGlycyA9IGF0b21pY19yZWFkKCZmbGV4X2dyb3VwW2ddLnVzZWRfZGlycyk7CisJCXJldHVybjsKKwl9CisKKwlkZXNjID0gZXh0NF9nZXRfZ3JvdXBfZGVzYyhzYiwgZywgTlVMTCk7CisJaWYgKGRlc2MpIHsKKwkJc3RhdHMtPmZyZWVfaW5vZGVzID0gZXh0NF9mcmVlX2lub2Rlc19jb3VudChzYiwgZGVzYyk7CisJCXN0YXRzLT5mcmVlX2Jsb2NrcyA9IGV4dDRfZnJlZV9ibGtzX2NvdW50KHNiLCBkZXNjKTsKKwkJc3RhdHMtPnVzZWRfZGlycyA9IGV4dDRfdXNlZF9kaXJzX2NvdW50KHNiLCBkZXNjKTsKKwl9IGVsc2UgeworCQlzdGF0cy0+ZnJlZV9pbm9kZXMgPSAwOworCQlzdGF0cy0+ZnJlZV9ibG9ja3MgPSAwOworCQlzdGF0cy0+dXNlZF9kaXJzID0gMDsKKwl9Cit9CisKIC8qCiAgKiBPcmxvdidzIGFsbG9jYXRvciBmb3IgZGlyZWN0b3JpZXMuCiAgKgpAQCAtNDI1LDM1ICs0NjcsMzQgQEAKICAqIGl0IGhhcyB0b28gbWFueSBkaXJlY3RvcmllcyBhbHJlYWR5IChtYXhfZGlycykgb3IKICAqIGl0IGhhcyB0b28gZmV3IGZyZWUgaW5vZGVzIGxlZnQgKG1pbl9pbm9kZXMpIG9yCiAgKiBpdCBoYXMgdG9vIGZldyBmcmVlIGJsb2NrcyBsZWZ0IChtaW5fYmxvY2tzKSBvcgotICogaXQncyBhbHJlYWR5IHJ1bm5pbmcgdG9vIGxhcmdlIGRlYnQgKG1heF9kZWJ0KS4KICAqIFBhcmVudCdzIGdyb3VwIGlzIHByZWZlcnJlZCwgaWYgaXQgZG9lc24ndCBzYXRpc2Z5IHRoZXNlCiAgKiBjb25kaXRpb25zIHdlIHNlYXJjaCBjeWNsaWNhbGx5IHRocm91Z2ggdGhlIHJlc3QuIElmIG5vbmUKICAqIG9mIHRoZSBncm91cHMgbG9vayBnb29kIHdlIGp1c3QgbG9vayBmb3IgYSBncm91cCB3aXRoIG1vcmUKICAqIGZyZWUgaW5vZGVzIHRoYW4gYXZlcmFnZSAoc3RhcnRpbmcgYXQgcGFyZW50J3MgZ3JvdXApLgotICoKLSAqIERlYnQgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIHdlIGFsbG9jYXRlIGEgZGlyZWN0b3J5IGFuZCBkZWNyZW1lbnRlZAotICogd2hlbiB3ZSBhbGxvY2F0ZSBhbiBpbm9kZSwgd2l0aGluIDAtLTI1NS4KICAqLwogCi0jZGVmaW5lIElOT0RFX0NPU1QgNjQKLSNkZWZpbmUgQkxPQ0tfQ09TVCAyNTYKLQogc3RhdGljIGludCBmaW5kX2dyb3VwX29ybG92KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAotCQkJCWV4dDRfZ3JvdXBfdCAqZ3JvdXApCisJCQkgICAgZXh0NF9ncm91cF90ICpncm91cCwgaW50IG1vZGUpCiB7CiAJZXh0NF9ncm91cF90IHBhcmVudF9ncm91cCA9IEVYVDRfSShwYXJlbnQpLT5pX2Jsb2NrX2dyb3VwOwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwotCXN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcyA9IHNiaS0+c19lczsKIAlleHQ0X2dyb3VwX3Qgbmdyb3VwcyA9IHNiaS0+c19ncm91cHNfY291bnQ7CiAJaW50IGlub2Rlc19wZXJfZ3JvdXAgPSBFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpOwogCXVuc2lnbmVkIGludCBmcmVlaSwgYXZlZnJlZWk7CiAJZXh0NF9mc2Jsa190IGZyZWViLCBhdmVmcmVlYjsKLQlleHQ0X2ZzYmxrX3QgYmxvY2tzX3Blcl9kaXI7CiAJdW5zaWduZWQgaW50IG5kaXJzOwotCWludCBtYXhfZGVidCwgbWF4X2RpcnMsIG1pbl9pbm9kZXM7CisJaW50IG1heF9kaXJzLCBtaW5faW5vZGVzOwogCWV4dDRfZ3JwYmxrX3QgbWluX2Jsb2NrczsKLQlleHQ0X2dyb3VwX3QgaTsKKwlleHQ0X2dyb3VwX3QgaSwgZ3JwLCBnOwogCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmRlc2M7CisJc3RydWN0IG9ybG92X3N0YXRzIHN0YXRzOworCWludCBmbGV4X3NpemUgPSBleHQ0X2ZsZXhfYmdfc2l6ZShzYmkpOworCisJaWYgKGZsZXhfc2l6ZSA+IDEpIHsKKwkJbmdyb3VwcyA9IChuZ3JvdXBzICsgZmxleF9zaXplIC0gMSkgPj4KKwkJCXNiaS0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4OworCQlwYXJlbnRfZ3JvdXAgPj49IHNiaS0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4OworCX0KIAogCWZyZWVpID0gcGVyY3B1X2NvdW50ZXJfcmVhZF9wb3NpdGl2ZSgmc2JpLT5zX2ZyZWVpbm9kZXNfY291bnRlcik7CiAJYXZlZnJlZWkgPSBmcmVlaSAvIG5ncm91cHM7CkBAIC00NjIsNzEgKzUwMyw5NyBAQAogCWRvX2RpdihhdmVmcmVlYiwgbmdyb3Vwcyk7CiAJbmRpcnMgPSBwZXJjcHVfY291bnRlcl9yZWFkX3Bvc2l0aXZlKCZzYmktPnNfZGlyc19jb3VudGVyKTsKIAotCWlmICgocGFyZW50ID09IHNiLT5zX3Jvb3QtPmRfaW5vZGUpIHx8Ci0JICAgIChFWFQ0X0kocGFyZW50KS0+aV9mbGFncyAmIEVYVDRfVE9QRElSX0ZMKSkgeworCWlmIChTX0lTRElSKG1vZGUpICYmCisJICAgICgocGFyZW50ID09IHNiLT5zX3Jvb3QtPmRfaW5vZGUpIHx8CisJICAgICAoRVhUNF9JKHBhcmVudCktPmlfZmxhZ3MgJiBFWFQ0X1RPUERJUl9GTCkpKSB7CiAJCWludCBiZXN0X25kaXIgPSBpbm9kZXNfcGVyX2dyb3VwOwotCQlleHQ0X2dyb3VwX3QgZ3JwOwogCQlpbnQgcmV0ID0gLTE7CiAKIAkJZ2V0X3JhbmRvbV9ieXRlcygmZ3JwLCBzaXplb2YoZ3JwKSk7CiAJCXBhcmVudF9ncm91cCA9ICh1bnNpZ25lZClncnAgJSBuZ3JvdXBzOwogCQlmb3IgKGkgPSAwOyBpIDwgbmdyb3VwczsgaSsrKSB7Ci0JCQlncnAgPSAocGFyZW50X2dyb3VwICsgaSkgJSBuZ3JvdXBzOwotCQkJZGVzYyA9IGV4dDRfZ2V0X2dyb3VwX2Rlc2Moc2IsIGdycCwgTlVMTCk7Ci0JCQlpZiAoIWRlc2MgfHwgIWV4dDRfZnJlZV9pbm9kZXNfY291bnQoc2IsIGRlc2MpKQorCQkJZyA9IChwYXJlbnRfZ3JvdXAgKyBpKSAlIG5ncm91cHM7CisJCQlnZXRfb3Jsb3Zfc3RhdHMoc2IsIGcsIGZsZXhfc2l6ZSwgJnN0YXRzKTsKKwkJCWlmICghc3RhdHMuZnJlZV9pbm9kZXMpCiAJCQkJY29udGludWU7Ci0JCQlpZiAoZXh0NF91c2VkX2RpcnNfY291bnQoc2IsIGRlc2MpID49IGJlc3RfbmRpcikKKwkJCWlmIChzdGF0cy51c2VkX2RpcnMgPj0gYmVzdF9uZGlyKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKGV4dDRfZnJlZV9pbm9kZXNfY291bnQoc2IsIGRlc2MpIDwgYXZlZnJlZWkpCisJCQlpZiAoc3RhdHMuZnJlZV9pbm9kZXMgPCBhdmVmcmVlaSkKIAkJCQljb250aW51ZTsKLQkJCWlmIChleHQ0X2ZyZWVfYmxrc19jb3VudChzYiwgZGVzYykgPCBhdmVmcmVlYikKKwkJCWlmIChzdGF0cy5mcmVlX2Jsb2NrcyA8IGF2ZWZyZWViKQogCQkJCWNvbnRpbnVlOwotCQkJKmdyb3VwID0gZ3JwOworCQkJZ3JwID0gZzsKIAkJCXJldCA9IDA7Ci0JCQliZXN0X25kaXIgPSBleHQ0X3VzZWRfZGlyc19jb3VudChzYiwgZGVzYyk7CisJCQliZXN0X25kaXIgPSBzdGF0cy51c2VkX2RpcnM7CiAJCX0KLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0dXJuIHJldDsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFsbGJhY2s7CisJZm91bmRfZmxleF9iZzoKKwkJaWYgKGZsZXhfc2l6ZSA9PSAxKSB7CisJCQkqZ3JvdXAgPSBncnA7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qCisJCSAqIFdlIHBhY2sgaW5vZGVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZsZXhncm91cCdzCisJCSAqIGlub2RlIHRhYmxlcy4gIEJsb2NrIGFsbG9jYXRpb24gZGVjaXNpb25zIHdpbGwgZG8KKwkJICogc29tZXRoaW5nIHNpbWlsYXIsIGFsdGhvdWdoIHJlZ3VsYXIgZmlsZXMgd2lsbAorCQkgKiBzdGFydCBhdCAybmQgYmxvY2sgZ3JvdXAgb2YgdGhlIGZsZXhncm91cC4gIFNlZQorCQkgKiBleHQ0X2V4dF9maW5kX2dvYWwoKSBhbmQgZXh0NF9maW5kX25lYXIoKS4KKwkJICovCisJCWdycCAqPSBmbGV4X3NpemU7CisJCWZvciAoaSA9IDA7IGkgPCBmbGV4X3NpemU7IGkrKykgeworCQkJaWYgKGdycCtpID49IHNiaS0+c19ncm91cHNfY291bnQpCisJCQkJYnJlYWs7CisJCQlkZXNjID0gZXh0NF9nZXRfZ3JvdXBfZGVzYyhzYiwgZ3JwK2ksIE5VTEwpOworCQkJaWYgKGRlc2MgJiYgZXh0NF9mcmVlX2lub2Rlc19jb3VudChzYiwgZGVzYykpIHsKKwkJCQkqZ3JvdXAgPSBncnAraTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQogCQlnb3RvIGZhbGxiYWNrOwogCX0KIAotCWJsb2Nrc19wZXJfZGlyID0gZXh0NF9ibG9ja3NfY291bnQoZXMpIC0gZnJlZWI7Ci0JZG9fZGl2KGJsb2Nrc19wZXJfZGlyLCBuZGlycyk7Ci0KIAltYXhfZGlycyA9IG5kaXJzIC8gbmdyb3VwcyArIGlub2Rlc19wZXJfZ3JvdXAgLyAxNjsKLQltaW5faW5vZGVzID0gYXZlZnJlZWkgLSBpbm9kZXNfcGVyX2dyb3VwIC8gNDsKLQltaW5fYmxvY2tzID0gYXZlZnJlZWIgLSBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpIC8gNDsKKwltaW5faW5vZGVzID0gYXZlZnJlZWkgLSBpbm9kZXNfcGVyX2dyb3VwKmZsZXhfc2l6ZSAvIDQ7CisJaWYgKG1pbl9pbm9kZXMgPCAxKQorCQltaW5faW5vZGVzID0gMTsKKwltaW5fYmxvY2tzID0gYXZlZnJlZWIgLSBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpKmZsZXhfc2l6ZSAvIDQ7CiAKLQltYXhfZGVidCA9IEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYik7Ci0JbWF4X2RlYnQgLz0gbWF4X3QoaW50LCBibG9ja3NfcGVyX2RpciwgQkxPQ0tfQ09TVCk7Ci0JaWYgKG1heF9kZWJ0ICogSU5PREVfQ09TVCA+IGlub2Rlc19wZXJfZ3JvdXApCi0JCW1heF9kZWJ0ID0gaW5vZGVzX3Blcl9ncm91cCAvIElOT0RFX0NPU1Q7Ci0JaWYgKG1heF9kZWJ0ID4gMjU1KQotCQltYXhfZGVidCA9IDI1NTsKLQlpZiAobWF4X2RlYnQgPT0gMCkKLQkJbWF4X2RlYnQgPSAxOworCS8qCisJICogU3RhcnQgbG9va2luZyBpbiB0aGUgZmxleCBncm91cCB3aGVyZSB3ZSBsYXN0IGFsbG9jYXRlZCBhbgorCSAqIGlub2RlIGZvciB0aGlzIHBhcmVudCBkaXJlY3RvcnkKKwkgKi8KKwlpZiAoRVhUNF9JKHBhcmVudCktPmlfbGFzdF9hbGxvY19ncm91cCAhPSB+MCkgeworCQlwYXJlbnRfZ3JvdXAgPSBFWFQ0X0kocGFyZW50KS0+aV9sYXN0X2FsbG9jX2dyb3VwOworCQlpZiAoZmxleF9zaXplID4gMSkKKwkJCXBhcmVudF9ncm91cCA+Pj0gc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXg7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IG5ncm91cHM7IGkrKykgewotCQkqZ3JvdXAgPSAocGFyZW50X2dyb3VwICsgaSkgJSBuZ3JvdXBzOwotCQlkZXNjID0gZXh0NF9nZXRfZ3JvdXBfZGVzYyhzYiwgKmdyb3VwLCBOVUxMKTsKLQkJaWYgKCFkZXNjIHx8ICFleHQ0X2ZyZWVfaW5vZGVzX2NvdW50KHNiLCBkZXNjKSkKKwkJZ3JwID0gKHBhcmVudF9ncm91cCArIGkpICUgbmdyb3VwczsKKwkJZ2V0X29ybG92X3N0YXRzKHNiLCBncnAsIGZsZXhfc2l6ZSwgJnN0YXRzKTsKKwkJaWYgKHN0YXRzLnVzZWRfZGlycyA+PSBtYXhfZGlycykKIAkJCWNvbnRpbnVlOwotCQlpZiAoZXh0NF91c2VkX2RpcnNfY291bnQoc2IsIGRlc2MpID49IG1heF9kaXJzKQorCQlpZiAoc3RhdHMuZnJlZV9pbm9kZXMgPCBtaW5faW5vZGVzKQogCQkJY29udGludWU7Ci0JCWlmIChleHQ0X2ZyZWVfaW5vZGVzX2NvdW50KHNiLCBkZXNjKSA8IG1pbl9pbm9kZXMpCisJCWlmIChzdGF0cy5mcmVlX2Jsb2NrcyA8IG1pbl9ibG9ja3MpCiAJCQljb250aW51ZTsKLQkJaWYgKGV4dDRfZnJlZV9ibGtzX2NvdW50KHNiLCBkZXNjKSA8IG1pbl9ibG9ja3MpCi0JCQljb250aW51ZTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gZm91bmRfZmxleF9iZzsKIAl9CiAKIGZhbGxiYWNrOgorCW5ncm91cHMgPSBzYmktPnNfZ3JvdXBzX2NvdW50OworCWF2ZWZyZWVpID0gZnJlZWkgLyBuZ3JvdXBzOworCXBhcmVudF9ncm91cCA9IEVYVDRfSShwYXJlbnQpLT5pX2Jsb2NrX2dyb3VwOwogCWZvciAoaSA9IDA7IGkgPCBuZ3JvdXBzOyBpKyspIHsKLQkJKmdyb3VwID0gKHBhcmVudF9ncm91cCArIGkpICUgbmdyb3VwczsKLQkJZGVzYyA9IGV4dDRfZ2V0X2dyb3VwX2Rlc2Moc2IsICpncm91cCwgTlVMTCk7CisJCWdycCA9IChwYXJlbnRfZ3JvdXAgKyBpKSAlIG5ncm91cHM7CisJCWRlc2MgPSBleHQ0X2dldF9ncm91cF9kZXNjKHNiLCBncnAsIE5VTEwpOwogCQlpZiAoZGVzYyAmJiBleHQ0X2ZyZWVfaW5vZGVzX2NvdW50KHNiLCBkZXNjKSAmJgotCQkJZXh0NF9mcmVlX2lub2Rlc19jb3VudChzYiwgZGVzYykgPj0gYXZlZnJlZWkpCisJCSAgICBleHQ0X2ZyZWVfaW5vZGVzX2NvdW50KHNiLCBkZXNjKSA+PSBhdmVmcmVlaSkgeworCQkJKmdyb3VwID0gZ3JwOwogCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAoYXZlZnJlZWkpIHsKQEAgLTU0MiwxMiArNjA5LDUxIEBACiB9CiAKIHN0YXRpYyBpbnQgZmluZF9ncm91cF9vdGhlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKLQkJCQlleHQ0X2dyb3VwX3QgKmdyb3VwKQorCQkJICAgIGV4dDRfZ3JvdXBfdCAqZ3JvdXAsIGludCBtb2RlKQogewogCWV4dDRfZ3JvdXBfdCBwYXJlbnRfZ3JvdXAgPSBFWFQ0X0kocGFyZW50KS0+aV9ibG9ja19ncm91cDsKIAlleHQ0X2dyb3VwX3Qgbmdyb3VwcyA9IEVYVDRfU0Ioc2IpLT5zX2dyb3Vwc19jb3VudDsKIAlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpkZXNjOwotCWV4dDRfZ3JvdXBfdCBpOworCWV4dDRfZ3JvdXBfdCBpLCBsYXN0OworCWludCBmbGV4X3NpemUgPSBleHQ0X2ZsZXhfYmdfc2l6ZShFWFQ0X1NCKHNiKSk7CisKKwkvKgorCSAqIFRyeSB0byBwbGFjZSB0aGUgaW5vZGUgaXMgdGhlIHNhbWUgZmxleCBncm91cCBhcyBpdHMKKwkgKiBwYXJlbnQuICBJZiB3ZSBjYW4ndCBmaW5kIHNwYWNlLCB1c2UgdGhlIE9ybG92IGFsZ29yaXRobSB0bworCSAqIGZpbmQgYW5vdGhlciBmbGV4IGdyb3VwLCBhbmQgc3RvcmUgdGhhdCBpbmZvcm1hdGlvbiBpbiB0aGUKKwkgKiBwYXJlbnQgZGlyZWN0b3J5J3MgaW5vZGUgaW5mb3JtYXRpb24gc28gdGhhdCB1c2UgdGhhdCBmbGV4CisJICogZ3JvdXAgZm9yIGZ1dHVyZSBhbGxvY2F0aW9ucy4KKwkgKi8KKwlpZiAoZmxleF9zaXplID4gMSkgeworCQlpbnQgcmV0cnkgPSAwOworCisJdHJ5X2FnYWluOgorCQlwYXJlbnRfZ3JvdXAgJj0gfihmbGV4X3NpemUtMSk7CisJCWxhc3QgPSBwYXJlbnRfZ3JvdXAgKyBmbGV4X3NpemU7CisJCWlmIChsYXN0ID4gbmdyb3VwcykKKwkJCWxhc3QgPSBuZ3JvdXBzOworCQlmb3IgIChpID0gcGFyZW50X2dyb3VwOyBpIDwgbGFzdDsgaSsrKSB7CisJCQlkZXNjID0gZXh0NF9nZXRfZ3JvdXBfZGVzYyhzYiwgaSwgTlVMTCk7CisJCQlpZiAoZGVzYyAmJiBleHQ0X2ZyZWVfaW5vZGVzX2NvdW50KHNiLCBkZXNjKSkgeworCQkJCSpncm91cCA9IGk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJaWYgKCFyZXRyeSAmJiBFWFQ0X0kocGFyZW50KS0+aV9sYXN0X2FsbG9jX2dyb3VwICE9IH4wKSB7CisJCQlyZXRyeSA9IDE7CisJCQlwYXJlbnRfZ3JvdXAgPSBFWFQ0X0kocGFyZW50KS0+aV9sYXN0X2FsbG9jX2dyb3VwOworCQkJZ290byB0cnlfYWdhaW47CisJCX0KKwkJLyoKKwkJICogSWYgdGhpcyBkaWRuJ3Qgd29yaywgdXNlIHRoZSBPcmxvdiBzZWFyY2ggYWxnb3JpdGhtCisJCSAqIHRvIGZpbmQgYSBuZXcgZmxleCBncm91cDsgd2UgcGFzcyBpbiB0aGUgbW9kZSB0bworCQkgKiBhdm9pZCB0aGUgdG9wZGlyIGFsZ29yaXRobXMuCisJCSAqLworCQkqZ3JvdXAgPSBwYXJlbnRfZ3JvdXAgKyBmbGV4X3NpemU7CisJCWlmICgqZ3JvdXAgPiBuZ3JvdXBzKQorCQkJKmdyb3VwID0gMDsKKwkJcmV0dXJuIGZpbmRfZ3JvdXBfb3Jsb3Yoc2IsIHBhcmVudCwgZ3JvdXAsIG1vZGUpOworCX0KIAogCS8qCiAJICogVHJ5IHRvIHBsYWNlIHRoZSBpbm9kZSBpbiBpdHMgcGFyZW50IGRpcmVjdG9yeQpAQCAtNjY1LDYgKzc3MSwxMSBAQAogCWlmIChTX0lTRElSKG1vZGUpKSB7CiAJCWNvdW50ID0gZXh0NF91c2VkX2RpcnNfY291bnQoc2IsIGdkcCkgKyAxOwogCQlleHQ0X3VzZWRfZGlyc19zZXQoc2IsIGdkcCwgY291bnQpOworCQlpZiAoc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXgpIHsKKwkJCWV4dDRfZ3JvdXBfdCBmID0gZXh0NF9mbGV4X2dyb3VwKHNiaSwgZ3JvdXApOworCisJCQlhdG9taWNfaW5jKCZzYmktPnNfZmxleF9ncm91cHNbZl0uZnJlZV9pbm9kZXMpOworCQl9CiAJfQogCWdkcC0+YmdfY2hlY2tzdW0gPSBleHQ0X2dyb3VwX2Rlc2NfY3N1bShzYmksIGdyb3VwLCBnZHApOwogZXJyX3JldDoKQEAgLTcxNiwxMCArODI3LDEwIEBACiAJc2JpID0gRVhUNF9TQihzYik7CiAJZXMgPSBzYmktPnNfZXM7CiAKLQlpZiAoc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXgpIHsKKwlpZiAoc2JpLT5zX2xvZ19ncm91cHNfcGVyX2ZsZXggJiYgdGVzdF9vcHQoc2IsIE9MREFMTE9DKSkgewogCQlyZXQyID0gZmluZF9ncm91cF9mbGV4KHNiLCBkaXIsICZncm91cCk7CiAJCWlmIChyZXQyID09IC0xKSB7Ci0JCQlyZXQyID0gZmluZF9ncm91cF9vdGhlcihzYiwgZGlyLCAmZ3JvdXApOworCQkJcmV0MiA9IGZpbmRfZ3JvdXBfb3RoZXIoc2IsIGRpciwgJmdyb3VwLCBtb2RlKTsKIAkJCWlmIChyZXQyID09IDAgJiYgb25jZSkKIAkJCQlvbmNlID0gMDsKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgImV4dDQ6IGZpbmRfZ3JvdXBfZmxleCAiCkBAIC03MzMsMTEgKzg0NCwxMiBAQAogCQlpZiAodGVzdF9vcHQoc2IsIE9MREFMTE9DKSkKIAkJCXJldDIgPSBmaW5kX2dyb3VwX2RpcihzYiwgZGlyLCAmZ3JvdXApOwogCQllbHNlCi0JCQlyZXQyID0gZmluZF9ncm91cF9vcmxvdihzYiwgZGlyLCAmZ3JvdXApOworCQkJcmV0MiA9IGZpbmRfZ3JvdXBfb3Jsb3Yoc2IsIGRpciwgJmdyb3VwLCBtb2RlKTsKIAl9IGVsc2UKLQkJcmV0MiA9IGZpbmRfZ3JvdXBfb3RoZXIoc2IsIGRpciwgJmdyb3VwKTsKKwkJcmV0MiA9IGZpbmRfZ3JvdXBfb3RoZXIoc2IsIGRpciwgJmdyb3VwLCBtb2RlKTsKIAogZ290X2dyb3VwOgorCUVYVDRfSShkaXIpLT5pX2xhc3RfYWxsb2NfZ3JvdXAgPSBncm91cDsKIAllcnIgPSAtRU5PU1BDOwogCWlmIChyZXQyID09IC0xKQogCQlnb3RvIG91dDsKQEAgLTg1OCw5ICs5NzAsNyBAQAogCiAJaWYgKHNiaS0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4KSB7CiAJCWZsZXhfZ3JvdXAgPSBleHQ0X2ZsZXhfZ3JvdXAoc2JpLCBncm91cCk7Ci0JCXNwaW5fbG9jayhzYl9iZ2xfbG9jayhzYmksIGZsZXhfZ3JvdXApKTsKLQkJc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZsZXhfZ3JvdXBdLmZyZWVfaW5vZGVzLS07Ci0JCXNwaW5fdW5sb2NrKHNiX2JnbF9sb2NrKHNiaSwgZmxleF9ncm91cCkpOworCQlhdG9taWNfZGVjKCZzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0uZnJlZV9pbm9kZXMpOwogCX0KIAogCWlub2RlLT5pX3VpZCA9IGN1cnJlbnRfZnN1aWQoKTsKQEAgLTg4NSwxOSArOTk1LDE2IEBACiAJZWktPmlfZGlza3NpemUgPSAwOwogCiAJLyoKLQkgKiBEb24ndCBpbmhlcml0IGV4dGVudCBmbGFnIGZyb20gZGlyZWN0b3J5LiBXZSBzZXQgZXh0ZW50IGZsYWcgb24KLQkgKiBuZXdseSBjcmVhdGVkIGRpcmVjdG9yeSBhbmQgZmlsZSBvbmx5IGlmIC1vIGV4dGVudCBtb3VudCBvcHRpb24gaXMKLQkgKiBzcGVjaWZpZWQKKwkgKiBEb24ndCBpbmhlcml0IGV4dGVudCBmbGFnIGZyb20gZGlyZWN0b3J5LCBhbW9uZ3N0IG90aGVycy4gV2Ugc2V0CisJICogZXh0ZW50IGZsYWcgb24gbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnkgYW5kIGZpbGUgb25seSBpZiAtbyBleHRlbnQKKwkgKiBtb3VudCBvcHRpb24gaXMgc3BlY2lmaWVkCiAJICovCi0JZWktPmlfZmxhZ3MgPSBFWFQ0X0koZGlyKS0+aV9mbGFncyAmIH4oRVhUNF9JTkRFWF9GTHxFWFQ0X0VYVEVOVFNfRkwpOwotCWlmIChTX0lTTE5LKG1vZGUpKQotCQllaS0+aV9mbGFncyAmPSB+KEVYVDRfSU1NVVRBQkxFX0ZMfEVYVDRfQVBQRU5EX0ZMKTsKLQkvKiBkaXJzeW5jIG9ubHkgYXBwbGllcyB0byBkaXJlY3RvcmllcyAqLwotCWlmICghU19JU0RJUihtb2RlKSkKLQkJZWktPmlfZmxhZ3MgJj0gfkVYVDRfRElSU1lOQ19GTDsKKwllaS0+aV9mbGFncyA9CisJCWV4dDRfbWFza19mbGFncyhtb2RlLCBFWFQ0X0koZGlyKS0+aV9mbGFncyAmIEVYVDRfRkxfSU5IRVJJVEVEKTsKIAllaS0+aV9maWxlX2FjbCA9IDA7CiAJZWktPmlfZHRpbWUgPSAwOwogCWVpLT5pX2Jsb2NrX2dyb3VwID0gZ3JvdXA7CisJZWktPmlfbGFzdF9hbGxvY19ncm91cCA9IH4wOwogCiAJZXh0NF9zZXRfaW5vZGVfZmxhZ3MoaW5vZGUpOwogCWlmIChJU19ESVJTWU5DKGlub2RlKSkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCA3MWQzZWNkLi5hMmU3OTUyIDEwMDY0NAotLS0gYS9mcy9leHQ0L2lub2RlLmMKKysrIGIvZnMvZXh0NC9pbm9kZS5jCkBAIC0zNzEsNiArMzcxLDM0IEBACiAJcmV0dXJuIG47CiB9CiAKK3N0YXRpYyBpbnQgX19leHQ0X2NoZWNrX2Jsb2NrcmVmKGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSB1bnNpZ25lZCBpbnQgKnAsIHVuc2lnbmVkIGludCBtYXgpIHsKKworCXVuc2lnbmVkIGludCBtYXhibG9ja3MgPSBleHQ0X2Jsb2Nrc19jb3VudChFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19lcyk7CisJdW5zaWduZWQgaW50ICpicmVmID0gcDsKKwl3aGlsZSAoYnJlZiA8IHArbWF4KSB7CisJCWlmICh1bmxpa2VseSgqYnJlZiA+PSBtYXhibG9ja3MpKSB7CisJCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCBmdW5jdGlvbiwKKwkJCQkgICAiYmxvY2sgcmVmZXJlbmNlICV1ID49IG1heCAoJXUpICIKKwkJCQkgICAiaW4gaW5vZGUgIyVsdSwgb2Zmc2V0PSVkIiwKKwkJCQkgICAqYnJlZiwgbWF4YmxvY2tzLAorCQkJCSAgIGlub2RlLT5pX2lubywgKGludCkoYnJlZi1wKSk7CisgCQkJcmV0dXJuIC1FSU87CisgCQl9CisJCWJyZWYrKzsKKyAJfQorIAlyZXR1cm4gMDsKK30KKworCisjZGVmaW5lIGV4dDRfY2hlY2tfaW5kaXJlY3RfYmxvY2tyZWYoaW5vZGUsIGJoKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fZXh0NF9jaGVja19ibG9ja3JlZihfX2Z1bmNfXywgaW5vZGUsIChfX2xlMzIgKikoYmgpLT5iX2RhdGEsICBcCisJCQkgICAgICBFWFQ0X0FERFJfUEVSX0JMT0NLKChpbm9kZSktPmlfc2IpKQorCisjZGVmaW5lIGV4dDRfY2hlY2tfaW5vZGVfYmxvY2tyZWYoaW5vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fZXh0NF9jaGVja19ibG9ja3JlZihfX2Z1bmNfXywgaW5vZGUsIEVYVDRfSShpbm9kZSktPmlfZGF0YSwgICBcCisJCQkgICAgICBFWFQ0X05ESVJfQkxPQ0tTKQorCiAvKioKICAqCWV4dDRfZ2V0X2JyYW5jaCAtIHJlYWQgdGhlIGNoYWluIG9mIGluZGlyZWN0IGJsb2NrcyBsZWFkaW5nIHRvIGRhdGEKICAqCUBpbm9kZTogaW5vZGUgaW4gcXVlc3Rpb24KQEAgLTQxNSw5ICs0NDMsMjIgQEAKIAlpZiAoIXAtPmtleSkKIAkJZ290byBub19ibG9jazsKIAl3aGlsZSAoLS1kZXB0aCkgewotCQliaCA9IHNiX2JyZWFkKHNiLCBsZTMyX3RvX2NwdShwLT5rZXkpKTsKLQkJaWYgKCFiaCkKKwkJYmggPSBzYl9nZXRibGsoc2IsIGxlMzJfdG9fY3B1KHAtPmtleSkpOworCQlpZiAodW5saWtlbHkoIWJoKSkKIAkJCWdvdG8gZmFpbHVyZTsKKyAgICAgICAgICAgICAgICAgIAorCQlpZiAoIWJoX3VwdG9kYXRlX29yX2xvY2soYmgpKSB7CisJCQlpZiAoYmhfc3VibWl0X3JlYWQoYmgpIDwgMCkgeworCQkJCXB1dF9iaChiaCk7CisJCQkJZ290byBmYWlsdXJlOworCQkJfQorCQkJLyogdmFsaWRhdGUgYmxvY2sgcmVmZXJlbmNlcyAqLworCQkJaWYgKGV4dDRfY2hlY2tfaW5kaXJlY3RfYmxvY2tyZWYoaW5vZGUsIGJoKSkgeworCQkJCXB1dF9iaChiaCk7CisJCQkJZ290byBmYWlsdXJlOworCQkJfQorCQl9CisJCQogCQlhZGRfY2hhaW4oKytwLCBiaCwgKF9fbGUzMiAqKWJoLT5iX2RhdGEgKyAqKytvZmZzZXRzKTsKIAkJLyogUmVhZGVyOiBlbmQgKi8KIAkJaWYgKCFwLT5rZXkpCkBAIC00NTksNiArNTAwLDggQEAKIAlleHQ0X2ZzYmxrX3QgYmdfc3RhcnQ7CiAJZXh0NF9mc2Jsa190IGxhc3RfYmxvY2s7CiAJZXh0NF9ncnBibGtfdCBjb2xvdXI7CisJZXh0NF9ncm91cF90IGJsb2NrX2dyb3VwOworCWludCBmbGV4X3NpemUgPSBleHQ0X2ZsZXhfYmdfc2l6ZShFWFQ0X1NCKGlub2RlLT5pX3NiKSk7CiAKIAkvKiBUcnkgdG8gZmluZCBwcmV2aW91cyBibG9jayAqLwogCWZvciAocCA9IGluZC0+cCAtIDE7IHAgPj0gc3RhcnQ7IHAtLSkgewpAQCAtNDc0LDkgKzUxNywyMiBAQAogCSAqIEl0IGlzIGdvaW5nIHRvIGJlIHJlZmVycmVkIHRvIGZyb20gdGhlIGlub2RlIGl0c2VsZj8gT0ssIGp1c3QgcHV0IGl0CiAJICogaW50byB0aGUgc2FtZSBjeWxpbmRlciBncm91cCB0aGVuLgogCSAqLwotCWJnX3N0YXJ0ID0gZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhpbm9kZS0+aV9zYiwgZWktPmlfYmxvY2tfZ3JvdXApOworCWJsb2NrX2dyb3VwID0gZWktPmlfYmxvY2tfZ3JvdXA7CisJaWYgKGZsZXhfc2l6ZSA+PSBFWFQ0X0ZMRVhfU0laRV9ESVJfQUxMT0NfU0NIRU1FKSB7CisJCWJsb2NrX2dyb3VwICY9IH4oZmxleF9zaXplLTEpOworCQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJCWJsb2NrX2dyb3VwKys7CisJfQorCWJnX3N0YXJ0ID0gZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhpbm9kZS0+aV9zYiwgYmxvY2tfZ3JvdXApOwogCWxhc3RfYmxvY2sgPSBleHQ0X2Jsb2Nrc19jb3VudChFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19lcykgLSAxOwogCisJLyoKKwkgKiBJZiB3ZSBhcmUgZG9pbmcgZGVsYXllZCBhbGxvY2F0aW9uLCB3ZSBkb24ndCBuZWVkIHRha2UKKwkgKiBjb2xvdXIgaW50byBhY2NvdW50LgorCSAqLworCWlmICh0ZXN0X29wdChpbm9kZS0+aV9zYiwgREVMQUxMT0MpKQorCQlyZXR1cm4gYmdfc3RhcnQ7CisKIAlpZiAoYmdfc3RhcnQgKyBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoaW5vZGUtPmlfc2IpIDw9IGxhc3RfYmxvY2spCiAJCWNvbG91ciA9IChjdXJyZW50LT5waWQgJSAxNikgKgogCQkJKEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChpbm9kZS0+aV9zYikgLyAxNik7CkBAIC0xMDUyLDkgKzExMDgsMTYgQEAKIAkvKgogCSAqIGZyZWUgdGhvc2Ugb3Zlci1ib29raW5nIHF1b3RhIGZvciBtZXRhZGF0YSBibG9ja3MKIAkgKi8KLQogCWlmIChtZGJfZnJlZSkKIAkJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIG1kYl9mcmVlKTsKKworCS8qCisJICogSWYgd2UgaGF2ZSBkb25lIGFsbCB0aGUgcGVuZGluZyBibG9jayBhbGxvY2F0aW9ucyBhbmQgaWYKKwkgKiB0aGVyZSBhcmVuJ3QgYW55IHdyaXRlcnMgb24gdGhlIGlub2RlLCB3ZSBjYW4gZGlzY2FyZCB0aGUKKwkgKiBpbm9kZSdzIHByZWFsbG9jYXRpb25zLgorCSAqLworCWlmICghdG90YWwgJiYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV93cml0ZWNvdW50KSA9PSAwKSkKKwkJZXh0NF9kaXNjYXJkX3ByZWFsbG9jYXRpb25zKGlub2RlKTsKIH0KIAogLyoKQEAgLTE2ODgsOSArMTc1MSwxMCBAQAogCiBzdHJ1Y3QgbXBhZ2VfZGFfZGF0YSB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgbGJoOwkJCS8qIGV4dGVudCBvZiBibG9ja3MgKi8KKwlzZWN0b3JfdCBiX2Jsb2NrbnI7CQkvKiBzdGFydCBibG9jayBudW1iZXIgb2YgZXh0ZW50ICovCisJc2l6ZV90IGJfc2l6ZTsJCQkvKiBzaXplIG9mIGV4dGVudCAqLworCXVuc2lnbmVkIGxvbmcgYl9zdGF0ZTsJCS8qIHN0YXRlIG9mIHRoZSBleHRlbnQgKi8KIAl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2UsIG5leHRfcGFnZTsJLyogZXh0ZW50IG9mIHBhZ2VzICovCi0JZ2V0X2Jsb2NrX3QgKmdldF9ibG9jazsKIAlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYzsKIAlpbnQgaW9fZG9uZTsKIAlpbnQgcGFnZXNfd3JpdHRlbjsKQEAgLTE3MDQsNyArMTc2OCw2IEBACiAgKiBAbXBkLT5pbm9kZTogaW5vZGUKICAqIEBtcGQtPmZpcnN0X3BhZ2U6IGZpcnN0IHBhZ2Ugb2YgdGhlIGV4dGVudAogICogQG1wZC0+bmV4dF9wYWdlOiBwYWdlIGFmdGVyIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIGV4dGVudAotICogQG1wZC0+Z2V0X2Jsb2NrOiB0aGUgZmlsZXN5c3RlbSdzIGJsb2NrIG1hcHBlciBmdW5jdGlvbgogICoKICAqIEJ5IHRoZSB0aW1lIG1wYWdlX2RhX3N1Ym1pdF9pbygpIGlzIGNhbGxlZCB3ZSBleHBlY3QgYWxsIGJsb2NrcwogICogdG8gYmUgYWxsb2NhdGVkLiB0aGlzIG1heSBiZSB3cm9uZyBpZiBhbGxvY2F0aW9uIGZhaWxlZC4KQEAgLTE3MjQsNyArMTc4Nyw3IEBACiAJLyoKIAkgKiBXZSBuZWVkIHRvIHN0YXJ0IGZyb20gdGhlIGZpcnN0X3BhZ2UgdG8gdGhlIG5leHRfcGFnZSAtIDEKIAkgKiB0byBtYWtlIHN1cmUgd2UgYWxzbyB3cml0ZSB0aGUgbWFwcGVkIGRpcnR5IGJ1ZmZlcl9oZWFkcy4KLQkgKiBJZiB3ZSBsb29rIGF0IG1wZC0+bGJoLmJfYmxvY2tuciB3ZSB3b3VsZCBvbmx5IGJlIGxvb2tpbmcKKwkgKiBJZiB3ZSBsb29rIGF0IG1wZC0+Yl9ibG9ja25yIHdlIHdvdWxkIG9ubHkgYmUgbG9va2luZwogCSAqIGF0IHRoZSBjdXJyZW50bHkgbWFwcGVkIGJ1ZmZlcl9oZWFkcy4KIAkgKi8KIAlpbmRleCA9IG1wZC0+Zmlyc3RfcGFnZTsKQEAgLTE5MTQsNjggKzE5NzcsMTExIEBACiAJcmV0dXJuOwogfQogCisjZGVmaW5lCQlFWFQ0X0RFTEFMTE9DX1JTVkVECTEKK3N0YXRpYyBpbnQgZXh0NF9kYV9nZXRfYmxvY2tfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbWF4X2Jsb2NrcyA9IGJoX3Jlc3VsdC0+Yl9zaXplID4+IGlub2RlLT5pX2Jsa2JpdHM7CisJbG9mZl90IGRpc2tzaXplID0gRVhUNF9JKGlub2RlKS0+aV9kaXNrc2l6ZTsKKwloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKKworCWhhbmRsZSA9IGV4dDRfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOworCUJVR19PTighaGFuZGxlKTsKKwlyZXQgPSBleHQ0X2dldF9ibG9ja3Nfd3JhcChoYW5kbGUsIGlub2RlLCBpYmxvY2ssIG1heF9ibG9ja3MsCisJCQkJICAgYmhfcmVzdWx0LCBjcmVhdGUsIDAsIEVYVDRfREVMQUxMT0NfUlNWRUQpOworCWlmIChyZXQgPD0gMCkKKwkJcmV0dXJuIHJldDsKKworCWJoX3Jlc3VsdC0+Yl9zaXplID0gKHJldCA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKKworCWlmIChleHQ0X3Nob3VsZF9vcmRlcl9kYXRhKGlub2RlKSkgeworCQlpbnQgcmV0dmFsOworCQlyZXR2YWwgPSBleHQ0X2piZDJfZmlsZV9pbm9kZShoYW5kbGUsIGlub2RlKTsKKwkJaWYgKHJldHZhbCkKKwkJCS8qCisJCQkgKiBGYWlsZWQgdG8gYWRkIGlub2RlIGZvciBvcmRlcmVkIG1vZGUuIERvbid0CisJCQkgKiB1cGRhdGUgZmlsZSBzaXplCisJCQkgKi8KKwkJCXJldHVybiByZXR2YWw7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgb24tZGlzayBzaXplIGFsb25nIHdpdGggYmxvY2sgYWxsb2NhdGlvbiB3ZSBkb24ndAorCSAqIHVzZSAnZXh0ZW5kX2Rpc2tzaXplJyBhcyBzaXplIG1heSBjaGFuZ2Ugd2l0aGluIGFscmVhZHkKKwkgKiBhbGxvY2F0ZWQgYmxvY2sgLWJ6enoKKwkgKi8KKwlkaXNrc2l6ZSA9ICgobG9mZl90KSBpYmxvY2sgKyByZXQpIDw8IGlub2RlLT5pX2Jsa2JpdHM7CisJaWYgKGRpc2tzaXplID4gaV9zaXplX3JlYWQoaW5vZGUpKQorCQlkaXNrc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwlpZiAoZGlza3NpemUgPiBFWFQ0X0koaW5vZGUpLT5pX2Rpc2tzaXplKSB7CisJCWV4dDRfdXBkYXRlX2lfZGlza3NpemUoaW5vZGUsIGRpc2tzaXplKTsKKwkJcmV0ID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIG1wYWdlX2RhX21hcF9ibG9ja3MgLSBnbyB0aHJvdWdoIGdpdmVuIHNwYWNlCiAgKgotICogQG1wZC0+bGJoIC0gYmggZGVzY3JpYmluZyBzcGFjZQotICogQG1wZC0+Z2V0X2Jsb2NrIC0gdGhlIGZpbGVzeXN0ZW0ncyBibG9jayBtYXBwZXIgZnVuY3Rpb24KKyAqIEBtcGQgLSBiaCBkZXNjcmliaW5nIHNwYWNlCiAgKgogICogVGhlIGZ1bmN0aW9uIHNraXBzIHNwYWNlIHdlIGtub3cgaXMgYWxyZWFkeSBtYXBwZWQgdG8gZGlzayBibG9ja3MuCiAgKgogICovCi1zdGF0aWMgaW50ICBtcGFnZV9kYV9tYXBfYmxvY2tzKHN0cnVjdCBtcGFnZV9kYV9kYXRhICptcGQpCitzdGF0aWMgaW50IG1wYWdlX2RhX21hcF9ibG9ja3Moc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZCkKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgbmV3OwotCXN0cnVjdCBidWZmZXJfaGVhZCAqbGJoID0gJm1wZC0+bGJoOwogCXNlY3Rvcl90IG5leHQ7CiAKIAkvKgogCSAqIFdlIGNvbnNpZGVyIG9ubHkgbm9uLW1hcHBlZCBhbmQgbm9uLWFsbG9jYXRlZCBibG9ja3MKIAkgKi8KLQlpZiAoYnVmZmVyX21hcHBlZChsYmgpICYmICFidWZmZXJfZGVsYXkobGJoKSkKKwlpZiAoKG1wZC0+Yl9zdGF0ZSAgJiAoMSA8PCBCSF9NYXBwZWQpKSAmJgorCSAgICAhKG1wZC0+Yl9zdGF0ZSAmICgxIDw8IEJIX0RlbGF5KSkpCiAJCXJldHVybiAwOwotCW5ldy5iX3N0YXRlID0gbGJoLT5iX3N0YXRlOworCW5ldy5iX3N0YXRlID0gbXBkLT5iX3N0YXRlOwogCW5ldy5iX2Jsb2NrbnIgPSAwOwotCW5ldy5iX3NpemUgPSBsYmgtPmJfc2l6ZTsKLQluZXh0ID0gbGJoLT5iX2Jsb2NrbnI7CisJbmV3LmJfc2l6ZSA9IG1wZC0+Yl9zaXplOworCW5leHQgPSBtcGQtPmJfYmxvY2tucjsKIAkvKgogCSAqIElmIHdlIGRpZG4ndCBhY2N1bXVsYXRlIGFueXRoaW5nCiAJICogdG8gd3JpdGUgc2ltcGx5IHJldHVybgogCSAqLwogCWlmICghbmV3LmJfc2l6ZSkKIAkJcmV0dXJuIDA7Ci0JZXJyID0gbXBkLT5nZXRfYmxvY2sobXBkLT5pbm9kZSwgbmV4dCwgJm5ldywgMSk7Ci0JaWYgKGVycikgewogCi0JCS8qIElmIGdldCBibG9jayByZXR1cm5zIHdpdGggZXJyb3IKLQkJICogd2Ugc2ltcGx5IHJldHVybi4gTGF0ZXIgd3JpdGVwYWdlCi0JCSAqIHdpbGwgcmVkaXJ0eSB0aGUgcGFnZSBhbmQgd3JpdGVwYWdlcwotCQkgKiB3aWxsIGZpbmQgdGhlIGRpcnR5IHBhZ2UgYWdhaW4KKwllcnIgPSBleHQ0X2RhX2dldF9ibG9ja193cml0ZShtcGQtPmlub2RlLCBuZXh0LCAmbmV3LCAxKTsKKwlpZiAoZXJyKSB7CisJCS8qCisJCSAqIElmIGdldCBibG9jayByZXR1cm5zIHdpdGggZXJyb3Igd2Ugc2ltcGx5CisJCSAqIHJldHVybi4gTGF0ZXIgd3JpdGVwYWdlIHdpbGwgcmVkaXJ0eSB0aGUgcGFnZSBhbmQKKwkJICogd3JpdGVwYWdlcyB3aWxsIGZpbmQgdGhlIGRpcnR5IHBhZ2UgYWdhaW4KIAkJICovCiAJCWlmIChlcnIgPT0gLUVBR0FJTikKIAkJCXJldHVybiAwOwogCiAJCWlmIChlcnIgPT0gLUVOT1NQQyAmJgotCQkJCWV4dDRfY291bnRfZnJlZV9ibG9ja3MobXBkLT5pbm9kZS0+aV9zYikpIHsKKwkJICAgIGV4dDRfY291bnRfZnJlZV9ibG9ja3MobXBkLT5pbm9kZS0+aV9zYikpIHsKIAkJCW1wZC0+cmV0dmFsID0gZXJyOwogCQkJcmV0dXJuIDA7CiAJCX0KIAogCQkvKgotCQkgKiBnZXQgYmxvY2sgZmFpbHVyZSB3aWxsIGNhdXNlIHVzCi0JCSAqIHRvIGxvb3AgaW4gd3JpdGVwYWdlcy4gQmVjYXVzZQotCQkgKiBhX29wcy0+d3JpdGVwYWdlIHdvbid0IGJlIGFibGUgdG8KLQkJICogbWFrZSBwcm9ncmVzcy4gVGhlIHBhZ2Ugd2lsbCBiZSByZWRpcnRpZWQKLQkJICogYnkgd3JpdGVwYWdlIGFuZCB3cml0ZXBhZ2VzIHdpbGwgYWdhaW4KLQkJICogdHJ5IHRvIHdyaXRlIHRoZSBzYW1lLgorCQkgKiBnZXQgYmxvY2sgZmFpbHVyZSB3aWxsIGNhdXNlIHVzIHRvIGxvb3AgaW4KKwkJICogd3JpdGVwYWdlcywgYmVjYXVzZSBhX29wcy0+d3JpdGVwYWdlIHdvbid0IGJlIGFibGUKKwkJICogdG8gbWFrZSBwcm9ncmVzcy4gVGhlIHBhZ2Ugd2lsbCBiZSByZWRpcnRpZWQgYnkKKwkJICogd3JpdGVwYWdlIGFuZCB3cml0ZXBhZ2VzIHdpbGwgYWdhaW4gdHJ5IHRvIHdyaXRlCisJCSAqIHRoZSBzYW1lLgogCQkgKi8KIAkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzIGJsb2NrIGFsbG9jYXRpb24gZmFpbGVkIGZvciBpbm9kZSAlbHUgIgogCQkJCSAgImF0IGxvZ2ljYWwgb2Zmc2V0ICVsbHUgd2l0aCBtYXggYmxvY2tzICIKIAkJCQkgICIlemQgd2l0aCBlcnJvciAlZFxuIiwKIAkJCQkgIF9fZnVuY19fLCBtcGQtPmlub2RlLT5pX2lubywKIAkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV4dCwKLQkJCQkgIGxiaC0+Yl9zaXplID4+IG1wZC0+aW5vZGUtPmlfYmxrYml0cywgZXJyKTsKKwkJCQkgIG1wZC0+Yl9zaXplID4+IG1wZC0+aW5vZGUtPmlfYmxrYml0cywgZXJyKTsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uISEgIgogCQkJCQkiRGF0YSB3aWxsIGJlIGxvc3RcbiIpOwogCQlpZiAoZXJyID09IC1FTk9TUEMpIHsKQEAgLTE5ODMsNyArMjA4OSw3IEBACiAJCX0KIAkJLyogaW52bGFpZGF0ZSBhbGwgdGhlIHBhZ2VzICovCiAJCWV4dDRfZGFfYmxvY2tfaW52YWxpZGF0ZXBhZ2VzKG1wZCwgbmV4dCwKLQkJCQlsYmgtPmJfc2l6ZSA+PiBtcGQtPmlub2RlLT5pX2Jsa2JpdHMpOworCQkJCW1wZC0+Yl9zaXplID4+IG1wZC0+aW5vZGUtPmlfYmxrYml0cyk7CiAJCXJldHVybiBlcnI7CiAJfQogCUJVR19PTihuZXcuYl9zaXplID09IDApOwpAQCAtMTk5NSw3ICsyMTAxLDggQEAKIAkgKiBJZiBibG9ja3MgYXJlIGRlbGF5ZWQgbWFya2VkLCB3ZSBuZWVkIHRvCiAJICogcHV0IGFjdHVhbCBibG9ja25yIGFuZCBkcm9wIGRlbGF5ZWQgYml0CiAJICovCi0JaWYgKGJ1ZmZlcl9kZWxheShsYmgpIHx8IGJ1ZmZlcl91bndyaXR0ZW4obGJoKSkKKwlpZiAoKG1wZC0+Yl9zdGF0ZSAmICgxIDw8IEJIX0RlbGF5KSkgfHwKKwkgICAgKG1wZC0+Yl9zdGF0ZSAmICgxIDw8IEJIX1Vud3JpdHRlbikpKQogCQltcGFnZV9wdXRfYm5yX3RvX2JocyhtcGQsIG5leHQsICZuZXcpOwogCiAJcmV0dXJuIDA7CkBAIC0yMDE0LDEyICsyMTIxLDExIEBACiAgKiB0aGUgZnVuY3Rpb24gaXMgdXNlZCB0byBjb2xsZWN0IGNvbnRpZy4gYmxvY2tzIGluIHNhbWUgc3RhdGUKICAqLwogc3RhdGljIHZvaWQgbXBhZ2VfYWRkX2JoX3RvX2V4dGVudChzdHJ1Y3QgbXBhZ2VfZGFfZGF0YSAqbXBkLAotCQkJCSAgIHNlY3Rvcl90IGxvZ2ljYWwsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCisJCQkJICAgc2VjdG9yX3QgbG9naWNhbCwgc2l6ZV90IGJfc2l6ZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGJfc3RhdGUpCiB7CiAJc2VjdG9yX3QgbmV4dDsKLQlzaXplX3QgYl9zaXplID0gYmgtPmJfc2l6ZTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxiaCA9ICZtcGQtPmxiaDsKLQlpbnQgbnJibG9ja3MgPSBsYmgtPmJfc2l6ZSA+PiBtcGQtPmlub2RlLT5pX2Jsa2JpdHM7CisJaW50IG5yYmxvY2tzID0gbXBkLT5iX3NpemUgPj4gbXBkLT5pbm9kZS0+aV9ibGtiaXRzOwogCiAJLyogY2hlY2sgaWYgdGhlcmVzZXJ2ZWQgam91cm5hbCBjcmVkaXRzIG1pZ2h0IG92ZXJmbG93ICovCiAJaWYgKCEoRVhUNF9JKG1wZC0+aW5vZGUpLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSkgewpAQCAtMjA0NiwxOSArMjE1MiwxOSBAQAogCS8qCiAJICogRmlyc3QgYmxvY2sgaW4gdGhlIGV4dGVudAogCSAqLwotCWlmIChsYmgtPmJfc2l6ZSA9PSAwKSB7Ci0JCWxiaC0+Yl9ibG9ja25yID0gbG9naWNhbDsKLQkJbGJoLT5iX3NpemUgPSBiX3NpemU7Ci0JCWxiaC0+Yl9zdGF0ZSA9IGJoLT5iX3N0YXRlICYgQkhfRkxBR1M7CisJaWYgKG1wZC0+Yl9zaXplID09IDApIHsKKwkJbXBkLT5iX2Jsb2NrbnIgPSBsb2dpY2FsOworCQltcGQtPmJfc2l6ZSA9IGJfc2l6ZTsKKwkJbXBkLT5iX3N0YXRlID0gYl9zdGF0ZSAmIEJIX0ZMQUdTOwogCQlyZXR1cm47CiAJfQogCi0JbmV4dCA9IGxiaC0+Yl9ibG9ja25yICsgbnJibG9ja3M7CisJbmV4dCA9IG1wZC0+Yl9ibG9ja25yICsgbnJibG9ja3M7CiAJLyoKIAkgKiBDYW4gd2UgbWVyZ2UgdGhlIGJsb2NrIHRvIG91ciBiaWcgZXh0ZW50PwogCSAqLwotCWlmIChsb2dpY2FsID09IG5leHQgJiYgKGJoLT5iX3N0YXRlICYgQkhfRkxBR1MpID09IGxiaC0+Yl9zdGF0ZSkgewotCQlsYmgtPmJfc2l6ZSArPSBiX3NpemU7CisJaWYgKGxvZ2ljYWwgPT0gbmV4dCAmJiAoYl9zdGF0ZSAmIEJIX0ZMQUdTKSA9PSBtcGQtPmJfc3RhdGUpIHsKKwkJbXBkLT5iX3NpemUgKz0gYl9zaXplOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMDg3LDcgKzIxOTMsNyBAQAogewogCXN0cnVjdCBtcGFnZV9kYV9kYXRhICptcGQgPSBkYXRhOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtcGQtPmlub2RlOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpoZWFkLCBmYWtlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgsICpoZWFkOwogCXNlY3Rvcl90IGxvZ2ljYWw7CiAKIAlpZiAobXBkLT5pb19kb25lKSB7CkBAIC0yMTI5LDkgKzIyMzUsOSBAQAogCQkvKgogCQkgKiAuLi4gYW5kIGJsb2NrcwogCQkgKi8KLQkJbXBkLT5sYmguYl9zaXplID0gMDsKLQkJbXBkLT5sYmguYl9zdGF0ZSA9IDA7Ci0JCW1wZC0+bGJoLmJfYmxvY2tuciA9IDA7CisJCW1wZC0+Yl9zaXplID0gMDsKKwkJbXBkLT5iX3N0YXRlID0gMDsKKwkJbXBkLT5iX2Jsb2NrbnIgPSAwOwogCX0KIAogCW1wZC0+bmV4dF9wYWdlID0gcGFnZS0+aW5kZXggKyAxOwpAQCAtMjEzOSwxNiArMjI0NSw4IEBACiAJCSAgKFBBR0VfQ0FDSEVfU0hJRlQgLSBpbm9kZS0+aV9ibGtiaXRzKTsKIAogCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkgewotCQkvKgotCQkgKiBUaGVyZSBpcyBubyBhdHRhY2hlZCBidWZmZXIgaGVhZHMgeWV0IChtbWFwPykKLQkJICogd2UgdHJlYXQgdGhlIHBhZ2UgYXNmdWxsIG9mIGRpcnR5IGJsb2NrcwotCQkgKi8KLQkJYmggPSAmZmFrZTsKLQkJYmgtPmJfc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKLQkJYmgtPmJfc3RhdGUgPSAwOwotCQlzZXRfYnVmZmVyX2RpcnR5KGJoKTsKLQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7Ci0JCW1wYWdlX2FkZF9iaF90b19leHRlbnQobXBkLCBsb2dpY2FsLCBiaCk7CisJCW1wYWdlX2FkZF9iaF90b19leHRlbnQobXBkLCBsb2dpY2FsLCBQQUdFX0NBQ0hFX1NJWkUsCisJCQkJICAgICAgICgxIDw8IEJIX0RpcnR5KSB8ICgxIDw8IEJIX1VwdG9kYXRlKSk7CiAJCWlmIChtcGQtPmlvX2RvbmUpCiAJCQlyZXR1cm4gTVBBR0VfREFfRVhURU5UX1RBSUw7CiAJfSBlbHNlIHsKQEAgLTIxNjYsOCArMjI2NCwxMCBAQAogCQkJICogd2l0aCB0aGUgcGFnZSBpbiBleHQ0X2RhX3dyaXRlcGFnZQogCQkJICovCiAJCQlpZiAoYnVmZmVyX2RpcnR5KGJoKSAmJgotCQkJCSghYnVmZmVyX21hcHBlZChiaCkgfHwgYnVmZmVyX2RlbGF5KGJoKSkpIHsKLQkJCQltcGFnZV9hZGRfYmhfdG9fZXh0ZW50KG1wZCwgbG9naWNhbCwgYmgpOworCQkJICAgICghYnVmZmVyX21hcHBlZChiaCkgfHwgYnVmZmVyX2RlbGF5KGJoKSkpIHsKKwkJCQltcGFnZV9hZGRfYmhfdG9fZXh0ZW50KG1wZCwgbG9naWNhbCwKKwkJCQkJCSAgICAgICBiaC0+Yl9zaXplLAorCQkJCQkJICAgICAgIGJoLT5iX3N0YXRlKTsKIAkJCQlpZiAobXBkLT5pb19kb25lKQogCQkJCQlyZXR1cm4gTVBBR0VfREFfRVhURU5UX1RBSUw7CiAJCQl9IGVsc2UgaWYgKGJ1ZmZlcl9kaXJ0eShiaCkgJiYgKGJ1ZmZlcl9tYXBwZWQoYmgpKSkgewpAQCAtMjE3OSw5ICsyMjc5LDggQEAKIAkJCQkgKiB1bm1hcHBlZCBidWZmZXJfaGVhZCBsYXRlciB3ZSBuZWVkIHRvCiAJCQkJICogdXNlIHRoZSBiX3N0YXRlIGZsYWcgb2YgdGhhdCBidWZmZXJfaGVhZC4KIAkJCQkgKi8KLQkJCQlpZiAobXBkLT5sYmguYl9zaXplID09IDApCi0JCQkJCW1wZC0+bGJoLmJfc3RhdGUgPQotCQkJCQkJYmgtPmJfc3RhdGUgJiBCSF9GTEFHUzsKKwkJCQlpZiAobXBkLT5iX3NpemUgPT0gMCkKKwkJCQkJbXBkLT5iX3N0YXRlID0gYmgtPmJfc3RhdGUgJiBCSF9GTEFHUzsKIAkJCX0KIAkJCWxvZ2ljYWwrKzsKIAkJfSB3aGlsZSAoKGJoID0gYmgtPmJfdGhpc19wYWdlKSAhPSBoZWFkKTsKQEAgLTIxOTEsNTEgKzIyOTAsNiBAQAogfQogCiAvKgotICogbXBhZ2VfZGFfd3JpdGVwYWdlcyAtIHdhbGsgdGhlIGxpc3Qgb2YgZGlydHkgcGFnZXMgb2YgdGhlIGdpdmVuCi0gKiBhZGRyZXNzIHNwYWNlLCBhbGxvY2F0ZXMgbm9uLWFsbG9jYXRlZCBibG9ja3MsIG1hcHMgbmV3bHktYWxsb2NhdGVkCi0gKiBibG9ja3MgdG8gZXhpc3RpbmcgYmhzIGFuZCBpc3N1ZSBJTyB0aGVtCi0gKgotICogQG1hcHBpbmc6IGFkZHJlc3Mgc3BhY2Ugc3RydWN0dXJlIHRvIHdyaXRlCi0gKiBAd2JjOiBzdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gcGFnZXMgZnJvbSAqQHdiYy0+bnJfdG9fd3JpdGUKLSAqIEBnZXRfYmxvY2s6IHRoZSBmaWxlc3lzdGVtJ3MgYmxvY2sgbWFwcGVyIGZ1bmN0aW9uLgotICoKLSAqIFRoaXMgaXMgYSBsaWJyYXJ5IGZ1bmN0aW9uLCB3aGljaCBpbXBsZW1lbnRzIHRoZSB3cml0ZXBhZ2VzKCkKLSAqIGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uLgotICovCi1zdGF0aWMgaW50IG1wYWdlX2RhX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCi0JCQkgICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCi0JCQkgICAgICAgc3RydWN0IG1wYWdlX2RhX2RhdGEgKm1wZCkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKCFtcGQtPmdldF9ibG9jaykKLQkJcmV0dXJuIGdlbmVyaWNfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMpOwotCi0JbXBkLT5sYmguYl9zaXplID0gMDsKLQltcGQtPmxiaC5iX3N0YXRlID0gMDsKLQltcGQtPmxiaC5iX2Jsb2NrbnIgPSAwOwotCW1wZC0+Zmlyc3RfcGFnZSA9IDA7Ci0JbXBkLT5uZXh0X3BhZ2UgPSAwOwotCW1wZC0+aW9fZG9uZSA9IDA7Ci0JbXBkLT5wYWdlc193cml0dGVuID0gMDsKLQltcGQtPnJldHZhbCA9IDA7Ci0KLQlyZXQgPSB3cml0ZV9jYWNoZV9wYWdlcyhtYXBwaW5nLCB3YmMsIF9fbXBhZ2VfZGFfd3JpdGVwYWdlLCBtcGQpOwotCS8qCi0JICogSGFuZGxlIGxhc3QgZXh0ZW50IG9mIHBhZ2VzCi0JICovCi0JaWYgKCFtcGQtPmlvX2RvbmUgJiYgbXBkLT5uZXh0X3BhZ2UgIT0gbXBkLT5maXJzdF9wYWdlKSB7Ci0JCWlmIChtcGFnZV9kYV9tYXBfYmxvY2tzKG1wZCkgPT0gMCkKLQkJCW1wYWdlX2RhX3N1Ym1pdF9pbyhtcGQpOwotCi0JCW1wZC0+aW9fZG9uZSA9IDE7Ci0JCXJldCA9IE1QQUdFX0RBX0VYVEVOVF9UQUlMOwotCX0KLQl3YmMtPm5yX3RvX3dyaXRlIC09IG1wZC0+cGFnZXNfd3JpdHRlbjsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgogICogdGhpcyBpcyBhIHNwZWNpYWwgY2FsbGJhY2sgZm9yIC0+d3JpdGVfYmVnaW4oKSBvbmx5CiAgKiBpdCdzIGludGVudGlvbiBpcyB0byByZXR1cm4gbWFwcGVkIGJsb2NrIG9yIHJlc2VydmUgc3BhY2UKICAqLwpAQCAtMjI3NCw1MSArMjMyOCw2IEBACiAKIAlyZXR1cm4gcmV0OwogfQotI2RlZmluZQkJRVhUNF9ERUxBTExPQ19SU1ZFRAkxCi1zdGF0aWMgaW50IGV4dDRfZGFfZ2V0X2Jsb2NrX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKLQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIG1heF9ibG9ja3MgPSBiaF9yZXN1bHQtPmJfc2l6ZSA+PiBpbm9kZS0+aV9ibGtiaXRzOwotCWxvZmZfdCBkaXNrc2l6ZSA9IEVYVDRfSShpbm9kZSktPmlfZGlza3NpemU7Ci0JaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7Ci0KLQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfY3VycmVudF9oYW5kbGUoKTsKLQlCVUdfT04oIWhhbmRsZSk7Ci0JcmV0ID0gZXh0NF9nZXRfYmxvY2tzX3dyYXAoaGFuZGxlLCBpbm9kZSwgaWJsb2NrLCBtYXhfYmxvY2tzLAotCQkJYmhfcmVzdWx0LCBjcmVhdGUsIDAsIEVYVDRfREVMQUxMT0NfUlNWRUQpOwotCWlmIChyZXQgPiAwKSB7Ci0KLQkJYmhfcmVzdWx0LT5iX3NpemUgPSAocmV0IDw8IGlub2RlLT5pX2Jsa2JpdHMpOwotCi0JCWlmIChleHQ0X3Nob3VsZF9vcmRlcl9kYXRhKGlub2RlKSkgewotCQkJaW50IHJldHZhbDsKLQkJCXJldHZhbCA9IGV4dDRfamJkMl9maWxlX2lub2RlKGhhbmRsZSwgaW5vZGUpOwotCQkJaWYgKHJldHZhbCkKLQkJCQkvKgotCQkJCSAqIEZhaWxlZCB0byBhZGQgaW5vZGUgZm9yIG9yZGVyZWQKLQkJCQkgKiBtb2RlLiBEb24ndCB1cGRhdGUgZmlsZSBzaXplCi0JCQkJICovCi0JCQkJcmV0dXJuIHJldHZhbDsKLQkJfQotCi0JCS8qCi0JCSAqIFVwZGF0ZSBvbi1kaXNrIHNpemUgYWxvbmcgd2l0aCBibG9jayBhbGxvY2F0aW9uCi0JCSAqIHdlIGRvbid0IHVzZSAnZXh0ZW5kX2Rpc2tzaXplJyBhcyBzaXplIG1heSBjaGFuZ2UKLQkJICogd2l0aGluIGFscmVhZHkgYWxsb2NhdGVkIGJsb2NrIC1ienp6Ci0JCSAqLwotCQlkaXNrc2l6ZSA9ICgobG9mZl90KSBpYmxvY2sgKyByZXQpIDw8IGlub2RlLT5pX2Jsa2JpdHM7Ci0JCWlmIChkaXNrc2l6ZSA+IGlfc2l6ZV9yZWFkKGlub2RlKSkKLQkJCWRpc2tzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCQlpZiAoZGlza3NpemUgPiBFWFQ0X0koaW5vZGUpLT5pX2Rpc2tzaXplKSB7Ci0JCQlleHQ0X3VwZGF0ZV9pX2Rpc2tzaXplKGlub2RlLCBkaXNrc2l6ZSk7Ci0JCQlyZXQgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXJldCA9IDA7Ci0JfQotCXJldHVybiByZXQ7Ci19CiAKIHN0YXRpYyBpbnQgZXh0NF9iaF91bm1hcHBlZF9vcl9kZWxheShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewpAQCAtMjU2OSw4ICsyNTc4LDM4IEBACiAJCQlkdW1wX3N0YWNrKCk7CiAJCQlnb3RvIG91dF93cml0ZXBhZ2VzOwogCQl9Ci0JCW1wZC5nZXRfYmxvY2sgPSBleHQ0X2RhX2dldF9ibG9ja193cml0ZTsKLQkJcmV0ID0gbXBhZ2VfZGFfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsICZtcGQpOworCisJCS8qCisJCSAqIE5vdyBjYWxsIF9fbXBhZ2VfZGFfd3JpdGVwYWdlIHRvIGZpbmQgdGhlIG5leHQKKwkJICogY29udGlndW91cyByZWdpb24gb2YgbG9naWNhbCBibG9ja3MgdGhhdCBuZWVkCisJCSAqIGJsb2NrcyB0byBiZSBhbGxvY2F0ZWQgYnkgZXh0NC4gIFdlIGRvbid0IGFjdHVhbGx5CisJCSAqIHN1Ym1pdCB0aGUgYmxvY2tzIGZvciBJL08gaGVyZSwgZXZlbiB0aG91Z2gKKwkJICogd3JpdGVfY2FjaGVfcGFnZXMgdGhpbmtzIGl0IHdpbGwsIGFuZCB3aWxsIHNldCB0aGUKKwkJICogcGFnZXMgYXMgY2xlYW4gZm9yIHdyaXRlIGJlZm9yZSBjYWxsaW5nCisJCSAqIF9fbXBhZ2VfZGFfd3JpdGVwYWdlKCkuCisJCSAqLworCQltcGQuYl9zaXplID0gMDsKKwkJbXBkLmJfc3RhdGUgPSAwOworCQltcGQuYl9ibG9ja25yID0gMDsKKwkJbXBkLmZpcnN0X3BhZ2UgPSAwOworCQltcGQubmV4dF9wYWdlID0gMDsKKwkJbXBkLmlvX2RvbmUgPSAwOworCQltcGQucGFnZXNfd3JpdHRlbiA9IDA7CisJCW1wZC5yZXR2YWwgPSAwOworCQlyZXQgPSB3cml0ZV9jYWNoZV9wYWdlcyhtYXBwaW5nLCB3YmMsIF9fbXBhZ2VfZGFfd3JpdGVwYWdlLAorCQkJCQkmbXBkKTsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBhIGNvbnRpZ291cyBleHRlbnQgb2YgcGFnZXMgYW5kIHdlCisJCSAqIGhhdmVuJ3QgZG9uZSB0aGUgSS9PIHlldCwgbWFwIHRoZSBibG9ja3MgYW5kIHN1Ym1pdAorCQkgKiB0aGVtIGZvciBJL08uCisJCSAqLworCQlpZiAoIW1wZC5pb19kb25lICYmIG1wZC5uZXh0X3BhZ2UgIT0gbXBkLmZpcnN0X3BhZ2UpIHsKKwkJCWlmIChtcGFnZV9kYV9tYXBfYmxvY2tzKCZtcGQpID09IDApCisJCQkJbXBhZ2VfZGFfc3VibWl0X2lvKCZtcGQpOworCQkJbXBkLmlvX2RvbmUgPSAxOworCQkJcmV0ID0gTVBBR0VfREFfRVhURU5UX1RBSUw7CisJCX0KKwkJd2JjLT5ucl90b193cml0ZSAtPSBtcGQucGFnZXNfd3JpdHRlbjsKIAogCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCkBAIC0yODQ2LDYgKzI4ODUsNDggQEAKIAlyZXR1cm47CiB9CiAKKy8qCisgKiBGb3JjZSBhbGwgZGVsYXllZCBhbGxvY2F0aW9uIGJsb2NrcyB0byBiZSBhbGxvY2F0ZWQgZm9yIGEgZ2l2ZW4gaW5vZGUuCisgKi8KK2ludCBleHQ0X2FsbG9jX2RhX2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWlmICghRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyAmJgorCSAgICAhRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrcykKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdlIGRvIHNvbWV0aGluZyBzaW1wbGUgZm9yIG5vdy4gIFRoZSBmaWxlbWFwX2ZsdXNoKCkgd2lsbAorCSAqIGFsc28gc3RhcnQgdHJpZ2dlcmluZyBhIHdyaXRlIG9mIHRoZSBkYXRhIGJsb2Nrcywgd2hpY2ggaXMKKwkgKiBub3Qgc3RyaWN0bHkgc3BlYWtpbmcgbmVjZXNzYXJ5IChhbmQgZm9yIHVzZXJzIG9mCisJICogbGFwdG9wX21vZGUsIG5vdCBldmVuIGRlc2lyYWJsZSkuICBIb3dldmVyLCB0byBkbyBvdGhlcndpc2UKKwkgKiB3b3VsZCByZXF1aXJlIHJlcGxpY2F0aW5nIGNvZGUgcGF0aHMgaW46CisJICogCisJICogZXh0NF9kYV93cml0ZXBhZ2VzKCkgLT4KKwkgKiAgICB3cml0ZV9jYWNoZV9wYWdlcygpIC0tLT4gKHZpYSBwYXNzZWQgaW4gY2FsbGJhY2sgZnVuY3Rpb24pCisJICogICAgICAgIF9fbXBhZ2VfZGFfd3JpdGVwYWdlKCkgLS0+CisJICogICAgICAgICAgIG1wYWdlX2FkZF9iaF90b19leHRlbnQoKQorCSAqICAgICAgICAgICBtcGFnZV9kYV9tYXBfYmxvY2tzKCkKKwkgKgorCSAqIFRoZSBwcm9ibGVtIGlzIHRoYXQgd3JpdGVfY2FjaGVfcGFnZXMoKSwgbG9jYXRlZCBpbgorCSAqIG1tL3BhZ2Utd3JpdGViYWNrLmMsIG1hcmtzIHBhZ2VzIGNsZWFuIGluIHByZXBhcmF0aW9uIGZvcgorCSAqIGRvaW5nIEkvTywgd2hpY2ggaXMgbm90IGRlc2lyYWJsZSBpZiB3ZSdyZSBub3QgcGxhbm5pbmcgb24KKwkgKiBkb2luZyBJL08gYXQgYWxsLgorCSAqCisJICogV2UgY291bGQgY2FsbCB3cml0ZV9jYWNoZV9wYWdlcygpLCBhbmQgdGhlbiByZWRpcnR5IGFsbCBvZgorCSAqIHRoZSBwYWdlcyBieSBjYWxsaW5nIHJlZGlydHlfcGFnZV9mb3Jfd3JpdGViYWNrKCkgYnV0IHRoYXQKKwkgKiB3b3VsZCBiZSB1Z2x5IGluIHRoZSBleHRyZW1lLiAgU28gaW5zdGVhZCB3ZSB3b3VsZCBuZWVkIHRvCisJICogcmVwbGljYXRlIHBhcnRzIG9mIHRoZSBjb2RlIGluIHRoZSBhYm92ZSBmdW5jdGlvbnMsCisJICogc2ltcGxpZnlpbmcgdGhlbSBiZWN1YXNlIHdlIHdvdWxkbid0IGFjdHVhbGx5IGludGVuZCB0bworCSAqIHdyaXRlIG91dCB0aGUgcGFnZXMsIGJ1dCByYXRoZXIgb25seSBjb2xsZWN0IGNvbnRpZ3VvdXMKKwkgKiBsb2dpY2FsIGJsb2NrIGV4dGVudHMsIGNhbGwgdGhlIG11bHRpLWJsb2NrIGFsbG9jYXRvciwgYW5kCisJICogdGhlbiB1cGRhdGUgdGhlIGJ1ZmZlciBoZWFkcyB3aXRoIHRoZSBibG9jayBhbGxvY2F0aW9ucy4KKwkgKiAKKwkgKiBGb3Igbm93LCB0aG91Z2gsIHdlJ2xsIGNoZWF0IGJ5IGNhbGxpbmcgZmlsZW1hcF9mbHVzaCgpLAorCSAqIHdoaWNoIHdpbGwgbWFwIHRoZSBibG9ja3MsIGFuZCBzdGFydCB0aGUgSS9PLCBidXQgbm90CisJICogYWN0dWFsbHkgd2FpdCBmb3IgdGhlIEkvTyB0byBjb21wbGV0ZS4KKwkgKi8KKwlyZXR1cm4gZmlsZW1hcF9mbHVzaChpbm9kZS0+aV9tYXBwaW5nKTsKK30KIAogLyoKICAqIGJtYXAoKSBpcyBzcGVjaWFsLiAgSXQgZ2V0cyB1c2VkIGJ5IGFwcGxpY2F0aW9ucyBzdWNoIGFzIGxpbG8gYW5kIGJ5CkBAIC0zODY4LDYgKzM5NDksOSBAQAogCWlmICghZXh0NF9jYW5fdHJ1bmNhdGUoaW5vZGUpKQogCQlyZXR1cm47CiAKKwlpZiAoaW5vZGUtPmlfc2l6ZSA9PSAwICYmICF0ZXN0X29wdChpbm9kZS0+aV9zYiwgTk9fQVVUT19EQV9BTExPQykpCisJCWVpLT5pX3N0YXRlIHw9IEVYVDRfU1RBVEVfREFfQUxMT0NfQ0xPU0U7CisKIAlpZiAoRVhUNF9JKGlub2RlKS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkgewogCQlleHQ0X2V4dF90cnVuY2F0ZShpbm9kZSk7CiAJCXJldHVybjsKQEAgLTQxMTAsMTIgKzQxOTQsNyBAQAogCQkJdW5zaWduZWQgbnVtOwogCiAJCQl0YWJsZSA9IGV4dDRfaW5vZGVfdGFibGUoc2IsIGdkcCk7Ci0JCQkvKiBNYWtlIHN1cmUgc19pbm9kZV9yZWFkYWhlYWRfYmxrcyBpcyBhIHBvd2VyIG9mIDIgKi8KLQkJCXdoaWxlIChFWFQ0X1NCKHNiKS0+c19pbm9kZV9yZWFkYWhlYWRfYmxrcyAmCi0JCQkgICAgICAgKEVYVDRfU0Ioc2IpLT5zX2lub2RlX3JlYWRhaGVhZF9ibGtzLTEpKQotCQkJCUVYVDRfU0Ioc2IpLT5zX2lub2RlX3JlYWRhaGVhZF9ibGtzID0gCi0JCQkJICAgKEVYVDRfU0Ioc2IpLT5zX2lub2RlX3JlYWRhaGVhZF9ibGtzICYKLQkJCQkgICAgKEVYVDRfU0Ioc2IpLT5zX2lub2RlX3JlYWRhaGVhZF9ibGtzLTEpKTsKKwkJCS8qIHNfaW5vZGVfcmVhZGFoZWFkX2Jsa3MgaXMgYWx3YXlzIGEgcG93ZXIgb2YgMiAqLwogCQkJYiA9IGJsb2NrICYgfihFWFQ0X1NCKHNiKS0+c19pbm9kZV9yZWFkYWhlYWRfYmxrcy0xKTsKIAkJCWlmICh0YWJsZSA+IGIpCiAJCQkJYiA9IHRhYmxlOwpAQCAtNDI4Nyw2ICs0MzY2LDcgQEAKIAllaS0+aV9kaXNrc2l6ZSA9IGlub2RlLT5pX3NpemU7CiAJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9nZW5lcmF0aW9uKTsKIAllaS0+aV9ibG9ja19ncm91cCA9IGlsb2MuYmxvY2tfZ3JvdXA7CisJZWktPmlfbGFzdF9hbGxvY19ncm91cCA9IH4wOwogCS8qCiAJICogTk9URSEgVGhlIGluLW1lbW9yeSBpbm9kZSBpX2RhdGEgYXJyYXkgaXMgaW4gbGl0dGxlLWVuZGlhbiBvcmRlcgogCSAqIGV2ZW4gb24gYmlnLWVuZGlhbiBtYWNoaW5lczogd2UgZG8gTk9UIGJ5dGVzd2FwIHRoZSBibG9jayBudW1iZXJzIQpAQCAtNDMyOSw2ICs0NDA5LDIwIEBACiAJCQkoX191NjQpKGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV92ZXJzaW9uX2hpKSkgPDwgMzI7CiAJfQogCisJaWYgKGVpLT5pX2ZsYWdzICYgRVhUNF9FWFRFTlRTX0ZMKSB7CisJCS8qIFZhbGlkYXRlIGV4dGVudCB3aGljaCBpcyBwYXJ0IG9mIGlub2RlICovCisJCXJldCA9IGV4dDRfZXh0X2NoZWNrX2lub2RlKGlub2RlKTsKKyAJfSBlbHNlIGlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwKKwkJICAgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkgJiYKKwkJICAgICFleHQ0X2lub2RlX2lzX2Zhc3Rfc3ltbGluayhpbm9kZSkpKSB7CisJIAkvKiBWYWxpZGF0ZSBibG9jayByZWZlcmVuY2VzIHdoaWNoIGFyZSBwYXJ0IG9mIGlub2RlICovCisJCXJldCA9IGV4dDRfY2hlY2tfaW5vZGVfYmxvY2tyZWYoaW5vZGUpOworCX0KKwlpZiAocmV0KSB7CisgCQlicmVsc2UoYmgpOworIAkJZ290byBiYWRfaW5vZGU7CisJfQorCiAJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKIAkJaW5vZGUtPmlfb3AgPSAmZXh0NF9maWxlX2lub2RlX29wZXJhdGlvbnM7CiAJCWlub2RlLT5pX2ZvcCA9ICZleHQ0X2ZpbGVfb3BlcmF0aW9uczsKQEAgLTQzNDUsNyArNDQzOSw4IEBACiAJCQlpbm9kZS0+aV9vcCA9ICZleHQ0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWV4dDRfc2V0X2FvcHMoaW5vZGUpOwogCQl9Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS0+aV9tb2RlKSB8fAorCSAgICAgIFNfSVNGSUZPKGlub2RlLT5pX21vZGUpIHx8IFNfSVNTT0NLKGlub2RlLT5pX21vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmV4dDRfc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zOwogCQlpZiAocmF3X2lub2RlLT5pX2Jsb2NrWzBdKQogCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLApAQCAtNDM1Myw2ICs0NDQ4LDEzIEBACiAJCWVsc2UKIAkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgaW5vZGUtPmlfbW9kZSwKIAkJCSAgIG5ld19kZWNvZGVfZGV2KGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9ibG9ja1sxXSkpKTsKKwl9IGVsc2UgeworCQlicmVsc2UoYmgpOworCQlyZXQgPSAtRUlPOworCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCBfX2Z1bmNfXywgCisJCQkgICAiYm9ndXMgaV9tb2RlICglbykgZm9yIGlub2RlPSVsdSIsCisJCQkgICBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9pbm8pOworCQlnb3RvIGJhZF9pbm9kZTsKIAl9CiAJYnJlbHNlKGlsb2MuYmgpOwogCWV4dDRfc2V0X2lub2RlX2ZsYWdzKGlub2RlKTsKQEAgLTUxNDYsOCArNTI0OCw5IEBACiAJcmV0dXJuICFidWZmZXJfbWFwcGVkKGJoKTsKIH0KIAotaW50IGV4dDRfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK2ludCBleHQ0X3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2bWYtPnBhZ2U7CiAJbG9mZl90IHNpemU7CiAJdW5zaWduZWQgbG9uZyBsZW47CiAJaW50IHJldCA9IC1FSU5WQUw7CkBAIC01MTk5LDYgKzUzMDIsOCBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAJcmV0ID0gMDsKIG91dF91bmxvY2s6CisJaWYgKHJldCkKKwkJcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwogCXVwX3JlYWQoJmlub2RlLT5pX2FsbG9jX3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW9jdGwuYyBiL2ZzL2V4dDQvaW9jdGwuYwppbmRleCA0MmRjODNmLi45MWU3NWY3IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lvY3RsLmMKKysrIGIvZnMvZXh0NC9pb2N0bC5jCkBAIC00OCw4ICs0OCw3IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJCWZsYWdzICY9IH5FWFQ0X0RJUlNZTkNfRkw7CisJCWZsYWdzID0gZXh0NF9tYXNrX2ZsYWdzKGlub2RlLT5pX21vZGUsIGZsYWdzKTsKIAogCQllcnIgPSAtRVBFUk07CiAJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKQEAgLTI2Myw2ICsyNjIsMjAgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwljYXNlIEVYVDRfSU9DX0FMTE9DX0RBX0JMS1M6CisJeworCQlpbnQgZXJyOworCQlpZiAoIWlzX293bmVyX29yX2NhcChpbm9kZSkpCisJCQlyZXR1cm4gLUVBQ0NFUzsKKworCQllcnIgPSBtbnRfd2FudF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWVyciA9IGV4dDRfYWxsb2NfZGFfYmxvY2tzKGlub2RlKTsKKwkJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJCXJldHVybiBlcnI7CisJfQorCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9UVFk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmMgYi9mcy9leHQ0L21iYWxsb2MuYwppbmRleCBiMDM4MTg4Li5mODcxNjc3IDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuYworKysgYi9mcy9leHQ0L21iYWxsb2MuYwpAQCAtNDYsMjIgKzQ2LDIzIEBACiAgKiBUaGUgYWxsb2NhdGlvbiByZXF1ZXN0IGludm9sdmUgcmVxdWVzdCBmb3IgbXVsdGlwbGUgbnVtYmVyIG9mIGJsb2NrcwogICogbmVhciB0byB0aGUgZ29hbChibG9jaykgdmFsdWUgc3BlY2lmaWVkLgogICoKLSAqIER1cmluZyBpbml0aWFsaXphdGlvbiBwaGFzZSBvZiB0aGUgYWxsb2NhdG9yIHdlIGRlY2lkZSB0byB1c2UgdGhlIGdyb3VwCi0gKiBwcmVhbGxvY2F0aW9uIG9yIGlub2RlIHByZWFsbG9jYXRpb24gZGVwZW5kaW5nIG9uIHRoZSBzaXplIGZpbGUuIFRoZQotICogc2l6ZSBvZiB0aGUgZmlsZSBjb3VsZCBiZSB0aGUgcmVzdWx0aW5nIGZpbGUgc2l6ZSB3ZSB3b3VsZCBoYXZlIGFmdGVyCi0gKiBhbGxvY2F0aW9uIG9yIHRoZSBjdXJyZW50IGZpbGUgc2l6ZSB3aGljaCBldmVyIGlzIGxhcmdlci4gSWYgdGhlIHNpemUgaXMKLSAqIGxlc3MgdGhhdCBzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3Qgd2Ugc2VsZWN0IHRoZSBncm91cAotICogcHJlYWxsb2NhdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgb2Ygc19tYl9zdHJlYW1fcmVxdWVzdCBpcyAxNgotICogYmxvY2tzLiBUaGlzIGNhbiBhbHNvIGJlIHR1bmVkIHZpYQotICogL3Byb2MvZnMvZXh0NC88cGFydGl0aW9uPi9zdHJlYW1fcmVxLiBUaGUgdmFsdWUgaXMgcmVwcmVzZW50ZWQgaW4gdGVybXMKLSAqIG9mIG51bWJlciBvZiBibG9ja3MuCisgKiBEdXJpbmcgaW5pdGlhbGl6YXRpb24gcGhhc2Ugb2YgdGhlIGFsbG9jYXRvciB3ZSBkZWNpZGUgdG8gdXNlIHRoZQorICogZ3JvdXAgcHJlYWxsb2NhdGlvbiBvciBpbm9kZSBwcmVhbGxvY2F0aW9uIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZgorICogdGhlIGZpbGUuIFRoZSBzaXplIG9mIHRoZSBmaWxlIGNvdWxkIGJlIHRoZSByZXN1bHRpbmcgZmlsZSBzaXplIHdlCisgKiB3b3VsZCBoYXZlIGFmdGVyIGFsbG9jYXRpb24sIG9yIHRoZSBjdXJyZW50IGZpbGUgc2l6ZSwgd2hpY2ggZXZlcgorICogaXMgbGFyZ2VyLiBJZiB0aGUgc2l6ZSBpcyBsZXNzIHRoYW4gc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0IHdlCisgKiBzZWxlY3QgdG8gdXNlIHRoZSBncm91cCBwcmVhbGxvY2F0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBvZgorICogc19tYl9zdHJlYW1fcmVxdWVzdCBpcyAxNiBibG9ja3MuIFRoaXMgY2FuIGFsc28gYmUgdHVuZWQgdmlhCisgKiAvc3lzL2ZzL2V4dDQvPHBhcnRpdGlvbj4vbWJfc3RyZWFtX3JlcS4gVGhlIHZhbHVlIGlzIHJlcHJlc2VudGVkIGluCisgKiB0ZXJtcyBvZiBudW1iZXIgb2YgYmxvY2tzLgogICoKICAqIFRoZSBtYWluIG1vdGl2YXRpb24gZm9yIGhhdmluZyBzbWFsbCBmaWxlIHVzZSBncm91cCBwcmVhbGxvY2F0aW9uIGlzIHRvCi0gKiBlbnN1cmUgdGhhdCB3ZSBoYXZlIHNtYWxsIGZpbGUgY2xvc2VyIGluIHRoZSBkaXNrLgorICogZW5zdXJlIHRoYXQgd2UgaGF2ZSBzbWFsbCBmaWxlcyBjbG9zZXIgdG9nZXRoZXIgb24gdGhlIGRpc2suCiAgKgotICogRmlyc3Qgc3RhZ2UgdGhlIGFsbG9jYXRvciBsb29rcyBhdCB0aGUgaW5vZGUgcHJlYWxsb2MgbGlzdAotICogZXh0NF9pbm9kZV9pbmZvLT5pX3ByZWFsbG9jX2xpc3QgY29udGFpbiBsaXN0IG9mIHByZWFsbG9jIHNwYWNlcyBmb3IKLSAqIHRoaXMgcGFydGljdWxhciBpbm9kZS4gVGhlIGlub2RlIHByZWFsbG9jIHNwYWNlIGlzIHJlcHJlc2VudGVkIGFzOgorICogRmlyc3Qgc3RhZ2UgdGhlIGFsbG9jYXRvciBsb29rcyBhdCB0aGUgaW5vZGUgcHJlYWxsb2MgbGlzdCwKKyAqIGV4dDRfaW5vZGVfaW5mby0+aV9wcmVhbGxvY19saXN0LCB3aGljaCBjb250YWlucyBsaXN0IG9mIHByZWFsbG9jCisgKiBzcGFjZXMgZm9yIHRoaXMgcGFydGljdWxhciBpbm9kZS4gVGhlIGlub2RlIHByZWFsbG9jIHNwYWNlIGlzCisgKiByZXByZXNlbnRlZCBhczoKICAqCiAgKiBwYV9sc3RhcnQgLT4gdGhlIGxvZ2ljYWwgc3RhcnQgYmxvY2sgZm9yIHRoaXMgcHJlYWxsb2Mgc3BhY2UKICAqIHBhX3BzdGFydCAtPiB0aGUgcGh5c2ljYWwgc3RhcnQgYmxvY2sgZm9yIHRoaXMgcHJlYWxsb2Mgc3BhY2UKQEAgLTEyMSwyOSArMTIyLDI5IEBACiAgKiBsaXN0LiBJbiBjYXNlIG9mIGlub2RlIHByZWFsbG9jYXRpb24gd2UgZm9sbG93IGEgbGlzdCBvZiBoZXVyaXN0aWNzCiAgKiBiYXNlZCBvbiBmaWxlIHNpemUuIFRoaXMgY2FuIGJlIGZvdW5kIGluIGV4dDRfbWJfbm9ybWFsaXplX3JlcXVlc3QuIElmCiAgKiB3ZSBhcmUgZG9pbmcgYSBncm91cCBwcmVhbGxvYyB3ZSB0cnkgdG8gbm9ybWFsaXplIHRoZSByZXF1ZXN0IHRvCi0gKiBzYmktPnNfbWJfZ3JvdXBfcHJlYWxsb2MuIERlZmF1bHQgdmFsdWUgb2Ygc19tYl9ncm91cF9wcmVhbGxvYyBpcyBzZXQgdG8KKyAqIHNiaS0+c19tYl9ncm91cF9wcmVhbGxvYy4gRGVmYXVsdCB2YWx1ZSBvZiBzX21iX2dyb3VwX3ByZWFsbG9jIGlzCiAgKiA1MTIgYmxvY2tzLiBUaGlzIGNhbiBiZSB0dW5lZCB2aWEKLSAqIC9wcm9jL2ZzL2V4dDQvPHBhcnRpdGlvbi9ncm91cF9wcmVhbGxvYy4gVGhlIHZhbHVlIGlzIHJlcHJlc2VudGVkIGluCisgKiAvc3lzL2ZzL2V4dDQvPHBhcnRpdGlvbi9tYl9ncm91cF9wcmVhbGxvYy4gVGhlIHZhbHVlIGlzIHJlcHJlc2VudGVkIGluCiAgKiB0ZXJtcyBvZiBudW1iZXIgb2YgYmxvY2tzLiBJZiB3ZSBoYXZlIG1vdW50ZWQgdGhlIGZpbGUgc3lzdGVtIHdpdGggLU8KICAqIHN0cmlwZT08dmFsdWU+IG9wdGlvbiB0aGUgZ3JvdXAgcHJlYWxsb2MgcmVxdWVzdCBpcyBub3JtYWxpemVkIHRvIHRoZQogICogc3RyaXBlIHZhbHVlIChzYmktPnNfc3RyaXBlKQogICoKLSAqIFRoZSByZWd1bGFyIGFsbG9jYXRvcih1c2luZyB0aGUgYnVkZHkgY2FjaGUpIHN1cHBvcnQgZmV3IHR1bmFibGVzLgorICogVGhlIHJlZ3VsYXIgYWxsb2NhdG9yKHVzaW5nIHRoZSBidWRkeSBjYWNoZSkgc3VwcG9ydHMgZmV3IHR1bmFibGVzLgogICoKLSAqIC9wcm9jL2ZzL2V4dDQvPHBhcnRpdGlvbj4vbWluX3RvX3NjYW4KLSAqIC9wcm9jL2ZzL2V4dDQvPHBhcnRpdGlvbj4vbWF4X3RvX3NjYW4KLSAqIC9wcm9jL2ZzL2V4dDQvPHBhcnRpdGlvbj4vb3JkZXIyX3JlcQorICogL3N5cy9mcy9leHQ0LzxwYXJ0aXRpb24+L21iX21pbl90b19zY2FuCisgKiAvc3lzL2ZzL2V4dDQvPHBhcnRpdGlvbj4vbWJfbWF4X3RvX3NjYW4KKyAqIC9zeXMvZnMvZXh0NC88cGFydGl0aW9uPi9tYl9vcmRlcjJfcmVxCiAgKgotICogVGhlIHJlZ3VsYXIgYWxsb2NhdG9yIHVzZSBidWRkeSBzY2FuIG9ubHkgaWYgdGhlIHJlcXVlc3QgbGVuIGlzIHBvd2VyIG9mCisgKiBUaGUgcmVndWxhciBhbGxvY2F0b3IgdXNlcyBidWRkeSBzY2FuIG9ubHkgaWYgdGhlIHJlcXVlc3QgbGVuIGlzIHBvd2VyIG9mCiAgKiAyIGJsb2NrcyBhbmQgdGhlIG9yZGVyIG9mIGFsbG9jYXRpb24gaXMgPj0gc2JpLT5zX21iX29yZGVyMl9yZXFzLiBUaGUKICAqIHZhbHVlIG9mIHNfbWJfb3JkZXIyX3JlcXMgY2FuIGJlIHR1bmVkIHZpYQotICogL3Byb2MvZnMvZXh0NC88cGFydGl0aW9uPi9vcmRlcjJfcmVxLiAgSWYgdGhlIHJlcXVlc3QgbGVuIGlzIGVxdWFsIHRvCisgKiAvc3lzL2ZzL2V4dDQvPHBhcnRpdGlvbj4vbWJfb3JkZXIyX3JlcS4gIElmIHRoZSByZXF1ZXN0IGxlbiBpcyBlcXVhbCB0bwogICogc3RyaXBlIHNpemUgKHNiaS0+c19zdHJpcGUpLCB3ZSB0cnkgdG8gc2VhcmNoIGZvciBjb250aWdvdXMgYmxvY2sgaW4KLSAqIHN0cmlwZSBzaXplLiBUaGlzIHNob3VsZCByZXN1bHQgaW4gYmV0dGVyIGFsbG9jYXRpb24gb24gUkFJRCBzZXR1cC4gSWYKLSAqIG5vdCB3ZSBzZWFyY2ggaW4gdGhlIHNwZWNpZmljIGdyb3VwIHVzaW5nIGJpdG1hcCBmb3IgYmVzdCBleHRlbnRzLiBUaGUKLSAqIHR1bmFibGUgbWluX3RvX3NjYW4gYW5kIG1heF90b19zY2FuIGNvbnRyb2xsIHRoZSBiZWhhdmlvdXIgaGVyZS4KKyAqIHN0cmlwZSBzaXplLiBUaGlzIHNob3VsZCByZXN1bHQgaW4gYmV0dGVyIGFsbG9jYXRpb24gb24gUkFJRCBzZXR1cHMuIElmCisgKiBub3QsIHdlIHNlYXJjaCBpbiB0aGUgc3BlY2lmaWMgZ3JvdXAgdXNpbmcgYml0bWFwIGZvciBiZXN0IGV4dGVudHMuIFRoZQorICogdHVuYWJsZSBtaW5fdG9fc2NhbiBhbmQgbWF4X3RvX3NjYW4gY29udHJvbCB0aGUgYmVoYXZpb3VyIGhlcmUuCiAgKiBtaW5fdG9fc2NhbiBpbmRpY2F0ZSBob3cgbG9uZyB0aGUgbWJhbGxvYyBfX211c3RfXyBsb29rIGZvciBhIGJlc3QKLSAqIGV4dGVudCBhbmQgbWF4X3RvX3NjYW5pbmRpY2F0ZSBob3cgbG9uZyB0aGUgbWJhbGxvYyBfX2Nhbl9fIGxvb2sgZm9yIGEKKyAqIGV4dGVudCBhbmQgbWF4X3RvX3NjYW4gaW5kaWNhdGVzIGhvdyBsb25nIHRoZSBtYmFsbG9jIF9fY2FuX18gbG9vayBmb3IgYQogICogYmVzdCBleHRlbnQgaW4gdGhlIGZvdW5kIGV4dGVudHMuIFNlYXJjaGluZyBmb3IgdGhlIGJsb2NrcyBzdGFydHMgd2l0aAogICogdGhlIGdyb3VwIHNwZWNpZmllZCBhcyB0aGUgZ29hbCB2YWx1ZSBpbiBhbGxvY2F0aW9uIGNvbnRleHQgdmlhCiAgKiBhY19nX2V4LiBFYWNoIGdyb3VwIGlzIGZpcnN0IGNoZWNrZWQgYmFzZWQgb24gdGhlIGNyaXRlcmlhIHdoZXRoZXIgaXQKQEAgLTMzNyw4ICszMzgsNiBAQAogCQkJCQlleHQ0X2dyb3VwX3QgZ3JvdXApOwogc3RhdGljIHZvaWQgZXh0NF9tYl9nZW5lcmF0ZV9mcm9tX2ZyZWVsaXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmJpdG1hcCwKIAkJCQkJCWV4dDRfZ3JvdXBfdCBncm91cCk7Ci1zdGF0aWMgaW50IGV4dDRfbWJfaW5pdF9wZXJfZGV2X3Byb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Ci1zdGF0aWMgaW50IGV4dDRfbWJfZGVzdHJveV9wZXJfZGV2X3Byb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBzdGF0aWMgdm9pZCByZWxlYXNlX2Jsb2Nrc19vbl9jb21taXQoam91cm5hbF90ICpqb3VybmFsLCB0cmFuc2FjdGlvbl90ICp0eG4pOwogCiAKQEAgLTE3MjYsNiArMTcyNSw3IEBACiB7CiAJdW5zaWduZWQgZnJlZSwgZnJhZ21lbnRzOwogCXVuc2lnbmVkIGksIGJpdHM7CisJaW50IGZsZXhfc2l6ZSA9IGV4dDRfZmxleF9iZ19zaXplKEVYVDRfU0IoYWMtPmFjX3NiKSk7CiAJc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZGVzYzsKIAlzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvICpncnAgPSBleHQ0X2dldF9ncm91cF9pbmZvKGFjLT5hY19zYiwgZ3JvdXApOwogCkBAIC0xNzQ3LDYgKzE3NDcsMTIgQEAKIAkJaWYgKGRlc2MtPmJnX2ZsYWdzICYgY3B1X3RvX2xlMTYoRVhUNF9CR19CTE9DS19VTklOSVQpKQogCQkJcmV0dXJuIDA7CiAKKwkJLyogQXZvaWQgdXNpbmcgdGhlIGZpcnN0IGJnIG9mIGEgZmxleGdyb3VwIGZvciBkYXRhIGZpbGVzICovCisJCWlmICgoYWMtPmFjX2ZsYWdzICYgRVhUNF9NQl9ISU5UX0RBVEEpICYmCisJCSAgICAoZmxleF9zaXplID49IEVYVDRfRkxFWF9TSVpFX0RJUl9BTExPQ19TQ0hFTUUpICYmCisJCSAgICAoKGdyb3VwICUgZmxleF9zaXplKSA9PSAwKSkKKwkJCXJldHVybiAwOworCiAJCWJpdHMgPSBhYy0+YWNfc2ItPnNfYmxvY2tzaXplX2JpdHMgKyAxOwogCQlmb3IgKGkgPSBhYy0+YWNfMm9yZGVyOyBpIDw9IGJpdHM7IGkrKykKIAkJCWlmIChncnAtPmJiX2NvdW50ZXJzW2ldID4gMCkKQEAgLTE5NzEsNyArMTk3Nyw3IEBACiAJLyoKIAkgKiBXZSBzZWFyY2ggdXNpbmcgYnVkZHkgZGF0YSBvbmx5IGlmIHRoZSBvcmRlciBvZiB0aGUgcmVxdWVzdAogCSAqIGlzIGdyZWF0ZXIgdGhhbiBlcXVhbCB0byB0aGUgc2JpX3NfbWJfb3JkZXIyX3JlcXMKLQkgKiBZb3UgY2FuIHR1bmUgaXQgdmlhIC9wcm9jL2ZzL2V4dDQvPHBhcnRpdGlvbj4vb3JkZXIyX3JlcQorCSAqIFlvdSBjYW4gdHVuZSBpdCB2aWEgL3N5cy9mcy9leHQ0LzxwYXJ0aXRpb24+L21iX29yZGVyMl9yZXEKIAkgKi8KIAlpZiAoaSA+PSBzYmktPnNfbWJfb3JkZXIyX3JlcXMpIHsKIAkJLyoKQEAgLTI2OTMsNyArMjY5OSw3IEBACiAJaSA9IChzYi0+c19ibG9ja3NpemVfYml0cyArIDIpICogc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAJc2JpLT5zX21iX21heHMgPSBrbWFsbG9jKGksIEdGUF9LRVJORUwpOwogCWlmIChzYmktPnNfbWJfbWF4cyA9PSBOVUxMKSB7Ci0JCWtmcmVlKHNiaS0+c19tYl9tYXhzKTsKKwkJa2ZyZWUoc2JpLT5zX21iX29mZnNldHMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTI3NDYsNyArMjc1Miw2IEBACiAJCXNwaW5fbG9ja19pbml0KCZsZy0+bGdfcHJlYWxsb2NfbG9jayk7CiAJfQogCi0JZXh0NF9tYl9pbml0X3Blcl9kZXZfcHJvYyhzYik7CiAJZXh0NF9tYl9oaXN0b3J5X2luaXQoc2IpOwogCiAJaWYgKHNiaS0+c19qb3VybmFsKQpAQCAtMjgyOSw3ICsyODM0LDYgQEAKIAogCWZyZWVfcGVyY3B1KHNiaS0+c19sb2NhbGl0eV9ncm91cHMpOwogCWV4dDRfbWJfaGlzdG9yeV9yZWxlYXNlKHNiKTsKLQlleHQ0X21iX2Rlc3Ryb3lfcGVyX2Rldl9wcm9jKHNiKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjg5MCw2MiArMjg5NCw2IEBACiAJbWJfZGVidWcoImZyZWVkICV1IGJsb2NrcyBpbiAldSBzdHJ1Y3R1cmVzXG4iLCBjb3VudCwgY291bnQyKTsKIH0KIAotI2RlZmluZSBFWFQ0X01CX1NUQVRTX05BTUUJCSJzdGF0cyIKLSNkZWZpbmUgRVhUNF9NQl9NQVhfVE9fU0NBTl9OQU1FCSJtYXhfdG9fc2NhbiIKLSNkZWZpbmUgRVhUNF9NQl9NSU5fVE9fU0NBTl9OQU1FCSJtaW5fdG9fc2NhbiIKLSNkZWZpbmUgRVhUNF9NQl9PUkRFUjJfUkVRCQkib3JkZXIyX3JlcSIKLSNkZWZpbmUgRVhUNF9NQl9TVFJFQU1fUkVRCQkic3RyZWFtX3JlcSIKLSNkZWZpbmUgRVhUNF9NQl9HUk9VUF9QUkVBTExPQwkJImdyb3VwX3ByZWFsbG9jIgotCi1zdGF0aWMgaW50IGV4dDRfbWJfaW5pdF9wZXJfZGV2X3Byb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCW1vZGVfdCBtb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSOwotCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0Ioc2IpOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKLQotCWlmIChzYmktPnNfcHJvYyA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCUVYVDRfUFJPQ19IQU5ETEVSKEVYVDRfTUJfU1RBVFNfTkFNRSwgbWJfc3RhdHMpOwotCUVYVDRfUFJPQ19IQU5ETEVSKEVYVDRfTUJfTUFYX1RPX1NDQU5fTkFNRSwgbWJfbWF4X3RvX3NjYW4pOwotCUVYVDRfUFJPQ19IQU5ETEVSKEVYVDRfTUJfTUlOX1RPX1NDQU5fTkFNRSwgbWJfbWluX3RvX3NjYW4pOwotCUVYVDRfUFJPQ19IQU5ETEVSKEVYVDRfTUJfT1JERVIyX1JFUSwgbWJfb3JkZXIyX3JlcXMpOwotCUVYVDRfUFJPQ19IQU5ETEVSKEVYVDRfTUJfU1RSRUFNX1JFUSwgbWJfc3RyZWFtX3JlcXVlc3QpOwotCUVYVDRfUFJPQ19IQU5ETEVSKEVYVDRfTUJfR1JPVVBfUFJFQUxMT0MsIG1iX2dyb3VwX3ByZWFsbG9jKTsKLQlyZXR1cm4gMDsKLQotZXJyX291dDoKLQlyZW1vdmVfcHJvY19lbnRyeShFWFQ0X01CX0dST1VQX1BSRUFMTE9DLCBzYmktPnNfcHJvYyk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoRVhUNF9NQl9TVFJFQU1fUkVRLCBzYmktPnNfcHJvYyk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoRVhUNF9NQl9PUkRFUjJfUkVRLCBzYmktPnNfcHJvYyk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoRVhUNF9NQl9NSU5fVE9fU0NBTl9OQU1FLCBzYmktPnNfcHJvYyk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoRVhUNF9NQl9NQVhfVE9fU0NBTl9OQU1FLCBzYmktPnNfcHJvYyk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoRVhUNF9NQl9TVEFUU19OQU1FLCBzYmktPnNfcHJvYyk7Ci0JcmV0dXJuIC1FTk9NRU07Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgZXh0NF9tYl9kZXN0cm95X3Blcl9kZXZfcHJvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0Jc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7Ci0KLQlpZiAoc2JpLT5zX3Byb2MgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZW1vdmVfcHJvY19lbnRyeShFWFQ0X01CX0dST1VQX1BSRUFMTE9DLCBzYmktPnNfcHJvYyk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoRVhUNF9NQl9TVFJFQU1fUkVRLCBzYmktPnNfcHJvYyk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoRVhUNF9NQl9PUkRFUjJfUkVRLCBzYmktPnNfcHJvYyk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoRVhUNF9NQl9NSU5fVE9fU0NBTl9OQU1FLCBzYmktPnNfcHJvYyk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoRVhUNF9NQl9NQVhfVE9fU0NBTl9OQU1FLCBzYmktPnNfcHJvYyk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoRVhUNF9NQl9TVEFUU19OQU1FLCBzYmktPnNfcHJvYyk7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQogaW50IF9faW5pdCBpbml0X2V4dDRfbWJhbGxvYyh2b2lkKQogewogCWV4dDRfcHNwYWNlX2NhY2hlcCA9CkBAIC0zMDk2LDkgKzMwNDQsOCBAQAogCWlmIChzYmktPnNfbG9nX2dyb3Vwc19wZXJfZmxleCkgewogCQlleHQ0X2dyb3VwX3QgZmxleF9ncm91cCA9IGV4dDRfZmxleF9ncm91cChzYmksCiAJCQkJCQkJICBhYy0+YWNfYl9leC5mZV9ncm91cCk7Ci0JCXNwaW5fbG9jayhzYl9iZ2xfbG9jayhzYmksIGZsZXhfZ3JvdXApKTsKLQkJc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZsZXhfZ3JvdXBdLmZyZWVfYmxvY2tzIC09IGFjLT5hY19iX2V4LmZlX2xlbjsKLQkJc3Bpbl91bmxvY2soc2JfYmdsX2xvY2soc2JpLCBmbGV4X2dyb3VwKSk7CisJCWF0b21pY19zdWIoYWMtPmFjX2JfZXguZmVfbGVuLAorCQkJICAgJnNiaS0+c19mbGV4X2dyb3Vwc1tmbGV4X2dyb3VwXS5mcmVlX2Jsb2Nrcyk7CiAJfQogCiAJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBiaXRtYXBfYmgpOwpAQCAtMzExNiw3ICszMDYzLDcgQEAKICAqIGhlcmUgd2Ugbm9ybWFsaXplIHJlcXVlc3QgZm9yIGxvY2FsaXR5IGdyb3VwCiAgKiBHcm91cCByZXF1ZXN0IGFyZSBub3JtYWxpemVkIHRvIHNfc3RyaXAgc2l6ZSBpZiB3ZSBzZXQgdGhlIHNhbWUgdmlhIG1vdW50CiAgKiBvcHRpb24uIElmIG5vdCB3ZSBzZXQgaXQgdG8gc19tYl9ncm91cF9wcmVhbGxvYyB3aGljaCBjYW4gYmUgY29uZmlndXJlZCB2aWEKLSAqIC9wcm9jL2ZzL2V4dDQvPHBhcnRpdGlvbj4vZ3JvdXBfcHJlYWxsb2MKKyAqIC9zeXMvZnMvZXh0NC88cGFydGl0aW9uPi9tYl9ncm91cF9wcmVhbGxvYwogICoKICAqIFhYWDogc2hvdWxkIHdlIHRyeSB0byBwcmVhbGxvY2F0ZSBtb3JlIHRoYW4gdGhlIGdyb3VwIGhhcyBub3c/CiAgKi8KQEAgLTM2MDgsOCArMzU1NSwxMSBAQAogCXNwaW5fdW5sb2NrKCZwYS0+cGFfbG9jayk7CiAKIAlncnBfYmxrID0gcGEtPnBhX3BzdGFydDsKLQkvKiBJZiBsaW5lYXIsIHBhX3BzdGFydCBtYXkgYmUgaW4gdGhlIG5leHQgZ3JvdXAgd2hlbiBwYSBpcyB1c2VkIHVwICovCi0JaWYgKHBhLT5wYV9saW5lYXIpCisJLyogCisJICogSWYgZG9pbmcgZ3JvdXAtYmFzZWQgcHJlYWxsb2NhdGlvbiwgcGFfcHN0YXJ0IG1heSBiZSBpbiB0aGUKKwkgKiBuZXh0IGdyb3VwIHdoZW4gcGEgaXMgdXNlZCB1cAorCSAqLworCWlmIChwYS0+cGFfdHlwZSA9PSBNQl9HUk9VUF9QQSkKIAkJZ3JwX2Jsay0tOwogCiAJZXh0NF9nZXRfZ3JvdXBfbm9fYW5kX29mZnNldChzYiwgZ3JwX2JsaywgJmdycCwgTlVMTCk7CkBAIC0zNzA0LDcgKzM2NTQsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZwYS0+cGFfaW5vZGVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnBhLT5wYV9ncm91cF9saXN0KTsKIAlwYS0+cGFfZGVsZXRlZCA9IDA7Ci0JcGEtPnBhX2xpbmVhciA9IDA7CisJcGEtPnBhX3R5cGUgPSBNQl9JTk9ERV9QQTsKIAogCW1iX2RlYnVnKCJuZXcgaW5vZGUgcGEgJXA6ICVsbHUvJXUgZm9yICV1XG4iLCBwYSwKIAkJCXBhLT5wYV9wc3RhcnQsIHBhLT5wYV9sZW4sIHBhLT5wYV9sc3RhcnQpOwpAQCAtMzc2Nyw3ICszNzE3LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmcGEtPnBhX2lub2RlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZwYS0+cGFfZ3JvdXBfbGlzdCk7CiAJcGEtPnBhX2RlbGV0ZWQgPSAwOwotCXBhLT5wYV9saW5lYXIgPSAxOworCXBhLT5wYV90eXBlID0gTUJfR1JPVVBfUEE7CiAKIAltYl9kZWJ1ZygibmV3IGdyb3VwIHBhICVwOiAlbGx1LyV1IGZvciAldVxuIiwgcGEsCiAJCSBwYS0+cGFfcHN0YXJ0LCBwYS0+cGFfbGVuLCBwYS0+cGFfbHN0YXJ0KTsKQEAgLTQwMjEsNyArMzk3MSw3IEBACiAJCWxpc3RfZGVsX3JjdSgmcGEtPnBhX2lub2RlX2xpc3QpOwogCQlzcGluX3VubG9jayhwYS0+cGFfb2JqX2xvY2spOwogCi0JCWlmIChwYS0+cGFfbGluZWFyKQorCQlpZiAocGEtPnBhX3R5cGUgPT0gTUJfR1JPVVBfUEEpCiAJCQlleHQ0X21iX3JlbGVhc2VfZ3JvdXBfcGEoJmU0YiwgcGEsIGFjKTsKIAkJZWxzZQogCQkJZXh0NF9tYl9yZWxlYXNlX2lub2RlX3BhKCZlNGIsIGJpdG1hcF9iaCwgcGEsIGFjKTsKQEAgLTQxMjEsNyArNDA3MSw3IEBACiAJc3Bpbl91bmxvY2soJmVpLT5pX3ByZWFsbG9jX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhLCB0bXAsICZsaXN0LCB1LnBhX3RtcF9saXN0KSB7Ci0JCUJVR19PTihwYS0+cGFfbGluZWFyICE9IDApOworCQlCVUdfT04ocGEtPnBhX3R5cGUgIT0gTUJfSU5PREVfUEEpOwogCQlleHQ0X2dldF9ncm91cF9ub19hbmRfb2Zmc2V0KHNiLCBwYS0+cGFfcHN0YXJ0LCAmZ3JvdXAsIE5VTEwpOwogCiAJCWVyciA9IGV4dDRfbWJfbG9hZF9idWRkeShzYiwgZ3JvdXAsICZlNGIpOwpAQCAtNDIzMiw3ICs0MTgyLDcgQEAKICAqIGZpbGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY3VycmVudCBzaXplIG9yIHRoZSByZXN1bHRpbmcgc2l6ZSBhZnRlcgogICogYWxsb2NhdGlvbiB3aGljaCBldmVyIGlzIGxhcmdlcgogICoKLSAqIE9uZSBjYW4gdHVuZSB0aGlzIHNpemUgdmlhIC9wcm9jL2ZzL2V4dDQvPHBhcnRpdGlvbj4vc3RyZWFtX3JlcQorICogT25lIGNhbiB0dW5lIHRoaXMgc2l6ZSB2aWEgL3N5cy9mcy9leHQ0LzxwYXJ0aXRpb24+L21iX3N0cmVhbV9yZXEKICAqLwogc3RhdGljIHZvaWQgZXh0NF9tYl9ncm91cF9vcl9maWxlKHN0cnVjdCBleHQ0X2FsbG9jYXRpb25fY29udGV4dCAqYWMpCiB7CkBAIC00MzczLDcgKzQzMjMsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAkJLyogb25seSBsZyBwcmVhbGxvYyBzcGFjZSAqLwotCQlCVUdfT04oIXBhLT5wYV9saW5lYXIpOworCQlCVUdfT04ocGEtPnBhX3R5cGUgIT0gTUJfR1JPVVBfUEEpOwogCiAJCS8qIHNlZW1zIHRoaXMgb25lIGNhbiBiZSBmcmVlZCAuLi4gKi8KIAkJcGEtPnBhX2RlbGV0ZWQgPSAxOwpAQCAtNDQ0Miw3ICs0MzkyLDcgQEAKIAkJCQkJCXBhX2lub2RlX2xpc3QpIHsKIAkJc3Bpbl9sb2NrKCZ0bXBfcGEtPnBhX2xvY2spOwogCQlpZiAodG1wX3BhLT5wYV9kZWxldGVkKSB7Ci0JCQlzcGluX3VubG9jaygmcGEtPnBhX2xvY2spOworCQkJc3Bpbl91bmxvY2soJnRtcF9wYS0+cGFfbG9jayk7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoIWFkZGVkICYmIHBhLT5wYV9mcmVlIDwgdG1wX3BhLT5wYV9mcmVlKSB7CkBAIC00NDc5LDcgKzQ0MjksNyBAQAogewogCXN0cnVjdCBleHQ0X3ByZWFsbG9jX3NwYWNlICpwYSA9IGFjLT5hY19wYTsKIAlpZiAocGEpIHsKLQkJaWYgKHBhLT5wYV9saW5lYXIpIHsKKwkJaWYgKHBhLT5wYV90eXBlID09IE1CX0dST1VQX1BBKSB7CiAJCQkvKiBzZWUgY29tbWVudCBpbiBleHQ0X21iX3VzZV9ncm91cF9wYSgpICovCiAJCQlzcGluX2xvY2soJnBhLT5wYV9sb2NrKTsKIAkJCXBhLT5wYV9wc3RhcnQgKz0gYWMtPmFjX2JfZXguZmVfbGVuOwpAQCAtNDQ5OSw3ICs0NDQ5LDcgQEAKIAkJICogZG9lc24ndCBncm93IGJpZy4gIFdlIG5lZWQgdG8gcmVsZWFzZQogCQkgKiBhbGxvY19zZW1wIGJlZm9yZSBjYWxsaW5nIGV4dDRfbWJfYWRkX25fdHJpbSgpCiAJCSAqLwotCQlpZiAocGEtPnBhX2xpbmVhciAmJiBsaWtlbHkocGEtPnBhX2ZyZWUpKSB7CisJCWlmICgocGEtPnBhX3R5cGUgPT0gTUJfR1JPVVBfUEEpICYmIGxpa2VseShwYS0+cGFfZnJlZSkpIHsKIAkJCXNwaW5fbG9jayhwYS0+cGFfb2JqX2xvY2spOwogCQkJbGlzdF9kZWxfcmN1KCZwYS0+cGFfaW5vZGVfbGlzdCk7CiAJCQlzcGluX3VubG9jayhwYS0+cGFfb2JqX2xvY2spOwpAQCAtNDkzNiw5ICs0ODg2LDcgQEAKIAogCWlmIChzYmktPnNfbG9nX2dyb3Vwc19wZXJfZmxleCkgewogCQlleHQ0X2dyb3VwX3QgZmxleF9ncm91cCA9IGV4dDRfZmxleF9ncm91cChzYmksIGJsb2NrX2dyb3VwKTsKLQkJc3Bpbl9sb2NrKHNiX2JnbF9sb2NrKHNiaSwgZmxleF9ncm91cCkpOwotCQlzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0uZnJlZV9ibG9ja3MgKz0gY291bnQ7Ci0JCXNwaW5fdW5sb2NrKHNiX2JnbF9sb2NrKHNiaSwgZmxleF9ncm91cCkpOworCQlhdG9taWNfYWRkKGNvdW50LCAmc2JpLT5zX2ZsZXhfZ3JvdXBzW2ZsZXhfZ3JvdXBdLmZyZWVfYmxvY2tzKTsKIAl9CiAKIAlleHQ0X21iX3JlbGVhc2VfZGVzYygmZTRiKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5oIGIvZnMvZXh0NC9tYmFsbG9jLmgKaW5kZXggMTBhMjkyMS4uZGQ5ZTZjZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmgKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmgKQEAgLTEzMiwxMiArMTMyLDE1IEBACiAJZXh0NF9sYmxrX3QJCXBhX2xzdGFydDsJLyogbG9nLiBibG9jayAqLwogCXVuc2lnbmVkIHNob3J0CQlwYV9sZW47CQkvKiBsZW4gb2YgcHJlYWxsb2NhdGVkIGNodW5rICovCiAJdW5zaWduZWQgc2hvcnQJCXBhX2ZyZWU7CS8qIGhvdyBtYW55IGJsb2NrcyBhcmUgZnJlZSAqLwotCXVuc2lnbmVkIHNob3J0CQlwYV9saW5lYXI7CS8qIGNvbnN1bWVkIGluIG9uZSBkaXJlY3Rpb24KLQkJCQkJCSAqIHN0cmljdGx5LCBmb3IgZ3JwIHByZWFsbG9jICovCisJdW5zaWduZWQgc2hvcnQJCXBhX3R5cGU7CS8qIHBhIHR5cGUuIGlub2RlIG9yIGdyb3VwICovCiAJc3BpbmxvY2tfdAkJKnBhX29ial9sb2NrOwogCXN0cnVjdCBpbm9kZQkJKnBhX2lub2RlOwkvKiBoYWNrLCBmb3IgaGlzdG9yeSBvbmx5ICovCiB9OwogCitlbnVtIHsKKwlNQl9JTk9ERV9QQSA9IDAsCisJTUJfR1JPVVBfUEEgPSAxCit9OwogCiBzdHJ1Y3QgZXh0NF9mcmVlX2V4dGVudCB7CiAJZXh0NF9sYmxrX3QgZmVfbG9naWNhbDsKQEAgLTI0Nyw3ICsyNTAsNiBAQAogCiAjZGVmaW5lIGluX3JhbmdlKGIsIGZpcnN0LCBsZW4pCSgoYikgPj0gKGZpcnN0KSAmJiAoYikgPD0gKGZpcnN0KSArIChsZW4pIC0gMSkKIAotc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWFkX2Jsb2NrX2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgZXh0NF9ncm91cF90KTsKIHN0YXRpYyBpbmxpbmUgZXh0NF9mc2Jsa190IGV4dDRfZ3JwX29mZnNfdG9fYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJc3RydWN0IGV4dDRfZnJlZV9leHRlbnQgKmZleCkKIHsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbmFtZWkuYyBiL2ZzL2V4dDQvbmFtZWkuYwppbmRleCA4MzQxMDI0Li4yMjA5OGUxIDEwMDY0NAotLS0gYS9mcy9leHQ0L25hbWVpLmMKKysrIGIvZnMvZXh0NC9uYW1laS5jCkBAIC0xNjEsMTIgKzE2MSwxMiBAQAogCQkJCSBzdHJ1Y3QgZHhfZnJhbWUgKmZyYW1lLAogCQkJCSBpbnQgKmVycik7CiBzdGF0aWMgdm9pZCBkeF9yZWxlYXNlKHN0cnVjdCBkeF9mcmFtZSAqZnJhbWVzKTsKLXN0YXRpYyBpbnQgZHhfbWFrZV9tYXAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlLCBpbnQgc2l6ZSwKK3N0YXRpYyBpbnQgZHhfbWFrZV9tYXAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlLCB1bnNpZ25lZCBibG9ja3NpemUsCiAJCSAgICAgICBzdHJ1Y3QgZHhfaGFzaF9pbmZvICpoaW5mbywgc3RydWN0IGR4X21hcF9lbnRyeSBtYXBbXSk7CiBzdGF0aWMgdm9pZCBkeF9zb3J0X21hcChzdHJ1Y3QgZHhfbWFwX2VudHJ5ICptYXAsIHVuc2lnbmVkIGNvdW50KTsKIHN0YXRpYyBzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqZHhfbW92ZV9kaXJlbnRzKGNoYXIgKmZyb20sIGNoYXIgKnRvLAotCQlzdHJ1Y3QgZHhfbWFwX2VudHJ5ICpvZmZzZXRzLCBpbnQgY291bnQpOwotc3RhdGljIHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yKiBkeF9wYWNrX2RpcmVudHMoY2hhciAqYmFzZSwgaW50IHNpemUpOworCQlzdHJ1Y3QgZHhfbWFwX2VudHJ5ICpvZmZzZXRzLCBpbnQgY291bnQsIHVuc2lnbmVkIGJsb2Nrc2l6ZSk7CitzdGF0aWMgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIqIGR4X3BhY2tfZGlyZW50cyhjaGFyICpiYXNlLCB1bnNpZ25lZCBibG9ja3NpemUpOwogc3RhdGljIHZvaWQgZHhfaW5zZXJ0X2Jsb2NrKHN0cnVjdCBkeF9mcmFtZSAqZnJhbWUsCiAJCQkJCXUzMiBoYXNoLCBleHQ0X2xibGtfdCBibG9jayk7CiBzdGF0aWMgaW50IGV4dDRfaHRyZWVfbmV4dF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmRpciwgX191MzIgaGFzaCwKQEAgLTE4MCwxNCArMTgwLDM4IEBACiBzdGF0aWMgaW50IGV4dDRfZHhfYWRkX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSk7CiAKK3Vuc2lnbmVkIGludCBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKF9fbGUxNiBkbGVuLCB1bnNpZ25lZCBibG9ja3NpemUpCit7CisJdW5zaWduZWQgbGVuID0gbGUxNl90b19jcHUoZGxlbik7CisKKwlpZiAobGVuID09IEVYVDRfTUFYX1JFQ19MRU4gfHwgbGVuID09IDApCisJCXJldHVybiBibG9ja3NpemU7CisJcmV0dXJuIChsZW4gJiA2NTUzMikgfCAoKGxlbiAmIDMpIDw8IDE2KTsKK30KKyAgCitfX2xlMTYgZXh0NF9yZWNfbGVuX3RvX2Rpc2sodW5zaWduZWQgbGVuLCB1bnNpZ25lZCBibG9ja3NpemUpCit7CisJaWYgKChsZW4gPiBibG9ja3NpemUpIHx8IChibG9ja3NpemUgPiAoMSA8PCAxOCkpIHx8IChsZW4gJiAzKSkKKwkJQlVHKCk7CisJaWYgKGxlbiA8IDY1NTM2KQorCQlyZXR1cm4gY3B1X3RvX2xlMTYobGVuKTsKKwlpZiAobGVuID09IGJsb2Nrc2l6ZSkgeworCQlpZiAoYmxvY2tzaXplID09IDY1NTM2KQorCQkJcmV0dXJuIGNwdV90b19sZTE2KEVYVDRfTUFYX1JFQ19MRU4pOworCQllbHNlIAorCQkJcmV0dXJuIGNwdV90b19sZTE2KDApOworCX0KKwlyZXR1cm4gY3B1X3RvX2xlMTYoKGxlbiAmIDY1NTMyKSB8ICgobGVuID4+IDE2KSAmIDMpKTsKK30KKwogLyoKICAqIHAgaXMgYXQgbGVhc3QgNiBieXRlcyBiZWZvcmUgdGhlIGVuZCBvZiBwYWdlCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKgotZXh0NF9uZXh0X2VudHJ5KHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpwKQorZXh0NF9uZXh0X2VudHJ5KHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpwLCB1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZSkKIHsKIAlyZXR1cm4gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopKChjaGFyICopcCArCi0JCWV4dDRfcmVjX2xlbl9mcm9tX2Rpc2socC0+cmVjX2xlbikpOworCQlleHQ0X3JlY19sZW5fZnJvbV9kaXNrKHAtPnJlY19sZW4sIGJsb2Nrc2l6ZSkpOwogfQogCiAvKgpAQCAtMjk0LDcgKzMxOCw3IEBACiAJCQlzcGFjZSArPSBFWFQ0X0RJUl9SRUNfTEVOKGRlLT5uYW1lX2xlbik7CiAJCQluYW1lcysrOwogCQl9Ci0JCWRlID0gZXh0NF9uZXh0X2VudHJ5KGRlKTsKKwkJZGUgPSBleHQ0X25leHRfZW50cnkoZGUsIHNpemUpOwogCX0KIAlwcmludGsoIiglaSlcbiIsIG5hbWVzKTsKIAlyZXR1cm4gKHN0cnVjdCBzdGF0cykgeyBuYW1lcywgc3BhY2UsIDEgfTsKQEAgLTU4NSw3ICs2MDksNyBAQAogCXRvcCA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSAoKGNoYXIgKikgZGUgKwogCQkJCQkgICBkaXItPmlfc2ItPnNfYmxvY2tzaXplIC0KIAkJCQkJICAgRVhUNF9ESVJfUkVDX0xFTigwKSk7Ci0JZm9yICg7IGRlIDwgdG9wOyBkZSA9IGV4dDRfbmV4dF9lbnRyeShkZSkpIHsKKwlmb3IgKDsgZGUgPCB0b3A7IGRlID0gZXh0NF9uZXh0X2VudHJ5KGRlLCBkaXItPmlfc2ItPnNfYmxvY2tzaXplKSkgewogCQlpZiAoIWV4dDRfY2hlY2tfZGlyX2VudHJ5KCJodHJlZV9kaXJibG9ja190b190cmVlIiwgZGlyLCBkZSwgYmgsCiAJCQkJCShibG9jazw8RVhUNF9CTE9DS19TSVpFX0JJVFMoZGlyLT5pX3NiKSkKIAkJCQkJCSsoKGNoYXIgKilkZSAtIGJoLT5iX2RhdGEpKSkgewpAQCAtNjYzLDcgKzY4Nyw3IEBACiAJfQogCWlmIChzdGFydF9oYXNoIDwgMiB8fCAoc3RhcnRfaGFzaCA9PTIgJiYgc3RhcnRfbWlub3JfaGFzaD09MCkpIHsKIAkJZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgZnJhbWVzWzBdLmJoLT5iX2RhdGE7Ci0JCWRlID0gZXh0NF9uZXh0X2VudHJ5KGRlKTsKKwkJZGUgPSBleHQ0X25leHRfZW50cnkoZGUsIGRpci0+aV9zYi0+c19ibG9ja3NpemUpOwogCQlpZiAoKGVyciA9IGV4dDRfaHRyZWVfc3RvcmVfZGlyZW50KGRpcl9maWxlLCAyLCAwLCBkZSkpICE9IDApCiAJCQlnb3RvIGVycm91dDsKIAkJY291bnQrKzsKQEAgLTcxMywxNSArNzM3LDE1IEBACiAgKiBDcmVhdGUgbWFwIG9mIGhhc2ggdmFsdWVzLCBvZmZzZXRzLCBhbmQgc2l6ZXMsIHN0b3JlZCBhdCBlbmQgb2YgYmxvY2suCiAgKiBSZXR1cm5zIG51bWJlciBvZiBlbnRyaWVzIG1hcHBlZC4KICAqLwotc3RhdGljIGludCBkeF9tYWtlX21hcCAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlLCBpbnQgc2l6ZSwKLQkJCXN0cnVjdCBkeF9oYXNoX2luZm8gKmhpbmZvLCBzdHJ1Y3QgZHhfbWFwX2VudHJ5ICptYXBfdGFpbCkKK3N0YXRpYyBpbnQgZHhfbWFrZV9tYXAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlLCB1bnNpZ25lZCBibG9ja3NpemUsCisJCSAgICAgICBzdHJ1Y3QgZHhfaGFzaF9pbmZvICpoaW5mbywKKwkJICAgICAgIHN0cnVjdCBkeF9tYXBfZW50cnkgKm1hcF90YWlsKQogewogCWludCBjb3VudCA9IDA7CiAJY2hhciAqYmFzZSA9IChjaGFyICopIGRlOwogCXN0cnVjdCBkeF9oYXNoX2luZm8gaCA9ICpoaW5mbzsKIAotCXdoaWxlICgoY2hhciAqKSBkZSA8IGJhc2UgKyBzaXplKQotCXsKKwl3aGlsZSAoKGNoYXIgKikgZGUgPCBiYXNlICsgYmxvY2tzaXplKSB7CiAJCWlmIChkZS0+bmFtZV9sZW4gJiYgZGUtPmlub2RlKSB7CiAJCQlleHQ0ZnNfZGlyaGFzaChkZS0+bmFtZSwgZGUtPm5hbWVfbGVuLCAmaCk7CiAJCQltYXBfdGFpbC0tOwpAQCAtNzMyLDcgKzc1Niw3IEBACiAJCQljb25kX3Jlc2NoZWQoKTsKIAkJfQogCQkvKiBYWFg6IGRvIHdlIG5lZWQgdG8gY2hlY2sgcmVjX2xlbiA9PSAwIGNhc2U/IC1DaHJpcyAqLwotCQlkZSA9IGV4dDRfbmV4dF9lbnRyeShkZSk7CisJCWRlID0gZXh0NF9uZXh0X2VudHJ5KGRlLCBibG9ja3NpemUpOwogCX0KIAlyZXR1cm4gY291bnQ7CiB9CkBAIC04MzIsNyArODU2LDggQEAKIAkJCXJldHVybiAxOwogCQl9CiAJCS8qIHByZXZlbnQgbG9vcGluZyBvbiBhIGJhZCBibG9jayAqLwotCQlkZV9sZW4gPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuKTsKKwkJZGVfbGVuID0gZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbiwKKwkJCQkJCWRpci0+aV9zYi0+c19ibG9ja3NpemUpOwogCQlpZiAoZGVfbGVuIDw9IDApCiAJCQlyZXR1cm4gLTE7CiAJCW9mZnNldCArPSBkZV9sZW47CkBAIC05OTYsNyArMTAyMSw3IEBACiAJCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopIGJoLT5iX2RhdGE7CiAJCXRvcCA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSAoKGNoYXIgKikgZGUgKyBzYi0+c19ibG9ja3NpemUgLQogCQkJCSAgICAgICBFWFQ0X0RJUl9SRUNfTEVOKDApKTsKLQkJZm9yICg7IGRlIDwgdG9wOyBkZSA9IGV4dDRfbmV4dF9lbnRyeShkZSkpIHsKKwkJZm9yICg7IGRlIDwgdG9wOyBkZSA9IGV4dDRfbmV4dF9lbnRyeShkZSwgc2ItPnNfYmxvY2tzaXplKSkgewogCQkJaW50IG9mZiA9IChibG9jayA8PCBFWFQ0X0JMT0NLX1NJWkVfQklUUyhzYikpCiAJCQkJICArICgoY2hhciAqKSBkZSAtIGJoLT5iX2RhdGEpOwogCkBAIC0xMDUyLDggKzEwNzcsMTYgQEAKIAkJCXJldHVybiBFUlJfUFRSKC1FSU8pOwogCQl9CiAJCWlub2RlID0gZXh0NF9pZ2V0KGRpci0+aV9zYiwgaW5vKTsKLQkJaWYgKElTX0VSUihpbm9kZSkpCi0JCQlyZXR1cm4gRVJSX0NBU1QoaW5vZGUpOworCQlpZiAodW5saWtlbHkoSVNfRVJSKGlub2RlKSkpIHsKKwkJCWlmIChQVFJfRVJSKGlub2RlKSA9PSAtRVNUQUxFKSB7CisJCQkJZXh0NF9lcnJvcihkaXItPmlfc2IsIF9fZnVuY19fLAorCQkJCQkJImRlbGV0ZWQgaW5vZGUgcmVmZXJlbmNlZDogJXUiLAorCQkJCQkJaW5vKTsKKwkJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIEVSUl9DQVNUKGlub2RlKTsKKwkJCX0KKwkJfQogCX0KIAlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7CiB9CkBAIC0xMTA5LDcgKzExNDIsOCBAQAogICogUmV0dXJucyBwb2ludGVyIHRvIGxhc3QgZW50cnkgbW92ZWQuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqCi1keF9tb3ZlX2RpcmVudHMoY2hhciAqZnJvbSwgY2hhciAqdG8sIHN0cnVjdCBkeF9tYXBfZW50cnkgKm1hcCwgaW50IGNvdW50KQorZHhfbW92ZV9kaXJlbnRzKGNoYXIgKmZyb20sIGNoYXIgKnRvLCBzdHJ1Y3QgZHhfbWFwX2VudHJ5ICptYXAsIGludCBjb3VudCwKKwkJdW5zaWduZWQgYmxvY2tzaXplKQogewogCXVuc2lnbmVkIHJlY19sZW4gPSAwOwogCkBAIC0xMTE4LDcgKzExNTIsNyBAQAogCQlyZWNfbGVuID0gRVhUNF9ESVJfUkVDX0xFTihkZS0+bmFtZV9sZW4pOwogCQltZW1jcHkgKHRvLCBkZSwgcmVjX2xlbik7CiAJCSgoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgdG8pLT5yZWNfbGVuID0KLQkJCQlleHQ0X3JlY19sZW5fdG9fZGlzayhyZWNfbGVuKTsKKwkJCQlleHQ0X3JlY19sZW5fdG9fZGlzayhyZWNfbGVuLCBibG9ja3NpemUpOwogCQlkZS0+aW5vZGUgPSAwOwogCQltYXArKzsKIAkJdG8gKz0gcmVjX2xlbjsKQEAgLTExMzAsMTkgKzExNjQsMTkgQEAKICAqIENvbXBhY3QgZWFjaCBkaXIgZW50cnkgaW4gdGhlIHJhbmdlIHRvIHRoZSBtaW5pbWFsIHJlY19sZW4uCiAgKiBSZXR1cm5zIHBvaW50ZXIgdG8gbGFzdCBlbnRyeSBpbiByYW5nZS4KICAqLwotc3RhdGljIHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yKiBkeF9wYWNrX2RpcmVudHMoY2hhciAqYmFzZSwgaW50IHNpemUpCitzdGF0aWMgc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIqIGR4X3BhY2tfZGlyZW50cyhjaGFyICpiYXNlLCB1bnNpZ25lZCBibG9ja3NpemUpCiB7CiAJc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKm5leHQsICp0bywgKnByZXYsICpkZSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSBiYXNlOwogCXVuc2lnbmVkIHJlY19sZW4gPSAwOwogCiAJcHJldiA9IHRvID0gZGU7Ci0Jd2hpbGUgKChjaGFyKilkZSA8IGJhc2UgKyBzaXplKSB7Ci0JCW5leHQgPSBleHQ0X25leHRfZW50cnkoZGUpOworCXdoaWxlICgoY2hhciopZGUgPCBiYXNlICsgYmxvY2tzaXplKSB7CisJCW5leHQgPSBleHQ0X25leHRfZW50cnkoZGUsIGJsb2Nrc2l6ZSk7CiAJCWlmIChkZS0+aW5vZGUgJiYgZGUtPm5hbWVfbGVuKSB7CiAJCQlyZWNfbGVuID0gRVhUNF9ESVJfUkVDX0xFTihkZS0+bmFtZV9sZW4pOwogCQkJaWYgKGRlID4gdG8pCiAJCQkJbWVtbW92ZSh0bywgZGUsIHJlY19sZW4pOwotCQkJdG8tPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhyZWNfbGVuKTsKKwkJCXRvLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2socmVjX2xlbiwgYmxvY2tzaXplKTsKIAkJCXByZXYgPSB0bzsKIAkJCXRvID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopICgoKGNoYXIgKikgdG8pICsgcmVjX2xlbik7CiAJCX0KQEAgLTEyMTUsMTAgKzEyNDksMTIgQEAKIAkJCQkJaGFzaDIsIHNwbGl0LCBjb3VudC1zcGxpdCkpOwogCiAJLyogRmFuY3kgZGFuY2UgdG8gc3RheSB3aXRoaW4gdHdvIGJ1ZmZlcnMgKi8KLQlkZTIgPSBkeF9tb3ZlX2RpcmVudHMoZGF0YTEsIGRhdGEyLCBtYXAgKyBzcGxpdCwgY291bnQgLSBzcGxpdCk7CisJZGUyID0gZHhfbW92ZV9kaXJlbnRzKGRhdGExLCBkYXRhMiwgbWFwICsgc3BsaXQsIGNvdW50IC0gc3BsaXQsIGJsb2Nrc2l6ZSk7CiAJZGUgPSBkeF9wYWNrX2RpcmVudHMoZGF0YTEsIGJsb2Nrc2l6ZSk7Ci0JZGUtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhkYXRhMSArIGJsb2Nrc2l6ZSAtIChjaGFyICopIGRlKTsKLQlkZTItPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhkYXRhMiArIGJsb2Nrc2l6ZSAtIChjaGFyICopIGRlMik7CisJZGUtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhkYXRhMSArIGJsb2Nrc2l6ZSAtIChjaGFyICopIGRlLAorCQkJCQkgICBibG9ja3NpemUpOworCWRlMi0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGRhdGEyICsgYmxvY2tzaXplIC0gKGNoYXIgKikgZGUyLAorCQkJCQkgICAgYmxvY2tzaXplKTsKIAlkeHRyYWNlKGR4X3Nob3dfbGVhZiAoaGluZm8sIChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSBkYXRhMSwgYmxvY2tzaXplLCAxKSk7CiAJZHh0cmFjZShkeF9zaG93X2xlYWYgKGhpbmZvLCAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgZGF0YTIsIGJsb2Nrc2l6ZSwgMSkpOwogCkBAIC0xMjY4LDYgKzEzMDQsNyBAQAogCWNvbnN0IGNoYXIJKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOwogCWludAkJbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKIAl1bnNpZ25lZCBpbnQJb2Zmc2V0ID0gMDsKKwl1bnNpZ25lZCBpbnQJYmxvY2tzaXplID0gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKIAl1bnNpZ25lZCBzaG9ydAlyZWNsZW47CiAJaW50CQlubGVuLCBybGVuLCBlcnI7CiAJY2hhcgkJKnRvcDsKQEAgLTEyNzUsNyArMTMxMiw3IEBACiAJcmVjbGVuID0gRVhUNF9ESVJfUkVDX0xFTihuYW1lbGVuKTsKIAlpZiAoIWRlKSB7CiAJCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopYmgtPmJfZGF0YTsKLQkJdG9wID0gYmgtPmJfZGF0YSArIGRpci0+aV9zYi0+c19ibG9ja3NpemUgLSByZWNsZW47CisJCXRvcCA9IGJoLT5iX2RhdGEgKyBibG9ja3NpemUgLSByZWNsZW47CiAJCXdoaWxlICgoY2hhciAqKSBkZSA8PSB0b3ApIHsKIAkJCWlmICghZXh0NF9jaGVja19kaXJfZW50cnkoImV4dDRfYWRkX2VudHJ5IiwgZGlyLCBkZSwKIAkJCQkJCSAgYmgsIG9mZnNldCkpIHsKQEAgLTEyODcsNyArMTMyNCw3IEBACiAJCQkJcmV0dXJuIC1FRVhJU1Q7CiAJCQl9CiAJCQlubGVuID0gRVhUNF9ESVJfUkVDX0xFTihkZS0+bmFtZV9sZW4pOwotCQkJcmxlbiA9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4pOworCQkJcmxlbiA9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4sIGJsb2Nrc2l6ZSk7CiAJCQlpZiAoKGRlLT5pbm9kZT8gcmxlbiAtIG5sZW46IHJsZW4pID49IHJlY2xlbikKIAkJCQlicmVhazsKIAkJCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopKChjaGFyICopZGUgKyBybGVuKTsKQEAgLTEzMDYsMTEgKzEzNDMsMTEgQEAKIAogCS8qIEJ5IG5vdyB0aGUgYnVmZmVyIGlzIG1hcmtlZCBmb3Igam91cm5hbGluZyAqLwogCW5sZW4gPSBFWFQ0X0RJUl9SRUNfTEVOKGRlLT5uYW1lX2xlbik7Ci0JcmxlbiA9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4pOworCXJsZW4gPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuLCBibG9ja3NpemUpOwogCWlmIChkZS0+aW5vZGUpIHsKIAkJc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlMSA9IChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKSgoY2hhciAqKWRlICsgbmxlbik7Ci0JCWRlMS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKHJsZW4gLSBubGVuKTsKLQkJZGUtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhubGVuKTsKKwkJZGUxLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2socmxlbiAtIG5sZW4sIGJsb2Nrc2l6ZSk7CisJCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2sobmxlbiwgYmxvY2tzaXplKTsKIAkJZGUgPSBkZTE7CiAJfQogCWRlLT5maWxlX3R5cGUgPSBFWFQ0X0ZUX1VOS05PV047CkBAIC0xMzgwLDcgKzE0MTcsNyBAQAogCS8qIFRoZSAwdGggYmxvY2sgYmVjb21lcyB0aGUgcm9vdCwgbW92ZSB0aGUgZGlyZW50cyBvdXQgKi8KIAlmZGUgPSAmcm9vdC0+ZG90ZG90OwogCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopKChjaGFyICopZmRlICsKLQkJZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhmZGUtPnJlY19sZW4pKTsKKwkJZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhmZGUtPnJlY19sZW4sIGJsb2Nrc2l6ZSkpOwogCWlmICgoY2hhciAqKSBkZSA+PSAoKChjaGFyICopIHJvb3QpICsgYmxvY2tzaXplKSkgewogCQlleHQ0X2Vycm9yKGRpci0+aV9zYiwgX19mdW5jX18sCiAJCQkgICAiaW52YWxpZCByZWNfbGVuIGZvciAnLi4nIGluIGlub2RlICVsdSIsCkBAIC0xNDAyLDEyICsxNDM5LDE0IEBACiAJbWVtY3B5IChkYXRhMSwgZGUsIGxlbik7CiAJZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgZGF0YTE7CiAJdG9wID0gZGF0YTEgKyBsZW47Ci0Jd2hpbGUgKChjaGFyICopKGRlMiA9IGV4dDRfbmV4dF9lbnRyeShkZSkpIDwgdG9wKQorCXdoaWxlICgoY2hhciAqKShkZTIgPSBleHQ0X25leHRfZW50cnkoZGUsIGJsb2Nrc2l6ZSkpIDwgdG9wKQogCQlkZSA9IGRlMjsKLQlkZS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGRhdGExICsgYmxvY2tzaXplIC0gKGNoYXIgKikgZGUpOworCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soZGF0YTEgKyBibG9ja3NpemUgLSAoY2hhciAqKSBkZSwKKwkJCQkJICAgYmxvY2tzaXplKTsKIAkvKiBJbml0aWFsaXplIHRoZSByb290OyB0aGUgZG90IGRpcmVudHMgYWxyZWFkeSBleGlzdCAqLwogCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopICgmcm9vdC0+ZG90ZG90KTsKLQlkZS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGJsb2Nrc2l6ZSAtIEVYVDRfRElSX1JFQ19MRU4oMikpOworCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soYmxvY2tzaXplIC0gRVhUNF9ESVJfUkVDX0xFTigyKSwKKwkJCQkJICAgYmxvY2tzaXplKTsKIAltZW1zZXQgKCZyb290LT5pbmZvLCAwLCBzaXplb2Yocm9vdC0+aW5mbykpOwogCXJvb3QtPmluZm8uaW5mb19sZW5ndGggPSBzaXplb2Yocm9vdC0+aW5mbyk7CiAJcm9vdC0+aW5mby5oYXNoX3ZlcnNpb24gPSBFWFQ0X1NCKGRpci0+aV9zYiktPnNfZGVmX2hhc2hfdmVyc2lvbjsKQEAgLTE0ODgsNyArMTUyNyw3IEBACiAJCXJldHVybiByZXR2YWw7CiAJZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgYmgtPmJfZGF0YTsKIAlkZS0+aW5vZGUgPSAwOwotCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soYmxvY2tzaXplKTsKKwlkZS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKGJsb2Nrc2l6ZSwgYmxvY2tzaXplKTsKIAlyZXR1cm4gYWRkX2RpcmVudF90b19idWYoaGFuZGxlLCBkZW50cnksIGlub2RlLCBkZSwgYmgpOwogfQogCkBAIC0xNTUxLDcgKzE1OTAsOCBAQAogCQkJZ290byBjbGVhbnVwOwogCQlub2RlMiA9IChzdHJ1Y3QgZHhfbm9kZSAqKShiaDItPmJfZGF0YSk7CiAJCWVudHJpZXMyID0gbm9kZTItPmVudHJpZXM7Ci0JCW5vZGUyLT5mYWtlLnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhzYi0+c19ibG9ja3NpemUpOworCQlub2RlMi0+ZmFrZS5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soc2ItPnNfYmxvY2tzaXplLAorCQkJCQkJCSAgIHNiLT5zX2Jsb2Nrc2l6ZSk7CiAJCW5vZGUyLT5mYWtlLmlub2RlID0gMDsKIAkJQlVGRkVSX1RSQUNFKGZyYW1lLT5iaCwgImdldF93cml0ZV9hY2Nlc3MiKTsKIAkJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBmcmFtZS0+YmgpOwpAQCAtMTYzOSw2ICsxNjc5LDcgQEAKIAkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKIAlzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqZGUsICpwZGU7CisJdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IGRpci0+aV9zYi0+c19ibG9ja3NpemU7CiAJaW50IGk7CiAKIAlpID0gMDsKQEAgLTE2NTIsOCArMTY5MywxMSBAQAogCQkJZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaCk7CiAJCQlpZiAocGRlKQogCQkJCXBkZS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKAotCQkJCQlleHQ0X3JlY19sZW5fZnJvbV9kaXNrKHBkZS0+cmVjX2xlbikgKwotCQkJCQlleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuKSk7CisJCQkJCWV4dDRfcmVjX2xlbl9mcm9tX2Rpc2socGRlLT5yZWNfbGVuLAorCQkJCQkJCSAgICAgICBibG9ja3NpemUpICsKKwkJCQkJZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZS0+cmVjX2xlbiwKKwkJCQkJCQkgICAgICAgYmxvY2tzaXplKSwKKwkJCQkJYmxvY2tzaXplKTsKIAkJCWVsc2UKIAkJCQlkZS0+aW5vZGUgPSAwOwogCQkJZGlyLT5pX3ZlcnNpb24rKzsKQEAgLTE2NjEsOSArMTcwNSw5IEBACiAJCQlleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGRpciwgYmgpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJaSArPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuKTsKKwkJaSArPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuLCBibG9ja3NpemUpOwogCQlwZGUgPSBkZTsKLQkJZGUgPSBleHQ0X25leHRfZW50cnkoZGUpOworCQlkZSA9IGV4dDRfbmV4dF9lbnRyeShkZSwgYmxvY2tzaXplKTsKIAl9CiAJcmV0dXJuIC1FTk9FTlQ7CiB9CkBAIC0xNzkzLDYgKzE4MzcsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmxvY2s7CiAJc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlOworCXVuc2lnbmVkIGludCBibG9ja3NpemUgPSBkaXItPmlfc2ItPnNfYmxvY2tzaXplOwogCWludCBlcnIsIHJldHJpZXMgPSAwOwogCiAJaWYgKEVYVDRfRElSX0xJTktfTUFYKGRpcikpCkBAIC0xODI0LDEzICsxODY5LDE0IEBACiAJZGUgPSAoc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKikgZGlyX2Jsb2NrLT5iX2RhdGE7CiAJZGUtPmlub2RlID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfaW5vKTsKIAlkZS0+bmFtZV9sZW4gPSAxOwotCWRlLT5yZWNfbGVuID0gZXh0NF9yZWNfbGVuX3RvX2Rpc2soRVhUNF9ESVJfUkVDX0xFTihkZS0+bmFtZV9sZW4pKTsKKwlkZS0+cmVjX2xlbiA9IGV4dDRfcmVjX2xlbl90b19kaXNrKEVYVDRfRElSX1JFQ19MRU4oZGUtPm5hbWVfbGVuKSwKKwkJCQkJICAgYmxvY2tzaXplKTsKIAlzdHJjcHkoZGUtPm5hbWUsICIuIik7CiAJZXh0NF9zZXRfZGVfdHlwZShkaXItPmlfc2IsIGRlLCBTX0lGRElSKTsKLQlkZSA9IGV4dDRfbmV4dF9lbnRyeShkZSk7CisJZGUgPSBleHQ0X25leHRfZW50cnkoZGUsIGJsb2Nrc2l6ZSk7CiAJZGUtPmlub2RlID0gY3B1X3RvX2xlMzIoZGlyLT5pX2lubyk7Ci0JZGUtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLQotCQkJCQkJRVhUNF9ESVJfUkVDX0xFTigxKSk7CisJZGUtPnJlY19sZW4gPSBleHQ0X3JlY19sZW5fdG9fZGlzayhibG9ja3NpemUgLSBFWFQ0X0RJUl9SRUNfTEVOKDEpLAorCQkJCQkgICBibG9ja3NpemUpOwogCWRlLT5uYW1lX2xlbiA9IDI7CiAJc3RyY3B5KGRlLT5uYW1lLCAiLi4iKTsKIAlleHQ0X3NldF9kZV90eXBlKGRpci0+aV9zYiwgZGUsIFNfSUZESVIpOwpAQCAtMTg4NSw3ICsxOTMxLDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopIGJoLT5iX2RhdGE7Ci0JZGUxID0gZXh0NF9uZXh0X2VudHJ5KGRlKTsKKwlkZTEgPSBleHQ0X25leHRfZW50cnkoZGUsIHNiLT5zX2Jsb2Nrc2l6ZSk7CiAJaWYgKGxlMzJfdG9fY3B1KGRlLT5pbm9kZSkgIT0gaW5vZGUtPmlfaW5vIHx8CiAJCQkhbGUzMl90b19jcHUoZGUxLT5pbm9kZSkgfHwKIAkJCXN0cmNtcCgiLiIsIGRlLT5uYW1lKSB8fApAQCAtMTg5Niw5ICsxOTQyLDkgQEAKIAkJYnJlbHNlKGJoKTsKIAkJcmV0dXJuIDE7CiAJfQotCW9mZnNldCA9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4pICsKLQkJIGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUxLT5yZWNfbGVuKTsKLQlkZSA9IGV4dDRfbmV4dF9lbnRyeShkZTEpOworCW9mZnNldCA9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4sIHNiLT5zX2Jsb2Nrc2l6ZSkgKworCQkgZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhkZTEtPnJlY19sZW4sIHNiLT5zX2Jsb2Nrc2l6ZSk7CisJZGUgPSBleHQ0X25leHRfZW50cnkoZGUxLCBzYi0+c19ibG9ja3NpemUpOwogCXdoaWxlIChvZmZzZXQgPCBpbm9kZS0+aV9zaXplKSB7CiAJCWlmICghYmggfHwKIAkJCSh2b2lkICopIGRlID49ICh2b2lkICopIChiaC0+Yl9kYXRhK3NiLT5zX2Jsb2Nrc2l6ZSkpIHsKQEAgLTE5MjcsOCArMTk3Myw4IEBACiAJCQlicmVsc2UoYmgpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJb2Zmc2V0ICs9IGV4dDRfcmVjX2xlbl9mcm9tX2Rpc2soZGUtPnJlY19sZW4pOwotCQlkZSA9IGV4dDRfbmV4dF9lbnRyeShkZSk7CisJCW9mZnNldCArPSBleHQ0X3JlY19sZW5fZnJvbV9kaXNrKGRlLT5yZWNfbGVuLCBzYi0+c19ibG9ja3NpemUpOworCQlkZSA9IGV4dDRfbmV4dF9lbnRyeShkZSwgc2ItPnNfYmxvY2tzaXplKTsKIAl9CiAJYnJlbHNlKGJoKTsKIAlyZXR1cm4gMTsKQEAgLTIyOTcsOCArMjM0Myw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2RlZmluZSBQQVJFTlRfSU5PKGJ1ZmZlcikgXAotCShleHQ0X25leHRfZW50cnkoKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopKGJ1ZmZlcikpLT5pbm9kZSkKKyNkZWZpbmUgUEFSRU5UX0lOTyhidWZmZXIsIHNpemUpIFwKKwkoZXh0NF9uZXh0X2VudHJ5KChzdHJ1Y3QgZXh0NF9kaXJfZW50cnlfMiAqKShidWZmZXIpLCBzaXplKS0+aW5vZGUpCiAKIC8qCiAgKiBBbnlib2R5IGNhbiByZW5hbWUgYW55dGhpbmcgd2l0aCB0aGlzOiB0aGUgcGVybWlzc2lvbiBjaGVja3MgYXJlIGxlZnQgdG8gdGhlCkBAIC0yMzExLDcgKzIzNTcsNyBAQAogCXN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLCAqbmV3X2lub2RlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLCAqbmV3X2JoLCAqZGlyX2JoOwogCXN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpvbGRfZGUsICpuZXdfZGU7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0dmFsLCBmb3JjZV9kYV9hbGxvYyA9IDA7CiAKIAlvbGRfYmggPSBuZXdfYmggPSBkaXJfYmggPSBOVUxMOwogCkBAIC0yMzU4LDcgKzI0MDQsOCBAQAogCQlkaXJfYmggPSBleHQ0X2JyZWFkKGhhbmRsZSwgb2xkX2lub2RlLCAwLCAwLCAmcmV0dmFsKTsKIAkJaWYgKCFkaXJfYmgpCiAJCQlnb3RvIGVuZF9yZW5hbWU7Ci0JCWlmIChsZTMyX3RvX2NwdShQQVJFTlRfSU5PKGRpcl9iaC0+Yl9kYXRhKSkgIT0gb2xkX2Rpci0+aV9pbm8pCisJCWlmIChsZTMyX3RvX2NwdShQQVJFTlRfSU5PKGRpcl9iaC0+Yl9kYXRhLAorCQkJCW9sZF9kaXItPmlfc2ItPnNfYmxvY2tzaXplKSkgIT0gb2xkX2Rpci0+aV9pbm8pCiAJCQlnb3RvIGVuZF9yZW5hbWU7CiAJCXJldHZhbCA9IC1FTUxJTks7CiAJCWlmICghbmV3X2lub2RlICYmIG5ld19kaXIgIT0gb2xkX2RpciAmJgpAQCAtMjQzMCw3ICsyNDc3LDggQEAKIAlpZiAoZGlyX2JoKSB7CiAJCUJVRkZFUl9UUkFDRShkaXJfYmgsICJnZXRfd3JpdGVfYWNjZXNzIik7CiAJCWV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgZGlyX2JoKTsKLQkJUEFSRU5UX0lOTyhkaXJfYmgtPmJfZGF0YSkgPSBjcHVfdG9fbGUzMihuZXdfZGlyLT5pX2lubyk7CisJCVBBUkVOVF9JTk8oZGlyX2JoLT5iX2RhdGEsIG5ld19kaXItPmlfc2ItPnNfYmxvY2tzaXplKSA9CisJCQkJCQljcHVfdG9fbGUzMihuZXdfZGlyLT5pX2lubyk7CiAJCUJVRkZFUl9UUkFDRShkaXJfYmgsICJjYWxsIGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhIik7CiAJCWV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgb2xkX2RpciwgZGlyX2JoKTsKIAkJZXh0NF9kZWNfY291bnQoaGFuZGxlLCBvbGRfZGlyKTsKQEAgLTI0NDksNiArMjQ5Nyw4IEBACiAJCWV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIG5ld19pbm9kZSk7CiAJCWlmICghbmV3X2lub2RlLT5pX25saW5rKQogCQkJZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgbmV3X2lub2RlKTsKKwkJaWYgKCF0ZXN0X29wdChuZXdfZGlyLT5pX3NiLCBOT19BVVRPX0RBX0FMTE9DKSkKKwkJCWZvcmNlX2RhX2FsbG9jID0gMTsKIAl9CiAJcmV0dmFsID0gMDsKIApAQCAtMjQ1Nyw2ICsyNTA3LDggQEAKIAlicmVsc2Uob2xkX2JoKTsKIAlicmVsc2UobmV3X2JoKTsKIAlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOworCWlmIChyZXR2YWwgPT0gMCAmJiBmb3JjZV9kYV9hbGxvYykKKwkJZXh0NF9hbGxvY19kYV9ibG9ja3Mob2xkX2lub2RlKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuYwppbmRleCBjMDY4ODZhLi41NDZjN2RkIDEwMDY0NAotLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDQvcmVzaXplLmMKQEAgLTkzOCwxMCArOTM4LDEwIEBACiAJaWYgKEVYVDRfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKSkgewogCQlleHQ0X2dyb3VwX3QgZmxleF9ncm91cDsKIAkJZmxleF9ncm91cCA9IGV4dDRfZmxleF9ncm91cChzYmksIGlucHV0LT5ncm91cCk7Ci0JCXNiaS0+c19mbGV4X2dyb3Vwc1tmbGV4X2dyb3VwXS5mcmVlX2Jsb2NrcyArPQotCQkJaW5wdXQtPmZyZWVfYmxvY2tzX2NvdW50OwotCQlzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0uZnJlZV9pbm9kZXMgKz0KLQkJCUVYVDRfSU5PREVTX1BFUl9HUk9VUChzYik7CisJCWF0b21pY19hZGQoaW5wdXQtPmZyZWVfYmxvY2tzX2NvdW50LAorCQkJICAgJnNiaS0+c19mbGV4X2dyb3Vwc1tmbGV4X2dyb3VwXS5mcmVlX2Jsb2Nrcyk7CisJCWF0b21pY19hZGQoRVhUNF9JTk9ERVNfUEVSX0dST1VQKHNiKSwKKwkJCSAgICZzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0uZnJlZV9pbm9kZXMpOwogCX0KIAogCWV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgTlVMTCwgc2JpLT5zX3NiaCk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmMKaW5kZXggZjczNzFhNi4uOTk4N2JiYSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCisrKyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9tYXJrZXIuaD4KICNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMTYuaD4KQEAgLTQ4LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJncm91cC5oIgogCiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmV4dDRfcHJvY19yb290Oworc3RhdGljIHN0cnVjdCBrc2V0ICpleHQ0X2tzZXQ7CiAKIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICosCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgam91cm5hbF9kZXZudW0pOwpAQCAtNTc3LDkgKzU3OSw5IEBACiAJCWV4dDRfY29tbWl0X3N1cGVyKHNiLCBlcywgMSk7CiAJfQogCWlmIChzYmktPnNfcHJvYykgewotCQlyZW1vdmVfcHJvY19lbnRyeSgiaW5vZGVfcmVhZGFoZWFkX2Jsa3MiLCBzYmktPnNfcHJvYyk7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KHNiLT5zX2lkLCBleHQ0X3Byb2Nfcm9vdCk7CiAJfQorCWtvYmplY3RfZGVsKCZzYmktPnNfa29iaik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2JpLT5zX2dkYl9jb3VudDsgaSsrKQogCQlicmVsc2Uoc2JpLT5zX2dyb3VwX2Rlc2NbaV0pOwpAQCAtNjE1LDYgKzYxNywxNyBAQAogCQlleHQ0X2Jsa2Rldl9yZW1vdmUoc2JpKTsKIAl9CiAJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBhcmUgY29tcGxldGVseSBkb25lIHNodXR0aW5nIGRvd24gdGhlCisJICogc3VwZXJibG9jaywgd2UgbmVlZCB0byBhY3R1YWxseSBkZXN0cm95IHRoZSBrb2JqZWN0LgorCSAqLworCXVubG9ja19rZXJuZWwoKTsKKwl1bmxvY2tfc3VwZXIoc2IpOworCWtvYmplY3RfcHV0KCZzYmktPnNfa29iaik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmc2JpLT5zX2tvYmpfdW5yZWdpc3Rlcik7CisJbG9ja19zdXBlcihzYik7CisJbG9ja19rZXJuZWwoKTsKKwlrZnJlZShzYmktPnNfYmxvY2tncm91cF9sb2NrKTsKIAlrZnJlZShzYmkpOwogCXJldHVybjsKIH0KQEAgLTgwMyw4ICs4MTYsNiBAQAogCWlmICghdGVzdF9vcHQoc2IsIFBPU0lYX0FDTCkgJiYgKGRlZl9tb3VudF9vcHRzICYgRVhUNF9ERUZNX0FDTCkpCiAJCXNlcV9wdXRzKHNlcSwgIixub2FjbCIpOwogI2VuZGlmCi0JaWYgKCF0ZXN0X29wdChzYiwgUkVTRVJWQVRJT04pKQotCQlzZXFfcHV0cyhzZXEsICIsbm9yZXNlcnZhdGlvbiIpOwogCWlmIChzYmktPnNfY29tbWl0X2ludGVydmFsICE9IEpCRDJfREVGQVVMVF9NQVhfQ09NTUlUX0FHRSpIWikgewogCQlzZXFfcHJpbnRmKHNlcSwgIixjb21taXQ9JXUiLAogCQkJICAgKHVuc2lnbmVkKSAoc2JpLT5zX2NvbW1pdF9pbnRlcnZhbCAvIEhaKSk7CkBAIC04NTUsNiArODY2LDkgQEAKIAlpZiAodGVzdF9vcHQoc2IsIERBVEFfRVJSX0FCT1JUKSkKIAkJc2VxX3B1dHMoc2VxLCAiLGRhdGFfZXJyPWFib3J0Iik7CiAKKwlpZiAodGVzdF9vcHQoc2IsIE5PX0FVVE9fREFfQUxMT0MpKQorCQlzZXFfcHV0cyhzZXEsICIsbm9hdXRvX2RhX2FsbG9jIik7CisKIAlleHQ0X3Nob3dfcXVvdGFfb3B0aW9ucyhzZXEsIHNiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMDQsNyArMTAxOCw3IEBACiAJT3B0X3Jlc2dpZCwgT3B0X3Jlc3VpZCwgT3B0X3NiLCBPcHRfZXJyX2NvbnQsIE9wdF9lcnJfcGFuaWMsIE9wdF9lcnJfcm8sCiAJT3B0X25vdWlkMzIsIE9wdF9kZWJ1ZywgT3B0X29sZGFsbG9jLCBPcHRfb3Jsb3YsCiAJT3B0X3VzZXJfeGF0dHIsIE9wdF9ub3VzZXJfeGF0dHIsIE9wdF9hY2wsIE9wdF9ub2FjbCwKLQlPcHRfcmVzZXJ2YXRpb24sIE9wdF9ub3Jlc2VydmF0aW9uLCBPcHRfbm9sb2FkLCBPcHRfbm9iaCwgT3B0X2JoLAorCU9wdF9hdXRvX2RhX2FsbG9jLCBPcHRfbm9hdXRvX2RhX2FsbG9jLCBPcHRfbm9sb2FkLCBPcHRfbm9iaCwgT3B0X2JoLAogCU9wdF9jb21taXQsIE9wdF9taW5fYmF0Y2hfdGltZSwgT3B0X21heF9iYXRjaF90aW1lLAogCU9wdF9qb3VybmFsX3VwZGF0ZSwgT3B0X2pvdXJuYWxfZGV2LAogCU9wdF9qb3VybmFsX2NoZWNrc3VtLCBPcHRfam91cm5hbF9hc3luY19jb21taXQsCkBAIC0xMDEyLDggKzEwMjYsOCBAQAogCU9wdF9kYXRhX2Vycl9hYm9ydCwgT3B0X2RhdGFfZXJyX2lnbm9yZSwKIAlPcHRfdXNyanF1b3RhLCBPcHRfZ3JwanF1b3RhLCBPcHRfb2ZmdXNyanF1b3RhLCBPcHRfb2ZmZ3JwanF1b3RhLAogCU9wdF9qcWZtdF92ZnNvbGQsIE9wdF9qcWZtdF92ZnN2MCwgT3B0X3F1b3RhLCBPcHRfbm9xdW90YSwKLQlPcHRfaWdub3JlLCBPcHRfYmFycmllciwgT3B0X2VyciwgT3B0X3Jlc2l6ZSwgT3B0X3VzcnF1b3RhLAotCU9wdF9ncnBxdW90YSwgT3B0X2lfdmVyc2lvbiwKKwlPcHRfaWdub3JlLCBPcHRfYmFycmllciwgT3B0X25vYmFycmllciwgT3B0X2VyciwgT3B0X3Jlc2l6ZSwKKwlPcHRfdXNycXVvdGEsIE9wdF9ncnBxdW90YSwgT3B0X2lfdmVyc2lvbiwKIAlPcHRfc3RyaXBlLCBPcHRfZGVsYWxsb2MsIE9wdF9ub2RlbGFsbG9jLAogCU9wdF9pbm9kZV9yZWFkYWhlYWRfYmxrcywgT3B0X2pvdXJuYWxfaW9wcmlvCiB9OwpAQCAtMTAzOSw4ICsxMDUzLDYgQEAKIAl7T3B0X25vdXNlcl94YXR0ciwgIm5vdXNlcl94YXR0ciJ9LAogCXtPcHRfYWNsLCAiYWNsIn0sCiAJe09wdF9ub2FjbCwgIm5vYWNsIn0sCi0Je09wdF9yZXNlcnZhdGlvbiwgInJlc2VydmF0aW9uIn0sCi0Je09wdF9ub3Jlc2VydmF0aW9uLCAibm9yZXNlcnZhdGlvbiJ9LAogCXtPcHRfbm9sb2FkLCAibm9sb2FkIn0sCiAJe09wdF9ub2JoLCAibm9iaCJ9LAogCXtPcHRfYmgsICJiaCJ9LApAQCAtMTA2OCw2ICsxMDgwLDggQEAKIAl7T3B0X3F1b3RhLCAicXVvdGEifSwKIAl7T3B0X3VzcnF1b3RhLCAidXNycXVvdGEifSwKIAl7T3B0X2JhcnJpZXIsICJiYXJyaWVyPSV1In0sCisJe09wdF9iYXJyaWVyLCAiYmFycmllciJ9LAorCXtPcHRfbm9iYXJyaWVyLCAibm9iYXJyaWVyIn0sCiAJe09wdF9pX3ZlcnNpb24sICJpX3ZlcnNpb24ifSwKIAl7T3B0X3N0cmlwZSwgInN0cmlwZT0ldSJ9LAogCXtPcHRfcmVzaXplLCAicmVzaXplIn0sCkBAIC0xMDc1LDYgKzEwODksOSBAQAogCXtPcHRfbm9kZWxhbGxvYywgIm5vZGVsYWxsb2MifSwKIAl7T3B0X2lub2RlX3JlYWRhaGVhZF9ibGtzLCAiaW5vZGVfcmVhZGFoZWFkX2Jsa3M9JXUifSwKIAl7T3B0X2pvdXJuYWxfaW9wcmlvLCAiam91cm5hbF9pb3ByaW89JXUifSwKKwl7T3B0X2F1dG9fZGFfYWxsb2MsICJhdXRvX2RhX2FsbG9jPSV1In0sCisJe09wdF9hdXRvX2RhX2FsbG9jLCAiYXV0b19kYV9hbGxvYyJ9LAorCXtPcHRfbm9hdXRvX2RhX2FsbG9jLCAibm9hdXRvX2RhX2FsbG9jIn0sCiAJe09wdF9lcnIsIE5VTEx9LAogfTsKIApAQCAtMTIwNywxMiArMTIyNCw2IEBACiAJCQkgICAgICAgIm5vdCBzdXBwb3J0ZWRcbiIpOwogCQkJYnJlYWs7CiAjZW5kaWYKLQkJY2FzZSBPcHRfcmVzZXJ2YXRpb246Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIFJFU0VSVkFUSU9OKTsKLQkJCWJyZWFrOwotCQljYXNlIE9wdF9ub3Jlc2VydmF0aW9uOgotCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIFJFU0VSVkFUSU9OKTsKLQkJCWJyZWFrOwogCQljYXNlIE9wdF9qb3VybmFsX3VwZGF0ZToKIAkJCS8qIEBAQCBGSVhNRSAqLwogCQkJLyogRXZlbnR1YWxseSB3ZSB3aWxsIHdhbnQgdG8gYmUgYWJsZSB0byBjcmVhdGUKQEAgLTE0MTUsOSArMTQyNiwxNCBAQAogCQljYXNlIE9wdF9hYm9ydDoKIAkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgQUJPUlQpOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vYmFycmllcjoKKwkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBCQVJSSUVSKTsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9iYXJyaWVyOgotCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCi0JCQkJcmV0dXJuIDA7CisJCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkgeworCQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgQkFSUklFUik7CisJCQkJYnJlYWs7CisJCQl9CiAJCQlpZiAob3B0aW9uKQogCQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgQkFSUklFUik7CiAJCQllbHNlCkBAIC0xNDYzLDYgKzE0NzksMTEgQEAKIAkJCQlyZXR1cm4gMDsKIAkJCWlmIChvcHRpb24gPCAwIHx8IG9wdGlvbiA+ICgxIDw8IDMwKSkKIAkJCQlyZXR1cm4gMDsKKwkJCWlmIChvcHRpb24gJiAob3B0aW9uIC0gMSkpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIkVYVDQtZnM6IGlub2RlX3JlYWRhaGVhZF9ibGtzIgorCQkJCSAgICAgICAiIG11c3QgYmUgYSBwb3dlciBvZiAyXG4iKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KIAkJCXNiaS0+c19pbm9kZV9yZWFkYWhlYWRfYmxrcyA9IG9wdGlvbjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9qb3VybmFsX2lvcHJpbzoKQEAgLTE0NzMsNiArMTQ5NCwxOSBAQAogCQkJKmpvdXJuYWxfaW9wcmlvID0gSU9QUklPX1BSSU9fVkFMVUUoSU9QUklPX0NMQVNTX0JFLAogCQkJCQkJCSAgICBvcHRpb24pOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X25vYXV0b19kYV9hbGxvYzoKKwkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCxOT19BVVRPX0RBX0FMTE9DKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9hdXRvX2RhX2FsbG9jOgorCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpIHsKKwkJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgTk9fQVVUT19EQV9BTExPQyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAob3B0aW9uKQorCQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBOT19BVVRPX0RBX0FMTE9DKTsKKwkJCWVsc2UKKwkJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsTk9fQVVUT19EQV9BTExPQyk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICJFWFQ0LWZzOiBVbnJlY29nbml6ZWQgbW91bnQgb3B0aW9uIFwiJXNcIiAiCkBAIC0xNjEyLDEwICsxNjQ2LDEyIEBACiAJCWdkcCA9IGV4dDRfZ2V0X2dyb3VwX2Rlc2Moc2IsIGksICZiaCk7CiAKIAkJZmxleF9ncm91cCA9IGV4dDRfZmxleF9ncm91cChzYmksIGkpOwotCQlzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0uZnJlZV9pbm9kZXMgKz0KLQkJCWV4dDRfZnJlZV9pbm9kZXNfY291bnQoc2IsIGdkcCk7Ci0JCXNiaS0+c19mbGV4X2dyb3Vwc1tmbGV4X2dyb3VwXS5mcmVlX2Jsb2NrcyArPQotCQkJZXh0NF9mcmVlX2Jsa3NfY291bnQoc2IsIGdkcCk7CisJCWF0b21pY19zZXQoJnNiaS0+c19mbGV4X2dyb3Vwc1tmbGV4X2dyb3VwXS5mcmVlX2lub2RlcywKKwkJCSAgIGV4dDRfZnJlZV9pbm9kZXNfY291bnQoc2IsIGdkcCkpOworCQlhdG9taWNfc2V0KCZzYmktPnNfZmxleF9ncm91cHNbZmxleF9ncm91cF0uZnJlZV9ibG9ja3MsCisJCQkgICBleHQ0X2ZyZWVfYmxrc19jb3VudChzYiwgZ2RwKSk7CisJCWF0b21pY19zZXQoJnNiaS0+c19mbGV4X2dyb3Vwc1tmbGV4X2dyb3VwXS51c2VkX2RpcnMsCisJCQkgICBleHQ0X3VzZWRfZGlyc19jb3VudChzYiwgZ2RwKSk7CiAJfQogCiAJcmV0dXJuIDE7CkBAIC0xOTkxLDYgKzIwMjcsMTgxIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHN5c2ZzIHN1cHBydCAqLworCitzdHJ1Y3QgZXh0NF9hdHRyIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBleHQ0X2F0dHIgKiwgc3RydWN0IGV4dDRfc2JfaW5mbyAqLCBjaGFyICopOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGV4dDRfYXR0ciAqLCBzdHJ1Y3QgZXh0NF9zYl9pbmZvICosIAorCQkJIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKwlpbnQgb2Zmc2V0OworfTsKKworc3RhdGljIGludCBwYXJzZV9zdHJ0b3VsKGNvbnN0IGNoYXIgKmJ1ZiwKKwkJdW5zaWduZWQgbG9uZyBtYXgsIHVuc2lnbmVkIGxvbmcgKnZhbHVlKQoreworCWNoYXIgKmVuZHA7CisKKwl3aGlsZSAoKmJ1ZiAmJiBpc3NwYWNlKCpidWYpKQorCQlidWYrKzsKKwkqdmFsdWUgPSBzaW1wbGVfc3RydG91bChidWYsICZlbmRwLCAwKTsKKwl3aGlsZSAoKmVuZHAgJiYgaXNzcGFjZSgqZW5kcCkpCisJCWVuZHArKzsKKwlpZiAoKmVuZHAgfHwgKnZhbHVlID4gbWF4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkZWxheWVkX2FsbG9jYXRpb25fYmxvY2tzX3Nob3coc3RydWN0IGV4dDRfYXR0ciAqYSwKKwkJCQkJICAgICAgc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLAorCQkJCQkgICAgICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWxsdVxuIiwKKwkJCShzNjQpIHBlcmNwdV9jb3VudGVyX3N1bSgmc2JpLT5zX2RpcnR5YmxvY2tzX2NvdW50ZXIpKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2Vzc2lvbl93cml0ZV9rYnl0ZXNfc2hvdyhzdHJ1Y3QgZXh0NF9hdHRyICphLAorCQkJCQkgc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCBjaGFyICpidWYpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS0+c19idWRkeV9jYWNoZS0+aV9zYjsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsdVxuIiwKKwkJCShwYXJ0X3N0YXRfcmVhZChzYi0+c19iZGV2LT5iZF9wYXJ0LCBzZWN0b3JzWzFdKSAtCisJCQkgc2JpLT5zX3NlY3RvcnNfd3JpdHRlbl9zdGFydCkgPj4gMSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGxpZmV0aW1lX3dyaXRlX2tieXRlc19zaG93KHN0cnVjdCBleHQ0X2F0dHIgKmEsCisJCQkJCSAgc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCBjaGFyICpidWYpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHNiaS0+c19idWRkeV9jYWNoZS0+aV9zYjsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVsbHVcbiIsCisJCQlzYmktPnNfa2J5dGVzX3dyaXR0ZW4gKyAKKwkJCSgocGFydF9zdGF0X3JlYWQoc2ItPnNfYmRldi0+YmRfcGFydCwgc2VjdG9yc1sxXSkgLQorCQkJICBFWFQ0X1NCKHNiKS0+c19zZWN0b3JzX3dyaXR0ZW5fc3RhcnQpID4+IDEpKTsKK30KKworc3RhdGljIHNzaXplX3QgaW5vZGVfcmVhZGFoZWFkX2Jsa3Nfc3RvcmUoc3RydWN0IGV4dDRfYXR0ciAqYSwKKwkJCQkJICBzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmksCisJCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyB0OworCisJaWYgKHBhcnNlX3N0cnRvdWwoYnVmLCAweDQwMDAwMDAwLCAmdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogaW5vZGVfcmVhZGFoZWFkX2Jsa3MgbXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KKwlpZiAodCAmICh0LTEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNiaS0+c19pbm9kZV9yZWFkYWhlYWRfYmxrcyA9IHQ7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzYmlfdWlfc2hvdyhzdHJ1Y3QgZXh0NF9hdHRyICphLAorCQkJCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwgY2hhciAqYnVmKQoreworCXVuc2lnbmVkIGludCAqdWkgPSAodW5zaWduZWQgaW50ICopICgoKGNoYXIgKikgc2JpKSArIGEtPm9mZnNldCk7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgKnVpKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2JpX3VpX3N0b3JlKHN0cnVjdCBleHQ0X2F0dHIgKmEsCisJCQkgICAgc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLAorCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGludCAqdWkgPSAodW5zaWduZWQgaW50ICopICgoKGNoYXIgKikgc2JpKSArIGEtPm9mZnNldCk7CisJdW5zaWduZWQgbG9uZyB0OworCisJaWYgKHBhcnNlX3N0cnRvdWwoYnVmLCAweGZmZmZmZmZmLCAmdCkpCisJCXJldHVybiAtRUlOVkFMOworCSp1aSA9IHQ7CisJcmV0dXJuIGNvdW50OworfQorCisjZGVmaW5lIEVYVDRfQVRUUl9PRkZTRVQoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlLF9lbG5hbWUpIFwKK3N0YXRpYyBzdHJ1Y3QgZXh0NF9hdHRyIGV4dDRfYXR0cl8jI19uYW1lID0gewkJCVwKKwkuYXR0ciA9IHsubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSBfbW9kZSB9LAlcCisJLnNob3cJPSBfc2hvdywJCQkJCVwKKwkuc3RvcmUJPSBfc3RvcmUsCQkJCQlcCisJLm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBleHQ0X3NiX2luZm8sIF9lbG5hbWUpLAlcCit9CisjZGVmaW5lIEVYVDRfQVRUUihuYW1lLCBtb2RlLCBzaG93LCBzdG9yZSkgXAorc3RhdGljIHN0cnVjdCBleHQ0X2F0dHIgZXh0NF9hdHRyXyMjbmFtZSA9IF9fQVRUUihuYW1lLCBtb2RlLCBzaG93LCBzdG9yZSkKKworI2RlZmluZSBFWFQ0X1JPX0FUVFIobmFtZSkgRVhUNF9BVFRSKG5hbWUsIDA0NDQsIG5hbWUjI19zaG93LCBOVUxMKQorI2RlZmluZSBFWFQ0X1JXX0FUVFIobmFtZSkgRVhUNF9BVFRSKG5hbWUsIDA2NDQsIG5hbWUjI19zaG93LCBuYW1lIyNfc3RvcmUpCisjZGVmaW5lIEVYVDRfUldfQVRUUl9TQklfVUkobmFtZSwgZWxuYW1lKQlcCisJRVhUNF9BVFRSX09GRlNFVChuYW1lLCAwNjQ0LCBzYmlfdWlfc2hvdywgc2JpX3VpX3N0b3JlLCBlbG5hbWUpCisjZGVmaW5lIEFUVFJfTElTVChuYW1lKSAmZXh0NF9hdHRyXyMjbmFtZS5hdHRyCisKK0VYVDRfUk9fQVRUUihkZWxheWVkX2FsbG9jYXRpb25fYmxvY2tzKTsKK0VYVDRfUk9fQVRUUihzZXNzaW9uX3dyaXRlX2tieXRlcyk7CitFWFQ0X1JPX0FUVFIobGlmZXRpbWVfd3JpdGVfa2J5dGVzKTsKK0VYVDRfQVRUUl9PRkZTRVQoaW5vZGVfcmVhZGFoZWFkX2Jsa3MsIDA2NDQsIHNiaV91aV9zaG93LAorCQkgaW5vZGVfcmVhZGFoZWFkX2Jsa3Nfc3RvcmUsIHNfaW5vZGVfcmVhZGFoZWFkX2Jsa3MpOworRVhUNF9SV19BVFRSX1NCSV9VSShtYl9zdGF0cywgc19tYl9zdGF0cyk7CitFWFQ0X1JXX0FUVFJfU0JJX1VJKG1iX21heF90b19zY2FuLCBzX21iX21heF90b19zY2FuKTsKK0VYVDRfUldfQVRUUl9TQklfVUkobWJfbWluX3RvX3NjYW4sIHNfbWJfbWluX3RvX3NjYW4pOworRVhUNF9SV19BVFRSX1NCSV9VSShtYl9vcmRlcjJfcmVxLCBzX21iX29yZGVyMl9yZXFzKTsKK0VYVDRfUldfQVRUUl9TQklfVUkobWJfc3RyZWFtX3JlcSwgc19tYl9zdHJlYW1fcmVxdWVzdCk7CitFWFQ0X1JXX0FUVFJfU0JJX1VJKG1iX2dyb3VwX3ByZWFsbG9jLCBzX21iX2dyb3VwX3ByZWFsbG9jKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmV4dDRfYXR0cnNbXSA9IHsKKwlBVFRSX0xJU1QoZGVsYXllZF9hbGxvY2F0aW9uX2Jsb2NrcyksCisJQVRUUl9MSVNUKHNlc3Npb25fd3JpdGVfa2J5dGVzKSwKKwlBVFRSX0xJU1QobGlmZXRpbWVfd3JpdGVfa2J5dGVzKSwKKwlBVFRSX0xJU1QoaW5vZGVfcmVhZGFoZWFkX2Jsa3MpLAorCUFUVFJfTElTVChtYl9zdGF0cyksCisJQVRUUl9MSVNUKG1iX21heF90b19zY2FuKSwKKwlBVFRSX0xJU1QobWJfbWluX3RvX3NjYW4pLAorCUFUVFJfTElTVChtYl9vcmRlcjJfcmVxKSwKKwlBVFRSX0xJU1QobWJfc3RyZWFtX3JlcSksCisJQVRUUl9MSVNUKG1iX2dyb3VwX3ByZWFsbG9jKSwKKwlOVUxMLAorfTsKKworc3RhdGljIHNzaXplX3QgZXh0NF9hdHRyX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBleHQ0X3NiX2luZm8sCisJCQkJCQlzX2tvYmopOworCXN0cnVjdCBleHQ0X2F0dHIgKmEgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IGV4dDRfYXR0ciwgYXR0cik7CisKKwlyZXR1cm4gYS0+c2hvdyA/IGEtPnNob3coYSwgc2JpLCBidWYpIDogMDsKK30KKworc3RhdGljIHNzaXplX3QgZXh0NF9hdHRyX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgICAgIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZXh0NF9zYl9pbmZvLAorCQkJCQkJc19rb2JqKTsKKwlzdHJ1Y3QgZXh0NF9hdHRyICphID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBleHQ0X2F0dHIsIGF0dHIpOworCisJcmV0dXJuIGEtPnN0b3JlID8gYS0+c3RvcmUoYSwgc2JpLCBidWYsIGxlbikgOiAwOworfQorCitzdGF0aWMgdm9pZCBleHQ0X3NiX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBleHQ0X3NiX2luZm8sCisJCQkJCQlzX2tvYmopOworCWNvbXBsZXRlKCZzYmktPnNfa29ial91bnJlZ2lzdGVyKTsKK30KKworCitzdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBleHQ0X2F0dHJfb3BzID0geworCS5zaG93CT0gZXh0NF9hdHRyX3Nob3csCisJLnN0b3JlCT0gZXh0NF9hdHRyX3N0b3JlLAorfTsKKworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgZXh0NF9rdHlwZSA9IHsKKwkuZGVmYXVsdF9hdHRycwk9IGV4dDRfYXR0cnMsCisJLnN5c2ZzX29wcwk9ICZleHQ0X2F0dHJfb3BzLAorCS5yZWxlYXNlCT0gZXh0NF9zYl9yZWxlYXNlLAorfTsKKwogc3RhdGljIGludCBleHQ0X2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKIAkJCQlfX3JlbGVhc2VzKGtlcm5lbF9sb2NrKQogCQkJCV9fYWNxdWlyZXMoa2VybmVsX2xvY2spCkBAIC0yMDIxLDEyICsyMjMyLDIxIEBACiAJc2JpID0ga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOwogCWlmICghc2JpKQogCQlyZXR1cm4gLUVOT01FTTsKKworCXNiaS0+c19ibG9ja2dyb3VwX2xvY2sgPQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgYmxvY2tncm91cF9sb2NrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYmktPnNfYmxvY2tncm91cF9sb2NrKSB7CisJCWtmcmVlKHNiaSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAlzYi0+c19mc19pbmZvID0gc2JpOwogCXNiaS0+c19tb3VudF9vcHQgPSAwOwogCXNiaS0+c19yZXN1aWQgPSBFWFQ0X0RFRl9SRVNVSUQ7CiAJc2JpLT5zX3Jlc2dpZCA9IEVYVDRfREVGX1JFU0dJRDsKIAlzYmktPnNfaW5vZGVfcmVhZGFoZWFkX2Jsa3MgPSBFWFQ0X0RFRl9JTk9ERV9SRUFEQUhFQURfQkxLUzsKIAlzYmktPnNfc2JfYmxvY2sgPSBzYl9ibG9jazsKKwlzYmktPnNfc2VjdG9yc193cml0dGVuX3N0YXJ0ID0gcGFydF9zdGF0X3JlYWQoc2ItPnNfYmRldi0+YmRfcGFydCwKKwkJCQkJCSAgICAgIHNlY3RvcnNbMV0pOwogCiAJdW5sb2NrX2tlcm5lbCgpOwogCkBAIC0yMDY0LDYgKzIyODQsNyBAQAogCXNiLT5zX21hZ2ljID0gbGUxNl90b19jcHUoZXMtPnNfbWFnaWMpOwogCWlmIChzYi0+c19tYWdpYyAhPSBFWFQ0X1NVUEVSX01BR0lDKQogCQlnb3RvIGNhbnRmaW5kX2V4dDQ7CisJc2JpLT5zX2tieXRlc193cml0dGVuID0gbGU2NF90b19jcHUoZXMtPnNfa2J5dGVzX3dyaXR0ZW4pOwogCiAJLyogU2V0IGRlZmF1bHRzIGJlZm9yZSB3ZSBwYXJzZSB0aGUgbW91bnQgb3B0aW9ucyAqLwogCWRlZl9tb3VudF9vcHRzID0gbGUzMl90b19jcHUoZXMtPnNfZGVmYXVsdF9tb3VudF9vcHRzKTsKQEAgLTIxMDEsNyArMjMyMiw2IEBACiAJc2JpLT5zX21pbl9iYXRjaF90aW1lID0gRVhUNF9ERUZfTUlOX0JBVENIX1RJTUU7CiAJc2JpLT5zX21heF9iYXRjaF90aW1lID0gRVhUNF9ERUZfTUFYX0JBVENIX1RJTUU7CiAKLQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIFJFU0VSVkFUSU9OKTsKIAlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEJBUlJJRVIpOwogCiAJLyoKQEAgLTIzMjUsMTQgKzI1NDUsOSBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJaWYgKGV4dDRfcHJvY19yb290KQogCQlzYmktPnNfcHJvYyA9IHByb2NfbWtkaXIoc2ItPnNfaWQsIGV4dDRfcHJvY19yb290KTsKLQotCWlmIChzYmktPnNfcHJvYykKLQkJcHJvY19jcmVhdGVfZGF0YSgiaW5vZGVfcmVhZGFoZWFkX2Jsa3MiLCAwNjQ0LCBzYmktPnNfcHJvYywKLQkJCQkgJmV4dDRfdWlfcHJvY19mb3BzLAotCQkJCSAmc2JpLT5zX2lub2RlX3JlYWRhaGVhZF9ibGtzKTsKICNlbmRpZgogCi0JYmdsX2xvY2tfaW5pdCgmc2JpLT5zX2Jsb2NrZ3JvdXBfbG9jayk7CisJYmdsX2xvY2tfaW5pdChzYmktPnNfYmxvY2tncm91cF9sb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBkYl9jb3VudDsgaSsrKSB7CiAJCWJsb2NrID0gZGVzY3JpcHRvcl9sb2Moc2IsIGxvZ2ljYWxfc2JfYmxvY2ssIGkpOwpAQCAtMjU2NCw2ICsyNzc5LDE2IEBACiAJCWdvdG8gZmFpbGVkX21vdW50NDsKIAl9CiAKKwlzYmktPnNfa29iai5rc2V0ID0gZXh0NF9rc2V0OworCWluaXRfY29tcGxldGlvbigmc2JpLT5zX2tvYmpfdW5yZWdpc3Rlcik7CisJZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoJnNiaS0+c19rb2JqLCAmZXh0NF9rdHlwZSwgTlVMTCwKKwkJCQkgICAiJXMiLCBzYi0+c19pZCk7CisJaWYgKGVycikgeworCQlleHQ0X21iX3JlbGVhc2Uoc2IpOworCQlleHQ0X2V4dF9yZWxlYXNlKHNiKTsKKwkJZ290byBmYWlsZWRfbW91bnQ0OworCX07CisKIAkvKgogCSAqIGFrcG06IGNvcmUgcmVhZF9zdXBlcigpIGNhbGxzIGluIGhlcmUgd2l0aCB0aGUgc3VwZXJibG9jayBsb2NrZWQuCiAJICogVGhhdCBkZWFkbG9ja3MsIGJlY2F1c2Ugb3JwaGFuIGNsZWFudXAgbmVlZHMgdG8gbG9jayB0aGUgc3VwZXJibG9jawpAQCAtMjYxOCw3ICsyODQzLDYgQEAKIAlrZnJlZShzYmktPnNfZ3JvdXBfZGVzYyk7CiBmYWlsZWRfbW91bnQ6CiAJaWYgKHNiaS0+c19wcm9jKSB7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KCJpbm9kZV9yZWFkYWhlYWRfYmxrcyIsIHNiaS0+c19wcm9jKTsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoc2ItPnNfaWQsIGV4dDRfcHJvY19yb290KTsKIAl9CiAjaWZkZWYgQ09ORklHX1FVT1RBCkBAIC0yOTEzLDYgKzMxMzcsMTAgQEAKIAkJc2V0X2J1ZmZlcl91cHRvZGF0ZShzYmgpOwogCX0KIAllcy0+c193dGltZSA9IGNwdV90b19sZTMyKGdldF9zZWNvbmRzKCkpOworCWVzLT5zX2tieXRlc193cml0dGVuID0KKwkJY3B1X3RvX2xlNjQoRVhUNF9TQihzYiktPnNfa2J5dGVzX3dyaXR0ZW4gKyAKKwkJCSAgICAoKHBhcnRfc3RhdF9yZWFkKHNiLT5zX2JkZXYtPmJkX3BhcnQsIHNlY3RvcnNbMV0pIC0KKwkJCSAgICAgIEVYVDRfU0Ioc2IpLT5zX3NlY3RvcnNfd3JpdHRlbl9zdGFydCkgPj4gMSkpOwogCWV4dDRfZnJlZV9ibG9ja3NfY291bnRfc2V0KGVzLCBwZXJjcHVfY291bnRlcl9zdW1fcG9zaXRpdmUoCiAJCQkJCSZFWFQ0X1NCKHNiKS0+c19mcmVlYmxvY2tzX2NvdW50ZXIpKTsKIAllcy0+c19mcmVlX2lub2Rlc19jb3VudCA9IGNwdV90b19sZTMyKHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgKQEAgLTM2NDcsNDUgKzM4NzUsNiBAQAogCXJldHVybiBnZXRfc2JfYmRldihmc190eXBlLCBmbGFncywgZGV2X25hbWUsIGRhdGEsIGV4dDRfZmlsbF9zdXBlciwgbW50KTsKIH0KIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi1zdGF0aWMgaW50IGV4dDRfdWlfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQl1bnNpZ25lZCBpbnQgKnAgPSBtLT5wcml2YXRlOwotCi0Jc2VxX3ByaW50ZihtLCAiJXVcbiIsICpwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBleHQ0X3VpX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZXh0NF91aV9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOwotfQotCi1zdGF0aWMgc3NpemVfdCBleHQ0X3VpX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkgICAgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQotewotCXVuc2lnbmVkIGxvbmcgKnAgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7Ci0JY2hhciBzdHJbMzJdOwotCi0JaWYgKGNudCA+PSBzaXplb2Yoc3RyKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHN0ciwgYnVmLCBjbnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCSpwID0gc2ltcGxlX3N0cnRvdWwoc3RyLCBOVUxMLCAwKTsKLQlyZXR1cm4gY250OwotfQotCi1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDRfdWlfcHJvY19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSBleHQ0X3VpX3Byb2Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotCS53cml0ZQkJPSBleHQ0X3VpX3Byb2Nfd3JpdGUsCi19OwotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQ0X2ZzX3R5cGUgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJleHQ0IiwKQEAgLTM3MTksNiArMzkwOCw5IEBACiB7CiAJaW50IGVycjsKIAorCWV4dDRfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoImV4dDQiLCBOVUxMLCBmc19rb2JqKTsKKwlpZiAoIWV4dDRfa3NldCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJZXh0NF9wcm9jX3Jvb3QgPSBwcm9jX21rZGlyKCJmcy9leHQ0IiwgTlVMTCk7CiAJZXJyID0gaW5pdF9leHQ0X21iYWxsb2MoKTsKIAlpZiAoZXJyKQpAQCAtMzc2MCw2ICszOTUyLDcgQEAKIAlleGl0X2V4dDRfeGF0dHIoKTsKIAlleGl0X2V4dDRfbWJhbGxvYygpOwogCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9leHQ0IiwgTlVMTCk7CisJa3NldF91bnJlZ2lzdGVyKGV4dDRfa3NldCk7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIlJlbXkgQ2FyZCwgU3RlcGhlbiBUd2VlZGllLCBBbmRyZXcgTW9ydG9uLCBBbmRyZWFzIERpbGdlciwgVGhlb2RvcmUgVHMnbyBhbmQgb3RoZXJzIik7CmRpZmYgLS1naXQgYS9mcy9mYXQvaW5vZGUuYyBiL2ZzL2ZhdC9pbm9kZS5jCmluZGV4IGRlMDAwNGYuLjI5Njc4NWEgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9pbm9kZS5jCisrKyBiL2ZzL2ZhdC9pbm9kZS5jCkBAIC01MjMsNyArNTIzLDkgQEAKIAogc3RhdGljIGludCBmYXRfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKLQlzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0IoZGVudHJ5LT5kX3NiKTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOworCXN0cnVjdCBtc2Rvc19zYl9pbmZvICpzYmkgPSBNU0RPU19TQihzYik7CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHNiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAkvKiBJZiB0aGUgY291bnQgb2YgZnJlZSBjbHVzdGVyIGlzIHN0aWxsIHVua25vd24sIGNvdW50cyBpdCBoZXJlLiAqLwogCWlmIChzYmktPmZyZWVfY2x1c3RlcnMgPT0gLTEgfHwgIXNiaS0+ZnJlZV9jbHVzX3ZhbGlkKSB7CkBAIC01MzcsNiArNTM5LDggQEAKIAlidWYtPmZfYmxvY2tzID0gc2JpLT5tYXhfY2x1c3RlciAtIEZBVF9TVEFSVF9FTlQ7CiAJYnVmLT5mX2JmcmVlID0gc2JpLT5mcmVlX2NsdXN0ZXJzOwogCWJ1Zi0+Zl9iYXZhaWwgPSBzYmktPmZyZWVfY2x1c3RlcnM7CisJYnVmLT5mX2ZzaWQudmFsWzBdID0gKHUzMilpZDsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKShpZCA+PiAzMik7CiAJYnVmLT5mX25hbWVsZW4gPSBzYmktPm9wdGlvbnMuaXN2ZmF0ID8gMjYwIDogMTI7CiAKIAlyZXR1cm4gMDsKQEAgLTkzMCw3ICs5MzQsNyBAQAogCiAJb3B0cy0+ZnNfdWlkID0gY3VycmVudF91aWQoKTsKIAlvcHRzLT5mc19naWQgPSBjdXJyZW50X2dpZCgpOwotCW9wdHMtPmZzX2ZtYXNrID0gb3B0cy0+ZnNfZG1hc2sgPSBjdXJyZW50LT5mcy0+dW1hc2s7CisJb3B0cy0+ZnNfZm1hc2sgPSBjdXJyZW50X3VtYXNrKCk7CiAJb3B0cy0+YWxsb3dfdXRpbWUgPSAtMTsKIAlvcHRzLT5jb2RlcGFnZSA9IGZhdF9kZWZhdWx0X2NvZGVwYWdlOwogCW9wdHMtPmlvY2hhcnNldCA9IGZhdF9kZWZhdWx0X2lvY2hhcnNldDsKZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfdGFibGUuYyBiL2ZzL2ZpbGVfdGFibGUuYwppbmRleCBiNzRhOGUxLi41NDAxOGZlIDEwMDY0NAotLS0gYS9mcy9maWxlX3RhYmxlLmMKKysrIGIvZnMvZmlsZV90YWJsZS5jCkBAIC0xNjksNyArMTY5LDYgQEAKIAkJZm1vZGVfdCBtb2RlLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3ApCiB7CiAJc3RydWN0IGZpbGUgKmZpbGU7Ci0Jc3RydWN0IHBhdGg7CiAKIAlmaWxlID0gZ2V0X2VtcHR5X2ZpbHAoKTsKIAlpZiAoIWZpbGUpCmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IGUzZmU5OTEuLjkxMDEzZmYgMTAwNjQ0Ci0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jCisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJc3RydWN0IGlub2RlICp0YWlsX2lub2RlOwogCiAJCXRhaWxfaW5vZGUgPSBsaXN0X2VudHJ5KHNiLT5zX2RpcnR5Lm5leHQsIHN0cnVjdCBpbm9kZSwgaV9saXN0KTsKLQkJaWYgKCF0aW1lX2FmdGVyX2VxKGlub2RlLT5kaXJ0aWVkX3doZW4sCisJCWlmICh0aW1lX2JlZm9yZShpbm9kZS0+ZGlydGllZF93aGVuLAogCQkJCXRhaWxfaW5vZGUtPmRpcnRpZWRfd2hlbikpCiAJCQlpbm9kZS0+ZGlydGllZF93aGVuID0gamlmZmllczsKIAl9CkBAIC0yMjAsNiArMjIwLDIxIEBACiAJd2FrZV91cF9iaXQoJmlub2RlLT5pX3N0YXRlLCBfX0lfU1lOQyk7CiB9CiAKK3N0YXRpYyBib29sIGlub2RlX2RpcnRpZWRfYWZ0ZXIoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgbG9uZyB0KQoreworCWJvb2wgcmV0ID0gdGltZV9hZnRlcihpbm9kZS0+ZGlydGllZF93aGVuLCB0KTsKKyNpZm5kZWYgQ09ORklHXzY0QklUCisJLyoKKwkgKiBGb3IgaW5vZGVzIGJlaW5nIGNvbnN0YW50bHkgcmVkaXJ0aWVkLCBkaXJ0aWVkX3doZW4gY2FuIGdldCBzdHVjay4KKwkgKiBJdCBfYXBwZWFyc18gdG8gYmUgaW4gdGhlIGZ1dHVyZSwgYnV0IGlzIGFjdHVhbGx5IGluIGRpc3RhbnQgcGFzdC4KKwkgKiBUaGlzIHRlc3QgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgc3VjaCB3cmFwcGVkLWFyb3VuZCByZWxhdGl2ZSB0aW1lcworCSAqIGZyb20gcGVybWFuZW50bHkgc3RvcHBpbmcgdGhlIHdob2xlIHBkZmx1c2ggd3JpdGViYWNrLgorCSAqLworCXJldCA9IHJldCAmJiB0aW1lX2JlZm9yZV9lcShpbm9kZS0+ZGlydGllZF93aGVuLCBqaWZmaWVzKTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBNb3ZlIGV4cGlyZWQgZGlydHkgaW5vZGVzIGZyb20gQGRlbGF5aW5nX3F1ZXVlIHRvIEBkaXNwYXRjaF9xdWV1ZS4KICAqLwpAQCAtMjMxLDcgKzI0Niw3IEBACiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBsaXN0X2VudHJ5KGRlbGF5aW5nX3F1ZXVlLT5wcmV2LAogCQkJCQkJc3RydWN0IGlub2RlLCBpX2xpc3QpOwogCQlpZiAob2xkZXJfdGhhbl90aGlzICYmCi0JCQl0aW1lX2FmdGVyKGlub2RlLT5kaXJ0aWVkX3doZW4sICpvbGRlcl90aGFuX3RoaXMpKQorCQkgICAgaW5vZGVfZGlydGllZF9hZnRlcihpbm9kZSwgKm9sZGVyX3RoYW5fdGhpcykpCiAJCQlicmVhazsKIAkJbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCBkaXNwYXRjaF9xdWV1ZSk7CiAJfQpAQCAtNDIwLDcgKzQzNSw3IEBACiAgKiBJZiBvbGRlcl90aGFuX3RoaXMgaXMgbm9uLU5VTEwsIHRoZW4gb25seSB3cml0ZSBvdXQgaW5vZGVzIHdoaWNoCiAgKiBoYWQgdGhlaXIgZmlyc3QgZGlydHlpbmcgYXQgYSB0aW1lIGVhcmxpZXIgdGhhbiAqb2xkZXJfdGhhbl90aGlzLgogICoKLSAqIElmIHdlJ3JlIGEgcGRsZnVzaCB0aHJlYWQsIHRoZW4gaW1wbGVtZW50IHBkZmx1c2ggY29sbGlzaW9uIGF2b2lkYW5jZQorICogSWYgd2UncmUgYSBwZGZsdXNoIHRocmVhZCwgdGhlbiBpbXBsZW1lbnQgcGRmbHVzaCBjb2xsaXNpb24gYXZvaWRhbmNlCiAgKiBhZ2FpbnN0IHRoZSBlbnRpcmUgbGlzdC4KICAqCiAgKiBJZiBgYmRpJyBpcyBub24temVybyB0aGVuIHdlJ3JlIGJlaW5nIGFza2VkIHRvIHdyaXRlYmFjayBhIHNwZWNpZmljIHF1ZXVlLgpAQCAtNDkyLDggKzUwNywxMSBAQAogCQkJY29udGludWU7CQkvKiBibG9ja2RldiBoYXMgd3JvbmcgcXVldWUgKi8KIAkJfQogCi0JCS8qIFdhcyB0aGlzIGlub2RlIGRpcnRpZWQgYWZ0ZXIgc3luY19zYl9pbm9kZXMgd2FzIGNhbGxlZD8gKi8KLQkJaWYgKHRpbWVfYWZ0ZXIoaW5vZGUtPmRpcnRpZWRfd2hlbiwgc3RhcnQpKQorCQkvKgorCQkgKiBXYXMgdGhpcyBpbm9kZSBkaXJ0aWVkIGFmdGVyIHN5bmNfc2JfaW5vZGVzIHdhcyBjYWxsZWQ/CisJCSAqIFRoaXMga2VlcHMgc3luYyBmcm9tIGV4dHJhIGpvYnMgYW5kIGxpdmVsb2NrLgorCQkgKi8KKwkJaWYgKGlub2RlX2RpcnRpZWRfYWZ0ZXIoaW5vZGUsIHN0YXJ0KSkKIAkJCWJyZWFrOwogCiAJCS8qIElzIGFub3RoZXIgcGRmbHVzaCBhbHJlYWR5IGZsdXNoaW5nIHRoaXMgcXVldWU/ICovCkBAIC01MzgsNyArNTU2LDggQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShpbm9kZSwgJnNiLT5zX2lub2RlcywgaV9zYl9saXN0KSB7CiAJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAotCQkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCisJCQlpZiAoaW5vZGUtPmlfc3RhdGUgJgorCQkJCQkoSV9GUkVFSU5HfElfQ0xFQVJ8SV9XSUxMX0ZSRUV8SV9ORVcpKQogCQkJCWNvbnRpbnVlOwogCQkJbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CiAJCQlpZiAobWFwcGluZy0+bnJwYWdlcyA9PSAwKQpkaWZmIC0tZ2l0IGEvZnMvZnNfc3RydWN0LmMgYi9mcy9mc19zdHJ1Y3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWUwNTkwCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNfc3RydWN0LmMKQEAgLTAsMCArMSwxNzcgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGF0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KKworLyoKKyAqIFJlcGxhY2UgdGhlIGZzLT57cm9vdG1udCxyb290fSB3aXRoIHttbnQsZGVudHJ5fS4gUHV0IHRoZSBvbGQgdmFsdWVzLgorICogSXQgY2FuIGJsb2NrLgorICovCit2b2lkIHNldF9mc19yb290KHN0cnVjdCBmc19zdHJ1Y3QgKmZzLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlzdHJ1Y3QgcGF0aCBvbGRfcm9vdDsKKworCXdyaXRlX2xvY2soJmZzLT5sb2NrKTsKKwlvbGRfcm9vdCA9IGZzLT5yb290OworCWZzLT5yb290ID0gKnBhdGg7CisJcGF0aF9nZXQocGF0aCk7CisJd3JpdGVfdW5sb2NrKCZmcy0+bG9jayk7CisJaWYgKG9sZF9yb290LmRlbnRyeSkKKwkJcGF0aF9wdXQoJm9sZF9yb290KTsKK30KKworLyoKKyAqIFJlcGxhY2UgdGhlIGZzLT57cHdkbW50LHB3ZH0gd2l0aCB7bW50LGRlbnRyeX0uIFB1dCB0aGUgb2xkIHZhbHVlcy4KKyAqIEl0IGNhbiBibG9jay4KKyAqLwordm9pZCBzZXRfZnNfcHdkKHN0cnVjdCBmc19zdHJ1Y3QgKmZzLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlzdHJ1Y3QgcGF0aCBvbGRfcHdkOworCisJd3JpdGVfbG9jaygmZnMtPmxvY2spOworCW9sZF9wd2QgPSBmcy0+cHdkOworCWZzLT5wd2QgPSAqcGF0aDsKKwlwYXRoX2dldChwYXRoKTsKKwl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKKworCWlmIChvbGRfcHdkLmRlbnRyeSkKKwkJcGF0aF9wdXQoJm9sZF9wd2QpOworfQorCit2b2lkIGNocm9vdF9mc19yZWZzKHN0cnVjdCBwYXRoICpvbGRfcm9vdCwgc3RydWN0IHBhdGggKm5ld19yb290KQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7CisJc3RydWN0IGZzX3N0cnVjdCAqZnM7CisJaW50IGNvdW50ID0gMDsKKworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJZG9fZWFjaF90aHJlYWQoZywgcCkgeworCQl0YXNrX2xvY2socCk7CisJCWZzID0gcC0+ZnM7CisJCWlmIChmcykgeworCQkJd3JpdGVfbG9jaygmZnMtPmxvY2spOworCQkJaWYgKGZzLT5yb290LmRlbnRyeSA9PSBvbGRfcm9vdC0+ZGVudHJ5CisJCQkgICAgJiYgZnMtPnJvb3QubW50ID09IG9sZF9yb290LT5tbnQpIHsKKwkJCQlwYXRoX2dldChuZXdfcm9vdCk7CisJCQkJZnMtPnJvb3QgPSAqbmV3X3Jvb3Q7CisJCQkJY291bnQrKzsKKwkJCX0KKwkJCWlmIChmcy0+cHdkLmRlbnRyeSA9PSBvbGRfcm9vdC0+ZGVudHJ5CisJCQkgICAgJiYgZnMtPnB3ZC5tbnQgPT0gb2xkX3Jvb3QtPm1udCkgeworCQkJCXBhdGhfZ2V0KG5ld19yb290KTsKKwkJCQlmcy0+cHdkID0gKm5ld19yb290OworCQkJCWNvdW50Kys7CisJCQl9CisJCQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKKwkJfQorCQl0YXNrX3VubG9jayhwKTsKKwl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOworCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwl3aGlsZSAoY291bnQtLSkKKwkJcGF0aF9wdXQob2xkX3Jvb3QpOworfQorCit2b2lkIGZyZWVfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKmZzKQoreworCXBhdGhfcHV0KCZmcy0+cm9vdCk7CisJcGF0aF9wdXQoJmZzLT5wd2QpOworCWttZW1fY2FjaGVfZnJlZShmc19jYWNoZXAsIGZzKTsKK30KKwordm9pZCBleGl0X2ZzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gdHNrLT5mczsKKworCWlmIChmcykgeworCQlpbnQga2lsbDsKKwkJdGFza19sb2NrKHRzayk7CisJCXdyaXRlX2xvY2soJmZzLT5sb2NrKTsKKwkJdHNrLT5mcyA9IE5VTEw7CisJCWtpbGwgPSAhLS1mcy0+dXNlcnM7CisJCXdyaXRlX3VubG9jaygmZnMtPmxvY2spOworCQl0YXNrX3VubG9jayh0c2spOworCQlpZiAoa2lsbCkKKwkJCWZyZWVfZnNfc3RydWN0KGZzKTsKKwl9Cit9CisKK3N0cnVjdCBmc19zdHJ1Y3QgKmNvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKm9sZCkKK3sKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGttZW1fY2FjaGVfYWxsb2MoZnNfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwkvKiBXZSBkb24ndCBuZWVkIHRvIGxvY2sgZnMgLSB0aGluayB3aHkgOy0pICovCisJaWYgKGZzKSB7CisJCWZzLT51c2VycyA9IDE7CisJCWZzLT5pbl9leGVjID0gMDsKKwkJcndsb2NrX2luaXQoJmZzLT5sb2NrKTsKKwkJZnMtPnVtYXNrID0gb2xkLT51bWFzazsKKwkJcmVhZF9sb2NrKCZvbGQtPmxvY2spOworCQlmcy0+cm9vdCA9IG9sZC0+cm9vdDsKKwkJcGF0aF9nZXQoJm9sZC0+cm9vdCk7CisJCWZzLT5wd2QgPSBvbGQtPnB3ZDsKKwkJcGF0aF9nZXQoJm9sZC0+cHdkKTsKKwkJcmVhZF91bmxvY2soJm9sZC0+bG9jayk7CisJfQorCXJldHVybiBmczsKK30KKworaW50IHVuc2hhcmVfZnNfc3RydWN0KHZvaWQpCit7CisJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LT5mczsKKwlzdHJ1Y3QgZnNfc3RydWN0ICpuZXdfZnMgPSBjb3B5X2ZzX3N0cnVjdChmcyk7CisJaW50IGtpbGw7CisKKwlpZiAoIW5ld19mcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0YXNrX2xvY2soY3VycmVudCk7CisJd3JpdGVfbG9jaygmZnMtPmxvY2spOworCWtpbGwgPSAhLS1mcy0+dXNlcnM7CisJY3VycmVudC0+ZnMgPSBuZXdfZnM7CisJd3JpdGVfdW5sb2NrKCZmcy0+bG9jayk7CisJdGFza191bmxvY2soY3VycmVudCk7CisKKwlpZiAoa2lsbCkKKwkJZnJlZV9mc19zdHJ1Y3QoZnMpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1bnNoYXJlX2ZzX3N0cnVjdCk7CisKK2ludCBjdXJyZW50X3VtYXNrKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnQtPmZzLT51bWFzazsKK30KK0VYUE9SVF9TWU1CT0woY3VycmVudF91bWFzayk7CisKKy8qIHRvIGJlIG1lbnRpb25lZCBvbmx5IGluIElOSVRfVEFTSyAqLworc3RydWN0IGZzX3N0cnVjdCBpbml0X2ZzID0geworCS51c2VycwkJPSAxLAorCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChpbml0X2ZzLmxvY2spLAorCS51bWFzawkJPSAwMDIyLAorfTsKKwordm9pZCBkYWVtb25pemVfZnNfc3RydWN0KHZvaWQpCit7CisJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LT5mczsKKworCWlmIChmcykgeworCQlpbnQga2lsbDsKKworCQl0YXNrX2xvY2soY3VycmVudCk7CisKKwkJd3JpdGVfbG9jaygmaW5pdF9mcy5sb2NrKTsKKwkJaW5pdF9mcy51c2VycysrOworCQl3cml0ZV91bmxvY2soJmluaXRfZnMubG9jayk7CisKKwkJd3JpdGVfbG9jaygmZnMtPmxvY2spOworCQljdXJyZW50LT5mcyA9ICZpbml0X2ZzOworCQlraWxsID0gIS0tZnMtPnVzZXJzOworCQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKKworCQl0YXNrX3VubG9jayhjdXJyZW50KTsKKwkJaWYgKGtpbGwpCisJCQlmcmVlX2ZzX3N0cnVjdChmcyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9LY29uZmlnIGIvZnMvZnNjYWNoZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmI4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc2NhY2hlL0tjb25maWcKQEAgLTAsMCArMSw1NiBAQAorCitjb25maWcgRlNDQUNIRQorCXRyaXN0YXRlICJHZW5lcmFsIGZpbGVzeXN0ZW0gbG9jYWwgY2FjaGluZyBtYW5hZ2VyIgorCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJc2VsZWN0IFNMT1dfV09SSworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBnZW5lcmljIGZpbGVzeXN0ZW0gY2FjaGluZyBtYW5hZ2VyIHRoYXQgY2FuIGJlCisJICB1c2VkIGJ5IHZhcmlvdXMgbmV0d29yayBhbmQgb3RoZXIgZmlsZXN5c3RlbXMgdG8gY2FjaGUgZGF0YSBsb2NhbGx5LgorCSAgRGlmZmVyZW50IHNvcnRzIG9mIGNhY2hlcyBjYW4gYmUgcGx1Z2dlZCBpbiwgZGVwZW5kaW5nIG9uIHRoZQorCSAgcmVzb3VyY2VzIGF2YWlsYWJsZS4KKworCSAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworY29uZmlnIEZTQ0FDSEVfU1RBVFMKKwlib29sICJHYXRoZXIgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gb24gbG9jYWwgY2FjaGluZyIKKwlkZXBlbmRzIG9uIEZTQ0FDSEUgJiYgUFJPQ19GUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGNhdXNlcyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiB0byBiZSBnYXRoZXJlZCBvbiBsb2NhbAorCSAgY2FjaGluZyBhbmQgZXhwb3J0ZWQgdGhyb3VnaCBmaWxlOgorCisJCS9wcm9jL2ZzL2ZzY2FjaGUvc3RhdHMKKworCSAgVGhlIGdhdGhlcmluZyBvZiBzdGF0aXN0aWNzIGFkZHMgYSBjZXJ0YWluIGFtb3VudCBvZiBvdmVyaGVhZCB0bworCSAgZXhlY3V0aW9uIGFzIHRoZXJlIGFyZSBhIHF1aXRlIGEgZmV3IHN0YXRzIGdhdGhlcmVkLCBhbmQgb24gYQorCSAgbXVsdGktQ1BVIHN5c3RlbSB0aGVzZSBtYXkgYmUgb24gY2FjaGVsaW5lcyB0aGF0IGtlZXAgYm91bmNpbmcKKwkgIGJldHdlZW4gQ1BVcy4gIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgc3RhdHMgYXJlIHZlcnkgdXNlZnVsIGZvcgorCSAgZGVidWdnaW5nIHB1cnBvc2VzLiAgU2F5aW5nICdZJyBoZXJlIGlzIHJlY29tbWVuZGVkLgorCisJICBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2ZzY2FjaGUudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjb25maWcgRlNDQUNIRV9ISVNUT0dSQU0KKwlib29sICJHYXRoZXIgbGF0ZW5jeSBpbmZvcm1hdGlvbiBvbiBsb2NhbCBjYWNoaW5nIgorCWRlcGVuZHMgb24gRlNDQUNIRSAmJiBQUk9DX0ZTCisJaGVscAorCSAgVGhpcyBvcHRpb24gY2F1c2VzIGxhdGVuY3kgaW5mb3JtYXRpb24gdG8gYmUgZ2F0aGVyZWQgb24gbG9jYWwKKwkgIGNhY2hpbmcgYW5kIGV4cG9ydGVkIHRocm91Z2ggZmlsZToKKworCQkvcHJvYy9mcy9mc2NhY2hlL2hpc3RvZ3JhbQorCisJICBUaGUgZ2VuZXJhdGlvbiBvZiB0aGlzIGhpc3RvZ3JhbSBhZGRzIGEgY2VydGFpbiBhbW91bnQgb2Ygb3ZlcmhlYWQgdG8KKwkgIGV4ZWN1dGlvbiBhcyB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcG9pbnRzIGF0IHdoaWNoIGRhdGEgaXMgZ2F0aGVyZWQsCisJICBhbmQgb24gYSBtdWx0aS1DUFUgc3lzdGVtIHRoZXNlIG1heSBiZSBvbiBjYWNoZWxpbmVzIHRoYXQga2VlcAorCSAgYm91bmNpbmcgYmV0d2VlbiBDUFVzLiAgT24gdGhlIG90aGVyIGhhbmQsIHRoZSBoaXN0b2dyYW0gbWF5IGJlCisJICB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gIFNheWluZyAnTicgaGVyZSBpcyByZWNvbW1lbmRlZC4KKworCSAgU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9mc2NhY2hlLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworY29uZmlnIEZTQ0FDSEVfREVCVUcKKwlib29sICJEZWJ1ZyBGUy1DYWNoZSIKKwlkZXBlbmRzIG9uIEZTQ0FDSEUKKwloZWxwCisJICBUaGlzIHBlcm1pdHMgZGVidWdnaW5nIHRvIGJlIGR5bmFtaWNhbGx5IGVuYWJsZWQgaW4gdGhlIGxvY2FsIGNhY2hpbmcKKwkgIG1hbmFnZW1lbnQgbW9kdWxlLiAgSWYgdGhpcyBpcyBzZXQsIHRoZSBkZWJ1Z2dpbmcgb3V0cHV0IG1heSBiZQorCSAgZW5hYmxlZCBieSBzZXR0aW5nIGJpdHMgaW4gL3N5cy9tb2R1bGVzL2ZzY2FjaGUvcGFyYW1ldGVyL2RlYnVnLgorCisJICBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2ZzY2FjaGUudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9NYWtlZmlsZSBiL2ZzL2ZzY2FjaGUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1NzFiOQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvTWFrZWZpbGUKQEAgLTAsMCArMSwxOSBAQAorIworIyBNYWtlZmlsZSBmb3IgZ2VuZXJhbCBmaWxlc3lzdGVtIGNhY2hpbmcgY29kZQorIworCitmc2NhY2hlLXkgOj0gXAorCWNhY2hlLm8gXAorCWNvb2tpZS5vIFwKKwlmc2RlZi5vIFwKKwltYWluLm8gXAorCW5ldGZzLm8gXAorCW9iamVjdC5vIFwKKwlvcGVyYXRpb24ubyBcCisJcGFnZS5vCisKK2ZzY2FjaGUtJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCitmc2NhY2hlLSQoQ09ORklHX0ZTQ0FDSEVfU1RBVFMpICs9IHN0YXRzLm8KK2ZzY2FjaGUtJChDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0pICs9IGhpc3RvZ3JhbS5vCisKK29iai0kKENPTkZJR19GU0NBQ0hFKSA6PSBmc2NhY2hlLm8KZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvY2FjaGUuYyBiL2ZzL2ZzY2FjaGUvY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjE5ODViCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9jYWNoZS5jCkBAIC0wLDAgKzEsNDE1IEBACisvKiBGUy1DYWNoZSBjYWNoZSBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgQ0FDSEUKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworTElTVF9IRUFEKGZzY2FjaGVfY2FjaGVfbGlzdCk7CitERUNMQVJFX1JXU0VNKGZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CitERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChmc2NhY2hlX2NhY2hlX2NsZWFyZWRfd3EpOworRVhQT1JUX1NZTUJPTChmc2NhY2hlX2NhY2hlX2NsZWFyZWRfd3EpOworCitzdGF0aWMgTElTVF9IRUFEKGZzY2FjaGVfY2FjaGVfdGFnX2xpc3QpOworCisvKgorICogbG9vayB1cCBhIGNhY2hlIHRhZworICovCitzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKl9fZnNjYWNoZV9sb29rdXBfY2FjaGVfdGFnKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICp0YWcsICp4dGFnOworCisJLyogZmlyc3RseSBjaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgdGFnIHVuZGVyIHJlYWQgbG9jayAqLworCWRvd25fcmVhZCgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGFnLCAmZnNjYWNoZV9jYWNoZV90YWdfbGlzdCwgbGluaykgeworCQlpZiAoc3RyY21wKHRhZy0+bmFtZSwgbmFtZSkgPT0gMCkgeworCQkJYXRvbWljX2luYygmdGFnLT51c2FnZSk7CisJCQl1cF9yZWFkKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCQkJcmV0dXJuIHRhZzsKKwkJfQorCX0KKworCXVwX3JlYWQoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisKKwkvKiB0aGUgdGFnIGRvZXMgbm90IGV4aXN0IC0gY3JlYXRlIGEgY2FuZGlkYXRlICovCisJeHRhZyA9IGt6YWxsb2Moc2l6ZW9mKCp4dGFnKSArIHN0cmxlbihuYW1lKSArIDEsIEdGUF9LRVJORUwpOworCWlmICgheHRhZykKKwkJLyogcmV0dXJuIGEgZHVtbXkgdGFnIGlmIG91dCBvZiBtZW1vcnkgKi8KKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlhdG9taWNfc2V0KCZ4dGFnLT51c2FnZSwgMSk7CisJc3RyY3B5KHh0YWctPm5hbWUsIG5hbWUpOworCisJLyogd3JpdGUgbG9jaywgc2VhcmNoIGFnYWluIGFuZCBhZGQgaWYgc3RpbGwgbm90IHByZXNlbnQgKi8KKwlkb3duX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0YWcsICZmc2NhY2hlX2NhY2hlX3RhZ19saXN0LCBsaW5rKSB7CisJCWlmIChzdHJjbXAodGFnLT5uYW1lLCBuYW1lKSA9PSAwKSB7CisJCQlhdG9taWNfaW5jKCZ0YWctPnVzYWdlKTsKKwkJCXVwX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCQkJa2ZyZWUoeHRhZyk7CisJCQlyZXR1cm4gdGFnOworCQl9CisJfQorCisJbGlzdF9hZGRfdGFpbCgmeHRhZy0+bGluaywgJmZzY2FjaGVfY2FjaGVfdGFnX2xpc3QpOworCXVwX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCXJldHVybiB4dGFnOworfQorCisvKgorICogcmVsZWFzZSBhIHJlZmVyZW5jZSB0byBhIGNhY2hlIHRhZworICovCit2b2lkIF9fZnNjYWNoZV9yZWxlYXNlX2NhY2hlX3RhZyhzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKnRhZykKK3sKKwlpZiAodGFnICE9IEVSUl9QVFIoLUVOT01FTSkpIHsKKwkJZG93bl93cml0ZSgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdGFnLT51c2FnZSkpCisJCQlsaXN0X2RlbF9pbml0KCZ0YWctPmxpbmspOworCQllbHNlCisJCQl0YWcgPSBOVUxMOworCisJCXVwX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJCWtmcmVlKHRhZyk7CisJfQorfQorCisvKgorICogc2VsZWN0IGEgY2FjaGUgaW4gd2hpY2ggdG8gc3RvcmUgYW4gb2JqZWN0CisgKiAtIHRoZSBjYWNoZSBhZGRyZW1vdmUgc2VtYXBob3JlIG11c3QgYmUgYXQgbGVhc3QgcmVhZC1sb2NrZWQgYnkgdGhlIGNhbGxlcgorICogLSB0aGUgb2JqZWN0IHdpbGwgbmV2ZXIgYmUgYW4gaW5kZXgKKyAqLworc3RydWN0IGZzY2FjaGVfY2FjaGUgKmZzY2FjaGVfc2VsZWN0X2NhY2hlX2Zvcl9vYmplY3QoCisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICp0YWc7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlOworCisJX2VudGVyKCIiKTsKKworCWlmIChsaXN0X2VtcHR5KCZmc2NhY2hlX2NhY2hlX2xpc3QpKSB7CisJCV9sZWF2ZSgiID0gTlVMTCBbbm8gY2FjaGVdIik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIHdlIGNoZWNrIHRoZSBwYXJlbnQgdG8gZGV0ZXJtaW5lIHRoZSBjYWNoZSB0byB1c2UgKi8KKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisKKwkvKiB0aGUgZmlyc3QgaW4gdGhlIHBhcmVudCdzIGJhY2tpbmcgbGlzdCBzaG91bGQgYmUgdGhlIHByZWZlcnJlZAorCSAqIGNhY2hlICovCisJaWYgKCFobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKSB7CisJCW9iamVjdCA9IGhsaXN0X2VudHJ5KGNvb2tpZS0+YmFja2luZ19vYmplY3RzLmZpcnN0LAorCQkJCSAgICAgc3RydWN0IGZzY2FjaGVfb2JqZWN0LCBjb29raWVfbGluayk7CisKKwkJY2FjaGUgPSBvYmplY3QtPmNhY2hlOworCQlpZiAob2JqZWN0LT5zdGF0ZSA+PSBGU0NBQ0hFX09CSkVDVF9EWUlORyB8fAorCQkgICAgdGVzdF9iaXQoRlNDQUNIRV9JT0VSUk9SLCAmY2FjaGUtPmZsYWdzKSkKKwkJCWNhY2hlID0gTlVMTDsKKworCQlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwkJX2xlYXZlKCIgPSAlcCBbcGFyZW50XSIsIGNhY2hlKTsKKwkJcmV0dXJuIGNhY2hlOworCX0KKworCS8qIHRoZSBwYXJlbnQgaXMgdW5iYWNrZWQgKi8KKwlpZiAoY29va2llLT5kZWYtPnR5cGUgIT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCkgeworCQkvKiBjb29raWUgbm90IGFuIGluZGV4IGFuZCBpcyB1bmJhY2tlZCAqLworCQlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwkJX2xlYXZlKCIgPSBOVUxMIFtjb29raWUgdWIsbmldIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCisJaWYgKCFjb29raWUtPmRlZi0+c2VsZWN0X2NhY2hlKQorCQlnb3RvIG5vX3ByZWZlcmVuY2U7CisKKwkvKiBhc2sgdGhlIG5ldGZzIGZvciBpdHMgcHJlZmVyZW5jZSAqLworCXRhZyA9IGNvb2tpZS0+ZGVmLT5zZWxlY3RfY2FjaGUoY29va2llLT5wYXJlbnQtPm5ldGZzX2RhdGEsCisJCQkJCWNvb2tpZS0+bmV0ZnNfZGF0YSk7CisJaWYgKCF0YWcpCisJCWdvdG8gbm9fcHJlZmVyZW5jZTsKKworCWlmICh0YWcgPT0gRVJSX1BUUigtRU5PTUVNKSkgeworCQlfbGVhdmUoIiA9IE5VTEwgW25vbWVtIHRhZ10iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCF0YWctPmNhY2hlKSB7CisJCV9sZWF2ZSgiID0gTlVMTCBbdW5iYWNrZWQgdGFnXSIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAodGVzdF9iaXQoRlNDQUNIRV9JT0VSUk9SLCAmdGFnLT5jYWNoZS0+ZmxhZ3MpKQorCQlyZXR1cm4gTlVMTDsKKworCV9sZWF2ZSgiID0gJXAgW3NwZWNpZmljXSIsIHRhZy0+Y2FjaGUpOworCXJldHVybiB0YWctPmNhY2hlOworCitub19wcmVmZXJlbmNlOgorCS8qIG5ldGZzIGhhcyBubyBwcmVmZXJlbmNlIC0ganVzdCBzZWxlY3QgZmlyc3QgY2FjaGUgKi8KKwljYWNoZSA9IGxpc3RfZW50cnkoZnNjYWNoZV9jYWNoZV9saXN0Lm5leHQsCisJCQkgICBzdHJ1Y3QgZnNjYWNoZV9jYWNoZSwgbGluayk7CisJX2xlYXZlKCIgPSAlcCBbZmlyc3RdIiwgY2FjaGUpOworCXJldHVybiBjYWNoZTsKK30KKworLyoqCisgKiBmc2NhY2hlX2luaXRfY2FjaGUgLSBJbml0aWFsaXNlIGEgY2FjaGUgcmVjb3JkCisgKiBAY2FjaGU6IFRoZSBjYWNoZSByZWNvcmQgdG8gYmUgaW5pdGlhbGlzZWQKKyAqIEBvcHM6IFRoZSBjYWNoZSBvcGVyYXRpb25zIHRvIGJlIGluc3RhbGxlZCBpbiB0aGF0IHJlY29yZAorICogQGlkZm10OiBGb3JtYXQgc3RyaW5nIHRvIGRlZmluZSBpZGVudGlmaWVyCisgKiBALi4uOiBzcHJpbnRmLXN0eWxlIGFyZ3VtZW50cworICoKKyAqIEluaXRpYWxpc2UgYSByZWNvcmQgb2YgYSBjYWNoZSBhbmQgZmlsbCBpbiB0aGUgbmFtZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3ZvaWQgZnNjYWNoZV9pbml0X2NhY2hlKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSwKKwkJCWNvbnN0IHN0cnVjdCBmc2NhY2hlX2NhY2hlX29wcyAqb3BzLAorCQkJY29uc3QgY2hhciAqaWRmbXQsCisJCQkuLi4pCit7CisJdmFfbGlzdCB2YTsKKworCW1lbXNldChjYWNoZSwgMCwgc2l6ZW9mKCpjYWNoZSkpOworCisJY2FjaGUtPm9wcyA9IG9wczsKKworCXZhX3N0YXJ0KHZhLCBpZGZtdCk7CisJdnNucHJpbnRmKGNhY2hlLT5pZGVudGlmaWVyLCBzaXplb2YoY2FjaGUtPmlkZW50aWZpZXIpLCBpZGZtdCwgdmEpOworCXZhX2VuZCh2YSk7CisKKwlJTklUX1dPUksoJmNhY2hlLT5vcF9nYywgZnNjYWNoZV9vcGVyYXRpb25fZ2MpOworCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+bGluayk7CisJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5vYmplY3RfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5vcF9nY19saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZjYWNoZS0+b3BfZ2NfbGlzdF9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9pbml0X2NhY2hlKTsKKworLyoqCisgKiBmc2NhY2hlX2FkZF9jYWNoZSAtIERlY2xhcmUgYSBjYWNoZSBhcyBiZWluZyBvcGVuIGZvciBidXNpbmVzcworICogQGNhY2hlOiBUaGUgcmVjb3JkIGRlc2NyaWJpbmcgdGhlIGNhY2hlCisgKiBAaWZzZGVmOiBUaGUgcmVjb3JkIG9mIHRoZSBjYWNoZSBvYmplY3QgZGVzY3JpYmluZyB0aGUgdG9wLWxldmVsIGluZGV4CisgKiBAdGFnbmFtZTogVGhlIHRhZyBkZXNjcmliaW5nIHRoaXMgY2FjaGUKKyAqCisgKiBBZGQgYSBjYWNoZSB0byB0aGUgc3lzdGVtLCBtYWtpbmcgaXQgYXZhaWxhYmxlIGZvciBuZXRmcydzIHRvIHVzZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK2ludCBmc2NhY2hlX2FkZF9jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCisJCSAgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCAqaWZzZGVmLAorCQkgICAgICBjb25zdCBjaGFyICp0YWduYW1lKQoreworCXN0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqdGFnOworCisJQlVHX09OKCFjYWNoZS0+b3BzKTsKKwlCVUdfT04oIWlmc2RlZik7CisKKwljYWNoZS0+ZmxhZ3MgPSAwOworCWlmc2RlZi0+ZXZlbnRfbWFzayA9IFVMT05HX01BWCAmIH4oMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVEKTsKKwlpZnNkZWYtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfQUNUSVZFOworCisJaWYgKCF0YWduYW1lKQorCQl0YWduYW1lID0gY2FjaGUtPmlkZW50aWZpZXI7CisKKwlCVUdfT04oIXRhZ25hbWVbMF0pOworCisJX2VudGVyKCJ7JXMuJXN9LCwlcyIsIGNhY2hlLT5vcHMtPm5hbWUsIGNhY2hlLT5pZGVudGlmaWVyLCB0YWduYW1lKTsKKworCS8qIHdlIHVzZSB0aGUgY2FjaGUgdGFnIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGNhY2hlcyAqLworCXRhZyA9IF9fZnNjYWNoZV9sb29rdXBfY2FjaGVfdGFnKHRhZ25hbWUpOworCWlmIChJU19FUlIodGFnKSkKKwkJZ290byBub21lbTsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KEZTQ0FDSEVfVEFHX1JFU0VSVkVELCAmdGFnLT5mbGFncykpCisJCWdvdG8gdGFnX2luX3VzZTsKKworCWNhY2hlLT5rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCh0YWduYW1lLCBmc2NhY2hlX3Jvb3QpOworCWlmICghY2FjaGUtPmtvYmopCisJCWdvdG8gZXJyb3I7CisKKwlpZnNkZWYtPmNvb2tpZSA9ICZmc2NhY2hlX2ZzZGVmX2luZGV4OworCWlmc2RlZi0+Y2FjaGUgPSBjYWNoZTsKKwljYWNoZS0+ZnNkZWYgPSBpZnNkZWY7CisKKwlkb3duX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJdGFnLT5jYWNoZSA9IGNhY2hlOworCWNhY2hlLT50YWcgPSB0YWc7CisKKwkvKiBhZGQgdGhlIGNhY2hlIHRvIHRoZSBsaXN0ICovCisJbGlzdF9hZGQoJmNhY2hlLT5saW5rLCAmZnNjYWNoZV9jYWNoZV9saXN0KTsKKworCS8qIGFkZCB0aGUgY2FjaGUncyBuZXRmcyBkZWZpbml0aW9uIGluZGV4IG9iamVjdCB0byB0aGUgY2FjaGUncworCSAqIGxpc3QgKi8KKwlzcGluX2xvY2soJmNhY2hlLT5vYmplY3RfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpZnNkZWYtPmNhY2hlX2xpbmssICZjYWNoZS0+b2JqZWN0X2xpc3QpOworCXNwaW5fdW5sb2NrKCZjYWNoZS0+b2JqZWN0X2xpc3RfbG9jayk7CisKKwkvKiBhZGQgdGhlIGNhY2hlJ3MgbmV0ZnMgZGVmaW5pdGlvbiBpbmRleCBvYmplY3QgdG8gdGhlIHRvcCBsZXZlbCBpbmRleAorCSAqIGNvb2tpZSBhcyBhIGtub3duIGJhY2tpbmcgb2JqZWN0ICovCisJc3Bpbl9sb2NrKCZmc2NhY2hlX2ZzZGVmX2luZGV4LmxvY2spOworCisJaGxpc3RfYWRkX2hlYWQoJmlmc2RlZi0+Y29va2llX2xpbmssCisJCSAgICAgICAmZnNjYWNoZV9mc2RlZl9pbmRleC5iYWNraW5nX29iamVjdHMpOworCisJYXRvbWljX2luYygmZnNjYWNoZV9mc2RlZl9pbmRleC51c2FnZSk7CisKKwkvKiBkb25lICovCisJc3Bpbl91bmxvY2soJmZzY2FjaGVfZnNkZWZfaW5kZXgubG9jayk7CisJdXBfd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkZTLUNhY2hlOiBDYWNoZSBcIiVzXCIgYWRkZWQgKHR5cGUgJXMpXG4iLAorCSAgICAgICBjYWNoZS0+dGFnLT5uYW1lLCBjYWNoZS0+b3BzLT5uYW1lKTsKKwlrb2JqZWN0X3VldmVudChjYWNoZS0+a29iaiwgS09CSl9BREQpOworCisJX2xlYXZlKCIgPSAwIFslc10iLCBjYWNoZS0+aWRlbnRpZmllcik7CisJcmV0dXJuIDA7CisKK3RhZ19pbl91c2U6CisJcHJpbnRrKEtFUk5fRVJSICJGUy1DYWNoZTogQ2FjaGUgdGFnICclcycgYWxyZWFkeSBpbiB1c2VcbiIsIHRhZ25hbWUpOworCV9fZnNjYWNoZV9yZWxlYXNlX2NhY2hlX3RhZyh0YWcpOworCV9sZWF2ZSgiID0gLUVYSVNUIik7CisJcmV0dXJuIC1FRVhJU1Q7CisKK2Vycm9yOgorCV9fZnNjYWNoZV9yZWxlYXNlX2NhY2hlX3RhZyh0YWcpOworCV9sZWF2ZSgiID0gLUVJTlZBTCIpOworCXJldHVybiAtRUlOVkFMOworCitub21lbToKKwlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9hZGRfY2FjaGUpOworCisvKioKKyAqIGZzY2FjaGVfaW9fZXJyb3IgLSBOb3RlIGEgY2FjaGUgSS9PIGVycm9yCisgKiBAY2FjaGU6IFRoZSByZWNvcmQgZGVzY3JpYmluZyB0aGUgY2FjaGUKKyAqCisgKiBOb3RlIHRoYXQgYW4gSS9PIGVycm9yIG9jY3VycmVkIGluIGEgY2FjaGUgYW5kIHRoYXQgaXQgc2hvdWxkIG5vIGxvbmdlciBiZQorICogdXNlZCBmb3IgYW55dGhpbmcuICBUaGlzIGFsc28gcmVwb3J0cyB0aGUgZXJyb3IgaW50byB0aGUga2VybmVsIGxvZy4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3ZvaWQgZnNjYWNoZV9pb19lcnJvcihzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpCit7CisJc2V0X2JpdChGU0NBQ0hFX0lPRVJST1IsICZjYWNoZS0+ZmxhZ3MpOworCisJcHJpbnRrKEtFUk5fRVJSICJGUy1DYWNoZTogQ2FjaGUgJXMgc3RvcHBlZCBkdWUgdG8gSS9PIGVycm9yXG4iLAorCSAgICAgICBjYWNoZS0+b3BzLT5uYW1lKTsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9pb19lcnJvcik7CisKKy8qCisgKiByZXF1ZXN0IHdpdGhkcmF3YWwgb2YgYWxsIHRoZSBvYmplY3RzIGluIGEgY2FjaGUKKyAqIC0gYWxsIHRoZSBvYmplY3RzIGJlaW5nIHdpdGhkcmF3biBhcmUgbW92ZWQgb250byB0aGUgc3VwcGxpZWQgbGlzdAorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3dpdGhkcmF3X2FsbF9vYmplY3RzKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSwKKwkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmR5aW5nX29iamVjdHMpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisKKwlzcGluX2xvY2soJmNhY2hlLT5vYmplY3RfbGlzdF9sb2NrKTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmY2FjaGUtPm9iamVjdF9saXN0KSkgeworCQlvYmplY3QgPSBsaXN0X2VudHJ5KGNhY2hlLT5vYmplY3RfbGlzdC5uZXh0LAorCQkJCSAgICBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIGNhY2hlX2xpbmspOworCQlsaXN0X21vdmVfdGFpbCgmb2JqZWN0LT5jYWNoZV9saW5rLCBkeWluZ19vYmplY3RzKTsKKworCQlfZGVidWcoIndpdGhkcmF3ICVwIiwgb2JqZWN0LT5jb29raWUpOworCisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmNhY2hlLT5vYmplY3RfbGlzdF9sb2NrKTsKKwkJZnNjYWNoZV9yYWlzZV9ldmVudChvYmplY3QsIEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXKTsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwkJY29uZF9yZXNjaGVkKCk7CisJCXNwaW5fbG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCX0KKworCXNwaW5fdW5sb2NrKCZjYWNoZS0+b2JqZWN0X2xpc3RfbG9jayk7Cit9CisKKy8qKgorICogZnNjYWNoZV93aXRoZHJhd19jYWNoZSAtIFdpdGhkcmF3IGEgY2FjaGUgZnJvbSB0aGUgYWN0aXZlIHNlcnZpY2UKKyAqIEBjYWNoZTogVGhlIHJlY29yZCBkZXNjcmliaW5nIHRoZSBjYWNoZQorICoKKyAqIFdpdGhkcmF3IGEgY2FjaGUgZnJvbSBzZXJ2aWNlLCB1bmJpbmRpbmcgYWxsIGl0cyBjYWNoZSBvYmplY3RzIGZyb20gdGhlCisgKiBuZXRmcyBjb29raWVzIHRoZXkncmUgY3VycmVudGx5IHJlcHJlc2VudGluZy4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3ZvaWQgZnNjYWNoZV93aXRoZHJhd19jYWNoZShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpCit7CisJTElTVF9IRUFEKGR5aW5nX29iamVjdHMpOworCisJX2VudGVyKCIiKTsKKworCXByaW50ayhLRVJOX05PVElDRSAiRlMtQ2FjaGU6IFdpdGhkcmF3aW5nIGNhY2hlIFwiJXNcIlxuIiwKKwkgICAgICAgY2FjaGUtPnRhZy0+bmFtZSk7CisKKwkvKiBtYWtlIHRoZSBjYWNoZSB1bmF2YWlsYWJsZSBmb3IgY29va2llIGFjcXVpc2l0aW9uICovCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRlNDQUNIRV9DQUNIRV9XSVRIRFJBV04sICZjYWNoZS0+ZmxhZ3MpKQorCQlCVUcoKTsKKworCWRvd25fd3JpdGUoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisJbGlzdF9kZWxfaW5pdCgmY2FjaGUtPmxpbmspOworCWNhY2hlLT50YWctPmNhY2hlID0gTlVMTDsKKwl1cF93cml0ZSgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKworCS8qIG1ha2Ugc3VyZSBhbGwgcGFnZXMgcGlubmVkIGJ5IG9wZXJhdGlvbnMgb24gYmVoYWxmIG9mIHRoZSBuZXRmcyBhcmUKKwkgKiB3cml0dGVuIHRvIGRpc2sgKi8KKwljYWNoZS0+b3BzLT5zeW5jX2NhY2hlKGNhY2hlKTsKKworCS8qIGRpc3NvY2lhdGUgYWxsIHRoZSBuZXRmcyBwYWdlcyBiYWNrZWQgYnkgdGhpcyBjYWNoZSBmcm9tIHRoZSBibG9jaworCSAqIG1hcHBpbmdzIGluIHRoZSBjYWNoZSAqLworCWNhY2hlLT5vcHMtPmRpc3NvY2lhdGVfcGFnZXMoY2FjaGUpOworCisJLyogd2Ugbm93IGhhdmUgdG8gZGVzdHJveSBhbGwgdGhlIGFjdGl2ZSBvYmplY3RzIHBlcnRhaW5pbmcgdG8gdGhpcworCSAqIGNhY2hlIC0gd2hpY2ggd2UgZG8gYnkgcGFzc2luZyB0aGVtIG9mZiB0byB0aHJlYWQgcG9vbCB0byBiZQorCSAqIGRpc3Bvc2VkIG9mICovCisJX2RlYnVnKCJkZXN0cm95Iik7CisKKwlmc2NhY2hlX3dpdGhkcmF3X2FsbF9vYmplY3RzKGNhY2hlLCAmZHlpbmdfb2JqZWN0cyk7CisKKwkvKiB3YWl0IGZvciBhbGwgZXh0YW50IG9iamVjdHMgdG8gZmluaXNoIHRoZWlyIG91dHN0YW5kaW5nIG9wZXJhdGlvbnMKKwkgKiBhbmQgZ28gYXdheSAqLworCV9kZWJ1Zygid2FpdCBmb3IgZmluaXNoIik7CisJd2FpdF9ldmVudChmc2NhY2hlX2NhY2hlX2NsZWFyZWRfd3EsCisJCSAgIGF0b21pY19yZWFkKCZjYWNoZS0+b2JqZWN0X2NvdW50KSA9PSAwKTsKKwlfZGVidWcoIndhaXQgZm9yIGNsZWFyYW5jZSIpOworCXdhaXRfZXZlbnQoZnNjYWNoZV9jYWNoZV9jbGVhcmVkX3dxLAorCQkgICBsaXN0X2VtcHR5KCZjYWNoZS0+b2JqZWN0X2xpc3QpKTsKKwlfZGVidWcoImNsZWFyZWQiKTsKKwlBU1NFUlQobGlzdF9lbXB0eSgmZHlpbmdfb2JqZWN0cykpOworCisJa29iamVjdF9wdXQoY2FjaGUtPmtvYmopOworCisJY2xlYXJfYml0KEZTQ0FDSEVfVEFHX1JFU0VSVkVELCAmY2FjaGUtPnRhZy0+ZmxhZ3MpOworCWZzY2FjaGVfcmVsZWFzZV9jYWNoZV90YWcoY2FjaGUtPnRhZyk7CisJY2FjaGUtPnRhZyA9IE5VTEw7CisKKwlfbGVhdmUoIiIpOworfQorRVhQT1JUX1NZTUJPTChmc2NhY2hlX3dpdGhkcmF3X2NhY2hlKTsKZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvY29va2llLmMgYi9mcy9mc2NhY2hlL2Nvb2tpZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZmQxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc2NhY2hlL2Nvb2tpZS5jCkBAIC0wLDAgKzEsNTAwIEBACisvKiBuZXRmcyBjb29raWUgbWFuYWdlbWVudAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorICogdGhlIG5ldGZzIEFQSS4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgQ09PS0lFCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0cnVjdCBrbWVtX2NhY2hlICpmc2NhY2hlX2Nvb2tpZV9qYXI7CisKK3N0YXRpYyBhdG9taWNfdCBmc2NhY2hlX29iamVjdF9kZWJ1Z19pZCA9IEFUT01JQ19JTklUKDApOworCitzdGF0aWMgaW50IGZzY2FjaGVfYWNxdWlyZV9ub25faW5kZXhfY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKTsKK3N0YXRpYyBpbnQgZnNjYWNoZV9hbGxvY19vYmplY3Qoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlLAorCQkJCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKTsKK3N0YXRpYyBpbnQgZnNjYWNoZV9hdHRhY2hfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCSBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKy8qCisgKiBpbml0aWFsaXNlIGFuIGNvb2tpZSBqYXIgc2xhYiBlbGVtZW50IHByaW9yIHRvIGFueSB1c2UKKyAqLwordm9pZCBmc2NhY2hlX2Nvb2tpZV9pbml0X29uY2Uodm9pZCAqX2Nvb2tpZSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSA9IF9jb29raWU7CisKKwltZW1zZXQoY29va2llLCAwLCBzaXplb2YoKmNvb2tpZSkpOworCXNwaW5fbG9ja19pbml0KCZjb29raWUtPmxvY2spOworCUlOSVRfSExJU1RfSEVBRCgmY29va2llLT5iYWNraW5nX29iamVjdHMpOworfQorCisvKgorICogcmVxdWVzdCBhIGNvb2tpZSB0byByZXByZXNlbnQgYW4gb2JqZWN0IChpbmRleCwgZGF0YWZpbGUsIHhhdHRyLCBldGMpCisgKiAtIHBhcmVudCBzcGVjaWZpZXMgdGhlIHBhcmVudCBvYmplY3QKKyAqICAgLSB0aGUgdG9wIGxldmVsIGluZGV4IGNvb2tpZSBmb3IgZWFjaCBuZXRmcyBpcyBzdG9yZWQgaW4gdGhlIGZzY2FjaGVfbmV0ZnMKKyAqICAgICBzdHJ1Y3QgdXBvbiByZWdpc3RyYXRpb24KKyAqIC0gZGVmIHBvaW50cyB0byB0aGUgZGVmaW5pdGlvbgorICogLSB0aGUgbmV0ZnNfZGF0YSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zIHBvaW50ZWQgdG8gaW4gKmRlZgorICogLSBhbGwgYXR0YWNoZWQgY2FjaGVzIHdpbGwgYmUgc2VhcmNoZWQgdG8gc2VlIGlmIHRoZXkgY29udGFpbiB0aGlzIG9iamVjdAorICogLSBpbmRleCBvYmplY3RzIGFyZW4ndCBzdG9yZWQgb24gZGlzayB1bnRpbCB0aGVyZSdzIGEgZGVwZW5kZW50IGZpbGUgdGhhdAorICogICBuZWVkcyBzdG9yaW5nCisgKiAtIG90aGVyIG9iamVjdHMgYXJlIHN0b3JlZCBpbiBhIHNlbGVjdGVkIGNhY2hlIGltbWVkaWF0ZWx5LCBhbmQgYWxsIHRoZQorICogICBpbmRpY2VzIGZvcm1pbmcgdGhlIHBhdGggdG8gaXQgYXJlIGluc3RhbnRpYXRlZCBpZiBuZWNlc3NhcnkKKyAqIC0gd2UgbmV2ZXIgbGV0IG9uIHRvIHRoZSBuZXRmcyBhYm91dCBlcnJvcnMKKyAqICAgLSB3ZSBtYXkgc2V0IGEgbmVnYXRpdmUgY29va2llIHBvaW50ZXIsIGJ1dCB0aGF0J3Mgb2theQorICovCitzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKl9fZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSgKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKnBhcmVudCwKKwljb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmICpkZWYsCisJdm9pZCAqbmV0ZnNfZGF0YSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZTsKKworCUJVR19PTighZGVmKTsKKworCV9lbnRlcigieyVzfSx7JXN9LCVwIiwKKwkgICAgICAgcGFyZW50ID8gKGNoYXIgKikgcGFyZW50LT5kZWYtPm5hbWUgOiAiPG5vLXBhcmVudD4iLAorCSAgICAgICBkZWYtPm5hbWUsIG5ldGZzX2RhdGEpOworCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWNxdWlyZXMpOworCisJLyogaWYgdGhlcmUncyBubyBwYXJlbnQgY29va2llLCB0aGVuIHdlIGRvbid0IGNyZWF0ZSBvbmUgaGVyZSBlaXRoZXIgKi8KKwlpZiAoIXBhcmVudCkgeworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hY3F1aXJlc19udWxsKTsKKwkJX2xlYXZlKCIgW25vIHBhcmVudF0iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogdmFsaWRhdGUgdGhlIGRlZmluaXRpb24gKi8KKwlCVUdfT04oIWRlZi0+Z2V0X2tleSk7CisJQlVHX09OKCFkZWYtPm5hbWVbMF0pOworCisJQlVHX09OKGRlZi0+dHlwZSA9PSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYICYmCisJICAgICAgIHBhcmVudC0+ZGVmLT50eXBlICE9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgpOworCisJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgYSBjb29raWUgKi8KKwljb29raWUgPSBrbWVtX2NhY2hlX2FsbG9jKGZzY2FjaGVfY29va2llX2phciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjb29raWUpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWNxdWlyZXNfb29tKTsKKwkJX2xlYXZlKCIgW0VOT01FTV0iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYXRvbWljX3NldCgmY29va2llLT51c2FnZSwgMSk7CisJYXRvbWljX3NldCgmY29va2llLT5uX2NoaWxkcmVuLCAwKTsKKworCWF0b21pY19pbmMoJnBhcmVudC0+dXNhZ2UpOworCWF0b21pY19pbmMoJnBhcmVudC0+bl9jaGlsZHJlbik7CisKKwljb29raWUtPmRlZgkJPSBkZWY7CisJY29va2llLT5wYXJlbnQJCT0gcGFyZW50OworCWNvb2tpZS0+bmV0ZnNfZGF0YQk9IG5ldGZzX2RhdGE7CisJY29va2llLT5mbGFncwkJPSAwOworCisJSU5JVF9SQURJWF9UUkVFKCZjb29raWUtPnN0b3JlcywgR0ZQX05PRlMpOworCisJc3dpdGNoIChjb29raWUtPmRlZi0+dHlwZSkgeworCWNhc2UgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWDoKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY29va2llX2luZGV4KTsKKwkJYnJlYWs7CisJY2FzZSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0RBVEFGSUxFOgorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jb29raWVfZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2Nvb2tpZV9zcGVjaWFsKTsKKwkJYnJlYWs7CisJfQorCisJLyogaWYgdGhlIG9iamVjdCBpcyBhbiBpbmRleCB0aGVuIHdlIG5lZWQgZG8gbm90aGluZyBtb3JlIGhlcmUgLSB3ZQorCSAqIGNyZWF0ZSBpbmRpY2VzIG9uIGRpc2sgd2hlbiB3ZSBuZWVkIHRoZW0gYXMgYW4gaW5kZXggbWF5IGV4aXN0IGluCisJICogbXVsdGlwbGUgY2FjaGVzICovCisJaWYgKGNvb2tpZS0+ZGVmLT50eXBlICE9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgpIHsKKwkJaWYgKGZzY2FjaGVfYWNxdWlyZV9ub25faW5kZXhfY29va2llKGNvb2tpZSkgPCAwKSB7CisJCQlhdG9taWNfZGVjKCZwYXJlbnQtPm5fY2hpbGRyZW4pOworCQkJX19mc2NhY2hlX2Nvb2tpZV9wdXQoY29va2llKTsKKwkJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FjcXVpcmVzX25vYnVmcyk7CisJCQlfbGVhdmUoIiA9IE5VTEwiKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWNxdWlyZXNfb2spOworCV9sZWF2ZSgiID0gJXAiLCBjb29raWUpOworCXJldHVybiBjb29raWU7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSk7CisKKy8qCisgKiBhY3F1aXJlIGEgbm9uLWluZGV4IGNvb2tpZQorICogLSB0aGlzIG11c3QgbWFrZSBzdXJlIHRoZSBpbmRleCBjaGFpbiBpcyBpbnN0YW50aWF0ZWQgYW5kIGluc3RhbnRpYXRlIHRoZQorICogICBvYmplY3QgcmVwcmVzZW50YXRpb24gdG9vCisgKi8KK3N0YXRpYyBpbnQgZnNjYWNoZV9hY3F1aXJlX25vbl9pbmRleF9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlOworCXVpbnQ2NF90IGlfc2l6ZTsKKwlpbnQgcmV0OworCisJX2VudGVyKCIiKTsKKworCWNvb2tpZS0+ZmxhZ3MgPSAxIDw8IEZTQ0FDSEVfQ09PS0lFX1VOQVZBSUxBQkxFOworCisJLyogbm93IHdlIG5lZWQgdG8gc2VlIHdoZXRoZXIgdGhlIGJhY2tpbmcgb2JqZWN0cyBmb3IgdGhpcyBjb29raWUgeWV0CisJICogZXhpc3QsIGlmIG5vdCB0aGVyZSdsbCBiZSBub3RoaW5nIHRvIHNlYXJjaCAqLworCWRvd25fcmVhZCgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKworCWlmIChsaXN0X2VtcHR5KCZmc2NhY2hlX2NhY2hlX2xpc3QpKSB7CisJCXVwX3JlYWQoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisJCV9sZWF2ZSgiID0gMCBbbm8gY2FjaGVzXSIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBzZWxlY3QgYSBjYWNoZSBpbiB3aGljaCB0byBzdG9yZSB0aGUgb2JqZWN0ICovCisJY2FjaGUgPSBmc2NhY2hlX3NlbGVjdF9jYWNoZV9mb3Jfb2JqZWN0KGNvb2tpZS0+cGFyZW50KTsKKwlpZiAoIWNhY2hlKSB7CisJCXVwX3JlYWQoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FjcXVpcmVzX25vX2NhY2hlKTsKKwkJX2xlYXZlKCIgPSAtRU5PTUVESVVNIFtubyBjYWNoZV0iKTsKKwkJcmV0dXJuIC1FTk9NRURJVU07CisJfQorCisJX2RlYnVnKCJjYWNoZSAlcyIsIGNhY2hlLT50YWctPm5hbWUpOworCisJY29va2llLT5mbGFncyA9CisJCSgxIDw8IEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVApIHwKKwkJKDEgPDwgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcpIHwKKwkJKDEgPDwgRlNDQUNIRV9DT09LSUVfTk9fREFUQV9ZRVQpOworCisJLyogYXNrIHRoZSBjYWNoZSB0byBhbGxvY2F0ZSBvYmplY3RzIGZvciB0aGlzIGNvb2tpZSBhbmQgaXRzIHBhcmVudAorCSAqIGNoYWluICovCisJcmV0ID0gZnNjYWNoZV9hbGxvY19vYmplY3QoY2FjaGUsIGNvb2tpZSk7CisJaWYgKHJldCA8IDApIHsKKwkJdXBfcmVhZCgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKwkJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogcGFzcyBvbiBob3cgYmlnIHRoZSBvYmplY3Qgd2UncmUgY2FjaGluZyBpcyBzdXBwb3NlZCB0byBiZSAqLworCWNvb2tpZS0+ZGVmLT5nZXRfYXR0cihjb29raWUtPm5ldGZzX2RhdGEsICZpX3NpemUpOworCisJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOworCWlmIChobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKSB7CisJCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCQlnb3RvIHVuYXZhaWxhYmxlOworCX0KKworCW9iamVjdCA9IGhsaXN0X2VudHJ5KGNvb2tpZS0+YmFja2luZ19vYmplY3RzLmZpcnN0LAorCQkJICAgICBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIGNvb2tpZV9saW5rKTsKKworCWZzY2FjaGVfc2V0X3N0b3JlX2xpbWl0KG9iamVjdCwgaV9zaXplKTsKKworCS8qIGluaXRpYXRlIHRoZSBwcm9jZXNzIG9mIGxvb2tpbmcgdXAgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjaGFpbgorCSAqIChkb25lIGJ5IGZzY2FjaGVfaW5pdGlhbGlzZV9vYmplY3QoKSkgKi8KKwlmc2NhY2hlX2VucXVldWVfb2JqZWN0KG9iamVjdCk7CisKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKworCS8qIHdlIG1heSBiZSByZXF1aXJlZCB0byB3YWl0IGZvciBsb29rdXAgdG8gY29tcGxldGUgYXQgdGhpcyBwb2ludCAqLworCWlmICghZnNjYWNoZV9kZWZlcl9sb29rdXApIHsKKwkJX2RlYnVnKCJub24tZGVmZXJyZWQgbG9va3VwICVwIiwgJmNvb2tpZS0+ZmxhZ3MpOworCQl3YWl0X29uX2JpdCgmY29va2llLT5mbGFncywgRlNDQUNIRV9DT09LSUVfTE9PS0lOR19VUCwKKwkJCSAgICBmc2NhY2hlX3dhaXRfYml0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCV9kZWJ1ZygiY29tcGxldGUiKTsKKwkJaWYgKHRlc3RfYml0KEZTQ0FDSEVfQ09PS0lFX1VOQVZBSUxBQkxFLCAmY29va2llLT5mbGFncykpCisJCQlnb3RvIHVuYXZhaWxhYmxlOworCX0KKworCXVwX3JlYWQoJmZzY2FjaGVfYWRkcmVtb3ZlX3NlbSk7CisJX2xlYXZlKCIgPSAwIFtkZWZlcnJlZF0iKTsKKwlyZXR1cm4gMDsKKwordW5hdmFpbGFibGU6CisJdXBfcmVhZCgmZnNjYWNoZV9hZGRyZW1vdmVfc2VtKTsKKwlfbGVhdmUoIiA9IC1FTk9CVUZTIik7CisJcmV0dXJuIC1FTk9CVUZTOworfQorCisvKgorICogcmVjdXJzaXZlbHkgYWxsb2NhdGUgY2FjaGUgb2JqZWN0IHJlY29yZHMgZm9yIGEgY29va2llL2NhY2hlIGNvbWJpbmF0aW9uCisgKiAtIGNhbGxlciBtdXN0IGJlIGhvbGRpbmcgdGhlIGFkZHJlbW92ZSBzZW0KKyAqLworc3RhdGljIGludCBmc2NhY2hlX2FsbG9jX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCisJCQkJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisJc3RydWN0IGhsaXN0X25vZGUgKl9uOworCWludCByZXQ7CisKKwlfZW50ZXIoIiVwLCVweyVzfSIsIGNhY2hlLCBjb29raWUsIGNvb2tpZS0+ZGVmLT5uYW1lKTsKKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShvYmplY3QsIF9uLCAmY29va2llLT5iYWNraW5nX29iamVjdHMsCisJCQkgICAgIGNvb2tpZV9saW5rKSB7CisJCWlmIChvYmplY3QtPmNhY2hlID09IGNhY2hlKQorCQkJZ290byBvYmplY3RfYWxyZWFkeV9leHRhbnQ7CisJfQorCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCisJLyogYXNrIHRoZSBjYWNoZSB0byBhbGxvY2F0ZSBhbiBvYmplY3QgKHdlIG1heSBlbmQgdXAgd2l0aCBkdXBsaWNhdGUKKwkgKiBvYmplY3RzIGF0IHRoaXMgc3RhZ2UsIGJ1dCB3ZSBzb3J0IHRoYXQgb3V0IGxhdGVyKSAqLworCW9iamVjdCA9IGNhY2hlLT5vcHMtPmFsbG9jX29iamVjdChjYWNoZSwgY29va2llKTsKKwlpZiAoSVNfRVJSKG9iamVjdCkpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb2JqZWN0X25vX2FsbG9jKTsKKwkJcmV0ID0gUFRSX0VSUihvYmplY3QpOworCQlnb3RvIGVycm9yOworCX0KKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29iamVjdF9hbGxvYyk7CisKKwlvYmplY3QtPmRlYnVnX2lkID0gYXRvbWljX2luY19yZXR1cm4oJmZzY2FjaGVfb2JqZWN0X2RlYnVnX2lkKTsKKworCV9kZWJ1ZygiQUxMT0MgT0JKJXg6ICVzIHslbHh9IiwKKwkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgY29va2llLT5kZWYtPm5hbWUsIG9iamVjdC0+ZXZlbnRzKTsKKworCXJldCA9IGZzY2FjaGVfYWxsb2Nfb2JqZWN0KGNhY2hlLCBjb29raWUtPnBhcmVudCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcHV0OworCisJLyogb25seSBhdHRhY2ggaWYgd2UgbWFuYWdlZCB0byBhbGxvY2F0ZSBhbGwgd2UgbmVlZGVkLCBvdGhlcndpc2UKKwkgKiBkaXNjYXJkIHRoZSBvYmplY3Qgd2UganVzdCBhbGxvY2F0ZWQgYW5kIGluc3RlYWQgdXNlIHRoZSBvbmUKKwkgKiBhdHRhY2hlZCB0byB0aGUgY29va2llICovCisJaWYgKGZzY2FjaGVfYXR0YWNoX29iamVjdChjb29raWUsIG9iamVjdCkgPCAwKQorCQljYWNoZS0+b3BzLT5wdXRfb2JqZWN0KG9iamVjdCk7CisKKwlfbGVhdmUoIiA9IDAiKTsKKwlyZXR1cm4gMDsKKworb2JqZWN0X2FscmVhZHlfZXh0YW50OgorCXJldCA9IC1FTk9CVUZTOworCWlmIChvYmplY3QtPnN0YXRlID49IEZTQ0FDSEVfT0JKRUNUX0RZSU5HKSB7CisJCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCQlnb3RvIGVycm9yOworCX0KKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwlfbGVhdmUoIiA9IDAgW2ZvdW5kXSIpOworCXJldHVybiAwOworCitlcnJvcl9wdXQ6CisJY2FjaGUtPm9wcy0+cHV0X29iamVjdChvYmplY3QpOworZXJyb3I6CisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGF0dGFjaCBhIGNhY2hlIG9iamVjdCB0byBhIGNvb2tpZQorICovCitzdGF0aWMgaW50IGZzY2FjaGVfYXR0YWNoX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCQkgc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpwOworCXN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSA9IG9iamVjdC0+Y2FjaGU7CisJc3RydWN0IGhsaXN0X25vZGUgKl9uOworCWludCByZXQ7CisKKwlfZW50ZXIoInslc30se09CSiV4fSIsIGNvb2tpZS0+ZGVmLT5uYW1lLCBvYmplY3QtPmRlYnVnX2lkKTsKKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCS8qIHRoZXJlIG1heSBiZSBtdWx0aXBsZSBpbml0aWFsIGNyZWF0aW9ucyBvZiB0aGlzIG9iamVjdCwgYnV0IHdlIG9ubHkKKwkgKiB3YW50IG9uZSAqLworCXJldCA9IC1FRVhJU1Q7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkocCwgX24sICZjb29raWUtPmJhY2tpbmdfb2JqZWN0cywgY29va2llX2xpbmspIHsKKwkJaWYgKHAtPmNhY2hlID09IG9iamVjdC0+Y2FjaGUpIHsKKwkJCWlmIChwLT5zdGF0ZSA+PSBGU0NBQ0hFX09CSkVDVF9EWUlORykKKwkJCQlyZXQgPSAtRU5PQlVGUzsKKwkJCWdvdG8gY2FudF9hdHRhY2hfb2JqZWN0OworCQl9CisJfQorCisJLyogcGluIHRoZSBwYXJlbnQgb2JqZWN0ICovCisJc3Bpbl9sb2NrX25lc3RlZCgmY29va2llLT5wYXJlbnQtPmxvY2ssIDEpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIF9uLCAmY29va2llLT5wYXJlbnQtPmJhY2tpbmdfb2JqZWN0cywKKwkJCSAgICAgY29va2llX2xpbmspIHsKKwkJaWYgKHAtPmNhY2hlID09IG9iamVjdC0+Y2FjaGUpIHsKKwkJCWlmIChwLT5zdGF0ZSA+PSBGU0NBQ0hFX09CSkVDVF9EWUlORykgeworCQkJCXJldCA9IC1FTk9CVUZTOworCQkJCXNwaW5fdW5sb2NrKCZjb29raWUtPnBhcmVudC0+bG9jayk7CisJCQkJZ290byBjYW50X2F0dGFjaF9vYmplY3Q7CisJCQl9CisJCQlvYmplY3QtPnBhcmVudCA9IHA7CisJCQlzcGluX2xvY2soJnAtPmxvY2spOworCQkJcC0+bl9jaGlsZHJlbisrOworCQkJc3Bpbl91bmxvY2soJnAtPmxvY2spOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+cGFyZW50LT5sb2NrKTsKKworCS8qIGF0dGFjaCB0byB0aGUgY2FjaGUncyBvYmplY3QgbGlzdCAqLworCWlmIChsaXN0X2VtcHR5KCZvYmplY3QtPmNhY2hlX2xpbmspKSB7CisJCXNwaW5fbG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCQlsaXN0X2FkZCgmb2JqZWN0LT5jYWNoZV9saW5rLCAmY2FjaGUtPm9iamVjdF9saXN0KTsKKwkJc3Bpbl91bmxvY2soJmNhY2hlLT5vYmplY3RfbGlzdF9sb2NrKTsKKwl9CisKKwkvKiBhdHRhY2ggdG8gdGhlIGNvb2tpZSAqLworCW9iamVjdC0+Y29va2llID0gY29va2llOworCWF0b21pY19pbmMoJmNvb2tpZS0+dXNhZ2UpOworCWhsaXN0X2FkZF9oZWFkKCZvYmplY3QtPmNvb2tpZV9saW5rLCAmY29va2llLT5iYWNraW5nX29iamVjdHMpOworCXJldCA9IDA7CisKK2NhbnRfYXR0YWNoX29iamVjdDoKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogdXBkYXRlIHRoZSBpbmRleCBlbnRyaWVzIGJhY2tpbmcgYSBjb29raWUKKyAqLwordm9pZCBfX2ZzY2FjaGVfdXBkYXRlX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqX3A7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl91cGRhdGVzKTsKKworCWlmICghY29va2llKSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3VwZGF0ZXNfbnVsbCk7CisJCV9sZWF2ZSgiIFtubyBjb29raWVdIik7CisJCXJldHVybjsKKwl9CisKKwlfZW50ZXIoInslc30iLCBjb29raWUtPmRlZi0+bmFtZSk7CisKKwlCVUdfT04oIWNvb2tpZS0+ZGVmLT5nZXRfYXV4KTsKKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCS8qIHVwZGF0ZSB0aGUgaW5kZXggZW50cnkgb24gZGlzayBpbiBlYWNoIGNhY2hlIGJhY2tpbmcgdGhpcyBjb29raWUgKi8KKwlobGlzdF9mb3JfZWFjaF9lbnRyeShvYmplY3QsIF9wLAorCQkJICAgICAmY29va2llLT5iYWNraW5nX29iamVjdHMsIGNvb2tpZV9saW5rKSB7CisJCWZzY2FjaGVfcmFpc2VfZXZlbnQob2JqZWN0LCBGU0NBQ0hFX09CSkVDVF9FVl9VUERBVEUpOworCX0KKworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCV9sZWF2ZSgiIik7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV91cGRhdGVfY29va2llKTsKKworLyoKKyAqIHJlbGVhc2UgYSBjb29raWUgYmFjayB0byB0aGUgY2FjaGUKKyAqIC0gdGhlIG9iamVjdCB3aWxsIGJlIG1hcmtlZCBhcyByZWN5Y2xhYmxlIG9uIGRpc2sgaWYgcmV0aXJlIGlzIHRydWUKKyAqIC0gYWxsIGRlcGVuZGVudHMgb2YgdGhpcyBjb29raWUgbXVzdCBoYXZlIGFscmVhZHkgYmVlbiB1bnJlZ2lzdGVyZWQKKyAqICAgKGluZGljZXMvZmlsZXMvcGFnZXMpCisgKi8KK3ZvaWQgX19mc2NhY2hlX3JlbGlucXVpc2hfY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLCBpbnQgcmV0aXJlKQoreworCXN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZTsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwl1bnNpZ25lZCBsb25nIGV2ZW50OworCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmVsaW5xdWlzaGVzKTsKKworCWlmICghY29va2llKSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JlbGlucXVpc2hlc19udWxsKTsKKwkJX2xlYXZlKCIgW25vIGNvb2tpZV0iKTsKKwkJcmV0dXJuOworCX0KKworCV9lbnRlcigiJXB7JXMsJXB9LCVkIiwKKwkgICAgICAgY29va2llLCBjb29raWUtPmRlZi0+bmFtZSwgY29va2llLT5uZXRmc19kYXRhLCByZXRpcmUpOworCisJaWYgKGF0b21pY19yZWFkKCZjb29raWUtPm5fY2hpbGRyZW4pICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGUy1DYWNoZTogQ29va2llICclcycgc3RpbGwgaGFzIGNoaWxkcmVuXG4iLAorCQkgICAgICAgY29va2llLT5kZWYtPm5hbWUpOworCQlCVUcoKTsKKwl9CisKKwkvKiB3YWl0IGZvciB0aGUgY29va2llIHRvIGZpbmlzaCBiZWluZyBpbnN0YW50aWF0ZWQgKG9yIHRvIGZhaWwpICovCisJaWYgKHRlc3RfYml0KEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HLCAmY29va2llLT5mbGFncykpIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmVsaW5xdWlzaGVzX3dhaXRjcnQpOworCQl3YWl0X29uX2JpdCgmY29va2llLT5mbGFncywgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcsCisJCQkgICAgZnNjYWNoZV93YWl0X2JpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCX0KKworCWV2ZW50ID0gcmV0aXJlID8gRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFIDogRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRTsKKworCS8qIGRldGFjaCBwb2ludGVycyBiYWNrIHRvIHRoZSBuZXRmcyAqLworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCWNvb2tpZS0+bmV0ZnNfZGF0YQk9IE5VTEw7CisJY29va2llLT5kZWYJCT0gTlVMTDsKKworCS8qIGJyZWFrIGxpbmtzIHdpdGggYWxsIHRoZSBhY3RpdmUgb2JqZWN0cyAqLworCXdoaWxlICghaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSkgeworCQlvYmplY3QgPSBobGlzdF9lbnRyeShjb29raWUtPmJhY2tpbmdfb2JqZWN0cy5maXJzdCwKKwkJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwKKwkJCQkgICAgIGNvb2tpZV9saW5rKTsKKworCQlfZGVidWcoIlJFTEVBU0UgT0JKJXgiLCBvYmplY3QtPmRlYnVnX2lkKTsKKworCQkvKiBkZXRhY2ggZWFjaCBjYWNoZSBvYmplY3QgZnJvbSB0aGUgb2JqZWN0IGNvb2tpZSAqLworCQlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJCWhsaXN0X2RlbF9pbml0KCZvYmplY3QtPmNvb2tpZV9saW5rKTsKKworCQljYWNoZSA9IG9iamVjdC0+Y2FjaGU7CisJCW9iamVjdC0+Y29va2llID0gTlVMTDsKKwkJZnNjYWNoZV9yYWlzZV9ldmVudChvYmplY3QsIGV2ZW50KTsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNvb2tpZS0+dXNhZ2UpKQorCQkJLyogdGhlIGNvb2tpZSByZWZjb3VudCBzaG91bGRuJ3QgYmUgcmVkdWNlZCB0byAwIHlldCAqLworCQkJQlVHKCk7CisJfQorCisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAoY29va2llLT5wYXJlbnQpIHsKKwkJQVNTRVJUQ01QKGF0b21pY19yZWFkKCZjb29raWUtPnBhcmVudC0+dXNhZ2UpLCA+LCAwKTsKKwkJQVNTRVJUQ01QKGF0b21pY19yZWFkKCZjb29raWUtPnBhcmVudC0+bl9jaGlsZHJlbiksID4sIDApOworCQlhdG9taWNfZGVjKCZjb29raWUtPnBhcmVudC0+bl9jaGlsZHJlbik7CisJfQorCisJLyogZmluYWxseSBkaXNwb3NlIG9mIHRoZSBjb29raWUgKi8KKwlBU1NFUlRDTVAoYXRvbWljX3JlYWQoJmNvb2tpZS0+dXNhZ2UpLCA+LCAwKTsKKwlmc2NhY2hlX2Nvb2tpZV9wdXQoY29va2llKTsKKworCV9sZWF2ZSgiIik7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZSk7CisKKy8qCisgKiBkZXN0cm95IGEgY29va2llCisgKi8KK3ZvaWQgX19mc2NhY2hlX2Nvb2tpZV9wdXQoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpwYXJlbnQ7CisKKwlfZW50ZXIoIiVwIiwgY29va2llKTsKKworCWZvciAoOzspIHsKKwkJX2RlYnVnKCJGUkVFIENPT0tJRSAlcCIsIGNvb2tpZSk7CisJCXBhcmVudCA9IGNvb2tpZS0+cGFyZW50OworCQlCVUdfT04oIWhsaXN0X2VtcHR5KCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cykpOworCQlrbWVtX2NhY2hlX2ZyZWUoZnNjYWNoZV9jb29raWVfamFyLCBjb29raWUpOworCisJCWlmICghcGFyZW50KQorCQkJYnJlYWs7CisKKwkJY29va2llID0gcGFyZW50OworCQlCVUdfT04oYXRvbWljX3JlYWQoJmNvb2tpZS0+dXNhZ2UpIDw9IDApOworCQlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmNvb2tpZS0+dXNhZ2UpKQorCQkJYnJlYWs7CisJfQorCisJX2xlYXZlKCIiKTsKK30KZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvZnNkZWYuYyBiL2ZzL2ZzY2FjaGUvZnNkZWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWI0YmFlCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9mc2RlZi5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKiBGaWxlc3lzdGVtIGluZGV4IGRlZmluaXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgQ0FDSEUKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgdWludDE2X3QgZnNjYWNoZV9mc2RlZl9uZXRmc19nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpOworCitzdGF0aWMgdWludDE2X3QgZnNjYWNoZV9mc2RlZl9uZXRmc19nZXRfYXV4KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpOworCitzdGF0aWMKK2VudW0gZnNjYWNoZV9jaGVja2F1eCBmc2NhY2hlX2ZzZGVmX25ldGZzX2NoZWNrX2F1eCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJCSAgICBjb25zdCB2b2lkICpkYXRhLAorCQkJCQkJICAgIHVpbnQxNl90IGRhdGFsZW4pOworCisvKgorICogVGhlIHJvb3QgaW5kZXggaXMgb3duZWQgYnkgRlMtQ2FjaGUgaXRzZWxmLgorICoKKyAqIFdoZW4gYSBuZXRmcyByZXF1ZXN0cyBjYWNoaW5nIGZhY2lsaXRpZXMsIEZTLUNhY2hlIHdpbGwsIGlmIG9uZSBkb2Vzbid0CisgKiBhbHJlYWR5IGV4aXN0LCBjcmVhdGUgYW4gZW50cnkgaW4gdGhlIHJvb3QgaW5kZXggd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lCisgKiBvZiB0aGUgbmV0ZnMgKCJBRlMiIGZvciBleGFtcGxlKSwgYW5kIHRoZSBhdXhpbGlhcnkgZGF0YSBob2xkaW5nIHRoZSBpbmRleAorICogc3RydWN0dXJlIHZlcnNpb24gc3VwcGxpZWQgYnkgdGhlIG5ldGZzOgorICoKKyAqCQkJCSAgICAgRlNERUYKKyAqCQkJCSAgICAgICB8CisgKgkJCQkgKy0tLS0tLS0tLS0tKworICoJCQkJIHwgICAgICAgICAgIHwKKyAqCQkJCU5GUyAgICAgICAgIEFGUworICoJCQkgICAgICAgW3Y9MV0gICAgICAgW3Y9MV0KKyAqCisgKiBJZiBhbiBlbnRyeSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBuYW1lIGRvZXMgYWxyZWFkeSBleGlzdCwgdGhlIHZlcnNpb24gaXMKKyAqIGNvbXBhcmVkLiAgSWYgdGhlIHZlcnNpb24gaXMgZGlmZmVyZW50LCB0aGUgZW50aXJlIHN1YnRyZWUgZnJvbSB0aGF0IGVudHJ5CisgKiB3aWxsIGJlIGRpc2NhcmRlZCBhbmQgYSBuZXcgZW50cnkgY3JlYXRlZC4KKyAqCisgKiBUaGUgbmV3IGVudHJ5IHdpbGwgYmUgYW4gaW5kZXgsIGFuZCBhIGNvb2tpZSByZWZlcnJpbmcgdG8gaXQgd2lsbCBiZSBwYXNzZWQKKyAqIHRvIHRoZSBuZXRmcy4gIFRoaXMgaXMgdGhlbiB0aGUgcm9vdCBoYW5kbGUgYnkgd2hpY2ggdGhlIG5ldGZzIGFjY2Vzc2VzIHRoZQorICogY2FjaGUuICBJdCBjYW4gY3JlYXRlIHdoYXRldmVyIG9iamVjdHMgaXQgbGlrZXMgaW4gdGhhdCBpbmRleCwgaW5jbHVkaW5nCisgKiBmdXJ0aGVyIGluZGljZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGZzY2FjaGVfZnNkZWZfaW5kZXhfZGVmID0geworCS5uYW1lCQk9ICIuRlMtQ2FjaGUiLAorCS50eXBlCQk9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgsCit9OworCitzdHJ1Y3QgZnNjYWNoZV9jb29raWUgZnNjYWNoZV9mc2RlZl9pbmRleCA9IHsKKwkudXNhZ2UJCT0gQVRPTUlDX0lOSVQoMSksCisJLmxvY2sJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoZnNjYWNoZV9mc2RlZl9pbmRleC5sb2NrKSwKKwkuYmFja2luZ19vYmplY3RzID0gSExJU1RfSEVBRF9JTklULAorCS5kZWYJCT0gJmZzY2FjaGVfZnNkZWZfaW5kZXhfZGVmLAorfTsKK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9mc2RlZl9pbmRleCk7CisKKy8qCisgKiBEZWZpbml0aW9uIG9mIGFuIGVudHJ5IGluIHRoZSByb290IGluZGV4LiAgRWFjaCBlbnRyeSBpcyBhbiBpbmRleCwga2V5ZWQgdG8KKyAqIGEgc3BlY2lmaWMgbmV0ZnMgYW5kIG9ubHkgYXBwbGljYWJsZSB0byBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgaW5kZXgKKyAqIHN0cnVjdHVyZSB1c2VkIGJ5IHRoYXQgbmV0ZnMuCisgKi8KK3N0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgZnNjYWNoZV9mc2RlZl9uZXRmc19kZWYgPSB7CisJLm5hbWUJCT0gIkZTREVGLm5ldGZzIiwKKwkudHlwZQkJPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYLAorCS5nZXRfa2V5CT0gZnNjYWNoZV9mc2RlZl9uZXRmc19nZXRfa2V5LAorCS5nZXRfYXV4CT0gZnNjYWNoZV9mc2RlZl9uZXRmc19nZXRfYXV4LAorCS5jaGVja19hdXgJPSBmc2NhY2hlX2ZzZGVmX25ldGZzX2NoZWNrX2F1eCwKK307CisKKy8qCisgKiBnZXQgdGhlIGtleSBkYXRhIGZvciBhbiBGU0RFRiBpbmRleCByZWNvcmQgLSB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBuZXRmcworICogZm9yIHdoaWNoIHRoaXMgZW50cnkgaXMgY3JlYXRlZAorICovCitzdGF0aWMgdWludDE2X3QgZnNjYWNoZV9mc2RlZl9uZXRmc19nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCQkgICAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCit7CisJY29uc3Qgc3RydWN0IGZzY2FjaGVfbmV0ZnMgKm5ldGZzID0gY29va2llX25ldGZzX2RhdGE7CisJdW5zaWduZWQga2xlbjsKKworCV9lbnRlcigieyVzLiV1fSwiLCBuZXRmcy0+bmFtZSwgbmV0ZnMtPnZlcnNpb24pOworCisJa2xlbiA9IHN0cmxlbihuZXRmcy0+bmFtZSk7CisJaWYgKGtsZW4gPiBidWZtYXgpCisJCXJldHVybiAwOworCisJbWVtY3B5KGJ1ZmZlciwgbmV0ZnMtPm5hbWUsIGtsZW4pOworCXJldHVybiBrbGVuOworfQorCisvKgorICogZ2V0IHRoZSBhdXhpbGlhcnkgZGF0YSBmb3IgYW4gRlNERUYgaW5kZXggcmVjb3JkIC0gdGhpcyBpcyB0aGUgaW5kZXgKKyAqIHN0cnVjdHVyZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbmV0ZnMgZm9yIHdoaWNoIHRoaXMgdmVyc2lvbiBpcyBjcmVhdGVkCisgKi8KK3N0YXRpYyB1aW50MTZfdCBmc2NhY2hlX2ZzZGVmX25ldGZzX2dldF9hdXgoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqbmV0ZnMgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwl1bnNpZ25lZCBkbGVuOworCisJX2VudGVyKCJ7JXMuJXV9LCIsIG5ldGZzLT5uYW1lLCBuZXRmcy0+dmVyc2lvbik7CisKKwlkbGVuID0gc2l6ZW9mKHVpbnQzMl90KTsKKwlpZiAoZGxlbiA+IGJ1Zm1heCkKKwkJcmV0dXJuIDA7CisKKwltZW1jcHkoYnVmZmVyLCAmbmV0ZnMtPnZlcnNpb24sIGRsZW4pOworCXJldHVybiBkbGVuOworfQorCisvKgorICogY2hlY2sgdGhhdCB0aGUgaW5kZXggc3RydWN0dXJlIHZlcnNpb24gbnVtYmVyIHN0b3JlZCBpbiB0aGUgYXV4aWxpYXJ5IGRhdGEKKyAqIG1hdGNoZXMgdGhlIG9uZSB0aGUgbmV0ZnMgZ2F2ZSB1cworICovCitzdGF0aWMgZW51bSBmc2NhY2hlX2NoZWNrYXV4IGZzY2FjaGVfZnNkZWZfbmV0ZnNfY2hlY2tfYXV4KAorCXZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCWNvbnN0IHZvaWQgKmRhdGEsCisJdWludDE2X3QgZGF0YWxlbikKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqbmV0ZnMgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwl1aW50MzJfdCB2ZXJzaW9uOworCisJX2VudGVyKCJ7JXN9LCwlaHUiLCBuZXRmcy0+bmFtZSwgZGF0YWxlbik7CisKKwlpZiAoZGF0YWxlbiAhPSBzaXplb2YodmVyc2lvbikpIHsKKwkJX2xlYXZlKCIgPSBPQlNPTEVURSBbZGw9JWQgdj0lenVdIiwgZGF0YWxlbiwgc2l6ZW9mKHZlcnNpb24pKTsKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CisJfQorCisJbWVtY3B5KCZ2ZXJzaW9uLCBkYXRhLCBzaXplb2YodmVyc2lvbikpOworCWlmICh2ZXJzaW9uICE9IG5ldGZzLT52ZXJzaW9uKSB7CisJCV9sZWF2ZSgiID0gT0JTT0xFVEUgW3Zlcj0leCBuZXQ9JXhdIiwgdmVyc2lvbiwgbmV0ZnMtPnZlcnNpb24pOworCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PQlNPTEVURTsKKwl9CisKKwlfbGVhdmUoIiA9IE9LQVkiKTsKKwlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PS0FZOworfQpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9oaXN0b2dyYW0uYyBiL2ZzL2ZzY2FjaGUvaGlzdG9ncmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkNDk2NwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvaGlzdG9ncmFtLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qIEZTLUNhY2hlIGxhdGVuY3kgaGlzdG9ncmFtCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19MRVZFTCBUSFJFQUQKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCithdG9taWNfdCBmc2NhY2hlX29ial9pbnN0YW50aWF0ZV9oaXN0b2dyYW1bSFpdOworYXRvbWljX3QgZnNjYWNoZV9vYmpzX2hpc3RvZ3JhbVtIWl07CithdG9taWNfdCBmc2NhY2hlX29wc19oaXN0b2dyYW1bSFpdOworYXRvbWljX3QgZnNjYWNoZV9yZXRyaWV2YWxfZGVsYXlfaGlzdG9ncmFtW0haXTsKK2F0b21pY190IGZzY2FjaGVfcmV0cmlldmFsX2hpc3RvZ3JhbVtIWl07CisKKy8qCisgKiBkaXNwbGF5IHRoZSB0aW1lLXRha2VuIGhpc3RvZ3JhbQorICovCitzdGF0aWMgaW50IGZzY2FjaGVfaGlzdG9ncmFtX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisJdW5zaWduZWQgbls1XSwgdDsKKworCXN3aXRjaCAoKHVuc2lnbmVkIGxvbmcpIHYpIHsKKwljYXNlIDE6CisJCXNlcV9wdXRzKG0sICJKSUZTICBTRUNTICBPQkogSU5TVCAgT1AgUlVOUyAgIE9CSiBSVU5TICIKKwkJCSAiIFJFVFJWIERMWSBSRVRSSUVWTFNcbiIpOworCQlyZXR1cm4gMDsKKwljYXNlIDI6CisJCXNlcV9wdXRzKG0sICI9PT09PSA9PT09PSA9PT09PT09PT0gPT09PT09PT09ID09PT09PT09PSIKKwkJCSAiID09PT09PT09PSA9PT09PT09PT1cbiIpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlpbmRleCA9ICh1bnNpZ25lZCBsb25nKSB2IC0gMzsKKwkJblswXSA9IGF0b21pY19yZWFkKCZmc2NhY2hlX29ial9pbnN0YW50aWF0ZV9oaXN0b2dyYW1baW5kZXhdKTsKKwkJblsxXSA9IGF0b21pY19yZWFkKCZmc2NhY2hlX29wc19oaXN0b2dyYW1baW5kZXhdKTsKKwkJblsyXSA9IGF0b21pY19yZWFkKCZmc2NhY2hlX29ianNfaGlzdG9ncmFtW2luZGV4XSk7CisJCW5bM10gPSBhdG9taWNfcmVhZCgmZnNjYWNoZV9yZXRyaWV2YWxfZGVsYXlfaGlzdG9ncmFtW2luZGV4XSk7CisJCW5bNF0gPSBhdG9taWNfcmVhZCgmZnNjYWNoZV9yZXRyaWV2YWxfaGlzdG9ncmFtW2luZGV4XSk7CisJCWlmICghKG5bMF0gfCBuWzFdIHwgblsyXSB8IG5bM10gfCBuWzRdKSkKKwkJCXJldHVybiAwOworCisJCXQgPSAoaW5kZXggKiAxMDAwKSAvIEhaOworCisJCXNlcV9wcmludGYobSwgIiU0bHUgIDAuJTAzdSAlOXUgJTl1ICU5dSAlOXUgJTl1XG4iLAorCQkJICAgaW5kZXgsIHQsIG5bMF0sIG5bMV0sIG5bMl0sIG5bM10sIG5bNF0pOworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qCisgKiBzZXQgdXAgdGhlIGl0ZXJhdG9yIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZmlyc3QgbGluZQorICovCitzdGF0aWMgdm9pZCAqZnNjYWNoZV9oaXN0b2dyYW1fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKl9wb3MpCit7CisJaWYgKCh1bnNpZ25lZCBsb25nIGxvbmcpKl9wb3MgPj0gSFogKyAyKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoKl9wb3MgPT0gMCkKKwkJKl9wb3MgPSAxOworCXJldHVybiAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSAqX3BvczsKK30KKworLyoKKyAqIG1vdmUgdG8gdGhlIG5leHQgbGluZQorICovCitzdGF0aWMgdm9pZCAqZnNjYWNoZV9oaXN0b2dyYW1fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCSgqcG9zKSsrOworCXJldHVybiAodW5zaWduZWQgbG9uZyBsb25nKSpwb3MgPiBIWiArIDIgPworCQlOVUxMIDogKHZvaWQgKikodW5zaWduZWQgbG9uZykgKnBvczsKK30KKworLyoKKyAqIGNsZWFuIHVwIGFmdGVyIHJlYWRpbmcKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9oaXN0b2dyYW1fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgZnNjYWNoZV9oaXN0b2dyYW1fb3BzID0geworCS5zdGFydAkJPSBmc2NhY2hlX2hpc3RvZ3JhbV9zdGFydCwKKwkuc3RvcAkJPSBmc2NhY2hlX2hpc3RvZ3JhbV9zdG9wLAorCS5uZXh0CQk9IGZzY2FjaGVfaGlzdG9ncmFtX25leHQsCisJLnNob3cJCT0gZnNjYWNoZV9oaXN0b2dyYW1fc2hvdywKK307CisKKy8qCisgKiBvcGVuICIvcHJvYy9mcy9mc2NhY2hlL2hpc3RvZ3JhbSIgdG8gcHJvdmlkZSBsYXRlbmN5IGRhdGEKKyAqLworc3RhdGljIGludCBmc2NhY2hlX2hpc3RvZ3JhbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzZXFfb3BlbihmaWxlLCAmZnNjYWNoZV9oaXN0b2dyYW1fb3BzKTsKK30KKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmc2NhY2hlX2hpc3RvZ3JhbV9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBmc2NhY2hlX2hpc3RvZ3JhbV9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9pbnRlcm5hbC5oIGIvZnMvZnNjYWNoZS9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwY2JkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9mc2NhY2hlL2ludGVybmFsLmgKQEAgLTAsMCArMSwzODAgQEAKKy8qIEludGVybmFsIGRlZmluaXRpb25zIGZvciBGUy1DYWNoZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBMb2NrIG9yZGVyLCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggbXVsdGlwbGUgbG9ja3Mgc2hvdWxkIGJlIG9idGFpbmVkOgorICogLSBmc2NhY2hlX2FkZHJlbW92ZV9zZW0KKyAqIC0gY29va2llLT5sb2NrCisgKiAtIGNvb2tpZS0+cGFyZW50LT5sb2NrCisgKiAtIGNhY2hlLT5vYmplY3RfbGlzdF9sb2NrCisgKiAtIG9iamVjdC0+bG9jaworICogLSBvYmplY3QtPnBhcmVudC0+bG9jaworICogLSBmc2NhY2hlX3RocmVhZF9sb2NrCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLWNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2RlZmluZSBGU0NBQ0hFX01JTl9USFJFQURTCTQKKyNkZWZpbmUgRlNDQUNIRV9NQVhfVEhSRUFEUwkzMgorCisvKgorICogZnNjLWNhY2hlLmMKKyAqLworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZnNjYWNoZV9jYWNoZV9saXN0OworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgZnNjYWNoZV9hZGRyZW1vdmVfc2VtOworCitleHRlcm4gc3RydWN0IGZzY2FjaGVfY2FjaGUgKmZzY2FjaGVfc2VsZWN0X2NhY2hlX2Zvcl9vYmplY3QoCisJc3RydWN0IGZzY2FjaGVfY29va2llICopOworCisvKgorICogZnNjLWNvb2tpZS5jCisgKi8KK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZnNjYWNoZV9jb29raWVfamFyOworCitleHRlcm4gdm9pZCBmc2NhY2hlX2Nvb2tpZV9pbml0X29uY2Uodm9pZCAqKTsKK2V4dGVybiB2b2lkIF9fZnNjYWNoZV9jb29raWVfcHV0KHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqKTsKKworLyoKKyAqIGZzYy1mc2RlZi5jCisgKi8KK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jb29raWUgZnNjYWNoZV9mc2RlZl9pbmRleDsKK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIGZzY2FjaGVfZnNkZWZfbmV0ZnNfZGVmOworCisvKgorICogZnNjLWhpc3RvZ3JhbS5jCisgKi8KKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0KK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX29ial9pbnN0YW50aWF0ZV9oaXN0b2dyYW1bSFpdOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfb2Jqc19oaXN0b2dyYW1bSFpdOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfb3BzX2hpc3RvZ3JhbVtIWl07CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9yZXRyaWV2YWxfZGVsYXlfaGlzdG9ncmFtW0haXTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX3JldHJpZXZhbF9oaXN0b2dyYW1bSFpdOworCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9oaXN0KGF0b21pY190IGhpc3RvZ3JhbVtdLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2ppZikKK3sKKwl1bnNpZ25lZCBsb25nIGppZiA9IGppZmZpZXMgLSBzdGFydF9qaWY7CisJaWYgKGppZiA+PSBIWikKKwkJamlmID0gSFogLSAxOworCWF0b21pY19pbmMoJmhpc3RvZ3JhbVtqaWZdKTsKK30KKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnNjYWNoZV9oaXN0b2dyYW1fZm9wczsKKworI2Vsc2UKKyNkZWZpbmUgZnNjYWNoZV9oaXN0KGhpc3QsIHN0YXJ0X2ppZikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLyoKKyAqIGZzYy1tYWluLmMKKyAqLworZXh0ZXJuIHVuc2lnbmVkIGZzY2FjaGVfZGVmZXJfbG9va3VwOworZXh0ZXJuIHVuc2lnbmVkIGZzY2FjaGVfZGVmZXJfY3JlYXRlOworZXh0ZXJuIHVuc2lnbmVkIGZzY2FjaGVfZGVidWc7CitleHRlcm4gc3RydWN0IGtvYmplY3QgKmZzY2FjaGVfcm9vdDsKKworZXh0ZXJuIGludCBmc2NhY2hlX3dhaXRfYml0KHZvaWQgKik7CitleHRlcm4gaW50IGZzY2FjaGVfd2FpdF9iaXRfaW50ZXJydXB0aWJsZSh2b2lkICopOworCisvKgorICogZnNjLW9iamVjdC5jCisgKi8KK2V4dGVybiB2b2lkIGZzY2FjaGVfd2l0aGRyYXdpbmdfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX2NhY2hlICosCisJCQkJICAgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKK2V4dGVybiB2b2lkIGZzY2FjaGVfZW5xdWV1ZV9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOworCisvKgorICogZnNjLW9wZXJhdGlvbi5jCisgKi8KK2V4dGVybiBpbnQgZnNjYWNoZV9zdWJtaXRfZXhjbHVzaXZlX29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqLAorCQkJCSAgICAgICBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKik7CitleHRlcm4gaW50IGZzY2FjaGVfc3VibWl0X29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqLAorCQkJICAgICBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKik7CitleHRlcm4gdm9pZCBmc2NhY2hlX2Fib3J0X29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CitleHRlcm4gdm9pZCBmc2NhY2hlX3N0YXJ0X29wZXJhdGlvbnMoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOworZXh0ZXJuIHZvaWQgZnNjYWNoZV9vcGVyYXRpb25fZ2Moc3RydWN0IHdvcmtfc3RydWN0ICopOworCisvKgorICogZnNjLXByb2MuYworICovCisjaWZkZWYgQ09ORklHX1BST0NfRlMKK2V4dGVybiBpbnQgX19pbml0IGZzY2FjaGVfcHJvY19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZnNjYWNoZV9wcm9jX2NsZWFudXAodm9pZCk7CisjZWxzZQorI2RlZmluZSBmc2NhY2hlX3Byb2NfaW5pdCgpCSgwKQorI2RlZmluZSBmc2NhY2hlX3Byb2NfY2xlYW51cCgpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiBmc2Mtc3RhdHMuYworICovCisjaWZkZWYgQ09ORklHX0ZTQ0FDSEVfU1RBVFMKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb3BzX3Byb2Nlc3NlZFtGU0NBQ0hFX01BWF9USFJFQURTXTsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb2Jqc19wcm9jZXNzZWRbRlNDQUNIRV9NQVhfVEhSRUFEU107CisKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb3BfcGVuZDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb3BfcnVuOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vcF9lbnF1ZXVlOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vcF9kZWZlcnJlZF9yZWxlYXNlOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vcF9yZWxlYXNlOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vcF9nYzsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWQ7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9vazsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX25vYnVmczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX25vbWVtOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfY2FsbHM7CisKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWxsb2NzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hbGxvY3Nfb2s7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jc193YWl0OworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hbGxvY3Nfbm9idWZzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hbGxvY19vcHM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jX29wX3dhaXRzOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfb2s7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfd2FpdDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19ub2RhdGE7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9idWZzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX2ludHI7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9tZW07CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbF9vcHM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbF9vcF93YWl0czsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZXM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3N0b3Jlc19vazsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fc3RvcmVzX2FnYWluOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZXNfbm9idWZzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZXNfb29tOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9zdG9yZV9vcHM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlX2NhbGxzOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX21hcmtzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl91bmNhY2hlczsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hY3F1aXJlczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWNxdWlyZXNfbnVsbDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fYWNxdWlyZXNfbm9fY2FjaGU7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX29rOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9hY3F1aXJlc19ub2J1ZnM7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX29vbTsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl91cGRhdGVzOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl91cGRhdGVzX251bGw7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3VwZGF0ZXNfcnVuOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JlbGlucXVpc2hlczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fcmVsaW5xdWlzaGVzX251bGw7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX3JlbGlucXVpc2hlc193YWl0Y3J0OworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2Nvb2tpZV9pbmRleDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fY29va2llX2RhdGE7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2Nvb2tpZV9zcGVjaWFsOworCitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9hbGxvYzsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X25vX2FsbG9jOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3RfbG9va3VwczsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfbmVnYXRpdmU7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9sb29rdXBzX3Bvc2l0aXZlOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3RfY3JlYXRlZDsKK2V4dGVybiBhdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2F2YWlsOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9vYmplY3RfZGVhZDsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF9ub25lOworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF9va2F5OworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF91cGRhdGU7CitleHRlcm4gYXRvbWljX3QgZnNjYWNoZV9uX2NoZWNrYXV4X29ic29sZXRlOworCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9zdGF0KGF0b21pY190ICpzdGF0KQoreworCWF0b21pY19pbmMoc3RhdCk7Cit9CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZzY2FjaGVfc3RhdHNfZm9wczsKKyNlbHNlCisKKyNkZWZpbmUgZnNjYWNoZV9zdGF0KHN0YXQpIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiByYWlzZSBhbiBldmVudCBvbiBhbiBvYmplY3QKKyAqIC0gaWYgdGhlIGV2ZW50IGlzIG5vdCBtYXNrZWQgZm9yIHRoYXQgb2JqZWN0LCB0aGVuIHRoZSBvYmplY3QgaXMKKyAqICAgcXVldWVkIGZvciBhdHRlbnRpb24gYnkgdGhlIHRocmVhZCBwb29sLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9yYWlzZV9ldmVudChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCQkgICAgICAgdW5zaWduZWQgZXZlbnQpCit7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGV2ZW50LCAmb2JqZWN0LT5ldmVudHMpICYmCisJICAgIHRlc3RfYml0KGV2ZW50LCAmb2JqZWN0LT5ldmVudF9tYXNrKSkKKwkJZnNjYWNoZV9lbnF1ZXVlX29iamVjdChvYmplY3QpOworfQorCisvKgorICogZHJvcCBhIHJlZmVyZW5jZSB0byBhIGNvb2tpZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9jb29raWVfcHV0KHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKQoreworCUJVR19PTihhdG9taWNfcmVhZCgmY29va2llLT51c2FnZSkgPD0gMCk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNvb2tpZS0+dXNhZ2UpKQorCQlfX2ZzY2FjaGVfY29va2llX3B1dChjb29raWUpOworfQorCisvKgorICogZ2V0IGFuIGV4dHJhIHJlZmVyZW5jZSB0byBhIG5ldGZzIHJldHJpZXZhbCBjb250ZXh0CisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgKmZzY2FjaGVfZ2V0X2NvbnRleHQoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsIHZvaWQgKmNvbnRleHQpCit7CisJaWYgKGNvb2tpZS0+ZGVmLT5nZXRfY29udGV4dCkKKwkJY29va2llLT5kZWYtPmdldF9jb250ZXh0KGNvb2tpZS0+bmV0ZnNfZGF0YSwgY29udGV4dCk7CisJcmV0dXJuIGNvbnRleHQ7Cit9CisKKy8qCisgKiByZWxlYXNlIGEgcmVmZXJlbmNlIHRvIGEgbmV0ZnMgcmV0cmlldmFsIGNvbnRleHQKKyAqLworc3RhdGljIGlubGluZQordm9pZCBmc2NhY2hlX3B1dF9jb250ZXh0KHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLCB2b2lkICpjb250ZXh0KQoreworCWlmIChjb29raWUtPmRlZi0+cHV0X2NvbnRleHQpCisJCWNvb2tpZS0+ZGVmLT5wdXRfY29udGV4dChjb29raWUtPm5ldGZzX2RhdGEsIGNvbnRleHQpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogZGVidWcgdHJhY2luZworICovCisjZGVmaW5lIGRiZ3ByaW50ayhGTVQsIC4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHICJbJS02LjZzXSAiRk1UIlxuIiwgY3VycmVudC0+Y29tbSwgIyNfX1ZBX0FSR1NfXykKKworLyogbWFrZSBzdXJlIHdlIG1haW50YWluIHRoZSBmb3JtYXQgc3RyaW5ncywgZXZlbiB3aGVuIGRlYnVnZ2luZyBpcyBkaXNhYmxlZCAqLworc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpCit2b2lkIF9kYnByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKK30KKworI2RlZmluZSBrZW50ZXIoRk1ULCAuLi4pIGRiZ3ByaW50aygiPT0+ICVzKCJGTVQiKSIsIF9fZnVuY19fLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBrbGVhdmUoRk1ULCAuLi4pIGRiZ3ByaW50aygiPD09ICVzKCkiRk1UIiIsIF9fZnVuY19fLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBrZGVidWcoRk1ULCAuLi4pIGRiZ3ByaW50ayhGTVQsICMjX19WQV9BUkdTX18pCisKKyNkZWZpbmUga2pvdXJuYWwoRk1ULCAuLi4pIF9kYnByaW50ayhGTVQsICMjX19WQV9BUkdTX18pCisKKyNpZmRlZiBfX0tERUJVRworI2RlZmluZSBfZW50ZXIoRk1ULCAuLi4pIGtlbnRlcihGTVQsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIF9sZWF2ZShGTVQsIC4uLikga2xlYXZlKEZNVCwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKSBrZGVidWcoRk1ULCAjI19fVkFfQVJHU19fKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19GU0NBQ0hFX0RFQlVHKQorI2RlZmluZSBfZW50ZXIoRk1ULCAuLi4pCQkJXAorZG8gewkJCQkJCVwKKwlpZiAoX19kb19rZGVidWcoRU5URVIpKQkJCVwKKwkJa2VudGVyKEZNVCwgIyNfX1ZBX0FSR1NfXyk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgX2xlYXZlKEZNVCwgLi4uKQkJCVwKK2RvIHsJCQkJCQlcCisJaWYgKF9fZG9fa2RlYnVnKExFQVZFKSkJCQlcCisJCWtsZWF2ZShGTVQsICMjX19WQV9BUkdTX18pOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9kZWJ1ZyhGTVQsIC4uLikJCQlcCitkbyB7CQkJCQkJXAorCWlmIChfX2RvX2tkZWJ1ZyhERUJVRykpCQkJXAorCQlrZGVidWcoRk1ULCAjI19fVkFfQVJHU19fKTsJXAorfSB3aGlsZSAoMCkKKworI2Vsc2UKKyNkZWZpbmUgX2VudGVyKEZNVCwgLi4uKSBfZGJwcmludGsoIj09PiAlcygiRk1UIikiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2xlYXZlKEZNVCwgLi4uKSBfZGJwcmludGsoIjw9PSAlcygpIkZNVCIiLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgX2RlYnVnKEZNVCwgLi4uKSBfZGJwcmludGsoRk1ULCAjI19fVkFfQVJHU19fKQorI2VuZGlmCisKKy8qCisgKiBkZXRlcm1pbmUgd2hldGhlciBhIHBhcnRpY3VsYXIgb3B0aW9uYWwgZGVidWdnaW5nIHBvaW50IHNob3VsZCBiZSBsb2dnZWQKKyAqIC0gd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRocmVlIHN0ZXBzIHRvIHBlcnN1YWRlIGNwcCB0byBjb3JyZWN0bHkgam9pbiB0aGUKKyAqICAgc2hvcnRoYW5kIGluIEZTQ0FDSEVfREVCVUdfTEVWRUwgd2l0aCBpdHMgcHJlZml4CisgKi8KKyNkZWZpbmUgX19fX2RvX2tkZWJ1ZyhMRVZFTCwgUE9JTlQpIFwKKwl1bmxpa2VseSgoZnNjYWNoZV9kZWJ1ZyAmIFwKKwkJICAoRlNDQUNIRV9QT0lOVF8jI1BPSU5UIDw8IChGU0NBQ0hFX0RFQlVHXyAjIyBMRVZFTCAqIDMpKSkpCisjZGVmaW5lIF9fX2RvX2tkZWJ1ZyhMRVZFTCwgUE9JTlQpIFwKKwlfX19fZG9fa2RlYnVnKExFVkVMLCBQT0lOVCkKKyNkZWZpbmUgX19kb19rZGVidWcoUE9JTlQpIFwKKwlfX19kb19rZGVidWcoRlNDQUNIRV9ERUJVR19MRVZFTCwgUE9JTlQpCisKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19DQUNIRQkwCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfQ09PS0lFCTEKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19QQUdFCTIKKyNkZWZpbmUgRlNDQUNIRV9ERUJVR19PUEVSQVRJT04JMworCisjZGVmaW5lIEZTQ0FDSEVfUE9JTlRfRU5URVIJMQorI2RlZmluZSBGU0NBQ0hFX1BPSU5UX0xFQVZFCTIKKyNkZWZpbmUgRlNDQUNIRV9QT0lOVF9ERUJVRwk0CisKKyNpZm5kZWYgRlNDQUNIRV9ERUJVR19MRVZFTAorI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0xFVkVMIENBQ0hFCisjZW5kaWYKKworLyoKKyAqIGFzc2VydGlvbnMKKyAqLworI2lmIDEgLyogZGVmaW5lZChfX0tERUJVR0FMTCkgKi8KKworI2RlZmluZSBBU1NFUlQoWCkJCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoIShYKSkpIHsJCQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJGUy1DYWNoZTogQXNzZXJ0aW9uIGZhaWxlZFxuIik7CVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEFTU0VSVENNUChYLCBPUCwgWSkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICh1bmxpa2VseSghKChYKSBPUCAoWSkpKSkgewkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIlxuIik7CQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiRlMtQ2FjaGU6IEFzc2VydGlvbiBmYWlsZWRcbiIpOwlcCisJCXByaW50ayhLRVJOX0VSUiAiJWx4ICIgI09QICIgJWx4IGlzIGZhbHNlXG4iLAkJXAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKFgpLCAodW5zaWduZWQgbG9uZykoWSkpOwkJXAorCQlCVUcoKTsJCQkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgQVNTRVJUSUYoQywgWCkJCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoKEMpICYmICEoWCkpKSB7CQkJCQlcCisJCXByaW50ayhLRVJOX0VSUiAiXG4iKTsJCQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJGUy1DYWNoZTogQXNzZXJ0aW9uIGZhaWxlZFxuIik7CVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIEFTU0VSVElGQ01QKEMsIFgsIE9QLCBZKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoKEMpICYmICEoKFgpIE9QIChZKSkpKSB7CQkJCVwKKwkJcHJpbnRrKEtFUk5fRVJSICJcbiIpOwkJCQkJXAorCQlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiBBc3NlcnRpb24gZmFpbGVkXG4iKTsJXAorCQlwcmludGsoS0VSTl9FUlIgIiVseCAiICNPUCAiICVseCBpcyBmYWxzZVxuIiwJCVwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKShYKSwgKHVuc2lnbmVkIGxvbmcpKFkpKTsJCVwKKwkJQlVHKCk7CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIEFTU0VSVChYKQkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBBU1NFUlRDTVAoWCwgT1AsIFkpCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQVNTRVJUSUYoQywgWCkJCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgQVNTRVJUSUZDTVAoQywgWCwgT1AsIFkpCWRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYgLyogYXNzZXJ0IG9yIG5vdCAqLwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9tYWluLmMgYi9mcy9mc2NhY2hlL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGU0MWI1Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9tYWluLmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qIEdlbmVyYWwgZmlsZXN5c3RlbSBsb2NhbCBjYWNoaW5nIG1hbmFnZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgQ0FDSEUKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK01PRFVMRV9ERVNDUklQVElPTigiRlMgQ2FjaGUgTWFuYWdlciIpOworTU9EVUxFX0FVVEhPUigiUmVkIEhhdCwgSW5jLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCit1bnNpZ25lZCBmc2NhY2hlX2RlZmVyX2xvb2t1cCA9IDE7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVmZXJfbG9va3VwLCBmc2NhY2hlX2RlZmVyX2xvb2t1cCwgdWludCwKKwkJICAgU19JV1VTUiB8IFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhmc2NhY2hlX2RlZmVyX2xvb2t1cCwKKwkJICJEZWZlciBjb29raWUgbG9va3VwIHRvIGJhY2tncm91bmQgdGhyZWFkIik7CisKK3Vuc2lnbmVkIGZzY2FjaGVfZGVmZXJfY3JlYXRlID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWZlcl9jcmVhdGUsIGZzY2FjaGVfZGVmZXJfY3JlYXRlLCB1aW50LAorCQkgICBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGZzY2FjaGVfZGVmZXJfY3JlYXRlLAorCQkgIkRlZmVyIGNvb2tpZSBjcmVhdGlvbiB0byBiYWNrZ3JvdW5kIHRocmVhZCIpOworCit1bnNpZ25lZCBmc2NhY2hlX2RlYnVnOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBmc2NhY2hlX2RlYnVnLCB1aW50LAorCQkgICBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGZzY2FjaGVfZGVidWcsCisJCSAiRlMtQ2FjaGUgZGVidWdnaW5nIG1hc2siKTsKKworc3RydWN0IGtvYmplY3QgKmZzY2FjaGVfcm9vdDsKKworLyoKKyAqIGluaXRpYWxpc2UgdGhlIGZzIGNhY2hpbmcgbW9kdWxlCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGZzY2FjaGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcigpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX3Nsb3dfd29yazsKKworCXJldCA9IGZzY2FjaGVfcHJvY19pbml0KCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3JfcHJvYzsKKworCWZzY2FjaGVfY29va2llX2phciA9IGttZW1fY2FjaGVfY3JlYXRlKCJmc2NhY2hlX2Nvb2tpZV9qYXIiLAorCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSksCisJCQkJCSAgICAgICAwLAorCQkJCQkgICAgICAgMCwKKwkJCQkJICAgICAgIGZzY2FjaGVfY29va2llX2luaXRfb25jZSk7CisJaWYgKCFmc2NhY2hlX2Nvb2tpZV9qYXIpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFCisJCSAgICAgICAiRlMtQ2FjaGU6IEZhaWxlZCB0byBhbGxvY2F0ZSBhIGNvb2tpZSBqYXJcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yX2Nvb2tpZV9qYXI7CisJfQorCisJZnNjYWNoZV9yb290ID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgiZnNjYWNoZSIsIGtlcm5lbF9rb2JqKTsKKwlpZiAoIWZzY2FjaGVfcm9vdCkKKwkJZ290byBlcnJvcl9rb2JqOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJGUy1DYWNoZTogTG9hZGVkXG4iKTsKKwlyZXR1cm4gMDsKKworZXJyb3Jfa29iajoKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZnNjYWNoZV9jb29raWVfamFyKTsKK2Vycm9yX2Nvb2tpZV9qYXI6CisJZnNjYWNoZV9wcm9jX2NsZWFudXAoKTsKK2Vycm9yX3Byb2M6CisJc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlcigpOworZXJyb3Jfc2xvd193b3JrOgorCXJldHVybiByZXQ7Cit9CisKK2ZzX2luaXRjYWxsKGZzY2FjaGVfaW5pdCk7CisKKy8qCisgKiBjbGVhbiB1cCBvbiBtb2R1bGUgcmVtb3ZhbAorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgZnNjYWNoZV9leGl0KHZvaWQpCit7CisJX2VudGVyKCIiKTsKKworCWtvYmplY3RfcHV0KGZzY2FjaGVfcm9vdCk7CisJa21lbV9jYWNoZV9kZXN0cm95KGZzY2FjaGVfY29va2llX2phcik7CisJZnNjYWNoZV9wcm9jX2NsZWFudXAoKTsKKwlzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKCk7CisJcHJpbnRrKEtFUk5fTk9USUNFICJGUy1DYWNoZTogVW5sb2FkZWRcbiIpOworfQorCittb2R1bGVfZXhpdChmc2NhY2hlX2V4aXQpOworCisvKgorICogd2FpdF9vbl9iaXQoKSBzbGVlcCBmdW5jdGlvbiBmb3IgdW5pbnRlcnJ1cHRpYmxlIHdhaXRpbmcKKyAqLworaW50IGZzY2FjaGVfd2FpdF9iaXQodm9pZCAqZmxhZ3MpCit7CisJc2NoZWR1bGUoKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV93YWl0X2JpdCk7CisKKy8qCisgKiB3YWl0X29uX2JpdCgpIHNsZWVwIGZ1bmN0aW9uIGZvciBpbnRlcnJ1cHRpYmxlIHdhaXRpbmcKKyAqLworaW50IGZzY2FjaGVfd2FpdF9iaXRfaW50ZXJydXB0aWJsZSh2b2lkICpmbGFncykKK3sKKwlzY2hlZHVsZSgpOworCXJldHVybiBzaWduYWxfcGVuZGluZyhjdXJyZW50KTsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV93YWl0X2JpdF9pbnRlcnJ1cHRpYmxlKTsKZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvbmV0ZnMuYyBiL2ZzL2ZzY2FjaGUvbmV0ZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDI4YjhlCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9uZXRmcy5jCkBAIC0wLDAgKzEsMTAzIEBACisvKiBGUy1DYWNoZSBuZXRmcyAoY2xpZW50KSByZWdpc3RyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0xFVkVMIENPT0tJRQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgTElTVF9IRUFEKGZzY2FjaGVfbmV0ZnNfbGlzdCk7CisKKy8qCisgKiByZWdpc3RlciBhIG5ldHdvcmsgZmlsZXN5c3RlbSBmb3IgY2FjaGluZworICovCitpbnQgX19mc2NhY2hlX3JlZ2lzdGVyX25ldGZzKHN0cnVjdCBmc2NhY2hlX25ldGZzICpuZXRmcykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqcHRyOworCWludCByZXQ7CisKKwlfZW50ZXIoInslc30iLCBuZXRmcy0+bmFtZSk7CisKKwlJTklUX0xJU1RfSEVBRCgmbmV0ZnMtPmxpbmspOworCisJLyogYWxsb2NhdGUgYSBjb29raWUgZm9yIHRoZSBwcmltYXJ5IGluZGV4ICovCisJbmV0ZnMtPnByaW1hcnlfaW5kZXggPQorCQlrbWVtX2NhY2hlX3phbGxvYyhmc2NhY2hlX2Nvb2tpZV9qYXIsIEdGUF9LRVJORUwpOworCisJaWYgKCFuZXRmcy0+cHJpbWFyeV9pbmRleCkgeworCQlfbGVhdmUoIiA9IC1FTk9NRU0iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogaW5pdGlhbGlzZSB0aGUgcHJpbWFyeSBpbmRleCBjb29raWUgKi8KKwlhdG9taWNfc2V0KCZuZXRmcy0+cHJpbWFyeV9pbmRleC0+dXNhZ2UsIDEpOworCWF0b21pY19zZXQoJm5ldGZzLT5wcmltYXJ5X2luZGV4LT5uX2NoaWxkcmVuLCAwKTsKKworCW5ldGZzLT5wcmltYXJ5X2luZGV4LT5kZWYJCT0gJmZzY2FjaGVfZnNkZWZfbmV0ZnNfZGVmOworCW5ldGZzLT5wcmltYXJ5X2luZGV4LT5wYXJlbnQJCT0gJmZzY2FjaGVfZnNkZWZfaW5kZXg7CisJbmV0ZnMtPnByaW1hcnlfaW5kZXgtPm5ldGZzX2RhdGEJPSBuZXRmczsKKworCWF0b21pY19pbmMoJm5ldGZzLT5wcmltYXJ5X2luZGV4LT5wYXJlbnQtPnVzYWdlKTsKKwlhdG9taWNfaW5jKCZuZXRmcy0+cHJpbWFyeV9pbmRleC0+cGFyZW50LT5uX2NoaWxkcmVuKTsKKworCXNwaW5fbG9ja19pbml0KCZuZXRmcy0+cHJpbWFyeV9pbmRleC0+bG9jayk7CisJSU5JVF9ITElTVF9IRUFEKCZuZXRmcy0+cHJpbWFyeV9pbmRleC0+YmFja2luZ19vYmplY3RzKTsKKworCS8qIGNoZWNrIHRoZSBuZXRmcyB0eXBlIGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgKi8KKwlkb3duX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJcmV0ID0gLUVFWElTVDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmZzY2FjaGVfbmV0ZnNfbGlzdCwgbGluaykgeworCQlpZiAoc3RyY21wKHB0ci0+bmFtZSwgbmV0ZnMtPm5hbWUpID09IDApCisJCQlnb3RvIGFscmVhZHlfcmVnaXN0ZXJlZDsKKwl9CisKKwlsaXN0X2FkZCgmbmV0ZnMtPmxpbmssICZmc2NhY2hlX25ldGZzX2xpc3QpOworCXJldCA9IDA7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkZTLUNhY2hlOiBOZXRmcyAnJXMnIHJlZ2lzdGVyZWQgZm9yIGNhY2hpbmdcbiIsCisJICAgICAgIG5ldGZzLT5uYW1lKTsKKworYWxyZWFkeV9yZWdpc3RlcmVkOgorCXVwX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJaWYgKHJldCA8IDApIHsKKwkJbmV0ZnMtPnByaW1hcnlfaW5kZXgtPnBhcmVudCA9IE5VTEw7CisJCV9fZnNjYWNoZV9jb29raWVfcHV0KG5ldGZzLT5wcmltYXJ5X2luZGV4KTsKKwkJbmV0ZnMtPnByaW1hcnlfaW5kZXggPSBOVUxMOworCX0KKworCV9sZWF2ZSgiID0gJWQiLCByZXQpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV9yZWdpc3Rlcl9uZXRmcyk7CisKKy8qCisgKiB1bnJlZ2lzdGVyIGEgbmV0d29yayBmaWxlc3lzdGVtIGZyb20gdGhlIGNhY2hlCisgKiAtIGFsbCBjb29raWVzIG11c3QgaGF2ZSBiZWVuIHJlbGVhc2VkIGZpcnN0CisgKi8KK3ZvaWQgX19mc2NhY2hlX3VucmVnaXN0ZXJfbmV0ZnMoc3RydWN0IGZzY2FjaGVfbmV0ZnMgKm5ldGZzKQoreworCV9lbnRlcigieyVzLiV1fSIsIG5ldGZzLT5uYW1lLCBuZXRmcy0+dmVyc2lvbik7CisKKwlkb3duX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJbGlzdF9kZWwoJm5ldGZzLT5saW5rKTsKKwlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKG5ldGZzLT5wcmltYXJ5X2luZGV4LCAwKTsKKworCXVwX3dyaXRlKCZmc2NhY2hlX2FkZHJlbW92ZV9zZW0pOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJGUy1DYWNoZTogTmV0ZnMgJyVzJyB1bnJlZ2lzdGVyZWQgZnJvbSBjYWNoaW5nXG4iLAorCSAgICAgICBuZXRmcy0+bmFtZSk7CisKKwlfbGVhdmUoIiIpOworfQorRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfdW5yZWdpc3Rlcl9uZXRmcyk7CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL29iamVjdC5jIGIvZnMvZnNjYWNoZS9vYmplY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTJhNDFiCi0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9vYmplY3QuYwpAQCAtMCwwICsxLDgxMCBAQAorLyogRlMtQ2FjaGUgb2JqZWN0IHN0YXRlIG1hY2hpbmUgaGFuZGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL29iamVjdC50eHQgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCisgKiBvYmplY3Qgc3RhdGUgbWFjaGluZSBhbmQgdGhlIGluLWtlcm5lbCByZXByZXNlbnRhdGlvbnMuCisgKi8KKworI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0xFVkVMIENPT0tJRQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK2NvbnN0IGNoYXIgKmZzY2FjaGVfb2JqZWN0X3N0YXRlc1tdID0geworCVtGU0NBQ0hFX09CSkVDVF9JTklUXQkJPSAiT0JKRUNUX0lOSVQiLAorCVtGU0NBQ0hFX09CSkVDVF9MT09LSU5HX1VQXQk9ICJPQkpFQ1RfTE9PS0lOR19VUCIsCisJW0ZTQ0FDSEVfT0JKRUNUX0NSRUFUSU5HXQk9ICJPQkpFQ1RfQ1JFQVRJTkciLAorCVtGU0NBQ0hFX09CSkVDVF9BVkFJTEFCTEVdCT0gIk9CSkVDVF9BVkFJTEFCTEUiLAorCVtGU0NBQ0hFX09CSkVDVF9BQ1RJVkVdCQk9ICJPQkpFQ1RfQUNUSVZFIiwKKwlbRlNDQUNIRV9PQkpFQ1RfVVBEQVRJTkddCT0gIk9CSkVDVF9VUERBVElORyIsCisJW0ZTQ0FDSEVfT0JKRUNUX0RZSU5HXQkJPSAiT0JKRUNUX0RZSU5HIiwKKwlbRlNDQUNIRV9PQkpFQ1RfTENfRFlJTkddCT0gIk9CSkVDVF9MQ19EWUlORyIsCisJW0ZTQ0FDSEVfT0JKRUNUX0FCT1JUX0lOSVRdCT0gIk9CSkVDVF9BQk9SVF9JTklUIiwKKwlbRlNDQUNIRV9PQkpFQ1RfUkVMRUFTSU5HXQk9ICJPQkpFQ1RfUkVMRUFTSU5HIiwKKwlbRlNDQUNIRV9PQkpFQ1RfUkVDWUNMSU5HXQk9ICJPQkpFQ1RfUkVDWUNMSU5HIiwKKwlbRlNDQUNIRV9PQkpFQ1RfV0lUSERSQVdJTkddCT0gIk9CSkVDVF9XSVRIRFJBV0lORyIsCisJW0ZTQ0FDSEVfT0JKRUNUX0RFQURdCQk9ICJPQkpFQ1RfREVBRCIsCit9OworRVhQT1JUX1NZTUJPTChmc2NhY2hlX29iamVjdF9zdGF0ZXMpOworCitzdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfcHV0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICopOworc3RhdGljIGludCAgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX2dldF9yZWYoc3RydWN0IHNsb3dfd29yayAqKTsKK3N0YXRpYyB2b2lkIGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19leGVjdXRlKHN0cnVjdCBzbG93X3dvcmsgKik7CitzdGF0aWMgdm9pZCBmc2NhY2hlX2luaXRpYWxpc2Vfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKK3N0YXRpYyB2b2lkIGZzY2FjaGVfbG9va3VwX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CitzdGF0aWMgdm9pZCBmc2NhY2hlX29iamVjdF9hdmFpbGFibGUoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICopOworc3RhdGljIHZvaWQgZnNjYWNoZV9yZWxlYXNlX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CitzdGF0aWMgdm9pZCBmc2NhY2hlX3dpdGhkcmF3X29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CitzdGF0aWMgdm9pZCBmc2NhY2hlX2VucXVldWVfZGVwZW5kZW50cyhzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKik7CitzdGF0aWMgdm9pZCBmc2NhY2hlX2RlcXVldWVfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqKTsKKworY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX29wcyA9IHsKKwkuZ2V0X3JlZgk9IGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19nZXRfcmVmLAorCS5wdXRfcmVmCT0gZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX3B1dF9yZWYsCisJLmV4ZWN1dGUJPSBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfZXhlY3V0ZSwKK307CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19vcHMpOworCisvKgorICogd2UgbmVlZCB0byBub3RpZnkgdGhlIHBhcmVudCB3aGVuIGFuIG9wIGNvbXBsZXRlcyB0aGF0IHdlIGhhZCBvdXRzdGFuZGluZworICogdXBvbiBpdAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9kb25lX3BhcmVudF9vcChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKnBhcmVudCA9IG9iamVjdC0+cGFyZW50OworCisJX2VudGVyKCJPQkoleCB7T0JKJXgsJXh9IiwKKwkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgcGFyZW50LT5kZWJ1Z19pZCwgcGFyZW50LT5uX29wcyk7CisKKwlzcGluX2xvY2tfbmVzdGVkKCZwYXJlbnQtPmxvY2ssIDEpOworCXBhcmVudC0+bl9vcHMtLTsKKwlwYXJlbnQtPm5fb2JqX29wcy0tOworCWlmIChwYXJlbnQtPm5fb3BzID09IDApCisJCWZzY2FjaGVfcmFpc2VfZXZlbnQocGFyZW50LCBGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVEKTsKKwlzcGluX3VubG9jaygmcGFyZW50LT5sb2NrKTsKK30KKworLyoKKyAqIHByb2Nlc3MgZXZlbnRzIHRoYXQgaGF2ZSBiZWVuIHNlbnQgdG8gYW4gb2JqZWN0J3Mgc3RhdGUgbWFjaGluZQorICogLSBpbml0aWF0ZXMgcGFyZW50IGxvb2t1cAorICogLSBkb2VzIG9iamVjdCBsb29rdXAKKyAqIC0gZG9lcyBvYmplY3QgY3JlYXRpb24KKyAqIC0gZG9lcyBvYmplY3QgcmVjeWNsaW5nIGFuZCByZXRpcmVtZW50CisgKiAtIGRvZXMgb2JqZWN0IHdpdGhkcmF3YWwKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9vYmplY3Rfc3RhdGVfbWFjaGluZShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwllbnVtIGZzY2FjaGVfb2JqZWN0X3N0YXRlIG5ld19zdGF0ZTsKKworCUFTU0VSVChvYmplY3QgIT0gTlVMTCk7CisKKwlfZW50ZXIoIntPQkoleCwlcywlbHh9IiwKKwkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgZnNjYWNoZV9vYmplY3Rfc3RhdGVzW29iamVjdC0+c3RhdGVdLAorCSAgICAgICBvYmplY3QtPmV2ZW50cyk7CisKKwlzd2l0Y2ggKG9iamVjdC0+c3RhdGUpIHsKKwkJLyogd2FpdCBmb3IgdGhlIHBhcmVudCBvYmplY3QgdG8gYmVjb21lIHJlYWR5ICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9JTklUOgorCQlvYmplY3QtPmV2ZW50X21hc2sgPQorCQkJVUxPTkdfTUFYICYgfigxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQpOworCQlmc2NhY2hlX2luaXRpYWxpc2Vfb2JqZWN0KG9iamVjdCk7CisJCWdvdG8gZG9uZTsKKworCQkvKiBsb29rIHVwIHRoZSBvYmplY3QgbWV0YWRhdGEgb24gZGlzayAqLworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfTE9PS0lOR19VUDoKKwkJZnNjYWNoZV9sb29rdXBfb2JqZWN0KG9iamVjdCk7CisJCWdvdG8gbG9va3VwX3RyYW5zaXQ7CisKKwkJLyogY3JlYXRlIHRoZSBvYmplY3QgbWV0YWRhdGEgb24gZGlzayAqLworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfQ1JFQVRJTkc6CisJCWZzY2FjaGVfbG9va3VwX29iamVjdChvYmplY3QpOworCQlnb3RvIGxvb2t1cF90cmFuc2l0OworCisJCS8qIGhhbmRsZSBhbiBvYmplY3QgYmVjb21pbmcgYXZhaWxhYmxlOyBzdGFydCBwZW5kaW5nCisJCSAqIG9wZXJhdGlvbnMgYW5kIHF1ZXVlIGRlcGVuZGVudCBvcGVyYXRpb25zIGZvciBwcm9jZXNzaW5nICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9BVkFJTEFCTEU6CisJCWZzY2FjaGVfb2JqZWN0X2F2YWlsYWJsZShvYmplY3QpOworCQlnb3RvIGFjdGl2ZV90cmFuc2l0OworCisJCS8qIG5vcm1hbCBydW5uaW5nIHN0YXRlICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9BQ1RJVkU6CisJCWdvdG8gYWN0aXZlX3RyYW5zaXQ7CisKKwkJLyogdXBkYXRlIHRoZSBvYmplY3QgbWV0YWRhdGEgb24gZGlzayAqLworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfVVBEQVRJTkc6CisJCWNsZWFyX2JpdChGU0NBQ0hFX09CSkVDVF9FVl9VUERBVEUsICZvYmplY3QtPmV2ZW50cyk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3VwZGF0ZXNfcnVuKTsKKwkJb2JqZWN0LT5jYWNoZS0+b3BzLT51cGRhdGVfb2JqZWN0KG9iamVjdCk7CisJCWdvdG8gYWN0aXZlX3RyYW5zaXQ7CisKKwkJLyogaGFuZGxlIGFuIG9iamVjdCBkeWluZyBkdXJpbmcgbG9va3VwIG9yIGNyZWF0aW9uICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9MQ19EWUlORzoKKwkJb2JqZWN0LT5ldmVudF9tYXNrICY9IH4oMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9VUERBVEUpOworCQlvYmplY3QtPmNhY2hlLT5vcHMtPmxvb2t1cF9jb21wbGV0ZShvYmplY3QpOworCisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0RZSU5HOworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HLAorCQkJCSAgICAgICAmb2JqZWN0LT5jb29raWUtPmZsYWdzKSkKKwkJCXdha2VfdXBfYml0KCZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MsCisJCQkJICAgIEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HKTsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwkJZnNjYWNoZV9kb25lX3BhcmVudF9vcChvYmplY3QpOworCisJCS8qIHdhaXQgZm9yIGNvbXBsZXRpb24gb2YgYWxsIGFjdGl2ZSBvcGVyYXRpb25zIG9uIHRoaXMgb2JqZWN0CisJCSAqIGFuZCB0aGUgZGVhdGggb2YgYWxsIGNoaWxkIG9iamVjdHMgb2YgdGhpcyBvYmplY3QgKi8KKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0RZSU5HOgorCWR5aW5nOgorCQljbGVhcl9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfQ0xFQVJFRCwgJm9iamVjdC0+ZXZlbnRzKTsKKwkJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCQlfZGVidWcoImR5aW5nIE9CSiV4IHslZCwlZH0iLAorCQkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgb2JqZWN0LT5uX29wcywgb2JqZWN0LT5uX2NoaWxkcmVuKTsKKwkJaWYgKG9iamVjdC0+bl9vcHMgPT0gMCAmJiBvYmplY3QtPm5fY2hpbGRyZW4gPT0gMCkgeworCQkJb2JqZWN0LT5ldmVudF9tYXNrICY9CisJCQkJfigxIDw8IEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQpOworCQkJb2JqZWN0LT5ldmVudF9tYXNrIHw9CisJCQkJKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVcpIHwKKwkJCQkoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkUpIHwKKwkJCQkoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFKSB8CisJCQkJKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1IpOworCQl9IGVsc2UgeworCQkJb2JqZWN0LT5ldmVudF9tYXNrICY9CisJCQkJfigoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVykgfAorCQkJCSAgKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFKSB8CisJCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFKSB8CisJCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUikpOworCQkJb2JqZWN0LT5ldmVudF9tYXNrIHw9CisJCQkJMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVEOworCQl9CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCQlmc2NhY2hlX2VucXVldWVfZGVwZW5kZW50cyhvYmplY3QpOworCQlnb3RvIHRlcm1pbmFsX3RyYW5zaXQ7CisKKwkJLyogaGFuZGxlIGFuIGFib3J0IGR1cmluZyBpbml0aWFsaXNhdGlvbiAqLworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfQUJPUlRfSU5JVDoKKwkJX2RlYnVnKCJoYW5kbGUgYWJvcnQgaW5pdCAlbHgiLCBvYmplY3QtPmV2ZW50cyk7CisJCW9iamVjdC0+ZXZlbnRfbWFzayAmPSB+KDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfVVBEQVRFKTsKKworCQlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJCWZzY2FjaGVfZGVxdWV1ZV9vYmplY3Qob2JqZWN0KTsKKworCQlvYmplY3QtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfRFlJTkc7CisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcsCisJCQkJICAgICAgICZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MpKQorCQkJd2FrZV91cF9iaXQoJm9iamVjdC0+Y29va2llLT5mbGFncywKKwkJCQkgICAgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcpOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJZ290byBkeWluZzsKKworCQkvKiBoYW5kbGUgdGhlIG5ldGZzIHJlbGVhc2luZyBhbiBvYmplY3QgYW5kIHBvc3NpYmx5IG1hcmtpbmcgaXQKKwkJICogb2Jzb2xldGUgdG9vICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9SRUxFQVNJTkc6CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9SRUNZQ0xJTkc6CisJCW9iamVjdC0+ZXZlbnRfbWFzayAmPQorCQkJfigoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVykgfAorCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkUpIHwKKwkJCSAgKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRSkgfAorCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUikpOworCQlmc2NhY2hlX3JlbGVhc2Vfb2JqZWN0KG9iamVjdCk7CisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0RFQUQ7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vYmplY3RfZGVhZCk7CisJCWdvdG8gdGVybWluYWxfdHJhbnNpdDsKKworCQkvKiBoYW5kbGUgdGhlIHBhcmVudCBjYWNoZSBvZiB0aGlzIG9iamVjdCBiZWluZyB3aXRoZHJhd24gZnJvbQorCQkgKiBhY3RpdmUgc2VydmljZSAqLworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfV0lUSERSQVdJTkc6CisJCW9iamVjdC0+ZXZlbnRfbWFzayAmPQorCQkJfigoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVykgfAorCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkUpIHwKKwkJCSAgKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRSkgfAorCQkJICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUikpOworCQlmc2NhY2hlX3dpdGhkcmF3X29iamVjdChvYmplY3QpOworCQlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJCW9iamVjdC0+c3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9ERUFEOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb2JqZWN0X2RlYWQpOworCQlnb3RvIHRlcm1pbmFsX3RyYW5zaXQ7CisKKwkJLyogY29tcGxhaW4gYWJvdXQgdGhlIG9iamVjdCBiZWluZyB3b2tlbiB1cCBvbmNlIGl0IGlzCisJCSAqIGRlY2Vhc2VkICovCisJY2FzZSBGU0NBQ0hFX09CSkVDVF9ERUFEOgorCQlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiIKKwkJICAgICAgICIgVW5leHBlY3RlZCBldmVudCBpbiBkZWFkIHN0YXRlICVseFxuIiwKKwkJICAgICAgIG9iamVjdC0+ZXZlbnRzICYgb2JqZWN0LT5ldmVudF9tYXNrKTsKKwkJQlVHKCk7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiBVbmtub3duIG9iamVjdCBzdGF0ZSAldVxuIiwKKwkJICAgICAgIG9iamVjdC0+c3RhdGUpOworCQlCVUcoKTsKKwl9CisKKwkvKiBkZXRlcm1pbmUgdGhlIHRyYW5zaXRpb24gZnJvbSBhIGxvb2t1cCBzdGF0ZSAqLworbG9va3VwX3RyYW5zaXQ6CisJc3dpdGNoIChmbHMob2JqZWN0LT5ldmVudHMgJiBvYmplY3QtPmV2ZW50X21hc2spIC0gMSkgeworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVc6CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkU6CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9SRUxFQVNFOgorCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1I6CisJCW5ld19zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0xDX0RZSU5HOworCQlnb3RvIGNoYW5nZV9zdGF0ZTsKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX1JFUVVFVUU6CisJCWdvdG8gZG9uZTsKKwljYXNlIC0xOgorCQlnb3RvIGRvbmU7IC8qIHNsZWVwIHVudGlsIGV2ZW50ICovCisJZGVmYXVsdDoKKwkJZ290byB1bnN1cHBvcnRlZF9ldmVudDsKKwl9CisKKwkvKiBkZXRlcm1pbmUgdGhlIHRyYW5zaXRpb24gZnJvbSBhbiBhY3RpdmUgc3RhdGUgKi8KK2FjdGl2ZV90cmFuc2l0OgorCXN3aXRjaCAoZmxzKG9iamVjdC0+ZXZlbnRzICYgb2JqZWN0LT5ldmVudF9tYXNrKSAtIDEpIHsKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXOgorCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFOgorCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRToKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX0VSUk9SOgorCQluZXdfc3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9EWUlORzsKKwkJZ290byBjaGFuZ2Vfc3RhdGU7CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9VUERBVEU6CisJCW5ld19zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX1VQREFUSU5HOworCQlnb3RvIGNoYW5nZV9zdGF0ZTsKKwljYXNlIC0xOgorCQluZXdfc3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9BQ1RJVkU7CisJCWdvdG8gY2hhbmdlX3N0YXRlOyAvKiBzbGVlcCB1bnRpbCBldmVudCAqLworCWRlZmF1bHQ6CisJCWdvdG8gdW5zdXBwb3J0ZWRfZXZlbnQ7CisJfQorCisJLyogZGV0ZXJtaW5lIHRoZSB0cmFuc2l0aW9uIGZyb20gYSB0ZXJtaW5hbCBzdGF0ZSAqLwordGVybWluYWxfdHJhbnNpdDoKKwlzd2l0Y2ggKGZscyhvYmplY3QtPmV2ZW50cyAmIG9iamVjdC0+ZXZlbnRfbWFzaykgLSAxKSB7CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVzoKKwkJbmV3X3N0YXRlID0gRlNDQUNIRV9PQkpFQ1RfV0lUSERSQVdJTkc7CisJCWdvdG8gY2hhbmdlX3N0YXRlOworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFOgorCQluZXdfc3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9SRUNZQ0xJTkc7CisJCWdvdG8gY2hhbmdlX3N0YXRlOworCWNhc2UgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRToKKwkJbmV3X3N0YXRlID0gRlNDQUNIRV9PQkpFQ1RfUkVMRUFTSU5HOworCQlnb3RvIGNoYW5nZV9zdGF0ZTsKKwljYXNlIEZTQ0FDSEVfT0JKRUNUX0VWX0VSUk9SOgorCQluZXdfc3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9XSVRIRFJBV0lORzsKKwkJZ290byBjaGFuZ2Vfc3RhdGU7CisJY2FzZSBGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVEOgorCQluZXdfc3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9EWUlORzsKKwkJZ290byBjaGFuZ2Vfc3RhdGU7CisJY2FzZSAtMToKKwkJZ290byBkb25lOyAvKiBzbGVlcCB1bnRpbCBldmVudCAqLworCWRlZmF1bHQ6CisJCWdvdG8gdW5zdXBwb3J0ZWRfZXZlbnQ7CisJfQorCitjaGFuZ2Vfc3RhdGU6CisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCW9iamVjdC0+c3RhdGUgPSBuZXdfc3RhdGU7CisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKK2RvbmU6CisJX2xlYXZlKCIgWy0+JXNdIiwgZnNjYWNoZV9vYmplY3Rfc3RhdGVzW29iamVjdC0+c3RhdGVdKTsKKwlyZXR1cm47CisKK3Vuc3VwcG9ydGVkX2V2ZW50OgorCXByaW50ayhLRVJOX0VSUiAiRlMtQ2FjaGU6IgorCSAgICAgICAiIFVuc3VwcG9ydGVkIGV2ZW50ICVseCBbbWFzayAlbHhdIGluIHN0YXRlICVzXG4iLAorCSAgICAgICBvYmplY3QtPmV2ZW50cywgb2JqZWN0LT5ldmVudF9tYXNrLAorCSAgICAgICBmc2NhY2hlX29iamVjdF9zdGF0ZXNbb2JqZWN0LT5zdGF0ZV0pOworCUJVRygpOworfQorCisvKgorICogZXhlY3V0ZSBhbiBvYmplY3QKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX2V4ZWN1dGUoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIHdvcmspOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisKKwlfZW50ZXIoIntPQkoleH0iLCBvYmplY3QtPmRlYnVnX2lkKTsKKworCWNsZWFyX2JpdChGU0NBQ0hFX09CSkVDVF9FVl9SRVFVRVVFLCAmb2JqZWN0LT5ldmVudHMpOworCisJc3RhcnQgPSBqaWZmaWVzOworCWZzY2FjaGVfb2JqZWN0X3N0YXRlX21hY2hpbmUob2JqZWN0KTsKKwlmc2NhY2hlX2hpc3QoZnNjYWNoZV9vYmpzX2hpc3RvZ3JhbSwgc3RhcnQpOworCWlmIChvYmplY3QtPmV2ZW50cyAmIG9iamVjdC0+ZXZlbnRfbWFzaykKKwkJZnNjYWNoZV9lbnF1ZXVlX29iamVjdChvYmplY3QpOworfQorCisvKgorICogaW5pdGlhbGlzZSBhbiBvYmplY3QKKyAqIC0gY2hlY2sgdGhlIHNwZWNpZmllZCBvYmplY3QncyBwYXJlbnQgdG8gc2VlIGlmIHdlIGNhbiBtYWtlIHVzZSBvZiBpdAorICogICBpbW1lZGlhdGVseSB0byBkbyBhIGNyZWF0aW9uCisgKiAtIHdlIG1heSBuZWVkIHRvIHN0YXJ0IHRoZSBwcm9jZXNzIG9mIGNyZWF0aW5nIGEgcGFyZW50IGFuZCB3ZSBuZWVkIHRvIHdhaXQKKyAqICAgZm9yIHRoZSBwYXJlbnQncyBsb29rdXAgYW5kIGNyZWF0aW9uIHRvIGNvbXBsZXRlIGlmIGl0J3Mgbm90IHRoZXJlIHlldAorICogLSBhbiBvYmplY3QncyBjb29raWUgaXMgcGlubmVkIHVudGlsIHdlIGNsZWFyIEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HIG9uIHRoZQorICogICBsZWFmLW1vc3QgY29va2llcyBvZiB0aGUgb2JqZWN0IGFuZCBhbGwgaXRzIGNoaWxkcmVuCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfaW5pdGlhbGlzZV9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpwYXJlbnQ7CisKKwlfZW50ZXIoIiIpOworCUFTU0VSVChvYmplY3QtPmNvb2tpZSAhPSBOVUxMKTsKKwlBU1NFUlQob2JqZWN0LT5jb29raWUtPnBhcmVudCAhPSBOVUxMKTsKKwlBU1NFUlQobGlzdF9lbXB0eSgmb2JqZWN0LT53b3JrLmxpbmspKTsKKworCWlmIChvYmplY3QtPmV2ZW50cyAmICgoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUikgfAorCQkJICAgICAgKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfUkVMRUFTRSkgfAorCQkJICAgICAgKDEgPDwgRlNDQUNIRV9PQkpFQ1RfRVZfUkVUSVJFKSB8CisJCQkgICAgICAoMSA8PCBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVykpKSB7CisJCV9kZWJ1ZygiYWJvcnQgaW5pdCAlbHgiLCBvYmplY3QtPmV2ZW50cyk7CisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0FCT1JUX0lOSVQ7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrKCZvYmplY3QtPmNvb2tpZS0+bG9jayk7CisJc3Bpbl9sb2NrX25lc3RlZCgmb2JqZWN0LT5jb29raWUtPnBhcmVudC0+bG9jaywgMSk7CisKKwlwYXJlbnQgPSBvYmplY3QtPnBhcmVudDsKKwlpZiAoIXBhcmVudCkgeworCQlfZGVidWcoIm5vIHBhcmVudCIpOworCQlzZXRfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX1dJVEhEUkFXLCAmb2JqZWN0LT5ldmVudHMpOworCX0gZWxzZSB7CisJCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJc3Bpbl9sb2NrX25lc3RlZCgmcGFyZW50LT5sb2NrLCAxKTsKKwkJX2RlYnVnKCJwYXJlbnQgJXMiLCBmc2NhY2hlX29iamVjdF9zdGF0ZXNbcGFyZW50LT5zdGF0ZV0pOworCisJCWlmIChwYXJlbnQtPnN0YXRlID49IEZTQ0FDSEVfT0JKRUNUX0RZSU5HKSB7CisJCQlfZGVidWcoImJhZCBwYXJlbnQiKTsKKwkJCXNldF9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVcsICZvYmplY3QtPmV2ZW50cyk7CisJCX0gZWxzZSBpZiAocGFyZW50LT5zdGF0ZSA8IEZTQ0FDSEVfT0JKRUNUX0FWQUlMQUJMRSkgeworCQkJX2RlYnVnKCJ3YWl0Iik7CisKKwkJCS8qIHdlIG1heSBnZXQgd29rZW4gdXAgaW4gdGhpcyBzdGF0ZSBieSBjaGlsZCBvYmplY3RzCisJCQkgKiBiaW5kaW5nIG9uIHRvIHVzLCBzbyB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndAorCQkJICogYWRkIG91cnNlbGYgdG8gdGhlIGxpc3QgbXVsdGlwbGUgdGltZXMgKi8KKwkJCWlmIChsaXN0X2VtcHR5KCZvYmplY3QtPmRlcF9saW5rKSkgeworCQkJCW9iamVjdC0+Y2FjaGUtPm9wcy0+Z3JhYl9vYmplY3Qob2JqZWN0KTsKKwkJCQlsaXN0X2FkZCgmb2JqZWN0LT5kZXBfbGluaywKKwkJCQkJICZwYXJlbnQtPmRlcGVuZGVudHMpOworCisJCQkJLyogZnNjYWNoZV9hY3F1aXJlX25vbl9pbmRleF9jb29raWUoKSB1c2VzIHRoaXMKKwkJCQkgKiB0byB3YWtlIHRoZSBjaGFpbiB1cCAqLworCQkJCWlmIChwYXJlbnQtPnN0YXRlID09IEZTQ0FDSEVfT0JKRUNUX0lOSVQpCisJCQkJCWZzY2FjaGVfZW5xdWV1ZV9vYmplY3QocGFyZW50KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCV9kZWJ1ZygiZ28iKTsKKwkJCXBhcmVudC0+bl9vcHMrKzsKKwkJCXBhcmVudC0+bl9vYmpfb3BzKys7CisJCQlvYmplY3QtPmxvb2t1cF9qaWYgPSBqaWZmaWVzOworCQkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0xPT0tJTkdfVVA7CisJCQlzZXRfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX1JFUVVFVUUsICZvYmplY3QtPmV2ZW50cyk7CisJCX0KKworCQlzcGluX3VubG9jaygmcGFyZW50LT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisJfQorCisJc3Bpbl91bmxvY2soJm9iamVjdC0+Y29va2llLT5wYXJlbnQtPmxvY2spOworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmNvb2tpZS0+bG9jayk7CisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIGxvb2sgYW4gb2JqZWN0IHVwIGluIHRoZSBjYWNoZSBmcm9tIHdoaWNoIGl0IHdhcyBhbGxvY2F0ZWQKKyAqIC0gd2UgaG9sZCBhbiAiYWNjZXNzIGxvY2siIG9uIHRoZSBwYXJlbnQgb2JqZWN0LCBzbyB0aGUgcGFyZW50IG9iamVjdCBjYW5ub3QKKyAqICAgYmUgd2l0aGRyYXduIGJ5IGVpdGhlciBwYXJ0eSB0aWxsIHdlJ3ZlIGZpbmlzaGVkCisgKiAtIGFuIG9iamVjdCdzIGNvb2tpZSBpcyBwaW5uZWQgdW50aWwgd2UgY2xlYXIgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcgb24gdGhlCisgKiAgIGxlYWYtbW9zdCBjb29raWVzIG9mIHRoZSBvYmplY3QgYW5kIGFsbCBpdHMgY2hpbGRyZW4KKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9sb29rdXBfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llID0gb2JqZWN0LT5jb29raWU7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpwYXJlbnQ7CisKKwlfZW50ZXIoIiIpOworCisJcGFyZW50ID0gb2JqZWN0LT5wYXJlbnQ7CisJQVNTRVJUKHBhcmVudCAhPSBOVUxMKTsKKwlBU1NFUlRDTVAocGFyZW50LT5uX29wcywgPiwgMCk7CisJQVNTRVJUQ01QKHBhcmVudC0+bl9vYmpfb3BzLCA+LCAwKTsKKworCS8qIG1ha2Ugc3VyZSB0aGUgcGFyZW50IGlzIHN0aWxsIGF2YWlsYWJsZSAqLworCUFTU0VSVENNUChwYXJlbnQtPnN0YXRlLCA+PSwgRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFKTsKKworCWlmIChwYXJlbnQtPnN0YXRlID49IEZTQ0FDSEVfT0JKRUNUX0RZSU5HIHx8CisJICAgIHRlc3RfYml0KEZTQ0FDSEVfSU9FUlJPUiwgJm9iamVjdC0+Y2FjaGUtPmZsYWdzKSkgeworCQlfZGVidWcoInVuYXZhaWxhYmxlIik7CisJCXNldF9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfV0lUSERSQVcsICZvYmplY3QtPmV2ZW50cyk7CisJCV9sZWF2ZSgiIik7CisJCXJldHVybjsKKwl9CisKKwlfZGVidWcoIkxPT0tVUCBcIiVzLyVzXCIgaW4gXCIlc1wiIiwKKwkgICAgICAgcGFyZW50LT5jb29raWUtPmRlZi0+bmFtZSwgY29va2llLT5kZWYtPm5hbWUsCisJICAgICAgIG9iamVjdC0+Y2FjaGUtPnRhZy0+bmFtZSk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vYmplY3RfbG9va3Vwcyk7CisJb2JqZWN0LT5jYWNoZS0+b3BzLT5sb29rdXBfb2JqZWN0KG9iamVjdCk7CisKKwlpZiAodGVzdF9iaXQoRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1IsICZvYmplY3QtPmV2ZW50cykpCisJCXNldF9iaXQoRlNDQUNIRV9DT09LSUVfVU5BVkFJTEFCTEUsICZjb29raWUtPmZsYWdzKTsKKworCV9sZWF2ZSgiIik7Cit9CisKKy8qKgorICogZnNjYWNoZV9vYmplY3RfbG9va3VwX25lZ2F0aXZlIC0gTm90ZSBuZWdhdGl2ZSBjb29raWUgbG9va3VwCisgKiBAb2JqZWN0OiBPYmplY3QgcG9pbnRpbmcgdG8gY29va2llIHRvIG1hcmsKKyAqCisgKiBOb3RlIG5lZ2F0aXZlIGxvb2t1cCwgcGVybWl0dGluZyB0aG9zZSB3YWl0aW5nIHRvIHJlYWQgZGF0YSBmcm9tIGFuIGFscmVhZHkKKyAqIGV4aXN0aW5nIGJhY2tpbmcgb2JqZWN0IHRvIGNvbnRpbnVlIGFzIHRoZXJlJ3Mgbm8gZGF0YSBmb3IgdGhlbSB0byByZWFkLgorICovCit2b2lkIGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9uZWdhdGl2ZShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSA9IG9iamVjdC0+Y29va2llOworCisJX2VudGVyKCJ7T0JKJXgsJXN9IiwKKwkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgZnNjYWNoZV9vYmplY3Rfc3RhdGVzW29iamVjdC0+c3RhdGVdKTsKKworCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwlpZiAob2JqZWN0LT5zdGF0ZSA9PSBGU0NBQ0hFX09CSkVDVF9MT09LSU5HX1VQKSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29iamVjdF9sb29rdXBzX25lZ2F0aXZlKTsKKworCQkvKiB0cmFuc2l0IGhlcmUgdG8gYWxsb3cgd3JpdGUgcmVxdWVzdHMgdG8gYmVnaW4gc3RhY2tpbmcgdXAKKwkJICogYW5kIHJlYWQgcmVxdWVzdHMgdG8gYmVnaW4gcmV0dXJuaW5nIEVOT0RBVEEgKi8KKwkJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0NSRUFUSU5HOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworCQlzZXRfYml0KEZTQ0FDSEVfQ09PS0lFX1BFTkRJTkdfRklMTCwgJmNvb2tpZS0+ZmxhZ3MpOworCQlzZXRfYml0KEZTQ0FDSEVfQ09PS0lFX05PX0RBVEFfWUVULCAmY29va2llLT5mbGFncyk7CisKKwkJX2RlYnVnKCJ3YWtlIHVwIGxvb2t1cCAlcCIsICZjb29raWUtPmZsYWdzKTsKKwkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJCWNsZWFyX2JpdChGU0NBQ0hFX0NPT0tJRV9MT09LSU5HX1VQLCAmY29va2llLT5mbGFncyk7CisJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCXdha2VfdXBfYml0KCZjb29raWUtPmZsYWdzLCBGU0NBQ0hFX0NPT0tJRV9MT09LSU5HX1VQKTsKKwkJc2V0X2JpdChGU0NBQ0hFX09CSkVDVF9FVl9SRVFVRVVFLCAmb2JqZWN0LT5ldmVudHMpOworCX0gZWxzZSB7CisJCUFTU0VSVENNUChvYmplY3QtPnN0YXRlLCA9PSwgRlNDQUNIRV9PQkpFQ1RfQ1JFQVRJTkcpOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwl9CisKKwlfbGVhdmUoIiIpOworfQorRVhQT1JUX1NZTUJPTChmc2NhY2hlX29iamVjdF9sb29rdXBfbmVnYXRpdmUpOworCisvKioKKyAqIGZzY2FjaGVfb2J0YWluZWRfb2JqZWN0IC0gTm90ZSBzdWNjZXNzZnVsIG9iamVjdCBsb29rdXAgb3IgY3JlYXRpb24KKyAqIEBvYmplY3Q6IE9iamVjdCBwb2ludGluZyB0byBjb29raWUgdG8gbWFyaworICoKKyAqIE5vdGUgc3VjY2Vzc2Z1bCBsb29rdXAgYW5kL29yIGNyZWF0aW9uLCBwZXJtaXR0aW5nIHRob3NlIHdhaXRpbmcgdG8gd3JpdGUKKyAqIGRhdGEgdG8gYSBiYWNraW5nIG9iamVjdCB0byBjb250aW51ZS4KKyAqCisgKiBOb3RlIHRoYXQgYWZ0ZXIgY2FsbGluZyB0aGlzLCBhbiBvYmplY3QncyBjb29raWUgbWF5IGJlIHJlbGlucXVpc2hlZCBieSB0aGUKKyAqIG5ldGZzLCBhbmQgc28gbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIG9iamVjdCBsb2NrIGhlbGQuCisgKi8KK3ZvaWQgZnNjYWNoZV9vYnRhaW5lZF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBvYmplY3QtPmNvb2tpZTsKKworCV9lbnRlcigie09CSiV4LCVzfSIsCisJICAgICAgIG9iamVjdC0+ZGVidWdfaWQsIGZzY2FjaGVfb2JqZWN0X3N0YXRlc1tvYmplY3QtPnN0YXRlXSk7CisKKwkvKiBpZiB3ZSB3ZXJlIHN0aWxsIGxvb2tpbmcgdXAsIHRoZW4gd2UgbXVzdCBoYXZlIGEgcG9zaXRpdmUgbG9va3VwCisJICogcmVzdWx0LCBpbiB3aGljaCBjYXNlIHRoZXJlIG1heSBiZSBkYXRhIGF2YWlsYWJsZSAqLworCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwlpZiAob2JqZWN0LT5zdGF0ZSA9PSBGU0NBQ0hFX09CSkVDVF9MT09LSU5HX1VQKSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29iamVjdF9sb29rdXBzX3Bvc2l0aXZlKTsKKworCQljbGVhcl9iaXQoRlNDQUNIRV9DT09LSUVfTk9fREFUQV9ZRVQsICZjb29raWUtPmZsYWdzKTsKKworCQlvYmplY3QtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJY2xlYXJfYml0KEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVAsICZjb29raWUtPmZsYWdzKTsKKwkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkJd2FrZV91cF9iaXQoJmNvb2tpZS0+ZmxhZ3MsIEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVApOworCQlzZXRfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX1JFUVVFVUUsICZvYmplY3QtPmV2ZW50cyk7CisJfSBlbHNlIHsKKwkJQVNTRVJUQ01QKG9iamVjdC0+c3RhdGUsID09LCBGU0NBQ0hFX09CSkVDVF9DUkVBVElORyk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29iamVjdF9jcmVhdGVkKTsKKworCQlvYmplY3QtPnN0YXRlID0gRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFOworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJc2V0X2JpdChGU0NBQ0hFX09CSkVDVF9FVl9SRVFVRVVFLCAmb2JqZWN0LT5ldmVudHMpOworCQlzbXBfd21iKCk7CisJfQorCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGU0NBQ0hFX0NPT0tJRV9DUkVBVElORywgJmNvb2tpZS0+ZmxhZ3MpKQorCQl3YWtlX3VwX2JpdCgmY29va2llLT5mbGFncywgRlNDQUNIRV9DT09LSUVfQ1JFQVRJTkcpOworCisJX2xlYXZlKCIiKTsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9vYnRhaW5lZF9vYmplY3QpOworCisvKgorICogaGFuZGxlIGFuIG9iamVjdCB0aGF0IGhhcyBqdXN0IGJlY29tZSBhdmFpbGFibGUKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9vYmplY3RfYXZhaWxhYmxlKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCV9lbnRlcigie09CSiV4fSIsIG9iamVjdC0+ZGVidWdfaWQpOworCisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGU0NBQ0hFX0NPT0tJRV9DUkVBVElORywgJm9iamVjdC0+Y29va2llLT5mbGFncykpCisJCXdha2VfdXBfYml0KCZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MsIEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HKTsKKworCWZzY2FjaGVfZG9uZV9wYXJlbnRfb3Aob2JqZWN0KTsKKwlpZiAob2JqZWN0LT5uX2luX3Byb2dyZXNzID09IDApIHsKKwkJaWYgKG9iamVjdC0+bl9vcHMgPiAwKSB7CisJCQlBU1NFUlRDTVAob2JqZWN0LT5uX29wcywgPj0sIG9iamVjdC0+bl9vYmpfb3BzKTsKKwkJCUFTU0VSVElGKG9iamVjdC0+bl9vcHMgPiBvYmplY3QtPm5fb2JqX29wcywKKwkJCQkgIWxpc3RfZW1wdHkoJm9iamVjdC0+cGVuZGluZ19vcHMpKTsKKwkJCWZzY2FjaGVfc3RhcnRfb3BlcmF0aW9ucyhvYmplY3QpOworCQl9IGVsc2UgeworCQkJQVNTRVJUKGxpc3RfZW1wdHkoJm9iamVjdC0+cGVuZGluZ19vcHMpKTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKworCW9iamVjdC0+Y2FjaGUtPm9wcy0+bG9va3VwX2NvbXBsZXRlKG9iamVjdCk7CisJZnNjYWNoZV9lbnF1ZXVlX2RlcGVuZGVudHMob2JqZWN0KTsKKworCWZzY2FjaGVfaGlzdChmc2NhY2hlX29ial9pbnN0YW50aWF0ZV9oaXN0b2dyYW0sIG9iamVjdC0+bG9va3VwX2ppZik7CisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb2JqZWN0X2F2YWlsKTsKKworCV9sZWF2ZSgiIik7Cit9CisKKy8qCisgKiBkcm9wIGFuIG9iamVjdCdzIGF0dGFjaG1lbnRzCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfZHJvcF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpwYXJlbnQgPSBvYmplY3QtPnBhcmVudDsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUgPSBvYmplY3QtPmNhY2hlOworCisJX2VudGVyKCJ7T0JKJXgsJWR9Iiwgb2JqZWN0LT5kZWJ1Z19pZCwgb2JqZWN0LT5uX2NoaWxkcmVuKTsKKworCXNwaW5fbG9jaygmY2FjaGUtPm9iamVjdF9saXN0X2xvY2spOworCWxpc3RfZGVsX2luaXQoJm9iamVjdC0+Y2FjaGVfbGluayk7CisJc3Bpbl91bmxvY2soJmNhY2hlLT5vYmplY3RfbGlzdF9sb2NrKTsKKworCWNhY2hlLT5vcHMtPmRyb3Bfb2JqZWN0KG9iamVjdCk7CisKKwlpZiAocGFyZW50KSB7CisJCV9kZWJ1ZygicmVsZWFzZSBwYXJlbnQgT0JKJXggeyVkfSIsCisJCSAgICAgICBwYXJlbnQtPmRlYnVnX2lkLCBwYXJlbnQtPm5fY2hpbGRyZW4pOworCisJCXNwaW5fbG9jaygmcGFyZW50LT5sb2NrKTsKKwkJcGFyZW50LT5uX2NoaWxkcmVuLS07CisJCWlmIChwYXJlbnQtPm5fY2hpbGRyZW4gPT0gMCkKKwkJCWZzY2FjaGVfcmFpc2VfZXZlbnQocGFyZW50LCBGU0NBQ0hFX09CSkVDVF9FVl9DTEVBUkVEKTsKKwkJc3Bpbl91bmxvY2soJnBhcmVudC0+bG9jayk7CisJCW9iamVjdC0+cGFyZW50ID0gTlVMTDsKKwl9CisKKwkvKiB0aGlzIGp1c3Qgc2hpZnRzIHRoZSBvYmplY3QgcmVsZWFzZSB0byB0aGUgc2xvdyB3b3JrIHByb2Nlc3NvciAqLworCW9iamVjdC0+Y2FjaGUtPm9wcy0+cHV0X29iamVjdChvYmplY3QpOworCisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIHJlbGVhc2Ugb3IgcmVjeWNsZSBhbiBvYmplY3QgdGhhdCB0aGUgbmV0ZnMgaGFzIGRpc2NhcmRlZAorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3JlbGVhc2Vfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCV9lbnRlcigiIik7CisKKwlmc2NhY2hlX2Ryb3Bfb2JqZWN0KG9iamVjdCk7Cit9CisKKy8qCisgKiB3aXRoZHJhdyBhbiBvYmplY3QgZnJvbSBhY3RpdmUgc2VydmljZQorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3dpdGhkcmF3X29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZTsKKwlib29sIGRldGFjaGVkOworCisJX2VudGVyKCIiKTsKKworCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwljb29raWUgPSBvYmplY3QtPmNvb2tpZTsKKwlpZiAoY29va2llKSB7CisJCS8qIG5lZWQgdG8gZ2V0IHRoZSBjb29raWUgbG9jayBiZWZvcmUgdGhlIG9iamVjdCBsb2NrLCBzdGFydGluZworCQkgKiBmcm9tIHRoZSBvYmplY3QgcG9pbnRlciAqLworCQlhdG9taWNfaW5jKCZjb29raWUtPnVzYWdlKTsKKwkJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwkJZGV0YWNoZWQgPSBmYWxzZTsKKwkJc3Bpbl9sb2NrKCZjb29raWUtPmxvY2spOworCQlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisKKwkJaWYgKG9iamVjdC0+Y29va2llID09IGNvb2tpZSkgeworCQkJaGxpc3RfZGVsX2luaXQoJm9iamVjdC0+Y29va2llX2xpbmspOworCQkJb2JqZWN0LT5jb29raWUgPSBOVUxMOworCQkJZGV0YWNoZWQgPSB0cnVlOworCQl9CisJCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCQlmc2NhY2hlX2Nvb2tpZV9wdXQoY29va2llKTsKKwkJaWYgKGRldGFjaGVkKQorCQkJZnNjYWNoZV9jb29raWVfcHV0KGNvb2tpZSk7CisJfQorCisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwlmc2NhY2hlX2Ryb3Bfb2JqZWN0KG9iamVjdCk7Cit9CisKKy8qCisgKiB3aXRoZHJhdyBhbiBvYmplY3QgZnJvbSBhY3RpdmUgc2VydmljZSBhdCB0aGUgYmVoZXN0IG9mIHRoZSBjYWNoZQorICogLSBuZWVkIGJyZWFrIHRoZSBsaW5rcyB0byBhIGNhY2hlZCBvYmplY3QgY29va2llCisgKiAtIGNhbGxlZCB1bmRlciB0d28gc2l0dWF0aW9uczoKKyAqICAgKDEpIHJlY3ljbGVyIGRlY2lkZXMgdG8gcmVjbGFpbSBhbiBpbi11c2Ugb2JqZWN0CisgKiAgICgyKSBhIGNhY2hlIGlzIHVubW91bnRlZAorICogLSBoYXZlIHRvIHRha2UgY2FyZSBhcyB0aGUgY29va2llIGNhbiBiZSBiZWluZyByZWxpbnF1aXNoZWQgYnkgdGhlIG5ldGZzCisgKiAgIHNpbXVsdGFuZW91c2x5CisgKiAtIHRoZSBvYmplY3QgaXMgcGlubmVkIGJ5IHRoZSBjYWxsZXIgaG9sZGluZyBhIHJlZmNvdW50IG9uIGl0CisgKi8KK3ZvaWQgZnNjYWNoZV93aXRoZHJhd2luZ19vYmplY3Qoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlLAorCQkJCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCWJvb2wgZW5xdWV1ZSA9IGZhbHNlOworCisJX2VudGVyKCIsT0JKJXgiLCBvYmplY3QtPmRlYnVnX2lkKTsKKworCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKwlpZiAob2JqZWN0LT5zdGF0ZSA8IEZTQ0FDSEVfT0JKRUNUX1dJVEhEUkFXSU5HKSB7CisJCW9iamVjdC0+c3RhdGUgPSBGU0NBQ0hFX09CSkVDVF9XSVRIRFJBV0lORzsKKwkJZW5xdWV1ZSA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCisJaWYgKGVucXVldWUpCisJCWZzY2FjaGVfZW5xdWV1ZV9vYmplY3Qob2JqZWN0KTsKKworCV9sZWF2ZSgiIik7Cit9CisKKy8qCisgKiBhbGxvdyB0aGUgc2xvdyB3b3JrIGl0ZW0gcHJvY2Vzc29yIHRvIGdldCBhIHJlZiBvbiBhbiBvYmplY3QKKyAqLworc3RhdGljIGludCBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfZ2V0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgd29yayk7CisKKwlyZXR1cm4gb2JqZWN0LT5jYWNoZS0+b3BzLT5ncmFiX29iamVjdChvYmplY3QpID8gMCA6IC1FQUdBSU47Cit9CisKKy8qCisgKiBhbGxvdyB0aGUgc2xvdyB3b3JrIGl0ZW0gcHJvY2Vzc29yIHRvIGRpc2NhcmQgYSByZWYgb24gYSB3b3JrIGl0ZW0KKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9vYmplY3Rfc2xvd193b3JrX3B1dF9yZWYoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIHdvcmspOworCisJcmV0dXJuIG9iamVjdC0+Y2FjaGUtPm9wcy0+cHV0X29iamVjdChvYmplY3QpOworfQorCisvKgorICogZW5xdWV1ZSBhbiBvYmplY3QgZm9yIG1ldGFkYXRhLXR5cGUgcHJvY2Vzc2luZworICovCit2b2lkIGZzY2FjaGVfZW5xdWV1ZV9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJX2VudGVyKCJ7T0JKJXh9Iiwgb2JqZWN0LT5kZWJ1Z19pZCk7CisKKwlzbG93X3dvcmtfZW5xdWV1ZSgmb2JqZWN0LT53b3JrKTsKK30KKworLyoKKyAqIGVucXVldWUgdGhlIGRlcGVuZGVudHMgb2YgYW4gb2JqZWN0IGZvciBtZXRhZGF0YS10eXBlIHByb2Nlc3NpbmcKKyAqIC0gdGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIG9iamVjdCdzIGxvY2sKKyAqIC0gdGhpcyBtYXkgY2F1c2UgYW4gYWxyZWFkeSBsb2NrZWQgb2JqZWN0IHRvIHdpbmQgdXAgYmVpbmcgcHJvY2Vzc2VkIGFnYWluCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfZW5xdWV1ZV9kZXBlbmRlbnRzKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqZGVwOworCisJX2VudGVyKCJ7T0JKJXh9Iiwgb2JqZWN0LT5kZWJ1Z19pZCk7CisKKwlpZiAobGlzdF9lbXB0eSgmb2JqZWN0LT5kZXBlbmRlbnRzKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZvYmplY3QtPmRlcGVuZGVudHMpKSB7CisJCWRlcCA9IGxpc3RfZW50cnkob2JqZWN0LT5kZXBlbmRlbnRzLm5leHQsCisJCQkJIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgZGVwX2xpbmspOworCQlsaXN0X2RlbF9pbml0KCZkZXAtPmRlcF9saW5rKTsKKworCisJCS8qIHNvcnQgb250byBhcHByb3ByaWF0ZSBsaXN0cyAqLworCQlmc2NhY2hlX2VucXVldWVfb2JqZWN0KGRlcCk7CisJCWRlcC0+Y2FjaGUtPm9wcy0+cHV0X29iamVjdChkZXApOworCisJCWlmICghbGlzdF9lbXB0eSgmb2JqZWN0LT5kZXBlbmRlbnRzKSkKKwkJCWNvbmRfcmVzY2hlZF9sb2NrKCZvYmplY3QtPmxvY2spOworCX0KKworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworfQorCisvKgorICogcmVtb3ZlIGFuIG9iamVjdCBmcm9tIHdoYXRldmVyIHF1ZXVlIGl0J3Mgd2FpdGluZyBvbgorICogLSB0aGUgY2FsbGVyIG11c3QgaG9sZCBvYmplY3QtPmxvY2sKKyAqLwordm9pZCBmc2NhY2hlX2RlcXVldWVfb2JqZWN0KHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCV9lbnRlcigie09CSiV4fSIsIG9iamVjdC0+ZGVidWdfaWQpOworCisJaWYgKCFsaXN0X2VtcHR5KCZvYmplY3QtPmRlcF9saW5rKSkgeworCQlzcGluX2xvY2soJm9iamVjdC0+cGFyZW50LT5sb2NrKTsKKwkJbGlzdF9kZWxfaW5pdCgmb2JqZWN0LT5kZXBfbGluayk7CisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPnBhcmVudC0+bG9jayk7CisJfQorCisJX2xlYXZlKCIiKTsKK30KKworLyoqCisgKiBmc2NhY2hlX2NoZWNrX2F1eCAtIEFzayB0aGUgbmV0ZnMgd2hldGhlciBhbiBvYmplY3Qgb24gZGlzayBpcyBzdGlsbCB2YWxpZAorICogQG9iamVjdDogVGhlIG9iamVjdCB0byBhc2sgYWJvdXQKKyAqIEBkYXRhOiBUaGUgYXV4aWxpYXJ5IGRhdGEgZm9yIHRoZSBvYmplY3QKKyAqIEBkYXRhbGVuOiBUaGUgc2l6ZSBvZiB0aGUgYXV4aWxpYXJ5IGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbnN1bHRzIHRoZSBuZXRmcyBhYm91dCB0aGUgY29oZXJlbmN5IHN0YXRlIG9mIGFuIG9iamVjdAorICovCitlbnVtIGZzY2FjaGVfY2hlY2thdXggZnNjYWNoZV9jaGVja19hdXgoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsCisJCQkJCWNvbnN0IHZvaWQgKmRhdGEsIHVpbnQxNl90IGRhdGFsZW4pCit7CisJZW51bSBmc2NhY2hlX2NoZWNrYXV4IHJlc3VsdDsKKworCWlmICghb2JqZWN0LT5jb29raWUtPmRlZi0+Y2hlY2tfYXV4KSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2NoZWNrYXV4X25vbmUpOworCQlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PS0FZOworCX0KKworCXJlc3VsdCA9IG9iamVjdC0+Y29va2llLT5kZWYtPmNoZWNrX2F1eChvYmplY3QtPmNvb2tpZS0+bmV0ZnNfZGF0YSwKKwkJCQkJCWRhdGEsIGRhdGFsZW4pOworCXN3aXRjaCAocmVzdWx0KSB7CisJCS8qIGVudHJ5IG9rYXkgYXMgaXMgKi8KKwljYXNlIEZTQ0FDSEVfQ0hFQ0tBVVhfT0tBWToKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fY2hlY2thdXhfb2theSk7CisJCWJyZWFrOworCisJCS8qIGVudHJ5IHJlcXVpcmVzIHVwZGF0ZSAqLworCWNhc2UgRlNDQUNIRV9DSEVDS0FVWF9ORUVEU19VUERBVEU6CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2NoZWNrYXV4X3VwZGF0ZSk7CisJCWJyZWFrOworCisJCS8qIGVudHJ5IHJlcXVpcmVzIGRlbGV0aW9uICovCisJY2FzZSBGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFOgorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9jaGVja2F1eF9vYnNvbGV0ZSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0woZnNjYWNoZV9jaGVja19hdXgpOwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9vcGVyYXRpb24uYyBiL2ZzL2ZzY2FjaGUvb3BlcmF0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdmOGQ1MwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvb3BlcmF0aW9uLmMKQEAgLTAsMCArMSw0NTkgQEAKKy8qIEZTLUNhY2hlIHdvcmtlciBvcGVyYXRpb24gbWFuYWdlbWVudCByb3V0aW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL29wZXJhdGlvbnMudHh0CisgKi8KKworI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0xFVkVMIE9QRVJBVElPTgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK2F0b21pY190IGZzY2FjaGVfb3BfZGVidWdfaWQ7CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfb3BfZGVidWdfaWQpOworCisvKioKKyAqIGZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24gLSBFbnF1ZXVlIGFuIG9wZXJhdGlvbiBmb3IgcHJvY2Vzc2luZworICogQG9wOiBUaGUgb3BlcmF0aW9uIHRvIGVucXVldWUKKyAqCisgKiBFbnF1ZXVlIGFuIG9wZXJhdGlvbiBmb3IgcHJvY2Vzc2luZyBieSB0aGUgRlMtQ2FjaGUgdGhyZWFkIHBvb2wuCisgKgorICogVGhpcyB3aWxsIGdldCBpdHMgb3duIHJlZiBvbiB0aGUgb2JqZWN0LgorICovCit2b2lkIGZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24oc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCkKK3sKKwlfZW50ZXIoIntPQkoleCBPUCV4LCV1fSIsCisJICAgICAgIG9wLT5vYmplY3QtPmRlYnVnX2lkLCBvcC0+ZGVidWdfaWQsIGF0b21pY19yZWFkKCZvcC0+dXNhZ2UpKTsKKworCUFTU0VSVChvcC0+cHJvY2Vzc29yICE9IE5VTEwpOworCUFTU0VSVENNUChvcC0+b2JqZWN0LT5zdGF0ZSwgPj0sIEZTQ0FDSEVfT0JKRUNUX0FWQUlMQUJMRSk7CisJQVNTRVJUQ01QKGF0b21pY19yZWFkKCZvcC0+dXNhZ2UpLCA+LCAwKTsKKworCWlmIChsaXN0X2VtcHR5KCZvcC0+cGVuZF9saW5rKSkgeworCQlzd2l0Y2ggKG9wLT5mbGFncyAmIEZTQ0FDSEVfT1BfVFlQRSkgeworCQljYXNlIEZTQ0FDSEVfT1BfRkFTVDoKKwkJCV9kZWJ1ZygicXVldWUgZmFzdCIpOworCQkJYXRvbWljX2luYygmb3AtPnVzYWdlKTsKKwkJCWlmICghc2NoZWR1bGVfd29yaygmb3AtPmZhc3Rfd29yaykpCisJCQkJZnNjYWNoZV9wdXRfb3BlcmF0aW9uKG9wKTsKKwkJCWJyZWFrOworCQljYXNlIEZTQ0FDSEVfT1BfU0xPVzoKKwkJCV9kZWJ1ZygicXVldWUgc2xvdyIpOworCQkJc2xvd193b3JrX2VucXVldWUoJm9wLT5zbG93X3dvcmspOworCQkJYnJlYWs7CisJCWNhc2UgRlNDQUNIRV9PUF9NWVRIUkVBRDoKKwkJCV9kZWJ1ZygicXVldWUgZm9yIGNhbGxlcidzIGF0dGVudGlvbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIkZTLUNhY2hlOiBVbmV4cGVjdGVkIG9wIHR5cGUgJWx4IiwKKwkJCSAgICAgICBvcC0+ZmxhZ3MpOworCQkJQlVHKCk7CisJCQlicmVhazsKKwkJfQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vcF9lbnF1ZXVlKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24pOworCisvKgorICogc3RhcnQgYW4gb3AgcnVubmluZworICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3J1bl9vcChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCSAgIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApCit7CisJb2JqZWN0LT5uX2luX3Byb2dyZXNzKys7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChGU0NBQ0hFX09QX1dBSVRJTkcsICZvcC0+ZmxhZ3MpKQorCQl3YWtlX3VwX2JpdCgmb3AtPmZsYWdzLCBGU0NBQ0hFX09QX1dBSVRJTkcpOworCWlmIChvcC0+cHJvY2Vzc29yKQorCQlmc2NhY2hlX2VucXVldWVfb3BlcmF0aW9uKG9wKTsKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vcF9ydW4pOworfQorCisvKgorICogc3VibWl0IGFuIGV4Y2x1c2l2ZSBvcGVyYXRpb24gZm9yIGFuIG9iamVjdAorICogLSBvdGhlciBvcHMgYXJlIGV4Y2x1ZGVkIGZyb20gcnVubmluZyBzaW11bHRhbmVvdXNseSB3aXRoIHRoaXMgb25lCisgKiAtIHRoaXMgZ2V0cyBhbnkgZXh0cmEgcmVmcyBpdCBuZWVkcyBvbiBhbiBvcAorICovCitpbnQgZnNjYWNoZV9zdWJtaXRfZXhjbHVzaXZlX29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkJCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3ApCit7CisJaW50IHJldDsKKworCV9lbnRlcigie09CSiV4IE9QJXh9LCIsIG9iamVjdC0+ZGVidWdfaWQsIG9wLT5kZWJ1Z19pZCk7CisKKwlzcGluX2xvY2soJm9iamVjdC0+bG9jayk7CisJQVNTRVJUQ01QKG9iamVjdC0+bl9vcHMsID49LCBvYmplY3QtPm5faW5fcHJvZ3Jlc3MpOworCUFTU0VSVENNUChvYmplY3QtPm5fb3BzLCA+PSwgb2JqZWN0LT5uX2V4Y2x1c2l2ZSk7CisKKwlyZXQgPSAtRU5PQlVGUzsKKwlpZiAoZnNjYWNoZV9vYmplY3RfaXNfYWN0aXZlKG9iamVjdCkpIHsKKwkJb3AtPm9iamVjdCA9IG9iamVjdDsKKwkJb2JqZWN0LT5uX29wcysrOworCQlvYmplY3QtPm5fZXhjbHVzaXZlKys7CS8qIHJlYWRzIGFuZCB3cml0ZXMgbXVzdCB3YWl0ICovCisKKwkJaWYgKG9iamVjdC0+bl9vcHMgPiAwKSB7CisJCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCQkJbGlzdF9hZGRfdGFpbCgmb3AtPnBlbmRfbGluaywgJm9iamVjdC0+cGVuZGluZ19vcHMpOworCQkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb3BfcGVuZCk7CisJCX0gZWxzZSBpZiAoIWxpc3RfZW1wdHkoJm9iamVjdC0+cGVuZGluZ19vcHMpKSB7CisJCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCQkJbGlzdF9hZGRfdGFpbCgmb3AtPnBlbmRfbGluaywgJm9iamVjdC0+cGVuZGluZ19vcHMpOworCQkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb3BfcGVuZCk7CisJCQlmc2NhY2hlX3N0YXJ0X29wZXJhdGlvbnMob2JqZWN0KTsKKwkJfSBlbHNlIHsKKwkJCUFTU0VSVENNUChvYmplY3QtPm5faW5fcHJvZ3Jlc3MsID09LCAwKTsKKwkJCWZzY2FjaGVfcnVuX29wKG9iamVjdCwgb3ApOworCQl9CisKKwkJLyogbmVlZCB0byBpc3N1ZSBhIG5ldyB3cml0ZSBvcCBhZnRlciB0aGlzICovCisJCWNsZWFyX2JpdChGU0NBQ0hFX09CSkVDVF9QRU5ESU5HX1dSSVRFLCAmb2JqZWN0LT5mbGFncyk7CisJCXJldCA9IDA7CisJfSBlbHNlIGlmIChvYmplY3QtPnN0YXRlID09IEZTQ0FDSEVfT0JKRUNUX0NSRUFUSU5HKSB7CisJCW9wLT5vYmplY3QgPSBvYmplY3Q7CisJCW9iamVjdC0+bl9vcHMrKzsKKwkJb2JqZWN0LT5uX2V4Y2x1c2l2ZSsrOwkvKiByZWFkcyBhbmQgd3JpdGVzIG11c3Qgd2FpdCAqLworCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCQlsaXN0X2FkZF90YWlsKCZvcC0+cGVuZF9saW5rLCAmb2JqZWN0LT5wZW5kaW5nX29wcyk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX3BlbmQpOworCQlyZXQgPSAwOworCX0gZWxzZSB7CisJCS8qIG5vdCBhbGxvd2VkIHRvIHN1Ym1pdCBvcHMgaW4gYW55IG90aGVyIHN0YXRlICovCisJCUJVRygpOworCX0KKworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiByZXBvcnQgYW4gdW5leHBlY3RlZCBzdWJtaXNzaW9uCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfcmVwb3J0X3VuZXhwZWN0ZWRfc3VibWlzc2lvbihzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCQkJCSBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgb3N0YXRlKQoreworCXN0YXRpYyBib29sIG9uY2Vfb25seTsKKwlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKnA7CisJdW5zaWduZWQgbjsKKworCWlmIChvbmNlX29ubHkpCisJCXJldHVybjsKKwlvbmNlX29ubHkgPSB0cnVlOworCisJa2RlYnVnKCJ1bmV4cGVjdGVkIHN1Ym1pc3Npb24gT1AleCBbT0JKJXggJXNdIiwKKwkgICAgICAgb3AtPmRlYnVnX2lkLCBvYmplY3QtPmRlYnVnX2lkLAorCSAgICAgICBmc2NhY2hlX29iamVjdF9zdGF0ZXNbb2JqZWN0LT5zdGF0ZV0pOworCWtkZWJ1Zygib2Jqc3RhdGU9JXMgWyVzXSIsCisJICAgICAgIGZzY2FjaGVfb2JqZWN0X3N0YXRlc1tvYmplY3QtPnN0YXRlXSwKKwkgICAgICAgZnNjYWNoZV9vYmplY3Rfc3RhdGVzW29zdGF0ZV0pOworCWtkZWJ1Zygib2JqZmxhZ3M9JWx4Iiwgb2JqZWN0LT5mbGFncyk7CisJa2RlYnVnKCJvYmpldmVudD0lbHggWyVseF0iLCBvYmplY3QtPmV2ZW50cywgb2JqZWN0LT5ldmVudF9tYXNrKTsKKwlrZGVidWcoIm9wcz0ldSBpbnA9JXUgZXhjPSV1IiwKKwkgICAgICAgb2JqZWN0LT5uX29wcywgb2JqZWN0LT5uX2luX3Byb2dyZXNzLCBvYmplY3QtPm5fZXhjbHVzaXZlKTsKKworCWlmICghbGlzdF9lbXB0eSgmb2JqZWN0LT5wZW5kaW5nX29wcykpIHsKKwkJbiA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJm9iamVjdC0+cGVuZGluZ19vcHMsIHBlbmRfbGluaykgeworCQkJQVNTRVJUQ01QKHAtPm9iamVjdCwgPT0sIG9iamVjdCk7CisJCQlrZGVidWcoIiVwICVwIiwgb3AtPnByb2Nlc3Nvciwgb3AtPnJlbGVhc2UpOworCQkJbisrOworCQl9CisKKwkJa2RlYnVnKCJuPSV1Iiwgbik7CisJfQorCisJZHVtcF9zdGFjaygpOworfQorCisvKgorICogc3VibWl0IGFuIG9wZXJhdGlvbiBmb3IgYW4gb2JqZWN0CisgKiAtIG9iamVjdHMgbWF5IGJlIHN1Ym1pdHRlZCBvbmx5IGluIHRoZSBmb2xsb3dpbmcgc3RhdGVzOgorICogICAtIGR1cmluZyBvYmplY3QgY3JlYXRpb24gKHdyaXRlIG9wcyBtYXkgYmUgc3VibWl0dGVkKQorICogICAtIHdoaWxzdCB0aGUgb2JqZWN0IGlzIGFjdGl2ZQorICogICAtIGFmdGVyIGFuIEkvTyBlcnJvciBpbmN1cnJlZCBpbiBvbmUgb2YgdGhlIHR3byBhYm92ZSBzdGF0ZXMgKG9wIHJlamVjdGVkKQorICogLSB0aGlzIGdldHMgYW55IGV4dHJhIHJlZnMgaXQgbmVlZHMgb24gYW4gb3AKKyAqLworaW50IGZzY2FjaGVfc3VibWl0X29wKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0LAorCQkgICAgICBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKQoreworCXVuc2lnbmVkIGxvbmcgb3N0YXRlOworCWludCByZXQ7CisKKwlfZW50ZXIoIntPQkoleCBPUCV4fSx7JXV9IiwKKwkgICAgICAgb2JqZWN0LT5kZWJ1Z19pZCwgb3AtPmRlYnVnX2lkLCBhdG9taWNfcmVhZCgmb3AtPnVzYWdlKSk7CisKKwlBU1NFUlRDTVAoYXRvbWljX3JlYWQoJm9wLT51c2FnZSksID4sIDApOworCisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCUFTU0VSVENNUChvYmplY3QtPm5fb3BzLCA+PSwgb2JqZWN0LT5uX2luX3Byb2dyZXNzKTsKKwlBU1NFUlRDTVAob2JqZWN0LT5uX29wcywgPj0sIG9iamVjdC0+bl9leGNsdXNpdmUpOworCisJb3N0YXRlID0gb2JqZWN0LT5zdGF0ZTsKKwlzbXBfcm1iKCk7CisKKwlpZiAoZnNjYWNoZV9vYmplY3RfaXNfYWN0aXZlKG9iamVjdCkpIHsKKwkJb3AtPm9iamVjdCA9IG9iamVjdDsKKwkJb2JqZWN0LT5uX29wcysrOworCisJCWlmIChvYmplY3QtPm5fZXhjbHVzaXZlID4gMCkgeworCQkJYXRvbWljX2luYygmb3AtPnVzYWdlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJm9wLT5wZW5kX2xpbmssICZvYmplY3QtPnBlbmRpbmdfb3BzKTsKKwkJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX3BlbmQpOworCQl9IGVsc2UgaWYgKCFsaXN0X2VtcHR5KCZvYmplY3QtPnBlbmRpbmdfb3BzKSkgeworCQkJYXRvbWljX2luYygmb3AtPnVzYWdlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJm9wLT5wZW5kX2xpbmssICZvYmplY3QtPnBlbmRpbmdfb3BzKTsKKwkJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX3BlbmQpOworCQkJZnNjYWNoZV9zdGFydF9vcGVyYXRpb25zKG9iamVjdCk7CisJCX0gZWxzZSB7CisJCQlBU1NFUlRDTVAob2JqZWN0LT5uX2V4Y2x1c2l2ZSwgPT0sIDApOworCQkJZnNjYWNoZV9ydW5fb3Aob2JqZWN0LCBvcCk7CisJCX0KKwkJcmV0ID0gMDsKKwl9IGVsc2UgaWYgKG9iamVjdC0+c3RhdGUgPT0gRlNDQUNIRV9PQkpFQ1RfQ1JFQVRJTkcpIHsKKwkJb3AtPm9iamVjdCA9IG9iamVjdDsKKwkJb2JqZWN0LT5uX29wcysrOworCQlhdG9taWNfaW5jKCZvcC0+dXNhZ2UpOworCQlsaXN0X2FkZF90YWlsKCZvcC0+cGVuZF9saW5rLCAmb2JqZWN0LT5wZW5kaW5nX29wcyk7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX29wX3BlbmQpOworCQlyZXQgPSAwOworCX0gZWxzZSBpZiAoIXRlc3RfYml0KEZTQ0FDSEVfSU9FUlJPUiwgJm9iamVjdC0+Y2FjaGUtPmZsYWdzKSkgeworCQlmc2NhY2hlX3JlcG9ydF91bmV4cGVjdGVkX3N1Ym1pc3Npb24ob2JqZWN0LCBvcCwgb3N0YXRlKTsKKwkJQVNTRVJUKCFmc2NhY2hlX29iamVjdF9pc19hY3RpdmUob2JqZWN0KSk7CisJCXJldCA9IC1FTk9CVUZTOworCX0gZWxzZSB7CisJCXJldCA9IC1FTk9CVUZTOworCX0KKworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBxdWV1ZSBhbiBvYmplY3QgZm9yIHdpdGhkcmF3YWwgb24gZXJyb3IsIGFib3J0aW5nIGFsbCBmb2xsb3dpbmcgYXN5bmNocm9ub3VzCisgKiBvcGVyYXRpb25zCisgKi8KK3ZvaWQgZnNjYWNoZV9hYm9ydF9vYmplY3Qoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpCit7CisJX2VudGVyKCJ7T0JKJXh9Iiwgb2JqZWN0LT5kZWJ1Z19pZCk7CisKKwlmc2NhY2hlX3JhaXNlX2V2ZW50KG9iamVjdCwgRlNDQUNIRV9PQkpFQ1RfRVZfRVJST1IpOworfQorCisvKgorICoganVtcCBzdGFydCB0aGUgb3BlcmF0aW9uIHByb2Nlc3Npbmcgb24gYW4gb2JqZWN0CisgKiAtIGNhbGxlciBtdXN0IGhvbGQgb2JqZWN0LT5sb2NrCisgKi8KK3ZvaWQgZnNjYWNoZV9zdGFydF9vcGVyYXRpb25zKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KQoreworCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3A7CisJYm9vbCBzdG9wID0gZmFsc2U7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJm9iamVjdC0+cGVuZGluZ19vcHMpICYmICFzdG9wKSB7CisJCW9wID0gbGlzdF9lbnRyeShvYmplY3QtPnBlbmRpbmdfb3BzLm5leHQsCisJCQkJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uLCBwZW5kX2xpbmspOworCisJCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09QX0VYQ0xVU0lWRSwgJm9wLT5mbGFncykpIHsKKwkJCWlmIChvYmplY3QtPm5faW5fcHJvZ3Jlc3MgPiAwKQorCQkJCWJyZWFrOworCQkJc3RvcCA9IHRydWU7CisJCX0KKwkJbGlzdF9kZWxfaW5pdCgmb3AtPnBlbmRfbGluayk7CisJCW9iamVjdC0+bl9pbl9wcm9ncmVzcysrOworCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRlNDQUNIRV9PUF9XQUlUSU5HLCAmb3AtPmZsYWdzKSkKKwkJCXdha2VfdXBfYml0KCZvcC0+ZmxhZ3MsIEZTQ0FDSEVfT1BfV0FJVElORyk7CisJCWlmIChvcC0+cHJvY2Vzc29yKQorCQkJZnNjYWNoZV9lbnF1ZXVlX29wZXJhdGlvbihvcCk7CisKKwkJLyogdGhlIHBlbmRpbmcgcXVldWUgd2FzIGhvbGRpbmcgYSByZWYgb24gdGhlIG9iamVjdCAqLworCQlmc2NhY2hlX3B1dF9vcGVyYXRpb24ob3ApOworCX0KKworCUFTU0VSVENNUChvYmplY3QtPm5faW5fcHJvZ3Jlc3MsIDw9LCBvYmplY3QtPm5fb3BzKTsKKworCV9kZWJ1Zygid29rZSAlZCBvcHMgb24gT0JKJXgiLAorCSAgICAgICBvYmplY3QtPm5faW5fcHJvZ3Jlc3MsIG9iamVjdC0+ZGVidWdfaWQpOworfQorCisvKgorICogcmVsZWFzZSBhbiBvcGVyYXRpb24KKyAqIC0gcXVldWVzIHBlbmRpbmcgb3BzIGlmIHRoaXMgaXMgdGhlIGxhc3QgaW4tcHJvZ3Jlc3Mgb3AKKyAqLwordm9pZCBmc2NhY2hlX3B1dF9vcGVyYXRpb24oc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGU7CisKKwlfZW50ZXIoIntPQkoleCBPUCV4LCVkfSIsCisJICAgICAgIG9wLT5vYmplY3QtPmRlYnVnX2lkLCBvcC0+ZGVidWdfaWQsIGF0b21pY19yZWFkKCZvcC0+dXNhZ2UpKTsKKworCUFTU0VSVENNUChhdG9taWNfcmVhZCgmb3AtPnVzYWdlKSwgPiwgMCk7CisKKwlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJm9wLT51c2FnZSkpCisJCXJldHVybjsKKworCV9kZWJ1ZygiUFVUIE9QIik7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRlNDQUNIRV9PUF9ERUFELCAmb3AtPmZsYWdzKSkKKwkJQlVHKCk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vcF9yZWxlYXNlKTsKKworCWlmIChvcC0+cmVsZWFzZSkgeworCQlvcC0+cmVsZWFzZShvcCk7CisJCW9wLT5yZWxlYXNlID0gTlVMTDsKKwl9CisKKwlvYmplY3QgPSBvcC0+b2JqZWN0OworCisJLyogbm93Li4uIHdlIG1heSBnZXQgY2FsbGVkIHdpdGggdGhlIG9iamVjdCBzcGlubG9jayBoZWxkLCBzbyB3ZQorCSAqIGNvbXBsZXRlIHRoZSBjbGVhbnVwIGhlcmUgb25seSBpZiB3ZSBjYW4gaW1tZWRpYXRlbHkgYWNxdWlyZSB0aGUKKwkgKiBsb2NrLCBhbmQgZGVmZXIgaXQgb3RoZXJ3aXNlICovCisJaWYgKCFzcGluX3RyeWxvY2soJm9iamVjdC0+bG9jaykpIHsKKwkJX2RlYnVnKCJkZWZlciBwdXQiKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fb3BfZGVmZXJyZWRfcmVsZWFzZSk7CisKKwkJY2FjaGUgPSBvYmplY3QtPmNhY2hlOworCQlzcGluX2xvY2soJmNhY2hlLT5vcF9nY19saXN0X2xvY2spOworCQlsaXN0X2FkZF90YWlsKCZvcC0+cGVuZF9saW5rLCAmY2FjaGUtPm9wX2djX2xpc3QpOworCQlzcGluX3VubG9jaygmY2FjaGUtPm9wX2djX2xpc3RfbG9jayk7CisJCXNjaGVkdWxlX3dvcmsoJmNhY2hlLT5vcF9nYyk7CisJCV9sZWF2ZSgiIFtkZWZlcl0iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09QX0VYQ0xVU0lWRSwgJm9wLT5mbGFncykpIHsKKwkJQVNTRVJUQ01QKG9iamVjdC0+bl9leGNsdXNpdmUsID4sIDApOworCQlvYmplY3QtPm5fZXhjbHVzaXZlLS07CisJfQorCisJQVNTRVJUQ01QKG9iamVjdC0+bl9pbl9wcm9ncmVzcywgPiwgMCk7CisJb2JqZWN0LT5uX2luX3Byb2dyZXNzLS07CisJaWYgKG9iamVjdC0+bl9pbl9wcm9ncmVzcyA9PSAwKQorCQlmc2NhY2hlX3N0YXJ0X29wZXJhdGlvbnMob2JqZWN0KTsKKworCUFTU0VSVENNUChvYmplY3QtPm5fb3BzLCA+LCAwKTsKKwlvYmplY3QtPm5fb3BzLS07CisJaWYgKG9iamVjdC0+bl9vcHMgPT0gMCkKKwkJZnNjYWNoZV9yYWlzZV9ldmVudChvYmplY3QsIEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQpOworCisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisKKwlrZnJlZShvcCk7CisJX2xlYXZlKCIgW2RvbmVdIik7Cit9CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfcHV0X29wZXJhdGlvbik7CisKKy8qCisgKiBnYXJiYWdlIGNvbGxlY3Qgb3BlcmF0aW9ucyB0aGF0IGhhdmUgaGFkIHRoZWlyIHJlbGVhc2UgZGVmZXJyZWQKKyAqLwordm9pZCBmc2NhY2hlX29wZXJhdGlvbl9nYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcDsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZzY2FjaGVfY2FjaGUsIG9wX2djKTsKKwlpbnQgY291bnQgPSAwOworCisJX2VudGVyKCIiKTsKKworCWRvIHsKKwkJc3Bpbl9sb2NrKCZjYWNoZS0+b3BfZ2NfbGlzdF9sb2NrKTsKKwkJaWYgKGxpc3RfZW1wdHkoJmNhY2hlLT5vcF9nY19saXN0KSkgeworCQkJc3Bpbl91bmxvY2soJmNhY2hlLT5vcF9nY19saXN0X2xvY2spOworCQkJYnJlYWs7CisJCX0KKworCQlvcCA9IGxpc3RfZW50cnkoY2FjaGUtPm9wX2djX2xpc3QubmV4dCwKKwkJCQlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24sIHBlbmRfbGluayk7CisJCWxpc3RfZGVsKCZvcC0+cGVuZF9saW5rKTsKKwkJc3Bpbl91bmxvY2soJmNhY2hlLT5vcF9nY19saXN0X2xvY2spOworCisJCW9iamVjdCA9IG9wLT5vYmplY3Q7CisKKwkJX2RlYnVnKCJHQyBERUZFUlJFRCBSRUwgT0JKJXggT1AleCIsCisJCSAgICAgICBvYmplY3QtPmRlYnVnX2lkLCBvcC0+ZGVidWdfaWQpOworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9vcF9nYyk7CisKKwkJQVNTRVJUQ01QKGF0b21pY19yZWFkKCZvcC0+dXNhZ2UpLCA9PSwgMCk7CisKKwkJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCQlpZiAodGVzdF9iaXQoRlNDQUNIRV9PUF9FWENMVVNJVkUsICZvcC0+ZmxhZ3MpKSB7CisJCQlBU1NFUlRDTVAob2JqZWN0LT5uX2V4Y2x1c2l2ZSwgPiwgMCk7CisJCQlvYmplY3QtPm5fZXhjbHVzaXZlLS07CisJCX0KKworCQlBU1NFUlRDTVAob2JqZWN0LT5uX2luX3Byb2dyZXNzLCA+LCAwKTsKKwkJb2JqZWN0LT5uX2luX3Byb2dyZXNzLS07CisJCWlmIChvYmplY3QtPm5faW5fcHJvZ3Jlc3MgPT0gMCkKKwkJCWZzY2FjaGVfc3RhcnRfb3BlcmF0aW9ucyhvYmplY3QpOworCisJCUFTU0VSVENNUChvYmplY3QtPm5fb3BzLCA+LCAwKTsKKwkJb2JqZWN0LT5uX29wcy0tOworCQlpZiAob2JqZWN0LT5uX29wcyA9PSAwKQorCQkJZnNjYWNoZV9yYWlzZV9ldmVudChvYmplY3QsIEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQpOworCisJCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCisJfSB3aGlsZSAoY291bnQrKyA8IDIwKTsKKworCWlmICghbGlzdF9lbXB0eSgmY2FjaGUtPm9wX2djX2xpc3QpKQorCQlzY2hlZHVsZV93b3JrKCZjYWNoZS0+b3BfZ2MpOworCisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIGFsbG93IHRoZSBzbG93IHdvcmsgaXRlbSBwcm9jZXNzb3IgdG8gZ2V0IGEgcmVmIG9uIGFuIG9wZXJhdGlvbgorICovCitzdGF0aWMgaW50IGZzY2FjaGVfb3BfZ2V0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3AgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uLCBzbG93X3dvcmspOworCisJYXRvbWljX2luYygmb3AtPnVzYWdlKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGFsbG93IHRoZSBzbG93IHdvcmsgaXRlbSBwcm9jZXNzb3IgdG8gZGlzY2FyZCBhIHJlZiBvbiBhbiBvcGVyYXRpb24KKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9vcF9wdXRfcmVmKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24sIHNsb3dfd29yayk7CisKKwlmc2NhY2hlX3B1dF9vcGVyYXRpb24ob3ApOworfQorCisvKgorICogZXhlY3V0ZSBhbiBvcGVyYXRpb24gdXNpbmcgdGhlIHNsb3cgdGhyZWFkIHBvb2wgdG8gcHJvdmlkZSBwcm9jZXNzaW5nIGNvbnRleHQKKyAqIC0gdGhlIGNhbGxlciBob2xkcyBhIHJlZiB0byB0aGlzIG9iamVjdCwgc28gd2UgZG9uJ3QgbmVlZCB0byBob2xkIG9uZQorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX29wX2V4ZWN1dGUoc3RydWN0IHNsb3dfd29yayAqd29yaykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiwgc2xvd193b3JrKTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCisJX2VudGVyKCJ7T0JKJXggT1AleCwlZH0iLAorCSAgICAgICBvcC0+b2JqZWN0LT5kZWJ1Z19pZCwgb3AtPmRlYnVnX2lkLCBhdG9taWNfcmVhZCgmb3AtPnVzYWdlKSk7CisKKwlBU1NFUlQob3AtPnByb2Nlc3NvciAhPSBOVUxMKTsKKwlzdGFydCA9IGppZmZpZXM7CisJb3AtPnByb2Nlc3NvcihvcCk7CisJZnNjYWNoZV9oaXN0KGZzY2FjaGVfb3BzX2hpc3RvZ3JhbSwgc3RhcnQpOworCisJX2xlYXZlKCIiKTsKK30KKworY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgZnNjYWNoZV9vcF9zbG93X3dvcmtfb3BzID0geworCS5nZXRfcmVmCT0gZnNjYWNoZV9vcF9nZXRfcmVmLAorCS5wdXRfcmVmCT0gZnNjYWNoZV9vcF9wdXRfcmVmLAorCS5leGVjdXRlCT0gZnNjYWNoZV9vcF9leGVjdXRlLAorfTsKZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvcGFnZS5jIGIvZnMvZnNjYWNoZS9wYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2OGUwZQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvcGFnZS5jCkBAIC0wLDAgKzEsODE2IEBACisvKiBDYWNoZSBwYWdlIG1hbmFnZW1lbnQgYW5kIGRhdGEgSS9PIHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBGU0NBQ0hFX0RFQlVHX0xFVkVMIFBBR0UKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2NhY2hlLWNhY2hlLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyoKKyAqIGNoZWNrIHRvIHNlZSBpZiBhIHBhZ2UgaXMgYmVpbmcgd3JpdHRlbiB0byB0aGUgY2FjaGUKKyAqLworYm9vbCBfX2ZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdm9pZCAqdmFsOworCisJcmN1X3JlYWRfbG9jaygpOworCXZhbCA9IHJhZGl4X3RyZWVfbG9va3VwKCZjb29raWUtPnN0b3JlcywgcGFnZS0+aW5kZXgpOworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIHZhbCAhPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZSk7CisKKy8qCisgKiB3YWl0IGZvciBhIHBhZ2UgdG8gZmluaXNoIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGNhY2hlCisgKi8KK3ZvaWQgX19mc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxID0gYml0X3dhaXRxdWV1ZSgmY29va2llLT5mbGFncywgMCk7CisKKwl3YWl0X2V2ZW50KCp3cSwgIV9fZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlKGNvb2tpZSwgcGFnZSkpOworfQorRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKTsKKworLyoKKyAqIG5vdGUgdGhhdCBhIHBhZ2UgaGFzIGZpbmlzaGVkIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGNhY2hlCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfZW5kX3BhZ2Vfd3JpdGUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBwYWdlICp4cGFnZTsKKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKwl4cGFnZSA9IHJhZGl4X3RyZWVfZGVsZXRlKCZjb29raWUtPnN0b3JlcywgcGFnZS0+aW5kZXgpOworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCUFTU0VSVCh4cGFnZSAhPSBOVUxMKTsKKworCXdha2VfdXBfYml0KCZjb29raWUtPmZsYWdzLCAwKTsKK30KKworLyoKKyAqIGFjdHVhbGx5IGFwcGx5IHRoZSBjaGFuZ2VkIGF0dHJpYnV0ZXMgdG8gYSBjYWNoZSBvYmplY3QKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV9hdHRyX2NoYW5nZWRfb3Aoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCA9IG9wLT5vYmplY3Q7CisKKwlfZW50ZXIoIntPQkoleCBPUCV4fSIsIG9iamVjdC0+ZGVidWdfaWQsIG9wLT5kZWJ1Z19pZCk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfY2FsbHMpOworCisJaWYgKGZzY2FjaGVfb2JqZWN0X2lzX2FjdGl2ZShvYmplY3QpICYmCisJICAgIG9iamVjdC0+Y2FjaGUtPm9wcy0+YXR0cl9jaGFuZ2VkKG9iamVjdCkgPCAwKQorCQlmc2NhY2hlX2Fib3J0X29iamVjdChvYmplY3QpOworCisJX2xlYXZlKCIiKTsKK30KKworLyoKKyAqIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBhdHRyaWJ1dGVzIG9uIGFuIG9iamVjdCBoYXZlIGNoYW5nZWQKKyAqLworaW50IF9fZnNjYWNoZV9hdHRyX2NoYW5nZWQoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpvcDsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKworCV9lbnRlcigiJXAiLCBjb29raWUpOworCisJQVNTRVJUQ01QKGNvb2tpZS0+ZGVmLT50eXBlLCAhPSwgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWQpOworCisJb3AgPSBremFsbG9jKHNpemVvZigqb3ApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9wKSB7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9ub21lbSk7CisJCV9sZWF2ZSgiID0gLUVOT01FTSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmc2NhY2hlX29wZXJhdGlvbl9pbml0KG9wLCBOVUxMKTsKKwlmc2NhY2hlX29wZXJhdGlvbl9pbml0X3Nsb3cob3AsIGZzY2FjaGVfYXR0cl9jaGFuZ2VkX29wKTsKKwlvcC0+ZmxhZ3MgPSBGU0NBQ0hFX09QX1NMT1cgfCAoMSA8PCBGU0NBQ0hFX09QX0VYQ0xVU0lWRSk7CisKKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAoaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSkKKwkJZ290byBub2J1ZnM7CisJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgY29va2llX2xpbmspOworCisJaWYgKGZzY2FjaGVfc3VibWl0X2V4Y2x1c2l2ZV9vcChvYmplY3QsIG9wKSA8IDApCisJCWdvdG8gbm9idWZzOworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9vayk7CisJZnNjYWNoZV9wdXRfb3BlcmF0aW9uKG9wKTsKKwlfbGVhdmUoIiA9IDAiKTsKKwlyZXR1cm4gMDsKKworbm9idWZzOgorCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCWtmcmVlKG9wKTsKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfbm9idWZzKTsKKwlfbGVhdmUoIiA9ICVkIiwgLUVOT0JVRlMpOworCXJldHVybiAtRU5PQlVGUzsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX2F0dHJfY2hhbmdlZCk7CisKKy8qCisgKiBoYW5kbGUgc2Vjb25kYXJ5IGV4ZWN1dGlvbiBnaXZlbiB0byBhIHJldHJpZXZhbCBvcCBvbiBiZWhhbGYgb2YgdGhlCisgKiBjYWNoZQorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3JldHJpZXZhbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCwgb3AuZmFzdF93b3JrKTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCisJX2VudGVyKCJ7T1AleH0iLCBvcC0+b3AuZGVidWdfaWQpOworCisJc3RhcnQgPSBqaWZmaWVzOworCW9wLT5vcC5wcm9jZXNzb3IoJm9wLT5vcCk7CisJZnNjYWNoZV9oaXN0KGZzY2FjaGVfb3BzX2hpc3RvZ3JhbSwgc3RhcnQpOworCWZzY2FjaGVfcHV0X29wZXJhdGlvbigmb3AtPm9wKTsKK30KKworLyoKKyAqIHJlbGVhc2UgYSByZXRyaWV2YWwgb3AgcmVmZXJlbmNlCisgKi8KK3N0YXRpYyB2b2lkIGZzY2FjaGVfcmVsZWFzZV9yZXRyaWV2YWxfb3Aoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpfb3ApCit7CisJc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCA9CisJCWNvbnRhaW5lcl9vZihfb3AsIHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCwgb3ApOworCisJX2VudGVyKCJ7T1AleH0iLCBvcC0+b3AuZGVidWdfaWQpOworCisJZnNjYWNoZV9oaXN0KGZzY2FjaGVfcmV0cmlldmFsX2hpc3RvZ3JhbSwgb3AtPnN0YXJ0X3RpbWUpOworCWlmIChvcC0+Y29udGV4dCkKKwkJZnNjYWNoZV9wdXRfY29udGV4dChvcC0+b3Aub2JqZWN0LT5jb29raWUsIG9wLT5jb250ZXh0KTsKKworCV9sZWF2ZSgiIik7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSBhIHJldHJpZXZhbCBvcAorICovCitzdGF0aWMgc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpmc2NhY2hlX2FsbG9jX3JldHJpZXZhbCgKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwlmc2NhY2hlX3J3X2NvbXBsZXRlX3QgZW5kX2lvX2Z1bmMsCisJdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wOworCisJLyogYWxsb2NhdGUgYSByZXRyaWV2YWwgb3BlcmF0aW9uIGFuZCBhdHRlbXB0IHRvIHN1Ym1pdCBpdCAqLworCW9wID0ga3phbGxvYyhzaXplb2YoKm9wKSwgR0ZQX05PSU8pOworCWlmICghb3ApIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19ub21lbSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWZzY2FjaGVfb3BlcmF0aW9uX2luaXQoJm9wLT5vcCwgZnNjYWNoZV9yZWxlYXNlX3JldHJpZXZhbF9vcCk7CisJb3AtPm9wLmZsYWdzCT0gRlNDQUNIRV9PUF9NWVRIUkVBRCB8ICgxIDw8IEZTQ0FDSEVfT1BfV0FJVElORyk7CisJb3AtPm1hcHBpbmcJPSBtYXBwaW5nOworCW9wLT5lbmRfaW9fZnVuYwk9IGVuZF9pb19mdW5jOworCW9wLT5jb250ZXh0CT0gY29udGV4dDsKKwlvcC0+c3RhcnRfdGltZQk9IGppZmZpZXM7CisJSU5JVF9XT1JLKCZvcC0+b3AuZmFzdF93b3JrLCBmc2NhY2hlX3JldHJpZXZhbF93b3JrKTsKKwlJTklUX0xJU1RfSEVBRCgmb3AtPnRvX2RvKTsKKwlyZXR1cm4gb3A7Cit9CisKKy8qCisgKiB3YWl0IGZvciBhIGRlZmVycmVkIGxvb2t1cCB0byBjb21wbGV0ZQorICovCitzdGF0aWMgaW50IGZzY2FjaGVfd2FpdF9mb3JfZGVmZXJyZWRfbG9va3VwKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKQoreworCXVuc2lnbmVkIGxvbmcgamlmOworCisJX2VudGVyKCIiKTsKKworCWlmICghdGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfTE9PS0lOR19VUCwgJmNvb2tpZS0+ZmxhZ3MpKSB7CisJCV9sZWF2ZSgiID0gMCBbaW1tXSIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX3dhaXQpOworCisJamlmID0gamlmZmllczsKKwlpZiAod2FpdF9vbl9iaXQoJmNvb2tpZS0+ZmxhZ3MsIEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVAsCisJCQlmc2NhY2hlX3dhaXRfYml0X2ludGVycnVwdGlibGUsCisJCQlUQVNLX0lOVEVSUlVQVElCTEUpICE9IDApIHsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19pbnRyKTsKKwkJX2xlYXZlKCIgPSAtRVJFU1RBUlRTWVMiKTsKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwlBU1NFUlQoIXRlc3RfYml0KEZTQ0FDSEVfQ09PS0lFX0xPT0tJTkdfVVAsICZjb29raWUtPmZsYWdzKSk7CisKKwlzbXBfcm1iKCk7CisJZnNjYWNoZV9oaXN0KGZzY2FjaGVfcmV0cmlldmFsX2RlbGF5X2hpc3RvZ3JhbSwgamlmKTsKKwlfbGVhdmUoIiA9IDAgW2RseV0iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHJlYWQgYSBwYWdlIGZyb20gdGhlIGNhY2hlIG9yIGFsbG9jYXRlIGEgYmxvY2sgaW4gd2hpY2ggdG8gc3RvcmUgaXQKKyAqIC0gd2UgcmV0dXJuOgorICogICAtRU5PTUVNCS0gb3V0IG9mIG1lbW9yeSwgbm90aGluZyBkb25lCisgKiAgIC1FUkVTVEFSVFNZUyAtIGludGVycnVwdGVkCisgKiAgIC1FTk9CVUZTCS0gbm8gYmFja2luZyBvYmplY3QgYXZhaWxhYmxlIGluIHdoaWNoIHRvIGNhY2hlIHRoZSBibG9jaworICogICAtRU5PREFUQQktIG5vIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBiYWNraW5nIG9iamVjdCBmb3IgdGhpcyBibG9jaworICogICAwCQktIGRpc3BhdGNoZWQgYSByZWFkIC0gaXQnbGwgY2FsbCBlbmRfaW9fZnVuYygpIHdoZW4gZmluaXNoZWQKKyAqLworaW50IF9fZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSBmc2NhY2hlX3J3X2NvbXBsZXRlX3QgZW5kX2lvX2Z1bmMsCisJCQkJIHZvaWQgKmNvbnRleHQsCisJCQkJIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wOworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0OworCWludCByZXQ7CisKKwlfZW50ZXIoIiVwLCVwLCwsIiwgY29va2llLCBwYWdlKTsKKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHMpOworCisJaWYgKGhsaXN0X2VtcHR5KCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cykpCisJCWdvdG8gbm9idWZzOworCisJQVNTRVJUQ01QKGNvb2tpZS0+ZGVmLT50eXBlLCAhPSwgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCk7CisJQVNTRVJUQ01QKHBhZ2UsICE9LCBOVUxMKTsKKworCWlmIChmc2NhY2hlX3dhaXRfZm9yX2RlZmVycmVkX2xvb2t1cChjb29raWUpIDwgMCkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCW9wID0gZnNjYWNoZV9hbGxvY19yZXRyaWV2YWwocGFnZS0+bWFwcGluZywgZW5kX2lvX2Z1bmMsIGNvbnRleHQpOworCWlmICghb3ApIHsKKwkJX2xlYXZlKCIgPSAtRU5PTUVNIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCWlmIChobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKQorCQlnb3RvIG5vYnVmc191bmxvY2s7CisJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgY29va2llX2xpbmspOworCisJQVNTRVJUQ01QKG9iamVjdC0+c3RhdGUsID4sIEZTQ0FDSEVfT0JKRUNUX0xPT0tJTkdfVVApOworCisJaWYgKGZzY2FjaGVfc3VibWl0X29wKG9iamVjdCwgJm9wLT5vcCkgPCAwKQorCQlnb3RvIG5vYnVmc191bmxvY2s7CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxfb3BzKTsKKworCS8qIHBpbiB0aGUgbmV0ZnMgcmVhZCBjb250ZXh0IGluIGNhc2Ugd2UgbmVlZCB0byBkbyB0aGUgYWN0dWFsIG5ldGZzCisJICogcmVhZCBiZWNhdXNlIHdlJ3ZlIGVuY291bnRlcmVkIGEgY2FjaGUgcmVhZCBmYWlsdXJlICovCisJZnNjYWNoZV9nZXRfY29udGV4dChvYmplY3QtPmNvb2tpZSwgb3AtPmNvbnRleHQpOworCisJLyogd2Ugd2FpdCBmb3IgdGhlIG9wZXJhdGlvbiB0byBiZWNvbWUgYWN0aXZlLCBhbmQgdGhlbiBwcm9jZXNzIGl0CisJICogKmhlcmUqLCBpbiB0aGlzIHRocmVhZCwgYW5kIG5vdCBpbiB0aGUgdGhyZWFkIHBvb2wgKi8KKwlpZiAodGVzdF9iaXQoRlNDQUNIRV9PUF9XQUlUSU5HLCAmb3AtPm9wLmZsYWdzKSkgeworCQlfZGVidWcoIj4+PiBXVCIpOworCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxfb3Bfd2FpdHMpOworCQl3YWl0X29uX2JpdCgmb3AtPm9wLmZsYWdzLCBGU0NBQ0hFX09QX1dBSVRJTkcsCisJCQkgICAgZnNjYWNoZV93YWl0X2JpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlfZGVidWcoIjw8PCBHTyIpOworCX0KKworCS8qIGFzayB0aGUgY2FjaGUgdG8gaG9ub3VyIHRoZSBvcGVyYXRpb24gKi8KKwlpZiAodGVzdF9iaXQoRlNDQUNIRV9DT09LSUVfTk9fREFUQV9ZRVQsICZvYmplY3QtPmNvb2tpZS0+ZmxhZ3MpKSB7CisJCXJldCA9IG9iamVjdC0+Y2FjaGUtPm9wcy0+YWxsb2NhdGVfcGFnZShvcCwgcGFnZSwgZ2ZwKTsKKwkJaWYgKHJldCA9PSAwKQorCQkJcmV0ID0gLUVOT0RBVEE7CisJfSBlbHNlIHsKKwkJcmV0ID0gb2JqZWN0LT5jYWNoZS0+b3BzLT5yZWFkX29yX2FsbG9jX3BhZ2Uob3AsIHBhZ2UsIGdmcCk7CisJfQorCisJaWYgKHJldCA9PSAtRU5PTUVNKQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vbWVtKTsKKwllbHNlIGlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX2ludHIpOworCWVsc2UgaWYgKHJldCA9PSAtRU5PREFUQSkKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19ub2RhdGEpOworCWVsc2UgaWYgKHJldCA8IDApCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9idWZzKTsKKwllbHNlCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfb2spOworCisJZnNjYWNoZV9wdXRfcmV0cmlldmFsKG9wKTsKKwlfbGVhdmUoIiA9ICVkIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworCitub2J1ZnNfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCWtmcmVlKG9wKTsKK25vYnVmczoKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vYnVmcyk7CisJX2xlYXZlKCIgPSAtRU5PQlVGUyIpOworCXJldHVybiAtRU5PQlVGUzsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZSk7CisKKy8qCisgKiByZWFkIGEgbGlzdCBvZiBwYWdlIGZyb20gdGhlIGNhY2hlIG9yIGFsbG9jYXRlIGEgYmxvY2sgaW4gd2hpY2ggdG8gc3RvcmUKKyAqIHRoZW0KKyAqIC0gd2UgcmV0dXJuOgorICogICAtRU5PTUVNCS0gb3V0IG9mIG1lbW9yeSwgc29tZSBwYWdlcyBtYXkgYmUgYmVpbmcgcmVhZAorICogICAtRVJFU1RBUlRTWVMgLSBpbnRlcnJ1cHRlZCwgc29tZSBwYWdlcyBtYXkgYmUgYmVpbmcgcmVhZAorICogICAtRU5PQlVGUwktIG5vIGJhY2tpbmcgb2JqZWN0IG9yIHNwYWNlIGF2YWlsYWJsZSBpbiB3aGljaCB0byBjYWNoZSBhbnkKKyAqICAgICAgICAgICAgICAgIHBhZ2VzIG5vdCBiZWluZyByZWFkCisgKiAgIC1FTk9EQVRBCS0gbm8gZGF0YSBhdmFpbGFibGUgaW4gdGhlIGJhY2tpbmcgb2JqZWN0IGZvciBzb21lIG9yIGFsbCBvZgorICogICAgICAgICAgICAgICAgdGhlIHBhZ2VzCisgKiAgIDAJCS0gZGlzcGF0Y2hlZCBhIHJlYWQgb24gYWxsIHBhZ2VzCisgKgorICogZW5kX2lvX2Z1bmMoKSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBwYWdlIHJlYWQgZnJvbSB0aGUgY2FjaGUgYXMgaXQgaXMKKyAqIGZpbmlzaGVzIGJlaW5nIHJlYWQKKyAqCisgKiBhbnkgcGFnZXMgZm9yIHdoaWNoIGEgcmVhZCBpcyBkaXNwYXRjaGVkIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHBhZ2VzIGFuZAorICogbnJfcGFnZXMKKyAqLworaW50IF9fZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJCSAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQkgIHVuc2lnbmVkICpucl9wYWdlcywKKwkJCQkgIGZzY2FjaGVfcndfY29tcGxldGVfdCBlbmRfaW9fZnVuYywKKwkJCQkgIHZvaWQgKmNvbnRleHQsCisJCQkJICBnZnBfdCBnZnApCit7CisJZnNjYWNoZV9wYWdlc19yZXRyaWV2YWxfZnVuY190IGZ1bmM7CisJc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcDsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIlcCwsJWQsLCwiLCBjb29raWUsICpucl9wYWdlcyk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzKTsKKworCWlmIChobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKQorCQlnb3RvIG5vYnVmczsKKworCUFTU0VSVENNUChjb29raWUtPmRlZi0+dHlwZSwgIT0sIEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgpOworCUFTU0VSVENNUCgqbnJfcGFnZXMsID4sIDApOworCUFTU0VSVCghbGlzdF9lbXB0eShwYWdlcykpOworCisJaWYgKGZzY2FjaGVfd2FpdF9mb3JfZGVmZXJyZWRfbG9va3VwKGNvb2tpZSkgPCAwKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJb3AgPSBmc2NhY2hlX2FsbG9jX3JldHJpZXZhbChtYXBwaW5nLCBlbmRfaW9fZnVuYywgY29udGV4dCk7CisJaWYgKCFvcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAoaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSkKKwkJZ290byBub2J1ZnNfdW5sb2NrOworCW9iamVjdCA9IGhsaXN0X2VudHJ5KGNvb2tpZS0+YmFja2luZ19vYmplY3RzLmZpcnN0LAorCQkJICAgICBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIGNvb2tpZV9saW5rKTsKKworCWlmIChmc2NhY2hlX3N1Ym1pdF9vcChvYmplY3QsICZvcC0+b3ApIDwgMCkKKwkJZ290byBub2J1ZnNfdW5sb2NrOworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsX29wcyk7CisKKwkvKiBwaW4gdGhlIG5ldGZzIHJlYWQgY29udGV4dCBpbiBjYXNlIHdlIG5lZWQgdG8gZG8gdGhlIGFjdHVhbCBuZXRmcworCSAqIHJlYWQgYmVjYXVzZSB3ZSd2ZSBlbmNvdW50ZXJlZCBhIGNhY2hlIHJlYWQgZmFpbHVyZSAqLworCWZzY2FjaGVfZ2V0X2NvbnRleHQob2JqZWN0LT5jb29raWUsIG9wLT5jb250ZXh0KTsKKworCS8qIHdlIHdhaXQgZm9yIHRoZSBvcGVyYXRpb24gdG8gYmVjb21lIGFjdGl2ZSwgYW5kIHRoZW4gcHJvY2VzcyBpdAorCSAqICpoZXJlKiwgaW4gdGhpcyB0aHJlYWQsIGFuZCBub3QgaW4gdGhlIHRocmVhZCBwb29sICovCisJaWYgKHRlc3RfYml0KEZTQ0FDSEVfT1BfV0FJVElORywgJm9wLT5vcC5mbGFncykpIHsKKwkJX2RlYnVnKCI+Pj4gV1QiKTsKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsX29wX3dhaXRzKTsKKwkJd2FpdF9vbl9iaXQoJm9wLT5vcC5mbGFncywgRlNDQUNIRV9PUF9XQUlUSU5HLAorCQkJICAgIGZzY2FjaGVfd2FpdF9iaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJX2RlYnVnKCI8PDwgR08iKTsKKwl9CisKKwkvKiBhc2sgdGhlIGNhY2hlIHRvIGhvbm91ciB0aGUgb3BlcmF0aW9uICovCisJaWYgKHRlc3RfYml0KEZTQ0FDSEVfQ09PS0lFX05PX0RBVEFfWUVULCAmb2JqZWN0LT5jb29raWUtPmZsYWdzKSkKKwkJZnVuYyA9IG9iamVjdC0+Y2FjaGUtPm9wcy0+YWxsb2NhdGVfcGFnZXM7CisJZWxzZQorCQlmdW5jID0gb2JqZWN0LT5jYWNoZS0+b3BzLT5yZWFkX29yX2FsbG9jX3BhZ2VzOworCXJldCA9IGZ1bmMob3AsIHBhZ2VzLCBucl9wYWdlcywgZ2ZwKTsKKworCWlmIChyZXQgPT0gLUVOT01FTSkKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19ub21lbSk7CisJZWxzZSBpZiAocmV0ID09IC1FUkVTVEFSVFNZUykKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19pbnRyKTsKKwllbHNlIGlmIChyZXQgPT0gLUVOT0RBVEEpCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9kYXRhKTsKKwllbHNlIGlmIChyZXQgPCAwKQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vYnVmcyk7CisJZWxzZQorCQlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX29rKTsKKworCWZzY2FjaGVfcHV0X3JldHJpZXZhbChvcCk7CisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKKworbm9idWZzX3VubG9jazoKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwlrZnJlZShvcCk7Citub2J1ZnM6CisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fcmV0cmlldmFsc19ub2J1ZnMpOworCV9sZWF2ZSgiID0gLUVOT0JVRlMiKTsKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CitFWFBPUlRfU1lNQk9MKF9fZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKTsKKworLyoKKyAqIGFsbG9jYXRlIGEgYmxvY2sgaW4gdGhlIGNhY2hlIG9uIHdoaWNoIHRvIHN0b3JlIGEgcGFnZQorICogLSB3ZSByZXR1cm46CisgKiAgIC1FTk9NRU0JLSBvdXQgb2YgbWVtb3J5LCBub3RoaW5nIGRvbmUKKyAqICAgLUVSRVNUQVJUU1lTIC0gaW50ZXJydXB0ZWQKKyAqICAgLUVOT0JVRlMJLSBubyBiYWNraW5nIG9iamVjdCBhdmFpbGFibGUgaW4gd2hpY2ggdG8gY2FjaGUgdGhlIGJsb2NrCisgKiAgIDAJCS0gYmxvY2sgYWxsb2NhdGVkCisgKi8KK2ludCBfX2ZzY2FjaGVfYWxsb2NfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSBnZnBfdCBnZnApCit7CisJc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcDsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdDsKKwlpbnQgcmV0OworCisJX2VudGVyKCIlcCwlcCwsLCIsIGNvb2tpZSwgcGFnZSk7CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9hbGxvY3MpOworCisJaWYgKGhsaXN0X2VtcHR5KCZjb29raWUtPmJhY2tpbmdfb2JqZWN0cykpCisJCWdvdG8gbm9idWZzOworCisJQVNTRVJUQ01QKGNvb2tpZS0+ZGVmLT50eXBlLCAhPSwgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCk7CisJQVNTRVJUQ01QKHBhZ2UsICE9LCBOVUxMKTsKKworCWlmIChmc2NhY2hlX3dhaXRfZm9yX2RlZmVycmVkX2xvb2t1cChjb29raWUpIDwgMCkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCW9wID0gZnNjYWNoZV9hbGxvY19yZXRyaWV2YWwocGFnZS0+bWFwcGluZywgTlVMTCwgTlVMTCk7CisJaWYgKCFvcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAoaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSkKKwkJZ290byBub2J1ZnNfdW5sb2NrOworCW9iamVjdCA9IGhsaXN0X2VudHJ5KGNvb2tpZS0+YmFja2luZ19vYmplY3RzLmZpcnN0LAorCQkJICAgICBzdHJ1Y3QgZnNjYWNoZV9vYmplY3QsIGNvb2tpZV9saW5rKTsKKworCWlmIChmc2NhY2hlX3N1Ym1pdF9vcChvYmplY3QsICZvcC0+b3ApIDwgMCkKKwkJZ290byBub2J1ZnNfdW5sb2NrOworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWxsb2Nfb3BzKTsKKworCWlmICh0ZXN0X2JpdChGU0NBQ0hFX09QX1dBSVRJTkcsICZvcC0+b3AuZmxhZ3MpKSB7CisJCV9kZWJ1ZygiPj4+IFdUIik7CisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FsbG9jX29wX3dhaXRzKTsKKwkJd2FpdF9vbl9iaXQoJm9wLT5vcC5mbGFncywgRlNDQUNIRV9PUF9XQUlUSU5HLAorCQkJICAgIGZzY2FjaGVfd2FpdF9iaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJX2RlYnVnKCI8PDwgR08iKTsKKwl9CisKKwkvKiBhc2sgdGhlIGNhY2hlIHRvIGhvbm91ciB0aGUgb3BlcmF0aW9uICovCisJcmV0ID0gb2JqZWN0LT5jYWNoZS0+b3BzLT5hbGxvY2F0ZV9wYWdlKG9wLCBwYWdlLCBnZnApOworCisJaWYgKHJldCA8IDApCisJCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX2FsbG9jc19ub2J1ZnMpOworCWVsc2UKKwkJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWxsb2NzX29rKTsKKworCWZzY2FjaGVfcHV0X3JldHJpZXZhbChvcCk7CisJX2xlYXZlKCIgPSAlZCIsIHJldCk7CisJcmV0dXJuIHJldDsKKworbm9idWZzX3VubG9jazoKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKKwlrZnJlZShvcCk7Citub2J1ZnM6CisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fYWxsb2NzX25vYnVmcyk7CisJX2xlYXZlKCIgPSAtRU5PQlVGUyIpOworCXJldHVybiAtRU5PQlVGUzsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX2FsbG9jX3BhZ2UpOworCisvKgorICogcmVsZWFzZSBhIHdyaXRlIG9wIHJlZmVyZW5jZQorICovCitzdGF0aWMgdm9pZCBmc2NhY2hlX3JlbGVhc2Vfd3JpdGVfb3Aoc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uICpfb3ApCit7CisJX2VudGVyKCJ7T1AleH0iLCBfb3AtPmRlYnVnX2lkKTsKK30KKworLyoKKyAqIHBlcmZvcm0gdGhlIGJhY2tncm91bmQgc3RvcmFnZSBvZiBhIHBhZ2UgaW50byB0aGUgY2FjaGUKKyAqLworc3RhdGljIHZvaWQgZnNjYWNoZV93cml0ZV9vcChzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKl9vcCkKK3sKKwlzdHJ1Y3QgZnNjYWNoZV9zdG9yYWdlICpvcCA9CisJCWNvbnRhaW5lcl9vZihfb3AsIHN0cnVjdCBmc2NhY2hlX3N0b3JhZ2UsIG9wKTsKKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCA9IG9wLT5vcC5vYmplY3Q7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBvYmplY3QtPmNvb2tpZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBuOworCXZvaWQgKnJlc3VsdHNbMV07CisJaW50IHJldDsKKworCV9lbnRlcigie09QJXgsJWR9Iiwgb3AtPm9wLmRlYnVnX2lkLCBhdG9taWNfcmVhZCgmb3AtPm9wLnVzYWdlKSk7CisKKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisJc3Bpbl9sb2NrKCZvYmplY3QtPmxvY2spOworCisJaWYgKCFmc2NhY2hlX29iamVjdF9pc19hY3RpdmUob2JqZWN0KSkgeworCQlzcGluX3VubG9jaygmb2JqZWN0LT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJCV9sZWF2ZSgiIik7CisJCXJldHVybjsKKwl9CisKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9zdG9yZV9jYWxscyk7CisKKwkvKiBmaW5kIGEgcGFnZSB0byBzdG9yZSAqLworCXBhZ2UgPSBOVUxMOworCW4gPSByYWRpeF90cmVlX2dhbmdfbG9va3VwX3RhZygmY29va2llLT5zdG9yZXMsIHJlc3VsdHMsIDAsIDEsCisJCQkJICAgICAgIEZTQ0FDSEVfQ09PS0lFX1BFTkRJTkdfVEFHKTsKKwlpZiAobiAhPSAxKQorCQlnb3RvIHN1cGVyc2VkZWQ7CisJcGFnZSA9IHJlc3VsdHNbMF07CisJX2RlYnVnKCJnYW5nICVkIFslbHhdIiwgbiwgcGFnZS0+aW5kZXgpOworCWlmIChwYWdlLT5pbmRleCA+IG9wLT5zdG9yZV9saW1pdCkKKwkJZ290byBzdXBlcnNlZGVkOworCisJcmFkaXhfdHJlZV90YWdfY2xlYXIoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCwKKwkJCSAgICAgRlNDQUNIRV9DT09LSUVfUEVORElOR19UQUcpOworCisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAocGFnZSkgeworCQlyZXQgPSBvYmplY3QtPmNhY2hlLT5vcHMtPndyaXRlX3BhZ2Uob3AsIHBhZ2UpOworCQlmc2NhY2hlX2VuZF9wYWdlX3dyaXRlKGNvb2tpZSwgcGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJaWYgKHJldCA8IDApCisJCQlmc2NhY2hlX2Fib3J0X29iamVjdChvYmplY3QpOworCQllbHNlCisJCQlmc2NhY2hlX2VucXVldWVfb3BlcmF0aW9uKCZvcC0+b3ApOworCX0KKworCV9sZWF2ZSgiIik7CisJcmV0dXJuOworCitzdXBlcnNlZGVkOgorCS8qIHRoaXMgd3JpdGVyIGlzIGdvaW5nIGF3YXkgYW5kIHRoZXJlIGFyZW4ndCBhbnkgbW9yZSB0aGluZ3MgdG8KKwkgKiB3cml0ZSAqLworCV9kZWJ1ZygiY2Vhc2UiKTsKKwljbGVhcl9iaXQoRlNDQUNIRV9PQkpFQ1RfUEVORElOR19XUklURSwgJm9iamVjdC0+ZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCV9sZWF2ZSgiIik7Cit9CisKKy8qCisgKiByZXF1ZXN0IGEgcGFnZSBiZSBzdG9yZWQgaW4gdGhlIGNhY2hlCisgKiAtIHJldHVybnM6CisgKiAgIC1FTk9NRU0JLSBvdXQgb2YgbWVtb3J5LCBub3RoaW5nIGRvbmUKKyAqICAgLUVOT0JVRlMJLSBubyBiYWNraW5nIG9iamVjdCBhdmFpbGFibGUgaW4gd2hpY2ggdG8gY2FjaGUgdGhlIHBhZ2UKKyAqICAgMAkJLSBkaXNwYXRjaGVkIGEgd3JpdGUgLSBpdCdsbCBjYWxsIGVuZF9pb19mdW5jKCkgd2hlbiBmaW5pc2hlZAorICoKKyAqIGlmIHRoZSBjb29raWUgc3RpbGwgaGFzIGEgYmFja2luZyBvYmplY3QgYXQgdGhpcyBwb2ludCwgdGhhdCBvYmplY3QgY2FuIGJlCisgKiBpbiBvbmUgb2YgYSBmZXcgc3RhdGVzIHdpdGggcmVzcGVjdCB0byBzdG9yYWdlIHByb2Nlc3Npbmc6CisgKgorICogICgxKSBuZWdhdGl2ZSBsb29rdXAsIG9iamVjdCBub3QgeWV0IGNyZWF0ZWQgKEZTQ0FDSEVfQ09PS0lFX0NSRUFUSU5HIGlzCisgKiAgICAgIHNldCkKKyAqCisgKgkoYSkgbm8gd3JpdGVzIHlldCAoc2V0IEZTQ0FDSEVfQ09PS0lFX1BFTkRJTkdfRklMTCBhbmQgcXVldWUgZGVmZXJyZWQKKyAqCSAgICBmaWxsIG9wKQorICoKKyAqCShiKSB3cml0ZXMgZGVmZXJyZWQgdGlsbCBwb3N0LWNyZWF0aW9uIChtYXJrIHBhZ2UgZm9yIHdyaXRpbmcgYW5kCisgKgkgICAgcmV0dXJuIGltbWVkaWF0ZWx5KQorICoKKyAqICAoMikgbmVnYXRpdmUgbG9va3VwLCBvYmplY3QgY3JlYXRlZCwgaW5pdGlhbCBmaWxsIGJlaW5nIG1hZGUgZnJvbSBuZXRmcworICogICAgICAoRlNDQUNIRV9DT09LSUVfSU5JVElBTF9GSUxMIGlzIHNldCkKKyAqCisgKgkoYSkgZmlsbCBwb2ludCBub3QgeWV0IHJlYWNoZWQgdGhpcyBwYWdlIChtYXJrIHBhZ2UgZm9yIHdyaXRpbmcgYW5kCisgKiAgICAgICAgICByZXR1cm4pCisgKgorICoJKGIpIGZpbGwgcG9pbnQgcGFzc2VkIHRoaXMgcGFnZSAocXVldWUgb3AgdG8gc3RvcmUgdGhpcyBwYWdlKQorICoKKyAqICAoMykgb2JqZWN0IGV4dGFudCAocXVldWUgb3AgdG8gc3RvcmUgdGhpcyBwYWdlKQorICoKKyAqIGFueSBvdGhlciBzdGF0ZSBpcyBpbnZhbGlkCisgKi8KK2ludCBfX2ZzY2FjaGVfd3JpdGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSBnZnBfdCBnZnApCit7CisJc3RydWN0IGZzY2FjaGVfc3RvcmFnZSAqb3A7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisJaW50IHJldDsKKworCV9lbnRlcigiJXAsJXgsIiwgY29va2llLCAodTMyKSBwYWdlLT5mbGFncyk7CisKKwlBU1NFUlRDTVAoY29va2llLT5kZWYtPnR5cGUsICE9LCBGU0NBQ0hFX0NPT0tJRV9UWVBFX0lOREVYKTsKKwlBU1NFUlQoUGFnZUZzQ2FjaGUocGFnZSkpOworCisJZnNjYWNoZV9zdGF0KCZmc2NhY2hlX25fc3RvcmVzKTsKKworCW9wID0ga3phbGxvYyhzaXplb2YoKm9wKSwgR0ZQX05PSU8pOworCWlmICghb3ApCisJCWdvdG8gbm9tZW07CisKKwlmc2NhY2hlX29wZXJhdGlvbl9pbml0KCZvcC0+b3AsIGZzY2FjaGVfcmVsZWFzZV93cml0ZV9vcCk7CisJZnNjYWNoZV9vcGVyYXRpb25faW5pdF9zbG93KCZvcC0+b3AsIGZzY2FjaGVfd3JpdGVfb3ApOworCW9wLT5vcC5mbGFncyA9IEZTQ0FDSEVfT1BfU0xPVyB8ICgxIDw8IEZTQ0FDSEVfT1BfV0FJVElORyk7CisKKwlyZXQgPSByYWRpeF90cmVlX3ByZWxvYWQoZ2ZwICYgfl9fR0ZQX0hJR0hNRU0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG5vbWVtX2ZyZWU7CisKKwlyZXQgPSAtRU5PQlVGUzsKKwlzcGluX2xvY2soJmNvb2tpZS0+bG9jayk7CisKKwlpZiAoaGxpc3RfZW1wdHkoJmNvb2tpZS0+YmFja2luZ19vYmplY3RzKSkKKwkJZ290byBub2J1ZnM7CisJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgY29va2llX2xpbmspOworCWlmICh0ZXN0X2JpdChGU0NBQ0hFX0lPRVJST1IsICZvYmplY3QtPmNhY2hlLT5mbGFncykpCisJCWdvdG8gbm9idWZzOworCisJLyogYWRkIHRoZSBwYWdlIHRvIHRoZSBwZW5kaW5nLXN0b3JhZ2UgcmFkaXggdHJlZSBvbiB0aGUgYmFja2luZworCSAqIG9iamVjdCAqLworCXNwaW5fbG9jaygmb2JqZWN0LT5sb2NrKTsKKworCV9kZWJ1Zygic3RvcmUgbGltaXQgJWxseCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIG9iamVjdC0+c3RvcmVfbGltaXQpOworCisJcmV0ID0gcmFkaXhfdHJlZV9pbnNlcnQoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCwgcGFnZSk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA9PSAtRUVYSVNUKQorCQkJZ290byBhbHJlYWR5X3F1ZXVlZDsKKwkJX2RlYnVnKCJpbnNlcnQgZmFpbGVkICVkIiwgcmV0KTsKKwkJZ290byBub2J1ZnNfdW5sb2NrX29iajsKKwl9CisKKwlyYWRpeF90cmVlX3RhZ19zZXQoJmNvb2tpZS0+c3RvcmVzLCBwYWdlLT5pbmRleCwKKwkJCSAgIEZTQ0FDSEVfQ09PS0lFX1BFTkRJTkdfVEFHKTsKKwlwYWdlX2NhY2hlX2dldChwYWdlKTsKKworCS8qIHdlIG9ubHkgd2FudCBvbmUgd3JpdGVyIGF0IGEgdGltZSwgYnV0IHdlIGRvIG5lZWQgdG8gcXVldWUgbmV3CisJICogd3JpdGVycyBhZnRlciBleGNsdXNpdmUgb3BzICovCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoRlNDQUNIRV9PQkpFQ1RfUEVORElOR19XUklURSwgJm9iamVjdC0+ZmxhZ3MpKQorCQlnb3RvIGFscmVhZHlfcGVuZGluZzsKKworCXNwaW5fdW5sb2NrKCZvYmplY3QtPmxvY2spOworCisJb3AtPm9wLmRlYnVnX2lkCT0gYXRvbWljX2luY19yZXR1cm4oJmZzY2FjaGVfb3BfZGVidWdfaWQpOworCW9wLT5zdG9yZV9saW1pdCA9IG9iamVjdC0+c3RvcmVfbGltaXQ7CisKKwlpZiAoZnNjYWNoZV9zdWJtaXRfb3Aob2JqZWN0LCAmb3AtPm9wKSA8IDApCisJCWdvdG8gc3VibWl0X2ZhaWxlZDsKKworCXNwaW5fdW5sb2NrKCZjb29raWUtPmxvY2spOworCXJhZGl4X3RyZWVfcHJlbG9hZF9lbmQoKTsKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9zdG9yZV9vcHMpOworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3Jlc19vayk7CisKKwkvKiB0aGUgc2xvdyB3b3JrIHF1ZXVlIG5vdyBjYXJyaWVzIGl0cyBvd24gcmVmIG9uIHRoZSBvYmplY3QgKi8KKwlmc2NhY2hlX3B1dF9vcGVyYXRpb24oJm9wLT5vcCk7CisJX2xlYXZlKCIgPSAwIik7CisJcmV0dXJuIDA7CisKK2FscmVhZHlfcXVldWVkOgorCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3Jlc19hZ2Fpbik7CithbHJlYWR5X3BlbmRpbmc6CisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCWtmcmVlKG9wKTsKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9zdG9yZXNfb2spOworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworCitzdWJtaXRfZmFpbGVkOgorCXJhZGl4X3RyZWVfZGVsZXRlKCZjb29raWUtPnN0b3JlcywgcGFnZS0+aW5kZXgpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwlyZXQgPSAtRU5PQlVGUzsKKwlnb3RvIG5vYnVmczsKKworbm9idWZzX3VubG9ja19vYmo6CisJc3Bpbl91bmxvY2soJm9iamVjdC0+bG9jayk7Citub2J1ZnM6CisJc3Bpbl91bmxvY2soJmNvb2tpZS0+bG9jayk7CisJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCWtmcmVlKG9wKTsKKwlmc2NhY2hlX3N0YXQoJmZzY2FjaGVfbl9zdG9yZXNfbm9idWZzKTsKKwlfbGVhdmUoIiA9IC1FTk9CVUZTIik7CisJcmV0dXJuIC1FTk9CVUZTOworCitub21lbV9mcmVlOgorCWtmcmVlKG9wKTsKK25vbWVtOgorCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3N0b3Jlc19vb20pOworCV9sZWF2ZSgiID0gLUVOT01FTSIpOworCXJldHVybiAtRU5PTUVNOworfQorRVhQT1JUX1NZTUJPTChfX2ZzY2FjaGVfd3JpdGVfcGFnZSk7CisKKy8qCisgKiByZW1vdmUgYSBwYWdlIGZyb20gdGhlIGNhY2hlCisgKi8KK3ZvaWQgX19mc2NhY2hlX3VuY2FjaGVfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3Q7CisKKwlfZW50ZXIoIiwlcCIsIHBhZ2UpOworCisJQVNTRVJUQ01QKGNvb2tpZS0+ZGVmLT50eXBlLCAhPSwgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCk7CisJQVNTRVJUQ01QKHBhZ2UsICE9LCBOVUxMKTsKKworCWZzY2FjaGVfc3RhdCgmZnNjYWNoZV9uX3VuY2FjaGVzKTsKKworCS8qIGNhY2hlIHdpdGhkcmF3YWwgbWF5IGJlYXQgdXMgdG8gaXQgKi8KKwlpZiAoIVBhZ2VGc0NhY2hlKHBhZ2UpKQorCQlnb3RvIGRvbmU7CisKKwkvKiBnZXQgdGhlIG9iamVjdCAqLworCXNwaW5fbG9jaygmY29va2llLT5sb2NrKTsKKworCWlmIChobGlzdF9lbXB0eSgmY29va2llLT5iYWNraW5nX29iamVjdHMpKSB7CisJCUNsZWFyUGFnZUZzQ2FjaGUocGFnZSk7CisJCWdvdG8gZG9uZV91bmxvY2s7CisJfQorCisJb2JqZWN0ID0gaGxpc3RfZW50cnkoY29va2llLT5iYWNraW5nX29iamVjdHMuZmlyc3QsCisJCQkgICAgIHN0cnVjdCBmc2NhY2hlX29iamVjdCwgY29va2llX2xpbmspOworCisJLyogdGhlcmUgbWlnaHQgbm93IGJlIHN0dWZmIG9uIGRpc2sgd2UgY291bGQgcmVhZCAqLworCWNsZWFyX2JpdChGU0NBQ0hFX0NPT0tJRV9OT19EQVRBX1lFVCwgJmNvb2tpZS0+ZmxhZ3MpOworCisJLyogb25seSBpbnZva2UgdGhlIGNhY2hlIGJhY2tlbmQgaWYgd2UgbWFuYWdlZCB0byBtYXJrIHRoZSBwYWdlCisJICogdW5jYWNoZWQgaGVyZTsgdGhpcyBkZWFscyB3aXRoIHN5bmNocm9uaXNhdGlvbiB2cyB3aXRoZHJhd2FsICovCisJaWYgKFRlc3RDbGVhclBhZ2VGc0NhY2hlKHBhZ2UpICYmCisJICAgIG9iamVjdC0+Y2FjaGUtPm9wcy0+dW5jYWNoZV9wYWdlKSB7CisJCS8qIHRoZSBjYWNoZSBiYWNrZW5kIHJlbGVhc2VzIHRoZSBjb29raWUgbG9jayAqLworCQlvYmplY3QtPmNhY2hlLT5vcHMtPnVuY2FjaGVfcGFnZShvYmplY3QsIHBhZ2UpOworCQlnb3RvIGRvbmU7CisJfQorCitkb25lX3VubG9jazoKKwlzcGluX3VubG9jaygmY29va2llLT5sb2NrKTsKK2RvbmU6CisJX2xlYXZlKCIiKTsKK30KK0VYUE9SVF9TWU1CT0woX19mc2NhY2hlX3VuY2FjaGVfcGFnZSk7CisKKy8qKgorICogZnNjYWNoZV9tYXJrX3BhZ2VzX2NhY2hlZCAtIE1hcmsgcGFnZXMgYXMgYmVpbmcgY2FjaGVkCisgKiBAb3A6IFRoZSByZXRyaWV2YWwgb3AgcGFnZXMgYXJlIGJlaW5nIG1hcmtlZCBmb3IKKyAqIEBwYWdldmVjOiBUaGUgcGFnZXMgdG8gYmUgbWFya2VkCisgKgorICogTWFyayBhIGJ1bmNoIG9mIG5ldGZzIHBhZ2VzIGFzIGJlaW5nIGNhY2hlZC4gIEFmdGVyIHRoaXMgaXMgY2FsbGVkLAorICogdGhlIG5ldGZzIG11c3QgY2FsbCBmc2NhY2hlX3VuY2FjaGVfcGFnZSgpIHRvIHJlbW92ZSB0aGUgbWFyay4KKyAqLwordm9pZCBmc2NhY2hlX21hcmtfcGFnZXNfY2FjaGVkKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsCisJCQkgICAgICAgc3RydWN0IHBhZ2V2ZWMgKnBhZ2V2ZWMpCit7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBvcC0+b3Aub2JqZWN0LT5jb29raWU7CisJdW5zaWduZWQgbG9uZyBsb29wOworCisjaWZkZWYgQ09ORklHX0ZTQ0FDSEVfU1RBVFMKKwlhdG9taWNfYWRkKHBhZ2V2ZWMtPm5yLCAmZnNjYWNoZV9uX21hcmtzKTsKKyNlbmRpZgorCisJZm9yIChsb29wID0gMDsgbG9vcCA8IHBhZ2V2ZWMtPm5yOyBsb29wKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwYWdldmVjLT5wYWdlc1tsb29wXTsKKworCQlfZGVidWcoIi0gbWFyayAlcHslbHh9IiwgcGFnZSwgcGFnZS0+aW5kZXgpOworCQlpZiAoVGVzdFNldFBhZ2VGc0NhY2hlKHBhZ2UpKSB7CisJCQlzdGF0aWMgYm9vbCBvbmNlX29ubHk7CisJCQlpZiAoIW9uY2Vfb25seSkgeworCQkJCW9uY2Vfb25seSA9IHRydWU7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRlMtQ2FjaGU6IgorCQkJCSAgICAgICAiIENvb2tpZSB0eXBlICVzIG1hcmtlZCBwYWdlICVseCIKKwkJCQkgICAgICAgIiBtdWx0aXBsZSB0aW1lc1xuIiwKKwkJCQkgICAgICAgY29va2llLT5kZWYtPm5hbWUsIHBhZ2UtPmluZGV4KTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChjb29raWUtPmRlZi0+bWFya19wYWdlc19jYWNoZWQpCisJCWNvb2tpZS0+ZGVmLT5tYXJrX3BhZ2VzX2NhY2hlZChjb29raWUtPm5ldGZzX2RhdGEsCisJCQkJCSAgICAgICBvcC0+bWFwcGluZywgcGFnZXZlYyk7CisJcGFnZXZlY19yZWluaXQocGFnZXZlYyk7Cit9CitFWFBPUlRfU1lNQk9MKGZzY2FjaGVfbWFya19wYWdlc19jYWNoZWQpOwpkaWZmIC0tZ2l0IGEvZnMvZnNjYWNoZS9wcm9jLmMgYi9mcy9mc2NhY2hlL3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWVhYjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZnNjYWNoZS9wcm9jLmMKQEAgLTAsMCArMSw2OCBAQAorLyogRlMtQ2FjaGUgc3RhdGlzdGljcyB2aWV3aW5nIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgT1BFUkFUSU9OCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyoKKyAqIGluaXRpYWxpc2UgdGhlIC9wcm9jL2ZzL2ZzY2FjaGUvIGRpcmVjdG9yeQorICovCitpbnQgX19pbml0IGZzY2FjaGVfcHJvY19pbml0KHZvaWQpCit7CisJX2VudGVyKCIiKTsKKworCWlmICghcHJvY19ta2RpcigiZnMvZnNjYWNoZSIsIE5VTEwpKQorCQlnb3RvIGVycm9yX2RpcjsKKworI2lmZGVmIENPTkZJR19GU0NBQ0hFX1NUQVRTCisJaWYgKCFwcm9jX2NyZWF0ZSgiZnMvZnNjYWNoZS9zdGF0cyIsIFNfSUZSRUcgfCAwNDQ0LCBOVUxMLAorCQkJICZmc2NhY2hlX3N0YXRzX2ZvcHMpKQorCQlnb3RvIGVycm9yX3N0YXRzOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0KKwlpZiAoIXByb2NfY3JlYXRlKCJmcy9mc2NhY2hlL2hpc3RvZ3JhbSIsIFNfSUZSRUcgfCAwNDQ0LCBOVUxMLAorCQkJICZmc2NhY2hlX2hpc3RvZ3JhbV9mb3BzKSkKKwkJZ290byBlcnJvcl9oaXN0b2dyYW07CisjZW5kaWYKKworCV9sZWF2ZSgiID0gMCIpOworCXJldHVybiAwOworCisjaWZkZWYgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNCitlcnJvcl9oaXN0b2dyYW06CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9TVEFUUworCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9mc2NhY2hlL3N0YXRzIiwgTlVMTCk7CitlcnJvcl9zdGF0czoKKyNlbmRpZgorCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9mc2NhY2hlIiwgTlVMTCk7CitlcnJvcl9kaXI6CisJX2xlYXZlKCIgPSAtRU5PTUVNIik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qCisgKiBjbGVhbiB1cCB0aGUgL3Byb2MvZnMvZnNjYWNoZS8gZGlyZWN0b3J5CisgKi8KK3ZvaWQgZnNjYWNoZV9wcm9jX2NsZWFudXAodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU0KKwlyZW1vdmVfcHJvY19lbnRyeSgiZnMvZnNjYWNoZS9oaXN0b2dyYW0iLCBOVUxMKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19GU0NBQ0hFX1NUQVRTCisJcmVtb3ZlX3Byb2NfZW50cnkoImZzL2ZzY2FjaGUvc3RhdHMiLCBOVUxMKTsKKyNlbmRpZgorCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9mc2NhY2hlIiwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9mcy9mc2NhY2hlL3N0YXRzLmMgYi9mcy9mc2NhY2hlL3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVkZWI5OQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ZzY2FjaGUvc3RhdHMuYwpAQCAtMCwwICsxLDIxMiBAQAorLyogRlMtQ2FjaGUgc3RhdGlzdGljcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIEZTQ0FDSEVfREVCVUdfTEVWRUwgVEhSRUFECisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKworLyoKKyAqIG9wZXJhdGlvbiBjb3VudGVycworICovCithdG9taWNfdCBmc2NhY2hlX25fb3BfcGVuZDsKK2F0b21pY190IGZzY2FjaGVfbl9vcF9ydW47CithdG9taWNfdCBmc2NhY2hlX25fb3BfZW5xdWV1ZTsKK2F0b21pY190IGZzY2FjaGVfbl9vcF9yZXF1ZXVlOworYXRvbWljX3QgZnNjYWNoZV9uX29wX2RlZmVycmVkX3JlbGVhc2U7CithdG9taWNfdCBmc2NhY2hlX25fb3BfcmVsZWFzZTsKK2F0b21pY190IGZzY2FjaGVfbl9vcF9nYzsKKworYXRvbWljX3QgZnNjYWNoZV9uX2F0dHJfY2hhbmdlZDsKK2F0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfb2s7CithdG9taWNfdCBmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX25vYnVmczsKK2F0b21pY190IGZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfbm9tZW07CithdG9taWNfdCBmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX2NhbGxzOworCithdG9taWNfdCBmc2NhY2hlX25fYWxsb2NzOworYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jc19vazsKK2F0b21pY190IGZzY2FjaGVfbl9hbGxvY3Nfd2FpdDsKK2F0b21pY190IGZzY2FjaGVfbl9hbGxvY3Nfbm9idWZzOworYXRvbWljX3QgZnNjYWNoZV9uX2FsbG9jX29wczsKK2F0b21pY190IGZzY2FjaGVfbl9hbGxvY19vcF93YWl0czsKKworYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHM7CithdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19vazsKK2F0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxzX3dhaXQ7CithdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19ub2RhdGE7CithdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19ub2J1ZnM7CithdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsc19pbnRyOworYXRvbWljX3QgZnNjYWNoZV9uX3JldHJpZXZhbHNfbm9tZW07CithdG9taWNfdCBmc2NhY2hlX25fcmV0cmlldmFsX29wczsKK2F0b21pY190IGZzY2FjaGVfbl9yZXRyaWV2YWxfb3Bfd2FpdHM7CisKK2F0b21pY190IGZzY2FjaGVfbl9zdG9yZXM7CithdG9taWNfdCBmc2NhY2hlX25fc3RvcmVzX29rOworYXRvbWljX3QgZnNjYWNoZV9uX3N0b3Jlc19hZ2FpbjsKK2F0b21pY190IGZzY2FjaGVfbl9zdG9yZXNfbm9idWZzOworYXRvbWljX3QgZnNjYWNoZV9uX3N0b3Jlc19vb207CithdG9taWNfdCBmc2NhY2hlX25fc3RvcmVfb3BzOworYXRvbWljX3QgZnNjYWNoZV9uX3N0b3JlX2NhbGxzOworCithdG9taWNfdCBmc2NhY2hlX25fbWFya3M7CithdG9taWNfdCBmc2NhY2hlX25fdW5jYWNoZXM7CisKK2F0b21pY190IGZzY2FjaGVfbl9hY3F1aXJlczsKK2F0b21pY190IGZzY2FjaGVfbl9hY3F1aXJlc19udWxsOworYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX25vX2NhY2hlOworYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX29rOworYXRvbWljX3QgZnNjYWNoZV9uX2FjcXVpcmVzX25vYnVmczsKK2F0b21pY190IGZzY2FjaGVfbl9hY3F1aXJlc19vb207CisKK2F0b21pY190IGZzY2FjaGVfbl91cGRhdGVzOworYXRvbWljX3QgZnNjYWNoZV9uX3VwZGF0ZXNfbnVsbDsKK2F0b21pY190IGZzY2FjaGVfbl91cGRhdGVzX3J1bjsKKworYXRvbWljX3QgZnNjYWNoZV9uX3JlbGlucXVpc2hlczsKK2F0b21pY190IGZzY2FjaGVfbl9yZWxpbnF1aXNoZXNfbnVsbDsKK2F0b21pY190IGZzY2FjaGVfbl9yZWxpbnF1aXNoZXNfd2FpdGNydDsKKworYXRvbWljX3QgZnNjYWNoZV9uX2Nvb2tpZV9pbmRleDsKK2F0b21pY190IGZzY2FjaGVfbl9jb29raWVfZGF0YTsKK2F0b21pY190IGZzY2FjaGVfbl9jb29raWVfc3BlY2lhbDsKKworYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9hbGxvYzsKK2F0b21pY190IGZzY2FjaGVfbl9vYmplY3Rfbm9fYWxsb2M7CithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHM7CithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfbmVnYXRpdmU7CithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfcG9zaXRpdmU7CithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2NyZWF0ZWQ7CithdG9taWNfdCBmc2NhY2hlX25fb2JqZWN0X2F2YWlsOworYXRvbWljX3QgZnNjYWNoZV9uX29iamVjdF9kZWFkOworCithdG9taWNfdCBmc2NhY2hlX25fY2hlY2thdXhfbm9uZTsKK2F0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF9va2F5OworYXRvbWljX3QgZnNjYWNoZV9uX2NoZWNrYXV4X3VwZGF0ZTsKK2F0b21pY190IGZzY2FjaGVfbl9jaGVja2F1eF9vYnNvbGV0ZTsKKworLyoKKyAqIGRpc3BsYXkgdGhlIGdlbmVyYWwgc3RhdGlzdGljcworICovCitzdGF0aWMgaW50IGZzY2FjaGVfc3RhdHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc2VxX3B1dHMobSwgIkZTLUNhY2hlIHN0YXRpc3RpY3NcbiIpOworCisJc2VxX3ByaW50ZihtLCAiQ29va2llczogaWR4PSV1IGRhdD0ldSBzcGM9JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fY29va2llX2luZGV4KSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9jb29raWVfZGF0YSksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fY29va2llX3NwZWNpYWwpKTsKKworCXNlcV9wcmludGYobSwgIk9iamVjdHM6IGFsYz0ldSBuYWw9JXUgYXZsPSV1IGRlZD0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vYmplY3RfYWxsb2MpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29iamVjdF9ub19hbGxvYyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fb2JqZWN0X2F2YWlsKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vYmplY3RfZGVhZCkpOworCXNlcV9wcmludGYobSwgIkNoa0F1eCA6IG5vbj0ldSBvaz0ldSB1cGQ9JXUgb2JzPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NoZWNrYXV4X25vbmUpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NoZWNrYXV4X29rYXkpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2NoZWNrYXV4X3VwZGF0ZSksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fY2hlY2thdXhfb2Jzb2xldGUpKTsKKworCXNlcV9wcmludGYobSwgIlBhZ2VzICA6IG1yaz0ldSB1bmM9JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fbWFya3MpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3VuY2FjaGVzKSk7CisKKwlzZXFfcHJpbnRmKG0sICJBY3F1aXJlOiBuPSV1IG51bD0ldSBub2M9JXUgb2s9JXUgbmJmPSV1IgorCQkgICAiIG9vbT0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hY3F1aXJlcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWNxdWlyZXNfbnVsbCksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWNxdWlyZXNfbm9fY2FjaGUpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FjcXVpcmVzX29rKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hY3F1aXJlc19ub2J1ZnMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FjcXVpcmVzX29vbSkpOworCisJc2VxX3ByaW50ZihtLCAiTG9va3Vwczogbj0ldSBuZWc9JXUgcG9zPSV1IGNydD0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vYmplY3RfbG9va3VwcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fb2JqZWN0X2xvb2t1cHNfbmVnYXRpdmUpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29iamVjdF9sb29rdXBzX3Bvc2l0aXZlKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vYmplY3RfY3JlYXRlZCkpOworCisJc2VxX3ByaW50ZihtLCAiVXBkYXRlczogbj0ldSBudWw9JXUgcnVuPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3VwZGF0ZXMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3VwZGF0ZXNfbnVsbCksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fdXBkYXRlc19ydW4pKTsKKworCXNlcV9wcmludGYobSwgIlJlbGlucXM6IG49JXUgbnVsPSV1IHdjcj0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZWxpbnF1aXNoZXMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3JlbGlucXVpc2hlc19udWxsKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZWxpbnF1aXNoZXNfd2FpdGNydCkpOworCisJc2VxX3ByaW50ZihtLCAiQXR0ckNoZzogbj0ldSBvaz0ldSBuYmY9JXUgb29tPSV1IHJ1bj0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWQpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2F0dHJfY2hhbmdlZF9vayksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX25vYnVmcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYXR0cl9jaGFuZ2VkX25vbWVtKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hdHRyX2NoYW5nZWRfY2FsbHMpKTsKKworCXNlcV9wcmludGYobSwgIkFsbG9jcyA6IG49JXUgb2s9JXUgd3Q9JXUgbmJmPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX2FsbG9jcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWxsb2NzX29rKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hbGxvY3Nfd2FpdCksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWxsb2NzX25vYnVmcykpOworCXNlcV9wcmludGYobSwgIkFsbG9jcyA6IG9wcz0ldSBvd3Q9JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fYWxsb2Nfb3BzKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9hbGxvY19vcF93YWl0cykpOworCisJc2VxX3ByaW50ZihtLCAiUmV0cnZsczogbj0ldSBvaz0ldSB3dD0ldSBub2Q9JXUgbmJmPSV1IgorCQkgICAiIGludD0ldSBvb209JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFscyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsc19vayksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsc193YWl0KSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9yZXRyaWV2YWxzX25vZGF0YSksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsc19ub2J1ZnMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3JldHJpZXZhbHNfaW50ciksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsc19ub21lbSkpOworCXNlcV9wcmludGYobSwgIlJldHJ2bHM6IG9wcz0ldSBvd3Q9JXVcbiIsCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsX29wcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fcmV0cmlldmFsX29wX3dhaXRzKSk7CisKKwlzZXFfcHJpbnRmKG0sICJTdG9yZXMgOiBuPSV1IG9rPSV1IGFnbj0ldSBuYmY9JXUgb29tPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3JlcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fc3RvcmVzX29rKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9zdG9yZXNfYWdhaW4pLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3Jlc19ub2J1ZnMpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3Jlc19vb20pKTsKKwlzZXFfcHJpbnRmKG0sICJTdG9yZXMgOiBvcHM9JXUgcnVuPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX3N0b3JlX29wcyksCisJCSAgIGF0b21pY19yZWFkKCZmc2NhY2hlX25fc3RvcmVfY2FsbHMpKTsKKworCXNlcV9wcmludGYobSwgIk9wcyAgICA6IHBlbmQ9JXUgcnVuPSV1IGVucT0ldVxuIiwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vcF9wZW5kKSwKKwkJICAgYXRvbWljX3JlYWQoJmZzY2FjaGVfbl9vcF9ydW4pLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29wX2VucXVldWUpKTsKKwlzZXFfcHJpbnRmKG0sICJPcHMgICAgOiBkZnI9JXUgcmVsPSV1IGdjPSV1XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29wX2RlZmVycmVkX3JlbGVhc2UpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29wX3JlbGVhc2UpLAorCQkgICBhdG9taWNfcmVhZCgmZnNjYWNoZV9uX29wX2djKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBvcGVuICIvcHJvYy9mcy9mc2NhY2hlL3N0YXRzIiBhbGxvd2luZyBwcm92aXNpb24gb2YgYSBzdGF0aXN0aWNhbCBzdW1tYXJ5CisgKi8KK3N0YXRpYyBpbnQgZnNjYWNoZV9zdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBmc2NhY2hlX3N0YXRzX3Nob3csIE5VTEwpOworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZzY2FjaGVfc3RhdHNfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZnNjYWNoZV9zdGF0c19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCit9OwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggMDZkYTA1Mi4uOGI4ZWViYyAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC0xMDMyLDYgKzEwMzIsNyBAQAogCQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJcmVxLT5vdXQuYXJncGFnZXMgPSAxOwogCXJlcS0+bnVtX3BhZ2VzID0gMTsKIAlyZXEtPnBhZ2VzWzBdID0gcGFnZTsKIAlmdXNlX3JlYWRfZmlsbChyZXEsIGZpbGUsIGlub2RlLCBmaWxlLT5mX3BvcywgUEFHRV9TSVpFLCBGVVNFX1JFQURESVIpOwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCA4MjFkMTBmLi4yYjI1MTMzIDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtMzg2LDcgKzM4Niw2IEBACiAJcmVxLT5pbi5udW1hcmdzID0gMTsKIAlyZXEtPmluLmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZnVzZV9yZWFkX2luKTsKIAlyZXEtPmluLmFyZ3NbMF0udmFsdWUgPSBpbmFyZzsKLQlyZXEtPm91dC5hcmdwYWdlcyA9IDE7CiAJcmVxLT5vdXQuYXJndmFyID0gMTsKIAlyZXEtPm91dC5udW1hcmdzID0gMTsKIAlyZXEtPm91dC5hcmdzWzBdLnNpemUgPSBjb3VudDsKQEAgLTQ1Myw2ICs0NTIsNyBAQAogCWF0dHJfdmVyID0gZnVzZV9nZXRfYXR0cl92ZXJzaW9uKGZjKTsKIAogCXJlcS0+b3V0LnBhZ2VfemVyb2luZyA9IDE7CisJcmVxLT5vdXQuYXJncGFnZXMgPSAxOwogCXJlcS0+bnVtX3BhZ2VzID0gMTsKIAlyZXEtPnBhZ2VzWzBdID0gcGFnZTsKIAludW1fcmVhZCA9IGZ1c2Vfc2VuZF9yZWFkKHJlcSwgZmlsZSwgaW5vZGUsIHBvcywgY291bnQsIE5VTEwpOwpAQCAtNTEwLDYgKzUxMCw4IEBACiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKIAlsb2ZmX3QgcG9zID0gcGFnZV9vZmZzZXQocmVxLT5wYWdlc1swXSk7CiAJc2l6ZV90IGNvdW50ID0gcmVxLT5udW1fcGFnZXMgPDwgUEFHRV9DQUNIRV9TSElGVDsKKworCXJlcS0+b3V0LmFyZ3BhZ2VzID0gMTsKIAlyZXEtPm91dC5wYWdlX3plcm9pbmcgPSAxOwogCWZ1c2VfcmVhZF9maWxsKHJlcSwgZmlsZSwgaW5vZGUsIHBvcywgY291bnQsIEZVU0VfUkVBRCk7CiAJcmVxLT5taXNjLnJlYWQuYXR0cl92ZXIgPSBmdXNlX2dldF9hdHRyX3ZlcnNpb24oZmMpOwpAQCAtNjIxLDcgKzYyMyw2IEBACiAJaW5hcmctPmZsYWdzID0gZmlsZSA/IGZpbGUtPmZfZmxhZ3MgOiAwOwogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX1dSSVRFOwogCXJlcS0+aW4uaC5ub2RlaWQgPSBnZXRfbm9kZV9pZChpbm9kZSk7Ci0JcmVxLT5pbi5hcmdwYWdlcyA9IDE7CiAJcmVxLT5pbi5udW1hcmdzID0gMjsKIAlpZiAoZmMtPm1pbm9yIDwgOSkKIAkJcmVxLT5pbi5hcmdzWzBdLnNpemUgPSBGVVNFX0NPTVBBVF9XUklURV9JTl9TSVpFOwpAQCAtNjk1LDYgKzY5Niw3IEBACiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCisJcmVxLT5pbi5hcmdwYWdlcyA9IDE7CiAJcmVxLT5udW1fcGFnZXMgPSAxOwogCXJlcS0+cGFnZXNbMF0gPSBwYWdlOwogCXJlcS0+cGFnZV9vZmZzZXQgPSBvZmZzZXQ7CkBAIC03NzEsNiArNzczLDcgQEAKIAlzaXplX3QgY291bnQgPSAwOwogCWludCBlcnI7CiAKKwlyZXEtPmluLmFyZ3BhZ2VzID0gMTsKIAlyZXEtPnBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0OwogCiAJZG8gewpAQCAtOTM1LDIxICs5MzgsMjggQEAKIH0KIAogc3RhdGljIGludCBmdXNlX2dldF91c2VyX3BhZ2VzKHN0cnVjdCBmdXNlX3JlcSAqcmVxLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJICAgICAgIHVuc2lnbmVkIG5ieXRlcywgaW50IHdyaXRlKQorCQkJICAgICAgIHVuc2lnbmVkICpuYnl0ZXNwLCBpbnQgd3JpdGUpCiB7CisJdW5zaWduZWQgbmJ5dGVzID0gKm5ieXRlc3A7CiAJdW5zaWduZWQgbG9uZyB1c2VyX2FkZHIgPSAodW5zaWduZWQgbG9uZykgYnVmOwogCXVuc2lnbmVkIG9mZnNldCA9IHVzZXJfYWRkciAmIH5QQUdFX01BU0s7CiAJaW50IG5wYWdlczsKIAotCS8qIFRoaXMgZG9lc24ndCB3b3JrIHdpdGggbmZzZCAqLwotCWlmICghY3VycmVudC0+bW0pCi0JCXJldHVybiAtRVBFUk07CisJLyogU3BlY2lhbCBjYXNlIGZvciBrZXJuZWwgSS9POiBjYW4gY29weSBkaXJlY3RseSBpbnRvIHRoZSBidWZmZXIgKi8KKwlpZiAoc2VnbWVudF9lcShnZXRfZnMoKSwgS0VSTkVMX0RTKSkgeworCQlpZiAod3JpdGUpCisJCQlyZXEtPmluLmFyZ3NbMV0udmFsdWUgPSAodm9pZCAqKSB1c2VyX2FkZHI7CisJCWVsc2UKKwkJCXJlcS0+b3V0LmFyZ3NbMF0udmFsdWUgPSAodm9pZCAqKSB1c2VyX2FkZHI7CisKKwkJcmV0dXJuIDA7CisJfQogCiAJbmJ5dGVzID0gbWluKG5ieXRlcywgKHVuc2lnbmVkKSBGVVNFX01BWF9QQUdFU19QRVJfUkVRIDw8IFBBR0VfU0hJRlQpOwogCW5wYWdlcyA9IChuYnl0ZXMgKyBvZmZzZXQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwogCW5wYWdlcyA9IGNsYW1wKG5wYWdlcywgMSwgRlVTRV9NQVhfUEFHRVNfUEVSX1JFUSk7CiAJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCW5wYWdlcyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCB1c2VyX2FkZHIsIG5wYWdlcywgd3JpdGUsCisJbnBhZ2VzID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIHVzZXJfYWRkciwgbnBhZ2VzLCAhd3JpdGUsCiAJCQkJMCwgcmVxLT5wYWdlcywgTlVMTCk7CiAJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlpZiAobnBhZ2VzIDwgMCkKQEAgLTk1Nyw2ICs5NjcsMTUgQEAKIAogCXJlcS0+bnVtX3BhZ2VzID0gbnBhZ2VzOwogCXJlcS0+cGFnZV9vZmZzZXQgPSBvZmZzZXQ7CisKKwlpZiAod3JpdGUpCisJCXJlcS0+aW4uYXJncGFnZXMgPSAxOworCWVsc2UKKwkJcmVxLT5vdXQuYXJncGFnZXMgPSAxOworCisJbmJ5dGVzID0gKHJlcS0+bnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQpIC0gcmVxLT5wYWdlX29mZnNldDsKKwkqbmJ5dGVzcCA9IG1pbigqbmJ5dGVzcCwgbmJ5dGVzKTsKKwogCXJldHVybiAwOwogfQogCkBAIC05NzksMTUgKzk5OCwxMyBAQAogCiAJd2hpbGUgKGNvdW50KSB7CiAJCXNpemVfdCBucmVzOwotCQlzaXplX3QgbmJ5dGVzX2xpbWl0ID0gbWluKGNvdW50LCBubWF4KTsKLQkJc2l6ZV90IG5ieXRlczsKLQkJaW50IGVyciA9IGZ1c2VfZ2V0X3VzZXJfcGFnZXMocmVxLCBidWYsIG5ieXRlc19saW1pdCwgIXdyaXRlKTsKKwkJc2l6ZV90IG5ieXRlcyA9IG1pbihjb3VudCwgbm1heCk7CisJCWludCBlcnIgPSBmdXNlX2dldF91c2VyX3BhZ2VzKHJlcSwgYnVmLCAmbmJ5dGVzLCB3cml0ZSk7CiAJCWlmIChlcnIpIHsKIAkJCXJlcyA9IGVycjsKIAkJCWJyZWFrOwogCQl9Ci0JCW5ieXRlcyA9IChyZXEtPm51bV9wYWdlcyA8PCBQQUdFX1NISUZUKSAtIHJlcS0+cGFnZV9vZmZzZXQ7Ci0JCW5ieXRlcyA9IG1pbihuYnl0ZXNfbGltaXQsIG5ieXRlcyk7CisKIAkJaWYgKHdyaXRlKQogCQkJbnJlcyA9IGZ1c2Vfc2VuZF93cml0ZShyZXEsIGZpbGUsIGlub2RlLCBwb3MsIG5ieXRlcywKIAkJCQkJICAgICAgIGN1cnJlbnQtPmZpbGVzKTsKQEAgLTExNjMsNiArMTE4MCw3IEBACiAJZnVzZV93cml0ZV9maWxsKHJlcSwgTlVMTCwgZmYsIGlub2RlLCBwYWdlX29mZnNldChwYWdlKSwgMCwgMSk7CiAKIAljb3B5X2hpZ2hwYWdlKHRtcF9wYWdlLCBwYWdlKTsKKwlyZXEtPmluLmFyZ3BhZ2VzID0gMTsKIAlyZXEtPm51bV9wYWdlcyA9IDE7CiAJcmVxLT5wYWdlc1swXSA9IHRtcF9wYWdlOwogCXJlcS0+cGFnZV9vZmZzZXQgPSAwOwpAQCAtMTIzNCw4ICsxMjUyLDkgQEAKICAqIC0gc3luYygyKQogICogLSB0cnlfdG9fZnJlZV9wYWdlcygpIHdpdGggb3JkZXIgPiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUgogICovCi1zdGF0aWMgaW50IGZ1c2VfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbnQgZnVzZV9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogeworCXN0cnVjdCBwYWdlICpwYWdlID0gdm1mLT5wYWdlOwogCS8qCiAJICogRG9uJ3QgdXNlIHBhZ2UtPm1hcHBpbmcgYXMgaXQgbWF5IGJlY29tZSBOVUxMIGZyb20gYQogCSAqIGNvbmN1cnJlbnQgdHJ1bmNhdGUuCkBAIC0xMjczLDYgKzEyOTIsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBmdXNlX2RpcmVjdF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwkvKiBDYW4ndCBwcm92aWRlIHRoZSBjb2hlcmVuY3kgbmVlZGVkIGZvciBNQVBfU0hBUkVEICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9NQVlTSEFSRSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gZ2VuZXJpY19maWxlX21tYXAoZmlsZSwgdm1hKTsKK30KKwogc3RhdGljIGludCBjb252ZXJ0X2Z1c2VfZmlsZV9sb2NrKGNvbnN0IHN0cnVjdCBmdXNlX2ZpbGVfbG9jayAqZmZsLAogCQkJCSAgc3RydWN0IGZpbGVfbG9jayAqZmwpCiB7CkBAIC0xOTA3LDYgKzE5MzUsNyBAQAogCS5sbHNlZWsJCT0gZnVzZV9maWxlX2xsc2VlaywKIAkucmVhZAkJPSBmdXNlX2RpcmVjdF9yZWFkLAogCS53cml0ZQkJPSBmdXNlX2RpcmVjdF93cml0ZSwKKwkubW1hcAkJPSBmdXNlX2RpcmVjdF9tbWFwLAogCS5vcGVuCQk9IGZ1c2Vfb3BlbiwKIAkuZmx1c2gJCT0gZnVzZV9mbHVzaCwKIAkucmVsZWFzZQk9IGZ1c2VfcmVsZWFzZSwKQEAgLTE5MTYsNyArMTk0NSw3IEBACiAJLnVubG9ja2VkX2lvY3RsCT0gZnVzZV9maWxlX2lvY3RsLAogCS5jb21wYXRfaW9jdGwJPSBmdXNlX2ZpbGVfY29tcGF0X2lvY3RsLAogCS5wb2xsCQk9IGZ1c2VfZmlsZV9wb2xsLAotCS8qIG5vIG1tYXAgYW5kIHNwbGljZV9yZWFkICovCisJLyogbm8gc3BsaWNlX3JlYWQgKi8KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGZ1c2VfZmlsZV9hb3BzICA9IHsKZGlmZiAtLWdpdCBhL2ZzL2dlbmVyaWNfYWNsLmMgYi9mcy9nZW5lcmljX2FjbC5jCmluZGV4IDk5NWQ2M2IuLmUwYjUzYWEgMTAwNjQ0Ci0tLSBhL2ZzL2dlbmVyaWNfYWNsLmMKKysrIGIvZnMvZ2VuZXJpY19hY2wuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJbW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCWludCBlcnJvcjsKIAotCWlub2RlLT5pX21vZGUgPSBtb2RlICYgfmN1cnJlbnQtPmZzLT51bWFzazsKKwlpbm9kZS0+aV9tb2RlID0gbW9kZSAmIH5jdXJyZW50X3VtYXNrKCk7CiAJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpKQogCQlhY2wgPSBvcHMtPmdldGFjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOwogCWlmIChhY2wpIHsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvYWNsLmMgYi9mcy9nZnMyL2FjbC5jCmluZGV4IDQzNzY0ZjQuLmZhODgxYmQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYWNsLmMKKysrIGIvZnMvZ2ZzMi9hY2wuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJaWYgKCFhY2wpIHsKLQkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJCWlmIChtb2RlICE9IGlwLT5pX2lub2RlLmlfbW9kZSkKIAkJCWVycm9yID0gbXVuZ2VfbW9kZShpcCwgbW9kZSk7CiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZpbGUuYyBiL2ZzL2dmczIvb3BzX2ZpbGUuYwppbmRleCAzYjllOGRlLi43MGI5Yjg1IDEwMDY0NAotLS0gYS9mcy9nZnMyL29wc19maWxlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZmlsZS5jCkBAIC0zMzcsOCArMzM3LDkgQEAKICAqIGJsb2NrcyBhbGxvY2F0ZWQgb24gZGlzayB0byBiYWNrIHRoYXQgcGFnZS4KICAqLwogCi1zdGF0aWMgaW50IGdmczJfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbnQgZ2ZzMl9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogeworCXN0cnVjdCBwYWdlICpwYWdlID0gdm1mLT5wYWdlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSB2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoaW5vZGUpOwpAQCAtNDEyLDYgKzQxMyw4IEBACiAJZ2ZzMl9nbG9ja19kcSgmZ2gpOwogb3V0OgogCWdmczJfaG9sZGVyX3VuaW5pdCgmZ2gpOworCWlmIChyZXQpCisJCXJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9oZnMvc3VwZXIuYyBiL2ZzL2hmcy9zdXBlci5jCmluZGV4IGM4YjVhY2YuLmEzNmJiNzQgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9zdXBlci5jCisrKyBiL2ZzL2hmcy9zdXBlci5jCkBAIC04Miw2ICs4Miw3IEBACiBzdGF0aWMgaW50IGhmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfc2I7CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHNiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAlidWYtPmZfdHlwZSA9IEhGU19TVVBFUl9NQUdJQzsKIAlidWYtPmZfYnNpemUgPSBzYi0+c19ibG9ja3NpemU7CkBAIC05MCw2ICs5MSw4IEBACiAJYnVmLT5mX2JhdmFpbCA9IGJ1Zi0+Zl9iZnJlZTsKIAlidWYtPmZfZmlsZXMgPSBIRlNfU0Ioc2IpLT5mc19hYmxvY2tzOwogCWJ1Zi0+Zl9mZnJlZSA9IEhGU19TQihzYiktPmZyZWVfYWJsb2NrczsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAlidWYtPmZfbmFtZWxlbiA9IEhGU19OQU1FTEVOOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL29wdGlvbnMuYyBiL2ZzL2hmc3BsdXMvb3B0aW9ucy5jCmluZGV4IGJhYjdmOGQuLjNmY2JiMGUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvb3B0aW9ucy5jCisrKyBiL2ZzL2hmc3BsdXMvb3B0aW9ucy5jCkBAIC00OCw3ICs0OCw3IEBACiAKIAlvcHRzLT5jcmVhdG9yID0gSEZTUExVU19ERUZfQ1JfVFlQRTsKIAlvcHRzLT50eXBlID0gSEZTUExVU19ERUZfQ1JfVFlQRTsKLQlvcHRzLT51bWFzayA9IGN1cnJlbnQtPmZzLT51bWFzazsKKwlvcHRzLT51bWFzayA9IGN1cnJlbnRfdW1hc2soKTsKIAlvcHRzLT51aWQgPSBjdXJyZW50X3VpZCgpOwogCW9wdHMtPmdpZCA9IGN1cnJlbnRfZ2lkKCk7CiAJb3B0cy0+cGFydCA9IC0xOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9zdXBlci5jIGIvZnMvaGZzcGx1cy9zdXBlci5jCmluZGV4IGViNzQ1MzEuLmYyYTY0MDIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuYworKysgYi9mcy9oZnNwbHVzL3N1cGVyLmMKQEAgLTIyMyw2ICsyMjMsNyBAQAogc3RhdGljIGludCBoZnNwbHVzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWJ1Zi0+Zl90eXBlID0gSEZTUExVU19TVVBFUl9NQUdJQzsKIAlidWYtPmZfYnNpemUgPSBzYi0+c19ibG9ja3NpemU7CkBAIC0yMzEsNiArMjMyLDggQEAKIAlidWYtPmZfYmF2YWlsID0gYnVmLT5mX2JmcmVlOwogCWJ1Zi0+Zl9maWxlcyA9IDB4RkZGRkZGRkY7CiAJYnVmLT5mX2ZmcmVlID0gMHhGRkZGRkZGRiAtIEhGU1BMVVNfU0Ioc2IpLm5leHRfY25pZDsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAlidWYtPmZfbmFtZWxlbiA9IEhGU1BMVVNfTUFYX1NUUkxFTjsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9zdXBlci5jIGIvZnMvaHBmcy9zdXBlci5jCmluZGV4IDBkMDQ5YjguLmZlY2Y0MDIgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvc3VwZXIuYworKysgYi9mcy9ocGZzL3N1cGVyLmMKQEAgLTEzNiw2ICsxMzYsNyBAQAogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGRlbnRyeS0+ZF9zYjsKIAlzdHJ1Y3QgaHBmc19zYl9pbmZvICpzYmkgPSBocGZzX3NiKHMpOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzLT5zX2JkZXYtPmJkX2Rldik7CiAJbG9ja19rZXJuZWwoKTsKIAogCS8qaWYgKHNiaS0+c2Jfbl9mcmVlID09IC0xKSB7Ki8KQEAgLTE0OSw2ICsxNTAsOCBAQAogCWJ1Zi0+Zl9iYXZhaWwgPSBzYmktPnNiX25fZnJlZTsKIAlidWYtPmZfZmlsZXMgPSBzYmktPnNiX2RpcmJhbmRfc2l6ZSAvIDQ7CiAJYnVmLT5mX2ZmcmVlID0gc2JpLT5zYl9uX2ZyZWVfZG5vZGVzOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gMjU0OwogCiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtNDc3LDcgKzQ4MCw3IEBACiAKIAl1aWQgPSBjdXJyZW50X3VpZCgpOwogCWdpZCA9IGN1cnJlbnRfZ2lkKCk7Ci0JdW1hc2sgPSBjdXJyZW50LT5mcy0+dW1hc2s7CisJdW1hc2sgPSBjdXJyZW50X3VtYXNrKCk7CiAJbG93ZXJjYXNlID0gMDsKIAljb252ID0gQ09OVl9CSU5BUlk7CiAJZWFzID0gMjsKZGlmZiAtLWdpdCBhL2ZzL2hwcGZzL2hwcGZzLmMgYi9mcy9ocHBmcy9ocHBmcy5jCmluZGV4IGIyNzhmN2YuLmE1MDg5YTYgMTAwNjQ0Ci0tLSBhL2ZzL2hwcGZzL2hwcGZzLmMKKysrIGIvZnMvaHBwZnMvaHBwZnMuYwpAQCAtMjgwLDcgKzI4MCwxMiBAQAogCQkJICAgICAgICJlcnJubyA9ICVkXG4iLCBlcnIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQotCQljb3VudCA9IGhwcGZzX3JlYWRfZmlsZShocHBmcy0+aG9zdF9mZCwgYnVmLCBjb3VudCk7CisJCWVyciA9IGhwcGZzX3JlYWRfZmlsZShocHBmcy0+aG9zdF9mZCwgYnVmLCBjb3VudCk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImhwcGZzX3JlYWQ6IHJlYWQgZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJY291bnQgPSBlcnI7CiAJCWlmIChjb3VudCA+IDApCiAJCQkqcHBvcyArPSBjb3VudDsKIAl9CmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCmluZGV4IDliODAwZDkuLjIzYTNjNzYgMTAwNjQ0Ci0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jCkBAIC05NDMsMTQgKzk0MywxMyBAQAogCiBzdGF0aWMgaW50IGNhbl9kb19odWdldGxiX3NobSh2b2lkKQogewotCXJldHVybiBsaWtlbHkoY2FwYWJsZShDQVBfSVBDX0xPQ0spIHx8Ci0JCQlpbl9ncm91cF9wKHN5c2N0bF9odWdldGxiX3NobV9ncm91cCkgfHwKLQkJCWNhbl9kb19tbG9jaygpKTsKKwlyZXR1cm4gY2FwYWJsZShDQVBfSVBDX0xPQ0spIHx8IGluX2dyb3VwX3Aoc3lzY3RsX2h1Z2V0bGJfc2htX2dyb3VwKTsKIH0KIAogc3RydWN0IGZpbGUgKmh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgaW50IGFjY3RmbGFnKQogewogCWludCBlcnJvciA9IC1FTk9NRU07CisJaW50IHVubG9ja19zaG0gPSAwOwogCXN0cnVjdCBmaWxlICpmaWxlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCAqcm9vdDsKQEAgLTk2MCwxMSArOTU5LDE0IEBACiAJaWYgKCFodWdldGxiZnNfdmZzbW91bnQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwogCi0JaWYgKCFjYW5fZG9faHVnZXRsYl9zaG0oKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKLQotCWlmICghdXNlcl9zaG1fbG9jayhzaXplLCB1c2VyKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJaWYgKCFjYW5fZG9faHVnZXRsYl9zaG0oKSkgeworCQlpZiAodXNlcl9zaG1fbG9jayhzaXplLCB1c2VyKSkgeworCQkJdW5sb2NrX3NobSA9IDE7CisJCQlXQVJOX09OQ0UoMSwKKwkJCSAgIlVzaW5nIG1sb2NrIHVsaW1pdHMgZm9yIFNITV9IVUdFVExCIGRlcHJlY2F0ZWRcbiIpOworCQl9IGVsc2UKKwkJCXJldHVybiBFUlJfUFRSKC1FUEVSTSk7CisJfQogCiAJcm9vdCA9IGh1Z2V0bGJmc192ZnNtb3VudC0+bW50X3Jvb3Q7CiAJcXVpY2tfc3RyaW5nLm5hbWUgPSBuYW1lOwpAQCAtMTAwNCw3ICsxMDA2LDggQEAKIG91dF9kZW50cnk6CiAJZHB1dChkZW50cnkpOwogb3V0X3NobV91bmxvY2s6Ci0JdXNlcl9zaG1fdW5sb2NrKHNpemUsIHVzZXIpOworCWlmICh1bmxvY2tfc2htKQorCQl1c2VyX3NobV91bmxvY2soc2l6ZSwgdXNlcik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQogCmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaAppbmRleCA1M2FmODg1Li5iNGRhYzRmIDEwMDY0NAotLS0gYS9mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL2ludGVybmFsLmgKQEAgLTExLDYgKzExLDcgQEAKIAogc3RydWN0IHN1cGVyX2Jsb2NrOwogc3RydWN0IGxpbnV4X2JpbnBybTsKK3N0cnVjdCBwYXRoOwogCiAvKgogICogYmxvY2tfZGV2LmMKQEAgLTQzLDcgKzQ0LDcgQEAKIC8qCiAgKiBleGVjLmMKICAqLwotZXh0ZXJuIHZvaWQgY2hlY2tfdW5zYWZlX2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqKTsKK2V4dGVybiBpbnQgY2hlY2tfdW5zYWZlX2V4ZWMoc3RydWN0IGxpbnV4X2JpbnBybSAqKTsKIAogLyoKICAqIG5hbWVzcGFjZS5jCkBAIC02MCwzICs2MSw4IEBACiBleHRlcm4gc3RydWN0IHZmc21vdW50ICpjb3B5X3RyZWUoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKIAogZXh0ZXJuIHZvaWQgX19pbml0IG1udF9pbml0KHZvaWQpOworCisvKgorICogZnNfc3RydWN0LmMKKyAqLworZXh0ZXJuIHZvaWQgY2hyb290X2ZzX3JlZnMoc3RydWN0IHBhdGggKiwgc3RydWN0IHBhdGggKik7CmRpZmYgLS1naXQgYS9mcy9pc29mcy9pbm9kZS5jIGIvZnMvaXNvZnMvaW5vZGUuYwppbmRleCAxM2QyZWRkLi5iNGNiZTk2IDEwMDY0NAotLS0gYS9mcy9pc29mcy9pbm9kZS5jCisrKyBiL2ZzL2lzb2ZzL2lub2RlLmMKQEAgLTkyMyw2ICs5MjMsNyBAQAogc3RhdGljIGludCBpc29mc19zdGF0ZnMgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzYi0+c19iZGV2LT5iZF9kZXYpOwogCiAJYnVmLT5mX3R5cGUgPSBJU09GU19TVVBFUl9NQUdJQzsKIAlidWYtPmZfYnNpemUgPSBzYi0+c19ibG9ja3NpemU7CkBAIC05MzIsNiArOTMzLDggQEAKIAlidWYtPmZfYmF2YWlsID0gMDsKIAlidWYtPmZfZmlsZXMgPSBJU09GU19TQihzYiktPnNfbmlub2RlczsKIAlidWYtPmZfZmZyZWUgPSAwOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCWJ1Zi0+Zl9uYW1lbGVuID0gTkFNRV9NQVg7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9qYmQvY29tbWl0LmMgYi9mcy9qYmQvY29tbWl0LmMKaW5kZXggM2ZiZmZiMS4uZjgwNzdiOSAxMDA2NDQKLS0tIGEvZnMvamJkL2NvbW1pdC5jCisrKyBiL2ZzL2piZC9jb21taXQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KIAogLyoKICAqIERlZmF1bHQgSU8gZW5kIGhhbmRsZXIgZm9yIHRlbXBvcmFyeSBCSl9JTyBidWZmZXJfaGVhZHMuCkBAIC0xNzEsMTQgKzE3MiwxNSBAQAogCXJldHVybiAocmV0ID09IC1FSU8pOwogfQogCi1zdGF0aWMgdm9pZCBqb3VybmFsX2RvX3N1Ym1pdF9kYXRhKHN0cnVjdCBidWZmZXJfaGVhZCAqKndidWYsIGludCBidWZzKQorc3RhdGljIHZvaWQgam91cm5hbF9kb19zdWJtaXRfZGF0YShzdHJ1Y3QgYnVmZmVyX2hlYWQgKip3YnVmLCBpbnQgYnVmcywKKwkJCQkgICBpbnQgd3JpdGVfb3ApCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYnVmczsgaSsrKSB7CiAJCXdidWZbaV0tPmJfZW5kX2lvID0gZW5kX2J1ZmZlcl93cml0ZV9zeW5jOwogCQkvKiBXZSB1c2UtdXAgb3VyIHNhZmV0eSByZWZlcmVuY2UgaW4gc3VibWl0X2JoKCkgKi8KLQkJc3VibWl0X2JoKFdSSVRFLCB3YnVmW2ldKTsKKwkJc3VibWl0X2JoKHdyaXRlX29wLCB3YnVmW2ldKTsKIAl9CiB9CiAKQEAgLTE4Niw3ICsxODgsOCBAQAogICogIFN1Ym1pdCBhbGwgdGhlIGRhdGEgYnVmZmVycyB0byBkaXNrCiAgKi8KIHN0YXRpYyBpbnQgam91cm5hbF9zdWJtaXRfZGF0YV9idWZmZXJzKGpvdXJuYWxfdCAqam91cm5hbCwKLQkJCQl0cmFuc2FjdGlvbl90ICpjb21taXRfdHJhbnNhY3Rpb24pCisJCQkJICAgICAgIHRyYW5zYWN0aW9uX3QgKmNvbW1pdF90cmFuc2FjdGlvbiwKKwkJCQkgICAgICAgaW50IHdyaXRlX29wKQogewogCXN0cnVjdCBqb3VybmFsX2hlYWQgKmpoOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CkBAIC0yMjUsNyArMjI4LDcgQEAKIAkJCQlCVUZGRVJfVFJBQ0UoYmgsICJuZWVkcyBibG9ja2luZyBsb2NrIik7CiAJCQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKIAkJCQkvKiBXcml0ZSBvdXQgYWxsIGRhdGEgdG8gcHJldmVudCBkZWFkbG9ja3MgKi8KLQkJCQlqb3VybmFsX2RvX3N1Ym1pdF9kYXRhKHdidWYsIGJ1ZnMpOworCQkJCWpvdXJuYWxfZG9fc3VibWl0X2RhdGEod2J1ZiwgYnVmcywgd3JpdGVfb3ApOwogCQkJCWJ1ZnMgPSAwOwogCQkJCWxvY2tfYnVmZmVyKGJoKTsKIAkJCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKQEAgLTI1Niw3ICsyNTksNyBAQAogCQkJamJkX3VubG9ja19iaF9zdGF0ZShiaCk7CiAJCQlpZiAoYnVmcyA9PSBqb3VybmFsLT5qX3didWZzaXplKSB7CiAJCQkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKLQkJCQlqb3VybmFsX2RvX3N1Ym1pdF9kYXRhKHdidWYsIGJ1ZnMpOworCQkJCWpvdXJuYWxfZG9fc3VibWl0X2RhdGEod2J1ZiwgYnVmcywgd3JpdGVfb3ApOwogCQkJCWJ1ZnMgPSAwOwogCQkJCWdvdG8gd3JpdGVfb3V0X2RhdGE7CiAJCQl9CkBAIC0yODYsNyArMjg5LDcgQEAKIAkJfQogCX0KIAlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwotCWpvdXJuYWxfZG9fc3VibWl0X2RhdGEod2J1ZiwgYnVmcyk7CisJam91cm5hbF9kb19zdWJtaXRfZGF0YSh3YnVmLCBidWZzLCB3cml0ZV9vcCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzE1LDYgKzMxOCw3IEBACiAJaW50IGZpcnN0X3RhZyA9IDA7CiAJaW50IHRhZ19mbGFnOwogCWludCBpOworCWludCB3cml0ZV9vcCA9IFdSSVRFOwogCiAJLyoKIAkgKiBGaXJzdCBqb2I6IGxvY2sgZG93biB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgd2FpdCBmb3IKQEAgLTM0Nyw2ICszNTEsOCBAQAogCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAljb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhdGUgPSBUX0xPQ0tFRDsKIAorCWlmIChjb21taXRfdHJhbnNhY3Rpb24tPnRfc3luY2hyb25vdXNfY29tbWl0KQorCQl3cml0ZV9vcCA9IFdSSVRFX1NZTkM7CiAJc3Bpbl9sb2NrKCZjb21taXRfdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCXdoaWxlIChjb21taXRfdHJhbnNhY3Rpb24tPnRfdXBkYXRlcykgewogCQlERUZJTkVfV0FJVCh3YWl0KTsKQEAgLTQzMSw3ICs0MzcsOCBAQAogCSAqIE5vdyBzdGFydCBmbHVzaGluZyB0aGluZ3MgdG8gZGlzaywgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyCiAJICogb24gdGhlIHRyYW5zYWN0aW9uIGxpc3RzLiAgRGF0YSBibG9ja3MgZ28gZmlyc3QuCiAJICovCi0JZXJyID0gam91cm5hbF9zdWJtaXRfZGF0YV9idWZmZXJzKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbik7CisJZXJyID0gam91cm5hbF9zdWJtaXRfZGF0YV9idWZmZXJzKGpvdXJuYWwsIGNvbW1pdF90cmFuc2FjdGlvbiwKKwkJCQkJICB3cml0ZV9vcCk7CiAKIAkvKgogCSAqIFdhaXQgZm9yIGFsbCBwcmV2aW91c2x5IHN1Ym1pdHRlZCBJTyB0byBjb21wbGV0ZS4KQEAgLTY2MCw3ICs2NjcsNyBAQAogCQkJCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJCQkJYmgtPmJfZW5kX2lvID0gam91cm5hbF9lbmRfYnVmZmVyX2lvX3N5bmM7Ci0JCQkJc3VibWl0X2JoKFdSSVRFLCBiaCk7CisJCQkJc3VibWl0X2JoKHdyaXRlX29wLCBiaCk7CiAJCQl9CiAJCQljb25kX3Jlc2NoZWQoKTsKIApkaWZmIC0tZ2l0IGEvZnMvamJkL2pvdXJuYWwuYyBiL2ZzL2piZC9qb3VybmFsLmMKaW5kZXggZTc5YzA3OC4uNzM3ZjcyNCAxMDA2NDQKLS0tIGEvZnMvamJkL2pvdXJuYWwuYworKysgYi9mcy9qYmQvam91cm5hbC5jCkBAIC02MzcsNiArNjM3LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAliaCA9IF9fZ2V0YmxrKGpvdXJuYWwtPmpfZGV2LCBibG9ja25yLCBqb3VybmFsLT5qX2Jsb2Nrc2l6ZSk7CisJaWYgKCFiaCkKKwkJcmV0dXJuIE5VTEw7CiAJbG9ja19idWZmZXIoYmgpOwogCW1lbXNldChiaC0+Yl9kYXRhLCAwLCBqb3VybmFsLT5qX2Jsb2Nrc2l6ZSk7CiAJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CkBAIC03MzMsOSArNzM1LDcgQEAKIAlpZiAoIWpvdXJuYWwtPmpfd2J1ZikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW50IGFsbG9jYXRlIGJocyBmb3IgY29tbWl0IHRocmVhZFxuIiwKIAkJCV9fZnVuY19fKTsKLQkJa2ZyZWUoam91cm5hbCk7Ci0JCWpvdXJuYWwgPSBOVUxMOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZXJyOwogCX0KIAlqb3VybmFsLT5qX2RldiA9IGJkZXY7CiAJam91cm5hbC0+al9mc19kZXYgPSBmc19kZXY7CkBAIC03NDMsMTEgKzc0MywxOSBAQAogCWpvdXJuYWwtPmpfbWF4bGVuID0gbGVuOwogCiAJYmggPSBfX2dldGJsayhqb3VybmFsLT5qX2Rldiwgc3RhcnQsIGpvdXJuYWwtPmpfYmxvY2tzaXplKTsKLQlKX0FTU0VSVChiaCAhPSBOVUxMKTsKKwlpZiAoIWJoKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiBDYW5ub3QgZ2V0IGJ1ZmZlciBmb3Igam91cm5hbCBzdXBlcmJsb2NrXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlnb3RvIG91dF9lcnI7CisJfQogCWpvdXJuYWwtPmpfc2JfYnVmZmVyID0gYmg7CiAJam91cm5hbC0+al9zdXBlcmJsb2NrID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopYmgtPmJfZGF0YTsKLW91dDoKKwogCXJldHVybiBqb3VybmFsOworb3V0X2VycjoKKwlrZnJlZShqb3VybmFsKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoqCkBAIC03ODcsOCArNzk1LDcgQEAKIAlpZiAoIWpvdXJuYWwtPmpfd2J1ZikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW50IGFsbG9jYXRlIGJocyBmb3IgY29tbWl0IHRocmVhZFxuIiwKIAkJCV9fZnVuY19fKTsKLQkJa2ZyZWUoam91cm5hbCk7Ci0JCXJldHVybiBOVUxMOworCQlnb3RvIG91dF9lcnI7CiAJfQogCiAJZXJyID0gam91cm5hbF9ibWFwKGpvdXJuYWwsIDAsICZibG9ja25yKTsKQEAgLTc5NiwxNiArODAzLDIzIEBACiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ubm90IGxvY2F0ZSBqb3VybmFsIHN1cGVyYmxvY2tcbiIsCiAJCSAgICAgICBfX2Z1bmNfXyk7Ci0JCWtmcmVlKGpvdXJuYWwpOwotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBvdXRfZXJyOwogCX0KIAogCWJoID0gX19nZXRibGsoam91cm5hbC0+al9kZXYsIGJsb2NrbnIsIGpvdXJuYWwtPmpfYmxvY2tzaXplKTsKLQlKX0FTU0VSVChiaCAhPSBOVUxMKTsKKwlpZiAoIWJoKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiBDYW5ub3QgZ2V0IGJ1ZmZlciBmb3Igam91cm5hbCBzdXBlcmJsb2NrXG4iLAorCQkgICAgICAgX19mdW5jX18pOworCQlnb3RvIG91dF9lcnI7CisJfQogCWpvdXJuYWwtPmpfc2JfYnVmZmVyID0gYmg7CiAJam91cm5hbC0+al9zdXBlcmJsb2NrID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopYmgtPmJfZGF0YTsKIAogCXJldHVybiBqb3VybmFsOworb3V0X2VycjoKKwlrZnJlZShqb3VybmFsKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2piZC90cmFuc2FjdGlvbi5jIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKaW5kZXggZTZhMTE3NC4uZWQ4ODZlNiAxMDA2NDQKLS0tIGEvZnMvamJkL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKQEAgLTE0NDAsNiArMTQ0MCw4IEBACiAJCX0KIAl9CiAKKwlpZiAoaGFuZGxlLT5oX3N5bmMpCisJCXRyYW5zYWN0aW9uLT50X3N5bmNocm9ub3VzX2NvbW1pdCA9IDE7CiAJY3VycmVudC0+am91cm5hbF9pbmZvID0gTlVMTDsKIAlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJc3Bpbl9sb2NrKCZ0cmFuc2FjdGlvbi0+dF9oYW5kbGVfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9qYmQyL2NvbW1pdC5jIGIvZnMvamJkMi9jb21taXQuYwppbmRleCA2MjgwNGU1Li40ZWE3MjM3IDEwMDY0NAotLS0gYS9mcy9qYmQyL2NvbW1pdC5jCisrKyBiL2ZzL2piZDIvY29tbWl0LmMKQEAgLTM2Nyw2ICszNjcsNyBAQAogCWludCB0YWdfYnl0ZXMgPSBqb3VybmFsX3RhZ19ieXRlcyhqb3VybmFsKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmNiaCA9IE5VTEw7IC8qIEZvciB0cmFuc2FjdGlvbmFsIGNoZWNrc3VtcyAqLwogCV9fdTMyIGNyYzMyX3N1bSA9IH4wOworCWludCB3cml0ZV9vcCA9IFdSSVRFOwogCiAJLyoKIAkgKiBGaXJzdCBqb2I6IGxvY2sgZG93biB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBhbmQgd2FpdCBmb3IKQEAgLTQwMSw2ICs0MDIsOCBAQAogCXNwaW5fbG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKIAljb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhdGUgPSBUX0xPQ0tFRDsKIAorCWlmIChjb21taXRfdHJhbnNhY3Rpb24tPnRfc3luY2hyb25vdXNfY29tbWl0KQorCQl3cml0ZV9vcCA9IFdSSVRFX1NZTkM7CiAJc3RhdHMudS5ydW4ucnNfd2FpdCA9IGNvbW1pdF90cmFuc2FjdGlvbi0+dF9tYXhfd2FpdDsKIAlzdGF0cy51LnJ1bi5yc19sb2NrZWQgPSBqaWZmaWVzOwogCXN0YXRzLnUucnVuLnJzX3J1bm5pbmcgPSBqYmQyX3RpbWVfZGlmZihjb21taXRfdHJhbnNhY3Rpb24tPnRfc3RhcnQsCkBAIC02ODAsNyArNjgzLDcgQEAKIAkJCQljbGVhcl9idWZmZXJfZGlydHkoYmgpOwogCQkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOwogCQkJCWJoLT5iX2VuZF9pbyA9IGpvdXJuYWxfZW5kX2J1ZmZlcl9pb19zeW5jOwotCQkJCXN1Ym1pdF9iaChXUklURSwgYmgpOworCQkJCXN1Ym1pdF9iaCh3cml0ZV9vcCwgYmgpOwogCQkJfQogCQkJY29uZF9yZXNjaGVkKCk7CiAJCQlzdGF0cy51LnJ1bi5yc19ibG9ja3NfbG9nZ2VkICs9IGJ1ZnM7CmRpZmYgLS1naXQgYS9mcy9qYmQyL3Jldm9rZS5jIGIvZnMvamJkMi9yZXZva2UuYwppbmRleCAyNTdmZjI2Li5iYmU2ZDU5IDEwMDY0NAotLS0gYS9mcy9qYmQyL3Jldm9rZS5jCisrKyBiL2ZzL2piZDIvcmV2b2tlLmMKQEAgLTU1LDYgKzU1LDI1IEBACiAgKgkJCW5lZWQgZG8gbm90aGluZy4KICAqIFJldm9rZVZhbGlkIHNldCwgUmV2b2tlZCBzZXQ6CiAgKgkJCWJ1ZmZlciBoYXMgYmVlbiByZXZva2VkLgorICoKKyAqIExvY2tpbmcgcnVsZXM6CisgKiBXZSBrZWVwIHR3byBoYXNoIHRhYmxlcyBvZiByZXZva2UgcmVjb3Jkcy4gT25lIGhhc2h0YWJsZSBiZWxvbmdzIHRvIHRoZQorICogcnVubmluZyB0cmFuc2FjdGlvbiAoaXMgcG9pbnRlZCB0byBieSBqb3VybmFsLT5qX3Jldm9rZSksIHRoZSBvdGhlciBvbmUKKyAqIGJlbG9uZ3MgdG8gdGhlIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIEFjY2Vzc2VzIHRvIHRoZSBzZWNvbmQgaGFzaCB0YWJsZQorICogaGFwcGVuIG9ubHkgZnJvbSB0aGUga2pvdXJuYWxkIGFuZCBubyBvdGhlciB0aHJlYWQgdG91Y2hlcyB0aGlzIHRhYmxlLiAgQWxzbworICogam91cm5hbF9zd2l0Y2hfcmV2b2tlX3RhYmxlKCkgd2hpY2ggc3dpdGNoZXMgd2hpY2ggaGFzaHRhYmxlIGJlbG9uZ3MgdG8gdGhlCisgKiBydW5uaW5nIGFuZCB3aGljaCB0byB0aGUgY29tbWl0dGluZyB0cmFuc2FjdGlvbiBpcyBjYWxsZWQgb25seSBmcm9tCisgKiBram91cm5hbGQuIFRoZXJlZm9yZSB3ZSBuZWVkIG5vIGxvY2tzIHdoZW4gYWNjZXNzaW5nIHRoZSBoYXNodGFibGUgYmVsb25naW5nCisgKiB0byB0aGUgY29tbWl0dGluZyB0cmFuc2FjdGlvbi4KKyAqCisgKiBBbGwgdXNlcnMgb3BlcmF0aW5nIG9uIHRoZSBoYXNoIHRhYmxlIGJlbG9uZ2luZyB0byB0aGUgcnVubmluZyB0cmFuc2FjdGlvbgorICogaGF2ZSBhIGhhbmRsZSB0byB0aGUgdHJhbnNhY3Rpb24uIFRoZXJlZm9yZSB0aGV5IGFyZSBzYWZlIGZyb20ga2pvdXJuYWxkCisgKiBzd2l0Y2hpbmcgaGFzaCB0YWJsZXMgdW5kZXIgdGhlbS4gRm9yIG9wZXJhdGlvbnMgb24gdGhlIGxpc3RzIG9mIGVudHJpZXMgaW4KKyAqIHRoZSBoYXNoIHRhYmxlIGpfcmV2b2tlX2xvY2sgaXMgdXNlZC4KKyAqCisgKiBGaW5hbGx5LCBhbHNvIHJlcGxheSBjb2RlIHVzZXMgdGhlIGhhc2ggdGFibGVzIGJ1dCBhdCB0aGlzIG1vbWVudCBub29uZSBlbHNlCisgKiBjYW4gdG91Y2ggdGhlbSAoZmlsZXN5c3RlbSBpc24ndCBtb3VudGVkIHlldCkgYW5kIGhlbmNlIG5vIGxvY2tpbmcgaXMKKyAqIG5lZWRlZC4KICAqLwogCiAjaWZuZGVmIF9fS0VSTkVMX18KQEAgLTQwMSw4ICs0MjAsNiBAQAogICogdGhlIHNlY29uZCB0aW1lIHdlIHdvdWxkIHN0aWxsIGhhdmUgYSBwZW5kaW5nIHJldm9rZSB0byBjYW5jZWwuICBTbywKICAqIGRvIG5vdCB0cnVzdCB0aGUgUmV2b2tlZCBiaXQgb24gYnVmZmVycyB1bmxlc3MgUmV2b2tlVmFsaWQgaXMgYWxzbwogICogc2V0LgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIHRoZSBqb3VybmFsIGxvY2tlZC4KICAqLwogaW50IGpiZDJfam91cm5hbF9jYW5jZWxfcmV2b2tlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoKQogewpAQCAtNDgwLDEwICs0OTcsNyBAQAogLyoKICAqIFdyaXRlIHJldm9rZSByZWNvcmRzIHRvIHRoZSBqb3VybmFsIGZvciBhbGwgZW50cmllcyBpbiB0aGUgY3VycmVudAogICogcmV2b2tlIGhhc2gsIGRlbGV0aW5nIHRoZSBlbnRyaWVzIGFzIHdlIGdvLgotICoKLSAqIENhbGxlZCB3aXRoIHRoZSBqb3VybmFsIGxvY2sgaGVsZC4KICAqLwotCiB2b2lkIGpiZDJfam91cm5hbF93cml0ZV9yZXZva2VfcmVjb3Jkcyhqb3VybmFsX3QgKmpvdXJuYWwsCiAJCQkJICB0cmFuc2FjdGlvbl90ICp0cmFuc2FjdGlvbikKIHsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwppbmRleCAyOGNlMjFkLi45OTZmZmRhIDEwMDY0NAotLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCkBAIC0xMzE1LDYgKzEzMTUsOCBAQAogCQl9CiAJfQogCisJaWYgKGhhbmRsZS0+aF9zeW5jKQorCQl0cmFuc2FjdGlvbi0+dF9zeW5jaHJvbm91c19jb21taXQgPSAxOwogCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IE5VTEw7CiAJc3Bpbl9sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCXNwaW5fbG9jaygmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvYWNsLmMgYi9mcy9qZmZzMi9hY2wuYwppbmRleCBkOTg3MTM3Li43N2NjZjhjIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9hY2wuYworKysgYi9mcy9qZmZzMi9hY2wuYwpAQCAtMzM2LDcgKzMzNiw3IEBACiAJCXJldHVybiBQVFJfRVJSKGFjbCk7CiAKIAlpZiAoIWFjbCkgewotCQkqaV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCSppX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9IGVsc2UgewogCQlpZiAoU19JU0RJUigqaV9tb2RlKSkKIAkJCWpmZnMyX2lzZXRfYWNsKGlub2RlLCAmZi0+aV9hY2xfZGVmYXVsdCwgYWNsKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9hY2wuYyBiL2ZzL2pmcy9hY2wuYwppbmRleCBhMTY2YzE2Li4wNmNhMWI4IDEwMDY0NAotLS0gYS9mcy9qZnMvYWNsLmMKKysrIGIvZnMvamZzL2FjbC5jCkBAIC0xODIsNyArMTgyLDcgQEAKIGNsZWFudXA6CiAJCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CiAJfSBlbHNlCi0JCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCiAJSkZTX0lQKGlub2RlKS0+bW9kZTIgPSAoSkZTX0lQKGlub2RlKS0+bW9kZTIgJiAweGZmZmYwMDAwKSB8CiAJCQkgICAgICAgaW5vZGUtPmlfbW9kZTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2NsbnRsb2NrLmMgYi9mcy9sb2NrZC9jbG50bG9jay5jCmluZGV4IGFlZGM0N2EuLjFmM2IwZmMgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL2NsbnRsb2NrLmMKKysrIGIvZnMvbG9ja2QvY2xudGxvY2suYwpAQCAtMTM5LDU1ICsxMzksNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCi1zdGF0aWMgY29uc3Qgc3RydWN0IGluNl9hZGRyICpubG1jbG50X21hcF92NGFkZHIoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXAsCi0JCQkJCQkgc3RydWN0IGluNl9hZGRyICphZGRyX21hcHBlZCkKLXsKLQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXA7Ci0KLQlzd2l0Y2ggKHNhcC0+c2FfZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUNjoKLQkJcmV0dXJuICYoKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXApLT5zaW42X2FkZHI7Ci0JY2FzZSBBRl9JTkVUOgotCQlpcHY2X2FkZHJfc2V0X3Y0bWFwcGVkKHNpbi0+c2luX2FkZHIuc19hZGRyLCBhZGRyX21hcHBlZCk7Ci0JCXJldHVybiBhZGRyX21hcHBlZDsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIElmIGxvY2tkIGlzIHVzaW5nIGEgUEZfSU5FVDYgbGlzdGVuZXIsIGFsbCBpbmNvbWluZyByZXF1ZXN0cyBhcHBlYXIKLSAqIHRvIGNvbWUgZnJvbSBBRl9JTkVUNiByZW1vdGVzLiAgVGhlIGFkZHJlc3Mgb2YgQUZfSU5FVCByZW1vdGVzIGFyZQotICogbWFwcGVkIHRvIEFGX0lORVQ2IGF1dG9tYXRpY2FsbHkgYnkgdGhlIG5ldHdvcmsgbGF5ZXIuICBJbiBjYXNlIHRoZQotICogdXNlciBwYXNzZWQgYW4gQUZfSU5FVCBzZXJ2ZXIgYWRkcmVzcyBhdCBtb3VudCB0aW1lLCBlbnN1cmUgYm90aAotICogYWRkcmVzc2VzIGFyZSBBRl9JTkVUNiBiZWZvcmUgY29tcGFyaW5nIHRoZW0uCi0gKi8KLXN0YXRpYyBpbnQgbmxtY2xudF9jbXBfYWRkcihjb25zdCBzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QsCi0JCQkgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXApCi17Ci0JY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyMTsKLQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIyOwotCXN0cnVjdCBpbjZfYWRkciBhZGRyMV9tYXBwZWQ7Ci0Jc3RydWN0IGluNl9hZGRyIGFkZHIyX21hcHBlZDsKLQotCWFkZHIxID0gbmxtY2xudF9tYXBfdjRhZGRyKG5sbV9hZGRyKGhvc3QpLCAmYWRkcjFfbWFwcGVkKTsKLQlpZiAobGlrZWx5KGFkZHIxICE9IE5VTEwpKSB7Ci0JCWFkZHIyID0gbmxtY2xudF9tYXBfdjRhZGRyKHNhcCwgJmFkZHIyX21hcHBlZCk7Ci0JCWlmIChsaWtlbHkoYWRkcjIgIT0gTlVMTCkpCi0JCQlyZXR1cm4gaXB2Nl9hZGRyX2VxdWFsKGFkZHIxLCBhZGRyMik7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0jZWxzZQkvKiAhKENPTkZJR19JUFY2IHx8IENPTkZJR19JUFY2X01PRFVMRSkgKi8KLXN0YXRpYyBpbnQgbmxtY2xudF9jbXBfYWRkcihjb25zdCBzdHJ1Y3QgbmxtX2hvc3QgKmhvc3QsCi0JCQkgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYXApCi17Ci0JcmV0dXJuIG5sbV9jbXBfYWRkcihubG1fYWRkcihob3N0KSwgc2FwKTsKLX0KLSNlbmRpZgkvKiAhKENPTkZJR19JUFY2IHx8IENPTkZJR19JUFY2X01PRFVMRSkgKi8KLQogLyoKICAqIFRoZSBzZXJ2ZXIgbG9ja2QgaGFzIGNhbGxlZCB1cyBiYWNrIHRvIHRlbGwgdXMgdGhlIGxvY2sgd2FzIGdyYW50ZWQKICAqLwpAQCAtMjE1LDcgKzE2Niw3IEBACiAJCSAqLwogCQlpZiAoZmxfYmxvY2tlZC0+ZmxfdS5uZnNfZmwub3duZXItPnBpZCAhPSBsb2NrLT5zdmlkKQogCQkJY29udGludWU7Ci0JCWlmICghbmxtY2xudF9jbXBfYWRkcihibG9jay0+Yl9ob3N0LCBhZGRyKSkKKwkJaWYgKCFubG1fY21wX2FkZHIobmxtX2FkZHIoYmxvY2stPmJfaG9zdCksIGFkZHIpKQogCQkJY29udGludWU7CiAJCWlmIChuZnNfY29tcGFyZV9maChORlNfRkgoZmxfYmxvY2tlZC0+ZmxfZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkgLGZoKSAhPSAwKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9tb24uYyBiL2ZzL2xvY2tkL21vbi5jCmluZGV4IDVlMmM0ZDUuLjZkNWQ0YTQgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL21vbi5jCisrKyBiL2ZzL2xvY2tkL21vbi5jCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkL2xvY2tkLmg+CiAKKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisKICNkZWZpbmUgTkxNREJHX0ZBQ0lMSVRZCQlOTE1EQkdfTU9OSVRPUgogI2RlZmluZSBOU01fUFJPR1JBTQkJMTAwMDI0CiAjZGVmaW5lIE5TTV9WRVJTSU9OCQkxCkBAIC0yNzQsMTAgKzI3NiwxMiBAQAogewogCXU2NCAqcCA9ICh1NjQgKikmbnNtLT5zbV9wcml2LmRhdGE7CiAJc3RydWN0IHRpbWVzcGVjIHRzOworCXM2NCBuczsKIAogCWt0aW1lX2dldF90cygmdHMpOwotCSpwKysgPSB0aW1lc3BlY190b19ucygmdHMpOwotCSpwID0gKHVuc2lnbmVkIGxvbmcpbnNtOworCW5zID0gdGltZXNwZWNfdG9fbnMoJnRzKTsKKwlwdXRfdW5hbGlnbmVkKG5zLCBwKTsKKwlwdXRfdW5hbGlnbmVkKCh1bnNpZ25lZCBsb25nKW5zbSwgcCArIDEpOwogfQogCiBzdGF0aWMgc3RydWN0IG5zbV9oYW5kbGUgKm5zbV9jcmVhdGVfaGFuZGxlKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLApkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjLmMgYi9mcy9sb2NrZC9zdmMuYwppbmRleCA2NGYxYzMxLi5hYmY4Mzg4IDEwMDY0NAotLS0gYS9mcy9sb2NrZC9zdmMuYworKysgYi9mcy9sb2NrZC9zdmMuYwpAQCAtNTMsMTcgKzUzLDYgQEAKIHVuc2lnbmVkIGxvbmcJCQlubG1zdmNfdGltZW91dDsKIAogLyoKLSAqIElmIHRoZSBrZXJuZWwgaGFzIElQdjYgc3VwcG9ydCBhdmFpbGFibGUsIGFsd2F5cyBsaXN0ZW4gZm9yCi0gKiBib3RoIEFGX0lORVQgYW5kIEFGX0lORVQ2IHJlcXVlc3RzLgotICovCi0jaWYgKGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKSkgJiYgXAotCWRlZmluZWQoQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCkKLXN0YXRpYyBjb25zdCBzYV9mYW1pbHlfdAlubG1zdmNfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jZWxzZQkvKiAoQ09ORklHX0lQVjYgfHwgQ09ORklHX0lQVjZfTU9EVUxFKSAmJiBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0ICovCi1zdGF0aWMgY29uc3Qgc2FfZmFtaWx5X3QJbmxtc3ZjX2ZhbWlseSA9IEFGX0lORVQ7Ci0jZW5kaWYJLyogKENPTkZJR19JUFY2IHx8IENPTkZJR19JUFY2X01PRFVMRSkgJiYgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCAqLwotCi0vKgogICogVGhlc2UgY2FuIGJlIHNldCBhdCBpbnNtb2QgdGltZSAodXNlZnVsIGZvciBORlMgYXMgcm9vdCBmaWxlc3lzdGVtKSwKICAqIGFuZCBhbHNvIGNoYW5nZWQgdGhyb3VnaCB0aGUgc3lzY3RsIGludGVyZmFjZS4gIC0tIEphbWllIExva2llciwgQXVnIDIwMDMKICAqLwpAQCAtMjA0LDE5ICsxOTMsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjcmVhdGVfbG9ja2RfbGlzdGVuZXIoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjaGFyICpuYW1lLAotCQkJCSB1bnNpZ25lZCBzaG9ydCBwb3J0KQorc3RhdGljIGludCBjcmVhdGVfbG9ja2RfbGlzdGVuZXIoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSBjb25zdCBpbnQgZmFtaWx5LCBjb25zdCB1bnNpZ25lZCBzaG9ydCBwb3J0KQogewogCXN0cnVjdCBzdmNfeHBydCAqeHBydDsKIAotCXhwcnQgPSBzdmNfZmluZF94cHJ0KHNlcnYsIG5hbWUsIDAsIDApOworCXhwcnQgPSBzdmNfZmluZF94cHJ0KHNlcnYsIG5hbWUsIGZhbWlseSwgMCk7CiAJaWYgKHhwcnQgPT0gTlVMTCkKLQkJcmV0dXJuIHN2Y19jcmVhdGVfeHBydChzZXJ2LCBuYW1lLCBwb3J0LCBTVkNfU09DS19ERUZBVUxUUyk7Ci0KKwkJcmV0dXJuIHN2Y19jcmVhdGVfeHBydChzZXJ2LCBuYW1lLCBmYW1pbHksIHBvcnQsCisJCQkJCQlTVkNfU09DS19ERUZBVUxUUyk7CiAJc3ZjX3hwcnRfcHV0KHhwcnQpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNyZWF0ZV9sb2NrZF9mYW1pbHkoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjb25zdCBpbnQgZmFtaWx5KQoreworCWludCBlcnI7CisKKwllcnIgPSBjcmVhdGVfbG9ja2RfbGlzdGVuZXIoc2VydiwgInVkcCIsIGZhbWlseSwgbmxtX3VkcHBvcnQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGNyZWF0ZV9sb2NrZF9saXN0ZW5lcihzZXJ2LCAidGNwIiwgZmFtaWx5LCBubG1fdGNwcG9ydCk7Cit9CisKIC8qCiAgKiBFbnN1cmUgdGhlcmUgYXJlIGFjdGl2ZSBVRFAgYW5kIFRDUCBsaXN0ZW5lcnMgZm9yIGxvY2tkLgogICoKQEAgLTIzMiwxMyArMjMyLDE1IEBACiAJc3RhdGljIGludCB3YXJuZWQ7CiAJaW50IGVycjsKIAotCWVyciA9IGNyZWF0ZV9sb2NrZF9saXN0ZW5lcihzZXJ2LCAidWRwIiwgbmxtX3VkcHBvcnQpOworCWVyciA9IGNyZWF0ZV9sb2NrZF9mYW1pbHkoc2VydiwgUEZfSU5FVCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X2VycjsKIAotCWVyciA9IGNyZWF0ZV9sb2NrZF9saXN0ZW5lcihzZXJ2LCAidGNwIiwgbmxtX3RjcHBvcnQpOwotCWlmIChlcnIgPCAwKQorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCWVyciA9IGNyZWF0ZV9sb2NrZF9mYW1pbHkoc2VydiwgUEZfSU5FVDYpOworCWlmIChlcnIgPCAwICYmIGVyciAhPSAtRUFGTk9TVVBQT1JUKQogCQlnb3RvIG91dF9lcnI7CisjZW5kaWYJLyogQ09ORklHX0lQVjYgfHwgQ09ORklHX0lQVjZfTU9EVUxFICovCiAKIAl3YXJuZWQgPSAwOwogCXJldHVybiAwOwpAQCAtMjc0LDcgKzI3Niw3IEBACiAJCQkibG9ja2RfdXA6IG5vIHBpZCwgJWQgdXNlcnM/P1xuIiwgbmxtc3ZjX3VzZXJzKTsKIAogCWVycm9yID0gLUVOT01FTTsKLQlzZXJ2ID0gc3ZjX2NyZWF0ZSgmbmxtc3ZjX3Byb2dyYW0sIExPQ0tEX0JVRlNJWkUsIG5sbXN2Y19mYW1pbHksIE5VTEwpOworCXNlcnYgPSBzdmNfY3JlYXRlKCZubG1zdmNfcHJvZ3JhbSwgTE9DS0RfQlVGU0laRSwgTlVMTCk7CiAJaWYgKCFzZXJ2KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImxvY2tkX3VwOiBjcmVhdGUgc2VydmljZSBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jCmluZGV4IDYxODg2NWIuLmRhYWQzYzIgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2lub2RlLmMKKysrIGIvZnMvbWluaXgvaW5vZGUuYwpAQCAtMzIxLDE1ICszMjEsMjAgQEAKIAogc3RhdGljIGludCBtaW5peF9zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogewotCXN0cnVjdCBtaW5peF9zYl9pbmZvICpzYmkgPSBtaW5peF9zYihkZW50cnktPmRfc2IpOwotCWJ1Zi0+Zl90eXBlID0gZGVudHJ5LT5kX3NiLT5zX21hZ2ljOwotCWJ1Zi0+Zl9ic2l6ZSA9IGRlbnRyeS0+ZF9zYi0+c19ibG9ja3NpemU7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwlzdHJ1Y3QgbWluaXhfc2JfaW5mbyAqc2JpID0gbWluaXhfc2Ioc2IpOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzYi0+c19iZGV2LT5iZF9kZXYpOworCWJ1Zi0+Zl90eXBlID0gc2ItPnNfbWFnaWM7CisJYnVmLT5mX2JzaXplID0gc2ItPnNfYmxvY2tzaXplOwogCWJ1Zi0+Zl9ibG9ja3MgPSAoc2JpLT5zX256b25lcyAtIHNiaS0+c19maXJzdGRhdGF6b25lKSA8PCBzYmktPnNfbG9nX3pvbmVfc2l6ZTsKIAlidWYtPmZfYmZyZWUgPSBtaW5peF9jb3VudF9mcmVlX2Jsb2NrcyhzYmkpOwogCWJ1Zi0+Zl9iYXZhaWwgPSBidWYtPmZfYmZyZWU7CiAJYnVmLT5mX2ZpbGVzID0gc2JpLT5zX25pbm9kZXM7CiAJYnVmLT5mX2ZmcmVlID0gbWluaXhfY291bnRfZnJlZV9pbm9kZXMoc2JpKTsKIAlidWYtPmZfbmFtZWxlbiA9IHNiaS0+c19uYW1lbGVuOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL21wYWdlLmMgYi9mcy9tcGFnZS5jCmluZGV4IDE2YzNlZjMuLjY4MGJhNjAgMTAwNjQ0Ci0tLSBhL2ZzL21wYWdlLmMKKysrIGIvZnMvbXBhZ2UuYwpAQCAtODIsNyArODIsNyBAQAogCWJpb19wdXQoYmlvKTsKIH0KIAotc3RydWN0IGJpbyAqbXBhZ2VfYmlvX3N1Ym1pdChpbnQgcncsIHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyBzdHJ1Y3QgYmlvICptcGFnZV9iaW9fc3VibWl0KGludCBydywgc3RydWN0IGJpbyAqYmlvKQogewogCWJpby0+YmlfZW5kX2lvID0gbXBhZ2VfZW5kX2lvX3JlYWQ7CiAJaWYgKHJ3ID09IFdSSVRFKQpAQCAtOTAsNyArOTAsNiBAQAogCXN1Ym1pdF9iaW8ocncsIGJpbyk7CiAJcmV0dXJuIE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MKG1wYWdlX2Jpb19zdWJtaXQpOwogCiBzdGF0aWMgc3RydWN0IGJpbyAqCiBtcGFnZV9hbGxvYyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LApAQCAtNDM5LDcgKzQzOCwxNCBAQAogICoganVzdCBhbGxvY2F0ZSBmdWxsLXNpemUgKDE2LXBhZ2UpIEJJT3MuCiAgKi8KIAotaW50IF9fbXBhZ2Vfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKK3N0cnVjdCBtcGFnZV9kYXRhIHsKKwlzdHJ1Y3QgYmlvICpiaW87CisJc2VjdG9yX3QgbGFzdF9ibG9ja19pbl9iaW87CisJZ2V0X2Jsb2NrX3QgKmdldF9ibG9jazsKKwl1bnNpZ25lZCB1c2Vfd3JpdGVwYWdlOworfTsKKworc3RhdGljIGludCBfX21wYWdlX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCiAJCSAgICAgIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG1wYWdlX2RhdGEgKm1wZCA9IGRhdGE7CkBAIC02NDgsNyArNjU0LDYgQEAKIAltcGQtPmJpbyA9IGJpbzsKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChfX21wYWdlX3dyaXRlcGFnZSk7CiAKIC8qKgogICogbXBhZ2Vfd3JpdGVwYWdlcyAtIHdhbGsgdGhlIGxpc3Qgb2YgZGlydHkgcGFnZXMgb2YgdGhlIGdpdmVuIGFkZHJlc3Mgc3BhY2UgJiB3cml0ZXBhZ2UoKSBhbGwgb2YgdGhlbQpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggZDA0MGNlMS4uYjg0MzNlYiAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlX2Nncm91cC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNkZWZpbmUgQUNDX01PREUoeCkgKCJcMDAwXDAwNFwwMDJcMDA2IlsoeCkmT19BQ0NNT0RFXSkKQEAgLTE1NzgsNyArMTU3OSw3IEBACiAJc3RydWN0IGRlbnRyeSAqZGlyID0gbmQtPnBhdGguZGVudHJ5OwogCiAJaWYgKCFJU19QT1NJWEFDTChkaXItPmRfaW5vZGUpKQotCQltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAllcnJvciA9IHNlY3VyaXR5X3BhdGhfbWtub2QoJm5kLT5wYXRoLCBwYXRoLT5kZW50cnksIG1vZGUsIDApOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTk4OSw3ICsxOTkwLDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAlpZiAoIUlTX1BPU0lYQUNMKG5kLnBhdGguZGVudHJ5LT5kX2lub2RlKSkKLQkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQltb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJZXJyb3IgPSBtYXlfbWtub2QobW9kZSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF9kcHV0OwpAQCAtMjA2Nyw3ICsyMDY4LDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJaWYgKCFJU19QT1NJWEFDTChuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSkpCi0JCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwkJbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCWVycm9yID0gbW50X3dhbnRfd3JpdGUobmQucGF0aC5tbnQpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXRfZHB1dDsKQEAgLTI4OTcsMTAgKzI4OTgsMyBAQAogRVhQT1JUX1NZTUJPTCh2ZnNfdW5saW5rKTsKIEVYUE9SVF9TWU1CT0woZGVudHJ5X3VuaGFzaCk7CiBFWFBPUlRfU1lNQk9MKGdlbmVyaWNfcmVhZGxpbmspOwotCi0vKiB0byBiZSBtZW50aW9uZWQgb25seSBpbiBJTklUX1RBU0sgKi8KLXN0cnVjdCBmc19zdHJ1Y3QgaW5pdF9mcyA9IHsKLQkuY291bnQJCT0gQVRPTUlDX0lOSVQoMSksCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKGluaXRfZnMubG9jayksCi0JLnVtYXNrCQk9IDAwMjIsCi19OwpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCAwYTQyZTBlLi5jNmY1NGU0IDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbWZzLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgInBub2RlLmgiCkBAIC0yMDkzLDY2ICsyMDk0LDYgQEAKIH0KIAogLyoKLSAqIFJlcGxhY2UgdGhlIGZzLT57cm9vdG1udCxyb290fSB3aXRoIHttbnQsZGVudHJ5fS4gUHV0IHRoZSBvbGQgdmFsdWVzLgotICogSXQgY2FuIGJsb2NrLiBSZXF1aXJlcyB0aGUgYmlnIGxvY2sgaGVsZC4KLSAqLwotdm9pZCBzZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICpmcywgc3RydWN0IHBhdGggKnBhdGgpCi17Ci0Jc3RydWN0IHBhdGggb2xkX3Jvb3Q7Ci0KLQl3cml0ZV9sb2NrKCZmcy0+bG9jayk7Ci0Jb2xkX3Jvb3QgPSBmcy0+cm9vdDsKLQlmcy0+cm9vdCA9ICpwYXRoOwotCXBhdGhfZ2V0KHBhdGgpOwotCXdyaXRlX3VubG9jaygmZnMtPmxvY2spOwotCWlmIChvbGRfcm9vdC5kZW50cnkpCi0JCXBhdGhfcHV0KCZvbGRfcm9vdCk7Ci19Ci0KLS8qCi0gKiBSZXBsYWNlIHRoZSBmcy0+e3B3ZG1udCxwd2R9IHdpdGgge21udCxkZW50cnl9LiBQdXQgdGhlIG9sZCB2YWx1ZXMuCi0gKiBJdCBjYW4gYmxvY2suIFJlcXVpcmVzIHRoZSBiaWcgbG9jayBoZWxkLgotICovCi12b2lkIHNldF9mc19wd2Qoc3RydWN0IGZzX3N0cnVjdCAqZnMsIHN0cnVjdCBwYXRoICpwYXRoKQotewotCXN0cnVjdCBwYXRoIG9sZF9wd2Q7Ci0KLQl3cml0ZV9sb2NrKCZmcy0+bG9jayk7Ci0Jb2xkX3B3ZCA9IGZzLT5wd2Q7Ci0JZnMtPnB3ZCA9ICpwYXRoOwotCXBhdGhfZ2V0KHBhdGgpOwotCXdyaXRlX3VubG9jaygmZnMtPmxvY2spOwotCi0JaWYgKG9sZF9wd2QuZGVudHJ5KQotCQlwYXRoX3B1dCgmb2xkX3B3ZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNocm9vdF9mc19yZWZzKHN0cnVjdCBwYXRoICpvbGRfcm9vdCwgc3RydWN0IHBhdGggKm5ld19yb290KQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7Ci0Jc3RydWN0IGZzX3N0cnVjdCAqZnM7Ci0KLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKLQkJdGFza19sb2NrKHApOwotCQlmcyA9IHAtPmZzOwotCQlpZiAoZnMpIHsKLQkJCWF0b21pY19pbmMoJmZzLT5jb3VudCk7Ci0JCQl0YXNrX3VubG9jayhwKTsKLQkJCWlmIChmcy0+cm9vdC5kZW50cnkgPT0gb2xkX3Jvb3QtPmRlbnRyeQotCQkJICAgICYmIGZzLT5yb290Lm1udCA9PSBvbGRfcm9vdC0+bW50KQotCQkJCXNldF9mc19yb290KGZzLCBuZXdfcm9vdCk7Ci0JCQlpZiAoZnMtPnB3ZC5kZW50cnkgPT0gb2xkX3Jvb3QtPmRlbnRyeQotCQkJICAgICYmIGZzLT5wd2QubW50ID09IG9sZF9yb290LT5tbnQpCi0JCQkJc2V0X2ZzX3B3ZChmcywgbmV3X3Jvb3QpOwotCQkJcHV0X2ZzX3N0cnVjdChmcyk7Ci0JCX0gZWxzZQotCQkJdGFza191bmxvY2socCk7Ci0JfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci19Ci0KLS8qCiAgKiBwaXZvdF9yb290IFNlbWFudGljczoKICAqIE1vdmVzIHRoZSByb290IGZpbGUgc3lzdGVtIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MgdG8gdGhlIGRpcmVjdG9yeSBwdXRfb2xkLAogICogbWFrZXMgbmV3X3Jvb3QgYXMgdGhlIG5ldyByb290IGZpbGUgc3lzdGVtIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MsIGFuZCBzZXRzCmRpZmYgLS1naXQgYS9mcy9uZnMvS2NvbmZpZyBiL2ZzL25mcy9LY29uZmlnCmluZGV4IDM2ZmUyMGQuLmU2N2YzZWMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9LY29uZmlnCisrKyBiL2ZzL25mcy9LY29uZmlnCkBAIC04NCwzICs4NCwxMSBAQAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dD4uCiAKIAkgIE1vc3QgcGVvcGxlIHNheSBOIGhlcmUuCisKK2NvbmZpZyBORlNfRlNDQUNIRQorCWJvb2wgIlByb3ZpZGUgTkZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIE5GU19GUz1tICYmIEZTQ0FDSEUgfHwgTkZTX0ZTPXkgJiYgRlNDQUNIRT15CisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBORlMgZGF0YSB0byBiZSBjYWNoZWQgbG9jYWxseSBvbiBkaXNjIHRocm91Z2gKKwkgIHRoZSBnZW5lcmFsIGZpbGVzeXN0ZW0gY2FjaGUgbWFuYWdlcgpkaWZmIC0tZ2l0IGEvZnMvbmZzL01ha2VmaWxlIGIvZnMvbmZzL01ha2VmaWxlCmluZGV4IGFjNjE3MGMuLjg0NTE1OTggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9NYWtlZmlsZQorKysgYi9mcy9uZnMvTWFrZWZpbGUKQEAgLTE1LDMgKzE1LDQgQEAKIAkJCSAgIGNhbGxiYWNrLm8gY2FsbGJhY2tfeGRyLm8gY2FsbGJhY2tfcHJvYy5vIFwKIAkJCSAgIG5mczRuYW1lc3BhY2UubwogbmZzLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsLm8KK25mcy0kKENPTkZJR19ORlNfRlNDQUNIRSkgKz0gZnNjYWNoZS5vIGZzY2FjaGUtaW5kZXgubwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmMgYi9mcy9uZnMvY2FsbGJhY2suYwppbmRleCAzZTYzNGYyYS4uYTg4NmU2OSAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrLmMKQEAgLTM4LDE5ICszOCwxMCBAQAogCiB1bnNpZ25lZCBpbnQgbmZzX2NhbGxiYWNrX3NldF90Y3Bwb3J0OwogdW5zaWduZWQgc2hvcnQgbmZzX2NhbGxiYWNrX3RjcHBvcnQ7Cit1bnNpZ25lZCBzaG9ydCBuZnNfY2FsbGJhY2tfdGNwcG9ydDY7CiBzdGF0aWMgY29uc3QgaW50IG5mc19zZXRfcG9ydF9taW4gPSAwOwogc3RhdGljIGNvbnN0IGludCBuZnNfc2V0X3BvcnRfbWF4ID0gNjU1MzU7CiAKLS8qCi0gKiBJZiB0aGUga2VybmVsIGhhcyBJUHY2IHN1cHBvcnQgYXZhaWxhYmxlLCBhbHdheXMgbGlzdGVuIGZvcgotICogYm90aCBBRl9JTkVUIGFuZCBBRl9JTkVUNiByZXF1ZXN0cy4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQotc3RhdGljIGNvbnN0IHNhX2ZhbWlseV90CW5mc19jYWxsYmFja19mYW1pbHkgPSBBRl9JTkVUNjsKLSNlbHNlCi1zdGF0aWMgY29uc3Qgc2FfZmFtaWx5X3QJbmZzX2NhbGxiYWNrX2ZhbWlseSA9IEFGX0lORVQ7Ci0jZW5kaWYKLQogc3RhdGljIGludCBwYXJhbV9zZXRfcG9ydChjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCWNoYXIgKmVuZHA7CkBAIC0xMTYsMTkgKzEwNywyOSBAQAogCW11dGV4X2xvY2soJm5mc19jYWxsYmFja19tdXRleCk7CiAJaWYgKG5mc19jYWxsYmFja19pbmZvLnVzZXJzKysgfHwgbmZzX2NhbGxiYWNrX2luZm8udGFzayAhPSBOVUxMKQogCQlnb3RvIG91dDsKLQlzZXJ2ID0gc3ZjX2NyZWF0ZSgmbmZzNF9jYWxsYmFja19wcm9ncmFtLCBORlM0X0NBTExCQUNLX0JVRlNJWkUsCi0JCQkJbmZzX2NhbGxiYWNrX2ZhbWlseSwgTlVMTCk7CisJc2VydiA9IHN2Y19jcmVhdGUoJm5mczRfY2FsbGJhY2tfcHJvZ3JhbSwgTkZTNF9DQUxMQkFDS19CVUZTSVpFLCBOVUxMKTsKIAlyZXQgPSAtRU5PTUVNOwogCWlmICghc2VydikKIAkJZ290byBvdXRfZXJyOwogCi0JcmV0ID0gc3ZjX2NyZWF0ZV94cHJ0KHNlcnYsICJ0Y3AiLCBuZnNfY2FsbGJhY2tfc2V0X3RjcHBvcnQsCi0JCQkgICAgICBTVkNfU09DS19BTk9OWU1PVVMpOworCXJldCA9IHN2Y19jcmVhdGVfeHBydChzZXJ2LCAidGNwIiwgUEZfSU5FVCwKKwkJCQluZnNfY2FsbGJhY2tfc2V0X3RjcHBvcnQsIFNWQ19TT0NLX0FOT05ZTU9VUyk7CiAJaWYgKHJldCA8PSAwKQogCQlnb3RvIG91dF9lcnI7CiAJbmZzX2NhbGxiYWNrX3RjcHBvcnQgPSByZXQ7CiAJZHByaW50aygiTkZTOiBDYWxsYmFjayBsaXN0ZW5lciBwb3J0ID0gJXUgKGFmICV1KVxuIiwKLQkJCW5mc19jYWxsYmFja190Y3Bwb3J0LCBuZnNfY2FsbGJhY2tfZmFtaWx5KTsKKwkJCW5mc19jYWxsYmFja190Y3Bwb3J0LCBQRl9JTkVUKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCXJldCA9IHN2Y19jcmVhdGVfeHBydChzZXJ2LCAidGNwIiwgUEZfSU5FVDYsCisJCQkJbmZzX2NhbGxiYWNrX3NldF90Y3Bwb3J0LCBTVkNfU09DS19BTk9OWU1PVVMpOworCWlmIChyZXQgPiAwKSB7CisJCW5mc19jYWxsYmFja190Y3Bwb3J0NiA9IHJldDsKKwkJZHByaW50aygiTkZTOiBDYWxsYmFjayBsaXN0ZW5lciBwb3J0ID0gJXUgKGFmICV1KVxuIiwKKwkJCQluZnNfY2FsbGJhY2tfdGNwcG9ydDYsIFBGX0lORVQ2KTsKKwl9IGVsc2UgaWYgKHJldCAhPSAtRUFGTk9TVVBQT1JUKQorCQlnb3RvIG91dF9lcnI7CisjZW5kaWYJLyogZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpICovCiAKIAluZnNfY2FsbGJhY2tfaW5mby5ycXN0ID0gc3ZjX3ByZXBhcmVfdGhyZWFkKHNlcnYsICZzZXJ2LT5zdl9wb29sc1swXSk7CiAJaWYgKElTX0VSUihuZnNfY2FsbGJhY2tfaW5mby5ycXN0KSkgewpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmggYi9mcy9uZnMvY2FsbGJhY2suaAppbmRleCBiYjI1ZDIxLi5lMTEwZTI4IDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suaAorKysgYi9mcy9uZnMvY2FsbGJhY2suaApAQCAtNzIsNSArNzIsNiBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IG5mc19jYWxsYmFja19zZXRfdGNwcG9ydDsKIGV4dGVybiB1bnNpZ25lZCBzaG9ydCBuZnNfY2FsbGJhY2tfdGNwcG9ydDsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBuZnNfY2FsbGJhY2tfdGNwcG9ydDY7CiAKICNlbmRpZiAvKiBfX0xJTlVYX0ZTX05GU19DQUxMQkFDS19IICovCmRpZmYgLS1naXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMKaW5kZXggMjI3NzQyMS4uNzVjOWNkMiAxMDA2NDQKLS0tIGEvZnMvbmZzL2NsaWVudC5jCisrKyBiL2ZzL25mcy9jbGllbnQuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgImRlbGVnYXRpb24uaCIKICNpbmNsdWRlICJpb3N0YXQuaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImZzY2FjaGUuaCIKIAogI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19DTElFTlQKIApAQCAtMTU0LDYgKzE1NSw4IEBACiAJaWYgKCFJU19FUlIoY3JlZCkpCiAJCWNscC0+Y2xfbWFjaGluZV9jcmVkID0gY3JlZDsKIAorCW5mc19mc2NhY2hlX2dldF9jbGllbnRfY29va2llKGNscCk7CisKIAlyZXR1cm4gY2xwOwogCiBlcnJvcl8zOgpAQCAtMTg3LDYgKzE5MCw4IEBACiAKIAluZnM0X3NodXRkb3duX2NsaWVudChjbHApOwogCisJbmZzX2ZzY2FjaGVfcmVsZWFzZV9jbGllbnRfY29va2llKGNscCk7CisKIAkvKiAtRUlPIGFsbCBwZW5kaW5nIEkvTyAqLwogCWlmICghSVNfRVJSKGNscC0+Y2xfcnBjY2xpZW50KSkKIAkJcnBjX3NodXRkb3duX2NsaWVudChjbHAtPmNsX3JwY2NsaWVudCk7CkBAIC0yMjQsMzggKzIyOSw2IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm5mc19tYXBfaXB2NF9hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsIHN0cnVjdCBpbjZfYWRkciAqYWRkcl9tYXBwZWQpCi17Ci0Jc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gTlVMTDsKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCXJldHVybiAmKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2EpLT5zaW42X2FkZHI7Ci0JCQlicmVhazsKLQkJY2FzZSBBRl9JTkVUOgotCQkJaXB2Nl9hZGRyX3NldF92NG1hcHBlZCgoKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhKS0+c2luX2FkZHIuc19hZGRyLAotCQkJCQlhZGRyX21hcHBlZCk7Ci0JCQlyZXR1cm4gYWRkcl9tYXBwZWQ7Ci0JfQotfQotCi1zdGF0aWMgaW50IG5mc19zb2NrYWRkcl9tYXRjaF9pcGFkZHIoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTEsCi0JCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EyKQotewotCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcjE7Ci0JY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyMjsKLQlzdHJ1Y3QgaW42X2FkZHIgYWRkcjFfbWFwcGVkOwotCXN0cnVjdCBpbjZfYWRkciBhZGRyMl9tYXBwZWQ7Ci0KLQlhZGRyMSA9IG5mc19tYXBfaXB2NF9hZGRyKHNhMSwgJmFkZHIxX21hcHBlZCk7Ci0JaWYgKGxpa2VseShhZGRyMSAhPSBOVUxMKSkgewotCQlhZGRyMiA9IG5mc19tYXBfaXB2NF9hZGRyKHNhMiwgJmFkZHIyX21hcHBlZCk7Ci0JCWlmIChsaWtlbHkoYWRkcjIgIT0gTlVMTCkpCi0JCQlyZXR1cm4gaXB2Nl9hZGRyX2VxdWFsKGFkZHIxLCBhZGRyMik7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKgogICogVGVzdCBpZiB0d28gaXA2IHNvY2tldCBhZGRyZXNzZXMgcmVmZXIgdG8gdGhlIHNhbWUgc29ja2V0IGJ5CiAgKiBjb21wYXJpbmcgcmVsZXZhbnQgZmllbGRzLiBUaGUgcGFkZGluZyBieXRlcyBzcGVjaWZpY2FsbHksIGFyZSBub3QKQEAgLTI2NywzOCArMjQwLDIxIEBACiAgKgogICogVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlIGJvdGggc29ja2V0IGFkZHJlc3NlcyBhcmUgQUZfSU5FVDYuCiAgKi8KLXN0YXRpYyBpbnQgbmZzX3NvY2thZGRyX2NtcF9pcDYoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTEsCi0JCQkJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTIpCitzdGF0aWMgaW50IG5mc19zb2NrYWRkcl9tYXRjaF9pcGFkZHI2KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2ExLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EyKQogewotCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhZGRyMSA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2ExOwotCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhZGRyMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2EyOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhMTsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4yID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTI7CiAKLQlpZiAoIWlwdjZfYWRkcl9lcXVhbCgmc2FkZHIxLT5zaW42X2FkZHIsCi0JCQkgICAgICZzYWRkcjEtPnNpbjZfYWRkcikpCisJaWYgKGlwdjZfYWRkcl9zY29wZSgmc2luMS0+c2luNl9hZGRyKSA9PSBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMICYmCisJICAgIHNpbjEtPnNpbjZfc2NvcGVfaWQgIT0gc2luMi0+c2luNl9zY29wZV9pZCkKIAkJcmV0dXJuIDA7Ci0JaWYgKGlwdjZfYWRkcl9zY29wZSgmc2FkZHIxLT5zaW42X2FkZHIpID09IElQVjZfQUREUl9TQ09QRV9MSU5LTE9DQUwgJiYKLQkgICAgc2FkZHIxLT5zaW42X3Njb3BlX2lkICE9IHNhZGRyMi0+c2luNl9zY29wZV9pZCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNhZGRyMS0+c2luNl9wb3J0ID09IHNhZGRyMi0+c2luNl9wb3J0OwotfQotI2Vsc2UKLXN0YXRpYyBpbnQgbmZzX3NvY2thZGRyX21hdGNoX2lwYWRkcjQoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzYTEsCi0JCQkJIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2EyKQotewotCXJldHVybiBzYTEtPnNpbl9hZGRyLnNfYWRkciA9PSBzYTItPnNpbl9hZGRyLnNfYWRkcjsKLX0KIAotc3RhdGljIGludCBuZnNfc29ja2FkZHJfbWF0Y2hfaXBhZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2ExLAotCQkJCSBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMikKLXsKLQlpZiAodW5saWtlbHkoc2ExLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCB8fCBzYTItPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIG5mc19zb2NrYWRkcl9tYXRjaF9pcGFkZHI0KChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTEsCi0JCQkoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2EyKTsKKwlyZXR1cm4gaXB2Nl9hZGRyX2VxdWFsKCZzaW4xLT5zaW42X2FkZHIsICZzaW4xLT5zaW42X2FkZHIpOwogfQotCi1zdGF0aWMgaW50IG5mc19zb2NrYWRkcl9jbXBfaXA2KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqIHNhMSwKLQkJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiBzYTIpCisjZWxzZQkvKiAhZGVmaW5lZChDT05GSUdfSVBWNikgJiYgIWRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKSAqLworc3RhdGljIGludCBuZnNfc29ja2FkZHJfbWF0Y2hfaXBhZGRyNihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMikKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTMxMSwyMCArMjY3LDU3IEBACiAgKgogICogVGhlIGNhbGxlciBzaG91bGQgZW5zdXJlIGJvdGggc29ja2V0IGFkZHJlc3NlcyBhcmUgQUZfSU5FVC4KICAqLworc3RhdGljIGludCBuZnNfc29ja2FkZHJfbWF0Y2hfaXBhZGRyNChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMikKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2ExOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTI7CisKKwlyZXR1cm4gc2luMS0+c2luX2FkZHIuc19hZGRyID09IHNpbjItPnNpbl9hZGRyLnNfYWRkcjsKK30KKworc3RhdGljIGludCBuZnNfc29ja2FkZHJfY21wX2lwNihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMSwKKwkJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMikKK3sKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4xID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTE7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqc2luMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2EyOworCisJcmV0dXJuIG5mc19zb2NrYWRkcl9tYXRjaF9pcGFkZHI2KHNhMSwgc2EyKSAmJgorCQkoc2luMS0+c2luNl9wb3J0ID09IHNpbjItPnNpbjZfcG9ydCk7Cit9CisKIHN0YXRpYyBpbnQgbmZzX3NvY2thZGRyX2NtcF9pcDQoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTEsCiAJCQkJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTIpCiB7Ci0JY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICpzYWRkcjEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2ExOwotCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2FkZHIyID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhMjsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopc2ExOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luMiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTI7CiAKLQlpZiAoc2FkZHIxLT5zaW5fYWRkci5zX2FkZHIgIT0gc2FkZHIyLT5zaW5fYWRkci5zX2FkZHIpCi0JCXJldHVybiAwOwotCXJldHVybiBzYWRkcjEtPnNpbl9wb3J0ID09IHNhZGRyMi0+c2luX3BvcnQ7CisJcmV0dXJuIG5mc19zb2NrYWRkcl9tYXRjaF9pcGFkZHI0KHNhMSwgc2EyKSAmJgorCQkoc2luMS0+c2luX3BvcnQgPT0gc2luMi0+c2luX3BvcnQpOwogfQogCiAvKgogICogVGVzdCBpZiB0d28gc29ja2V0IGFkZHJlc3NlcyByZXByZXNlbnQgdGhlIHNhbWUgYWN0dWFsIHNvY2tldCwKLSAqIGJ5IGNvbXBhcmluZyAob25seSkgcmVsZXZhbnQgZmllbGRzLgorICogYnkgY29tcGFyaW5nIChvbmx5KSByZWxldmFudCBmaWVsZHMsIGV4Y2x1ZGluZyB0aGUgcG9ydCBudW1iZXIuCisgKi8KK3N0YXRpYyBpbnQgbmZzX3NvY2thZGRyX21hdGNoX2lwYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EyKQoreworCWlmIChzYTEtPnNhX2ZhbWlseSAhPSBzYTItPnNhX2ZhbWlseSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHNhMS0+c2FfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gbmZzX3NvY2thZGRyX21hdGNoX2lwYWRkcjQoc2ExLCBzYTIpOworCWNhc2UgQUZfSU5FVDY6CisJCXJldHVybiBuZnNfc29ja2FkZHJfbWF0Y2hfaXBhZGRyNihzYTEsIHNhMik7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGVzdCBpZiB0d28gc29ja2V0IGFkZHJlc3NlcyByZXByZXNlbnQgdGhlIHNhbWUgYWN0dWFsIHNvY2tldCwKKyAqIGJ5IGNvbXBhcmluZyAob25seSkgcmVsZXZhbnQgZmllbGRzLCBpbmNsdWRpbmcgdGhlIHBvcnQgbnVtYmVyLgogICovCiBzdGF0aWMgaW50IG5mc19zb2NrYWRkcl9jbXAoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTEsCiAJCQkgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTIpCkBAIC03NzIsNiArNzY1LDcgQEAKIAogCS8qIEluaXRpYWxpc2UgdGhlIGNsaWVudCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBtb3VudCBkYXRhICovCiAJc2VydmVyLT5mbGFncyA9IGRhdGEtPmZsYWdzOworCXNlcnZlci0+b3B0aW9ucyA9IGRhdGEtPm9wdGlvbnM7CiAKIAlpZiAoZGF0YS0+cnNpemUpCiAJCXNlcnZlci0+cnNpemUgPSBuZnNfYmxvY2tfc2l6ZShkYXRhLT5yc2l6ZSwgTlVMTCk7CkBAIC0xMTYwLDYgKzExNTQsNyBAQAogCS8qIEluaXRpYWxpc2UgdGhlIGNsaWVudCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBtb3VudCBkYXRhICovCiAJc2VydmVyLT5mbGFncyA9IGRhdGEtPmZsYWdzOwogCXNlcnZlci0+Y2FwcyB8PSBORlNfQ0FQX0FUT01JQ19PUEVOOworCXNlcnZlci0+b3B0aW9ucyA9IGRhdGEtPm9wdGlvbnM7CiAKIAkvKiBHZXQgYSBjbGllbnQgcmVjb3JkICovCiAJZXJyb3IgPSBuZnM0X3NldF9jbGllbnQoc2VydmVyLApAQCAtMTU3MSw3ICsxNTY2LDcgQEAKIAogCS8qIGRpc3BsYXkgaGVhZGVyIG9uIGxpbmUgMSAqLwogCWlmICh2ID09ICZuZnNfdm9sdW1lX2xpc3QpIHsKLQkJc2VxX3B1dHMobSwgIk5WIFNFUlZFUiAgIFBPUlQgREVWICAgICBGU0lEXG4iKTsKKwkJc2VxX3B1dHMobSwgIk5WIFNFUlZFUiAgIFBPUlQgREVWICAgICBGU0lEICAgICAgICAgICAgICBGU0NcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJLyogZGlzcGxheSBvbmUgdHJhbnNwb3J0IHBlciBsaW5lIG9uIHN1YnNlcXVlbnQgbGluZXMgKi8KQEAgLTE1ODUsMTIgKzE1ODAsMTMgQEAKIAkJICh1bnNpZ25lZCBsb25nIGxvbmcpIHNlcnZlci0+ZnNpZC5tYWpvciwKIAkJICh1bnNpZ25lZCBsb25nIGxvbmcpIHNlcnZlci0+ZnNpZC5taW5vcik7CiAKLQlzZXFfcHJpbnRmKG0sICJ2JXUgJXMgJXMgJS03cyAlLTE3c1xuIiwKKwlzZXFfcHJpbnRmKG0sICJ2JXUgJXMgJXMgJS03cyAlLTE3cyAlc1xuIiwKIAkJICAgY2xwLT5ycGNfb3BzLT52ZXJzaW9uLAogCQkgICBycGNfcGVlcmFkZHIyc3RyKGNscC0+Y2xfcnBjY2xpZW50LCBSUENfRElTUExBWV9IRVhfQUREUiksCiAJCSAgIHJwY19wZWVyYWRkcjJzdHIoY2xwLT5jbF9ycGNjbGllbnQsIFJQQ19ESVNQTEFZX0hFWF9QT1JUKSwKIAkJICAgZGV2LAotCQkgICBmc2lkKTsKKwkJICAgZnNpZCwKKwkJICAgbmZzX3NlcnZlcl9mc2NhY2hlX3N0YXRlKHNlcnZlcikpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggNzhiZjcyZi4uMzcwYjE5MCAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtMTYyNCw4ICsxNjI0LDcgQEAKIAkJfSBlbHNlIGlmIChhdG9taWNfcmVhZCgmbmV3X2RlbnRyeS0+ZF9jb3VudCkgPiAxKQogCQkJLyogZGVudHJ5IHN0aWxsIGJ1c3k/ICovCiAJCQlnb3RvIG91dDsKLQl9IGVsc2UKLQkJbmZzX2Ryb3BfbmxpbmsobmV3X2lub2RlKTsKKwl9CiAKIGdvX2FoZWFkOgogCS8qCkBAIC0xNjM4LDEwICsxNjM3LDggQEAKIAl9CiAJbmZzX2lub2RlX3JldHVybl9kZWxlZ2F0aW9uKG9sZF9pbm9kZSk7CiAKLQlpZiAobmV3X2lub2RlICE9IE5VTEwpIHsKKwlpZiAobmV3X2lub2RlICE9IE5VTEwpCiAJCW5mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihuZXdfaW5vZGUpOwotCQlkX2RlbGV0ZShuZXdfZGVudHJ5KTsKLQl9CiAKIAllcnJvciA9IE5GU19QUk9UTyhvbGRfZGlyKS0+cmVuYW1lKG9sZF9kaXIsICZvbGRfZGVudHJ5LT5kX25hbWUsCiAJCQkJCSAgIG5ld19kaXIsICZuZXdfZGVudHJ5LT5kX25hbWUpOwpAQCAtMTY1MCw2ICsxNjQ3LDggQEAKIAlpZiAocmVoYXNoKQogCQlkX3JlaGFzaChyZWhhc2gpOwogCWlmICghZXJyb3IpIHsKKwkJaWYgKG5ld19pbm9kZSAhPSBOVUxMKQorCQkJbmZzX2Ryb3BfbmxpbmsobmV3X2lub2RlKTsKIAkJZF9tb3ZlKG9sZF9kZW50cnksIG5ld19kZW50cnkpOwogCQluZnNfc2V0X3ZlcmlmaWVyKG5ld19kZW50cnksCiAJCQkJCW5mc19zYXZlX2NoYW5nZV9hdHRyaWJ1dGUobmV3X2RpcikpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGUuYyBiL2ZzL25mcy9maWxlLmMKaW5kZXggOTBmMjkyYi4uMzUyM2I4OSAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiZGVsZWdhdGlvbi5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAiaW9zdGF0LmgiCisjaW5jbHVkZSAiZnNjYWNoZS5oIgogCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX0ZJTEUKIApAQCAtNjQsMTEgKzY1LDcgQEAKIAkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKIAkuYWlvX3JlYWQJPSBuZnNfZmlsZV9yZWFkLAogCS5haW9fd3JpdGUJPSBuZnNfZmlsZV93cml0ZSwKLSNpZmRlZiBDT05GSUdfTU1VCiAJLm1tYXAJCT0gbmZzX2ZpbGVfbW1hcCwKLSNlbHNlCi0JLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCi0jZW5kaWYKIAkub3BlbgkJPSBuZnNfZmlsZV9vcGVuLAogCS5mbHVzaAkJPSBuZnNfZmlsZV9mbHVzaCwKIAkucmVsZWFzZQk9IG5mc19maWxlX3JlbGVhc2UsCkBAIC0xNDEsOSArMTM4LDYgQEAKIAkJCWRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLAogCQkJZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKLQkvKiBFbnN1cmUgdGhhdCBkaXJ0eSBwYWdlcyBhcmUgZmx1c2hlZCBvdXQgd2l0aCB0aGUgcmlnaHQgY3JlZHMgKi8KLQlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCW5mc193Yl9hbGwoZGVudHJ5LT5kX2lub2RlKTsKIAluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfVkZTUkVMRUFTRSk7CiAJcmV0dXJuIG5mc19yZWxlYXNlKGlub2RlLCBmaWxwKTsKIH0KQEAgLTIzNSw3ICsyMjksNiBAQAogCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHggPSBuZnNfZmlsZV9vcGVuX2NvbnRleHQoZmlsZSk7CiAJc3RydWN0IGRlbnRyeQkqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCWludAkJc3RhdHVzOwogCiAJZHByaW50aygiTkZTOiBmbHVzaCglcy8lcylcbiIsCiAJCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwKQEAgLTI0NSwxMSArMjM4LDggQEAKIAkJcmV0dXJuIDA7CiAJbmZzX2luY19zdGF0cyhpbm9kZSwgTkZTSU9TX1ZGU0ZMVVNIKTsKIAotCS8qIEVuc3VyZSB0aGF0IGRhdGErYXR0cmlidXRlIGNhY2hlcyBhcmUgdXAgdG8gZGF0ZSBhZnRlciBjbG9zZSgpICovCi0Jc3RhdHVzID0gbmZzX2RvX2ZzeW5jKGN0eCwgaW5vZGUpOwotCWlmICghc3RhdHVzKQotCQluZnNfcmV2YWxpZGF0ZV9pbm9kZShORlNfU0VSVkVSKGlub2RlKSwgaW5vZGUpOwotCXJldHVybiBzdGF0dXM7CisJLyogRmx1c2ggd3JpdGVzIHRvIHRoZSBzZXJ2ZXIgYW5kIHJldHVybiBhbnkgZXJyb3JzICovCisJcmV0dXJuIG5mc19kb19mc3luYyhjdHgsIGlub2RlKTsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTMwNCwxMSArMjk0LDEzIEBACiAJZHByaW50aygiTkZTOiBtbWFwKCVzLyVzKVxuIiwKIAkJZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCi0Jc3RhdHVzID0gbmZzX3JldmFsaWRhdGVfbWFwcGluZyhpbm9kZSwgZmlsZS0+Zl9tYXBwaW5nKTsKKwkvKiBOb3RlOiBnZW5lcmljX2ZpbGVfbW1hcCgpIHJldHVybnMgRU5PU1lTIG9uIG5vbW11IHN5c3RlbXMKKwkgKiAgICAgICBzbyB3ZSBjYWxsIHRoYXQgYmVmb3JlIHJldmFsaWRhdGluZyB0aGUgbWFwcGluZworCSAqLworCXN0YXR1cyA9IGdlbmVyaWNfZmlsZV9tbWFwKGZpbGUsIHZtYSk7CiAJaWYgKCFzdGF0dXMpIHsKIAkJdm1hLT52bV9vcHMgPSAmbmZzX2ZpbGVfdm1fb3BzOwotCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0NBTl9OT05MSU5FQVI7Ci0JCWZpbGVfYWNjZXNzZWQoZmlsZSk7CisJCXN0YXR1cyA9IG5mc19yZXZhbGlkYXRlX21hcHBpbmcoaW5vZGUsIGZpbGUtPmZfbWFwcGluZyk7CiAJfQogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0zNTQsNiArMzQ2LDE1IEBACiAJCWZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lLAogCQltYXBwaW5nLT5ob3N0LT5pX2lubywgbGVuLCAobG9uZyBsb25nKSBwb3MpOwogCisJLyoKKwkgKiBQcmV2ZW50IHN0YXJ2YXRpb24gaXNzdWVzIGlmIHNvbWVvbmUgaXMgZG9pbmcgYSBjb25zaXN0ZW5jeQorCSAqIHN5bmMtdG8tZGlzaworCSAqLworCXJldCA9IHdhaXRfb25fYml0KCZORlNfSShtYXBwaW5nLT5ob3N0KS0+ZmxhZ3MsIE5GU19JTk9fRkxVU0hJTkcsCisJCQluZnNfd2FpdF9iaXRfa2lsbGFibGUsIFRBU0tfS0lMTEFCTEUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlX3dyaXRlX2JlZ2luKG1hcHBpbmcsIGluZGV4LCBmbGFncyk7CiAJaWYgKCFwYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQwOSw2ICs0MTAsMTMgQEAKIAlyZXR1cm4gY29waWVkOwogfQogCisvKgorICogUGFydGlhbGx5IG9yIHdob2xseSBpbnZhbGlkYXRlIGEgcGFnZQorICogLSBSZWxlYXNlIHRoZSBwcml2YXRlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgaWYgdW5kZXJnb2luZyBjb21wbGV0ZQorICogICBwYWdlIGludmFsaWRhdGlvbgorICogLSBDYWxsZWQgaWYgZWl0aGVyIFBHX3ByaXZhdGUgb3IgUEdfZnNjYWNoZSBpcyBzZXQgb24gdGhlIHBhZ2UKKyAqIC0gQ2FsbGVyIGhvbGRzIHBhZ2UgbG9jaworICovCiBzdGF0aWMgdm9pZCBuZnNfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAlkZnByaW50ayhQQUdFQ0FDSEUsICJORlM6IGludmFsaWRhdGVfcGFnZSglcCwgJWx1KVxuIiwgcGFnZSwgb2Zmc2V0KTsKQEAgLTQxNywyMyArNDI1LDQzIEBACiAJCXJldHVybjsKIAkvKiBDYW5jZWwgYW55IHVuc3RhcnRlZCB3cml0ZXMgb24gdGhpcyBwYWdlICovCiAJbmZzX3diX3BhZ2VfY2FuY2VsKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UpOworCisJbmZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHBhZ2UsIHBhZ2UtPm1hcHBpbmctPmhvc3QpOwogfQogCisvKgorICogQXR0ZW1wdCB0byByZWxlYXNlIHRoZSBwcml2YXRlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UKKyAqIC0gQ2FsbGVkIGlmIGVpdGhlciBQR19wcml2YXRlIG9yIFBHX2ZzY2FjaGUgaXMgc2V0IG9uIHRoZSBwYWdlCisgKiAtIENhbGxlciBob2xkcyBwYWdlIGxvY2sKKyAqIC0gUmV0dXJuIHRydWUgKG1heSByZWxlYXNlIHBhZ2UpIG9yIGZhbHNlIChtYXkgbm90KQorICovCiBzdGF0aWMgaW50IG5mc19yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCkKIHsKIAlkZnByaW50ayhQQUdFQ0FDSEUsICJORlM6IHJlbGVhc2VfcGFnZSglcClcbiIsIHBhZ2UpOwogCiAJLyogSWYgUGFnZVByaXZhdGUoKSBpcyBzZXQsIHRoZW4gdGhlIHBhZ2UgaXMgbm90IGZyZWVhYmxlICovCi0JcmV0dXJuIDA7CisJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gbmZzX2ZzY2FjaGVfcmVsZWFzZV9wYWdlKHBhZ2UsIGdmcCk7CiB9CiAKKy8qCisgKiBBdHRlbXB0IHRvIGNsZWFyIHRoZSBwcml2YXRlIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2Ugd2hlbiBhbiBlcnJvcgorICogb2NjdXJzIHRoYXQgcmVxdWlyZXMgdGhlIGNhY2hlZCBjb250ZW50cyBvZiBhbiBpbm9kZSB0byBiZSB3cml0dGVuIGJhY2sgb3IKKyAqIGRlc3Ryb3llZAorICogLSBDYWxsZWQgaWYgZWl0aGVyIFBHX3ByaXZhdGUgb3IgZnNjYWNoZSBpcyBzZXQgb24gdGhlIHBhZ2UKKyAqIC0gQ2FsbGVyIGhvbGRzIHBhZ2UgbG9jaworICogLSBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLCAtZXJyb3Igb3RoZXJ3aXNlCisgKi8KIHN0YXRpYyBpbnQgbmZzX2xhdW5kZXJfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOwogCiAJZGZwcmludGsoUEFHRUNBQ0hFLCAiTkZTOiBsYXVuZGVyX3BhZ2UoJWxkLCAlbGx1KVxuIiwKIAkJaW5vZGUtPmlfaW5vLCAobG9uZyBsb25nKXBhZ2Vfb2Zmc2V0KHBhZ2UpKTsKIAorCW5mc19mc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShuZnNpLCBwYWdlKTsKIAlyZXR1cm4gbmZzX3diX3BhZ2UoaW5vZGUsIHBhZ2UpOwogfQogCkBAIC00NTEsOCArNDc5LDE0IEBACiAJLmxhdW5kZXJfcGFnZSA9IG5mc19sYXVuZGVyX3BhZ2UsCiB9OwogCi1zdGF0aWMgaW50IG5mc192bV9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKQorLyoKKyAqIE5vdGlmaWNhdGlvbiB0aGF0IGEgUFRFIHBvaW50aW5nIHRvIGFuIE5GUyBwYWdlIGlzIGFib3V0IHRvIGJlIG1hZGUKKyAqIHdyaXRhYmxlLCBpbXBseWluZyB0aGF0IHNvbWVvbmUgaXMgYWJvdXQgdG8gbW9kaWZ5IHRoZSBwYWdlIHRocm91Z2ggYQorICogc2hhcmVkLXdyaXRhYmxlIG1hcHBpbmcKKyAqLworc3RhdGljIGludCBuZnNfdm1fcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtZi0+cGFnZTsKIAlzdHJ1Y3QgZmlsZSAqZmlscCA9IHZtYS0+dm1fZmlsZTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX3BhdGguZGVudHJ5OwogCXVuc2lnbmVkIHBhZ2VsZW47CkBAIC00NjQsNiArNDk4LDkgQEAKIAkJZmlscC0+Zl9tYXBwaW5nLT5ob3N0LT5pX2lubywKIAkJKGxvbmcgbG9uZylwYWdlX29mZnNldChwYWdlKSk7CiAKKwkvKiBtYWtlIHN1cmUgdGhlIGNhY2hlIGhhcyBmaW5pc2hlZCBzdG9yaW5nIHRoZSBwYWdlICovCisJbmZzX2ZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKE5GU19JKGRlbnRyeS0+ZF9pbm9kZSksIHBhZ2UpOworCiAJbG9ja19wYWdlKHBhZ2UpOwogCW1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOwogCWlmIChtYXBwaW5nICE9IGRlbnRyeS0+ZF9pbm9kZS0+aV9tYXBwaW5nKQpAQCAtNDgzLDYgKzUyMCw4IEBACiAJCXJldCA9IHBhZ2VsZW47CiBvdXRfdW5sb2NrOgogCXVubG9ja19wYWdlKHBhZ2UpOworCWlmIChyZXQpCisJCXJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvZnNjYWNoZS1pbmRleC5jIGIvZnMvbmZzL2ZzY2FjaGUtaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjEwMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvbmZzL2ZzY2FjaGUtaW5kZXguYwpAQCAtMCwwICsxLDMzNyBAQAorLyogTkZTIEZTLUNhY2hlIGluZGV4IHN0cnVjdHVyZSBkZWZpbml0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25mc19mc19zYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luNi5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJmc2NhY2hlLmgiCisKKyNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCQlORlNEQkdfRlNDQUNIRQorCisvKgorICogRGVmaW5lIHRoZSBORlMgZmlsZXN5c3RlbSBmb3IgRlMtQ2FjaGUuICBVcG9uIHJlZ2lzdHJhdGlvbiBGUy1DYWNoZSBzdGlja3MKKyAqIHRoZSBjb29raWUgZm9yIHRoZSB0b3AtbGV2ZWwgaW5kZXggb2JqZWN0IGZvciBORlMgaW50byBoZXJlLiAgVGhlIHRvcC1sZXZlbAorICogaW5kZXggY2FuIHRoYW4gaGF2ZSBvdGhlciBjYWNoZSBvYmplY3RzIGluc2VydGVkIGludG8gaXQuCisgKi8KK3N0cnVjdCBmc2NhY2hlX25ldGZzIG5mc19mc2NhY2hlX25ldGZzID0geworCS5uYW1lCQk9ICJuZnMiLAorCS52ZXJzaW9uCT0gMCwKK307CisKKy8qCisgKiBSZWdpc3RlciBORlMgZm9yIGNhY2hpbmcKKyAqLworaW50IG5mc19mc2NhY2hlX3JlZ2lzdGVyKHZvaWQpCit7CisJcmV0dXJuIGZzY2FjaGVfcmVnaXN0ZXJfbmV0ZnMoJm5mc19mc2NhY2hlX25ldGZzKTsKK30KKworLyoKKyAqIFVucmVnaXN0ZXIgTkZTIGZvciBjYWNoaW5nCisgKi8KK3ZvaWQgbmZzX2ZzY2FjaGVfdW5yZWdpc3Rlcih2b2lkKQoreworCWZzY2FjaGVfdW5yZWdpc3Rlcl9uZXRmcygmbmZzX2ZzY2FjaGVfbmV0ZnMpOworfQorCisvKgorICogTGF5b3V0IG9mIHRoZSBrZXkgZm9yIGFuIE5GUyBzZXJ2ZXIgY2FjaGUgb2JqZWN0LgorICovCitzdHJ1Y3QgbmZzX3NlcnZlcl9rZXkgeworCXVpbnQxNl90CW5mc3ZlcnNpb247CQkvKiBORlMgcHJvdG9jb2wgdmVyc2lvbiAqLworCXVpbnQxNl90CWZhbWlseTsJCQkvKiBhZGRyZXNzIGZhbWlseSAqLworCXVpbnQxNl90CXBvcnQ7CQkJLyogSVAgcG9ydCAqLworCXVuaW9uIHsKKwkJc3RydWN0IGluX2FkZHIJaXB2NF9hZGRyOwkvKiBJUHY0IGFkZHJlc3MgKi8KKwkJc3RydWN0IGluNl9hZGRyIGlwdjZfYWRkcjsJLyogSVB2NiBhZGRyZXNzICovCisJfSBhZGRyWzBdOworfTsKKworLyoKKyAqIEdlbmVyYXRlIGEga2V5IHRvIGRlc2NyaWJlIGEgc2VydmVyIGluIHRoZSBtYWluIE5GUyBpbmRleAorICogLSBXZSByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUga2V5LCBvciAwIGlmIHdlIGNhbid0IGdlbmVyYXRlIG9uZQorICovCitzdGF0aWMgdWludDE2X3QgbmZzX3NlcnZlcl9nZXRfa2V5KGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJCSAgIHZvaWQgKmJ1ZmZlciwgdWludDE2X3QgYnVmbWF4KQoreworCWNvbnN0IHN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgJmNscC0+Y2xfYWRkcjsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmNscC0+Y2xfYWRkcjsKKwlzdHJ1Y3QgbmZzX3NlcnZlcl9rZXkgKmtleSA9IGJ1ZmZlcjsKKwl1aW50MTZfdCBsZW4gPSBzaXplb2Yoc3RydWN0IG5mc19zZXJ2ZXJfa2V5KTsKKworCWtleS0+bmZzdmVyc2lvbiA9IGNscC0+cnBjX29wcy0+dmVyc2lvbjsKKwlrZXktPmZhbWlseSA9IGNscC0+Y2xfYWRkci5zc19mYW1pbHk7CisKKwltZW1zZXQoa2V5LCAwLCBsZW4pOworCisJc3dpdGNoIChjbHAtPmNsX2FkZHIuc3NfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlrZXktPnBvcnQgPSBzaW4tPnNpbl9wb3J0OworCQlrZXktPmFkZHJbMF0uaXB2NF9hZGRyID0gc2luLT5zaW5fYWRkcjsKKwkJbGVuICs9IHNpemVvZihrZXktPmFkZHJbMF0uaXB2NF9hZGRyKTsKKwkJYnJlYWs7CisKKwljYXNlIEFGX0lORVQ2OgorCQlrZXktPnBvcnQgPSBzaW42LT5zaW42X3BvcnQ7CisJCWtleS0+YWRkclswXS5pcHY2X2FkZHIgPSBzaW42LT5zaW42X2FkZHI7CisJCWxlbiArPSBzaXplb2Yoa2V5LT5hZGRyWzBdLmlwdjZfYWRkcik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTkZTOiBVbmtub3duIG5ldHdvcmsgZmFtaWx5ICclZCdcbiIsCisJCSAgICAgICBjbHAtPmNsX2FkZHIuc3NfZmFtaWx5KTsKKwkJbGVuID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIERlZmluZSB0aGUgc2VydmVyIG9iamVjdCBmb3IgRlMtQ2FjaGUuICBUaGlzIGlzIHVzZWQgdG8gZGVzY3JpYmUgYSBzZXJ2ZXIKKyAqIG9iamVjdCB0byBmc2NhY2hlX2FjcXVpcmVfY29va2llKCkuICBJdCBpcyBrZXllZCBieSB0aGUgTkZTIHByb3RvY29sIGFuZAorICogc2VydmVyIGFkZHJlc3MgcGFyYW1ldGVycy4KKyAqLworY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBuZnNfZnNjYWNoZV9zZXJ2ZXJfaW5kZXhfZGVmID0geworCS5uYW1lCQk9ICJORlMuc2VydmVyIiwKKwkudHlwZSAJCT0gRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWCwKKwkuZ2V0X2tleQk9IG5mc19zZXJ2ZXJfZ2V0X2tleSwKK307CisKKy8qCisgKiBHZW5lcmF0ZSBhIGtleSB0byBkZXNjcmliZSBhIHN1cGVyYmxvY2sga2V5IGluIHRoZSBtYWluIE5GUyBpbmRleAorICovCitzdGF0aWMgdWludDE2X3QgbmZzX3N1cGVyX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwljb25zdCBzdHJ1Y3QgbmZzX2ZzY2FjaGVfa2V5ICprZXk7CisJY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKm5mc3MgPSBjb29raWVfbmV0ZnNfZGF0YTsKKwl1aW50MTZfdCBsZW47CisKKwlrZXkgPSBuZnNzLT5mc2NhY2hlX2tleTsKKwlsZW4gPSBzaXplb2Yoa2V5LT5rZXkpICsga2V5LT5rZXkudW5pcV9sZW47CisJaWYgKGxlbiA+IGJ1Zm1heCkgeworCQlsZW4gPSAwOworCX0gZWxzZSB7CisJCW1lbWNweShidWZmZXIsICZrZXktPmtleSwgc2l6ZW9mKGtleS0+a2V5KSk7CisJCW1lbWNweShidWZmZXIgKyBzaXplb2Yoa2V5LT5rZXkpLAorCQkgICAgICAga2V5LT5rZXkudW5pcXVpZmllciwga2V5LT5rZXkudW5pcV9sZW4pOworCX0KKworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBEZWZpbmUgdGhlIHN1cGVyYmxvY2sgb2JqZWN0IGZvciBGUy1DYWNoZS4gIFRoaXMgaXMgdXNlZCB0byBkZXNjcmliZSBhCisgKiBzdXBlcmJsb2NrIG9iamVjdCB0byBmc2NhY2hlX2FjcXVpcmVfY29va2llKCkuICBJdCBpcyBrZXllZCBieSBhbGwgdGhlIE5GUworICogcGFyYW1ldGVycyB0aGF0IG1pZ2h0IGNhdXNlIGEgc2VwYXJhdGUgc3VwZXJibG9jay4KKyAqLworY29uc3Qgc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiBuZnNfZnNjYWNoZV9zdXBlcl9pbmRleF9kZWYgPSB7CisJLm5hbWUJCT0gIk5GUy5zdXBlciIsCisJLnR5cGUgCQk9IEZTQ0FDSEVfQ09PS0lFX1RZUEVfSU5ERVgsCisJLmdldF9rZXkJPSBuZnNfc3VwZXJfZ2V0X2tleSwKK307CisKKy8qCisgKiBEZWZpbml0aW9uIG9mIHRoZSBhdXhpbGlhcnkgZGF0YSBhdHRhY2hlZCB0byBORlMgaW5vZGUgc3RvcmFnZSBvYmplY3RzCisgKiB3aXRoaW4gdGhlIGNhY2hlLgorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdCBhcmUgcmVjb3JkZWQgaW4gdGhlIG9uLWRpc2sgbG9jYWwgY2FjaGUgaW4gdGhlCisgKiBhdXhpbGlhcnkgZGF0YSBhdHRhY2hlZCB0byB0aGUgZGF0YSBzdG9yYWdlIG9iamVjdCBiYWNraW5nIGFuIGlub2RlLiAgVGhpcworICogcGVybWl0cyBjb2hlcmVuY3kgdG8gYmUgbWFuYWdlZCB3aGVuIGEgbmV3IGlub2RlIGJpbmRzIHRvIGFuIGFscmVhZHkgZXh0YW50CisgKiBjYWNoZSBvYmplY3QuCisgKi8KK3N0cnVjdCBuZnNfZnNjYWNoZV9pbm9kZV9hdXhkYXRhIHsKKwlzdHJ1Y3QgdGltZXNwZWMJbXRpbWU7CisJc3RydWN0IHRpbWVzcGVjCWN0aW1lOworCWxvZmZfdAkJc2l6ZTsKKwl1NjQJCWNoYW5nZV9hdHRyOworfTsKKworLyoKKyAqIEdlbmVyYXRlIGEga2V5IHRvIGRlc2NyaWJlIGFuIE5GUyBpbm9kZSBpbiBhbiBORlMgc2VydmVyJ3MgaW5kZXgKKyAqLworc3RhdGljIHVpbnQxNl90IG5mc19mc2NhY2hlX2lub2RlX2dldF9rZXkoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgdm9pZCAqYnVmZmVyLCB1aW50MTZfdCBidWZtYXgpCit7CisJY29uc3Qgc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXVpbnQxNl90IG5zaXplOworCisJLyogdXNlIHRoZSBpbm9kZSdzIE5GUyBmaWxlaGFuZGxlIGFzIHRoZSBrZXkgKi8KKwluc2l6ZSA9IG5mc2ktPmZoLnNpemU7CisJbWVtY3B5KGJ1ZmZlciwgbmZzaS0+ZmguZGF0YSwgbnNpemUpOworCXJldHVybiBuc2l6ZTsKK30KKworLyoKKyAqIEdldCBjZXJ0YWluIGZpbGUgYXR0cmlidXRlcyBmcm9tIHRoZSBuZXRmcyBkYXRhCisgKiAtIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGFic2VudCBmb3IgYW4gaW5kZXgKKyAqIC0gTm90IHBlcm1pdHRlZCB0byByZXR1cm4gYW4gZXJyb3IKKyAqIC0gVGhlIG5ldGZzIGRhdGEgZnJvbSB0aGUgY29va2llIGJlaW5nIHVzZWQgYXMgdGhlIHNvdXJjZSBpcyBwcmVzZW50ZWQKKyAqLworc3RhdGljIHZvaWQgbmZzX2ZzY2FjaGVfaW5vZGVfZ2V0X2F0dHIoY29uc3Qgdm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICAgICAgIHVpbnQ2NF90ICpzaXplKQoreworCWNvbnN0IHN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBjb29raWVfbmV0ZnNfZGF0YTsKKworCSpzaXplID0gbmZzaS0+dmZzX2lub2RlLmlfc2l6ZTsKK30KKworLyoKKyAqIEdldCB0aGUgYXV4aWxpYXJ5IGRhdGEgZnJvbSBuZXRmcyBkYXRhCisgKiAtIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGFic2VudCBpZiB0aGUgaW5kZXggY2FycmllcyBubyBzdGF0ZSBkYXRhCisgKiAtIFNob3VsZCBzdG9yZSB0aGUgYXV4aWxpYXJ5IGRhdGEgaW4gdGhlIGJ1ZmZlcgorICogLSBTaG91bGQgcmV0dXJuIHRoZSBhbW91bnQgb2YgYW1vdW50IHN0b3JlZAorICogLSBOb3QgcGVybWl0dGVkIHRvIHJldHVybiBhbiBlcnJvcgorICogLSBUaGUgbmV0ZnMgZGF0YSBmcm9tIHRoZSBjb29raWUgYmVpbmcgdXNlZCBhcyB0aGUgc291cmNlIGlzIHByZXNlbnRlZAorICovCitzdGF0aWMgdWludDE2X3QgbmZzX2ZzY2FjaGVfaW5vZGVfZ2V0X2F1eChjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJICB2b2lkICpidWZmZXIsIHVpbnQxNl90IGJ1Zm1heCkKK3sKKwlzdHJ1Y3QgbmZzX2ZzY2FjaGVfaW5vZGVfYXV4ZGF0YSBhdXhkYXRhOworCWNvbnN0IHN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBjb29raWVfbmV0ZnNfZGF0YTsKKworCW1lbXNldCgmYXV4ZGF0YSwgMCwgc2l6ZW9mKGF1eGRhdGEpKTsKKwlhdXhkYXRhLnNpemUgPSBuZnNpLT52ZnNfaW5vZGUuaV9zaXplOworCWF1eGRhdGEubXRpbWUgPSBuZnNpLT52ZnNfaW5vZGUuaV9tdGltZTsKKwlhdXhkYXRhLmN0aW1lID0gbmZzaS0+dmZzX2lub2RlLmlfY3RpbWU7CisKKwlpZiAoTkZTX1NFUlZFUigmbmZzaS0+dmZzX2lub2RlKS0+bmZzX2NsaWVudC0+cnBjX29wcy0+dmVyc2lvbiA9PSA0KQorCQlhdXhkYXRhLmNoYW5nZV9hdHRyID0gbmZzaS0+Y2hhbmdlX2F0dHI7CisKKwlpZiAoYnVmbWF4ID4gc2l6ZW9mKGF1eGRhdGEpKQorCQlidWZtYXggPSBzaXplb2YoYXV4ZGF0YSk7CisKKwltZW1jcHkoYnVmZmVyLCAmYXV4ZGF0YSwgYnVmbWF4KTsKKwlyZXR1cm4gYnVmbWF4OworfQorCisvKgorICogQ29uc3VsdCB0aGUgbmV0ZnMgYWJvdXQgdGhlIHN0YXRlIG9mIGFuIG9iamVjdAorICogLSBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBhYnNlbnQgaWYgdGhlIGluZGV4IGNhcnJpZXMgbm8gc3RhdGUgZGF0YQorICogLSBUaGUgbmV0ZnMgZGF0YSBmcm9tIHRoZSBjb29raWUgYmVpbmcgdXNlZCBhcyB0aGUgdGFyZ2V0IGlzCisgKiAgIHByZXNlbnRlZCwgYXMgaXMgdGhlIGF1eGlsaWFyeSBkYXRhCisgKi8KK3N0YXRpYworZW51bSBmc2NhY2hlX2NoZWNrYXV4IG5mc19mc2NhY2hlX2lub2RlX2NoZWNrX2F1eCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCQkJCSAgY29uc3Qgdm9pZCAqZGF0YSwKKwkJCQkJCSAgdWludDE2X3QgZGF0YWxlbikKK3sKKwlzdHJ1Y3QgbmZzX2ZzY2FjaGVfaW5vZGVfYXV4ZGF0YSBhdXhkYXRhOworCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBjb29raWVfbmV0ZnNfZGF0YTsKKworCWlmIChkYXRhbGVuICE9IHNpemVvZihhdXhkYXRhKSkKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CisKKwltZW1zZXQoJmF1eGRhdGEsIDAsIHNpemVvZihhdXhkYXRhKSk7CisJYXV4ZGF0YS5zaXplID0gbmZzaS0+dmZzX2lub2RlLmlfc2l6ZTsKKwlhdXhkYXRhLm10aW1lID0gbmZzaS0+dmZzX2lub2RlLmlfbXRpbWU7CisJYXV4ZGF0YS5jdGltZSA9IG5mc2ktPnZmc19pbm9kZS5pX2N0aW1lOworCisJaWYgKE5GU19TRVJWRVIoJm5mc2ktPnZmc19pbm9kZSktPm5mc19jbGllbnQtPnJwY19vcHMtPnZlcnNpb24gPT0gNCkKKwkJYXV4ZGF0YS5jaGFuZ2VfYXR0ciA9IG5mc2ktPmNoYW5nZV9hdHRyOworCisJaWYgKG1lbWNtcChkYXRhLCAmYXV4ZGF0YSwgZGF0YWxlbikgIT0gMCkKKwkJcmV0dXJuIEZTQ0FDSEVfQ0hFQ0tBVVhfT0JTT0xFVEU7CisKKwlyZXR1cm4gRlNDQUNIRV9DSEVDS0FVWF9PS0FZOworfQorCisvKgorICogSW5kaWNhdGlvbiBmcm9tIEZTLUNhY2hlIHRoYXQgdGhlIGNvb2tpZSBpcyBubyBsb25nZXIgY2FjaGVkCisgKiAtIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGJhY2tpbmcgc3RvcmUgY3VycmVudGx5IGNhY2hpbmcgYSBjb29raWUKKyAqICAgaXMgcmVtb3ZlZAorICogLSBUaGUgbmV0ZnMgc2hvdWxkIHVzZSB0aGlzIHRvIGNsZWFuIHVwIGFueSBtYXJrZXJzIGluZGljYXRpbmcgY2FjaGVkIHBhZ2VzCisgKiAtIFRoaXMgaXMgbWFuZGF0b3J5IGZvciBhbnkgb2JqZWN0IHRoYXQgbWF5IGhhdmUgZGF0YQorICovCitzdGF0aWMgdm9pZCBuZnNfZnNjYWNoZV9pbm9kZV9ub3dfdW5jYWNoZWQodm9pZCAqY29va2llX25ldGZzX2RhdGEpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IGNvb2tpZV9uZXRmc19kYXRhOworCXN0cnVjdCBwYWdldmVjIHB2ZWM7CisJcGdvZmZfdCBmaXJzdDsKKwlpbnQgbG9vcCwgbnJfcGFnZXM7CisKKwlwYWdldmVjX2luaXQoJnB2ZWMsIDApOworCWZpcnN0ID0gMDsKKworCWRwcmludGsoIk5GUzogbmZzX2lub2RlX25vd191bmNhY2hlZDogbmZzX2lub2RlIDB4JXBcbiIsIG5mc2kpOworCisJZm9yICg7OykgeworCQkvKiBncmFiIGEgYnVuY2ggb2YgcGFnZXMgdG8gdW5tYXJrICovCisJCW5yX3BhZ2VzID0gcGFnZXZlY19sb29rdXAoJnB2ZWMsCisJCQkJCSAgbmZzaS0+dmZzX2lub2RlLmlfbWFwcGluZywKKwkJCQkJICBmaXJzdCwKKwkJCQkJICBQQUdFVkVDX1NJWkUgLSBwYWdldmVjX2NvdW50KCZwdmVjKSk7CisJCWlmICghbnJfcGFnZXMpCisJCQlicmVhazsKKworCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgbnJfcGFnZXM7IGxvb3ArKykKKwkJCUNsZWFyUGFnZUZzQ2FjaGUocHZlYy5wYWdlc1tsb29wXSk7CisKKwkJZmlyc3QgPSBwdmVjLnBhZ2VzW25yX3BhZ2VzIC0gMV0tPmluZGV4ICsgMTsKKworCQlwdmVjLm5yID0gbnJfcGFnZXM7CisJCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CisJCWNvbmRfcmVzY2hlZCgpOworCX0KK30KKworLyoKKyAqIEdldCBhbiBleHRyYSByZWZlcmVuY2Ugb24gYSByZWFkIGNvbnRleHQuCisgKiAtIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGFic2VudCBpZiB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiBkb2Vzbid0IHJlcXVpcmUgYQorICogICBjb250ZXh0LgorICogLSBUaGUgcmVhZCBjb250ZXh0IGlzIHBhc3NlZCBiYWNrIHRvIE5GUyBpbiB0aGUgZXZlbnQgdGhhdCBhIGRhdGEgcmVhZCBvbiB0aGUKKyAqICAgY2FjaGUgZmFpbHMgd2l0aCBFSU8gLSBpbiB3aGljaCBjYXNlIHRoZSBzZXJ2ZXIgbXVzdCBiZSBjb250YWN0ZWQgdG8KKyAqICAgcmV0cmlldmUgdGhlIGRhdGEsIHdoaWNoIHJlcXVpcmVzIHRoZSByZWFkIGNvbnRleHQgZm9yIHNlY3VyaXR5LgorICovCitzdGF0aWMgdm9pZCBuZnNfZmhfZ2V0X2NvbnRleHQodm9pZCAqY29va2llX25ldGZzX2RhdGEsIHZvaWQgKmNvbnRleHQpCit7CisJZ2V0X25mc19vcGVuX2NvbnRleHQoY29udGV4dCk7Cit9CisKKy8qCisgKiBSZWxlYXNlIGFuIGV4dHJhIHJlZmVyZW5jZSBvbiBhIHJlYWQgY29udGV4dC4KKyAqIC0gVGhpcyBmdW5jdGlvbiBjYW4gYmUgYWJzZW50IGlmIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uIGRvZXNuJ3QgcmVxdWlyZSBhCisgKiAgIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIG5mc19maF9wdXRfY29udGV4dCh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwgdm9pZCAqY29udGV4dCkKK3sKKwlpZiAoY29udGV4dCkKKwkJcHV0X25mc19vcGVuX2NvbnRleHQoY29udGV4dCk7Cit9CisKKy8qCisgKiBEZWZpbmUgdGhlIGlub2RlIG9iamVjdCBmb3IgRlMtQ2FjaGUuICBUaGlzIGlzIHVzZWQgdG8gZGVzY3JpYmUgYW4gaW5vZGUKKyAqIG9iamVjdCB0byBmc2NhY2hlX2FjcXVpcmVfY29va2llKCkuICBJdCBpcyBrZXllZCBieSB0aGUgTkZTIGZpbGUgaGFuZGxlIGZvcgorICogYW4gaW5vZGUuCisgKgorICogQ29oZXJlbmN5IGlzIG1hbmFnZWQgYnkgY29tcGFyaW5nIHRoZSBjb3BpZXMgb2YgaV9zaXplLCBpX210aW1lIGFuZCBpX2N0aW1lCisgKiBoZWxkIGluIHRoZSBjYWNoZSBhdXhpbGlhcnkgZGF0YSBmb3IgdGhlIGRhdGEgc3RvcmFnZSBvYmplY3Qgd2l0aCB0aG9zZSBpbgorICogdGhlIGlub2RlIHN0cnVjdCBpbiBtZW1vcnkuCisgKi8KK2NvbnN0IHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgbmZzX2ZzY2FjaGVfaW5vZGVfb2JqZWN0X2RlZiA9IHsKKwkubmFtZQkJPSAiTkZTLmZoIiwKKwkudHlwZQkJPSBGU0NBQ0hFX0NPT0tJRV9UWVBFX0RBVEFGSUxFLAorCS5nZXRfa2V5CT0gbmZzX2ZzY2FjaGVfaW5vZGVfZ2V0X2tleSwKKwkuZ2V0X2F0dHIJPSBuZnNfZnNjYWNoZV9pbm9kZV9nZXRfYXR0ciwKKwkuZ2V0X2F1eAk9IG5mc19mc2NhY2hlX2lub2RlX2dldF9hdXgsCisJLmNoZWNrX2F1eAk9IG5mc19mc2NhY2hlX2lub2RlX2NoZWNrX2F1eCwKKwkubm93X3VuY2FjaGVkCT0gbmZzX2ZzY2FjaGVfaW5vZGVfbm93X3VuY2FjaGVkLAorCS5nZXRfY29udGV4dAk9IG5mc19maF9nZXRfY29udGV4dCwKKwkucHV0X2NvbnRleHQJPSBuZnNfZmhfcHV0X2NvbnRleHQsCit9OwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZzY2FjaGUuYyBiL2ZzL25mcy9mc2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5YmU2NwotLS0gL2Rldi9udWxsCisrKyBiL2ZzL25mcy9mc2NhY2hlLmMKQEAgLTAsMCArMSw1MjMgQEAKKy8qIE5GUyBmaWxlc3lzdGVtIGNhY2hlIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNfZnNfc2IuaD4KKyNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJpb3N0YXQuaCIKKyNpbmNsdWRlICJmc2NhY2hlLmgiCisKKyNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCQlORlNEQkdfRlNDQUNIRQorCitzdGF0aWMgc3RydWN0IHJiX3Jvb3QgbmZzX2ZzY2FjaGVfa2V5cyA9IFJCX1JPT1Q7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5mc19mc2NhY2hlX2tleXNfbG9jayk7CisKKy8qCisgKiBHZXQgdGhlIHBlci1jbGllbnQgaW5kZXggY29va2llIGZvciBhbiBORlMgY2xpZW50IGlmIHRoZSBhcHByb3ByaWF0ZSBtb3VudAorICogZmxhZyB3YXMgc2V0CisgKiAtIFdlIGFsd2F5cyB0cnkgYW5kIGdldCBhbiBpbmRleCBjb29raWUgZm9yIHRoZSBjbGllbnQsIGJ1dCBnZXQgZmlsZWhhbmRsZQorICogICBjb29raWVzIG9uIGEgcGVyLXN1cGVyYmxvY2sgYmFzaXMsIGRlcGVuZGluZyBvbiB0aGUgbW91bnQgZmxhZ3MKKyAqLwordm9pZCBuZnNfZnNjYWNoZV9nZXRfY2xpZW50X2Nvb2tpZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworCS8qIGNyZWF0ZSBhIGNhY2hlIGluZGV4IGZvciBsb29raW5nIHVwIGZpbGVoYW5kbGVzICovCisJY2xwLT5mc2NhY2hlID0gZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZShuZnNfZnNjYWNoZV9uZXRmcy5wcmltYXJ5X2luZGV4LAorCQkJCQkgICAgICAmbmZzX2ZzY2FjaGVfc2VydmVyX2luZGV4X2RlZiwKKwkJCQkJICAgICAgY2xwKTsKKwlkZnByaW50ayhGU0NBQ0hFLCAiTkZTOiBnZXQgY2xpZW50IGNvb2tpZSAoMHglcC8weCVwKVxuIiwKKwkJIGNscCwgY2xwLT5mc2NhY2hlKTsKK30KKworLyoKKyAqIERpc3Bvc2Ugb2YgYSBwZXItY2xpZW50IGNvb2tpZQorICovCit2b2lkIG5mc19mc2NhY2hlX3JlbGVhc2VfY2xpZW50X2Nvb2tpZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworCWRmcHJpbnRrKEZTQ0FDSEUsICJORlM6IHJlbGVhc2luZyBjbGllbnQgY29va2llICgweCVwLzB4JXApXG4iLAorCQkgY2xwLCBjbHAtPmZzY2FjaGUpOworCisJZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZShjbHAtPmZzY2FjaGUsIDApOworCWNscC0+ZnNjYWNoZSA9IE5VTEw7Cit9CisKKy8qCisgKiBHZXQgdGhlIGNhY2hlIGNvb2tpZSBmb3IgYW4gTkZTIHN1cGVyYmxvY2suICBXZSBoYXZlIHRvIGhhbmRsZQorICogdW5pcXVpZmljYXRpb24gaGVyZSBiZWNhdXNlIHRoZSBjYWNoZSBkb2Vzbid0IGRvIGl0IGZvciB1cy4KKyAqLwordm9pZCBuZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICBzdHJ1Y3QgbmZzX3BhcnNlZF9tb3VudF9kYXRhICpkYXRhKQoreworCXN0cnVjdCBuZnNfZnNjYWNoZV9rZXkgKmtleSwgKnhrZXk7CisJc3RydWN0IG5mc19zZXJ2ZXIgKm5mc3MgPSBORlNfU0Ioc2IpOworCXN0cnVjdCByYl9ub2RlICoqcCwgKnBhcmVudDsKKwljb25zdCBjaGFyICp1bmlxID0gZGF0YS0+ZnNjYWNoZV91bmlxID86ICIiOworCWludCBkaWZmLCB1bGVuOworCisJdWxlbiA9IHN0cmxlbih1bmlxKTsKKwlrZXkgPSBremFsbG9jKHNpemVvZigqa2V5KSArIHVsZW4sIEdGUF9LRVJORUwpOworCWlmICgha2V5KQorCQlyZXR1cm47CisKKwlrZXktPm5mc19jbGllbnQgPSBuZnNzLT5uZnNfY2xpZW50OworCWtleS0+a2V5LnN1cGVyLnNfZmxhZ3MgPSBzYi0+c19mbGFncyAmIE5GU19NU19NQVNLOworCWtleS0+a2V5Lm5mc19zZXJ2ZXIuZmxhZ3MgPSBuZnNzLT5mbGFnczsKKwlrZXktPmtleS5uZnNfc2VydmVyLnJzaXplID0gbmZzcy0+cnNpemU7CisJa2V5LT5rZXkubmZzX3NlcnZlci53c2l6ZSA9IG5mc3MtPndzaXplOworCWtleS0+a2V5Lm5mc19zZXJ2ZXIuYWNyZWdtaW4gPSBuZnNzLT5hY3JlZ21pbjsKKwlrZXktPmtleS5uZnNfc2VydmVyLmFjcmVnbWF4ID0gbmZzcy0+YWNyZWdtYXg7CisJa2V5LT5rZXkubmZzX3NlcnZlci5hY2Rpcm1pbiA9IG5mc3MtPmFjZGlybWluOworCWtleS0+a2V5Lm5mc19zZXJ2ZXIuYWNkaXJtYXggPSBuZnNzLT5hY2Rpcm1heDsKKwlrZXktPmtleS5uZnNfc2VydmVyLmZzaWQgPSBuZnNzLT5mc2lkOworCWtleS0+a2V5LnJwY19hdXRoLmF1X2ZsYXZvciA9IG5mc3MtPmNsaWVudC0+Y2xfYXV0aC0+YXVfZmxhdm9yOworCisJa2V5LT5rZXkudW5pcV9sZW4gPSB1bGVuOworCW1lbWNweShrZXktPmtleS51bmlxdWlmaWVyLCB1bmlxLCB1bGVuKTsKKworCXNwaW5fbG9jaygmbmZzX2ZzY2FjaGVfa2V5c19sb2NrKTsKKwlwID0gJm5mc19mc2NhY2hlX2tleXMucmJfbm9kZTsKKwlwYXJlbnQgPSBOVUxMOworCXdoaWxlICgqcCkgeworCQlwYXJlbnQgPSAqcDsKKwkJeGtleSA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IG5mc19mc2NhY2hlX2tleSwgbm9kZSk7CisKKwkJaWYgKGtleS0+bmZzX2NsaWVudCA8IHhrZXktPm5mc19jbGllbnQpCisJCQlnb3RvIGdvX2xlZnQ7CisJCWlmIChrZXktPm5mc19jbGllbnQgPiB4a2V5LT5uZnNfY2xpZW50KQorCQkJZ290byBnb19yaWdodDsKKworCQlkaWZmID0gbWVtY21wKCZrZXktPmtleSwgJnhrZXktPmtleSwgc2l6ZW9mKGtleS0+a2V5KSk7CisJCWlmIChkaWZmIDwgMCkKKwkJCWdvdG8gZ29fbGVmdDsKKwkJaWYgKGRpZmYgPiAwKQorCQkJZ290byBnb19yaWdodDsKKworCQlpZiAoa2V5LT5rZXkudW5pcV9sZW4gPT0gMCkKKwkJCWdvdG8gbm9uX3VuaXF1ZTsKKwkJZGlmZiA9IG1lbWNtcChrZXktPmtleS51bmlxdWlmaWVyLAorCQkJICAgICAgeGtleS0+a2V5LnVuaXF1aWZpZXIsCisJCQkgICAgICBrZXktPmtleS51bmlxX2xlbik7CisJCWlmIChkaWZmIDwgMCkKKwkJCWdvdG8gZ29fbGVmdDsKKwkJaWYgKGRpZmYgPiAwKQorCQkJZ290byBnb19yaWdodDsKKwkJZ290byBub25fdW5pcXVlOworCisJZ29fbGVmdDoKKwkJcCA9ICYoKnApLT5yYl9sZWZ0OworCQljb250aW51ZTsKKwlnb19yaWdodDoKKwkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwl9CisKKwlyYl9saW5rX25vZGUoJmtleS0+bm9kZSwgcGFyZW50LCBwKTsKKwlyYl9pbnNlcnRfY29sb3IoJmtleS0+bm9kZSwgJm5mc19mc2NhY2hlX2tleXMpOworCXNwaW5fdW5sb2NrKCZuZnNfZnNjYWNoZV9rZXlzX2xvY2spOworCW5mc3MtPmZzY2FjaGVfa2V5ID0ga2V5OworCisJLyogY3JlYXRlIGEgY2FjaGUgaW5kZXggZm9yIGxvb2tpbmcgdXAgZmlsZWhhbmRsZXMgKi8KKwluZnNzLT5mc2NhY2hlID0gZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZShuZnNzLT5uZnNfY2xpZW50LT5mc2NhY2hlLAorCQkJCQkgICAgICAgJm5mc19mc2NhY2hlX3N1cGVyX2luZGV4X2RlZiwKKwkJCQkJICAgICAgIG5mc3MpOworCWRmcHJpbnRrKEZTQ0FDSEUsICJORlM6IGdldCBzdXBlcmJsb2NrIGNvb2tpZSAoMHglcC8weCVwKVxuIiwKKwkJIG5mc3MsIG5mc3MtPmZzY2FjaGUpOworCXJldHVybjsKKworbm9uX3VuaXF1ZToKKwlzcGluX3VubG9jaygmbmZzX2ZzY2FjaGVfa2V5c19sb2NrKTsKKwlrZnJlZShrZXkpOworCW5mc3MtPmZzY2FjaGVfa2V5ID0gTlVMTDsKKwluZnNzLT5mc2NhY2hlID0gTlVMTDsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJORlM6IgorCSAgICAgICAiIENhY2hlIHJlcXVlc3QgZGVuaWVkIGR1ZSB0byBub24tdW5pcXVlIHN1cGVyYmxvY2sga2V5c1xuIik7Cit9CisKKy8qCisgKiByZWxlYXNlIGEgcGVyLXN1cGVyYmxvY2sgY29va2llCisgKi8KK3ZvaWQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcyA9IE5GU19TQihzYik7CisKKwlkZnByaW50ayhGU0NBQ0hFLCAiTkZTOiByZWxlYXNpbmcgc3VwZXJibG9jayBjb29raWUgKDB4JXAvMHglcClcbiIsCisJCSBuZnNzLCBuZnNzLT5mc2NhY2hlKTsKKworCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUobmZzcy0+ZnNjYWNoZSwgMCk7CisJbmZzcy0+ZnNjYWNoZSA9IE5VTEw7CisKKwlpZiAobmZzcy0+ZnNjYWNoZV9rZXkpIHsKKwkJc3Bpbl9sb2NrKCZuZnNfZnNjYWNoZV9rZXlzX2xvY2spOworCQlyYl9lcmFzZSgmbmZzcy0+ZnNjYWNoZV9rZXktPm5vZGUsICZuZnNfZnNjYWNoZV9rZXlzKTsKKwkJc3Bpbl91bmxvY2soJm5mc19mc2NhY2hlX2tleXNfbG9jayk7CisJCWtmcmVlKG5mc3MtPmZzY2FjaGVfa2V5KTsKKwkJbmZzcy0+ZnNjYWNoZV9rZXkgPSBOVUxMOworCX0KK30KKworLyoKKyAqIEluaXRpYWxpc2UgdGhlIHBlci1pbm9kZSBjYWNoZSBjb29raWUgcG9pbnRlciBmb3IgYW4gTkZTIGlub2RlLgorICovCit2b2lkIG5mc19mc2NhY2hlX2luaXRfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJTkZTX0koaW5vZGUpLT5mc2NhY2hlID0gTlVMTDsKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJc2V0X2JpdChORlNfSU5PX0ZTQ0FDSEUsICZORlNfSShpbm9kZSktPmZsYWdzKTsKK30KKworLyoKKyAqIEdldCB0aGUgcGVyLWlub2RlIGNhY2hlIGNvb2tpZSBmb3IgYW4gTkZTIGlub2RlLgorICovCitzdGF0aWMgdm9pZCBuZnNfZnNjYWNoZV9lbmFibGVfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisKKwlpZiAobmZzaS0+ZnNjYWNoZSB8fCAhTkZTX0ZTQ0FDSEUoaW5vZGUpKQorCQlyZXR1cm47CisKKwlpZiAoKE5GU19TQihzYiktPm9wdGlvbnMgJiBORlNfT1BUSU9OX0ZTQ0FDSEUpKSB7CisJCW5mc2ktPmZzY2FjaGUgPSBmc2NhY2hlX2FjcXVpcmVfY29va2llKAorCQkJTkZTX1NCKHNiKS0+ZnNjYWNoZSwKKwkJCSZuZnNfZnNjYWNoZV9pbm9kZV9vYmplY3RfZGVmLAorCQkJbmZzaSk7CisKKwkJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogZ2V0IEZIIGNvb2tpZSAoMHglcC8weCVwLzB4JXApXG4iLAorCQkJIHNiLCBuZnNpLCBuZnNpLT5mc2NhY2hlKTsKKwl9Cit9CisKKy8qCisgKiBSZWxlYXNlIGEgcGVyLWlub2RlIGNvb2tpZS4KKyAqLwordm9pZCBuZnNfZnNjYWNoZV9yZWxlYXNlX2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisKKwlkZnByaW50ayhGU0NBQ0hFLCAiTkZTOiBjbGVhciBjb29raWUgKDB4JXAvMHglcClcbiIsCisJCSBuZnNpLCBuZnNpLT5mc2NhY2hlKTsKKworCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUobmZzaS0+ZnNjYWNoZSwgMCk7CisJbmZzaS0+ZnNjYWNoZSA9IE5VTEw7Cit9CisKKy8qCisgKiBSZXRpcmUgYSBwZXItaW5vZGUgY29va2llLCBkZXN0cm95aW5nIHRoZSBkYXRhIGF0dGFjaGVkIHRvIGl0LgorICovCit2b2lkIG5mc19mc2NhY2hlX3phcF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCisJZGZwcmludGsoRlNDQUNIRSwgIk5GUzogemFwcGluZyBjb29raWUgKDB4JXAvMHglcClcbiIsCisJCSBuZnNpLCBuZnNpLT5mc2NhY2hlKTsKKworCWZzY2FjaGVfcmVsaW5xdWlzaF9jb29raWUobmZzaS0+ZnNjYWNoZSwgMSk7CisJbmZzaS0+ZnNjYWNoZSA9IE5VTEw7Cit9CisKKy8qCisgKiBUdXJuIG9mZiB0aGUgY2FjaGUgd2l0aCByZWdhcmQgdG8gYSBwZXItaW5vZGUgY29va2llIGlmIG9wZW5lZCBmb3Igd3JpdGluZywKKyAqIGludmFsaWRhdGluZyBhbGwgdGhlIHBhZ2VzIGluIHRoZSBwYWdlIGNhY2hlIHJlbGF0aW5nIHRvIHRoZSBhc3NvY2lhdGVkCisgKiBpbm9kZSB0byBjbGVhciB0aGUgcGVyLXBhZ2UgY2FjaGluZy4KKyAqLworc3RhdGljIHZvaWQgbmZzX2ZzY2FjaGVfZGlzYWJsZV9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwljbGVhcl9iaXQoTkZTX0lOT19GU0NBQ0hFLCAmTkZTX0koaW5vZGUpLT5mbGFncyk7CisKKwlpZiAoTkZTX0koaW5vZGUpLT5mc2NhY2hlKSB7CisJCWRmcHJpbnRrKEZTQ0FDSEUsCisJCQkgIk5GUzogbmZzaSAweCVwIHR1cm5pbmcgY2FjaGUgb2ZmXG4iLCBORlNfSShpbm9kZSkpOworCisJCS8qIE5lZWQgdG8gaW52YWxpZGF0ZSBhbnkgbWFwcGVkIHBhZ2VzIHRoYXQgd2VyZSByZWFkIGluIGJlZm9yZQorCQkgKiB0dXJuaW5nIG9mZiB0aGUgY2FjaGUuCisJCSAqLworCQlpZiAoaW5vZGUtPmlfbWFwcGluZyAmJiBpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzKQorCQkJaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoaW5vZGUtPmlfbWFwcGluZyk7CisKKwkJbmZzX2ZzY2FjaGVfemFwX2lub2RlX2Nvb2tpZShpbm9kZSk7CisJfQorfQorCisvKgorICogd2FpdF9vbl9iaXQoKSBzbGVlcCBmdW5jdGlvbiBmb3IgdW5pbnRlcnJ1cHRpYmxlIHdhaXRpbmcKKyAqLworc3RhdGljIGludCBuZnNfZnNjYWNoZV93YWl0X2JpdCh2b2lkICpmbGFncykKK3sKKwlzY2hlZHVsZSgpOworCXJldHVybiAwOworfQorCisvKgorICogTG9jayBhZ2FpbnN0IHNvbWVvbmUgZWxzZSB0cnlpbmcgdG8gYWxzbyBhY3F1aXJlIG9yIHJlbGlucXVpc2ggYSBjb29raWUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX2lub2RlX2xvY2soc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoTkZTX0lOT19GU0NBQ0hFX0xPQ0ssICZuZnNpLT5mbGFncykpCisJCXdhaXRfb25fYml0KCZuZnNpLT5mbGFncywgTkZTX0lOT19GU0NBQ0hFX0xPQ0ssCisJCQkgICAgbmZzX2ZzY2FjaGVfd2FpdF9iaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKK30KKworLyoKKyAqIFVubG9jayBjb29raWUgbWFuYWdlbWVudCBsb2NrCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV9pbm9kZV91bmxvY2soc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCisJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CisJY2xlYXJfYml0KE5GU19JTk9fRlNDQUNIRV9MT0NLLCAmbmZzaS0+ZmxhZ3MpOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJd2FrZV91cF9iaXQoJm5mc2ktPmZsYWdzLCBORlNfSU5PX0ZTQ0FDSEVfTE9DSyk7Cit9CisKKy8qCisgKiBEZWNpZGUgaWYgd2Ugc2hvdWxkIGVuYWJsZSBvciBkaXNhYmxlIGxvY2FsIGNhY2hpbmcgZm9yIHRoaXMgaW5vZGUuCisgKiAtIEZvciBub3csIHdpdGggTkZTLCBvbmx5IHJlZ3VsYXIgZmlsZXMgdGhhdCBhcmUgb3BlbiByZWFkLW9ubHkgd2lsbCBiZSBhYmxlCisgKiAgIHRvIHVzZSB0aGUgY2FjaGUuCisgKiAtIE1heSBiZSBpbnZva2VkIG11bHRpcGxlIHRpbWVzIGluIHBhcmFsbGVsIGJ5IHBhcmFsbGVsIG5mc19vcGVuKCkgZnVuY3Rpb25zLgorICovCit2b2lkIG5mc19mc2NhY2hlX3NldF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaWYgKE5GU19GU0NBQ0hFKGlub2RlKSkgeworCQluZnNfZnNjYWNoZV9pbm9kZV9sb2NrKGlub2RlKTsKKwkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19BQ0NNT0RFKSAhPSBPX1JET05MWSkKKwkJCW5mc19mc2NhY2hlX2Rpc2FibGVfaW5vZGVfY29va2llKGlub2RlKTsKKwkJZWxzZQorCQkJbmZzX2ZzY2FjaGVfZW5hYmxlX2lub2RlX2Nvb2tpZShpbm9kZSk7CisJCW5mc19mc2NhY2hlX2lub2RlX3VubG9jayhpbm9kZSk7CisJfQorfQorCisvKgorICogUmVwbGFjZSBhIHBlci1pbm9kZSBjb29raWUgZHVlIHRvIHJldmFsaWRhdGlvbiBkZXRlY3RpbmcgYSBmaWxlIGhhdmluZworICogY2hhbmdlZCBvbiB0aGUgc2VydmVyLgorICovCit2b2lkIG5mc19mc2NhY2hlX3Jlc2V0X2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CisJc3RydWN0IG5mc19zZXJ2ZXIgKm5mc3MgPSBORlNfU0VSVkVSKGlub2RlKTsKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKm9sZCA9IG5mc2ktPmZzY2FjaGU7CisKKwluZnNfZnNjYWNoZV9pbm9kZV9sb2NrKGlub2RlKTsKKwlpZiAobmZzaS0+ZnNjYWNoZSkgeworCQkvKiByZXRpcmUgdGhlIGN1cnJlbnQgZnNjYWNoZSBjYWNoZSBhbmQgZ2V0IGEgbmV3IG9uZSAqLworCQlmc2NhY2hlX3JlbGlucXVpc2hfY29va2llKG5mc2ktPmZzY2FjaGUsIDEpOworCisJCW5mc2ktPmZzY2FjaGUgPSBmc2NhY2hlX2FjcXVpcmVfY29va2llKAorCQkJbmZzcy0+bmZzX2NsaWVudC0+ZnNjYWNoZSwKKwkJCSZuZnNfZnNjYWNoZV9pbm9kZV9vYmplY3RfZGVmLAorCQkJbmZzaSk7CisKKwkJZGZwcmludGsoRlNDQUNIRSwKKwkJCSAiTkZTOiByZXZhbGlkYXRpb24gbmV3IGNvb2tpZSAoMHglcC8weCVwLzB4JXAvMHglcClcbiIsCisJCQkgbmZzcywgbmZzaSwgb2xkLCBuZnNpLT5mc2NhY2hlKTsKKwl9CisJbmZzX2ZzY2FjaGVfaW5vZGVfdW5sb2NrKGlub2RlKTsKK30KKworLyoKKyAqIFJlbGVhc2UgdGhlIGNhY2hpbmcgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZSwgaWYgdGhlIHBhZ2UgaXNuJ3QgYnVzeQorICogaW50ZXJhY3Rpbmcgd2l0aCB0aGUgY2FjaGUuCisgKiAtIFJldHVybnMgdHJ1ZSAoY2FuIHJlbGVhc2UgcGFnZSkgb3IgZmFsc2UgKHBhZ2UgYnVzeSkuCisgKi8KK2ludCBuZnNfZnNjYWNoZV9yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCk7CisJc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUgPSBuZnNpLT5mc2NhY2hlOworCisJQlVHX09OKCFjb29raWUpOworCisJaWYgKGZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZShjb29raWUsIHBhZ2UpKSB7CisJCWlmICghKGdmcCAmIF9fR0ZQX1dBSVQpKQorCQkJcmV0dXJuIDA7CisJCWZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKGNvb2tpZSwgcGFnZSk7CisJfQorCisJaWYgKFBhZ2VGc0NhY2hlKHBhZ2UpKSB7CisJCWRmcHJpbnRrKEZTQ0FDSEUsICJORlM6IGZzY2FjaGUgcmVsZWFzZXBhZ2UgKDB4JXAvMHglcC8weCVwKVxuIiwKKwkJCSBjb29raWUsIHBhZ2UsIG5mc2kpOworCisJCWZzY2FjaGVfdW5jYWNoZV9wYWdlKGNvb2tpZSwgcGFnZSk7CisJCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhwYWdlLT5tYXBwaW5nLT5ob3N0LAorCQkJCSAgICAgIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1VOQ0FDSEVELCAxKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFJlbGVhc2UgdGhlIGNhY2hpbmcgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGEgcGFnZSBpZiB1bmRlcmdvaW5nIGNvbXBsZXRlIHBhZ2UKKyAqIGludmFsaWRhdGlvbi4KKyAqLwordm9pZCBfX25mc19mc2NhY2hlX2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCXN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llID0gbmZzaS0+ZnNjYWNoZTsKKworCUJVR19PTighY29va2llKTsKKworCWRmcHJpbnRrKEZTQ0FDSEUsICJORlM6IGZzY2FjaGUgaW52YWxpZGF0ZXBhZ2UgKDB4JXAvMHglcC8weCVwKVxuIiwKKwkJIGNvb2tpZSwgcGFnZSwgbmZzaSk7CisKKwlmc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZShjb29raWUsIHBhZ2UpOworCisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKwlmc2NhY2hlX3VuY2FjaGVfcGFnZShjb29raWUsIHBhZ2UpOworCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhwYWdlLT5tYXBwaW5nLT5ob3N0LAorCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfVU5DQUNIRUQsIDEpOworfQorCisvKgorICogSGFuZGxlIGNvbXBsZXRpb24gb2YgYSBwYWdlIGJlaW5nIHJlYWQgZnJvbSB0aGUgY2FjaGUuCisgKiAtIENhbGxlZCBpbiBwcm9jZXNzIChrZXZlbnRkKSBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZCBuZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlX2NvbXBsZXRlKHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkgICAgICAgdm9pZCAqY29udGV4dCwKKwkJCQkJICAgICAgIGludCBlcnJvcikKK3sKKwlkZnByaW50ayhGU0NBQ0hFLAorCQkgIk5GUzogcmVhZHBhZ2VfZnJvbV9mc2NhY2hlX2NvbXBsZXRlICgweCVwLzB4JXAvJWQpXG4iLAorCQkgcGFnZSwgY29udGV4dCwgZXJyb3IpOworCisJLyogaWYgdGhlIHJlYWQgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsIHdlIGp1c3QgdW5sb2NrIHRoZSBwYWdlIGFuZCBsZXQKKwkgKiB0aGUgVk0gcmVpc3N1ZSB0aGUgcmVhZHBhZ2UgKi8KKwlpZiAoIWVycm9yKSB7CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBuZnNfcmVhZHBhZ2VfYXN5bmMoY29udGV4dCwgcGFnZS0+bWFwcGluZy0+aG9zdCwgcGFnZSk7CisJCWlmIChlcnJvcikKKwkJCXVubG9ja19wYWdlKHBhZ2UpOworCX0KK30KKworLyoKKyAqIFJldHJpZXZlIGEgcGFnZSBmcm9tIGZzY2FjaGUKKyAqLworaW50IF9fbmZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZShzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAorCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWludCByZXQ7CisKKwlkZnByaW50ayhGU0NBQ0hFLAorCQkgIk5GUzogcmVhZHBhZ2VfZnJvbV9mc2NhY2hlKGZzYzolcC9wOiVwKGk6JWx4IGY6JWx4KS8weCVwKVxuIiwKKwkJIE5GU19JKGlub2RlKS0+ZnNjYWNoZSwgcGFnZSwgcGFnZS0+aW5kZXgsIHBhZ2UtPmZsYWdzLCBpbm9kZSk7CisKKwlyZXQgPSBmc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZShORlNfSShpbm9kZSktPmZzY2FjaGUsCisJCQkJCSBwYWdlLAorCQkJCQkgbmZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZV9jb21wbGV0ZSwKKwkJCQkJIGN0eCwKKwkJCQkJIEdGUF9LRVJORUwpOworCisJc3dpdGNoIChyZXQpIHsKKwljYXNlIDA6IC8qIHJlYWQgQklPIHN1Ym1pdHRlZCAocGFnZSBpbiBmc2NhY2hlKSAqLworCQlkZnByaW50ayhGU0NBQ0hFLAorCQkJICJORlM6ICAgIHJlYWRwYWdlX2Zyb21fZnNjYWNoZTogQklPIHN1Ym1pdHRlZFxuIik7CisJCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9PSywgMSk7CisJCXJldHVybiByZXQ7CisKKwljYXNlIC1FTk9CVUZTOiAvKiBpbm9kZSBub3QgaW4gY2FjaGUgKi8KKwljYXNlIC1FTk9EQVRBOiAvKiBwYWdlIG5vdCBpbiBjYWNoZSAqLworCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfRkFJTCwgMSk7CisJCWRmcHJpbnRrKEZTQ0FDSEUsCisJCQkgIk5GUzogICAgcmVhZHBhZ2VfZnJvbV9mc2NhY2hlICVkXG4iLCByZXQpOworCQlyZXR1cm4gMTsKKworCWRlZmF1bHQ6CisJCWRmcHJpbnRrKEZTQ0FDSEUsICJORlM6ICAgIHJlYWRwYWdlX2Zyb21fZnNjYWNoZSAlZFxuIiwgcmV0KTsKKwkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLCBORlNJT1NfRlNDQUNIRV9QQUdFU19SRUFEX0ZBSUwsIDEpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0cmlldmUgYSBzZXQgb2YgcGFnZXMgZnJvbSBmc2NhY2hlCisgKi8KK2ludCBfX25mc19yZWFkcGFnZXNfZnJvbV9mc2NhY2hlKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsCisJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQkgdW5zaWduZWQgKm5yX3BhZ2VzKQoreworCWludCByZXQsIG5wYWdlcyA9ICpucl9wYWdlczsKKworCWRmcHJpbnRrKEZTQ0FDSEUsICJORlM6IG5mc19nZXRwYWdlc19mcm9tX2ZzY2FjaGUgKDB4JXAvJXUvMHglcClcbiIsCisJCSBORlNfSShpbm9kZSktPmZzY2FjaGUsIG5wYWdlcywgaW5vZGUpOworCisJcmV0ID0gZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKE5GU19JKGlub2RlKS0+ZnNjYWNoZSwKKwkJCQkJICBtYXBwaW5nLCBwYWdlcywgbnJfcGFnZXMsCisJCQkJCSAgbmZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZV9jb21wbGV0ZSwKKwkJCQkJICBjdHgsCisJCQkJCSAgbWFwcGluZ19nZnBfbWFzayhtYXBwaW5nKSk7CisJaWYgKCpucl9wYWdlcyA8IG5wYWdlcykKKwkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLCBORlNJT1NfRlNDQUNIRV9QQUdFU19SRUFEX09LLAorCQkJCSAgICAgIG5wYWdlcyk7CisJaWYgKCpucl9wYWdlcyA+IDApCisJCW5mc19hZGRfZnNjYWNoZV9zdGF0cyhpbm9kZSwgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfUkVBRF9GQUlMLAorCQkJCSAgICAgICpucl9wYWdlcyk7CisKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgMDogLyogcmVhZCBzdWJtaXR0ZWQgdG8gdGhlIGNhY2hlIGZvciBhbGwgcGFnZXMgKi8KKwkJQlVHX09OKCFsaXN0X2VtcHR5KHBhZ2VzKSk7CisJCUJVR19PTigqbnJfcGFnZXMgIT0gMCk7CisJCWRmcHJpbnRrKEZTQ0FDSEUsCisJCQkgIk5GUzogbmZzX2dldHBhZ2VzX2Zyb21fZnNjYWNoZTogc3VibWl0dGVkXG4iKTsKKworCQlyZXR1cm4gcmV0OworCisJY2FzZSAtRU5PQlVGUzogLyogc29tZSBwYWdlcyBhcmVuJ3QgY2FjaGVkIGFuZCBjYW4ndCBiZSAqLworCWNhc2UgLUVOT0RBVEE6IC8qIHNvbWUgcGFnZXMgYXJlbid0IGNhY2hlZCAqLworCQlkZnByaW50ayhGU0NBQ0hFLAorCQkJICJORlM6IG5mc19nZXRwYWdlc19mcm9tX2ZzY2FjaGU6IG5vIHBhZ2U6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gMTsKKworCWRlZmF1bHQ6CisJCWRmcHJpbnRrKEZTQ0FDSEUsCisJCQkgIk5GUzogbmZzX2dldHBhZ2VzX2Zyb21fZnNjYWNoZTogcmV0ICAlZFxuIiwgcmV0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU3RvcmUgYSBuZXdseSBmZXRjaGVkIHBhZ2UgaW4gZnNjYWNoZQorICogLSBQR19mc2NhY2hlIG11c3QgYmUgc2V0IG9uIHRoZSBwYWdlCisgKi8KK3ZvaWQgX19uZnNfcmVhZHBhZ2VfdG9fZnNjYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHN5bmMpCit7CisJaW50IHJldDsKKworCWRmcHJpbnRrKEZTQ0FDSEUsCisJCSAiTkZTOiByZWFkcGFnZV90b19mc2NhY2hlKGZzYzolcC9wOiVwKGk6JWx4IGY6JWx4KS8lZClcbiIsCisJCSBORlNfSShpbm9kZSktPmZzY2FjaGUsIHBhZ2UsIHBhZ2UtPmluZGV4LCBwYWdlLT5mbGFncywgc3luYyk7CisKKwlyZXQgPSBmc2NhY2hlX3dyaXRlX3BhZ2UoTkZTX0koaW5vZGUpLT5mc2NhY2hlLCBwYWdlLCBHRlBfS0VSTkVMKTsKKwlkZnByaW50ayhGU0NBQ0hFLAorCQkgIk5GUzogICAgIHJlYWRwYWdlX3RvX2ZzY2FjaGU6IHA6JXAoaTolbHUgZjolbHgpIHJldCAlZFxuIiwKKwkJIHBhZ2UsIHBhZ2UtPmluZGV4LCBwYWdlLT5mbGFncywgcmV0KTsKKworCWlmIChyZXQgIT0gMCkgeworCQlmc2NhY2hlX3VuY2FjaGVfcGFnZShORlNfSShpbm9kZSktPmZzY2FjaGUsIHBhZ2UpOworCQluZnNfYWRkX2ZzY2FjaGVfc3RhdHMoaW5vZGUsCisJCQkJICAgICAgTkZTSU9TX0ZTQ0FDSEVfUEFHRVNfV1JJVFRFTl9GQUlMLCAxKTsKKwkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLCBORlNJT1NfRlNDQUNIRV9QQUdFU19VTkNBQ0hFRCwgMSk7CisJfSBlbHNlIHsKKwkJbmZzX2FkZF9mc2NhY2hlX3N0YXRzKGlub2RlLAorCQkJCSAgICAgIE5GU0lPU19GU0NBQ0hFX1BBR0VTX1dSSVRURU5fT0ssIDEpOworCX0KK30KZGlmZiAtLWdpdCBhL2ZzL25mcy9mc2NhY2hlLmggYi9mcy9uZnMvZnNjYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODA5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9uZnMvZnNjYWNoZS5oCkBAIC0wLDAgKzEsMjIwIEBACisvKiBORlMgZmlsZXN5c3RlbSBjYWNoZSBpbnRlcmZhY2UgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTkZTX0ZTQ0FDSEVfSAorI2RlZmluZSBfTkZTX0ZTQ0FDSEVfSAorCisjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbmZzX21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvbmZzNF9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzY2FjaGUuaD4KKworI2lmZGVmIENPTkZJR19ORlNfRlNDQUNIRQorCisvKgorICogc2V0IG9mIE5GUyBGUy1DYWNoZSBvYmplY3RzIHRoYXQgZm9ybSBhIHN1cGVyYmxvY2sga2V5CisgKi8KK3N0cnVjdCBuZnNfZnNjYWNoZV9rZXkgeworCXN0cnVjdCByYl9ub2RlCQlub2RlOworCXN0cnVjdCBuZnNfY2xpZW50CSpuZnNfY2xpZW50OwkvKiB0aGUgc2VydmVyICovCisKKwkvKiB0aGUgZWxlbWVudHMgb2YgdGhlIHVuaXF1ZSBrZXkgLSBhcyB1c2VkIGJ5IG5mc19jb21wYXJlX3N1cGVyKCkgYW5kCisJICogbmZzX2NvbXBhcmVfbW91bnRfb3B0aW9ucygpIHRvIGRpc3Rpbmd1aXNoIHN1cGVyYmxvY2tzICovCisJc3RydWN0IHsKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGxvbmcJc19mbGFnczsJLyogdmFyaW91cyBmbGFncworCQkJCQkJCSAqICgmIE5GU19NU19NQVNLKSAqLworCQl9IHN1cGVyOworCisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgbmZzX2ZzaWQgZnNpZDsKKwkJCWludAkJZmxhZ3M7CisJCQl1bnNpZ25lZCBpbnQJcnNpemU7CQkvKiByZWFkIHNpemUgKi8KKwkJCXVuc2lnbmVkIGludAl3c2l6ZTsJCS8qIHdyaXRlIHNpemUgKi8KKwkJCXVuc2lnbmVkIGludAlhY3JlZ21pbjsJLyogYXR0ciBjYWNoZSB0aW1lb3V0cyAqLworCQkJdW5zaWduZWQgaW50CWFjcmVnbWF4OworCQkJdW5zaWduZWQgaW50CWFjZGlybWluOworCQkJdW5zaWduZWQgaW50CWFjZGlybWF4OworCQl9IG5mc19zZXJ2ZXI7CisKKwkJc3RydWN0IHsKKwkJCXJwY19hdXRoZmxhdm9yX3QgYXVfZmxhdm9yOworCQl9IHJwY19hdXRoOworCisJCS8qIHVuaXF1aWZpZXIgLSBjYW4gYmUgdXNlZCBpZiBuZnNfc2VydmVyLmZsYWdzIGluY2x1ZGVzCisJCSAqIE5GU19NT1VOVF9VTlNIQVJFRCAgKi8KKwkJdTggdW5pcV9sZW47CisJCWNoYXIgdW5pcXVpZmllclswXTsKKwl9IGtleTsKK307CisKKy8qCisgKiBmc2NhY2hlLWluZGV4LmMKKyAqLworZXh0ZXJuIHN0cnVjdCBmc2NhY2hlX25ldGZzIG5mc19mc2NhY2hlX25ldGZzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYgbmZzX2ZzY2FjaGVfc2VydmVyX2luZGV4X2RlZjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIG5mc19mc2NhY2hlX3N1cGVyX2luZGV4X2RlZjsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmIG5mc19mc2NhY2hlX2lub2RlX29iamVjdF9kZWY7CisKK2V4dGVybiBpbnQgbmZzX2ZzY2FjaGVfcmVnaXN0ZXIodm9pZCk7CitleHRlcm4gdm9pZCBuZnNfZnNjYWNoZV91bnJlZ2lzdGVyKHZvaWQpOworCisvKgorICogZnNjYWNoZS5jCisgKi8KK2V4dGVybiB2b2lkIG5mc19mc2NhY2hlX2dldF9jbGllbnRfY29va2llKHN0cnVjdCBuZnNfY2xpZW50ICopOworZXh0ZXJuIHZvaWQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9jbGllbnRfY29va2llKHN0cnVjdCBuZnNfY2xpZW50ICopOworCitleHRlcm4gdm9pZCBuZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKHN0cnVjdCBzdXBlcl9ibG9jayAqLAorCQkJCQkgc3RydWN0IG5mc19wYXJzZWRfbW91bnRfZGF0YSAqKTsKK2V4dGVybiB2b2lkIG5mc19mc2NhY2hlX3JlbGVhc2Vfc3VwZXJfY29va2llKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKKworZXh0ZXJuIHZvaWQgbmZzX2ZzY2FjaGVfaW5pdF9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICopOworZXh0ZXJuIHZvaWQgbmZzX2ZzY2FjaGVfemFwX2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBuZnNfZnNjYWNoZV9zZXRfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKK2V4dGVybiB2b2lkIG5mc19mc2NhY2hlX3Jlc2V0X2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKik7CisKK2V4dGVybiB2b2lkIF9fbmZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBwYWdlICosIHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBpbnQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICosIGdmcF90KTsKKworZXh0ZXJuIGludCBfX25mc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGUoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKiwKKwkJCQkgICAgICAgc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICopOworZXh0ZXJuIGludCBfX25mc19yZWFkcGFnZXNfZnJvbV9mc2NhY2hlKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICosCisJCQkJCXN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLAorCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICosIHVuc2lnbmVkICopOworZXh0ZXJuIHZvaWQgX19uZnNfcmVhZHBhZ2VfdG9fZnNjYWNoZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2UgKiwgaW50KTsKKworLyoKKyAqIHdhaXQgZm9yIGEgcGFnZSB0byBjb21wbGV0ZSB3cml0aW5nIHRvIHRoZSBjYWNoZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfd2FpdF9vbl9wYWdlX3dyaXRlKHN0cnVjdCBuZnNfaW5vZGUgKm5mc2ksCisJCQkJCQkgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChQYWdlRnNDYWNoZShwYWdlKSkKKwkJZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUobmZzaS0+ZnNjYWNoZSwgcGFnZSk7Cit9CisKKy8qCisgKiByZWxlYXNlIHRoZSBjYWNoaW5nIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UgaWYgdW5kZXJnb2luZyBjb21wbGV0ZSBwYWdlCisgKiBpbnZhbGlkYXRpb24KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX2ludmFsaWRhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKFBhZ2VGc0NhY2hlKHBhZ2UpKQorCQlfX25mc19mc2NhY2hlX2ludmFsaWRhdGVfcGFnZShwYWdlLCBpbm9kZSk7Cit9CisKKy8qCisgKiBSZXRyaWV2ZSBhIHBhZ2UgZnJvbSBhbiBpbm9kZSBkYXRhIHN0b3JhZ2Ugb2JqZWN0LgorICovCitzdGF0aWMgaW5saW5lIGludCBuZnNfcmVhZHBhZ2VfZnJvbV9mc2NhY2hlKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsCisJCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKE5GU19JKGlub2RlKS0+ZnNjYWNoZSkKKwkJcmV0dXJuIF9fbmZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZShjdHgsIGlub2RlLCBwYWdlKTsKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CisKKy8qCisgKiBSZXRyaWV2ZSBhIHNldCBvZiBwYWdlcyBmcm9tIGFuIGlub2RlIGRhdGEgc3RvcmFnZSBvYmplY3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5mc19yZWFkcGFnZXNfZnJvbV9mc2NhY2hlKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsCisJCQkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQkJICAgICB1bnNpZ25lZCAqbnJfcGFnZXMpCit7CisJaWYgKE5GU19JKGlub2RlKS0+ZnNjYWNoZSkKKwkJcmV0dXJuIF9fbmZzX3JlYWRwYWdlc19mcm9tX2ZzY2FjaGUoY3R4LCBpbm9kZSwgbWFwcGluZywgcGFnZXMsCisJCQkJCQkgICAgbnJfcGFnZXMpOworCXJldHVybiAtRU5PQlVGUzsKK30KKworLyoKKyAqIFN0b3JlIGEgcGFnZSBuZXdseSBmZXRjaGVkIGZyb20gdGhlIHNlcnZlciBpbiBhbiBpbm9kZSBkYXRhIHN0b3JhZ2Ugb2JqZWN0CisgKiBpbiB0aGUgY2FjaGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfcmVhZHBhZ2VfdG9fZnNjYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgaW50IHN5bmMpCit7CisJaWYgKFBhZ2VGc0NhY2hlKHBhZ2UpKQorCQlfX25mc19yZWFkcGFnZV90b19mc2NhY2hlKGlub2RlLCBwYWdlLCBzeW5jKTsKK30KKworLyoKKyAqIGluZGljYXRlIHRoZSBjbGllbnQgY2FjaGluZyBzdGF0ZSBhcyByZWFkYWJsZSB0ZXh0CisgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbmZzX3NlcnZlcl9mc2NhY2hlX3N0YXRlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCit7CisJaWYgKHNlcnZlci0+ZnNjYWNoZSAmJiAoc2VydmVyLT5vcHRpb25zICYgTkZTX09QVElPTl9GU0NBQ0hFKSkKKwkJcmV0dXJuICJ5ZXMiOworCXJldHVybiAibm8gIjsKK30KKworCisjZWxzZSAvKiBDT05GSUdfTkZTX0ZTQ0FDSEUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5mc19mc2NhY2hlX3JlZ2lzdGVyKHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV91bnJlZ2lzdGVyKHZvaWQpIHt9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV9nZXRfY2xpZW50X2Nvb2tpZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX3JlbGVhc2VfY2xpZW50X2Nvb2tpZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKSB7fQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZSgKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCXN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKmRhdGEpCit7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikge30KKworc3RhdGljIGlubGluZSB2b2lkIG5mc19mc2NhY2hlX2luaXRfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfcmVsZWFzZV9pbm9kZV9jb29raWUoc3RydWN0IGlub2RlICppbm9kZSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV96YXBfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfc2V0X2lub2RlX2Nvb2tpZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkJc3RydWN0IGZpbGUgKmZpbHApIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfcmVzZXRfaW5vZGVfY29va2llKHN0cnVjdCBpbm9kZSAqaW5vZGUpIHt9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5mc19mc2NhY2hlX3JlbGVhc2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwKQoreworCXJldHVybiAxOyAvKiBUcnVlOiBtYXkgcmVsZWFzZSBwYWdlICovCit9CitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2ZzY2FjaGVfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCQkgICAgICAgc3RydWN0IGlub2RlICppbm9kZSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUoc3RydWN0IG5mc19pbm9kZSAqbmZzaSwKKwkJCQkJCSAgc3RydWN0IHBhZ2UgKnBhZ2UpIHt9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5mc19yZWFkcGFnZV9mcm9tX2ZzY2FjaGUoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKKwkJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CitzdGF0aWMgaW5saW5lIGludCBuZnNfcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZShzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAorCQkJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsCisJCQkJCSAgICAgdW5zaWduZWQgKm5yX3BhZ2VzKQoreworCXJldHVybiAtRU5PQlVGUzsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfcmVhZHBhZ2VfdG9fZnNjYWNoZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHN5bmMpIHt9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqbmZzX3NlcnZlcl9mc2NhY2hlX3N0YXRlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpCit7CisJcmV0dXJuICJubyAiOworfQorCisjZW5kaWYgLyogQ09ORklHX05GU19GU0NBQ0hFICovCisjZW5kaWYgLyogX05GU19GU0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL25mcy9nZXRyb290LmMgYi9mcy9uZnMvZ2V0cm9vdC5jCmluZGV4IGI3YzliMmQuLjQ2MTc3Y2IgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9nZXRyb290LmMKKysrIGIvZnMvbmZzL2dldHJvb3QuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGZhdHRyLnR5cGUgIT0gTkZESVIpIHsKKwlpZiAoIVNfSVNESVIoZmF0dHIubW9kZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJuZnM0X2dldF9yb290OiIKIAkJICAgICAgICIgZ2V0cm9vdCBlbmNvdW50ZXJlZCBub24tZGlyZWN0b3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9URElSOwpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKGZhdHRyLnR5cGUgIT0gTkZESVIpIHsKKwlpZiAoIVNfSVNESVIoZmF0dHIubW9kZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJuZnM0X2dldF9yb290OiIKIAkJICAgICAgICIgbG9va3VwZmggZW5jb3VudGVyZWQgbm9uLWRpcmVjdG9yeVxuIik7CiAJCXJldHVybiAtRU5PVERJUjsKZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggMGMzODE2OC4uNjRmODcxOTRkIDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgImRlbGVnYXRpb24uaCIKICNpbmNsdWRlICJpb3N0YXQuaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImZzY2FjaGUuaCIKIAogI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19WRlMKIApAQCAtNjYsNiArNjcsMTggQEAKIH0KIAogLyoqCisgKiBuZnNfd2FpdF9iaXRfa2lsbGFibGUgLSBoZWxwZXIgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBzbGVlcGluZyBvbiBiaXQgbG9ja3MKKyAqIEB3b3JkOiBsb25nIHdvcmQgY29udGFpbmluZyB0aGUgYml0IGxvY2sKKyAqLworaW50IG5mc193YWl0X2JpdF9raWxsYWJsZSh2b2lkICp3b3JkKQoreworCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlzY2hlZHVsZSgpOworCXJldHVybiAwOworfQorCisvKioKICAqIG5mc19jb21wYXRfdXNlcl9pbm82NCAtIHJldHVybnMgdGhlIHVzZXItdmlzaWJsZSBpbm9kZSBudW1iZXIKICAqIEBmaWxlaWQ6IDY0LWJpdCBmaWxlaWQKICAqCkBAIC0xMDksNiArMTIyLDcgQEAKIAlCVUdfT04oIWxpc3RfZW1wdHkoJk5GU19JKGlub2RlKS0+b3Blbl9maWxlcykpOwogCW5mc196YXBfYWNsX2NhY2hlKGlub2RlKTsKIAluZnNfYWNjZXNzX3phcF9jYWNoZShpbm9kZSk7CisJbmZzX2ZzY2FjaGVfcmVsZWFzZV9pbm9kZV9jb29raWUoaW5vZGUpOwogfQogCiAvKioKQEAgLTI0OSwxMyArMjYzLDEwIEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IEVSUl9QVFIoLUVOT0VOVCk7CiAJdW5zaWduZWQgbG9uZyBoYXNoOwogCi0JaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUikgPT0gMCkKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0ZJTEVJRCkgPT0gMCkKIAkJZ290byBvdXRfbm9faW5vZGU7Ci0KLQlpZiAoIWZhdHRyLT5ubGluaykgewotCQlwcmludGsoIk5GUzogQnVnZ3kgc2VydmVyIC0gbmxpbmsgPT0gMCFcbiIpOworCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVFlQRSkgPT0gMCkKIAkJZ290byBvdXRfbm9faW5vZGU7Ci0JfQogCiAJaGFzaCA9IG5mc19mYXR0cl90b19pbm9fdChmYXR0cik7CiAKQEAgLTI5MSw3ICszMDIsOCBAQAogCQkJICAgICYmIGZhdHRyLT5zaXplIDw9IE5GU19MSU1JVF9SRUFERElSUExVUykKIAkJCQlzZXRfYml0KE5GU19JTk9fQURWSVNFX1JEUExVUywgJk5GU19JKGlub2RlKS0+ZmxhZ3MpOwogCQkJLyogRGVhbCB3aXRoIGNyb3NzaW5nIG1vdW50cG9pbnRzICovCi0JCQlpZiAoIW5mc19mc2lkX2VxdWFsKCZORlNfU0Ioc2IpLT5mc2lkLCAmZmF0dHItPmZzaWQpKSB7CisJCQlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0ZTSUQpCisJCQkJCSYmICFuZnNfZnNpZF9lcXVhbCgmTkZTX1NCKHNiKS0+ZnNpZCwgJmZhdHRyLT5mc2lkKSkgewogCQkJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9WNF9SRUZFUlJBTCkKIAkJCQkJaW5vZGUtPmlfb3AgPSAmbmZzX3JlZmVycmFsX2lub2RlX29wZXJhdGlvbnM7CiAJCQkJZWxzZQpAQCAtMzA0LDMwICszMTYsNDkgQEAKIAkJZWxzZQogCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCBmYXR0ci0+cmRldik7CiAKKwkJbWVtc2V0KCZpbm9kZS0+aV9hdGltZSwgMCwgc2l6ZW9mKGlub2RlLT5pX2F0aW1lKSk7CisJCW1lbXNldCgmaW5vZGUtPmlfbXRpbWUsIDAsIHNpemVvZihpbm9kZS0+aV9tdGltZSkpOworCQltZW1zZXQoJmlub2RlLT5pX2N0aW1lLCAwLCBzaXplb2YoaW5vZGUtPmlfY3RpbWUpKTsKKwkJbmZzaS0+Y2hhbmdlX2F0dHIgPSAwOworCQlpbm9kZS0+aV9zaXplID0gMDsKKwkJaW5vZGUtPmlfbmxpbmsgPSAwOworCQlpbm9kZS0+aV91aWQgPSAtMjsKKwkJaW5vZGUtPmlfZ2lkID0gLTI7CisJCWlub2RlLT5pX2Jsb2NrcyA9IDA7CisJCW1lbXNldChuZnNpLT5jb29raWV2ZXJmLCAwLCBzaXplb2YobmZzaS0+Y29va2lldmVyZikpOworCiAJCW5mc2ktPnJlYWRfY2FjaGVfamlmZmllcyA9IGZhdHRyLT50aW1lX3N0YXJ0OwogCQluZnNpLT5hdHRyX2dlbmNvdW50ID0gZmF0dHItPmdlbmNvdW50OwotCQlpbm9kZS0+aV9hdGltZSA9IGZhdHRyLT5hdGltZTsKLQkJaW5vZGUtPmlfbXRpbWUgPSBmYXR0ci0+bXRpbWU7Ci0JCWlub2RlLT5pX2N0aW1lID0gZmF0dHItPmN0aW1lOwotCQlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVjQpCisJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9BVElNRSkKKwkJCWlub2RlLT5pX2F0aW1lID0gZmF0dHItPmF0aW1lOworCQlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTVRJTUUpCisJCQlpbm9kZS0+aV9tdGltZSA9IGZhdHRyLT5tdGltZTsKKwkJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NUSU1FKQorCQkJaW5vZGUtPmlfY3RpbWUgPSBmYXR0ci0+Y3RpbWU7CisJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9DSEFOR0UpCiAJCQluZnNpLT5jaGFuZ2VfYXR0ciA9IGZhdHRyLT5jaGFuZ2VfYXR0cjsKLQkJaW5vZGUtPmlfc2l6ZSA9IG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSk7Ci0JCWlub2RlLT5pX25saW5rID0gZmF0dHItPm5saW5rOwotCQlpbm9kZS0+aV91aWQgPSBmYXR0ci0+dWlkOwotCQlpbm9kZS0+aV9naWQgPSBmYXR0ci0+Z2lkOwotCQlpZiAoZmF0dHItPnZhbGlkICYgKE5GU19BVFRSX0ZBVFRSX1YzIHwgTkZTX0FUVFJfRkFUVFJfVjQpKSB7CisJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TSVpFKQorCQkJaW5vZGUtPmlfc2l6ZSA9IG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSk7CisJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9OTElOSykKKwkJCWlub2RlLT5pX25saW5rID0gZmF0dHItPm5saW5rOworCQlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfT1dORVIpCisJCQlpbm9kZS0+aV91aWQgPSBmYXR0ci0+dWlkOworCQlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfR1JPVVApCisJCQlpbm9kZS0+aV9naWQgPSBmYXR0ci0+Z2lkOworCQlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQkxPQ0tTX1VTRUQpCisJCQlpbm9kZS0+aV9ibG9ja3MgPSBmYXR0ci0+ZHUubmZzMi5ibG9ja3M7CisJCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TUEFDRV9VU0VEKSB7CiAJCQkvKgogCQkJICogcmVwb3J0IHRoZSBibG9ja3MgaW4gNTEyYnl0ZSB1bml0cwogCQkJICovCiAJCQlpbm9kZS0+aV9ibG9ja3MgPSBuZnNfY2FsY19ibG9ja19zaXplKGZhdHRyLT5kdS5uZnMzLnVzZWQpOwotCQl9IGVsc2UgewotCQkJaW5vZGUtPmlfYmxvY2tzID0gZmF0dHItPmR1Lm5mczIuYmxvY2tzOwogCQl9CiAJCW5mc2ktPmF0dHJ0aW1lbyA9IE5GU19NSU5BVFRSVElNRU8oaW5vZGUpOwogCQluZnNpLT5hdHRydGltZW9fdGltZXN0YW1wID0gbm93OwotCQltZW1zZXQobmZzaS0+Y29va2lldmVyZiwgMCwgc2l6ZW9mKG5mc2ktPmNvb2tpZXZlcmYpKTsKIAkJbmZzaS0+YWNjZXNzX2NhY2hlID0gUkJfUk9PVDsKIAorCQluZnNfZnNjYWNoZV9pbml0X2lub2RlX2Nvb2tpZShpbm9kZSk7CisKIAkJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CiAJfSBlbHNlCiAJCW5mc19yZWZyZXNoX2lub2RlKGlub2RlLCBmYXR0cik7CkBAIC01MTQsNiArNTQ1LDMyIEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyoqCisgKiBuZnNfY2xvc2VfY29udGV4dCAtIENvbW1vbiBjbG9zZV9jb250ZXh0KCkgcm91dGluZSBORlN2Mi92MworICogQGN0eDogcG9pbnRlciB0byBjb250ZXh0CisgKiBAaXNfc3luYzogaXMgdGhpcyBhIHN5bmNocm9ub3VzIGNsb3NlCisgKgorICogYWx3YXlzIGVuc3VyZSB0aGF0IHRoZSBhdHRyaWJ1dGVzIGFyZSB1cCB0byBkYXRlIGlmIHdlJ3JlIG1vdW50ZWQKKyAqIHdpdGggY2xvc2UtdG8tb3BlbiBzZW1hbnRpY3MKKyAqLwordm9pZCBuZnNfY2xvc2VfY29udGV4dChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LCBpbnQgaXNfc3luYykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7CisKKwlpZiAoIShjdHgtPm1vZGUgJiBGTU9ERV9XUklURSkpCisJCXJldHVybjsKKwlpZiAoIWlzX3N5bmMpCisJCXJldHVybjsKKwlpbm9kZSA9IGN0eC0+cGF0aC5kZW50cnktPmRfaW5vZGU7CisJaWYgKCFsaXN0X2VtcHR5KCZORlNfSShpbm9kZSktPm9wZW5fZmlsZXMpKQorCQlyZXR1cm47CisJc2VydmVyID0gTkZTX1NFUlZFUihpbm9kZSk7CisJaWYgKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRfTk9DVE8pCisJCXJldHVybjsKKwluZnNfcmV2YWxpZGF0ZV9pbm9kZShzZXJ2ZXIsIGlub2RlKTsKK30KKwogc3RhdGljIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICphbGxvY19uZnNfb3Blbl9jb250ZXh0KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBycGNfY3JlZCAqY3JlZCkKIHsKIAlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4OwpAQCAtNTQwLDI0ICs1OTcsMTUgQEAKIAlyZXR1cm4gY3R4OwogfQogCi1zdGF0aWMgdm9pZCBfX3B1dF9uZnNfb3Blbl9jb250ZXh0KHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIGludCB3YWl0KQorc3RhdGljIHZvaWQgX19wdXRfbmZzX29wZW5fY29udGV4dChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LCBpbnQgaXNfc3luYykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjdHgtPnBhdGguZGVudHJ5LT5kX2lub2RlOwogCi0JaWYgKGN0eCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpbm9kZSA9IGN0eC0+cGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKCZjdHgtPmNvdW50LCAmaW5vZGUtPmlfbG9jaykpCiAJCXJldHVybjsKIAlsaXN0X2RlbCgmY3R4LT5saXN0KTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JaWYgKGN0eC0+c3RhdGUgIT0gTlVMTCkgewotCQlpZiAod2FpdCkKLQkJCW5mczRfY2xvc2Vfc3luYygmY3R4LT5wYXRoLCBjdHgtPnN0YXRlLCBjdHgtPm1vZGUpOwotCQllbHNlCi0JCQluZnM0X2Nsb3NlX3N0YXRlKCZjdHgtPnBhdGgsIGN0eC0+c3RhdGUsIGN0eC0+bW9kZSk7Ci0JfQorCU5GU19QUk9UTyhpbm9kZSktPmNsb3NlX2NvbnRleHQoY3R4LCBpc19zeW5jKTsKIAlpZiAoY3R4LT5jcmVkICE9IE5VTEwpCiAJCXB1dF9ycGNjcmVkKGN0eC0+Y3JlZCk7CiAJcGF0aF9wdXQoJmN0eC0+cGF0aCk7CkBAIC02NDIsNiArNjkwLDcgQEAKIAljdHgtPm1vZGUgPSBmaWxwLT5mX21vZGU7CiAJbmZzX2ZpbGVfc2V0X29wZW5fY29udGV4dChmaWxwLCBjdHgpOwogCXB1dF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7CisJbmZzX2ZzY2FjaGVfc2V0X2lub2RlX2Nvb2tpZShpbm9kZSwgZmlscCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY3MCw5ICs3MTksNiBAQAogCWlmIChORlNfU1RBTEUoaW5vZGUpKQogCQlnb3RvIG91dDsKIAotCWlmIChORlNfU1RBTEUoaW5vZGUpKQotCQlnb3RvIG91dDsKLQogCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19JTk9ERVJFVkFMSURBVEUpOwogCXN0YXR1cyA9IE5GU19QUk9UTyhpbm9kZSktPmdldGF0dHIoc2VydmVyLCBORlNfRkgoaW5vZGUpLCAmZmF0dHIpOwogCWlmIChzdGF0dXMgIT0gMCkgewpAQCAtNzQ1LDYgKzc5MSw3IEBACiAJCW1lbXNldChuZnNpLT5jb29raWV2ZXJmLCAwLCBzaXplb2YobmZzaS0+Y29va2lldmVyZikpOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfREFUQUlOVkFMSURBVEUpOworCW5mc19mc2NhY2hlX3Jlc2V0X2lub2RlX2Nvb2tpZShpbm9kZSk7CiAJZGZwcmludGsoUEFHRUNBQ0hFLCAiTkZTOiAoJXMvJUxkKSBkYXRhIGNhY2hlIGludmFsaWRhdGVkXG4iLAogCQkJaW5vZGUtPmlfc2ItPnNfaWQsIChsb25nIGxvbmcpTkZTX0ZJTEVJRChpbm9kZSkpOwogCXJldHVybiAwOwpAQCAtODE1LDI1ICs4NjIsMzEgQEAKIHsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOwogCi0JaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9XQ0NfVjQpICE9IDAgJiYKLQkJCW5mc2ktPmNoYW5nZV9hdHRyID09IGZhdHRyLT5wcmVfY2hhbmdlX2F0dHIpIHsKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRUNIQU5HRSkKKwkJCSYmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9DSEFOR0UpCisJCQkmJiBuZnNpLT5jaGFuZ2VfYXR0ciA9PSBmYXR0ci0+cHJlX2NoYW5nZV9hdHRyKSB7CiAJCW5mc2ktPmNoYW5nZV9hdHRyID0gZmF0dHItPmNoYW5nZV9hdHRyOwogCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9EQVRBOwogCX0KIAkvKiBJZiB3ZSBoYXZlIGF0b21pYyBXQ0MgZGF0YSwgd2UgbWF5IHVwZGF0ZSBzb21lIGF0dHJpYnV0ZXMgKi8KLQlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX1dDQykgIT0gMCkgewotCQlpZiAodGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPnByZV9jdGltZSkpCisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVDVElNRSkKKwkJCSYmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9DVElNRSkKKwkJCSYmIHRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5wcmVfY3RpbWUpKQogCQkJbWVtY3B5KCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5jdGltZSwgc2l6ZW9mKGlub2RlLT5pX2N0aW1lKSk7Ci0JCWlmICh0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+cHJlX210aW1lKSkgeworCisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVNVElNRSkKKwkJCSYmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NVElNRSkKKwkJCSYmIHRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9tdGltZSwgJmZhdHRyLT5wcmVfbXRpbWUpKSB7CiAJCQltZW1jcHkoJmlub2RlLT5pX210aW1lLCAmZmF0dHItPm10aW1lLCBzaXplb2YoaW5vZGUtPmlfbXRpbWUpKTsKIAkJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9EQVRBOwotCQl9Ci0JCWlmIChpX3NpemVfcmVhZChpbm9kZSkgPT0gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5wcmVfc2l6ZSkgJiYKLQkJICAgIG5mc2ktPm5wYWdlcyA9PSAwKQotCQkJaV9zaXplX3dyaXRlKGlub2RlLCBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnNpemUpKTsKIAl9CisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVTSVpFKQorCQkJJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1NJWkUpCisJCQkmJiBpX3NpemVfcmVhZChpbm9kZSkgPT0gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5wcmVfc2l6ZSkKKwkJCSYmIG5mc2ktPm5wYWdlcyA9PSAwKQorCQkJaV9zaXplX3dyaXRlKGlub2RlLCBuZnNfc2l6ZV90b19sb2ZmX3QoZmF0dHItPnNpemUpKTsKIH0KIAogLyoqCkBAIC04NTMsMzUgKzkwNiwzOSBAQAogCiAKIAkvKiBIYXMgdGhlIGlub2RlIGdvbmUgYW5kIGNoYW5nZWQgYmVoaW5kIG91ciBiYWNrPyAqLwotCWlmIChuZnNpLT5maWxlaWQgIT0gZmF0dHItPmZpbGVpZAotCQkJfHwgKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpICE9IChmYXR0ci0+bW9kZSAmIFNfSUZNVCkpIHsKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0ZJTEVJRCkgJiYgbmZzaS0+ZmlsZWlkICE9IGZhdHRyLT5maWxlaWQpCiAJCXJldHVybiAtRUlPOwotCX0KKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1RZUEUpICYmIChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSAhPSAoZmF0dHItPm1vZGUgJiBTX0lGTVQpKQorCQlyZXR1cm4gLUVJTzsKIAotCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVjQpICE9IDAgJiYKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NIQU5HRSkgIT0gMCAmJgogCQkJbmZzaS0+Y2hhbmdlX2F0dHIgIT0gZmF0dHItPmNoYW5nZV9hdHRyKQogCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFOwogCiAJLyogVmVyaWZ5IGEgZmV3IG9mIHRoZSBtb3JlIGltcG9ydGFudCBhdHRyaWJ1dGVzICovCi0JaWYgKCF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+bXRpbWUpKQorCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTVRJTUUpICYmICF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+bXRpbWUpKQogCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFOwogCi0JY3VyX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0gCW5ld19pc2l6ZSA9IG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSk7Ci0JaWYgKGN1cl9zaXplICE9IG5ld19pc2l6ZSAmJiBuZnNpLT5ucGFnZXMgPT0gMCkKLQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX1JFVkFMX1BBR0VDQUNIRTsKKwlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfU0laRSkgeworCQljdXJfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwkJbmV3X2lzaXplID0gbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKTsKKwkJaWYgKGN1cl9zaXplICE9IG5ld19pc2l6ZSAmJiBuZnNpLT5ucGFnZXMgPT0gMCkKKwkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19SRVZBTF9QQUdFQ0FDSEU7CisJfQogCiAJLyogSGF2ZSBhbnkgZmlsZSBwZXJtaXNzaW9ucyBjaGFuZ2VkPyAqLwotCWlmICgoaW5vZGUtPmlfbW9kZSAmIFNfSUFMTFVHTykgIT0gKGZhdHRyLT5tb2RlICYgU19JQUxMVUdPKQotCQkJfHwgaW5vZGUtPmlfdWlkICE9IGZhdHRyLT51aWQKLQkJCXx8IGlub2RlLT5pX2dpZCAhPSBmYXR0ci0+Z2lkKQorCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTU9ERSkgJiYgKGlub2RlLT5pX21vZGUgJiBTX0lBTExVR08pICE9IChmYXR0ci0+bW9kZSAmIFNfSUFMTFVHTykpCisJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFIgfCBORlNfSU5PX0lOVkFMSURfQUNDRVNTIHwgTkZTX0lOT19JTlZBTElEX0FDTDsKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX09XTkVSKSAmJiBpbm9kZS0+aV91aWQgIT0gZmF0dHItPnVpZCkKKwkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUiB8IE5GU19JTk9fSU5WQUxJRF9BQ0NFU1MgfCBORlNfSU5PX0lOVkFMSURfQUNMOworCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfR1JPVVApICYmIGlub2RlLT5pX2dpZCAhPSBmYXR0ci0+Z2lkKQogCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSIHwgTkZTX0lOT19JTlZBTElEX0FDQ0VTUyB8IE5GU19JTk9fSU5WQUxJRF9BQ0w7CiAKIAkvKiBIYXMgdGhlIGxpbmsgY291bnQgY2hhbmdlZD8gKi8KLQlpZiAoaW5vZGUtPmlfbmxpbmsgIT0gZmF0dHItPm5saW5rKQorCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTkxJTkspICYmIGlub2RlLT5pX25saW5rICE9IGZhdHRyLT5ubGluaykKIAkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKIAotCWlmICghdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2F0aW1lLCAmZmF0dHItPmF0aW1lKSkKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0FUSU1FKSAmJiAhdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2F0aW1lLCAmZmF0dHItPmF0aW1lKSkKIAkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRJTUU7CiAKIAlpZiAoaW52YWxpZCAhPSAwKQpAQCAtODkzLDExICs5NTAsMTUgQEAKIAogc3RhdGljIGludCBuZnNfY3RpbWVfbmVlZF91cGRhdGUoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCiB7CisJaWYgKCEoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ1RJTUUpKQorCQlyZXR1cm4gMDsKIAlyZXR1cm4gdGltZXNwZWNfY29tcGFyZSgmZmF0dHItPmN0aW1lLCAmaW5vZGUtPmlfY3RpbWUpID4gMDsKIH0KIAogc3RhdGljIGludCBuZnNfc2l6ZV9uZWVkX3VwZGF0ZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKIHsKKwlpZiAoIShmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TSVpFKSkKKwkJcmV0dXJuIDA7CiAJcmV0dXJuIG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSkgPiBpX3NpemVfcmVhZChpbm9kZSk7CiB9CiAKQEAgLTk3NSw2ICsxMDM2LDcgQEAKIAlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCXN0YXR1cyA9IG5mc19yZWZyZXNoX2lub2RlX2xvY2tlZChpbm9kZSwgZmF0dHIpOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEwMzMsMjAgKzEwOTUsMzEgQEAKIAkvKiBEb24ndCBkbyBhIFdDQyB1cGRhdGUgaWYgdGhlc2UgYXR0cmlidXRlcyBhcmUgYWxyZWFkeSBzdGFsZSAqLwogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFIpID09IDAgfHwKIAkJCSFuZnNfaW5vZGVfYXR0cnNfbmVlZF91cGRhdGUoaW5vZGUsIGZhdHRyKSkgewotCQlmYXR0ci0+dmFsaWQgJj0gfihORlNfQVRUUl9XQ0NfVjR8TkZTX0FUVFJfV0NDKTsKKwkJZmF0dHItPnZhbGlkICY9IH4oTkZTX0FUVFJfRkFUVFJfUFJFQ0hBTkdFCisJCQkJfCBORlNfQVRUUl9GQVRUUl9QUkVTSVpFCisJCQkJfCBORlNfQVRUUl9GQVRUUl9QUkVNVElNRQorCQkJCXwgTkZTX0FUVFJfRkFUVFJfUFJFQ1RJTUUpOwogCQlnb3RvIG91dF9ub2ZvcmNlOwogCX0KLQlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1Y0KSAhPSAwICYmCi0JCQkoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfV0NDX1Y0KSA9PSAwKSB7CisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9DSEFOR0UpICE9IDAgJiYKKwkJCShmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9QUkVDSEFOR0UpID09IDApIHsKIAkJZmF0dHItPnByZV9jaGFuZ2VfYXR0ciA9IE5GU19JKGlub2RlKS0+Y2hhbmdlX2F0dHI7Ci0JCWZhdHRyLT52YWxpZCB8PSBORlNfQVRUUl9XQ0NfVjQ7CisJCWZhdHRyLT52YWxpZCB8PSBORlNfQVRUUl9GQVRUUl9QUkVDSEFOR0U7CiAJfQotCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFIpICE9IDAgJiYKLQkJCShmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9XQ0MpID09IDApIHsKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NUSU1FKSAhPSAwICYmCisJCQkoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFQ1RJTUUpID09IDApIHsKIAkJbWVtY3B5KCZmYXR0ci0+cHJlX2N0aW1lLCAmaW5vZGUtPmlfY3RpbWUsIHNpemVvZihmYXR0ci0+cHJlX2N0aW1lKSk7CisJCWZhdHRyLT52YWxpZCB8PSBORlNfQVRUUl9GQVRUUl9QUkVDVElNRTsKKwl9CisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NVElNRSkgIT0gMCAmJgorCQkJKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRU1USU1FKSA9PSAwKSB7CiAJCW1lbWNweSgmZmF0dHItPnByZV9tdGltZSwgJmlub2RlLT5pX210aW1lLCBzaXplb2YoZmF0dHItPnByZV9tdGltZSkpOworCQlmYXR0ci0+dmFsaWQgfD0gTkZTX0FUVFJfRkFUVFJfUFJFTVRJTUU7CisJfQorCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfU0laRSkgIT0gMCAmJgorCQkJKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRVNJWkUpID09IDApIHsKIAkJZmF0dHItPnByZV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCQlmYXR0ci0+dmFsaWQgfD0gTkZTX0FUVFJfV0NDOworCQlmYXR0ci0+dmFsaWQgfD0gTkZTX0FUVFJfRkFUVFJfUFJFU0laRTsKIAl9CiBvdXRfbm9mb3JjZToKIAlzdGF0dXMgPSBuZnNfcG9zdF9vcF91cGRhdGVfaW5vZGVfbG9ja2VkKGlub2RlLCBmYXR0cik7CkBAIC0xMDc4LDE4ICsxMTUxLDE4IEBACiAJCQlfX2Z1bmNfXywgaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubywKIAkJCWF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCksIGZhdHRyLT52YWxpZCk7CiAKLQlpZiAobmZzaS0+ZmlsZWlkICE9IGZhdHRyLT5maWxlaWQpCisJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9GSUxFSUQpICYmIG5mc2ktPmZpbGVpZCAhPSBmYXR0ci0+ZmlsZWlkKQogCQlnb3RvIG91dF9maWxlaWQ7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSB0aGUgaW5vZGUncyB0eXBlIGhhc24ndCBjaGFuZ2VkLgogCSAqLwotCWlmICgoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgIT0gKGZhdHRyLT5tb2RlICYgU19JRk1UKSkKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1RZUEUpICYmIChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSAhPSAoZmF0dHItPm1vZGUgJiBTX0lGTVQpKQogCQlnb3RvIG91dF9jaGFuZ2VkOwogCiAJc2VydmVyID0gTkZTX1NFUlZFUihpbm9kZSk7CiAJLyogVXBkYXRlIHRoZSBmc2lkPyAqLwotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpICYmCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0ZTSUQpICYmCiAJCQkhbmZzX2ZzaWRfZXF1YWwoJnNlcnZlci0+ZnNpZCwgJmZhdHRyLT5mc2lkKSAmJgogCQkJIXRlc3RfYml0KE5GU19JTk9fTU9VTlRQT0lOVCwgJm5mc2ktPmZsYWdzKSkKIAkJc2VydmVyLT5mc2lkID0gZmF0dHItPmZzaWQ7CkBAIC0xMDk5LDE0ICsxMTcyLDI3IEBACiAJICovCiAJbmZzaS0+cmVhZF9jYWNoZV9qaWZmaWVzID0gZmF0dHItPnRpbWVfc3RhcnQ7CiAKLQluZnNpLT5jYWNoZV92YWxpZGl0eSAmPSB+KE5GU19JTk9fSU5WQUxJRF9BVFRSIHwgTkZTX0lOT19JTlZBTElEX0FUSU1FCi0JCQl8IE5GU19JTk9fUkVWQUxfUEFHRUNBQ0hFKTsKKwlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NIQU5HRSkgfHwgKGZhdHRyLT52YWxpZCAmIChORlNfQVRUUl9GQVRUUl9NVElNRXxORlNfQVRUUl9GQVRUUl9DVElNRSkpKQorCSAgICBuZnNpLT5jYWNoZV92YWxpZGl0eSAmPSB+KE5GU19JTk9fSU5WQUxJRF9BVFRSCisJCSAgICB8IE5GU19JTk9fSU5WQUxJRF9BVElNRQorCQkgICAgfCBORlNfSU5PX1JFVkFMX1BBR0VDQUNIRSk7CiAKIAkvKiBEbyBhdG9taWMgd2VhayBjYWNoZSBjb25zaXN0ZW5jeSB1cGRhdGVzICovCiAJbmZzX3djY191cGRhdGVfaW5vZGUoaW5vZGUsIGZhdHRyKTsKIAogCS8qIE1vcmUgY2FjaGUgY29uc2lzdGVuY3kgY2hlY2tzICovCi0JaWYgKCEoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVjQpKSB7CisJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NIQU5HRSkgeworCQlpZiAobmZzaS0+Y2hhbmdlX2F0dHIgIT0gZmF0dHItPmNoYW5nZV9hdHRyKSB7CisJCQlkcHJpbnRrKCJORlM6IGNoYW5nZV9hdHRyIGNoYW5nZSBvbiBzZXJ2ZXIgZm9yIGZpbGUgJXMvJWxkXG4iLAorCQkJCQlpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vKTsKKwkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0RBVEF8TkZTX0lOT19JTlZBTElEX0FDQ0VTU3xORlNfSU5PX0lOVkFMSURfQUNMOworCQkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCQkJbmZzX2ZvcmNlX2xvb2t1cF9yZXZhbGlkYXRlKGlub2RlKTsKKwkJCW5mc2ktPmNoYW5nZV9hdHRyID0gZmF0dHItPmNoYW5nZV9hdHRyOworCQl9CisJfQorCisJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX01USU1FKSB7CiAJCS8qIE5GU3YyL3YzOiBDaGVjayBpZiB0aGUgbXRpbWUgYWdyZWVzICovCiAJCWlmICghdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX210aW1lLCAmZmF0dHItPm10aW1lKSkgewogCQkJZHByaW50aygiTkZTOiBtdGltZSBjaGFuZ2Ugb24gc2VydmVyIGZvciBmaWxlICVzLyVsZFxuIiwKQEAgLTExMTQsNTkgKzEyMDAsODAgQEAKIAkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0RBVEE7CiAJCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJCQluZnNfZm9yY2VfbG9va3VwX3JldmFsaWRhdGUoaW5vZGUpOworCQkJbWVtY3B5KCZpbm9kZS0+aV9tdGltZSwgJmZhdHRyLT5tdGltZSwgc2l6ZW9mKGlub2RlLT5pX210aW1lKSk7CiAJCX0KKwl9CisJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NUSU1FKSB7CiAJCS8qIElmIGN0aW1lIGhhcyBjaGFuZ2VkIHdlIHNob3VsZCBkZWZpbml0ZWx5IGNsZWFyIGFjY2VzcythY2wgY2FjaGVzICovCi0JCWlmICghdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPmN0aW1lKSkKKwkJaWYgKCF0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+Y3RpbWUpKSB7CiAJCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fSU5WQUxJRF9BQ0NFU1N8TkZTX0lOT19JTlZBTElEX0FDTDsKLQl9IGVsc2UgaWYgKG5mc2ktPmNoYW5nZV9hdHRyICE9IGZhdHRyLT5jaGFuZ2VfYXR0cikgewotCQlkcHJpbnRrKCJORlM6IGNoYW5nZV9hdHRyIGNoYW5nZSBvbiBzZXJ2ZXIgZm9yIGZpbGUgJXMvJWxkXG4iLAotCQkJCWlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8pOwotCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fSU5WQUxJRF9EQVRBfE5GU19JTk9fSU5WQUxJRF9BQ0NFU1N8TkZTX0lOT19JTlZBTElEX0FDTDsKLQkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCi0JCQluZnNfZm9yY2VfbG9va3VwX3JldmFsaWRhdGUoaW5vZGUpOworCQkJLyogYW5kIHByb2JhYmx5IGNsZWFyIGRhdGEgZm9yIGEgZGlyZWN0b3J5IHRvbyBhcyB1dGltZXMgY2FuIGNhdXNlCisJCQkgKiBoYXZvYyB3aXRoIG91ciBjYWNoZS4KKwkJCSAqLworCQkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9EQVRBOworCQkJCW5mc19mb3JjZV9sb29rdXBfcmV2YWxpZGF0ZShpbm9kZSk7CisJCQl9CisJCQltZW1jcHkoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPmN0aW1lLCBzaXplb2YoaW5vZGUtPmlfY3RpbWUpKTsKKwkJfQogCX0KIAogCS8qIENoZWNrIGlmIG91ciBjYWNoZWQgZmlsZSBzaXplIGlzIHN0YWxlICovCi0gCW5ld19pc2l6ZSA9IG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSk7Ci0JY3VyX2lzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCWlmIChuZXdfaXNpemUgIT0gY3VyX2lzaXplKSB7Ci0JCS8qIERvIHdlIHBlcmhhcHMgaGF2ZSBhbnkgb3V0c3RhbmRpbmcgd3JpdGVzLCBvciBoYXMKLQkJICogdGhlIGZpbGUgZ3Jvd24gYmV5b25kIG91ciBsYXN0IHdyaXRlPyAqLwotCQlpZiAobmZzaS0+bnBhZ2VzID09IDAgfHwgbmV3X2lzaXplID4gY3VyX2lzaXplKSB7Ci0JCQlpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19pc2l6ZSk7Ci0JCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fSU5WQUxJRF9EQVRBOworCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TSVpFKSB7CisJCW5ld19pc2l6ZSA9IG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSk7CisJCWN1cl9pc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwkJaWYgKG5ld19pc2l6ZSAhPSBjdXJfaXNpemUpIHsKKwkJCS8qIERvIHdlIHBlcmhhcHMgaGF2ZSBhbnkgb3V0c3RhbmRpbmcgd3JpdGVzLCBvciBoYXMKKwkJCSAqIHRoZSBmaWxlIGdyb3duIGJleW9uZCBvdXIgbGFzdCB3cml0ZT8gKi8KKwkJCWlmIChuZnNpLT5ucGFnZXMgPT0gMCB8fCBuZXdfaXNpemUgPiBjdXJfaXNpemUpIHsKKwkJCQlpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19pc2l6ZSk7CisJCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUnxORlNfSU5PX0lOVkFMSURfREFUQTsKKwkJCX0KKwkJCWRwcmludGsoIk5GUzogaXNpemUgY2hhbmdlIG9uIHNlcnZlciBmb3IgZmlsZSAlcy8lbGRcbiIsCisJCQkJCWlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8pOwogCQl9Ci0JCWRwcmludGsoIk5GUzogaXNpemUgY2hhbmdlIG9uIHNlcnZlciBmb3IgZmlsZSAlcy8lbGRcbiIsCi0JCQkJaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubyk7CiAJfQogCiAKLQltZW1jcHkoJmlub2RlLT5pX210aW1lLCAmZmF0dHItPm10aW1lLCBzaXplb2YoaW5vZGUtPmlfbXRpbWUpKTsKLQltZW1jcHkoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPmN0aW1lLCBzaXplb2YoaW5vZGUtPmlfY3RpbWUpKTsKLQltZW1jcHkoJmlub2RlLT5pX2F0aW1lLCAmZmF0dHItPmF0aW1lLCBzaXplb2YoaW5vZGUtPmlfYXRpbWUpKTsKLQluZnNpLT5jaGFuZ2VfYXR0ciA9IGZhdHRyLT5jaGFuZ2VfYXR0cjsKKwlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQVRJTUUpCisJCW1lbWNweSgmaW5vZGUtPmlfYXRpbWUsICZmYXR0ci0+YXRpbWUsIHNpemVvZihpbm9kZS0+aV9hdGltZSkpOwogCi0JaWYgKChpbm9kZS0+aV9tb2RlICYgU19JQUxMVUdPKSAhPSAoZmF0dHItPm1vZGUgJiBTX0lBTExVR08pIHx8Ci0JICAgIGlub2RlLT5pX3VpZCAhPSBmYXR0ci0+dWlkIHx8Ci0JICAgIGlub2RlLT5pX2dpZCAhPSBmYXR0ci0+Z2lkKQotCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fSU5WQUxJRF9BQ0NFU1N8TkZTX0lOT19JTlZBTElEX0FDTDsKKwlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTU9ERSkgeworCQlpZiAoKGlub2RlLT5pX21vZGUgJiBTX0lBTExVR08pICE9IChmYXR0ci0+bW9kZSAmIFNfSUFMTFVHTykpIHsKKwkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0FDQ0VTU3xORlNfSU5PX0lOVkFMSURfQUNMOworCQkJaW5vZGUtPmlfbW9kZSA9IGZhdHRyLT5tb2RlOworCQl9CisJfQorCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9PV05FUikgeworCQlpZiAoaW5vZGUtPmlfdWlkICE9IGZhdHRyLT51aWQpIHsKKwkJCWludmFsaWQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFJ8TkZTX0lOT19JTlZBTElEX0FDQ0VTU3xORlNfSU5PX0lOVkFMSURfQUNMOworCQkJaW5vZGUtPmlfdWlkID0gZmF0dHItPnVpZDsKKwkJfQorCX0KKwlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfR1JPVVApIHsKKwkJaWYgKGlub2RlLT5pX2dpZCAhPSBmYXR0ci0+Z2lkKSB7CisJCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSfE5GU19JTk9fSU5WQUxJRF9BQ0NFU1N8TkZTX0lOT19JTlZBTElEX0FDTDsKKwkJCWlub2RlLT5pX2dpZCA9IGZhdHRyLT5naWQ7CisJCX0KKwl9CiAKLQlpZiAoaW5vZGUtPmlfbmxpbmsgIT0gZmF0dHItPm5saW5rKQotCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSOworCWlmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9OTElOSykgeworCQlpZiAoaW5vZGUtPmlfbmxpbmsgIT0gZmF0dHItPm5saW5rKSB7CisJCQlpbnZhbGlkIHw9IE5GU19JTk9fSU5WQUxJRF9BVFRSOworCQkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCQkJaW52YWxpZCB8PSBORlNfSU5PX0lOVkFMSURfREFUQTsKKwkJCWlub2RlLT5pX25saW5rID0gZmF0dHItPm5saW5rOworCQl9CisJfQogCi0JaW5vZGUtPmlfbW9kZSA9IGZhdHRyLT5tb2RlOwotCWlub2RlLT5pX25saW5rID0gZmF0dHItPm5saW5rOwotCWlub2RlLT5pX3VpZCA9IGZhdHRyLT51aWQ7Ci0JaW5vZGUtPmlfZ2lkID0gZmF0dHItPmdpZDsKLQotCWlmIChmYXR0ci0+dmFsaWQgJiAoTkZTX0FUVFJfRkFUVFJfVjMgfCBORlNfQVRUUl9GQVRUUl9WNCkpIHsKKwlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfU1BBQ0VfVVNFRCkgewogCQkvKgogCQkgKiByZXBvcnQgdGhlIGJsb2NrcyBpbiA1MTJieXRlIHVuaXRzCiAJCSAqLwogCQlpbm9kZS0+aV9ibG9ja3MgPSBuZnNfY2FsY19ibG9ja19zaXplKGZhdHRyLT5kdS5uZnMzLnVzZWQpOwotIAl9IGVsc2UgewotIAkJaW5vZGUtPmlfYmxvY2tzID0gZmF0dHItPmR1Lm5mczIuYmxvY2tzOwogIAl9CisJaWYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0JMT0NLU19VU0VEKQorCQlpbm9kZS0+aV9ibG9ja3MgPSBmYXR0ci0+ZHUubmZzMi5ibG9ja3M7CiAKIAkvKiBVcGRhdGUgYXR0cnRpbWVvIHZhbHVlIGlmIHdlJ3JlIG91dCBvZiB0aGUgdW5zdGFibGUgcGVyaW9kICovCiAJaWYgKGludmFsaWQgJiBORlNfSU5PX0lOVkFMSURfQVRUUikgewpAQCAtMTI3NCw3ICsxMzgxLDYgQEAKIAlJTklUX0xJU1RfSEVBRCgmbmZzaS0+YWNjZXNzX2NhY2hlX2VudHJ5X2xydSk7CiAJSU5JVF9MSVNUX0hFQUQoJm5mc2ktPmFjY2Vzc19jYWNoZV9pbm9kZV9scnUpOwogCUlOSVRfUkFESVhfVFJFRSgmbmZzaS0+bmZzX3BhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7Ci0JbmZzaS0+bmNvbW1pdCA9IDA7CiAJbmZzaS0+bnBhZ2VzID0gMDsKIAlhdG9taWNfc2V0KCZuZnNpLT5zaWxseV9jb3VudCwgMSk7CiAJSU5JVF9ITElTVF9IRUFEKCZuZnNpLT5zaWxseV9saXN0KTsKQEAgLTEzMzcsNiArMTQ0MywxMCBAQAogewogCWludCBlcnI7CiAKKwllcnIgPSBuZnNfZnNjYWNoZV9yZWdpc3RlcigpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dDc7CisKIAllcnIgPSBuZnNpb2Rfc3RhcnQoKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDY7CkBAIC0xMzg5LDYgKzE0OTksOCBAQAogb3V0NToKIAluZnNpb2Rfc3RvcCgpOwogb3V0NjoKKwluZnNfZnNjYWNoZV91bnJlZ2lzdGVyKCk7CitvdXQ3OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEzOTksNiArMTUxMSw3IEBACiAJbmZzX2Rlc3Ryb3lfcmVhZHBhZ2VjYWNoZSgpOwogCW5mc19kZXN0cm95X2lub2RlY2FjaGUoKTsKIAluZnNfZGVzdHJveV9uZnNwYWdlY2FjaGUoKTsKKwluZnNfZnNjYWNoZV91bnJlZ2lzdGVyKCk7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAlycGNfcHJvY191bnJlZ2lzdGVyKCJuZnMiKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ludGVybmFsLmggYi9mcy9uZnMvaW50ZXJuYWwuaAppbmRleCAzNDBlZGU4Li5lNGQ2YTgzIDEwMDY0NAotLS0gYS9mcy9uZnMvaW50ZXJuYWwuaAorKysgYi9mcy9uZnMvaW50ZXJuYWwuaApAQCAtNSw2ICs1LDggQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAKKyNkZWZpbmUgTkZTX01TX01BU0sgKE1TX1JET05MWXxNU19OT1NVSUR8TVNfTk9ERVZ8TVNfTk9FWEVDfE1TX1NZTkNIUk9OT1VTKQorCiBzdHJ1Y3QgbmZzX3N0cmluZzsKIAogLyogTWF4aW11bSBudW1iZXIgb2YgcmVhZGFoZWFkIHJlcXVlc3RzCkBAIC0zNywxMCArMzksMTIgQEAKIAlpbnQJCQlhY3JlZ21pbiwgYWNyZWdtYXgsCiAJCQkJYWNkaXJtaW4sIGFjZGlybWF4OwogCWludAkJCW5hbWxlbjsKKwl1bnNpZ25lZCBpbnQJCW9wdGlvbnM7CiAJdW5zaWduZWQgaW50CQlic2l6ZTsKIAl1bnNpZ25lZCBpbnQJCWF1dGhfZmxhdm9yX2xlbjsKIAlycGNfYXV0aGZsYXZvcl90CWF1dGhfZmxhdm9yc1sxXTsKIAljaGFyCQkJKmNsaWVudF9hZGRyZXNzOworCWNoYXIJCQkqZnNjYWNoZV91bmlxOwogCiAJc3RydWN0IHsKIAkJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJYWRkcmVzczsKQEAgLTE1Miw2ICsxNTYsOSBAQAogZXh0ZXJuIHN0cnVjdCBycGNfcHJvY2luZm8gbmZzNF9wcm9jZWR1cmVzW107CiAjZW5kaWYKIAorLyogcHJvYy5jICovCit2b2lkIG5mc19jbG9zZV9jb250ZXh0KHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIGludCBpc19zeW5jKTsKKwogLyogZGlyLmMgKi8KIGV4dGVybiBpbnQgbmZzX2FjY2Vzc19jYWNoZV9zaHJpbmtlcihpbnQgbnJfdG9fc2NhbiwgZ2ZwX3QgZ2ZwX21hc2spOwogCkBAIC0xNjUsNiArMTcyLDcgQEAKIGV4dGVybiB2b2lkIG5mczRfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICopOwogI2VuZGlmCiB2b2lkIG5mc196YXBfYWNsX2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIGludCBuZnNfd2FpdF9iaXRfa2lsbGFibGUodm9pZCAqd29yZCk7CiAKIC8qIHN1cGVyLmMgKi8KIHZvaWQgbmZzX3BhcnNlX2lwX2FkZHJlc3MoY2hhciAqLCBzaXplX3QsIHN0cnVjdCBzb2NrYWRkciAqLCBzaXplX3QgKik7CmRpZmYgLS1naXQgYS9mcy9uZnMvaW9zdGF0LmggYi9mcy9uZnMvaW9zdGF0LmgKaW5kZXggYTM2OTUyOC4uYTJhYjI1MiAxMDA2NDQKLS0tIGEvZnMvbmZzL2lvc3RhdC5oCisrKyBiL2ZzL25mcy9pb3N0YXQuaApAQCAtMTYsNiArMTYsOSBAQAogCiBzdHJ1Y3QgbmZzX2lvc3RhdHMgewogCXVuc2lnbmVkIGxvbmcgbG9uZwlieXRlc1tfX05GU0lPU19CWVRFU01BWF07CisjaWZkZWYgQ09ORklHX05GU19GU0NBQ0hFCisJdW5zaWduZWQgbG9uZyBsb25nCWZzY2FjaGVbX19ORlNJT1NfRlNDQUNIRU1BWF07CisjZW5kaWYKIAl1bnNpZ25lZCBsb25nCQlldmVudHNbX19ORlNJT1NfQ09VTlRTTUFYXTsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCkBAIC01Nyw2ICs2MCwyMSBAQAogCW5mc19hZGRfc2VydmVyX3N0YXRzKE5GU19TRVJWRVIoaW5vZGUpLCBzdGF0LCBhZGRlbmQpOwogfQogCisjaWZkZWYgQ09ORklHX05GU19GU0NBQ0hFCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2FkZF9mc2NhY2hlX3N0YXRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBlbnVtIG5mc19zdGF0X2ZzY2FjaGVjb3VudGVycyBzdGF0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRlbmQpCit7CisJc3RydWN0IG5mc19pb3N0YXRzICppb3N0YXRzOworCWludCBjcHU7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJaW9zdGF0cyA9IHBlcl9jcHVfcHRyKE5GU19TRVJWRVIoaW5vZGUpLT5pb19zdGF0cywgY3B1KTsKKwlpb3N0YXRzLT5mc2NhY2hlW3N0YXRdICs9IGFkZGVuZDsKKwlwdXRfY3B1X25vX3Jlc2NoZWQoKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnNfaW9zdGF0cyAqbmZzX2FsbG9jX2lvc3RhdHModm9pZCkKIHsKIAlyZXR1cm4gYWxsb2NfcGVyY3B1KHN0cnVjdCBuZnNfaW9zdGF0cyk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzMnhkci5jIGIvZnMvbmZzL25mczJ4ZHIuYwppbmRleCAyOGJhYjY3Li5jODYyYzkzIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzMnhkci5jCisrKyBiL2ZzL25mcy9uZnMyeGRyLmMKQEAgLTEyMCw4ICsxMjAsOCBAQAogc3RhdGljIF9fYmUzMiAqCiB4ZHJfZGVjb2RlX2ZhdHRyKF9fYmUzMiAqcCwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCiB7Ci0JdTMyIHJkZXY7Ci0JZmF0dHItPnR5cGUgPSAoZW51bSBuZnNfZnR5cGUpIG50b2hsKCpwKyspOworCXUzMiByZGV2LCB0eXBlOworCXR5cGUgPSBudG9obCgqcCsrKTsKIAlmYXR0ci0+bW9kZSA9IG50b2hsKCpwKyspOwogCWZhdHRyLT5ubGluayA9IG50b2hsKCpwKyspOwogCWZhdHRyLT51aWQgPSBudG9obCgqcCsrKTsKQEAgLTEzNiwxMCArMTM2LDkgQEAKIAlwID0geGRyX2RlY29kZV90aW1lKHAsICZmYXR0ci0+YXRpbWUpOwogCXAgPSB4ZHJfZGVjb2RlX3RpbWUocCwgJmZhdHRyLT5tdGltZSk7CiAJcCA9IHhkcl9kZWNvZGVfdGltZShwLCAmZmF0dHItPmN0aW1lKTsKLQlmYXR0ci0+dmFsaWQgfD0gTkZTX0FUVFJfRkFUVFI7CisJZmF0dHItPnZhbGlkIHw9IE5GU19BVFRSX0ZBVFRSX1YyOwogCWZhdHRyLT5yZGV2ID0gbmV3X2RlY29kZV9kZXYocmRldik7Ci0JaWYgKGZhdHRyLT50eXBlID09IE5GQ0hSICYmIHJkZXYgPT0gTkZTMl9GSUZPX0RFVikgewotCQlmYXR0ci0+dHlwZSA9IE5GRklGTzsKKwlpZiAodHlwZSA9PSBORkNIUiAmJiByZGV2ID09IE5GUzJfRklGT19ERVYpIHsKIAkJZmF0dHItPm1vZGUgPSAoZmF0dHItPm1vZGUgJiB+U19JRk1UKSB8IFNfSUZJRk87CiAJCWZhdHRyLT5yZGV2ID0gMDsKIAl9CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM3Byb2MuYyBiL2ZzL25mcy9uZnMzcHJvYy5jCmluZGV4IGM1NWJlN2EuLmQwY2M1Y2UgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzcHJvYy5jCisrKyBiL2ZzL25mcy9uZnMzcHJvYy5jCkBAIC0zMjgsNyArMzI4LDcgQEAKIAkJZGF0YS0+YXJnLmNyZWF0ZS52ZXJpZmllclsxXSA9IGN1cnJlbnQtPnBpZDsKIAl9CiAKLQlzYXR0ci0+aWFfbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCXNhdHRyLT5pYV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAKIAlmb3IgKDs7KSB7CiAJCXN0YXR1cyA9IG5mczNfZG9fY3JlYXRlKGRpciwgZGVudHJ5LCBkYXRhKTsKQEAgLTUyOCw3ICs1MjgsNyBAQAogCiAJZHByaW50aygiTkZTIGNhbGwgIG1rZGlyICVzXG4iLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAotCXNhdHRyLT5pYV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJc2F0dHItPmlhX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAogCWRhdGEgPSBuZnMzX2FsbG9jX2NyZWF0ZWRhdGEoKTsKIAlpZiAoZGF0YSA9PSBOVUxMKQpAQCAtNjM5LDcgKzYzOSw3IEBACiAJZHByaW50aygiTkZTIGNhbGwgIG1rbm9kICVzICV1OiV1XG4iLCBkZW50cnktPmRfbmFtZS5uYW1lLAogCQkJTUFKT1IocmRldiksIE1JTk9SKHJkZXYpKTsKIAotCXNhdHRyLT5pYV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJc2F0dHItPmlhX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAogCWRhdGEgPSBuZnMzX2FsbG9jX2NyZWF0ZWRhdGEoKTsKIAlpZiAoZGF0YSA9PSBOVUxMKQpAQCAtODM0LDQgKzgzNCw1IEBACiAJLmNvbW1pdF9kb25lCT0gbmZzM19jb21taXRfZG9uZSwKIAkubG9jawkJPSBuZnMzX3Byb2NfbG9jaywKIAkuY2xlYXJfYWNsX2NhY2hlID0gbmZzM19mb3JnZXRfY2FjaGVkX2FjbHMsCisJLmNsb3NlX2NvbnRleHQJPSBuZnNfY2xvc2VfY29udGV4dCwKIH07CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM3hkci5jIGIvZnMvbmZzL25mczN4ZHIuYwppbmRleCA2Y2RlYWNmLi5lNmExOTMyIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzM3hkci5jCisrKyBiL2ZzL25mcy9uZnMzeGRyLmMKQEAgLTkxLDE5ICs5MSwxNSBAQAogLyoKICAqIE1hcCBmaWxlIHR5cGUgdG8gU19JRk1UIGJpdHMKICAqLwotc3RhdGljIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50CW1vZGU7Ci0JdW5zaWduZWQgaW50CW5mczJ0eXBlOwotfSBuZnNfdHlwZTJmbXRbXSA9IHsKLSAgICAgIHsgMCwJCU5GTk9OCX0sCi0gICAgICB7IFNfSUZSRUcsCU5GUkVHCX0sCi0gICAgICB7IFNfSUZESVIsCU5GRElSCX0sCi0gICAgICB7IFNfSUZCTEssCU5GQkxLCX0sCi0gICAgICB7IFNfSUZDSFIsCU5GQ0hSCX0sCi0gICAgICB7IFNfSUZMTkssCU5GTE5LCX0sCi0gICAgICB7IFNfSUZTT0NLLAlORlNPQ0sJfSwKLSAgICAgIHsgU19JRklGTywJTkZGSUZPCX0sCi0gICAgICB7IDAsCQlORkJBRAl9CitzdGF0aWMgY29uc3QgdW1vZGVfdCBuZnNfdHlwZTJmbXRbXSA9IHsKKwlbTkYzQkFEXSA9IDAsCisJW05GM1JFR10gPSBTX0lGUkVHLAorCVtORjNESVJdID0gU19JRkRJUiwKKwlbTkYzQkxLXSA9IFNfSUZCTEssCisJW05GM0NIUl0gPSBTX0lGQ0hSLAorCVtORjNMTktdID0gU19JRkxOSywKKwlbTkYzU09DS10gPSBTX0lGU09DSywKKwlbTkYzRklGT10gPSBTX0lGSUZPLAogfTsKIAogLyoKQEAgLTE0OCwxMyArMTQ0LDEyIEBACiB4ZHJfZGVjb2RlX2ZhdHRyKF9fYmUzMiAqcCwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCiB7CiAJdW5zaWduZWQgaW50CXR5cGUsIG1ham9yLCBtaW5vcjsKLQlpbnQJCWZtb2RlOworCXVtb2RlX3QJCWZtb2RlOwogCiAJdHlwZSA9IG50b2hsKCpwKyspOwotCWlmICh0eXBlID49IE5GM0JBRCkKLQkJdHlwZSA9IE5GM0JBRDsKLQlmbW9kZSA9IG5mc190eXBlMmZtdFt0eXBlXS5tb2RlOwotCWZhdHRyLT50eXBlID0gbmZzX3R5cGUyZm10W3R5cGVdLm5mczJ0eXBlOworCWlmICh0eXBlID4gTkYzRklGTykKKwkJdHlwZSA9IE5GM05PTjsKKwlmbW9kZSA9IG5mc190eXBlMmZtdFt0eXBlXTsKIAlmYXR0ci0+bW9kZSA9IChudG9obCgqcCsrKSAmIH5TX0lGTVQpIHwgZm1vZGU7CiAJZmF0dHItPm5saW5rID0gbnRvaGwoKnArKyk7CiAJZmF0dHItPnVpZCA9IG50b2hsKCpwKyspOwpAQCAtMTc3LDcgKzE3Miw3IEBACiAJcCA9IHhkcl9kZWNvZGVfdGltZTMocCwgJmZhdHRyLT5jdGltZSk7CiAKIAkvKiBVcGRhdGUgdGhlIG1vZGUgYml0cyAqLwotCWZhdHRyLT52YWxpZCB8PSAoTkZTX0FUVFJfRkFUVFIgfCBORlNfQVRUUl9GQVRUUl9WMyk7CisJZmF0dHItPnZhbGlkIHw9IE5GU19BVFRSX0ZBVFRSX1YzOwogCXJldHVybiBwOwogfQogCkBAIC0yMzMsNyArMjI4LDkgQEAKIAlwID0geGRyX2RlY29kZV9oeXBlcihwLCAmZmF0dHItPnByZV9zaXplKTsKIAlwID0geGRyX2RlY29kZV90aW1lMyhwLCAmZmF0dHItPnByZV9tdGltZSk7CiAJcCA9IHhkcl9kZWNvZGVfdGltZTMocCwgJmZhdHRyLT5wcmVfY3RpbWUpOwotCWZhdHRyLT52YWxpZCB8PSBORlNfQVRUUl9XQ0M7CisJZmF0dHItPnZhbGlkIHw9IE5GU19BVFRSX0ZBVFRSX1BSRVNJWkUKKwkJfCBORlNfQVRUUl9GQVRUUl9QUkVNVElNRQorCQl8IE5GU19BVFRSX0ZBVFRSX1BSRUNUSU1FOwogCXJldHVybiBwOwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IDhkZGU4NGIuLmE0ZDI0MjYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC0xOTMsMTQgKzE5Myw2IEBACiAJa3VubWFwX2F0b21pYyhzdGFydCwgS01fVVNFUjApOwogfQogCi1zdGF0aWMgaW50IG5mczRfd2FpdF9iaXRfa2lsbGFibGUodm9pZCAqd29yZCkKLXsKLQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0Jc2NoZWR1bGUoKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBuZnM0X3dhaXRfY2xudF9yZWNvdmVyKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCiB7CiAJaW50IHJlczsKQEAgLTIwOCw3ICsyMDAsNyBAQAogCW1pZ2h0X3NsZWVwKCk7CiAKIAlyZXMgPSB3YWl0X29uX2JpdCgmY2xwLT5jbF9zdGF0ZSwgTkZTNENMTlRfTUFOQUdFUl9SVU5OSU5HLAotCQkJbmZzNF93YWl0X2JpdF9raWxsYWJsZSwgVEFTS19LSUxMQUJMRSk7CisJCQluZnNfd2FpdF9iaXRfa2lsbGFibGUsIFRBU0tfS0lMTEFCTEUpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTE0MzksNyArMTQzMSw3IEBACiAJaWYgKGNhbGxkYXRhLT5hcmcuc2VxaWQgPT0gTlVMTCkKIAkJZ290byBvdXRfZnJlZV9jYWxsZGF0YTsKIAljYWxsZGF0YS0+YXJnLmZtb2RlID0gMDsKLQljYWxsZGF0YS0+YXJnLmJpdG1hc2sgPSBzZXJ2ZXItPmF0dHJfYml0bWFzazsKKwljYWxsZGF0YS0+YXJnLmJpdG1hc2sgPSBzZXJ2ZXItPmNhY2hlX2NvbnNpc3RlbmN5X2JpdG1hc2s7CiAJY2FsbGRhdGEtPnJlcy5mYXR0ciA9ICZjYWxsZGF0YS0+ZmF0dHI7CiAJY2FsbGRhdGEtPnJlcy5zZXFpZCA9IGNhbGxkYXRhLT5hcmcuc2VxaWQ7CiAJY2FsbGRhdGEtPnJlcy5zZXJ2ZXIgPSBzZXJ2ZXI7CkBAIC0xNTA5LDcgKzE1MDEsNyBAQAogCQlhdHRyLmlhX21vZGUgPSBuZC0+aW50ZW50Lm9wZW4uY3JlYXRlX21vZGU7CiAJCWF0dHIuaWFfdmFsaWQgPSBBVFRSX01PREU7CiAJCWlmICghSVNfUE9TSVhBQ0woZGlyKSkKLQkJCWF0dHIuaWFfbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQkJYXR0ci5pYV9tb2RlICY9IH5jdXJyZW50X3VtYXNrKCk7CiAJfSBlbHNlIHsKIAkJYXR0ci5pYV92YWxpZCA9IDA7CiAJCUJVR19PTihuZC0+aW50ZW50Lm9wZW4uZmxhZ3MgJiBPX0NSRUFUKTsKQEAgLTE1ODAsNiArMTU3MiwxNSBAQAogCXJldHVybiAwOwogfQogCit2b2lkIG5mczRfY2xvc2VfY29udGV4dChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LCBpbnQgaXNfc3luYykKK3sKKwlpZiAoY3R4LT5zdGF0ZSA9PSBOVUxMKQorCQlyZXR1cm47CisJaWYgKGlzX3N5bmMpCisJCW5mczRfY2xvc2Vfc3luYygmY3R4LT5wYXRoLCBjdHgtPnN0YXRlLCBjdHgtPm1vZGUpOworCWVsc2UKKwkJbmZzNF9jbG9zZV9zdGF0ZSgmY3R4LT5wYXRoLCBjdHgtPnN0YXRlLCBjdHgtPm1vZGUpOworfQogCiBzdGF0aWMgaW50IF9uZnM0X3NlcnZlcl9jYXBhYmlsaXRpZXMoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IG5mc19maCAqZmhhbmRsZSkKIHsKQEAgLTE2MDAsNiArMTYwMSw5IEBACiAJCQlzZXJ2ZXItPmNhcHMgfD0gTkZTX0NBUF9IQVJETElOS1M7CiAJCWlmIChyZXMuaGFzX3N5bWxpbmtzICE9IDApCiAJCQlzZXJ2ZXItPmNhcHMgfD0gTkZTX0NBUF9TWU1MSU5LUzsKKwkJbWVtY3B5KHNlcnZlci0+Y2FjaGVfY29uc2lzdGVuY3lfYml0bWFzaywgcmVzLmF0dHJfYml0bWFzaywgc2l6ZW9mKHNlcnZlci0+Y2FjaGVfY29uc2lzdGVuY3lfYml0bWFzaykpOworCQlzZXJ2ZXItPmNhY2hlX2NvbnNpc3RlbmN5X2JpdG1hc2tbMF0gJj0gRkFUVFI0X1dPUkQwX0NIQU5HRXxGQVRUUjRfV09SRDBfU0laRTsKKwkJc2VydmVyLT5jYWNoZV9jb25zaXN0ZW5jeV9iaXRtYXNrWzFdICY9IEZBVFRSNF9XT1JEMV9USU1FX01FVEFEQVRBfEZBVFRSNF9XT1JEMV9USU1FX01PRElGWTsKIAkJc2VydmVyLT5hY2xfYml0bWFzayA9IHJlcy5hY2xfYml0bWFzazsKIAl9CiAJcmV0dXJuIHN0YXR1czsKQEAgLTIwNzksNyArMjA4Myw3IEBACiAJc3RydWN0IG5mc19yZW1vdmVhcmdzICphcmdzID0gbXNnLT5ycGNfYXJncDsKIAlzdHJ1Y3QgbmZzX3JlbW92ZXJlcyAqcmVzID0gbXNnLT5ycGNfcmVzcDsKIAotCWFyZ3MtPmJpdG1hc2sgPSBzZXJ2ZXItPmF0dHJfYml0bWFzazsKKwlhcmdzLT5iaXRtYXNrID0gc2VydmVyLT5jYWNoZV9jb25zaXN0ZW5jeV9iaXRtYXNrOwogCXJlcy0+c2VydmVyID0gc2VydmVyOwogCW1zZy0+cnBjX3Byb2MgPSAmbmZzNF9wcm9jZWR1cmVzW05GU1BST0M0X0NMTlRfUkVNT1ZFXTsKIH0KQEAgLTIzMjMsNyArMjMyNyw3IEBACiAJCS5wYWdlcyA9ICZwYWdlLAogCQkucGdiYXNlID0gMCwKIAkJLmNvdW50ID0gY291bnQsCi0JCS5iaXRtYXNrID0gTkZTX1NFUlZFUihkZW50cnktPmRfaW5vZGUpLT5hdHRyX2JpdG1hc2ssCisJCS5iaXRtYXNrID0gTkZTX1NFUlZFUihkZW50cnktPmRfaW5vZGUpLT5jYWNoZV9jb25zaXN0ZW5jeV9iaXRtYXNrLAogCX07CiAJc3RydWN0IG5mczRfcmVhZGRpcl9yZXMgcmVzOwogCXN0cnVjdCBycGNfbWVzc2FnZSBtc2cgPSB7CkBAIC0yNTUyLDcgKzI1NTYsNyBAQAogewogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGRhdGEtPmlub2RlKTsKIAotCWRhdGEtPmFyZ3MuYml0bWFzayA9IHNlcnZlci0+YXR0cl9iaXRtYXNrOworCWRhdGEtPmFyZ3MuYml0bWFzayA9IHNlcnZlci0+Y2FjaGVfY29uc2lzdGVuY3lfYml0bWFzazsKIAlkYXRhLT5yZXMuc2VydmVyID0gc2VydmVyOwogCWRhdGEtPnRpbWVzdGFtcCAgID0gamlmZmllczsKIApAQCAtMjU3NSw3ICsyNTc5LDcgQEAKIHsKIAlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NFUlZFUihkYXRhLT5pbm9kZSk7CiAJCi0JZGF0YS0+YXJncy5iaXRtYXNrID0gc2VydmVyLT5hdHRyX2JpdG1hc2s7CisJZGF0YS0+YXJncy5iaXRtYXNrID0gc2VydmVyLT5jYWNoZV9jb25zaXN0ZW5jeV9iaXRtYXNrOwogCWRhdGEtPnJlcy5zZXJ2ZXIgPSBzZXJ2ZXI7CiAJbXNnLT5ycGNfcHJvYyA9ICZuZnM0X3Byb2NlZHVyZXNbTkZTUFJPQzRfQ0xOVF9DT01NSVRdOwogfQpAQCAtMzY3OCw2ICszNjgyLDE5IEBACiAJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIHZvaWQgbmZzX2ZpeHVwX3JlZmVycmFsX2F0dHJpYnV0ZXMoc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCit7CisJaWYgKCEoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0ZJTEVJRCkgJiYKKwkJKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0ZTSUQpICYmCisJCShmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9WNF9SRUZFUlJBTCkpKQorCQlyZXR1cm47CisKKwlmYXR0ci0+dmFsaWQgfD0gTkZTX0FUVFJfRkFUVFJfVFlQRSB8IE5GU19BVFRSX0ZBVFRSX01PREUgfAorCQlORlNfQVRUUl9GQVRUUl9OTElOSzsKKwlmYXR0ci0+bW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTzsKKwlmYXR0ci0+bmxpbmsgPSAyOworfQorCiBpbnQgbmZzNF9wcm9jX2ZzX2xvY2F0aW9ucyhzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCXN0cnVjdCBuZnM0X2ZzX2xvY2F0aW9ucyAqZnNfbG9jYXRpb25zLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKQEAgLTM3MDQsNiArMzcyMSw3IEBACiAJZnNfbG9jYXRpb25zLT5zZXJ2ZXIgPSBzZXJ2ZXI7CiAJZnNfbG9jYXRpb25zLT5ubG9jYXRpb25zID0gMDsKIAlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlcnZlci0+Y2xpZW50LCAmbXNnLCAwKTsKKwluZnNfZml4dXBfcmVmZXJyYWxfYXR0cmlidXRlcygmZnNfbG9jYXRpb25zLT5mYXR0cik7CiAJZHByaW50aygiJXM6IHJldHVybmVkIHN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMzc2Nyw2ICszNzg1LDcgQEAKIAkuY29tbWl0X2RvbmUJPSBuZnM0X2NvbW1pdF9kb25lLAogCS5sb2NrCQk9IG5mczRfcHJvY19sb2NrLAogCS5jbGVhcl9hY2xfY2FjaGUgPSBuZnM0X3phcF9hY2xfYXR0ciwKKwkuY2xvc2VfY29udGV4dCAgPSBuZnM0X2Nsb3NlX2NvbnRleHQsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRzdGF0ZS5jIGIvZnMvbmZzL25mczRzdGF0ZS5jCmluZGV4IDIwMjJmZTQ3Li4wMjk4ZTkwIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC02Miw4ICs2MiwxNCBAQAogCiBzdGF0aWMgaW50IG5mczRfaW5pdF9jbGllbnQoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IHJwY19jcmVkICpjcmVkKQogewotCWludCBzdGF0dXMgPSBuZnM0X3Byb2Nfc2V0Y2xpZW50aWQoY2xwLCBORlM0X0NBTExCQUNLLAotCQkJbmZzX2NhbGxiYWNrX3RjcHBvcnQsIGNyZWQpOworCXVuc2lnbmVkIHNob3J0IHBvcnQ7CisJaW50IHN0YXR1czsKKworCXBvcnQgPSBuZnNfY2FsbGJhY2tfdGNwcG9ydDsKKwlpZiAoY2xwLT5jbF9hZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikKKwkJcG9ydCA9IG5mc19jYWxsYmFja190Y3Bwb3J0NjsKKworCXN0YXR1cyA9IG5mczRfcHJvY19zZXRjbGllbnRpZChjbHAsIE5GUzRfQ0FMTEJBQ0ssIHBvcnQsIGNyZWQpOwogCWlmIChzdGF0dXMgPT0gMCkKIAkJc3RhdHVzID0gbmZzNF9wcm9jX3NldGNsaWVudGlkX2NvbmZpcm0oY2xwLCBjcmVkKTsKIAlpZiAoc3RhdHVzID09IDApCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCBkMWU0YzhmLi4xNjkwZjBlIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTUyMiwyMCArNTIyLDE3IEBACiAJCQkJIGRlY29kZV9sb29rdXBfbWF4c3ogKyBcCiAJCQkJIGRlY29kZV9mc19sb2NhdGlvbnNfbWF4c3opCiAKLXN0YXRpYyBzdHJ1Y3QgewotCXVuc2lnbmVkIGludAltb2RlOwotCXVuc2lnbmVkIGludAluZnMydHlwZTsKLX0gbmZzX3R5cGUyZm10W10gPSB7Ci0JeyAwLAkJTkZOT04JICAgICB9LAotCXsgU19JRlJFRywJTkZSRUcJICAgICB9LAotCXsgU19JRkRJUiwJTkZESVIJICAgICB9LAotCXsgU19JRkJMSywJTkZCTEsJICAgICB9LAotCXsgU19JRkNIUiwJTkZDSFIJICAgICB9LAotCXsgU19JRkxOSywJTkZMTksJICAgICB9LAotCXsgU19JRlNPQ0ssCU5GU09DSwkgICAgIH0sCi0JeyBTX0lGSUZPLAlORkZJRk8JICAgICB9LAotCXsgMCwJCU5GTk9OCSAgICAgfSwKLQl7IDAsCQlORk5PTgkgICAgIH0sCitzdGF0aWMgY29uc3QgdW1vZGVfdCBuZnNfdHlwZTJmbXRbXSA9IHsKKwlbTkY0QkFEXSA9IDAsCisJW05GNFJFR10gPSBTX0lGUkVHLAorCVtORjRESVJdID0gU19JRkRJUiwKKwlbTkY0QkxLXSA9IFNfSUZCTEssCisJW05GNENIUl0gPSBTX0lGQ0hSLAorCVtORjRMTktdID0gU19JRkxOSywKKwlbTkY0U09DS10gPSBTX0lGU09DSywKKwlbTkY0RklGT10gPSBTX0lGSUZPLAorCVtORjRBVFRSRElSXSA9IDAsCisJW05GNE5BTUVEQVRUUl0gPSAwLAogfTsKIAogc3RydWN0IGNvbXBvdW5kX2hkciB7CkBAIC0yMTYwLDYgKzIxNTcsNyBAQAogc3RhdGljIGludCBkZWNvZGVfYXR0cl90eXBlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQzMl90ICp0eXBlKQogewogCV9fYmUzMiAqcDsKKwlpbnQgcmV0ID0gMDsKIAogCSp0eXBlID0gMDsKIAlpZiAodW5saWtlbHkoYml0bWFwWzBdICYgKEZBVFRSNF9XT1JEMF9UWVBFIC0gMVUpKSkKQEAgLTIxNzIsMTQgKzIxNzAsMTYgQEAKIAkJCXJldHVybiAtRUlPOwogCQl9CiAJCWJpdG1hcFswXSAmPSB+RkFUVFI0X1dPUkQwX1RZUEU7CisJCXJldCA9IE5GU19BVFRSX0ZBVFRSX1RZUEU7CiAJfQotCWRwcmludGsoIiVzOiB0eXBlPTAlb1xuIiwgX19mdW5jX18sIG5mc190eXBlMmZtdFsqdHlwZV0ubmZzMnR5cGUpOwotCXJldHVybiAwOworCWRwcmludGsoIiVzOiB0eXBlPTAlb1xuIiwgX19mdW5jX18sIG5mc190eXBlMmZtdFsqdHlwZV0pOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfY2hhbmdlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQ2NF90ICpjaGFuZ2UpCiB7CiAJX19iZTMyICpwOworCWludCByZXQgPSAwOwogCiAJKmNoYW5nZSA9IDA7CiAJaWYgKHVubGlrZWx5KGJpdG1hcFswXSAmIChGQVRUUjRfV09SRDBfQ0hBTkdFIC0gMVUpKSkKQEAgLTIxODgsMTUgKzIxODgsMTcgQEAKIAkJUkVBRF9CVUYoOCk7CiAJCVJFQUQ2NCgqY2hhbmdlKTsKIAkJYml0bWFwWzBdICY9IH5GQVRUUjRfV09SRDBfQ0hBTkdFOworCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9DSEFOR0U7CiAJfQogCWRwcmludGsoIiVzOiBjaGFuZ2UgYXR0cmlidXRlPSVMdVxuIiwgX19mdW5jX18sCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSpjaGFuZ2UpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfc2l6ZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50NjRfdCAqc2l6ZSkKIHsKIAlfX2JlMzIgKnA7CisJaW50IHJldCA9IDA7CiAKIAkqc2l6ZSA9IDA7CiAJaWYgKHVubGlrZWx5KGJpdG1hcFswXSAmIChGQVRUUjRfV09SRDBfU0laRSAtIDFVKSkpCkBAIC0yMjA1LDkgKzIyMDcsMTAgQEAKIAkJUkVBRF9CVUYoOCk7CiAJCVJFQUQ2NCgqc2l6ZSk7CiAJCWJpdG1hcFswXSAmPSB+RkFUVFI0X1dPUkQwX1NJWkU7CisJCXJldCA9IE5GU19BVFRSX0ZBVFRSX1NJWkU7CiAJfQogCWRwcmludGsoIiVzOiBmaWxlIHNpemU9JUx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykqc2l6ZSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfYXR0cl9saW5rX3N1cHBvcnQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDMyX3QgKnJlcykKQEAgLTIyNDUsNiArMjI0OCw3IEBACiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX2ZzaWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgc3RydWN0IG5mc19mc2lkICpmc2lkKQogewogCV9fYmUzMiAqcDsKKwlpbnQgcmV0ID0gMDsKIAogCWZzaWQtPm1ham9yID0gMDsKIAlmc2lkLT5taW5vciA9IDA7CkBAIC0yMjU1LDExICsyMjU5LDEyIEBACiAJCVJFQUQ2NChmc2lkLT5tYWpvcik7CiAJCVJFQUQ2NChmc2lkLT5taW5vcik7CiAJCWJpdG1hcFswXSAmPSB+RkFUVFI0X1dPUkQwX0ZTSUQ7CisJCXJldCA9IE5GU19BVFRSX0ZBVFRSX0ZTSUQ7CiAJfQogCWRwcmludGsoIiVzOiBmc2lkPSgweCVMeC8weCVMeClcbiIsIF9fZnVuY19fLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylmc2lkLT5tYWpvciwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZnNpZC0+bWlub3IpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfbGVhc2VfdGltZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50MzJfdCAqcmVzKQpAQCAtMjI5Nyw2ICsyMzAyLDcgQEAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfZmlsZWlkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQ2NF90ICpmaWxlaWQpCiB7CiAJX19iZTMyICpwOworCWludCByZXQgPSAwOwogCiAJKmZpbGVpZCA9IDA7CiAJaWYgKHVubGlrZWx5KGJpdG1hcFswXSAmIChGQVRUUjRfV09SRDBfRklMRUlEIC0gMVUpKSkKQEAgLTIzMDUsMTQgKzIzMTEsMTYgQEAKIAkJUkVBRF9CVUYoOCk7CiAJCVJFQUQ2NCgqZmlsZWlkKTsKIAkJYml0bWFwWzBdICY9IH5GQVRUUjRfV09SRDBfRklMRUlEOworCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9GSUxFSUQ7CiAJfQogCWRwcmludGsoIiVzOiBmaWxlaWQ9JUx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykqZmlsZWlkKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX21vdW50ZWRfb25fZmlsZWlkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQ2NF90ICpmaWxlaWQpCiB7CiAJX19iZTMyICpwOworCWludCByZXQgPSAwOwogCiAJKmZpbGVpZCA9IDA7CiAJaWYgKHVubGlrZWx5KGJpdG1hcFsxXSAmIChGQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQgLSAxVSkpKQpAQCAtMjMyMSw5ICsyMzI5LDEwIEBACiAJCVJFQURfQlVGKDgpOwogCQlSRUFENjQoKmZpbGVpZCk7CiAJCWJpdG1hcFsxXSAmPSB+RkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlEOworCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9GSUxFSUQ7CiAJfQogCWRwcmludGsoIiVzOiBmaWxlaWQ9JUx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykqZmlsZWlkKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX2ZpbGVzX2F2YWlsKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQ2NF90ICpyZXMpCkBAIC0yNDc5LDYgKzI0ODgsOCBAQAogCQlpZiAocmVzLT5ubG9jYXRpb25zIDwgTkZTNF9GU19MT0NBVElPTlNfTUFYRU5UUklFUykKIAkJCXJlcy0+bmxvY2F0aW9ucysrOwogCX0KKwlpZiAocmVzLT5ubG9jYXRpb25zICE9IDApCisJCXN0YXR1cyA9IE5GU19BVFRSX0ZBVFRSX1Y0X1JFRkVSUkFMOwogb3V0OgogCWRwcmludGsoIiVzOiBmc19sb2NhdGlvbnMgZG9uZSwgZXJyb3IgPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTI1ODAsMjYgKzI1OTEsMzAgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IGRlY29kZV9hdHRyX21vZGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdWludDMyX3QgKm1vZGUpCitzdGF0aWMgaW50IGRlY29kZV9hdHRyX21vZGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgdW1vZGVfdCAqbW9kZSkKIHsKKwl1aW50MzJfdCB0bXA7CiAJX19iZTMyICpwOworCWludCByZXQgPSAwOwogCiAJKm1vZGUgPSAwOwogCWlmICh1bmxpa2VseShiaXRtYXBbMV0gJiAoRkFUVFI0X1dPUkQxX01PREUgLSAxVSkpKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFsxXSAmIEZBVFRSNF9XT1JEMV9NT0RFKSkgewogCQlSRUFEX0JVRig0KTsKLQkJUkVBRDMyKCptb2RlKTsKLQkJKm1vZGUgJj0gflNfSUZNVDsKKwkJUkVBRDMyKHRtcCk7CisJCSptb2RlID0gdG1wICYgflNfSUZNVDsKIAkJYml0bWFwWzFdICY9IH5GQVRUUjRfV09SRDFfTU9ERTsKKwkJcmV0ID0gTkZTX0FUVFJfRkFUVFJfTU9ERTsKIAl9CiAJZHByaW50aygiJXM6IGZpbGUgbW9kZT0wJW9cbiIsIF9fZnVuY19fLCAodW5zaWduZWQgaW50KSptb2RlKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX25saW5rKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHVpbnQzMl90ICpubGluaykKIHsKIAlfX2JlMzIgKnA7CisJaW50IHJldCA9IDA7CiAKIAkqbmxpbmsgPSAxOwogCWlmICh1bmxpa2VseShiaXRtYXBbMV0gJiAoRkFUVFI0X1dPUkQxX05VTUxJTktTIC0gMVUpKSkKQEAgLTI2MDgsMTUgKzI2MjMsMTcgQEAKIAkJUkVBRF9CVUYoNCk7CiAJCVJFQUQzMigqbmxpbmspOwogCQliaXRtYXBbMV0gJj0gfkZBVFRSNF9XT1JEMV9OVU1MSU5LUzsKKwkJcmV0ID0gTkZTX0FUVFJfRkFUVFJfTkxJTks7CiAJfQogCWRwcmludGsoIiVzOiBubGluaz0ldVxuIiwgX19mdW5jX18sICh1bnNpZ25lZCBpbnQpKm5saW5rKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX293bmVyKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHVpbnQzMl90ICp1aWQpCiB7CiAJdWludDMyX3QgbGVuOwogCV9fYmUzMiAqcDsKKwlpbnQgcmV0ID0gMDsKIAogCSp1aWQgPSAtMjsKIAlpZiAodW5saWtlbHkoYml0bWFwWzFdICYgKEZBVFRSNF9XT1JEMV9PV05FUiAtIDFVKSkpCkBAIC0yNjI2LDcgKzI2NDMsOSBAQAogCQlSRUFEMzIobGVuKTsKIAkJUkVBRF9CVUYobGVuKTsKIAkJaWYgKGxlbiA8IFhEUl9NQVhfTkVUT0JKKSB7Ci0JCQlpZiAobmZzX21hcF9uYW1lX3RvX3VpZChjbHAsIChjaGFyICopcCwgbGVuLCB1aWQpICE9IDApCisJCQlpZiAobmZzX21hcF9uYW1lX3RvX3VpZChjbHAsIChjaGFyICopcCwgbGVuLCB1aWQpID09IDApCisJCQkJcmV0ID0gTkZTX0FUVFJfRkFUVFJfT1dORVI7CisJCQllbHNlCiAJCQkJZHByaW50aygiJXM6IG5mc19tYXBfbmFtZV90b191aWQgZmFpbGVkIVxuIiwKIAkJCQkJCV9fZnVuY19fKTsKIAkJfSBlbHNlCkBAIC0yNjM1LDEzICsyNjU0LDE0IEBACiAJCWJpdG1hcFsxXSAmPSB+RkFUVFI0X1dPUkQxX09XTkVSOwogCX0KIAlkcHJpbnRrKCIlczogdWlkPSVkXG4iLCBfX2Z1bmNfXywgKGludCkqdWlkKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX2dyb3VwKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVpbnQzMl90ICpiaXRtYXAsIHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHVpbnQzMl90ICpnaWQpCiB7CiAJdWludDMyX3QgbGVuOwogCV9fYmUzMiAqcDsKKwlpbnQgcmV0ID0gMDsKIAogCSpnaWQgPSAtMjsKIAlpZiAodW5saWtlbHkoYml0bWFwWzFdICYgKEZBVFRSNF9XT1JEMV9PV05FUl9HUk9VUCAtIDFVKSkpCkBAIC0yNjUxLDcgKzI2NzEsOSBAQAogCQlSRUFEMzIobGVuKTsKIAkJUkVBRF9CVUYobGVuKTsKIAkJaWYgKGxlbiA8IFhEUl9NQVhfTkVUT0JKKSB7Ci0JCQlpZiAobmZzX21hcF9ncm91cF90b19naWQoY2xwLCAoY2hhciAqKXAsIGxlbiwgZ2lkKSAhPSAwKQorCQkJaWYgKG5mc19tYXBfZ3JvdXBfdG9fZ2lkKGNscCwgKGNoYXIgKilwLCBsZW4sIGdpZCkgPT0gMCkKKwkJCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9HUk9VUDsKKwkJCWVsc2UKIAkJCQlkcHJpbnRrKCIlczogbmZzX21hcF9ncm91cF90b19naWQgZmFpbGVkIVxuIiwKIAkJCQkJCV9fZnVuY19fKTsKIAkJfSBlbHNlCkBAIC0yNjYwLDEzICsyNjgyLDE0IEBACiAJCWJpdG1hcFsxXSAmPSB+RkFUVFI0X1dPUkQxX09XTkVSX0dST1VQOwogCX0KIAlkcHJpbnRrKCIlczogZ2lkPSVkXG4iLCBfX2Z1bmNfXywgKGludCkqZ2lkKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRlY29kZV9hdHRyX3JkZXYoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgdWludDMyX3QgKmJpdG1hcCwgZGV2X3QgKnJkZXYpCiB7CiAJdWludDMyX3QgbWFqb3IgPSAwLCBtaW5vciA9IDA7CiAJX19iZTMyICpwOworCWludCByZXQgPSAwOwogCiAJKnJkZXYgPSBNS0RFVigwLDApOwogCWlmICh1bmxpa2VseShiaXRtYXBbMV0gJiAoRkFUVFI0X1dPUkQxX1JBV0RFViAtIDFVKSkpCkBAIC0yNjgxLDkgKzI3MDQsMTAgQEAKIAkJaWYgKE1BSk9SKHRtcCkgPT0gbWFqb3IgJiYgTUlOT1IodG1wKSA9PSBtaW5vcikKIAkJCSpyZGV2ID0gdG1wOwogCQliaXRtYXBbMV0gJj0gfiBGQVRUUjRfV09SRDFfUkFXREVWOworCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9SREVWOwogCX0KIAlkcHJpbnRrKCIlczogcmRldj0oMHgleDoweCV4KVxuIiwgX19mdW5jX18sIG1ham9yLCBtaW5vcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfYXR0cl9zcGFjZV9hdmFpbChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50NjRfdCAqcmVzKQpAQCAtMjc0MCw2ICsyNzY0LDcgQEAKIHN0YXRpYyBpbnQgZGVjb2RlX2F0dHJfc3BhY2VfdXNlZChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1aW50MzJfdCAqYml0bWFwLCB1aW50NjRfdCAqdXNlZCkKIHsKIAlfX2JlMzIgKnA7CisJaW50IHJldCA9IDA7CiAKIAkqdXNlZCA9IDA7CiAJaWYgKHVubGlrZWx5KGJpdG1hcFsxXSAmIChGQVRUUjRfV09SRDFfU1BBQ0VfVVNFRCAtIDFVKSkpCkBAIC0yNzQ4LDEwICsyNzczLDExIEBACiAJCVJFQURfQlVGKDgpOwogCQlSRUFENjQoKnVzZWQpOwogCQliaXRtYXBbMV0gJj0gfkZBVFRSNF9XT1JEMV9TUEFDRV9VU0VEOworCQlyZXQgPSBORlNfQVRUUl9GQVRUUl9TUEFDRV9VU0VEOwogCX0KIAlkcHJpbnRrKCIlczogc3BhY2UgdXNlZD0lTHVcbiIsIF9fZnVuY19fLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykqdXNlZCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBkZWNvZGVfYXR0cl90aW1lKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCB0aW1lc3BlYyAqdGltZSkKQEAgLTI3NzgsNiArMjgwNCw4IEBACiAJCXJldHVybiAtRUlPOwogCWlmIChsaWtlbHkoYml0bWFwWzFdICYgRkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTKSkgewogCQlzdGF0dXMgPSBkZWNvZGVfYXR0cl90aW1lKHhkciwgdGltZSk7CisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCXN0YXR1cyA9IE5GU19BVFRSX0ZBVFRSX0FUSU1FOwogCQliaXRtYXBbMV0gJj0gfkZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTUzsKIAl9CiAJZHByaW50aygiJXM6IGF0aW1lPSVsZFxuIiwgX19mdW5jX18sIChsb25nKXRpbWUtPnR2X3NlYyk7CkBAIC0yNzk0LDYgKzI4MjIsOCBAQAogCQlyZXR1cm4gLUVJTzsKIAlpZiAobGlrZWx5KGJpdG1hcFsxXSAmIEZBVFRSNF9XT1JEMV9USU1FX01FVEFEQVRBKSkgewogCQlzdGF0dXMgPSBkZWNvZGVfYXR0cl90aW1lKHhkciwgdGltZSk7CisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCXN0YXR1cyA9IE5GU19BVFRSX0ZBVFRSX0NUSU1FOwogCQliaXRtYXBbMV0gJj0gfkZBVFRSNF9XT1JEMV9USU1FX01FVEFEQVRBOwogCX0KIAlkcHJpbnRrKCIlczogY3RpbWU9JWxkXG4iLCBfX2Z1bmNfXywgKGxvbmcpdGltZS0+dHZfc2VjKTsKQEAgLTI4MTAsNiArMjg0MCw4IEBACiAJCXJldHVybiAtRUlPOwogCWlmIChsaWtlbHkoYml0bWFwWzFdICYgRkFUVFI0X1dPUkQxX1RJTUVfTU9ESUZZKSkgewogCQlzdGF0dXMgPSBkZWNvZGVfYXR0cl90aW1lKHhkciwgdGltZSk7CisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCXN0YXR1cyA9IE5GU19BVFRSX0ZBVFRSX01USU1FOwogCQliaXRtYXBbMV0gJj0gfkZBVFRSNF9XT1JEMV9USU1FX01PRElGWTsKIAl9CiAJZHByaW50aygiJXM6IG10aW1lPSVsZFxuIiwgX19mdW5jX18sIChsb25nKXRpbWUtPnR2X3NlYyk7CkBAIC0yOTk0LDYzICszMDI2LDExNiBAQAogCXVpbnQzMl90IGF0dHJsZW4sCiAJCSBiaXRtYXBbMl0gPSB7MH0sCiAJCSB0eXBlOwotCWludCBzdGF0dXMsIGZtb2RlID0gMDsKKwlpbnQgc3RhdHVzOworCXVtb2RlX3QgZm1vZGUgPSAwOwogCXVpbnQ2NF90IGZpbGVpZDsKIAotCWlmICgoc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0dFVEFUVFIpKSAhPSAwKQotCQlnb3RvIHhkcl9lcnJvcjsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX2JpdG1hcCh4ZHIsIGJpdG1hcCkpICE9IDApCisJc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHIsIE9QX0dFVEFUVFIpOworCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKIAotCWZhdHRyLT5iaXRtYXBbMF0gPSBiaXRtYXBbMF07Ci0JZmF0dHItPmJpdG1hcFsxXSA9IGJpdG1hcFsxXTsKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9iaXRtYXAoeGRyLCBiaXRtYXApOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIHhkcl9lcnJvcjsKIAotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfbGVuZ3RoKHhkciwgJmF0dHJsZW4sICZzYXZlcCkpICE9IDApCisJc3RhdHVzID0gZGVjb2RlX2F0dHJfbGVuZ3RoKHhkciwgJmF0dHJsZW4sICZzYXZlcCk7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwogCiAKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX3R5cGUoeGRyLCBiaXRtYXAsICZ0eXBlKSkgIT0gMCkKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl90eXBlKHhkciwgYml0bWFwLCAmdHlwZSk7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWZhdHRyLT50eXBlID0gbmZzX3R5cGUyZm10W3R5cGVdLm5mczJ0eXBlOwotCWZtb2RlID0gbmZzX3R5cGUyZm10W3R5cGVdLm1vZGU7CisJZmF0dHItPm1vZGUgPSAwOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlmYXR0ci0+bW9kZSB8PSBuZnNfdHlwZTJmbXRbdHlwZV07CisJCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisJfQogCi0JaWYgKChzdGF0dXMgPSBkZWNvZGVfYXR0cl9jaGFuZ2UoeGRyLCBiaXRtYXAsICZmYXR0ci0+Y2hhbmdlX2F0dHIpKSAhPSAwKQorCXN0YXR1cyA9IGRlY29kZV9hdHRyX2NoYW5nZSh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5jaGFuZ2VfYXR0cik7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfc2l6ZSh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5zaXplKSkgIT0gMCkKKwlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOworCisJc3RhdHVzID0gZGVjb2RlX2F0dHJfc2l6ZSh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5zaXplKTsKKwlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byB4ZHJfZXJyb3I7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfYXR0cl9mc2lkKHhkciwgYml0bWFwLCAmZmF0dHItPmZzaWQpKSAhPSAwKQorCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9mc2lkKHhkciwgYml0bWFwLCAmZmF0dHItPmZzaWQpOworCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX2ZpbGVpZCh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5maWxlaWQpKSAhPSAwKQorCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9maWxlaWQoeGRyLCBiaXRtYXAsICZmYXR0ci0+ZmlsZWlkKTsKKwlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byB4ZHJfZXJyb3I7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfYXR0cl9mc19sb2NhdGlvbnMoeGRyLCBiaXRtYXAsIGNvbnRhaW5lcl9vZihmYXR0ciwKKwlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOworCisJc3RhdHVzID0gZGVjb2RlX2F0dHJfZnNfbG9jYXRpb25zKHhkciwgYml0bWFwLCBjb250YWluZXJfb2YoZmF0dHIsCiAJCQkJCQlzdHJ1Y3QgbmZzNF9mc19sb2NhdGlvbnMsCi0JCQkJCQlmYXR0cikpKSAhPSAwKQorCQkJCQkJZmF0dHIpKTsKKwlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byB4ZHJfZXJyb3I7Ci0JaWYgKChzdGF0dXMgPSBkZWNvZGVfYXR0cl9tb2RlKHhkciwgYml0bWFwLCAmZmF0dHItPm1vZGUpKSAhPSAwKQorCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9tb2RlKHhkciwgYml0bWFwLCAmZm1vZGUpOworCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKLQlmYXR0ci0+bW9kZSB8PSBmbW9kZTsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX25saW5rKHhkciwgYml0bWFwLCAmZmF0dHItPm5saW5rKSkgIT0gMCkKKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJZmF0dHItPm1vZGUgfD0gZm1vZGU7CisJCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisJfQorCisJc3RhdHVzID0gZGVjb2RlX2F0dHJfbmxpbmsoeGRyLCBiaXRtYXAsICZmYXR0ci0+bmxpbmspOworCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX293bmVyKHhkciwgYml0bWFwLCBzZXJ2ZXItPm5mc19jbGllbnQsICZmYXR0ci0+dWlkKSkgIT0gMCkKKwlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOworCisJc3RhdHVzID0gZGVjb2RlX2F0dHJfb3duZXIoeGRyLCBiaXRtYXAsIHNlcnZlci0+bmZzX2NsaWVudCwgJmZhdHRyLT51aWQpOworCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX2dyb3VwKHhkciwgYml0bWFwLCBzZXJ2ZXItPm5mc19jbGllbnQsICZmYXR0ci0+Z2lkKSkgIT0gMCkKKwlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOworCisJc3RhdHVzID0gZGVjb2RlX2F0dHJfZ3JvdXAoeGRyLCBiaXRtYXAsIHNlcnZlci0+bmZzX2NsaWVudCwgJmZhdHRyLT5naWQpOworCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX3JkZXYoeGRyLCBiaXRtYXAsICZmYXR0ci0+cmRldikpICE9IDApCisJZmF0dHItPnZhbGlkIHw9IHN0YXR1czsKKworCXN0YXR1cyA9IGRlY29kZV9hdHRyX3JkZXYoeGRyLCBiaXRtYXAsICZmYXR0ci0+cmRldik7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfc3BhY2VfdXNlZCh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5kdS5uZnMzLnVzZWQpKSAhPSAwKQorCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl9zcGFjZV91c2VkKHhkciwgYml0bWFwLCAmZmF0dHItPmR1Lm5mczMudXNlZCk7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfdGltZV9hY2Nlc3MoeGRyLCBiaXRtYXAsICZmYXR0ci0+YXRpbWUpKSAhPSAwKQorCWZhdHRyLT52YWxpZCB8PSBzdGF0dXM7CisKKwlzdGF0dXMgPSBkZWNvZGVfYXR0cl90aW1lX2FjY2Vzcyh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5hdGltZSk7CisJaWYgKHN0YXR1cyA8IDApCiAJCWdvdG8geGRyX2Vycm9yOwotCWlmICgoc3RhdHVzID0gZGVjb2RlX2F0dHJfdGltZV9tZXRhZGF0YSh4ZHIsIGJpdG1hcCwgJmZhdHRyLT5jdGltZSkpICE9IDApCisJZmF0dHItPnZhbGlkIHw9IHN0YXR1czsKKworCXN0YXR1cyA9IGRlY29kZV9hdHRyX3RpbWVfbWV0YWRhdGEoeGRyLCBiaXRtYXAsICZmYXR0ci0+Y3RpbWUpOworCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX3RpbWVfbW9kaWZ5KHhkciwgYml0bWFwLCAmZmF0dHItPm10aW1lKSkgIT0gMCkKKwlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOworCisJc3RhdHVzID0gZGVjb2RlX2F0dHJfdGltZV9tb2RpZnkoeGRyLCBiaXRtYXAsICZmYXR0ci0+bXRpbWUpOworCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKLQlpZiAoKHN0YXR1cyA9IGRlY29kZV9hdHRyX21vdW50ZWRfb25fZmlsZWlkKHhkciwgYml0bWFwLCAmZmlsZWlkKSkgIT0gMCkKKwlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOworCisJc3RhdHVzID0gZGVjb2RlX2F0dHJfbW91bnRlZF9vbl9maWxlaWQoeGRyLCBiaXRtYXAsICZmaWxlaWQpOworCWlmIChzdGF0dXMgPCAwKQogCQlnb3RvIHhkcl9lcnJvcjsKLQlpZiAoZmF0dHItPmZpbGVpZCA9PSAwICYmIGZpbGVpZCAhPSAwKQorCWlmIChzdGF0dXMgIT0gMCAmJiAhKGZhdHRyLT52YWxpZCAmIHN0YXR1cykpIHsKIAkJZmF0dHItPmZpbGVpZCA9IGZpbGVpZDsKLQlpZiAoKHN0YXR1cyA9IHZlcmlmeV9hdHRyX2xlbih4ZHIsIHNhdmVwLCBhdHRybGVuKSkgPT0gMCkKLQkJZmF0dHItPnZhbGlkID0gTkZTX0FUVFJfRkFUVFIgfCBORlNfQVRUUl9GQVRUUl9WMyB8IE5GU19BVFRSX0ZBVFRSX1Y0OworCQlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOworCX0KKworCXN0YXR1cyA9IHZlcmlmeV9hdHRyX2xlbih4ZHIsIHNhdmVwLCBhdHRybGVuKTsKIHhkcl9lcnJvcjoKIAlkcHJpbnRrKCIlczogeGRyIHJldHVybmVkICVkXG4iLCBfX2Z1bmNfXywgLXN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTQwNzgsOSArNDE2Myw3IEBACiAJc3RhdHVzID0gZGVjb2RlX3NldGF0dHIoJnhkciwgcmVzKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIpOwotCWlmIChzdGF0dXMgPT0gTkZTNEVSUl9ERUxBWSkKLQkJc3RhdHVzID0gMDsKKwlkZWNvZGVfZ2V0ZmF0dHIoJnhkciwgcmVzLT5mYXR0ciwgcmVzLT5zZXJ2ZXIpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvcGFnZWxpc3QuYyBiL2ZzL25mcy9wYWdlbGlzdC5jCmluZGV4IDdmMDc5MjAuLmUyOTc1OTMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wYWdlbGlzdC5jCisrKyBiL2ZzL25mcy9wYWdlbGlzdC5jCkBAIC0xNzYsMTcgKzE3Niw2IEBACiAJa3JlZl9wdXQoJnJlcS0+d2Jfa3JlZiwgbmZzX2ZyZWVfcmVxdWVzdCk7CiB9CiAKLXN0YXRpYyBpbnQgbmZzX3dhaXRfYml0X2tpbGxhYmxlKHZvaWQgKndvcmQpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCXJldCA9IC1FUkVTVEFSVFNZUzsKLQllbHNlCi0JCXNjaGVkdWxlKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQogLyoqCiAgKiBuZnNfd2FpdF9vbl9yZXF1ZXN0IC0gV2FpdCBmb3IgYSByZXF1ZXN0IHRvIGNvbXBsZXRlLgogICogQHJlcTogcmVxdWVzdCB0byB3YWl0IHVwb24uCmRpZmYgLS1naXQgYS9mcy9uZnMvcHJvYy5jIGIvZnMvbmZzL3Byb2MuYwppbmRleCAxOTM0NjUyLi43YmU3MmQ5IDEwMDY0NAotLS0gYS9mcy9uZnMvcHJvYy5jCisrKyBiL2ZzL25mcy9wcm9jLmMKQEAgLTY2Myw0ICs2NjMsNSBAQAogCS5jb21taXRfc2V0dXAJPSBuZnNfcHJvY19jb21taXRfc2V0dXAsCiAJLmxvY2sJCT0gbmZzX3Byb2NfbG9jaywKIAkubG9ja19jaGVja19ib3VuZHMgPSBuZnNfbG9ja19jaGVja19ib3VuZHMsCisJLmNsb3NlX2NvbnRleHQJPSBuZnNfY2xvc2VfY29udGV4dCwKIH07CmRpZmYgLS1naXQgYS9mcy9uZnMvcmVhZC5jIGIvZnMvbmZzL3JlYWQuYwppbmRleCBmODU2MDA0Li40YWNlM2M1IDEwMDY0NAotLS0gYS9mcy9uZnMvcmVhZC5jCisrKyBiL2ZzL25mcy9yZWFkLmMKQEAgLTI0LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAiaW9zdGF0LmgiCisjaW5jbHVkZSAiZnNjYWNoZS5oIgogCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX1BBR0VDQUNIRQogCkBAIC0xMTEsOCArMTEyLDggQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbmZzX3JlYWRwYWdlX2FzeW5jKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCXN0cnVjdCBwYWdlICpwYWdlKQoraW50IG5mc19yZWFkcGFnZV9hc3luYyhzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJTElTVF9IRUFEKG9uZV9yZXF1ZXN0KTsKIAlzdHJ1Y3QgbmZzX3BhZ2UJKm5ldzsKQEAgLTEzOSw2ICsxNDAsMTEgQEAKIAogc3RhdGljIHZvaWQgbmZzX3JlYWRwYWdlX3JlbGVhc2Uoc3RydWN0IG5mc19wYWdlICpyZXEpCiB7CisJc3RydWN0IGlub2RlICpkX2lub2RlID0gcmVxLT53Yl9jb250ZXh0LT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKworCWlmIChQYWdlVXB0b2RhdGUocmVxLT53Yl9wYWdlKSkKKwkJbmZzX3JlYWRwYWdlX3RvX2ZzY2FjaGUoZF9pbm9kZSwgcmVxLT53Yl9wYWdlLCAwKTsKKwogCXVubG9ja19wYWdlKHJlcS0+d2JfcGFnZSk7CiAKIAlkcHJpbnRrKCJORlM6IHJlYWQgZG9uZSAoJXMvJUxkICVkQCVMZClcbiIsCkBAIC01MTAsOCArNTE2LDE1IEBACiAJfSBlbHNlCiAJCWN0eCA9IGdldF9uZnNfb3Blbl9jb250ZXh0KG5mc19maWxlX29wZW5fY29udGV4dChmaWxlKSk7CiAKKwlpZiAoIUlTX1NZTkMoaW5vZGUpKSB7CisJCWVycm9yID0gbmZzX3JlYWRwYWdlX2Zyb21fZnNjYWNoZShjdHgsIGlub2RlLCBwYWdlKTsKKwkJaWYgKGVycm9yID09IDApCisJCQlnb3RvIG91dDsKKwl9CisKIAllcnJvciA9IG5mc19yZWFkcGFnZV9hc3luYyhjdHgsIGlub2RlLCBwYWdlKTsKIAorb3V0OgogCXB1dF9uZnNfb3Blbl9jb250ZXh0KGN0eCk7CiAJcmV0dXJuIGVycm9yOwogb3V0X3VubG9jazoKQEAgLTU4NCw2ICs1OTcsMTUgQEAKIAkJCXJldHVybiAtRUJBREY7CiAJfSBlbHNlCiAJCWRlc2MuY3R4ID0gZ2V0X25mc19vcGVuX2NvbnRleHQobmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbHApKTsKKworCS8qIGF0dGVtcHQgdG8gcmVhZCBhcyBtYW55IG9mIHRoZSBwYWdlcyBhcyBwb3NzaWJsZSBmcm9tIHRoZSBjYWNoZQorCSAqIC0gdGhpcyByZXR1cm5zIC1FTk9CVUZTIGltbWVkaWF0ZWx5IGlmIHRoZSBjb29raWUgaXMgbmVnYXRpdmUKKwkgKi8KKwlyZXQgPSBuZnNfcmVhZHBhZ2VzX2Zyb21fZnNjYWNoZShkZXNjLmN0eCwgaW5vZGUsIG1hcHBpbmcsCisJCQkJCSBwYWdlcywgJm5yX3BhZ2VzKTsKKwlpZiAocmV0ID09IDApCisJCWdvdG8gcmVhZF9jb21wbGV0ZTsgLyogYWxsIHBhZ2VzIHdlcmUgcmVhZCAqLworCiAJaWYgKHJzaXplIDwgUEFHRV9DQUNIRV9TSVpFKQogCQluZnNfcGFnZWlvX2luaXQoJnBnaW8sIGlub2RlLCBuZnNfcGFnZWluX211bHRpLCByc2l6ZSwgMCk7CiAJZWxzZQpAQCAtNTk0LDYgKzYxNiw3IEBACiAJbmZzX3BhZ2Vpb19jb21wbGV0ZSgmcGdpbyk7CiAJbnBhZ2VzID0gKHBnaW8ucGdfYnl0ZXNfd3JpdHRlbiArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJbmZzX2FkZF9zdGF0cyhpbm9kZSwgTkZTSU9TX1JFQURQQUdFUywgbnBhZ2VzKTsKK3JlYWRfY29tcGxldGU6CiAJcHV0X25mc19vcGVuX2NvbnRleHQoZGVzYy5jdHgpOwogb3V0OgogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jCmluZGV4IGQ2Njg2ZjQuLjgyZWFhZGIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9zdXBlci5jCisrKyBiL2ZzL25mcy9zdXBlci5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiZGVsZWdhdGlvbi5oIgogI2luY2x1ZGUgImlvc3RhdC5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiZnNjYWNoZS5oIgogCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX1ZGUwogCkBAIC03Niw2ICs3Nyw3IEBACiAJT3B0X3JkaXJwbHVzLCBPcHRfbm9yZGlycGx1cywKIAlPcHRfc2hhcmVjYWNoZSwgT3B0X25vc2hhcmVjYWNoZSwKIAlPcHRfcmVzdnBvcnQsIE9wdF9ub3Jlc3Zwb3J0LAorCU9wdF9mc2NhY2hlLCBPcHRfbm9mc2NhY2hlLAogCiAJLyogTW91bnQgb3B0aW9ucyB0aGF0IHRha2UgaW50ZWdlciBhcmd1bWVudHMgKi8KIAlPcHRfcG9ydCwKQEAgLTkzLDYgKzk1LDcgQEAKIAlPcHRfc2VjLCBPcHRfcHJvdG8sIE9wdF9tb3VudHByb3RvLCBPcHRfbW91bnRob3N0LAogCU9wdF9hZGRyLCBPcHRfbW91bnRhZGRyLCBPcHRfY2xpZW50YWRkciwKIAlPcHRfbG9va3VwY2FjaGUsCisJT3B0X2ZzY2FjaGVfdW5pcSwKIAogCS8qIFNwZWNpYWwgbW91bnQgb3B0aW9ucyAqLwogCU9wdF91c2Vyc3BhY2UsIE9wdF9kZXByZWNhdGVkLCBPcHRfc2xvcHB5LApAQCAtMTMyLDYgKzEzNSw5IEBACiAJeyBPcHRfbm9zaGFyZWNhY2hlLCAibm9zaGFyZWNhY2hlIiB9LAogCXsgT3B0X3Jlc3Zwb3J0LCAicmVzdnBvcnQiIH0sCiAJeyBPcHRfbm9yZXN2cG9ydCwgIm5vcmVzdnBvcnQiIH0sCisJeyBPcHRfZnNjYWNoZSwgImZzYyIgfSwKKwl7IE9wdF9mc2NhY2hlX3VuaXEsICJmc2M9JXMiIH0sCisJeyBPcHRfbm9mc2NhY2hlLCAibm9mc2MiIH0sCiAKIAl7IE9wdF9wb3J0LCAicG9ydD0ldSIgfSwKIAl7IE9wdF9yc2l6ZSwgInJzaXplPSV1IiB9LApAQCAtNTYzLDYgKzU2OSw4IEBACiAJaWYgKGNscC0+cnBjX29wcy0+dmVyc2lvbiA9PSA0KQogCQlzZXFfcHJpbnRmKG0sICIsY2xpZW50YWRkcj0lcyIsIGNscC0+Y2xfaXBhZGRyKTsKICNlbmRpZgorCWlmIChuZnNzLT5vcHRpb25zICYgTkZTX09QVElPTl9GU0NBQ0hFKQorCQlzZXFfcHJpbnRmKG0sICIsZnNjIik7CiB9CiAKIC8qCkBAIC02NDEsNiArNjQ5LDEwIEBACiAJCQl0b3RhbHMuZXZlbnRzW2ldICs9IHN0YXRzLT5ldmVudHNbaV07CiAJCWZvciAoaSA9IDA7IGkgPCBfX05GU0lPU19CWVRFU01BWDsgaSsrKQogCQkJdG90YWxzLmJ5dGVzW2ldICs9IHN0YXRzLT5ieXRlc1tpXTsKKyNpZmRlZiBDT05GSUdfTkZTX0ZTQ0FDSEUKKwkJZm9yIChpID0gMDsgaSA8IF9fTkZTSU9TX0ZTQ0FDSEVNQVg7IGkrKykKKwkJCXRvdGFscy5mc2NhY2hlW2ldICs9IHN0YXRzLT5mc2NhY2hlW2ldOworI2VuZGlmCiAKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAl9CkBAIC02NTEsNiArNjYzLDEzIEBACiAJc2VxX3ByaW50ZihtLCAiXG5cdGJ5dGVzOlx0Iik7CiAJZm9yIChpID0gMDsgaSA8IF9fTkZTSU9TX0JZVEVTTUFYOyBpKyspCiAJCXNlcV9wcmludGYobSwgIiVMdSAiLCB0b3RhbHMuYnl0ZXNbaV0pOworI2lmZGVmIENPTkZJR19ORlNfRlNDQUNIRQorCWlmIChuZnNzLT5vcHRpb25zICYgTkZTX09QVElPTl9GU0NBQ0hFKSB7CisJCXNlcV9wcmludGYobSwgIlxuXHRmc2M6XHQiKTsKKwkJZm9yIChpID0gMDsgaSA8IF9fTkZTSU9TX0ZTQ0FDSEVNQVg7IGkrKykKKwkJCXNlcV9wcmludGYobSwgIiVMdSAiLCB0b3RhbHMuYnl0ZXNbaV0pOworCX0KKyNlbmRpZgogCXNlcV9wcmludGYobSwgIlxuIik7CiAKIAlycGNfcHJpbnRfaW9zdGF0cyhtLCBuZnNzLT5jbGllbnQpOwpAQCAtMTAxOCw2ICsxMDM3LDcgQEAKIAkJY2FzZSBPcHRfcmRtYToKIAkJCW1udC0+ZmxhZ3MgfD0gTkZTX01PVU5UX1RDUDsgLyogZm9yIHNpZGUgcHJvdG9jb2xzICovCiAJCQltbnQtPm5mc19zZXJ2ZXIucHJvdG9jb2wgPSBYUFJUX1RSQU5TUE9SVF9SRE1BOworCQkJeHBydF9sb2FkX3RyYW5zcG9ydChwKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9hY2w6CiAJCQltbnQtPmZsYWdzICY9IH5ORlNfTU9VTlRfTk9BQ0w7CkBAIC0xMDQzLDYgKzEwNjMsMjQgQEAKIAkJY2FzZSBPcHRfbm9yZXN2cG9ydDoKIAkJCW1udC0+ZmxhZ3MgfD0gTkZTX01PVU5UX05PUkVTVlBPUlQ7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZnNjYWNoZToKKwkJCW1udC0+b3B0aW9ucyB8PSBORlNfT1BUSU9OX0ZTQ0FDSEU7CisJCQlrZnJlZShtbnQtPmZzY2FjaGVfdW5pcSk7CisJCQltbnQtPmZzY2FjaGVfdW5pcSA9IE5VTEw7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbm9mc2NhY2hlOgorCQkJbW50LT5vcHRpb25zICY9IH5ORlNfT1BUSU9OX0ZTQ0FDSEU7CisJCQlrZnJlZShtbnQtPmZzY2FjaGVfdW5pcSk7CisJCQltbnQtPmZzY2FjaGVfdW5pcSA9IE5VTEw7CisJCQlicmVhazsKKwkJY2FzZSBPcHRfZnNjYWNoZV91bmlxOgorCQkJc3RyaW5nID0gbWF0Y2hfc3RyZHVwKGFyZ3MpOworCQkJaWYgKCFzdHJpbmcpCisJCQkJZ290byBvdXRfbm9tZW07CisJCQlrZnJlZShtbnQtPmZzY2FjaGVfdW5pcSk7CisJCQltbnQtPmZzY2FjaGVfdW5pcSA9IHN0cmluZzsKKwkJCW1udC0+b3B0aW9ucyB8PSBORlNfT1BUSU9OX0ZTQ0FDSEU7CisJCQlicmVhazsKIAogCQkvKgogCQkgKiBvcHRpb25zIHRoYXQgdGFrZSBudW1lcmljIHZhbHVlcwpAQCAtMTIwNSwxMiArMTI0MywxNCBAQAogCQkJCS8qIHZlY3RvciBzaWRlIHByb3RvY29scyB0byBUQ1AgKi8KIAkJCQltbnQtPmZsYWdzIHw9IE5GU19NT1VOVF9UQ1A7CiAJCQkJbW50LT5uZnNfc2VydmVyLnByb3RvY29sID0gWFBSVF9UUkFOU1BPUlRfUkRNQTsKKwkJCQl4cHJ0X2xvYWRfdHJhbnNwb3J0KHN0cmluZyk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWVycm9ycysrOwogCQkJCWRmcHJpbnRrKE1PVU5ULCAiTkZTOiAgIHVucmVjb2duaXplZCAiCiAJCQkJCQkidHJhbnNwb3J0IHByb3RvY29sXG4iKTsKIAkJCX0KKwkJCWtmcmVlKHN0cmluZyk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbW91bnRwcm90bzoKIAkJCXN0cmluZyA9IG1hdGNoX3N0cmR1cChhcmdzKTsKQEAgLTEyMTgsNyArMTI1OCw2IEBACiAJCQkJZ290byBvdXRfbm9tZW07CiAJCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHN0cmluZywKIAkJCQkJICAgIG5mc194cHJ0X3Byb3RvY29sX3Rva2VucywgYXJncyk7Ci0JCQlrZnJlZShzdHJpbmcpOwogCiAJCQlzd2l0Y2ggKHRva2VuKSB7CiAJCQljYXNlIE9wdF94cHJ0X3VkcDoKQEAgLTE4NjgsOCArMTkwNyw2IEBACiAgCW5mc19pbml0aWFsaXNlX3NiKHNiKTsKIH0KIAotI2RlZmluZSBORlNfTVNfTUFTSyAoTVNfUkRPTkxZfE1TX05PU1VJRHxNU19OT0RFVnxNU19OT0VYRUN8TVNfU1lOQ0hST05PVVMpCi0KIHN0YXRpYyBpbnQgbmZzX2NvbXBhcmVfbW91bnRfb3B0aW9ucyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpiLCBpbnQgZmxhZ3MpCiB7CiAJY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKmEgPSBzLT5zX2ZzX2luZm87CkBAIC0yMDM0LDYgKzIwNzEsNyBAQAogCWlmICghcy0+c19yb290KSB7CiAJCS8qIGluaXRpYWwgc3VwZXJibG9jay9yb290IGNyZWF0aW9uICovCiAJCW5mc19maWxsX3N1cGVyKHMsIGRhdGEpOworCQluZnNfZnNjYWNoZV9nZXRfc3VwZXJfY29va2llKHMsIGRhdGEpOwogCX0KIAogCW1udHJvb3QgPSBuZnNfZ2V0X3Jvb3QocywgbW50ZmgpOwpAQCAtMjA1NCw2ICsyMDkyLDcgQEAKIG91dDoKIAlrZnJlZShkYXRhLT5uZnNfc2VydmVyLmhvc3RuYW1lKTsKIAlrZnJlZShkYXRhLT5tb3VudF9zZXJ2ZXIuaG9zdG5hbWUpOworCWtmcmVlKGRhdGEtPmZzY2FjaGVfdW5pcSk7CiAJc2VjdXJpdHlfZnJlZV9tbnRfb3B0cygmZGF0YS0+bHNtX29wdHMpOwogb3V0X2ZyZWVfZmg6CiAJa2ZyZWUobW50ZmgpOwpAQCAtMjA4MSw2ICsyMTIwLDcgQEAKIAogCWJkaV91bnJlZ2lzdGVyKCZzZXJ2ZXItPmJhY2tpbmdfZGV2X2luZm8pOwogCWtpbGxfYW5vbl9zdXBlcihzKTsKKwluZnNfZnNjYWNoZV9yZWxlYXNlX3N1cGVyX2Nvb2tpZShzKTsKIAluZnNfZnJlZV9zZXJ2ZXIoc2VydmVyKTsKIH0KIApAQCAtMjM4OCw2ICsyNDI4LDcgQEAKIAlpZiAoIXMtPnNfcm9vdCkgewogCQkvKiBpbml0aWFsIHN1cGVyYmxvY2svcm9vdCBjcmVhdGlvbiAqLwogCQluZnM0X2ZpbGxfc3VwZXIocyk7CisJCW5mc19mc2NhY2hlX2dldF9zdXBlcl9jb29raWUocywgZGF0YSk7CiAJfQogCiAJbW50cm9vdCA9IG5mczRfZ2V0X3Jvb3QocywgbW50ZmgpOwpAQCAtMjQwOSw2ICsyNDUwLDcgQEAKIAlrZnJlZShkYXRhLT5jbGllbnRfYWRkcmVzcyk7CiAJa2ZyZWUoZGF0YS0+bmZzX3NlcnZlci5leHBvcnRfcGF0aCk7CiAJa2ZyZWUoZGF0YS0+bmZzX3NlcnZlci5ob3N0bmFtZSk7CisJa2ZyZWUoZGF0YS0+ZnNjYWNoZV91bmlxKTsKIAlzZWN1cml0eV9mcmVlX21udF9vcHRzKCZkYXRhLT5sc21fb3B0cyk7CiBvdXRfZnJlZV9maDoKIAlrZnJlZShtbnRmaCk7CkBAIC0yNDM1LDYgKzI0NzcsNyBAQAogCWtpbGxfYW5vbl9zdXBlcihzYik7CiAKIAluZnM0X3JlbmV3ZF9wcmVwYXJlX3NodXRkb3duKHNlcnZlcik7CisJbmZzX2ZzY2FjaGVfcmVsZWFzZV9zdXBlcl9jb29raWUoc2IpOwogCW5mc19mcmVlX3NlcnZlcihzZXJ2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvd3JpdGUuYyBiL2ZzL25mcy93cml0ZS5jCmluZGV4IDlmOTg0NTguLmU1NjBhNzggMTAwNjQ0Ci0tLSBhL2ZzL25mcy93cml0ZS5jCisrKyBiL2ZzL25mcy93cml0ZS5jCkBAIC0zMTMsMTkgKzMxMywzNCBAQAogaW50IG5mc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwl1bnNpZ25lZCBsb25nICpiaXRsb2NrID0gJk5GU19JKGlub2RlKS0+ZmxhZ3M7CiAJc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciBwZ2lvOwogCWludCBlcnI7CiAKKwkvKiBTdG9wIGRpcnR5aW5nIG9mIG5ldyBwYWdlcyB3aGlsZSB3ZSBzeW5jICovCisJZXJyID0gd2FpdF9vbl9iaXRfbG9jayhiaXRsb2NrLCBORlNfSU5PX0ZMVVNISU5HLAorCQkJbmZzX3dhaXRfYml0X2tpbGxhYmxlLCBUQVNLX0tJTExBQkxFKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9lcnI7CisKIAluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfVkZTV1JJVEVQQUdFUyk7CiAKIAluZnNfcGFnZWlvX2luaXRfd3JpdGUoJnBnaW8sIGlub2RlLCB3Yl9wcmlvcml0eSh3YmMpKTsKIAllcnIgPSB3cml0ZV9jYWNoZV9wYWdlcyhtYXBwaW5nLCB3YmMsIG5mc193cml0ZXBhZ2VzX2NhbGxiYWNrLCAmcGdpbyk7CiAJbmZzX3BhZ2Vpb19jb21wbGV0ZSgmcGdpbyk7CisKKwljbGVhcl9iaXRfdW5sb2NrKE5GU19JTk9fRkxVU0hJTkcsIGJpdGxvY2spOworCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJd2FrZV91cF9iaXQoYml0bG9jaywgTkZTX0lOT19GTFVTSElORyk7CisKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlpZiAocGdpby5wZ19lcnJvciA8IDApCi0JCXJldHVybiBwZ2lvLnBnX2Vycm9yOworCQlnb3RvIG91dF9lcnI7CisJZXJyID0gcGdpby5wZ19lcnJvcjsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfZXJyOwogCXJldHVybiAwOworb3V0X2VycjoKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpAQCAtNDA0LDcgKzQxOSw2IEBACiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKIAogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JbmZzaS0+bmNvbW1pdCsrOwogCXNldF9iaXQoUEdfQ0xFQU4sICYocmVxKS0+d2JfZmxhZ3MpOwogCXJhZGl4X3RyZWVfdGFnX3NldCgmbmZzaS0+bmZzX3BhZ2VfdHJlZSwKIAkJCXJlcS0+d2JfaW5kZXgsCkBAIC01MjQsNiArNTM4LDEyIEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjMpIHx8IGRlZmluZWQoQ09ORklHX05GU19WNCkKK3N0YXRpYyBpbnQKK25mc19uZWVkX2NvbW1pdChzdHJ1Y3QgbmZzX2lub2RlICpuZnNpKQoreworCXJldHVybiByYWRpeF90cmVlX3RhZ2dlZCgmbmZzaS0+bmZzX3BhZ2VfdHJlZSwgTkZTX1BBR0VfVEFHX0NPTU1JVCk7Cit9CisKIC8qCiAgKiBuZnNfc2Nhbl9jb21taXQgLSBTY2FuIGFuIGlub2RlIGZvciBjb21taXQgcmVxdWVzdHMKICAqIEBpbm9kZTogTkZTIGlub2RlIHRvIHNjYW4KQEAgLTUzOCwxNiArNTU4LDE4IEBACiBuZnNfc2Nhbl9jb21taXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqZHN0LCBwZ29mZl90IGlkeF9zdGFydCwgdW5zaWduZWQgaW50IG5wYWdlcykKIHsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOwotCWludCByZXMgPSAwOwogCi0JaWYgKG5mc2ktPm5jb21taXQgIT0gMCkgewotCQlyZXMgPSBuZnNfc2Nhbl9saXN0KG5mc2ksIGRzdCwgaWR4X3N0YXJ0LCBucGFnZXMsCi0JCQkJTkZTX1BBR0VfVEFHX0NPTU1JVCk7Ci0JCW5mc2ktPm5jb21taXQgLT0gcmVzOwotCX0KLQlyZXR1cm4gcmVzOworCWlmICghbmZzX25lZWRfY29tbWl0KG5mc2kpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBuZnNfc2Nhbl9saXN0KG5mc2ksIGRzdCwgaWR4X3N0YXJ0LCBucGFnZXMsIE5GU19QQUdFX1RBR19DT01NSVQpOwogfQogI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IG5mc19uZWVkX2NvbW1pdChzdHJ1Y3QgbmZzX2lub2RlICpuZnNpKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCBuZnNfc2Nhbl9jb21taXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqZHN0LCBwZ29mZl90IGlkeF9zdGFydCwgdW5zaWduZWQgaW50IG5wYWdlcykKIHsKIAlyZXR1cm4gMDsKQEAgLTgyMCw3ICs4NDIsNyBAQAogCWRhdGEtPmFyZ3Muc3RhYmxlICA9IE5GU19VTlNUQUJMRTsKIAlpZiAoaG93ICYgRkxVU0hfU1RBQkxFKSB7CiAJCWRhdGEtPmFyZ3Muc3RhYmxlID0gTkZTX0RBVEFfU1lOQzsKLQkJaWYgKCFORlNfSShpbm9kZSktPm5jb21taXQpCisJCWlmICghbmZzX25lZWRfY29tbWl0KE5GU19JKGlub2RlKSkpCiAJCQlkYXRhLT5hcmdzLnN0YWJsZSA9IE5GU19GSUxFX1NZTkM7CiAJfQogCkBAIC0xNDI1LDE4ICsxNDQ3LDEzIEBACiB7CiAJc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKIAkJLmJkaSA9IG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8sCi0JCS5zeW5jX21vZGUgPSBXQl9TWU5DX05PTkUsCisJCS5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCwKIAkJLm5yX3RvX3dyaXRlID0gTE9OR19NQVgsCiAJCS5yYW5nZV9zdGFydCA9IDAsCiAJCS5yYW5nZV9lbmQgPSBMTE9OR19NQVgsCiAJCS5mb3Jfd3JpdGVwYWdlcyA9IDEsCiAJfTsKLQlpbnQgcmV0OwogCi0JcmV0ID0gX19uZnNfd3JpdGVfbWFwcGluZyhtYXBwaW5nLCAmd2JjLCBob3cpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXdiYy5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTDsKIAlyZXR1cm4gX19uZnNfd3JpdGVfbWFwcGluZyhtYXBwaW5nLCAmd2JjLCBob3cpOwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mc2N0bC5jIGIvZnMvbmZzZC9uZnNjdGwuYwppbmRleCAzZDkzYjIwLi5hNGVkODY0IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mc2N0bC5jCisrKyBiL2ZzL25mc2QvbmZzY3RsLmMKQEAgLTkzOCwxMCArOTM4LDEyIEBACiAJCWNoYXIgdHJhbnNwb3J0WzE2XTsKIAkJaW50IHBvcnQ7CiAJCWlmIChzc2NhbmYoYnVmLCAiJTE1cyAlNGQiLCB0cmFuc3BvcnQsICZwb3J0KSA9PSAyKSB7CisJCQlpZiAocG9ydCA8IDEgfHwgcG9ydCA+IDY1NTM1KQorCQkJCXJldHVybiAtRUlOVkFMOwogCQkJZXJyID0gbmZzZF9jcmVhdGVfc2VydigpOwogCQkJaWYgKCFlcnIpIHsKIAkJCQllcnIgPSBzdmNfY3JlYXRlX3hwcnQobmZzZF9zZXJ2LAotCQkJCQkJICAgICAgdHJhbnNwb3J0LCBwb3J0LAorCQkJCQkJICAgICAgdHJhbnNwb3J0LCBQRl9JTkVULCBwb3J0LAogCQkJCQkJICAgICAgU1ZDX1NPQ0tfQU5PTllNT1VTKTsKIAkJCQlpZiAoZXJyID09IC1FTk9FTlQpCiAJCQkJCS8qIEdpdmUgYSByZWFzb25hYmxlIHBlcnJvciBtc2cgZm9yCkBAIC05NjAsNyArOTYyLDcgQEAKIAkJY2hhciB0cmFuc3BvcnRbMTZdOwogCQlpbnQgcG9ydDsKIAkJaWYgKHNzY2FuZigmYnVmWzFdLCAiJTE1cyAlNGQiLCB0cmFuc3BvcnQsICZwb3J0KSA9PSAyKSB7Ci0JCQlpZiAocG9ydCA9PSAwKQorCQkJaWYgKHBvcnQgPCAxIHx8IHBvcnQgPiA2NTUzNSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWlmIChuZnNkX3NlcnYpIHsKIAkJCQl4cHJ0ID0gc3ZjX2ZpbmRfeHBydChuZnNkX3NlcnYsIHRyYW5zcG9ydCwKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzc3ZjLmMgYi9mcy9uZnNkL25mc3N2Yy5jCmluZGV4IDA3ZTRmNWQuLjdjMDk4NTIgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzc3ZjLmMKKysrIGIvZnMvbmZzZC9uZnNzdmMuYwpAQCAtMjI5LDcgKzIyOSw2IEBACiAKIAlhdG9taWNfc2V0KCZuZnNkX2J1c3ksIDApOwogCW5mc2Rfc2VydiA9IHN2Y19jcmVhdGVfcG9vbGVkKCZuZnNkX3Byb2dyYW0sIG5mc2RfbWF4X2Jsa3NpemUsCi0JCQkJICAgICAgQUZfSU5FVCwKIAkJCQkgICAgICBuZnNkX2xhc3RfdGhyZWFkLCBuZnNkLCBUSElTX01PRFVMRSk7CiAJaWYgKG5mc2Rfc2VydiA9PSBOVUxMKQogCQllcnIgPSAtRU5PTUVNOwpAQCAtMjQ0LDcgKzI0Myw3IEBACiAJaWYgKCFsaXN0X2VtcHR5KCZuZnNkX3NlcnYtPnN2X3Blcm1zb2NrcykpCiAJCXJldHVybiAwOwogCi0JZXJyb3IgPSBzdmNfY3JlYXRlX3hwcnQobmZzZF9zZXJ2LCAidWRwIiwgcG9ydCwKKwllcnJvciA9IHN2Y19jcmVhdGVfeHBydChuZnNkX3NlcnYsICJ1ZHAiLCBQRl9JTkVULCBwb3J0LAogCQkJCQlTVkNfU09DS19ERUZBVUxUUyk7CiAJaWYgKGVycm9yIDwgMCkKIAkJcmV0dXJuIGVycm9yOwpAQCAtMjUzLDcgKzI1Miw3IEBACiAJaWYgKGVycm9yIDwgMCkKIAkJcmV0dXJuIGVycm9yOwogCi0JZXJyb3IgPSBzdmNfY3JlYXRlX3hwcnQobmZzZF9zZXJ2LCAidGNwIiwgcG9ydCwKKwllcnJvciA9IHN2Y19jcmVhdGVfeHBydChuZnNkX3NlcnYsICJ0Y3AiLCBQRl9JTkVULCBwb3J0LAogCQkJCQlTVkNfU09DS19ERUZBVUxUUyk7CiAJaWYgKGVycm9yIDwgMCkKIAkJcmV0dXJuIGVycm9yOwpAQCAtNDA0LDcgKzQwMyw2IEBACiBuZnNkKHZvaWQgKnZycXN0cCkKIHsKIAlzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwID0gKHN0cnVjdCBzdmNfcnFzdCAqKSB2cnFzdHA7Ci0Jc3RydWN0IGZzX3N0cnVjdCAqZnNwOwogCWludCBlcnIsIHByZXZlcnIgPSAwOwogCiAJLyogTG9jayBtb2R1bGUgYW5kIHNldCB1cCBrZXJuZWwgdGhyZWFkICovCkBAIC00MTMsMTMgKzQxMSwxMSBAQAogCS8qIEF0IHRoaXMgcG9pbnQsIHRoZSB0aHJlYWQgc2hhcmVzIGN1cnJlbnQtPmZzCiAJICogd2l0aCB0aGUgaW5pdCBwcm9jZXNzLiBXZSBuZWVkIHRvIGNyZWF0ZSBmaWxlcyB3aXRoIGEKIAkgKiB1bWFzayBvZiAwIGluc3RlYWQgb2YgaW5pdCdzIHVtYXNrLiAqLwotCWZzcCA9IGNvcHlfZnNfc3RydWN0KGN1cnJlbnQtPmZzKTsKLQlpZiAoIWZzcCkgeworCWlmICh1bnNoYXJlX2ZzX3N0cnVjdCgpIDwgMCkgewogCQlwcmludGsoIlVuYWJsZSB0byBzdGFydCBuZnNkIHRocmVhZDogb3V0IG9mIG1lbW9yeVxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlleGl0X2ZzKGN1cnJlbnQpOwotCWN1cnJlbnQtPmZzID0gZnNwOworCiAJY3VycmVudC0+ZnMtPnVtYXNrID0gMDsKIAogCS8qCmRpZmYgLS1naXQgYS9mcy9udGZzL2Rpci5jIGIvZnMvbnRmcy9kaXIuYwppbmRleCAzNDMxNGIzLi41YTllMzQ0IDEwMDY0NAotLS0gYS9mcy9udGZzL2Rpci5jCisrKyBiL2ZzL250ZnMvZGlyLmMKQEAgLTMyLDggKzMyLDggQEAKIC8qKgogICogVGhlIGxpdHRsZSBlbmRpYW4gVW5pY29kZSBzdHJpbmcgJEkzMCBhcyBhIGdsb2JhbCBjb25zdGFudC4KICAqLwotbnRmc2NoYXIgSTMwWzVdID0geyBjb25zdF9jcHVfdG9fbGUxNignJCcpLCBjb25zdF9jcHVfdG9fbGUxNignSScpLAotCQljb25zdF9jcHVfdG9fbGUxNignMycpLAljb25zdF9jcHVfdG9fbGUxNignMCcpLCAwIH07CitudGZzY2hhciBJMzBbNV0gPSB7IGNwdV90b19sZTE2KCckJyksIGNwdV90b19sZTE2KCdJJyksCisJCWNwdV90b19sZTE2KCczJyksCWNwdV90b19sZTE2KCcwJyksIDAgfTsKIAogLyoqCiAgKiBudGZzX2xvb2t1cF9pbm9kZV9ieV9uYW1lIC0gZmluZCBhbiBpbm9kZSBpbiBhIGRpcmVjdG9yeSBnaXZlbiBpdHMgbmFtZQpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9pbm9kZS5jIGIvZnMvbnRmcy9pbm9kZS5jCmluZGV4IDg2YmVmMTUuLjgyYzUwODUgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvaW5vZGUuYworKysgYi9mcy9udGZzL2lub2RlLmMKQEAgLTE5NzUsOCArMTk3NSw3IEBACiAJCQkJZ290byBlbV9wdXRfZXJyX291dDsKIAkJCW5leHRfYWxfZW50cnkgPSAoQVRUUl9MSVNUX0VOVFJZKikoKHU4KilhbF9lbnRyeSArCiAJCQkJCWxlMTZfdG9fY3B1KGFsX2VudHJ5LT5sZW5ndGgpKTsKLQkJCWlmIChsZTMyX3RvX2NwdShhbF9lbnRyeS0+dHlwZSkgPgotCQkJCQljb25zdF9sZTMyX3RvX2NwdShBVF9EQVRBKSkKKwkJCWlmIChsZTMyX3RvX2NwdShhbF9lbnRyeS0+dHlwZSkgPiBsZTMyX3RvX2NwdShBVF9EQVRBKSkKIAkJCQlnb3RvIGVtX3B1dF9lcnJfb3V0OwogCQkJaWYgKEFUX0RBVEEgIT0gYWxfZW50cnktPnR5cGUpCiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9mcy9udGZzL2xheW91dC5oIGIvZnMvbnRmcy9sYXlvdXQuaAppbmRleCAxZTM4MzMyLi41MDkzMWIxIDEwMDY0NAotLS0gYS9mcy9udGZzL2xheW91dC5oCisrKyBiL2ZzL250ZnMvbGF5b3V0LmgKQEAgLTMxLDE5ICszMSw4IEBACiAKICNpbmNsdWRlICJ0eXBlcy5oIgogCi0vKgotICogQ29uc3RhbnQgZW5kaWFubmVzcyBjb252ZXJzaW9uIGRlZmluZXMuCi0gKi8KLSNkZWZpbmUgY29uc3RfbGUxNl90b19jcHUoeCkJX19jb25zdGFudF9sZTE2X3RvX2NwdSh4KQotI2RlZmluZSBjb25zdF9sZTMyX3RvX2NwdSh4KQlfX2NvbnN0YW50X2xlMzJfdG9fY3B1KHgpCi0jZGVmaW5lIGNvbnN0X2xlNjRfdG9fY3B1KHgpCV9fY29uc3RhbnRfbGU2NF90b19jcHUoeCkKLQotI2RlZmluZSBjb25zdF9jcHVfdG9fbGUxNih4KQlfX2NvbnN0YW50X2NwdV90b19sZTE2KHgpCi0jZGVmaW5lIGNvbnN0X2NwdV90b19sZTMyKHgpCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoeCkKLSNkZWZpbmUgY29uc3RfY3B1X3RvX2xlNjQoeCkJX19jb25zdGFudF9jcHVfdG9fbGU2NCh4KQotCiAvKiBUaGUgTlRGUyBvZW1faWQgIk5URlMgICAgIiAqLwotI2RlZmluZSBtYWdpY05URlMJY29uc3RfY3B1X3RvX2xlNjQoMHgyMDIwMjAyMDUzNDY1NDRlVUxMKQorI2RlZmluZSBtYWdpY05URlMJY3B1X3RvX2xlNjQoMHgyMDIwMjAyMDUzNDY1NDRlVUxMKQogCiAvKgogICogTG9jYXRpb24gb2YgYm9vdHNlY3RvciBvbiBwYXJ0aXRpb246CkBAIC0xMTQsMjUgKzEwMywyNSBAQAogICovCiBlbnVtIHsKIAkvKiBGb3VuZCBpbiAkTUZULyREQVRBLiAqLwotCW1hZ2ljX0ZJTEUgPSBjb25zdF9jcHVfdG9fbGUzMigweDQ1NGM0OTQ2KSwgLyogTWZ0IGVudHJ5LiAqLwotCW1hZ2ljX0lORFggPSBjb25zdF9jcHVfdG9fbGUzMigweDU4NDQ0ZTQ5KSwgLyogSW5kZXggYnVmZmVyLiAqLwotCW1hZ2ljX0hPTEUgPSBjb25zdF9jcHVfdG9fbGUzMigweDQ1NGM0ZjQ4KSwgLyogPyAoTlRGUyAzLjArPykgKi8KKwltYWdpY19GSUxFID0gY3B1X3RvX2xlMzIoMHg0NTRjNDk0NiksIC8qIE1mdCBlbnRyeS4gKi8KKwltYWdpY19JTkRYID0gY3B1X3RvX2xlMzIoMHg1ODQ0NGU0OSksIC8qIEluZGV4IGJ1ZmZlci4gKi8KKwltYWdpY19IT0xFID0gY3B1X3RvX2xlMzIoMHg0NTRjNGY0OCksIC8qID8gKE5URlMgMy4wKz8pICovCiAKIAkvKiBGb3VuZCBpbiAkTG9nRmlsZS8kREFUQS4gKi8KLQltYWdpY19SU1RSID0gY29uc3RfY3B1X3RvX2xlMzIoMHg1MjU0NTM1MiksIC8qIFJlc3RhcnQgcGFnZS4gKi8KLQltYWdpY19SQ1JEID0gY29uc3RfY3B1X3RvX2xlMzIoMHg0NDUyNDM1MiksIC8qIExvZyByZWNvcmQgcGFnZS4gKi8KKwltYWdpY19SU1RSID0gY3B1X3RvX2xlMzIoMHg1MjU0NTM1MiksIC8qIFJlc3RhcnQgcGFnZS4gKi8KKwltYWdpY19SQ1JEID0gY3B1X3RvX2xlMzIoMHg0NDUyNDM1MiksIC8qIExvZyByZWNvcmQgcGFnZS4gKi8KIAogCS8qIEZvdW5kIGluICRMb2dGaWxlLyREQVRBLiAgKE1heSBiZSBmb3VuZCBpbiAkTUZULyREQVRBLCBhbHNvPykgKi8KLQltYWdpY19DSEtEID0gY29uc3RfY3B1X3RvX2xlMzIoMHg0NDRiNDg0MyksIC8qIE1vZGlmaWVkIGJ5IGNoa2Rzay4gKi8KKwltYWdpY19DSEtEID0gY3B1X3RvX2xlMzIoMHg0NDRiNDg0MyksIC8qIE1vZGlmaWVkIGJ5IGNoa2Rzay4gKi8KIAogCS8qIEZvdW5kIGluIGFsbCBudGZzIHJlY29yZCBjb250YWluaW5nIHJlY29yZHMuICovCi0JbWFnaWNfQkFBRCA9IGNvbnN0X2NwdV90b19sZTMyKDB4NDQ0MTQxNDIpLCAvKiBGYWlsZWQgbXVsdGkgc2VjdG9yCisJbWFnaWNfQkFBRCA9IGNwdV90b19sZTMyKDB4NDQ0MTQxNDIpLCAvKiBGYWlsZWQgbXVsdGkgc2VjdG9yCiAJCQkJCQkgICAgICAgdHJhbnNmZXIgd2FzIGRldGVjdGVkLiAqLwogCS8qCiAJICogRm91bmQgaW4gJExvZ0ZpbGUvJERBVEEgd2hlbiBhIHBhZ2UgaXMgZnVsbCBvZiAweGZmIGJ5dGVzIGFuZCBpcwogCSAqIHRodXMgbm90IGluaXRpYWxpemVkLiAgUGFnZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2luZyBpdC4KIAkgKi8KLQltYWdpY19lbXB0eSA9IGNvbnN0X2NwdV90b19sZTMyKDB4ZmZmZmZmZmYpIC8qIFJlY29yZCBpcyBlbXB0eS4gKi8KKwltYWdpY19lbXB0eSA9IGNwdV90b19sZTMyKDB4ZmZmZmZmZmYpIC8qIFJlY29yZCBpcyBlbXB0eS4gKi8KIH07CiAKIHR5cGVkZWYgbGUzMiBOVEZTX1JFQ09SRF9UWVBFOwpAQCAtMjU4LDggKzI0Nyw4IEBACiAgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWZ0IHJlY29yZCBpbiB3aGljaCB0aGV5IGFyZSBwcmVzZW50LgogICovCiBlbnVtIHsKLQlNRlRfUkVDT1JEX0lOX1VTRQk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDAwMSksCi0JTUZUX1JFQ09SRF9JU19ESVJFQ1RPUlkgPSBjb25zdF9jcHVfdG9fbGUxNigweDAwMDIpLAorCU1GVF9SRUNPUkRfSU5fVVNFCT0gY3B1X3RvX2xlMTYoMHgwMDAxKSwKKwlNRlRfUkVDT1JEX0lTX0RJUkVDVE9SWSA9IGNwdV90b19sZTE2KDB4MDAwMiksCiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKIHR5cGVkZWYgbGUxNiBNRlRfUkVDT1JEX0ZMQUdTOwpAQCAtMzA5LDcgKzI5OCw3IEBACiAgKiBOb3RlOiBUaGUgX0xFIHZlcnNpb25zIHdpbGwgcmV0dXJuIGEgQ1BVIGVuZGlhbiBmb3JtYXR0ZWQgdmFsdWUhCiAgKi8KICNkZWZpbmUgTUZUX1JFRl9NQVNLX0NQVSAweDAwMDBmZmZmZmZmZmZmZmZVTEwKLSNkZWZpbmUgTUZUX1JFRl9NQVNLX0xFIGNvbnN0X2NwdV90b19sZTY0KE1GVF9SRUZfTUFTS19DUFUpCisjZGVmaW5lIE1GVF9SRUZfTUFTS19MRSBjcHVfdG9fbGU2NChNRlRfUkVGX01BU0tfQ1BVKQogCiB0eXBlZGVmIHU2NCBNRlRfUkVGOwogdHlwZWRlZiBsZTY0IGxlTUZUX1JFRjsKQEAgLTQ3NywyNSArNDY2LDI1IEBACiAgKiBhIHJldmVhbGluZyBjaG9pY2Ugb2Ygc3ltYm9sIEkgZG8gbm90IGtub3cgd2hhdCBpcy4uLiAoLTsKICAqLwogZW51bSB7Ci0JQVRfVU5VU0VECQkJPSBjb25zdF9jcHVfdG9fbGUzMiggICAgICAgICAwKSwKLQlBVF9TVEFOREFSRF9JTkZPUk1BVElPTgkJPSBjb25zdF9jcHVfdG9fbGUzMiggICAgICAweDEwKSwKLQlBVF9BVFRSSUJVVEVfTElTVAkJPSBjb25zdF9jcHVfdG9fbGUzMiggICAgICAweDIwKSwKLQlBVF9GSUxFX05BTUUJCQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAgIDB4MzApLAotCUFUX09CSkVDVF9JRAkJCT0gY29uc3RfY3B1X3RvX2xlMzIoICAgICAgMHg0MCksCi0JQVRfU0VDVVJJVFlfREVTQ1JJUFRPUgkJPSBjb25zdF9jcHVfdG9fbGUzMiggICAgICAweDUwKSwKLQlBVF9WT0xVTUVfTkFNRQkJCT0gY29uc3RfY3B1X3RvX2xlMzIoICAgICAgMHg2MCksCi0JQVRfVk9MVU1FX0lORk9STUFUSU9OCQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAgIDB4NzApLAotCUFUX0RBVEEJCQkJPSBjb25zdF9jcHVfdG9fbGUzMiggICAgICAweDgwKSwKLQlBVF9JTkRFWF9ST09UCQkJPSBjb25zdF9jcHVfdG9fbGUzMiggICAgICAweDkwKSwKLQlBVF9JTkRFWF9BTExPQ0FUSU9OCQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAgIDB4YTApLAotCUFUX0JJVE1BUAkJCT0gY29uc3RfY3B1X3RvX2xlMzIoICAgICAgMHhiMCksCi0JQVRfUkVQQVJTRV9QT0lOVAkJPSBjb25zdF9jcHVfdG9fbGUzMiggICAgICAweGMwKSwKLQlBVF9FQV9JTkZPUk1BVElPTgkJPSBjb25zdF9jcHVfdG9fbGUzMiggICAgICAweGQwKSwKLQlBVF9FQQkJCQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAgIDB4ZTApLAotCUFUX1BST1BFUlRZX1NFVAkJCT0gY29uc3RfY3B1X3RvX2xlMzIoICAgICAgMHhmMCksCi0JQVRfTE9HR0VEX1VUSUxJVFlfU1RSRUFNCT0gY29uc3RfY3B1X3RvX2xlMzIoICAgICAweDEwMCksCi0JQVRfRklSU1RfVVNFUl9ERUZJTkVEX0FUVFJJQlVURQk9IGNvbnN0X2NwdV90b19sZTMyKCAgICAweDEwMDApLAotCUFUX0VORAkJCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4ZmZmZmZmZmYpCisJQVRfVU5VU0VECQkJPSBjcHVfdG9fbGUzMiggICAgICAgICAwKSwKKwlBVF9TVEFOREFSRF9JTkZPUk1BVElPTgkJPSBjcHVfdG9fbGUzMiggICAgICAweDEwKSwKKwlBVF9BVFRSSUJVVEVfTElTVAkJPSBjcHVfdG9fbGUzMiggICAgICAweDIwKSwKKwlBVF9GSUxFX05BTUUJCQk9IGNwdV90b19sZTMyKCAgICAgIDB4MzApLAorCUFUX09CSkVDVF9JRAkJCT0gY3B1X3RvX2xlMzIoICAgICAgMHg0MCksCisJQVRfU0VDVVJJVFlfREVTQ1JJUFRPUgkJPSBjcHVfdG9fbGUzMiggICAgICAweDUwKSwKKwlBVF9WT0xVTUVfTkFNRQkJCT0gY3B1X3RvX2xlMzIoICAgICAgMHg2MCksCisJQVRfVk9MVU1FX0lORk9STUFUSU9OCQk9IGNwdV90b19sZTMyKCAgICAgIDB4NzApLAorCUFUX0RBVEEJCQkJPSBjcHVfdG9fbGUzMiggICAgICAweDgwKSwKKwlBVF9JTkRFWF9ST09UCQkJPSBjcHVfdG9fbGUzMiggICAgICAweDkwKSwKKwlBVF9JTkRFWF9BTExPQ0FUSU9OCQk9IGNwdV90b19sZTMyKCAgICAgIDB4YTApLAorCUFUX0JJVE1BUAkJCT0gY3B1X3RvX2xlMzIoICAgICAgMHhiMCksCisJQVRfUkVQQVJTRV9QT0lOVAkJPSBjcHVfdG9fbGUzMiggICAgICAweGMwKSwKKwlBVF9FQV9JTkZPUk1BVElPTgkJPSBjcHVfdG9fbGUzMiggICAgICAweGQwKSwKKwlBVF9FQQkJCQk9IGNwdV90b19sZTMyKCAgICAgIDB4ZTApLAorCUFUX1BST1BFUlRZX1NFVAkJCT0gY3B1X3RvX2xlMzIoICAgICAgMHhmMCksCisJQVRfTE9HR0VEX1VUSUxJVFlfU1RSRUFNCT0gY3B1X3RvX2xlMzIoICAgICAweDEwMCksCisJQVRfRklSU1RfVVNFUl9ERUZJTkVEX0FUVFJJQlVURQk9IGNwdV90b19sZTMyKCAgICAweDEwMDApLAorCUFUX0VORAkJCQk9IGNwdV90b19sZTMyKDB4ZmZmZmZmZmYpCiB9OwogCiB0eXBlZGVmIGxlMzIgQVRUUl9UWVBFOwpAQCAtNTM5LDEzICs1MjgsMTMgQEAKICAqCWVxdWFsIHRoZW4gdGhlIHNlY29uZCBsZTMyIHZhbHVlcyB3b3VsZCBiZSBjb21wYXJlZCwgZXRjLgogICovCiBlbnVtIHsKLQlDT0xMQVRJT05fQklOQVJZCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDApLAotCUNPTExBVElPTl9GSUxFX05BTUUJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMSksCi0JQ09MTEFUSU9OX1VOSUNPREVfU1RSSU5HCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMiksCi0JQ09MTEFUSU9OX05UT0ZTX1VMT05HCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MTApLAotCUNPTExBVElPTl9OVE9GU19TSUQJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgxMSksCi0JQ09MTEFUSU9OX05UT0ZTX1NFQ1VSSVRZX0hBU0gJPSBjb25zdF9jcHVfdG9fbGUzMigweDEyKSwKLQlDT0xMQVRJT05fTlRPRlNfVUxPTkdTCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MTMpLAorCUNPTExBVElPTl9CSU5BUlkJCT0gY3B1X3RvX2xlMzIoMHgwMCksCisJQ09MTEFUSU9OX0ZJTEVfTkFNRQkJPSBjcHVfdG9fbGUzMigweDAxKSwKKwlDT0xMQVRJT05fVU5JQ09ERV9TVFJJTkcJPSBjcHVfdG9fbGUzMigweDAyKSwKKwlDT0xMQVRJT05fTlRPRlNfVUxPTkcJCT0gY3B1X3RvX2xlMzIoMHgxMCksCisJQ09MTEFUSU9OX05UT0ZTX1NJRAkJPSBjcHVfdG9fbGUzMigweDExKSwKKwlDT0xMQVRJT05fTlRPRlNfU0VDVVJJVFlfSEFTSAk9IGNwdV90b19sZTMyKDB4MTIpLAorCUNPTExBVElPTl9OVE9GU19VTE9OR1MJCT0gY3B1X3RvX2xlMzIoMHgxMyksCiB9OwogCiB0eXBlZGVmIGxlMzIgQ09MTEFUSU9OX1JVTEU7CkBAIC01NTksMjUgKzU0OCwyNSBAQAogICogTlQ0LgogICovCiBlbnVtIHsKLQlBVFRSX0RFRl9JTkRFWEFCTEUJPSBjb25zdF9jcHVfdG9fbGUzMigweDAyKSwgLyogQXR0cmlidXRlIGNhbiBiZQorCUFUVFJfREVGX0lOREVYQUJMRQk9IGNwdV90b19sZTMyKDB4MDIpLCAvKiBBdHRyaWJ1dGUgY2FuIGJlCiAJCQkJCWluZGV4ZWQuICovCi0JQVRUUl9ERUZfTVVMVElQTEUJPSBjb25zdF9jcHVfdG9fbGUzMigweDA0KSwgLyogQXR0cmlidXRlIHR5cGUKKwlBVFRSX0RFRl9NVUxUSVBMRQk9IGNwdV90b19sZTMyKDB4MDQpLCAvKiBBdHRyaWJ1dGUgdHlwZQogCQkJCQljYW4gYmUgcHJlc2VudCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUKIAkJCQkJbWZ0IHJlY29yZHMgb2YgYW4gaW5vZGUuICovCi0JQVRUUl9ERUZfTk9UX1pFUk8JPSBjb25zdF9jcHVfdG9fbGUzMigweDA4KSwgLyogQXR0cmlidXRlIHZhbHVlCisJQVRUUl9ERUZfTk9UX1pFUk8JPSBjcHVfdG9fbGUzMigweDA4KSwgLyogQXR0cmlidXRlIHZhbHVlCiAJCQkJCW11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgbm9uLXplcm8KIAkJCQkJYnl0ZS4gKi8KLQlBVFRSX0RFRl9JTkRFWEVEX1VOSVFVRQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MTApLCAvKiBBdHRyaWJ1dGUgbXVzdCBiZQorCUFUVFJfREVGX0lOREVYRURfVU5JUVVFCT0gY3B1X3RvX2xlMzIoMHgxMCksIC8qIEF0dHJpYnV0ZSBtdXN0IGJlCiAJCQkJCWluZGV4ZWQgYW5kIHRoZSBhdHRyaWJ1dGUgdmFsdWUgbXVzdCBiZQogCQkJCQl1bmlxdWUgZm9yIHRoZSBhdHRyaWJ1dGUgdHlwZSBpbiBhbGwgb2YKIAkJCQkJdGhlIG1mdCByZWNvcmRzIG9mIGFuIGlub2RlLiAqLwotCUFUVFJfREVGX05BTUVEX1VOSVFVRQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MjApLCAvKiBBdHRyaWJ1dGUgbXVzdCBiZQorCUFUVFJfREVGX05BTUVEX1VOSVFVRQk9IGNwdV90b19sZTMyKDB4MjApLCAvKiBBdHRyaWJ1dGUgbXVzdCBiZQogCQkJCQluYW1lZCBhbmQgdGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgZm9yCiAJCQkJCXRoZSBhdHRyaWJ1dGUgdHlwZSBpbiBhbGwgb2YgdGhlIG1mdAogCQkJCQlyZWNvcmRzIG9mIGFuIGlub2RlLiAqLwotCUFUVFJfREVGX1JFU0lERU5UCT0gY29uc3RfY3B1X3RvX2xlMzIoMHg0MCksIC8qIEF0dHJpYnV0ZSBtdXN0IGJlCisJQVRUUl9ERUZfUkVTSURFTlQJPSBjcHVfdG9fbGUzMigweDQwKSwgLyogQXR0cmlidXRlIG11c3QgYmUKIAkJCQkJcmVzaWRlbnQuICovCi0JQVRUUl9ERUZfQUxXQVlTX0xPRwk9IGNvbnN0X2NwdV90b19sZTMyKDB4ODApLCAvKiBBbHdheXMgbG9nCisJQVRUUl9ERUZfQUxXQVlTX0xPRwk9IGNwdV90b19sZTMyKDB4ODApLCAvKiBBbHdheXMgbG9nCiAJCQkJCW1vZGlmaWNhdGlvbnMgdG8gdGhpcyBhdHRyaWJ1dGUsCiAJCQkJCXJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyByZXNpZGVudCBvcgogCQkJCQlub24tcmVzaWRlbnQuICBXaXRob3V0IHRoaXMsIG9ubHkgbG9nCkBAIC02MTQsMTIgKzYwMywxMiBAQAogICogQXR0cmlidXRlIGZsYWdzICgxNi1iaXQpLgogICovCiBlbnVtIHsKLQlBVFRSX0lTX0NPTVBSRVNTRUQgICAgPSBjb25zdF9jcHVfdG9fbGUxNigweDAwMDEpLAotCUFUVFJfQ09NUFJFU1NJT05fTUFTSyA9IGNvbnN0X2NwdV90b19sZTE2KDB4MDBmZiksIC8qIENvbXByZXNzaW9uIG1ldGhvZAorCUFUVFJfSVNfQ09NUFJFU1NFRCAgICA9IGNwdV90b19sZTE2KDB4MDAwMSksCisJQVRUUl9DT01QUkVTU0lPTl9NQVNLID0gY3B1X3RvX2xlMTYoMHgwMGZmKSwgLyogQ29tcHJlc3Npb24gbWV0aG9kCiAJCQkJCQkJICAgICAgbWFzay4gIEFsc28sIGZpcnN0CiAJCQkJCQkJICAgICAgaWxsZWdhbCB2YWx1ZS4gKi8KLQlBVFRSX0lTX0VOQ1JZUFRFRCAgICAgPSBjb25zdF9jcHVfdG9fbGUxNigweDQwMDApLAotCUFUVFJfSVNfU1BBUlNFCSAgICAgID0gY29uc3RfY3B1X3RvX2xlMTYoMHg4MDAwKSwKKwlBVFRSX0lTX0VOQ1JZUFRFRCAgICAgPSBjcHVfdG9fbGUxNigweDQwMDApLAorCUFUVFJfSVNfU1BBUlNFCSAgICAgID0gY3B1X3RvX2xlMTYoMHg4MDAwKSwKIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKIAogdHlwZWRlZiBsZTE2IEFUVFJfRkxBR1M7CkBAIC04MTEsMzIgKzgwMCwzMiBAQAogICogZmxhZ3MgYXBwZWFyIGluIGFsbCBvZiB0aGUgYWJvdmUuCiAgKi8KIGVudW0gewotCUZJTEVfQVRUUl9SRUFET05MWQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKLQlGSUxFX0FUVFJfSElEREVOCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpLAotCUZJTEVfQVRUUl9TWVNURU0JCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCksCi0JLyogT2xkIERPUyB2b2xpZC4gVW51c2VkIGluIE5ULgk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDgpLCAqLworCUZJTEVfQVRUUl9SRUFET05MWQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKKwlGSUxFX0FUVFJfSElEREVOCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDIpLAorCUZJTEVfQVRUUl9TWVNURU0JCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCksCisJLyogT2xkIERPUyB2b2xpZC4gVW51c2VkIGluIE5ULgk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDgpLCAqLwogCi0JRklMRV9BVFRSX0RJUkVDVE9SWQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDEwKSwKKwlGSUxFX0FUVFJfRElSRUNUT1JZCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMTApLAogCS8qIE5vdGUsIEZJTEVfQVRUUl9ESVJFQ1RPUlkgaXMgbm90IGNvbnNpZGVyZWQgdmFsaWQgaW4gTlQuICBJdCBpcwogCSAgIHJlc2VydmVkIGZvciB0aGUgRE9TIFNVQkRJUkVDVE9SWSBmbGFnLiAqLwotCUZJTEVfQVRUUl9BUkNISVZFCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMjApLAotCUZJTEVfQVRUUl9ERVZJQ0UJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCksCi0JRklMRV9BVFRSX05PUk1BTAkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDgwKSwKKwlGSUxFX0FUVFJfQVJDSElWRQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDIwKSwKKwlGSUxFX0FUVFJfREVWSUNFCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwNDApLAorCUZJTEVfQVRUUl9OT1JNQUwJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCksCiAKLQlGSUxFX0FUVFJfVEVNUE9SQVJZCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAxMDApLAotCUZJTEVfQVRUUl9TUEFSU0VfRklMRQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMjAwKSwKLQlGSUxFX0FUVFJfUkVQQVJTRV9QT0lOVAkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwNDAwKSwKLQlGSUxFX0FUVFJfQ09NUFJFU1NFRAkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwODAwKSwKKwlGSUxFX0FUVFJfVEVNUE9SQVJZCQk9IGNwdV90b19sZTMyKDB4MDAwMDAxMDApLAorCUZJTEVfQVRUUl9TUEFSU0VfRklMRQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMjAwKSwKKwlGSUxFX0FUVFJfUkVQQVJTRV9QT0lOVAkJPSBjcHVfdG9fbGUzMigweDAwMDAwNDAwKSwKKwlGSUxFX0FUVFJfQ09NUFJFU1NFRAkJPSBjcHVfdG9fbGUzMigweDAwMDAwODAwKSwKIAotCUZJTEVfQVRUUl9PRkZMSU5FCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDEwMDApLAotCUZJTEVfQVRUUl9OT1RfQ09OVEVOVF9JTkRFWEVECT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMjAwMCksCi0JRklMRV9BVFRSX0VOQ1JZUFRFRAkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDA0MDAwKSwKKwlGSUxFX0FUVFJfT0ZGTElORQkJPSBjcHVfdG9fbGUzMigweDAwMDAxMDAwKSwKKwlGSUxFX0FUVFJfTk9UX0NPTlRFTlRfSU5ERVhFRAk9IGNwdV90b19sZTMyKDB4MDAwMDIwMDApLAorCUZJTEVfQVRUUl9FTkNSWVBURUQJCT0gY3B1X3RvX2xlMzIoMHgwMDAwNDAwMCksCiAKLQlGSUxFX0FUVFJfVkFMSURfRkxBR1MJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwN2ZiNyksCisJRklMRV9BVFRSX1ZBTElEX0ZMQUdTCQk9IGNwdV90b19sZTMyKDB4MDAwMDdmYjcpLAogCS8qIE5vdGUsIEZJTEVfQVRUUl9WQUxJRF9GTEFHUyBtYXNrcyBvdXQgdGhlIG9sZCBET1MgVm9sSWQgYW5kIHRoZQogCSAgIEZJTEVfQVRUUl9ERVZJQ0UgYW5kIHByZXNlcnZlcyBldmVyeXRoaW5nIGVsc2UuICBUaGlzIG1hc2sgaXMgdXNlZAogCSAgIHRvIG9idGFpbiBhbGwgZmxhZ3MgdGhhdCBhcmUgdmFsaWQgZm9yIHJlYWRpbmcuICovCi0JRklMRV9BVFRSX1ZBTElEX1NFVF9GTEFHUwk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDMxYTcpLAorCUZJTEVfQVRUUl9WQUxJRF9TRVRfRkxBR1MJPSBjcHVfdG9fbGUzMigweDAwMDAzMWE3KSwKIAkvKiBOb3RlLCBGSUxFX0FUVFJfVkFMSURfU0VUX0ZMQUdTIG1hc2tzIG91dCB0aGUgb2xkIERPUyBWb2xJZCwgdGhlCiAJICAgRl9BX0RFVklDRSwgRl9BX0RJUkVDVE9SWSwgRl9BX1NQQVJTRV9GSUxFLCBGX0FfUkVQQVJTRV9QT0lOVCwKIAkgICBGX0FfQ09NUFJFU1NFRCwgYW5kIEZfQV9FTkNSWVBURUQgYW5kIHByZXNlcnZlcyB0aGUgcmVzdC4gIFRoaXMgbWFzawpAQCAtODQ2LDExICs4MzUsMTEgQEAKIAkgKiBGSUxFTkFNRV9BVFRSIGF0dHJpYnV0ZXMgYnV0IG5vdCBpbiB0aGUgU1RBTkRBUkRfSU5GT1JNQVRJT04KIAkgKiBhdHRyaWJ1dGUgb2YgYW4gbWZ0IHJlY29yZC4KIAkgKi8KLQlGSUxFX0FUVFJfRFVQX0ZJTEVfTkFNRV9JTkRFWF9QUkVTRU5UCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgxMDAwMDAwMCksCisJRklMRV9BVFRSX0RVUF9GSUxFX05BTUVfSU5ERVhfUFJFU0VOVAk9IGNwdV90b19sZTMyKDB4MTAwMDAwMDApLAogCS8qIE5vdGUsIHRoaXMgaXMgYSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBmcm9tIHRoZSBtZnQgcmVjb3JkLAogCSAgIHRlbGxpbmcgdXMgd2hldGhlciB0aGlzIGlzIGEgZGlyZWN0b3J5IG9yIG5vdCwgaS5lLiB3aGV0aGVyIGl0IGhhcwogCSAgIGFuIGluZGV4IHJvb3QgYXR0cmlidXRlIG9yIG5vdC4gKi8KLQlGSUxFX0FUVFJfRFVQX1ZJRVdfSU5ERVhfUFJFU0VOVAk9IGNvbnN0X2NwdV90b19sZTMyKDB4MjAwMDAwMDApLAorCUZJTEVfQVRUUl9EVVBfVklFV19JTkRFWF9QUkVTRU5UCT0gY3B1X3RvX2xlMzIoMHgyMDAwMDAwMCksCiAJLyogTm90ZSwgdGhpcyBpcyBhIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGZyb20gdGhlIG1mdCByZWNvcmQsCiAJICAgdGVsbGluZyB1cyB3aGV0aGVyIHRoaXMgZmlsZSBoYXMgYSB2aWV3IGluZGV4IHByZXNlbnQgKGVnLiBvYmplY3QgaWQKIAkgICBpbmRleCwgcXVvdGEgaW5kZXgsIG9uZSBvZiB0aGUgc2VjdXJpdHkgaW5kZXhlcyBvciB0aGUgZW5jcnlwdGluZwpAQCAtMTQ0Niw0MiArMTQzNSw0MiBAQAogCS8qIFNwZWNpZmljIHJpZ2h0cyBmb3IgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGFyZSBhcyBmb2xsb3dzOiAqLwogCiAJLyogUmlnaHQgdG8gcmVhZCBkYXRhIGZyb20gdGhlIGZpbGUuIChGSUxFKSAqLwotCUZJTEVfUkVBRF9EQVRBCQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKKwlGSUxFX1JFQURfREFUQQkJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSksCiAJLyogUmlnaHQgdG8gbGlzdCBjb250ZW50cyBvZiBhIGRpcmVjdG9yeS4gKERJUkVDVE9SWSkgKi8KLQlGSUxFX0xJU1RfRElSRUNUT1JZCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpLAorCUZJTEVfTElTVF9ESVJFQ1RPUlkJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSksCiAKIAkvKiBSaWdodCB0byB3cml0ZSBkYXRhIHRvIHRoZSBmaWxlLiAoRklMRSkgKi8KLQlGSUxFX1dSSVRFX0RBVEEJCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpLAorCUZJTEVfV1JJVEVfREFUQQkJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMiksCiAJLyogUmlnaHQgdG8gY3JlYXRlIGEgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LiAoRElSRUNUT1JZKSAqLwotCUZJTEVfQUREX0ZJTEUJCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpLAorCUZJTEVfQUREX0ZJTEUJCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDIpLAogCiAJLyogUmlnaHQgdG8gYXBwZW5kIGRhdGEgdG8gdGhlIGZpbGUuIChGSUxFKSAqLwotCUZJTEVfQVBQRU5EX0RBVEEJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCksCisJRklMRV9BUFBFTkRfREFUQQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDA0KSwKIAkvKiBSaWdodCB0byBjcmVhdGUgYSBzdWJkaXJlY3RvcnkuIChESVJFQ1RPUlkpICovCi0JRklMRV9BRERfU1VCRElSRUNUT1JZCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDQpLAorCUZJTEVfQUREX1NVQkRJUkVDVE9SWQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDA0KSwKIAogCS8qIFJpZ2h0IHRvIHJlYWQgZXh0ZW5kZWQgYXR0cmlidXRlcy4gKEZJTEUvRElSRUNUT1JZKSAqLwotCUZJTEVfUkVBRF9FQQkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCksCisJRklMRV9SRUFEX0VBCQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDA4KSwKIAogCS8qIFJpZ2h0IHRvIHdyaXRlIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIChGSUxFL0RJUkVDVE9SWSkgKi8KLQlGSUxFX1dSSVRFX0VBCQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDEwKSwKKwlGSUxFX1dSSVRFX0VBCQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDEwKSwKIAogCS8qIFJpZ2h0IHRvIGV4ZWN1dGUgYSBmaWxlLiAoRklMRSkgKi8KLQlGSUxFX0VYRUNVVEUJCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMjApLAorCUZJTEVfRVhFQ1VURQkJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCksCiAJLyogUmlnaHQgdG8gdHJhdmVyc2UgdGhlIGRpcmVjdG9yeS4gKERJUkVDVE9SWSkgKi8KLQlGSUxFX1RSQVZFUlNFCQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDIwKSwKKwlGSUxFX1RSQVZFUlNFCQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDIwKSwKIAogCS8qCiAJICogUmlnaHQgdG8gZGVsZXRlIGEgZGlyZWN0b3J5IGFuZCBhbGwgdGhlIGZpbGVzIGl0IGNvbnRhaW5zIChpdHMKIAkgKiBjaGlsZHJlbiksIGV2ZW4gaWYgdGhlIGZpbGVzIGFyZSByZWFkLW9ubHkuIChESVJFQ1RPUlkpCiAJICovCi0JRklMRV9ERUxFVEVfQ0hJTEQJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCksCisJRklMRV9ERUxFVEVfQ0hJTEQJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCksCiAKIAkvKiBSaWdodCB0byByZWFkIGZpbGUgYXR0cmlidXRlcy4gKEZJTEUvRElSRUNUT1JZKSAqLwotCUZJTEVfUkVBRF9BVFRSSUJVVEVTCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwODApLAorCUZJTEVfUkVBRF9BVFRSSUJVVEVTCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwODApLAogCiAJLyogUmlnaHQgdG8gY2hhbmdlIGZpbGUgYXR0cmlidXRlcy4gKEZJTEUvRElSRUNUT1JZKSAqLwotCUZJTEVfV1JJVEVfQVRUUklCVVRFUwkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMTAwKSwKKwlGSUxFX1dSSVRFX0FUVFJJQlVURVMJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCksCiAKIAkvKgogCSAqIFRoZSBzdGFuZGFyZCByaWdodHMgKGJpdHMgMTYgdG8gMjMpLiAgVGhlc2UgYXJlIGluZGVwZW5kZW50IG9mIHRoZQpAQCAtMTQ4OSwyNyArMTQ3OCwyNyBAQAogCSAqLwogCiAJLyogUmlnaHQgdG8gZGVsZXRlIHRoZSBvYmplY3QuICovCi0JREVMRVRFCQkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAxMDAwMCksCisJREVMRVRFCQkJCT0gY3B1X3RvX2xlMzIoMHgwMDAxMDAwMCksCiAKIAkvKgogCSAqIFJpZ2h0IHRvIHJlYWQgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBvYmplY3QncyBzZWN1cml0eSBkZXNjcmlwdG9yLAogCSAqIG5vdCBpbmNsdWRpbmcgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBTQUNMLCBpLmUuIHJpZ2h0IHRvIHJlYWQgdGhlCiAJICogc2VjdXJpdHkgZGVzY3JpcHRvciBhbmQgb3duZXIuCiAJICovCi0JUkVBRF9DT05UUk9MCQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDIwMDAwKSwKKwlSRUFEX0NPTlRST0wJCQk9IGNwdV90b19sZTMyKDB4MDAwMjAwMDApLAogCiAJLyogUmlnaHQgdG8gbW9kaWZ5IHRoZSBEQUNMIGluIHRoZSBvYmplY3QncyBzZWN1cml0eSBkZXNjcmlwdG9yLiAqLwotCVdSSVRFX0RBQwkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDA0MDAwMCksCisJV1JJVEVfREFDCQkJPSBjcHVfdG9fbGUzMigweDAwMDQwMDAwKSwKIAogCS8qIFJpZ2h0IHRvIGNoYW5nZSB0aGUgb3duZXIgaW4gdGhlIG9iamVjdCdzIHNlY3VyaXR5IGRlc2NyaXB0b3IuICovCi0JV1JJVEVfT1dORVIJCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwODAwMDApLAorCVdSSVRFX09XTkVSCQkJPSBjcHVfdG9fbGUzMigweDAwMDgwMDAwKSwKIAogCS8qCiAJICogUmlnaHQgdG8gdXNlIHRoZSBvYmplY3QgZm9yIHN5bmNocm9uaXphdGlvbi4gIEVuYWJsZXMgYSBwcm9jZXNzIHRvCiAJICogd2FpdCB1bnRpbCB0aGUgb2JqZWN0IGlzIGluIHRoZSBzaWduYWxsZWQgc3RhdGUuICBTb21lIG9iamVjdCB0eXBlcwogCSAqIGRvIG5vdCBzdXBwb3J0IHRoaXMgYWNjZXNzIHJpZ2h0LgogCSAqLwotCVNZTkNIUk9OSVpFCQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMTAwMDAwKSwKKwlTWU5DSFJPTklaRQkJCT0gY3B1X3RvX2xlMzIoMHgwMDEwMDAwMCksCiAKIAkvKgogCSAqIFRoZSBmb2xsb3dpbmcgU1RBTkRBUkRfUklHSFRTXyogYXJlIGNvbWJpbmF0aW9ucyBvZiB0aGUgYWJvdmUgZm9yCkBAIC0xNTE3LDI1ICsxNTA2LDI1IEBACiAJICovCiAKIAkvKiBUaGVzZSBhcmUgY3VycmVudGx5IGRlZmluZWQgdG8gUkVBRF9DT05UUk9MLiAqLwotCVNUQU5EQVJEX1JJR0hUU19SRUFECQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMjAwMDApLAotCVNUQU5EQVJEX1JJR0hUU19XUklURQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDIwMDAwKSwKLQlTVEFOREFSRF9SSUdIVFNfRVhFQ1VURQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDIwMDAwKSwKKwlTVEFOREFSRF9SSUdIVFNfUkVBRAkJPSBjcHVfdG9fbGUzMigweDAwMDIwMDAwKSwKKwlTVEFOREFSRF9SSUdIVFNfV1JJVEUJCT0gY3B1X3RvX2xlMzIoMHgwMDAyMDAwMCksCisJU1RBTkRBUkRfUklHSFRTX0VYRUNVVEUJCT0gY3B1X3RvX2xlMzIoMHgwMDAyMDAwMCksCiAKIAkvKiBDb21iaW5lcyBERUxFVEUsIFJFQURfQ09OVFJPTCwgV1JJVEVfREFDLCBhbmQgV1JJVEVfT1dORVIgYWNjZXNzLiAqLwotCVNUQU5EQVJEX1JJR0hUU19SRVFVSVJFRAk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwZjAwMDApLAorCVNUQU5EQVJEX1JJR0hUU19SRVFVSVJFRAk9IGNwdV90b19sZTMyKDB4MDAwZjAwMDApLAogCiAJLyoKIAkgKiBDb21iaW5lcyBERUxFVEUsIFJFQURfQ09OVFJPTCwgV1JJVEVfREFDLCBXUklURV9PV05FUiwgYW5kCiAJICogU1lOQ0hST05JWkUgYWNjZXNzLgogCSAqLwotCVNUQU5EQVJEX1JJR0hUU19BTEwJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDFmMDAwMCksCisJU1RBTkRBUkRfUklHSFRTX0FMTAkJPSBjcHVfdG9fbGUzMigweDAwMWYwMDAwKSwKIAogCS8qCiAJICogVGhlIGFjY2VzcyBzeXN0ZW0gQUNMIGFuZCBtYXhpbXVtIGFsbG93ZWQgYWNjZXNzIHR5cGVzIChiaXRzIDI0IHRvCiAJICogMjUsIGJpdHMgMjYgdG8gMjcgYXJlIHJlc2VydmVkKS4KIAkgKi8KLQlBQ0NFU1NfU1lTVEVNX1NFQ1VSSVRZCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDEwMDAwMDApLAotCU1BWElNVU1fQUxMT1dFRAkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMjAwMDAwMCksCisJQUNDRVNTX1NZU1RFTV9TRUNVUklUWQkJPSBjcHVfdG9fbGUzMigweDAxMDAwMDAwKSwKKwlNQVhJTVVNX0FMTE9XRUQJCQk9IGNwdV90b19sZTMyKDB4MDIwMDAwMDApLAogCiAJLyoKIAkgKiBUaGUgZ2VuZXJpYyByaWdodHMgKGJpdHMgMjggdG8gMzEpLiAgVGhlc2UgbWFwIG9udG8gdGhlIHN0YW5kYXJkIGFuZApAQCAtMTU0MywxMCArMTUzMiwxMCBAQAogCSAqLwogCiAJLyogUmVhZCwgd3JpdGUsIGFuZCBleGVjdXRlIGFjY2Vzcy4gKi8KLQlHRU5FUklDX0FMTAkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgxMDAwMDAwMCksCisJR0VORVJJQ19BTEwJCQk9IGNwdV90b19sZTMyKDB4MTAwMDAwMDApLAogCiAJLyogRXhlY3V0ZSBhY2Nlc3MuICovCi0JR0VORVJJQ19FWEVDVVRFCQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDIwMDAwMDAwKSwKKwlHRU5FUklDX0VYRUNVVEUJCQk9IGNwdV90b19sZTMyKDB4MjAwMDAwMDApLAogCiAJLyoKIAkgKiBXcml0ZSBhY2Nlc3MuICBGb3IgZmlsZXMsIHRoaXMgbWFwcyBvbnRvOgpAQCAtMTU1NSw3ICsxNTQ0LDcgQEAKIAkgKiBGb3IgZGlyZWN0b3JpZXMsIHRoZSBtYXBwaW5nIGhhcyB0aGUgc2FtZSBudW1lcmljYWwgdmFsdWUuICBTZWUKIAkgKiBhYm92ZSBmb3IgdGhlIGRlc2NyaXB0aW9ucyBvZiB0aGUgcmlnaHRzIGdyYW50ZWQuCiAJICovCi0JR0VORVJJQ19XUklURQkJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHg0MDAwMDAwMCksCisJR0VORVJJQ19XUklURQkJCT0gY3B1X3RvX2xlMzIoMHg0MDAwMDAwMCksCiAKIAkvKgogCSAqIFJlYWQgYWNjZXNzLiAgRm9yIGZpbGVzLCB0aGlzIG1hcHMgb250bzoKQEAgLTE1NjQsNyArMTU1Myw3IEBACiAJICogRm9yIGRpcmVjdG9yaWVzLCB0aGUgbWFwcGluZyBoYXMgdGhlIHNhbWUgbnVtYmVyaWNhbCB2YWx1ZS4gIFNlZQogCSAqIGFib3ZlIGZvciB0aGUgZGVzY3JpcHRpb25zIG9mIHRoZSByaWdodHMgZ3JhbnRlZC4KIAkgKi8KLQlHRU5FUklDX1JFQUQJCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4ODAwMDAwMDApLAorCUdFTkVSSUNfUkVBRAkJCT0gY3B1X3RvX2xlMzIoMHg4MDAwMDAwMCksCiB9OwogCiB0eXBlZGVmIGxlMzIgQUNDRVNTX01BU0s7CkBAIC0xNjA0LDggKzE1OTMsOCBAQAogICogVGhlIG9iamVjdCBBQ0UgZmxhZ3MgKDMyLWJpdCkuCiAgKi8KIGVudW0gewotCUFDRV9PQkpFQ1RfVFlQRV9QUkVTRU5UCQkJPSBjb25zdF9jcHVfdG9fbGUzMigxKSwKLQlBQ0VfSU5IRVJJVEVEX09CSkVDVF9UWVBFX1BSRVNFTlQJPSBjb25zdF9jcHVfdG9fbGUzMigyKSwKKwlBQ0VfT0JKRUNUX1RZUEVfUFJFU0VOVAkJCT0gY3B1X3RvX2xlMzIoMSksCisJQUNFX0lOSEVSSVRFRF9PQkpFQ1RfVFlQRV9QUkVTRU5UCT0gY3B1X3RvX2xlMzIoMiksCiB9OwogCiB0eXBlZGVmIGxlMzIgT0JKRUNUX0FDRV9GTEFHUzsKQEAgLTE3MDYsMjMgKzE2OTUsMjMgQEAKICAqCWV4cHJlc3NlZCBhcyBvZmZzZXRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VjdXJpdHkgZGVzY3JpcHRvci4KICAqLwogZW51bSB7Ci0JU0VfT1dORVJfREVGQVVMVEVECQk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDAwMSksCi0JU0VfR1JPVVBfREVGQVVMVEVECQk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDAwMiksCi0JU0VfREFDTF9QUkVTRU5UCQkJPSBjb25zdF9jcHVfdG9fbGUxNigweDAwMDQpLAotCVNFX0RBQ0xfREVGQVVMVEVECQk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDAwOCksCisJU0VfT1dORVJfREVGQVVMVEVECQk9IGNwdV90b19sZTE2KDB4MDAwMSksCisJU0VfR1JPVVBfREVGQVVMVEVECQk9IGNwdV90b19sZTE2KDB4MDAwMiksCisJU0VfREFDTF9QUkVTRU5UCQkJPSBjcHVfdG9fbGUxNigweDAwMDQpLAorCVNFX0RBQ0xfREVGQVVMVEVECQk9IGNwdV90b19sZTE2KDB4MDAwOCksCiAKLQlTRV9TQUNMX1BSRVNFTlQJCQk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDAxMCksCi0JU0VfU0FDTF9ERUZBVUxURUQJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDIwKSwKKwlTRV9TQUNMX1BSRVNFTlQJCQk9IGNwdV90b19sZTE2KDB4MDAxMCksCisJU0VfU0FDTF9ERUZBVUxURUQJCT0gY3B1X3RvX2xlMTYoMHgwMDIwKSwKIAotCVNFX0RBQ0xfQVVUT19JTkhFUklUX1JFUQk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDEwMCksCi0JU0VfU0FDTF9BVVRPX0lOSEVSSVRfUkVRCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMjAwKSwKLQlTRV9EQUNMX0FVVE9fSU5IRVJJVEVECQk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDQwMCksCi0JU0VfU0FDTF9BVVRPX0lOSEVSSVRFRAkJPSBjb25zdF9jcHVfdG9fbGUxNigweDA4MDApLAorCVNFX0RBQ0xfQVVUT19JTkhFUklUX1JFUQk9IGNwdV90b19sZTE2KDB4MDEwMCksCisJU0VfU0FDTF9BVVRPX0lOSEVSSVRfUkVRCT0gY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwlTRV9EQUNMX0FVVE9fSU5IRVJJVEVECQk9IGNwdV90b19sZTE2KDB4MDQwMCksCisJU0VfU0FDTF9BVVRPX0lOSEVSSVRFRAkJPSBjcHVfdG9fbGUxNigweDA4MDApLAogCi0JU0VfREFDTF9QUk9URUNURUQJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgxMDAwKSwKLQlTRV9TQUNMX1BST1RFQ1RFRAkJPSBjb25zdF9jcHVfdG9fbGUxNigweDIwMDApLAotCVNFX1JNX0NPTlRST0xfVkFMSUQJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHg0MDAwKSwKLQlTRV9TRUxGX1JFTEFUSVZFCQk9IGNvbnN0X2NwdV90b19sZTE2KDB4ODAwMCkKKwlTRV9EQUNMX1BST1RFQ1RFRAkJPSBjcHVfdG9fbGUxNigweDEwMDApLAorCVNFX1NBQ0xfUFJPVEVDVEVECQk9IGNwdV90b19sZTE2KDB4MjAwMCksCisJU0VfUk1fQ09OVFJPTF9WQUxJRAkJPSBjcHVfdG9fbGUxNigweDQwMDApLAorCVNFX1NFTEZfUkVMQVRJVkUJCT0gY3B1X3RvX2xlMTYoMHg4MDAwKQogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiB0eXBlZGVmIGxlMTYgU0VDVVJJVFlfREVTQ1JJUFRPUl9DT05UUk9MOwpAQCAtMTkxMCwyMSArMTg5OSwyMSBAQAogICogUG9zc2libGUgZmxhZ3MgZm9yIHRoZSB2b2x1bWUgKDE2LWJpdCkuCiAgKi8KIGVudW0gewotCVZPTFVNRV9JU19ESVJUWQkJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDAxKSwKLQlWT0xVTUVfUkVTSVpFX0xPR19GSUxFCQk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDAwMiksCi0JVk9MVU1FX1VQR1JBREVfT05fTU9VTlQJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDA0KSwKLQlWT0xVTUVfTU9VTlRFRF9PTl9OVDQJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDA4KSwKKwlWT0xVTUVfSVNfRElSVFkJCQk9IGNwdV90b19sZTE2KDB4MDAwMSksCisJVk9MVU1FX1JFU0laRV9MT0dfRklMRQkJPSBjcHVfdG9fbGUxNigweDAwMDIpLAorCVZPTFVNRV9VUEdSQURFX09OX01PVU5UCQk9IGNwdV90b19sZTE2KDB4MDAwNCksCisJVk9MVU1FX01PVU5URURfT05fTlQ0CQk9IGNwdV90b19sZTE2KDB4MDAwOCksCiAKLQlWT0xVTUVfREVMRVRFX1VTTl9VTkRFUldBWQk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDAxMCksCi0JVk9MVU1FX1JFUEFJUl9PQkpFQ1RfSUQJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHgwMDIwKSwKKwlWT0xVTUVfREVMRVRFX1VTTl9VTkRFUldBWQk9IGNwdV90b19sZTE2KDB4MDAxMCksCisJVk9MVU1FX1JFUEFJUl9PQkpFQ1RfSUQJCT0gY3B1X3RvX2xlMTYoMHgwMDIwKSwKIAotCVZPTFVNRV9DSEtEU0tfVU5ERVJXQVkJCT0gY29uc3RfY3B1X3RvX2xlMTYoMHg0MDAwKSwKLQlWT0xVTUVfTU9ESUZJRURfQllfQ0hLRFNLCT0gY29uc3RfY3B1X3RvX2xlMTYoMHg4MDAwKSwKKwlWT0xVTUVfQ0hLRFNLX1VOREVSV0FZCQk9IGNwdV90b19sZTE2KDB4NDAwMCksCisJVk9MVU1FX01PRElGSUVEX0JZX0NIS0RTSwk9IGNwdV90b19sZTE2KDB4ODAwMCksCiAKLQlWT0xVTUVfRkxBR1NfTUFTSwkJPSBjb25zdF9jcHVfdG9fbGUxNigweGMwM2YpLAorCVZPTFVNRV9GTEFHU19NQVNLCQk9IGNwdV90b19sZTE2KDB4YzAzZiksCiAKIAkvKiBUbyBtYWtlIG91ciBsaWZlIGVhc2llciB3aGVuIGNoZWNraW5nIGlmIHdlIG11c3QgbW91bnQgcmVhZC1vbmx5LiAqLwotCVZPTFVNRV9NVVNUX01PVU5UX1JPX01BU0sJPSBjb25zdF9jcHVfdG9fbGUxNigweGMwMjcpLAorCVZPTFVNRV9NVVNUX01PVU5UX1JPX01BU0sJPSBjcHVfdG9fbGUxNigweGMwMjcpLAogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiB0eXBlZGVmIGxlMTYgVk9MVU1FX0ZMQUdTOwpAQCAtMjEwOSwyNiArMjA5OCwyNiBAQAogICogVGhlIHVzZXIgcXVvdGEgZmxhZ3MuICBOYW1lcyBleHBsYWluIG1lYW5pbmcuCiAgKi8KIGVudW0gewotCVFVT1RBX0ZMQUdfREVGQVVMVF9MSU1JVFMJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKLQlRVU9UQV9GTEFHX0xJTUlUX1JFQUNIRUQJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDAyKSwKLQlRVU9UQV9GTEFHX0lEX0RFTEVURUQJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCksCisJUVVPVEFfRkxBR19ERUZBVUxUX0xJTUlUUwk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDEpLAorCVFVT1RBX0ZMQUdfTElNSVRfUkVBQ0hFRAk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDIpLAorCVFVT1RBX0ZMQUdfSURfREVMRVRFRAkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDA0KSwKIAotCVFVT1RBX0ZMQUdfVVNFUl9NQVNLCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDcpLAorCVFVT1RBX0ZMQUdfVVNFUl9NQVNLCQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDcpLAogCS8qIFRoaXMgaXMgYSBiaXQgbWFzayBmb3IgdGhlIHVzZXIgcXVvdGEgZmxhZ3MuICovCiAKIAkvKgogCSAqIFRoZXNlIGZsYWdzIGFyZSBvbmx5IHByZXNlbnQgaW4gdGhlIHF1b3RhIGRlZmF1bHRzIGluZGV4IGVudHJ5LCBpLmUuCiAJICogaW4gdGhlIGVudHJ5IHdoZXJlIG93bmVyX2lkID0gUVVPVEFfREVGQVVMVFNfSUQuCiAJICovCi0JUVVPVEFfRkxBR19UUkFDS0lOR19FTkFCTEVECT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAxMCksCi0JUVVPVEFfRkxBR19FTkZPUkNFTUVOVF9FTkFCTEVECT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCksCi0JUVVPVEFfRkxBR19UUkFDS0lOR19SRVFVRVNURUQJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDQwKSwKLQlRVU9UQV9GTEFHX0xPR19USFJFU0hPTEQJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDgwKSwKKwlRVU9UQV9GTEFHX1RSQUNLSU5HX0VOQUJMRUQJPSBjcHVfdG9fbGUzMigweDAwMDAwMDEwKSwKKwlRVU9UQV9GTEFHX0VORk9SQ0VNRU5UX0VOQUJMRUQJPSBjcHVfdG9fbGUzMigweDAwMDAwMDIwKSwKKwlRVU9UQV9GTEFHX1RSQUNLSU5HX1JFUVVFU1RFRAk9IGNwdV90b19sZTMyKDB4MDAwMDAwNDApLAorCVFVT1RBX0ZMQUdfTE9HX1RIUkVTSE9MRAk9IGNwdV90b19sZTMyKDB4MDAwMDAwODApLAogCi0JUVVPVEFfRkxBR19MT0dfTElNSVQJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCksCi0JUVVPVEFfRkxBR19PVVRfT0ZfREFURQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMjAwKSwKLQlRVU9UQV9GTEFHX0NPUlJVUFQJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDQwMCksCi0JUVVPVEFfRkxBR19QRU5ESU5HX0RFTEVURVMJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwODAwKSwKKwlRVU9UQV9GTEFHX0xPR19MSU1JVAkJPSBjcHVfdG9fbGUzMigweDAwMDAwMTAwKSwKKwlRVU9UQV9GTEFHX09VVF9PRl9EQVRFCQk9IGNwdV90b19sZTMyKDB4MDAwMDAyMDApLAorCVFVT1RBX0ZMQUdfQ09SUlVQVAkJPSBjcHVfdG9fbGUzMigweDAwMDAwNDAwKSwKKwlRVU9UQV9GTEFHX1BFTkRJTkdfREVMRVRFUwk9IGNwdV90b19sZTMyKDB4MDAwMDA4MDApLAogfTsKIAogdHlwZWRlZiBsZTMyIFFVT1RBX0ZMQUdTOwpAQCAtMjE3Miw5ICsyMTYxLDkgQEAKICAqIFByZWRlZmluZWQgb3duZXJfaWQgdmFsdWVzICgzMi1iaXQpLgogICovCiBlbnVtIHsKLQlRVU9UQV9JTlZBTElEX0lECT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCi0JUVVPVEFfREVGQVVMVFNfSUQJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKLQlRVU9UQV9GSVJTVF9VU0VSX0lECT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCksCisJUVVPVEFfSU5WQUxJRF9JRAk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAorCVFVT1RBX0RFRkFVTFRTX0lECT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSksCisJUVVPVEFfRklSU1RfVVNFUl9JRAk9IGNwdV90b19sZTMyKDB4MDAwMDAxMDApLAogfTsKIAogLyoKQEAgLTIxODksMTQgKzIxNzgsMTQgQEAKICAqIEluZGV4IGVudHJ5IGZsYWdzICgxNi1iaXQpLgogICovCiBlbnVtIHsKLQlJTkRFWF9FTlRSWV9OT0RFID0gY29uc3RfY3B1X3RvX2xlMTYoMSksIC8qIFRoaXMgZW50cnkgY29udGFpbnMgYQorCUlOREVYX0VOVFJZX05PREUgPSBjcHVfdG9fbGUxNigxKSwgLyogVGhpcyBlbnRyeSBjb250YWlucyBhCiAJCQlzdWItbm9kZSwgaS5lLiBhIHJlZmVyZW5jZSB0byBhbiBpbmRleCBibG9jayBpbiBmb3JtIG9mCiAJCQlhIHZpcnR1YWwgY2x1c3RlciBudW1iZXIgKHNlZSBiZWxvdykuICovCi0JSU5ERVhfRU5UUllfRU5EICA9IGNvbnN0X2NwdV90b19sZTE2KDIpLCAvKiBUaGlzIHNpZ25pZmllcyB0aGUgbGFzdAorCUlOREVYX0VOVFJZX0VORCAgPSBjcHVfdG9fbGUxNigyKSwgLyogVGhpcyBzaWduaWZpZXMgdGhlIGxhc3QKIAkJCWVudHJ5IGluIGFuIGluZGV4IGJsb2NrLiAgVGhlIGluZGV4IGVudHJ5IGRvZXMgbm90CiAJCQlyZXByZXNlbnQgYSBmaWxlIGJ1dCBpdCBjYW4gcG9pbnQgdG8gYSBzdWItbm9kZS4gKi8KIAotCUlOREVYX0VOVFJZX1NQQUNFX0ZJTExFUiA9IGNvbnN0X2NwdV90b19sZTE2KDB4ZmZmZiksIC8qIGdjYzogRm9yY2UKKwlJTkRFWF9FTlRSWV9TUEFDRV9GSUxMRVIgPSBjcHVfdG9fbGUxNigweGZmZmYpLCAvKiBnY2M6IEZvcmNlCiAJCQllbnVtIGJpdCB3aWR0aCB0byAxNi1iaXQuICovCiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKQEAgLTIzMzQsMjYgKzIzMjMsMjYgQEAKICAqIFRoZXNlIGFyZSB0aGUgcHJlZGVmaW5lZCByZXBhcnNlIHBvaW50IHRhZ3M6CiAgKi8KIGVudW0gewotCUlPX1JFUEFSU0VfVEFHX0lTX0FMSUFTCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MjAwMDAwMDApLAotCUlPX1JFUEFSU0VfVEFHX0lTX0hJR0hfTEFURU5DWQk9IGNvbnN0X2NwdV90b19sZTMyKDB4NDAwMDAwMDApLAotCUlPX1JFUEFSU0VfVEFHX0lTX01JQ1JPU09GVAk9IGNvbnN0X2NwdV90b19sZTMyKDB4ODAwMDAwMDApLAorCUlPX1JFUEFSU0VfVEFHX0lTX0FMSUFTCQk9IGNwdV90b19sZTMyKDB4MjAwMDAwMDApLAorCUlPX1JFUEFSU0VfVEFHX0lTX0hJR0hfTEFURU5DWQk9IGNwdV90b19sZTMyKDB4NDAwMDAwMDApLAorCUlPX1JFUEFSU0VfVEFHX0lTX01JQ1JPU09GVAk9IGNwdV90b19sZTMyKDB4ODAwMDAwMDApLAogCi0JSU9fUkVQQVJTRV9UQUdfUkVTRVJWRURfWkVSTwk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDApLAotCUlPX1JFUEFSU0VfVEFHX1JFU0VSVkVEX09ORQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpLAotCUlPX1JFUEFSU0VfVEFHX1JFU0VSVkVEX1JBTkdFCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSksCisJSU9fUkVQQVJTRV9UQUdfUkVTRVJWRURfWkVSTwk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAorCUlPX1JFUEFSU0VfVEFHX1JFU0VSVkVEX09ORQk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDEpLAorCUlPX1JFUEFSU0VfVEFHX1JFU0VSVkVEX1JBTkdFCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSksCiAKLQlJT19SRVBBUlNFX1RBR19OU1MJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHg2ODAwMDAwNSksCi0JSU9fUkVQQVJTRV9UQUdfTlNTX1JFQ09WRVIJPSBjb25zdF9jcHVfdG9fbGUzMigweDY4MDAwMDA2KSwKLQlJT19SRVBBUlNFX1RBR19TSVMJCT0gY29uc3RfY3B1X3RvX2xlMzIoMHg2ODAwMDAwNyksCi0JSU9fUkVQQVJTRV9UQUdfREZTCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4NjgwMDAwMDgpLAorCUlPX1JFUEFSU0VfVEFHX05TUwkJPSBjcHVfdG9fbGUzMigweDY4MDAwMDA1KSwKKwlJT19SRVBBUlNFX1RBR19OU1NfUkVDT1ZFUgk9IGNwdV90b19sZTMyKDB4NjgwMDAwMDYpLAorCUlPX1JFUEFSU0VfVEFHX1NJUwkJPSBjcHVfdG9fbGUzMigweDY4MDAwMDA3KSwKKwlJT19SRVBBUlNFX1RBR19ERlMJCT0gY3B1X3RvX2xlMzIoMHg2ODAwMDAwOCksCiAKLQlJT19SRVBBUlNFX1RBR19NT1VOVF9QT0lOVAk9IGNvbnN0X2NwdV90b19sZTMyKDB4ODgwMDAwMDMpLAorCUlPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UCT0gY3B1X3RvX2xlMzIoMHg4ODAwMDAwMyksCiAKLQlJT19SRVBBUlNFX1RBR19IU00JCT0gY29uc3RfY3B1X3RvX2xlMzIoMHhhODAwMDAwNCksCisJSU9fUkVQQVJTRV9UQUdfSFNNCQk9IGNwdV90b19sZTMyKDB4YTgwMDAwMDQpLAogCi0JSU9fUkVQQVJTRV9UQUdfU1lNQk9MSUNfTElOSwk9IGNvbnN0X2NwdV90b19sZTMyKDB4ZTgwMDAwMDApLAorCUlPX1JFUEFSU0VfVEFHX1NZTUJPTElDX0xJTksJPSBjcHVfdG9fbGUzMigweGU4MDAwMDAwKSwKIAotCUlPX1JFUEFSU0VfVEFHX1ZBTElEX1ZBTFVFUwk9IGNvbnN0X2NwdV90b19sZTMyKDB4ZTAwMGZmZmYpLAorCUlPX1JFUEFSU0VfVEFHX1ZBTElEX1ZBTFVFUwk9IGNwdV90b19sZTMyKDB4ZTAwMGZmZmYpLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbG9nZmlsZS5oIGIvZnMvbnRmcy9sb2dmaWxlLmgKaW5kZXggOTQ2OGUxYy4uYjVhNmYwOCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9sb2dmaWxlLmgKKysrIGIvZnMvbnRmcy9sb2dmaWxlLmgKQEAgLTEwNCw3ICsxMDQsNyBAQAogICogaW4gdGhpcyBwYXJ0aWN1bGFyIGNsaWVudCBhcnJheS4gIEFsc28gaW5zaWRlIHRoZSBjbGllbnQgcmVjb3JkcyB0aGVtc2VsdmVzLAogICogdGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBubyBjbGllbnQgcmVjb3JkcyBwcmVjZWRpbmcgb3IgZm9sbG93aW5nIHRoaXMgb25lLgogICovCi0jZGVmaW5lIExPR0ZJTEVfTk9fQ0xJRU5UCWNvbnN0X2NwdV90b19sZTE2KDB4ZmZmZikKKyNkZWZpbmUgTE9HRklMRV9OT19DTElFTlQJY3B1X3RvX2xlMTYoMHhmZmZmKQogI2RlZmluZSBMT0dGSUxFX05PX0NMSUVOVF9DUFUJMHhmZmZmCiAKIC8qCkBAIC0xMTIsOCArMTEyLDggQEAKICAqIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2cgZmlsZSBpbiB3aGljaCB0aGV5IGFyZSBwcmVzZW50LgogICovCiBlbnVtIHsKLQlSRVNUQVJUX1ZPTFVNRV9JU19DTEVBTgk9IGNvbnN0X2NwdV90b19sZTE2KDB4MDAwMiksCi0JUkVTVEFSVF9TUEFDRV9GSUxMRVIJPSBjb25zdF9jcHVfdG9fbGUxNigweGZmZmYpLCAvKiBnY2M6IEZvcmNlIGVudW0gYml0IHdpZHRoIHRvIDE2LiAqLworCVJFU1RBUlRfVk9MVU1FX0lTX0NMRUFOCT0gY3B1X3RvX2xlMTYoMHgwMDAyKSwKKwlSRVNUQVJUX1NQQUNFX0ZJTExFUgk9IGNwdV90b19sZTE2KDB4ZmZmZiksIC8qIGdjYzogRm9yY2UgZW51bSBiaXQgd2lkdGggdG8gMTYuICovCiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiAKIHR5cGVkZWYgbGUxNiBSRVNUQVJUX0FSRUFfRkxBR1M7CmRpZmYgLS1naXQgYS9mcy9udGZzL21mdC5jIGIvZnMvbnRmcy9tZnQuYwppbmRleCAxN2QzMmNhLi4yM2JmNjg0IDEwMDY0NAotLS0gYS9mcy9udGZzL21mdC5jCisrKyBiL2ZzL250ZnMvbWZ0LmMKQEAgLTI4MzksNyArMjgzOSw3IEBACiAJICovCiAKIAkvKiBNYXJrIHRoZSBtZnQgcmVjb3JkIGFzIG5vdCBpbiB1c2UuICovCi0JbS0+ZmxhZ3MgJj0gY29uc3RfY3B1X3RvX2xlMTYofmNvbnN0X2xlMTZfdG9fY3B1KE1GVF9SRUNPUkRfSU5fVVNFKSk7CisJbS0+ZmxhZ3MgJj0gfk1GVF9SRUNPUkRfSU5fVVNFOwogCiAJLyogSW5jcmVtZW50IHRoZSBzZXF1ZW5jZSBudW1iZXIsIHNraXBwaW5nIHplcm8sIGlmIGl0IGlzIG5vdCB6ZXJvLiAqLwogCW9sZF9zZXFfbm8gPSBtLT5zZXF1ZW5jZV9udW1iZXI7CmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmMKaW5kZXggNGE0Njc0My4uZjc2OTUxZCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zdXBlci5jCisrKyBiL2ZzL250ZnMvc3VwZXIuYwpAQCAtNjE4LDcgKzYxOCw3IEBACiAJICogbWFueSBCSU9TZXMgd2lsbCByZWZ1c2UgdG8gYm9vdCBmcm9tIGEgYm9vdHNlY3RvciBpZiB0aGUgbWFnaWMgaXMKIAkgKiBpbmNvcnJlY3QsIHNvIHdlIGVtaXQgYSB3YXJuaW5nLgogCSAqLwotCWlmICghc2lsZW50ICYmIGItPmVuZF9vZl9zZWN0b3JfbWFya2VyICE9IGNvbnN0X2NwdV90b19sZTE2KDB4YWE1NSkpCisJaWYgKCFzaWxlbnQgJiYgYi0+ZW5kX29mX3NlY3Rvcl9tYXJrZXIgIT0gY3B1X3RvX2xlMTYoMHhhYTU1KSkKIAkJbnRmc193YXJuaW5nKHNiLCAiSW52YWxpZCBlbmQgb2Ygc2VjdG9yIG1hcmtlci4iKTsKIAlyZXR1cm4gdHJ1ZTsKIG5vdF9udGZzOgpAQCAtMTI0MiwxMyArMTI0MiwxMyBAQAogCXUzMiAqa2FkZHIsICprZW5kOwogCW50ZnNfbmFtZSAqbmFtZSA9IE5VTEw7CiAJaW50IHJldCA9IDE7Ci0Jc3RhdGljIGNvbnN0IG50ZnNjaGFyIGhpYmVyZmlsWzEzXSA9IHsgY29uc3RfY3B1X3RvX2xlMTYoJ2gnKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCdpJyksIGNvbnN0X2NwdV90b19sZTE2KCdiJyksCi0JCQljb25zdF9jcHVfdG9fbGUxNignZScpLCBjb25zdF9jcHVfdG9fbGUxNigncicpLAotCQkJY29uc3RfY3B1X3RvX2xlMTYoJ2YnKSwgY29uc3RfY3B1X3RvX2xlMTYoJ2knKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCdsJyksIGNvbnN0X2NwdV90b19sZTE2KCcuJyksCi0JCQljb25zdF9jcHVfdG9fbGUxNigncycpLCBjb25zdF9jcHVfdG9fbGUxNigneScpLAotCQkJY29uc3RfY3B1X3RvX2xlMTYoJ3MnKSwgMCB9OworCXN0YXRpYyBjb25zdCBudGZzY2hhciBoaWJlcmZpbFsxM10gPSB7IGNwdV90b19sZTE2KCdoJyksCisJCQljcHVfdG9fbGUxNignaScpLCBjcHVfdG9fbGUxNignYicpLAorCQkJY3B1X3RvX2xlMTYoJ2UnKSwgY3B1X3RvX2xlMTYoJ3InKSwKKwkJCWNwdV90b19sZTE2KCdmJyksIGNwdV90b19sZTE2KCdpJyksCisJCQljcHVfdG9fbGUxNignbCcpLCBjcHVfdG9fbGUxNignLicpLAorCQkJY3B1X3RvX2xlMTYoJ3MnKSwgY3B1X3RvX2xlMTYoJ3knKSwKKwkJCWNwdV90b19sZTE2KCdzJyksIDAgfTsKIAogCW50ZnNfZGVidWcoIkVudGVyaW5nLiIpOwogCS8qCkBAIC0xMjk2LDcgKzEyOTYsNyBAQAogCQlnb3RvIGlwdXRfb3V0OwogCX0KIAlrYWRkciA9ICh1MzIqKXBhZ2VfYWRkcmVzcyhwYWdlKTsKLQlpZiAoKihsZTMyKilrYWRkciA9PSBjb25zdF9jcHVfdG9fbGUzMigweDcyNjI2OTY4KS8qJ2hpYnInKi8pIHsKKwlpZiAoKihsZTMyKilrYWRkciA9PSBjcHVfdG9fbGUzMigweDcyNjI2OTY4KS8qJ2hpYnInKi8pIHsKIAkJbnRmc19kZWJ1ZygiTWFnaWMgXCJoaWJyXCIgZm91bmQgaW4gaGliZXJmaWwuc3lzLiAgV2luZG93cyBpcyAiCiAJCQkJImhpYmVybmF0ZWQgb24gdGhlIHZvbHVtZS4gIFRoaXMgaXMgdGhlICIKIAkJCQkic3lzdGVtIHZvbHVtZS4iKTsKQEAgLTEzMzcsMTIgKzEzMzcsMTIgQEAKIAlNRlRfUkVGIG1yZWY7CiAJc3RydWN0IGlub2RlICp0bXBfaW5vOwogCW50ZnNfbmFtZSAqbmFtZSA9IE5VTEw7Ci0Jc3RhdGljIGNvbnN0IG50ZnNjaGFyIFF1b3RhWzddID0geyBjb25zdF9jcHVfdG9fbGUxNignJCcpLAotCQkJY29uc3RfY3B1X3RvX2xlMTYoJ1EnKSwgY29uc3RfY3B1X3RvX2xlMTYoJ3UnKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCdvJyksIGNvbnN0X2NwdV90b19sZTE2KCd0JyksCi0JCQljb25zdF9jcHVfdG9fbGUxNignYScpLCAwIH07Ci0Jc3RhdGljIG50ZnNjaGFyIFFbM10gPSB7IGNvbnN0X2NwdV90b19sZTE2KCckJyksCi0JCQljb25zdF9jcHVfdG9fbGUxNignUScpLCAwIH07CisJc3RhdGljIGNvbnN0IG50ZnNjaGFyIFF1b3RhWzddID0geyBjcHVfdG9fbGUxNignJCcpLAorCQkJY3B1X3RvX2xlMTYoJ1EnKSwgY3B1X3RvX2xlMTYoJ3UnKSwKKwkJCWNwdV90b19sZTE2KCdvJyksIGNwdV90b19sZTE2KCd0JyksCisJCQljcHVfdG9fbGUxNignYScpLCAwIH07CisJc3RhdGljIG50ZnNjaGFyIFFbM10gPSB7IGNwdV90b19sZTE2KCckJyksCisJCQljcHVfdG9fbGUxNignUScpLCAwIH07CiAKIAludGZzX2RlYnVnKCJFbnRlcmluZy4iKTsKIAkvKgpAQCAtMTQxNiwxNiArMTQxNiwxNiBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCW50ZnNfbmFtZSAqbmFtZSA9IE5VTEw7CiAJVVNOX0hFQURFUiAqdWg7Ci0Jc3RhdGljIGNvbnN0IG50ZnNjaGFyIFVzbkpybmxbOV0gPSB7IGNvbnN0X2NwdV90b19sZTE2KCckJyksCi0JCQljb25zdF9jcHVfdG9fbGUxNignVScpLCBjb25zdF9jcHVfdG9fbGUxNigncycpLAotCQkJY29uc3RfY3B1X3RvX2xlMTYoJ24nKSwgY29uc3RfY3B1X3RvX2xlMTYoJ0onKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCdyJyksIGNvbnN0X2NwdV90b19sZTE2KCduJyksCi0JCQljb25zdF9jcHVfdG9fbGUxNignbCcpLCAwIH07Ci0Jc3RhdGljIG50ZnNjaGFyIE1heFs1XSA9IHsgY29uc3RfY3B1X3RvX2xlMTYoJyQnKSwKLQkJCWNvbnN0X2NwdV90b19sZTE2KCdNJyksIGNvbnN0X2NwdV90b19sZTE2KCdhJyksCi0JCQljb25zdF9jcHVfdG9fbGUxNigneCcpLCAwIH07Ci0Jc3RhdGljIG50ZnNjaGFyIEpbM10gPSB7IGNvbnN0X2NwdV90b19sZTE2KCckJyksCi0JCQljb25zdF9jcHVfdG9fbGUxNignSicpLCAwIH07CisJc3RhdGljIGNvbnN0IG50ZnNjaGFyIFVzbkpybmxbOV0gPSB7IGNwdV90b19sZTE2KCckJyksCisJCQljcHVfdG9fbGUxNignVScpLCBjcHVfdG9fbGUxNigncycpLAorCQkJY3B1X3RvX2xlMTYoJ24nKSwgY3B1X3RvX2xlMTYoJ0onKSwKKwkJCWNwdV90b19sZTE2KCdyJyksIGNwdV90b19sZTE2KCduJyksCisJCQljcHVfdG9fbGUxNignbCcpLCAwIH07CisJc3RhdGljIG50ZnNjaGFyIE1heFs1XSA9IHsgY3B1X3RvX2xlMTYoJyQnKSwKKwkJCWNwdV90b19sZTE2KCdNJyksIGNwdV90b19sZTE2KCdhJyksCisJCQljcHVfdG9fbGUxNigneCcpLCAwIH07CisJc3RhdGljIG50ZnNjaGFyIEpbM10gPSB7IGNwdV90b19sZTE2KCckJyksCisJCQljcHVfdG9fbGUxNignSicpLCAwIH07CiAKIAludGZzX2RlYnVnKCJFbnRlcmluZy4iKTsKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy91c25qcm5sLmggYi9mcy9udGZzL3VzbmpybmwuaAppbmRleCA0MDg3ZmJkLi4wMGQ4ZTZiIDEwMDY0NAotLS0gYS9mcy9udGZzL3VzbmpybmwuaAorKysgYi9mcy9udGZzL3VzbmpybmwuaApAQCAtMTE2LDI3ICsxMTYsMjcgQEAKICAqIGRvY3VtZW50YXRpb246IGh0dHA6Ly93d3cubGludXgtbnRmcy5vcmcvCiAgKi8KIGVudW0gewotCVVTTl9SRUFTT05fREFUQV9PVkVSV1JJVEUJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKLQlVU05fUkVBU09OX0RBVEFfRVhURU5ECQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpLAotCVVTTl9SRUFTT05fREFUQV9UUlVOQ0FUSU9OCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCksCi0JVVNOX1JFQVNPTl9OQU1FRF9EQVRBX09WRVJXUklURQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMTApLAotCVVTTl9SRUFTT05fTkFNRURfREFUQV9FWFRFTkQJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMDIwKSwKLQlVU05fUkVBU09OX05BTUVEX0RBVEFfVFJVTkNBVElPTj0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCksCi0JVVNOX1JFQVNPTl9GSUxFX0NSRUFURQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAwMTAwKSwKLQlVU05fUkVBU09OX0ZJTEVfREVMRVRFCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAyMDApLAotCVVTTl9SRUFTT05fRUFfQ0hBTkdFCQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDA0MDApLAotCVVTTl9SRUFTT05fU0VDVVJJVFlfQ0hBTkdFCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDAwMDgwMCksCi0JVVNOX1JFQVNPTl9SRU5BTUVfT0xEX05BTUUJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDAxMDAwKSwKLQlVU05fUkVBU09OX1JFTkFNRV9ORVdfTkFNRQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDIwMDApLAotCVVTTl9SRUFTT05fSU5ERVhBQkxFX0NIQU5HRQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDQwMDApLAotCVVTTl9SRUFTT05fQkFTSUNfSU5GT19DSEFOR0UJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDA4MDAwKSwKLQlVU05fUkVBU09OX0hBUkRfTElOS19DSEFOR0UJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDEwMDAwKSwKLQlVU05fUkVBU09OX0NPTVBSRVNTSU9OX0NIQU5HRQk9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMjAwMDApLAotCVVTTl9SRUFTT05fRU5DUllQVElPTl9DSEFOR0UJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDQwMDAwKSwKLQlVU05fUkVBU09OX09CSkVDVF9JRF9DSEFOR0UJPSBjb25zdF9jcHVfdG9fbGUzMigweDAwMDgwMDAwKSwKLQlVU05fUkVBU09OX1JFUEFSU0VfUE9JTlRfQ0hBTkdFCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDEwMDAwMCksCi0JVVNOX1JFQVNPTl9TVFJFQU1fQ0hBTkdFCT0gY29uc3RfY3B1X3RvX2xlMzIoMHgwMDIwMDAwMCksCi0JVVNOX1JFQVNPTl9DTE9TRQkJPSBjb25zdF9jcHVfdG9fbGUzMigweDgwMDAwMDAwKSwKKwlVU05fUkVBU09OX0RBVEFfT1ZFUldSSVRFCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSksCisJVVNOX1JFQVNPTl9EQVRBX0VYVEVORAkJPSBjcHVfdG9fbGUzMigweDAwMDAwMDAyKSwKKwlVU05fUkVBU09OX0RBVEFfVFJVTkNBVElPTgk9IGNwdV90b19sZTMyKDB4MDAwMDAwMDQpLAorCVVTTl9SRUFTT05fTkFNRURfREFUQV9PVkVSV1JJVEUJPSBjcHVfdG9fbGUzMigweDAwMDAwMDEwKSwKKwlVU05fUkVBU09OX05BTUVEX0RBVEFfRVhURU5ECT0gY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCksCisJVVNOX1JFQVNPTl9OQU1FRF9EQVRBX1RSVU5DQVRJT049IGNwdV90b19sZTMyKDB4MDAwMDAwNDApLAorCVVTTl9SRUFTT05fRklMRV9DUkVBVEUJCT0gY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCksCisJVVNOX1JFQVNPTl9GSUxFX0RFTEVURQkJPSBjcHVfdG9fbGUzMigweDAwMDAwMjAwKSwKKwlVU05fUkVBU09OX0VBX0NIQU5HRQkJPSBjcHVfdG9fbGUzMigweDAwMDAwNDAwKSwKKwlVU05fUkVBU09OX1NFQ1VSSVRZX0NIQU5HRQk9IGNwdV90b19sZTMyKDB4MDAwMDA4MDApLAorCVVTTl9SRUFTT05fUkVOQU1FX09MRF9OQU1FCT0gY3B1X3RvX2xlMzIoMHgwMDAwMTAwMCksCisJVVNOX1JFQVNPTl9SRU5BTUVfTkVXX05BTUUJPSBjcHVfdG9fbGUzMigweDAwMDAyMDAwKSwKKwlVU05fUkVBU09OX0lOREVYQUJMRV9DSEFOR0UJPSBjcHVfdG9fbGUzMigweDAwMDA0MDAwKSwKKwlVU05fUkVBU09OX0JBU0lDX0lORk9fQ0hBTkdFCT0gY3B1X3RvX2xlMzIoMHgwMDAwODAwMCksCisJVVNOX1JFQVNPTl9IQVJEX0xJTktfQ0hBTkdFCT0gY3B1X3RvX2xlMzIoMHgwMDAxMDAwMCksCisJVVNOX1JFQVNPTl9DT01QUkVTU0lPTl9DSEFOR0UJPSBjcHVfdG9fbGUzMigweDAwMDIwMDAwKSwKKwlVU05fUkVBU09OX0VOQ1JZUFRJT05fQ0hBTkdFCT0gY3B1X3RvX2xlMzIoMHgwMDA0MDAwMCksCisJVVNOX1JFQVNPTl9PQkpFQ1RfSURfQ0hBTkdFCT0gY3B1X3RvX2xlMzIoMHgwMDA4MDAwMCksCisJVVNOX1JFQVNPTl9SRVBBUlNFX1BPSU5UX0NIQU5HRQk9IGNwdV90b19sZTMyKDB4MDAxMDAwMDApLAorCVVTTl9SRUFTT05fU1RSRUFNX0NIQU5HRQk9IGNwdV90b19sZTMyKDB4MDAyMDAwMDApLAorCVVTTl9SRUFTT05fQ0xPU0UJCT0gY3B1X3RvX2xlMzIoMHg4MDAwMDAwMCksCiB9OwogCiB0eXBlZGVmIGxlMzIgVVNOX1JFQVNPTl9GTEFHUzsKQEAgLTE0OCw5ICsxNDgsOSBAQAogICoJaHR0cDovL3d3dy5saW51eC1udGZzLm9yZy8KICAqLwogZW51bSB7Ci0JVVNOX1NPVVJDRV9EQVRBX01BTkFHRU1FTlQJICA9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpLAotCVVTTl9TT1VSQ0VfQVVYSUxJQVJZX0RBVEEJICA9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpLAotCVVTTl9TT1VSQ0VfUkVQTElDQVRJT05fTUFOQUdFTUVOVCA9IGNvbnN0X2NwdV90b19sZTMyKDB4MDAwMDAwMDQpLAorCVVTTl9TT1VSQ0VfREFUQV9NQU5BR0VNRU5UCSAgPSBjcHVfdG9fbGUzMigweDAwMDAwMDAxKSwKKwlVU05fU09VUkNFX0FVWElMSUFSWV9EQVRBCSAgPSBjcHVfdG9fbGUzMigweDAwMDAwMDAyKSwKKwlVU05fU09VUkNFX1JFUExJQ0FUSU9OX01BTkFHRU1FTlQgPSBjcHVfdG9fbGUzMigweDAwMDAwMDA0KSwKIH07CiAKIHR5cGVkZWYgbGUzMiBVU05fU09VUkNFX0lORk9fRkxBR1M7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jCmluZGV4IDEyZGZiNDQuLmZiZWFlYzcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FjbC5jCisrKyBiL2ZzL29jZnMyL2FjbC5jCkBAIC0yOTYsNyArMjk2LDcgQEAKIAkJCQlyZXR1cm4gUFRSX0VSUihhY2wpOwogCQl9CiAJCWlmICghYWNsKQotCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCQkJaW5vZGUtPmlfbW9kZSAmPSB+Y3VycmVudF91bWFzaygpOwogCX0KIAlpZiAoKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpICYmIGFjbCkgewogCQlzdHJ1Y3QgcG9zaXhfYWNsICpjbG9uZTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmMgYi9mcy9vY2ZzMi9hbGxvYy5jCmluZGV4IDE5ZTNhOTYuLjY3OGEwNjcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FsbG9jLmMKKysrIGIvZnMvb2NmczIvYWxsb2MuYwpAQCAtMjk0LDYgKzI5NCw1NSBAQAogCS5lb19maWxsX21heF9sZWFmX2NsdXN0ZXJzID0gb2NmczJfeGF0dHJfdHJlZV9maWxsX21heF9sZWFmX2NsdXN0ZXJzLAogfTsKIAorc3RhdGljIHZvaWQgb2NmczJfZHhfcm9vdF9zZXRfbGFzdF9lYl9ibGsoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkJICB1NjQgYmxrbm8pCit7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3QgPSBldC0+ZXRfb2JqZWN0OworCisJZHhfcm9vdC0+ZHJfbGFzdF9lYl9ibGsgPSBjcHVfdG9fbGU2NChibGtubyk7Cit9CisKK3N0YXRpYyB1NjQgb2NmczJfZHhfcm9vdF9nZXRfbGFzdF9lYl9ibGsoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCkKK3sKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdCA9IGV0LT5ldF9vYmplY3Q7CisKKwlyZXR1cm4gbGU2NF90b19jcHUoZHhfcm9vdC0+ZHJfbGFzdF9lYl9ibGspOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9keF9yb290X3VwZGF0ZV9jbHVzdGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJCSAgdTMyIGNsdXN0ZXJzKQoreworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290ID0gZXQtPmV0X29iamVjdDsKKworCWxlMzJfYWRkX2NwdSgmZHhfcm9vdC0+ZHJfY2x1c3RlcnMsIGNsdXN0ZXJzKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9keF9yb290X3Nhbml0eV9jaGVjayhzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQpCit7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3QgPSBldC0+ZXRfb2JqZWN0OworCisJQlVHX09OKCFPQ0ZTMl9JU19WQUxJRF9EWF9ST09UKGR4X3Jvb3QpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9keF9yb290X2ZpbGxfcm9vdF9lbChzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0KQoreworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290ID0gZXQtPmV0X29iamVjdDsKKworCWV0LT5ldF9yb290X2VsID0gJmR4X3Jvb3QtPmRyX2xpc3Q7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWVfb3BlcmF0aW9ucyBvY2ZzMl9keF9yb290X2V0X29wcyA9IHsKKwkuZW9fc2V0X2xhc3RfZWJfYmxrCT0gb2NmczJfZHhfcm9vdF9zZXRfbGFzdF9lYl9ibGssCisJLmVvX2dldF9sYXN0X2ViX2Jsawk9IG9jZnMyX2R4X3Jvb3RfZ2V0X2xhc3RfZWJfYmxrLAorCS5lb191cGRhdGVfY2x1c3RlcnMJPSBvY2ZzMl9keF9yb290X3VwZGF0ZV9jbHVzdGVycywKKwkuZW9fc2FuaXR5X2NoZWNrCT0gb2NmczJfZHhfcm9vdF9zYW5pdHlfY2hlY2ssCisJLmVvX2ZpbGxfcm9vdF9lbAk9IG9jZnMyX2R4X3Jvb3RfZmlsbF9yb290X2VsLAorfTsKKwogc3RhdGljIHZvaWQgX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKQEAgLTMzOSw2ICszODgsMTQgQEAKIAkJCQkgJm9jZnMyX3hhdHRyX3ZhbHVlX2V0X29wcyk7CiB9CiAKK3ZvaWQgb2NmczJfaW5pdF9keF9yb290X2V4dGVudF90cmVlKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCisJCQkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJX19vY2ZzMl9pbml0X2V4dGVudF90cmVlKGV0LCBpbm9kZSwgYmgsIG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyLAorCQkJCSBOVUxMLCAmb2NmczJfZHhfcm9vdF9ldF9vcHMpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfZXRfc2V0X2xhc3RfZWJfYmxrKHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsCiAJCQkJCSAgICB1NjQgbmV3X2xhc3RfZWJfYmxrKQogewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWxsb2MuaCBiL2ZzL29jZnMyL2FsbG9jLmgKaW5kZXggY2NlZmY1Yy4uMzUzMjU0YiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWxsb2MuaAorKysgYi9mcy9vY2ZzMi9hbGxvYy5oCkBAIC03NSw2ICs3NSw5IEBACiB2b2lkIG9jZnMyX2luaXRfeGF0dHJfdmFsdWVfZXh0ZW50X3RyZWUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKIAkJCQkJc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIpOwordm9pZCBvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoc3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCwKKwkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiAKIC8qCiAgKiBSZWFkIGFuIGV4dGVudCBibG9jayBpbnRvICpiaC4gIElmICpiaCBpcyBOVUxMLCBhIGJoIHdpbGwgYmUKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FvcHMuYyBiL2ZzL29jZnMyL2FvcHMuYwppbmRleCA4ZTE3MDlhLi5iMmM1MmIzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9hb3BzLmMKKysrIGIvZnMvb2NmczIvYW9wcy5jCkBAIC0xOTU2LDE1ICsxOTU2LDE2IEBACiB9CiAKIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb2NmczJfYW9wcyA9IHsKLQkucmVhZHBhZ2UJPSBvY2ZzMl9yZWFkcGFnZSwKLQkucmVhZHBhZ2VzCT0gb2NmczJfcmVhZHBhZ2VzLAotCS53cml0ZXBhZ2UJPSBvY2ZzMl93cml0ZXBhZ2UsCi0JLndyaXRlX2JlZ2luCT0gb2NmczJfd3JpdGVfYmVnaW4sCi0JLndyaXRlX2VuZAk9IG9jZnMyX3dyaXRlX2VuZCwKLQkuYm1hcAkJPSBvY2ZzMl9ibWFwLAotCS5zeW5jX3BhZ2UJPSBibG9ja19zeW5jX3BhZ2UsCi0JLmRpcmVjdF9JTwk9IG9jZnMyX2RpcmVjdF9JTywKLQkuaW52YWxpZGF0ZXBhZ2UJPSBvY2ZzMl9pbnZhbGlkYXRlcGFnZSwKLQkucmVsZWFzZXBhZ2UJPSBvY2ZzMl9yZWxlYXNlcGFnZSwKLQkubWlncmF0ZXBhZ2UJPSBidWZmZXJfbWlncmF0ZV9wYWdlLAorCS5yZWFkcGFnZQkJPSBvY2ZzMl9yZWFkcGFnZSwKKwkucmVhZHBhZ2VzCQk9IG9jZnMyX3JlYWRwYWdlcywKKwkud3JpdGVwYWdlCQk9IG9jZnMyX3dyaXRlcGFnZSwKKwkud3JpdGVfYmVnaW4JCT0gb2NmczJfd3JpdGVfYmVnaW4sCisJLndyaXRlX2VuZAkJPSBvY2ZzMl93cml0ZV9lbmQsCisJLmJtYXAJCQk9IG9jZnMyX2JtYXAsCisJLnN5bmNfcGFnZQkJPSBibG9ja19zeW5jX3BhZ2UsCisJLmRpcmVjdF9JTwkJPSBvY2ZzMl9kaXJlY3RfSU8sCisJLmludmFsaWRhdGVwYWdlCQk9IG9jZnMyX2ludmFsaWRhdGVwYWdlLAorCS5yZWxlYXNlcGFnZQkJPSBvY2ZzMl9yZWxlYXNlcGFnZSwKKwkubWlncmF0ZXBhZ2UJCT0gYnVmZmVyX21pZ3JhdGVfcGFnZSwKKwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlCT0gYmxvY2tfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCmluZGV4IDA0Njk3YmEuLjRmODVlY2UgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KIAogI2luY2x1ZGUgImhlYXJ0YmVhdC5oIgogI2luY2x1ZGUgInRjcC5oIgpAQCAtNjAsNiArNjEsMTEgQEAKIHN0YXRpYyBMSVNUX0hFQUQobzJoYl9ub2RlX2V2ZW50cyk7CiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobzJoYl9zdGVhZHlfcXVldWUpOwogCisjZGVmaW5lIE8ySEJfREVCVUdfRElSCQkJIm8yaGIiCisjZGVmaW5lIE8ySEJfREVCVUdfTElWRU5PREVTCQkibGl2ZW5vZGVzIgorc3RhdGljIHN0cnVjdCBkZW50cnkgKm8yaGJfZGVidWdfZGlyOworc3RhdGljIHN0cnVjdCBkZW50cnkgKm8yaGJfZGVidWdfbGl2ZW5vZGVzOworCiBzdGF0aWMgTElTVF9IRUFEKG8yaGJfYWxsX3JlZ2lvbnMpOwogCiBzdGF0aWMgc3RydWN0IG8yaGJfY2FsbGJhY2sgewpAQCAtOTA1LDcgKzkxMSw3NyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIG8yaGJfaW5pdCh2b2lkKQorI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIGludCBvMmhiX2RlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJdW5zaWduZWQgbG9uZyBtYXBbQklUU19UT19MT05HUyhPMk5NX01BWF9OT0RFUyldOworCWNoYXIgKmJ1ZiA9IE5VTEw7CisJaW50IGkgPSAtMTsKKwlpbnQgb3V0ID0gMDsKKworCWJ1ZiA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBiYWlsOworCisJbzJoYl9maWxsX25vZGVfbWFwKG1hcCwgc2l6ZW9mKG1hcCkpOworCisJd2hpbGUgKChpID0gZmluZF9uZXh0X2JpdChtYXAsIE8yTk1fTUFYX05PREVTLCBpICsgMSkpIDwgTzJOTV9NQVhfTk9ERVMpCisJCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIFBBR0VfU0laRSAtIG91dCwgIiVkICIsIGkpOworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIFBBR0VfU0laRSAtIG91dCwgIlxuIik7CisKKwlpX3NpemVfd3JpdGUoaW5vZGUsIG91dCk7CisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBidWY7CisKKwlyZXR1cm4gMDsKK2JhaWw6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgbzJoYl9kZWJ1Z19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWtmcmVlKGZpbGUtPnByaXZhdGVfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG8yaGJfZGVidWdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIG5ieXRlcywgcHBvcywgZmlsZS0+cHJpdmF0ZV9kYXRhLAorCQkJCSAgICAgICBpX3NpemVfcmVhZChmaWxlLT5mX21hcHBpbmctPmhvc3QpKTsKK30KKyNlbHNlCitzdGF0aWMgaW50IG8yaGJfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgbzJoYl9kZWJ1Z19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiAwOworfQorc3RhdGljIHNzaXplX3QgbzJoYl9kZWJ1Z19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAgLyogQ09ORklHX0RFQlVHX0ZTICovCisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG8yaGJfZGVidWdfZm9wcyA9IHsKKwkub3BlbiA9CQlvMmhiX2RlYnVnX29wZW4sCisJLnJlbGVhc2UgPQlvMmhiX2RlYnVnX3JlbGVhc2UsCisJLnJlYWQgPQkJbzJoYl9kZWJ1Z19yZWFkLAorCS5sbHNlZWsgPQlnZW5lcmljX2ZpbGVfbGxzZWVrLAorfTsKKwordm9pZCBvMmhiX2V4aXQodm9pZCkKK3sKKwlpZiAobzJoYl9kZWJ1Z19saXZlbm9kZXMpCisJCWRlYnVnZnNfcmVtb3ZlKG8yaGJfZGVidWdfbGl2ZW5vZGVzKTsKKwlpZiAobzJoYl9kZWJ1Z19kaXIpCisJCWRlYnVnZnNfcmVtb3ZlKG8yaGJfZGVidWdfZGlyKTsKK30KKworaW50IG8yaGJfaW5pdCh2b2lkKQogewogCWludCBpOwogCkBAIC05MTgsNiArOTk0LDI0IEBACiAJSU5JVF9MSVNUX0hFQUQoJm8yaGJfbm9kZV9ldmVudHMpOwogCiAJbWVtc2V0KG8yaGJfbGl2ZV9ub2RlX2JpdG1hcCwgMCwgc2l6ZW9mKG8yaGJfbGl2ZV9ub2RlX2JpdG1hcCkpOworCisJbzJoYl9kZWJ1Z19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoTzJIQl9ERUJVR19ESVIsIE5VTEwpOworCWlmICghbzJoYl9kZWJ1Z19kaXIpIHsKKwkJbWxvZ19lcnJubygtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbzJoYl9kZWJ1Z19saXZlbm9kZXMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKE8ySEJfREVCVUdfTElWRU5PREVTLAorCQkJCQkJICAgU19JRlJFR3xTX0lSVVNSLAorCQkJCQkJICAgbzJoYl9kZWJ1Z19kaXIsIE5VTEwsCisJCQkJCQkgICAmbzJoYl9kZWJ1Z19mb3BzKTsKKwlpZiAoIW8yaGJfZGVidWdfbGl2ZW5vZGVzKSB7CisJCW1sb2dfZXJybm8oLUVOT01FTSk7CisJCWRlYnVnZnNfcmVtb3ZlKG8yaGJfZGVidWdfZGlyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qIGlmIHdlJ3JlIGFscmVhZHkgaW4gYSBjYWxsYmFjayB0aGVuIHdlJ3JlIGFscmVhZHkgc2VyaWFsaXplZCBieSB0aGUgc2VtICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5oIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuaAppbmRleCBlNTExMzM5Li4yZjE2NDkyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5oCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmgKQEAgLTc1LDcgKzc1LDggQEAKIAkJCSAgICAgIHN0cnVjdCBvMmhiX2NhbGxiYWNrX2Z1bmMgKmhjKTsKIHZvaWQgbzJoYl9maWxsX25vZGVfbWFwKHVuc2lnbmVkIGxvbmcgKm1hcCwKIAkJCXVuc2lnbmVkIGJ5dGVzKTsKLXZvaWQgbzJoYl9pbml0KHZvaWQpOwordm9pZCBvMmhiX2V4aXQodm9pZCk7CitpbnQgbzJoYl9pbml0KHZvaWQpOwogaW50IG8yaGJfY2hlY2tfbm9kZV9oZWFydGJlYXRpbmcodTggbm9kZV9udW0pOwogaW50IG8yaGJfY2hlY2tfbm9kZV9oZWFydGJlYXRpbmdfZnJvbV9jYWxsYmFjayh1OCBub2RlX251bSk7CiBpbnQgbzJoYl9jaGVja19sb2NhbF9ub2RlX2hlYXJ0YmVhdGluZyh2b2lkKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvbm9kZW1hbmFnZXIuYwppbmRleCA3MGU4ZmE5Li43ZWU2MTg4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL25vZGVtYW5hZ2VyLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9ub2RlbWFuYWdlci5jCkBAIC04ODEsNiArODgxLDcgQEAKIAlvMmNiX3N5c19zaHV0ZG93bigpOwogCiAJbzJuZXRfZXhpdCgpOworCW8yaGJfZXhpdCgpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X28ybm0odm9pZCkKQEAgLTg4OSwxMSArODkwLDEzIEBACiAKIAljbHVzdGVyX3ByaW50X3ZlcnNpb24oKTsKIAotCW8yaGJfaW5pdCgpOworCXJldCA9IG8yaGJfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OwogCiAJcmV0ID0gbzJuZXRfaW5pdCgpOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9vMmhiOwogCiAJcmV0ID0gbzJuZXRfcmVnaXN0ZXJfaGJfY2FsbGJhY2tzKCk7CiAJaWYgKHJldCkKQEAgLTkxNiw2ICs5MTksOCBAQAogCW8ybmV0X3VucmVnaXN0ZXJfaGJfY2FsbGJhY2tzKCk7CiBvdXRfbzJuZXQ6CiAJbzJuZXRfZXhpdCgpOworb3V0X28yaGI6CisJbzJoYl9leGl0KCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2Rpci5jIGIvZnMvb2NmczIvZGlyLmMKaW5kZXggZjJjNDA5OC4uZTcxMTYwYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGlyLmMKKysrIGIvZnMvb2NmczIvZGlyLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgogCiAjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfTkFNRUkKICNpbmNsdWRlIDxjbHVzdGVyL21hc2tsb2cuaD4KQEAgLTU4LDYgKzU5LDcgQEAKICNpbmNsdWRlICJuYW1laS5oIgogI2luY2x1ZGUgInN1YmFsbG9jLmgiCiAjaW5jbHVkZSAic3VwZXIuaCIKKyNpbmNsdWRlICJzeXNmaWxlLmgiCiAjaW5jbHVkZSAidXB0b2RhdGUuaCIKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCkBAIC03MSwxMSArNzMsNiBAQAogCURUX1VOS05PV04sIERUX1JFRywgRFRfRElSLCBEVF9DSFIsIERUX0JMSywgRFRfRklGTywgRFRfU09DSywgRFRfTE5LCiB9OwogCi1zdGF0aWMgaW50IG9jZnMyX2V4dGVuZF9kaXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkgICAgc3RydWN0IGlub2RlICpkaXIsCi0JCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmgsCi0JCQkgICAgdW5zaWduZWQgaW50IGJsb2Nrc193YW50ZWQsCi0JCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqbmV3X2RlX2JoKTsKIHN0YXRpYyBpbnQgb2NmczJfZG9fZXh0ZW5kX2RpcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICAgICAgIGhhbmRsZV90ICpoYW5kbGUsCiAJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCkBAIC04MywyMiArODAsMzYgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKIAkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKIAkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipuZXdfYmgpOworc3RhdGljIGludCBvY2ZzMl9kaXJfaW5kZXhlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogLyoKICAqIFRoZXNlIGFyZSBkaXN0aW5jdCBjaGVja3MgYmVjYXVzZSBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIGZpbGUgc3lzdGVtIHdpbGwKICAqIHdhbnQgdG8gaGF2ZSBhIHRyYWlsaW5nIGRpcmVudCBzdHJ1Y3R1cmUgaW5kZXBlbmRlbnQgb2YgaW5kZXhpbmcuCiAgKi8KLXN0YXRpYyBpbnQgb2NmczJfZGlyX2hhc190cmFpbGVyKHN0cnVjdCBpbm9kZSAqZGlyKQorc3RhdGljIGludCBvY2ZzMl9zdXBwb3J0c19kaXJfdHJhaWxlcihzdHJ1Y3QgaW5vZGUgKmRpcikKIHsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CisKIAlpZiAoT0NGUzJfSShkaXIpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gb2NmczJfbWV0YV9lY2MoT0NGUzJfU0IoZGlyLT5pX3NiKSk7CisJcmV0dXJuIG9jZnMyX21ldGFfZWNjKG9zYikgfHwgb2NmczJfZGlyX2luZGV4ZWQoZGlyKTsKIH0KIAotc3RhdGljIGludCBvY2ZzMl9zdXBwb3J0c19kaXJfdHJhaWxlcihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKKy8qCisgKiAibmV3JyBoZXJlIHJlZmVycyB0byB0aGUgcG9pbnQgYXQgd2hpY2ggd2UncmUgY3JlYXRpbmcgYSBuZXcKKyAqIGRpcmVjdG9yeSB2aWEgIm1rZGlyKCkiLCBidXQgYWxzbyB3aGVuIHdlJ3JlIGV4cGFuZGluZyBhbiBpbmxpbmUKKyAqIGRpcmVjdG9yeS4gSW4gZWl0aGVyIGNhc2UsIHdlIGRvbid0IHlldCBoYXZlIHRoZSBpbmRleGluZyBiaXQgc2V0CisgKiBvbiB0aGUgZGlyZWN0b3J5LCBzbyB0aGUgc3RhbmRhcmQgY2hlY2tzIHdpbGwgZmFpbCBpbiB3aGVuIG1ldGFlY2MKKyAqIGlzIHR1cm5lZCBvZmYuIE9ubHkgZGlyZWN0b3J5LWluaXRpYWxpemF0aW9uIHR5cGUgZnVuY3Rpb25zIHNob3VsZAorICogdXNlIHRoaXMgdGhlbi4gRXZlcnl0aGluZyBlbHNlIHdhbnRzIG9jZnMyX3N1cHBvcnRzX2Rpcl90cmFpbGVyKCkKKyAqLworc3RhdGljIGludCBvY2ZzMl9uZXdfZGlyX3dhbnRzX3RyYWlsZXIoc3RydWN0IGlub2RlICpkaXIpCiB7Ci0JcmV0dXJuIG9jZnMyX21ldGFfZWNjKG9zYik7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCisJcmV0dXJuIG9jZnMyX21ldGFfZWNjKG9zYikgfHwKKwkJb2NmczJfc3VwcG9ydHNfaW5kZXhlZF9kaXJzKG9zYik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9jZnMyX2Rpcl90cmFpbGVyX2Jsa19vZmYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTEzMCw3ICsxNDEsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgdG9mZiA9IGJsa2xlbiAtIHNpemVvZihzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIpOwogCi0JaWYgKCFvY2ZzMl9kaXJfaGFzX3RyYWlsZXIoZGlyKSkKKwlpZiAoIW9jZnMyX3N1cHBvcnRzX2Rpcl90cmFpbGVyKGRpcikpCiAJCXJldHVybiAwOwogCiAJaWYgKG9mZnNldCAhPSB0b2ZmKQpAQCAtMTQwLDcgKzE1MSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIG9jZnMyX2luaXRfZGlyX3RyYWlsZXIoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHUxNiByZWNfbGVuKQogewogCXN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlciAqdHJhaWxlcjsKIApAQCAtMTUwLDYgKzE2MSwxNTMgQEAKIAkJCWNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIpKTsKIAl0cmFpbGVyLT5kYl9wYXJlbnRfZGlub2RlID0gY3B1X3RvX2xlNjQoT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vKTsKIAl0cmFpbGVyLT5kYl9ibGtubyA9IGNwdV90b19sZTY0KGJoLT5iX2Jsb2NrbnIpOworCXRyYWlsZXItPmRiX2ZyZWVfcmVjX2xlbiA9IGNwdV90b19sZTE2KHJlY19sZW4pOworfQorLyoKKyAqIExpbmsgYW4gdW5pbmRleGVkIGJsb2NrIHdpdGggYSBkaXIgdHJhaWxlciBzdHJ1Y3R1cmUgaW50byB0aGUgaW5kZXggZnJlZQorICogbGlzdC4gVGhpcyBmdW5jdGlvbiB3aWxsIG1vZGlmeSBkaXJkYXRhX2JoLCBidXQgYXNzdW1lcyB5b3UndmUgYWxyZWFkeQorICogcGFzc2VkIGl0IHRvIHRoZSBqb3VybmFsLgorICovCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9saW5rX3RyYWlsZXIoc3RydWN0IGlub2RlICpkaXIsIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmgsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcmRhdGFfYmgpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIgKnRyYWlsZXI7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIGRpciwgZHhfcm9vdF9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwl0cmFpbGVyID0gb2NmczJfdHJhaWxlcl9mcm9tX2JoKGRpcmRhdGFfYmgsIGRpci0+aV9zYik7CisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKKworCXRyYWlsZXItPmRiX2ZyZWVfbmV4dCA9IGR4X3Jvb3QtPmRyX2ZyZWVfYmxrOworCWR4X3Jvb3QtPmRyX2ZyZWVfYmxrID0gY3B1X3RvX2xlNjQoZGlyZGF0YV9iaC0+Yl9ibG9ja25yKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkeF9yb290X2JoKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZnJlZV9saXN0X2F0X3Jvb3Qoc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpyZXMpCit7CisJcmV0dXJuIHJlcy0+ZGxfcHJldl9sZWFmX2JoID09IE5VTEw7Cit9CisKK3ZvaWQgb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdChzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKnJlcykKK3sKKwlicmVsc2UocmVzLT5kbF9keF9yb290X2JoKTsKKwlicmVsc2UocmVzLT5kbF9sZWFmX2JoKTsKKwlicmVsc2UocmVzLT5kbF9keF9sZWFmX2JoKTsKKwlicmVsc2UocmVzLT5kbF9wcmV2X2xlYWZfYmgpOworfQorCitzdGF0aWMgaW50IG9jZnMyX2Rpcl9pbmRleGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKE9DRlMyX0koaW5vZGUpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkRFWEVEX0RJUl9GTCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2R4X3Jvb3RfaW5saW5lKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290KQoreworCXJldHVybiBkeF9yb290LT5kcl9mbGFncyAmIE9DRlMyX0RYX0ZMQUdfSU5MSU5FOworfQorCisvKgorICogSGFzaGluZyBjb2RlIGFkYXB0ZWQgZnJvbSBleHQzCisgKi8KKyNkZWZpbmUgREVMVEEgMHg5RTM3NzlCOQorCitzdGF0aWMgdm9pZCBURUFfdHJhbnNmb3JtKF9fdTMyIGJ1Zls0XSwgX191MzIgY29uc3QgaW5bXSkKK3sKKwlfX3UzMglzdW0gPSAwOworCV9fdTMyCWIwID0gYnVmWzBdLCBiMSA9IGJ1ZlsxXTsKKwlfX3UzMglhID0gaW5bMF0sIGIgPSBpblsxXSwgYyA9IGluWzJdLCBkID0gaW5bM107CisJaW50CW4gPSAxNjsKKworCWRvIHsKKwkJc3VtICs9IERFTFRBOworCQliMCArPSAoKGIxIDw8IDQpK2EpIF4gKGIxK3N1bSkgXiAoKGIxID4+IDUpK2IpOworCQliMSArPSAoKGIwIDw8IDQpK2MpIF4gKGIwK3N1bSkgXiAoKGIwID4+IDUpK2QpOworCX0gd2hpbGUgKC0tbik7CisKKwlidWZbMF0gKz0gYjA7CisJYnVmWzFdICs9IGIxOworfQorCitzdGF0aWMgdm9pZCBzdHIyaGFzaGJ1Zihjb25zdCBjaGFyICptc2csIGludCBsZW4sIF9fdTMyICpidWYsIGludCBudW0pCit7CisJX191MzIJcGFkLCB2YWw7CisJaW50CWk7CisKKwlwYWQgPSAoX191MzIpbGVuIHwgKChfX3UzMilsZW4gPDwgOCk7CisJcGFkIHw9IHBhZCA8PCAxNjsKKworCXZhbCA9IHBhZDsKKwlpZiAobGVuID4gbnVtKjQpCisJCWxlbiA9IG51bSAqIDQ7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmICgoaSAlIDQpID09IDApCisJCQl2YWwgPSBwYWQ7CisJCXZhbCA9IG1zZ1tpXSArICh2YWwgPDwgOCk7CisJCWlmICgoaSAlIDQpID09IDMpIHsKKwkJCSpidWYrKyA9IHZhbDsKKwkJCXZhbCA9IHBhZDsKKwkJCW51bS0tOworCQl9CisJfQorCWlmICgtLW51bSA+PSAwKQorCQkqYnVmKysgPSB2YWw7CisJd2hpbGUgKC0tbnVtID49IDApCisJCSpidWYrKyA9IHBhZDsKK30KKworc3RhdGljIHZvaWQgb2NmczJfZHhfZGlyX25hbWVfaGFzaChzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfZHhfaGluZm8gKmhpbmZvKQoreworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKKwljb25zdCBjaGFyCSpwOworCV9fdTMyCQlpbls4XSwgYnVmWzRdOworCisJLyoKKwkgKiBYWFg6IElzIHRoaXMgcmVhbGx5IG5lY2Vzc2FyeSwgaWYgdGhlIGluZGV4IGlzIG5ldmVyIGxvb2tlZAorCSAqIGF0IGJ5IHJlYWRkaXI/IElzIGEgaGFzaCB2YWx1ZSBvZiAnMCcgYSBiYWQgaWRlYT8KKwkgKi8KKwlpZiAoKGxlbiA9PSAxICYmICFzdHJuY21wKCIuIiwgbmFtZSwgMSkpIHx8CisJICAgIChsZW4gPT0gMiAmJiAhc3RybmNtcCgiLi4iLCBuYW1lLCAyKSkpIHsKKwkJYnVmWzBdID0gYnVmWzFdID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisjaWZkZWYgT0NGUzJfREVCVUdfRFhfRElSUworCS8qCisJICogVGhpcyBtYWtlcyBpdCB2ZXJ5IGVhc3kgdG8gZGVidWcgaW5kZXhpbmcgcHJvYmxlbXMuIFdlCisJICogc2hvdWxkIG5ldmVyIGFsbG93IHRoaXMgdG8gYmUgc2VsZWN0ZWQgd2l0aG91dCBoYW5kIGVkaXRpbmcKKwkgKiB0aGlzIGZpbGUgdGhvdWdoLgorCSAqLworCWJ1ZlswXSA9IGJ1ZlsxXSA9IGxlbjsKKwlnb3RvIG91dDsKKyNlbmRpZgorCisJbWVtY3B5KGJ1Ziwgb3NiLT5vc2JfZHhfc2VlZCwgc2l6ZW9mKGJ1ZikpOworCisJcCA9IG5hbWU7CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJc3RyMmhhc2hidWYocCwgbGVuLCBpbiwgNCk7CisJCVRFQV90cmFuc2Zvcm0oYnVmLCBpbik7CisJCWxlbiAtPSAxNjsKKwkJcCArPSAxNjsKKwl9CisKK291dDoKKwloaW5mby0+bWFqb3JfaGFzaCA9IGJ1ZlswXTsKKwloaW5mby0+bWlub3JfaGFzaCA9IGJ1ZlsxXTsKIH0KIAogLyoKQEAgLTMxMiw2ICs0NzAsNTIgQEAKIH0KIAogLyoKKyAqIFZhbGlkYXRlIGEgZGlyZWN0b3J5IHRyYWlsZXIuCisgKgorICogV2UgY2hlY2sgdGhlIHRyYWlsZXIgaGVyZSByYXRoZXIgdGhhbiBpbiBvY2ZzMl92YWxpZGF0ZV9kaXJfYmxvY2soKQorICogYmVjYXVzZSB0aGF0IGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSB0aGUgaW5vZGUgdG8gdGVzdC4KKyAqLworc3RhdGljIGludCBvY2ZzMl9jaGVja19kaXJfdHJhaWxlcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlciAqdHJhaWxlcjsKKworCXRyYWlsZXIgPSBvY2ZzMl90cmFpbGVyX2Zyb21fYmgoYmgsIGRpci0+aV9zYik7CisJaWYgKCFPQ0ZTMl9JU19WQUxJRF9ESVJfVFJBSUxFUih0cmFpbGVyKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCW9jZnMyX2Vycm9yKGRpci0+aV9zYiwKKwkJCSAgICAiSW52YWxpZCBkaXJibG9jayAjJWxsdTogIgorCQkJICAgICJzaWduYXR1cmUgPSAlLipzXG4iLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tuciwgNywKKwkJCSAgICB0cmFpbGVyLT5kYl9zaWduYXR1cmUpOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGxlNjRfdG9fY3B1KHRyYWlsZXItPmRiX2Jsa25vKSAhPSBiaC0+Yl9ibG9ja25yKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJb2NmczJfZXJyb3IoZGlyLT5pX3NiLAorCQkJICAgICJEaXJlY3RvcnkgYmxvY2sgIyVsbHUgaGFzIGFuIGludmFsaWQgIgorCQkJICAgICJkYl9ibGtubyBvZiAlbGx1IiwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdSh0cmFpbGVyLT5kYl9ibGtubykpOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGxlNjRfdG9fY3B1KHRyYWlsZXItPmRiX3BhcmVudF9kaW5vZGUpICE9CisJICAgIE9DRlMyX0koZGlyKS0+aXBfYmxrbm8pIHsKKwkJcmMgPSAtRUlOVkFMOworCQlvY2ZzMl9lcnJvcihkaXItPmlfc2IsCisJCQkgICAgIkRpcmVjdG9yeSBibG9jayAjJWxsdSBvbiBkaW5vZGUgIgorCQkJICAgICIjJWxsdSBoYXMgYW4gaW52YWxpZCBwYXJlbnRfZGlub2RlICIKKwkJCSAgICAib2YgJWxsdSIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLT5pcF9ibGtubywKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KHRyYWlsZXItPmRiX2Jsa25vKSk7CisJCWdvdG8gb3V0OworCX0KK291dDoKKwlyZXR1cm4gcmM7Cit9CisKKy8qCiAgKiBUaGlzIGZ1bmN0aW9uIGZvcmNlcyBhbGwgZXJyb3JzIHRvIC1FSU8gZm9yIGNvbnNpc3RlbmN5IHdpdGggaXRzCiAgKiBwcmVkZWNlc3Nvciwgb2NmczJfYnJlYWQoKS4gIFdlIGhhdmVuJ3QgYXVkaXRlZCB3aGF0IHJldHVybmluZyB0aGUKICAqIHJlYWwgZXJyb3IgY29kZXMgd291bGQgZG8gdG8gY2FsbGVycy4gIFdlIGxvZyB0aGUgcmVhbCBjb2RlcyB3aXRoCkBAIC0zMjIsNyArNTI2LDYgQEAKIHsKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqdG1wID0gKmJoOwotCXN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlciAqdHJhaWxlcjsKIAogCXJjID0gb2NmczJfcmVhZF92aXJ0X2Jsb2Nrcyhpbm9kZSwgdl9ibG9jaywgMSwgJnRtcCwgZmxhZ3MsCiAJCQkJICAgIG9jZnMyX3ZhbGlkYXRlX2Rpcl9ibG9jayk7CkBAIC0zMzEsNDIgKzUzNCwxMyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQkvKgotCSAqIFdlIGNoZWNrIHRoZSB0cmFpbGVyIGhlcmUgcmF0aGVyIHRoYW4gaW4KLQkgKiBvY2ZzMl92YWxpZGF0ZV9kaXJfYmxvY2soKSBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gZG9lc24ndCBoYXZlCi0JICogdGhlIGlub2RlIHRvIHRlc3QuCi0JICovCiAJaWYgKCEoZmxhZ3MgJiBPQ0ZTMl9CSF9SRUFEQUhFQUQpICYmCi0JICAgIG9jZnMyX2Rpcl9oYXNfdHJhaWxlcihpbm9kZSkpIHsKLQkJdHJhaWxlciA9IG9jZnMyX3RyYWlsZXJfZnJvbV9iaCh0bXAsIGlub2RlLT5pX3NiKTsKLQkJaWYgKCFPQ0ZTMl9JU19WQUxJRF9ESVJfVFJBSUxFUih0cmFpbGVyKSkgewotCQkJcmMgPSAtRUlOVkFMOwotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkJICAgICJJbnZhbGlkIGRpcmJsb2NrICMlbGx1OiAiCi0JCQkJICAgICJzaWduYXR1cmUgPSAlLipzXG4iLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXRtcC0+Yl9ibG9ja25yLCA3LAotCQkJCSAgICB0cmFpbGVyLT5kYl9zaWduYXR1cmUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKGxlNjRfdG9fY3B1KHRyYWlsZXItPmRiX2Jsa25vKSAhPSB0bXAtPmJfYmxvY2tucikgewotCQkJcmMgPSAtRUlOVkFMOwotCQkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsCi0JCQkJICAgICJEaXJlY3RvcnkgYmxvY2sgIyVsbHUgaGFzIGFuIGludmFsaWQgIgotCQkJCSAgICAiZGJfYmxrbm8gb2YgJWxsdSIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdG1wLT5iX2Jsb2NrbnIsCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUodHJhaWxlci0+ZGJfYmxrbm8pKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWlmIChsZTY0X3RvX2NwdSh0cmFpbGVyLT5kYl9wYXJlbnRfZGlub2RlKSAhPQotCQkgICAgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vKSB7Ci0JCQlyYyA9IC1FSU5WQUw7Ci0JCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKLQkJCQkgICAgIkRpcmVjdG9yeSBibG9jayAjJWxsdSBvbiBkaW5vZGUgIgotCQkJCSAgICAiIyVsbHUgaGFzIGFuIGludmFsaWQgcGFyZW50X2Rpbm9kZSAiCi0JCQkJICAgICJvZiAlbGx1IiwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyl0bXAtPmJfYmxvY2tuciwKLQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sCi0JCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUodHJhaWxlci0+ZGJfYmxrbm8pKTsKKwkgICAgb2NmczJfc3VwcG9ydHNfZGlyX3RyYWlsZXIoaW5vZGUpKSB7CisJCXJjID0gb2NmczJfY2hlY2tfZGlyX3RyYWlsZXIoaW5vZGUsIHRtcCk7CisJCWlmIChyYykgeworCQkJaWYgKCEqYmgpCisJCQkJYnJlbHNlKHRtcCk7CisJCQltbG9nX2Vycm5vKHJjKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtMzc5LDYgKzU1MywxNDEgQEAKIAlyZXR1cm4gcmMgPyAtRUlPIDogMDsKIH0KIAorLyoKKyAqIFJlYWQgdGhlIGJsb2NrIGF0ICdwaHlzJyB3aGljaCBiZWxvbmdzIHRvIHRoaXMgZGlyZWN0b3J5CisgKiBpbm9kZS4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vIHZpcnR1YWwtPnBoeXNpY2FsIGJsb2NrIHRyYW5zbGF0aW9uIC0KKyAqIHdoYXQncyBwYXNzZWQgaW4gaXMgYXNzdW1lZCB0byBiZSBhIHZhbGlkIGRpcmVjdG9yeSBibG9jay4KKyAqLworc3RhdGljIGludCBvY2ZzMl9yZWFkX2Rpcl9ibG9ja19kaXJlY3Qoc3RydWN0IGlub2RlICpkaXIsIHU2NCBwaHlzLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBidWZmZXJfaGVhZCAqdG1wID0gKmJoOworCisJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhkaXIsIHBoeXMsICZ0bXAsIG9jZnMyX3ZhbGlkYXRlX2Rpcl9ibG9jayk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChvY2ZzMl9zdXBwb3J0c19kaXJfdHJhaWxlcihkaXIpKSB7CisJCXJldCA9IG9jZnMyX2NoZWNrX2Rpcl90cmFpbGVyKGRpciwgdG1wKTsKKwkJaWYgKHJldCkgeworCQkJaWYgKCEqYmgpCisJCQkJYnJlbHNlKHRtcCk7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmICghcmV0ICYmICEqYmgpCisJCSpiaCA9IHRtcDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3ZhbGlkYXRlX2R4X3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKworCUJVR19PTighYnVmZmVyX3VwdG9kYXRlKGJoKSk7CisKKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopIGJoLT5iX2RhdGE7CisKKwlyZXQgPSBvY2ZzMl92YWxpZGF0ZV9tZXRhX2VjYyhzYiwgYmgtPmJfZGF0YSwgJmR4X3Jvb3QtPmRyX2NoZWNrKTsKKwlpZiAocmV0KSB7CisJCW1sb2coTUxfRVJST1IsCisJCSAgICAgIkNoZWNrc3VtIGZhaWxlZCBmb3IgZGlyIGluZGV4IHJvb3QgYmxvY2sgJWxsdVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJoLT5iX2Jsb2NrbnIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICghT0NGUzJfSVNfVkFMSURfRFhfUk9PVChkeF9yb290KSkgeworCQlvY2ZzMl9lcnJvcihzYiwKKwkJCSAgICAiRGlyIEluZGV4IFJvb3QgIyAlbGx1IGhhcyBiYWQgc2lnbmF0dXJlICUuKnMiLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZHhfcm9vdC0+ZHJfYmxrbm8pLAorCQkJICAgIDcsIGR4X3Jvb3QtPmRyX3NpZ25hdHVyZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlYWRfZHhfcm9vdChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksCisJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkeF9yb290X2JoKQoreworCWludCByZXQ7CisJdTY0IGJsa25vID0gbGU2NF90b19jcHUoZGktPmlfZHhfcm9vdCk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAgPSAqZHhfcm9vdF9iaDsKKworCXJldCA9IG9jZnMyX3JlYWRfYmxvY2soZGlyLCBibGtubywgJnRtcCwgb2NmczJfdmFsaWRhdGVfZHhfcm9vdCk7CisKKwkvKiBJZiBvY2ZzMl9yZWFkX2Jsb2NrKCkgZ290IHVzIGEgbmV3IGJoLCBwYXNzIGl0IHVwLiAqLworCWlmICghcmV0ICYmICEqZHhfcm9vdF9iaCkKKwkJKmR4X3Jvb3RfYmggPSB0bXA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3ZhbGlkYXRlX2R4X2xlYWYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqZHhfbGVhZiA9IChzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqKWJoLT5iX2RhdGE7CisKKwlCVUdfT04oIWJ1ZmZlcl91cHRvZGF0ZShiaCkpOworCisJcmV0ID0gb2NmczJfdmFsaWRhdGVfbWV0YV9lY2Moc2IsIGJoLT5iX2RhdGEsICZkeF9sZWFmLT5kbF9jaGVjayk7CisJaWYgKHJldCkgeworCQltbG9nKE1MX0VSUk9SLAorCQkgICAgICJDaGVja3N1bSBmYWlsZWQgZm9yIGRpciBpbmRleCBsZWFmIGJsb2NrICVsbHVcbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIU9DRlMyX0lTX1ZBTElEX0RYX0xFQUYoZHhfbGVhZikpIHsKKwkJb2NmczJfZXJyb3Ioc2IsICJEaXIgSW5kZXggTGVhZiBoYXMgYmFkIHNpZ25hdHVyZSAlLipzIiwKKwkJCSAgICA3LCBkeF9sZWFmLT5kbF9zaWduYXR1cmUpOworCQlyZXR1cm4gLUVST0ZTOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9jZnMyX3JlYWRfZHhfbGVhZihzdHJ1Y3QgaW5vZGUgKmRpciwgdTY0IGJsa25vLAorCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqZHhfbGVhZl9iaCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBidWZmZXJfaGVhZCAqdG1wID0gKmR4X2xlYWZfYmg7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2Jsb2NrKGRpciwgYmxrbm8sICZ0bXAsIG9jZnMyX3ZhbGlkYXRlX2R4X2xlYWYpOworCisJLyogSWYgb2NmczJfcmVhZF9ibG9jaygpIGdvdCB1cyBhIG5ldyBiaCwgcGFzcyBpdCB1cC4gKi8KKwlpZiAoIXJldCAmJiAhKmR4X2xlYWZfYmgpCisJCSpkeF9sZWFmX2JoID0gdG1wOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJlYWQgYSBzZXJpZXMgb2YgZHhfbGVhZiBibG9ja3MuIFRoaXMgZXhwZWN0cyBhbGwgYnVmZmVyX2hlYWQKKyAqIHBvaW50ZXJzIHRvIGJlIE5VTEwgb24gZnVuY3Rpb24gZW50cnkuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfcmVhZF9keF9sZWF2ZXMoc3RydWN0IGlub2RlICpkaXIsIHU2NCBzdGFydCwgaW50IG51bSwKKwkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkeF9sZWFmX2JocykKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gb2NmczJfcmVhZF9ibG9ja3MoZGlyLCBzdGFydCwgbnVtLCBkeF9sZWFmX2JocywgMCwKKwkJCQlvY2ZzMl92YWxpZGF0ZV9keF9sZWFmKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpvY2ZzMl9maW5kX2VudHJ5X2VsKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAogCQkJCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICoqcmVzX2RpcikKQEAgLTQ4MCwzOSArNzg5LDM0MCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX2xvb2t1cF9yZWMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X2xpc3QgKmVsLAorCQkJCSAgIHUzMiBtYWpvcl9oYXNoLAorCQkJCSAgIHUzMiAqcmV0X2Nwb3MsCisJCQkJICAgdTY0ICpyZXRfcGh5c19ibGtubywKKwkJCQkgICB1bnNpZ25lZCBpbnQgKnJldF9jbGVuKQoreworCWludCByZXQgPSAwLCBpLCBmb3VuZDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmViX2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X2Jsb2NrICplYjsKKwlzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyAqcmVjID0gTlVMTDsKKworCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7CisJCXJldCA9IG9jZnMyX2ZpbmRfbGVhZihpbm9kZSwgZWwsIG1ham9yX2hhc2gsICZlYl9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZWIgPSAoc3RydWN0IG9jZnMyX2V4dGVudF9ibG9jayAqKSBlYl9iaC0+Yl9kYXRhOworCQllbCA9ICZlYi0+aF9saXN0OworCisJCWlmIChlbC0+bF90cmVlX2RlcHRoKSB7CisJCQlvY2ZzMl9lcnJvcihpbm9kZS0+aV9zYiwKKwkJCQkgICAgIklub2RlICVsdSBoYXMgbm9uIHplcm8gdHJlZSBkZXB0aCBpbiAiCisJCQkJICAgICJidHJlZSB0cmVlIGJsb2NrICVsbHVcbiIsIGlub2RlLT5pX2lubywKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyllYl9iaC0+Yl9ibG9ja25yKTsKKwkJCXJldCA9IC1FUk9GUzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJZm91bmQgPSAwOworCWZvciAoaSA9IGxlMTZfdG9fY3B1KGVsLT5sX25leHRfZnJlZV9yZWMpIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJcmVjID0gJmVsLT5sX3JlY3NbaV07CisKKwkJaWYgKGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSA8PSBtYWpvcl9oYXNoKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZm91bmQpIHsKKwkJb2NmczJfZXJyb3IoaW5vZGUtPmlfc2IsICJJbm9kZSAlbHUgaGFzIGJhZCBleHRlbnQgIgorCQkJICAgICJyZWNvcmQgKCV1LCAldSwgMCkgaW4gYnRyZWUiLCBpbm9kZS0+aV9pbm8sCisJCQkgICAgbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpLAorCQkJICAgIG9jZnMyX3JlY19jbHVzdGVycyhlbCwgcmVjKSk7CisJCXJldCA9IC1FUk9GUzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJldF9waHlzX2Jsa25vKQorCQkqcmV0X3BoeXNfYmxrbm8gPSBsZTY0X3RvX2NwdShyZWMtPmVfYmxrbm8pOworCWlmIChyZXRfY3BvcykKKwkJKnJldF9jcG9zID0gbGUzMl90b19jcHUocmVjLT5lX2Nwb3MpOworCWlmIChyZXRfY2xlbikKKwkJKnJldF9jbGVuID0gbGUxNl90b19jcHUocmVjLT5lX2xlYWZfY2x1c3RlcnMpOworCitvdXQ6CisJYnJlbHNlKGViX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUmV0dXJucyB0aGUgYmxvY2sgaW5kZXgsIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBjbHVzdGVyIHdoaWNoIHRoaXMKKyAqIGhhc2ggYmVsb25ncyB0b28uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IF9fb2NmczJfZHhfZGlyX2hhc2hfaWR4KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCQkJICAgdTMyIG1pbm9yX2hhc2gpCit7CisJcmV0dXJuIG1pbm9yX2hhc2ggJiBvc2ItPm9zYl9keF9tYXNrOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvY2ZzMl9keF9kaXJfaGFzaF9pZHgoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJCSAgc3RydWN0IG9jZnMyX2R4X2hpbmZvICpoaW5mbykKK3sKKwlyZXR1cm4gX19vY2ZzMl9keF9kaXJfaGFzaF9pZHgob3NiLCBoaW5mby0+bWlub3JfaGFzaCk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX2xvb2t1cChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZWwsCisJCQkgICAgICAgc3RydWN0IG9jZnMyX2R4X2hpbmZvICpoaW5mbywKKwkJCSAgICAgICB1MzIgKnJldF9jcG9zLAorCQkJICAgICAgIHU2NCAqcmV0X3BoeXNfYmxrbm8pCit7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IGNlbmQsIHVuaW5pdGlhbGl6ZWRfdmFyKGNsZW4pOworCXUzMiB1bmluaXRpYWxpemVkX3ZhcihjcG9zKTsKKwl1NjQgdW5pbml0aWFsaXplZF92YXIoYmxrbm8pOworCXUzMiBuYW1lX2hhc2ggPSBoaW5mby0+bWFqb3JfaGFzaDsKKworCXJldCA9IG9jZnMyX2R4X2Rpcl9sb29rdXBfcmVjKGlub2RlLCBlbCwgbmFtZV9oYXNoLCAmY3BvcywgJmJsa25vLAorCQkJCSAgICAgICZjbGVuKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJY2VuZCA9IGNwb3MgKyBjbGVuOworCWlmIChuYW1lX2hhc2ggPj0gY2VuZCkgeworCQkvKiBXZSB3YW50IHRoZSBsYXN0IGNsdXN0ZXIgKi8KKwkJYmxrbm8gKz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLCBjbGVuIC0gMSk7CisJCWNwb3MgKz0gY2xlbiAtIDE7CisJfSBlbHNlIHsKKwkJYmxrbm8gKz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLAorCQkJCQkJICBuYW1lX2hhc2ggLSBjcG9zKTsKKwkJY3BvcyA9IG5hbWVfaGFzaDsKKwl9CisKKwkvKgorCSAqIFdlIG5vdyBoYXZlIHRoZSBjbHVzdGVyIHdoaWNoIHNob3VsZCBob2xkIG91ciBlbnRyeS4gVG8KKwkgKiBmaW5kIHRoZSBleGFjdCBibG9jayBmcm9tIHRoZSBzdGFydCBvZiB0aGUgY2x1c3RlciB0bworCSAqIHNlYXJjaCwgd2UgdGFrZSB0aGUgbG93ZXIgYml0cyBvZiB0aGUgaGFzaC4KKwkgKi8KKwlibGtubyArPSBvY2ZzMl9keF9kaXJfaGFzaF9pZHgoT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCBoaW5mbyk7CisKKwlpZiAocmV0X3BoeXNfYmxrbm8pCisJCSpyZXRfcGh5c19ibGtubyA9IGJsa25vOworCWlmIChyZXRfY3BvcykKKwkJKnJldF9jcG9zID0gY3BvczsKKworb3V0OgorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvY2ZzMl9keF9kaXJfc2VhcmNoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290LAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqcmVzKQoreworCWludCByZXQsIGksIGZvdW5kOworCXU2NCB1bmluaXRpYWxpemVkX3ZhcihwaHlzKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X2xlYWZfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9keF9sZWFmICpkeF9sZWFmOworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeSAqZHhfZW50cnkgPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2VudF9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGlyX2VudCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2R4X2hpbmZvICpoaW5mbyA9ICZyZXMtPmRsX2hpbmZvOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZHJfZWw7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgKmVudHJ5X2xpc3Q7CisKKwlvY2ZzMl9keF9kaXJfbmFtZV9oYXNoKGRpciwgbmFtZSwgbmFtZWxlbiwgJnJlcy0+ZGxfaGluZm8pOworCisJaWYgKG9jZnMyX2R4X3Jvb3RfaW5saW5lKGR4X3Jvb3QpKSB7CisJCWVudHJ5X2xpc3QgPSAmZHhfcm9vdC0+ZHJfZW50cmllczsKKwkJZ290byBzZWFyY2g7CisJfQorCisJZHJfZWwgPSAmZHhfcm9vdC0+ZHJfbGlzdDsKKworCXJldCA9IG9jZnMyX2R4X2Rpcl9sb29rdXAoZGlyLCBkcl9lbCwgaGluZm8sIE5VTEwsICZwaHlzKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJbWxvZygwLCAiRGlyICVsbHU6IG5hbWU6IFwiJS4qc1wiLCBsb29rdXAgb2YgaGFzaDogJXUuMHgleCAiCisJICAgICAicmV0dXJuczogJWxsdVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLT5pcF9ibGtubywKKwkgICAgIG5hbWVsZW4sIG5hbWUsIGhpbmZvLT5tYWpvcl9oYXNoLCBoaW5mby0+bWlub3JfaGFzaCwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGh5cyk7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2R4X2xlYWYoZGlyLCBwaHlzLCAmZHhfbGVhZl9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWR4X2xlYWYgPSAoc3RydWN0IG9jZnMyX2R4X2xlYWYgKikgZHhfbGVhZl9iaC0+Yl9kYXRhOworCisJbWxvZygwLCAibGVhZiBpbmZvOiBudW1fdXNlZDogJWQsIGNvdW50OiAlZFxuIiwKKwkgICAgIGxlMTZfdG9fY3B1KGR4X2xlYWYtPmRsX2xpc3QuZGVfbnVtX3VzZWQpLAorCSAgICAgbGUxNl90b19jcHUoZHhfbGVhZi0+ZGxfbGlzdC5kZV9jb3VudCkpOworCisJZW50cnlfbGlzdCA9ICZkeF9sZWFmLT5kbF9saXN0OworCitzZWFyY2g6CisJLyoKKwkgKiBFbXB0eSBsZWFmIGlzIGxlZ2FsLCBzbyBubyBuZWVkIHRvIGNoZWNrIGZvciB0aGF0LgorCSAqLworCWZvdW5kID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUoZW50cnlfbGlzdC0+ZGVfbnVtX3VzZWQpOyBpKyspIHsKKwkJZHhfZW50cnkgPSAmZW50cnlfbGlzdC0+ZGVfZW50cmllc1tpXTsKKworCQlpZiAoaGluZm8tPm1ham9yX2hhc2ggIT0gbGUzMl90b19jcHUoZHhfZW50cnktPmR4X21ham9yX2hhc2gpCisJCSAgICB8fCBoaW5mby0+bWlub3JfaGFzaCAhPSBsZTMyX3RvX2NwdShkeF9lbnRyeS0+ZHhfbWlub3JfaGFzaCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBTZWFyY2ggdW5pbmRleGVkIGxlYWYgYmxvY2sgbm93LiBXZSdyZSBub3QKKwkJICogZ3VhcmFudGVlZCB0byBmaW5kIGFueXRoaW5nLgorCQkgKi8KKwkJcmV0ID0gb2NmczJfcmVhZF9kaXJfYmxvY2tfZGlyZWN0KGRpciwKKwkJCQkJICBsZTY0X3RvX2NwdShkeF9lbnRyeS0+ZHhfZGlyZW50X2JsayksCisJCQkJCSAgJmRpcl9lbnRfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qCisJCSAqIFhYWDogV2Ugc2hvdWxkIGNoZWNrIHRoZSB1bmluZGV4ZWQgYmxvY2sgaGVyZSwKKwkJICogYmVmb3JlIHVzaW5nIGl0LgorCQkgKi8KKworCQlmb3VuZCA9IG9jZnMyX3NlYXJjaF9kaXJibG9jayhkaXJfZW50X2JoLCBkaXIsIG5hbWUsIG5hbWVsZW4sCisJCQkJCSAgICAgIDAsIGRpcl9lbnRfYmgtPmJfZGF0YSwKKwkJCQkJICAgICAgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSwgJmRpcl9lbnQpOworCQlpZiAoZm91bmQgPT0gMSkKKwkJCWJyZWFrOworCisJCWlmIChmb3VuZCA9PSAtMSkgeworCQkJLyogVGhpcyBtZWFucyB3ZSBmb3VuZCBhIGJhZCBkaXJlY3RvcnkgZW50cnkuICovCisJCQlyZXQgPSAtRUlPOworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlicmVsc2UoZGlyX2VudF9iaCk7CisJCWRpcl9lbnRfYmggPSBOVUxMOworCX0KKworCWlmIChmb3VuZCA8PSAwKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKworCXJlcy0+ZGxfbGVhZl9iaCA9IGRpcl9lbnRfYmg7CisJcmVzLT5kbF9lbnRyeSA9IGRpcl9lbnQ7CisJcmVzLT5kbF9keF9sZWFmX2JoID0gZHhfbGVhZl9iaDsKKwlyZXMtPmRsX2R4X2VudHJ5ID0gZHhfZW50cnk7CisKKwlyZXQgPSAwOworb3V0OgorCWlmIChyZXQpIHsKKwkJYnJlbHNlKGR4X2xlYWZfYmgpOworCQlicmVsc2UoZGlyX2VudF9iaCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZmluZF9lbnRyeV9keChjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2lub2RlX2Jsb2NrKGRpciwgJmRpX2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2R4X3Jvb3QoZGlyLCBkaSwgJmR4X3Jvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKSBkeF9yb290X2JoLT5iX2RhdGE7CisKKwlyZXQgPSBvY2ZzMl9keF9kaXJfc2VhcmNoKG5hbWUsIG5hbWVsZW4sIGRpciwgZHhfcm9vdCwgbG9va3VwKTsKKwlpZiAocmV0KSB7CisJCWlmIChyZXQgIT0gLUVOT0VOVCkKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJbG9va3VwLT5kbF9keF9yb290X2JoID0gZHhfcm9vdF9iaDsKKwlkeF9yb290X2JoID0gTlVMTDsKK291dDoKKwlicmVsc2UoZGlfYmgpOworCWJyZWxzZShkeF9yb290X2JoKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogVHJ5IHRvIGZpbmQgYW4gZW50cnkgb2YgdGhlIHByb3ZpZGVkIG5hbWUgd2l0aGluICdkaXInLgogICoKLSAqIElmIG5vdGhpbmcgd2FzIGZvdW5kLCBOVUxMIGlzIHJldHVybmVkLiBPdGhlcndpc2UsIGEgYnVmZmVyX2hlYWQKLSAqIGFuZCBwb2ludGVyIHRvIHRoZSBkaXIgZW50cnkgYXJlIHBhc3NlZCBiYWNrLgorICogSWYgbm90aGluZyB3YXMgZm91bmQsIC1FTk9FTlQgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgemVybyBpcworICogcmV0dXJuZWQgYW5kIHRoZSBzdHJ1Y3QgJ3Jlcycgd2lsbCBjb250YWluIGluZm9ybWF0aW9uIHVzZWZ1bCB0bworICogb3RoZXIgZGlyZWN0b3J5IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuCiAgKgogICogQ2FsbGVyIGNhbiBOT1QgYXNzdW1lIGFueXRoaW5nIGFib3V0IHRoZSBjb250ZW50cyBvZiB0aGUKLSAqIGJ1ZmZlcl9oZWFkIC0gaXQgaXMgcGFzc2VkIGJhY2sgb25seSBzbyB0aGF0IGl0IGNhbiBiZSBwYXNzZWQgaW50bwotICogYW55IG9uZSBvZiB0aGUgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyAoYWRkIGVudHJ5LCBkZWxldGUgZW50cnksCi0gKiBldGMpLiBBcyBhbiBleGFtcGxlLCBiaCBpbiB0aGUgZXh0ZW50IGRpcmVjdG9yeSBjYXNlIGlzIGEgZGF0YQotICogYmxvY2ssIGluIHRoZSBpbmxpbmUtZGF0YSBjYXNlIGl0IGFjdHVhbGx5IHBvaW50cyB0byBhbiBpbm9kZS4KKyAqIGJ1ZmZlcl9oZWFkcyAtIHRoZXkgYXJlIHBhc3NlZCBiYWNrIG9ubHkgc28gdGhhdCBpdCBjYW4gYmUgcGFzc2VkCisgKiBpbnRvIGFueSBvbmUgb2YgdGhlIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgKGFkZCBlbnRyeSwgZGVsZXRlCisgKiBlbnRyeSwgZXRjKS4gQXMgYW4gZXhhbXBsZSwgYmggaW4gdGhlIGV4dGVudCBkaXJlY3RvcnkgY2FzZSBpcyBhCisgKiBkYXRhIGJsb2NrLCBpbiB0aGUgaW5saW5lLWRhdGEgY2FzZSBpdCBhY3R1YWxseSBwb2ludHMgdG8gYW4gaW5vZGUsCisgKiBpbiB0aGUgaW5kZXhlZCBkaXJlY3RvcnkgY2FzZSwgbXVsdGlwbGUgYnVmZmVycyBhcmUgaW52b2x2ZWQuCiAgKi8KLXN0cnVjdCBidWZmZXJfaGVhZCAqb2NmczJfZmluZF9lbnRyeShjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJCQkgICAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkJCSAgICAgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKnJlc19kaXIpCitpbnQgb2NmczJfZmluZF9lbnRyeShjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCiB7Ci0JKnJlc19kaXIgPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqcmVzX2RpciA9IE5VTEw7CiAKKwlpZiAob2NmczJfZGlyX2luZGV4ZWQoZGlyKSkKKwkJcmV0dXJuIG9jZnMyX2ZpbmRfZW50cnlfZHgobmFtZSwgbmFtZWxlbiwgZGlyLCBsb29rdXApOworCisJLyoKKwkgKiBUaGUgdW5pbmRleGVkIGRpciBjb2RlIG9ubHkgdXNlcyBwYXJ0IG9mIHRoZSBsb29rdXAKKwkgKiBzdHJ1Y3R1cmUsIHNvIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIHB1c2ggaXQgZG93biBmdXJ0aGVyCisJICogdGhhbiB0aGlzLgorCSAqLwogCWlmIChPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKQotCQlyZXR1cm4gb2NmczJfZmluZF9lbnRyeV9pZChuYW1lLCBuYW1lbGVuLCBkaXIsIHJlc19kaXIpOworCQliaCA9IG9jZnMyX2ZpbmRfZW50cnlfaWQobmFtZSwgbmFtZWxlbiwgZGlyLCAmcmVzX2Rpcik7CisJZWxzZQorCQliaCA9IG9jZnMyX2ZpbmRfZW50cnlfZWwobmFtZSwgbmFtZWxlbiwgZGlyLCAmcmVzX2Rpcik7CiAKLQlyZXR1cm4gb2NmczJfZmluZF9lbnRyeV9lbChuYW1lLCBuYW1lbGVuLCBkaXIsIHJlc19kaXIpOworCWlmIChiaCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWxvb2t1cC0+ZGxfbGVhZl9iaCA9IGJoOworCWxvb2t1cC0+ZGxfZW50cnkgPSByZXNfZGlyOworCXJldHVybiAwOwogfQogCiAvKgogICogVXBkYXRlIGlub2RlIG51bWJlciBhbmQgdHlwZSBvZiBhIHByZXZpb3VzbHkgZm91bmQgZGlyZWN0b3J5IGVudHJ5LgogICovCiBpbnQgb2NmczJfdXBkYXRlX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBoYW5kbGVfdCAqaGFuZGxlLAotCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkZV9iaCwgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGUsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKnJlcywKIAkJICAgICAgIHN0cnVjdCBpbm9kZSAqbmV3X2VudHJ5X2lub2RlKQogewogCWludCByZXQ7CiAJb2NmczJfam91cm5hbF9hY2Nlc3NfZnVuYyBhY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYjsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZSA9IHJlcy0+ZGxfZW50cnk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkZV9iaCA9IHJlcy0+ZGxfbGVhZl9iaDsKIAogCS8qCiAJICogVGhlIHNhbWUgY29kZSB3b3JrcyBmaW5lIGZvciBib3RoIGlubGluZS1kYXRhIGFuZCBleHRlbnQKQEAgLTUzOCw2ICsxMTQ4LDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoKKyAqIF9fb2NmczJfZGVsZXRlX2VudHJ5IGRlbGV0ZXMgYSBkaXJlY3RvcnkgZW50cnkgYnkgbWVyZ2luZyBpdCB3aXRoIHRoZQorICogcHJldmlvdXMgZW50cnkKKyAqLwogc3RhdGljIGludCBfX29jZnMyX2RlbGV0ZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZV9kZWwsCiAJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgY2hhciAqZmlyc3RfZGUsCkBAIC01ODcsNiArMTIwMSwxODEgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IG9jZnMyX2ZpZ3VyZV9kaXJlbnRfaG9sZShzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZSkKK3sKKwl1bnNpZ25lZCBpbnQgaG9sZTsKKworCWlmIChsZTY0X3RvX2NwdShkZS0+aW5vZGUpID09IDApCisJCWhvbGUgPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CisJZWxzZQorCQlob2xlID0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pIC0KKwkJCU9DRlMyX0RJUl9SRUNfTEVOKGRlLT5uYW1lX2xlbik7CisKKwlyZXR1cm4gaG9sZTsKK30KKworc3RhdGljIGludCBvY2ZzMl9maW5kX21heF9yZWNfbGVuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcmJsb2NrX2JoKQoreworCWludCBzaXplLCB0aGlzX2hvbGUsIGxhcmdlc3RfaG9sZSA9IDA7CisJY2hhciAqdHJhaWxlciwgKmRlX2J1ZiwgKmxpbWl0LCAqc3RhcnQgPSBkaXJibG9ja19iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlOworCisJdHJhaWxlciA9IChjaGFyICopb2NmczJfdHJhaWxlcl9mcm9tX2JoKGRpcmJsb2NrX2JoLCBzYik7CisJc2l6ZSA9IG9jZnMyX2Rpcl90cmFpbGVyX2Jsa19vZmYoc2IpOworCWxpbWl0ID0gc3RhcnQgKyBzaXplOworCWRlX2J1ZiA9IHN0YXJ0OworCWRlID0gKHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKilkZV9idWY7CisJZG8geworCQlpZiAoZGVfYnVmICE9IHRyYWlsZXIpIHsKKwkJCXRoaXNfaG9sZSA9IG9jZnMyX2ZpZ3VyZV9kaXJlbnRfaG9sZShkZSk7CisJCQlpZiAodGhpc19ob2xlID4gbGFyZ2VzdF9ob2xlKQorCQkJCWxhcmdlc3RfaG9sZSA9IHRoaXNfaG9sZTsKKwkJfQorCisJCWRlX2J1ZiArPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CisJCWRlID0gKHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKilkZV9idWY7CisJfSB3aGlsZSAoZGVfYnVmIDwgbGltaXQpOworCisJaWYgKGxhcmdlc3RfaG9sZSA+PSBPQ0ZTMl9ESVJfTUlOX1JFQ19MRU4pCisJCXJldHVybiBsYXJnZXN0X2hvbGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX2R4X2xpc3RfcmVtb3ZlX2VudHJ5KHN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0ICplbnRyeV9saXN0LAorCQkJCSAgICAgICBpbnQgaW5kZXgpCit7CisJaW50IG51bV91c2VkID0gbGUxNl90b19jcHUoZW50cnlfbGlzdC0+ZGVfbnVtX3VzZWQpOworCisJaWYgKG51bV91c2VkID09IDEgfHwgaW5kZXggPT0gKG51bV91c2VkIC0gMSkpCisJCWdvdG8gY2xlYXI7CisKKwltZW1tb3ZlKCZlbnRyeV9saXN0LT5kZV9lbnRyaWVzW2luZGV4XSwKKwkJJmVudHJ5X2xpc3QtPmRlX2VudHJpZXNbaW5kZXggKyAxXSwKKwkJKG51bV91c2VkIC0gaW5kZXggLSAxKSpzaXplb2Yoc3RydWN0IG9jZnMyX2R4X2VudHJ5KSk7CitjbGVhcjoKKwludW1fdXNlZC0tOworCW1lbXNldCgmZW50cnlfbGlzdC0+ZGVfZW50cmllc1tudW1fdXNlZF0sIDAsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfZHhfZW50cnkpKTsKKwllbnRyeV9saXN0LT5kZV9udW1fdXNlZCA9IGNwdV90b19sZTE2KG51bV91c2VkKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9kZWxldGVfZW50cnlfZHgoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpkaXIsCisJCQkJIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQoreworCWludCByZXQsIGluZGV4LCBtYXhfcmVjX2xlbiwgYWRkX3RvX2ZyZWVfbGlzdCA9IDA7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gbG9va3VwLT5kbF9keF9yb290X2JoOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbGVhZl9iaCA9IGxvb2t1cC0+ZGxfbGVhZl9iaDsKKwlzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqZHhfbGVhZjsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnkgKmR4X2VudHJ5ID0gbG9va3VwLT5kbF9keF9lbnRyeTsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2Jsb2NrX3RyYWlsZXIgKnRyYWlsZXI7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgKmVudHJ5X2xpc3Q7CisKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBhIGJpdCBtZXNzeSBiZWNhdXNlIHdlIG1pZ2h0IGhhdmUgdG8KKwkgKiBtb2RpZnkgdGhlIHJvb3QgYmxvY2ssIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgaW5kZXhlZAorCSAqIGVudHJpZXMgYXJlIHN0b3JlZCBpbmxpbmUuCisJICovCisKKwkvKgorCSAqICpPbmx5KiBzZXQgJ2VudHJ5X2xpc3QnIGhlcmUsIGJhc2VkIG9uIHdoZXJlIHdlJ3JlIGxvb2tpbmcKKwkgKiBmb3IgdGhlIGluZGV4ZWQgZW50cmllcy4gTGF0ZXIsIHdlIG1pZ2h0IHN0aWxsIHdhbnQgdG8KKwkgKiBqb3VybmFsIGJvdGggYmxvY2tzLCBiYXNlZCBvbiBmcmVlIGxpc3Qgc3RhdGUuCisJICovCisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKKwlpZiAob2NmczJfZHhfcm9vdF9pbmxpbmUoZHhfcm9vdCkpIHsKKwkJZW50cnlfbGlzdCA9ICZkeF9yb290LT5kcl9lbnRyaWVzOworCX0gZWxzZSB7CisJCWR4X2xlYWYgPSAoc3RydWN0IG9jZnMyX2R4X2xlYWYgKikgbG9va3VwLT5kbF9keF9sZWFmX2JoLT5iX2RhdGE7CisJCWVudHJ5X2xpc3QgPSAmZHhfbGVhZi0+ZGxfbGlzdDsKKwl9CisKKwkvKiBOZWl0aGVyIG9mIHRoZXNlIGFyZSBhIGRpc2sgY29ycnVwdGlvbiAtIHRoYXQgc2hvdWxkIGhhdmUKKwkgKiBiZWVuIGNhdWdodCBieSBsb29rdXAsIGJlZm9yZSB3ZSBnb3QgaGVyZS4gKi8KKwlCVUdfT04obGUxNl90b19jcHUoZW50cnlfbGlzdC0+ZGVfY291bnQpIDw9IDApOworCUJVR19PTihsZTE2X3RvX2NwdShlbnRyeV9saXN0LT5kZV9udW1fdXNlZCkgPD0gMCk7CisKKwlpbmRleCA9IChjaGFyICopZHhfZW50cnkgLSAoY2hhciAqKWVudHJ5X2xpc3QtPmRlX2VudHJpZXM7CisJaW5kZXggLz0gc2l6ZW9mKCpkeF9lbnRyeSk7CisKKwlpZiAoaW5kZXggPj0gbGUxNl90b19jcHUoZW50cnlfbGlzdC0+ZGVfbnVtX3VzZWQpKSB7CisJCW1sb2coTUxfRVJST1IsICJEaXIgJWxsdTogQmFkIGR4X2VudHJ5IHB0ciBpZHggJWQsICglcCwgJXApXG4iLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLT5pcF9ibGtubywgaW5kZXgsCisJCSAgICAgZW50cnlfbGlzdCwgZHhfZW50cnkpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKgorCSAqIFdlIGtub3cgdGhhdCByZW1vdmFsIG9mIHRoaXMgZGlyZW50IHdpbGwgbGVhdmUgZW5vdWdoIHJvb20KKwkgKiBmb3IgYSBuZXcgb25lLCBzbyBhZGQgdGhpcyBibG9jayB0byB0aGUgZnJlZSBsaXN0IGlmIGl0CisJICogaXNuJ3QgYWxyZWFkeSB0aGVyZS4KKwkgKi8KKwl0cmFpbGVyID0gb2NmczJfdHJhaWxlcl9mcm9tX2JoKGxlYWZfYmgsIGRpci0+aV9zYik7CisJaWYgKHRyYWlsZXItPmRiX2ZyZWVfcmVjX2xlbiA9PSAwKQorCQlhZGRfdG9fZnJlZV9saXN0ID0gMTsKKworCS8qCisJICogQWRkIHRoZSBibG9jayBob2xkaW5nIG91ciBpbmRleCBpbnRvIHRoZSBqb3VybmFsIGJlZm9yZQorCSAqIHJlbW92aW5nIHRoZSB1bmluZGV4ZWQgZW50cnkuIElmIHdlIGdldCBhbiBlcnJvciByZXR1cm4KKwkgKiBmcm9tIF9fb2NmczJfZGVsZXRlX2VudHJ5KCksIHRoZW4gaXQgaGFzbid0IHJlbW92ZWQgdGhlCisJICogZW50cnkgeWV0LiBMaWtld2lzZSwgc3VjY2Vzc2Z1bCByZXR1cm4gbWVhbnMgd2UgKm11c3QqCisJICogcmVtb3ZlIHRoZSBpbmRleGVkIGVudHJ5LgorCSAqCisJICogV2UncmUgYWxzbyBjYXJlZnVsIHRvIGpvdXJuYWwgdGhlIHJvb3QgdHJlZSBibG9jayBoZXJlIGFzCisJICogdGhlIGVudHJ5IGNvdW50IG5lZWRzIHRvIGJlIHVwZGF0ZWQuIEFsc28sIHdlIG1pZ2h0IGJlCisJICogYWRkaW5nIHRvIHRoZSBzdGFydCBvZiB0aGUgZnJlZSBsaXN0LgorCSAqLworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgZGlyLCBkeF9yb290X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFvY2ZzMl9keF9yb290X2lubGluZShkeF9yb290KSkgeworCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGUsIGRpciwKKwkJCQkJICAgICAgbG9va3VwLT5kbF9keF9sZWFmX2JoLAorCQkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJbWxvZygwLCAiRGlyICVsbHU6IGRlbGV0ZSBlbnRyeSBhdCBpbmRleDogJWRcbiIsCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8sIGluZGV4KTsKKworCXJldCA9IF9fb2NmczJfZGVsZXRlX2VudHJ5KGhhbmRsZSwgZGlyLCBsb29rdXAtPmRsX2VudHJ5LAorCQkJCSAgIGxlYWZfYmgsIGxlYWZfYmgtPmJfZGF0YSwgbGVhZl9iaC0+Yl9zaXplKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJbWF4X3JlY19sZW4gPSBvY2ZzMl9maW5kX21heF9yZWNfbGVuKGRpci0+aV9zYiwgbGVhZl9iaCk7CisJdHJhaWxlci0+ZGJfZnJlZV9yZWNfbGVuID0gY3B1X3RvX2xlMTYobWF4X3JlY19sZW4pOworCWlmIChhZGRfdG9fZnJlZV9saXN0KSB7CisJCXRyYWlsZXItPmRiX2ZyZWVfbmV4dCA9IGR4X3Jvb3QtPmRyX2ZyZWVfYmxrOworCQlkeF9yb290LT5kcl9mcmVlX2JsayA9IGNwdV90b19sZTY0KGxlYWZfYmgtPmJfYmxvY2tucik7CisJCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkeF9yb290X2JoKTsKKwl9CisKKwkvKiBsZWFmX2JoIHdhcyBqb3VybmFsX2FjY2Vzc2VkIGZvciB1cyBpbiBfX29jZnMyX2RlbGV0ZV9lbnRyeSAqLworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBsZWFmX2JoKTsKKworCWxlMzJfYWRkX2NwdSgmZHhfcm9vdC0+ZHJfbnVtX2VudHJpZXMsIC0xKTsKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZHhfcm9vdF9iaCk7CisKKwlvY2ZzMl9keF9saXN0X3JlbW92ZV9lbnRyeShlbnRyeV9saXN0LCBpbmRleCk7CisKKwlpZiAoIW9jZnMyX2R4X3Jvb3RfaW5saW5lKGR4X3Jvb3QpKQorCQlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbG9va3VwLT5kbF9keF9sZWFmX2JoKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2RlbGV0ZV9lbnRyeV9pZChoYW5kbGVfdCAqaGFuZGxlLAogCQkJCQlzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGVfZGVsLApAQCAtNjI0LDE4ICsxNDEzLDIyIEBACiB9CiAKIC8qCi0gKiBvY2ZzMl9kZWxldGVfZW50cnkgZGVsZXRlcyBhIGRpcmVjdG9yeSBlbnRyeSBieSBtZXJnaW5nIGl0IHdpdGggdGhlCi0gKiBwcmV2aW91cyBlbnRyeQorICogRGVsZXRlIGEgZGlyZWN0b3J5IGVudHJ5LiBIaWRlIHRoZSBkZXRhaWxzIG9mIGRpcmVjdG9yeQorICogaW1wbGVtZW50YXRpb24gZnJvbSB0aGUgY2FsbGVyLgogICovCiBpbnQgb2NmczJfZGVsZXRlX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJICAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRlX2RlbCwKLQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKnJlcykKIHsKLQlpZiAoT0NGUzJfSShkaXIpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkKLQkJcmV0dXJuIG9jZnMyX2RlbGV0ZV9lbnRyeV9pZChoYW5kbGUsIGRpciwgZGVfZGVsLCBiaCk7CisJaWYgKG9jZnMyX2Rpcl9pbmRleGVkKGRpcikpCisJCXJldHVybiBvY2ZzMl9kZWxldGVfZW50cnlfZHgoaGFuZGxlLCBkaXIsIHJlcyk7CiAKLQlyZXR1cm4gb2NmczJfZGVsZXRlX2VudHJ5X2VsKGhhbmRsZSwgZGlyLCBkZV9kZWwsIGJoKTsKKwlpZiAoT0NGUzJfSShkaXIpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkKKwkJcmV0dXJuIG9jZnMyX2RlbGV0ZV9lbnRyeV9pZChoYW5kbGUsIGRpciwgcmVzLT5kbF9lbnRyeSwKKwkJCQkJICAgICByZXMtPmRsX2xlYWZfYmgpOworCisJcmV0dXJuIG9jZnMyX2RlbGV0ZV9lbnRyeV9lbChoYW5kbGUsIGRpciwgcmVzLT5kbF9lbnRyeSwKKwkJCQkgICAgIHJlcy0+ZGxfbGVhZl9iaCk7CiB9CiAKIC8qCkBAIC02NjMsMTggKzE0NTYsMTY2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG9jZnMyX2R4X2Rpcl9sZWFmX2luc2VydF90YWlsKHN0cnVjdCBvY2ZzMl9keF9sZWFmICpkeF9sZWFmLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl9keF9lbnRyeSAqZHhfbmV3X2VudHJ5KQoreworCWludCBpOworCisJaSA9IGxlMTZfdG9fY3B1KGR4X2xlYWYtPmRsX2xpc3QuZGVfbnVtX3VzZWQpOworCWR4X2xlYWYtPmRsX2xpc3QuZGVfZW50cmllc1tpXSA9ICpkeF9uZXdfZW50cnk7CisKKwlsZTE2X2FkZF9jcHUoJmR4X2xlYWYtPmRsX2xpc3QuZGVfbnVtX3VzZWQsIDEpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9keF9lbnRyeV9saXN0X2luc2VydChzdHJ1Y3Qgb2NmczJfZHhfZW50cnlfbGlzdCAqZW50cnlfbGlzdCwKKwkJCQkgICAgICAgc3RydWN0IG9jZnMyX2R4X2hpbmZvICpoaW5mbywKKwkJCQkgICAgICAgdTY0IGRpcmVudF9ibGspCit7CisJaW50IGk7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5ICpkeF9lbnRyeTsKKworCWkgPSBsZTE2X3RvX2NwdShlbnRyeV9saXN0LT5kZV9udW1fdXNlZCk7CisJZHhfZW50cnkgPSAmZW50cnlfbGlzdC0+ZGVfZW50cmllc1tpXTsKKworCW1lbXNldChkeF9lbnRyeSwgMCwgc2l6ZW9mKCpkeF9lbnRyeSkpOworCWR4X2VudHJ5LT5keF9tYWpvcl9oYXNoID0gY3B1X3RvX2xlMzIoaGluZm8tPm1ham9yX2hhc2gpOworCWR4X2VudHJ5LT5keF9taW5vcl9oYXNoID0gY3B1X3RvX2xlMzIoaGluZm8tPm1pbm9yX2hhc2gpOworCWR4X2VudHJ5LT5keF9kaXJlbnRfYmxrID0gY3B1X3RvX2xlNjQoZGlyZW50X2Jsayk7CisKKwlsZTE2X2FkZF9jcHUoJmVudHJ5X2xpc3QtPmRlX251bV91c2VkLCAxKTsKK30KKworc3RhdGljIGludCBfX29jZnMyX2R4X2Rpcl9sZWFmX2luc2VydChzdHJ1Y3QgaW5vZGUgKmRpciwgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfZHhfaGluZm8gKmhpbmZvLAorCQkJCSAgICAgIHU2NCBkaXJlbnRfYmxrLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZHhfbGVhZl9iaCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl9keF9sZWFmICpkeF9sZWFmOworCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGwoaGFuZGxlLCBkaXIsIGR4X2xlYWZfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkeF9sZWFmID0gKHN0cnVjdCBvY2ZzMl9keF9sZWFmICopZHhfbGVhZl9iaC0+Yl9kYXRhOworCW9jZnMyX2R4X2VudHJ5X2xpc3RfaW5zZXJ0KCZkeF9sZWFmLT5kbF9saXN0LCBoaW5mbywgZGlyZW50X2Jsayk7CisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGR4X2xlYWZfYmgpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb2NmczJfZHhfaW5saW5lX3Jvb3RfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqZGlyLCBoYW5kbGVfdCAqaGFuZGxlLAorCQkJCQlzdHJ1Y3Qgb2NmczJfZHhfaGluZm8gKmhpbmZvLAorCQkJCQl1NjQgZGlyZW50X2JsaywKKwkJCQkJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3QpCit7CisJb2NmczJfZHhfZW50cnlfbGlzdF9pbnNlcnQoJmR4X3Jvb3QtPmRyX2VudHJpZXMsIGhpbmZvLCBkaXJlbnRfYmxrKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9keF9kaXJfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqZGlyLCBoYW5kbGVfdCAqaGFuZGxlLAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCA9IGxvb2t1cC0+ZGxfZHhfcm9vdF9iaDsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RyKGhhbmRsZSwgZGlyLCBkeF9yb290X2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWxvb2t1cC0+ZGxfZHhfcm9vdF9iaC0+Yl9kYXRhOworCWlmIChvY2ZzMl9keF9yb290X2lubGluZShkeF9yb290KSkgeworCQlvY2ZzMl9keF9pbmxpbmVfcm9vdF9pbnNlcnQoZGlyLCBoYW5kbGUsCisJCQkJCSAgICAmbG9va3VwLT5kbF9oaW5mbywKKwkJCQkJICAgIGxvb2t1cC0+ZGxfbGVhZl9iaC0+Yl9ibG9ja25yLAorCQkJCQkgICAgZHhfcm9vdCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gX19vY2ZzMl9keF9kaXJfbGVhZl9pbnNlcnQoZGlyLCBoYW5kbGUsICZsb29rdXAtPmRsX2hpbmZvLAorCQkJCQkJIGxvb2t1cC0+ZGxfbGVhZl9iaC0+Yl9ibG9ja25yLAorCQkJCQkJIGxvb2t1cC0+ZGxfZHhfbGVhZl9iaCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwl9CisKKwlsZTMyX2FkZF9jcHUoJmR4X3Jvb3QtPmRyX251bV9lbnRyaWVzLCAxKTsKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZHhfcm9vdF9iaCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9yZW1vdmVfYmxvY2tfZnJvbV9mcmVlX2xpc3Qoc3RydWN0IGlub2RlICpkaXIsCisJCQkJICAgICAgIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQoreworCXN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlciAqdHJhaWxlciwgKnByZXY7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKworCXRyYWlsZXIgPSBvY2ZzMl90cmFpbGVyX2Zyb21fYmgobG9va3VwLT5kbF9sZWFmX2JoLCBkaXItPmlfc2IpOworCisJaWYgKG9jZnMyX2ZyZWVfbGlzdF9hdF9yb290KGxvb2t1cCkpIHsKKwkJYmggPSBsb29rdXAtPmRsX2R4X3Jvb3RfYmg7CisJCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKiliaC0+Yl9kYXRhOworCQlkeF9yb290LT5kcl9mcmVlX2JsayA9IHRyYWlsZXItPmRiX2ZyZWVfbmV4dDsKKwl9IGVsc2UgeworCQliaCA9IGxvb2t1cC0+ZGxfcHJldl9sZWFmX2JoOworCQlwcmV2ID0gb2NmczJfdHJhaWxlcl9mcm9tX2JoKGJoLCBkaXItPmlfc2IpOworCQlwcmV2LT5kYl9mcmVlX25leHQgPSB0cmFpbGVyLT5kYl9mcmVlX25leHQ7CisJfQorCisJdHJhaWxlci0+ZGJfZnJlZV9yZWNfbGVuID0gY3B1X3RvX2xlMTYoMCk7CisJdHJhaWxlci0+ZGJfZnJlZV9uZXh0ID0gY3B1X3RvX2xlNjQoMCk7CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgYmgpOworCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBsb29rdXAtPmRsX2xlYWZfYmgpOworfQorCisvKgorICogVGhpcyBleHBlY3RzIHRoYXQgYSBqb3VybmFsIHdyaXRlIGhhcyBiZWVuIHJlc2VydmVkIG9uCisgKiBsb29rdXAtPmRsX3ByZXZfbGVhZl9iaCBvciBsb29rdXAtPmRsX2R4X3Jvb3RfYmgKKyAqLworc3RhdGljIHZvaWQgb2NmczJfcmVjYWxjX2ZyZWVfbGlzdChzdHJ1Y3QgaW5vZGUgKmRpciwgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKK3sKKwlpbnQgbWF4X3JlY19sZW47CisJc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyICp0cmFpbGVyOworCisJLyogV2FsayBkbF9sZWFmX2JoIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGUgbmV3IGZyZWUgcmVjX2xlbiBpcy4gKi8KKwltYXhfcmVjX2xlbiA9IG9jZnMyX2ZpbmRfbWF4X3JlY19sZW4oZGlyLT5pX3NiLCBsb29rdXAtPmRsX2xlYWZfYmgpOworCWlmIChtYXhfcmVjX2xlbikgeworCQkvKgorCQkgKiBUaGVyZSdzIHN0aWxsIHJvb20gaW4gdGhpcyBibG9jaywgc28gbm8gbmVlZCB0byByZW1vdmUgaXQKKwkJICogZnJvbSB0aGUgZnJlZSBsaXN0LiBJbiB0aGlzIGNhc2UsIHdlIGp1c3Qgd2FudCB0byB1cGRhdGUKKwkJICogdGhlIHJlYyBsZW4gYWNjb3VudGluZy4KKwkJICovCisJCXRyYWlsZXIgPSBvY2ZzMl90cmFpbGVyX2Zyb21fYmgobG9va3VwLT5kbF9sZWFmX2JoLCBkaXItPmlfc2IpOworCQl0cmFpbGVyLT5kYl9mcmVlX3JlY19sZW4gPSBjcHVfdG9fbGUxNihtYXhfcmVjX2xlbik7CisJCW9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBsb29rdXAtPmRsX2xlYWZfYmgpOworCX0gZWxzZSB7CisJCW9jZnMyX3JlbW92ZV9ibG9ja19mcm9tX2ZyZWVfbGlzdChkaXIsIGhhbmRsZSwgbG9va3VwKTsKKwl9Cit9CisKIC8qIHdlIGRvbid0IGFsd2F5cyBoYXZlIGEgZGVudHJ5IGZvciB3aGF0IHdlIHdhbnQgdG8gYWRkLCBzbyBwZW9wbGUKICAqIGxpa2Ugb3JwaGFuIGRpciBjYW4gY2FsbCB0aGlzIGluc3RlYWQuCiAgKgotICogSWYgeW91IHBhc3MgbWUgaW5zZXJ0X2JoLCBJJ2xsIHNraXAgdGhlIHNlYXJjaCBvZiB0aGUgb3RoZXIgZGlyCi0gKiBibG9ja3MgYW5kIHB1dCB0aGUgcmVjb3JkIGluIHRoZXJlLgorICogVGhlIGxvb2t1cCBjb250ZXh0IG11c3QgaGF2ZSBiZWVuIGZpbGxlZCBmcm9tCisgKiBvY2ZzMl9wcmVwYXJlX2Rpcl9mb3JfaW5zZXJ0LgogICovCiBpbnQgX19vY2ZzMl9hZGRfZW50cnkoaGFuZGxlX3QgKmhhbmRsZSwKIAkJICAgICAgc3RydWN0IGlub2RlICpkaXIsCiAJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAogCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYmxrbm8sCiAJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoLAotCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmluc2VydF9iaCkKKwkJICAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAJdW5zaWduZWQgc2hvcnQgcmVjX2xlbjsKQEAgLTY4Myw2ICsxNjI0LDcgQEAKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOwogCWludCByZXR2YWwsIHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmluc2VydF9iaCA9IGxvb2t1cC0+ZGxfbGVhZl9iaDsKIAljaGFyICpkYXRhX3N0YXJ0ID0gaW5zZXJ0X2JoLT5iX2RhdGE7CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKQEAgLTY5MCw3ICsxNjMyLDMxIEBACiAJaWYgKCFuYW1lbGVuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKSB7CisJaWYgKG9jZnMyX2Rpcl9pbmRleGVkKGRpcikpIHsKKwkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKworCQkvKgorCQkgKiBBbiBpbmRleGVkIGRpciBtYXkgcmVxdWlyZSB0aGF0IHdlIHVwZGF0ZSB0aGUgZnJlZSBzcGFjZQorCQkgKiBsaXN0LiBSZXNlcnZlIGEgd3JpdGUgdG8gdGhlIHByZXZpb3VzIG5vZGUgaW4gdGhlIGxpc3Qgc28KKwkJICogdGhhdCB3ZSBkb24ndCBmYWlsIGxhdGVyLgorCQkgKgorCQkgKiBYWFg6IFRoaXMgY2FuIGJlIGVpdGhlciBhIGR4X3Jvb3RfYmxvY2ssIG9yIGFuIHVuaW5kZXhlZAorCQkgKiBkaXJlY3RvcnkgdHJlZSBsZWFmIGJsb2NrLgorCQkgKi8KKwkJaWYgKG9jZnMyX2ZyZWVfbGlzdF9hdF9yb290KGxvb2t1cCkpIHsKKwkJCWJoID0gbG9va3VwLT5kbF9keF9yb290X2JoOworCQkJcmV0dmFsID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLCBkaXIsIGJoLAorCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwkJfSBlbHNlIHsKKwkJCWJoID0gbG9va3VwLT5kbF9wcmV2X2xlYWZfYmg7CisJCQlyZXR2YWwgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGUsIGRpciwgYmgsCisJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQl9CisJCWlmIChyZXR2YWwpIHsKKwkJCW1sb2dfZXJybm8ocmV0dmFsKTsKKwkJCXJldHVybiByZXR2YWw7CisJCX0KKwl9IGVsc2UgaWYgKE9DRlMyX0koZGlyKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpIHsKIAkJZGF0YV9zdGFydCA9IGRpLT5pZDIuaV9kYXRhLmlkX2RhdGE7CiAJCXNpemUgPSBpX3NpemVfcmVhZChkaXIpOwogCkBAIC03MzcsMTAgKzE3MDMsMjIgQEAKIAkJCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGRpciwKIAkJCQkJCQkJIGluc2VydF9iaCwKIAkJCQkJCQkJIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKLQkJCWVsc2UKKwkJCWVsc2UgewogCQkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RiKGhhbmRsZSwgZGlyLAogCQkJCQkJCQkgaW5zZXJ0X2JoLAotCQkJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisKKwkJCQlpZiAob2NmczJfZGlyX2luZGV4ZWQoZGlyKSkgeworCQkJCQlzdGF0dXMgPSBvY2ZzMl9keF9kaXJfaW5zZXJ0KGRpciwKKwkJCQkJCQkJaGFuZGxlLAorCQkJCQkJCQlsb29rdXApOworCQkJCQlpZiAoc3RhdHVzKSB7CisJCQkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCQkJCQlnb3RvIGJhaWw7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKIAkJCS8qIEJ5IG5vdyB0aGUgYnVmZmVyIGlzIG1hcmtlZCBmb3Igam91cm5hbGluZyAqLwogCQkJb2Zmc2V0ICs9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKIAkJCWlmIChsZTY0X3RvX2NwdShkZS0+aW5vZGUpKSB7CkBAIC03NjEsNiArMTczOSw5IEBACiAJCQlkZS0+bmFtZV9sZW4gPSBuYW1lbGVuOwogCQkJbWVtY3B5KGRlLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKIAorCQkJaWYgKG9jZnMyX2Rpcl9pbmRleGVkKGRpcikpCisJCQkJb2NmczJfcmVjYWxjX2ZyZWVfbGlzdChkaXIsIGhhbmRsZSwgbG9va3VwKTsKKwogCQkJZGlyLT5pX3ZlcnNpb24rKzsKIAkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBpbnNlcnRfYmgpOwogCQkJcmV0dmFsID0gMDsKQEAgLTg3MCw2ICsxODUxLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYWdhaW5zdCB1bmluZGV4ZWQgZGlyZWN0b3JpZXMsCisgKiBhbmQgaW5kZXhlZCBvbmVzLgorICovCiBzdGF0aWMgaW50IG9jZnMyX2Rpcl9mb3JlYWNoX2Jsa19lbChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICB1NjQgKmZfdmVyc2lvbiwKIAkJCQkgICAgbG9mZl90ICpmX3Bvcywgdm9pZCAqcHJpdiwKQEAgLTEwNzEsMzEgKzIwNTYsMjIgQEAKIAkJCSAgICAgaW50IG5hbWVsZW4sCiAJCQkgICAgIHU2NCAqYmxrbm8sCiAJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmRpcmVudF9iaCwKLQkJCSAgICAgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKmRpcmVudCkKKwkJCSAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCiB7CiAJaW50IHN0YXR1cyA9IC1FTk9FTlQ7CiAKLQltbG9nX2VudHJ5KCIobmFtZT0lLipzLCBibGtubz0lcCwgaW5vZGU9JXAsIGRpcmVudF9iaD0lcCwgZGlyZW50PSVwKVxuIiwKLQkJICAgbmFtZWxlbiwgbmFtZSwgYmxrbm8sIGlub2RlLCBkaXJlbnRfYmgsIGRpcmVudCk7CisJbWxvZygwLCAibmFtZT0lLipzLCBibGtubz0lcCwgaW5vZGU9JWxsdVxuIiwgbmFtZWxlbiwgbmFtZSwgYmxrbm8sCisJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubyk7CiAKLQkqZGlyZW50X2JoID0gb2NmczJfZmluZF9lbnRyeShuYW1lLCBuYW1lbGVuLCBpbm9kZSwgZGlyZW50KTsKLQlpZiAoISpkaXJlbnRfYmggfHwgISpkaXJlbnQpIHsKLQkJc3RhdHVzID0gLUVOT0VOVDsKKwlzdGF0dXMgPSBvY2ZzMl9maW5kX2VudHJ5KG5hbWUsIG5hbWVsZW4sIGlub2RlLCBsb29rdXApOworCWlmIChzdGF0dXMpCiAJCWdvdG8gbGVhdmU7Ci0JfQogCi0JKmJsa25vID0gbGU2NF90b19jcHUoKCpkaXJlbnQpLT5pbm9kZSk7CisJKmJsa25vID0gbGU2NF90b19jcHUobG9va3VwLT5kbF9lbnRyeS0+aW5vZGUpOwogCiAJc3RhdHVzID0gMDsKIGxlYXZlOgotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCSpkaXJlbnQgPSBOVUxMOwotCQlicmVsc2UoKmRpcmVudF9iaCk7Ci0JCSpkaXJlbnRfYmggPSBOVUxMOwotCX0KIAotCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTExMDcsMTEgKzIwODMsMTAgQEAKIAkJCSAgICAgICBpbnQgbmFtZWxlbiwgdTY0ICpibGtubykKIHsKIAlpbnQgcmV0OwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwotCXN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKmRpcmVudCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IGxvb2t1cCA9IHsgTlVMTCwgfTsKIAotCXJldCA9IG9jZnMyX2ZpbmRfZmlsZXNfb25fZGlzayhuYW1lLCBuYW1lbGVuLCBibGtubywgZGlyLCAmYmgsICZkaXJlbnQpOwotCWJyZWxzZShiaCk7CisJcmV0ID0gb2NmczJfZmluZF9maWxlc19vbl9kaXNrKG5hbWUsIG5hbWVsZW4sIGJsa25vLCBkaXIsICZsb29rdXApOworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmxvb2t1cCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTEyOCwyMCArMjEwMywxOCBAQAogCQkJICAgICAgaW50IG5hbWVsZW4pCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcmVudF9iaCA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGlyZW50ID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgbG9va3VwID0geyBOVUxMLCB9OwogCiAJbWxvZ19lbnRyeSgiZGlyICVsbHUsIG5hbWUgJyUuKnMnXG4iLAogCQkgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8sIG5hbWVsZW4sIG5hbWUpOwogCiAJcmV0ID0gLUVFWElTVDsKLQlkaXJlbnRfYmggPSBvY2ZzMl9maW5kX2VudHJ5KG5hbWUsIG5hbWVsZW4sIGRpciwgJmRpcmVudCk7Ci0JaWYgKGRpcmVudF9iaCkKKwlpZiAob2NmczJfZmluZF9lbnRyeShuYW1lLCBuYW1lbGVuLCBkaXIsICZsb29rdXApID09IDApCiAJCWdvdG8gYmFpbDsKIAogCXJldCA9IDA7CiBiYWlsOgotCWJyZWxzZShkaXJlbnRfYmgpOworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmxvb2t1cCk7CiAKIAltbG9nX2V4aXQocmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMTE1MSw2ICsyMTI0LDcgQEAKIAl1bnNpZ25lZCBzZWVuX2RvdDsKIAl1bnNpZ25lZCBzZWVuX2RvdF9kb3Q7CiAJdW5zaWduZWQgc2Vlbl9vdGhlcjsKKwl1bnNpZ25lZCBkeF9kaXI7CiB9Owogc3RhdGljIGludCBvY2ZzMl9lbXB0eV9kaXJfZmlsbGRpcih2b2lkICpwcml2LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZV9sZW4sCiAJCQkJICAgbG9mZl90IHBvcywgdTY0IGlubywgdW5zaWduZWQgdHlwZSkKQEAgLTExNjAsNiArMjEzNCwxMyBAQAogCS8qCiAJICogQ2hlY2sgdGhlIHBvc2l0aW9ucyBvZiAiLiIgYW5kICIuLiIgcmVjb3JkcyB0byBiZSBzdXJlCiAJICogdGhleSdyZSBpbiB0aGUgY29ycmVjdCBwbGFjZS4KKwkgKgorCSAqIEluZGV4ZWQgZGlyZWN0b3JpZXMgZG9uJ3QgbmVlZCB0byBwcm9jZWVkIHBhc3QgdGhlIGZpcnN0CisJICogdHdvIGVudHJpZXMsIHNvIHdlIGVuZCB0aGUgc2NhbiBhZnRlciBzZWVpbmcgJy4uJy4gRGVzcGl0ZQorCSAqIHRoYXQsIHdlIGFsbG93IHRoZSBzY2FuIHRvIHByb2NlZWQgSW4gdGhlIGV2ZW50IHRoYXQgd2UKKwkgKiBoYXZlIGEgY29ycnVwdGVkIGluZGV4ZWQgZGlyZWN0b3J5IChubyBkb3Qgb3IgZG90IGRvdAorCSAqIGVudHJpZXMpLiBUaGlzIGFsbG93cyB1cyB0byBkb3VibGUgY2hlY2sgZm9yIGV4aXN0aW5nCisJICogZW50cmllcyB3aGljaCBtaWdodCBub3QgaGF2ZSBiZWVuIGZvdW5kIGluIHRoZSBpbmRleC4KIAkgKi8KIAlpZiAobmFtZV9sZW4gPT0gMSAmJiAhc3RybmNtcCgiLiIsIG5hbWUsIDEpICYmIHBvcyA9PSAwKSB7CiAJCXAtPnNlZW5fZG90ID0gMTsKQEAgLTExNjksMTYgKzIxNTAsNTcgQEAKIAlpZiAobmFtZV9sZW4gPT0gMiAmJiAhc3RybmNtcCgiLi4iLCBuYW1lLCAyKSAmJgogCSAgICBwb3MgPT0gT0NGUzJfRElSX1JFQ19MRU4oMSkpIHsKIAkJcC0+c2Vlbl9kb3RfZG90ID0gMTsKKworCQlpZiAocC0+ZHhfZGlyICYmIHAtPnNlZW5fZG90KQorCQkJcmV0dXJuIDE7CisKIAkJcmV0dXJuIDA7CiAJfQogCiAJcC0+c2Vlbl9vdGhlciA9IDE7CiAJcmV0dXJuIDE7CiB9CisKK3N0YXRpYyBpbnQgb2NmczJfZW1wdHlfZGlyX2R4KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgICBzdHJ1Y3Qgb2NmczJfZW1wdHlfZGlyX3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCisJcHJpdi0+ZHhfZGlyID0gMTsKKworCXJldCA9IG9jZnMyX3JlYWRfaW5vZGVfYmxvY2soaW5vZGUsICZkaV9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKworCXJldCA9IG9jZnMyX3JlYWRfZHhfcm9vdChpbm9kZSwgZGksICZkeF9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKilkeF9yb290X2JoLT5iX2RhdGE7CisKKwlpZiAobGUzMl90b19jcHUoZHhfcm9vdC0+ZHJfbnVtX2VudHJpZXMpICE9IDIpCisJCXByaXYtPnNlZW5fb3RoZXIgPSAxOworCitvdXQ6CisJYnJlbHNlKGRpX2JoKTsKKwlicmVsc2UoZHhfcm9vdF9iaCk7CisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIHJvdXRpbmUgdG8gY2hlY2sgdGhhdCB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpcyBlbXB0eSAoZm9yIHJtZGlyKQogICoKICAqIFJldHVybnMgMSBpZiBkaXIgaXMgZW1wdHksIHplcm8gb3RoZXJ3aXNlLgorICoKKyAqIFhYWDogVGhpcyBpcyBhIHBlcmZvcm1hbmNlIHByb2JsZW0gZm9yIHVuaW5kZXhlZCBkaXJlY3Rvcmllcy4KICAqLwogaW50IG9jZnMyX2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtMTE4OCw2ICsyMjEwLDE2IEBACiAKIAltZW1zZXQoJnByaXYsIDAsIHNpemVvZihwcml2KSk7CiAKKwlpZiAob2NmczJfZGlyX2luZGV4ZWQoaW5vZGUpKSB7CisJCXJldCA9IG9jZnMyX2VtcHR5X2Rpcl9keChpbm9kZSwgJnByaXYpOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCQkvKgorCQkgKiBXZSBzdGlsbCBydW4gb2NmczJfZGlyX2ZvcmVhY2ggdG8gZ2V0IHRoZSBjaGVja3MKKwkJICogZm9yICIuIiBhbmQgIi4uIi4KKwkJICovCisJfQorCiAJcmV0ID0gb2NmczJfZGlyX2ZvcmVhY2goaW5vZGUsICZzdGFydCwgJnByaXYsIG9jZnMyX2VtcHR5X2Rpcl9maWxsZGlyKTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CkBAIC0xMjgwLDcgKzIzMTIsOCBAQAogCQkJCSBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKIAkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKLQkJCQkgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpCisJCQkJIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAorCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZXRfbmV3X2JoKQogewogCWludCBzdGF0dXM7CiAJdW5zaWduZWQgaW50IHNpemUgPSBvc2ItPnNiLT5zX2Jsb2Nrc2l6ZTsKQEAgLTEyODksNyArMjMyMiw3IEBACiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAotCWlmIChvY2ZzMl9zdXBwb3J0c19kaXJfdHJhaWxlcihvc2IpKQorCWlmIChvY2ZzMl9uZXdfZGlyX3dhbnRzX3RyYWlsZXIoaW5vZGUpKQogCQlzaXplID0gb2NmczJfZGlyX3RyYWlsZXJfYmxrX29mZihwYXJlbnQtPmlfc2IpOwogCiAJc3RhdHVzID0gb2NmczJfZG9fZXh0ZW5kX2Rpcihvc2ItPnNiLCBoYW5kbGUsIGlub2RlLCBmZV9iaCwKQEAgLTEzMTAsOCArMjM0MywxOSBAQAogCW1lbXNldChuZXdfYmgtPmJfZGF0YSwgMCwgb3NiLT5zYi0+c19ibG9ja3NpemUpOwogCiAJZGUgPSBvY2ZzMl9maWxsX2luaXRpYWxfZGlyZW50cyhpbm9kZSwgcGFyZW50LCBuZXdfYmgtPmJfZGF0YSwgc2l6ZSk7Ci0JaWYgKG9jZnMyX3N1cHBvcnRzX2Rpcl90cmFpbGVyKG9zYikpCi0JCW9jZnMyX2luaXRfZGlyX3RyYWlsZXIoaW5vZGUsIG5ld19iaCk7CisJaWYgKG9jZnMyX25ld19kaXJfd2FudHNfdHJhaWxlcihpbm9kZSkpIHsKKwkJaW50IHNpemUgPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CisKKwkJLyoKKwkJICogRmlndXJlIG91dCB0aGUgc2l6ZSBvZiB0aGUgaG9sZSBsZWZ0IG92ZXIgYWZ0ZXIKKwkJICogaW5zZXJ0aW9uIG9mICcuJyBhbmQgJy4uJy4gVGhlIHRyYWlsZXIgd2FudHMgdGhpcworCQkgKiBpbmZvcm1hdGlvbi4KKwkJICovCisJCXNpemUgLT0gT0NGUzJfRElSX1JFQ19MRU4oMik7CisJCXNpemUgLT0gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlcik7CisKKwkJb2NmczJfaW5pdF9kaXJfdHJhaWxlcihpbm9kZSwgbmV3X2JoLCBzaXplKTsKKwl9CiAKIAlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbmV3X2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtMTMyOSw2ICsyMzczLDEwIEBACiAJfQogCiAJc3RhdHVzID0gMDsKKwlpZiAocmV0X25ld19iaCkgeworCQkqcmV0X25ld19iaCA9IG5ld19iaDsKKwkJbmV3X2JoID0gTlVMTDsKKwl9CiBiYWlsOgogCWJyZWxzZShuZXdfYmgpOwogCkBAIC0xMzM2LDIwICsyMzg0LDQyNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX2F0dGFjaF9pbmRleChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgICAgIGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyZGF0YV9iaCwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJCSAgICAgaW50IGR4X2lubGluZSwgdTMyIG51bV9lbnRyaWVzLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcmV0X2R4X3Jvb3RfYmgpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGRpX2JoLT5iX2RhdGE7CisJdTE2IGRyX3N1YmFsbG9jX2JpdDsKKwl1NjQgZHJfYmxrbm87CisJdW5zaWduZWQgaW50IG51bV9iaXRzOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyICp0cmFpbGVyID0KKwkJb2NmczJfdHJhaWxlcl9mcm9tX2JoKGRpcmRhdGFfYmgsIGRpci0+aV9zYik7CisKKwlyZXQgPSBvY2ZzMl9jbGFpbV9tZXRhZGF0YShvc2IsIGhhbmRsZSwgbWV0YV9hYywgMSwgJmRyX3N1YmFsbG9jX2JpdCwKKwkJCQkgICAmbnVtX2JpdHMsICZkcl9ibGtubyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW1sb2coMCwgIkRpciAlbGx1LCBhdHRhY2ggbmV3IGluZGV4IGJsb2NrOiAlbGx1XG4iLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkcl9ibGtubyk7CisKKwlkeF9yb290X2JoID0gc2JfZ2V0YmxrKG9zYi0+c2IsIGRyX2Jsa25vKTsKKwlpZiAoZHhfcm9vdF9iaCA9PSBOVUxMKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKwlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShkaXIsIGR4X3Jvb3RfYmgpOworCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZHIoaGFuZGxlLCBkaXIsIGR4X3Jvb3RfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKilkeF9yb290X2JoLT5iX2RhdGE7CisJbWVtc2V0KGR4X3Jvb3QsIDAsIG9zYi0+c2ItPnNfYmxvY2tzaXplKTsKKwlzdHJjcHkoZHhfcm9vdC0+ZHJfc2lnbmF0dXJlLCBPQ0ZTMl9EWF9ST09UX1NJR05BVFVSRSk7CisJZHhfcm9vdC0+ZHJfc3ViYWxsb2Nfc2xvdCA9IGNwdV90b19sZTE2KG9zYi0+c2xvdF9udW0pOworCWR4X3Jvb3QtPmRyX3N1YmFsbG9jX2JpdCA9IGNwdV90b19sZTE2KGRyX3N1YmFsbG9jX2JpdCk7CisJZHhfcm9vdC0+ZHJfZnNfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKG9zYi0+ZnNfZ2VuZXJhdGlvbik7CisJZHhfcm9vdC0+ZHJfYmxrbm8gPSBjcHVfdG9fbGU2NChkcl9ibGtubyk7CisJZHhfcm9vdC0+ZHJfZGlyX2Jsa25vID0gY3B1X3RvX2xlNjQoT0NGUzJfSShkaXIpLT5pcF9ibGtubyk7CisJZHhfcm9vdC0+ZHJfbnVtX2VudHJpZXMgPSBjcHVfdG9fbGUzMihudW1fZW50cmllcyk7CisJaWYgKGxlMTZfdG9fY3B1KHRyYWlsZXItPmRiX2ZyZWVfcmVjX2xlbikpCisJCWR4X3Jvb3QtPmRyX2ZyZWVfYmxrID0gY3B1X3RvX2xlNjQoZGlyZGF0YV9iaC0+Yl9ibG9ja25yKTsKKwllbHNlCisJCWR4X3Jvb3QtPmRyX2ZyZWVfYmxrID0gY3B1X3RvX2xlNjQoMCk7CisKKwlpZiAoZHhfaW5saW5lKSB7CisJCWR4X3Jvb3QtPmRyX2ZsYWdzIHw9IE9DRlMyX0RYX0ZMQUdfSU5MSU5FOworCQlkeF9yb290LT5kcl9lbnRyaWVzLmRlX2NvdW50ID0KKwkJCWNwdV90b19sZTE2KG9jZnMyX2R4X2VudHJpZXNfcGVyX3Jvb3Qob3NiLT5zYikpOworCX0gZWxzZSB7CisJCWR4X3Jvb3QtPmRyX2xpc3QubF9jb3VudCA9CisJCQljcHVfdG9fbGUxNihvY2ZzMl9leHRlbnRfcmVjc19wZXJfZHhfcm9vdChvc2ItPnNiKSk7CisJfQorCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGR4X3Jvb3RfYmgpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgZGlyLCBkaV9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkaS0+aV9keF9yb290ID0gY3B1X3RvX2xlNjQoZHJfYmxrbm8pOworCisJT0NGUzJfSShkaXIpLT5pcF9keW5fZmVhdHVyZXMgfD0gT0NGUzJfSU5ERVhFRF9ESVJfRkw7CisJZGktPmlfZHluX2ZlYXR1cmVzID0gY3B1X3RvX2xlMTYoT0NGUzJfSShkaXIpLT5pcF9keW5fZmVhdHVyZXMpOworCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGRpX2JoKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKKwkqcmV0X2R4X3Jvb3RfYmggPSBkeF9yb290X2JoOworCWR4X3Jvb3RfYmggPSBOVUxMOworCitvdXQ6CisJYnJlbHNlKGR4X3Jvb3RfYmgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX2Zvcm1hdF9jbHVzdGVyKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJCSAgICAgICBoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqZHhfbGVhdmVzLAorCQkJCSAgICAgICBpbnQgbnVtX2R4X2xlYXZlcywgdTY0IHN0YXJ0X2JsaykKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBvY2ZzMl9keF9sZWFmICpkeF9sZWFmOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2R4X2xlYXZlczsgaSsrKSB7CisJCWJoID0gc2JfZ2V0YmxrKG9zYi0+c2IsIHN0YXJ0X2JsayArIGkpOworCQlpZiAoYmggPT0gTlVMTCkgeworCQkJcmV0ID0gLUVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisJCWR4X2xlYXZlc1tpXSA9IGJoOworCisJCW9jZnMyX3NldF9uZXdfYnVmZmVyX3VwdG9kYXRlKGRpciwgYmgpOworCisJCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgZGlyLCBiaCwKKwkJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZHhfbGVhZiA9IChzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqKSBiaC0+Yl9kYXRhOworCisJCW1lbXNldChkeF9sZWFmLCAwLCBvc2ItPnNiLT5zX2Jsb2Nrc2l6ZSk7CisJCXN0cmNweShkeF9sZWFmLT5kbF9zaWduYXR1cmUsIE9DRlMyX0RYX0xFQUZfU0lHTkFUVVJFKTsKKwkJZHhfbGVhZi0+ZGxfZnNfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKG9zYi0+ZnNfZ2VuZXJhdGlvbik7CisJCWR4X2xlYWYtPmRsX2Jsa25vID0gY3B1X3RvX2xlNjQoYmgtPmJfYmxvY2tucik7CisJCWR4X2xlYWYtPmRsX2xpc3QuZGVfY291bnQgPQorCQkJY3B1X3RvX2xlMTYob2NmczJfZHhfZW50cmllc19wZXJfbGVhZihvc2ItPnNiKSk7CisKKwkJbWxvZygwLAorCQkgICAgICJEaXIgJWxsdSwgZm9ybWF0IGR4X2xlYWY6ICVsbHUsIGVudHJ5IGNvdW50OiAldVxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8sCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yLAorCQkgICAgIGxlMTZfdG9fY3B1KGR4X2xlYWYtPmRsX2xpc3QuZGVfY291bnQpKTsKKworCQlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgYmgpOworCX0KKworCXJldCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEFsbG9jYXRlcyBhbmQgZm9ybWF0cyBhIG5ldyBjbHVzdGVyIGZvciB1c2UgaW4gYW4gaW5kZXhlZCBkaXIKKyAqIGxlYWYuIFRoaXMgdmVyc2lvbiB3aWxsIG5vdCBkbyB0aGUgZXh0ZW50IGluc2VydCwgc28gdGhhdCBpdCBjYW4gYmUKKyAqIHVzZWQgYnkgb3BlcmF0aW9ucyB3aGljaCBuZWVkIGNhcmVmdWwgb3JkZXJpbmcuCisgKi8KK3N0YXRpYyBpbnQgX19vY2ZzMl9keF9kaXJfbmV3X2NsdXN0ZXIoc3RydWN0IGlub2RlICpkaXIsCisJCQkJICAgICAgdTMyIGNwb3MsIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCisJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqZHhfbGVhdmVzLAorCQkJCSAgICAgIGludCBudW1fZHhfbGVhdmVzLCB1NjQgKnJldF9waHlzX2Jsa25vKQoreworCWludCByZXQ7CisJdTMyIHBoeXMsIG51bTsKKwl1NjQgcGh5c19ibGtubzsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CisKKwkvKgorCSAqIFhYWDogRm9yIGNyZWF0ZSwgdGhpcyBzaG91bGQgY2xhaW0gY2x1c3RlciBmb3IgdGhlIGluZGV4CisJICogKmJlZm9yZSogdGhlIHVuaW5kZXhlZCBpbnNlcnQgc28gdGhhdCB3ZSBoYXZlIGEgYmV0dGVyCisJICogY2hhbmNlIG9mIGNvbnRpZ3VvdXNuZXNzIGFzIHRoZSBkaXJlY3RvcnkgZ3Jvd3MgaW4gbnVtYmVyCisJICogb2YgZW50cmllcy4KKwkgKi8KKwlyZXQgPSBfX29jZnMyX2NsYWltX2NsdXN0ZXJzKG9zYiwgaGFuZGxlLCBkYXRhX2FjLCAxLCAxLCAmcGh5cywgJm51bSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogRm9ybWF0IHRoZSBuZXcgY2x1c3RlciBmaXJzdC4gVGhhdCB3YXksIHdlJ3JlIGluc2VydGluZworCSAqIHZhbGlkIGRhdGEuCisJICovCisJcGh5c19ibGtubyA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhvc2ItPnNiLCBwaHlzKTsKKwlyZXQgPSBvY2ZzMl9keF9kaXJfZm9ybWF0X2NsdXN0ZXIob3NiLCBoYW5kbGUsIGRpciwgZHhfbGVhdmVzLAorCQkJCQkgIG51bV9keF9sZWF2ZXMsIHBoeXNfYmxrbm8pOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkqcmV0X3BoeXNfYmxrbm8gPSBwaHlzX2Jsa25vOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX25ld19jbHVzdGVyKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKmV0LAorCQkJCSAgICB1MzIgY3BvcywgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLAorCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkeF9sZWF2ZXMsCisJCQkJICAgIGludCBudW1fZHhfbGVhdmVzKQoreworCWludCByZXQ7CisJdTY0IHBoeXNfYmxrbm87CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCisJcmV0ID0gX19vY2ZzMl9keF9kaXJfbmV3X2NsdXN0ZXIoZGlyLCBjcG9zLCBoYW5kbGUsIGRhdGFfYWMsIGR4X2xlYXZlcywKKwkJCQkJIG51bV9keF9sZWF2ZXMsICZwaHlzX2Jsa25vKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfaW5zZXJ0X2V4dGVudChvc2IsIGhhbmRsZSwgZGlyLCBldCwgY3BvcywgcGh5c19ibGtubywgMSwgMCwKKwkJCQkgIG1ldGFfYWMpOworCWlmIChyZXQpCisJCW1sb2dfZXJybm8ocmV0KTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICoqb2NmczJfZHhfZGlyX2ttYWxsb2NfbGVhdmVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJCQkJaW50ICpyZXRfbnVtX2xlYXZlcykKK3sKKwlpbnQgbnVtX2R4X2xlYXZlcyA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhzYiwgMSk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICoqZHhfbGVhdmVzOworCisJZHhfbGVhdmVzID0ga2NhbGxvYyhudW1fZHhfbGVhdmVzLCBzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkICopLAorCQkJICAgIEdGUF9OT0ZTKTsKKwlpZiAoZHhfbGVhdmVzICYmIHJldF9udW1fbGVhdmVzKQorCQkqcmV0X251bV9sZWF2ZXMgPSBudW1fZHhfbGVhdmVzOworCisJcmV0dXJuIGR4X2xlYXZlczsKK30KKworc3RhdGljIGludCBvY2ZzMl9maWxsX25ld19kaXJfZHgoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJIGhhbmRsZV90ICpoYW5kbGUsCisJCQkJIHN0cnVjdCBpbm9kZSAqcGFyZW50LAorCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAorCQkJCSBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKKwkJCQkgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxlYWZfYmggPSBOVUxMOworCXN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2R4X2hpbmZvIGhpbmZvOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0ICplbnRyeV9saXN0OworCisJLyoKKwkgKiBPdXIgc3RyYXRlZ3kgaXMgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkgYXMgdGhvdWdoIGl0IHdlcmUKKwkgKiB1bmluZGV4ZWQsIHRoZW4gYWRkIHRoZSBpbmRleCBibG9jay4gVGhpcyB3b3JrcyB3aXRoIHZlcnkKKwkgKiBsaXR0bGUgY29tcGxpY2F0aW9uIHNpbmNlIHRoZSBzdGF0ZSBvZiBhIG5ldyBkaXJlY3RvcnkgaXMgYQorCSAqIHZlcnkgd2VsbCBrbm93biBxdWFudGl0eS4KKwkgKgorCSAqIEVzc2VudGlhbGx5LCB3ZSBoYXZlIHR3byBkaXJlbnRzICgiLiIgYW5kICIuLiIpLCBpbiB0aGUgMXN0CisJICogYmxvY2sgd2hpY2ggbmVlZCBpbmRleGluZy4gVGhlc2UgYXJlIGVhc2lseSBpbnNlcnRlZCBpbnRvCisJICogdGhlIGluZGV4IGJsb2NrLgorCSAqLworCisJcmV0ID0gb2NmczJfZmlsbF9uZXdfZGlyX2VsKG9zYiwgaGFuZGxlLCBwYXJlbnQsIGlub2RlLCBkaV9iaCwKKwkJCQkgICAgZGF0YV9hYywgJmxlYWZfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBvY2ZzMl9keF9kaXJfYXR0YWNoX2luZGV4KG9zYiwgaGFuZGxlLCBpbm9kZSwgZGlfYmgsIGxlYWZfYmgsCisJCQkJCW1ldGFfYWMsIDEsIDIsICZkeF9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKilkeF9yb290X2JoLT5iX2RhdGE7CisJZW50cnlfbGlzdCA9ICZkeF9yb290LT5kcl9lbnRyaWVzOworCisJLyogQnVmZmVyIGhhcyBiZWVuIGpvdXJuYWxlZCBmb3IgdXMgYnkgb2NmczJfZHhfZGlyX2F0dGFjaF9pbmRleCAqLworCW9jZnMyX2R4X2Rpcl9uYW1lX2hhc2goaW5vZGUsICIuIiwgMSwgJmhpbmZvKTsKKwlvY2ZzMl9keF9lbnRyeV9saXN0X2luc2VydChlbnRyeV9saXN0LCAmaGluZm8sIGxlYWZfYmgtPmJfYmxvY2tucik7CisKKwlvY2ZzMl9keF9kaXJfbmFtZV9oYXNoKGlub2RlLCAiLi4iLCAyLCAmaGluZm8pOworCW9jZnMyX2R4X2VudHJ5X2xpc3RfaW5zZXJ0KGVudHJ5X2xpc3QsICZoaW5mbywgbGVhZl9iaC0+Yl9ibG9ja25yKTsKKworb3V0OgorCWJyZWxzZShkeF9yb290X2JoKTsKKwlicmVsc2UobGVhZl9iaCk7CisJcmV0dXJuIHJldDsKK30KKwogaW50IG9jZnMyX2ZpbGxfbmV3X2RpcihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJICAgICAgIGhhbmRsZV90ICpoYW5kbGUsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKIAkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmZlX2JoLAotCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYywKKwkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjKQorCiB7CiAJQlVHX09OKCFvY2ZzMl9zdXBwb3J0c19pbmxpbmVfZGF0YShvc2IpICYmIGRhdGFfYWMgPT0gTlVMTCk7CiAKIAlpZiAoT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKQogCQlyZXR1cm4gb2NmczJfZmlsbF9uZXdfZGlyX2lkKG9zYiwgaGFuZGxlLCBwYXJlbnQsIGlub2RlLCBmZV9iaCk7CiAKKwlpZiAob2NmczJfc3VwcG9ydHNfaW5kZXhlZF9kaXJzKG9zYikpCisJCXJldHVybiBvY2ZzMl9maWxsX25ld19kaXJfZHgob3NiLCBoYW5kbGUsIHBhcmVudCwgaW5vZGUsIGZlX2JoLAorCQkJCQkgICAgIGRhdGFfYWMsIG1ldGFfYWMpOworCiAJcmV0dXJuIG9jZnMyX2ZpbGxfbmV3X2Rpcl9lbChvc2IsIGhhbmRsZSwgcGFyZW50LCBpbm9kZSwgZmVfYmgsCi0JCQkJICAgICBkYXRhX2FjKTsKKwkJCQkgICAgIGRhdGFfYWMsIE5VTEwpOworfQorCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9pbmRleF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqZHhfbGVhdmVzLAorCQkJCSAgICBpbnQgbnVtX2R4X2xlYXZlcywKKwkJCQkgICAgdTMyICpudW1fZHhfZW50cmllcywKKwkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJlbnRfYmgpCit7CisJaW50IHJldCwgbmFtZWxlbiwgaTsKKwljaGFyICpkZV9idWYsICpsaW1pdDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X2xlYWZfYmg7CisJc3RydWN0IG9jZnMyX2R4X2hpbmZvIGhpbmZvOworCXU2NCBkaXJlbnRfYmxrID0gZGlyZW50X2JoLT5iX2Jsb2NrbnI7CisKKwlkZV9idWYgPSBkaXJlbnRfYmgtPmJfZGF0YTsKKwlsaW1pdCA9IGRlX2J1ZiArIGRpci0+aV9zYi0+c19ibG9ja3NpemU7CisKKwl3aGlsZSAoZGVfYnVmIDwgbGltaXQpIHsKKwkJZGUgPSAoc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKWRlX2J1ZjsKKworCQluYW1lbGVuID0gZGUtPm5hbWVfbGVuOworCQlpZiAoIW5hbWVsZW4gfHwgIWRlLT5pbm9kZSkKKwkJCWdvdG8gaW5jOworCisJCW9jZnMyX2R4X2Rpcl9uYW1lX2hhc2goZGlyLCBkZS0+bmFtZSwgbmFtZWxlbiwgJmhpbmZvKTsKKworCQlpID0gb2NmczJfZHhfZGlyX2hhc2hfaWR4KE9DRlMyX1NCKGRpci0+aV9zYiksICZoaW5mbyk7CisJCWR4X2xlYWZfYmggPSBkeF9sZWF2ZXNbaV07CisKKwkJcmV0ID0gX19vY2ZzMl9keF9kaXJfbGVhZl9pbnNlcnQoZGlyLCBoYW5kbGUsICZoaW5mbywKKwkJCQkJCSBkaXJlbnRfYmxrLCBkeF9sZWFmX2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkqbnVtX2R4X2VudHJpZXMgPSAqbnVtX2R4X2VudHJpZXMgKyAxOworCitpbmM6CisJCWRlX2J1ZiArPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFhYWDogVGhpcyBleHBlY3RzIGR4X3Jvb3RfYmggdG8gYWxyZWFkeSBiZSBwYXJ0IG9mIHRoZSB0cmFuc2FjdGlvbi4KKyAqLworc3RhdGljIHZvaWQgb2NmczJfZHhfZGlyX2luZGV4X3Jvb3RfYmxvY2soc3RydWN0IGlub2RlICpkaXIsCisJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmgsCisJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcmVudF9iaCkKK3sKKwljaGFyICpkZV9idWYsICpsaW1pdDsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZTsKKwlzdHJ1Y3Qgb2NmczJfZHhfaGluZm8gaGluZm87CisJdTY0IGRpcmVudF9ibGsgPSBkaXJlbnRfYmgtPmJfYmxvY2tucjsKKworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKilkeF9yb290X2JoLT5iX2RhdGE7CisKKwlkZV9idWYgPSBkaXJlbnRfYmgtPmJfZGF0YTsKKwlsaW1pdCA9IGRlX2J1ZiArIGRpci0+aV9zYi0+c19ibG9ja3NpemU7CisKKwl3aGlsZSAoZGVfYnVmIDwgbGltaXQpIHsKKwkJZGUgPSAoc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKWRlX2J1ZjsKKworCQlpZiAoIWRlLT5uYW1lX2xlbiB8fCAhZGUtPmlub2RlKQorCQkJZ290byBpbmM7CisKKwkJb2NmczJfZHhfZGlyX25hbWVfaGFzaChkaXIsIGRlLT5uYW1lLCBkZS0+bmFtZV9sZW4sICZoaW5mbyk7CisKKwkJbWxvZygwLAorCQkgICAgICJkaXI6ICVsbHUsIG1ham9yOiAweCV4IG1pbm9yOiAweCV4LCBpbmRleDogJXUsIG5hbWU6ICUuKnNcbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkaXItPmlfaW5vLCBoaW5mby5tYWpvcl9oYXNoLAorCQkgICAgIGhpbmZvLm1pbm9yX2hhc2gsCisJCSAgICAgbGUxNl90b19jcHUoZHhfcm9vdC0+ZHJfZW50cmllcy5kZV9udW1fdXNlZCksCisJCSAgICAgZGUtPm5hbWVfbGVuLCBkZS0+bmFtZSk7CisKKwkJb2NmczJfZHhfZW50cnlfbGlzdF9pbnNlcnQoJmR4X3Jvb3QtPmRyX2VudHJpZXMsICZoaW5mbywKKwkJCQkJICAgZGlyZW50X2Jsayk7CisKKwkJbGUzMl9hZGRfY3B1KCZkeF9yb290LT5kcl9udW1fZW50cmllcywgMSk7CitpbmM6CisJCWRlX2J1ZiArPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CisJfQorfQorCisvKgorICogQ291bnQgdGhlIG51bWJlciBvZiBpbmxpbmUgZGlyZWN0b3J5IGVudHJpZXMgaW4gZGlfYmggYW5kIGNvbXBhcmUKKyAqIHRoZW0gYWdhaW5zdCB0aGUgbnVtYmVyIG9mIGVudHJpZXMgd2UgY2FuIGhvbGQgaW4gYW4gaW5saW5lIGR4IHJvb3QKKyAqIGJsb2NrLgorICovCitzdGF0aWMgaW50IG9jZnMyX25ld19keF9zaG91bGRfYmVfaW5saW5lKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCkKK3sKKwlpbnQgZGlyZW50X2NvdW50ID0gMDsKKwljaGFyICpkZV9idWYsICpsaW1pdDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKworCWRlX2J1ZiA9IGRpLT5pZDIuaV9kYXRhLmlkX2RhdGE7CisJbGltaXQgPSBkZV9idWYgKyBpX3NpemVfcmVhZChkaXIpOworCisJd2hpbGUgKGRlX2J1ZiA8IGxpbWl0KSB7CisJCWRlID0gKHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKilkZV9idWY7CisKKwkJaWYgKGRlLT5uYW1lX2xlbiAmJiBkZS0+aW5vZGUpCisJCQlkaXJlbnRfY291bnQrKzsKKworCQlkZV9idWYgKz0gbGUxNl90b19jcHUoZGUtPnJlY19sZW4pOworCX0KKworCS8qIFdlIGFyZSBjYXJlZnVsIHRvIGxlYXZlIHJvb20gZm9yIG9uZSBleHRyYSByZWNvcmQuICovCisJcmV0dXJuIGRpcmVudF9jb3VudCA8IG9jZnMyX2R4X2VudHJpZXNfcGVyX3Jvb3QoZGlyLT5pX3NiKTsKIH0KIAogLyoKQEAgLTEzNTgsMTggKzI4MTMsMjYgQEAKICAqIGV4cGFuc2lvbiBmcm9tIGFuIGlubGluZSBkaXJlY3RvcnkgdG8gb25lIHdpdGggZXh0ZW50cy4gVGhlIGZpcnN0IGRpciBibG9jawogICogaW4gdGhhdCBjYXNlIGlzIHRha2VuIGZyb20gdGhlIGlubGluZSBkYXRhIHBvcnRpb24gb2YgdGhlIGlub2RlIGJsb2NrLgogICoKKyAqIFRoaXMgd2lsbCBhbHNvIHJldHVybiB0aGUgbGFyZ2VzdCBhbW91bnQgb2YgY29udGlndW91cyBzcGFjZSBmb3IgYSBkaXJlbnQKKyAqIGluIHRoZSBibG9jay4gVGhhdCB2YWx1ZSBpcyAqbm90KiBuZWNlc3NhcmlseSB0aGUgbGFzdCBkaXJlbnQsIGV2ZW4gYWZ0ZXIKKyAqIGV4cGFuc2lvbi4gVGhlIGRpcmVjdG9yeSBpbmRleGluZyBjb2RlIHdhbnRzIHRoaXMgdmFsdWUgZm9yIGZyZWUgc3BhY2UKKyAqIGFjY291bnRpbmcuIFdlIGRvIHRoaXMgaGVyZSBzaW5jZSB3ZSdyZSBhbHJlYWR5IHdhbGtpbmcgdGhlIGVudGlyZSBkaXIKKyAqIGJsb2NrLgorICoKICAqIFdlIGFkZCB0aGUgZGlyIHRyYWlsZXIgaWYgdGhpcyBmaWxlc3lzdGVtIHdhbnRzIGl0LgogICovCi1zdGF0aWMgdm9pZCBvY2ZzMl9leHBhbmRfbGFzdF9kaXJlbnQoY2hhciAqc3RhcnQsIHVuc2lnbmVkIGludCBvbGRfc2l6ZSwKLQkJCQkgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCitzdGF0aWMgdW5zaWduZWQgaW50IG9jZnMyX2V4cGFuZF9sYXN0X2RpcmVudChjaGFyICpzdGFydCwgdW5zaWduZWQgaW50IG9sZF9zaXplLAorCQkJCQkgICAgIHN0cnVjdCBpbm9kZSAqZGlyKQogeworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkaXItPmlfc2I7CiAJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGU7CiAJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqcHJldl9kZTsKIAljaGFyICpkZV9idWYsICpsaW1pdDsKIAl1bnNpZ25lZCBpbnQgbmV3X3NpemUgPSBzYi0+c19ibG9ja3NpemU7Ci0JdW5zaWduZWQgaW50IGJ5dGVzOworCXVuc2lnbmVkIGludCBieXRlcywgdGhpc19ob2xlOworCXVuc2lnbmVkIGludCBsYXJnZXN0X2hvbGUgPSAwOwogCi0JaWYgKG9jZnMyX3N1cHBvcnRzX2Rpcl90cmFpbGVyKE9DRlMyX1NCKHNiKSkpCisJaWYgKG9jZnMyX25ld19kaXJfd2FudHNfdHJhaWxlcihkaXIpKQogCQluZXdfc2l6ZSA9IG9jZnMyX2Rpcl90cmFpbGVyX2Jsa19vZmYoc2IpOwogCiAJYnl0ZXMgPSBuZXdfc2l6ZSAtIG9sZF9zaXplOwpAQCAtMTM3OCwxMiArMjg0MSwyNiBAQAogCWRlX2J1ZiA9IHN0YXJ0OwogCWRlID0gKHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKilkZV9idWY7CiAJZG8geworCQl0aGlzX2hvbGUgPSBvY2ZzMl9maWd1cmVfZGlyZW50X2hvbGUoZGUpOworCQlpZiAodGhpc19ob2xlID4gbGFyZ2VzdF9ob2xlKQorCQkJbGFyZ2VzdF9ob2xlID0gdGhpc19ob2xlOworCiAJCXByZXZfZGUgPSBkZTsKIAkJZGVfYnVmICs9IGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKTsKIAkJZGUgPSAoc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKWRlX2J1ZjsKIAl9IHdoaWxlIChkZV9idWYgPCBsaW1pdCk7CiAKIAlsZTE2X2FkZF9jcHUoJnByZXZfZGUtPnJlY19sZW4sIGJ5dGVzKTsKKworCS8qIFdlIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoaXMgYWZ0ZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBmaW5hbAorCSAqIGRpcmVudC4gKi8KKwl0aGlzX2hvbGUgPSBvY2ZzMl9maWd1cmVfZGlyZW50X2hvbGUocHJldl9kZSk7CisJaWYgKHRoaXNfaG9sZSA+IGxhcmdlc3RfaG9sZSkKKwkJbGFyZ2VzdF9ob2xlID0gdGhpc19ob2xlOworCisJaWYgKGxhcmdlc3RfaG9sZSA+PSBPQ0ZTMl9ESVJfTUlOX1JFQ19MRU4pCisJCXJldHVybiBsYXJnZXN0X2hvbGU7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMzk2LDI5ICsyODczLDYxIEBACiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfZXhwYW5kX2lubGluZV9kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiAJCQkJICAgdW5zaWduZWQgaW50IGJsb2Nrc193YW50ZWQsCisJCQkJICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXAsCiAJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqZmlyc3RfYmxvY2tfYmgpCiB7Ci0JdTMyIGFsbG9jLCBiaXRfb2ZmLCBsZW47CisJdTMyIGFsbG9jLCBkeF9hbGxvYywgYml0X29mZiwgbGVuLCBudW1fZHhfZW50cmllcyA9IDA7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKLQlpbnQgcmV0LCBjcmVkaXRzID0gb2NmczJfaW5saW5lX3RvX2V4dGVudHNfY3JlZGl0cyhzYik7Ci0JdTY0IGJsa25vLCBieXRlcyA9IGJsb2Nrc193YW50ZWQgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJaW50IHJldCwgaSwgbnVtX2R4X2xlYXZlcyA9IDAsIGR4X2lubGluZSA9IDAsCisJCWNyZWRpdHMgPSBvY2ZzMl9pbmxpbmVfdG9fZXh0ZW50c19jcmVkaXRzKHNiKTsKKwl1NjQgZHhfaW5zZXJ0X2Jsa25vLCBibGtubywKKwkJYnl0ZXMgPSBibG9ja3Nfd2FudGVkIDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKIAlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGRpcik7CiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWM7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyZGF0YV9iaCA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkeF9sZWF2ZXMgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOwogCWhhbmRsZV90ICpoYW5kbGU7CiAJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OwotCWludCBkaWRfcXVvdGEgPSAwOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBkeF9ldDsKKwlpbnQgZGlkX3F1b3RhID0gMCwgYnl0ZXNfYWxsb2NhdGVkID0gMDsKIAogCW9jZnMyX2luaXRfZGlub2RlX2V4dGVudF90cmVlKCZldCwgZGlyLCBkaV9iaCk7CiAKIAlhbGxvYyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhzYiwgYnl0ZXMpOworCWR4X2FsbG9jID0gMDsKKworCWlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSkgeworCQljcmVkaXRzICs9IG9jZnMyX2FkZF9kaXJfaW5kZXhfY3JlZGl0cyhzYik7CisKKwkJZHhfaW5saW5lID0gb2NmczJfbmV3X2R4X3Nob3VsZF9iZV9pbmxpbmUoZGlyLCBkaV9iaCk7CisJCWlmICghZHhfaW5saW5lKSB7CisJCQkvKiBBZGQgb25lIG1vcmUgY2x1c3RlciBmb3IgYW4gaW5kZXggbGVhZiAqLworCQkJZHhfYWxsb2MrKzsKKwkJCWR4X2xlYXZlcyA9IG9jZnMyX2R4X2Rpcl9rbWFsbG9jX2xlYXZlcyhzYiwKKwkJCQkJCQkJJm51bV9keF9sZWF2ZXMpOworCQkJaWYgKCFkeF9sZWF2ZXMpIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCisJCS8qIFRoaXMgZ2V0cyB1cyB0aGUgZHhfcm9vdCAqLworCQlyZXQgPSBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YV9ibG9ja3Mob3NiLCAxLCAmbWV0YV9hYyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQogCiAJLyoKLQkgKiBXZSBzaG91bGQgbmV2ZXIgbmVlZCBtb3JlIHRoYW4gMiBjbHVzdGVycyBmb3IgdGhpcyAtCi0JICogbWF4aW11bSBkaXJlbnQgc2l6ZSBpcyBmYXIgbGVzcyB0aGFuIG9uZSBibG9jay4gSW4gZmFjdCwKLQkgKiB0aGUgb25seSB0aW1lIHdlJ2QgbmVlZCBtb3JlIHRoYW4gb25lIGNsdXN0ZXIgaXMgaWYKKwkgKiBXZSBzaG91bGQgbmV2ZXIgbmVlZCBtb3JlIHRoYW4gMiBjbHVzdGVycyBmb3IgdGhlIHVuaW5kZXhlZAorCSAqIHRyZWUgLSBtYXhpbXVtIGRpcmVudCBzaXplIGlzIGZhciBsZXNzIHRoYW4gb25lIGJsb2NrLiBJbgorCSAqIGZhY3QsIHRoZSBvbmx5IHRpbWUgd2UnZCBuZWVkIG1vcmUgdGhhbiBvbmUgY2x1c3RlciBpcyBpZgogCSAqIGJsb2Nrc2l6ZSA9PSBjbHVzdGVyc2l6ZSBhbmQgdGhlIGRpcmVudCB3b24ndCBmaXQgaW4gdGhlCiAJICogZXh0cmEgc3BhY2UgdGhhdCB0aGUgZXhwYW5zaW9uIHRvIGEgc2luZ2xlIGJsb2NrIGdpdmVzLiBBcwogCSAqIG9mIHRvZGF5LCB0aGF0IG9ubHkgaGFwcGVucyBvbiA0ay80ayBmaWxlIHN5c3RlbXMuCkBAIC0xNDM1LDcgKzI5NDQsNyBAQAogCiAJLyoKIAkgKiBQcmVwYXJlIGZvciB3b3JzdCBjYXNlIGFsbG9jYXRpb24gc2NlbmFyaW8gb2YgdHdvIHNlcGFyYXRlCi0JICogZXh0ZW50cy4KKwkgKiBleHRlbnRzIGluIHRoZSB1bmluZGV4ZWQgdHJlZS4KIAkgKi8KIAlpZiAoYWxsb2MgPT0gMikKIAkJY3JlZGl0cyArPSBPQ0ZTMl9TVUJBTExPQ19BTExPQzsKQEAgLTE0NDgsMTEgKzI5NTcsMjkgQEAKIAl9CiAKIAlpZiAodmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoZGlyLAotCQkJCW9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKG9zYi0+c2IsIGFsbG9jKSkpIHsKKwkJCQlvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhvc2ItPnNiLAorCQkJCQkJCWFsbG9jICsgZHhfYWxsb2MpKSkgewogCQlyZXQgPSAtRURRVU9UOwogCQlnb3RvIG91dF9jb21taXQ7CiAJfQogCWRpZF9xdW90YSA9IDE7CisKKwlpZiAob2NmczJfc3VwcG9ydHNfaW5kZXhlZF9kaXJzKG9zYikgJiYgIWR4X2lubGluZSkgeworCQkvKgorCQkgKiBBbGxvY2F0ZSBvdXIgaW5kZXggY2x1c3RlciBmaXJzdCwgdG8gbWF4aW1pemUgdGhlCisJCSAqIHBvc3NpYmlsaXR5IHRoYXQgdW5pbmRleGVkIGxlYXZlcyBncm93CisJCSAqIGNvbnRpZ3VvdXNseS4KKwkJICovCisJCXJldCA9IF9fb2NmczJfZHhfZGlyX25ld19jbHVzdGVyKGRpciwgMCwgaGFuZGxlLCBkYXRhX2FjLAorCQkJCQkJIGR4X2xlYXZlcywgbnVtX2R4X2xlYXZlcywKKwkJCQkJCSAmZHhfaW5zZXJ0X2Jsa25vKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisJCWJ5dGVzX2FsbG9jYXRlZCArPSBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhkaXItPmlfc2IsIDEpOworCX0KKwogCS8qCiAJICogVHJ5IHRvIGNsYWltIGFzIG1hbnkgY2x1c3RlcnMgYXMgdGhlIGJpdG1hcCBjYW4gZ2l2ZSB0aG91Z2gKIAkgKiBpZiB3ZSBvbmx5IGdldCBvbmUgbm93LCB0aGF0J3MgZW5vdWdoIHRvIGNvbnRpbnVlLiBUaGUgcmVzdApAQCAtMTQ2Myw2ICsyOTkwLDcgQEAKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dF9jb21taXQ7CiAJfQorCWJ5dGVzX2FsbG9jYXRlZCArPSBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhkaXItPmlfc2IsIDEpOwogCiAJLyoKIAkgKiBPcGVyYXRpb25zIGFyZSBjYXJlZnVsbHkgb3JkZXJlZCBzbyB0aGF0IHdlIHNldCB1cCB0aGUgbmV3CkBAIC0xNDg5LDkgKzMwMTcsMTYgQEAKIAltZW1jcHkoZGlyZGF0YV9iaC0+Yl9kYXRhLCBkaS0+aWQyLmlfZGF0YS5pZF9kYXRhLCBpX3NpemVfcmVhZChkaXIpKTsKIAltZW1zZXQoZGlyZGF0YV9iaC0+Yl9kYXRhICsgaV9zaXplX3JlYWQoZGlyKSwgMCwKIAkgICAgICAgc2ItPnNfYmxvY2tzaXplIC0gaV9zaXplX3JlYWQoZGlyKSk7Ci0Jb2NmczJfZXhwYW5kX2xhc3RfZGlyZW50KGRpcmRhdGFfYmgtPmJfZGF0YSwgaV9zaXplX3JlYWQoZGlyKSwgc2IpOwotCWlmIChvY2ZzMl9zdXBwb3J0c19kaXJfdHJhaWxlcihvc2IpKQotCQlvY2ZzMl9pbml0X2Rpcl90cmFpbGVyKGRpciwgZGlyZGF0YV9iaCk7CisJaSA9IG9jZnMyX2V4cGFuZF9sYXN0X2RpcmVudChkaXJkYXRhX2JoLT5iX2RhdGEsIGlfc2l6ZV9yZWFkKGRpciksIGRpcik7CisJaWYgKG9jZnMyX25ld19kaXJfd2FudHNfdHJhaWxlcihkaXIpKSB7CisJCS8qCisJCSAqIFByZXBhcmUgdGhlIGRpciB0cmFpbGVyIHVwIGZyb250LiBJdCB3aWxsIG90aGVyd2lzZSBsb29rCisJCSAqIGxpa2UgYSB2YWxpZCBkaXJlbnQuIEV2ZW4gaWYgaW5zZXJ0aW5nIHRoZSBpbmRleCBmYWlscworCQkgKiAodW5saWtlbHkpLCB0aGVuIGFsbCB3ZSdsbCBoYXZlIGRvbmUgaXMgZ2l2ZW4gZmlyc3QgZGlyCisJCSAqIGJsb2NrIGEgc21hbGwgYW1vdW50IG9mIGZyYWdtZW50YXRpb24uCisJCSAqLworCQlvY2ZzMl9pbml0X2Rpcl90cmFpbGVyKGRpciwgZGlyZGF0YV9iaCwgaSk7CisJfQogCiAJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGRpcmRhdGFfYmgpOwogCWlmIChyZXQpIHsKQEAgLTE0OTksNiArMzAzNCwyNCBAQAogCQlnb3RvIG91dF9jb21taXQ7CiAJfQogCisJaWYgKG9jZnMyX3N1cHBvcnRzX2luZGV4ZWRfZGlycyhvc2IpICYmICFkeF9pbmxpbmUpIHsKKwkJLyoKKwkJICogRHggZGlycyB3aXRoIGFuIGV4dGVybmFsIGNsdXN0ZXIgbmVlZCB0byBkbyB0aGlzIHVwCisJCSAqIGZyb250LiBJbmxpbmUgZHggcm9vdCdzIGdldCBoYW5kbGVkIGxhdGVyLCBhZnRlcgorCQkgKiB3ZSd2ZSBhbGxvY2F0ZWQgb3VyIHJvb3QgYmxvY2suIFdlIGdldCBwYXNzZWQgYmFjaworCQkgKiBhIHRvdGFsIG51bWJlciBvZiBpdGVtcyBzbyB0aGF0IGRyX251bV9lbnRyaWVzIGNhbgorCQkgKiBiZSBjb3JyZWN0bHkgc2V0IG9uY2UgdGhlIGR4X3Jvb3QgaGFzIGJlZW4KKwkJICogYWxsb2NhdGVkLgorCQkgKi8KKwkJcmV0ID0gb2NmczJfZHhfZGlyX2luZGV4X2Jsb2NrKGRpciwgaGFuZGxlLCBkeF9sZWF2ZXMsCisJCQkJCSAgICAgICBudW1fZHhfbGVhdmVzLCAmbnVtX2R4X2VudHJpZXMsCisJCQkJCSAgICAgICBkaXJkYXRhX2JoKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXRfY29tbWl0OworCQl9CisJfQorCiAJLyoKIAkgKiBTZXQgZXh0ZW50LCBpX3NpemUsIGV0YyBvbiB0aGUgZGlyZWN0b3J5LiBBZnRlciB0aGlzLCB0aGUKIAkgKiBpbm9kZSBzaG91bGQgY29udGFpbiB0aGUgc2FtZSBleGFjdCBkaXJlbnRzIGFzIGJlZm9yZSBhbmQKQEAgLTE1NTEsNiArMzEwNCwyNyBAQAogCQlnb3RvIG91dF9jb21taXQ7CiAJfQogCisJaWYgKG9jZnMyX3N1cHBvcnRzX2luZGV4ZWRfZGlycyhvc2IpKSB7CisJCXJldCA9IG9jZnMyX2R4X2Rpcl9hdHRhY2hfaW5kZXgob3NiLCBoYW5kbGUsIGRpciwgZGlfYmgsCisJCQkJCQlkaXJkYXRhX2JoLCBtZXRhX2FjLCBkeF9pbmxpbmUsCisJCQkJCQludW1fZHhfZW50cmllcywgJmR4X3Jvb3RfYmgpOworCQlpZiAocmV0KSB7CisJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dF9jb21taXQ7CisJCX0KKworCQlpZiAoZHhfaW5saW5lKSB7CisJCQlvY2ZzMl9keF9kaXJfaW5kZXhfcm9vdF9ibG9jayhkaXIsIGR4X3Jvb3RfYmgsCisJCQkJCQkgICAgICBkaXJkYXRhX2JoKTsKKwkJfSBlbHNlIHsKKwkJCW9jZnMyX2luaXRfZHhfcm9vdF9leHRlbnRfdHJlZSgmZHhfZXQsIGRpciwgZHhfcm9vdF9iaCk7CisJCQlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBkaXIsICZkeF9ldCwgMCwKKwkJCQkJCSAgZHhfaW5zZXJ0X2Jsa25vLCAxLCAwLCBOVUxMKTsKKwkJCWlmIChyZXQpCisJCQkJbWxvZ19lcnJubyhyZXQpOworCQl9CisJfQorCiAJLyoKIAkgKiBXZSBhc2tlZCBmb3IgdHdvIGNsdXN0ZXJzLCBidXQgb25seSBnb3Qgb25lIGluIHRoZSAxc3QKIAkgKiBwYXNzLiBDbGFpbSB0aGUgMm5kIGNsdXN0ZXIgYXMgYSBzZXBhcmF0ZSBleHRlbnQuCkBAIC0xNTcwLDE1ICszMTQ0LDMyIEBACiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQlnb3RvIG91dF9jb21taXQ7CiAJCX0KKwkJYnl0ZXNfYWxsb2NhdGVkICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKGRpci0+aV9zYiwgMSk7CiAJfQogCiAJKmZpcnN0X2Jsb2NrX2JoID0gZGlyZGF0YV9iaDsKIAlkaXJkYXRhX2JoID0gTlVMTDsKKwlpZiAob2NmczJfc3VwcG9ydHNfaW5kZXhlZF9kaXJzKG9zYikpIHsKKwkJdW5zaWduZWQgaW50IG9mZjsKKworCQlpZiAoIWR4X2lubGluZSkgeworCQkJLyoKKwkJCSAqIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBjb3JyZWN0IGJsb2NrIHdpdGhpbiB0aGUKKwkJCSAqIGNsdXN0ZXIgd2hpY2ggc2hvdWxkIGhvbGQgb3VyIGVudHJ5LgorCQkJICovCisJCQlvZmYgPSBvY2ZzMl9keF9kaXJfaGFzaF9pZHgoT0NGUzJfU0IoZGlyLT5pX3NiKSwKKwkJCQkJCSAgICAmbG9va3VwLT5kbF9oaW5mbyk7CisJCQlnZXRfYmgoZHhfbGVhdmVzW29mZl0pOworCQkJbG9va3VwLT5kbF9keF9sZWFmX2JoID0gZHhfbGVhdmVzW29mZl07CisJCX0KKwkJbG9va3VwLT5kbF9keF9yb290X2JoID0gZHhfcm9vdF9iaDsKKwkJZHhfcm9vdF9iaCA9IE5VTEw7CisJfQogCiBvdXRfY29tbWl0OgogCWlmIChyZXQgPCAwICYmIGRpZF9xdW90YSkKLQkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShkaXIsCi0JCQlvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhvc2ItPnNiLCAyKSk7CisJCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoZGlyLCBieXRlc19hbGxvY2F0ZWQpOworCiAJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKIAogb3V0X3NlbToKQEAgLTE1ODcsOCArMzE3OCwxNyBAQAogb3V0OgogCWlmIChkYXRhX2FjKQogCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoZGF0YV9hYyk7CisJaWYgKG1ldGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChtZXRhX2FjKTsKKworCWlmIChkeF9sZWF2ZXMpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9keF9sZWF2ZXM7IGkrKykKKwkJCWJyZWxzZShkeF9sZWF2ZXNbaV0pOworCQlrZnJlZShkeF9sZWF2ZXMpOworCX0KIAogCWJyZWxzZShkaXJkYXRhX2JoKTsKKwlicmVsc2UoZHhfcm9vdF9iaCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTY1OCwxMSArMzI1OCwxNCBAQAogICogaXMgdG8gYmUgdHVybmVkIGludG8gYW4gZXh0ZW50IGJhc2VkIG9uZS4gVGhlIHNpemUgb2YgdGhlIGRpcmVudCB0bwogICogaW5zZXJ0IG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBzcGFjZSBnYWluZWQgYnkgZ3Jvd2luZyB0byBqdXN0IG9uZQogICogYmxvY2ssIHNvIHdlIG1heSBoYXZlIHRvIGdyb3cgdGhlIGlub2RlIGJ5IHR3byBibG9ja3MgaW4gdGhhdCBjYXNlLgorICoKKyAqIElmIHRoZSBkaXJlY3RvcnkgaXMgYWxyZWFkeSBpbmRleGVkLCBkeF9yb290X2JoIG11c3QgYmUgcHJvdmlkZWQuCiAgKi8KIHN0YXRpYyBpbnQgb2NmczJfZXh0ZW5kX2RpcihzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCwKIAkJCSAgICB1bnNpZ25lZCBpbnQgYmxvY2tzX3dhbnRlZCwKKwkJCSAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCwKIAkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipuZXdfZGVfYmgpCiB7CiAJaW50IHN0YXR1cyA9IDA7CkBAIC0xNjc3LDE3ICszMjgwLDI5IEBACiAJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqIGRlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBvc2ItPnNiOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmggPSBsb29rdXAtPmRsX2R4X3Jvb3RfYmg7CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKIAogCWlmIChPQ0ZTMl9JKGRpciktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKSB7CisJCS8qCisJCSAqIFRoaXMgd291bGQgYmUgYSBjb2RlIGVycm9yIGFzIGFuIGlubGluZSBkaXJlY3Rvcnkgc2hvdWxkCisJCSAqIG5ldmVyIGhhdmUgYW4gaW5kZXggcm9vdC4KKwkJICovCisJCUJVR19PTihkeF9yb290X2JoKTsKKwogCQlzdGF0dXMgPSBvY2ZzMl9leHBhbmRfaW5saW5lX2RpcihkaXIsIHBhcmVudF9mZV9iaCwKLQkJCQkJCSBibG9ja3Nfd2FudGVkLCAmbmV3X2JoKTsKKwkJCQkJCSBibG9ja3Nfd2FudGVkLCBsb29rdXAsCisJCQkJCQkgJm5ld19iaCk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gYmFpbDsKIAkJfQogCisJCS8qIEV4cGFuc2lvbiBmcm9tIGlubGluZSB0byBhbiBpbmRleGVkIGRpcmVjdG9yeSB3aWxsCisJCSAqIGhhdmUgZ2l2ZW4gdXMgdGhpcy4gKi8KKwkJZHhfcm9vdF9iaCA9IGxvb2t1cC0+ZGxfZHhfcm9vdF9iaDsKKwogCQlpZiAoYmxvY2tzX3dhbnRlZCA9PSAxKSB7CiAJCQkvKgogCQkJICogSWYgdGhlIG5ldyBkaXJlbnQgd2lsbCBmaXQgaW5zaWRlIHRoZSBzcGFjZQpAQCAtMTc1MSw2ICszMzY2LDEwIEBACiAJfQogCiBkb19leHRlbmQ6CisJaWYgKG9jZnMyX2Rpcl9pbmRleGVkKGRpcikpCisJCWNyZWRpdHMrKzsgLyogRm9yIGF0dGFjaGluZyB0aGUgbmV3IGRpcmVudCBibG9jayB0byB0aGUKKwkJCSAgICAqIGR4X3Jvb3QgKi8KKwogCWRvd25fd3JpdGUoJk9DRlMyX0koZGlyKS0+aXBfYWxsb2Nfc2VtKTsKIAlkcm9wX2FsbG9jX3NlbSA9IDE7CiAKQEAgLTE3ODEsOSArMzQwMCwxOSBAQAogCiAJZGUgPSAoc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKSBuZXdfYmgtPmJfZGF0YTsKIAlkZS0+aW5vZGUgPSAwOwotCWlmIChvY2ZzMl9kaXJfaGFzX3RyYWlsZXIoZGlyKSkgeworCWlmIChvY2ZzMl9zdXBwb3J0c19kaXJfdHJhaWxlcihkaXIpKSB7CiAJCWRlLT5yZWNfbGVuID0gY3B1X3RvX2xlMTYob2NmczJfZGlyX3RyYWlsZXJfYmxrX29mZihzYikpOwotCQlvY2ZzMl9pbml0X2Rpcl90cmFpbGVyKGRpciwgbmV3X2JoKTsKKworCQlvY2ZzMl9pbml0X2Rpcl90cmFpbGVyKGRpciwgbmV3X2JoLCBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbikpOworCisJCWlmIChvY2ZzMl9kaXJfaW5kZXhlZChkaXIpKSB7CisJCQlzdGF0dXMgPSBvY2ZzMl9keF9kaXJfbGlua190cmFpbGVyKGRpciwgaGFuZGxlLAorCQkJCQkJCSAgIGR4X3Jvb3RfYmgsIG5ld19iaCk7CisJCQlpZiAoc3RhdHVzKSB7CisJCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJfQogCX0gZWxzZSB7CiAJCWRlLT5yZWNfbGVuID0gY3B1X3RvX2xlMTYoc2ItPnNfYmxvY2tzaXplKTsKIAl9CkBAIC0xODM5LDcgKzM0NjgsNyBAQAogCSAqIFRoaXMgY2FsY3VsYXRlcyBob3cgbWFueSBmcmVlIGJ5dGVzIHdlJ2QgaGF2ZSBpbiBibG9jayB6ZXJvLCBzaG91bGQKIAkgKiB0aGlzIGZ1bmN0aW9uIGZvcmNlIGV4cGFuc2lvbiB0byBhbiBleHRlbnQgdHJlZS4KIAkgKi8KLQlpZiAob2NmczJfc3VwcG9ydHNfZGlyX3RyYWlsZXIoT0NGUzJfU0Ioc2IpKSkKKwlpZiAob2NmczJfbmV3X2Rpcl93YW50c190cmFpbGVyKGRpcikpCiAJCWZyZWVfc3BhY2UgPSBvY2ZzMl9kaXJfdHJhaWxlcl9ibGtfb2ZmKHNiKSAtIGlfc2l6ZV9yZWFkKGRpcik7CiAJZWxzZQogCQlmcmVlX3NwYWNlID0gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIGlfc2l6ZV9yZWFkKGRpcik7CkBAIC0xOTcwLDEyICszNTk5LDc2NiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgZHhfbGVhZl9zb3J0X2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBvY2ZzMl9keF9lbnRyeSAqZW50cnkxID0gYTsKKwljb25zdCBzdHJ1Y3Qgb2NmczJfZHhfZW50cnkgKmVudHJ5MiA9IGI7CisJdTMyIG1ham9yX2hhc2gxID0gbGUzMl90b19jcHUoZW50cnkxLT5keF9tYWpvcl9oYXNoKTsKKwl1MzIgbWFqb3JfaGFzaDIgPSBsZTMyX3RvX2NwdShlbnRyeTItPmR4X21ham9yX2hhc2gpOworCXUzMiBtaW5vcl9oYXNoMSA9IGxlMzJfdG9fY3B1KGVudHJ5MS0+ZHhfbWlub3JfaGFzaCk7CisJdTMyIG1pbm9yX2hhc2gyID0gbGUzMl90b19jcHUoZW50cnkyLT5keF9taW5vcl9oYXNoKTsKKworCWlmIChtYWpvcl9oYXNoMSA+IG1ham9yX2hhc2gyKQorCQlyZXR1cm4gMTsKKwlpZiAobWFqb3JfaGFzaDEgPCBtYWpvcl9oYXNoMikKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBJdCBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHRvIHNvcnQgYnkgbWlub3IKKwkgKi8KKwlpZiAobWlub3JfaGFzaDEgPiBtaW5vcl9oYXNoMikKKwkJcmV0dXJuIDE7CisJaWYgKG1pbm9yX2hhc2gxIDwgbWlub3JfaGFzaDIpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHhfbGVhZl9zb3J0X3N3YXAodm9pZCAqYSwgdm9pZCAqYiwgaW50IHNpemUpCit7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5ICplbnRyeTEgPSBhOworCXN0cnVjdCBvY2ZzMl9keF9lbnRyeSAqZW50cnkyID0gYjsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnkgdG1wOworCisJQlVHX09OKHNpemUgIT0gc2l6ZW9mKCplbnRyeTEpKTsKKworCXRtcCA9ICplbnRyeTE7CisJKmVudHJ5MSA9ICplbnRyeTI7CisJKmVudHJ5MiA9IHRtcDsKK30KKworc3RhdGljIGludCBvY2ZzMl9keF9sZWFmX3NhbWVfbWFqb3Ioc3RydWN0IG9jZnMyX2R4X2xlYWYgKmR4X2xlYWYpCit7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgKmRsX2xpc3QgPSAmZHhfbGVhZi0+ZGxfbGlzdDsKKwlpbnQgaSwgbnVtID0gbGUxNl90b19jcHUoZGxfbGlzdC0+ZGVfbnVtX3VzZWQpOworCisJZm9yIChpID0gMDsgaSA8IChudW0gLSAxKTsgaSsrKSB7CisJCWlmIChsZTMyX3RvX2NwdShkbF9saXN0LT5kZV9lbnRyaWVzW2ldLmR4X21ham9yX2hhc2gpICE9CisJCSAgICBsZTMyX3RvX2NwdShkbF9saXN0LT5kZV9lbnRyaWVzW2kgKyAxXS5keF9tYWpvcl9oYXNoKSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCisvKgorICogRmluZCB0aGUgb3B0aW1hbCB2YWx1ZSB0byBzcGxpdCB0aGlzIGxlYWYgb24uIFRoaXMgZXhwZWN0cyB0aGUgbGVhZgorICogZW50cmllcyB0byBiZSBpbiBzb3J0ZWQgb3JkZXIuCisgKgorICogbGVhZl9jcG9zIGlzIHRoZSBjcG9zIG9mIHRoZSBsZWFmIHdlJ3JlIHNwbGl0dGluZy4gaW5zZXJ0X2hhc2ggaXMKKyAqIHRoZSBoYXNoIHdlIHdhbnQgdG8gaW5zZXJ0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjb25jZXJuZWQgd2l0aCB0aGUgbWFqb3IgaGFzaCAtIHRoYXQgd2hpY2gKKyAqIGRldGVybWluZXMgd2hpY2ggY2x1c3RlciBhbiBpdGVtIGJlbG9uZ3MgdG8uCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfZHhfZGlyX2ZpbmRfbGVhZl9zcGxpdChzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqZHhfbGVhZiwKKwkJCQkJdTMyIGxlYWZfY3BvcywgdTMyIGluc2VydF9oYXNoLAorCQkJCQl1MzIgKnNwbGl0X2hhc2gpCit7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgKmRsX2xpc3QgPSAmZHhfbGVhZi0+ZGxfbGlzdDsKKwlpbnQgaSwgbnVtX3VzZWQgPSBsZTE2X3RvX2NwdShkbF9saXN0LT5kZV9udW1fdXNlZCk7CisJaW50IGFsbHNhbWU7CisKKwkvKgorCSAqIFRoZXJlJ3MgYSBjb3VwbGUgcmFyZSwgYnV0IG5hc3R5IGNvcm5lciBjYXNlcyB3ZSBoYXZlIHRvCisJICogY2hlY2sgZm9yIGhlcmUuIEFsbCBvZiB0aGVtIGludm9sdmUgYSBsZWFmIHdoZXJlIGFsbCB2YWx1ZQorCSAqIGhhdmUgdGhlIHNhbWUgaGFzaCwgd2hpY2ggaXMgd2hhdCB3ZSBsb29rIGZvciBmaXJzdC4KKwkgKgorCSAqIE1vc3Qgb2YgdGhlIHRpbWUsIGFsbCBvZiB0aGUgYWJvdmUgaXMgZmFsc2UsIGFuZCB3ZSBzaW1wbHkKKwkgKiBwaWNrIHRoZSBtZWRpYW4gdmFsdWUgZm9yIGEgc3BsaXQuCisJICovCisJYWxsc2FtZSA9IG9jZnMyX2R4X2xlYWZfc2FtZV9tYWpvcihkeF9sZWFmKTsKKwlpZiAoYWxsc2FtZSkgeworCQl1MzIgdmFsID0gbGUzMl90b19jcHUoZGxfbGlzdC0+ZGVfZW50cmllc1swXS5keF9tYWpvcl9oYXNoKTsKKworCQlpZiAodmFsID09IGluc2VydF9oYXNoKSB7CisJCQkvKgorCQkJICogTm8gbWF0dGVyIHdoZXJlIHdlIHdvdWxkIGNob29zZSB0byBzcGxpdCwKKwkJCSAqIHRoZSBuZXcgZW50cnkgd291bGQgd2FudCB0byBvY2N1cHkgdGhlIHNhbWUKKwkJCSAqIGJsb2NrIGFzIHRoZXNlLiBTaW5jZSB0aGVyZSdzIG5vIHNwYWNlIGxlZnQKKwkJCSAqIGluIHRoZWlyIGV4aXN0aW5nIGJsb2NrLCB3ZSBrbm93IHRoZXJlCisJCQkgKiB3b24ndCBiZSBzcGFjZSBhZnRlciB0aGUgc3BsaXQuCisJCQkgKi8KKwkJCXJldHVybiAtRU5PU1BDOworCQl9CisKKwkJaWYgKHZhbCA9PSBsZWFmX2Nwb3MpIHsKKwkJCS8qCisJCQkgKiBCZWNhdXNlIHZhbCBpcyB0aGUgc2FtZSBhcyBsZWFmX2Nwb3MgKHdoaWNoCisJCQkgKiBpcyB0aGUgc21hbGxlc3QgdmFsdWUgdGhpcyBsZWFmIGNhbiBoYXZlKSwKKwkJCSAqIHlldCBpcyBub3QgZXF1YWwgdG8gaW5zZXJ0X2hhc2gsIHRoZW4gd2UKKwkJCSAqIGtub3cgdGhhdCBpbnNlcnRfaGFzaCAqbXVzdCogYmUgbGFyZ2VyIHRoYW4KKwkJCSAqIHZhbCAoYW5kIGxlYWZfY3BvcykuIEF0IGxlYXN0IGNwb3MrMSBpbiB2YWx1ZS4KKwkJCSAqCisJCQkgKiBXZSBhbHNvIGtub3cgdGhlbiwgdGhhdCB0aGVyZSBjYW5ub3QgYmUgYW4KKwkJCSAqIGFkamFjZW50IGV4dGVudCAob3RoZXJ3aXNlIHdlJ2QgYmUgbG9va2luZworCQkJICogYXQgaXQpLiBDaG9vc2luZyB0aGlzIHZhbHVlIGdpdmVzIHVzIGEKKwkJCSAqIGNoYW5jZSB0byBnZXQgc29tZSBjb250aWd1b3VzbmVzcy4KKwkJCSAqLworCQkJKnNwbGl0X2hhc2ggPSBsZWFmX2Nwb3MgKyAxOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlpZiAodmFsID4gaW5zZXJ0X2hhc2gpIHsKKwkJCS8qCisJCQkgKiB2YWwgY2FuIG5vdCBiZSB0aGUgc2FtZSBhcyBpbnNlcnQgaGFzaCwgYW5kCisJCQkgKiBhbHNvIG11c3QgYmUgbGFyZ2VyIHRoYW4gbGVhZl9jcG9zLiBBbHNvLAorCQkJICogd2Uga25vdyB0aGF0IHRoZXJlIGNhbid0IGJlIGEgbGVhZiBiZXR3ZWVuCisJCQkgKiBjcG9zIGFuZCB2YWwsIG90aGVyd2lzZSB0aGUgZW50cmllcyB3aXRoCisJCQkgKiBoYXNoICd2YWwnIHdvdWxkIGJlIHRoZXJlLgorCQkJICovCisJCQkqc3BsaXRfaGFzaCA9IHZhbDsKKwkJCXJldHVybiAwOworCQl9CisKKwkJKnNwbGl0X2hhc2ggPSBpbnNlcnRfaGFzaDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBTaW5jZSB0aGUgcmVjb3JkcyBhcmUgc29ydGVkIGFuZCB0aGUgY2hlY2tzIGFib3ZlCisJICogZ3VhcmFudGVlZCB0aGF0IG5vdCBhbGwgcmVjb3JkcyBpbiB0aGlzIGJsb2NrIGFyZSB0aGUgc2FtZSwKKwkgKiB3ZSBzaW1wbGUgdHJhdmVsIGZvcndhcmQsIGZyb20gdGhlIG1lZGlhbiwgYW5kIHBpY2sgdGhlIDFzdAorCSAqIHJlY29yZCB3aG9zZSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiBsZWFmX2Nwb3MuCisJICovCisJZm9yIChpID0gKG51bV91c2VkIC8gMik7IGkgPCBudW1fdXNlZDsgaSsrKQorCQlpZiAobGUzMl90b19jcHUoZGxfbGlzdC0+ZGVfZW50cmllc1tpXS5keF9tYWpvcl9oYXNoKSA+CisJCSAgICBsZWFmX2Nwb3MpCisJCQlicmVhazsKKworCUJVR19PTihpID09IG51bV91c2VkKTsgLyogU2hvdWxkIGJlIGltcG9zc2libGUgKi8KKwkqc3BsaXRfaGFzaCA9IGxlMzJfdG9fY3B1KGRsX2xpc3QtPmRlX2VudHJpZXNbaV0uZHhfbWFqb3JfaGFzaCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUcmFuc2ZlciBhbGwgZW50cmllcyBpbiBvcmlnX2R4X2xlYXZlcyB3aG9zZSBtYWpvciBoYXNoIGlzIGVxdWFsIHRvIG9yCisgKiBsYXJnZXIgdGhhbiBzcGxpdF9oYXNoIGludG8gbmV3X2R4X2xlYXZlcy4gV2UgdXNlIGEgdGVtcG9yYXJ5CisgKiBidWZmZXIgKHRtcF9keF9sZWFmKSB0byBtYWtlIHRoZSBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCBsZWFmIGJsb2Nrcy4KKyAqCisgKiBTaW5jZSB0aGUgYmxvY2sgb2Zmc2V0IGluc2lkZSBhIGxlYWYgKGNsdXN0ZXIpIGlzIGEgY29uc3RhbnQgbWFzaworICogb2YgbWlub3JfaGFzaCwgd2UgY2FuIG9wdGltaXplIC0gYW4gaXRlbSBhdCBibG9jayBvZmZzZXQgWCB3aXRoaW4KKyAqIHRoZSBvcmlnaW5hbCBjbHVzdGVyLCB3aWxsIGJlIGF0IG9mZnNldCBYIHdpdGhpbiB0aGUgbmV3IGNsdXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX2R4X2Rpcl90cmFuc2Zlcl9sZWFmKHN0cnVjdCBpbm9kZSAqZGlyLCB1MzIgc3BsaXRfaGFzaCwKKwkJCQkgICAgICAgaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkgICAgICAgc3RydWN0IG9jZnMyX2R4X2xlYWYgKnRtcF9keF9sZWFmLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipvcmlnX2R4X2xlYXZlcywKKwkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqbmV3X2R4X2xlYXZlcywKKwkJCQkgICAgICAgaW50IG51bV9keF9sZWF2ZXMpCit7CisJaW50IGksIGosIG51bV91c2VkOworCXUzMiBtYWpvcl9oYXNoOworCXN0cnVjdCBvY2ZzMl9keF9sZWFmICpvcmlnX2R4X2xlYWYsICpuZXdfZHhfbGVhZjsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnlfbGlzdCAqb3JpZ19saXN0LCAqbmV3X2xpc3QsICp0bXBfbGlzdDsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnkgKmR4X2VudHJ5OworCisJdG1wX2xpc3QgPSAmdG1wX2R4X2xlYWYtPmRsX2xpc3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2R4X2xlYXZlczsgaSsrKSB7CisJCW9yaWdfZHhfbGVhZiA9IChzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqKSBvcmlnX2R4X2xlYXZlc1tpXS0+Yl9kYXRhOworCQlvcmlnX2xpc3QgPSAmb3JpZ19keF9sZWFmLT5kbF9saXN0OworCQluZXdfZHhfbGVhZiA9IChzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqKSBuZXdfZHhfbGVhdmVzW2ldLT5iX2RhdGE7CisJCW5ld19saXN0ID0gJm5ld19keF9sZWFmLT5kbF9saXN0OworCisJCW51bV91c2VkID0gbGUxNl90b19jcHUob3JpZ19saXN0LT5kZV9udW1fdXNlZCk7CisKKwkJbWVtY3B5KHRtcF9keF9sZWFmLCBvcmlnX2R4X2xlYWYsIGRpci0+aV9zYi0+c19ibG9ja3NpemUpOworCQl0bXBfbGlzdC0+ZGVfbnVtX3VzZWQgPSBjcHVfdG9fbGUxNigwKTsKKwkJbWVtc2V0KCZ0bXBfbGlzdC0+ZGVfZW50cmllcywgMCwgc2l6ZW9mKCpkeF9lbnRyeSkqbnVtX3VzZWQpOworCisJCWZvciAoaiA9IDA7IGogPCBudW1fdXNlZDsgaisrKSB7CisJCQlkeF9lbnRyeSA9ICZvcmlnX2xpc3QtPmRlX2VudHJpZXNbal07CisJCQltYWpvcl9oYXNoID0gbGUzMl90b19jcHUoZHhfZW50cnktPmR4X21ham9yX2hhc2gpOworCQkJaWYgKG1ham9yX2hhc2ggPj0gc3BsaXRfaGFzaCkKKwkJCQlvY2ZzMl9keF9kaXJfbGVhZl9pbnNlcnRfdGFpbChuZXdfZHhfbGVhZiwKKwkJCQkJCQkgICAgICBkeF9lbnRyeSk7CisJCQllbHNlCisJCQkJb2NmczJfZHhfZGlyX2xlYWZfaW5zZXJ0X3RhaWwodG1wX2R4X2xlYWYsCisJCQkJCQkJICAgICAgZHhfZW50cnkpOworCQl9CisJCW1lbWNweShvcmlnX2R4X2xlYWYsIHRtcF9keF9sZWFmLCBkaXItPmlfc2ItPnNfYmxvY2tzaXplKTsKKworCQlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgb3JpZ19keF9sZWF2ZXNbaV0pOworCQlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgbmV3X2R4X2xlYXZlc1tpXSk7CisJfQorfQorCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9yZWJhbGFuY2VfY3JlZGl0cyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkJICBzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdCkKK3sKKwlpbnQgY3JlZGl0cyA9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2Nrcyhvc2ItPnNiLCAyKTsKKworCWNyZWRpdHMgKz0gb2NmczJfY2FsY19leHRlbmRfY3JlZGl0cyhvc2ItPnNiLCAmZHhfcm9vdC0+ZHJfbGlzdCwgMSk7CisJY3JlZGl0cyArPSBvY2ZzMl9xdW90YV90cmFuc19jcmVkaXRzKG9zYi0+c2IpOworCXJldHVybiBjcmVkaXRzOworfQorCisvKgorICogRmluZCB0aGUgbWVkaWFuIHZhbHVlIGluIGR4X2xlYWZfYmggYW5kIGFsbG9jYXRlIGEgbmV3IGxlYWYgdG8gbW92ZQorICogaGFsZiBvdXIgZW50cmllcyBpbnRvLgorICovCitzdGF0aWMgaW50IG9jZnMyX2R4X2Rpcl9yZWJhbGFuY2Uoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoLAorCQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9sZWFmX2JoLAorCQkJCSAgc3RydWN0IG9jZnMyX2R4X2hpbmZvICpoaW5mbywgdTMyIGxlYWZfY3BvcywKKwkJCQkgIHU2NCBsZWFmX2Jsa25vKQoreworCXN0cnVjdCBvY2ZzMl9keF9sZWFmICpkeF9sZWFmID0gKHN0cnVjdCBvY2ZzMl9keF9sZWFmICopZHhfbGVhZl9iaC0+Yl9kYXRhOworCWludCBjcmVkaXRzLCByZXQsIGksIG51bV91c2VkLCBkaWRfcXVvdGEgPSAwOworCXUzMiBjcG9zLCBzcGxpdF9oYXNoLCBpbnNlcnRfaGFzaCA9IGhpbmZvLT5tYWpvcl9oYXNoOworCXU2NCBvcmlnX2xlYXZlc19zdGFydDsKKwlpbnQgbnVtX2R4X2xlYXZlczsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipvcmlnX2R4X2xlYXZlcyA9IE5VTEw7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICoqbmV3X2R4X2xlYXZlcyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMgPSBOVUxMLCAqbWV0YV9hYyA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2V4dGVudF90cmVlIGV0OworCWhhbmRsZV90ICpoYW5kbGUgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCXN0cnVjdCBvY2ZzMl9keF9sZWFmICp0bXBfZHhfbGVhZiA9IE5VTEw7CisKKwltbG9nKDAsICJEWCBEaXI6ICVsbHUsIHJlYmFsYW5jZSBsZWFmIGxlYWZfYmxrbm86ICVsbHUgaW5zZXJ0OiAldVxuIiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLT5pcF9ibGtubywKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGVhZl9ibGtubywgaW5zZXJ0X2hhc2gpOworCisJb2NmczJfaW5pdF9keF9yb290X2V4dGVudF90cmVlKCZldCwgZGlyLCBkeF9yb290X2JoKTsKKworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKilkeF9yb290X2JoLT5iX2RhdGE7CisJLyoKKwkgKiBYWFg6IFRoaXMgaXMgYSByYXRoZXIgbGFyZ2UgbGltaXQuIFdlIHNob3VsZCB1c2UgYSBtb3JlCisJICogcmVhbGlzdGljIHZhbHVlLgorCSAqLworCWlmIChsZTMyX3RvX2NwdShkeF9yb290LT5kcl9jbHVzdGVycykgPT0gVUlOVF9NQVgpCisJCXJldHVybiAtRU5PU1BDOworCisJbnVtX3VzZWQgPSBsZTE2X3RvX2NwdShkeF9sZWFmLT5kbF9saXN0LmRlX251bV91c2VkKTsKKwlpZiAobnVtX3VzZWQgPCBsZTE2X3RvX2NwdShkeF9sZWFmLT5kbF9saXN0LmRlX2NvdW50KSkgeworCQltbG9nKE1MX0VSUk9SLCAiRFggRGlyOiAlbGx1LCBBc2tlZCB0byByZWJhbGFuY2UgZW1wdHkgbGVhZjogIgorCQkgICAgICIlbGx1LCAlZFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktPmlwX2Jsa25vLAorCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGVhZl9ibGtubywgbnVtX3VzZWQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwlvcmlnX2R4X2xlYXZlcyA9IG9jZnMyX2R4X2Rpcl9rbWFsbG9jX2xlYXZlcyhvc2ItPnNiLCAmbnVtX2R4X2xlYXZlcyk7CisJaWYgKCFvcmlnX2R4X2xlYXZlcykgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCW5ld19keF9sZWF2ZXMgPSBvY2ZzMl9keF9kaXJfa21hbGxvY19sZWF2ZXMob3NiLT5zYiwgTlVMTCk7CisJaWYgKCFuZXdfZHhfbGVhdmVzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfbG9ja19hbGxvY2F0b3JzKGRpciwgJmV0LCAxLCAwLCAmZGF0YV9hYywgJm1ldGFfYWMpOworCWlmIChyZXQpIHsKKwkJaWYgKHJldCAhPSAtRU5PU1BDKQorCQkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwljcmVkaXRzID0gb2NmczJfZHhfZGlyX3JlYmFsYW5jZV9jcmVkaXRzKG9zYiwgZHhfcm9vdCk7CisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQloYW5kbGUgPSBOVUxMOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShkaXIsCisJCQkJICAgICAgIG9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKGRpci0+aV9zYiwgMSkpKSB7CisJCXJldCA9IC1FRFFVT1Q7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisJZGlkX3F1b3RhID0gMTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgZGlyLCBkeF9sZWFmX2JoLAorCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCS8qCisJICogVGhpcyBibG9jayBpcyBjaGFuZ2luZyBhbnl3YXksIHNvIHdlIGNhbiBzb3J0IGl0IGluIHBsYWNlLgorCSAqLworCXNvcnQoZHhfbGVhZi0+ZGxfbGlzdC5kZV9lbnRyaWVzLCBudW1fdXNlZCwKKwkgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfZHhfZW50cnkpLCBkeF9sZWFmX3NvcnRfY21wLAorCSAgICAgZHhfbGVhZl9zb3J0X3N3YXApOworCisJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGR4X2xlYWZfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJcmV0ID0gb2NmczJfZHhfZGlyX2ZpbmRfbGVhZl9zcGxpdChkeF9sZWFmLCBsZWFmX2Nwb3MsIGluc2VydF9oYXNoLAorCQkJCQkgICAmc3BsaXRfaGFzaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gIG91dF9jb21taXQ7CisJfQorCisJbWxvZygwLCAiU3BsaXQgbGVhZiAoJXUpIGF0ICV1LCBpbnNlcnQgbWFqb3IgaGFzaCBpcyAldVxuIiwKKwkgICAgIGxlYWZfY3Bvcywgc3BsaXRfaGFzaCwgaW5zZXJ0X2hhc2gpOworCisJLyoKKwkgKiBXZSBoYXZlIHRvIGNhcmVmdWxseSBvcmRlciBvcGVyYXRpb25zIGhlcmUuIFRoZXJlIGFyZSBpdGVtcworCSAqIHdoaWNoIHdhbnQgdG8gYmUgaW4gdGhlIG5ldyBjbHVzdGVyIGJlZm9yZSBpbnNlcnQsIGJ1dCBpbgorCSAqIG9yZGVyIHRvIHB1dCB0aG9zZSBpdGVtcyBpbiB0aGUgbmV3IGNsdXN0ZXIsIHdlIGFsdGVyIHRoZQorCSAqIG9sZCBjbHVzdGVyLiBBIGZhaWx1cmUgdG8gaW5zZXJ0IGdldHMgbmFzdHkuCisJICoKKwkgKiBTbywgc3RhcnQgYnkgcmVzZXJ2aW5nIHdyaXRlcyB0byB0aGUgb2xkCisJICogY2x1c3Rlci4gb2NmczJfZHhfZGlyX25ld19jbHVzdGVyIHdpbGwgcmVzZXJ2ZSB3cml0ZXMgb24KKwkgKiB0aGUgbmV3IGNsdXN0ZXIgZm9yIHVzLCBiZWZvcmUgaW5zZXJ0aW5nIGl0LiBUaGUgaW5zZXJ0CisJICogd29uJ3QgaGFwcGVuIGlmIHRoZXJlJ3MgYW4gZXJyb3IgYmVmb3JlIHRoYXQuIE9uY2UgdGhlCisJICogaW5zZXJ0IGlzIGRvbmUgdGhlbiwgd2UgY2FuIHRyYW5zZmVyIGZyb20gb25lIGxlYWYgaW50byB0aGUKKwkgKiBvdGhlciB3aXRob3V0IGZlYXIgb2YgaGl0dGluZyBhbnkgZXJyb3IuCisJICovCisKKwkvKgorCSAqIFRoZSBsZWFmIHRyYW5zZmVyIHdhbnRzIHNvbWUgc2NyYXRjaCBzcGFjZSBzbyB0aGF0IHdlIGRvbid0CisJICogd2luZCB1cCBkb2luZyBhIGJ1bmNoIG9mIGV4cGVuc2l2ZSBtZW1tb3ZlKCkuCisJICovCisJdG1wX2R4X2xlYWYgPSBrbWFsbG9jKG9zYi0+c2ItPnNfYmxvY2tzaXplLCBHRlBfTk9GUyk7CisJaWYgKCF0bXBfZHhfbGVhZikgeworCQlyZXQgPSAtRU5PTUVNOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlvcmlnX2xlYXZlc19zdGFydCA9IG9jZnMyX2Jsb2NrX3RvX2NsdXN0ZXJfc3RhcnQoZGlyLT5pX3NiLCBsZWFmX2Jsa25vKTsKKwlyZXQgPSBvY2ZzMl9yZWFkX2R4X2xlYXZlcyhkaXIsIG9yaWdfbGVhdmVzX3N0YXJ0LCBudW1fZHhfbGVhdmVzLAorCQkJCSAgIG9yaWdfZHhfbGVhdmVzKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fZHhfbGVhdmVzOyBpKyspIHsKKwkJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGwoaGFuZGxlLCBkaXIsIG9yaWdfZHhfbGVhdmVzW2ldLAorCQkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJfQorCX0KKworCWNwb3MgPSBzcGxpdF9oYXNoOworCXJldCA9IG9jZnMyX2R4X2Rpcl9uZXdfY2x1c3RlcihkaXIsICZldCwgY3BvcywgaGFuZGxlLAorCQkJCSAgICAgICBkYXRhX2FjLCBtZXRhX2FjLCBuZXdfZHhfbGVhdmVzLAorCQkJCSAgICAgICBudW1fZHhfbGVhdmVzKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKworCW9jZnMyX2R4X2Rpcl90cmFuc2Zlcl9sZWFmKGRpciwgc3BsaXRfaGFzaCwgaGFuZGxlLCB0bXBfZHhfbGVhZiwKKwkJCQkgICBvcmlnX2R4X2xlYXZlcywgbmV3X2R4X2xlYXZlcywgbnVtX2R4X2xlYXZlcyk7CisKK291dF9jb21taXQ6CisJaWYgKHJldCA8IDAgJiYgZGlkX3F1b3RhKQorCQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGRpciwKKwkJCQlvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhkaXItPmlfc2IsIDEpKTsKKworCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CisKK291dDoKKwlpZiAob3JpZ19keF9sZWF2ZXMgfHwgbmV3X2R4X2xlYXZlcykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2R4X2xlYXZlczsgaSsrKSB7CisJCQlpZiAob3JpZ19keF9sZWF2ZXMpCisJCQkJYnJlbHNlKG9yaWdfZHhfbGVhdmVzW2ldKTsKKwkJCWlmIChuZXdfZHhfbGVhdmVzKQorCQkJCWJyZWxzZShuZXdfZHhfbGVhdmVzW2ldKTsKKwkJfQorCQlrZnJlZShvcmlnX2R4X2xlYXZlcyk7CisJCWtmcmVlKG5ld19keF9sZWF2ZXMpOworCX0KKworCWlmIChtZXRhX2FjKQorCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQobWV0YV9hYyk7CisJaWYgKGRhdGFfYWMpCisJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChkYXRhX2FjKTsKKworCWtmcmVlKHRtcF9keF9sZWFmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX2ZpbmRfZGlyX3NwYWNlX2R4KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCwKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCkKK3sKKwlpbnQgcmV0LCByZWJhbGFuY2VkID0gMDsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X2xlYWZfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9keF9sZWFmICpkeF9sZWFmOworCXU2NCBibGtubzsKKwl1MzIgbGVhZl9jcG9zOworCisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKKworcmVzdGFydF9zZWFyY2g6CisJcmV0ID0gb2NmczJfZHhfZGlyX2xvb2t1cChkaXIsICZkeF9yb290LT5kcl9saXN0LCAmbG9va3VwLT5kbF9oaW5mbywKKwkJCQkgICZsZWFmX2Nwb3MsICZibGtubyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX3JlYWRfZHhfbGVhZihkaXIsIGJsa25vLCAmZHhfbGVhZl9iaCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWR4X2xlYWYgPSAoc3RydWN0IG9jZnMyX2R4X2xlYWYgKilkeF9sZWFmX2JoLT5iX2RhdGE7CisKKwlpZiAobGUxNl90b19jcHUoZHhfbGVhZi0+ZGxfbGlzdC5kZV9udW1fdXNlZCkgPj0KKwkgICAgbGUxNl90b19jcHUoZHhfbGVhZi0+ZGxfbGlzdC5kZV9jb3VudCkpIHsKKwkJaWYgKHJlYmFsYW5jZWQpIHsKKwkJCS8qCisJCQkgKiBSZWJhbGFuY2luZyBzaG91bGQgaGF2ZSBwcm92aWRlZCB1cyB3aXRoCisJCQkgKiBzcGFjZSBpbiBhbiBhcHByb3ByaWF0ZSBsZWFmLgorCQkJICoKKwkJCSAqIFhYWDogSXMgdGhpcyBhbiBhYm5vcm1hbCBjb25kaXRpb24gdGhlbj8KKwkJCSAqIFNob3VsZCB3ZSBwcmludCBhIG1lc3NhZ2UgaGVyZT8KKwkJCSAqLworCQkJcmV0ID0gLUVOT1NQQzsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gb2NmczJfZHhfZGlyX3JlYmFsYW5jZShvc2IsIGRpciwgZHhfcm9vdF9iaCwgZHhfbGVhZl9iaCwKKwkJCQkJICAgICAmbG9va3VwLT5kbF9oaW5mbywgbGVhZl9jcG9zLAorCQkJCQkgICAgIGJsa25vKTsKKwkJaWYgKHJldCkgeworCQkJaWYgKHJldCAhPSAtRU5PU1BDKQorCQkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyoKKwkJICogUmVzdGFydCB0aGUgbG9va3VwLiBUaGUgcmViYWxhbmNlIG1pZ2h0IGhhdmUKKwkJICogY2hhbmdlZCB3aGljaCBibG9jayBvdXIgaXRlbSBmaXRzIGludG8uIE1hcmsgb3VyCisJCSAqIHByb2dyZXNzLCBzbyB3ZSBvbmx5IGV4ZWN1dGUgdGhpcyBvbmNlLgorCQkgKi8KKwkJYnJlbHNlKGR4X2xlYWZfYmgpOworCQlkeF9sZWFmX2JoID0gTlVMTDsKKwkJcmViYWxhbmNlZCA9IDE7CisJCWdvdG8gcmVzdGFydF9zZWFyY2g7CisJfQorCisJbG9va3VwLT5kbF9keF9sZWFmX2JoID0gZHhfbGVhZl9iaDsKKwlkeF9sZWFmX2JoID0gTlVMTDsKKworb3V0OgorCWJyZWxzZShkeF9sZWFmX2JoKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3NlYXJjaF9keF9mcmVlX2xpc3Qoc3RydWN0IGlub2RlICpkaXIsCisJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmgsCisJCQkJICAgICBpbnQgbmFtZWxlbiwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQoreworCWludCByZXQgPSAtRU5PU1BDOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbGVhZl9iaCA9IE5VTEwsICpwcmV2X2xlYWZfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaXJfYmxvY2tfdHJhaWxlciAqZGI7CisJdTY0IG5leHRfYmxvY2s7CisJaW50IHJlY19sZW4gPSBPQ0ZTMl9ESVJfUkVDX0xFTihuYW1lbGVuKTsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKilkeF9yb290X2JoLT5iX2RhdGE7CisJbmV4dF9ibG9jayA9IGxlNjRfdG9fY3B1KGR4X3Jvb3QtPmRyX2ZyZWVfYmxrKTsKKworCXdoaWxlIChuZXh0X2Jsb2NrKSB7CisJCWJyZWxzZShwcmV2X2xlYWZfYmgpOworCQlwcmV2X2xlYWZfYmggPSBsZWFmX2JoOworCQlsZWFmX2JoID0gTlVMTDsKKworCQlyZXQgPSBvY2ZzMl9yZWFkX2Rpcl9ibG9ja19kaXJlY3QoZGlyLCBuZXh0X2Jsb2NrLCAmbGVhZl9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZGIgPSBvY2ZzMl90cmFpbGVyX2Zyb21fYmgobGVhZl9iaCwgZGlyLT5pX3NiKTsKKwkJaWYgKHJlY19sZW4gPD0gbGUxNl90b19jcHUoZGItPmRiX2ZyZWVfcmVjX2xlbikpIHsKKwkJCWxvb2t1cC0+ZGxfbGVhZl9iaCA9IGxlYWZfYmg7CisJCQlsb29rdXAtPmRsX3ByZXZfbGVhZl9iaCA9IHByZXZfbGVhZl9iaDsKKwkJCWxlYWZfYmggPSBOVUxMOworCQkJcHJldl9sZWFmX2JoID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJbmV4dF9ibG9jayA9IGxlNjRfdG9fY3B1KGRiLT5kYl9mcmVlX25leHQpOworCX0KKworCWlmICghbmV4dF9ibG9jaykKKwkJcmV0ID0gLUVOT1NQQzsKKworb3V0OgorCisJYnJlbHNlKGxlYWZfYmgpOworCWJyZWxzZShwcmV2X2xlYWZfYmgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfZXhwYW5kX2lubGluZV9keF9yb290KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmgpCit7CisJaW50IHJldCwgbnVtX2R4X2xlYXZlcywgaSwgaiwgZGlkX3F1b3RhID0gMDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkeF9sZWF2ZXMgPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKwl1NjQgaW5zZXJ0X2Jsa25vOworCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CisJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgKmVudHJ5X2xpc3Q7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5ICpkeF9lbnRyeTsKKwlzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqdGFyZ2V0X2xlYWY7CisKKwlyZXQgPSBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzKG9zYiwgMSwgJmRhdGFfYWMpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlkeF9sZWF2ZXMgPSBvY2ZzMl9keF9kaXJfa21hbGxvY19sZWF2ZXMob3NiLT5zYiwgJm51bV9keF9sZWF2ZXMpOworCWlmICghZHhfbGVhdmVzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9jYWxjX2R4aV9leHBhbmRfY3JlZGl0cyhvc2ItPnNiKSk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoZGlyLAorCQkJCSAgICAgICBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhvc2ItPnNiLCAxKSkpIHsKKwkJcmV0ID0gLUVEUVVPVDsKKwkJZ290byBvdXRfY29tbWl0OworCX0KKwlkaWRfcXVvdGEgPSAxOworCisJLyoKKwkgKiBXZSBkbyB0aGlzIHVwIGZyb250LCBiZWZvcmUgdGhlIGFsbG9jYXRpb24sIHNvIHRoYXQgYQorCSAqIGZhaWx1cmUgdG8gYWRkIHRoZSBkeF9yb290X2JoIHRvIHRoZSBqb3VybmFsIHdvbid0IHJlc3VsdAorCSAqIHVzIGxvc2luZyBjbHVzdGVycy4KKwkgKi8KKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGUsIGRpciwgZHhfcm9vdF9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwlyZXQgPSBfX29jZnMyX2R4X2Rpcl9uZXdfY2x1c3RlcihkaXIsIDAsIGhhbmRsZSwgZGF0YV9hYywgZHhfbGVhdmVzLAorCQkJCQkgbnVtX2R4X2xlYXZlcywgJmluc2VydF9ibGtubyk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X2NvbW1pdDsKKwl9CisKKwkvKgorCSAqIFRyYW5zZmVyIHRoZSBlbnRyaWVzIGZyb20gb3VyIGR4X3Jvb3QgaW50byB0aGUgYXBwcm9wcmlhdGUKKwkgKiBibG9jaworCSAqLworCWR4X3Jvb3QgPSAoc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKikgZHhfcm9vdF9iaC0+Yl9kYXRhOworCWVudHJ5X2xpc3QgPSAmZHhfcm9vdC0+ZHJfZW50cmllczsKKworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShlbnRyeV9saXN0LT5kZV9udW1fdXNlZCk7IGkrKykgeworCQlkeF9lbnRyeSA9ICZlbnRyeV9saXN0LT5kZV9lbnRyaWVzW2ldOworCisJCWogPSBfX29jZnMyX2R4X2Rpcl9oYXNoX2lkeChvc2IsCisJCQkJCSAgICBsZTMyX3RvX2NwdShkeF9lbnRyeS0+ZHhfbWlub3JfaGFzaCkpOworCQl0YXJnZXRfbGVhZiA9IChzdHJ1Y3Qgb2NmczJfZHhfbGVhZiAqKWR4X2xlYXZlc1tqXS0+Yl9kYXRhOworCisJCW9jZnMyX2R4X2Rpcl9sZWFmX2luc2VydF90YWlsKHRhcmdldF9sZWFmLCBkeF9lbnRyeSk7CisKKwkJLyogRWFjaCBsZWFmIGhhcyBiZWVuIHBhc3NlZCB0byB0aGUgam91cm5hbCBhbHJlYWR5CisJCSAqIHZpYSBfX29jZnMyX2R4X2Rpcl9uZXdfY2x1c3RlcigpICovCisJfQorCisJZHhfcm9vdC0+ZHJfZmxhZ3MgJj0gfk9DRlMyX0RYX0ZMQUdfSU5MSU5FOworCW1lbXNldCgmZHhfcm9vdC0+ZHJfbGlzdCwgMCwgb3NiLT5zYi0+c19ibG9ja3NpemUgLQorCSAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jaywgZHJfbGlzdCkpOworCWR4X3Jvb3QtPmRyX2xpc3QubF9jb3VudCA9CisJCWNwdV90b19sZTE2KG9jZnMyX2V4dGVudF9yZWNzX3Blcl9keF9yb290KG9zYi0+c2IpKTsKKworCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGZhaWwgY29uc2lkZXJpbmcgd2Ugc3RhcnQgd2l0aCBhbiBlbXB0eQorCSAqIGR4X3Jvb3QuICovCisJb2NmczJfaW5pdF9keF9yb290X2V4dGVudF90cmVlKCZldCwgZGlyLCBkeF9yb290X2JoKTsKKwlyZXQgPSBvY2ZzMl9pbnNlcnRfZXh0ZW50KG9zYiwgaGFuZGxlLCBkaXIsICZldCwgMCwKKwkJCQkgIGluc2VydF9ibGtubywgMSwgMCwgTlVMTCk7CisJaWYgKHJldCkKKwkJbWxvZ19lcnJubyhyZXQpOworCWRpZF9xdW90YSA9IDA7CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZHhfcm9vdF9iaCk7CisKK291dF9jb21taXQ6CisJaWYgKHJldCA8IDAgJiYgZGlkX3F1b3RhKQorCQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGRpciwKKwkJCQkJICBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhkaXItPmlfc2IsIDEpKTsKKworCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CisKK291dDoKKwlpZiAoZGF0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KGRhdGFfYWMpOworCisJaWYgKGR4X2xlYXZlcykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2R4X2xlYXZlczsgaSsrKQorCQkJYnJlbHNlKGR4X2xlYXZlc1tpXSk7CisJCWtmcmVlKGR4X2xlYXZlcyk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfaW5saW5lX2R4X2hhc19zcGFjZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X3Jvb3RfYmgpCit7CisJc3RydWN0IG9jZnMyX2R4X3Jvb3RfYmxvY2sgKmR4X3Jvb3Q7CisJc3RydWN0IG9jZnMyX2R4X2VudHJ5X2xpc3QgKmVudHJ5X2xpc3Q7CisKKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopIGR4X3Jvb3RfYmgtPmJfZGF0YTsKKwllbnRyeV9saXN0ID0gJmR4X3Jvb3QtPmRyX2VudHJpZXM7CisKKwlpZiAobGUxNl90b19jcHUoZW50cnlfbGlzdC0+ZGVfbnVtX3VzZWQpID49CisJICAgIGxlMTZfdG9fY3B1KGVudHJ5X2xpc3QtPmRlX2NvdW50KSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvY2ZzMl9wcmVwYXJlX2R4X2Rpcl9mb3JfaW5zZXJ0KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAorCQkJCQkgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgICBpbnQgbmFtZWxlbiwKKwkJCQkJICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCit7CisJaW50IHJldCwgZnJlZV9keF9yb290ID0gMTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxlYWZfYmggPSBOVUxMOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC0+Yl9kYXRhOworCXN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICpkeF9yb290OworCisJcmV0ID0gb2NmczJfcmVhZF9keF9yb290KGRpciwgZGksICZkeF9yb290X2JoKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKKwlpZiAobGUzMl90b19jcHUoZHhfcm9vdC0+ZHJfbnVtX2VudHJpZXMpID09IE9DRlMyX0RYX0VOVFJJRVNfTUFYKSB7CisJCXJldCA9IC1FTk9TUEM7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG9jZnMyX2R4X3Jvb3RfaW5saW5lKGR4X3Jvb3QpKSB7CisJCXJldCA9IG9jZnMyX2lubGluZV9keF9oYXNfc3BhY2UoZHhfcm9vdF9iaCk7CisKKwkJaWYgKHJldCA9PSAwKQorCQkJZ290byBzZWFyY2hfZWw7CisKKwkJLyoKKwkJICogV2UgcmFuIG91dCBvZiByb29tIGluIHRoZSByb290IGJsb2NrLiBFeHBhbmQgaXQgdG8KKwkJICogYW4gZXh0ZW50LCB0aGVuIGFsbG93IG9jZnMyX2ZpbmRfZGlyX3NwYWNlX2R4IHRvIGRvCisJCSAqIHRoZSByZXN0LgorCQkgKi8KKwkJcmV0ID0gb2NmczJfZXhwYW5kX2lubGluZV9keF9yb290KGRpciwgZHhfcm9vdF9iaCk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyoKKwkgKiBJbnNlcnQgcHJlcGFyYXRpb24gZm9yIGFuIGluZGV4ZWQgZGlyZWN0b3J5IGlzIHNwbGl0IGludG8gdHdvCisJICogc3RlcHMuIFRoZSBjYWxsIHRvIGZpbmRfZGlyX3NwYWNlX2R4IHJlc2VydmVzIHJvb20gaW4gdGhlIGluZGV4IGZvcgorCSAqIGFuIGFkZGl0aW9uYWwgaXRlbS4gSWYgd2UgcnVuIG91dCBvZiBzcGFjZSB0aGVyZSwgaXQncyBhIHJlYWwgZXJyb3IKKwkgKiB3ZSBjYW4ndCBjb250aW51ZSBvbi4KKwkgKi8KKwlyZXQgPSBvY2ZzMl9maW5kX2Rpcl9zcGFjZV9keChvc2IsIGRpciwgZGlfYmgsIGR4X3Jvb3RfYmgsIG5hbWUsCisJCQkJICAgICAgbmFtZWxlbiwgbG9va3VwKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitzZWFyY2hfZWw6CisJLyoKKwkgKiBOZXh0LCB3ZSBuZWVkIHRvIGZpbmQgc3BhY2UgaW4gdGhlIHVuaW5kZXhlZCB0cmVlLiBUaGlzIGNhbGwKKwkgKiBzZWFyY2hlcyB1c2luZyB0aGUgZnJlZSBzcGFjZSBsaW5rZWQgbGlzdC4gSWYgdGhlIHVuaW5kZXhlZCB0cmVlCisJICogbGFja3Mgc3VmZmljaWVudCBzcGFjZSwgd2UnbGwgZXhwYW5kIGl0IGJlbG93LiBUaGUgZXhwYW5zaW9uIGNvZGUKKwkgKiBpcyBzbWFydCBlbm91Z2ggdG8gYWRkIGFueSBuZXcgYmxvY2tzIHRvIHRoZSBmcmVlIHNwYWNlIGxpc3QuCisJICovCisJcmV0ID0gb2NmczJfc2VhcmNoX2R4X2ZyZWVfbGlzdChkaXIsIGR4X3Jvb3RfYmgsIG5hbWVsZW4sIGxvb2t1cCk7CisJaWYgKHJldCAmJiByZXQgIT0gLUVOT1NQQykgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIERvIHRoaXMgdXAgaGVyZSAtIG9jZnMyX2V4dGVuZF9kaXIgbWlnaHQgbmVlZCB0aGUgZHhfcm9vdCAqLworCWxvb2t1cC0+ZGxfZHhfcm9vdF9iaCA9IGR4X3Jvb3RfYmg7CisJZnJlZV9keF9yb290ID0gMDsKKworCWlmIChyZXQgPT0gLUVOT1NQQykgeworCQlyZXQgPSBvY2ZzMl9leHRlbmRfZGlyKG9zYiwgZGlyLCBkaV9iaCwgMSwgbG9va3VwLCAmbGVhZl9iaCk7CisKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQkvKgorCQkgKiBXZSBtYWtlIHRoZSBhc3N1bXB0aW9uIGhlcmUgdGhhdCBuZXcgbGVhZiBibG9ja3MgYXJlIGFkZGVkCisJCSAqIHRvIHRoZSBmcm9udCBvZiBvdXIgZnJlZSBsaXN0LgorCQkgKi8KKwkJbG9va3VwLT5kbF9wcmV2X2xlYWZfYmggPSBOVUxMOworCQlsb29rdXAtPmRsX2xlYWZfYmggPSBsZWFmX2JoOworCX0KKworb3V0OgorCWlmIChmcmVlX2R4X3Jvb3QpCisJCWJyZWxzZShkeF9yb290X2JoKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogR2V0IGEgZGlyZWN0b3J5IHJlYWR5IGZvciBpbnNlcnQuIEFueSBkaXJlY3RvcnkgYWxsb2NhdGlvbiByZXF1aXJlZAorICogaGFwcGVucyBoZXJlLiBTdWNjZXNzIHJldHVybnMgemVybywgYW5kIGVub3VnaCBjb250ZXh0IGluIHRoZSBkaXIKKyAqIGxvb2t1cCByZXN1bHQgdGhhdCBvY2ZzMl9hZGRfZW50cnkoKSB3aWxsIGJlIGFibGUgY29tcGxldGUgdGhlIHRhc2sKKyAqIHdpdGggbWluaW1hbCBwZXJmb3JtYW5jZSBpbXBhY3QuCisgKi8KIGludCBvY2ZzMl9wcmVwYXJlX2Rpcl9mb3JfaW5zZXJ0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmgsCiAJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJIGludCBuYW1lbGVuLAotCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZXRfZGVfYmgpCisJCQkJIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQogewogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IGJsb2Nrc193YW50ZWQgPSAxOwpAQCAtMTk4NCwxNCArNDM2NywzNCBAQAogCW1sb2coMCwgImdldHRpbmcgcmVhZHkgdG8gaW5zZXJ0IG5hbWVsZW4gJWQgaW50byBkaXIgJWxsdVxuIiwKIAkgICAgIG5hbWVsZW4sICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLT5pcF9ibGtubyk7CiAKLQkqcmV0X2RlX2JoID0gTlVMTDsKLQogCWlmICghbmFtZWxlbikgewogCQlyZXQgPSAtRUlOVkFMOwogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAorCS8qCisJICogRG8gdGhpcyB1cCBmcm9udCB0byByZWR1Y2UgY29uZnVzaW9uLgorCSAqCisJICogVGhlIGRpcmVjdG9yeSBtaWdodCBzdGFydCBpbmxpbmUsIHRoZW4gYmUgdHVybmVkIGludG8gYW4KKwkgKiBpbmRleGVkIG9uZSwgaW4gd2hpY2ggY2FzZSB3ZSdkIG5lZWQgdG8gaGFzaCBkZWVwIGluc2lkZQorCSAqIG9jZnMyX2ZpbmRfZGlyX3NwYWNlX2lkKCkuIFNpbmNlCisJICogb2NmczJfcHJlcGFyZV9keF9kaXJfZm9yX2luc2VydCgpIGFsc28gbmVlZHMgdGhpcyBoYXNoCisJICogZG9uZSwgdGhlcmUgc2VlbXMgbm8gcG9pbnQgaW4gc3ByZWFkaW5nIG91dCB0aGUgY2FsbHMuIFdlCisJICogY2FuIG9wdGltaXplIGF3YXkgdGhlIGNhc2Ugd2hlcmUgdGhlIGZpbGUgc3lzdGVtIGRvZXNuJ3QKKwkgKiBzdXBwb3J0IGluZGV4aW5nLgorCSAqLworCWlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSkKKwkJb2NmczJfZHhfZGlyX25hbWVfaGFzaChkaXIsIG5hbWUsIG5hbWVsZW4sICZsb29rdXAtPmRsX2hpbmZvKTsKKworCWlmIChvY2ZzMl9kaXJfaW5kZXhlZChkaXIpKSB7CisJCXJldCA9IG9jZnMyX3ByZXBhcmVfZHhfZGlyX2Zvcl9pbnNlcnQoZGlyLCBwYXJlbnRfZmVfYmgsCisJCQkJCQkgICAgICBuYW1lLCBuYW1lbGVuLCBsb29rdXApOworCQlpZiAocmV0KQorCQkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAoT0NGUzJfSShkaXIpLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfREFUQV9GTCkgewogCQlyZXQgPSBvY2ZzMl9maW5kX2Rpcl9zcGFjZV9pZChkaXIsIHBhcmVudF9mZV9iaCwgbmFtZSwKIAkJCQkJICAgICAgbmFtZWxlbiwgJmJoLCAmYmxvY2tzX3dhbnRlZCk7CkBAIC0yMDEwLDcgKzQ0MTMsNyBAQAogCQlCVUdfT04oYmgpOwogCiAJCXJldCA9IG9jZnMyX2V4dGVuZF9kaXIob3NiLCBkaXIsIHBhcmVudF9mZV9iaCwgYmxvY2tzX3dhbnRlZCwKLQkJCQkgICAgICAgJmJoKTsKKwkJCQkgICAgICAgbG9va3VwLCAmYmgpOwogCQlpZiAocmV0KSB7CiAJCQlpZiAocmV0ICE9IC1FTk9TUEMpCiAJCQkJbWxvZ19lcnJubyhyZXQpOwpAQCAtMjAyMCw5ICs0NDIzLDE1NCBAQAogCQlCVUdfT04oIWJoKTsKIAl9CiAKLQkqcmV0X2RlX2JoID0gYmg7CisJbG9va3VwLT5kbF9sZWFmX2JoID0gYmg7CiAJYmggPSBOVUxMOwogb3V0OgogCWJyZWxzZShiaCk7CiAJcmV0dXJuIHJldDsKIH0KKworc3RhdGljIGludCBvY2ZzMl9keF9kaXJfcmVtb3ZlX2luZGV4KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCwKKwkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZHhfcm9vdF9iaCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLT5pX3NiKTsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3QgaW5vZGUgKmR4X2FsbG9jX2lub2RlID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmR4X2FsbG9jX2JoID0gTlVMTDsKKwloYW5kbGVfdCAqaGFuZGxlOworCXU2NCBibGs7CisJdTE2IGJpdDsKKwl1NjQgYmdfYmxrbm87CisKKwlkeF9yb290ID0gKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrICopIGR4X3Jvb3RfYmgtPmJfZGF0YTsKKworCWR4X2FsbG9jX2lub2RlID0gb2NmczJfZ2V0X3N5c3RlbV9maWxlX2lub2RlKG9zYiwKKwkJCQkJRVhURU5UX0FMTE9DX1NZU1RFTV9JTk9ERSwKKwkJCQkJbGUxNl90b19jcHUoZHhfcm9vdC0+ZHJfc3ViYWxsb2Nfc2xvdCkpOworCWlmICghZHhfYWxsb2NfaW5vZGUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJbXV0ZXhfbG9jaygmZHhfYWxsb2NfaW5vZGUtPmlfbXV0ZXgpOworCisJcmV0ID0gb2NmczJfaW5vZGVfbG9jayhkeF9hbGxvY19pbm9kZSwgJmR4X2FsbG9jX2JoLCAxKTsKKwlpZiAocmV0KSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfbXV0ZXg7CisJfQorCisJaGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBPQ0ZTMl9EWF9ST09UX1JFTU9WRV9DUkVESVRTKTsKKwlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaShoYW5kbGUsIGRpciwgZGlfYmgsCisJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CisJfQorCisJT0NGUzJfSShkaXIpLT5pcF9keW5fZmVhdHVyZXMgJj0gfk9DRlMyX0lOREVYRURfRElSX0ZMOworCWRpLT5pX2R5bl9mZWF0dXJlcyA9IGNwdV90b19sZTE2KE9DRlMyX0koZGlyKS0+aXBfZHluX2ZlYXR1cmVzKTsKKwlkaS0+aV9keF9yb290ID0gY3B1X3RvX2xlNjQoMFVMTCk7CisKKwlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgZGlfYmgpOworCisJYmxrID0gbGU2NF90b19jcHUoZHhfcm9vdC0+ZHJfYmxrbm8pOworCWJpdCA9IGxlMTZfdG9fY3B1KGR4X3Jvb3QtPmRyX3N1YmFsbG9jX2JpdCk7CisJYmdfYmxrbm8gPSBvY2ZzMl93aGljaF9zdWJhbGxvY19ncm91cChibGssIGJpdCk7CisJcmV0ID0gb2NmczJfZnJlZV9zdWJhbGxvY19iaXRzKGhhbmRsZSwgZHhfYWxsb2NfaW5vZGUsIGR4X2FsbG9jX2JoLAorCQkJCSAgICAgICBiaXQsIGJnX2Jsa25vLCAxKTsKKwlpZiAocmV0KQorCQltbG9nX2Vycm5vKHJldCk7CisKK291dF9jb21taXQ6CisJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKKworb3V0X3VubG9jazoKKwlvY2ZzMl9pbm9kZV91bmxvY2soZHhfYWxsb2NfaW5vZGUsIDEpOworCitvdXRfbXV0ZXg6CisJbXV0ZXhfdW5sb2NrKCZkeF9hbGxvY19pbm9kZS0+aV9tdXRleCk7CisJYnJlbHNlKGR4X2FsbG9jX2JoKTsKK291dDoKKwlpcHV0KGR4X2FsbG9jX2lub2RlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgb2NmczJfZHhfZGlyX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQoreworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHVuaW5pdGlhbGl6ZWRfdmFyKGNsZW4pOworCXUzMiBtYWpvcl9oYXNoID0gVUlOVF9NQVgsIHBfY3BvcywgdW5pbml0aWFsaXplZF92YXIoY3Bvcyk7CisJdTY0IHVuaW5pdGlhbGl6ZWRfdmFyKGJsa25vKTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqZHhfcm9vdDsKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCBkZWFsbG9jOworCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKKworCW9jZnMyX2luaXRfZGVhbGxvY19jdHh0KCZkZWFsbG9jKTsKKworCWlmICghb2NmczJfZGlyX2luZGV4ZWQoZGlyKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBvY2ZzMl9yZWFkX2R4X3Jvb3QoZGlyLCBkaSwgJmR4X3Jvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKKworCWlmIChvY2ZzMl9keF9yb290X2lubGluZShkeF9yb290KSkKKwkJZ290byByZW1vdmVfaW5kZXg7CisKKwlvY2ZzMl9pbml0X2R4X3Jvb3RfZXh0ZW50X3RyZWUoJmV0LCBkaXIsIGR4X3Jvb3RfYmgpOworCisJLyogWFhYOiBXaGF0IGlmIGRyX2NsdXN0ZXJzIGlzIHRvbyBsYXJnZT8gKi8KKwl3aGlsZSAobGUzMl90b19jcHUoZHhfcm9vdC0+ZHJfY2x1c3RlcnMpKSB7CisJCXJldCA9IG9jZnMyX2R4X2Rpcl9sb29rdXBfcmVjKGRpciwgJmR4X3Jvb3QtPmRyX2xpc3QsCisJCQkJCSAgICAgIG1ham9yX2hhc2gsICZjcG9zLCAmYmxrbm8sICZjbGVuKTsKKwkJaWYgKHJldCkgeworCQkJbWxvZ19lcnJubyhyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlwX2Nwb3MgPSBvY2ZzMl9ibG9ja3NfdG9fY2x1c3RlcnMoZGlyLT5pX3NiLCBibGtubyk7CisKKwkJcmV0ID0gb2NmczJfcmVtb3ZlX2J0cmVlX3JhbmdlKGRpciwgJmV0LCBjcG9zLCBwX2Nwb3MsIGNsZW4sCisJCQkJCSAgICAgICAmZGVhbGxvYyk7CisJCWlmIChyZXQpIHsKKwkJCW1sb2dfZXJybm8ocmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGNwb3MgPT0gMCkKKwkJCWJyZWFrOworCisJCW1ham9yX2hhc2ggPSBjcG9zIC0gMTsKKwl9CisKK3JlbW92ZV9pbmRleDoKKwlyZXQgPSBvY2ZzMl9keF9kaXJfcmVtb3ZlX2luZGV4KGRpciwgZGlfYmgsIGR4X3Jvb3RfYmgpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShkaXIsIGR4X3Jvb3RfYmgpOworb3V0OgorCW9jZnMyX3NjaGVkdWxlX3RydW5jYXRlX2xvZ19mbHVzaChvc2IsIDEpOworCW9jZnMyX3J1bl9kZWFsbG9jcyhvc2IsICZkZWFsbG9jKTsKKworCWJyZWxzZShkeF9yb290X2JoKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGlyLmggYi9mcy9vY2ZzMi9kaXIuaAppbmRleCBjNTExZTJlLi5lNjgzZjNkIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kaXIuaAorKysgYi9mcy9vY2ZzMi9kaXIuaApAQCAtMjYsNDQgKzI2LDcwIEBACiAjaWZuZGVmIE9DRlMyX0RJUl9ICiAjZGVmaW5lIE9DRlMyX0RJUl9ICiAKLXN0cnVjdCBidWZmZXJfaGVhZCAqb2NmczJfZmluZF9lbnRyeShjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICAgaW50IG5hbWVsZW4sCi0JCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkgICAgIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKipyZXNfZGlyKTsKK3N0cnVjdCBvY2ZzMl9keF9oaW5mbyB7CisJdTMyCW1ham9yX2hhc2g7CisJdTMyCW1pbm9yX2hhc2g7Cit9OworCitzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgeworCXN0cnVjdCBidWZmZXJfaGVhZAkJKmRsX2xlYWZfYmg7CS8qIFVuaW5kZXhlZCBsZWFmCisJCQkJCQkJICogYmxvY2sgKi8KKwlzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5CQkqZGxfZW50cnk7CS8qIFRhcmdldCBkaXJlbnQgaW4KKwkJCQkJCQkgKiB1bmluZGV4ZWQgbGVhZiAqLworCisJc3RydWN0IGJ1ZmZlcl9oZWFkCQkqZGxfZHhfcm9vdF9iaDsJLyogUm9vdCBvZiBpbmRleGVkCisJCQkJCQkJICogdHJlZSAqLworCisJc3RydWN0IGJ1ZmZlcl9oZWFkCQkqZGxfZHhfbGVhZl9iaDsJLyogSW5kZXhlZCBsZWFmIGJsb2NrICovCisJc3RydWN0IG9jZnMyX2R4X2VudHJ5CQkqZGxfZHhfZW50cnk7CS8qIFRhcmdldCBkeF9lbnRyeSBpbgorCQkJCQkJCSAqIGluZGV4ZWQgbGVhZiAqLworCXN0cnVjdCBvY2ZzMl9keF9oaW5mbwkJZGxfaGluZm87CS8qIE5hbWUgaGFzaCByZXN1bHRzICovCisKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQJCSpkbF9wcmV2X2xlYWZfYmg7LyogUHJldmlvdXMgZW50cnkgaW4KKwkJCQkJCQkgICogZGlyIGZyZWUgc3BhY2UKKwkJCQkJCQkgICogbGlzdC4gTlVMTCBpZgorCQkJCQkJCSAgKiBwcmV2aW91cyBlbnRyeSBpcworCQkJCQkJCSAgKiBkeCByb290IGJsb2NrLiAqLworfTsKKwordm9pZCBvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqcmVzKTsKKworaW50IG9jZnMyX2ZpbmRfZW50cnkoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCSAgICAgc3RydWN0IGlub2RlICpkaXIsCisJCSAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApOwogaW50IG9jZnMyX2RlbGV0ZV9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLAogCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICpkZV9kZWwsCi0JCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKKwkJICAgICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqcmVzKTsKIGludCBfX29jZnMyX2FkZF9lbnRyeShoYW5kbGVfdCAqaGFuZGxlLAogCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCiAJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBibGtubywKIAkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmgsCi0JCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqaW5zZXJ0X2JoKTsKKwkJICAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApOwogc3RhdGljIGlubGluZSBpbnQgb2NmczJfYWRkX2VudHJ5KGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYmxrbm8sCiAJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCwKLQkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqaW5zZXJ0X2JoKQorCQkJCSAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXApCiB7CiAJcmV0dXJuIF9fb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZSwKIAkJCQkgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuLAotCQkJCSBpbm9kZSwgYmxrbm8sIHBhcmVudF9mZV9iaCwgaW5zZXJ0X2JoKTsKKwkJCQkgaW5vZGUsIGJsa25vLCBwYXJlbnRfZmVfYmgsIGxvb2t1cCk7CiB9CiBpbnQgb2NmczJfdXBkYXRlX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBoYW5kbGVfdCAqaGFuZGxlLAotCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkZV9iaCwgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGUsCisJCSAgICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKnJlcywKIAkJICAgICAgIHN0cnVjdCBpbm9kZSAqbmV3X2VudHJ5X2lub2RlKTsKIAogaW50IG9jZnMyX2NoZWNrX2Rpcl9mb3JfZW50cnkoc3RydWN0IGlub2RlICpkaXIsCiAJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICAgaW50IG5hbWVsZW4pOwogaW50IG9jZnMyX2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKwogaW50IG9jZnMyX2ZpbmRfZmlsZXNfb25fZGlzayhjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICBpbnQgbmFtZWxlbiwKIAkJCSAgICAgdTY0ICpibGtubywKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqZGlyZW50X2JoLAotCQkJICAgICBzdHJ1Y3Qgb2NmczJfZGlyX2VudHJ5ICoqZGlyZW50KTsKKwkJCSAgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpyZXMpOwogaW50IG9jZnMyX2xvb2t1cF9pbm9fZnJvbV9uYW1lKHN0cnVjdCBpbm9kZSAqZGlyLCBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICAgIGludCBuYW1lbGVuLCB1NjQgKmJsa25vKTsKIGludCBvY2ZzMl9yZWFkZGlyKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKTsKQEAgLTc0LDE0ICsxMDAsMTcgQEAKIAkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmgsCiAJCQkJIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJIGludCBuYW1lbGVuLAotCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipyZXRfZGVfYmgpOworCQkJCSBzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgKmxvb2t1cCk7CiBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dDsKIGludCBvY2ZzMl9maWxsX25ld19kaXIoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCSAgICAgICBoYW5kbGVfdCAqaGFuZGxlLAogCQkgICAgICAgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCwKLQkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKTsKKwkJICAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAorCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMpOworCitpbnQgb2NmczJfZHhfZGlyX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKTsKIAogc3RydWN0IG9jZnMyX2Rpcl9ibG9ja190cmFpbGVyICpvY2ZzMl9kaXJfdHJhaWxlcl9mcm9tX3NpemUoaW50IGJsb2Nrc2l6ZSwKIAkJCQkJCQkgICAgdm9pZCAqZGF0YSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtY29tbW9uLmggYi9mcy9vY2ZzMi9kbG0vZGxtY29tbW9uLmgKaW5kZXggYmI1MzcxNC4uMDEwMmJlMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWNvbW1vbi5oCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1jb21tb24uaApAQCAtNTIsMTYgKzUyLDEyIEBACiBlbnVtIGRsbV9tbGVfdHlwZSB7CiAJRExNX01MRV9CTE9DSywKIAlETE1fTUxFX01BU1RFUiwKLQlETE1fTUxFX01JR1JBVElPTgotfTsKLQotc3RydWN0IGRsbV9sb2NrX25hbWUgewotCXU4IGxlbjsKLQl1OCBuYW1lW0RMTV9MT0NLSURfTkFNRV9NQVhdOworCURMTV9NTEVfTUlHUkFUSU9OLAorCURMTV9NTEVfTlVNX1RZUEVTCiB9OwogCiBzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGhsaXN0X25vZGUgbWFzdGVyX2hhc2hfbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhiX2V2ZW50czsKIAlzdHJ1Y3QgZGxtX2N0eHQgKmRsbTsKIAlzcGlubG9ja190IHNwaW5sb2NrOwpAQCAtNzgsMTAgKzc0LDEwIEBACiAJZW51bSBkbG1fbWxlX3R5cGUgdHlwZTsKIAlzdHJ1Y3QgbzJoYl9jYWxsYmFja19mdW5jIG1sZV9oYl91cDsKIAlzdHJ1Y3QgbzJoYl9jYWxsYmFja19mdW5jIG1sZV9oYl9kb3duOwotCXVuaW9uIHsKLQkJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXM7Ci0JCXN0cnVjdCBkbG1fbG9ja19uYW1lIG5hbWU7Ci0JfSB1OworCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqbWxlcmVzOworCXVuc2lnbmVkIGNoYXIgbW5hbWVbRExNX0xPQ0tJRF9OQU1FX01BWF07CisJdW5zaWduZWQgaW50IG1uYW1lbGVuOworCXVuc2lnbmVkIGludCBtbmFtZWhhc2g7CiB9OwogCiBlbnVtIGRsbV9hc3RfdHlwZSB7CkBAIC0xNTEsMTMgKzE0NywxNCBAQAogCXVuc2lnbmVkIGxvbmcgcmVjb3ZlcnlfbWFwW0JJVFNfVE9fTE9OR1MoTzJOTV9NQVhfTk9ERVMpXTsKIAlzdHJ1Y3QgZGxtX3JlY292ZXJ5X2N0eHQgcmVjbzsKIAlzcGlubG9ja190IG1hc3Rlcl9sb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgbWFzdGVyX2xpc3Q7CisJc3RydWN0IGhsaXN0X2hlYWQgKiptYXN0ZXJfaGFzaDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1sZV9oYl9ldmVudHM7CiAKIAkvKiB0aGVzZSBnaXZlIGEgcmVhbGx5IHZhZ3VlIGlkZWEgb2YgdGhlIHN5c3RlbSBsb2FkICovCi0JYXRvbWljX3QgbG9jYWxfcmVzb3VyY2VzOwotCWF0b21pY190IHJlbW90ZV9yZXNvdXJjZXM7Ci0JYXRvbWljX3QgdW5rbm93bl9yZXNvdXJjZXM7CisJYXRvbWljX3QgbWxlX3RvdF9jb3VudFtETE1fTUxFX05VTV9UWVBFU107CisJYXRvbWljX3QgbWxlX2N1cl9jb3VudFtETE1fTUxFX05VTV9UWVBFU107CisJYXRvbWljX3QgcmVzX3RvdF9jb3VudDsKKwlhdG9taWNfdCByZXNfY3VyX2NvdW50OwogCiAJc3RydWN0IGRsbV9kZWJ1Z19jdHh0ICpkbG1fZGVidWdfY3R4dDsKIAlzdHJ1Y3QgZGVudHJ5ICpkbG1fZGVidWdmc19zdWJyb290OwpAQCAtMTk1LDYgKzE5MiwxMyBAQAogCXJldHVybiBkbG0tPmxvY2tyZXNfaGFzaFsoaSAvIERMTV9CVUNLRVRTX1BFUl9QQUdFKSAlIERMTV9IQVNIX1BBR0VTXSArIChpICUgRExNX0JVQ0tFVFNfUEVSX1BBR0UpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBobGlzdF9oZWFkICpkbG1fbWFzdGVyX2hhc2goc3RydWN0IGRsbV9jdHh0ICpkbG0sCisJCQkJCQkgdW5zaWduZWQgaSkKK3sKKwlyZXR1cm4gZGxtLT5tYXN0ZXJfaGFzaFsoaSAvIERMTV9CVUNLRVRTX1BFUl9QQUdFKSAlIERMTV9IQVNIX1BBR0VTXSArCisJCQkoaSAlIERMTV9CVUNLRVRTX1BFUl9QQUdFKTsKK30KKwogLyogdGhlc2Uga2V2ZW50ZCB3b3JrIHF1ZXVlIGl0ZW1zIGFyZSBmb3IgbGVzcy1mcmVxdWVudGx5CiAgKiBjYWxsZWQgZnVuY3Rpb25zIHRoYXQgY2Fubm90IGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIHRoZQogICogbmV0IG1lc3NhZ2UgaGFuZGxlcnMgZm9yIHNvbWUgcmVhc29uLCB1c3VhbGx5IGJlY2F1c2UKQEAgLTg0OCw5ICs4NTIsNyBAQAogCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuKTsKIAogaW50IGRsbV9pc19ob3N0X2Rvd24oaW50IGVycm5vKTsKLXZvaWQgZGxtX2NoYW5nZV9sb2NrcmVzX293bmVyKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAotCQkJICAgICAgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMsCi0JCQkgICAgICB1OCBvd25lcik7CisKIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqIGRsbV9nZXRfbG9ja19yZXNvdXJjZShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKIAkJCQkJCSBjb25zdCBjaGFyICpsb2NraWQsCiAJCQkJCQkgaW50IG5hbWVsZW4sCkBAIC0xMDA4LDYgKzEwMTAsOSBAQAogCQkJCQkgIERMTV9MT0NLX1JFU19NSUdSQVRJTkcpKTsKIH0KIAordm9pZCBfX2RsbV91bmxpbmtfbWxlKHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGUpOwordm9pZCBfX2RsbV9pbnNlcnRfbWxlKHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGUpOworCiAvKiBjcmVhdGUvZGVzdHJveSBzbGFiIGNhY2hlcyAqLwogaW50IGRsbV9pbml0X21hc3Rlcl9jYWNoZXModm9pZCk7CiB2b2lkIGRsbV9kZXN0cm95X21hc3Rlcl9jYWNoZXModm9pZCk7CkBAIC0xMTEwLDYgKzExMTUsMjMgQEAKIAlyZXR1cm4gYml0OwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZGxtX3NldF9sb2NrcmVzX293bmVyKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAorCQkJCQkgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMsCisJCQkJCSB1OCBvd25lcikKK3sKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJnJlcy0+c3BpbmxvY2spOwogCisJcmVzLT5vd25lciA9IG93bmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGxtX2NoYW5nZV9sb2NrcmVzX293bmVyKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAorCQkJCQkgICAgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMsCisJCQkJCSAgICB1OCBvd25lcikKK3sKKwlhc3NlcnRfc3Bpbl9sb2NrZWQoJnJlcy0+c3BpbmxvY2spOworCisJaWYgKG93bmVyICE9IHJlcy0+b3duZXIpCisJCWRsbV9zZXRfbG9ja3Jlc19vd25lcihkbG0sIHJlcywgb3duZXIpOworfQogCiAjZW5kaWYgLyogRExNQ09NTU9OX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kZWJ1Zy5jIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKaW5kZXggYjMyZjYwYS4uZGY1MmY3MCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMKQEAgLTI4NywxOCArMjg3LDggQEAKIHN0YXRpYyBpbnQgZHVtcF9tbGUoc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlLCBjaGFyICpidWYsIGludCBsZW4pCiB7CiAJaW50IG91dCA9IDA7Ci0JdW5zaWduZWQgaW50IG5hbWVsZW47Ci0JY29uc3QgY2hhciAqbmFtZTsKIAljaGFyICptbGVfdHlwZTsKIAotCWlmIChtbGUtPnR5cGUgIT0gRExNX01MRV9NQVNURVIpIHsKLQkJbmFtZWxlbiA9IG1sZS0+dS5uYW1lLmxlbjsKLQkJbmFtZSA9IG1sZS0+dS5uYW1lLm5hbWU7Ci0JfSBlbHNlIHsKLQkJbmFtZWxlbiA9IG1sZS0+dS5yZXMtPmxvY2tuYW1lLmxlbjsKLQkJbmFtZSA9IG1sZS0+dS5yZXMtPmxvY2tuYW1lLm5hbWU7Ci0JfQotCiAJaWYgKG1sZS0+dHlwZSA9PSBETE1fTUxFX0JMT0NLKQogCQltbGVfdHlwZSA9ICJCTEsiOwogCWVsc2UgaWYgKG1sZS0+dHlwZSA9PSBETE1fTUxFX01BU1RFUikKQEAgLTMwNiw3ICsyOTYsNyBAQAogCWVsc2UKIAkJbWxlX3R5cGUgPSAiTUlHIjsKIAotCW91dCArPSBzdHJpbmdpZnlfbG9ja25hbWUobmFtZSwgbmFtZWxlbiwgYnVmICsgb3V0LCBsZW4gLSBvdXQpOworCW91dCArPSBzdHJpbmdpZnlfbG9ja25hbWUobWxlLT5tbmFtZSwgbWxlLT5tbmFtZWxlbiwgYnVmICsgb3V0LCBsZW4gLSBvdXQpOwogCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKIAkJCSJcdCUzc1x0bWFzPSUzdVx0bmV3PSUzdVx0ZXZ0PSUxZFx0dXNlPSUxZFx0cmVmPSUzZFxuIiwKIAkJCW1sZV90eXBlLCBtbGUtPm1hc3RlciwgbWxlLT5uZXdfbWFzdGVyLApAQCAtNTAxLDIzICs0OTEsMzMgQEAKIHN0YXRpYyBpbnQgZGVidWdfbWxlX3ByaW50KHN0cnVjdCBkbG1fY3R4dCAqZGxtLCBzdHJ1Y3QgZGVidWdfYnVmZmVyICpkYikKIHsKIAlzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGU7Ci0JaW50IG91dCA9IDA7Ci0JdW5zaWduZWQgbG9uZyB0b3RhbCA9IDA7CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbGlzdDsKKwlpbnQgaSwgb3V0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsID0gMCwgbG9uZ2VzdCA9IDAsIGJrdGNudDsKIAogCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAogCQkJIkR1bXBpbmcgTUxFcyBmb3IgRG9tYWluOiAlc1xuIiwgZGxtLT5uYW1lKTsKIAogCXNwaW5fbG9jaygmZGxtLT5tYXN0ZXJfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShtbGUsICZkbG0tPm1hc3Rlcl9saXN0LCBsaXN0KSB7Ci0JCSsrdG90YWw7Ci0JCWlmIChkYi0+bGVuIC0gb3V0IDwgMjAwKQotCQkJY29udGludWU7Ci0JCW91dCArPSBkdW1wX21sZShtbGUsIGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQpOworCWZvciAoaSA9IDA7IGkgPCBETE1fSEFTSF9CVUNLRVRTOyBpKyspIHsKKwkJYnVja2V0ID0gZGxtX21hc3Rlcl9oYXNoKGRsbSwgaSk7CisJCWhsaXN0X2Zvcl9lYWNoKGxpc3QsIGJ1Y2tldCkgeworCQkJbWxlID0gaGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSwKKwkJCQkJICBtYXN0ZXJfaGFzaF9ub2RlKTsKKwkJCSsrdG90YWw7CisJCQkrK2JrdGNudDsKKwkJCWlmIChkYi0+bGVuIC0gb3V0IDwgMjAwKQorCQkJCWNvbnRpbnVlOworCQkJb3V0ICs9IGR1bXBfbWxlKG1sZSwgZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCk7CisJCX0KKwkJbG9uZ2VzdCA9IG1heChsb25nZXN0LCBia3RjbnQpOworCQlia3RjbnQgPSAwOwogCX0KIAlzcGluX3VubG9jaygmZGxtLT5tYXN0ZXJfbG9jayk7CiAKIAlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKLQkJCSJUb3RhbCBvbiBsaXN0OiAlbGRcbiIsIHRvdGFsKTsKKwkJCSJUb3RhbDogJWxkLCBMb25nZXN0OiAlbGRcbiIsIHRvdGFsLCBsb25nZXN0KTsKIAlyZXR1cm4gb3V0OwogfQogCkBAIC03NTYsMTIgKzc1Niw4IEBACiAJaW50IG91dCA9IDA7CiAJc3RydWN0IGRsbV9yZWNvX25vZGVfZGF0YSAqbm9kZTsKIAljaGFyICpzdGF0ZTsKLQlpbnQgbHJlcywgcnJlcywgdXJlcywgdHJlczsKLQotCWxyZXMgPSBhdG9taWNfcmVhZCgmZGxtLT5sb2NhbF9yZXNvdXJjZXMpOwotCXJyZXMgPSBhdG9taWNfcmVhZCgmZGxtLT5yZW1vdGVfcmVzb3VyY2VzKTsKLQl1cmVzID0gYXRvbWljX3JlYWQoJmRsbS0+dW5rbm93bl9yZXNvdXJjZXMpOwotCXRyZXMgPSBscmVzICsgcnJlcyArIHVyZXM7CisJaW50IGN1cl9tbGVzID0gMCwgdG90X21sZXMgPSAwOworCWludCBpOwogCiAJc3Bpbl9sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIApAQCAtODA0LDIxICs4MDAsNDggQEAKIAkJCQkgZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCk7CiAJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsICJcbiIpOwogCi0JLyogTWFzdGVyZWQgUmVzb3VyY2VzIFRvdGFsOiB4eHggIExvY2FsbHk6IHh4eCAgUmVtb3RlbHk6IC4uLiAqLworCS8qIExvY2sgUmVzb3VyY2VzOiB4eHggKHh4eCkgKi8KIAlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKLQkJCSJNYXN0ZXJlZCBSZXNvdXJjZXMgVG90YWw6ICVkICBMb2NhbGx5OiAlZCAgIgotCQkJIlJlbW90ZWx5OiAlZCAgVW5rbm93bjogJWRcbiIsCi0JCQl0cmVzLCBscmVzLCBycmVzLCB1cmVzKTsKKwkJCSJMb2NrIFJlc291cmNlczogJWQgKCVkKVxuIiwKKwkJCWF0b21pY19yZWFkKCZkbG0tPnJlc19jdXJfY291bnQpLAorCQkJYXRvbWljX3JlYWQoJmRsbS0+cmVzX3RvdF9jb3VudCkpOworCisJZm9yIChpID0gMDsgaSA8IERMTV9NTEVfTlVNX1RZUEVTOyArK2kpCisJCXRvdF9tbGVzICs9IGF0b21pY19yZWFkKCZkbG0tPm1sZV90b3RfY291bnRbaV0pOworCisJZm9yIChpID0gMDsgaSA8IERMTV9NTEVfTlVNX1RZUEVTOyArK2kpCisJCWN1cl9tbGVzICs9IGF0b21pY19yZWFkKCZkbG0tPm1sZV9jdXJfY291bnRbaV0pOworCisJLyogTUxFczogeHh4ICh4eHgpICovCisJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCisJCQkiTUxFczogJWQgKCVkKVxuIiwgY3VyX21sZXMsIHRvdF9tbGVzKTsKKworCS8qICBCbG9ja2luZzogeHh4ICh4eHgpICovCisJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCisJCQkiICBCbG9ja2luZzogJWQgKCVkKVxuIiwKKwkJCWF0b21pY19yZWFkKCZkbG0tPm1sZV9jdXJfY291bnRbRExNX01MRV9CTE9DS10pLAorCQkJYXRvbWljX3JlYWQoJmRsbS0+bWxlX3RvdF9jb3VudFtETE1fTUxFX0JMT0NLXSkpOworCisJLyogIE1hc3Rlcnk6IHh4eCAoeHh4KSAqLworCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LAorCQkJIiAgTWFzdGVyeTogJWQgKCVkKVxuIiwKKwkJCWF0b21pY19yZWFkKCZkbG0tPm1sZV9jdXJfY291bnRbRExNX01MRV9NQVNURVJdKSwKKwkJCWF0b21pY19yZWFkKCZkbG0tPm1sZV90b3RfY291bnRbRExNX01MRV9NQVNURVJdKSk7CisKKwkvKiAgTWlncmF0aW9uOiB4eHggKHh4eCkgKi8KKwlvdXQgKz0gc25wcmludGYoZGItPmJ1ZiArIG91dCwgZGItPmxlbiAtIG91dCwKKwkJCSIgIE1pZ3JhdGlvbjogJWQgKCVkKVxuIiwKKwkJCWF0b21pY19yZWFkKCZkbG0tPm1sZV9jdXJfY291bnRbRExNX01MRV9NSUdSQVRJT05dKSwKKwkJCWF0b21pY19yZWFkKCZkbG0tPm1sZV90b3RfY291bnRbRExNX01MRV9NSUdSQVRJT05dKSk7CiAKIAkvKiBMaXN0czogRGlydHk9RW1wdHkgIFB1cmdlPUluVXNlICBQZW5kaW5nQVNUcz1FbXB0eSAgLi4uICovCiAJb3V0ICs9IHNucHJpbnRmKGRiLT5idWYgKyBvdXQsIGRiLT5sZW4gLSBvdXQsCiAJCQkiTGlzdHM6IERpcnR5PSVzICBQdXJnZT0lcyAgUGVuZGluZ0FTVHM9JXMgICIKLQkJCSJQZW5kaW5nQkFTVHM9JXMgIE1hc3Rlcj0lc1xuIiwKKwkJCSJQZW5kaW5nQkFTVHM9JXNcbiIsCiAJCQkobGlzdF9lbXB0eSgmZGxtLT5kaXJ0eV9saXN0KSA/ICJFbXB0eSIgOiAiSW5Vc2UiKSwKIAkJCShsaXN0X2VtcHR5KCZkbG0tPnB1cmdlX2xpc3QpID8gIkVtcHR5IiA6ICJJblVzZSIpLAogCQkJKGxpc3RfZW1wdHkoJmRsbS0+cGVuZGluZ19hc3RzKSA/ICJFbXB0eSIgOiAiSW5Vc2UiKSwKLQkJCShsaXN0X2VtcHR5KCZkbG0tPnBlbmRpbmdfYmFzdHMpID8gIkVtcHR5IiA6ICJJblVzZSIpLAotCQkJKGxpc3RfZW1wdHkoJmRsbS0+bWFzdGVyX2xpc3QpID8gIkVtcHR5IiA6ICJJblVzZSIpKTsKKwkJCShsaXN0X2VtcHR5KCZkbG0tPnBlbmRpbmdfYmFzdHMpID8gIkVtcHR5IiA6ICJJblVzZSIpKTsKIAogCS8qIFB1cmdlIENvdW50OiB4eHggIFJlZnM6IHh4eCAqLwogCW91dCArPSBzbnByaW50ZihkYi0+YnVmICsgb3V0LCBkYi0+bGVuIC0gb3V0LApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCmluZGV4IGQ4ZDU3OGYuLjRkOWU2YjIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKQEAgLTMwNCw2ICszMDQsOSBAQAogCWlmIChkbG0tPmxvY2tyZXNfaGFzaCkKIAkJZGxtX2ZyZWVfcGFnZXZlYygodm9pZCAqKilkbG0tPmxvY2tyZXNfaGFzaCwgRExNX0hBU0hfUEFHRVMpOwogCisJaWYgKGRsbS0+bWFzdGVyX2hhc2gpCisJCWRsbV9mcmVlX3BhZ2V2ZWMoKHZvaWQgKiopZGxtLT5tYXN0ZXJfaGFzaCwgRExNX0hBU0hfUEFHRVMpOworCiAJaWYgKGRsbS0+bmFtZSkKIAkJa2ZyZWUoZGxtLT5uYW1lKTsKIApAQCAtMTUzNCwxMiArMTUzNywyNyBAQAogCWZvciAoaSA9IDA7IGkgPCBETE1fSEFTSF9CVUNLRVRTOyBpKyspCiAJCUlOSVRfSExJU1RfSEVBRChkbG1fbG9ja3Jlc19oYXNoKGRsbSwgaSkpOwogCisJZGxtLT5tYXN0ZXJfaGFzaCA9IChzdHJ1Y3QgaGxpc3RfaGVhZCAqKikKKwkJCQlkbG1fYWxsb2NfcGFnZXZlYyhETE1fSEFTSF9QQUdFUyk7CisJaWYgKCFkbG0tPm1hc3Rlcl9oYXNoKSB7CisJCW1sb2dfZXJybm8oLUVOT01FTSk7CisJCWRsbV9mcmVlX3BhZ2V2ZWMoKHZvaWQgKiopZGxtLT5sb2NrcmVzX2hhc2gsIERMTV9IQVNIX1BBR0VTKTsKKwkJa2ZyZWUoZGxtLT5uYW1lKTsKKwkJa2ZyZWUoZGxtKTsKKwkJZGxtID0gTlVMTDsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgRExNX0hBU0hfQlVDS0VUUzsgaSsrKQorCQlJTklUX0hMSVNUX0hFQUQoZGxtX21hc3Rlcl9oYXNoKGRsbSwgaSkpOworCiAJc3RyY3B5KGRsbS0+bmFtZSwgZG9tYWluKTsKIAlkbG0tPmtleSA9IGtleTsKIAlkbG0tPm5vZGVfbnVtID0gbzJubV90aGlzX25vZGUoKTsKIAogCXJldCA9IGRsbV9jcmVhdGVfZGVidWdmc19zdWJyb290KGRsbSk7CiAJaWYgKHJldCA8IDApIHsKKwkJZGxtX2ZyZWVfcGFnZXZlYygodm9pZCAqKilkbG0tPm1hc3Rlcl9oYXNoLCBETE1fSEFTSF9QQUdFUyk7CiAJCWRsbV9mcmVlX3BhZ2V2ZWMoKHZvaWQgKiopZGxtLT5sb2NrcmVzX2hhc2gsIERMTV9IQVNIX1BBR0VTKTsKIAkJa2ZyZWUoZGxtLT5uYW1lKTsKIAkJa2ZyZWUoZGxtKTsKQEAgLTE1NzksNyArMTU5Nyw2IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGxtLT5yZWNvLmV2ZW50KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbG0tPmFzdF93cSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGxtLT5taWdyYXRpb25fd3EpOwotCUlOSVRfTElTVF9IRUFEKCZkbG0tPm1hc3Rlcl9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZGxtLT5tbGVfaGJfZXZlbnRzKTsKIAogCWRsbS0+am9pbmluZ19ub2RlID0gRExNX0xPQ0tfUkVTX09XTkVSX1VOS05PV047CkBAIC0xNTg3LDkgKzE2MDQsMTMgQEAKIAogCWRsbS0+cmVjby5uZXdfbWFzdGVyID0gTzJOTV9JTlZBTElEX05PREVfTlVNOwogCWRsbS0+cmVjby5kZWFkX25vZGUgPSBPMk5NX0lOVkFMSURfTk9ERV9OVU07Ci0JYXRvbWljX3NldCgmZGxtLT5sb2NhbF9yZXNvdXJjZXMsIDApOwotCWF0b21pY19zZXQoJmRsbS0+cmVtb3RlX3Jlc291cmNlcywgMCk7Ci0JYXRvbWljX3NldCgmZGxtLT51bmtub3duX3Jlc291cmNlcywgMCk7CisKKwlhdG9taWNfc2V0KCZkbG0tPnJlc190b3RfY291bnQsIDApOworCWF0b21pY19zZXQoJmRsbS0+cmVzX2N1cl9jb3VudCwgMCk7CisJZm9yIChpID0gMDsgaSA8IERMTV9NTEVfTlVNX1RZUEVTOyArK2kpIHsKKwkJYXRvbWljX3NldCgmZGxtLT5tbGVfdG90X2NvdW50W2ldLCAwKTsKKwkJYXRvbWljX3NldCgmZGxtLT5tbGVfY3VyX2NvdW50W2ldLCAwKTsKKwl9CiAKIAlzcGluX2xvY2tfaW5pdCgmZGxtLT53b3JrX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZkbG0tPndvcmtfbGlzdCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMgYi9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKaW5kZXggMGEyODEzOS4uZjhiNjUzZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwpAQCAtNzMsMjIgKzczLDEzIEBACiAJCQkJY29uc3QgY2hhciAqbmFtZSwKIAkJCQl1bnNpZ25lZCBpbnQgbmFtZWxlbikKIHsKLQlzdHJ1Y3QgZGxtX2xvY2tfcmVzb3VyY2UgKnJlczsKLQogCWlmIChkbG0gIT0gbWxlLT5kbG0pCiAJCXJldHVybiAwOwogCi0JaWYgKG1sZS0+dHlwZSA9PSBETE1fTUxFX0JMT0NLIHx8Ci0JICAgIG1sZS0+dHlwZSA9PSBETE1fTUxFX01JR1JBVElPTikgewotCQlpZiAobmFtZWxlbiAhPSBtbGUtPnUubmFtZS5sZW4gfHwKLSAgICAJICAgIAkgICAgbWVtY21wKG5hbWUsIG1sZS0+dS5uYW1lLm5hbWUsIG5hbWVsZW4pIT0wKQotCQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJcmVzID0gbWxlLT51LnJlczsKLQkJaWYgKG5hbWVsZW4gIT0gcmVzLT5sb2NrbmFtZS5sZW4gfHwKLQkJICAgIG1lbWNtcChyZXMtPmxvY2tuYW1lLm5hbWUsIG5hbWUsIG5hbWVsZW4pICE9IDApCi0JCQlyZXR1cm4gMDsKLQl9CisJaWYgKG5hbWVsZW4gIT0gbWxlLT5tbmFtZWxlbiB8fAorCSAgICBtZW1jbXAobmFtZSwgbWxlLT5tbmFtZSwgbmFtZWxlbikgIT0gMCkKKwkJcmV0dXJuIDA7CisKIAlyZXR1cm4gMTsKIH0KIApAQCAtMjgzLDcgKzI3NCw3IEBACiAKIAltbGUtPmRsbSA9IGRsbTsKIAltbGUtPnR5cGUgPSB0eXBlOwotCUlOSVRfTElTVF9IRUFEKCZtbGUtPmxpc3QpOworCUlOSVRfSExJU1RfTk9ERSgmbWxlLT5tYXN0ZXJfaGFzaF9ub2RlKTsKIAlJTklUX0xJU1RfSEVBRCgmbWxlLT5oYl9ldmVudHMpOwogCW1lbXNldChtbGUtPm1heWJlX21hcCwgMCwgc2l6ZW9mKG1sZS0+bWF5YmVfbWFwKSk7CiAJc3Bpbl9sb2NrX2luaXQoJm1sZS0+c3BpbmxvY2spOwpAQCAtMjk1LDE5ICsyODYsMjcgQEAKIAltbGUtPm5ld19tYXN0ZXIgPSBPMk5NX01BWF9OT0RFUzsKIAltbGUtPmludXNlID0gMDsKIAorCUJVR19PTihtbGUtPnR5cGUgIT0gRExNX01MRV9CTE9DSyAmJgorCSAgICAgICBtbGUtPnR5cGUgIT0gRExNX01MRV9NQVNURVIgJiYKKwkgICAgICAgbWxlLT50eXBlICE9IERMTV9NTEVfTUlHUkFUSU9OKTsKKwogCWlmIChtbGUtPnR5cGUgPT0gRExNX01MRV9NQVNURVIpIHsKIAkJQlVHX09OKCFyZXMpOwotCQltbGUtPnUucmVzID0gcmVzOwotCX0gZWxzZSBpZiAobWxlLT50eXBlID09IERMTV9NTEVfQkxPQ0spIHsKKwkJbWxlLT5tbGVyZXMgPSByZXM7CisJCW1lbWNweShtbGUtPm1uYW1lLCByZXMtPmxvY2tuYW1lLm5hbWUsIHJlcy0+bG9ja25hbWUubGVuKTsKKwkJbWxlLT5tbmFtZWxlbiA9IHJlcy0+bG9ja25hbWUubGVuOworCQltbGUtPm1uYW1laGFzaCA9IHJlcy0+bG9ja25hbWUuaGFzaDsKKwl9IGVsc2UgewogCQlCVUdfT04oIW5hbWUpOwotCQltZW1jcHkobWxlLT51Lm5hbWUubmFtZSwgbmFtZSwgbmFtZWxlbik7Ci0JCW1sZS0+dS5uYW1lLmxlbiA9IG5hbWVsZW47Ci0JfSBlbHNlIC8qIERMTV9NTEVfTUlHUkFUSU9OICovIHsKLQkJQlVHX09OKCFuYW1lKTsKLQkJbWVtY3B5KG1sZS0+dS5uYW1lLm5hbWUsIG5hbWUsIG5hbWVsZW4pOwotCQltbGUtPnUubmFtZS5sZW4gPSBuYW1lbGVuOworCQltbGUtPm1sZXJlcyA9IE5VTEw7CisJCW1lbWNweShtbGUtPm1uYW1lLCBuYW1lLCBuYW1lbGVuKTsKKwkJbWxlLT5tbmFtZWxlbiA9IG5hbWVsZW47CisJCW1sZS0+bW5hbWVoYXNoID0gZGxtX2xvY2tpZF9oYXNoKG5hbWUsIG5hbWVsZW4pOwogCX0KIAorCWF0b21pY19pbmMoJmRsbS0+bWxlX3RvdF9jb3VudFttbGUtPnR5cGVdKTsKKwlhdG9taWNfaW5jKCZkbG0tPm1sZV9jdXJfY291bnRbbWxlLT50eXBlXSk7CisKIAkvKiBjb3B5IG9mZiB0aGUgbm9kZV9tYXAgYW5kIHJlZ2lzdGVyIGhiIGNhbGxiYWNrcyBvbiBvdXIgY29weSAqLwogCW1lbWNweShtbGUtPm5vZGVfbWFwLCBkbG0tPmRvbWFpbl9tYXAsIHNpemVvZihtbGUtPm5vZGVfbWFwKSk7CiAJbWVtY3B5KG1sZS0+dm90ZV9tYXAsIGRsbS0+ZG9tYWluX21hcCwgc2l6ZW9mKG1sZS0+dm90ZV9tYXApKTsKQEAgLTMxOCw2ICszMTcsMjQgQEAKIAlfX2RsbV9tbGVfYXR0YWNoX2hiX2V2ZW50cyhkbG0sIG1sZSk7CiB9CiAKK3ZvaWQgX19kbG1fdW5saW5rX21sZShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwgc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlKQoreworCWFzc2VydF9zcGluX2xvY2tlZCgmZGxtLT5zcGlubG9jayk7CisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkbG0tPm1hc3Rlcl9sb2NrKTsKKworCWlmICghaGxpc3RfdW5oYXNoZWQoJm1sZS0+bWFzdGVyX2hhc2hfbm9kZSkpCisJCWhsaXN0X2RlbF9pbml0KCZtbGUtPm1hc3Rlcl9oYXNoX25vZGUpOworfQorCit2b2lkIF9fZGxtX2luc2VydF9tbGUoc3RydWN0IGRsbV9jdHh0ICpkbG0sIHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnkgKm1sZSkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0OworCisJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkbG0tPm1hc3Rlcl9sb2NrKTsKKworCWJ1Y2tldCA9IGRsbV9tYXN0ZXJfaGFzaChkbG0sIG1sZS0+bW5hbWVoYXNoKTsKKwlobGlzdF9hZGRfaGVhZCgmbWxlLT5tYXN0ZXJfaGFzaF9ub2RlLCBidWNrZXQpOworfQogCiAvKiByZXR1cm5zIDEgaWYgZm91bmQsIDAgaWYgbm90ICovCiBzdGF0aWMgaW50IGRsbV9maW5kX21sZShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKQEAgLTMyNSwxMCArMzQyLDE3IEBACiAJCQljaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbmFtZWxlbikKIHsKIAlzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICp0bXBtbGU7CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbGlzdDsKKwl1bnNpZ25lZCBpbnQgaGFzaDsKIAogCWFzc2VydF9zcGluX2xvY2tlZCgmZGxtLT5tYXN0ZXJfbG9jayk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcG1sZSwgJmRsbS0+bWFzdGVyX2xpc3QsIGxpc3QpIHsKKwloYXNoID0gZGxtX2xvY2tpZF9oYXNoKG5hbWUsIG5hbWVsZW4pOworCWJ1Y2tldCA9IGRsbV9tYXN0ZXJfaGFzaChkbG0sIGhhc2gpOworCWhsaXN0X2Zvcl9lYWNoKGxpc3QsIGJ1Y2tldCkgeworCQl0bXBtbGUgPSBobGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5LAorCQkJCSAgICAgbWFzdGVyX2hhc2hfbm9kZSk7CiAJCWlmICghZGxtX21sZV9lcXVhbChkbG0sIHRtcG1sZSwgbmFtZSwgbmFtZWxlbikpCiAJCQljb250aW51ZTsKIAkJZGxtX2dldF9tbGUodG1wbWxlKTsKQEAgLTQwOCwyNCArNDMyLDIwIEBACiAJbWxlID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnksIG1sZV9yZWZzKTsKIAlkbG0gPSBtbGUtPmRsbTsKIAotCWlmIChtbGUtPnR5cGUgIT0gRExNX01MRV9NQVNURVIpIHsKLQkJbWxvZygwLCAiY2FsbGluZyBtbGVfcmVsZWFzZSBmb3IgJS4qcywgdHlwZSAlZFxuIiwKLQkJICAgICBtbGUtPnUubmFtZS5sZW4sIG1sZS0+dS5uYW1lLm5hbWUsIG1sZS0+dHlwZSk7Ci0JfSBlbHNlIHsKLQkJbWxvZygwLCAiY2FsbGluZyBtbGVfcmVsZWFzZSBmb3IgJS4qcywgdHlwZSAlZFxuIiwKLQkJICAgICBtbGUtPnUucmVzLT5sb2NrbmFtZS5sZW4sCi0JCSAgICAgbWxlLT51LnJlcy0+bG9ja25hbWUubmFtZSwgbWxlLT50eXBlKTsKLQl9CiAJYXNzZXJ0X3NwaW5fbG9ja2VkKCZkbG0tPnNwaW5sb2NrKTsKIAlhc3NlcnRfc3Bpbl9sb2NrZWQoJmRsbS0+bWFzdGVyX2xvY2spOwogCisJbWxvZygwLCAiUmVsZWFzaW5nIG1sZSBmb3IgJS4qcywgdHlwZSAlZFxuIiwgbWxlLT5tbmFtZWxlbiwgbWxlLT5tbmFtZSwKKwkgICAgIG1sZS0+dHlwZSk7CisKIAkvKiByZW1vdmUgZnJvbSBsaXN0IGlmIG5vdCBhbHJlYWR5ICovCi0JaWYgKCFsaXN0X2VtcHR5KCZtbGUtPmxpc3QpKQotCQlsaXN0X2RlbF9pbml0KCZtbGUtPmxpc3QpOworCV9fZGxtX3VubGlua19tbGUoZGxtLCBtbGUpOwogCiAJLyogZGV0YWNoIHRoZSBtbGUgZnJvbSB0aGUgZG9tYWluIG5vZGUgdXAvZG93biBldmVudHMgKi8KIAlfX2RsbV9tbGVfZGV0YWNoX2hiX2V2ZW50cyhkbG0sIG1sZSk7CiAKKwlhdG9taWNfZGVjKCZkbG0tPm1sZV9jdXJfY291bnRbbWxlLT50eXBlXSk7CisKIAkvKiBOT1RFOiBrZnJlZSB1bmRlciBzcGlubG9jayBoZXJlLgogCSAqIGlmIHRoaXMgaXMgYmFkLCB3ZSBjYW4gbW92ZSB0aGlzIHRvIGEgZnJlZWxpc3QuICovCiAJa21lbV9jYWNoZV9mcmVlKGRsbV9tbGVfY2FjaGUsIG1sZSk7CkBAIC00NjUsNDMgKzQ4NSw2IEBACiAJCWttZW1fY2FjaGVfZGVzdHJveShkbG1fbG9ja3Jlc19jYWNoZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRsbV9zZXRfbG9ja3Jlc19vd25lcihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKLQkJCQkgIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzLAotCQkJCSAgdTggb3duZXIpCi17Ci0JYXNzZXJ0X3NwaW5fbG9ja2VkKCZyZXMtPnNwaW5sb2NrKTsKLQotCW1sb2dfZW50cnkoIiUuKnMsICV1XG4iLCByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lLCBvd25lcik7Ci0KLQlpZiAob3duZXIgPT0gZGxtLT5ub2RlX251bSkKLQkJYXRvbWljX2luYygmZGxtLT5sb2NhbF9yZXNvdXJjZXMpOwotCWVsc2UgaWYgKG93bmVyID09IERMTV9MT0NLX1JFU19PV05FUl9VTktOT1dOKQotCQlhdG9taWNfaW5jKCZkbG0tPnVua25vd25fcmVzb3VyY2VzKTsKLQllbHNlCi0JCWF0b21pY19pbmMoJmRsbS0+cmVtb3RlX3Jlc291cmNlcyk7Ci0KLQlyZXMtPm93bmVyID0gb3duZXI7Ci19Ci0KLXZvaWQgZGxtX2NoYW5nZV9sb2NrcmVzX293bmVyKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAotCQkJICAgICAgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXMsIHU4IG93bmVyKQotewotCWFzc2VydF9zcGluX2xvY2tlZCgmcmVzLT5zcGlubG9jayk7Ci0KLQlpZiAob3duZXIgPT0gcmVzLT5vd25lcikKLQkJcmV0dXJuOwotCi0JaWYgKHJlcy0+b3duZXIgPT0gZGxtLT5ub2RlX251bSkKLQkJYXRvbWljX2RlYygmZGxtLT5sb2NhbF9yZXNvdXJjZXMpOwotCWVsc2UgaWYgKHJlcy0+b3duZXIgPT0gRExNX0xPQ0tfUkVTX09XTkVSX1VOS05PV04pCi0JCWF0b21pY19kZWMoJmRsbS0+dW5rbm93bl9yZXNvdXJjZXMpOwotCWVsc2UKLQkJYXRvbWljX2RlYygmZGxtLT5yZW1vdGVfcmVzb3VyY2VzKTsKLQotCWRsbV9zZXRfbG9ja3Jlc19vd25lcihkbG0sIHJlcywgb3duZXIpOwotfQotCi0KIHN0YXRpYyB2b2lkIGRsbV9sb2NrcmVzX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXM7CkBAIC01MjcsNiArNTEwLDggQEAKIAl9CiAJc3Bpbl91bmxvY2soJmRsbS0+dHJhY2tfbG9jayk7CiAKKwlhdG9taWNfZGVjKCZkbG0tPnJlc19jdXJfY291bnQpOworCiAJZGxtX3B1dChkbG0pOwogCiAJaWYgKCFobGlzdF91bmhhc2hlZCgmcmVzLT5oYXNoX25vZGUpIHx8CkBAIC02MDcsNiArNTkyLDkgQEAKIAogCWtyZWZfaW5pdCgmcmVzLT5yZWZzKTsKIAorCWF0b21pY19pbmMoJmRsbS0+cmVzX3RvdF9jb3VudCk7CisJYXRvbWljX2luYygmZGxtLT5yZXNfY3VyX2NvdW50KTsKKwogCS8qIGp1c3QgZm9yIGNvbnNpc3RlbmN5ICovCiAJc3Bpbl9sb2NrKCZyZXMtPnNwaW5sb2NrKTsKIAlkbG1fc2V0X2xvY2tyZXNfb3duZXIoZGxtLCByZXMsIERMTV9MT0NLX1JFU19PV05FUl9VTktOT1dOKTsKQEAgLTg0Myw3ICs4MzEsNyBAQAogCQlhbGxvY19tbGUgPSBOVUxMOwogCQlkbG1faW5pdF9tbGUobWxlLCBETE1fTUxFX01BU1RFUiwgZGxtLCByZXMsIE5VTEwsIDApOwogCQlzZXRfYml0KGRsbS0+bm9kZV9udW0sIG1sZS0+bWF5YmVfbWFwKTsKLQkJbGlzdF9hZGQoJm1sZS0+bGlzdCwgJmRsbS0+bWFzdGVyX2xpc3QpOworCQlfX2RsbV9pbnNlcnRfbWxlKGRsbSwgbWxlKTsKIAogCQkvKiBzdGlsbCBob2xkaW5nIHRoZSBkbG0gc3BpbmxvY2ssIGNoZWNrIHRoZSByZWNvdmVyeSBtYXAKIAkJICogdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9kZXMgdGhhdCBzdGlsbCBuZWVkIHRvIGJlIApAQCAtMTI3MCw3ICsxMjU4LDcgQEAKIAkJCQkJCSAgICAgcmVzLT5sb2NrbmFtZS5sZW4sCiAJCQkJCQkgICAgIHJlcy0+bG9ja25hbWUubmFtZSk7CiAJCQkJCQltbGUtPnR5cGUgPSBETE1fTUxFX01BU1RFUjsKLQkJCQkJCW1sZS0+dS5yZXMgPSByZXM7CisJCQkJCQltbGUtPm1sZXJlcyA9IHJlczsKIAkJCQkJfQogCQkJCX0KIAkJCX0KQEAgLTEzMTUsMTQgKzEzMDMsOCBAQAogCiAJQlVHX09OKG1sZS0+dHlwZSA9PSBETE1fTUxFX01JR1JBVElPTik7CiAKLQlpZiAobWxlLT50eXBlICE9IERMTV9NTEVfTUFTVEVSKSB7Ci0JCXJlcXVlc3QubmFtZWxlbiA9IG1sZS0+dS5uYW1lLmxlbjsKLQkJbWVtY3B5KHJlcXVlc3QubmFtZSwgbWxlLT51Lm5hbWUubmFtZSwgcmVxdWVzdC5uYW1lbGVuKTsKLQl9IGVsc2UgewotCQlyZXF1ZXN0Lm5hbWVsZW4gPSBtbGUtPnUucmVzLT5sb2NrbmFtZS5sZW47Ci0JCW1lbWNweShyZXF1ZXN0Lm5hbWUsIG1sZS0+dS5yZXMtPmxvY2tuYW1lLm5hbWUsCi0JCQlyZXF1ZXN0Lm5hbWVsZW4pOwotCX0KKwlyZXF1ZXN0Lm5hbWVsZW4gPSAodTgpbWxlLT5tbmFtZWxlbjsKKwltZW1jcHkocmVxdWVzdC5uYW1lLCBtbGUtPm1uYW1lLCByZXF1ZXN0Lm5hbWVsZW4pOwogCiBhZ2FpbjoKIAlyZXQgPSBvMm5ldF9zZW5kX21lc3NhZ2UoRExNX01BU1RFUl9SRVFVRVNUX01TRywgZGxtLT5rZXksICZyZXF1ZXN0LApAQCAtMTU3NSw3ICsxNTU3LDcgQEAKIAkJLy8gImFkZCB0aGUgYmxvY2suXG4iKTsKIAkJZGxtX2luaXRfbWxlKG1sZSwgRExNX01MRV9CTE9DSywgZGxtLCBOVUxMLCBuYW1lLCBuYW1lbGVuKTsKIAkJc2V0X2JpdChyZXF1ZXN0LT5ub2RlX2lkeCwgbWxlLT5tYXliZV9tYXApOwotCQlsaXN0X2FkZCgmbWxlLT5saXN0LCAmZGxtLT5tYXN0ZXJfbGlzdCk7CisJCV9fZGxtX2luc2VydF9tbGUoZGxtLCBtbGUpOwogCQlyZXNwb25zZSA9IERMTV9NQVNURVJfUkVTUF9OTzsKIAl9IGVsc2UgewogCQkvLyBtbG9nKDAsICJtbGUgd2FzIGZvdW5kXG4iKTsKQEAgLTE5NjcsNyArMTk0OSw3IEBACiAJCQkgICAgIGFzc2VydC0+bm9kZV9pZHgsIHJyLCBleHRyYV9yZWYsIG1sZS0+aW51c2UpOwogCQkJZGxtX3ByaW50X29uZV9tbGUobWxlKTsKIAkJfQotCQlsaXN0X2RlbF9pbml0KCZtbGUtPmxpc3QpOworCQlfX2RsbV91bmxpbmtfbWxlKGRsbSwgbWxlKTsKIAkJX19kbG1fbWxlX2RldGFjaF9oYl9ldmVudHMoZGxtLCBtbGUpOwogCQlfX2RsbV9wdXRfbWxlKG1sZSk7CiAJCWlmIChleHRyYV9yZWYpIHsKQEAgLTMxNTksMTAgKzMxNDEsOCBAQAogCQkJdG1wLT5tYXN0ZXIgPSBtYXN0ZXI7CiAJCQlhdG9taWNfc2V0KCZ0bXAtPndva2VuLCAxKTsKIAkJCXdha2VfdXAoJnRtcC0+d3EpOwotCQkJLyogcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgc28gdGhhdCBvbmx5IG9uZQotCQkJICogbWxlIHdpbGwgYmUgZm91bmQgKi8KLQkJCWxpc3RfZGVsX2luaXQoJnRtcC0+bGlzdCk7Ci0JCQkvKiB0aGlzIHdhcyBvYnZpb3VzbHkgV1JPTkcuICBtbGUgaXMgdW5pbml0ZWQgaGVyZS4gIHNob3VsZCBiZSB0bXAuICovCisJCQkvKiByZW1vdmUgaXQgc28gdGhhdCBvbmx5IG9uZSBtbGUgd2lsbCBiZSBmb3VuZCAqLworCQkJX19kbG1fdW5saW5rX21sZShkbG0sIHRtcCk7CiAJCQlfX2RsbV9tbGVfZGV0YWNoX2hiX2V2ZW50cyhkbG0sIHRtcCk7CiAJCQlyZXQgPSBETE1fTUlHUkFURV9SRVNQT05TRV9NQVNURVJZX1JFRjsKIAkJCW1sb2coMCwgIiVzOiUuKnM6IG1hc3Rlcj0ldSwgbmV3bWFzdGVyPSV1LCAiCkBAIC0zMTgxLDE3ICszMTYxLDkzIEBACiAJbWxlLT5tYXN0ZXIgPSBtYXN0ZXI7CiAJLyogZG8gdGhpcyBmb3IgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBtbGUgdHlwZXMgKi8KIAlzZXRfYml0KG5ld19tYXN0ZXIsIG1sZS0+bWF5YmVfbWFwKTsKLQlsaXN0X2FkZCgmbWxlLT5saXN0LCAmZGxtLT5tYXN0ZXJfbGlzdCk7CisJX19kbG1faW5zZXJ0X21sZShkbG0sIG1sZSk7CiAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogU2V0cyB0aGUgb3duZXIgb2YgdGhlIGxvY2tyZXMsIGFzc29jaWF0ZWQgdG8gdGhlIG1sZSwgdG8gVU5LTk9XTgorICovCitzdGF0aWMgc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpkbG1fcmVzZXRfbWxlcmVzX293bmVyKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAorCQkJCQlzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGUpCit7CisJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXM7CisKKwkvKiBGaW5kIHRoZSBsb2NrcmVzIGFzc29jaWF0ZWQgdG8gdGhlIG1sZSBhbmQgc2V0IGl0cyBvd25lciB0byBVTksgKi8KKwlyZXMgPSBfX2RsbV9sb29rdXBfbG9ja3JlcyhkbG0sIG1sZS0+bW5hbWUsIG1sZS0+bW5hbWVsZW4sCisJCQkJICAgbWxlLT5tbmFtZWhhc2gpOworCWlmIChyZXMpIHsKKwkJc3Bpbl91bmxvY2soJmRsbS0+bWFzdGVyX2xvY2spOworCisJCS8qIG1vdmUgbG9ja3JlcyBvbnRvIHJlY292ZXJ5IGxpc3QgKi8KKwkJc3Bpbl9sb2NrKCZyZXMtPnNwaW5sb2NrKTsKKwkJZGxtX3NldF9sb2NrcmVzX293bmVyKGRsbSwgcmVzLCBETE1fTE9DS19SRVNfT1dORVJfVU5LTk9XTik7CisJCWRsbV9tb3ZlX2xvY2tyZXNfdG9fcmVjb3ZlcnlfbGlzdChkbG0sIHJlcyk7CisJCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKKwkJZGxtX2xvY2tyZXNfcHV0KHJlcyk7CisKKwkJLyogYWJvdXQgdG8gZ2V0IHJpZCBvZiBtbGUsIGRldGFjaCBmcm9tIGhlYXJ0YmVhdCAqLworCQlfX2RsbV9tbGVfZGV0YWNoX2hiX2V2ZW50cyhkbG0sIG1sZSk7CisKKwkJLyogZHVtcCB0aGUgbWxlICovCisJCXNwaW5fbG9jaygmZGxtLT5tYXN0ZXJfbG9jayk7CisJCV9fZGxtX3B1dF9tbGUobWxlKTsKKwkJc3Bpbl91bmxvY2soJmRsbS0+bWFzdGVyX2xvY2spOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIGRsbV9jbGVhbl9taWdyYXRpb25fbWxlKHN0cnVjdCBkbG1fY3R4dCAqZGxtLAorCQkJCSAgICBzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGUpCit7CisJX19kbG1fbWxlX2RldGFjaF9oYl9ldmVudHMoZGxtLCBtbGUpOworCisJc3Bpbl9sb2NrKCZtbGUtPnNwaW5sb2NrKTsKKwlfX2RsbV91bmxpbmtfbWxlKGRsbSwgbWxlKTsKKwlhdG9taWNfc2V0KCZtbGUtPndva2VuLCAxKTsKKwlzcGluX3VubG9jaygmbWxlLT5zcGlubG9jayk7CisKKwl3YWtlX3VwKCZtbGUtPndxKTsKK30KKworc3RhdGljIHZvaWQgZGxtX2NsZWFuX2Jsb2NrX21sZShzdHJ1Y3QgZGxtX2N0eHQgKmRsbSwKKwkJCQlzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGUsIHU4IGRlYWRfbm9kZSkKK3sKKwlpbnQgYml0OworCisJQlVHX09OKG1sZS0+dHlwZSAhPSBETE1fTUxFX0JMT0NLKTsKKworCXNwaW5fbG9jaygmbWxlLT5zcGlubG9jayk7CisJYml0ID0gZmluZF9uZXh0X2JpdChtbGUtPm1heWJlX21hcCwgTzJOTV9NQVhfTk9ERVMsIDApOworCWlmIChiaXQgIT0gZGVhZF9ub2RlKSB7CisJCW1sb2coMCwgIm1sZSBmb3VuZCwgYnV0IGRlYWQgbm9kZSAldSB3b3VsZCBub3QgaGF2ZSBiZWVuICIKKwkJICAgICAibWFzdGVyXG4iLCBkZWFkX25vZGUpOworCQlzcGluX3VubG9jaygmbWxlLT5zcGlubG9jayk7CisJfSBlbHNlIHsKKwkJLyogTXVzdCBkcm9wIHRoZSByZWZjb3VudCBieSBvbmUgc2luY2UgdGhlIGFzc2VydF9tYXN0ZXIgd2lsbAorCQkgKiBuZXZlciBhcnJpdmUuIFRoaXMgbWF5IHJlc3VsdCBpbiB0aGUgbWxlIGJlaW5nIHVubGlua2VkIGFuZAorCQkgKiBmcmVlZCwgYnV0IHRoZXJlIG1heSBzdGlsbCBiZSBhIHByb2Nlc3Mgd2FpdGluZyBpbiB0aGUKKwkJICogZGxtbG9jayBwYXRoIHdoaWNoIGlzIGZpbmUuICovCisJCW1sb2coMCwgIm5vZGUgJXUgd2FzIGV4cGVjdGVkIG1hc3RlclxuIiwgZGVhZF9ub2RlKTsKKwkJYXRvbWljX3NldCgmbWxlLT53b2tlbiwgMSk7CisJCXNwaW5fdW5sb2NrKCZtbGUtPnNwaW5sb2NrKTsKKwkJd2FrZV91cCgmbWxlLT53cSk7CisKKwkJLyogRG8gbm90IG5lZWQgZXZlbnRzIGFueSBsb25nZXIsIHNvIGRldGFjaCBmcm9tIGhlYXJ0YmVhdCAqLworCQlfX2RsbV9tbGVfZGV0YWNoX2hiX2V2ZW50cyhkbG0sIG1sZSk7CisJCV9fZGxtX3B1dF9tbGUobWxlKTsKKwl9Cit9CiAKIHZvaWQgZGxtX2NsZWFuX21hc3Rlcl9saXN0KHN0cnVjdCBkbG1fY3R4dCAqZGxtLCB1OCBkZWFkX25vZGUpCiB7Ci0Jc3RydWN0IGRsbV9tYXN0ZXJfbGlzdF9lbnRyeSAqbWxlLCAqbmV4dDsKKwlzdHJ1Y3QgZGxtX21hc3Rlcl9saXN0X2VudHJ5ICptbGU7CiAJc3RydWN0IGRsbV9sb2NrX3Jlc291cmNlICpyZXM7Ci0JdW5zaWduZWQgaW50IGhhc2g7CisJc3RydWN0IGhsaXN0X2hlYWQgKmJ1Y2tldDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbGlzdDsKKwl1bnNpZ25lZCBpbnQgaTsKIAogCW1sb2dfZW50cnkoImRsbT0lcywgZGVhZCBub2RlPSV1XG4iLCBkbG0tPm5hbWUsIGRlYWRfbm9kZSk7CiB0b3A6CkBAIC0zMTk5LDExOSArMzI1NSw3MCBAQAogCiAJLyogY2xlYW4gdGhlIG1hc3RlciBsaXN0ICovCiAJc3Bpbl9sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWxlLCBuZXh0LCAmZGxtLT5tYXN0ZXJfbGlzdCwgbGlzdCkgewotCQlCVUdfT04obWxlLT50eXBlICE9IERMTV9NTEVfQkxPQ0sgJiYKLQkJICAgICAgIG1sZS0+dHlwZSAhPSBETE1fTUxFX01BU1RFUiAmJgotCQkgICAgICAgbWxlLT50eXBlICE9IERMTV9NTEVfTUlHUkFUSU9OKTsKKwlmb3IgKGkgPSAwOyBpIDwgRExNX0hBU0hfQlVDS0VUUzsgaSsrKSB7CisJCWJ1Y2tldCA9IGRsbV9tYXN0ZXJfaGFzaChkbG0sIGkpOworCQlobGlzdF9mb3JfZWFjaChsaXN0LCBidWNrZXQpIHsKKwkJCW1sZSA9IGhsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBkbG1fbWFzdGVyX2xpc3RfZW50cnksCisJCQkJCSAgbWFzdGVyX2hhc2hfbm9kZSk7CiAKLQkJLyogTUFTVEVSIG1sZXMgYXJlIGluaXRpYXRlZCBsb2NhbGx5LiAgdGhlIHdhaXRpbmcKLQkJICogcHJvY2VzcyB3aWxsIG5vdGljZSB0aGUgbm9kZSBtYXAgY2hhbmdlCi0JCSAqIHNob3J0bHkuICBsZXQgdGhhdCBoYXBwZW4gYXMgbm9ybWFsLiAqLwotCQlpZiAobWxlLT50eXBlID09IERMTV9NTEVfTUFTVEVSKQotCQkJY29udGludWU7CisJCQlCVUdfT04obWxlLT50eXBlICE9IERMTV9NTEVfQkxPQ0sgJiYKKwkJCSAgICAgICBtbGUtPnR5cGUgIT0gRExNX01MRV9NQVNURVIgJiYKKwkJCSAgICAgICBtbGUtPnR5cGUgIT0gRExNX01MRV9NSUdSQVRJT04pOwogCisJCQkvKiBNQVNURVIgbWxlcyBhcmUgaW5pdGlhdGVkIGxvY2FsbHkuIFRoZSB3YWl0aW5nCisJCQkgKiBwcm9jZXNzIHdpbGwgbm90aWNlIHRoZSBub2RlIG1hcCBjaGFuZ2Ugc2hvcnRseS4KKwkJCSAqIExldCB0aGF0IGhhcHBlbiBhcyBub3JtYWwuICovCisJCQlpZiAobWxlLT50eXBlID09IERMTV9NTEVfTUFTVEVSKQorCQkJCWNvbnRpbnVlOwogCi0JCS8qIEJMT0NLIG1sZXMgYXJlIGluaXRpYXRlZCBieSBvdGhlciBub2Rlcy4KLQkJICogbmVlZCB0byBjbGVhbiB1cCBpZiB0aGUgZGVhZCBub2RlIHdvdWxkIGhhdmUKLQkJICogYmVlbiB0aGUgbWFzdGVyLiAqLwotCQlpZiAobWxlLT50eXBlID09IERMTV9NTEVfQkxPQ0spIHsKLQkJCWludCBiaXQ7Ci0KLQkJCXNwaW5fbG9jaygmbWxlLT5zcGlubG9jayk7Ci0JCQliaXQgPSBmaW5kX25leHRfYml0KG1sZS0+bWF5YmVfbWFwLCBPMk5NX01BWF9OT0RFUywgMCk7Ci0JCQlpZiAoYml0ICE9IGRlYWRfbm9kZSkgewotCQkJCW1sb2coMCwgIm1sZSBmb3VuZCwgYnV0IGRlYWQgbm9kZSAldSB3b3VsZCAiCi0JCQkJICAgICAibm90IGhhdmUgYmVlbiBtYXN0ZXJcbiIsIGRlYWRfbm9kZSk7Ci0JCQkJc3Bpbl91bmxvY2soJm1sZS0+c3BpbmxvY2spOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBtdXN0IGRyb3AgdGhlIHJlZmNvdW50IGJ5IG9uZSBzaW5jZSB0aGUKLQkJCQkgKiBhc3NlcnRfbWFzdGVyIHdpbGwgbmV2ZXIgYXJyaXZlLiAgdGhpcwotCQkJCSAqIG1heSByZXN1bHQgaW4gdGhlIG1sZSBiZWluZyB1bmxpbmtlZCBhbmQKLQkJCQkgKiBmcmVlZCwgYnV0IHRoZXJlIG1heSBzdGlsbCBiZSBhIHByb2Nlc3MKLQkJCQkgKiB3YWl0aW5nIGluIHRoZSBkbG1sb2NrIHBhdGggd2hpY2ggaXMgZmluZS4gKi8KLQkJCQltbG9nKDAsICJub2RlICV1IHdhcyBleHBlY3RlZCBtYXN0ZXJcbiIsCi0JCQkJICAgICBkZWFkX25vZGUpOwotCQkJCWF0b21pY19zZXQoJm1sZS0+d29rZW4sIDEpOwotCQkJCXNwaW5fdW5sb2NrKCZtbGUtPnNwaW5sb2NrKTsKLQkJCQl3YWtlX3VwKCZtbGUtPndxKTsKLQkJCQkvKiBkbyBub3QgbmVlZCBldmVudHMgYW55IGxvbmdlciwgc28gZGV0YWNoIAotCQkJCSAqIGZyb20gaGVhcnRiZWF0ICovCi0JCQkJX19kbG1fbWxlX2RldGFjaF9oYl9ldmVudHMoZGxtLCBtbGUpOwotCQkJCV9fZGxtX3B1dF9tbGUobWxlKTsKKwkJCS8qIEJMT0NLIG1sZXMgYXJlIGluaXRpYXRlZCBieSBvdGhlciBub2Rlcy4gTmVlZCB0bworCQkJICogY2xlYW4gdXAgaWYgdGhlIGRlYWQgbm9kZSB3b3VsZCBoYXZlIGJlZW4gdGhlCisJCQkgKiBtYXN0ZXIuICovCisJCQlpZiAobWxlLT50eXBlID09IERMTV9NTEVfQkxPQ0spIHsKKwkJCQlkbG1fY2xlYW5fYmxvY2tfbWxlKGRsbSwgbWxlLCBkZWFkX25vZGUpOworCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJY29udGludWU7Ci0JCX0KIAotCQkvKiBldmVyeXRoaW5nIGVsc2UgaXMgYSBNSUdSQVRJT04gbWxlICovCisJCQkvKiBFdmVyeXRoaW5nIGVsc2UgaXMgYSBNSUdSQVRJT04gbWxlICovCiAKLQkJLyogdGhlIHJ1bGUgZm9yIE1JR1JBVElPTiBtbGVzIGlzIHRoYXQgdGhlIG1hc3RlcgotCQkgKiBiZWNvbWVzIFVOS05PV04gaWYgKmVpdGhlciogdGhlIG9yaWdpbmFsIG9yCi0JCSAqIHRoZSBuZXcgbWFzdGVyIGRpZXMuICBhbGwgVU5LTk9XTiBsb2NrcmVzZXMKLQkJICogYXJlIHNlbnQgdG8gd2hpY2hldmVyIG5vZGUgYmVjb21lcyB0aGUgcmVjb3ZlcnkKLQkJICogbWFzdGVyLiAgdGhlIG5ldyBtYXN0ZXIgaXMgcmVzcG9uc2libGUgZm9yCi0JCSAqIGRldGVybWluaW5nIGlmIHRoZXJlIGlzIHN0aWxsIGEgbWFzdGVyIGZvcgotCQkgKiB0aGlzIGxvY2tyZXMsIG9yIGlmIGhlIG5lZWRzIHRvIHRha2Ugb3ZlcgotCQkgKiBtYXN0ZXJ5LiAgZWl0aGVyIHdheSwgdGhpcyBub2RlIHNob3VsZCBleHBlY3QKLQkJICogYW5vdGhlciBtZXNzYWdlIHRvIHJlc29sdmUgdGhpcy4gKi8KLQkJaWYgKG1sZS0+bWFzdGVyICE9IGRlYWRfbm9kZSAmJgotCQkgICAgbWxlLT5uZXdfbWFzdGVyICE9IGRlYWRfbm9kZSkKLQkJCWNvbnRpbnVlOworCQkJLyogVGhlIHJ1bGUgZm9yIE1JR1JBVElPTiBtbGVzIGlzIHRoYXQgdGhlIG1hc3RlcgorCQkJICogYmVjb21lcyBVTktOT1dOIGlmICplaXRoZXIqIHRoZSBvcmlnaW5hbCBvciB0aGUgbmV3CisJCQkgKiBtYXN0ZXIgZGllcy4gQWxsIFVOS05PV04gbG9ja3JlcycgYXJlIHNlbnQgdG8KKwkJCSAqIHdoaWNoZXZlciBub2RlIGJlY29tZXMgdGhlIHJlY292ZXJ5IG1hc3Rlci4gVGhlIG5ldworCQkJICogbWFzdGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyBpZiB0aGVyZSBpcworCQkJICogc3RpbGwgYSBtYXN0ZXIgZm9yIHRoaXMgbG9ja3Jlcywgb3IgaWYgaGUgbmVlZHMgdG8KKwkJCSAqIHRha2Ugb3ZlciBtYXN0ZXJ5LiBFaXRoZXIgd2F5LCB0aGlzIG5vZGUgc2hvdWxkCisJCQkgKiBleHBlY3QgYW5vdGhlciBtZXNzYWdlIHRvIHJlc29sdmUgdGhpcy4gKi8KIAotCQkvKiBpZiB3ZSBoYXZlIHJlYWNoZWQgdGhpcyBwb2ludCwgdGhpcyBtbGUgbmVlZHMgdG8KLQkJICogYmUgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IGFuZCBmcmVlZC4gKi8KKwkJCWlmIChtbGUtPm1hc3RlciAhPSBkZWFkX25vZGUgJiYKKwkJCSAgICBtbGUtPm5ld19tYXN0ZXIgIT0gZGVhZF9ub2RlKQorCQkJCWNvbnRpbnVlOwogCi0JCS8qIHJlbW92ZSBmcm9tIHRoZSBsaXN0IGVhcmx5LiAgTk9URTogdW5saW5raW5nCi0JCSAqIGxpc3RfaGVhZCB3aGlsZSBpbiBsaXN0X2Zvcl9lYWNoX3NhZmUgKi8KLQkJX19kbG1fbWxlX2RldGFjaF9oYl9ldmVudHMoZGxtLCBtbGUpOwotCQlzcGluX2xvY2soJm1sZS0+c3BpbmxvY2spOwotCQlsaXN0X2RlbF9pbml0KCZtbGUtPmxpc3QpOwotCQlhdG9taWNfc2V0KCZtbGUtPndva2VuLCAxKTsKLQkJc3Bpbl91bmxvY2soJm1sZS0+c3BpbmxvY2spOwotCQl3YWtlX3VwKCZtbGUtPndxKTsKKwkJCS8qIElmIHdlIGhhdmUgcmVhY2hlZCB0aGlzIHBvaW50LCB0aGlzIG1sZSBuZWVkcyB0byBiZQorCQkJICogcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IGFuZCBmcmVlZC4gKi8KKwkJCWRsbV9jbGVhbl9taWdyYXRpb25fbWxlKGRsbSwgbWxlKTsKIAotCQltbG9nKDAsICIlczogbm9kZSAldSBkaWVkIGR1cmluZyBtaWdyYXRpb24gZnJvbSAiCi0JCSAgICAgIiV1IHRvICV1IVxuIiwgZGxtLT5uYW1lLCBkZWFkX25vZGUsCi0JCSAgICAgbWxlLT5tYXN0ZXIsIG1sZS0+bmV3X21hc3Rlcik7Ci0JCS8qIGlmIHRoZXJlIGlzIGEgbG9ja3JlcyBhc3NvY2lhdGVkIHdpdGggdGhpcwotCSAJICogbWxlLCBmaW5kIGl0IGFuZCBzZXQgaXRzIG93bmVyIHRvIFVOS05PV04gKi8KLQkJaGFzaCA9IGRsbV9sb2NraWRfaGFzaChtbGUtPnUubmFtZS5uYW1lLCBtbGUtPnUubmFtZS5sZW4pOwotCQlyZXMgPSBfX2RsbV9sb29rdXBfbG9ja3JlcyhkbG0sIG1sZS0+dS5uYW1lLm5hbWUsCi0JCQkJCSAgIG1sZS0+dS5uYW1lLmxlbiwgaGFzaCk7Ci0JCWlmIChyZXMpIHsKLQkJCS8qIHVuZm9ydHVuYXRlbHkgaWYgd2UgaGl0IHRoaXMgcmFyZSBjYXNlLCBvdXIKLQkJIAkgKiBsb2NrIG9yZGVyaW5nIGlzIG1lc3NlZC4gIHdlIG5lZWQgdG8gZHJvcAotCQkgCSAqIHRoZSBtYXN0ZXIgbG9jayBzbyB0aGF0IHdlIGNhbiB0YWtlIHRoZQotCQkgIAkgKiBsb2NrcmVzIGxvY2ssIG1lYW5pbmcgdGhhdCB3ZSB3aWxsIGhhdmUgdG8KKwkJCW1sb2coMCwgIiVzOiBub2RlICV1IGRpZWQgZHVyaW5nIG1pZ3JhdGlvbiBmcm9tICIKKwkJCSAgICAgIiV1IHRvICV1IVxuIiwgZGxtLT5uYW1lLCBkZWFkX25vZGUsIG1sZS0+bWFzdGVyLAorCQkJICAgICBtbGUtPm5ld19tYXN0ZXIpOworCisJCQkvKiBJZiB3ZSBmaW5kIGEgbG9ja3JlcyBhc3NvY2lhdGVkIHdpdGggdGhlIG1sZSwgd2UndmUKKwkJCSAqIGhpdCB0aGlzIHJhcmUgY2FzZSB0aGF0IG1lc3NlcyB1cCBvdXIgbG9jayBvcmRlcmluZy4KKwkJCSAqIElmIHNvLCB3ZSBuZWVkIHRvIGRyb3AgdGhlIG1hc3RlciBsb2NrIHNvIHRoYXQgd2UgY2FuCisJCQkgKiB0YWtlIHRoZSBsb2NrcmVzIGxvY2ssIG1lYW5pbmcgdGhhdCB3ZSB3aWxsIGhhdmUgdG8KIAkJCSAqIHJlc3RhcnQgZnJvbSB0aGUgaGVhZCBvZiBsaXN0LiAqLwotCQkJc3Bpbl91bmxvY2soJmRsbS0+bWFzdGVyX2xvY2spOworCQkJcmVzID0gZGxtX3Jlc2V0X21sZXJlc19vd25lcihkbG0sIG1sZSk7CisJCQlpZiAocmVzKQorCQkJCS8qIHJlc3RhcnQgKi8KKwkJCQlnb3RvIHRvcDsKIAotCQkJLyogbW92ZSBsb2NrcmVzIG9udG8gcmVjb3ZlcnkgbGlzdCAqLwotCQkJc3Bpbl9sb2NrKCZyZXMtPnNwaW5sb2NrKTsKLQkJCWRsbV9zZXRfbG9ja3Jlc19vd25lcihkbG0sIHJlcywKLQkJCQkgICAgICAJRExNX0xPQ0tfUkVTX09XTkVSX1VOS05PV04pOwotCQkJZGxtX21vdmVfbG9ja3Jlc190b19yZWNvdmVyeV9saXN0KGRsbSwgcmVzKTsKLQkJCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKLQkJCWRsbV9sb2NrcmVzX3B1dChyZXMpOwotCi0JCQkvKiBhYm91dCB0byBnZXQgcmlkIG9mIG1sZSwgZGV0YWNoIGZyb20gaGVhcnRiZWF0ICovCi0JCQlfX2RsbV9tbGVfZGV0YWNoX2hiX2V2ZW50cyhkbG0sIG1sZSk7Ci0KLQkJCS8qIGR1bXAgdGhlIG1sZSAqLwotCQkJc3Bpbl9sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKKwkJCS8qIFRoaXMgbWF5IGJlIHRoZSBsYXN0IHJlZmVyZW5jZSAqLwogCQkJX19kbG1fcHV0X21sZShtbGUpOwotCQkJc3Bpbl91bmxvY2soJmRsbS0+bWFzdGVyX2xvY2spOwotCi0JCQkvKiByZXN0YXJ0ICovCi0JCQlnb3RvIHRvcDsKIAkJfQotCi0JCS8qIHRoaXMgbWF5IGJlIHRoZSBsYXN0IHJlZmVyZW5jZSAqLwotCQlfX2RsbV9wdXRfbWxlKG1sZSk7CiAJfQogCXNwaW5fdW5sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKIH0KIAotCiBpbnQgZGxtX2ZpbmlzaF9taWdyYXRpb24oc3RydWN0IGRsbV9jdHh0ICpkbG0sIHN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzLAogCQkJIHU4IG9sZF9tYXN0ZXIpCiB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtdGhyZWFkLmMgYi9mcy9vY2ZzMi9kbG0vZGxtdGhyZWFkLmMKaW5kZXggNDA2MGJiMy4uZDQ5MGI2NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbXRocmVhZC5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG10aHJlYWQuYwpAQCAtMTYyLDEyICsxNjIsMjggQEAKIAogCXNwaW5fbG9jaygmcmVzLT5zcGlubG9jayk7CiAJaWYgKCFfX2RsbV9sb2NrcmVzX3VudXNlZChyZXMpKSB7Ci0JCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKIAkJbWxvZygwLCAiJXM6JS4qczogdHJpZWQgdG8gcHVyZ2UgYnV0IG5vdCB1bnVzZWRcbiIsCiAJCSAgICAgZGxtLT5uYW1lLCByZXMtPmxvY2tuYW1lLmxlbiwgcmVzLT5sb2NrbmFtZS5uYW1lKTsKLQkJcmV0dXJuIC1FTk9URU1QVFk7CisJCV9fZGxtX3ByaW50X29uZV9sb2NrX3Jlc291cmNlKHJlcyk7CisJCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKKwkJQlVHKCk7CiAJfQorCisJaWYgKHJlcy0+c3RhdGUgJiBETE1fTE9DS19SRVNfTUlHUkFUSU5HKSB7CisJCW1sb2coMCwgIiVzOiUuKnM6IERlbGF5IGRyb3ByZWYgYXMgdGhpcyBsb2NrcmVzIGlzICIKKwkJICAgICAiYmVpbmcgcmVtYXN0ZXJlZFxuIiwgZGxtLT5uYW1lLCByZXMtPmxvY2tuYW1lLmxlbiwKKwkJICAgICByZXMtPmxvY2tuYW1lLm5hbWUpOworCQkvKiBSZS1hZGQgdGhlIGxvY2tyZXMgdG8gdGhlIGVuZCBvZiB0aGUgcHVyZ2UgbGlzdCAqLworCQlpZiAoIWxpc3RfZW1wdHkoJnJlcy0+cHVyZ2UpKSB7CisJCQlsaXN0X2RlbF9pbml0KCZyZXMtPnB1cmdlKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnJlcy0+cHVyZ2UsICZkbG0tPnB1cmdlX2xpc3QpOworCQl9CisJCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJbWFzdGVyID0gKHJlcy0+b3duZXIgPT0gZGxtLT5ub2RlX251bSk7CisKIAlpZiAoIW1hc3RlcikKIAkJcmVzLT5zdGF0ZSB8PSBETE1fTE9DS19SRVNfRFJPUFBJTkdfUkVGOwogCXNwaW5fdW5sb2NrKCZyZXMtPnNwaW5sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWdsdWUuYyBiL2ZzL29jZnMyL2RsbWdsdWUuYwppbmRleCA3MjE5YTg2Li5lMTVmYzdkIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG1nbHVlLmMKKysrIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCkBAIC0yNDQsNiArMjQ0LDEwIEBACiAJLmZsYWdzCQk9IDAsCiB9OwogCitzdGF0aWMgc3RydWN0IG9jZnMyX2xvY2tfcmVzX29wcyBvY2ZzMl9uZnNfc3luY19sb3BzID0geworCS5mbGFncwkJPSAwLAorfTsKKwogc3RhdGljIHN0cnVjdCBvY2ZzMl9sb2NrX3Jlc19vcHMgb2NmczJfZGVudHJ5X2xvcHMgPSB7CiAJLmdldF9vc2IJPSBvY2ZzMl9nZXRfZGVudHJ5X29zYiwKIAkucG9zdF91bmxvY2sJPSBvY2ZzMl9kZW50cnlfcG9zdF91bmxvY2ssCkBAIC02MjIsNiArNjI2LDE3IEBACiAJCQkJICAgJm9jZnMyX3JlbmFtZV9sb3BzLCBvc2IpOwogfQogCitzdGF0aWMgdm9pZCBvY2ZzMl9uZnNfc3luY19sb2NrX3Jlc19pbml0KHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqcmVzLAorCQkJCQkgc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJLyogbmZzX3N5bmMgbG9ja3JlcyBkb2Vzbid0IGNvbWUgZnJvbSBhIHNsYWIgc28gd2UgY2FsbCBpbml0CisJICogb25jZSBvbiBpdCBtYW51YWxseS4gICovCisJb2NmczJfbG9ja19yZXNfaW5pdF9vbmNlKHJlcyk7CisJb2NmczJfYnVpbGRfbG9ja19uYW1lKE9DRlMyX0xPQ0tfVFlQRV9ORlNfU1lOQywgMCwgMCwgcmVzLT5sX25hbWUpOworCW9jZnMyX2xvY2tfcmVzX2luaXRfY29tbW9uKG9zYiwgcmVzLCBPQ0ZTMl9MT0NLX1RZUEVfTkZTX1NZTkMsCisJCQkJICAgJm9jZnMyX25mc19zeW5jX2xvcHMsIG9zYik7Cit9CisKIHZvaWQgb2NmczJfZmlsZV9sb2NrX3Jlc19pbml0KHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcywKIAkJCSAgICAgIHN0cnVjdCBvY2ZzMl9maWxlX3ByaXZhdGUgKmZwKQogewpAQCAtMjQxNyw2ICsyNDMyLDM0IEBACiAJCW9jZnMyX2NsdXN0ZXJfdW5sb2NrKG9zYiwgbG9ja3JlcywgRExNX0xPQ0tfRVgpOwogfQogCitpbnQgb2NmczJfbmZzX3N5bmNfbG9jayhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgaW50IGV4KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gJm9zYi0+b3NiX25mc19zeW5jX2xvY2tyZXM7CisKKwlpZiAob2NmczJfaXNfaGFyZF9yZWFkb25seShvc2IpKQorCQlyZXR1cm4gLUVST0ZTOworCisJaWYgKG9jZnMyX21vdW50X2xvY2FsKG9zYikpCisJCXJldHVybiAwOworCisJc3RhdHVzID0gb2NmczJfY2x1c3Rlcl9sb2NrKG9zYiwgbG9ja3JlcywgZXggPyBMS01fRVhNT0RFIDogTEtNX1BSTU9ERSwKKwkJCQkgICAgMCwgMCk7CisJaWYgKHN0YXR1cyA8IDApCisJCW1sb2coTUxfRVJST1IsICJsb2NrIG9uIG5mcyBzeW5jIGxvY2sgZmFpbGVkICVkXG4iLCBzdGF0dXMpOworCisJcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBvY2ZzMl9uZnNfc3luY191bmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIGludCBleCkKK3sKKwlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMgPSAmb3NiLT5vc2JfbmZzX3N5bmNfbG9ja3JlczsKKworCWlmICghb2NmczJfbW91bnRfbG9jYWwob3NiKSkKKwkJb2NmczJfY2x1c3Rlcl91bmxvY2sob3NiLCBsb2NrcmVzLAorCQkJCSAgICAgZXggPyBMS01fRVhNT0RFIDogTEtNX1BSTU9ERSk7Cit9CisKIGludCBvY2ZzMl9kZW50cnlfbG9jayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBleCkKIHsKIAlpbnQgcmV0OwpAQCAtMjc5OCw2ICsyODQxLDcgQEAKIGxvY2FsOgogCW9jZnMyX3N1cGVyX2xvY2tfcmVzX2luaXQoJm9zYi0+b3NiX3N1cGVyX2xvY2tyZXMsIG9zYik7CiAJb2NmczJfcmVuYW1lX2xvY2tfcmVzX2luaXQoJm9zYi0+b3NiX3JlbmFtZV9sb2NrcmVzLCBvc2IpOworCW9jZnMyX25mc19zeW5jX2xvY2tfcmVzX2luaXQoJm9zYi0+b3NiX25mc19zeW5jX2xvY2tyZXMsIG9zYik7CiAKIAlvc2ItPmNjb25uID0gY29ubjsKIApAQCAtMjgzMyw2ICsyODc3LDcgQEAKIAogCW9jZnMyX2xvY2tfcmVzX2ZyZWUoJm9zYi0+b3NiX3N1cGVyX2xvY2tyZXMpOwogCW9jZnMyX2xvY2tfcmVzX2ZyZWUoJm9zYi0+b3NiX3JlbmFtZV9sb2NrcmVzKTsKKwlvY2ZzMl9sb2NrX3Jlc19mcmVlKCZvc2ItPm9zYl9uZnNfc3luY19sb2NrcmVzKTsKIAogCW9jZnMyX2NsdXN0ZXJfZGlzY29ubmVjdChvc2ItPmNjb25uLCBoYW5ndXBfcGVuZGluZyk7CiAJb3NiLT5jY29ubiA9IE5VTEw7CkBAIC0zMDE1LDYgKzMwNjAsNyBAQAogewogCW9jZnMyX3NpbXBsZV9kcm9wX2xvY2tyZXMob3NiLCAmb3NiLT5vc2Jfc3VwZXJfbG9ja3Jlcyk7CiAJb2NmczJfc2ltcGxlX2Ryb3BfbG9ja3Jlcyhvc2IsICZvc2ItPm9zYl9yZW5hbWVfbG9ja3Jlcyk7CisJb2NmczJfc2ltcGxlX2Ryb3BfbG9ja3Jlcyhvc2IsICZvc2ItPm9zYl9uZnNfc3luY19sb2NrcmVzKTsKIH0KIAogaW50IG9jZnMyX2Ryb3BfaW5vZGVfbG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWdsdWUuaCBiL2ZzL29jZnMyL2RsbWdsdWUuaAppbmRleCAzZjhkOTk4Li5lMWZkNTcyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG1nbHVlLmgKKysrIGIvZnMvb2NmczIvZGxtZ2x1ZS5oCkBAIC0xMTUsNiArMTE1LDggQEAKIAkJCWludCBleCk7CiBpbnQgb2NmczJfcmVuYW1lX2xvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpOwogdm9pZCBvY2ZzMl9yZW5hbWVfdW5sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKK2ludCBvY2ZzMl9uZnNfc3luY19sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBpbnQgZXgpOwordm9pZCBvY2ZzMl9uZnNfc3luY191bmxvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIGludCBleCk7CiBpbnQgb2NmczJfZGVudHJ5X2xvY2soc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZXgpOwogdm9pZCBvY2ZzMl9kZW50cnlfdW5sb2NrKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGV4KTsKIGludCBvY2ZzMl9maWxlX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBleCwgaW50IHRyeWxvY2spOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZXhwb3J0LmMgYi9mcy9vY2ZzMi9leHBvcnQuYwppbmRleCAyZjI3YjMzLi5kZTNkYThlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9leHBvcnQuYworKysgYi9mcy9vY2ZzMi9leHBvcnQuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAjaW5jbHVkZSAib2NmczIuaCIKIAorI2luY2x1ZGUgImFsbG9jLmgiCiAjaW5jbHVkZSAiZGlyLmgiCiAjaW5jbHVkZSAiZGxtZ2x1ZS5oIgogI2luY2x1ZGUgImRjYWNoZS5oIgpAQCAtMzgsNiArMzksNyBAQAogI2luY2x1ZGUgImlub2RlLmgiCiAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgorI2luY2x1ZGUgInN1YmFsbG9jLmgiCiAKIHN0cnVjdCBvY2ZzMl9pbm9kZV9oYW5kbGUKIHsKQEAgLTQ5LDI5ICs1MSw5NyBAQAogCQlzdHJ1Y3Qgb2NmczJfaW5vZGVfaGFuZGxlICpoYW5kbGUpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKHNiKTsKKwl1NjQgYmxrbm8gPSBoYW5kbGUtPmloX2Jsa25vOworCWludCBzdGF0dXMsIHNldDsKIAlzdHJ1Y3QgZGVudHJ5ICpyZXN1bHQ7CiAKIAltbG9nX2VudHJ5KCIoMHglcCwgMHglcClcbiIsIHNiLCBoYW5kbGUpOwogCi0JaWYgKGhhbmRsZS0+aWhfYmxrbm8gPT0gMCkgewotCQltbG9nX2Vycm5vKC1FU1RBTEUpOwotCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKKwlpZiAoYmxrbm8gPT0gMCkgeworCQltbG9nKDAsICJuZnMgd2FudHMgaW5vZGUgd2l0aCBibGtubzogMFxuIik7CisJCXJlc3VsdCA9IEVSUl9QVFIoLUVTVEFMRSk7CisJCWdvdG8gYmFpbDsKIAl9CiAKLQlpbm9kZSA9IG9jZnMyX2lnZXQoT0NGUzJfU0Ioc2IpLCBoYW5kbGUtPmloX2Jsa25vLCAwLCAwKTsKKwlpbm9kZSA9IG9jZnMyX2lsb29rdXAoc2IsIGJsa25vKTsKKwkvKgorCSAqIElmIHRoZSBpbm9kZSBleGlzdHMgaW4gbWVtb3J5LCB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgaXQncworCSAqIGdlbmVyYXRpb24gbnVtYmVyCisJICovCisJaWYgKGlub2RlKQorCQlnb3RvIGNoZWNrX2dlbjsKIAotCWlmIChJU19FUlIoaW5vZGUpKQotCQlyZXR1cm4gKHZvaWQgKilpbm9kZTsKKwkvKgorCSAqIFRoaXMgd2lsbCBzeW5jaHJvbml6ZSB1cyBhZ2FpbnN0IG9jZnMyX2RlbGV0ZV9pbm9kZSgpIG9uCisJICogYWxsIG5vZGVzCisJICovCisJc3RhdHVzID0gb2NmczJfbmZzX3N5bmNfbG9jayhvc2IsIDEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2coTUxfRVJST1IsICJnZXR0aW5nIG5mcyBzeW5jIGxvY2soRVgpIGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJZ290byBjaGVja19lcnI7CisJfQogCisJc3RhdHVzID0gb2NmczJfdGVzdF9pbm9kZV9iaXQob3NiLCBibGtubywgJnNldCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJaWYgKHN0YXR1cyA9PSAtRUlOVkFMKSB7CisJCQkvKgorCQkJICogVGhlIGJsa25vIE5GUyBnYXZlIHVzIGRvZXNuJ3QgZXZlbiBzaG93IHVwCisJCQkgKiBhcyBhbiBpbm9kZSwgd2UgcmV0dXJuIC1FU1RBTEUgdG8gYmUKKwkJCSAqIG5pY2UKKwkJCSAqLworCQkJbWxvZygwLCAidGVzdCBpbm9kZSBiaXQgZmFpbGVkICVkXG4iLCBzdGF0dXMpOworCQkJc3RhdHVzID0gLUVTVEFMRTsKKwkJfSBlbHNlIHsKKwkJCW1sb2coTUxfRVJST1IsICJ0ZXN0IGlub2RlIGJpdCBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CisJCX0KKwkJZ290byB1bmxvY2tfbmZzX3N5bmM7CisJfQorCisJLyogSWYgdGhlIGlub2RlIGFsbG9jYXRvciBiaXQgaXMgY2xlYXIsIHRoaXMgaW5vZGUgbXVzdCBiZSBzdGFsZSAqLworCWlmICghc2V0KSB7CisJCW1sb2coMCwgImlub2RlICVsbHUgc3ViYWxsb2MgYml0IGlzIGNsZWFyXG4iLCBibGtubyk7CisJCXN0YXR1cyA9IC1FU1RBTEU7CisJCWdvdG8gdW5sb2NrX25mc19zeW5jOworCX0KKworCWlub2RlID0gb2NmczJfaWdldChvc2IsIGJsa25vLCAwLCAwKTsKKwordW5sb2NrX25mc19zeW5jOgorCW9jZnMyX25mc19zeW5jX3VubG9jayhvc2IsIDEpOworCitjaGVja19lcnI6CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJaWYgKHN0YXR1cyA9PSAtRVNUQUxFKSB7CisJCQltbG9nKDAsICJzdGFsZSBpbm9kZSBpbm86ICVsbHUgZ2VuZXJhdGlvbjogJXVcbiIsCisJCQkgICAgIGJsa25vLCBoYW5kbGUtPmloX2dlbmVyYXRpb24pOworCQl9CisJCXJlc3VsdCA9IEVSUl9QVFIoc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKworCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCW1sb2dfZXJybm8oUFRSX0VSUihpbm9kZSkpOworCQlyZXN1bHQgPSAodm9pZCAqKWlub2RlOworCQlnb3RvIGJhaWw7CisJfQorCitjaGVja19nZW46CiAJaWYgKGhhbmRsZS0+aWhfZ2VuZXJhdGlvbiAhPSBpbm9kZS0+aV9nZW5lcmF0aW9uKSB7CiAJCWlwdXQoaW5vZGUpOwotCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKKwkJbWxvZygwLCAic3RhbGUgaW5vZGUgaW5vOiAlbGx1IGdlbmVyYXRpb246ICV1XG4iLCBibGtubywKKwkJICAgICBoYW5kbGUtPmloX2dlbmVyYXRpb24pOworCQlyZXN1bHQgPSBFUlJfUFRSKC1FU1RBTEUpOworCQlnb3RvIGJhaWw7CiAJfQogCiAJcmVzdWx0ID0gZF9vYnRhaW5fYWxpYXMoaW5vZGUpOwogCWlmICghSVNfRVJSKHJlc3VsdCkpCiAJCXJlc3VsdC0+ZF9vcCA9ICZvY2ZzMl9kZW50cnlfb3BzOworCWVsc2UKKwkJbWxvZ19lcnJubyhQVFJfRVJSKHJlc3VsdCkpOwogCitiYWlsOgogCW1sb2dfZXhpdF9wdHIocmVzdWx0KTsKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW5vZGUuYyBiL2ZzL29jZnMyL2lub2RlLmMKaW5kZXggMjI5ZTcwNy4uMTBlMWZhODcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmMKKysrIGIvZnMvb2NmczIvaW5vZGUuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIm9jZnMyLmgiCiAKICNpbmNsdWRlICJhbGxvYy5oIgorI2luY2x1ZGUgImRpci5oIgogI2luY2x1ZGUgImJsb2NrY2hlY2suaCIKICNpbmNsdWRlICJkbG1nbHVlLmgiCiAjaW5jbHVkZSAiZXh0ZW50X21hcC5oIgpAQCAtMTEyLDYgKzExMywxNyBAQAogCQlvaS0+aXBfYXR0ciB8PSBPQ0ZTMl9ESVJTWU5DX0ZMOwogfQogCitzdHJ1Y3QgaW5vZGUgKm9jZnMyX2lsb29rdXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGJsa25vKQoreworCXN0cnVjdCBvY2ZzMl9maW5kX2lub2RlX2FyZ3MgYXJnczsKKworCWFyZ3MuZmlfYmxrbm8gPSBibGtubzsKKwlhcmdzLmZpX2ZsYWdzID0gMDsKKwlhcmdzLmZpX2lubyA9IGlub19mcm9tX2Jsa25vKHNiLCBibGtubyk7CisJYXJncy5maV9zeXNmaWxlX3R5cGUgPSAwOworCisJcmV0dXJuIGlsb29rdXA1KHNiLCBibGtubywgb2NmczJfZmluZF9hY3RvciwgJmFyZ3MpOworfQogc3RydWN0IGlub2RlICpvY2ZzMl9pZ2V0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCB1NjQgYmxrbm8sIHVuc2lnbmVkIGZsYWdzLAogCQkJIGludCBzeXNmaWxlX3R5cGUpCiB7CkBAIC0yNzUsNyArMjg3LDcgQEAKIAkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKIAkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGZlLT5pX2Jsa25vKSk7CiAKLQlpbm9kZS0+aV9ubGluayA9IGxlMTZfdG9fY3B1KGZlLT5pX2xpbmtzX2NvdW50KTsKKwlpbm9kZS0+aV9ubGluayA9IG9jZnMyX3JlYWRfbGlua3NfY291bnQoZmUpOwogCiAJaWYgKGZlLT5pX2ZsYWdzICYgY3B1X3RvX2xlMzIoT0NGUzJfU1lTVEVNX0ZMKSkgewogCQlPQ0ZTMl9JKGlub2RlKS0+aXBfZmxhZ3MgfD0gT0NGUzJfSU5PREVfU1lTVEVNX0ZJTEU7CkBAIC0zNTEsNiArMzYzLDggQEAKIAogCW9jZnMyX3NldF9pbm9kZV9mbGFncyhpbm9kZSk7CiAKKwlPQ0ZTMl9JKGlub2RlKS0+aXBfbGFzdF91c2VkX3Nsb3QgPSAwOworCU9DRlMyX0koaW5vZGUpLT5pcF9sYXN0X3VzZWRfZ3JvdXAgPSAwOwogCW1sb2dfZXhpdF92b2lkKCk7CiB9CiAKQEAgLTYwNiw3ICs2MjAsNyBAQAogCX0KIAogCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfREVMRVRFX0lOT0RFX0NSRURJVFMgKwotCQkJCQlvY2ZzMl9xdW90YV90cmFuc19jcmVkaXRzKGlub2RlLT5pX3NiKSk7CisJCQkJICAgb2NmczJfcXVvdGFfdHJhbnNfY3JlZGl0cyhpbm9kZS0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQlzdGF0dXMgPSBQVFJfRVJSKGhhbmRsZSk7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTc0MCw2ICs3NTQsMTUgQEAKIAkJZ290byBiYWlsX3VubG9ja19kaXI7CiAJfQogCisJLyogUmVtb3ZlIGFueSBkaXIgaW5kZXggdHJlZSAqLworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCXN0YXR1cyA9IG9jZnMyX2R4X2Rpcl90cnVuY2F0ZShpbm9kZSwgZGlfYmgpOworCQlpZiAoc3RhdHVzKSB7CisJCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCQlnb3RvIGJhaWxfdW5sb2NrX2RpcjsKKwkJfQorCX0KKwogCS8qRnJlZSBleHRlbmRlZCBhdHRyaWJ1dGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlub2RlLiovCiAJc3RhdHVzID0gb2NmczJfeGF0dHJfcmVtb3ZlKGlub2RlLCBkaV9iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTk0OSw2ICs5NzIsMTcgQEAKIAkJZ290byBiYWlsOwogCX0KIAorCS8qCisJICogU3luY2hyb25pemUgdXMgYWdhaW5zdCBvY2ZzMl9nZXRfZGVudHJ5LiBXZSB0YWtlIHRoaXMgaW4KKwkgKiBzaGFyZWQgbW9kZSBzbyB0aGF0IGFsbCBub2RlcyBjYW4gc3RpbGwgY29uY3VycmVudGx5CisJICogcHJvY2VzcyBkZWxldGVzLgorCSAqLworCXN0YXR1cyA9IG9jZnMyX25mc19zeW5jX2xvY2soT0NGUzJfU0IoaW5vZGUtPmlfc2IpLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nKE1MX0VSUk9SLCAiZ2V0dGluZyBuZnMgc3luYyBsb2NrKFBSKSBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CisJCW9jZnMyX2NsZWFudXBfZGVsZXRlX2lub2RlKGlub2RlLCAwKTsKKwkJZ290byBiYWlsX3VuYmxvY2s7CisJfQogCS8qIExvY2sgZG93biB0aGUgaW5vZGUuIFRoaXMgZ2l2ZXMgdXMgYW4gdXAgdG8gZGF0ZSB2aWV3IG9mCiAJICogaXQncyBtZXRhZGF0YSAoZm9yIHZlcmlmaWNhdGlvbiksIGFuZCBhbGxvd3MgdXMgdG8KIAkgKiBzZXJpYWxpemUgZGVsZXRlX2lub2RlIG9uIG11bHRpcGxlIG5vZGVzLgpAQCAtOTYyLDcgKzk5Niw3IEBACiAJCWlmIChzdGF0dXMgIT0gLUVOT0VOVCkKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJb2NmczJfY2xlYW51cF9kZWxldGVfaW5vZGUoaW5vZGUsIDApOwotCQlnb3RvIGJhaWxfdW5ibG9jazsKKwkJZ290byBiYWlsX3VubG9ja19uZnNfc3luYzsKIAl9CiAKIAkvKiBRdWVyeSB0aGUgY2x1c3Rlci4gVGhpcyB3aWxsIGJlIHRoZSBmaW5hbCBkZWNpc2lvbiBtYWRlCkBAIC0xMDA1LDYgKzEwMzksMTAgQEAKIGJhaWxfdW5sb2NrX2lub2RlOgogCW9jZnMyX2lub2RlX3VubG9jayhpbm9kZSwgMSk7CiAJYnJlbHNlKGRpX2JoKTsKKworYmFpbF91bmxvY2tfbmZzX3N5bmM6CisJb2NmczJfbmZzX3N5bmNfdW5sb2NrKE9DRlMyX1NCKGlub2RlLT5pX3NiKSwgMCk7CisKIGJhaWxfdW5ibG9jazoKIAlzdGF0dXMgPSBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9sZHNldCwgTlVMTCk7CiAJaWYgKHN0YXR1cyA8IDApCkBAIC0xMjA1LDcgKzEyNDMsNyBAQAogCXNwaW5fdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfbG9jayk7CiAKIAlmZS0+aV9zaXplID0gY3B1X3RvX2xlNjQoaV9zaXplX3JlYWQoaW5vZGUpKTsKLQlmZS0+aV9saW5rc19jb3VudCA9IGNwdV90b19sZTE2KGlub2RlLT5pX25saW5rKTsKKwlvY2ZzMl9zZXRfbGlua3NfY291bnQoZmUsIGlub2RlLT5pX25saW5rKTsKIAlmZS0+aV91aWQgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV91aWQpOwogCWZlLT5pX2dpZCA9IGNwdV90b19sZTMyKGlub2RlLT5pX2dpZCk7CiAJZmUtPmlfbW9kZSA9IGNwdV90b19sZTE2KGlub2RlLT5pX21vZGUpOwpAQCAtMTI0Miw3ICsxMjgwLDcgQEAKIAlPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzID0gbGUxNl90b19jcHUoZmUtPmlfZHluX2ZlYXR1cmVzKTsKIAlvY2ZzMl9zZXRfaW5vZGVfZmxhZ3MoaW5vZGUpOwogCWlfc2l6ZV93cml0ZShpbm9kZSwgbGU2NF90b19jcHUoZmUtPmlfc2l6ZSkpOwotCWlub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUoZmUtPmlfbGlua3NfY291bnQpOworCWlub2RlLT5pX25saW5rID0gb2NmczJfcmVhZF9saW5rc19jb3VudChmZSk7CiAJaW5vZGUtPmlfdWlkID0gbGUzMl90b19jcHUoZmUtPmlfdWlkKTsKIAlpbm9kZS0+aV9naWQgPSBsZTMyX3RvX2NwdShmZS0+aV9naWQpOwogCWlub2RlLT5pX21vZGUgPSBsZTE2X3RvX2NwdShmZS0+aV9tb2RlKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmggYi9mcy9vY2ZzMi9pbm9kZS5oCmluZGV4IGViM2MzMDIuLmVhNzE1MjUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmgKKysrIGIvZnMvb2NmczIvaW5vZGUuaApAQCAtNzIsNiArNzIsMTAgQEAKIAogCXN0cnVjdCBpbm9kZQkJCXZmc19pbm9kZTsKIAlzdHJ1Y3QgamJkMl9pbm9kZQkJaXBfamlub2RlOworCisJLyogT25seSB2YWxpZCBpZiB0aGUgaW5vZGUgaXMgdGhlIGRpci4gKi8KKwl1MzIJCQkJaXBfbGFzdF91c2VkX3Nsb3Q7CisJdTY0CQkJCWlwX2xhc3RfdXNlZF9ncm91cDsKIH07CiAKIC8qCkBAIC0xMjQsNiArMTI4LDcgQEAKIC8qIEZsYWdzIGZvciBvY2ZzMl9pZ2V0KCkgKi8KICNkZWZpbmUgT0NGUzJfRklfRkxBR19TWVNGSUxFCQkweDEKICNkZWZpbmUgT0NGUzJfRklfRkxBR19PUlBIQU5fUkVDT1ZFUlkJMHgyCitzdHJ1Y3QgaW5vZGUgKm9jZnMyX2lsb29rdXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGZlb2ZmKTsKIHN0cnVjdCBpbm9kZSAqb2NmczJfaWdldChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGZlb2ZmLCB1bnNpZ25lZCBmbGFncywKIAkJCSBpbnQgc3lzZmlsZV90eXBlKTsKIGludCBvY2ZzMl9pbm9kZV9pbml0X3ByaXZhdGUoc3RydWN0IGlub2RlICppbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmMgYi9mcy9vY2ZzMi9qb3VybmFsLmMKaW5kZXggNTdkN2QyNS4uYTIwYTBmMSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5jCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuYwpAQCAtNjUsNiArNjUsMTEgQEAKIHN0YXRpYyBpbnQgb2NmczJfcmVjb3Zlcl9vcnBoYW5zKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSBpbnQgc2xvdCk7CiBzdGF0aWMgaW50IG9jZnMyX2NvbW1pdF90aHJlYWQodm9pZCAqYXJnKTsKK3N0YXRpYyB2b2lkIG9jZnMyX3F1ZXVlX3JlY292ZXJ5X2NvbXBsZXRpb24oc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwsCisJCQkJCSAgICBpbnQgc2xvdF9udW0sCisJCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpsYV9kaW5vZGUsCisJCQkJCSAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICp0bF9kaW5vZGUsCisJCQkJCSAgICBzdHJ1Y3Qgb2NmczJfcXVvdGFfcmVjb3ZlcnkgKnFyZWMpOwogCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl93YWl0X29uX21vdW50KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQogewpAQCAtNzYsMTggKzgxLDk3IEBACiAJcmV0dXJuIF9fb2NmczJfd2FpdF9vbl9tb3VudChvc2IsIDEpOwogfQogCi0KLQogLyoKLSAqIFRoZSByZWNvdmVyeV9saXN0IGlzIGEgc2ltcGxlIGxpbmtlZCBsaXN0IG9mIG5vZGUgbnVtYmVycyB0byByZWNvdmVyLgotICogSXQgaXMgcHJvdGVjdGVkIGJ5IHRoZSByZWNvdmVyeV9sb2NrLgorICogVGhpcyByZXBsYXlfbWFwIGlzIHRvIHRyYWNrIG9ubGluZS9vZmZsaW5lIHNsb3RzLCBzbyB3ZSBjb3VsZCByZWNvdmVyCisgKiBvZmZsaW5lIHNsb3RzIGR1cmluZyByZWNvdmVyeSBhbmQgbW91bnQKICAqLwogCi1zdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwIHsKLQl1bnNpZ25lZCBpbnQgcm1fdXNlZDsKLQl1bnNpZ25lZCBpbnQgKnJtX2VudHJpZXM7CitlbnVtIG9jZnMyX3JlcGxheV9zdGF0ZSB7CisJUkVQTEFZX1VOTkVFREVEID0gMCwJLyogUmVwbGF5IGlzIG5vdCBuZWVkZWQsIHNvIGlnbm9yZSB0aGlzIG1hcCAqLworCVJFUExBWV9ORUVERUQsIAkJLyogUmVwbGF5IHNsb3RzIG1hcmtlZCBpbiBybV9yZXBsYXlfc2xvdHMgKi8KKwlSRVBMQVlfRE9ORSAJCS8qIFJlcGxheSB3YXMgYWxyZWFkeSBxdWV1ZWQgKi8KIH07CiAKK3N0cnVjdCBvY2ZzMl9yZXBsYXlfbWFwIHsKKwl1bnNpZ25lZCBpbnQgcm1fc2xvdHM7CisJZW51bSBvY2ZzMl9yZXBsYXlfc3RhdGUgcm1fc3RhdGU7CisJdW5zaWduZWQgY2hhciBybV9yZXBsYXlfc2xvdHNbMF07Cit9OworCit2b2lkIG9jZnMyX3JlcGxheV9tYXBfc2V0X3N0YXRlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBpbnQgc3RhdGUpCit7CisJaWYgKCFvc2ItPnJlcGxheV9tYXApCisJCXJldHVybjsKKworCS8qIElmIHdlJ3ZlIGFscmVhZHkgcXVldWVkIHRoZSByZXBsYXksIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgdG8gZG8gKi8KKwlpZiAob3NiLT5yZXBsYXlfbWFwLT5ybV9zdGF0ZSA9PSBSRVBMQVlfRE9ORSkKKwkJcmV0dXJuOworCisJb3NiLT5yZXBsYXlfbWFwLT5ybV9zdGF0ZSA9IHN0YXRlOworfQorCitpbnQgb2NmczJfY29tcHV0ZV9yZXBsYXlfc2xvdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJc3RydWN0IG9jZnMyX3JlcGxheV9tYXAgKnJlcGxheV9tYXA7CisJaW50IGksIG5vZGVfbnVtOworCisJLyogSWYgcmVwbGF5IG1hcCBpcyBhbHJlYWR5IHNldCwgd2UgZG9uJ3QgZG8gaXQgYWdhaW4gKi8KKwlpZiAob3NiLT5yZXBsYXlfbWFwKQorCQlyZXR1cm4gMDsKKworCXJlcGxheV9tYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfcmVwbGF5X21hcCkgKworCQkJICAgICAob3NiLT5tYXhfc2xvdHMgKiBzaXplb2YoY2hhcikpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcmVwbGF5X21hcCkgeworCQltbG9nX2Vycm5vKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCisJcmVwbGF5X21hcC0+cm1fc2xvdHMgPSBvc2ItPm1heF9zbG90czsKKwlyZXBsYXlfbWFwLT5ybV9zdGF0ZSA9IFJFUExBWV9VTk5FRURFRDsKKworCS8qIHNldCBybV9yZXBsYXlfc2xvdHMgZm9yIG9mZmxpbmUgc2xvdChzKSAqLworCWZvciAoaSA9IDA7IGkgPCByZXBsYXlfbWFwLT5ybV9zbG90czsgaSsrKSB7CisJCWlmIChvY2ZzMl9zbG90X3RvX25vZGVfbnVtX2xvY2tlZChvc2IsIGksICZub2RlX251bSkgPT0gLUVOT0VOVCkKKwkJCXJlcGxheV9tYXAtPnJtX3JlcGxheV9zbG90c1tpXSA9IDE7CisJfQorCisJb3NiLT5yZXBsYXlfbWFwID0gcmVwbGF5X21hcDsKKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgb2NmczJfcXVldWVfcmVwbGF5X3Nsb3RzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXN0cnVjdCBvY2ZzMl9yZXBsYXlfbWFwICpyZXBsYXlfbWFwID0gb3NiLT5yZXBsYXlfbWFwOworCWludCBpOworCisJaWYgKCFyZXBsYXlfbWFwKQorCQlyZXR1cm47CisKKwlpZiAocmVwbGF5X21hcC0+cm1fc3RhdGUgIT0gUkVQTEFZX05FRURFRCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHJlcGxheV9tYXAtPnJtX3Nsb3RzOyBpKyspCisJCWlmIChyZXBsYXlfbWFwLT5ybV9yZXBsYXlfc2xvdHNbaV0pCisJCQlvY2ZzMl9xdWV1ZV9yZWNvdmVyeV9jb21wbGV0aW9uKG9zYi0+am91cm5hbCwgaSwgTlVMTCwKKwkJCQkJCQlOVUxMLCBOVUxMKTsKKwlyZXBsYXlfbWFwLT5ybV9zdGF0ZSA9IFJFUExBWV9ET05FOworfQorCit2b2lkIG9jZnMyX2ZyZWVfcmVwbGF5X3Nsb3RzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXN0cnVjdCBvY2ZzMl9yZXBsYXlfbWFwICpyZXBsYXlfbWFwID0gb3NiLT5yZXBsYXlfbWFwOworCisJaWYgKCFvc2ItPnJlcGxheV9tYXApCisJCXJldHVybjsKKworCWtmcmVlKHJlcGxheV9tYXApOworCW9zYi0+cmVwbGF5X21hcCA9IE5VTEw7Cit9CisKIGludCBvY2ZzMl9yZWNvdmVyeV9pbml0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQogewogCXN0cnVjdCBvY2ZzMl9yZWNvdmVyeV9tYXAgKnJtOwpAQCAtNDk2LDYgKzU4MCwyMiBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG9jZnMyX3RyaWdnZXJzIGRyX3RyaWdnZXJzID0geworCS5vdF90cmlnZ2VycyA9IHsKKwkJLnRfY29tbWl0ID0gb2NmczJfY29tbWl0X3RyaWdnZXIsCisJCS50X2Fib3J0ID0gb2NmczJfYWJvcnRfdHJpZ2dlciwKKwl9LAorCS5vdF9vZmZzZXQJPSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jaywgZHJfY2hlY2spLAorfTsKKworc3RhdGljIHN0cnVjdCBvY2ZzMl90cmlnZ2VycyBkbF90cmlnZ2VycyA9IHsKKwkub3RfdHJpZ2dlcnMgPSB7CisJCS50X2NvbW1pdCA9IG9jZnMyX2NvbW1pdF90cmlnZ2VyLAorCQkudF9hYm9ydCA9IG9jZnMyX2Fib3J0X3RyaWdnZXIsCisJfSwKKwkub3Rfb2Zmc2V0CT0gb2Zmc2V0b2Yoc3RydWN0IG9jZnMyX2R4X2xlYWYsIGRsX2NoZWNrKSwKK307CisKIHN0YXRpYyBpbnQgX19vY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCkBAIC02MDAsNiArNzAwLDIwIEBACiAJCQkJICAgICAgdHlwZSk7CiB9CiAKK2ludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQoreworCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCAmZHJfdHJpZ2dlcnMsCisJCQkJICAgICAgdHlwZSk7Cit9CisKK2ludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQoreworCXJldHVybiBfX29jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGJoLCAmZGxfdHJpZ2dlcnMsCisJCQkJICAgICAgdHlwZSk7Cit9CisKIGludCBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKQogewpAQCAtMTE3NiwyNCArMTI5MCwyNCBAQAogfQogCiAvKiBDYWxsZWQgYnkgdGhlIG1vdW50IGNvZGUgdG8gcXVldWUgcmVjb3ZlcnkgdGhlIGxhc3QgcGFydCBvZgotICogcmVjb3ZlcnkgZm9yIGl0J3Mgb3duIHNsb3QuICovCisgKiByZWNvdmVyeSBmb3IgaXQncyBvd24gYW5kIG9mZmxpbmUgc2xvdChzKS4gKi8KIHZvaWQgb2NmczJfY29tcGxldGVfbW91bnRfcmVjb3Zlcnkoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCiB7CiAJc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwgPSBvc2ItPmpvdXJuYWw7CiAKLQlpZiAob3NiLT5kaXJ0eSkgewotCQkvKiBObyBuZWVkIHRvIHF1ZXVlIHVwIG91ciB0cnVuY2F0ZV9sb2cgYXMgcmVndWxhcgotCQkgKiBjbGVhbnVwIHdpbGwgY2F0Y2ggdGhhdC4gKi8KLQkJb2NmczJfcXVldWVfcmVjb3ZlcnlfY29tcGxldGlvbihqb3VybmFsLAotCQkJCQkJb3NiLT5zbG90X251bSwKLQkJCQkJCW9zYi0+bG9jYWxfYWxsb2NfY29weSwKLQkJCQkJCU5VTEwsCi0JCQkJCQlOVUxMKTsKLQkJb2NmczJfc2NoZWR1bGVfdHJ1bmNhdGVfbG9nX2ZsdXNoKG9zYiwgMCk7CisJLyogTm8gbmVlZCB0byBxdWV1ZSB1cCBvdXIgdHJ1bmNhdGVfbG9nIGFzIHJlZ3VsYXIgY2xlYW51cCB3aWxsIGNhdGNoCisJICogdGhhdCAqLworCW9jZnMyX3F1ZXVlX3JlY292ZXJ5X2NvbXBsZXRpb24oam91cm5hbCwgb3NiLT5zbG90X251bSwKKwkJCQkJb3NiLT5sb2NhbF9hbGxvY19jb3B5LCBOVUxMLCBOVUxMKTsKKwlvY2ZzMl9zY2hlZHVsZV90cnVuY2F0ZV9sb2dfZmx1c2gob3NiLCAwKTsKIAotCQlvc2ItPmxvY2FsX2FsbG9jX2NvcHkgPSBOVUxMOwotCQlvc2ItPmRpcnR5ID0gMDsKLQl9CisJb3NiLT5sb2NhbF9hbGxvY19jb3B5ID0gTlVMTDsKKwlvc2ItPmRpcnR5ID0gMDsKKworCS8qIHF1ZXVlIHRvIHJlY292ZXIgb3JwaGFuIHNsb3RzIGZvciBhbGwgb2ZmbGluZSBzbG90cyAqLworCW9jZnMyX3JlcGxheV9tYXBfc2V0X3N0YXRlKG9zYiwgUkVQTEFZX05FRURFRCk7CisJb2NmczJfcXVldWVfcmVwbGF5X3Nsb3RzKG9zYik7CisJb2NmczJfZnJlZV9yZXBsYXlfc2xvdHMob3NiKTsKIH0KIAogdm9pZCBvY2ZzMl9jb21wbGV0ZV9xdW90YV9yZWNvdmVyeShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKQEAgLTEyMzYsNiArMTM1MCwxNCBAQAogCQlnb3RvIGJhaWw7CiAJfQogCisJc3RhdHVzID0gb2NmczJfY29tcHV0ZV9yZXBsYXlfc2xvdHMob3NiKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCisJLyogcXVldWUgcmVjb3ZlcnkgZm9yIG91ciBvd24gc2xvdCAqLworCW9jZnMyX3F1ZXVlX3JlY292ZXJ5X2NvbXBsZXRpb24ob3NiLT5qb3VybmFsLCBvc2ItPnNsb3RfbnVtLCBOVUxMLAorCQkJCQlOVUxMLCBOVUxMKTsKKwogCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CiAJd2hpbGUgKHJtLT5ybV91c2VkKSB7CiAJCS8qIEl0J3MgYWx3YXlzIHNhZmUgdG8gcmVtb3ZlIGVudHJ5IHplcm8sIGFzIHdlIHdvbid0CkBAIC0xMzAxLDExICsxNDIzLDggQEAKIAogCW9jZnMyX3N1cGVyX3VubG9jayhvc2IsIDEpOwogCi0JLyogV2UgYWx3YXlzIHJ1biByZWNvdmVyeSBvbiBvdXIgb3duIG9ycGhhbiBkaXIgLSB0aGUgZGVhZAotCSAqIG5vZGUocykgbWF5IGhhdmUgZGlzYWxsb3dkIGEgcHJldmlvcyBpbm9kZSBkZWxldGUuIFJlLXByb2Nlc3NpbmcKLQkgKiBpcyB0aGVyZWZvcmUgcmVxdWlyZWQuICovCi0Jb2NmczJfcXVldWVfcmVjb3ZlcnlfY29tcGxldGlvbihvc2ItPmpvdXJuYWwsIG9zYi0+c2xvdF9udW0sIE5VTEwsCi0JCQkJCU5VTEwsIE5VTEwpOworCS8qIHF1ZXVlIHJlY292ZXJ5IGZvciBvZmZsaW5lIHNsb3RzICovCisJb2NmczJfcXVldWVfcmVwbGF5X3Nsb3RzKG9zYik7CiAKIGJhaWw6CiAJbXV0ZXhfbG9jaygmb3NiLT5yZWNvdmVyeV9sb2NrKTsKQEAgLTEzMTQsNiArMTQzMyw3IEBACiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKKwlvY2ZzMl9mcmVlX3JlcGxheV9zbG90cyhvc2IpOwogCW9zYi0+cmVjb3ZlcnlfdGhyZWFkX3Rhc2sgPSBOVUxMOwogCW1iKCk7IC8qIHN5bmMgd2l0aCBvY2ZzMl9yZWNvdmVyeV90aHJlYWRfcnVubmluZyAqLwogCXdha2VfdXAoJm9zYi0+cmVjb3ZlcnlfZXZlbnQpOwpAQCAtMTQ2NSw2ICsxNTg1LDkgQEAKIAkJZ290byBkb25lOwogCX0KIAorCS8qIHdlIG5lZWQgdG8gcnVuIGNvbXBsZXRlIHJlY292ZXJ5IGZvciBvZmZsaW5lIG9ycGhhbiBzbG90cyAqLworCW9jZnMyX3JlcGxheV9tYXBfc2V0X3N0YXRlKG9zYiwgUkVQTEFZX05FRURFRCk7CisKIAltbG9nKE1MX05PVElDRSwgIlJlY292ZXJpbmcgbm9kZSAlZCBmcm9tIHNsb3QgJWQgb24gZGV2aWNlICgldSwldSlcbiIsCiAJICAgICBub2RlX251bSwgc2xvdF9udW0sCiAJICAgICBNQUpPUihvc2ItPnNiLT5zX2RldiksIE1JTk9SKG9zYi0+c2ItPnNfZGV2KSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9qb3VybmFsLmggYi9mcy9vY2ZzMi9qb3VybmFsLmgKaW5kZXggMTcyODUwYS4uNjE5ZGQ3ZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5oCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuaApAQCAtMzgsNiArMzgsMTcgQEAKIHN0cnVjdCBvY2ZzMl9zdXBlcjsKIHN0cnVjdCBvY2ZzMl9kaW5vZGU7CiAKKy8qCisgKiBUaGUgcmVjb3ZlcnlfbGlzdCBpcyBhIHNpbXBsZSBsaW5rZWQgbGlzdCBvZiBub2RlIG51bWJlcnMgdG8gcmVjb3Zlci4KKyAqIEl0IGlzIHByb3RlY3RlZCBieSB0aGUgcmVjb3ZlcnlfbG9jay4KKyAqLworCitzdHJ1Y3Qgb2NmczJfcmVjb3ZlcnlfbWFwIHsKKwl1bnNpZ25lZCBpbnQgcm1fdXNlZDsKKwl1bnNpZ25lZCBpbnQgKnJtX2VudHJpZXM7Cit9OworCisKIHN0cnVjdCBvY2ZzMl9qb3VybmFsIHsKIAllbnVtIG9jZnMyX2pvdXJuYWxfc3RhdGUgICBqX3N0YXRlOyAgICAvKiBKb3VybmFscyBjdXJyZW50IHN0YXRlICAgKi8KIApAQCAtMTM5LDYgKzE1MCw3IEBACiBpbnQgb2NmczJfcmVjb3ZlcnlfaW5pdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYik7CiB2b2lkIG9jZnMyX3JlY292ZXJ5X2V4aXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpOwogCitpbnQgb2NmczJfY29tcHV0ZV9yZXBsYXlfc2xvdHMoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpOwogLyoKICAqICBKb3VybmFsIENvbnRyb2w6CiAgKiAgSW5pdGlhbGl6ZSwgTG9hZCwgU2h1dGRvd24sIFdpcGUgYSBqb3VybmFsLgpAQCAtMjY2LDYgKzI3OCwxMiBAQAogLyogZGlyYmxvY2sgKi8KIGludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKKy8qIG9jZnMyX2R4X3Jvb3RfYmxvY2sgKi8KK2ludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kcihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKKy8qIG9jZnMyX2R4X2xlYWYgKi8KK2ludCBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB0eXBlKTsKIC8qIEFueXRoaW5nIHRoYXQgaGFzIG5vIGVjYyAqLwogaW50IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHR5cGUpOwpAQCAtMzY4LDE0ICszODYsMjkgQEAKIH0KIAogLyogZGF0YSBibG9jayBmb3IgbmV3IGRpci9zeW1saW5rLCAyIGZvciBiaXRtYXAgdXBkYXRlcyAoYml0bWFwIGZlICsKLSAqIGJpdG1hcCBibG9jayBmb3IgdGhlIG5ldyBiaXQpICovCi0jZGVmaW5lIE9DRlMyX0RJUl9MSU5LX0FERElUSU9OQUxfQ1JFRElUUyAoMSArIDIpCisgKiBiaXRtYXAgYmxvY2sgZm9yIHRoZSBuZXcgYml0KSBkeF9yb290IHVwZGF0ZSBmb3IgZnJlZSBsaXN0ICovCisjZGVmaW5lIE9DRlMyX0RJUl9MSU5LX0FERElUSU9OQUxfQ1JFRElUUyAoMSArIDIgKyAxKQogCi0vKiBwYXJlbnQgZmUsIHBhcmVudCBibG9jaywgbmV3IGZpbGUgZW50cnksIGlub2RlIGFsbG9jIGZlLCBpbm9kZSBhbGxvYwotICogZ3JvdXAgZGVzY3JpcHRvciArIG1rZGlyL3N5bWxpbmsgYmxvY2tzICsgcXVvdGEgdXBkYXRlICovCi1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9ta25vZF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9hZGRfZGlyX2luZGV4X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlyZXR1cm4gMyArIE9DRlMyX1NVQkFMTE9DX0FMTE9DICsgT0NGUzJfRElSX0xJTktfQURESVRJT05BTF9DUkVESVRTICsKKwkvKiAxIGJsb2NrIGZvciBpbmRleCwgMiBhbGxvY3MgKGRhdGEsIG1ldGFkYXRhKSwgMSBjbHVzdGVycworCSAqIHdvcnRoIG9mIGJsb2NrcyBmb3IgaW5pdGlhbCBleHRlbnQuICovCisJcmV0dXJuIDEgKyAyICogT0NGUzJfU1VCQUxMT0NfQUxMT0MgKworCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3Moc2IsIDEpOworfQorCisvKiBwYXJlbnQgZmUsIHBhcmVudCBibG9jaywgbmV3IGZpbGUgZW50cnksIGluZGV4IGxlYWYsIGlub2RlIGFsbG9jIGZlLCBpbm9kZQorICogYWxsb2MgZ3JvdXAgZGVzY3JpcHRvciArIG1rZGlyL3N5bWxpbmsgYmxvY2tzICsgZGlyIGJsb2NrcyArIHhhdHRyCisgKiBibG9ja3MgKyBxdW90YSB1cGRhdGUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21rbm9kX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlzX2RpciwKKwkJCQkgICAgICBpbnQgeGF0dHJfY3JlZGl0cykKK3sKKwlpbnQgZGlyX2NyZWRpdHMgPSBPQ0ZTMl9ESVJfTElOS19BRERJVElPTkFMX0NSRURJVFM7CisKKwlpZiAoaXNfZGlyKQorCQlkaXJfY3JlZGl0cyArPSBvY2ZzMl9hZGRfZGlyX2luZGV4X2NyZWRpdHMoc2IpOworCisJcmV0dXJuIDQgKyBPQ0ZTMl9TVUJBTExPQ19BTExPQyArIGRpcl9jcmVkaXRzICsgeGF0dHJfY3JlZGl0cyArCiAJICAgICAgIG9jZnMyX3F1b3RhX3RyYW5zX2NyZWRpdHMoc2IpOwogfQogCkBAIC0zODgsMzEgKzQyMSwzMSBAQAogI2RlZmluZSBPQ0ZTMl9TSU1QTEVfRElSX0VYVEVORF9DUkVESVRTICgyKQogCiAvKiBmaWxlIHVwZGF0ZSAobmxpbmssIGV0YykgKyBkaXJlY3RvcnkgbXRpbWUvY3RpbWUgKyBkaXIgZW50cnkgYmxvY2sgKyBxdW90YQotICogdXBkYXRlIG9uIGRpciAqLworICogdXBkYXRlIG9uIGRpciArIGluZGV4IGxlYWYgKyBkeCByb290IHVwZGF0ZSBmb3IgZnJlZSBsaXN0ICovCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9saW5rX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlyZXR1cm4gMipPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArIDEgKworCXJldHVybiAyKk9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTICsgMyArCiAJICAgICAgIG9jZnMyX3F1b3RhX3RyYW5zX2NyZWRpdHMoc2IpOwogfQogCiAvKiBpbm9kZSArIGRpciBpbm9kZSAoaWYgd2UgdW5saW5rIGEgZGlyKSwgKyBkaXIgZW50cnkgYmxvY2sgKyBvcnBoYW4KLSAqIGRpciBpbm9kZSBsaW5rICovCisgKiBkaXIgaW5vZGUgbGluayArIGRpciBpbm9kZSBpbmRleCBsZWFmICsgZGlyIGluZGV4IHJvb3QgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3VubGlua19jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJLyogVGhlIHF1b3RhIHVwZGF0ZSBmcm9tIG9jZnMyX2xpbmtfY3JlZGl0cyBpcyB1bnVzZWQgaGVyZS4uLiAqLwotCXJldHVybiAyICogT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyAxICsgb2NmczJfbGlua19jcmVkaXRzKHNiKTsKKwlyZXR1cm4gMiAqIE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTICsgMyArIG9jZnMyX2xpbmtfY3JlZGl0cyhzYik7CiB9CiAKIC8qIGRpbm9kZSArIG9ycGhhbiBkaXIgZGlub2RlICsgaW5vZGUgYWxsb2MgZGlub2RlICsgb3JwaGFuIGRpciBlbnRyeSArCi0gKiBpbm9kZSBhbGxvYyBncm91cCBkZXNjcmlwdG9yICovCi0jZGVmaW5lIE9DRlMyX0RFTEVURV9JTk9ERV9DUkVESVRTICgzICogT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyAxICsgMSkKKyAqIGlub2RlIGFsbG9jIGdyb3VwIGRlc2NyaXB0b3IgKyBvcnBoYW4gZGlyIGluZGV4IGxlYWYgKi8KKyNkZWZpbmUgT0NGUzJfREVMRVRFX0lOT0RFX0NSRURJVFMgKDMgKiBPQ0ZTMl9JTk9ERV9VUERBVEVfQ1JFRElUUyArIDMpCiAKIC8qIGRpbm9kZSB1cGRhdGUsIG9sZCBkaXIgZGlub2RlIHVwZGF0ZSwgbmV3IGRpciBkaW5vZGUgdXBkYXRlLCBvbGQKICAqIGRpciBkaXIgZW50cnksIG5ldyBkaXIgZGlyIGVudHJ5LCBkaXIgZW50cnkgdXBkYXRlIGZvciByZW5hbWluZwotICogZGlyZWN0b3J5ICsgdGFyZ2V0IHVubGluayAqLworICogZGlyZWN0b3J5ICsgdGFyZ2V0IHVubGluayArIDMgeCBkaXIgaW5kZXggbGVhdmVzICovCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9yZW5hbWVfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXJldHVybiAzICogT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyAzICsgb2NmczJfdW5saW5rX2NyZWRpdHMoc2IpOworCXJldHVybiAzICogT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgKyA2ICsgb2NmczJfdW5saW5rX2NyZWRpdHMoc2IpOwogfQogCiAvKiBnbG9iYWwgYml0bWFwIGRpbm9kZSwgZ3JvdXAgZGVzYy4sIHJlbGlua2VkIGdyb3VwLApAQCAtNDIyLDYgKzQ1NSwyMCBAQAogCQkJCQkgICsgT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMgXAogCQkJCQkgICsgT0NGUzJfWEFUVFJfQkxPQ0tfVVBEQVRFX0NSRURJVFMpCiAKKy8qIGlub2RlIHVwZGF0ZSwgcmVtb3ZhbCBvZiBkeCByb290IGJsb2NrIGZyb20gYWxsb2NhdG9yICovCisjZGVmaW5lIE9DRlMyX0RYX1JPT1RfUkVNT1ZFX0NSRURJVFMgKE9DRlMyX0lOT0RFX1VQREFURV9DUkVESVRTICsJXAorCQkJCSAgICAgIE9DRlMyX1NVQkFMTE9DX0ZSRUUpCisKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NhbGNfZHhpX2V4cGFuZF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IGNyZWRpdHMgPSAxICsgT0NGUzJfU1VCQUxMT0NfQUxMT0M7CisKKwljcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhzYiwgMSk7CisJY3JlZGl0cyArPSBvY2ZzMl9xdW90YV90cmFuc19jcmVkaXRzKHNiKTsKKworCXJldHVybiBjcmVkaXRzOworfQorCiAvKgogICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgY2FsbGVyIG11c3QgbWFrZSBzdXJlIHRoYXQgcm9vdF9lbCBpcyB0aGUgcm9vdAogICogb2YgZXh0ZW50IHRyZWUuIFNvIGZvciBhbiBpbm9kZSwgaXQgc2hvdWxkIGJlICZmZS0+aWQyLmlfbGlzdC4gT3RoZXJ3aXNlCkBAIC00NTcsNyArNTA0LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgb2NmczJfY2FsY19zeW1saW5rX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlpbnQgYmxvY2tzID0gb2NmczJfbWtub2RfY3JlZGl0cyhzYik7CisJaW50IGJsb2NrcyA9IG9jZnMyX21rbm9kX2NyZWRpdHMoc2IsIDAsIDApOwogCiAJLyogbGlua3MgY2FuIGJlIGxvbmdlciB0aGFuIG9uZSBibG9jayBzbyB3ZSBtYXkgdXBkYXRlIG1hbnkKIAkgKiB3aXRoaW4gb3VyIHNpbmdsZSBhbGxvY2F0ZWQgZXh0ZW50LiAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbG9jYWxhbGxvYy5jIGIvZnMvb2NmczIvbG9jYWxhbGxvYy5jCmluZGV4IGVjNzBjZGIuLmJhYzdlNmEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2xvY2FsYWxsb2MuYworKysgYi9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KIAogI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX0RJU0tfQUxMT0MKICNpbmNsdWRlIDxjbHVzdGVyL21hc2tsb2cuaD4KQEAgLTc1LDg0ICs3NCw2IEBACiBzdGF0aWMgaW50IG9jZnMyX2xvY2FsX2FsbG9jX3NsaWRlX3dpbmRvdyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkJICBzdHJ1Y3QgaW5vZGUgKmxvY2FsX2FsbG9jX2lub2RlKTsKIAotI2lmZGVmIENPTkZJR19PQ0ZTMl9GU19TVEFUUwotCi1zdGF0aWMgaW50IG9jZnMyX2xhX2RlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBMQV9ERUJVR19CVUZfU1oJUEFHRV9DQUNIRV9TSVpFCi0jZGVmaW5lIExBX0RFQlVHX1ZFUgkxCi1zdGF0aWMgc3NpemVfdCBvY2ZzMl9sYV9kZWJ1Z19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKLQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdGF0aWMgREVGSU5FX01VVEVYKGxhX2RlYnVnX211dGV4KTsKLQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgd3JpdHRlbiwgcmV0OwotCWNoYXIgKmJ1ZiA9IG9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmOwotCi0JbXV0ZXhfbG9jaygmbGFfZGVidWdfbXV0ZXgpOwotCW1lbXNldChidWYsIDAsIExBX0RFQlVHX0JVRl9TWik7Ci0KLQl3cml0dGVuID0gc25wcmludGYoYnVmLCBMQV9ERUJVR19CVUZfU1osCi0JCQkgICAiMHgleFx0MHglbGx4XHQldVx0JXVcdDB4JXhcbiIsCi0JCQkgICBMQV9ERUJVR19WRVIsCi0JCQkgICAodW5zaWduZWQgbG9uZyBsb25nKW9zYi0+bGFfbGFzdF9nZCwKLQkJCSAgIG9zYi0+bG9jYWxfYWxsb2NfZGVmYXVsdF9iaXRzLAotCQkJICAgb3NiLT5sb2NhbF9hbGxvY19iaXRzLCBvc2ItPmxvY2FsX2FsbG9jX3N0YXRlKTsKLQotCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHdyaXR0ZW4pOwotCi0JbXV0ZXhfdW5sb2NrKCZsYV9kZWJ1Z19tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NmczJfbGFfZGVidWdfZm9wcyA9IHsKLQkub3BlbiA9CQlvY2ZzMl9sYV9kZWJ1Z19vcGVuLAotCS5yZWFkID0JCW9jZnMyX2xhX2RlYnVnX3JlYWQsCi19OwotCi1zdGF0aWMgdm9pZCBvY2ZzMl9pbml0X2xhX2RlYnVnKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQotewotCW9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmID0ga21hbGxvYyhMQV9ERUJVR19CVUZfU1osIEdGUF9OT0ZTKTsKLQlpZiAoIW9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmKQotCQlyZXR1cm47Ci0KLQlvc2ItPmxvY2FsX2FsbG9jX2RlYnVnID0gZGVidWdmc19jcmVhdGVfZmlsZSgibG9jYWxfYWxsb2Nfc3RhdHMiLAotCQkJCQkJICAgICBTX0lGUkVHfFNfSVJVU1IsCi0JCQkJCQkgICAgIG9zYi0+b3NiX2RlYnVnX3Jvb3QsCi0JCQkJCQkgICAgIG9zYiwKLQkJCQkJCSAgICAgJm9jZnMyX2xhX2RlYnVnX2ZvcHMpOwotCWlmICghb3NiLT5sb2NhbF9hbGxvY19kZWJ1ZykgewotCQlrZnJlZShvc2ItPmxvY2FsX2FsbG9jX2RlYnVnX2J1Zik7Ci0JCW9zYi0+bG9jYWxfYWxsb2NfZGVidWdfYnVmID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIG9jZnMyX3NodXRkb3duX2xhX2RlYnVnKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQotewotCWlmIChvc2ItPmxvY2FsX2FsbG9jX2RlYnVnKQotCQlkZWJ1Z2ZzX3JlbW92ZShvc2ItPmxvY2FsX2FsbG9jX2RlYnVnKTsKLQotCWlmIChvc2ItPmxvY2FsX2FsbG9jX2RlYnVnX2J1ZikKLQkJa2ZyZWUob3NiLT5sb2NhbF9hbGxvY19kZWJ1Z19idWYpOwotCi0Jb3NiLT5sb2NhbF9hbGxvY19kZWJ1Z19idWYgPSBOVUxMOwotCW9zYi0+bG9jYWxfYWxsb2NfZGVidWcgPSBOVUxMOwotfQotI2Vsc2UJLyogQ09ORklHX09DRlMyX0ZTX1NUQVRTICovCi1zdGF0aWMgdm9pZCBvY2ZzMl9pbml0X2xhX2RlYnVnKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQotewotCXJldHVybjsKLX0KLXN0YXRpYyB2b2lkIG9jZnMyX3NodXRkb3duX2xhX2RlYnVnKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQotewotCXJldHVybjsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9sYV9zdGF0ZV9lbmFibGVkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQogewogCXJldHVybiAob3NiLT5sb2NhbF9hbGxvY19zdGF0ZSA9PSBPQ0ZTMl9MQV9USFJPVFRMRUQgfHwKQEAgLTIyNiw4ICsxNDcsNiBAQAogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKLQlvY2ZzMl9pbml0X2xhX2RlYnVnKG9zYik7Ci0KIAlpZiAob3NiLT5sb2NhbF9hbGxvY19iaXRzID09IDApCiAJCWdvdG8gYmFpbDsKIApAQCAtMjk5LDkgKzIxOCw2IEBACiAJaWYgKGlub2RlKQogCQlpcHV0KGlub2RlKTsKIAotCWlmIChzdGF0dXMgPCAwKQotCQlvY2ZzMl9zaHV0ZG93bl9sYV9kZWJ1Zyhvc2IpOwotCiAJbWxvZygwLCAiTG9jYWwgYWxsb2Mgd2luZG93IGJpdHMgPSAlZFxuIiwgb3NiLT5sb2NhbF9hbGxvY19iaXRzKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwpAQCAtMzMxLDggKzI0Nyw2IEBACiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmb3NiLT5sYV9lbmFibGVfd3EpOwogCWZsdXNoX3dvcmtxdWV1ZShvY2ZzMl93cSk7CiAKLQlvY2ZzMl9zaHV0ZG93bl9sYV9kZWJ1Zyhvc2IpOwotCiAJaWYgKG9zYi0+bG9jYWxfYWxsb2Nfc3RhdGUgPT0gT0NGUzJfTEFfVU5VU0VEKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbW1hcC5jIGIvZnMvb2NmczIvbW1hcC5jCmluZGV4IGVlYTFkMjQuLmI2MDY0OTYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL21tYXAuYworKysgYi9mcy9vY2ZzMi9tbWFwLmMKQEAgLTE1NCw4ICsxNTQsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3N0YXRpYyBpbnQgb2NmczJfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZtZi0+cGFnZTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gdm1hLT52bV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmggPSBOVUxMOwogCXNpZ3NldF90IGJsb2NrZWQsIG9sZHNldDsKQEAgLTE5Niw3ICsxOTcsOCBAQAogCXJldDIgPSBvY2ZzMl92bV9vcF91bmJsb2NrX3NpZ3MoJm9sZHNldCk7CiAJaWYgKHJldDIgPCAwKQogCQltbG9nX2Vycm5vKHJldDIpOwotCisJaWYgKHJldCkKKwkJcmV0ID0gVk1fRkFVTFRfU0lHQlVTOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDRiMTE3NjIuLjIyMjBmOTMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtODAsMTQgKzgwLDE0IEBACiAJCQkJICAgIHN0cnVjdCBpbm9kZSAqKnJldF9vcnBoYW5fZGlyLAogCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICBjaGFyICpuYW1lLAotCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipkZV9iaCk7CisJCQkJICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKTsKIAogc3RhdGljIGludCBvY2ZzMl9vcnBoYW5fYWRkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICAgIGhhbmRsZV90ICpoYW5kbGUsCiAJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSwKIAkJCSAgICBjaGFyICpuYW1lLAotCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGVfYmgsCisJCQkgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXAsCiAJCQkgICAgc3RydWN0IGlub2RlICpvcnBoYW5fZGlyX2lub2RlKTsKIAogc3RhdGljIGludCBvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLApAQCAtMjI4LDE3ICsyMjgsMTggQEAKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYjsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaXJmZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19mZV9iaCA9IE5VTEw7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpkZV9iaCA9IE5VTEw7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmlub2RlX2FjID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKnhhdHRyX2FjID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyA9IE5VTEw7CiAJaW50IHdhbnRfY2x1c3RlcnMgPSAwOworCWludCB3YW50X21ldGEgPSAwOwogCWludCB4YXR0cl9jcmVkaXRzID0gMDsKIAlzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyBzaSA9IHsKIAkJLmVuYWJsZSA9IDEsCiAJfTsKIAlpbnQgZGlkX3F1b3RhX2lub2RlID0gMDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgbG9va3VwID0geyBOVUxMLCB9OwogCiAJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsICVkLCAlbHUsICclLipzJylcbiIsIGRpciwgZGVudHJ5LCBtb2RlLAogCQkgICAodW5zaWduZWQgbG9uZylkZXYsIGRlbnRyeS0+ZF9uYW1lLmxlbiwKQEAgLTI1NCwxMyArMjU1LDEzIEBACiAJCXJldHVybiBzdGF0dXM7CiAJfQogCi0JaWYgKFNfSVNESVIobW9kZSkgJiYgKGRpci0+aV9ubGluayA+PSBPQ0ZTMl9MSU5LX01BWCkpIHsKKwlpZiAoU19JU0RJUihtb2RlKSAmJiAoZGlyLT5pX25saW5rID49IG9jZnMyX2xpbmtfbWF4KG9zYikpKSB7CiAJCXN0YXR1cyA9IC1FTUxJTks7CiAJCWdvdG8gbGVhdmU7CiAJfQogCiAJZGlyZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBwYXJlbnRfZmVfYmgtPmJfZGF0YTsKLQlpZiAoIWRpcmZlLT5pX2xpbmtzX2NvdW50KSB7CisJaWYgKCFvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KGRpcmZlKSkgewogCQkvKiBjYW4ndCBtYWtlIGEgZmlsZSBpbiBhIGRlbGV0ZWQgZGlyZWN0b3J5LiAqLwogCQlzdGF0dXMgPSAtRU5PRU5UOwogCQlnb3RvIGxlYXZlOwpAQCAtMjc0LDcgKzI3NSw3IEBACiAJLyogZ2V0IGEgc3BvdCBpbnNpZGUgdGhlIGRpci4gKi8KIAlzdGF0dXMgPSBvY2ZzMl9wcmVwYXJlX2Rpcl9mb3JfaW5zZXJ0KG9zYiwgZGlyLCBwYXJlbnRfZmVfYmgsCiAJCQkJCSAgICAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkJCSAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgJmRlX2JoKTsKKwkJCQkJICAgICAgZGVudHJ5LT5kX25hbWUubGVuLCAmbG9va3VwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gbGVhdmU7CkBAIC0zMDgsMTcgKzMwOSwyOSBAQAogCiAJLyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovCiAJc3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgcGFyZW50X2ZlX2JoLCBtb2RlLAotCQkJCQkmc2ksICZ3YW50X2NsdXN0ZXJzLAotCQkJCQkmeGF0dHJfY3JlZGl0cywgJnhhdHRyX2FjKTsKKwkJCQkgICAgICAgJnNpLCAmd2FudF9jbHVzdGVycywKKwkJCQkgICAgICAgJnhhdHRyX2NyZWRpdHMsICZ3YW50X21ldGEpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKIAl9CiAKIAkvKiBSZXNlcnZlIGEgY2x1c3RlciBpZiBjcmVhdGluZyBhbiBleHRlbnQgYmFzZWQgZGlyZWN0b3J5LiAqLwotCWlmIChTX0lTRElSKG1vZGUpICYmICFvY2ZzMl9zdXBwb3J0c19pbmxpbmVfZGF0YShvc2IpKQorCWlmIChTX0lTRElSKG1vZGUpICYmICFvY2ZzMl9zdXBwb3J0c19pbmxpbmVfZGF0YShvc2IpKSB7CiAJCXdhbnRfY2x1c3RlcnMgKz0gMTsKIAorCQkvKiBEaXIgaW5kZXhpbmcgcmVxdWlyZXMgZXh0cmEgc3BhY2UgYXMgd2VsbCAqLworCQlpZiAob2NmczJfc3VwcG9ydHNfaW5kZXhlZF9kaXJzKG9zYikpCisJCQl3YW50X21ldGErKzsKKwl9CisKKwlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YV9ibG9ja3Mob3NiLCB3YW50X21ldGEsICZtZXRhX2FjKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCisJCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gbGVhdmU7CisJfQorCiAJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9jbHVzdGVycyhvc2IsIHdhbnRfY2x1c3RlcnMsICZkYXRhX2FjKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCkBAIC0zMjYsOCArMzM5LDkgQEAKIAkJZ290byBsZWF2ZTsKIAl9CiAKLQloYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLT5zYikgKwotCQkJCSAgIHhhdHRyX2NyZWRpdHMpOworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItPnNiLAorCQkJCQkJCSAgICBTX0lTRElSKG1vZGUpLAorCQkJCQkJCSAgICB4YXR0cl9jcmVkaXRzKSk7CiAJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCXN0YXR1cyA9IFBUUl9FUlIoaGFuZGxlKTsKIAkJaGFuZGxlID0gTlVMTDsKQEAgLTM1NSw3ICszNjksNyBAQAogCiAJaWYgKFNfSVNESVIobW9kZSkpIHsKIAkJc3RhdHVzID0gb2NmczJfZmlsbF9uZXdfZGlyKG9zYiwgaGFuZGxlLCBkaXIsIGlub2RlLAotCQkJCQkgICAgbmV3X2ZlX2JoLCBkYXRhX2FjKTsKKwkJCQkJICAgIG5ld19mZV9iaCwgZGF0YV9hYywgbWV0YV9hYyk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGxlYXZlOwpAQCAtMzY3LDcgKzM4MSw3IEBACiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGxlYXZlOwogCQl9Ci0JCWxlMTZfYWRkX2NwdSgmZGlyZmUtPmlfbGlua3NfY291bnQsIDEpOworCQlvY2ZzMl9hZGRfbGlua3NfY291bnQoZGlyZmUsIDEpOwogCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgcGFyZW50X2ZlX2JoKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTM3Nyw3ICszOTEsNyBAQAogCX0KIAogCXN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsCi0JCQkJeGF0dHJfYWMsIGRhdGFfYWMpOworCQkJCW1ldGFfYWMsIGRhdGFfYWMpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTM4NSw3ICszOTksNyBAQAogCiAJaWYgKHNpLmVuYWJsZSkgewogCQlzdGF0dXMgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsICZzaSwKLQkJCQkJCSB4YXR0cl9hYywgZGF0YV9hYyk7CisJCQkJCQkgbWV0YV9hYywgZGF0YV9hYyk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGxlYXZlOwpAQCAtMzk0LDcgKzQwOCw3IEBACiAKIAlzdGF0dXMgPSBvY2ZzMl9hZGRfZW50cnkoaGFuZGxlLCBkZW50cnksIGlub2RlLAogCQkJCSBPQ0ZTMl9JKGlub2RlKS0+aXBfYmxrbm8sIHBhcmVudF9mZV9iaCwKLQkJCQkgZGVfYmgpOworCQkJCSAmbG9va3VwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gbGVhdmU7CkBAIC00MjMsMTEgKzQzNywxMiBAQAogCQltbG9nKDAsICJEaXNrIGlzIGZ1bGxcbiIpOwogCiAJYnJlbHNlKG5ld19mZV9iaCk7Ci0JYnJlbHNlKGRlX2JoKTsKIAlicmVsc2UocGFyZW50X2ZlX2JoKTsKIAlrZnJlZShzaS5uYW1lKTsKIAlrZnJlZShzaS52YWx1ZSk7CiAKKwlvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KCZsb29rdXApOworCiAJaWYgKChzdGF0dXMgPCAwKSAmJiBpbm9kZSkgewogCQljbGVhcl9ubGluayhpbm9kZSk7CiAJCWlwdXQoaW5vZGUpOwpAQCAtNDM5LDggKzQ1NCw4IEBACiAJaWYgKGRhdGFfYWMpCiAJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChkYXRhX2FjKTsKIAotCWlmICh4YXR0cl9hYykKLQkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KHhhdHRyX2FjKTsKKwlpZiAobWV0YV9hYykKKwkJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAKQEAgLTQ2Miw2ICs0NzcsNyBAQAogCXN0cnVjdCBvY2ZzMl9leHRlbnRfbGlzdCAqZmVsOwogCXU2NCBmZV9ibGtubyA9IDA7CiAJdTE2IHN1YmFsbG9jX2JpdDsKKwl1MTYgZmVhdDsKIAogCW1sb2dfZW50cnkoIigweCVwLCAweCVwLCAlZCwgJWx1LCAnJS4qcycpXG4iLCBkaXIsIGRlbnRyeSwKIAkJICAgaW5vZGUtPmlfbW9kZSwgKHVuc2lnbmVkIGxvbmcpZGV2LCBkZW50cnktPmRfbmFtZS5sZW4sCkBAIC00NjksOCArNDg1LDggQEAKIAogCSpuZXdfZmVfYmggPSBOVUxMOwogCi0Jc3RhdHVzID0gb2NmczJfY2xhaW1fbmV3X2lub2RlKG9zYiwgaGFuZGxlLCBpbm9kZV9hYywgJnN1YmFsbG9jX2JpdCwKLQkJCQkgICAgICAgJmZlX2Jsa25vKTsKKwlzdGF0dXMgPSBvY2ZzMl9jbGFpbV9uZXdfaW5vZGUob3NiLCBoYW5kbGUsIGRpciwgcGFyZW50X2ZlX2JoLAorCQkJCSAgICAgICBpbm9kZV9hYywgJnN1YmFsbG9jX2JpdCwgJmZlX2Jsa25vKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gbGVhdmU7CkBAIC01MTMsNyArNTI5LDggQEAKIAlmZS0+aV9tb2RlID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbW9kZSk7CiAJaWYgKFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkKIAkJZmUtPmlkMS5kZXYxLmlfcmRldiA9IGNwdV90b19sZTY0KGh1Z2VfZW5jb2RlX2RldihkZXYpKTsKLQlmZS0+aV9saW5rc19jb3VudCA9IGNwdV90b19sZTE2KGlub2RlLT5pX25saW5rKTsKKworCW9jZnMyX3NldF9saW5rc19jb3VudChmZSwgaW5vZGUtPmlfbmxpbmspOwogCiAJZmUtPmlfbGFzdF9lYl9ibGsgPSAwOwogCXN0cmNweShmZS0+aV9zaWduYXR1cmUsIE9DRlMyX0lOT0RFX1NJR05BVFVSRSk7CkBAIC01MjUsMTEgKzU0MiwxMSBAQAogCWZlLT5pX2R0aW1lID0gMDsKIAogCS8qCi0JICogSWYgc3VwcG9ydGVkLCBkaXJlY3RvcmllcyBzdGFydCB3aXRoIGlubGluZSBkYXRhLgorCSAqIElmIHN1cHBvcnRlZCwgZGlyZWN0b3JpZXMgc3RhcnQgd2l0aCBpbmxpbmUgZGF0YS4gSWYgaW5saW5lCisJICogaXNuJ3Qgc3VwcG9ydGVkLCBidXQgaW5kZXhpbmcgaXMsIHdlIHN0YXJ0IHRoZW0gYXMgaW5kZXhlZC4KIAkgKi8KKwlmZWF0ID0gbGUxNl90b19jcHUoZmUtPmlfZHluX2ZlYXR1cmVzKTsKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiBvY2ZzMl9zdXBwb3J0c19pbmxpbmVfZGF0YShvc2IpKSB7Ci0JCXUxNiBmZWF0ID0gbGUxNl90b19jcHUoZmUtPmlfZHluX2ZlYXR1cmVzKTsKLQogCQlmZS0+aV9keW5fZmVhdHVyZXMgPSBjcHVfdG9fbGUxNihmZWF0IHwgT0NGUzJfSU5MSU5FX0RBVEFfRkwpOwogCiAJCWZlLT5pZDIuaV9kYXRhLmlkX2NvdW50ID0gY3B1X3RvX2xlMTYoCkBAIC02MDgsOSArNjI1LDkgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZmVfYmggPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoID0gTlVMTDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRlX2JoID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBsb29rdXAgPSB7IE5VTEwsIH07CiAKIAltbG9nX2VudHJ5KCIoaW5vZGU9JWx1LCBvbGQ9JyUuKnMnIG5ldz0nJS4qcycpXG4iLCBpbm9kZS0+aV9pbm8sCiAJCSAgIG9sZF9kZW50cnktPmRfbmFtZS5sZW4sIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLApAQCAtNjM4LDcgKzY1NSw3IEBACiAKIAllcnIgPSBvY2ZzMl9wcmVwYXJlX2Rpcl9mb3JfaW5zZXJ0KG9zYiwgZGlyLCBwYXJlbnRfZmVfYmgsCiAJCQkJCSAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkJCSAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgJmRlX2JoKTsKKwkJCQkJICAgZGVudHJ5LT5kX25hbWUubGVuLCAmbG9va3VwKTsKIAlpZiAoZXJyIDwgMCkgewogCQltbG9nX2Vycm5vKGVycik7CiAJCWdvdG8gb3V0OwpAQCAtNjUyLDcgKzY2OSw3IEBACiAJfQogCiAJZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBmZV9iaC0+Yl9kYXRhOwotCWlmIChsZTE2X3RvX2NwdShmZS0+aV9saW5rc19jb3VudCkgPj0gT0NGUzJfTElOS19NQVgpIHsKKwlpZiAob2NmczJfcmVhZF9saW5rc19jb3VudChmZSkgPj0gb2NmczJfbGlua19tYXgob3NiKSkgewogCQllcnIgPSAtRU1MSU5LOwogCQlnb3RvIG91dF91bmxvY2tfaW5vZGU7CiAJfQpAQCAtNjc0LDEzICs2OTEsMTMgQEAKIAogCWluY19ubGluayhpbm9kZSk7CiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JZmUtPmlfbGlua3NfY291bnQgPSBjcHVfdG9fbGUxNihpbm9kZS0+aV9ubGluayk7CisJb2NmczJfc2V0X2xpbmtzX2NvdW50KGZlLCBpbm9kZS0+aV9ubGluayk7CiAJZmUtPmlfY3RpbWUgPSBjcHVfdG9fbGU2NChpbm9kZS0+aV9jdGltZS50dl9zZWMpOwogCWZlLT5pX2N0aW1lX25zZWMgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9jdGltZS50dl9uc2VjKTsKIAogCWVyciA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBmZV9iaCk7CiAJaWYgKGVyciA8IDApIHsKLQkJbGUxNl9hZGRfY3B1KCZmZS0+aV9saW5rc19jb3VudCwgLTEpOworCQlvY2ZzMl9hZGRfbGlua3NfY291bnQoZmUsIC0xKTsKIAkJZHJvcF9ubGluayhpbm9kZSk7CiAJCW1sb2dfZXJybm8oZXJyKTsKIAkJZ290byBvdXRfY29tbWl0OwpAQCAtNjg4LDkgKzcwNSw5IEBACiAKIAllcnIgPSBvY2ZzMl9hZGRfZW50cnkoaGFuZGxlLCBkZW50cnksIGlub2RlLAogCQkJICAgICAgT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vLAotCQkJICAgICAgcGFyZW50X2ZlX2JoLCBkZV9iaCk7CisJCQkgICAgICBwYXJlbnRfZmVfYmgsICZsb29rdXApOwogCWlmIChlcnIpIHsKLQkJbGUxNl9hZGRfY3B1KCZmZS0+aV9saW5rc19jb3VudCwgLTEpOworCQlvY2ZzMl9hZGRfbGlua3NfY291bnQoZmUsIC0xKTsKIAkJZHJvcF9ubGluayhpbm9kZSk7CiAJCW1sb2dfZXJybm8oZXJyKTsKIAkJZ290byBvdXRfY29tbWl0OwpAQCAtNzE0LDEwICs3MzEsMTEgQEAKIG91dDoKIAlvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAxKTsKIAotCWJyZWxzZShkZV9iaCk7CiAJYnJlbHNlKGZlX2JoKTsKIAlicmVsc2UocGFyZW50X2ZlX2JoKTsKIAorCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmxvb2t1cCk7CisKIAltbG9nX2V4aXQoZXJyKTsKIAogCXJldHVybiBlcnI7CkBAIC03NjYsMTAgKzc4NCw5IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfbm9kZV9iaCA9IE5VTEw7CiAJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqZGlyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcmVudF9iaCA9IE5VTEw7CiAJY2hhciBvcnBoYW5fbmFtZVtPQ0ZTMl9PUlBIQU5fTkFNRUxFTiArIDFdOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqb3JwaGFuX2VudHJ5X2JoID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgbG9va3VwID0geyBOVUxMLCB9OworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBvcnBoYW5faW5zZXJ0ID0geyBOVUxMLCB9OwogCiAJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsICclLipzJylcbiIsIGRpciwgZGVudHJ5LAogCQkgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwpAQCAtNzkxLDggKzgwOCw4IEBACiAJfQogCiAJc3RhdHVzID0gb2NmczJfZmluZF9maWxlc19vbl9kaXNrKGRlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkJCSAgZGVudHJ5LT5kX25hbWUubGVuLCAmYmxrbm8sCi0JCQkJCSAgZGlyLCAmZGlyZW50X2JoLCAmZGlyZW50KTsKKwkJCQkJICBkZW50cnktPmRfbmFtZS5sZW4sICZibGtubywgZGlyLAorCQkJCQkgICZsb29rdXApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWlmIChzdGF0dXMgIT0gLUVOT0VOVCkKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTgxNywxMCArODM0LDcgQEAKIAljaGlsZF9sb2NrZWQgPSAxOwogCiAJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkgICAgICAgCWlmICghb2NmczJfZW1wdHlfZGlyKGlub2RlKSkgewotCQkJc3RhdHVzID0gLUVOT1RFTVBUWTsKLQkJCWdvdG8gbGVhdmU7Ci0JCX0gZWxzZSBpZiAoaW5vZGUtPmlfbmxpbmsgIT0gMikgeworCQlpZiAoaW5vZGUtPmlfbmxpbmsgIT0gMiB8fCAhb2NmczJfZW1wdHlfZGlyKGlub2RlKSkgewogCQkJc3RhdHVzID0gLUVOT1RFTVBUWTsKIAkJCWdvdG8gbGVhdmU7CiAJCX0KQEAgLTgzNiw4ICs4NTAsNyBAQAogCiAJaWYgKGlub2RlX2lzX3VubGlua2FibGUoaW5vZGUpKSB7CiAJCXN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfb3JwaGFuX2Rpcihvc2IsICZvcnBoYW5fZGlyLCBpbm9kZSwKLQkJCQkJCSAgb3JwaGFuX25hbWUsCi0JCQkJCQkgICZvcnBoYW5fZW50cnlfYmgpOworCQkJCQkJICBvcnBoYW5fbmFtZSwgJm9ycGhhbl9pbnNlcnQpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBsZWF2ZTsKQEAgLTg2Myw3ICs4NzYsNyBAQAogCiAJaWYgKGlub2RlX2lzX3VubGlua2FibGUoaW5vZGUpKSB7CiAJCXN0YXR1cyA9IG9jZnMyX29ycGhhbl9hZGQob3NiLCBoYW5kbGUsIGlub2RlLCBmZSwgb3JwaGFuX25hbWUsCi0JCQkJCSAgb3JwaGFuX2VudHJ5X2JoLCBvcnBoYW5fZGlyKTsKKwkJCQkJICAmb3JwaGFuX2luc2VydCwgb3JwaGFuX2Rpcik7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGxlYXZlOwpAQCAtODcxLDcgKzg4NCw3IEBACiAJfQogCiAJLyogZGVsZXRlIHRoZSBuYW1lIGZyb20gdGhlIHBhcmVudCBkaXIgKi8KLQlzdGF0dXMgPSBvY2ZzMl9kZWxldGVfZW50cnkoaGFuZGxlLCBkaXIsIGRpcmVudCwgZGlyZW50X2JoKTsKKwlzdGF0dXMgPSBvY2ZzMl9kZWxldGVfZW50cnkoaGFuZGxlLCBkaXIsICZsb29rdXApOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTg4MCw3ICs4OTMsNyBAQAogCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQlkcm9wX25saW5rKGlub2RlKTsKIAlkcm9wX25saW5rKGlub2RlKTsKLQlmZS0+aV9saW5rc19jb3VudCA9IGNwdV90b19sZTE2KGlub2RlLT5pX25saW5rKTsKKwlvY2ZzMl9zZXRfbGlua3NfY291bnQoZmUsIGlub2RlLT5pX25saW5rKTsKIAogCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBmZV9iaCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTkxNiw5ICs5MjksMTAgQEAKIAl9CiAKIAlicmVsc2UoZmVfYmgpOwotCWJyZWxzZShkaXJlbnRfYmgpOwogCWJyZWxzZShwYXJlbnRfbm9kZV9iaCk7Ci0JYnJlbHNlKG9ycGhhbl9lbnRyeV9iaCk7CisKKwlvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KCZvcnBoYW5faW5zZXJ0KTsKKwlvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KCZsb29rdXApOwogCiAJbWxvZ19leGl0KHN0YXR1cyk7CiAKQEAgLTEwMDQsOCArMTAxOCw4IEBACiAJCQlzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsCiAJCQlzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewotCWludCBzdGF0dXMgPSAwLCByZW5hbWVfbG9jayA9IDAsIHBhcmVudHNfbG9ja2VkID0gMDsKLQlpbnQgb2xkX2NoaWxkX2xvY2tlZCA9IDAsIG5ld19jaGlsZF9sb2NrZWQgPSAwOworCWludCBzdGF0dXMgPSAwLCByZW5hbWVfbG9jayA9IDAsIHBhcmVudHNfbG9ja2VkID0gMCwgdGFyZ2V0X2V4aXN0cyA9IDA7CisJaW50IG9sZF9jaGlsZF9sb2NrZWQgPSAwLCBuZXdfY2hpbGRfbG9ja2VkID0gMCwgdXBkYXRlX2RvdF9kb3QgPSAwOwogCXN0cnVjdCBpbm9kZSAqb2xkX2lub2RlID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZSA9IG5ld19kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGlub2RlICpvcnBoYW5fZGlyID0gTlVMTDsKQEAgLTEwMjAsMTMgKzEwMzQsMTMgQEAKIAloYW5kbGVfdCAqaGFuZGxlID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9kaXJfYmggPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2Rpcl9iaCA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqb2xkX2lub2RlX2RvdF9kb3RfZGUgPSBOVUxMLCAqb2xkX2RlID0gTlVMTCwKLQkJKm5ld19kZSA9IE5VTEw7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfZGVfYmggPSBOVUxMLCAqb2xkX2RlX2JoID0gTlVMTDsgLy8gYmhzIGZvciBhYm92ZQotCXN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2lub2RlX2RlX2JoID0gTlVMTDsgLy8gaWYgb2xkX2RlbnRyeSBpcyBhIGRpciwKLQkJCQkJCSAgICAvLyB0aGlzIGlzIHRoZSAxc3QgZGlyZW50IGJoCiAJbmxpbmtfdCBvbGRfZGlyX25saW5rID0gb2xkX2Rpci0+aV9ubGluazsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpvbGRfZGk7CisJc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IG9sZF9pbm9kZV9kb3RfZG90X3JlcyA9IHsgTlVMTCwgfTsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgdGFyZ2V0X2xvb2t1cF9yZXMgPSB7IE5VTEwsIH07CisJc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IG9sZF9lbnRyeV9sb29rdXAgPSB7IE5VTEwsIH07CisJc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IG9ycGhhbl9pbnNlcnQgPSB7IE5VTEwsIH07CisJc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IHRhcmdldF9pbnNlcnQgPSB7IE5VTEwsIH07CiAKIAkvKiBBdCBzb21lIHBvaW50IGl0IG1pZ2h0IGJlIG5pY2UgdG8gYnJlYWsgdGhpcyBmdW5jdGlvbiB1cCBhCiAJICogYml0LiAqLwpAQCAtMTEwOCw5ICsxMTIyLDEwIEBACiAJaWYgKFNfSVNESVIob2xkX2lub2RlLT5pX21vZGUpKSB7CiAJCXU2NCBvbGRfaW5vZGVfcGFyZW50OwogCisJCXVwZGF0ZV9kb3RfZG90ID0gMTsKIAkJc3RhdHVzID0gb2NmczJfZmluZF9maWxlc19vbl9kaXNrKCIuLiIsIDIsICZvbGRfaW5vZGVfcGFyZW50LAotCQkJCQkJICBvbGRfaW5vZGUsICZvbGRfaW5vZGVfZGVfYmgsCi0JCQkJCQkgICZvbGRfaW5vZGVfZG90X2RvdF9kZSk7CisJCQkJCQkgIG9sZF9pbm9kZSwKKwkJCQkJCSAgJm9sZF9pbm9kZV9kb3RfZG90X3Jlcyk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCXN0YXR1cyA9IC1FSU87CiAJCQlnb3RvIGJhaWw7CkBAIC0xMTIyLDcgKzExMzcsNyBAQAogCQl9CiAKIAkJaWYgKCFuZXdfaW5vZGUgJiYgbmV3X2RpciAhPSBvbGRfZGlyICYmCi0JCSAgICBuZXdfZGlyLT5pX25saW5rID49IE9DRlMyX0xJTktfTUFYKSB7CisJCSAgICBuZXdfZGlyLT5pX25saW5rID49IG9jZnMyX2xpbmtfbWF4KG9zYikpIHsKIAkJCXN0YXR1cyA9IC1FTUxJTks7CiAJCQlnb3RvIGJhaWw7CiAJCX0KQEAgLTExNTEsOCArMTE2Niw4IEBACiAJICogdG8gZGVsZXRlIGl0ICovCiAJc3RhdHVzID0gb2NmczJfZmluZF9maWxlc19vbl9kaXNrKG5ld19kZW50cnktPmRfbmFtZS5uYW1lLAogCQkJCQkgIG5ld19kZW50cnktPmRfbmFtZS5sZW4sCi0JCQkJCSAgJm5ld2ZlX2Jsa25vLCBuZXdfZGlyLCAmbmV3X2RlX2JoLAotCQkJCQkgICZuZXdfZGUpOworCQkJCQkgICZuZXdmZV9ibGtubywgbmV3X2RpciwKKwkJCQkJICAmdGFyZ2V0X2xvb2t1cF9yZXMpOwogCS8qIFRoZSBvbmx5IGVycm9yIHdlIGFsbG93IGhlcmUgaXMgLUVOT0VOVCBiZWNhdXNlIHRoZSBuZXcKIAkgKiBmaWxlIG5vdCBleGlzdGluZyBpcyBwZXJmZWN0bHkgdmFsaWQuICovCiAJaWYgKChzdGF0dXMgPCAwKSAmJiAoc3RhdHVzICE9IC1FTk9FTlQpKSB7CkBAIC0xMTYxLDggKzExNzYsMTAgQEAKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CiAJfQorCWlmIChzdGF0dXMgPT0gMCkKKwkJdGFyZ2V0X2V4aXN0cyA9IDE7CiAKLQlpZiAoIW5ld19kZSAmJiBuZXdfaW5vZGUpIHsKKwlpZiAoIXRhcmdldF9leGlzdHMgJiYgbmV3X2lub2RlKSB7CiAJCS8qCiAJCSAqIFRhcmdldCB3YXMgdW5saW5rZWQgYnkgYW5vdGhlciBub2RlIHdoaWxlIHdlIHdlcmUKIAkJICogd2FpdGluZyB0byBnZXQgdG8gb2NmczJfcmVuYW1lKCkuIFRoZXJlIGlzbid0CkBAIC0xMTc1LDcgKzExOTIsNyBAQAogCiAJLyogSW4gY2FzZSB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyBmaWxlLCB3ZSBibG93IGl0CiAJICogYXdheSBmaXJzdCAqLwotCWlmIChuZXdfZGUpIHsKKwlpZiAodGFyZ2V0X2V4aXN0cykgewogCQkvKiBWRlMgZGlkbid0IHRoaW5rIHRoZXJlIGV4aXN0ZWQgYW4gaW5vZGUgaGVyZSwgYnV0CiAJCSAqIHNvbWVvbmUgZWxzZSBpbiB0aGUgY2x1c3RlciBtdXN0IGhhdmUgcmFjZWQgb3VyCiAJCSAqIHJlbmFtZSB0byBjcmVhdGUgb25lLiBUb2RheSB3ZSBlcnJvciBjbGVhbmx5LCBpbgpAQCAtMTIxNiw4ICsxMjMzLDggQEAKIAogCQluZXdmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIG5ld2ZlX2JoLT5iX2RhdGE7CiAKLQkJbWxvZygwLCAiYWhhIHJlbmFtZSBvdmVyIGV4aXN0aW5nLi4uIG5ld19kZT0lcCBuZXdfYmxrbm89JWxsdSAiCi0JCSAgICAgIm5ld2ZlYmg9JXAgYmhibG9ja25yPSVsbHVcbiIsIG5ld19kZSwKKwkJbWxvZygwLCAiYWhhIHJlbmFtZSBvdmVyIGV4aXN0aW5nLi4uIG5ld19ibGtubz0lbGx1ICIKKwkJICAgICAibmV3ZmViaD0lcCBiaGJsb2NrbnI9JWxsdVxuIiwKIAkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW5ld2ZlX2Jsa25vLCBuZXdmZV9iaCwgbmV3ZmVfYmggPwogCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV3ZmVfYmgtPmJfYmxvY2tuciA6IDBVTEwpOwogCkBAIC0xMjI1LDcgKzEyNDIsNyBAQAogCQkJc3RhdHVzID0gb2NmczJfcHJlcGFyZV9vcnBoYW5fZGlyKG9zYiwgJm9ycGhhbl9kaXIsCiAJCQkJCQkJICBuZXdfaW5vZGUsCiAJCQkJCQkJICBvcnBoYW5fbmFtZSwKLQkJCQkJCQkgICZvcnBoYW5fZW50cnlfYmgpOworCQkJCQkJCSAgJm9ycGhhbl9pbnNlcnQpOwogCQkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQkJZ290byBiYWlsOwpAQCAtMTI0Myw3ICsxMjYwLDcgQEAKIAkJc3RhdHVzID0gb2NmczJfcHJlcGFyZV9kaXJfZm9yX2luc2VydChvc2IsIG5ld19kaXIsIG5ld19kaXJfYmgsCiAJCQkJCQkgICAgICBuZXdfZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCQkJCSAgICAgIG5ld19kZW50cnktPmRfbmFtZS5sZW4sCi0JCQkJCQkgICAgICAmaW5zZXJ0X2VudHJ5X2JoKTsKKwkJCQkJCSAgICAgICZ0YXJnZXRfaW5zZXJ0KTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gYmFpbDsKQEAgLTEyNTgsMTAgKzEyNzUsMTAgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCWlmIChuZXdfZGUpIHsKKwlpZiAodGFyZ2V0X2V4aXN0cykgewogCQlpZiAoU19JU0RJUihuZXdfaW5vZGUtPmlfbW9kZSkpIHsKLQkJCWlmICghb2NmczJfZW1wdHlfZGlyKG5ld19pbm9kZSkgfHwKLQkJCSAgICBuZXdfaW5vZGUtPmlfbmxpbmsgIT0gMikgeworCQkJaWYgKG5ld19pbm9kZS0+aV9ubGluayAhPSAyIHx8CisJCQkgICAgIW9jZnMyX2VtcHR5X2RpcihuZXdfaW5vZGUpKSB7CiAJCQkJc3RhdHVzID0gLUVOT1RFTVBUWTsKIAkJCQlnb3RvIGJhaWw7CiAJCQl9CkBAIC0xMjc0LDEwICsxMjkxLDEwIEBACiAJCX0KIAogCQlpZiAoU19JU0RJUihuZXdfaW5vZGUtPmlfbW9kZSkgfHwKLQkJICAgIChuZXdmZS0+aV9saW5rc19jb3VudCA9PSBjcHVfdG9fbGUxNigxKSkpeworCQkgICAgKG9jZnMyX3JlYWRfbGlua3NfY291bnQobmV3ZmUpID09IDEpKSB7CiAJCQlzdGF0dXMgPSBvY2ZzMl9vcnBoYW5fYWRkKG9zYiwgaGFuZGxlLCBuZXdfaW5vZGUsCiAJCQkJCQkgIG5ld2ZlLCBvcnBoYW5fbmFtZSwKLQkJCQkJCSAgb3JwaGFuX2VudHJ5X2JoLCBvcnBoYW5fZGlyKTsKKwkJCQkJCSAgJm9ycGhhbl9pbnNlcnQsIG9ycGhhbl9kaXIpOwogCQkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQkJZ290byBiYWlsOwpAQCAtMTI4NSw4ICsxMzAyLDggQEAKIAkJfQogCiAJCS8qIGNoYW5nZSB0aGUgZGlyZW50IHRvIHBvaW50IHRvIHRoZSBjb3JyZWN0IGlub2RlICovCi0JCXN0YXR1cyA9IG9jZnMyX3VwZGF0ZV9lbnRyeShuZXdfZGlyLCBoYW5kbGUsIG5ld19kZV9iaCwKLQkJCQkJICAgIG5ld19kZSwgb2xkX2lub2RlKTsKKwkJc3RhdHVzID0gb2NmczJfdXBkYXRlX2VudHJ5KG5ld19kaXIsIGhhbmRsZSwgJnRhcmdldF9sb29rdXBfcmVzLAorCQkJCQkgICAgb2xkX2lub2RlKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJCWdvdG8gYmFpbDsKQEAgLTEyOTQsOSArMTMxMSw5IEBACiAJCW5ld19kaXItPmlfdmVyc2lvbisrOwogCiAJCWlmIChTX0lTRElSKG5ld19pbm9kZS0+aV9tb2RlKSkKLQkJCW5ld2ZlLT5pX2xpbmtzX2NvdW50ID0gMDsKKwkJCW9jZnMyX3NldF9saW5rc19jb3VudChuZXdmZSwgMCk7CiAJCWVsc2UKLQkJCWxlMTZfYWRkX2NwdSgmbmV3ZmUtPmlfbGlua3NfY291bnQsIC0xKTsKKwkJCW9jZnMyX2FkZF9saW5rc19jb3VudChuZXdmZSwgLTEpOwogCiAJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBuZXdmZV9iaCk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0xMzA3LDcgKzEzMjQsNyBAQAogCQkvKiBpZiB0aGUgbmFtZSB3YXMgbm90IGZvdW5kIGluIG5ld19kaXIsIGFkZCBpdCBub3cgKi8KIAkJc3RhdHVzID0gb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgbmV3X2RlbnRyeSwgb2xkX2lub2RlLAogCQkJCQkgT0NGUzJfSShvbGRfaW5vZGUpLT5pcF9ibGtubywKLQkJCQkJIG5ld19kaXJfYmgsIGluc2VydF9lbnRyeV9iaCk7CisJCQkJCSBuZXdfZGlyX2JoLCAmdGFyZ2V0X2luc2VydCk7CiAJfQogCiAJb2xkX2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwpAQCAtMTMzNCwxNSArMTM1MSwxMyBAQAogCSAqIGJlY2F1c2UgdGhlIGluc2VydCBtaWdodCBoYXZlIGNoYW5nZWQgdGhlIHR5cGUgb2YgZGlyZWN0b3J5CiAJICogd2UncmUgZGVhbGluZyB3aXRoLgogCSAqLwotCW9sZF9kZV9iaCA9IG9jZnMyX2ZpbmRfZW50cnkob2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCi0JCQkJICAgICBvbGRfZGVudHJ5LT5kX25hbWUubGVuLAotCQkJCSAgICAgb2xkX2RpciwgJm9sZF9kZSk7Ci0JaWYgKCFvbGRfZGVfYmgpIHsKLQkJc3RhdHVzID0gLUVJTzsKKwlzdGF0dXMgPSBvY2ZzMl9maW5kX2VudHJ5KG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAorCQkJCSAgb2xkX2RlbnRyeS0+ZF9uYW1lLmxlbiwgb2xkX2RpciwKKwkJCQkgICZvbGRfZW50cnlfbG9va3VwKTsKKwlpZiAoc3RhdHVzKQogCQlnb3RvIGJhaWw7Ci0JfQogCi0Jc3RhdHVzID0gb2NmczJfZGVsZXRlX2VudHJ5KGhhbmRsZSwgb2xkX2Rpciwgb2xkX2RlLCBvbGRfZGVfYmgpOworCXN0YXR1cyA9IG9jZnMyX2RlbGV0ZV9lbnRyeShoYW5kbGUsIG9sZF9kaXIsICZvbGRfZW50cnlfbG9va3VwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKQEAgLTEzNTMsOSArMTM2OCwxMCBAQAogCQluZXdfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJfQogCW9sZF9kaXItPmlfY3RpbWUgPSBvbGRfZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOwotCWlmIChvbGRfaW5vZGVfZGVfYmgpIHsKLQkJc3RhdHVzID0gb2NmczJfdXBkYXRlX2VudHJ5KG9sZF9pbm9kZSwgaGFuZGxlLCBvbGRfaW5vZGVfZGVfYmgsCi0JCQkJCSAgICBvbGRfaW5vZGVfZG90X2RvdF9kZSwgbmV3X2Rpcik7CisKKwlpZiAodXBkYXRlX2RvdF9kb3QpIHsKKwkJc3RhdHVzID0gb2NmczJfdXBkYXRlX2VudHJ5KG9sZF9pbm9kZSwgaGFuZGxlLAorCQkJCQkgICAgJm9sZF9pbm9kZV9kb3RfZG90X3JlcywgbmV3X2Rpcik7CiAJCW9sZF9kaXItPmlfbmxpbmstLTsKIAkJaWYgKG5ld19pbm9kZSkgewogCQkJbmV3X2lub2RlLT5pX25saW5rLS07CkBAIC0xMzkxLDE0ICsxNDA3LDEzIEBACiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZTsKIAkJCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgb2xkX2RpciwKLQkJCQkJCQkgb2xkX2Rpcl9iaCwKLQkJCQkJCQkgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCQkJCQkJICAgICAgb2xkX2Rpcl9iaCwKKwkJCQkJCSAgICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKIAkJCWZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgb2xkX2Rpcl9iaC0+Yl9kYXRhOwotCQkJZmUtPmlfbGlua3NfY291bnQgPSBjcHVfdG9fbGUxNihvbGRfZGlyLT5pX25saW5rKTsKKwkJCW9jZnMyX3NldF9saW5rc19jb3VudChmZSwgb2xkX2Rpci0+aV9ubGluayk7CiAJCQlzdGF0dXMgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgb2xkX2Rpcl9iaCk7CiAJCX0KIAl9Ci0KIAlvY2ZzMl9kZW50cnlfbW92ZShvbGRfZGVudHJ5LCBuZXdfZGVudHJ5LCBvbGRfZGlyLCBuZXdfZGlyKTsKIAlzdGF0dXMgPSAwOwogYmFpbDoKQEAgLTE0MjksMTMgKzE0NDQsMTcgQEAKIAogCWlmIChuZXdfaW5vZGUpCiAJCWlwdXQobmV3X2lub2RlKTsKKworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJnRhcmdldF9sb29rdXBfcmVzKTsKKwlvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KCZvbGRfZW50cnlfbG9va3VwKTsKKwlvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KCZvbGRfaW5vZGVfZG90X2RvdF9yZXMpOworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJm9ycGhhbl9pbnNlcnQpOworCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJnRhcmdldF9pbnNlcnQpOworCiAJYnJlbHNlKG5ld2ZlX2JoKTsKIAlicmVsc2Uob2xkX2lub2RlX2JoKTsKIAlicmVsc2Uob2xkX2Rpcl9iaCk7CiAJYnJlbHNlKG5ld19kaXJfYmgpOwotCWJyZWxzZShuZXdfZGVfYmgpOwotCWJyZWxzZShvbGRfZGVfYmgpOwotCWJyZWxzZShvbGRfaW5vZGVfZGVfYmgpOwogCWJyZWxzZShvcnBoYW5fZW50cnlfYmgpOwogCWJyZWxzZShpbnNlcnRfZW50cnlfYmgpOwogCkBAIC0xNTU4LDcgKzE1NzcsNiBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfZmVfYmggPSBOVUxMOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGVfYmggPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoID0gTlVMTDsKIAlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGlyZmU7CkBAIC0xNTcyLDYgKzE1OTAsNyBAQAogCQkuZW5hYmxlID0gMSwKIAl9OwogCWludCBkaWRfcXVvdGEgPSAwLCBkaWRfcXVvdGFfaW5vZGUgPSAwOworCXN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBsb29rdXAgPSB7IE5VTEwsIH07CiAKIAltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgc3ltbmFtZT0nJXMnIGFjdHVhbD0nJS4qcycpXG4iLCBkaXIsCiAJCSAgIGRlbnRyeSwgc3ltbmFtZSwgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKQEAgLTE1OTIsNyArMTYxMSw3IEBACiAJfQogCiAJZGlyZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBwYXJlbnRfZmVfYmgtPmJfZGF0YTsKLQlpZiAoIWRpcmZlLT5pX2xpbmtzX2NvdW50KSB7CisJaWYgKCFvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KGRpcmZlKSkgewogCQkvKiBjYW4ndCBtYWtlIGEgZmlsZSBpbiBhIGRlbGV0ZWQgZGlyZWN0b3J5LiAqLwogCQlzdGF0dXMgPSAtRU5PRU5UOwogCQlnb3RvIGJhaWw7CkBAIC0xNjA1LDcgKzE2MjQsNyBAQAogCiAJc3RhdHVzID0gb2NmczJfcHJlcGFyZV9kaXJfZm9yX2luc2VydChvc2IsIGRpciwgcGFyZW50X2ZlX2JoLAogCQkJCQkgICAgICBkZW50cnktPmRfbmFtZS5uYW1lLAotCQkJCQkgICAgICBkZW50cnktPmRfbmFtZS5sZW4sICZkZV9iaCk7CisJCQkJCSAgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgJmxvb2t1cCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC0xNzQ0LDcgKzE3NjMsNyBAQAogCiAJc3RhdHVzID0gb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwKIAkJCQkgbGU2NF90b19jcHUoZmUtPmlfYmxrbm8pLCBwYXJlbnRfZmVfYmgsCi0JCQkJIGRlX2JoKTsKKwkJCQkgJmxvb2t1cCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGJhaWw7CkBAIC0xNzcyLDkgKzE3OTEsOSBAQAogCiAJYnJlbHNlKG5ld19mZV9iaCk7CiAJYnJlbHNlKHBhcmVudF9mZV9iaCk7Ci0JYnJlbHNlKGRlX2JoKTsKIAlrZnJlZShzaS5uYW1lKTsKIAlrZnJlZShzaS52YWx1ZSk7CisJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmbG9va3VwKTsKIAlpZiAoaW5vZGVfYWMpCiAJCW9jZnMyX2ZyZWVfYWxsb2NfY29udGV4dChpbm9kZV9hYyk7CiAJaWYgKGRhdGFfYWMpCkBAIC0xODI2LDcgKzE4NDUsNyBAQAogCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKipyZXRfb3JwaGFuX2RpciwKIAkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgY2hhciAqbmFtZSwKLQkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqZGVfYmgpCisJCQkJICAgIHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCAqbG9va3VwKQogewogCXN0cnVjdCBpbm9kZSAqb3JwaGFuX2Rpcl9pbm9kZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9ycGhhbl9kaXJfYmggPSBOVUxMOwpAQCAtMTg1Nyw3ICsxODc2LDcgQEAKIAogCXN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfZGlyX2Zvcl9pbnNlcnQob3NiLCBvcnBoYW5fZGlyX2lub2RlLAogCQkJCQkgICAgICBvcnBoYW5fZGlyX2JoLCBuYW1lLAotCQkJCQkgICAgICBPQ0ZTMl9PUlBIQU5fTkFNRUxFTiwgZGVfYmgpOworCQkJCQkgICAgICBPQ0ZTMl9PUlBIQU5fTkFNRUxFTiwgbG9va3VwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlvY2ZzMl9pbm9kZV91bmxvY2sob3JwaGFuX2Rpcl9pbm9kZSwgMSk7CiAKQEAgLTE4ODQsNyArMTkwMyw3IEBACiAJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICBzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSwKIAkJCSAgICBjaGFyICpuYW1lLAotCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGVfYmgsCisJCQkgICAgc3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0ICpsb29rdXAsCiAJCQkgICAgc3RydWN0IGlub2RlICpvcnBoYW5fZGlyX2lub2RlKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqb3JwaGFuX2Rpcl9iaCA9IE5VTEw7CkBAIC0xOTEwLDggKzE5MjksOCBAQAogCSAqIHVuZGVybmVhdGggdXMuLi4gKi8KIAlvcnBoYW5fZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBvcnBoYW5fZGlyX2JoLT5iX2RhdGE7CiAJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCi0JCWxlMTZfYWRkX2NwdSgmb3JwaGFuX2ZlLT5pX2xpbmtzX2NvdW50LCAxKTsKLQlvcnBoYW5fZGlyX2lub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUob3JwaGFuX2ZlLT5pX2xpbmtzX2NvdW50KTsKKwkJb2NmczJfYWRkX2xpbmtzX2NvdW50KG9ycGhhbl9mZSwgMSk7CisJb3JwaGFuX2Rpcl9pbm9kZS0+aV9ubGluayA9IG9jZnMyX3JlYWRfbGlua3NfY291bnQob3JwaGFuX2ZlKTsKIAogCXN0YXR1cyA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBvcnBoYW5fZGlyX2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtMTkyMiw3ICsxOTQxLDcgQEAKIAlzdGF0dXMgPSBfX29jZnMyX2FkZF9lbnRyeShoYW5kbGUsIG9ycGhhbl9kaXJfaW5vZGUsIG5hbWUsCiAJCQkJICAgT0NGUzJfT1JQSEFOX05BTUVMRU4sIGlub2RlLAogCQkJCSAgIE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubywKLQkJCQkgICBvcnBoYW5fZGlyX2JoLCBkZV9iaCk7CisJCQkJICAgb3JwaGFuX2Rpcl9iaCwgbG9va3VwKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gbGVhdmU7CkBAIC0xOTU1LDggKzE5NzQsNyBAQAogCWNoYXIgbmFtZVtPQ0ZTMl9PUlBIQU5fTkFNRUxFTiArIDFdOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKm9ycGhhbl9mZTsKIAlpbnQgc3RhdHVzID0gMDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRhcmdldF9kZV9iaCA9IE5VTEw7Ci0Jc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqdGFyZ2V0X2RlID0gTlVMTDsKKwlzdHJ1Y3Qgb2NmczJfZGlyX2xvb2t1cF9yZXN1bHQgbG9va3VwID0geyBOVUxMLCB9OwogCiAJbWxvZ19lbnRyeV92b2lkKCk7CiAKQEAgLTE5NzEsMTcgKzE5ODksMTUgQEAKIAkgICAgIE9DRlMyX09SUEhBTl9OQU1FTEVOKTsKIAogCS8qIGZpbmQgaXQncyBzcG90IGluIHRoZSBvcnBoYW4gZGlyZWN0b3J5ICovCi0JdGFyZ2V0X2RlX2JoID0gb2NmczJfZmluZF9lbnRyeShuYW1lLCBPQ0ZTMl9PUlBIQU5fTkFNRUxFTiwKLQkJCQkJb3JwaGFuX2Rpcl9pbm9kZSwgJnRhcmdldF9kZSk7Ci0JaWYgKCF0YXJnZXRfZGVfYmgpIHsKLQkJc3RhdHVzID0gLUVOT0VOVDsKKwlzdGF0dXMgPSBvY2ZzMl9maW5kX2VudHJ5KG5hbWUsIE9DRlMyX09SUEhBTl9OQU1FTEVOLCBvcnBoYW5fZGlyX2lub2RlLAorCQkJCSAgJmxvb2t1cCk7CisJaWYgKHN0YXR1cykgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gbGVhdmU7CiAJfQogCiAJLyogcmVtb3ZlIGl0IGZyb20gdGhlIG9ycGhhbiBkaXJlY3RvcnkgKi8KLQlzdGF0dXMgPSBvY2ZzMl9kZWxldGVfZW50cnkoaGFuZGxlLCBvcnBoYW5fZGlyX2lub2RlLCB0YXJnZXRfZGUsCi0JCQkJICAgIHRhcmdldF9kZV9iaCk7CisJc3RhdHVzID0gb2NmczJfZGVsZXRlX2VudHJ5KGhhbmRsZSwgb3JwaGFuX2Rpcl9pbm9kZSwgJmxvb2t1cCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQlnb3RvIGxlYXZlOwpAQCAtMTk5Nyw4ICsyMDEzLDggQEAKIAkvKiBkbyB0aGUgaV9ubGluayBkYW5jZSEgOikgKi8KIAlvcnBoYW5fZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBvcnBoYW5fZGlyX2JoLT5iX2RhdGE7CiAJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCi0JCWxlMTZfYWRkX2NwdSgmb3JwaGFuX2ZlLT5pX2xpbmtzX2NvdW50LCAtMSk7Ci0Jb3JwaGFuX2Rpcl9pbm9kZS0+aV9ubGluayA9IGxlMTZfdG9fY3B1KG9ycGhhbl9mZS0+aV9saW5rc19jb3VudCk7CisJCW9jZnMyX2FkZF9saW5rc19jb3VudChvcnBoYW5fZmUsIC0xKTsKKwlvcnBoYW5fZGlyX2lub2RlLT5pX25saW5rID0gb2NmczJfcmVhZF9saW5rc19jb3VudChvcnBoYW5fZmUpOwogCiAJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG9ycGhhbl9kaXJfYmgpOwogCWlmIChzdGF0dXMgPCAwKSB7CkBAIC0yMDA3LDcgKzIwMjMsNyBAQAogCX0KIAogbGVhdmU6Ci0JYnJlbHNlKHRhcmdldF9kZV9iaCk7CisJb2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdCgmbG9va3VwKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMi5oIGIvZnMvb2NmczIvb2NmczIuaAppbmRleCA5NDZkM2MzLi4xMzg2MjgxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMi5oCisrKyBiL2ZzL29jZnMyL29jZnMyLmgKQEAgLTIwOSw2ICsyMDksNyBAQAogc3RydWN0IG9jZnMyX2pvdXJuYWw7CiBzdHJ1Y3Qgb2NmczJfc2xvdF9pbmZvOwogc3RydWN0IG9jZnMyX3JlY292ZXJ5X21hcDsKK3N0cnVjdCBvY2ZzMl9yZXBsYXlfbWFwOwogc3RydWN0IG9jZnMyX3F1b3RhX3JlY292ZXJ5Owogc3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrOwogc3RydWN0IG9jZnMyX3N1cGVyCkBAIC0yNjQsNiArMjY1LDcgQEAKIAlhdG9taWNfdCB2b2xfc3RhdGU7CiAJc3RydWN0IG11dGV4IHJlY292ZXJ5X2xvY2s7CiAJc3RydWN0IG9jZnMyX3JlY292ZXJ5X21hcCAqcmVjb3ZlcnlfbWFwOworCXN0cnVjdCBvY2ZzMl9yZXBsYXlfbWFwICpyZXBsYXlfbWFwOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcmVjb3ZlcnlfdGhyZWFkX3Rhc2s7CiAJaW50IGRpc2FibGVfcmVjb3Zlcnk7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgY2hlY2twb2ludF9ldmVudDsKQEAgLTI4NywxMSArMjg5LDYgQEAKIAogCXU2NCBsYV9sYXN0X2dkOwogCi0jaWZkZWYgQ09ORklHX09DRlMyX0ZTX1NUQVRTCi0Jc3RydWN0IGRlbnRyeSAqbG9jYWxfYWxsb2NfZGVidWc7Ci0JY2hhciAqbG9jYWxfYWxsb2NfZGVidWdfYnVmOwotI2VuZGlmCi0KIAkvKiBOZXh0IHRocmVlIGZpZWxkcyBhcmUgZm9yIGxvY2FsIG5vZGUgc2xvdCByZWNvdmVyeSBkdXJpbmcKIAkgKiBtb3VudC4gKi8KIAlpbnQgZGlydHk7CkBAIC0zMDUsOSArMzAyLDExIEBACiAJc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY2Nvbm47CiAJc3RydWN0IG9jZnMyX2xvY2tfcmVzIG9zYl9zdXBlcl9sb2NrcmVzOwogCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyBvc2JfcmVuYW1lX2xvY2tyZXM7CisJc3RydWN0IG9jZnMyX2xvY2tfcmVzIG9zYl9uZnNfc3luY19sb2NrcmVzOwogCXN0cnVjdCBvY2ZzMl9kbG1fZGVidWcgKm9zYl9kbG1fZGVidWc7CiAKIAlzdHJ1Y3QgZGVudHJ5ICpvc2JfZGVidWdfcm9vdDsKKwlzdHJ1Y3QgZGVudHJ5ICpvc2JfY3R4dDsKIAogCXdhaXRfcXVldWVfaGVhZF90IHJlY292ZXJ5X2V2ZW50OwogCkBAIC0zNDQsNiArMzQzLDEyIEBACiAKIAkvKiB1c2VkIHRvIHByb3RlY3QgbWV0YWVjYyBjYWxjdWxhdGlvbiBjaGVjayBvZiB4YXR0ci4gKi8KIAlzcGlubG9ja190IG9zYl94YXR0cl9sb2NrOworCisJdW5zaWduZWQgaW50CQkJb3NiX2R4X21hc2s7CisJdTMyCQkJCW9zYl9keF9zZWVkWzRdOworCisJLyogdGhlIGdyb3VwIHdlIHVzZWQgdG8gYWxsb2NhdGUgaW5vZGVzLiAqLworCXU2NAkJCQlvc2JfaW5vZGVfYWxsb2NfZ3JvdXA7CiB9OwogCiAjZGVmaW5lIE9DRlMyX1NCKHNiKQkgICAgKChzdHJ1Y3Qgb2NmczJfc3VwZXIgKikoc2IpLT5zX2ZzX2luZm8pCkBAIC00MDIsNiArNDA3LDUxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX3N1cHBvcnRzX2luZGV4ZWRfZGlycyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKK3sKKwlpZiAob3NiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0lOREVYRURfRElSUykKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9jZnMyX2xpbmtfbWF4KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCWlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSkKKwkJcmV0dXJuIE9DRlMyX0RYX0xJTktfTUFYOworCXJldHVybiBPQ0ZTMl9MSU5LX01BWDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgb2NmczJfcmVhZF9saW5rc19jb3VudChzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSkKK3sKKwl1MzIgbmxpbmsgPSBsZTE2X3RvX2NwdShkaS0+aV9saW5rc19jb3VudCk7CisJdTMyIGhpID0gbGUxNl90b19jcHUoZGktPmlfbGlua3NfY291bnRfaGkpOworCisJaWYgKGRpLT5pX2R5bl9mZWF0dXJlcyAmIGNwdV90b19sZTE2KE9DRlMyX0lOREVYRURfRElSX0ZMKSkKKwkJbmxpbmsgfD0gKGhpIDw8IE9DRlMyX0xJTktTX0hJX1NISUZUKTsKKworCXJldHVybiBubGluazsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX3NldF9saW5rc19jb3VudChzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSwgdTMyIG5saW5rKQoreworCXUxNiBsbywgaGk7CisKKwlsbyA9IG5saW5rOworCWhpID0gbmxpbmsgPj4gT0NGUzJfTElOS1NfSElfU0hJRlQ7CisKKwlkaS0+aV9saW5rc19jb3VudCA9IGNwdV90b19sZTE2KGxvKTsKKwlkaS0+aV9saW5rc19jb3VudF9oaSA9IGNwdV90b19sZTE2KGhpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX2FkZF9saW5rc19jb3VudChzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSwgaW50IG4pCit7CisJdTMyIGxpbmtzID0gb2NmczJfcmVhZF9saW5rc19jb3VudChkaSk7CisKKwlsaW5rcyArPSBuOworCisJb2NmczJfc2V0X2xpbmtzX2NvdW50KGRpLCBsaW5rcyk7Cit9CisKIC8qIHNldCAvIGNsZWFyIGZ1bmN0aW9ucyBiZWNhdXNlIGNsdXN0ZXIgZXZlbnRzIGNhbiBtYWtlIHRoZXNlIGhhcHBlbgogICogaW4gcGFyYWxsZWwgc28gd2Ugd2FudCB0aGUgdHJhbnNpdGlvbnMgdG8gYmUgYXRvbWljLiB0aGlzIGFsc28KICAqIG1lYW5zIHRoYXQgYW55IGZ1dHVyZSBmbGFncyBvc2JfZmxhZ3MgbXVzdCBiZSBwcm90ZWN0ZWQgYnkgc3BpbmxvY2sKQEAgLTQ4Miw2ICs1MzIsMTIgQEAKICNkZWZpbmUgT0NGUzJfSVNfVkFMSURfRElSX1RSQUlMRVIocHRyKQkJCQkJXAogCSghc3RyY21wKChwdHIpLT5kYl9zaWduYXR1cmUsIE9DRlMyX0RJUl9UUkFJTEVSX1NJR05BVFVSRSkpCiAKKyNkZWZpbmUgT0NGUzJfSVNfVkFMSURfRFhfUk9PVChwdHIpCQkJCQlcCisJKCFzdHJjbXAoKHB0ciktPmRyX3NpZ25hdHVyZSwgT0NGUzJfRFhfUk9PVF9TSUdOQVRVUkUpKQorCisjZGVmaW5lIE9DRlMyX0lTX1ZBTElEX0RYX0xFQUYocHRyKQkJCQkJXAorCSghc3RyY21wKChwdHIpLT5kbF9zaWduYXR1cmUsIE9DRlMyX0RYX0xFQUZfU0lHTkFUVVJFKSkKKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGlub19mcm9tX2Jsa25vKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJCSAgIHU2NCBibGtubykKIHsKQEAgLTUzMiw2ICs1ODgsMTYgQEAKIAlyZXR1cm4gKHU2NCljbHVzdGVycyA8PCBPQ0ZTMl9TQihzYiktPnNfY2x1c3RlcnNpemVfYml0czsKIH0KIAorc3RhdGljIGlubGluZSB1NjQgb2NmczJfYmxvY2tfdG9fY2x1c3Rlcl9zdGFydChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQkgICAgICAgdTY0IGJsb2NrcykKK3sKKwlpbnQgYml0cyA9IE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzIC0gc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJdW5zaWduZWQgaW50IGNsdXN0ZXJzOworCisJY2x1c3RlcnMgPSBvY2ZzMl9ibG9ja3NfdG9fY2x1c3RlcnMoc2IsIGJsb2Nrcyk7CisJcmV0dXJuICh1NjQpY2x1c3RlcnMgPDwgYml0czsKK30KKwogc3RhdGljIGlubGluZSB1NjQgb2NmczJfYWxpZ25fYnl0ZXNfdG9fY2x1c3RlcnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJCXU2NCBieXRlcykKIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyX2ZzLmggYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCmluZGV4IDIzMzJlZjcuLjdhYjZlOWUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyX2ZzLmgKKysrIGIvZnMvb2NmczIvb2NmczJfZnMuaApAQCAtNjYsNiArNjYsOCBAQAogI2RlZmluZSBPQ0ZTMl9HUk9VUF9ERVNDX1NJR05BVFVSRSAgICAgICJHUk9VUDAxIgogI2RlZmluZSBPQ0ZTMl9YQVRUUl9CTE9DS19TSUdOQVRVUkUJIlhBVFRSMDEiCiAjZGVmaW5lIE9DRlMyX0RJUl9UUkFJTEVSX1NJR05BVFVSRQkiRElSVFJMMSIKKyNkZWZpbmUgT0NGUzJfRFhfUk9PVF9TSUdOQVRVUkUJCSJEWERJUjAxIgorI2RlZmluZSBPQ0ZTMl9EWF9MRUFGX1NJR05BVFVSRQkJIkRYTEVBRjEiCiAKIC8qIENvbXBhdGliaWxpdHkgZmxhZ3MgKi8KICNkZWZpbmUgT0NGUzJfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spCQkJXApAQCAtOTUsNyArOTcsOCBAQAogCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX0VYVEVOREVEX1NMT1RfTUFQIFwKIAkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9VU0VSU1BBQ0VfU1RBQ0sgXAogCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSIFwKLQkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0VDQykKKwkJCQkJIHwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0VDQyBcCisJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfSU5ERVhFRF9ESVJTKQogI2RlZmluZSBPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9TVVBQCShPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9VTldSSVRURU4gXAogCQkJCQkgfCBPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9VU1JRVU9UQSBcCiAJCQkJCSB8IE9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX0dSUFFVT1RBKQpAQCAtMTUxLDYgKzE1NCw5IEBACiAvKiBTdXBwb3J0IGZvciBleHRlbmRlZCBhdHRyaWJ1dGVzICovCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIJCTB4MDIwMAogCisvKiBTdXBwb3J0IGZvciBpbmRleGVkIGRpcmVjdG9yZXMgKi8KKyNkZWZpbmUgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9JTkRFWEVEX0RJUlMJMHgwNDAwCisKIC8qIE1ldGFkYXRhIGNoZWNrc3VtIGFuZCBlcnJvciBjb3JyZWN0aW9uICovCiAjZGVmaW5lIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9FQ0MJCTB4MDgwMAogCkBAIC00MTEsOCArNDE3LDEyIEBACiAjZGVmaW5lIE9DRlMyX0RJUl9SRUNfTEVOKG5hbWVfbGVuKQkoKChuYW1lX2xlbikgKyBPQ0ZTMl9ESVJfTUVNQkVSX0xFTiArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DRlMyX0RJUl9ST1VORCkgJiBcCiAJCQkJCSB+T0NGUzJfRElSX1JPVU5EKQorI2RlZmluZSBPQ0ZTMl9ESVJfTUlOX1JFQ19MRU4JT0NGUzJfRElSX1JFQ19MRU4oMSkKIAogI2RlZmluZSBPQ0ZTMl9MSU5LX01BWAkJMzIwMDAKKyNkZWZpbmUJT0NGUzJfRFhfTElOS19NQVgJKCgxVSA8PCAzMSkgLSAxVSkKKyNkZWZpbmUJT0NGUzJfTElOS1NfSElfU0hJRlQJMTYKKyNkZWZpbmUJT0NGUzJfRFhfRU5UUklFU19NQVgJKDB4ZmZmZmZmZmZVKQogCiAjZGVmaW5lIFNfU0hJRlQJCQkxMgogc3RhdGljIHVuc2lnbmVkIGNoYXIgb2NmczJfdHlwZV9ieV9tb2RlW1NfSUZNVCA+PiBTX1NISUZUXSA9IHsKQEAgLTYyOCw4ICs2MzgsOSBAQAogLypCOCovCV9fbGUxNiBzX3hhdHRyX2lubGluZV9zaXplOwkvKiBleHRlbmRlZCBhdHRyaWJ1dGUgaW5saW5lIHNpemUKIAkJCQkJICAgZm9yIHRoaXMgZnMqLwogCV9fbGUxNiBzX3Jlc2VydmVkMDsKLQlfX2xlMzIgc19yZXNlcnZlZDE7Ci0vKkMwKi8gIF9fbGU2NCBzX3Jlc2VydmVkMlsxNl07CQkvKiBGaWxsIG91dCBzdXBlcmJsb2NrICovCisJX19sZTMyIHNfZHhfc2VlZFszXTsJCS8qIHNlZWRbMC0yXSBmb3IgZHggZGlyIGhhc2guCisJCQkJCSAqIHNfdXVpZF9oYXNoIHNlcnZlcyBhcyBzZWVkWzNdLiAqLworLypDMCovICBfX2xlNjQgc19yZXNlcnZlZDJbMTVdOwkJLyogRmlsbCBvdXQgc3VwZXJibG9jayAqLwogLyoxNDAqLwogCiAJLyoKQEAgLTY3OSw3ICs2OTAsNyBAQAogCQkJCQkgICBiZWxvbmdzIHRvICovCiAJX19sZTE2IGlfc3ViYWxsb2NfYml0OwkJLyogQml0IG9mZnNldCBpbiBzdWJhbGxvY2F0b3IKIAkJCQkJICAgYmxvY2sgZ3JvdXAgKi8KLS8qMTAqLwlfX2xlMTYgaV9yZXNlcnZlZDA7CisvKjEwKi8JX19sZTE2IGlfbGlua3NfY291bnRfaGk7CS8qIEhpZ2ggMTYgYml0cyBvZiBsaW5rcyBjb3VudCAqLwogCV9fbGUxNiBpX3hhdHRyX2lubGluZV9zaXplOwogCV9fbGUzMiBpX2NsdXN0ZXJzOwkJLyogQ2x1c3RlciBjb3VudCAqLwogCV9fbGUzMiBpX3VpZDsJCQkvKiBPd25lciBVSUQgKi8KQEAgLTcwNSw3ICs3MTYsOCBAQAogCV9fbGUxNiBpX2R5bl9mZWF0dXJlczsKIAlfX2xlNjQgaV94YXR0cl9sb2M7CiAvKjgwKi8Jc3RydWN0IG9jZnMyX2Jsb2NrX2NoZWNrIGlfY2hlY2s7CS8qIEVycm9yIGNoZWNraW5nICovCi0vKjg4Ki8JX19sZTY0IGlfcmVzZXJ2ZWQyWzZdOworLyo4OCovCV9fbGU2NCBpX2R4X3Jvb3Q7CQkvKiBQb2ludGVyIHRvIGRpciBpbmRleCByb290IGJsb2NrICovCisJX19sZTY0IGlfcmVzZXJ2ZWQyWzVdOwogLypCOCovCXVuaW9uIHsKIAkJX19sZTY0IGlfcGFkMTsJCS8qIEdlbmVyaWMgd2F5IHRvIHJlZmVyIHRvIHRoaXMKIAkJCQkJICAgNjRiaXQgdW5pb24gKi8KQEAgLTc4MSw2ICs3OTMsOTAgQEAKIC8qNDAqLwogfTsKIAorIC8qCisgKiBBIGRpcmVjdG9yeSBlbnRyeSBpbiB0aGUgaW5kZXhlZCB0cmVlLiBXZSBkb24ndCBzdG9yZSB0aGUgZnVsbCBuYW1lIGhlcmUsCisgKiBidXQgaW5zdGVhZCBwcm92aWRlIGEgcG9pbnRlciB0byB0aGUgZnVsbCBkaXJlbnQgaW4gdGhlIHVuaW5kZXhlZCB0cmVlLgorICoKKyAqIFdlIGFsc28gc3RvcmUgbmFtZV9sZW4gaGVyZSBzbyBhcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBsZWFmIGJsb2NrcyB3ZQorICogbmVlZCB0byBzZWFyY2ggaW4gY2FzZSBvZiBjb2xsaXNpb25zLgorICovCitzdHJ1Y3Qgb2NmczJfZHhfZW50cnkgeworCV9fbGUzMgkJZHhfbWFqb3JfaGFzaDsJLyogVXNlZCB0byBmaW5kIGxvZ2ljYWwKKwkJCQkJICogY2x1c3RlciBpbiBpbmRleCAqLworCV9fbGUzMgkJZHhfbWlub3JfaGFzaDsJLyogTG93ZXIgYml0cyB1c2VkIHRvIGZpbmQKKwkJCQkJICogYmxvY2sgaW4gY2x1c3RlciAqLworCV9fbGU2NAkJZHhfZGlyZW50X2JsazsJLyogUGh5c2ljYWwgYmxvY2sgaW4gdW5pbmRleGVkCisJCQkJCSAqIHRyZWUgaG9sZGluZyB0aGlzIGRpcmVudC4gKi8KK307CisKK3N0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0IHsKKwlfX2xlMzIJCWRlX3Jlc2VydmVkOworCV9fbGUxNgkJZGVfY291bnQ7CS8qIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMKKwkJCQkJICogcG9zc2libGUgaW4gZGVfZW50cmllcyAqLworCV9fbGUxNgkJZGVfbnVtX3VzZWQ7CS8qIEN1cnJlbnQgbnVtYmVyIG9mCisJCQkJCSAqIGRlX2VudHJpZXMgZW50cmllcyAqLworCXN0cnVjdAlvY2ZzMl9keF9lbnRyeQkJZGVfZW50cmllc1swXTsJLyogSW5kZXhlZCBkaXIgZW50cmllcworCQkJCQkJCSAqIGluIGEgcGFja2VkIGFycmF5IG9mCisJCQkJCQkJICogbGVuZ3RoIGRlX251bV91c2VkICovCit9OworCisjZGVmaW5lIE9DRlMyX0RYX0ZMQUdfSU5MSU5FCTB4MDEKKworLyoKKyAqIEEgZGlyZWN0b3J5IGluZGV4aW5nIGJsb2NrLiBFYWNoIGluZGV4ZWQgZGlyZWN0b3J5IGhhcyBvbmUgb2YgdGhlc2UsCisgKiBwb2ludGVkIHRvIGJ5IG9jZnMyX2Rpbm9kZS4KKyAqCisgKiBUaGlzIGJsb2NrIHN0b3JlcyBhbiBpbmRleGVkIGJ0cmVlIHJvb3QsIGFuZCBhIHNldCBvZiBmcmVlIHNwYWNlCisgKiBzdGFydC1vZi1saXN0IHBvaW50ZXJzLgorICovCitzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayB7CisJX191OAkJZHJfc2lnbmF0dXJlWzhdOwkvKiBTaWduYXR1cmUgZm9yIHZlcmlmaWNhdGlvbiAqLworCXN0cnVjdCBvY2ZzMl9ibG9ja19jaGVjayBkcl9jaGVjazsJLyogRXJyb3IgY2hlY2tpbmcgKi8KKwlfX2xlMTYJCWRyX3N1YmFsbG9jX3Nsb3Q7CS8qIFNsb3Qgc3ViYWxsb2NhdG9yIHRoaXMKKwkJCQkJCSAqIGJsb2NrIGJlbG9uZ3MgdG8uICovCisJX19sZTE2CQlkcl9zdWJhbGxvY19iaXQ7CS8qIEJpdCBvZmZzZXQgaW4gc3ViYWxsb2NhdG9yCisJCQkJCQkgKiBibG9jayBncm91cCAqLworCV9fbGUzMgkJZHJfZnNfZ2VuZXJhdGlvbjsJLyogTXVzdCBtYXRjaCBzdXBlciBibG9jayAqLworCV9fbGU2NAkJZHJfYmxrbm87CQkvKiBPZmZzZXQgb24gZGlzaywgaW4gYmxvY2tzICovCisJX19sZTY0CQlkcl9sYXN0X2ViX2JsazsJCS8qIFBvaW50ZXIgdG8gbGFzdAorCQkJCQkJICogZXh0ZW50IGJsb2NrICovCisJX19sZTMyCQlkcl9jbHVzdGVyczsJCS8qIENsdXN0ZXJzIGFsbG9jYXRlZAorCQkJCQkJICogdG8gdGhlIGluZGV4ZWQgdHJlZS4gKi8KKwlfX3U4CQlkcl9mbGFnczsJCS8qIE9DRlMyX0RYX0ZMQUdfKiBmbGFncyAqLworCV9fdTgJCWRyX3Jlc2VydmVkMDsKKwlfX2xlMTYJCWRyX3Jlc2VydmVkMTsKKwlfX2xlNjQJCWRyX2Rpcl9ibGtubzsJCS8qIFBvaW50ZXIgdG8gcGFyZW50IGlub2RlICovCisJX19sZTMyCQlkcl9udW1fZW50cmllczsJCS8qIFRvdGFsIG51bWJlciBvZgorCQkJCQkJICogbmFtZXMgc3RvcmVkIGluCisJCQkJCQkgKiB0aGlzIGRpcmVjdG9yeS4qLworCV9fbGUzMgkJZHJfcmVzZXJ2ZWQyOworCV9fbGU2NAkJZHJfZnJlZV9ibGs7CQkvKiBQb2ludGVyIHRvIGhlYWQgb2YgZnJlZQorCQkJCQkJICogdW5pbmRleGVkIGJsb2NrIGxpc3QuICovCisJX19sZTY0CQlkcl9yZXNlcnZlZDNbMTVdOworCXVuaW9uIHsKKwkJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0IGRyX2xpc3Q7IC8qIEtlZXAgdGhpcyBhbGlnbmVkIHRvIDEyOAorCQkJCQkJICAgKiBiaXRzIGZvciBtYXhpbXVtIHNwYWNlCisJCQkJCQkgICAqIGVmZmljaWVuY3kuICovCisJCXN0cnVjdCBvY2ZzMl9keF9lbnRyeV9saXN0IGRyX2VudHJpZXM7IC8qIEluLXJvb3QtYmxvY2sgbGlzdCBvZgorCQkJCQkJCSogZW50cmllcy4gV2UgZ3JvdyBvdXQKKwkJCQkJCQkqIHRvIGV4dGVudHMgaWYgdGhpcworCQkJCQkJCSogZ2V0cyB0b28gYmlnLiAqLworCX07Cit9OworCisvKgorICogVGhlIGhlYWRlciBvZiBhIGxlYWYgYmxvY2sgaW4gdGhlIGluZGV4ZWQgdHJlZS4KKyAqLworc3RydWN0IG9jZnMyX2R4X2xlYWYgeworCV9fdTgJCWRsX3NpZ25hdHVyZVs4XTsvKiBTaWduYXR1cmUgZm9yIHZlcmlmaWNhdGlvbiAqLworCXN0cnVjdCBvY2ZzMl9ibG9ja19jaGVjayBkbF9jaGVjazsJLyogRXJyb3IgY2hlY2tpbmcgKi8KKwlfX2xlNjQJCWRsX2Jsa25vOwkvKiBPZmZzZXQgb24gZGlzaywgaW4gYmxvY2tzICovCisJX19sZTMyCQlkbF9mc19nZW5lcmF0aW9uOy8qIE11c3QgbWF0Y2ggc3VwZXIgYmxvY2sgKi8KKwlfX2xlMzIJCWRsX3Jlc2VydmVkMDsKKwlfX2xlNjQJCWRsX3Jlc2VydmVkMTsKKwlzdHJ1Y3Qgb2NmczJfZHhfZW50cnlfbGlzdAlkbF9saXN0OworfTsKKwogLyoKICAqIE9uIGRpc2sgYWxsb2NhdG9yIGdyb3VwIHN0cnVjdHVyZSBmb3IgT0NGUzIKICAqLwpAQCAtMTExMiw2ICsxMjA4LDE2IEBACiAJcmV0dXJuIHNpemUgLyBzaXplb2Yoc3RydWN0IG9jZnMyX2V4dGVudF9yZWMpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9leHRlbnRfcmVjc19wZXJfZHhfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCBzaXplOworCisJc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZSAtCisJCW9mZnNldG9mKHN0cnVjdCBvY2ZzMl9keF9yb290X2Jsb2NrLCBkcl9saXN0LmxfcmVjcyk7CisKKwlyZXR1cm4gc2l6ZSAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NoYWluX3JlY3NfcGVyX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJaW50IHNpemU7CkBAIC0xMTMyLDYgKzEyMzgsMjYgQEAKIAlyZXR1cm4gc2l6ZSAvIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2R4X2VudHJpZXNfcGVyX2xlYWYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlpbnQgc2l6ZTsKKworCXNpemUgPSBzYi0+c19ibG9ja3NpemUgLQorCQlvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZHhfbGVhZiwgZGxfbGlzdC5kZV9lbnRyaWVzKTsKKworCXJldHVybiBzaXplIC8gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9keF9lbnRyeSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2R4X2VudHJpZXNfcGVyX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlpbnQgc2l6ZTsKKworCXNpemUgPSBzYi0+c19ibG9ja3NpemUgLQorCQlvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jaywgZHJfZW50cmllcy5kZV9lbnRyaWVzKTsKKworCXJldHVybiBzaXplIC8gc2l6ZW9mKHN0cnVjdCBvY2ZzMl9keF9lbnRyeSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTE2IG9jZnMyX2xvY2FsX2FsbG9jX3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAl1MTYgc2l6ZTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyX2xvY2tpZC5oIGIvZnMvb2NmczIvb2NmczJfbG9ja2lkLmgKaW5kZXggZWI2ZjUwYy4uYTUzY2U4NyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfbG9ja2lkLmgKKysrIGIvZnMvb2NmczIvb2NmczJfbG9ja2lkLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIAlPQ0ZTMl9MT0NLX1RZUEVfT1BFTiwKIAlPQ0ZTMl9MT0NLX1RZUEVfRkxPQ0ssCiAJT0NGUzJfTE9DS19UWVBFX1FJTkZPLAorCU9DRlMyX0xPQ0tfVFlQRV9ORlNfU1lOQywKIAlPQ0ZTMl9OVU1fTE9DS19UWVBFUwogfTsKIApAQCAtODEsNiArODIsOSBAQAogCQljYXNlIE9DRlMyX0xPQ0tfVFlQRV9RSU5GTzoKIAkJCWMgPSAnUSc7CiAJCQlicmVhazsKKwkJY2FzZSBPQ0ZTMl9MT0NLX1RZUEVfTkZTX1NZTkM6CisJCQljID0gJ1knOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQljID0gJ1wwJzsKIAl9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdWJhbGxvYy5jIGIvZnMvb2NmczIvc3ViYWxsb2MuYwppbmRleCBhNjk2Mjg2Li5iNGNhNTkxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdWJhbGxvYy5jCisrKyBiL2ZzL29jZnMyL3N1YmFsbG9jLmMKQEAgLTQ4LDcgKzQ4LDggQEAKICNpbmNsdWRlICJidWZmZXJfaGVhZF9pby5oIgogCiAjZGVmaW5lIE5PVF9BTExPQ19ORVdfR1JPVVAJCTAKLSNkZWZpbmUgQUxMT0NfTkVXX0dST1VQCQkJMQorI2RlZmluZSBBTExPQ19ORVdfR1JPVVAJCQkweDEKKyNkZWZpbmUgQUxMT0NfR1JPVVBTX0ZST01fR0xPQkFMCTB4MgogCiAjZGVmaW5lIE9DRlMyX01BWF9JTk9ERVNfVE9fU1RFQUwJMTAyNAogCkBAIC02NCw3ICs2NSw5IEBACiBzdGF0aWMgaW50IG9jZnMyX2Jsb2NrX2dyb3VwX2FsbG9jKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSAgIHN0cnVjdCBpbm9kZSAqYWxsb2NfaW5vZGUsCiAJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCQkgICB1NjQgbWF4X2Jsb2NrKTsKKwkJCQkgICB1NjQgbWF4X2Jsb2NrLAorCQkJCSAgIHU2NCAqbGFzdF9hbGxvY19ncm91cCwKKwkJCQkgICBpbnQgZmxhZ3MpOwogCiBzdGF0aWMgaW50IG9jZnMyX2NsdXN0ZXJfZ3JvdXBfc2VhcmNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpncm91cF9iaCwKQEAgLTExNiw2ICsxMTksNyBAQAogCQkJCQkJdTE2ICpiZ19iaXRfb2ZmKTsKIHN0YXRpYyBpbnQgb2NmczJfcmVzZXJ2ZV9jbHVzdGVyc193aXRoX2xpbWl0KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCQkgICAgIHUzMiBiaXRzX3dhbnRlZCwgdTY0IG1heF9ibG9jaywKKwkJCQkJICAgICBpbnQgZmxhZ3MsCiAJCQkJCSAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiphYyk7CiAKIHZvaWQgb2NmczJfZnJlZV9hY19yZXNvdXJjZShzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMpCkBAIC00MDMsNyArNDA3LDkgQEAKIHN0YXRpYyBpbnQgb2NmczJfYmxvY2tfZ3JvdXBfYWxsb2Moc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgc3RydWN0IGlub2RlICphbGxvY19pbm9kZSwKIAkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAotCQkJCSAgIHU2NCBtYXhfYmxvY2spCisJCQkJICAgdTY0IG1heF9ibG9jaywKKwkJCQkgICB1NjQgKmxhc3RfYWxsb2NfZ3JvdXAsCisJCQkJICAgaW50IGZsYWdzKQogewogCWludCBzdGF0dXMsIGNyZWRpdHM7CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBiaC0+Yl9kYXRhOwpAQCAtNDIzLDcgKzQyOSw3IEBACiAJY2wgPSAmZmUtPmlkMi5pX2NoYWluOwogCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnNfd2l0aF9saW1pdChvc2IsCiAJCQkJCQkgICBsZTE2X3RvX2NwdShjbC0+Y2xfY3BnKSwKLQkJCQkJCSAgIG1heF9ibG9jaywgJmFjKTsKKwkJCQkJCSAgIG1heF9ibG9jaywgZmxhZ3MsICZhYyk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJaWYgKHN0YXR1cyAhPSAtRU5PU1BDKQogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNDQwLDYgKzQ0NiwxMSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCisJaWYgKGxhc3RfYWxsb2NfZ3JvdXAgJiYgKmxhc3RfYWxsb2NfZ3JvdXAgIT0gMCkgeworCQltbG9nKDAsICJ1c2Ugb2xkIGFsbG9jYXRpb24gZ3JvdXAgJWxsdSBmb3IgYmxvY2sgZ3JvdXAgYWxsb2NcbiIsCisJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykqbGFzdF9hbGxvY19ncm91cCk7CisJCWFjLT5hY19sYXN0X2dyb3VwID0gKmxhc3RfYWxsb2NfZ3JvdXA7CisJfQogCXN0YXR1cyA9IG9jZnMyX2NsYWltX2NsdXN0ZXJzKG9zYiwKIAkJCQkgICAgICBoYW5kbGUsCiAJCQkJICAgICAgYWMsCkBAIC01MTQsNiArNTI1LDExIEBACiAJYWxsb2NfaW5vZGUtPmlfYmxvY2tzID0gb2NmczJfaW5vZGVfc2VjdG9yX2NvdW50KGFsbG9jX2lub2RlKTsKIAogCXN0YXR1cyA9IDA7CisKKwkvKiBzYXZlIHRoZSBuZXcgbGFzdCBhbGxvYyBncm91cCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGNhY2hlIGl0LiAqLworCWlmIChsYXN0X2FsbG9jX2dyb3VwKQorCQkqbGFzdF9hbGxvY19ncm91cCA9IGFjLT5hY19sYXN0X2dyb3VwOworCiBiYWlsOgogCWlmIChoYW5kbGUpCiAJCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CkBAIC01MzEsNyArNTQ3LDggQEAKIAkJCQkgICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjLAogCQkJCSAgICAgICBpbnQgdHlwZSwKIAkJCQkgICAgICAgdTMyIHNsb3QsCi0JCQkJICAgICAgIGludCBhbGxvY19uZXdfZ3JvdXApCisJCQkJICAgICAgIHU2NCAqbGFzdF9hbGxvY19ncm91cCwKKwkJCQkgICAgICAgaW50IGZsYWdzKQogewogCWludCBzdGF0dXM7CiAJdTMyIGJpdHNfd2FudGVkID0gYWMtPmFjX2JpdHNfd2FudGVkOwpAQCAtNTg3LDcgKzYwNCw3IEBACiAJCQlnb3RvIGJhaWw7CiAJCX0KIAotCQlpZiAoYWxsb2NfbmV3X2dyb3VwICE9IEFMTE9DX05FV19HUk9VUCkgeworCQlpZiAoIShmbGFncyAmIEFMTE9DX05FV19HUk9VUCkpIHsKIAkJCW1sb2coMCwgIkFsbG9jIEZpbGUgJXUgRnVsbDogd2FudGVkPSV1LCBmcmVlX2JpdHM9JXUsICIKIAkJCSAgICAgImFuZCB3ZSBkb24ndCBhbGxvYyBhIG5ldyBncm91cCBmb3IgaXQuXG4iLAogCQkJICAgICBzbG90LCBiaXRzX3dhbnRlZCwgZnJlZV9iaXRzKTsKQEAgLTU5Niw3ICs2MTMsOCBAQAogCQl9CiAKIAkJc3RhdHVzID0gb2NmczJfYmxvY2tfZ3JvdXBfYWxsb2Mob3NiLCBhbGxvY19pbm9kZSwgYmgsCi0JCQkJCQkgYWMtPmFjX21heF9ibG9jayk7CisJCQkJCQkgYWMtPmFjX21heF9ibG9jaywKKwkJCQkJCSBsYXN0X2FsbG9jX2dyb3VwLCBmbGFncyk7CiAJCWlmIChzdGF0dXMgPCAwKSB7CiAJCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQkJbWxvZ19lcnJubyhzdGF0dXMpOwpAQCAtNjQwLDcgKzY1OCw3IEBACiAKIAlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX3N1YmFsbG9jX2JpdHMob3NiLCAoKmFjKSwKIAkJCQkJICAgICBFWFRFTlRfQUxMT0NfU1lTVEVNX0lOT0RFLAotCQkJCQkgICAgIHNsb3QsIEFMTE9DX05FV19HUk9VUCk7CisJCQkJCSAgICAgc2xvdCwgTlVMTCwgQUxMT0NfTkVXX0dST1VQKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02ODYsNyArNzA0LDggQEAKIAogCQlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX3N1YmFsbG9jX2JpdHMob3NiLCBhYywKIAkJCQkJCSAgICAgSU5PREVfQUxMT0NfU1lTVEVNX0lOT0RFLAotCQkJCQkJICAgICBzbG90LCBOT1RfQUxMT0NfTkVXX0dST1VQKTsKKwkJCQkJCSAgICAgc2xvdCwgTlVMTCwKKwkJCQkJCSAgICAgTk9UX0FMTE9DX05FV19HUk9VUCk7CiAJCWlmIChzdGF0dXMgPj0gMCkgewogCQkJb2NmczJfc2V0X2lub2RlX3N0ZWFsX3Nsb3Qob3NiLCBzbG90KTsKIAkJCWJyZWFrOwpAQCAtNzAzLDYgKzcyMiw3IEBACiB7CiAJaW50IHN0YXR1czsKIAlzMTYgc2xvdCA9IG9jZnMyX2dldF9pbm9kZV9zdGVhbF9zbG90KG9zYik7CisJdTY0IGFsbG9jX2dyb3VwOwogCiAJKmFjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISgqYWMpKSB7CkBAIC03MzgsMTIgKzc1OCwyMiBAQAogCQlnb3RvIGlub2RlX3N0ZWFsOwogCiAJYXRvbWljX3NldCgmb3NiLT5zX251bV9pbm9kZXNfc3RvbGVuLCAwKTsKKwlhbGxvY19ncm91cCA9IG9zYi0+b3NiX2lub2RlX2FsbG9jX2dyb3VwOwogCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfc3ViYWxsb2NfYml0cyhvc2IsICphYywKIAkJCQkJICAgICBJTk9ERV9BTExPQ19TWVNURU1fSU5PREUsCi0JCQkJCSAgICAgb3NiLT5zbG90X251bSwgQUxMT0NfTkVXX0dST1VQKTsKKwkJCQkJICAgICBvc2ItPnNsb3RfbnVtLAorCQkJCQkgICAgICZhbGxvY19ncm91cCwKKwkJCQkJICAgICBBTExPQ19ORVdfR1JPVVAgfAorCQkJCQkgICAgIEFMTE9DX0dST1VQU19GUk9NX0dMT0JBTCk7CiAJaWYgKHN0YXR1cyA+PSAwKSB7CiAJCXN0YXR1cyA9IDA7CiAKKwkJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwkJb3NiLT5vc2JfaW5vZGVfYWxsb2NfZ3JvdXAgPSBhbGxvY19ncm91cDsKKwkJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCQltbG9nKDAsICJhZnRlciByZXNlcnZhdGlvbiwgbmV3IGFsbG9jYXRpb24gZ3JvdXAgaXMgIgorCQkgICAgICIlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWFsbG9jX2dyb3VwKTsKKwogCQkvKgogCQkgKiBTb21lIGlub2RlcyBtdXN0IGJlIGZyZWVkIGJ5IHVzLCBzbyB0cnkgdG8gYWxsb2NhdGUKIAkJICogZnJvbSBvdXIgb3duIG5leHQgdGltZS4KQEAgLTc5MCw3ICs4MjAsNyBAQAogCiAJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9zdWJhbGxvY19iaXRzKG9zYiwgYWMsCiAJCQkJCSAgICAgR0xPQkFMX0JJVE1BUF9TWVNURU1fSU5PREUsCi0JCQkJCSAgICAgT0NGUzJfSU5WQUxJRF9TTE9ULAorCQkJCQkgICAgIE9DRlMyX0lOVkFMSURfU0xPVCwgTlVMTCwKIAkJCQkJICAgICBBTExPQ19ORVdfR1JPVVApOwogCWlmIChzdGF0dXMgPCAwICYmIHN0YXR1cyAhPSAtRU5PU1BDKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTgwNiw2ICs4MzYsNyBAQAogICogdGhpbmdzIGEgYml0LiAqLwogc3RhdGljIGludCBvY2ZzMl9yZXNlcnZlX2NsdXN0ZXJzX3dpdGhfbGltaXQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJCSAgICAgdTMyIGJpdHNfd2FudGVkLCB1NjQgbWF4X2Jsb2NrLAorCQkJCQkgICAgIGludCBmbGFncywKIAkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjKQogewogCWludCBzdGF0dXM7CkBAIC04MjMsNyArODU0LDggQEAKIAkoKmFjKS0+YWNfbWF4X2Jsb2NrID0gbWF4X2Jsb2NrOwogCiAJc3RhdHVzID0gLUVOT1NQQzsKLQlpZiAob2NmczJfYWxsb2Nfc2hvdWxkX3VzZV9sb2NhbChvc2IsIGJpdHNfd2FudGVkKSkgeworCWlmICghKGZsYWdzICYgQUxMT0NfR1JPVVBTX0ZST01fR0xPQkFMKSAmJgorCSAgICBvY2ZzMl9hbGxvY19zaG91bGRfdXNlX2xvY2FsKG9zYiwgYml0c193YW50ZWQpKSB7CiAJCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfbG9jYWxfYWxsb2NfYml0cyhvc2IsCiAJCQkJCQkJYml0c193YW50ZWQsCiAJCQkJCQkJKmFjKTsKQEAgLTg2MSw3ICs4OTMsOCBAQAogCQkJICAgdTMyIGJpdHNfd2FudGVkLAogCQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiphYykKIHsKLQlyZXR1cm4gb2NmczJfcmVzZXJ2ZV9jbHVzdGVyc193aXRoX2xpbWl0KG9zYiwgYml0c193YW50ZWQsIDAsIGFjKTsKKwlyZXR1cm4gb2NmczJfcmVzZXJ2ZV9jbHVzdGVyc193aXRoX2xpbWl0KG9zYiwgYml0c193YW50ZWQsIDAsCisJCQkJCQkgQUxMT0NfTkVXX0dST1VQLCBhYyk7CiB9CiAKIC8qCkBAIC0xNjE4LDggKzE2NTEsNDEgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgdm9pZCBvY2ZzMl9pbml0X2lub2RlX2FjX2dyb3VwKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50X2ZlX2JoLAorCQkJCSAgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKK3sKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopcGFyZW50X2ZlX2JoLT5iX2RhdGE7CisJLyoKKwkgKiBUcnkgdG8gYWxsb2NhdGUgaW5vZGVzIGZyb20gc29tZSBzcGVjaWZpYyBncm91cC4KKwkgKgorCSAqIElmIHRoZSBwYXJlbnQgZGlyIGhhcyByZWNvcmRlZCB0aGUgbGFzdCBncm91cCB1c2VkIGluIGFsbG9jYXRpb24sCisJICogY29vbCwgdXNlIGl0LiBPdGhlcndpc2UgaWYgd2UgdHJ5IHRvIGFsbG9jYXRlIG5ldyBpbm9kZSBmcm9tIHRoZQorCSAqIHNhbWUgc2xvdCB0aGUgcGFyZW50IGRpciBiZWxvbmdzIHRvLCB1c2UgdGhlIHNhbWUgY2h1bmsuCisJICoKKwkgKiBXZSBhcmUgdmVyeSBjYXJlZnVsIGhlcmUgdG8gYXZvaWQgdGhlIG1pc3Rha2Ugb2Ygc2V0dGluZworCSAqIGFjX2xhc3RfZ3JvdXAgdG8gYSBncm91cCBkZXNjcmlwdG9yIGZyb20gYSBkaWZmZXJlbnQgKHVubG9ja2VkKSBzbG90LgorCSAqLworCWlmIChPQ0ZTMl9JKGRpciktPmlwX2xhc3RfdXNlZF9ncm91cCAmJgorCSAgICBPQ0ZTMl9JKGRpciktPmlwX2xhc3RfdXNlZF9zbG90ID09IGFjLT5hY19hbGxvY19zbG90KQorCQlhYy0+YWNfbGFzdF9ncm91cCA9IE9DRlMyX0koZGlyKS0+aXBfbGFzdF91c2VkX2dyb3VwOworCWVsc2UgaWYgKGxlMTZfdG9fY3B1KGZlLT5pX3N1YmFsbG9jX3Nsb3QpID09IGFjLT5hY19hbGxvY19zbG90KQorCQlhYy0+YWNfbGFzdF9ncm91cCA9IG9jZnMyX3doaWNoX3N1YmFsbG9jX2dyb3VwKAorCQkJCQlsZTY0X3RvX2NwdShmZS0+aV9ibGtubyksCisJCQkJCWxlMTZfdG9fY3B1KGZlLT5pX3N1YmFsbG9jX2JpdCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfc2F2ZV9pbm9kZV9hY19ncm91cChzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMpCit7CisJT0NGUzJfSShkaXIpLT5pcF9sYXN0X3VzZWRfZ3JvdXAgPSBhYy0+YWNfbGFzdF9ncm91cDsKKwlPQ0ZTMl9JKGRpciktPmlwX2xhc3RfdXNlZF9zbG90ID0gYWMtPmFjX2FsbG9jX3Nsb3Q7Cit9CisKIGludCBvY2ZzMl9jbGFpbV9uZXdfaW5vZGUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkgIGhhbmRsZV90ICpoYW5kbGUsCisJCQkgIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCwKIAkJCSAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjLAogCQkJICB1MTYgKnN1YmFsbG9jX2JpdCwKIAkJCSAgdTY0ICpmZV9ibGtubykKQEAgLTE2MzUsNiArMTcwMSw4IEBACiAJQlVHX09OKGFjLT5hY19iaXRzX3dhbnRlZCAhPSAxKTsKIAlCVUdfT04oYWMtPmFjX3doaWNoICE9IE9DRlMyX0FDX1VTRV9JTk9ERSk7CiAKKwlvY2ZzMl9pbml0X2lub2RlX2FjX2dyb3VwKGRpciwgcGFyZW50X2ZlX2JoLCBhYyk7CisKIAlzdGF0dXMgPSBvY2ZzMl9jbGFpbV9zdWJhbGxvY19iaXRzKG9zYiwKIAkJCQkJICAgYWMsCiAJCQkJCSAgIGhhbmRsZSwKQEAgLTE2NTMsNiArMTcyMSw3IEBACiAKIAkqZmVfYmxrbm8gPSBiZ19ibGtubyArICh1NjQpICgqc3ViYWxsb2NfYml0KTsKIAlhYy0+YWNfYml0c19naXZlbisrOworCW9jZnMyX3NhdmVfaW5vZGVfYWNfZ3JvdXAoZGlyLCBhYyk7CiAJc3RhdHVzID0gMDsKIGJhaWw6CiAJbWxvZ19leGl0KHN0YXR1cyk7CkBAIC0yMTE2LDMgKzIxODUsMTYyIEBACiAKIAlyZXR1cm4gcmV0OwogfQorCisvKgorICogUmVhZCB0aGUgaW5vZGUgc3BlY2lmaWVkIGJ5IGJsa25vIHRvIGdldCBzdWJhbGxvY19zbG90IGFuZAorICogc3ViYWxsb2NfYml0LgorICovCitzdGF0aWMgaW50IG9jZnMyX2dldF9zdWJhbGxvY19zbG90X2JpdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGJsa25vLAorCQkJCSAgICAgICB1MTYgKnN1YmFsbG9jX3Nsb3QsIHUxNiAqc3ViYWxsb2NfYml0KQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICppbm9kZV9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqaW5vZGVfZmU7CisKKwltbG9nX2VudHJ5KCJibGtubzogJWxsdVxuIiwgYmxrbm8pOworCisJLyogZGlydHkgcmVhZCBkaXNrICovCisJc3RhdHVzID0gb2NmczJfcmVhZF9ibG9ja3Nfc3luYyhvc2IsIGJsa25vLCAxLCAmaW5vZGVfYmgpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2coTUxfRVJST1IsICJyZWFkIGJsb2NrICVsbHUgZmFpbGVkICVkXG4iLCBibGtubywgc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKworCWlub2RlX2ZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgaW5vZGVfYmgtPmJfZGF0YTsKKwlpZiAoIU9DRlMyX0lTX1ZBTElEX0RJTk9ERShpbm9kZV9mZSkpIHsKKwkJbWxvZyhNTF9FUlJPUiwgImludmFsaWQgaW5vZGUgJWxsdSByZXF1ZXN0ZWRcbiIsIGJsa25vKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCWlmIChsZTE2X3RvX2NwdShpbm9kZV9mZS0+aV9zdWJhbGxvY19zbG90KSAhPSBPQ0ZTMl9JTlZBTElEX1NMT1QgJiYKKwkgICAgKHUzMilsZTE2X3RvX2NwdShpbm9kZV9mZS0+aV9zdWJhbGxvY19zbG90KSA+IG9zYi0+bWF4X3Nsb3RzIC0gMSkgeworCQltbG9nKE1MX0VSUk9SLCAiaW5vZGUgJWxsdSBoYXMgaW52YWxpZCBzdWJhbGxvYyBzbG90ICV1XG4iLAorCQkgICAgIGJsa25vLCAodTMyKWxlMTZfdG9fY3B1KGlub2RlX2ZlLT5pX3N1YmFsbG9jX3Nsb3QpKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCWlmIChzdWJhbGxvY19zbG90KQorCQkqc3ViYWxsb2Nfc2xvdCA9IGxlMTZfdG9fY3B1KGlub2RlX2ZlLT5pX3N1YmFsbG9jX3Nsb3QpOworCWlmIChzdWJhbGxvY19iaXQpCisJCSpzdWJhbGxvY19iaXQgPSBsZTE2X3RvX2NwdShpbm9kZV9mZS0+aV9zdWJhbGxvY19iaXQpOworCitiYWlsOgorCWJyZWxzZShpbm9kZV9iaCk7CisKKwltbG9nX2V4aXQoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogdGVzdCB3aGV0aGVyIGJpdCBpcyBTRVQgaW4gYWxsb2NhdG9yIGJpdG1hcCBvciBub3QuICBvbiBzdWNjZXNzLCAwCisgKiBpcyByZXR1cm5lZCBhbmQgKnJlcyBpcyAxIGZvciBTRVQ7IDAgb3RoZXJ3aXNlLiAgd2hlbiBmYWlscywgZXJybm8KKyAqIGlzIHJldHVybmVkIGFuZCAqcmVzIGlzIG1lYW5pbmdsZXNzLiAgQ2FsbCB0aGlzIGFmdGVyIHlvdSBoYXZlCisgKiBjbHVzdGVyIGxvY2tlZCBhZ2FpbnN0IHN1YmFsbG9jLCBvciB5b3UgbWF5IGdldCBhIHJlc3VsdCBiYXNlZCBvbgorICogbm9uLXVwMmRhdGUgY29udGVudHMKKyAqLworc3RhdGljIGludCBvY2ZzMl90ZXN0X3N1YmFsbG9jX2JpdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKKwkJCQkgICBzdHJ1Y3QgaW5vZGUgKnN1YmFsbG9jLAorCQkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYWxsb2NfYmgsIHU2NCBibGtubywKKwkJCQkgICB1MTYgYml0LCBpbnQgKnJlcykKK3sKKwlzdHJ1Y3Qgb2NmczJfZGlub2RlICphbGxvY19mZTsKKwlzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqZ3JvdXA7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpncm91cF9iaCA9IE5VTEw7CisJdTY0IGJnX2Jsa25vOworCWludCBzdGF0dXM7CisKKwltbG9nX2VudHJ5KCJibGtubzogJWxsdSBiaXQ6ICV1XG4iLCBibGtubywgKHVuc2lnbmVkIGludCliaXQpOworCisJYWxsb2NfZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWFsbG9jX2JoLT5iX2RhdGE7CisJaWYgKChiaXQgKyAxKSA+IG9jZnMyX2JpdHNfcGVyX2dyb3VwKCZhbGxvY19mZS0+aWQyLmlfY2hhaW4pKSB7CisJCW1sb2coTUxfRVJST1IsICJzdWJhbGxvYyBiaXQgJXUgb3V0IG9mIHJhbmdlIG9mICV1XG4iLAorCQkgICAgICh1bnNpZ25lZCBpbnQpYml0LAorCQkgICAgIG9jZnMyX2JpdHNfcGVyX2dyb3VwKCZhbGxvY19mZS0+aWQyLmlfY2hhaW4pKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCWJnX2Jsa25vID0gb2NmczJfd2hpY2hfc3ViYWxsb2NfZ3JvdXAoYmxrbm8sIGJpdCk7CisJc3RhdHVzID0gb2NmczJfcmVhZF9ncm91cF9kZXNjcmlwdG9yKHN1YmFsbG9jLCBhbGxvY19mZSwgYmdfYmxrbm8sCisJCQkJCSAgICAgJmdyb3VwX2JoKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQltbG9nKE1MX0VSUk9SLCAicmVhZCBncm91cCAlbGx1IGZhaWxlZCAlZFxuIiwgYmdfYmxrbm8sIHN0YXR1cyk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlncm91cCA9IChzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqKSBncm91cF9iaC0+Yl9kYXRhOworCSpyZXMgPSBvY2ZzMl90ZXN0X2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopZ3JvdXAtPmJnX2JpdG1hcCk7CisKK2JhaWw6CisJYnJlbHNlKGdyb3VwX2JoKTsKKworCW1sb2dfZXhpdChzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBUZXN0IGlmIHRoZSBiaXQgcmVwcmVzZW50aW5nIHRoaXMgaW5vZGUgKGJsa25vKSBpcyBzZXQgaW4gdGhlCisgKiBzdWJhbGxvY2F0b3IuCisgKgorICogT24gc3VjY2VzcywgMCBpcyByZXR1cm5lZCBhbmQgKnJlcyBpcyAxIGZvciBTRVQ7IDAgb3RoZXJ3aXNlLgorICoKKyAqIEluIHRoZSBldmVudCBvZiBmYWlsdXJlLCBhIG5lZ2F0aXZlIHZhbHVlIGlzIHJldHVybmVkIGFuZCAqcmVzIGlzCisgKiBtZWFuaW5nbGVzcy4KKyAqCisgKiBDYWxsZXJzIG11c3QgbWFrZSBzdXJlIHRvIGhvbGQgbmZzX3N5bmNfbG9jayB0byBwcmV2ZW50CisgKiBvY2ZzMl9kZWxldGVfaW5vZGUoKSBvbiBhbm90aGVyIG5vZGUgZnJvbSBhY2Nlc3NpbmcgdGhlIHNhbWUKKyAqIHN1YmFsbG9jYXRvciBjb25jdXJyZW50bHkuCisgKi8KK2ludCBvY2ZzMl90ZXN0X2lub2RlX2JpdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGJsa25vLCBpbnQgKnJlcykKK3sKKwlpbnQgc3RhdHVzOworCXUxNiBzdWJhbGxvY19iaXQgPSAwLCBzdWJhbGxvY19zbG90ID0gMDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlX2FsbG9jX2lub2RlOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYWxsb2NfYmggPSBOVUxMOworCisJbWxvZ19lbnRyeSgiYmxrbm86ICVsbHUiLCBibGtubyk7CisKKwlzdGF0dXMgPSBvY2ZzMl9nZXRfc3ViYWxsb2Nfc2xvdF9iaXQob3NiLCBibGtubywgJnN1YmFsbG9jX3Nsb3QsCisJCQkJCSAgICAgJnN1YmFsbG9jX2JpdCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZyhNTF9FUlJPUiwgImdldCBhbGxvYyBzbG90IGFuZCBiaXQgZmFpbGVkICVkXG4iLCBzdGF0dXMpOworCQlnb3RvIGJhaWw7CisJfQorCisJaW5vZGVfYWxsb2NfaW5vZGUgPQorCQlvY2ZzMl9nZXRfc3lzdGVtX2ZpbGVfaW5vZGUob3NiLCBJTk9ERV9BTExPQ19TWVNURU1fSU5PREUsCisJCQkJCSAgICBzdWJhbGxvY19zbG90KTsKKwlpZiAoIWlub2RlX2FsbG9jX2lub2RlKSB7CisJCS8qIHRoZSBlcnJvciBjb2RlIGNvdWxkIGJlIGluYWNjdXJhdGUsIGJ1dCB3ZSBhcmUgbm90IGFibGUgdG8KKwkJICogZ2V0IHRoZSBjb3JyZWN0IG9uZS4gKi8KKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJbWxvZyhNTF9FUlJPUiwgInVuYWJsZSB0byBnZXQgYWxsb2MgaW5vZGUgaW4gc2xvdCAldVxuIiwKKwkJICAgICAodTMyKXN1YmFsbG9jX3Nsb3QpOworCQlnb3RvIGJhaWw7CisJfQorCisJbXV0ZXhfbG9jaygmaW5vZGVfYWxsb2NfaW5vZGUtPmlfbXV0ZXgpOworCXN0YXR1cyA9IG9jZnMyX2lub2RlX2xvY2soaW5vZGVfYWxsb2NfaW5vZGUsICZhbGxvY19iaCwgMCk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZpbm9kZV9hbGxvY19pbm9kZS0+aV9tdXRleCk7CisJCW1sb2coTUxfRVJST1IsICJsb2NrIG9uIGFsbG9jIGlub2RlIG9uIHNsb3QgJXUgZmFpbGVkICVkXG4iLAorCQkgICAgICh1MzIpc3ViYWxsb2Nfc2xvdCwgc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKworCXN0YXR1cyA9IG9jZnMyX3Rlc3Rfc3ViYWxsb2NfYml0KG9zYiwgaW5vZGVfYWxsb2NfaW5vZGUsIGFsbG9jX2JoLAorCQkJCQkgYmxrbm8sIHN1YmFsbG9jX2JpdCwgcmVzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJbWxvZyhNTF9FUlJPUiwgInRlc3Qgc3ViYWxsb2MgYml0IGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKworCW9jZnMyX2lub2RlX3VubG9jayhpbm9kZV9hbGxvY19pbm9kZSwgMCk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZV9hbGxvY19pbm9kZS0+aV9tdXRleCk7CisKKwlpcHV0KGlub2RlX2FsbG9jX2lub2RlKTsKKwlicmVsc2UoYWxsb2NfYmgpOworYmFpbDoKKwltbG9nX2V4aXQoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ViYWxsb2MuaCBiL2ZzL29jZnMyL3N1YmFsbG9jLmgKaW5kZXggZTNjMTNjNy4uOGM5YTc4YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ViYWxsb2MuaAorKysgYi9mcy9vY2ZzMi9zdWJhbGxvYy5oCkBAIC04OCw2ICs4OCw4IEBACiAJCQkgdTY0ICpibGtub19zdGFydCk7CiBpbnQgb2NmczJfY2xhaW1fbmV3X2lub2RlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJICBoYW5kbGVfdCAqaGFuZGxlLAorCQkJICBzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpwYXJlbnRfZmVfYmgsCiAJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYywKIAkJCSAgdTE2ICpzdWJhbGxvY19iaXQsCiAJCQkgIHU2NCAqZmVfYmxrbm8pOwpAQCAtMTg2LDQgKzE4OCw2IEBACiAJCQkgIHUzMiBjbHVzdGVyc190b19hZGQsIHUzMiBleHRlbnRzX3RvX3NwbGl0LAogCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmRhdGFfYWMsCiAJCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqbWV0YV9hYyk7CisKK2ludCBvY2ZzMl90ZXN0X2lub2RlX2JpdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwgdTY0IGJsa25vLCBpbnQgKnJlcyk7CiAjZW5kaWYgLyogX0NIQUlOQUxMT0NfSF8gKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDdhYzgzYTguLjc5ZmY4ZDkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtMjAxLDYgKzIwMSwxNzAgQEAKIAl7T3B0X2VyciwgTlVMTH0KIH07CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBpbnQgb2NmczJfb3NiX2R1bXAoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgb3V0ID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjY29ubiA9IG9zYi0+Y2Nvbm47CisJc3RydWN0IG9jZnMyX3JlY292ZXJ5X21hcCAqcm0gPSBvc2ItPnJlY292ZXJ5X21hcDsKKworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKKwkJCSIlMTBzID0+IElkOiAlLXMgIFV1aWQ6ICUtcyAgR2VuOiAweCVYICBMYWJlbDogJS1zXG4iLAorCQkJIkRldmljZSIsIG9zYi0+ZGV2X3N0ciwgb3NiLT51dWlkX3N0ciwKKwkJCW9zYi0+ZnNfZ2VuZXJhdGlvbiwgb3NiLT52b2xfbGFiZWwpOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gU3RhdGU6ICVkICBGbGFnczogMHglbFhcbiIsICJWb2x1bWUiLAorCQkJYXRvbWljX3JlYWQoJm9zYi0+dm9sX3N0YXRlKSwgb3NiLT5vc2JfZmxhZ3MpOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gQmxvY2s6ICVsdSAgQ2x1c3RlcjogJWRcbiIsICJTaXplcyIsCisJCQlvc2ItPnNiLT5zX2Jsb2Nrc2l6ZSwgb3NiLT5zX2NsdXN0ZXJzaXplKTsKKworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKKwkJCSIlMTBzID0+IENvbXBhdDogMHglWCAgSW5jb21wYXQ6IDB4JVggICIKKwkJCSJST2NvbXBhdDogMHglWFxuIiwKKwkJCSJGZWF0dXJlcyIsIG9zYi0+c19mZWF0dXJlX2NvbXBhdCwKKwkJCW9zYi0+c19mZWF0dXJlX2luY29tcGF0LCBvc2ItPnNfZmVhdHVyZV9yb19jb21wYXQpOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gT3B0czogMHglbFggIEF0aW1lUXVhbnRhOiAldVxuIiwgIk1vdW50IiwKKwkJCW9zYi0+c19tb3VudF9vcHQsIG9zYi0+c19hdGltZV9xdWFudHVtKTsKKworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKKwkJCSIlMTBzID0+IFN0YWNrOiAlcyAgTmFtZTogJSpzICBWZXJzaW9uOiAlZC4lZFxuIiwKKwkJCSJDbHVzdGVyIiwKKwkJCSgqb3NiLT5vc2JfY2x1c3Rlcl9zdGFjayA9PSAnXDAnID8KKwkJCSAibzJjYiIgOiBvc2ItPm9zYl9jbHVzdGVyX3N0YWNrKSwKKwkJCWNjb25uLT5jY19uYW1lbGVuLCBjY29ubi0+Y2NfbmFtZSwKKwkJCWNjb25uLT5jY192ZXJzaW9uLnB2X21ham9yLCBjY29ubi0+Y2NfdmVyc2lvbi5wdl9taW5vcik7CisKKwlzcGluX2xvY2soJm9zYi0+ZGNfdGFza19sb2NrKTsKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBQaWQ6ICVkICBDb3VudDogJWx1ICBXYWtlU2VxOiAlbHUgICIKKwkJCSJXb3JrU2VxOiAlbHVcbiIsICJEb3duQ252dCIsCisJCQl0YXNrX3BpZF9ucihvc2ItPmRjX3Rhc2spLCBvc2ItPmJsb2NrZWRfbG9ja19jb3VudCwKKwkJCW9zYi0+ZGNfd2FrZV9zZXF1ZW5jZSwgb3NiLT5kY193b3JrX3NlcXVlbmNlKTsKKwlzcGluX3VubG9jaygmb3NiLT5kY190YXNrX2xvY2spOworCisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICIlMTBzID0+IFBpZDogJWQgIE5vZGVzOiIsCisJCQkiUmVjb3ZlcnkiLAorCQkJKG9zYi0+cmVjb3ZlcnlfdGhyZWFkX3Rhc2sgPworCQkJIHRhc2tfcGlkX25yKG9zYi0+cmVjb3ZlcnlfdGhyZWFkX3Rhc2spIDogLTEpKTsKKwlpZiAocm0tPnJtX3VzZWQgPT0gMCkKKwkJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiIE5vbmVcbiIpOworCWVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgcm0tPnJtX3VzZWQ7IGkrKykKKwkJCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwgIiAlZCIsCisJCQkJCXJtLT5ybV9lbnRyaWVzW2ldKTsKKwkJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiXG4iKTsKKwl9CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gUGlkOiAlZCAgSW50ZXJ2YWw6ICVsdSAgTmVlZHM6ICVkXG4iLCAiQ29tbWl0IiwKKwkJCXRhc2tfcGlkX25yKG9zYi0+Y29tbWl0X3Rhc2spLCBvc2ItPm9zYl9jb21taXRfaW50ZXJ2YWwsCisJCQlhdG9taWNfcmVhZCgmb3NiLT5uZWVkc19jaGVja3BvaW50KSk7CisKKwlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsCisJCQkiJTEwcyA9PiBTdGF0ZTogJWQgIE51bVR4bnM6ICVkICBUeG5JZDogJWx1XG4iLAorCQkJIkpvdXJuYWwiLCBvc2ItPmpvdXJuYWwtPmpfc3RhdGUsCisJCQlhdG9taWNfcmVhZCgmb3NiLT5qb3VybmFsLT5qX251bV90cmFucyksCisJCQlvc2ItPmpvdXJuYWwtPmpfdHJhbnNfaWQpOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gR2xvYmFsQWxsb2NzOiAlZCAgTG9jYWxBbGxvY3M6ICVkICAiCisJCQkiU3ViQWxsb2NzOiAlZCAgTEFXaW5Nb3ZlczogJWQgIFNBRXh0ZW5kczogJWRcbiIsCisJCQkiU3RhdHMiLAorCQkJYXRvbWljX3JlYWQoJm9zYi0+YWxsb2Nfc3RhdHMuYml0bWFwX2RhdGEpLAorCQkJYXRvbWljX3JlYWQoJm9zYi0+YWxsb2Nfc3RhdHMubG9jYWxfZGF0YSksCisJCQlhdG9taWNfcmVhZCgmb3NiLT5hbGxvY19zdGF0cy5iZ19hbGxvY3MpLAorCQkJYXRvbWljX3JlYWQoJm9zYi0+YWxsb2Nfc3RhdHMubW92ZXMpLAorCQkJYXRvbWljX3JlYWQoJm9zYi0+YWxsb2Nfc3RhdHMuYmdfZXh0ZW5kcykpOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAorCQkJIiUxMHMgPT4gU3RhdGU6ICV1ICBEZXNjcmlwdG9yOiAlbGx1ICBTaXplOiAldSBiaXRzICAiCisJCQkiRGVmYXVsdDogJXUgYml0c1xuIiwKKwkJCSJMb2NhbEFsbG9jIiwgb3NiLT5sb2NhbF9hbGxvY19zdGF0ZSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb3NiLT5sYV9sYXN0X2dkLAorCQkJb3NiLT5sb2NhbF9hbGxvY19iaXRzLCBvc2ItPmxvY2FsX2FsbG9jX2RlZmF1bHRfYml0cyk7CisKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKKwkJCSIlMTBzID0+IFNsb3Q6ICVkICBOdW1TdG9sZW46ICVkXG4iLCAiU3RlYWwiLAorCQkJb3NiLT5zX2lub2RlX3N0ZWFsX3Nsb3QsCisJCQlhdG9taWNfcmVhZCgmb3NiLT5zX251bV9pbm9kZXNfc3RvbGVuKSk7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworCisJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LCAiJTEwcyA9PiAlM3MgICUxMHNcbiIsCisJCQkiU2xvdHMiLCAiTnVtIiwgIlJlY29HZW4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBvc2ItPm1heF9zbG90czsgKytpKSB7CisJCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKKwkJCQkiJTEwcyAgJWMgJTNkICAlMTBkXG4iLAorCQkJCSIgIiwKKwkJCQkoaSA9PSBvc2ItPnNsb3RfbnVtID8gJyonIDogJyAnKSwKKwkJCQlpLCBvc2ItPnNsb3RfcmVjb3ZlcnlfZ2VuZXJhdGlvbnNbaV0pOworCX0KKworCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfb3NiX2RlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBpbm9kZS0+aV9wcml2YXRlOworCWNoYXIgKmJ1ZiA9IE5VTEw7CisKKwlidWYgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCWdvdG8gYmFpbDsKKworCWlfc2l6ZV93cml0ZShpbm9kZSwgb2NmczJfb3NiX2R1bXAob3NiLCBidWYsIFBBR0VfU0laRSkpOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gYnVmOworCisJcmV0dXJuIDA7CitiYWlsOgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IG9jZnMyX2RlYnVnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJa2ZyZWUoZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgb2NmczJfZGVidWdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBmaWxlLT5wcml2YXRlX2RhdGEsCisJCQkJICAgICAgIGlfc2l6ZV9yZWFkKGZpbGUtPmZfbWFwcGluZy0+aG9zdCkpOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgb2NmczJfb3NiX2RlYnVnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW50IG9jZnMyX2RlYnVnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgc3NpemVfdCBvY2ZzMl9kZWJ1Z19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgkvKiBDT05GSUdfREVCVUdfRlMgKi8KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb2NmczJfb3NiX2RlYnVnX2ZvcHMgPSB7CisJLm9wZW4gPQkJb2NmczJfb3NiX2RlYnVnX29wZW4sCisJLnJlbGVhc2UgPQlvY2ZzMl9kZWJ1Z19yZWxlYXNlLAorCS5yZWFkID0JCW9jZnMyX2RlYnVnX3JlYWQsCisJLmxsc2VlayA9CWdlbmVyaWNfZmlsZV9sbHNlZWssCit9OworCiAvKgogICogd3JpdGVfc3VwZXIgYW5kIHN5bmNfZnMgcmlwcGVkIHJpZ2h0IG91dCBvZiBleHQzLgogICovCkBAIC05MjYsNiArMTA5MCwxNiBAQAogCQlnb3RvIHJlYWRfc3VwZXJfZXJyb3I7CiAJfQogCisJb3NiLT5vc2JfY3R4dCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImZzX3N0YXRlIiwgU19JRlJFR3xTX0lSVVNSLAorCQkJCQkgICAgb3NiLT5vc2JfZGVidWdfcm9vdCwKKwkJCQkJICAgIG9zYiwKKwkJCQkJICAgICZvY2ZzMl9vc2JfZGVidWdfZm9wcyk7CisJaWYgKCFvc2ItPm9zYl9jdHh0KSB7CisJCXN0YXR1cyA9IC1FSU5WQUw7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byByZWFkX3N1cGVyX2Vycm9yOworCX0KKwogCXN0YXR1cyA9IG9jZnMyX21vdW50X3ZvbHVtZShzYik7CiAJaWYgKG9zYi0+cm9vdF9pbm9kZSkKIAkJaW5vZGUgPSBpZ3JhYihvc2ItPnJvb3RfaW5vZGUpOwpAQCAtMTYyMCw2ICsxNzk0LDggQEAKIAlvc2IgPSBPQ0ZTMl9TQihzYik7CiAJQlVHX09OKCFvc2IpOwogCisJZGVidWdmc19yZW1vdmUob3NiLT5vc2JfY3R4dCk7CisKIAlvY2ZzMl9kaXNhYmxlX3F1b3Rhcyhvc2IpOwogCiAJb2NmczJfc2h1dGRvd25fbG9jYWxfYWxsb2Mob3NiKTsKQEAgLTE3NDIsNiArMTkxOCwxMiBAQAogCWJiaXRzID0gbGUzMl90b19jcHUoZGktPmlkMi5pX3N1cGVyLnNfYmxvY2tzaXplX2JpdHMpOwogCXNiLT5zX21heGJ5dGVzID0gb2NmczJfbWF4X2ZpbGVfb2Zmc2V0KGJiaXRzLCBjYml0cyk7CiAKKwlvc2ItPm9zYl9keF9tYXNrID0gKDEgPDwgKGNiaXRzIC0gYmJpdHMpKSAtIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlvc2ItPm9zYl9keF9zZWVkW2ldID0gbGUzMl90b19jcHUoZGktPmlkMi5pX3N1cGVyLnNfZHhfc2VlZFtpXSk7CisJb3NiLT5vc2JfZHhfc2VlZFszXSA9IGxlMzJfdG9fY3B1KGRpLT5pZDIuaV9zdXBlci5zX3V1aWRfaGFzaCk7CisKIAlvc2ItPnNiID0gc2I7CiAJLyogU2F2ZSBvZmYgZm9yIG9jZnMyX3J3X2RpcmVjdCAqLwogCW9zYi0+c19zZWN0c2l6ZV9iaXRzID0gYmxrc2l6ZV9iaXRzKHNlY3Rvcl9zaXplKTsKQEAgLTIxMzAsNiArMjMxMiwxMiBAQAogCSAqIGxvY2ssIGFuZCBpdCdzIG1hcmtlZCBhcyBkaXJ0eSwgc2V0IHRoZSBiaXQgaW4gdGhlIHJlY292ZXIKIAkgKiBtYXAgYW5kIGxhdW5jaCBhIHJlY292ZXJ5IHRocmVhZCBmb3IgaXQuICovCiAJc3RhdHVzID0gb2NmczJfbWFya19kZWFkX25vZGVzKG9zYik7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGZpbmFsbHk7CisJfQorCisJc3RhdHVzID0gb2NmczJfY29tcHV0ZV9yZXBsYXlfc2xvdHMob3NiKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCAyNTYzZGY4Li4xNTYzMTAxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCisrKyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTUxMiw3ICs1MTIsNyBAQAogCQkJICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksCiAJCQkgIGludCAqd2FudF9jbHVzdGVycywKIAkJCSAgaW50ICp4YXR0cl9jcmVkaXRzLAotCQkJICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKnhhdHRyX2FjKQorCQkJICBpbnQgKndhbnRfbWV0YSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CkBAIC01NTQsMTEgKzU1NCw3IEBACiAJaWYgKGRpci0+aV9zYi0+c19ibG9ja3NpemUgPT0gT0NGUzJfTUlOX0JMT0NLU0laRSB8fAogCSAgICAoU19JU0RJUihtb2RlKSAmJiBvY2ZzMl9zdXBwb3J0c19pbmxpbmVfZGF0YShvc2IpKSB8fAogCSAgICAoc19zaXplICsgYV9zaXplKSA+IE9DRlMyX1hBVFRSX0ZSRUVfSU5fSUJPRFkpIHsKLQkJcmV0ID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKG9zYiwgMSwgeGF0dHJfYWMpOwotCQlpZiAocmV0KSB7Ci0JCQltbG9nX2Vycm5vKHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9CisJCSp3YW50X21ldGEgPSAqd2FudF9tZXRhICsgMTsKIAkJKnhhdHRyX2NyZWRpdHMgKz0gT0NGUzJfWEFUVFJfQkxPQ0tfQ1JFQVRFX0NSRURJVFM7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaAppbmRleCA1YTFlYmM3Li4xY2E3ZTlhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5oCisrKyBiL2ZzL29jZnMyL3hhdHRyLmgKQEAgLTY4LDcgKzY4LDcgQEAKIAkJCSAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7CiBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwKIAkJCSAgaW50LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLAotCQkJICBpbnQgKiwgaW50ICosIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqKTsKKwkJCSAgaW50ICosIGludCAqLCBpbnQgKik7CiAKIC8qCiAgKiB4YXR0cnMgY2FuIGxpdmUgaW5zaWRlIGFuIGlub2RlLCBhcyBwYXJ0IG9mIGFuIGV4dGVybmFsIHhhdHRyIGJsb2NrLApkaWZmIC0tZ2l0IGEvZnMvb21mcy9pbm9kZS5jIGIvZnMvb21mcy9pbm9kZS5jCmluZGV4IDYzM2U5ZGMuLjM3OWFlNWYgMTAwNjQ0Ci0tLSBhL2ZzL29tZnMvaW5vZGUuYworKysgYi9mcy9vbWZzL2lub2RlLmMKQEAgLTI2MiwxNCArMjYyLDE5IEBACiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzID0gZGVudHJ5LT5kX3NiOwogCXN0cnVjdCBvbWZzX3NiX2luZm8gKnNiaSA9IE9NRlNfU0Iocyk7CisJdTY0IGlkID0gaHVnZV9lbmNvZGVfZGV2KHMtPnNfYmRldi0+YmRfZGV2KTsKKwogCWJ1Zi0+Zl90eXBlID0gT01GU19NQUdJQzsKIAlidWYtPmZfYnNpemUgPSBzYmktPnNfYmxvY2tzaXplOwogCWJ1Zi0+Zl9ibG9ja3MgPSBzYmktPnNfbnVtX2Jsb2NrczsKIAlidWYtPmZfZmlsZXMgPSBzYmktPnNfbnVtX2Jsb2NrczsKIAlidWYtPmZfbmFtZWxlbiA9IE9NRlNfTkFNRUxFTjsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAogCWJ1Zi0+Zl9iZnJlZSA9IGJ1Zi0+Zl9iYXZhaWwgPSBidWYtPmZfZmZyZWUgPQogCQlvbWZzX2NvdW50X2ZyZWUocyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDIxLDcgKzQyNiw3IEBACiAKIAlzYmktPnNfdWlkID0gY3VycmVudF91aWQoKTsKIAlzYmktPnNfZ2lkID0gY3VycmVudF9naWQoKTsKLQlzYmktPnNfZG1hc2sgPSBzYmktPnNfZm1hc2sgPSBjdXJyZW50LT5mcy0+dW1hc2s7CisJc2JpLT5zX2RtYXNrID0gc2JpLT5zX2ZtYXNrID0gY3VycmVudF91bWFzaygpOwogCiAJaWYgKCFwYXJzZV9vcHRpb25zKChjaGFyICopIGRhdGEsIHNiaSkpCiAJCWdvdG8gZW5kOwpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDc1YjYxNjcuLjM3N2ViMjUgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAKIGludCB2ZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYyBiL2ZzL3BhcnRpdGlvbnMvY2hlY2suYwppbmRleCAzOGUzMzdkLi45OWUzM2VmIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKKysrIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGt0cmFjZV9hcGkuaD4KIAogI2luY2x1ZGUgImNoZWNrLmgiCiAKQEAgLTI5NCw2ICsyOTUsOSBAQAogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqcGFydF9hdHRyX2dyb3Vwc1tdID0gewogCSZwYXJ0X2F0dHJfZ3JvdXAsCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UKKwkmYmxrX3RyYWNlX2F0dHJfZ3JvdXAsCisjZW5kaWYKIAlOVUxMCiB9OwogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IGUwYWZkMzIuLmY3MTU1OTcgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC04MCw2ICs4MCw3IEBACiAjaW5jbHVkZSA8bGludXgvb29tLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIC8qIE5PVEU6CmRpZmYgLS1naXQgYS9mcy9wcm9jL21lbWluZm8uYyBiL2ZzL3Byb2MvbWVtaW5mby5jCmluZGV4IDQzZDIzOTQ4Li43NGVhOTc0IDEwMDY0NAotLS0gYS9mcy9wcm9jL21lbWluZm8uYworKysgYi9mcy9wcm9jL21lbWluZm8uYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJCUsoaS5mcmVlcmFtLWkuZnJlZWhpZ2gpLAogI2VuZGlmCiAjaWZuZGVmIENPTkZJR19NTVUKLQkJSygodW5zaWduZWQgbG9uZykgYXRvbWljX3JlYWQoJm1tYXBfcGFnZXNfYWxsb2NhdGVkKSksCisJCUsoKHVuc2lnbmVkIGxvbmcpIGF0b21pY19sb25nX3JlYWQoJm1tYXBfcGFnZXNfYWxsb2NhdGVkKSksCiAjZW5kaWYKIAkJSyhpLnRvdGFsc3dhcCksCiAJCUsoaS5mcmVlc3dhcCksCmRpZmYgLS1naXQgYS9mcy9wcm9jL25vbW11LmMgYi9mcy9wcm9jL25vbW11LmMKaW5kZXggYjQ0NmQ3YS4uN2UxNGQxYSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9ub21tdS5jCisrKyBiL2ZzL3Byb2Mvbm9tbXUuYwpAQCAtNzYsNyArNzYsNyBAQAogCiAvKgogICogZGlzcGxheSBhIGxpc3Qgb2YgYWxsIHRoZSBSRUdJT05zIHRoZSBrZXJuZWwga25vd3MgYWJvdXQKLSAqIC0gbm9tbXUga2VybmFscyBoYXZlIGEgc2luZ2xlIGZsYXQgbGlzdAorICogLSBub21tdSBrZXJuZWxzIGhhdmUgYSBzaW5nbGUgZmxhdCBsaXN0CiAgKi8KIHN0YXRpYyBpbnQgbm9tbXVfcmVnaW9uX2xpc3Rfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl9wKQogewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wcm9jX3R0eS5jIGIvZnMvcHJvYy9wcm9jX3R0eS5jCmluZGV4IDRhOWUwZjYuLjgzYWRjYzggMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY190dHkuYworKysgYi9mcy9wcm9jL3Byb2NfdHR5LmMKQEAgLTE0NCwxNiArMTQ0LDEyIEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7CiAJCQotCWlmICghZHJpdmVyLT5vcHMtPnJlYWRfcHJvYyB8fCAhZHJpdmVyLT5kcml2ZXJfbmFtZSB8fAotCSAgICBkcml2ZXItPnByb2NfZW50cnkpCisJaWYgKCFkcml2ZXItPmRyaXZlcl9uYW1lIHx8IGRyaXZlci0+cHJvY19lbnRyeSB8fAorCSAgICAhZHJpdmVyLT5vcHMtPnByb2NfZm9wcykKIAkJcmV0dXJuOwogCi0JZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoZHJpdmVyLT5kcml2ZXJfbmFtZSwgMCwgcHJvY190dHlfZHJpdmVyKTsKLQlpZiAoIWVudCkKLQkJcmV0dXJuOwotCWVudC0+cmVhZF9wcm9jID0gZHJpdmVyLT5vcHMtPnJlYWRfcHJvYzsKLQllbnQtPmRhdGEgPSBkcml2ZXI7Ci0KKwllbnQgPSBwcm9jX2NyZWF0ZV9kYXRhKGRyaXZlci0+ZHJpdmVyX25hbWUsIDAsIHByb2NfdHR5X2RyaXZlciwKKwkJCSAgICAgICBkcml2ZXItPm9wcy0+cHJvY19mb3BzLCBkcml2ZXIpOwogCWRyaXZlci0+cHJvY19lbnRyeSA9IGVudDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX25vbW11LmMgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwppbmRleCAzNDNlYTEyLi44NjM0NjRkIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbm9tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwpAQCAtMiw2ICsyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9mZHRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpAQCAtNDksNyArNTAsNyBAQAogCWVsc2UKIAkJYnl0ZXMgKz0ga29ianNpemUobW0pOwogCQotCWlmIChjdXJyZW50LT5mcyAmJiBhdG9taWNfcmVhZCgmY3VycmVudC0+ZnMtPmNvdW50KSA+IDEpCisJaWYgKGN1cnJlbnQtPmZzICYmIGN1cnJlbnQtPmZzLT51c2VycyA+IDEpCiAJCXNieXRlcyArPSBrb2Jqc2l6ZShjdXJyZW50LT5mcyk7CiAJZWxzZQogCQlieXRlcyArPSBrb2Jqc2l6ZShjdXJyZW50LT5mcyk7CkBAIC0xMzYsMTQgKzEzNywxNCBAQAogCX0KIAogCXNlcV9wcmludGYobSwKLQkJICAgIiUwOGx4LSUwOGx4ICVjJWMlYyVjICUwOGx4ICUwMng6JTAyeCAlbHUgJW4iLAorCQkgICAiJTA4bHgtJTA4bHggJWMlYyVjJWMgJTA4bGx4ICUwMng6JTAyeCAlbHUgJW4iLAogCQkgICB2bWEtPnZtX3N0YXJ0LAogCQkgICB2bWEtPnZtX2VuZCwKIAkJICAgZmxhZ3MgJiBWTV9SRUFEID8gJ3InIDogJy0nLAogCQkgICBmbGFncyAmIFZNX1dSSVRFID8gJ3cnIDogJy0nLAogCQkgICBmbGFncyAmIFZNX0VYRUMgPyAneCcgOiAnLScsCiAJCSAgIGZsYWdzICYgVk1fTUFZU0hBUkUgPyBmbGFncyAmIFZNX1NIQVJFRCA/ICdTJyA6ICdzJyA6ICdwJywKLQkJICAgdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZULAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQsCiAJCSAgIE1BSk9SKGRldiksIE1JTk9SKGRldiksIGlubywgJmxlbik7CiAKIAlpZiAoZmlsZSkgewpkaWZmIC0tZ2l0IGEvZnMvcW54NC9pbm9kZS5jIGIvZnMvcW54NC9pbm9kZS5jCmluZGV4IDJhYWQxMDQuLmZlMWYwZjMgMTAwNjQ0Ci0tLSBhL2ZzL3FueDQvaW5vZGUuYworKysgYi9mcy9xbng0L2lub2RlLmMKQEAgLTI4Miw2ICsyODIsNyBAQAogc3RhdGljIGludCBxbng0X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWxvY2tfa2VybmVsKCk7CiAKQEAgLTI5MSw2ICsyOTIsOCBAQAogCWJ1Zi0+Zl9iZnJlZSAgID0gcW54NF9jb3VudF9mcmVlX2Jsb2NrcyhzYik7CiAJYnVmLT5mX2JhdmFpbCAgPSBidWYtPmZfYmZyZWU7CiAJYnVmLT5mX25hbWVsZW4gPSBRTlg0X05BTUVfTUFYOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCiAJdW5sb2NrX2tlcm5lbCgpOwogCmRpZmYgLS1naXQgYS9mcy9xdW90YS9kcXVvdC5jIGIvZnMvcXVvdGEvZHF1b3QuYwppbmRleCAyY2E5NjdhLi42MDdjNTc5IDEwMDY0NAotLS0gYS9mcy9xdW90YS9kcXVvdC5jCisrKyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTgyMyw3ICs4MjMsNyBAQAogCiAJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmc2ItPnNfaW5vZGVzLCBpX3NiX2xpc3QpIHsKLQkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCisJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9DTEVBUnxJX1dJTExfRlJFRXxJX05FVykpCiAJCQljb250aW51ZTsKIAkJaWYgKCFhdG9taWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwppbmRleCA5OTVlZjFkLi5lYmIyYzQxIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9maWxlLW5vbW11LmMKKysrIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCkBAIC01OSw3ICs1OSw2IEBACiAgKi8KIGludCByYW1mc19ub21tdV9leHBhbmRfZm9yX21hcHBpbmcoc3RydWN0IGlub2RlICppbm9kZSwgc2l6ZV90IG5ld3NpemUpCiB7Ci0Jc3RydWN0IHBhZ2V2ZWMgbHJ1X3B2ZWM7CiAJdW5zaWduZWQgbG9uZyBucGFnZXMsIHhwYWdlcywgbG9vcCwgbGltaXQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2VzOwogCXVuc2lnbmVkIG9yZGVyOwpAQCAtMTAyLDI0ICsxMDEsMjAgQEAKIAltZW1zZXQoZGF0YSwgMCwgbmV3c2l6ZSk7CiAKIAkvKiBhdHRhY2ggYWxsIHRoZSBwYWdlcyB0byB0aGUgaW5vZGUncyBhZGRyZXNzIHNwYWNlICovCi0JcGFnZXZlY19pbml0KCZscnVfcHZlYywgMCk7CiAJZm9yIChsb29wID0gMDsgbG9vcCA8IG5wYWdlczsgbG9vcCsrKSB7CiAJCXN0cnVjdCBwYWdlICpwYWdlID0gcGFnZXMgKyBsb29wOwogCi0JCXJldCA9IGFkZF90b19wYWdlX2NhY2hlKHBhZ2UsIGlub2RlLT5pX21hcHBpbmcsIGxvb3AsIEdGUF9LRVJORUwpOworCQlyZXQgPSBhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgaW5vZGUtPmlfbWFwcGluZywgbG9vcCwKKwkJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBhZGRfZXJyb3I7CiAKLQkJaWYgKCFwYWdldmVjX2FkZCgmbHJ1X3B2ZWMsIHBhZ2UpKQotCQkJX19wYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwotCiAJCS8qIHByZXZlbnQgdGhlIHBhZ2UgZnJvbSBiZWluZyBkaXNjYXJkZWQgb24gbWVtb3J5IHByZXNzdXJlICovCiAJCVNldFBhZ2VEaXJ0eShwYWdlKTsKIAogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9CiAKLQlwYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwogCXJldHVybiAwOwogCiAgZnNpemVfZXhjZWVkZWQ6CkBAIC0xMjgsMTAgKzEyMyw4IEBACiAJcmV0dXJuIC1FRkJJRzsKIAogIGFkZF9lcnJvcjoKLQlwYWdldmVjX2xydV9hZGRfZmlsZSgmbHJ1X3B2ZWMpOwotCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlcyArIGxvb3ApOwotCWZvciAobG9vcCsrOyBsb29wIDwgbnBhZ2VzOyBsb29wKyspCi0JCV9fZnJlZV9wYWdlKHBhZ2VzICsgbG9vcCk7CisJd2hpbGUgKGxvb3AgPCBucGFnZXMpCisJCV9fZnJlZV9wYWdlKHBhZ2VzICsgbG9vcCsrKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuYwppbmRleCBiN2U2YWM3Li5hNDA0ZmI4IDEwMDY0NAotLS0gYS9mcy9yYW1mcy9pbm9kZS5jCisrKyBiL2ZzL3JhbWZzL2lub2RlLmMKQEAgLTMzLDEyICszMywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFtZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogLyogc29tZSByYW5kb20gbnVtYmVyICovCiAjZGVmaW5lIFJBTUZTX01BR0lDCTB4ODU4NDU4ZjYKIAorI2RlZmluZSBSQU1GU19ERUZBVUxUX01PREUJMDc1NQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgcmFtZnNfb3BzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHJhbWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCkBAIC0xNTgsMTIgKzE2MSw3NSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHJhbWZzX29wcyA9IHsKIAkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCiAJLmRyb3BfaW5vZGUJPSBnZW5lcmljX2RlbGV0ZV9pbm9kZSwKKwkuc2hvd19vcHRpb25zCT0gZ2VuZXJpY19zaG93X29wdGlvbnMsCiB9OwogCitzdHJ1Y3QgcmFtZnNfbW91bnRfb3B0cyB7CisJdW1vZGVfdCBtb2RlOworfTsKKworZW51bSB7CisJT3B0X21vZGUsCisJT3B0X2VycgorfTsKKworc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0geworCXtPcHRfbW9kZSwgIm1vZGU9JW8ifSwKKwl7T3B0X2VyciwgTlVMTH0KK307CisKK3N0cnVjdCByYW1mc19mc19pbmZvIHsKKwlzdHJ1Y3QgcmFtZnNfbW91bnRfb3B0cyBtb3VudF9vcHRzOworfTsKKworc3RhdGljIGludCByYW1mc19wYXJzZV9vcHRpb25zKGNoYXIgKmRhdGEsIHN0cnVjdCByYW1mc19tb3VudF9vcHRzICpvcHRzKQoreworCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKKwlpbnQgb3B0aW9uOworCWludCB0b2tlbjsKKwljaGFyICpwOworCisJb3B0cy0+bW9kZSA9IFJBTUZTX0RFRkFVTFRfTU9ERTsKKworCXdoaWxlICgocCA9IHN0cnNlcCgmZGF0YSwgIiwiKSkgIT0gTlVMTCkgeworCQlpZiAoISpwKQorCQkJY29udGludWU7CisKKwkJdG9rZW4gPSBtYXRjaF90b2tlbihwLCB0b2tlbnMsIGFyZ3MpOworCQlzd2l0Y2ggKHRva2VuKSB7CisJCWNhc2UgT3B0X21vZGU6CisJCQlpZiAobWF0Y2hfb2N0YWwoJmFyZ3NbMF0sICZvcHRpb24pKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJb3B0cy0+bW9kZSA9IG9wdGlvbiAmIFNfSUFMTFVHTzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICJyYW1mczogYmFkIG1vdW50IG9wdGlvbjogJXNcbiIsIHApOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCByYW1mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLCB2b2lkICogZGF0YSwgaW50IHNpbGVudCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKLQlzdHJ1Y3QgZGVudHJ5ICogcm9vdDsKKwlzdHJ1Y3QgcmFtZnNfZnNfaW5mbyAqZnNpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCXN0cnVjdCBkZW50cnkgKnJvb3Q7CisJaW50IGVycjsKKworCXNhdmVfbW91bnRfb3B0aW9ucyhzYiwgZGF0YSk7CisKKwlmc2kgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFtZnNfZnNfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghZnNpKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisJc2ItPnNfZnNfaW5mbyA9IGZzaTsKKworCWVyciA9IHJhbWZzX3BhcnNlX29wdGlvbnMoZGF0YSwgJmZzaS0+bW91bnRfb3B0cyk7CisJaWYgKGVycikKKwkJZ290byBmYWlsOwogCiAJc2ItPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOwogCXNiLT5zX2Jsb2Nrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKQEAgLTE3MSwxNyArMjM3LDIzIEBACiAJc2ItPnNfbWFnaWMgPSBSQU1GU19NQUdJQzsKIAlzYi0+c19vcCA9ICZyYW1mc19vcHM7CiAJc2ItPnNfdGltZV9ncmFuID0gMTsKLQlpbm9kZSA9IHJhbWZzX2dldF9pbm9kZShzYiwgU19JRkRJUiB8IDA3NTUsIDApOwotCWlmICghaW5vZGUpCi0JCXJldHVybiAtRU5PTUVNOworCWlub2RlID0gcmFtZnNfZ2V0X2lub2RlKHNiLCBTX0lGRElSIHwgZnNpLT5tb3VudF9vcHRzLm1vZGUsIDApOworCWlmICghaW5vZGUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KIAogCXJvb3QgPSBkX2FsbG9jX3Jvb3QoaW5vZGUpOwogCWlmICghcm9vdCkgewotCQlpcHV0KGlub2RlKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKIAl9CiAJc2ItPnNfcm9vdCA9IHJvb3Q7CiAJcmV0dXJuIDA7CitmYWlsOgorCWtmcmVlKGZzaSk7CisJaXB1dChpbm9kZSk7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IHJhbWZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKQEAgLTE5NywxMCArMjY5LDE2IEBACiAJCQkgICAgbW50KTsKIH0KIAorc3RhdGljIHZvaWQgcmFtZnNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWtmcmVlKHNiLT5zX2ZzX2luZm8pOworCWtpbGxfbGl0dGVyX3N1cGVyKHNiKTsKK30KKwogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHJhbWZzX2ZzX3R5cGUgPSB7CiAJLm5hbWUJCT0gInJhbWZzIiwKIAkuZ2V0X3NiCQk9IHJhbWZzX2dldF9zYiwKLQkua2lsbF9zYgk9IGtpbGxfbGl0dGVyX3N1cGVyLAorCS5raWxsX3NiCT0gcmFtZnNfa2lsbF9zYiwKIH07CiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgcm9vdGZzX2ZzX3R5cGUgPSB7CiAJLm5hbWUJCT0gInJvb3RmcyIsCmRpZmYgLS1naXQgYS9mcy9yZWFkX3dyaXRlLmMgYi9mcy9yZWFkX3dyaXRlLmMKaW5kZXggNDAwZmU4MS4uOWQxZTc2YiAxMDA2NDQKLS0tIGEvZnMvcmVhZF93cml0ZS5jCisrKyBiL2ZzL3JlYWRfd3JpdGUuYwpAQCAtNzMxLDYgKzczMSw2MiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgbG9mZl90IHBvc19mcm9tX2hpbG8odW5zaWduZWQgbG9uZyBoaWdoLCB1bnNpZ25lZCBsb25nIGxvdykKK3sKKyNkZWZpbmUgSEFMRl9MT05HX0JJVFMgKEJJVFNfUEVSX0xPTkcgLyAyKQorCXJldHVybiAoKChsb2ZmX3QpaGlnaCA8PCBIQUxGX0xPTkdfQklUUykgPDwgSEFMRl9MT05HX0JJVFMpIHwgbG93OworfQorCitTWVNDQUxMX0RFRklORTUocHJlYWR2LCB1bnNpZ25lZCBsb25nLCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqLCB2ZWMsCisJCXVuc2lnbmVkIGxvbmcsIHZsZW4sIHVuc2lnbmVkIGxvbmcsIHBvc19sLCB1bnNpZ25lZCBsb25nLCBwb3NfaCkKK3sKKwlsb2ZmX3QgcG9zID0gcG9zX2Zyb21faGlsbyhwb3NfaCwgcG9zX2wpOworCXN0cnVjdCBmaWxlICpmaWxlOworCXNzaXplX3QgcmV0ID0gLUVCQURGOworCWludCBmcHV0X25lZWRlZDsKKworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZpbGUgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOworCWlmIChmaWxlKSB7CisJCXJldCA9IC1FU1BJUEU7CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9QUkVBRCkKKwkJCXJldCA9IHZmc19yZWFkdihmaWxlLCB2ZWMsIHZsZW4sICZwb3MpOworCQlmcHV0X2xpZ2h0KGZpbGUsIGZwdXRfbmVlZGVkKTsKKwl9CisKKwlpZiAocmV0ID4gMCkKKwkJYWRkX3JjaGFyKGN1cnJlbnQsIHJldCk7CisJaW5jX3N5c2NyKGN1cnJlbnQpOworCXJldHVybiByZXQ7Cit9CisKK1NZU0NBTExfREVGSU5FNShwd3JpdGV2LCB1bnNpZ25lZCBsb25nLCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqLCB2ZWMsCisJCXVuc2lnbmVkIGxvbmcsIHZsZW4sIHVuc2lnbmVkIGxvbmcsIHBvc19sLCB1bnNpZ25lZCBsb25nLCBwb3NfaCkKK3sKKwlsb2ZmX3QgcG9zID0gcG9zX2Zyb21faGlsbyhwb3NfaCwgcG9zX2wpOworCXN0cnVjdCBmaWxlICpmaWxlOworCXNzaXplX3QgcmV0ID0gLUVCQURGOworCWludCBmcHV0X25lZWRlZDsKKworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZpbGUgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOworCWlmIChmaWxlKSB7CisJCXJldCA9IC1FU1BJUEU7CisJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9QV1JJVEUpCisJCQlyZXQgPSB2ZnNfd3JpdGV2KGZpbGUsIHZlYywgdmxlbiwgJnBvcyk7CisJCWZwdXRfbGlnaHQoZmlsZSwgZnB1dF9uZWVkZWQpOworCX0KKworCWlmIChyZXQgPiAwKQorCQlhZGRfd2NoYXIoY3VycmVudCwgcmV0KTsKKwlpbmNfc3lzY3coY3VycmVudCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHNzaXplX3QgZG9fc2VuZGZpbGUoaW50IG91dF9mZCwgaW50IGluX2ZkLCBsb2ZmX3QgKnBwb3MsCiAJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCBtYXgpCiB7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9LY29uZmlnIGIvZnMvcmVpc2VyZnMvS2NvbmZpZwppbmRleCA5NDliOGM2Li41MTNmNDMxIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9LY29uZmlnCisrKyBiL2ZzL3JlaXNlcmZzL0tjb25maWcKQEAgLTEsNSArMSw2IEBACiBjb25maWcgUkVJU0VSRlNfRlMKIAl0cmlzdGF0ZSAiUmVpc2VyZnMgc3VwcG9ydCIKKwlzZWxlY3QgQ1JDMzIKIAloZWxwCiAJICBTdG9yZXMgbm90IGp1c3QgZmlsZW5hbWVzIGJ1dCB0aGUgZmlsZXMgdGhlbXNlbHZlcyBpbiBhIGJhbGFuY2VkCiAJICB0cmVlLiAgVXNlcyBqb3VybmFsbGluZy4KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMgYi9mcy9yZWlzZXJmcy9zdXBlci5jCmluZGV4IDk3MjI1MGM2Li4wYWU2NDg2IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdXBlci5jCisrKyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbnRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAKIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHJlaXNlcmZzX2ZzX3R5cGU7CiAKQEAgLTE5MDQsNiArMTkwNSwxMCBAQAogCWJ1Zi0+Zl9ic2l6ZSA9IGRlbnRyeS0+ZF9zYi0+c19ibG9ja3NpemU7CiAJLyogY2hhbmdlZCB0byBhY2NvbW1vZGF0ZSBnY2MgZm9sa3MuICovCiAJYnVmLT5mX3R5cGUgPSBSRUlTRVJGU19TVVBFUl9NQUdJQzsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWNyYzMyX2xlKDAsIHJzLT5zX3V1aWQsIHNpemVvZihycy0+c191dWlkKS8yKTsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKWNyYzMyX2xlKDAsIHJzLT5zX3V1aWQgKyBzaXplb2YocnMtPnNfdXVpZCkvMiwKKwkJCQlzaXplb2YocnMtPnNfdXVpZCkvMik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMgYi9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYwppbmRleCBkNDIzNDE2Li5jMzAzYzQyIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYworKysgYi9mcy9yZWlzZXJmcy94YXR0cl9hY2wuYwpAQCAtNDI4LDcgKzQyOCw3IEBACiAJfSBlbHNlIHsKIAkgICAgICBhcHBseV91bWFzazoKIAkJLyogbm8gQUNMLCBhcHBseSB1bWFzayAqLwotCQlpbm9kZS0+aV9tb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCA0ZWQwYmE0Li5kZDcyN2Q0IDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYworKysgYi9mcy9zcGxpY2UuYwpAQCAtNTksNyArNTksOCBAQAogCQkgKi8KIAkJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlKTsKIAotCQlpZiAoUGFnZVByaXZhdGUocGFnZSkgJiYgIXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgR0ZQX0tFUk5FTCkpCisJCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpICYmCisJCSAgICAhdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCBHRlBfS0VSTkVMKSkKIAkJCWdvdG8gb3V0X3VubG9jazsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvc3VwZXIuYyBiL2ZzL3NxdWFzaGZzL3N1cGVyLmMKaW5kZXggNjgxZWMwZC4uZmZhNmVkYyAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvc3VwZXIuYworKysgYi9mcy9zcXVhc2hmcy9zdXBlci5jCkBAIC0zMDEsNiArMzAxLDcgQEAKIHN0YXRpYyBpbnQgc3F1YXNoZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc3F1YXNoZnNfc2JfaW5mbyAqbXNibGsgPSBkZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoZGVudHJ5LT5kX3NiLT5zX2JkZXYtPmJkX2Rldik7CiAKIAlUUkFDRSgiRW50ZXJlZCBzcXVhc2hmc19zdGF0ZnNcbiIpOwogCkBAIC0zMTEsNiArMzEyLDggQEAKIAlidWYtPmZfZmlsZXMgPSBtc2Jsay0+aW5vZGVzOwogCWJ1Zi0+Zl9mZnJlZSA9IDA7CiAJYnVmLT5mX25hbWVsZW4gPSBTUVVBU0hGU19OQU1FX0xFTjsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggMmJhNDgxNS4uNzdjYjRlYyAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC0yODcsNiArMjg3LDcgQEAKIAlfX2ZzeW5jX3N1cGVyKHNiKTsKIAlyZXR1cm4gc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZzeW5jX3N1cGVyKTsKIAogLyoqCiAgKglnZW5lcmljX3NodXRkb3duX3N1cGVyCS0JY29tbW9uIGhlbHBlciBmb3IgLT5raWxsX3NiKCkKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2Jpbi5jIGIvZnMvc3lzZnMvYmluLmMKaW5kZXggMDc3MDNkMy4uOTNlMGMwMiAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvYmluLmMKKysrIGIvZnMvc3lzZnMvYmluLmMKQEAgLTIzNCw3ICsyMzQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYmluX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpCitzdGF0aWMgaW50IGJpbl9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gdm1hLT52bV9maWxlOwogCXN0cnVjdCBiaW5fYnVmZmVyICpiYiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTI0MiwxNSArMjQyLDE1IEBACiAJaW50IHJldDsKIAogCWlmICghYmItPnZtX29wcykKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiAKIAlpZiAoIWJiLT52bV9vcHMtPnBhZ2VfbWt3cml0ZSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKIAotCXJldCA9IGJiLT52bV9vcHMtPnBhZ2VfbWt3cml0ZSh2bWEsIHBhZ2UpOworCXJldCA9IGJiLT52bV9vcHMtPnBhZ2VfbWt3cml0ZSh2bWEsIHZtZik7CiAKIAlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZnMvc3lzdi9pbm9kZS5jIGIvZnMvc3lzdi9pbm9kZS5jCmluZGV4IDNkODFiZjUuLmRhMjBiNDggMTAwNjQ0Ci0tLSBhL2ZzL3N5c3YvaW5vZGUuYworKysgYi9mcy9zeXN2L2lub2RlLmMKQEAgLTkwLDYgKzkwLDcgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOwogCXN0cnVjdCBzeXN2X3NiX2luZm8gKnNiaSA9IFNZU1ZfU0Ioc2IpOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzYi0+c19iZGV2LT5iZF9kZXYpOwogCiAJYnVmLT5mX3R5cGUgPSBzYi0+c19tYWdpYzsKIAlidWYtPmZfYnNpemUgPSBzYi0+c19ibG9ja3NpemU7CkBAIC05OCw2ICs5OSw4IEBACiAJYnVmLT5mX2ZpbGVzID0gc2JpLT5zX25pbm9kZXM7CiAJYnVmLT5mX2ZmcmVlID0gc3lzdl9jb3VudF9mcmVlX2lub2RlcyhzYik7CiAJYnVmLT5mX25hbWVsZW4gPSBTWVNWX05BTUVMRU47CisJYnVmLT5mX2ZzaWQudmFsWzBdID0gKHUzMilpZDsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKShpZCA+PiAzMik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL0tjb25maWcgYi9mcy91Ymlmcy9LY29uZmlnCmluZGV4IGUzNWI1NGQuLjgzMGUzZjcgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL0tjb25maWcKKysrIGIvZnMvdWJpZnMvS2NvbmZpZwpAQCAtMjIsNyArMjIsNyBAQAogCWRlcGVuZHMgb24gVUJJRlNfRlMKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhbGxvd3MgdG8gZXhwbGljaXRseSBjaG9vc2Ugd2hpY2ggY29tcHJlc3Npb25zLCBpZiBhbnksCi0JICBhcmUgZW5hYmxlZCBpbiBVQklGUy4gUmVtb3ZpbmcgY29tcHJlc3NvcnMgbWVhbnMgaW5iaWxpdHkgdG8gcmVhZAorCSAgYXJlIGVuYWJsZWQgaW4gVUJJRlMuIFJlbW92aW5nIGNvbXByZXNzb3JzIG1lYW5zIGluYWJpbGl0eSB0byByZWFkCiAJICBleGlzdGluZyBmaWxlIHN5c3RlbXMuCiAKIAkgIElmIHVuc3VyZSwgc2F5ICdOJy4KQEAgLTMyLDcgKzMyLDcgQEAKIAlkZXBlbmRzIG9uIFVCSUZTX0ZTCiAJZGVmYXVsdCB5CiAJaGVscAotCSAgIExaTyBjb21wcmVzc29yIGlzIGdlbmVyYWxseSBmYXN0ZXIgdGhlbiB6bGliIGJ1dCBjb21wcmVzc2VzIHdvcnNlLgorCSAgIExaTyBjb21wcmVzc29yIGlzIGdlbmVyYWxseSBmYXN0ZXIgdGhhbiB6bGliIGJ1dCBjb21wcmVzc2VzIHdvcnNlLgogCSAgIFNheSAnWScgaWYgdW5zdXJlLgogCiBjb25maWcgVUJJRlNfRlNfWkxJQgpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZmlsZS5jIGIvZnMvdWJpZnMvZmlsZS5jCmluZGV4IDkzYjZkZTUuLjBmZjg5ZmUgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2ZpbGUuYworKysgYi9mcy91Ymlmcy9maWxlLmMKQEAgLTE0MzQsOCArMTQzNCw5IEBACiAgKiBtbWFwKClkIGZpbGUgaGFzIHRha2VuIHdyaXRlIHByb3RlY3Rpb24gZmF1bHQgYW5kIGlzIGJlaW5nIG1hZGUKICAqIHdyaXRhYmxlLiBVQklGUyBtdXN0IGVuc3VyZSBwYWdlIGlzIGJ1ZGdldGVkIGZvci4KICAqLwotc3RhdGljIGludCB1Ymlmc192bV9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKQorc3RhdGljIGludCB1Ymlmc192bV9wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQogeworCXN0cnVjdCBwYWdlICpwYWdlID0gdm1mLT5wYWdlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSB2bWEtPnZtX2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHViaWZzX2luZm8gKmMgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwogCXN0cnVjdCB0aW1lc3BlYyBub3cgPSB1Ymlmc19jdXJyZW50X3RpbWUoaW5vZGUpOwpAQCAtMTQ0Nyw3ICsxNDQ4LDcgQEAKIAl1Ymlmc19hc3NlcnQoIShpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkpOwogCiAJaWYgKHVubGlrZWx5KGMtPnJvX21lZGlhKSkKLQkJcmV0dXJuIC1FUk9GUzsKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsgLyogLUVST0ZTICovCiAKIAkvKgogCSAqIFdlIGhhdmUgbm90IGxvY2tlZCBAcGFnZSBzbyBmYXIgc28gd2UgbWF5IGJ1ZGdldCBmb3IgY2hhbmdpbmcgdGhlCkBAIC0xNDgwLDcgKzE0ODEsNyBAQAogCQlpZiAoZXJyID09IC1FTk9TUEMpCiAJCQl1Ymlmc193YXJuKCJvdXQgb2Ygc3BhY2UgZm9yIG1tYXBwZWQgZmlsZSAiCiAJCQkJICAgIihpbm9kZSBudW1iZXIgJWx1KSIsIGlub2RlLT5pX2lubyk7Ci0JCXJldHVybiBlcnI7CisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiAJfQogCiAJbG9ja19wYWdlKHBhZ2UpOwpAQCAtMTUyMCw2ICsxNTIxLDggQEAKIG91dF91bmxvY2s6CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJdWJpZnNfcmVsZWFzZV9idWRnZXQoYywgJnJlcSk7CisJaWYgKGVycikKKwkJZXJyID0gVk1fRkFVTFRfU0lHQlVTOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3VkZi9iYWxsb2MuYyBiL2ZzL3VkZi9iYWxsb2MuYwppbmRleCAyYmI3ODhhLi5lNDhlOWEzIDEwMDY0NAotLS0gYS9mcy91ZGYvYmFsbG9jLmMKKysrIGIvZnMvdWRmL2JhbGxvYy5jCkBAIC04NywxMiArODcsMTIgQEAKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlpbnQgcmV0dmFsID0gMDsKLQlrZXJuZWxfbGJfYWRkciBsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGxvYzsKIAogCWxvYy5sb2dpY2FsQmxvY2tOdW0gPSBiaXRtYXAtPnNfZXh0UG9zaXRpb247CiAJbG9jLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IFVERl9TQihzYiktPnNfcGFydGl0aW9uOwogCi0JYmggPSB1ZGZfdHJlYWQoc2IsIHVkZl9nZXRfbGJfcGJsb2NrKHNiLCBsb2MsIGJsb2NrKSk7CisJYmggPSB1ZGZfdHJlYWQoc2IsIHVkZl9nZXRfbGJfcGJsb2NrKHNiLCAmbG9jLCBibG9jaykpOwogCWlmICghYmgpCiAJCXJldHZhbCA9IC1FSU87CiAKQEAgLTE0MCwyNyArMTQwLDI5IEBACiAJcmV0dXJuIHNsb3Q7CiB9CiAKLXN0YXRpYyBib29sIHVkZl9hZGRfZnJlZV9zcGFjZShzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSwKLQkJCQl1MTYgcGFydGl0aW9uLCB1MzIgY250KQorc3RhdGljIHZvaWQgdWRmX2FkZF9mcmVlX3NwYWNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUxNiBwYXJ0aXRpb24sIHUzMiBjbnQpCiB7CisJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOwogCXN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyAqbHZpZDsKIAotCWlmIChzYmktPnNfbHZpZF9iaCA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7CisJaWYgKCFzYmktPnNfbHZpZF9iaCkKKwkJcmV0dXJuOwogCiAJbHZpZCA9IChzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKilzYmktPnNfbHZpZF9iaC0+Yl9kYXRhOwogCWxlMzJfYWRkX2NwdSgmbHZpZC0+ZnJlZVNwYWNlVGFibGVbcGFydGl0aW9uXSwgY250KTsKLQlyZXR1cm4gdHJ1ZTsKKwl1ZGZfdXBkYXRlZF9sdmlkKHNiKTsKIH0KIAogc3RhdGljIHZvaWQgdWRmX2JpdG1hcF9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICAgc3RydWN0IHVkZl9iaXRtYXAgKmJpdG1hcCwKLQkJCQkgICBrZXJuZWxfbGJfYWRkciBibG9jLCB1aW50MzJfdCBvZmZzZXQsCisJCQkJICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpibG9jLAorCQkJCSAgIHVpbnQzMl90IG9mZnNldCwKIAkJCQkgICB1aW50MzJfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJc3RydWN0IHVkZl9wYXJ0X21hcCAqcGFydG1hcDsKIAl1bnNpZ25lZCBsb25nIGJsb2NrOwogCXVuc2lnbmVkIGxvbmcgYmxvY2tfZ3JvdXA7CiAJdW5zaWduZWQgbG9uZyBiaXQ7CkBAIC0xNjksMTcgKzE3MSwxNyBAQAogCXVuc2lnbmVkIGxvbmcgb3ZlcmZsb3c7CiAKIAltdXRleF9sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwotCWlmIChibG9jLmxvZ2ljYWxCbG9ja051bSA8IDAgfHwKLQkgICAgKGJsb2MubG9naWNhbEJsb2NrTnVtICsgY291bnQpID4KLQkJc2JpLT5zX3BhcnRtYXBzW2Jsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtXS5zX3BhcnRpdGlvbl9sZW4pIHsKKwlwYXJ0bWFwID0gJnNiaS0+c19wYXJ0bWFwc1tibG9jLT5wYXJ0aXRpb25SZWZlcmVuY2VOdW1dOworCWlmIChibG9jLT5sb2dpY2FsQmxvY2tOdW0gPCAwIHx8CisJICAgIChibG9jLT5sb2dpY2FsQmxvY2tOdW0gKyBjb3VudCkgPgorCQlwYXJ0bWFwLT5zX3BhcnRpdGlvbl9sZW4pIHsKIAkJdWRmX2RlYnVnKCIlZCA8ICVkIHx8ICVkICsgJWQgPiAlZFxuIiwKLQkJCSAgYmxvYy5sb2dpY2FsQmxvY2tOdW0sIDAsIGJsb2MubG9naWNhbEJsb2NrTnVtLCBjb3VudCwKLQkJCSAgc2JpLT5zX3BhcnRtYXBzW2Jsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtXS4KLQkJCQkJCQlzX3BhcnRpdGlvbl9sZW4pOworCQkJICBibG9jLT5sb2dpY2FsQmxvY2tOdW0sIDAsIGJsb2MtPmxvZ2ljYWxCbG9ja051bSwKKwkJCSAgY291bnQsIHBhcnRtYXAtPnNfcGFydGl0aW9uX2xlbik7CiAJCWdvdG8gZXJyb3JfcmV0dXJuOwogCX0KIAotCWJsb2NrID0gYmxvYy5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQgKworCWJsb2NrID0gYmxvYy0+bG9naWNhbEJsb2NrTnVtICsgb2Zmc2V0ICsKIAkJKHNpemVvZihzdHJ1Y3Qgc3BhY2VCaXRtYXBEZXNjKSA8PCAzKTsKIAogCWRvIHsKQEAgLTIwNyw3ICsyMDksNyBAQAogCQkJfSBlbHNlIHsKIAkJCQlpZiAoaW5vZGUpCiAJCQkJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKLQkJCQl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2JpLCBzYmktPnNfcGFydGl0aW9uLCAxKTsKKwkJCQl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2IsIHNiaS0+c19wYXJ0aXRpb24sIDEpOwogCQkJfQogCQl9CiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKQEAgLTIxOCw5ICsyMjAsNiBAQAogCX0gd2hpbGUgKG92ZXJmbG93KTsKIAogZXJyb3JfcmV0dXJuOgotCXNiLT5zX2RpcnQgPSAxOwotCWlmIChzYmktPnNfbHZpZF9iaCkKLQkJbWFya19idWZmZXJfZGlydHkoc2JpLT5zX2x2aWRfYmgpOwogCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIH0KIApAQCAtMjc3LDkgKzI3Niw3IEBACiAJfSB3aGlsZSAoYmxvY2tfY291bnQgPiAwKTsKIAogb3V0OgotCWlmICh1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2JpLCBwYXJ0aXRpb24sIC1hbGxvY19jb3VudCkpCi0JCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKLQlzYi0+c19kaXJ0ID0gMTsKKwl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2IsIHBhcnRpdGlvbiwgLWFsbG9jX2NvdW50KTsKIAltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJcmV0dXJuIGFsbG9jX2NvdW50OwogfQpAQCAtNDA5LDkgKzQwNiw3IEBACiAKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAKLQlpZiAodWRmX2FkZF9mcmVlX3NwYWNlKHNiaSwgcGFydGl0aW9uLCAtMSkpCi0JCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKLQlzYi0+c19kaXJ0ID0gMTsKKwl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2IsIHBhcnRpdGlvbiwgLTEpOwogCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAkqZXJyID0gMDsKIAlyZXR1cm4gbmV3YmxvY2s7CkBAIC00MjUsMjYgKzQyMCwyOCBAQAogc3RhdGljIHZvaWQgdWRmX3RhYmxlX2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgc3RydWN0IGlub2RlICp0YWJsZSwKLQkJCQkgIGtlcm5lbF9sYl9hZGRyIGJsb2MsIHVpbnQzMl90IG9mZnNldCwKKwkJCQkgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqYmxvYywKKwkJCQkgIHVpbnQzMl90IG9mZnNldCwKIAkJCQkgIHVpbnQzMl90IGNvdW50KQogewogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKKwlzdHJ1Y3QgdWRmX3BhcnRfbWFwICpwYXJ0bWFwOwogCXVpbnQzMl90IHN0YXJ0LCBlbmQ7CiAJdWludDMyX3QgZWxlbjsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gb2Vwb3MsIGVwb3M7CiAJaW50OF90IGV0eXBlOwogCWludCBpOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm87CiAKIAltdXRleF9sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwotCWlmIChibG9jLmxvZ2ljYWxCbG9ja051bSA8IDAgfHwKLQkgICAgKGJsb2MubG9naWNhbEJsb2NrTnVtICsgY291bnQpID4KLQkJc2JpLT5zX3BhcnRtYXBzW2Jsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtXS5zX3BhcnRpdGlvbl9sZW4pIHsKKwlwYXJ0bWFwID0gJnNiaS0+c19wYXJ0bWFwc1tibG9jLT5wYXJ0aXRpb25SZWZlcmVuY2VOdW1dOworCWlmIChibG9jLT5sb2dpY2FsQmxvY2tOdW0gPCAwIHx8CisJICAgIChibG9jLT5sb2dpY2FsQmxvY2tOdW0gKyBjb3VudCkgPgorCQlwYXJ0bWFwLT5zX3BhcnRpdGlvbl9sZW4pIHsKIAkJdWRmX2RlYnVnKCIlZCA8ICVkIHx8ICVkICsgJWQgPiAlZFxuIiwKIAkJCSAgYmxvYy5sb2dpY2FsQmxvY2tOdW0sIDAsIGJsb2MubG9naWNhbEJsb2NrTnVtLCBjb3VudCwKLQkJCSAgc2JpLT5zX3BhcnRtYXBzW2Jsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtXS4KLQkJCQkJCQlzX3BhcnRpdGlvbl9sZW4pOworCQkJICBwYXJ0bWFwLT5zX3BhcnRpdGlvbl9sZW4pOwogCQlnb3RvIGVycm9yX3JldHVybjsKIAl9CiAKQEAgLTQ1MywxMSArNDUwLDEwIEBACiAJICAgY291bGQgb2NjdXJlLCBidXQuLiBvaCB3ZWxsICovCiAJaWYgKGlub2RlKQogCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgY291bnQpOwotCWlmICh1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2JpLCBzYmktPnNfcGFydGl0aW9uLCBjb3VudCkpCi0JCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKKwl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2IsIHNiaS0+c19wYXJ0aXRpb24sIGNvdW50KTsKIAotCXN0YXJ0ID0gYmxvYy5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQ7Ci0JZW5kID0gYmxvYy5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQgKyBjb3VudCAtIDE7CisJc3RhcnQgPSBibG9jLT5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQ7CisJZW5kID0gYmxvYy0+bG9naWNhbEJsb2NrTnVtICsgb2Zmc2V0ICsgY291bnQgLSAxOwogCiAJZXBvcy5vZmZzZXQgPSBvZXBvcy5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHVuYWxsb2NTcGFjZUVudHJ5KTsKIAllbGVuID0gMDsKQEAgLTQ4Myw3ICs0NzksNyBAQAogCQkJCXN0YXJ0ICs9IGNvdW50OwogCQkJCWNvdW50ID0gMDsKIAkJCX0KLQkJCXVkZl93cml0ZV9hZXh0KHRhYmxlLCAmb2Vwb3MsIGVsb2MsIGVsZW4sIDEpOworCQkJdWRmX3dyaXRlX2FleHQodGFibGUsICZvZXBvcywgJmVsb2MsIGVsZW4sIDEpOwogCQl9IGVsc2UgaWYgKGVsb2MubG9naWNhbEJsb2NrTnVtID09IChlbmQgKyAxKSkgewogCQkJaWYgKCgweDNGRkZGRkZGIC0gZWxlbikgPAogCQkJCQkoY291bnQgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHMpKSB7CkBAIC01MDIsNyArNDk4LDcgQEAKIAkJCQllbmQgLT0gY291bnQ7CiAJCQkJY291bnQgPSAwOwogCQkJfQotCQkJdWRmX3dyaXRlX2FleHQodGFibGUsICZvZXBvcywgZWxvYywgZWxlbiwgMSk7CisJCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJm9lcG9zLCAmZWxvYywgZWxlbiwgMSk7CiAJCX0KIAogCQlpZiAoZXBvcy5iaCAhPSBvZXBvcy5iaCkgewpAQCAtNTMyLDggKzUyOCw4IEBACiAJCSAqLwogCiAJCWludCBhZHNpemU7Ci0JCXNob3J0X2FkICpzYWQgPSBOVUxMOwotCQlsb25nX2FkICpsYWQgPSBOVUxMOworCQlzdHJ1Y3Qgc2hvcnRfYWQgKnNhZCA9IE5VTEw7CisJCXN0cnVjdCBsb25nX2FkICpsYWQgPSBOVUxMOwogCQlzdHJ1Y3QgYWxsb2NFeHREZXNjICphZWQ7CiAKIAkJZWxvYy5sb2dpY2FsQmxvY2tOdW0gPSBzdGFydDsKQEAgLTU0MSw5ICs1MzcsOSBAQAogCQkJKGNvdW50IDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKIAogCQlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJCWFkc2l6ZSA9IHNpemVvZihzaG9ydF9hZCk7CisJCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAkJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQkJYWRzaXplID0gc2l6ZW9mKGxvbmdfYWQpOworCQkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAkJZWxzZSB7CiAJCQlicmVsc2Uob2Vwb3MuYmgpOwogCQkJYnJlbHNlKGVwb3MuYmgpOwpAQCAtNTYzLDcgKzU1OSw3IEBACiAJCQllbGVuIC09IHNiLT5zX2Jsb2Nrc2l6ZTsKIAogCQkJZXBvcy5iaCA9IHVkZl90cmVhZChzYiwKLQkJCQkJdWRmX2dldF9sYl9wYmxvY2soc2IsIGVwb3MuYmxvY2ssIDApKTsKKwkJCQkJdWRmX2dldF9sYl9wYmxvY2soc2IsICZlcG9zLmJsb2NrLCAwKSk7CiAJCQlpZiAoIWVwb3MuYmgpIHsKIAkJCQlicmVsc2Uob2Vwb3MuYmgpOwogCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwpAQCAtNjAxLDE1ICs1OTcsMTUgQEAKIAkJCWlmIChzYmktPnNfdWRmcmV2ID49IDB4MDIwMCkKIAkJCQl1ZGZfbmV3X3RhZyhlcG9zLmJoLT5iX2RhdGEsIFRBR19JREVOVF9BRUQsCiAJCQkJCSAgICAzLCAxLCBlcG9zLmJsb2NrLmxvZ2ljYWxCbG9ja051bSwKLQkJCQkJICAgIHNpemVvZih0YWcpKTsKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgdGFnKSk7CiAJCQllbHNlCiAJCQkJdWRmX25ld190YWcoZXBvcy5iaC0+Yl9kYXRhLCBUQUdfSURFTlRfQUVELAogCQkJCQkgICAgMiwgMSwgZXBvcy5ibG9jay5sb2dpY2FsQmxvY2tOdW0sCi0JCQkJCSAgICBzaXplb2YodGFnKSk7CisJCQkJCSAgICBzaXplb2Yoc3RydWN0IHRhZykpOwogCiAJCQlzd2l0Y2ggKGlpbmZvLT5pX2FsbG9jX3R5cGUpIHsKIAkJCWNhc2UgSUNCVEFHX0ZMQUdfQURfU0hPUlQ6Ci0JCQkJc2FkID0gKHNob3J0X2FkICopc3B0cjsKKwkJCQlzYWQgPSAoc3RydWN0IHNob3J0X2FkICopc3B0cjsKIAkJCQlzYWQtPmV4dExlbmd0aCA9IGNwdV90b19sZTMyKAogCQkJCQlFWFRfTkVYVF9FWFRFTlRfQUxMT0NERUNTIHwKIAkJCQkJc2ItPnNfYmxvY2tzaXplKTsKQEAgLTYxNyw3ICs2MTMsNyBAQAogCQkJCQljcHVfdG9fbGUzMihlcG9zLmJsb2NrLmxvZ2ljYWxCbG9ja051bSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIElDQlRBR19GTEFHX0FEX0xPTkc6Ci0JCQkJbGFkID0gKGxvbmdfYWQgKilzcHRyOworCQkJCWxhZCA9IChzdHJ1Y3QgbG9uZ19hZCAqKXNwdHI7CiAJCQkJbGFkLT5leHRMZW5ndGggPSBjcHVfdG9fbGUzMigKIAkJCQkJRVhUX05FWFRfRVhURU5UX0FMTE9DREVDUyB8CiAJCQkJCXNiLT5zX2Jsb2Nrc2l6ZSk7CkBAIC02MzUsNyArNjMxLDcgQEAKIAogCQkvKiBJdCdzIHBvc3NpYmxlIHRoYXQgc3RlYWxpbmcgdGhlIGJsb2NrIGVtcHRpZWQgdGhlIGV4dGVudCAqLwogCQlpZiAoZWxlbikgewotCQkJdWRmX3dyaXRlX2FleHQodGFibGUsICZlcG9zLCBlbG9jLCBlbGVuLCAxKTsKKwkJCXVkZl93cml0ZV9hZXh0KHRhYmxlLCAmZXBvcywgJmVsb2MsIGVsZW4sIDEpOwogCiAJCQlpZiAoIWVwb3MuYmgpIHsKIAkJCQlpaW5mby0+aV9sZW5BbGxvYyArPSBhZHNpemU7CkBAIC02NTMsNyArNjQ5LDYgQEAKIAlicmVsc2Uob2Vwb3MuYmgpOwogCiBlcnJvcl9yZXR1cm46Ci0Jc2ItPnNfZGlydCA9IDE7CiAJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCXJldHVybjsKIH0KQEAgLTY2Niw3ICs2NjEsNyBAQAogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKIAlpbnQgYWxsb2NfY291bnQgPSAwOwogCXVpbnQzMl90IGVsZW4sIGFkc2l6ZTsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvczsKIAlpbnQ4X3QgZXR5cGUgPSAtMTsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvOwpAQCAtNjc3LDkgKzY3Miw5IEBACiAKIAlpaW5mbyA9IFVERl9JKHRhYmxlKTsKIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJYWRzaXplID0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJZWxzZQogCQlyZXR1cm4gMDsKIApAQCAtNzA3LDcgKzcwMiw3IEBACiAJCQlhbGxvY19jb3VudCA9IGJsb2NrX2NvdW50OwogCQkJZWxvYy5sb2dpY2FsQmxvY2tOdW0gKz0gYWxsb2NfY291bnQ7CiAJCQllbGVuIC09IChhbGxvY19jb3VudCA8PCBzYi0+c19ibG9ja3NpemVfYml0cyk7Ci0JCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJmVwb3MsIGVsb2MsCisJCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJmVwb3MsICZlbG9jLAogCQkJCQkoZXR5cGUgPDwgMzApIHwgZWxlbiwgMSk7CiAJCX0gZWxzZQogCQkJdWRmX2RlbGV0ZV9hZXh0KHRhYmxlLCBlcG9zLCBlbG9jLApAQCAtNzE4LDEwICs3MTMsOCBAQAogCiAJYnJlbHNlKGVwb3MuYmgpOwogCi0JaWYgKGFsbG9jX2NvdW50ICYmIHVkZl9hZGRfZnJlZV9zcGFjZShzYmksIHBhcnRpdGlvbiwgLWFsbG9jX2NvdW50KSkgewotCQltYXJrX2J1ZmZlcl9kaXJ0eShzYmktPnNfbHZpZF9iaCk7Ci0JCXNiLT5zX2RpcnQgPSAxOwotCX0KKwlpZiAoYWxsb2NfY291bnQpCisJCXVkZl9hZGRfZnJlZV9zcGFjZShzYiwgcGFydGl0aW9uLCAtYWxsb2NfY291bnQpOwogCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAlyZXR1cm4gYWxsb2NfY291bnQ7CiB9CkBAIC03MzUsNyArNzI4LDcgQEAKIAl1aW50MzJfdCBzcHJlYWQgPSAweEZGRkZGRkZGLCBuc3ByZWFkID0gMHhGRkZGRkZGRjsKIAl1aW50MzJfdCBuZXdibG9jayA9IDAsIGFkc2l6ZTsKIAl1aW50MzJfdCBlbGVuLCBnb2FsX2VsZW4gPSAwOwotCWtlcm5lbF9sYl9hZGRyIGVsb2MsIHVuaW5pdGlhbGl6ZWRfdmFyKGdvYWxfZWxvYyk7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2MsIHVuaW5pdGlhbGl6ZWRfdmFyKGdvYWxfZWxvYyk7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zLCBnb2FsX2Vwb3M7CiAJaW50OF90IGV0eXBlOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm8gPSBVREZfSSh0YWJsZSk7CkBAIC03NDMsOSArNzM2LDkgQEAKIAkqZXJyID0gLUVOT1NQQzsKIAogCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQlhZHNpemUgPSBzaXplb2Yoc2hvcnRfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAllbHNlIGlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCWFkc2l6ZSA9IHNpemVvZihsb25nX2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAllbHNlCiAJCXJldHVybiBuZXdibG9jazsKIApAQCAtODE0LDQ2ICs4MDcsMzcgQEAKIAl9CiAKIAlpZiAoZ29hbF9lbGVuKQotCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJmdvYWxfZXBvcywgZ29hbF9lbG9jLCBnb2FsX2VsZW4sIDEpOworCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJmdvYWxfZXBvcywgJmdvYWxfZWxvYywgZ29hbF9lbGVuLCAxKTsKIAllbHNlCiAJCXVkZl9kZWxldGVfYWV4dCh0YWJsZSwgZ29hbF9lcG9zLCBnb2FsX2Vsb2MsIGdvYWxfZWxlbik7CiAJYnJlbHNlKGdvYWxfZXBvcy5iaCk7CiAKLQlpZiAodWRmX2FkZF9mcmVlX3NwYWNlKHNiaSwgcGFydGl0aW9uLCAtMSkpCi0JCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKKwl1ZGZfYWRkX2ZyZWVfc3BhY2Uoc2IsIHBhcnRpdGlvbiwgLTEpOwogCi0Jc2ItPnNfZGlydCA9IDE7CiAJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCSplcnIgPSAwOwogCXJldHVybiBuZXdibG9jazsKIH0KIAotaW5saW5lIHZvaWQgdWRmX2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCi0JCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICBrZXJuZWxfbGJfYWRkciBibG9jLCB1aW50MzJfdCBvZmZzZXQsCi0JCQkgICAgdWludDMyX3QgY291bnQpCit2b2lkIHVkZl9mcmVlX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqYmxvYywgdWludDMyX3Qgb2Zmc2V0LAorCQkgICAgIHVpbnQzMl90IGNvdW50KQogewotCXVpbnQxNl90IHBhcnRpdGlvbiA9IGJsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtOworCXVpbnQxNl90IHBhcnRpdGlvbiA9IGJsb2MtPnBhcnRpdGlvblJlZmVyZW5jZU51bTsKIAlzdHJ1Y3QgdWRmX3BhcnRfbWFwICptYXAgPSAmVURGX1NCKHNiKS0+c19wYXJ0bWFwc1twYXJ0aXRpb25dOwogCiAJaWYgKG1hcC0+c19wYXJ0aXRpb25fZmxhZ3MgJiBVREZfUEFSVF9GTEFHX1VOQUxMT0NfQklUTUFQKSB7Ci0JCXJldHVybiB1ZGZfYml0bWFwX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwKLQkJCQkJICAgICAgbWFwLT5zX3VzcGFjZS5zX2JpdG1hcCwKLQkJCQkJICAgICAgYmxvYywgb2Zmc2V0LCBjb3VudCk7CisJCXVkZl9iaXRtYXBfZnJlZV9ibG9ja3Moc2IsIGlub2RlLCBtYXAtPnNfdXNwYWNlLnNfYml0bWFwLAorCQkJCSAgICAgICBibG9jLCBvZmZzZXQsIGNvdW50KTsKIAl9IGVsc2UgaWYgKG1hcC0+c19wYXJ0aXRpb25fZmxhZ3MgJiBVREZfUEFSVF9GTEFHX1VOQUxMT0NfVEFCTEUpIHsKLQkJcmV0dXJuIHVkZl90YWJsZV9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsCi0JCQkJCSAgICAgbWFwLT5zX3VzcGFjZS5zX3RhYmxlLAotCQkJCQkgICAgIGJsb2MsIG9mZnNldCwgY291bnQpOworCQl1ZGZfdGFibGVfZnJlZV9ibG9ja3Moc2IsIGlub2RlLCBtYXAtPnNfdXNwYWNlLnNfdGFibGUsCisJCQkJICAgICAgYmxvYywgb2Zmc2V0LCBjb3VudCk7CiAJfSBlbHNlIGlmIChtYXAtPnNfcGFydGl0aW9uX2ZsYWdzICYgVURGX1BBUlRfRkxBR19GUkVFRF9CSVRNQVApIHsKLQkJcmV0dXJuIHVkZl9iaXRtYXBfZnJlZV9ibG9ja3Moc2IsIGlub2RlLAotCQkJCQkgICAgICBtYXAtPnNfZnNwYWNlLnNfYml0bWFwLAotCQkJCQkgICAgICBibG9jLCBvZmZzZXQsIGNvdW50KTsKKwkJdWRmX2JpdG1hcF9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsIG1hcC0+c19mc3BhY2Uuc19iaXRtYXAsCisJCQkJICAgICAgIGJsb2MsIG9mZnNldCwgY291bnQpOwogCX0gZWxzZSBpZiAobWFwLT5zX3BhcnRpdGlvbl9mbGFncyAmIFVERl9QQVJUX0ZMQUdfRlJFRURfVEFCTEUpIHsKLQkJcmV0dXJuIHVkZl90YWJsZV9mcmVlX2Jsb2NrcyhzYiwgaW5vZGUsCi0JCQkJCSAgICAgbWFwLT5zX2ZzcGFjZS5zX3RhYmxlLAotCQkJCQkgICAgIGJsb2MsIG9mZnNldCwgY291bnQpOwotCX0gZWxzZSB7Ci0JCXJldHVybjsKKwkJdWRmX3RhYmxlX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwgbWFwLT5zX2ZzcGFjZS5zX3RhYmxlLAorCQkJCSAgICAgIGJsb2MsIG9mZnNldCwgY291bnQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZnMvdWRmL2Rpci5jIGIvZnMvdWRmL2Rpci5jCmluZGV4IDYyZGMyNzAuLjJlZmQ0ZDUgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9kaXIuYworKysgYi9mcy91ZGYvZGlyLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAl1aW50OF90IGxmaTsKIAlsb2ZmX3Qgc2l6ZSA9IHVkZl9leHQwX29mZnNldChkaXIpICsgZGlyLT5pX3NpemU7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0bXAsICpiaGFbMTZdOwotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJdWludDMyX3QgZWxlbjsKIAlzZWN0b3JfdCBvZmZzZXQ7CiAJaW50IGksIG51bSwgcmV0ID0gMDsKQEAgLTgwLDEzICs4MCwxMyBAQAogCQkJcmV0ID0gLUVOT0VOVDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCBlbG9jLCBvZmZzZXQpOworCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJmVsb2MsIG9mZnNldCk7CiAJCWlmICgoKytvZmZzZXQgPDwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSA8IGVsZW4pIHsKIAkJCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJCQllbHNlIGlmIChpaW5mby0+aV9hbGxvY190eXBlID09CiAJCQkJCUlDQlRBR19GTEFHX0FEX0xPTkcpCi0JCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKGxvbmdfYWQpOworCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJCX0gZWxzZSB7CiAJCQlvZmZzZXQgPSAwOwogCQl9CkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJCWlmIChpICsgb2Zmc2V0ID4gKGVsZW4gPj4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSkKIAkJCQlpID0gKGVsZW4gPj4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSAtIG9mZnNldDsKIAkJCWZvciAobnVtID0gMDsgaSA+IDA7IGktLSkgewotCQkJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCBlbG9jLCBvZmZzZXQgKyBpKTsKKwkJCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJmVsb2MsIG9mZnNldCArIGkpOwogCQkJCXRtcCA9IHVkZl90Z2V0YmxrKGRpci0+aV9zYiwgYmxvY2spOwogCQkJCWlmICh0bXAgJiYgIWJ1ZmZlcl91cHRvZGF0ZSh0bXApICYmICFidWZmZXJfbG9ja2VkKHRtcCkpCiAJCQkJCWJoYVtudW0rK10gPSB0bXA7CkBAIC0xNjEsOSArMTYxLDkgQEAKIAkJCW1lbWNweShmbmFtZSwgIi4uIiwgZmxlbik7CiAJCQlkdF90eXBlID0gRFRfRElSOwogCQl9IGVsc2UgewotCQkJa2VybmVsX2xiX2FkZHIgdGxvYyA9IGxlbGJfdG9fY3B1KGNmaS5pY2IuZXh0TG9jYXRpb24pOworCQkJc3RydWN0IGtlcm5lbF9sYl9hZGRyIHRsb2MgPSBsZWxiX3RvX2NwdShjZmkuaWNiLmV4dExvY2F0aW9uKTsKIAotCQkJaWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCB0bG9jLCAwKTsKKwkJCWlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJnRsb2MsIDApOwogCQkJZmxlbiA9IHVkZl9nZXRfZmlsZW5hbWUoZGlyLT5pX3NiLCBuYW1lcHRyLCBmbmFtZSwgbGZpKTsKIAkJCWR0X3R5cGUgPSBEVF9VTktOT1dOOwogCQl9CmRpZmYgLS1naXQgYS9mcy91ZGYvZGlyZWN0b3J5LmMgYi9mcy91ZGYvZGlyZWN0b3J5LmMKaW5kZXggMjgyMGY4Zi4uMWQyYzU3MCAxMDA2NDQKLS0tIGEvZnMvdWRmL2RpcmVjdG9yeS5jCisrKyBiL2ZzL3VkZi9kaXJlY3RvcnkuYwpAQCAtMjAsNyArMjAsNyBAQAogCiAjaWYgMAogc3RhdGljIHVpbnQ4X3QgKnVkZl9maWxlYWRfcmVhZChzdHJ1Y3QgaW5vZGUgKmRpciwgdWludDhfdCAqdG1wYWQsCi0JCQkJdWludDhfdCBhZF9zaXplLCBrZXJuZWxfbGJfYWRkciBmZV9sb2MsCisJCQkJdWludDhfdCBhZF9zaXplLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZmVfbG9jLAogCQkJCWludCAqcG9zLCBpbnQgKm9mZnNldCwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgsCiAJCQkJaW50ICplcnJvcikKIHsKQEAgLTc1LDcgKzc1LDcgQEAKIAkJCQkJIHN0cnVjdCB1ZGZfZmlsZWlkZW50X2JoICpmaWJoLAogCQkJCQkgc3RydWN0IGZpbGVJZGVudERlc2MgKmNmaSwKIAkJCQkJIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmVwb3MsCi0JCQkJCSBrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgKmVsZW4sCisJCQkJCSBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90ICplbGVuLAogCQkJCQkgc2VjdG9yX3QgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqZmk7CkBAIC0xMTEsNyArMTExLDcgQEAKIAkJICAgIChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKIAkJCXJldHVybiBOVUxMOwogCi0JCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCAqZWxvYywgKm9mZnNldCk7CisJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCBlbG9jLCAqb2Zmc2V0KTsKIAogCQkoKm9mZnNldCkrKzsKIApAQCAtMTMxLDcgKzEzMSw3IEBACiAJCQlpZiAoaSArICpvZmZzZXQgPiAoKmVsZW4gPj4gYmxvY2tzaXplX2JpdHMpKQogCQkJCWkgPSAoKmVsZW4gPj4gYmxvY2tzaXplX2JpdHMpLSpvZmZzZXQ7CiAJCQlmb3IgKG51bSA9IDA7IGkgPiAwOyBpLS0pIHsKLQkJCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgKmVsb2MsCisJCQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGVsb2MsCiAJCQkJCQkJICAqb2Zmc2V0ICsgaSk7CiAJCQkJdG1wID0gdWRmX3RnZXRibGsoZGlyLT5pX3NiLCBibG9jayk7CiAJCQkJaWYgKHRtcCAmJiAhYnVmZmVyX3VwdG9kYXRlKHRtcCkgJiYKQEAgLTE2OSw3ICsxNjksNyBAQAogCQkgICAgKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQogCQkJcmV0dXJuIE5VTEw7CiAKLQkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsICplbG9jLCAqb2Zmc2V0KTsKKwkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGVsb2MsICpvZmZzZXQpOwogCiAJCSgqb2Zmc2V0KSsrOwogCkBAIC0yNDksOSArMjQ5LDkgQEAKIH0KIAogI2lmIDAKLXN0YXRpYyBleHRlbnRfYWQgKnVkZl9nZXRfZmlsZWV4dGVudCh2b2lkICpidWZmZXIsIGludCBidWZzaXplLCBpbnQgKm9mZnNldCkKK3N0YXRpYyBzdHJ1Y3QgZXh0ZW50X2FkICp1ZGZfZ2V0X2ZpbGVleHRlbnQodm9pZCAqYnVmZmVyLCBpbnQgYnVmc2l6ZSwgaW50ICpvZmZzZXQpCiB7Ci0JZXh0ZW50X2FkICpleHQ7CisJc3RydWN0IGV4dGVudF9hZCAqZXh0OwogCXN0cnVjdCBmaWxlRW50cnkgKmZlOwogCXVpbnQ4X3QgKnB0cjsKIApAQCAtMjc0LDU0ICsyNzQsNTQgQEAKIAlpZiAoKCpvZmZzZXQgPiAwKSAmJiAoKm9mZnNldCA8IGxlMzJfdG9fY3B1KGZlLT5sZW5ndGhBbGxvY0Rlc2NzKSkpCiAJCXB0ciArPSAqb2Zmc2V0OwogCi0JZXh0ID0gKGV4dGVudF9hZCAqKXB0cjsKKwlleHQgPSAoc3RydWN0IGV4dGVudF9hZCAqKXB0cjsKIAotCSpvZmZzZXQgPSAqb2Zmc2V0ICsgc2l6ZW9mKGV4dGVudF9hZCk7CisJKm9mZnNldCA9ICpvZmZzZXQgKyBzaXplb2Yoc3RydWN0IGV4dGVudF9hZCk7CiAJcmV0dXJuIGV4dDsKIH0KICNlbmRpZgogCi1zaG9ydF9hZCAqdWRmX2dldF9maWxlc2hvcnRhZCh1aW50OF90ICpwdHIsIGludCBtYXhvZmZzZXQsIHVpbnQzMl90ICpvZmZzZXQsCitzdHJ1Y3Qgc2hvcnRfYWQgKnVkZl9nZXRfZmlsZXNob3J0YWQodWludDhfdCAqcHRyLCBpbnQgbWF4b2Zmc2V0LCB1aW50MzJfdCAqb2Zmc2V0LAogCQkJICAgICAgaW50IGluYykKIHsKLQlzaG9ydF9hZCAqc2E7CisJc3RydWN0IHNob3J0X2FkICpzYTsKIAogCWlmICgoIXB0cikgfHwgKCFvZmZzZXQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidWRmOiB1ZGZfZ2V0X2ZpbGVzaG9ydGFkKCkgaW52YWxpZHBhcm1zXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKCgqb2Zmc2V0ICsgc2l6ZW9mKHNob3J0X2FkKSkgPiBtYXhvZmZzZXQpCisJaWYgKCgqb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCkpID4gbWF4b2Zmc2V0KQogCQlyZXR1cm4gTlVMTDsKIAllbHNlIHsKLQkJc2EgPSAoc2hvcnRfYWQgKilwdHI7CisJCXNhID0gKHN0cnVjdCBzaG9ydF9hZCAqKXB0cjsKIAkJaWYgKHNhLT5leHRMZW5ndGggPT0gMCkKIAkJCXJldHVybiBOVUxMOwogCX0KIAogCWlmIChpbmMpCi0JCSpvZmZzZXQgKz0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJKm9mZnNldCArPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAlyZXR1cm4gc2E7CiB9CiAKLWxvbmdfYWQgKnVkZl9nZXRfZmlsZWxvbmdhZCh1aW50OF90ICpwdHIsIGludCBtYXhvZmZzZXQsIHVpbnQzMl90ICpvZmZzZXQsIGludCBpbmMpCitzdHJ1Y3QgbG9uZ19hZCAqdWRmX2dldF9maWxlbG9uZ2FkKHVpbnQ4X3QgKnB0ciwgaW50IG1heG9mZnNldCwgdWludDMyX3QgKm9mZnNldCwgaW50IGluYykKIHsKLQlsb25nX2FkICpsYTsKKwlzdHJ1Y3QgbG9uZ19hZCAqbGE7CiAKIAlpZiAoKCFwdHIpIHx8ICghb2Zmc2V0KSkgewogCQlwcmludGsoS0VSTl9FUlIgInVkZjogdWRmX2dldF9maWxlbG9uZ2FkKCkgaW52YWxpZHBhcm1zXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKCgqb2Zmc2V0ICsgc2l6ZW9mKGxvbmdfYWQpKSA+IG1heG9mZnNldCkKKwlpZiAoKCpvZmZzZXQgKyBzaXplb2Yoc3RydWN0IGxvbmdfYWQpKSA+IG1heG9mZnNldCkKIAkJcmV0dXJuIE5VTEw7CiAJZWxzZSB7Ci0JCWxhID0gKGxvbmdfYWQgKilwdHI7CisJCWxhID0gKHN0cnVjdCBsb25nX2FkICopcHRyOwogCQlpZiAobGEtPmV4dExlbmd0aCA9PSAwKQogCQkJcmV0dXJuIE5VTEw7CiAJfQogCiAJaWYgKGluYykKLQkJKm9mZnNldCArPSBzaXplb2YobG9uZ19hZCk7CisJCSpvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAlyZXR1cm4gbGE7CiB9CmRpZmYgLS1naXQgYS9mcy91ZGYvZWNtYV8xNjcuaCBiL2ZzL3VkZi9lY21hXzE2Ny5oCmluZGV4IGEwOTc0ZGYuLjQ3OTJiNzcgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9lY21hXzE2Ny5oCisrKyBiL2ZzL3VkZi9lY21hXzE2Ny5oCkBAIC0zOCwxMCArMzgsMTAgQEAKICNkZWZpbmUgX0VDTUFfMTY3X0ggMQogCiAvKiBDaGFyYWN0ZXIgc2V0IHNwZWNpZmljYXRpb24gKEVDTUEgMTY3cjMgMS83LjIuMSkgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBjaGFyc3BlYyB7CiAJdWludDhfdAkJY2hhclNldFR5cGU7CiAJdWludDhfdAkJY2hhclNldEluZm9bNjNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY2hhcnNwZWM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogQ2hhcmFjdGVyIFNldCBUeXBlIChFQ01BIDE2N3IzIDEvNy4yLjEuMSkgKi8KICNkZWZpbmUgQ0hBUlNQRUNfVFlQRV9DUzAJCTB4MDAJLyogKDEvNy4yLjIpICovCkBAIC01Nyw3ICs1Nyw3IEBACiB0eXBlZGVmIHVpbnQ4X3QJCWRzdHJpbmc7CiAKIC8qIFRpbWVzdGFtcCAoRUNNQSAxNjdyMyAxLzcuMykgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCB0aW1lc3RhbXAgewogCV9fbGUxNgkJdHlwZUFuZFRpbWV6b25lOwogCV9fbGUxNgkJeWVhcjsKIAl1aW50OF90CQltb250aDsKQEAgLTY4LDcgKzY4LDcgQEAKIAl1aW50OF90CQljZW50aXNlY29uZHM7CiAJdWludDhfdAkJaHVuZHJlZHNPZk1pY3Jvc2Vjb25kczsKIAl1aW50OF90CQltaWNyb3NlY29uZHM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB0aW1lc3RhbXA7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogVHlwZSBhbmQgVGltZSBab25lIChFQ01BIDE2N3IzIDEvNy4zLjEpICovCiAjZGVmaW5lIFRJTUVTVEFNUF9UWVBFX01BU0sJCTB4RjAwMApAQCAtNzgsMTEgKzc4LDExIEBACiAjZGVmaW5lIFRJTUVTVEFNUF9USU1FWk9ORV9NQVNLCQkweDBGRkYKIAogLyogRW50aXR5IGlkZW50aWZpZXIgKEVDTUEgMTY3cjMgMS83LjQpICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgcmVnaWQgewogCXVpbnQ4X3QJCWZsYWdzOwogCXVpbnQ4X3QJCWlkZW50WzIzXTsKIAl1aW50OF90CQlpZGVudFN1ZmZpeFs4XTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHJlZ2lkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIEZsYWdzIChFQ01BIDE2N3IzIDEvNy40LjEpICovCiAjZGVmaW5lIEVOVElUWUlEX0ZMQUdTX0RJUlRZCQkweDAwCkBAIC0xMjYsMzggKzEyNiwzOCBAQAogCiAvKiBCb290IERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgMi85LjQpICovCiBzdHJ1Y3QgYm9vdERlc2MgewotCXVpbnQ4X3QJCXN0cnVjdFR5cGU7Ci0JdWludDhfdAkJc3RkSWRlbnRbVlNEX1NURF9JRF9MRU5dOwotCXVpbnQ4X3QJCXN0cnVjdFZlcnNpb247Ci0JdWludDhfdAkJcmVzZXJ2ZWQxOwotCXJlZ2lkCQlhcmNoVHlwZTsKLQlyZWdpZAkJYm9vdElkZW50OwotCV9fbGUzMgkJYm9vdEV4dExvY2F0aW9uOwotCV9fbGUzMgkJYm9vdEV4dExlbmd0aDsKLQlfX2xlNjQJCWxvYWRBZGRyZXNzOwotCV9fbGU2NAkJc3RhcnRBZGRyZXNzOwotCXRpbWVzdGFtcAlkZXNjQ3JlYXRpb25EYXRlQW5kVGltZTsKLQlfX2xlMTYJCWZsYWdzOwotCXVpbnQ4X3QJCXJlc2VydmVkMlszMl07Ci0JdWludDhfdAkJYm9vdFVzZVsxOTA2XTsKKwl1aW50OF90CQkJc3RydWN0VHlwZTsKKwl1aW50OF90CQkJc3RkSWRlbnRbVlNEX1NURF9JRF9MRU5dOworCXVpbnQ4X3QJCQlzdHJ1Y3RWZXJzaW9uOworCXVpbnQ4X3QJCQlyZXNlcnZlZDE7CisJc3RydWN0IHJlZ2lkCQlhcmNoVHlwZTsKKwlzdHJ1Y3QgcmVnaWQJCWJvb3RJZGVudDsKKwlfX2xlMzIJCQlib290RXh0TG9jYXRpb247CisJX19sZTMyCQkJYm9vdEV4dExlbmd0aDsKKwlfX2xlNjQJCQlsb2FkQWRkcmVzczsKKwlfX2xlNjQJCQlzdGFydEFkZHJlc3M7CisJc3RydWN0IHRpbWVzdGFtcAlkZXNjQ3JlYXRpb25EYXRlQW5kVGltZTsKKwlfX2xlMTYJCQlmbGFnczsKKwl1aW50OF90CQkJcmVzZXJ2ZWQyWzMyXTsKKwl1aW50OF90CQkJYm9vdFVzZVsxOTA2XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBGbGFncyAoRUNNQSAxNjdyMyAyLzkuNC4xMikgKi8KICNkZWZpbmUgQk9PVF9GTEFHU19FUkFTRQkJMHgwMQogCiAvKiBFeHRlbnQgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyAzLzcuMSkgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBleHRlbnRfYWQgewogCV9fbGUzMgkJZXh0TGVuZ3RoOwogCV9fbGUzMgkJZXh0TG9jYXRpb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBleHRlbnRfYWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IGtlcm5lbF9leHRlbnRfYWQgewogCXVpbnQzMl90CWV4dExlbmd0aDsKIAl1aW50MzJfdAlleHRMb2NhdGlvbjsKLX0ga2VybmVsX2V4dGVudF9hZDsKK307CiAKIC8qIERlc2NyaXB0b3IgVGFnIChFQ01BIDE2N3IzIDMvNy4yKSAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IHRhZyB7CiAJX19sZTE2CQl0YWdJZGVudDsKIAlfX2xlMTYJCWRlc2NWZXJzaW9uOwogCXVpbnQ4X3QJCXRhZ0NoZWNrc3VtOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJX19sZTE2CQlkZXNjQ1JDOwogCV9fbGUxNgkJZGVzY0NSQ0xlbmd0aDsKIAlfX2xlMzIJCXRhZ0xvY2F0aW9uOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdGFnOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIFRhZyBJZGVudGlmaWVyIChFQ01BIDE2N3IzIDMvNy4yLjEpICovCiAjZGVmaW5lIFRBR19JREVOVF9QVkQJCQkweDAwMDEKQEAgLTE5MCwyOCArMTkwLDI4IEBACiAKIC8qIFByaW1hcnkgVm9sdW1lIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgMy8xMC4xKSAqLwogc3RydWN0IHByaW1hcnlWb2xEZXNjIHsKLQl0YWcJCWRlc2NUYWc7Ci0JX19sZTMyCQl2b2xEZXNjU2VxTnVtOwotCV9fbGUzMgkJcHJpbWFyeVZvbERlc2NOdW07Ci0JZHN0cmluZwkJdm9sSWRlbnRbMzJdOwotCV9fbGUxNgkJdm9sU2VxTnVtOwotCV9fbGUxNgkJbWF4Vm9sU2VxTnVtOwotCV9fbGUxNgkJaW50ZXJjaGFuZ2VMdmw7Ci0JX19sZTE2CQltYXhJbnRlcmNoYW5nZUx2bDsKLQlfX2xlMzIJCWNoYXJTZXRMaXN0OwotCV9fbGUzMgkJbWF4Q2hhclNldExpc3Q7Ci0JZHN0cmluZwkJdm9sU2V0SWRlbnRbMTI4XTsKLQljaGFyc3BlYwlkZXNjQ2hhclNldDsKLQljaGFyc3BlYwlleHBsYW5hdG9yeUNoYXJTZXQ7Ci0JZXh0ZW50X2FkCXZvbEFic3RyYWN0OwotCWV4dGVudF9hZAl2b2xDb3B5cmlnaHQ7Ci0JcmVnaWQJCWFwcElkZW50OwotCXRpbWVzdGFtcAlyZWNvcmRpbmdEYXRlQW5kVGltZTsKLQlyZWdpZAkJaW1wSWRlbnQ7Ci0JdWludDhfdAkJaW1wVXNlWzY0XTsKLQlfX2xlMzIJCXByZWRlY2Vzc29yVm9sRGVzY1NlcUxvY2F0aW9uOwotCV9fbGUxNgkJZmxhZ3M7Ci0JdWludDhfdAkJcmVzZXJ2ZWRbMjJdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJX19sZTMyCQkJdm9sRGVzY1NlcU51bTsKKwlfX2xlMzIJCQlwcmltYXJ5Vm9sRGVzY051bTsKKwlkc3RyaW5nCQkJdm9sSWRlbnRbMzJdOworCV9fbGUxNgkJCXZvbFNlcU51bTsKKwlfX2xlMTYJCQltYXhWb2xTZXFOdW07CisJX19sZTE2CQkJaW50ZXJjaGFuZ2VMdmw7CisJX19sZTE2CQkJbWF4SW50ZXJjaGFuZ2VMdmw7CisJX19sZTMyCQkJY2hhclNldExpc3Q7CisJX19sZTMyCQkJbWF4Q2hhclNldExpc3Q7CisJZHN0cmluZwkJCXZvbFNldElkZW50WzEyOF07CisJc3RydWN0IGNoYXJzcGVjCQlkZXNjQ2hhclNldDsKKwlzdHJ1Y3QgY2hhcnNwZWMJCWV4cGxhbmF0b3J5Q2hhclNldDsKKwlzdHJ1Y3QgZXh0ZW50X2FkCXZvbEFic3RyYWN0OworCXN0cnVjdCBleHRlbnRfYWQJdm9sQ29weXJpZ2h0OworCXN0cnVjdCByZWdpZAkJYXBwSWRlbnQ7CisJc3RydWN0IHRpbWVzdGFtcAlyZWNvcmRpbmdEYXRlQW5kVGltZTsKKwlzdHJ1Y3QgcmVnaWQJCWltcElkZW50OworCXVpbnQ4X3QJCQlpbXBVc2VbNjRdOworCV9fbGUzMgkJCXByZWRlY2Vzc29yVm9sRGVzY1NlcUxvY2F0aW9uOworCV9fbGUxNgkJCWZsYWdzOworCXVpbnQ4X3QJCQlyZXNlcnZlZFsyMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogRmxhZ3MgKEVDTUEgMTY3cjMgMy8xMC4xLjIxKSAqLwpAQCAtMjE5LDQwICsyMTksNDAgQEAKIAogLyogQW5jaG9yIFZvbHVtZSBEZXNjcmlwdG9yIFBvaW50ZXIgKEVDTUEgMTY3cjMgMy8xMC4yKSAqLwogc3RydWN0IGFuY2hvclZvbERlc2NQdHIgewotCXRhZwkJZGVzY1RhZzsKLQlleHRlbnRfYWQJbWFpblZvbERlc2NTZXFFeHQ7Ci0JZXh0ZW50X2FkCXJlc2VydmVWb2xEZXNjU2VxRXh0OwotCXVpbnQ4X3QJIAlyZXNlcnZlZFs0ODBdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJc3RydWN0IGV4dGVudF9hZAltYWluVm9sRGVzY1NlcUV4dDsKKwlzdHJ1Y3QgZXh0ZW50X2FkCXJlc2VydmVWb2xEZXNjU2VxRXh0OworCXVpbnQ4X3QJIAkJcmVzZXJ2ZWRbNDgwXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBWb2x1bWUgRGVzY3JpcHRvciBQb2ludGVyIChFQ01BIDE2N3IzIDMvMTAuMykgKi8KIHN0cnVjdCB2b2xEZXNjUHRyIHsKLQl0YWcJCWRlc2NUYWc7Ci0JX19sZTMyCQl2b2xEZXNjU2VxTnVtOwotCWV4dGVudF9hZAluZXh0Vm9sRGVzY1NlcUV4dDsKLQl1aW50OF90CQlyZXNlcnZlZFs0ODRdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJX19sZTMyCQkJdm9sRGVzY1NlcU51bTsKKwlzdHJ1Y3QgZXh0ZW50X2FkCW5leHRWb2xEZXNjU2VxRXh0OworCXVpbnQ4X3QJCQlyZXNlcnZlZFs0ODRdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIEltcGxlbWVudGF0aW9uIFVzZSBWb2x1bWUgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyAzLzEwLjQpICovCiBzdHJ1Y3QgaW1wVXNlVm9sRGVzYyB7Ci0JdGFnCQlkZXNjVGFnOworCXN0cnVjdCB0YWcJZGVzY1RhZzsKIAlfX2xlMzIJCXZvbERlc2NTZXFOdW07Ci0JcmVnaWQJCWltcElkZW50OworCXN0cnVjdCByZWdpZAlpbXBJZGVudDsKIAl1aW50OF90CQlpbXBVc2VbNDYwXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBQYXJ0aXRpb24gRGVzY3JpcHRvciAoRUNNQSAxNjdyMyAzLzEwLjUpICovCiBzdHJ1Y3QgcGFydGl0aW9uRGVzYyB7Ci0JdGFnIGRlc2NUYWc7CisJc3RydWN0IHRhZyBkZXNjVGFnOwogCV9fbGUzMiB2b2xEZXNjU2VxTnVtOwogCV9fbGUxNiBwYXJ0aXRpb25GbGFnczsKIAlfX2xlMTYgcGFydGl0aW9uTnVtYmVyOwotCXJlZ2lkIHBhcnRpdGlvbkNvbnRlbnRzOworCXN0cnVjdCByZWdpZCBwYXJ0aXRpb25Db250ZW50czsKIAl1aW50OF90IHBhcnRpdGlvbkNvbnRlbnRzVXNlWzEyOF07CiAJX19sZTMyIGFjY2Vzc1R5cGU7CiAJX19sZTMyIHBhcnRpdGlvblN0YXJ0aW5nTG9jYXRpb247CiAJX19sZTMyIHBhcnRpdGlvbkxlbmd0aDsKLQlyZWdpZCBpbXBJZGVudDsKKwlzdHJ1Y3QgcmVnaWQgaW1wSWRlbnQ7CiAJdWludDhfdCBpbXBVc2VbMTI4XTsKIAl1aW50OF90IHJlc2VydmVkWzE1Nl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKQEAgLTI3OCwxOSArMjc4LDE5IEBACiAKIC8qIExvZ2ljYWwgVm9sdW1lIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgMy8xMC42KSAqLwogc3RydWN0IGxvZ2ljYWxWb2xEZXNjIHsKLQl0YWcJCWRlc2NUYWc7Ci0JX19sZTMyCQl2b2xEZXNjU2VxTnVtOwotCWNoYXJzcGVjCWRlc2NDaGFyU2V0OwotCWRzdHJpbmcJCWxvZ2ljYWxWb2xJZGVudFsxMjhdOwotCV9fbGUzMgkJbG9naWNhbEJsb2NrU2l6ZTsKLQlyZWdpZAkJZG9tYWluSWRlbnQ7Ci0JdWludDhfdAkJbG9naWNhbFZvbENvbnRlbnRzVXNlWzE2XTsKLQlfX2xlMzIJCW1hcFRhYmxlTGVuZ3RoOwotCV9fbGUzMgkJbnVtUGFydGl0aW9uTWFwczsKLQlyZWdpZAkJaW1wSWRlbnQ7Ci0JdWludDhfdAkJaW1wVXNlWzEyOF07Ci0JZXh0ZW50X2FkCWludGVncml0eVNlcUV4dDsKLQl1aW50OF90CQlwYXJ0aXRpb25NYXBzWzBdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJX19sZTMyCQkJdm9sRGVzY1NlcU51bTsKKwlzdHJ1Y3QgY2hhcnNwZWMJCWRlc2NDaGFyU2V0OworCWRzdHJpbmcJCQlsb2dpY2FsVm9sSWRlbnRbMTI4XTsKKwlfX2xlMzIJCQlsb2dpY2FsQmxvY2tTaXplOworCXN0cnVjdCByZWdpZAkJZG9tYWluSWRlbnQ7CisJdWludDhfdAkJCWxvZ2ljYWxWb2xDb250ZW50c1VzZVsxNl07CisJX19sZTMyCQkJbWFwVGFibGVMZW5ndGg7CisJX19sZTMyCQkJbnVtUGFydGl0aW9uTWFwczsKKwlzdHJ1Y3QgcmVnaWQJCWltcElkZW50OworCXVpbnQ4X3QJCQlpbXBVc2VbMTI4XTsKKwlzdHJ1Y3QgZXh0ZW50X2FkCWludGVncml0eVNlcUV4dDsKKwl1aW50OF90CQkJcGFydGl0aW9uTWFwc1swXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBHZW5lcmljIFBhcnRpdGlvbiBNYXAgKEVDTUEgMTY3cjMgMy8xMC43LjEpICovCkBAIC0zMjIsMzAgKzMyMiwzMCBAQAogCiAvKiBVbmFsbG9jYXRlZCBTcGFjZSBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDMvMTAuOCkgKi8KIHN0cnVjdCB1bmFsbG9jU3BhY2VEZXNjIHsKLQl0YWcJCWRlc2NUYWc7Ci0JX19sZTMyCQl2b2xEZXNjU2VxTnVtOwotCV9fbGUzMgkJbnVtQWxsb2NEZXNjczsKLQlleHRlbnRfYWQJYWxsb2NEZXNjc1swXTsKKwlzdHJ1Y3QgdGFnCQlkZXNjVGFnOworCV9fbGUzMgkJCXZvbERlc2NTZXFOdW07CisJX19sZTMyCQkJbnVtQWxsb2NEZXNjczsKKwlzdHJ1Y3QgZXh0ZW50X2FkCWFsbG9jRGVzY3NbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogVGVybWluYXRpbmcgRGVzY3JpcHRvciAoRUNNQSAxNjdyMyAzLzEwLjkpICovCiBzdHJ1Y3QgdGVybWluYXRpbmdEZXNjIHsKLQl0YWcJCWRlc2NUYWc7CisJc3RydWN0IHRhZwlkZXNjVGFnOwogCXVpbnQ4X3QJCXJlc2VydmVkWzQ5Nl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogTG9naWNhbCBWb2x1bWUgSW50ZWdyaXR5IERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgMy8xMC4xMCkgKi8KIHN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzYyB7Ci0JdGFnCQlkZXNjVGFnOwotCXRpbWVzdGFtcAlyZWNvcmRpbmdEYXRlQW5kVGltZTsKLQlfX2xlMzIJCWludGVncml0eVR5cGU7Ci0JZXh0ZW50X2FkCW5leHRJbnRlZ3JpdHlFeHQ7Ci0JdWludDhfdAkJbG9naWNhbFZvbENvbnRlbnRzVXNlWzMyXTsKLQlfX2xlMzIJCW51bU9mUGFydGl0aW9uczsKLQlfX2xlMzIJCWxlbmd0aE9mSW1wVXNlOwotCV9fbGUzMgkJZnJlZVNwYWNlVGFibGVbMF07Ci0JX19sZTMyCQlzaXplVGFibGVbMF07Ci0JdWludDhfdAkJaW1wVXNlWzBdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJc3RydWN0IHRpbWVzdGFtcAlyZWNvcmRpbmdEYXRlQW5kVGltZTsKKwlfX2xlMzIJCQlpbnRlZ3JpdHlUeXBlOworCXN0cnVjdCBleHRlbnRfYWQJbmV4dEludGVncml0eUV4dDsKKwl1aW50OF90CQkJbG9naWNhbFZvbENvbnRlbnRzVXNlWzMyXTsKKwlfX2xlMzIJCQludW1PZlBhcnRpdGlvbnM7CisJX19sZTMyCQkJbGVuZ3RoT2ZJbXBVc2U7CisJX19sZTMyCQkJZnJlZVNwYWNlVGFibGVbMF07CisJX19sZTMyCQkJc2l6ZVRhYmxlWzBdOworCXVpbnQ4X3QJCQlpbXBVc2VbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogSW50ZWdyaXR5IFR5cGUgKEVDTUEgMTY3cjMgMy8xMC4xMC4zKSAqLwpAQCAtMzUzLDUwICszNTMsNTAgQEAKICNkZWZpbmUgTFZJRF9JTlRFR1JJVFlfVFlQRV9DTE9TRQkweDAwMDAwMDAxCiAKIC8qIFJlY29yZGVkIEFkZHJlc3MgKEVDTUEgMTY3cjMgNC83LjEpICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgbGJfYWRkciB7CiAJX19sZTMyCQlsb2dpY2FsQmxvY2tOdW07CiAJX19sZTE2CSAJcGFydGl0aW9uUmVmZXJlbmNlTnVtOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbGJfYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiAuLi4gYW5kIGl0cyBpbi1jb3JlIGFuYWxvZyAqLwotdHlwZWRlZiBzdHJ1Y3Qgeworc3RydWN0IGtlcm5lbF9sYl9hZGRyIHsKIAl1aW50MzJfdAkJbG9naWNhbEJsb2NrTnVtOwogCXVpbnQxNl90CSAJcGFydGl0aW9uUmVmZXJlbmNlTnVtOwotfSBrZXJuZWxfbGJfYWRkcjsKK307CiAKIC8qIFNob3J0IEFsbG9jYXRpb24gRGVzY3JpcHRvciAoRUNNQSAxNjdyMyA0LzE0LjE0LjEpICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3Qgc2hvcnRfYWQgewogICAgICAgICBfX2xlMzIJCWV4dExlbmd0aDsKICAgICAgICAgX19sZTMyCQlleHRQb3NpdGlvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHNob3J0X2FkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qIExvbmcgQWxsb2NhdGlvbiBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDQvMTQuMTQuMikgKi8KLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBsb25nX2FkIHsKIAlfX2xlMzIJCWV4dExlbmd0aDsKLQlsYl9hZGRyCQlleHRMb2NhdGlvbjsKKwlzdHJ1Y3QgbGJfYWRkcglleHRMb2NhdGlvbjsKIAl1aW50OF90CQlpbXBVc2VbNl07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBsb25nX2FkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdAlleHRMZW5ndGg7Ci0Ja2VybmVsX2xiX2FkZHIJZXh0TG9jYXRpb247Ci0JdWludDhfdAkJaW1wVXNlWzZdOwotfSBrZXJuZWxfbG9uZ19hZDsKK3N0cnVjdCBrZXJuZWxfbG9uZ19hZCB7CisJdWludDMyX3QJCWV4dExlbmd0aDsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIJZXh0TG9jYXRpb247CisJdWludDhfdAkJCWltcFVzZVs2XTsKK307CiAKIC8qIEV4dGVuZGVkIEFsbG9jYXRpb24gRGVzY3JpcHRvciAoRUNNQSAxNjdyMyA0LzE0LjE0LjMpICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgZXh0X2FkIHsKIAlfX2xlMzIJCWV4dExlbmd0aDsKIAlfX2xlMzIJCXJlY29yZGVkTGVuZ3RoOwogCV9fbGUzMgkJaW5mb3JtYXRpb25MZW5ndGg7Ci0JbGJfYWRkcgkJZXh0TG9jYXRpb247Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBleHRfYWQ7CisJc3RydWN0IGxiX2FkZHIJZXh0TG9jYXRpb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewotCXVpbnQzMl90CWV4dExlbmd0aDsKLQl1aW50MzJfdAlyZWNvcmRlZExlbmd0aDsKLQl1aW50MzJfdAlpbmZvcm1hdGlvbkxlbmd0aDsKLQlrZXJuZWxfbGJfYWRkcglleHRMb2NhdGlvbjsKLX0ga2VybmVsX2V4dF9hZDsKK3N0cnVjdCBrZXJuZWxfZXh0X2FkIHsKKwl1aW50MzJfdAkJZXh0TGVuZ3RoOworCXVpbnQzMl90CQlyZWNvcmRlZExlbmd0aDsKKwl1aW50MzJfdAkJaW5mb3JtYXRpb25MZW5ndGg7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyCWV4dExvY2F0aW9uOworfTsKIAogLyogRGVzY3JpcHRvciBUYWcgKEVDTUEgMTY3cjMgNC83LjIgLSBTZWUgMy83LjIpICovCiAKQEAgLTQxNSw0NCArNDE1LDQ0IEBACiAKIC8qIEZpbGUgU2V0IERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC4xKSAqLwogc3RydWN0IGZpbGVTZXREZXNjIHsKLQl0YWcJCWRlc2NUYWc7Ci0JdGltZXN0YW1wCXJlY29yZGluZ0RhdGVBbmRUaW1lOwotCV9fbGUxNgkJaW50ZXJjaGFuZ2VMdmw7Ci0JX19sZTE2CQltYXhJbnRlcmNoYW5nZUx2bDsKLQlfX2xlMzIJCWNoYXJTZXRMaXN0OwotCV9fbGUzMgkJbWF4Q2hhclNldExpc3Q7Ci0JX19sZTMyCQlmaWxlU2V0TnVtOwotCV9fbGUzMgkJZmlsZVNldERlc2NOdW07Ci0JY2hhcnNwZWMJbG9naWNhbFZvbElkZW50Q2hhclNldDsKLQlkc3RyaW5nCQlsb2dpY2FsVm9sSWRlbnRbMTI4XTsKLQljaGFyc3BlYwlmaWxlU2V0Q2hhclNldDsKLQlkc3RyaW5nCQlmaWxlU2V0SWRlbnRbMzJdOwotCWRzdHJpbmcJCWNvcHlyaWdodEZpbGVJZGVudFszMl07Ci0JZHN0cmluZwkJYWJzdHJhY3RGaWxlSWRlbnRbMzJdOwotCWxvbmdfYWQJCXJvb3REaXJlY3RvcnlJQ0I7Ci0JcmVnaWQJCWRvbWFpbklkZW50OwotCWxvbmdfYWQJCW5leHRFeHQ7Ci0JbG9uZ19hZAkJc3RyZWFtRGlyZWN0b3J5SUNCOwotCXVpbnQ4X3QJCXJlc2VydmVkWzMyXTsKKwlzdHJ1Y3QgdGFnCQlkZXNjVGFnOworCXN0cnVjdCB0aW1lc3RhbXAJcmVjb3JkaW5nRGF0ZUFuZFRpbWU7CisJX19sZTE2CQkJaW50ZXJjaGFuZ2VMdmw7CisJX19sZTE2CQkJbWF4SW50ZXJjaGFuZ2VMdmw7CisJX19sZTMyCQkJY2hhclNldExpc3Q7CisJX19sZTMyCQkJbWF4Q2hhclNldExpc3Q7CisJX19sZTMyCQkJZmlsZVNldE51bTsKKwlfX2xlMzIJCQlmaWxlU2V0RGVzY051bTsKKwlzdHJ1Y3QgY2hhcnNwZWMJCWxvZ2ljYWxWb2xJZGVudENoYXJTZXQ7CisJZHN0cmluZwkJCWxvZ2ljYWxWb2xJZGVudFsxMjhdOworCXN0cnVjdCBjaGFyc3BlYwkJZmlsZVNldENoYXJTZXQ7CisJZHN0cmluZwkJCWZpbGVTZXRJZGVudFszMl07CisJZHN0cmluZwkJCWNvcHlyaWdodEZpbGVJZGVudFszMl07CisJZHN0cmluZwkJCWFic3RyYWN0RmlsZUlkZW50WzMyXTsKKwlzdHJ1Y3QgbG9uZ19hZAkJcm9vdERpcmVjdG9yeUlDQjsKKwlzdHJ1Y3QgcmVnaWQJCWRvbWFpbklkZW50OworCXN0cnVjdCBsb25nX2FkCQluZXh0RXh0OworCXN0cnVjdCBsb25nX2FkCQlzdHJlYW1EaXJlY3RvcnlJQ0I7CisJdWludDhfdAkJCXJlc2VydmVkWzMyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBQYXJ0aXRpb24gSGVhZGVyIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC4zKSAqLwogc3RydWN0IHBhcnRpdGlvbkhlYWRlckRlc2MgewotCXNob3J0X2FkCXVuYWxsb2NTcGFjZVRhYmxlOwotCXNob3J0X2FkCXVuYWxsb2NTcGFjZUJpdG1hcDsKLQlzaG9ydF9hZAlwYXJ0aXRpb25JbnRlZ3JpdHlUYWJsZTsKLQlzaG9ydF9hZAlmcmVlZFNwYWNlVGFibGU7Ci0Jc2hvcnRfYWQJZnJlZWRTcGFjZUJpdG1hcDsKKwlzdHJ1Y3Qgc2hvcnRfYWQJdW5hbGxvY1NwYWNlVGFibGU7CisJc3RydWN0IHNob3J0X2FkCXVuYWxsb2NTcGFjZUJpdG1hcDsKKwlzdHJ1Y3Qgc2hvcnRfYWQJcGFydGl0aW9uSW50ZWdyaXR5VGFibGU7CisJc3RydWN0IHNob3J0X2FkCWZyZWVkU3BhY2VUYWJsZTsKKwlzdHJ1Y3Qgc2hvcnRfYWQJZnJlZWRTcGFjZUJpdG1hcDsKIAl1aW50OF90CQlyZXNlcnZlZFs4OF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogRmlsZSBJZGVudGlmaWVyIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC40KSAqLwogc3RydWN0IGZpbGVJZGVudERlc2MgewotCXRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgdGFnCWRlc2NUYWc7CiAJX19sZTE2CQlmaWxlVmVyc2lvbk51bTsKIAl1aW50OF90CQlmaWxlQ2hhcmFjdGVyaXN0aWNzOwogCXVpbnQ4X3QJCWxlbmd0aEZpbGVJZGVudDsKLQlsb25nX2FkCQlpY2I7CisJc3RydWN0IGxvbmdfYWQJaWNiOwogCV9fbGUxNgkJbGVuZ3RoT2ZJbXBVc2U7CiAJdWludDhfdAkJaW1wVXNlWzBdOwogCXVpbnQ4X3QJCWZpbGVJZGVudFswXTsKQEAgLTQ2OCwyMiArNDY4LDIyIEBACiAKIC8qIEFsbG9jYXRpb24gRXh0IERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC41KSAqLwogc3RydWN0IGFsbG9jRXh0RGVzYyB7Ci0JdGFnCQlkZXNjVGFnOworCXN0cnVjdCB0YWcJZGVzY1RhZzsKIAlfX2xlMzIJCXByZXZpb3VzQWxsb2NFeHRMb2NhdGlvbjsKIAlfX2xlMzIJCWxlbmd0aEFsbG9jRGVzY3M7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogSUNCIFRhZyAoRUNNQSAxNjdyMyA0LzE0LjYpICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgaWNidGFnIHsKIAlfX2xlMzIJCXByaW9yUmVjb3JkZWROdW1EaXJlY3RFbnRyaWVzOwogCV9fbGUxNgkJc3RyYXRlZ3lUeXBlOwogCV9fbGUxNgkJc3RyYXRlZ3lQYXJhbWV0ZXI7CiAJX19sZTE2CQludW1FbnRyaWVzOwogCXVpbnQ4X3QJCXJlc2VydmVkOwogCXVpbnQ4X3QJCWZpbGVUeXBlOwotCWxiX2FkZHIJCXBhcmVudElDQkxvY2F0aW9uOworCXN0cnVjdCBsYl9hZGRyCXBhcmVudElDQkxvY2F0aW9uOwogCV9fbGUxNgkJZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpY2J0YWc7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogU3RyYXRlZ3kgVHlwZSAoRUNNQSAxNjdyMyA0LzE0LjYuMikgKi8KICNkZWZpbmUgSUNCVEFHX1NUUkFURUdZX1RZUEVfVU5ERUYJMHgwMDAwCkBAIC01MjgsNDEgKzUyOCw0MSBAQAogCiAvKiBJbmRpcmVjdCBFbnRyeSAoRUNNQSAxNjdyMyA0LzE0LjcpICovCiBzdHJ1Y3QgaW5kaXJlY3RFbnRyeSB7Ci0JdGFnCQlkZXNjVGFnOwotCWljYnRhZwkJaWNiVGFnOwotCWxvbmdfYWQJCWluZGlyZWN0SUNCOworCXN0cnVjdCB0YWcJZGVzY1RhZzsKKwlzdHJ1Y3QgaWNidGFnCWljYlRhZzsKKwlzdHJ1Y3QgbG9uZ19hZAlpbmRpcmVjdElDQjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBUZXJtaW5hbCBFbnRyeSAoRUNNQSAxNjdyMyA0LzE0LjgpICovCiBzdHJ1Y3QgdGVybWluYWxFbnRyeSB7Ci0JdGFnCQlkZXNjVGFnOwotCWljYnRhZwkJaWNiVGFnOworCXN0cnVjdCB0YWcJZGVzY1RhZzsKKwlzdHJ1Y3QgaWNidGFnCWljYlRhZzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBGaWxlIEVudHJ5IChFQ01BIDE2N3IzIDQvMTQuOSkgKi8KIHN0cnVjdCBmaWxlRW50cnkgewotCXRhZwkJZGVzY1RhZzsKLQlpY2J0YWcJCWljYlRhZzsKLQlfX2xlMzIJCXVpZDsKLQlfX2xlMzIJCWdpZDsKLQlfX2xlMzIJCXBlcm1pc3Npb25zOwotCV9fbGUxNgkJZmlsZUxpbmtDb3VudDsKLQl1aW50OF90CQlyZWNvcmRGb3JtYXQ7Ci0JdWludDhfdAkJcmVjb3JkRGlzcGxheUF0dHI7Ci0JX19sZTMyCQlyZWNvcmRMZW5ndGg7Ci0JX19sZTY0CQlpbmZvcm1hdGlvbkxlbmd0aDsKLQlfX2xlNjQJCWxvZ2ljYWxCbG9ja3NSZWNvcmRlZDsKLQl0aW1lc3RhbXAJYWNjZXNzVGltZTsKLQl0aW1lc3RhbXAJbW9kaWZpY2F0aW9uVGltZTsKLQl0aW1lc3RhbXAJYXR0clRpbWU7Ci0JX19sZTMyCQljaGVja3BvaW50OwotCWxvbmdfYWQJCWV4dGVuZGVkQXR0cklDQjsKLQlyZWdpZAkJaW1wSWRlbnQ7Ci0JX19sZTY0CQl1bmlxdWVJRDsKLQlfX2xlMzIJCWxlbmd0aEV4dGVuZGVkQXR0cjsKLQlfX2xlMzIJCWxlbmd0aEFsbG9jRGVzY3M7Ci0JdWludDhfdAkJZXh0ZW5kZWRBdHRyWzBdOwotCXVpbnQ4X3QJCWFsbG9jRGVzY3NbMF07CisJc3RydWN0IHRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgaWNidGFnCQlpY2JUYWc7CisJX19sZTMyCQkJdWlkOworCV9fbGUzMgkJCWdpZDsKKwlfX2xlMzIJCQlwZXJtaXNzaW9uczsKKwlfX2xlMTYJCQlmaWxlTGlua0NvdW50OworCXVpbnQ4X3QJCQlyZWNvcmRGb3JtYXQ7CisJdWludDhfdAkJCXJlY29yZERpc3BsYXlBdHRyOworCV9fbGUzMgkJCXJlY29yZExlbmd0aDsKKwlfX2xlNjQJCQlpbmZvcm1hdGlvbkxlbmd0aDsKKwlfX2xlNjQJCQlsb2dpY2FsQmxvY2tzUmVjb3JkZWQ7CisJc3RydWN0IHRpbWVzdGFtcAlhY2Nlc3NUaW1lOworCXN0cnVjdCB0aW1lc3RhbXAJbW9kaWZpY2F0aW9uVGltZTsKKwlzdHJ1Y3QgdGltZXN0YW1wCWF0dHJUaW1lOworCV9fbGUzMgkJCWNoZWNrcG9pbnQ7CisJc3RydWN0IGxvbmdfYWQJCWV4dGVuZGVkQXR0cklDQjsKKwlzdHJ1Y3QgcmVnaWQJCWltcElkZW50OworCV9fbGU2NAkJCXVuaXF1ZUlEOworCV9fbGUzMgkJCWxlbmd0aEV4dGVuZGVkQXR0cjsKKwlfX2xlMzIJCQlsZW5ndGhBbGxvY0Rlc2NzOworCXVpbnQ4X3QJCQlleHRlbmRlZEF0dHJbMF07CisJdWludDhfdAkJCWFsbG9jRGVzY3NbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogUGVybWlzc2lvbnMgKEVDTUEgMTY3cjMgNC8xNC45LjUpICovCkBAIC02MDQsNyArNjA0LDcgQEAKIAogLyogRXh0ZW5kZWQgQXR0cmlidXRlIEhlYWRlciBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDQvMTQuMTAuMSkgKi8KIHN0cnVjdCBleHRlbmRlZEF0dHJIZWFkZXJEZXNjIHsKLQl0YWcJCWRlc2NUYWc7CisJc3RydWN0IHRhZwlkZXNjVGFnOwogCV9fbGUzMgkJaW1wQXR0ckxvY2F0aW9uOwogCV9fbGUzMgkJYXBwQXR0ckxvY2F0aW9uOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC02ODcsNyArNjg3LDcgQEAKIAl1aW50OF90CQlyZXNlcnZlZFszXTsKIAlfX2xlMzIJCWF0dHJMZW5ndGg7CiAJX19sZTMyCQlpbXBVc2VMZW5ndGg7Ci0JcmVnaWQJCWltcElkZW50OworCXN0cnVjdCByZWdpZAlpbXBJZGVudDsKIAl1aW50OF90CQlpbXBVc2VbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtNjk4LDcgKzY5OCw3IEBACiAJdWludDhfdAkJcmVzZXJ2ZWRbM107CiAJX19sZTMyCQlhdHRyTGVuZ3RoOwogCV9fbGUzMgkJYXBwVXNlTGVuZ3RoOwotCXJlZ2lkCQlhcHBJZGVudDsKKwlzdHJ1Y3QgcmVnaWQJYXBwSWRlbnQ7CiAJdWludDhfdAkJYXBwVXNlWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTcxMiwxNSArNzEyLDE1IEBACiAKIC8qIFVuYWxsb2NhdGVkIFNwYWNlIEVudHJ5IChFQ01BIDE2N3IzIDQvMTQuMTEpICovCiBzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkgewotCXRhZwkJZGVzY1RhZzsKLQlpY2J0YWcJCWljYlRhZzsKKwlzdHJ1Y3QgdGFnCWRlc2NUYWc7CisJc3RydWN0IGljYnRhZwlpY2JUYWc7CiAJX19sZTMyCQlsZW5ndGhBbGxvY0Rlc2NzOwogCXVpbnQ4X3QJCWFsbG9jRGVzY3NbMF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogU3BhY2UgQml0bWFwIERlc2NyaXB0b3IgKEVDTUEgMTY3cjMgNC8xNC4xMikgKi8KIHN0cnVjdCBzcGFjZUJpdG1hcERlc2MgewotCXRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgdGFnCWRlc2NUYWc7CiAJX19sZTMyCQludW1PZkJpdHM7CiAJX19sZTMyCQludW1PZkJ5dGVzOwogCXVpbnQ4X3QJCWJpdG1hcFswXTsKQEAgLTcyOCwxMyArNzI4LDEzIEBACiAKIC8qIFBhcnRpdGlvbiBJbnRlZ3JpdHkgRW50cnkgKEVDTUEgMTY3cjMgNC8xNC4xMykgKi8KIHN0cnVjdCBwYXJ0aXRpb25JbnRlZ3JpdHlFbnRyeSB7Ci0JdGFnCQlkZXNjVGFnOwotCWljYnRhZwkJaWNiVGFnOwotCXRpbWVzdGFtcAlyZWNvcmRpbmdEYXRlQW5kVGltZTsKLQl1aW50OF90CQlpbnRlZ3JpdHlUeXBlOwotCXVpbnQ4X3QJCXJlc2VydmVkWzE3NV07Ci0JcmVnaWQJCWltcElkZW50OwotCXVpbnQ4X3QJCWltcFVzZVsyNTZdOworCXN0cnVjdCB0YWcJCWRlc2NUYWc7CisJc3RydWN0IGljYnRhZwkJaWNiVGFnOworCXN0cnVjdCB0aW1lc3RhbXAJcmVjb3JkaW5nRGF0ZUFuZFRpbWU7CisJdWludDhfdAkJCWludGVncml0eVR5cGU7CisJdWludDhfdAkJCXJlc2VydmVkWzE3NV07CisJc3RydWN0IHJlZ2lkCQlpbXBJZGVudDsKKwl1aW50OF90CQkJaW1wVXNlWzI1Nl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogU2hvcnQgQWxsb2NhdGlvbiBEZXNjcmlwdG9yIChFQ01BIDE2N3IzIDQvMTQuMTQuMSkgKi8KQEAgLTc2NSwzMiArNzY1LDMyIEBACiAKIC8qIEZpbGUgRW50cnkgKEVDTUEgMTY3cjMgNC8xNC4xNykgKi8KIHN0cnVjdCBleHRlbmRlZEZpbGVFbnRyeSB7Ci0JdGFnCQlkZXNjVGFnOwotCWljYnRhZwkJaWNiVGFnOwotCV9fbGUzMgkJdWlkOwotCV9fbGUzMgkJZ2lkOwotCV9fbGUzMgkJcGVybWlzc2lvbnM7Ci0JX19sZTE2CQlmaWxlTGlua0NvdW50OwotCXVpbnQ4X3QJCXJlY29yZEZvcm1hdDsKLQl1aW50OF90CQlyZWNvcmREaXNwbGF5QXR0cjsKLQlfX2xlMzIJCXJlY29yZExlbmd0aDsKLQlfX2xlNjQJCWluZm9ybWF0aW9uTGVuZ3RoOwotCV9fbGU2NAkJb2JqZWN0U2l6ZTsKLQlfX2xlNjQJCWxvZ2ljYWxCbG9ja3NSZWNvcmRlZDsKLQl0aW1lc3RhbXAJYWNjZXNzVGltZTsKLQl0aW1lc3RhbXAJbW9kaWZpY2F0aW9uVGltZTsKLQl0aW1lc3RhbXAJY3JlYXRlVGltZTsKLQl0aW1lc3RhbXAJYXR0clRpbWU7Ci0JX19sZTMyCQljaGVja3BvaW50OwotCV9fbGUzMgkJcmVzZXJ2ZWQ7Ci0JbG9uZ19hZAkJZXh0ZW5kZWRBdHRySUNCOwotCWxvbmdfYWQJCXN0cmVhbURpcmVjdG9yeUlDQjsKLQlyZWdpZAkJaW1wSWRlbnQ7Ci0JX19sZTY0CQl1bmlxdWVJRDsKLQlfX2xlMzIJCWxlbmd0aEV4dGVuZGVkQXR0cjsKLQlfX2xlMzIJCWxlbmd0aEFsbG9jRGVzY3M7Ci0JdWludDhfdAkJZXh0ZW5kZWRBdHRyWzBdOwotCXVpbnQ4X3QJCWFsbG9jRGVzY3NbMF07CisJc3RydWN0IHRhZwkJZGVzY1RhZzsKKwlzdHJ1Y3QgaWNidGFnCQlpY2JUYWc7CisJX19sZTMyCQkJdWlkOworCV9fbGUzMgkJCWdpZDsKKwlfX2xlMzIJCQlwZXJtaXNzaW9uczsKKwlfX2xlMTYJCQlmaWxlTGlua0NvdW50OworCXVpbnQ4X3QJCQlyZWNvcmRGb3JtYXQ7CisJdWludDhfdAkJCXJlY29yZERpc3BsYXlBdHRyOworCV9fbGUzMgkJCXJlY29yZExlbmd0aDsKKwlfX2xlNjQJCQlpbmZvcm1hdGlvbkxlbmd0aDsKKwlfX2xlNjQJCQlvYmplY3RTaXplOworCV9fbGU2NAkJCWxvZ2ljYWxCbG9ja3NSZWNvcmRlZDsKKwlzdHJ1Y3QgdGltZXN0YW1wCWFjY2Vzc1RpbWU7CisJc3RydWN0IHRpbWVzdGFtcAltb2RpZmljYXRpb25UaW1lOworCXN0cnVjdCB0aW1lc3RhbXAJY3JlYXRlVGltZTsKKwlzdHJ1Y3QgdGltZXN0YW1wCWF0dHJUaW1lOworCV9fbGUzMgkJCWNoZWNrcG9pbnQ7CisJX19sZTMyCQkJcmVzZXJ2ZWQ7CisJc3RydWN0IGxvbmdfYWQJCWV4dGVuZGVkQXR0cklDQjsKKwlzdHJ1Y3QgbG9uZ19hZAkJc3RyZWFtRGlyZWN0b3J5SUNCOworCXN0cnVjdCByZWdpZAkJaW1wSWRlbnQ7CisJX19sZTY0CQkJdW5pcXVlSUQ7CisJX19sZTMyCQkJbGVuZ3RoRXh0ZW5kZWRBdHRyOworCV9fbGUzMgkJCWxlbmd0aEFsbG9jRGVzY3M7CisJdWludDhfdAkJCWV4dGVuZGVkQXR0clswXTsKKwl1aW50OF90CQkJYWxsb2NEZXNjc1swXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjZW5kaWYgLyogX0VDTUFfMTY3X0ggKi8KZGlmZiAtLWdpdCBhL2ZzL3VkZi9pYWxsb2MuYyBiL2ZzL3VkZi9pYWxsb2MuYwppbmRleCA0N2RiZTU2Li5jMTBmYTM5IDEwMDY0NAotLS0gYS9mcy91ZGYvaWFsbG9jLmMKKysrIGIvZnMvdWRmL2lhbGxvYy5jCkBAIC00OSwxMiArNDksMTEgQEAKIAkJCWxlMzJfYWRkX2NwdSgmbHZpZGl1LT5udW1EaXJzLCAtMSk7CiAJCWVsc2UKIAkJCWxlMzJfYWRkX2NwdSgmbHZpZGl1LT5udW1GaWxlcywgLTEpOwotCi0JCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19sdmlkX2JoKTsKKwkJdWRmX3VwZGF0ZWRfbHZpZChzYik7CiAJfQogCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAotCXVkZl9mcmVlX2Jsb2NrcyhzYiwgTlVMTCwgVURGX0koaW5vZGUpLT5pX2xvY2F0aW9uLCAwLCAxKTsKKwl1ZGZfZnJlZV9ibG9ja3Moc2IsIE5VTEwsICZVREZfSShpbm9kZSktPmlfbG9jYXRpb24sIDAsIDEpOwogfQogCiBzdHJ1Y3QgaW5vZGUgKnVkZl9uZXdfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIGludCBtb2RlLCBpbnQgKmVycikKQEAgLTEyMiw3ICsxMjEsNyBAQAogCQlpZiAoISgrK3VuaXF1ZUlEICYgMHgwMDAwMDAwMEZGRkZGRkZGVUwpKQogCQkJdW5pcXVlSUQgKz0gMTY7CiAJCWx2aGQtPnVuaXF1ZUlEID0gY3B1X3RvX2xlNjQodW5pcXVlSUQpOwotCQltYXJrX2J1ZmZlcl9kaXJ0eShzYmktPnNfbHZpZF9iaCk7CisJCXVkZl91cGRhdGVkX2x2aWQoc2IpOwogCX0KIAltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CkBAIC0xMzgsNyArMTM3LDcgQEAKIAlpaW5mby0+aV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0gPSBibG9jazsKIAlpaW5mby0+aV9sb2NhdGlvbi5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPQogCQkJCWRpbmZvLT5pX2xvY2F0aW9uLnBhcnRpdGlvblJlZmVyZW5jZU51bTsKLQlpbm9kZS0+aV9pbm8gPSB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgaWluZm8tPmlfbG9jYXRpb24sIDApOworCWlub2RlLT5pX2lubyA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCAmaWluZm8tPmlfbG9jYXRpb24sIDApOwogCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJaWluZm8tPmlfbGVuRUF0dHIgPSAwOwogCWlpbmZvLT5pX2xlbkFsbG9jID0gMDsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggMzBlYmRlNC4uZTc1MzNmNyAxMDA2NDQKLS0tIGEvZnMvdWRmL2lub2RlLmMKKysrIGIvZnMvdWRmL2lub2RlLmMKQEAgLTU1LDE1ICs1NSwxNSBAQAogc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgaW50ICosCiAJCQkJCXNlY3Rvcl90ICosIGludCAqKTsKIHN0YXRpYyBpbnQ4X3QgdWRmX2luc2VydF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uLAotCQkJICAgICAga2VybmVsX2xiX2FkZHIsIHVpbnQzMl90KTsKKwkJCSAgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QpOwogc3RhdGljIHZvaWQgdWRmX3NwbGl0X2V4dGVudHMoc3RydWN0IGlub2RlICosIGludCAqLCBpbnQsIGludCwKLQkJCSAgICAgIGtlcm5lbF9sb25nX2FkW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50ICopOworCQkJICAgICAgc3RydWN0IGtlcm5lbF9sb25nX2FkW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50ICopOwogc3RhdGljIHZvaWQgdWRmX3ByZWFsbG9jX2V4dGVudHMoc3RydWN0IGlub2RlICosIGludCwgaW50LAotCQkJCSBrZXJuZWxfbG9uZ19hZFtFWFRFTlRfTUVSR0VfU0laRV0sIGludCAqKTsKKwkJCQkgc3RydWN0IGtlcm5lbF9sb25nX2FkW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50ICopOwogc3RhdGljIHZvaWQgdWRmX21lcmdlX2V4dGVudHMoc3RydWN0IGlub2RlICosCi0JCQkgICAgICBrZXJuZWxfbG9uZ19hZFtFWFRFTlRfTUVSR0VfU0laRV0sIGludCAqKTsKKwkJCSAgICAgIHN0cnVjdCBrZXJuZWxfbG9uZ19hZFtFWFRFTlRfTUVSR0VfU0laRV0sIGludCAqKTsKIHN0YXRpYyB2b2lkIHVkZl91cGRhdGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKiwKLQkJCSAgICAgICBrZXJuZWxfbG9uZ19hZFtFWFRFTlRfTUVSR0VfU0laRV0sIGludCwgaW50LAorCQkJICAgICAgIHN0cnVjdCBrZXJuZWxfbG9uZ19hZFtFWFRFTlRfTUVSR0VfU0laRV0sIGludCwgaW50LAogCQkJICAgICAgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKik7CiBzdGF0aWMgaW50IHVkZl9nZXRfYmxvY2soc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKIApAQCAtMjAwLDcgKzIwMCw3IEBACiB7CiAJaW50IG5ld2Jsb2NrOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGJoID0gTlVMTDsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCXVpbnQzMl90IGVsZW47CiAJdWludDhfdCBhbGxvY3R5cGU7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zOwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJZXBvcy5iaCA9IE5VTEw7CiAJZXBvcy5ibG9jayA9IGlpbmZvLT5pX2xvY2F0aW9uOwogCWVwb3Mub2Zmc2V0ID0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKTsKLQl1ZGZfYWRkX2FleHQoaW5vZGUsICZlcG9zLCBlbG9jLCBlbGVuLCAwKTsKKwl1ZGZfYWRkX2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywgZWxlbiwgMCk7CiAJLyogVW5pcXVlSUQgc3R1ZmYgKi8KIAogCWJyZWxzZShlcG9zLmJoKTsKQEAgLTM1OSwxMiArMzU5LDEyIEBACiAKIC8qIEV4dGVuZCB0aGUgZmlsZSBieSAnYmxvY2tzJyBibG9ja3MsIHJldHVybiB0aGUgbnVtYmVyIG9mIGV4dGVudHMgYWRkZWQgKi8KIGludCB1ZGZfZXh0ZW5kX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqbGFzdF9wb3MsCi0JCSAgICBrZXJuZWxfbG9uZ19hZCAqbGFzdF9leHQsIHNlY3Rvcl90IGJsb2NrcykKKwkJICAgIHN0cnVjdCBrZXJuZWxfbG9uZ19hZCAqbGFzdF9leHQsIHNlY3Rvcl90IGJsb2NrcykKIHsKIAlzZWN0b3JfdCBhZGQ7CiAJaW50IGNvdW50ID0gMCwgZmFrZSA9ICEobGFzdF9leHQtPmV4dExlbmd0aCAmIFVERl9FWFRFTlRfTEVOR1RIX01BU0spOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKLQlrZXJuZWxfbGJfYWRkciBwcmVhbGxvY19sb2MgPSB7fTsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgcHJlYWxsb2NfbG9jID0ge307CiAJaW50IHByZWFsbG9jX2xlbiA9IDA7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbzsKIApAQCAtNDExLDExICs0MTEsMTEgQEAKIAl9CiAKIAlpZiAoZmFrZSkgewotCQl1ZGZfYWRkX2FleHQoaW5vZGUsIGxhc3RfcG9zLCBsYXN0X2V4dC0+ZXh0TG9jYXRpb24sCisJCXVkZl9hZGRfYWV4dChpbm9kZSwgbGFzdF9wb3MsICZsYXN0X2V4dC0+ZXh0TG9jYXRpb24sCiAJCQkgICAgIGxhc3RfZXh0LT5leHRMZW5ndGgsIDEpOwogCQljb3VudCsrOwogCX0gZWxzZQotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgbGFzdF9wb3MsIGxhc3RfZXh0LT5leHRMb2NhdGlvbiwKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGxhc3RfcG9zLCAmbGFzdF9leHQtPmV4dExvY2F0aW9uLAogCQkJCWxhc3RfZXh0LT5leHRMZW5ndGgsIDEpOwogCiAJLyogTWFuYWdlZCB0byBkbyBldmVyeXRoaW5nIG5lY2Vzc2FyeT8gKi8KQEAgLTQzMiw3ICs0MzIsNyBAQAogCS8qIENyZWF0ZSBlbm91Z2ggZXh0ZW50cyB0byBjb3ZlciB0aGUgd2hvbGUgaG9sZSAqLwogCXdoaWxlIChibG9ja3MgPiBhZGQpIHsKIAkJYmxvY2tzIC09IGFkZDsKLQkJaWYgKHVkZl9hZGRfYWV4dChpbm9kZSwgbGFzdF9wb3MsIGxhc3RfZXh0LT5leHRMb2NhdGlvbiwKKwkJaWYgKHVkZl9hZGRfYWV4dChpbm9kZSwgbGFzdF9wb3MsICZsYXN0X2V4dC0+ZXh0TG9jYXRpb24sCiAJCQkJIGxhc3RfZXh0LT5leHRMZW5ndGgsIDEpID09IC0xKQogCQkJcmV0dXJuIC0xOwogCQljb3VudCsrOwpAQCAtNDQwLDcgKzQ0MCw3IEBACiAJaWYgKGJsb2NrcykgewogCQlsYXN0X2V4dC0+ZXh0TGVuZ3RoID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEIHwKIAkJCShibG9ja3MgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHMpOwotCQlpZiAodWRmX2FkZF9hZXh0KGlub2RlLCBsYXN0X3BvcywgbGFzdF9leHQtPmV4dExvY2F0aW9uLAorCQlpZiAodWRmX2FkZF9hZXh0KGlub2RlLCBsYXN0X3BvcywgJmxhc3RfZXh0LT5leHRMb2NhdGlvbiwKIAkJCQkgbGFzdF9leHQtPmV4dExlbmd0aCwgMSkgPT0gLTEpCiAJCQlyZXR1cm4gLTE7CiAJCWNvdW50Kys7CkBAIC00NDksNyArNDQ5LDcgQEAKIG91dDoKIAkvKiBEbyB3ZSBoYXZlIHNvbWUgcHJlYWxsb2NhdGVkIGJsb2NrcyBzYXZlZD8gKi8KIAlpZiAocHJlYWxsb2NfbGVuKSB7Ci0JCWlmICh1ZGZfYWRkX2FleHQoaW5vZGUsIGxhc3RfcG9zLCBwcmVhbGxvY19sb2MsCisJCWlmICh1ZGZfYWRkX2FleHQoaW5vZGUsIGxhc3RfcG9zLCAmcHJlYWxsb2NfbG9jLAogCQkJCSBwcmVhbGxvY19sZW4sIDEpID09IC0xKQogCQkJcmV0dXJuIC0xOwogCQlsYXN0X2V4dC0+ZXh0TG9jYXRpb24gPSBwcmVhbGxvY19sb2M7CkBAIC00NTksOSArNDU5LDkgQEAKIAogCS8qIGxhc3RfcG9zIHNob3VsZCBwb2ludCB0byB0aGUgbGFzdCB3cml0dGVuIGV4dGVudC4uLiAqLwogCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQlsYXN0X3Bvcy0+b2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CisJCWxhc3RfcG9zLT5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQlsYXN0X3Bvcy0+b2Zmc2V0IC09IHNpemVvZihsb25nX2FkKTsKKwkJbGFzdF9wb3MtPm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCWVsc2UKIAkJcmV0dXJuIC0xOwogCkBAIC00NzMsMTEgKzQ3MywxMSBAQAogewogCXN0YXRpYyBzZWN0b3JfdCBsYXN0X2Jsb2NrOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVzdWx0ID0gTlVMTDsKLQlrZXJuZWxfbG9uZ19hZCBsYWFycltFWFRFTlRfTUVSR0VfU0laRV07CisJc3RydWN0IGtlcm5lbF9sb25nX2FkIGxhYXJyW0VYVEVOVF9NRVJHRV9TSVpFXTsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIHByZXZfZXBvcywgY3VyX2Vwb3MsIG5leHRfZXBvczsKIAlpbnQgY291bnQgPSAwLCBzdGFydG51bSA9IDAsIGVuZG51bSA9IDA7CiAJdWludDMyX3QgZWxlbiA9IDAsIHRtcGVsZW47Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYywgdG1wZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYywgdG1wZWxvYzsKIAlpbnQgYyA9IDE7CiAJbG9mZl90IGxiY291bnQgPSAwLCBiX29mZiA9IDA7CiAJdWludDMyX3QgbmV3YmxvY2tudW0sIG5ld2Jsb2NrOwpAQCAtNTUwLDEyICs1NTAsMTIgQEAKIAkJCWVsZW4gPSBFWFRfUkVDT1JERURfQUxMT0NBVEVEIHwKIAkJCQkoKGVsZW4gKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSAmCiAJCQkJIH4oaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkpOwotCQkJZXR5cGUgPSB1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJmN1cl9lcG9zLCBlbG9jLCBlbGVuLCAxKTsKKwkJCWV0eXBlID0gdWRmX3dyaXRlX2FleHQoaW5vZGUsICZjdXJfZXBvcywgJmVsb2MsIGVsZW4sIDEpOwogCQl9CiAJCWJyZWxzZShwcmV2X2Vwb3MuYmgpOwogCQlicmVsc2UoY3VyX2Vwb3MuYmgpOwogCQlicmVsc2UobmV4dF9lcG9zLmJoKTsKLQkJbmV3YmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgZWxvYywgb2Zmc2V0KTsKKwkJbmV3YmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgJmVsb2MsIG9mZnNldCk7CiAJCSpwaHlzID0gbmV3YmxvY2s7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTU3Miw3ICs1NzIsNyBAQAogCQl9IGVsc2UgewogCQkJLyogQ3JlYXRlIGEgZmFrZSBleHRlbnQgd2hlbiB0aGVyZSdzIG5vdCBvbmUgKi8KIAkJCW1lbXNldCgmbGFhcnJbMF0uZXh0TG9jYXRpb24sIDB4MDAsCi0JCQkJc2l6ZW9mKGtlcm5lbF9sYl9hZGRyKSk7CisJCQkJc2l6ZW9mKHN0cnVjdCBrZXJuZWxfbGJfYWRkcikpOwogCQkJbGFhcnJbMF0uZXh0TGVuZ3RoID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEOwogCQkJLyogV2lsbCB1ZGZfZXh0ZW5kX2ZpbGUoKSBjcmVhdGUgcmVhbCBleHRlbnQgZnJvbQogCQkJICAgYSBmYWtlIG9uZT8gKi8KQEAgLTYwMiw3ICs2MDIsNyBAQAogCQkJbGFhcnJbY10uZXh0TGVuZ3RoID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEIHwKIAkJCQlpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CiAJCQltZW1zZXQoJmxhYXJyW2NdLmV4dExvY2F0aW9uLCAweDAwLAotCQkJCXNpemVvZihrZXJuZWxfbGJfYWRkcikpOworCQkJCXNpemVvZihzdHJ1Y3Qga2VybmVsX2xiX2FkZHIpKTsKIAkJCWNvdW50Kys7CiAJCQllbmRudW0rKzsKIAkJfQpAQCAtNjk5LDcgKzY5OSw3IEBACiAKIHN0YXRpYyB2b2lkIHVkZl9zcGxpdF9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCAqYywgaW50IG9mZnNldCwKIAkJCSAgICAgIGludCBuZXdibG9ja251bSwKLQkJCSAgICAgIGtlcm5lbF9sb25nX2FkIGxhYXJyW0VYVEVOVF9NRVJHRV9TSVpFXSwKKwkJCSAgICAgIHN0cnVjdCBrZXJuZWxfbG9uZ19hZCBsYWFycltFWFRFTlRfTUVSR0VfU0laRV0sCiAJCQkgICAgICBpbnQgKmVuZG51bSkKIHsKIAl1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKQEAgLTcyNiw3ICs3MjYsNyBAQAogCQlpZiAob2Zmc2V0KSB7CiAJCQlpZiAoZXR5cGUgPT0gKEVYVF9OT1RfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkgewogCQkJCXVkZl9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgaW5vZGUsCi0JCQkJCQlsYWFycltjdXJyXS5leHRMb2NhdGlvbiwKKwkJCQkJCSZsYWFycltjdXJyXS5leHRMb2NhdGlvbiwKIAkJCQkJCTAsIG9mZnNldCk7CiAJCQkJbGFhcnJbY3Vycl0uZXh0TGVuZ3RoID0KIAkJCQkJRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEIHwKQEAgLTc2Myw3ICs3NjMsNyBAQAogfQogCiBzdGF0aWMgdm9pZCB1ZGZfcHJlYWxsb2NfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYywgaW50IGxhc3RibG9jaywKLQkJCQkga2VybmVsX2xvbmdfYWQgbGFhcnJbRVhURU5UX01FUkdFX1NJWkVdLAorCQkJCSBzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgbGFhcnJbRVhURU5UX01FUkdFX1NJWkVdLAogCQkJCSBpbnQgKmVuZG51bSkKIHsKIAlpbnQgc3RhcnQsIGxlbmd0aCA9IDAsIGN1cnJsZW5ndGggPSAwLCBpOwpAQCAtODE3LDcgKzgxNyw3IEBACiAJCQkJCSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cyk7CiAJCQllbHNlIHsKIAkJCQltZW1tb3ZlKCZsYWFycltjICsgMl0sICZsYWFycltjICsgMV0sCi0JCQkJCXNpemVvZihsb25nX2FkKSAqICgqZW5kbnVtIC0gKGMgKyAxKSkpOworCQkJCQlzaXplb2Yoc3RydWN0IGxvbmdfYWQpICogKCplbmRudW0gLSAoYyArIDEpKSk7CiAJCQkJKCplbmRudW0pKys7CiAJCQkJbGFhcnJbYyArIDFdLmV4dExvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSA9IG5leHQ7CiAJCQkJbGFhcnJbYyArIDFdLmV4dExvY2F0aW9uLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9CkBAIC04NDYsNyArODQ2LDcgQEAKIAkJCQkJaWYgKCplbmRudW0gPiAoaSArIDEpKQogCQkJCQkJbWVtbW92ZSgmbGFhcnJbaV0sCiAJCQkJCQkJJmxhYXJyW2kgKyAxXSwKLQkJCQkJCQlzaXplb2YobG9uZ19hZCkgKgorCQkJCQkJCXNpemVvZihzdHJ1Y3QgbG9uZ19hZCkgKgogCQkJCQkJCSgqZW5kbnVtIC0gKGkgKyAxKSkpOwogCQkJCQlpLS07CiAJCQkJCSgqZW5kbnVtKS0tOwpAQCAtODU5LDcgKzg1OSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHVkZl9tZXJnZV9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICBrZXJuZWxfbG9uZ19hZCBsYWFycltFWFRFTlRfTUVSR0VfU0laRV0sCisJCQkgICAgICBzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgbGFhcnJbRVhURU5UX01FUkdFX1NJWkVdLAogCQkJICAgICAgaW50ICplbmRudW0pCiB7CiAJaW50IGk7CkBAIC04NjcsOCArODY3LDggQEAKIAl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgKCplbmRudW0gLSAxKTsgaSsrKSB7Ci0JCWtlcm5lbF9sb25nX2FkICpsaSAvKmxbaV0qLyA9ICZsYWFycltpXTsKLQkJa2VybmVsX2xvbmdfYWQgKmxpcDEgLypsW2kgcGx1cyAxXSovID0gJmxhYXJyW2kgKyAxXTsKKwkJc3RydWN0IGtlcm5lbF9sb25nX2FkICpsaSAvKmxbaV0qLyA9ICZsYWFycltpXTsKKwkJc3RydWN0IGtlcm5lbF9sb25nX2FkICpsaXAxIC8qbFtpIHBsdXMgMV0qLyA9ICZsYWFycltpICsgMV07CiAKIAkJaWYgKCgobGktPmV4dExlbmd0aCA+PiAzMCkgPT0gKGxpcDEtPmV4dExlbmd0aCA+PiAzMCkpICYmCiAJCQkoKChsaS0+ZXh0TGVuZ3RoID4+IDMwKSA9PQpAQCAtOTAyLDcgKzkwMiw3IEBACiAJCQkJCSBibG9ja3NpemUgLSAxKSAmIH4oYmxvY2tzaXplIC0gMSkpOwogCQkJCWlmICgqZW5kbnVtID4gKGkgKyAyKSkKIAkJCQkJbWVtbW92ZSgmbGFhcnJbaSArIDFdLCAmbGFhcnJbaSArIDJdLAotCQkJCQkJc2l6ZW9mKGxvbmdfYWQpICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgbG9uZ19hZCkgKgogCQkJCQkJKCplbmRudW0gLSAoaSArIDIpKSk7CiAJCQkJaS0tOwogCQkJCSgqZW5kbnVtKS0tOwpAQCAtOTExLDcgKzkxMSw3IEBACiAJCQkJKEVYVF9OT1RfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkgJiYKIAkJCSAgICgobGlwMS0+ZXh0TGVuZ3RoID4+IDMwKSA9PQogCQkJCShFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgPj4gMzApKSkgewotCQkJdWRmX2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiLCBpbm9kZSwgbGktPmV4dExvY2F0aW9uLCAwLAorCQkJdWRmX2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiLCBpbm9kZSwgJmxpLT5leHRMb2NhdGlvbiwgMCwKIAkJCQkJKChsaS0+ZXh0TGVuZ3RoICYKIAkJCQkJICBVREZfRVhURU5UX0xFTkdUSF9NQVNLKSArCiAJCQkJCSBibG9ja3NpemUgLSAxKSA+PiBibG9ja3NpemVfYml0cyk7CkBAIC05MzcsNyArOTM3LDcgQEAKIAkJCQkJICBibG9ja3NpemUgLSAxKSAmIH4oYmxvY2tzaXplIC0gMSkpOwogCQkJCWlmICgqZW5kbnVtID4gKGkgKyAyKSkKIAkJCQkJbWVtbW92ZSgmbGFhcnJbaSArIDFdLCAmbGFhcnJbaSArIDJdLAotCQkJCQkJc2l6ZW9mKGxvbmdfYWQpICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgbG9uZ19hZCkgKgogCQkJCQkJKCplbmRudW0gLSAoaSArIDIpKSk7CiAJCQkJaS0tOwogCQkJCSgqZW5kbnVtKS0tOwpAQCAtOTQ1LDcgKzk0NSw3IEBACiAJCX0gZWxzZSBpZiAoKGxpLT5leHRMZW5ndGggPj4gMzApID09CiAJCQkJCShFWFRfTk9UX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpIHsKIAkJCXVkZl9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgaW5vZGUsCi0JCQkJCWxpLT5leHRMb2NhdGlvbiwgMCwKKwkJCQkJJmxpLT5leHRMb2NhdGlvbiwgMCwKIAkJCQkJKChsaS0+ZXh0TGVuZ3RoICYKIAkJCQkJCVVERl9FWFRFTlRfTEVOR1RIX01BU0spICsKIAkJCQkJIGJsb2Nrc2l6ZSAtIDEpID4+IGJsb2Nrc2l6ZV9iaXRzKTsKQEAgLTk1OSwxMiArOTU5LDEyIEBACiB9CiAKIHN0YXRpYyB2b2lkIHVkZl91cGRhdGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIGtlcm5lbF9sb25nX2FkIGxhYXJyW0VYVEVOVF9NRVJHRV9TSVpFXSwKKwkJCSAgICAgICBzdHJ1Y3Qga2VybmVsX2xvbmdfYWQgbGFhcnJbRVhURU5UX01FUkdFX1NJWkVdLAogCQkJICAgICAgIGludCBzdGFydG51bSwgaW50IGVuZG51bSwKIAkJCSAgICAgICBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICplcG9zKQogewogCWludCBzdGFydCA9IDAsIGk7Ci0Ja2VybmVsX2xiX2FkZHIgdG1wbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciB0bXBsb2M7CiAJdWludDMyX3QgdG1wbGVuOwogCiAJaWYgKHN0YXJ0bnVtID4gZW5kbnVtKSB7CkBAIC05ODMsNyArOTgzLDcgQEAKIAogCWZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kbnVtOyBpKyspIHsKIAkJdWRmX25leHRfYWV4dChpbm9kZSwgZXBvcywgJnRtcGxvYywgJnRtcGxlbiwgMCk7Ci0JCXVkZl93cml0ZV9hZXh0KGlub2RlLCBlcG9zLCBsYWFycltpXS5leHRMb2NhdGlvbiwKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGVwb3MsICZsYWFycltpXS5leHRMb2NhdGlvbiwKIAkJCSAgICAgICBsYWFycltpXS5leHRMZW5ndGgsIDEpOwogCX0KIH0KQEAgLTEwNzYsNyArMTA3Niw3IEBACiAJICogICAgICBpX25saW5rID0gMQogCSAqICAgICAgaV9vcCA9IE5VTEw7CiAJICovCi0JYmggPSB1ZGZfcmVhZF9wdGFnZ2VkKGlub2RlLT5pX3NiLCBpaW5mby0+aV9sb2NhdGlvbiwgMCwgJmlkZW50KTsKKwliaCA9IHVkZl9yZWFkX3B0YWdnZWQoaW5vZGUtPmlfc2IsICZpaW5mby0+aV9sb2NhdGlvbiwgMCwgJmlkZW50KTsKIAlpZiAoIWJoKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidWRmOiB1ZGZfcmVhZF9pbm9kZShpbm8gJWxkKSBmYWlsZWQgIWJoXG4iLAogCQkgICAgICAgaW5vZGUtPmlfaW5vKTsKQEAgLTEwOTgsMjQgKzEwOTgsMjQgQEAKIAlpZiAoZmUtPmljYlRhZy5zdHJhdGVneVR5cGUgPT0gY3B1X3RvX2xlMTYoNDA5NikpIHsKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICppYmg7CiAKLQkJaWJoID0gdWRmX3JlYWRfcHRhZ2dlZChpbm9kZS0+aV9zYiwgaWluZm8tPmlfbG9jYXRpb24sIDEsCisJCWliaCA9IHVkZl9yZWFkX3B0YWdnZWQoaW5vZGUtPmlfc2IsICZpaW5mby0+aV9sb2NhdGlvbiwgMSwKIAkJCQkJJmlkZW50KTsKIAkJaWYgKGlkZW50ID09IFRBR19JREVOVF9JRSAmJiBpYmgpIHsKIAkJCXN0cnVjdCBidWZmZXJfaGVhZCAqbmJoID0gTlVMTDsKLQkJCWtlcm5lbF9sYl9hZGRyIGxvYzsKKwkJCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBsb2M7CiAJCQlzdHJ1Y3QgaW5kaXJlY3RFbnRyeSAqaWU7CiAKIAkJCWllID0gKHN0cnVjdCBpbmRpcmVjdEVudHJ5ICopaWJoLT5iX2RhdGE7CiAJCQlsb2MgPSBsZWxiX3RvX2NwdShpZS0+aW5kaXJlY3RJQ0IuZXh0TG9jYXRpb24pOwogCiAJCQlpZiAoaWUtPmluZGlyZWN0SUNCLmV4dExlbmd0aCAmJgotCQkJCShuYmggPSB1ZGZfcmVhZF9wdGFnZ2VkKGlub2RlLT5pX3NiLCBsb2MsIDAsCisJCQkJKG5iaCA9IHVkZl9yZWFkX3B0YWdnZWQoaW5vZGUtPmlfc2IsICZsb2MsIDAsCiAJCQkJCQkJJmlkZW50KSkpIHsKIAkJCQlpZiAoaWRlbnQgPT0gVEFHX0lERU5UX0ZFIHx8CiAJCQkJCWlkZW50ID09IFRBR19JREVOVF9FRkUpIHsKIAkJCQkJbWVtY3B5KCZpaW5mby0+aV9sb2NhdGlvbiwKIAkJCQkJCSZsb2MsCi0JCQkJCQlzaXplb2Yoa2VybmVsX2xiX2FkZHIpKTsKKwkJCQkJCXNpemVvZihzdHJ1Y3Qga2VybmVsX2xiX2FkZHIpKTsKIAkJCQkJYnJlbHNlKGJoKTsKIAkJCQkJYnJlbHNlKGliaCk7CiAJCQkJCWJyZWxzZShuYmgpOwpAQCAtMTIyMiw4ICsxMjIyLDE1IEBACiAJaW5vZGUtPmlfc2l6ZSA9IGxlNjRfdG9fY3B1KGZlLT5pbmZvcm1hdGlvbkxlbmd0aCk7CiAJaWluZm8tPmlfbGVuRXh0ZW50cyA9IGlub2RlLT5pX3NpemU7CiAKLQlpbm9kZS0+aV9tb2RlID0gdWRmX2NvbnZlcnRfcGVybWlzc2lvbnMoZmUpOwotCWlub2RlLT5pX21vZGUgJj0gflVERl9TQihpbm9kZS0+aV9zYiktPnNfdW1hc2s7CisJaWYgKGZlLT5pY2JUYWcuZmlsZVR5cGUgIT0gSUNCVEFHX0ZJTEVfVFlQRV9ESVJFQ1RPUlkgJiYKKwkJCXNiaS0+c19mbW9kZSAhPSBVREZfSU5WQUxJRF9NT0RFKQorCQlpbm9kZS0+aV9tb2RlID0gc2JpLT5zX2Ztb2RlOworCWVsc2UgaWYgKGZlLT5pY2JUYWcuZmlsZVR5cGUgPT0gSUNCVEFHX0ZJTEVfVFlQRV9ESVJFQ1RPUlkgJiYKKwkJCXNiaS0+c19kbW9kZSAhPSBVREZfSU5WQUxJRF9NT0RFKQorCQlpbm9kZS0+aV9tb2RlID0gc2JpLT5zX2Rtb2RlOworCWVsc2UKKwkJaW5vZGUtPmlfbW9kZSA9IHVkZl9jb252ZXJ0X3Blcm1pc3Npb25zKGZlKTsKKwlpbm9kZS0+aV9tb2RlICY9IH5zYmktPnNfdW1hc2s7CiAKIAlpZiAoaWluZm8tPmlfZWZlID09IDApIHsKIAkJaW5vZGUtPmlfYmxvY2tzID0gbGU2NF90b19jcHUoZmUtPmxvZ2ljYWxCbG9ja3NSZWNvcmRlZCkgPDwKQEAgLTEzOTYsNyArMTQwMyw3IEBACiAKIAliaCA9IHVkZl90cmVhZChpbm9kZS0+aV9zYiwKIAkJCXVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLT5pX3NiLAotCQkJCQkgIGlpbmZvLT5pX2xvY2F0aW9uLCAwKSk7CisJCQkJCSAgJmlpbmZvLT5pX2xvY2F0aW9uLCAwKSk7CiAJaWYgKCFiaCkgewogCQl1ZGZfZGVidWcoImJyZWFkIGZhaWx1cmVcbiIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTE0MTYsMTMgKzE0MjMsMTMgQEAKIAkJICAgICAgIGlpbmZvLT5pX2V4dC5pX2RhdGEsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtCiAJCQkJCXNpemVvZihzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkpKTsKIAkJY3JjbGVuID0gc2l6ZW9mKHN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSkgKwotCQkJCWlpbmZvLT5pX2xlbkFsbG9jIC0gc2l6ZW9mKHRhZyk7CisJCQkJaWluZm8tPmlfbGVuQWxsb2MgLSBzaXplb2Yoc3RydWN0IHRhZyk7CiAJCXVzZS0+ZGVzY1RhZy50YWdMb2NhdGlvbiA9IGNwdV90b19sZTMyKAogCQkJCQkJaWluZm8tPmlfbG9jYXRpb24uCiAJCQkJCQkJbG9naWNhbEJsb2NrTnVtKTsKIAkJdXNlLT5kZXNjVGFnLmRlc2NDUkNMZW5ndGggPSBjcHVfdG9fbGUxNihjcmNsZW4pOwogCQl1c2UtPmRlc2NUYWcuZGVzY0NSQyA9IGNwdV90b19sZTE2KGNyY19pdHVfdCgwLCAoY2hhciAqKXVzZSArCi0JCQkJCQkJICAgc2l6ZW9mKHRhZyksCisJCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCB0YWcpLAogCQkJCQkJCSAgIGNyY2xlbikpOwogCQl1c2UtPmRlc2NUYWcudGFnQ2hlY2tzdW0gPSB1ZGZfdGFnX2NoZWNrc3VtKCZ1c2UtPmRlc2NUYWcpOwogCkBAIC0xNDU5LDIzICsxNDY2LDIzIEBACiAJZmUtPmluZm9ybWF0aW9uTGVuZ3RoID0gY3B1X3RvX2xlNjQoaW5vZGUtPmlfc2l6ZSk7CiAKIAlpZiAoU19JU0NIUihpbm9kZS0+aV9tb2RlKSB8fCBTX0lTQkxLKGlub2RlLT5pX21vZGUpKSB7Ci0JCXJlZ2lkICplaWQ7CisJCXN0cnVjdCByZWdpZCAqZWlkOwogCQlzdHJ1Y3QgZGV2aWNlU3BlYyAqZHNlYSA9CiAJCQkoc3RydWN0IGRldmljZVNwZWMgKil1ZGZfZ2V0X2V4dGVuZGVkYXR0cihpbm9kZSwgMTIsIDEpOwogCQlpZiAoIWRzZWEpIHsKIAkJCWRzZWEgPSAoc3RydWN0IGRldmljZVNwZWMgKikKIAkJCQl1ZGZfYWRkX2V4dGVuZGVkYXR0cihpbm9kZSwKIAkJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkZXZpY2VTcGVjKSArCi0JCQkJCQkgICAgIHNpemVvZihyZWdpZCksIDEyLCAweDMpOworCQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHJlZ2lkKSwgMTIsIDB4Myk7CiAJCQlkc2VhLT5hdHRyVHlwZSA9IGNwdV90b19sZTMyKDEyKTsKIAkJCWRzZWEtPmF0dHJTdWJ0eXBlID0gMTsKIAkJCWRzZWEtPmF0dHJMZW5ndGggPSBjcHVfdG9fbGUzMigKIAkJCQkJCXNpemVvZihzdHJ1Y3QgZGV2aWNlU3BlYykgKwotCQkJCQkJc2l6ZW9mKHJlZ2lkKSk7Ci0JCQlkc2VhLT5pbXBVc2VMZW5ndGggPSBjcHVfdG9fbGUzMihzaXplb2YocmVnaWQpKTsKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmVnaWQpKTsKKwkJCWRzZWEtPmltcFVzZUxlbmd0aCA9IGNwdV90b19sZTMyKHNpemVvZihzdHJ1Y3QgcmVnaWQpKTsKIAkJfQotCQllaWQgPSAocmVnaWQgKilkc2VhLT5pbXBVc2U7Ci0JCW1lbXNldChlaWQsIDAsIHNpemVvZihyZWdpZCkpOworCQllaWQgPSAoc3RydWN0IHJlZ2lkICopZHNlYS0+aW1wVXNlOworCQltZW1zZXQoZWlkLCAwLCBzaXplb2Yoc3RydWN0IHJlZ2lkKSk7CiAJCXN0cmNweShlaWQtPmlkZW50LCBVREZfSURfREVWRUxPUEVSKTsKIAkJZWlkLT5pZGVudFN1ZmZpeFswXSA9IFVERl9PU19DTEFTU19VTklYOwogCQllaWQtPmlkZW50U3VmZml4WzFdID0gVURGX09TX0lEX0xJTlVYOwpAQCAtMTQ5NCw3ICsxNTAxLDcgQEAKIAkJdWRmX3RpbWVfdG9fZGlza19zdGFtcCgmZmUtPmFjY2Vzc1RpbWUsIGlub2RlLT5pX2F0aW1lKTsKIAkJdWRmX3RpbWVfdG9fZGlza19zdGFtcCgmZmUtPm1vZGlmaWNhdGlvblRpbWUsIGlub2RlLT5pX210aW1lKTsKIAkJdWRmX3RpbWVfdG9fZGlza19zdGFtcCgmZmUtPmF0dHJUaW1lLCBpbm9kZS0+aV9jdGltZSk7Ci0JCW1lbXNldCgmKGZlLT5pbXBJZGVudCksIDAsIHNpemVvZihyZWdpZCkpOworCQltZW1zZXQoJihmZS0+aW1wSWRlbnQpLCAwLCBzaXplb2Yoc3RydWN0IHJlZ2lkKSk7CiAJCXN0cmNweShmZS0+aW1wSWRlbnQuaWRlbnQsIFVERl9JRF9ERVZFTE9QRVIpOwogCQlmZS0+aW1wSWRlbnQuaWRlbnRTdWZmaXhbMF0gPSBVREZfT1NfQ0xBU1NfVU5JWDsKIAkJZmUtPmltcElkZW50LmlkZW50U3VmZml4WzFdID0gVURGX09TX0lEX0xJTlVYOwpAQCAtMTUzMyw3ICsxNTQwLDcgQEAKIAkJdWRmX3RpbWVfdG9fZGlza19zdGFtcCgmZWZlLT5jcmVhdGVUaW1lLCBpaW5mby0+aV9jcnRpbWUpOwogCQl1ZGZfdGltZV90b19kaXNrX3N0YW1wKCZlZmUtPmF0dHJUaW1lLCBpbm9kZS0+aV9jdGltZSk7CiAKLQkJbWVtc2V0KCYoZWZlLT5pbXBJZGVudCksIDAsIHNpemVvZihyZWdpZCkpOworCQltZW1zZXQoJihlZmUtPmltcElkZW50KSwgMCwgc2l6ZW9mKHN0cnVjdCByZWdpZCkpOwogCQlzdHJjcHkoZWZlLT5pbXBJZGVudC5pZGVudCwgVURGX0lEX0RFVkVMT1BFUik7CiAJCWVmZS0+aW1wSWRlbnQuaWRlbnRTdWZmaXhbMF0gPSBVREZfT1NfQ0xBU1NfVU5JWDsKIAkJZWZlLT5pbXBJZGVudC5pZGVudFN1ZmZpeFsxXSA9IFVERl9PU19JRF9MSU5VWDsKQEAgLTE1ODQsOSArMTU5MSw5IEBACiAJZmUtPmRlc2NUYWcudGFnTG9jYXRpb24gPSBjcHVfdG9fbGUzMigKIAkJCQkJaWluZm8tPmlfbG9jYXRpb24ubG9naWNhbEJsb2NrTnVtKTsKIAljcmNsZW4gKz0gaWluZm8tPmlfbGVuRUF0dHIgKyBpaW5mby0+aV9sZW5BbGxvYyAtCi0JCQkJCQkJCXNpemVvZih0YWcpOworCQkJCQkJCQlzaXplb2Yoc3RydWN0IHRhZyk7CiAJZmUtPmRlc2NUYWcuZGVzY0NSQ0xlbmd0aCA9IGNwdV90b19sZTE2KGNyY2xlbik7Ci0JZmUtPmRlc2NUYWcuZGVzY0NSQyA9IGNwdV90b19sZTE2KGNyY19pdHVfdCgwLCAoY2hhciAqKWZlICsgc2l6ZW9mKHRhZyksCisJZmUtPmRlc2NUYWcuZGVzY0NSQyA9IGNwdV90b19sZTE2KGNyY19pdHVfdCgwLCAoY2hhciAqKWZlICsgc2l6ZW9mKHN0cnVjdCB0YWcpLAogCQkJCQkJICBjcmNsZW4pKTsKIAlmZS0+ZGVzY1RhZy50YWdDaGVja3N1bSA9IHVkZl90YWdfY2hlY2tzdW0oJmZlLT5kZXNjVGFnKTsKIApAQCAtMTYwNiw3ICsxNjEzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdHJ1Y3QgaW5vZGUgKnVkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGtlcm5lbF9sYl9hZGRyIGlubykKK3N0cnVjdCBpbm9kZSAqdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtlcm5lbF9sYl9hZGRyICppbm8pCiB7CiAJdW5zaWduZWQgbG9uZyBibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCBpbm8sIDApOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgYmxvY2spOwpAQCAtMTYxNSw3ICsxNjIyLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykgewotCQltZW1jcHkoJlVERl9JKGlub2RlKS0+aV9sb2NhdGlvbiwgJmlubywgc2l6ZW9mKGtlcm5lbF9sYl9hZGRyKSk7CisJCW1lbWNweSgmVURGX0koaW5vZGUpLT5pX2xvY2F0aW9uLCBpbm8sIHNpemVvZihzdHJ1Y3Qga2VybmVsX2xiX2FkZHIpKTsKIAkJX191ZGZfcmVhZF9pbm9kZShpbm9kZSk7CiAJCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwogCX0KQEAgLTE2MjMsMTAgKzE2MzAsMTAgQEAKIAlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkKIAkJZ290byBvdXRfaXB1dDsKIAotCWlmIChpbm8ubG9naWNhbEJsb2NrTnVtID49IFVERl9TQihzYiktPgotCQkJc19wYXJ0bWFwc1tpbm8ucGFydGl0aW9uUmVmZXJlbmNlTnVtXS5zX3BhcnRpdGlvbl9sZW4pIHsKKwlpZiAoaW5vLT5sb2dpY2FsQmxvY2tOdW0gPj0gVURGX1NCKHNiKS0+CisJCQlzX3BhcnRtYXBzW2luby0+cGFydGl0aW9uUmVmZXJlbmNlTnVtXS5zX3BhcnRpdGlvbl9sZW4pIHsKIAkJdWRmX2RlYnVnKCJibG9jaz0lZCwgcGFydGl0aW9uPSVkIG91dCBvZiByYW5nZVxuIiwKLQkJCSAgaW5vLmxvZ2ljYWxCbG9ja051bSwgaW5vLnBhcnRpdGlvblJlZmVyZW5jZU51bSk7CisJCQkgIGluby0+bG9naWNhbEJsb2NrTnVtLCBpbm8tPnBhcnRpdGlvblJlZmVyZW5jZU51bSk7CiAJCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKIAkJZ290byBvdXRfaXB1dDsKIAl9CkBAIC0xNjM5LDExICsxNjQ2LDExIEBACiB9CiAKIGludDhfdCB1ZGZfYWRkX2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcywKLQkJICAgIGtlcm5lbF9sYl9hZGRyIGVsb2MsIHVpbnQzMl90IGVsZW4sIGludCBpbmMpCisJCSAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90IGVsZW4sIGludCBpbmMpCiB7CiAJaW50IGFkc2l6ZTsKLQlzaG9ydF9hZCAqc2FkID0gTlVMTDsKLQlsb25nX2FkICpsYWQgPSBOVUxMOworCXN0cnVjdCBzaG9ydF9hZCAqc2FkID0gTlVMTDsKKwlzdHJ1Y3QgbG9uZ19hZCAqbGFkID0gTlVMTDsKIAlzdHJ1Y3QgYWxsb2NFeHREZXNjICphZWQ7CiAJaW50OF90IGV0eXBlOwogCXVpbnQ4X3QgKnB0cjsKQEAgLTE2NTcsOSArMTY2NCw5IEBACiAJCXB0ciA9IGVwb3MtPmJoLT5iX2RhdGEgKyBlcG9zLT5vZmZzZXQ7CiAKIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJYWRzaXplID0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJZWxzZSBpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJZWxzZQogCQlyZXR1cm4gLTE7CiAKQEAgLTE2NjcsNyArMTY3NCw3IEBACiAJCWNoYXIgKnNwdHIsICpkcHRyOwogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5iaDsKIAkJaW50IGVyciwgbG9mZnNldDsKLQkJa2VybmVsX2xiX2FkZHIgb2Jsb2MgPSBlcG9zLT5ibG9jazsKKwkJc3RydWN0IGtlcm5lbF9sYl9hZGRyIG9ibG9jID0gZXBvcy0+YmxvY2s7CiAKIAkJZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtID0gdWRmX25ld19ibG9jayhpbm9kZS0+aV9zYiwgTlVMTCwKIAkJCQkJCW9ibG9jLnBhcnRpdGlvblJlZmVyZW5jZU51bSwKQEAgLTE2NzUsNyArMTY4Miw3IEBACiAJCWlmICghZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtKQogCQkJcmV0dXJuIC0xOwogCQluYmggPSB1ZGZfdGdldGJsayhpbm9kZS0+aV9zYiwgdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtPmlfc2IsCi0JCQkJCQkJCSBlcG9zLT5ibG9jaywKKwkJCQkJCQkJICZlcG9zLT5ibG9jaywKIAkJCQkJCQkJIDApKTsKIAkJaWYgKCFuYmgpCiAJCQlyZXR1cm4gLTE7CkBAIC0xNzEyLDIwICsxNzE5LDIwIEBACiAJCX0KIAkJaWYgKFVERl9TQihpbm9kZS0+aV9zYiktPnNfdWRmcmV2ID49IDB4MDIwMCkKIAkJCXVkZl9uZXdfdGFnKG5iaC0+Yl9kYXRhLCBUQUdfSURFTlRfQUVELCAzLCAxLAotCQkJCSAgICBlcG9zLT5ibG9jay5sb2dpY2FsQmxvY2tOdW0sIHNpemVvZih0YWcpKTsKKwkJCQkgICAgZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtLCBzaXplb2Yoc3RydWN0IHRhZykpOwogCQllbHNlCiAJCQl1ZGZfbmV3X3RhZyhuYmgtPmJfZGF0YSwgVEFHX0lERU5UX0FFRCwgMiwgMSwKLQkJCQkgICAgZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtLCBzaXplb2YodGFnKSk7CisJCQkJICAgIGVwb3MtPmJsb2NrLmxvZ2ljYWxCbG9ja051bSwgc2l6ZW9mKHN0cnVjdCB0YWcpKTsKIAkJc3dpdGNoIChpaW5mby0+aV9hbGxvY190eXBlKSB7CiAJCWNhc2UgSUNCVEFHX0ZMQUdfQURfU0hPUlQ6Ci0JCQlzYWQgPSAoc2hvcnRfYWQgKilzcHRyOworCQkJc2FkID0gKHN0cnVjdCBzaG9ydF9hZCAqKXNwdHI7CiAJCQlzYWQtPmV4dExlbmd0aCA9IGNwdV90b19sZTMyKEVYVF9ORVhUX0VYVEVOVF9BTExPQ0RFQ1MgfAogCQkJCQkJICAgICBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOwogCQkJc2FkLT5leHRQb3NpdGlvbiA9CiAJCQkJY3B1X3RvX2xlMzIoZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtKTsKIAkJCWJyZWFrOwogCQljYXNlIElDQlRBR19GTEFHX0FEX0xPTkc6Ci0JCQlsYWQgPSAobG9uZ19hZCAqKXNwdHI7CisJCQlsYWQgPSAoc3RydWN0IGxvbmdfYWQgKilzcHRyOwogCQkJbGFkLT5leHRMZW5ndGggPSBjcHVfdG9fbGUzMihFWFRfTkVYVF9FWFRFTlRfQUxMT0NERUNTIHwKIAkJCQkJCSAgICAgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKIAkJCWxhZC0+ZXh0TG9jYXRpb24gPSBjcHVfdG9fbGVsYihlcG9zLT5ibG9jayk7CkBAIC0xNzY5LDEyICsxNzc2LDEyIEBACiB9CiAKIGludDhfdCB1ZGZfd3JpdGVfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICplcG9zLAotCQkgICAgICBrZXJuZWxfbGJfYWRkciBlbG9jLCB1aW50MzJfdCBlbGVuLCBpbnQgaW5jKQorCQkgICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90IGVsZW4sIGludCBpbmMpCiB7CiAJaW50IGFkc2l6ZTsKIAl1aW50OF90ICpwdHI7Ci0Jc2hvcnRfYWQgKnNhZDsKLQlsb25nX2FkICpsYWQ7CisJc3RydWN0IHNob3J0X2FkICpzYWQ7CisJc3RydWN0IGxvbmdfYWQgKmxhZDsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpOwogCiAJaWYgKCFlcG9zLT5iaCkKQEAgLTE3ODYsMTcgKzE3OTMsMTcgQEAKIAogCXN3aXRjaCAoaWluZm8tPmlfYWxsb2NfdHlwZSkgewogCWNhc2UgSUNCVEFHX0ZMQUdfQURfU0hPUlQ6Ci0JCXNhZCA9IChzaG9ydF9hZCAqKXB0cjsKKwkJc2FkID0gKHN0cnVjdCBzaG9ydF9hZCAqKXB0cjsKIAkJc2FkLT5leHRMZW5ndGggPSBjcHVfdG9fbGUzMihlbGVuKTsKLQkJc2FkLT5leHRQb3NpdGlvbiA9IGNwdV90b19sZTMyKGVsb2MubG9naWNhbEJsb2NrTnVtKTsKLQkJYWRzaXplID0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJc2FkLT5leHRQb3NpdGlvbiA9IGNwdV90b19sZTMyKGVsb2MtPmxvZ2ljYWxCbG9ja051bSk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCQlicmVhazsKIAljYXNlIElDQlRBR19GTEFHX0FEX0xPTkc6Ci0JCWxhZCA9IChsb25nX2FkICopcHRyOworCQlsYWQgPSAoc3RydWN0IGxvbmdfYWQgKilwdHI7CiAJCWxhZC0+ZXh0TGVuZ3RoID0gY3B1X3RvX2xlMzIoZWxlbik7Ci0JCWxhZC0+ZXh0TG9jYXRpb24gPSBjcHVfdG9fbGVsYihlbG9jKTsKKwkJbGFkLT5leHRMb2NhdGlvbiA9IGNwdV90b19sZWxiKCplbG9jKTsKIAkJbWVtc2V0KGxhZC0+aW1wVXNlLCAweDAwLCBzaXplb2YobGFkLT5pbXBVc2UpKTsKLQkJYWRzaXplID0gc2l6ZW9mKGxvbmdfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CkBAIC0xODIzLDcgKzE4MzAsNyBAQAogfQogCiBpbnQ4X3QgdWRmX25leHRfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICplcG9zLAotCQkgICAgIGtlcm5lbF9sYl9hZGRyICplbG9jLCB1aW50MzJfdCAqZWxlbiwgaW50IGluYykKKwkJICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90ICplbGVuLCBpbnQgaW5jKQogewogCWludDhfdCBldHlwZTsKIApAQCAtMTgzMyw3ICsxODQwLDcgQEAKIAkJZXBvcy0+YmxvY2sgPSAqZWxvYzsKIAkJZXBvcy0+b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpOwogCQlicmVsc2UoZXBvcy0+YmgpOwotCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLT5pX3NiLCBlcG9zLT5ibG9jaywgMCk7CisJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtPmlfc2IsICZlcG9zLT5ibG9jaywgMCk7CiAJCWVwb3MtPmJoID0gdWRmX3RyZWFkKGlub2RlLT5pX3NiLCBibG9jayk7CiAJCWlmICghZXBvcy0+YmgpIHsKIAkJCXVkZl9kZWJ1ZygicmVhZGluZyBibG9jayAlZCBmYWlsZWQhXG4iLCBibG9jayk7CkBAIC0xODQ1LDEzICsxODUyLDEzIEBACiB9CiAKIGludDhfdCB1ZGZfY3VycmVudF9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmVwb3MsCi0JCQlrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgKmVsZW4sIGludCBpbmMpCisJCQlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90ICplbGVuLCBpbnQgaW5jKQogewogCWludCBhbGVuOwogCWludDhfdCBldHlwZTsKIAl1aW50OF90ICpwdHI7Ci0Jc2hvcnRfYWQgKnNhZDsKLQlsb25nX2FkICpsYWQ7CisJc3RydWN0IHNob3J0X2FkICpzYWQ7CisJc3RydWN0IGxvbmdfYWQgKmxhZDsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpOwogCiAJaWYgKCFlcG9zLT5iaCkgewpAQCAtMTkwMCw5ICsxOTA3LDkgQEAKIH0KIAogc3RhdGljIGludDhfdCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zLAotCQkJICAgICAga2VybmVsX2xiX2FkZHIgbmVsb2MsIHVpbnQzMl90IG5lbGVuKQorCQkJICAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyIG5lbG9jLCB1aW50MzJfdCBuZWxlbikKIHsKLQlrZXJuZWxfbGJfYWRkciBvZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgb2Vsb2M7CiAJdWludDMyX3Qgb2VsZW47CiAJaW50OF90IGV0eXBlOwogCkBAIC0xOTEwLDE4ICsxOTE3LDE4IEBACiAJCWdldF9iaChlcG9zLmJoKTsKIAogCXdoaWxlICgoZXR5cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmZXBvcywgJm9lbG9jLCAmb2VsZW4sIDApKSAhPSAtMSkgewotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJmVwb3MsIG5lbG9jLCBuZWxlbiwgMSk7CisJCXVkZl93cml0ZV9hZXh0KGlub2RlLCAmZXBvcywgJm5lbG9jLCBuZWxlbiwgMSk7CiAJCW5lbG9jID0gb2Vsb2M7CiAJCW5lbGVuID0gKGV0eXBlIDw8IDMwKSB8IG9lbGVuOwogCX0KLQl1ZGZfYWRkX2FleHQoaW5vZGUsICZlcG9zLCBuZWxvYywgbmVsZW4sIDEpOworCXVkZl9hZGRfYWV4dChpbm9kZSwgJmVwb3MsICZuZWxvYywgbmVsZW4sIDEpOwogCWJyZWxzZShlcG9zLmJoKTsKIAogCXJldHVybiAobmVsZW4gPj4gMzApOwogfQogCiBpbnQ4X3QgdWRmX2RlbGV0ZV9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcywKLQkJICAgICAgIGtlcm5lbF9sYl9hZGRyIGVsb2MsIHVpbnQzMl90IGVsZW4pCisJCSAgICAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYywgdWludDMyX3QgZWxlbikKIHsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIG9lcG9zOwogCWludCBhZHNpemU7CkBAIC0xOTM2LDkgKzE5NDMsOSBAQAogCiAJaWluZm8gPSBVREZfSShpbm9kZSk7CiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCWFkc2l6ZSA9IHNpemVvZihzaG9ydF9hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCWVsc2UgaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJYWRzaXplID0gc2l6ZW9mKGxvbmdfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCWVsc2UKIAkJYWRzaXplID0gMDsKIApAQCAtMTk0Nyw3ICsxOTU0LDcgQEAKIAkJcmV0dXJuIC0xOwogCiAJd2hpbGUgKChldHlwZSA9IHVkZl9uZXh0X2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywgJmVsZW4sIDEpKSAhPSAtMSkgewotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCBlbG9jLCAoZXR5cGUgPDwgMzApIHwgZWxlbiwgMSk7CisJCXVkZl93cml0ZV9hZXh0KGlub2RlLCAmb2Vwb3MsICZlbG9jLCAoZXR5cGUgPDwgMzApIHwgZWxlbiwgMSk7CiAJCWlmIChvZXBvcy5iaCAhPSBlcG9zLmJoKSB7CiAJCQlvZXBvcy5ibG9jayA9IGVwb3MuYmxvY2s7CiAJCQlicmVsc2Uob2Vwb3MuYmgpOwpAQCAtMTk1NiwxMyArMTk2MywxMyBAQAogCQkJb2Vwb3Mub2Zmc2V0ID0gZXBvcy5vZmZzZXQgLSBhZHNpemU7CiAJCX0KIAl9Ci0JbWVtc2V0KCZlbG9jLCAweDAwLCBzaXplb2Yoa2VybmVsX2xiX2FkZHIpKTsKKwltZW1zZXQoJmVsb2MsIDB4MDAsIHNpemVvZihzdHJ1Y3Qga2VybmVsX2xiX2FkZHIpKTsKIAllbGVuID0gMDsKIAogCWlmIChlcG9zLmJoICE9IG9lcG9zLmJoKSB7Ci0JCXVkZl9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgaW5vZGUsIGVwb3MuYmxvY2ssIDAsIDEpOwotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCBlbG9jLCBlbGVuLCAxKTsKLQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZvZXBvcywgZWxvYywgZWxlbiwgMSk7CisJCXVkZl9mcmVlX2Jsb2Nrcyhpbm9kZS0+aV9zYiwgaW5vZGUsICZlcG9zLmJsb2NrLCAwLCAxKTsKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZvZXBvcywgJmVsb2MsIGVsZW4sIDEpOworCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCAmZWxvYywgZWxlbiwgMSk7CiAJCWlmICghb2Vwb3MuYmgpIHsKIAkJCWlpbmZvLT5pX2xlbkFsbG9jIC09IChhZHNpemUgKiAyKTsKIAkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwpAQCAtMTk3OSw3ICsxOTg2LDcgQEAKIAkJCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKG9lcG9zLmJoLCBpbm9kZSk7CiAJCX0KIAl9IGVsc2UgewotCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJm9lcG9zLCBlbG9jLCBlbGVuLCAxKTsKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZvZXBvcywgJmVsb2MsIGVsZW4sIDEpOwogCQlpZiAoIW9lcG9zLmJoKSB7CiAJCQlpaW5mby0+aV9sZW5BbGxvYyAtPSBhZHNpemU7CiAJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKQEAgLTIwMDQsNyArMjAxMSw3IEBACiB9CiAKIGludDhfdCBpbm9kZV9ibWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrLAotCQkgIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKnBvcywga2VybmVsX2xiX2FkZHIgKmVsb2MsCisJCSAgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqcG9zLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmVsb2MsCiAJCSAgdWludDMyX3QgKmVsZW4sIHNlY3Rvcl90ICpvZmZzZXQpCiB7CiAJdW5zaWduZWQgY2hhciBibG9ja3NpemVfYml0cyA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwpAQCAtMjAzNiw3ICsyMDQzLDcgQEAKIAogbG9uZyB1ZGZfYmxvY2tfbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrKQogewotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJdWludDMyX3QgZWxlbjsKIAlzZWN0b3JfdCBvZmZzZXQ7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0ge307CkBAIC0yMDQ2LDcgKzIwNTMsNyBAQAogCiAJaWYgKGlub2RlX2JtYXAoaW5vZGUsIGJsb2NrLCAmZXBvcywgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KSA9PQogCQkJCQkJKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQotCQlyZXQgPSB1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgZWxvYywgb2Zmc2V0KTsKKwkJcmV0ID0gdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtPmlfc2IsICZlbG9jLCBvZmZzZXQpOwogCWVsc2UKIAkJcmV0ID0gMDsKIApkaWZmIC0tZ2l0IGEvZnMvdWRmL21pc2MuYyBiL2ZzL3VkZi9taXNjLmMKaW5kZXggODRiZjBmZC4uOTIxNTcwMCAxMDA2NDQKLS0tIGEvZnMvdWRmL21pc2MuYworKysgYi9mcy91ZGYvbWlzYy5jCkBAIC0xMzQsMTAgKzEzNCwxMCBAQAogCQkJfQogCQl9CiAJCS8qIHJld3JpdGUgQ1JDICsgY2hlY2tzdW0gb2YgZWFoZCAqLwotCQljcmNsZW4gPSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkQXR0ckhlYWRlckRlc2MpIC0gc2l6ZW9mKHRhZyk7CisJCWNyY2xlbiA9IHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRBdHRySGVhZGVyRGVzYykgLSBzaXplb2Yoc3RydWN0IHRhZyk7CiAJCWVhaGQtPmRlc2NUYWcuZGVzY0NSQ0xlbmd0aCA9IGNwdV90b19sZTE2KGNyY2xlbik7CiAJCWVhaGQtPmRlc2NUYWcuZGVzY0NSQyA9IGNwdV90b19sZTE2KGNyY19pdHVfdCgwLCAoY2hhciAqKWVhaGQgKwotCQkJCQkJc2l6ZW9mKHRhZyksIGNyY2xlbikpOworCQkJCQkJc2l6ZW9mKHN0cnVjdCB0YWcpLCBjcmNsZW4pKTsKIAkJZWFoZC0+ZGVzY1RhZy50YWdDaGVja3N1bSA9IHVkZl90YWdfY2hlY2tzdW0oJmVhaGQtPmRlc2NUYWcpOwogCQlpaW5mby0+aV9sZW5FQXR0ciArPSBzaXplOwogCQlyZXR1cm4gKHN0cnVjdCBnZW5lcmljRm9ybWF0ICopJmVhW29mZnNldF07CkBAIC0yMDIsNyArMjAyLDcgQEAKIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX3JlYWRfdGFnZ2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVpbnQzMl90IGJsb2NrLAogCQkJCSAgICB1aW50MzJfdCBsb2NhdGlvbiwgdWludDE2X3QgKmlkZW50KQogewotCXRhZyAqdGFnX3A7CisJc3RydWN0IHRhZyAqdGFnX3A7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAKIAkvKiBSZWFkIHRoZSBibG9jayAqLwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXRhZ19wID0gKHRhZyAqKShiaC0+Yl9kYXRhKTsKKwl0YWdfcCA9IChzdHJ1Y3QgdGFnICopKGJoLT5iX2RhdGEpOwogCiAJKmlkZW50ID0gbGUxNl90b19jcHUodGFnX3AtPnRhZ0lkZW50KTsKIApAQCAtMjQxLDkgKzI0MSw5IEBACiAJfQogCiAJLyogVmVyaWZ5IHRoZSBkZXNjcmlwdG9yIENSQyAqLwotCWlmIChsZTE2X3RvX2NwdSh0YWdfcC0+ZGVzY0NSQ0xlbmd0aCkgKyBzaXplb2YodGFnKSA+IHNiLT5zX2Jsb2Nrc2l6ZSB8fAorCWlmIChsZTE2X3RvX2NwdSh0YWdfcC0+ZGVzY0NSQ0xlbmd0aCkgKyBzaXplb2Yoc3RydWN0IHRhZykgPiBzYi0+c19ibG9ja3NpemUgfHwKIAkgICAgbGUxNl90b19jcHUodGFnX3AtPmRlc2NDUkMpID09IGNyY19pdHVfdCgwLAotCQkJCQliaC0+Yl9kYXRhICsgc2l6ZW9mKHRhZyksCisJCQkJCWJoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IHRhZyksCiAJCQkJCWxlMTZfdG9fY3B1KHRhZ19wLT5kZXNjQ1JDTGVuZ3RoKSkpCiAJCXJldHVybiBiaDsKIApAQCAtMjU1LDI3ICsyNTUsMjggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RydWN0IGJ1ZmZlcl9oZWFkICp1ZGZfcmVhZF9wdGFnZ2VkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGtlcm5lbF9sYl9hZGRyIGxvYywKK3N0cnVjdCBidWZmZXJfaGVhZCAqdWRmX3JlYWRfcHRhZ2dlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCSAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpsb2MsCiAJCQkJICAgICB1aW50MzJfdCBvZmZzZXQsIHVpbnQxNl90ICppZGVudCkKIHsKIAlyZXR1cm4gdWRmX3JlYWRfdGFnZ2VkKHNiLCB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgbG9jLCBvZmZzZXQpLAotCQkJICAgICAgIGxvYy5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQsIGlkZW50KTsKKwkJCSAgICAgICBsb2MtPmxvZ2ljYWxCbG9ja051bSArIG9mZnNldCwgaWRlbnQpOwogfQogCiB2b2lkIHVkZl91cGRhdGVfdGFnKGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCiB7Ci0JdGFnICp0cHRyID0gKHRhZyAqKWRhdGE7Ci0JbGVuZ3RoIC09IHNpemVvZih0YWcpOworCXN0cnVjdCB0YWcgKnRwdHIgPSAoc3RydWN0IHRhZyAqKWRhdGE7CisJbGVuZ3RoIC09IHNpemVvZihzdHJ1Y3QgdGFnKTsKIAogCXRwdHItPmRlc2NDUkNMZW5ndGggPSBjcHVfdG9fbGUxNihsZW5ndGgpOwotCXRwdHItPmRlc2NDUkMgPSBjcHVfdG9fbGUxNihjcmNfaXR1X3QoMCwgZGF0YSArIHNpemVvZih0YWcpLCBsZW5ndGgpKTsKKwl0cHRyLT5kZXNjQ1JDID0gY3B1X3RvX2xlMTYoY3JjX2l0dV90KDAsIGRhdGEgKyBzaXplb2Yoc3RydWN0IHRhZyksIGxlbmd0aCkpOwogCXRwdHItPnRhZ0NoZWNrc3VtID0gdWRmX3RhZ19jaGVja3N1bSh0cHRyKTsKIH0KIAogdm9pZCB1ZGZfbmV3X3RhZyhjaGFyICpkYXRhLCB1aW50MTZfdCBpZGVudCwgdWludDE2X3QgdmVyc2lvbiwgdWludDE2X3Qgc251bSwKIAkJIHVpbnQzMl90IGxvYywgaW50IGxlbmd0aCkKIHsKLQl0YWcgKnRwdHIgPSAodGFnICopZGF0YTsKKwlzdHJ1Y3QgdGFnICp0cHRyID0gKHN0cnVjdCB0YWcgKilkYXRhOwogCXRwdHItPnRhZ0lkZW50ID0gY3B1X3RvX2xlMTYoaWRlbnQpOwogCXRwdHItPmRlc2NWZXJzaW9uID0gY3B1X3RvX2xlMTYodmVyc2lvbik7CiAJdHB0ci0+dGFnU2VyaWFsTnVtID0gY3B1X3RvX2xlMTYoc251bSk7CkBAIC0yODMsMTIgKzI4NCwxMiBAQAogCXVkZl91cGRhdGVfdGFnKGRhdGEsIGxlbmd0aCk7CiB9CiAKLXU4IHVkZl90YWdfY2hlY2tzdW0oY29uc3QgdGFnICp0KQordTggdWRmX3RhZ19jaGVja3N1bShjb25zdCBzdHJ1Y3QgdGFnICp0KQogewogCXU4ICpkYXRhID0gKHU4ICopdDsKIAl1OCBjaGVja3N1bSA9IDA7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IHNpemVvZih0YWcpOyArK2kpCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdGFnKTsgKytpKQogCQlpZiAoaSAhPSA0KSAvKiBwb3NpdGlvbiBvZiBjaGVja3N1bSAqLwogCQkJY2hlY2tzdW0gKz0gZGF0YVtpXTsKIAlyZXR1cm4gY2hlY2tzdW07CmRpZmYgLS1naXQgYS9mcy91ZGYvbmFtZWkuYyBiL2ZzL3VkZi9uYW1laS5jCmluZGV4IGY4NGJmYWEuLjZhMjlmYTM0IDEwMDY0NAotLS0gYS9mcy91ZGYvbmFtZWkuYworKysgYi9mcy91ZGYvbmFtZWkuYwpAQCAtNDcsNyArNDcsNyBAQAogCQkgc3RydWN0IGZpbGVJZGVudERlc2MgKnNmaSwgc3RydWN0IHVkZl9maWxlaWRlbnRfYmggKmZpYmgsCiAJCSB1aW50OF90ICppbXB1c2UsIHVpbnQ4X3QgKmZpbGVpZGVudCkKIHsKLQl1aW50MTZfdCBjcmNsZW4gPSBmaWJoLT5lb2Zmc2V0IC0gZmliaC0+c29mZnNldCAtIHNpemVvZih0YWcpOworCXVpbnQxNl90IGNyY2xlbiA9IGZpYmgtPmVvZmZzZXQgLSBmaWJoLT5zb2Zmc2V0IC0gc2l6ZW9mKHN0cnVjdCB0YWcpOwogCXVpbnQxNl90IGNyYzsKIAlpbnQgb2Zmc2V0OwogCXVpbnQxNl90IGxpdSA9IGxlMTZfdG9fY3B1KGNmaS0+bGVuZ3RoT2ZJbXBVc2UpOwpAQCAtOTksMTggKzk5LDE4IEBACiAJCW1lbXNldChmaWJoLT5lYmgtPmJfZGF0YSwgMHgwMCwgcGFkbGVuICsgb2Zmc2V0KTsKIAl9CiAKLQljcmMgPSBjcmNfaXR1X3QoMCwgKHVpbnQ4X3QgKiljZmkgKyBzaXplb2YodGFnKSwKLQkJICAgICAgc2l6ZW9mKHN0cnVjdCBmaWxlSWRlbnREZXNjKSAtIHNpemVvZih0YWcpKTsKKwljcmMgPSBjcmNfaXR1X3QoMCwgKHVpbnQ4X3QgKiljZmkgKyBzaXplb2Yoc3RydWN0IHRhZyksCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgZmlsZUlkZW50RGVzYykgLSBzaXplb2Yoc3RydWN0IHRhZykpOwogCiAJaWYgKGZpYmgtPnNiaCA9PSBmaWJoLT5lYmgpIHsKIAkJY3JjID0gY3JjX2l0dV90KGNyYywgKHVpbnQ4X3QgKilzZmktPmltcFVzZSwKLQkJCSAgICAgIGNyY2xlbiArIHNpemVvZih0YWcpIC0KKwkJCSAgICAgIGNyY2xlbiArIHNpemVvZihzdHJ1Y3QgdGFnKSAtCiAJCQkgICAgICBzaXplb2Yoc3RydWN0IGZpbGVJZGVudERlc2MpKTsKIAl9IGVsc2UgaWYgKHNpemVvZihzdHJ1Y3QgZmlsZUlkZW50RGVzYykgPj0gLWZpYmgtPnNvZmZzZXQpIHsKIAkJY3JjID0gY3JjX2l0dV90KGNyYywgZmliaC0+ZWJoLT5iX2RhdGEgKwogCQkJCQlzaXplb2Yoc3RydWN0IGZpbGVJZGVudERlc2MpICsKIAkJCQkJZmliaC0+c29mZnNldCwKLQkJCSAgICAgIGNyY2xlbiArIHNpemVvZih0YWcpIC0KKwkJCSAgICAgIGNyY2xlbiArIHNpemVvZihzdHJ1Y3QgdGFnKSAtCiAJCQkJCXNpemVvZihzdHJ1Y3QgZmlsZUlkZW50RGVzYykpOwogCX0gZWxzZSB7CiAJCWNyYyA9IGNyY19pdHVfdChjcmMsICh1aW50OF90ICopc2ZpLT5pbXBVc2UsCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl1aW50OF90IGxmaTsKIAl1aW50MTZfdCBsaXU7CiAJbG9mZl90IHNpemU7Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYzsKIAl1aW50MzJfdCBlbGVuOwogCXNlY3Rvcl90IG9mZnNldDsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MgPSB7fTsKQEAgLTE3MSwxMiArMTcxLDEyIEBACiAJCWlmIChpbm9kZV9ibWFwKGRpciwgZl9wb3MgPj4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzLCAmZXBvcywKIAkJICAgICZlbG9jLCAmZWxlbiwgJm9mZnNldCkgIT0gKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQogCQkJZ290byBvdXRfZXJyOwotCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgZWxvYywgb2Zmc2V0KTsKKwkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsICZlbG9jLCBvZmZzZXQpOwogCQlpZiAoKCsrb2Zmc2V0IDw8IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgPCBlbGVuKSB7CiAJCQlpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc2hvcnRfYWQpOworCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCQkJZWxzZSBpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihsb25nX2FkKTsKKwkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCQl9IGVsc2UKIAkJCW9mZnNldCA9IDA7CiAKQEAgLTI2OCw3ICsyNjgsNyBAQAogI2lmZGVmIFVERl9SRUNPVkVSWQogCS8qIHRlbXBvcmFyeSBzaG9ydGhhbmQgZm9yIHNwZWNpZnlpbmcgZmlsZXMgYnkgaW5vZGUgbnVtYmVyICovCiAJaWYgKCFzdHJuY21wKGRlbnRyeS0+ZF9uYW1lLm5hbWUsICIuQj0iLCAzKSkgewotCQlrZXJuZWxfbGJfYWRkciBsYiA9IHsKKwkJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGxiID0gewogCQkJLmxvZ2ljYWxCbG9ja051bSA9IDAsCiAJCQkucGFydGl0aW9uUmVmZXJlbmNlTnVtID0KIAkJCQlzaW1wbGVfc3RydG91bChkZW50cnktPmRfbmFtZS5uYW1lICsgMywKQEAgLTI4MywxMSArMjgzLDE0IEBACiAjZW5kaWYgLyogVURGX1JFQ09WRVJZICovCiAKIAlpZiAodWRmX2ZpbmRfZW50cnkoZGlyLCAmZGVudHJ5LT5kX25hbWUsICZmaWJoLCAmY2ZpKSkgeworCQlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgbG9jOworCiAJCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKIAkJCWJyZWxzZShmaWJoLmViaCk7CiAJCWJyZWxzZShmaWJoLnNiaCk7CiAKLQkJaW5vZGUgPSB1ZGZfaWdldChkaXItPmlfc2IsIGxlbGJfdG9fY3B1KGNmaS5pY2IuZXh0TG9jYXRpb24pKTsKKwkJbG9jID0gbGVsYl90b19jcHUoY2ZpLmljYi5leHRMb2NhdGlvbik7CisJCWlub2RlID0gdWRmX2lnZXQoZGlyLT5pX3NiLCAmbG9jKTsKIAkJaWYgKCFpbm9kZSkgewogCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIEVSUl9QVFIoLUVBQ0NFUyk7CkBAIC0zMTMsNyArMzE2LDcgQEAKIAl1aW50OF90IGxmaTsKIAl1aW50MTZfdCBsaXU7CiAJaW50IGJsb2NrOwotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJdWludDMyX3QgZWxlbiA9IDA7CiAJc2VjdG9yX3Qgb2Zmc2V0OwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcyA9IHt9OwpAQCAtMzUxLDE2ICszNTQsMTYgQEAKIAkJaWYgKGlub2RlX2JtYXAoZGlyLCBmX3BvcyA+PiBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMsICZlcG9zLAogCQkgICAgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KSAhPSAoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpIHsKIAkJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLAotCQkJCQlkaW5mby0+aV9sb2NhdGlvbiwgMCk7CisJCQkJCSZkaW5mby0+aV9sb2NhdGlvbiwgMCk7CiAJCQlmaWJoLT5zb2Zmc2V0ID0gZmliaC0+ZW9mZnNldCA9IHNiLT5zX2Jsb2Nrc2l6ZTsKIAkJCWdvdG8gYWRkOwogCQl9Ci0JCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCBlbG9jLCBvZmZzZXQpOworCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJmVsb2MsIG9mZnNldCk7CiAJCWlmICgoKytvZmZzZXQgPDwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSA8IGVsZW4pIHsKIAkJCWlmIChkaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzaG9ydF9hZCk7CiAJCQllbHNlIGlmIChkaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKGxvbmdfYWQpOworCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3QgbG9uZ19hZCk7CiAJCX0gZWxzZQogCQkJb2Zmc2V0ID0gMDsKIApAQCAtNDA5LDEwICs0MTIsMTAgQEAKIAlpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSAhPSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IgJiYgZWxlbikgewogCQllbGVuID0gKGVsZW4gKyBzYi0+c19ibG9ja3NpemUgLSAxKSAmIH4oc2ItPnNfYmxvY2tzaXplIC0gMSk7CiAJCWlmIChkaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCQllbHNlIGlmIChkaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCQllcG9zLm9mZnNldCAtPSBzaXplb2YobG9uZ19hZCk7Ci0JCXVkZl93cml0ZV9hZXh0KGRpciwgJmVwb3MsIGVsb2MsIGVsZW4sIDEpOworCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKKwkJdWRmX3dyaXRlX2FleHQoZGlyLCAmZXBvcywgJmVsb2MsIGVsZW4sIDEpOwogCX0KIAlmX3BvcyArPSBuZmlkbGVuOwogCkBAIC00OTQsMTAgKzQ5NywxMCBAQAogCW1lbXNldChjZmksIDAsIHNpemVvZihzdHJ1Y3QgZmlsZUlkZW50RGVzYykpOwogCWlmIChVREZfU0Ioc2IpLT5zX3VkZnJldiA+PSAweDAyMDApCiAJCXVkZl9uZXdfdGFnKChjaGFyICopY2ZpLCBUQUdfSURFTlRfRklELCAzLCAxLCBibG9jaywKLQkJCSAgICBzaXplb2YodGFnKSk7CisJCQkgICAgc2l6ZW9mKHN0cnVjdCB0YWcpKTsKIAllbHNlCiAJCXVkZl9uZXdfdGFnKChjaGFyICopY2ZpLCBUQUdfSURFTlRfRklELCAyLCAxLCBibG9jaywKLQkJCSAgICBzaXplb2YodGFnKSk7CisJCQkgICAgc2l6ZW9mKHN0cnVjdCB0YWcpKTsKIAljZmktPmZpbGVWZXJzaW9uTnVtID0gY3B1X3RvX2xlMTYoMSk7CiAJY2ZpLT5sZW5ndGhGaWxlSWRlbnQgPSBuYW1lbGVuOwogCWNmaS0+bGVuZ3RoT2ZJbXBVc2UgPSBjcHVfdG9fbGUxNigwKTsKQEAgLTUzMCw3ICs1MzMsNyBAQAogCWNmaS0+ZmlsZUNoYXJhY3RlcmlzdGljcyB8PSBGSURfRklMRV9DSEFSX0RFTEVURUQ7CiAKIAlpZiAoVURGX1FVRVJZX0ZMQUcoaW5vZGUtPmlfc2IsIFVERl9GTEFHX1NUUklDVCkpCi0JCW1lbXNldCgmKGNmaS0+aWNiKSwgMHgwMCwgc2l6ZW9mKGxvbmdfYWQpKTsKKwkJbWVtc2V0KCYoY2ZpLT5pY2IpLCAweDAwLCBzaXplb2Yoc3RydWN0IGxvbmdfYWQpKTsKIAogCXJldHVybiB1ZGZfd3JpdGVfZmkoaW5vZGUsIGNmaSwgZmksIGZpYmgsIE5VTEwsIE5VTEwpOwogfQpAQCAtNzEwLDcgKzcxMyw3IEBACiAJbG9mZl90IGZfcG9zOwogCWxvZmZfdCBzaXplID0gdWRmX2V4dDBfb2Zmc2V0KGRpcikgKyBkaXItPmlfc2l6ZTsKIAlpbnQgYmxvY2s7Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYzsKIAl1aW50MzJfdCBlbGVuOwogCXNlY3Rvcl90IG9mZnNldDsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MgPSB7fTsKQEAgLTcyNCwxMiArNzI3LDEyIEBACiAJZWxzZSBpZiAoaW5vZGVfYm1hcChkaXIsIGZfcG9zID4+IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cywKIAkJCSAgICAgICZlcG9zLCAmZWxvYywgJmVsZW4sICZvZmZzZXQpID09CiAJCQkJCShFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkgewotCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgZWxvYywgb2Zmc2V0KTsKKwkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsICZlbG9jLCBvZmZzZXQpOwogCQlpZiAoKCsrb2Zmc2V0IDw8IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgPCBlbGVuKSB7CiAJCQlpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc2hvcnRfYWQpOworCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCQkJZWxzZSBpZiAoZGluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9MT05HKQotCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihsb25nX2FkKTsKKwkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCQl9IGVsc2UKIAkJCW9mZnNldCA9IDA7CiAKQEAgLTc3OCw3ICs3ODEsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHVkZl9maWxlaWRlbnRfYmggZmliaDsKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqZmksIGNmaTsKLQlrZXJuZWxfbGJfYWRkciB0bG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciB0bG9jOwogCiAJcmV0dmFsID0gLUVOT0VOVDsKIAlsb2NrX2tlcm5lbCgpOwpAQCAtNzg4LDcgKzc5MSw3IEBACiAKIAlyZXR2YWwgPSAtRUlPOwogCXRsb2MgPSBsZWxiX3RvX2NwdShjZmkuaWNiLmV4dExvY2F0aW9uKTsKLQlpZiAodWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCB0bG9jLCAwKSAhPSBpbm9kZS0+aV9pbm8pCisJaWYgKHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgJnRsb2MsIDApICE9IGlub2RlLT5pX2lubykKIAkJZ290byBlbmRfcm1kaXI7CiAJcmV0dmFsID0gLUVOT1RFTVBUWTsKIAlpZiAoIWVtcHR5X2Rpcihpbm9kZSkpCkBAIC04MjQsNyArODI3LDcgQEAKIAlzdHJ1Y3QgdWRmX2ZpbGVpZGVudF9iaCBmaWJoOwogCXN0cnVjdCBmaWxlSWRlbnREZXNjICpmaTsKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyBjZmk7Ci0Ja2VybmVsX2xiX2FkZHIgdGxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgdGxvYzsKIAogCXJldHZhbCA9IC1FTk9FTlQ7CiAJbG9ja19rZXJuZWwoKTsKQEAgLTgzNCw3ICs4MzcsNyBAQAogCiAJcmV0dmFsID0gLUVJTzsKIAl0bG9jID0gbGVsYl90b19jcHUoY2ZpLmljYi5leHRMb2NhdGlvbik7Ci0JaWYgKHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgdGxvYywgMCkgIT0gaW5vZGUtPmlfaW5vKQorCWlmICh1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsICZ0bG9jLCAwKSAhPSBpbm9kZS0+aV9pbm8pCiAJCWdvdG8gZW5kX3VubGluazsKIAogCWlmICghaW5vZGUtPmlfbmxpbmspIHsKQEAgLTg5Nyw3ICs5MDAsNyBAQAogCWlub2RlLT5pX29wID0gJnBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwogCiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgIT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCKSB7Ci0JCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCQl1aW50MzJfdCBic2l6ZTsKIAogCQlibG9jayA9IHVkZl9uZXdfYmxvY2soaW5vZGUtPmlfc2IsIGlub2RlLApAQCAtOTEzLDcgKzkxNiw3IEBACiAJCQkJaWluZm8tPmlfbG9jYXRpb24ucGFydGl0aW9uUmVmZXJlbmNlTnVtOwogCQlic2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKIAkJaWluZm8tPmlfbGVuRXh0ZW50cyA9IGJzaXplOwotCQl1ZGZfYWRkX2FleHQoaW5vZGUsICZlcG9zLCBlbG9jLCBic2l6ZSwgMCk7CisJCXVkZl9hZGRfYWV4dChpbm9kZSwgJmVwb3MsICZlbG9jLCBic2l6ZSwgMCk7CiAJCWJyZWxzZShlcG9zLmJoKTsKIAogCQlibG9jayA9IHVkZl9nZXRfcGJsb2NrKGlub2RlLT5pX3NiLCBibG9jaywKQEAgLTExMDgsNyArMTExMSw3IEBACiAJc3RydWN0IGZpbGVJZGVudERlc2Mgb2NmaSwgbmNmaTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7CiAJaW50IHJldHZhbCA9IC1FTk9FTlQ7Ci0Ja2VybmVsX2xiX2FkZHIgdGxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgdGxvYzsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKm9sZF9paW5mbyA9IFVERl9JKG9sZF9pbm9kZSk7CiAKIAlsb2NrX2tlcm5lbCgpOwpAQCAtMTExOSw3ICsxMTIyLDcgQEAKIAkJYnJlbHNlKG9maWJoLnNiaCk7CiAJfQogCXRsb2MgPSBsZWxiX3RvX2NwdShvY2ZpLmljYi5leHRMb2NhdGlvbik7Ci0JaWYgKCFvZmkgfHwgdWRmX2dldF9sYl9wYmxvY2sob2xkX2Rpci0+aV9zYiwgdGxvYywgMCkKKwlpZiAoIW9maSB8fCB1ZGZfZ2V0X2xiX3BibG9jayhvbGRfZGlyLT5pX3NiLCAmdGxvYywgMCkKIAkgICAgIT0gb2xkX2lub2RlLT5pX2lubykKIAkJZ290byBlbmRfcmVuYW1lOwogCkBAIC0xMTU4LDcgKzExNjEsNyBAQAogCQlpZiAoIWRpcl9maSkKIAkJCWdvdG8gZW5kX3JlbmFtZTsKIAkJdGxvYyA9IGxlbGJfdG9fY3B1KGRpcl9maS0+aWNiLmV4dExvY2F0aW9uKTsKLQkJaWYgKHVkZl9nZXRfbGJfcGJsb2NrKG9sZF9pbm9kZS0+aV9zYiwgdGxvYywgMCkgIT0KKwkJaWYgKHVkZl9nZXRfbGJfcGJsb2NrKG9sZF9pbm9kZS0+aV9zYiwgJnRsb2MsIDApICE9CiAJCQkJb2xkX2Rpci0+aV9pbm8pCiAJCQlnb3RvIGVuZF9yZW5hbWU7CiAKQEAgLTExODcsNyArMTE5MCw3IEBACiAJICovCiAJbmNmaS5maWxlVmVyc2lvbk51bSA9IG9jZmkuZmlsZVZlcnNpb25OdW07CiAJbmNmaS5maWxlQ2hhcmFjdGVyaXN0aWNzID0gb2NmaS5maWxlQ2hhcmFjdGVyaXN0aWNzOwotCW1lbWNweSgmKG5jZmkuaWNiKSwgJihvY2ZpLmljYiksIHNpemVvZihsb25nX2FkKSk7CisJbWVtY3B5KCYobmNmaS5pY2IpLCAmKG9jZmkuaWNiKSwgc2l6ZW9mKHN0cnVjdCBsb25nX2FkKSk7CiAJdWRmX3dyaXRlX2ZpKG5ld19kaXIsICZuY2ZpLCBuZmksICZuZmliaCwgTlVMTCwgTlVMTCk7CiAKIAkvKiBUaGUgb2xkIGZpZCBtYXkgaGF2ZSBtb3ZlZCAtIGZpbmQgaXQgYWdhaW4gKi8KQEAgLTEyNDIsNiArMTI0NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZGZfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZCkKIHsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgdGxvYzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKIAlzdHJ1Y3QgcXN0ciBkb3Rkb3QgPSB7Lm5hbWUgPSAiLi4iLCAubGVuID0gMn07CiAJc3RydWN0IGZpbGVJZGVudERlc2MgY2ZpOwpAQCAtMTI1NSw4ICsxMjU5LDggQEAKIAkJYnJlbHNlKGZpYmguZWJoKTsKIAlicmVsc2UoZmliaC5zYmgpOwogCi0JaW5vZGUgPSB1ZGZfaWdldChjaGlsZC0+ZF9pbm9kZS0+aV9zYiwKLQkJCSBsZWxiX3RvX2NwdShjZmkuaWNiLmV4dExvY2F0aW9uKSk7CisJdGxvYyA9IGxlbGJfdG9fY3B1KGNmaS5pY2IuZXh0TG9jYXRpb24pOworCWlub2RlID0gdWRmX2lnZXQoY2hpbGQtPmRfaW5vZGUtPmlfc2IsICZ0bG9jKTsKIAlpZiAoIWlub2RlKQogCQlnb3RvIG91dF91bmxvY2s7CiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtMTI3MiwxNCArMTI3NiwxNCBAQAogCQkJCQl1MTYgcGFydHJlZiwgX191MzIgZ2VuZXJhdGlvbikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWtlcm5lbF9sYl9hZGRyIGxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgbG9jOwogCiAJaWYgKGJsb2NrID09IDApCiAJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOwogCiAJbG9jLmxvZ2ljYWxCbG9ja051bSA9IGJsb2NrOwogCWxvYy5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPSBwYXJ0cmVmOwotCWlub2RlID0gdWRmX2lnZXQoc2IsIGxvYyk7CisJaW5vZGUgPSB1ZGZfaWdldChzYiwgJmxvYyk7CiAKIAlpZiAoaW5vZGUgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CkBAIC0xMzE4LDcgKzEzMjIsNyBAQAogewogCWludCBsZW4gPSAqbGVucDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gIGRlLT5kX2lub2RlOwotCWtlcm5lbF9sYl9hZGRyIGxvY2F0aW9uID0gVURGX0koaW5vZGUpLT5pX2xvY2F0aW9uOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBsb2NhdGlvbiA9IFVERl9JKGlub2RlKS0+aV9sb2NhdGlvbjsKIAlzdHJ1Y3QgZmlkICpmaWQgPSAoc3RydWN0IGZpZCAqKWZoOwogCWludCB0eXBlID0gRklMRUlEX1VERl9XSVRIT1VUX1BBUkVOVDsKIApkaWZmIC0tZ2l0IGEvZnMvdWRmL29zdGFfdWRmLmggYi9mcy91ZGYvb3N0YV91ZGYuaAppbmRleCA2NWZmNDc5Li5mYmZmNzQ2IDEwMDY0NAotLS0gYS9mcy91ZGYvb3N0YV91ZGYuaAorKysgYi9mcy91ZGYvb3N0YV91ZGYuaApAQCAtODUsNyArODUsNyBAQAogLyogTG9naWNhbCBWb2x1bWUgSW50ZWdyaXR5IERlc2NyaXB0b3IgKFVERiAyLjUwIDIuMi42KSAqLwogLyogSW1wbGVtZW50YXRpb24gVXNlIChVREYgMi41MCAyLjIuNi40KSAqLwogc3RydWN0IGxvZ2ljYWxWb2xJbnRlZ3JpdHlEZXNjSW1wVXNlIHsKLQlyZWdpZAkJaW1wSWRlbnQ7CisJc3RydWN0IHJlZ2lkCWltcElkZW50OwogCV9fbGUzMgkJbnVtRmlsZXM7CiAJX19sZTMyCQludW1EaXJzOwogCV9fbGUxNgkJbWluVURGUmVhZFJldjsKQEAgLTk3LDEyICs5NywxMiBAQAogLyogSW1wbGVtZW50YXRpb24gVXNlIFZvbHVtZSBEZXNjcmlwdG9yIChVREYgMi41MCAyLjIuNykgKi8KIC8qIEltcGxlbWVudGF0aW9uIFVzZSAoVURGIDIuNTAgMi4yLjcuMikgKi8KIHN0cnVjdCBpbXBVc2VWb2xEZXNjSW1wVXNlIHsKLQljaGFyc3BlYwlMVklDaGFyc2V0OworCXN0cnVjdCBjaGFyc3BlYwlMVklDaGFyc2V0OwogCWRzdHJpbmcJCWxvZ2ljYWxWb2xJZGVudFsxMjhdOwogCWRzdHJpbmcJCUxWSW5mbzFbMzZdOwogCWRzdHJpbmcJCUxWSW5mbzJbMzZdOwogCWRzdHJpbmcJCUxWSW5mbzNbMzZdOwotCXJlZ2lkCQlpbXBJZGVudDsKKwlzdHJ1Y3QgcmVnaWQJaW1wSWRlbnQ7CiAJdWludDhfdAkJaW1wVXNlWzEyOF07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMTEwLDcgKzExMCw3IEBACiAJdWludDhfdAkJcGFydGl0aW9uTWFwVHlwZTsKIAl1aW50OF90CQlwYXJ0aXRpb25NYXBMZW5ndGg7CiAJdWludDhfdAkJcmVzZXJ2ZWQxWzJdOwotCXJlZ2lkCQlwYXJ0SWRlbnQ7CisJc3RydWN0IHJlZ2lkCXBhcnRJZGVudDsKIAlfX2xlMTYJCXZvbFNlcU51bTsKIAlfX2xlMTYJCXBhcnRpdGlvbk51bTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJdWludDhfdAkJcGFydGl0aW9uTWFwVHlwZTsKIAl1aW50OF90CQlwYXJ0aXRpb25NYXBMZW5ndGg7CiAJdWludDhfdAkJcmVzZXJ2ZWQxWzJdOwotCXJlZ2lkCQlwYXJ0SWRlbnQ7CisJc3RydWN0IHJlZ2lkCXBhcnRJZGVudDsKIAlfX2xlMTYJCXZvbFNlcU51bTsKIAlfX2xlMTYJCXBhcnRpdGlvbk51bTsKIAl1aW50OF90CQlyZXNlcnZlZDJbMjRdOwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJdWludDhfdCBwYXJ0aXRpb25NYXBUeXBlOwogCXVpbnQ4X3QgcGFydGl0aW9uTWFwTGVuZ3RoOwogCXVpbnQ4X3QgcmVzZXJ2ZWQxWzJdOwotCXJlZ2lkIHBhcnRJZGVudDsKKwlzdHJ1Y3QgcmVnaWQgcGFydElkZW50OwogCV9fbGUxNiB2b2xTZXFOdW07CiAJX19sZTE2IHBhcnRpdGlvbk51bTsKIAlfX2xlMTYgcGFja2V0TGVuZ3RoOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJdWludDhfdAkJcGFydGl0aW9uTWFwVHlwZTsKIAl1aW50OF90CQlwYXJ0aXRpb25NYXBMZW5ndGg7CiAJdWludDhfdAkJcmVzZXJ2ZWQxWzJdOwotCXJlZ2lkCQlwYXJ0SWRlbnQ7CisJc3RydWN0IHJlZ2lkCXBhcnRJZGVudDsKIAlfX2xlMTYJCXZvbFNlcU51bTsKIAlfX2xlMTYJCXBhcnRpdGlvbk51bTsKIAlfX2xlMzIJCW1ldGFkYXRhRmlsZUxvYzsKQEAgLTE2MSw3ICsxNjEsNyBAQAogLyogVmlydHVhbCBBbGxvY2F0aW9uIFRhYmxlIChVREYgMS41IDIuMi4xMCkgKi8KIHN0cnVjdCB2aXJ0dWFsQWxsb2NhdGlvblRhYmxlMTUgewogCV9fbGUzMgkJVmlydHVhbFNlY3RvclswXTsKLQlyZWdpZAkJdmF0SWRlbnQ7CisJc3RydWN0IHJlZ2lkCXZhdElkZW50OwogCV9fbGUzMgkJcHJldmlvdXNWQVRJQ0JMb2M7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMTkyLDggKzE5Miw4IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHNwYXJpbmdUYWJsZSB7Ci0JdGFnIAkJZGVzY1RhZzsKLQlyZWdpZAkJc3BhcmluZ0lkZW50OworCXN0cnVjdCB0YWcJZGVzY1RhZzsKKwlzdHJ1Y3QgcmVnaWQJc3BhcmluZ0lkZW50OwogCV9fbGUxNgkJcmVhbGxvY2F0aW9uVGFibGVMZW47CiAJX19sZTE2CQlyZXNlcnZlZDsKIAlfX2xlMzIJCXNlcXVlbmNlTnVtOwpAQCAtMjA2LDcgKzIwNiw3IEBACiAjZGVmaW5lIElDQlRBR19GSUxFX1RZUEVfTUlSUk9SCQkweEZCCiAjZGVmaW5lIElDQlRBR19GSUxFX1RZUEVfQklUTUFQCQkweEZDCiAKLS8qIHN0cnVjdCBsb25nX2FkIElDQiAtIEFESW1wVXNlIChVREYgMi41MCAyLjIuNC4zKSAqLworLyogc3RydWN0IHN0cnVjdCBsb25nX2FkIElDQiAtIEFESW1wVXNlIChVREYgMi41MCAyLjIuNC4zKSAqLwogc3RydWN0IGFsbG9jRGVzY0ltcFVzZSB7CiAJX19sZTE2CQlmbGFnczsKIAl1aW50OF90CQlpbXBVc2VbNF07CmRpZmYgLS1naXQgYS9mcy91ZGYvcGFydGl0aW9uLmMgYi9mcy91ZGYvcGFydGl0aW9uLmMKaW5kZXggOTZkZmQyMC4uNGI1NDBlZSAxMDA2NDQKLS0tIGEvZnMvdWRmL3BhcnRpdGlvbi5jCisrKyBiL2ZzL3VkZi9wYXJ0aXRpb24uYwpAQCAtMjczLDcgKzI3Myw3IEBACiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCXN0cnVjdCB1ZGZfcGFydF9tYXAgKm1hcDsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCXVpbnQzMl90IGVsZW47CiAJc2VjdG9yX3QgZXh0X29mZnNldDsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MgPSB7fTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9zdXBlci5jIGIvZnMvdWRmL3N1cGVyLmMKaW5kZXggZTI1ZTcwMS4uNzIzNDhjYyAxMDA2NDQKLS0tIGEvZnMvdWRmL3N1cGVyLmMKKysrIGIvZnMvdWRmL3N1cGVyLmMKQEAgLTgxLDE2ICs4MSwxMyBAQAogLyogVGhlc2UgYXJlIHRoZSAibWVhdCIgLSBldmVyeXRoaW5nIGVsc2UgaXMgc3R1ZmZpbmcgKi8KIHN0YXRpYyBpbnQgdWRmX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiwgaW50KTsKIHN0YXRpYyB2b2lkIHVkZl9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwotc3RhdGljIHZvaWQgdWRmX3dyaXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKK3N0YXRpYyBpbnQgdWRmX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CiBzdGF0aWMgaW50IHVkZl9yZW1vdW50X2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQgKiwgY2hhciAqKTsKLXN0YXRpYyBpbnQgdWRmX2NoZWNrX3ZhbGlkKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGludCk7Ci1zdGF0aWMgaW50IHVkZl92cnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHNpbGVudCk7Ci1zdGF0aWMgdm9pZCB1ZGZfbG9hZF9sb2dpY2Fsdm9saW50KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBrZXJuZWxfZXh0ZW50X2FkKTsKLXN0YXRpYyB2b2lkIHVkZl9maW5kX2FuY2hvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Ci1zdGF0aWMgaW50IHVkZl9maW5kX2ZpbGVzZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIGtlcm5lbF9sYl9hZGRyICosCi0JCQkgICAga2VybmVsX2xiX2FkZHIgKik7CitzdGF0aWMgdm9pZCB1ZGZfbG9hZF9sb2dpY2Fsdm9saW50KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga2VybmVsX2V4dGVudF9hZCk7CitzdGF0aWMgaW50IHVkZl9maW5kX2ZpbGVzZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLAorCQkJICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqKTsKIHN0YXRpYyB2b2lkIHVkZl9sb2FkX2ZpbGVzZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLAotCQkJICAgICBrZXJuZWxfbGJfYWRkciAqKTsKKwkJCSAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICopOwogc3RhdGljIHZvaWQgdWRmX29wZW5fbHZpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBzdGF0aWMgdm9pZCB1ZGZfY2xvc2VfbHZpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBzdGF0aWMgdW5zaWduZWQgaW50IHVkZl9jb3VudF9mcmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKQEAgLTE4MSw3ICsxNzgsNyBAQAogCS5kZWxldGVfaW5vZGUJPSB1ZGZfZGVsZXRlX2lub2RlLAogCS5jbGVhcl9pbm9kZQk9IHVkZl9jbGVhcl9pbm9kZSwKIAkucHV0X3N1cGVyCT0gdWRmX3B1dF9zdXBlciwKLQkud3JpdGVfc3VwZXIJPSB1ZGZfd3JpdGVfc3VwZXIsCisJLnN5bmNfZnMJPSB1ZGZfc3luY19mcywKIAkuc3RhdGZzCQk9IHVkZl9zdGF0ZnMsCiAJLnJlbW91bnRfZnMJPSB1ZGZfcmVtb3VudF9mcywKIAkuc2hvd19vcHRpb25zCT0gdWRmX3Nob3dfb3B0aW9ucywKQEAgLTIwMSw2ICsxOTgsOCBAQAogCW1vZGVfdCB1bWFzazsKIAlnaWRfdCBnaWQ7CiAJdWlkX3QgdWlkOworCW1vZGVfdCBmbW9kZTsKKwltb2RlX3QgZG1vZGU7CiAJc3RydWN0IG5sc190YWJsZSAqbmxzX21hcDsKIH07CiAKQEAgLTI1OCw3ICsyNTcsNyBAQAogCiAJaWYgKCFVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfU1RSSUNUKSkKIAkJc2VxX3B1dHMoc2VxLCAiLG5vc3RyaWN0Iik7Ci0JaWYgKHNiLT5zX2Jsb2Nrc2l6ZSAhPSBVREZfREVGQVVMVF9CTE9DS1NJWkUpCisJaWYgKFVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19CTE9DS1NJWkVfU0VUKSkKIAkJc2VxX3ByaW50ZihzZXEsICIsYnM9JWx1Iiwgc2ItPnNfYmxvY2tzaXplKTsKIAlpZiAoVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX1VOSElERSkpCiAJCXNlcV9wdXRzKHNlcSwgIix1bmhpZGUiKTsKQEAgLTI4MiwxOCArMjgxLDE2IEBACiAJCXNlcV9wcmludGYoc2VxLCAiLGdpZD0ldSIsIHNiaS0+c19naWQpOwogCWlmIChzYmktPnNfdW1hc2sgIT0gMCkKIAkJc2VxX3ByaW50ZihzZXEsICIsdW1hc2s9JW8iLCBzYmktPnNfdW1hc2spOworCWlmIChzYmktPnNfZm1vZGUgIT0gVURGX0lOVkFMSURfTU9ERSkKKwkJc2VxX3ByaW50ZihzZXEsICIsbW9kZT0lbyIsIHNiaS0+c19mbW9kZSk7CisJaWYgKHNiaS0+c19kbW9kZSAhPSBVREZfSU5WQUxJRF9NT0RFKQorCQlzZXFfcHJpbnRmKHNlcSwgIixkbW9kZT0lbyIsIHNiaS0+c19kbW9kZSk7CiAJaWYgKFVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19TRVNTSU9OX1NFVCkpCiAJCXNlcV9wcmludGYoc2VxLCAiLHNlc3Npb249JXUiLCBzYmktPnNfc2Vzc2lvbik7CiAJaWYgKFVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19MQVNUQkxPQ0tfU0VUKSkKIAkJc2VxX3ByaW50ZihzZXEsICIsbGFzdGJsb2NrPSV1Iiwgc2JpLT5zX2xhc3RfYmxvY2spOwotCS8qCi0JICogc19hbmNob3JbMl0gY291bGQgYmUgemVyb2VkIG91dCBpbiBjYXNlIHRoZXJlIGlzIG5vIGFuY2hvcgotCSAqIGluIHRoZSBzcGVjaWZpZWQgYmxvY2ssIGJ1dCB0aGVuIHRoZSAiYW5jaG9yPU4iIG9wdGlvbgotCSAqIG9yaWdpbmFsbHkgZ2l2ZW4gYnkgdGhlIHVzZXIgd2Fzbid0IGVmZmVjdGl2ZSwgc28gaXQncyBPSwotCSAqIGlmIHdlIGRvbid0IHNob3cgaXQuCi0JICovCi0JaWYgKHNiaS0+c19hbmNob3JbMl0gIT0gMCkKLQkJc2VxX3ByaW50ZihzZXEsICIsYW5jaG9yPSV1Iiwgc2JpLT5zX2FuY2hvclsyXSk7CisJaWYgKHNiaS0+c19hbmNob3IgIT0gMCkKKwkJc2VxX3ByaW50ZihzZXEsICIsYW5jaG9yPSV1Iiwgc2JpLT5zX2FuY2hvcik7CiAJLyoKIAkgKiB2b2x1bWUsIHBhcnRpdGlvbiwgZmlsZXNldCBhbmQgcm9vdGRpciBzZWVtIHRvIGJlIGlnbm9yZWQKIAkgKiBjdXJyZW50bHkKQEAgLTMxNyw2ICszMTQsOCBAQAogICoKICAqCWdpZD0JCVNldCB0aGUgZGVmYXVsdCBncm91cC4KICAqCXVtYXNrPQkJU2V0IHRoZSBkZWZhdWx0IHVtYXNrLgorICoJbW9kZT0JCVNldCB0aGUgZGVmYXVsdCBmaWxlIHBlcm1pc3Npb25zLgorICoJZG1vZGU9CQlTZXQgdGhlIGRlZmF1bHQgZGlyZWN0b3J5IHBlcm1pc3Npb25zLgogICoJdWlkPQkJU2V0IHRoZSBkZWZhdWx0IHVzZXIuCiAgKglicz0JCVNldCB0aGUgYmxvY2sgc2l6ZS4KICAqCXVuaGlkZQkJU2hvdyBvdGhlcndpc2UgaGlkZGVuIGZpbGVzLgpAQCAtMzY2LDcgKzM2NSw4IEBACiAJT3B0X2dpZCwgT3B0X3VpZCwgT3B0X3VtYXNrLCBPcHRfc2Vzc2lvbiwgT3B0X2xhc3RibG9jaywKIAlPcHRfYW5jaG9yLCBPcHRfdm9sdW1lLCBPcHRfcGFydGl0aW9uLCBPcHRfZmlsZXNldCwKIAlPcHRfcm9vdGRpciwgT3B0X3V0ZjgsIE9wdF9pb2NoYXJzZXQsCi0JT3B0X2VyciwgT3B0X3Vmb3JnZXQsIE9wdF91aWdub3JlLCBPcHRfZ2ZvcmdldCwgT3B0X2dpZ25vcmUKKwlPcHRfZXJyLCBPcHRfdWZvcmdldCwgT3B0X3VpZ25vcmUsIE9wdF9nZm9yZ2V0LCBPcHRfZ2lnbm9yZSwKKwlPcHRfZm1vZGUsIE9wdF9kbW9kZQogfTsKIAogc3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtMzk1LDYgKzM5NSw4IEBACiAJe09wdF9yb290ZGlyLAkicm9vdGRpcj0ldSJ9LAogCXtPcHRfdXRmOCwJInV0ZjgifSwKIAl7T3B0X2lvY2hhcnNldCwJImlvY2hhcnNldD0lcyJ9LAorCXtPcHRfZm1vZGUsICAgICAibW9kZT0lbyJ9LAorCXtPcHRfZG1vZGUsICAgICAiZG1vZGU9JW8ifSwKIAl7T3B0X2VyciwJTlVMTH0KIH07CiAKQEAgLTQwNSw3ICs0MDcsNiBAQAogCWludCBvcHRpb247CiAKIAl1b3B0LT5ub3ZycyA9IDA7Ci0JdW9wdC0+YmxvY2tzaXplID0gVURGX0RFRkFVTFRfQkxPQ0tTSVpFOwogCXVvcHQtPnBhcnRpdGlvbiA9IDB4RkZGRjsKIAl1b3B0LT5zZXNzaW9uID0gMHhGRkZGRkZGRjsKIAl1b3B0LT5sYXN0YmxvY2sgPSAwOwpAQCAtNDI4LDEwICs0MjksMTIgQEAKIAkJc3dpdGNoICh0b2tlbikgewogCQljYXNlIE9wdF9ub3ZyczoKIAkJCXVvcHQtPm5vdnJzID0gMTsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9iczoKIAkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQogCQkJCXJldHVybiAwOwogCQkJdW9wdC0+YmxvY2tzaXplID0gb3B0aW9uOworCQkJdW9wdC0+ZmxhZ3MgfD0gKDEgPDwgVURGX0ZMQUdfQkxPQ0tTSVpFX1NFVCk7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfdW5oaWRlOgogCQkJdW9wdC0+ZmxhZ3MgfD0gKDEgPDwgVURGX0ZMQUdfVU5ISURFKTsKQEAgLTUzMSw2ICs1MzQsMTYgQEAKIAkJY2FzZSBPcHRfZ2ZvcmdldDoKIAkJCXVvcHQtPmZsYWdzIHw9ICgxIDw8IFVERl9GTEFHX0dJRF9GT1JHRVQpOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Ztb2RlOgorCQkJaWYgKG1hdGNoX29jdGFsKGFyZ3MsICZvcHRpb24pKQorCQkJCXJldHVybiAwOworCQkJdW9wdC0+Zm1vZGUgPSBvcHRpb24gJiAwNzc3OworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Rtb2RlOgorCQkJaWYgKG1hdGNoX29jdGFsKGFyZ3MsICZvcHRpb24pKQorCQkJCXJldHVybiAwOworCQkJdW9wdC0+ZG1vZGUgPSBvcHRpb24gJiAwNzc3OworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIgInVkZjogYmFkIG1vdW50IG9wdGlvbiBcIiVzXCIgIgogCQkJICAgICAgICJvciBtaXNzaW5nIHZhbHVlXG4iLCBwKTsKQEAgLTU0MCwxNyArNTUzLDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgdWRmX3dyaXRlX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0JbG9ja19rZXJuZWwoKTsKLQotCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkKLQkJdWRmX29wZW5fbHZpZChzYik7Ci0Jc2ItPnNfZGlydCA9IDA7Ci0KLQl1bmxvY2tfa2VybmVsKCk7Ci19Ci0KIHN0YXRpYyBpbnQgdWRmX3JlbW91bnRfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqb3B0aW9ucykKIHsKIAlzdHJ1Y3QgdWRmX29wdGlvbnMgdW9wdDsKQEAgLTU2MCw2ICs1NjIsOCBAQAogCXVvcHQudWlkICAgPSBzYmktPnNfdWlkOwogCXVvcHQuZ2lkICAgPSBzYmktPnNfZ2lkOwogCXVvcHQudW1hc2sgPSBzYmktPnNfdW1hc2s7CisJdW9wdC5mbW9kZSA9IHNiaS0+c19mbW9kZTsKKwl1b3B0LmRtb2RlID0gc2JpLT5zX2Rtb2RlOwogCiAJaWYgKCF1ZGZfcGFyc2Vfb3B0aW9ucyhvcHRpb25zLCAmdW9wdCwgdHJ1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTY4LDYgKzU3Miw4IEBACiAJc2JpLT5zX3VpZCAgID0gdW9wdC51aWQ7CiAJc2JpLT5zX2dpZCAgID0gdW9wdC5naWQ7CiAJc2JpLT5zX3VtYXNrID0gdW9wdC51bWFzazsKKwlzYmktPnNfZm1vZGUgPSB1b3B0LmZtb2RlOworCXNiaS0+c19kbW9kZSA9IHVvcHQuZG1vZGU7CiAKIAlpZiAoc2JpLT5zX2x2aWRfYmgpIHsKIAkJaW50IHdyaXRlX3JldiA9IGxlMTZfdG9fY3B1KHVkZl9zYl9sdmlkaXUoc2JpKS0+bWluVURGV3JpdGVSZXYpOwpAQCAtNTg1LDIyICs1OTEsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1ZGZfdnJzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBzaWxlbnQpCisvKiBDaGVjayBWb2x1bWUgU3RydWN0dXJlIERlc2NyaXB0b3JzIChFQ01BIDE2NyAyLzkuMSkgKi8KKy8qIFdlIGFsc28gY2hlY2sgYW55ICJDRC1ST00gVm9sdW1lIERlc2NyaXB0b3IgU2V0IiAoRUNNQSAxNjcgMi84LjMuMSkgKi8KK3N0YXRpYyBsb2ZmX3QgdWRmX2NoZWNrX3ZzZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCB2b2xTdHJ1Y3REZXNjICp2c2QgPSBOVUxMOwogCWxvZmZfdCBzZWN0b3IgPSAzMjc2ODsKIAlpbnQgc2VjdG9yc2l6ZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKLQlpbnQgaXNvOTY2MCA9IDA7CiAJaW50IG5zcjAyID0gMDsKIAlpbnQgbnNyMDMgPSAwOwogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpOwogCi0JLyogQmxvY2sgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNTEyICovCi0JaWYgKHNiLT5zX2Jsb2Nrc2l6ZSAmIDUxMSkKLQkJcmV0dXJuIDA7CiAJc2JpID0gVURGX1NCKHNiKTsKLQogCWlmIChzYi0+c19ibG9ja3NpemUgPCBzaXplb2Yoc3RydWN0IHZvbFN0cnVjdERlc2MpKQogCQlzZWN0b3JzaXplID0gc2l6ZW9mKHN0cnVjdCB2b2xTdHJ1Y3REZXNjKTsKIAllbHNlCkBAIC02MjcsNyArNjMwLDYgQEAKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKCFzdHJuY21wKHZzZC0+c3RkSWRlbnQsIFZTRF9TVERfSURfQ0QwMDEsCiAJCQkJICAgIFZTRF9TVERfSURfTEVOKSkgewotCQkJaXNvOTY2MCA9IHNlY3RvcjsKIAkJCXN3aXRjaCAodnNkLT5zdHJ1Y3RUeXBlKSB7CiAJCQljYXNlIDA6CiAJCQkJdWRmX2RlYnVnKCJJU085NjYwIEJvb3QgUmVjb3JkIGZvdW5kXG4iKTsKQEAgLTY3OSwxMzkgKzY4MSw5IEBACiAJCXJldHVybiAwOwogfQogCi0vKgotICogQ2hlY2sgd2hldGhlciB0aGVyZSBpcyBhbiBhbmNob3IgYmxvY2sgaW4gdGhlIGdpdmVuIGJsb2NrCi0gKi8KLXN0YXRpYyBpbnQgdWRmX2NoZWNrX2FuY2hvcl9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaykKLXsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwotCXVpbnQxNl90IGlkZW50OwotCi0JaWYgKFVERl9RVUVSWV9GTEFHKHNiLCBVREZfRkxBR19WQVJDT05WKSAmJgotCSAgICB1ZGZfZml4ZWRfdG9fdmFyaWFibGUoYmxvY2spID49Ci0JICAgIHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHMpCi0JCXJldHVybiAwOwotCi0JYmggPSB1ZGZfcmVhZF90YWdnZWQoc2IsIGJsb2NrLCBibG9jaywgJmlkZW50KTsKLQlpZiAoIWJoKQotCQlyZXR1cm4gMDsKLQlicmVsc2UoYmgpOwotCi0JcmV0dXJuIGlkZW50ID09IFRBR19JREVOVF9BVkRQOwotfQotCi0vKiBTZWFyY2ggZm9yIGFuIGFuY2hvciB2b2x1bWUgZGVzY3JpcHRvciBwb2ludGVyICovCi1zdGF0aWMgc2VjdG9yX3QgdWRmX3NjYW5fYW5jaG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBsYXN0YmxvY2spCi17Ci0Jc2VjdG9yX3QgbGFzdFs2XTsKLQlpbnQgaTsKLQlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7Ci0KLQlsYXN0WzBdID0gbGFzdGJsb2NrOwotCWxhc3RbMV0gPSBsYXN0WzBdIC0gMTsKLQlsYXN0WzJdID0gbGFzdFswXSArIDE7Ci0JbGFzdFszXSA9IGxhc3RbMF0gLSAyOwotCWxhc3RbNF0gPSBsYXN0WzBdIC0gMTUwOwotCWxhc3RbNV0gPSBsYXN0WzBdIC0gMTUyOwotCi0JLyogIGFjY29yZGluZyB0byBzcGVjLCBhbmNob3IgaXMgaW4gZWl0aGVyOgotCSAqICAgICBibG9jayAyNTYKLQkgKiAgICAgbGFzdGJsb2NrLTI1NgotCSAqICAgICBsYXN0YmxvY2sKLQkgKiAgaG93ZXZlciwgaWYgdGhlIGRpc2MgaXNuJ3QgY2xvc2VkLCBpdCBjb3VsZCBiZSA1MTIgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxhc3QpOyBpKyspIHsKLQkJaWYgKGxhc3RbaV0gPCAwKQotCQkJY29udGludWU7Ci0JCWlmIChsYXN0W2ldID49IHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX3NpemUgPj4KLQkJCQlzYi0+c19ibG9ja3NpemVfYml0cykKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh1ZGZfY2hlY2tfYW5jaG9yX2Jsb2NrKHNiLCBsYXN0W2ldKSkgewotCQkJc2JpLT5zX2FuY2hvclswXSA9IGxhc3RbaV07Ci0JCQlzYmktPnNfYW5jaG9yWzFdID0gbGFzdFtpXSAtIDI1NjsKLQkJCXJldHVybiBsYXN0W2ldOwotCQl9Ci0KLQkJaWYgKGxhc3RbaV0gPCAyNTYpCi0JCQljb250aW51ZTsKLQotCQlpZiAodWRmX2NoZWNrX2FuY2hvcl9ibG9jayhzYiwgbGFzdFtpXSAtIDI1NikpIHsKLQkJCXNiaS0+c19hbmNob3JbMV0gPSBsYXN0W2ldIC0gMjU2OwotCQkJcmV0dXJuIGxhc3RbaV07Ci0JCX0KLQl9Ci0KLQlpZiAodWRmX2NoZWNrX2FuY2hvcl9ibG9jayhzYiwgc2JpLT5zX3Nlc3Npb24gKyAyNTYpKSB7Ci0JCXNiaS0+c19hbmNob3JbMF0gPSBzYmktPnNfc2Vzc2lvbiArIDI1NjsKLQkJcmV0dXJuIGxhc3RbMF07Ci0JfQotCWlmICh1ZGZfY2hlY2tfYW5jaG9yX2Jsb2NrKHNiLCBzYmktPnNfc2Vzc2lvbiArIDUxMikpIHsKLQkJc2JpLT5zX2FuY2hvclswXSA9IHNiaS0+c19zZXNzaW9uICsgNTEyOwotCQlyZXR1cm4gbGFzdFswXTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBGaW5kIGFuIGFuY2hvciB2b2x1bWUgZGVzY3JpcHRvci4gVGhlIGZ1bmN0aW9uIGV4cGVjdHMgc2JpLT5zX2xhc3RibG9jayB0bwotICogYmUgdGhlIGxhc3QgYmxvY2sgb24gdGhlIG1lZGlhLgotICoKLSAqIFJldHVybiAxIGlmIG5vdCBmb3VuZCwgMCBpZiBvawotICoKLSAqLwotc3RhdGljIHZvaWQgdWRmX2ZpbmRfYW5jaG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0Jc2VjdG9yX3QgbGFzdGJsb2NrOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwotCXVpbnQxNl90IGlkZW50OwotCWludCBpOwotCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKLQotCWxhc3RibG9jayA9IHVkZl9zY2FuX2FuY2hvcnMoc2IsIHNiaS0+c19sYXN0X2Jsb2NrKTsKLQlpZiAobGFzdGJsb2NrKQotCQlnb3RvIGNoZWNrX2FuY2hvcjsKLQotCS8qIE5vIGFuY2hvciBmb3VuZD8gVHJ5IFZBUkNPTlYgY29udmVyc2lvbiBvZiBibG9jayBudW1iZXJzICovCi0JVURGX1NFVF9GTEFHKHNiLCBVREZfRkxBR19WQVJDT05WKTsKLQkvKiBGaXJzdGx5LCB3ZSB0cnkgdG8gbm90IGNvbnZlcnQgbnVtYmVyIG9mIHRoZSBsYXN0IGJsb2NrICovCi0JbGFzdGJsb2NrID0gdWRmX3NjYW5fYW5jaG9ycyhzYiwKLQkJCQl1ZGZfdmFyaWFibGVfdG9fZml4ZWQoc2JpLT5zX2xhc3RfYmxvY2spKTsKLQlpZiAobGFzdGJsb2NrKQotCQlnb3RvIGNoZWNrX2FuY2hvcjsKLQotCS8qIFNlY29uZGx5LCB3ZSB0cnkgd2l0aCBjb252ZXJ0ZWQgbnVtYmVyIG9mIHRoZSBsYXN0IGJsb2NrICovCi0JbGFzdGJsb2NrID0gdWRmX3NjYW5fYW5jaG9ycyhzYiwgc2JpLT5zX2xhc3RfYmxvY2spOwotCWlmICghbGFzdGJsb2NrKSB7Ci0JCS8qIFZBUkNPTlYgZGlkbid0IGhlbHAuIENsZWFyIGl0LiAqLwotCQlVREZfQ0xFQVJfRkxBRyhzYiwgVURGX0ZMQUdfVkFSQ09OVik7Ci0JfQotCi1jaGVja19hbmNob3I6Ci0JLyoKLQkgKiBDaGVjayBsb2NhdGVkIGFuY2hvcnMgYW5kIHRoZSBhbmNob3IgYmxvY2sgc3VwcGxpZWQgdmlhCi0JICogbW91bnQgb3B0aW9ucwotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNiaS0+c19hbmNob3IpOyBpKyspIHsKLQkJaWYgKCFzYmktPnNfYW5jaG9yW2ldKQotCQkJY29udGludWU7Ci0JCWJoID0gdWRmX3JlYWRfdGFnZ2VkKHNiLCBzYmktPnNfYW5jaG9yW2ldLAotCQkJCQlzYmktPnNfYW5jaG9yW2ldLCAmaWRlbnQpOwotCQlpZiAoIWJoKQotCQkJc2JpLT5zX2FuY2hvcltpXSA9IDA7Ci0JCWVsc2UgewotCQkJYnJlbHNlKGJoKTsKLQkJCWlmIChpZGVudCAhPSBUQUdfSURFTlRfQVZEUCkKLQkJCQlzYmktPnNfYW5jaG9yW2ldID0gMDsKLQkJfQotCX0KLQotCXNiaS0+c19sYXN0X2Jsb2NrID0gbGFzdGJsb2NrOwotfQotCiBzdGF0aWMgaW50IHVkZl9maW5kX2ZpbGVzZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCSAgICBrZXJuZWxfbGJfYWRkciAqZmlsZXNldCwKLQkJCSAgICBrZXJuZWxfbGJfYWRkciAqcm9vdCkKKwkJCSAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmZpbGVzZXQsCisJCQkgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpyb290KQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCWxvbmcgbGFzdGJsb2NrOwpAQCAtODIwLDcgKzY5Miw3IEBACiAKIAlpZiAoZmlsZXNldC0+bG9naWNhbEJsb2NrTnVtICE9IDB4RkZGRkZGRkYgfHwKIAkgICAgZmlsZXNldC0+cGFydGl0aW9uUmVmZXJlbmNlTnVtICE9IDB4RkZGRikgewotCQliaCA9IHVkZl9yZWFkX3B0YWdnZWQoc2IsICpmaWxlc2V0LCAwLCAmaWRlbnQpOworCQliaCA9IHVkZl9yZWFkX3B0YWdnZWQoc2IsIGZpbGVzZXQsIDAsICZpZGVudCk7CiAKIAkJaWYgKCFiaCkgewogCQkJcmV0dXJuIDE7CkBAIC04MzQsNyArNzA2LDcgQEAKIAlzYmkgPSBVREZfU0Ioc2IpOwogCWlmICghYmgpIHsKIAkJLyogU2VhcmNoIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBwYXJ0aXRpb25zICovCi0JCWtlcm5lbF9sYl9hZGRyIG5ld2ZpbGVzZXQ7CisJCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBuZXdmaWxlc2V0OwogCiAvKiAtLT4gY3ZnOiBGSVhNRSAtIGlzIGl0IHJlYXNvbmFibGU/ICovCiAJCXJldHVybiAxOwpAQCAtODUwLDcgKzcyMiw3IEBACiAJCQluZXdmaWxlc2V0LmxvZ2ljYWxCbG9ja051bSA9IDA7CiAKIAkJCWRvIHsKLQkJCQliaCA9IHVkZl9yZWFkX3B0YWdnZWQoc2IsIG5ld2ZpbGVzZXQsIDAsCisJCQkJYmggPSB1ZGZfcmVhZF9wdGFnZ2VkKHNiLCAmbmV3ZmlsZXNldCwgMCwKIAkJCQkJCSAgICAgICZpZGVudCk7CiAJCQkJaWYgKCFiaCkgewogCQkJCQluZXdmaWxlc2V0LmxvZ2ljYWxCbG9ja051bSsrOwpAQCAtOTAyLDE0ICs3NzQsMjMgQEAKIHN0YXRpYyBpbnQgdWRmX2xvYWRfcHZvbGRlc2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2spCiB7CiAJc3RydWN0IHByaW1hcnlWb2xEZXNjICpwdm9sZGVzYzsKLQlzdHJ1Y3QgdXN0ciBpbnN0cjsKLQlzdHJ1Y3QgdXN0ciBvdXRzdHI7CisJc3RydWN0IHVzdHIgKmluc3RyLCAqb3V0c3RyOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJdWludDE2X3QgaWRlbnQ7CisJaW50IHJldCA9IDE7CisKKwlpbnN0ciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c3RyKSwgR0ZQX05PRlMpOworCWlmICghaW5zdHIpCisJCXJldHVybiAxOworCisJb3V0c3RyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzdHIpLCBHRlBfTk9GUyk7CisJaWYgKCFvdXRzdHIpCisJCWdvdG8gb3V0MTsKIAogCWJoID0gdWRmX3JlYWRfdGFnZ2VkKHNiLCBibG9jaywgYmxvY2ssICZpZGVudCk7CiAJaWYgKCFiaCkKLQkJcmV0dXJuIDE7CisJCWdvdG8gb3V0MjsKKwogCUJVR19PTihpZGVudCAhPSBUQUdfSURFTlRfUFZEKTsKIAogCXB2b2xkZXNjID0gKHN0cnVjdCBwcmltYXJ5Vm9sRGVzYyAqKWJoLT5iX2RhdGE7CkBAIC05MTcsNyArNzk4LDcgQEAKIAlpZiAodWRmX2Rpc2tfc3RhbXBfdG9fdGltZSgmVURGX1NCKHNiKS0+c19yZWNvcmRfdGltZSwKIAkJCSAgICAgIHB2b2xkZXNjLT5yZWNvcmRpbmdEYXRlQW5kVGltZSkpIHsKICNpZmRlZiBVREZGU19ERUJVRwotCQl0aW1lc3RhbXAgKnRzID0gJnB2b2xkZXNjLT5yZWNvcmRpbmdEYXRlQW5kVGltZTsKKwkJc3RydWN0IHRpbWVzdGFtcCAqdHMgPSAmcHZvbGRlc2MtPnJlY29yZGluZ0RhdGVBbmRUaW1lOwogCQl1ZGZfZGVidWcoInJlY29yZGluZyB0aW1lICUwNHUvJTAydS8lMDJ1IgogCQkJICAiICUwMnU6JTAydSAoJXgpXG4iLAogCQkJICBsZTE2X3RvX2NwdSh0cy0+eWVhciksIHRzLT5tb250aCwgdHMtPmRheSwgdHMtPmhvdXIsCkBAIC05MjUsMjAgKzgwNiwyNSBAQAogI2VuZGlmCiAJfQogCi0JaWYgKCF1ZGZfYnVpbGRfdXN0cigmaW5zdHIsIHB2b2xkZXNjLT52b2xJZGVudCwgMzIpKQotCQlpZiAodWRmX0NTMHRvVVRGOCgmb3V0c3RyLCAmaW5zdHIpKSB7Ci0JCQlzdHJuY3B5KFVERl9TQihzYiktPnNfdm9sdW1lX2lkZW50LCBvdXRzdHIudV9uYW1lLAotCQkJCW91dHN0ci51X2xlbiA+IDMxID8gMzEgOiBvdXRzdHIudV9sZW4pOworCWlmICghdWRmX2J1aWxkX3VzdHIoaW5zdHIsIHB2b2xkZXNjLT52b2xJZGVudCwgMzIpKQorCQlpZiAodWRmX0NTMHRvVVRGOChvdXRzdHIsIGluc3RyKSkgeworCQkJc3RybmNweShVREZfU0Ioc2IpLT5zX3ZvbHVtZV9pZGVudCwgb3V0c3RyLT51X25hbWUsCisJCQkJb3V0c3RyLT51X2xlbiA+IDMxID8gMzEgOiBvdXRzdHItPnVfbGVuKTsKIAkJCXVkZl9kZWJ1Zygidm9sSWRlbnRbXSA9ICclcydcbiIsCiAJCQkJCVVERl9TQihzYiktPnNfdm9sdW1lX2lkZW50KTsKIAkJfQogCi0JaWYgKCF1ZGZfYnVpbGRfdXN0cigmaW5zdHIsIHB2b2xkZXNjLT52b2xTZXRJZGVudCwgMTI4KSkKLQkJaWYgKHVkZl9DUzB0b1VURjgoJm91dHN0ciwgJmluc3RyKSkKLQkJCXVkZl9kZWJ1Zygidm9sU2V0SWRlbnRbXSA9ICclcydcbiIsIG91dHN0ci51X25hbWUpOworCWlmICghdWRmX2J1aWxkX3VzdHIoaW5zdHIsIHB2b2xkZXNjLT52b2xTZXRJZGVudCwgMTI4KSkKKwkJaWYgKHVkZl9DUzB0b1VURjgob3V0c3RyLCBpbnN0cikpCisJCQl1ZGZfZGVidWcoInZvbFNldElkZW50W10gPSAnJXMnXG4iLCBvdXRzdHItPnVfbmFtZSk7CiAKIAlicmVsc2UoYmgpOwotCXJldHVybiAwOworCXJldCA9IDA7CitvdXQyOgorCWtmcmVlKG91dHN0cik7CitvdXQxOgorCWtmcmVlKGluc3RyKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHVkZl9sb2FkX21ldGFkYXRhX2ZpbGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBwYXJ0aXRpb24pCkBAIC05NDYsNyArODMyLDcgQEAKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CiAJc3RydWN0IHVkZl9wYXJ0X21hcCAqbWFwOwogCXN0cnVjdCB1ZGZfbWV0YV9kYXRhICptZGF0YTsKLQlrZXJuZWxfbGJfYWRkciBhZGRyOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBhZGRyOwogCWludCBmZV9lcnJvciA9IDA7CiAKIAltYXAgPSAmc2JpLT5zX3BhcnRtYXBzW3BhcnRpdGlvbl07CkBAIC05NTksNyArODQ1LDcgQEAKIAl1ZGZfZGVidWcoIk1ldGFkYXRhIGZpbGUgbG9jYXRpb246IGJsb2NrID0gJWQgcGFydCA9ICVkXG4iLAogCQkJICBhZGRyLmxvZ2ljYWxCbG9ja051bSwgYWRkci5wYXJ0aXRpb25SZWZlcmVuY2VOdW0pOwogCi0JbWRhdGEtPnNfbWV0YWRhdGFfZmUgPSB1ZGZfaWdldChzYiwgYWRkcik7CisJbWRhdGEtPnNfbWV0YWRhdGFfZmUgPSB1ZGZfaWdldChzYiwgJmFkZHIpOwogCiAJaWYgKG1kYXRhLT5zX21ldGFkYXRhX2ZlID09IE5VTEwpIHsKIAkJdWRmX3dhcm5pbmcoc2IsIF9fZnVuY19fLCAibWV0YWRhdGEgaW5vZGUgZWZlIG5vdCBmb3VuZCwgIgpAQCAtOTgxLDcgKzg2Nyw3IEBACiAJdWRmX2RlYnVnKCJNaXJyb3IgbWV0YWRhdGEgZmlsZSBsb2NhdGlvbjogYmxvY2sgPSAlZCBwYXJ0ID0gJWRcbiIsCiAJCQkgIGFkZHIubG9naWNhbEJsb2NrTnVtLCBhZGRyLnBhcnRpdGlvblJlZmVyZW5jZU51bSk7CiAKLQltZGF0YS0+c19taXJyb3JfZmUgPSB1ZGZfaWdldChzYiwgYWRkcik7CisJbWRhdGEtPnNfbWlycm9yX2ZlID0gdWRmX2lnZXQoc2IsICZhZGRyKTsKIAogCWlmIChtZGF0YS0+c19taXJyb3JfZmUgPT0gTlVMTCkgewogCQlpZiAoZmVfZXJyb3IpIHsKQEAgLTEwMTMsNyArODk5LDcgQEAKIAkJdWRmX2RlYnVnKCJCaXRtYXAgZmlsZSBsb2NhdGlvbjogYmxvY2sgPSAlZCBwYXJ0ID0gJWRcbiIsCiAJCQlhZGRyLmxvZ2ljYWxCbG9ja051bSwgYWRkci5wYXJ0aXRpb25SZWZlcmVuY2VOdW0pOwogCi0JCW1kYXRhLT5zX2JpdG1hcF9mZSA9IHVkZl9pZ2V0KHNiLCBhZGRyKTsKKwkJbWRhdGEtPnNfYml0bWFwX2ZlID0gdWRmX2lnZXQoc2IsICZhZGRyKTsKIAogCQlpZiAobWRhdGEtPnNfYml0bWFwX2ZlID09IE5VTEwpIHsKIAkJCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKQEAgLTEwMzcsNyArOTIzLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgdWRmX2xvYWRfZmlsZXNldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAotCQkJICAgICBrZXJuZWxfbGJfYWRkciAqcm9vdCkKKwkJCSAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpyb290KQogewogCXN0cnVjdCBmaWxlU2V0RGVzYyAqZnNldDsKIApAQCAtMTExOSwxMyArMTAwNSwxMyBAQAogCiAJcGhkID0gKHN0cnVjdCBwYXJ0aXRpb25IZWFkZXJEZXNjICopcC0+cGFydGl0aW9uQ29udGVudHNVc2U7CiAJaWYgKHBoZC0+dW5hbGxvY1NwYWNlVGFibGUuZXh0TGVuZ3RoKSB7Ci0JCWtlcm5lbF9sYl9hZGRyIGxvYyA9IHsKKwkJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGxvYyA9IHsKIAkJCS5sb2dpY2FsQmxvY2tOdW0gPSBsZTMyX3RvX2NwdSgKIAkJCQlwaGQtPnVuYWxsb2NTcGFjZVRhYmxlLmV4dFBvc2l0aW9uKSwKIAkJCS5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPSBwX2luZGV4LAogCQl9OwogCi0JCW1hcC0+c191c3BhY2Uuc190YWJsZSA9IHVkZl9pZ2V0KHNiLCBsb2MpOworCQltYXAtPnNfdXNwYWNlLnNfdGFibGUgPSB1ZGZfaWdldChzYiwgJmxvYyk7CiAJCWlmICghbWFwLT5zX3VzcGFjZS5zX3RhYmxlKSB7CiAJCQl1ZGZfZGVidWcoImNhbm5vdCBsb2FkIHVuYWxsb2NTcGFjZVRhYmxlIChwYXJ0ICVkKVxuIiwKIAkJCQkJcF9pbmRleCk7CkBAIC0xMTU0LDEzICsxMDQwLDEzIEBACiAJCXVkZl9kZWJ1ZygicGFydGl0aW9uSW50ZWdyaXR5VGFibGUgKHBhcnQgJWQpXG4iLCBwX2luZGV4KTsKIAogCWlmIChwaGQtPmZyZWVkU3BhY2VUYWJsZS5leHRMZW5ndGgpIHsKLQkJa2VybmVsX2xiX2FkZHIgbG9jID0geworCQlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgbG9jID0gewogCQkJLmxvZ2ljYWxCbG9ja051bSA9IGxlMzJfdG9fY3B1KAogCQkJCXBoZC0+ZnJlZWRTcGFjZVRhYmxlLmV4dFBvc2l0aW9uKSwKIAkJCS5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPSBwX2luZGV4LAogCQl9OwogCi0JCW1hcC0+c19mc3BhY2Uuc190YWJsZSA9IHVkZl9pZ2V0KHNiLCBsb2MpOworCQltYXAtPnNfZnNwYWNlLnNfdGFibGUgPSB1ZGZfaWdldChzYiwgJmxvYyk7CiAJCWlmICghbWFwLT5zX2ZzcGFjZS5zX3RhYmxlKSB7CiAJCQl1ZGZfZGVidWcoImNhbm5vdCBsb2FkIGZyZWVkU3BhY2VUYWJsZSAocGFydCAlZClcbiIsCiAJCQkJcF9pbmRleCk7CkBAIC0xMTkyLDcgKzEwNzgsNyBAQAogewogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKIAlzdHJ1Y3QgdWRmX3BhcnRfbWFwICptYXAgPSAmc2JpLT5zX3BhcnRtYXBzW3BfaW5kZXhdOwotCWtlcm5lbF9sYl9hZGRyIGlubzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgaW5vOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqdmF0aTsKIAl1aW50MzJfdCBwb3M7CkBAIC0xMjAxLDcgKzEwODcsNyBAQAogCS8qIFZBVCBmaWxlIGVudHJ5IGlzIGluIHRoZSBsYXN0IHJlY29yZGVkIGJsb2NrICovCiAJaW5vLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IHR5cGUxX2luZGV4OwogCWluby5sb2dpY2FsQmxvY2tOdW0gPSBzYmktPnNfbGFzdF9ibG9jayAtIG1hcC0+c19wYXJ0aXRpb25fcm9vdDsKLQlzYmktPnNfdmF0X2lub2RlID0gdWRmX2lnZXQoc2IsIGlubyk7CisJc2JpLT5zX3ZhdF9pbm9kZSA9IHVkZl9pZ2V0KHNiLCAmaW5vKTsKIAlpZiAoIXNiaS0+c192YXRfaW5vZGUpCiAJCXJldHVybiAxOwogCkBAIC0xMzIyLDcgKzEyMDgsNyBAQAogfQogCiBzdGF0aWMgaW50IHVkZl9sb2FkX2xvZ2ljYWx2b2woc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc2VjdG9yX3QgYmxvY2ssCi0JCQkgICAgICAga2VybmVsX2xiX2FkZHIgKmZpbGVzZXQpCisJCQkgICAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpmaWxlc2V0KQogewogCXN0cnVjdCBsb2dpY2FsVm9sRGVzYyAqbHZkOwogCWludCBpLCBqLCBvZmZzZXQ7CkBAIC0xNDcxLDcgKzEzNTcsNyBAQAogCX0KIAogCWlmIChmaWxlc2V0KSB7Ci0JCWxvbmdfYWQgKmxhID0gKGxvbmdfYWQgKikmKGx2ZC0+bG9naWNhbFZvbENvbnRlbnRzVXNlWzBdKTsKKwkJc3RydWN0IGxvbmdfYWQgKmxhID0gKHN0cnVjdCBsb25nX2FkICopJihsdmQtPmxvZ2ljYWxWb2xDb250ZW50c1VzZVswXSk7CiAKIAkJKmZpbGVzZXQgPSBsZWxiX3RvX2NwdShsYS0+ZXh0TG9jYXRpb24pOwogCQl1ZGZfZGVidWcoIkZpbGVTZXQgZm91bmQgaW4gTG9naWNhbFZvbERlc2MgYXQgYmxvY2s9JWQsICIKQEAgLTE0OTAsNyArMTM3Niw3IEBACiAgKiB1ZGZfbG9hZF9sb2dpY2Fsdm9saW50CiAgKgogICovCi1zdGF0aWMgdm9pZCB1ZGZfbG9hZF9sb2dpY2Fsdm9saW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGtlcm5lbF9leHRlbnRfYWQgbG9jKQorc3RhdGljIHZvaWQgdWRmX2xvYWRfbG9naWNhbHZvbGludChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2V4dGVudF9hZCBsb2MpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAJdWludDE2X3QgaWRlbnQ7CkBAIC0xNTMzLDcgKzE0MTksNyBAQAogICoJV3JpdHRlbiwgdGVzdGVkLCBhbmQgcmVsZWFzZWQuCiAgKi8KIHN0YXRpYyBub2lubGluZSBpbnQgdWRmX3Byb2Nlc3Nfc2VxdWVuY2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbG9uZyBibG9jaywKLQkJCQlsb25nIGxhc3RibG9jaywga2VybmVsX2xiX2FkZHIgKmZpbGVzZXQpCisJCQkJbG9uZyBsYXN0YmxvY2ssIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZmlsZXNldCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlzdHJ1Y3QgdWRmX3Zkc19yZWNvcmQgdmRzW1ZEU19QT1NfTEVOR1RIXTsKQEAgLTE2NTUsOTYgKzE1NDEsMjEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiB1ZGZfY2hlY2tfdmFsaWQoKQotICovCi1zdGF0aWMgaW50IHVkZl9jaGVja192YWxpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbm92cnMsIGludCBzaWxlbnQpCi17Ci0JbG9uZyBibG9jazsKLQlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7Ci0KLQlpZiAobm92cnMpIHsKLQkJdWRmX2RlYnVnKCJWYWxpZGl0eSBjaGVjayBza2lwcGVkIGJlY2F1c2Ugb2Ygbm92cnMgb3B0aW9uXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCS8qIENoZWNrIHRoYXQgaXQgaXMgTlNSMDIgY29tcGxpYW50ICovCi0JLyogUHJvY2VzcyBhbnkgIkNELVJPTSBWb2x1bWUgRGVzY3JpcHRvciBTZXQiIChFQ01BIDE2NyAyLzguMy4xKSAqLwotCWJsb2NrID0gdWRmX3ZycyhzYiwgc2lsZW50KTsKLQlpZiAoYmxvY2sgPT0gLTEpCi0JCXVkZl9kZWJ1ZygiRmFpbGVkIHRvIHJlYWQgYnl0ZSAzMjc2OC4gQXNzdW1pbmcgb3BlbiAiCi0JCQkgICJkaXNjLiBTa2lwcGluZyB2YWxpZGl0eSBjaGVja1xuIik7Ci0JaWYgKGJsb2NrICYmICFzYmktPnNfbGFzdF9ibG9jaykKLQkJc2JpLT5zX2xhc3RfYmxvY2sgPSB1ZGZfZ2V0X2xhc3RfYmxvY2soc2IpOwotCXJldHVybiAhYmxvY2s7Ci19Ci0KLXN0YXRpYyBpbnQgdWRmX2xvYWRfc2VxdWVuY2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwga2VybmVsX2xiX2FkZHIgKmZpbGVzZXQpCitzdGF0aWMgaW50IHVkZl9sb2FkX3NlcXVlbmNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQkgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZmlsZXNldCkKIHsKIAlzdHJ1Y3QgYW5jaG9yVm9sRGVzY1B0ciAqYW5jaG9yOwotCXVpbnQxNl90IGlkZW50OwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJbG9uZyBtYWluX3MsIG1haW5fZSwgcmVzZXJ2ZV9zLCByZXNlcnZlX2U7Ci0JaW50IGk7CiAJc3RydWN0IHVkZl9zYl9pbmZvICpzYmk7CiAKLQlpZiAoIXNiKQotCQlyZXR1cm4gMTsKIAlzYmkgPSBVREZfU0Ioc2IpOworCWFuY2hvciA9IChzdHJ1Y3QgYW5jaG9yVm9sRGVzY1B0ciAqKWJoLT5iX2RhdGE7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYmktPnNfYW5jaG9yKTsgaSsrKSB7Ci0JCWlmICghc2JpLT5zX2FuY2hvcltpXSkKLQkJCWNvbnRpbnVlOworCS8qIExvY2F0ZSB0aGUgbWFpbiBzZXF1ZW5jZSAqLworCW1haW5fcyA9IGxlMzJfdG9fY3B1KGFuY2hvci0+bWFpblZvbERlc2NTZXFFeHQuZXh0TG9jYXRpb24pOworCW1haW5fZSA9IGxlMzJfdG9fY3B1KGFuY2hvci0+bWFpblZvbERlc2NTZXFFeHQuZXh0TGVuZ3RoKTsKKwltYWluX2UgPSBtYWluX2UgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJbWFpbl9lICs9IG1haW5fczsKIAotCQliaCA9IHVkZl9yZWFkX3RhZ2dlZChzYiwgc2JpLT5zX2FuY2hvcltpXSwgc2JpLT5zX2FuY2hvcltpXSwKLQkJCQkgICAgICZpZGVudCk7Ci0JCWlmICghYmgpCi0JCQljb250aW51ZTsKKwkvKiBMb2NhdGUgdGhlIHJlc2VydmUgc2VxdWVuY2UgKi8KKwlyZXNlcnZlX3MgPSBsZTMyX3RvX2NwdShhbmNob3ItPnJlc2VydmVWb2xEZXNjU2VxRXh0LmV4dExvY2F0aW9uKTsKKwlyZXNlcnZlX2UgPSBsZTMyX3RvX2NwdShhbmNob3ItPnJlc2VydmVWb2xEZXNjU2VxRXh0LmV4dExlbmd0aCk7CisJcmVzZXJ2ZV9lID0gcmVzZXJ2ZV9lID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXJlc2VydmVfZSArPSByZXNlcnZlX3M7CiAKLQkJYW5jaG9yID0gKHN0cnVjdCBhbmNob3JWb2xEZXNjUHRyICopYmgtPmJfZGF0YTsKLQotCQkvKiBMb2NhdGUgdGhlIG1haW4gc2VxdWVuY2UgKi8KLQkJbWFpbl9zID0gbGUzMl90b19jcHUoYW5jaG9yLT5tYWluVm9sRGVzY1NlcUV4dC5leHRMb2NhdGlvbik7Ci0JCW1haW5fZSA9IGxlMzJfdG9fY3B1KGFuY2hvci0+bWFpblZvbERlc2NTZXFFeHQuZXh0TGVuZ3RoKTsKLQkJbWFpbl9lID0gbWFpbl9lID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwotCQltYWluX2UgKz0gbWFpbl9zOwotCi0JCS8qIExvY2F0ZSB0aGUgcmVzZXJ2ZSBzZXF1ZW5jZSAqLwotCQlyZXNlcnZlX3MgPSBsZTMyX3RvX2NwdSgKLQkJCQlhbmNob3ItPnJlc2VydmVWb2xEZXNjU2VxRXh0LmV4dExvY2F0aW9uKTsKLQkJcmVzZXJ2ZV9lID0gbGUzMl90b19jcHUoCi0JCQkJYW5jaG9yLT5yZXNlcnZlVm9sRGVzY1NlcUV4dC5leHRMZW5ndGgpOwotCQlyZXNlcnZlX2UgPSByZXNlcnZlX2UgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7Ci0JCXJlc2VydmVfZSArPSByZXNlcnZlX3M7Ci0KLQkJYnJlbHNlKGJoKTsKLQotCQkvKiBQcm9jZXNzIHRoZSBtYWluICYgcmVzZXJ2ZSBzZXF1ZW5jZXMgKi8KLQkJLyogcmVzcG9uc2libGUgZm9yIGZpbmRpbmcgdGhlIFBhcnRpdGlvbkRlc2MocykgKi8KLQkJaWYgKCEodWRmX3Byb2Nlc3Nfc2VxdWVuY2Uoc2IsIG1haW5fcywgbWFpbl9lLAotCQkJCQkgICBmaWxlc2V0KSAmJgotCQkgICAgICB1ZGZfcHJvY2Vzc19zZXF1ZW5jZShzYiwgcmVzZXJ2ZV9zLCByZXNlcnZlX2UsCi0JCQkJCSAgIGZpbGVzZXQpKSkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChpID09IEFSUkFZX1NJWkUoc2JpLT5zX2FuY2hvcikpIHsKLQkJdWRmX2RlYnVnKCJObyBBbmNob3IgYmxvY2sgZm91bmRcbiIpOworCS8qIFByb2Nlc3MgdGhlIG1haW4gJiByZXNlcnZlIHNlcXVlbmNlcyAqLworCS8qIHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIHRoZSBQYXJ0aXRpb25EZXNjKHMpICovCisJaWYgKCF1ZGZfcHJvY2Vzc19zZXF1ZW5jZShzYiwgbWFpbl9zLCBtYWluX2UsIGZpbGVzZXQpKQogCQlyZXR1cm4gMTsKLQl9Ci0JdWRmX2RlYnVnKCJVc2luZyBhbmNob3IgaW4gYmxvY2sgJWRcbiIsIHNiaS0+c19hbmNob3JbaV0pOworCXJldHVybiAhdWRmX3Byb2Nlc3Nfc2VxdWVuY2Uoc2IsIHJlc2VydmVfcywgcmVzZXJ2ZV9lLCBmaWxlc2V0KTsKK30KIAorLyoKKyAqIENoZWNrIHdoZXRoZXIgdGhlcmUgaXMgYW4gYW5jaG9yIGJsb2NrIGluIHRoZSBnaXZlbiBibG9jayBhbmQKKyAqIGxvYWQgVm9sdW1lIERlc2NyaXB0b3IgU2VxdWVuY2UgaWYgc28uCisgKi8KK3N0YXRpYyBpbnQgdWRmX2NoZWNrX2FuY2hvcl9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzZWN0b3JfdCBibG9jaywKKwkJCQkgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZmlsZXNldCkKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXVpbnQxNl90IGlkZW50OworCWludCByZXQ7CisKKwlpZiAoVURGX1FVRVJZX0ZMQUcoc2IsIFVERl9GTEFHX1ZBUkNPTlYpICYmCisJICAgIHVkZl9maXhlZF90b192YXJpYWJsZShibG9jaykgPj0KKwkgICAgc2ItPnNfYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSA+PiBzYi0+c19ibG9ja3NpemVfYml0cykKKwkJcmV0dXJuIDA7CisKKwliaCA9IHVkZl9yZWFkX3RhZ2dlZChzYiwgYmxvY2ssIGJsb2NrLCAmaWRlbnQpOworCWlmICghYmgpCisJCXJldHVybiAwOworCWlmIChpZGVudCAhPSBUQUdfSURFTlRfQVZEUCkgeworCQlicmVsc2UoYmgpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0ID0gdWRmX2xvYWRfc2VxdWVuY2Uoc2IsIGJoLCBmaWxlc2V0KTsKKwlicmVsc2UoYmgpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFNlYXJjaCBmb3IgYW4gYW5jaG9yIHZvbHVtZSBkZXNjcmlwdG9yIHBvaW50ZXIgKi8KK3N0YXRpYyBzZWN0b3JfdCB1ZGZfc2Nhbl9hbmNob3JzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHNlY3Rvcl90IGxhc3RibG9jaywKKwkJCQkgc3RydWN0IGtlcm5lbF9sYl9hZGRyICpmaWxlc2V0KQoreworCXNlY3Rvcl90IGxhc3RbNl07CisJaW50IGk7CisJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOworCWludCBsYXN0X2NvdW50ID0gMDsKKworCS8qIEZpcnN0IHRyeSB1c2VyIHByb3ZpZGVkIGFuY2hvciAqLworCWlmIChzYmktPnNfYW5jaG9yKSB7CisJCWlmICh1ZGZfY2hlY2tfYW5jaG9yX2Jsb2NrKHNiLCBzYmktPnNfYW5jaG9yLCBmaWxlc2V0KSkKKwkJCXJldHVybiBsYXN0YmxvY2s7CisJfQorCS8qCisJICogYWNjb3JkaW5nIHRvIHNwZWMsIGFuY2hvciBpcyBpbiBlaXRoZXI6CisJICogICAgIGJsb2NrIDI1NgorCSAqICAgICBsYXN0YmxvY2stMjU2CisJICogICAgIGxhc3RibG9jaworCSAqICBob3dldmVyLCBpZiB0aGUgZGlzYyBpc24ndCBjbG9zZWQsIGl0IGNvdWxkIGJlIDUxMi4KKwkgKi8KKwlpZiAodWRmX2NoZWNrX2FuY2hvcl9ibG9jayhzYiwgc2JpLT5zX3Nlc3Npb24gKyAyNTYsIGZpbGVzZXQpKQorCQlyZXR1cm4gbGFzdGJsb2NrOworCS8qCisJICogVGhlIHRyb3VibGUgaXMgd2hpY2ggYmxvY2sgaXMgdGhlIGxhc3Qgb25lLiBEcml2ZXMgb2Z0ZW4gbWlzcmVwb3J0CisJICogdGhpcyBzbyB3ZSB0cnkgdmFyaW91cyBwb3NzaWJpbGl0aWVzLgorCSAqLworCWxhc3RbbGFzdF9jb3VudCsrXSA9IGxhc3RibG9jazsKKwlpZiAobGFzdGJsb2NrID49IDEpCisJCWxhc3RbbGFzdF9jb3VudCsrXSA9IGxhc3RibG9jayAtIDE7CisJbGFzdFtsYXN0X2NvdW50KytdID0gbGFzdGJsb2NrICsgMTsKKwlpZiAobGFzdGJsb2NrID49IDIpCisJCWxhc3RbbGFzdF9jb3VudCsrXSA9IGxhc3RibG9jayAtIDI7CisJaWYgKGxhc3RibG9jayA+PSAxNTApCisJCWxhc3RbbGFzdF9jb3VudCsrXSA9IGxhc3RibG9jayAtIDE1MDsKKwlpZiAobGFzdGJsb2NrID49IDE1MikKKwkJbGFzdFtsYXN0X2NvdW50KytdID0gbGFzdGJsb2NrIC0gMTUyOworCisJZm9yIChpID0gMDsgaSA8IGxhc3RfY291bnQ7IGkrKykgeworCQlpZiAobGFzdFtpXSA+PSBzYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9zaXplID4+CisJCQkJc2ItPnNfYmxvY2tzaXplX2JpdHMpCisJCQljb250aW51ZTsKKwkJaWYgKHVkZl9jaGVja19hbmNob3JfYmxvY2soc2IsIGxhc3RbaV0sIGZpbGVzZXQpKQorCQkJcmV0dXJuIGxhc3RbaV07CisJCWlmIChsYXN0W2ldIDwgMjU2KQorCQkJY29udGludWU7CisJCWlmICh1ZGZfY2hlY2tfYW5jaG9yX2Jsb2NrKHNiLCBsYXN0W2ldIC0gMjU2LCBmaWxlc2V0KSkKKwkJCXJldHVybiBsYXN0W2ldOworCX0KKworCS8qIEZpbmFsbHkgdHJ5IGJsb2NrIDUxMiBpbiBjYXNlIG1lZGlhIGlzIG9wZW4gKi8KKwlpZiAodWRmX2NoZWNrX2FuY2hvcl9ibG9jayhzYiwgc2JpLT5zX3Nlc3Npb24gKyA1MTIsIGZpbGVzZXQpKQorCQlyZXR1cm4gbGFzdFswXTsKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEZpbmQgYW4gYW5jaG9yIHZvbHVtZSBkZXNjcmlwdG9yIGFuZCBsb2FkIFZvbHVtZSBEZXNjcmlwdG9yIFNlcXVlbmNlIGZyb20KKyAqIGFyZWEgc3BlY2lmaWVkIGJ5IGl0LiBUaGUgZnVuY3Rpb24gZXhwZWN0cyBzYmktPnNfbGFzdGJsb2NrIHRvIGJlIHRoZSBsYXN0CisgKiBibG9jayBvbiB0aGUgbWVkaWEuCisgKgorICogUmV0dXJuIDEgaWYgb2ssIDAgaWYgbm90IGZvdW5kLgorICoKKyAqLworc3RhdGljIGludCB1ZGZfZmluZF9hbmNob3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCSAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZmlsZXNldCkKK3sKKwlzZWN0b3JfdCBsYXN0YmxvY2s7CisJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOworCisJbGFzdGJsb2NrID0gdWRmX3NjYW5fYW5jaG9ycyhzYiwgc2JpLT5zX2xhc3RfYmxvY2ssIGZpbGVzZXQpOworCWlmIChsYXN0YmxvY2spCisJCWdvdG8gb3V0OworCisJLyogTm8gYW5jaG9yIGZvdW5kPyBUcnkgVkFSQ09OViBjb252ZXJzaW9uIG9mIGJsb2NrIG51bWJlcnMgKi8KKwlVREZfU0VUX0ZMQUcoc2IsIFVERl9GTEFHX1ZBUkNPTlYpOworCS8qIEZpcnN0bHksIHdlIHRyeSB0byBub3QgY29udmVydCBudW1iZXIgb2YgdGhlIGxhc3QgYmxvY2sgKi8KKwlsYXN0YmxvY2sgPSB1ZGZfc2Nhbl9hbmNob3JzKHNiLAorCQkJCXVkZl92YXJpYWJsZV90b19maXhlZChzYmktPnNfbGFzdF9ibG9jayksCisJCQkJZmlsZXNldCk7CisJaWYgKGxhc3RibG9jaykKKwkJZ290byBvdXQ7CisKKwkvKiBTZWNvbmRseSwgd2UgdHJ5IHdpdGggY29udmVydGVkIG51bWJlciBvZiB0aGUgbGFzdCBibG9jayAqLworCWxhc3RibG9jayA9IHVkZl9zY2FuX2FuY2hvcnMoc2IsIHNiaS0+c19sYXN0X2Jsb2NrLCBmaWxlc2V0KTsKKwlpZiAoIWxhc3RibG9jaykgeworCQkvKiBWQVJDT05WIGRpZG4ndCBoZWxwLiBDbGVhciBpdC4gKi8KKwkJVURGX0NMRUFSX0ZMQUcoc2IsIFVERl9GTEFHX1ZBUkNPTlYpOworCQlyZXR1cm4gMDsKKwl9CitvdXQ6CisJc2JpLT5zX2xhc3RfYmxvY2sgPSBsYXN0YmxvY2s7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDaGVjayBWb2x1bWUgU3RydWN0dXJlIERlc2NyaXB0b3IsIGZpbmQgQW5jaG9yIGJsb2NrIGFuZCBsb2FkIFZvbHVtZQorICogRGVzY3JpcHRvciBTZXF1ZW5jZQorICovCitzdGF0aWMgaW50IHVkZl9sb2FkX3ZycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgdWRmX29wdGlvbnMgKnVvcHQsCisJCQlpbnQgc2lsZW50LCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmZpbGVzZXQpCit7CisJc3RydWN0IHVkZl9zYl9pbmZvICpzYmkgPSBVREZfU0Ioc2IpOworCWxvZmZfdCBuc3Jfb2ZmOworCisJaWYgKCFzYl9zZXRfYmxvY2tzaXplKHNiLCB1b3B0LT5ibG9ja3NpemUpKSB7CisJCWlmICghc2lsZW50KQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVURGLWZzOiBCYWQgYmxvY2sgc2l6ZVxuIik7CisJCXJldHVybiAwOworCX0KKwlzYmktPnNfbGFzdF9ibG9jayA9IHVvcHQtPmxhc3RibG9jazsKKwlpZiAoIXVvcHQtPm5vdnJzKSB7CisJCS8qIENoZWNrIHRoYXQgaXQgaXMgTlNSMDIgY29tcGxpYW50ICovCisJCW5zcl9vZmYgPSB1ZGZfY2hlY2tfdnNkKHNiKTsKKwkJaWYgKCFuc3Jfb2ZmKSB7CisJCQlpZiAoIXNpbGVudCkKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVREYtZnM6IE5vIFZSUyBmb3VuZFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAobnNyX29mZiA9PSAtMSkKKwkJCXVkZl9kZWJ1ZygiRmFpbGVkIHRvIHJlYWQgYnl0ZSAzMjc2OC4gQXNzdW1pbmcgb3BlbiAiCisJCQkJICAiZGlzYy4gU2tpcHBpbmcgdmFsaWRpdHkgY2hlY2tcbiIpOworCQlpZiAoIXNiaS0+c19sYXN0X2Jsb2NrKQorCQkJc2JpLT5zX2xhc3RfYmxvY2sgPSB1ZGZfZ2V0X2xhc3RfYmxvY2soc2IpOworCX0gZWxzZSB7CisJCXVkZl9kZWJ1ZygiVmFsaWRpdHkgY2hlY2sgc2tpcHBlZCBiZWNhdXNlIG9mIG5vdnJzIG9wdGlvblxuIik7CisJfQorCisJLyogTG9vayBmb3IgYW5jaG9yIGJsb2NrIGFuZCBsb2FkIFZvbHVtZSBEZXNjcmlwdG9yIFNlcXVlbmNlICovCisJc2JpLT5zX2FuY2hvciA9IHVvcHQtPmFuY2hvcjsKKwlpZiAoIXVkZl9maW5kX2FuY2hvcihzYiwgZmlsZXNldCkpIHsKKwkJaWYgKCFzaWxlbnQpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVREYtZnM6IE5vIGFuY2hvciBmb3VuZFxuIik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIHZvaWQgdWRmX29wZW5fbHZpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gc2JpLT5zX2x2aWRfYmg7CiAJc3RydWN0IGxvZ2ljYWxWb2xJbnRlZ3JpdHlEZXNjICpsdmlkOwogCXN0cnVjdCBsb2dpY2FsVm9sSW50ZWdyaXR5RGVzY0ltcFVzZSAqbHZpZGl1OworCiAJaWYgKCFiaCkKIAkJcmV0dXJuOwotCiAJbHZpZCA9IChzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKiliaC0+Yl9kYXRhOwogCWx2aWRpdSA9IHVkZl9zYl9sdmlkaXUoc2JpKTsKIApAQCAtMTc1MiwxNCArMTc1MiwxNSBAQAogCWx2aWRpdS0+aW1wSWRlbnQuaWRlbnRTdWZmaXhbMV0gPSBVREZfT1NfSURfTElOVVg7CiAJdWRmX3RpbWVfdG9fZGlza19zdGFtcCgmbHZpZC0+cmVjb3JkaW5nRGF0ZUFuZFRpbWUsCiAJCQkJQ1VSUkVOVF9USU1FKTsKLQlsdmlkLT5pbnRlZ3JpdHlUeXBlID0gTFZJRF9JTlRFR1JJVFlfVFlQRV9PUEVOOworCWx2aWQtPmludGVncml0eVR5cGUgPSBjcHVfdG9fbGUzMihMVklEX0lOVEVHUklUWV9UWVBFX09QRU4pOwogCiAJbHZpZC0+ZGVzY1RhZy5kZXNjQ1JDID0gY3B1X3RvX2xlMTYoCi0JCWNyY19pdHVfdCgwLCAoY2hhciAqKWx2aWQgKyBzaXplb2YodGFnKSwKKwkJY3JjX2l0dV90KDAsIChjaGFyICopbHZpZCArIHNpemVvZihzdHJ1Y3QgdGFnKSwKIAkJCWxlMTZfdG9fY3B1KGx2aWQtPmRlc2NUYWcuZGVzY0NSQ0xlbmd0aCkpKTsKIAogCWx2aWQtPmRlc2NUYWcudGFnQ2hlY2tzdW0gPSB1ZGZfdGFnX2NoZWNrc3VtKCZsdmlkLT5kZXNjVGFnKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CisJc2JpLT5zX2x2aWRfZGlydHkgPSAwOwogfQogCiBzdGF0aWMgdm9pZCB1ZGZfY2xvc2VfbHZpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtMTc3MywxMCArMTc3NCw2IEBACiAJCXJldHVybjsKIAogCWx2aWQgPSAoc3RydWN0IGxvZ2ljYWxWb2xJbnRlZ3JpdHlEZXNjICopYmgtPmJfZGF0YTsKLQotCWlmIChsdmlkLT5pbnRlZ3JpdHlUeXBlICE9IExWSURfSU5URUdSSVRZX1RZUEVfT1BFTikKLQkJcmV0dXJuOwotCiAJbHZpZGl1ID0gdWRmX3NiX2x2aWRpdShzYmkpOwogCWx2aWRpdS0+aW1wSWRlbnQuaWRlbnRTdWZmaXhbMF0gPSBVREZfT1NfQ0xBU1NfVU5JWDsKIAlsdmlkaXUtPmltcElkZW50LmlkZW50U3VmZml4WzFdID0gVURGX09TX0lEX0xJTlVYOwpAQCAtMTc5MCwxMSArMTc4NywxMiBAQAogCWx2aWQtPmludGVncml0eVR5cGUgPSBjcHVfdG9fbGUzMihMVklEX0lOVEVHUklUWV9UWVBFX0NMT1NFKTsKIAogCWx2aWQtPmRlc2NUYWcuZGVzY0NSQyA9IGNwdV90b19sZTE2KAotCQkJY3JjX2l0dV90KDAsIChjaGFyICopbHZpZCArIHNpemVvZih0YWcpLAorCQkJY3JjX2l0dV90KDAsIChjaGFyICopbHZpZCArIHNpemVvZihzdHJ1Y3QgdGFnKSwKIAkJCQlsZTE2X3RvX2NwdShsdmlkLT5kZXNjVGFnLmRlc2NDUkNMZW5ndGgpKSk7CiAKIAlsdmlkLT5kZXNjVGFnLnRhZ0NoZWNrc3VtID0gdWRmX3RhZ19jaGVja3N1bSgmbHZpZC0+ZGVzY1RhZyk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOworCXNiaS0+c19sdmlkX2RpcnR5ID0gMDsKIH0KIAogc3RhdGljIHZvaWQgdWRmX3NiX2ZyZWVfYml0bWFwKHN0cnVjdCB1ZGZfYml0bWFwICpiaXRtYXApCkBAIC0xODQ2LDE1ICsxODQ0LDE4IEBACiBzdGF0aWMgaW50IHVkZl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKm9wdGlvbnMsIGludCBzaWxlbnQpCiB7CiAJaW50IGk7CisJaW50IHJldDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKIAlzdHJ1Y3QgdWRmX29wdGlvbnMgdW9wdDsKLQlrZXJuZWxfbGJfYWRkciByb290ZGlyLCBmaWxlc2V0OworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciByb290ZGlyLCBmaWxlc2V0OwogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpOwogCiAJdW9wdC5mbGFncyA9ICgxIDw8IFVERl9GTEFHX1VTRV9BRF9JTl9JQ0IpIHwgKDEgPDwgVURGX0ZMQUdfU1RSSUNUKTsKIAl1b3B0LnVpZCA9IC0xOwogCXVvcHQuZ2lkID0gLTE7CiAJdW9wdC51bWFzayA9IDA7CisJdW9wdC5mbW9kZSA9IFVERl9JTlZBTElEX01PREU7CisJdW9wdC5kbW9kZSA9IFVERl9JTlZBTElEX01PREU7CiAKIAlzYmkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWRmX3NiX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNiaSkKQEAgLTE4OTIsMTUgKzE4OTMsMTAgQEAKIAlzYmktPnNfdWlkID0gdW9wdC51aWQ7CiAJc2JpLT5zX2dpZCA9IHVvcHQuZ2lkOwogCXNiaS0+c191bWFzayA9IHVvcHQudW1hc2s7CisJc2JpLT5zX2Ztb2RlID0gdW9wdC5mbW9kZTsKKwlzYmktPnNfZG1vZGUgPSB1b3B0LmRtb2RlOwogCXNiaS0+c19ubHNfbWFwID0gdW9wdC5ubHNfbWFwOwogCi0JLyogU2V0IHRoZSBibG9jayBzaXplIGZvciBhbGwgdHJhbnNmZXJzICovCi0JaWYgKCFzYl9taW5fYmxvY2tzaXplKHNiLCB1b3B0LmJsb2Nrc2l6ZSkpIHsKLQkJdWRmX2RlYnVnKCJCYWQgYmxvY2sgc2l6ZSAoJWQpXG4iLCB1b3B0LmJsb2Nrc2l6ZSk7Ci0JCXByaW50ayhLRVJOX0VSUiAidWRmOiBiYWQgYmxvY2sgc2l6ZSAoJWQpXG4iLCB1b3B0LmJsb2Nrc2l6ZSk7Ci0JCWdvdG8gZXJyb3Jfb3V0OwotCX0KLQogCWlmICh1b3B0LnNlc3Npb24gPT0gMHhGRkZGRkZGRikKIAkJc2JpLT5zX3Nlc3Npb24gPSB1ZGZfZ2V0X2xhc3Rfc2Vzc2lvbihzYik7CiAJZWxzZQpAQCAtMTkwOCwxOCArMTkwNCw2IEBACiAKIAl1ZGZfZGVidWcoIk11bHRpLXNlc3Npb249JWRcbiIsIHNiaS0+c19zZXNzaW9uKTsKIAotCXNiaS0+c19sYXN0X2Jsb2NrID0gdW9wdC5sYXN0YmxvY2s7Ci0Jc2JpLT5zX2FuY2hvclswXSA9IHNiaS0+c19hbmNob3JbMV0gPSAwOwotCXNiaS0+c19hbmNob3JbMl0gPSB1b3B0LmFuY2hvcjsKLQotCWlmICh1ZGZfY2hlY2tfdmFsaWQoc2IsIHVvcHQubm92cnMsIHNpbGVudCkpIHsKLQkJLyogcmVhZCB2b2x1bWUgcmVjb2duaXRpb24gc2VxdWVuY2VzICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVERi1mczogTm8gVlJTIGZvdW5kXG4iKTsKLQkJZ290byBlcnJvcl9vdXQ7Ci0JfQotCi0JdWRmX2ZpbmRfYW5jaG9yKHNiKTsKLQogCS8qIEZpbGwgaW4gdGhlIHJlc3Qgb2YgdGhlIHN1cGVyYmxvY2sgKi8KIAlzYi0+c19vcCA9ICZ1ZGZfc2Jfb3BzOwogCXNiLT5zX2V4cG9ydF9vcCA9ICZ1ZGZfZXhwb3J0X29wczsKQEAgLTE5MjgsNyArMTkxMiwyMSBAQAogCXNiLT5zX21hZ2ljID0gVURGX1NVUEVSX01BR0lDOwogCXNiLT5zX3RpbWVfZ3JhbiA9IDEwMDA7CiAKLQlpZiAodWRmX2xvYWRfc2VxdWVuY2Uoc2IsICZmaWxlc2V0KSkgeworCWlmICh1b3B0LmZsYWdzICYgKDEgPDwgVURGX0ZMQUdfQkxPQ0tTSVpFX1NFVCkpIHsKKwkJcmV0ID0gdWRmX2xvYWRfdnJzKHNiLCAmdW9wdCwgc2lsZW50LCAmZmlsZXNldCk7CisJfSBlbHNlIHsKKwkJdW9wdC5ibG9ja3NpemUgPSBiZGV2X2hhcmRzZWN0X3NpemUoc2ItPnNfYmRldik7CisJCXJldCA9IHVkZl9sb2FkX3ZycyhzYiwgJnVvcHQsIHNpbGVudCwgJmZpbGVzZXQpOworCQlpZiAoIXJldCAmJiB1b3B0LmJsb2Nrc2l6ZSAhPSBVREZfREVGQVVMVF9CTE9DS1NJWkUpIHsKKwkJCWlmICghc2lsZW50KQorCQkJCXByaW50ayhLRVJOX05PVElDRQorCQkJCSAgICAgICAiVURGLWZzOiBSZXNjYW5uaW5nIHdpdGggYmxvY2tzaXplICIKKwkJCQkgICAgICAgIiVkXG4iLCBVREZfREVGQVVMVF9CTE9DS1NJWkUpOworCQkJdW9wdC5ibG9ja3NpemUgPSBVREZfREVGQVVMVF9CTE9DS1NJWkU7CisJCQlyZXQgPSB1ZGZfbG9hZF92cnMoc2IsICZ1b3B0LCBzaWxlbnQsICZmaWxlc2V0KTsKKwkJfQorCX0KKwlpZiAoIXJldCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJVREYtZnM6IE5vIHBhcnRpdGlvbiBmb3VuZCAoMSlcbiIpOwogCQlnb3RvIGVycm9yX291dDsKIAl9CkBAIC0xOTc4LDcgKzE5NzYsNyBAQAogCX0KIAogCWlmICghc2lsZW50KSB7Ci0JCXRpbWVzdGFtcCB0czsKKwkJc3RydWN0IHRpbWVzdGFtcCB0czsKIAkJdWRmX3RpbWVfdG9fZGlza19zdGFtcCgmdHMsIHNiaS0+c19yZWNvcmRfdGltZSk7CiAJCXVkZl9pbmZvKCJVREY6IE1vdW50aW5nIHZvbHVtZSAnJXMnLCAiCiAJCQkgInRpbWVzdGFtcCAlMDR1LyUwMnUvJTAydSAlMDJ1OiUwMnUgKCV4KVxuIiwKQEAgLTE5OTEsNyArMTk4OSw3IEBACiAJLyogQXNzaWduIHRoZSByb290IGlub2RlICovCiAJLyogYXNzaWduIGlub2RlcyBieSBwaHlzaWNhbCBibG9jayBudW1iZXIgKi8KIAkvKiBwZXJoYXBzIGl0J3Mgbm90IGV4dGVuc2libGUgZW5vdWdoLCBidXQgZm9yIG5vdyAuLi4gKi8KLQlpbm9kZSA9IHVkZl9pZ2V0KHNiLCByb290ZGlyKTsKKwlpbm9kZSA9IHVkZl9pZ2V0KHNiLCAmcm9vdGRpcik7CiAJaWYgKCFpbm9kZSkgewogCQlwcmludGsoS0VSTl9FUlIgIlVERi1mczogRXJyb3IgaW4gdWRmX2lnZXQsIGJsb2NrPSVkLCAiCiAJCQkJInBhcnRpdGlvbj0lZFxuIiwKQEAgLTIwODEsMTEgKzIwNzksMzEgQEAKIAlzYi0+c19mc19pbmZvID0gTlVMTDsKIH0KIAorc3RhdGljIGludCB1ZGZfc3luY19mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgd2FpdCkKK3sKKwlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CisKKwltdXRleF9sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOworCWlmIChzYmktPnNfbHZpZF9kaXJ0eSkgeworCQkvKgorCQkgKiBCbG9ja2RldmljZSB3aWxsIGJlIHN5bmNlZCBsYXRlciBzbyB3ZSBkb24ndCBoYXZlIHRvIHN1Ym1pdAorCQkgKiB0aGUgYnVmZmVyIGZvciBJTworCQkgKi8KKwkJbWFya19idWZmZXJfZGlydHkoc2JpLT5zX2x2aWRfYmgpOworCQlzYi0+c19kaXJ0ID0gMDsKKwkJc2JpLT5zX2x2aWRfZGlydHkgPSAwOworCX0KKwltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB1ZGZfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGVudHJ5LT5kX3NiOwogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKIAlzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2NJbXBVc2UgKmx2aWRpdTsKKwl1NjQgaWQgPSBodWdlX2VuY29kZV9kZXYoc2ItPnNfYmRldi0+YmRfZGV2KTsKIAogCWlmIChzYmktPnNfbHZpZF9iaCAhPSBOVUxMKQogCQlsdmlkaXUgPSB1ZGZfc2JfbHZpZGl1KHNiaSk7CkBAIC0yMTAxLDggKzIxMTksOSBAQAogCQkJCQkgIGxlMzJfdG9fY3B1KGx2aWRpdS0+bnVtRGlycykpIDogMCkKIAkJCSsgYnVmLT5mX2JmcmVlOwogCWJ1Zi0+Zl9mZnJlZSA9IGJ1Zi0+Zl9iZnJlZTsKLQkvKiBfX2tlcm5lbF9mc2lkX3QgZl9mc2lkICovCiAJYnVmLT5mX25hbWVsZW4gPSBVREZfTkFNRV9MRU4gLSAyOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpaWQ7CisJYnVmLT5mX2ZzaWQudmFsWzFdID0gKHUzMikoaWQgPj4gMzIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMTE0LDcgKzIxMzMsNyBAQAogCXVuc2lnbmVkIGludCBhY2N1bSA9IDA7CiAJaW50IGluZGV4OwogCWludCBibG9jayA9IDAsIG5ld2Jsb2NrOwotCWtlcm5lbF9sYl9hZGRyIGxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgbG9jOwogCXVpbnQzMl90IGJ5dGVzOwogCXVpbnQ4X3QgKnB0cjsKIAl1aW50MTZfdCBpZGVudDsKQEAgLTIxMjQsNyArMjE0Myw3IEBACiAKIAlsb2MubG9naWNhbEJsb2NrTnVtID0gYml0bWFwLT5zX2V4dFBvc2l0aW9uOwogCWxvYy5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPSBVREZfU0Ioc2IpLT5zX3BhcnRpdGlvbjsKLQliaCA9IHVkZl9yZWFkX3B0YWdnZWQoc2IsIGxvYywgMCwgJmlkZW50KTsKKwliaCA9IHVkZl9yZWFkX3B0YWdnZWQoc2IsICZsb2MsIDAsICZpZGVudCk7CiAKIAlpZiAoIWJoKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidWRmOiB1ZGZfY291bnRfZnJlZSBmYWlsZWRcbiIpOwpAQCAtMjE0Nyw3ICsyMTY2LDcgQEAKIAkJYnl0ZXMgLT0gY3VyX2J5dGVzOwogCQlpZiAoYnl0ZXMpIHsKIAkJCWJyZWxzZShiaCk7Ci0JCQluZXdibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCBsb2MsICsrYmxvY2spOworCQkJbmV3YmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgJmxvYywgKytibG9jayk7CiAJCQliaCA9IHVkZl90cmVhZChzYiwgbmV3YmxvY2spOwogCQkJaWYgKCFiaCkgewogCQkJCXVkZl9kZWJ1ZygicmVhZCBmYWlsZWRcbiIpOwpAQCAtMjE3MCw3ICsyMTg5LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgYWNjdW0gPSAwOwogCXVpbnQzMl90IGVsZW47Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYzsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgZWxvYzsKIAlpbnQ4X3QgZXR5cGU7CiAJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zOwogCmRpZmYgLS1naXQgYS9mcy91ZGYvdHJ1bmNhdGUuYyBiL2ZzL3VkZi90cnVuY2F0ZS5jCmluZGV4IDY1ZTE5YjQuLjIyNTUyN2MgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi90cnVuY2F0ZS5jCisrKyBiL2ZzL3VkZi90cnVuY2F0ZS5jCkBAIC0yOCwxMCArMjgsMTAgQEAKICNpbmNsdWRlICJ1ZGZfc2IuaCIKIAogc3RhdGljIHZvaWQgZXh0ZW50X3RydW5jKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmVwb3MsCi0JCQkga2VybmVsX2xiX2FkZHIgZWxvYywgaW50OF90IGV0eXBlLCB1aW50MzJfdCBlbGVuLAorCQkJIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqZWxvYywgaW50OF90IGV0eXBlLCB1aW50MzJfdCBlbGVuLAogCQkJIHVpbnQzMl90IG5lbGVuKQogewotCWtlcm5lbF9sYl9hZGRyIG5lbG9jID0ge307CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIG5lbG9jID0ge307CiAJaW50IGxhc3RfYmxvY2sgPSAoZWxlbiArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpID4+CiAJCWlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCWludCBmaXJzdF9ibG9jayA9IChuZWxlbiArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpID4+CkBAIC00MywxMiArNDMsMTIgQEAKIAkJCQkJbGFzdF9ibG9jayk7CiAJCQlldHlwZSA9IChFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgPj4gMzApOwogCQl9IGVsc2UKLQkJCW5lbG9jID0gZWxvYzsKKwkJCW5lbG9jID0gKmVsb2M7CiAJCW5lbGVuID0gKGV0eXBlIDw8IDMwKSB8IG5lbGVuOwogCX0KIAogCWlmIChlbGVuICE9IG5lbGVuKSB7Ci0JCXVkZl93cml0ZV9hZXh0KGlub2RlLCBlcG9zLCBuZWxvYywgbmVsZW4sIDApOworCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgZXBvcywgJm5lbG9jLCBuZWxlbiwgMCk7CiAJCWlmIChsYXN0X2Jsb2NrIC0gZmlyc3RfYmxvY2sgPiAwKSB7CiAJCQlpZiAoZXR5cGUgPT0gKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQogCQkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwpAQCAtNjgsNyArNjgsNyBAQAogdm9pZCB1ZGZfdHJ1bmNhdGVfdGFpbF9leHRlbnQoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MgPSB7fTsKLQlrZXJuZWxfbGJfYWRkciBlbG9jOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jOwogCXVpbnQzMl90IGVsZW4sIG5lbGVuOwogCXVpbnQ2NF90IGxiY291bnQgPSAwOwogCWludDhfdCBldHlwZSA9IC0xLCBuZXR5cGU7CkBAIC04Myw5ICs4Myw5IEBACiAJCXJldHVybjsKIAogCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQlhZHNpemUgPSBzaXplb2Yoc2hvcnRfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAllbHNlIGlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCWFkc2l6ZSA9IHNpemVvZihsb25nX2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAllbHNlCiAJCUJVRygpOwogCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkJCQkgICAgICAgKHVuc2lnbmVkKWVsZW4pOwogCQkJbmVsZW4gPSBlbGVuIC0gKGxiY291bnQgLSBpbm9kZS0+aV9zaXplKTsKIAkJCWVwb3Mub2Zmc2V0IC09IGFkc2l6ZTsKLQkJCWV4dGVudF90cnVuYyhpbm9kZSwgJmVwb3MsIGVsb2MsIGV0eXBlLCBlbGVuLCBuZWxlbik7CisJCQlleHRlbnRfdHJ1bmMoaW5vZGUsICZlcG9zLCAmZWxvYywgZXR5cGUsIGVsZW4sIG5lbGVuKTsKIAkJCWVwb3Mub2Zmc2V0ICs9IGFkc2l6ZTsKIAkJCWlmICh1ZGZfbmV4dF9hZXh0KGlub2RlLCAmZXBvcywgJmVsb2MsICZlbGVuLCAxKSAhPSAtMSkKIAkJCQlwcmludGsoS0VSTl9FUlIgInVkZl90cnVuY2F0ZV90YWlsX2V4dGVudCgpOiAiCkBAIC0xMjQsNyArMTI0LDcgQEAKIHZvaWQgdWRmX2Rpc2NhcmRfcHJlYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MgPSB7IE5VTEwsIDAsIHswLCAwfSB9OwotCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIGVsb2M7CiAJdWludDMyX3QgZWxlbjsKIAl1aW50NjRfdCBsYmNvdW50ID0gMDsKIAlpbnQ4X3QgZXR5cGUgPSAtMSwgbmV0eXBlOwpAQCAtMTM2LDkgKzEzNiw5IEBACiAJCXJldHVybjsKIAogCWlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQotCQlhZHNpemUgPSBzaXplb2Yoc2hvcnRfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IHNob3J0X2FkKTsKIAllbHNlIGlmIChpaW5mby0+aV9hbGxvY190eXBlID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCWFkc2l6ZSA9IHNpemVvZihsb25nX2FkKTsKKwkJYWRzaXplID0gc2l6ZW9mKHN0cnVjdCBsb25nX2FkKTsKIAllbHNlCiAJCWFkc2l6ZSA9IDA7CiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogCWlmIChldHlwZSA9PSAoRVhUX05PVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKSB7CiAJCWVwb3Mub2Zmc2V0IC09IGFkc2l6ZTsKIAkJbGJjb3VudCAtPSBlbGVuOwotCQlleHRlbnRfdHJ1bmMoaW5vZGUsICZlcG9zLCBlbG9jLCBldHlwZSwgZWxlbiwgMCk7CisJCWV4dGVudF90cnVuYyhpbm9kZSwgJmVwb3MsICZlbG9jLCBldHlwZSwgZWxlbiwgMCk7CiAJCWlmICghZXBvcy5iaCkgewogCQkJaWluZm8tPmlfbGVuQWxsb2MgPQogCQkJCWVwb3Mub2Zmc2V0IC0KQEAgLTIwMCw3ICsyMDAsNyBAQAogdm9pZCB1ZGZfdHJ1bmNhdGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvczsKLQlrZXJuZWxfbGJfYWRkciBlbG9jLCBuZWxvYyA9IHt9OworCXN0cnVjdCBrZXJuZWxfbGJfYWRkciBlbG9jLCBuZWxvYyA9IHt9OwogCXVpbnQzMl90IGVsZW4sIG5lbGVuID0gMCwgaW5kaXJlY3RfZXh0X2xlbiA9IDAsIGxlbmFsbG9jOwogCWludDhfdCBldHlwZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CkBAIC0yMTAsOSArMjEwLDkgQEAKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvID0gVURGX0koaW5vZGUpOwogCiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCWFkc2l6ZSA9IHNpemVvZihzaG9ydF9hZCk7CisJCWFkc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hvcnRfYWQpOwogCWVsc2UgaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJYWRzaXplID0gc2l6ZW9mKGxvbmdfYWQpOworCQlhZHNpemUgPSBzaXplb2Yoc3RydWN0IGxvbmdfYWQpOwogCWVsc2UKIAkJQlVHKCk7CiAKQEAgLTIyMSw3ICsyMjEsNyBAQAogCQkoaW5vZGUtPmlfc2l6ZSAmIChzYi0+c19ibG9ja3NpemUgLSAxKSk7CiAJaWYgKGV0eXBlICE9IC0xKSB7CiAJCWVwb3Mub2Zmc2V0IC09IGFkc2l6ZTsKLQkJZXh0ZW50X3RydW5jKGlub2RlLCAmZXBvcywgZWxvYywgZXR5cGUsIGVsZW4sIGJ5dGVfb2Zmc2V0KTsKKwkJZXh0ZW50X3RydW5jKGlub2RlLCAmZXBvcywgJmVsb2MsIGV0eXBlLCBlbGVuLCBieXRlX29mZnNldCk7CiAJCWVwb3Mub2Zmc2V0ICs9IGFkc2l6ZTsKIAkJaWYgKGJ5dGVfb2Zmc2V0KQogCQkJbGVuYWxsb2MgPSBlcG9zLm9mZnNldDsKQEAgLTIzNiwxMiArMjM2LDEyIEBACiAJCXdoaWxlICgoZXR5cGUgPSB1ZGZfY3VycmVudF9hZXh0KGlub2RlLCAmZXBvcywgJmVsb2MsCiAJCQkJCQkgJmVsZW4sIDApKSAhPSAtMSkgewogCQkJaWYgKGV0eXBlID09IChFWFRfTkVYVF9FWFRFTlRfQUxMT0NERUNTID4+IDMwKSkgewotCQkJCXVkZl93cml0ZV9hZXh0KGlub2RlLCAmZXBvcywgbmVsb2MsIG5lbGVuLCAwKTsKKwkJCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgJmVwb3MsICZuZWxvYywgbmVsZW4sIDApOwogCQkJCWlmIChpbmRpcmVjdF9leHRfbGVuKSB7CiAJCQkJCS8qIFdlIG1hbmFnZWQgdG8gZnJlZSBhbGwgZXh0ZW50cyBpbiB0aGUKIAkJCQkJICogaW5kaXJlY3QgZXh0ZW50IC0gZnJlZSBpdCB0b28gKi8KIAkJCQkJQlVHX09OKCFlcG9zLmJoKTsKLQkJCQkJdWRmX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwgZXBvcy5ibG9jaywKKwkJCQkJdWRmX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwgJmVwb3MuYmxvY2ssCiAJCQkJCQkJMCwgaW5kaXJlY3RfZXh0X2xlbik7CiAJCQkJfSBlbHNlIGlmICghZXBvcy5iaCkgewogCQkJCQlpaW5mby0+aV9sZW5BbGxvYyA9IGxlbmFsbG9jOwpAQCAtMjUzLDcgKzI1Myw3IEBACiAJCQkJZXBvcy5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYyk7CiAJCQkJZXBvcy5ibG9jayA9IGVsb2M7CiAJCQkJZXBvcy5iaCA9IHVkZl90cmVhZChzYiwKLQkJCQkJCXVkZl9nZXRfbGJfcGJsb2NrKHNiLCBlbG9jLCAwKSk7CisJCQkJCQl1ZGZfZ2V0X2xiX3BibG9jayhzYiwgJmVsb2MsIDApKTsKIAkJCQlpZiAoZWxlbikKIAkJCQkJaW5kaXJlY3RfZXh0X2xlbiA9CiAJCQkJCQkoZWxlbiArIHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpID4+CkBAIC0yNjEsNyArMjYxLDcgQEAKIAkJCQllbHNlCiAJCQkJCWluZGlyZWN0X2V4dF9sZW4gPSAxOwogCQkJfSBlbHNlIHsKLQkJCQlleHRlbnRfdHJ1bmMoaW5vZGUsICZlcG9zLCBlbG9jLCBldHlwZSwKKwkJCQlleHRlbnRfdHJ1bmMoaW5vZGUsICZlcG9zLCAmZWxvYywgZXR5cGUsCiAJCQkJCSAgICAgZWxlbiwgMCk7CiAJCQkJZXBvcy5vZmZzZXQgKz0gYWRzaXplOwogCQkJfQpAQCAtMjY5LDcgKzI2OSw3IEBACiAKIAkJaWYgKGluZGlyZWN0X2V4dF9sZW4pIHsKIAkJCUJVR19PTighZXBvcy5iaCk7Ci0JCQl1ZGZfZnJlZV9ibG9ja3Moc2IsIGlub2RlLCBlcG9zLmJsb2NrLCAwLAorCQkJdWRmX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwgJmVwb3MuYmxvY2ssIDAsCiAJCQkJCWluZGlyZWN0X2V4dF9sZW4pOwogCQl9IGVsc2UgaWYgKCFlcG9zLmJoKSB7CiAJCQlpaW5mby0+aV9sZW5BbGxvYyA9IGxlbmFsbG9jOwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJCQl1ZGZfdXBkYXRlX2FsbG9jX2V4dF9kZXNjKGlub2RlLCAmZXBvcywgbGVuYWxsb2MpOwogCX0gZWxzZSBpZiAoaW5vZGUtPmlfc2l6ZSkgewogCQlpZiAoYnl0ZV9vZmZzZXQpIHsKLQkJCWtlcm5lbF9sb25nX2FkIGV4dGVudDsKKwkJCXN0cnVjdCBrZXJuZWxfbG9uZ19hZCBleHRlbnQ7CiAKIAkJCS8qCiAJCQkgKiAgT0ssIHRoZXJlIGlzIG5vdCBleHRlbnQgY292ZXJpbmcgaW5vZGUtPmlfc2l6ZSBhbmQKZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZfaS5oIGIvZnMvdWRmL3VkZl9pLmgKaW5kZXggNGY4NmIxZC4uZTU4ZDFkZSAxMDA2NDQKLS0tIGEvZnMvdWRmL3VkZl9pLmgKKysrIGIvZnMvdWRmL3VkZl9pLmgKQEAgLTQsNyArNCw3IEBACiBzdHJ1Y3QgdWRmX2lub2RlX2luZm8gewogCXN0cnVjdCB0aW1lc3BlYwkJaV9jcnRpbWU7CiAJLyogUGh5c2ljYWwgYWRkcmVzcyBvZiBpbm9kZSAqLwotCWtlcm5lbF9sYl9hZGRyCQlpX2xvY2F0aW9uOworCXN0cnVjdCBrZXJuZWxfbGJfYWRkcgkJaV9sb2NhdGlvbjsKIAlfX3U2NAkJCWlfdW5pcXVlOwogCV9fdTMyCQkJaV9sZW5FQXR0cjsKIAlfX3UzMgkJCWlfbGVuQWxsb2M7CkBAIC0xNyw4ICsxNyw4IEBACiAJdW5zaWduZWQJCWlfc3RyYXQ0MDk2IDogMTsKIAl1bnNpZ25lZAkJcmVzZXJ2ZWQgOiAyNjsKIAl1bmlvbiB7Ci0JCXNob3J0X2FkCSppX3NhZDsKLQkJbG9uZ19hZAkJKmlfbGFkOworCQlzdHJ1Y3Qgc2hvcnRfYWQJKmlfc2FkOworCQlzdHJ1Y3QgbG9uZ19hZAkJKmlfbGFkOwogCQlfX3U4CQkqaV9kYXRhOwogCX0gaV9leHQ7CiAJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZfc2IuaCBiL2ZzL3VkZi91ZGZfc2IuaAppbmRleCAxYzFjNTE0Li5kMTEzYjcyIDEwMDY0NAotLS0gYS9mcy91ZGYvdWRmX3NiLmgKKysrIGIvZnMvdWRmL3VkZl9zYi5oCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIFVERl9GTEFHX0dJRF9TRVQJMTYKICNkZWZpbmUgVURGX0ZMQUdfU0VTU0lPTl9TRVQJMTcKICNkZWZpbmUgVURGX0ZMQUdfTEFTVEJMT0NLX1NFVAkxOAorI2RlZmluZSBVREZfRkxBR19CTE9DS1NJWkVfU0VUCTE5CiAKICNkZWZpbmUgVURGX1BBUlRfRkxBR19VTkFMTE9DX0JJVE1BUAkweDAwMDEKICNkZWZpbmUgVURGX1BBUlRfRkxBR19VTkFMTE9DX1RBQkxFCTB4MDAwMgpAQCAtNDgsNiArNDksOCBAQAogI2RlZmluZSBVREZfU1BBUkFCTEVfTUFQMTUJCTB4MTUyMlUKICNkZWZpbmUgVURGX01FVEFEQVRBX01BUDI1CQkweDI1MTFVCiAKKyNkZWZpbmUgVURGX0lOVkFMSURfTU9ERQkJKChtb2RlX3QpLTEpCisKICNwcmFnbWEgcGFjaygxKSAvKiBYWFgoaGNoKTogV2h5PyAgVGhpcyBmaWxlIGp1c3QgZGVmaW5lcyBpbi1jb3JlIHN0cnVjdHVyZXMgKi8KIAogc3RydWN0IHVkZl9tZXRhX2RhdGEgewpAQCAtMTE0LDcgKzExNyw3IEBACiAKIAkvKiBTZWN0b3IgaGVhZGVycyAqLwogCV9fczMyCQkJc19zZXNzaW9uOwotCV9fdTMyCQkJc19hbmNob3JbM107CisJX191MzIJCQlzX2FuY2hvcjsKIAlfX3UzMgkJCXNfbGFzdF9ibG9jazsKIAogCXN0cnVjdCBidWZmZXJfaGVhZAkqc19sdmlkX2JoOwpAQCAtMTIzLDYgKzEyNiw4IEBACiAJbW9kZV90CQkJc191bWFzazsKIAlnaWRfdAkJCXNfZ2lkOwogCXVpZF90CQkJc191aWQ7CisJbW9kZV90CQkJc19mbW9kZTsKKwltb2RlX3QJCQlzX2Rtb2RlOwogCiAJLyogUm9vdCBJbmZvICovCiAJc3RydWN0IHRpbWVzcGVjCQlzX3JlY29yZF90aW1lOwpAQCAtMTQzLDYgKzE0OCw4IEBACiAJc3RydWN0IGlub2RlCQkqc192YXRfaW5vZGU7CiAKIAlzdHJ1Y3QgbXV0ZXgJCXNfYWxsb2NfbXV0ZXg7CisJLyogUHJvdGVjdGVkIGJ5IHNfYWxsb2NfbXV0ZXggKi8KKwl1bnNpZ25lZCBpbnQJCXNfbHZpZF9kaXJ0eTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHVkZl9zYl9pbmZvICpVREZfU0Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZkZWNsLmggYi9mcy91ZGYvdWRmZGVjbC5oCmluZGV4IDhlYzg2NWQuLmNhYzUxYjcgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi91ZGZkZWNsLmgKKysrIGIvZnMvdWRmL3VkZmRlY2wuaApAQCAtNjIsMTAgKzYyLDggQEAKIAkJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgdWRmX2dldF9sYl9wYmxvY2soc2IsbG9jLG9mZnNldCkgdWRmX2dldF9wYmxvY2soKHNiKSwgKGxvYykubG9naWNhbEJsb2NrTnVtLCAobG9jKS5wYXJ0aXRpb25SZWZlcmVuY2VOdW0sIChvZmZzZXQpKQotCiAvKiBjb21wdXRlcyB0YWcgY2hlY2tzdW0gKi8KLXU4IHVkZl90YWdfY2hlY2tzdW0oY29uc3QgdGFnICp0KTsKK3U4IHVkZl90YWdfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHRhZyAqdCk7CiAKIHN0cnVjdCBkZW50cnk7CiBzdHJ1Y3QgaW5vZGU7CkBAIC05NSw3ICs5Myw3IEBACiB9OwogCiBzdHJ1Y3QgZ2VuZXJpY19kZXNjIHsKLQl0YWcJCWRlc2NUYWc7CisJc3RydWN0IHRhZwlkZXNjVGFnOwogCV9fbGUzMgkJdm9sRGVzY1NlcU51bTsKIH07CiAKQEAgLTEwOCwxMSArMTA2LDIyIEBACiBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXVpbnQzMl90IG9mZnNldDsKLQlrZXJuZWxfbGJfYWRkciBibG9jazsKKwlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgYmxvY2s7CiB9OwogCiAvKiBzdXBlci5jICovCiBleHRlcm4gdm9pZCB1ZGZfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CitzdGF0aWMgaW5saW5lIHZvaWQgdWRmX3VwZGF0ZWRfbHZpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBVREZfU0Ioc2IpLT5zX2x2aWRfYmg7CisKKwlCVUdfT04oIWJoKTsKKwlXQVJOX09OX09OQ0UoKChzdHJ1Y3QgbG9naWNhbFZvbEludGVncml0eURlc2MgKikKKwkJICAgICBiaC0+Yl9kYXRhKS0+aW50ZWdyaXR5VHlwZSAhPQorCQkgICAgIGNwdV90b19sZTMyKExWSURfSU5URUdSSVRZX1RZUEVfT1BFTikpOworCXNiLT5zX2RpcnQgPSAxOworCVVERl9TQihzYiktPnNfbHZpZF9kaXJ0eSA9IDE7Cit9CiAKIC8qIG5hbWVpLmMgKi8KIGV4dGVybiBpbnQgdWRmX3dyaXRlX2ZpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlSWRlbnREZXNjICosCkBAIC0xMjQsNyArMTMzLDcgQEAKIAkJICAgICB1bnNpZ25lZCBsb25nKTsKIAogLyogaW5vZGUuYyAqLwotZXh0ZXJuIHN0cnVjdCBpbm9kZSAqdWRmX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIGtlcm5lbF9sYl9hZGRyKTsKK2V4dGVybiBzdHJ1Y3QgaW5vZGUgKnVkZl9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKik7CiBleHRlcm4gaW50IHVkZl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB2b2lkIHVkZl9leHBhbmRfZmlsZV9hZGluaWNiKHN0cnVjdCBpbm9kZSAqLCBpbnQsIGludCAqKTsKIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVkZl9leHBhbmRfZGlyX2FkaW5pY2Ioc3RydWN0IGlub2RlICosIGludCAqLCBpbnQgKik7CkBAIC0xMzYsMTkgKzE0NSwxOSBAQAogZXh0ZXJuIGludCB1ZGZfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7CiBleHRlcm4gbG9uZyB1ZGZfYmxvY2tfbWFwKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCk7CiBleHRlcm4gaW50IHVkZl9leHRlbmRfZmlsZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqLAotCQkJICAga2VybmVsX2xvbmdfYWQgKiwgc2VjdG9yX3QpOworCQkJICAgc3RydWN0IGtlcm5lbF9sb25nX2FkICosIHNlY3Rvcl90KTsKIGV4dGVybiBpbnQ4X3QgaW5vZGVfYm1hcChzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKiwKLQkJCSBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCAqLCBzZWN0b3JfdCAqKTsKKwkJCSBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QgKiwgc2VjdG9yX3QgKik7CiBleHRlcm4gaW50OF90IHVkZl9hZGRfYWV4dChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqLAotCQkJICAga2VybmVsX2xiX2FkZHIsIHVpbnQzMl90LCBpbnQpOworCQkJICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90LCBpbnQpOwogZXh0ZXJuIGludDhfdCB1ZGZfd3JpdGVfYWV4dChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqLAotCQkJICAgICBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QsIGludCk7CisJCQkgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCwgaW50KTsKIGV4dGVybiBpbnQ4X3QgdWRmX2RlbGV0ZV9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uLAotCQkJICAgICAga2VybmVsX2xiX2FkZHIsIHVpbnQzMl90KTsKKwkJCSAgICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QpOwogZXh0ZXJuIGludDhfdCB1ZGZfbmV4dF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICosCi0JCQkgICAga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QgKiwgaW50KTsKKwkJCSAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QgKiwgaW50KTsKIGV4dGVybiBpbnQ4X3QgdWRmX2N1cnJlbnRfYWV4dChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqLAotCQkJICAgICAgIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIGludCk7CisJCQkgICAgICAgc3RydWN0IGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIGludCk7CiAKIC8qIG1pc2MuYyAqLwogZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX3RnZXRibGsoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CkBAIC0xNjAsNyArMTY5LDcgQEAKIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVkZl9yZWFkX3RhZ2dlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdWludDMyX3QsCiAJCQkJCSAgIHVpbnQzMl90LCB1aW50MTZfdCAqKTsKIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVkZl9yZWFkX3B0YWdnZWQoc3RydWN0IHN1cGVyX2Jsb2NrICosCi0JCQkJCSAgICBrZXJuZWxfbGJfYWRkciwgdWludDMyX3QsCisJCQkJCSAgICBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QsCiAJCQkJCSAgICB1aW50MTZfdCAqKTsKIGV4dGVybiB2b2lkIHVkZl91cGRhdGVfdGFnKGNoYXIgKiwgaW50KTsKIGV4dGVybiB2b2lkIHVkZl9uZXdfdGFnKGNoYXIgKiwgdWludDE2X3QsIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDMyX3QsIGludCk7CkBAIC0xODIsNiArMTkxLDE0IEBACiAJCQkJCSAgdWludDMyX3QpOwogZXh0ZXJuIGludCB1ZGZfcmVsb2NhdGVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBsb25nLCBsb25nICopOwogCitzdGF0aWMgaW5saW5lIHVpbnQzMl90Cit1ZGZfZ2V0X2xiX3BibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmxvYywKKwkJICB1aW50MzJfdCBvZmZzZXQpCit7CisJcmV0dXJuIHVkZl9nZXRfcGJsb2NrKHNiLCBsb2MtPmxvZ2ljYWxCbG9ja051bSwKKwkJCWxvYy0+cGFydGl0aW9uUmVmZXJlbmNlTnVtLCBvZmZzZXQpOworfQorCiAvKiB1bmljb2RlLmMgKi8KIGV4dGVybiBpbnQgdWRmX2dldF9maWxlbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdWludDhfdCAqLCB1aW50OF90ICosIGludCk7CiBleHRlcm4gaW50IHVkZl9wdXRfZmlsZW5hbWUoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IHVpbnQ4X3QgKiwgdWludDhfdCAqLApAQCAtMjAwLDcgKzIxNyw3IEBACiAKIC8qIGJhbGxvYy5jICovCiBleHRlcm4gdm9pZCB1ZGZfZnJlZV9ibG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBpbm9kZSAqLAotCQkJICAgIGtlcm5lbF9sYl9hZGRyLCB1aW50MzJfdCwgdWludDMyX3QpOworCQkJICAgIHN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCwgdWludDMyX3QpOwogZXh0ZXJuIGludCB1ZGZfcHJlYWxsb2NfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgaW5vZGUgKiwgdWludDE2X3QsCiAJCQkgICAgICAgdWludDMyX3QsIHVpbnQzMl90KTsKIGV4dGVybiBpbnQgdWRmX25ld19ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGlub2RlICosIHVpbnQxNl90LApAQCAtMjE0LDE2ICsyMzEsMTYgQEAKIAkJCQkJCXN0cnVjdCB1ZGZfZmlsZWlkZW50X2JoICosCiAJCQkJCQlzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqLAogCQkJCQkJc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqLAotCQkJCQkJa2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QgKiwKKwkJCQkJCXN0cnVjdCBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCAqLAogCQkJCQkJc2VjdG9yX3QgKik7CiBleHRlcm4gc3RydWN0IGZpbGVJZGVudERlc2MgKnVkZl9nZXRfZmlsZWlkZW50KHZvaWQgKmJ1ZmZlciwgaW50IGJ1ZnNpemUsCiAJCQkJCSAgICAgICBpbnQgKm9mZnNldCk7Ci1leHRlcm4gbG9uZ19hZCAqdWRmX2dldF9maWxlbG9uZ2FkKHVpbnQ4X3QgKiwgaW50LCB1aW50MzJfdCAqLCBpbnQpOwotZXh0ZXJuIHNob3J0X2FkICp1ZGZfZ2V0X2ZpbGVzaG9ydGFkKHVpbnQ4X3QgKiwgaW50LCB1aW50MzJfdCAqLCBpbnQpOworZXh0ZXJuIHN0cnVjdCBsb25nX2FkICp1ZGZfZ2V0X2ZpbGVsb25nYWQodWludDhfdCAqLCBpbnQsIHVpbnQzMl90ICosIGludCk7CitleHRlcm4gc3RydWN0IHNob3J0X2FkICp1ZGZfZ2V0X2ZpbGVzaG9ydGFkKHVpbnQ4X3QgKiwgaW50LCB1aW50MzJfdCAqLCBpbnQpOwogCiAvKiB1ZGZ0aW1lLmMgKi8KIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgKnVkZl9kaXNrX3N0YW1wX3RvX3RpbWUoc3RydWN0IHRpbWVzcGVjICpkZXN0LAotCQkJCQkJdGltZXN0YW1wIHNyYyk7Ci1leHRlcm4gdGltZXN0YW1wICp1ZGZfdGltZV90b19kaXNrX3N0YW1wKHRpbWVzdGFtcCAqZGVzdCwgc3RydWN0IHRpbWVzcGVjIHNyYyk7CisJCQkJCQlzdHJ1Y3QgdGltZXN0YW1wIHNyYyk7CitleHRlcm4gc3RydWN0IHRpbWVzdGFtcCAqdWRmX3RpbWVfdG9fZGlza19zdGFtcChzdHJ1Y3QgdGltZXN0YW1wICpkZXN0LCBzdHJ1Y3QgdGltZXNwZWMgc3JjKTsKIAogI2VuZGlmCQkJCS8qIF9fVURGX0RFQ0xfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvdWRmL3VkZmVuZC5oIGIvZnMvdWRmL3VkZmVuZC5oCmluZGV4IDQ4OWY1MmYuLjZhOWYzYTkgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi91ZGZlbmQuaAorKysgYi9mcy91ZGYvdWRmZW5kLmgKQEAgLTQsOSArNCw5IEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCi1zdGF0aWMgaW5saW5lIGtlcm5lbF9sYl9hZGRyIGxlbGJfdG9fY3B1KGxiX2FkZHIgaW4pCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrZXJuZWxfbGJfYWRkciBsZWxiX3RvX2NwdShzdHJ1Y3QgbGJfYWRkciBpbikKIHsKLQlrZXJuZWxfbGJfYWRkciBvdXQ7CisJc3RydWN0IGtlcm5lbF9sYl9hZGRyIG91dDsKIAogCW91dC5sb2dpY2FsQmxvY2tOdW0gPSBsZTMyX3RvX2NwdShpbi5sb2dpY2FsQmxvY2tOdW0pOwogCW91dC5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPSBsZTE2X3RvX2NwdShpbi5wYXJ0aXRpb25SZWZlcmVuY2VOdW0pOwpAQCAtMTQsOSArMTQsOSBAQAogCXJldHVybiBvdXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgbGJfYWRkciBjcHVfdG9fbGVsYihrZXJuZWxfbGJfYWRkciBpbikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxiX2FkZHIgY3B1X3RvX2xlbGIoc3RydWN0IGtlcm5lbF9sYl9hZGRyIGluKQogewotCWxiX2FkZHIgb3V0OworCXN0cnVjdCBsYl9hZGRyIG91dDsKIAogCW91dC5sb2dpY2FsQmxvY2tOdW0gPSBjcHVfdG9fbGUzMihpbi5sb2dpY2FsQmxvY2tOdW0pOwogCW91dC5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPSBjcHVfdG9fbGUxNihpbi5wYXJ0aXRpb25SZWZlcmVuY2VOdW0pOwpAQCAtMjQsOSArMjQsOSBAQAogCXJldHVybiBvdXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc2hvcnRfYWQgbGVzYV90b19jcHUoc2hvcnRfYWQgaW4pCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzaG9ydF9hZCBsZXNhX3RvX2NwdShzdHJ1Y3Qgc2hvcnRfYWQgaW4pCiB7Ci0Jc2hvcnRfYWQgb3V0OworCXN0cnVjdCBzaG9ydF9hZCBvdXQ7CiAKIAlvdXQuZXh0TGVuZ3RoID0gbGUzMl90b19jcHUoaW4uZXh0TGVuZ3RoKTsKIAlvdXQuZXh0UG9zaXRpb24gPSBsZTMyX3RvX2NwdShpbi5leHRQb3NpdGlvbik7CkBAIC0zNCw5ICszNCw5IEBACiAJcmV0dXJuIG91dDsKIH0KIAotc3RhdGljIGlubGluZSBzaG9ydF9hZCBjcHVfdG9fbGVzYShzaG9ydF9hZCBpbikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNob3J0X2FkIGNwdV90b19sZXNhKHN0cnVjdCBzaG9ydF9hZCBpbikKIHsKLQlzaG9ydF9hZCBvdXQ7CisJc3RydWN0IHNob3J0X2FkIG91dDsKIAogCW91dC5leHRMZW5ndGggPSBjcHVfdG9fbGUzMihpbi5leHRMZW5ndGgpOwogCW91dC5leHRQb3NpdGlvbiA9IGNwdV90b19sZTMyKGluLmV4dFBvc2l0aW9uKTsKQEAgLTQ0LDkgKzQ0LDkgQEAKIAlyZXR1cm4gb3V0OwogfQogCi1zdGF0aWMgaW5saW5lIGtlcm5lbF9sb25nX2FkIGxlbGFfdG9fY3B1KGxvbmdfYWQgaW4pCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrZXJuZWxfbG9uZ19hZCBsZWxhX3RvX2NwdShzdHJ1Y3QgbG9uZ19hZCBpbikKIHsKLQlrZXJuZWxfbG9uZ19hZCBvdXQ7CisJc3RydWN0IGtlcm5lbF9sb25nX2FkIG91dDsKIAogCW91dC5leHRMZW5ndGggPSBsZTMyX3RvX2NwdShpbi5leHRMZW5ndGgpOwogCW91dC5leHRMb2NhdGlvbiA9IGxlbGJfdG9fY3B1KGluLmV4dExvY2F0aW9uKTsKQEAgLTU0LDkgKzU0LDkgQEAKIAlyZXR1cm4gb3V0OwogfQogCi1zdGF0aWMgaW5saW5lIGxvbmdfYWQgY3B1X3RvX2xlbGEoa2VybmVsX2xvbmdfYWQgaW4pCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsb25nX2FkIGNwdV90b19sZWxhKHN0cnVjdCBrZXJuZWxfbG9uZ19hZCBpbikKIHsKLQlsb25nX2FkIG91dDsKKwlzdHJ1Y3QgbG9uZ19hZCBvdXQ7CiAKIAlvdXQuZXh0TGVuZ3RoID0gY3B1X3RvX2xlMzIoaW4uZXh0TGVuZ3RoKTsKIAlvdXQuZXh0TG9jYXRpb24gPSBjcHVfdG9fbGVsYihpbi5leHRMb2NhdGlvbik7CkBAIC02NCw5ICs2NCw5IEBACiAJcmV0dXJuIG91dDsKIH0KIAotc3RhdGljIGlubGluZSBrZXJuZWxfZXh0ZW50X2FkIGxlZWFfdG9fY3B1KGV4dGVudF9hZCBpbikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGtlcm5lbF9leHRlbnRfYWQgbGVlYV90b19jcHUoc3RydWN0IGV4dGVudF9hZCBpbikKIHsKLQlrZXJuZWxfZXh0ZW50X2FkIG91dDsKKwlzdHJ1Y3Qga2VybmVsX2V4dGVudF9hZCBvdXQ7CiAKIAlvdXQuZXh0TGVuZ3RoID0gbGUzMl90b19jcHUoaW4uZXh0TGVuZ3RoKTsKIAlvdXQuZXh0TG9jYXRpb24gPSBsZTMyX3RvX2NwdShpbi5leHRMb2NhdGlvbik7CmRpZmYgLS1naXQgYS9mcy91ZGYvdWRmdGltZS5jIGIvZnMvdWRmL3VkZnRpbWUuYwppbmRleCA1ZjgxMTY1NS4uYjhjODI4YyAxMDA2NDQKLS0tIGEvZnMvdWRmL3VkZnRpbWUuYworKysgYi9mcy91ZGYvdWRmdGltZS5jCkBAIC04NSw3ICs4NSw4IEBACiAjZGVmaW5lIFNFQ1NfUEVSX0hPVVIJKDYwICogNjApCiAjZGVmaW5lIFNFQ1NfUEVSX0RBWQkoU0VDU19QRVJfSE9VUiAqIDI0KQogCi1zdHJ1Y3QgdGltZXNwZWMgKnVkZl9kaXNrX3N0YW1wX3RvX3RpbWUoc3RydWN0IHRpbWVzcGVjICpkZXN0LCB0aW1lc3RhbXAgc3JjKQorc3RydWN0IHRpbWVzcGVjICoKK3VkZl9kaXNrX3N0YW1wX3RvX3RpbWUoc3RydWN0IHRpbWVzcGVjICpkZXN0LCBzdHJ1Y3QgdGltZXN0YW1wIHNyYykKIHsKIAlpbnQgeWRheTsKIAl1MTYgdHlwZUFuZFRpbWV6b25lID0gbGUxNl90b19jcHUoc3JjLnR5cGVBbmRUaW1lem9uZSk7CkBAIC0xMTYsNyArMTE3LDggQEAKIAlyZXR1cm4gZGVzdDsKIH0KIAotdGltZXN0YW1wICp1ZGZfdGltZV90b19kaXNrX3N0YW1wKHRpbWVzdGFtcCAqZGVzdCwgc3RydWN0IHRpbWVzcGVjIHRzKQorc3RydWN0IHRpbWVzdGFtcCAqCit1ZGZfdGltZV90b19kaXNrX3N0YW1wKHN0cnVjdCB0aW1lc3RhbXAgKmRlc3QsIHN0cnVjdCB0aW1lc3BlYyB0cykKIHsKIAlsb25nIGludCBkYXlzLCByZW0sIHk7CiAJY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICppcDsKZGlmZiAtLWdpdCBhL2ZzL3VkZi91bmljb2RlLmMgYi9mcy91ZGYvdW5pY29kZS5jCmluZGV4IDlmZGY4YzkuLmNlZmE4YzggMTAwNjQ0Ci0tLSBhL2ZzL3VkZi91bmljb2RlLmMKKysrIGIvZnMvdWRmL3VuaWNvZGUuYwpAQCAtMjU0LDcgKzI1NCw3IEBACiB7CiAJY29uc3QgdWludDhfdCAqb2N1OwogCXVpbnQ4X3QgY21wX2lkLCBvY3VfbGVuOwotCWludCBpOworCWludCBpLCBsZW47CiAKIAogCW9jdV9sZW4gPSBvY3VfaS0+dV9sZW47CkBAIC0yNzksOCArMjc5LDEzIEBACiAJCWlmIChjbXBfaWQgPT0gMTYpCiAJCQljID0gKGMgPDwgOCkgfCBvY3VbaSsrXTsKIAotCQl1dGZfby0+dV9sZW4gKz0gbmxzLT51bmkyY2hhcihjLCAmdXRmX28tPnVfbmFtZVt1dGZfby0+dV9sZW5dLAotCQkJCQkgICAgICBVREZfTkFNRV9MRU4gLSB1dGZfby0+dV9sZW4pOworCQlsZW4gPSBubHMtPnVuaTJjaGFyKGMsICZ1dGZfby0+dV9uYW1lW3V0Zl9vLT51X2xlbl0sCisJCQkJICAgIFVERl9OQU1FX0xFTiAtIHV0Zl9vLT51X2xlbik7CisJCS8qIFZhbGlkIGNoYXJhY3Rlcj8gKi8KKwkJaWYgKGxlbiA+PSAwKQorCQkJdXRmX28tPnVfbGVuICs9IGxlbjsKKwkJZWxzZQorCQkJdXRmX28tPnVfbmFtZVt1dGZfby0+dV9sZW4rK10gPSAnPyc7CiAJfQogCXV0Zl9vLT51X2NtcElEID0gODsKIApAQCAtMjkwLDcgKzI5NSw4IEBACiBzdGF0aWMgaW50IHVkZl9OTFN0b0NTMChzdHJ1Y3QgbmxzX3RhYmxlICpubHMsIGRzdHJpbmcgKm9jdSwgc3RydWN0IHVzdHIgKnVuaSwKIAkJCWludCBsZW5ndGgpCiB7Ci0JdW5zaWduZWQgbGVuLCBpLCBtYXhfdmFsOworCWludCBsZW47CisJdW5zaWduZWQgaSwgbWF4X3ZhbDsKIAl1aW50MTZfdCB1bmlfY2hhcjsKIAlpbnQgdV9sZW47CiAKQEAgLTMwMiw4ICszMDgsMTMgQEAKIAl1X2xlbiA9IDBVOwogCWZvciAoaSA9IDBVOyBpIDwgdW5pLT51X2xlbjsgaSsrKSB7CiAJCWxlbiA9IG5scy0+Y2hhcjJ1bmkoJnVuaS0+dV9uYW1lW2ldLCB1bmktPnVfbGVuIC0gaSwgJnVuaV9jaGFyKTsKLQkJaWYgKGxlbiA8PSAwKQorCQlpZiAoIWxlbikKIAkJCWNvbnRpbnVlOworCQkvKiBJbnZhbGlkIGNoYXJhY3RlciwgZGVhbCB3aXRoIGl0ICovCisJCWlmIChsZW4gPCAwKSB7CisJCQlsZW4gPSAxOworCQkJdW5pX2NoYXIgPSAnPyc7CisJCX0KIAogCQlpZiAodW5pX2NoYXIgPiBtYXhfdmFsKSB7CiAJCQltYXhfdmFsID0gMHhmZmZmVTsKQEAgLTMyNCwzNCArMzM1LDQzIEBACiBpbnQgdWRmX2dldF9maWxlbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1aW50OF90ICpzbmFtZSwgdWludDhfdCAqZG5hbWUsCiAJCSAgICAgaW50IGZsZW4pCiB7Ci0Jc3RydWN0IHVzdHIgZmlsZW5hbWUsIHVuaWZpbGVuYW1lOwotCWludCBsZW47CisJc3RydWN0IHVzdHIgKmZpbGVuYW1lLCAqdW5pZmlsZW5hbWU7CisJaW50IGxlbiA9IDA7CiAKLQlpZiAodWRmX2J1aWxkX3VzdHJfZXhhY3QoJnVuaWZpbGVuYW1lLCBzbmFtZSwgZmxlbikpCisJZmlsZW5hbWUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXN0ciksIEdGUF9OT0ZTKTsKKwlpZiAoIWZpbGVuYW1lKQogCQlyZXR1cm4gMDsKIAorCXVuaWZpbGVuYW1lID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzdHIpLCBHRlBfTk9GUyk7CisJaWYgKCF1bmlmaWxlbmFtZSkKKwkJZ290byBvdXQxOworCisJaWYgKHVkZl9idWlsZF91c3RyX2V4YWN0KHVuaWZpbGVuYW1lLCBzbmFtZSwgZmxlbikpCisJCWdvdG8gb3V0MjsKKwogCWlmIChVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfVVRGOCkpIHsKLQkJaWYgKCF1ZGZfQ1MwdG9VVEY4KCZmaWxlbmFtZSwgJnVuaWZpbGVuYW1lKSkgeworCQlpZiAoIXVkZl9DUzB0b1VURjgoZmlsZW5hbWUsIHVuaWZpbGVuYW1lKSkgewogCQkJdWRmX2RlYnVnKCJGYWlsZWQgaW4gdWRmX2dldF9maWxlbmFtZTogc25hbWUgPSAlc1xuIiwKIAkJCQkgIHNuYW1lKTsKLQkJCXJldHVybiAwOworCQkJZ290byBvdXQyOwogCQl9CiAJfSBlbHNlIGlmIChVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfTkxTX01BUCkpIHsKLQkJaWYgKCF1ZGZfQ1MwdG9OTFMoVURGX1NCKHNiKS0+c19ubHNfbWFwLCAmZmlsZW5hbWUsCi0JCQkJICAmdW5pZmlsZW5hbWUpKSB7CisJCWlmICghdWRmX0NTMHRvTkxTKFVERl9TQihzYiktPnNfbmxzX21hcCwgZmlsZW5hbWUsCisJCQkJICB1bmlmaWxlbmFtZSkpIHsKIAkJCXVkZl9kZWJ1ZygiRmFpbGVkIGluIHVkZl9nZXRfZmlsZW5hbWU6IHNuYW1lID0gJXNcbiIsCiAJCQkJICBzbmFtZSk7Ci0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gb3V0MjsKIAkJfQogCX0gZWxzZQotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQyOwogCi0JbGVuID0gdWRmX3RyYW5zbGF0ZV90b19saW51eChkbmFtZSwgZmlsZW5hbWUudV9uYW1lLCBmaWxlbmFtZS51X2xlbiwKLQkJCQkgICAgIHVuaWZpbGVuYW1lLnVfbmFtZSwgdW5pZmlsZW5hbWUudV9sZW4pOwotCWlmIChsZW4pCi0JCXJldHVybiBsZW47Ci0KLQlyZXR1cm4gMDsKKwlsZW4gPSB1ZGZfdHJhbnNsYXRlX3RvX2xpbnV4KGRuYW1lLCBmaWxlbmFtZS0+dV9uYW1lLCBmaWxlbmFtZS0+dV9sZW4sCisJCQkJICAgICB1bmlmaWxlbmFtZS0+dV9uYW1lLCB1bmlmaWxlbmFtZS0+dV9sZW4pOworb3V0MjoKKwlrZnJlZSh1bmlmaWxlbmFtZSk7CitvdXQxOgorCWtmcmVlKGZpbGVuYW1lKTsKKwlyZXR1cm4gbGVuOwogfQogCiBpbnQgdWRmX3B1dF9maWxlbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCB1aW50OF90ICpzbmFtZSwKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9zdXBlci5jIGIvZnMvdWZzL3N1cGVyLmMKaW5kZXggZTFjMWZjNS4uNjAzNTkyOSAxMDA2NDQKLS0tIGEvZnMvdWZzL3N1cGVyLmMKKysrIGIvZnMvdWZzL3N1cGVyLmMKQEAgLTEyNjgsNiArMTI2OCw3IEBACiAJc3RydWN0IHVmc19zdXBlcl9ibG9ja19maXJzdCAqdXNiMTsKIAlzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrX3NlY29uZCAqdXNiMjsKIAlzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrX3RoaXJkICp1c2IzOworCXU2NCBpZCA9IGh1Z2VfZW5jb2RlX2RldihzYi0+c19iZGV2LT5iZF9kZXYpOwogCiAJbG9ja19rZXJuZWwoKTsKIApAQCAtMTI5MCw2ICsxMjkxLDggQEAKIAkJPyAoYnVmLT5mX2JmcmVlIC0gKCgobG9uZylidWYtPmZfYmxvY2tzIC8gMTAwKSAqIHVzcGktPnNfbWluZnJlZSkpIDogMDsKIAlidWYtPmZfZmlsZXMgPSB1c3BpLT5zX25jZyAqIHVzcGktPnNfaXBnOwogCWJ1Zi0+Zl9uYW1lbGVuID0gVUZTX01BWE5BTUxFTjsKKwlidWYtPmZfZnNpZC52YWxbMF0gPSAodTMyKWlkOworCWJ1Zi0+Zl9mc2lkLnZhbFsxXSA9ICh1MzIpKGlkID4+IDMyKTsKIAogCXVubG9ja19rZXJuZWwoKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL01ha2VmaWxlIGIvZnMveGZzL01ha2VmaWxlCmluZGV4IGMzZGM0OTEuLjYwZjEwN2UgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9NYWtlZmlsZQorKysgYi9mcy94ZnMvTWFrZWZpbGUKQEAgLTMzLDYgKzMzLDcgQEAKIAkJCQkgICB4ZnNfcW1fc3lzY2FsbHMubyBcCiAJCQkJICAgeGZzX3FtX2Jodi5vIFwKIAkJCQkgICB4ZnNfcW0ubykKK3hmcy0kKENPTkZJR19YRlNfUVVPVEEpCQkrPSBsaW51eC0yLjYveGZzX3F1b3Rhb3BzLm8KIAogaWZlcSAoJChDT05GSUdfWEZTX1FVT1RBKSx5KQogeGZzLSQoQ09ORklHX1BST0NfRlMpCQkrPSBxdW90YS94ZnNfcW1fc3RhdHMubwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi9tdXRleC5oIGIvZnMveGZzL2xpbnV4LTIuNi9tdXRleC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTg4ZDU2Li4wMDAwMDAwCi0tLSBhL2ZzL3hmcy9saW51eC0yLjYvbXV0ZXguaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMywyMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLSNpZm5kZWYgX19YRlNfU1VQUE9SVF9NVVRFWF9IX18KLSNkZWZpbmUgX19YRlNfU1VQUE9SVF9NVVRFWF9IX18KLQotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLXR5cGVkZWYgc3RydWN0IG11dGV4IG11dGV4X3Q7Ci0KLSNlbmRpZiAvKiBfX1hGU19TVVBQT1JUX01VVEVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCmluZGV4IGRlM2ExOTguLmMxM2Y2NzMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKQEAgLTE2MjMsNCArMTYyMyw1IEBACiAJLmJtYXAJCQk9IHhmc192bV9ibWFwLAogCS5kaXJlY3RfSU8JCT0geGZzX3ZtX2RpcmVjdF9JTywKIAkubWlncmF0ZXBhZ2UJCT0gYnVmZmVyX21pZ3JhdGVfcGFnZSwKKwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlICA9IGJsb2NrX2lzX3BhcnRpYWxseV91cHRvZGF0ZSwKIH07CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKaW5kZXggZTE0YzRlMy4uZjRlMjU1NCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYwpAQCAtMjM0LDkgKzIzNCw5IEBACiBTVEFUSUMgaW50CiB4ZnNfdm1fcGFnZV9ta3dyaXRlKAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdAkqdm1hLAotCXN0cnVjdCBwYWdlCQkqcGFnZSkKKwlzdHJ1Y3Qgdm1fZmF1bHQJCSp2bWYpCiB7Ci0JcmV0dXJuIGJsb2NrX3BhZ2VfbWt3cml0ZSh2bWEsIHBhZ2UsIHhmc19nZXRfYmxvY2tzKTsKKwlyZXR1cm4gYmxvY2tfcGFnZV9ta3dyaXRlKHZtYSwgdm1mLCB4ZnNfZ2V0X2Jsb2Nrcyk7CiB9CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgeGZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IDRiZDExMjMuLmQwYjQ5OTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgorI2luY2x1ZGUgInhmc19pb2N0bC5oIgogI2luY2x1ZGUgInhmc19idHJlZS5oIgogI2luY2x1ZGUgInhmc19pYWxsb2MuaCIKICNpbmNsdWRlICJ4ZnNfcnRhbGxvYy5oIgpAQCAtNzgsOTIgKzc5LDc0IEBACiAJaW50CQkJaHNpemU7CiAJeGZzX2hhbmRsZV90CQloYW5kbGU7CiAJc3RydWN0IGlub2RlCQkqaW5vZGU7CisJc3RydWN0IGZpbGUJCSpmaWxlID0gTlVMTDsKKwlzdHJ1Y3QgcGF0aAkJcGF0aDsKKwlpbnQJCQllcnJvcjsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcDsKIAotCW1lbXNldCgoY2hhciAqKSZoYW5kbGUsIDAsIHNpemVvZihoYW5kbGUpKTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBYRlNfSU9DX1BBVEhfVE9fRlNIQU5ETEU6Ci0JY2FzZSBYRlNfSU9DX1BBVEhfVE9fSEFORExFOiB7Ci0JCXN0cnVjdCBwYXRoIHBhdGg7Ci0JCWludCBlcnJvciA9IHVzZXJfbHBhdGgoKGNvbnN0IGNoYXIgX191c2VyICopaHJlcS0+cGF0aCwgJnBhdGgpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0KLQkJQVNTRVJUKHBhdGguZGVudHJ5KTsKLQkJQVNTRVJUKHBhdGguZGVudHJ5LT5kX2lub2RlKTsKLQkJaW5vZGUgPSBpZ3JhYihwYXRoLmRlbnRyeS0+ZF9pbm9kZSk7Ci0JCXBhdGhfcHV0KCZwYXRoKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBYRlNfSU9DX0ZEX1RPX0hBTkRMRTogewotCQlzdHJ1Y3QgZmlsZQkqZmlsZTsKLQorCWlmIChjbWQgPT0gWEZTX0lPQ19GRF9UT19IQU5ETEUpIHsKIAkJZmlsZSA9IGZnZXQoaHJlcS0+ZmQpOwogCQlpZiAoIWZpbGUpCi0JCSAgICByZXR1cm4gLUVCQURGOwotCi0JCUFTU0VSVChmaWxlLT5mX3BhdGguZGVudHJ5KTsKLQkJQVNTRVJUKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCQlpbm9kZSA9IGlncmFiKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCQlmcHV0KGZpbGUpOwotCQlicmVhazsKKwkJCXJldHVybiAtRUJBREY7CisJCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwl9IGVsc2UgeworCQllcnJvciA9IHVzZXJfbHBhdGgoKGNvbnN0IGNoYXIgX191c2VyICopaHJlcS0+cGF0aCwgJnBhdGgpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJCWlub2RlID0gcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJfQorCWlwID0gWEZTX0koaW5vZGUpOwogCi0JZGVmYXVsdDoKLQkJQVNTRVJUKDApOwotCQlyZXR1cm4gLVhGU19FUlJPUihFSU5WQUwpOwotCX0KKwkvKgorCSAqIFdlIGNhbiBvbmx5IGdlbmVyYXRlIGhhbmRsZXMgZm9yIGlub2RlcyByZXNpZGluZyBvbiBhIFhGUyBmaWxlc3lzdGVtLAorCSAqIGFuZCBvbmx5IGZvciByZWd1bGFyIGZpbGVzLCBkaXJlY3RvcmllcyBvciBzeW1ib2xpYyBsaW5rcy4KKwkgKi8KKwllcnJvciA9IC1FSU5WQUw7CisJaWYgKGlub2RlLT5pX3NiLT5zX21hZ2ljICE9IFhGU19TQl9NQUdJQykKKwkJZ290byBvdXRfcHV0OwogCi0JaWYgKGlub2RlLT5pX3NiLT5zX21hZ2ljICE9IFhGU19TQl9NQUdJQykgewotCQkvKiB3ZSdyZSBub3QgaW4gWEZTIGFueW1vcmUsIFRvdG8gKi8KLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiAtWEZTX0VSUk9SKEVJTlZBTCk7Ci0JfQorCWVycm9yID0gLUVCQURGOworCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJgorCSAgICAhU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJgorCSAgICAhU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJZ290byBvdXRfcHV0OwogCi0Jc3dpdGNoIChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSB7Ci0JY2FzZSBTX0lGUkVHOgotCWNhc2UgU19JRkRJUjoKLQljYXNlIFNfSUZMTks6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlwdXQoaW5vZGUpOwotCQlyZXR1cm4gLVhGU19FUlJPUihFQkFERik7Ci0JfQogCi0JLyogbm93IHdlIGNhbiBncmFiIHRoZSBmc2lkICovCi0JbWVtY3B5KCZoYW5kbGUuaGFfZnNpZCwgWEZTX0koaW5vZGUpLT5pX21vdW50LT5tX2ZpeGVkZnNpZCwKLQkJCXNpemVvZih4ZnNfZnNpZF90KSk7Ci0JaHNpemUgPSBzaXplb2YoeGZzX2ZzaWRfdCk7CisJbWVtY3B5KCZoYW5kbGUuaGFfZnNpZCwgaXAtPmlfbW91bnQtPm1fZml4ZWRmc2lkLCBzaXplb2YoeGZzX2ZzaWRfdCkpOwogCi0JaWYgKGNtZCAhPSBYRlNfSU9DX1BBVEhfVE9fRlNIQU5ETEUpIHsKLQkJeGZzX2lub2RlX3QJKmlwID0gWEZTX0koaW5vZGUpOworCWlmIChjbWQgPT0gWEZTX0lPQ19QQVRIX1RPX0ZTSEFORExFKSB7CisJCS8qCisJCSAqIFRoaXMgaGFuZGxlIG9ubHkgY29udGFpbnMgYW4gZnNpZCwgemVybyB0aGUgcmVzdC4KKwkJICovCisJCW1lbXNldCgmaGFuZGxlLmhhX2ZpZCwgMCwgc2l6ZW9mKGhhbmRsZS5oYV9maWQpKTsKKwkJaHNpemUgPSBzaXplb2YoeGZzX2ZzaWRfdCk7CisJfSBlbHNlIHsKIAkJaW50CQlsb2NrX21vZGU7CiAKLQkJLyogbmVlZCB0byBnZXQgYWNjZXNzIHRvIHRoZSB4ZnNfaW5vZGUgdG8gcmVhZCB0aGUgZ2VuZXJhdGlvbiAqLwogCQlsb2NrX21vZGUgPSB4ZnNfaWxvY2tfbWFwX3NoYXJlZChpcCk7Ci0KLQkJLyogZmlsbCBpbiBmaWQgc2VjdGlvbiBvZiBoYW5kbGUgZnJvbSBpbm9kZSAqLwogCQloYW5kbGUuaGFfZmlkLmZpZF9sZW4gPSBzaXplb2YoeGZzX2ZpZF90KSAtCiAJCQkJCXNpemVvZihoYW5kbGUuaGFfZmlkLmZpZF9sZW4pOwogCQloYW5kbGUuaGFfZmlkLmZpZF9wYWQgPSAwOwogCQloYW5kbGUuaGFfZmlkLmZpZF9nZW4gPSBpcC0+aV9kLmRpX2dlbjsKIAkJaGFuZGxlLmhhX2ZpZC5maWRfaW5vID0gaXAtPmlfaW5vOwotCiAJCXhmc19pdW5sb2NrX21hcF9zaGFyZWQoaXAsIGxvY2tfbW9kZSk7CiAKIAkJaHNpemUgPSBYRlNfSFNJWkUoaGFuZGxlKTsKIAl9CiAKLQkvKiBub3cgY29weSBvdXIgaGFuZGxlIGludG8gdGhlIHVzZXIgYnVmZmVyICYgd3JpdGUgb3V0IHRoZSBzaXplICovCisJZXJyb3IgPSAtRUZBVUxUOwogCWlmIChjb3B5X3RvX3VzZXIoaHJlcS0+b2hhbmRsZSwgJmhhbmRsZSwgaHNpemUpIHx8Ci0JICAgIGNvcHlfdG9fdXNlcihocmVxLT5vaGFuZGxlbiwgJmhzaXplLCBzaXplb2YoX19zMzIpKSkgewotCQlpcHV0KGlub2RlKTsKLQkJcmV0dXJuIC1YRlNfRVJST1IoRUZBVUxUKTsKLQl9CisJICAgIGNvcHlfdG9fdXNlcihocmVxLT5vaGFuZGxlbiwgJmhzaXplLCBzaXplb2YoX19zMzIpKSkKKwkJZ290byBvdXRfcHV0OwogCi0JaXB1dChpbm9kZSk7Ci0JcmV0dXJuIDA7CisJZXJyb3IgPSAwOworCisgb3V0X3B1dDoKKwlpZiAoY21kID09IFhGU19JT0NfRkRfVE9fSEFORExFKQorCQlmcHV0KGZpbGUpOworCWVsc2UKKwkJcGF0aF9wdXQoJnBhdGgpOworCXJldHVybiBlcnJvcjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwppbmRleCA3YWE1M2ZlLi42MDc1MzgyIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCkBAIC0yMTEsOCArMjExLDEzIEBACiAJICogSXJpeCB1c2VzIE1pc3NlZCdlbSdWIHNwbGl0LCBidXQgZG9lc24ndCB3YW50IHRvIHNlZQogCSAqIHRoZSB1cHBlciA1IGJpdHMgb2YgKDE0Yml0KSBtYWpvci4KIAkgKi8KLQlpZiAodW5saWtlbHkoIXN5c3ZfdmFsaWRfZGV2KHJkZXYpIHx8IE1BSk9SKHJkZXYpICYgfjB4MWZmKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKFNfSVNDSFIobW9kZSkgfHwgU19JU0JMSyhtb2RlKSkgeworCQlpZiAodW5saWtlbHkoIXN5c3ZfdmFsaWRfZGV2KHJkZXYpIHx8IE1BSk9SKHJkZXYpICYgfjB4MWZmKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZGV2ID0gc3lzdl9lbmNvZGVfZGV2KHJkZXYpOworCX0gZWxzZSB7CisJCXJkZXYgPSAwOworCX0KIAogCWlmICh0ZXN0X2RlZmF1bHRfYWNsICYmIHRlc3RfZGVmYXVsdF9hY2woZGlyKSkgewogCQlpZiAoIV9BQ0xfQUxMT0MoZGVmYXVsdF9hY2wpKSB7CkBAIC0yMjQsMjggKzIyOSwxMSBAQAogCQl9CiAJfQogCi0JeGZzX2RlbnRyeV90b19uYW1lKCZuYW1lLCBkZW50cnkpOwotCiAJaWYgKElTX1BPU0lYQUNMKGRpcikgJiYgIWRlZmF1bHRfYWNsKQotCQltb2RlICY9IH5jdXJyZW50LT5mcy0+dW1hc2s7CisJCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAotCXN3aXRjaCAobW9kZSAmIFNfSUZNVCkgewotCWNhc2UgU19JRkNIUjoKLQljYXNlIFNfSUZCTEs6Ci0JY2FzZSBTX0lGSUZPOgotCWNhc2UgU19JRlNPQ0s6Ci0JCXJkZXYgPSBzeXN2X2VuY29kZV9kZXYocmRldik7Ci0JY2FzZSBTX0lGUkVHOgotCQllcnJvciA9IHhmc19jcmVhdGUoWEZTX0koZGlyKSwgJm5hbWUsIG1vZGUsIHJkZXYsICZpcCwgTlVMTCk7Ci0JCWJyZWFrOwotCWNhc2UgU19JRkRJUjoKLQkJZXJyb3IgPSB4ZnNfbWtkaXIoWEZTX0koZGlyKSwgJm5hbWUsIG1vZGUsICZpcCwgTlVMTCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVycm9yID0gRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KKwl4ZnNfZGVudHJ5X3RvX25hbWUoJm5hbWUsIGRlbnRyeSk7CisJZXJyb3IgPSB4ZnNfY3JlYXRlKFhGU19JKGRpciksICZuYW1lLCBtb2RlLCByZGV2LCAmaXAsIE5VTEwpOwogCWlmICh1bmxpa2VseShlcnJvcikpCiAJCWdvdG8gb3V0X2ZyZWVfYWNsOwogCkBAIC00MTYsNyArNDA0LDcgQEAKIAltb2RlX3QJCW1vZGU7CiAKIAltb2RlID0gU19JRkxOSyB8Ci0JCShpcml4X3N5bWxpbmtfbW9kZSA/IDA3NzcgJiB+Y3VycmVudC0+ZnMtPnVtYXNrIDogU19JUldYVUdPKTsKKwkJKGlyaXhfc3ltbGlua19tb2RlID8gMDc3NyAmIH5jdXJyZW50X3VtYXNrKCkgOiBTX0lSV1hVR08pOwogCXhmc19kZW50cnlfdG9fbmFtZSgmbmFtZSwgZGVudHJ5KTsKIAogCWVycm9yID0geGZzX3N5bWxpbmsoWEZTX0koZGlyKSwgJm5hbWUsIHN5bW5hbWUsIG1vZGUsICZjaXAsIE5VTEwpOwpAQCAtNTUzLDkgKzU0MSw2IEBACiAJc3RhdC0+dWlkID0gaXAtPmlfZC5kaV91aWQ7CiAJc3RhdC0+Z2lkID0gaXAtPmlfZC5kaV9naWQ7CiAJc3RhdC0+aW5vID0gaXAtPmlfaW5vOwotI2lmIFhGU19CSUdfSU5VTVMKLQlzdGF0LT5pbm8gKz0gbXAtPm1faW5vYWRkOwotI2VuZGlmCiAJc3RhdC0+YXRpbWUgPSBpbm9kZS0+aV9hdGltZTsKIAlzdGF0LT5tdGltZS50dl9zZWMgPSBpcC0+aV9kLmRpX210aW1lLnRfc2VjOwogCXN0YXQtPm10aW1lLnR2X25zZWMgPSBpcC0+aV9kLmRpX210aW1lLnRfbnNlYzsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCmluZGV4IDUwNzQ5MmQuLmY2NWE1M2YgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaApAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPGttZW0uaD4KICNpbmNsdWRlIDxtcmxvY2suaD4KICNpbmNsdWRlIDxzdi5oPgotI2luY2x1ZGUgPG11dGV4Lmg+CiAjaW5jbHVkZSA8dGltZS5oPgogCiAjaW5jbHVkZSA8c3VwcG9ydC9rdHJhY2UuaD4KQEAgLTUxLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0xNDcsMTcgKzE0Nyw2IEBACiAjZGVmaW5lIFNZTkNIUk9OSVpFKCkJYmFycmllcigpCiAjZGVmaW5lIF9fcmV0dXJuX2FkZHJlc3MgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApCiAKLS8qCi0gKiBJUklYIChCU0QpIHF1b3RhY3RsIG1ha2VzIHVzZSBvZiBzZXBhcmF0ZSBjb21tYW5kcyBmb3IgdXNlci9ncm91cCwKLSAqIHdoZXJlYXMgb24gTGludXggdGhlIHN5c2NhbGwgZW5jb2RlcyB0aGlzIGluZm9ybWF0aW9uIGludG8gdGhlIGNtZAotICogZmllbGQgKHNlZSB0aGUgUUNNRCBtYWNybyBpbiBxdW90YS5oKS4gIFRoZXNlIG1hY3JvcyBoZWxwIGtlZXAgdGhlCi0gKiBjb2RlIHBvcnRhYmxlIC0gdGhleSBhcmUgbm90IHZpc2libGUgZnJvbSB0aGUgc3lzY2FsbCBpbnRlcmZhY2UuCi0gKi8KLSNkZWZpbmUgUV9YU0VUR1FMSU0JWFFNX0NNRCg4KQkvKiBzZXQgZ3JvdXBzIGRpc2sgbGltaXRzICovCi0jZGVmaW5lIFFfWEdFVEdRVU9UQQlYUU1fQ01EKDkpCS8qIGdldCBncm91cHMgZGlzayBsaW1pdHMgKi8KLSNkZWZpbmUgUV9YU0VUUFFMSU0JWFFNX0NNRCgxMCkJLyogc2V0IHByb2plY3RzIGRpc2sgbGltaXRzICovCi0jZGVmaW5lIFFfWEdFVFBRVU9UQQlYUU1fQ01EKDExKQkvKiBnZXQgcHJvamVjdHMgZGlzayBsaW1pdHMgKi8KLQogI2RlZmluZSBkZmx0cHJpZAkwCiAjZGVmaW5lIE1BWFBBVEhMRU4JMTAyNAogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGQ5YTYzCi0tLSAvZGV2L251bGwKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgQ2hyaXN0b3BoIEhlbGx3aWcKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKyNpbmNsdWRlICJ4ZnMuaCIKKyNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKKyNpbmNsdWRlICJ4ZnNfc2IuaCIKKyNpbmNsdWRlICJ4ZnNfaW51bS5oIgorI2luY2x1ZGUgInhmc19hZy5oIgorI2luY2x1ZGUgInhmc19tb3VudC5oIgorI2luY2x1ZGUgInhmc19xdW90YS5oIgorI2luY2x1ZGUgInhmc19sb2cuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKKyNpbmNsdWRlICJ4ZnNfYm1hcF9idHJlZS5oIgorI2luY2x1ZGUgInhmc19pbm9kZS5oIgorI2luY2x1ZGUgInF1b3RhL3hmc19xbS5oIgorI2luY2x1ZGUgPGxpbnV4L3F1b3RhLmg+CisKKworU1RBVElDIGludAoreGZzX3F1b3RhX3R5cGUoaW50IHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBVU1JRVU9UQToKKwkJcmV0dXJuIFhGU19EUV9VU0VSOworCWNhc2UgR1JQUVVPVEE6CisJCXJldHVybiBYRlNfRFFfR1JPVVA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFhGU19EUV9QUk9KOworCX0KK30KKworU1RBVElDIGludAoreGZzX2ZzX3F1b3RhX3N5bmMoCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKKwlpbnQJCQl0eXBlKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gWEZTX00oc2IpOworCisJaWYgKCFYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCisJCXJldHVybiAtRU5PU1lTOworCXJldHVybiAteGZzX3N5bmNfaW5vZGVzKG1wLCBTWU5DX0RFTFdSSSk7Cit9CisKK1NUQVRJQyBpbnQKK3hmc19mc19nZXRfeHN0YXRlKAorCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCisJc3RydWN0IGZzX3F1b3RhX3N0YXQJKmZxcykKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKKworCWlmICghWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlyZXR1cm4gLXhmc19xbV9zY2FsbF9nZXRxc3RhdChtcCwgZnFzKTsKK30KKworU1RBVElDIGludAoreGZzX2ZzX3NldF94c3RhdGUoCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKKwl1bnNpZ25lZCBpbnQJCXVmbGFncywKKwlpbnQJCQlvcCkKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKKwl1bnNpZ25lZCBpbnQJCWZsYWdzID0gMDsKKworCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKKwkJcmV0dXJuIC1FUk9GUzsKKwlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKHVmbGFncyAmIFhGU19RVU9UQV9VRFFfQUNDVCkKKwkJZmxhZ3MgfD0gWEZTX1VRVU9UQV9BQ0NUOworCWlmICh1ZmxhZ3MgJiBYRlNfUVVPVEFfUERRX0FDQ1QpCisJCWZsYWdzIHw9IFhGU19QUVVPVEFfQUNDVDsKKwlpZiAodWZsYWdzICYgWEZTX1FVT1RBX0dEUV9BQ0NUKQorCQlmbGFncyB8PSBYRlNfR1FVT1RBX0FDQ1Q7CisJaWYgKHVmbGFncyAmIFhGU19RVU9UQV9VRFFfRU5GRCkKKwkJZmxhZ3MgfD0gWEZTX1VRVU9UQV9FTkZEOworCWlmICh1ZmxhZ3MgJiAoWEZTX1FVT1RBX1BEUV9FTkZEfFhGU19RVU9UQV9HRFFfRU5GRCkpCisJCWZsYWdzIHw9IFhGU19PUVVPVEFfRU5GRDsKKworCXN3aXRjaCAob3ApIHsKKwljYXNlIFFfWFFVT1RBT046CisJCXJldHVybiAteGZzX3FtX3NjYWxsX3F1b3Rhb24obXAsIGZsYWdzKTsKKwljYXNlIFFfWFFVT1RBT0ZGOgorCQlpZiAoIVhGU19JU19RVU9UQV9PTihtcCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC14ZnNfcW1fc2NhbGxfcXVvdGFvZmYobXAsIGZsYWdzKTsKKwljYXNlIFFfWFFVT1RBUk06CisJCWlmIChYRlNfSVNfUVVPVEFfT04obXApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAteGZzX3FtX3NjYWxsX3RydW5jX3FmaWxlcyhtcCwgZmxhZ3MpOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitTVEFUSUMgaW50Cit4ZnNfZnNfZ2V0X3hxdW90YSgKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAorCWludAkJCXR5cGUsCisJcWlkX3QJCQlpZCwKKwlzdHJ1Y3QgZnNfZGlza19xdW90YQkqZmRxKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gWEZTX00oc2IpOworCisJaWYgKCFYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCisJCXJldHVybiAtRU5PU1lTOworCWlmICghWEZTX0lTX1FVT1RBX09OKG1wKSkKKwkJcmV0dXJuIC1FU1JDSDsKKworCXJldHVybiAteGZzX3FtX3NjYWxsX2dldHF1b3RhKG1wLCBpZCwgeGZzX3F1b3RhX3R5cGUodHlwZSksIGZkcSk7Cit9CisKK1NUQVRJQyBpbnQKK3hmc19mc19zZXRfeHF1b3RhKAorCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCisJaW50CQkJdHlwZSwKKwlxaWRfdAkJCWlkLAorCXN0cnVjdCBmc19kaXNrX3F1b3RhCSpmZHEpCit7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBYRlNfTShzYik7CisKKwlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisJCXJldHVybiAtRVJPRlM7CisJaWYgKCFYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCisJCXJldHVybiAtRU5PU1lTOworCWlmICghWEZTX0lTX1FVT1RBX09OKG1wKSkKKwkJcmV0dXJuIC1FU1JDSDsKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXR1cm4gLXhmc19xbV9zY2FsbF9zZXRxbGltKG1wLCBpZCwgeGZzX3F1b3RhX3R5cGUodHlwZSksIGZkcSk7Cit9CisKK3N0cnVjdCBxdW90YWN0bF9vcHMgeGZzX3F1b3RhY3RsX29wZXJhdGlvbnMgPSB7CisJLnF1b3RhX3N5bmMJCT0geGZzX2ZzX3F1b3RhX3N5bmMsCisJLmdldF94c3RhdGUJCT0geGZzX2ZzX2dldF94c3RhdGUsCisJLnNldF94c3RhdGUJCT0geGZzX2ZzX3NldF94c3RhdGUsCisJLmdldF94cXVvdGEJCT0geGZzX2ZzX2dldF94cXVvdGEsCisJLnNldF94cXVvdGEJCT0geGZzX2ZzX3NldF94cXVvdGEsCit9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKaW5kZXggMzJhZTUwMi4uYmI2ODUyNiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC02OCw3ICs2OCw2IEBACiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogCi1zdGF0aWMgc3RydWN0IHF1b3RhY3RsX29wcyB4ZnNfcXVvdGFjdGxfb3BlcmF0aW9uczsKIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB4ZnNfc3VwZXJfb3BlcmF0aW9uczsKIHN0YXRpYyBrbWVtX3pvbmVfdCAqeGZzX2lvZW5kX3pvbmU7CiBtZW1wb29sX3QgKnhmc19pb2VuZF9wb29sOwpAQCAtNzksNyArNzgsNiBAQAogI2RlZmluZSBNTlRPUFRfUlRERVYJInJ0ZGV2IgkJLyogcmVhbHRpbWUgSS9PIGRldmljZSAqLwogI2RlZmluZSBNTlRPUFRfQklPU0laRQkiYmlvc2l6ZSIJLyogbG9nMiBvZiBwcmVmZXJyZWQgYnVmZmVyZWQgaW8gc2l6ZSAqLwogI2RlZmluZSBNTlRPUFRfV1NZTkMJIndzeW5jIgkJLyogc2FmZS1tb2RlIG5mcyBjb21wYXRpYmxlIG1vdW50ICovCi0jZGVmaW5lIE1OVE9QVF9JTk82NAkiaW5vNjQiCQkvKiBmb3JjZSBpbm9kZXMgaW50byA2NC1iaXQgcmFuZ2UgKi8KICNkZWZpbmUgTU5UT1BUX05PQUxJR04JIm5vYWxpZ24iCS8qIHR1cm4gb2ZmIHN0cmlwZSBhbGlnbm1lbnQgKi8KICNkZWZpbmUgTU5UT1BUX1NXQUxMT0MJInN3YWxsb2MiCS8qIHR1cm4gb24gc3RyaXBlIHdpZHRoIGFsbG9jYXRpb24gKi8KICNkZWZpbmUgTU5UT1BUX1NVTklUCSJzdW5pdCIJCS8qIGRhdGEgdm9sdW1lIHN0cmlwZSB1bml0ICovCkBAIC0xODAsNyArMTc4LDcgQEAKIAlpbnQJCQlkc3dpZHRoID0gMDsKIAlpbnQJCQlpb3NpemUgPSAwOwogCWludAkJCWRtYXBpX2ltcGxpZXNfaWtlZXAgPSAxOwotCXVjaGFyX3QJCQlpb3NpemVsb2cgPSAwOworCV9fdWludDhfdAkJaW9zaXplbG9nID0gMDsKIAogCS8qCiAJICogQ29weSBiaW5hcnkgVkZTIG1vdW50IGZsYWdzIHdlIGFyZSBpbnRlcmVzdGVkIGluLgpAQCAtMjkxLDE2ICsyODksNiBAQAogCQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX09TWU5DSVNPU1lOQzsKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX05PUkVDT1ZFUlkpKSB7CiAJCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfTk9SRUNPVkVSWTsKLQkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX0lOTzY0KSkgewotI2lmIFhGU19CSUdfSU5VTVMKLQkJCW1wLT5tX2ZsYWdzIHw9IFhGU19NT1VOVF9JTk82NDsKLQkJCW1wLT5tX2lub2FkZCA9IFhGU19JTk82NF9PRkZTRVQ7Ci0jZWxzZQotCQkJY21uX2VycihDRV9XQVJOLAotCQkJCSJYRlM6ICVzIG9wdGlvbiBub3QgYWxsb3dlZCBvbiB0aGlzIHN5c3RlbSIsCi0JCQkJdGhpc19jaGFyKTsKLQkJCXJldHVybiBFSU5WQUw7Ci0jZW5kaWYKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX05PQUxJR04pKSB7CiAJCQltcC0+bV9mbGFncyB8PSBYRlNfTU9VTlRfTk9BTElHTjsKIAkJfSBlbHNlIGlmICghc3RyY21wKHRoaXNfY2hhciwgTU5UT1BUX1NXQUxMT0MpKSB7CkBAIC01MjksNyArNTE3LDYgQEAKIAkJLyogdGhlIGZldyBzaW1wbGUgb25lcyB3ZSBjYW4gZ2V0IGZyb20gdGhlIG1vdW50IHN0cnVjdCAqLwogCQl7IFhGU19NT1VOVF9JS0VFUCwJCSIsIiBNTlRPUFRfSUtFRVAgfSwKIAkJeyBYRlNfTU9VTlRfV1NZTkMsCQkiLCIgTU5UT1BUX1dTWU5DIH0sCi0JCXsgWEZTX01PVU5UX0lOTzY0LAkJIiwiIE1OVE9QVF9JTk82NCB9LAogCQl7IFhGU19NT1VOVF9OT0FMSUdOLAkJIiwiIE1OVE9QVF9OT0FMSUdOIH0sCiAJCXsgWEZTX01PVU5UX1NXQUxMT0MsCQkiLCIgTU5UT1BUX1NXQUxMT0MgfSwKIAkJeyBYRlNfTU9VTlRfTk9VVUlELAkJIiwiIE1OVE9QVF9OT1VVSUQgfSwKQEAgLTYzNCw3ICs2MjEsNyBAQAogCXJldHVybiAoKChfX3VpbnQ2NF90KXBhZ2VmYWN0b3IpIDw8IGJpdHNoaWZ0KSAtIDE7CiB9CiAKLWludAorU1RBVElDIGludAogeGZzX2Jsa2Rldl9nZXQoCiAJeGZzX21vdW50X3QJCSptcCwKIAljb25zdCBjaGFyCQkqbmFtZSwKQEAgLTY1MSw3ICs2MzgsNyBAQAogCXJldHVybiAtZXJyb3I7CiB9CiAKLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfYmxrZGV2X3B1dCgKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlCSpiZGV2KQogewpAQCAtODcyLDcgKzg1OSw3IEBACiAJd2FrZV91cF9wcm9jZXNzKGFpbHAtPnhhX3Rhc2spOwogfQogCi1pbnQKK1NUQVRJQyBpbnQKIHhmc2FpbGQoCiAJdm9pZAkqZGF0YSkKIHsKQEAgLTk5MCwyNiArOTc3LDU3IEBACiAJaW50CQkJc3luYykKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OwogCWludAkJCWVycm9yID0gMDsKLQlpbnQJCQlmbGFncyA9IDA7CiAKIAl4ZnNfaXRyYWNlX2VudHJ5KGlwKTsKKworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKKwkJcmV0dXJuIFhGU19FUlJPUihFSU8pOworCiAJaWYgKHN5bmMpIHsKIAkJZXJyb3IgPSB4ZnNfd2FpdF9vbl9wYWdlcyhpcCwgMCwgLTEpOwogCQlpZiAoZXJyb3IpCi0JCQlnb3RvIG91dF9lcnJvcjsKLQkJZmxhZ3MgfD0gRkxVU0hfU1lOQzsKKwkJCWdvdG8gb3V0OwogCX0KLQllcnJvciA9IHhmc19pbm9kZV9mbHVzaChpcCwgZmxhZ3MpOwogCi1vdXRfZXJyb3I6CisJLyoKKwkgKiBCeXBhc3MgaW5vZGVzIHdoaWNoIGhhdmUgYWxyZWFkeSBiZWVuIGNsZWFuZWQgYnkKKwkgKiB0aGUgaW5vZGUgZmx1c2ggY2x1c3RlcmluZyBjb2RlIGluc2lkZSB4ZnNfaWZsdXNoCisJICovCisJaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBXZSBtYWtlIHRoaXMgbm9uLWJsb2NraW5nIGlmIHRoZSBpbm9kZSBpcyBjb250ZW5kZWQsIHJldHVybgorCSAqIEVBR0FJTiB0byBpbmRpY2F0ZSB0byB0aGUgY2FsbGVyIHRoYXQgdGhleSBkaWQgbm90IHN1Y2NlZWQuCisJICogVGhpcyBwcmV2ZW50cyB0aGUgZmx1c2ggcGF0aCBmcm9tIGJsb2NraW5nIG9uIGlub2RlcyBpbnNpZGUKKwkgKiBhbm90aGVyIG9wZXJhdGlvbiByaWdodCBub3csIHRoZXkgZ2V0IGNhdWdodCBsYXRlciBieSB4ZnNfc3luYy4KKwkgKi8KKwlpZiAoc3luYykgeworCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOworCQl4ZnNfaWZsb2NrKGlwKTsKKworCQllcnJvciA9IHhmc19pZmx1c2goaXAsIFhGU19JRkxVU0hfU1lOQyk7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSBFQUdBSU47CisJCWlmICgheGZzX2lsb2NrX25vd2FpdChpcCwgWEZTX0lMT0NLX1NIQVJFRCkpCisJCQlnb3RvIG91dDsKKwkJaWYgKHhmc19pcGluY291bnQoaXApIHx8ICF4ZnNfaWZsb2NrX25vd2FpdChpcCkpCisJCQlnb3RvIG91dF91bmxvY2s7CisKKwkJZXJyb3IgPSB4ZnNfaWZsdXNoKGlwLCBYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0spOworCX0KKworIG91dF91bmxvY2s6CisJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOworIG91dDoKIAkvKgogCSAqIGlmIHdlIGZhaWxlZCB0byB3cml0ZSBvdXQgdGhlIGlub2RlIHRoZW4gbWFyawogCSAqIGl0IGRpcnR5IGFnYWluIHNvIHdlJ2xsIHRyeSBhZ2FpbiBsYXRlci4KIAkgKi8KIAlpZiAoZXJyb3IpCiAJCXhmc19tYXJrX2lub2RlX2RpcnR5X3N5bmMoaXApOwotCiAJcmV0dXJuIC1lcnJvcjsKIH0KIApAQCAtMTE2OSwxOCArMTE4NywxMiBAQAogCXN0YXRwLT5mX2JmcmVlID0gc3RhdHAtPmZfYmF2YWlsID0KIAkJCQlzYnAtPnNiX2ZkYmxvY2tzIC0gWEZTX0FMTE9DX1NFVF9BU0lERShtcCk7CiAJZmFrZWlub3MgPSBzdGF0cC0+Zl9iZnJlZSA8PCBzYnAtPnNiX2lub3BibG9nOwotI2lmIFhGU19CSUdfSU5VTVMKLQlmYWtlaW5vcyArPSBtcC0+bV9pbm9hZGQ7Ci0jZW5kaWYKIAlzdGF0cC0+Zl9maWxlcyA9CiAJICAgIE1JTihzYnAtPnNiX2ljb3VudCArIGZha2Vpbm9zLCAoX191aW50NjRfdClYRlNfTUFYSU5VTUJFUik7CiAJaWYgKG1wLT5tX21heGljb3VudCkKLSNpZiBYRlNfQklHX0lOVU1TCi0JCWlmICghbXAtPm1faW5vYWRkKQotI2VuZGlmCi0JCQlzdGF0cC0+Zl9maWxlcyA9IG1pbl90KHR5cGVvZihzdGF0cC0+Zl9maWxlcyksCi0JCQkJCQlzdGF0cC0+Zl9maWxlcywKLQkJCQkJCW1wLT5tX21heGljb3VudCk7CisJCXN0YXRwLT5mX2ZpbGVzID0gbWluX3QodHlwZW9mKHN0YXRwLT5mX2ZpbGVzKSwKKwkJCQkJc3RhdHAtPmZfZmlsZXMsCisJCQkJCW1wLT5tX21heGljb3VudCk7CiAJc3RhdHAtPmZfZmZyZWUgPSBzdGF0cC0+Zl9maWxlcyAtIChzYnAtPnNiX2ljb3VudCAtIHNicC0+c2JfaWZyZWUpOwogCXNwaW5fdW5sb2NrKCZtcC0+bV9zYl9sb2NrKTsKIApAQCAtMTMwMiw1NyArMTMxNCw2IEBACiAJcmV0dXJuIC14ZnNfc2hvd2FyZ3MoWEZTX00obW50LT5tbnRfc2IpLCBtKTsKIH0KIAotU1RBVElDIGludAoteGZzX2ZzX3F1b3Rhc3luYygKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAotCWludAkJCXR5cGUpCi17Ci0JcmV0dXJuIC1YRlNfUU1fUVVPVEFDVEwoWEZTX00oc2IpLCBRX1hRVU9UQVNZTkMsIDAsIE5VTEwpOwotfQotCi1TVEFUSUMgaW50Ci14ZnNfZnNfZ2V0eHN0YXRlKAotCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCi0Jc3RydWN0IGZzX3F1b3RhX3N0YXQJKmZxcykKLXsKLQlyZXR1cm4gLVhGU19RTV9RVU9UQUNUTChYRlNfTShzYiksIFFfWEdFVFFTVEFULCAwLCAoY2FkZHJfdClmcXMpOwotfQotCi1TVEFUSUMgaW50Ci14ZnNfZnNfc2V0eHN0YXRlKAotCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCi0JdW5zaWduZWQgaW50CQlmbGFncywKLQlpbnQJCQlvcCkKLXsKLQlyZXR1cm4gLVhGU19RTV9RVU9UQUNUTChYRlNfTShzYiksIG9wLCAwLCAoY2FkZHJfdCkmZmxhZ3MpOwotfQotCi1TVEFUSUMgaW50Ci14ZnNfZnNfZ2V0eHF1b3RhKAotCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCi0JaW50CQkJdHlwZSwKLQlxaWRfdAkJCWlkLAotCXN0cnVjdCBmc19kaXNrX3F1b3RhCSpmZHEpCi17Ci0JcmV0dXJuIC1YRlNfUU1fUVVPVEFDVEwoWEZTX00oc2IpLAotCQkJCSAodHlwZSA9PSBVU1JRVU9UQSkgPyBRX1hHRVRRVU9UQSA6Ci0JCQkJICAoKHR5cGUgPT0gR1JQUVVPVEEpID8gUV9YR0VUR1FVT1RBIDoKLQkJCQkgICBRX1hHRVRQUVVPVEEpLCBpZCwgKGNhZGRyX3QpZmRxKTsKLX0KLQotU1RBVElDIGludAoteGZzX2ZzX3NldHhxdW90YSgKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAotCWludAkJCXR5cGUsCi0JcWlkX3QJCQlpZCwKLQlzdHJ1Y3QgZnNfZGlza19xdW90YQkqZmRxKQotewotCXJldHVybiAtWEZTX1FNX1FVT1RBQ1RMKFhGU19NKHNiKSwKLQkJCQkgKHR5cGUgPT0gVVNSUVVPVEEpID8gUV9YU0VUUUxJTSA6Ci0JCQkJICAoKHR5cGUgPT0gR1JQUVVPVEEpID8gUV9YU0VUR1FMSU0gOgotCQkJCSAgIFFfWFNFVFBRTElNKSwgaWQsIChjYWRkcl90KWZkcSk7Ci19Ci0KIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIGluIHhmc19tb3VudF90IGZpZWxkcyBiYXNlZCBvbiBtb3VudCBhcmdzLgogICogTm90ZTogdGhlIHN1cGVyYmxvY2sgX2hhc18gbm93IGJlZW4gcmVhZCBpbi4KQEAgLTE0MzUsNyArMTM5Niw5IEBACiAJc2JfbWluX2Jsb2Nrc2l6ZShzYiwgQkJTSVpFKTsKIAlzYi0+c194YXR0ciA9IHhmc194YXR0cl9oYW5kbGVyczsKIAlzYi0+c19leHBvcnRfb3AgPSAmeGZzX2V4cG9ydF9vcGVyYXRpb25zOworI2lmZGVmIENPTkZJR19YRlNfUVVPVEEKIAlzYi0+c19xY29wID0gJnhmc19xdW90YWN0bF9vcGVyYXRpb25zOworI2VuZGlmCiAJc2ItPnNfb3AgPSAmeGZzX3N1cGVyX29wZXJhdGlvbnM7CiAKIAllcnJvciA9IHhmc19kbW9wc19nZXQobXApOwpAQCAtMTU3OCwxNCArMTU0MSw2IEBACiAJLnNob3dfb3B0aW9ucwkJPSB4ZnNfZnNfc2hvd19vcHRpb25zLAogfTsKIAotc3RhdGljIHN0cnVjdCBxdW90YWN0bF9vcHMgeGZzX3F1b3RhY3RsX29wZXJhdGlvbnMgPSB7Ci0JLnF1b3RhX3N5bmMJCT0geGZzX2ZzX3F1b3Rhc3luYywKLQkuZ2V0X3hzdGF0ZQkJPSB4ZnNfZnNfZ2V0eHN0YXRlLAotCS5zZXRfeHN0YXRlCQk9IHhmc19mc19zZXR4c3RhdGUsCi0JLmdldF94cXVvdGEJCT0geGZzX2ZzX2dldHhxdW90YSwKLQkuc2V0X3hxdW90YQkJPSB4ZnNfZnNfc2V0eHF1b3RhLAotfTsKLQogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHhmc19mc190eXBlID0gewogCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCQk9ICJ4ZnMiLApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmgKaW5kZXggZDVkNzc2ZC4uNWEyZWEzYSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5oCkBAIC05Myw2ICs5Myw3IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgeGZzX2V4cG9ydF9vcGVyYXRpb25zOwogZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyICp4ZnNfeGF0dHJfaGFuZGxlcnNbXTsKK2V4dGVybiBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHhmc19xdW90YWN0bF9vcGVyYXRpb25zOwogCiAjZGVmaW5lIFhGU19NKHNiKQkJKChzdHJ1Y3QgeGZzX21vdW50ICopKChzYiktPnNfZnNfaW5mbykpCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuaAppbmRleCA1ZjZkZTFlLi4wNGYwNThjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5oCkBAIC0xOSw2ICsxOSw3IEBACiAjZGVmaW5lIFhGU19TWU5DX0ggMQogCiBzdHJ1Y3QgeGZzX21vdW50Oworc3RydWN0IHhmc19wZXJhZzsKIAogdHlwZWRlZiBzdHJ1Y3QgYmh2X3Zmc19zeW5jX3dvcmsgewogCXN0cnVjdCBsaXN0X2hlYWQJd19saXN0OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKaW5kZXggZjY1OTgzYS4uYWQ3ZmJlYSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCkBAIC00MSwxMSArNDEsNiBAQAogI2RlZmluZSBJT19JTlZJUwkweDAwMDIwCQkvKiBkb24ndCB1cGRhdGUgaW5vZGUgdGltZXN0YW1wcyAqLwogCiAvKgotICogRmxhZ3MgZm9yIHhmc19pbm9kZV9mbHVzaAotICovCi0jZGVmaW5lIEZMVVNIX1NZTkMJCTEJLyogd2FpdCBmb3IgZmx1c2ggdG8gY29tcGxldGUJKi8KLQotLyoKICAqIEZsdXNoL0ludmFsaWRhdGUgb3B0aW9ucyBmb3Igdm9wX3Rvc3MvZmx1c2gvZmx1c2hpbnZhbF9wYWdlcy4KICAqLwogI2RlZmluZSBGSV9OT05FCQkJMAkvKiBub25lICovCkBAIC01NSwzMyArNTAsNiBAQAogCQkJCQkgICB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy4gKi8KIAogLyoKLSAqIERlYWxpbmcgd2l0aCBiYWQgaW5vZGVzCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IFZOX0JBRChzdHJ1Y3QgaW5vZGUgKnZwKQotewotCXJldHVybiBpc19iYWRfaW5vZGUodnApOwotfQotCi0vKgotICogRXh0cmFjdGluZyBhdGltZSB2YWx1ZXMgaW4gdmFyaW91cyBmb3JtYXRzCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bl9hdGltZV90b19ic3RpbWUoc3RydWN0IGlub2RlICp2cCwgeGZzX2JzdGltZV90ICpic19hdGltZSkKLXsKLQlic19hdGltZS0+dHZfc2VjID0gdnAtPmlfYXRpbWUudHZfc2VjOwotCWJzX2F0aW1lLT50dl9uc2VjID0gdnAtPmlfYXRpbWUudHZfbnNlYzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHZuX2F0aW1lX3RvX3RpbWVzcGVjKHN0cnVjdCBpbm9kZSAqdnAsIHN0cnVjdCB0aW1lc3BlYyAqdHMpCi17Ci0JKnRzID0gdnAtPmlfYXRpbWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2bl9hdGltZV90b190aW1lX3Qoc3RydWN0IGlub2RlICp2cCwgdGltZV90ICp0dCkKLXsKLQkqdHQgPSB2cC0+aV9hdGltZS50dl9zZWM7Ci19Ci0KLS8qCiAgKiBTb21lIHVzZWZ1bCBwcmVkaWNhdGVzLgogICovCiAjZGVmaW5lIFZOX01BUFBFRCh2cCkJbWFwcGluZ19tYXBwZWQodnAtPmlfbWFwcGluZykKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuYwppbmRleCA2NTQzYzBiLi5lNGJhYmNjIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5jCkBAIC04MDQsNyArODA0LDcgQEAKIAl1aW50CQkJZmxpc3RfbG9ja2VkOwogCXhmc19kcXVvdF90CQkqZDsKIAotCUFTU0VSVChYRlNfRFFfSVNfSEFTSF9MT0NLRUQocWgpKTsKKwlBU1NFUlQobXV0ZXhfaXNfbG9ja2VkKCZxaC0+cWhfbG9jaykpOwogCiAJZmxpc3RfbG9ja2VkID0gQl9GQUxTRTsKIApAQCAtODc3LDcgKzg3Nyw3IEBACiAJCQkvKgogCQkJICogbW92ZSB0aGUgZHF1b3QgdG8gdGhlIGZyb250IG9mIHRoZSBoYXNoY2hhaW4KIAkJCSAqLwotCQkJQVNTRVJUKFhGU19EUV9JU19IQVNIX0xPQ0tFRChxaCkpOworCQkJQVNTRVJUKG11dGV4X2lzX2xvY2tlZCgmcWgtPnFoX2xvY2spKTsKIAkJCWlmIChkcXAtPkhMX1BSRVZQICE9ICZxaC0+cWhfbmV4dCkgewogCQkJCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwKIAkJCQkJCSAgIkRRTE9PS1VQOiBIQVNIIE1PVkVUT0ZST05UIik7CkBAIC04OTIsMTMgKzg5MiwxMyBAQAogCQkJfQogCQkJeGZzX2RxdHJhY2VfZW50cnkoZHFwLCAiTE9PS1VQIEVORCIpOwogCQkJKk9fZHFwcCA9IGRxcDsKLQkJCUFTU0VSVChYRlNfRFFfSVNfSEFTSF9MT0NLRUQocWgpKTsKKwkJCUFTU0VSVChtdXRleF9pc19sb2NrZWQoJnFoLT5xaF9sb2NrKSk7CiAJCQlyZXR1cm4gKDApOwogCQl9CiAJfQogCiAJKk9fZHFwcCA9IE5VTEw7Ci0JQVNTRVJUKFhGU19EUV9JU19IQVNIX0xPQ0tFRChxaCkpOworCUFTU0VSVChtdXRleF9pc19sb2NrZWQoJnFoLT5xaF9sb2NrKSk7CiAJcmV0dXJuICgxKTsKIH0KIApAQCAtOTU2LDcgKzk1Niw3IEBACiAJCQlBU1NFUlQoaXAtPmlfZ2RxdW90ID09IE5VTEwpOwogCX0KICNlbmRpZgotCVhGU19EUV9IQVNIX0xPQ0soaCk7CisJbXV0ZXhfbG9jaygmaC0+cWhfbG9jayk7CiAKIAkvKgogCSAqIExvb2sgaW4gdGhlIGNhY2hlIChoYXNodGFibGUpLgpAQCAtOTcxLDcgKzk3MSw3IEBACiAJCSAqLwogCQlBU1NFUlQoKk9fZHFwcCk7CiAJCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKCpPX2RxcHApKTsKLQkJWEZTX0RRX0hBU0hfVU5MT0NLKGgpOworCQltdXRleF91bmxvY2soJmgtPnFoX2xvY2spOwogCQl4ZnNfZHF0cmFjZV9lbnRyeSgqT19kcXBwLCAiRFFHRVQgRE9ORSAoRlJPTSBDQUNIRSkiKTsKIAkJcmV0dXJuICgwKTsJLyogc3VjY2VzcyAqLwogCX0KQEAgLTk5MSw3ICs5OTEsNyBAQAogCSAqIHdlIGRvbid0IGtlZXAgdGhlIGxvY2sgYWNyb3NzIGEgZGlzayByZWFkCiAJICovCiAJdmVyc2lvbiA9IGgtPnFoX3ZlcnNpb247Ci0JWEZTX0RRX0hBU0hfVU5MT0NLKGgpOworCW11dGV4X3VubG9jaygmaC0+cWhfbG9jayk7CiAKIAkvKgogCSAqIEFsbG9jYXRlIHRoZSBkcXVvdCBvbiB0aGUga2VybmVsIGhlYXAsIGFuZCByZWFkIHRoZSBvbmRpc2sKQEAgLTEwNTYsNyArMTA1Niw3IEBACiAJLyoKIAkgKiBIYXNobG9jayBjb21lcyBhZnRlciBpbG9jayBpbiBsb2NrIG9yZGVyCiAJICovCi0JWEZTX0RRX0hBU0hfTE9DSyhoKTsKKwltdXRleF9sb2NrKCZoLT5xaF9sb2NrKTsKIAlpZiAodmVyc2lvbiAhPSBoLT5xaF92ZXJzaW9uKSB7CiAJCXhmc19kcXVvdF90ICp0bXBkcXA7CiAJCS8qCkBAIC0xMDcyLDcgKzEwNzIsNyBAQAogCQkJICogYW5kIHN0YXJ0IG92ZXIuCiAJCQkgKi8KIAkJCXhmc19xbV9kcXB1dCh0bXBkcXApOwotCQkJWEZTX0RRX0hBU0hfVU5MT0NLKGgpOworCQkJbXV0ZXhfdW5sb2NrKCZoLT5xaF9sb2NrKTsKIAkJCXhmc19xbV9kcWRlc3Ryb3koZHFwKTsKIAkJCVhRTV9TVEFUU19JTkMoeHFtc3RhdHMueHNfcW1fZHF1b3RfZHVwcyk7CiAJCQlnb3RvIGFnYWluOwpAQCAtMTA4Myw3ICsxMDgzLDcgQEAKIAkgKiBQdXQgdGhlIGRxdW90IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGhhc2gtY2hhaW4gYW5kIG1wJ3MgbGlzdAogCSAqIExPQ0sgT1JERVI6IGhhc2hsb2NrLCBmcmVlbGlzdGxvY2ssIG1wbGlzdGxvY2ssIHVkcWxvY2ssIGdkcWxvY2sgLi4KIAkgKi8KLQlBU1NFUlQoWEZTX0RRX0lTX0hBU0hfTE9DS0VEKGgpKTsKKwlBU1NFUlQobXV0ZXhfaXNfbG9ja2VkKCZoLT5xaF9sb2NrKSk7CiAJZHFwLT5xX2hhc2ggPSBoOwogCVhRTV9IQVNITElTVF9JTlNFUlQoaCwgZHFwKTsKIApAQCAtMTEwMiw3ICsxMTAyLDcgQEAKIAlYUU1fTVBMSVNUX0lOU0VSVCgmKFhGU19RSV9NUExfTElTVChtcCkpLCBkcXApOwogCiAJeGZzX3FtX21wbGlzdF91bmxvY2sobXApOwotCVhGU19EUV9IQVNIX1VOTE9DSyhoKTsKKwltdXRleF91bmxvY2soJmgtPnFoX2xvY2spOwogIGRxcmV0OgogCUFTU0VSVCgoaXAgPT0gTlVMTCkgfHwgeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX0VYQ0wpKTsKIAl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUUdFVCBET05FIik7CkBAIC0xNDQwLDcgKzE0NDAsNyBAQAogCXhmc19tb3VudF90CSptcCA9IGRxcC0+cV9tb3VudDsKIAogCUFTU0VSVChYRlNfUU1fSVNfTVBMSVNUX0xPQ0tFRChtcCkpOwotCUFTU0VSVChYRlNfRFFfSVNfSEFTSF9MT0NLRUQoZHFwLT5xX2hhc2gpKTsKKwlBU1NFUlQobXV0ZXhfaXNfbG9ja2VkKCZkcXAtPnFfaGFzaC0+cWhfbG9jaykpOwogCiAJeGZzX2RxbG9jayhkcXApOwogCS8qCkBAIC0xNDUzLDcgKzE0NTMsNyBAQAogCSAqLwogCWlmIChkcXAtPnFfbnJlZnMgIT0gMCkgewogCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQkJWEZTX0RRX0hBU0hfVU5MT0NLKGRxcC0+cV9oYXNoKTsKKwkJbXV0ZXhfdW5sb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jayk7CiAJCXJldHVybiAoMSk7CiAJfQogCkBAIC0xNTE3LDcgKzE1MTcsNyBAQAogCW1lbXNldCgmZHFwLT5xX2NvcmUsIDAsIHNpemVvZihkcXAtPnFfY29yZSkpOwogCXhmc19kcWZ1bmxvY2soZHFwKTsKIAl4ZnNfZHF1bmxvY2soZHFwKTsKLQlYRlNfRFFfSEFTSF9VTkxPQ0sodGhpc2hhc2gpOworCW11dGV4X3VubG9jaygmdGhpc2hhc2gtPnFoX2xvY2spOwogCXJldHVybiAoMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuaCBiL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3QuaAppbmRleCBkNDQzZTkzLi5kZTBmNDAyIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX2RxdW90LmgKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdC5oCkBAIC0zNCw3ICszNCw3IEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IHhmc19kcWhhc2ggewogCXN0cnVjdCB4ZnNfZHF1b3QgKnFoX25leHQ7Ci0JbXV0ZXhfdAkJICBxaF9sb2NrOworCXN0cnVjdCBtdXRleAkgIHFoX2xvY2s7CiAJdWludAkJICBxaF92ZXJzaW9uOwkvKiBldmVyIGluY3JlYXNpbmcgdmVyc2lvbiAqLwogCXVpbnQJCSAgcWhfbmVsZW1zOwkvKiBudW1iZXIgb2YgZHF1b3RzIG9uIHRoZSBsaXN0ICovCiB9IHhmc19kcWhhc2hfdDsKQEAgLTgxLDcgKzgxLDcgQEAKIAl4ZnNfcWNudF90CSBxX3Jlc19iY291bnQ7CS8qIHRvdGFsIHJlZ3VsYXIgbmJsa3MgdXNlZCtyZXNlcnZlZCAqLwogCXhmc19xY250X3QJIHFfcmVzX2ljb3VudDsJLyogdG90YWwgaW5vcyBhbGxvY2QrcmVzZXJ2ZWQgKi8KIAl4ZnNfcWNudF90CSBxX3Jlc19ydGJjb3VudDsvKiB0b3RhbCByZWFsdGltZSBibGtzIHVzZWQrcmVzZXJ2ZWQgKi8KLQltdXRleF90CQkgcV9xbG9jazsJLyogcXVvdGEgbG9jayAqLworCXN0cnVjdCBtdXRleAkgcV9xbG9jazsJLyogcXVvdGEgbG9jayAqLwogCXN0cnVjdCBjb21wbGV0aW9uIHFfZmx1c2g7CS8qIGZsdXNoIGNvbXBsZXRpb24gcXVldWUgKi8KIAlhdG9taWNfdCAgICAgICAgICBxX3BpbmNvdW50OwkvKiBkcXVvdCBwaW4gY291bnQgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBxX3BpbndhaXQ7CS8qIGRxdW90IHBpbm5pbmcgd2FpdCBxdWV1ZSAqLwpAQCAtMTA5LDE5ICsxMDksNiBAQAogCiAjZGVmaW5lIFhGU19EUUhPTEQoZHFwKQkJKChkcXApLT5xX25yZWZzKyspCiAKLSNpZmRlZiBERUJVRwotc3RhdGljIGlubGluZSBpbnQKLVhGU19EUV9JU19MT0NLRUQoeGZzX2RxdW90X3QgKmRxcCkKLXsKLQlpZiAobXV0ZXhfdHJ5bG9jaygmZHFwLT5xX3Fsb2NrKSkgewotCQltdXRleF91bmxvY2soJmRxcC0+cV9xbG9jayk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgotCi0KIC8qCiAgKiBNYW5hZ2UgdGhlIHFfZmx1c2ggY29tcGxldGlvbiBxdWV1ZSBlbWJlZGRlZCBpbiB0aGUgZHF1b3QuICBUaGlzIGNvbXBsZXRpb24KICAqIHF1ZXVlIHN5bmNocm9uaXplcyBwcm9jZXNzZXMgYXR0ZW1wdGluZyB0byBmbHVzaCB0aGUgaW4tY29yZSBkcXVvdCBiYWNrIHRvCkBAIC0xNDIsNiArMTI5LDcgQEAKIAljb21wbGV0ZSgmZHFwLT5xX2ZsdXNoKTsKIH0KIAorI2RlZmluZSBYRlNfRFFfSVNfTE9DS0VEKGRxcCkJKG11dGV4X2lzX2xvY2tlZCgmKChkcXApLT5xX3Fsb2NrKSkpCiAjZGVmaW5lIFhGU19EUV9JU19PTl9GUkVFTElTVChkcXApICAoKGRxcCktPmRxX2ZsbmV4dCAhPSAoZHFwKSkKICNkZWZpbmUgWEZTX0RRX0lTX0RJUlRZKGRxcCkJKChkcXApLT5kcV9mbGFncyAmIFhGU19EUV9ESVJUWSkKICNkZWZpbmUgWEZTX1FNX0lTVURRKGRxcCkJKChkcXApLT5kcV9mbGFncyAmIFhGU19EUV9VU0VSKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5jIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCmluZGV4IDdhMmJlYjYuLjViNjY5NTAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmMKQEAgLTU1LDcgKzU1LDcgQEAKICAqIHF1b3RhIGZ1bmN0aW9uYWxpdHksIGluY2x1ZGluZyBtYWludGFpbmluZyB0aGUgZnJlZWxpc3QgYW5kIGhhc2gKICAqIHRhYmxlcyBvZiBkcXVvdHMuCiAgKi8KLW11dGV4X3QJCXhmc19HcW1fbG9jazsKK3N0cnVjdCBtdXRleAl4ZnNfR3FtX2xvY2s7CiBzdHJ1Y3QgeGZzX3FtCSp4ZnNfR3FtOwogdWludAkJbmRxdW90OwogCkBAIC02OSw4ICs2OSw2IEBACiAKIFNUQVRJQyB2b2lkCXhmc19xbV9mcmVlbGlzdF9pbml0KHhmc19mcmxpc3RfdCAqKTsKIFNUQVRJQyB2b2lkCXhmc19xbV9mcmVlbGlzdF9kZXN0cm95KHhmc19mcmxpc3RfdCAqKTsKLVNUQVRJQyBpbnQJeGZzX3FtX21wbGlzdF9ub3dhaXQoeGZzX21vdW50X3QgKik7Ci1TVEFUSUMgaW50CXhmc19xbV9kcWhhc2hsb2NrX25vd2FpdCh4ZnNfZHF1b3RfdCAqKTsKIAogU1RBVElDIGludAl4ZnNfcW1faW5pdF9xdW90YWlub3MoeGZzX21vdW50X3QgKik7CiBTVEFUSUMgaW50CXhmc19xbV9pbml0X3F1b3RhaW5mbyh4ZnNfbW91bnRfdCAqKTsKQEAgLTgyLDcgKzgwLDcgQEAKIH07CiAKICNpZmRlZiBERUJVRwotZXh0ZXJuIG11dGV4X3QJcWNoZWNrX2xvY2s7CitleHRlcm4gc3RydWN0IG11dGV4CXFjaGVja19sb2NrOwogI2VuZGlmCiAKICNpZmRlZiBRVU9UQURFQlVHCkBAIC0yMTksNyArMjE3LDcgQEAKIAkgKiB0aGUgc3RydWN0dXJlIGNvdWxkIGRpc2FwcGVhciBiZXR3ZWVuIHRoZSBlbnRyeSB0byB0aGlzIHJvdXRpbmUgYW5kCiAJICogYSBIT0xEIG9wZXJhdGlvbiBpZiBub3QgbG9ja2VkLgogCSAqLwotCVhGU19RTV9MT0NLKHhmc19HcW0pOworCW11dGV4X2xvY2soJnhmc19HcW1fbG9jayk7CiAKIAlpZiAoeGZzX0dxbSA9PSBOVUxMKQogCQl4ZnNfR3FtID0geGZzX0dxbV9pbml0KCk7CkBAIC0yMjgsOCArMjI2LDggQEAKIAkgKiBkZWJ1Z2dpbmcgYW5kIHN0YXRpc3RpY2FsIHB1cnBvc2VzLCBidXQgLi4uCiAJICogSnVzdCB0YWtlIGEgcmVmZXJlbmNlIGFuZCBnZXQgb3V0LgogCSAqLwotCVhGU19RTV9IT0xEKHhmc19HcW0pOwotCVhGU19RTV9VTkxPQ0soeGZzX0dxbSk7CisJeGZzX0dxbS0+cW1fbnJlZnMrKzsKKwltdXRleF91bmxvY2soJnhmc19HcW1fbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI3NywxMyArMjc1LDEyIEBACiAJICogRGVzdHJveSB0aGUgZW50aXJlIFhRTS4gSWYgc29tZWJvZHkgbW91bnRzIHdpdGggcXVvdGFvbiwgdGhpcydsbAogCSAqIGJlIHJlc3RhcnRlZC4KIAkgKi8KLQlYRlNfUU1fTE9DSyh4ZnNfR3FtKTsKLQlYRlNfUU1fUkVMRSh4ZnNfR3FtKTsKLQlpZiAoeGZzX0dxbS0+cW1fbnJlZnMgPT0gMCkgeworCW11dGV4X2xvY2soJnhmc19HcW1fbG9jayk7CisJaWYgKC0teGZzX0dxbS0+cW1fbnJlZnMgPT0gMCkgewogCQl4ZnNfcW1fZGVzdHJveSh4ZnNfR3FtKTsKIAkJeGZzX0dxbSA9IE5VTEw7CiAJfQotCVhGU19RTV9VTkxPQ0soeGZzX0dxbSk7CisJbXV0ZXhfdW5sb2NrKCZ4ZnNfR3FtX2xvY2spOwogfQogCiAvKgpAQCAtNTc3LDEwICs1NzQsMTAgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCEgeGZzX3FtX2RxaGFzaGxvY2tfbm93YWl0KGRxcCkpIHsKKwkJaWYgKCFtdXRleF90cnlsb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jaykpIHsKIAkJCW5yZWNsID0gWEZTX1FJX01QTFJFQ0xBSU1TKG1wKTsKIAkJCXhmc19xbV9tcGxpc3RfdW5sb2NrKG1wKTsKLQkJCVhGU19EUV9IQVNIX0xPQ0soZHFwLT5xX2hhc2gpOworCQkJbXV0ZXhfbG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spOwogCQkJeGZzX3FtX21wbGlzdF9sb2NrKG1wKTsKIAogCQkJLyoKQEAgLTU5MCw3ICs1ODcsNyBAQAogCQkJICogdGhpcyBwb2ludCwgYnV0IHNvbWVib2R5IG1pZ2h0IGJlIHRha2luZyB0aGluZ3Mgb2ZmLgogCQkJICovCiAJCQlpZiAobnJlY2wgIT0gWEZTX1FJX01QTFJFQ0xBSU1TKG1wKSkgewotCQkJCVhGU19EUV9IQVNIX1VOTE9DSyhkcXAtPnFfaGFzaCk7CisJCQkJbXV0ZXhfdW5sb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jayk7CiAJCQkJZ290byBhZ2FpbjsKIAkJCX0KIAkJfQpAQCAtNjMyLDcgKzYyOSw2IEBACiAJeGZzX2RxaWRfdAlpZCwKIAl1aW50CQl0eXBlLAogCXVpbnQJCWRvYWxsb2MsCi0JdWludAkJZG9sb2NrLAogCXhmc19kcXVvdF90CSp1ZHFoaW50LCAvKiBoaW50ICovCiAJeGZzX2RxdW90X3QJKipJT19pZHFwcCkKIHsKQEAgLTY0MSwxNiArNjM3LDE2IEBACiAKIAlBU1NFUlQoeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX0VYQ0wpKTsKIAllcnJvciA9IDA7CisKIAkvKgogCSAqIFNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgaXQgaW4gdGhlIGlub2RlIGl0c2VsZi4gSU9faWRxcHAgaXMKIAkgKiAmaV91ZHF1b3Qgb3IgJmlfZ2RxdW90LiBUaGlzIG1hZGUgdGhlIGNvZGUgbG9vayB3ZWlyZCwgYnV0CiAJICogbWFkZSB0aGUgbG9naWMgYSBsb3Qgc2ltcGxlci4KIAkgKi8KLQlpZiAoKGRxcCA9ICpJT19pZHFwcCkpIHsKLQkJaWYgKGRvbG9jaykKLQkJCXhmc19kcWxvY2soZHFwKTsKKwlkcXAgPSAqSU9faWRxcHA7CisJaWYgKGRxcCkgewogCQl4ZnNfZHF0cmFjZV9lbnRyeShkcXAsICJEUUFUVEFDSDogZm91bmQgaW4gaXAiKTsKLQkJZ290byBkb25lOworCQlyZXR1cm4gMDsKIAl9CiAKIAkvKgpAQCAtNjU5LDM4ICs2NTUsMzggQEAKIAkgKiBsb29rdXAgYnkgZHFpZCAoeGZzX3FtX2RxZ2V0KSBieSBjYWNoaW5nIGEgZ3JvdXAgZHF1b3QgaW5zaWRlCiAJICogdGhlIHVzZXIgZHF1b3QuCiAJICovCi0JQVNTRVJUKCF1ZHFoaW50IHx8IHR5cGUgPT0gWEZTX0RRX0dST1VQIHx8IHR5cGUgPT0gWEZTX0RRX1BST0opOwotCWlmICh1ZHFoaW50ICYmICFkb2xvY2spCisJaWYgKHVkcWhpbnQpIHsKKwkJQVNTRVJUKHR5cGUgPT0gWEZTX0RRX0dST1VQIHx8IHR5cGUgPT0gWEZTX0RRX1BST0opOwogCQl4ZnNfZHFsb2NrKHVkcWhpbnQpOwogCi0JLyoKLQkgKiBObyBuZWVkIHRvIHRha2UgZHFsb2NrIHRvIGxvb2sgYXQgdGhlIGlkLgotCSAqIFRoZSBJRCBjYW4ndCBjaGFuZ2UgdW50aWwgaXQgZ2V0cyByZWNsYWltZWQsIGFuZCBpdCB3b24ndAotCSAqIGJlIHJlY2xhaW1lZCBhcyBsb25nIGFzIHdlIGhhdmUgYSByZWYgZnJvbSBpbm9kZSBhbmQgd2UgaG9sZAotCSAqIHRoZSBpbG9jay4KLQkgKi8KLQlpZiAodWRxaGludCAmJgotCSAgICAoZHFwID0gdWRxaGludC0+cV9nZHF1b3QpICYmCi0JICAgIChiZTMyX3RvX2NwdShkcXAtPnFfY29yZS5kX2lkKSA9PSBpZCkpIHsKLQkJQVNTRVJUKFhGU19EUV9JU19MT0NLRUQodWRxaGludCkpOwotCQl4ZnNfZHFsb2NrKGRxcCk7Ci0JCVhGU19EUUhPTEQoZHFwKTsKLQkJQVNTRVJUKCpJT19pZHFwcCA9PSBOVUxMKTsKLQkJKklPX2lkcXBwID0gZHFwOwotCQlpZiAoIWRvbG9jaykgeworCQkvKgorCQkgKiBObyBuZWVkIHRvIHRha2UgZHFsb2NrIHRvIGxvb2sgYXQgdGhlIGlkLgorCQkgKgorCQkgKiBUaGUgSUQgY2FuJ3QgY2hhbmdlIHVudGlsIGl0IGdldHMgcmVjbGFpbWVkLCBhbmQgaXQgd29uJ3QKKwkJICogYmUgcmVjbGFpbWVkIGFzIGxvbmcgYXMgd2UgaGF2ZSBhIHJlZiBmcm9tIGlub2RlIGFuZCB3ZQorCQkgKiBob2xkIHRoZSBpbG9jay4KKwkJICovCisJCWRxcCA9IHVkcWhpbnQtPnFfZ2RxdW90OworCQlpZiAoZHFwICYmIGJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaWQpID09IGlkKSB7CisJCQl4ZnNfZHFsb2NrKGRxcCk7CisJCQlYRlNfRFFIT0xEKGRxcCk7CisJCQlBU1NFUlQoKklPX2lkcXBwID09IE5VTEwpOworCQkJKklPX2lkcXBwID0gZHFwOworCiAJCQl4ZnNfZHF1bmxvY2soZHFwKTsKIAkJCXhmc19kcXVubG9jayh1ZHFoaW50KTsKKwkJCXJldHVybiAwOwogCQl9Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JLyoKLQkgKiBXZSBjYW4ndCBob2xkIGEgZHF1b3QgbG9jayB3aGVuIHdlIGNhbGwgdGhlIGRxZ2V0IGNvZGUuCi0JICogV2UnbGwgZGVhZGxvY2sgaW4gbm8gdGltZSwgYmVjYXVzZSBvZiAobm90IGNvbmZvcm1pbmcgdG8pCi0JICogbG9jayBvcmRlcmluZyAtIHRoZSBpbm9kZWxvY2sgY29tZXMgYmVmb3JlIGFueSBkcXVvdCBsb2NrLAotCSAqIGFuZCB3ZSBtYXkgZHJvcCBhbmQgcmVhY3F1aXJlIHRoZSBpbG9jayBpbiB4ZnNfcW1fZHFnZXQoKS4KLQkgKi8KLQlpZiAodWRxaGludCkKKworCQkvKgorCQkgKiBXZSBjYW4ndCBob2xkIGEgZHF1b3QgbG9jayB3aGVuIHdlIGNhbGwgdGhlIGRxZ2V0IGNvZGUuCisJCSAqIFdlJ2xsIGRlYWRsb2NrIGluIG5vIHRpbWUsIGJlY2F1c2Ugb2YgKG5vdCBjb25mb3JtaW5nIHRvKQorCQkgKiBsb2NrIG9yZGVyaW5nIC0gdGhlIGlub2RlbG9jayBjb21lcyBiZWZvcmUgYW55IGRxdW90IGxvY2ssCisJCSAqIGFuZCB3ZSBtYXkgZHJvcCBhbmQgcmVhY3F1aXJlIHRoZSBpbG9jayBpbiB4ZnNfcW1fZHFnZXQoKS4KKwkJICovCiAJCXhmc19kcXVubG9jayh1ZHFoaW50KTsKKwl9CisKIAkvKgogCSAqIEZpbmQgdGhlIGRxdW90IGZyb20gc29tZXdoZXJlLiBUaGlzIGJ1bXBzIHRoZQogCSAqIHJlZmVyZW5jZSBjb3VudCBvZiBkcXVvdCBhbmQgcmV0dXJucyBpdCBsb2NrZWQuCkBAIC02OTgsNDggKzY5NCwxOSBAQAogCSAqIGRpc2sgYW5kIHdlIGRpZG4ndCBhc2sgaXQgdG8gYWxsb2NhdGU7CiAJICogRVNSQ0ggaWYgcXVvdGFzIGdvdCB0dXJuZWQgb2ZmIHN1ZGRlbmx5LgogCSAqLwotCWlmICgoZXJyb3IgPSB4ZnNfcW1fZHFnZXQoaXAtPmlfbW91bnQsIGlwLCBpZCwgdHlwZSwKLQkJCQkgZG9hbGxvY3xYRlNfUU1PUFRfRE9XQVJOLCAmZHFwKSkpIHsKLQkJaWYgKHVkcWhpbnQgJiYgZG9sb2NrKQotCQkJeGZzX2RxbG9jayh1ZHFoaW50KTsKLQkJZ290byBkb25lOwotCX0KKwllcnJvciA9IHhmc19xbV9kcWdldChpcC0+aV9tb3VudCwgaXAsIGlkLCB0eXBlLCBYRlNfUU1PUFRfRE9XQVJOLCAmZHFwKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAogCXhmc19kcXRyYWNlX2VudHJ5KGRxcCwgIkRRQVRUQUNIOiBmb3VuZCBieSBkcWdldCIpOworCiAJLyoKIAkgKiBkcWdldCBtYXkgaGF2ZSBkcm9wcGVkIGFuZCByZS1hY3F1aXJlZCB0aGUgaWxvY2ssIGJ1dCBpdCBndWFyYW50ZWVzCiAJICogdGhhdCB0aGUgZHF1b3QgcmV0dXJuZWQgaXMgdGhlIG9uZSB0aGF0IHNob3VsZCBnbyBpbiB0aGUgaW5vZGUuCiAJICovCiAJKklPX2lkcXBwID0gZHFwOwotCUFTU0VSVChkcXApOwotCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGRxcCkpOwotCWlmICghIGRvbG9jaykgewotCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQkJZ290byBkb25lOwotCX0KLQlpZiAoISB1ZHFoaW50KQotCQlnb3RvIGRvbmU7Ci0KLQlBU1NFUlQodWRxaGludCk7Ci0JQVNTRVJUKGRvbG9jayk7Ci0JQVNTRVJUKFhGU19EUV9JU19MT0NLRUQoZHFwKSk7Ci0JaWYgKCEgeGZzX3FtX2RxbG9ja19ub3dhaXQodWRxaGludCkpIHsKLQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCXhmc19kcWxvY2sodWRxaGludCk7Ci0JCXhmc19kcWxvY2soZHFwKTsKLQl9Ci0gICAgICBkb25lOgotI2lmZGVmIFFVT1RBREVCVUcKLQlpZiAodWRxaGludCkgewotCQlpZiAoZG9sb2NrKQotCQkJQVNTRVJUKFhGU19EUV9JU19MT0NLRUQodWRxaGludCkpOwotCX0KLQlpZiAoISBlcnJvcikgewotCQlpZiAoZG9sb2NrKQotCQkJQVNTRVJUKFhGU19EUV9JU19MT0NLRUQoZHFwKSk7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIGVycm9yOworCXhmc19kcXVubG9jayhkcXApOworCXJldHVybiAwOwogfQogCiAKQEAgLTc1NCwyNCArNzIxLDE1IEBACiBTVEFUSUMgdm9pZAogeGZzX3FtX2RxYXR0YWNoX2dyb3VwaGludCgKIAl4ZnNfZHF1b3RfdAkqdWRxLAotCXhmc19kcXVvdF90CSpnZHEsCi0JdWludAkJbG9ja2VkKQorCXhmc19kcXVvdF90CSpnZHEpCiB7CiAJeGZzX2RxdW90X3QJKnRtcDsKIAotI2lmZGVmIFFVT1RBREVCVUcKLQlpZiAobG9ja2VkKSB7Ci0JCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKHVkcSkpOwotCQlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChnZHEpKTsKLQl9Ci0jZW5kaWYKLQlpZiAoISBsb2NrZWQpCi0JCXhmc19kcWxvY2sodWRxKTsKKwl4ZnNfZHFsb2NrKHVkcSk7CiAKIAlpZiAoKHRtcCA9IHVkcS0+cV9nZHF1b3QpKSB7CiAJCWlmICh0bXAgPT0gZ2RxKSB7Ci0JCQlpZiAoISBsb2NrZWQpCi0JCQkJeGZzX2RxdW5sb2NrKHVkcSk7CisJCQl4ZnNfZHF1bmxvY2sodWRxKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC03ODEsOCArNzM5LDYgQEAKIAkJICogYmVjYXVzZSB0aGUgZnJlZWxpc3QgbG9jayBjb21lcyBiZWZvcmUgZHFsb2Nrcy4KIAkJICovCiAJCXhmc19kcXVubG9jayh1ZHEpOwotCQlpZiAobG9ja2VkKQotCQkJeGZzX2RxdW5sb2NrKGdkcSk7CiAJCS8qCiAJCSAqIHdlIHRvb2sgYSBoYXJkIHJlZmVyZW5jZSBvbmNlIHVwb24gYSB0aW1lIGluIGRxZ2V0LAogCQkgKiBzbyBnaXZlIGl0IGJhY2sgd2hlbiB0aGUgdWRxdW90IG5vIGxvbmdlciBwb2ludHMgYXQgaXQKQEAgLTc5NSw5ICs3NTEsNyBAQAogCiAJfSBlbHNlIHsKIAkJQVNTRVJUKFhGU19EUV9JU19MT0NLRUQodWRxKSk7Ci0JCWlmICghIGxvY2tlZCkgewotCQkJeGZzX2RxbG9jayhnZHEpOwotCQl9CisJCXhmc19kcWxvY2soZ2RxKTsKIAl9CiAKIAlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRCh1ZHEpKTsKQEAgLTgxMCwxMCArNzY0LDkgQEAKIAkJWEZTX0RRSE9MRChnZHEpOwogCQl1ZHEtPnFfZ2RxdW90ID0gZ2RxOwogCX0KLQlpZiAoISBsb2NrZWQpIHsKLQkJeGZzX2RxdW5sb2NrKGdkcSk7Ci0JCXhmc19kcXVubG9jayh1ZHEpOwotCX0KKworCXhmc19kcXVubG9jayhnZHEpOworCXhmc19kcXVubG9jayh1ZHEpOwogfQogCiAKQEAgLTgyMSw4ICs3NzQsNiBAQAogICogR2l2ZW4gYSBsb2NrZWQgaW5vZGUsIGF0dGFjaCBkcXVvdChzKSB0byBpdCwgdGFraW5nIFUvRy9QLVFVT1RBT04KICAqIGludG8gYWNjb3VudC4KICAqIElmIFhGU19RTU9QVF9EUUFMTE9DLCB0aGUgZHF1b3Qocykgd2lsbCBiZSBhbGxvY2F0ZWQgaWYgbmVlZGVkLgotICogSWYgWEZTX1FNT1BUX0RRTE9DSywgdGhlIGRxdW90KHMpIHdpbGwgYmUgcmV0dXJuZWQgbG9ja2VkLiBUaGlzIG9wdGlvbiBwcmV0dHkKLSAqIG11Y2ggbWFkZSB0aGlzIGNvZGUgYSBjb21wbGV0ZSBtZXNzLCBidXQgaXQgaGFzIGJlZW4gcHJldHR5IHVzZWZ1bC4KICAqIElmIFhGU19RTU9QVF9JTE9DS0VELCB0aGVuIGlub2RlIHNlbnQgaXMgYWxyZWFkeSBsb2NrZWQgRVhDTC4KICAqIElub2RlIG1heSBnZXQgdW5sb2NrZWQgYW5kIHJlbG9ja2VkIGluIGhlcmUsIGFuZCB0aGUgY2FsbGVyIG11c3QgZGVhbCB3aXRoCiAgKiB0aGUgY29uc2VxdWVuY2VzLgpAQCAtODUxLDcgKzgwMiw2IEBACiAJaWYgKFhGU19JU19VUVVPVEFfT04obXApKSB7CiAJCWVycm9yID0geGZzX3FtX2RxYXR0YWNoX29uZShpcCwgaXAtPmlfZC5kaV91aWQsIFhGU19EUV9VU0VSLAogCQkJCQkJZmxhZ3MgJiBYRlNfUU1PUFRfRFFBTExPQywKLQkJCQkJCWZsYWdzICYgWEZTX1FNT1BUX0RRTE9DSywKIAkJCQkJCU5VTEwsICZpcC0+aV91ZHF1b3QpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGRvbmU7CkBAIC04NjMsMTEgKzgxMyw5IEBACiAJCWVycm9yID0gWEZTX0lTX0dRVU9UQV9PTihtcCkgPwogCQkJeGZzX3FtX2RxYXR0YWNoX29uZShpcCwgaXAtPmlfZC5kaV9naWQsIFhGU19EUV9HUk9VUCwKIAkJCQkJCWZsYWdzICYgWEZTX1FNT1BUX0RRQUxMT0MsCi0JCQkJCQlmbGFncyAmIFhGU19RTU9QVF9EUUxPQ0ssCiAJCQkJCQlpcC0+aV91ZHF1b3QsICZpcC0+aV9nZHF1b3QpIDoKIAkJCXhmc19xbV9kcWF0dGFjaF9vbmUoaXAsIGlwLT5pX2QuZGlfcHJvamlkLCBYRlNfRFFfUFJPSiwKIAkJCQkJCWZsYWdzICYgWEZTX1FNT1BUX0RRQUxMT0MsCi0JCQkJCQlmbGFncyAmIFhGU19RTU9QVF9EUUxPQ0ssCiAJCQkJCQlpcC0+aV91ZHF1b3QsICZpcC0+aV9nZHF1b3QpOwogCQkvKgogCQkgKiBEb24ndCB3b3JyeSBhYm91dCB0aGUgdWRxdW90IHRoYXQgd2UgbWF5IGhhdmUKQEAgLTg5OCwyMiArODQ2LDEzIEBACiAJCS8qCiAJCSAqIEF0dGFjaCBpX2dkcXVvdCB0byB0aGUgZ2RxdW90IGhpbnQgaW5zaWRlIHRoZSBpX3VkcXVvdC4KIAkJICovCi0JCXhmc19xbV9kcWF0dGFjaF9ncm91cGhpbnQoaXAtPmlfdWRxdW90LCBpcC0+aV9nZHF1b3QsCi0JCQkJCSBmbGFncyAmIFhGU19RTU9QVF9EUUxPQ0spOworCQl4ZnNfcW1fZHFhdHRhY2hfZ3JvdXBoaW50KGlwLT5pX3VkcXVvdCwgaXAtPmlfZ2RxdW90KTsKIAl9CiAKICAgICAgIGRvbmU6CiAKICNpZmRlZiBRVU9UQURFQlVHCiAJaWYgKCEgZXJyb3IpIHsKLQkJaWYgKGlwLT5pX3VkcXVvdCkgewotCQkJaWYgKGZsYWdzICYgWEZTX1FNT1BUX0RRTE9DSykKLQkJCQlBU1NFUlQoWEZTX0RRX0lTX0xPQ0tFRChpcC0+aV91ZHF1b3QpKTsKLQkJfQotCQlpZiAoaXAtPmlfZ2RxdW90KSB7Ci0JCQlpZiAoZmxhZ3MgJiBYRlNfUU1PUFRfRFFMT0NLKQotCQkJCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGlwLT5pX2dkcXVvdCkpOwotCQl9CiAJCWlmIChYRlNfSVNfVVFVT1RBX09OKG1wKSkKIAkJCUFTU0VSVChpcC0+aV91ZHF1b3QpOwogCQlpZiAoWEZTX0lTX09RVU9UQV9PTihtcCkpCkBAIC0yMDg2LDcgKzIwMjUsNyBAQAogCQkgKiBhIGRxbG9va3VwIHByb2Nlc3MgdGhhdCBob2xkcyB0aGUgaGFzaGxvY2sgdGhhdCBpcwogCQkgKiB3YWl0aW5nIGZvciB0aGUgZnJlZWxpc3QgbG9jay4KIAkJICovCi0JCWlmICghIHhmc19xbV9kcWhhc2hsb2NrX25vd2FpdChkcXApKSB7CisJCWlmICghbXV0ZXhfdHJ5bG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spKSB7CiAJCQl4ZnNfZHFmdW5sb2NrKGRxcCk7CiAJCQl4ZnNfZHF1bmxvY2soZHFwKTsKIAkJCWRxcCA9IGRxcC0+ZHFfZmxuZXh0OwpAQCAtMjEwMyw3ICsyMDQyLDcgQEAKIAkJCS8qIFhYWCBwdXQgYSBzZW50aW5lbCBzbyB0aGF0IHdlIGNhbiBjb21lIGJhY2sgaGVyZSAqLwogCQkJeGZzX2RxZnVubG9jayhkcXApOwogCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQlYRlNfRFFfSEFTSF9VTkxPQ0soaGFzaCk7CisJCQltdXRleF91bmxvY2soJmhhc2gtPnFoX2xvY2spOwogCQkJeGZzX3FtX2ZyZWVsaXN0X3VubG9jayh4ZnNfR3FtKTsKIAkJCWlmICgrK3Jlc3RhcnRzID49IFhGU19RTV9SRUNMQUlNX01BWF9SRVNUQVJUUykKIAkJCQlyZXR1cm4gbnJlY2xhaW1lZDsKQEAgLTIxMjAsNyArMjA1OSw3IEBACiAJCVhRTV9IQVNITElTVF9SRU1PVkUoaGFzaCwgZHFwKTsKIAkJeGZzX2RxZnVubG9jayhkcXApOwogCQl4ZnNfcW1fbXBsaXN0X3VubG9jayhkcXAtPnFfbW91bnQpOwotCQlYRlNfRFFfSEFTSF9VTkxPQ0soaGFzaCk7CisJCW11dGV4X3VubG9jaygmaGFzaC0+cWhfbG9jayk7CiAKICBvZmZfZnJlZWxpc3Q6CiAJCVhRTV9GUkVFTElTVF9SRU1PVkUoZHFwKTsKQEAgLTIyNjIsNyArMjIwMSw3IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmICghIHhmc19xbV9kcWhhc2hsb2NrX25vd2FpdChkcXApKQorCQlpZiAoIW11dGV4X3RyeWxvY2soJmRxcC0+cV9oYXNoLT5xaF9sb2NrKSkKIAkJCWdvdG8gbXBsaXN0dW5sb2NrOwogCiAJCUFTU0VSVChkcXAtPnFfbnJlZnMgPT0gMCk7CkBAIC0yMjcxLDcgKzIyMTAsNyBAQAogCQlYUU1fSEFTSExJU1RfUkVNT1ZFKGRxcC0+cV9oYXNoLCBkcXApOwogCQlYUU1fRlJFRUxJU1RfUkVNT1ZFKGRxcCk7CiAJCWRxcG91dCA9IGRxcDsKLQkJWEZTX0RRX0hBU0hfVU5MT0NLKGRxcC0+cV9oYXNoKTsKKwkJbXV0ZXhfdW5sb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jayk7CiAgbXBsaXN0dW5sb2NrOgogCQl4ZnNfcW1fbXBsaXN0X3VubG9jayhkcXAtPnFfbW91bnQpOwogCQl4ZnNfZHFmdW5sb2NrKGRxcCk7CkBAIC0yNzc0LDM0ICsyNzEzLDMgQEAKIHsKIAl4ZnNfcW1fZnJlZWxpc3RfaW5zZXJ0KCh4ZnNfZnJsaXN0X3QgKilxbC0+cWhfcHJldiwgZHEpOwogfQotCi1TVEFUSUMgaW50Ci14ZnNfcW1fZHFoYXNobG9ja19ub3dhaXQoCi0JeGZzX2RxdW90X3QgKmRxcCkKLXsKLQlpbnQgbG9ja2VkOwotCi0JbG9ja2VkID0gbXV0ZXhfdHJ5bG9jaygmKChkcXApLT5xX2hhc2gtPnFoX2xvY2spKTsKLQlyZXR1cm4gbG9ja2VkOwotfQotCi1pbnQKLXhmc19xbV9mcmVlbGlzdF9sb2NrX25vd2FpdCgKLQl4ZnNfcW1fdCAqeHFtKQotewotCWludCBsb2NrZWQ7Ci0KLQlsb2NrZWQgPSBtdXRleF90cnlsb2NrKCYoeHFtLT5xbV9kcWZyZWVsaXN0LnFoX2xvY2spKTsKLQlyZXR1cm4gbG9ja2VkOwotfQotCi1TVEFUSUMgaW50Ci14ZnNfcW1fbXBsaXN0X25vd2FpdCgKLQl4ZnNfbW91bnRfdAkqbXApCi17Ci0JaW50IGxvY2tlZDsKLQotCUFTU0VSVChtcC0+bV9xdW90YWluZm8pOwotCWxvY2tlZCA9IG11dGV4X3RyeWxvY2soJihYRlNfUUlfTVBMTE9DSyhtcCkpKTsKLQlyZXR1cm4gbG9ja2VkOwotfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5oIGIvZnMveGZzL3F1b3RhL3hmc19xbS5oCmluZGV4IGRkZjA5MTYuLmEzNzE5NTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uaAorKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmgKQEAgLTI3LDcgKzI3LDcgQEAKIHN0cnVjdCB4ZnNfaW5vZGU7CiAKIGV4dGVybiB1aW50CQluZHF1b3Q7Ci1leHRlcm4gbXV0ZXhfdAkJeGZzX0dxbV9sb2NrOworZXh0ZXJuIHN0cnVjdCBtdXRleAl4ZnNfR3FtX2xvY2s7CiBleHRlcm4gc3RydWN0IHhmc19xbQkqeGZzX0dxbTsKIGV4dGVybiBrbWVtX3pvbmVfdAkqcW1fZHF6b25lOwogZXh0ZXJuIGttZW1fem9uZV90CSpxbV9kcXRyeHpvbmU7CkBAIC03OSw3ICs3OSw3IEBACiB0eXBlZGVmIHN0cnVjdCB4ZnNfZnJsaXN0IHsKICAgICAgICBzdHJ1Y3QgeGZzX2RxdW90ICpxaF9uZXh0OwogICAgICAgIHN0cnVjdCB4ZnNfZHF1b3QgKnFoX3ByZXY7Ci0gICAgICAgbXV0ZXhfdAkJIHFoX2xvY2s7CisgICAgICAgc3RydWN0IG11dGV4CSBxaF9sb2NrOwogICAgICAgIHVpbnQJCSBxaF92ZXJzaW9uOwogICAgICAgIHVpbnQJCSBxaF9uZWxlbXM7CiB9IHhmc19mcmxpc3RfdDsKQEAgLTExNSw3ICsxMTUsNyBAQAogCXhmc19xd2FybmNudF90CSBxaV9id2FybmxpbWl0OwkgLyogbGltaXQgZm9yIGJsa3Mgd2FybmluZ3MgKi8KIAl4ZnNfcXdhcm5jbnRfdAkgcWlfaXdhcm5saW1pdDsJIC8qIGxpbWl0IGZvciBpbm9kZXMgd2FybmluZ3MgKi8KIAl4ZnNfcXdhcm5jbnRfdAkgcWlfcnRid2FybmxpbWl0Oy8qIGxpbWl0IGZvciBydCBibGtzIHdhcm5pbmdzICovCi0JbXV0ZXhfdAkJIHFpX3F1b3Rhb2ZmbG9jazsvKiB0byBzZXJpYWxpemUgcXVvdGFvZmYgKi8KKwlzdHJ1Y3QgbXV0ZXgJIHFpX3F1b3Rhb2ZmbG9jazsvKiB0byBzZXJpYWxpemUgcXVvdGFvZmYgKi8KIAl4ZnNfZmlsYmxrc190CSBxaV9kcWNodW5rbGVuOwkgLyogIyBCQnMgaW4gYSBjaHVuayBvZiBkcXMgKi8KIAl1aW50CQkgcWlfZHFwZXJjaHVuazsJIC8qICMgb25kaXNrIGRxcyBpbiBhYm92ZSBjaHVuayAqLwogCXhmc19xY250X3QJIHFpX2JoYXJkbGltaXQ7CSAvKiBkZWZhdWx0IGRhdGEgYmxrIGhhcmQgbGltaXQgKi8KQEAgLTE1OCwxMSArMTU4LDYgQEAKICNkZWZpbmUgWEZTX1FNX0lXQVJOTElNSVQJNQogI2RlZmluZSBYRlNfUU1fUlRCV0FSTkxJTUlUCTUKIAotI2RlZmluZSBYRlNfUU1fTE9DSyh4cW0pCShtdXRleF9sb2NrKCZ4cW0jI19sb2NrKSkKLSNkZWZpbmUgWEZTX1FNX1VOTE9DSyh4cW0pCShtdXRleF91bmxvY2soJnhxbSMjX2xvY2spKQotI2RlZmluZSBYRlNfUU1fSE9MRCh4cW0pCSgoeHFtKS0+cW1fbnJlZnMrKykKLSNkZWZpbmUgWEZTX1FNX1JFTEUoeHFtKQkoKHhxbSktPnFtX25yZWZzLS0pCi0KIGV4dGVybiB2b2lkCQl4ZnNfcW1fZGVzdHJveV9xdW90YWluZm8oeGZzX21vdW50X3QgKik7CiBleHRlcm4gdm9pZAkJeGZzX3FtX21vdW50X3F1b3Rhcyh4ZnNfbW91bnRfdCAqKTsKIGV4dGVybiBpbnQJCXhmc19xbV9xdW90YWNoZWNrKHhmc19tb3VudF90ICopOwpAQCAtMTc4LDYgKzE3MywxNiBAQAogZXh0ZXJuIGludAkJeGZzX3FtX2RxcHVyZ2VfYWxsKHhmc19tb3VudF90ICosIHVpbnQpOwogZXh0ZXJuIHZvaWQJCXhmc19xbV9kcXJlbGVfYWxsX2lub2Rlcyh4ZnNfbW91bnRfdCAqLCB1aW50KTsKIAorLyogcXVvdGEgb3BzICovCitleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfdHJ1bmNfcWZpbGVzKHhmc19tb3VudF90ICosIHVpbnQpOworZXh0ZXJuIGludAkJeGZzX3FtX3NjYWxsX2dldHF1b3RhKHhmc19tb3VudF90ICosIHhmc19kcWlkX3QsIHVpbnQsCisJCQkJCWZzX2Rpc2tfcXVvdGFfdCAqKTsKK2V4dGVybiBpbnQJCXhmc19xbV9zY2FsbF9zZXRxbGltKHhmc19tb3VudF90ICosIHhmc19kcWlkX3QsIHVpbnQsCisJCQkJCWZzX2Rpc2tfcXVvdGFfdCAqKTsKK2V4dGVybiBpbnQJCXhmc19xbV9zY2FsbF9nZXRxc3RhdCh4ZnNfbW91bnRfdCAqLCBmc19xdW90YV9zdGF0X3QgKik7CitleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfcXVvdGFvbih4ZnNfbW91bnRfdCAqLCB1aW50KTsKK2V4dGVybiBpbnQJCXhmc19xbV9zY2FsbF9xdW90YW9mZih4ZnNfbW91bnRfdCAqLCB1aW50KTsKKwogLyogdm9wIHN0dWZmICovCiBleHRlcm4gaW50CQl4ZnNfcW1fdm9wX2RxYWxsb2MoeGZzX21vdW50X3QgKiwgeGZzX2lub2RlX3QgKiwKIAkJCQkJdWlkX3QsIGdpZF90LCBwcmlkX3QsIHVpbnQsCkBAIC0xOTQsMTEgKzE5OSw2IEBACiAvKiBsaXN0IHN0dWZmICovCiBleHRlcm4gdm9pZAkJeGZzX3FtX2ZyZWVsaXN0X2FwcGVuZCh4ZnNfZnJsaXN0X3QgKiwgeGZzX2RxdW90X3QgKik7CiBleHRlcm4gdm9pZAkJeGZzX3FtX2ZyZWVsaXN0X3VubGluayh4ZnNfZHF1b3RfdCAqKTsKLWV4dGVybiBpbnQJCXhmc19xbV9mcmVlbGlzdF9sb2NrX25vd2FpdCh4ZnNfcW1fdCAqKTsKLQotLyogc3lzdGVtIGNhbGwgaW50ZXJmYWNlICovCi1leHRlcm4gaW50CQl4ZnNfcW1fcXVvdGFjdGwoc3RydWN0IHhmc19tb3VudCAqLCBpbnQsIGludCwKLQkJCQl4ZnNfY2FkZHJfdCk7CiAKICNpZmRlZiBERUJVRwogZXh0ZXJuIGludAkJeGZzX3FtX2ludGVybmFscWNoZWNrKHhmc19tb3VudF90ICopOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKaW5kZXggYmM2YzVjYy4uNjMwMzdjNiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYworKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCkBAIC0yMzUsNyArMjM1LDYgQEAKIAkueGZzX2Rxdm9wY2hvd25yZXN2CT0geGZzX3FtX3ZvcF9jaG93bl9yZXNlcnZlLAogCS54ZnNfZHFzdGF0dmZzCQk9IHhmc19xbV9zdGF0dmZzLAogCS54ZnNfZHFzeW5jCQk9IHhmc19xbV9zeW5jLAotCS54ZnNfcXVvdGFjdGwJCT0geGZzX3FtX3F1b3RhY3RsLAogCS54ZnNfZHF0cnhvcHMJCT0gJnhmc190cmFuc19kcXVvdF9vcHMsCiB9OwogRVhQT1JUX1NZTUJPTCh4ZnNfcW1jb3JlX3hmcyk7CmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMgYi9mcy94ZnMvcXVvdGEveGZzX3FtX3N5c2NhbGxzLmMKaW5kZXggNjgxMzliMy4uYzdiNjZmNiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xbV9zeXNjYWxscy5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fc3lzY2FsbHMuYwpAQCAtNTcsMTM1ICs1NywxNiBAQAogIyBkZWZpbmUgcWRwcmludGsocywgYXJncy4uLikJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLVNUQVRJQyBpbnQJeGZzX3FtX3NjYWxsX3RydW5jX3FmaWxlcyh4ZnNfbW91bnRfdCAqLCB1aW50KTsKLVNUQVRJQyBpbnQJeGZzX3FtX3NjYWxsX2dldHF1b3RhKHhmc19tb3VudF90ICosIHhmc19kcWlkX3QsIHVpbnQsCi0JCQkJCWZzX2Rpc2tfcXVvdGFfdCAqKTsKLVNUQVRJQyBpbnQJeGZzX3FtX3NjYWxsX2dldHFzdGF0KHhmc19tb3VudF90ICosIGZzX3F1b3RhX3N0YXRfdCAqKTsKLVNUQVRJQyBpbnQJeGZzX3FtX3NjYWxsX3NldHFsaW0oeGZzX21vdW50X3QgKiwgeGZzX2RxaWRfdCwgdWludCwKLQkJCQkJZnNfZGlza19xdW90YV90ICopOwotU1RBVElDIGludAl4ZnNfcW1fc2NhbGxfcXVvdGFvbih4ZnNfbW91bnRfdCAqLCB1aW50KTsKLVNUQVRJQyBpbnQJeGZzX3FtX3NjYWxsX3F1b3Rhb2ZmKHhmc19tb3VudF90ICosIHVpbnQsIGJvb2xlYW5fdCk7CiBTVEFUSUMgaW50CXhmc19xbV9sb2dfcXVvdGFvZmYoeGZzX21vdW50X3QgKiwgeGZzX3FvZmZfbG9naXRlbV90ICoqLCB1aW50KTsKIFNUQVRJQyBpbnQJeGZzX3FtX2xvZ19xdW90YW9mZl9lbmQoeGZzX21vdW50X3QgKiwgeGZzX3FvZmZfbG9naXRlbV90ICosCiAJCQkJCXVpbnQpOwotU1RBVElDIHVpbnQJeGZzX3FtX2ltcG9ydF9mbGFncyh1aW50KTsKIFNUQVRJQyB1aW50CXhmc19xbV9leHBvcnRfZmxhZ3ModWludCk7Ci1TVEFUSUMgdWludAl4ZnNfcW1faW1wb3J0X3F0eXBlX2ZsYWdzKHVpbnQpOwogU1RBVElDIHVpbnQJeGZzX3FtX2V4cG9ydF9xdHlwZV9mbGFncyh1aW50KTsKIFNUQVRJQyB2b2lkCXhmc19xbV9leHBvcnRfZHF1b3QoeGZzX21vdW50X3QgKiwgeGZzX2Rpc2tfZHF1b3RfdCAqLAogCQkJCQlmc19kaXNrX3F1b3RhX3QgKik7CiAKIAogLyoKLSAqIFRoZSBtYWluIGRpc3RyaWJ1dGlvbiBzd2l0Y2ggb2YgYWxsIFhGUyBxdW90YWN0bCBzeXN0ZW0gY2FsbHMuCi0gKi8KLWludAoteGZzX3FtX3F1b3RhY3RsKAotCXhmc19tb3VudF90CSptcCwKLQlpbnQJCWNtZCwKLQlpbnQJCWlkLAotCXhmc19jYWRkcl90CWFkZHIpCi17Ci0JaW50CQllcnJvcjsKLQotCUFTU0VSVChhZGRyICE9IE5VTEwgfHwgY21kID09IFFfWFFVT1RBU1lOQyk7Ci0KLQkvKgotCSAqIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIHZhbGlkIGV2ZW4gd2hlbiBxdW90YW9mZi4KLQkgKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUV9YUVVPVEFSTToKLQkJLyoKLQkJICogVHJ1bmNhdGUgcXVvdGEgZmlsZXMuIHF1b3RhIG11c3QgYmUgb2ZmLgotCQkgKi8KLQkJaWYgKFhGU19JU19RVU9UQV9PTihtcCkpCi0JCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpCi0JCQlyZXR1cm4gWEZTX0VSUk9SKEVST0ZTKTsKLQkJcmV0dXJuICh4ZnNfcW1fc2NhbGxfdHJ1bmNfcWZpbGVzKG1wLAotCQkJICAgICAgIHhmc19xbV9pbXBvcnRfcXR5cGVfZmxhZ3MoKih1aW50ICopYWRkcikpKTsKLQotCWNhc2UgUV9YR0VUUVNUQVQ6Ci0JCS8qCi0JCSAqIEdldCBxdW90YSBzdGF0dXMgaW5mb3JtYXRpb24uCi0JCSAqLwotCQlyZXR1cm4gKHhmc19xbV9zY2FsbF9nZXRxc3RhdChtcCwgKGZzX3F1b3RhX3N0YXRfdCAqKWFkZHIpKTsKLQotCWNhc2UgUV9YUVVPVEFPTjoKLQkJLyoKLQkJICogUVVPVEFPTiAtIGVuYWJsaW5nIHF1b3RhIGVuZm9yY2VtZW50LgotCQkgKiBRdW90YSBhY2NvdW50aW5nIG11c3QgYmUgdHVybmVkIG9uIGF0IG1vdW50IHRpbWUuCi0JCSAqLwotCQlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKQotCQkJcmV0dXJuIFhGU19FUlJPUihFUk9GUyk7Ci0JCXJldHVybiAoeGZzX3FtX3NjYWxsX3F1b3Rhb24obXAsCi0JCQkJCSAgeGZzX3FtX2ltcG9ydF9mbGFncygqKHVpbnQgKilhZGRyKSkpOwotCi0JY2FzZSBRX1hRVU9UQU9GRjoKLQkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKLQkJCXJldHVybiBYRlNfRVJST1IoRVJPRlMpOwotCQlicmVhazsKLQotCWNhc2UgUV9YUVVPVEFTWU5DOgotCQlyZXR1cm4geGZzX3N5bmNfaW5vZGVzKG1wLCBTWU5DX0RFTFdSSSk7Ci0KLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlpZiAoISBYRlNfSVNfUVVPVEFfT04obXApKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVTUkNIKTsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBRX1hRVU9UQU9GRjoKLQkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKLQkJCXJldHVybiBYRlNfRVJST1IoRVJPRlMpOwotCQllcnJvciA9IHhmc19xbV9zY2FsbF9xdW90YW9mZihtcCwKLQkJCQkJICAgIHhmc19xbV9pbXBvcnRfZmxhZ3MoKih1aW50ICopYWRkciksCi0JCQkJCSAgICBCX0ZBTFNFKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFFfWEdFVFFVT1RBOgotCQllcnJvciA9IHhmc19xbV9zY2FsbF9nZXRxdW90YShtcCwgKHhmc19kcWlkX3QpaWQsIFhGU19EUV9VU0VSLAotCQkJCQkoZnNfZGlza19xdW90YV90ICopYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgUV9YR0VUR1FVT1RBOgotCQllcnJvciA9IHhmc19xbV9zY2FsbF9nZXRxdW90YShtcCwgKHhmc19kcWlkX3QpaWQsIFhGU19EUV9HUk9VUCwKLQkJCQkJKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOwotCQlicmVhazsKLQljYXNlIFFfWEdFVFBRVU9UQToKLQkJZXJyb3IgPSB4ZnNfcW1fc2NhbGxfZ2V0cXVvdGEobXAsICh4ZnNfZHFpZF90KWlkLCBYRlNfRFFfUFJPSiwKLQkJCQkJKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOwotCQlicmVhazsKLQotCWNhc2UgUV9YU0VUUUxJTToKLQkJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKLQkJCXJldHVybiBYRlNfRVJST1IoRVJPRlMpOwotCQllcnJvciA9IHhmc19xbV9zY2FsbF9zZXRxbGltKG1wLCAoeGZzX2RxaWRfdClpZCwgWEZTX0RRX1VTRVIsCi0JCQkJCSAgICAgKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOwotCQlicmVhazsKLQljYXNlIFFfWFNFVEdRTElNOgotCQlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKQotCQkJcmV0dXJuIFhGU19FUlJPUihFUk9GUyk7Ci0JCWVycm9yID0geGZzX3FtX3NjYWxsX3NldHFsaW0obXAsICh4ZnNfZHFpZF90KWlkLCBYRlNfRFFfR1JPVVAsCi0JCQkJCSAgICAgKGZzX2Rpc2tfcXVvdGFfdCAqKWFkZHIpOwotCQlicmVhazsKLQljYXNlIFFfWFNFVFBRTElNOgotCQlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKQotCQkJcmV0dXJuIFhGU19FUlJPUihFUk9GUyk7Ci0JCWVycm9yID0geGZzX3FtX3NjYWxsX3NldHFsaW0obXAsICh4ZnNfZHFpZF90KWlkLCBYRlNfRFFfUFJPSiwKLQkJCQkJICAgICAoZnNfZGlza19xdW90YV90ICopYWRkcik7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLS8qCiAgKiBUdXJuIG9mZiBxdW90YSBhY2NvdW50aW5nIGFuZC9vciBlbmZvcmNlbWVudCBmb3IgYWxsIHVkcXVvdHMgYW5kL29yCiAgKiBnZHF1b3RzLiBDYWxsZWQgb25seSBhdCB1bm1vdW50IHRpbWUuCiAgKgpAQCAtMTkzLDExICs3NCwxMCBAQAogICogaW5jb3JlLCBhbmQgbW9kaWZpZXMgdGhlIG9uZGlzayBkcXVvdCBkaXJlY3RseS4gVGhlcmVmb3JlLCBmb3IgZXhhbXBsZSwKICAqIGl0IGlzIGFuIGVycm9yIHRvIGNhbGwgdGhpcyB0d2ljZSwgd2l0aG91dCBwdXJnaW5nIHRoZSBjYWNoZS4KICAqLwotU1RBVElDIGludAoraW50CiB4ZnNfcW1fc2NhbGxfcXVvdGFvZmYoCiAJeGZzX21vdW50X3QJCSptcCwKLQl1aW50CQkJZmxhZ3MsCi0JYm9vbGVhbl90CQlmb3JjZSkKKwl1aW50CQkJZmxhZ3MpCiB7CiAJdWludAkJCWRxdHlwZTsKIAlpbnQJCQllcnJvcjsKQEAgLTIwNSw4ICs4NSw2IEBACiAJeGZzX3FvZmZfbG9naXRlbV90CSpxb2Zmc3RhcnQ7CiAJaW50CQkJbmN1bHByaXRzOwogCi0JaWYgKCFmb3JjZSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIFhGU19FUlJPUihFUEVSTSk7CiAJLyoKIAkgKiBObyBmaWxlIHN5c3RlbSBjYW4gaGF2ZSBxdW90YXMgZW5hYmxlZCBvbiBkaXNrIGJ1dCBub3QgaW4gY29yZS4KIAkgKiBOb3RlIHRoYXQgcXVvdGEgdXRpbGl0aWVzIChsaWtlIHF1b3Rhb2ZmKSBfZXhwZWN0XwpAQCAtMzc1LDcgKzI1Myw3IEBACiAJcmV0dXJuIChlcnJvcik7CiB9CiAKLVNUQVRJQyBpbnQKK2ludAogeGZzX3FtX3NjYWxsX3RydW5jX3FmaWxlcygKIAl4ZnNfbW91bnRfdAkqbXAsCiAJdWludAkJZmxhZ3MpCkBAIC0zODMsOCArMjYxLDYgQEAKIAlpbnQJCWVycm9yID0gMCwgZXJyb3IyID0gMDsKIAl4ZnNfaW5vZGVfdAkqcWlwOwogCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVQRVJNKTsKIAlpZiAoIXhmc19zYl92ZXJzaW9uX2hhc3F1b3RhKCZtcC0+bV9zYikgfHwgZmxhZ3MgPT0gMCkgewogCQlxZHByaW50aygicXRydW5jIGZsYWdzPSV4IG1fcWZsYWdzPSV4XG4iLCBmbGFncywgbXAtPm1fcWZsYWdzKTsKIAkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwpAQCAtNDE2LDcgKzI5Miw3IEBACiAgKiBlZmZlY3QgaW1tZWRpYXRlbHkuCiAgKiAoU3dpdGNoaW5nIG9uIHF1b3RhIGFjY291bnRpbmcgbXVzdCBiZSBkb25lIGF0IG1vdW50IHRpbWUuKQogICovCi1TVEFUSUMgaW50CitpbnQKIHhmc19xbV9zY2FsbF9xdW90YW9uKAogCXhmc19tb3VudF90CSptcCwKIAl1aW50CQlmbGFncykKQEAgLTQyNiw5ICszMDIsNiBAQAogCXVpbnQJCWFjY2ZsYWdzOwogCV9faW50NjRfdAlzYmZsYWdzOwogCi0JaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVQRVJNKTsKLQogCWZsYWdzICY9IChYRlNfQUxMX1FVT1RBX0FDQ1QgfCBYRlNfQUxMX1FVT1RBX0VORkQpOwogCS8qCiAJICogU3dpdGNoaW5nIG9uIHF1b3RhIGFjY291bnRpbmcgbXVzdCBiZSBkb25lIGF0IG1vdW50IHRpbWUuCkBAIC01MTcsNyArMzkwLDcgQEAKIC8qCiAgKiBSZXR1cm4gcXVvdGEgc3RhdHVzIGluZm9ybWF0aW9uLCBzdWNoIGFzIHVxdW90YS1vZmYsIGVuZm9yY2VtZW50cywgZXRjLgogICovCi1TVEFUSUMgaW50CitpbnQKIHhmc19xbV9zY2FsbF9nZXRxc3RhdCgKIAl4ZnNfbW91bnRfdAkqbXAsCiAJZnNfcXVvdGFfc3RhdF90ICpvdXQpCkBAIC01ODIsNyArNDU1LDcgQEAKIC8qCiAgKiBBZGp1c3QgcXVvdGEgbGltaXRzLCBhbmQgc3RhcnQvc3RvcCB0aW1lcnMgYWNjb3JkaW5nbHkuCiAgKi8KLVNUQVRJQyBpbnQKK2ludAogeGZzX3FtX3NjYWxsX3NldHFsaW0oCiAJeGZzX21vdW50X3QJCSptcCwKIAl4ZnNfZHFpZF90CQlpZCwKQEAgLTU5NSw5ICs0NjgsNiBAQAogCWludAkJCWVycm9yOwogCXhmc19xY250X3QJCWhhcmQsIHNvZnQ7CiAKLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiBYRlNfRVJST1IoRVBFUk0pOwotCiAJaWYgKChuZXdsaW0tPmRfZmllbGRtYXNrICYKIAkgICAgKEZTX0RRX0xJTUlUX01BU0t8RlNfRFFfVElNRVJfTUFTS3xGU19EUV9XQVJOU19NQVNLKSkgPT0gMCkKIAkJcmV0dXJuICgwKTsKQEAgLTc0Miw3ICs2MTIsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotU1RBVElDIGludAoraW50CiB4ZnNfcW1fc2NhbGxfZ2V0cXVvdGEoCiAJeGZzX21vdW50X3QJKm1wLAogCXhmc19kcWlkX3QJaWQsCkBAIC05MzUsMzAgKzgwNSw2IEBACiB9CiAKIFNUQVRJQyB1aW50Ci14ZnNfcW1faW1wb3J0X3F0eXBlX2ZsYWdzKAotCXVpbnQJCXVmbGFncykKLXsKLQl1aW50CQlvZmxhZ3MgPSAwOwotCi0JLyoKLQkgKiBDYW4ndCBiZSBtb3JlIHRoYW4gb25lLCBvciBub25lLgotCSAqLwotCWlmICgoKHVmbGFncyAmIChYRlNfR1JPVVBfUVVPVEEgfCBYRlNfVVNFUl9RVU9UQSkpID09Ci0JCQkoWEZTX0dST1VQX1FVT1RBIHwgWEZTX1VTRVJfUVVPVEEpKSB8fAotCSAgICAoKHVmbGFncyAmIChYRlNfR1JPVVBfUVVPVEEgfCBYRlNfUFJPSl9RVU9UQSkpID09Ci0JCQkoWEZTX0dST1VQX1FVT1RBIHwgWEZTX1BST0pfUVVPVEEpKSB8fAotCSAgICAoKHVmbGFncyAmIChYRlNfVVNFUl9RVU9UQSB8IFhGU19QUk9KX1FVT1RBKSkgPT0KLQkJCShYRlNfVVNFUl9RVU9UQSB8IFhGU19QUk9KX1FVT1RBKSkgfHwKLQkgICAgKCh1ZmxhZ3MgJiAoWEZTX0dST1VQX1FVT1RBfFhGU19VU0VSX1FVT1RBfFhGU19QUk9KX1FVT1RBKSkgPT0gMCkpCi0JCXJldHVybiAoMCk7Ci0KLQlvZmxhZ3MgfD0gKHVmbGFncyAmIFhGU19VU0VSX1FVT1RBKSA/IFhGU19EUV9VU0VSIDogMDsKLQlvZmxhZ3MgfD0gKHVmbGFncyAmIFhGU19QUk9KX1FVT1RBKSA/IFhGU19EUV9QUk9KIDogMDsKLQlvZmxhZ3MgfD0gKHVmbGFncyAmIFhGU19HUk9VUF9RVU9UQSkgPyBYRlNfRFFfR1JPVVA6IDA7Ci0JcmV0dXJuIG9mbGFnczsKLX0KLQotU1RBVElDIHVpbnQKIHhmc19xbV9leHBvcnRfcXR5cGVfZmxhZ3MoCiAJdWludCBmbGFncykKIHsKQEAgLTk3OSwyNiArODI1LDYgQEAKIH0KIAogU1RBVElDIHVpbnQKLXhmc19xbV9pbXBvcnRfZmxhZ3MoCi0JdWludCB1ZmxhZ3MpCi17Ci0JdWludCBmbGFncyA9IDA7Ci0KLQlpZiAodWZsYWdzICYgWEZTX1FVT1RBX1VEUV9BQ0NUKQotCQlmbGFncyB8PSBYRlNfVVFVT1RBX0FDQ1Q7Ci0JaWYgKHVmbGFncyAmIFhGU19RVU9UQV9QRFFfQUNDVCkKLQkJZmxhZ3MgfD0gWEZTX1BRVU9UQV9BQ0NUOwotCWlmICh1ZmxhZ3MgJiBYRlNfUVVPVEFfR0RRX0FDQ1QpCi0JCWZsYWdzIHw9IFhGU19HUVVPVEFfQUNDVDsKLQlpZiAodWZsYWdzICYgWEZTX1FVT1RBX1VEUV9FTkZEKQotCQlmbGFncyB8PSBYRlNfVVFVT1RBX0VORkQ7Ci0JaWYgKHVmbGFncyAmIChYRlNfUVVPVEFfUERRX0VORkR8WEZTX1FVT1RBX0dEUV9FTkZEKSkKLQkJZmxhZ3MgfD0gWEZTX09RVU9UQV9FTkZEOwotCXJldHVybiAoZmxhZ3MpOwotfQotCi0KLVNUQVRJQyB1aW50CiB4ZnNfcW1fZXhwb3J0X2ZsYWdzKAogCXVpbnQgZmxhZ3MpCiB7CkBAIC0xMTM0LDcgKzk2MCw3IEBACiB4ZnNfZHFoYXNoX3QgKnFtdGVzdF9nZHF0YWI7CiBpbnQJICAgICAgcW10ZXN0X2hhc2htYXNrOwogaW50CSAgICAgIHFtdGVzdF9uZmFpbHM7Ci1tdXRleF90CSAgICAgIHFjaGVja19sb2NrOworc3RydWN0IG11dGV4ICBxY2hlY2tfbG9jazsKIAogI2RlZmluZSBEUVRFU1RfSEFTSFZBTChtcCwgaWQpICgoKF9fcHN1bnNpZ25lZF90KShtcCkgKyBcCiAJCQkJIChfX3BzdW5zaWduZWRfdCkoaWQpKSAmIFwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcXVvdGFfcHJpdi5oIGIvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKaW5kZXggYzRmY2VhNi4uODI4NmIyOCAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKQEAgLTQyLDM0ICs0MiwyNCBAQAogI2RlZmluZSBYRlNfUUlfUU9GRkxPQ0sobXApCSgobXApLT5tX3F1b3RhaW5mby0+cWlfcXVvdGFvZmZsb2NrKQogCiAjZGVmaW5lIFhGU19RSV9NUExfTElTVChtcCkJKChtcCktPm1fcXVvdGFpbmZvLT5xaV9kcWxpc3QpCi0jZGVmaW5lIFhGU19RSV9NUExMT0NLKG1wKQkoKG1wKS0+bV9xdW90YWluZm8tPnFpX2RxbGlzdC5xaF9sb2NrKQogI2RlZmluZSBYRlNfUUlfTVBMTkVYVChtcCkJKChtcCktPm1fcXVvdGFpbmZvLT5xaV9kcWxpc3QucWhfbmV4dCkKICNkZWZpbmUgWEZTX1FJX01QTE5EUVVPVFMobXApCSgobXApLT5tX3F1b3RhaW5mby0+cWlfZHFsaXN0LnFoX25lbGVtcykKIAotI2RlZmluZSBYUU1MQ0soaCkJCQkobXV0ZXhfbG9jaygmKChoKS0+cWhfbG9jaykpKQotI2RlZmluZSBYUU1VTkxDSyhoKQkJCShtdXRleF91bmxvY2soJigoaCktPnFoX2xvY2spKSkKLSNpZmRlZiBERUJVRwotc3RydWN0IHhmc19kcWhhc2g7Ci1zdGF0aWMgaW5saW5lIGludCBYUU1JU0xDS0Qoc3RydWN0IHhmc19kcWhhc2ggKmgpCi17Ci0JaWYgKG11dGV4X3RyeWxvY2soJmgtPnFoX2xvY2spKSB7Ci0JCW11dGV4X3VubG9jaygmaC0+cWhfbG9jayk7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgorI2RlZmluZSB4ZnNfcW1fbXBsaXN0X2xvY2sobXApIFwKKwltdXRleF9sb2NrKCYoWEZTX1FJX01QTF9MSVNUKG1wKS5xaF9sb2NrKSkKKyNkZWZpbmUgeGZzX3FtX21wbGlzdF9ub3dhaXQobXApIFwKKwltdXRleF90cnlsb2NrKCYoWEZTX1FJX01QTF9MSVNUKG1wKS5xaF9sb2NrKSkKKyNkZWZpbmUgeGZzX3FtX21wbGlzdF91bmxvY2sobXApIFwKKwltdXRleF91bmxvY2soJihYRlNfUUlfTVBMX0xJU1QobXApLnFoX2xvY2spKQorI2RlZmluZSBYRlNfUU1fSVNfTVBMSVNUX0xPQ0tFRChtcCkgXAorCW11dGV4X2lzX2xvY2tlZCgmKFhGU19RSV9NUExfTElTVChtcCkucWhfbG9jaykpCiAKLSNkZWZpbmUgWEZTX0RRX0hBU0hfTE9DSyhoKQkJWFFNTENLKGgpCi0jZGVmaW5lIFhGU19EUV9IQVNIX1VOTE9DSyhoKQkJWFFNVU5MQ0soaCkKLSNkZWZpbmUgWEZTX0RRX0lTX0hBU0hfTE9DS0VEKGgpCVhRTUlTTENLRChoKQotCi0jZGVmaW5lIHhmc19xbV9tcGxpc3RfbG9jayhtcCkJCVhRTUxDSygmKFhGU19RSV9NUExfTElTVChtcCkpKQotI2RlZmluZSB4ZnNfcW1fbXBsaXN0X3VubG9jayhtcCkJWFFNVU5MQ0soJihYRlNfUUlfTVBMX0xJU1QobXApKSkKLSNkZWZpbmUgWEZTX1FNX0lTX01QTElTVF9MT0NLRUQobXApCVhRTUlTTENLRCgmKFhGU19RSV9NUExfTElTVChtcCkpKQotCi0jZGVmaW5lIHhmc19xbV9mcmVlbGlzdF9sb2NrKHFtKQlYUU1MQ0soJigocW0pLT5xbV9kcWZyZWVsaXN0KSkKLSNkZWZpbmUgeGZzX3FtX2ZyZWVsaXN0X3VubG9jayhxbSkJWFFNVU5MQ0soJigocW0pLT5xbV9kcWZyZWVsaXN0KSkKKyNkZWZpbmUgeGZzX3FtX2ZyZWVsaXN0X2xvY2socW0pIFwKKwltdXRleF9sb2NrKCYoKHFtKS0+cW1fZHFmcmVlbGlzdC5xaF9sb2NrKSkKKyNkZWZpbmUgeGZzX3FtX2ZyZWVsaXN0X2xvY2tfbm93YWl0KHFtKSBcCisJbXV0ZXhfdHJ5bG9jaygmKChxbSktPnFtX2RxZnJlZWxpc3QucWhfbG9jaykpCisjZGVmaW5lIHhmc19xbV9mcmVlbGlzdF91bmxvY2socW0pIFwKKwltdXRleF91bmxvY2soJigocW0pLT5xbV9kcWZyZWVsaXN0LnFoX2xvY2spKQogCiAvKgogICogSGFzaCBpbnRvIGEgYnVja2V0IGluIHRoZSBkcXVvdCBoYXNoIHRhYmxlLCBiYXNlZCBvbiA8bXAsIGlkPi4KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYyBiL2ZzL3hmcy9xdW90YS94ZnNfdHJhbnNfZHF1b3QuYwppbmRleCA5OTYxMTM4Li40NDcxNzNiIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3RyYW5zX2RxdW90LmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc190cmFuc19kcXVvdC5jCkBAIC02MjQsMTAgKzYyNCw5IEBACiAJeGZzX3FjbnRfdAkqcmVzYmNvdW50cDsKIAl4ZnNfcXVvdGFpbmZvX3QJKnEgPSBtcC0+bV9xdW90YWluZm87CiAKLQlpZiAoISAoZmxhZ3MgJiBYRlNfUU1PUFRfRFFMT0NLKSkgewotCQl4ZnNfZHFsb2NrKGRxcCk7Ci0JfQotCUFTU0VSVChYRlNfRFFfSVNfTE9DS0VEKGRxcCkpOworCisJeGZzX2RxbG9jayhkcXApOworCiAJaWYgKGZsYWdzICYgWEZTX1RSQU5TX0RRX1JFU19CTEtTKSB7CiAJCWhhcmRsaW1pdCA9IGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYmxrX2hhcmRsaW1pdCk7CiAJCWlmICghaGFyZGxpbWl0KQpAQCAtNzQwLDEwICs3MzksOCBAQAogCUFTU0VSVChkcXAtPnFfcmVzX2ljb3VudCA+PSBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2ljb3VudCkpOwogCiBlcnJvcl9yZXR1cm46Ci0JaWYgKCEgKGZsYWdzICYgWEZTX1FNT1BUX0RRTE9DSykpIHsKLQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JfQotCXJldHVybiAoZXJyb3IpOworCXhmc19kcXVubG9jayhkcXApOworCXJldHVybiBlcnJvcjsKIH0KIAogCkBAIC03NTMsOCArNzUwLDcgQEAKICAqIGdycC9wcmogcXVvdGFzIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGlzIGZvbGxvd3MgYSBib3RoLW9yLW5vdGhpbmcKICAqIGFwcHJvYWNoLgogICoKLSAqIGZsYWdzID0gWEZTX1FNT1BUX0RRTE9DSyBpbmRpY2F0ZSBpZiBkcXVvdChzKSBuZWVkIHRvIGJlIGxvY2tlZC4KLSAqCSAgIFhGU19RTU9QVF9GT1JDRV9SRVMgZXZhZGVzIGxpbWl0IGVuZm9yY2VtZW50LiBVc2VkIGJ5IGNob3duLgorICogZmxhZ3MgPSBYRlNfUU1PUFRfRk9SQ0VfUkVTIGV2YWRlcyBsaW1pdCBlbmZvcmNlbWVudC4gVXNlZCBieSBjaG93bi4KICAqCSAgIFhGU19RTU9QVF9FTk9TUEMgcmV0dXJucyBFTk9TUEMgbm90IEVEUVVPVC4gIFVzZWQgYnkgcHF1b3RhLgogICoJICAgWEZTX1RSQU5TX0RRX1JFU19CTEtTIHJlc2VydmVzIHJlZ3VsYXIgZGlzayBibG9ja3MKICAqCSAgIFhGU19UUkFOU19EUV9SRVNfUlRCTEtTIHJlc2VydmVzIHJlYWx0aW1lIGRpc2sgYmxvY2tzCmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5jIGIvZnMveGZzL3N1cHBvcnQvZGVidWcuYwppbmRleCBhZTU0ODI5Li4zZjM2MTBhIDEwMDY0NAotLS0gYS9mcy94ZnMvc3VwcG9ydC9kZWJ1Zy5jCisrKyBiL2ZzL3hmcy9zdXBwb3J0L2RlYnVnLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJ4ZnNfYWcuaCIKICNpbmNsdWRlICJ4ZnNfZG1hcGkuaCIKICNpbmNsdWRlICJ4ZnNfbW91bnQuaCIKKyNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKIAogc3RhdGljIGNoYXIJCW1lc3NhZ2VbMTAyNF07CS8qIGtlZXAgaXQgb2ZmIHRoZSBzdGFjayAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyh4ZnNfZXJyX2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3N1cHBvcnQvdXVpZC5jIGIvZnMveGZzL3N1cHBvcnQvdXVpZC5jCmluZGV4IDU4MzBjMDQuLmI4M2Y3NmIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zdXBwb3J0L3V1aWQuYworKysgYi9mcy94ZnMvc3VwcG9ydC91dWlkLmMKQEAgLTE3LDEwICsxNyw2IEBACiAgKi8KICNpbmNsdWRlIDx4ZnMuaD4KIAotc3RhdGljIERFRklORV9NVVRFWCh1dWlkX21vbml0b3IpOwotc3RhdGljIGludAl1dWlkX3RhYmxlX3NpemU7Ci1zdGF0aWMgdXVpZF90CSp1dWlkX3RhYmxlOwotCiAvKiBJUklYIGludGVycHJldGF0aW9uIG9mIGFuIHV1aWRfdCAqLwogdHlwZWRlZiBzdHJ1Y3QgewogCV9fYmUzMgl1dV90aW1lbG93OwpAQCAtNDYsMTIgKzQyLDYgQEAKIAlmc2lkWzFdID0gYmUzMl90b19jcHUodXVwLT51dV90aW1lbG93KTsKIH0KIAotdm9pZAotdXVpZF9jcmVhdGVfbmlsKHV1aWRfdCAqdXVpZCkKLXsKLQltZW1zZXQodXVpZCwgMCwgc2l6ZW9mKCp1dWlkKSk7Ci19Ci0KIGludAogdXVpZF9pc19uaWwodXVpZF90ICp1dWlkKQogewpAQCAtNzEsNjQgKzYxLDMgQEAKIHsKIAlyZXR1cm4gbWVtY21wKHV1aWQxLCB1dWlkMiwgc2l6ZW9mKHV1aWRfdCkpID8gMCA6IDE7CiB9Ci0KLS8qCi0gKiBHaXZlbiBhIDEyOC1iaXQgdXVpZCwgcmV0dXJuIGEgNjQtYml0IHZhbHVlIGJ5IGFkZGluZyB0aGUgdG9wIGFuZCBib3R0b20KLSAqIDY0LWJpdCB3b3Jkcy4gIE5PVEU6IFRoaXMgZnVuY3Rpb24gY2FuIG5vdCBiZSBjaGFuZ2VkIEVWRVIuICBBbHRob3VnaAotICogYnJhaW4tZGVhZCwgc29tZSBhcHBsaWNhdGlvbnMgZGVwZW5kIG9uIHRoaXMgNjQtYml0IHZhbHVlIHJlbWFpbmluZwotICogcGVyc2lzdGVudC4gIFNwZWNpZmljYWxseSwgRE1JIHZlbmRvcnMgc3RvcmUgdGhlIHZhbHVlIGFzIGEgcGVyc2lzdGVudAotICogZmlsZWhhbmRsZS4KLSAqLwotX191aW50NjRfdAotdXVpZF9oYXNoNjQodXVpZF90ICp1dWlkKQotewotCV9fdWludDY0X3QJKnNwID0gKF9fdWludDY0X3QgKil1dWlkOwotCi0JcmV0dXJuIHNwWzBdICsgc3BbMV07Ci19Ci0KLWludAotdXVpZF90YWJsZV9pbnNlcnQodXVpZF90ICp1dWlkKQotewotCWludAlpLCBob2xlOwotCi0JbXV0ZXhfbG9jaygmdXVpZF9tb25pdG9yKTsKLQlmb3IgKGkgPSAwLCBob2xlID0gLTE7IGkgPCB1dWlkX3RhYmxlX3NpemU7IGkrKykgewotCQlpZiAodXVpZF9pc19uaWwoJnV1aWRfdGFibGVbaV0pKSB7Ci0JCQlob2xlID0gaTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICh1dWlkX2VxdWFsKHV1aWQsICZ1dWlkX3RhYmxlW2ldKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZ1dWlkX21vbml0b3IpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0JaWYgKGhvbGUgPCAwKSB7Ci0JCXV1aWRfdGFibGUgPSBrbWVtX3JlYWxsb2ModXVpZF90YWJsZSwKLQkJCSh1dWlkX3RhYmxlX3NpemUgKyAxKSAqIHNpemVvZigqdXVpZF90YWJsZSksCi0JCQl1dWlkX3RhYmxlX3NpemUgICogc2l6ZW9mKCp1dWlkX3RhYmxlKSwKLQkJCUtNX1NMRUVQKTsKLQkJaG9sZSA9IHV1aWRfdGFibGVfc2l6ZSsrOwotCX0KLQl1dWlkX3RhYmxlW2hvbGVdID0gKnV1aWQ7Ci0JbXV0ZXhfdW5sb2NrKCZ1dWlkX21vbml0b3IpOwotCXJldHVybiAxOwotfQotCi12b2lkCi11dWlkX3RhYmxlX3JlbW92ZSh1dWlkX3QgKnV1aWQpCi17Ci0JaW50CWk7Ci0KLQltdXRleF9sb2NrKCZ1dWlkX21vbml0b3IpOwotCWZvciAoaSA9IDA7IGkgPCB1dWlkX3RhYmxlX3NpemU7IGkrKykgewotCQlpZiAodXVpZF9pc19uaWwoJnV1aWRfdGFibGVbaV0pKQotCQkJY29udGludWU7Ci0JCWlmICghdXVpZF9lcXVhbCh1dWlkLCAmdXVpZF90YWJsZVtpXSkpCi0JCQljb250aW51ZTsKLQkJdXVpZF9jcmVhdGVfbmlsKCZ1dWlkX3RhYmxlW2ldKTsKLQkJYnJlYWs7Ci0JfQotCUFTU0VSVChpIDwgdXVpZF90YWJsZV9zaXplKTsKLQltdXRleF91bmxvY2soJnV1aWRfbW9uaXRvcik7Ci19CmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC91dWlkLmggYi9mcy94ZnMvc3VwcG9ydC91dWlkLmgKaW5kZXggY2ZmNWI2MC4uNDczMmQ3MSAxMDA2NDQKLS0tIGEvZnMveGZzL3N1cHBvcnQvdXVpZC5oCisrKyBiL2ZzL3hmcy9zdXBwb3J0L3V1aWQuaApAQCAtMjIsMTIgKzIyLDggQEAKIAl1bnNpZ25lZCBjaGFyCV9fdV9iaXRzWzE2XTsKIH0gdXVpZF90OwogCi1leHRlcm4gdm9pZCB1dWlkX2NyZWF0ZV9uaWwodXVpZF90ICp1dWlkKTsKIGV4dGVybiBpbnQgdXVpZF9pc19uaWwodXVpZF90ICp1dWlkKTsKIGV4dGVybiBpbnQgdXVpZF9lcXVhbCh1dWlkX3QgKnV1aWQxLCB1dWlkX3QgKnV1aWQyKTsKIGV4dGVybiB2b2lkIHV1aWRfZ2V0bm9kZXVuaXEodXVpZF90ICp1dWlkLCBpbnQgZnNpZCBbMl0pOwotZXh0ZXJuIF9fdWludDY0X3QgdXVpZF9oYXNoNjQodXVpZF90ICp1dWlkKTsKLWV4dGVybiBpbnQgdXVpZF90YWJsZV9pbnNlcnQodXVpZF90ICp1dWlkKTsKLWV4dGVybiB2b2lkIHV1aWRfdGFibGVfcmVtb3ZlKHV1aWRfdCAqdXVpZCk7CiAKICNlbmRpZgkvKiBfX1hGU19TVVBQT1JUX1VVSURfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FnLmggYi9mcy94ZnMveGZzX2FnLmgKaW5kZXggMTQzZDYzZS4uYzg2NDFmNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hZy5oCisrKyBiL2ZzL3hmcy94ZnNfYWcuaApAQCAtMjIzLDggKzIyMyw4IEBACiAJCWJlMzJfdG9fY3B1KChhKS0+YWdmX2xldmVsc1tYRlNfQlROVU1fQ05UaV0pLCBtcCkpCiAjZGVmaW5lCVhGU19NSU5fRlJFRUxJU1RfUEFHKHBhZyxtcCkJXAogCShYRlNfTUlOX0ZSRUVMSVNUX1JBVygJCVwKLQkJKHVpbnRfdCkocGFnKS0+cGFnZl9sZXZlbHNbWEZTX0JUTlVNX0JOT2ldLCBcCi0JCSh1aW50X3QpKHBhZyktPnBhZ2ZfbGV2ZWxzW1hGU19CVE5VTV9DTlRpXSwgbXApKQorCQkodW5zaWduZWQgaW50KShwYWcpLT5wYWdmX2xldmVsc1tYRlNfQlROVU1fQk5PaV0sIFwKKwkJKHVuc2lnbmVkIGludCkocGFnKS0+cGFnZl9sZXZlbHNbWEZTX0JUTlVNX0NOVGldLCBtcCkpCiAKICNkZWZpbmUgWEZTX0FHQl9UT19GU0IobXAsYWdubyxhZ2JubykJXAogCSgoKHhmc19mc2Jsb2NrX3QpKGFnbm8pIDw8IChtcCktPm1fc2Iuc2JfYWdibGtsb2cpIHwgKGFnYm5vKSkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWxsb2MuYyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwppbmRleCAwMjhlNDRlLi4yY2Y5NDRlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FsbG9jLmMKKysrIGIvZnMveGZzL3hmc19hbGxvYy5jCkBAIC0xODcyLDYgKzE4NzIsMjUgQEAKIH0KIAogLyoKKyAqIEZpbmQgdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBleHRlbnQgaW4gYW4gQUcuCisgKi8KK3hmc19leHRsZW5fdAoreGZzX2FsbG9jX2xvbmdlc3RfZnJlZV9leHRlbnQoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19wZXJhZwkqcGFnKQoreworCXhmc19leHRsZW5fdAkJbmVlZCwgZGVsdGEgPSAwOworCisJbmVlZCA9IFhGU19NSU5fRlJFRUxJU1RfUEFHKHBhZywgbXApOworCWlmIChuZWVkID4gcGFnLT5wYWdmX2ZsY291bnQpCisJCWRlbHRhID0gbmVlZCAtIHBhZy0+cGFnZl9mbGNvdW50OworCisJaWYgKHBhZy0+cGFnZl9sb25nZXN0ID4gZGVsdGEpCisJCXJldHVybiBwYWctPnBhZ2ZfbG9uZ2VzdCAtIGRlbHRhOworCXJldHVybiBwYWctPnBhZ2ZfZmxjb3VudCA+IDAgfHwgcGFnLT5wYWdmX2xvbmdlc3QgPiAwOworfQorCisvKgogICogRGVjaWRlIHdoZXRoZXIgdG8gdXNlIHRoaXMgYWxsb2NhdGlvbiBncm91cCBmb3IgdGhpcyBhbGxvY2F0aW9uLgogICogSWYgc28sIGZpeCB1cCB0aGUgYnRyZWUgZnJlZWxpc3QncyBzaXplLgogICovCkBAIC0xOTIzLDE1ICsxOTQyLDEyIEBACiAJfQogCiAJaWYgKCEoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19GUkVFSU5HKSkgewotCQluZWVkID0gWEZTX01JTl9GUkVFTElTVF9QQUcocGFnLCBtcCk7Ci0JCWRlbHRhID0gbmVlZCA+IHBhZy0+cGFnZl9mbGNvdW50ID8gbmVlZCAtIHBhZy0+cGFnZl9mbGNvdW50IDogMDsKIAkJLyoKIAkJICogSWYgaXQgbG9va3MgbGlrZSB0aGVyZSBpc24ndCBhIGxvbmcgZW5vdWdoIGV4dGVudCwgb3IgZW5vdWdoCiAJCSAqIHRvdGFsIGJsb2NrcywgcmVqZWN0IGl0LgogCQkgKi8KLQkJbG9uZ2VzdCA9IChwYWctPnBhZ2ZfbG9uZ2VzdCA+IGRlbHRhKSA/Ci0JCQkocGFnLT5wYWdmX2xvbmdlc3QgLSBkZWx0YSkgOgotCQkJKHBhZy0+cGFnZl9mbGNvdW50ID4gMCB8fCBwYWctPnBhZ2ZfbG9uZ2VzdCA+IDApOworCQluZWVkID0gWEZTX01JTl9GUkVFTElTVF9QQUcocGFnLCBtcCk7CisJCWxvbmdlc3QgPSB4ZnNfYWxsb2NfbG9uZ2VzdF9mcmVlX2V4dGVudChtcCwgcGFnKTsKIAkJaWYgKChhcmdzLT5taW5sZW4gKyBhcmdzLT5hbGlnbm1lbnQgKyBhcmdzLT5taW5hbGlnbnNsb3AgLSAxKSA+CiAJCQkJbG9uZ2VzdCB8fAogCQkgICAgKChpbnQpKHBhZy0+cGFnZl9mcmVlYmxrcyArIHBhZy0+cGFnZl9mbGNvdW50IC0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWxsb2MuaCBiL2ZzL3hmcy94ZnNfYWxsb2MuaAppbmRleCA1ODgxNzI3Li5lNzA0Y2FlZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5oCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuaApAQCAtMTAwLDYgKzEwMCwxMiBAQAogI2RlZmluZSBYRlNfQUxMT0NfVVNFUkRBVEEJCTEJLyogYWxsb2NhdGlvbiBpcyBmb3IgdXNlciBkYXRhKi8KICNkZWZpbmUgWEZTX0FMTE9DX0lOSVRJQUxfVVNFUl9EQVRBCTIJLyogc3BlY2lhbCBjYXNlIHN0YXJ0IG9mIGZpbGUgKi8KIAorLyoKKyAqIEZpbmQgdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBleHRlbnQgaW4gYW4gQUcuCisgKi8KK3hmc19leHRsZW5fdAoreGZzX2FsbG9jX2xvbmdlc3RfZnJlZV9leHRlbnQoc3RydWN0IHhmc19tb3VudCAqbXAsCisJCXN0cnVjdCB4ZnNfcGVyYWcgKnBhZyk7CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMgYi9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCmluZGV4IDZjMzIzZjguLmFmZGM4OTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKKysrIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuYwpAQCAtMTU1LDcgKzE1NSw4IEBACiAJCSAqIG1pbmltdW0gb2Zmc2V0IG9ubHkgbmVlZHMgdG8gYmUgdGhlIHNwYWNlIHJlcXVpcmVkIGZvciAKIAkJICogdGhlIGJ0cmVlIHJvb3QuCiAJCSAqLyAKLQkJaWYgKCFkcC0+aV9kLmRpX2ZvcmtvZmYgJiYgZHAtPmlfZGYuaWZfYnl0ZXMgPiBtcC0+bV9hdHRyb2Zmc2V0KQorCQlpZiAoIWRwLT5pX2QuZGlfZm9ya29mZiAmJiBkcC0+aV9kZi5pZl9ieXRlcyA+CisJCSAgICB4ZnNfZGVmYXVsdF9hdHRyb2Zmc2V0KGRwKSkKIAkJCWRzaXplID0gWEZTX0JNRFJfU1BBQ0VfQ0FMQyhNSU5EQlRQVFJTKTsKIAkJYnJlYWs7CiAJCQpAQCAtMjk4LDYgKzI5OSwyNiBAQAogfQogCiAvKgorICogQWZ0ZXIgdGhlIGxhc3QgYXR0cmlidXRlIGlzIHJlbW92ZWQgcmV2ZXJ0IHRvIG9yaWdpbmFsIGlub2RlIGZvcm1hdCwKKyAqIG1ha2luZyBhbGwgbGl0ZXJhbCBhcmVhIGF2YWlsYWJsZSB0byB0aGUgZGF0YSBmb3JrIG9uY2UgbW9yZS4KKyAqLworU1RBVElDIHZvaWQKK3hmc19hdHRyX2ZvcmtfcmVzZXQoCisJc3RydWN0IHhmc19pbm9kZQkqaXAsCisJc3RydWN0IHhmc190cmFucwkqdHApCit7CisJeGZzX2lkZXN0cm95X2ZvcmsoaXAsIFhGU19BVFRSX0ZPUkspOworCWlwLT5pX2QuZGlfZm9ya29mZiA9IDA7CisJaXAtPmlfZC5kaV9hZm9ybWF0ID0gWEZTX0RJTk9ERV9GTVRfRVhURU5UUzsKKworCUFTU0VSVChpcC0+aV9kLmRpX2FuZXh0ZW50cyA9PSAwKTsKKwlBU1NFUlQoaXAtPmlfYWZwID09IE5VTEwpOworCisJaXAtPmlfZGYuaWZfZXh0X21heCA9IFhGU19JRk9SS19EU0laRShpcCkgLyBzaXplb2YoeGZzX2JtYnRfcmVjX3QpOworCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKK30KKworLyoKICAqIFJlbW92ZSBhbiBhdHRyaWJ1dGUgZnJvbSB0aGUgc2hvcnRmb3JtIGF0dHJpYnV0ZSBsaXN0IHN0cnVjdHVyZS4KICAqLwogaW50CkBAIC0zNDQsMjIgKzM2NSwxMCBAQAogCSAqLwogCXRvdHNpemUgLT0gc2l6ZTsKIAlpZiAodG90c2l6ZSA9PSBzaXplb2YoeGZzX2F0dHJfc2ZfaGRyX3QpICYmCi0JCQkJIShhcmdzLT5vcF9mbGFncyAmIFhGU19EQV9PUF9BREROQU1FKSAmJgotCQkJCShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9BVFRSMikgJiYKLQkJCQkoZHAtPmlfZC5kaV9mb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfQlRSRUUpKSB7Ci0JCS8qCi0JCSAqIExhc3QgYXR0cmlidXRlIG5vdyByZW1vdmVkLCByZXZlcnQgdG8gb3JpZ2luYWwKLQkJICogaW5vZGUgZm9ybWF0IG1ha2luZyBhbGwgbGl0ZXJhbCBhcmVhIGF2YWlsYWJsZQotCQkgKiB0byB0aGUgZGF0YSBmb3JrIG9uY2UgbW9yZS4KLQkJICovCi0JCXhmc19pZGVzdHJveV9mb3JrKGRwLCBYRlNfQVRUUl9GT1JLKTsKLQkJZHAtPmlfZC5kaV9mb3Jrb2ZmID0gMDsKLQkJZHAtPmlfZC5kaV9hZm9ybWF0ID0gWEZTX0RJTk9ERV9GTVRfRVhURU5UUzsKLQkJQVNTRVJUKGRwLT5pX2QuZGlfYW5leHRlbnRzID09IDApOwotCQlBU1NFUlQoZHAtPmlfYWZwID09IE5VTEwpOwotCQlkcC0+aV9kZi5pZl9leHRfbWF4ID0KLQkJCVhGU19JRk9SS19EU0laRShkcCkgLyAodWludClzaXplb2YoeGZzX2JtYnRfcmVjX3QpOwotCQl4ZnNfdHJhbnNfbG9nX2lub2RlKGFyZ3MtPnRyYW5zLCBkcCwgWEZTX0lMT0dfQ09SRSk7CisJICAgIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9BVFRSMikgJiYKKwkgICAgKGRwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0JUUkVFKSAmJgorCSAgICAhKGFyZ3MtPm9wX2ZsYWdzICYgWEZTX0RBX09QX0FERE5BTUUpKSB7CisJCXhmc19hdHRyX2ZvcmtfcmVzZXQoZHAsIGFyZ3MtPnRyYW5zKTsKIAl9IGVsc2UgewogCQl4ZnNfaWRhdGFfcmVhbGxvYyhkcCwgLXNpemUsIFhGU19BVFRSX0ZPUkspOwogCQlkcC0+aV9kLmRpX2ZvcmtvZmYgPSB4ZnNfYXR0cl9zaG9ydGZvcm1fYnl0ZXNmaXQoZHAsIHRvdHNpemUpOwpAQCAtNzg2LDIwICs3OTUsNyBAQAogCWlmIChmb3Jrb2ZmID09IC0xKSB7CiAJCUFTU0VSVChkcC0+aV9tb3VudC0+bV9mbGFncyAmIFhGU19NT1VOVF9BVFRSMik7CiAJCUFTU0VSVChkcC0+aV9kLmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9CVFJFRSk7Ci0KLQkJLyoKLQkJICogTGFzdCBhdHRyaWJ1dGUgd2FzIHJlbW92ZWQsIHJldmVydCB0byBvcmlnaW5hbAotCQkgKiBpbm9kZSBmb3JtYXQgbWFraW5nIGFsbCBsaXRlcmFsIGFyZWEgYXZhaWxhYmxlCi0JCSAqIHRvIHRoZSBkYXRhIGZvcmsgb25jZSBtb3JlLgotCQkgKi8KLQkJeGZzX2lkZXN0cm95X2ZvcmsoZHAsIFhGU19BVFRSX0ZPUkspOwotCQlkcC0+aV9kLmRpX2ZvcmtvZmYgPSAwOwotCQlkcC0+aV9kLmRpX2Fmb3JtYXQgPSBYRlNfRElOT0RFX0ZNVF9FWFRFTlRTOwotCQlBU1NFUlQoZHAtPmlfZC5kaV9hbmV4dGVudHMgPT0gMCk7Ci0JCUFTU0VSVChkcC0+aV9hZnAgPT0gTlVMTCk7Ci0JCWRwLT5pX2RmLmlmX2V4dF9tYXggPQotCQkJWEZTX0lGT1JLX0RTSVpFKGRwKSAvICh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7Ci0JCXhmc190cmFuc19sb2dfaW5vZGUoYXJncy0+dHJhbnMsIGRwLCBYRlNfSUxPR19DT1JFKTsKKwkJeGZzX2F0dHJfZm9ya19yZXNldChkcCwgYXJncy0+dHJhbnMpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcC5jIGIvZnMveGZzL3hmc19ibWFwLmMKaW5kZXggYzg1MmNkNi4uM2E2ZWQ0MiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwLmMKKysrIGIvZnMveGZzL3hmc19ibWFwLmMKQEAgLTI0NzksNyArMjQ3OSw3IEBACiAJZmJfYWdubyA9IG51bGxmYiA/IE5VTExBR05VTUJFUiA6IFhGU19GU0JfVE9fQUdOTyhtcCwgYXAtPmZpcnN0YmxvY2spOwogCS8qCiAJICogSWYgYWxsb2NhdGluZyBhdCBlb2YsIGFuZCB0aGVyZSdzIGEgcHJldmlvdXMgcmVhbCBibG9jaywKLQkgKiB0cnkgdG8gdXNlIGl0J3MgbGFzdCBibG9jayBhcyBvdXIgc3RhcnRpbmcgcG9pbnQuCisJICogdHJ5IHRvIHVzZSBpdHMgbGFzdCBibG9jayBhcyBvdXIgc3RhcnRpbmcgcG9pbnQuCiAJICovCiAJaWYgKGFwLT5lb2YgJiYgYXAtPnByZXZwLT5icl9zdGFydG9mZiAhPSBOVUxMRklMRU9GRiAmJgogCSAgICAhaXNudWxsc3RhcnRibG9jayhhcC0+cHJldnAtPmJyX3N0YXJ0YmxvY2spICYmCkBAIC0yNzEyLDkgKzI3MTIsNiBAQAogCXhmc19hZ251bWJlcl90CXN0YXJ0YWc7CiAJeGZzX2FsbG9jX2FyZ190CWFyZ3M7CiAJeGZzX2V4dGxlbl90CWJsZW47Ci0JeGZzX2V4dGxlbl90CWRlbHRhOwotCXhmc19leHRsZW5fdAlsb25nZXN0OwotCXhmc19leHRsZW5fdAluZWVkOwogCXhmc19leHRsZW5fdAluZXh0bWlubGVuID0gMDsKIAl4ZnNfcGVyYWdfdAkqcGFnOwogCWludAkJbnVsbGZiOwkJLyogdHJ1ZSBpZiBhcC0+Zmlyc3RibG9jayBpc24ndCBzZXQgKi8KQEAgLTI3OTYsMTMgKzI3OTMsOCBAQAogCQkJICogU2VlIHhmc19hbGxvY19maXhfZnJlZWxpc3QuLi4KIAkJCSAqLwogCQkJaWYgKHBhZy0+cGFnZl9pbml0KSB7Ci0JCQkJbmVlZCA9IFhGU19NSU5fRlJFRUxJU1RfUEFHKHBhZywgbXApOwotCQkJCWRlbHRhID0gbmVlZCA+IHBhZy0+cGFnZl9mbGNvdW50ID8KLQkJCQkJbmVlZCAtIHBhZy0+cGFnZl9mbGNvdW50IDogMDsKLQkJCQlsb25nZXN0ID0gKHBhZy0+cGFnZl9sb25nZXN0ID4gZGVsdGEpID8KLQkJCQkJKHBhZy0+cGFnZl9sb25nZXN0IC0gZGVsdGEpIDoKLQkJCQkJKHBhZy0+cGFnZl9mbGNvdW50ID4gMCB8fAotCQkJCQkgcGFnLT5wYWdmX2xvbmdlc3QgPiAwKTsKKwkJCQl4ZnNfZXh0bGVuX3QJbG9uZ2VzdDsKKwkJCQlsb25nZXN0ID0geGZzX2FsbG9jX2xvbmdlc3RfZnJlZV9leHRlbnQobXAsIHBhZyk7CiAJCQkJaWYgKGJsZW4gPCBsb25nZXN0KQogCQkJCQlibGVuID0gbG9uZ2VzdDsKIAkJCX0gZWxzZQpAQCAtMzU3Nyw2ICszNTY5LDI3IEBACiB9CiAKIC8qCisgKiBDYWxjdWxhdGUgdGhlIGRlZmF1bHQgYXR0cmlidXRlIGZvcmsgb2Zmc2V0IGZvciBuZXdseSBjcmVhdGVkIGlub2Rlcy4KKyAqLwordWludAoreGZzX2RlZmF1bHRfYXR0cm9mZnNldCgKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCkKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OworCXVpbnQJCQlvZmZzZXQ7CisKKwlpZiAobXAtPm1fc2Iuc2JfaW5vZGVzaXplID09IDI1NikgeworCQlvZmZzZXQgPSBYRlNfTElUSU5PKG1wKSAtCisJCQkJWEZTX0JNRFJfU1BBQ0VfQ0FMQyhNSU5BQlRQVFJTKTsKKwl9IGVsc2UgeworCQlvZmZzZXQgPSBYRlNfQk1EUl9TUEFDRV9DQUxDKDYgKiBNSU5BQlRQVFJTKTsKKwl9CisKKwlBU1NFUlQob2Zmc2V0IDwgWEZTX0xJVElOTyhtcCkpOworCXJldHVybiBvZmZzZXQ7Cit9CisKKy8qCiAgKiBIZWxwZXIgcm91dGluZSB0byByZXNldCBpbm9kZSBkaV9mb3Jrb2ZmIGZpZWxkIHdoZW4gc3dpdGNoaW5nCiAgKiBhdHRyaWJ1dGUgZm9yayBmcm9tIGxvY2FsIHRvIGV4dGVudCBmb3JtYXQgLSB3ZSByZXNldCBpdCB3aGVyZQogICogcG9zc2libGUgdG8gbWFrZSBzcGFjZSBhdmFpbGFibGUgZm9yIGlubGluZSBkYXRhIGZvcmsgZXh0ZW50cy4KQEAgLTM1ODgsMTUgKzM2MDEsMTggQEAKIAlpbnQJCXdoaWNoZm9yaykKIHsKIAlpZiAod2hpY2hmb3JrID09IFhGU19BVFRSX0ZPUksgJiYKLQkgICAgKGlwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0RFVikgJiYKLQkgICAgKGlwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX1VVSUQpICYmCi0JICAgIChpcC0+aV9kLmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9CVFJFRSkgJiYKLQkgICAgKChtcC0+bV9hdHRyb2Zmc2V0ID4+IDMpID4gaXAtPmlfZC5kaV9mb3Jrb2ZmKSkgewotCQlpcC0+aV9kLmRpX2ZvcmtvZmYgPSBtcC0+bV9hdHRyb2Zmc2V0ID4+IDM7Ci0JCWlwLT5pX2RmLmlmX2V4dF9tYXggPSBYRlNfSUZPUktfRFNJWkUoaXApIC8KLQkJCQkJKHVpbnQpc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKLQkJaXAtPmlfYWZwLT5pZl9leHRfbWF4ID0gWEZTX0lGT1JLX0FTSVpFKGlwKSAvCi0JCQkJCSh1aW50KXNpemVvZih4ZnNfYm1idF9yZWNfdCk7CisJICAgIGlwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0RFViAmJgorCSAgICBpcC0+aV9kLmRpX2Zvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9VVUlEICYmCisJICAgIGlwLT5pX2QuZGlfZm9ybWF0ICE9IFhGU19ESU5PREVfRk1UX0JUUkVFKSB7CisJCXVpbnQJZGZsX2ZvcmtvZmYgPSB4ZnNfZGVmYXVsdF9hdHRyb2Zmc2V0KGlwKSA+PiAzOworCisJCWlmIChkZmxfZm9ya29mZiA+IGlwLT5pX2QuZGlfZm9ya29mZikgeworCQkJaXAtPmlfZC5kaV9mb3Jrb2ZmID0gZGZsX2ZvcmtvZmY7CisJCQlpcC0+aV9kZi5pZl9leHRfbWF4ID0KKwkJCQlYRlNfSUZPUktfRFNJWkUoaXApIC8gc2l6ZW9mKHhmc19ibWJ0X3JlY190KTsKKwkJCWlwLT5pX2FmcC0+aWZfZXh0X21heCA9CisJCQkJWEZTX0lGT1JLX0FTSVpFKGlwKSAvIHNpemVvZih4ZnNfYm1idF9yZWNfdCk7CisJCX0KIAl9CiB9CiAKQEAgLTQwNjUsNyArNDA4MSw3IEBACiAJY2FzZSBYRlNfRElOT0RFX0ZNVF9CVFJFRToKIAkJaXAtPmlfZC5kaV9mb3Jrb2ZmID0geGZzX2F0dHJfc2hvcnRmb3JtX2J5dGVzZml0KGlwLCBzaXplKTsKIAkJaWYgKCFpcC0+aV9kLmRpX2ZvcmtvZmYpCi0JCQlpcC0+aV9kLmRpX2ZvcmtvZmYgPSBtcC0+bV9hdHRyb2Zmc2V0ID4+IDM7CisJCQlpcC0+aV9kLmRpX2ZvcmtvZmYgPSB4ZnNfZGVmYXVsdF9hdHRyb2Zmc2V0KGlwKSA+PiAzOwogCQllbHNlIGlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9BVFRSMikKIAkJCXZlcnNpb24gPSAyOwogCQlicmVhazsKQEAgLTQyMTIsMTIgKzQyMjgsMTIgQEAKIAkgKiAoYSBzaWduZWQgMTYtYml0IG51bWJlciwgeGZzX2FleHRudW1fdCkuCiAJICoKIAkgKiBOb3RlIHRoYXQgd2UgY2FuIG5vIGxvbmdlciBhc3N1bWUgdGhhdCBpZiB3ZSBhcmUgaW4gQVRUUjEgdGhhdAotCSAqIHRoZSBmb3JrIG9mZnNldCBvZiBhbGwgdGhlIGlub2RlcyB3aWxsIGJlIChtX2F0dHJvZmZzZXQgPj4gMykKLQkgKiBiZWNhdXNlIHdlIGNvdWxkIGhhdmUgbW91bnRlZCB3aXRoIEFUVFIyIGFuZCB0aGVuIG1vdW50ZWQgYmFjawotCSAqIHdpdGggQVRUUjEsIGtlZXBpbmcgdGhlIGRpX2ZvcmtvZmYncyBmaXhlZCBidXQgcHJvYmFibHkgYXQKLQkgKiB2YXJpb3VzIHBvc2l0aW9ucy4gVGhlcmVmb3JlLCBmb3IgYm90aCBBVFRSMSBhbmQgQVRUUjIKLQkgKiB3ZSBoYXZlIHRvIGFzc3VtZSB0aGUgd29yc3QgY2FzZSBzY2VuYXJpbyBvZiBhIG1pbmltdW0gc2l6ZQotCSAqIGF2YWlsYWJsZS4KKwkgKiB0aGUgZm9yayBvZmZzZXQgb2YgYWxsIHRoZSBpbm9kZXMgd2lsbCBiZQorCSAqICh4ZnNfZGVmYXVsdF9hdHRyb2Zmc2V0KGlwKSA+PiAzKSBiZWNhdXNlIHdlIGNvdWxkIGhhdmUgbW91bnRlZAorCSAqIHdpdGggQVRUUjIgYW5kIHRoZW4gbW91bnRlZCBiYWNrIHdpdGggQVRUUjEsIGtlZXBpbmcgdGhlCisJICogZGlfZm9ya29mZidzIGZpeGVkIGJ1dCBwcm9iYWJseSBhdCB2YXJpb3VzIHBvc2l0aW9ucy4gVGhlcmVmb3JlLAorCSAqIGZvciBib3RoIEFUVFIxIGFuZCBBVFRSMiB3ZSBoYXZlIHRvIGFzc3VtZSB0aGUgd29yc3QgY2FzZSBzY2VuYXJpbworCSAqIG9mIGEgbWluaW11bSBzaXplIGF2YWlsYWJsZS4KIAkgKi8KIAlpZiAod2hpY2hmb3JrID09IFhGU19EQVRBX0ZPUkspIHsKIAkJbWF4bGVhZmVudHMgPSBNQVhFWFROVU07CkBAIC00ODA0LDcgKzQ4MjAsNyBAQAogCXhmc19leHRsZW5fdAltaW5sZW47CQkvKiBtaW4gYWxsb2NhdGlvbiBzaXplICovCiAJeGZzX21vdW50X3QJKm1wOwkJLyogeGZzIG1vdW50IHN0cnVjdHVyZSAqLwogCWludAkJbjsJCS8qIGN1cnJlbnQgZXh0ZW50IGluZGV4ICovCi0JaW50CQluYWxsb2NzOwkvKiBudW1iZXIgb2YgZXh0ZW50cyBhbGxvY1wnZCAqLworCWludAkJbmFsbG9jczsJLyogbnVtYmVyIG9mIGV4dGVudHMgYWxsb2MnZCAqLwogCXhmc19leHRudW1fdAluZXh0ZW50czsJLyogbnVtYmVyIG9mIGV4dGVudHMgaW4gZmlsZSAqLwogCXhmc19maWxlb2ZmX3QJb2JubzsJCS8qIG9sZCBibG9jayBudW1iZXIgKG9mZnNldCkgKi8KIAl4ZnNfYm1idF9pcmVjX3QJcHJldjsJCS8qIHByZXZpb3VzIGZpbGUgZXh0ZW50IHJlY29yZCAqLwpAQCAtNjIwNCw3ICs2MjIwLDcgQEAKIAlyZXR1cm4oYnApOwogfQogCi12b2lkCitTVEFUSUMgdm9pZAogeGZzX2NoZWNrX2Jsb2NrKAogCXN0cnVjdCB4ZnNfYnRyZWVfYmxvY2sJKmJsb2NrLAogCXhmc19tb3VudF90CQkqbXAsCkBAIC02NDk0LDcgKzY1MTAsNyBAQAogCWJsb2NrID0gWEZTX0JVRl9UT19CTE9DSyhicCk7CiAKIAlpZiAoLS1sZXZlbCkgewotCQkvKiBOb3QgYXQgbm9kZSBhYm92ZSBsZWFmcywgY291bnQgdGhpcyBsZXZlbCBvZiBub2RlcyAqLworCQkvKiBOb3QgYXQgbm9kZSBhYm92ZSBsZWF2ZXMsIGNvdW50IHRoaXMgbGV2ZWwgb2Ygbm9kZXMgKi8KIAkJbmV4dGJubyA9IGJlNjRfdG9fY3B1KGJsb2NrLT5iYl91LmwuYmJfcmlnaHRzaWIpOwogCQl3aGlsZSAobmV4dGJubyAhPSBOVUxMRlNCTE9DSykgewogCQkJaWYgKChlcnJvciA9IHhmc19idHJlZV9yZWFkX2J1ZmwobXAsIHRwLCBuZXh0Ym5vLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmggYi9mcy94ZnMveGZzX2JtYXAuaAppbmRleCBiZTI5NzlkLi4xYjhmZjkyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuaAorKysgYi9mcy94ZnMveGZzX2JtYXAuaApAQCAtMTI1LDcgKzEyNSw3IEBACiAJc3RydWN0IHhmc19ibWJ0X2lyZWMJKmdvdHA7CS8qIGV4dGVudCBhZnRlciwgb3IgZGVsYXllZCAqLwogCXhmc19leHRsZW5fdAkJYWxlbjsJLyogaS9vIGxlbmd0aCBhc2tlZC9hbGxvY2F0ZWQgKi8KIAl4ZnNfZXh0bGVuX3QJCXRvdGFsOwkvKiB0b3RhbCBibG9ja3MgbmVlZGVkIGZvciB4YWN0aW9uICovCi0JeGZzX2V4dGxlbl90CQltaW5sZW47CS8qIG1pbmludW0gYWxsb2NhdGlvbiBzaXplIChibG9ja3MpICovCisJeGZzX2V4dGxlbl90CQltaW5sZW47CS8qIG1pbmltdW0gYWxsb2NhdGlvbiBzaXplIChibG9ja3MpICovCiAJeGZzX2V4dGxlbl90CQltaW5sZWZ0OyAvKiBhbW91bnQgbXVzdCBiZSBsZWZ0IGFmdGVyIGFsbG9jICovCiAJY2hhcgkJCWVvZjsJLyogc2V0IGlmIGFsbG9jYXRpbmcgcGFzdCBsYXN0IGV4dGVudCAqLwogCWNoYXIJCQl3YXNkZWw7CS8qIHJlcGxhY2luZyBhIGRlbGF5ZWQgYWxsb2NhdGlvbiAqLwpAQCAtMzM4LDYgKzMzOCwxMCBAQAogCXhmc19leHRudW1fdAkJaWR4LAogCXhmc19leHRudW1fdAkJbnVtKTsKIAordWludAoreGZzX2RlZmF1bHRfYXR0cm9mZnNldCgKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCk7CisKICNpZmRlZiBfX0tFUk5FTF9fCiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMveGZzX2J0cmVlLmMKaW5kZXggZTczYzMzMi4uZTlkZjk5NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfYnRyZWUuYwpAQCAtMTg4Myw3ICsxODgzLDcgQEAKIAogCS8qCiAJICogV2UgYWRkIG9uZSBlbnRyeSB0byB0aGUgbGVmdCBzaWRlIGFuZCByZW1vdmUgb25lIGZvciB0aGUgcmlnaHQgc2lkZS4KLQkgKiBBY2NvdXQgZm9yIGl0IGhlcmUsIHRoZSBjaGFuZ2VzIHdpbGwgYmUgdXBkYXRlZCBvbiBkaXNrIGFuZCBsb2dnZWQKKwkgKiBBY2NvdW50IGZvciBpdCBoZXJlLCB0aGUgY2hhbmdlcyB3aWxsIGJlIHVwZGF0ZWQgb24gZGlzayBhbmQgbG9nZ2VkCiAJICogbGF0ZXIuCiAJICovCiAJbHJlY3MrKzsKQEAgLTM1MzUsNyArMzUzNSw3IEBACiAJWEZTX0JUUkVFX1NUQVRTX0lOQyhjdXIsIGpvaW4pOwogCiAJLyoKLQkgKiBGaXggdXAgdGhlIHRoZSBudW1iZXIgb2YgcmVjb3JkcyBhbmQgcmlnaHQgYmxvY2sgcG9pbnRlciBpbiB0aGUKKwkgKiBGaXggdXAgdGhlIG51bWJlciBvZiByZWNvcmRzIGFuZCByaWdodCBibG9jayBwb2ludGVyIGluIHRoZQogCSAqIHN1cnZpdmluZyBibG9jaywgYW5kIGxvZyBpdC4KIAkgKi8KIAl4ZnNfYnRyZWVfc2V0X251bXJlY3MobGVmdCwgbHJlY3MgKyBycmVjcyk7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J0cmVlLmggYi9mcy94ZnMveGZzX2J0cmVlLmgKaW5kZXggNzg5ZmZmZC4uNGY4NTJiNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idHJlZS5oCisrKyBiL2ZzL3hmcy94ZnNfYnRyZWUuaApAQCAtNDEsNyArNDEsNyBAQAogLyoKICAqIEdlbmVyaWMgYnRyZWUgaGVhZGVyLgogICoKLSAqIFRoaXMgaXMgYSBjb21pbmF0aW9uIG9mIHRoZSBhY3R1YWwgZm9ybWF0IHVzZWQgb24gZGlzayBmb3Igc2hvcnQgYW5kIGxvbmcKKyAqIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiB0aGUgYWN0dWFsIGZvcm1hdCB1c2VkIG9uIGRpc2sgZm9yIHNob3J0IGFuZCBsb25nCiAgKiBmb3JtYXQgYnRyZWVzLiAgVGhlIGZpcnN0IHRocmVlIGZpZWxkcyBhcmUgc2hhcmVkIGJ5IGJvdGggZm9ybWF0LCBidXQKICAqIHRoZSBwb2ludGVycyBhcmUgZGlmZmVyZW50IGFuZCBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUuCiAgKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kYV9idHJlZS5jIGIvZnMveGZzL3hmc19kYV9idHJlZS5jCmluZGV4IGM0NWY3NGYuLjlmZjZlNTcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2RhX2J0cmVlLmMKQEAgLTE1MDMsNyArMTUwMyw3IEBACiAgKiBUaGlzIGlzIGltcGxlbWVudGVkIHdpdGggc29tZSBzb3VyY2UtbGV2ZWwgbG9vcCB1bnJvbGxpbmcuCiAgKi8KIHhmc19kYWhhc2hfdAoteGZzX2RhX2hhc2huYW1lKGNvbnN0IHVjaGFyX3QgKm5hbWUsIGludCBuYW1lbGVuKQoreGZzX2RhX2hhc2huYW1lKGNvbnN0IF9fdWludDhfdCAqbmFtZSwgaW50IG5hbWVsZW4pCiB7CiAJeGZzX2RhaGFzaF90IGhhc2g7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaCBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuaAppbmRleCA3MGI3MTBjLi44YzUzNjE2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RhX2J0cmVlLmgKKysrIGIvZnMveGZzL3hmc19kYV9idHJlZS5oCkBAIC05MSw5ICs5MSw5IEBACiAgKiBTdHJ1Y3R1cmUgdG8gZWFzZSBwYXNzaW5nIGFyb3VuZCBjb21wb25lbnQgbmFtZXMuCiAgKi8KIHR5cGVkZWYgc3RydWN0IHhmc19kYV9hcmdzIHsKLQljb25zdCB1Y2hhcl90CSpuYW1lOwkJLyogc3RyaW5nIChtYXliZSBub3QgTlVMTCB0ZXJtaW5hdGVkKSAqLworCWNvbnN0IF9fdWludDhfdAkqbmFtZTsJCS8qIHN0cmluZyAobWF5YmUgbm90IE5VTEwgdGVybWluYXRlZCkgKi8KIAlpbnQJCW5hbWVsZW47CS8qIGxlbmd0aCBvZiBzdHJpbmcgKG1heWJlIG5vIE5VTEwpICovCi0JdWNoYXJfdAkJKnZhbHVlOwkJLyogc2V0IG9mIGJ5dGVzIChtYXliZSBjb250YWluIE5VTExzKSAqLworCV9fdWludDhfdAkqdmFsdWU7CQkvKiBzZXQgb2YgYnl0ZXMgKG1heWJlIGNvbnRhaW4gTlVMTHMpICovCiAJaW50CQl2YWx1ZWxlbjsJLyogbGVuZ3RoIG9mIHZhbHVlICovCiAJaW50CQlmbGFnczsJCS8qIGFyZ3VtZW50IGZsYWdzIChlZzogQVRUUl9OT0NSRUFURSkgKi8KIAl4ZnNfZGFoYXNoX3QJaGFzaHZhbDsJLyogaGFzaCB2YWx1ZSBvZiBuYW1lICovCkBAIC0xODUsNyArMTg1LDcgQEAKIAl1bnNpZ25lZCBjaGFyCQlpbmxlYWY7CQkvKiBpbnNlcnQgaW50byAxLT5sZiwgMC0+c3BsZiAqLwogCXVuc2lnbmVkIGNoYXIJCWV4dHJhdmFsaWQ7CS8qIFQvRjogZXh0cmFibGsgaXMgaW4gdXNlICovCiAJdW5zaWduZWQgY2hhcgkJZXh0cmFhZnRlcjsJLyogVC9GOiBleHRyYWJsayBpcyBhZnRlciBuZXcgKi8KLQl4ZnNfZGFfc3RhdGVfYmxrX3QJZXh0cmFibGs7CS8qIGZvciBkb3VibGUtc3BsaXRzIG9uIGxlYWZzICovCisJeGZzX2RhX3N0YXRlX2Jsa190CWV4dHJhYmxrOwkvKiBmb3IgZG91YmxlLXNwbGl0cyBvbiBsZWF2ZXMgKi8KIAkJCQkJCS8qIGZvciBkaXJ2MiBleHRyYWJsayBpcyBkYXRhICovCiB9IHhmc19kYV9zdGF0ZV90OwogCkBAIC0yNTEsNyArMjUxLDcgQEAKIGludAl4ZnNfZGFfc2hyaW5rX2lub2RlKHhmc19kYV9hcmdzX3QgKmFyZ3MsIHhmc19kYWJsa190IGRlYWRfYmxrbm8sCiAJCQkJCSAgeGZzX2RhYnVmX3QgKmRlYWRfYnVmKTsKIAotdWludCB4ZnNfZGFfaGFzaG5hbWUoY29uc3QgdWNoYXJfdCAqbmFtZV9zdHJpbmcsIGludCBuYW1lX2xlbmd0aCk7Cit1aW50IHhmc19kYV9oYXNobmFtZShjb25zdCBfX3VpbnQ4X3QgKm5hbWVfc3RyaW5nLCBpbnQgbmFtZV9sZW5ndGgpOwogZW51bSB4ZnNfZGFjbXAgeGZzX2RhX2NvbXBuYW1lKHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncywKIAkJCQljb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKIApAQCAtMjY4LDUgKzI2OCw2IEBACiAKIGV4dGVybiBzdHJ1Y3Qga21lbV96b25lICp4ZnNfZGFfc3RhdGVfem9uZTsKIGV4dGVybiBzdHJ1Y3Qga21lbV96b25lICp4ZnNfZGFidWZfem9uZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgeGZzX25hbWVvcHMgeGZzX2RlZmF1bHRfbmFtZW9wczsKIAogI2VuZGlmCS8qIF9fWEZTX0RBX0JUUkVFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kZnJhZy5jIGIvZnMveGZzL3hmc19kZnJhZy5jCmluZGV4IGY4Mjc4Y2YuLmU2ZDgzOWIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZGZyYWcuYworKysgYi9mcy94ZnMveGZzX2RmcmFnLmMKQEAgLTc5LDYgKzc5LDEyIEBACiAJCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKIAl9CiAKKwlpZiAoSVNfU1dBUEZJTEUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkgfHwKKwkgICAgSVNfU1dBUEZJTEUodGFyZ2V0X2ZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKSB7CisJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7CisJCWdvdG8gb3V0X3B1dF90YXJnZXRfZmlsZTsKKwl9CisKIAlpcCA9IFhGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXRpcCA9IFhGU19JKHRhcmdldF9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIApAQCAtMTE4LDE5ICsxMjQsMTcgQEAKIAl4ZnNfYnN0YXRfdAkqc2JwID0gJnN4cC0+c3hfc3RhdDsKIAl4ZnNfaWZvcmtfdAkqdGVtcGlmcCwgKmlmcCwgKnRpZnA7CiAJaW50CQlpbGZfZmllbGRzLCB0aWxmX2ZpZWxkczsKLQlzdGF0aWMgdWludAlsb2NrX2ZsYWdzID0gWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0w7CiAJaW50CQllcnJvciA9IDA7CiAJaW50CQlhZm9ya2Jsa3MgPSAwOwogCWludAkJdGFmb3JrYmxrcyA9IDA7CiAJX191aW50NjRfdAl0bXA7Ci0JY2hhcgkJbG9ja2VkID0gMDsKIAogCW1wID0gaXAtPmlfbW91bnQ7CiAKIAl0ZW1waWZwID0ga21lbV9hbGxvYyhzaXplb2YoeGZzX2lmb3JrX3QpLCBLTV9NQVlGQUlMKTsKIAlpZiAoIXRlbXBpZnApIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRU5PTUVNKTsKLQkJZ290byBlcnJvcjA7CisJCWdvdG8gb3V0OwogCX0KIAogCXNicCA9ICZzeHAtPnN4X3N0YXQ7CkBAIC0xNDMsMjUgKzE0NywyNCBAQAogCSAqLwogCXhmc19sb2NrX3R3b19pbm9kZXMoaXAsIHRpcCwgWEZTX0lPTE9DS19FWENMKTsKIAl4ZnNfbG9ja190d29faW5vZGVzKGlwLCB0aXAsIFhGU19JTE9DS19FWENMKTsKLQlsb2NrZWQgPSAxOwogCiAJLyogVmVyaWZ5IHRoYXQgYm90aCBmaWxlcyBoYXZlIHRoZSBzYW1lIGZvcm1hdCAqLwogCWlmICgoaXAtPmlfZC5kaV9tb2RlICYgU19JRk1UKSAhPSAodGlwLT5pX2QuZGlfbW9kZSAmIFNfSUZNVCkpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJZ290byBlcnJvcjA7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAkvKiBWZXJpZnkgYm90aCBmaWxlcyBhcmUgZWl0aGVyIHJlYWwtdGltZSBvciBub24tcmVhbHRpbWUgKi8KIAlpZiAoWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSAhPSBYRlNfSVNfUkVBTFRJTUVfSU5PREUodGlwKSkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwotCQlnb3RvIGVycm9yMDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCS8qIFNob3VsZCBuZXZlciBnZXQgYSBsb2NhbCBmb3JtYXQgKi8KIAlpZiAoaXAtPmlfZC5kaV9mb3JtYXQgPT0gWEZTX0RJTk9ERV9GTVRfTE9DQUwgfHwKIAkgICAgdGlwLT5pX2QuZGlfZm9ybWF0ID09IFhGU19ESU5PREVfRk1UX0xPQ0FMKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWdvdG8gZXJyb3IwOworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJaWYgKFZOX0NBQ0hFRChWRlNfSSh0aXApKSAhPSAwKSB7CkBAIC0xNjksMTMgKzE3MiwxMyBAQAogCQllcnJvciA9IHhmc19mbHVzaGludmFsX3BhZ2VzKHRpcCwgMCwgLTEsCiAJCQkJRklfUkVNQVBGX0xPQ0tFRCk7CiAJCWlmIChlcnJvcikKLQkJCWdvdG8gZXJyb3IwOworCQkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCS8qIFZlcmlmeSBPX0RJUkVDVCBmb3IgZnRtcCAqLwogCWlmIChWTl9DQUNIRUQoVkZTX0kodGlwKSkgIT0gMCkgewogCQllcnJvciA9IFhGU19FUlJPUihFSU5WQUwpOwotCQlnb3RvIGVycm9yMDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCS8qIFZlcmlmeSBhbGwgZGF0YSBhcmUgYmVpbmcgc3dhcHBlZCAqLwpAQCAtMTgzLDcgKzE4Niw3IEBACiAJICAgIHN4cC0+c3hfbGVuZ3RoICE9IGlwLT5pX2QuZGlfc2l6ZSB8fAogCSAgICBzeHAtPnN4X2xlbmd0aCAhPSB0aXAtPmlfZC5kaV9zaXplKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVGQVVMVCk7Ci0JCWdvdG8gZXJyb3IwOworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJLyoKQEAgLTE5Myw3ICsxOTYsNyBAQAogCSAqLwogCWlmICggWEZTX0lGT1JLX1EoaXApICE9IFhGU19JRk9SS19RKHRpcCkgKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCWdvdG8gZXJyb3IwOworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJLyoKQEAgLTIwOCw3ICsyMTEsNyBAQAogCSAgICAoc2JwLT5ic19tdGltZS50dl9zZWMgIT0gaXAtPmlfZC5kaV9tdGltZS50X3NlYykgfHwKIAkgICAgKHNicC0+YnNfbXRpbWUudHZfbnNlYyAhPSBpcC0+aV9kLmRpX210aW1lLnRfbnNlYykpIHsKIAkJZXJyb3IgPSBYRlNfRVJST1IoRUJVU1kpOwotCQlnb3RvIGVycm9yMDsKKwkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCS8qIFdlIG5lZWQgdG8gZmFpbCBpZiB0aGUgZmlsZSBpcyBtZW1vcnkgbWFwcGVkLiAgT25jZSB3ZSBoYXZlIHRvc3NlZApAQCAtMjE5LDcgKzIyMiw3IEBACiAJICovCiAJaWYgKFZOX01BUFBFRChWRlNfSShpcCkpKSB7CiAJCWVycm9yID0gWEZTX0VSUk9SKEVCVVNZKTsKLQkJZ290byBlcnJvcjA7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwpAQCAtMjQyLDggKzI0NSw3IEBACiAJCXhmc19pdW5sb2NrKGlwLCAgWEZTX0lPTE9DS19FWENMKTsKIAkJeGZzX2l1bmxvY2sodGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwogCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKLQkJbG9ja2VkID0gMDsKLQkJZ290byBlcnJvcjA7CisJCWdvdG8gb3V0OwogCX0KIAl4ZnNfbG9ja190d29faW5vZGVzKGlwLCB0aXAsIFhGU19JTE9DS19FWENMKTsKIApAQCAtMjUzLDE5ICsyNTUsMTUgQEAKIAlpZiAoICgoWEZTX0lGT1JLX1EoaXApICE9IDApICYmIChpcC0+aV9kLmRpX2FuZXh0ZW50cyA+IDApKSAmJgogCSAgICAgKGlwLT5pX2QuZGlfYWZvcm1hdCAhPSBYRlNfRElOT0RFX0ZNVF9MT0NBTCkpIHsKIAkJZXJyb3IgPSB4ZnNfYm1hcF9jb3VudF9ibG9ja3ModHAsIGlwLCBYRlNfQVRUUl9GT1JLLCAmYWZvcmtibGtzKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKLQkJCWdvdG8gZXJyb3IwOwotCQl9CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X3RyYW5zX2NhbmNlbDsKIAl9CiAJaWYgKCAoKFhGU19JRk9SS19RKHRpcCkgIT0gMCkgJiYgKHRpcC0+aV9kLmRpX2FuZXh0ZW50cyA+IDApKSAmJgogCSAgICAgKHRpcC0+aV9kLmRpX2Fmb3JtYXQgIT0gWEZTX0RJTk9ERV9GTVRfTE9DQUwpKSB7CiAJCWVycm9yID0geGZzX2JtYXBfY291bnRfYmxvY2tzKHRwLCB0aXAsIFhGU19BVFRSX0ZPUkssCiAJCQkmdGFmb3JrYmxrcyk7Ci0JCWlmIChlcnJvcikgewotCQkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7Ci0JCQlnb3RvIGVycm9yMDsKLQkJfQorCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF90cmFuc19jYW5jZWw7CiAJfQogCiAJLyoKQEAgLTMzMiwxMCArMzMwLDEwIEBACiAKIAogCUlIT0xEKGlwKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBsb2NrX2ZsYWdzKTsKKwl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JT0xPQ0tfRVhDTCk7CiAKIAlJSE9MRCh0aXApOwotCXhmc190cmFuc19pam9pbih0cCwgdGlwLCBsb2NrX2ZsYWdzKTsKKwl4ZnNfdHJhbnNfaWpvaW4odHAsIHRpcCwgWEZTX0lMT0NLX0VYQ0wgfCBYRlNfSU9MT0NLX0VYQ0wpOwogCiAJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsICBpbGZfZmllbGRzKTsKIAl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCB0aXAsIHRpbGZfZmllbGRzKTsKQEAgLTM0NCwxOSArMzQyLDE5IEBACiAJICogSWYgdGhpcyBpcyBhIHN5bmNocm9ub3VzIG1vdW50LCBtYWtlIHN1cmUgdGhhdCB0aGUKIAkgKiB0cmFuc2FjdGlvbiBnb2VzIHRvIGRpc2sgYmVmb3JlIHJldHVybmluZyB0byB0aGUgdXNlci4KIAkgKi8KLQlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfV1NZTkMpIHsKKwlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfV1NZTkMpCiAJCXhmc190cmFuc19zZXRfc3luYyh0cCk7Ci0JfQogCiAJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfU1dBUEVYVCk7Ci0JbG9ja2VkID0gMDsKIAotIGVycm9yMDoKLQlpZiAobG9ja2VkKSB7Ci0JCXhmc19pdW5sb2NrKGlwLCAgbG9ja19mbGFncyk7Ci0JCXhmc19pdW5sb2NrKHRpcCwgbG9ja19mbGFncyk7Ci0JfQotCWlmICh0ZW1waWZwICE9IE5VTEwpCi0JCWttZW1fZnJlZSh0ZW1waWZwKTsKK291dF91bmxvY2s6CisJeGZzX2l1bmxvY2soaXAsICBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JT0xPQ0tfRVhDTCk7CisJeGZzX2l1bmxvY2sodGlwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JT0xPQ0tfRVhDTCk7CitvdXQ6CisJa21lbV9mcmVlKHRlbXBpZnApOwogCXJldHVybiBlcnJvcjsKKworb3V0X3RyYW5zX2NhbmNlbDoKKwl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKKwlnb3RvIG91dF91bmxvY2s7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Rpbm9kZS5oIGIvZnMveGZzL3hmc19kaW5vZGUuaAppbmRleCAxNjJlODcyLi5lNWIxNTNiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Rpbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfZGlub2RlLmgKQEAgLTEwMyw3ICsxMDMsOSBAQAogLyoKICAqIElub2RlIHNpemUgZm9yIGdpdmVuIGZzLgogICovCi0jZGVmaW5lCVhGU19MSVRJTk8obXApCSgobXApLT5tX2xpdGlubykKKyNkZWZpbmUgWEZTX0xJVElOTyhtcCkgXAorCSgoaW50KSgoKG1wKS0+bV9zYi5zYl9pbm9kZXNpemUpIC0gc2l6ZW9mKHN0cnVjdCB4ZnNfZGlub2RlKSkpCisKICNkZWZpbmUJWEZTX0JST09UX1NJWkVfQURKCVwKIAkoWEZTX0JUUkVFX0xCTE9DS19MRU4gLSBzaXplb2YoeGZzX2JtZHJfYmxvY2tfdCkpCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMi5jIGIvZnMveGZzL3hmc19kaXIyLmMKaW5kZXggMWFmYjEyMi4uYzY1N2JlYyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyLmMKKysrIGIvZnMveGZzL3hmc19kaXIyLmMKQEAgLTQ2LDggKzQ2LDYgQEAKIAogc3RydWN0IHhmc19uYW1lIHhmc19uYW1lX2RvdGRvdCA9IHsiLi4iLCAyfTsKIAotZXh0ZXJuIGNvbnN0IHN0cnVjdCB4ZnNfbmFtZW9wcyB4ZnNfZGVmYXVsdF9uYW1lb3BzOwotCiAvKgogICogQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSAoaWUuIEEtWikgc3VwcG9ydCBmb3IgZGlyZWN0b3JpZXMgdGhhdCB3YXMKICAqIHVzZWQgaW4gSVJJWC4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGlyMl9ibG9jay5jIGIvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKaW5kZXggZTFmMGEwNi4uYWI1MmU5ZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKKysrIGIvZnMveGZzL3hmc19kaXIyX2Jsb2NrLmMKQEAgLTQ0OCw3ICs0NDgsNiBAQAogCXhmc19tb3VudF90CQkqbXA7CQkvKiBmaWxlc3lzdGVtIG1vdW50IHBvaW50ICovCiAJY2hhcgkJCSpwdHI7CQkvKiBjdXJyZW50IGRhdGEgZW50cnkgKi8KIAlpbnQJCQl3YW50b2ZmOwkvKiBzdGFydGluZyBibG9jayBvZmZzZXQgKi8KLQl4ZnNfaW5vX3QJCWlubzsKIAl4ZnNfb2ZmX3QJCWNvb2s7CiAKIAltcCA9IGRwLT5pX21vdW50OwpAQCAtNTA5LDE2ICs1MDgsMTIgQEAKIAogCQljb29rID0geGZzX2RpcjJfZGJfb2ZmX3RvX2RhdGFwdHIobXAsIG1wLT5tX2RpcmRhdGFibGssCiAJCQkJCSAgICAoY2hhciAqKWRlcCAtIChjaGFyICopYmxvY2spOwotCQlpbm8gPSBiZTY0X3RvX2NwdShkZXAtPmludW1iZXIpOwotI2lmIFhGU19CSUdfSU5VTVMKLQkJaW5vICs9IG1wLT5tX2lub2FkZDsKLSNlbmRpZgogCiAJCS8qCiAJCSAqIElmIGl0IGRpZG4ndCBmaXQsIHNldCB0aGUgZmluYWwgb2Zmc2V0IHRvIGhlcmUgJiByZXR1cm4uCiAJCSAqLwogCQlpZiAoZmlsbGRpcihkaXJlbnQsIGRlcC0+bmFtZSwgZGVwLT5uYW1lbGVuLCBjb29rICYgMHg3ZmZmZmZmZiwKLQkJCSAgICBpbm8sIERUX1VOS05PV04pKSB7CisJCQkgICAgYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKSwgRFRfVU5LTk9XTikpIHsKIAkJCSpvZmZzZXQgPSBjb29rICYgMHg3ZmZmZmZmZjsKIAkJCXhmc19kYV9icmVsc2UoTlVMTCwgYnApOwogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfZGF0YS5oIGIvZnMveGZzL3hmc19kaXIyX2RhdGEuaAppbmRleCBiODE2ZTAyLi5lZmJjMjkwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfZGF0YS5oCisrKyBiL2ZzL3hmcy94ZnNfZGlyMl9kYXRhLmgKQEAgLTM4LDcgKzM4LDcgQEAKIAogLyoKICAqIERpcmVjdG9yeSBhZGRyZXNzIHNwYWNlIGRpdmlkZWQgaW50byBzZWN0aW9ucywKLSAqIHNwYWNlcyBzZXBhcmF0ZWQgYnkgMzJnYi4KKyAqIHNwYWNlcyBzZXBhcmF0ZWQgYnkgMzJHQi4KICAqLwogI2RlZmluZQlYRlNfRElSMl9TUEFDRV9TSVpFCSgxVUxMIDw8ICgzMiArIFhGU19ESVIyX0RBVEFfQUxJR05fTE9HKSkKICNkZWZpbmUJWEZTX0RJUjJfREFUQV9TUEFDRQkwCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RpcjJfbGVhZi5jIGIvZnMveGZzL3hmc19kaXIyX2xlYWYuYwppbmRleCBlZjgwNWEzLi5mYTkxM2U0NSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX2xlYWYuYworKysgYi9mcy94ZnMveGZzX2RpcjJfbGVhZi5jCkBAIC01NDksNyArNTQ5LDcgQEAKICAqIENoZWNrIHRoZSBpbnRlcm5hbCBjb25zaXN0ZW5jeSBvZiBhIGxlYWYxIGJsb2NrLgogICogUG9wIGFuIGFzc2VydCBpZiBzb21ldGhpbmcgaXMgd3JvbmcuCiAgKi8KLXZvaWQKK1NUQVRJQyB2b2lkCiB4ZnNfZGlyMl9sZWFmX2NoZWNrKAogCXhmc19pbm9kZV90CQkqZHAsCQkvKiBpbmNvcmUgZGlyZWN0b3J5IGlub2RlICovCiAJeGZzX2RhYnVmX3QJCSpicCkJCS8qIGxlYWYncyBidWZmZXIgKi8KQEAgLTc4MCw3ICs3ODAsNiBAQAogCWludAkJCXJhX2luZGV4OwkvKiAqbWFwIGluZGV4IGZvciByZWFkLWFoZWFkICovCiAJaW50CQkJcmFfb2Zmc2V0OwkvKiBtYXAgZW50cnkgb2Zmc2V0IGZvciByYSAqLwogCWludAkJCXJhX3dhbnQ7CS8qIHJlYWRhaGVhZCBjb3VudCB3YW50ZWQgKi8KLQl4ZnNfaW5vX3QJCWlubzsKIAogCS8qCiAJICogSWYgdGhlIG9mZnNldCBpcyBhdCBvciBwYXN0IHRoZSBsYXJnZXN0IGFsbG93ZWQgdmFsdWUsCkBAIC0xMDc2LDI0ICsxMDc1LDEyIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qCi0JCSAqIENvcHkgdGhlIGVudHJ5IGludG8gdGhlIHB1dGFyZ3MsIGFuZCB0cnkgZm9ybWF0dGluZyBpdC4KLQkJICovCiAJCWRlcCA9ICh4ZnNfZGlyMl9kYXRhX2VudHJ5X3QgKilwdHI7Ci0KIAkJbGVuZ3RoID0geGZzX2RpcjJfZGF0YV9lbnRzaXplKGRlcC0+bmFtZWxlbik7CiAKLQkJaW5vID0gYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKTsKLSNpZiBYRlNfQklHX0lOVU1TCi0JCWlubyArPSBtcC0+bV9pbm9hZGQ7Ci0jZW5kaWYKLQotCQkvKgotCQkgKiBXb24ndCBmaXQuICBSZXR1cm4gdG8gY2FsbGVyLgotCQkgKi8KIAkJaWYgKGZpbGxkaXIoZGlyZW50LCBkZXAtPm5hbWUsIGRlcC0+bmFtZWxlbiwKIAkJCSAgICB4ZnNfZGlyMl9ieXRlX3RvX2RhdGFwdHIobXAsIGN1cm9mZikgJiAweDdmZmZmZmZmLAotCQkJICAgIGlubywgRFRfVU5LTk9XTikpCisJCQkgICAgYmU2NF90b19jcHUoZGVwLT5pbnVtYmVyKSwgRFRfVU5LTk9XTikpCiAJCQlicmVhazsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX25vZGUuYyBiL2ZzL3hmcy94ZnNfZGlyMl9ub2RlLmMKaW5kZXggZmE2YzNhNS4uNWE4MWNjZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kaXIyX25vZGUuYworKysgYi9mcy94ZnMveGZzX2RpcjJfbm9kZS5jCkBAIC0xMTA0LDcgKzExMDQsNyBAQAogCX0KIAl4ZnNfZGlyMl9sZWFmbl9jaGVjayhkcCwgYnApOwogCS8qCi0JICogUmV0dXJuIGluZGljYXRpb24gb2Ygd2hldGhlciB0aGlzIGxlYWYgYmxvY2sgaXMgZW10cHkgZW5vdWdoCisJICogUmV0dXJuIGluZGljYXRpb24gb2Ygd2hldGhlciB0aGlzIGxlYWYgYmxvY2sgaXMgZW1wdHkgZW5vdWdoCiAJICogdG8ganVzdGlmeSB0cnlpbmcgdG8gam9pbiBpdCB3aXRoIGEgbmVpZ2hib3IuCiAJICovCiAJKnJ2YWwgPQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19kaXIyX3NmLmMgYi9mcy94ZnMveGZzX2RpcjJfc2YuYwppbmRleCBhOGE4YTZlLi5lODk3MzRlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2RpcjJfc2YuYworKysgYi9mcy94ZnMveGZzX2RpcjJfc2YuYwpAQCAtNzQ4LDExICs3NDgsNyBAQAogCSAqIFB1dCAuIGVudHJ5IHVubGVzcyB3ZSdyZSBzdGFydGluZyBwYXN0IGl0LgogCSAqLwogCWlmICgqb2Zmc2V0IDw9IGRvdF9vZmZzZXQpIHsKLQkJaW5vID0gZHAtPmlfaW5vOwotI2lmIFhGU19CSUdfSU5VTVMKLQkJaW5vICs9IG1wLT5tX2lub2FkZDsKLSNlbmRpZgotCQlpZiAoZmlsbGRpcihkaXJlbnQsICIuIiwgMSwgZG90X29mZnNldCAmIDB4N2ZmZmZmZmYsIGlubywgRFRfRElSKSkgeworCQlpZiAoZmlsbGRpcihkaXJlbnQsICIuIiwgMSwgZG90X29mZnNldCAmIDB4N2ZmZmZmZmYsIGRwLT5pX2lubywgRFRfRElSKSkgewogCQkJKm9mZnNldCA9IGRvdF9vZmZzZXQgJiAweDdmZmZmZmZmOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTc2Myw5ICs3NTksNiBAQAogCSAqLwogCWlmICgqb2Zmc2V0IDw9IGRvdGRvdF9vZmZzZXQpIHsKIAkJaW5vID0geGZzX2RpcjJfc2ZfZ2V0X2ludW1iZXIoc2ZwLCAmc2ZwLT5oZHIucGFyZW50KTsKLSNpZiBYRlNfQklHX0lOVU1TCi0JCWlubyArPSBtcC0+bV9pbm9hZGQ7Ci0jZW5kaWYKIAkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLi4iLCAyLCBkb3Rkb3Rfb2Zmc2V0ICYgMHg3ZmZmZmZmZiwgaW5vLCBEVF9ESVIpKSB7CiAJCQkqb2Zmc2V0ID0gZG90ZG90X29mZnNldCAmIDB4N2ZmZmZmZmY7CiAJCQlyZXR1cm4gMDsKQEAgLTc4NiwxMCArNzc5LDYgQEAKIAkJfQogCiAJCWlubyA9IHhmc19kaXIyX3NmX2dldF9pbnVtYmVyKHNmcCwgeGZzX2RpcjJfc2ZfaW51bWJlcnAoc2ZlcCkpOwotI2lmIFhGU19CSUdfSU5VTVMKLQkJaW5vICs9IG1wLT5tX2lub2FkZDsKLSNlbmRpZgotCiAJCWlmIChmaWxsZGlyKGRpcmVudCwgc2ZlcC0+bmFtZSwgc2ZlcC0+bmFtZWxlbiwKIAkJCSAgICBvZmYgJiAweDdmZmZmZmZmLCBpbm8sIERUX1VOS05PV04pKSB7CiAJCQkqb2Zmc2V0ID0gb2ZmICYgMHg3ZmZmZmZmZjsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmggYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5oCmluZGV4IDJmMDQ5ZjYuLjBkMjJjNTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmgKKysrIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uaApAQCAtMzMsMTIgKzMzLDEwIEBACiAgKiBjb252ZXJzaW9uIHJvdXRpbmUuCiAgKi8KIAotI2lmbmRlZiBIQVZFX0ZPUk1BVDMyCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZXh0ZW50XzMyIHsKIAlfX3VpbnQ2NF90CWV4dF9zdGFydDsKIAlfX3VpbnQzMl90CWV4dF9sZW47CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHhmc19leHRlbnRfMzJfdDsKLSNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZXh0ZW50XzY0IHsKIAlfX3VpbnQ2NF90CWV4dF9zdGFydDsKQEAgLTU5LDcgKzU3LDYgQEAKIAl4ZnNfZXh0ZW50X3QJCWVmaV9leHRlbnRzWzFdOwkvKiBhcnJheSBvZiBleHRlbnRzIHRvIGZyZWUgKi8KIH0geGZzX2VmaV9sb2dfZm9ybWF0X3Q7CiAKLSNpZm5kZWYgSEFWRV9GT1JNQVQzMgogdHlwZWRlZiBzdHJ1Y3QgeGZzX2VmaV9sb2dfZm9ybWF0XzMyIHsKIAlfX3VpbnQxNl90CQllZmlfdHlwZTsJLyogZWZpIGxvZyBpdGVtIHR5cGUgKi8KIAlfX3VpbnQxNl90CQllZmlfc2l6ZTsJLyogc2l6ZSBvZiB0aGlzIGl0ZW0gKi8KQEAgLTY3LDcgKzY0LDYgQEAKIAlfX3VpbnQ2NF90CQllZmlfaWQ7CQkvKiBlZmkgaWRlbnRpZmllciAqLwogCXhmc19leHRlbnRfMzJfdAkJZWZpX2V4dGVudHNbMV07CS8qIGFycmF5IG9mIGV4dGVudHMgdG8gZnJlZSAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB4ZnNfZWZpX2xvZ19mb3JtYXRfMzJfdDsKLSNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZWZpX2xvZ19mb3JtYXRfNjQgewogCV9fdWludDE2X3QJCWVmaV90eXBlOwkvKiBlZmkgbG9nIGl0ZW0gdHlwZSAqLwpAQCAtOTAsNyArODYsNiBAQAogCXhmc19leHRlbnRfdAkJZWZkX2V4dGVudHNbMV07CS8qIGFycmF5IG9mIGV4dGVudHMgZnJlZWQgKi8KIH0geGZzX2VmZF9sb2dfZm9ybWF0X3Q7CiAKLSNpZm5kZWYgSEFWRV9GT1JNQVQzMgogdHlwZWRlZiBzdHJ1Y3QgeGZzX2VmZF9sb2dfZm9ybWF0XzMyIHsKIAlfX3VpbnQxNl90CQllZmRfdHlwZTsJLyogZWZkIGxvZyBpdGVtIHR5cGUgKi8KIAlfX3VpbnQxNl90CQllZmRfc2l6ZTsJLyogc2l6ZSBvZiB0aGlzIGl0ZW0gKi8KQEAgLTk4LDcgKzkzLDYgQEAKIAlfX3VpbnQ2NF90CQllZmRfZWZpX2lkOwkvKiBpZCBvZiBjb3JyZXNwb25kaW5nIGVmaSAqLwogCXhmc19leHRlbnRfMzJfdAkJZWZkX2V4dGVudHNbMV07CS8qIGFycmF5IG9mIGV4dGVudHMgZnJlZWQgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgeGZzX2VmZF9sb2dfZm9ybWF0XzMyX3Q7Ci0jZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2VmZF9sb2dfZm9ybWF0XzY0IHsKIAlfX3VpbnQxNl90CQllZmRfdHlwZTsJLyogZWZkIGxvZyBpdGVtIHR5cGUgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZXN0cmVhbS5jIGIvZnMveGZzL3hmc19maWxlc3RyZWFtLmMKaW5kZXggZjNiYjc1ZC4uNmM4N2M4ZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19maWxlc3RyZWFtLmMKKysrIGIvZnMveGZzL3hmc19maWxlc3RyZWFtLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCXhmc19leHRsZW5fdAltaW5sZW4pCiB7CiAJaW50CQllcnIsIHRyeWxvY2ssIG5zY2FuOwotCXhmc19leHRsZW5fdAlkZWx0YSwgbG9uZ2VzdCwgbmVlZCwgZnJlZSwgbWluZnJlZSwgbWF4ZnJlZSA9IDA7CisJeGZzX2V4dGxlbl90CWxvbmdlc3QsIGZyZWUsIG1pbmZyZWUsIG1heGZyZWUgPSAwOwogCXhmc19hZ251bWJlcl90CWFnLCBtYXhfYWcgPSBOVUxMQUdOVU1CRVI7CiAJc3RydWN0IHhmc19wZXJhZyAqcGFnOwogCkBAIC0xODYsMTIgKzE4Niw3IEBACiAJCQlnb3RvIG5leHRfYWc7CiAJCX0KIAotCQluZWVkID0gWEZTX01JTl9GUkVFTElTVF9QQUcocGFnLCBtcCk7Ci0JCWRlbHRhID0gbmVlZCA+IHBhZy0+cGFnZl9mbGNvdW50ID8gbmVlZCAtIHBhZy0+cGFnZl9mbGNvdW50IDogMDsKLQkJbG9uZ2VzdCA9IChwYWctPnBhZ2ZfbG9uZ2VzdCA+IGRlbHRhKSA/Ci0JCSAgICAgICAgICAocGFnLT5wYWdmX2xvbmdlc3QgLSBkZWx0YSkgOgotCQkgICAgICAgICAgKHBhZy0+cGFnZl9mbGNvdW50ID4gMCB8fCBwYWctPnBhZ2ZfbG9uZ2VzdCA+IDApOwotCisJCWxvbmdlc3QgPSB4ZnNfYWxsb2NfbG9uZ2VzdF9mcmVlX2V4dGVudChtcCwgcGFnKTsKIAkJaWYgKCgobWlubGVuICYmIGxvbmdlc3QgPj0gbWlubGVuKSB8fAogCQkgICAgICghbWlubGVuICYmIHBhZy0+cGFnZl9mcmVlYmxrcyA+PSBtaW5mcmVlKSkgJiYKIAkJICAgICghcGFnLT5wYWdmX21ldGFkYXRhIHx8ICEoZmxhZ3MgJiBYRlNfUElDS19VU0VSREFUQSkgfHwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwppbmRleCA2ODBkMGUwLi44Mzc5ZTNiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Zzb3BzLmMKKysrIGIvZnMveGZzL3hmc19mc29wcy5jCkBAIC01NzYsNyArNTc2LDcgQEAKIAlpZiAoZmRibGtzX2RlbHRhKSB7CiAJCS8qCiAJCSAqIElmIHdlIGFyZSBwdXR0aW5nIGJsb2NrcyBiYWNrIGhlcmUsIG1fcmVzYmxrc19hdmFpbCBpcwotCQkgKiBhbHJlYWR5IGF0IGl0J3MgbWF4IHNvIHRoaXMgd2lsbCBwdXQgaXQgaW4gdGhlIGZyZWUgcG9vbC4KKwkJICogYWxyZWFkeSBhdCBpdHMgbWF4IHNvIHRoaXMgd2lsbCBwdXQgaXQgaW4gdGhlIGZyZWUgcG9vbC4KIAkJICoKIAkJICogSWYgd2UgbmVlZCBzcGFjZSwgd2UnbGwgZWl0aGVyIHN1Y2NlZWQgaW4gZ2V0dGluZyBpdAogCQkgKiBmcm9tIHRoZSBmcmVlIGJsb2NrIGNvdW50IG9yIHdlJ2xsIGdldCBhbiBlbm9zcGMuIElmCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lhbGxvYy5jIGIvZnMveGZzL3hmc19pYWxsb2MuYwppbmRleCBhYjAxNmU1Li4zMTIwYTNhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogCQlhcmdzLm1pbmFsaWduc2xvcCA9IHhmc19pYWxsb2NfY2x1c3Rlcl9hbGlnbm1lbnQoJmFyZ3MpIC0gMTsKIAogCQkvKiBBbGxvdyBzcGFjZSBmb3IgdGhlIGlub2RlIGJ0cmVlIHRvIHNwbGl0LiAqLwotCQlhcmdzLm1pbmxlZnQgPSBYRlNfSU5fTUFYTEVWRUxTKGFyZ3MubXApIC0gMTsKKwkJYXJncy5taW5sZWZ0ID0gYXJncy5tcC0+bV9pbl9tYXhsZXZlbHMgLSAxOwogCQlpZiAoKGVycm9yID0geGZzX2FsbG9jX3ZleHRlbnQoJmFyZ3MpKSkKIAkJCXJldHVybiBlcnJvcjsKIAl9IGVsc2UKQEAgLTI3MCw3ICsyNzAsNyBAQAogCQkvKgogCQkgKiBBbGxvdyBzcGFjZSBmb3IgdGhlIGlub2RlIGJ0cmVlIHRvIHNwbGl0LgogCQkgKi8KLQkJYXJncy5taW5sZWZ0ID0gWEZTX0lOX01BWExFVkVMUyhhcmdzLm1wKSAtIDE7CisJCWFyZ3MubWlubGVmdCA9IGFyZ3MubXAtPm1faW5fbWF4bGV2ZWxzIC0gMTsKIAkJaWYgKChlcnJvciA9IHhmc19hbGxvY192ZXh0ZW50KCZhcmdzKSkpCiAJCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMzQ5LDcgKzM0OSw3IEBACiAJCSAqIEluaXRpYWxpemUgYWxsIGlub2RlcyBpbiB0aGlzIGJ1ZmZlciBhbmQgdGhlbiBsb2cgdGhlbS4KIAkJICoKIAkJICogWFhYOiBJdCB3b3VsZCBiZSBtdWNoIGJldHRlciBpZiB3ZSBoYWQganVzdCBvbmUgdHJhbnNhY3Rpb24gdG8KLQkJICogICAgICBsb2cgYSB3aG9sZSBjbHVzdGVyIG9mIGlub2RlcyBpbnN0ZWFkIG9mIGFsbCB0aGUgaW5kaXZkdWFsCisJCSAqICAgICAgbG9nIGEgd2hvbGUgY2x1c3RlciBvZiBpbm9kZXMgaW5zdGVhZCBvZiBhbGwgdGhlIGluZGl2aWR1YWwKIAkJICogICAgICB0cmFuc2FjdGlvbnMgY2F1c2luZyBhIGxvdCBvZiBsb2cgdHJhZmZpYy4KIAkJICovCiAJCXhmc19iaW96ZXJvKGZidWYsIDAsIG5pbm9kZXMgPDwgYXJncy5tcC0+bV9zYi5zYl9pbm9kZWxvZyk7CkBAIC05NDMsNyArOTQzLDcgQEAKIAlBU1NFUlQoKFhGU19BR0lOT19UT19PRkZTRVQobXAsIHJlYy5pcl9zdGFydGlubykgJQogCQkJCSAgIFhGU19JTk9ERVNfUEVSX0NIVU5LKSA9PSAwKTsKIAlpbm8gPSBYRlNfQUdJTk9fVE9fSU5PKG1wLCBhZ25vLCByZWMuaXJfc3RhcnRpbm8gKyBvZmZzZXQpOwotCVhGU19JTk9CVF9DTFJfRlJFRSgmcmVjLCBvZmZzZXQpOworCXJlYy5pcl9mcmVlICY9IH5YRlNfSU5PQlRfTUFTSyhvZmZzZXQpOwogCXJlYy5pcl9mcmVlY291bnQtLTsKIAlpZiAoKGVycm9yID0geGZzX2lub2J0X3VwZGF0ZShjdXIsIHJlYy5pcl9zdGFydGlubywgcmVjLmlyX2ZyZWVjb3VudCwKIAkJCXJlYy5pcl9mcmVlKSkpCkBAIC0xMTA1LDExICsxMTA1LDExIEBACiAJICovCiAJb2ZmID0gYWdpbm8gLSByZWMuaXJfc3RhcnRpbm87CiAJQVNTRVJUKG9mZiA+PSAwICYmIG9mZiA8IFhGU19JTk9ERVNfUEVSX0NIVU5LKTsKLQlBU1NFUlQoIVhGU19JTk9CVF9JU19GUkVFKCZyZWMsIG9mZikpOworCUFTU0VSVCghKHJlYy5pcl9mcmVlICYgWEZTX0lOT0JUX01BU0sob2ZmKSkpOwogCS8qCiAJICogTWFyayB0aGUgaW5vZGUgZnJlZSAmIGluY3JlbWVudCB0aGUgY291bnQuCiAJICovCi0JWEZTX0lOT0JUX1NFVF9GUkVFKCZyZWMsIG9mZik7CisJcmVjLmlyX2ZyZWUgfD0gWEZTX0lOT0JUX01BU0sob2ZmKTsKIAlyZWMuaXJfZnJlZWNvdW50Kys7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmMKaW5kZXggOTlmMjQwOC4uYzI4MmE5YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5jCkBAIC0xNjQsNyArMTY0LDcgQEAKIH0KIAogLyoKLSAqIGludGlhbCB2YWx1ZSBvZiBwdHIgZm9yIGxvb2t1cAorICogaW5pdGlhbCB2YWx1ZSBvZiBwdHIgZm9yIGxvb2t1cAogICovCiBTVEFUSUMgdm9pZAogeGZzX2lub2J0X2luaXRfcHRyX2Zyb21fY3VyKApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuaCBiL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmgKaW5kZXggNTU4MGUyNS4uZjc4MmFkMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuaAorKysgYi9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5oCkBAIC0zMiwxNCArMzIsMTQgQEAKICNkZWZpbmUJWEZTX0lCVF9NQUdJQwkweDQ5NDE0MjU0CS8qICdJQUJUJyAqLwogCiB0eXBlZGVmCV9fdWludDY0X3QJeGZzX2lub2ZyZWVfdDsKLSNkZWZpbmUJWEZTX0lOT0RFU19QRVJfQ0hVTksJKE5CQlkgKiBzaXplb2YoeGZzX2lub2ZyZWVfdCkpCisjZGVmaW5lCVhGU19JTk9ERVNfUEVSX0NIVU5LCQkoTkJCWSAqIHNpemVvZih4ZnNfaW5vZnJlZV90KSkKICNkZWZpbmUJWEZTX0lOT0RFU19QRVJfQ0hVTktfTE9HCShYRlNfTkJCWUxPRyArIDMpCi0jZGVmaW5lCVhGU19JTk9CVF9BTExfRlJFRQkoKHhmc19pbm9mcmVlX3QpLTEpCisjZGVmaW5lCVhGU19JTk9CVF9BTExfRlJFRQkJKCh4ZnNfaW5vZnJlZV90KS0xKQorI2RlZmluZQlYRlNfSU5PQlRfTUFTSyhpKQkJKCh4ZnNfaW5vZnJlZV90KTEgPDwgKGkpKQogCiBzdGF0aWMgaW5saW5lIHhmc19pbm9mcmVlX3QgeGZzX2lub2J0X21hc2tuKGludCBpLCBpbnQgbikKIHsKLQlyZXR1cm4gKCgobikgPj0gWEZTX0lOT0RFU19QRVJfQ0hVTksgPyBcCi0JCSh4ZnNfaW5vZnJlZV90KTAgOiAoKHhmc19pbm9mcmVlX3QpMSA8PCAobikpKSAtIDEpIDw8IChpKTsKKwlyZXR1cm4gKChuID49IFhGU19JTk9ERVNfUEVSX0NIVU5LID8gMCA6IFhGU19JTk9CVF9NQVNLKG4pKSAtIDEpIDw8IGk7CiB9CiAKIC8qCkBAIC02OSwyMCArNjksNiBAQAogdHlwZWRlZiBfX2JlMzIgeGZzX2lub2J0X3B0cl90OwogCiAvKgotICogQml0IG1hbmlwdWxhdGlvbnMgZm9yIGlyX2ZyZWUuCi0gKi8KLSNkZWZpbmUJWEZTX0lOT0JUX01BU0soaSkJCSgoeGZzX2lub2ZyZWVfdCkxIDw8IChpKSkKLSNkZWZpbmUJWEZTX0lOT0JUX0lTX0ZSRUUocnAsaSkJCVwKLQkJKCgocnApLT5pcl9mcmVlICYgWEZTX0lOT0JUX01BU0soaSkpICE9IDApCi0jZGVmaW5lCVhGU19JTk9CVF9TRVRfRlJFRShycCxpKQkoKHJwKS0+aXJfZnJlZSB8PSBYRlNfSU5PQlRfTUFTSyhpKSkKLSNkZWZpbmUJWEZTX0lOT0JUX0NMUl9GUkVFKHJwLGkpCSgocnApLT5pcl9mcmVlICY9IH5YRlNfSU5PQlRfTUFTSyhpKSkKLQotLyoKLSAqIE1heGltdW0gbnVtYmVyIG9mIGlub2RlIGJ0cmVlIGxldmVscy4KLSAqLwotI2RlZmluZQlYRlNfSU5fTUFYTEVWRUxTKG1wKQkJKChtcCktPm1faW5fbWF4bGV2ZWxzKQotCi0vKgogICogYmxvY2sgbnVtYmVycyBpbiB0aGUgQUcuCiAgKi8KICNkZWZpbmUJWEZTX0lCVF9CTE9DSyhtcCkJCSgoeGZzX2FnYmxvY2tfdCkoWEZTX0NOVF9CTE9DSyhtcCkgKyAxKSkKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCAxZjE3NWZhLi5mODc5YzFiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC0xMjIsNyArMTIyLDcgQEAKIAogLyoKICAqIE5PVEU6ICBUaGlzIHN0cnVjdHVyZSBtdXN0IGJlIGtlcHQgaWRlbnRpY2FsIHRvIHN0cnVjdCB4ZnNfZGlub2RlCi0gKiAJICBpbiB4ZnNfZGlub2RlLmggZXhjZXB0IGZvciB0aGUgZW5kaWFuZXNzIGFubm90YXRpb25zLgorICogCSAgaW4geGZzX2Rpbm9kZS5oIGV4Y2VwdCBmb3IgdGhlIGVuZGlhbm5lc3MgYW5ub3RhdGlvbnMuCiAgKi8KIHR5cGVkZWYgc3RydWN0IHhmc19pY2Rpbm9kZSB7CiAJX191aW50MTZfdAlkaV9tYWdpYzsJLyogaW5vZGUgbWFnaWMgIyA9IFhGU19ESU5PREVfTUFHSUMgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5oIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKaW5kZXggOTk1N2QwNi4uYTUyYWMxMiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZV9pdGVtLmgKQEAgLTQwLDcgKzQwLDYgQEAKIAlfX2ludDMyX3QJCWlsZl9ib2Zmc2V0OwkvKiBvZmYgb2YgaW5vZGUgaW4gYnVmZmVyICovCiB9IHhmc19pbm9kZV9sb2dfZm9ybWF0X3Q7CiAKLSNpZm5kZWYgSEFWRV9GT1JNQVQzMgogdHlwZWRlZiBzdHJ1Y3QgeGZzX2lub2RlX2xvZ19mb3JtYXRfMzIgewogCV9fdWludDE2X3QJCWlsZl90eXBlOwkvKiBpbm9kZSBsb2cgaXRlbSB0eXBlICovCiAJX191aW50MTZfdAkJaWxmX3NpemU7CS8qIHNpemUgb2YgdGhpcyBpdGVtICovCkBAIC01Niw3ICs1NSw2IEBACiAJX19pbnQzMl90CQlpbGZfbGVuOwkvKiBsZW4gb2YgaW5vZGUgYnVmZmVyICovCiAJX19pbnQzMl90CQlpbGZfYm9mZnNldDsJLyogb2ZmIG9mIGlub2RlIGluIGJ1ZmZlciAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB4ZnNfaW5vZGVfbG9nX2Zvcm1hdF8zMl90OwotI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHhmc19pbm9kZV9sb2dfZm9ybWF0XzY0IHsKIAlfX3VpbnQxNl90CQlpbGZfdHlwZTsJLyogaW5vZGUgbG9nIGl0ZW0gdHlwZSAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5oIGIvZnMveGZzL3hmc19pb21hcC5oCmluZGV4IGVlMWEwYzEuLmExY2MxMzIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuaAorKysgYi9mcy94ZnMveGZzX2lvbWFwLmgKQEAgLTYzLDcgKzYzLDcgQEAKICAqLwogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfaW9tYXAgewotCXhmc19kYWRkcl90CQlpb21hcF9ibjsJLyogZmlyc3QgNTEyYiBibGsgb2YgbWFwcGluZyAqLworCXhmc19kYWRkcl90CQlpb21hcF9ibjsJLyogZmlyc3QgNTEyQiBibGsgb2YgbWFwcGluZyAqLwogCXhmc19idWZ0YXJnX3QJCSppb21hcF90YXJnZXQ7CiAJeGZzX29mZl90CQlpb21hcF9vZmZzZXQ7CS8qIG9mZnNldCBvZiBtYXBwaW5nLCBieXRlcyAqLwogCXhmc19vZmZfdAkJaW9tYXBfYnNpemU7CS8qIHNpemUgb2YgbWFwcGluZywgYnl0ZXMgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMgYi9mcy94ZnMveGZzX2l0YWJsZS5jCmluZGV4IGNmOThhODAuLmFlYjJkMjIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMKKysrIGIvZnMveGZzL3hmc19pdGFibGUuYwpAQCAtODMsNyArODMsMTIgQEAKIAlidWYtPmJzX3VpZCA9IGRpYy0+ZGlfdWlkOwogCWJ1Zi0+YnNfZ2lkID0gZGljLT5kaV9naWQ7CiAJYnVmLT5ic19zaXplID0gZGljLT5kaV9zaXplOwotCXZuX2F0aW1lX3RvX2JzdGltZShWRlNfSShpcCksICZidWYtPmJzX2F0aW1lKTsKKwkvKgorCSAqIFdlIGFyZSByZWFkaW5nIHRoZSBhdGltZSBmcm9tIHRoZSBMaW51eCBpbm9kZSBiZWNhdXNlIHRoZQorCSAqIGRpbm9kZSBtaWdodCBub3QgYmUgdXB0b2RhdGUuCisJICovCisJYnVmLT5ic19hdGltZS50dl9zZWMgPSBWRlNfSShpcCktPmlfYXRpbWUudHZfc2VjOworCWJ1Zi0+YnNfYXRpbWUudHZfbnNlYyA9IFZGU19JKGlwKS0+aV9hdGltZS50dl9uc2VjOwogCWJ1Zi0+YnNfbXRpbWUudHZfc2VjID0gZGljLT5kaV9tdGltZS50X3NlYzsKIAlidWYtPmJzX210aW1lLnR2X25zZWMgPSBkaWMtPmRpX210aW1lLnRfbnNlYzsKIAlidWYtPmJzX2N0aW1lLnR2X3NlYyA9IGRpYy0+ZGlfY3RpbWUudF9zZWM7CkBAIC01NzksNyArNTg0LDcgQEAKIAkJCQkgKiBmaXJzdCBpbm9kZSBvZiB0aGUgY2x1c3Rlci4KIAkJCQkgKgogCQkJCSAqIENhcmVmdWwgd2l0aCBjbHVzdGlkeC4gICBUaGVyZSBjYW4gYmUKLQkJCQkgKiBtdWx0cGxlIGNsdXN0ZXJzIHBlciBjaHVuaywgYSBzaW5nbGUKKwkJCQkgKiBtdWx0aXBsZSBjbHVzdGVycyBwZXIgY2h1bmssIGEgc2luZ2xlCiAJCQkJICogY2x1c3RlciBwZXIgY2h1bmsgb3IgYSBjbHVzdGVyIHRoYXQgaGFzCiAJCQkJICogaW5vZGVzIHJlcHJlc2VudGVkIGZyb20gc2V2ZXJhbCBkaWZmZXJlbnQKIAkJCQkgKiBjaHVua3MgKGlmIGJsb2Nrc2l6ZSBpcyBsYXJnZSkuCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5jIGIvZnMveGZzL3hmc19sb2cuYwppbmRleCBmNDcyNmY3Li5mNzZjNmQ3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmMKQEAgLTU3NCw3ICs1NzQsNyBAQAogCWVycm9yID0geGZzX3RyYW5zX2FpbF9pbml0KG1wKTsKIAlpZiAoZXJyb3IpIHsKIAkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBBSUwgaW5pdGlhbGlzYXRpb24gZmFpbGVkOiBlcnJvciAlZCIsIGVycm9yKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBvdXRfZnJlZV9sb2c7CiAJfQogCW1wLT5tX2xvZy0+bF9haWxwID0gbXAtPm1fYWlsOwogCkBAIC01OTQsMjAgKzU5NCwyMiBAQAogCQkJbXAtPm1fZmxhZ3MgfD0gWEZTX01PVU5UX1JET05MWTsKIAkJaWYgKGVycm9yKSB7CiAJCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IGxvZyBtb3VudC9yZWNvdmVyeSBmYWlsZWQ6IGVycm9yICVkIiwgZXJyb3IpOwotCQkJZ290byBlcnJvcjsKKwkJCWdvdG8gb3V0X2Rlc3Ryb3lfYWlsOwogCQl9CiAJfQogCiAJLyogTm9ybWFsIHRyYW5zYWN0aW9ucyBjYW4gbm93IG9jY3VyICovCiAJbXAtPm1fbG9nLT5sX2ZsYWdzICY9IH5YTE9HX0FDVElWRV9SRUNPVkVSWTsKIAotCS8qIEVuZCBtb3VudGluZyBtZXNzYWdlIGluIHhmc19sb2dfbW91bnRfZmluaXNoICovCiAJcmV0dXJuIDA7Ci1lcnJvcjoKLQl4ZnNfbG9nX3VubW91bnRfZGVhbGxvYyhtcCk7CisKK291dF9kZXN0cm95X2FpbDoKKwl4ZnNfdHJhbnNfYWlsX2Rlc3Ryb3kobXApOworb3V0X2ZyZWVfbG9nOgorCXhsb2dfZGVhbGxvY19sb2cobXAtPm1fbG9nKTsKIG91dDoKIAlyZXR1cm4gZXJyb3I7Ci19CS8qIHhmc19sb2dfbW91bnQgKi8KK30KIAogLyoKICAqIEZpbmlzaCB0aGUgcmVjb3Zlcnkgb2YgdGhlIGZpbGUgc3lzdGVtLiAgVGhpcyBpcyBzZXBhcmF0ZSBmcm9tCkBAIC02MzMsMTkgKzYzNSw2IEBACiB9CiAKIC8qCi0gKiBVbm1vdW50IHByb2Nlc3NpbmcgZm9yIHRoZSBsb2cuCi0gKi8KLWludAoteGZzX2xvZ191bm1vdW50KHhmc19tb3VudF90ICptcCkKLXsKLQlpbnQJCWVycm9yOwotCi0JZXJyb3IgPSB4ZnNfbG9nX3VubW91bnRfd3JpdGUobXApOwotCXhmc19sb2dfdW5tb3VudF9kZWFsbG9jKG1wKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qCiAgKiBGaW5hbCBsb2cgd3JpdGVzIGFzIHBhcnQgb2YgdW5tb3VudC4KICAqCiAgKiBNYXJrIHRoZSBmaWxlc3lzdGVtIGNsZWFuIGFzIHVubW91bnQgaGFwcGVucy4gIE5vdGUgdGhhdCBkdXJpbmcgcmVsb2NhdGlvbgpAQCAtNzk1LDcgKzc4NCw3IEBACiAgKiBhbmQgZGVhbGxvY2F0ZSB0aGUgbG9nIGFzIHRoZSBhaWxkIHJlZmVyZW5jZXMgdGhlIGxvZy4KICAqLwogdm9pZAoteGZzX2xvZ191bm1vdW50X2RlYWxsb2MoeGZzX21vdW50X3QgKm1wKQoreGZzX2xvZ191bm1vdW50KHhmc19tb3VudF90ICptcCkKIHsKIAl4ZnNfdHJhbnNfYWlsX2Rlc3Ryb3kobXApOwogCXhsb2dfZGVhbGxvY19sb2cobXAtPm1fbG9nKTsKQEAgLTExMDksNyArMTA5OCw3IEBACiAvKgogICogUmV0dXJuIHNpemUgb2YgZWFjaCBpbi1jb3JlIGxvZyByZWNvcmQgYnVmZmVyLgogICoKLSAqIEFsbCBtYWNoaW5lcyBnZXQgOCB4IDMyS0IgYnVmZmVycyBieSBkZWZhdWx0LCB1bmxlc3MgdHVuZWQgb3RoZXJ3aXNlLgorICogQWxsIG1hY2hpbmVzIGdldCA4IHggMzJrQiBidWZmZXJzIGJ5IGRlZmF1bHQsIHVubGVzcyB0dW5lZCBvdGhlcndpc2UuCiAgKgogICogSWYgdGhlIGZpbGVzeXN0ZW0gYmxvY2tzaXplIGlzIHRvbyBsYXJnZSwgd2UgbWF5IG5lZWQgdG8gY2hvb3NlIGEKICAqIGxhcmdlciBzaXplIHNpbmNlIHRoZSBkaXJlY3RvcnkgY29kZSBjdXJyZW50bHkgbG9ncyBlbnRpcmUgYmxvY2tzLgpAQCAtMTEzOSw4ICsxMTI4LDggQEAKIAkJfQogCiAJCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNsb2d2MigmbXAtPm1fc2IpKSB7Ci0JCQkvKiAjIGhlYWRlcnMgPSBzaXplIC8gMzJLCi0JCQkgKiBvbmUgaGVhZGVyIGhvbGRzIGN5Y2xlcyBmcm9tIDMySyBvZiBkYXRhCisJCQkvKiAjIGhlYWRlcnMgPSBzaXplIC8gMzJrCisJCQkgKiBvbmUgaGVhZGVyIGhvbGRzIGN5Y2xlcyBmcm9tIDMyayBvZiBkYXRhCiAJCQkgKi8KIAogCQkJeGhkcnMgPSBtcC0+bV9sb2dic2l6ZSAvIFhMT0dfSEVBREVSX0NZQ0xFX1NJWkU7CkBAIC0xMTU2LDcgKzExNDUsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JLyogQWxsIG1hY2hpbmVzIHVzZSAzMktCIGJ1ZmZlcnMgYnkgZGVmYXVsdC4gKi8KKwkvKiBBbGwgbWFjaGluZXMgdXNlIDMya0IgYnVmZmVycyBieSBkZWZhdWx0LiAqLwogCWxvZy0+bF9pY2xvZ19zaXplID0gWExPR19CSUdfUkVDT1JEX0JTSVpFOwogCWxvZy0+bF9pY2xvZ19zaXplX2xvZyA9IFhMT0dfQklHX1JFQ09SRF9CU0hJRlQ7CiAKQEAgLTExNjQsMzIgKzExNTMsOCBAQAogCWxvZy0+bF9pY2xvZ19oc2l6ZSA9IEJCU0laRTsKIAlsb2ctPmxfaWNsb2dfaGVhZHMgPSAxOwogCi0JLyoKLQkgKiBGb3IgMTZLQiwgd2UgdXNlIDMgMzJLQiBidWZmZXJzLiAgRm9yIDMyS0IgYmxvY2sgc2l6ZXMsIHdlIHVzZQotCSAqIDQgMzJLQiBidWZmZXJzLiAgRm9yIDY0S0IgYmxvY2sgc2l6ZXMsIHdlIHVzZSA4IDMyS0IgYnVmZmVycy4KLQkgKi8KLQlpZiAobXAtPm1fc2Iuc2JfYmxvY2tzaXplID49IDE2KjEwMjQpIHsKLQkJbG9nLT5sX2ljbG9nX3NpemUgPSBYTE9HX0JJR19SRUNPUkRfQlNJWkU7Ci0JCWxvZy0+bF9pY2xvZ19zaXplX2xvZyA9IFhMT0dfQklHX1JFQ09SRF9CU0hJRlQ7Ci0JCWlmIChtcC0+bV9sb2didWZzIDw9IDApIHsKLQkJCXN3aXRjaCAobXAtPm1fc2Iuc2JfYmxvY2tzaXplKSB7Ci0JCQkgICAgY2FzZSAxNioxMDI0OgkJCS8qIDE2IEtCICovCi0JCQkJbG9nLT5sX2ljbG9nX2J1ZnMgPSAzOwotCQkJCWJyZWFrOwotCQkJICAgIGNhc2UgMzIqMTAyNDoJCQkvKiAzMiBLQiAqLwotCQkJCWxvZy0+bF9pY2xvZ19idWZzID0gNDsKLQkJCQlicmVhazsKLQkJCSAgICBjYXNlIDY0KjEwMjQ6CQkJLyogNjQgS0IgKi8KLQkJCQlsb2ctPmxfaWNsb2dfYnVmcyA9IDg7Ci0JCQkJYnJlYWs7Ci0JCQkgICAgZGVmYXVsdDoKLQkJCQl4bG9nX3BhbmljKCJYRlM6IEludmFsaWQgYmxvY2tzaXplIik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLWRvbmU6CS8qIGFyZSB3ZSBiZWluZyBhc2tlZCB0byBtYWtlIHRoZSBzaXplcyBzZWxlY3RlZCBhYm92ZSB2aXNpYmxlPyAqLworZG9uZToKKwkvKiBhcmUgd2UgYmVpbmcgYXNrZWQgdG8gbWFrZSB0aGUgc2l6ZXMgc2VsZWN0ZWQgYWJvdmUgdmlzaWJsZT8gKi8KIAlpZiAobXAtPm1fbG9nYnVmcyA9PSAwKQogCQltcC0+bV9sb2didWZzID0gbG9nLT5sX2ljbG9nX2J1ZnM7CiAJaWYgKG1wLT5tX2xvZ2JzaXplID09IDApCkBAIC0zMjE0LDcgKzMxNzksNyBAQAogICovCiAKIC8qCi0gKiBGcmVlIGEgdXNlZCB0aWNrZXQgd2hlbiBpdCdzIHJlZmNvdW50IGZhbGxzIHRvIHplcm8uCisgKiBGcmVlIGEgdXNlZCB0aWNrZXQgd2hlbiBpdHMgcmVmY291bnQgZmFsbHMgdG8gemVyby4KICAqLwogdm9pZAogeGZzX2xvZ190aWNrZXRfcHV0KApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuaCBiL2ZzL3hmcy94ZnNfbG9nLmgKaW5kZXggOGEzZTg0ZS4uZDBjOWJhYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuaAorKysgYi9mcy94ZnMveGZzX2xvZy5oCkBAIC0xNzAsOSArMTcwLDggQEAKIAkJCWludAkJIG5lbnRyaWVzLAogCQkJeGZzX2xvZ190aWNrZXRfdCB0aWNrZXQsCiAJCQl4ZnNfbHNuX3QJICpzdGFydF9sc24pOwotaW50CSAgeGZzX2xvZ191bm1vdW50KHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKIGludAkgIHhmc19sb2dfdW5tb3VudF93cml0ZShzdHJ1Y3QgeGZzX21vdW50ICptcCk7Ci12b2lkICAgICAgeGZzX2xvZ191bm1vdW50X2RlYWxsb2Moc3RydWN0IHhmc19tb3VudCAqbXApOwordm9pZCAgICAgIHhmc19sb2dfdW5tb3VudChzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiBpbnQJICB4ZnNfbG9nX2ZvcmNlX3Vtb3VudChzdHJ1Y3QgeGZzX21vdW50ICptcCwgaW50IGxvZ2Vycm9yKTsKIGludAkgIHhmc19sb2dfbmVlZF9jb3ZlcmVkKHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcHJpdi5oIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCmluZGV4IDY1NDE2N2IuLmJjYWQ1ZjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAorKysgYi9mcy94ZnMveGZzX2xvZ19wcml2LmgKQEAgLTM1OSw3ICszNTksNyBAQAogCWludAkJCWljX3NpemU7CiAJaW50CQkJaWNfb2Zmc2V0OwogCWludAkJCWljX2J3cml0ZWNudDsKLQl1c2hvcnRfdAkJaWNfc3RhdGU7CisJdW5zaWduZWQgc2hvcnQJCWljX3N0YXRlOwogCWNoYXIJCQkqaWNfZGF0YXA7CS8qIHBvaW50ZXIgdG8gaWNsb2cgZGF0YSAqLwogI2lmZGVmIFhGU19MT0dfVFJBQ0UKIAlzdHJ1Y3Qga3RyYWNlCQkqaWNfdHJhY2U7CkBAIC00NTUsNyArNDU1LDYgQEAKIAogZXh0ZXJuIHN0cnVjdCB4ZnNfYnVmICp4bG9nX2dldF9icCh4bG9nX3QgKiwgaW50KTsKIGV4dGVybiB2b2lkCSB4bG9nX3B1dF9icChzdHJ1Y3QgeGZzX2J1ZiAqKTsKLWV4dGVybiBpbnQJIHhsb2dfYnJlYWQoeGxvZ190ICosIHhmc19kYWRkcl90LCBpbnQsIHN0cnVjdCB4ZnNfYnVmICopOwogCiBleHRlcm4ga21lbV96b25lX3QJKnhmc19sb2dfdGlja2V0X3pvbmU7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYyBiL2ZzL3hmcy94ZnNfbG9nX3JlY292ZXIuYwppbmRleCA2MWFmNjEwLi43YmE0NTAxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19yZWNvdmVyLmMKKysrIGIvZnMveGZzL3hmc19sb2dfcmVjb3Zlci5jCkBAIC05NCwxMiArOTQsMzAgQEAKIAl4ZnNfYnVmX2ZyZWUoYnApOwogfQogCitTVEFUSUMgeGZzX2NhZGRyX3QKK3hsb2dfYWxpZ24oCisJeGxvZ190CQkqbG9nLAorCXhmc19kYWRkcl90CWJsa19ubywKKwlpbnQJCW5iYmxrcywKKwl4ZnNfYnVmX3QJKmJwKQoreworCXhmc19jYWRkcl90CXB0cjsKKworCWlmICghbG9nLT5sX3NlY3RiYl9sb2cpCisJCXJldHVybiBYRlNfQlVGX1BUUihicCk7CisKKwlwdHIgPSBYRlNfQlVGX1BUUihicCkgKyBCQlRPQigoaW50KWJsa19ubyAmIGxvZy0+bF9zZWN0YmJfbWFzayk7CisJQVNTRVJUKFhGU19CVUZfU0laRShicCkgPj0KKwkJQkJUT0IobmJibGtzICsgKGJsa19ubyAmIGxvZy0+bF9zZWN0YmJfbWFzaykpKTsKKwlyZXR1cm4gcHRyOworfQorCiAKIC8qCiAgKiBuYmJsa3Mgc2hvdWxkIGJlIHVpbnQsIGJ1dCBvaCB3ZWxsLiAgSnVzdCB3YW50IHRvIGNhdGNoIHRoYXQgMzItYml0IGxlbmd0aC4KICAqLwotaW50Ci14bG9nX2JyZWFkKAorU1RBVElDIGludAoreGxvZ19icmVhZF9ub2FsaWduKAogCXhsb2dfdAkJKmxvZywKIAl4ZnNfZGFkZHJfdAlibGtfbm8sCiAJaW50CQluYmJsa3MsCkBAIC0xMzcsNiArMTU1LDI0IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitTVEFUSUMgaW50Cit4bG9nX2JyZWFkKAorCXhsb2dfdAkJKmxvZywKKwl4ZnNfZGFkZHJfdAlibGtfbm8sCisJaW50CQluYmJsa3MsCisJeGZzX2J1Zl90CSpicCwKKwl4ZnNfY2FkZHJfdAkqb2Zmc2V0KQoreworCWludAkJZXJyb3I7CisKKwllcnJvciA9IHhsb2dfYnJlYWRfbm9hbGlnbihsb2csIGJsa19ubywgbmJibGtzLCBicCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwkqb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGJsa19ubywgbmJibGtzLCBicCk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBXcml0ZSBvdXQgdGhlIGJ1ZmZlciBhdCB0aGUgZ2l2ZW4gYmxvY2sgZm9yIHRoZSBnaXZlbiBudW1iZXIgb2YgYmxvY2tzLgogICogVGhlIGJ1ZmZlciBpcyBrZXB0IGxvY2tlZCBhY3Jvc3MgdGhlIHdyaXRlIGFuZCBpcyByZXR1cm5lZCBsb2NrZWQuCkBAIC0xODAsMjQgKzIxNiw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1TVEFUSUMgeGZzX2NhZGRyX3QKLXhsb2dfYWxpZ24oCi0JeGxvZ190CQkqbG9nLAotCXhmc19kYWRkcl90CWJsa19ubywKLQlpbnQJCW5iYmxrcywKLQl4ZnNfYnVmX3QJKmJwKQotewotCXhmc19jYWRkcl90CXB0cjsKLQotCWlmICghbG9nLT5sX3NlY3RiYl9sb2cpCi0JCXJldHVybiBYRlNfQlVGX1BUUihicCk7Ci0KLQlwdHIgPSBYRlNfQlVGX1BUUihicCkgKyBCQlRPQigoaW50KWJsa19ubyAmIGxvZy0+bF9zZWN0YmJfbWFzayk7Ci0JQVNTRVJUKFhGU19CVUZfU0laRShicCkgPj0KLQkJQkJUT0IobmJibGtzICsgKGJsa19ubyAmIGxvZy0+bF9zZWN0YmJfbWFzaykpKTsKLQlyZXR1cm4gcHRyOwotfQotCiAjaWZkZWYgREVCVUcKIC8qCiAgKiBkdW1wIGRlYnVnIHN1cGVyYmxvY2sgYW5kIGxvZyByZWNvcmQgaW5mb3JtYXRpb24KQEAgLTIxMSwxMSArMjI5LDExIEBACiAKIAljbW5fZXJyKENFX0RFQlVHLCAiJXM6ICBTQiA6IHV1aWQgPSAiLCBfX2Z1bmNfXyk7CiAJZm9yIChiID0gMDsgYiA8IDE2OyBiKyspCi0JCWNtbl9lcnIoQ0VfREVCVUcsICIlMDJ4IiwgKCh1Y2hhcl90ICopJm1wLT5tX3NiLnNiX3V1aWQpW2JdKTsKKwkJY21uX2VycihDRV9ERUJVRywgIiUwMngiLCAoKF9fdWludDhfdCAqKSZtcC0+bV9zYi5zYl91dWlkKVtiXSk7CiAJY21uX2VycihDRV9ERUJVRywgIiwgZm10ID0gJWRcbiIsIFhMT0dfRk1UKTsKIAljbW5fZXJyKENFX0RFQlVHLCAiICAgIGxvZyA6IHV1aWQgPSAiKTsKIAlmb3IgKGIgPSAwOyBiIDwgMTY7IGIrKykKLQkJY21uX2VycihDRV9ERUJVRywgIiUwMngiLCgodWNoYXJfdCAqKSZoZWFkLT5oX2ZzX3V1aWQpW2JdKTsKKwkJY21uX2VycihDRV9ERUJVRywgIiUwMngiLCAoKF9fdWludDhfdCAqKSZoZWFkLT5oX2ZzX3V1aWQpW2JdKTsKIAljbW5fZXJyKENFX0RFQlVHLCAiLCBmbXQgPSAlZFxuIiwgYmUzMl90b19jcHUoaGVhZC0+aF9mbXQpKTsKIH0KICNlbHNlCkBAIC0zMjEsOSArMzM5LDkgQEAKIAogCW1pZF9ibGsgPSBCTEtfQVZHKGZpcnN0X2JsaywgKmxhc3RfYmxrKTsKIAl3aGlsZSAobWlkX2JsayAhPSBmaXJzdF9ibGsgJiYgbWlkX2JsayAhPSAqbGFzdF9ibGspIHsKLQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBtaWRfYmxrLCAxLCBicCkpKQorCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBtaWRfYmxrLCAxLCBicCwgJm9mZnNldCk7CisJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKLQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIG1pZF9ibGssIDEsIGJwKTsKIAkJbWlkX2N5Y2xlID0geGxvZ19nZXRfY3ljbGUob2Zmc2V0KTsKIAkJaWYgKG1pZF9jeWNsZSA9PSBjeWNsZSkgewogCQkJKmxhc3RfYmxrID0gbWlkX2JsazsKQEAgLTM3OSwxMCArMzk3LDEwIEBACiAKIAkJYmNvdW50ID0gbWluKGJ1ZmJsa3MsIChzdGFydF9ibGsgKyBuYmJsa3MgLSBpKSk7CiAKLQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBpLCBiY291bnQsIGJwKSkpCisJCWVycm9yID0geGxvZ19icmVhZChsb2csIGksIGJjb3VudCwgYnAsICZidWYpOworCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKIAotCQlidWYgPSB4bG9nX2FsaWduKGxvZywgaSwgYmNvdW50LCBicCk7CiAJCWZvciAoaiA9IDA7IGogPCBiY291bnQ7IGorKykgewogCQkJY3ljbGUgPSB4bG9nX2dldF9jeWNsZShidWYpOwogCQkJaWYgKGN5Y2xlID09IHN0b3Bfb25fY3ljbGVfbm8pIHsKQEAgLTQzNiw5ICs0NTQsOSBAQAogCQkJcmV0dXJuIEVOT01FTTsKIAkJc21hbGxtZW0gPSAxOwogCX0gZWxzZSB7Ci0JCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgc3RhcnRfYmxrLCBudW1fYmxrcywgYnApKSkKKwkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgc3RhcnRfYmxrLCBudW1fYmxrcywgYnAsICZvZmZzZXQpOworCQlpZiAoZXJyb3IpCiAJCQlnb3RvIG91dDsKLQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIHN0YXJ0X2JsaywgbnVtX2Jsa3MsIGJwKTsKIAkJb2Zmc2V0ICs9ICgobnVtX2Jsa3MgLSAxKSA8PCBCQlNISUZUKTsKIAl9CiAKQEAgLTQ1Myw5ICs0NzEsOSBAQAogCQl9CiAKIAkJaWYgKHNtYWxsbWVtKSB7Ci0JCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIGksIDEsIGJwKSkpCisJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBpLCAxLCBicCwgJm9mZnNldCk7CisJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBvdXQ7Ci0JCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgaSwgMSwgYnApOwogCQl9CiAKIAkJaGVhZCA9ICh4bG9nX3JlY19oZWFkZXJfdCAqKW9mZnNldDsKQEAgLTU1OSwxNSArNTc3LDE4IEBACiAJYnAgPSB4bG9nX2dldF9icChsb2csIDEpOwogCWlmICghYnApCiAJCXJldHVybiBFTk9NRU07Ci0JaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCAwLCAxLCBicCkpKQorCisJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgMCwgMSwgYnAsICZvZmZzZXQpOworCWlmIChlcnJvcikKIAkJZ290byBicF9lcnI7Ci0Jb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIDAsIDEsIGJwKTsKKwogCWZpcnN0X2hhbGZfY3ljbGUgPSB4bG9nX2dldF9jeWNsZShvZmZzZXQpOwogCiAJbGFzdF9ibGsgPSBoZWFkX2JsayA9IGxvZ19iYm51bSAtIDE7CS8qIGdldCBjeWNsZSAjIG9mIGxhc3QgYmxvY2sgKi8KLQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIGxhc3RfYmxrLCAxLCBicCkpKQorCWVycm9yID0geGxvZ19icmVhZChsb2csIGxhc3RfYmxrLCAxLCBicCwgJm9mZnNldCk7CisJaWYgKGVycm9yKQogCQlnb3RvIGJwX2VycjsKLQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgbGFzdF9ibGssIDEsIGJwKTsKKwogCWxhc3RfaGFsZl9jeWNsZSA9IHhsb2dfZ2V0X2N5Y2xlKG9mZnNldCk7CiAJQVNTRVJUKGxhc3RfaGFsZl9jeWNsZSAhPSAwKTsKIApAQCAtODE3LDkgKzgzOCwxMCBAQAogCWlmICghYnApCiAJCXJldHVybiBFTk9NRU07CiAJaWYgKCpoZWFkX2JsayA9PSAwKSB7CQkJCS8qIHNwZWNpYWwgY2FzZSAqLwotCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIDAsIDEsIGJwKSkpCisJCWVycm9yID0geGxvZ19icmVhZChsb2csIDAsIDEsIGJwLCAmb2Zmc2V0KTsKKwkJaWYgKGVycm9yKQogCQkJZ290byBicmVhZF9lcnI7Ci0JCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCAwLCAxLCBicCk7CisKIAkJaWYgKHhsb2dfZ2V0X2N5Y2xlKG9mZnNldCkgPT0gMCkgewogCQkJKnRhaWxfYmxrID0gMDsKIAkJCS8qIGxlYXZlIGFsbCBvdGhlciBsb2cgaW5pdGVkIHZhbHVlcyBhbG9uZSAqLwpAQCAtODMyLDkgKzg1NCwxMCBAQAogCSAqLwogCUFTU0VSVCgqaGVhZF9ibGsgPCBJTlRfTUFYKTsKIAlmb3IgKGkgPSAoaW50KSgqaGVhZF9ibGspIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBpLCAxLCBicCkpKQorCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBpLCAxLCBicCwgJm9mZnNldCk7CisJCWlmIChlcnJvcikKIAkJCWdvdG8gYnJlYWRfZXJyOwotCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgaSwgMSwgYnApOworCiAJCWlmIChYTE9HX0hFQURFUl9NQUdJQ19OVU0gPT0gYmUzMl90b19jcHUoKihfX2JlMzIgKilvZmZzZXQpKSB7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKQEAgLTg0OCw5ICs4NzEsMTAgQEAKIAkgKi8KIAlpZiAoIWZvdW5kKSB7CiAJCWZvciAoaSA9IGxvZy0+bF9sb2dCQnNpemUgLSAxOyBpID49IChpbnQpKCpoZWFkX2Jsayk7IGktLSkgewotCQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBpLCAxLCBicCkpKQorCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgaSwgMSwgYnAsICZvZmZzZXQpOworCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gYnJlYWRfZXJyOwotCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGksIDEsIGJwKTsKKwogCQkJaWYgKFhMT0dfSEVBREVSX01BR0lDX05VTSA9PQogCQkJICAgIGJlMzJfdG9fY3B1KCooX19iZTMyICopb2Zmc2V0KSkgewogCQkJCWZvdW5kID0gMjsKQEAgLTkyMiwxMCArOTQ2LDEwIEBACiAJaWYgKCpoZWFkX2JsayA9PSBhZnRlcl91bW91bnRfYmxrICYmCiAJICAgIGJlMzJfdG9fY3B1KHJoZWFkLT5oX251bV9sb2dvcHMpID09IDEpIHsKIAkJdW1vdW50X2RhdGFfYmxrID0gKGkgKyBoYmxrcykgJSBsb2ctPmxfbG9nQkJzaXplOwotCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIHVtb3VudF9kYXRhX2JsaywgMSwgYnApKSkgeworCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCB1bW91bnRfZGF0YV9ibGssIDEsIGJwLCAmb2Zmc2V0KTsKKwkJaWYgKGVycm9yKQogCQkJZ290byBicmVhZF9lcnI7Ci0JCX0KLQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIHVtb3VudF9kYXRhX2JsaywgMSwgYnApOworCiAJCW9wX2hlYWQgPSAoeGxvZ19vcF9oZWFkZXJfdCAqKW9mZnNldDsKIAkJaWYgKG9wX2hlYWQtPm9oX2ZsYWdzICYgWExPR19VTk1PVU5UX1RSQU5TKSB7CiAJCQkvKgpAQCAtMTAxNyw5ICsxMDQxLDEwIEBACiAJYnAgPSB4bG9nX2dldF9icChsb2csIDEpOwogCWlmICghYnApCiAJCXJldHVybiBFTk9NRU07Ci0JaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCAwLCAxLCBicCkpKQorCWVycm9yID0geGxvZ19icmVhZChsb2csIDAsIDEsIGJwLCAmb2Zmc2V0KTsKKwlpZiAoZXJyb3IpCiAJCWdvdG8gYnBfZXJyOwotCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCAwLCAxLCBicCk7CisKIAlmaXJzdF9jeWNsZSA9IHhsb2dfZ2V0X2N5Y2xlKG9mZnNldCk7CiAJaWYgKGZpcnN0X2N5Y2xlID09IDApIHsJCS8qIGNvbXBsZXRlbHkgemVyb2VkIGxvZyAqLwogCQkqYmxrX25vID0gMDsKQEAgLTEwMjgsOSArMTA1MywxMCBAQAogCX0KIAogCS8qIGNoZWNrIHBhcnRpYWxseSB6ZXJvZWQgbG9nICovCi0JaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBsb2dfYmJudW0tMSwgMSwgYnApKSkKKwllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBsb2dfYmJudW0tMSwgMSwgYnAsICZvZmZzZXQpOworCWlmIChlcnJvcikKIAkJZ290byBicF9lcnI7Ci0Jb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGxvZ19iYm51bS0xLCAxLCBicCk7CisKIAlsYXN0X2N5Y2xlID0geGxvZ19nZXRfY3ljbGUob2Zmc2V0KTsKIAlpZiAobGFzdF9jeWNsZSAhPSAwKSB7CQkvKiBsb2cgY29tcGxldGVseSB3cml0dGVuIHRvICovCiAJCXhsb2dfcHV0X2JwKGJwKTsKQEAgLTExNTIsMTAgKzExNzgsMTAgQEAKIAkgKi8KIAliYWxpZ24gPSBYTE9HX1NFQ1RPUl9ST1VORERPV05fQkxLTk8obG9nLCBzdGFydF9ibG9jayk7CiAJaWYgKGJhbGlnbiAhPSBzdGFydF9ibG9jaykgewotCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIHN0YXJ0X2Jsb2NrLCAxLCBicCkpKSB7Ci0JCQl4bG9nX3B1dF9icChicCk7Ci0JCQlyZXR1cm4gZXJyb3I7Ci0JCX0KKwkJZXJyb3IgPSB4bG9nX2JyZWFkX25vYWxpZ24obG9nLCBzdGFydF9ibG9jaywgMSwgYnApOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9wdXRfYnA7CisKIAkJaiA9IHN0YXJ0X2Jsb2NrIC0gYmFsaWduOwogCX0KIApAQCAtMTE3NSwxMCArMTIwMSwxNCBAQAogCQkJYmFsaWduID0gQkJUT0IoZWFsaWduIC0gc3RhcnRfYmxvY2spOwogCQkJZXJyb3IgPSBYRlNfQlVGX1NFVF9QVFIoYnAsIG9mZnNldCArIGJhbGlnbiwKIAkJCQkJCUJCVE9CKHNlY3RiYikpOwotCQkJaWYgKCFlcnJvcikKLQkJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBlYWxpZ24sIHNlY3RiYiwgYnApOwotCQkJaWYgKCFlcnJvcikKLQkJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihicCwgb2Zmc2V0LCBidWZibGtzKTsKKwkJCWlmIChlcnJvcikKKwkJCQlicmVhazsKKworCQkJZXJyb3IgPSB4bG9nX2JyZWFkX25vYWxpZ24obG9nLCBlYWxpZ24sIHNlY3RiYiwgYnApOworCQkJaWYgKGVycm9yKQorCQkJCWJyZWFrOworCisJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihicCwgb2Zmc2V0LCBidWZibGtzKTsKIAkJCWlmIChlcnJvcikKIAkJCQlicmVhazsKIAkJfQpAQCAtMTE5NSw2ICsxMjI1LDggQEAKIAkJc3RhcnRfYmxvY2sgKz0gZW5kY291bnQ7CiAJCWogPSAwOwogCX0KKworIG91dF9wdXRfYnA6CiAJeGxvZ19wdXRfYnAoYnApOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTI1MTEsMTYgKzI1NDMsMTAgQEAKIAl9CiAKIHdyaXRlX2lub2RlX2J1ZmZlcjoKLQlpZiAoSVRFTV9UWVBFKGl0ZW0pID09IFhGU19MSV9JTk9ERSkgewotCQlBU1NFUlQoYnAtPmJfbW91bnQgPT0gTlVMTCB8fCBicC0+Yl9tb3VudCA9PSBtcCk7Ci0JCWJwLT5iX21vdW50ID0gbXA7Ci0JCVhGU19CVUZfU0VUX0lPRE9ORV9GVU5DKGJwLCB4bG9nX3JlY292ZXJfaW9kb25lKTsKLQkJeGZzX2Jkd3JpdGUobXAsIGJwKTsKLQl9IGVsc2UgewotCQlYRlNfQlVGX1NUQUxFKGJwKTsKLQkJZXJyb3IgPSB4ZnNfYndyaXRlKG1wLCBicCk7Ci0JfQotCisJQVNTRVJUKGJwLT5iX21vdW50ID09IE5VTEwgfHwgYnAtPmJfbW91bnQgPT0gbXApOworCWJwLT5iX21vdW50ID0gbXA7CisJWEZTX0JVRl9TRVRfSU9ET05FX0ZVTkMoYnAsIHhsb2dfcmVjb3Zlcl9pb2RvbmUpOworCXhmc19iZHdyaXRlKG1wLCBicCk7CiBlcnJvcjoKIAlpZiAobmVlZF9mcmVlKQogCQlrbWVtX2ZyZWUoaW5fZik7CkBAIC0yNzY5LDUxICsyNzk1LDQ4IEBACiAJaW50CQkJZXJyb3IgPSAwOwogCXhsb2dfcmVjb3Zlcl9pdGVtX3QJKml0ZW0sICpmaXJzdF9pdGVtOwogCi0JaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl9yZW9yZGVyX3RyYW5zKHRyYW5zKSkpCisJZXJyb3IgPSB4bG9nX3JlY292ZXJfcmVvcmRlcl90cmFucyh0cmFucyk7CisJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CisKIAlmaXJzdF9pdGVtID0gaXRlbSA9IHRyYW5zLT5yX2l0ZW1xOwogCWRvIHsKLQkJLyoKLQkJICogd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgYmxvY2sgbnVtYmVyIGJlaW5nCi0JCSAqIHRydW5jYXRlZCBpbiA+IDEgVEIgYnVmZmVycyBiZWNhdXNlIGluIHVzZXItbGFuZCwKLQkJICogd2UncmUgbm93IG4zMiBvciA2NC1iaXQgc28geGZzX2RhZGRyX3QgaXMgNjQtYml0cyBzbwotCQkgKiB0aGUgYmxrbm9zIHdpbGwgZ2V0IHRocm91Z2ggdGhlIHVzZXItbW9kZSBidWZmZXIKLQkJICogY2FjaGUgcHJvcGVybHkuICBUaGUgb25seSBiYWQgY2FzZSBpcyBvMzIga2VybmVscwotCQkgKiB3aGVyZSB4ZnNfZGFkZHJfdCBpcyAzMi1iaXRzIGJ1dCBtb3VudCB3aWxsIHdhcm4gdXMKLQkJICogb2ZmIGEgPiAxIFRCIGZpbGVzeXN0ZW0gYmVmb3JlIHdlIGdldCBoZXJlLgotCQkgKi8KLQkJaWYgKChJVEVNX1RZUEUoaXRlbSkgPT0gWEZTX0xJX0JVRikpIHsKLQkJCWlmICAoKGVycm9yID0geGxvZ19yZWNvdmVyX2RvX2J1ZmZlcl90cmFucyhsb2csIGl0ZW0sCi0JCQkJCQkJCSBwYXNzKSkpCi0JCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoKElURU1fVFlQRShpdGVtKSA9PSBYRlNfTElfSU5PREUpKSB7Ci0JCQlpZiAoKGVycm9yID0geGxvZ19yZWNvdmVyX2RvX2lub2RlX3RyYW5zKGxvZywgaXRlbSwKLQkJCQkJCQkJcGFzcykpKQotCQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKElURU1fVFlQRShpdGVtKSA9PSBYRlNfTElfRUZJKSB7Ci0JCQlpZiAoKGVycm9yID0geGxvZ19yZWNvdmVyX2RvX2VmaV90cmFucyhsb2csIGl0ZW0sIHRyYW5zLT5yX2xzbiwKLQkJCQkJCSAgcGFzcykpKQotCQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKElURU1fVFlQRShpdGVtKSA9PSBYRlNfTElfRUZEKSB7CisJCXN3aXRjaCAoSVRFTV9UWVBFKGl0ZW0pKSB7CisJCWNhc2UgWEZTX0xJX0JVRjoKKwkJCWVycm9yID0geGxvZ19yZWNvdmVyX2RvX2J1ZmZlcl90cmFucyhsb2csIGl0ZW0sIHBhc3MpOworCQkJYnJlYWs7CisJCWNhc2UgWEZTX0xJX0lOT0RFOgorCQkJZXJyb3IgPSB4bG9nX3JlY292ZXJfZG9faW5vZGVfdHJhbnMobG9nLCBpdGVtLCBwYXNzKTsKKwkJCWJyZWFrOworCQljYXNlIFhGU19MSV9FRkk6CisJCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19lZmlfdHJhbnMobG9nLCBpdGVtLAorCQkJCQkJCSAgdHJhbnMtPnJfbHNuLCBwYXNzKTsKKwkJCWJyZWFrOworCQljYXNlIFhGU19MSV9FRkQ6CiAJCQl4bG9nX3JlY292ZXJfZG9fZWZkX3RyYW5zKGxvZywgaXRlbSwgcGFzcyk7Ci0JCX0gZWxzZSBpZiAoSVRFTV9UWVBFKGl0ZW0pID09IFhGU19MSV9EUVVPVCkgewotCQkJaWYgKChlcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19kcXVvdF90cmFucyhsb2csIGl0ZW0sCi0JCQkJCQkJCSAgIHBhc3MpKSkKLQkJCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoKElURU1fVFlQRShpdGVtKSA9PSBYRlNfTElfUVVPVEFPRkYpKSB7Ci0JCQlpZiAoKGVycm9yID0geGxvZ19yZWNvdmVyX2RvX3F1b3Rhb2ZmX3RyYW5zKGxvZywgaXRlbSwKLQkJCQkJCQkJICAgcGFzcykpKQotCQkJCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCXhsb2dfd2FybigiWEZTOiB4bG9nX3JlY292ZXJfZG9fdHJhbnMiKTsKKwkJCWVycm9yID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFhGU19MSV9EUVVPVDoKKwkJCWVycm9yID0geGxvZ19yZWNvdmVyX2RvX2RxdW90X3RyYW5zKGxvZywgaXRlbSwgcGFzcyk7CisJCQlicmVhazsKKwkJY2FzZSBYRlNfTElfUVVPVEFPRkY6CisJCQllcnJvciA9IHhsb2dfcmVjb3Zlcl9kb19xdW90YW9mZl90cmFucyhsb2csIGl0ZW0sCisJCQkJCQkJICAgICAgIHBhc3MpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl4bG9nX3dhcm4oCisJIlhGUzogaW52YWxpZCBpdGVtIHR5cGUgKCVkKSB4bG9nX3JlY292ZXJfZG9fdHJhbnMiLCBJVEVNX1RZUEUoaXRlbSkpOwogCQkJQVNTRVJUKDApOwogCQkJZXJyb3IgPSBYRlNfRVJST1IoRUlPKTsKIAkJCWJyZWFrOwogCQl9CisKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOwogCQlpdGVtID0gaXRlbS0+cmlfbmV4dDsKIAl9IHdoaWxlIChmaXJzdF9pdGVtICE9IGl0ZW0pOwogCi0JcmV0dXJuIGVycm9yOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMzQ5MCw5ICszNTEzLDExIEBACiAJCWhicCA9IHhsb2dfZ2V0X2JwKGxvZywgMSk7CiAJCWlmICghaGJwKQogCQkJcmV0dXJuIEVOT01FTTsKLQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCB0YWlsX2JsaywgMSwgaGJwKSkpCisKKwkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgdGFpbF9ibGssIDEsIGhicCwgJm9mZnNldCk7CisJCWlmIChlcnJvcikKIAkJCWdvdG8gYnJlYWRfZXJyMTsKLQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIHRhaWxfYmxrLCAxLCBoYnApOworCiAJCXJoZWFkID0gKHhsb2dfcmVjX2hlYWRlcl90ICopb2Zmc2V0OwogCQllcnJvciA9IHhsb2dfdmFsaWRfcmVjX2hlYWRlcihsb2csIHJoZWFkLCB0YWlsX2Jsayk7CiAJCWlmIChlcnJvcikKQEAgLTM1MjYsOSArMzU1MSwxMCBAQAogCW1lbXNldChyaGFzaCwgMCwgc2l6ZW9mKHJoYXNoKSk7CiAJaWYgKHRhaWxfYmxrIDw9IGhlYWRfYmxrKSB7CiAJCWZvciAoYmxrX25vID0gdGFpbF9ibGs7IGJsa19ubyA8IGhlYWRfYmxrOyApIHsKLQkJCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLCBoYmxrcywgaGJwKSkpCisJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8sIGhibGtzLCBoYnAsICZvZmZzZXQpOworCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gYnJlYWRfZXJyMjsKLQkJCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCBibGtfbm8sIGhibGtzLCBoYnApOworCiAJCQlyaGVhZCA9ICh4bG9nX3JlY19oZWFkZXJfdCAqKW9mZnNldDsKIAkJCWVycm9yID0geGxvZ192YWxpZF9yZWNfaGVhZGVyKGxvZywgcmhlYWQsIGJsa19ubyk7CiAJCQlpZiAoZXJyb3IpCkBAIC0zNTM2LDEwICszNTYyLDExIEBACiAKIAkJCS8qIGJsb2NrcyBpbiBkYXRhIHNlY3Rpb24gKi8KIAkJCWJibGtzID0gKGludClCVE9CQihiZTMyX3RvX2NwdShyaGVhZC0+aF9sZW4pKTsKLQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubyArIGhibGtzLCBiYmxrcywgZGJwKTsKKwkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubyArIGhibGtzLCBiYmxrcywgZGJwLAorCQkJCQkgICAmb2Zmc2V0KTsKIAkJCWlmIChlcnJvcikKIAkJCQlnb3RvIGJyZWFkX2VycjI7Ci0JCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgYmxrX25vICsgaGJsa3MsIGJibGtzLCBkYnApOworCiAJCQl4bG9nX3VucGFja19kYXRhKHJoZWFkLCBvZmZzZXQsIGxvZyk7CiAJCQlpZiAoKGVycm9yID0geGxvZ19yZWNvdmVyX3Byb2Nlc3NfZGF0YShsb2csCiAJCQkJCQlyaGFzaCwgcmhlYWQsIG9mZnNldCwgcGFzcykpKQpAQCAtMzU2MiwxMCArMzU4OSwxMCBAQAogCQkJd3JhcHBlZF9oYmxrcyA9IDA7CiAJCQlpZiAoYmxrX25vICsgaGJsa3MgPD0gbG9nLT5sX2xvZ0JCc2l6ZSkgewogCQkJCS8qIFJlYWQgaGVhZGVyIGluIG9uZSByZWFkICovCi0JCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLCBoYmxrcywgaGJwKTsKKwkJCQllcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8sIGhibGtzLCBoYnAsCisJCQkJCQkgICAmb2Zmc2V0KTsKIAkJCQlpZiAoZXJyb3IpCiAJCQkJCWdvdG8gYnJlYWRfZXJyMjsKLQkJCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgYmxrX25vLCBoYmxrcywgaGJwKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogVGhpcyBMUiBpcyBzcGxpdCBhY3Jvc3MgcGh5c2ljYWwgbG9nIGVuZCAqLwogCQkJCWlmIChibGtfbm8gIT0gbG9nLT5sX2xvZ0JCc2l6ZSkgewpAQCAtMzU3MywxMiArMzYwMCwxMyBAQAogCQkJCQlBU1NFUlQoYmxrX25vIDw9IElOVF9NQVgpOwogCQkJCQlzcGxpdF9oYmxrcyA9IGxvZy0+bF9sb2dCQnNpemUgLSAoaW50KWJsa19ubzsKIAkJCQkJQVNTRVJUKHNwbGl0X2hibGtzID4gMCk7Ci0JCQkJCWlmICgoZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLAotCQkJCQkJCXNwbGl0X2hibGtzLCBoYnApKSkKKwkJCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLAorCQkJCQkJCSAgIHNwbGl0X2hibGtzLCBoYnAsCisJCQkJCQkJICAgJm9mZnNldCk7CisJCQkJCWlmIChlcnJvcikKIAkJCQkJCWdvdG8gYnJlYWRfZXJyMjsKLQkJCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGJsa19ubywKLQkJCQkJCQlzcGxpdF9oYmxrcywgaGJwKTsKIAkJCQl9CisKIAkJCQkvKgogCQkJCSAqIE5vdGU6IHRoaXMgYmxhY2sgbWFnaWMgc3RpbGwgd29ya3Mgd2l0aAogCQkJCSAqIGxhcmdlIHNlY3RvciBzaXplcyAobm9uLTUxMikgb25seSBiZWNhdXNlOgpAQCAtMzU5NiwxNCArMzYyNCwxOSBAQAogCQkJCWVycm9yID0gWEZTX0JVRl9TRVRfUFRSKGhicCwKIAkJCQkJCWJ1ZmFkZHIgKyBCQlRPQihzcGxpdF9oYmxrcyksCiAJCQkJCQlCQlRPQihoYmxrcyAtIHNwbGl0X2hibGtzKSk7Ci0JCQkJaWYgKCFlcnJvcikKLQkJCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgMCwKLQkJCQkJCQl3cmFwcGVkX2hibGtzLCBoYnApOwotCQkJCWlmICghZXJyb3IpCi0JCQkJCWVycm9yID0gWEZTX0JVRl9TRVRfUFRSKGhicCwgYnVmYWRkciwKKwkJCQlpZiAoZXJyb3IpCisJCQkJCWdvdG8gYnJlYWRfZXJyMjsKKworCQkJCWVycm9yID0geGxvZ19icmVhZF9ub2FsaWduKGxvZywgMCwKKwkJCQkJCQkgICB3cmFwcGVkX2hibGtzLCBoYnApOworCQkJCWlmIChlcnJvcikKKwkJCQkJZ290byBicmVhZF9lcnIyOworCisJCQkJZXJyb3IgPSBYRlNfQlVGX1NFVF9QVFIoaGJwLCBidWZhZGRyLAogCQkJCQkJCUJCVE9CKGhibGtzKSk7CiAJCQkJaWYgKGVycm9yKQogCQkJCQlnb3RvIGJyZWFkX2VycjI7CisKIAkJCQlpZiAoIW9mZnNldCkKIAkJCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIDAsCiAJCQkJCQkJd3JhcHBlZF9oYmxrcywgaGJwKTsKQEAgLTM2MTksMTAgKzM2NTIsMTAgQEAKIAogCQkJLyogUmVhZCBpbiBkYXRhIGZvciBsb2cgcmVjb3JkICovCiAJCQlpZiAoYmxrX25vICsgYmJsa3MgPD0gbG9nLT5sX2xvZ0JCc2l6ZSkgewotCQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywgYmJsa3MsIGRicCk7CisJCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLCBiYmxrcywgZGJwLAorCQkJCQkJICAgJm9mZnNldCk7CiAJCQkJaWYgKGVycm9yKQogCQkJCQlnb3RvIGJyZWFkX2VycjI7Ci0JCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGJsa19ubywgYmJsa3MsIGRicCk7CiAJCQl9IGVsc2UgewogCQkJCS8qIFRoaXMgbG9nIHJlY29yZCBpcyBzcGxpdCBhY3Jvc3MgdGhlCiAJCQkJICogcGh5c2ljYWwgZW5kIG9mIGxvZyAqLwpAQCAtMzYzNiwxMiArMzY2OSwxMyBAQAogCQkJCQlzcGxpdF9iYmxrcyA9CiAJCQkJCQlsb2ctPmxfbG9nQkJzaXplIC0gKGludClibGtfbm87CiAJCQkJCUFTU0VSVChzcGxpdF9iYmxrcyA+IDApOwotCQkJCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywKLQkJCQkJCQlzcGxpdF9iYmxrcywgZGJwKSkpCisJCQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywKKwkJCQkJCQlzcGxpdF9iYmxrcywgZGJwLAorCQkJCQkJCSZvZmZzZXQpOworCQkJCQlpZiAoZXJyb3IpCiAJCQkJCQlnb3RvIGJyZWFkX2VycjI7Ci0JCQkJCW9mZnNldCA9IHhsb2dfYWxpZ24obG9nLCBibGtfbm8sCi0JCQkJCQkJc3BsaXRfYmJsa3MsIGRicCk7CiAJCQkJfQorCiAJCQkJLyoKIAkJCQkgKiBOb3RlOiB0aGlzIGJsYWNrIG1hZ2ljIHN0aWxsIHdvcmtzIHdpdGgKIAkJCQkgKiBsYXJnZSBzZWN0b3Igc2l6ZXMgKG5vbi01MTIpIG9ubHkgYmVjYXVzZToKQEAgLTM2NTgsMTUgKzM2OTIsMTkgQEAKIAkJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihkYnAsCiAJCQkJCQlidWZhZGRyICsgQkJUT0Ioc3BsaXRfYmJsa3MpLAogCQkJCQkJQkJUT0IoYmJsa3MgLSBzcGxpdF9iYmxrcykpOwotCQkJCWlmICghZXJyb3IpCi0JCQkJCWVycm9yID0geGxvZ19icmVhZChsb2csIHdyYXBwZWRfaGJsa3MsCi0JCQkJCQkJYmJsa3MgLSBzcGxpdF9iYmxrcywKLQkJCQkJCQlkYnApOwotCQkJCWlmICghZXJyb3IpCi0JCQkJCWVycm9yID0gWEZTX0JVRl9TRVRfUFRSKGRicCwgYnVmYWRkciwKLQkJCQkJCQloX3NpemUpOwogCQkJCWlmIChlcnJvcikKIAkJCQkJZ290byBicmVhZF9lcnIyOworCisJCQkJZXJyb3IgPSB4bG9nX2JyZWFkX25vYWxpZ24obG9nLCB3cmFwcGVkX2hibGtzLAorCQkJCQkJYmJsa3MgLSBzcGxpdF9iYmxrcywKKwkJCQkJCWRicCk7CisJCQkJaWYgKGVycm9yKQorCQkJCQlnb3RvIGJyZWFkX2VycjI7CisKKwkJCQllcnJvciA9IFhGU19CVUZfU0VUX1BUUihkYnAsIGJ1ZmFkZHIsIGhfc2l6ZSk7CisJCQkJaWYgKGVycm9yKQorCQkJCQlnb3RvIGJyZWFkX2VycjI7CisKIAkJCQlpZiAoIW9mZnNldCkKIAkJCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIHdyYXBwZWRfaGJsa3MsCiAJCQkJCQliYmxrcyAtIHNwbGl0X2JibGtzLCBkYnApOwpAQCAtMzY4MywxNyArMzcyMSwyMSBAQAogCiAJCS8qIHJlYWQgZmlyc3QgcGFydCBvZiBwaHlzaWNhbCBsb2cgKi8KIAkJd2hpbGUgKGJsa19ubyA8IGhlYWRfYmxrKSB7Ci0JCQlpZiAoKGVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubywgaGJsa3MsIGhicCkpKQorCQkJZXJyb3IgPSB4bG9nX2JyZWFkKGxvZywgYmxrX25vLCBoYmxrcywgaGJwLCAmb2Zmc2V0KTsKKwkJCWlmIChlcnJvcikKIAkJCQlnb3RvIGJyZWFkX2VycjI7Ci0JCQlvZmZzZXQgPSB4bG9nX2FsaWduKGxvZywgYmxrX25vLCBoYmxrcywgaGJwKTsKKwogCQkJcmhlYWQgPSAoeGxvZ19yZWNfaGVhZGVyX3QgKilvZmZzZXQ7CiAJCQllcnJvciA9IHhsb2dfdmFsaWRfcmVjX2hlYWRlcihsb2csIHJoZWFkLCBibGtfbm8pOwogCQkJaWYgKGVycm9yKQogCQkJCWdvdG8gYnJlYWRfZXJyMjsKKwogCQkJYmJsa3MgPSAoaW50KUJUT0JCKGJlMzJfdG9fY3B1KHJoZWFkLT5oX2xlbikpOwotCQkJaWYgKChlcnJvciA9IHhsb2dfYnJlYWQobG9nLCBibGtfbm8raGJsa3MsIGJibGtzLCBkYnApKSkKKwkJCWVycm9yID0geGxvZ19icmVhZChsb2csIGJsa19ubytoYmxrcywgYmJsa3MsIGRicCwKKwkJCQkJICAgJm9mZnNldCk7CisJCQlpZiAoZXJyb3IpCiAJCQkJZ290byBicmVhZF9lcnIyOwotCQkJb2Zmc2V0ID0geGxvZ19hbGlnbihsb2csIGJsa19ubytoYmxrcywgYmJsa3MsIGRicCk7CisKIAkJCXhsb2dfdW5wYWNrX2RhdGEocmhlYWQsIG9mZnNldCwgbG9nKTsKIAkJCWlmICgoZXJyb3IgPSB4bG9nX3JlY292ZXJfcHJvY2Vzc19kYXRhKGxvZywgcmhhc2gsCiAJCQkJCQkJcmhlYWQsIG9mZnNldCwgcGFzcykpKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5jIGIvZnMveGZzL3hmc19tb3VudC5jCmluZGV4IDM1MzAwMjUuLmIxMDE5OTAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuYworKysgYi9mcy94ZnMveGZzX21vdW50LmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJ4ZnNfZnNvcHMuaCIKICNpbmNsdWRlICJ4ZnNfdXRpbHMuaCIKIAotU1RBVElDIGludAl4ZnNfdXVpZF9tb3VudCh4ZnNfbW91bnRfdCAqKTsKIFNUQVRJQyB2b2lkCXhmc191bm1vdW50ZnNfd2FpdCh4ZnNfbW91bnRfdCAqKTsKIAogCkBAIC0xMjEsNiArMTIwLDg0IEBACiAgICAgeyBzaXplb2YoeGZzX3NiX3QpLAkJCSAwIH0KIH07CiAKK3N0YXRpYyBERUZJTkVfTVVURVgoeGZzX3V1aWRfdGFibGVfbXV0ZXgpOworc3RhdGljIGludCB4ZnNfdXVpZF90YWJsZV9zaXplOworc3RhdGljIHV1aWRfdCAqeGZzX3V1aWRfdGFibGU7CisKKy8qCisgKiBTZWUgaWYgdGhlIFVVSUQgaXMgdW5pcXVlIGFtb25nIG1vdW50ZWQgWEZTIGZpbGVzeXN0ZW1zLgorICogTW91bnQgZmFpbHMgaWYgVVVJRCBpcyBuaWwgb3IgYSBGUyB3aXRoIHRoZSBzYW1lIFVVSUQgaXMgYWxyZWFkeSBtb3VudGVkLgorICovCitTVEFUSUMgaW50Cit4ZnNfdXVpZF9tb3VudCgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCkKK3sKKwl1dWlkX3QJCQkqdXVpZCA9ICZtcC0+bV9zYi5zYl91dWlkOworCWludAkJCWhvbGUsIGk7CisKKwlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9VVUlEKQorCQlyZXR1cm4gMDsKKworCWlmICh1dWlkX2lzX25pbCh1dWlkKSkgeworCQljbW5fZXJyKENFX1dBUk4sCisJCQkiWEZTOiBGaWxlc3lzdGVtICVzIGhhcyBuaWwgVVVJRCAtIGNhbid0IG1vdW50IiwKKwkJCW1wLT5tX2ZzbmFtZSk7CisJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKKwl9CisKKwltdXRleF9sb2NrKCZ4ZnNfdXVpZF90YWJsZV9tdXRleCk7CisJZm9yIChpID0gMCwgaG9sZSA9IC0xOyBpIDwgeGZzX3V1aWRfdGFibGVfc2l6ZTsgaSsrKSB7CisJCWlmICh1dWlkX2lzX25pbCgmeGZzX3V1aWRfdGFibGVbaV0pKSB7CisJCQlob2xlID0gaTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh1dWlkX2VxdWFsKHV1aWQsICZ4ZnNfdXVpZF90YWJsZVtpXSkpCisJCQlnb3RvIG91dF9kdXBsaWNhdGU7CisJfQorCisJaWYgKGhvbGUgPCAwKSB7CisJCXhmc191dWlkX3RhYmxlID0ga21lbV9yZWFsbG9jKHhmc191dWlkX3RhYmxlLAorCQkJKHhmc191dWlkX3RhYmxlX3NpemUgKyAxKSAqIHNpemVvZigqeGZzX3V1aWRfdGFibGUpLAorCQkJeGZzX3V1aWRfdGFibGVfc2l6ZSAgKiBzaXplb2YoKnhmc191dWlkX3RhYmxlKSwKKwkJCUtNX1NMRUVQKTsKKwkJaG9sZSA9IHhmc191dWlkX3RhYmxlX3NpemUrKzsKKwl9CisJeGZzX3V1aWRfdGFibGVbaG9sZV0gPSAqdXVpZDsKKwltdXRleF91bmxvY2soJnhmc191dWlkX3RhYmxlX211dGV4KTsKKworCXJldHVybiAwOworCisgb3V0X2R1cGxpY2F0ZToKKwltdXRleF91bmxvY2soJnhmc191dWlkX3RhYmxlX211dGV4KTsKKwljbW5fZXJyKENFX1dBUk4sICJYRlM6IEZpbGVzeXN0ZW0gJXMgaGFzIGR1cGxpY2F0ZSBVVUlEIC0gY2FuJ3QgbW91bnQiLAorCQkJIG1wLT5tX2ZzbmFtZSk7CisJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOworfQorCitTVEFUSUMgdm9pZAoreGZzX3V1aWRfdW5tb3VudCgKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCkKK3sKKwl1dWlkX3QJCQkqdXVpZCA9ICZtcC0+bV9zYi5zYl91dWlkOworCWludAkJCWk7CisKKwlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9VVUlEKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZ4ZnNfdXVpZF90YWJsZV9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IHhmc191dWlkX3RhYmxlX3NpemU7IGkrKykgeworCQlpZiAodXVpZF9pc19uaWwoJnhmc191dWlkX3RhYmxlW2ldKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXV1aWRfZXF1YWwodXVpZCwgJnhmc191dWlkX3RhYmxlW2ldKSkKKwkJCWNvbnRpbnVlOworCQltZW1zZXQoJnhmc191dWlkX3RhYmxlW2ldLCAwLCBzaXplb2YodXVpZF90KSk7CisJCWJyZWFrOworCX0KKwlBU1NFUlQoaSA8IHhmc191dWlkX3RhYmxlX3NpemUpOworCW11dGV4X3VubG9jaygmeGZzX3V1aWRfdGFibGVfbXV0ZXgpOworfQorCisKIC8qCiAgKiBGcmVlIHVwIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgbW91bnQgc3RydWN0dXJlLiAgQXNzdW1lIHRoYXQKICAqIHRoZSBzdHJ1Y3R1cmUgd2FzIGluaXRpYWxseSB6ZXJvZWQsIHNvIHdlIGNhbiB0ZWxsIHdoaWNoIGZpZWxkcyBnb3QKQEAgLTI1Niw2ICszMzMsMjIgQEAKIAkJcmV0dXJuIFhGU19FUlJPUihFTk9TWVMpOwogCX0KIAorCS8qCisJICogQ3VycmVudGx5IG9ubHkgdmVyeSBmZXcgaW5vZGUgc2l6ZXMgYXJlIHN1cHBvcnRlZC4KKwkgKi8KKwlzd2l0Y2ggKHNicC0+c2JfaW5vZGVzaXplKSB7CisJY2FzZSAyNTY6CisJY2FzZSA1MTI6CisJY2FzZSAxMDI0OgorCWNhc2UgMjA0ODoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJeGZzX2ZzX21vdW50X2Ntbl9lcnIoZmxhZ3MsCisJCQkiaW5vZGUgc2l6ZSBvZiAlZCBieXRlcyBub3Qgc3VwcG9ydGVkIiwKKwkJCXNicC0+c2JfaW5vZGVzaXplKTsKKwkJcmV0dXJuIFhGU19FUlJPUihFTk9TWVMpOworCX0KKwogCWlmICh4ZnNfc2JfdmFsaWRhdGVfZnNiX2NvdW50KHNicCwgc2JwLT5zYl9kYmxvY2tzKSB8fAogCSAgICB4ZnNfc2JfdmFsaWRhdGVfZnNiX2NvdW50KHNicCwgc2JwLT5zYl9yYmxvY2tzKSkgewogCQl4ZnNfZnNfbW91bnRfY21uX2VycihmbGFncywKQEAgLTU3NCwzMiArNjY3LDEwIEBACiAJbXAtPm1fc2VjdGJiX2xvZyA9IHNicC0+c2Jfc2VjdGxvZyAtIEJCU0hJRlQ7CiAJbXAtPm1fYWdub19sb2cgPSB4ZnNfaGlnaGJpdDMyKHNicC0+c2JfYWdjb3VudCAtIDEpICsgMTsKIAltcC0+bV9hZ2lub19sb2cgPSBzYnAtPnNiX2lub3BibG9nICsgc2JwLT5zYl9hZ2Jsa2xvZzsKLQltcC0+bV9saXRpbm8gPSBzYnAtPnNiX2lub2Rlc2l6ZSAtIHNpemVvZihzdHJ1Y3QgeGZzX2Rpbm9kZSk7CiAJbXAtPm1fYmxvY2ttYXNrID0gc2JwLT5zYl9ibG9ja3NpemUgLSAxOwogCW1wLT5tX2Jsb2Nrd3NpemUgPSBzYnAtPnNiX2Jsb2Nrc2l6ZSA+PiBYRlNfV09SRExPRzsKIAltcC0+bV9ibG9ja3dtYXNrID0gbXAtPm1fYmxvY2t3c2l6ZSAtIDE7CiAKLQkvKgotCSAqIFNldHVwIGZvciBhdHRyaWJ1dGVzLCBpbiBjYXNlIHRoZXkgZ2V0IGNyZWF0ZWQuCi0JICogVGhpcyB2YWx1ZSBpcyBmb3IgaW5vZGVzIGdldHRpbmcgYXR0cmlidXRlcyBmb3IgdGhlIGZpcnN0IHRpbWUsCi0JICogdGhlIHBlci1pbm9kZSB2YWx1ZSBpcyBmb3Igb2xkIGF0dHJpYnV0ZSB2YWx1ZXMuCi0JICovCi0JQVNTRVJUKHNicC0+c2JfaW5vZGVzaXplID49IDI1NiAmJiBzYnAtPnNiX2lub2Rlc2l6ZSA8PSAyMDQ4KTsKLQlzd2l0Y2ggKHNicC0+c2JfaW5vZGVzaXplKSB7Ci0JY2FzZSAyNTY6Ci0JCW1wLT5tX2F0dHJvZmZzZXQgPSBYRlNfTElUSU5PKG1wKSAtCi0JCQkJICAgWEZTX0JNRFJfU1BBQ0VfQ0FMQyhNSU5BQlRQVFJTKTsKLQkJYnJlYWs7Ci0JY2FzZSA1MTI6Ci0JY2FzZSAxMDI0OgotCWNhc2UgMjA0ODoKLQkJbXAtPm1fYXR0cm9mZnNldCA9IFhGU19CTURSX1NQQUNFX0NBTEMoNiAqIE1JTkFCVFBUUlMpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlBU1NFUlQoMCk7Ci0JfQotCUFTU0VSVChtcC0+bV9hdHRyb2Zmc2V0IDwgWEZTX0xJVElOTyhtcCkpOwotCiAJbXAtPm1fYWxsb2NfbXhyWzBdID0geGZzX2FsbG9jYnRfbWF4cmVjcyhtcCwgc2JwLT5zYl9ibG9ja3NpemUsIDEpOwogCW1wLT5tX2FsbG9jX214clsxXSA9IHhmc19hbGxvY2J0X21heHJlY3MobXAsIHNicC0+c2JfYmxvY2tzaXplLCAwKTsKIAltcC0+bV9hbGxvY19tbnJbMF0gPSBtcC0+bV9hbGxvY19teHJbMF0gLyAyOwpAQCAtNjQ1LDcgKzcxNiw3IEBACiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYWdjb3VudDsgaW5kZXgrKykgewogCQkvKgogCQkgKiByZWFkIHRoZSBhZ2YsIHRoZW4gdGhlIGFnaS4gVGhpcyBnZXRzIHVzCi0JCSAqIGFsbCB0aGUgaW5mb3JhbXRpb24gd2UgbmVlZCBhbmQgcG9wdWxhdGVzIHRoZQorCQkgKiBhbGwgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgYW5kIHBvcHVsYXRlcyB0aGUKIAkJICogcGVyLWFnIHN0cnVjdHVyZXMgZm9yIHVzLgogCQkgKi8KIAkJZXJyb3IgPSB4ZnNfYWxsb2NfcGFnZl9pbml0KG1wLCBOVUxMLCBpbmRleCwgMCk7CkBAIC04ODYsOCArOTU3LDYgQEAKIH0KIAogLyoKLSAqIHhmc19tb3VudGZzCi0gKgogICogVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBmb2xsb3dpbmcgb24gYW4gaW5pdGlhbCBtb3VudCBvZiBhIGZpbGUgc3lzdGVtOgogICoJLSByZWFkcyB0aGUgc3VwZXJibG9jayBmcm9tIGRpc2sgYW5kIGluaXQgdGhlIG1vdW50IHN0cnVjdAogICoJLSBpZiB3ZSdyZSBhIDMyLWJpdCBrZXJuZWwsIGRvIGEgc2l6ZSBjaGVjayBvbiB0aGUgc3VwZXJibG9jawpAQCAtOTA1LDcgKzk3NCw2IEBACiAJeGZzX2lub2RlX3QJKnJpcDsKIAlfX3VpbnQ2NF90CXJlc2Jsa3M7CiAJdWludAkJcXVvdGFtb3VudCwgcXVvdGFmbGFnczsKLQlpbnQJCXV1aWRfbW91bnRlZCA9IDA7CiAJaW50CQllcnJvciA9IDA7CiAKIAl4ZnNfbW91bnRfY29tbW9uKG1wLCBzYnApOwpAQCAtOTYwLDcgKzEwMjgsNyBAQAogCSAqLwogCWVycm9yID0geGZzX3VwZGF0ZV9hbGlnbm1lbnQobXApOwogCWlmIChlcnJvcikKLQkJZ290byBlcnJvcjE7CisJCWdvdG8gb3V0OwogCiAJeGZzX2FsbG9jX2NvbXB1dGVfbWF4bGV2ZWxzKG1wKTsKIAl4ZnNfYm1hcF9jb21wdXRlX21heGxldmVscyhtcCwgWEZTX0RBVEFfRk9SSyk7CkBAIC05NzEsMTkgKzEwMzksOSBAQAogCiAJbXAtPm1fbWF4aW9mZnNldCA9IHhmc19tYXhfZmlsZV9vZmZzZXQoc2JwLT5zYl9ibG9ja2xvZyk7CiAKLQkvKgotCSAqIFhGUyB1c2VzIHRoZSB1dWlkIGZyb20gdGhlIHN1cGVyYmxvY2sgYXMgdGhlIHVuaXF1ZQotCSAqIGlkZW50aWZpZXIgZm9yIGZzaWQuICBXZSBjYW4gbm90IHVzZSB0aGUgdXVpZCBmcm9tIHRoZSB2b2x1bWUKLQkgKiBzaW5jZSBhIHNpbmdsZSBwYXJ0aXRpb24gZmlsZXN5c3RlbSBpcyBpZGVudGljYWwgdG8gYSBzaW5nbGUKLQkgKiBwYXJ0aXRpb24gdm9sdW1lL2ZpbGVzeXN0ZW0uCi0JICovCi0JaWYgKChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9OT1VVSUQpID09IDApIHsKLQkJaWYgKHhmc191dWlkX21vdW50KG1wKSkgewotCQkJZXJyb3IgPSBYRlNfRVJST1IoRUlOVkFMKTsKLQkJCWdvdG8gZXJyb3IxOwotCQl9Ci0JCXV1aWRfbW91bnRlZD0xOwotCX0KKwllcnJvciA9IHhmc191dWlkX21vdW50KG1wKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OwogCiAJLyoKIAkgKiBTZXQgdGhlIG1pbmltdW0gcmVhZCBhbmQgd3JpdGUgc2l6ZXMKQEAgLTEwMDcsNyArMTA2NSw3IEBACiAJICovCiAJZXJyb3IgPSB4ZnNfY2hlY2tfc2l6ZXMobXApOwogCWlmIChlcnJvcikKLQkJZ290byBlcnJvcjE7CisJCWdvdG8gb3V0X3JlbW92ZV91dWlkOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHJlYWx0aW1lIGZpZWxkcyBpbiB0aGUgbW91bnQgc3RydWN0dXJlCkBAIC0xMDE1LDcgKzEwNzMsNyBAQAogCWVycm9yID0geGZzX3J0bW91bnRfaW5pdChtcCk7CiAJaWYgKGVycm9yKSB7CiAJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogUlQgbW91bnQgZmFpbGVkIik7Ci0JCWdvdG8gZXJyb3IxOworCQlnb3RvIG91dF9yZW1vdmVfdXVpZDsKIAl9CiAKIAkvKgpAQCAtMTA0NSwyNiArMTEwMywyNiBAQAogCW1wLT5tX3BlcmFnID0ga21lbV96YWxsb2Moc2JwLT5zYl9hZ2NvdW50ICogc2l6ZW9mKHhmc19wZXJhZ190KSwKIAkJCQkgIEtNX01BWUZBSUwpOwogCWlmICghbXAtPm1fcGVyYWcpCi0JCWdvdG8gZXJyb3IxOworCQlnb3RvIG91dF9yZW1vdmVfdXVpZDsKIAogCW1wLT5tX21heGFnaSA9IHhmc19pbml0aWFsaXplX3BlcmFnKG1wLCBzYnAtPnNiX2FnY291bnQpOwogCisJaWYgKCFzYnAtPnNiX2xvZ2Jsb2NrcykgeworCQljbW5fZXJyKENFX1dBUk4sICJYRlM6IG5vIGxvZyBkZWZpbmVkIik7CisJCVhGU19FUlJPUl9SRVBPUlQoInhmc19tb3VudGZzIiwgWEZTX0VSUkxFVkVMX0xPVywgbXApOworCQllcnJvciA9IFhGU19FUlJPUihFRlNDT1JSVVBURUQpOworCQlnb3RvIG91dF9mcmVlX3BlcmFnOworCX0KKwogCS8qCiAJICogbG9nJ3MgbW91bnQtdGltZSBpbml0aWFsaXphdGlvbi4gUGVyZm9ybSAxc3QgcGFydCByZWNvdmVyeSBpZiBuZWVkZWQKIAkgKi8KLQlpZiAobGlrZWx5KHNicC0+c2JfbG9nYmxvY2tzID4gMCkpIHsJLyogY2hlY2sgZm9yIHZvbHVtZSBjYXNlICovCi0JCWVycm9yID0geGZzX2xvZ19tb3VudChtcCwgbXAtPm1fbG9nZGV2X3RhcmdwLAotCQkJCSAgICAgIFhGU19GU0JfVE9fREFERFIobXAsIHNicC0+c2JfbG9nc3RhcnQpLAotCQkJCSAgICAgIFhGU19GU0JfVE9fQkIobXAsIHNicC0+c2JfbG9nYmxvY2tzKSk7Ci0JCWlmIChlcnJvcikgewotCQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBsb2cgbW91bnQgZmFpbGVkIik7Ci0JCQlnb3RvIGVycm9yMjsKLQkJfQotCX0gZWxzZSB7CS8qIE5vIGxvZyBoYXMgYmVlbiBkZWZpbmVkICovCi0JCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogbm8gbG9nIGRlZmluZWQiKTsKLQkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX21vdW50ZnNfaW50KDEpIiwgWEZTX0VSUkxFVkVMX0xPVywgbXApOwotCQllcnJvciA9IFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwotCQlnb3RvIGVycm9yMjsKKwllcnJvciA9IHhmc19sb2dfbW91bnQobXAsIG1wLT5tX2xvZ2Rldl90YXJncCwKKwkJCSAgICAgIFhGU19GU0JfVE9fREFERFIobXAsIHNicC0+c2JfbG9nc3RhcnQpLAorCQkJICAgICAgWEZTX0ZTQl9UT19CQihtcCwgc2JwLT5zYl9sb2dibG9ja3MpKTsKKwlpZiAoZXJyb3IpIHsKKwkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBsb2cgbW91bnQgZmFpbGVkIik7CisJCWdvdG8gb3V0X2ZyZWVfcGVyYWc7CiAJfQogCiAJLyoKQEAgLTEwODYsMTUgKzExNDQsMTQgQEAKIAkgKiBJZiB3ZSBhcmUgY3VycmVudGx5IG1ha2luZyB0aGUgZmlsZXN5c3RlbSwgdGhlIGluaXRpYWxpc2F0aW9uIHdpbGwKIAkgKiBmYWlsIGFzIHRoZSBwZXJhZyBkYXRhIGlzIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KIAkgKi8KLQogCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNsYXp5c2Jjb3VudCgmbXAtPm1fc2IpICYmCiAJICAgICFYRlNfTEFTVF9VTk1PVU5UX1dBU19DTEVBTihtcCkgJiYKIAkgICAgICFtcC0+bV9zYi5zYl9pbnByb2dyZXNzKSB7CiAJCWVycm9yID0geGZzX2luaXRpYWxpemVfcGVyYWdfZGF0YShtcCwgc2JwLT5zYl9hZ2NvdW50KTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlnb3RvIGVycm9yMjsKLQkJfQorCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF9mcmVlX3BlcmFnOwogCX0KKwogCS8qCiAJICogR2V0IGFuZCBzYW5pdHktY2hlY2sgdGhlIHJvb3QgaW5vZGUuCiAJICogU2F2ZSB0aGUgcG9pbnRlciB0byBpdCBpbiB0aGUgbW91bnQgc3RydWN0dXJlLgpAQCAtMTEwMiw3ICsxMTU5LDcgQEAKIAllcnJvciA9IHhmc19pZ2V0KG1wLCBOVUxMLCBzYnAtPnNiX3Jvb3Rpbm8sIDAsIFhGU19JTE9DS19FWENMLCAmcmlwLCAwKTsKIAlpZiAoZXJyb3IpIHsKIAkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBmYWlsZWQgdG8gcmVhZCByb290IGlub2RlIik7Ci0JCWdvdG8gZXJyb3IzOworCQlnb3RvIG91dF9sb2dfZGVhbGxvYzsKIAl9CiAKIAlBU1NFUlQocmlwICE9IE5VTEwpOwpAQCAtMTExNiw3ICsxMTczLDcgQEAKIAkJWEZTX0VSUk9SX1JFUE9SVCgieGZzX21vdW50ZnNfaW50KDIpIiwgWEZTX0VSUkxFVkVMX0xPVywKIAkJCQkgbXApOwogCQllcnJvciA9IFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwotCQlnb3RvIGVycm9yNDsKKwkJZ290byBvdXRfcmVsZV9yaXA7CiAJfQogCW1wLT5tX3Jvb3RpcCA9IHJpcDsJLyogc2F2ZSBpdCAqLwogCkBAIC0xMTMxLDcgKzExODgsNyBAQAogCQkgKiBGcmVlIHVwIHRoZSByb290IGlub2RlLgogCQkgKi8KIAkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBmYWlsZWQgdG8gcmVhZCBSVCBpbm9kZXMiKTsKLQkJZ290byBlcnJvcjQ7CisJCWdvdG8gb3V0X3JlbGVfcmlwOwogCX0KIAogCS8qCkBAIC0xMTQzLDcgKzEyMDAsNyBAQAogCQllcnJvciA9IHhmc19tb3VudF9sb2dfc2IobXAsIG1wLT5tX3VwZGF0ZV9mbGFncyk7CiAJCWlmIChlcnJvcikgewogCQkJY21uX2VycihDRV9XQVJOLCAiWEZTOiBmYWlsZWQgdG8gd3JpdGUgc2IgY2hhbmdlcyIpOwotCQkJZ290byBlcnJvcjQ7CisJCQlnb3RvIG91dF9ydHVubW91bnQ7CiAJCX0KIAl9CiAKQEAgLTExNTIsNyArMTIwOSw3IEBACiAJICovCiAJZXJyb3IgPSBYRlNfUU1fSU5JVChtcCwgJnF1b3RhbW91bnQsICZxdW90YWZsYWdzKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyb3I0OworCQlnb3RvIG91dF9ydHVubW91bnQ7CiAKIAkvKgogCSAqIEZpbmlzaCByZWNvdmVyaW5nIHRoZSBmaWxlIHN5c3RlbS4gIFRoaXMgcGFydCBuZWVkZWQgdG8gYmUKQEAgLTExNjIsNyArMTIxOSw3IEBACiAJZXJyb3IgPSB4ZnNfbG9nX21vdW50X2ZpbmlzaChtcCk7CiAJaWYgKGVycm9yKSB7CiAJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogbG9nIG1vdW50IGZpbmlzaCBmYWlsZWQiKTsKLQkJZ290byBlcnJvcjQ7CisJCWdvdG8gb3V0X3J0dW5tb3VudDsKIAl9CiAKIAkvKgpAQCAtMTE3MCw3ICsxMjI3LDcgQEAKIAkgKi8KIAllcnJvciA9IFhGU19RTV9NT1VOVChtcCwgcXVvdGFtb3VudCwgcXVvdGFmbGFncyk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGVycm9yNDsKKwkJZ290byBvdXRfcnR1bm1vdW50OwogCiAJLyoKIAkgKiBOb3cgd2UgYXJlIG1vdW50ZWQsIHJlc2VydmUgYSBzbWFsbCBhbW91bnQgb2YgdW51c2VkIHNwYWNlIGZvcgpAQCAtMTE5NCwxOCArMTI1MSwxNyBAQAogCiAJcmV0dXJuIDA7CiAKLSBlcnJvcjQ6Ci0JLyoKLQkgKiBGcmVlIHVwIHRoZSByb290IGlub2RlLgotCSAqLworIG91dF9ydHVubW91bnQ6CisJeGZzX3J0dW5tb3VudF9pbm9kZXMobXApOworIG91dF9yZWxlX3JpcDoKIAlJUkVMRShyaXApOwotIGVycm9yMzoKLQl4ZnNfbG9nX3VubW91bnRfZGVhbGxvYyhtcCk7Ci0gZXJyb3IyOgorIG91dF9sb2dfZGVhbGxvYzoKKwl4ZnNfbG9nX3VubW91bnQobXApOworIG91dF9mcmVlX3BlcmFnOgogCXhmc19mcmVlX3BlcmFnKG1wKTsKLSBlcnJvcjE6Ci0JaWYgKHV1aWRfbW91bnRlZCkKLQkJdXVpZF90YWJsZV9yZW1vdmUoJm1wLT5tX3NiLnNiX3V1aWQpOworIG91dF9yZW1vdmVfdXVpZDoKKwl4ZnNfdXVpZF91bm1vdW50KG1wKTsKKyBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xMjI2LDE1ICsxMjgyLDEyIEBACiAJICovCiAJWEZTX1FNX1VOTU9VTlQobXApOwogCi0JaWYgKG1wLT5tX3JibWlwKQotCQlJUkVMRShtcC0+bV9yYm1pcCk7Ci0JaWYgKG1wLT5tX3JzdW1pcCkKLQkJSVJFTEUobXAtPm1fcnN1bWlwKTsKKwl4ZnNfcnR1bm1vdW50X2lub2RlcyhtcCk7CiAJSVJFTEUobXAtPm1fcm9vdGlwKTsKIAogCS8qCiAJICogV2UgY2FuIHBvdGVudGlhbGx5IGRlYWRsb2NrIGhlcmUgaWYgd2UgaGF2ZSBhbiBpbm9kZSBjbHVzdGVyCi0JICogdGhhdCBoYXMgYmVlbiBmcmVlZCBoYXMgaXQncyBidWZmZXIgc3RpbGwgcGlubmVkIGluIG1lbW9yeSBiZWNhdXNlCisJICogdGhhdCBoYXMgYmVlbiBmcmVlZCBoYXMgaXRzIGJ1ZmZlciBzdGlsbCBwaW5uZWQgaW4gbWVtb3J5IGJlY2F1c2UKIAkgKiB0aGUgdHJhbnNhY3Rpb24gaXMgc3RpbGwgc2l0dGluZyBpbiBhIGljbG9nLiBUaGUgc3RhbGUgaW5vZGVzCiAJICogb24gdGhhdCBidWZmZXIgd2lsbCBoYXZlIHRoZWlyIGZsdXNoIGxvY2tzIGhlbGQgdW50aWwgdGhlCiAJICogdHJhbnNhY3Rpb24gaGl0cyB0aGUgZGlzayBhbmQgdGhlIGNhbGxiYWNrcyBydW4uIHRoZSBpbm9kZQpAQCAtMTI2Niw3ICsxMzE5LDcgQEAKIAkgKiBVbnJlc2VydmUgYW55IGJsb2NrcyB3ZSBoYXZlIHNvIHRoYXQgd2hlbiB3ZSB1bm1vdW50IHdlIGRvbid0IGFjY291bnQKIAkgKiB0aGUgcmVzZXJ2ZWQgZnJlZSBzcGFjZSBhcyB1c2VkLiBUaGlzIGlzIHJlYWxseSBvbmx5IG5lY2Vzc2FyeSBmb3IKIAkgKiBsYXp5IHN1cGVyYmxvY2sgY291bnRpbmcgYmVjYXVzZSBpdCB0cnVzdHMgdGhlIGluY29yZSBzdXBlcmJsb2NrCi0JICogY291bnRlcnMgdG8gYmUgYWJvc2x1dGVseSBjb3JyZWN0IG9uIGNsZWFuIHVubW91bnQuCisJICogY291bnRlcnMgdG8gYmUgYWJzb2x1dGVseSBjb3JyZWN0IG9uIGNsZWFuIHVubW91bnQuCiAJICoKIAkgKiBXZSBkb24ndCBib3RoZXIgY29ycmVjdGluZyB0aGlzIGVsc2V3aGVyZSBmb3IgbGF6eSBzdXBlcmJsb2NrCiAJICogY291bnRpbmcgYmVjYXVzZSBvbiBtb3VudCBvZiBhbiB1bmNsZWFuIGZpbGVzeXN0ZW0gd2UgcmVjb25zdHJ1Y3QgdGhlCkBAIC0xMjg4LDEwICsxMzQxLDkgQEAKIAkJCQkiRnJlZXNwYWNlIG1heSBub3QgYmUgY29ycmVjdCBvbiBuZXh0IG1vdW50LiIpOwogCXhmc191bm1vdW50ZnNfd3JpdGVzYihtcCk7CiAJeGZzX3VubW91bnRmc193YWl0KG1wKTsgCQkvKiB3YWl0IGZvciBhc3luYyBidWZzICovCi0JeGZzX2xvZ191bm1vdW50KG1wKTsJCQkvKiBEb25lISBObyBtb3JlIGZzIG9wcy4gKi8KLQotCWlmICgobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9VVUlEKSA9PSAwKQotCQl1dWlkX3RhYmxlX3JlbW92ZSgmbXAtPm1fc2Iuc2JfdXVpZCk7CisJeGZzX2xvZ191bm1vdW50X3dyaXRlKG1wKTsKKwl4ZnNfbG9nX3VubW91bnQobXApOworCXhmc191dWlkX3VubW91bnQobXApOwogCiAjaWYgZGVmaW5lZChERUJVRykKIAl4ZnNfZXJyb3J0YWdfY2xlYXJhbGwobXAsIDApOwpAQCAtMTc5MywyOSArMTg0NSw2IEBACiB9CiAKIC8qCi0gKiBTZWUgaWYgdGhlIFVVSUQgaXMgdW5pcXVlIGFtb25nIG1vdW50ZWQgWEZTIGZpbGVzeXN0ZW1zLgotICogTW91bnQgZmFpbHMgaWYgVVVJRCBpcyBuaWwgb3IgYSBGUyB3aXRoIHRoZSBzYW1lIFVVSUQgaXMgYWxyZWFkeSBtb3VudGVkLgotICovCi1TVEFUSUMgaW50Ci14ZnNfdXVpZF9tb3VudCgKLQl4ZnNfbW91bnRfdAkqbXApCi17Ci0JaWYgKHV1aWRfaXNfbmlsKCZtcC0+bV9zYi5zYl91dWlkKSkgewotCQljbW5fZXJyKENFX1dBUk4sCi0JCQkiWEZTOiBGaWxlc3lzdGVtICVzIGhhcyBuaWwgVVVJRCAtIGNhbid0IG1vdW50IiwKLQkJCW1wLT5tX2ZzbmFtZSk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaWYgKCF1dWlkX3RhYmxlX2luc2VydCgmbXAtPm1fc2Iuc2JfdXVpZCkpIHsKLQkJY21uX2VycihDRV9XQVJOLAotCQkJIlhGUzogRmlsZXN5c3RlbSAlcyBoYXMgZHVwbGljYXRlIFVVSUQgLSBjYW4ndCBtb3VudCIsCi0JCQltcC0+bV9mc25hbWUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgogICogVXNlZCB0byBsb2cgY2hhbmdlcyB0byB0aGUgc3VwZXJibG9jayB1bml0IGFuZCB3aWR0aCBmaWVsZHMgd2hpY2ggY291bGQKICAqIGJlIGFsdGVyZWQgYnkgdGhlIG1vdW50IG9wdGlvbnMsIGFzIHdlbGwgYXMgYW55IHBvdGVudGlhbCBzYl9mZWF0dXJlczIKICAqIGZpeHVwLiBPbmx5IHRoZSBmaXJzdCBzdXBlcmJsb2NrIGlzIHVwZGF0ZWQuCkBAIC0xODY4LDcgKzE4OTcsNyBAQAogICogd2UgZGlzYWJsZSB0aGUgcGVyLWNwdSBjb3VudGVyIGFuZCBnbyB0aHJvdWdoIHRoZSBzbG93IHBhdGguCiAgKgogICogVGhlIHNsb3cgcGF0aCBpcyB0aGUgY3VycmVudCB4ZnNfbW9kX2luY29yZV9zYigpIGZ1bmN0aW9uLiAgVGhpcyBtZWFucyB0aGF0Ci0gKiB3aGVuIHdlIGRpc2FibGUgYSBwZXItY3B1IGNvdW50ZXIsIHdlIG5lZWQgdG8gZHJhaW4gaXQncyByZXNvdXJjZXMgYmFjayB0bworICogd2hlbiB3ZSBkaXNhYmxlIGEgcGVyLWNwdSBjb3VudGVyLCB3ZSBuZWVkIHRvIGRyYWluIGl0cyByZXNvdXJjZXMgYmFjayB0bwogICogdGhlIGdsb2JhbCBzdXBlcmJsb2NrLiBXZSBkbyB0aGlzIGFmdGVyIGRpc2FibGluZyB0aGUgY291bnRlciB0byBwcmV2ZW50CiAgKiBtb3JlIHRocmVhZHMgZnJvbSBxdWV1ZWluZyB1cCBvbiB0aGUgY291bnRlci4KICAqCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmgKaW5kZXggZjVlOTkzNy4uN2FmNDRhZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtMTM2LDcgKzEzNiw2IEBACiAJCQlzdHJ1Y3QgeGZzX2RxdW90ICosIHN0cnVjdCB4ZnNfZHF1b3QgKiwgdWludCk7CiB0eXBlZGVmIHZvaWQJKCp4ZnNfZHFzdGF0dmZzX3QpKHN0cnVjdCB4ZnNfaW5vZGUgKiwgc3RydWN0IGtzdGF0ZnMgKik7CiB0eXBlZGVmIGludAkoKnhmc19kcXN5bmNfdCkoc3RydWN0IHhmc19tb3VudCAqLCBpbnQgZmxhZ3MpOwotdHlwZWRlZiBpbnQJKCp4ZnNfcXVvdGFjdGxfdCkoc3RydWN0IHhmc19tb3VudCAqLCBpbnQsIGludCwgeGZzX2NhZGRyX3QpOwogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfcW1vcHMgewogCXhmc19xbWluaXRfdAkJeGZzX3FtaW5pdDsKQEAgLTE1NCw3ICsxNTMsNiBAQAogCXhmc19kcXZvcGNob3ducmVzdl90CXhmc19kcXZvcGNob3ducmVzdjsKIAl4ZnNfZHFzdGF0dmZzX3QJCXhmc19kcXN0YXR2ZnM7CiAJeGZzX2Rxc3luY190CQl4ZnNfZHFzeW5jOwotCXhmc19xdW90YWN0bF90CQl4ZnNfcXVvdGFjdGw7CiAJc3RydWN0IHhmc19kcXRyeG9wcwkqeGZzX2RxdHJ4b3BzOwogfSB4ZnNfcW1vcHNfdDsKIApAQCAtMTg4LDggKzE4Niw2IEBACiAJKCooaXApLT5pX21vdW50LT5tX3FtX29wcy0+eGZzX2Rxc3RhdHZmcykoaXAsIHN0YXRwKQogI2RlZmluZSBYRlNfUU1fRFFTWU5DKG1wLCBmbGFncykgXAogCSgqKG1wKS0+bV9xbV9vcHMtPnhmc19kcXN5bmMpKG1wLCBmbGFncykKLSNkZWZpbmUgWEZTX1FNX1FVT1RBQ1RMKG1wLCBjbWQsIGlkLCBhZGRyKSBcCi0JKCoobXApLT5tX3FtX29wcy0+eGZzX3F1b3RhY3RsKShtcCwgY21kLCBpZCwgYWRkcikKIAogI2lmZGVmIEhBVkVfUEVSQ1BVX1NCCiAKQEAgLTI3MywxOSArMjY5LDE3IEBACiAJdWludAkJCW1faW5vYnRfbW5yWzJdOwkvKiBtaW4gaW5vYnQgYnRyZWUgcmVjb3JkcyAqLwogCXVpbnQJCQltX2FnX21heGxldmVsczsJLyogWEZTX0FHX01BWExFVkVMUyAqLwogCXVpbnQJCQltX2JtX21heGxldmVsc1syXTsgLyogWEZTX0JNX01BWExFVkVMUyAqLwotCXVpbnQJCQltX2luX21heGxldmVsczsJLyogWEZTX0lOX01BWExFVkVMUyAqLworCXVpbnQJCQltX2luX21heGxldmVsczsJLyogbWF4IGlub2J0IGJ0cmVlIGxldmVscy4gKi8KIAlzdHJ1Y3QgeGZzX3BlcmFnCSptX3BlcmFnOwkvKiBwZXItYWcgYWNjb3VudGluZyBpbmZvICovCiAJc3RydWN0IHJ3X3NlbWFwaG9yZQltX3BlcmFnbG9jazsJLyogbG9jayBmb3IgbV9wZXJhZyAocG9pbnRlcikgKi8KIAlzdHJ1Y3QgbXV0ZXgJCW1fZ3Jvd2xvY2s7CS8qIGdyb3dmcyBtdXRleCAqLwogCWludAkJCW1fZml4ZWRmc2lkWzJdOwkvKiB1bmNoYW5nZWQgZm9yIGxpZmUgb2YgRlMgKi8KIAl1aW50CQkJbV9kbWV2bWFzazsJLyogRE1JIGV2ZW50cyBmb3IgdGhpcyBGUyAqLwogCV9fdWludDY0X3QJCW1fZmxhZ3M7CS8qIGdsb2JhbCBtb3VudCBmbGFncyAqLwotCXVpbnQJCQltX2F0dHJvZmZzZXQ7CS8qIGlub2RlIGF0dHJpYnV0ZSBvZmZzZXQgKi8KIAl1aW50CQkJbV9kaXJfbm9kZV9lbnRzOyAvKiAjZW50cmllcyBpbiBhIGRpciBkYW5vZGUgKi8KIAl1aW50CQkJbV9hdHRyX25vZGVfZW50czsgLyogI2VudHJpZXMgaW4gYXR0ciBkYW5vZGUgKi8KIAlpbnQJCQltX2lhbGxvY19pbm9zOwkvKiBpbm9kZXMgaW4gaW5vZGUgYWxsb2NhdGlvbiAqLwogCWludAkJCW1faWFsbG9jX2Jsa3M7CS8qIGJsb2NrcyBpbiBpbm9kZSBhbGxvY2F0aW9uICovCi0JaW50CQkJbV9saXRpbm87CS8qIHNpemUgb2YgaW5vZGUgdW5pb24gYXJlYSAqLwogCWludAkJCW1faW5vYWxpZ25fbWFzazsvKiBtYXNrIHNiX2lub2FsaWdubXQgaWYgdXNlZCAqLwogCXVpbnQJCQltX3FmbGFnczsJLyogcXVvdGEgc3RhdHVzIGZsYWdzICovCiAJeGZzX3RyYW5zX3Jlc2VydmF0aW9uc190IG1fcmVzZXJ2YXRpb25zOy8qIHByZWNvbXB1dGVkIHJlcyB2YWx1ZXMgKi8KQEAgLTI5Myw5ICsyODcsNiBAQAogCV9fdWludDY0X3QJCW1fbWF4aW9mZnNldDsJLyogbWF4aW11bSBpbm9kZSBvZmZzZXQgKi8KIAlfX3VpbnQ2NF90CQltX3Jlc2Jsa3M7CS8qIHRvdGFsIHJlc2VydmVkIGJsb2NrcyAqLwogCV9fdWludDY0X3QJCW1fcmVzYmxrc19hdmFpbDsvKiBhdmFpbGFibGUgcmVzZXJ2ZWQgYmxvY2tzICovCi0jaWYgWEZTX0JJR19JTlVNUwotCXhmc19pbm9fdAkJbV9pbm9hZGQ7CS8qIGFkZCB2YWx1ZSBmb3IgaW5vNjRfb2Zmc2V0ICovCi0jZW5kaWYKIAlpbnQJCQltX2RhbGlnbjsJLyogc3RyaXBlIHVuaXQgKi8KIAlpbnQJCQltX3N3aWR0aDsJLyogc3RyaXBlIHdpZHRoICovCiAJaW50CQkJbV9zaW5vYWxpZ247CS8qIHN0cmlwZSB1bml0IGlub2RlIGFsaWdubWVudCAqLwpAQCAtMzM3LDcgKzMyOCw2IEBACiAjZGVmaW5lIFhGU19NT1VOVF9XU1lOQwkJKDFVTEwgPDwgMCkJLyogZm9yIG5mcyAtIGFsbCBtZXRhZGF0YSBvcHMKIAkJCQkJCSAgIG11c3QgYmUgc3luY2hyb25vdXMgZXhjZXB0CiAJCQkJCQkgICBmb3Igc3BhY2UgYWxsb2NhdGlvbnMgKi8KLSNkZWZpbmUgWEZTX01PVU5UX0lOTzY0CQkoMVVMTCA8PCAxKQogI2RlZmluZSBYRlNfTU9VTlRfRE1BUEkJCSgxVUxMIDw8IDIpCS8qIGRtYXBpIGlzIGVuYWJsZWQgKi8KICNkZWZpbmUgWEZTX01PVU5UX1dBU19DTEVBTgkoMVVMTCA8PCAzKQogI2RlZmluZSBYRlNfTU9VTlRfRlNfU0hVVERPV04JKDFVTEwgPDwgNCkJLyogYXRvbWljIHN0b3Agb2YgYWxsIGZpbGVzeXN0ZW0KQEAgLTM4OSw4ICszNzksOCBAQAogICogU3luY2hyb25vdXMgcmVhZCBhbmQgd3JpdGUgc2l6ZXMuICBUaGlzIHNob3VsZCBiZQogICogYmV0dGVyIGZvciBORlN2MiB3c3luYyBmaWxlc3lzdGVtcy4KICAqLwotI2RlZmluZQlYRlNfV1NZTkNfUkVBRElPX0xPRwkxNQkvKiAzMksgKi8KLSNkZWZpbmUJWEZTX1dTWU5DX1dSSVRFSU9fTE9HCTE0CS8qIDE2SyAqLworI2RlZmluZQlYRlNfV1NZTkNfUkVBRElPX0xPRwkxNQkvKiAzMmsgKi8KKyNkZWZpbmUJWEZTX1dTWU5DX1dSSVRFSU9fTE9HCTE0CS8qIDE2ayAqLwogCiAvKgogICogQWxsb3cgbGFyZ2UgYmxvY2sgc2l6ZXMgdG8gYmUgcmVwb3J0ZWQgdG8gdXNlcnNwYWNlIHByb2dyYW1zIGlmIHRoZQpAQCAtNTAwLDkgKzQ5MCw2IEBACiAJaW50NjRfdAkJbXNiX2RlbHRhOwkvKiBDaGFuZ2UgdG8gbWFrZSB0byBzcGVjaWZpZWQgZmllbGQgKi8KIH0geGZzX21vZF9zYl90OwogCi0jZGVmaW5lCVhGU19NT1VOVF9JTE9DSyhtcCkJbXV0ZXhfbG9jaygmKChtcCktPm1faWxvY2spKQotI2RlZmluZQlYRlNfTU9VTlRfSVVOTE9DSyhtcCkJbXV0ZXhfdW5sb2NrKCYoKG1wKS0+bV9pbG9jaykpCi0KIGV4dGVybiBpbnQJeGZzX2xvZ19zYmNvdW50KHhmc19tb3VudF90ICosIHVpbnQpOwogZXh0ZXJuIGludAl4ZnNfbW91bnRmcyh4ZnNfbW91bnRfdCAqbXApOwogZXh0ZXJuIHZvaWQJeGZzX21vdW50ZnNfY2hlY2tfYmFycmllcnMoeGZzX21vdW50X3QgKm1wKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcW1vcHMuYyBiL2ZzL3hmcy94ZnNfcW1vcHMuYwppbmRleCAyN2Y4MDU4Li5lMTAxNzkwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Ftb3BzLmMKKysrIGIvZnMveGZzL3hmc19xbW9wcy5jCkBAIC0xMjYsNyArMTI2LDYgQEAKIAkueGZzX2Rxdm9wY2hvd25yZXN2CT0gKHhmc19kcXZvcGNob3ducmVzdl90KSBmc19ub2VyciwKIAkueGZzX2Rxc3RhdHZmcwkJPSAoeGZzX2Rxc3RhdHZmc190KSBmc19ub3ZhbCwKIAkueGZzX2Rxc3luYwkJPSAoeGZzX2Rxc3luY190KSBmc19ub2VyciwKLQkueGZzX3F1b3RhY3RsCQk9ICh4ZnNfcXVvdGFjdGxfdCkgZnNfbm9zeXMsCiB9OwogCiBpbnQKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcXVvdGEuaCBiL2ZzL3hmcy94ZnNfcXVvdGEuaAppbmRleCA0ODk2NWVjLi5mNWQxMjAyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3F1b3RhLmgKKysrIGIvZnMveGZzL3hmc19xdW90YS5oCkBAIC0xOCw2ICsxOCw4IEBACiAjaWZuZGVmIF9fWEZTX1FVT1RBX0hfXwogI2RlZmluZSBfX1hGU19RVU9UQV9IX18KIAorc3RydWN0IHhmc190cmFuczsKKwogLyoKICAqIFRoZSBvbmRpc2sgZm9ybSBvZiBhIGRxdW90IHN0cnVjdHVyZS4KICAqLwpAQCAtMTg1LDcgKzE4Nyw2IEBACiAgKiB0byBhIHNpbmdsZSBmdW5jdGlvbi4gTm9uZSBvZiB0aGVzZSBYRlNfUU1PUFRfKiBmbGFncyBhcmUgbWVhbnQgdG8gaGF2ZQogICogcGVyc2lzdGVudCB2YWx1ZXMgKGllLiB0aGVpciB2YWx1ZXMgY2FuIGFuZCB3aWxsIGNoYW5nZSBiZXR3ZWVuIHZlcnNpb25zKQogICovCi0jZGVmaW5lIFhGU19RTU9QVF9EUUxPQ0sJMHgwMDAwMDAxIC8qIGRxbG9jayAqLwogI2RlZmluZSBYRlNfUU1PUFRfRFFBTExPQwkweDAwMDAwMDIgLyogYWxsb2MgZHF1b3Qgb25kaXNrIGlmIG5lZWRlZCAqLwogI2RlZmluZSBYRlNfUU1PUFRfVVFVT1RBCTB4MDAwMDAwNCAvKiB1c2VyIGRxdW90IHJlcXVlc3RlZCAqLwogI2RlZmluZSBYRlNfUU1PUFRfUFFVT1RBCTB4MDAwMDAwOCAvKiBwcm9qZWN0IGRxdW90IHJlcXVlc3RlZCAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ydGFsbG9jLmMgYi9mcy94ZnMveGZzX3J0YWxsb2MuYwppbmRleCBjNWJiODZmLi4zODVmNmRjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3J0YWxsb2MuYworKysgYi9mcy94ZnMveGZzX3J0YWxsb2MuYwpAQCAtMjI4OCw2ICsyMjg4LDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQKK3hmc19ydHVubW91bnRfaW5vZGVzKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wKQoreworCWlmIChtcC0+bV9yYm1pcCkKKwkJSVJFTEUobXAtPm1fcmJtaXApOworCWlmIChtcC0+bV9yc3VtaXApCisJCUlSRUxFKG1wLT5tX3JzdW1pcCk7Cit9CisKIC8qCiAgKiBQaWNrIGFuIGV4dGVudCBmb3IgYWxsb2NhdGlvbiBhdCB0aGUgc3RhcnQgb2YgYSBuZXcgcmVhbHRpbWUgZmlsZS4KICAqIFVzZSB0aGUgc2VxdWVuY2UgbnVtYmVyIHN0b3JlZCBpbiB0aGUgYXRpbWUgZmllbGQgb2YgdGhlIGJpdG1hcCBpbm9kZS4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcnRhbGxvYy5oIGIvZnMveGZzL3hmc19ydGFsbG9jLmgKaW5kZXggOGQ4ZGNkMi4uYjJkNjdhZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ydGFsbG9jLmgKKysrIGIvZnMveGZzL3hmc19ydGFsbG9jLmgKQEAgLTIzLDggKzIzLDggQEAKIAogLyogTWluIGFuZCBtYXggcnQgZXh0ZW50IHNpemVzLCBzcGVjaWZpZWQgaW4gYnl0ZXMgKi8KICNkZWZpbmUJWEZTX01BWF9SVEVYVFNJWkUJKDEwMjQgKiAxMDI0ICogMTAyNCkJLyogMUdCICovCi0jZGVmaW5lCVhGU19ERkxfUlRFWFRTSVpFCSg2NCAqIDEwMjQpCSAgICAgICAgLyogNjRLQiAqLwotI2RlZmluZQlYRlNfTUlOX1JURVhUU0laRQkoNCAqIDEwMjQpCQkvKiA0S0IgKi8KKyNkZWZpbmUJWEZTX0RGTF9SVEVYVFNJWkUJKDY0ICogMTAyNCkJICAgICAgICAvKiA2NGtCICovCisjZGVmaW5lCVhGU19NSU5fUlRFWFRTSVpFCSg0ICogMTAyNCkJCS8qIDRrQiAqLwogCiAvKgogICogQ29uc3RhbnRzIGZvciBiaXQgbWFuaXB1bGF0aW9ucy4KQEAgLTEwOCw2ICsxMDgsOSBAQAogaW50CQkJCQkvKiBlcnJvciAqLwogeGZzX3J0bW91bnRfaW5pdCgKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCk7CS8qIGZpbGUgc3lzdGVtIG1vdW50IHN0cnVjdHVyZSAqLwordm9pZAoreGZzX3J0dW5tb3VudF9pbm9kZXMoCisJc3RydWN0IHhmc19tb3VudAkqbXApOwogCiAvKgogICogR2V0IHRoZSBiaXRtYXAgYW5kIHN1bW1hcnkgaW5vZGVzIGludG8gdGhlIG1vdW50IHN0cnVjdHVyZQpAQCAtMTQ2LDYgKzE0OSw3IEBACiAjIGRlZmluZSB4ZnNfZ3Jvd2ZzX3J0KG1wLGluKSAgICAgICAgICAgICAgICAgICAgICAgICAgIChFTk9TWVMpCiAjIGRlZmluZSB4ZnNfcnRtb3VudF9pbml0KG0pICAgICgoKG1wKS0+bV9zYi5zYl9yYmxvY2tzID09IDApPyAwIDogKEVOT1NZUykpCiAjIGRlZmluZSB4ZnNfcnRtb3VudF9pbm9kZXMobSkgICgoKG1wKS0+bV9zYi5zYl9yYmxvY2tzID09IDApPyAwIDogKEVOT1NZUykpCisjIGRlZmluZSB4ZnNfcnR1bm1vdW50X2lub2RlcyhtKQogI2VuZGlmCS8qIENPTkZJR19YRlNfUlQgKi8KIAogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnMuaCBiL2ZzL3hmcy94ZnNfdHJhbnMuaAppbmRleCBkNmZlNGE4Li43NzUyNDlhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zLmgKKysrIGIvZnMveGZzL3hmc190cmFucy5oCkBAIC0yOTIsNyArMjkyLDcgQEAKICAqIEluIGEgd3JpdGUgdHJhbnNhY3Rpb24gd2UgY2FuIGFsbG9jYXRlIGEgbWF4aW11bSBvZiAyCiAgKiBleHRlbnRzLiAgVGhpcyBnaXZlczoKICAqICAgIHRoZSBpbm9kZSBnZXR0aW5nIHRoZSBuZXcgZXh0ZW50czogaW5vZGUgc2l6ZQotICogICAgdGhlIGlub2RlXCdzIGJtYXAgYnRyZWU6IG1heCBkZXB0aCAqIGJsb2NrIHNpemUKKyAqICAgIHRoZSBpbm9kZSdzIGJtYXAgYnRyZWU6IG1heCBkZXB0aCAqIGJsb2NrIHNpemUKICAqICAgIHRoZSBhZ2ZzIG9mIHRoZSBhZ3MgZnJvbSB3aGljaCB0aGUgZXh0ZW50cyBhcmUgYWxsb2NhdGVkOiAyICogc2VjdG9yCiAgKiAgICB0aGUgc3VwZXJibG9jayBmcmVlIGJsb2NrIGNvdW50ZXI6IHNlY3RvciBzaXplCiAgKiAgICB0aGUgYWxsb2NhdGlvbiBidHJlZXM6IDIgZXh0cyAqIDIgdHJlZXMgKiAoMiAqIG1heCBkZXB0aCAtIDEpICogYmxvY2sgc2l6ZQpAQCAtMzIxLDcgKzMyMSw3IEBACiAvKgogICogSW4gdHJ1bmNhdGluZyBhIGZpbGUgd2UgZnJlZSB1cCB0byB0d28gZXh0ZW50cyBhdCBvbmNlLiAgV2UgY2FuIG1vZGlmeToKICAqICAgIHRoZSBpbm9kZSBiZWluZyB0cnVuY2F0ZWQ6IGlub2RlIHNpemUKLSAqICAgIHRoZSBpbm9kZVwncyBibWFwIGJ0cmVlOiAobWF4IGRlcHRoICsgMSkgKiBibG9jayBzaXplCisgKiAgICB0aGUgaW5vZGUncyBibWFwIGJ0cmVlOiAobWF4IGRlcHRoICsgMSkgKiBibG9jayBzaXplCiAgKiBBbmQgdGhlIGJtYXBfZmluaXNoIHRyYW5zYWN0aW9uIGNhbiBmcmVlIHRoZSBibG9ja3MgYW5kIGJtYXAgYmxvY2tzOgogICogICAgdGhlIGFnZiBmb3IgZWFjaCBvZiB0aGUgYWdzOiA0ICogc2VjdG9yIHNpemUKICAqICAgIHRoZSBhZ2ZsIGZvciBlYWNoIG9mIHRoZSBhZ3M6IDQgKiBzZWN0b3Igc2l6ZQpAQCAtMzQzLDcgKzM0Myw3IEBACiAJICAoMTI4ICogKDkgKyBYRlNfQUxMT0NGUkVFX0xPR19DT1VOVChtcCwgNCkpKSArIFwKIAkgICgxMjggKiA1KSArIFwKIAkgIFhGU19BTExPQ0ZSRUVfTE9HX1JFUyhtcCwgMSkgKyBcCi0JICAgKDEyOCAqICgyICsgWEZTX0lBTExPQ19CTE9DS1MobXApICsgWEZTX0lOX01BWExFVkVMUyhtcCkgKyBcCisJICAgKDEyOCAqICgyICsgWEZTX0lBTExPQ19CTE9DS1MobXApICsgKG1wKS0+bV9pbl9tYXhsZXZlbHMgKyBcCiAJICAgIFhGU19BTExPQ0ZSRUVfTE9HX0NPVU5UKG1wLCAxKSkpKSkpCiAKICNkZWZpbmUJWEZTX0lUUlVOQ0FURV9MT0dfUkVTKG1wKSAgICgobXApLT5tX3Jlc2VydmF0aW9ucy50cl9pdHJ1bmNhdGUpCkBAIC00MzEsOCArNDMxLDggQEAKICAqICAgIHRoZSBuZXcgaW5vZGU6IGlub2RlIHNpemUKICAqICAgIHRoZSBpbm9kZSBidHJlZSBlbnRyeTogMSBibG9jawogICogICAgdGhlIGRpcmVjdG9yeSBidHJlZTogKG1heCBkZXB0aCArIHYyKSAqIGRpciBibG9jayBzaXplCi0gKiAgICB0aGUgZGlyZWN0b3J5IGlub2RlXCdzIGJtYXAgYnRyZWU6IChtYXggZGVwdGggKyB2MikgKiBibG9jayBzaXplCi0gKiAgICB0aGUgYmxvY2tzIGZvciB0aGUgc3ltbGluazogMSBLQgorICogICAgdGhlIGRpcmVjdG9yeSBpbm9kZSdzIGJtYXAgYnRyZWU6IChtYXggZGVwdGggKyB2MikgKiBibG9jayBzaXplCisgKiAgICB0aGUgYmxvY2tzIGZvciB0aGUgc3ltbGluazogMSBrQgogICogT3IgaW4gdGhlIGZpcnN0IHhhY3Qgd2UgYWxsb2NhdGUgc29tZSBpbm9kZXMgZ2l2aW5nOgogICogICAgdGhlIGFnaSBhbmQgYWdmIG9mIHRoZSBhZyBnZXR0aW5nIHRoZSBuZXcgaW5vZGVzOiAyICogc2VjdG9yc2l6ZQogICogICAgdGhlIGlub2RlIGJsb2NrcyBhbGxvY2F0ZWQ6IFhGU19JQUxMT0NfQkxPQ0tTICogYmxvY2tzaXplCkBAIC00NDksOSArNDQ5LDkgQEAKIAkgICgxMjggKiAoNCArIFhGU19ESVJPUF9MT0dfQ09VTlQobXApKSkpLCBcCiAJICgyICogKG1wKS0+bV9zYi5zYl9zZWN0c2l6ZSArIFwKIAkgIFhGU19GU0JfVE9fQigobXApLCBYRlNfSUFMTE9DX0JMT0NLUygobXApKSkgKyBcCi0JICBYRlNfRlNCX1RPX0IoKG1wKSwgWEZTX0lOX01BWExFVkVMUyhtcCkpICsgXAorCSAgWEZTX0ZTQl9UT19CKChtcCksIChtcCktPm1faW5fbWF4bGV2ZWxzKSArIFwKIAkgIFhGU19BTExPQ0ZSRUVfTE9HX1JFUyhtcCwgMSkgKyBcCi0JICAoMTI4ICogKDIgKyBYRlNfSUFMTE9DX0JMT0NLUyhtcCkgKyBYRlNfSU5fTUFYTEVWRUxTKG1wKSArIFwKKwkgICgxMjggKiAoMiArIFhGU19JQUxMT0NfQkxPQ0tTKG1wKSArIChtcCktPm1faW5fbWF4bGV2ZWxzICsgXAogCSAgIFhGU19BTExPQ0ZSRUVfTE9HX0NPVU5UKG1wLCAxKSkpKSkpCiAKICNkZWZpbmUJWEZTX1NZTUxJTktfTE9HX1JFUyhtcCkJKChtcCktPm1fcmVzZXJ2YXRpb25zLnRyX3N5bWxpbmspCkBAIC00NjMsNyArNDYzLDcgQEAKICAqICAgIHRoZSBpbm9kZSBidHJlZSBlbnRyeTogYmxvY2sgc2l6ZQogICogICAgdGhlIHN1cGVyYmxvY2sgZm9yIHRoZSBubGluayBmbGFnOiBzZWN0b3Igc2l6ZQogICogICAgdGhlIGRpcmVjdG9yeSBidHJlZTogKG1heCBkZXB0aCArIHYyKSAqIGRpciBibG9jayBzaXplCi0gKiAgICB0aGUgZGlyZWN0b3J5IGlub2RlXCdzIGJtYXAgYnRyZWU6IChtYXggZGVwdGggKyB2MikgKiBibG9jayBzaXplCisgKiAgICB0aGUgZGlyZWN0b3J5IGlub2RlJ3MgYm1hcCBidHJlZTogKG1heCBkZXB0aCArIHYyKSAqIGJsb2NrIHNpemUKICAqIE9yIGluIHRoZSBmaXJzdCB4YWN0IHdlIGFsbG9jYXRlIHNvbWUgaW5vZGVzIGdpdmluZzoKICAqICAgIHRoZSBhZ2kgYW5kIGFnZiBvZiB0aGUgYWcgZ2V0dGluZyB0aGUgbmV3IGlub2RlczogMiAqIHNlY3RvcnNpemUKICAqICAgIHRoZSBzdXBlcmJsb2NrIGZvciB0aGUgbmxpbmsgZmxhZzogc2VjdG9yIHNpemUKQEAgLTQ4MSw5ICs0ODEsOSBAQAogCSAgKDEyOCAqICgzICsgWEZTX0RJUk9QX0xPR19DT1VOVChtcCkpKSksIFwKIAkgKDMgKiAobXApLT5tX3NiLnNiX3NlY3RzaXplICsgXAogCSAgWEZTX0ZTQl9UT19CKChtcCksIFhGU19JQUxMT0NfQkxPQ0tTKChtcCkpKSArIFwKLQkgIFhGU19GU0JfVE9fQigobXApLCBYRlNfSU5fTUFYTEVWRUxTKG1wKSkgKyBcCisJICBYRlNfRlNCX1RPX0IoKG1wKSwgKG1wKS0+bV9pbl9tYXhsZXZlbHMpICsgXAogCSAgWEZTX0FMTE9DRlJFRV9MT0dfUkVTKG1wLCAxKSArIFwKLQkgICgxMjggKiAoMiArIFhGU19JQUxMT0NfQkxPQ0tTKG1wKSArIFhGU19JTl9NQVhMRVZFTFMobXApICsgXAorCSAgKDEyOCAqICgyICsgWEZTX0lBTExPQ19CTE9DS1MobXApICsgKG1wKS0+bV9pbl9tYXhsZXZlbHMgKyBcCiAJICAgWEZTX0FMTE9DRlJFRV9MT0dfQ09VTlQobXAsIDEpKSkpKSkKIAogI2RlZmluZQlYRlNfQ1JFQVRFX0xPR19SRVMobXApCSgobXApLT5tX3Jlc2VydmF0aW9ucy50cl9jcmVhdGUpCkBAIC01MTMsNyArNTEzLDcgQEAKIAkgTUFYKChfX3VpbnQxNl90KVhGU19GU0JfVE9fQigobXApLCAxKSwgWEZTX0lOT0RFX0NMVVNURVJfU0laRShtcCkpICsgXAogCSAoMTI4ICogNSkgKyBcCiAJICBYRlNfQUxMT0NGUkVFX0xPR19SRVMobXAsIDEpICsgXAotCSAgKDEyOCAqICgyICsgWEZTX0lBTExPQ19CTE9DS1MobXApICsgWEZTX0lOX01BWExFVkVMUyhtcCkgKyBcCisJICAoMTI4ICogKDIgKyBYRlNfSUFMTE9DX0JMT0NLUyhtcCkgKyAobXApLT5tX2luX21heGxldmVscyArIFwKIAkgICBYRlNfQUxMT0NGUkVFX0xPR19DT1VOVChtcCwgMSkpKSkKIAogCkBAIC02MzcsNyArNjM3LDcgQEAKIC8qCiAgKiBSZW1vdmluZyB0aGUgYXR0cmlidXRlIGZvcmsgb2YgYSBmaWxlCiAgKiAgICB0aGUgaW5vZGUgYmVpbmcgdHJ1bmNhdGVkOiBpbm9kZSBzaXplCi0gKiAgICB0aGUgaW5vZGVcJ3MgYm1hcCBidHJlZTogbWF4IGRlcHRoICogYmxvY2sgc2l6ZQorICogICAgdGhlIGlub2RlJ3MgYm1hcCBidHJlZTogbWF4IGRlcHRoICogYmxvY2sgc2l6ZQogICogQW5kIHRoZSBibWFwX2ZpbmlzaCB0cmFuc2FjdGlvbiBjYW4gZnJlZSB0aGUgYmxvY2tzIGFuZCBibWFwIGJsb2NrczoKICAqICAgIHRoZSBhZ2YgZm9yIGVhY2ggb2YgdGhlIGFnczogNCAqIHNlY3RvciBzaXplCiAgKiAgICB0aGUgYWdmbCBmb3IgZWFjaCBvZiB0aGUgYWdzOiA0ICogc2VjdG9yIHNpemUKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCmluZGV4IDJkNDdmMTAuLmYzMTI3MWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKKysrIGIvZnMveGZzL3hmc190cmFuc19haWwuYwpAQCAtNzksNyArNzksNyBAQAogICogdGhlIHB1c2ggaXMgcnVuIGFzeW5jaHJvbm91c2x5IGluIGEgc2VwYXJhdGUgdGhyZWFkLCBzbyB3ZSByZXR1cm4gdGhlIHRhaWwKICAqIG9mIHRoZSBsb2cgcmlnaHQgbm93IGluc3RlYWQgb2YgdGhlIHRhaWwgYWZ0ZXIgdGhlIHB1c2guIFRoaXMgbWVhbnMgd2Ugd2lsbAogICogZWl0aGVyIGNvbnRpbnVlIHJpZ2h0IGF3YXksIG9yIHdlIHdpbGwgc2xlZXAgd2FpdGluZyBvbiB0aGUgYXN5bmMgdGhyZWFkIHRvCi0gKiBkbyBpdCdzIHdvcmsuCisgKiBkbyBpdHMgd29yay4KICAqCiAgKiBXZSBkbyB0aGlzIHVubG9ja2VkIC0gd2Ugb25seSBuZWVkIHRvIGtub3cgd2hldGhlciB0aGVyZSBpcyBhbnl0aGluZyBpbiB0aGUKICAqIEFJTCBhdCB0aGUgdGltZSB3ZSBhcmUgY2FsbGVkLiBXZSBkb24ndCBuZWVkIHRvIGFjY2VzcyB0aGUgY29udGVudHMgb2YKQEAgLTE2MCw3ICsxNjAsNyBAQAogLyoKICAqIE5vdyB0aGF0IHRoZSB0cmF2ZXJzYWwgaXMgY29tcGxldGUsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjdXJzb3IKICAqIGZyb20gdGhlIGxpc3Qgb2YgdHJhdmVyc2luZyBjdXJzb3JzLiBBdm9pZCByZW1vdmluZyB0aGUgZW1iZWRkZWQKLSAqIHB1c2ggY3Vyc29yLCBidXQgdXNlIHRoZSBmYWN0IGl0IGlzIGFsd2F5IHByZXNlbnQgdG8gbWFrZSB0aGUKKyAqIHB1c2ggY3Vyc29yLCBidXQgdXNlIHRoZSBmYWN0IGl0IGlzIGFsd2F5cyBwcmVzZW50IHRvIG1ha2UgdGhlCiAgKiBsaXN0IGRlbGV0aW9uIHNpbXBsZS4KICAqLwogdm9pZApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19pdGVtLmMgYi9mcy94ZnMveGZzX3RyYW5zX2l0ZW0uYwppbmRleCBlMTEwYmY1Li5lYjNmYzU3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2l0ZW0uYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgInhmc19pbnVtLmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zLmgiCiAjaW5jbHVkZSAieGZzX3RyYW5zX3ByaXYuaCIKLS8qIFhYWDogZnJvbSBoZXJlIGRvd24gbmVlZGVkIHVudGlsIHN0cnVjdCB4ZnNfdHJhbnMgaGFzIGl0J3Mgb3duIGFpbHAgKi8KKy8qIFhYWDogZnJvbSBoZXJlIGRvd24gbmVlZGVkIHVudGlsIHN0cnVjdCB4ZnNfdHJhbnMgaGFzIGl0cyBvd24gYWlscCAqLwogI2luY2x1ZGUgInhmc19iaXQuaCIKICNpbmNsdWRlICJ4ZnNfYnVmX2l0ZW0uaCIKICNpbmNsdWRlICJ4ZnNfc2IuaCIKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnNfc3BhY2UuaCBiL2ZzL3hmcy94ZnNfdHJhbnNfc3BhY2UuaAppbmRleCA0ZWEyZTUwLi43ZDJjOTIwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX3NwYWNlLmgKKysrIGIvZnMveGZzL3hmc190cmFuc19zcGFjZS5oCkBAIC00Nyw3ICs0Nyw3IEBACiAjZGVmaW5lCVhGU19ESVJSRU1PVkVfU1BBQ0VfUkVTKG1wKQlcCiAJWEZTX0RBUkVNT1ZFX1NQQUNFX1JFUyhtcCwgWEZTX0RBVEFfRk9SSykKICNkZWZpbmUJWEZTX0lBTExPQ19TUEFDRV9SRVMobXApCVwKLQkoWEZTX0lBTExPQ19CTE9DS1MobXApICsgWEZTX0lOX01BWExFVkVMUyhtcCktMSkKKwkoWEZTX0lBTExPQ19CTE9DS1MobXApICsgKG1wKS0+bV9pbl9tYXhsZXZlbHMgLSAxKQogCiAvKgogICogU3BhY2UgcmVzZXJ2YXRpb24gdmFsdWVzIGZvciB2YXJpb3VzIHRyYW5zYWN0aW9ucy4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHlwZXMuaCBiL2ZzL3hmcy94ZnNfdHlwZXMuaAppbmRleCBiMmY3MjQ1Li5kNzI1NDI4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3R5cGVzLmgKKysrIGIvZnMveGZzL3hmc190eXBlcy5oCkBAIC0yMSwxNCArMjEsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogLyoKLSAqIFBPU0lYIEV4dGVuc2lvbnMKLSAqLwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1Y2hhcl90OwotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJdXNob3J0X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGludAkJdWludF90OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nCQl1bG9uZ190OwotCi0vKgogICogQWRkaXRpb25hbCB0eXBlIGRlY2xhcmF0aW9ucyBmb3IgWEZTCiAgKi8KIHR5cGVkZWYgc2lnbmVkIGNoYXIJCV9faW50OF90OwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc191dGlscy5jIGIvZnMveGZzL3hmc191dGlscy5jCmluZGV4IGZjYzIyODUuLjc5YjllNWUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdXRpbHMuYworKysgYi9mcy94ZnMveGZzX3V0aWxzLmMKQEAgLTM3NCw3ICszNzQsNyBAQAogCiAJLyoKIAkgKiBGb2xsb3cgdGhlIG5vcm1hbCB0cnVuY2F0ZSBsb2NraW5nIHByb3RvY29sLiAgU2luY2Ugd2UKLQkgKiBob2xkIHRoZSBpbm9kZSBpbiB0aGUgdHJhbnNhY3Rpb24sIHdlIGtub3cgdGhhdCBpdCdzIG51bWJlcgorCSAqIGhvbGQgdGhlIGlub2RlIGluIHRoZSB0cmFuc2FjdGlvbiwgd2Uga25vdyB0aGF0IGl0cyBudW1iZXIKIAkgKiBvZiByZWZlcmVuY2VzIHdpbGwgc3RheSBjb25zdGFudC4KIAkgKi8KIAl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCAwZTU1YzVkLi43Mzk0YzdhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC0xMTM2LDcgKzExMzYsNyBAQAogCSAqIElmIHRoZSBpbm9kZSBpcyBhbHJlYWR5IGZyZWUsIHRoZW4gdGhlcmUgY2FuIGJlIG5vdGhpbmcKIAkgKiB0byBjbGVhbiB1cCBoZXJlLgogCSAqLwotCWlmIChpcC0+aV9kLmRpX21vZGUgPT0gMCB8fCBWTl9CQUQoVkZTX0koaXApKSkgeworCWlmIChpcC0+aV9kLmRpX21vZGUgPT0gMCB8fCBpc19iYWRfaW5vZGUoVkZTX0koaXApKSkgewogCQlBU1NFUlQoaXAtPmlfZGYuaWZfcmVhbF9ieXRlcyA9PSAwKTsKIAkJQVNTRVJUKGlwLT5pX2RmLmlmX2Jyb290X2J5dGVzID09IDApOwogCQlyZXR1cm4gVk5fSU5BQ1RJVkVfQ0FDSEU7CkBAIC0xMzg3LDIzICsxMzg3LDI4IEBACiAJeGZzX2lub2RlX3QJCSoqaXBwLAogCWNyZWRfdAkJCSpjcmVkcCkKIHsKLQl4ZnNfbW91bnRfdAkJKm1wID0gZHAtPmlfbW91bnQ7Ci0JeGZzX2lub2RlX3QJCSppcDsKLQl4ZnNfdHJhbnNfdAkJKnRwOworCWludAkJCWlzX2RpciA9IFNfSVNESVIobW9kZSk7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBkcC0+aV9tb3VudDsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IE5VTEw7CisJc3RydWN0IHhmc190cmFucwkqdHAgPSBOVUxMOwogCWludAkJCWVycm9yOwogCXhmc19ibWFwX2ZyZWVfdAkJZnJlZV9saXN0OwogCXhmc19mc2Jsb2NrX3QJCWZpcnN0X2Jsb2NrOwogCWJvb2xlYW5fdAkJdW5sb2NrX2RwX29uX2Vycm9yID0gQl9GQUxTRTsKLQlpbnQJCQlkbV9ldmVudF9zZW50ID0gMDsKIAl1aW50CQkJY2FuY2VsX2ZsYWdzOwogCWludAkJCWNvbW1pdHRlZDsKIAl4ZnNfcHJpZF90CQlwcmlkOwotCXN0cnVjdCB4ZnNfZHF1b3QJKnVkcXAsICpnZHFwOworCXN0cnVjdCB4ZnNfZHF1b3QJKnVkcXAgPSBOVUxMOworCXN0cnVjdCB4ZnNfZHF1b3QJKmdkcXAgPSBOVUxMOwogCXVpbnQJCQlyZXNibGtzOworCXVpbnQJCQlsb2dfcmVzOworCXVpbnQJCQlsb2dfY291bnQ7CiAKLQlBU1NFUlQoISppcHApOwogCXhmc19pdHJhY2VfZW50cnkoZHApOwogCisJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQorCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CisKIAlpZiAoRE1fRVZFTlRfRU5BQkxFRChkcCwgRE1fRVZFTlRfQ1JFQVRFKSkgewogCQllcnJvciA9IFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfQ1JFQVRFLAogCQkJCWRwLCBETV9SSUdIVF9OVUxMLCBOVUxMLApAQCAtMTQxMiw4NCArMTQxNyw5NyBAQAogCiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKLQkJZG1fZXZlbnRfc2VudCA9IDE7CiAJfQogCi0JaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0KLQkvKiBSZXR1cm4gdGhyb3VnaCBzdGRfcmV0dXJuIGFmdGVyIHRoaXMgcG9pbnQuICovCi0KLQl1ZHFwID0gZ2RxcCA9IE5VTEw7CiAJaWYgKGRwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1BST0pJTkhFUklUKQogCQlwcmlkID0gZHAtPmlfZC5kaV9wcm9qaWQ7CiAJZWxzZQotCQlwcmlkID0gKHhmc19wcmlkX3QpZGZsdHByaWQ7CisJCXByaWQgPSBkZmx0cHJpZDsKIAogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbGxvY2F0ZWQgZHF1b3Qocykgb24gZGlzay4KIAkgKi8KIAllcnJvciA9IFhGU19RTV9EUVZPUEFMTE9DKG1wLCBkcCwKIAkJCWN1cnJlbnRfZnN1aWQoKSwgY3VycmVudF9mc2dpZCgpLCBwcmlkLAotCQkJWEZTX1FNT1BUX1FVT1RBTEx8WEZTX1FNT1BUX0lOSEVSSVQsICZ1ZHFwLCAmZ2RxcCk7CisJCQlYRlNfUU1PUFRfUVVPVEFMTCB8IFhGU19RTU9QVF9JTkhFUklULCAmdWRxcCwgJmdkcXApOwogCWlmIChlcnJvcikKIAkJZ290byBzdGRfcmV0dXJuOwogCi0JaXAgPSBOVUxMOworCWlmIChpc19kaXIpIHsKKwkJcmRldiA9IDA7CisJCXJlc2Jsa3MgPSBYRlNfTUtESVJfU1BBQ0VfUkVTKG1wLCBuYW1lLT5sZW4pOworCQlsb2dfcmVzID0gWEZTX01LRElSX0xPR19SRVMobXApOworCQlsb2dfY291bnQgPSBYRlNfTUtESVJfTE9HX0NPVU5UOworCQl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX01LRElSKTsKKwl9IGVsc2UgeworCQlyZXNibGtzID0gWEZTX0NSRUFURV9TUEFDRV9SRVMobXAsIG5hbWUtPmxlbik7CisJCWxvZ19yZXMgPSBYRlNfQ1JFQVRFX0xPR19SRVMobXApOworCQlsb2dfY291bnQgPSBYRlNfQ1JFQVRFX0xPR19DT1VOVDsKKwkJdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19DUkVBVEUpOworCX0KIAotCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfQ1JFQVRFKTsKIAljYW5jZWxfZmxhZ3MgPSBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTOwotCXJlc2Jsa3MgPSBYRlNfQ1JFQVRFX1NQQUNFX1JFUyhtcCwgbmFtZS0+bGVuKTsKKwogCS8qCiAJICogSW5pdGlhbGx5IGFzc3VtZSB0aGF0IHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IGFuZAogCSAqIHJlc2VydmUgdGhlIHJlc291cmNlcyBmb3IgdGhhdCBjYXNlLiAgSWYgdGhhdCBpcyBub3QKIAkgKiB0aGUgY2FzZSB3ZSdsbCBkcm9wIHRoZSBvbmUgd2UgaGF2ZSBhbmQgZ2V0IGEgbW9yZQogCSAqIGFwcHJvcHJpYXRlIHRyYW5zYWN0aW9uIGxhdGVyLgogCSAqLwotCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIHJlc2Jsa3MsIFhGU19DUkVBVEVfTE9HX1JFUyhtcCksIDAsCi0JCQlYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLCBYRlNfQ1JFQVRFX0xPR19DT1VOVCk7CisJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgcmVzYmxrcywgbG9nX3JlcywgMCwKKwkJCVhGU19UUkFOU19QRVJNX0xPR19SRVMsIGxvZ19jb3VudCk7CiAJaWYgKGVycm9yID09IEVOT1NQQykgewogCQlyZXNibGtzID0gMDsKLQkJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgMCwgWEZTX0NSRUFURV9MT0dfUkVTKG1wKSwgMCwKLQkJCQlYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLCBYRlNfQ1JFQVRFX0xPR19DT1VOVCk7CisJCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIGxvZ19yZXMsIDAsCisJCQkJWEZTX1RSQU5TX1BFUk1fTE9HX1JFUywgbG9nX2NvdW50KTsKIAl9CiAJaWYgKGVycm9yKSB7CiAJCWNhbmNlbF9mbGFncyA9IDA7Ci0JCWdvdG8gZXJyb3JfcmV0dXJuOworCQlnb3RvIG91dF90cmFuc19jYW5jZWw7CiAJfQogCiAJeGZzX2lsb2NrKGRwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JTE9DS19QQVJFTlQpOwogCXVubG9ja19kcF9vbl9lcnJvciA9IEJfVFJVRTsKIAotCXhmc19ibWFwX2luaXQoJmZyZWVfbGlzdCwgJmZpcnN0X2Jsb2NrKTsKKwkvKgorCSAqIENoZWNrIGZvciBkaXJlY3RvcnkgbGluayBjb3VudCBvdmVyZmxvdy4KKwkgKi8KKwlpZiAoaXNfZGlyICYmIGRwLT5pX2QuZGlfbmxpbmsgPj0gWEZTX01BWExJTkspIHsKKwkJZXJyb3IgPSBYRlNfRVJST1IoRU1MSU5LKTsKKwkJZ290byBvdXRfdHJhbnNfY2FuY2VsOworCX0KIAotCUFTU0VSVChpcCA9PSBOVUxMKTsKKwl4ZnNfYm1hcF9pbml0KCZmcmVlX2xpc3QsICZmaXJzdF9ibG9jayk7CiAKIAkvKgogCSAqIFJlc2VydmUgZGlzayBxdW90YSBhbmQgdGhlIGlub2RlLgogCSAqLwogCWVycm9yID0gWEZTX1RSQU5TX1JFU0VSVkVfUVVPVEEobXAsIHRwLCB1ZHFwLCBnZHFwLCByZXNibGtzLCAxLCAwKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyb3JfcmV0dXJuOworCQlnb3RvIG91dF90cmFuc19jYW5jZWw7CiAKIAllcnJvciA9IHhmc19kaXJfY2FuZW50ZXIodHAsIGRwLCBuYW1lLCByZXNibGtzKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZXJyb3JfcmV0dXJuOwotCWVycm9yID0geGZzX2Rpcl9pYWxsb2MoJnRwLCBkcCwgbW9kZSwgMSwKLQkJCXJkZXYsIGNyZWRwLCBwcmlkLCByZXNibGtzID4gMCwKLQkJCSZpcCwgJmNvbW1pdHRlZCk7CisJCWdvdG8gb3V0X3RyYW5zX2NhbmNlbDsKKworCS8qCisJICogQSBuZXdseSBjcmVhdGVkIHJlZ3VsYXIgb3Igc3BlY2lhbCBmaWxlIGp1c3QgaGFzIG9uZSBkaXJlY3RvcnkKKwkgKiBlbnRyeSBwb2ludGluZyB0byB0aGVtLCBidXQgYSBkaXJlY3RvcnkgYWxzbyB0aGUgIi4iIGVudHJ5CisJICogcG9pbnRpbmcgdG8gaXRzZWxmLgorCSAqLworCWVycm9yID0geGZzX2Rpcl9pYWxsb2MoJnRwLCBkcCwgbW9kZSwgaXNfZGlyID8gMiA6IDEsIHJkZXYsIGNyZWRwLAorCQkJICAgICAgIHByaWQsIHJlc2Jsa3MgPiAwLCAmaXAsICZjb21taXR0ZWQpOwogCWlmIChlcnJvcikgewogCQlpZiAoZXJyb3IgPT0gRU5PU1BDKQotCQkJZ290byBlcnJvcl9yZXR1cm47Ci0JCWdvdG8gYWJvcnRfcmV0dXJuOworCQkJZ290byBvdXRfdHJhbnNfY2FuY2VsOworCQlnb3RvIG91dF90cmFuc19hYm9ydDsKIAl9Ci0JeGZzX2l0cmFjZV9yZWYoaXApOwogCiAJLyoKIAkgKiBBdCB0aGlzIHBvaW50LCB3ZSd2ZSBnb3R0ZW4gYSBuZXdseSBhbGxvY2F0ZWQgaW5vZGUuCiAJICogSXQgaXMgbG9ja2VkIChhbmQgam9pbmVkIHRvIHRoZSB0cmFuc2FjdGlvbikuCiAJICovCi0KKwl4ZnNfaXRyYWNlX3JlZihpcCk7CiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMKSk7CiAKIAkvKgpAQCAtMTUwOCwxOSArMTUyNiwyOCBAQAogCQkJCQlyZXNibGtzIC0gWEZTX0lBTExPQ19TUEFDRV9SRVMobXApIDogMCk7CiAJaWYgKGVycm9yKSB7CiAJCUFTU0VSVChlcnJvciAhPSBFTk9TUEMpOwotCQlnb3RvIGFib3J0X3JldHVybjsKKwkJZ290byBvdXRfdHJhbnNfYWJvcnQ7CiAJfQogCXhmc19pY2hndGltZShkcCwgWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEcpOwogCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGRwLCBYRlNfSUxPR19DT1JFKTsKIAorCWlmIChpc19kaXIpIHsKKwkJZXJyb3IgPSB4ZnNfZGlyX2luaXQodHAsIGlwLCBkcCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2JtYXBfY2FuY2VsOworCisJCWVycm9yID0geGZzX2J1bXBsaW5rKHRwLCBkcCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X2JtYXBfY2FuY2VsOworCX0KKwogCS8qCiAJICogSWYgdGhpcyBpcyBhIHN5bmNocm9ub3VzIG1vdW50LCBtYWtlIHN1cmUgdGhhdCB0aGUKIAkgKiBjcmVhdGUgdHJhbnNhY3Rpb24gZ29lcyB0byBkaXNrIGJlZm9yZSByZXR1cm5pbmcgdG8KIAkgKiB0aGUgdXNlci4KIAkgKi8KLQlpZiAobXAtPm1fZmxhZ3MgJiAoWEZTX01PVU5UX1dTWU5DfFhGU19NT1VOVF9ESVJTWU5DKSkgeworCWlmIChtcC0+bV9mbGFncyAmIChYRlNfTU9VTlRfV1NZTkN8WEZTX01PVU5UX0RJUlNZTkMpKQogCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwotCX0KIAogCS8qCiAJICogQXR0YWNoIHRoZSBkcXVvdChzKSB0byB0aGUgaW5vZGVzIGFuZCBtb2RpZnkgdGhlbSBpbmNvcmUuCkBAIC0xNTM3LDE2ICsxNTY0LDEzIEBACiAJSUhPTEQoaXApOwogCiAJZXJyb3IgPSB4ZnNfYm1hcF9maW5pc2goJnRwLCAmZnJlZV9saXN0LCAmY29tbWl0dGVkKTsKLQlpZiAoZXJyb3IpIHsKLQkJeGZzX2JtYXBfY2FuY2VsKCZmcmVlX2xpc3QpOwotCQlnb3RvIGFib3J0X3JlbGU7Ci0JfQorCWlmIChlcnJvcikKKwkJZ290byBvdXRfYWJvcnRfcmVsZTsKIAogCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUyk7CiAJaWYgKGVycm9yKSB7CiAJCUlSRUxFKGlwKTsKLQkJdHAgPSBOVUxMOwotCQlnb3RvIGVycm9yX3JldHVybjsKKwkJZ290byBvdXRfZHFyZWxlOwogCX0KIAogCVhGU19RTV9EUVJFTEUobXAsIHVkcXApOwpAQCAtMTU1NSwyNiArMTU3OSwyMiBAQAogCSppcHAgPSBpcDsKIAogCS8qIEZhbGx0aHJvdWdoIHRvIHN0ZF9yZXR1cm4gd2l0aCBlcnJvciA9IDAgICovCi0KLXN0ZF9yZXR1cm46Ci0JaWYgKCgqaXBwIHx8IChlcnJvciAhPSAwICYmIGRtX2V2ZW50X3NlbnQgIT0gMCkpICYmCi0JICAgIERNX0VWRU5UX0VOQUJMRUQoZHAsIERNX0VWRU5UX1BPU1RDUkVBVEUpKSB7Ci0JCSh2b2lkKSBYRlNfU0VORF9OQU1FU1AobXAsIERNX0VWRU5UX1BPU1RDUkVBVEUsCi0JCQlkcCwgRE1fUklHSFRfTlVMTCwKLQkJCSppcHAgPyBpcCA6IE5VTEwsCi0JCQlETV9SSUdIVF9OVUxMLCBuYW1lLT5uYW1lLCBOVUxMLAotCQkJbW9kZSwgZXJyb3IsIDApOworIHN0ZF9yZXR1cm46CisJaWYgKERNX0VWRU5UX0VOQUJMRUQoZHAsIERNX0VWRU5UX1BPU1RDUkVBVEUpKSB7CisJCVhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfUE9TVENSRUFURSwgZHAsIERNX1JJR0hUX05VTEwsCisJCQkJaXAsIERNX1JJR0hUX05VTEwsIG5hbWUtPm5hbWUsIE5VTEwsIG1vZGUsCisJCQkJZXJyb3IsIDApOwogCX0KKwogCXJldHVybiBlcnJvcjsKIAotIGFib3J0X3JldHVybjoKKyBvdXRfYm1hcF9jYW5jZWw6CisJeGZzX2JtYXBfY2FuY2VsKCZmcmVlX2xpc3QpOworIG91dF90cmFuc19hYm9ydDoKIAljYW5jZWxfZmxhZ3MgfD0gWEZTX1RSQU5TX0FCT1JUOwotCS8qIEZBTExUSFJPVUdIICovCi0KLSBlcnJvcl9yZXR1cm46Ci0JaWYgKHRwICE9IE5VTEwpCi0JCXhmc190cmFuc19jYW5jZWwodHAsIGNhbmNlbF9mbGFncyk7Ci0KKyBvdXRfdHJhbnNfY2FuY2VsOgorCXhmc190cmFuc19jYW5jZWwodHAsIGNhbmNlbF9mbGFncyk7Cisgb3V0X2RxcmVsZToKIAlYRlNfUU1fRFFSRUxFKG1wLCB1ZHFwKTsKIAlYRlNfUU1fRFFSRUxFKG1wLCBnZHFwKTsKIApAQCAtMTU4MywyMCArMTYwMywxOCBAQAogCiAJZ290byBzdGRfcmV0dXJuOwogCi0gYWJvcnRfcmVsZToKKyBvdXRfYWJvcnRfcmVsZToKIAkvKgogCSAqIFdhaXQgdW50aWwgYWZ0ZXIgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCB0bwogCSAqIHJlbGVhc2UgdGhlIGlub2RlLiAgVGhpcyBwcmV2ZW50cyByZWN1cnNpdmUgdHJhbnNhY3Rpb25zCiAJICogYW5kIGRlYWRsb2NrcyBmcm9tIHhmc19pbmFjdGl2ZS4KIAkgKi8KKwl4ZnNfYm1hcF9jYW5jZWwoJmZyZWVfbGlzdCk7CiAJY2FuY2VsX2ZsYWdzIHw9IFhGU19UUkFOU19BQk9SVDsKIAl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBjYW5jZWxfZmxhZ3MpOwogCUlSRUxFKGlwKTsKLQotCVhGU19RTV9EUVJFTEUobXAsIHVkcXApOwotCVhGU19RTV9EUVJFTEUobXAsIGdkcXApOwotCi0JZ290byBzdGRfcmV0dXJuOworCXVubG9ja19kcF9vbl9lcnJvciA9IEJfRkFMU0U7CisJZ290byBvdXRfZHFyZWxlOwogfQogCiAjaWZkZWYgREVCVUcKQEAgLTIwMDQsOCArMjAyMiwxMCBAQAogCS8qIFJldHVybiB0aHJvdWdoIHN0ZF9yZXR1cm4gYWZ0ZXIgdGhpcyBwb2ludC4gKi8KIAogCWVycm9yID0gWEZTX1FNX0RRQVRUQUNIKG1wLCBzaXAsIDApOwotCWlmICghZXJyb3IgJiYgc2lwICE9IHRkcCkKLQkJZXJyb3IgPSBYRlNfUU1fRFFBVFRBQ0gobXAsIHRkcCwgMCk7CisJaWYgKGVycm9yKQorCQlnb3RvIHN0ZF9yZXR1cm47CisKKwllcnJvciA9IFhGU19RTV9EUUFUVEFDSChtcCwgdGRwLCAwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gc3RkX3JldHVybjsKIApAQCAtMjExMCwyMDkgKzIxMzAsNiBAQAogCWdvdG8gc3RkX3JldHVybjsKIH0KIAotCi1pbnQKLXhmc19ta2RpcigKLQl4ZnNfaW5vZGVfdCAgICAgICAgICAgICAqZHAsCi0Jc3RydWN0IHhmc19uYW1lCQkqZGlyX25hbWUsCi0JbW9kZV90CQkJbW9kZSwKLQl4ZnNfaW5vZGVfdAkJKippcHAsCi0JY3JlZF90CQkJKmNyZWRwKQotewotCXhmc19tb3VudF90CQkqbXAgPSBkcC0+aV9tb3VudDsKLQl4ZnNfaW5vZGVfdAkJKmNkcDsJLyogaW5vZGUgb2YgY3JlYXRlZCBkaXIgKi8KLQl4ZnNfdHJhbnNfdAkJKnRwOwotCWludAkJCWNhbmNlbF9mbGFnczsKLQlpbnQJCQllcnJvcjsKLQlpbnQJCQljb21taXR0ZWQ7Ci0JeGZzX2JtYXBfZnJlZV90ICAgICAgICAgZnJlZV9saXN0OwotCXhmc19mc2Jsb2NrX3QgICAgICAgICAgIGZpcnN0X2Jsb2NrOwotCWJvb2xlYW5fdAkJdW5sb2NrX2RwX29uX2Vycm9yID0gQl9GQUxTRTsKLQlib29sZWFuX3QJCWNyZWF0ZWQgPSBCX0ZBTFNFOwotCWludAkJCWRtX2V2ZW50X3NlbnQgPSAwOwotCXhmc19wcmlkX3QJCXByaWQ7Ci0Jc3RydWN0IHhmc19kcXVvdAkqdWRxcCwgKmdkcXA7Ci0JdWludAkJCXJlc2Jsa3M7Ci0KLQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCi0JCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQotCXRwID0gTlVMTDsKLQotCWlmIChETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9DUkVBVEUpKSB7Ci0JCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9DUkVBVEUsCi0JCQkJCWRwLCBETV9SSUdIVF9OVUxMLCBOVUxMLAotCQkJCQlETV9SSUdIVF9OVUxMLCBkaXJfbmFtZS0+bmFtZSwgTlVMTCwKLQkJCQkJbW9kZSwgMCwgMCk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKLQkJZG1fZXZlbnRfc2VudCA9IDE7Ci0JfQotCi0JLyogUmV0dXJuIHRocm91Z2ggc3RkX3JldHVybiBhZnRlciB0aGlzIHBvaW50LiAqLwotCi0JeGZzX2l0cmFjZV9lbnRyeShkcCk7Ci0KLQltcCA9IGRwLT5pX21vdW50OwotCXVkcXAgPSBnZHFwID0gTlVMTDsKLQlpZiAoZHAtPmlfZC5kaV9mbGFncyAmIFhGU19ESUZMQUdfUFJPSklOSEVSSVQpCi0JCXByaWQgPSBkcC0+aV9kLmRpX3Byb2ppZDsKLQllbHNlCi0JCXByaWQgPSAoeGZzX3ByaWRfdClkZmx0cHJpZDsKLQotCS8qCi0JICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhbGxvY2F0ZWQgZHF1b3Qocykgb24gZGlzay4KLQkgKi8KLQllcnJvciA9IFhGU19RTV9EUVZPUEFMTE9DKG1wLCBkcCwKLQkJCWN1cnJlbnRfZnN1aWQoKSwgY3VycmVudF9mc2dpZCgpLCBwcmlkLAotCQkJWEZTX1FNT1BUX1FVT1RBTEwgfCBYRlNfUU1PUFRfSU5IRVJJVCwgJnVkcXAsICZnZHFwKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gc3RkX3JldHVybjsKLQotCXRwID0geGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfTUtESVIpOwotCWNhbmNlbF9mbGFncyA9IFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVM7Ci0JcmVzYmxrcyA9IFhGU19NS0RJUl9TUEFDRV9SRVMobXAsIGRpcl9uYW1lLT5sZW4pOwotCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIHJlc2Jsa3MsIFhGU19NS0RJUl9MT0dfUkVTKG1wKSwgMCwKLQkJCQkgIFhGU19UUkFOU19QRVJNX0xPR19SRVMsIFhGU19NS0RJUl9MT0dfQ09VTlQpOwotCWlmIChlcnJvciA9PSBFTk9TUEMpIHsKLQkJcmVzYmxrcyA9IDA7Ci0JCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsIFhGU19NS0RJUl9MT0dfUkVTKG1wKSwgMCwKLQkJCQkJICBYRlNfVFJBTlNfUEVSTV9MT0dfUkVTLAotCQkJCQkgIFhGU19NS0RJUl9MT0dfQ09VTlQpOwotCX0KLQlpZiAoZXJyb3IpIHsKLQkJY2FuY2VsX2ZsYWdzID0gMDsKLQkJZ290byBlcnJvcl9yZXR1cm47Ci0JfQotCi0JeGZzX2lsb2NrKGRwLCBYRlNfSUxPQ0tfRVhDTCB8IFhGU19JTE9DS19QQVJFTlQpOwotCXVubG9ja19kcF9vbl9lcnJvciA9IEJfVFJVRTsKLQotCS8qCi0JICogQ2hlY2sgZm9yIGRpcmVjdG9yeSBsaW5rIGNvdW50IG92ZXJmbG93LgotCSAqLwotCWlmIChkcC0+aV9kLmRpX25saW5rID49IFhGU19NQVhMSU5LKSB7Ci0JCWVycm9yID0gWEZTX0VSUk9SKEVNTElOSyk7Ci0JCWdvdG8gZXJyb3JfcmV0dXJuOwotCX0KLQotCS8qCi0JICogUmVzZXJ2ZSBkaXNrIHF1b3RhIGFuZCB0aGUgaW5vZGUuCi0JICovCi0JZXJyb3IgPSBYRlNfVFJBTlNfUkVTRVJWRV9RVU9UQShtcCwgdHAsIHVkcXAsIGdkcXAsIHJlc2Jsa3MsIDEsIDApOwotCWlmIChlcnJvcikKLQkJZ290byBlcnJvcl9yZXR1cm47Ci0KLQllcnJvciA9IHhmc19kaXJfY2FuZW50ZXIodHAsIGRwLCBkaXJfbmFtZSwgcmVzYmxrcyk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycm9yX3JldHVybjsKLQkvKgotCSAqIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGlub2RlLgotCSAqLwotCWVycm9yID0geGZzX2Rpcl9pYWxsb2MoJnRwLCBkcCwgbW9kZSwgMiwKLQkJCTAsIGNyZWRwLCBwcmlkLCByZXNibGtzID4gMCwKLQkJJmNkcCwgTlVMTCk7Ci0JaWYgKGVycm9yKSB7Ci0JCWlmIChlcnJvciA9PSBFTk9TUEMpCi0JCQlnb3RvIGVycm9yX3JldHVybjsKLQkJZ290byBhYm9ydF9yZXR1cm47Ci0JfQotCXhmc19pdHJhY2VfcmVmKGNkcCk7Ci0KLQkvKgotCSAqIE5vdyB3ZSBhZGQgdGhlIGRpcmVjdG9yeSBpbm9kZSB0byB0aGUgdHJhbnNhY3Rpb24uCi0JICogV2Ugd2FpdGVkIHVudGlsIG5vdyBzaW5jZSB4ZnNfZGlyX2lhbGxvYyBtaWdodCBzdGFydAotCSAqIGEgbmV3IHRyYW5zYWN0aW9uLiAgSGFkIHdlIGpvaW5lZCB0aGUgdHJhbnNhY3Rpb24KLQkgKiBlYXJsaWVyLCB0aGUgbG9ja3MgbWlnaHQgaGF2ZSBnb3R0ZW4gcmVsZWFzZWQuIEFuIGVycm9yCi0JICogZnJvbSBoZXJlIG9uIHdpbGwgcmVzdWx0IGluIHRoZSB0cmFuc2FjdGlvbiBjYW5jZWwKLQkgKiB1bmxvY2tpbmcgZHAgc28gZG9uJ3QgZG8gaXQgZXhwbGljaXRseSBpbiB0aGUgZXJyb3IgcGF0aC4KLQkgKi8KLQlJSE9MRChkcCk7Ci0JeGZzX3RyYW5zX2lqb2luKHRwLCBkcCwgWEZTX0lMT0NLX0VYQ0wpOwotCXVubG9ja19kcF9vbl9lcnJvciA9IEJfRkFMU0U7Ci0KLQl4ZnNfYm1hcF9pbml0KCZmcmVlX2xpc3QsICZmaXJzdF9ibG9jayk7Ci0KLQllcnJvciA9IHhmc19kaXJfY3JlYXRlbmFtZSh0cCwgZHAsIGRpcl9uYW1lLCBjZHAtPmlfaW5vLAotCQkJCQkmZmlyc3RfYmxvY2ssICZmcmVlX2xpc3QsIHJlc2Jsa3MgPwotCQkJCQlyZXNibGtzIC0gWEZTX0lBTExPQ19TUEFDRV9SRVMobXApIDogMCk7Ci0JaWYgKGVycm9yKSB7Ci0JCUFTU0VSVChlcnJvciAhPSBFTk9TUEMpOwotCQlnb3RvIGVycm9yMTsKLQl9Ci0JeGZzX2ljaGd0aW1lKGRwLCBYRlNfSUNIR1RJTUVfTU9EIHwgWEZTX0lDSEdUSU1FX0NIRyk7Ci0KLQllcnJvciA9IHhmc19kaXJfaW5pdCh0cCwgY2RwLCBkcCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycm9yMjsKLQotCWVycm9yID0geGZzX2J1bXBsaW5rKHRwLCBkcCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGVycm9yMjsKLQotCWNyZWF0ZWQgPSBCX1RSVUU7Ci0KLQkqaXBwID0gY2RwOwotCUlIT0xEKGNkcCk7Ci0KLQkvKgotCSAqIEF0dGFjaCB0aGUgZHF1b3RzIHRvIHRoZSBuZXcgaW5vZGUgYW5kIG1vZGlmeSB0aGUgaWNvdW50IGluY29yZS4KLQkgKi8KLQlYRlNfUU1fRFFWT1BDUkVBVEUobXAsIHRwLCBjZHAsIHVkcXAsIGdkcXApOwotCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGEgc3luY2hyb25vdXMgbW91bnQsIG1ha2Ugc3VyZSB0aGF0IHRoZQotCSAqIG1rZGlyIHRyYW5zYWN0aW9uIGdvZXMgdG8gZGlzayBiZWZvcmUgcmV0dXJuaW5nIHRvCi0JICogdGhlIHVzZXIuCi0JICovCi0JaWYgKG1wLT5tX2ZsYWdzICYgKFhGU19NT1VOVF9XU1lOQ3xYRlNfTU9VTlRfRElSU1lOQykpIHsKLQkJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKLQl9Ci0KLQllcnJvciA9IHhmc19ibWFwX2ZpbmlzaCgmdHAsICZmcmVlX2xpc3QsICZjb21taXR0ZWQpOwotCWlmIChlcnJvcikgewotCQlJUkVMRShjZHApOwotCQlnb3RvIGVycm9yMjsKLQl9Ci0KLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpOwotCVhGU19RTV9EUVJFTEUobXAsIHVkcXApOwotCVhGU19RTV9EUVJFTEUobXAsIGdkcXApOwotCWlmIChlcnJvcikgewotCQlJUkVMRShjZHApOwotCX0KLQotCS8qIEZhbGwgdGhyb3VnaCB0byBzdGRfcmV0dXJuIHdpdGggZXJyb3IgPSAwIG9yIGVycm5vIGZyb20KLQkgKiB4ZnNfdHJhbnNfY29tbWl0LiAqLwotCi1zdGRfcmV0dXJuOgotCWlmICgoY3JlYXRlZCB8fCAoZXJyb3IgIT0gMCAmJiBkbV9ldmVudF9zZW50ICE9IDApKSAmJgotCSAgICBETV9FVkVOVF9FTkFCTEVEKGRwLCBETV9FVkVOVF9QT1NUQ1JFQVRFKSkgewotCQkodm9pZCkgWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9QT1NUQ1JFQVRFLAotCQkJCQlkcCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJY3JlYXRlZCA/IGNkcCA6IE5VTEwsCi0JCQkJCURNX1JJR0hUX05VTEwsCi0JCQkJCWRpcl9uYW1lLT5uYW1lLCBOVUxMLAotCQkJCQltb2RlLCBlcnJvciwgMCk7Ci0JfQotCXJldHVybiBlcnJvcjsKLQotIGVycm9yMjoKLSBlcnJvcjE6Ci0JeGZzX2JtYXBfY2FuY2VsKCZmcmVlX2xpc3QpOwotIGFib3J0X3JldHVybjoKLQljYW5jZWxfZmxhZ3MgfD0gWEZTX1RSQU5TX0FCT1JUOwotIGVycm9yX3JldHVybjoKLQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCBjYW5jZWxfZmxhZ3MpOwotCVhGU19RTV9EUVJFTEUobXAsIHVkcXApOwotCVhGU19RTV9EUVJFTEUobXAsIGdkcXApOwotCi0JaWYgKHVubG9ja19kcF9vbl9lcnJvcikKLQkJeGZzX2l1bmxvY2soZHAsIFhGU19JTE9DS19FWENMKTsKLQotCWdvdG8gc3RkX3JldHVybjsKLX0KLQogaW50CiB4ZnNfc3ltbGluaygKIAl4ZnNfaW5vZGVfdAkJKmRwLApAQCAtMjU4Nyw1MSArMjQwNCw2IEBACiB9CiAKIGludAoteGZzX2lub2RlX2ZsdXNoKAotCXhmc19pbm9kZV90CSppcCwKLQlpbnQJCWZsYWdzKQotewotCXhmc19tb3VudF90CSptcCA9IGlwLT5pX21vdW50OwotCWludAkJZXJyb3IgPSAwOwotCi0JaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0KLQkvKgotCSAqIEJ5cGFzcyBpbm9kZXMgd2hpY2ggaGF2ZSBhbHJlYWR5IGJlZW4gY2xlYW5lZCBieQotCSAqIHRoZSBpbm9kZSBmbHVzaCBjbHVzdGVyaW5nIGNvZGUgaW5zaWRlIHhmc19pZmx1c2gKLQkgKi8KLQlpZiAoeGZzX2lub2RlX2NsZWFuKGlwKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFdlIG1ha2UgdGhpcyBub24tYmxvY2tpbmcgaWYgdGhlIGlub2RlIGlzIGNvbnRlbmRlZCwKLQkgKiByZXR1cm4gRUFHQUlOIHRvIGluZGljYXRlIHRvIHRoZSBjYWxsZXIgdGhhdCB0aGV5Ci0JICogZGlkIG5vdCBzdWNjZWVkLiBUaGlzIHByZXZlbnRzIHRoZSBmbHVzaCBwYXRoIGZyb20KLQkgKiBibG9ja2luZyBvbiBpbm9kZXMgaW5zaWRlIGFub3RoZXIgb3BlcmF0aW9uIHJpZ2h0Ci0JICogbm93LCB0aGV5IGdldCBjYXVnaHQgbGF0ZXIgYnkgeGZzX3N5bmMuCi0JICovCi0JaWYgKGZsYWdzICYgRkxVU0hfU1lOQykgewotCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCQl4ZnNfaWZsb2NrKGlwKTsKLQl9IGVsc2UgaWYgKHhmc19pbG9ja19ub3dhaXQoaXAsIFhGU19JTE9DS19TSEFSRUQpKSB7Ci0JCWlmICh4ZnNfaXBpbmNvdW50KGlwKSB8fCAheGZzX2lmbG9ja19ub3dhaXQoaXApKSB7Ci0JCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0JCQlyZXR1cm4gRUFHQUlOOwotCQl9Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIEVBR0FJTjsKLQl9Ci0KLQllcnJvciA9IHhmc19pZmx1c2goaXAsIChmbGFncyAmIEZMVVNIX1NZTkMpID8gWEZTX0lGTFVTSF9TWU5DCi0JCQkJCQkgICAgOiBYRlNfSUZMVVNIX0FTWU5DX05PQkxPQ0spOwotCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotCi1pbnQKIHhmc19zZXRfZG1hdHRycygKIAl4ZnNfaW5vZGVfdCAgICAgKmlwLAogCXVfaW50CQlldm1hc2ssCkBAIC0yNjc2LDcgKzI0NDgsNyBAQAogCUFTU0VSVCghVk5fTUFQUEVEKFZGU19JKGlwKSkpOwogCiAJLyogYmFkIGlub2RlLCBnZXQgb3V0IGhlcmUgQVNBUCAqLwotCWlmIChWTl9CQUQoVkZTX0koaXApKSkgeworCWlmIChpc19iYWRfaW5vZGUoVkZTX0koaXApKSkgewogCQl4ZnNfaXJlY2xhaW0oaXApOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0zMDkwLDcgKzI4NjIsNyBAQAogCiAJLyoKIAkgKiBOZWVkIHRvIHplcm8gdGhlIHN0dWZmIHdlJ3JlIG5vdCBmcmVlaW5nLCBvbiBkaXNrLgotCSAqIElmIGl0cyBhIHJlYWx0aW1lIGZpbGUgJiBjYW4ndCB1c2UgdW53cml0dGVuIGV4dGVudHMgdGhlbiB3ZQorCSAqIElmIGl0J3MgYSByZWFsdGltZSBmaWxlICYgY2FuJ3QgdXNlIHVud3JpdHRlbiBleHRlbnRzIHRoZW4gd2UKIAkgKiBhY3R1YWxseSBuZWVkIHRvIHplcm8gdGhlIGV4dGVudCBlZGdlcy4gIE90aGVyd2lzZSB4ZnNfYnVubWFwaQogCSAqIHdpbGwgdGFrZSBjYXJlIG9mIGl0IGZvciB1cy4KIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaCBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaAppbmRleCA3NmRmMzI4Li4wNDM3M2M2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5oCkBAIC0zMSwxNCArMzEsMTEgQEAKIAkJc3RydWN0IHhmc19pbm9kZSAqaXApOwogaW50IHhmc19saW5rKHN0cnVjdCB4ZnNfaW5vZGUgKnRkcCwgc3RydWN0IHhmc19pbm9kZSAqc2lwLAogCQlzdHJ1Y3QgeGZzX25hbWUgKnRhcmdldF9uYW1lKTsKLWludCB4ZnNfbWtkaXIoc3RydWN0IHhmc19pbm9kZSAqZHAsIHN0cnVjdCB4ZnNfbmFtZSAqZGlyX25hbWUsCi0JCW1vZGVfdCBtb2RlLCBzdHJ1Y3QgeGZzX2lub2RlICoqaXBwLCBjcmVkX3QgKmNyZWRwKTsKIGludCB4ZnNfcmVhZGRpcihzdHJ1Y3QgeGZzX2lub2RlCSpkcCwgdm9pZCAqZGlyZW50LCBzaXplX3QgYnVmc2l6ZSwKIAkJICAgICAgIHhmc19vZmZfdCAqb2Zmc2V0LCBmaWxsZGlyX3QgZmlsbGRpcik7CiBpbnQgeGZzX3N5bWxpbmsoc3RydWN0IHhmc19pbm9kZSAqZHAsIHN0cnVjdCB4ZnNfbmFtZSAqbGlua19uYW1lLAogCQljb25zdCBjaGFyICp0YXJnZXRfcGF0aCwgbW9kZV90IG1vZGUsIHN0cnVjdCB4ZnNfaW5vZGUgKippcHAsCiAJCWNyZWRfdCAqY3JlZHApOwotaW50IHhmc19pbm9kZV9mbHVzaChzdHJ1Y3QgeGZzX2lub2RlICppcCwgaW50IGZsYWdzKTsKIGludCB4ZnNfc2V0X2RtYXR0cnMoc3RydWN0IHhmc19pbm9kZSAqaXAsIHVfaW50IGV2bWFzaywgdV9pbnQxNl90IHN0YXRlKTsKIGludCB4ZnNfcmVjbGFpbShzdHJ1Y3QgeGZzX2lub2RlICppcCk7CiBpbnQgeGZzX2NoYW5nZV9maWxlX3NwYWNlKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBpbnQgY21kLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjZXhjZXAuaCBiL2luY2x1ZGUvYWNwaS9hY2V4Y2VwLmgKaW5kZXggZWRhMDQ1NC4uNDczZDU4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjZXhjZXAuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNleGNlcC5oCkBAIC0xMDMsOCArMTAzLDkgQEAKICNkZWZpbmUgQUVfQkFEX09DVEFMX0NPTlNUQU5UICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDYgfCBBRV9DT0RFX1BST0dSQU1NRVIpCiAjZGVmaW5lIEFFX0JBRF9ERUNJTUFMX0NPTlNUQU5UICAgICAgICAgKGFjcGlfc3RhdHVzKSAoMHgwMDA3IHwgQUVfQ09ERV9QUk9HUkFNTUVSKQogI2RlZmluZSBBRV9NSVNTSU5HX0FSR1VNRU5UUyAgICAgICAgICAgIChhY3BpX3N0YXR1cykgKDB4MDAwOCB8IEFFX0NPREVfUFJPR1JBTU1FUikKKyNkZWZpbmUgQUVfQkFEX0FERFJFU1MgICAgICAgICAgICAgICAgICAoYWNwaV9zdGF0dXMpICgweDAwMDkgfCBBRV9DT0RFX1BST0dSQU1NRVIpCiAKLSNkZWZpbmUgQUVfQ09ERV9QR01fTUFYICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgQUVfQ09ERV9QR01fTUFYICAgICAgICAgICAgICAgICAweDAwMDkKIAogLyoKICAqIEFjcGkgdGFibGUgZXhjZXB0aW9ucwpAQCAtMjI0LDcgKzIyNSw4IEBACiAJIkFFX0JBRF9IRVhfQ09OU1RBTlQiLAogCSJBRV9CQURfT0NUQUxfQ09OU1RBTlQiLAogCSJBRV9CQURfREVDSU1BTF9DT05TVEFOVCIsCi0JIkFFX01JU1NJTkdfQVJHVU1FTlRTIgorCSJBRV9NSVNTSU5HX0FSR1VNRU5UUyIsCisJIkFFX0JBRF9BRERSRVNTIgogfTsKIAogY2hhciBjb25zdCAqYWNwaV9nYmxfZXhjZXB0aW9uX25hbWVzX3RibFtdID0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmggYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAppbmRleCBlOWY2NTc0Li5hMjIyODUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaV9idXMuaApAQCAtODgsNDQgKzg4LDMwIEBACiAKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9hZGQpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX3JlbW92ZSkgKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSwgaW50IHR5cGUpOwotdHlwZWRlZiBpbnQgKCphY3BpX29wX2xvY2spIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsIGludCB0eXBlKTsKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9zdGFydCkgKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSk7CiB0eXBlZGVmIGludCAoKmFjcGlfb3Bfc3RvcCkgKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSwgaW50IHR5cGUpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX3N1c3BlbmQpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsCiAJCQkJcG1fbWVzc2FnZV90IHN0YXRlKTsKIHR5cGVkZWYgaW50ICgqYWNwaV9vcF9yZXN1bWUpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwotdHlwZWRlZiBpbnQgKCphY3BpX29wX3NjYW4pIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX2JpbmQpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwogdHlwZWRlZiBpbnQgKCphY3BpX29wX3VuYmluZCkgKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSk7Ci10eXBlZGVmIGludCAoKmFjcGlfb3Bfc2h1dGRvd24pIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UpOwordHlwZWRlZiB2b2lkICgqYWNwaV9vcF9ub3RpZnkpIChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsIHUzMiBldmVudCk7CiAKIHN0cnVjdCBhY3BpX2J1c19vcHMgewogCXUzMiBhY3BpX29wX2FkZDoxOwotCXUzMiBhY3BpX29wX3JlbW92ZToxOwotCXUzMiBhY3BpX29wX2xvY2s6MTsKIAl1MzIgYWNwaV9vcF9zdGFydDoxOwotCXUzMiBhY3BpX29wX3N0b3A6MTsKLQl1MzIgYWNwaV9vcF9zdXNwZW5kOjE7Ci0JdTMyIGFjcGlfb3BfcmVzdW1lOjE7Ci0JdTMyIGFjcGlfb3Bfc2NhbjoxOwotCXUzMiBhY3BpX29wX2JpbmQ6MTsKLQl1MzIgYWNwaV9vcF91bmJpbmQ6MTsKLQl1MzIgYWNwaV9vcF9zaHV0ZG93bjoxOwotCXUzMiByZXNlcnZlZDoyMTsKIH07CiAKIHN0cnVjdCBhY3BpX2RldmljZV9vcHMgewogCWFjcGlfb3BfYWRkIGFkZDsKIAlhY3BpX29wX3JlbW92ZSByZW1vdmU7Ci0JYWNwaV9vcF9sb2NrIGxvY2s7CiAJYWNwaV9vcF9zdGFydCBzdGFydDsKIAlhY3BpX29wX3N0b3Agc3RvcDsKIAlhY3BpX29wX3N1c3BlbmQgc3VzcGVuZDsKIAlhY3BpX29wX3Jlc3VtZSByZXN1bWU7Ci0JYWNwaV9vcF9zY2FuIHNjYW47CiAJYWNwaV9vcF9iaW5kIGJpbmQ7CiAJYWNwaV9vcF91bmJpbmQgdW5iaW5kOwotCWFjcGlfb3Bfc2h1dGRvd24gc2h1dGRvd247CisJYWNwaV9vcF9ub3RpZnkgbm90aWZ5OwogfTsKIAogc3RydWN0IGFjcGlfZHJpdmVyIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaCBiL2luY2x1ZGUvYWNwaS9hY3BpX2RyaXZlcnMuaAppbmRleCA1ZmMxYmIwLi4wMzUyYzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaV9kcml2ZXJzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlfZHJpdmVycy5oCkBAIC02Nyw2ICs2NywxNiBAQAogI2RlZmluZSBBQ1BJX0JBWV9ISUQJCQkiTE5YSU9CQVkiCiAjZGVmaW5lIEFDUElfRE9DS19ISUQJCQkiTE5YRE9DSyIKIAorLyoKKyAqIEZvciBmaXhlZCBoYXJkd2FyZSBidXR0b25zLCB3ZSBmYWJyaWNhdGUgYWNwaV9kZXZpY2VzIHdpdGggSElECisgKiBBQ1BJX0JVVFRPTl9ISURfUE9XRVJGIG9yIEFDUElfQlVUVE9OX0hJRF9TTEVFUEYuICBGaXhlZCBoYXJkd2FyZQorICogc2lnbmFscyBvbmx5IGFuIGV2ZW50OyBpdCBkb2Vzbid0IHN1cHBseSBhIG5vdGlmaWNhdGlvbiB2YWx1ZS4KKyAqIFRvIGFsbG93IGRyaXZlcnMgdG8gdHJlYXQgbm90aWZpY2F0aW9ucyBmcm9tIGZpeGVkIGhhcmR3YXJlIHRoZQorICogc2FtZSBhcyB0aG9zZSBmcm9tIHJlYWwgZGV2aWNlcywgd2UgdHVybiB0aGUgZXZlbnRzIGludG8gdGhpcworICogbm90aWZpY2F0aW9uIHZhbHVlLgorICovCisjZGVmaW5lIEFDUElfRklYRURfSEFSRFdBUkVfRVZFTlQJMHgxMDAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDSQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTk5LDI0ICsxMDksNiBAQAogCQkJCSAgIGludCBidXMpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyIFJlc291cmNlCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1pbnQgYWNwaV9kZXZpY2Vfc2xlZXBfd2FrZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmFibGUsIGludCBzbGVlcF9zdGF0ZSwgaW50IGRldl9zdGF0ZSk7Ci1pbnQgYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wb3dlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiwgaW50IHNsZWVwX3N0YXRlKTsKLWludCBhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldik7Ci1pbnQgYWNwaV9wb3dlcl9nZXRfaW5mZXJyZWRfc3RhdGUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwotaW50IGFjcGlfcG93ZXJfdHJhbnNpdGlvbihzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHN0YXRlKTsKLWV4dGVybiBpbnQgYWNwaV9wb3dlcl9ub2NoZWNrOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYmVkZGVkIENvbnRyb2xsZXIKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1pbnQgYWNwaV9lY19lY2R0X3Byb2JlKHZvaWQpOwotaW50IGFjcGlfYm9vdF9lY19lbmFibGUodm9pZCk7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzb3IKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTE2NSw5ICsxNTcsNCBAQAogfQogI2VuZGlmCiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXNwZW5kL1Jlc3VtZQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotZXh0ZXJuIGludCBhY3BpX3NsZWVwX2luaXQodm9pZCk7Ci0KICNlbmRpZiAvKl9fQUNQSV9EUklWRVJTX0hfXyovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCmluZGV4IGFiMGI4NWMuLjNlNzk4NTkzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlvc3hmLmgKQEAgLTI0MiwxMCArMjQyLDYgQEAKIGFjcGlfc3RhdHVzIGFjcGlfb3NfdmFsaWRhdGVfaW50ZXJmYWNlKGNoYXIgKmludGVyZmFjZSk7CiBhY3BpX3N0YXR1cyBhY3BpX29zaV9pbnZhbGlkYXRlKGNoYXIqIGludGVyZmFjZSk7CiAKLWFjcGlfc3RhdHVzCi1hY3BpX29zX3ZhbGlkYXRlX2FkZHJlc3ModTggc3BhY2VfaWQsIGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBhZGRyZXNzLAotCQkJIGFjcGlfc2l6ZSBsZW5ndGgsIGNoYXIgKm5hbWUpOwotCiB1NjQgYWNwaV9vc19nZXRfdGltZXIodm9pZCk7CiAKIGFjcGlfc3RhdHVzIGFjcGlfb3Nfc2lnbmFsKHUzMiBmdW5jdGlvbiwgdm9pZCAqaW5mbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmggYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKaW5kZXggY2M0MDEwMi4uYWVhZjdjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaApAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBDdXJyZW50IEFDUElDQSBzdWJzeXN0ZW0gdmVyc2lvbiBpbiBZWVlZTU1ERCBmb3JtYXQgKi8KIAotI2RlZmluZSBBQ1BJX0NBX1ZFUlNJT04gICAgICAgICAgICAgICAgIDB4MjAwODEyMDQKKyNkZWZpbmUgQUNQSV9DQV9WRVJTSU9OICAgICAgICAgICAgICAgICAweDIwMDkwMzIwCiAKICNpbmNsdWRlICJhY3R5cGVzLmgiCiAjaW5jbHVkZSAiYWN0YmwuaCIKQEAgLTM0OSwxNyArMzQ5LDE1IEBACiAgKi8KIGFjcGlfc3RhdHVzIGFjcGlfcmVzZXQodm9pZCk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfZ2V0X3JlZ2lzdGVyKHUzMiByZWdpc3Rlcl9pZCwgdTMyICogcmV0dXJuX3ZhbHVlKTsKK2FjcGlfc3RhdHVzIGFjcGlfcmVhZF9iaXRfcmVnaXN0ZXIodTMyIHJlZ2lzdGVyX2lkLCB1MzIgKnJldHVybl92YWx1ZSk7CiAKLWFjcGlfc3RhdHVzIGFjcGlfZ2V0X3JlZ2lzdGVyX3VubG9ja2VkKHUzMiByZWdpc3Rlcl9pZCwgdTMyICpyZXR1cm5fdmFsdWUpOworYWNwaV9zdGF0dXMgYWNwaV93cml0ZV9iaXRfcmVnaXN0ZXIodTMyIHJlZ2lzdGVyX2lkLCB1MzIgdmFsdWUpOwogCi1hY3BpX3N0YXR1cyBhY3BpX3NldF9yZWdpc3Rlcih1MzIgcmVnaXN0ZXJfaWQsIHUzMiB2YWx1ZSk7CithY3BpX3N0YXR1cyBhY3BpX3NldF9maXJtd2FyZV93YWtpbmdfdmVjdG9yKHUzMiBwaHlzaWNhbF9hZGRyZXNzKTsKIAotYWNwaV9zdGF0dXMKLWFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3IodTMyIHBoeXNpY2FsX2FkZHJlc3MpOwotCi1hY3BpX3N0YXR1cwotYWNwaV9zZXRfZmlybXdhcmVfd2FraW5nX3ZlY3RvcjY0KHU2NCBwaHlzaWNhbF9hZGRyZXNzKTsKKyNpZiBBQ1BJX01BQ0hJTkVfV0lEVEggPT0gNjQKK2FjcGlfc3RhdHVzIGFjcGlfc2V0X2Zpcm13YXJlX3dha2luZ192ZWN0b3I2NCh1NjQgcGh5c2ljYWxfYWRkcmVzcyk7CisjZW5kaWYKIAogYWNwaV9zdGF0dXMgYWNwaV9yZWFkKHUzMiAqdmFsdWUsIHN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyAqcmVnKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwuaAppbmRleCBiZjhkNGNmLi4yMjI3MzNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwuaApAQCAtMjE0LDExICsyMTQsMTEgQEAKIAl1MTYgZmx1c2hfc2l6ZTsJCS8qIFByb2Nlc3NvcidzIG1lbW9yeSBjYWNoZSBsaW5lIHdpZHRoLCBpbiBieXRlcyAqLwogCXUxNiBmbHVzaF9zdHJpZGU7CS8qIE51bWJlciBvZiBmbHVzaCBzdHJpZGVzIHRoYXQgbmVlZCB0byBiZSByZWFkICovCiAJdTggZHV0eV9vZmZzZXQ7CQkvKiBQcm9jZXNzb3IgZHV0eSBjeWNsZSBpbmRleCBpbiBwcm9jZXNzb3IncyBQX0NOVCByZWcgKi8KLQl1OCBkdXR5X3dpZHRoOwkJLyogUHJvY2Vzc29yIGR1dHkgY3ljbGUgdmFsdWUgYml0IHdpZHRoIGluIFBfQ05UIHJlZ2lzdGVyLiAqLworCXU4IGR1dHlfd2lkdGg7CQkvKiBQcm9jZXNzb3IgZHV0eSBjeWNsZSB2YWx1ZSBiaXQgd2lkdGggaW4gUF9DTlQgcmVnaXN0ZXIgKi8KIAl1OCBkYXlfYWxhcm07CQkvKiBJbmRleCB0byBkYXktb2YtbW9udGggYWxhcm0gaW4gUlRDIENNT1MgUkFNICovCiAJdTggbW9udGhfYWxhcm07CQkvKiBJbmRleCB0byBtb250aC1vZi15ZWFyIGFsYXJtIGluIFJUQyBDTU9TIFJBTSAqLwogCXU4IGNlbnR1cnk7CQkvKiBJbmRleCB0byBjZW50dXJ5IGluIFJUQyBDTU9TIFJBTSAqLwotCXUxNiBib290X2ZsYWdzOwkJLyogSUEtUEMgQm9vdCBBcmNoaXRlY3R1cmUgRmxhZ3MuIFNlZSBUYWJsZSA1LTEwIGZvciBkZXNjcmlwdGlvbiAqLworCXUxNiBib290X2ZsYWdzOwkJLyogSUEtUEMgQm9vdCBBcmNoaXRlY3R1cmUgRmxhZ3MgKHNlZSBiZWxvdyBmb3IgaW5kaXZpZHVhbCBmbGFncykgKi8KIAl1OCByZXNlcnZlZDsJCS8qIFJlc2VydmVkLCBtdXN0IGJlIHplcm8gKi8KIAl1MzIgZmxhZ3M7CQkvKiBNaXNjZWxsYW5lb3VzIGZsYWcgYml0cyAoc2VlIGJlbG93IGZvciBpbmRpdmlkdWFsIGZsYWdzKSAqLwogCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyByZXNldF9yZWdpc3RlcjsJLyogNjQtYml0IGFkZHJlc3Mgb2YgdGhlIFJlc2V0IHJlZ2lzdGVyICovCkBAIC0yMzYsMzIgKzIzNiw0MSBAQAogCXN0cnVjdCBhY3BpX2dlbmVyaWNfYWRkcmVzcyB4Z3BlMV9ibG9jazsJLyogNjQtYml0IEV4dGVuZGVkIEdlbmVyYWwgUHVycG9zZSBFdmVudCAxIFJlZyBCbGsgYWRkcmVzcyAqLwogfTsKIAorLyogRkFEVCBCb290IEFyY2hpdGVjdHVyZSBGbGFncyAoYm9vdF9mbGFncykgKi8KKworI2RlZmluZSBBQ1BJX0ZBRFRfTEVHQUNZX0RFVklDRVMgICAgKDEpICAJLyogMDA6IFtWMl0gU3lzdGVtIGhhcyBMUEMgb3IgSVNBIGJ1cyBkZXZpY2VzICovCisjZGVmaW5lIEFDUElfRkFEVF84MDQyICAgICAgICAgICAgICAoMTw8MSkJLyogMDE6IFtWM10gU3lzdGVtIGhhcyBhbiA4MDQyIGNvbnRyb2xsZXIgb24gcG9ydCA2MC82NCAqLworI2RlZmluZSBBQ1BJX0ZBRFRfTk9fVkdBICAgICAgICAgICAgKDE8PDIpCS8qIDAyOiBbVjRdIEl0IGlzIG5vdCBzYWZlIHRvIHByb2JlIGZvciBWR0EgaGFyZHdhcmUgKi8KKyNkZWZpbmUgQUNQSV9GQURUX05PX01TSSAgICAgICAgICAgICgxPDwzKQkvKiAwMzogW1Y0XSBNZXNzYWdlIFNpZ25hbGVkIEludGVycnVwdHMgKE1TSSkgbXVzdCBub3QgYmUgZW5hYmxlZCAqLworI2RlZmluZSBBQ1BJX0ZBRFRfTk9fQVNQTSAgICAgICAgICAgKDE8PDQpCS8qIDA0OiBbVjRdIFBDSWUgQVNQTSBjb250cm9sIG11c3Qgbm90IGJlIGVuYWJsZWQgKi8KKworI2RlZmluZSBGQURUMl9SRVZJU0lPTl9JRCAgICAgICAgICAgICAgIDMKKwogLyogRkFEVCBmbGFncyAqLwogCi0jZGVmaW5lIEFDUElfRkFEVF9XQklOVkQgICAgICAgICAgICAoMSkJLyogMDA6IFRoZSB3YmludmQgaW5zdHJ1Y3Rpb24gd29ya3MgcHJvcGVybHkgKi8KLSNkZWZpbmUgQUNQSV9GQURUX1dCSU5WRF9GTFVTSCAgICAgICgxPDwxKQkvKiAwMTogVGhlIHdiaW52ZCBmbHVzaGVzIGJ1dCBkb2VzIG5vdCBpbnZhbGlkYXRlICovCi0jZGVmaW5lIEFDUElfRkFEVF9DMV9TVVBQT1JURUQgICAgICAoMTw8MikJLyogMDI6IEFsbCBwcm9jZXNzb3JzIHN1cHBvcnQgQzEgc3RhdGUgKi8KLSNkZWZpbmUgQUNQSV9GQURUX0MyX01QX1NVUFBPUlRFRCAgICgxPDwzKQkvKiAwMzogQzIgc3RhdGUgd29ya3Mgb24gTVAgc3lzdGVtICovCi0jZGVmaW5lIEFDUElfRkFEVF9QT1dFUl9CVVRUT04gICAgICAoMTw8NCkJLyogMDQ6IFBvd2VyIGJ1dHRvbiBpcyBoYW5kbGVkIGFzIGEgZ2VuZXJpYyBmZWF0dXJlICovCi0jZGVmaW5lIEFDUElfRkFEVF9TTEVFUF9CVVRUT04gICAgICAoMTw8NSkJLyogMDU6IFNsZWVwIGJ1dHRvbiBpcyBoYW5kbGVkIGFzIGEgZ2VuZXJpYyBmZWF0dXJlLCBvciAgbm90IHByZXNlbnQgKi8KLSNkZWZpbmUgQUNQSV9GQURUX0ZJWEVEX1JUQyAgICAgICAgICgxPDw2KQkvKiAwNjogUlRDIHdha2V1cCBzdGF0IG5vdCBpbiBmaXhlZCByZWdpc3RlciBzcGFjZSAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfUzRfUlRDX1dBS0UgICAgICAgKDE8PDcpCS8qIDA3OiBSVEMgd2FrZXVwIHBvc3NpYmxlIGZyb20gUzQgKi8KLSNkZWZpbmUgQUNQSV9GQURUXzMyQklUX1RJTUVSICAgICAgICgxPDw4KQkvKiAwODogdG1yX3ZhbCBpcyAzMiBiaXRzIDA9MjQtYml0cyAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfRE9DS0lOR19TVVBQT1JURUQgKDE8PDkpCS8qIDA5OiBEb2NraW5nIHN1cHBvcnRlZCAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfUkVTRVRfUkVHSVNURVIgICAgKDE8PDEwKQkvKiAxMDogU3lzdGVtIHJlc2V0IHZpYSB0aGUgRkFEVCBSRVNFVF9SRUcgc3VwcG9ydGVkICovCi0jZGVmaW5lIEFDUElfRkFEVF9TRUFMRURfQ0FTRSAgICAgICAoMTw8MTEpCS8qIDExOiBObyBpbnRlcm5hbCBleHBhbnNpb24gY2FwYWJpbGl0aWVzIGFuZCBjYXNlIGlzIHNlYWxlZCAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfSEVBRExFU1MgICAgICAgICAgKDE8PDEyKQkvKiAxMjogTm8gbG9jYWwgdmlkZW8gY2FwYWJpbGl0aWVzIG9yIGxvY2FsIGlucHV0IGRldmljZXMgKi8KLSNkZWZpbmUgQUNQSV9GQURUX1NMRUVQX1RZUEUgICAgICAgICgxPDwxMykJLyogMTM6IE11c3QgZXhlY3V0ZSBuYXRpdmUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgd3JpdGluZyAgU0xQX1RZUHggcmVnaXN0ZXIgKi8KLSNkZWZpbmUgQUNQSV9GQURUX1BDSV9FWFBSRVNTX1dBS0UgICgxPDwxNCkJLyogMTQ6IFN5c3RlbSBzdXBwb3J0cyBQQ0lFWFBfV0FLRSAoU1RTL0VOKSBiaXRzIChBQ1BJIDMuMCkgKi8KLSNkZWZpbmUgQUNQSV9GQURUX1BMQVRGT1JNX0NMT0NLICAgICgxPDwxNSkJLyogMTU6IE9TUE0gc2hvdWxkIHVzZSBwbGF0Zm9ybS1wcm92aWRlZCB0aW1lciAoQUNQSSAzLjApICovCi0jZGVmaW5lIEFDUElfRkFEVF9TNF9SVENfVkFMSUQgICAgICAoMTw8MTYpCS8qIDE2OiBDb250ZW50cyBvZiBSVENfU1RTIHZhbGlkIGFmdGVyIFM0IHdha2UgKEFDUEkgMy4wKSAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfUkVNT1RFX1BPV0VSX09OICAgKDE8PDE3KQkvKiAxNzogU3lzdGVtIGlzIGNvbXBhdGlibGUgd2l0aCByZW1vdGUgcG93ZXIgb24gKEFDUEkgMy4wKSAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfQVBJQ19DTFVTVEVSICAgICAgKDE8PDE4KQkvKiAxODogQWxsIGxvY2FsIEFQSUNzIG11c3QgdXNlIGNsdXN0ZXIgbW9kZWwgKEFDUEkgMy4wKSAqLwotI2RlZmluZSBBQ1BJX0ZBRFRfQVBJQ19QSFlTSUNBTCAgICAgKDE8PDE5KQkvKiAxOTogQWxsIGxvY2FsIHhfYVBJQ3MgbXVzdCB1c2UgcGh5c2ljYWwgZGVzdCBtb2RlIChBQ1BJIDMuMCkgKi8KKyNkZWZpbmUgQUNQSV9GQURUX1dCSU5WRCAgICAgICAgICAgICgxKQkvKiAwMDogW1YxXSBUaGUgd2JpbnZkIGluc3RydWN0aW9uIHdvcmtzIHByb3Blcmx5ICovCisjZGVmaW5lIEFDUElfRkFEVF9XQklOVkRfRkxVU0ggICAgICAoMTw8MSkJLyogMDE6IFtWMV0gd2JpbnZkIGZsdXNoZXMgYnV0IGRvZXMgbm90IGludmFsaWRhdGUgY2FjaGVzICovCisjZGVmaW5lIEFDUElfRkFEVF9DMV9TVVBQT1JURUQgICAgICAoMTw8MikJLyogMDI6IFtWMV0gQWxsIHByb2Nlc3NvcnMgc3VwcG9ydCBDMSBzdGF0ZSAqLworI2RlZmluZSBBQ1BJX0ZBRFRfQzJfTVBfU1VQUE9SVEVEICAgKDE8PDMpCS8qIDAzOiBbVjFdIEMyIHN0YXRlIHdvcmtzIG9uIE1QIHN5c3RlbSAqLworI2RlZmluZSBBQ1BJX0ZBRFRfUE9XRVJfQlVUVE9OICAgICAgKDE8PDQpCS8qIDA0OiBbVjFdIFBvd2VyIGJ1dHRvbiBpcyBoYW5kbGVkIGFzIGEgY29udHJvbCBtZXRob2QgZGV2aWNlICovCisjZGVmaW5lIEFDUElfRkFEVF9TTEVFUF9CVVRUT04gICAgICAoMTw8NSkJLyogMDU6IFtWMV0gU2xlZXAgYnV0dG9uIGlzIGhhbmRsZWQgYXMgYSBjb250cm9sIG1ldGhvZCBkZXZpY2UgKi8KKyNkZWZpbmUgQUNQSV9GQURUX0ZJWEVEX1JUQyAgICAgICAgICgxPDw2KQkvKiAwNjogW1YxXSBSVEMgd2FrZXVwIHN0YXR1cyBub3QgaW4gZml4ZWQgcmVnaXN0ZXIgc3BhY2UgKi8KKyNkZWZpbmUgQUNQSV9GQURUX1M0X1JUQ19XQUtFICAgICAgICgxPDw3KQkvKiAwNzogW1YxXSBSVEMgYWxhcm0gY2FuIHdha2Ugc3lzdGVtIGZyb20gUzQgKi8KKyNkZWZpbmUgQUNQSV9GQURUXzMyQklUX1RJTUVSICAgICAgICgxPDw4KQkvKiAwODogW1YxXSBBQ1BJIHRpbWVyIHdpZHRoIGlzIDMyLWJpdCAoMD0yNC1iaXQpICovCisjZGVmaW5lIEFDUElfRkFEVF9ET0NLSU5HX1NVUFBPUlRFRCAoMTw8OSkJLyogMDk6IFtWMV0gRG9ja2luZyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQUNQSV9GQURUX1JFU0VUX1JFR0lTVEVSICAgICgxPDwxMCkJLyogMTA6IFtWMl0gU3lzdGVtIHJlc2V0IHZpYSB0aGUgRkFEVCBSRVNFVF9SRUcgc3VwcG9ydGVkICovCisjZGVmaW5lIEFDUElfRkFEVF9TRUFMRURfQ0FTRSAgICAgICAoMTw8MTEpCS8qIDExOiBbVjNdIE5vIGludGVybmFsIGV4cGFuc2lvbiBjYXBhYmlsaXRpZXMgYW5kIGNhc2UgaXMgc2VhbGVkICovCisjZGVmaW5lIEFDUElfRkFEVF9IRUFETEVTUyAgICAgICAgICAoMTw8MTIpCS8qIDEyOiBbVjNdIE5vIGxvY2FsIHZpZGVvIGNhcGFiaWxpdGllcyBvciBsb2NhbCBpbnB1dCBkZXZpY2VzICovCisjZGVmaW5lIEFDUElfRkFEVF9TTEVFUF9UWVBFICAgICAgICAoMTw8MTMpCS8qIDEzOiBbVjNdIE11c3QgZXhlY3V0ZSBuYXRpdmUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgd3JpdGluZyAgU0xQX1RZUHggcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQUNQSV9GQURUX1BDSV9FWFBSRVNTX1dBS0UgICgxPDwxNCkJLyogMTQ6IFtWNF0gU3lzdGVtIHN1cHBvcnRzIFBDSUVYUF9XQUtFIChTVFMvRU4pIGJpdHMgKEFDUEkgMy4wKSAqLworI2RlZmluZSBBQ1BJX0ZBRFRfUExBVEZPUk1fQ0xPQ0sgICAgKDE8PDE1KQkvKiAxNTogW1Y0XSBPU1BNIHNob3VsZCB1c2UgcGxhdGZvcm0tcHJvdmlkZWQgdGltZXIgKEFDUEkgMy4wKSAqLworI2RlZmluZSBBQ1BJX0ZBRFRfUzRfUlRDX1ZBTElEICAgICAgKDE8PDE2KQkvKiAxNjogW1Y0XSBDb250ZW50cyBvZiBSVENfU1RTIHZhbGlkIGFmdGVyIFM0IHdha2UgKEFDUEkgMy4wKSAqLworI2RlZmluZSBBQ1BJX0ZBRFRfUkVNT1RFX1BPV0VSX09OICAgKDE8PDE3KQkvKiAxNzogW1Y0XSBTeXN0ZW0gaXMgY29tcGF0aWJsZSB3aXRoIHJlbW90ZSBwb3dlciBvbiAoQUNQSSAzLjApICovCisjZGVmaW5lIEFDUElfRkFEVF9BUElDX0NMVVNURVIgICAgICAoMTw8MTgpCS8qIDE4OiBbVjRdIEFsbCBsb2NhbCBBUElDcyBtdXN0IHVzZSBjbHVzdGVyIG1vZGVsIChBQ1BJIDMuMCkgKi8KKyNkZWZpbmUgQUNQSV9GQURUX0FQSUNfUEhZU0lDQUwgICAgICgxPDwxOSkJLyogMTk6IFtWNF0gQWxsIGxvY2FsIHhfYVBJQ3MgbXVzdCB1c2UgcGh5c2ljYWwgZGVzdCBtb2RlIChBQ1BJIDMuMCkgKi8KIAotLyoKLSAqIEZBRFQgUHJlZmVyZWQgUG93ZXIgTWFuYWdlbWVudCBQcm9maWxlcwotICovCisvKiBGQURUIFByZWZlcmVkIFBvd2VyIE1hbmFnZW1lbnQgUHJvZmlsZXMgKi8KKwogZW51bSBhY3BpX3ByZWZlcmVkX3BtX3Byb2ZpbGVzIHsKIAlQTV9VTlNQRUNJRklFRCA9IDAsCiAJUE1fREVTS1RPUCA9IDEsCkBAIC0yNzIsMTYgKzI4MSw2IEBACiAJUE1fQVBQTElBTkNFX1BDID0gNgogfTsKIAotLyogRkFEVCBCb290IEFyY2ggRmxhZ3MgKi8KLQotI2RlZmluZSBCQUZfTEVHQUNZX0RFVklDRVMgICAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBCQUZfODA0Ml9LRVlCT0FSRF9DT05UUk9MTEVSICAgIDB4MDAwMgotI2RlZmluZSBCQUZfTVNJX05PVF9TVVBQT1JURUQgICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBCQUZfUENJRV9BU1BNX0NPTlRST0wgICAgICAgICAgIDB4MDAxMAotCi0jZGVmaW5lIEZBRFQyX1JFVklTSU9OX0lEICAgICAgICAgICAgICAgMwotI2RlZmluZSBGQURUMl9NSU5VU19SRVZJU0lPTl9JRCAgICAgICAgIDIKLQogLyogUmVzZXQgdG8gZGVmYXVsdCBwYWNraW5nICovCiAKICNwcmFnbWEgcGFjaygpCkBAIC0zMTAsOCArMzA5LDkgQEAKICNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fVU5LTk9XTiAgICAgICAoMCkKICNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fTUFQUEVEICAgICAgICAoMSkKICNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fQUxMT0NBVEVEICAgICAoMikKLSNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fTUFTSyAgICAgICAgICAoMykKLSNkZWZpbmUgQUNQSV9UQUJMRV9JU19MT0FERUQgICAgICAgICAgICAoNCkKKyNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fT1ZFUlJJREUgICAgICAoNCkKKyNkZWZpbmUgQUNQSV9UQUJMRV9PUklHSU5fTUFTSyAgICAgICAgICAoNykKKyNkZWZpbmUgQUNQSV9UQUJMRV9JU19MT0FERUQgICAgICAgICAgICAoOCkKIAogLyoKICAqIEdldCB0aGUgcmVtYWluaW5nIEFDUEkgdGFibGVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwxLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwxLmgKaW5kZXggMTg5NjNiOS4uNTlhZGUwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibDEuaApAQCAtMTAxNiw5ICsxMDE2LDkgQEAKIHN0cnVjdCBhY3BpX21hZHRfbG9jYWxfeDJhcGljIHsKIAlzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgaGVhZGVyOwogCXUxNiByZXNlcnZlZDsJCS8qIFJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCi0JdTMyIGxvY2FsX2FwaWNfaWQ7CS8qIFByb2Nlc3NvciBYMl9BUElDIElEICAqLworCXUzMiBsb2NhbF9hcGljX2lkOwkvKiBQcm9jZXNzb3IgeDJBUElDIElEICAqLwogCXUzMiBsYXBpY19mbGFnczsKLQl1MzIgdWlkOwkJLyogRXh0ZW5kZWQgWDJfQVBJQyBwcm9jZXNzb3IgSUQgKi8KKwl1MzIgdWlkOwkJLyogQUNQSSBwcm9jZXNzb3IgVUlEICovCiB9OwogCiAvKiAxMDogTG9jYWwgWDJBUElDIE5NSSAoMDcvMjAwOCkgKi8KQEAgLTEwMjYsNyArMTAyNiw3IEBACiBzdHJ1Y3QgYWNwaV9tYWR0X2xvY2FsX3gyYXBpY19ubWkgewogCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciBoZWFkZXI7CiAJdTE2IGludGlfZmxhZ3M7Ci0JdTMyIHVpZDsJCS8qIFByb2Nlc3NvciBYMl9BUElDIElEICovCisJdTMyIHVpZDsJCS8qIEFDUEkgcHJvY2Vzc29yIFVJRCAqLwogCXU4IGxpbnQ7CQkvKiBMSU5UbiB0byB3aGljaCBOTUkgaXMgY29ubmVjdGVkICovCiAJdTggcmVzZXJ2ZWRbM107CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaCBiL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKaW5kZXggYTIwYWFiNS4uZjU1NWQ5MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaApAQCAtNzc3LDE3ICs3NzcsMjUgQEAKICNkZWZpbmUgQUNQSV9CSVRSRUdfU0NJX0VOQUJMRSAgICAgICAgICAgICAgICAgIDB4MEUKICNkZWZpbmUgQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9STEQgICAgICAgICAgICAgIDB4MEYKICNkZWZpbmUgQUNQSV9CSVRSRUdfR0xPQkFMX0xPQ0tfUkVMRUFTRSAgICAgICAgIDB4MTAKLSNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfVFlQRV9BICAgICAgICAgICAgICAgIDB4MTEKLSNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfVFlQRV9CICAgICAgICAgICAgICAgIDB4MTIKLSNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfRU5BQkxFICAgICAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfVFlQRSAgICAgICAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgQUNQSV9CSVRSRUdfU0xFRVBfRU5BQkxFICAgICAgICAgICAgICAgIDB4MTIKIAogLyogUE0yIENvbnRyb2wgcmVnaXN0ZXIgKi8KIAotI2RlZmluZSBBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSAgICAgICAgICAgICAgICAgMHgxNAorI2RlZmluZSBBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSAgICAgICAgICAgICAgICAgMHgxMwogCi0jZGVmaW5lIEFDUElfQklUUkVHX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAweDE0CisjZGVmaW5lIEFDUElfQklUUkVHX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAweDEzCiAjZGVmaW5lIEFDUElfTlVNX0JJVFJFRyAgICAgICAgICAgICAgICAgICAgICAgICBBQ1BJX0JJVFJFR19NQVggKyAxCiAKKy8qIFN0YXR1cyByZWdpc3RlciB2YWx1ZXMuIEEgMSBjbGVhcnMgYSBzdGF0dXMgYml0LiAwID0gbm8gZWZmZWN0ICovCisKKyNkZWZpbmUgQUNQSV9DTEVBUl9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgIDEKKworLyogRW5hYmxlIGFuZCBDb250cm9sIHJlZ2lzdGVyIHZhbHVlcyAqLworCisjZGVmaW5lIEFDUElfRU5BQkxFX0VWRU5UICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEFDUElfRElTQUJMRV9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAwCisKIC8qCiAgKiBFeHRlcm5hbCBBQ1BJIG9iamVjdCBkZWZpbml0aW9uCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAppbmRleCAwNTc0YWRkLi5iMDljNGZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCkBAIC0zMjIsNyArMzIyLDcgQEAKIGludCBhY3BpX3Byb2Nlc3Nvcl90c3RhdGVfaGFzX2NoYW5nZWQoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcik7CiBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X3Rocm90dGxpbmdfaW5mbyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKTsKIGV4dGVybiBpbnQgYWNwaV9wcm9jZXNzb3Jfc2V0X3Rocm90dGxpbmcoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciwgaW50IHN0YXRlKTsKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfZm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfZm9wczsKIGV4dGVybiB2b2lkIGFjcGlfcHJvY2Vzc29yX3Rocm90dGxpbmdfaW5pdCh2b2lkKTsKIC8qIGluIHByb2Nlc3Nvcl9pZGxlLmMgKi8KIGludCBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0KHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCkBAIC0zMzYsNyArMzM2LDcgQEAKIAogLyogaW4gcHJvY2Vzc29yX3RoZXJtYWwuYyAqLwogaW50IGFjcGlfcHJvY2Vzc29yX2dldF9saW1pdF9pbmZvKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV9wcm9jZXNzb3JfbGltaXRfZm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfcHJvY2Vzc29yX2xpbWl0X2ZvcHM7CiBleHRlcm4gc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2Vfb3BzIHByb2Nlc3Nvcl9jb29saW5nX29wczsKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIHZvaWQgYWNwaV90aGVybWFsX2NwdWZyZXFfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS92aWRlby5oIGIvaW5jbHVkZS9hY3BpL3ZpZGVvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyNzViYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYWNwaS92aWRlby5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgX19BQ1BJX1ZJREVPX0gKKyNkZWZpbmUgX19BQ1BJX1ZJREVPX0gKKworI2lmIChkZWZpbmVkIENPTkZJR19BQ1BJX1ZJREVPIHx8IGRlZmluZWQgQ09ORklHX0FDUElfVklERU9fTU9EVUxFKQorZXh0ZXJuIGludCBhY3BpX3ZpZGVvX3JlZ2lzdGVyKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfdmlkZW9fcmVnaXN0ZXIodm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvZnRyYWNlLmggYi9pbmNsdWRlL2FzbS1mcnYvZnRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhOGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWZydi9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2hpZ2htZW0uaCBiL2luY2x1ZGUvYXNtLWZydi9oaWdobWVtLmgKaW5kZXggMjZjZWZjZC4uNjhlNDY3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2hpZ2htZW0uaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvaGlnaG1lbS5oCkBAIC0xOCw2ICsxOCw3IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxhc20vbWVtLWxheW91dC5oPgogI2luY2x1ZGUgPGFzbS9zcHItcmVncy5oPgogI2luY2x1ZGUgPGFzbS9tYi1yZWdzLmg+CkBAIC0xMTYsNiArMTE3LDcgQEAKIAl1bnNpZ25lZCBsb25nIHBhZGRyOwogCiAJcGFnZWZhdWx0X2Rpc2FibGUoKTsKKwlkZWJ1Z19rbWFwX2F0b21pYyh0eXBlKTsKIAlwYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlKTsKIAogCXN3aXRjaCAodHlwZSkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODk0ODZjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMwOCArMCwwIEBACi0vKiBDb3B5cmlnaHQgKEMpIDIwMDIgYnkgSmFtZXMuQm90dG9tbGV5QEhhbnNlblBhcnRuZXJzaGlwLmNvbSAKLSAqCi0gKiBJbXBsZW1lbnRzIHRoZSBnZW5lcmljIGRldmljZSBkbWEgQVBJIHZpYSB0aGUgZXhpc3RpbmcgcGNpXyBvbmUKLSAqIGZvciB1bmNvbnZlcnRlZCBhcmNoaXRlY3R1cmVzCi0gKi8KLQotI2lmbmRlZiBfQVNNX0dFTkVSSUNfRE1BX01BUFBJTkdfSAotI2RlZmluZSBfQVNNX0dFTkVSSUNfRE1BX01BUFBJTkdfSAotCi0KLSNpZmRlZiBDT05GSUdfUENJCi0KLS8qIHdlIGltcGxlbWVudCB0aGUgQVBJIGJlbG93IGluIHRlcm1zIG9mIHRoZSBleGlzdGluZyBQQ0kgb25lLAotICogc28gaW5jbHVkZSBpdCAqLwotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotLyogbmVlZCBzdHJ1Y3QgcGFnZSBkZWZpbml0aW9ucyAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCi17Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwotCi0JcmV0dXJuIHBjaV9kbWFfc3VwcG9ydGVkKHRvX3BjaV9kZXYoZGV2KSwgbWFzayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spCi17Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwotCi0JcmV0dXJuIHBjaV9zZXRfZG1hX21hc2sodG9fcGNpX2RldihkZXYpLCBkbWFfbWFzayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqCi1kbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKLQkJICAgZ2ZwX3QgZmxhZykKLXsKLQlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7Ci0KLQlyZXR1cm4gcGNpX2FsbG9jX2NvbnNpc3RlbnQodG9fcGNpX2RldihkZXYpLCBzaXplLCBkbWFfaGFuZGxlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKLQkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLQlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7Ci0KLQlwY2lfZnJlZV9jb25zaXN0ZW50KHRvX3BjaV9kZXYoZGV2KSwgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUpOwotfQotCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKLWRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLAotCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwotCi0JcmV0dXJuIHBjaV9tYXBfc2luZ2xlKHRvX3BjaV9kZXYoZGV2KSwgY3B1X2FkZHIsIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCi0JCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwotCi0JcGNpX3VubWFwX3NpbmdsZSh0b19wY2lfZGV2KGRldiksIGRtYV9hZGRyLCBzaXplLCAoaW50KWRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAotZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCi0JICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwotCi0JcmV0dXJuIHBjaV9tYXBfcGFnZSh0b19wY2lfZGV2KGRldiksIHBhZ2UsIG9mZnNldCwgc2l6ZSwgKGludClkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsCi0JICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7Ci0KLQlwY2lfdW5tYXBfcGFnZSh0b19wY2lfZGV2KGRldiksIGRtYV9hZGRyZXNzLCBzaXplLCAoaW50KWRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAotCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7Ci0KLQlyZXR1cm4gcGNpX21hcF9zZyh0b19wY2lfZGV2KGRldiksIHNnLCBuZW50cywgKGludClkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuaHdlbnRyaWVzLAotCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKLQotCXBjaV91bm1hcF9zZyh0b19wY2lfZGV2KGRldiksIHNnLCBuaHdlbnRyaWVzLCAoaW50KWRpcmVjdGlvbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAotCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKLQotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSh0b19wY2lfZGV2KGRldiksIGRtYV9oYW5kbGUsCi0JCQkJICAgIHNpemUsIChpbnQpZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwotCi0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHRvX3BjaV9kZXYoZGV2KSwgZG1hX2hhbmRsZSwKLQkJCQkgICAgICAgc2l6ZSwgKGludClkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKLQotCXBjaV9kbWFfc3luY19zZ19mb3JfY3B1KHRvX3BjaV9kZXYoZGV2KSwgc2csIG5lbGVtcywgKGludClkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKLQotCXBjaV9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHRvX3BjaV9kZXYoZGV2KSwgc2csIG5lbGVtcywgKGludClkaXJlY3Rpb24pOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQotewotCXJldHVybiBwY2lfZG1hX21hcHBpbmdfZXJyb3IodG9fcGNpX2RldihkZXYpLCBkbWFfYWRkcik7Ci19Ci0KLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSBpbnQKLWRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzaykKLXsKLQlCVUcoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkICoKLWRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLAotCQkgICBnZnBfdCBmbGFnKQotewotCUJVRygpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLAotCQkgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQotewotCUJVRygpOwotfQotCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKLWRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqY3B1X2FkZHIsIHNpemVfdCBzaXplLAotCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAotCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVRygpOwotfQotCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKLWRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAotCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVRygpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsCi0JICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVRygpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuaHdlbnRyaWVzLAotCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCUJVRygpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQlCVUcoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCi0JCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1kbWFfZXJyb3IoZG1hX2FkZHJfdCBkbWFfYWRkcikKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmCi0KLS8qIE5vdyBmb3IgdGhlIEFQSSBleHRlbnNpb25zIG92ZXIgdGhlIHBjaV8gb25lICovCi0KLSNkZWZpbmUgZG1hX2FsbG9jX25vbmNvaGVyZW50KGQsIHMsIGgsIGYpIGRtYV9hbGxvY19jb2hlcmVudChkLCBzLCBoLCBmKQotI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSBkbWFfZnJlZV9jb2hlcmVudChkLCBzLCB2LCBoKQotI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkLCBoKQkoMSkKLQotc3RhdGljIGlubGluZSBpbnQKLWRtYV9nZXRfY2FjaGVfYWxpZ25tZW50KHZvaWQpCi17Ci0JLyogbm8gZWFzeSB3YXkgdG8gZ2V0IGNhY2hlIHNpemUgb24gYWxsIHByb2Nlc3NvcnMsIHNvIHJldHVybgotCSAqIHRoZSBtYXhpbXVtIHBvc3NpYmxlLCB0byBiZSBzYWZlICovCi0JcmV0dXJuICgxIDw8IElOVEVSTk9ERV9DQUNIRV9TSElGVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCi0JCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JLyoganVzdCBzeW5jIGV2ZXJ5dGhpbmcsIHRoYXQncyBhbGwgdGhlIHBjaSBBUEkgY2FuIGRvICovCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQrc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JLyoganVzdCBzeW5jIGV2ZXJ5dGhpbmcsIHRoYXQncyBhbGwgdGhlIHBjaSBBUEkgY2FuIGRvICovCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBkbWFfaGFuZGxlLCBvZmZzZXQrc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfY2FjaGVfc3luYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnZhZGRyLCBzaXplX3Qgc2l6ZSwKLQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotewotCS8qIGNvdWxkIGRlZmluZSB0aGlzIGluIHRlcm1zIG9mIHRoZSBkbWFfY2FjaGUgLi4uIG9wZXJhdGlvbnMsCi0JICogYnV0IGlmIHlvdSBnZXQgdGhpcyBvbiBhIHBsYXRmb3JtLCB5b3Ugc2hvdWxkIGNvbnZlcnQgdGhlIHBsYXRmb3JtCi0JICogdG8gdXNpbmcgdGhlIGdlbmVyaWMgZGV2aWNlIERNQSBBUEkgKi8KLQlCVUcoKTsKLX0KLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKaW5kZXggODE3OTdlYy4uZDZjMzc5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9ncGlvLmgKQEAgLTU1LDYgKzU1LDEwIEBACiAgKgloYW5kbGVkIGlzIChiYXNlICsgbmdwaW8gLSAxKS4KICAqIEBjYW5fc2xlZXA6IGZsYWcgbXVzdCBiZSBzZXQgaWZmIGdldCgpL3NldCgpIG1ldGhvZHMgc2xlZXAsIGFzIHRoZXkKICAqCW11c3Qgd2hpbGUgYWNjZXNzaW5nIEdQSU8gZXhwYW5kZXIgY2hpcHMgb3ZlciBJMkMgb3IgU1BJCisgKiBAbmFtZXM6IGlmIHNldCwgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIHVzZSBhcyBhbHRlcm5hdGl2ZQorICogICAgICBuYW1lcyBmb3IgdGhlIEdQSU9zIGluIHRoaXMgY2hpcC4gQW55IGVudHJ5IGluIHRoZSBhcnJheQorICogICAgICBtYXkgYmUgTlVMTCBpZiB0aGVyZSBpcyBubyBhbGlhcyBmb3IgdGhlIEdQSU8sIGhvd2V2ZXIgdGhlCisgKiAgICAgIGFycmF5IG11c3QgYmUgQG5ncGlvIGVudHJpZXMgbG9uZy4KICAqCiAgKiBBIGdwaW9fY2hpcCBjYW4gaGVscCBwbGF0Zm9ybXMgYWJzdHJhY3QgdmFyaW91cyBzb3VyY2VzIG9mIEdQSU9zIHNvCiAgKiB0aGV5IGNhbiBhbGwgYmUgYWNjZXNzZWQgdGhyb3VnaCBhIGNvbW1vbiBwcm9ncmFtaW5nIGludGVyZmFjZS4KQEAgLTkyLDYgKzk2LDcgQEAKIAkJCQkJCXN0cnVjdCBncGlvX2NoaXAgKmNoaXApOwogCWludAkJCWJhc2U7CiAJdTE2CQkJbmdwaW87CisJY2hhcgkJCSoqbmFtZXM7CiAJdW5zaWduZWQJCWNhbl9zbGVlcDoxOwogCXVuc2lnbmVkCQlleHBvcnRlZDoxOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCBhNjU0ZDcyLi43ZmE2NjBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC02MSw2ICs2MSwzMCBAQAogI2RlZmluZSBCUkFOQ0hfUFJPRklMRSgpCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19FVkVOVF9UUkFDRVIKKyNkZWZpbmUgRlRSQUNFX0VWRU5UUygpCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfZnRyYWNlX2V2ZW50cykgPSAuOwlcCisJCQkqKF9mdHJhY2VfZXZlbnRzKQkJCQlcCisJCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfZnRyYWNlX2V2ZW50cykgPSAuOworI2Vsc2UKKyNkZWZpbmUgRlRSQUNFX0VWRU5UUygpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19UUkFDSU5HCisjZGVmaW5lIFRSQUNFX1BSSU5US1MoKSBWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdHJhY2VfYnByaW50a19mbXQpID0gLjsgICAgICBcCisJCQkgKihfX3RyYWNlX3ByaW50a19mbXQpIC8qIFRyYWNlX3ByaW50ayBmbXQnIHBvaW50ZXIgKi8gXAorCQkJIFZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlX2JwcmludGtfZm10KSA9IC47CisjZWxzZQorI2RlZmluZSBUUkFDRV9QUklOVEtTKCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUworI2RlZmluZSBUUkFDRV9TWVNDQUxMUygpIFZNTElOVVhfU1lNQk9MKF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGEpID0gLjsJXAorCQkJICooX19zeXNjYWxsc19tZXRhZGF0YSkJCQkJXAorCQkJIFZNTElOVVhfU1lNQk9MKF9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YSkgPSAuOworI2Vsc2UKKyNkZWZpbmUgVFJBQ0VfU1lTQ0FMTFMoKQorI2VuZGlmCisKIC8qIC5kYXRhIHNlY3Rpb24gKi8KICNkZWZpbmUgREFUQV9EQVRBCQkJCQkJCVwKIAkqKC5kYXRhKQkJCQkJCQlcCkBAIC04Niw3ICsxMTAsMTAgQEAKIAkqKF9fdmVyYm9zZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2UpID0gLjsJCQkJXAogCUxJS0VMWV9QUk9GSUxFKCkJCSAgICAgICAJCQkJXAotCUJSQU5DSF9QUk9GSUxFKCkKKwlCUkFOQ0hfUFJPRklMRSgpCQkJCQkJXAorCVRSQUNFX1BSSU5US1MoKQkJCQkJCQlcCisJRlRSQUNFX0VWRU5UUygpCQkJCQkJCVwKKwlUUkFDRV9TWVNDQUxMUygpCiAKICNkZWZpbmUgUk9fREFUQShhbGlnbikJCQkJCQkJXAogCS4gPSBBTElHTigoYWxpZ24pKTsJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2Z0cmFjZS5oIGIvaW5jbHVkZS9hc20tbTMyci9mdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tbTMyci9mdHJhY2UuaApAQCAtMCwwICsxIEBACisvKiBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tbTMyci9zcGlubG9jay5oCmluZGV4IGY1Y2ZiYTguLmRkZWQ5MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NwaW5sb2NrLmgKQEAgLTMxNiw2ICszMTYsOSBAQAogCXJldHVybiAwOwogfQogCisjZGVmaW5lIF9fcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfcmVhZF9sb2NrKGxvY2spCisjZGVmaW5lIF9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3dyaXRlX2xvY2sobG9jaykKKwogI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKICNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCiAjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvZnRyYWNlLmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL2Z0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYThjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1tbjEwMzAwL2Z0cmFjZS5oCkBAIC0wLDAgKzEgQEAKKy8qIGVtcHR5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tbjEwMzAwL2hpZ2htZW0uaCBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvaGlnaG1lbS5oCmluZGV4IDUyNTY4NTQuLjkwZjJhYmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvaGlnaG1lbS5oCisrKyBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvaGlnaG1lbS5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIApAQCAtNzcsNiArNzgsNyBAQAogCWlmIChwYWdlIDwgaGlnaG1lbV9zdGFydF9wYWdlKQogCQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOwogCisJZGVidWdfa21hcF9hdG9taWModHlwZSk7CiAJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKICNpZiBISUdITUVNX0RFQlVHCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjX2hlbHBlci5oCmluZGV4IGM3ZDRiMmUuLmVjMDczZDgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Y19oZWxwZXIuaApAQCAtMzMsNyArMzMsNiBAQAogI2lmbmRlZiBfX0RSTV9DUlRDX0hFTFBFUl9IX18KICNkZWZpbmUgX19EUk1fQ1JUQ19IRUxQRVJfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CkBAIC05Miw3ICs5MSw3IEBACiBleHRlcm4gaW50IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCB1aW50MzJfdCBtYXhYLCB1aW50MzJfdCBtYXhZKTsKIGV4dGVybiB2b2lkIGRybV9oZWxwZXJfZGlzYWJsZV91bnVzZWRfZnVuY3Rpb25zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBkcm1faGVscGVyX2hvdHBsdWdfc3RhZ2VfdHdvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIGJvb2wgZHJtX2hlbHBlcl9pbml0aWFsX2NvbmZpZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIGNhbl9ncm93KTsKK2V4dGVybiBib29sIGRybV9oZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKHN0cnVjdCBkcm1fbW9kZV9zZXQgKnNldCk7CiBleHRlcm4gYm9vbCBkcm1fY3J0Y19oZWxwZXJfc2V0X21vZGUoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fb3NfbGludXguaCBiL2luY2x1ZGUvZHJtL2RybV9vc19saW51eC5oCmluZGV4IDAxMzU1MWQuLjI2NjQxZTk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fb3NfbGludXguaAorKysgYi9pbmNsdWRlL2RybS9kcm1fb3NfbGludXguaApAQCAtNywxMiArNywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpZm5kZWYgcmVhZHEKLXN0YXRpYyB1NjQgcmVhZHEodm9pZCBfX2lvbWVtICpyZWcpCitzdGF0aWMgaW5saW5lIHU2NCByZWFkcSh2b2lkIF9faW9tZW0gKnJlZykKIHsKIAlyZXR1cm4gKCh1NjQpIHJlYWRsKHJlZykpIHwgKCgodTY0KSByZWFkbChyZWcgKyA0VUwpKSA8PCAzMik7CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlcSh1NjQgdmFsLCB2b2lkIF9faW9tZW0gKnJlZykKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXEodTY0IHZhbCwgdm9pZCBfX2lvbWVtICpyZWcpCiB7CiAJd3JpdGVsKHZhbCAmIDB4ZmZmZmZmZmYsIHJlZyk7CiAJd3JpdGVsKHZhbCA+PiAzMiwgcmVnICsgMHg0VUwpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCBhNjdiNjIyLi5jYTliOWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtNjcsNiArNjcsNyBAQAogaGVhZGVyLXkgKz0gZmQuaAogaGVhZGVyLXkgKz0gZmRyZWcuaAogaGVhZGVyLXkgKz0gZmliX3J1bGVzLmgKK2hlYWRlci15ICs9IGZpZW1hcC5oCiBoZWFkZXIteSArPSBmaXJld2lyZS1jZGV2LmgKIGhlYWRlci15ICs9IGZpcmV3aXJlLWNvbnN0YW50cy5oCiBoZWFkZXIteSArPSBmdXNlLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNwaS5oIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKaW5kZXggNzgxOTkxNS4uNjU4NmNiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKQEAgLTk3LDYgKzk3LDcgQEAKIC8qIHRoZSBmb2xsb3dpbmcgZm91ciBmdW5jdGlvbnMgYXJlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgKi8KIHZvaWQgYWNwaV9udW1hX3NsaXRfaW5pdCAoc3RydWN0IGFjcGlfdGFibGVfc2xpdCAqc2xpdCk7CiB2b2lkIGFjcGlfbnVtYV9wcm9jZXNzb3JfYWZmaW5pdHlfaW5pdCAoc3RydWN0IGFjcGlfc3JhdF9jcHVfYWZmaW5pdHkgKnBhKTsKK3ZvaWQgYWNwaV9udW1hX3gyYXBpY19hZmZpbml0eV9pbml0KHN0cnVjdCBhY3BpX3NyYXRfeDJhcGljX2NwdV9hZmZpbml0eSAqcGEpOwogdm9pZCBhY3BpX251bWFfbWVtb3J5X2FmZmluaXR5X2luaXQgKHN0cnVjdCBhY3BpX3NyYXRfbWVtX2FmZmluaXR5ICptYSk7CiB2b2lkIGFjcGlfbnVtYV9hcmNoX2ZpeHVwKHZvaWQpOwogCkBAIC0yNTcsNiArMjU4LDQwIEBACiB2b2lkIF9faW5pdCBhY3BpX29sZF9zdXNwZW5kX29yZGVyaW5nKHZvaWQpOwogdm9pZCBfX2luaXQgYWNwaV9zNF9ub19udnModm9pZCk7CiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCisKKyNkZWZpbmUgT1NDX1FVRVJZX1RZUEUJCQkwCisjZGVmaW5lIE9TQ19TVVBQT1JUX1RZUEUgCQkxCisjZGVmaW5lIE9TQ19DT05UUk9MX1RZUEUJCTIKKyNkZWZpbmUgT1NDX1NVUFBPUlRfTUFTS1MJCTB4MWYKKworLyogX09TQyBEVzAgRGVmaW5pdGlvbiAqLworI2RlZmluZSBPU0NfUVVFUllfRU5BQkxFCQkxCisjZGVmaW5lIE9TQ19SRVFVRVNUX0VSUk9SCQkyCisjZGVmaW5lIE9TQ19JTlZBTElEX1VVSURfRVJST1IJCTQKKyNkZWZpbmUgT1NDX0lOVkFMSURfUkVWSVNJT05fRVJST1IJOAorI2RlZmluZSBPU0NfQ0FQQUJJTElUSUVTX01BU0tfRVJST1IJMTYKKworLyogX09TQyBEVzEgRGVmaW5pdGlvbiAoT1MgU3VwcG9ydCBGaWVsZHMpICovCisjZGVmaW5lIE9TQ19FWFRfUENJX0NPTkZJR19TVVBQT1JUCQkxCisjZGVmaW5lIE9TQ19BQ1RJVkVfU1RBVEVfUFdSX1NVUFBPUlQgCQkyCisjZGVmaW5lIE9TQ19DTE9DS19QV1JfQ0FQQUJJTElUWV9TVVBQT1JUCTQKKyNkZWZpbmUgT1NDX1BDSV9TRUdNRU5UX0dST1VQU19TVVBQT1JUCQk4CisjZGVmaW5lIE9TQ19NU0lfU1VQUE9SVAkJCQkxNgorCisvKiBfT1NDIERXMSBEZWZpbml0aW9uIChPUyBDb250cm9sIEZpZWxkcykgKi8KKyNkZWZpbmUgT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MCTEKKyNkZWZpbmUgT1NDX1NIUENfTkFUSVZFX0hQX0NPTlRST0wgCQkyCisjZGVmaW5lIE9TQ19QQ0lfRVhQUkVTU19QTUVfQ09OVFJPTAkJNAorI2RlZmluZSBPU0NfUENJX0VYUFJFU1NfQUVSX0NPTlRST0wJCTgKKyNkZWZpbmUgT1NDX1BDSV9FWFBSRVNTX0NBUF9TVFJVQ1RVUkVfQ09OVFJPTAkxNgorCisjZGVmaW5lIE9TQ19DT05UUk9MX01BU0tTIAkoT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MIHwgCVwKKwkJCQlPU0NfU0hQQ19OQVRJVkVfSFBfQ09OVFJPTCB8IAkJXAorCQkJCU9TQ19QQ0lfRVhQUkVTU19QTUVfQ09OVFJPTCB8CQlcCisJCQkJT1NDX1BDSV9FWFBSRVNTX0FFUl9DT05UUk9MIHwJCVwKKwkJCQlPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MKQorCitleHRlcm4gYWNwaV9zdGF0dXMgYWNwaV9wY2lfb3NjX2NvbnRyb2xfc2V0KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZsYWdzKTsKICNlbHNlCS8qIENPTkZJR19BQ1BJICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2FjcGlfYm9vdF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FzeW5jX3R4LmggYi9pbmNsdWRlL2xpbnV4L2FzeW5jX3R4LmgKaW5kZXggNDVmNjI5Ny4uNWZjMmVmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hc3luY190eC5oCisrKyBiL2luY2x1ZGUvbGludXgvYXN5bmNfdHguaApAQCAtMjEsNiArMjEsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCisvKiBvbiBhcmNoaXRlY3R1cmVzIHdpdGhvdXQgZG1hLW1hcHBpbmcgY2FwYWJpbGl0aWVzIHdlIG5lZWQgdG8gZW5zdXJlCisgKiB0aGF0IHRoZSBhc3luY2hyb25vdXMgcGF0aCBjb21waWxlcyBhd2F5CisgKi8KKyNpZmRlZiBDT05GSUdfSEFTX0RNQQorI2RlZmluZSBfX2FzeW5jX2lubGluZQorI2Vsc2UKKyNkZWZpbmUgX19hc3luY19pbmxpbmUgX19hbHdheXNfaW5saW5lCisjZW5kaWYKKwogLyoqCiAgKiBkbWFfY2hhbl9yZWYgLSBvYmplY3QgdXNlZCB0byBtYW5hZ2UgZG1hIGNoYW5uZWxzIHJlY2VpdmVkIGZyb20gdGhlCiAgKiAgIGRtYWVuZ2luZSBjb3JlLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdXRvX2Rldi1pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9hdXRvX2Rldi1pb2N0bC5oCmluZGV4IDkxYTc3MzkuLjg1MGYzOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXV0b19kZXYtaW9jdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F1dG9fZGV2LWlvY3RsLmgKQEAgLTEwLDggKzEwLDEzIEBACiAjaWZuZGVmIF9MSU5VWF9BVVRPX0RFVl9JT0NUTF9ICiAjZGVmaW5lIF9MSU5VWF9BVVRPX0RFVl9JT0NUTF9ICiAKKyNpbmNsdWRlIDxsaW51eC9hdXRvX2ZzLmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZGVmaW5lIEFVVE9GU19ERVZJQ0VfTkFNRQkJImF1dG9mcyIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdXRvX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2F1dG9fZnMuaAppbmRleCBjMjFlNTk3Li42MzI2NTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1dG9fZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F1dG9fZnMuaApAQCAtMTcsMTAgKzE3LDEyIEBACiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qIFRoaXMgZmlsZSBkZXNjcmliZXMgYXV0b2ZzIHYzICovCiAjZGVmaW5lIEFVVE9GU19QUk9UT19WRVJTSU9OCTMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKaW5kZXggNzdiNGE5ZS4uNjYzOGI4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgKQEAgLTM1LDggKzM1LDcgQEAKICNlbmRpZgogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCXVuc2lnbmVkIGxvbmcgcDsgLyogY3VycmVudCB0b3Agb2YgbWVtICovCi0JdW5zaWduZWQgaW50IHNoX2Jhbmc6MSwKLQkJbWlzY19iYW5nOjEsCisJdW5zaWduZWQgaW50CiAJCWNyZWRfcHJlcGFyZWQ6MSwvKiB0cnVlIGlmIGNyZWRzIGFscmVhZHkgcHJlcGFyZWQgKG11bHRpcGxlCiAJCQkJICogcHJlcHMgaGFwcGVuIGZvciBpbnRlcnByZXRlcnMpICovCiAJCWNhcF9lZmZlY3RpdmU6MTsvKiB0cnVlIGlmIGhhcyBlbGV2YXRlZCBlZmZlY3RpdmUgY2FwYWJpbGl0aWVzLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaCBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKaW5kZXggNmU5MTU4Ny4uZDk2MDg4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCkBAIC0xNDQsNiArMTQ0LDkgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lPX1RSQUNFKQorCisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKwogc3RydWN0IGJsa190cmFjZSB7CiAJaW50IHRyYWNlX3N0YXRlOwogCXN0cnVjdCByY2hhbiAqcmNoYW47CkBAIC0xOTQsNiArMTk3LDggQEAKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3N0YXJ0c3RvcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgaW50IHN0YXJ0KTsKIGV4dGVybiBpbnQgYmxrX3RyYWNlX3JlbW92ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7CiAKK2V4dGVybiBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGJsa190cmFjZV9hdHRyX2dyb3VwOworCiAjZWxzZSAvKiAhQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgKi8KICNkZWZpbmUgYmxrX3RyYWNlX2lvY3RsKGJkZXYsIGNtZCwgYXJnKQkJKC1FTk9UVFkpCiAjZGVmaW5lIGJsa190cmFjZV9zaHV0ZG93bihxKQkJCWRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKaW5kZXggNDU1ZDgzMi4uYmMzYWI3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ib290bWVtLmgKKysrIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKQEAgLTE0NiwxMCArMTQ2LDEwIEBACiAKICNkZWZpbmUgSEFTSF9FQVJMWQkweDAwMDAwMDAxCS8qIEFsbG9jYXRpbmcgZHVyaW5nIGVhcmx5IGJvb3Q/ICovCiAKLS8qIE9ubHkgTlVNQSBuZWVkcyBoYXNoIGRpc3RyaWJ1dGlvbi4KLSAqIElBNjQgYW5kIHg4Nl82NCBoYXZlIHN1ZmZpY2llbnQgdm1hbGxvYyBzcGFjZS4KKy8qIE9ubHkgTlVNQSBuZWVkcyBoYXNoIGRpc3RyaWJ1dGlvbi4gNjRiaXQgTlVNQSBhcmNoaXRlY3R1cmVzIGhhdmUKKyAqIHN1ZmZpY2llbnQgdm1hbGxvYyBzcGFjZS4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX05VTUEpICYmIChkZWZpbmVkKENPTkZJR19JQTY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpKQorI2lmIGRlZmluZWQoQ09ORklHX05VTUEpICYmIGRlZmluZWQoQ09ORklHXzY0QklUKQogI2RlZmluZSBIQVNIRElTVF9ERUZBVUxUIDEKICNlbHNlCiAjZGVmaW5lIEhBU0hESVNUX0RFRkFVTFQgMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCmluZGV4IGYxOWZkOTAuLjdiNzNiYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKQEAgLTIxNiw3ICsyMTYsNyBAQAogCQkJZ2V0X2Jsb2NrX3QgKiwgbG9mZl90ICopOwogaW50IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKTsKIGludCBibG9ja19jb21taXRfd3JpdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKLWludCBibG9ja19wYWdlX21rd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAoraW50IGJsb2NrX3BhZ2VfbWt3cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiAJCQkJZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrKTsKIHZvaWQgYmxvY2tfc3luY19wYWdlKHN0cnVjdCBwYWdlICopOwogc2VjdG9yX3QgZ2VuZXJpY19ibG9ja19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHNlY3Rvcl90LCBnZXRfYmxvY2tfdCAqKTsKQEAgLTMzMiwyMiArMzMyLDEwIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfaW5pdCh2b2lkKSB7fQogc3RhdGljIGlubGluZSBpbnQgdHJ5X3RvX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgcGFnZSAqcGFnZSkgeyByZXR1cm4gMTsgfQotc3RhdGljIGlubGluZSBpbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBpbm9kZV9oYXNfYnVmZmVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9pbm9kZV9idWZmZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpIHt9CiBzdGF0aWMgaW5saW5lIGludCByZW1vdmVfaW5vZGVfYnVmZmVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7IHJldHVybiAxOyB9CiBzdGF0aWMgaW5saW5lIGludCBzeW5jX21hcHBpbmdfYnVmZmVycyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KSB7fQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzdXBlcl9ibG9jayAqZnJlZXplX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqc2IpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHRoYXdfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXJldHVybiAwOwotfQogCiAjZW5kaWYgLyogQ09ORklHX0JMT0NLICovCiAjZW5kaWYgLyogX0xJTlVYX0JVRkZFUl9IRUFEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCmluZGV4IDQ5OTkwMGQuLjY2NWZhNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nncm91cHN0YXRzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJpb19oZWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KIAogI2lmZGVmIENPTkZJR19DR1JPVVBTCiAKQEAgLTIyLDYgKzIzLDcgQEAKIHN0cnVjdCBjZ3JvdXBfc3Vic3lzOwogc3RydWN0IGlub2RlOwogc3RydWN0IGNncm91cDsKK3N0cnVjdCBjc3NfaWQ7CiAKIGV4dGVybiBpbnQgY2dyb3VwX2luaXRfZWFybHkodm9pZCk7CiBleHRlcm4gaW50IGNncm91cF9pbml0KHZvaWQpOwpAQCAtNDcsMTggKzQ5LDI0IEBACiAKIC8qIFBlci1zdWJzeXN0ZW0vcGVyLWNncm91cCBzdGF0ZSBtYWludGFpbmVkIGJ5IHRoZSBzeXN0ZW0uICovCiBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSB7Ci0JLyogVGhlIGNncm91cCB0aGF0IHRoaXMgc3Vic3lzdGVtIGlzIGF0dGFjaGVkIHRvLiBVc2VmdWwKKwkvKgorCSAqIFRoZSBjZ3JvdXAgdGhhdCB0aGlzIHN1YnN5c3RlbSBpcyBhdHRhY2hlZCB0by4gVXNlZnVsCiAJICogZm9yIHN1YnN5c3RlbXMgdGhhdCB3YW50IHRvIGtub3cgYWJvdXQgdGhlIGNncm91cAotCSAqIGhpZXJhcmNoeSBzdHJ1Y3R1cmUgKi8KKwkgKiBoaWVyYXJjaHkgc3RydWN0dXJlCisJICovCiAJc3RydWN0IGNncm91cCAqY2dyb3VwOwogCi0JLyogU3RhdGUgbWFpbnRhaW5lZCBieSB0aGUgY2dyb3VwIHN5c3RlbSB0byBhbGxvdyBzdWJzeXN0ZW1zCisJLyoKKwkgKiBTdGF0ZSBtYWludGFpbmVkIGJ5IHRoZSBjZ3JvdXAgc3lzdGVtIHRvIGFsbG93IHN1YnN5c3RlbXMKIAkgKiB0byBiZSAiYnVzeSIuIFNob3VsZCBiZSBhY2Nlc3NlZCB2aWEgY3NzX2dldCgpLAotCSAqIGNzc190cnlnZXQoKSBhbmQgYW5kIGNzc19wdXQoKS4gKi8KKwkgKiBjc3NfdHJ5Z2V0KCkgYW5kIGFuZCBjc3NfcHV0KCkuCisJICovCiAKIAlhdG9taWNfdCByZWZjbnQ7CiAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCS8qIElEIGZvciB0aGlzIGNzcywgaWYgcG9zc2libGUgKi8KKwlzdHJ1Y3QgY3NzX2lkICppZDsKIH07CiAKIC8qIGJpdHMgaW4gc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgZmxhZ3MgZmllbGQgKi8KQEAgLTEyMCwxOSArMTI4LDI2IEBACiBlbnVtIHsKIAkvKiBDb250cm9sIEdyb3VwIGlzIGRlYWQgKi8KIAlDR1JQX1JFTU9WRUQsCi0JLyogQ29udHJvbCBHcm91cCBoYXMgcHJldmlvdXNseSBoYWQgYSBjaGlsZCBjZ3JvdXAgb3IgYSB0YXNrLAotCSAqIGJ1dCBubyBsb25nZXIgKG9ubHkgaWYgQ0dSUF9OT1RJRllfT05fUkVMRUFTRSBpcyBzZXQpICovCisJLyoKKwkgKiBDb250cm9sIEdyb3VwIGhhcyBwcmV2aW91c2x5IGhhZCBhIGNoaWxkIGNncm91cCBvciBhIHRhc2ssCisJICogYnV0IG5vIGxvbmdlciAob25seSBpZiBDR1JQX05PVElGWV9PTl9SRUxFQVNFIGlzIHNldCkKKwkgKi8KIAlDR1JQX1JFTEVBU0FCTEUsCiAJLyogQ29udHJvbCBHcm91cCByZXF1aXJlcyByZWxlYXNlIG5vdGlmaWNhdGlvbnMgdG8gdXNlcnNwYWNlICovCiAJQ0dSUF9OT1RJRllfT05fUkVMRUFTRSwKKwkvKgorCSAqIEEgdGhyZWFkIGluIHJtZGlyKCkgaXMgd2F0aW5nIGZvciB0aGlzIGNncm91cC4KKwkgKi8KKwlDR1JQX1dBSVRfT05fUk1ESVIsCiB9OwogCiBzdHJ1Y3QgY2dyb3VwIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwkJLyogInVuc2lnbmVkIGxvbmciIHNvIGJpdG9wcyB3b3JrICovCiAKLQkvKiBjb3VudCB1c2VycyBvZiB0aGlzIGNncm91cC4gPjAgbWVhbnMgYnVzeSwgYnV0IGRvZXNuJ3QKLQkgKiBuZWNlc3NhcmlseSBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIHRhc2tzIGluIHRoZQotCSAqIGNncm91cCAqLworCS8qCisJICogY291bnQgdXNlcnMgb2YgdGhpcyBjZ3JvdXAuID4wIG1lYW5zIGJ1c3ksIGJ1dCBkb2Vzbid0CisJICogbmVjZXNzYXJpbHkgaW5kaWNhdGUgdGhlIG51bWJlciBvZiB0YXNrcyBpbiB0aGUgY2dyb3VwCisJICovCiAJYXRvbWljX3QgY291bnQ7CiAKIAkvKgpAQCAtMTQyLDcgKzE1Nyw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBzaWJsaW5nOwkvKiBteSBwYXJlbnQncyBjaGlsZHJlbiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgY2hpbGRyZW47CS8qIG15IGNoaWxkcmVuICovCiAKLQlzdHJ1Y3QgY2dyb3VwICpwYXJlbnQ7CS8qIG15IHBhcmVudCAqLworCXN0cnVjdCBjZ3JvdXAgKnBhcmVudDsJCS8qIG15IHBhcmVudCAqLwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsJICAJLyogY2dyb3VwIGZzIGVudHJ5LCBSQ1UgcHJvdGVjdGVkICovCiAKIAkvKiBQcml2YXRlIHBvaW50ZXJzIGZvciBlYWNoIHJlZ2lzdGVyZWQgc3Vic3lzdGVtICovCkBAIC0xNzcsMTEgKzE5MiwxMiBAQAogCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKIH07CiAKLS8qIEEgY3NzX3NldCBpcyBhIHN0cnVjdHVyZSBob2xkaW5nIHBvaW50ZXJzIHRvIGEgc2V0IG9mCisvKgorICogQSBjc3Nfc2V0IGlzIGEgc3RydWN0dXJlIGhvbGRpbmcgcG9pbnRlcnMgdG8gYSBzZXQgb2YKICAqIGNncm91cF9zdWJzeXNfc3RhdGUgb2JqZWN0cy4gVGhpcyBzYXZlcyBzcGFjZSBpbiB0aGUgdGFzayBzdHJ1Y3QKICAqIG9iamVjdCBhbmQgc3BlZWRzIHVwIGZvcmsoKS9leGl0KCksIHNpbmNlIGEgc2luZ2xlIGluYy9kZWMgYW5kIGEKLSAqIGxpc3RfYWRkKCkvZGVsKCkgY2FuIGJ1bXAgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgZW50aXJlCi0gKiBjZ3JvdXAgc2V0IGZvciBhIHRhc2suCisgKiBsaXN0X2FkZCgpL2RlbCgpIGNhbiBidW1wIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIGVudGlyZSBjZ3JvdXAKKyAqIHNldCBmb3IgYSB0YXNrLgogICovCiAKIHN0cnVjdCBjc3Nfc2V0IHsKQEAgLTIyNiwxMyArMjQyLDggQEAKIAl2b2lkICpzdGF0ZTsKIH07CiAKLS8qIHN0cnVjdCBjZnR5cGU6Ci0gKgotICogVGhlIGZpbGVzIGluIHRoZSBjZ3JvdXAgZmlsZXN5c3RlbSBtb3N0bHkgaGF2ZSBhIHZlcnkgc2ltcGxlIHJlYWQvd3JpdGUKLSAqIGhhbmRsaW5nLCBzb21lIGNvbW1vbiBmdW5jdGlvbiB3aWxsIHRha2UgY2FyZSBvZiBpdC4gTmV2ZXJ0aGVsZXNzIHNvbWUgY2FzZXMKLSAqIChyZWFkIHRhc2tzKSBhcmUgc3BlY2lhbCBhbmQgdGhlcmVmb3JlIEkgZGVmaW5lIHRoaXMgc3RydWN0dXJlIGZvciBldmVyeQotICoga2luZCBvZiBmaWxlLgotICoKKy8qCisgKiBzdHJ1Y3QgY2Z0eXBlOiBoYW5kbGVyIGRlZmluaXRpb25zIGZvciBjZ3JvdXAgY29udHJvbCBmaWxlcwogICoKICAqIFdoZW4gcmVhZGluZy93cml0aW5nIHRvIGEgZmlsZToKICAqCS0gdGhlIGNncm91cCB0byB1c2UgaXMgZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50LT5kX2ZzZGF0YQpAQCAtMjQxLDEwICsyNTIsMTcgQEAKIAogI2RlZmluZSBNQVhfQ0ZUWVBFX05BTUUgNjQKIHN0cnVjdCBjZnR5cGUgewotCS8qIEJ5IGNvbnZlbnRpb24sIHRoZSBuYW1lIHNob3VsZCBiZWdpbiB3aXRoIHRoZSBuYW1lIG9mIHRoZQotCSAqIHN1YnN5c3RlbSwgZm9sbG93ZWQgYnkgYSBwZXJpb2QgKi8KKwkvKgorCSAqIEJ5IGNvbnZlbnRpb24sIHRoZSBuYW1lIHNob3VsZCBiZWdpbiB3aXRoIHRoZSBuYW1lIG9mIHRoZQorCSAqIHN1YnN5c3RlbSwgZm9sbG93ZWQgYnkgYSBwZXJpb2QKKwkgKi8KIAljaGFyIG5hbWVbTUFYX0NGVFlQRV9OQU1FXTsKIAlpbnQgcHJpdmF0ZTsKKwkvKgorCSAqIElmIG5vdCAwLCBmaWxlIG1vZGUgaXMgc2V0IHRvIHRoaXMgdmFsdWUsIG90aGVyd2lzZSBpdCB3aWxsCisJICogYmUgZmlndXJlZCBvdXQgYXV0b21hdGljYWxseQorCSAqLworCW1vZGVfdCBtb2RlOwogCiAJLyoKIAkgKiBJZiBub24temVybywgZGVmaW5lcyB0aGUgbWF4aW11bSBsZW5ndGggb2Ygc3RyaW5nIHRoYXQgY2FuCkBAIC0zMTksMTUgKzMzNywyMCBAQAogCXZvaWQgKCpwcm9jZXNzX3Rhc2spKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCXN0cnVjdCBjZ3JvdXBfc2Nhbm5lciAqc2Nhbik7CiAJc3RydWN0IHB0cl9oZWFwICpoZWFwOworCXZvaWQgKmRhdGE7CiB9OwogCi0vKiBBZGQgYSBuZXcgZmlsZSB0byB0aGUgZ2l2ZW4gY2dyb3VwIGRpcmVjdG9yeS4gU2hvdWxkIG9ubHkgYmUKLSAqIGNhbGxlZCBieSBzdWJzeXN0ZW1zIGZyb20gd2l0aGluIGEgcG9wdWxhdGUoKSBtZXRob2QgKi8KKy8qCisgKiBBZGQgYSBuZXcgZmlsZSB0byB0aGUgZ2l2ZW4gY2dyb3VwIGRpcmVjdG9yeS4gU2hvdWxkIG9ubHkgYmUKKyAqIGNhbGxlZCBieSBzdWJzeXN0ZW1zIGZyb20gd2l0aGluIGEgcG9wdWxhdGUoKSBtZXRob2QKKyAqLwogaW50IGNncm91cF9hZGRfZmlsZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3Vic3lzLAogCQkgICAgICAgY29uc3Qgc3RydWN0IGNmdHlwZSAqY2Z0KTsKIAotLyogQWRkIGEgc2V0IG9mIG5ldyBmaWxlcyB0byB0aGUgZ2l2ZW4gY2dyb3VwIGRpcmVjdG9yeS4gU2hvdWxkCi0gKiBvbmx5IGJlIGNhbGxlZCBieSBzdWJzeXN0ZW1zIGZyb20gd2l0aGluIGEgcG9wdWxhdGUoKSBtZXRob2QgKi8KKy8qCisgKiBBZGQgYSBzZXQgb2YgbmV3IGZpbGVzIHRvIHRoZSBnaXZlbiBjZ3JvdXAgZGlyZWN0b3J5LiBTaG91bGQKKyAqIG9ubHkgYmUgY2FsbGVkIGJ5IHN1YnN5c3RlbXMgZnJvbSB3aXRoaW4gYSBwb3B1bGF0ZSgpIG1ldGhvZAorICovCiBpbnQgY2dyb3VwX2FkZF9maWxlcyhzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCQkJc3RydWN0IGNncm91cF9zdWJzeXMgKnN1YnN5cywKIAkJCWNvbnN0IHN0cnVjdCBjZnR5cGUgY2Z0W10sCkBAIC0zMzksMTUgKzM2MiwxOCBAQAogCiBpbnQgY2dyb3VwX3Rhc2tfY291bnQoY29uc3Qgc3RydWN0IGNncm91cCAqY2dycCk7CiAKLS8qIFJldHVybiB0cnVlIGlmIHRoZSBjZ3JvdXAgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IGNncm91cCAqLwotaW50IGNncm91cF9pc19kZXNjZW5kYW50KGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNncnApOworLyogUmV0dXJuIHRydWUgaWYgY2dycCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIHRhc2sncyBjZ3JvdXAgKi8KK2ludCBjZ3JvdXBfaXNfZGVzY2VuZGFudChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCi0vKiBDb250cm9sIEdyb3VwIHN1YnN5c3RlbSB0eXBlLiBTZWUgRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dCBmb3IgZGV0YWlscyAqLworLyoKKyAqIENvbnRyb2wgR3JvdXAgc3Vic3lzdGVtIHR5cGUuCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cHMudHh0IGZvciBkZXRhaWxzCisgKi8KIAogc3RydWN0IGNncm91cF9zdWJzeXMgewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICooKmNyZWF0ZSkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAogCQkJCQkJICBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKLQl2b2lkICgqcHJlX2Rlc3Ryb3kpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCk7CisJaW50ICgqcHJlX2Rlc3Ryb3kpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCk7CiAJdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCk7CiAJaW50ICgqY2FuX2F0dGFjaCkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAogCQkJICBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CkBAIC0zNjQsNiArMzkwLDExIEBACiAJaW50IGFjdGl2ZTsKIAlpbnQgZGlzYWJsZWQ7CiAJaW50IGVhcmx5X2luaXQ7CisJLyoKKwkgKiBUcnVlIGlmIHRoaXMgc3Vic3lzIHVzZXMgSUQuIElEIGlzIG5vdCBhdmFpbGFibGUgYmVmb3JlIGNncm91cF9pbml0KCkKKwkgKiAobm90IGF2YWlsYWJsZSBpbiBlYXJseV9pbml0IHRpbWUuKQorCSAqLworCWJvb2wgdXNlX2lkOwogI2RlZmluZSBNQVhfQ0dST1VQX1RZUEVfTkFNRUxFTiAzMgogCWNvbnN0IGNoYXIgKm5hbWU7CiAKQEAgLTM4Niw2ICs0MTcsOSBAQAogCSAqLwogCXN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290OwogCXN0cnVjdCBsaXN0X2hlYWQgc2libGluZzsKKwkvKiB1c2VkIHdoZW4gdXNlX2lkID09IHRydWUgKi8KKwlzdHJ1Y3QgaWRyIGlkcjsKKwlzcGlubG9ja190IGlkX2xvY2s7CiB9OwogCiAjZGVmaW5lIFNVQlNZUyhfeCkgZXh0ZXJuIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIF94ICMjIF9zdWJzeXM7CkBAIC00MTksNyArNDUzLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0YXNrOwogfTsKIAotLyogVG8gaXRlcmF0ZSBhY3Jvc3MgdGhlIHRhc2tzIGluIGEgY2dyb3VwOgorLyoKKyAqIFRvIGl0ZXJhdGUgYWNyb3NzIHRoZSB0YXNrcyBpbiBhIGNncm91cDoKICAqCiAgKiAxKSBjYWxsIGNncm91cF9pdGVyX3N0YXJ0IHRvIGludGlhbGl6ZSBhbiBpdGVyYXRvcgogICoKQEAgLTQyOCw5ICs0NjMsMTAgQEAKICAqCiAgKiAzKSBjYWxsIGNncm91cF9pdGVyX2VuZCgpIHRvIGRlc3Ryb3kgdGhlIGl0ZXJhdG9yLgogICoKLSAqIE9yLCBjYWxsIGNncm91cF9zY2FuX3Rhc2tzKCkgdG8gaXRlcmF0ZSB0aHJvdWdoIGV2ZXJ5IHRhc2sgaW4gYSBjcHVzZXQuCi0gKiAgICAtIGNncm91cF9zY2FuX3Rhc2tzKCkgaG9sZHMgdGhlIGNzc19zZXRfbG9jayB3aGVuIGNhbGxpbmcgdGhlIHRlc3RfdGFzaygpCi0gKiAgICAgIGNhbGxiYWNrLCBidXQgbm90IHdoaWxlIGNhbGxpbmcgdGhlIHByb2Nlc3NfdGFzaygpIGNhbGxiYWNrLgorICogT3IsIGNhbGwgY2dyb3VwX3NjYW5fdGFza3MoKSB0byBpdGVyYXRlIHRocm91Z2ggZXZlcnkgdGFzayBpbiBhCisgKiBjZ3JvdXAgLSBjZ3JvdXBfc2Nhbl90YXNrcygpIGhvbGRzIHRoZSBjc3Nfc2V0X2xvY2sgd2hlbiBjYWxsaW5nCisgKiB0aGUgdGVzdF90YXNrKCkgY2FsbGJhY2ssIGJ1dCBub3Qgd2hpbGUgY2FsbGluZyB0aGUgcHJvY2Vzc190YXNrKCkKKyAqIGNhbGxiYWNrLgogICovCiB2b2lkIGNncm91cF9pdGVyX3N0YXJ0KHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBjZ3JvdXBfaXRlciAqaXQpOwogc3RydWN0IHRhc2tfc3RydWN0ICpjZ3JvdXBfaXRlcl9uZXh0KHN0cnVjdCBjZ3JvdXAgKmNncnAsCkBAIC00MzksNiArNDc1LDQ0IEBACiBpbnQgY2dyb3VwX3NjYW5fdGFza3Moc3RydWN0IGNncm91cF9zY2FubmVyICpzY2FuKTsKIGludCBjZ3JvdXBfYXR0YWNoX3Rhc2soc3RydWN0IGNncm91cCAqLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKKy8qCisgKiBDU1MgSUQgaXMgSUQgZm9yIGNncm91cF9zdWJzeXNfc3RhdGUgc3RydWN0cyB1bmRlciBzdWJzeXMuIFRoaXMgb25seSB3b3JrcworICogaWYgY2dyb3VwX3N1YnN5cy51c2VfaWQgPT0gdHJ1ZS4gSXQgY2FuIGJlIHVzZWQgZm9yIGxvb2tpbmcgdXAgYW5kIHNjYW5uaW5nLgorICogQ1NTIElEIGlzIGFzc2lnbmVkIGF0IGNncm91cCBhbGxvY2F0aW9uIChjcmVhdGUpIGF1dG9tYXRpY2FsbHkKKyAqIGFuZCByZW1vdmVkIHdoZW4gc3Vic3lzIGNhbGxzIGZyZWVfY3NzX2lkKCkgZnVuY3Rpb24uIFRoaXMgaXMgYmVjYXVzZQorICogdGhlIGxpZmV0aW1lIG9mIGNncm91cF9zdWJzeXNfc3RhdGUgaXMgc3Vic3lzJ3MgbWF0dGVyLgorICoKKyAqIExvb2tpbmcgdXAgYW5kIHNjYW5uaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLgorICogVGFraW5nIGNncm91cF9tdXRleCgpL2hpZXJhcmNoeV9tdXRleCgpIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGZvbGxvd2luZyBjYWxscy4KKyAqIEJ1dCB0aGUgY3NzIHJldHVybmVkIGJ5IHRoaXMgcm91dGluZSBjYW4gYmUgIm5vdCBwb3B1bGF0ZWQgeWV0IiBvciAiYmVpbmcKKyAqIGRlc3Ryb3llZCIuIFRoZSBjYWxsZXIgc2hvdWxkIGNoZWNrIGNzcyBhbmQgY2dyb3VwJ3Mgc3RhdHVzLgorICovCisKKy8qCisgKiBUeXBpY2FsbHkgQ2FsbGVkIGF0IC0+ZGVzdHJveSgpLCBvciBzb21ld2hlcmUgdGhlIHN1YnN5cyBmcmVlcworICogY2dyb3VwX3N1YnN5c19zdGF0ZS4KKyAqLwordm9pZCBmcmVlX2Nzc19pZChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpOworCisvKiBGaW5kIGEgY2dyb3VwX3N1YnN5c19zdGF0ZSB3aGljaCBoYXMgZ2l2ZW4gSUQgKi8KKworc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzc19sb29rdXAoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBpbnQgaWQpOworCisvKgorICogR2V0IGEgY2dyb3VwIHdob3NlIGlkIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBpZCB1bmRlciB0cmVlIG9mIHJvb3QuCisgKiBSZXR1cm5pbmcgYSBjZ3JvdXBfc3Vic3lzX3N0YXRlIG9yIE5VTEwuCisgKi8KK3N0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3NfZ2V0X25leHQoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBpbnQgaWQsCisJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290LCBpbnQgKmZvdW5kaWQpOworCisvKiBSZXR1cm5zIHRydWUgaWYgcm9vdCBpcyBhbmNlc3RvciBvZiBjZyAqLworYm9vbCBjc3NfaXNfYW5jZXN0b3Ioc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNnLAorCQkgICAgIGNvbnN0IHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290KTsKKworLyogR2V0IGlkIGFuZCBkZXB0aCBvZiBjc3MgKi8KK3Vuc2lnbmVkIHNob3J0IGNzc19pZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKTsKK3Vuc2lnbmVkIHNob3J0IGNzc19kZXB0aChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKTsKKwogI2Vsc2UgLyogIUNPTkZJR19DR1JPVVBTICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGNncm91cF9pbml0X2Vhcmx5KHZvaWQpIHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGF0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCmluZGV4IGI4ODA4NjQuLmYyZGVkMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21wYXQuaApAQCAtMTkxLDYgKzE5MSwxMiBAQAogCQljb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdmVjLCB1bnNpZ25lZCBsb25nIHZsZW4pOwogYXNtbGlua2FnZSBzc2l6ZV90IGNvbXBhdF9zeXNfd3JpdGV2KHVuc2lnbmVkIGxvbmcgZmQsCiAJCWNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsIHVuc2lnbmVkIGxvbmcgdmxlbik7Cithc21saW5rYWdlIHNzaXplX3QgY29tcGF0X3N5c19wcmVhZHYodW5zaWduZWQgbG9uZyBmZCwKKwkJY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywKKwkJdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2xvdywgdTMyIHBvc19oaWdoKTsKK2FzbWxpbmthZ2Ugc3NpemVfdCBjb21wYXRfc3lzX3B3cml0ZXYodW5zaWduZWQgbG9uZyBmZCwKKwkJY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyBfX3VzZXIgKnZlYywKKwkJdW5zaWduZWQgbG9uZyB2bGVuLCB1MzIgcG9zX2xvdywgdTMyIHBvc19oaWdoKTsKIAogaW50IGNvbXBhdF9kb19leGVjdmUoY2hhciAqIGZpbGVuYW1lLCBjb21wYXRfdXB0cl90IF9fdXNlciAqYXJndiwKIAkgICAgICAgIGNvbXBhdF91cHRyX3QgX191c2VyICplbnZwLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCmluZGV4IGQ5NWRhMTAuLjZmYWE3ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTY4LDYgKzY4LDcgQEAKIAkJCXVuc2lnbmVkIGxvbmcgbWlzczsKIAkJCXVuc2lnbmVkIGxvbmcgaGl0OwogCQl9OworCQl1bnNpZ25lZCBsb25nIG1pc3NfaGl0WzJdOwogCX07CiB9OwogCkBAIC0xMjUsMTAgKzEyNiw3IEBACiAJCQkJLmxpbmUgPSBfX0xJTkVfXywJCQlcCiAJCQl9OwkJCQkJCVwKIAkJX19fX19fciA9ICEhKGNvbmQpOwkJCQkJXAotCQlpZiAoX19fX19fcikJCQkJCQlcCi0JCQlfX19fX19mLmhpdCsrOwkJCQkJXAotCQllbHNlCQkJCQkJCVwKLQkJCV9fX19fX2YubWlzcysrOwkJCQkJXAorCQlfX19fX19mLm1pc3NfaGl0W19fX19fX3JdKys7CQkJCQlcCiAJCV9fX19fX3I7CQkJCQkJXAogCX0pKQogI2VuZGlmIC8qIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaCBiL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKaW5kZXggZmM2NWQyMS4uYjk5NjZlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCkBAIC0zOSw4ICszOSwxMCBAQAogI2RlZmluZSBDTl9JRFhfVjg2RAkJCTB4NAogI2RlZmluZSBDTl9WQUxfVjg2RF9VVkVTQUZCCQkweDEKICNkZWZpbmUgQ05fSURYX0JCCQkJMHg1CS8qIEJsYWNrQm9hcmQsIGZyb20gdGhlIFRTUCBHUEwgc2FtcGxpbmcgZnJhbWV3b3JrICovCisjZGVmaW5lIENOX0RTVF9JRFgJCQkweDYKKyNkZWZpbmUgQ05fRFNUX1ZBTAkJCTB4MQogCi0jZGVmaW5lIENOX05FVExJTktfVVNFUlMJCTYKKyNkZWZpbmUgQ05fTkVUTElOS19VU0VSUwkJNwogCiAvKgogICogTWF4aW11bSBjb25uZWN0b3IncyBtZXNzYWdlIHNpemUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdS5oIGIvaW5jbHVkZS9saW51eC9jcHUuaAppbmRleCBjMjc0N2FjLi4yNjQzZDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1LmgKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9ub2RlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogc3RydWN0IGNwdSB7CiAJaW50IG5vZGVfaWQ7CQkvKiBUaGUgbm9kZSB3aGljaCBjb250YWlucyB0aGUgQ1BVICovCkBAIC0xMDMsMTYgKzEwMiw2IEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAvKiBTdG9wIENQVXMgZ29pbmcgdXAgYW5kIGRvd24uICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVob3RwbHVnX211dGV4X2xvY2soc3RydWN0IG11dGV4ICpjcHVfaHBfbXV0ZXgpCi17Ci0JbXV0ZXhfbG9jayhjcHVfaHBfbXV0ZXgpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3B1aG90cGx1Z19tdXRleF91bmxvY2soc3RydWN0IG11dGV4ICpjcHVfaHBfbXV0ZXgpCi17Ci0JbXV0ZXhfdW5sb2NrKGNwdV9ocF9tdXRleCk7Ci19Ci0KIGV4dGVybiB2b2lkIGdldF9vbmxpbmVfY3B1cyh2b2lkKTsKIGV4dGVybiB2b2lkIHB1dF9vbmxpbmVfY3B1cyh2b2lkKTsKICNkZWZpbmUgaG90Y3B1X25vdGlmaWVyKGZuLCBwcmkpIHsJCQkJXApAQCAtMTI2LDExICsxMTUsNiBAQAogCiAjZWxzZQkJLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVob3RwbHVnX211dGV4X2xvY2soc3RydWN0IG11dGV4ICpjcHVfaHBfbXV0ZXgpCi17IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVob3RwbHVnX211dGV4X3VubG9jayhzdHJ1Y3QgbXV0ZXggKmNwdV9ocF9tdXRleCkKLXsgfQotCiAjZGVmaW5lIGdldF9vbmxpbmVfY3B1cygpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcHV0X29ubGluZV9jcHVzKCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBob3RjcHVfbm90aWZpZXIoZm4sIHByaSkJZG8geyAodm9pZCkoZm4pOyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVzZXQuaCBiL2luY2x1ZGUvbGludXgvY3B1c2V0LmgKaW5kZXggMmUwZDc5Ni4uMDVlYTFkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVzZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdXNldC5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2lmZGVmIENPTkZJR19DUFVTRVRTCiAKQEAgLTI5LDE5ICszMCwyOSBAQAogdm9pZCBjcHVzZXRfdXBkYXRlX3Rhc2tfbWVtb3J5X3N0YXRlKHZvaWQpOwogaW50IGNwdXNldF9ub2RlbWFza192YWxpZF9tZW1zX2FsbG93ZWQobm9kZW1hc2tfdCAqbm9kZW1hc2spOwogCi1leHRlcm4gaW50IF9fY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spOwotZXh0ZXJuIGludCBfX2NwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKTsKK2V4dGVybiBpbnQgX19jcHVzZXRfbm9kZV9hbGxvd2VkX3NvZnR3YWxsKGludCBub2RlLCBnZnBfdCBnZnBfbWFzayk7CitleHRlcm4gaW50IF9fY3B1c2V0X25vZGVfYWxsb3dlZF9oYXJkd2FsbChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spOwogCi1zdGF0aWMgaW50IGlubGluZSBjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsKHN0cnVjdCB6b25lICp6LCBnZnBfdCBnZnBfbWFzaykKK3N0YXRpYyBpbmxpbmUgaW50IGNwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwoaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrKQogewogCXJldHVybiBudW1iZXJfb2ZfY3B1c2V0cyA8PSAxIHx8Ci0JCV9fY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbCh6LCBnZnBfbWFzayk7CisJCV9fY3B1c2V0X25vZGVfYWxsb3dlZF9zb2Z0d2FsbChub2RlLCBnZnBfbWFzayk7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIGNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X25vZGVfYWxsb3dlZF9oYXJkd2FsbChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJcmV0dXJuIG51bWJlcl9vZl9jcHVzZXRzIDw9IDEgfHwKLQkJX19jcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHosIGdmcF9tYXNrKTsKKwkJX19jcHVzZXRfbm9kZV9hbGxvd2VkX2hhcmR3YWxsKG5vZGUsIGdmcF9tYXNrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJcmV0dXJuIGNwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwoem9uZV90b19uaWQoeiksIGdmcF9tYXNrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X3pvbmVfYWxsb3dlZF9oYXJkd2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJcmV0dXJuIGNwdXNldF9ub2RlX2FsbG93ZWRfaGFyZHdhbGwoem9uZV90b19uaWQoeiksIGdmcF9tYXNrKTsKIH0KIAogZXh0ZXJuIGludCBjcHVzZXRfbWVtc19hbGxvd2VkX2ludGVyc2VjdHMoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICp0c2sxLApAQCAtMTEyLDYgKzEyMywxNiBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjcHVzZXRfbm9kZV9hbGxvd2VkX3NvZnR3YWxsKGludCBub2RlLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X25vZGVfYWxsb3dlZF9oYXJkd2FsbChpbnQgbm9kZSwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNwdXNldF96b25lX2FsbG93ZWRfc29mdHdhbGwoc3RydWN0IHpvbmUgKnosIGdmcF90IGdmcF9tYXNrKQogewogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWJ1Z2ZzLmggYi9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaAppbmRleCBhZjBlMDFkLi5lYjVjMmJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RlYnVnZnMuaApAQCAtNzEsNiArNzEsOSBAQAogc3RydWN0IGRlbnRyeSAqZGVidWdmc19jcmVhdGVfYmxvYihjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKIAkJCQkgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKIAkJCQkgIHN0cnVjdCBkZWJ1Z2ZzX2Jsb2Jfd3JhcHBlciAqYmxvYik7CisKK2Jvb2wgZGVidWdmc19pbml0aWFsaXplZCh2b2lkKTsKKwogI2Vsc2UKIAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMTgzLDYgKzE4NiwxMSBAQAogCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgZGVidWdmc19pbml0aWFsaXplZCh2b2lkKQoreworCXJldHVybiBmYWxzZTsKK30KKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaAppbmRleCA4MjA5ZTA4Li42NmVjMDVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaApAQCAtMTM5LDYgKzEzOSw5IEBACiAJZG1faW9jdGxfZm4gaW9jdGw7CiAJZG1fbWVyZ2VfZm4gbWVyZ2U7CiAJZG1fYnVzeV9mbiBidXN5OworCisJLyogRm9yIGludGVybmFsIGRldmljZS1tYXBwZXIgdXNlLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKIHN0cnVjdCBpb19yZXN0cmljdGlvbnMgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1kaXJ0eS1sb2cuaCBiL2luY2x1ZGUvbGludXgvZG0tZGlydHktbG9nLmgKaW5kZXggNjAwYzVmYi4uNWU4YjExZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbS1kaXJ0eS1sb2cuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLWRpcnR5LWxvZy5oCkBAIC0yOCw2ICsyOCw5IEBACiAJY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CiAKKwkvKiBGb3IgaW50ZXJuYWwgZGV2aWNlLW1hcHBlciB1c2UgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKIAlpbnQgKCpjdHIpKHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZywgc3RydWN0IGRtX3RhcmdldCAqdGksCiAJCSAgIHVuc2lnbmVkIGFyZ2MsIGNoYXIgKiphcmd2KTsKIAl2b2lkICgqZHRyKShzdHJ1Y3QgZG1fZGlydHlfbG9nICpsb2cpOwpAQCAtMTEzLDYgKzExNiwxNiBAQAogCSAqLwogCWludCAoKnN0YXR1cykoc3RydWN0IGRtX2RpcnR5X2xvZyAqbG9nLCBzdGF0dXNfdHlwZV90IHN0YXR1c190eXBlLAogCQkgICAgICBjaGFyICpyZXN1bHQsIHVuc2lnbmVkIG1heGxlbik7CisKKwkvKgorCSAqIGlzX3JlbW90ZV9yZWNvdmVyaW5nIGlzIG5lY2Vzc2FyeSBmb3IgY2x1c3RlciBtaXJyb3JpbmcuIEl0IHByb3ZpZGVzCisJICogYSB3YXkgdG8gZGV0ZWN0IHJlY292ZXJ5IG9uIGFub3RoZXIgbm9kZSwgc28gd2UgYXJlbid0IHdyaXRpbmcKKwkgKiBjb25jdXJyZW50bHkuICBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0byBibG9jayAod2hlbiBhIGNsdXN0ZXIgbG9nCisJICogaXMgdXNlZCkuCisJICoKKwkgKiBSZXR1cm5zOiAwLCAxCisJICovCisJaW50ICgqaXNfcmVtb3RlX3JlY292ZXJpbmcpKHN0cnVjdCBkbV9kaXJ0eV9sb2cgKmxvZywgcmVnaW9uX3QgcmVnaW9uKTsKIH07CiAKIGludCBkbV9kaXJ0eV9sb2dfdHlwZV9yZWdpc3RlcihzdHJ1Y3QgZG1fZGlydHlfbG9nX3R5cGUgKnR5cGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFfcmVtYXBwaW5nLmggYi9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaAppbmRleCBhZjFkYWI0Li4xYTQ1NWYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYV9yZW1hcHBpbmcuaApAQCAtMTEsNiArMTEsNyBAQAogCiAjZGVmaW5lIERNQV9QVEVfUkVBRCAoMSkKICNkZWZpbmUgRE1BX1BURV9XUklURSAoMikKKyNkZWZpbmUgRE1BX1BURV9TTlAgKDEgPDwgMTEpCiAKIHN0cnVjdCBpbnRlbF9pb21tdTsKIHN0cnVjdCBkbWFyX2RvbWFpbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmggYi9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCmluZGV4IDE5NTZjOGQuLjJlMmFhM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaApAQCAtMjMsOSArMjMsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvLmg+Ci0jaW5jbHVkZSA8bGludXgva3JlZi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKIC8qKgpAQCAtMjA1LDYgKzIwMiw3IEBACiAvKioKICAqIHN0cnVjdCBkbWFfZGV2aWNlIC0gaW5mbyBvbiB0aGUgZW50aXR5IHN1cHBseWluZyBETUEgc2VydmljZXMKICAqIEBjaGFuY250OiBob3cgbWFueSBETUEgY2hhbm5lbHMgYXJlIHN1cHBvcnRlZAorICogQHByaXZhdGVjbnQ6IGhvdyBtYW55IERNQSBjaGFubmVscyBhcmUgcmVxdWVzdGVkIGJ5IGRtYV9yZXF1ZXN0X2NoYW5uZWwKICAqIEBjaGFubmVsczogdGhlIGxpc3Qgb2Ygc3RydWN0IGRtYV9jaGFuCiAgKiBAZ2xvYmFsX25vZGU6IGxpc3RfaGVhZCBmb3IgZ2xvYmFsIGRtYV9kZXZpY2VfbGlzdAogICogQGNhcF9tYXNrOiBvbmUgb3IgbW9yZSBkbWFfY2FwYWJpbGl0eSBmbGFncwpAQCAtMjI3LDYgKzIyNSw3IEBACiBzdHJ1Y3QgZG1hX2RldmljZSB7CiAKIAl1bnNpZ25lZCBpbnQgY2hhbmNudDsKKwl1bnNpZ25lZCBpbnQgcHJpdmF0ZWNudDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNoYW5uZWxzOwogCXN0cnVjdCBsaXN0X2hlYWQgZ2xvYmFsX25vZGU7CiAJZG1hX2NhcF9tYXNrX3QgIGNhcF9tYXNrOwpAQCAtMjkxLDYgKzI5MCwyNCBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVNZTkNfVFhfRE1BCisjZGVmaW5lIGFzeW5jX2RtYWVuZ2luZV9nZXQoKQlkbWFlbmdpbmVfZ2V0KCkKKyNkZWZpbmUgYXN5bmNfZG1hZW5naW5lX3B1dCgpCWRtYWVuZ2luZV9wdXQoKQorI2RlZmluZSBhc3luY19kbWFfZmluZF9jaGFubmVsKHR5cGUpIGRtYV9maW5kX2NoYW5uZWwodHlwZSkKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgYXN5bmNfZG1hZW5naW5lX2dldCh2b2lkKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGFzeW5jX2RtYWVuZ2luZV9wdXQodm9pZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9jaGFuICoKK2FzeW5jX2RtYV9maW5kX2NoYW5uZWwoZW51bSBkbWFfdHJhbnNhY3Rpb25fdHlwZSB0eXBlKQoreworCXJldHVybiBOVUxMOworfQorI2VuZGlmCisKIGRtYV9jb29raWVfdCBkbWFfYXN5bmNfbWVtY3B5X2J1Zl90b19idWYoc3RydWN0IGRtYV9jaGFuICpjaGFuLAogCXZvaWQgKmRlc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbik7CiBkbWFfY29va2llX3QgZG1hX2FzeW5jX21lbWNweV9idWZfdG9fcGcoc3RydWN0IGRtYV9jaGFuICpjaGFuLApAQCAtMzM3LDYgKzM1NCwxMyBAQAogCXNldF9iaXQodHhfdHlwZSwgZHN0cC0+Yml0cyk7CiB9CiAKKyNkZWZpbmUgZG1hX2NhcF9jbGVhcih0eCwgbWFzaykgX19kbWFfY2FwX2NsZWFyKCh0eCksICYobWFzaykpCitzdGF0aWMgaW5saW5lIHZvaWQKK19fZG1hX2NhcF9jbGVhcihlbnVtIGRtYV90cmFuc2FjdGlvbl90eXBlIHR4X3R5cGUsIGRtYV9jYXBfbWFza190ICpkc3RwKQoreworCWNsZWFyX2JpdCh0eF90eXBlLCBkc3RwLT5iaXRzKTsKK30KKwogI2RlZmluZSBkbWFfY2FwX3plcm8obWFzaykgX19kbWFfY2FwX3plcm8oJihtYXNrKSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2RtYV9jYXBfemVybyhkbWFfY2FwX21hc2tfdCAqZHN0cCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHMxd20uaCBiL2luY2x1ZGUvbGludXgvZHMxd20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNjNjVlNC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2RzMXdtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi0vKiBwbGF0Zm9ybSBkYXRhIGZvciB0aGUgRFMxV00gZHJpdmVyICovCi0KLXN0cnVjdCBkczF3bV9wbGF0Zm9ybV9kYXRhIHsKLQlpbnQgYnVzX3NoaWZ0OwkgICAgLyogbnVtYmVyIG9mIHNoaWZ0cyBuZWVkZWQgdG8gY2FsY3VsYXRlIHRoZQotCQkJICAgICAqIG9mZnNldCBiZXR3ZWVuIERTMVdNIHJlZ2lzdGVyczsKLQkJCSAgICAgKiBlLmcuIG9uIGg1eHh4IGFuZCBoMjIwMCB0aGlzIGlzIDIKLQkJCSAgICAgKiAocmVnaXN0ZXJzIGFsaWduZWQgdG8gNC1ieXRlIGJvdW5kYXJpZXMpLAotCQkJICAgICAqIHdoaWxlIG9uIGh4NDcwMCB0aGlzIGlzIDEgKi8KLQlpbnQgYWN0aXZlX2hpZ2g7Ci0Jdm9pZCAoKmVuYWJsZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7Ci0Jdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHN0LmggYi9pbmNsdWRlL2xpbnV4L2RzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNmZlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2RzdC5oCkBAIC0wLDAgKzEsNTg3IEBACisvKgorICogMjAwNysgQ29weXJpZ2h0IChjKSBFdmdlbml5IFBvbHlha292IDxqb2hucG9sQDJrYS5taXB0LnJ1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfX0RTVF9ICisjZGVmaW5lIF9fRFNUX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CisKKyNkZWZpbmUgRFNUX05BTUVMRU4JCTMyCisjZGVmaW5lIERTVF9OQU1FCQkiZHN0IgorCitlbnVtIHsKKwkvKiBSZW1vdmUgbm9kZSB3aXRoIGdpdmVuIGlkIGZyb20gc3RvcmFnZSAqLworCURTVF9ERUxfTk9ERQk9IDAsCisJLyogQWRkIHJlbW90ZSBub2RlIHdpdGggZ2l2ZW4gaWQgdG8gdGhlIHN0b3JhZ2UgKi8KKwlEU1RfQUREX1JFTU9URSwKKwkvKiBBZGQgbG9jYWwgbm9kZSB3aXRoIGdpdmVuIGlkIHRvIHRoZSBzdG9yYWdlIHRvIGJlIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IHJlbW90ZSBwZWVycyAqLworCURTVF9BRERfRVhQT1JULAorCS8qIENyeXB0byBpbml0aWFsaXphdGlvbiBjb21tYW5kIChoYXNoL2NpcGhlciB1c2VkIHRvIHByb3RlY3QgdGhlIGNvbm5lY3Rpb24pICovCisJRFNUX0NSWVBUTywKKwkvKiBTZWN1cml0eSBhdHRyaWJ1dGVzIGZvciBnaXZlbiBjb25uZWN0aW9uIChwZXJtaXNzaW9ucyBmb3IgZXhhbXBsZSkgKi8KKwlEU1RfU0VDVVJJVFksCisJLyogUmVnaXN0ZXIgZ2l2ZW4gbm9kZSBpbiB0aGUgYmxvY2sgbGF5ZXIgc3Vic3lzdGVtICovCisJRFNUX1NUQVJULAorCURTVF9DTURfTUFYCit9OworCitzdHJ1Y3QgZHN0X2N0bAoreworCS8qIFN0b3JhZ2UgbmFtZSAqLworCWNoYXIJCQluYW1lW0RTVF9OQU1FTEVOXTsKKwkvKiBDb21tYW5kIGZsYWdzICovCisJX191MzIJCQlmbGFnczsKKwkvKiBDb21tYW5kIGl0c2VsZiAoc2VlIGFib3ZlKSAqLworCV9fdTMyCQkJY21kOworCS8qIE1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIHBlciBzaW5nbGUgcmVxdWVzdCBpbiB0aGlzIGRldmljZSAqLworCV9fdTMyCQkJbWF4X3BhZ2VzOworCS8qIFN0YWxlL2Vycm9yIHRyYW5zYWN0aW9uIHNjYW5uaW5nIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCisJX191MzIJCQl0cmFuc19zY2FuX3RpbWVvdXQ7CisJLyogTWF4aW11bSBudW1iZXIgb2YgcmV0cnkgc2VuZHMgYmVmb3JlIGNvbXBsZXRpbmcgdHJhbnNhY3Rpb24gYXMgYnJva2VuICovCisJX191MzIJCQl0cmFuc19tYXhfcmV0cmllczsKKwkvKiBTdG9yYWdlIHNpemUgKi8KKwlfX3U2NAkJCXNpemU7Cit9OworCisvKiBSZXBseSBjb21tYW5kIGNhcnJpZXMgY29tcGxldGlvbiBzdGF0dXMgKi8KK3N0cnVjdCBkc3RfY3RsX2FjaworeworCXN0cnVjdCBjbl9tc2cJCW1zZzsKKwlpbnQJCQllcnJvcjsKKwlpbnQJCQl1bnVzZWRbM107Cit9OworCisvKgorICogVW5mb3J0dW5hbHRlbHkgc29ja2V0IGFkZHJlc3Mgc3RydWN0dXJlIGlzIG5vdCBleHBvcnRlZCB0byB1c2Vyc3BhY2UKKyAqIGFuZCBpcyByZWRlZmluZWQgdGhlcmUuCisgKi8KKyNkZWZpbmUgU0FERFJfTUFYX0RBVEEJMTI4CisKK3N0cnVjdCBzYWRkciB7CisJLyogYWRkcmVzcyBmYW1pbHksIEFGX3h4eAkqLworCXVuc2lnbmVkIHNob3J0CQlzYV9mYW1pbHk7CisJLyogMTQgYnl0ZXMgb2YgcHJvdG9jb2wgYWRkcmVzcwkqLworCWNoYXIJCQlzYV9kYXRhW1NBRERSX01BWF9EQVRBXTsKKwkvKiBOdW1iZXIgb2YgYnl0ZXMgdXNlZCBpbiBzYV9kYXRhICovCisJdW5zaWduZWQgc2hvcnQJCXNhX2RhdGFfbGVuOworfTsKKworLyogQWRkcmVzcyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBkc3RfbmV0d29ya19jdGwKK3sKKwkvKiBTb2NrZXQgdHlwZTogZGF0YWdyYW0sIHN0cmVhbS4uLiovCisJdW5zaWduZWQgaW50CQl0eXBlOworCS8qIExldCBtZSBndWVzcywgaXMgaXQgYSBKdXBpdGVyIGRpYW1ldGVyPyAqLworCXVuc2lnbmVkIGludAkJcHJvdG87CisJLyogUGVlcidzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc2FkZHIJCWFkZHI7Cit9OworCitzdHJ1Y3QgZHN0X2NyeXB0b19jdGwKK3sKKwkvKiBDaXBoZXIgYW5kIGhhc2ggbmFtZXMgKi8KKwljaGFyCQkJY2lwaGVyX2FsZ29bRFNUX05BTUVMRU5dOworCWNoYXIJCQloYXNoX2FsZ29bRFNUX05BTUVMRU5dOworCisJLyogS2V5IHNpemVzLiBDYW4gYmUgemVybyBmb3IgZGlnZXN0IGZvciBleGFtcGxlICovCisJdW5zaWduZWQgaW50CQljaXBoZXJfa2V5c2l6ZSwgaGFzaF9rZXlzaXplOworCS8qIEFsaWdubWVudC4gQ2FsY3VsYXRlZCBieSB0aGUgRFNUIGl0c2VsZi4gKi8KKwl1bnNpZ25lZCBpbnQJCWNyeXB0b19hdHRhY2hlZF9zaXplOworCS8qIE51bWJlciBvZiB0aHJlYWRzIHRvIHBlcmZvcm0gY3J5cHRvIG9wZXJhdGlvbnMgKi8KKwlpbnQJCQl0aHJlYWRfbnVtOworfTsKKworLyogRXhwb3J0IHNlY3VyaXR5IGF0dHJpYnV0ZXMgaGF2ZSB0aGlzIGJpdHMgY2hlY2tlZCBpbiB3aGVuIGNsaWVudCBjb25uZWN0cyAqLworI2RlZmluZSBEU1RfUEVSTV9SRUFECQkoMTw8MCkKKyNkZWZpbmUgRFNUX1BFUk1fV1JJVEUJCSgxPDwxKQorCisvKgorICogUmlnaHQgbm93IGl0IGlzIHNpbXBsZSBtb2RlbCwgd2hlcmUgZWFjaCByZW1vdGUgYWRkcmVzcworICogaXMgYXNzaWduZWQgdG8gc2V0IG9mIHBlcm1pc3Npb25zIGl0IGlzIGFsbG93ZWQgdG8gcGVyZm9ybS4KKyAqIEluIHJlYWwgd29ybGQgYmxvY2sgZGV2aWNlIGRvZXMgbm90IGtub3cgYW55dGhpbmcgYnV0CisgKiByZWFkaW5nIGFuZCB3cml0aW5nLCBzbyBpdCBzaG91bGQgYmUgbW9yZSB0aGFuIGVub3VnaC4KKyAqLworc3RydWN0IGRzdF9zZWN1cmVfdXNlcgoreworCXVuc2lnbmVkIGludAkJcGVybWlzc2lvbnM7CisJc3RydWN0IHNhZGRyCQlhZGRyOworfTsKKworLyoKKyAqIEV4cG9ydCBjb250cm9sIGNvbW1hbmQ6IGRldmljZSB0byBleHBvcnQgYW5kIG5ldHdvcmsgYWRkcmVzcyB0byBhY2NlcHQKKyAqIGNsaWVudHMgdG8gd29yayB3aXRoIGdpdmVuIGRldmljZQorICovCitzdHJ1Y3QgZHN0X2V4cG9ydF9jdGwKK3sKKwljaGFyCQkJZGV2aWNlW0RTVF9OQU1FTEVOXTsKKwlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsCWN0bDsKK307CisKK2VudW0geworCURTVF9DRkcJPSAxLCAJCS8qIFJlcXVlc3QgcmVtb3RlIGNvbmZpZ3VyYXRpb24gKi8KKwlEU1RfSU8sCQkJLyogSU8gY29tbWFuZCAqLworCURTVF9JT19SRVNQT05TRSwJLyogSU8gcmVzcG9uc2UgKi8KKwlEU1RfUElORywJCS8qIEtlZXBhbGl2ZSBtZXNzYWdlICovCisJRFNUX05DTURfTUFYLAorfTsKKworc3RydWN0IGRzdF9jbWQKK3sKKwkvKiBOZXR3b3JrIGNvbW1hbmQgaXRzZWxmLCBzZWUgYWJvdmUgKi8KKwlfX3UzMgkJCWNtZDsKKwkvKgorCSAqIFNpemUgb2YgdGhlIGF0dGFjaGVkIGRhdGEKKwkgKiAoaW4gbW9zdCBjYXNlcywgZm9yIFJFQUQgY29tbWFuZCBpdCBtZWFucyBob3cgbWFueSBieXRlcyB3ZXJlIHJlcXVlc3RlZCkKKwkgKi8KKwlfX3UzMgkJCXNpemU7CisJLyogQ3J5cHRvIHNpemU6IG51bWJlciBvZiBhdHRhY2hlZCBieXRlcyB3aXRoIGRpZ2VzdC9obWFjICovCisJX191MzIJCQljc2l6ZTsKKwkvKiBIZXJlIHdlIGNhbiBjYXJyeSBzZWNyZXQgZGF0YSAqLworCV9fdTMyCQkJcmVzZXJ2ZWQ7CisJLyogUmVhZC93cml0ZSBiaXRzLCBzZWUgaG93IHRoZXkgYXJlIGVuY29kZWQgaW4gYmlvIHN0cnVjdHVyZSAqLworCV9fdTY0CQkJcnc7CisJLyogQklPIGZsYWdzICovCisJX191NjQJCQlmbGFnczsKKwkvKiBVbmlxdWUgY29tbWFuZCBpZCAobGlrZSB0cmFuc2FjdGlvbiBJRCkgKi8KKwlfX3U2NAkJCWlkOworCS8qIFNlY3RvciB0byBzdGFydCBJTyBmcm9tICovCisJX191NjQJCQlzZWN0b3I7CisJLyogSGFzaCBkYXRhIGlzIHBsYWNlZCBhZnRlciB0aGlzIGhlYWRlciAqLworCV9fdTgJCQloYXNoWzBdOworfTsKKworLyoKKyAqIENvbnZlcnQgY29tbWFuZCB0by9mcm9tIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAqIFdlIGRvIG5vdCB1c2UgaHRvbiooKSBmdW5jdGlvbnMsIHNpbmNlIHRoZXJlIGlzCisgKiBubyA2NC1iaXQgaW1wbGVtZW50YXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkc3RfY29udmVydF9jbWQoc3RydWN0IGRzdF9jbWQgKmMpCit7CisJYy0+Y21kID0gX19jcHVfdG9fYmUzMihjLT5jbWQpOworCWMtPmNzaXplID0gX19jcHVfdG9fYmUzMihjLT5jc2l6ZSk7CisJYy0+c2l6ZSA9IF9fY3B1X3RvX2JlMzIoYy0+c2l6ZSk7CisJYy0+c2VjdG9yID0gX19jcHVfdG9fYmU2NChjLT5zZWN0b3IpOworCWMtPmlkID0gX19jcHVfdG9fYmU2NChjLT5pZCk7CisJYy0+ZmxhZ3MgPSBfX2NwdV90b19iZTY0KGMtPmZsYWdzKTsKKwljLT5ydyA9IF9fY3B1X3RvX2JlNjQoYy0+cncpOworfQorCisvKiBUcmFuc2FjdGlvbiBpZCAqLwordHlwZWRlZiBfX3U2NCBkc3RfZ2VuX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorCisjaWZkZWYgQ09ORklHX0RTVF9ERUJVRworI2RlZmluZSBkcHJpbnRrKGYsIGEuLi4pIHByaW50ayhLRVJOX05PVElDRSBmLCAjI2EpCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorCWRwcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pIHt9CisjZW5kaWYKKworc3RydWN0IGRzdF9ub2RlOworCitzdHJ1Y3QgZHN0X3RyYW5zCit7CisJLyogRFNUIG5vZGUgd2UgYXJlIHdvcmtpbmcgd2l0aCAqLworCXN0cnVjdCBkc3Rfbm9kZQkJKm47CisKKwkvKiBFbnRyeSBpbnNpZGUgdHJhbnNhY3Rpb24gdHJlZSAqLworCXN0cnVjdCByYl9ub2RlCQl0cmFuc19lbnRyeTsKKworCS8qIE1lcmxpbiBraWxscyB0aGlzIHRyYW5zYWN0aW9uIHdoZW4gdGhpcyBtZW1vcnkgY2VsbCBlcXVhbHMgemVybyAqLworCWF0b21pY190CQlyZWZjbnQ7CisKKwkvKiBIb3cgdGhpcyB0cmFuc2FjdGlvbiBzaG91bGQgYmUgcHJvY2Vzc2VkIGJ5IGNyeXB0byBlbmdpbmUgKi8KKwlzaG9ydAkJCWVuYzsKKwkvKiBIb3cgbWFueSB0aW1lcyB0aGlzIHRyYW5zYWN0aW9uIHdhcyByZXNlbnQgKi8KKwlzaG9ydAkJCXJldHJpZXM7CisJLyogQ29tcGxldGlvbiBzdGF0dXMgKi8KKwlpbnQJCQllcnJvcjsKKworCS8qIFdoZW4gZGlkIHdlIHNlbmQgaXQgdG8gdGhlIHJlbW90ZSBwZWVyICovCisJbG9uZwkJCXNlbmRfdGltZTsKKworCS8qIE15IG5hbWUgaXMuLi4KKwkgKiBXZWxsLCBjb21wdXRlcnMgZG9lcyBub3Qgc3BlYWssIHRoZXkgaGF2ZSB1bmlxdWUgaWQgaW5zdGVhZCAqLworCWRzdF9nZW5fdAkJZ2VuOworCisJLyogQmxvY2sgSU8gd2UgYXJlIHdvcmtpbmcgd2l0aCAqLworCXN0cnVjdCBiaW8JCSpiaW87CisKKwkvKiBOZXR3b3JrIGNvbW1hbmQgZm9yIGFib3ZlIGJsb2NrIElPIHJlcXVlc3QgKi8KKwlzdHJ1Y3QgZHN0X2NtZAkJY21kOworfTsKKworc3RydWN0IGRzdF9jcnlwdG9fZW5naW5lCit7CisJLyogV2hhdCBzaG91bGQgd2UgZG8gd2l0aCBhbGwgYmxvY2sgcmVxdWVzdHMgKi8KKwlzdHJ1Y3QgY3J5cHRvX2hhc2gJKmhhc2g7CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyCSpjaXBoZXI7CisKKwkvKiBQb29sIG9mIHBhZ2VzIHVzZWQgdG8gZW5jcnlwdCBkYXRhIGludG8gYmVmb3JlIHNlbmRpbmcgKi8KKwlpbnQJCQlwYWdlX251bTsKKwlzdHJ1Y3QgcGFnZQkJKipwYWdlczsKKworCS8qIFdoYXQgdG8gZG8gd2l0aCBjdXJyZW50IHJlcXVlc3QgKi8KKwlpbnQJCQllbmM7CisJLyogV2hvIHdlIGFyZSBhbmQgd2hlcmUgZG8gd2UgZ28gKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNyYywgKmRzdDsKKworCS8qIE1heGltdW0gdGltZW91dCB3YWl0aW5nIGZvciBlbmNyeXB0aW9uIHRvIGJlIGNvbXBsZXRlZCAqLworCWxvbmcJCQl0aW1lb3V0OworCS8qIElWIGlzIGEgNjQtYml0IHNlcXVlbnRpYWwgY291bnRlciAqLworCXU2NAkJCWl2OworCisJLyogU2VjcmV0IGRhdGEgKi8KKwl2b2lkCQkJKnByaXZhdGU7CisKKwkvKiBDYWNoZWQgdGVtcG9yYXJ5IGRhdGEgbGl2ZXMgaGVyZSAqLworCWludAkJCXNpemU7CisJdm9pZAkJCSpkYXRhOworfTsKKworc3RydWN0IGRzdF9zdGF0ZQoreworCS8qIFRoZSBtYWluIHN0YXRlIHByb3RlY3Rpb24gKi8KKwlzdHJ1Y3QgbXV0ZXgJCXN0YXRlX2xvY2s7CisKKwkvKiBQb2xsaW5nIG1hY2hpbmVyeSBmb3Igc29ja2V0cyAqLworCXdhaXRfcXVldWVfdCAJCXdhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgCSp3aGVhZDsKKwkvKiBNb3N0IG9mIGV2ZW50cyBhcmUgYmVpbmcgd2FpdGVkIGhlcmUgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCAJdGhyZWFkX3dhaXQ7CisKKwkvKiBXaG8gb3ducyB0aGlzPyAqLworCXN0cnVjdCBkc3Rfbm9kZQkJKm5vZGU7CisKKwkvKiBOZXR3b3JrIGFkZHJlc3MgZm9yIHRoaXMgc3RhdGUgKi8KKwlzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsCWN0bDsKKworCS8qIFBlcm1pc3Npb25zIHRvIHdvcmsgd2l0aDogcmVhZC1vbmx5IG9yIHJ3IGNvbm5lY3Rpb24gKi8KKwl1MzIJCQlwZXJtaXNzaW9uczsKKworCS8qIENhbGxlZCB3aGVuIHdlIG5lZWQgdG8gY2xlYW4gcHJpdmF0ZSBkYXRhICovCisJdm9pZAkJCSgqIGNsZWFudXApKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKKworCS8qIFVzZWQgYnkgdGhlIHNlcnZlcjogQklPIGNvbXBsZXRpb24gcXVldWVzIEJJT3MgaGVyZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJcmVxdWVzdF9saXN0OworCXNwaW5sb2NrX3QJCXJlcXVlc3RfbG9jazsKKworCS8qIEd1ZXNzIHdoYXQ/IE5vLCBpdCBpcyBub3QgbnVtYmVyIG9mIHBsYW5ldHMgKi8KKwlhdG9taWNfdAkJcmVmY250OworCisJLyogVGhpcyBmbGFncyBpcyBzZXQgd2hlbiBjb25uZWN0aW9uIHNob3VsZCBiZSBkcm9wcGVkICovCisJaW50CQkJbmVlZF9leGl0OworCisJLyoKKwkgKiBTb2NrZXQgdG8gd29yayB3aXRoLiBTZWNvbmQgcG9pbnRlciBpcyB1c2VkIGZvcgorCSAqIGxvY2tsZXNzIGNoZWNrIGlmIHNvY2tldCB3YXMgY2hhbmdlZCBiZWZvcmUgcGVyZm9ybWluZworCSAqIG5leHQgYWN0aW9uIChsaWtlIHdvcmtpbmcgd2l0aCBjYWNoZWQgcG9sbGluZyByZXN1bHQpCisJICovCisJc3RydWN0IHNvY2tldAkJKnNvY2tldCwgKnJlYWRfc29ja2V0OworCisJLyogQ2FjaGVkIHByZWFsbG9jYXRlZCBkYXRhICovCisJdm9pZAkJCSpkYXRhOworCXVuc2lnbmVkIGludAkJc2l6ZTsKKworCS8qIEN1cnJlbnRseSBwcm9jZXNzZWQgY29tbWFuZCAqLworCXN0cnVjdCBkc3RfY21kCQljbWQ7Cit9OworCitzdHJ1Y3QgZHN0X2luZm8KK3sKKwkvKiBEZXZpY2Ugc2l6ZSAqLworCXU2NAkJCXNpemU7CisKKwkvKiBMb2NhbCBkZXZpY2UgbmFtZSBmb3IgZXhwb3J0IGRldmljZXMgKi8KKwljaGFyCQkJbG9jYWxbRFNUX05BTUVMRU5dOworCisJLyogTmV0d29yayBzZXR1cCAqLworCXN0cnVjdCBkc3RfbmV0d29ya19jdGwJbmV0OworCisJLyogU3lzZnMgYml0cyB1c2UgdGhpcyAqLworCXN0cnVjdCBkZXZpY2UJCWRldmljZTsKK307CisKK3N0cnVjdCBkc3Rfbm9kZQoreworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZV9lbnRyeTsKKworCS8qIEhpLCBteSBuYW1lIGlzIHN0b3JlZCBoZXJlICovCisJY2hhcgkJCW5hbWVbRFNUX05BTUVMRU5dOworCS8qIE15IGNhY2hlIG5hbWUgaXMgc3RvcmVkIGhlcmUgKi8KKwljaGFyCQkJY2FjaGVfbmFtZVtEU1RfTkFNRUxFTl07CisKKwkvKiBCbG9jayBkZXZpY2UgYXR0YWNoZWQgdG8gZ2l2ZW4gbm9kZS4KKwkgKiBPbmx5IHZhbGlkIGZvciBleHBvcnRpbmcgbm9kZXMgKi8KKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlIAkqYmRldjsKKwkvKiBOZXR3b3JrIHN0YXRlIG1hY2hpbmUgZm9yIGdpdmVuIHBlZXIgKi8KKwlzdHJ1Y3QgZHN0X3N0YXRlCSpzdGF0ZTsKKworCS8qIEJsb2NrIElPIG1hY2hpbmVyeSAqLworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlCSpxdWV1ZTsKKwlzdHJ1Y3QgZ2VuZGlzawkJKmRpc2s7CisKKwkvKiBOdW1iZXIgb2YgdGhyZWFkcyBpbiBwcm9jZXNzaW5nIHBvb2wgKi8KKwlpbnQJCQl0aHJlYWRfbnVtOworCS8qIE1heGltdW0gbnVtYmVyIG9mIHBhZ2VzIGluIHNpbmdsZSBJTyAqLworCWludAkJCW1heF9wYWdlczsKKworCS8qIEknbSB0aGF0IGJpZyBpbiBieXRlcyAqLworCWxvZmZfdAkJCXNpemU7CisKKwkvKiBFeHBvcnRlZCB0byB1c2Vyc3BhY2Ugbm9kZSBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBkc3RfaW5mbwkJKmluZm87CisKKwkvKgorCSAqIFNlY3VyaXR5IGF0dHJpYnV0ZSBsaXN0LgorCSAqIFVzZWQgb25seSBieSBleHBvcnRpbmcgbm9kZSBjdXJyZW50bHkuCisJICovCisJc3RydWN0IGxpc3RfaGVhZAlzZWN1cml0eV9saXN0OworCXN0cnVjdCBtdXRleAkJc2VjdXJpdHlfbG9jazsKKworCS8qCisJICogV2hlbiB0aGlzIHVuZXJmbG93cyBiZWxvdyB6ZXJvLCB1bml2ZXJzaXR5IGNvbGxhcHNlcy4KKwkgKiBCdXQgdGhpcyB3aWxsIG5vdCBoYXBwZW4sIHNpbmNlIG5vZGUgd2lsbCBiZSBmcmVlZCwKKwkgKiB3aGVuIHJlZmVyZW5jZSBjb3VudGVyIHJlYWNoZXMgemVyby4KKwkgKi8KKwlhdG9taWNfdAkJcmVmY250OworCisJLyogSG93IHByZWNpc2VseSBzaG91bGQgSSBiZSBzdGFydGVkPyAqLworCWludCAJCQkoKnN0YXJ0KShzdHJ1Y3QgZHN0X25vZGUgKik7CisKKwkvKiBDcnlwdG8gY2FwYWJpbGl0aWVzICovCisJc3RydWN0IGRzdF9jcnlwdG9fY3RsCWNyeXB0bzsKKwl1OAkJCSpoYXNoX2tleTsKKwl1OAkJCSpjaXBoZXJfa2V5OworCisJLyogUG9vbCBvZiBwcm9jZXNzaW5nIHRocmVhZCAqLworCXN0cnVjdCB0aHJlYWRfcG9vbAkqcG9vbDsKKworCS8qIFRyYW5zYWN0aW9uIElEcyBsaXZlIGhlcmUgKi8KKwlhdG9taWNfbG9uZ190CQlnZW47CisKKwkvKgorCSAqIEhvdyBmcmVxdWVudGx5IGFuZCBob3cgbWFueSB0aW1lcyB0cmFuc2FjdGlvbgorCSAqIHRyZWUgc2hvdWxkIGJlIHNjYW5uZWQgdG8gZHJvcCBzdGFsZSBvYmplY3RzLgorCSAqLworCWxvbmcJCQl0cmFuc19zY2FuX3RpbWVvdXQ7CisJaW50CQkJdHJhbnNfbWF4X3JldHJpZXM7CisKKwkvKiBTbWFsbCBnbm9tZXMgbGl2ZSBoZXJlICovCisJc3RydWN0IHJiX3Jvb3QJCXRyYW5zX3Jvb3Q7CisJc3RydWN0IG11dGV4CQl0cmFuc19sb2NrOworCisJLyoKKwkgKiBUcmFuc2FjdGlvbiBjYWNoZS9tZW1vcnkgcG9vbC4KKwkgKiBJdCBpcyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gbm90IG9ubHkgdHJhbnNhY3Rpb24KKwkgKiBpdHNlbGYsIGJ1dCBhZGRpdGlvbmFsIGNyeXB0byBkYXRhIChkaWdlc3QvaG1hYykuCisJICovCisJc3RydWN0IGttZW1fY2FjaGUJKnRyYW5zX2NhY2hlOworCW1lbXBvb2xfdAkJKnRyYW5zX3Bvb2w7CisKKwkvKiBUaGlzIGVudGl0eSBzY2FucyB0cmFuc2FjdGlvbiB0cmVlICovCisJc3RydWN0IGRlbGF5ZWRfd29yayAJdHJhbnNfd29yazsKKworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7Cit9OworCisvKiBLZXJuZWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNlY3VyaXR5IGF0dHJpYnV0ZSAqLworc3RydWN0IGRzdF9zZWN1cmUKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNlY19lbnRyeTsKKwlzdHJ1Y3QgZHN0X3NlY3VyZV91c2VyCXNlYzsKK307CisKK2ludCBkc3RfcHJvY2Vzc19iaW8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pOworCitpbnQgZHN0X25vZGVfaW5pdF9jb25uZWN0ZWQoc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgZHN0X25ldHdvcmtfY3RsICpyKTsKK2ludCBkc3Rfbm9kZV9pbml0X2xpc3RlbmVkKHN0cnVjdCBkc3Rfbm9kZSAqbiwgc3RydWN0IGRzdF9leHBvcnRfY3RsICpsZSk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRzdF9zdGF0ZSAqZHN0X3N0YXRlX2dldChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwlCVUdfT04oYXRvbWljX3JlYWQoJnN0LT5yZWZjbnQpID09IDApOworCWF0b21pY19pbmMoJnN0LT5yZWZjbnQpOworCXJldHVybiBzdDsKK30KKwordm9pZCBkc3Rfc3RhdGVfcHV0KHN0cnVjdCBkc3Rfc3RhdGUgKnN0KTsKKworc3RydWN0IGRzdF9zdGF0ZSAqZHN0X3N0YXRlX2FsbG9jKHN0cnVjdCBkc3Rfbm9kZSAqbik7CitpbnQgZHN0X3N0YXRlX3NvY2tldF9jcmVhdGUoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOwordm9pZCBkc3Rfc3RhdGVfc29ja2V0X3JlbGVhc2Uoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOworCit2b2lkIGRzdF9zdGF0ZV9leGl0X2Nvbm5lY3RlZChzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7CisKK2ludCBkc3Rfc3RhdGVfc2NoZWR1bGVfcmVjZWl2ZXIoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOworCit2b2lkIGRzdF9kdW1wX2FkZHIoc3RydWN0IHNvY2tldCAqc2ssIHN0cnVjdCBzb2NrYWRkciAqc2EsIGNoYXIgKnN0cik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc3Rfc3RhdGVfbG9jayhzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwltdXRleF9sb2NrKCZzdC0+c3RhdGVfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc3Rfc3RhdGVfdW5sb2NrKHN0cnVjdCBkc3Rfc3RhdGUgKnN0KQoreworCW11dGV4X3VubG9jaygmc3QtPnN0YXRlX2xvY2spOworfQorCit2b2lkIGRzdF9wb2xsX2V4aXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOworaW50IGRzdF9wb2xsX2luaXQoc3RydWN0IGRzdF9zdGF0ZSAqc3QpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkc3Rfc3RhdGVfcG9sbChzdHJ1Y3QgZHN0X3N0YXRlICpzdCkKK3sKKwl1bnNpZ25lZCBpbnQgcmV2ZW50cyA9IFBPTExIVVAgfCBQT0xMRVJSOworCisJZHN0X3N0YXRlX2xvY2soc3QpOworCWlmIChzdC0+c29ja2V0KQorCQlyZXZlbnRzID0gc3QtPnNvY2tldC0+b3BzLT5wb2xsKE5VTEwsIHN0LT5zb2NrZXQsIE5VTEwpOworCWRzdF9zdGF0ZV91bmxvY2soc3QpOworCisJcmV0dXJuIHJldmVudHM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRzdF90aHJlYWRfc2V0dXAodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkc3Rfbm9kZV9wdXQoc3RydWN0IGRzdF9ub2RlICpuKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHN0X25vZGUgKmRzdF9ub2RlX2dldChzdHJ1Y3QgZHN0X25vZGUgKm4pCit7CisJYXRvbWljX2luYygmbi0+cmVmY250KTsKKwlyZXR1cm4gbjsKK30KKworaW50IGRzdF9kYXRhX3JlY3Yoc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplKTsKK2ludCBkc3RfcmVjdl9jZGF0YShzdHJ1Y3QgZHN0X3N0YXRlICpzdCwgdm9pZCAqY2RhdGEpOworaW50IGRzdF9kYXRhX3NlbmRfaGVhZGVyKHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCXZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgbW9yZSk7CisKK2ludCBkc3Rfc2VuZF9iaW8oc3RydWN0IGRzdF9zdGF0ZSAqc3QsIHN0cnVjdCBkc3RfY21kICpjbWQsIHN0cnVjdCBiaW8gKmJpbyk7CisKK2ludCBkc3RfcHJvY2Vzc19pbyhzdHJ1Y3QgZHN0X3N0YXRlICpzdCk7CitpbnQgZHN0X2V4cG9ydF9jcnlwdG8oc3RydWN0IGRzdF9ub2RlICpuLCBzdHJ1Y3QgYmlvICpiaW8pOworaW50IGRzdF9leHBvcnRfc2VuZF9iaW8oc3RydWN0IGJpbyAqYmlvKTsKK2ludCBkc3Rfc3RhcnRfZXhwb3J0KHN0cnVjdCBkc3Rfbm9kZSAqbik7CisKK2ludCBfX2luaXQgZHN0X2V4cG9ydF9pbml0KHZvaWQpOwordm9pZCBkc3RfZXhwb3J0X2V4aXQodm9pZCk7CisKKy8qIFByaXZhdGUgc3RydWN0dXJlIGZvciBleHBvcnQgYmxvY2sgSU8gcmVxdWVzdHMgKi8KK3N0cnVjdCBkc3RfZXhwb3J0X3ByaXYKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlyZXF1ZXN0X2VudHJ5OworCXN0cnVjdCBkc3Rfc3RhdGUJCSpzdGF0ZTsKKwlzdHJ1Y3QgYmlvCQkJKmJpbzsKKwlzdHJ1Y3QgZHN0X2NtZAkJCWNtZDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc3RfdHJhbnNfZ2V0KHN0cnVjdCBkc3RfdHJhbnMgKnQpCit7CisJYXRvbWljX2luYygmdC0+cmVmY250KTsKK30KKworc3RydWN0IGRzdF90cmFucyAqZHN0X3RyYW5zX3NlYXJjaChzdHJ1Y3QgZHN0X25vZGUgKm5vZGUsIGRzdF9nZW5fdCBnZW4pOworaW50IGRzdF90cmFuc19yZW1vdmUoc3RydWN0IGRzdF90cmFucyAqdCk7CitpbnQgZHN0X3RyYW5zX3JlbW92ZV9ub2xvY2soc3RydWN0IGRzdF90cmFucyAqdCk7Cit2b2lkIGRzdF90cmFuc19wdXQoc3RydWN0IGRzdF90cmFucyAqdCk7CisKKy8qCisgKiBDb252ZXJ0IGJpbyBpbnRvIG5ldHdvcmsgY29tbWFuZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRzdF9iaW9fdG9fY21kKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGRzdF9jbWQgKmNtZCwKKwkJdTMyIGNvbW1hbmQsIHU2NCBpZCkKK3sKKwljbWQtPmNtZCA9IGNvbW1hbmQ7CisJY21kLT5mbGFncyA9IChiaW8tPmJpX2ZsYWdzIDw8IEJJT19QT09MX0JJVFMpID4+IEJJT19QT09MX0JJVFM7CisJY21kLT5ydyA9IGJpby0+Ymlfcnc7CisJY21kLT5zaXplID0gYmlvLT5iaV9zaXplOworCWNtZC0+Y3NpemUgPSAwOworCWNtZC0+aWQgPSBpZDsKKwljbWQtPnNlY3RvciA9IGJpby0+Ymlfc2VjdG9yOworfTsKKworaW50IGRzdF90cmFuc19zZW5kKHN0cnVjdCBkc3RfdHJhbnMgKnQpOworaW50IGRzdF90cmFuc19jcnlwdG8oc3RydWN0IGRzdF90cmFucyAqdCk7CisKK2ludCBkc3Rfbm9kZV9jcnlwdG9faW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4sIHN0cnVjdCBkc3RfY3J5cHRvX2N0bCAqY3RsKTsKK3ZvaWQgZHN0X25vZGVfY3J5cHRvX2V4aXQoc3RydWN0IGRzdF9ub2RlICpuKTsKKworc3RhdGljIGlubGluZSBpbnQgZHN0X25lZWRfY3J5cHRvKHN0cnVjdCBkc3Rfbm9kZSAqbikKK3sKKwlzdHJ1Y3QgZHN0X2NyeXB0b19jdGwgKmMgPSAmbi0+Y3J5cHRvOworCS8qCisJICogTG9naWNhbCBPUiBpcyBhcHByb3ByaWF0ZSBoZXJlLCBidXQgYm9vbGVhbiBvbmUgcHJvZHVjZXMKKwkgKiBtb3JlIG9wdGltYWwgY29kZSwgc28gaXQgaXMgdXNlZCBpbnN0ZWFkLgorCSAqLworCXJldHVybiAoYy0+aGFzaF9hbGdvWzBdIHwgYy0+Y2lwaGVyX2FsZ29bMF0pOworfQorCitpbnQgZHN0X25vZGVfdHJhbnNfaW5pdChzdHJ1Y3QgZHN0X25vZGUgKm4sIHVuc2lnbmVkIGludCBzaXplKTsKK3ZvaWQgZHN0X25vZGVfdHJhbnNfZXhpdChzdHJ1Y3QgZHN0X25vZGUgKm4pOworCisvKgorICogUG9vbCBvZiB0aHJlYWRzLgorICogUmVhZHkgbGlzdCBjb250YWlucyB0aHJlYWRzIGN1cnJlbnRseSBmcmVlIHRvIGJlIHVzZWQsCisgKiBhY3RpdmUgb25lIGNvbnRhaW5zIHRocmVhZHMgd2l0aCBzb21lIHdvcmsgc2NoZWR1bGVkIGZvciB0aGVtLgorICogQ2FsbGVyIGNhbiB3YWl0IGluIGdpdmVuIHF1ZXVlIHdoZW4gdGhyZWFkIGlzIHJlYWR5LgorICovCitzdHJ1Y3QgdGhyZWFkX3Bvb2wKK3sKKwlpbnQJCQl0aHJlYWRfbnVtOworCXN0cnVjdCBtdXRleAkJdGhyZWFkX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAlyZWFkeV9saXN0LCBhY3RpdmVfbGlzdDsKKworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7Cit9OworCit2b2lkIHRocmVhZF9wb29sX2RlbF93b3JrZXIoc3RydWN0IHRocmVhZF9wb29sICpwKTsKK3ZvaWQgdGhyZWFkX3Bvb2xfZGVsX3dvcmtlcl9pZChzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsIHVuc2lnbmVkIGludCBpZCk7CitpbnQgdGhyZWFkX3Bvb2xfYWRkX3dvcmtlcihzdHJ1Y3QgdGhyZWFkX3Bvb2wgKnAsCisJCWNoYXIgKm5hbWUsCisJCXVuc2lnbmVkIGludCBpZCwKKwkJdm9pZCAqKCogaW5pdCkodm9pZCAqZGF0YSksCisJCXZvaWQgKCogY2xlYW51cCkodm9pZCAqZGF0YSksCisJCXZvaWQgKmRhdGEpOworCit2b2lkIHRocmVhZF9wb29sX2Rlc3Ryb3koc3RydWN0IHRocmVhZF9wb29sICpwKTsKK3N0cnVjdCB0aHJlYWRfcG9vbCAqdGhyZWFkX3Bvb2xfY3JlYXRlKGludCBudW0sIGNoYXIgKm5hbWUsCisJCXZvaWQgKigqIGluaXQpKHZvaWQgKmRhdGEpLAorCQl2b2lkICgqIGNsZWFudXApKHZvaWQgKmRhdGEpLAorCQl2b2lkICpkYXRhKTsKKworaW50IHRocmVhZF9wb29sX3NjaGVkdWxlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKKwkJaW50ICgqIHNldHVwKSh2b2lkICpzdG9yZWRfcHJpdmF0ZSwgdm9pZCAqc2V0dXBfZGF0YSksCisJCWludCAoKiBhY3Rpb24pKHZvaWQgKnN0b3JlZF9wcml2YXRlLCB2b2lkICpzZXR1cF9kYXRhKSwKKwkJdm9pZCAqc2V0dXBfZGF0YSwgbG9uZyB0aW1lb3V0KTsKK2ludCB0aHJlYWRfcG9vbF9zY2hlZHVsZV9wcml2YXRlKHN0cnVjdCB0aHJlYWRfcG9vbCAqcCwKKwkJaW50ICgqIHNldHVwKSh2b2lkICpwcml2YXRlLCB2b2lkICpkYXRhKSwKKwkJaW50ICgqIGFjdGlvbikodm9pZCAqcHJpdmF0ZSwgdm9pZCAqZGF0YSksCisJCXZvaWQgKmRhdGEsIGxvbmcgdGltZW91dCwgdm9pZCAqaWQpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9fRFNUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHdfZG1hYy5oIGIvaW5jbHVkZS9saW51eC9kd19kbWFjLmgKaW5kZXggZDc5N2RkZS4uYzhhYWQ3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kd19kbWFjLmgKKysrIGIvaW5jbHVkZS9saW51eC9kd19kbWFjLmgKQEAgLTc0LDQgKzc0LDIzIEBACiAjZGVmaW5lIERXQ19DRkdMX0hTX0RTVF9QT0wJKDEgPDwgMTgpCS8qIGRzdCBoYW5kc2hha2UgYWN0aXZlIGxvdyAqLwogI2RlZmluZSBEV0NfQ0ZHTF9IU19TUkNfUE9MCSgxIDw8IDE5KQkvKiBzcmMgaGFuZHNoYWtlIGFjdGl2ZSBsb3cgKi8KIAorLyogRE1BIEFQSSBleHRlbnNpb25zICovCitzdHJ1Y3QgZHdfY3ljbGljX2Rlc2MgeworCXN0cnVjdCBkd19kZXNjCSoqZGVzYzsKKwl1bnNpZ25lZCBsb25nCXBlcmlvZHM7CisJdm9pZAkJKCpwZXJpb2RfY2FsbGJhY2spKHZvaWQgKnBhcmFtKTsKKwl2b2lkCQkqcGVyaW9kX2NhbGxiYWNrX3BhcmFtOworfTsKKworc3RydWN0IGR3X2N5Y2xpY19kZXNjICpkd19kbWFfY3ljbGljX3ByZXAoc3RydWN0IGRtYV9jaGFuICpjaGFuLAorCQlkbWFfYWRkcl90IGJ1Zl9hZGRyLCBzaXplX3QgYnVmX2xlbiwgc2l6ZV90IHBlcmlvZF9sZW4sCisJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Cit2b2lkIGR3X2RtYV9jeWNsaWNfZnJlZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworaW50IGR3X2RtYV9jeWNsaWNfc3RhcnQoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKK3ZvaWQgZHdfZG1hX2N5Y2xpY19zdG9wKHN0cnVjdCBkbWFfY2hhbiAqY2hhbik7CisKK2RtYV9hZGRyX3QgZHdfZG1hX2dldF9zcmNfYWRkcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pOworCitkbWFfYWRkcl90IGR3X2RtYV9nZXRfZHN0X2FkZHIoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKKwogI2VuZGlmIC8qIERXX0RNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldmVudGZkLmggYi9pbmNsdWRlL2xpbnV4L2V2ZW50ZmQuaAppbmRleCBhNjY3NjM3YjUuLmY0NWE4YWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXZlbnRmZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXZlbnRmZC5oCkBAIC0xMywxMCArMTMsMjAgQEAKIC8qIEZvciBPX0NMT0VYRUMgYW5kIE9fTk9OQkxPQ0sgKi8KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogCi0vKiBGbGFncyBmb3IgZXZlbnRmZDIuICAqLworLyoKKyAqIENBUkVGVUw6IENoZWNrIGluY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaCB3aGVuIGRlZmluaW5nCisgKiBuZXcgZmxhZ3MsIHNpbmNlIHRoZXkgbWlnaHQgY29sbGlkZSB3aXRoIE9fKiBvbmVzLiBXZSB3YW50CisgKiB0byByZS11c2UgT18qIGZsYWdzIHRoYXQgY291bGRuJ3QgcG9zc2libHkgaGF2ZSBhIG1lYW5pbmcKKyAqIGZyb20gZXZlbnRmZCwgaW4gb3JkZXIgdG8gbGVhdmUgYSBmcmVlIGRlZmluZS1zcGFjZSBmb3IKKyAqIHNoYXJlZCBPXyogZmxhZ3MuCisgKi8KKyNkZWZpbmUgRUZEX1NFTUFQSE9SRSAoMSA8PCAwKQogI2RlZmluZSBFRkRfQ0xPRVhFQyBPX0NMT0VYRUMKICNkZWZpbmUgRUZEX05PTkJMT0NLIE9fTk9OQkxPQ0sKIAorI2RlZmluZSBFRkRfU0hBUkVEX0ZDTlRMX0ZMQUdTIChPX0NMT0VYRUMgfCBPX05PTkJMT0NLKQorI2RlZmluZSBFRkRfRkxBR1NfU0VUIChFRkRfU0hBUkVEX0ZDTlRMX0ZMQUdTIHwgRUZEX1NFTUFQSE9SRSkKKwogc3RydWN0IGZpbGUgKmV2ZW50ZmRfZmdldChpbnQgZmQpOwogaW50IGV2ZW50ZmRfc2lnbmFsKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKaW5kZXggZGQ0OTViOC4uNjM0YTVlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKQEAgLTIwOCw2ICsyMDgsNyBAQAogI2RlZmluZSBFWFQzX1NUQVRFX0pEQVRBCQkweDAwMDAwMDAxIC8qIGpvdXJuYWxlZCBkYXRhIGV4aXN0cyAqLwogI2RlZmluZSBFWFQzX1NUQVRFX05FVwkJCTB4MDAwMDAwMDIgLyogaW5vZGUgaXMgbmV3bHkgY3JlYXRlZCAqLwogI2RlZmluZSBFWFQzX1NUQVRFX1hBVFRSCQkweDAwMDAwMDA0IC8qIGhhcyBpbi1pbm9kZSB4YXR0cnMgKi8KKyNkZWZpbmUgRVhUM19TVEFURV9GTFVTSF9PTl9DTE9TRQkweDAwMDAwMDA4CiAKIC8qIFVzZWQgdG8gcGFzcyBncm91cCBkZXNjcmlwdG9yIGRhdGEgd2hlbiBvbmxpbmUgcmVzaXplIGlzIGRvbmUgKi8KIHN0cnVjdCBleHQzX25ld19ncm91cF9pbnB1dCB7CkBAIC04OTMsOSArODk0LDggQEAKIAkJICAgICAgIHU2NCBzdGFydCwgdTY0IGxlbik7CiAKIC8qIGlvY3RsLmMgKi8KLWV4dGVybiBpbnQgZXh0M19pb2N0bCAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIGxvbmcgZXh0M19jb21wYXRfaW9jdGwgKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gbG9uZyBleHQzX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gbG9uZyBleHQzX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCiAvKiBuYW1laS5jICovCiBleHRlcm4gaW50IGV4dDNfb3JwaGFuX2FkZChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggMzE1MjdlMS4uZjU2M2M1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtMTIzLDYgKzEyMyw3IEBACiAjZGVmaW5lIEZCX0FDQ0VMX1RSSURFTlRfM0RJTUFHRSA1MQkvKiBUcmlkZW50IDNESW1hZ2UJCSovCiAjZGVmaW5lIEZCX0FDQ0VMX1RSSURFTlRfQkxBREUzRCA1MgkvKiBUcmlkZW50IEJsYWRlM0QJCSovCiAjZGVmaW5lIEZCX0FDQ0VMX1RSSURFTlRfQkxBREVYUCA1MwkvKiBUcmlkZW50IEJsYWRlWFAJCSovCisjZGVmaW5lIEZCX0FDQ0VMX0NJUlJVU19BTFBJTkUgICA1MwkvKiBDaXJydXMgTG9naWMgNTQzeC81NDR4LzU0ODAJKi8KICNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDcwIDkwCS8qIE5lb01hZ2ljIE5NMjA3MCAgICAgICAgICAgICAgKi8KICNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDkwIDkxCS8qIE5lb01hZ2ljIE5NMjA5MCAgICAgICAgICAgICAgKi8KICNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDkzIDkyCS8qIE5lb01hZ2ljIE5NMjA5MyAgICAgICAgICAgICAgKi8KQEAgLTk2MCwxNSArOTYxLDcgQEAKIGV4dGVybiBpbnQgbnVtX3JlZ2lzdGVyZWRfZmI7CiBleHRlcm4gc3RydWN0IGNsYXNzICpmYl9jbGFzczsKIAotc3RhdGljIGlubGluZSBpbnQgbG9ja19mYl9pbmZvKHN0cnVjdCBmYl9pbmZvICppbmZvKQotewotCW11dGV4X2xvY2soJmluZm8tPmxvY2spOwotCWlmICghaW5mby0+ZmJvcHMpIHsKLQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQorZXh0ZXJuIGludCBsb2NrX2ZiX2luZm8oc3RydWN0IGZiX2luZm8gKmluZm8pOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2ZiX2luZm8oc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggODdlN2JmYy4uYTA5ZTE3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMTc0MSw2ICsxNzQxLDggQEAKIAogZXh0ZXJuIGludCB2ZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGtzdGF0ZnMgKik7CiAKK2V4dGVybiBpbnQgY3VycmVudF91bWFzayh2b2lkKTsKKwogLyogL3N5cy9mcyAqLwogZXh0ZXJuIHN0cnVjdCBrb2JqZWN0ICpmc19rb2JqOwogCkBAIC0xODc4LDEyICsxODgwLDI1IEBACiBleHRlcm4gdm9pZCBpbnZhbGlkYXRlX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKIGV4dGVybiBpbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKIGV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmZyZWV6ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7CitleHRlcm4gdm9pZCBlbWVyZ2VuY3lfdGhhd19hbGwodm9pZCk7CiBleHRlcm4gaW50IHRoYXdfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGV4dGVybiBpbnQgZnN5bmNfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogZXh0ZXJuIGludCBmc3luY19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiBleHRlcm4gaW50IGZzeW5jX25vX3N1cGVyKHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGJkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7fQorc3RhdGljIGlubGluZSBpbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpIHt9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN1cGVyX2Jsb2NrICpmcmVlemVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpzYikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdGhhd19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9jaHJfZm9wczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmggYi9pbmNsdWRlL2xpbnV4L2ZzX3N0cnVjdC5oCmluZGV4IDE4YjQ2N2QuLjc4YTA1YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaApAQCAtNCwxMiArNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BhdGguaD4KIAogc3RydWN0IGZzX3N0cnVjdCB7Ci0JYXRvbWljX3QgY291bnQ7CS8qIFRoaXMgdXNhZ2UgY291bnQgaXMgdXNlZCBieSBjaGVja191bnNhZmVfZXhlYygpIGZvcgotCQkJICogc2VjdXJpdHkgY2hlY2tpbmcgcHVycG9zZXMgLSB0aGVyZWZvcmUgaXQgbWF5IG5vdCBiZQotCQkJICogaW5jcmVtZW50ZWQsIGV4Y2VwdCBieSBjbG9uZShDTE9ORV9GUykuCi0JCQkgKi8KKwlpbnQgdXNlcnM7CiAJcndsb2NrX3QgbG9jazsKIAlpbnQgdW1hc2s7CisJaW50IGluX2V4ZWM7CiAJc3RydWN0IHBhdGggcm9vdCwgcHdkOwogfTsKIApAQCAtMTksNiArMTcsOCBAQAogZXh0ZXJuIHZvaWQgc2V0X2ZzX3Jvb3Qoc3RydWN0IGZzX3N0cnVjdCAqLCBzdHJ1Y3QgcGF0aCAqKTsKIGV4dGVybiB2b2lkIHNldF9mc19wd2Qoc3RydWN0IGZzX3N0cnVjdCAqLCBzdHJ1Y3QgcGF0aCAqKTsKIGV4dGVybiBzdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICopOwotZXh0ZXJuIHZvaWQgcHV0X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgZnJlZV9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqKTsKK2V4dGVybiB2b2lkIGRhZW1vbml6ZV9mc19zdHJ1Y3Qodm9pZCk7CitleHRlcm4gaW50IHVuc2hhcmVfZnNfc3RydWN0KHZvaWQpOwogCiAjZW5kaWYgLyogX0xJTlVYX0ZTX1NUUlVDVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUtY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZnNjYWNoZS1jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZDM1MzIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzY2FjaGUtY2FjaGUuaApAQCAtMCwwICsxLDUwNSBAQAorLyogR2VuZXJhbCBmaWxlc3lzdGVtIGNhY2hpbmcgYmFja2luZyBjYWNoZSBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBOT1RFISEhIFNlZToKKyAqCisgKglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvYmFja2VuZC1hcGkudHh0CisgKgorICogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGNhY2hlIGJhY2tlbmQgaW50ZXJmYWNlIGRlY2xhcmVkIGhlcmUuCisgKi8KKworI2lmbmRlZiBfTElOVVhfRlNDQUNIRV9DQUNIRV9ICisjZGVmaW5lIF9MSU5VWF9GU0NBQ0hFX0NBQ0hFX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZzY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3Nsb3ctd29yay5oPgorCisjZGVmaW5lIE5SX01BWENBQ0hFUyBCSVRTX1BFUl9MT05HCisKK3N0cnVjdCBmc2NhY2hlX2NhY2hlOworc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzOworc3RydWN0IGZzY2FjaGVfb2JqZWN0Oworc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uOworCisvKgorICogY2FjaGUgdGFnIGRlZmluaXRpb24KKyAqLworc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CisJc3RydWN0IGZzY2FjaGVfY2FjaGUJKmNhY2hlOwkJLyogY2FjaGUgcmVmZXJyZWQgdG8gYnkgdGhpcyB0YWcgKi8KKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKyNkZWZpbmUgRlNDQUNIRV9UQUdfUkVTRVJWRUQJMAkJLyogVCBpZiB0YWcgaXMgcmVzZXJ2ZWQgZm9yIGEgY2FjaGUgKi8KKwlhdG9taWNfdAkJdXNhZ2U7CisJY2hhcgkJCW5hbWVbMF07CS8qIHRhZyBuYW1lICovCit9OworCisvKgorICogY2FjaGUgZGVmaW5pdGlvbgorICovCitzdHJ1Y3QgZnNjYWNoZV9jYWNoZSB7CisJY29uc3Qgc3RydWN0IGZzY2FjaGVfY2FjaGVfb3BzICpvcHM7CisJc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICp0YWc7CQkvKiB0YWcgcmVwcmVzZW50aW5nIHRoaXMgY2FjaGUgKi8KKwlzdHJ1Y3Qga29iamVjdAkJKmtvYmo7CQkvKiBzeXN0ZW0gcmVwcmVzZW50YXRpb24gb2YgdGhpcyBjYWNoZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJbGluazsJCS8qIGxpbmsgaW4gbGlzdCBvZiBjYWNoZXMgKi8KKwlzaXplX3QJCQltYXhfaW5kZXhfc2l6ZTsJLyogbWF4aW11bSBzaXplIG9mIGluZGV4IGRhdGEgKi8KKwljaGFyCQkJaWRlbnRpZmllclszNl07CS8qIGNhY2hlIGxhYmVsICovCisKKwkvKiBub2RlIG1hbmFnZW1lbnQgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJb3BfZ2M7CQkvKiBvcGVyYXRpb24gZ2FyYmFnZSBjb2xsZWN0b3IgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCW9iamVjdF9saXN0OwkvKiBsaXN0IG9mIGRhdGEvaW5kZXggb2JqZWN0cyAqLworCXN0cnVjdCBsaXN0X2hlYWQJb3BfZ2NfbGlzdDsJLyogbGlzdCBvZiBvcHMgdG8gYmUgZGVsZXRlZCAqLworCXNwaW5sb2NrX3QJCW9iamVjdF9saXN0X2xvY2s7CisJc3BpbmxvY2tfdAkJb3BfZ2NfbGlzdF9sb2NrOworCWF0b21pY190CQlvYmplY3RfY291bnQ7CS8qIG5vLiBvZiBsaXZlIG9iamVjdHMgaW4gdGhpcyBjYWNoZSAqLworCXN0cnVjdCBmc2NhY2hlX29iamVjdAkqZnNkZWY7CQkvKiBvYmplY3QgZm9yIHRoZSBmc2RlZiBpbmRleCAqLworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworI2RlZmluZSBGU0NBQ0hFX0lPRVJST1IJCTAJLyogY2FjaGUgc3RvcHBlZCBvbiBJL08gZXJyb3IgKi8KKyNkZWZpbmUgRlNDQUNIRV9DQUNIRV9XSVRIRFJBV04JMQkvKiBjYWNoZSBoYXMgYmVlbiB3aXRoZHJhd24gKi8KK307CisKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBmc2NhY2hlX2NhY2hlX2NsZWFyZWRfd3E7CisKKy8qCisgKiBvcGVyYXRpb24gdG8gYmUgYXBwbGllZCB0byBhIGNhY2hlIG9iamVjdAorICogLSByZXRyaWV2YWwgaW5pdGlhdGlvbiBvcGVyYXRpb25zIGFyZSBkb25lIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9jZXNzCisgKiAgIHRoYXQgaXNzdWVkIHRoZW0sIGFuZCBub3QgaW4gYW4gYXN5bmMgdGhyZWFkIHBvb2wKKyAqLwordHlwZWRlZiB2b2lkICgqZnNjYWNoZV9vcGVyYXRpb25fcmVsZWFzZV90KShzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKTsKK3R5cGVkZWYgdm9pZCAoKmZzY2FjaGVfb3BlcmF0aW9uX3Byb2Nlc3Nvcl90KShzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wKTsKKworc3RydWN0IGZzY2FjaGVfb3BlcmF0aW9uIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCBmYXN0X3dvcms7CS8qIHJlY29yZCBmb3IgZmFzdCBvcHMgKi8KKwkJc3RydWN0IHNsb3dfd29yayBzbG93X3dvcms7CS8qIHJlY29yZCBmb3IgKHZlcnkpIHNsb3cgb3BzICovCisJfTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXBlbmRfbGluazsJLyogbGluayBpbiBvYmplY3QtPnBlbmRpbmdfb3BzICovCisJc3RydWN0IGZzY2FjaGVfb2JqZWN0CSpvYmplY3Q7CS8qIG9iamVjdCB0byBiZSBvcGVyYXRlZCB1cG9uICovCisKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKyNkZWZpbmUgRlNDQUNIRV9PUF9UWVBFCQkweDAwMGYJLyogb3BlcmF0aW9uIHR5cGUgKi8KKyNkZWZpbmUgRlNDQUNIRV9PUF9GQVNUCQkweDAwMDEJLyogLSBmYXN0IG9wLCBwcm9jZXNzb3IgbWF5IG5vdCBzbGVlcCBmb3IgZGlzayAqLworI2RlZmluZSBGU0NBQ0hFX09QX1NMT1cJCTB4MDAwMgkvKiAtICh2ZXJ5KSBzbG93IG9wLCBwcm9jZXNzb3IgbWF5IHNsZWVwIGZvciBkaXNrICovCisjZGVmaW5lIEZTQ0FDSEVfT1BfTVlUSFJFQUQJMHgwMDAzCS8qIC0gcHJvY2Vzc2luZyBpcyBkb25lIGJlIGlzc3VpbmcgdGhyZWFkLCBub3QgcG9vbCAqLworI2RlZmluZSBGU0NBQ0hFX09QX1dBSVRJTkcJNAkvKiBjbGVhcmVkIHdoZW4gb3AgaXMgd29rZW4gKi8KKyNkZWZpbmUgRlNDQUNIRV9PUF9FWENMVVNJVkUJNQkvKiBleGNsdXNpdmUgb3AsIG90aGVyIG9wcyBtdXN0IHdhaXQgKi8KKyNkZWZpbmUgRlNDQUNIRV9PUF9ERUFECQk2CS8qIG9wIGlzIG5vdyBkZWFkICovCisKKwlhdG9taWNfdAkJdXNhZ2U7CisJdW5zaWduZWQJCWRlYnVnX2lkOwkvKiBkZWJ1Z2dpbmcgSUQgKi8KKworCS8qIG9wZXJhdGlvbiBwcm9jZXNzb3IgY2FsbGJhY2sKKwkgKiAtIGNhbiBiZSBOVUxMIGlmIEZTQ0FDSEVfT1BfV0FJVElORyBpcyBnb2luZyB0byBiZSB1c2VkIHRvIHBlcmZvcm0KKwkgKiAgIHRoZSBvcCBpbiBhIG5vbi1wb29sIHRocmVhZCAqLworCWZzY2FjaGVfb3BlcmF0aW9uX3Byb2Nlc3Nvcl90IHByb2Nlc3NvcjsKKworCS8qIG9wZXJhdGlvbiByZWxlYXNlciAqLworCWZzY2FjaGVfb3BlcmF0aW9uX3JlbGVhc2VfdCByZWxlYXNlOworfTsKKworZXh0ZXJuIGF0b21pY190IGZzY2FjaGVfb3BfZGVidWdfaWQ7CitleHRlcm4gY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgZnNjYWNoZV9vcF9zbG93X3dvcmtfb3BzOworCitleHRlcm4gdm9pZCBmc2NhY2hlX2VucXVldWVfb3BlcmF0aW9uKHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqKTsKK2V4dGVybiB2b2lkIGZzY2FjaGVfcHV0X29wZXJhdGlvbihzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKik7CisKKy8qKgorICogZnNjYWNoZV9vcGVyYXRpb25faW5pdCAtIERvIGJhc2ljIGluaXRpYWxpc2F0aW9uIG9mIGFuIG9wZXJhdGlvbgorICogQG9wOiBUaGUgb3BlcmF0aW9uIHRvIGluaXRpYWxpc2UKKyAqIEByZWxlYXNlOiBUaGUgcmVsZWFzZSBmdW5jdGlvbiB0byBhc3NpZ24KKyAqCisgKiBEbyBiYXNpYyBpbml0aWFsaXNhdGlvbiBvZiBhbiBvcGVyYXRpb24uICBUaGUgY2FsbGVyIG11c3Qgc3RpbGwgc2V0IGZsYWdzLAorICogb2JqZWN0LCBlaXRoZXIgZmFzdF93b3JrIG9yIHNsb3dfd29yayBpZiBuZWNlc3NhcnksIGFuZCBwcm9jZXNzb3IgaWYgbmVlZGVkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9vcGVyYXRpb25faW5pdChzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gKm9wLAorCQkJCQkgIGZzY2FjaGVfb3BlcmF0aW9uX3JlbGVhc2VfdCByZWxlYXNlKQoreworCWF0b21pY19zZXQoJm9wLT51c2FnZSwgMSk7CisJb3AtPmRlYnVnX2lkID0gYXRvbWljX2luY19yZXR1cm4oJmZzY2FjaGVfb3BfZGVidWdfaWQpOworCW9wLT5yZWxlYXNlID0gcmVsZWFzZTsKKwlJTklUX0xJU1RfSEVBRCgmb3AtPnBlbmRfbGluayk7Cit9CisKKy8qKgorICogZnNjYWNoZV9vcGVyYXRpb25faW5pdF9zbG93IC0gRG8gYWRkaXRpb25hbCBpbml0aWFsaXNhdGlvbiBvZiBhIHNsb3cgb3AKKyAqIEBvcDogVGhlIG9wZXJhdGlvbiB0byBpbml0aWFsaXNlCisgKiBAcHJvY2Vzc29yOiBUaGUgcHJvY2Vzc29yIGZ1bmN0aW9uIHRvIGFzc2lnbgorICoKKyAqIERvIGFkZGl0aW9uYWwgaW5pdGlhbGlzYXRpb24gb2YgYW4gb3BlcmF0aW9uIGFzIHJlcXVpcmVkIGZvciBzbG93IHdvcmsuCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZnNjYWNoZV9vcGVyYXRpb25faW5pdF9zbG93KHN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiAqb3AsCisJCQkJIGZzY2FjaGVfb3BlcmF0aW9uX3Byb2Nlc3Nvcl90IHByb2Nlc3NvcikKK3sKKwlvcC0+cHJvY2Vzc29yID0gcHJvY2Vzc29yOworCXNsb3dfd29ya19pbml0KCZvcC0+c2xvd193b3JrLCAmZnNjYWNoZV9vcF9zbG93X3dvcmtfb3BzKTsKK30KKworLyoKKyAqIGRhdGEgcmVhZCBvcGVyYXRpb24KKyAqLworc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsIHsKKwlzdHJ1Y3QgZnNjYWNoZV9vcGVyYXRpb24gb3A7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UJKm1hcHBpbmc7CS8qIG5ldGZzIHBhZ2VzICovCisJZnNjYWNoZV9yd19jb21wbGV0ZV90CWVuZF9pb19mdW5jOwkvKiBmdW5jdGlvbiB0byBjYWxsIG9uIEkvTyBjb21wbGV0aW9uICovCisJdm9pZAkJCSpjb250ZXh0OwkvKiBuZXRmcyByZWFkIGNvbnRleHQgKHBpbm5lZCkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXRvX2RvOwkJLyogbGlzdCBvZiB0aGluZ3MgdG8gYmUgZG9uZSBieSB0aGUgYmFja2VuZCAqLworCXVuc2lnbmVkIGxvbmcJCXN0YXJ0X3RpbWU7CS8qIHRpbWUgYXQgd2hpY2ggcmV0cmlldmFsIHN0YXJ0ZWQgKi8KK307CisKK3R5cGVkZWYgaW50ICgqZnNjYWNoZV9wYWdlX3JldHJpZXZhbF9mdW5jX3QpKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsCisJCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJCSAgICAgZ2ZwX3QgZ2ZwKTsKKwordHlwZWRlZiBpbnQgKCpmc2NhY2hlX3BhZ2VzX3JldHJpZXZhbF9mdW5jX3QpKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3AsCisJCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzLAorCQkJCQkgICAgICB1bnNpZ25lZCAqbnJfcGFnZXMsCisJCQkJCSAgICAgIGdmcF90IGdmcCk7CisKKy8qKgorICogZnNjYWNoZV9nZXRfcmV0cmlldmFsIC0gR2V0IGFuIGV4dHJhIHJlZmVyZW5jZSBvbiBhIHJldHJpZXZhbCBvcGVyYXRpb24KKyAqIEBvcDogVGhlIHJldHJpZXZhbCBvcGVyYXRpb24gdG8gZ2V0IGEgcmVmZXJlbmNlIG9uCisgKgorICogR2V0IGFuIGV4dHJhIHJlZmVyZW5jZSBvbiBhIHJldHJpZXZhbCBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqZnNjYWNoZV9nZXRfcmV0cmlldmFsKHN0cnVjdCBmc2NhY2hlX3JldHJpZXZhbCAqb3ApCit7CisJYXRvbWljX2luYygmb3AtPm9wLnVzYWdlKTsKKwlyZXR1cm4gb3A7Cit9CisKKy8qKgorICogZnNjYWNoZV9lbnF1ZXVlX3JldHJpZXZhbCAtIEVucXVldWUgYSByZXRyaWV2YWwgb3BlcmF0aW9uIGZvciBwcm9jZXNzaW5nCisgKiBAb3A6IFRoZSByZXRyaWV2YWwgb3BlcmF0aW9uIGFmZmVjdGVkCisgKgorICogRW5xdWV1ZSBhIHJldHJpZXZhbCBvcGVyYXRpb24gZm9yIHByb2Nlc3NpbmcgYnkgdGhlIEZTLUNhY2hlIHRocmVhZCBwb29sLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9lbnF1ZXVlX3JldHJpZXZhbChzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wKQoreworCWZzY2FjaGVfZW5xdWV1ZV9vcGVyYXRpb24oJm9wLT5vcCk7Cit9CisKKy8qKgorICogZnNjYWNoZV9wdXRfcmV0cmlldmFsIC0gRHJvcCBhIHJlZmVyZW5jZSB0byBhIHJldHJpZXZhbCBvcGVyYXRpb24KKyAqIEBvcDogVGhlIHJldHJpZXZhbCBvcGVyYXRpb24gYWZmZWN0ZWQKKyAqCisgKiBEcm9wIGEgcmVmZXJlbmNlIHRvIGEgcmV0cmlldmFsIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZzY2FjaGVfcHV0X3JldHJpZXZhbChzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wKQoreworCWZzY2FjaGVfcHV0X29wZXJhdGlvbigmb3AtPm9wKTsKK30KKworLyoKKyAqIGNhY2hlZCBwYWdlIHN0b3JhZ2Ugd29yayBpdGVtCisgKiAtIHVzZWQgdG8gZG8gdGhyZWUgdGhpbmdzOgorICogICAtIGJhdGNoIHdyaXRlcyB0byB0aGUgY2FjaGUKKyAqICAgLSBkbyBjYWNoZSB3cml0ZXMgYXN5bmNocm9ub3VzbHkKKyAqICAgLSBkZWZlciB3cml0ZXMgdW50aWwgY2FjaGUgb2JqZWN0IGxvb2t1cCBjb21wbGV0aW9uCisgKi8KK3N0cnVjdCBmc2NhY2hlX3N0b3JhZ2UgeworCXN0cnVjdCBmc2NhY2hlX29wZXJhdGlvbiBvcDsKKwlwZ29mZl90CQkJc3RvcmVfbGltaXQ7CS8qIGRvbid0IHdyaXRlIG1vcmUgdGhhbiB0aGlzICovCit9OworCisvKgorICogY2FjaGUgb3BlcmF0aW9ucworICovCitzdHJ1Y3QgZnNjYWNoZV9jYWNoZV9vcHMgeworCS8qIG5hbWUgb2YgY2FjaGUgcHJvdmlkZXIgKi8KKwljb25zdCBjaGFyICpuYW1lOworCisJLyogYWxsb2NhdGUgYW4gb2JqZWN0IHJlY29yZCBmb3IgYSBjb29raWUgKi8KKwlzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKigqYWxsb2Nfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUsCisJCQkJCSAgICAgICBzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSk7CisKKwkvKiBsb29rIHVwIHRoZSBvYmplY3QgZm9yIGEgY29va2llICovCisJdm9pZCAoKmxvb2t1cF9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworCS8qIGZpbmlzaGVkIGxvb2tpbmcgdXAgKi8KKwl2b2lkICgqbG9va3VwX2NvbXBsZXRlKShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKwkvKiBpbmNyZW1lbnQgdGhlIHVzYWdlIGNvdW50IG9uIHRoaXMgb2JqZWN0IChtYXkgZmFpbCBpZiB1bm1vdW50aW5nKSAqLworCXN0cnVjdCBmc2NhY2hlX29iamVjdCAqKCpncmFiX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisJLyogcGluIGFuIG9iamVjdCBpbiB0aGUgY2FjaGUgKi8KKwlpbnQgKCpwaW5fb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKwkvKiB1bnBpbiBhbiBvYmplY3QgaW4gdGhlIGNhY2hlICovCisJdm9pZCAoKnVucGluX29iamVjdCkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QpOworCisJLyogc3RvcmUgdGhlIHVwZGF0ZWQgYXV4aWxsaWFyeSBkYXRhIG9uIGFuIG9iamVjdCAqLworCXZvaWQgKCp1cGRhdGVfb2JqZWN0KShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKwkvKiBkaXNjYXJkIHRoZSByZXNvdXJjZXMgcGlubmVkIGJ5IGFuIG9iamVjdCBhbmQgZWZmZWN0IHJldGlyZW1lbnQgaWYKKwkgKiBuZWNlc3NhcnkgKi8KKwl2b2lkICgqZHJvcF9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworCS8qIGRpc3Bvc2Ugb2YgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0ICovCisJdm9pZCAoKnB1dF9vYmplY3QpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworCS8qIHN5bmMgYSBjYWNoZSAqLworCXZvaWQgKCpzeW5jX2NhY2hlKShzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpOworCisJLyogbm90aWZpY2F0aW9uIHRoYXQgdGhlIGF0dHJpYnV0ZXMgb2YgYSBub24taW5kZXggb2JqZWN0IChzdWNoIGFzCisJICogaV9zaXplKSBoYXZlIGNoYW5nZWQgKi8KKwlpbnQgKCphdHRyX2NoYW5nZWQpKHN0cnVjdCBmc2NhY2hlX29iamVjdCAqb2JqZWN0KTsKKworCS8qIHJlc2VydmUgc3BhY2UgZm9yIGFuIG9iamVjdCdzIGRhdGEgYW5kIGFzc29jaWF0ZWQgbWV0YWRhdGEgKi8KKwlpbnQgKCpyZXNlcnZlX3NwYWNlKShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwgbG9mZl90IGlfc2l6ZSk7CisKKwkvKiByZXF1ZXN0IGEgYmFja2luZyBibG9jayBmb3IgYSBwYWdlIGJlIHJlYWQgb3IgYWxsb2NhdGVkIGluIHRoZQorCSAqIGNhY2hlICovCisJZnNjYWNoZV9wYWdlX3JldHJpZXZhbF9mdW5jX3QgcmVhZF9vcl9hbGxvY19wYWdlOworCisJLyogcmVxdWVzdCBiYWNraW5nIGJsb2NrcyBmb3IgYSBsaXN0IG9mIHBhZ2VzIGJlIHJlYWQgb3IgYWxsb2NhdGVkIGluCisJICogdGhlIGNhY2hlICovCisJZnNjYWNoZV9wYWdlc19yZXRyaWV2YWxfZnVuY190IHJlYWRfb3JfYWxsb2NfcGFnZXM7CisKKwkvKiByZXF1ZXN0IGEgYmFja2luZyBibG9jayBmb3IgYSBwYWdlIGJlIGFsbG9jYXRlZCBpbiB0aGUgY2FjaGUgc28gdGhhdAorCSAqIGl0IGNhbiBiZSB3cml0dGVuIGRpcmVjdGx5ICovCisJZnNjYWNoZV9wYWdlX3JldHJpZXZhbF9mdW5jX3QgYWxsb2NhdGVfcGFnZTsKKworCS8qIHJlcXVlc3QgYmFja2luZyBibG9ja3MgZm9yIHBhZ2VzIGJlIGFsbG9jYXRlZCBpbiB0aGUgY2FjaGUgc28gdGhhdAorCSAqIHRoZXkgY2FuIGJlIHdyaXR0ZW4gZGlyZWN0bHkgKi8KKwlmc2NhY2hlX3BhZ2VzX3JldHJpZXZhbF9mdW5jX3QgYWxsb2NhdGVfcGFnZXM7CisKKwkvKiB3cml0ZSBhIHBhZ2UgdG8gaXRzIGJhY2tpbmcgYmxvY2sgaW4gdGhlIGNhY2hlICovCisJaW50ICgqd3JpdGVfcGFnZSkoc3RydWN0IGZzY2FjaGVfc3RvcmFnZSAqb3AsIHN0cnVjdCBwYWdlICpwYWdlKTsKKworCS8qIGRldGFjaCBiYWNraW5nIGJsb2NrIGZyb20gYSBwYWdlIChvcHRpb25hbCkKKwkgKiAtIG11c3QgcmVsZWFzZSB0aGUgY29va2llIGxvY2sgYmVmb3JlIHJldHVybmluZworCSAqIC0gbWF5IHNsZWVwCisJICovCisJdm9pZCAoKnVuY2FjaGVfcGFnZSkoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsCisJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlKTsKKworCS8qIGRpc3NvY2lhdGUgYSBjYWNoZSBmcm9tIGFsbCB0aGUgcGFnZXMgaXQgd2FzIGJhY2tpbmcgKi8KKwl2b2lkICgqZGlzc29jaWF0ZV9wYWdlcykoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlKTsKK307CisKKy8qCisgKiBkYXRhIGZpbGUgb3IgaW5kZXggb2JqZWN0IGNvb2tpZQorICogLSBhIGZpbGUgd2lsbCBvbmx5IGFwcGVhciBpbiBvbmUgY2FjaGUKKyAqIC0gYSByZXF1ZXN0IHRvIGNhY2hlIGEgZmlsZSBtYXkgb3IgbWF5IG5vdCBiZSBob25vdXJlZCwgc3ViamVjdCB0bworICogICBjb25zdHJhaW50cyBzdWNoIGFzIGRpc2sgc3BhY2UKKyAqIC0gaW5kaWNlcyBhcmUgY3JlYXRlZCBvbiBkaXNrIGp1c3QtaW4tdGltZQorICovCitzdHJ1Y3QgZnNjYWNoZV9jb29raWUgeworCWF0b21pY190CQkJdXNhZ2U7CQkvKiBudW1iZXIgb2YgdXNlcnMgb2YgdGhpcyBjb29raWUgKi8KKwlhdG9taWNfdAkJCW5fY2hpbGRyZW47CS8qIG51bWJlciBvZiBjaGlsZHJlbiBvZiB0aGlzIGNvb2tpZSAqLworCXNwaW5sb2NrX3QJCQlsb2NrOworCXN0cnVjdCBobGlzdF9oZWFkCQliYWNraW5nX29iamVjdHM7IC8qIG9iamVjdChzKSBiYWNraW5nIHRoaXMgZmlsZS9pbmRleCAqLworCWNvbnN0IHN0cnVjdCBmc2NhY2hlX2Nvb2tpZV9kZWYJKmRlZjsJCS8qIGRlZmluaXRpb24gKi8KKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUJCSpwYXJlbnQ7CS8qIHBhcmVudCBvZiB0aGlzIGVudHJ5ICovCisJdm9pZAkJCQkqbmV0ZnNfZGF0YTsJLyogYmFjayBwb2ludGVyIHRvIG5ldGZzICovCisJc3RydWN0IHJhZGl4X3RyZWVfcm9vdAkJc3RvcmVzOwkJLyogcGFnZXMgdG8gYmUgc3RvcmVkIG9uIHRoaXMgY29va2llICovCisjZGVmaW5lIEZTQ0FDSEVfQ09PS0lFX1BFTkRJTkdfVEFHCTAJCS8qIHBhZ2VzIHRhZzogcGVuZGluZyB3cml0ZSB0byBjYWNoZSAqLworCisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworI2RlZmluZSBGU0NBQ0hFX0NPT0tJRV9MT09LSU5HX1VQCTAJLyogVCBpZiBub24taW5kZXggY29va2llIGJlaW5nIGxvb2tlZCB1cCBzdGlsbCAqLworI2RlZmluZSBGU0NBQ0hFX0NPT0tJRV9DUkVBVElORwkJMQkvKiBUIGlmIG5vbi1pbmRleCBvYmplY3QgYmVpbmcgY3JlYXRlZCBzdGlsbCAqLworI2RlZmluZSBGU0NBQ0hFX0NPT0tJRV9OT19EQVRBX1lFVAkyCS8qIFQgaWYgbmV3IG9iamVjdCB3aXRoIG5vIGNhY2hlZCBkYXRhIHlldCAqLworI2RlZmluZSBGU0NBQ0hFX0NPT0tJRV9QRU5ESU5HX0ZJTEwJMwkvKiBUIGlmIHBlbmRpbmcgaW5pdGlhbCBmaWxsIG9uIG9iamVjdCAqLworI2RlZmluZSBGU0NBQ0hFX0NPT0tJRV9GSUxMSU5HCQk0CS8qIFQgaWYgZmlsbGluZyBvYmplY3QgaW5jcmVtZW50YWxseSAqLworI2RlZmluZSBGU0NBQ0hFX0NPT0tJRV9VTkFWQUlMQUJMRQk1CS8qIFQgaWYgY29va2llIGlzIHVuYXZhaWxhYmxlIChlcnJvciwgZXRjKSAqLworfTsKKworZXh0ZXJuIHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSBmc2NhY2hlX2ZzZGVmX2luZGV4OworCisvKgorICogb24tZGlzayBjYWNoZSBmaWxlIG9yIGluZGV4IGhhbmRsZQorICovCitzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgeworCWVudW0gZnNjYWNoZV9vYmplY3Rfc3RhdGUgeworCQlGU0NBQ0hFX09CSkVDVF9JTklULAkJLyogb2JqZWN0IGluIGluaXRpYWwgdW5ib3VuZCBzdGF0ZSAqLworCQlGU0NBQ0hFX09CSkVDVF9MT09LSU5HX1VQLAkvKiBsb29raW5nIHVwIG9iamVjdCAqLworCQlGU0NBQ0hFX09CSkVDVF9DUkVBVElORywJLyogY3JlYXRpbmcgb2JqZWN0ICovCisKKwkJLyogYWN0aXZlIHN0YXRlcyAqLworCQlGU0NBQ0hFX09CSkVDVF9BVkFJTEFCTEUsCS8qIGNsZWFuaW5nIHVwIG9iamVjdCBhZnRlciBjcmVhdGlvbiAqLworCQlGU0NBQ0hFX09CSkVDVF9BQ1RJVkUsCQkvKiBvYmplY3QgaXMgdXNhYmxlICovCisJCUZTQ0FDSEVfT0JKRUNUX1VQREFUSU5HLAkvKiBvYmplY3QgaXMgdXBkYXRpbmcgKi8KKworCQkvKiB0ZXJtaW5hbCBzdGF0ZXMgKi8KKwkJRlNDQUNIRV9PQkpFQ1RfRFlJTkcsCQkvKiBvYmplY3Qgd2FpdGluZyBmb3IgYWNjZXNzb3JzIHRvIGZpbmlzaCAqLworCQlGU0NBQ0hFX09CSkVDVF9MQ19EWUlORywJLyogb2JqZWN0IGNsZWFuaW5nIHVwIGFmdGVyIGxvb2t1cC9jcmVhdGUgKi8KKwkJRlNDQUNIRV9PQkpFQ1RfQUJPUlRfSU5JVCwJLyogYWJvcnQgdGhlIGluaXQgc3RhdGUgKi8KKwkJRlNDQUNIRV9PQkpFQ1RfUkVMRUFTSU5HLAkvKiByZWxlYXNpbmcgb2JqZWN0ICovCisJCUZTQ0FDSEVfT0JKRUNUX1JFQ1lDTElORywJLyogcmV0aXJpbmcgb2JqZWN0ICovCisJCUZTQ0FDSEVfT0JKRUNUX1dJVEhEUkFXSU5HLAkvKiB3aXRoZHJhd2luZyBvYmplY3QgKi8KKwkJRlNDQUNIRV9PQkpFQ1RfREVBRCwJCS8qIG9iamVjdCBpcyBub3cgZGVhZCAqLworCX0gc3RhdGU7CisKKwlpbnQJCQlkZWJ1Z19pZDsJLyogZGVidWdnaW5nIElEICovCisJaW50CQkJbl9jaGlsZHJlbjsJLyogbnVtYmVyIG9mIGNoaWxkIG9iamVjdHMgKi8KKwlpbnQJCQluX29wczsJCS8qIG51bWJlciBvZiBvcHMgb3V0c3RhbmRpbmcgb24gb2JqZWN0ICovCisJaW50CQkJbl9vYmpfb3BzOwkvKiBudW1iZXIgb2Ygb2JqZWN0IG9wcyBvdXRzdGFuZGluZyBvbiBvYmplY3QgKi8KKwlpbnQJCQluX2luX3Byb2dyZXNzOwkvKiBudW1iZXIgb2Ygb3BzIGluIHByb2dyZXNzICovCisJaW50CQkJbl9leGNsdXNpdmU7CS8qIG51bWJlciBvZiBleGNsdXNpdmUgb3BzIHF1ZXVlZCAqLworCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBzdGF0ZSBhbmQgb3BlcmF0aW9ucyBsb2NrICovCisKKwl1bnNpZ25lZCBsb25nCQlsb29rdXBfamlmOwkvKiB0aW1lIGF0IHdoaWNoIGxvb2t1cCBzdGFydGVkICovCisJdW5zaWduZWQgbG9uZwkJZXZlbnRfbWFzazsJLyogZXZlbnRzIHRoaXMgb2JqZWN0IGlzIGludGVyZXN0ZWQgaW4gKi8KKwl1bnNpZ25lZCBsb25nCQlldmVudHM7CQkvKiBldmVudHMgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgb2JqZWN0CisJCQkJCQkgKiAob3JkZXIgaXMgaW1wb3J0YW50IC0gdXNpbmcgZmxzKSAqLworI2RlZmluZSBGU0NBQ0hFX09CSkVDVF9FVl9SRVFVRVVFCTAJLyogVCBpZiBvYmplY3Qgc2hvdWxkIGJlIHJlcXVldWVkICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKRUNUX0VWX1VQREFURQkxCS8qIFQgaWYgb2JqZWN0IHNob3VsZCBiZSB1cGRhdGVkICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKRUNUX0VWX0NMRUFSRUQJMgkvKiBUIGlmIGFjY2Vzc29ycyBhbGwgZ29uZSAqLworI2RlZmluZSBGU0NBQ0hFX09CSkVDVF9FVl9FUlJPUgkJMwkvKiBUIGlmIGZhdGFsIGVycm9yIG9jY3VycmVkIGR1cmluZyBwcm9jZXNzaW5nICovCisjZGVmaW5lIEZTQ0FDSEVfT0JKRUNUX0VWX1JFTEVBU0UJNAkvKiBUIGlmIG5ldGZzIHJlcXVlc3RlZCBvYmplY3QgcmVsZWFzZSAqLworI2RlZmluZSBGU0NBQ0hFX09CSkVDVF9FVl9SRVRJUkUJNQkvKiBUIGlmIG5ldGZzIHJlcXVlc3RlZCBvYmplY3QgcmV0aXJlbWVudCAqLworI2RlZmluZSBGU0NBQ0hFX09CSkVDVF9FVl9XSVRIRFJBVwk2CS8qIFQgaWYgY2FjaGUgcmVxdWVzdGVkIG9iamVjdCB3aXRoZHJhd2FsICovCisKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKyNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfTE9DSwkJMAkvKiBUIGlmIG9iamVjdCBpcyBidXN5IGJlaW5nIHByb2Nlc3NlZCAqLworI2RlZmluZSBGU0NBQ0hFX09CSkVDVF9QRU5ESU5HX1dSSVRFCTEJLyogVCBpZiBvYmplY3QgaGFzIHBlbmRpbmcgd3JpdGUgKi8KKyNkZWZpbmUgRlNDQUNIRV9PQkpFQ1RfV0FJVElORwkJMgkvKiBUIGlmIG9iamVjdCBpcyB3YWl0aW5nIG9uIGl0cyBwYXJlbnQgKi8KKworCXN0cnVjdCBsaXN0X2hlYWQJY2FjaGVfbGluazsJLyogbGluayBpbiBjYWNoZS0+b2JqZWN0X2xpc3QgKi8KKwlzdHJ1Y3QgaGxpc3Rfbm9kZQljb29raWVfbGluazsJLyogbGluayBpbiBjb29raWUtPmJhY2tpbmdfb2JqZWN0cyAqLworCXN0cnVjdCBmc2NhY2hlX2NhY2hlCSpjYWNoZTsJCS8qIGNhY2hlIHRoYXQgc3VwcGxpZWQgdGhpcyBvYmplY3QgKi8KKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUJKmNvb2tpZTsJLyogbmV0ZnMncyBmaWxlL2luZGV4IG9iamVjdCAqLworCXN0cnVjdCBmc2NhY2hlX29iamVjdAkqcGFyZW50OwkvKiBwYXJlbnQgb2JqZWN0ICovCisJc3RydWN0IHNsb3dfd29yawl3b3JrOwkJLyogYXR0ZW50aW9uIHNjaGVkdWxpbmcgcmVjb3JkICovCisJc3RydWN0IGxpc3RfaGVhZAlkZXBlbmRlbnRzOwkvKiBGSUZPIG9mIGRlcGVuZGVudCBvYmplY3RzICovCisJc3RydWN0IGxpc3RfaGVhZAlkZXBfbGluazsJLyogbGluayBpbiBwYXJlbnQncyBkZXBlbmRlbnRzIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXBlbmRpbmdfb3BzOwkvKiB1bnN0YXJ0ZWQgb3BlcmF0aW9ucyBvbiB0aGlzIG9iamVjdCAqLworCXBnb2ZmX3QJCQlzdG9yZV9saW1pdDsJLyogY3VycmVudCBzdG9yYWdlIGxpbWl0ICovCit9OworCitleHRlcm4gY29uc3QgY2hhciAqZnNjYWNoZV9vYmplY3Rfc3RhdGVzW107CisKKyNkZWZpbmUgZnNjYWNoZV9vYmplY3RfaXNfYWN0aXZlKG9iaikJCQkgICAgICBcCisJKCF0ZXN0X2JpdChGU0NBQ0hFX0lPRVJST1IsICYob2JqKS0+Y2FjaGUtPmZsYWdzKSAmJiAgXAorCSAob2JqKS0+c3RhdGUgPj0gRlNDQUNIRV9PQkpFQ1RfQVZBSUxBQkxFICYmCSAgICAgIFwKKwkgKG9iaiktPnN0YXRlIDwgRlNDQUNIRV9PQkpFQ1RfRFlJTkcpCisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyBmc2NhY2hlX29iamVjdF9zbG93X3dvcmtfb3BzOworCisvKioKKyAqIGZzY2FjaGVfb2JqZWN0X2luaXQgLSBJbml0aWFsaXNlIGEgY2FjaGUgb2JqZWN0IGRlc2NyaXB0aW9uCisgKiBAb2JqZWN0OiBPYmplY3QgZGVzY3JpcHRpb24KKyAqCisgKiBJbml0aWFsaXNlIGEgY2FjaGUgb2JqZWN0IGRlc2NyaXB0aW9uIHRvIGl0cyBiYXNpYyB2YWx1ZXMuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9iYWNrZW5kLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIGZzY2FjaGVfb2JqZWN0X2luaXQoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsCisJCQkgc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkgc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlKQoreworCWF0b21pY19pbmMoJmNhY2hlLT5vYmplY3RfY291bnQpOworCisJb2JqZWN0LT5zdGF0ZSA9IEZTQ0FDSEVfT0JKRUNUX0lOSVQ7CisJc3Bpbl9sb2NrX2luaXQoJm9iamVjdC0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm9iamVjdC0+Y2FjaGVfbGluayk7CisJSU5JVF9ITElTVF9OT0RFKCZvYmplY3QtPmNvb2tpZV9saW5rKTsKKwl2c2xvd193b3JrX2luaXQoJm9iamVjdC0+d29yaywgJmZzY2FjaGVfb2JqZWN0X3Nsb3dfd29ya19vcHMpOworCUlOSVRfTElTVF9IRUFEKCZvYmplY3QtPmRlcGVuZGVudHMpOworCUlOSVRfTElTVF9IRUFEKCZvYmplY3QtPmRlcF9saW5rKTsKKwlJTklUX0xJU1RfSEVBRCgmb2JqZWN0LT5wZW5kaW5nX29wcyk7CisJb2JqZWN0LT5uX2NoaWxkcmVuID0gMDsKKwlvYmplY3QtPm5fb3BzID0gb2JqZWN0LT5uX2luX3Byb2dyZXNzID0gb2JqZWN0LT5uX2V4Y2x1c2l2ZSA9IDA7CisJb2JqZWN0LT5ldmVudHMgPSBvYmplY3QtPmV2ZW50X21hc2sgPSAwOworCW9iamVjdC0+ZmxhZ3MgPSAwOworCW9iamVjdC0+c3RvcmVfbGltaXQgPSAwOworCW9iamVjdC0+Y2FjaGUgPSBjYWNoZTsKKwlvYmplY3QtPmNvb2tpZSA9IGNvb2tpZTsKKwlvYmplY3QtPnBhcmVudCA9IE5VTEw7Cit9CisKK2V4dGVybiB2b2lkIGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9uZWdhdGl2ZShzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CitleHRlcm4gdm9pZCBmc2NhY2hlX29idGFpbmVkX29iamVjdChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCk7CisKKy8qKgorICogZnNjYWNoZV9vYmplY3RfZGVzdHJveWVkIC0gTm90ZSBkZXN0cnVjdGlvbiBvZiBhbiBvYmplY3QgaW4gYSBjYWNoZQorICogQGNhY2hlOiBUaGUgY2FjaGUgZnJvbSB3aGljaCB0aGUgb2JqZWN0IGNhbWUKKyAqCisgKiBOb3RlIHRoZSBkZXN0cnVjdGlvbiBhbmQgZGVhbGxvY2F0aW9uIG9mIGFuIG9iamVjdCByZWNvcmQgaW4gYSBjYWNoZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZzY2FjaGVfb2JqZWN0X2Rlc3Ryb3llZChzdHJ1Y3QgZnNjYWNoZV9jYWNoZSAqY2FjaGUpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNhY2hlLT5vYmplY3RfY291bnQpKQorCQl3YWtlX3VwX2FsbCgmZnNjYWNoZV9jYWNoZV9jbGVhcmVkX3dxKTsKK30KKworLyoqCisgKiBmc2NhY2hlX29iamVjdF9sb29rdXBfZXJyb3IgLSBOb3RlIGFuIG9iamVjdCBlbmNvdW50ZXJlZCBhbiBlcnJvcgorICogQG9iamVjdDogVGhlIG9iamVjdCBvbiB3aGljaCB0aGUgZXJyb3Igd2FzIGVuY291bnRlcmVkCisgKgorICogTm90ZSB0aGF0IGFuIG9iamVjdCBlbmNvdW50ZXJlZCBhIGZhdGFsIGVycm9yICh1c3VhbGx5IGFuIEkvTyBlcnJvcikgYW5kCisgKiB0aGF0IGl0IHNob3VsZCBiZSB3aXRoZHJhd24gYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZzY2FjaGVfb2JqZWN0X2xvb2t1cF9lcnJvcihzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCkKK3sKKwlzZXRfYml0KEZTQ0FDSEVfT0JKRUNUX0VWX0VSUk9SLCAmb2JqZWN0LT5ldmVudHMpOworfQorCisvKioKKyAqIGZzY2FjaGVfc2V0X3N0b3JlX2xpbWl0IC0gU2V0IHRoZSBtYXhpbXVtIHNpemUgdG8gYmUgc3RvcmVkIGluIGFuIG9iamVjdAorICogQG9iamVjdDogVGhlIG9iamVjdCB0byBzZXQgdGhlIG1heGltdW0gb24KKyAqIEBpX3NpemU6IFRoZSBsaW1pdCB0byBzZXQgaW4gYnl0ZXMKKyAqCisgKiBTZXQgdGhlIG1heGltdW0gc2l6ZSBhbiBvYmplY3QgaXMgcGVybWl0dGVkIHRvIHJlYWNoLCBpbXBseWluZyB0aGUgaGlnaGVzdAorICogYnl0ZSB0aGF0IG1heSBiZSB3cml0dGVuLiAgSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGJ5IHRoZSBhdHRyX2NoYW5nZWQoKSBvcC4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL2JhY2tlbmQtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZnNjYWNoZV9zZXRfc3RvcmVfbGltaXQoc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpvYmplY3QsIGxvZmZfdCBpX3NpemUpCit7CisJb2JqZWN0LT5zdG9yZV9saW1pdCA9IGlfc2l6ZSA+PiBQQUdFX1NISUZUOworCWlmIChpX3NpemUgJiB+UEFHRV9NQVNLKQorCQlvYmplY3QtPnN0b3JlX2xpbWl0Kys7Cit9CisKKy8qKgorICogZnNjYWNoZV9lbmRfaW8gLSBFbmQgYSByZXRyaWV2YWwgb3BlcmF0aW9uIG9uIGEgcGFnZQorICogQG9wOiBUaGUgRlMtQ2FjaGUgb3BlcmF0aW9uIGNvdmVyaW5nIHRoZSByZXRyaWV2YWwKKyAqIEBwYWdlOiBUaGUgcGFnZSB0aGF0IHdhcyB0byBiZSBmZXRjaGVkCisgKiBAZXJyb3I6IFRoZSBlcnJvciBjb2RlICgwIGlmIHN1Y2Nlc3NmdWwpCisgKgorICogTm90ZSB0aGUgZW5kIG9mIGFuIG9wZXJhdGlvbiB0byByZXRyaWV2ZSBhIHBhZ2UsIGFzIGNvdmVyZWQgYnkgYSBwYXJ0aWN1bGFyCisgKiBvcGVyYXRpb24gcmVjb3JkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZnNjYWNoZV9lbmRfaW8oc3RydWN0IGZzY2FjaGVfcmV0cmlldmFsICpvcCwKKwkJCQkgIHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgZXJyb3IpCit7CisJb3AtPmVuZF9pb19mdW5jKHBhZ2UsIG9wLT5jb250ZXh0LCBlcnJvcik7Cit9CisKKy8qCisgKiBvdXQtb2YtbGluZSBjYWNoZSBiYWNrZW5kIGZ1bmN0aW9ucworICovCitleHRlcm4gdm9pZCBmc2NhY2hlX2luaXRfY2FjaGUoc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBmc2NhY2hlX2NhY2hlX29wcyAqb3BzLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmlkZm10LAorCQkJICAgICAgIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworCitleHRlcm4gaW50IGZzY2FjaGVfYWRkX2NhY2hlKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSwKKwkJCSAgICAgc3RydWN0IGZzY2FjaGVfb2JqZWN0ICpmc2RlZiwKKwkJCSAgICAgY29uc3QgY2hhciAqdGFnbmFtZSk7CitleHRlcm4gdm9pZCBmc2NhY2hlX3dpdGhkcmF3X2NhY2hlKHN0cnVjdCBmc2NhY2hlX2NhY2hlICpjYWNoZSk7CisKK2V4dGVybiB2b2lkIGZzY2FjaGVfaW9fZXJyb3Ioc3RydWN0IGZzY2FjaGVfY2FjaGUgKmNhY2hlKTsKKworZXh0ZXJuIHZvaWQgZnNjYWNoZV9tYXJrX3BhZ2VzX2NhY2hlZChzdHJ1Y3QgZnNjYWNoZV9yZXRyaWV2YWwgKm9wLAorCQkJCSAgICAgIHN0cnVjdCBwYWdldmVjICpwYWdldmVjKTsKKworZXh0ZXJuIGVudW0gZnNjYWNoZV9jaGVja2F1eCBmc2NhY2hlX2NoZWNrX2F1eChzdHJ1Y3QgZnNjYWNoZV9vYmplY3QgKm9iamVjdCwKKwkJCQkJICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkJCSAgICAgICB1aW50MTZfdCBkYXRhbGVuKTsKKworI2VuZGlmIC8qIF9MSU5VWF9GU0NBQ0hFX0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNjYWNoZS5oIGIvaW5jbHVkZS9saW51eC9mc2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ4ZWU0NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZnNjYWNoZS5oCkBAIC0wLDAgKzEsNjE4IEBACisvKiBHZW5lcmFsIGZpbGVzeXN0ZW0gY2FjaGluZyBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBOT1RFISEhIFNlZToKKyAqCisgKglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dAorICoKKyAqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBuZXR3b3JrIGZpbGVzeXN0ZW0gaW50ZXJmYWNlIGRlY2xhcmVkIGhlcmUuCisgKi8KKworI2lmbmRlZiBfTElOVVhfRlNDQUNIRV9ICisjZGVmaW5lIF9MSU5VWF9GU0NBQ0hFX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19GU0NBQ0hFKSB8fCBkZWZpbmVkKENPTkZJR19GU0NBQ0hFX01PRFVMRSkKKyNkZWZpbmUgZnNjYWNoZV9hdmFpbGFibGUoKSAoMSkKKyNkZWZpbmUgZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSAoY29va2llKQorI2Vsc2UKKyNkZWZpbmUgZnNjYWNoZV9hdmFpbGFibGUoKSAoMCkKKyNkZWZpbmUgZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSAoMCkKKyNlbmRpZgorCisKKy8qCisgKiBvdmVybG9hZCBQR19wcml2YXRlXzIgdG8gZ2l2ZSB1cyBQR19mc2NhY2hlIC0gdGhpcyBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQKKyAqIGEgcGFnZSBpcyBjdXJyZW50bHkgYmFja2VkIGJ5IGEgbG9jYWwgZGlzayBjYWNoZQorICovCisjZGVmaW5lIFBhZ2VGc0NhY2hlKHBhZ2UpCQlQYWdlUHJpdmF0ZTIoKHBhZ2UpKQorI2RlZmluZSBTZXRQYWdlRnNDYWNoZShwYWdlKQkJU2V0UGFnZVByaXZhdGUyKChwYWdlKSkKKyNkZWZpbmUgQ2xlYXJQYWdlRnNDYWNoZShwYWdlKQkJQ2xlYXJQYWdlUHJpdmF0ZTIoKHBhZ2UpKQorI2RlZmluZSBUZXN0U2V0UGFnZUZzQ2FjaGUocGFnZSkJVGVzdFNldFBhZ2VQcml2YXRlMigocGFnZSkpCisjZGVmaW5lIFRlc3RDbGVhclBhZ2VGc0NhY2hlKHBhZ2UpCVRlc3RDbGVhclBhZ2VQcml2YXRlMigocGFnZSkpCisKKy8qIHBhdHRlcm4gdXNlZCB0byBmaWxsIGRlYWQgc3BhY2UgaW4gYW4gaW5kZXggZW50cnkgKi8KKyNkZWZpbmUgRlNDQUNIRV9JTkRFWF9ERUFERklMTF9QQVRURVJOIDB4NzkKKworc3RydWN0IHBhZ2V2ZWM7CitzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWc7CitzdHJ1Y3QgZnNjYWNoZV9jb29raWU7CitzdHJ1Y3QgZnNjYWNoZV9uZXRmczsKKwordHlwZWRlZiB2b2lkICgqZnNjYWNoZV9yd19jb21wbGV0ZV90KShzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICAgICB2b2lkICpjb250ZXh0LAorCQkJCSAgICAgIGludCBlcnJvcik7CisKKy8qIHJlc3VsdCBvZiBpbmRleCBlbnRyeSBjb25zdWx0YXRpb24gKi8KK2VudW0gZnNjYWNoZV9jaGVja2F1eCB7CisJRlNDQUNIRV9DSEVDS0FVWF9PS0FZLAkJLyogZW50cnkgb2theSBhcyBpcyAqLworCUZTQ0FDSEVfQ0hFQ0tBVVhfTkVFRFNfVVBEQVRFLAkvKiBlbnRyeSByZXF1aXJlcyB1cGRhdGUgKi8KKwlGU0NBQ0hFX0NIRUNLQVVYX09CU09MRVRFLAkvKiBlbnRyeSByZXF1aXJlcyBkZWxldGlvbiAqLworfTsKKworLyoKKyAqIGZzY2FjaGUgY29va2llIGRlZmluaXRpb24KKyAqLworc3RydWN0IGZzY2FjaGVfY29va2llX2RlZiB7CisJLyogbmFtZSBvZiBjb29raWUgdHlwZSAqLworCWNoYXIgbmFtZVsxNl07CisKKwkvKiBjb29raWUgdHlwZSAqLworCXVpbnQ4X3QgdHlwZTsKKyNkZWZpbmUgRlNDQUNIRV9DT09LSUVfVFlQRV9JTkRFWAkwCisjZGVmaW5lIEZTQ0FDSEVfQ09PS0lFX1RZUEVfREFUQUZJTEUJMQorCisJLyogc2VsZWN0IHRoZSBjYWNoZSBpbnRvIHdoaWNoIHRvIGluc2VydCBhbiBlbnRyeSBpbiB0aGlzIGluZGV4CisJICogLSBvcHRpb25hbAorCSAqIC0gc2hvdWxkIHJldHVybiBhIGNhY2hlIGlkZW50aWZpZXIgb3IgTlVMTCB0byBjYXVzZSB0aGUgY2FjaGUgdG8gYmUKKwkgKiAgIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgaWYgcG9zc2libGUgb3IgdGhlIGZpcnN0IGNhY2hlIHBpY2tlZAorCSAqICAgZm9yIGEgbm9uLWluZGV4IGZpbGUgaWYgbm90CisJICovCisJc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICooKnNlbGVjdF9jYWNoZSkoCisJCWNvbnN0IHZvaWQgKnBhcmVudF9uZXRmc19kYXRhLAorCQljb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSk7CisKKwkvKiBnZXQgYW4gaW5kZXgga2V5CisJICogLSBzaG91bGQgc3RvcmUgdGhlIGtleSBkYXRhIGluIHRoZSBidWZmZXIKKwkgKiAtIHNob3VsZCByZXR1cm4gdGhlIGFtb3VudCBvZiBhbW91bnQgc3RvcmVkCisJICogLSBub3QgcGVybWl0dGVkIHRvIHJldHVybiBhbiBlcnJvcgorCSAqIC0gdGhlIG5ldGZzIGRhdGEgZnJvbSB0aGUgY29va2llIGJlaW5nIHVzZWQgYXMgdGhlIHNvdXJjZSBpcworCSAqICAgcHJlc2VudGVkCisJICovCisJdWludDE2X3QgKCpnZXRfa2V5KShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwKKwkJCSAgICB2b2lkICpidWZmZXIsCisJCQkgICAgdWludDE2X3QgYnVmbWF4KTsKKworCS8qIGdldCBjZXJ0YWluIGZpbGUgYXR0cmlidXRlcyBmcm9tIHRoZSBuZXRmcyBkYXRhCisJICogLSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBhYnNlbnQgZm9yIGFuIGluZGV4CisJICogLSBub3QgcGVybWl0dGVkIHRvIHJldHVybiBhbiBlcnJvcgorCSAqIC0gdGhlIG5ldGZzIGRhdGEgZnJvbSB0aGUgY29va2llIGJlaW5nIHVzZWQgYXMgdGhlIHNvdXJjZSBpcworCSAqICAgcHJlc2VudGVkCisJICovCisJdm9pZCAoKmdldF9hdHRyKShjb25zdCB2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwgdWludDY0X3QgKnNpemUpOworCisJLyogZ2V0IHRoZSBhdXhpbGxpYXJ5IGRhdGEgZnJvbSBuZXRmcyBkYXRhCisJICogLSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBhYnNlbnQgaWYgdGhlIGluZGV4IGNhcnJpZXMgbm8gc3RhdGUgZGF0YQorCSAqIC0gc2hvdWxkIHN0b3JlIHRoZSBhdXhpbGxpYXJ5IGRhdGEgaW4gdGhlIGJ1ZmZlcgorCSAqIC0gc2hvdWxkIHJldHVybiB0aGUgYW1vdW50IG9mIGFtb3VudCBzdG9yZWQKKwkgKiAtIG5vdCBwZXJtaXR0ZWQgdG8gcmV0dXJuIGFuIGVycm9yCisJICogLSB0aGUgbmV0ZnMgZGF0YSBmcm9tIHRoZSBjb29raWUgYmVpbmcgdXNlZCBhcyB0aGUgc291cmNlIGlzCisJICogICBwcmVzZW50ZWQKKwkgKi8KKwl1aW50MTZfdCAoKmdldF9hdXgpKGNvbnN0IHZvaWQgKmNvb2tpZV9uZXRmc19kYXRhLAorCQkJICAgIHZvaWQgKmJ1ZmZlciwKKwkJCSAgICB1aW50MTZfdCBidWZtYXgpOworCisJLyogY29uc3VsdCB0aGUgbmV0ZnMgYWJvdXQgdGhlIHN0YXRlIG9mIGFuIG9iamVjdAorCSAqIC0gdGhpcyBmdW5jdGlvbiBjYW4gYmUgYWJzZW50IGlmIHRoZSBpbmRleCBjYXJyaWVzIG5vIHN0YXRlIGRhdGEKKwkgKiAtIHRoZSBuZXRmcyBkYXRhIGZyb20gdGhlIGNvb2tpZSBiZWluZyB1c2VkIGFzIHRoZSB0YXJnZXQgaXMKKwkgKiAgIHByZXNlbnRlZCwgYXMgaXMgdGhlIGF1eGlsbGlhcnkgZGF0YQorCSAqLworCWVudW0gZnNjYWNoZV9jaGVja2F1eCAoKmNoZWNrX2F1eCkodm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJCSAgIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkJCSAgIHVpbnQxNl90IGRhdGFsZW4pOworCisJLyogZ2V0IGFuIGV4dHJhIHJlZmVyZW5jZSBvbiBhIHJlYWQgY29udGV4dAorCSAqIC0gdGhpcyBmdW5jdGlvbiBjYW4gYmUgYWJzZW50IGlmIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uIGRvZXNuJ3QKKwkgKiAgIHJlcXVpcmUgYSBjb250ZXh0CisJICovCisJdm9pZCAoKmdldF9jb250ZXh0KSh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwgdm9pZCAqY29udGV4dCk7CisKKwkvKiByZWxlYXNlIGFuIGV4dHJhIHJlZmVyZW5jZSBvbiBhIHJlYWQgY29udGV4dAorCSAqIC0gdGhpcyBmdW5jdGlvbiBjYW4gYmUgYWJzZW50IGlmIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uIGRvZXNuJ3QKKwkgKiAgIHJlcXVpcmUgYSBjb250ZXh0CisJICovCisJdm9pZCAoKnB1dF9jb250ZXh0KSh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSwgdm9pZCAqY29udGV4dCk7CisKKwkvKiBpbmRpY2F0ZSBwYWdlcyB0aGF0IG5vdyBoYXZlIGNhY2hlIG1ldGFkYXRhIHJldGFpbmVkCisJICogLSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBtYXJrIHRoZSBzcGVjaWZpZWQgcGFnZXMgYXMgbm93IGJlaW5nIGNhY2hlZAorCSAqIC0gdGhlIHBhZ2VzIHdpbGwgaGF2ZSBiZWVuIG1hcmtlZCB3aXRoIFBHX2ZzY2FjaGUgYmVmb3JlIHRoaXMgaXMKKwkgKiAgIGNhbGxlZCwgc28gdGhpcyBpcyBvcHRpb25hbAorCSAqLworCXZvaWQgKCptYXJrX3BhZ2VzX2NhY2hlZCkodm9pZCAqY29va2llX25ldGZzX2RhdGEsCisJCQkJICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQkgIHN0cnVjdCBwYWdldmVjICpjYWNoZWRfcHZlYyk7CisKKwkvKiBpbmRpY2F0ZSB0aGUgY29va2llIGlzIG5vIGxvbmdlciBjYWNoZWQKKwkgKiAtIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIGJhY2tpbmcgc3RvcmUgY3VycmVudGx5IGNhY2hpbmcKKwkgKiAgIGEgY29va2llIGlzIHJlbW92ZWQKKwkgKiAtIHRoZSBuZXRmcyBzaG91bGQgdXNlIHRoaXMgdG8gY2xlYW4gdXAgYW55IG1hcmtlcnMgaW5kaWNhdGluZworCSAqICAgY2FjaGVkIHBhZ2VzCisJICogLSB0aGlzIGlzIG1hbmRhdG9yeSBmb3IgYW55IG9iamVjdCB0aGF0IG1heSBoYXZlIGRhdGEKKwkgKi8KKwl2b2lkICgqbm93X3VuY2FjaGVkKSh2b2lkICpjb29raWVfbmV0ZnNfZGF0YSk7Cit9OworCisvKgorICogZnNjYWNoZSBjYWNoZWQgbmV0d29yayBmaWxlc3lzdGVtIHR5cGUKKyAqIC0gbmFtZSwgdmVyc2lvbiBhbmQgb3BzIG11c3QgYmUgZmlsbGVkIGluIGJlZm9yZSByZWdpc3RyYXRpb24KKyAqIC0gYWxsIG90aGVyIGZpZWxkcyB3aWxsIGJlIHNldCBkdXJpbmcgcmVnaXN0cmF0aW9uCisgKi8KK3N0cnVjdCBmc2NhY2hlX25ldGZzIHsKKwl1aW50MzJfdAkJCXZlcnNpb247CS8qIGluZGV4aW5nIHZlcnNpb24gKi8KKwljb25zdCBjaGFyCQkJKm5hbWU7CQkvKiBmaWxlc3lzdGVtIG5hbWUgKi8KKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUJCSpwcmltYXJ5X2luZGV4OworCXN0cnVjdCBsaXN0X2hlYWQJCWxpbms7CQkvKiBpbnRlcm5hbCBsaW5rICovCit9OworCisvKgorICogc2xvdy1wYXRoIGZ1bmN0aW9ucyBmb3Igd2hlbiB0aGVyZSBpcyBhY3R1YWxseSBjYWNoaW5nIGF2YWlsYWJsZSwgYW5kIHRoZQorICogbmV0ZnMgZG9lcyBhY3R1YWxseSBoYXZlIGEgdmFsaWQgdG9rZW4KKyAqIC0gdGhlc2UgYXJlIG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkKKyAqIC0gdGhlc2UgYXJlIHVuZGVmaW5lZCBzeW1ib2xzIHdoZW4gRlMtQ2FjaGUgaXMgbm90IGNvbmZpZ3VyZWQgYW5kIHRoZQorICogICBvcHRpbWlzZXIgdGFrZXMgY2FyZSBvZiBub3QgdXNpbmcgdGhlbQorICovCitleHRlcm4gaW50IF9fZnNjYWNoZV9yZWdpc3Rlcl9uZXRmcyhzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqKTsKK2V4dGVybiB2b2lkIF9fZnNjYWNoZV91bnJlZ2lzdGVyX25ldGZzKHN0cnVjdCBmc2NhY2hlX25ldGZzICopOworZXh0ZXJuIHN0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqX19mc2NhY2hlX2xvb2t1cF9jYWNoZV90YWcoY29uc3QgY2hhciAqKTsKK2V4dGVybiB2b2lkIF9fZnNjYWNoZV9yZWxlYXNlX2NhY2hlX3RhZyhzdHJ1Y3QgZnNjYWNoZV9jYWNoZV90YWcgKik7CisKK2V4dGVybiBzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKl9fZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSgKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKiwKKwljb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmICosCisJdm9pZCAqKTsKK2V4dGVybiB2b2lkIF9fZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKiwgaW50KTsKK2V4dGVybiB2b2lkIF9fZnNjYWNoZV91cGRhdGVfY29va2llKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqKTsKK2V4dGVybiBpbnQgX19mc2NhY2hlX2F0dHJfY2hhbmdlZChzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKik7CitleHRlcm4gaW50IF9fZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICosCisJCQkJCXN0cnVjdCBwYWdlICosCisJCQkJCWZzY2FjaGVfcndfY29tcGxldGVfdCwKKwkJCQkJdm9pZCAqLAorCQkJCQlnZnBfdCk7CitleHRlcm4gaW50IF9fZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2VzKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqLAorCQkJCQkgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwKKwkJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKiwKKwkJCQkJIHVuc2lnbmVkICosCisJCQkJCSBmc2NhY2hlX3J3X2NvbXBsZXRlX3QsCisJCQkJCSB2b2lkICosCisJCQkJCSBnZnBfdCk7CitleHRlcm4gaW50IF9fZnNjYWNoZV9hbGxvY19wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqLCBzdHJ1Y3QgcGFnZSAqLCBnZnBfdCk7CitleHRlcm4gaW50IF9fZnNjYWNoZV93cml0ZV9wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqLCBzdHJ1Y3QgcGFnZSAqLCBnZnBfdCk7CitleHRlcm4gdm9pZCBfX2ZzY2FjaGVfdW5jYWNoZV9wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKK2V4dGVybiBib29sIF9fZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKK2V4dGVybiB2b2lkIF9fZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUoc3RydWN0IGZzY2FjaGVfY29va2llICosIHN0cnVjdCBwYWdlICopOworCisvKioKKyAqIGZzY2FjaGVfcmVnaXN0ZXJfbmV0ZnMgLSBSZWdpc3RlciBhIGZpbGVzeXN0ZW0gYXMgZGVzaXJpbmcgY2FjaGluZyBzZXJ2aWNlcworICogQG5ldGZzOiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGZpbGVzeXN0ZW0KKyAqCisgKiBSZWdpc3RlciBhIGZpbGVzeXN0ZW0gYXMgZGVzaXJpbmcgY2FjaGluZyBzZXJ2aWNlcyBpZiB0aGV5J3JlIGF2YWlsYWJsZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCitpbnQgZnNjYWNoZV9yZWdpc3Rlcl9uZXRmcyhzdHJ1Y3QgZnNjYWNoZV9uZXRmcyAqbmV0ZnMpCit7CisJaWYgKGZzY2FjaGVfYXZhaWxhYmxlKCkpCisJCXJldHVybiBfX2ZzY2FjaGVfcmVnaXN0ZXJfbmV0ZnMobmV0ZnMpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZnNjYWNoZV91bnJlZ2lzdGVyX25ldGZzIC0gSW5kaWNhdGUgdGhhdCBhIGZpbGVzeXN0ZW0gbm8gbG9uZ2VyIGRlc2lyZXMKKyAqIGNhY2hpbmcgc2VydmljZXMKKyAqIEBuZXRmczogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWxlc3lzdGVtCisgKgorICogSW5kaWNhdGUgdGhhdCBhIGZpbGVzeXN0ZW0gbm8gbG9uZ2VyIGRlc2lyZXMgY2FjaGluZyBzZXJ2aWNlcyBmb3IgdGhlCisgKiBtb21lbnQuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQordm9pZCBmc2NhY2hlX3VucmVnaXN0ZXJfbmV0ZnMoc3RydWN0IGZzY2FjaGVfbmV0ZnMgKm5ldGZzKQoreworCWlmIChmc2NhY2hlX2F2YWlsYWJsZSgpKQorCQlfX2ZzY2FjaGVfdW5yZWdpc3Rlcl9uZXRmcyhuZXRmcyk7Cit9CisKKy8qKgorICogZnNjYWNoZV9sb29rdXBfY2FjaGVfdGFnIC0gTG9vayB1cCBhIGNhY2hlIHRhZworICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSB0YWcgdG8gc2VhcmNoIGZvcgorICoKKyAqIEFjcXVpcmUgYSBzcGVjaWZpYyBjYWNoZSByZWZlcnJhbCB0YWcgdGhhdCBjYW4gYmUgdXNlZCB0byBzZWxlY3QgYSBzcGVjaWZpYworICogY2FjaGUgaW4gd2hpY2ggdG8gY2FjaGUgYW4gaW5kZXguCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQorc3RydWN0IGZzY2FjaGVfY2FjaGVfdGFnICpmc2NhY2hlX2xvb2t1cF9jYWNoZV90YWcoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoZnNjYWNoZV9hdmFpbGFibGUoKSkKKwkJcmV0dXJuIF9fZnNjYWNoZV9sb29rdXBfY2FjaGVfdGFnKG5hbWUpOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogZnNjYWNoZV9yZWxlYXNlX2NhY2hlX3RhZyAtIFJlbGVhc2UgYSBjYWNoZSB0YWcKKyAqIEB0YWc6IFRoZSB0YWcgdG8gcmVsZWFzZQorICoKKyAqIFJlbGVhc2UgYSByZWZlcmVuY2UgdG8gYSBjYWNoZSByZWZlcnJhbCB0YWcgcHJldmlvdXNseSBsb29rZWQgdXAuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQordm9pZCBmc2NhY2hlX3JlbGVhc2VfY2FjaGVfdGFnKHN0cnVjdCBmc2NhY2hlX2NhY2hlX3RhZyAqdGFnKQoreworCWlmIChmc2NhY2hlX2F2YWlsYWJsZSgpKQorCQlfX2ZzY2FjaGVfcmVsZWFzZV9jYWNoZV90YWcodGFnKTsKK30KKworLyoqCisgKiBmc2NhY2hlX2FjcXVpcmVfY29va2llIC0gQWNxdWlyZSBhIGNvb2tpZSB0byByZXByZXNlbnQgYSBjYWNoZSBvYmplY3QKKyAqIEBwYXJlbnQ6IFRoZSBjb29raWUgdGhhdCdzIHRvIGJlIHRoZSBwYXJlbnQgb2YgdGhpcyBvbmUKKyAqIEBkZWY6IEEgZGVzY3JpcHRpb24gb2YgdGhlIGNhY2hlIG9iamVjdCwgaW5jbHVkaW5nIGNhbGxiYWNrIG9wZXJhdGlvbnMKKyAqIEBuZXRmc19kYXRhOiBBbiBhcmJpdHJhcnkgcGllY2Ugb2YgZGF0YSB0byBiZSBrZXB0IGluIHRoZSBjb29raWUgdG8KKyAqIHJlcHJlc2VudCB0aGUgY2FjaGUgb2JqZWN0IHRvIHRoZSBuZXRmcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBpbmZvcm0gRlMtQ2FjaGUgYWJvdXQgcGFydCBvZiBhbiBpbmRleCBoaWVyYXJjaHkKKyAqIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9jYXRlIGZpbGVzLiAgVGhpcyBpcyBkb25lIGJ5IHJlcXVlc3RpbmcgYSBjb29raWUgZm9yCisgKiBlYWNoIGluZGV4IGluIHRoZSBwYXRoIHRvIHRoZSBmaWxlLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZSgKKwlzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKnBhcmVudCwKKwljb25zdCBzdHJ1Y3QgZnNjYWNoZV9jb29raWVfZGVmICpkZWYsCisJdm9pZCAqbmV0ZnNfZGF0YSkKK3sKKwlpZiAoZnNjYWNoZV9jb29raWVfdmFsaWQocGFyZW50KSkKKwkJcmV0dXJuIF9fZnNjYWNoZV9hY3F1aXJlX2Nvb2tpZShwYXJlbnQsIGRlZiwgbmV0ZnNfZGF0YSk7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiBmc2NhY2hlX3JlbGlucXVpc2hfY29va2llIC0gUmV0dXJuIHRoZSBjb29raWUgdG8gdGhlIGNhY2hlLCBtYXliZSBkaXNjYXJkaW5nCisgKiBpdAorICogQGNvb2tpZTogVGhlIGNvb2tpZSBiZWluZyByZXR1cm5lZAorICogQHJldGlyZTogVHJ1ZSBpZiB0aGUgY2FjaGUgb2JqZWN0IHRoZSBjb29raWUgcmVwcmVzZW50cyBpcyB0byBiZSBkaXNjYXJkZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBjb29raWUgdG8gdGhlIGNhY2hlLCBmb3JjaWJseSBkaXNjYXJkaW5nIHRoZQorICogYXNzb2NpYXRlZCBjYWNoZSBvYmplY3QgaWYgcmV0aXJlIGlzIHNldCB0byB0cnVlLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZnNjYWNoZV9yZWxpbnF1aXNoX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwgaW50IHJldGlyZSkKK3sKKwlpZiAoZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSkKKwkJX19mc2NhY2hlX3JlbGlucXVpc2hfY29va2llKGNvb2tpZSwgcmV0aXJlKTsKK30KKworLyoqCisgKiBmc2NhY2hlX3VwZGF0ZV9jb29raWUgLSBSZXF1ZXN0IHRoYXQgYSBjYWNoZSBvYmplY3QgYmUgdXBkYXRlZAorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICoKKyAqIFJlcXVlc3QgYW4gdXBkYXRlIG9mIHRoZSBpbmRleCBkYXRhIGZvciB0aGUgY2FjaGUgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqIGNvb2tpZS4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCit2b2lkIGZzY2FjaGVfdXBkYXRlX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSkKK3sKKwlpZiAoZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSkKKwkJX19mc2NhY2hlX3VwZGF0ZV9jb29raWUoY29va2llKTsKK30KKworLyoqCisgKiBmc2NhY2hlX3Bpbl9jb29raWUgLSBQaW4gYSBkYXRhLXN0b3JhZ2UgY2FjaGUgb2JqZWN0IGluIGl0cyBjYWNoZQorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICoKKyAqIFBlcm1pdCBkYXRhLXN0b3JhZ2UgY2FjaGUgb2JqZWN0cyB0byBiZSBwaW5uZWQgaW4gdGhlIGNhY2hlLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK2ludCBmc2NhY2hlX3Bpbl9jb29raWUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUpCit7CisJcmV0dXJuIC1FTk9CVUZTOworfQorCisvKioKKyAqIGZzY2FjaGVfcGluX2Nvb2tpZSAtIFVucGluIGEgZGF0YS1zdG9yYWdlIGNhY2hlIG9iamVjdCBpbiBpdHMgY2FjaGUKKyAqIEBjb29raWU6IFRoZSBjb29raWUgcmVwcmVzZW50aW5nIHRoZSBjYWNoZSBvYmplY3QKKyAqCisgKiBQZXJtaXQgZGF0YS1zdG9yYWdlIGNhY2hlIG9iamVjdHMgdG8gYmUgdW5waW5uZWQgZnJvbSB0aGUgY2FjaGUuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQordm9pZCBmc2NhY2hlX3VucGluX2Nvb2tpZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSkKK3sKK30KKworLyoqCisgKiBmc2NhY2hlX2F0dHJfY2hhbmdlZCAtIE5vdGlmeSBjYWNoZSB0aGF0IGFuIG9iamVjdCdzIGF0dHJpYnV0ZXMgY2hhbmdlZAorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICoKKyAqIFNlbmQgYSBub3RpZmljYXRpb24gdG8gdGhlIGNhY2hlIGluZGljYXRpbmcgdGhhdCBhbiBvYmplY3QncyBhdHRyaWJ1dGVzIGhhdmUKKyAqIGNoYW5nZWQuICBUaGlzIGluY2x1ZGVzIHRoZSBkYXRhIHNpemUuICBUaGVzZSBhdHRyaWJ1dGVzIHdpbGwgYmUgb2J0YWluZWQKKyAqIHRocm91Z2ggdGhlIGdldF9hdHRyKCkgY29va2llIGRlZmluaXRpb24gb3AuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQoraW50IGZzY2FjaGVfYXR0cl9jaGFuZ2VkKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llKQoreworCWlmIChmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpKQorCQlyZXR1cm4gX19mc2NhY2hlX2F0dHJfY2hhbmdlZChjb29raWUpOworCWVsc2UKKwkJcmV0dXJuIC1FTk9CVUZTOworfQorCisvKioKKyAqIGZzY2FjaGVfcmVzZXJ2ZV9zcGFjZSAtIFJlc2VydmUgZGF0YSBzcGFjZSBmb3IgYSBjYWNoZWQgb2JqZWN0CisgKiBAY29va2llOiBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgY2FjaGUgb2JqZWN0CisgKiBAaV9zaXplOiBUaGUgYW1vdW50IG9mIHNwYWNlIHRvIGJlIHJlc2VydmVkCisgKgorICogUmVzZXJ2ZSBhbiBhbW91bnQgb2Ygc3BhY2UgaW4gdGhlIGNhY2hlIGZvciB0aGUgY2FjaGUgb2JqZWN0IGF0dGFjaGVkIHRvIGEKKyAqIGNvb2tpZSBzbyB0aGF0IGEgd3JpdGUgdG8gdGhhdCBvYmplY3Qgd2l0aGluIHRoZSBzcGFjZSBjYW4gYWx3YXlzIGJlCisgKiBob25vdXJlZC4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9jYWNoaW5nL25ldGZzLWFwaS50eHQgZm9yIGEgY29tcGxldGUKKyAqIGRlc2NyaXB0aW9uLgorICovCitzdGF0aWMgaW5saW5lCitpbnQgZnNjYWNoZV9yZXNlcnZlX3NwYWNlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLCBsb2ZmX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gLUVOT0JVRlM7Cit9CisKKy8qKgorICogZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2UgLSBSZWFkIGEgcGFnZSBmcm9tIHRoZSBjYWNoZSBvciBhbGxvY2F0ZSBhIGJsb2NrCisgKiBpbiB3aGljaCB0byBzdG9yZSBpdAorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICogQHBhZ2U6IFRoZSBuZXRmcyBwYWdlIHRvIGZpbGwgaWYgcG9zc2libGUKKyAqIEBlbmRfaW9fZnVuYzogVGhlIGNhbGxiYWNrIHRvIGludm9rZSB3aGVuIGFuZCBpZiB0aGUgcGFnZSBpcyBmaWxsZWQKKyAqIEBjb250ZXh0OiBBbiBhcmJpdHJhcnkgcGllY2Ugb2YgZGF0YSB0byBwYXNzIG9uIHRvIGVuZF9pb19mdW5jKCkKKyAqIEBnZnA6IFRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG1lbW9yeSBhbGxvY2F0aW9uIHNob3VsZCBiZSBtYWRlCisgKgorICogUmVhZCBhIHBhZ2UgZnJvbSB0aGUgY2FjaGUsIG9yIGlmIHRoYXQncyBub3QgcG9zc2libGUgbWFrZSBhIHBvdGVudGlhbAorICogb25lLWJsb2NrIHJlc2VydmF0aW9uIGluIHRoZSBjYWNoZSBpbnRvIHdoaWNoIHRoZSBwYWdlIG1heSBiZSBzdG9yZWQgb25jZQorICogZmV0Y2hlZCBmcm9tIHRoZSBzZXJ2ZXIuCisgKgorICogSWYgdGhlIHBhZ2UgaXMgbm90IGJhY2tlZCBieSB0aGUgY2FjaGUgb2JqZWN0LCBvciBpZiBpdCB0aGVyZSdzIHNvbWUgcmVhc29uCisgKiBpdCBjYW4ndCBiZSwgLUVOT0JVRlMgd2lsbCBiZSByZXR1cm5lZCBhbmQgbm90aGluZyBtb3JlIHdpbGwgYmUgZG9uZSBmb3IKKyAqIHRoYXQgcGFnZS4KKyAqCisgKiBFbHNlLCBpZiB0aGF0IHBhZ2UgaXMgYmFja2VkIGJ5IHRoZSBjYWNoZSwgYSByZWFkIHdpbGwgYmUgaW5pdGlhdGVkIGRpcmVjdGx5CisgKiB0byB0aGUgbmV0ZnMncyBwYWdlIGFuZCAwIHdpbGwgYmUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbi4gIFRoZQorICogZW5kX2lvX2Z1bmMoKSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIHRlcm1pbmF0ZXMgb24gYQorICogY29tcGxldGlvbiBvciBmYWlsdXJlLiAgTm90ZSB0aGF0IHRoZSBjYWxsYmFjayBtYXkgYmUgaW52b2tlZCBiZWZvcmUgdGhlCisgKiByZXR1cm4uCisgKgorICogRWxzZSwgaWYgdGhlIHBhZ2UgaXMgdW5iYWNrZWQsIC1FTk9EQVRBIGlzIHJldHVybmVkIGFuZCBhIGJsb2NrIG1heSBoYXZlCisgKiBiZWVuIGFsbG9jYXRlZCBpbiB0aGUgY2FjaGUuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQoraW50IGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgICAgIGZzY2FjaGVfcndfY29tcGxldGVfdCBlbmRfaW9fZnVuYywKKwkJCSAgICAgICB2b2lkICpjb250ZXh0LAorCQkJICAgICAgIGdmcF90IGdmcCkKK3sKKwlpZiAoZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSkKKwkJcmV0dXJuIF9fZnNjYWNoZV9yZWFkX29yX2FsbG9jX3BhZ2UoY29va2llLCBwYWdlLCBlbmRfaW9fZnVuYywKKwkJCQkJCSAgICBjb250ZXh0LCBnZnApOworCWVsc2UKKwkJcmV0dXJuIC1FTk9CVUZTOworfQorCisvKioKKyAqIGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlcyAtIFJlYWQgcGFnZXMgZnJvbSB0aGUgY2FjaGUgYW5kL29yIGFsbG9jYXRlCisgKiBibG9ja3MgaW4gd2hpY2ggdG8gc3RvcmUgdGhlbQorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICogQG1hcHBpbmc6IFRoZSBuZXRmcyBpbm9kZSBtYXBwaW5nIHRvIHdoaWNoIHRoZSBwYWdlcyB3aWxsIGJlIGF0dGFjaGVkCisgKiBAcGFnZXM6IEEgbGlzdCBvZiBwb3RlbnRpYWwgbmV0ZnMgcGFnZXMgdG8gYmUgZmlsbGVkCisgKiBAZW5kX2lvX2Z1bmM6IFRoZSBjYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhbmQgaWYgZWFjaCBwYWdlIGlzIGZpbGxlZAorICogQGNvbnRleHQ6IEFuIGFyYml0cmFyeSBwaWVjZSBvZiBkYXRhIHRvIHBhc3Mgb24gdG8gZW5kX2lvX2Z1bmMoKQorICogQGdmcDogVGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbWVtb3J5IGFsbG9jYXRpb24gc2hvdWxkIGJlIG1hZGUKKyAqCisgKiBSZWFkIGEgc2V0IG9mIHBhZ2VzIGZyb20gdGhlIGNhY2hlLCBvciBpZiB0aGF0J3Mgbm90IHBvc3NpYmxlLCBhdHRlbXB0IHRvCisgKiBtYWtlIGEgcG90ZW50aWFsIG9uZS1ibG9jayByZXNlcnZhdGlvbiBmb3IgZWFjaCBwYWdlIGluIHRoZSBjYWNoZSBpbnRvIHdoaWNoCisgKiB0aGF0IHBhZ2UgbWF5IGJlIHN0b3JlZCBvbmNlIGZldGNoZWQgZnJvbSB0aGUgc2VydmVyLgorICoKKyAqIElmIHNvbWUgcGFnZXMgYXJlIG5vdCBiYWNrZWQgYnkgdGhlIGNhY2hlIG9iamVjdCwgb3IgaWYgaXQgdGhlcmUncyBzb21lCisgKiByZWFzb24gdGhleSBjYW4ndCBiZSwgLUVOT0JVRlMgd2lsbCBiZSByZXR1cm5lZCBhbmQgbm90aGluZyBtb3JlIHdpbGwgYmUKKyAqIGRvbmUgZm9yIHRoYXQgcGFnZXMuCisgKgorICogRWxzZSwgaWYgc29tZSBvZiB0aGUgcGFnZXMgYXJlIGJhY2tlZCBieSB0aGUgY2FjaGUsIGEgcmVhZCB3aWxsIGJlIGluaXRpYXRlZAorICogZGlyZWN0bHkgdG8gdGhlIG5ldGZzJ3MgcGFnZSBhbmQgMCB3aWxsIGJlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24uICBUaGUKKyAqIGVuZF9pb19mdW5jKCkgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiB0ZXJtaW5hdGVzIG9uIGEKKyAqIGNvbXBsZXRpb24gb3IgZmFpbHVyZS4gIE5vdGUgdGhhdCB0aGUgY2FsbGJhY2sgbWF5IGJlIGludm9rZWQgYmVmb3JlIHRoZQorICogcmV0dXJuLgorICoKKyAqIEVsc2UsIGlmIGEgcGFnZSBpcyB1bmJhY2tlZCwgLUVOT0RBVEEgaXMgcmV0dXJuZWQgYW5kIGEgYmxvY2sgbWF5IGhhdmUKKyAqIGJlZW4gYWxsb2NhdGVkIGluIHRoZSBjYWNoZS4KKyAqCisgKiBCZWNhdXNlIHRoZSBmdW5jdGlvbiBtYXkgd2FudCB0byByZXR1cm4gYWxsIG9mIC1FTk9CVUZTLCAtRU5PREFUQSBhbmQgMCBpbgorICogcmVnYXJkIHRvIGRpZmZlcmVudCBwYWdlcywgdGhlIHJldHVybiB2YWx1ZXMgYXJlIHByaW9yaXRpc2VkIGluIHRoYXQgb3JkZXIuCisgKiBBbnkgcGFnZXMgc3VibWl0dGVkIGZvciByZWFkaW5nIGFyZSByZW1vdmVkIGZyb20gdGhlIHBhZ2VzIGxpc3QuCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQoraW50IGZzY2FjaGVfcmVhZF9vcl9hbGxvY19wYWdlcyhzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKKwkJCQl1bnNpZ25lZCAqbnJfcGFnZXMsCisJCQkJZnNjYWNoZV9yd19jb21wbGV0ZV90IGVuZF9pb19mdW5jLAorCQkJCXZvaWQgKmNvbnRleHQsCisJCQkJZ2ZwX3QgZ2ZwKQoreworCWlmIChmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpKQorCQlyZXR1cm4gX19mc2NhY2hlX3JlYWRfb3JfYWxsb2NfcGFnZXMoY29va2llLCBtYXBwaW5nLCBwYWdlcywKKwkJCQkJCSAgICAgbnJfcGFnZXMsIGVuZF9pb19mdW5jLAorCQkJCQkJICAgICBjb250ZXh0LCBnZnApOworCWVsc2UKKwkJcmV0dXJuIC1FTk9CVUZTOworfQorCisvKioKKyAqIGZzY2FjaGVfYWxsb2NfcGFnZSAtIEFsbG9jYXRlIGEgYmxvY2sgaW4gd2hpY2ggdG8gc3RvcmUgYSBwYWdlCisgKiBAY29va2llOiBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgY2FjaGUgb2JqZWN0CisgKiBAcGFnZTogVGhlIG5ldGZzIHBhZ2UgdG8gYWxsb2NhdGUgYSBwYWdlIGZvcgorICogQGdmcDogVGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbWVtb3J5IGFsbG9jYXRpb24gc2hvdWxkIGJlIG1hZGUKKyAqCisgKiBSZXF1ZXN0IEFsbG9jYXRpb24gYSBibG9jayBpbiB0aGUgY2FjaGUgaW4gd2hpY2ggdG8gc3RvcmUgYSBuZXRmcyBwYWdlCisgKiB3aXRob3V0IHJldHJpZXZpbmcgYW55IGNvbnRlbnRzIGZyb20gdGhlIGNhY2hlLgorICoKKyAqIElmIHRoZSBwYWdlIGlzIG5vdCBiYWNrZWQgYnkgYSBmaWxlIHRoZW4gLUVOT0JVRlMgd2lsbCBiZSByZXR1cm5lZCBhbmQKKyAqIG5vdGhpbmcgbW9yZSB3aWxsIGJlIGRvbmUsIGFuZCBubyByZXNlcnZhdGlvbiB3aWxsIGJlIG1hZGUuCisgKgorICogRWxzZSwgYSBibG9jayB3aWxsIGJlIGFsbG9jYXRlZCBpZiBvbmUgd2Fzbid0IGFscmVhZHksIGFuZCAwIHdpbGwgYmUKKyAqIHJldHVybmVkCisgKgorICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2FjaGluZy9uZXRmcy1hcGkudHh0IGZvciBhIGNvbXBsZXRlCisgKiBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGljIGlubGluZQoraW50IGZzY2FjaGVfYWxsb2NfcGFnZShzdHJ1Y3QgZnNjYWNoZV9jb29raWUgKmNvb2tpZSwKKwkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkgICAgICAgZ2ZwX3QgZ2ZwKQoreworCWlmIChmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpKQorCQlyZXR1cm4gX19mc2NhY2hlX2FsbG9jX3BhZ2UoY29va2llLCBwYWdlLCBnZnApOworCWVsc2UKKwkJcmV0dXJuIC1FTk9CVUZTOworfQorCisvKioKKyAqIGZzY2FjaGVfd3JpdGVfcGFnZSAtIFJlcXVlc3Qgc3RvcmFnZSBvZiBhIHBhZ2UgaW4gdGhlIGNhY2hlCisgKiBAY29va2llOiBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgY2FjaGUgb2JqZWN0CisgKiBAcGFnZTogVGhlIG5ldGZzIHBhZ2UgdG8gc3RvcmUKKyAqIEBnZnA6IFRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG1lbW9yeSBhbGxvY2F0aW9uIHNob3VsZCBiZSBtYWRlCisgKgorICogUmVxdWVzdCB0aGUgY29udGVudHMgb2YgdGhlIG5ldGZzIHBhZ2UgYmUgd3JpdHRlbiBpbnRvIHRoZSBjYWNoZS4gIFRoaXMKKyAqIHJlcXVlc3QgbWF5IGJlIGlnbm9yZWQgaWYgbm8gY2FjaGUgYmxvY2sgaXMgY3VycmVudGx5IGFsbG9jYXRlZCwgaW4gd2hpY2gKKyAqIGNhc2UgaXQgd2lsbCByZXR1cm4gLUVOT0JVRlMuCisgKgorICogSWYgYSBjYWNoZSBibG9jayB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQsIGEgd3JpdGUgd2lsbCBiZSBpbml0aWF0ZWQgYW5kIDAgd2lsbAorICogYmUgcmV0dXJuZWQuICBUaGUgUEdfZnNjYWNoZV93cml0ZSBwYWdlIGJpdCBpcyBzZXQgaW1tZWRpYXRlbHkgYW5kIHdpbGwgdGhlbgorICogYmUgY2xlYXJlZCBhdCB0aGUgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgdG8gaW5kaWNhdGUgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZQorICogb2YgdGhlIG9wZXJhdGlvbi4gIE5vdGUgdGhhdCB0aGUgY29tcGxldGlvbiBtYXkgaGFwcGVuIGJlZm9yZSB0aGUgcmV0dXJuLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK2ludCBmc2NhY2hlX3dyaXRlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCSAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJICAgICAgIGdmcF90IGdmcCkKK3sKKwlpZiAoZnNjYWNoZV9jb29raWVfdmFsaWQoY29va2llKSkKKwkJcmV0dXJuIF9fZnNjYWNoZV93cml0ZV9wYWdlKGNvb2tpZSwgcGFnZSwgZ2ZwKTsKKwllbHNlCisJCXJldHVybiAtRU5PQlVGUzsKK30KKworLyoqCisgKiBmc2NhY2hlX3VuY2FjaGVfcGFnZSAtIEluZGljYXRlIHRoYXQgY2FjaGluZyBpcyBubyBsb25nZXIgcmVxdWlyZWQgb24gYSBwYWdlCisgKiBAY29va2llOiBUaGUgY29va2llIHJlcHJlc2VudGluZyB0aGUgY2FjaGUgb2JqZWN0CisgKiBAcGFnZTogVGhlIG5ldGZzIHBhZ2UgdGhhdCB3YXMgYmVpbmcgY2FjaGVkLgorICoKKyAqIFRlbGwgdGhlIGNhY2hlIHRoYXQgd2Ugbm8gbG9uZ2VyIHdhbnQgYSBwYWdlIHRvIGJlIGNhY2hlZCBhbmQgdGhhdCBpdCBzaG91bGQKKyAqIHJlbW92ZSBhbnkga25vd2xlZGdlIG9mIHRoZSBuZXRmcyBwYWdlIGl0IG1heSBoYXZlLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGNhbm5vdCBjYW5jZWwgYW55IG91dHN0YW5kaW5nIEkvTyBvcGVyYXRpb25zIGJldHdlZW4gdGhpcworICogcGFnZSBhbmQgdGhlIGNhY2hlLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZnNjYWNoZV91bmNhY2hlX3BhZ2Uoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChmc2NhY2hlX2Nvb2tpZV92YWxpZChjb29raWUpKQorCQlfX2ZzY2FjaGVfdW5jYWNoZV9wYWdlKGNvb2tpZSwgcGFnZSk7Cit9CisKKy8qKgorICogZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlIC0gQXNrIGlmIGEgcGFnZSBpcyBiZWluZyB3cml0aW5nIHRvIHRoZSBjYWNoZQorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICogQHBhZ2U6IFRoZSBuZXRmcyBwYWdlIHRoYXQgaXMgYmVpbmcgY2FjaGVkLgorICoKKyAqIEFzayB0aGUgY2FjaGUgaWYgYSBwYWdlIGlzIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIGNhY2hlLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK2Jvb2wgZnNjYWNoZV9jaGVja19wYWdlX3dyaXRlKHN0cnVjdCBmc2NhY2hlX2Nvb2tpZSAqY29va2llLAorCQkJICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkpCisJCXJldHVybiBfX2ZzY2FjaGVfY2hlY2tfcGFnZV93cml0ZShjb29raWUsIHBhZ2UpOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiBmc2NhY2hlX3dhaXRfb25fcGFnZV93cml0ZSAtIFdhaXQgZm9yIGEgcGFnZSB0byBjb21wbGV0ZSB3cml0aW5nIHRvIHRoZSBjYWNoZQorICogQGNvb2tpZTogVGhlIGNvb2tpZSByZXByZXNlbnRpbmcgdGhlIGNhY2hlIG9iamVjdAorICogQHBhZ2U6IFRoZSBuZXRmcyBwYWdlIHRoYXQgaXMgYmVpbmcgY2FjaGVkLgorICoKKyAqIEFzayB0aGUgY2FjaGUgdG8gd2FrZSB1cyB1cCB3aGVuIGEgcGFnZSBpcyBubyBsb25nZXIgYmVpbmcgd3JpdHRlbiB0byB0aGUKKyAqIGNhY2hlLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2NhY2hpbmcvbmV0ZnMtYXBpLnR4dCBmb3IgYSBjb21wbGV0ZQorICogZGVzY3JpcHRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUoc3RydWN0IGZzY2FjaGVfY29va2llICpjb29raWUsCisJCQkJc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKGZzY2FjaGVfY29va2llX3ZhbGlkKGNvb2tpZSkpCisJCV9fZnNjYWNoZV93YWl0X29uX3BhZ2Vfd3JpdGUoY29va2llLCBwYWdlKTsKK30KKworI2VuZGlmIC8qIF9MSU5VWF9GU0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaCBiL2luY2x1ZGUvbGludXgvZnNsX2RldmljZXMuaAppbmRleCA0OTUzNzA5Li5mMmE3OGI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzbF9kZXZpY2VzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mc2xfZGV2aWNlcy5oCkBAIC03MywxNCArNzMsMTUgQEAKICNkZWZpbmUgRlNMX1VTQjJfUE9SVDBfRU5BQkxFRAkweDAwMDAwMDAxCiAjZGVmaW5lIEZTTF9VU0IyX1BPUlQxX0VOQUJMRUQJMHgwMDAwMDAwMgogCitzdHJ1Y3Qgc3BpX2RldmljZTsKKwogc3RydWN0IGZzbF9zcGlfcGxhdGZvcm1fZGF0YSB7CiAJdTMyIAlpbml0aWFsX3NwbW9kZTsJLyogaW5pdGlhbCBTUE1PREUgdmFsdWUgKi8KLQl1MTYJYnVzX251bTsKKwlzMTYJYnVzX251bTsKIAlib29sCXFlX21vZGU7CiAJLyogYm9hcmQgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KIAl1MTYJbWF4X2NoaXBzZWxlY3Q7Ci0Jdm9pZAkoKmFjdGl2YXRlX2NzKSh1OCBjcywgdTggcG9sYXJpdHkpOwotCXZvaWQJKCpkZWFjdGl2YXRlX2NzKSh1OCBjcywgdTggcG9sYXJpdHkpOworCXZvaWQJKCpjc19jb250cm9sKShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBib29sIG9uKTsKIAl1MzIJc3lzY2xrOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKaW5kZXggYTdmODEzNC4uMDE1YTNkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCkBAIC0xLDE1ICsxLDE4IEBACiAjaWZuZGVmIF9MSU5VWF9GVFJBQ0VfSAogI2RlZmluZSBfTElOVVhfRlRSQUNFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2VfY2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKIApAQCAtOTUsOSArOTgsNDEgQEAKIAkJICAgbG9mZl90ICpwcG9zKTsKICNlbmRpZgogCitzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCWNoYXIJCQkqbmFtZTsKKwlpbnQJCQkoKmZ1bmMpKGNoYXIgKmZ1bmMsIGNoYXIgKmNtZCwKKwkJCQkJY2hhciAqcGFyYW1zLCBpbnQgZW5hYmxlKTsKK307CisKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKLS8qIGFzbS9mdHJhY2UuaCBtdXN0IGJlIGRlZmluZWQgZm9yIGFyY2hzIHN1cHBvcnRpbmcgZHluYW1pYyBmdHJhY2UgKi8KLSNpbmNsdWRlIDxhc20vZnRyYWNlLmg+CisKK2ludCBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wcmVwYXJlKHZvaWQpOworaW50IGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3Bvc3RfcHJvY2Vzcyh2b2lkKTsKKworc3RydWN0IHNlcV9maWxlOworCitzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyB7CisJdm9pZAkJCSgqZnVuYykodW5zaWduZWQgbG9uZyBpcCwKKwkJCQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsCisJCQkJCXZvaWQgKipkYXRhKTsKKwlpbnQJCQkoKmNhbGxiYWNrKSh1bnNpZ25lZCBsb25nIGlwLCB2b2lkICoqZGF0YSk7CisJdm9pZAkJCSgqZnJlZSkodm9pZCAqKmRhdGEpOworCWludAkJCSgqcHJpbnQpKHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgaXAsCisJCQkJCSBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzLAorCQkJCQkgdm9pZCAqZGF0YSk7Cit9OworCitleHRlcm4gaW50CityZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoY2hhciAqZ2xvYiwgc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgKm9wcywKKwkJCSAgICAgIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQKK3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKGNoYXIgKmdsb2IsIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMsCisJCQkJdm9pZCAqZGF0YSk7CitleHRlcm4gdm9pZAordW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmVfZnVuYyhjaGFyICpnbG9iLCBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzKTsKK2V4dGVybiB2b2lkIHVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlX2FsbChjaGFyICpnbG9iKTsKIAogZW51bSB7CiAJRlRSQUNFX0ZMX0ZSRUUJCT0gKDEgPDwgMCksCkBAIC0xMTAsMTUgKzE0NSwyMyBAQAogfTsKIAogc3RydWN0IGR5bl9mdHJhY2UgewotCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQl1bnNpZ25lZCBsb25nCQlpcDsgLyogYWRkcmVzcyBvZiBtY291bnQgY2FsbC1zaXRlICovCi0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0Jc3RydWN0IGR5bl9hcmNoX2Z0cmFjZQlhcmNoOworCXVuaW9uIHsKKwkJdW5zaWduZWQgbG9uZwkJaXA7IC8qIGFkZHJlc3Mgb2YgbWNvdW50IGNhbGwtc2l0ZSAqLworCQlzdHJ1Y3QgZHluX2Z0cmFjZQkqZnJlZWxpc3Q7CisJfTsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCQlzdHJ1Y3QgZHluX2Z0cmFjZQkqbmV3bGlzdDsKKwl9OworCXN0cnVjdCBkeW5fYXJjaF9mdHJhY2UJCWFyY2g7CiB9OwogCiBpbnQgZnRyYWNlX2ZvcmNlX3VwZGF0ZSh2b2lkKTsKIHZvaWQgZnRyYWNlX3NldF9maWx0ZXIodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgcmVzZXQpOwogCitpbnQgcmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgKmNtZCk7CitpbnQgdW5yZWdpc3Rlcl9mdHJhY2VfY29tbWFuZChzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCAqY21kKTsKKwogLyogZGVmaW5lZCBpbiBhcmNoICovCiBleHRlcm4gaW50IGZ0cmFjZV9pcF9jb252ZXJ0ZWQodW5zaWduZWQgbG9uZyBpcCk7CiBleHRlcm4gaW50IGZ0cmFjZV9keW5fYXJjaF9pbml0KHZvaWQgKmRhdGEpOwpAQCAtMTI2LDYgKzE2OSwxMCBAQAogZXh0ZXJuIHZvaWQgZnRyYWNlX2NhbGxlcih2b2lkKTsKIGV4dGVybiB2b2lkIGZ0cmFjZV9jYWxsKHZvaWQpOwogZXh0ZXJuIHZvaWQgbWNvdW50X2NhbGwodm9pZCk7CisKKyNpZm5kZWYgRlRSQUNFX0FERFIKKyNkZWZpbmUgRlRSQUNFX0FERFIgKCh1bnNpZ25lZCBsb25nKWZ0cmFjZV9jYWxsZXIpCisjZW5kaWYKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiBleHRlcm4gdm9pZCBmdHJhY2VfZ3JhcGhfY2FsbGVyKHZvaWQpOwogZXh0ZXJuIGludCBmdHJhY2VfZW5hYmxlX2Z0cmFjZV9ncmFwaF9jYWxsZXIodm9pZCk7CkBAIC0xMzYsNyArMTgzLDcgQEAKICNlbmRpZgogCiAvKioKLSAqIGZ0cmFjZV9tYWtlX25vcCAtIGNvbnZlcnQgY29kZSBpbnRvIHRvcAorICogZnRyYWNlX21ha2Vfbm9wIC0gY29udmVydCBjb2RlIGludG8gbm9wCiAgKiBAbW9kOiBtb2R1bGUgc3RydWN0dXJlIGlmIGNhbGxlZCBieSBtb2R1bGUgbG9hZCBpbml0aWFsaXphdGlvbgogICogQHJlYzogdGhlIG1jb3VudCBjYWxsIHNpdGUgcmVjb3JkCiAgKiBAYWRkcjogdGhlIGFkZHJlc3MgdGhhdCB0aGUgY2FsbCBzaXRlIHNob3VsZCBiZSBjYWxsaW5nCkBAIC0xODEsNyArMjI4LDYgQEAKICAqLwogZXh0ZXJuIGludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLQogLyogTWF5IGJlIGRlZmluZWQgaW4gYXJjaCAqLwogZXh0ZXJuIGludCBmdHJhY2VfYXJjaF9yZWFkX2R5bl9pbmZvKGNoYXIgKmJ1ZiwgaW50IHNpemUpOwogCkBAIC0xOTgsNiArMjQ0LDE0IEBACiAjIGRlZmluZSBmdHJhY2VfZGlzYWJsZV9kYWVtb24oKQkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgZnRyYWNlX2VuYWJsZV9kYWVtb24oKQkJCWRvIHsgfSB3aGlsZSAoMCkKIHN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfcmVsZWFzZSh2b2lkICpzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpjbWQpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CitzdGF0aWMgaW5saW5lIGludCB1bnJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKGNoYXIgKmNtZF9uYW1lKQoreworCXJldHVybiAtRUlOVkFMOworfQogI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwogCiAvKiB0b3RhbGx5IGRpc2FibGUgZnRyYWNlIC0gY2FuIG5vdCByZS1lbmFibGUgYWZ0ZXIgdGhpcyAqLwpAQCAtMjMzLDI0ICsyODcsMjUgQEAKICNlbmRpZgogfQogCi0jaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKLS8qIFRPRE86IG5lZWQgdG8gZml4IHRoaXMgZm9yIEFSTSAqLwotIyBkZWZpbmUgQ0FMTEVSX0FERFIwICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCi0jIGRlZmluZSBDQUxMRVJfQUREUjEgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygxKSkKLSMgZGVmaW5lIENBTExFUl9BRERSMiAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDIpKQotIyBkZWZpbmUgQ0FMTEVSX0FERFIzICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMykpCi0jIGRlZmluZSBDQUxMRVJfQUREUjQgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyg0KSkKLSMgZGVmaW5lIENBTExFUl9BRERSNSAoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDUpKQotIyBkZWZpbmUgQ0FMTEVSX0FERFI2ICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNikpCi0jZWxzZQotIyBkZWZpbmUgQ0FMTEVSX0FERFIwICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCi0jIGRlZmluZSBDQUxMRVJfQUREUjEgMFVMCi0jIGRlZmluZSBDQUxMRVJfQUREUjIgMFVMCi0jIGRlZmluZSBDQUxMRVJfQUREUjMgMFVMCi0jIGRlZmluZSBDQUxMRVJfQUREUjQgMFVMCi0jIGRlZmluZSBDQUxMRVJfQUREUjUgMFVMCi0jIGRlZmluZSBDQUxMRVJfQUREUjYgMFVMCi0jZW5kaWYKKyNpZm5kZWYgSEFWRV9BUkNIX0NBTExFUl9BRERSCisjIGlmZGVmIENPTkZJR19GUkFNRV9QT0lOVEVSCisjICBkZWZpbmUgQ0FMTEVSX0FERFIwICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCisjICBkZWZpbmUgQ0FMTEVSX0FERFIxICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMSkpCisjICBkZWZpbmUgQ0FMTEVSX0FERFIyICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMikpCisjICBkZWZpbmUgQ0FMTEVSX0FERFIzICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMykpCisjICBkZWZpbmUgQ0FMTEVSX0FERFI0ICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNCkpCisjICBkZWZpbmUgQ0FMTEVSX0FERFI1ICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNSkpCisjICBkZWZpbmUgQ0FMTEVSX0FERFI2ICgodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoNikpCisjIGVsc2UKKyMgIGRlZmluZSBDQUxMRVJfQUREUjAgKCh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKKyMgIGRlZmluZSBDQUxMRVJfQUREUjEgMFVMCisjICBkZWZpbmUgQ0FMTEVSX0FERFIyIDBVTAorIyAgZGVmaW5lIENBTExFUl9BRERSMyAwVUwKKyMgIGRlZmluZSBDQUxMRVJfQUREUjQgMFVMCisjICBkZWZpbmUgQ0FMTEVSX0FERFI1IDBVTAorIyAgZGVmaW5lIENBTExFUl9BRERSNiAwVUwKKyMgZW5kaWYKKyNlbmRpZiAvKiBpZm5kZWYgSEFWRV9BUkNIX0NBTExFUl9BRERSICovCiAKICNpZmRlZiBDT05GSUdfSVJRU09GRl9UUkFDRVIKICAgZXh0ZXJuIHZvaWQgdGltZV9oYXJkaXJxc19vbih1bnNpZ25lZCBsb25nIGEwLCB1bnNpZ25lZCBsb25nIGExKTsKQEAgLTI2OCw1NCArMzIzLDYgQEAKICMgZGVmaW5lIHRyYWNlX3ByZWVtcHRfb2ZmKGEwLCBhMSkJCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1RSQUNJTkcKLWV4dGVybiBpbnQgZnRyYWNlX2R1bXBfb25fb29wczsKLQotZXh0ZXJuIHZvaWQgdHJhY2luZ19zdGFydCh2b2lkKTsKLWV4dGVybiB2b2lkIHRyYWNpbmdfc3RvcCh2b2lkKTsKLWV4dGVybiB2b2lkIGZ0cmFjZV9vZmZfcGVybWFuZW50KHZvaWQpOwotCi1leHRlcm4gdm9pZAotZnRyYWNlX3NwZWNpYWwodW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMyk7Ci0KLS8qKgotICogZnRyYWNlX3ByaW50ayAtIHByaW50ZiBmb3JtYXR0aW5nIGluIHRoZSBmdHJhY2UgYnVmZmVyCi0gKiBAZm10OiB0aGUgcHJpbnRmIGZvcm1hdCBmb3IgcHJpbnRpbmcKLSAqCi0gKiBOb3RlOiBfX2Z0cmFjZV9wcmludGsgaXMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gZm9yIGZ0cmFjZV9wcmludGsgYW5kCi0gKiAgICAgICB0aGUgQGlwIGlzIHBhc3NlZCBpbiB2aWEgdGhlIGZ0cmFjZV9wcmludGsgbWFjcm8uCi0gKgotICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBrZXJuZWwgZGV2ZWxvcGVyIHRvIGRlYnVnIGZhc3QgcGF0aCBzZWN0aW9ucwotICogdGhhdCBwcmludGsgaXMgbm90IGFwcHJvcHJpYXRlIGZvci4gQnkgc2NhdHRlcmluZyBpbiB2YXJpb3VzCi0gKiBwcmludGsgbGlrZSB0cmFjaW5nIGluIHRoZSBjb2RlLCBhIGRldmVsb3BlciBjYW4gcXVpY2tseSBzZWUKLSAqIHdoZXJlIHByb2JsZW1zIGFyZSBvY2N1cnJpbmcuCi0gKgotICogVGhpcyBpcyBpbnRlbmRlZCBhcyBhIGRlYnVnZ2luZyB0b29sIGZvciB0aGUgZGV2ZWxvcGVyIG9ubHkuCi0gKiBQbGVhc2UgcmVmcmFpbiBmcm9tIGxlYXZpbmcgZnRyYWNlX3ByaW50a3Mgc2NhdHRlcmVkIGFyb3VuZCBpbgotICogeW91ciBjb2RlLgotICovCi0jIGRlZmluZSBmdHJhY2VfcHJpbnRrKGZtdC4uLikgX19mdHJhY2VfcHJpbnRrKF9USElTX0lQXywgZm10KQotZXh0ZXJuIGludAotX19mdHJhY2VfcHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKLWV4dGVybiB2b2lkIGZ0cmFjZV9kdW1wKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZAotZnRyYWNlX3NwZWNpYWwodW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMykgeyB9Ci1zdGF0aWMgaW5saW5lIGludAotZnRyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJhY2luZ19zdGFydCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFjaW5nX3N0b3Aodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX29mZl9wZXJtYW5lbnQodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIGludAotZnRyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZHVtcCh2b2lkKSB7IH0KLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiBleHRlcm4gdm9pZCBmdHJhY2VfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIGZ0cmFjZV9pbml0X21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsCkBAIC0zMjcsMzYgKzMzNCw2IEBACiAJCSAgIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQpIHsgfQogI2VuZGlmCiAKLWVudW0gewotCVBPV0VSX05PTkUgPSAwLAotCVBPV0VSX0NTVEFURSA9IDEsCi0JUE9XRVJfUFNUQVRFID0gMiwKLX07Ci0KLXN0cnVjdCBwb3dlcl90cmFjZSB7Ci0jaWZkZWYgQ09ORklHX1BPV0VSX1RSQUNFUgotCWt0aW1lX3QJCQlzdGFtcDsKLQlrdGltZV90CQkJZW5kOwotCWludAkJCXR5cGU7Ci0JaW50CQkJc3RhdGU7Ci0jZW5kaWYKLX07Ci0KLSNpZmRlZiBDT05GSUdfUE9XRVJfVFJBQ0VSCi1leHRlcm4gdm9pZCB0cmFjZV9wb3dlcl9zdGFydChzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCQkJdW5zaWduZWQgaW50IHN0YXRlKTsKLWV4dGVybiB2b2lkIHRyYWNlX3Bvd2VyX21hcmsoc3RydWN0IHBvd2VyX3RyYWNlICppdCwgdW5zaWduZWQgaW50IHR5cGUsCi0JCQkJCXVuc2lnbmVkIGludCBzdGF0ZSk7Ci1leHRlcm4gdm9pZCB0cmFjZV9wb3dlcl9lbmQoc3RydWN0IHBvd2VyX3RyYWNlICppdCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX3Bvd2VyX3N0YXJ0KHN0cnVjdCBwb3dlcl90cmFjZSAqaXQsIHVuc2lnbmVkIGludCB0eXBlLAotCQkJCQl1bnNpZ25lZCBpbnQgc3RhdGUpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIHRyYWNlX3Bvd2VyX21hcmsoc3RydWN0IHBvd2VyX3RyYWNlICppdCwgdW5zaWduZWQgaW50IHR5cGUsCi0JCQkJCXVuc2lnbmVkIGludCBzdGF0ZSkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfcG93ZXJfZW5kKHN0cnVjdCBwb3dlcl90cmFjZSAqaXQpIHsgfQotI2VuZGlmCi0KLQogLyoKICAqIFN0cnVjdHVyZSB0aGF0IGRlZmluZXMgYW4gZW50cnkgZnVuY3Rpb24gdHJhY2UuCiAgKi8KQEAgLTM5OCw4ICszNzUsNyBAQAogZXh0ZXJuIHZvaWQgcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7CiAKIGV4dGVybiBpbnQKLWZ0cmFjZV9wdXNoX3JldHVybl90cmFjZSh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBsb25nIHRpbWUsCi0JCQkgdW5zaWduZWQgbG9uZyBmdW5jLCBpbnQgKmRlcHRoKTsKK2Z0cmFjZV9wdXNoX3JldHVybl90cmFjZSh1bnNpZ25lZCBsb25nIHJldCwgdW5zaWduZWQgbG9uZyBmdW5jLCBpbnQgKmRlcHRoKTsKIGV4dGVybiB2b2lkCiBmdHJhY2VfcG9wX3JldHVybl90cmFjZShzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHVuc2lnbmVkIGxvbmcgKnJldCk7CiAKQEAgLTUxNCw2ICs0OTAsNTAgQEAKIAlyZXR1cm4gdHNrLT50cmFjZSAmIFRTS19UUkFDRV9GTF9HUkFQSDsKIH0KIAorZXh0ZXJuIGludCBmdHJhY2VfZHVtcF9vbl9vb3BzOworCiAjZW5kaWYgLyogQ09ORklHX1RSQUNJTkcgKi8KIAorCisjaWZkZWYgQ09ORklHX0hXX0JSQU5DSF9UUkFDRVIKKwordm9pZCB0cmFjZV9od19icmFuY2godTY0IGZyb20sIHU2NCB0byk7Cit2b2lkIHRyYWNlX2h3X2JyYW5jaF9vb3BzKHZvaWQpOworCisjZWxzZSAvKiBDT05GSUdfSFdfQlJBTkNIX1RSQUNFUiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfaHdfYnJhbmNoKHU2NCBmcm9tLCB1NjQgdG8pIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2VfaHdfYnJhbmNoX29vcHModm9pZCkge30KKworI2VuZGlmIC8qIENPTkZJR19IV19CUkFOQ0hfVFJBQ0VSICovCisKKy8qCisgKiBBIHN5c2NhbGwgZW50cnkgaW4gdGhlIGZ0cmFjZSBzeXNjYWxscyBhcnJheS4KKyAqCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgc3lzY2FsbAorICogQG5iX2FyZ3M6IG51bWJlciBvZiBwYXJhbWV0ZXJzIGl0IHRha2VzCisgKiBAdHlwZXM6IGxpc3Qgb2YgdHlwZXMgYXMgc3RyaW5ncworICogQGFyZ3M6IGxpc3Qgb2YgYXJncyBhcyBzdHJpbmdzIChhcmdzW2ldIG1hdGNoZXMgdHlwZXNbaV0pCisgKi8KK3N0cnVjdCBzeXNjYWxsX21ldGFkYXRhIHsKKwljb25zdCBjaGFyCSpuYW1lOworCWludAkJbmJfYXJnczsKKwljb25zdCBjaGFyCSoqdHlwZXM7CisJY29uc3QgY2hhcgkqKmFyZ3M7Cit9OworCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUworZXh0ZXJuIHZvaWQgYXJjaF9pbml0X2Z0cmFjZV9zeXNjYWxscyh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3lzY2FsbF9ucl90b19tZXRhKGludCBucik7CitleHRlcm4gdm9pZCBzdGFydF9mdHJhY2Vfc3lzY2FsbHModm9pZCk7CitleHRlcm4gdm9pZCBzdG9wX2Z0cmFjZV9zeXNjYWxscyh2b2lkKTsKK2V4dGVybiB2b2lkIGZ0cmFjZV9zeXNjYWxsX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIGZ0cmFjZV9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF9mdHJhY2Vfc3lzY2FsbHModm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcF9mdHJhY2Vfc3lzY2FsbHModm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX3N5c2NhbGxfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfQorI2VuZGlmCisKICNlbmRpZiAvKiBfTElOVVhfRlRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2lycS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfaXJxLmgKaW5kZXggMzY2YTA1NC4uZGNhN2JmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2VfaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfaXJxLmgKQEAgLTIsNyArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9GVFJBQ0VfSVJRX0gKIAogCi0jaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpIHx8IGRlZmluZWQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikKKyNpZmRlZiBDT05GSUdfRlRSQUNFX05NSV9FTlRFUgogZXh0ZXJuIHZvaWQgZnRyYWNlX25taV9lbnRlcih2b2lkKTsKIGV4dGVybiB2b2lkIGZ0cmFjZV9ubWlfZXhpdCh2b2lkKTsKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCBkZDIwY2Q3Li4wYmJjMTVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+CiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oYXJkaXJxLmggYi9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaAppbmRleCBmODMyODgzLi5mYWExY2Y4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hhcmRpcnEuaApAQCAtMTUsNTUgKzE1LDYxIEBACiAgKiAtIGJpdHMgMC03IGFyZSB0aGUgcHJlZW1wdGlvbiBjb3VudCAobWF4IHByZWVtcHRpb24gZGVwdGg6IDI1NikKICAqIC0gYml0cyA4LTE1IGFyZSB0aGUgc29mdGlycSBjb3VudCAobWF4ICMgb2Ygc29mdGlycXM6IDI1NikKICAqCi0gKiBUaGUgaGFyZGlycSBjb3VudCBjYW4gYmUgb3ZlcnJpZGRlbiBwZXIgYXJjaGl0ZWN0dXJlLCB0aGUgZGVmYXVsdCBpczoKKyAqIFRoZSBoYXJkaXJxIGNvdW50IGNhbiBpbiB0aGVvcnkgcmVhY2ggdGhlIHNhbWUgYXMgTlJfSVJRUy4KKyAqIEluIHJlYWxpdHksIHRoZSBudW1iZXIgb2YgbmVzdGVkIElSUVMgaXMgbGltaXRlZCB0byB0aGUgc3RhY2sKKyAqIHNpemUgYXMgd2VsbC4gRm9yIGFyY2hzIHdpdGggb3ZlciAxMDAwIElSUVMgaXQgaXMgbm90IHByYWN0aWNhbAorICogdG8gZXhwZWN0IHRoYXQgdGhleSB3aWxsIGFsbCBuZXN0LiBXZSBnaXZlIGEgbWF4IG9mIDEwIGJpdHMgZm9yCisgKiBoYXJkaXJxIG5lc3RpbmcuIEFuIGFyY2ggbWF5IGNob29zZSB0byBnaXZlIGxlc3MgdGhhbiAxMCBiaXRzLgorICogbTY4ayBleHBlY3RzIGl0IHRvIGJlIDguCiAgKgotICogLSBiaXRzIDE2LTI3IGFyZSB0aGUgaGFyZGlycSBjb3VudCAobWF4ICMgb2YgaGFyZGlycXM6IDQwOTYpCi0gKiAtICggYml0IDI4IGlzIHRoZSBQUkVFTVBUX0FDVElWRSBmbGFnLiApCisgKiAtIGJpdHMgMTYtMjUgYXJlIHRoZSBoYXJkaXJxIGNvdW50IChtYXggIyBvZiBuZXN0ZWQgaGFyZGlycXM6IDEwMjQpCisgKiAtIGJpdCAyNiBpcyB0aGUgTk1JX01BU0sKKyAqIC0gYml0IDI4IGlzIHRoZSBQUkVFTVBUX0FDVElWRSBmbGFnCiAgKgogICogUFJFRU1QVF9NQVNLOiAweDAwMDAwMGZmCiAgKiBTT0ZUSVJRX01BU0s6IDB4MDAwMGZmMDAKLSAqIEhBUkRJUlFfTUFTSzogMHgwZmZmMDAwMAorICogSEFSRElSUV9NQVNLOiAweDAzZmYwMDAwCisgKiAgICAgTk1JX01BU0s6IDB4MDQwMDAwMDAKICAqLwogI2RlZmluZSBQUkVFTVBUX0JJVFMJOAogI2RlZmluZSBTT0ZUSVJRX0JJVFMJOAorI2RlZmluZSBOTUlfQklUUwkxCisKKyNkZWZpbmUgTUFYX0hBUkRJUlFfQklUUyAxMAogCiAjaWZuZGVmIEhBUkRJUlFfQklUUwotI2RlZmluZSBIQVJESVJRX0JJVFMJMTIKLQotI2lmbmRlZiBNQVhfSEFSRElSUVNfUEVSX0NQVQotI2RlZmluZSBNQVhfSEFSRElSUVNfUEVSX0NQVSBOUl9JUlFTCisjIGRlZmluZSBIQVJESVJRX0JJVFMJTUFYX0hBUkRJUlFfQklUUwogI2VuZGlmCiAKLS8qCi0gKiBUaGUgaGFyZGlycSBtYXNrIGhhcyB0byBiZSBsYXJnZSBlbm91Z2ggdG8gaGF2ZSBzcGFjZSBmb3IgcG90ZW50aWFsbHkKLSAqIGFsbCBJUlEgc291cmNlcyBpbiB0aGUgc3lzdGVtIG5lc3Rpbmcgb24gYSBzaW5nbGUgQ1BVLgotICovCi0jaWYgKDEgPDwgSEFSRElSUV9CSVRTKSA8IE1BWF9IQVJESVJRU19QRVJfQ1BVCi0jIGVycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQotI2VuZGlmCisjaWYgSEFSRElSUV9CSVRTID4gTUFYX0hBUkRJUlFfQklUUworI2Vycm9yIEhBUkRJUlFfQklUUyB0b28gaGlnaCEKICNlbmRpZgogCiAjZGVmaW5lIFBSRUVNUFRfU0hJRlQJMAogI2RlZmluZSBTT0ZUSVJRX1NISUZUCShQUkVFTVBUX1NISUZUICsgUFJFRU1QVF9CSVRTKQogI2RlZmluZSBIQVJESVJRX1NISUZUCShTT0ZUSVJRX1NISUZUICsgU09GVElSUV9CSVRTKQorI2RlZmluZSBOTUlfU0hJRlQJKEhBUkRJUlFfU0hJRlQgKyBIQVJESVJRX0JJVFMpCiAKICNkZWZpbmUgX19JUlFfTUFTSyh4KQkoKDFVTCA8PCAoeCkpLTEpCiAKICNkZWZpbmUgUFJFRU1QVF9NQVNLCShfX0lSUV9NQVNLKFBSRUVNUFRfQklUUykgPDwgUFJFRU1QVF9TSElGVCkKICNkZWZpbmUgU09GVElSUV9NQVNLCShfX0lSUV9NQVNLKFNPRlRJUlFfQklUUykgPDwgU09GVElSUV9TSElGVCkKICNkZWZpbmUgSEFSRElSUV9NQVNLCShfX0lSUV9NQVNLKEhBUkRJUlFfQklUUykgPDwgSEFSRElSUV9TSElGVCkKKyNkZWZpbmUgTk1JX01BU0sJKF9fSVJRX01BU0soTk1JX0JJVFMpICAgICA8PCBOTUlfU0hJRlQpCiAKICNkZWZpbmUgUFJFRU1QVF9PRkZTRVQJKDFVTCA8PCBQUkVFTVBUX1NISUZUKQogI2RlZmluZSBTT0ZUSVJRX09GRlNFVAkoMVVMIDw8IFNPRlRJUlFfU0hJRlQpCiAjZGVmaW5lIEhBUkRJUlFfT0ZGU0VUCSgxVUwgPDwgSEFSRElSUV9TSElGVCkKKyNkZWZpbmUgTk1JX09GRlNFVAkoMVVMIDw8IE5NSV9TSElGVCkKIAotI2lmIFBSRUVNUFRfQUNUSVZFIDwgKDEgPDwgKEhBUkRJUlFfU0hJRlQgKyBIQVJESVJRX0JJVFMpKQorI2lmIFBSRUVNUFRfQUNUSVZFIDwgKDEgPDwgKE5NSV9TSElGVCArIE5NSV9CSVRTKSkKICNlcnJvciBQUkVFTVBUX0FDVElWRSBpcyB0b28gbG93IQogI2VuZGlmCiAKICNkZWZpbmUgaGFyZGlycV9jb3VudCgpCShwcmVlbXB0X2NvdW50KCkgJiBIQVJESVJRX01BU0spCiAjZGVmaW5lIHNvZnRpcnFfY291bnQoKQkocHJlZW1wdF9jb3VudCgpICYgU09GVElSUV9NQVNLKQotI2RlZmluZSBpcnFfY291bnQoKQkocHJlZW1wdF9jb3VudCgpICYgKEhBUkRJUlFfTUFTSyB8IFNPRlRJUlFfTUFTSykpCisjZGVmaW5lIGlycV9jb3VudCgpCShwcmVlbXB0X2NvdW50KCkgJiAoSEFSRElSUV9NQVNLIHwgU09GVElSUV9NQVNLIFwKKwkJCQkgfCBOTUlfTUFTSykpCiAKIC8qCiAgKiBBcmUgd2UgZG9pbmcgYm90dG9tIGhhbGYgb3IgaGFyZHdhcmUgaW50ZXJydXB0IHByb2Nlc3Npbmc/CkBAIC03Myw2ICs3OSwxMSBAQAogI2RlZmluZSBpbl9zb2Z0aXJxKCkJCShzb2Z0aXJxX2NvdW50KCkpCiAjZGVmaW5lIGluX2ludGVycnVwdCgpCQkoaXJxX2NvdW50KCkpCiAKKy8qCisgKiBBcmUgd2UgaW4gTk1JIGNvbnRleHQ/CisgKi8KKyNkZWZpbmUgaW5fbm1pKCkJKHByZWVtcHRfY291bnQoKSAmIE5NSV9NQVNLKQorCiAjaWYgZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKICMgZGVmaW5lIFBSRUVNUFRfSU5BVE9NSUNfQkFTRSBrZXJuZWxfbG9ja2VkKCkKICMgZGVmaW5lIFBSRUVNUFRfQ0hFQ0tfT0ZGU0VUIDEKQEAgLTE2NCwyMCArMTc1LDI0IEBACiAgKi8KIGV4dGVybiB2b2lkIGlycV9leGl0KHZvaWQpOwogCi0jZGVmaW5lIG5taV9lbnRlcigpCQkJCVwKLQlkbyB7CQkJCQlcCi0JCWZ0cmFjZV9ubWlfZW50ZXIoKTsJCVwKLQkJbG9ja2RlcF9vZmYoKTsJCQlcCi0JCXJjdV9ubWlfZW50ZXIoKTsJCVwKLQkJX19pcnFfZW50ZXIoKTsJCQlcCisjZGVmaW5lIG5taV9lbnRlcigpCQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlmdHJhY2Vfbm1pX2VudGVyKCk7CQkJCVwKKwkJQlVHX09OKGluX25taSgpKTsJCQkJXAorCQlhZGRfcHJlZW1wdF9jb3VudChOTUlfT0ZGU0VUICsgSEFSRElSUV9PRkZTRVQpOwlcCisJCWxvY2tkZXBfb2ZmKCk7CQkJCQlcCisJCXJjdV9ubWlfZW50ZXIoKTsJCQkJXAorCQl0cmFjZV9oYXJkaXJxX2VudGVyKCk7CQkJCVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIG5taV9leGl0KCkJCQkJXAotCWRvIHsJCQkJCVwKLQkJX19pcnFfZXhpdCgpOwkJCVwKLQkJcmN1X25taV9leGl0KCk7CQkJXAotCQlsb2NrZGVwX29uKCk7CQkJXAotCQlmdHJhY2Vfbm1pX2V4aXQoKTsJCVwKKyNkZWZpbmUgbm1pX2V4aXQoKQkJCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJdHJhY2VfaGFyZGlycV9leGl0KCk7CQkJCVwKKwkJcmN1X25taV9leGl0KCk7CQkJCQlcCisJCWxvY2tkZXBfb24oKTsJCQkJCVwKKwkJQlVHX09OKCFpbl9ubWkoKSk7CQkJCVwKKwkJc3ViX3ByZWVtcHRfY291bnQoTk1JX09GRlNFVCArIEhBUkRJUlFfT0ZGU0VUKTsJXAorCQlmdHJhY2Vfbm1pX2V4aXQoKTsJCQkJXAogCX0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiBMSU5VWF9IQVJESVJRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGRyZWcuaCBiL2luY2x1ZGUvbGludXgvaGRyZWcuaAppbmRleCBlZDIxYmQzLi4yOWVlMjg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hkcmVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9oZHJlZy5oCkBAIC0xLDY4ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX0hEUkVHX0gKICNkZWZpbmUgX0xJTlVYX0hEUkVHX0gKIAotI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9hdGEuaD4KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBzb21lIGRlZmluZXMgZm9yIHRoZSBBVC1oZC1jb250cm9sbGVyLgotICogVmFyaW91cyBzb3VyY2VzLgotICovCi0KLS8qIGlkZS5jIGhhcyBpdHMgb3duIHBvcnQgZGVmaW5pdGlvbnMgaW4gImlkZS5oIiAqLwotCi0jZGVmaW5lIEhEX0lSUQkJMTQKLQotLyogSGQgY29udHJvbGxlciByZWdzLiBSZWY6IElCTSBBVCBCaW9zLWxpc3RpbmcgKi8KLSNkZWZpbmUgSERfREFUQQkJMHgxZjAJCS8qIF9DVEwgd2hlbiB3cml0aW5nICovCi0jZGVmaW5lIEhEX0VSUk9SCTB4MWYxCQkvKiBzZWUgZXJyLWJpdHMgKi8KLSNkZWZpbmUgSERfTlNFQ1RPUgkweDFmMgkJLyogbnIgb2Ygc2VjdG9ycyB0byByZWFkL3dyaXRlICovCi0jZGVmaW5lIEhEX1NFQ1RPUgkweDFmMwkJLyogc3RhcnRpbmcgc2VjdG9yICovCi0jZGVmaW5lIEhEX0xDWUwJCTB4MWY0CQkvKiBzdGFydGluZyBjeWxpbmRlciAqLwotI2RlZmluZSBIRF9IQ1lMCQkweDFmNQkJLyogaGlnaCBieXRlIG9mIHN0YXJ0aW5nIGN5bCAqLwotI2RlZmluZSBIRF9DVVJSRU5UCTB4MWY2CQkvKiAxMDFkaGhoaCAsIGQ9ZHJpdmUsIGhoaGg9aGVhZCAqLwotI2RlZmluZSBIRF9TVEFUVVMJMHgxZjcJCS8qIHNlZSBzdGF0dXMtYml0cyAqLwotI2RlZmluZSBIRF9GRUFUVVJFCUhEX0VSUk9SCS8qIHNhbWUgaW8gYWRkcmVzcywgcmVhZD1lcnJvciwgd3JpdGU9ZmVhdHVyZSAqLwotI2RlZmluZSBIRF9QUkVDT01QCUhEX0ZFQVRVUkUJLyogb2Jzb2xldGUgdXNlIG9mIHRoaXMgcG9ydCAtIHByZWRhdGVzIElERSAqLwotI2RlZmluZSBIRF9DT01NQU5ECUhEX1NUQVRVUwkvKiBzYW1lIGlvIGFkZHJlc3MsIHJlYWQ9c3RhdHVzLCB3cml0ZT1jbWQgKi8KLQotI2RlZmluZSBIRF9DTUQJCTB4M2Y2CQkvKiB1c2VkIGZvciByZXNldHMgKi8KLSNkZWZpbmUgSERfQUxUU1RBVFVTCTB4M2Y2CQkvKiBzYW1lIGFzIEhEX1NUQVRVUyBidXQgZG9lc24ndCBjbGVhciBpcnEgKi8KLQotLyogcmVtYWluZGVyIGlzIHNoYXJlZCBiZXR3ZWVuIGhkLmMsIGlkZS5jLCBpZGUtY2QuYywgYW5kIHRoZSBoZHBhcm0gdXRpbGl0eSAqLwotCi0vKiBCaXRzIG9mIEhEX1NUQVRVUyAqLwotI2RlZmluZSBFUlJfU1RBVAkJMHgwMQotI2RlZmluZSBJTkRFWF9TVEFUCQkweDAyCi0jZGVmaW5lIEVDQ19TVEFUCQkweDA0CS8qIENvcnJlY3RlZCBlcnJvciAqLwotI2RlZmluZSBEUlFfU1RBVAkJMHgwOAotI2RlZmluZSBTRUVLX1NUQVQJCTB4MTAKLSNkZWZpbmUgU1JWX1NUQVQJCTB4MTAKLSNkZWZpbmUgV1JFUlJfU1RBVAkJMHgyMAotI2RlZmluZSBSRUFEWV9TVEFUCQkweDQwCi0jZGVmaW5lIEJVU1lfU1RBVAkJMHg4MAotCi0vKiBCaXRzIGZvciBIRF9FUlJPUiAqLwotI2RlZmluZSBNQVJLX0VSUgkJMHgwMQkvKiBCYWQgYWRkcmVzcyBtYXJrICovCi0jZGVmaW5lIElMSV9FUlIJCQkweDAxCS8qIElsbGVnYWwgTGVuZ3RoIEluZGljYXRpb24gKEFUQVBJKSAqLwotI2RlZmluZSBUUkswX0VSUgkJMHgwMgkvKiBjb3VsZG4ndCBmaW5kIHRyYWNrIDAgKi8KLSNkZWZpbmUgRU9NX0VSUgkJCTB4MDIJLyogRW5kIE9mIE1lZGlhIChBVEFQSSkgKi8KLSNkZWZpbmUgQUJSVF9FUlIJCTB4MDQJLyogQ29tbWFuZCBhYm9ydGVkICovCi0jZGVmaW5lIE1DUl9FUlIJCQkweDA4CS8qIG1lZGlhIGNoYW5nZSByZXF1ZXN0ICovCi0jZGVmaW5lIElEX0VSUgkJCTB4MTAJLyogSUQgZmllbGQgbm90IGZvdW5kICovCi0jZGVmaW5lIE1DX0VSUgkJCTB4MjAJLyogbWVkaWEgY2hhbmdlZCAqLwotI2RlZmluZSBFQ0NfRVJSCQkJMHg0MAkvKiBVbmNvcnJlY3RhYmxlIEVDQyBlcnJvciAqLwotI2RlZmluZSBCQkRfRVJSCQkJMHg4MAkvKiBwcmUtRUlERSBtZWFuaW5nOiAgYmxvY2sgbWFya2VkIGJhZCAqLwotI2RlZmluZSBJQ1JDX0VSUgkJMHg4MAkvKiBuZXcgbWVhbmluZzogIENSQyBlcnJvciBkdXJpbmcgdHJhbnNmZXIgKi8KLSNkZWZpbmUgTEZTX0VSUgkJCTB4ZjAJLyogTGFzdCBGYWlsZWQgU2Vuc2UgKEFUQVBJKSAqLwotCi0vKiBCaXRzIG9mIEhEX05TRUNUT1IgKi8KLSNkZWZpbmUgQ0QJCQkweDAxCi0jZGVmaW5lIElPCQkJMHgwMgotI2RlZmluZSBSRUwJCQkweDA0Ci0jZGVmaW5lIFRBR19NQVNLCQkweGY4Ci0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyoKQEAgLTE5MSw2ICsxMjksNyBAQAogI2RlZmluZSBUQVNLRklMRV9JTlZBTElECQkweDdmZmYKICNlbmRpZgogCisjaWZuZGVmIF9fS0VSTkVMX18KIC8qIEFUQS9BVEFQSSBDb21tYW5kcyBwcmUgVDEzIFNwZWMgKi8KICNkZWZpbmUgV0lOX05PUAkJCQkweDAwCiAvKgpAQCAtMzc5LDYgKzMxOCw3IEBACiAjZGVmaW5lIFNFQ1VSSVRZX0VSQVNFX1VOSVQJCTB4QkQKICNkZWZpbmUgU0VDVVJJVFlfRlJFRVpFX0xPQ0sJCTB4QkUKICNkZWZpbmUgU0VDVVJJVFlfRElTQUJMRV9QQVNTV09SRAkweEJGCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiBzdHJ1Y3QgaGRfZ2VvbWV0cnkgewogICAgICAgdW5zaWduZWQgY2hhciBoZWFkczsKQEAgLTQ0OCw2ICszODgsNyBAQAogCiAjZGVmaW5lIF9fTkVXX0hEX0RSSVZFX0lECiAKKyNpZm5kZWYgX19LRVJORUxfXwogLyoKICAqIFN0cnVjdHVyZSByZXR1cm5lZCBieSBIRElPX0dFVF9JREVOVElUWSwgYXMgcGVyIEFOU0kgTkNJVFMgQVRBNiByZXYuMWIgc3BlYy4KICAqCkBAIC02OTksNiArNjQwLDcgQEAKIAkJCQkJICogIDc6MCBTaWduYXR1cmUKIAkJCQkJICovCiB9OworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyoKICAqIElERSAibmljZSIgZmxhZ3MuIFRoZXNlIGFyZSB1c2VkIG9uIGEgcGVyIGRyaXZlIGJhc2lzIHRvIGRldGVybWluZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWQuaCBiL2luY2x1ZGUvbGludXgvaGlkLmgKaW5kZXggZmE4ZWU5Yy4uYTcyODc2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC5oCkBAIC0yNzAsNiArMjcwLDcgQEAKIAogI2RlZmluZSBISURfUVVJUktfSU5WRVJUCQkJMHgwMDAwMDAwMQogI2RlZmluZSBISURfUVVJUktfTk9UT1VDSAkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgSElEX1FVSVJLX0lHTk9SRQkJCTB4MDAwMDAwMDQKICNkZWZpbmUgSElEX1FVSVJLX05PR0VUCQkJCTB4MDAwMDAwMDgKICNkZWZpbmUgSElEX1FVSVJLX0JBRFBBRAkJCTB4MDAwMDAwMjAKICNkZWZpbmUgSElEX1FVSVJLX01VTFRJX0lOUFVUCQkJMHgwMDAwMDA0MApAQCAtNjAzLDEyICs2MDQsMTcgQEAKIAlpbnQgKCpvcGVuKShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldik7CiAJdm9pZCAoKmNsb3NlKShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldik7CiAKKwlpbnQgKCpwb3dlcikoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIGludCBsZXZlbCk7CisKIAlpbnQgKCpoaWRpbnB1dF9pbnB1dF9ldmVudCkgKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYsIHVuc2lnbmVkIGludCB0eXBlLAogCQkJdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSk7CiAKIAlpbnQgKCpwYXJzZSkoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpOwogfTsKIAorI2RlZmluZQlQTV9ISU5UX0ZVTExPTgkxPDw1CisjZGVmaW5lIFBNX0hJTlRfTk9STUFMCTE8PDEKKwogLyogQXBwbGljYXRpb25zIGZyb20gSElEIFVzYWdlIFRhYmxlcyA0LzgvOTkgVmVyc2lvbiAxLjEgKi8KIC8qIFdlIGlnbm9yZSBhIGZldyBpbnB1dCBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgbm90IHdpZGVseSB1c2VkICovCiAjZGVmaW5lIElTX0lOUFVUX0FQUExJQ0FUSU9OKGEpICgoKGEgPj0gMHgwMDAxMDAwMCkgJiYgKGEgPD0gMHgwMDAxMDAwOCkpIHx8IChhID09IDB4MDAwMTAwODApIHx8IChhID09IDB4MDAwYzAwMDEpIHx8IChhID09IDB4MDAwZDAwMDIpKQpAQCAtNjQxLDYgKzY0Nyw3IEBACiB2b2lkIGhpZF9vdXRwdXRfcmVwb3J0KHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsIF9fdTggKmRhdGEpOwogc3RydWN0IGhpZF9kZXZpY2UgKmhpZF9hbGxvY2F0ZV9kZXZpY2Uodm9pZCk7CiBpbnQgaGlkX3BhcnNlX3JlcG9ydChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCBfX3U4ICpzdGFydCwgdW5zaWduZWQgc2l6ZSk7CitpbnQgaGlkX2NoZWNrX2tleXNfcHJlc3NlZChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkKTsKIGludCBoaWRfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1bnNpZ25lZCBpbnQgY29ubmVjdF9tYXNrKTsKIAogLyoqCkBAIC03OTEsMjEgKzc5OCw1IEBACiAJCV9fRklMRV9fICwgIyMgYXJnKQogI2VuZGlmIC8qIEhJRF9GRiAqLwogCi0jaWZkZWYgX19LRVJORUxfXwotI2lmZGVmIENPTkZJR19ISURfQ09NUEFUCi0jZGVmaW5lIEhJRF9DT01QQVRfTE9BRF9EUklWRVIobmFtZSkJXAotLyogcHJvdG90eXBlIHRvIGF2b2lkIHNwYXJzZSB3YXJuaW5nICovCVwKLWV4dGVybiB2b2lkIGhpZF9jb21wYXRfIyNuYW1lKHZvaWQpOwlcCi12b2lkIGhpZF9jb21wYXRfIyNuYW1lKHZvaWQpIHsgfQlcCi1FWFBPUlRfU1lNQk9MKGhpZF9jb21wYXRfIyNuYW1lKQotI2Vsc2UKLSNkZWZpbmUgSElEX0NPTVBBVF9MT0FEX0RSSVZFUihuYW1lKQotI2VuZGlmIC8qIEhJRF9DT01QQVQgKi8KLSNkZWZpbmUgSElEX0NPTVBBVF9DQUxMX0RSSVZFUihuYW1lKQlkbyB7CVwKLQlleHRlcm4gdm9pZCBoaWRfY29tcGF0XyMjbmFtZSh2b2lkKTsJXAotCWhpZF9jb21wYXRfIyNuYW1lKCk7CQkJXAotfSB3aGlsZSAoMCkKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaCBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCmluZGV4IDEzODc1Y2UuLjFmY2I3MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCkBAIC0xOSw4ICsxOSwyMSBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfSElHSE1FTQorI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CiAKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ISUdITUVNKSAmJiBkZWZpbmVkKENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUKQorCit2b2lkIGRlYnVnX2ttYXBfYXRvbWljKGVudW0ga21fdHlwZSB0eXBlKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2ttYXBfYXRvbWljKGVudW0ga21fdHlwZSB0eXBlKQoreworfQorCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19ISUdITUVNCiAjaW5jbHVkZSA8YXNtL2hpZ2htZW0uaD4KIAogLyogZGVjbGFyYXRpb25zIGZvciBsaW51eC9tbS9oaWdobWVtLmMgKi8KQEAgLTQ0LDggKzU3LDYgQEAKIAogI2RlZmluZSBrdW5tYXAocGFnZSkgZG8geyAodm9pZCkgKHBhZ2UpOyB9IHdoaWxlICgwKQogCi0jaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KLQogc3RhdGljIGlubGluZSB2b2lkICprbWFwX2F0b21pYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIGlkeCkKIHsKIAlwYWdlZmF1bHRfZGlzYWJsZSgpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvYXQyNC5oIGIvaW5jbHVkZS9saW51eC9pMmMvYXQyNC5oCmluZGV4IGY2ZWRkNTIuLjhhY2U5MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjL2F0MjQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy9hdDI0LmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9MSU5VWF9BVDI0X0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAKIC8qCiAgKiBBcyBzZWVuIHRocm91Z2ggTGludXggSTJDLCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBtb3N0IGNvbW1vbiB0eXBlcyBvZiBJMkMKQEAgLTIzLDYgKzI0LDkgQEAKICNkZWZpbmUgQVQyNF9GTEFHX1JFQURPTkxZCTB4NDAJLyogc3lzZnMtZW50cnkgd2lsbCBiZSByZWFkLW9ubHkgKi8KICNkZWZpbmUgQVQyNF9GTEFHX0lSVUdPCQkweDIwCS8qIHN5c2ZzLWVudHJ5IHdpbGwgYmUgd29ybGQtcmVhZGFibGUgKi8KICNkZWZpbmUgQVQyNF9GTEFHX1RBS0U4QUREUgkweDEwCS8qIHRha2UgYWx3YXlzIDggYWRkcmVzc2VzICgyNGMwMCkgKi8KKworCXZvaWQJCSgqc2V0dXApKHN0cnVjdCBtZW1vcnlfYWNjZXNzb3IgKiwgdm9pZCAqY29udGV4dCk7CisJdm9pZAkJKmNvbnRleHQ7CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX0FUMjRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oIGIvaW5jbHVkZS9saW51eC9pMmMvdHdsNDAzMC5oCmluZGV4IDgxMzdmNjYuLjBkYzgwZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjL3R3bDQwMzAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy90d2w0MDMwLmgKQEAgLTIxOCw2ICsyMTgsNTMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogUG93ZXIgYnVzIG1lc3NhZ2UgZGVmaW5pdGlvbnMgKi8KKworI2RlZmluZSBERVZfR1JQX05VTEwJCTB4MAorI2RlZmluZSBERVZfR1JQX1AxCQkweDEKKyNkZWZpbmUgREVWX0dSUF9QMgkJMHgyCisjZGVmaW5lIERFVl9HUlBfUDMJCTB4NAorCisjZGVmaW5lIFJFU19HUlBfUkVTCQkweDAKKyNkZWZpbmUgUkVTX0dSUF9QUAkJMHgxCisjZGVmaW5lIFJFU19HUlBfUkMJCTB4MgorI2RlZmluZSBSRVNfR1JQX1BQX1JDCQkweDMKKyNkZWZpbmUgUkVTX0dSUF9QUgkJMHg0CisjZGVmaW5lIFJFU19HUlBfUFBfUFIJCTB4NQorI2RlZmluZSBSRVNfR1JQX1JDX1BSCQkweDYKKyNkZWZpbmUgUkVTX0dSUF9BTEwJCTB4NworCisjZGVmaW5lIFJFU19UWVBFMl9SMAkJMHgwCisKKyNkZWZpbmUgUkVTX1RZUEVfQUxMCQkweDcKKworI2RlZmluZSBSRVNfU1RBVEVfV1JTVAkJMHhGCisjZGVmaW5lIFJFU19TVEFURV9BQ1RJVkUJMHhFCisjZGVmaW5lIFJFU19TVEFURV9TTEVFUAkJMHg4CisjZGVmaW5lIFJFU19TVEFURV9PRkYJCTB4MAorCisvKgorICogUG93ZXIgQnVzIE1lc3NhZ2UgRm9ybWF0IC4uLiB0aGVzZSBjYW4gYmUgc2VudCBpbmRpdmlkdWFsbHkgYnkgTGludXgsCisgKiBidXQgYXJlIHVzdWFsbHkgcGFydCBvZiBkb3dubG9hZGVkIHNjcmlwdHMgdGhhdCBhcmUgcnVuIHdoZW4gdmFyaW91cworICogcG93ZXIgZXZlbnRzIGFyZSB0cmlnZ2VyZWQuCisgKgorICogIEJyb2FkY2FzdCBNZXNzYWdlICgxNiBCaXRzKToKKyAqICAgIERFVl9HUlBbMTU6MTNdIE1UWzEyXSAgUkVTX0dSUFsxMTo5XSAgUkVTX1RZUEUyWzg6N10gUkVTX1RZUEVbNjo0XQorICogICAgUkVTX1NUQVRFWzM6MF0KKyAqCisgKiAgU2luZ3VsYXIgTWVzc2FnZSAoMTYgQml0cyk6CisgKiAgICBERVZfR1JQWzE1OjEzXSBNVFsxMl0gIFJFU19JRFsxMTo0XSAgUkVTX1NUQVRFWzM6MF0KKyAqLworCisjZGVmaW5lIE1TR19CUk9BRENBU1QoZGV2Z3JwLCBncnAsIHR5cGUsIHR5cGUyLCBzdGF0ZSkgXAorCSggKGRldmdycCkgPDwgMTMgfCAxIDw8IDEyIHwgKGdycCkgPDwgOSB8ICh0eXBlMikgPDwgNyBcCisJfCAodHlwZSkgPDwgNCB8IChzdGF0ZSkpCisKKyNkZWZpbmUgTVNHX1NJTkdVTEFSKGRldmdycCwgaWQsIHN0YXRlKSBcCisJKChkZXZncnApIDw8IDEzIHwgMCA8PCAxMiB8IChpZCkgPDwgNCB8IChzdGF0ZSkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIHN0cnVjdCB0d2w0MDMwX2JjaV9wbGF0Zm9ybV9kYXRhIHsKIAlpbnQgKmJhdHRlcnlfdG1wX3RibDsKIAl1bnNpZ25lZCBpbnQgdGJsc2l6ZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IGQ1ZDgzMjIuLmE1ZDI2ZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMjY1LDcgKzI2NSw3IEBACiAJSURFX1RGTEFHX1dSSVRFCQkJPSAoMSA8PCAxMiksCiAJSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSCT0gKDEgPDwgMTMpLAogCUlERV9URkxBR19ETUFfUElPX0ZBTExCQUNLCT0gKDEgPDwgMTQpLAotCUlERV9URkxBR19JTl9IT0JfRkVBVFVSRQk9ICgxIDw8IDE1KSwKKwlJREVfVEZMQUdfSU5fSE9CX0VSUk9SCQk9ICgxIDw8IDE1KSwKIAlJREVfVEZMQUdfSU5fSE9CX05TRUNUCQk9ICgxIDw8IDE2KSwKIAlJREVfVEZMQUdfSU5fSE9CX0xCQUwJCT0gKDEgPDwgMTcpLAogCUlERV9URkxBR19JTl9IT0JfTEJBTQkJPSAoMSA8PCAxOCksCkBAIC0yNzMsMTAgKzI3MywxMCBAQAogCUlERV9URkxBR19JTl9IT0JfTEJBCQk9IElERV9URkxBR19JTl9IT0JfTEJBTCB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0hPQl9MQkFNIHwKIAkJCQkJICBJREVfVEZMQUdfSU5fSE9CX0xCQUgsCi0JSURFX1RGTEFHX0lOX0hPQgkJPSBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUgfAorCUlERV9URkxBR19JTl9IT0IJCT0gSURFX1RGTEFHX0lOX0hPQl9FUlJPUiB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0hPQl9MQkEsCi0JSURFX1RGTEFHX0lOX0ZFQVRVUkUJCT0gKDEgPDwgMjApLAorCUlERV9URkxBR19JTl9FUlJPUgkJPSAoMSA8PCAyMCksCiAJSURFX1RGTEFHX0lOX05TRUNUCQk9ICgxIDw8IDIxKSwKIAlJREVfVEZMQUdfSU5fTEJBTAkJPSAoMSA8PCAyMiksCiAJSURFX1RGTEFHX0lOX0xCQU0JCT0gKDEgPDwgMjMpLApAQCAtMzEwLDggKzMxMCwxMiBAQAogCiBzdHJ1Y3QgaWRlX3Rhc2tmaWxlIHsKIAl1OAlob2JfZGF0YTsJLyogIDA6IGhpZ2ggZGF0YSBieXRlIChmb3IgVEFTS0ZJTEUgSU9DVEwpICovCisJCQkJLyogIDEtNTogYWRkaXRpb25hbCBkYXRhIHRvIHN1cHBvcnQgTEJBNDggKi8KKwl1bmlvbiB7CisJCXU4IGhvYl9lcnJvcjsJLyogICByZWFkOiBlcnJvciAqLworCQl1OCBob2JfZmVhdHVyZTsJLyogIHdyaXRlOiBmZWF0dXJlICovCisJfTsKIAotCXU4CWhvYl9mZWF0dXJlOwkvKiAgMS01OiBhZGRpdGlvbmFsIGRhdGEgdG8gc3VwcG9ydCBMQkE0OCAqLwogCXU4CWhvYl9uc2VjdDsKIAl1OAlob2JfbGJhbDsKIAl1OAlob2JfbGJhbTsKQEAgLTM1Miw2ICszNTYsOCBAQAogCiAJdW5zaWduZWQgaW50CQluYnl0ZXM7CiAJdW5zaWduZWQgaW50CQlubGVmdDsKKwl1bnNpZ25lZCBpbnQJCWxhc3RfeGZlcl9sZW47CisKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKmN1cnNnOwogCXVuc2lnbmVkIGludAkJY3Vyc2dfb2ZzOwogCkBAIC0zNzUsNyArMzgxLDcgQEAKICAqIFdpdGggZWFjaCBwYWNrZXQgY29tbWFuZCwgd2UgYWxsb2NhdGUgYSBidWZmZXIgb2YgSURFX1BDX0JVRkZFUl9TSVpFIGJ5dGVzLgogICogVGhpcyBpcyB1c2VkIGZvciBzZXZlcmFsIHBhY2tldCBjb21tYW5kcyAobm90IGZvciBSRUFEL1dSSVRFIGNvbW1hbmRzKS4KICAqLwotI2RlZmluZSBJREVfUENfQlVGRkVSX1NJWkUJMjU2CisjZGVmaW5lIElERV9QQ19CVUZGRVJfU0laRQk2NAogI2RlZmluZSBBVEFQSV9XQUlUX1BDCQkoNjAgKiBIWikKIAogc3RydWN0IGlkZV9hdGFwaV9wYyB7CkBAIC00MTMsOSArNDE5LDYgQEAKIAlzdHJ1Y3QgaWRldGFwZV9iaCAqYmg7CiAJY2hhciAqYl9kYXRhOwogCi0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQl1bnNpZ25lZCBpbnQgc2dfY250OwotCiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogfTsKIApAQCAtNDU2LDExICs0NTksNiBAQAogCUlERV9BRkxBR19UT0NBRERSX0FTX0JDRAk9ICgxIDw8IDMpLAogCS8qIFRPQyB0cmFjayBudW1iZXJzIGFyZSBpbiBCQ0QuICovCiAJSURFX0FGTEFHX1RPQ1RSQUNLU19BU19CQ0QJPSAoMSA8PCA0KSwKLQkvKgotCSAqIERyaXZlIGRvZXMgbm90IHByb3ZpZGUgZGF0YSBpbiBtdWx0aXBsZXMgb2YgU0VDVE9SX1NJWkUKLQkgKiB3aGVuIG1vcmUgdGhhbiBvbmUgaW50ZXJydXB0IGlzIG5lZWRlZC4KLQkgKi8KLQlJREVfQUZMQUdfTElNSVRfTkZSQU1FUwkJPSAoMSA8PCA1KSwKIAkvKiBTYXZlZCBUT0MgaW5mb3JtYXRpb24gaXMgY3VycmVudC4gKi8KIAlJREVfQUZMQUdfVE9DX1ZBTElECQk9ICgxIDw8IDYpLAogCS8qIFdlIHRoaW5rIHRoYXQgdGhlIGRyaXZlIGRvb3IgaXMgbG9ja2VkLiAqLwpAQCAtNjA1LDcgKzYwMyw3IEBACiAKIAl1bnNpZ25lZCBpbnQJYmlvc19jeWw7CS8qIEJJT1MvZmRpc2svTElMTyBudW1iZXIgb2YgY3lscyAqLwogCXVuc2lnbmVkIGludAljeWw7CQkvKiAicmVhbCIgbnVtYmVyIG9mIGN5bHMgKi8KLQl1bnNpZ25lZCBpbnQJZHJpdmVfZGF0YTsJLyogdXNlZCBieSBzZXRfcGlvX21vZGUvc2VsZWN0cHJvYyAqLworCXVuc2lnbmVkIGludAlkcml2ZV9kYXRhOwkvKiB1c2VkIGJ5IHNldF9waW9fbW9kZS9kZXZfc2VsZWN0KCkgKi8KIAl1bnNpZ25lZCBpbnQJZmFpbHVyZXM7CS8qIGN1cnJlbnQgZmFpbHVyZSBjb3VudCAqLwogCXVuc2lnbmVkIGludAltYXhfZmFpbHVyZXM7CS8qIG1heGltdW0gYWxsb3dlZCBmYWlsdXJlIGNvdW50ICovCiAJdTY0CQlwcm9iZWRfY2FwYWNpdHk7LyogaW5pdGlhbCByZXBvcnRlZCBtZWRpYSBjYXBhY2l0eSAoaWRlLWNkIG9ubHkgY3VycmVudGx5KSAqLwpAQCAtNjYxLDkgKzY1OSw5IEBACiAJdm9pZAkoKmV4ZWNfY29tbWFuZCkoc3RydWN0IGh3aWZfcyAqLCB1OCk7CiAJdTgJKCpyZWFkX3N0YXR1cykoc3RydWN0IGh3aWZfcyAqKTsKIAl1OAkoKnJlYWRfYWx0c3RhdHVzKShzdHJ1Y3QgaHdpZl9zICopOworCXZvaWQJKCp3cml0ZV9kZXZjdGwpKHN0cnVjdCBod2lmX3MgKiwgdTgpOwogCi0Jdm9pZAkoKnNldF9pcnEpKHN0cnVjdCBod2lmX3MgKiwgaW50KTsKLQorCXZvaWQJKCpkZXZfc2VsZWN0KShpZGVfZHJpdmVfdCAqKTsKIAl2b2lkCSgqdGZfbG9hZCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAJdm9pZAkoKnRmX3JlYWQpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICopOwogCkBAIC02ODEsNyArNjc5LDYgQEAKICAqIEBpbml0X2RldjoJCWhvc3Qgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gb2YgYSBkZXZpY2UKICAqIEBzZXRfcGlvX21vZGU6CXJvdXRpbmUgdG8gcHJvZ3JhbSBob3N0IGZvciBQSU8gbW9kZQogICogQHNldF9kbWFfbW9kZToJcm91dGluZSB0byBwcm9ncmFtIGhvc3QgZm9yIERNQSBtb2RlCi0gKiBAc2VsZWN0cHJvYzoJCXR3ZWFrcyBoYXJkd2FyZSB0byBzZWxlY3QgZHJpdmUKICAqIEByZXNldF9wb2xsOgkJY2hpcHNldCBwb2xsaW5nIGJhc2VkIG9uIGhiYSBzcGVjaWZpY3MKICAqIEBwcmVfcmVzZXQ6CQljaGlwc2V0IHNwZWNpZmljIGNoYW5nZXMgdG8gZGVmYXVsdCBmb3IgZGV2aWNlLWhiYSByZXNldHMKICAqIEByZXNldHByb2M6CQlyb3V0aW5lIHRvIHJlc2V0IGNvbnRyb2xsZXIgYWZ0ZXIgYSBkaXNrIHJlc2V0CkBAIC02OTgsNyArNjk1LDYgQEAKIAl2b2lkCSgqaW5pdF9kZXYpKGlkZV9kcml2ZV90ICopOwogCXZvaWQJKCpzZXRfcGlvX21vZGUpKGlkZV9kcml2ZV90ICosIGNvbnN0IHU4KTsKIAl2b2lkCSgqc2V0X2RtYV9tb2RlKShpZGVfZHJpdmVfdCAqLCBjb25zdCB1OCk7Ci0Jdm9pZAkoKnNlbGVjdHByb2MpKGlkZV9kcml2ZV90ICopOwogCWludAkoKnJlc2V0X3BvbGwpKGlkZV9kcml2ZV90ICopOwogCXZvaWQJKCpwcmVfcmVzZXQpKGlkZV9kcml2ZV90ICopOwogCXZvaWQJKCpyZXNldHByb2MpKGlkZV9kcml2ZV90ICopOwpAQCAtNzE5LDggKzcxNSwxMCBAQAogCWludAkoKmRtYV9lbmQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKIAlpbnQJKCpkbWFfdGVzdF9pcnEpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKIAl2b2lkCSgqZG1hX2xvc3RfaXJxKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CisJLyogYmVsb3cgb25lcyBhcmUgb3B0aW9uYWwgKi8KKwlpbnQJKCpkbWFfY2hlY2spKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIAlpbnQJKCpkbWFfdGltZXJfZXhwaXJ5KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7Ci0Jdm9pZAkoKmRtYV90aW1lb3V0KShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CisJdm9pZAkoKmRtYV9jbGVhcikoc3RydWN0IGlkZV9kcml2ZV9zICopOwogCS8qCiAJICogVGhlIGZvbGxvd2luZyBtZXRob2QgaXMgb3B0aW9uYWwgYW5kIG9ubHkgcmVxdWlyZWQgdG8gYmUKIAkgKiBpbXBsZW1lbnRlZCBmb3IgdGhlIFNGRi04MDM4aSBjb21wYXRpYmxlIGNvbnRyb2xsZXJzLgpAQCAtMTE2OSwxOCArMTE2NywxNSBAQAogdm9pZCBpZGVfZXhlY19jb21tYW5kKGlkZV9od2lmX3QgKiwgdTgpOwogdTggaWRlX3JlYWRfc3RhdHVzKGlkZV9od2lmX3QgKik7CiB1OCBpZGVfcmVhZF9hbHRzdGF0dXMoaWRlX2h3aWZfdCAqKTsKK3ZvaWQgaWRlX3dyaXRlX2RldmN0bChpZGVfaHdpZl90ICosIHU4KTsKIAotdm9pZCBpZGVfc2V0X2lycShpZGVfaHdpZl90ICosIGludCk7Ci0KK3ZvaWQgaWRlX2Rldl9zZWxlY3QoaWRlX2RyaXZlX3QgKik7CiB2b2lkIGlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICopOwogdm9pZCBpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIAogdm9pZCBpZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7CiB2b2lkIGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7CiAKLWludCBpZGVfaW9fYnVmZmVycyhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICosIHVuc2lnbmVkIGludCwgaW50KTsKLQotZXh0ZXJuIHZvaWQgU0VMRUNUX0RSSVZFKGlkZV9kcml2ZV90ICopOwogdm9pZCBTRUxFQ1RfTUFTSyhpZGVfZHJpdmVfdCAqLCBpbnQpOwogCiB1OCBpZGVfcmVhZF9lcnJvcihpZGVfZHJpdmVfdCAqKTsKQEAgLTEyMjYsNiArMTIyMSw4IEBACiAKIGlkZV9zdGFydHN0b3BfdCBkb19yd190YXNrZmlsZShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIAordm9pZCBpZGVfcGlvX2J5dGVzKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKKwogdm9pZCBpZGVfZmluaXNoX2NtZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCB1OCk7CiAKIGludCBpZGVfcmF3X3Rhc2tmaWxlKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICosIHU4ICosIHUxNik7CkBAIC0xNDQzLDggKzE0NDAsOCBAQAogaW50IGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKik7CiB2b2lkIGlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqKTsKIAotaW50IGlkZV9idWlsZF9zZ2xpc3QoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7Ci12b2lkIGlkZV9kZXN0cm95X2RtYXRhYmxlKGlkZV9kcml2ZV90ICopOworaW50IGlkZV9kbWFfcHJlcGFyZShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKK3ZvaWQgaWRlX2RtYV91bm1hcF9zZyhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQV9TRkYKIGludCBjb25maWdfZHJpdmVfZm9yX2RtYShpZGVfZHJpdmVfdCAqKTsKQEAgLTE0NjIsNyArMTQ1OSw2IEBACiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRiAqLwogCiB2b2lkIGlkZV9kbWFfbG9zdF9pcnEoaWRlX2RyaXZlX3QgKik7Ci12b2lkIGlkZV9kbWFfdGltZW91dChpZGVfZHJpdmVfdCAqKTsKIGlkZV9zdGFydHN0b3BfdCBpZGVfZG1hX3RpbWVvdXRfcmV0cnkoaWRlX2RyaXZlX3QgKiwgaW50KTsKIAogI2Vsc2UKQEAgLTE0NzgsOCArMTQ3NCwxMCBAQAogc3RhdGljIGlubGluZSBpZGVfc3RhcnRzdG9wX3QgaWRlX2RtYV9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gaWRlX3N0b3BwZWQ7IH0KIHN0YXRpYyBpbmxpbmUgaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvcikgeyByZXR1cm4gaWRlX3N0b3BwZWQ7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9Ci1zdGF0aWMgaW5saW5lIGludCBpZGVfYnVpbGRfc2dsaXN0KGlkZV9kcml2ZV90ICpkcml2ZSwKLQkJCQkgICBzdHJ1Y3QgaWRlX2NtZCAqY21kKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBpZGVfZG1hX3ByZXBhcmUoaWRlX2RyaXZlX3QgKmRyaXZlLAorCQkJCSAgc3RydWN0IGlkZV9jbWQgKmNtZCkgeyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSB2b2lkIGlkZV9kbWFfdW5tYXBfc2coaWRlX2RyaXZlX3QgKmRyaXZlLAorCQkJCSAgICBzdHJ1Y3QgaWRlX2NtZCAqY21kKSB7IDsgfQogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQSAqLwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFQUNQSQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZHIuaCBiL2luY2x1ZGUvbGludXgvaWRyLmgKaW5kZXggZGQ4NDZkZi4uZTk2OGRiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkci5oCkBAIC0xMDYsNiArMTA2LDcgQEAKIGludCBpZHJfZ2V0X25ld19hYm92ZShzdHJ1Y3QgaWRyICppZHAsIHZvaWQgKnB0ciwgaW50IHN0YXJ0aW5nX2lkLCBpbnQgKmlkKTsKIGludCBpZHJfZm9yX2VhY2goc3RydWN0IGlkciAqaWRwLAogCQkgaW50ICgqZm4pKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpOwordm9pZCAqaWRyX2dldF9uZXh0KHN0cnVjdCBpZHIgKmlkcCwgaW50ICpuZXh0aWQpOwogdm9pZCAqaWRyX3JlcGxhY2Uoc3RydWN0IGlkciAqaWRwLCB2b2lkICpwdHIsIGludCBpZCk7CiB2b2lkIGlkcl9yZW1vdmUoc3RydWN0IGlkciAqaWRwLCBpbnQgaWQpOwogdm9pZCBpZHJfcmVtb3ZlX2FsbChzdHJ1Y3QgaWRyICppZHApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCmluZGV4IDFkNmM3MWQuLjc3MjE0ZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmgKQEAgLTEyMyw3ICsxMjMsNyBAQAogI2RlZmluZSBlY2FwX2VpbV9zdXBwb3J0KGUpCSgoZSA+PiA0KSAmIDB4MSkKICNkZWZpbmUgZWNhcF9pcl9zdXBwb3J0KGUpCSgoZSA+PiAzKSAmIDB4MSkKICNkZWZpbmUgZWNhcF9tYXhfaGFuZGxlX21hc2soZSkgKChlID4+IDIwKSAmIDB4ZikKLQorI2RlZmluZSBlY2FwX3NjX3N1cHBvcnQoZSkJKChlID4+IDcpICYgMHgxKSAvKiBTbm9vcGluZyBDb250cm9sICovCiAKIC8qIElPVExCX1JFRyAqLwogI2RlZmluZSBETUFfVExCX0ZMVVNIX0dSQU5VX09GRlNFVCAgNjAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IGM2OGJmZmQuLmNlMmMwN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtMjc4LDYgKzI3OCwxMSBAQAogCU5SX1NPRlRJUlFTCiB9OwogCisvKiBtYXAgc29mdGlycSBpbmRleCB0byBzb2Z0aXJxIG5hbWUuIHVwZGF0ZSAnc29mdGlycV90b19uYW1lJyBpbgorICoga2VybmVsL3NvZnRpcnEuYyB3aGVuIGFkZGluZyBhIG5ldyBzb2Z0aXJxLgorICovCitleHRlcm4gY2hhciAqc29mdGlycV90b19uYW1lW05SX1NPRlRJUlFTXTsKKwogLyogc29mdGlycSBtYXNrIGFuZCBhY3RpdmUgZmllbGRzIG1vdmVkIHRvIGlycV9jcHVzdGF0X3QgaW4KICAqIGFzbS9oYXJkaXJxLmggdG8gZ2V0IGJldHRlciBjYWNoZSB1c2FnZS4gIEtBTwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lvbW11LmggYi9pbmNsdWRlL2xpbnV4L2lvbW11LmgKaW5kZXggOGE3YmZiMS4uM2FmNGZmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pb21tdS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW9tbXUuaApAQCAtMjEsNiArMjEsNyBAQAogCiAjZGVmaW5lIElPTU1VX1JFQUQJKDEpCiAjZGVmaW5lIElPTU1VX1dSSVRFCSgyKQorI2RlZmluZSBJT01NVV9DQUNIRQkoNCkgLyogRE1BIGNhY2hlIGNvaGVyZW5jeSAqLwogCiBzdHJ1Y3QgZGV2aWNlOwogCkBAIC0yOCw2ICsyOSw4IEBACiAJdm9pZCAqcHJpdjsKIH07CiAKKyNkZWZpbmUgSU9NTVVfQ0FQX0NBQ0hFX0NPSEVSRU5DWQkweDEKKwogc3RydWN0IGlvbW11X29wcyB7CiAJaW50ICgqZG9tYWluX2luaXQpKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbik7CiAJdm9pZCAoKmRvbWFpbl9kZXN0cm95KShzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pOwpAQCAtMzksNiArNDIsOCBAQAogCQkgICAgICBzaXplX3Qgc2l6ZSk7CiAJcGh5c19hZGRyX3QgKCppb3ZhX3RvX3BoeXMpKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBpb3ZhKTsKKwlpbnQgKCpkb21haW5faGFzX2NhcCkoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBjYXApOwogfTsKIAogI2lmZGVmIENPTkZJR19JT01NVV9BUEkKQEAgLTU3LDYgKzYyLDggQEAKIAkJCSAgICAgIHNpemVfdCBzaXplKTsKIGV4dGVybiBwaHlzX2FkZHJfdCBpb21tdV9pb3ZhX3RvX3BoeXMoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaW92YSk7CitleHRlcm4gaW50IGlvbW11X2RvbWFpbl9oYXNfY2FwKHN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiwKKwkJCQl1bnNpZ25lZCBsb25nIGNhcCk7CiAKICNlbHNlIC8qIENPTkZJR19JT01NVV9BUEkgKi8KIApAQCAtMTA3LDYgKzExNCwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBkb21haW5faGFzX2NhcChzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4sCisJCQkJIHVuc2lnbmVkIGxvbmcgY2FwKQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogQ09ORklHX0lPTU1VX0FQSSAqLwogCiAjZW5kaWYgLyogX19MSU5VWF9JT01NVV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L2lycWZsYWdzLmgKaW5kZXggNzRiZGUxMy4uYjAyYTNmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnFmbGFncy5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxZmxhZ3MuaApAQCAtMjQsOCArMjQsOCBAQAogIyBkZWZpbmUgdHJhY2Vfc29mdGlycXNfZW5hYmxlZChwKQkoKHApLT5zb2Z0aXJxc19lbmFibGVkKQogIyBkZWZpbmUgdHJhY2VfaGFyZGlycV9lbnRlcigpCWRvIHsgY3VycmVudC0+aGFyZGlycV9jb250ZXh0Kys7IH0gd2hpbGUgKDApCiAjIGRlZmluZSB0cmFjZV9oYXJkaXJxX2V4aXQoKQlkbyB7IGN1cnJlbnQtPmhhcmRpcnFfY29udGV4dC0tOyB9IHdoaWxlICgwKQotIyBkZWZpbmUgdHJhY2Vfc29mdGlycV9lbnRlcigpCWRvIHsgY3VycmVudC0+c29mdGlycV9jb250ZXh0Kys7IH0gd2hpbGUgKDApCi0jIGRlZmluZSB0cmFjZV9zb2Z0aXJxX2V4aXQoKQlkbyB7IGN1cnJlbnQtPnNvZnRpcnFfY29udGV4dC0tOyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbG9ja2RlcF9zb2Z0aXJxX2VudGVyKCkJZG8geyBjdXJyZW50LT5zb2Z0aXJxX2NvbnRleHQrKzsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGxvY2tkZXBfc29mdGlycV9leGl0KCkJZG8geyBjdXJyZW50LT5zb2Z0aXJxX2NvbnRleHQtLTsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIElOSVRfVFJBQ0VfSVJRRkxBR1MJLnNvZnRpcnFzX2VuYWJsZWQgPSAxLAogI2Vsc2UKICMgZGVmaW5lIHRyYWNlX2hhcmRpcnFzX29uKCkJCWRvIHsgfSB3aGlsZSAoMCkKQEAgLTM4LDggKzM4LDggQEAKICMgZGVmaW5lIHRyYWNlX3NvZnRpcnFzX2VuYWJsZWQocCkJMAogIyBkZWZpbmUgdHJhY2VfaGFyZGlycV9lbnRlcigpCQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSB0cmFjZV9oYXJkaXJxX2V4aXQoKQkJZG8geyB9IHdoaWxlICgwKQotIyBkZWZpbmUgdHJhY2Vfc29mdGlycV9lbnRlcigpCQlkbyB7IH0gd2hpbGUgKDApCi0jIGRlZmluZSB0cmFjZV9zb2Z0aXJxX2V4aXQoKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbG9ja2RlcF9zb2Z0aXJxX2VudGVyKCkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbG9ja2RlcF9zb2Z0aXJxX2V4aXQoKQkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgSU5JVF9UUkFDRV9JUlFGTEFHUwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamJkLmggYi9pbmNsdWRlL2xpbnV4L2piZC5oCmluZGV4IDY0MjQ2ZGMuLjUzYWU0MzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9qYmQuaApAQCAtMzUsNyArMzUsNyBAQAogI2RlZmluZSBqb3VybmFsX29vbV9yZXRyeSAxCiAKIC8qCi0gKiBEZWZpbmUgSkJEX1BBUkFOSU9EX0lPRkFJTCB0byBjYXVzZSBhIGtlcm5lbCBCVUcoKSBpZiBleHQzIGZpbmRzCisgKiBEZWZpbmUgSkJEX1BBUkFOT0lEX0lPRkFJTCB0byBjYXVzZSBhIGtlcm5lbCBCVUcoKSBpZiBleHQzIGZpbmRzCiAgKiBjZXJ0YWluIGNsYXNzZXMgb2YgZXJyb3Igd2hpY2ggY2FuIG9jY3VyIGR1ZSB0byBmYWlsZWQgSU9zLiAgVW5kZXIKICAqIG5vcm1hbCB1c2Ugd2Ugd2FudCBleHQzIHRvIGNvbnRpbnVlIGFmdGVyIHN1Y2ggZXJyb3JzLCBiZWNhdXNlCiAgKiBoYXJkd2FyZSBfY2FuXyBmYWlsLCBidXQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyB3aGVuIHJ1bm5pbmcgdGVzdHMgb24KQEAgLTU1Miw2ICs1NTIsMTEgQEAKIAkgKi8KIAlpbnQgdF9oYW5kbGVfY291bnQ7CiAKKwkvKgorCSAqIFRoaXMgdHJhbnNhY3Rpb24gaXMgYmVpbmcgZm9yY2VkIGFuZCBzb21lIHByb2Nlc3MgaXMKKwkgKiB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2guCisJICovCisJaW50IHRfc3luY2hyb25vdXNfY29tbWl0OjE7CiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamJkMi5oIGIvaW5jbHVkZS9saW51eC9qYmQyLmgKaW5kZXggNGQyNDhiMy4uODgxNWEzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qYmQyLmgKKysrIGIvaW5jbHVkZS9saW51eC9qYmQyLmgKQEAgLTY0OSw2ICs2NDksMTIgQEAKIAlpbnQgdF9oYW5kbGVfY291bnQ7CiAKIAkvKgorCSAqIFRoaXMgdHJhbnNhY3Rpb24gaXMgYmVpbmcgZm9yY2VkIGFuZCBzb21lIHByb2Nlc3MgaXMKKwkgKiB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2guCisJICovCisJaW50IHRfc3luY2hyb25vdXNfY29tbWl0OjE7CisKKwkvKgogCSAqIEZvciB1c2UgYnkgdGhlIGZpbGVzeXN0ZW0gdG8gc3RvcmUgZnMtc3BlY2lmaWMgZGF0YQogCSAqIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0cmFuc2FjdGlvbgogCSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oIGIvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCmluZGV4IGYzZmUzNDMuLjc5MjI3NDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKQEAgLTEzLDEwICsxMywxNyBAQAogI2RlZmluZSBLU1lNX1NZTUJPTF9MRU4gKHNpemVvZigiJXMrJSNseC8lI2x4IFslc10iKSArIChLU1lNX05BTUVfTEVOIC0gMSkgKyBcCiAJCQkgMiooQklUU19QRVJfTE9ORyozLzEwKSArIChNT0RVTEVfTkFNRV9MRU4gLSAxKSArIDEpCiAKK3N0cnVjdCBtb2R1bGU7CisKICNpZmRlZiBDT05GSUdfS0FMTFNZTVMKIC8qIExvb2t1cCB0aGUgYWRkcmVzcyBmb3IgYSBzeW1ib2wuIFJldHVybnMgMCBpZiBub3QgZm91bmQuICovCiB1bnNpZ25lZCBsb25nIGthbGxzeW1zX2xvb2t1cF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwogCisvKiBDYWxsIGEgZnVuY3Rpb24gb24gZWFjaCBrYWxsc3ltcyBzeW1ib2wgaW4gdGhlIGNvcmUga2VybmVsICovCitpbnQga2FsbHN5bXNfb25fZWFjaF9zeW1ib2woaW50ICgqZm4pKHZvaWQgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgbW9kdWxlICosCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyksCisJCQkgICAgdm9pZCAqZGF0YSk7CisKIGV4dGVybiBpbnQga2FsbHN5bXNfbG9va3VwX3NpemVfb2Zmc2V0KHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgKnN5bWJvbHNpemUsCiAJCQkJICB1bnNpZ25lZCBsb25nICpvZmZzZXQpOwpAQCAtNDMsNiArNTAsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQga2FsbHN5bXNfb25fZWFjaF9zeW1ib2woaW50ICgqZm4pKHZvaWQgKiwgY29uc3QgY2hhciAqLAorCQkJCQkJICAgIHN0cnVjdCBtb2R1bGUgKiwKKwkJCQkJCSAgICB1bnNpZ25lZCBsb25nKSwKKwkJCQkJICB2b2lkICpkYXRhKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCBrYWxsc3ltc19sb29rdXBfc2l6ZV9vZmZzZXQodW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCQkgICAgICB1bnNpZ25lZCBsb25nICpzeW1ib2xzaXplLAogCQkJCQkgICAgICB1bnNpZ25lZCBsb25nICpvZmZzZXQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCBmODFkODBmLi5kOWU3NWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTI0Miw2ICsyNDIsMjAgQEAKIGV4dGVybiBpbnQgcHJpbnRrX3JhdGVsaW1pdCh2b2lkKTsKIGV4dGVybiBib29sIHByaW50a190aW1lZF9yYXRlbGltaXQodW5zaWduZWQgbG9uZyAqY2FsbGVyX2ppZmZpZXMsCiAJCQkJICAgdW5zaWduZWQgaW50IGludGVydmFsX21zZWMpOworCisvKgorICogUHJpbnQgYSBvbmUtdGltZSBtZXNzYWdlIChhbmFsb2dvdXMgdG8gV0FSTl9PTkNFKCkgZXQgYWwpOgorICovCisjZGVmaW5lIHByaW50a19vbmNlKHguLi4pICh7CQkJXAorCXN0YXRpYyBpbnQgX19wcmludF9vbmNlID0gMTsJCVwKKwkJCQkJCVwKKwlpZiAoX19wcmludF9vbmNlKSB7CQkJXAorCQlfX3ByaW50X29uY2UgPSAwOwkJXAorCQlwcmludGsoeCk7CQkJXAorCX0JCQkJCVwKK30pCisKK3ZvaWQgbG9nX2J1Zl9rZXhlY19zZXR1cCh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCB2cHJpbnRrKGNvbnN0IGNoYXIgKnMsIHZhX2xpc3QgYXJncykKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDApKSk7CkBAIC0yNTMsNiArMjY3LDEzIEBACiBzdGF0aWMgaW5saW5lIGJvb2wgcHJpbnRrX3RpbWVkX3JhdGVsaW1pdCh1bnNpZ25lZCBsb25nICpjYWxsZXJfamlmZmllcywgXAogCQkJCQkgIHVuc2lnbmVkIGludCBpbnRlcnZhbF9tc2VjKQlcCiAJCXsgcmV0dXJuIGZhbHNlOyB9CisKKy8qIE5vIGVmZmVjdCwgYnV0IHdlIHN0aWxsIGdldCB0eXBlIGNoZWNraW5nIGV2ZW4gaW4gdGhlICFQUklOVEsgY2FzZTogKi8KKyNkZWZpbmUgcHJpbnRrX29uY2UoeC4uLikgcHJpbnRrKHgpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dfYnVmX2tleGVjX3NldHVwKHZvaWQpCit7Cit9CiAjZW5kaWYKIAogZXh0ZXJuIGludCBwcmludGtfbmVlZHNfY3B1KGludCBjcHUpOwpAQCAtMzUzLDYgKzM3NCw4IEBACiAgICAgICAgIHByaW50ayhLRVJOX05PVElDRSBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgcHJfaW5mbyhmbXQsIC4uLikgXAogICAgICAgICBwcmludGsoS0VSTl9JTkZPIHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBwcl9jb250KGZtdCwgLi4uKSBcCisJcHJpbnRrKEtFUk5fQ09OVCBmbXQsICMjX19WQV9BUkdTX18pCiAKIC8qIElmIHlvdSBhcmUgd3JpdGluZyBhIGRyaXZlciwgcGxlYXNlIHVzZSBkZXZfZGJnIGluc3RlYWQgKi8KICNpZiBkZWZpbmVkKERFQlVHKQpAQCAtMzY5LDYgKzM5MiwxMzkgQEAKICNlbmRpZgogCiAvKgorICogR2VuZXJhbCB0cmFjaW5nIHJlbGF0ZWQgdXRpbGl0eSBmdW5jdGlvbnMgLSB0cmFjZV9wcmludGsoKSwKKyAqIHRyYWNpbmdfb24vdHJhY2luZ19vZmYgYW5kIHRyYWNpbmdfc3RhcnQoKS90cmFjaW5nX3N0b3AKKyAqCisgKiBVc2UgdHJhY2luZ19vbi90cmFjaW5nX29mZiB3aGVuIHlvdSB3YW50IHRvIHF1aWNrbHkgdHVybiBvbiBvciBvZmYKKyAqIHRyYWNpbmcuIEl0IHNpbXBseSBlbmFibGVzIG9yIGRpc2FibGVzIHRoZSByZWNvcmRpbmcgb2YgdGhlIHRyYWNlIGV2ZW50cy4KKyAqIFRoaXMgYWxzbyBjb3JyZXNwb25kcyB0byB0aGUgdXNlciBzcGFjZSBkZWJ1Z2ZzL3RyYWNpbmcvdHJhY2luZ19vbgorICogZmlsZSwgd2hpY2ggZ2l2ZXMgYSBtZWFucyBmb3IgdGhlIGtlcm5lbCBhbmQgdXNlcnNwYWNlIHRvIGludGVyYWN0LgorICogUGxhY2UgYSB0cmFjaW5nX29mZigpIGluIHRoZSBrZXJuZWwgd2hlcmUgeW91IHdhbnQgdHJhY2luZyB0byBlbmQuCisgKiBGcm9tIHVzZXIgc3BhY2UsIGV4YW1pbmUgdGhlIHRyYWNlLCBhbmQgdGhlbiBlY2hvIDEgPiB0cmFjaW5nX29uCisgKiB0byBjb250aW51ZSB0cmFjaW5nLgorICoKKyAqIHRyYWNpbmdfc3RvcC90cmFjaW5nX3N0YXJ0IGhhcyBzbGlnaHRseSBtb3JlIG92ZXJoZWFkLiBJdCBpcyB1c2VkCisgKiBieSB0aGluZ3MgbGlrZSBzdXNwZW5kIHRvIHJhbSB3aGVyZSBkaXNhYmxpbmcgdGhlIHJlY29yZGluZyBvZiB0aGUKKyAqIHRyYWNlIGlzIG5vdCBlbm91Z2gsIGJ1dCB0cmFjaW5nIG11c3QgYWN0dWFsbHkgc3RvcCBiZWNhdXNlIHRoaW5ncworICogbGlrZSBjYWxsaW5nIHNtcF9wcm9jZXNzb3JfaWQoKSBtYXkgY3Jhc2ggdGhlIHN5c3RlbS4KKyAqCisgKiBNb3N0IGxpa2VseSwgeW91IHdhbnQgdG8gdXNlIHRyYWNpbmdfb24vdHJhY2luZ19vZmYuCisgKi8KKyNpZmRlZiBDT05GSUdfUklOR19CVUZGRVIKK3ZvaWQgdHJhY2luZ19vbih2b2lkKTsKK3ZvaWQgdHJhY2luZ19vZmYodm9pZCk7CisvKiB0cmFjZV9vZmZfcGVybWFuZW50IHN0b3BzIHJlY29yZGluZyB3aXRoIG5vIHdheSB0byBicmluZyBpdCBiYWNrICovCit2b2lkIHRyYWNpbmdfb2ZmX3Blcm1hbmVudCh2b2lkKTsKK2ludCB0cmFjaW5nX2lzX29uKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjaW5nX29uKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHRyYWNpbmdfb2ZmKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHRyYWNpbmdfb2ZmX3Blcm1hbmVudCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHRyYWNpbmdfaXNfb24odm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1RSQUNJTkcKK2V4dGVybiB2b2lkIHRyYWNpbmdfc3RhcnQodm9pZCk7CitleHRlcm4gdm9pZCB0cmFjaW5nX3N0b3Aodm9pZCk7CitleHRlcm4gdm9pZCBmdHJhY2Vfb2ZmX3Blcm1hbmVudCh2b2lkKTsKKworZXh0ZXJuIHZvaWQKK2Z0cmFjZV9zcGVjaWFsKHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitfX19fdHJhY2VfcHJpbnRrX2NoZWNrX2Zvcm1hdChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKK30KKyNkZWZpbmUgX190cmFjZV9wcmludGtfY2hlY2tfZm9ybWF0KGZtdCwgYXJncy4uLikJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmICgwKQkJCQkJCQkJXAorCQlfX19fdHJhY2VfcHJpbnRrX2NoZWNrX2Zvcm1hdChmbXQsICMjYXJncyk7CQlcCit9IHdoaWxlICgwKQorCisvKioKKyAqIHRyYWNlX3ByaW50ayAtIHByaW50ZiBmb3JtYXR0aW5nIGluIHRoZSBmdHJhY2UgYnVmZmVyCisgKiBAZm10OiB0aGUgcHJpbnRmIGZvcm1hdCBmb3IgcHJpbnRpbmcKKyAqCisgKiBOb3RlOiBfX3RyYWNlX3ByaW50ayBpcyBhbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgdHJhY2VfcHJpbnRrIGFuZAorICogICAgICAgdGhlIEBpcCBpcyBwYXNzZWQgaW4gdmlhIHRoZSB0cmFjZV9wcmludGsgbWFjcm8uCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBrZXJuZWwgZGV2ZWxvcGVyIHRvIGRlYnVnIGZhc3QgcGF0aCBzZWN0aW9ucworICogdGhhdCBwcmludGsgaXMgbm90IGFwcHJvcHJpYXRlIGZvci4gQnkgc2NhdHRlcmluZyBpbiB2YXJpb3VzCisgKiBwcmludGsgbGlrZSB0cmFjaW5nIGluIHRoZSBjb2RlLCBhIGRldmVsb3BlciBjYW4gcXVpY2tseSBzZWUKKyAqIHdoZXJlIHByb2JsZW1zIGFyZSBvY2N1cnJpbmcuCisgKgorICogVGhpcyBpcyBpbnRlbmRlZCBhcyBhIGRlYnVnZ2luZyB0b29sIGZvciB0aGUgZGV2ZWxvcGVyIG9ubHkuCisgKiBQbGVhc2UgcmVmcmFpbiBmcm9tIGxlYXZpbmcgdHJhY2VfcHJpbnRrcyBzY2F0dGVyZWQgYXJvdW5kIGluCisgKiB5b3VyIGNvZGUuCisgKi8KKworI2RlZmluZSB0cmFjZV9wcmludGsoZm10LCBhcmdzLi4uKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlfX3RyYWNlX3ByaW50a19jaGVja19mb3JtYXQoZm10LCAjI2FyZ3MpOwkJCVwKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZm10KSkgewkJCQlcCisJCXN0YXRpYyBjb25zdCBjaGFyICp0cmFjZV9wcmludGtfZm10CQkJXAorCQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdHJhY2VfcHJpbnRrX2ZtdCIpKSkgPQlcCisJCQlfX2J1aWx0aW5fY29uc3RhbnRfcChmbXQpID8gZm10IDogTlVMTDsJCVwKKwkJCQkJCQkJCVwKKwkJX190cmFjZV9icHJpbnRrKF9USElTX0lQXywgdHJhY2VfcHJpbnRrX2ZtdCwgIyNhcmdzKTsJXAorCX0gZWxzZQkJCQkJCQkJXAorCQlfX3RyYWNlX3ByaW50ayhfVEhJU19JUF8sIGZtdCwgIyNhcmdzKTsJCVwKK30gd2hpbGUgKDApCisKK2V4dGVybiBpbnQKK19fdHJhY2VfYnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CisKK2V4dGVybiBpbnQKK19fdHJhY2VfcHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworLyoKKyAqIFRoZSBkb3VibGUgX19idWlsdGluX2NvbnN0YW50X3AgaXMgYmVjYXVzZSBnY2Mgd2lsbCBnaXZlIHVzIGFuIGVycm9yCisgKiBpZiB3ZSB0cnkgdG8gYWxsb2NhdGUgdGhlIHN0YXRpYyB2YXJpYWJsZSB0byBmbXQgaWYgaXQgaXMgbm90IGEKKyAqIGNvbnN0YW50LiBFdmVuIHdpdGggdGhlIG91dGVyIGlmIHN0YXRlbWVudC4KKyAqLworI2RlZmluZSBmdHJhY2VfdnByaW50ayhmbXQsIHZhcmdzKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZm10KSkgewkJCQlcCisJCXN0YXRpYyBjb25zdCBjaGFyICp0cmFjZV9wcmludGtfZm10CQkJXAorCQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdHJhY2VfcHJpbnRrX2ZtdCIpKSkgPQlcCisJCQlfX2J1aWx0aW5fY29uc3RhbnRfcChmbXQpID8gZm10IDogTlVMTDsJCVwKKwkJCQkJCQkJCVwKKwkJX19mdHJhY2VfdmJwcmludGsoX1RISVNfSVBfLCB0cmFjZV9wcmludGtfZm10LCB2YXJncyk7CVwKKwl9IGVsc2UJCQkJCQkJCVwKKwkJX19mdHJhY2VfdnByaW50ayhfVEhJU19JUF8sIGZtdCwgdmFyZ3MpOwkJXAorfSB3aGlsZSAoMCkKKworZXh0ZXJuIGludAorX19mdHJhY2VfdmJwcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKKworZXh0ZXJuIGludAorX19mdHJhY2VfdnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOworCitleHRlcm4gdm9pZCBmdHJhY2VfZHVtcCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQKK2Z0cmFjZV9zcGVjaWFsKHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMpIHsgfQorc3RhdGljIGlubGluZSBpbnQKK3RyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCitzdGF0aWMgaW5saW5lIHZvaWQgdHJhY2luZ19zdGFydCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB0cmFjaW5nX3N0b3Aodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZnRyYWNlX29mZl9wZXJtYW5lbnQodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIGludAordHJhY2VfcHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQKK2Z0cmFjZV92cHJpbnRrKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZHVtcCh2b2lkKSB7IH0KKyNlbmRpZiAvKiBDT05GSUdfVFJBQ0lORyAqLworCisvKgogICogICAgICBEaXNwbGF5IGFuIElQIGFkZHJlc3MgaW4gcmVhZGFibGUgZm9ybWF0LgogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21vZC5oIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKaW5kZXggOTIyMTNhOS4uZDVmYTU2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbW9kLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKQEAgLTI5LDEwICsyOSwxNSBAQAogI2lmZGVmIENPTkZJR19NT0RVTEVTCiAvKiBtb2Rwcm9iZSBleGl0IHN0YXR1cyBvbiBzdWNjZXNzLCAtdmUgb24gZXJyb3IuICBSZXR1cm4gdmFsdWUKICAqIHVzdWFsbHkgdXNlbGVzcyB0aG91Z2guICovCi1leHRlcm4gaW50IHJlcXVlc3RfbW9kdWxlKGNvbnN0IGNoYXIgKiBuYW1lLCAuLi4pIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKLSNkZWZpbmUgdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoeCwgbW9kLi4uKSAoKHgpID86IChyZXF1ZXN0X21vZHVsZShtb2QpLCAoeCkpKQorZXh0ZXJuIGludCBfX3JlcXVlc3RfbW9kdWxlKGJvb2wgd2FpdCwgY29uc3QgY2hhciAqbmFtZSwgLi4uKSBcCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKKyNkZWZpbmUgcmVxdWVzdF9tb2R1bGUobW9kLi4uKSBfX3JlcXVlc3RfbW9kdWxlKHRydWUsIG1vZCkKKyNkZWZpbmUgcmVxdWVzdF9tb2R1bGVfbm93YWl0KG1vZC4uLikgX19yZXF1ZXN0X21vZHVsZShmYWxzZSwgbW9kKQorI2RlZmluZSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4LCBtb2QuLi4pIFwKKwkoKHgpID86IChfX3JlcXVlc3RfbW9kdWxlKGZhbHNlLCBtb2QpLCAoeCkpKQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHJlcXVlc3RfbW9kdWxlKGNvbnN0IGNoYXIgKiBuYW1lLCAuLi4pIHsgcmV0dXJuIC1FTk9TWVM7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHJlcXVlc3RfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUsIC4uLikgeyByZXR1cm4gLUVOT1NZUzsgfQorc3RhdGljIGlubGluZSBpbnQgcmVxdWVzdF9tb2R1bGVfbm93YWl0KGNvbnN0IGNoYXIgKm5hbWUsIC4uLikgeyByZXR1cm4gLUVOT1NZUzsgfQogI2RlZmluZSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4LCBtb2QuLi4pICh4KQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IDc2MjYyZDguLmI0NTBhMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMzc5LDcgKzM3OSw3IEBACiAJQVRBX0hPUktBR0VfQlJJREdFX09LCT0gKDEgPDwgMTApLAkvKiBubyBicmlkZ2UgbGltaXRzICovCiAJQVRBX0hPUktBR0VfQVRBUElfTU9EMTZfRE1BID0gKDEgPDwgMTEpLCAvKiB1c2UgQVRBUEkgRE1BIGZvciBjb21tYW5kcwogCQkJCQkJICAgIG5vdCBtdWx0aXBsZSBvZiAxNiBieXRlcyAqLwotCUFUQV9IT1JLQUdFX0ZJUk1XQVJFX1dBUk4gPSAoMSA8PCAxMiksCS8qIGZpcndtYXJlIHVwZGF0ZSB3YXJuaW5nICovCisJQVRBX0hPUktBR0VfRklSTVdBUkVfV0FSTiA9ICgxIDw8IDEyKSwJLyogZmlybXdhcmUgdXBkYXRlIHdhcm5pbmcgKi8KIAlBVEFfSE9SS0FHRV8xXzVfR0JQUwk9ICgxIDw8IDEzKSwJLyogZm9yY2UgMS41IEdicHMgKi8KIAogCSAvKiBETUEgbWFzayBmb3IgdXNlciBETUEgY29udHJvbDogVXNlciB2aXNpYmxlIHZhbHVlczsgRE8gTk9UCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaCBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCmluZGV4IDVhNThlYTMuLmRhNWE1YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2RlcC5oCkBAIC0zNjQsNiArMzY0LDIzIEBACiAKICNlbmRpZiAvKiBDT05GSUdfTE9DS19TVEFUICovCiAKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorCisvKgorICogT24gbG9ja2RlcCB3ZSBkb250IHdhbnQgdGhlIGhhbmQtY29kZWQgaXJxLWVuYWJsZSBvZgorICogX3Jhd18qX2xvY2tfZmxhZ3MoKSBjb2RlLCBiZWNhdXNlIGxvY2tkZXAgYXNzdW1lcworICogdGhhdCBpbnRlcnJ1cHRzIGFyZSBub3QgcmUtZW5hYmxlZCBkdXJpbmcgbG9jay1hY3F1aXJlOgorICovCisjZGVmaW5lIExPQ0tfQ09OVEVOREVEX0ZMQUdTKF9sb2NrLCB0cnksIGxvY2ssIGxvY2tmbCwgZmxhZ3MpIFwKKwlMT0NLX0NPTlRFTkRFRCgoX2xvY2spLCAodHJ5KSwgKGxvY2spKQorCisjZWxzZSAvKiBDT05GSUdfTE9DS0RFUCAqLworCisjZGVmaW5lIExPQ0tfQ09OVEVOREVEX0ZMQUdTKF9sb2NrLCB0cnksIGxvY2ssIGxvY2tmbCwgZmxhZ3MpIFwKKwlsb2NrZmwoKF9sb2NrKSwgKGZsYWdzKSkKKworI2VuZGlmIC8qIENPTkZJR19MT0NLREVQICovCisKICNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9pcnFfbG9ja19jbGFzcyh2b2lkKTsKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvb3AuaCBiL2luY2x1ZGUvbGludXgvbG9vcC5oCmluZGV4IDZmZmQ2ZGIuLjQwNzI1NDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9vcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9vcC5oCkBAIC0xNjAsNSArMTYwLDYgQEAKICNkZWZpbmUgTE9PUF9TRVRfU1RBVFVTNjQJMHg0QzA0CiAjZGVmaW5lIExPT1BfR0VUX1NUQVRVUzY0CTB4NEMwNQogI2RlZmluZSBMT09QX0NIQU5HRV9GRAkJMHg0QzA2CisjZGVmaW5lIExPT1BfU0VUX0NBUEFDSVRZCTB4NEMwNwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKaW5kZXggMzI2ZjQ1Yy4uMTgxNDZjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTg4LDkgKzg4LDYgQEAKIC8qCiAgKiBGb3IgbWVtb3J5IHJlY2xhaW0uCiAgKi8KLWV4dGVybiBpbnQgbWVtX2Nncm91cF9jYWxjX21hcHBlZF9yYXRpbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKLWV4dGVybiBsb25nIG1lbV9jZ3JvdXBfcmVjbGFpbV9pbWJhbGFuY2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSk7Ci0KIGV4dGVybiBpbnQgbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9wcmlvcml0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKTsKIGV4dGVybiB2b2lkIG1lbV9jZ3JvdXBfbm90ZV9yZWNsYWltX3ByaW9yaXR5KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJCQkJaW50IHByaW9yaXR5KTsKQEAgLTEwNCw2ICsxMDEsOCBAQAogCQkJCQkJICAgICAgc3RydWN0IHpvbmUgKnpvbmUpOwogc3RydWN0IHpvbmVfcmVjbGFpbV9zdGF0KgogbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9zdGF0X2Zyb21fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKKwkJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIAogI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAKIGV4dGVybiBpbnQgZG9fc3dhcF9hY2NvdW50OwpAQCAtMjA5LDE2ICsyMDgsNiBAQAogewogfQogCi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NhbGNfbWFwcGVkX3JhdGlvKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfcmVjbGFpbV9pbWJhbGFuY2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9wcmlvcml0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQogewogCXJldHVybiAwOwpAQCAtMjcwLDYgKzI1OSwxMSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQKK21lbV9jZ3JvdXBfcHJpbnRfb29tX2luZm8oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX01FTV9DT05UICovCiAKICNlbmRpZiAvKiBfTElOVVhfTUVNQ09OVFJPTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oIGIvaW5jbHVkZS9saW51eC9tZW1vcnkuaAppbmRleCAzZmRjMTA4Li4zN2ZhMTliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKQEAgLTk5LDQgKzk5LDIxIEBACiAjZGVmaW5lIGhvdHBsdWdfbWVtb3J5X25vdGlmaWVyKGZuLCBwcmkpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisvKgorICogJ3N0cnVjdCBtZW1vcnlfYWNjZXNzb3InIGlzIGEgZ2VuZXJpYyBpbnRlcmZhY2UgdG8gcHJvdmlkZQorICogaW4ta2VybmVsIGFjY2VzcyB0byBwZXJzaXN0ZW50IG1lbW9yeSBzdWNoIGFzIGkyYyBvciBTUEkgRUVQUk9NcworICovCitzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yIHsKKwlzc2l6ZV90ICgqcmVhZCkoc3RydWN0IG1lbW9yeV9hY2Nlc3NvciAqLCBjaGFyICpidWYsIG9mZl90IG9mZnNldCwKKwkJCXNpemVfdCBjb3VudCk7CisJc3NpemVfdCAoKndyaXRlKShzdHJ1Y3QgbWVtb3J5X2FjY2Vzc29yICosIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSBvZmZfdCBvZmZzZXQsIHNpemVfdCBjb3VudCk7Cit9OworCisvKgorICogS2VybmVsIHRleHQgbW9kaWZpY2F0aW9uIG11dGV4LCB1c2VkIGZvciBjb2RlIHBhdGNoaW5nLiBVc2VycyBvZiB0aGlzIGxvY2sKKyAqIGNhbiBzbGVlcC4KKyAqLworZXh0ZXJuIHN0cnVjdCBtdXRleCB0ZXh0X211dGV4OworCiAjZW5kaWYgLyogX0xJTlVYX01FTU9SWV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvZHMxd20uaCBiL2luY2x1ZGUvbGludXgvbWZkL2RzMXdtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU0NjlhMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2RzMXdtLmgKQEAgLTAsMCArMSw2IEBACisvKiBNRkQgY2VsbCBkcml2ZXIgZGF0YSBmb3IgdGhlIERTMVdNIGRyaXZlciAqLworCitzdHJ1Y3QgZHMxd21fZHJpdmVyX2RhdGEgeworCWludCBhY3RpdmVfaGlnaDsKKwlpbnQgY2xvY2tfcmF0ZTsKK307CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9odGMtcGFzaWMzLmggYi9pbmNsdWRlL2xpbnV4L21mZC9odGMtcGFzaWMzLmgKaW5kZXggYjQyOTRmMS4uM2QzZWQ2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvaHRjLXBhc2ljMy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2h0Yy1wYXNpYzMuaApAQCAtNDgsNyArNDgsNiBAQAogCiBzdHJ1Y3QgcGFzaWMzX3BsYXRmb3JtX2RhdGEgewogCXN0cnVjdCBwYXNpYzNfbGVkc19tYWNoaW5mbyAqbGVkX3BkYXRhOwotCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgYnVzX3NoaWZ0OwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgY2xvY2tfcmF0ZTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvY29yZS5oCmluZGV4IDk4MDY2OWQuLjQyY2NhNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2NvcmUuaApAQCAtNjQwLDkgKzY0MCwxMSBAQAogICoKICAqIEBpbml0OiBGdW5jdGlvbiBjYWxsZWQgZHVyaW5nIGRyaXZlciBpbml0aWFsaXNhdGlvbi4gIFNob3VsZCBiZQogICogICAgICAgIHVzZWQgYnkgdGhlIHBsYXRmb3JtIHRvIGNvbmZpZ3VyZSBHUElPIGZ1bmN0aW9ucyBhbmQgc2ltaWxhci4KKyAqIEBpcnFfaGlnaDogU2V0IGlmIFdNODM1MCBJUlEgaXMgYWN0aXZlIGhpZ2guCiAgKi8KIHN0cnVjdCB3bTgzNTBfcGxhdGZvcm1fZGF0YSB7CiAJaW50ICgqaW5pdCkoc3RydWN0IHdtODM1MCAqd204MzUwKTsKKwlpbnQgaXJxX2hpZ2g7CiB9OwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCBiMWVhMzdmLi5iZmYxZjBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMzUsNiArMTM1LDcgQEAKIAogI2RlZmluZSBGQVVMVF9GTEFHX1dSSVRFCTB4MDEJLyogRmF1bHQgd2FzIGEgd3JpdGUgYWNjZXNzICovCiAjZGVmaW5lIEZBVUxUX0ZMQUdfTk9OTElORUFSCTB4MDIJLyogRmF1bHQgd2FzIHZpYSBhIG5vbmxpbmVhciBtYXBwaW5nICovCisjZGVmaW5lIEZBVUxUX0ZMQUdfTUtXUklURQkweDA0CS8qIEZhdWx0IHdhcyBta3dyaXRlIG9mIGV4aXN0aW5nIHB0ZSAqLwogCiAvKgogICogVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBieSB4ODYgUEFUIGNvZGUgdG8gaWRlbnRpZnkgYSBwZm4gbWFwcGluZyB0aGF0IGlzCkBAIC0xODcsNyArMTg4LDcgQEAKIAogCS8qIG5vdGlmaWNhdGlvbiB0aGF0IGEgcHJldmlvdXNseSByZWFkLW9ubHkgcGFnZSBpcyBhYm91dCB0byBiZWNvbWUKIAkgKiB3cml0YWJsZSwgaWYgYW4gZXJyb3IgaXMgcmV0dXJuZWQgaXQgd2lsbCBjYXVzZSBhIFNJR0JVUyAqLwotCWludCAoKnBhZ2VfbWt3cml0ZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKTsKKwlpbnQgKCpwYWdlX21rd3JpdGUpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7CiAKIAkvKiBjYWxsZWQgYnkgYWNjZXNzX3Byb2Nlc3Nfdm0gd2hlbiBnZXRfdXNlcl9wYWdlcygpIGZhaWxzLCB0eXBpY2FsbHkKIAkgKiBmb3IgdXNlIGJ5IHNwZWNpYWwgVk1BcyB0aGF0IGNhbiBzd2l0Y2ggYmV0d2VlbiBtZW1vcnkgYW5kIGhhcmR3YXJlCkBAIC04MzQsNiArODM1LDcgQEAKIGludCBfX3NldF9wYWdlX2RpcnR5X25vX3dyaXRlYmFjayhzdHJ1Y3QgcGFnZSAqcGFnZSk7CiBpbnQgcmVkaXJ0eV9wYWdlX2Zvcl93cml0ZXBhZ2Uoc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCiAJCQkJc3RydWN0IHBhZ2UgKnBhZ2UpOwordm9pZCBhY2NvdW50X3BhZ2VfZGlydGllZChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwogaW50IHNldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCBzZXRfcGFnZV9kaXJ0eV9sb2NrKHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCBjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhzdHJ1Y3QgcGFnZSAqcGFnZSk7CkBAIC0xMDc3LDcgKzEwNzksNyBAQAogI2VuZGlmCiAKIC8qIG5vbW11LmMgKi8KLWV4dGVybiBhdG9taWNfdCBtbWFwX3BhZ2VzX2FsbG9jYXRlZDsKK2V4dGVybiBhdG9taWNfbG9uZ190IG1tYXBfcGFnZXNfYWxsb2NhdGVkOwogCiAvKiBwcmlvX3RyZWUuYyAqLwogdm9pZCB2bWFfcHJpb190cmVlX2FkZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpvbGQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCmluZGV4IGQ4NGZlYjcuLjBlODBlMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZS1kZWJ1Zy1mbGFncy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCkBAIC05NCw2ICs5NSw5IEBACiAJdm9pZCAqdmlydHVhbDsJCQkvKiBLZXJuZWwgdmlydHVhbCBhZGRyZXNzIChOVUxMIGlmCiAJCQkJCSAgIG5vdCBrbWFwcGVkLCBpZS4gaGlnaG1lbSkgKi8KICNlbmRpZiAvKiBXQU5UX1BBR0VfVklSVFVBTCAqLworI2lmZGVmIENPTkZJR19XQU5UX1BBR0VfREVCVUdfRkxBR1MKKwl1bnNpZ25lZCBsb25nIGRlYnVnX2ZsYWdzOwkvKiBVc2UgYXRvbWljIGJpdG9wcyBvbiB0aGlzICovCisjZW5kaWYKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKaW5kZXggNGU0NTcyNS4uM2U3NjE1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaApAQCAtMTkyLDUgKzE5MiwxMCBAQAogCXdha2VfdXBfcHJvY2Vzcyhob3N0LT5zZGlvX2lycV90aHJlYWQpOwogfQogCitzdHJ1Y3QgcmVndWxhdG9yOworCitpbnQgbW1jX3JlZ3VsYXRvcl9nZXRfb2NybWFzayhzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHkpOworaW50IG1tY19yZWd1bGF0b3Jfc2V0X29jcihzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHksIHVuc2lnbmVkIHNob3J0IHZkZF9iaXQpOworCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggMWFjYTZjZS4uMTg2ZWM2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC03NjQsMTIgKzc2NCw2IEBACiBleHRlcm4gY2hhciBudW1hX3pvbmVsaXN0X29yZGVyW107CiAjZGVmaW5lIE5VTUFfWk9ORUxJU1RfT1JERVJfTEVOIDE2CS8qIHN0cmluZyBidWZmZXIgc2l6ZSAqLwogCi0jaW5jbHVkZSA8bGludXgvdG9wb2xvZ3kuaD4KLS8qIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgY3VycmVudCBOb2RlLiAqLwotI2lmbmRlZiBudW1hX25vZGVfaWQKLSNkZWZpbmUgbnVtYV9ub2RlX2lkKCkJCShjcHVfdG9fbm9kZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSkKLSNlbmRpZgotCiAjaWZuZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAKIGV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgY29udGlnX3BhZ2VfZGF0YTsKQEAgLTgwNiw2ICs4MDAsMTQgQEAKIAkgICAgIHpvbmU7CQkJCQlcCiAJICAgICB6b25lID0gbmV4dF96b25lKHpvbmUpKQogCisjZGVmaW5lIGZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpCQkgICAgICAgIFwKKwlmb3IgKHpvbmUgPSAoZmlyc3Rfb25saW5lX3BnZGF0KCkpLT5ub2RlX3pvbmVzOyBcCisJICAgICB6b25lOwkJCQkJXAorCSAgICAgem9uZSA9IG5leHRfem9uZSh6b25lKSkJCQlcCisJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCQlcCisJCQk7IC8qIGRvIG5vdGhpbmcgKi8JCVwKKwkJZWxzZQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB6b25lICp6b25lbGlzdF96b25lKHN0cnVjdCB6b25lcmVmICp6b25lcmVmKQogewogCXJldHVybiB6b25lcmVmLT56b25lOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbnRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaAppbmRleCA4MzBiYmNkLi4zYTA1OTI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaApAQCAtMjIsNiArMjIsOCBAQAogCWludCBldmVudDsKIH07CiAKK3N0cnVjdCBmc19zdHJ1Y3Q7CisKIGV4dGVybiBzdHJ1Y3QgbW50X25hbWVzcGFjZSAqY29weV9tbnRfbnModW5zaWduZWQgbG9uZywgc3RydWN0IG1udF9uYW1lc3BhY2UgKiwKIAkJc3RydWN0IGZzX3N0cnVjdCAqKTsKIGV4dGVybiB2b2lkIF9fcHV0X21udF9ucyhzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggMTQ1YTc1NS4uNjI3YWMwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0yNDgsNiArMjQ4LDEwIEBACiAJY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjczsKIAl1bnNpZ25lZCBpbnQgbnVtX3N5bXM7CiAKKwkvKiBLZXJuZWwgcGFyYW1ldGVycy4gKi8KKwlzdHJ1Y3Qga2VybmVsX3BhcmFtICprcDsKKwl1bnNpZ25lZCBpbnQgbnVtX2twOworCiAJLyogR1BMLW9ubHkgZXhwb3J0ZWQgc3ltYm9scy4gKi8KIAl1bnNpZ25lZCBpbnQgbnVtX2dwbF9zeW1zOwogCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpncGxfc3ltczsKQEAgLTMyOSw2ICszMzMsMTEgQEAKIAl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlcG9pbnRzOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVFJBQ0lORworCWNvbnN0IGNoYXIgKip0cmFjZV9icHJpbnRrX2ZtdF9zdGFydDsKKwl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlX2JwcmludGtfZm10OworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRAogCS8qIFdoYXQgbW9kdWxlcyBkZXBlbmQgb24gbWU/ICovCiAJc3RydWN0IGxpc3RfaGVhZCBtb2R1bGVzX3doaWNoX3VzZV9tZTsKQEAgLTM1MCw2ICszNTksOCBAQAogI2RlZmluZSBNT0RVTEVfQVJDSF9JTklUIHt9CiAjZW5kaWYKIAorZXh0ZXJuIHN0cnVjdCBtdXRleCBtb2R1bGVfbXV0ZXg7CisKIC8qIEZJWE1FOiBJdCdkIGJlIG5pY2UgdG8gaXNvbGF0ZSBtb2R1bGVzIGR1cmluZyBpbml0LCB0b28sIHNvIHRoZXkKICAgIGFyZW4ndCB1c2VkIGJlZm9yZSB0aGV5IChtYXkpIGZhaWwuICBCdXQgcHJlc2VudGx5IHRvbyBtdWNoIGNvZGUKICAgIChJREUgJiBTQ1NJKSByZXF1aXJlIGVudHJ5IGludG8gdGhlIG1vZHVsZSBkdXJpbmcgaW5pdC4qLwpAQCAtMzU4LDEwICszNjksMTAgQEAKIAlyZXR1cm4gbW9kLT5zdGF0ZSAhPSBNT0RVTEVfU1RBVEVfR09JTkc7CiB9CiAKLS8qIElzIHRoaXMgYWRkcmVzcyBpbiBhIG1vZHVsZT8gKHNlY29uZCBpcyB3aXRoIG5vIGxvY2tzLCBmb3Igb29wcykgKi8KLXN0cnVjdCBtb2R1bGUgKm1vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKIHN0cnVjdCBtb2R1bGUgKl9fbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpOwotaW50IGlzX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CitzdHJ1Y3QgbW9kdWxlICpfX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7Citib29sIGlzX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7Citib29sIGlzX21vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKIAogc3RhdGljIGlubGluZSBpbnQgd2l0aGluX21vZHVsZV9jb3JlKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IG1vZHVsZSAqbW9kKQogewpAQCAtMzc1LDYgKzM4NiwzMSBAQAogCSAgICAgICBhZGRyIDwgKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfaW5pdCArIG1vZC0+aW5pdF9zaXplOwogfQogCisvKiBTZWFyY2ggZm9yIG1vZHVsZSBieSBuYW1lOiBtdXN0IGhvbGQgbW9kdWxlX211dGV4LiAqLworc3RydWN0IG1vZHVsZSAqZmluZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSk7CisKK3N0cnVjdCBzeW1zZWFyY2ggeworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpzdGFydCwgKnN0b3A7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjczsKKwllbnVtIHsKKwkJTk9UX0dQTF9PTkxZLAorCQlHUExfT05MWSwKKwkJV0lMTF9CRV9HUExfT05MWSwKKwl9IGxpY2VuY2U7CisJYm9vbCB1bnVzZWQ7Cit9OworCisvKiBTZWFyY2ggZm9yIGFuIGV4cG9ydGVkIHN5bWJvbCBieSBuYW1lLiAqLworY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmZpbmRfc3ltYm9sKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCXN0cnVjdCBtb2R1bGUgKipvd25lciwKKwkJCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqKmNyYywKKwkJCQkJYm9vbCBncGxvaywKKwkJCQkJYm9vbCB3YXJuKTsKKworLyogV2FsayB0aGUgZXhwb3J0ZWQgc3ltYm9sIHRhYmxlICovCitib29sIGVhY2hfc3ltYm9sKGJvb2wgKCpmbikoY29uc3Qgc3RydWN0IHN5bXNlYXJjaCAqYXJyLCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc3ltbnVtLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CisKIC8qIFJldHVybnMgMCBhbmQgZmlsbHMgaW4gdmFsdWUsIGRlZmluZWQgYW5kIG5hbWVidWYsIG9yIC1FUkFOR0UgaWYKICAgIHN5bW51bSBvdXQgb2YgcmFuZ2UuICovCiBpbnQgbW9kdWxlX2dldF9rYWxsc3ltKHVuc2lnbmVkIGludCBzeW1udW0sIHVuc2lnbmVkIGxvbmcgKnZhbHVlLCBjaGFyICp0eXBlLApAQCAtMzgzLDYgKzQxOSwxMCBAQAogLyogTG9vayBmb3IgdGhpcyBuYW1lOiBjYW4gYmUgb2YgZm9ybSBtb2R1bGU6bmFtZS4gKi8KIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2thbGxzeW1zX2xvb2t1cF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwogCitpbnQgbW9kdWxlX2thbGxzeW1zX29uX2VhY2hfc3ltYm9sKGludCAoKmZuKSh2b2lkICosIGNvbnN0IGNoYXIgKiwKKwkJCQkJICAgICBzdHJ1Y3QgbW9kdWxlICosIHVuc2lnbmVkIGxvbmcpLAorCQkJCSAgIHZvaWQgKmRhdGEpOworCiBleHRlcm4gdm9pZCBfX21vZHVsZV9wdXRfYW5kX2V4aXQoc3RydWN0IG1vZHVsZSAqbW9kLCBsb25nIGNvZGUpCiAJX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKICNkZWZpbmUgbW9kdWxlX3B1dF9hbmRfZXhpdChjb2RlKSBfX21vZHVsZV9wdXRfYW5kX2V4aXQoVEhJU19NT0RVTEUsIGNvZGUpOwpAQCAtNDQ0LDYgKzQ4NCw3IEBACiAjZGVmaW5lIHN5bWJvbF9wdXRfYWRkcihwKSBkbyB7IH0gd2hpbGUoMCkKIAogI2VuZGlmIC8qIENPTkZJR19NT0RVTEVfVU5MT0FEICovCitpbnQgdXNlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICphLCBzdHJ1Y3QgbW9kdWxlICpiKTsKIAogLyogVGhpcyBpcyBhICNkZWZpbmUgc28gdGhlIHN0cmluZyBkb2Vzbid0IGdldCBwdXQgaW4gZXZlcnkgLm8gZmlsZSAqLwogI2RlZmluZSBtb2R1bGVfbmFtZShtb2QpCQkJXApAQCAtNDkwLDIxICs1MzEsMjQgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyogSXMgdGhpcyBhZGRyZXNzIGluIGEgbW9kdWxlPyAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgbW9kdWxlICptb2R1bGVfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1vZHVsZSAqX19tb2R1bGVfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CiAKLS8qIElzIHRoaXMgYWRkcmVzcyBpbiBhIG1vZHVsZT8gKGRvbid0IHRha2UgYSBsb2NrLCB3ZSdyZSBvb3BzaW5nKSAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbW9kdWxlICpfX21vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQogewogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpc19tb2R1bGVfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbW9kdWxlX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQogewotCXJldHVybiAwOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzX21vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiBmYWxzZTsKIH0KIAogLyogR2V0L3B1dCBhIGtlcm5lbCBzeW1ib2wgKGNhbGxzIHNob3VsZCBiZSBzeW1tZXRyaWMpICovCkBAIC01NTksNiArNjAzLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IG1vZHVsZV9rYWxsc3ltc19vbl9lYWNoX3N5bWJvbChpbnQgKCpmbikodm9pZCAqLCBjb25zdCBjaGFyICosCisJCQkJCQkJICAgc3RydWN0IG1vZHVsZSAqLAorCQkJCQkJCSAgIHVuc2lnbmVkIGxvbmcpLAorCQkJCQkJIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX21vZHVsZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYikKIHsKIAkvKiBubyBldmVudHMgd2lsbCBoYXBwZW4gYW55d2F5LCBzbyB0aGlzIGNhbiBhbHdheXMgc3VjY2VlZCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCmluZGV4IGU0YWYzMzkuLmE0ZjBiOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKQEAgLTEzOCw2ICsxMzgsMTYgQEAKIAkJICAgICAgdW5zaWduZWQgbnVtLAogCQkgICAgICBpbnQgKCp1bmtub3duKShjaGFyICpwYXJhbSwgY2hhciAqdmFsKSk7CiAKKy8qIENhbGxlZCBieSBtb2R1bGUgcmVtb3ZlLiAqLworI2lmZGVmIENPTkZJR19TWVNGUworZXh0ZXJuIHZvaWQgZGVzdHJveV9wYXJhbXMoY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqcGFyYW1zLCB1bnNpZ25lZCBudW0pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X3BhcmFtcyhjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICpwYXJhbXMsCisJCQkJICB1bnNpZ25lZCBudW0pCit7Cit9CisjZW5kaWYgLyogIUNPTkZJR19TWVNGUyAqLworCiAvKiBBbGwgdGhlIGhlbHBlciBmdW5jdGlvbnMgKi8KIC8qIFRoZSBtYWNyb3MgdG8gZG8gY29tcGlsZS10aW1lIHR5cGUgY2hlY2tpbmcgc3RvbGVuIGZyb20gSmFrdWIKICAgIEplbGluZWssIHdobyBJSVJDIGNhbWUgdXAgd2l0aCB0aGlzIGlkZWEgZm9yIHRoZSAyLjQgbW9kdWxlIGluaXQgY29kZS4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXBhZ2UuaCBiL2luY2x1ZGUvbGludXgvbXBhZ2UuaAppbmRleCA1YzQyODIxLi4wNjhhMGM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21wYWdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tcGFnZS5oCkBAIC0xMSwyMSArMTEsMTEgQEAKICAqLwogI2lmZGVmIENPTkZJR19CTE9DSwogCi1zdHJ1Y3QgbXBhZ2VfZGF0YSB7Ci0Jc3RydWN0IGJpbyAqYmlvOwotCXNlY3Rvcl90IGxhc3RfYmxvY2tfaW5fYmlvOwotCWdldF9ibG9ja190ICpnZXRfYmxvY2s7Ci0JdW5zaWduZWQgdXNlX3dyaXRlcGFnZTsKLX07Ci0KIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbDsKIAotc3RydWN0IGJpbyAqbXBhZ2VfYmlvX3N1Ym1pdChpbnQgcncsIHN0cnVjdCBiaW8gKmJpbyk7CiBpbnQgbXBhZ2VfcmVhZHBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlcywKIAkJCQl1bnNpZ25lZCBucl9wYWdlcywgZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrKTsKIGludCBtcGFnZV9yZWFkcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrKTsKLWludCBfX21wYWdlX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsCi0JCSAgICAgIHZvaWQgKmRhdGEpOwogaW50IG1wYWdlX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCBnZXRfYmxvY2tfdCBnZXRfYmxvY2spOwogaW50IG1wYWdlX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2V0X2Jsb2NrX3QgKmdldF9ibG9jaywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXNpLmggYi9pbmNsdWRlL2xpbnV4L21zaS5oCmluZGV4IGQyYjhhMWUuLjY5OTFhYjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9tc2kuaApAQCAtMjAsMjAgKzIwLDIzIEBACiAKIHN0cnVjdCBtc2lfZGVzYyB7CiAJc3RydWN0IHsKLQkJX191OAl0eXBlCTogNTsgCS8qIHswOiB1bnVzZWQsIDVoOk1TSSwgMTFoOk1TSS1YfSAqLworCQlfX3U4CWlzX21zaXgJOiAxOworCQlfX3U4CW11bHRpcGxlOiAzOwkvKiBsb2cyIG51bWJlciBvZiBtZXNzYWdlcyAqLwogCQlfX3U4CW1hc2tiaXQJOiAxOyAJLyogbWFzay1wZW5kaW5nIGJpdCBzdXBwb3J0ZWQgPyAgICovCi0JCV9fdTgJbWFza2VkCTogMTsKIAkJX191OAlpc182NAk6IDE7CS8qIEFkZHJlc3Mgc2l6ZTogMD0zMmJpdCAxPTY0Yml0ICAqLwogCQlfX3U4CXBvczsJIAkvKiBMb2NhdGlvbiBvZiB0aGUgbXNpIGNhcGFiaWxpdHkgKi8KLQkJX191MzIJbWFza2JpdHNfbWFzazsgIC8qIG1hc2sgYml0cyBtYXNrICovCiAJCV9fdTE2CWVudHJ5X25yOyAgICAJLyogc3BlY2lmaWMgZW5hYmxlZCBlbnRyeSAJICAqLwogCQl1bnNpZ25lZCBkZWZhdWx0X2lycTsJLyogZGVmYXVsdCBwcmUtYXNzaWduZWQgaXJxCSAgKi8KLQl9bXNpX2F0dHJpYjsKKwl9IG1zaV9hdHRyaWI7CiAKKwl1MzIgbWFza2VkOwkJCS8qIG1hc2sgYml0cyAqLwogCXVuc2lnbmVkIGludCBpcnE7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCi0Jdm9pZCBfX2lvbWVtICptYXNrX2Jhc2U7CisJdW5pb24geworCQl2b2lkIF9faW9tZW0gKm1hc2tfYmFzZTsKKwkJdTggbWFza19wb3M7CisJfTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCiAJLyogTGFzdCBzZXQgTVNJIG1lc3NhZ2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCmluZGV4IDhjYzg4MDcuLmZkZmZiNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaApAQCAtMTY2LDggKzE2Niw3IEBACiAJICovCiAJc3RydWN0IHJhZGl4X3RyZWVfcm9vdAluZnNfcGFnZV90cmVlOwogCi0JdW5zaWduZWQgbG9uZwkJbmNvbW1pdCwKLQkJCQlucGFnZXM7CisJdW5zaWduZWQgbG9uZwkJbnBhZ2VzOwogCiAJLyogT3BlbiBjb250ZXh0cyBmb3Igc2hhcmVkIG1tYXAgd3JpdGVzICovCiAJc3RydWN0IGxpc3RfaGVhZAlvcGVuX2ZpbGVzOwpAQCAtMTg2LDYgKzE4NSw5IEBACiAJZm1vZGVfdAkJCSBkZWxlZ2F0aW9uX3N0YXRlOwogCXN0cnVjdCByd19zZW1hcGhvcmUJcndzZW07CiAjZW5kaWYgLyogQ09ORklHX05GU19WNCovCisjaWZkZWYgQ09ORklHX05GU19GU0NBQ0hFCisJc3RydWN0IGZzY2FjaGVfY29va2llCSpmc2NhY2hlOworI2VuZGlmCiAJc3RydWN0IGlub2RlCQl2ZnNfaW5vZGU7CiB9OwogCkBAIC0yMDcsNiArMjA5LDkgQEAKICNkZWZpbmUgTkZTX0lOT19TVEFMRQkJKDEpCQkvKiBwb3NzaWJsZSBzdGFsZSBpbm9kZSAqLwogI2RlZmluZSBORlNfSU5PX0FDTF9MUlVfU0VUCSgyKQkJLyogSW5vZGUgaXMgb24gdGhlIExSVSBsaXN0ICovCiAjZGVmaW5lIE5GU19JTk9fTU9VTlRQT0lOVAkoMykJCS8qIGlub2RlIGlzIHJlbW90ZSBtb3VudHBvaW50ICovCisjZGVmaW5lIE5GU19JTk9fRkxVU0hJTkcJKDQpCQkvKiBpbm9kZSBpcyBmbHVzaGluZyBvdXQgZGF0YSAqLworI2RlZmluZSBORlNfSU5PX0ZTQ0FDSEUJCSg1KQkJLyogaW5vZGUgY2FuIGJlIGNhY2hlZCBieSBGUy1DYWNoZSAqLworI2RlZmluZSBORlNfSU5PX0ZTQ0FDSEVfTE9DSwkoNikJCS8qIEZTLUNhY2hlIGNvb2tpZSBtYW5hZ2VtZW50IGxvY2sgKi8KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzX2lub2RlICpORlNfSShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtMjYwLDYgKzI2NSwxMSBAQAogCXJldHVybiB0ZXN0X2JpdChORlNfSU5PX1NUQUxFLCAmTkZTX0koaW5vZGUpLT5mbGFncyk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IE5GU19GU0NBQ0hFKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuIHRlc3RfYml0KE5GU19JTk9fRlNDQUNIRSwgJk5GU19JKGlub2RlKS0+ZmxhZ3MpOworfQorCiBzdGF0aWMgaW5saW5lIF9fdTY0IE5GU19GSUxFSUQoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlyZXR1cm4gTkZTX0koaW5vZGUpLT5maWxlaWQ7CkBAIC01MDYsNiArNTE2LDggQEAKIAkJc3RydWN0IGxpc3RfaGVhZCAqLCB1bnNpZ25lZCk7CiBleHRlcm4gaW50ICBuZnNfcmVhZHBhZ2VfcmVzdWx0KHN0cnVjdCBycGNfdGFzayAqLCBzdHJ1Y3QgbmZzX3JlYWRfZGF0YSAqKTsKIGV4dGVybiB2b2lkIG5mc19yZWFkZGF0YV9yZWxlYXNlKHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCAgbmZzX3JlYWRwYWdlX2FzeW5jKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICosIHN0cnVjdCBpbm9kZSAqLAorCQkJICAgICAgIHN0cnVjdCBwYWdlICopOwogCiAvKgogICogQWxsb2NhdGUgbmZzX3JlYWRfZGF0YSBzdHJ1Y3R1cmVzCkBAIC01ODMsNiArNTk1LDcgQEAKICNkZWZpbmUgTkZTREJHX0NBTExCQUNLCQkweDAxMDAKICNkZWZpbmUgTkZTREJHX0NMSUVOVAkJMHgwMjAwCiAjZGVmaW5lIE5GU0RCR19NT1VOVAkJMHgwNDAwCisjZGVmaW5lIE5GU0RCR19GU0NBQ0hFCQkweDA4MDAKICNkZWZpbmUgTkZTREJHX0FMTAkJMHhGRkZGCiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAppbmRleCA5YmI4MWFlLi42YWQ3NTk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKQEAgLTY0LDYgKzY0LDEwIEBACiAJY2hhcgkJCWNsX2lwYWRkcls0OF07CiAJdW5zaWduZWQgY2hhcgkJY2xfaWRfdW5pcXVpZmllcjsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX05GU19GU0NBQ0hFCisJc3RydWN0IGZzY2FjaGVfY29va2llCSpmc2NhY2hlOwkvKiBjbGllbnQgaW5kZXggY2FjaGUgY29va2llICovCisjZW5kaWYKIH07CiAKIC8qCkBAIC05NiwxNiArMTAwLDI4IEBACiAJdW5zaWduZWQgaW50CQlhY2Rpcm1pbjsKIAl1bnNpZ25lZCBpbnQJCWFjZGlybWF4OwogCXVuc2lnbmVkIGludAkJbmFtZWxlbjsKKwl1bnNpZ25lZCBpbnQJCW9wdGlvbnM7CS8qIGV4dHJhIG9wdGlvbnMgZW5hYmxlZCBieSBtb3VudCAqLworI2RlZmluZSBORlNfT1BUSU9OX0ZTQ0FDSEUJMHgwMDAwMDAwMQkvKiAtIGxvY2FsIGNhY2hpbmcgZW5hYmxlZCAqLwogCiAJc3RydWN0IG5mc19mc2lkCQlmc2lkOwogCV9fdTY0CQkJbWF4ZmlsZXNpemU7CS8qIG1heGltdW0gZmlsZSBzaXplICovCiAJdW5zaWduZWQgbG9uZwkJbW91bnRfdGltZTsJLyogd2hlbiB0aGlzIGZzIHdhcyBtb3VudGVkICovCiAJZGV2X3QJCQlzX2RldjsJCS8qIHN1cGVyYmxvY2sgZGV2IG51bWJlcnMgKi8KIAorI2lmZGVmIENPTkZJR19ORlNfRlNDQUNIRQorCXN0cnVjdCBuZnNfZnNjYWNoZV9rZXkJKmZzY2FjaGVfa2V5OwkvKiB1bmlxdWUga2V5IGZvciBzdXBlcmJsb2NrICovCisJc3RydWN0IGZzY2FjaGVfY29va2llCSpmc2NhY2hlOwkvKiBzdXBlcmJsb2NrIGNvb2tpZSAqLworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfTkZTX1Y0CiAJdTMyCQkJYXR0cl9iaXRtYXNrWzJdOy8qIFY0IGJpdG1hc2sgcmVwcmVzZW50aW5nIHRoZSBzZXQKIAkJCQkJCSAgIG9mIGF0dHJpYnV0ZXMgc3VwcG9ydGVkIG9uIHRoaXMKIAkJCQkJCSAgIGZpbGVzeXN0ZW0gKi8KKwl1MzIJCQljYWNoZV9jb25zaXN0ZW5jeV9iaXRtYXNrWzJdOworCQkJCQkJLyogVjQgYml0bWFzayByZXByZXNlbnRpbmcgdGhlIHN1YnNldAorCQkJCQkJICAgb2YgY2hhbmdlIGF0dHJpYnV0ZSwgc2l6ZSwgY3RpbWUKKwkJCQkJCSAgIGFuZCBtdGltZSBhdHRyaWJ1dGVzIHN1cHBvcnRlZCBieQorCQkJCQkJICAgdGhlIHNlcnZlciAqLwogCXUzMgkJCWFjbF9iaXRtYXNrOwkvKiBWNCBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgQUNFcwogCQkJCQkJICAgdGhhdCBhcmUgc3VwcG9ydGVkIG9uIHRoaXMKIAkJCQkJCSAgIGZpbGVzeXN0ZW0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2lvc3RhdC5oIGIvaW5jbHVkZS9saW51eC9uZnNfaW9zdGF0LmgKaW5kZXggMWNiOWEzZi4uNjhiMTBmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfaW9zdGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfaW9zdGF0LmgKQEAgLTExNiw0ICsxMTYsMTYgQEAKIAlfX05GU0lPU19DT1VOVFNNQVgsCiB9OwogCisvKgorICogTkZTIGxvY2FsIGNhY2hpbmcgc2VydmljaW5nIGNvdW50ZXJzCisgKi8KK2VudW0gbmZzX3N0YXRfZnNjYWNoZWNvdW50ZXJzIHsKKwlORlNJT1NfRlNDQUNIRV9QQUdFU19SRUFEX09LLAorCU5GU0lPU19GU0NBQ0hFX1BBR0VTX1JFQURfRkFJTCwKKwlORlNJT1NfRlNDQUNIRV9QQUdFU19XUklUVEVOX09LLAorCU5GU0lPU19GU0NBQ0hFX1BBR0VTX1dSSVRURU5fRkFJTCwKKwlORlNJT1NfRlNDQUNIRV9QQUdFU19VTkNBQ0hFRCwKKwlfX05GU0lPU19GU0NBQ0hFTUFYLAorfTsKKwogI2VuZGlmCS8qIF9MSU5VWF9ORlNfSU9TVEFUICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaCBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCmluZGV4IDQzYTcxM2YuLmI4OWMzNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCkBAIC0yNywxMiArMjcsOCBAQAogfQogCiBzdHJ1Y3QgbmZzX2ZhdHRyIHsKLQl1bnNpZ25lZCBzaG9ydAkJdmFsaWQ7CQkvKiB3aGljaCBmaWVsZHMgYXJlIHZhbGlkICovCi0JX191NjQJCQlwcmVfc2l6ZTsJLyogcHJlX29wX2F0dHIuc2l6ZQkgICovCi0Jc3RydWN0IHRpbWVzcGVjCQlwcmVfbXRpbWU7CS8qIHByZV9vcF9hdHRyLm10aW1lCSAgKi8KLQlzdHJ1Y3QgdGltZXNwZWMJCXByZV9jdGltZTsJLyogcHJlX29wX2F0dHIuY3RpbWUJICAqLwotCWVudW0gbmZzX2Z0eXBlCQl0eXBlOwkJLyogYWx3YXlzIHVzZSBORlN2MiB0eXBlcyAqLwotCV9fdTMyCQkJbW9kZTsKKwl1bnNpZ25lZCBpbnQJCXZhbGlkOwkJLyogd2hpY2ggZmllbGRzIGFyZSB2YWxpZCAqLworCXVtb2RlX3QJCQltb2RlOwogCV9fdTMyCQkJbmxpbms7CiAJX191MzIJCQl1aWQ7CiAJX191MzIJCQlnaWQ7CkBAIC01MiwxOSArNDgsNTUgQEAKIAlzdHJ1Y3QgdGltZXNwZWMJCWF0aW1lOwogCXN0cnVjdCB0aW1lc3BlYwkJbXRpbWU7CiAJc3RydWN0IHRpbWVzcGVjCQljdGltZTsKLQlfX3UzMgkJCWJpdG1hcFsyXTsJLyogTkZTdjQgcmV0dXJuZWQgYXR0cmlidXRlIGJpdG1hcCAqLwogCV9fdTY0CQkJY2hhbmdlX2F0dHI7CS8qIE5GU3Y0IGNoYW5nZSBhdHRyaWJ1dGUgKi8KIAlfX3U2NAkJCXByZV9jaGFuZ2VfYXR0cjsvKiBwcmUtb3AgTkZTdjQgY2hhbmdlIGF0dHJpYnV0ZSAqLworCV9fdTY0CQkJcHJlX3NpemU7CS8qIHByZV9vcF9hdHRyLnNpemUJICAqLworCXN0cnVjdCB0aW1lc3BlYwkJcHJlX210aW1lOwkvKiBwcmVfb3BfYXR0ci5tdGltZQkgICovCisJc3RydWN0IHRpbWVzcGVjCQlwcmVfY3RpbWU7CS8qIHByZV9vcF9hdHRyLmN0aW1lCSAgKi8KIAl1bnNpZ25lZCBsb25nCQl0aW1lX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCWdlbmNvdW50OwogfTsKIAotI2RlZmluZSBORlNfQVRUUl9XQ0MJCTB4MDAwMQkJLyogcHJlLW9wIFdDQyBkYXRhICAgICovCi0jZGVmaW5lIE5GU19BVFRSX0ZBVFRSCQkweDAwMDIJCS8qIHBvc3Qtb3AgYXR0cmlidXRlcyAqLwotI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WMwkweDAwMDQJCS8qIE5GU3YzIGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfVjQJMHgwMDA4CQkvKiBORlN2NCBjaGFuZ2UgYXR0cmlidXRlICovCi0jZGVmaW5lIE5GU19BVFRSX1dDQ19WNAkJMHgwMDEwCQkvKiBwcmUtb3AgY2hhbmdlIGF0dHJpYnV0ZSAqLwotI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WNF9SRUZFUlJBTAkweDAwMjAJCS8qIE5GU3Y0IHJlZmVycmFsICovCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1RZUEUJCSgxVSA8PCAwKQorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9NT0RFCQkoMVUgPDwgMSkKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfTkxJTksJCSgxVSA8PCAyKQorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9PV05FUgkJKDFVIDw8IDMpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX0dST1VQCQkoMVUgPDwgNCkKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfUkRFVgkJKDFVIDw8IDUpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1NJWkUJCSgxVSA8PCA2KQorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9QUkVTSVpFCQkoMVUgPDwgNykKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfQkxPQ0tTX1VTRUQJKDFVIDw8IDgpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1NQQUNFX1VTRUQJKDFVIDw8IDkpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX0ZTSUQJCSgxVSA8PCAxMCkKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfRklMRUlECQkoMVUgPDwgMTEpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX0FUSU1FCQkoMVUgPDwgMTIpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX01USU1FCQkoMVUgPDwgMTMpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX0NUSU1FCQkoMVUgPDwgMTQpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1BSRU1USU1FCQkoMVUgPDwgMTUpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1BSRUNUSU1FCQkoMVUgPDwgMTYpCisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX0NIQU5HRQkJKDFVIDw8IDE3KQorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9QUkVDSEFOR0UJKDFVIDw8IDE4KQorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WNF9SRUZFUlJBTAkoMVUgPDwgMTkpCS8qIE5GU3Y0IHJlZmVycmFsICovCisKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFIgKE5GU19BVFRSX0ZBVFRSX1RZUEUgXAorCQl8IE5GU19BVFRSX0ZBVFRSX01PREUgXAorCQl8IE5GU19BVFRSX0ZBVFRSX05MSU5LIFwKKwkJfCBORlNfQVRUUl9GQVRUUl9PV05FUiBcCisJCXwgTkZTX0FUVFJfRkFUVFJfR1JPVVAgXAorCQl8IE5GU19BVFRSX0ZBVFRSX1JERVYgXAorCQl8IE5GU19BVFRSX0ZBVFRSX1NJWkUgXAorCQl8IE5GU19BVFRSX0ZBVFRSX0ZTSUQgXAorCQl8IE5GU19BVFRSX0ZBVFRSX0ZJTEVJRCBcCisJCXwgTkZTX0FUVFJfRkFUVFJfQVRJTUUgXAorCQl8IE5GU19BVFRSX0ZBVFRSX01USU1FIFwKKwkJfCBORlNfQVRUUl9GQVRUUl9DVElNRSkKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfVjIgKE5GU19BVFRSX0ZBVFRSIFwKKwkJfCBORlNfQVRUUl9GQVRUUl9CTE9DS1NfVVNFRCkKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfVjMgKE5GU19BVFRSX0ZBVFRSIFwKKwkJfCBORlNfQVRUUl9GQVRUUl9TUEFDRV9VU0VEKQorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WNCAoTkZTX0FUVFJfRkFUVFIgXAorCQl8IE5GU19BVFRSX0ZBVFRSX1NQQUNFX1VTRUQgXAorCQl8IE5GU19BVFRSX0ZBVFRSX0NIQU5HRSkKIAogLyoKICAqIEluZm8gb24gdGhlIGZpbGUgc3lzdGVtCkBAIC04MzYsNiArODY4LDcgQEAKIAlpbnQJKCpsb2NrKShzdHJ1Y3QgZmlsZSAqLCBpbnQsIHN0cnVjdCBmaWxlX2xvY2sgKik7CiAJaW50CSgqbG9ja19jaGVja19ib3VuZHMpKGNvbnN0IHN0cnVjdCBmaWxlX2xvY2sgKik7CiAJdm9pZAkoKmNsZWFyX2FjbF9jYWNoZSkoc3RydWN0IGlub2RlICopOworCXZvaWQJKCpjbG9zZV9jb250ZXh0KShzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LCBpbnQpOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbnNwcm94eS5oIGIvaW5jbHVkZS9saW51eC9uc3Byb3h5LmgKaW5kZXggYWZhZDdkZS4uN2IzNzBjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uc3Byb3h5LmgKKysrIGIvaW5jbHVkZS9saW51eC9uc3Byb3h5LmgKQEAgLTgsNiArOCw3IEBACiBzdHJ1Y3QgdXRzX25hbWVzcGFjZTsKIHN0cnVjdCBpcGNfbmFtZXNwYWNlOwogc3RydWN0IHBpZF9uYW1lc3BhY2U7CitzdHJ1Y3QgZnNfc3RydWN0OwogCiAvKgogICogQSBzdHJ1Y3R1cmUgdG8gY29udGFpbiBwb2ludGVycyB0byBhbGwgcGVyLXByb2Nlc3MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1kZWJ1Zy1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWRlYnVnLWZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2MzhmZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1kZWJ1Zy1mbGFncy5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgTElOVVhfUEFHRV9ERUJVR19GTEFHU19ICisjZGVmaW5lICBMSU5VWF9QQUdFX0RFQlVHX0ZMQUdTX0gKKworLyoKKyAqIHBhZ2UtPmRlYnVnX2ZsYWdzIGJpdHM6CisgKgorICogUEFHRV9ERUJVR19GTEFHX1BPSVNPTiBpcyBzZXQgZm9yIHBvaXNvbmVkIHBhZ2VzLiBUaGlzIGlzIHVzZWQgdG8KKyAqIGltcGxlbWVudCBnZW5lcmljIGRlYnVnIHBhZ2VhbGxvYyBmZWF0dXJlLiBUaGUgcGFnZXMgYXJlIGZpbGxlZCB3aXRoCisgKiBwb2lzb24gcGF0dGVybnMgYW5kIHNldCB0aGlzIGZsYWcgYWZ0ZXIgZnJlZV9wYWdlcygpLiBUaGUgcG9pc29uZWQKKyAqIHBhZ2VzIGFyZSB2ZXJpZmllZCB3aGV0aGVyIHRoZSBwYXR0ZXJucyBhcmUgbm90IGNvcnJ1cHRlZCBhbmQgY2xlYXIKKyAqIHRoZSBmbGFnIGJlZm9yZSBhbGxvY19wYWdlcygpLgorICovCisKK2VudW0gcGFnZV9kZWJ1Z19mbGFncyB7CisJUEFHRV9ERUJVR19GTEFHX1BPSVNPTiwJCS8qIFBhZ2UgaXMgcG9pc29uZWQgKi8KK307CisKKy8qCisgKiBFbnN1cmUgdGhhdCBDT05GSUdfV0FOVF9QQUdFX0RFQlVHX0ZMQUdTIHJlbGlhYmx5CisgKiBnZXRzIHR1cm5lZCBvZmYgd2hlbiBubyBkZWJ1ZyBmZWF0dXJlcyBhcmUgZW5hYmxpbmcgaXQhCisgKi8KKworI2lmZGVmIENPTkZJR19XQU5UX1BBR0VfREVCVUdfRkxBR1MKKyNpZiAhZGVmaW5lZChDT05GSUdfUEFHRV9QT0lTT05JTkcpIFwKKy8qICYmICFkZWZpbmVkKENPTkZJR19QQUdFX0RFQlVHX1NPTUVUSElOR19FTFNFKSAmJiAuLi4gKi8KKyNlcnJvciBXQU5UX1BBR0VfREVCVUdfRkxBR1MgaXMgdHVybmVkIG9uIHdpdGggbm8gZGVidWcgZmVhdHVyZXMhCisjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfV0FOVF9QQUdFX0RFQlVHX0ZMQUdTICovCisKKyNlbmRpZiAvKiBMSU5VWF9QQUdFX0RFQlVHX0ZMQUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKaW5kZXggMjE5YTUyMy4uNjIyMTRjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTgyLDYgKzgyLDcgQEAKIAlQR19hcmNoXzEsCiAJUEdfcmVzZXJ2ZWQsCiAJUEdfcHJpdmF0ZSwJCS8qIElmIHBhZ2VjYWNoZSwgaGFzIGZzLXByaXZhdGUgZGF0YSAqLworCVBHX3ByaXZhdGVfMiwJCS8qIElmIHBhZ2VjYWNoZSwgaGFzIGZzIGF1eCBkYXRhICovCiAJUEdfd3JpdGViYWNrLAkJLyogUGFnZSBpcyB1bmRlciB3cml0ZWJhY2sgKi8KICNpZmRlZiBDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVECiAJUEdfaGVhZCwJCS8qIEEgaGVhZCBwYWdlICovCkBAIC05Niw2ICs5Nyw4IEBACiAJUEdfc3dhcGJhY2tlZCwJCS8qIFBhZ2UgaXMgYmFja2VkIGJ5IFJBTS9zd2FwICovCiAjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQogCVBHX3VuZXZpY3RhYmxlLAkJLyogUGFnZSBpcyAidW5ldmljdGFibGUiICAqLworI2VuZGlmCisjaWZkZWYgQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVAogCVBHX21sb2NrZWQsCQkvKiBQYWdlIGlzIHZtYSBtbG9ja2VkICovCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSUE2NF9VTkNBQ0hFRF9BTExPQ0FUT1IKQEAgLTEwNiw2ICsxMDksMTIgQEAKIAkvKiBGaWxlc3lzdGVtcyAqLwogCVBHX2NoZWNrZWQgPSBQR19vd25lcl9wcml2XzEsCiAKKwkvKiBUd28gcGFnZSBiaXRzIGFyZSBjb25zY3JpcHRlZCBieSBGUy1DYWNoZSB0byBtYWludGFpbiBsb2NhbCBjYWNoaW5nCisJICogc3RhdGUuICBUaGVzZSBiaXRzIGFyZSBzZXQgb24gcGFnZXMgYmVsb25naW5nIHRvIHRoZSBuZXRmcydzIGlub2RlcworCSAqIHdoZW4gdGhvc2UgaW5vZGVzIGFyZSBiZWluZyBsb2NhbGx5IGNhY2hlZC4KKwkgKi8KKwlQR19mc2NhY2hlID0gUEdfcHJpdmF0ZV8yLAkvKiBwYWdlIGJhY2tlZCBieSBjYWNoZSAqLworCiAJLyogWEVOICovCiAJUEdfcGlubmVkID0gUEdfb3duZXJfcHJpdl8xLAogCVBHX3NhdmVwaW5uZWQgPSBQR19kaXJ0eSwKQEAgLTE4MCw3ICsxODksNyBAQAogCiBzdHJ1Y3QgcGFnZTsJLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLwogCi1URVNUUEFHRUZMQUcoTG9ja2VkLCBsb2NrZWQpCitURVNUUEFHRUZMQUcoTG9ja2VkLCBsb2NrZWQpIFRFU1RTRVRGTEFHKExvY2tlZCwgbG9ja2VkKQogUEFHRUZMQUcoRXJyb3IsIGVycm9yKQogUEFHRUZMQUcoUmVmZXJlbmNlZCwgcmVmZXJlbmNlZCkgVEVTVENMRUFSRkxBRyhSZWZlcmVuY2VkLCByZWZlcmVuY2VkKQogUEFHRUZMQUcoRGlydHksIGRpcnR5KSBURVNUU0NGTEFHKERpcnR5LCBkaXJ0eSkgX19DTEVBUlBBR0VGTEFHKERpcnR5LCBkaXJ0eSkKQEAgLTE5Miw4ICsyMDEsNiBAQAogUEFHRUZMQUcoUGlubmVkLCBwaW5uZWQpIFRFU1RTQ0ZMQUcoUGlubmVkLCBwaW5uZWQpCS8qIFhlbiAqLwogUEFHRUZMQUcoU2F2ZVBpbm5lZCwgc2F2ZXBpbm5lZCk7CQkJLyogWGVuICovCiBQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQpIF9fQ0xFQVJQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQpCi1QQUdFRkxBRyhQcml2YXRlLCBwcml2YXRlKSBfX0NMRUFSUEFHRUZMQUcoUHJpdmF0ZSwgcHJpdmF0ZSkKLQlfX1NFVFBBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUpCiBQQUdFRkxBRyhTd2FwQmFja2VkLCBzd2FwYmFja2VkKSBfX0NMRUFSUEFHRUZMQUcoU3dhcEJhY2tlZCwgc3dhcGJhY2tlZCkKIAogX19QQUdFRkxBRyhTbG9iUGFnZSwgc2xvYl9wYWdlKQpAQCAtMjAzLDYgKzIxMCwxNiBAQAogX19QQUdFRkxBRyhTbHViRGVidWcsIHNsdWJfZGVidWcpCiAKIC8qCisgKiBQcml2YXRlIHBhZ2UgbWFya2luZ3MgdGhhdCBtYXkgYmUgdXNlZCBieSB0aGUgZmlsZXN5c3RlbSB0aGF0IG93bnMgdGhlIHBhZ2UKKyAqIGZvciBpdHMgb3duIHB1cnBvc2VzLgorICogLSBQR19wcml2YXRlIGFuZCBQR19wcml2YXRlXzIgY2F1c2UgcmVsZWFzZXBhZ2UoKSBhbmQgY28gdG8gYmUgaW52b2tlZAorICovCitQQUdFRkxBRyhQcml2YXRlLCBwcml2YXRlKSBfX1NFVFBBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUpCisJX19DTEVBUlBBR0VGTEFHKFByaXZhdGUsIHByaXZhdGUpCitQQUdFRkxBRyhQcml2YXRlMiwgcHJpdmF0ZV8yKSBURVNUU0NGTEFHKFByaXZhdGUyLCBwcml2YXRlXzIpCitQQUdFRkxBRyhPd25lclByaXYxLCBvd25lcl9wcml2XzEpIFRFU1RDTEVBUkZMQUcoT3duZXJQcml2MSwgb3duZXJfcHJpdl8xKQorCisvKgogICogT25seSB0ZXN0LWFuZC1zZXQgZXhpc3QgZm9yIFBHX3dyaXRlYmFjay4gIFRoZSB1bmNvbmRpdGlvbmFsIG9wZXJhdG9ycyBhcmUKICAqIHJpc2t5OiB0aGV5IGJ5cGFzcyBwYWdlIGFjY291bnRpbmcuCiAgKi8KQEAgLTIzNCwyMiArMjUxLDIyIEBACiAjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQogUEFHRUZMQUcoVW5ldmljdGFibGUsIHVuZXZpY3RhYmxlKSBfX0NMRUFSUEFHRUZMQUcoVW5ldmljdGFibGUsIHVuZXZpY3RhYmxlKQogCVRFU1RDTEVBUkZMQUcoVW5ldmljdGFibGUsIHVuZXZpY3RhYmxlKQotCi0jZGVmaW5lIE1MT0NLX1BBR0VTIDEKLVBBR0VGTEFHKE1sb2NrZWQsIG1sb2NrZWQpIF9fQ0xFQVJQQUdFRkxBRyhNbG9ja2VkLCBtbG9ja2VkKQotCVRFU1RTQ0ZMQUcoTWxvY2tlZCwgbWxvY2tlZCkKLQogI2Vsc2UKLQotI2RlZmluZSBNTE9DS19QQUdFUyAwCi1QQUdFRkxBR19GQUxTRShNbG9ja2VkKQotCVNFVFBBR0VGTEFHX05PT1AoTWxvY2tlZCkgVEVTVENMRUFSRkxBR19GQUxTRShNbG9ja2VkKQotCiBQQUdFRkxBR19GQUxTRShVbmV2aWN0YWJsZSkgVEVTVENMRUFSRkxBR19GQUxTRShVbmV2aWN0YWJsZSkKIAlTRVRQQUdFRkxBR19OT09QKFVuZXZpY3RhYmxlKSBDTEVBUlBBR0VGTEFHX05PT1AoVW5ldmljdGFibGUpCiAJX19DTEVBUlBBR0VGTEFHX05PT1AoVW5ldmljdGFibGUpCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQKKyNkZWZpbmUgTUxPQ0tfUEFHRVMgMQorUEFHRUZMQUcoTWxvY2tlZCwgbWxvY2tlZCkgX19DTEVBUlBBR0VGTEFHKE1sb2NrZWQsIG1sb2NrZWQpCisJVEVTVFNDRkxBRyhNbG9ja2VkLCBtbG9ja2VkKQorI2Vsc2UKKyNkZWZpbmUgTUxPQ0tfUEFHRVMgMAorUEFHRUZMQUdfRkFMU0UoTWxvY2tlZCkKKwlTRVRQQUdFRkxBR19OT09QKE1sb2NrZWQpIFRFU1RDTEVBUkZMQUdfRkFMU0UoTWxvY2tlZCkKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0lBNjRfVU5DQUNIRURfQUxMT0NBVE9SCiBQQUdFRkxBRyhVbmNhY2hlZCwgdW5jYWNoZWQpCiAjZWxzZQpAQCAtMzY3LDkgKzM4NCwxMyBAQAogCiAjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQogI2RlZmluZSBfX1BHX1VORVZJQ1RBQkxFCSgxIDw8IFBHX3VuZXZpY3RhYmxlKQotI2RlZmluZSBfX1BHX01MT0NLRUQJCSgxIDw8IFBHX21sb2NrZWQpCiAjZWxzZQogI2RlZmluZSBfX1BHX1VORVZJQ1RBQkxFCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVAorI2RlZmluZSBfX1BHX01MT0NLRUQJCSgxIDw8IFBHX21sb2NrZWQpCisjZWxzZQogI2RlZmluZSBfX1BHX01MT0NLRUQJCTAKICNlbmRpZgogCkBAIC0zNzgsOSArMzk5LDEwIEBACiAgKiB0aGVzZSBmbGFncyBzZXQuICBJdCB0aGV5IGFyZSwgdGhlcmUgaXMgYSBwcm9ibGVtLgogICovCiAjZGVmaW5lIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfRlJFRSBcCi0JKDEgPDwgUEdfbHJ1ICAgfCAxIDw8IFBHX3ByaXZhdGUgICB8IDEgPDwgUEdfbG9ja2VkIHwgXAotCSAxIDw8IFBHX2J1ZGR5IHwgMSA8PCBQR193cml0ZWJhY2sgfCAxIDw8IFBHX3Jlc2VydmVkIHwgXAotCSAxIDw8IFBHX3NsYWIgIHwgMSA8PCBQR19zd2FwY2FjaGUgfCAxIDw8IFBHX2FjdGl2ZSB8IFwKKwkoMSA8PCBQR19scnUJIHwgMSA8PCBQR19sb2NrZWQgICAgfCBcCisJIDEgPDwgUEdfcHJpdmF0ZSB8IDEgPDwgUEdfcHJpdmF0ZV8yIHwgXAorCSAxIDw8IFBHX2J1ZGR5CSB8IDEgPDwgUEdfd3JpdGViYWNrIHwgMSA8PCBQR19yZXNlcnZlZCB8IFwKKwkgMSA8PCBQR19zbGFiCSB8IDEgPDwgUEdfc3dhcGNhY2hlIHwgMSA8PCBQR19hY3RpdmUgfCBcCiAJIF9fUEdfVU5FVklDVEFCTEUgfCBfX1BHX01MT0NLRUQpCiAKIC8qCkBAIC0zOTEsNCArNDEzLDE2IEBACiAjZGVmaW5lIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUAkoKDEgPDwgTlJfUEFHRUZMQUdTKSAtIDEpCiAKICNlbmRpZiAvKiAhX19HRU5FUkFUSU5HX0JPVU5EU19IICovCisKKy8qKgorICogcGFnZV9oYXNfcHJpdmF0ZSAtIERldGVybWluZSBpZiBwYWdlIGhhcyBwcml2YXRlIHN0dWZmCisgKiBAcGFnZTogVGhlIHBhZ2UgdG8gYmUgY2hlY2tlZAorICoKKyAqIERldGVybWluZSBpZiBhIHBhZ2UgaGFzIHByaXZhdGUgc3R1ZmYsIGluZGljYXRpbmcgdGhhdCByZWxlYXNlIHJvdXRpbmVzCisgKiBzaG91bGQgYmUgaW52b2tlZCB1cG9uIGl0LgorICovCisjZGVmaW5lIHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkJCQlcCisJKChwYWdlKS0+ZmxhZ3MgJiAoKDEgPDwgUEdfcHJpdmF0ZSkgfAlcCisJCQkgICgxIDw8IFBHX3ByaXZhdGVfMikpKQorCiAjZW5kaWYJLyogUEFHRV9GTEFHU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKaW5kZXggNjAyY2MxZi4uNzMzOWM3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaApAQCAtOTEsMjQgKzkxLDIzIEBACiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUl9TV0FQCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgotZXh0ZXJuIHN0cnVjdCBtZW1fY2dyb3VwICoKLXN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOwotZXh0ZXJuIHN0cnVjdCBtZW1fY2dyb3VwICpsb29rdXBfc3dhcF9jZ3JvdXAoc3dwX2VudHJ5X3QgZW50KTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCk7CitleHRlcm4gdW5zaWduZWQgc2hvcnQgbG9va3VwX3N3YXBfY2dyb3VwKHN3cF9lbnRyeV90IGVudCk7CiBleHRlcm4gaW50IHN3YXBfY2dyb3VwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBtYXhfcGFnZXMpOwogZXh0ZXJuIHZvaWQgc3dhcF9jZ3JvdXBfc3dhcG9mZihpbnQgdHlwZSk7CiAjZWxzZQogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KIAogc3RhdGljIGlubGluZQotc3RydWN0IG1lbV9jZ3JvdXAgKnN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCit1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCkKIHsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZQotc3RydWN0IG1lbV9jZ3JvdXAgKmxvb2t1cF9zd2FwX2Nncm91cChzd3BfZW50cnlfdCBlbnQpCit1bnNpZ25lZCBzaG9ydCBsb29rdXBfc3dhcF9jZ3JvdXAoc3dwX2VudHJ5X3QgZW50KQogewotCXJldHVybiBOVUxMOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAppbmRleCAwMWNhMDg1Li4zNGRhNTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VtYXAuaApAQCAtMTgsOSArMTgsMTQgQEAKICAqIEJpdHMgaW4gbWFwcGluZy0+ZmxhZ3MuICBUaGUgbG93ZXIgX19HRlBfQklUU19TSElGVCBiaXRzIGFyZSB0aGUgcGFnZQogICogYWxsb2NhdGlvbiBtb2RlIGZsYWdzLgogICovCi0jZGVmaW5lCUFTX0VJTwkJKF9fR0ZQX0JJVFNfU0hJRlQgKyAwKQkvKiBJTyBlcnJvciBvbiBhc3luYyB3cml0ZSAqLwotI2RlZmluZSBBU19FTk9TUEMJKF9fR0ZQX0JJVFNfU0hJRlQgKyAxKQkvKiBFTk9TUEMgb24gYXN5bmMgd3JpdGUgKi8KLSNkZWZpbmUgQVNfTU1fQUxMX0xPQ0tTCShfX0dGUF9CSVRTX1NISUZUICsgMikJLyogdW5kZXIgbW1fdGFrZV9hbGxfbG9ja3MoKSAqLworZW51bSBtYXBwaW5nX2ZsYWdzIHsKKwlBU19FSU8JCT0gX19HRlBfQklUU19TSElGVCArIDAsCS8qIElPIGVycm9yIG9uIGFzeW5jIHdyaXRlICovCisJQVNfRU5PU1BDCT0gX19HRlBfQklUU19TSElGVCArIDEsCS8qIEVOT1NQQyBvbiBhc3luYyB3cml0ZSAqLworCUFTX01NX0FMTF9MT0NLUwk9IF9fR0ZQX0JJVFNfU0hJRlQgKyAyLAkvKiB1bmRlciBtbV90YWtlX2FsbF9sb2NrcygpICovCisjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQorCUFTX1VORVZJQ1RBQkxFCT0gX19HRlBfQklUU19TSElGVCArIDMsCS8qIGUuZy4sIHJhbWRpc2ssIFNITV9MT0NLICovCisjZW5kaWYKK307CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF9lcnJvcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgaW50IGVycm9yKQogewpAQCAtMzMsNyArMzgsNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1VORVZJQ1RBQkxFX0xSVQotI2RlZmluZSBBU19VTkVWSUNUQUJMRQkoX19HRlBfQklUU19TSElGVCArIDIpCS8qIGUuZy4sIHJhbWRpc2ssIFNITV9MT0NLICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXBwaW5nX3NldF91bmV2aWN0YWJsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKQEAgLTM4MCw2ICszODQsMTEgQEAKIGV4dGVybiB2b2lkIGVuZF9wYWdlX3dyaXRlYmFjayhzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIC8qCisgKiBBZGQgYW4gYXJiaXRyYXJ5IHdhaXRlciB0byBhIHBhZ2UncyB3YWl0IHF1ZXVlCisgKi8KK2V4dGVybiB2b2lkIGFkZF9wYWdlX3dhaXRfcXVldWUoc3RydWN0IHBhZ2UgKnBhZ2UsIHdhaXRfcXVldWVfdCAqd2FpdGVyKTsKKworLyoKICAqIEZhdWx0IGEgdXNlcnNwYWNlIHBhZ2UgaW50byBwYWdldGFibGVzLiAgUmV0dXJuIG5vbi16ZXJvIG9uIGEgZmF1bHQuCiAgKgogICogVGhpcyBhc3N1bWVzIHRoYXQgdHdvIHVzZXJzcGFjZSBwYWdlcyBhcmUgYWx3YXlzIHN1ZmZpY2llbnQuICBUaGF0J3MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZXZlYy5oIGIvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKaW5kZXggN2IyODg2Zi4uYmFiODJmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdldmVjLmgKQEAgLTI0LDcgKzI0LDYgQEAKIHZvaWQgX19wYWdldmVjX2ZyZWUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwogdm9pZCBfX19fcGFnZXZlY19scnVfYWRkKHN0cnVjdCBwYWdldmVjICpwdmVjLCBlbnVtIGxydV9saXN0IGxydSk7CiB2b2lkIHBhZ2V2ZWNfc3RyaXAoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpOwotdm9pZCBwYWdldmVjX3N3YXBfZnJlZShzdHJ1Y3QgcGFnZXZlYyAqcHZlYyk7CiB1bnNpZ25lZCBwYWdldmVjX2xvb2t1cChzdHJ1Y3QgcGFnZXZlYyAqcHZlYywgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCXBnb2ZmX3Qgc3RhcnQsIHVuc2lnbmVkIG5yX3BhZ2VzKTsKIHVuc2lnbmVkIHBhZ2V2ZWNfbG9va3VwX3RhZyhzdHJ1Y3QgcGFnZXZlYyAqcHZlYywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaCBiL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaAppbmRleCAwNDJjMTY2Li4wOTJlODJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCkBAIC0xMCw3MiArMTAsMjUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KIAotI2RlZmluZSBPU0NfUVVFUllfVFlQRQkJCTAKLSNkZWZpbmUgT1NDX1NVUFBPUlRfVFlQRSAJCTEKLSNkZWZpbmUgT1NDX0NPTlRST0xfVFlQRQkJMgotI2RlZmluZSBPU0NfU1VQUE9SVF9NQVNLUwkJMHgxZgotCi0vKgotICogX09TQyBEVzAgRGVmaW5pdGlvbiAKLSAqLwotI2RlZmluZSBPU0NfUVVFUllfRU5BQkxFCQkxCi0jZGVmaW5lIE9TQ19SRVFVRVNUX0VSUk9SCQkyCi0jZGVmaW5lIE9TQ19JTlZBTElEX1VVSURfRVJST1IJCTQKLSNkZWZpbmUgT1NDX0lOVkFMSURfUkVWSVNJT05fRVJST1IJOAotI2RlZmluZSBPU0NfQ0FQQUJJTElUSUVTX01BU0tfRVJST1IJMTYKLQotLyoKLSAqIF9PU0MgRFcxIERlZmluaXRpb24gKE9TIFN1cHBvcnQgRmllbGRzKQotICovCi0jZGVmaW5lIE9TQ19FWFRfUENJX0NPTkZJR19TVVBQT1JUCQkxCi0jZGVmaW5lIE9TQ19BQ1RJVkVfU1RBVEVfUFdSX1NVUFBPUlQgCQkyCi0jZGVmaW5lIE9TQ19DTE9DS19QV1JfQ0FQQUJJTElUWV9TVVBQT1JUCTQKLSNkZWZpbmUgT1NDX1BDSV9TRUdNRU5UX0dST1VQU19TVVBQT1JUCQk4Ci0jZGVmaW5lIE9TQ19NU0lfU1VQUE9SVAkJCQkxNgotCi0vKgotICogX09TQyBEVzEgRGVmaW5pdGlvbiAoT1MgQ29udHJvbCBGaWVsZHMpCi0gKi8KLSNkZWZpbmUgT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MCTEKLSNkZWZpbmUgT1NDX1NIUENfTkFUSVZFX0hQX0NPTlRST0wgCQkyCi0jZGVmaW5lIE9TQ19QQ0lfRVhQUkVTU19QTUVfQ09OVFJPTAkJNAotI2RlZmluZSBPU0NfUENJX0VYUFJFU1NfQUVSX0NPTlRST0wJCTgKLSNkZWZpbmUgT1NDX1BDSV9FWFBSRVNTX0NBUF9TVFJVQ1RVUkVfQ09OVFJPTAkxNgotCi0jZGVmaW5lIE9TQ19DT05UUk9MX01BU0tTIAkoT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MIHwgCVwKLQkJCQlPU0NfU0hQQ19OQVRJVkVfSFBfQ09OVFJPTCB8IAkJXAotCQkJCU9TQ19QQ0lfRVhQUkVTU19QTUVfQ09OVFJPTCB8CQlcCi0JCQkJT1NDX1BDSV9FWFBSRVNTX0FFUl9DT05UUk9MIHwJCVwKLQkJCQlPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MKQotCiAjaWZkZWYgQ09ORklHX0FDUEkKLWV4dGVybiBhY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZsYWdzKTsKLWludCBwY2lfYWNwaV9vc2Nfc3VwcG9ydChhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBmbGFncyk7CiBzdGF0aWMgaW5saW5lIGFjcGlfaGFuZGxlIGFjcGlfZmluZF9yb290X2JyaWRnZV9oYW5kbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JLyogRmluZCByb290IGhvc3QgYnJpZGdlICovCi0Jd2hpbGUgKHBkZXYtPmJ1cy0+c2VsZikKLQkJcGRldiA9IHBkZXYtPmJ1cy0+c2VsZjsKLQotCXJldHVybiBhY3BpX2dldF9wY2lfcm9vdGJyaWRnZV9oYW5kbGUocGNpX2RvbWFpbl9ucihwZGV2LT5idXMpLAotCQkJcGRldi0+YnVzLT5udW1iZXIpOworCXN0cnVjdCBwY2lfYnVzICpwYnVzID0gcGRldi0+YnVzOworCS8qIEZpbmQgYSBQQ0kgcm9vdCBidXMgKi8KKwl3aGlsZSAocGJ1cy0+cGFyZW50KQorCQlwYnVzID0gcGJ1cy0+cGFyZW50OworCXJldHVybiBhY3BpX2dldF9wY2lfcm9vdGJyaWRnZV9oYW5kbGUocGNpX2RvbWFpbl9ucihwYnVzKSwKKwkJCQkJICAgICAgcGJ1cy0+bnVtYmVyKTsKIH0KIAogc3RhdGljIGlubGluZSBhY3BpX2hhbmRsZSBhY3BpX3BjaV9nZXRfYnJpZGdlX2hhbmRsZShzdHJ1Y3QgcGNpX2J1cyAqcGJ1cykKIHsKLQlpbnQgc2VnID0gcGNpX2RvbWFpbl9ucihwYnVzKSwgYnVzbnIgPSBwYnVzLT5udW1iZXI7Ci0Jc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IHBidXMtPnNlbGY7Ci0JaWYgKGJyaWRnZSkKLQkJcmV0dXJuIERFVklDRV9BQ1BJX0hBTkRMRSgmKGJyaWRnZS0+ZGV2KSk7Ci0JcmV0dXJuIGFjcGlfZ2V0X3BjaV9yb290YnJpZGdlX2hhbmRsZShzZWcsIGJ1c25yKTsKKwlpZiAocGJ1cy0+cGFyZW50KQorCQlyZXR1cm4gREVWSUNFX0FDUElfSEFORExFKCYocGJ1cy0+c2VsZi0+ZGV2KSk7CisJcmV0dXJuIGFjcGlfZ2V0X3BjaV9yb290YnJpZGdlX2hhbmRsZShwY2lfZG9tYWluX25yKHBidXMpLAorCQkJCQkgICAgICBwYnVzLT5udW1iZXIpOwogfQogI2Vsc2UKLSNpZiAhZGVmaW5lZChBRV9FUlJPUikKLXR5cGVkZWYgdTMyIAkJYWNwaV9zdGF0dXM7Ci0jZGVmaW5lIEFFX0VSUk9SICAgICAgCShhY3BpX3N0YXR1cykgKDB4MDAwMSkKLSNlbmRpZiAgICAKLXN0YXRpYyBpbmxpbmUgYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldChhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBmbGFncykKLXtyZXR1cm4gQUVfRVJST1I7fQogc3RhdGljIGlubGluZSBhY3BpX2hhbmRsZSBhY3BpX2ZpbmRfcm9vdF9icmlkZ2VfaGFuZGxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogeyByZXR1cm4gTlVMTDsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCBkZjM2NDQxLi5hN2ZlNGJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KIAogLyogSW5jbHVkZSB0aGUgSUQgbGlzdCAqLwogI2luY2x1ZGUgPGxpbnV4L3BjaV9pZHMuaD4KQEAgLTkzLDYgKzk0LDEyIEBACiAJLyogIzY6IGV4cGFuc2lvbiBST00gcmVzb3VyY2UgKi8KIAlQQ0lfUk9NX1JFU09VUkNFLAogCisJLyogZGV2aWNlIHNwZWNpZmljIHJlc291cmNlcyAqLworI2lmZGVmIENPTkZJR19QQ0lfSU9WCisJUENJX0lPVl9SRVNPVVJDRVMsCisJUENJX0lPVl9SRVNPVVJDRV9FTkQgPSBQQ0lfSU9WX1JFU09VUkNFUyArIFBDSV9TUklPVl9OVU1fQkFSUyAtIDEsCisjZW5kaWYKKwogCS8qIHJlc291cmNlcyBhc3NpZ25lZCB0byBidXNlcyBiZWhpbmQgdGhlIGJyaWRnZSAqLwogI2RlZmluZSBQQ0lfQlJJREdFX1JFU09VUkNFX05VTSA0CiAKQEAgLTE4MCw2ICsxODcsNyBAQAogCiBzdHJ1Y3QgcGNpZV9saW5rX3N0YXRlOwogc3RydWN0IHBjaV92cGQ7CitzdHJ1Y3QgcGNpX3NyaW92OwogCiAvKgogICogVGhlIHBjaV9kZXYgc3RydWN0dXJlIGlzIHVzZWQgdG8gZGVzY3JpYmUgUENJIGRldmljZXMuCkBAIC0yNTcsNiArMjY1LDggQEAKIAl1bnNpZ25lZCBpbnQJaXNfbWFuYWdlZDoxOwogCXVuc2lnbmVkIGludAlpc19wY2llOjE7CiAJdW5zaWduZWQgaW50CXN0YXRlX3NhdmVkOjE7CisJdW5zaWduZWQgaW50CWlzX3BoeXNmbjoxOworCXVuc2lnbmVkIGludAlpc192aXJ0Zm46MTsKIAlwY2lfZGV2X2ZsYWdzX3QgZGV2X2ZsYWdzOwogCWF0b21pY190CWVuYWJsZV9jbnQ7CS8qIHBjaV9lbmFibGVfZGV2aWNlIGhhcyBiZWVuIGNhbGxlZCAqLwogCkBAIC0yNzAsNiArMjgwLDEyIEBACiAJc3RydWN0IGxpc3RfaGVhZCBtc2lfbGlzdDsKICNlbmRpZgogCXN0cnVjdCBwY2lfdnBkICp2cGQ7CisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwl1bmlvbiB7CisJCXN0cnVjdCBwY2lfc3Jpb3YgKnNyaW92OwkvKiBTUi1JT1YgY2FwYWJpbGl0eSByZWxhdGVkICovCisJCXN0cnVjdCBwY2lfZGV2ICpwaHlzZm47CS8qIHRoZSBQRiB0aGlzIFZGIGlzIGFzc29jaWF0ZWQgd2l0aCAqLworCX07CisjZW5kaWYKIH07CiAKIGV4dGVybiBzdHJ1Y3QgcGNpX2RldiAqYWxsb2NfcGNpX2Rldih2b2lkKTsKQEAgLTM0MSw2ICszNTcsMTUgQEAKICNkZWZpbmUgcGNpX2J1c19iKG4pCWxpc3RfZW50cnkobiwgc3RydWN0IHBjaV9idXMsIG5vZGUpCiAjZGVmaW5lIHRvX3BjaV9idXMobikJY29udGFpbmVyX29mKG4sIHN0cnVjdCBwY2lfYnVzLCBkZXYpCiAKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBjaSBidXMgaXMgcm9vdCAoYmVoaW5kIGhvc3QtcGNpIGJyaWRnZSksCisgKiBmYWxzZSBvdGhlcndpc2UKKyAqLworc3RhdGljIGlubGluZSBib29sIHBjaV9pc19yb290X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqcGJ1cykKK3sKKwlyZXR1cm4gIShwYnVzLT5wYXJlbnQpOworfQorCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIHN0YXRpYyBpbmxpbmUgYm9vbCBwY2lfZGV2X21zaV9lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewpAQCAtNTI4LDcgKzU1Myw3IEBACiAvKiBHZW5lcmljIFBDSSBmdW5jdGlvbnMgdXNlZCBpbnRlcm5hbGx5ICovCiAKIGV4dGVybiBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2ZpbmRfYnVzKGludCBkb21haW4sIGludCBidXNucik7Ci12b2lkIHBjaV9idXNfYWRkX2RldmljZXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7Cit2b2lkIHBjaV9idXNfYWRkX2RldmljZXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmJ1cyk7CiBzdHJ1Y3QgcGNpX2J1cyAqcGNpX3NjYW5fYnVzX3BhcmVudGVkKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IGJ1cywKIAkJCQkgICAgICBzdHJ1Y3QgcGNpX29wcyAqb3BzLCB2b2lkICpzeXNkYXRhKTsKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBjaV9idXMgKiBfX2RldmluaXQgcGNpX3NjYW5fYnVzKGludCBidXMsIHN0cnVjdCBwY2lfb3BzICpvcHMsCkBAIC03MDIsNiArNzI3LDkgQEAKIAogLyogRnVuY3Rpb25zIGZvciBQQ0kgSG90cGx1ZyBkcml2ZXJzIHRvIHVzZSAqLwogaW50IHBjaV9idXNfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IGNhcCk7CisjaWZkZWYgQ09ORklHX0hPVFBMVUcKK3Vuc2lnbmVkIGludCBwY2lfcmVzY2FuX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKKyNlbmRpZgogCiAvKiBWaXRhbCBwcm9kdWN0IGRhdGEgcm91dGluZXMgKi8KIHNzaXplX3QgcGNpX3JlYWRfdnBkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCwgdm9pZCAqYnVmKTsKQEAgLTcwOSw3ICs3MzcsNyBAQAogaW50IHBjaV92cGRfdHJ1bmNhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgc2l6ZV90IHNpemUpOwogCiAvKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBsb3ctbGV2ZWwgY29kZSAoZHJpdmVycy9wY2kvc2V0dXAtW2J1cyxyZXNdLmMpICovCi12b2lkIHBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKK3ZvaWQgcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpidXMpOwogdm9pZCBwY2lfYnVzX3NpemVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIGludCBwY2lfY2xhaW1fcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKiwgaW50KTsKIHZvaWQgcGNpX2Fzc2lnbl91bmFzc2lnbmVkX3Jlc291cmNlcyh2b2lkKTsKQEAgLTc5MCw3ICs4MTgsNyBAQAogCiAKICNpZm5kZWYgQ09ORklHX1BDSV9NU0kKLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9lbmFibGVfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW5saW5lIGludCBwY2lfZW5hYmxlX21zaV9ibG9jayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgbnZlYykKIHsKIAlyZXR1cm4gLTE7CiB9CkBAIC04MDAsNiArODI4LDEwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2Rpc2FibGVfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7IH0KIAorc3RhdGljIGlubGluZSBpbnQgcGNpX21zaXhfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiAwOworfQogc3RhdGljIGlubGluZSBpbnQgcGNpX2VuYWJsZV9tc2l4KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkJICBzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllcywgaW50IG52ZWMpCiB7CkBAIC04MjEsOSArODUzLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAjZWxzZQotZXh0ZXJuIGludCBwY2lfZW5hYmxlX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgcGNpX2VuYWJsZV9tc2lfYmxvY2soc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgaW50IG52ZWMpOwogZXh0ZXJuIHZvaWQgcGNpX21zaV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiB2b2lkIHBjaV9kaXNhYmxlX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgcGNpX21zaXhfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiBpbnQgcGNpX2VuYWJsZV9tc2l4KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJc3RydWN0IG1zaXhfZW50cnkgKmVudHJpZXMsIGludCBudmVjKTsKIGV4dGVybiB2b2lkIHBjaV9tc2l4X3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpAQCAtODQyLDYgKzg3NSw4IEBACiBleHRlcm4gaW50IHBjaWVfYXNwbV9lbmFibGVkKHZvaWQpOwogI2VuZGlmCiAKKyNkZWZpbmUgcGNpX2VuYWJsZV9tc2kocGRldikJcGNpX2VuYWJsZV9tc2lfYmxvY2socGRldiwgMSkKKwogI2lmZGVmIENPTkZJR19IVF9JUlEKIC8qIFRoZSBmdW5jdGlvbnMgYSBkcml2ZXIgc2hvdWxkIGNhbGwgKi8KIGludCAgaHRfY3JlYXRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaWR4KTsKQEAgLTExOTUsNSArMTIzMCwyMyBAQAogCiB2b2lkIF9faW9tZW0gKnBjaV9pb3JlbWFwX2JhcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhcik7CiAKKyNpZmRlZiBDT05GSUdfUENJX0lPVgorZXh0ZXJuIGludCBwY2lfZW5hYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBucl92aXJ0Zm4pOworZXh0ZXJuIHZvaWQgcGNpX2Rpc2FibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gaXJxcmV0dXJuX3QgcGNpX3NyaW92X21pZ3JhdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwY2lfZW5hYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBucl92aXJ0Zm4pCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2Rpc2FibGVfc3Jpb3Yoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKK30KK3N0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QgcGNpX3NyaW92X21pZ3JhdGlvbihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBJUlFfTk9ORTsKK30KKyNlbmRpZgorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIExJTlVYX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IGU1ODE2ZGQuLjE3MGY4YjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC01MjYsNiArNTI2LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfT1BVU183NDQzCTB4NzQ0MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDQzCTB4NzQ0MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9PUFVTXzc0NDUJMHg3NDQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfUENJCTB4NzQ2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTExX0xQQwkweDc0NjgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9JREUJMHg3NDY5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfU01CVVMyCTB4NzQ2YQpAQCAtMjM5Niw2ICsyMzk3LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzEyCTB4MjQ4YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMAkweDI0YzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzEJMHgyNGMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8yCTB4MjRjMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMwkweDI0YzMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzUJMHgyNGM1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl82CTB4MjRjNgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oIGIvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oCmluZGV4IDAyNzgxNWIuLmU0ZDA4YzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKQEAgLTIzNSw3ICsyMzUsNyBAQAogI2RlZmluZSAgUENJX1BNX0NBUF9QTUVfU0hJRlQJMTEJLyogU3RhcnQgb2YgdGhlIFBNRSBNYXNrIGluIFBNQyAqLwogI2RlZmluZSBQQ0lfUE1fQ1RSTAkJNAkvKiBQTSBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUgIFBDSV9QTV9DVFJMX1NUQVRFX01BU0sJMHgwMDAzCS8qIEN1cnJlbnQgcG93ZXIgc3RhdGUgKEQwIHRvIEQzKSAqLwotI2RlZmluZSAgUENJX1BNX0NUUkxfTk9fU09GVF9SRVNFVAkweDAwMDQJLyogTm8gcmVzZXQgZm9yIEQzaG90LT5EMCAqLworI2RlZmluZSAgUENJX1BNX0NUUkxfTk9fU09GVF9SRVNFVAkweDAwMDgJLyogTm8gcmVzZXQgZm9yIEQzaG90LT5EMCAqLwogI2RlZmluZSAgUENJX1BNX0NUUkxfUE1FX0VOQUJMRQkweDAxMDAJLyogUE1FIHBpbiBlbmFibGUgKi8KICNkZWZpbmUgIFBDSV9QTV9DVFJMX0RBVEFfU0VMX01BU0sJMHgxZTAwCS8qIERhdGEgc2VsZWN0ICg/PykgKi8KICNkZWZpbmUgIFBDSV9QTV9DVFJMX0RBVEFfU0NBTEVfTUFTSwkweDYwMDAJLyogRGF0YSBzY2FsZSAoPz8pICovCkBAIC0zNzUsNiArMzc1LDcgQEAKICNkZWZpbmUgIFBDSV9FWFBfVFlQRV9VUFNUUkVBTQkweDUJLyogVXBzdHJlYW0gUG9ydCAqLwogI2RlZmluZSAgUENJX0VYUF9UWVBFX0RPV05TVFJFQU0gMHg2CS8qIERvd25zdHJlYW0gUG9ydCAqLwogI2RlZmluZSAgUENJX0VYUF9UWVBFX1BDSV9CUklER0UgMHg3CS8qIFBDSS9QQ0ktWCBCcmlkZ2UgKi8KKyNkZWZpbmUgIFBDSV9FWFBfVFlQRV9SQ19FTkQJMHg5CS8qIFJvb3QgQ29tcGxleCBJbnRlZ3JhdGVkIEVuZHBvaW50ICovCiAjZGVmaW5lIFBDSV9FWFBfRkxBR1NfU0xPVAkweDAxMDAJLyogU2xvdCBpbXBsZW1lbnRlZCAqLwogI2RlZmluZSBQQ0lfRVhQX0ZMQUdTX0lSUQkweDNlMDAJLyogSW50ZXJydXB0IG1lc3NhZ2UgbnVtYmVyICovCiAjZGVmaW5lIFBDSV9FWFBfREVWQ0FQCQk0CS8qIERldmljZSBjYXBhYmlsaXRpZXMgKi8KQEAgLTQ4Nyw2ICs0ODgsOCBAQAogI2RlZmluZSAgUENJX0VYUF9ERVZDQVAyX0FSSQkweDIwCS8qIEFsdGVybmF0aXZlIFJvdXRpbmctSUQgKi8KICNkZWZpbmUgUENJX0VYUF9ERVZDVEwyCQk0MAkvKiBEZXZpY2UgQ29udHJvbCAyICovCiAjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTDJfQVJJCTB4MjAJLyogQWx0ZXJuYXRpdmUgUm91dGluZy1JRCAqLworI2RlZmluZSBQQ0lfRVhQX0xOS0NUTDIJCTQ4CS8qIExpbmsgQ29udHJvbCAyICovCisjZGVmaW5lIFBDSV9FWFBfU0xUQ1RMMgkJNTYJLyogU2xvdCBDb250cm9sIDIgKi8KIAogLyogRXh0ZW5kZWQgQ2FwYWJpbGl0aWVzIChQQ0ktWCAyLjAgYW5kIEV4cHJlc3MpICovCiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEKGhlYWRlcikJCShoZWFkZXIgJiAweDAwMDBmZmZmKQpAQCAtNDk4LDYgKzUwMSw3IEBACiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX0RTTgkzCiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX1BXUgk0CiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX0FSSQkxNAorI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9TUklPVgkxNgogCiAvKiBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcgKi8KICNkZWZpbmUgUENJX0VSUl9VTkNPUl9TVEFUVVMJNAkvKiBVbmNvcnJlY3RhYmxlIEVycm9yIFN0YXR1cyAqLwpAQCAtNjE1LDQgKzYxOSwzNSBAQAogI2RlZmluZSAgUENJX0FSSV9DVFJMX0FDUwkweDAwMDIJLyogQUNTIEZ1bmN0aW9uIEdyb3VwcyBFbmFibGUgKi8KICNkZWZpbmUgIFBDSV9BUklfQ1RSTF9GRyh4KQkoKCh4KSA+PiA0KSAmIDcpIC8qIEZ1bmN0aW9uIEdyb3VwICovCiAKKy8qIFNpbmdsZSBSb290IEkvTyBWaXJ0dWFsaXphdGlvbiAqLworI2RlZmluZSBQQ0lfU1JJT1ZfQ0FQCQkweDA0CS8qIFNSLUlPViBDYXBhYmlsaXRpZXMgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9DQVBfVkZNCTB4MDEJLyogVkYgTWlncmF0aW9uIENhcGFibGUgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9DQVBfSU5UUih4KQkoKHgpID4+IDIxKSAvKiBJbnRlcnJ1cHQgTWVzc2FnZSBOdW1iZXIgKi8KKyNkZWZpbmUgUENJX1NSSU9WX0NUUkwJCTB4MDgJLyogU1ItSU9WIENvbnRyb2wgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9DVFJMX1ZGRQkweDAxCS8qIFZGIEVuYWJsZSAqLworI2RlZmluZSAgUENJX1NSSU9WX0NUUkxfVkZNCTB4MDIJLyogVkYgTWlncmF0aW9uIEVuYWJsZSAqLworI2RlZmluZSAgUENJX1NSSU9WX0NUUkxfSU5UUgkweDA0CS8qIFZGIE1pZ3JhdGlvbiBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfQ1RSTF9NU0UJMHgwOAkvKiBWRiBNZW1vcnkgU3BhY2UgRW5hYmxlICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfQ1RSTF9BUkkJMHgxMAkvKiBBUkkgQ2FwYWJsZSBIaWVyYXJjaHkgKi8KKyNkZWZpbmUgUENJX1NSSU9WX1NUQVRVUwkweDBhCS8qIFNSLUlPViBTdGF0dXMgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9TVEFUVVNfVkZNCTB4MDEJLyogVkYgTWlncmF0aW9uIFN0YXR1cyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfSU5JVElBTF9WRgkweDBjCS8qIEluaXRpYWwgVkZzICovCisjZGVmaW5lIFBDSV9TUklPVl9UT1RBTF9WRgkweDBlCS8qIFRvdGFsIFZGcyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfTlVNX1ZGCTB4MTAJLyogTnVtYmVyIG9mIFZGcyAqLworI2RlZmluZSBQQ0lfU1JJT1ZfRlVOQ19MSU5LCTB4MTIJLyogRnVuY3Rpb24gRGVwZW5kZW5jeSBMaW5rICovCisjZGVmaW5lIFBDSV9TUklPVl9WRl9PRkZTRVQJMHgxNAkvKiBGaXJzdCBWRiBPZmZzZXQgKi8KKyNkZWZpbmUgUENJX1NSSU9WX1ZGX1NUUklERQkweDE2CS8qIEZvbGxvd2luZyBWRiBTdHJpZGUgKi8KKyNkZWZpbmUgUENJX1NSSU9WX1ZGX0RJRAkweDFhCS8qIFZGIERldmljZSBJRCAqLworI2RlZmluZSBQQ0lfU1JJT1ZfU1VQX1BHU0laRQkweDFjCS8qIFN1cHBvcnRlZCBQYWdlIFNpemVzICovCisjZGVmaW5lIFBDSV9TUklPVl9TWVNfUEdTSVpFCTB4MjAJLyogU3lzdGVtIFBhZ2UgU2l6ZSAqLworI2RlZmluZSBQQ0lfU1JJT1ZfQkFSCQkweDI0CS8qIFZGIEJBUjAgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9OVU1fQkFSUwk2CS8qIE51bWJlciBvZiBWRiBCQVJzICovCisjZGVmaW5lIFBDSV9TUklPVl9WRk0JCTB4M2MJLyogVkYgTWlncmF0aW9uIFN0YXRlIEFycmF5IE9mZnNldCovCisjZGVmaW5lICBQQ0lfU1JJT1ZfVkZNX0JJUih4KQkoKHgpICYgNykJLyogU3RhdGUgQklSICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfVkZNX09GRlNFVCh4KSAoKHgpICYgfjcpCS8qIFN0YXRlIE9mZnNldCAqLworI2RlZmluZSAgUENJX1NSSU9WX1ZGTV9VQQkweDAJLyogSW5hY3RpdmUuVW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgIFBDSV9TUklPVl9WRk1fTUkJMHgxCS8qIERvcm1hbnQuTWlncmF0ZUluICovCisjZGVmaW5lICBQQ0lfU1JJT1ZfVkZNX01PCTB4MgkvKiBBY3RpdmUuTWlncmF0ZU91dCAqLworI2RlZmluZSAgUENJX1NSSU9WX1ZGTV9BVgkweDMJLyogQWN0aXZlLkF2YWlsYWJsZSAqLworCiAjZW5kaWYgLyogTElOVVhfUENJX1JFR1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2llcG9ydF9pZi5oIGIvaW5jbHVkZS9saW51eC9wY2llcG9ydF9pZi5oCmluZGV4IDZjZDkxZTMuLmI0Yzc5NTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpZXBvcnRfaWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaWVwb3J0X2lmLmgKQEAgLTE2LDI5ICsxNiwzMCBAQAogI2RlZmluZSBQQ0lFX0FOWV9QT1JUCQkJNwogCiAvKiBTZXJ2aWNlIFR5cGUgKi8KLSNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfUE1FCQkxCS8qIFBvd2VyIE1hbmFnZW1lbnQgRXZlbnQgKi8KLSNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfQUVSCQkyCS8qIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyAqLwotI2RlZmluZSBQQ0lFX1BPUlRfU0VSVklDRV9IUAkJNAkvKiBOYXRpdmUgSG90cGx1ZyAqLwotI2RlZmluZSBQQ0lFX1BPUlRfU0VSVklDRV9WQwkJOAkvKiBWaXJ0dWFsIENoYW5uZWwgKi8KKyNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfUE1FX1NISUZUCTAJLyogUG93ZXIgTWFuYWdlbWVudCBFdmVudCAqLworI2RlZmluZSBQQ0lFX1BPUlRfU0VSVklDRV9QTUUJCSgxIDw8IFBDSUVfUE9SVF9TRVJWSUNFX1BNRV9TSElGVCkKKyNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfQUVSX1NISUZUCTEJLyogQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nICovCisjZGVmaW5lIFBDSUVfUE9SVF9TRVJWSUNFX0FFUgkJKDEgPDwgUENJRV9QT1JUX1NFUlZJQ0VfQUVSX1NISUZUKQorI2RlZmluZSBQQ0lFX1BPUlRfU0VSVklDRV9IUF9TSElGVAkyCS8qIE5hdGl2ZSBIb3RwbHVnICovCisjZGVmaW5lIFBDSUVfUE9SVF9TRVJWSUNFX0hQCQkoMSA8PCBQQ0lFX1BPUlRfU0VSVklDRV9IUF9TSElGVCkKKyNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfVkNfU0hJRlQJMwkvKiBWaXJ0dWFsIENoYW5uZWwgKi8KKyNkZWZpbmUgUENJRV9QT1JUX1NFUlZJQ0VfVkMJCSgxIDw8IFBDSUVfUE9SVF9TRVJWSUNFX1ZDX1NISUZUKQogCiAvKiBSb290L1Vwc3RyZWFtL0Rvd25zdHJlYW0gUG9ydCdzIEludGVycnVwdCBNb2RlICovCisjZGVmaW5lIFBDSUVfUE9SVF9OT19JUlEJCSgtMSkKICNkZWZpbmUgUENJRV9QT1JUX0lOVHhfTU9ERQkJMAogI2RlZmluZSBQQ0lFX1BPUlRfTVNJX01PREUJCTEKICNkZWZpbmUgUENJRV9QT1JUX01TSVhfTU9ERQkJMgogCi1zdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfaWQgewotCV9fdTMyIHZlbmRvciwgZGV2aWNlOwkJLyogVmVuZG9yIGFuZCBkZXZpY2UgSUQgb3IgUENJX0FOWV9JRCovCi0JX191MzIgc3VidmVuZG9yLCBzdWJkZXZpY2U7CS8qIFN1YnN5c3RlbSBJRCdzIG9yIFBDSV9BTllfSUQgKi8KLQlfX3UzMiBjbGFzcywgY2xhc3NfbWFzazsJLyogKGNsYXNzLHN1YmNsYXNzLHByb2ctaWYpIHRyaXBsZXQgKi8KLQlfX3UzMiBwb3J0X3R5cGUsIHNlcnZpY2VfdHlwZTsJLyogUG9ydCBFbnRpdHkgKi8KLQlrZXJuZWxfdWxvbmdfdCBkcml2ZXJfZGF0YTsKK3N0cnVjdCBwY2llX3BvcnRfZGF0YSB7CisJaW50IHBvcnRfdHlwZTsJCS8qIFR5cGUgb2YgdGhlIHBvcnQgKi8KKwlpbnQgcG9ydF9pcnFfbW9kZTsJLyogWzA6SU5UeCB8IDE6TVNJIHwgMjpNU0ktWF0gKi8KIH07CiAKIHN0cnVjdCBwY2llX2RldmljZSB7CiAJaW50IAkJaXJxOwkgICAgLyogU2VydmljZSBJUlEvTVNJL01TSS1YIFZlY3RvciAqLwotCWludCAJCWludGVycnVwdF9tb2RlOwkvKiBbMDpJTlR4IHwgMTpNU0kgfCAyOk1TSS1YXSAqLwkKLQlzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfaWQgaWQ7CS8qIFNlcnZpY2UgSUQgKi8KLQlzdHJ1Y3QgcGNpX2RldgkqcG9ydDsJICAgIC8qIFJvb3QvVXBzdHJlYW0vRG93bnN0cmVhbSBQb3J0ICovCisJc3RydWN0IHBjaV9kZXYgKnBvcnQ7CSAgICAvKiBSb290L1Vwc3RyZWFtL0Rvd25zdHJlYW0gUG9ydCAqLworCXUzMgkJc2VydmljZTsgICAgLyogUG9ydCBzZXJ2aWNlIHRoaXMgZGV2aWNlIHJlcHJlc2VudHMgKi8KIAl2b2lkCQkqcHJpdl9kYXRhOyAvKiBTZXJ2aWNlIFByaXZhdGUgRGF0YSAqLwogCXN0cnVjdCBkZXZpY2UJZGV2aWNlOyAgICAgLyogR2VuZXJpYyBEZXZpY2UgSW50ZXJmYWNlICovCiB9OwpAQCAtNTYsMTAgKzU3LDkgQEAKIAogc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciB7CiAJY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgKCpwcm9iZSkgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2LCAKLQkJY29uc3Qgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2lkICppZCk7CisJaW50ICgqcHJvYmUpIChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldik7CiAJdm9pZCAoKnJlbW92ZSkgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KTsKLQlpbnQgKCpzdXNwZW5kKSAoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisJaW50ICgqc3VzcGVuZCkgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KTsKIAlpbnQgKCpyZXN1bWUpIChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldik7CiAKIAkvKiBTZXJ2aWNlIEVycm9yIFJlY292ZXJ5IEhhbmRsZXIgKi8KQEAgLTY4LDcgKzY4LDkgQEAKIAkvKiBMaW5rIFJlc2V0IENhcGFiaWxpdHkgLSBBRVIgc2VydmljZSBkcml2ZXIgc3BlY2lmaWMgKi8KIAlwY2lfZXJzX3Jlc3VsdF90ICgqcmVzZXRfbGluaykgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCi0JY29uc3Qgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2lkICppZF90YWJsZTsKKwlpbnQgcG9ydF90eXBlOyAgLyogVHlwZSBvZiB0aGUgcG9ydCB0aGlzIGRyaXZlciBjYW4gaGFuZGxlICovCisJdTMyIHNlcnZpY2U7ICAgIC8qIFBvcnQgc2VydmljZSB0aGlzIGRldmljZSByZXByZXNlbnRzICovCisKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7CiB9OwogI2RlZmluZSB0b19zZXJ2aWNlX2RyaXZlcihkKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oIGIvaW5jbHVkZS9saW51eC9wb2lzb24uaAppbmRleCA5ZjMxNjgzLi42NzI5ZjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9pc29uLmgKQEAgLTE3LDYgKzE3LDkgQEAKICAqLwogI2RlZmluZSBUSU1FUl9FTlRSWV9TVEFUSUMJKCh2b2lkICopIDB4NzQ3Mzc0NjEpCiAKKy8qKioqKioqKioqIG1tL2RlYnVnLXBhZ2VhbGxvYy5jICoqKioqKioqKiovCisjZGVmaW5lIFBBR0VfUE9JU09OIDB4YWEKKwogLyoqKioqKioqKiogbW0vc2xhYi5jICoqKioqKioqKiovCiAvKgogICogTWFnaWMgbnVtcyBmb3Igb2JqIHJlZCB6b25pbmcuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oIGIvaW5jbHVkZS9saW51eC9wb3dlcl9zdXBwbHkuaAppbmRleCA4ZmYyNWUwLi41OTRjNDk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmgKQEAgLTczLDYgKzczLDggQEAKIAlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX0FWRywKIAlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKIAlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX0FWRywKKwlQT1dFUl9TVVBQTFlfUFJPUF9QT1dFUl9OT1csCisJUE9XRVJfU1VQUExZX1BST1BfUE9XRVJfQVZHLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMX0RFU0lHTiwKIAlQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfRU1QVFlfREVTSUdOLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKaW5kZXggOThiOTNjYS4uNjdjMTU2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCkBAIC05NCw2ICs5NCw3IEBACiBleHRlcm4gdm9pZCBfX3B0cmFjZV9saW5rKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsCiAJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3X3BhcmVudCk7CiBleHRlcm4gdm9pZCBfX3B0cmFjZV91bmxpbmsoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCk7CitleHRlcm4gdm9pZCBleGl0X3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRyYWNlcik7CiBleHRlcm4gdm9pZCBwdHJhY2VfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MpOwogI2RlZmluZSBQVFJBQ0VfTU9ERV9SRUFEICAgMQogI2RlZmluZSBQVFJBQ0VfTU9ERV9BVFRBQ0ggMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wd20uaCBiL2luY2x1ZGUvbGludXgvcHdtLmgKaW5kZXggMzk0NWY4MC4uN2M3NzU3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wd20uaAorKysgYi9pbmNsdWRlL2xpbnV4L3B3bS5oCkBAIC0yOCw0ICsyOCw0IEBACiAgKi8KIHZvaWQgcHdtX2Rpc2FibGUoc3RydWN0IHB3bV9kZXZpY2UgKnB3bSk7CiAKLSNlbmRpZiAvKiBfX0FTTV9BUkNIX1BXTV9IICovCisjZW5kaWYgLyogX19MSU5VWF9QV01fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL2xpbmVhci5oIGIvaW5jbHVkZS9saW51eC9yYWlkL2xpbmVhci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzhiOWM1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9saW5lYXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSNpZm5kZWYgX0xJTkVBUl9ICi0jZGVmaW5lIF9MSU5FQVJfSAotCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgotCi1zdHJ1Y3QgZGV2X2luZm8gewotCW1ka19yZGV2X3QJKnJkZXY7Ci0Jc2VjdG9yX3QJbnVtX3NlY3RvcnM7Ci0Jc2VjdG9yX3QJc3RhcnRfc2VjdG9yOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgZGV2X2luZm8gZGV2X2luZm9fdDsKLQotc3RydWN0IGxpbmVhcl9wcml2YXRlX2RhdGEKLXsKLQlzdHJ1Y3QgbGluZWFyX3ByaXZhdGVfZGF0YSAqcHJldjsJLyogZWFybGllciB2ZXJzaW9uICovCi0JZGV2X2luZm9fdAkJKipoYXNoX3RhYmxlOwotCXNlY3Rvcl90CQlzcGFjaW5nOwotCXNlY3Rvcl90CQlhcnJheV9zZWN0b3JzOwotCWludAkJCXNlY3Rvcl9zaGlmdDsJLyogc2hpZnQgYmVmb3JlIGRpdmlkaW5nCi0JCQkJCQkgKiBieSBzcGFjaW5nCi0JCQkJCQkgKi8KLQlkZXZfaW5mb190CQlkaXNrc1swXTsKLX07Ci0KLQotdHlwZWRlZiBzdHJ1Y3QgbGluZWFyX3ByaXZhdGVfZGF0YSBsaW5lYXJfY29uZl90OwotCi0jZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgobGluZWFyX2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmJlYTE0Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAgIG1kLmggOiBNdWx0aXBsZSBEZXZpY2VzIGRyaXZlciBmb3IgTGludXgKLSAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTYtOTggSW5nbyBNb2xuYXIsIEdhZGkgT3htYW4KLSAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTQtOTYgTWFyYyBaWU5HSUVSCi0JICA8enluZ2llckB1ZnItaW5mby1wNy5pYnAuZnI+IG9yCi0JICA8bWF6QGdsb3Vwcy5mZG4uZnI+Ci0JICAKLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICAgYW55IGxhdGVyIHZlcnNpb24uCi0gICAKLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAoZm9yIGV4YW1wbGUgL3Vzci9zcmMvbGludXgvQ09QWUlORyk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgCi0qLwotCi0jaWZuZGVmIF9NRF9ICi0jZGVmaW5lIF9NRF9ICi0KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotCi0vKgotICogJ21kX3AuaCcgaG9sZHMgdGhlICdwaHlzaWNhbCcgbGF5b3V0IG9mIFJBSUQgZGV2aWNlcwotICogJ21kX3UuaCcgaG9sZHMgdGhlIHVzZXIgPD0+IGtlcm5lbCBBUEkKLSAqCi0gKiAnbWRfay5oJyBob2xkcyBrZXJuZWwgaW50ZXJuYWwgZGVmaW5pdGlvbnMKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZF9wLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9tZF91Lmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC9tZF9rLmg+Ci0KLSNpZmRlZiBDT05GSUdfTUQKLQotLyoKLSAqIERpZmZlcmVudCBtYWpvciB2ZXJzaW9ucyBhcmUgbm90IGNvbXBhdGlibGUuCi0gKiBEaWZmZXJlbnQgbWlub3IgdmVyc2lvbnMgYXJlIG9ubHkgZG93bndhcmQgY29tcGF0aWJsZS4KLSAqIERpZmZlcmVudCBwYXRjaGxldmVsIHZlcnNpb25zIGFyZSBkb3dud2FyZCBhbmQgdXB3YXJkIGNvbXBhdGlibGUuCi0gKi8KLSNkZWZpbmUgTURfTUFKT1JfVkVSU0lPTiAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIE1EX01JTk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgOTAKLS8qCi0gKiBNRF9QQVRDSExFVkVMX1ZFUlNJT04gaW5kaWNhdGVzIGtlcm5lbCBmdW5jdGlvbmFsaXR5LgotICogPj0xIG1lYW5zIGRpZmZlcmVudCBzdXBlcmJsb2NrIGZvcm1hdHMgYXJlIHNlbGVjdGFibGUgdXNpbmcgU0VUX0FSUkFZX0lORk8KLSAqICAgICBhbmQgbWFqb3JfdmVyc2lvbi9taW5vcl92ZXJzaW9uIGFjY29yZGluZ2x5Ci0gKiA+PTIgbWVhbnMgdGhhdCBJbnRlcm5hbCBiaXRtYXBzIGFyZSBzdXBwb3J0ZWQgYnkgc2V0dGluZyBNRF9TQl9CSVRNQVBfUFJFU0VOVAotICogICAgIGluIHRoZSBzdXBlciBzdGF0dXMgYnl0ZQotICogPj0zIG1lYW5zIHRoYXQgYml0bWFwIHN1cGVyYmxvY2sgdmVyc2lvbiA0IGlzIHN1cHBvcnRlZCwgd2hpY2ggdXNlcwotICogICAgIGxpdHRsZS1lbmRpbmcgcmVwcmVzZW50YXRpb24gcmF0aGVyIHRoYW4gaG9zdC1lbmRpYW4KLSAqLwotI2RlZmluZSBNRF9QQVRDSExFVkVMX1ZFUlNJT04gICAgICAgICAgIDMKLQotZXh0ZXJuIGludCBtZHBfbWFqb3I7Ci0KLWV4dGVybiBpbnQgcmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcCk7Ci1leHRlcm4gaW50IHVucmVnaXN0ZXJfbWRfcGVyc29uYWxpdHkoc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcCk7Ci1leHRlcm4gbWRrX3RocmVhZF90ICogbWRfcmVnaXN0ZXJfdGhyZWFkKHZvaWQgKCpydW4pIChtZGRldl90ICptZGRldiksCi0JCQkJbWRkZXZfdCAqbWRkZXYsIGNvbnN0IGNoYXIgKm5hbWUpOwotZXh0ZXJuIHZvaWQgbWRfdW5yZWdpc3Rlcl90aHJlYWQobWRrX3RocmVhZF90ICp0aHJlYWQpOwotZXh0ZXJuIHZvaWQgbWRfd2FrZXVwX3RocmVhZChtZGtfdGhyZWFkX3QgKnRocmVhZCk7Ci1leHRlcm4gdm9pZCBtZF9jaGVja19yZWNvdmVyeShtZGRldl90ICptZGRldik7Ci1leHRlcm4gdm9pZCBtZF93cml0ZV9zdGFydChtZGRldl90ICptZGRldiwgc3RydWN0IGJpbyAqYmkpOwotZXh0ZXJuIHZvaWQgbWRfd3JpdGVfZW5kKG1kZGV2X3QgKm1kZGV2KTsKLWV4dGVybiB2b2lkIG1kX2RvbmVfc3luYyhtZGRldl90ICptZGRldiwgaW50IGJsb2NrcywgaW50IG9rKTsKLWV4dGVybiB2b2lkIG1kX2Vycm9yKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKLQotZXh0ZXJuIHZvaWQgbWRfc3VwZXJfd3JpdGUobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYsCi0JCQkgICBzZWN0b3JfdCBzZWN0b3IsIGludCBzaXplLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci1leHRlcm4gdm9pZCBtZF9zdXBlcl93YWl0KG1kZGV2X3QgKm1kZGV2KTsKLWV4dGVybiBpbnQgc3luY19wYWdlX2lvKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHNlY3Rvcl90IHNlY3RvciwgaW50IHNpemUsCi0JCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IHJ3KTsKLWV4dGVybiB2b2lkIG1kX2RvX3N5bmMobWRkZXZfdCAqbWRkZXYpOwotZXh0ZXJuIHZvaWQgbWRfbmV3X2V2ZW50KG1kZGV2X3QgKm1kZGV2KTsKLWV4dGVybiBpbnQgbWRfYWxsb3dfd3JpdGUobWRkZXZfdCAqbWRkZXYpOwotZXh0ZXJuIHZvaWQgbWRfd2FpdF9mb3JfYmxvY2tlZF9yZGV2KG1ka19yZGV2X3QgKnJkZXYsIG1kZGV2X3QgKm1kZGV2KTsKLQotI2VuZGlmIC8qIENPTkZJR19NRCAqLwotI2VuZGlmIAotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc0M2U0ZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oCisrKyAvZGV2L251bGwKQEAgLTEsNDAyICswLDAgQEAKLS8qCi0gICBtZF9rLmggOiBrZXJuZWwgaW50ZXJuYWwgc3RydWN0dXJlIG9mIHRoZSBMaW51eCBNRCBkcml2ZXIKLSAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTYtOTggSW5nbyBNb2xuYXIsIEdhZGkgT3htYW4KLQkgIAotICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gICBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAgIAotICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgIChmb3IgZXhhbXBsZSAvdXNyL3NyYy9saW51eC9DT1BZSU5HKTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAKLSovCi0KLSNpZm5kZWYgX01EX0tfSAotI2RlZmluZSBfTURfS19ICi0KLS8qIGFuZCBkbS1iaW8tbGlzdC5oIGlzIG5vdCB1bmRlciBpbmNsdWRlL2xpbnV4IGJlY2F1c2UuLi4uID8/PyAqLwotI2luY2x1ZGUgIi4uLy4uLy4uL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaCIKLQotI2lmZGVmIENPTkZJR19CTE9DSwotCi0jZGVmaW5lCUxFVkVMX01VTFRJUEFUSAkJKC00KQotI2RlZmluZQlMRVZFTF9MSU5FQVIJCSgtMSkKLSNkZWZpbmUJTEVWRUxfRkFVTFRZCQkoLTUpCi0KLS8qIHdlIG5lZWQgYSB2YWx1ZSBmb3IgJ25vIGxldmVsIHNwZWNpZmllZCcgYW5kIDAKLSAqIG1lYW5zICdyYWlkMCcsIHNvIHdlIG5lZWQgc29tZXRoaW5nIGVsc2UuICBUaGlzIGlzCi0gKiBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKLSAqLwotI2RlZmluZQlMRVZFTF9OT05FCQkoLTEwMDAwMDApCi0KLSNkZWZpbmUgTWF4U2VjdG9yICh+KHNlY3Rvcl90KTApCi0KLXR5cGVkZWYgc3RydWN0IG1kZGV2X3MgbWRkZXZfdDsKLXR5cGVkZWYgc3RydWN0IG1ka19yZGV2X3MgbWRrX3JkZXZfdDsKLQotLyoKLSAqIG9wdGlvbnMgcGFzc2VkIGluIHJhaWRydW46Ci0gKi8KLQotLyogQ3VycmVudGx5IHRoaXMgbXVzdCBmaXQgaW4gYW4gJ2ludCcgKi8KLSNkZWZpbmUgTUFYX0NIVU5LX1NJWkUgKDE8PDMwKQotCi0vKgotICogTUQncyAnZXh0ZW5kZWQnIGRldmljZQotICovCi1zdHJ1Y3QgbWRrX3JkZXZfcwotewotCXN0cnVjdCBsaXN0X2hlYWQgc2FtZV9zZXQ7CS8qIFJBSUQgZGV2aWNlcyB3aXRoaW4gdGhlIHNhbWUgc2V0ICovCi0KLQlzZWN0b3JfdCBzaXplOwkJCS8qIERldmljZSBzaXplIChpbiBibG9ja3MpICovCi0JbWRkZXZfdCAqbWRkZXY7CQkJLyogUkFJRCBhcnJheSBpZiBydW5uaW5nICovCi0JbG9uZyBsYXN0X2V2ZW50czsJCS8qIElPIGV2ZW50IHRpbWVzdGFtcCAqLwotCi0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsJLyogYmxvY2sgZGV2aWNlIGhhbmRsZSAqLwotCi0Jc3RydWN0IHBhZ2UJKnNiX3BhZ2U7Ci0JaW50CQlzYl9sb2FkZWQ7Ci0JX191NjQJCXNiX2V2ZW50czsKLQlzZWN0b3JfdAlkYXRhX29mZnNldDsJLyogc3RhcnQgb2YgZGF0YSBpbiBhcnJheSAqLwotCXNlY3Rvcl90IAlzYl9zdGFydDsJLyogb2Zmc2V0IG9mIHRoZSBzdXBlciBibG9jayAoaW4gNTEyYnl0ZSBzZWN0b3JzKSAqLwotCWludAkJc2Jfc2l6ZTsJLyogYnl0ZXMgaW4gdGhlIHN1cGVyYmxvY2sgKi8KLQlpbnQJCXByZWZlcnJlZF9taW5vcjsJLyogYXV0b3J1biBzdXBwb3J0ICovCi0KLQlzdHJ1Y3Qga29iamVjdAlrb2JqOwotCi0JLyogQSBkZXZpY2UgY2FuIGJlIGluIG9uZSBvZiB0aHJlZSBzdGF0ZXMgYmFzZWQgb24gdHdvIGZsYWdzOgotCSAqIE5vdCB3b3JraW5nOiAgIGZhdWx0eT09MSBpbl9zeW5jPT0wCi0JICogRnVsbHkgd29ya2luZzogZmF1bHR5PT0wIGluX3N5bmM9PTEKLQkgKiBXb3JraW5nLCBidXQgbm90Ci0JICogaW4gc3luYyB3aXRoIGFycmF5Ci0JICogICAgICAgICAgICAgICAgZmF1bHR5PT0wIGluX3N5bmM9PTAKLQkgKgotCSAqIEl0IGNhbiBuZXZlciBoYXZlIGZhdWx0eT09MSwgaW5fc3luYz09MQotCSAqIFRoaXMgcmVkdWNlcyB0aGUgYnVyZGVuIG9mIHRlc3RpbmcgbXVsdGlwbGUgZmxhZ3MgaW4gbWFueSBjYXNlcwotCSAqLwotCi0JdW5zaWduZWQgbG9uZwlmbGFnczsKLSNkZWZpbmUJRmF1bHR5CQkxCQkvKiBkZXZpY2UgaXMga25vd24gdG8gaGF2ZSBhIGZhdWx0ICovCi0jZGVmaW5lCUluX3N5bmMJCTIJCS8qIGRldmljZSBpcyBpbl9zeW5jIHdpdGggcmVzdCBvZiBhcnJheSAqLwotI2RlZmluZQlXcml0ZU1vc3RseQk0CQkvKiBBdm9pZCByZWFkaW5nIGlmIGF0IGFsbCBwb3NzaWJsZSAqLwotI2RlZmluZQlCYXJyaWVyc05vdHN1cHAJNQkJLyogQklPX1JXX0JBUlJJRVIgaXMgbm90IHN1cHBvcnRlZCAqLwotI2RlZmluZQlBbGxSZXNlcnZlZAk2CQkvKiBJZiB3aG9sZSBkZXZpY2UgaXMgcmVzZXJ2ZWQgZm9yCi0JCQkJCSAqIG9uZSBhcnJheSAqLwotI2RlZmluZQlBdXRvRGV0ZWN0ZWQJNwkJLyogYWRkZWQgYnkgYXV0by1kZXRlY3QgKi8KLSNkZWZpbmUgQmxvY2tlZAkJOAkJLyogQW4gZXJyb3Igb2NjdXJlZCBvbiBhbiBleHRlcm5hbGx5Ci0JCQkJCSAqIG1hbmFnZWQgYXJyYXksIGRvbid0IGFsbG93IHdyaXRlcwotCQkJCQkgKiB1bnRpbCBpdCBpcyBjbGVhcmVkICovCi0jZGVmaW5lIFN0YXRlQ2hhbmdlZAk5CQkvKiBGYXVsdHkgb3IgQmxvY2tlZCBoYXMgY2hhbmdlZCBkdXJpbmcKLQkJCQkJICogaW50ZXJydXB0LCBzbyBpdCBuZWVkcyB0byBiZQotCQkJCQkgKiBub3RpZmllZCBieSB0aGUgdGhyZWFkICovCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgYmxvY2tlZF93YWl0OwotCi0JaW50IGRlc2NfbnI7CQkJLyogZGVzY3JpcHRvciBpbmRleCBpbiB0aGUgc3VwZXJibG9jayAqLwotCWludCByYWlkX2Rpc2s7CQkJLyogcm9sZSBvZiBkZXZpY2UgaW4gYXJyYXkgKi8KLQlpbnQgc2F2ZWRfcmFpZF9kaXNrOwkJLyogcm9sZSB0aGF0IGRldmljZSB1c2VkIHRvIGhhdmUgaW4gdGhlCi0JCQkJCSAqIGFycmF5IGFuZCBjb3VsZCBhZ2FpbiBpZiB3ZSBkaWQgYSBwYXJ0aWFsCi0JCQkJCSAqIHJlc3luYyBmcm9tIHRoZSBiaXRtYXAKLQkJCQkJICovCi0Jc2VjdG9yX3QJcmVjb3Zlcnlfb2Zmc2V0Oy8qIElmIHRoaXMgZGV2aWNlIGhhcyBiZWVuIHBhcnRpYWxseQotCQkJCQkgKiByZWNvdmVyZWQsIHRoaXMgaXMgd2hlcmUgd2Ugd2VyZQotCQkJCQkgKiB1cCB0by4KLQkJCQkJICovCi0KLQlhdG9taWNfdAlucl9wZW5kaW5nOwkvKiBudW1iZXIgb2YgcGVuZGluZyByZXF1ZXN0cy4KLQkJCQkJICogb25seSBtYWludGFpbmVkIGZvciBhcnJheXMgdGhhdAotCQkJCQkgKiBzdXBwb3J0IGhvdCByZW1vdmFsCi0JCQkJCSAqLwotCWF0b21pY190CXJlYWRfZXJyb3JzOwkvKiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcmVhZCBlcnJvcnMgdGhhdAotCQkJCQkgKiB3ZSBoYXZlIHRyaWVkIHRvIGlnbm9yZS4KLQkJCQkJICovCi0JYXRvbWljX3QJY29ycmVjdGVkX2Vycm9yczsgLyogbnVtYmVyIG9mIGNvcnJlY3RlZCByZWFkIGVycm9ycywKLQkJCQkJICAgKiBmb3IgcmVwb3J0aW5nIHRvIHVzZXJzcGFjZSBhbmQgc3RvcmluZwotCQkJCQkgICAqIGluIHN1cGVyYmxvY2suCi0JCQkJCSAgICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IGRlbF93b3JrOwkvKiB1c2VkIGZvciBkZWxheWVkIHN5c2ZzIHJlbW92YWwgKi8KLQotCXN0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX3N0YXRlOyAvKiBoYW5kbGUgZm9yICdzdGF0ZScKLQkJCQkJICAgKiBzeXNmcyBlbnRyeSAqLwotfTsKLQotc3RydWN0IG1kZGV2X3MKLXsKLQl2b2lkCQkJCSpwcml2YXRlOwotCXN0cnVjdCBtZGtfcGVyc29uYWxpdHkJCSpwZXJzOwotCWRldl90CQkJCXVuaXQ7Ci0JaW50CQkJCW1kX21pbm9yOwotCXN0cnVjdCBsaXN0X2hlYWQgCQlkaXNrczsKLQl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7Ci0jZGVmaW5lIE1EX0NIQU5HRV9ERVZTCTAJLyogU29tZSBkZXZpY2Ugc3RhdHVzIGhhcyBjaGFuZ2VkICovCi0jZGVmaW5lIE1EX0NIQU5HRV9DTEVBTiAxCS8qIHRyYW5zaXRpb24gdG8gb3IgZnJvbSAnY2xlYW4nICovCi0jZGVmaW5lIE1EX0NIQU5HRV9QRU5ESU5HIDIJLyogc3VwZXJibG9jayB1cGRhdGUgaW4gcHJvZ3Jlc3MgKi8KLQotCWludAkJCQlybzsKLQotCXN0cnVjdCBnZW5kaXNrCQkJKmdlbmRpc2s7Ci0KLQlzdHJ1Y3Qga29iamVjdAkJCWtvYmo7Ci0JaW50CQkJCWhvbGRfYWN0aXZlOwotI2RlZmluZQlVTlRJTF9JT0NUTAkxCi0jZGVmaW5lCVVOVElMX1NUT1AJMgotCi0JLyogU3VwZXJibG9jayBpbmZvcm1hdGlvbiAqLwotCWludAkJCQltYWpvcl92ZXJzaW9uLAotCQkJCQltaW5vcl92ZXJzaW9uLAotCQkJCQlwYXRjaF92ZXJzaW9uOwotCWludAkJCQlwZXJzaXN0ZW50OwotCWludCAJCQkJZXh0ZXJuYWw7CS8qIG1ldGFkYXRhIGlzCi0JCQkJCQkJICogbWFuYWdlZCBleHRlcm5hbGx5ICovCi0JY2hhcgkJCQltZXRhZGF0YV90eXBlWzE3XTsgLyogZXh0ZXJuYWxseSBzZXQqLwotCWludAkJCQljaHVua19zaXplOwotCXRpbWVfdAkJCQljdGltZSwgdXRpbWU7Ci0JaW50CQkJCWxldmVsLCBsYXlvdXQ7Ci0JY2hhcgkJCQljbGV2ZWxbMTZdOwotCWludAkJCQlyYWlkX2Rpc2tzOwotCWludAkJCQltYXhfZGlza3M7Ci0Jc2VjdG9yX3QJCQlzaXplOyAvKiB1c2VkIHNpemUgb2YgY29tcG9uZW50IGRldmljZXMgKi8KLQlzZWN0b3JfdAkJCWFycmF5X3NlY3RvcnM7IC8qIGV4cG9ydGVkIGFycmF5IHNpemUgKi8KLQlfX3U2NAkJCQlldmVudHM7Ci0KLQljaGFyCQkJCXV1aWRbMTZdOwotCi0JLyogSWYgdGhlIGFycmF5IGlzIGJlaW5nIHJlc2hhcGVkLCB3ZSBuZWVkIHRvIHJlY29yZCB0aGUKLQkgKiBuZXcgc2hhcGUgYW5kIGFuIGluZGljYXRpb24gb2Ygd2hlcmUgd2UgYXJlIHVwIHRvLgotCSAqIFRoaXMgaXMgd3JpdHRlbiB0byB0aGUgc3VwZXJibG9jay4KLQkgKiBJZiByZXNoYXBlX3Bvc2l0aW9uIGlzIE1heFNlY3RvciwgdGhlbiBubyByZXNoYXBlIGlzIGhhcHBlbmluZyAoeWV0KS4KLQkgKi8KLQlzZWN0b3JfdAkJCXJlc2hhcGVfcG9zaXRpb247Ci0JaW50CQkJCWRlbHRhX2Rpc2tzLCBuZXdfbGV2ZWwsIG5ld19sYXlvdXQsIG5ld19jaHVuazsKLQotCXN0cnVjdCBtZGtfdGhyZWFkX3MJCSp0aHJlYWQ7CS8qIG1hbmFnZW1lbnQgdGhyZWFkICovCi0Jc3RydWN0IG1ka190aHJlYWRfcwkJKnN5bmNfdGhyZWFkOwkvKiBkb2luZyByZXN5bmMgb3IgcmVjb25zdHJ1Y3QgKi8KLQlzZWN0b3JfdAkJCWN1cnJfcmVzeW5jOwkvKiBsYXN0IGJsb2NrIHNjaGVkdWxlZCAqLwotCXVuc2lnbmVkIGxvbmcJCQlyZXN5bmNfbWFyazsJLyogYSByZWNlbnQgdGltZXN0YW1wICovCi0Jc2VjdG9yX3QJCQlyZXN5bmNfbWFya19jbnQ7LyogYmxvY2tzIHdyaXR0ZW4gYXQgcmVzeW5jX21hcmsgKi8KLQlzZWN0b3JfdAkJCWN1cnJfbWFya19jbnQ7IC8qIGJsb2NrcyBzY2hlZHVsZWQgbm93ICovCi0KLQlzZWN0b3JfdAkJCXJlc3luY19tYXhfc2VjdG9yczsgLyogbWF5IGJlIHNldCBieSBwZXJzb25hbGl0eSAqLwotCi0Jc2VjdG9yX3QJCQlyZXN5bmNfbWlzbWF0Y2hlczsgLyogY291bnQgb2Ygc2VjdG9ycyB3aGVyZQotCQkJCQkJCSAgICAqIHBhcml0eS9yZXBsaWNhIG1pc21hdGNoIGZvdW5kCi0JCQkJCQkJICAgICovCi0KLQkvKiBhbGxvdyB1c2VyLXNwYWNlIHRvIHJlcXVlc3Qgc3VzcGVuc2lvbiBvZiBJTyB0byByZWdpb25zIG9mIHRoZSBhcnJheSAqLwotCXNlY3Rvcl90CQkJc3VzcGVuZF9sbzsKLQlzZWN0b3JfdAkJCXN1c3BlbmRfaGk7Ci0JLyogaWYgemVybywgdXNlIHRoZSBzeXN0ZW0td2lkZSBkZWZhdWx0ICovCi0JaW50CQkJCXN5bmNfc3BlZWRfbWluOwotCWludAkJCQlzeW5jX3NwZWVkX21heDsKLQotCS8qIHJlc3luYyBldmVuIHRob3VnaCB0aGUgc2FtZSBkaXNrcyBhcmUgc2hhcmVkIGFtb25nIG1kLWRldmljZXMgKi8KLQlpbnQJCQkJcGFyYWxsZWxfcmVzeW5jOwotCi0JaW50CQkJCW9rX3N0YXJ0X2RlZ3JhZGVkOwotCS8qIHJlY292ZXJ5L3Jlc3luYyBmbGFncyAKLQkgKiBORUVERUQ6ICAgd2UgbWlnaHQgbmVlZCB0byBzdGFydCBhIHJlc3luYy9yZWNvdmVyCi0JICogUlVOTklORzogIGEgdGhyZWFkIGlzIHJ1bm5pbmcsIG9yIGFib3V0IHRvIGJlIHN0YXJ0ZWQKLQkgKiBTWU5DOiAgICAgYWN0dWFsbHkgZG9pbmcgYSByZXN5bmMsIG5vdCBhIHJlY292ZXJ5Ci0JICogUkVDT1ZFUjogIGRvaW5nIHJlY292ZXJ5LCBvciBuZWVkIHRvIHRyeSBpdC4KLQkgKiBJTlRSOiAgICAgcmVzeW5jIG5lZWRzIHRvIGJlIGFib3J0ZWQgZm9yIHNvbWUgcmVhc29uCi0JICogRE9ORTogICAgIHRocmVhZCBpcyBkb25lIGFuZCBpcyB3YWl0aW5nIHRvIGJlIHJlYXBlZAotCSAqIFJFUVVFU1Q6ICB1c2VyLXNwYWNlIGhhcyByZXF1ZXN0ZWQgYSBzeW5jICh1c2VkIHdpdGggU1lOQykKLQkgKiBDSEVDSzogICAgdXNlci1zcGFjZSByZXF1ZXN0IGZvciBmb3IgY2hlY2stb25seSwgbm8gcmVwYWlyCi0JICogUkVTSEFQRTogIEEgcmVzaGFwZSBpcyBoYXBwZW5pbmcKLQkgKgotCSAqIElmIG5laXRoZXIgU1lOQyBvciBSRVNIQVBFIGFyZSBzZXQsIHRoZW4gaXQgaXMgYSByZWNvdmVyeS4KLQkgKi8KLSNkZWZpbmUJTURfUkVDT1ZFUllfUlVOTklORwkwCi0jZGVmaW5lCU1EX1JFQ09WRVJZX1NZTkMJMQotI2RlZmluZQlNRF9SRUNPVkVSWV9SRUNPVkVSCTIKLSNkZWZpbmUJTURfUkVDT1ZFUllfSU5UUgkzCi0jZGVmaW5lCU1EX1JFQ09WRVJZX0RPTkUJNAotI2RlZmluZQlNRF9SRUNPVkVSWV9ORUVERUQJNQotI2RlZmluZQlNRF9SRUNPVkVSWV9SRVFVRVNURUQJNgotI2RlZmluZQlNRF9SRUNPVkVSWV9DSEVDSwk3Ci0jZGVmaW5lIE1EX1JFQ09WRVJZX1JFU0hBUEUJOAotI2RlZmluZQlNRF9SRUNPVkVSWV9GUk9aRU4JOQotCi0JdW5zaWduZWQgbG9uZwkJCXJlY292ZXJ5OwotCWludAkJCQlyZWNvdmVyeV9kaXNhYmxlZDsgLyogaWYgd2UgZGV0ZWN0IHRoYXQgcmVjb3ZlcnkKLQkJCQkJCQkgICAgKiB3aWxsIGFsd2F5cyBmYWlsLCBzZXQgdGhpcwotCQkJCQkJCSAgICAqIHNvIHdlIGRvbid0IGxvb3AgdHJ5aW5nICovCi0KLQlpbnQJCQkJaW5fc3luYzsJLyoga25vdyB0byBub3QgbmVlZCByZXN5bmMgKi8KLQlzdHJ1Y3QgbXV0ZXgJCQlyZWNvbmZpZ19tdXRleDsKLQlhdG9taWNfdAkJCWFjdGl2ZTsJCS8qIGdlbmVyYWwgcmVmY291bnQgKi8KLQlhdG9taWNfdAkJCW9wZW5lcnM7CS8qIG51bWJlciBvZiBhY3RpdmUgb3BlbnMgKi8KLQotCWludAkJCQljaGFuZ2VkOwkvKiB0cnVlIGlmIHdlIG1pZ2h0IG5lZWQgdG8gcmVyZWFkIHBhcnRpdGlvbiBpbmZvICovCi0JaW50CQkJCWRlZ3JhZGVkOwkvKiB3aGV0aGVyIG1kIHNob3VsZCBjb25zaWRlcgotCQkJCQkJCSAqIGFkZGluZyBhIHNwYXJlCi0JCQkJCQkJICovCi0JaW50CQkJCWJhcnJpZXJzX3dvcms7CS8qIGluaXRpYWxpc2VkIHRvIHRydWUsIGNsZWFyZWQgYXMgc29vbgotCQkJCQkJCSAqIGFzIGEgYmFycmllciByZXF1ZXN0IHRvIHNsYXZlCi0JCQkJCQkJICogZmFpbHMuICBPbmx5IHN1cHBvcnRlZAotCQkJCQkJCSAqLwotCXN0cnVjdCBiaW8JCQkqYmlvbGlzdDsgCS8qIGJpb3MgdGhhdCBuZWVkIHRvIGJlIHJldHJpZWQKLQkJCQkJCQkgKiBiZWNhdXNlIEJJT19SV19CQVJSSUVSIGlzIG5vdCBzdXBwb3J0ZWQKLQkJCQkJCQkgKi8KLQotCWF0b21pY190CQkJcmVjb3ZlcnlfYWN0aXZlOyAvKiBibG9ja3Mgc2NoZWR1bGVkLCBidXQgbm90IHdyaXR0ZW4gKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdAkJcmVjb3Zlcnlfd2FpdDsKLQlzZWN0b3JfdAkJCXJlY292ZXJ5X2NwOwotCXNlY3Rvcl90CQkJcmVzeW5jX21pbjsJLyogdXNlciByZXF1ZXN0ZWQgc3luYwotCQkJCQkJCSAqIHN0YXJ0cyBoZXJlICovCi0Jc2VjdG9yX3QJCQlyZXN5bmNfbWF4OwkvKiByZXN5bmMgc2hvdWxkIHBhdXNlCi0JCQkJCQkJICogd2hlbiBpdCBnZXRzIGhlcmUgKi8KLQotCXN0cnVjdCBzeXNmc19kaXJlbnQJCSpzeXNmc19zdGF0ZTsJLyogaGFuZGxlIGZvciAnYXJyYXlfc3RhdGUnCi0JCQkJCQkJICogZmlsZSBpbiBzeXNmcy4KLQkJCQkJCQkgKi8KLQlzdHJ1Y3Qgc3lzZnNfZGlyZW50CQkqc3lzZnNfYWN0aW9uOyAgLyogaGFuZGxlIGZvciAnc3luY19hY3Rpb24nICovCi0KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVsX3dvcms7CS8qIHVzZWQgZm9yIGRlbGF5ZWQgc3lzZnMgcmVtb3ZhbCAqLwotCi0Jc3BpbmxvY2tfdAkJCXdyaXRlX2xvY2s7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJCXNiX3dhaXQ7CS8qIGZvciB3YWl0aW5nIG9uIHN1cGVyYmxvY2sgdXBkYXRlcyAqLwotCWF0b21pY190CQkJcGVuZGluZ193cml0ZXM7CS8qIG51bWJlciBvZiBhY3RpdmUgc3VwZXJibG9jayB3cml0ZXMgKi8KLQotCXVuc2lnbmVkIGludAkJCXNhZmVtb2RlOwkvKiBpZiBzZXQsIHVwZGF0ZSAiY2xlYW4iIHN1cGVyYmxvY2sKLQkJCQkJCQkgKiB3aGVuIG5vIHdyaXRlcyBwZW5kaW5nLgotCQkJCQkJCSAqLyAKLQl1bnNpZ25lZCBpbnQJCQlzYWZlbW9kZV9kZWxheTsKLQlzdHJ1Y3QgdGltZXJfbGlzdAkJc2FmZW1vZGVfdGltZXI7Ci0JYXRvbWljX3QJCQl3cml0ZXNfcGVuZGluZzsgCi0Jc3RydWN0IHJlcXVlc3RfcXVldWUJCSpxdWV1ZTsJLyogZm9yIHBsdWdnaW5nIC4uLiAqLwotCi0JYXRvbWljX3QgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9iZWhpbmQ7IC8qIG91dHN0YW5kaW5nIGFzeW5jIElPICovCi0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICBtYXhfd3JpdGVfYmVoaW5kOyAvKiAwID0gc3luYyAqLwotCi0Jc3RydWN0IGJpdG1hcCAgICAgICAgICAgICAgICAgICAqYml0bWFwOyAvKiB0aGUgYml0bWFwIGZvciB0aGUgZGV2aWNlICovCi0Jc3RydWN0IGZpbGUJCQkqYml0bWFwX2ZpbGU7IC8qIHRoZSBiaXRtYXAgZmlsZSAqLwotCWxvbmcJCQkJYml0bWFwX29mZnNldDsgLyogb2Zmc2V0IGZyb20gc3VwZXJibG9jayBvZgotCQkJCQkJCSogc3RhcnQgb2YgYml0bWFwLiBNYXkgYmUKLQkJCQkJCQkqIG5lZ2F0aXZlLCBidXQgbm90ICcwJwotCQkJCQkJCSovCi0JbG9uZwkJCQlkZWZhdWx0X2JpdG1hcF9vZmZzZXQ7IC8qIHRoaXMgaXMgdGhlIG9mZnNldCB0byB1c2Ugd2hlbgotCQkJCQkJCQkqIGhvdC1hZGRpbmcgYSBiaXRtYXAuICBJdCBzaG91bGQKLQkJCQkJCQkJKiBldmVudHVhbGx5IGJlIHNldHRhYmxlIGJ5IHN5c2ZzLgotCQkJCQkJCQkqLwotCi0Jc3RydWN0IGxpc3RfaGVhZAkJYWxsX21kZGV2czsKLX07Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIHJkZXZfZGVjX3BlbmRpbmcobWRrX3JkZXZfdCAqcmRldiwgbWRkZXZfdCAqbWRkZXYpCi17Ci0JaW50IGZhdWx0eSA9IHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcmRldi0+bnJfcGVuZGluZykgJiYgZmF1bHR5KQotCQlzZXRfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtZF9zeW5jX2FjY3Qoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgbG9uZyBucl9zZWN0b3JzKQotewotICAgICAgICBhdG9taWNfYWRkKG5yX3NlY3RvcnMsICZiZGV2LT5iZF9jb250YWlucy0+YmRfZGlzay0+c3luY19pbyk7Ci19Ci0KLXN0cnVjdCBtZGtfcGVyc29uYWxpdHkKLXsKLQljaGFyICpuYW1lOwotCWludCBsZXZlbDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0JaW50ICgqbWFrZV9yZXF1ZXN0KShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKTsKLQlpbnQgKCpydW4pKG1kZGV2X3QgKm1kZGV2KTsKLQlpbnQgKCpzdG9wKShtZGRldl90ICptZGRldik7Ci0Jdm9pZCAoKnN0YXR1cykoc3RydWN0IHNlcV9maWxlICpzZXEsIG1kZGV2X3QgKm1kZGV2KTsKLQkvKiBlcnJvcl9oYW5kbGVyIG11c3Qgc2V0IC0+ZmF1bHR5IGFuZCBjbGVhciAtPmluX3N5bmMKLQkgKiBpZiBhcHByb3ByaWF0ZSwgYW5kIHNob3VsZCBhYm9ydCByZWNvdmVyeSBpZiBuZWVkZWQgCi0JICovCi0Jdm9pZCAoKmVycm9yX2hhbmRsZXIpKG1kZGV2X3QgKm1kZGV2LCBtZGtfcmRldl90ICpyZGV2KTsKLQlpbnQgKCpob3RfYWRkX2Rpc2spIChtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7Ci0JaW50ICgqaG90X3JlbW92ZV9kaXNrKSAobWRkZXZfdCAqbWRkZXYsIGludCBudW1iZXIpOwotCWludCAoKnNwYXJlX2FjdGl2ZSkgKG1kZGV2X3QgKm1kZGV2KTsKLQlzZWN0b3JfdCAoKnN5bmNfcmVxdWVzdCkobWRkZXZfdCAqbWRkZXYsIHNlY3Rvcl90IHNlY3Rvcl9uciwgaW50ICpza2lwcGVkLCBpbnQgZ29fZmFzdGVyKTsKLQlpbnQgKCpyZXNpemUpIChtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9ycyk7Ci0JaW50ICgqY2hlY2tfcmVzaGFwZSkgKG1kZGV2X3QgKm1kZGV2KTsKLQlpbnQgKCpzdGFydF9yZXNoYXBlKSAobWRkZXZfdCAqbWRkZXYpOwotCWludCAoKnJlY29uZmlnKSAobWRkZXZfdCAqbWRkZXYsIGludCBsYXlvdXQsIGludCBjaHVua19zaXplKTsKLQkvKiBxdWllc2NlIG1vdmVzIGJldHdlZW4gcXVpZXNjZW5jZSBzdGF0ZXMKLQkgKiAwIC0gZnVsbHkgYWN0aXZlCi0JICogMSAtIG5vIG5ldyByZXF1ZXN0cyBhbGxvd2VkCi0JICogb3RoZXJzIC0gcmVzZXJ2ZWQKLQkgKi8KLQl2b2lkICgqcXVpZXNjZSkgKG1kZGV2X3QgKm1kZGV2LCBpbnQgc3RhdGUpOwotfTsKLQotCi1zdHJ1Y3QgbWRfc3lzZnNfZW50cnkgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykobWRkZXZfdCAqLCBjaGFyICopOwotCXNzaXplX3QgKCpzdG9yZSkobWRkZXZfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Ci19OwotCi0KLXN0YXRpYyBpbmxpbmUgY2hhciAqIG1kbmFtZSAobWRkZXZfdCAqIG1kZGV2KQotewotCXJldHVybiBtZGRldi0+Z2VuZGlzayA/IG1kZGV2LT5nZW5kaXNrLT5kaXNrX25hbWUgOiAibWRYIjsKLX0KLQotLyoKLSAqIGl0ZXJhdGVzIHRocm91Z2ggc29tZSByZGV2IHJpbmdsaXN0LiBJdCdzIHNhZmUgdG8gcmVtb3ZlIHRoZQotICogY3VycmVudCAncmRldicuIERvbnQgdG91Y2ggJ3RtcCcgdGhvdWdoLgotICovCi0jZGVmaW5lIHJkZXZfZm9yX2VhY2hfbGlzdChyZGV2LCB0bXAsIGhlYWQpCQkJCVwKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmRldiwgdG1wLCBoZWFkLCBzYW1lX3NldCkKLQotLyoKLSAqIGl0ZXJhdGVzIHRocm91Z2ggdGhlICdzYW1lIGFycmF5IGRpc2tzJyByaW5nbGlzdAotICovCi0jZGVmaW5lIHJkZXZfZm9yX2VhY2gocmRldiwgdG1wLCBtZGRldikJCQkJXAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZGV2LCB0bXAsICYoKG1kZGV2KS0+ZGlza3MpLCBzYW1lX3NldCkKLQotI2RlZmluZSByZGV2X2Zvcl9lYWNoX3JjdShyZGV2LCBtZGRldikJCQkJXAotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHJkZXYsICYoKG1kZGV2KS0+ZGlza3MpLCBzYW1lX3NldCkKLQotdHlwZWRlZiBzdHJ1Y3QgbWRrX3RocmVhZF9zIHsKLQl2b2lkCQkJKCpydW4pIChtZGRldl90ICptZGRldik7Ci0JbWRkZXZfdAkJCSptZGRldjsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl3cXVldWU7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICAgZmxhZ3M7Ci0Jc3RydWN0IHRhc2tfc3RydWN0CSp0c2s7Ci0JdW5zaWduZWQgbG9uZwkJdGltZW91dDsKLX0gbWRrX3RocmVhZF90OwotCi0jZGVmaW5lIFRIUkVBRF9XQUtFVVAgIDAKLQotI2RlZmluZSBfX3dhaXRfZXZlbnRfbG9ja19pcnEod3EsIGNvbmRpdGlvbiwgbG9jaywgY21kKSAJCVwKLWRvIHsJCQkJCQkJCQlcCi0Jd2FpdF9xdWV1ZV90IF9fd2FpdDsJCQkJCQlcCi0JaW5pdF93YWl0cXVldWVfZW50cnkoJl9fd2FpdCwgY3VycmVudCk7CQkJCVwKLQkJCQkJCQkJCVwKLQlhZGRfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOwkJCQkJXAotCWZvciAoOzspIHsJCQkJCQkJXAotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CQlcCi0JCWlmIChjb25kaXRpb24pCQkJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQlzcGluX3VubG9ja19pcnEoJmxvY2spOwkJCQkJXAotCQljbWQ7CQkJCQkJCVwKLQkJc2NoZWR1bGUoKTsJCQkJCQlcCi0JCXNwaW5fbG9ja19pcnEoJmxvY2spOwkJCQkJXAotCX0JCQkJCQkJCVwKLQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsJCQkJCVwKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmd3EsICZfX3dhaXQpOwkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIHdhaXRfZXZlbnRfbG9ja19pcnEod3EsIGNvbmRpdGlvbiwgbG9jaywgY21kKSAJCQlcCi1kbyB7CQkJCQkJCQkJXAotCWlmIChjb25kaXRpb24pCSAJCQkJCQlcCi0JCWJyZWFrOwkJCQkJCQlcCi0JX193YWl0X2V2ZW50X2xvY2tfaXJxKHdxLCBjb25kaXRpb24sIGxvY2ssIGNtZCk7CQlcCi19IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2FmZV9wdXRfcGFnZShzdHJ1Y3QgcGFnZSAqcCkKLXsKLQlpZiAocCkgcHV0X3BhZ2UocCk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfQkxPQ0sgKi8KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfdS5oIGIvaW5jbHVkZS9saW51eC9yYWlkL21kX3UuaAppbmRleCA3MTkyMDM1Li5mYjFhYmIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfdS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF91LmgKQEAgLTE1LDYgKzE1LDI0IEBACiAjaWZuZGVmIF9NRF9VX0gKICNkZWZpbmUgX01EX1VfSAogCisvKgorICogRGlmZmVyZW50IG1ham9yIHZlcnNpb25zIGFyZSBub3QgY29tcGF0aWJsZS4KKyAqIERpZmZlcmVudCBtaW5vciB2ZXJzaW9ucyBhcmUgb25seSBkb3dud2FyZCBjb21wYXRpYmxlLgorICogRGlmZmVyZW50IHBhdGNobGV2ZWwgdmVyc2lvbnMgYXJlIGRvd253YXJkIGFuZCB1cHdhcmQgY29tcGF0aWJsZS4KKyAqLworI2RlZmluZSBNRF9NQUpPUl9WRVJTSU9OICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTURfTUlOT1JfVkVSU0lPTiAgICAgICAgICAgICAgICA5MAorLyoKKyAqIE1EX1BBVENITEVWRUxfVkVSU0lPTiBpbmRpY2F0ZXMga2VybmVsIGZ1bmN0aW9uYWxpdHkuCisgKiA+PTEgbWVhbnMgZGlmZmVyZW50IHN1cGVyYmxvY2sgZm9ybWF0cyBhcmUgc2VsZWN0YWJsZSB1c2luZyBTRVRfQVJSQVlfSU5GTworICogICAgIGFuZCBtYWpvcl92ZXJzaW9uL21pbm9yX3ZlcnNpb24gYWNjb3JkaW5nbHkKKyAqID49MiBtZWFucyB0aGF0IEludGVybmFsIGJpdG1hcHMgYXJlIHN1cHBvcnRlZCBieSBzZXR0aW5nIE1EX1NCX0JJVE1BUF9QUkVTRU5UCisgKiAgICAgaW4gdGhlIHN1cGVyIHN0YXR1cyBieXRlCisgKiA+PTMgbWVhbnMgdGhhdCBiaXRtYXAgc3VwZXJibG9jayB2ZXJzaW9uIDQgaXMgc3VwcG9ydGVkLCB3aGljaCB1c2VzCisgKiAgICAgbGl0dGxlLWVuZGluZyByZXByZXNlbnRhdGlvbiByYXRoZXIgdGhhbiBob3N0LWVuZGlhbgorICovCisjZGVmaW5lIE1EX1BBVENITEVWRUxfVkVSU0lPTiAgICAgICAgICAgMworCiAvKiBpb2N0bHMgKi8KIAogLyogc3RhdHVzICovCkBAIC00Niw2ICs2NCwxMiBAQAogI2RlZmluZSBTVE9QX0FSUkFZX1JPCQlfSU8gKE1EX01BSk9SLCAweDMzKQogI2RlZmluZSBSRVNUQVJUX0FSUkFZX1JXCV9JTyAoTURfTUFKT1IsIDB4MzQpCiAKKy8qIDYzIHBhcnRpdGlvbnMgd2l0aCB0aGUgYWx0ZXJuYXRlIG1ham9yIG51bWJlciAobWRwKSAqLworI2RlZmluZSBNZHBNaW5vclNoaWZ0IDYKKyNpZmRlZiBfX0tFUk5FTF9fCitleHRlcm4gaW50IG1kcF9tYWpvcjsKKyNlbmRpZgorCiB0eXBlZGVmIHN0cnVjdCBtZHVfdmVyc2lvbl9zIHsKIAlpbnQgbWFqb3I7CiAJaW50IG1pbm9yOwpAQCAtODUsNiArMTA5LDE3IEBACiAKIH0gbWR1X2FycmF5X2luZm9fdDsKIAorLyogbm9uLW9idmlvdXMgdmFsdWVzIGZvciAnbGV2ZWwnICovCisjZGVmaW5lCUxFVkVMX01VTFRJUEFUSAkJKC00KQorI2RlZmluZQlMRVZFTF9MSU5FQVIJCSgtMSkKKyNkZWZpbmUJTEVWRUxfRkFVTFRZCQkoLTUpCisKKy8qIHdlIG5lZWQgYSB2YWx1ZSBmb3IgJ25vIGxldmVsIHNwZWNpZmllZCcgYW5kIDAKKyAqIG1lYW5zICdyYWlkMCcsIHNvIHdlIG5lZWQgc29tZXRoaW5nIGVsc2UuICBUaGlzIGlzCisgKiBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKKyAqLworI2RlZmluZQlMRVZFTF9OT05FCQkoLTEwMDAwMDApCisKIHR5cGVkZWYgc3RydWN0IG1kdV9kaXNrX2luZm9fcyB7CiAJLyoKIAkgKiBjb25maWd1cmF0aW9uL3N0YXR1cyBvZiBvbmUgcGFydGljdWxhciBkaXNrCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbXVsdGlwYXRoLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvbXVsdGlwYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNTNmYzEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL211bHRpcGF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotI2lmbmRlZiBfTVVMVElQQVRIX0gKLSNkZWZpbmUgX01VTFRJUEFUSF9ICi0KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+Ci0KLXN0cnVjdCBtdWx0aXBhdGhfaW5mbyB7Ci0JbWRrX3JkZXZfdAkqcmRldjsKLX07Ci0KLXN0cnVjdCBtdWx0aXBhdGhfcHJpdmF0ZV9kYXRhIHsKLQltZGRldl90CQkJKm1kZGV2OwotCXN0cnVjdCBtdWx0aXBhdGhfaW5mbwkqbXVsdGlwYXRoczsKLQlpbnQJCQlyYWlkX2Rpc2tzOwotCWludAkJCXdvcmtpbmdfZGlza3M7Ci0Jc3BpbmxvY2tfdAkJZGV2aWNlX2xvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OwotCi0JbWVtcG9vbF90CQkqcG9vbDsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IG11bHRpcGF0aF9wcml2YXRlX2RhdGEgbXVsdGlwYXRoX2NvbmZfdDsKLQotLyoKLSAqIHRoaXMgaXMgdGhlIG9ubHkgcG9pbnQgaW4gdGhlIFJBSUQgY29kZSB3aGVyZSB3ZSB2aW9sYXRlCi0gKiBDIHR5cGUgc2FmZXR5LiBtZGRldi0+cHJpdmF0ZSBpcyBhbiAnb3BhcXVlJyBwb2ludGVyLgotICovCi0jZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgobXVsdGlwYXRoX2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZSkKLQotLyoKLSAqIHRoaXMgaXMgb3VyICdwcml2YXRlJyAnY29sbGVjdGl2ZScgTVVMVElQQVRIIGJ1ZmZlciBoZWFkLgotICogaXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBraW5kIG9mIElPIG9wZXJhdGlvbnMgd2VyZSBzdGFydGVkCi0gKiBmb3IgdGhpcyBNVUxUSVBBVEggb3BlcmF0aW9uLCBhbmQgYWJvdXQgdGhlaXIgc3RhdHVzOgotICovCi0KLXN0cnVjdCBtdWx0aXBhdGhfYmggewotCW1kZGV2X3QJCQkqbWRkZXY7Ci0Jc3RydWN0IGJpbwkJKm1hc3Rlcl9iaW87Ci0Jc3RydWN0IGJpbwkJYmlvOwotCWludAkJCXBhdGg7Ci0Jc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OwotfTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3BxLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvcHEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTI0ODBmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yYWlkL3BxLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qIC0qLSBsaW51eC1jIC0qLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKKyAqCisgKiAgIENvcHlyaWdodCAyMDAzIEguIFBldGVyIEFudmluIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTMgVGVtcGxlIFBsYWNlIFN0ZSAzMzAsCisgKiAgIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0E7IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb247IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgTElOVVhfUkFJRF9SQUlENl9ICisjZGVmaW5lIExJTlVYX1JBSURfUkFJRDZfSAorCisjaWZkZWYgX19LRVJORUxfXworCisvKiBTZXQgdG8gMSB0byB1c2Uga2VybmVsLXdpZGUgZW1wdHlfemVyb19wYWdlICovCisjZGVmaW5lIFJBSUQ2X1VTRV9FTVBUWV9aRVJPX1BBR0UgMAorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorCisvKiBXZSBuZWVkIGEgcHJlLXplcm9lZCBwYWdlLi4uIGlmIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBrZXJuZWwtcHJvdmlkZWQKKyAgIG9uZSBkZWZpbmUgaXQgaGVyZSAqLworI2lmIFJBSUQ2X1VTRV9FTVBUWV9aRVJPX1BBR0UKKyMgZGVmaW5lIHJhaWQ2X2VtcHR5X3plcm9fcGFnZSBlbXB0eV96ZXJvX3BhZ2UKKyNlbHNlCitleHRlcm4gY29uc3QgY2hhciByYWlkNl9lbXB0eV96ZXJvX3BhZ2VbUEFHRV9TSVpFXTsKKyNlbmRpZgorCisjZWxzZSAvKiAhIF9fS0VSTkVMX18gKi8KKy8qIFVzZWQgZm9yIHRlc3RpbmcgaW4gdXNlciBzcGFjZSAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIE5vdCBzdGFuZGFyZCwgYnV0IGdsaWJjIGRlZmluZXMgaXQgKi8KKyNkZWZpbmUgQklUU19QRVJfTE9ORyBfX1dPUkRTSVpFCisKK3R5cGVkZWYgdWludDhfdCAgdTg7Cit0eXBlZGVmIHVpbnQxNl90IHUxNjsKK3R5cGVkZWYgdWludDMyX3QgdTMyOwordHlwZWRlZiB1aW50NjRfdCB1NjQ7CisKKyNpZm5kZWYgUEFHRV9TSVpFCisjIGRlZmluZSBQQUdFX1NJWkUgNDA5NgorI2VuZGlmCitleHRlcm4gY29uc3QgY2hhciByYWlkNl9lbXB0eV96ZXJvX3BhZ2VbUEFHRV9TSVpFXTsKKworI2RlZmluZSBfX2luaXQKKyNkZWZpbmUgX19leGl0CisjZGVmaW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX19hdHRyaWJ1dGVfXygoY29uc3QpKQorI2RlZmluZSBub2lubGluZSBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCisKKyNkZWZpbmUgcHJlZW1wdF9lbmFibGUoKQorI2RlZmluZSBwcmVlbXB0X2Rpc2FibGUoKQorI2RlZmluZSBjcHVfaGFzX2ZlYXR1cmUoeCkgMQorI2RlZmluZSBlbmFibGVfa2VybmVsX2FsdGl2ZWMoKQorI2RlZmluZSBkaXNhYmxlX2tlcm5lbF9hbHRpdmVjKCkKKworI2RlZmluZSBFWFBPUlRfU1lNQk9MKHN5bSkKKyNkZWZpbmUgTU9EVUxFX0xJQ0VOU0UobGljZW5jZSkKKyNkZWZpbmUgc3Vic3lzX2luaXRjYWxsKHgpCisjZGVmaW5lIG1vZHVsZV9leGl0KHgpCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisvKiBSb3V0aW5lIGNob2ljZXMgKi8KK3N0cnVjdCByYWlkNl9jYWxscyB7CisJdm9pZCAoKmdlbl9zeW5kcm9tZSkoaW50LCBzaXplX3QsIHZvaWQgKiopOworCWludCAgKCp2YWxpZCkodm9pZCk7CS8qIFJldHVybnMgMSBpZiB0aGlzIHJvdXRpbmUgc2V0IGlzIHVzYWJsZSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CS8qIE5hbWUgb2YgdGhpcyByb3V0aW5lIHNldCAqLworCWludCBwcmVmZXI7CQkvKiBIYXMgc3BlY2lhbCBwZXJmb3JtYW5jZSBhdHRyaWJ1dGUgKi8KK307CisKKy8qIFNlbGVjdGVkIGFsZ29yaXRobSAqLworZXh0ZXJuIHN0cnVjdCByYWlkNl9jYWxscyByYWlkNl9jYWxsOworCisvKiBBbGdvcml0aG0gbGlzdCAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCByYWlkNl9jYWxscyAqIGNvbnN0IHJhaWQ2X2FsZ29zW107CitpbnQgcmFpZDZfc2VsZWN0X2FsZ28odm9pZCk7CisKKy8qIFJldHVybiB2YWx1ZXMgZnJvbSBjaGtfc3luZHJvbWUgKi8KKyNkZWZpbmUgUkFJRDZfT0sJMAorI2RlZmluZSBSQUlENl9QX0JBRAkxCisjZGVmaW5lIFJBSUQ2X1FfQkFECTIKKyNkZWZpbmUgUkFJRDZfUFFfQkFECTMKKworLyogR2Fsb2lzIGZpZWxkIHRhYmxlcyAqLworZXh0ZXJuIGNvbnN0IHU4IHJhaWQ2X2dmbXVsWzI1Nl1bMjU2XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDI1NikpKTsKK2V4dGVybiBjb25zdCB1OCByYWlkNl9nZmV4cFsyNTZdICAgICAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyNTYpKSk7CitleHRlcm4gY29uc3QgdTggcmFpZDZfZ2ZpbnZbMjU2XSAgICAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMjU2KSkpOworZXh0ZXJuIGNvbnN0IHU4IHJhaWQ2X2dmZXhpWzI1Nl0gICAgICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDI1NikpKTsKKworLyogUmVjb3Zlcnkgcm91dGluZXMgKi8KK3ZvaWQgcmFpZDZfMmRhdGFfcmVjb3YoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAorCQkgICAgICAgdm9pZCAqKnB0cnMpOwordm9pZCByYWlkNl9kYXRhcF9yZWNvdihpbnQgZGlza3MsIHNpemVfdCBieXRlcywgaW50IGZhaWxhLCB2b2lkICoqcHRycyk7Cit2b2lkIHJhaWQ2X2R1YWxfcmVjb3YoaW50IGRpc2tzLCBzaXplX3QgYnl0ZXMsIGludCBmYWlsYSwgaW50IGZhaWxiLAorCQkgICAgICB2b2lkICoqcHRycyk7CisKKy8qIFNvbWUgZGVmaW5pdGlvbnMgdG8gYWxsb3cgY29kZSB0byBiZSBjb21waWxlZCBmb3IgdGVzdGluZyBpbiB1c2Vyc3BhY2UgKi8KKyNpZm5kZWYgX19LRVJORUxfXworCisjIGRlZmluZSBqaWZmaWVzCXJhaWQ2X2ppZmZpZXMoKQorIyBkZWZpbmUgcHJpbnRrIAlwcmludGYKKyMgZGVmaW5lIEdGUF9LRVJORUwJMAorIyBkZWZpbmUgX19nZXRfZnJlZV9wYWdlcyh4LCB5KQkoKHVuc2lnbmVkIGxvbmcpbW1hcChOVUxMLCBQQUdFX1NJWkUgPDwgKHkpLCBcCisJCQkJCQkgICAgIFBST1RfUkVBRHxQUk9UX1dSSVRFLCAgIFwKKwkJCQkJCSAgICAgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUyxcCisJCQkJCQkgICAgIDAsIDApKQorIyBkZWZpbmUgZnJlZV9wYWdlcyh4LCB5KQltdW5tYXAoKHZvaWQgKikoeCksICh5KSpQQUdFX1NJWkUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcmVsYXgodm9pZCkKK3sKKwkvKiBOb3RoaW5nICovCit9CisKKyN1bmRlZiAgSFoKKyNkZWZpbmUgSFogMTAwMAorc3RhdGljIGlubGluZSB1aW50MzJfdCByYWlkNl9qaWZmaWVzKHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisJcmV0dXJuIHR2LnR2X3NlYyoxMDAwICsgdHYudHZfdXNlYy8xMDAwOworfQorCisjZW5kaWYgLyogISBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBMSU5VWF9SQUlEX1JBSUQ2X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMC5oIGIvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNDJhYTguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jaWZuZGVmIF9SQUlEMF9ICi0jZGVmaW5lIF9SQUlEMF9ICi0KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+Ci0KLXN0cnVjdCBzdHJpcF96b25lCi17Ci0Jc2VjdG9yX3Qgem9uZV9zdGFydDsJLyogWm9uZSBvZmZzZXQgaW4gbWRfZGV2IChpbiBzZWN0b3JzKSAqLwotCXNlY3Rvcl90IGRldl9zdGFydDsJLyogWm9uZSBvZmZzZXQgaW4gcmVhbCBkZXYgKGluIHNlY3RvcnMpICovCi0Jc2VjdG9yX3Qgc2VjdG9yczsJLyogWm9uZSBzaXplIGluIHNlY3RvcnMgKi8KLQlpbnQgbmJfZGV2OwkJLyogIyBvZiBkZXZpY2VzIGF0dGFjaGVkIHRvIHRoZSB6b25lICovCi0JbWRrX3JkZXZfdCAqKmRldjsJLyogRGV2aWNlcyBhdHRhY2hlZCB0byB0aGUgem9uZSAqLwotfTsKLQotc3RydWN0IHJhaWQwX3ByaXZhdGVfZGF0YQotewotCXN0cnVjdCBzdHJpcF96b25lICoqaGFzaF90YWJsZTsgLyogVGFibGUgb2YgaW5kZXhlcyBpbnRvIHN0cmlwX3pvbmUgKi8KLQlzdHJ1Y3Qgc3RyaXBfem9uZSAqc3RyaXBfem9uZTsKLQltZGtfcmRldl90ICoqZGV2bGlzdDsgLyogbGlzdHMgb2YgcmRldnMsIHBvaW50ZWQgdG8gYnkgc3RyaXBfem9uZS0+ZGV2ICovCi0JaW50IG5yX3N0cmlwX3pvbmVzOwotCi0Jc2VjdG9yX3Qgc3BhY2luZzsKLQlpbnQgc2VjdG9yX3NoaWZ0OyAvKiBzaGlmdCB0aGlzIGJlZm9yZSBkaXZpZGUgYnkgc3BhY2luZyAqLwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgcmFpZDBfcHJpdmF0ZV9kYXRhIHJhaWQwX2NvbmZfdDsKLQotI2RlZmluZSBtZGRldl90b19jb25mKG1kZGV2KSAoKHJhaWQwX2NvbmZfdCAqKSBtZGRldi0+cHJpdmF0ZSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTliYTdjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9yYWlkMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLSNpZm5kZWYgX1JBSUQxX0gKLSNkZWZpbmUgX1JBSUQxX0gKLQotI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgbWlycm9yX2luZm8gbWlycm9yX2luZm9fdDsKLQotc3RydWN0IG1pcnJvcl9pbmZvIHsKLQltZGtfcmRldl90CSpyZGV2OwotCXNlY3Rvcl90CWhlYWRfcG9zaXRpb247Ci19OwotCi0vKgotICogbWVtb3J5IHBvb2xzIG5lZWQgYSBwb2ludGVyIHRvIHRoZSBtZGRldiwgc28gdGhleSBjYW4gZm9yY2UgYW4gdW5wbHVnCi0gKiB3aGVuIG1lbW9yeSBpcyB0aWdodCwgYW5kIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBkcml2ZXMgdGhhdCB0aGUKLSAqIHBvb2wgd2FzIGFsbG9jYXRlZCBmb3IsIHNvIHRoZXkga25vdyBob3cgbXVjaCB0byBhbGxvY2F0ZSBhbmQgZnJlZS4KLSAqIG1kZGV2LT5yYWlkX2Rpc2tzIGNhbm5vdCBiZSB1c2VkLCBhcyBpdCBjYW4gY2hhbmdlIHdoaWxlIGEgcG9vbCBpcyBhY3RpdmUKLSAqIFRoZXNlIHR3byBkYXR1bXMgYXJlIHN0b3JlZCBpbiBhIGttYWxsb2NlZCBzdHJ1Y3QuCi0gKi8KLQotc3RydWN0IHBvb2xfaW5mbyB7Ci0JbWRkZXZfdCAqbWRkZXY7Ci0JaW50CXJhaWRfZGlza3M7Ci19OwotCi0KLXR5cGVkZWYgc3RydWN0IHIxYmlvX3MgcjFiaW9fdDsKLQotc3RydWN0IHIxX3ByaXZhdGVfZGF0YV9zIHsKLQltZGRldl90CQkJKm1kZGV2OwotCW1pcnJvcl9pbmZvX3QJCSptaXJyb3JzOwotCWludAkJCXJhaWRfZGlza3M7Ci0JaW50CQkJbGFzdF91c2VkOwotCXNlY3Rvcl90CQluZXh0X3NlcV9zZWN0OwotCXNwaW5sb2NrX3QJCWRldmljZV9sb2NrOwotCi0Jc3RydWN0IGxpc3RfaGVhZAlyZXRyeV9saXN0OwotCS8qIHF1ZXVlIHBlbmRpbmcgd3JpdGVzIGFuZCBzdWJtaXQgdGhlbSBvbiB1bnBsdWcgKi8KLQlzdHJ1Y3QgYmlvX2xpc3QJCXBlbmRpbmdfYmlvX2xpc3Q7Ci0JLyogcXVldWUgb2Ygd3JpdGVzIHRoYXQgaGF2ZSBiZWVuIHVucGx1Z2dlZCAqLwotCXN0cnVjdCBiaW9fbGlzdAkJZmx1c2hpbmdfYmlvX2xpc3Q7Ci0KLQkvKiBmb3IgdXNlIHdoZW4gc3luY2luZyBtaXJyb3JzOiAqLwotCi0Jc3BpbmxvY2tfdAkJcmVzeW5jX2xvY2s7Ci0JaW50CQkJbnJfcGVuZGluZzsKLQlpbnQJCQlucl93YWl0aW5nOwotCWludAkJCW5yX3F1ZXVlZDsKLQlpbnQJCQliYXJyaWVyOwotCXNlY3Rvcl90CQluZXh0X3Jlc3luYzsKLQlpbnQJCQlmdWxsc3luYzsgIC8qIHNldCB0byAxIGlmIGEgZnVsbCBzeW5jIGlzIG5lZWRlZCwKLQkJCQkJICAgICogKGZyZXNoIGRldmljZSBhZGRlZCkuCi0JCQkJCSAgICAqIENsZWFyZWQgd2hlbiBhIHN5bmMgY29tcGxldGVzLgotCQkJCQkgICAgKi8KLQotCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfYmFycmllcjsKLQotCXN0cnVjdCBwb29sX2luZm8JKnBvb2xpbmZvOwotCi0Jc3RydWN0IHBhZ2UJCSp0bXBwYWdlOwotCi0JbWVtcG9vbF90ICpyMWJpb19wb29sOwotCW1lbXBvb2xfdCAqcjFidWZfcG9vbDsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHIxX3ByaXZhdGVfZGF0YV9zIGNvbmZfdDsKLQotLyoKLSAqIHRoaXMgaXMgdGhlIG9ubHkgcG9pbnQgaW4gdGhlIFJBSUQgY29kZSB3aGVyZSB3ZSB2aW9sYXRlCi0gKiBDIHR5cGUgc2FmZXR5LiBtZGRldi0+cHJpdmF0ZSBpcyBhbiAnb3BhcXVlJyBwb2ludGVyLgotICovCi0jZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgoY29uZl90ICopIG1kZGV2LT5wcml2YXRlKQotCi0vKgotICogdGhpcyBpcyBvdXIgJ3ByaXZhdGUnIFJBSUQxIGJpby4KLSAqCi0gKiBpdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGtpbmQgb2YgSU8gb3BlcmF0aW9ucyB3ZXJlIHN0YXJ0ZWQKLSAqIGZvciB0aGlzIFJBSUQxIG9wZXJhdGlvbiwgYW5kIGFib3V0IHRoZWlyIHN0YXR1czoKLSAqLwotCi1zdHJ1Y3QgcjFiaW9fcyB7Ci0JYXRvbWljX3QJCXJlbWFpbmluZzsgLyogJ2hhdmUgd2UgZmluaXNoZWQnIGNvdW50LAotCQkJCQkgICAgKiB1c2VkIGZyb20gSVJRIGhhbmRsZXJzCi0JCQkJCSAgICAqLwotCWF0b21pY190CQliZWhpbmRfcmVtYWluaW5nOyAvKiBudW1iZXIgb2Ygd3JpdGUtYmVoaW5kIGlvcyByZW1haW5pbmcKLQkJCQkJCSAqIGluIHRoaXMgQmVoaW5kSU8gcmVxdWVzdAotCQkJCQkJICovCi0Jc2VjdG9yX3QJCXNlY3RvcjsKLQlpbnQJCQlzZWN0b3JzOwotCXVuc2lnbmVkIGxvbmcJCXN0YXRlOwotCW1kZGV2X3QJCQkqbWRkZXY7Ci0JLyoKLQkgKiBvcmlnaW5hbCBiaW8gZ29pbmcgdG8gL2Rldi9tZHgKLQkgKi8KLQlzdHJ1Y3QgYmlvCQkqbWFzdGVyX2JpbzsKLQkvKgotCSAqIGlmIHRoZSBJTyBpcyBpbiBSRUFEIGRpcmVjdGlvbiwgdGhlbiB0aGlzIGlzIHdoZXJlIHdlIHJlYWQKLQkgKi8KLQlpbnQJCQlyZWFkX2Rpc2s7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkCXJldHJ5X2xpc3Q7Ci0Jc3RydWN0IGJpdG1hcF91cGRhdGUJKmJpdG1hcF91cGRhdGU7Ci0JLyoKLQkgKiBpZiB0aGUgSU8gaXMgaW4gV1JJVEUgZGlyZWN0aW9uLCB0aGVuIG11bHRpcGxlIGJpb3MgYXJlIHVzZWQuCi0JICogV2UgY2hvb3NlIHRoZSBudW1iZXIgd2hlbiB0aGV5IGFyZSBhbGxvY2F0ZWQuCi0JICovCi0Jc3RydWN0IGJpbwkJKmJpb3NbMF07Ci0JLyogRE8gTk9UIFBVVCBBTlkgTkVXIEZJRUxEUyBIRVJFIC0gYmlvcyBhcnJheSBpcyBjb250aWd1b3VzbHkgYWxsb2NlZCovCi19OwotCi0vKiB3aGVuIHdlIGdldCBhIHJlYWQgZXJyb3Igb24gYSByZWFkLW9ubHkgYXJyYXksIHdlIHJlZGlyZWN0IHRvIGFub3RoZXIKLSAqIGRldmljZSB3aXRob3V0IGZhaWxpbmcgdGhlIGZpcnN0IGRldmljZSwgb3IgdHJ5aW5nIHRvIG92ZXItd3JpdGUgdG8KLSAqIGNvcnJlY3QgdGhlIHJlYWQgZXJyb3IuICBUbyBrZWVwIHRyYWNrIG9mIGJhZCBibG9ja3Mgb24gYSBwZXItYmlvCi0gKiBsZXZlbCwgd2Ugc3RvcmUgSU9fQkxPQ0tFRCBpbiB0aGUgYXBwcm9wcmlhdGUgJ2Jpb3MnIHBvaW50ZXIKLSAqLwotI2RlZmluZSBJT19CTE9DS0VEICgoc3RydWN0IGJpbyopMSkKLQotLyogYml0cyBmb3IgcjFiaW8uc3RhdGUgKi8KLSNkZWZpbmUJUjFCSU9fVXB0b2RhdGUJMAotI2RlZmluZQlSMUJJT19Jc1N5bmMJMQotI2RlZmluZQlSMUJJT19EZWdyYWRlZAkyCi0jZGVmaW5lCVIxQklPX0JlaGluZElPCTMKLSNkZWZpbmUJUjFCSU9fQmFycmllcgk0Ci0jZGVmaW5lIFIxQklPX0JhcnJpZXJSZXRyeSA1Ci0vKiBGb3Igd3JpdGUtYmVoaW5kIHJlcXVlc3RzLCB3ZSBjYWxsIGJpX2VuZF9pbyB3aGVuCi0gKiB0aGUgbGFzdCBub24td3JpdGUtYmVoaW5kIGRldmljZSBjb21wbGV0ZXMsIHByb3ZpZGluZwotICogYW55IHdyaXRlIHdhcyBzdWNjZXNzZnVsLiAgT3RoZXJ3aXNlIHdlIGNhbGwgd2hlbgotICogYW55IHdyaXRlLWJlaGluZCB3cml0ZSBzdWNjZWVkcywgb3RoZXJ3aXNlIHdlIGNhbGwKLSAqIHdpdGggZmFpbHVyZSB3aGVuIGxhc3Qgd3JpdGUgY29tcGxldGVzIChhbmQgYWxsIGZhaWxlZCkuCi0gKiBSZWNvcmQgdGhhdCBiaV9lbmRfaW8gd2FzIGNhbGxlZCB3aXRoIHRoaXMgZmxhZy4uLgotICovCi0jZGVmaW5lCVIxQklPX1JldHVybmVkIDYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEwLmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDEwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MDkxY2YuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQxMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLSNpZm5kZWYgX1JBSUQxMF9ICi0jZGVmaW5lIF9SQUlEMTBfSAotCi0jaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgotCi10eXBlZGVmIHN0cnVjdCBtaXJyb3JfaW5mbyBtaXJyb3JfaW5mb190OwotCi1zdHJ1Y3QgbWlycm9yX2luZm8gewotCW1ka19yZGV2X3QJKnJkZXY7Ci0Jc2VjdG9yX3QJaGVhZF9wb3NpdGlvbjsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IHIxMGJpb19zIHIxMGJpb190OwotCi1zdHJ1Y3QgcjEwX3ByaXZhdGVfZGF0YV9zIHsKLQltZGRldl90CQkJKm1kZGV2OwotCW1pcnJvcl9pbmZvX3QJCSptaXJyb3JzOwotCWludAkJCXJhaWRfZGlza3M7Ci0Jc3BpbmxvY2tfdAkJZGV2aWNlX2xvY2s7Ci0KLQkvKiBnZW9tZXRyeSAqLwotCWludAkJCW5lYXJfY29waWVzOyAgLyogbnVtYmVyIG9mIGNvcGllcyBsYXllZCBvdXQgcmFpZDAgc3R5bGUgKi8KLQlpbnQgCQkJZmFyX2NvcGllczsgICAvKiBudW1iZXIgb2YgY29waWVzIGxheWVkIG91dAotCQkJCQkgICAgICAgKiBhdCBsYXJnZSBzdHJpZGVzIGFjcm9zcyBkcml2ZXMKLQkJCQkJICAgICAgICovCi0JaW50CQkJZmFyX29mZnNldDsgICAvKiBmYXJfY29waWVzIGFyZSBvZmZzZXQgYnkgMSBzdHJpcGUKLQkJCQkJICAgICAgICogaW5zdGVhZCBvZiBtYW55Ci0JCQkJCSAgICAgICAqLwotCWludAkJCWNvcGllczsJICAgICAgLyogbmVhcl9jb3BpZXMgKiBmYXJfY29waWVzLgotCQkJCQkgICAgICAgKiBtdXN0IGJlIDw9IHJhaWRfZGlza3MKLQkJCQkJICAgICAgICovCi0Jc2VjdG9yX3QJCXN0cmlkZTsJICAgICAgLyogZGlzdGFuY2UgYmV0d2VlbiBmYXIgY29waWVzLgotCQkJCQkgICAgICAgKiBUaGlzIGlzIHNpemUgLyBmYXJfY29waWVzIHVubGVzcwotCQkJCQkgICAgICAgKiBmYXJfb2Zmc2V0LCBpbiB3aGljaCBjYXNlIGl0IGlzCi0JCQkJCSAgICAgICAqIDEgc3RyaXBlLgotCQkJCQkgICAgICAgKi8KLQotCWludCBjaHVua19zaGlmdDsgLyogc2hpZnQgZnJvbSBjaHVua3MgdG8gc2VjdG9ycyAqLwotCXNlY3Rvcl90IGNodW5rX21hc2s7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkCXJldHJ5X2xpc3Q7Ci0JLyogcXVldWUgcGVuZGluZyB3cml0ZXMgYW5kIHN1Ym1pdCB0aGVtIG9uIHVucGx1ZyAqLwotCXN0cnVjdCBiaW9fbGlzdAkJcGVuZGluZ19iaW9fbGlzdDsKLQotCi0Jc3BpbmxvY2tfdAkJcmVzeW5jX2xvY2s7Ci0JaW50IG5yX3BlbmRpbmc7Ci0JaW50IG5yX3dhaXRpbmc7Ci0JaW50IG5yX3F1ZXVlZDsKLQlpbnQgYmFycmllcjsKLQlzZWN0b3JfdAkJbmV4dF9yZXN5bmM7Ci0JaW50CQkJZnVsbHN5bmM7ICAvKiBzZXQgdG8gMSBpZiBhIGZ1bGwgc3luYyBpcyBuZWVkZWQsCi0JCQkJCSAgICAqIChmcmVzaCBkZXZpY2UgYWRkZWQpLgotCQkJCQkgICAgKiBDbGVhcmVkIHdoZW4gYSBzeW5jIGNvbXBsZXRlcy4KLQkJCQkJICAgICovCi0KLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0X2JhcnJpZXI7Ci0KLQltZW1wb29sX3QgKnIxMGJpb19wb29sOwotCW1lbXBvb2xfdCAqcjEwYnVmX3Bvb2w7Ci0Jc3RydWN0IHBhZ2UJCSp0bXBwYWdlOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgcjEwX3ByaXZhdGVfZGF0YV9zIGNvbmZfdDsKLQotLyoKLSAqIHRoaXMgaXMgdGhlIG9ubHkgcG9pbnQgaW4gdGhlIFJBSUQgY29kZSB3aGVyZSB3ZSB2aW9sYXRlCi0gKiBDIHR5cGUgc2FmZXR5LiBtZGRldi0+cHJpdmF0ZSBpcyBhbiAnb3BhcXVlJyBwb2ludGVyLgotICovCi0jZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgoY29uZl90ICopIG1kZGV2LT5wcml2YXRlKQotCi0vKgotICogdGhpcyBpcyBvdXIgJ3ByaXZhdGUnIFJBSUQxMCBiaW8uCi0gKgotICogaXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBraW5kIG9mIElPIG9wZXJhdGlvbnMgd2VyZSBzdGFydGVkCi0gKiBmb3IgdGhpcyBSQUlEMTAgb3BlcmF0aW9uLCBhbmQgYWJvdXQgdGhlaXIgc3RhdHVzOgotICovCi0KLXN0cnVjdCByMTBiaW9fcyB7Ci0JYXRvbWljX3QJCXJlbWFpbmluZzsgLyogJ2hhdmUgd2UgZmluaXNoZWQnIGNvdW50LAotCQkJCQkgICAgKiB1c2VkIGZyb20gSVJRIGhhbmRsZXJzCi0JCQkJCSAgICAqLwotCXNlY3Rvcl90CQlzZWN0b3I7CS8qIHZpcnR1YWwgc2VjdG9yIG51bWJlciAqLwotCWludAkJCXNlY3RvcnM7Ci0JdW5zaWduZWQgbG9uZwkJc3RhdGU7Ci0JbWRkZXZfdAkJCSptZGRldjsKLQkvKgotCSAqIG9yaWdpbmFsIGJpbyBnb2luZyB0byAvZGV2L21keAotCSAqLwotCXN0cnVjdCBiaW8JCSptYXN0ZXJfYmlvOwotCS8qCi0JICogaWYgdGhlIElPIGlzIGluIFJFQUQgZGlyZWN0aW9uLCB0aGVuIHRoaXMgaXMgd2hlcmUgd2UgcmVhZAotCSAqLwotCWludAkJCXJlYWRfc2xvdDsKLQotCXN0cnVjdCBsaXN0X2hlYWQJcmV0cnlfbGlzdDsKLQkvKgotCSAqIGlmIHRoZSBJTyBpcyBpbiBXUklURSBkaXJlY3Rpb24sIHRoZW4gbXVsdGlwbGUgYmlvcyBhcmUgdXNlZCwKLQkgKiBvbmUgZm9yIGVhY2ggY29weS4KLQkgKiBXaGVuIHJlc3luY2luZyB3ZSBhbHNvIHVzZSBvbmUgZm9yIGVhY2ggY29weS4KLQkgKiBXaGVuIHJlY29uc3RydWN0aW5nLCB3ZSB1c2UgMiBiaW9zLCBvbmUgZm9yIHJlYWQsIG9uZSBmb3Igd3JpdGUuCi0JICogV2UgY2hvb3NlIHRoZSBudW1iZXIgd2hlbiB0aGV5IGFyZSBhbGxvY2F0ZWQuCi0JICovCi0Jc3RydWN0IHsKLQkJc3RydWN0IGJpbwkJKmJpbzsKLQkJc2VjdG9yX3QgYWRkcjsKLQkJaW50IGRldm51bTsKLQl9IGRldnNbMF07Ci19OwotCi0vKiB3aGVuIHdlIGdldCBhIHJlYWQgZXJyb3Igb24gYSByZWFkLW9ubHkgYXJyYXksIHdlIHJlZGlyZWN0IHRvIGFub3RoZXIKLSAqIGRldmljZSB3aXRob3V0IGZhaWxpbmcgdGhlIGZpcnN0IGRldmljZSwgb3IgdHJ5aW5nIHRvIG92ZXItd3JpdGUgdG8KLSAqIGNvcnJlY3QgdGhlIHJlYWQgZXJyb3IuICBUbyBrZWVwIHRyYWNrIG9mIGJhZCBibG9ja3Mgb24gYSBwZXItYmlvCi0gKiBsZXZlbCwgd2Ugc3RvcmUgSU9fQkxPQ0tFRCBpbiB0aGUgYXBwcm9wcmlhdGUgJ2Jpb3MnIHBvaW50ZXIKLSAqLwotI2RlZmluZSBJT19CTE9DS0VEICgoc3RydWN0IGJpbyopMSkKLQotLyogYml0cyBmb3IgcjEwYmlvLnN0YXRlICovCi0jZGVmaW5lCVIxMEJJT19VcHRvZGF0ZQkwCi0jZGVmaW5lCVIxMEJJT19Jc1N5bmMJMQotI2RlZmluZQlSMTBCSU9fSXNSZWNvdmVyIDIKLSNkZWZpbmUJUjEwQklPX0RlZ3JhZGVkIDMKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3JhaWQ1LmggYi9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IyNjcyNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhaWQvcmFpZDUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwMiArMCwwIEBACi0jaWZuZGVmIF9SQUlENV9ICi0jZGVmaW5lIF9SQUlENV9ICi0KLSNpbmNsdWRlIDxsaW51eC9yYWlkL21kLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFpZC94b3IuaD4KLQotLyoKLSAqCi0gKiBFYWNoIHN0cmlwZSBjb250YWlucyBvbmUgYnVmZmVyIHBlciBkaXNjLiAgRWFjaCBidWZmZXIgY2FuIGJlIGluCi0gKiBvbmUgb2YgYSBudW1iZXIgb2Ygc3RhdGVzIHN0b3JlZCBpbiAiZmxhZ3MiLiAgQ2hhbmdlcyBiZXR3ZWVuCi0gKiB0aGVzZSBzdGF0ZXMgaGFwcGVuICphbG1vc3QqIGV4Y2x1c2l2ZWx5IHVuZGVyIGEgcGVyLXN0cmlwZQotICogc3BpbmxvY2suICBTb21lIHZlcnkgc3BlY2lmaWMgY2hhbmdlcyBjYW4gaGFwcGVuIGluIGJpX2VuZF9pbywgYW5kCi0gKiB0aGVzZSBhcmUgbm90IHByb3RlY3RlZCBieSB0aGUgc3BpbiBsb2NrLgotICoKLSAqIFRoZSBmbGFnIGJpdHMgdGhhdCBhcmUgdXNlZCB0byByZXByZXNlbnQgdGhlc2Ugc3RhdGVzIGFyZToKLSAqICAgUjVfVVBUT0RBVEUgYW5kIFI1X0xPQ0tFRAotICoKLSAqIFN0YXRlIEVtcHR5ID09ICFVUFRPREFURSwgIUxPQ0sKLSAqICAgICAgICBXZSBoYXZlIG5vIGRhdGEsIGFuZCB0aGVyZSBpcyBubyBhY3RpdmUgcmVxdWVzdAotICogU3RhdGUgV2FudCA9PSAhVVBUT0RBVEUsIExPQ0sKLSAqICAgICAgICBBIHJlYWQgcmVxdWVzdCBpcyBiZWluZyBzdWJtaXR0ZWQgZm9yIHRoaXMgYmxvY2sKLSAqIFN0YXRlIERpcnR5ID09IFVQVE9EQVRFLCBMT0NLCi0gKiAgICAgICAgU29tZSBuZXcgZGF0YSBpcyBpbiB0aGlzIGJ1ZmZlciwgYW5kIGl0IGlzIGJlaW5nIHdyaXR0ZW4gb3V0Ci0gKiBTdGF0ZSBDbGVhbiA9PSBVUFRPREFURSwgIUxPQ0sKLSAqICAgICAgICBXZSBoYXZlIHZhbGlkIGRhdGEgd2hpY2ggaXMgdGhlIHNhbWUgYXMgb24gZGlzYwotICoKLSAqIFRoZSBwb3NzaWJsZSBzdGF0ZSB0cmFuc2l0aW9ucyBhcmU6Ci0gKgotICogIEVtcHR5IC0+IFdhbnQgICAtIG9uIHJlYWQgb3Igd3JpdGUgdG8gZ2V0IG9sZCBkYXRhIGZvciAgcGFyaXR5IGNhbGMKLSAqICBFbXB0eSAtPiBEaXJ0eSAgLSBvbiBjb21wdXRlX3Bhcml0eSB0byBzYXRpc2Z5IHdyaXRlL3N5bmMgcmVxdWVzdC4oUkVDT05TVFJVQ1RfV1JJVEUpCi0gKiAgRW1wdHkgLT4gQ2xlYW4gIC0gb24gY29tcHV0ZV9ibG9jayB3aGVuIGNvbXB1dGluZyBhIGJsb2NrIGZvciBmYWlsZWQgZHJpdmUKLSAqICBXYW50ICAtPiBFbXB0eSAgLSBvbiBmYWlsZWQgcmVhZAotICogIFdhbnQgIC0+IENsZWFuICAtIG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiByZWFkIHJlcXVlc3QKLSAqICBEaXJ0eSAtPiBDbGVhbiAgLSBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2Ygd3JpdGUgcmVxdWVzdAotICogIERpcnR5IC0+IENsZWFuICAtIG9uIGZhaWxlZCB3cml0ZQotICogIENsZWFuIC0+IERpcnR5ICAtIG9uIGNvbXB1dGVfcGFyaXR5IHRvIHNhdGlzZnkgd3JpdGUvc3luYyAoUkVDT05TVFJVQ1Qgb3IgUk1XKQotICoKLSAqIFRoZSBXYW50LT5FbXB0eSwgV2FudC0+Q2xlYW4sIERpcnR5LT5DbGVhbiwgdHJhbnNpdGlvbnMKLSAqIGFsbCBoYXBwZW4gaW4gYl9lbmRfaW8gYXQgaW50ZXJydXB0IHRpbWUuCi0gKiBFYWNoIHNldHMgdGhlIFVwdG9kYXRlIGJpdCBiZWZvcmUgcmVsZWFzaW5nIHRoZSBMb2NrIGJpdC4KLSAqIFRoaXMgbGVhdmVzIG9uZSBtdWx0aS1zdGFnZSB0cmFuc2l0aW9uOgotICogICAgV2FudC0+RGlydHktPkNsZWFuCi0gKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSB0aGlua2luZyB0aGF0IGEgQ2xlYW4gYnVmZmVyIGlzIGFjdHVhbGx5IGRpcnR5Ci0gKiB3aWxsIGF0IHdvcnN0IGRlbGF5IHNvbWUgYWN0aW9uLCBhbmQgdGhlIHN0cmlwZSB3aWxsIGJlIHNjaGVkdWxlZAotICogZm9yIGF0dGVudGlvbiBhZnRlciB0aGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS4KLSAqCi0gKiBUaGVyZSBpcyBvbmUgcG9zc2liaWxpdHkgdGhhdCBpcyBub3QgY292ZXJlZCBieSB0aGVzZSBzdGF0ZXMuICBUaGF0Ci0gKiBpcyBpZiBvbmUgZHJpdmUgaGFzIGZhaWxlZCBhbmQgdGhlcmUgaXMgYSBzcGFyZSBiZWluZyByZWJ1aWx0LiAgV2UKLSAqIGNhbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gYSBjbGVhbiBibG9jayB0aGF0IGhhcyBiZWVuIGdlbmVyYXRlZAotICogZnJvbSBwYXJpdHkgY2FsY3VsYXRpb25zLCBhbmQgYSBjbGVhbiBibG9jayB0aGF0IGhhcyBiZWVuCi0gKiBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byB0aGUgc3BhcmUgKCBvciB0byBwYXJpdHkgd2hlbiByZXN5bmNpbmcpLgotICogVG8gZGlzdGluZ3VzaCB0aGVzZSBzdGF0ZXMgd2UgaGF2ZSBhIHN0cmlwZSBiaXQgU1RSSVBFX0lOU1lOQyB0aGF0Ci0gKiBpcyBzZXQgd2hlbmV2ZXIgYSB3cml0ZSBpcyBzY2hlZHVsZWQgdG8gdGhlIHNwYXJlLCBvciB0byB0aGUgcGFyaXR5Ci0gKiBkaXNjIGlmIHRoZXJlIGlzIG5vIHNwYXJlLiAgQSBzeW5jIHJlcXVlc3QgY2xlYXJzIHRoaXMgYml0LCBhbmQKLSAqIHdoZW4gd2UgZmluZCBpdCBzZXQgd2l0aCBubyBidWZmZXJzIGxvY2tlZCwgd2Uga25vdyB0aGUgc3luYyBpcwotICogY29tcGxldGUuCi0gKgotICogQnVmZmVycyBmb3IgdGhlIG1kIGRldmljZSB0aGF0IGFycml2ZSB2aWEgbWFrZV9yZXF1ZXN0IGFyZSBhdHRhY2hlZAotICogdG8gdGhlIGFwcHJvcHJpYXRlIHN0cmlwZSBpbiBvbmUgb2YgdHdvIGxpc3RzIGxpbmtlZCBvbiBiX3JlcW5leHQuCi0gKiBPbmUgbGlzdCAoYmhfcmVhZCkgZm9yIHJlYWQgcmVxdWVzdHMsIG9uZSAoYmhfd3JpdGUpIGZvciB3cml0ZS4KLSAqIFRoZXJlIHNob3VsZCBuZXZlciBiZSBtb3JlIHRoYW4gb25lIGJ1ZmZlciBvbiB0aGUgdHdvIGxpc3RzCi0gKiB0b2dldGhlciwgYnV0IHdlIGFyZSBub3QgZ3VhcmFudGVlZCBvZiB0aGF0IHNvIHdlIGFsbG93IGZvciBtb3JlLgotICoKLSAqIElmIGEgYnVmZmVyIGlzIG9uIHRoZSByZWFkIGxpc3Qgd2hlbiB0aGUgYXNzb2NpYXRlZCBjYWNoZSBidWZmZXIgaXMKLSAqIFVwdG9kYXRlLCB0aGUgZGF0YSBpcyBjb3BpZWQgaW50byB0aGUgcmVhZCBidWZmZXIgYW5kIGl0J3MgYl9lbmRfaW8KLSAqIHJvdXRpbmUgaXMgY2FsbGVkLiAgVGhpcyBtYXkgaGFwcGVuIGluIHRoZSBlbmRfcmVxdWVzdCByb3V0aW5lIG9ubHkKLSAqIGlmIHRoZSBidWZmZXIgaGFzIGp1c3Qgc3VjY2Vzc2Z1bGx5IGJlZW4gcmVhZC4gIGVuZF9yZXF1ZXN0IHNob3VsZAotICogcmVtb3ZlIHRoZSBidWZmZXJzIGZyb20gdGhlIGxpc3QgYW5kIHRoZW4gc2V0IHRoZSBVcHRvZGF0ZSBiaXQgb24KLSAqIHRoZSBidWZmZXIuICBPdGhlciB0aHJlYWRzIG1heSBkbyB0aGlzIG9ubHkgaWYgdGhleSBmaXJzdCBjaGVjawotICogdGhhdCB0aGUgVXB0b2RhdGUgYml0IGlzIHNldC4gIE9uY2UgdGhleSBoYXZlIGNoZWNrZWQgdGhhdCB0aGV5IG1heQotICogdGFrZSBidWZmZXJzIG9mZiB0aGUgcmVhZCBxdWV1ZS4KLSAqCi0gKiBXaGVuIGEgYnVmZmVyIG9uIHRoZSB3cml0ZSBsaXN0IGlzIGNvbW1pdHRlZCBmb3Igd3JpdGUgaXQgaXMgY29waWVkCi0gKiBpbnRvIHRoZSBjYWNoZSBidWZmZXIsIHdoaWNoIGlzIHRoZW4gbWFya2VkIGRpcnR5LCBhbmQgbW92ZWQgb250byBhCi0gKiB0aGlyZCBsaXN0LCB0aGUgd3JpdHRlbiBsaXN0IChiaF93cml0dGVuKS4gIE9uY2UgYm90aCB0aGUgcGFyaXR5Ci0gKiBibG9jayBhbmQgdGhlIGNhY2hlZCBidWZmZXIgYXJlIHN1Y2Nlc3NmdWxseSB3cml0dGVuLCBhbnkgYnVmZmVyIG9uCi0gKiBhIHdyaXR0ZW4gbGlzdCBjYW4gYmUgcmV0dXJuZWQgd2l0aCBiX2VuZF9pby4KLSAqCi0gKiBUaGUgd3JpdGUgbGlzdCBhbmQgcmVhZCBsaXN0IGJvdGggYWN0IGFzIGZpZm9zLiAgVGhlIHJlYWQgbGlzdCBpcwotICogcHJvdGVjdGVkIGJ5IHRoZSBkZXZpY2VfbG9jay4gIFRoZSB3cml0ZSBhbmQgd3JpdHRlbiBsaXN0cyBhcmUKLSAqIHByb3RlY3RlZCBieSB0aGUgc3RyaXBlIGxvY2suICBUaGUgZGV2aWNlX2xvY2ssIHdoaWNoIGNhbiBiZQotICogY2xhaW1lZCB3aGlsZSB0aGUgc3RpcGUgbG9jayBpcyBoZWxkLCBpcyBvbmx5IGZvciBsaXN0Ci0gKiBtYW5pcHVsYXRpb25zIGFuZCB3aWxsIG9ubHkgYmUgaGVsZCBmb3IgYSB2ZXJ5IHNob3J0IHRpbWUuICBJdCBjYW4KLSAqIGJlIGNsYWltZWQgZnJvbSBpbnRlcnJ1cHRzLgotICoKLSAqCi0gKiBTdHJpcGVzIGluIHRoZSBzdHJpcGUgY2FjaGUgY2FuIGJlIG9uIG9uZSBvZiB0d28gbGlzdHMgKG9yIG9uCi0gKiBuZWl0aGVyKS4gIFRoZSAiaW5hY3RpdmVfbGlzdCIgY29udGFpbnMgc3RyaXBlcyB3aGljaCBhcmUgbm90Ci0gKiBjdXJyZW50bHkgYmVpbmcgdXNlZCBmb3IgYW55IHJlcXVlc3QuICBUaGV5IGNhbiBmcmVlbHkgYmUgcmV1c2VkCi0gKiBmb3IgYW5vdGhlciBzdHJpcGUuICBUaGUgImhhbmRsZV9saXN0IiBjb250YWlucyBzdHJpcGVzIHRoYXQgbmVlZAotICogdG8gYmUgaGFuZGxlZCBpbiBzb21lIHdheS4gIEJvdGggb2YgdGhlc2UgYXJlIGZpZm8gcXVldWVzLiAgRWFjaAotICogc3RyaXBlIGlzIGFsc28gKHBvdGVudGlhbGx5KSBsaW5rZWQgdG8gYSBoYXNoIGJ1Y2tldCBpbiB0aGUgaGFzaAotICogdGFibGUgc28gdGhhdCBpdCBjYW4gYmUgZm91bmQgYnkgc2VjdG9yIG51bWJlci4gIFN0cmlwZXMgdGhhdCBhcmUKLSAqIG5vdCBoYXNoZWQgbXVzdCBiZSBvbiB0aGUgaW5hY3RpdmVfbGlzdCwgYW5kIHdpbGwgbm9ybWFsbHkgYmUgYXQKLSAqIHRoZSBmcm9udC4gIEFsbCBzdHJpcGVzIHN0YXJ0IGxpZmUgdGhpcyB3YXkuCi0gKgotICogVGhlIGluYWN0aXZlX2xpc3QsIGhhbmRsZV9saXN0IGFuZCBoYXNoIGJ1Y2tldCBsaXN0cyBhcmUgYWxsIHByb3RlY3RlZCBieSB0aGUKLSAqIGRldmljZV9sb2NrLgotICogIC0gc3RyaXBlcyBvbiB0aGUgaW5hY3RpdmVfbGlzdCBuZXZlciBoYXZlIHRoZWlyIHN0cmlwZV9sb2NrIGhlbGQuCi0gKiAgLSBzdHJpcGVzIGhhdmUgYSByZWZlcmVuY2UgY291bnRlci4gSWYgY291bnQ9PTAsIHRoZXkgYXJlIG9uIGEgbGlzdC4KLSAqICAtIElmIGEgc3RyaXBlIG1pZ2h0IG5lZWQgaGFuZGxpbmcsIFNUUklQRV9IQU5ETEUgaXMgc2V0LgotICogIC0gV2hlbiByZWZjb3VudCByZWFjaGVzIHplcm8sIHRoZW4gaWYgU1RSSVBFX0hBTkRMRSBpdCBpcyBwdXQgb24KLSAqICAgIGhhbmRsZV9saXN0IGVsc2UgaW5hY3RpdmVfbGlzdAotICoKLSAqIFRoaXMsIGNvbWJpbmVkIHdpdGggdGhlIGZhY3QgdGhhdCBTVFJJUEVfSEFORExFIGlzIG9ubHkgZXZlcgotICogY2xlYXJlZCB3aGlsZSBhIHN0cmlwZSBoYXMgYSBub24temVybyBjb3VudCBtZWFucyB0aGF0IGlmIHRoZQotICogcmVmY291bnQgaXMgMCBhbmQgU1RSSVBFX0hBTkRMRSBpcyBzZXQsIHRoZW4gaXQgaXMgb24gdGhlCi0gKiBoYW5kbGVfbGlzdCBhbmQgaWYgcmVjb3VudCBpcyAwIGFuZCBTVFJJUEVfSEFORExFIGlzIG5vdCBzZXQsIHRoZW4KLSAqIHRoZSBzdHJpcGUgaXMgb24gaW5hY3RpdmVfbGlzdC4KLSAqCi0gKiBUaGUgcG9zc2libGUgdHJhbnNpdGlvbnMgYXJlOgotICogIGFjdGl2YXRlIGFuIHVuaGFzaGVkL2luYWN0aXZlIHN0cmlwZSAoZ2V0X2FjdGl2ZV9zdHJpcGUoKSkKLSAqICAgICBsb2NrZGV2IGNoZWNrLWhhc2ggdW5saW5rLXN0cmlwZSBjbnQrKyBjbGVhbi1zdHJpcGUgaGFzaC1zdHJpcGUgdW5sb2NrZGV2Ci0gKiAgYWN0aXZhdGUgYSBoYXNoZWQsIHBvc3NpYmx5IGFjdGl2ZSBzdHJpcGUgKGdldF9hY3RpdmVfc3RyaXBlKCkpCi0gKiAgICAgbG9ja2RldiBjaGVjay1oYXNoIGlmKCFjbnQrKyl1bmxpbmstc3RyaXBlIHVubG9ja2RldgotICogIGF0dGFjaCBhIHJlcXVlc3QgdG8gYW4gYWN0aXZlIHN0cmlwZSAoYWRkX3N0cmlwZV9iaCgpKQotICogICAgIGxvY2tkZXYgYXR0YWNoLWJ1ZmZlciB1bmxvY2tkZXYKLSAqICBoYW5kbGUgYSBzdHJpcGUgKGhhbmRsZV9zdHJpcGUoKSkKLSAqICAgICBsb2Nrc3RyaXBlIGNsclNUUklQRV9IQU5ETEUgLi4uCi0gKgkJKGxvY2tkZXYgY2hlY2stYnVmZmVycyB1bmxvY2tkZXYpIC4uCi0gKgkJY2hhbmdlLXN0YXRlIC4uCi0gKgkJcmVjb3JkIGlvL29wcyBuZWVkZWQgdW5sb2Nrc3RyaXBlIHNjaGVkdWxlIGlvL29wcwotICogIHJlbGVhc2UgYW4gYWN0aXZlIHN0cmlwZSAocmVsZWFzZV9zdHJpcGUoKSkKLSAqICAgICBsb2NrZGV2IGlmICghLS1jbnQpIHsgaWYgIFNUUklQRV9IQU5ETEUsIGFkZCB0byBoYW5kbGVfbGlzdCBlbHNlIGFkZCB0byBpbmFjdGl2ZS1saXN0IH0gdW5sb2NrZGV2Ci0gKgotICogVGhlIHJlZmNvdW50IGNvdW50cyBlYWNoIHRocmVhZCB0aGF0IGhhdmUgYWN0aXZhdGVkIHRoZSBzdHJpcGUsCi0gKiBwbHVzIHJhaWQ1ZCBpZiBpdCBpcyBoYW5kbGluZyBpdCwgcGx1cyBvbmUgZm9yIGVhY2ggYWN0aXZlIHJlcXVlc3QKLSAqIG9uIGEgY2FjaGVkIGJ1ZmZlciwgYW5kIHBsdXMgb25lIGlmIHRoZSBzdHJpcGUgaXMgdW5kZXJnb2luZyBzdHJpcGUKLSAqIG9wZXJhdGlvbnMuCi0gKgotICogU3RyaXBlIG9wZXJhdGlvbnMgYXJlIHBlcmZvcm1lZCBvdXRzaWRlIHRoZSBzdHJpcGUgbG9jaywKLSAqIHRoZSBzdHJpcGUgb3BlcmF0aW9ucyBhcmU6Ci0gKiAtY29weWluZyBkYXRhIGJldHdlZW4gdGhlIHN0cmlwZSBjYWNoZSBhbmQgdXNlciBhcHBsaWNhdGlvbiBidWZmZXJzCi0gKiAtY29tcHV0aW5nIGJsb2NrcyB0byBzYXZlIGEgZGlzayBhY2Nlc3MsIG9yIHRvIHJlY292ZXIgYSBtaXNzaW5nIGJsb2NrCi0gKiAtdXBkYXRpbmcgdGhlIHBhcml0eSBvbiBhIHdyaXRlIG9wZXJhdGlvbiAocmVjb25zdHJ1Y3Qgd3JpdGUgYW5kCi0gKiAgcmVhZC1tb2RpZnktd3JpdGUpCi0gKiAtY2hlY2tpbmcgcGFyaXR5IGNvcnJlY3RuZXNzCi0gKiAtcnVubmluZyBpL28gdG8gZGlzawotICogVGhlc2Ugb3BlcmF0aW9ucyBhcmUgY2FycmllZCBvdXQgYnkgcmFpZDVfcnVuX29wcyB3aGljaCB1c2VzIHRoZSBhc3luY190eAotICogYXBpIHRvIChvcHRpb25hbGx5KSBvZmZsb2FkIG9wZXJhdGlvbnMgdG8gZGVkaWNhdGVkIGhhcmR3YXJlIGVuZ2luZXMuCi0gKiBXaGVuIHJlcXVlc3RpbmcgYW4gb3BlcmF0aW9uIGhhbmRsZV9zdHJpcGUgc2V0cyB0aGUgcGVuZGluZyBiaXQgZm9yIHRoZQotICogb3BlcmF0aW9uIGFuZCBpbmNyZW1lbnRzIHRoZSBjb3VudC4gIHJhaWQ1X3J1bl9vcHMgaXMgdGhlbiBydW4gd2hlbmV2ZXIKLSAqIHRoZSBjb3VudCBpcyBub24temVyby4KLSAqIFRoZXJlIGFyZSBzb21lIGNyaXRpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSBvcGVyYXRpb25zIHRoYXQgcHJldmVudCBzb21lCi0gKiBmcm9tIGJlaW5nIHJlcXVlc3RlZCB3aGlsZSBhbm90aGVyIGlzIGluIGZsaWdodC4KLSAqIDEvIFBhcml0eSBjaGVjayBvcGVyYXRpb25zIGRlc3Ryb3kgdGhlIGluIGNhY2hlIHZlcnNpb24gb2YgdGhlIHBhcml0eSBibG9jaywKLSAqICAgIHNvIHdlIHByZXZlbnQgcGFyaXR5IGRlcGVuZGVudCBvcGVyYXRpb25zIGxpa2Ugd3JpdGVzIGFuZCBjb21wdXRlX2Jsb2NrcwotICogICAgZnJvbSBzdGFydGluZyB3aGlsZSBhIGNoZWNrIGlzIGluIHByb2dyZXNzLiAgU29tZSBkbWEgZW5naW5lcyBjYW4gcGVyZm9ybQotICogICAgdGhlIGNoZWNrIHdpdGhvdXQgZGFtYWdpbmcgdGhlIHBhcml0eSBibG9jaywgaW4gdGhlc2UgY2FzZXMgdGhlIHBhcml0eQotICogICAgYmxvY2sgaXMgcmUtbWFya2VkIHVwIHRvIGRhdGUgKGFzc3VtaW5nIHRoZSBjaGVjayB3YXMgc3VjY2Vzc2Z1bCkgYW5kIGlzCi0gKiAgICBub3QgcmUtcmVhZCBmcm9tIGRpc2suCi0gKiAyLyBXaGVuIGEgd3JpdGUgb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCB3ZSBpbW1lZGlhdGVseSBsb2NrIHRoZSBhZmZlY3RlZAotICogICAgYmxvY2tzLCBhbmQgbWFyayB0aGVtIGFzIG5vdCB1cCB0byBkYXRlLiAgVGhpcyBjYXVzZXMgbmV3IHJlYWQgcmVxdWVzdHMKLSAqICAgIHRvIGJlIGhlbGQgb2ZmLCBhcyB3ZWxsIGFzIHBhcml0eSBjaGVja3MgYW5kIGNvbXB1dGUgYmxvY2sgb3BlcmF0aW9ucy4KLSAqIDMvIE9uY2UgYSBjb21wdXRlIGJsb2NrIG9wZXJhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQgaGFuZGxlX3N0cmlwZSB0cmVhdHMKLSAqICAgIHRoYXQgYmxvY2sgYXMgaWYgaXQgaXMgdXAgdG8gZGF0ZS4gIHJhaWQ1X3J1bl9vcHMgZ3VhcnVudGVlcyB0aGF0IGFueQotICogICAgb3BlcmF0aW9uIHRoYXQgaXMgZGVwZW5kZW50IG9uIHRoZSBjb21wdXRlIGJsb2NrIHJlc3VsdCBpcyBpbml0aWF0ZWQgYWZ0ZXIKLSAqICAgIHRoZSBjb21wdXRlIGJsb2NrIGNvbXBsZXRlcy4KLSAqLwotCi0vKgotICogT3BlcmF0aW9ucyBzdGF0ZSAtIGludGVybWVkaWF0ZSBzdGF0ZXMgdGhhdCBhcmUgdmlzaWJsZSBvdXRzaWRlIG9mIHNoLT5sb2NrCi0gKiBJbiBnZW5lcmFsIF9pZGxlIGluZGljYXRlcyBub3RoaW5nIGlzIHJ1bm5pbmcsIF9ydW4gaW5kaWNhdGVzIGEgZGF0YQotICogcHJvY2Vzc2luZyBvcGVyYXRpb24gaXMgYWN0aXZlLCBhbmQgX3Jlc3VsdCBtZWFucyB0aGUgZGF0YSBwcm9jZXNzaW5nIHJlc3VsdAotICogaXMgc3RhYmxlIGFuZCBjYW4gYmUgYWN0ZWQgdXBvbi4gIEZvciBzaW1wbGUgb3BlcmF0aW9ucyBsaWtlIGJpb2ZpbGwgYW5kCi0gKiBjb21wdXRlIHRoYXQgb25seSBoYXZlIGFuIF9pZGxlIGFuZCBfcnVuIHN0YXRlIHRoZXkgYXJlIGluZGljYXRlZCB3aXRoCi0gKiBzaC0+c3RhdGUgZmxhZ3MgKFNUUklQRV9CSU9GSUxMX1JVTiBhbmQgU1RSSVBFX0NPTVBVVEVfUlVOKQotICovCi0vKioKLSAqIGVudW0gY2hlY2tfc3RhdGVzIC0gaGFuZGxlcyBzeW5jaW5nIC8gcmVwYWlyaW5nIGEgc3RyaXBlCi0gKiBAY2hlY2tfc3RhdGVfaWRsZSAtIGNoZWNrIG9wZXJhdGlvbnMgYXJlIHF1aWVzY2VkCi0gKiBAY2hlY2tfc3RhdGVfcnVuIC0gY2hlY2sgb3BlcmF0aW9uIGlzIHJ1bm5pbmcKLSAqIEBjaGVja19zdGF0ZV9yZXN1bHQgLSBzZXQgb3V0c2lkZSBsb2NrIHdoZW4gY2hlY2sgcmVzdWx0IGlzIHZhbGlkCi0gKiBAY2hlY2tfc3RhdGVfY29tcHV0ZV9ydW4gLSBjaGVjayBmYWlsZWQgYW5kIHdlIGFyZSByZXBhaXJpbmcKLSAqIEBjaGVja19zdGF0ZV9jb21wdXRlX3Jlc3VsdCAtIHNldCBvdXRzaWRlIGxvY2sgd2hlbiBjb21wdXRlIHJlc3VsdCBpcyB2YWxpZAotICovCi1lbnVtIGNoZWNrX3N0YXRlcyB7Ci0JY2hlY2tfc3RhdGVfaWRsZSA9IDAsCi0JY2hlY2tfc3RhdGVfcnVuLCAvKiBwYXJpdHkgY2hlY2sgKi8KLQljaGVja19zdGF0ZV9jaGVja19yZXN1bHQsCi0JY2hlY2tfc3RhdGVfY29tcHV0ZV9ydW4sIC8qIHBhcml0eSByZXBhaXIgKi8KLQljaGVja19zdGF0ZV9jb21wdXRlX3Jlc3VsdCwKLX07Ci0KLS8qKgotICogZW51bSByZWNvbnN0cnVjdF9zdGF0ZXMgLSBoYW5kbGVzIHdyaXRpbmcgb3IgZXhwYW5kaW5nIGEgc3RyaXBlCi0gKi8KLWVudW0gcmVjb25zdHJ1Y3Rfc3RhdGVzIHsKLQlyZWNvbnN0cnVjdF9zdGF0ZV9pZGxlID0gMCwKLQlyZWNvbnN0cnVjdF9zdGF0ZV9wcmV4b3JfZHJhaW5fcnVuLAkvKiBwcmV4b3Itd3JpdGUgKi8KLQlyZWNvbnN0cnVjdF9zdGF0ZV9kcmFpbl9ydW4sCQkvKiB3cml0ZSAqLwotCXJlY29uc3RydWN0X3N0YXRlX3J1biwJCQkvKiBleHBhbmQgKi8KLQlyZWNvbnN0cnVjdF9zdGF0ZV9wcmV4b3JfZHJhaW5fcmVzdWx0LAotCXJlY29uc3RydWN0X3N0YXRlX2RyYWluX3Jlc3VsdCwKLQlyZWNvbnN0cnVjdF9zdGF0ZV9yZXN1bHQsCi19OwotCi1zdHJ1Y3Qgc3RyaXBlX2hlYWQgewotCXN0cnVjdCBobGlzdF9ub2RlCWhhc2g7Ci0Jc3RydWN0IGxpc3RfaGVhZAlscnU7CQkJLyogaW5hY3RpdmVfbGlzdCBvciBoYW5kbGVfbGlzdCAqLwotCXN0cnVjdCByYWlkNV9wcml2YXRlX2RhdGEJKnJhaWRfY29uZjsKLQlzZWN0b3JfdAkJc2VjdG9yOwkJCS8qIHNlY3RvciBvZiB0aGlzIHJvdyAqLwotCWludAkJCXBkX2lkeDsJCQkvKiBwYXJpdHkgZGlzayBpbmRleCAqLwotCXVuc2lnbmVkIGxvbmcJCXN0YXRlOwkJCS8qIHN0YXRlIGZsYWdzICovCi0JYXRvbWljX3QJCWNvdW50OwkJCS8qIG5yIG9mIGFjdGl2ZSB0aHJlYWQvcmVxdWVzdHMgKi8KLQlzcGlubG9ja190CQlsb2NrOwotCWludAkJCWJtX3NlcTsJLyogc2VxdWVuY2UgbnVtYmVyIGZvciBiaXRtYXAgZmx1c2hlcyAqLwotCWludAkJCWRpc2tzOwkJCS8qIGRpc2tzIGluIHN0cmlwZSAqLwotCWVudW0gY2hlY2tfc3RhdGVzCWNoZWNrX3N0YXRlOwotCWVudW0gcmVjb25zdHJ1Y3Rfc3RhdGVzIHJlY29uc3RydWN0X3N0YXRlOwotCS8qIHN0cmlwZV9vcGVyYXRpb25zCi0JICogQHRhcmdldCAtIFNUUklQRV9PUF9DT01QVVRFX0JMSyB0YXJnZXQKLQkgKi8KLQlzdHJ1Y3Qgc3RyaXBlX29wZXJhdGlvbnMgewotCQlpbnQJCSAgIHRhcmdldDsKLQkJdTMyCQkgICB6ZXJvX3N1bV9yZXN1bHQ7Ci0JfSBvcHM7Ci0Jc3RydWN0IHI1ZGV2IHsKLQkJc3RydWN0IGJpbwlyZXE7Ci0JCXN0cnVjdCBiaW9fdmVjCXZlYzsKLQkJc3RydWN0IHBhZ2UJKnBhZ2U7Ci0JCXN0cnVjdCBiaW8JKnRvcmVhZCwgKnJlYWQsICp0b3dyaXRlLCAqd3JpdHRlbjsKLQkJc2VjdG9yX3QJc2VjdG9yOwkJCS8qIHNlY3RvciBvZiB0aGlzIHBhZ2UgKi8KLQkJdW5zaWduZWQgbG9uZwlmbGFnczsKLQl9IGRldlsxXTsgLyogYWxsb2NhdGVkIHdpdGggZXh0cmEgc3BhY2UgZGVwZW5kaW5nIG9mIFJBSUQgZ2VvbWV0cnkgKi8KLX07Ci0KLS8qIHN0cmlwZV9oZWFkX3N0YXRlIC0gY29sbGVjdHMgYW5kIHRyYWNrcyB0aGUgZHluYW1pYyBzdGF0ZSBvZiBhIHN0cmlwZV9oZWFkCi0gKiAgICAgZm9yIGhhbmRsZV9zdHJpcGUuICBJdCBpcyBvbmx5IHZhbGlkIHVuZGVyIHNwaW5fbG9jayhzaC0+bG9jayk7Ci0gKi8KLXN0cnVjdCBzdHJpcGVfaGVhZF9zdGF0ZSB7Ci0JaW50IHN5bmNpbmcsIGV4cGFuZGluZywgZXhwYW5kZWQ7Ci0JaW50IGxvY2tlZCwgdXB0b2RhdGUsIHRvX3JlYWQsIHRvX3dyaXRlLCBmYWlsZWQsIHdyaXR0ZW47Ci0JaW50IHRvX2ZpbGwsIGNvbXB1dGUsIHJlcV9jb21wdXRlLCBub25fb3ZlcndyaXRlOwotCWludCBmYWlsZWRfbnVtOwotCXVuc2lnbmVkIGxvbmcgb3BzX3JlcXVlc3Q7Ci19OwotCi0vKiByNl9zdGF0ZSAtIGV4dHJhIHN0YXRlIGRhdGEgb25seSByZWxldmFudCB0byByNiAqLwotc3RydWN0IHI2X3N0YXRlIHsKLQlpbnQgcF9mYWlsZWQsIHFfZmFpbGVkLCBxZF9pZHgsIGZhaWxlZF9udW1bMl07Ci19OwotCi0vKiBGbGFncyAqLwotI2RlZmluZQlSNV9VUFRPREFURQkwCS8qIHBhZ2UgY29udGFpbnMgY3VycmVudCBkYXRhICovCi0jZGVmaW5lCVI1X0xPQ0tFRAkxCS8qIElPIGhhcyBiZWVuIHN1Ym1pdHRlZCBvbiAicmVxIiAqLwotI2RlZmluZQlSNV9PVkVSV1JJVEUJMgkvKiB0b3dyaXRlIGNvdmVycyB3aG9sZSBwYWdlICovCi0vKiBhbmQgc29tZSB0aGF0IGFyZSBpbnRlcm5hbCB0byBoYW5kbGVfc3RyaXBlICovCi0jZGVmaW5lCVI1X0luc3luYwkzCS8qIHJkZXYgJiYgcmRldi0+aW5fc3luYyBhdCBzdGFydCAqLwotI2RlZmluZQlSNV9XYW50cmVhZAk0CS8qIHdhbnQgdG8gc2NoZWR1bGUgYSByZWFkICovCi0jZGVmaW5lCVI1X1dhbnR3cml0ZQk1Ci0jZGVmaW5lCVI1X092ZXJsYXAJNwkvKiBUaGVyZSBpcyBhIHBlbmRpbmcgb3ZlcmxhcHBpbmcgcmVxdWVzdCBvbiB0aGlzIGJsb2NrICovCi0jZGVmaW5lCVI1X1JlYWRFcnJvcgk4CS8qIHNlZW4gYSByZWFkIGVycm9yIGhlcmUgcmVjZW50bHkgKi8KLSNkZWZpbmUJUjVfUmVXcml0ZQk5CS8qIGhhdmUgdHJpZWQgdG8gb3Zlci13cml0ZSB0aGUgcmVhZGVycm9yICovCi0KLSNkZWZpbmUJUjVfRXhwYW5kZWQJMTAJLyogVGhpcyBibG9jayBub3cgaGFzIHBvc3QtZXhwYW5kIGRhdGEgKi8KLSNkZWZpbmUJUjVfV2FudGNvbXB1dGUJMTEgLyogY29tcHV0ZV9ibG9jayBpbiBwcm9ncmVzcyB0cmVhdCBhcwotCQkJCSAgICAqIHVwdG9kYXRlCi0JCQkJICAgICovCi0jZGVmaW5lCVI1X1dhbnRmaWxsCTEyIC8qIGRldi0+dG9yZWFkIGNvbnRhaW5zIGEgYmlvIHRoYXQgbmVlZHMKLQkJCQkgICAgKiBmaWxsaW5nCi0JCQkJICAgICovCi0jZGVmaW5lIFI1X1dhbnRkcmFpbgkxMyAvKiBkZXYtPnRvd3JpdGUgbmVlZHMgdG8gYmUgZHJhaW5lZCAqLwotLyoKLSAqIFdyaXRlIG1ldGhvZAotICovCi0jZGVmaW5lIFJFQ09OU1RSVUNUX1dSSVRFCTEKLSNkZWZpbmUgUkVBRF9NT0RJRllfV1JJVEUJMgotLyogbm90IGEgd3JpdGUgbWV0aG9kLCBidXQgYSBjb21wdXRlX3Bhcml0eSBtb2RlICovCi0jZGVmaW5lCUNIRUNLX1BBUklUWQkJMwotCi0vKgotICogU3RyaXBlIHN0YXRlCi0gKi8KLSNkZWZpbmUgU1RSSVBFX0hBTkRMRQkJMgotI2RlZmluZQlTVFJJUEVfU1lOQ0lORwkJMwotI2RlZmluZQlTVFJJUEVfSU5TWU5DCQk0Ci0jZGVmaW5lCVNUUklQRV9QUkVSRUFEX0FDVElWRQk1Ci0jZGVmaW5lCVNUUklQRV9ERUxBWUVECQk2Ci0jZGVmaW5lCVNUUklQRV9ERUdSQURFRAkJNwotI2RlZmluZQlTVFJJUEVfQklUX0RFTEFZCTgKLSNkZWZpbmUJU1RSSVBFX0VYUEFORElORwk5Ci0jZGVmaW5lCVNUUklQRV9FWFBBTkRfU09VUkNFCTEwCi0jZGVmaW5lCVNUUklQRV9FWFBBTkRfUkVBRFkJMTEKLSNkZWZpbmUJU1RSSVBFX0lPX1NUQVJURUQJMTIgLyogZG8gbm90IGNvdW50IHRvd2FyZHMgJ2J5cGFzc19jb3VudCcgKi8KLSNkZWZpbmUJU1RSSVBFX0ZVTExfV1JJVEUJMTMgLyogYWxsIGJsb2NrcyBhcmUgc2V0IHRvIGJlIG92ZXJ3cml0dGVuICovCi0jZGVmaW5lCVNUUklQRV9CSU9GSUxMX1JVTgkxNAotI2RlZmluZQlTVFJJUEVfQ09NUFVURV9SVU4JMTUKLS8qCi0gKiBPcGVyYXRpb24gcmVxdWVzdCBmbGFncwotICovCi0jZGVmaW5lIFNUUklQRV9PUF9CSU9GSUxMCTAKLSNkZWZpbmUgU1RSSVBFX09QX0NPTVBVVEVfQkxLCTEKLSNkZWZpbmUgU1RSSVBFX09QX1BSRVhPUgkyCi0jZGVmaW5lIFNUUklQRV9PUF9CSU9EUkFJTgkzCi0jZGVmaW5lIFNUUklQRV9PUF9QT1NUWE9SCTQKLSNkZWZpbmUgU1RSSVBFX09QX0NIRUNLCTUKLQotLyoKLSAqIFBsdWdnaW5nOgotICoKLSAqIFRvIGltcHJvdmUgd3JpdGUgdGhyb3VnaHB1dCwgd2UgbmVlZCB0byBkZWxheSB0aGUgaGFuZGxpbmcgb2Ygc29tZQotICogc3RyaXBlcyB1bnRpbCB0aGVyZSBoYXMgYmVlbiBhIGNoYW5jZSB0aGF0IHNldmVyYWwgd3JpdGUgcmVxdWVzdHMKLSAqIGZvciB0aGUgb25lIHN0cmlwZSBoYXZlIGFsbCBiZWVuIGNvbGxlY3RlZC4KLSAqIEluIHBhcnRpY3VsYXIsIGFueSB3cml0ZSByZXF1ZXN0IHRoYXQgd291bGQgcmVxdWlyZSBwcmUtcmVhZGluZwotICogaXMgcHV0IG9uIGEgImRlbGF5ZWQiIHF1ZXVlIHVudGlsIHRoZXJlIGFyZSBubyBzdHJpcGVzIGN1cnJlbnRseQotICogaW4gYSBwcmUtcmVhZCBwaGFzZS4gIEZ1cnRoZXIsIGlmIHRoZSAiZGVsYXllZCIgcXVldWUgaXMgZW1wdHkgd2hlbgotICogYSBzdHJpcGUgaXMgcHV0IG9uIGl0IHRoZW4gd2UgInBsdWciIHRoZSBxdWV1ZSBhbmQgZG8gbm90IHByb2Nlc3MgaXQKLSAqIHVudGlsIGFuIHVucGx1ZyBjYWxsIGlzIG1hZGUuICh0aGUgdW5wbHVnX2lvX2ZuKCkgaXMgY2FsbGVkKS4KLSAqCi0gKiBXaGVuIHByZXJlYWQgaXMgaW5pdGlhdGVkIG9uIGEgc3RyaXBlLCB3ZSBzZXQgUFJFUkVBRF9BQ1RJVkUgYW5kIGFkZAotICogaXQgdG8gdGhlIGNvdW50IG9mIHByZXJlYWRpbmcgc3RyaXBlcy4KLSAqIFdoZW4gd3JpdGUgaXMgaW5pdGlhdGVkLCBvciB0aGUgc3RyaXBlIHJlZmNudCA9PSAwIChqdXN0IGluIGNhc2UpIHdlCi0gKiBjbGVhciB0aGUgUFJFUkVBRF9BQ1RJVkUgZmxhZyBhbmQgZGVjcmVtZW50IHRoZSBjb3VudAotICogV2hlbmV2ZXIgdGhlICdoYW5kbGUnIHF1ZXVlIGlzIGVtcHR5IGFuZCB0aGUgZGV2aWNlIGlzIG5vdCBwbHVnZ2VkLCB3ZQotICogbW92ZSBhbnkgc3RyaXBzIGZyb20gZGVsYXllZCB0byBoYW5kbGUgYW5kIGNsZWFyIHRoZSBERUxBWUVEIGZsYWcgYW5kIHNldAotICogUFJFUkVBRF9BQ1RJVkUuCi0gKiBJbiBzdHJpcGVfaGFuZGxlLCBpZiB3ZSBmaW5kIHByZS1yZWFkaW5nIGlzIG5lY2Vzc2FyeSwgd2UgZG8gaXQgaWYKLSAqIFBSRVJFQURfQUNUSVZFIGlzIHNldCwgZWxzZSB3ZSBzZXQgREVMQVlFRCB3aGljaCB3aWxsIHNlbmQgaXQgdG8gdGhlIGRlbGF5ZWQgcXVldWUuCi0gKiBIQU5ETEUgZ2V0cyBjbGVhcmVkIGlmIHN0cmlwZV9oYW5kbGUgbGVhdmUgbm90aGluZyBsb2NrZWQuCi0gKi8KLSAKLQotc3RydWN0IGRpc2tfaW5mbyB7Ci0JbWRrX3JkZXZfdAkqcmRldjsKLX07Ci0KLXN0cnVjdCByYWlkNV9wcml2YXRlX2RhdGEgewotCXN0cnVjdCBobGlzdF9oZWFkCSpzdHJpcGVfaGFzaHRibDsKLQltZGRldl90CQkJKm1kZGV2OwotCXN0cnVjdCBkaXNrX2luZm8JKnNwYXJlOwotCWludAkJCWNodW5rX3NpemUsIGxldmVsLCBhbGdvcml0aG07Ci0JaW50CQkJbWF4X2RlZ3JhZGVkOwotCWludAkJCXJhaWRfZGlza3M7Ci0JaW50CQkJbWF4X25yX3N0cmlwZXM7Ci0KLQkvKiB1c2VkIGR1cmluZyBhbiBleHBhbmQgKi8KLQlzZWN0b3JfdAkJZXhwYW5kX3Byb2dyZXNzOwkvKiBNYXhTZWN0b3Igd2hlbiBubyBleHBhbmQgaGFwcGVuaW5nICovCi0Jc2VjdG9yX3QJCWV4cGFuZF9sbzsgLyogZnJvbSBoZXJlIHVwIHRvIGV4cGFuZF9wcm9ncmVzcyBpdCBvdXQtb2YtYm91bmRzCi0JCQkJCSAgICAqIGFzIHdlIGhhdmVuJ3QgZmx1c2hlZCB0aGUgbWV0YWRhdGEgeWV0Ci0JCQkJCSAgICAqLwotCWludAkJCXByZXZpb3VzX3JhaWRfZGlza3M7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkCWhhbmRsZV9saXN0OyAvKiBzdHJpcGVzIG5lZWRpbmcgaGFuZGxpbmcgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWhvbGRfbGlzdDsgLyogcHJlcmVhZCByZWFkeSBzdHJpcGVzICovCi0Jc3RydWN0IGxpc3RfaGVhZAlkZWxheWVkX2xpc3Q7IC8qIHN0cmlwZXMgdGhhdCBoYXZlIHBsdWdnZWQgcmVxdWVzdHMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWJpdG1hcF9saXN0OyAvKiBzdHJpcGVzIGRlbGF5aW5nIGF3YWl0aW5nIGJpdG1hcCB1cGRhdGUgKi8KLQlzdHJ1Y3QgYmlvCQkqcmV0cnlfcmVhZF9hbGlnbmVkOyAvKiBjdXJyZW50bHkgcmV0cnlpbmcgYWxpZ25lZCBiaW9zICAgKi8KLQlzdHJ1Y3QgYmlvCQkqcmV0cnlfcmVhZF9hbGlnbmVkX2xpc3Q7IC8qIGFsaWduZWQgYmlvcyByZXRyeSBsaXN0ICAqLwotCWF0b21pY190CQlwcmVyZWFkX2FjdGl2ZV9zdHJpcGVzOyAvKiBzdHJpcGVzIHdpdGggc2NoZWR1bGVkIGlvICovCi0JYXRvbWljX3QJCWFjdGl2ZV9hbGlnbmVkX3JlYWRzOwotCWF0b21pY190CQlwZW5kaW5nX2Z1bGxfd3JpdGVzOyAvKiBmdWxsIHdyaXRlIGJhY2tsb2cgKi8KLQlpbnQJCQlieXBhc3NfY291bnQ7IC8qIGJ5cGFzc2VkIHByZXJlYWRzICovCi0JaW50CQkJYnlwYXNzX3RocmVzaG9sZDsgLyogcHJlcmVhZCBuaWNlICovCi0Jc3RydWN0IGxpc3RfaGVhZAkqbGFzdF9ob2xkOyAvKiBkZXRlY3QgaG9sZF9saXN0IHByb21vdGlvbnMgKi8KLQotCWF0b21pY190CQlyZXNoYXBlX3N0cmlwZXM7IC8qIHN0cmlwZXMgd2l0aCBwZW5kaW5nIHdyaXRlcyBmb3IgcmVzaGFwZSAqLwotCS8qIHVuZm9ydHVuYXRlbHkgd2UgbmVlZCB0d28gY2FjaGUgbmFtZXMgYXMgd2UgdGVtcG9yYXJpbHkgaGF2ZQotCSAqIHR3byBjYWNoZXMuCi0JICovCi0JaW50CQkJYWN0aXZlX25hbWU7Ci0JY2hhcgkJCWNhY2hlX25hbWVbMl1bMjBdOwotCXN0cnVjdCBrbWVtX2NhY2hlCQkqc2xhYl9jYWNoZTsgLyogZm9yIGFsbG9jYXRpbmcgc3RyaXBlcyAqLwotCi0JaW50CQkJc2VxX2ZsdXNoLCBzZXFfd3JpdGU7Ci0JaW50CQkJcXVpZXNjZTsKLQotCWludAkJCWZ1bGxzeW5jOyAgLyogc2V0IHRvIDEgaWYgYSBmdWxsIHN5bmMgaXMgbmVlZGVkLAotCQkJCQkgICAgKiAoZnJlc2ggZGV2aWNlIGFkZGVkKS4KLQkJCQkJICAgICogQ2xlYXJlZCB3aGVuIGEgc3luYyBjb21wbGV0ZXMuCi0JCQkJCSAgICAqLwotCi0Jc3RydWN0IHBhZ2UgCQkqc3BhcmVfcGFnZTsgLyogVXNlZCB3aGVuIGNoZWNraW5nIFAvUSBpbiByYWlkNiAqLwotCi0JLyoKLQkgKiBGcmVlIHN0cmlwZXMgcG9vbAotCSAqLwotCWF0b21pY190CQlhY3RpdmVfc3RyaXBlczsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWluYWN0aXZlX2xpc3Q7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9mb3Jfc3RyaXBlOwotCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfZm9yX292ZXJsYXA7Ci0JaW50CQkJaW5hY3RpdmVfYmxvY2tlZDsJLyogcmVsZWFzZSBvZiBpbmFjdGl2ZSBzdHJpcGVzIGJsb2NrZWQsCi0JCQkJCQkJICogd2FpdGluZyBmb3IgMjUlIHRvIGJlIGZyZWUKLQkJCQkJCQkgKi8KLQlpbnQJCQlwb29sX3NpemU7IC8qIG51bWJlciBvZiBkaXNrcyBpbiBzdHJpcGVoZWFkcyBpbiBwb29sICovCi0Jc3BpbmxvY2tfdAkJZGV2aWNlX2xvY2s7Ci0Jc3RydWN0IGRpc2tfaW5mbwkqZGlza3M7Ci19OwotCi10eXBlZGVmIHN0cnVjdCByYWlkNV9wcml2YXRlX2RhdGEgcmFpZDVfY29uZl90OwotCi0jZGVmaW5lIG1kZGV2X3RvX2NvbmYobWRkZXYpICgocmFpZDVfY29uZl90ICopIG1kZGV2LT5wcml2YXRlKQotCi0vKgotICogT3VyIHN1cHBvcnRlZCBhbGdvcml0aG1zCi0gKi8KLSNkZWZpbmUgQUxHT1JJVEhNX0xFRlRfQVNZTU1FVFJJQwkwCi0jZGVmaW5lIEFMR09SSVRITV9SSUdIVF9BU1lNTUVUUklDCTEKLSNkZWZpbmUgQUxHT1JJVEhNX0xFRlRfU1lNTUVUUklDCTIKLSNkZWZpbmUgQUxHT1JJVEhNX1JJR0hUX1NZTU1FVFJJQwkzCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL3hvci5oIGIvaW5jbHVkZS9saW51eC9yYWlkL3hvci5oCmluZGV4IDNlMTIwNTguLjVhMjEwOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC94b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQveG9yLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9YT1JfSAogI2RlZmluZSBfWE9SX0gKIAotI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KLQogI2RlZmluZSBNQVhfWE9SX0JMT0NLUyA0CiAKIGV4dGVybiB2b2lkIHhvcl9ibG9ja3ModW5zaWduZWQgaW50IGNvdW50LCB1bnNpZ25lZCBpbnQgYnl0ZXMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9icTI0MDIyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9icTI0MDIyLmgKaW5kZXggZTg0YjBhOS4uYTZkMDE0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvYnEyNDAyMi5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2JxMjQwMjIuaApAQCAtMTAsNiArMTAsOCBAQAogICoKICAqLwogCitzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YTsKKwogLyoqCiAgKiBicTI0MDIyX21hY2hfaW5mbyAtIHBsYXRmb3JtIGRhdGEgZm9yIGJxMjQwMjIKICAqIEBncGlvX25jZTogR1BJTyBsaW5lIGNvbm5lY3RlZCB0byB0aGUgbkNFIHBpbiwgdXNlZCB0byBlbmFibGUgLyBkaXNhYmxlIGNoYXJnaW5nCkBAIC0xOCw0ICsyMCw1IEBACiBzdHJ1Y3QgYnEyNDAyMl9tYWNoX2luZm8gewogCWludCBncGlvX25jZTsKIAlpbnQgZ3Bpb19pc2V0MjsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCmluZGV4IDgwMWJmNzcuLjI3N2Y0YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTg4LDYgKzg4LDcgQEAKICAqIEZBSUwgICAgICAgICAgIFJlZ3VsYXRvciBvdXRwdXQgaGFzIGZhaWxlZC4KICAqIE9WRVJfVEVNUCAgICAgIFJlZ3VsYXRvciBvdmVyIHRlbXAuCiAgKiBGT1JDRV9ESVNBQkxFICBSZWd1bGF0b3Igc2h1dCBkb3duIGJ5IHNvZnR3YXJlLgorICogVk9MVEFHRV9DSEFOR0UgUmVndWxhdG9yIHZvbHRhZ2UgY2hhbmdlZC4KICAqCiAgKiBOT1RFOiBUaGVzZSBldmVudHMgY2FuIGJlIE9SJ2VkIHRvZ2V0aGVyIHdoZW4gcGFzc2VkIGludG8gaGFuZGxlci4KICAqLwpAQCAtOTgsNiArOTksNyBAQAogI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfRkFJTAkJCTB4MDgKICNkZWZpbmUgUkVHVUxBVE9SX0VWRU5UX09WRVJfVEVNUAkJMHgxMAogI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfRk9SQ0VfRElTQUJMRQkJMHgyMAorI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfVk9MVEFHRV9DSEFOR0UJCTB4NDAKIAogc3RydWN0IHJlZ3VsYXRvcjsKIApAQCAtMTQwLDYgKzE0Miw4IEBACiB2b2lkIHJlZ3VsYXRvcl9idWxrX2ZyZWUoaW50IG51bV9jb25zdW1lcnMsCiAJCQkgc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgKmNvbnN1bWVycyk7CiAKK2ludCByZWd1bGF0b3JfY291bnRfdm9sdGFnZXMoc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yKTsKK2ludCByZWd1bGF0b3JfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvciwgdW5zaWduZWQgc2VsZWN0b3IpOwogaW50IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsIGludCBtaW5fdVYsIGludCBtYXhfdVYpOwogaW50IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IpOwogaW50IHJlZ3VsYXRvcl9zZXRfY3VycmVudF9saW1pdChzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCmluZGV4IDJkYWUwNTcuLjQ4NDhkOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgogICoKLSAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bGdAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICogQXV0aG9yOiBMaWFtIEdpcmR3b29kIDxscmdAc2xpbWxvZ2ljLmNvLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMjEsMjUgKzIxLDM4IEBACiBzdHJ1Y3QgcmVndWxhdG9yX2RldjsKIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhOwogCitlbnVtIHJlZ3VsYXRvcl9zdGF0dXMgeworCVJFR1VMQVRPUl9TVEFUVVNfT0ZGLAorCVJFR1VMQVRPUl9TVEFUVVNfT04sCisJUkVHVUxBVE9SX1NUQVRVU19FUlJPUiwKKwkvKiBmYXN0L25vcm1hbC9pZGxlL3N0YW5kYnkgYXJlIGZsYXZvcnMgb2YgIm9uIiAqLworCVJFR1VMQVRPUl9TVEFUVVNfRkFTVCwKKwlSRUdVTEFUT1JfU1RBVFVTX05PUk1BTCwKKwlSRUdVTEFUT1JfU1RBVFVTX0lETEUsCisJUkVHVUxBVE9SX1NUQVRVU19TVEFOREJZLAorfTsKKwogLyoqCiAgKiBzdHJ1Y3QgcmVndWxhdG9yX29wcyAtIHJlZ3VsYXRvciBvcGVyYXRpb25zLgogICoKLSAqIFRoaXMgc3RydWN0IGRlc2NyaWJlcyByZWd1bGF0b3Igb3BlcmF0aW9ucyB3aGljaCBjYW4gYmUgaW1wbGVtZW50ZWQgYnkKLSAqIHJlZ3VsYXRvciBjaGlwIGRyaXZlcnMuCi0gKgotICogQGVuYWJsZTogRW5hYmxlIHRoZSByZWd1bGF0b3IuCi0gKiBAZGlzYWJsZTogRGlzYWJsZSB0aGUgcmVndWxhdG9yLgorICogQGVuYWJsZTogQ29uZmlndXJlIHRoZSByZWd1bGF0b3IgYXMgZW5hYmxlZC4KKyAqIEBkaXNhYmxlOiBDb25maWd1cmUgdGhlIHJlZ3VsYXRvciBhcyBkaXNhYmxlZC4KICAqIEBpc19lbmFibGVkOiBSZXR1cm4gMSBpZiB0aGUgcmVndWxhdG9yIGlzIGVuYWJsZWQsIDAgb3RoZXJ3aXNlLgogICoKICAqIEBzZXRfdm9sdGFnZTogU2V0IHRoZSB2b2x0YWdlIGZvciB0aGUgcmVndWxhdG9yIHdpdGhpbiB0aGUgcmFuZ2Ugc3BlY2lmaWVkLgogICogICAgICAgICAgICAgICBUaGUgZHJpdmVyIHNob3VsZCBzZWxlY3QgdGhlIHZvbHRhZ2UgY2xvc2VzdCB0byBtaW5fdVYuCiAgKiBAZ2V0X3ZvbHRhZ2U6IFJldHVybiB0aGUgY3VycmVudGx5IGNvbmZpZ3VyZWQgdm9sdGFnZSBmb3IgdGhlIHJlZ3VsYXRvci4KKyAqIEBsaXN0X3ZvbHRhZ2U6IFJldHVybiBvbmUgb2YgdGhlIHN1cHBvcnRlZCB2b2x0YWdlcywgaW4gbWljcm92b2x0czsgemVybworICoJaWYgdGhlIHNlbGVjdG9yIGluZGljYXRlcyBhIHZvbHRhZ2UgdGhhdCBpcyB1bnVzYWJsZSBvbiB0aGlzIHN5c3RlbTsKKyAqCW9yIG5lZ2F0aXZlIGVycm5vLiAgU2VsZWN0b3JzIHJhbmdlIGZyb20gemVybyB0byBvbmUgbGVzcyB0aGFuCisgKglyZWd1bGF0b3JfZGVzYy5uX3ZvbHRhZ2VzLiAgVm9sdGFnZXMgbWF5IGJlIHJlcG9ydGVkIGluIGFueSBvcmRlci4KICAqCiAgKiBAc2V0X2N1cnJlbnRfbGltaXQ6IENvbmZpZ3VyZSBhIGxpbWl0IGZvciBhIGN1cnJlbnQtbGltaXRlZCByZWd1bGF0b3IuCi0gKiBAZ2V0X2N1cnJlbnRfbGltaXQ6IEdldCB0aGUgbGltaXQgZm9yIGEgY3VycmVudC1saW1pdGVkIHJlZ3VsYXRvci4KKyAqIEBnZXRfY3VycmVudF9saW1pdDogR2V0IHRoZSBjb25maWd1cmVkIGxpbWl0IGZvciBhIGN1cnJlbnQtbGltaXRlZCByZWd1bGF0b3IuCiAgKgotICogQHNldF9tb2RlOiBTZXQgdGhlIG9wZXJhdGluZyBtb2RlIGZvciB0aGUgcmVndWxhdG9yLgotICogQGdldF9tb2RlOiBHZXQgdGhlIGN1cnJlbnQgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSByZWd1bGF0b3IuCisgKiBAZ2V0X21vZGU6IEdldCB0aGUgY29uZmlndXJlZCBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHJlZ3VsYXRvci4KKyAqIEBnZXRfc3RhdHVzOiBSZXR1cm4gYWN0dWFsIChub3QgYXMtY29uZmlndXJlZCkgc3RhdHVzIG9mIHJlZ3VsYXRvciwgYXMgYQorICoJUkVHVUxBVE9SX1NUQVRVUyB2YWx1ZSAob3IgbmVnYXRpdmUgZXJybm8pCiAgKiBAZ2V0X29wdGltdW1fbW9kZTogR2V0IHRoZSBtb3N0IGVmZmljaWVudCBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIHJlZ3VsYXRvcgogICogICAgICAgICAgICAgICAgICAgIHdoZW4gcnVubmluZyB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycy4KICAqCkBAIC01MSw5ICs2NCwxNSBAQAogICogICAgICAgICAgICAgICAgICAgICAgIHN1c3BlbmRlZC4KICAqIEBzZXRfc3VzcGVuZF9tb2RlOiBTZXQgdGhlIG9wZXJhdGluZyBtb2RlIGZvciB0aGUgcmVndWxhdG9yIHdoZW4gdGhlCiAgKiAgICAgICAgICAgICAgICAgICAgc3lzdGVtIGlzIHN1c3BlbmRlZC4KKyAqCisgKiBUaGlzIHN0cnVjdCBkZXNjcmliZXMgcmVndWxhdG9yIG9wZXJhdGlvbnMgd2hpY2ggY2FuIGJlIGltcGxlbWVudGVkIGJ5CisgKiByZWd1bGF0b3IgY2hpcCBkcml2ZXJzLgogICovCiBzdHJ1Y3QgcmVndWxhdG9yX29wcyB7CiAKKwkvKiBlbnVtZXJhdGUgc3VwcG9ydGVkIHZvbHRhZ2VzICovCisJaW50ICgqbGlzdF92b2x0YWdlKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiwgdW5zaWduZWQgc2VsZWN0b3IpOworCiAJLyogZ2V0L3NldCByZWd1bGF0b3Igdm9sdGFnZSAqLwogCWludCAoKnNldF92b2x0YWdlKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiwgaW50IG1pbl91ViwgaW50IG1heF91Vik7CiAJaW50ICgqZ2V0X3ZvbHRhZ2UpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKTsKQEAgLTcyLDYgKzkxLDEzIEBACiAJaW50ICgqc2V0X21vZGUpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqLCB1bnNpZ25lZCBpbnQgbW9kZSk7CiAJdW5zaWduZWQgaW50ICgqZ2V0X21vZGUpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKTsKIAorCS8qIHJlcG9ydCByZWd1bGF0b3Igc3RhdHVzIC4uLiBtb3N0IG90aGVyIGFjY2Vzc29ycyByZXBvcnQKKwkgKiBjb250cm9sIGlucHV0cywgdGhpcyByZXBvcnRzIHJlc3VsdHMgb2YgY29tYmluaW5nIGlucHV0cworCSAqIGZyb20gTGludXggKGFuZCBvdGhlciBzb3VyY2VzKSB3aXRoIHRoZSBhY3R1YWwgbG9hZC4KKwkgKiByZXR1cm5zIFJFR1VMQVRPUl9TVEFUVVNfKiBvciBuZWdhdGl2ZSBlcnJuby4KKwkgKi8KKwlpbnQgKCpnZXRfc3RhdHVzKShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKTsKKwogCS8qIGdldCBtb3N0IGVmZmljaWVudCByZWd1bGF0b3Igb3BlcmF0aW5nIG1vZGUgZm9yIGxvYWQgKi8KIAl1bnNpZ25lZCBpbnQgKCpnZXRfb3B0aW11bV9tb2RlKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiwgaW50IGlucHV0X3VWLAogCQkJCQkgIGludCBvdXRwdXRfdVYsIGludCBsb2FkX3VBKTsKQEAgLTEwNiw2ICsxMzIsNyBAQAogICoKICAqIEBuYW1lOiBJZGVudGlmeWluZyBuYW1lIGZvciB0aGUgcmVndWxhdG9yLgogICogQGlkOiBOdW1lcmljYWwgaWRlbnRpZmllciBmb3IgdGhlIHJlZ3VsYXRvci4KKyAqIEBuX3ZvbHRhZ2VzOiBOdW1iZXIgb2Ygc2VsZWN0b3JzIGF2YWlsYWJsZSBmb3Igb3BzLmxpc3Rfdm9sdGFnZSgpLgogICogQG9wczogUmVndWxhdG9yIG9wZXJhdGlvbnMgdGFibGUuCiAgKiBAaXJxOiBJbnRlcnJ1cHQgbnVtYmVyIGZvciB0aGUgcmVndWxhdG9yLgogICogQHR5cGU6IEluZGljYXRlcyBpZiB0aGUgcmVndWxhdG9yIGlzIGEgdm9sdGFnZSBvciBjdXJyZW50IHJlZ3VsYXRvci4KQEAgLTExNCwxNCArMTQxLDQ4IEBACiBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgewogCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IGlkOworCXVuc2lnbmVkIG5fdm9sdGFnZXM7CiAJc3RydWN0IHJlZ3VsYXRvcl9vcHMgKm9wczsKIAlpbnQgaXJxOwogCWVudW0gcmVndWxhdG9yX3R5cGUgdHlwZTsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIH07CiAKKy8qCisgKiBzdHJ1Y3QgcmVndWxhdG9yX2RldgorICoKKyAqIFZvbHRhZ2UgLyBDdXJyZW50IHJlZ3VsYXRvciBjbGFzcyBkZXZpY2UuIE9uZSBmb3IgZWFjaAorICogcmVndWxhdG9yLgorICoKKyAqIFRoaXMgc2hvdWxkICpub3QqIGJlIHVzZWQgZGlyZWN0bHkgYnkgYW55dGhpbmcgZXhjZXB0IHRoZSByZWd1bGF0b3IKKyAqIGNvcmUgYW5kIG5vdGlmaWNhdGlvbiBpbmplY3Rpb24gKHdoaWNoIHNob3VsZCB0YWtlIHRoZSBtdXRleCBhbmQgZG8KKyAqIG5vIG90aGVyIGRpcmVjdCBhY2Nlc3MpLgorICovCitzdHJ1Y3QgcmVndWxhdG9yX2RldiB7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjOworCWludCB1c2VfY291bnQ7CisKKwkvKiBsaXN0cyB3ZSBiZWxvbmcgdG8gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7IC8qIGxpc3Qgb2YgYWxsIHJlZ3VsYXRvcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNsaXN0OyAvKiBsaXN0IG9mIHN1cHBsaWVkIHJlZ3VsYXRvcnMgKi8KKworCS8qIGxpc3RzIHdlIG93biAqLworCXN0cnVjdCBsaXN0X2hlYWQgY29uc3VtZXJfbGlzdDsgLyogY29uc3VtZXJzIHdlIHN1cHBseSAqLworCXN0cnVjdCBsaXN0X2hlYWQgc3VwcGx5X2xpc3Q7IC8qIHJlZ3VsYXRvcnMgd2Ugc3VwcGx5ICovCisKKwlzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCBub3RpZmllcjsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7IC8qIGNvbnN1bWVyIGxvY2sgKi8KKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKKwlzdHJ1Y3QgcmVndWxhdGlvbl9jb25zdHJhaW50cyAqY29uc3RyYWludHM7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnN1cHBseTsJLyogZm9yIHRyZWUgKi8KKworCXZvaWQgKnJlZ19kYXRhOwkJLyogcmVndWxhdG9yX2RldiBkYXRhICovCit9OworCiBzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yX3JlZ2lzdGVyKHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqcmVndWxhdG9yX2Rlc2MsCi0Jc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkcml2ZXJfZGF0YSk7CisJc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhLAorCXZvaWQgKmRyaXZlcl9kYXRhKTsKIHZvaWQgcmVndWxhdG9yX3VucmVnaXN0ZXIoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpOwogCiBpbnQgcmVndWxhdG9yX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9maXhlZC5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZml4ZWQuaAppbmRleCAxMzg3YTVkLi45MWI0ZGEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9maXhlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2ZpeGVkLmgKQEAgLTE0LDkgKzE0LDEyIEBACiAjaWZuZGVmIF9fUkVHVUxBVE9SX0ZJWEVEX0gKICNkZWZpbmUgX19SRUdVTEFUT1JfRklYRURfSAogCitzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YTsKKwogc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIHsKIAljb25zdCBjaGFyICpzdXBwbHlfbmFtZTsKIAlpbnQgbWljcm92b2x0czsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmgKaW5kZXggMzc5NDc3My4uYmFjNjRmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWFjaGluZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21hY2hpbmUuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KICAqCi0gKiBBdXRob3I6IExpYW0gR2lyZHdvb2QgPGxnQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqIEF1dGhvcjogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTczLDcgKzczLDkgQEAKICAqCiAgKiBAYWx3YXlzX29uOiBTZXQgaWYgdGhlIHJlZ3VsYXRvciBzaG91bGQgbmV2ZXIgYmUgZGlzYWJsZWQuCiAgKiBAYm9vdF9vbjogU2V0IGlmIHRoZSByZWd1bGF0b3IgaXMgZW5hYmxlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgaW5pdGlhbGx5Ci0gKiAgICAgICAgICAgc3RhcnRlZC4KKyAqICAgICAgICAgICBzdGFydGVkLiAgSWYgdGhlIHJlZ3VsYXRvciBpcyBub3QgZW5hYmxlZCBieSB0aGUgaGFyZHdhcmUgb3IKKyAqICAgICAgICAgICBib290bG9hZGVyIHRoZW4gaXQgd2lsbCBiZSBlbmFibGVkIHdoZW4gdGhlIGNvbnN0cmFpbnRzIGFyZQorICogICAgICAgICAgIGFwcGxpZWQuCiAgKiBAYXBwbHlfdVY6IEFwcGx5IHRoZSB2b2x0YWdlIGNvbnN0cmFpbnQgd2hlbiBpbml0aWFsaXNpbmcuCiAgKgogICogQGlucHV0X3VWOiBJbnB1dCB2b2x0YWdlIGZvciByZWd1bGF0b3Igd2hlbiBzdXBwbGllZCBieSBhbm90aGVyIHJlZ3VsYXRvci4KQEAgLTgzLDYgKzg1LDcgQEAKICAqIEBzdGF0ZV9zdGFuZGJ5OiBTdGF0ZSBmb3IgcmVndWxhdG9yIHdoZW4gc3lzdGVtIGlzIHN1c3BlbmRlZCBpbiBzdGFuZGJ5CiAgKiAgICAgICAgICAgICAgICAgbW9kZS4KICAqIEBpbml0aWFsX3N0YXRlOiBTdXNwZW5kIHN0YXRlIHRvIHNldCBieSBkZWZhdWx0LgorICogQGluaXRpYWxfbW9kZTogTW9kZSB0byBzZXQgYXQgc3RhcnR1cC4KICAqLwogc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgewogCkBAIC0xMTEsNiArMTE0LDkgQEAKIAlzdHJ1Y3QgcmVndWxhdG9yX3N0YXRlIHN0YXRlX3N0YW5kYnk7CiAJc3VzcGVuZF9zdGF0ZV90IGluaXRpYWxfc3RhdGU7IC8qIHN1c3BlbmQgc3RhdGUgdG8gc2V0IGF0IGluaXQgKi8KIAorCS8qIG1vZGUgdG8gc2V0IG9uIHN0YXJ0dXAgKi8KKwl1bnNpZ25lZCBpbnQgaW5pdGlhbF9tb2RlOworCiAJLyogY29uc3RyaWFudCBmbGFncyAqLwogCXVuc2lnbmVkIGFsd2F5c19vbjoxOwkvKiByZWd1bGF0b3IgbmV2ZXIgb2ZmIHdoZW4gc3lzdGVtIGlzIG9uICovCiAJdW5zaWduZWQgYm9vdF9vbjoxOwkvKiBib290bG9hZGVyL2Zpcm13YXJlIGVuYWJsZWQgcmVndWxhdG9yICovCkBAIC0xNjAsNCArMTY2LDYgQEAKIAogaW50IHJlZ3VsYXRvcl9zdXNwZW5kX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKIAordm9pZCByZWd1bGF0b3JfaGFzX2Z1bGxfY29uc3RyYWludHModm9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oIGIvaW5jbHVkZS9saW51eC9yaW5nX2J1ZmZlci5oCmluZGV4IGIzYjM1OTYuLmUxYjdiMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmluZ19idWZmZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JpbmdfYnVmZmVyLmgKQEAgLTgsNyArOCw3IEBACiBzdHJ1Y3QgcmluZ19idWZmZXJfaXRlcjsKIAogLyoKLSAqIERvbid0IHJlZmVyZW5jZSB0aGlzIHN0cnVjdCBkaXJlY3RseSwgdXNlIGZ1bmN0aW9ucyBiZWxvdy4KKyAqIERvbid0IHJlZmVyIHRvIHRoaXMgc3RydWN0IGRpcmVjdGx5LCB1c2UgZnVuY3Rpb25zIGJlbG93LgogICovCiBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgewogCXUzMgkJdHlwZToyLCBsZW46MywgdGltZV9kZWx0YToyNzsKQEAgLTE4LDEwICsxOCwxMyBAQAogLyoqCiAgKiBlbnVtIHJpbmdfYnVmZmVyX3R5cGUgLSBpbnRlcm5hbCByaW5nIGJ1ZmZlciB0eXBlcwogICoKLSAqIEBSSU5HQlVGX1RZUEVfUEFERElORzoJTGVmdCBvdmVyIHBhZ2UgcGFkZGluZwotICoJCQkJIGFycmF5IGlzIGlnbm9yZWQKLSAqCQkJCSBzaXplIGlzIHZhcmlhYmxlIGRlcGVuZGluZyBvbiBob3cgbXVjaAorICogQFJJTkdCVUZfVFlQRV9QQURESU5HOglMZWZ0IG92ZXIgcGFnZSBwYWRkaW5nIG9yIGRpc2NhcmRlZCBldmVudAorICoJCQkJIElmIHRpbWVfZGVsdGEgaXMgMDoKKyAqCQkJCSAgYXJyYXkgaXMgaWdub3JlZAorICoJCQkJICBzaXplIGlzIHZhcmlhYmxlIGRlcGVuZGluZyBvbiBob3cgbXVjaAogICoJCQkJICBwYWRkaW5nIGlzIG5lZWRlZAorICoJCQkJIElmIHRpbWVfZGVsdGEgaXMgbm9uIHplcm86CisgKgkJCQkgIGV2ZXJ5dGhpbmcgZWxzZSBzYW1lIGFzIFJJTkdCVUZfVFlQRV9EQVRBCiAgKgogICogQFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORDoJRXh0ZW5kIHRoZSB0aW1lIGRlbHRhCiAgKgkJCQkgYXJyYXlbMF0gPSB0aW1lIGRlbHRhICgyOCAuLiA1OSkKQEAgLTY1LDYgKzY4LDggQEAKIAlyZXR1cm4gZXZlbnQtPnRpbWVfZGVsdGE7CiB9CiAKK3ZvaWQgcmluZ19idWZmZXJfZXZlbnRfZGlzY2FyZChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KTsKKwogLyoKICAqIHNpemUgaXMgaW4gYnl0ZXMgZm9yIGVhY2ggcGVyIENQVSBidWZmZXIuCiAgKi8KQEAgLTc0LDEzICs3OSwxMCBAQAogCiBpbnQgcmluZ19idWZmZXJfcmVzaXplKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpOwogCi1zdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgotcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAotCQkJIHVuc2lnbmVkIGxvbmcgbGVuZ3RoLAotCQkJIHVuc2lnbmVkIGxvbmcgKmZsYWdzKTsKK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJCQkJICAgdW5zaWduZWQgbG9uZyBsZW5ndGgpOwogaW50IHJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCi0JCQkgICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CisJCQkgICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KTsKIGludCByaW5nX2J1ZmZlcl93cml0ZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKIAkJICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgsIHZvaWQgKmRhdGEpOwogCkBAIC0xMjEsMTcgKzEyMywxOSBAQAogdW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9lbnRyaWVzX2NwdShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSk7CiB1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX292ZXJydW5fY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KTsKIAotdTY0IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoaW50IGNwdSk7Ci12b2lkIHJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKGludCBjcHUsIHU2NCAqdHMpOwordTY0IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpOwordm9pZCByaW5nX2J1ZmZlcl9ub3JtYWxpemVfdGltZV9zdGFtcChzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKKwkJCQkgICAgICBpbnQgY3B1LCB1NjQgKnRzKTsKK3ZvaWQgcmluZ19idWZmZXJfc2V0X2Nsb2NrKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAorCQkJICAgdTY0ICgqY2xvY2spKHZvaWQpKTsKIAotdm9pZCB0cmFjaW5nX29uKHZvaWQpOwotdm9pZCB0cmFjaW5nX29mZih2b2lkKTsKLXZvaWQgdHJhY2luZ19vZmZfcGVybWFuZW50KHZvaWQpOworc2l6ZV90IHJpbmdfYnVmZmVyX3BhZ2VfbGVuKHZvaWQgKnBhZ2UpOworCiAKIHZvaWQgKnJpbmdfYnVmZmVyX2FsbG9jX3JlYWRfcGFnZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlcik7CiB2b2lkIHJpbmdfYnVmZmVyX2ZyZWVfcmVhZF9wYWdlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCB2b2lkICpkYXRhKTsKLWludCByaW5nX2J1ZmZlcl9yZWFkX3BhZ2Uoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCi0JCQkgIHZvaWQgKipkYXRhX3BhZ2UsIGludCBjcHUsIGludCBmdWxsKTsKK2ludCByaW5nX2J1ZmZlcl9yZWFkX3BhZ2Uoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIHZvaWQgKipkYXRhX3BhZ2UsCisJCQkgIHNpemVfdCBsZW4sIGludCBjcHUsIGludCBmdWxsKTsKIAogZW51bSByaW5nX2J1ZmZlcl9mbGFncyB7CiAJUkJfRkxfT1ZFUldSSVRFCQk9IDEgPDwgMCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRjLXYzMDIwLmggYi9pbmNsdWRlL2xpbnV4L3J0Yy12MzAyMC5oCmluZGV4IGJmNzRlNjMuLjhiYTY0NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRjLXYzMDIwLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydGMtdjMwMjAuaApAQCAtMTQsNiArMTQsMTIgQEAKICAqIGlzIHVzZWQgZGVwZW5kcyBvbiB0aGUgYm9hcmQuICovCiBzdHJ1Y3QgdjMwMjBfcGxhdGZvcm1fZGF0YSB7CiAJaW50IGxlZnRzaGlmdDsgLyogKDE8PChsZWZ0c2hpZnQpKSAmIHJlYWRsKCkgKi8KKworCWludCB1c2VfZ3BpbzoxOworCXVuc2lnbmVkIGludCBncGlvX2NzOworCXVuc2lnbmVkIGludCBncGlvX3dyOworCXVuc2lnbmVkIGludCBncGlvX3JkOworCXVuc2lnbmVkIGludCBncGlvX2lvOwogfTsKIAogI2RlZmluZSBWMzAyMF9TVEFUVVNfMAkweDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0Yy5oIGIvaW5jbHVkZS9saW51eC9ydGMuaAppbmRleCA0MDQ2Yjc1Li42MGY4OGE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRjLmgKQEAgLTk5LDYgKzk5LDcgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKIGV4dGVybiBpbnQgcnRjX21vbnRoX2RheXModW5zaWduZWQgaW50IG1vbnRoLCB1bnNpZ25lZCBpbnQgeWVhcik7CkBAIC0yMzIsNiArMjMzLDExIEBACiBpbnQgcnRjX3VucmVnaXN0ZXIocnRjX3Rhc2tfdCAqdGFzayk7CiBpbnQgcnRjX2NvbnRyb2wocnRjX3Rhc2tfdCAqdCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfbGVhcF95ZWFyKHVuc2lnbmVkIGludCB5ZWFyKQoreworCXJldHVybiAoISh5ZWFyICUgNCkgJiYgKHllYXIgJSAxMDApKSB8fCAhKHllYXIgJSA0MDApOworfQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX0xJTlVYX1JUQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDI5ZGY2MzcuLmI5NGYzNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTY4LDcgKzY4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXRoLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGlkLmg+CkBAIC05Nyw2ICs5Nyw3IEBACiBzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZDsKIHN0cnVjdCBiaW87CiBzdHJ1Y3QgYnRzX3RyYWNlcjsKK3N0cnVjdCBmc19zdHJ1Y3Q7CiAKIC8qCiAgKiBMaXN0IG9mIGZsYWdzIHdlIHdhbnQgdG8gc2hhcmUgZm9yIGtlcm5lbCB0aHJlYWRzLApAQCAtMTM3LDYgKzEzOCw4IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBucl9hY3RpdmUodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBucl9pb3dhaXQodm9pZCk7CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIGdldF9wYXJlbnRfaXAodW5zaWduZWQgbG9uZyBhZGRyKTsKKwogc3RydWN0IHNlcV9maWxlOwogc3RydWN0IGNmc19ycTsKIHN0cnVjdCB0YXNrX2dyb3VwOwpAQCAtMzkxLDggKzM5NCwxNSBAQAogCQkobW0pLT5oaXdhdGVyX3ZtID0gKG1tKS0+dG90YWxfdm07CVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgZ2V0X21tX2hpd2F0ZXJfcnNzKG1tKQltYXgoKG1tKS0+aGl3YXRlcl9yc3MsIGdldF9tbV9yc3MobW0pKQotI2RlZmluZSBnZXRfbW1faGl3YXRlcl92bShtbSkJbWF4KChtbSktPmhpd2F0ZXJfdm0sIChtbSktPnRvdGFsX3ZtKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9tbV9oaXdhdGVyX3JzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gbWF4KG1tLT5oaXdhdGVyX3JzcywgZ2V0X21tX3JzcyhtbSkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21tX2hpd2F0ZXJfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIG1heChtbS0+aGl3YXRlcl92bSwgbW0tPnRvdGFsX3ZtKTsKK30KIAogZXh0ZXJuIHZvaWQgc2V0X2R1bXBhYmxlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgdmFsdWUpOwogZXh0ZXJuIGludCBnZXRfZHVtcGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwpAQCAtNTQwLDI1ICs1NTAsOCBAQAogCiAJc3RydWN0IGxpc3RfaGVhZCBjcHVfdGltZXJzWzNdOwogCi0JLyogam9iIGNvbnRyb2wgSURzICovCi0KLQkvKgotCSAqIHBncnAgYW5kIHNlc3Npb24gZmllbGRzIGFyZSBkZXByZWNhdGVkLgotCSAqIHVzZSB0aGUgdGFza19zZXNzaW9uX1huciBhbmQgdGFza19wZ3JwX1huciByb3V0aW5lcyBiZWxvdwotCSAqLwotCi0JdW5pb24gewotCQlwaWRfdCBwZ3JwIF9fZGVwcmVjYXRlZDsKLQkJcGlkX3QgX19wZ3JwOwotCX07Ci0KIAlzdHJ1Y3QgcGlkICp0dHlfb2xkX3BncnA7CiAKLQl1bmlvbiB7Ci0JCXBpZF90IHNlc3Npb24gX19kZXByZWNhdGVkOwotCQlwaWRfdCBfX3Nlc3Npb247Ci0JfTsKLQogCS8qIGJvb2xlYW4gdmFsdWUgZm9yIHNlc3Npb24gZ3JvdXAgbGVhZGVyICovCiAJaW50IGxlYWRlcjsKIApAQCAtMTQxNCw2ICsxNDA3LDggQEAKIAlpbnQgY3Vycl9yZXRfc3RhY2s7CiAJLyogU3RhY2sgb2YgcmV0dXJuIGFkZHJlc3NlcyBmb3IgcmV0dXJuIGZ1bmN0aW9uIHRyYWNpbmcgKi8KIAlzdHJ1Y3QgZnRyYWNlX3JldF9zdGFjawkqcmV0X3N0YWNrOworCS8qIHRpbWUgc3RhbXAgZm9yIGxhc3Qgc2NoZWR1bGUgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgZnRyYWNlX3RpbWVzdGFtcDsKIAkvKgogCSAqIE51bWJlciBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlbid0IGJlZW4gdHJhY2VkCiAJICogYmVjYXVzZSBvZiBkZXB0aCBvdmVycnVuLgpAQCAtMTQ2MiwxNiArMTQ1Nyw2IEBACiAJcmV0dXJuIHJ0X3ByaW8ocC0+cHJpbyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFza19zZXNzaW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBwaWRfdCBzZXNzaW9uKQotewotCXRzay0+c2lnbmFsLT5fX3Nlc3Npb24gPSBzZXNzaW9uOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Rhc2tfcGdycChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgcGlkX3QgcGdycCkKLXsKLQl0c2stPnNpZ25hbC0+X19wZ3JwID0gcGdycDsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGlkICp0YXNrX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJcmV0dXJuIHRhc2stPnBpZHNbUElEVFlQRV9QSURdLnBpZDsKQEAgLTE0ODIsNiArMTQ2NywxMSBAQAogCXJldHVybiB0YXNrLT5ncm91cF9sZWFkZXItPnBpZHNbUElEVFlQRV9QSURdLnBpZDsKIH0KIAorLyoKKyAqIFdpdGhvdXQgdGFza2xpc3Qgb3IgcmN1IGxvY2sgaXQgaXMgbm90IHNhZmUgdG8gZGVyZWZlcmVuY2UKKyAqIHRoZSByZXN1bHQgb2YgdGFza19wZ3JwL3Rhc2tfc2Vzc2lvbiBldmVuIGlmIHRhc2sgPT0gY3VycmVudCwKKyAqIHdlIGNhbiByYWNlIHdpdGggYW5vdGhlciB0aHJlYWQgZG9pbmcgc3lzX3NldHNpZC9zeXNfc2V0cGdpZC4KKyAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGlkICp0YXNrX3BncnAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQogewogCXJldHVybiB0YXNrLT5ncm91cF9sZWFkZXItPnBpZHNbUElEVFlQRV9QR0lEXS5waWQ7CkBAIC0xNTA3LDE3ICsxNDk3LDIzIEBACiAgKgogICogc2VlIGFsc28gcGlkX25yKCkgZXRjIGluIGluY2x1ZGUvbGludXgvcGlkLmgKICAqLworcGlkX3QgX190YXNrX3BpZF9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gcGlkX3R5cGUgdHlwZSwKKwkJCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyk7CiAKIHN0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19waWRfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJcmV0dXJuIHRzay0+cGlkOwogfQogCi1waWRfdCB0YXNrX3BpZF9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKK3N0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19waWRfbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKK3sKKwlyZXR1cm4gX190YXNrX3BpZF9ucl9ucyh0c2ssIFBJRFRZUEVfUElELCBucyk7Cit9CiAKIHN0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19waWRfdm5yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCXJldHVybiBwaWRfdm5yKHRhc2tfcGlkKHRzaykpOworCXJldHVybiBfX3Rhc2tfcGlkX25yX25zKHRzaywgUElEVFlQRV9QSUQsIE5VTEwpOwogfQogCiAKQEAgLTE1MzQsMzEgKzE1MzAsMzQgQEAKIH0KIAogCi1zdGF0aWMgaW5saW5lIHBpZF90IHRhc2tfcGdycF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3N0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19wZ3JwX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCiB7Ci0JcmV0dXJuIHRzay0+c2lnbmFsLT5fX3BncnA7CisJcmV0dXJuIF9fdGFza19waWRfbnJfbnModHNrLCBQSURUWVBFX1BHSUQsIG5zKTsKIH0KIAotcGlkX3QgdGFza19wZ3JwX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpOwotCiBzdGF0aWMgaW5saW5lIHBpZF90IHRhc2tfcGdycF92bnIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JcmV0dXJuIHBpZF92bnIodGFza19wZ3JwKHRzaykpOworCXJldHVybiBfX3Rhc2tfcGlkX25yX25zKHRzaywgUElEVFlQRV9QR0lELCBOVUxMKTsKIH0KIAogCi1zdGF0aWMgaW5saW5lIHBpZF90IHRhc2tfc2Vzc2lvbl9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3N0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19zZXNzaW9uX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQkJCQlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCiB7Ci0JcmV0dXJuIHRzay0+c2lnbmFsLT5fX3Nlc3Npb247CisJcmV0dXJuIF9fdGFza19waWRfbnJfbnModHNrLCBQSURUWVBFX1NJRCwgbnMpOwogfQogCi1waWRfdCB0YXNrX3Nlc3Npb25fbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyk7Ci0KIHN0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19zZXNzaW9uX3ZucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQlyZXR1cm4gcGlkX3Zucih0YXNrX3Nlc3Npb24odHNrKSk7CisJcmV0dXJuIF9fdGFza19waWRfbnJfbnModHNrLCBQSURUWVBFX1NJRCwgTlVMTCk7CiB9CiAKKy8qIG9ic29sZXRlLCBkbyBub3QgdXNlICovCitzdGF0aWMgaW5saW5lIHBpZF90IHRhc2tfcGdycF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gdGFza19wZ3JwX25yX25zKHRzaywgJmluaXRfcGlkX25zKTsKK30KIAogLyoqCiAgKiBwaWRfYWxpdmUgLSBjaGVjayB0aGF0IGEgdGFzayBzdHJ1Y3R1cmUgaXMgbm90IHN0YWxlCkBAIC0xOTY4LDcgKzE5NjcsOCBAQAogLyogQWxsb2NhdGUgYSBuZXcgbW0gc3RydWN0dXJlIGFuZCBjb3B5IGNvbnRlbnRzIGZyb20gdHNrLT5tbSAqLwogZXh0ZXJuIHN0cnVjdCBtbV9zdHJ1Y3QgKmR1cF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAKLWV4dGVybiBpbnQgIGNvcHlfdGhyZWFkKGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBwdF9yZWdzICopOworZXh0ZXJuIGludCBjb3B5X3RocmVhZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkJc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBwdF9yZWdzICopOwogZXh0ZXJuIHZvaWQgZmx1c2hfdGhyZWFkKHZvaWQpOwogZXh0ZXJuIHZvaWQgZXhpdF90aHJlYWQodm9pZCk7CiAKQEAgLTIwNTMsNiArMjA1MywxMSBAQAogI2RlZmluZSBkZWxheV9ncm91cF9sZWFkZXIocCkgXAogCQkodGhyZWFkX2dyb3VwX2xlYWRlcihwKSAmJiAhdGhyZWFkX2dyb3VwX2VtcHR5KHApKQogCitzdGF0aWMgaW5saW5lIGludCB0YXNrX2RldGFjaGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlyZXR1cm4gcC0+ZXhpdF9zaWduYWwgPT0gLTE7Cit9CisKIC8qCiAgKiBQcm90ZWN0cyAtPmZzLCAtPmZpbGVzLCAtPm1tLCAtPmdyb3VwX2luZm8sIC0+Y29tbSwga2V5cmluZwogICogc3Vic2NyaXB0aW9ucyBhbmQgc3luY2hyb25pc2VzIHdpdGggd2FpdDQoKS4gIEFsc28gdXNlZCBpbiBwcm9jZnMuICBBbHNvCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3NsYWJfZGVmLmgKaW5kZXggNmNhNmE3Yi4uZjQ1MjM2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbGFiX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xhYl9kZWYuaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CQkvKiBrbWFsbG9jX3NpemVzLmggbmVlZHMgUEFHRV9TSVpFICovCiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CQkvKiBrbWFsbG9jX3NpemVzLmggbmVlZHMgTDFfQ0FDSEVfQllURVMgKi8KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPHRyYWNlL2ttZW10cmFjZS5oPgogCiAvKiBTaXplIGRlc2NyaXB0aW9uIHN0cnVjdCBmb3IgZ2VuZXJhbCBjYWNoZXMuICovCiBzdHJ1Y3QgY2FjaGVfc2l6ZXMgewpAQCAtMjgsOCArMjksMjYgQEAKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKiwgZ2ZwX3QpOwogdm9pZCAqX19rbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncyk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCisjaWZkZWYgQ09ORklHX0tNRU1UUkFDRQorZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBmbGFncyk7CitleHRlcm4gc2l6ZV90IHNsYWJfYnVmZmVyX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCk7CisjZWxzZQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICoKK2ttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBmbGFncykKIHsKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhjYWNoZXAsIGZsYWdzKTsKK30KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNsYWJfYnVmZmVyX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQoreworCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7CisJdm9pZCAqcmV0OworCiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKSB7CiAJCWludCBpID0gMDsKIApAQCAtNDcsMTAgKzY2LDE3IEBACiBmb3VuZDoKICNpZmRlZiBDT05GSUdfWk9ORV9ETUEKIAkJaWYgKGZsYWdzICYgR0ZQX0RNQSkKLQkJCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKG1hbGxvY19zaXplc1tpXS5jc19kbWFjYWNoZXAsCi0JCQkJCQlmbGFncyk7CisJCQljYWNoZXAgPSBtYWxsb2Nfc2l6ZXNbaV0uY3NfZG1hY2FjaGVwOworCQllbHNlCiAjZW5kaWYKLQkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MobWFsbG9jX3NpemVzW2ldLmNzX2NhY2hlcCwgZmxhZ3MpOworCQkJY2FjaGVwID0gbWFsbG9jX3NpemVzW2ldLmNzX2NhY2hlcDsKKworCQlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jX25vdHJhY2UoY2FjaGVwLCBmbGFncyk7CisKKwkJa21lbXRyYWNlX21hcmtfYWxsb2MoS01FTVRSQUNFX1RZUEVfS01BTExPQywgX1RISVNfSVBfLCByZXQsCisJCQkJICAgICBzaXplLCBzbGFiX2J1ZmZlcl9zaXplKGNhY2hlcCksIGZsYWdzKTsKKworCQlyZXR1cm4gcmV0OwogCX0KIAlyZXR1cm4gX19rbWFsbG9jKHNpemUsIGZsYWdzKTsKIH0KQEAgLTU5LDggKzg1LDI1IEBACiBleHRlcm4gdm9pZCAqX19rbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSk7CiBleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90IGZsYWdzLCBpbnQgbm9kZSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCisjaWZkZWYgQ09ORklHX0tNRU1UUkFDRQorZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsCisJCQkJCSAgIGdmcF90IGZsYWdzLAorCQkJCQkgICBpbnQgbm9kZWlkKTsKKyNlbHNlCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKgora21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJCSAgICAgIGdmcF90IGZsYWdzLAorCQkJICAgICAgaW50IG5vZGVpZCkKIHsKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlcCwgZmxhZ3MsIG5vZGVpZCk7Cit9CisjZW5kaWYKKworc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKK3sKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOworCXZvaWQgKnJldDsKKwogCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSkgewogCQlpbnQgaSA9IDA7CiAKQEAgLTc4LDExICsxMjEsMTggQEAKIGZvdW5kOgogI2lmZGVmIENPTkZJR19aT05FX0RNQQogCQlpZiAoZmxhZ3MgJiBHRlBfRE1BKQotCQkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShtYWxsb2Nfc2l6ZXNbaV0uY3NfZG1hY2FjaGVwLAotCQkJCQkJZmxhZ3MsIG5vZGUpOworCQkJY2FjaGVwID0gbWFsbG9jX3NpemVzW2ldLmNzX2RtYWNhY2hlcDsKKwkJZWxzZQogI2VuZGlmCi0JCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUobWFsbG9jX3NpemVzW2ldLmNzX2NhY2hlcCwKLQkJCQkJCWZsYWdzLCBub2RlKTsKKwkJCWNhY2hlcCA9IG1hbGxvY19zaXplc1tpXS5jc19jYWNoZXA7CisKKwkJcmV0ID0ga21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2UoY2FjaGVwLCBmbGFncywgbm9kZSk7CisKKwkJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLCBfVEhJU19JUF8sCisJCQkJCSAgcmV0LCBzaXplLCBzbGFiX2J1ZmZlcl9zaXplKGNhY2hlcCksCisJCQkJCSAgZmxhZ3MsIG5vZGUpOworCisJCXJldHVybiByZXQ7CiAJfQogCXJldHVybiBfX2ttYWxsb2Nfbm9kZShzaXplLCBmbGFncywgbm9kZSk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Nsb2JfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3Nsb2JfZGVmLmgKaW5kZXggNTlhM2ZhNC4uMGVjMDBiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbG9iX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xvYl9kZWYuaApAQCAtMywxNCArMywxNSBAQAogCiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKiwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKTsKIAotc3RhdGljIGlubGluZSB2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsCisJCQkJCSAgICAgIGdmcF90IGZsYWdzKQogewogCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgLTEpOwogfQogCiB2b2lkICpfX2ttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKTsKIAotc3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqa21hbGxvY19ub2RlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IG5vZGUpCiB7CiAJcmV0dXJuIF9fa21hbGxvY19ub2RlKHNpemUsIGZsYWdzLCBub2RlKTsKIH0KQEAgLTIzLDEyICsyNCwxMiBAQAogICoga21hbGxvYyBpcyB0aGUgbm9ybWFsIG1ldGhvZCBvZiBhbGxvY2F0aW5nIG1lbW9yeQogICogaW4gdGhlIGtlcm5lbC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJcmV0dXJuIF9fa21hbGxvY19ub2RlKHNpemUsIGZsYWdzLCAtMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqX19rbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19rbWFsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKIHsKIAlyZXR1cm4ga21hbGxvYyhzaXplLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Nsb3ctd29yay5oIGIvaW5jbHVkZS9saW51eC9zbG93LXdvcmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTk1ODI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zbG93LXdvcmsuaApAQCAtMCwwICsxLDk1IEBACisvKiBXb3JrZXIgdGhyZWFkIHBvb2wgZm9yIHNsb3cgaXRlbXMsIHN1Y2ggYXMgZmlsZXN5c3RlbSBsb29rdXBzIG9yIG1rZGlycworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9zbG93LXdvcmsudHh0CisgKi8KKworI2lmbmRlZiBfTElOVVhfU0xPV19XT1JLX0gKKyNkZWZpbmUgX0xJTlVYX1NMT1dfV09SS19ICisKKyNpZmRlZiBDT05GSUdfU0xPV19XT1JLCisKKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKworc3RydWN0IHNsb3dfd29yazsKKworLyoKKyAqIFRoZSBvcGVyYXRpb25zIHVzZWQgdG8gc3VwcG9ydCBzbG93IHdvcmsgaXRlbXMKKyAqLworc3RydWN0IHNsb3dfd29ya19vcHMgeworCS8qIGdldCBhIHJlZiBvbiBhIHdvcmsgaXRlbQorCSAqIC0gcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgLXZlIGlmIG5vdAorCSAqLworCWludCAoKmdldF9yZWYpKHN0cnVjdCBzbG93X3dvcmsgKndvcmspOworCisJLyogZGlzY2FyZCBhIHJlZiB0byBhIHdvcmsgaXRlbSAqLworCXZvaWQgKCpwdXRfcmVmKShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKTsKKworCS8qIGV4ZWN1dGUgYSB3b3JrIGl0ZW0gKi8KKwl2b2lkICgqZXhlY3V0ZSkoc3RydWN0IHNsb3dfd29yayAqd29yayk7Cit9OworCisvKgorICogQSBzbG93IHdvcmsgaXRlbQorICogLSBBIHJlZmVyZW5jZSBpcyBoZWxkIG9uIHRoZSBwYXJlbnQgb2JqZWN0IGJ5IHRoZSB0aHJlYWQgcG9vbCB3aGVuIGl0IGlzCisgKiAgIHF1ZXVlZAorICovCitzdHJ1Y3Qgc2xvd193b3JrIHsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKyNkZWZpbmUgU0xPV19XT1JLX1BFTkRJTkcJMAkvKiBpdGVtIHBlbmRpbmcgKGZ1cnRoZXIpIGV4ZWN1dGlvbiAqLworI2RlZmluZSBTTE9XX1dPUktfRVhFQ1VUSU5HCTEJLyogaXRlbSBjdXJyZW50bHkgZXhlY3V0aW5nICovCisjZGVmaW5lIFNMT1dfV09SS19FTlFfREVGRVJSRUQJMgkvKiBpdGVtIGVucXVldWUgZGVmZXJyZWQgKi8KKyNkZWZpbmUgU0xPV19XT1JLX1ZFUllfU0xPVwkzCS8qIGl0ZW0gaXMgdmVyeSBzbG93ICovCisJY29uc3Qgc3RydWN0IHNsb3dfd29ya19vcHMgKm9wczsgLyogb3BlcmF0aW9ucyB0YWJsZSBmb3IgdGhpcyBpdGVtICovCisJc3RydWN0IGxpc3RfaGVhZAlsaW5rOwkvKiBsaW5rIGluIHF1ZXVlICovCit9OworCisvKioKKyAqIHNsb3dfd29ya19pbml0IC0gSW5pdGlhbGlzZSBhIHNsb3cgd29yayBpdGVtCisgKiBAd29yazogVGhlIHdvcmsgaXRlbSB0byBpbml0aWFsaXNlCisgKiBAb3BzOiBUaGUgb3BlcmF0aW9ucyB0byB1c2UgdG8gaGFuZGxlIHRoZSBzbG93IHdvcmsgaXRlbQorICoKKyAqIEluaXRpYWxpc2UgYSBzbG93IHdvcmsgaXRlbS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNsb3dfd29ya19pbml0KHN0cnVjdCBzbG93X3dvcmsgKndvcmssCisJCQkJICBjb25zdCBzdHJ1Y3Qgc2xvd193b3JrX29wcyAqb3BzKQoreworCXdvcmstPmZsYWdzID0gMDsKKwl3b3JrLT5vcHMgPSBvcHM7CisJSU5JVF9MSVNUX0hFQUQoJndvcmstPmxpbmspOworfQorCisvKioKKyAqIHNsb3dfd29ya19pbml0IC0gSW5pdGlhbGlzZSBhIHZlcnkgc2xvdyB3b3JrIGl0ZW0KKyAqIEB3b3JrOiBUaGUgd29yayBpdGVtIHRvIGluaXRpYWxpc2UKKyAqIEBvcHM6IFRoZSBvcGVyYXRpb25zIHRvIHVzZSB0byBoYW5kbGUgdGhlIHNsb3cgd29yayBpdGVtCisgKgorICogSW5pdGlhbGlzZSBhIHZlcnkgc2xvdyB3b3JrIGl0ZW0uICBUaGlzIGl0ZW0gd2lsbCBiZSByZXN0cmljdGVkIHN1Y2ggdGhhdAorICogb25seSBhIGNlcnRhaW4gbnVtYmVyIG9mIHRoZSBwb29sIHRocmVhZHMgd2lsbCBiZSBhYmxlIHRvIGV4ZWN1dGUgaXRlbXMgb2YKKyAqIHRoaXMgdHlwZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHZzbG93X3dvcmtfaW5pdChzdHJ1Y3Qgc2xvd193b3JrICp3b3JrLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzICpvcHMpCit7CisJd29yay0+ZmxhZ3MgPSAxIDw8IFNMT1dfV09SS19WRVJZX1NMT1c7CisJd29yay0+b3BzID0gb3BzOworCUlOSVRfTElTVF9IRUFEKCZ3b3JrLT5saW5rKTsKK30KKworZXh0ZXJuIGludCBzbG93X3dvcmtfZW5xdWV1ZShzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKTsKK2V4dGVybiBpbnQgc2xvd193b3JrX3JlZ2lzdGVyX3VzZXIodm9pZCk7CitleHRlcm4gdm9pZCBzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKHZvaWQpOworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorZXh0ZXJuIGN0bF90YWJsZSBzbG93X3dvcmtfc3lzY3Rsc1tdOworI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfU0xPV19XT1JLICovCisjZW5kaWYgLyogX0xJTlVYX1NMT1dfV09SS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmggYi9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKaW5kZXggZTM3YjZhYS4uYTFmOTA1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaApAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDx0cmFjZS9rbWVtdHJhY2UuaD4KIAogZW51bSBzdGF0X2l0ZW0gewogCUFMTE9DX0ZBU1RQQVRILAkJLyogQWxsb2NhdGlvbiBmcm9tIGNwdSBzbGFiICovCkBAIC0yMTcsMTMgKzIxOCwzMSBAQAogdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCk7CiB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKTsKIAorI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKK2V4dGVybiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vdHJhY2Uoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzKTsKKyNlbHNlCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKgora21lbV9jYWNoZV9hbGxvY19ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncykKK3sKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhzLCBnZnBmbGFncyk7Cit9CisjZW5kaWYKKwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jX2xhcmdlKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKIHsKLQlyZXR1cm4gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKGZsYWdzIHwgX19HRlBfQ09NUCwgZ2V0X29yZGVyKHNpemUpKTsKKwl1bnNpZ25lZCBpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisJdm9pZCAqcmV0ID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlcyhmbGFncyB8IF9fR0ZQX0NPTVAsIG9yZGVyKTsKKworCWttZW10cmFjZV9tYXJrX2FsbG9jKEtNRU1UUkFDRV9UWVBFX0tNQUxMT0MsIF9USElTX0lQXywgcmV0LAorCQkJICAgICBzaXplLCBQQUdFX1NJWkUgPDwgb3JkZXIsIGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCiB7CisJdm9pZCAqcmV0OworCiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKSB7CiAJCWlmIChzaXplID4gU0xVQl9NQVhfU0laRSkKIAkJCXJldHVybiBrbWFsbG9jX2xhcmdlKHNpemUsIGZsYWdzKTsKQEAgLTIzNCw3ICsyNTMsMTMgQEAKIAkJCWlmICghcykKIAkJCQlyZXR1cm4gWkVST19TSVpFX1BUUjsKIAotCQkJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MocywgZmxhZ3MpOworCQkJcmV0ID0ga21lbV9jYWNoZV9hbGxvY19ub3RyYWNlKHMsIGZsYWdzKTsKKworCQkJa21lbXRyYWNlX21hcmtfYWxsb2MoS01FTVRSQUNFX1RZUEVfS01BTExPQywKKwkJCQkJICAgICBfVEhJU19JUF8sIHJldCwKKwkJCQkJICAgICBzaXplLCBzLT5zaXplLCBmbGFncyk7CisKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAJcmV0dXJuIF9fa21hbGxvYyhzaXplLCBmbGFncyk7CkBAIC0yNDQsOCArMjY5LDI0IEBACiB2b2lkICpfX2ttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKTsKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCBmbGFncywgaW50IG5vZGUpOwogCisjaWZkZWYgQ09ORklHX0tNRU1UUkFDRQorZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLAorCQkJCQkgICBnZnBfdCBnZnBmbGFncywKKwkJCQkJICAgaW50IG5vZGUpOworI2Vsc2UKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqCitrbWVtX2NhY2hlX2FsbG9jX25vZGVfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKKwkJCSAgICAgIGdmcF90IGdmcGZsYWdzLAorCQkJICAgICAgaW50IG5vZGUpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2Nfbm9kZShzLCBnZnBmbGFncywgbm9kZSk7Cit9CisjZW5kaWYKKwogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKIHsKKwl2b2lkICpyZXQ7CisKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkgJiYKIAkJc2l6ZSA8PSBTTFVCX01BWF9TSVpFICYmICEoZmxhZ3MgJiBTTFVCX0RNQSkpIHsKIAkJCXN0cnVjdCBrbWVtX2NhY2hlICpzID0ga21hbGxvY19zbGFiKHNpemUpOwpAQCAtMjUzLDcgKzI5NCwxMyBAQAogCQlpZiAoIXMpCiAJCQlyZXR1cm4gWkVST19TSVpFX1BUUjsKIAotCQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvY19ub2RlKHMsIGZsYWdzLCBub2RlKTsKKwkJcmV0ID0ga21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2UocywgZmxhZ3MsIG5vZGUpOworCisJCWttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoS01FTVRSQUNFX1RZUEVfS01BTExPQywKKwkJCQkJICBfVEhJU19JUF8sIHJldCwKKwkJCQkJICBzaXplLCBzLT5zaXplLCBmbGFncywgbm9kZSk7CisKKwkJcmV0dXJuIHJldDsKIAl9CiAJcmV0dXJuIF9fa21hbGxvY19ub2RlKHNpemUsIGZsYWdzLCBub2RlKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21wLmggYi9pbmNsdWRlL2xpbnV4L3NtcC5oCmluZGV4IGJiYWNiN2IuLmE2OWRiODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbXAuaApAQCAtMzgsNyArMzgsNyBAQAogLyoKICAqIG1haW4gY3Jvc3MtQ1BVIGludGVyZmFjZXMsIGhhbmRsZXMgSU5JVCwgVExCIGZsdXNoLCBTVE9QLCBldGMuCiAgKiAoZGVmaW5lZCBpbiBhc20gaGVhZGVyKToKLSAqLyAKKyAqLwogCiAvKgogICogc3RvcHMgYWxsIENQVXMgYnV0IHRoZSBjdXJyZW50IG9uZToKQEAgLTgyLDcgKzgyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShpbnQgY3B1aWQsIHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpkYXRhKTsKK3ZvaWQgX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoaW50IGNwdWlkLCBzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqZGF0YSwKKwkJCQlpbnQgd2FpdCk7CiAKIC8qCiAgKiBHZW5lcmljIGFuZCBhcmNoIGhlbHBlcnMKQEAgLTEyMSw2ICsxMjIsOCBAQAogCiAjZWxzZSAvKiAhU01QICovCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfc2VuZF9zdG9wKHZvaWQpIHsgfQorCiAvKgogICoJVGhlc2UgbWFjcm9zIGZvbGQgdGhlIFNNUCBmdW5jdGlvbmFsaXR5IGludG8gYSBzaW5nbGUgQ1BVIHN5c3RlbQogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvbnlwaS5oIGIvaW5jbHVkZS9saW51eC9zb255cGkuaAppbmRleCBmNDFmZmQ3Li4zNGM0NDc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvbnlwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ueXBpLmgKQEAgLTEwMyw2ICsxMDMsMTQgQEAKICNkZWZpbmUgU09OWVBJX0VWRU5UX1dJUkVMRVNTX09GRgkJNjEKICNkZWZpbmUgU09OWVBJX0VWRU5UX1pPT01fSU5fUFJFU1NFRAkJNjIKICNkZWZpbmUgU09OWVBJX0VWRU5UX1pPT01fT1VUX1BSRVNTRUQJCTYzCisjZGVmaW5lIFNPTllQSV9FVkVOVF9DRF9FSkVDVF9QUkVTU0VECQk2NAorI2RlZmluZSBTT05ZUElfRVZFTlRfTU9ERUtFWV9QUkVTU0VECQk2NQorI2RlZmluZSBTT05ZUElfRVZFTlRfUEtFWV9QNAkJCTY2CisjZGVmaW5lIFNPTllQSV9FVkVOVF9QS0VZX1A1CQkJNjcKKyNkZWZpbmUgU09OWVBJX0VWRU5UX1NFVFRJTkdLRVlfUFJFU1NFRAkJNjgKKyNkZWZpbmUgU09OWVBJX0VWRU5UX1ZPTFVNRV9JTkNfUFJFU1NFRAkJNjkKKyNkZWZpbmUgU09OWVBJX0VWRU5UX1ZPTFVNRV9ERUNfUFJFU1NFRAkJNzAKKyNkZWZpbmUgU09OWVBJX0VWRU5UX0JSSUdIVE5FU1NfUFJFU1NFRAkJNzEKIAogLyogZ2V0L3NldCBicmlnaHRuZXNzICovCiAjZGVmaW5lIFNPTllQSV9JT0NHQlJUCQlfSU9SKCd2JywgMCwgX191OCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL2VlcHJvbS5oIGIvaW5jbHVkZS9saW51eC9zcGkvZWVwcm9tLmgKaW5kZXggMTA4NTIxMi4uMzA2ZTdiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvZWVwcm9tLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvZWVwcm9tLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fTElOVVhfU1BJX0VFUFJPTV9ICiAjZGVmaW5lIF9fTElOVVhfU1BJX0VFUFJPTV9ICiAKKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKwogLyoKICAqIFB1dCBvbmUgb2YgdGhlc2Ugc3RydWN0dXJlcyBpbiBwbGF0Zm9ybV9kYXRhIGZvciBTUEkgRUVQUk9NUyBoYW5kbGVkCiAgKiBieSB0aGUgImF0MjUiIGRyaXZlci4gIE9uIFNQSSwgbW9zdCBFRVBST01TIHVuZGVyc3RhbmQgdGhlIHNhbWUgY29yZQpAQCAtMTcsNiArMTksMTAgQEAKICNkZWZpbmUJRUVfQUREUjIJMHgwMDAyCQkJLyogMTYgYml0IGFkZHJzICovCiAjZGVmaW5lCUVFX0FERFIzCTB4MDAwNAkJCS8qIDI0IGJpdCBhZGRycyAqLwogI2RlZmluZQlFRV9SRUFET05MWQkweDAwMDgJCQkvKiBkaXNhbGxvdyB3cml0ZXMgKi8KKworCS8qIGZvciBleHBvcnRpbmcgdGhpcyBjaGlwJ3MgZGF0YSB0byBvdGhlciBrZXJuZWwgY29kZSAqLworCXZvaWQgKCpzZXR1cCkoc3RydWN0IG1lbW9yeV9hY2Nlc3NvciAqbWVtLCB2b2lkICpjb250ZXh0KTsKKwl2b2lkICpjb250ZXh0OwogfTsKIAogI2VuZGlmIC8qIF9fTElOVVhfU1BJX0VFUFJPTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9zcGlfZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpX2dwaW8uaAppbmRleCAwZjAxYTBmLi5jYTY3ODJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9zcGlfZ3Bpby5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL3NwaV9ncGlvLmgKQEAgLTI1LDEwICsyNSwxNiBAQAogICoJLi4uCiAgKgl9OwogICoKKyAqIElmIGNoaXBzZWxlY3QgaXMgbm90IHVzZWQgKHRoZXJlJ3Mgb25seSBvbmUgZGV2aWNlIG9uIHRoZSBidXMpLCBhc3NpZ24KKyAqIFNQSV9HUElPX05PX0NISVBTRUxFQ1QgdG8gdGhlIGNvbnRyb2xsZXJfZGF0YToKKyAqCQkuY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgU1BJX0dQSU9fTk9fQ0hJUFNFTEVDVDsKKyAqCiAgKiBJZiB0aGUgYml0YmFuZ2VkIGJ1cyBpcyBsYXRlciBzd2l0Y2hlZCB0byBhICJuYXRpdmUiIGNvbnRyb2xsZXIsCiAgKiB0aGF0IHBsYXRmb3JtX2RldmljZSBhbmQgY29udHJvbGxlcl9kYXRhIHNob3VsZCBiZSByZW1vdmVkLgogICovCiAKKyNkZWZpbmUgU1BJX0dQSU9fTk9fQ0hJUFNFTEVDVAkJKCh1bnNpZ25lZCBsb25nKS0xbCkKKwogLyoqCiAgKiBzdHJ1Y3Qgc3BpX2dwaW9fcGxhdGZvcm1fZGF0YSAtIHBhcmFtZXRlciBmb3IgYml0YmFuZ2VkIFNQSSBtYXN0ZXIKICAqIEBzY2s6IG51bWJlciBvZiB0aGUgR1BJTyB1c2VkIGZvciBjbG9jayBvdXRwdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaAppbmRleCBhMGM2NmEyLi4yNTJiMjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCkBAIC0xNTMsOSArMTUzLDExIEBACiAgZXh0ZXJuIGludCBfcmF3X3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKTsKICBleHRlcm4gdm9pZCBfcmF3X3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spOwogIGV4dGVybiB2b2lkIF9yYXdfcmVhZF9sb2NrKHJ3bG9ja190ICpsb2NrKTsKKyNkZWZpbmUgX3Jhd19yZWFkX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9yYXdfcmVhZF9sb2NrKGxvY2spCiAgZXh0ZXJuIGludCBfcmF3X3JlYWRfdHJ5bG9jayhyd2xvY2tfdCAqbG9jayk7CiAgZXh0ZXJuIHZvaWQgX3Jhd19yZWFkX3VubG9jayhyd2xvY2tfdCAqbG9jayk7CiAgZXh0ZXJuIHZvaWQgX3Jhd193cml0ZV9sb2NrKHJ3bG9ja190ICpsb2NrKTsKKyNkZWZpbmUgX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfcmF3X3dyaXRlX2xvY2sobG9jaykKICBleHRlcm4gaW50IF9yYXdfd3JpdGVfdHJ5bG9jayhyd2xvY2tfdCAqbG9jayk7CiAgZXh0ZXJuIHZvaWQgX3Jhd193cml0ZV91bmxvY2socndsb2NrX3QgKmxvY2spOwogI2Vsc2UKQEAgLTE2NSw5ICsxNjcsMTMgQEAKICMgZGVmaW5lIF9yYXdfc3Bpbl90cnlsb2NrKGxvY2spCV9fcmF3X3NwaW5fdHJ5bG9jaygmKGxvY2spLT5yYXdfbG9jaykKICMgZGVmaW5lIF9yYXdfc3Bpbl91bmxvY2sobG9jaykJCV9fcmF3X3NwaW5fdW5sb2NrKCYobG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgX3Jhd19yZWFkX2xvY2socndsb2NrKQkJX19yYXdfcmVhZF9sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCisjIGRlZmluZSBfcmF3X3JlYWRfbG9ja19mbGFncyhsb2NrLCBmbGFncykgXAorCQlfX3Jhd19yZWFkX2xvY2tfZmxhZ3MoJihsb2NrKS0+cmF3X2xvY2ssICooZmxhZ3MpKQogIyBkZWZpbmUgX3Jhd19yZWFkX3RyeWxvY2socndsb2NrKQlfX3Jhd19yZWFkX3RyeWxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKICMgZGVmaW5lIF9yYXdfcmVhZF91bmxvY2socndsb2NrKQlfX3Jhd19yZWFkX3VubG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgX3Jhd193cml0ZV9sb2NrKHJ3bG9jaykJX19yYXdfd3JpdGVfbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorIyBkZWZpbmUgX3Jhd193cml0ZV9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBcCisJCV9fcmF3X3dyaXRlX2xvY2tfZmxhZ3MoJihsb2NrKS0+cmF3X2xvY2ssICooZmxhZ3MpKQogIyBkZWZpbmUgX3Jhd193cml0ZV90cnlsb2NrKHJ3bG9jaykJX19yYXdfd3JpdGVfdHJ5bG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQogIyBkZWZpbmUgX3Jhd193cml0ZV91bmxvY2socndsb2NrKQlfX3Jhd193cml0ZV91bmxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKaW5kZXggZDE4ZmMxOS4uNDg5MDE5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCkBAIC0xMCw4ICsxMCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CS8qIGZvciBpbmxpbmUgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkvKiBmb3Igc2l6ZV90ICovCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIGZvciBOVUxMICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CiAKIGV4dGVybiBjaGFyICpzdHJuZHVwX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKiwgbG9uZyk7CitleHRlcm4gdm9pZCAqbWVtZHVwX3VzZXIoY29uc3Qgdm9pZCBfX3VzZXIgKiwgc2l6ZV90KTsKIAogLyoKICAqIEluY2x1ZGUgbWFjaGluZSBzcGVjaWZpYyBpbmxpbmUgcm91dGluZXMKQEAgLTExMSw4ICsxMTMsMjMgQEAKIAogZXh0ZXJuIGJvb2wgc3lzZnNfc3RyZXEoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsKIAorI2lmZGVmIENPTkZJR19CSU5BUllfUFJJTlRGCitpbnQgdmJpbl9wcmludGYodTMyICpiaW5fYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOworaW50IGJzdHJfcHJpbnRmKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgdTMyICpiaW5fYnVmKTsKK2ludCBicHJpbnRmKHUzMiAqYmluX2J1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX3ByaW50ZigzLCA0KTsKKyNlbmRpZgorCiBleHRlcm4gc3NpemVfdCBtZW1vcnlfcmVhZF9mcm9tX2J1ZmZlcih2b2lkICp0bywgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MsCiAJCQljb25zdCB2b2lkICpmcm9tLCBzaXplX3QgYXZhaWxhYmxlKTsKIAorLyoqCisgKiBzdHJzdGFydHMgLSBkb2VzIEBzdHIgc3RhcnQgd2l0aCBAcHJlZml4PworICogQHN0cjogc3RyaW5nIHRvIGV4YW1pbmUKKyAqIEBwcmVmaXg6IHByZWZpeCB0byBsb29rIGZvci4KKyAqLworc3RhdGljIGlubGluZSBib29sIHN0cnN0YXJ0cyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlyZXR1cm4gc3RybmNtcChzdHIsIHByZWZpeCwgc3RybGVuKHByZWZpeCkpID09IDA7Cit9CiAjZW5kaWYKICNlbmRpZiAvKiBfTElOVVhfU1RSSU5HX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCmluZGV4IDM0MzVkMjQuLmQzYTRjMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Yy5oCkBAIC02OSw3ICs2OSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAlzdl90ZW1wc29ja3M7CS8qIGFsbCB0ZW1wb3Jhcnkgc29ja2V0cyAqLwogCWludAkJCXN2X3RtcGNudDsJLyogY291bnQgb2YgdGVtcG9yYXJ5IHNvY2tldHMgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdAlzdl90ZW1wdGltZXI7CS8qIHRpbWVyIGZvciBhZ2luZyB0ZW1wb3Jhcnkgc29ja2V0cyAqLwotCXNhX2ZhbWlseV90CQlzdl9mYW1pbHk7CS8qIGxpc3RlbmVyJ3MgYWRkcmVzcyBmYW1pbHkgKi8KIAogCWNoYXIgKgkJCXN2X25hbWU7CS8qIHNlcnZpY2UgbmFtZSAqLwogCkBAIC0zODUsMTkgKzM4NCwxOSBAQAogLyoKICAqIEZ1bmN0aW9uIHByb3RvdHlwZXMuCiAgKi8KLXN0cnVjdCBzdmNfc2VydiAqc3ZjX2NyZWF0ZShzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiwgdW5zaWduZWQgaW50LCBzYV9mYW1pbHlfdCwKK3N0cnVjdCBzdmNfc2VydiAqc3ZjX2NyZWF0ZShzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiwgdW5zaWduZWQgaW50LAogCQkJICAgIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHN2Y19zZXJ2ICopKTsKIHN0cnVjdCBzdmNfcnFzdCAqc3ZjX3ByZXBhcmVfdGhyZWFkKHN0cnVjdCBzdmNfc2VydiAqc2VydiwKIAkJCQkJc3RydWN0IHN2Y19wb29sICpwb29sKTsKIHZvaWQJCSAgIHN2Y19leGl0X3RocmVhZChzdHJ1Y3Qgc3ZjX3Jxc3QgKik7CiBzdHJ1Y3Qgc3ZjX3NlcnYgKiAgc3ZjX2NyZWF0ZV9wb29sZWQoc3RydWN0IHN2Y19wcm9ncmFtICosIHVuc2lnbmVkIGludCwKLQkJCXNhX2ZhbWlseV90LCB2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBzdmNfc2VydiAqKSwKKwkJCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHN2Y19zZXJ2ICopLAogCQkJc3ZjX3RocmVhZF9mbiwgc3RydWN0IG1vZHVsZSAqKTsKIGludAkJICAgc3ZjX3NldF9udW1fdGhyZWFkcyhzdHJ1Y3Qgc3ZjX3NlcnYgKiwgc3RydWN0IHN2Y19wb29sICosIGludCk7CiB2b2lkCQkgICBzdmNfZGVzdHJveShzdHJ1Y3Qgc3ZjX3NlcnYgKik7CiBpbnQJCSAgIHN2Y19wcm9jZXNzKHN0cnVjdCBzdmNfcnFzdCAqKTsKLWludAkJICAgc3ZjX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqLCBjb25zdCB1bnNpZ25lZCBzaG9ydCwKLQkJCQljb25zdCB1bnNpZ25lZCBzaG9ydCk7CitpbnQJCSAgIHN2Y19yZWdpc3Rlcihjb25zdCBzdHJ1Y3Qgc3ZjX3NlcnYgKiwgY29uc3QgaW50LAorCQkJCWNvbnN0IHVuc2lnbmVkIHNob3J0LCBjb25zdCB1bnNpZ25lZCBzaG9ydCk7CiAKIHZvaWQJCSAgIHN2Y193YWtlX3VwKHN0cnVjdCBzdmNfc2VydiAqKTsKIHZvaWQJCSAgIHN2Y19yZXNlcnZlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIGludCBzcGFjZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaAppbmRleCAwMTI3ZGFjLi4wZDljYjZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0LmgKQEAgLTcxLDcgKzcxLDggQEAKIHZvaWQJc3ZjX3VucmVnX3hwcnRfY2xhc3Moc3RydWN0IHN2Y194cHJ0X2NsYXNzICopOwogdm9pZAlzdmNfeHBydF9pbml0KHN0cnVjdCBzdmNfeHBydF9jbGFzcyAqLCBzdHJ1Y3Qgc3ZjX3hwcnQgKiwKIAkJICAgICAgc3RydWN0IHN2Y19zZXJ2ICopOwotaW50CXN2Y19jcmVhdGVfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKiwgY2hhciAqLCB1bnNpZ25lZCBzaG9ydCwgaW50KTsKK2ludAlzdmNfY3JlYXRlX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgaW50LAorCQkJY29uc3QgdW5zaWduZWQgc2hvcnQsIGludCk7CiB2b2lkCXN2Y194cHJ0X2VucXVldWUoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KTsKIHZvaWQJc3ZjX3hwcnRfcmVjZWl2ZWQoc3RydWN0IHN2Y194cHJ0ICopOwogdm9pZAlzdmNfeHBydF9wdXQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KTsKQEAgLTgwLDcgKzgxLDggQEAKIHZvaWQJc3ZjX2RlbGV0ZV94cHJ0KHN0cnVjdCBzdmNfeHBydCAqeHBydCk7CiBpbnQJc3ZjX3BvcnRfaXNfcHJpdmlsZWdlZChzdHJ1Y3Qgc29ja2FkZHIgKnNpbik7CiBpbnQJc3ZjX3ByaW50X3hwcnRzKGNoYXIgKmJ1ZiwgaW50IG1heGxlbik7Ci1zdHJ1Y3QJc3ZjX3hwcnQgKnN2Y19maW5kX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICosIGNoYXIgKiwgaW50LCBpbnQpOworc3RydWN0CXN2Y194cHJ0ICpzdmNfZmluZF94cHJ0KHN0cnVjdCBzdmNfc2VydiAqc2VydiwgY29uc3QgY2hhciAqeGNsX25hbWUsCisJCQljb25zdCBzYV9mYW1pbHlfdCBhZiwgY29uc3QgdW5zaWduZWQgc2hvcnQgcG9ydCk7CiBpbnQJc3ZjX3hwcnRfbmFtZXMoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjaGFyICpidWYsIGludCBidWZsZW4pOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc3ZjX3hwcnRfZ2V0KHN0cnVjdCBzdmNfeHBydCAqeHBydCkKQEAgLTg4LDI5ICs5MCwzMiBAQAogCWtyZWZfZ2V0KCZ4cHJ0LT54cHRfcmVmKTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9zZXRfbG9jYWwoc3RydWN0IHN2Y194cHJ0ICp4cHJ0LAotCQkJCSAgICAgIHN0cnVjdCBzb2NrYWRkciAqc2EsIGludCBzYWxlbikKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLAorCQkJCSAgICAgIGNvbnN0IHNpemVfdCBzYWxlbikKIHsKIAltZW1jcHkoJnhwcnQtPnhwdF9sb2NhbCwgc2EsIHNhbGVuKTsKIAl4cHJ0LT54cHRfbG9jYWxsZW4gPSBzYWxlbjsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzdmNfeHBydF9zZXRfcmVtb3RlKHN0cnVjdCBzdmNfeHBydCAqeHBydCwKLQkJCQkgICAgICAgc3RydWN0IHNvY2thZGRyICpzYSwgaW50IHNhbGVuKQorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLAorCQkJCSAgICAgICBjb25zdCBzaXplX3Qgc2FsZW4pCiB7CiAJbWVtY3B5KCZ4cHJ0LT54cHRfcmVtb3RlLCBzYSwgc2FsZW4pOwogCXhwcnQtPnhwdF9yZW1vdGVsZW4gPSBzYWxlbjsKIH0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgc3ZjX2FkZHJfcG9ydChzdHJ1Y3Qgc29ja2FkZHIgKnNhKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBzdmNfYWRkcl9wb3J0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EpCiB7Ci0JdW5zaWduZWQgc2hvcnQgcmV0ID0gMDsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKKwogCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewogCWNhc2UgQUZfSU5FVDoKLQkJcmV0ID0gbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYSktPnNpbl9wb3J0KTsKLQkJYnJlYWs7CisJCXJldHVybiBudG9ocyhzaW4tPnNpbl9wb3J0KTsKIAljYXNlIEFGX0lORVQ2OgotCQlyZXQgPSBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYSktPnNpbjZfcG9ydCk7Ci0JCWJyZWFrOworCQlyZXR1cm4gbnRvaHMoc2luNi0+c2luNl9wb3J0KTsKIAl9Ci0JcmV0dXJuIHJldDsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBzdmNfYWRkcl9sZW4oc3RydWN0IHNvY2thZGRyICpzYSkKQEAgLTEyNCwzNiArMTI5LDM5IEBACiAJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgc3ZjX3hwcnRfbG9jYWxfcG9ydChzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IHN2Y194cHJ0X2xvY2FsX3BvcnQoY29uc3Qgc3RydWN0IHN2Y194cHJ0ICp4cHJ0KQogewotCXJldHVybiBzdmNfYWRkcl9wb3J0KChzdHJ1Y3Qgc29ja2FkZHIgKikmeHBydC0+eHB0X2xvY2FsKTsKKwlyZXR1cm4gc3ZjX2FkZHJfcG9ydCgoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJnhwcnQtPnhwdF9sb2NhbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgc3ZjX3hwcnRfcmVtb3RlX3BvcnQoc3RydWN0IHN2Y194cHJ0ICp4cHJ0KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBzdmNfeHBydF9yZW1vdGVfcG9ydChjb25zdCBzdHJ1Y3Qgc3ZjX3hwcnQgKnhwcnQpCiB7Ci0JcmV0dXJuIHN2Y19hZGRyX3BvcnQoKHN0cnVjdCBzb2NrYWRkciAqKSZ4cHJ0LT54cHRfcmVtb3RlKTsKKwlyZXR1cm4gc3ZjX2FkZHJfcG9ydCgoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJnhwcnQtPnhwdF9yZW1vdGUpOwogfQogCi1zdGF0aWMgaW5saW5lIGNoYXIgKl9fc3ZjX3ByaW50X2FkZHIoc3RydWN0IHNvY2thZGRyICphZGRyLAotCQkJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKQorc3RhdGljIGlubGluZSBjaGFyICpfX3N2Y19wcmludF9hZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKwkJCQkgICAgIGNoYXIgKmJ1ZiwgY29uc3Qgc2l6ZV90IGxlbikKIHsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisKIAlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewogCWNhc2UgQUZfSU5FVDoKLQkJc25wcmludGYoYnVmLCBsZW4sICIlcEk0LCBwb3J0PSV1IiwKLQkJCSYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHIpLT5zaW5fYWRkciwKLQkJCW50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopIGFkZHIpLT5zaW5fcG9ydCkpOworCQlzbnByaW50ZihidWYsIGxlbiwgIiVwSTQsIHBvcnQ9JXUiLCAmc2luLT5zaW5fYWRkciwKKwkJCW50b2hzKHNpbi0+c2luX3BvcnQpKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFGX0lORVQ2OgogCQlzbnByaW50ZihidWYsIGxlbiwgIiVwSTYsIHBvcnQ9JXUiLAotCQkJICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyKS0+c2luNl9hZGRyLAotCQkJbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHIpLT5zaW42X3BvcnQpKTsKKwkJCSAmc2luNi0+c2luNl9hZGRyLAorCQkJbnRvaHMoc2luNi0+c2luNl9wb3J0KSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAkJc25wcmludGYoYnVmLCBsZW4sICJ1bmtub3duIGFkZHJlc3MgdHlwZTogJWQiLCBhZGRyLT5zYV9mYW1pbHkpOwogCQlicmVhazsKIAl9CisKIAlyZXR1cm4gYnVmOwogfQogI2VuZGlmIC8qIFNVTlJQQ19TVkNfWFBSVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKaW5kZXggMTFmYzcxZC4uMTc1OGQ5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaApAQCAtMjM1LDYgKzIzNSw3IEBACiAgKi8KIGludAkJCXhwcnRfcmVnaXN0ZXJfdHJhbnNwb3J0KHN0cnVjdCB4cHJ0X2NsYXNzICp0eXBlKTsKIGludAkJCXhwcnRfdW5yZWdpc3Rlcl90cmFuc3BvcnQoc3RydWN0IHhwcnRfY2xhc3MgKnR5cGUpOworaW50CQkJeHBydF9sb2FkX3RyYW5zcG9ydChjb25zdCBjaGFyICopOwogdm9pZAkJCXhwcnRfc2V0X3JldHJhbnNfdGltZW91dF9kZWYoc3RydWN0IHJwY190YXNrICp0YXNrKTsKIHZvaWQJCQl4cHJ0X3NldF9yZXRyYW5zX3RpbWVvdXRfcnR0KHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiB2b2lkCQkJeHBydF93YWtlX3BlbmRpbmdfdGFza3Moc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBpbnQgc3RhdHVzKTsKQEAgLTI1OSw2ICsyNjAsNyBAQAogI2RlZmluZSBYUFJUX0JPVU5ECQkoNCkKICNkZWZpbmUgWFBSVF9CSU5ESU5HCQkoNSkKICNkZWZpbmUgWFBSVF9DTE9TSU5HCQkoNikKKyNkZWZpbmUgWFBSVF9DT05ORUNUSU9OX0FCT1JUCSg3KQogCiBzdGF0aWMgaW5saW5lIHZvaWQgeHBydF9zZXRfY29ubmVjdGVkKHN0cnVjdCBycGNfeHBydCAqeHBydCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKaW5kZXggYzdkOWJiMTguLjNlM2E0MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCkBAIC0xLDkgKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfU1VTUEVORF9ICiAjZGVmaW5lIF9MSU5VWF9TVVNQRU5EX0gKIAotI2lmIGRlZmluZWQoQ09ORklHX1g4NikgfHwgZGVmaW5lZChDT05GSUdfRlJWKSB8fCBkZWZpbmVkKENPTkZJR19QUEMzMikgfHwgZGVmaW5lZChDT05GSUdfUFBDNjQpCi0jaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggZDMwMjE1NS4uNjJkODE0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTIxMiw3ICsyMTIsNyBAQAogCiAvKiBsaW51eC9tbS92bXNjYW4uYyAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IG9yZGVyLAotCQkJCQlnZnBfdCBnZnBfbWFzayk7CisJCQkJCWdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICptYXNrKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQkJCSAgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgbm9zd2FwLAogCQkJCQkJICB1bnNpZ25lZCBpbnQgc3dhcHBpbmVzcyk7CkBAIC0zODIsNiArMzgyLDExIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHN3YXBfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqbG9va3VwX3N3YXBfY2FjaGUoc3dwX2VudHJ5X3Qgc3dwKQogewogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeW5jbGluay5oIGIvaW5jbHVkZS9saW51eC9zeW5jbGluay5oCmluZGV4IDk5YjhiZGIuLjBmZjI3NzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3luY2xpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5bmNsaW5rLmgKQEAgLTEyNSw2ICsxMjUsNyBAQAogI2RlZmluZSBNR1NMX01PREVfTU9OT1NZTkMJMwogI2RlZmluZSBNR1NMX01PREVfQklTWU5DCTQKICNkZWZpbmUgTUdTTF9NT0RFX1JBVwkJNgorI2RlZmluZSBNR1NMX01PREVfQkFTRV9DTE9DSyAgICA3CiAKICNkZWZpbmUgTUdTTF9CVVNfVFlQRV9JU0EJMQogI2RlZmluZSBNR1NMX0JVU19UWVBFX0VJU0EJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IGY5ZjkwMGMuLjY0NzBmNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXkuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2RlZmluZSBfX1NDX0RFQ0wxKHQxLCBhMSkJdDEgYTEKICNkZWZpbmUgX19TQ19ERUNMMih0MiwgYTIsIC4uLikgdDIgYTIsIF9fU0NfREVDTDEoX19WQV9BUkdTX18pCkBAIC05NSw3ICs5Niw0NiBAQAogI2RlZmluZSBfX1NDX1RFU1Q1KHQ1LCBhNSwgLi4uKQlfX1NDX1RFU1QodDUpOyBfX1NDX1RFU1Q0KF9fVkFfQVJHU19fKQogI2RlZmluZSBfX1NDX1RFU1Q2KHQ2LCBhNiwgLi4uKQlfX1NDX1RFU1QodDYpOyBfX1NDX1RFU1Q1KF9fVkFfQVJHU19fKQogCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUworI2RlZmluZSBfX1NDX1NUUl9BREVDTDEodCwgYSkJCSNhCisjZGVmaW5lIF9fU0NfU1RSX0FERUNMMih0LCBhLCAuLi4pCSNhLCBfX1NDX1NUUl9BREVDTDEoX19WQV9BUkdTX18pCisjZGVmaW5lIF9fU0NfU1RSX0FERUNMMyh0LCBhLCAuLi4pCSNhLCBfX1NDX1NUUl9BREVDTDIoX19WQV9BUkdTX18pCisjZGVmaW5lIF9fU0NfU1RSX0FERUNMNCh0LCBhLCAuLi4pCSNhLCBfX1NDX1NUUl9BREVDTDMoX19WQV9BUkdTX18pCisjZGVmaW5lIF9fU0NfU1RSX0FERUNMNSh0LCBhLCAuLi4pCSNhLCBfX1NDX1NUUl9BREVDTDQoX19WQV9BUkdTX18pCisjZGVmaW5lIF9fU0NfU1RSX0FERUNMNih0LCBhLCAuLi4pCSNhLCBfX1NDX1NUUl9BREVDTDUoX19WQV9BUkdTX18pCisKKyNkZWZpbmUgX19TQ19TVFJfVERFQ0wxKHQsIGEpCQkjdAorI2RlZmluZSBfX1NDX1NUUl9UREVDTDIodCwgYSwgLi4uKQkjdCwgX19TQ19TVFJfVERFQ0wxKF9fVkFfQVJHU19fKQorI2RlZmluZSBfX1NDX1NUUl9UREVDTDModCwgYSwgLi4uKQkjdCwgX19TQ19TVFJfVERFQ0wyKF9fVkFfQVJHU19fKQorI2RlZmluZSBfX1NDX1NUUl9UREVDTDQodCwgYSwgLi4uKQkjdCwgX19TQ19TVFJfVERFQ0wzKF9fVkFfQVJHU19fKQorI2RlZmluZSBfX1NDX1NUUl9UREVDTDUodCwgYSwgLi4uKQkjdCwgX19TQ19TVFJfVERFQ0w0KF9fVkFfQVJHU19fKQorI2RlZmluZSBfX1NDX1NUUl9UREVDTDYodCwgYSwgLi4uKQkjdCwgX19TQ19TVFJfVERFQ0w1KF9fVkFfQVJHU19fKQorCisjZGVmaW5lIFNZU0NBTExfTUVUQURBVEEoc25hbWUsIG5iKQkJCQlcCisJc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fdXNlZAkJXAorCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKKwkgIF9fc3lzY2FsbF9tZXRhXyMjc25hbWUgPSB7CQkJCVwKKwkJLm5hbWUgCQk9ICJzeXMiI3NuYW1lLAkJCVwKKwkJLm5iX2FyZ3MgCT0gbmIsCQkJCVwKKwkJLnR5cGVzCQk9IHR5cGVzXyMjc25hbWUsCQlcCisJCS5hcmdzCQk9IGFyZ3NfIyNzbmFtZSwJCQlcCisJfQorCisjZGVmaW5lIFNZU0NBTExfREVGSU5FMChzbmFtZSkJCQkJCVwKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQlcCisJICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJXAorCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAorCSAgX19zeXNjYWxsX21ldGFfIyNzbmFtZSA9IHsJCQkJXAorCQkubmFtZSAJCT0gInN5c18iI3NuYW1lLAkJCVwKKwkJLm5iX2FyZ3MgCT0gMCwJCQkJXAorCX07CQkJCQkJCVwKKwlhc21saW5rYWdlIGxvbmcgc3lzXyMjc25hbWUodm9pZCkKKworI2Vsc2UKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKG5hbWUpCSAgIGFzbWxpbmthZ2UgbG9uZyBzeXNfIyNuYW1lKHZvaWQpCisjZW5kaWYKKwogI2RlZmluZSBTWVNDQUxMX0RFRklORTEobmFtZSwgLi4uKSBTWVNDQUxMX0RFRklORXgoMSwgXyMjbmFtZSwgX19WQV9BUkdTX18pCiAjZGVmaW5lIFNZU0NBTExfREVGSU5FMihuYW1lLCAuLi4pIFNZU0NBTExfREVGSU5FeCgyLCBfIyNuYW1lLCBfX1ZBX0FSR1NfXykKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUzKG5hbWUsIC4uLikgU1lTQ0FMTF9ERUZJTkV4KDMsIF8jI25hbWUsIF9fVkFfQVJHU19fKQpAQCAtMTE3LDEwICsxNTcsMjYgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRlRSQUNFX1NZU0NBTExTCisjZGVmaW5lIFNZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgLi4uKQkJCQlcCisJc3RhdGljIGNvbnN0IGNoYXIgKnR5cGVzXyMjc25hbWVbXSA9IHsJCQlcCisJCV9fU0NfU1RSX1RERUNMIyN4KF9fVkFfQVJHU19fKQkJCVwKKwl9OwkJCQkJCQlcCisJc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3NfIyNzbmFtZVtdID0gewkJCVwKKwkJX19TQ19TVFJfQURFQ0wjI3goX19WQV9BUkdTX18pCQkJXAorCX07CQkJCQkJCVwKKwlTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCB4KTsJCQkJXAorCV9fU1lTQ0FMTF9ERUZJTkV4KHgsIHNuYW1lLCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIFNZU0NBTExfREVGSU5FeCh4LCBzbmFtZSwgLi4uKQkJCQlcCisJX19TWVNDQUxMX0RFRklORXgoeCwgc25hbWUsIF9fVkFfQVJHU19fKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSEFWRV9TWVNDQUxMX1dSQVBQRVJTCiAKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUobmFtZSkgc3RhdGljIGlubGluZSBsb25nIFNZU0NfIyNuYW1lCi0jZGVmaW5lIFNZU0NBTExfREVGSU5FeCh4LCBuYW1lLCAuLi4pCQkJCQlcCisKKyNkZWZpbmUgX19TWVNDQUxMX0RFRklORXgoeCwgbmFtZSwgLi4uKQkJCQkJXAogCWFzbWxpbmthZ2UgbG9uZyBzeXMjI25hbWUoX19TQ19ERUNMIyN4KF9fVkFfQVJHU19fKSk7CQlcCiAJc3RhdGljIGlubGluZSBsb25nIFNZU0MjI25hbWUoX19TQ19ERUNMIyN4KF9fVkFfQVJHU19fKSk7CVwKIAlhc21saW5rYWdlIGxvbmcgU3lTIyNuYW1lKF9fU0NfTE9ORyMjeChfX1ZBX0FSR1NfXykpCQlcCkBAIC0xMzQsNyArMTkwLDcgQEAKICNlbHNlIC8qIENPTkZJR19IQVZFX1NZU0NBTExfV1JBUFBFUlMgKi8KIAogI2RlZmluZSBTWVNDQUxMX0RFRklORShuYW1lKSBhc21saW5rYWdlIGxvbmcgc3lzXyMjbmFtZQotI2RlZmluZSBTWVNDQUxMX0RFRklORXgoeCwgbmFtZSwgLi4uKQkJCQkJXAorI2RlZmluZSBfX1NZU0NBTExfREVGSU5FeCh4LCBuYW1lLCAuLi4pCQkJCQlcCiAJYXNtbGlua2FnZSBsb25nIHN5cyMjbmFtZShfX1NDX0RFQ0wjI3goX19WQV9BUkdTX18pKQogCiAjZW5kaWYgLyogQ09ORklHX0hBVkVfU1lTQ0FMTF9XUkFQUEVSUyAqLwpAQCAtNDYxLDYgKzUxNywxMCBAQAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90IHBvcyk7CiBhc21saW5rYWdlIGxvbmcgc3lzX3B3cml0ZTY0KHVuc2lnbmVkIGludCBmZCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgcG9zKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfcHJlYWR2KHVuc2lnbmVkIGxvbmcgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyBfX3VzZXIgKnZlYywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgdmxlbiwgdW5zaWduZWQgbG9uZyBwb3NfbCwgdW5zaWduZWQgbG9uZyBwb3NfaCk7Cithc21saW5rYWdlIGxvbmcgc3lzX3B3cml0ZXYodW5zaWduZWQgbG9uZyBmZCwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqdmVjLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgdmxlbiwgdW5zaWduZWQgbG9uZyBwb3NfbCwgdW5zaWduZWQgbG9uZyBwb3NfaCk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2dldGN3ZChjaGFyIF9fdXNlciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpOwogYXNtbGlua2FnZSBsb25nIHN5c19ta2Rpcihjb25zdCBjaGFyIF9fdXNlciAqcGF0aG5hbWUsIGludCBtb2RlKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfY2hkaXIoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oIGIvaW5jbHVkZS9saW51eC90aGVybWFsLmgKaW5kZXggOTE3NzA3ZS4uMWRlOGI5ZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCkBAIC0yNywyNyArMjcsNDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZTsKIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlOwogCitlbnVtIHRoZXJtYWxfZGV2aWNlX21vZGUgeworCVRIRVJNQUxfREVWSUNFX0RJU0FCTEVEID0gMCwKKwlUSEVSTUFMX0RFVklDRV9FTkFCTEVELAorfTsKKworZW51bSB0aGVybWFsX3RyaXBfdHlwZSB7CisJVEhFUk1BTF9UUklQX0FDVElWRSA9IDAsCisJVEhFUk1BTF9UUklQX1BBU1NJVkUsCisJVEhFUk1BTF9UUklQX0hPVCwKKwlUSEVSTUFMX1RSSVBfQ1JJVElDQUwsCit9OworCiBzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZV9vcHMgewogCWludCAoKmJpbmQpIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLAogCQkgICAgIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICopOwogCWludCAoKnVuYmluZCkgKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosCiAJCSAgICAgICBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqKTsKLQlpbnQgKCpnZXRfdGVtcCkgKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosIGNoYXIgKik7Ci0JaW50ICgqZ2V0X21vZGUpIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLCBjaGFyICopOwotCWludCAoKnNldF9tb2RlKSAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKiwgY29uc3QgY2hhciAqKTsKLQlpbnQgKCpnZXRfdHJpcF90eXBlKSAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKiwgaW50LCBjaGFyICopOwotCWludCAoKmdldF90cmlwX3RlbXApIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLCBpbnQsIGNoYXIgKik7CisJaW50ICgqZ2V0X3RlbXApIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLCB1bnNpZ25lZCBsb25nICopOworCWludCAoKmdldF9tb2RlKSAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKiwKKwkJCSBlbnVtIHRoZXJtYWxfZGV2aWNlX21vZGUgKik7CisJaW50ICgqc2V0X21vZGUpIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLAorCQllbnVtIHRoZXJtYWxfZGV2aWNlX21vZGUpOworCWludCAoKmdldF90cmlwX3R5cGUpIChzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLCBpbnQsCisJCWVudW0gdGhlcm1hbF90cmlwX3R5cGUgKik7CisJaW50ICgqZ2V0X3RyaXBfdGVtcCkgKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosIGludCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKik7CiAJaW50ICgqZ2V0X2NyaXRfdGVtcCkgKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcgKik7CisJaW50ICgqbm90aWZ5KSAoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKiwgaW50LAorCQkgICAgICAgZW51bSB0aGVybWFsX3RyaXBfdHlwZSk7CiB9OwogCiBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMgewotCWludCAoKmdldF9tYXhfc3RhdGUpIChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqLCBjaGFyICopOwotCWludCAoKmdldF9jdXJfc3RhdGUpIChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqLCBjaGFyICopOwotCWludCAoKnNldF9jdXJfc3RhdGUpIChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqLCB1bnNpZ25lZCBpbnQpOworCWludCAoKmdldF9tYXhfc3RhdGUpIChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqLCB1bnNpZ25lZCBsb25nICopOworCWludCAoKmdldF9jdXJfc3RhdGUpIChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqLCB1bnNpZ25lZCBsb25nICopOworCWludCAoKnNldF9jdXJfc3RhdGUpIChzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqLCB1bnNpZ25lZCBsb25nKTsKIH07CiAKICNkZWZpbmUgVEhFUk1BTF9UUklQU19OT05FIC0xCkBAIC04OCwxMSArMTA3LDE5IEBACiAJc3RydWN0IGRldmljZSBkZXZpY2U7CiAJdm9pZCAqZGV2ZGF0YTsKIAlpbnQgdHJpcHM7CisJaW50IHRjMTsKKwlpbnQgdGMyOworCWludCBwYXNzaXZlX2RlbGF5OworCWludCBwb2xsaW5nX2RlbGF5OworCWludCBsYXN0X3RlbXBlcmF0dXJlOworCWJvb2wgcGFzc2l2ZTsKKwl1bnNpZ25lZCBpbnQgZm9yY2VkX3Bhc3NpdmU7CiAJc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2Vfb3BzICpvcHM7CiAJc3RydWN0IGxpc3RfaGVhZCBjb29saW5nX2RldmljZXM7CiAJc3RydWN0IGlkciBpZHI7CiAJc3RydWN0IG11dGV4IGxvY2s7CS8qIHByb3RlY3QgY29vbGluZyBkZXZpY2VzIGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJc3RydWN0IGRlbGF5ZWRfd29yayBwb2xsX3F1ZXVlOwogI2lmIGRlZmluZWQoQ09ORklHX1RIRVJNQUxfSFdNT04pCiAJc3RydWN0IGxpc3RfaGVhZCBod21vbl9ub2RlOwogCXN0cnVjdCB0aGVybWFsX2h3bW9uX2RldmljZSAqaHdtb247CkBAIC0xMDQsMTMgKzEzMSwxNiBAQAogc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnRoZXJtYWxfem9uZV9kZXZpY2VfcmVnaXN0ZXIoY2hhciAqLCBpbnQsIHZvaWQgKiwKIAkJCQkJCQkgc3RydWN0CiAJCQkJCQkJIHRoZXJtYWxfem9uZV9kZXZpY2Vfb3BzCi0JCQkJCQkJICopOworCQkJCQkJCSAqLCBpbnQgdGMxLCBpbnQgdGMyLAorCQkJCQkJCSBpbnQgcGFzc2l2ZV9mcmVxLAorCQkJCQkJCSBpbnQgcG9sbGluZ19mcmVxKTsKIHZvaWQgdGhlcm1hbF96b25lX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICopOwogCiBpbnQgdGhlcm1hbF96b25lX2JpbmRfY29vbGluZ19kZXZpY2Uoc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKiwgaW50LAogCQkJCSAgICAgc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKik7CiBpbnQgdGhlcm1hbF96b25lX3VuYmluZF9jb29saW5nX2RldmljZShzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqLCBpbnQsCiAJCQkJICAgICAgIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICopOwordm9pZCB0aGVybWFsX3pvbmVfZGV2aWNlX3VwZGF0ZShzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqKTsKIHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICp0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3JlZ2lzdGVyKGNoYXIgKiwgdm9pZCAqLAogCQkJCQkJCSAgICAgICBzdHJ1Y3QKIAkJCQkJCQkgICAgICAgdGhlcm1hbF9jb29saW5nX2RldmljZV9vcHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXJpb21lbS1ybmcuaCBiL2luY2x1ZGUvbGludXgvdGltZXJpb21lbS1ybmcuaAppbmRleCBkZDI1MzE3Li4zZTA4YTFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lcmlvbWVtLXJuZy5oCkBAIC0xNCw3ICsxNCw3IEBACiAJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGlvbjsKIAl1bnNpZ25lZCBpbnQJCXByZXNlbnQ6MTsKIAotCXUzMiBfX2lvbWVtCQkqYWRkcmVzczsKKwl2b2lkIF9faW9tZW0JCSphZGRyZXNzOwogCiAJLyogbWVhc3VyZXMgaW4gdXNlY3MgKi8KIAl1bnNpZ25lZCBpbnQJCXBlcmlvZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaAppbmRleCBhMTZiOWUwLi43NDAyYzFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9saW51eC90b3BvbG9neS5oCkBAIC0zOCwxMSArMzgsNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgbnJfY3B1c19ub2RlCi0jZGVmaW5lIG5yX2NwdXNfbm9kZShub2RlKQkJCQlcCi0JKHsJCQkJCQlcCi0JCW5vZGVfdG9fY3B1bWFza19wdHIoX190bXBfXywgbm9kZSk7CVwKLQkJY3B1c193ZWlnaHQoKl9fdG1wX18pOwkJCVwKLQl9KQorI2RlZmluZSBucl9jcHVzX25vZGUobm9kZSkgY3B1bWFza193ZWlnaHQoY3B1bWFza19vZl9ub2RlKG5vZGUpKQogI2VuZGlmCiAKICNkZWZpbmUgZm9yX2VhY2hfbm9kZV93aXRoX2NwdXMobm9kZSkJCQlcCkBAIC0yMDAsNCArMTk2LDkgQEAKICNkZWZpbmUgdG9wb2xvZ3lfY29yZV9jcHVtYXNrKGNwdSkJCWNwdW1hc2tfb2YoY3B1KQogI2VuZGlmCiAKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgY3VycmVudCBOb2RlLiAqLworI2lmbmRlZiBudW1hX25vZGVfaWQKKyNkZWZpbmUgbnVtYV9ub2RlX2lkKCkJCShjcHVfdG9fbm9kZShyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSkKKyNlbmRpZgorCiAjZW5kaWYgLyogX0xJTlVYX1RPUE9MT0dZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2VfY2xvY2suaCBiL2luY2x1ZGUvbGludXgvdHJhY2VfY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTgxMzAzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZV9jbG9jay5oCkBAIC0wLDAgKzEsMTkgQEAKKyNpZm5kZWYgX0xJTlVYX1RSQUNFX0NMT0NLX0gKKyNkZWZpbmUgX0xJTlVYX1RSQUNFX0NMT0NLX0gKKworLyoKKyAqIDMgdHJhY2UgY2xvY2sgdmFyaWFudHMsIHdpdGggZGlmZmVyaW5nIHNjYWxhYmlsaXR5L3ByZWNpc2lvbgorICogdHJhZGVvZmZzOgorICoKKyAqICAtICAgbG9jYWw6IENQVS1sb2NhbCB0cmFjZSBjbG9jaworICogIC0gIG1lZGl1bTogc2NhbGFibGUgZ2xvYmFsIGNsb2NrIHdpdGggc29tZSBqaXR0ZXIKKyAqICAtICBnbG9iYWw6IGdsb2JhbGx5IG1vbm90b25pYywgc2VyaWFsaXplZCBjbG9jaworICovCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitleHRlcm4gdTY0IG5vdHJhY2UgdHJhY2VfY2xvY2tfbG9jYWwodm9pZCk7CitleHRlcm4gdTY0IG5vdHJhY2UgdHJhY2VfY2xvY2sodm9pZCk7CitleHRlcm4gdTY0IG5vdHJhY2UgdHJhY2VfY2xvY2tfZ2xvYmFsKHZvaWQpOworCisjZW5kaWYgLyogX0xJTlVYX1RSQUNFX0NMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlaG9vay5oCmluZGV4IDYxODZhNzguLmM3YWExNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vob29rLmgKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZWhvb2suaApAQCAtMzg4LDE3ICszODgsMTQgQEAKICAqIHRyYWNlaG9va19jb25zaWRlcl9pZ25vcmVkX3NpZ25hbCAtIHN1cHByZXNzIHNob3J0LWNpcmN1aXQgb2YgaWdub3JlZCBzaWduYWwKICAqIEB0YXNrOgkJdGFzayByZWNlaXZpbmcgdGhlIHNpZ25hbAogICogQHNpZzoJCXNpZ25hbCBudW1iZXIgYmVpbmcgc2VudAotICogQGhhbmRsZXI6CQklU0lHX0lHTiBvciAlU0lHX0RGTAogICoKICAqIFJldHVybiB6ZXJvIGlmZiB0cmFjaW5nIGRvZXNuJ3QgY2FyZSB0byBleGFtaW5lIHRoaXMgaWdub3JlZCBzaWduYWwsCiAgKiBzbyBpdCBjYW4gc2hvcnQtY2lyY3VpdCBub3JtYWwgZGVsaXZlcnkgYW5kIG5ldmVyIGV2ZW4gZ2V0IHF1ZXVlZC4KLSAqIEVpdGhlciBAaGFuZGxlciBpcyAlU0lHX0RGTCBhbmQgQHNpZydzIGRlZmF1bHQgaXMgaWdub3JlLCBvciBpdCdzICVTSUdfSUdOLgogICoKICAqIENhbGxlZCB3aXRoIEB0YXNrLT5zaWdoYW5kLT5zaWdsb2NrIGhlbGQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHRyYWNlaG9va19jb25zaWRlcl9pZ25vcmVkX3NpZ25hbChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCi0JCQkJCQkgICAgaW50IHNpZywKLQkJCQkJCSAgICB2b2lkIF9fdXNlciAqaGFuZGxlcikKKwkJCQkJCSAgICBpbnQgc2lnKQogewogCXJldHVybiAodGFza19wdHJhY2UodGFzaykgJiBQVF9QVFJBQ0VEKSAhPSAwOwogfQpAQCAtNDA3LDE5ICs0MDQsMTcgQEAKICAqIHRyYWNlaG9va19jb25zaWRlcl9mYXRhbF9zaWduYWwgLSBzdXBwcmVzcyBzcGVjaWFsIGhhbmRsaW5nIG9mIGZhdGFsIHNpZ25hbAogICogQHRhc2s6CQl0YXNrIHJlY2VpdmluZyB0aGUgc2lnbmFsCiAgKiBAc2lnOgkJc2lnbmFsIG51bWJlciBiZWluZyBzZW50Ci0gKiBAaGFuZGxlcjoJCSVTSUdfREZMIG9yICVTSUdfSUdOCiAgKgogICogUmV0dXJuIG5vbnplcm8gdG8gcHJldmVudCBzcGVjaWFsIGhhbmRsaW5nIG9mIHRoaXMgdGVybWluYXRpb24gc2lnbmFsLgotICogTm9ybWFsbHkgQGhhbmRsZXIgaXMgJVNJR19ERkwuICBJdCBjYW4gYmUgJVNJR19JR04gaWYgQHNpZyBpcyBpZ25vcmVkLAotICogaW4gd2hpY2ggY2FzZSBmb3JjZV9zaWcoKSBpcyBhYm91dCB0byByZXNldCBpdCB0byAlU0lHX0RGTC4KKyAqIE5vcm1hbGx5IGhhbmRsZXIgZm9yIHNpZ25hbCBpcyAlU0lHX0RGTC4gIEl0IGNhbiBiZSAlU0lHX0lHTiBpZiBAc2lnIGlzCisgKiBpZ25vcmVkLCBpbiB3aGljaCBjYXNlIGZvcmNlX3NpZygpIGlzIGFib3V0IHRvIHJlc2V0IGl0IHRvICVTSUdfREZMLgogICogV2hlbiB0aGlzIHJldHVybnMgemVybywgdGhpcyBzaWduYWwgbWlnaHQgY2F1c2UgYSBxdWljayB0ZXJtaW5hdGlvbgogICogdGhhdCBkb2VzIG5vdCBnaXZlIHRoZSBkZWJ1Z2dlciBhIGNoYW5jZSB0byBpbnRlcmNlcHQgdGhlIHNpZ25hbC4KICAqCiAgKiBDYWxsZWQgd2l0aCBvciB3aXRob3V0IEB0YXNrLT5zaWdoYW5kLT5zaWdsb2NrIGhlbGQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHRyYWNlaG9va19jb25zaWRlcl9mYXRhbF9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAotCQkJCQkJICBpbnQgc2lnLAotCQkJCQkJICB2b2lkIF9fdXNlciAqaGFuZGxlcikKKwkJCQkJCSAgaW50IHNpZykKIHsKIAlyZXR1cm4gKHRhc2tfcHRyYWNlKHRhc2spICYgUFRfUFRSQUNFRCkgIT0gMDsKIH0KQEAgLTUwNyw3ICs1MDIsNyBAQAogc3RhdGljIGlubGluZSBpbnQgdHJhY2Vob29rX25vdGlmeV9kZWF0aChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCQkJCSB2b2lkICoqZGVhdGhfY29va2llLCBpbnQgZ3JvdXBfZGVhZCkKIHsKLQlpZiAodGFzay0+ZXhpdF9zaWduYWwgPT0gLTEpCisJaWYgKHRhc2tfZGV0YWNoZWQodGFzaykpCiAJCXJldHVybiB0YXNrLT5wdHJhY2UgPyBTSUdDSExEIDogREVBVEhfUkVBUDsKIAogCS8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaCBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCmluZGV4IDc1NzAwNTQuLmQzNWE3ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oCkBAIC0zMSw4ICszMSw4IEBACiAJCQkJCSAqIEtlZXAgaW4gc3luYyB3aXRoIHZtbGludXgubGRzLmguCiAJCQkJCSAqLwogCi0jZGVmaW5lIFRQUFJPVE8oYXJncy4uLikJYXJncwotI2RlZmluZSBUUEFSR1MoYXJncy4uLikJCWFyZ3MKKyNkZWZpbmUgVFBfUFJPVE8oYXJncy4uLikJYXJncworI2RlZmluZSBUUF9BUkdTKGFyZ3MuLi4pCQlhcmdzCiAKICNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKIApAQCAtNjUsNyArNjUsNyBAQAogCXsJCQkJCQkJCVwKIAkJaWYgKHVubGlrZWx5KF9fdHJhY2Vwb2ludF8jI25hbWUuc3RhdGUpKQkJXAogCQkJX19ET19UUkFDRSgmX190cmFjZXBvaW50XyMjbmFtZSwJCVwKLQkJCQlUUFBST1RPKHByb3RvKSwgVFBBUkdTKGFyZ3MpKTsJCVwKKwkJCQlUUF9QUk9UTyhwcm90byksIFRQX0FSR1MoYXJncykpOwlcCiAJfQkJCQkJCQkJXAogCXN0YXRpYyBpbmxpbmUgaW50IHJlZ2lzdGVyX3RyYWNlXyMjbmFtZSh2b2lkICgqcHJvYmUpKHByb3RvKSkJXAogCXsJCQkJCQkJCVwKQEAgLTE1Myw0ICsxNTMsMTE0IEBACiAJc3luY2hyb25pemVfc2NoZWQoKTsKIH0KIAorI2RlZmluZSBQQVJBTVMoYXJncy4uLikgYXJncworI2RlZmluZSBUUkFDRV9GT1JNQVQobmFtZSwgcHJvdG8sIGFyZ3MsIGZtdCkJCVwKKwlERUNMQVJFX1RSQUNFKG5hbWUsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkKKworCisvKgorICogRm9yIHVzZSB3aXRoIHRoZSBUUkFDRV9FVkVOVCBtYWNybzoKKyAqCisgKiBXZSBkZWZpbmUgYSB0cmFjZXBvaW50LCBpdHMgYXJndW1lbnRzLCBpdHMgcHJpbnRrIGZvcm1hdAorICogYW5kIGl0cyAnZmFzdCBiaW5heSByZWNvcmQnIGxheW91dC4KKyAqCisgKiBGaXJzdGx5LCBuYW1lIHlvdXIgdHJhY2Vwb2ludCB2aWEgVFJBQ0VfRVZFTlQobmFtZSA6IHRoZQorICogJ3N1YnN5c3RlbV9ldmVudCcgbm90YXRpb24gaXMgZmluZS4KKyAqCisgKiBUaGluayBhYm91dCB0aGlzIHdob2xlIGNvbnN0cnVjdCBhcyB0aGUKKyAqICd0cmFjZV9zY2hlZF9zd2l0Y2goKSBmdW5jdGlvbicgZnJvbSBub3cgb24uCisgKgorICoKKyAqICBUUkFDRV9FVkVOVChzY2hlZF9zd2l0Y2gsCisgKgorICoJKgorICoJKiBBIGZ1bmN0aW9uIGhhcyBhIHJlZ3VsYXIgZnVuY3Rpb24gYXJndW1lbnRzCisgKgkqIHByb3RvdHlwZSwgZGVjbGFyZSBpdCB2aWEgVFBfUFJPVE8oKToKKyAqCSoKKyAqCisgKglUUF9QUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCisgKgkJIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCksCisgKgorICoJKgorICoJKiBEZWZpbmUgdGhlIGNhbGwgc2lnbmF0dXJlIG9mIHRoZSAnZnVuY3Rpb24nLgorICoJKiAoRGVzaWduIHNpZGVub3RlOiB3ZSB1c2UgdGhpcyBpbnN0ZWFkIG9mIGEKKyAqCSogIFRQX1BST1RPMS9UUF9QUk9UTzIvVFBfUFJPVE8zIHVnbGluZXNzLikKKyAqCSoKKyAqCisgKglUUF9BUkdTKHJxLCBwcmV2LCBuZXh0KSwKKyAqCisgKgkqCisgKgkqIEZhc3QgYmluYXJ5IHRyYWNpbmc6IGRlZmluZSB0aGUgdHJhY2UgcmVjb3JkIHZpYQorICoJKiBUUF9TVFJVQ1RfX2VudHJ5KCkuIFlvdSBjYW4gdGhpbmsgYWJvdXQgaXQgbGlrZSBhCisgKgkqIHJlZ3VsYXIgQyBzdHJ1Y3R1cmUgbG9jYWwgdmFyaWFibGUgZGVmaW5pdGlvbi4KKyAqCSoKKyAqCSogVGhpcyBpcyBob3cgdGhlIHRyYWNlIHJlY29yZCBpcyBzdHJ1Y3R1cmVkIGFuZCB3aWxsCisgKgkqIGJlIHNhdmVkIGludG8gdGhlIHJpbmcgYnVmZmVyLiBUaGVzZSBhcmUgdGhlIGZpZWxkcworICoJKiB0aGF0IHdpbGwgYmUgZXhwb3NlZCB0byB1c2VyLXNwYWNlIGluCisgKgkqIC9kZWJ1Zy90cmFjaW5nL2V2ZW50cy88Kj4vZm9ybWF0LgorICoJKgorICoJKiBUaGUgZGVjbGFyZWQgJ2xvY2FsIHZhcmlhYmxlJyBpcyBjYWxsZWQgJ19fZW50cnknCisgKgkqCisgKgkqIF9fZmllbGQocGlkX3QsIHByZXZfcHJpZCkgaXMgZXF1aXZhbGVudCB0byBhIHN0YW5kYXJkIGRlY2xhcml0b246CisgKgkqCisgKgkqCXBpZF90CXByZXZfcGlkOworICoJKgorICoJKiBfX2FycmF5KGNoYXIsIHByZXZfY29tbSwgVEFTS19DT01NX0xFTikgaXMgZXF1aXZhbGVudCB0bzoKKyAqCSoKKyAqCSoJY2hhcglwcmV2X2NvbW1bVEFTS19DT01NX0xFTl07CisgKgkqCisgKgorICoJVFBfU1RSVUNUX19lbnRyeSgKKyAqCQlfX2FycmF5KAljaGFyLAlwcmV2X2NvbW0sCVRBU0tfQ09NTV9MRU4JKQorICoJCV9fZmllbGQoCXBpZF90LAlwcmV2X3BpZAkJCSkKKyAqCQlfX2ZpZWxkKAlpbnQsCXByZXZfcHJpbwkJCSkKKyAqCQlfX2FycmF5KAljaGFyLAluZXh0X2NvbW0sCVRBU0tfQ09NTV9MRU4JKQorICoJCV9fZmllbGQoCXBpZF90LAluZXh0X3BpZAkJCSkKKyAqCQlfX2ZpZWxkKAlpbnQsCW5leHRfcHJpbwkJCSkKKyAqCSksCisgKgorICoJKgorICoJKiBBc3NpZ24gdGhlIGVudHJ5IGludG8gdGhlIHRyYWNlIHJlY29yZCwgYnkgZW1iZWRkaW5nCisgKgkqIGEgZnVsbCBDIHN0YXRlbWVudCBibG9jayBpbnRvIFRQX2Zhc3RfYXNzaWduKCkuIFlvdQorICoJKiBjYW4gcmVmZXIgdG8gdGhlIHRyYWNlIHJlY29yZCBhcyAnX19lbnRyeScgLQorICoJKiBvdGhlcndpc2UgeW91IGNhbiBwdXQgYXJiaXRyYXJ5IEMgY29kZSBpbiBoZXJlLgorICoJKgorICoJKiBOb3RlOiB0aGlzIEMgY29kZSB3aWxsIGV4ZWN1dGUgZXZlcnkgdGltZSBhIHRyYWNlIGV2ZW50CisgKgkqIGhhcHBlbnMsIG9uIGFuIGFjdGl2ZSB0cmFjZXBvaW50LgorICoJKgorICoKKyAqCVRQX2Zhc3RfYXNzaWduKAorICoJCW1lbWNweShfX2VudHJ5LT5uZXh0X2NvbW0sIG5leHQtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworICoJCV9fZW50cnktPnByZXZfcGlkCT0gcHJldi0+cGlkOworICoJCV9fZW50cnktPnByZXZfcHJpbwk9IHByZXYtPnByaW87CisgKgkJbWVtY3B5KF9fZW50cnktPnByZXZfY29tbSwgcHJldi0+Y29tbSwgVEFTS19DT01NX0xFTik7CisgKgkJX19lbnRyeS0+bmV4dF9waWQJPSBuZXh0LT5waWQ7CisgKgkJX19lbnRyeS0+bmV4dF9wcmlvCT0gbmV4dC0+cHJpbzsKKyAqCSkKKyAqCisgKgkqCisgKgkqIEZvcm1hdHRlZCBvdXRwdXQgb2YgYSB0cmFjZSByZWNvcmQgdmlhIFRQX3ByaW50aygpLgorICoJKiBUaGlzIGlzIGhvdyB0aGUgdHJhY2Vwb2ludCB3aWxsIGFwcGVhciB1bmRlciBmdHJhY2UKKyAqCSogcGx1Z2lucyB0aGF0IG1ha2UgdXNlIG9mIHRoaXMgdHJhY2Vwb2ludC4KKyAqCSoKKyAqCSogKHJhdy1iaW5hcnkgdHJhY2luZyB3b250IGFjdHVhbGx5IHBlcmZvcm0gdGhpcyBzdGVwLikKKyAqCSoKKyAqCisgKglUUF9wcmludGsoInRhc2sgJXM6JWQgWyVkXSA9PT4gJXM6JWQgWyVkXSIsCisgKgkJX19lbnRyeS0+cHJldl9jb21tLCBfX2VudHJ5LT5wcmV2X3BpZCwgX19lbnRyeS0+cHJldl9wcmlvLAorICoJCV9fZW50cnktPm5leHRfY29tbSwgX19lbnRyeS0+bmV4dF9waWQsIF9fZW50cnktPm5leHRfcHJpbyksCisgKgorICogKTsKKyAqCisgKiBUaGlzIG1hY3JvIGNvbnN0cnVjdCBpcyB0aHVzIHVzZWQgZm9yIHRoZSByZWd1bGFyIHByaW50ayBmb3JtYXQKKyAqIHRyYWNpbmcgc2V0dXAsIGl0IGlzIHVzZWQgdG8gY29uc3RydWN0IGEgZnVuY3Rpb24gcG9pbnRlciBiYXNlZAorICogdHJhY2Vwb2ludCBjYWxsYmFjayAodGhpcyBpcyB1c2VkIGJ5IHByb2dyYW1tYXRpYyBwbHVnaW5zIGFuZAorICogY2FuIGFsc28gYnkgdXNlZCBieSBnZW5lcmljIGluc3RydW1lbnRhdGlvbiBsaWtlIFN5c3RlbVRhcCksIGFuZAorICogaXQgaXMgYWxzbyB1c2VkIHRvIGV4cG9zZSBhIHN0cnVjdHVyZWQgdHJhY2UgcmVjb3JkIGluCisgKiAvZGVidWcvdHJhY2luZy9ldmVudHMvLgorICovCisKKyNkZWZpbmUgVFJBQ0VfRVZFTlQobmFtZSwgcHJvdG8sIGFyZ3MsIHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAorCURFQ0xBUkVfVFJBQ0UobmFtZSwgUEFSQU1TKHByb3RvKSwgUEFSQU1TKGFyZ3MpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKaW5kZXggMDhlMDg4My4uODYxNWQ2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgKQEAgLTI1Miw4ICsyNTIsNiBAQAogCXZvaWQgKCpzZXRfbGRpc2MpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCXZvaWQgKCp3YWl0X3VudGlsX3NlbnQpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KTsKIAl2b2lkICgqc2VuZF94Y2hhcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCk7Ci0JaW50ICgqcmVhZF9wcm9jKShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLQkJCSAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CiAJaW50ICgqdGlvY21nZXQpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKTsKIAlpbnQgKCp0aW9jbXNldCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwpAQCAtMjY0LDYgKzI2Miw3IEBACiAJaW50ICgqcG9sbF9nZXRfY2hhcikoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgaW50IGxpbmUpOwogCXZvaWQgKCpwb2xsX3B1dF9jaGFyKShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBpbnQgbGluZSwgY2hhciBjaCk7CiAjZW5kaWYKKwljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpwcm9jX2ZvcHM7CiB9OwogCiBzdHJ1Y3QgdHR5X2RyaXZlciB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi93dXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi93dXNiLmgKaW5kZXggNWY0MDFiNi4uNDI5YzYzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivd3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3d1c2IuaApAQCAtODAsOCArODAsNyBAQAogCXU4IGRhdGFbMTZdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotY29uc3Qgc3RhdGljCi1zdHJ1Y3Qgd3VzYl9ja2hkaWQgd3VzYl9ja2hkaWRfemVybyA9IHsgLmRhdGEgPSB7IDAgfSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB3dXNiX2NraGRpZCB3dXNiX2NraGRpZF96ZXJvID0geyAuZGF0YSA9IHsgMCB9IH07CiAKICNkZWZpbmUgV1VTQl9DS0hESURfU1RSU0laRSAoMyAqIHNpemVvZihzdHJ1Y3Qgd3VzYl9ja2hkaWQpICsgMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93YWl0LmggYi9pbmNsdWRlL2xpbnV4L3dhaXQuaAppbmRleCBhMjEwZWRlLi41ZDYzMWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dhaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dhaXQuaApAQCAtMTM1LDggKzEzNSwxMSBAQAogdm9pZCBfX3dha2VfdXBfY29tbW9uKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwKIAkJCWludCBucl9leGNsdXNpdmUsIGludCBzeW5jLCB2b2lkICprZXkpOwogdm9pZCBfX3dha2VfdXAod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHVuc2lnbmVkIGludCBtb2RlLCBpbnQgbnIsIHZvaWQgKmtleSk7Ci1leHRlcm4gdm9pZCBfX3dha2VfdXBfbG9ja2VkKHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSk7Ci1leHRlcm4gdm9pZCBfX3dha2VfdXBfc3luYyh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBucik7Cit2b2lkIF9fd2FrZV91cF9sb2NrZWRfa2V5KHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgdm9pZCAqa2V5KTsKK3ZvaWQgX193YWtlX3VwX3N5bmNfa2V5KHdhaXRfcXVldWVfaGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG5yLAorCQkJdm9pZCAqa2V5KTsKK3ZvaWQgX193YWtlX3VwX2xvY2tlZCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUpOwordm9pZCBfX3dha2VfdXBfc3luYyh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBucik7CiB2b2lkIF9fd2FrZV91cF9iaXQod2FpdF9xdWV1ZV9oZWFkX3QgKiwgdm9pZCAqLCBpbnQpOwogaW50IF9fd2FpdF9vbl9iaXQod2FpdF9xdWV1ZV9oZWFkX3QgKiwgc3RydWN0IHdhaXRfYml0X3F1ZXVlICosIGludCAoKikodm9pZCAqKSwgdW5zaWduZWQpOwogaW50IF9fd2FpdF9vbl9iaXRfbG9jayh3YWl0X3F1ZXVlX2hlYWRfdCAqLCBzdHJ1Y3Qgd2FpdF9iaXRfcXVldWUgKiwgaW50ICgqKSh2b2lkICopLCB1bnNpZ25lZCk7CkBAIC0xNTUsMjEgKzE1OCwxNyBAQAogI2RlZmluZSB3YWtlX3VwX2ludGVycnVwdGlibGVfYWxsKHgpCV9fd2FrZV91cCh4LCBUQVNLX0lOVEVSUlVQVElCTEUsIDAsIE5VTEwpCiAjZGVmaW5lIHdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKHgpCV9fd2FrZV91cF9zeW5jKCh4KSwgVEFTS19JTlRFUlJVUFRJQkxFLCAxKQogCi0jaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIC8qCi0gKiBtYWNybyB0byBhdm9pZCBpbmNsdWRlIGhlbGwKKyAqIFdha2V1cCBtYWNyb3MgdG8gYmUgdXNlZCB0byByZXBvcnQgZXZlbnRzIHRvIHRoZSB0YXJnZXRzLgogICovCi0jZGVmaW5lIHdha2VfdXBfbmVzdGVkKHgsIHMpCQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkJCVwKLQkJCQkJCQkJCVwKLQlzcGluX2xvY2tfaXJxc2F2ZV9uZXN0ZWQoJih4KS0+bG9jaywgZmxhZ3MsIChzKSk7CQlcCi0Jd2FrZV91cF9sb2NrZWQoeCk7IAkJCQkJCVwKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoeCktPmxvY2ssIGZsYWdzKTsJCQlcCi19IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgd2FrZV91cF9uZXN0ZWQoeCwgcykJCXdha2VfdXAoeCkKLSNlbmRpZgorI2RlZmluZSB3YWtlX3VwX3BvbGwoeCwgbSkJCQkJXAorCV9fd2FrZV91cCh4LCBUQVNLX05PUk1BTCwgMSwgKHZvaWQgKikgKG0pKQorI2RlZmluZSB3YWtlX3VwX2xvY2tlZF9wb2xsKHgsIG0pCQkJCVwKKwlfX3dha2VfdXBfbG9ja2VkX2tleSgoeCksIFRBU0tfTk9STUFMLCAodm9pZCAqKSAobSkpCisjZGVmaW5lIHdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKHgsIG0pCQkJXAorCV9fd2FrZV91cCh4LCBUQVNLX0lOVEVSUlVQVElCTEUsIDEsICh2b2lkICopIChtKSkKKyNkZWZpbmUgd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbCh4LCBtKQkJCQlcCisJX193YWtlX3VwX3N5bmNfa2V5KCh4KSwgVEFTS19JTlRFUlJVUFRJQkxFLCAxLCAodm9pZCAqKSAobSkpCiAKICNkZWZpbmUgX193YWl0X2V2ZW50KHdxLCBjb25kaXRpb24pIAkJCQkJXAogZG8gewkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IDNjZDUxZTUuLjEzZTFhZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtNDEsNiArNDEsMTEgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRlbGF5ZWRfd29yayAqdG9fZGVsYXllZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworfQorCiBzdHJ1Y3QgZXhlY3V0ZV93b3JrIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oIGIvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAppbmRleCA3MzAwZWNkLi45MzQ0NTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKQEAgLTEwOSw4ICsxMDksOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZGlydHlfYmFja2dyb3VuZF9ieXRlczsKIGV4dGVybiBpbnQgdm1fZGlydHlfcmF0aW87CiBleHRlcm4gdW5zaWduZWQgbG9uZyB2bV9kaXJ0eV9ieXRlczsKLWV4dGVybiBpbnQgZGlydHlfd3JpdGViYWNrX2ludGVydmFsOwotZXh0ZXJuIGludCBkaXJ0eV9leHBpcmVfaW50ZXJ2YWw7CitleHRlcm4gdW5zaWduZWQgaW50IGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgZGlydHlfZXhwaXJlX2ludGVydmFsOwogZXh0ZXJuIGludCB2bV9oaWdobWVtX2lzX2RpcnR5YWJsZTsKIGV4dGVybiBpbnQgYmxvY2tfZHVtcDsKIGV4dGVybiBpbnQgbGFwdG9wX21vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IGU1NGM3NmQuLjFiOTRiOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC02MTYsMjEgKzYxNiw2IEBACiAJcmV0dXJuIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfZGVjX3Bjb3VudF9hcHByb3hfaW50KF9fdTMyICpjb3VudCwgY29uc3QgaW50IGRlY3IpCi17Ci0JaWYgKCpjb3VudCkgewotCQkqY291bnQgLT0gZGVjcjsKLQkJaWYgKChpbnQpKmNvdW50IDwgMCkKLQkJCSpjb3VudCA9IDA7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX2RlY19wY291bnRfYXBwcm94KF9fdTMyICpjb3VudCwKLQkJCQkJIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JdGNwX2RlY19wY291bnRfYXBwcm94X2ludChjb3VudCwgdGNwX3NrYl9wY291bnQoc2tiKSk7Ci19Ci0KIC8qIEV2ZW50cyBwYXNzZWQgdG8gY29uZ2VzdGlvbiBjb250cm9sIGludGVyZmFjZSAqLwogZW51bSB0Y3BfY2FfZXZlbnQgewogCUNBX0VWRU5UX1RYX1NUQVJULAkvKiBmaXJzdCB0cmFuc21pdCB3aGVuIG5vIHBhY2tldHMgaW4gZmxpZ2h0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Jsb2NrLmggYi9pbmNsdWRlL3RyYWNlL2Jsb2NrLmgKaW5kZXggMjVjNmExZi4uMjViNzA2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ibG9jay5oCisrKyBiL2luY2x1ZGUvdHJhY2UvYmxvY2suaApAQCAtNSw3MiArNSw3MiBAQAogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KIAogREVDTEFSRV9UUkFDRShibG9ja19ycV9hYm9ydCwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAotCQlUUEFSR1MocSwgcnEpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKKwkgICAgICBUUF9BUkdTKHEsIHJxKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfcnFfaW5zZXJ0LAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSksCi0JCVRQQVJHUyhxLCBycSkpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAorCSAgICAgIFRQX0FSR1MocSwgcnEpKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19ycV9pc3N1ZSwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAotCQlUUEFSR1MocSwgcnEpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKKwkgICAgICBUUF9BUkdTKHEsIHJxKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfcnFfcmVxdWV1ZSwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpLAotCQlUUEFSR1MocSwgcnEpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKKwkgICAgICBUUF9BUkdTKHEsIHJxKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfcnFfY29tcGxldGUsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKSwKLQkJVFBBUkdTKHEsIHJxKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSksCisJICAgICAgVFBfQVJHUyhxLCBycSkpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX2Jpb19ib3VuY2UsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKSwKLQkJVFBBUkdTKHEsIGJpbykpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAorCSAgICAgIFRQX0FSR1MocSwgYmlvKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfYmlvX2NvbXBsZXRlLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyksCi0JCVRQQVJHUyhxLCBiaW8pKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKSwKKwkgICAgICBUUF9BUkdTKHEsIGJpbykpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX2Jpb19iYWNrbWVyZ2UsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKSwKLQkJVFBBUkdTKHEsIGJpbykpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAorCSAgICAgIFRQX0FSR1MocSwgYmlvKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfYmlvX2Zyb250bWVyZ2UsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKSwKLQkJVFBBUkdTKHEsIGJpbykpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pLAorCSAgICAgIFRQX0FSR1MocSwgYmlvKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfYmlvX3F1ZXVlLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbyksCi0JCVRQQVJHUyhxLCBiaW8pKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKSwKKwkgICAgICBUUF9BUkdTKHEsIGJpbykpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX2dldHJxLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywgaW50IHJ3KSwKLQkJVFBBUkdTKHEsIGJpbywgcncpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCBpbnQgcncpLAorCSAgICAgIFRQX0FSR1MocSwgYmlvLCBydykpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX3NsZWVwcnEsCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLCBpbnQgcncpLAotCQlUUEFSR1MocSwgYmlvLCBydykpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sIGludCBydyksCisJICAgICAgVFBfQVJHUyhxLCBiaW8sIHJ3KSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfcGx1ZywKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSwKLQkJVFBBUkdTKHEpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSksCisJICAgICAgVFBfQVJHUyhxKSk7CiAKIERFQ0xBUkVfVFJBQ0UoYmxvY2tfdW5wbHVnX3RpbWVyLAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpLAotCQlUUEFSR1MocSkpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSwKKwkgICAgICBUUF9BUkdTKHEpKTsKIAogREVDTEFSRV9UUkFDRShibG9ja191bnBsdWdfaW8sCi0JVFBQUk9UTyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSksCi0JCVRQQVJHUyhxKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpLAorCSAgICAgIFRQX0FSR1MocSkpOwogCiBERUNMQVJFX1RSQUNFKGJsb2NrX3NwbGl0LAotCVRQUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IHBkdSksCi0JCVRQQVJHUyhxLCBiaW8sIHBkdSkpOworCVRQX1BST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sIHVuc2lnbmVkIGludCBwZHUpLAorCSAgICAgIFRQX0FSR1MocSwgYmlvLCBwZHUpKTsKIAogREVDTEFSRV9UUkFDRShibG9ja19yZW1hcCwKLQlUUFBST1RPKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8sIGRldl90IGRldiwKLQkJc2VjdG9yX3QgZnJvbSwgc2VjdG9yX3QgdG8pLAotCQlUUEFSR1MocSwgYmlvLCBkZXYsIGZyb20sIHRvKSk7CisJVFBfUFJPVE8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbywgZGV2X3QgZGV2LAorCQkgc2VjdG9yX3QgZnJvbSwgc2VjdG9yX3QgdG8pLAorCSAgICAgIFRQX0FSR1MocSwgYmlvLCBkZXYsIGZyb20sIHRvKSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9pcnEuaCBiL2luY2x1ZGUvdHJhY2UvaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY1ZDQ0OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvaXJxLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9UUkFDRV9JUlFfSAorI2RlZmluZSBfVFJBQ0VfSVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI2luY2x1ZGUgPHRyYWNlL2lycV9ldmVudF90eXBlcy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvaXJxX2V2ZW50X3R5cGVzLmggYi9pbmNsdWRlL3RyYWNlL2lycV9ldmVudF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OTY0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL2lycV9ldmVudF90eXBlcy5oCkBAIC0wLDAgKzEsNTUgQEAKKworLyogdXNlIDx0cmFjZS9pcnEuaD4gaW5zdGVhZCAqLworI2lmbmRlZiBUUkFDRV9GT1JNQVQKKyMgZXJyb3IgRG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LgorIyBlcnJvciBVbmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorI2VuZGlmCisKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIGlycQorCisvKgorICogVHJhY2Vwb2ludCBmb3IgZW50cnkgb2YgaW50ZXJydXB0IGhhbmRsZXI6CisgKi8KK1RSQUNFX0ZPUk1BVChpcnFfaGFuZGxlcl9lbnRyeSwKKwlUUF9QUk9UTyhpbnQgaXJxLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pLAorCVRQX0FSR1MoaXJxLCBhY3Rpb24pLAorCVRQX0ZNVCgiaXJxPSVkIGhhbmRsZXI9JXMiLCBpcnEsIGFjdGlvbi0+bmFtZSkKKwkpOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgcmV0dXJuIG9mIGFuIGludGVycnVwdCBoYW5kbGVyOgorICovCitUUkFDRV9FVkVOVChpcnFfaGFuZGxlcl9leGl0LAorCisJVFBfUFJPVE8oaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uLCBpbnQgcmV0KSwKKworCVRQX0FSR1MoaXJxLCBhY3Rpb24sIHJldCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlpbnQsCWlycQkpCisJCV9fZmllbGQoCWludCwJcmV0CSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmlycQk9IGlycTsKKwkJX19lbnRyeS0+cmV0CT0gcmV0OworCSksCisKKwlUUF9wcmludGsoImlycT0lZCByZXR1cm49JXMiLAorCQkgIF9fZW50cnktPmlycSwgX19lbnRyeS0+cmV0ID8gImhhbmRsZWQiIDogInVuaGFuZGxlZCIpCispOworCitUUkFDRV9GT1JNQVQoc29mdGlycV9lbnRyeSwKKwlUUF9QUk9UTyhzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKmgsIHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqdmVjKSwKKwlUUF9BUkdTKGgsIHZlYyksCisJVFBfRk1UKCJzb2Z0aXJxPSVkIGFjdGlvbj0lcyIsIChpbnQpKGggLSB2ZWMpLCBzb2Z0aXJxX3RvX25hbWVbaC12ZWNdKQorCSk7CisKK1RSQUNFX0ZPUk1BVChzb2Z0aXJxX2V4aXQsCisJVFBfUFJPVE8oc3RydWN0IHNvZnRpcnFfYWN0aW9uICpoLCBzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKnZlYyksCisJVFBfQVJHUyhoLCB2ZWMpLAorCVRQX0ZNVCgic29mdGlycT0lZCBhY3Rpb249JXMiLCAoaW50KShoIC0gdmVjKSwgc29mdGlycV90b19uYW1lW2gtdmVjXSkKKwkpOworCisjdW5kZWYgVFJBQ0VfU1lTVEVNCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2ttZW10cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9rbWVtdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDhiNzg1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS90cmFjZS9rbWVtdHJhY2UuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVkdWFyZCAtIEdhYnJpZWwgTXVudGVhbnUKKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgR1BMIHZlcnNpb24gMi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9LTUVNVFJBQ0VfSAorI2RlZmluZSBfTElOVVhfS01FTVRSQUNFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CisKK2VudW0ga21lbXRyYWNlX3R5cGVfaWQgeworCUtNRU1UUkFDRV9UWVBFX0tNQUxMT0MgPSAwLAkvKiBrbWFsbG9jKCkgb3Iga2ZyZWUoKS4gKi8KKwlLTUVNVFJBQ0VfVFlQRV9DQUNIRSwJCS8qIGttZW1fY2FjaGVfKigpLiAqLworCUtNRU1UUkFDRV9UWVBFX1BBR0VTLAkJLyogX19nZXRfZnJlZV9wYWdlcygpIGFuZCBmcmllbmRzLiAqLworfTsKKworI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKKworZXh0ZXJuIHZvaWQga21lbXRyYWNlX2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIGttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAorCQkJCQkgICAgIGNvbnN0IHZvaWQgKnB0ciwKKwkJCQkJICAgICBzaXplX3QgYnl0ZXNfcmVxLAorCQkJCQkgICAgIHNpemVfdCBieXRlc19hbGxvYywKKwkJCQkJICAgICBnZnBfdCBnZnBfZmxhZ3MsCisJCQkJCSAgICAgaW50IG5vZGUpOworCitleHRlcm4gdm9pZCBrbWVtdHJhY2VfbWFya19mcmVlKGVudW0ga21lbXRyYWNlX3R5cGVfaWQgdHlwZV9pZCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCisJCQkJICAgICAgIGNvbnN0IHZvaWQgKnB0cik7CisKKyNlbHNlIC8qIENPTkZJR19LTUVNVFJBQ0UgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGttZW10cmFjZV9pbml0KHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKGVudW0ga21lbXRyYWNlX3R5cGVfaWQgdHlwZV9pZCwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZSwKKwkJCQkJICAgICBjb25zdCB2b2lkICpwdHIsCisJCQkJCSAgICAgc2l6ZV90IGJ5dGVzX3JlcSwKKwkJCQkJICAgICBzaXplX3QgYnl0ZXNfYWxsb2MsCisJCQkJCSAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzLAorCQkJCQkgICAgIGludCBub2RlKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga21lbXRyYWNlX21hcmtfZnJlZShlbnVtIGttZW10cmFjZV90eXBlX2lkIHR5cGVfaWQsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAorCQkJCSAgICAgICBjb25zdCB2b2lkICpwdHIpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfS01FTVRSQUNFICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbWVtdHJhY2VfbWFya19hbGxvYyhlbnVtIGttZW10cmFjZV90eXBlX2lkIHR5cGVfaWQsCisJCQkJCXVuc2lnbmVkIGxvbmcgY2FsbF9zaXRlLAorCQkJCQljb25zdCB2b2lkICpwdHIsCisJCQkJCXNpemVfdCBieXRlc19yZXEsCisJCQkJCXNpemVfdCBieXRlc19hbGxvYywKKwkJCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCWttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUodHlwZV9pZCwgY2FsbF9zaXRlLCBwdHIsCisJCQkJICBieXRlc19yZXEsIGJ5dGVzX2FsbG9jLCBnZnBfZmxhZ3MsIC0xKTsKK30KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9MSU5VWF9LTUVNVFJBQ0VfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2xvY2tkZXAuaCBiL2luY2x1ZGUvdHJhY2UvbG9ja2RlcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTY3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL2xvY2tkZXAuaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX1RSQUNFX0xPQ0tERVBfSAorI2RlZmluZSBfVFJBQ0VfTE9DS0RFUF9ICisKKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCisjaW5jbHVkZSA8dHJhY2UvbG9ja2RlcF9ldmVudF90eXBlcy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvbG9ja2RlcF9ldmVudF90eXBlcy5oIGIvaW5jbHVkZS90cmFjZS9sb2NrZGVwX2V2ZW50X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjY2ZjZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvbG9ja2RlcF9ldmVudF90eXBlcy5oCkBAIC0wLDAgKzEsNDQgQEAKKworI2lmbmRlZiBUUkFDRV9GT1JNQVQKKyMgZXJyb3IgRG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LgorIyBlcnJvciBVbmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorI2VuZGlmCisKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIGxvY2sKKworI2lmZGVmIENPTkZJR19MT0NLREVQCisKK1RSQUNFX0ZPUk1BVChsb2NrX2FjcXVpcmUsCisJVFBfUFJPVE8oc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsCisJCWludCB0cnlsb2NrLCBpbnQgcmVhZCwgaW50IGNoZWNrLAorCQlzdHJ1Y3QgbG9ja2RlcF9tYXAgKm5leHRfbG9jaywgdW5zaWduZWQgbG9uZyBpcCksCisJVFBfQVJHUyhsb2NrLCBzdWJjbGFzcywgdHJ5bG9jaywgcmVhZCwgY2hlY2ssIG5leHRfbG9jaywgaXApLAorCVRQX0ZNVCgiJXMlcyVzIiwgdHJ5bG9jayA/ICJ0cnkgIiA6ICIiLAorCQlyZWFkID8gInJlYWQgIiA6ICIiLCBsb2NrLT5uYW1lKQorCSk7CisKK1RSQUNFX0ZPUk1BVChsb2NrX3JlbGVhc2UsCisJVFBfUFJPVE8oc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBpbnQgbmVzdGVkLCB1bnNpZ25lZCBsb25nIGlwKSwKKwlUUF9BUkdTKGxvY2ssIG5lc3RlZCwgaXApLAorCVRQX0ZNVCgiJXMiLCBsb2NrLT5uYW1lKQorCSk7CisKKyNpZmRlZiBDT05GSUdfTE9DS19TVEFUCisKK1RSQUNFX0ZPUk1BVChsb2NrX2NvbnRlbmRlZCwKKwlUUF9QUk9UTyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApLAorCVRQX0FSR1MobG9jaywgaXApLAorCVRQX0ZNVCgiJXMiLCBsb2NrLT5uYW1lKQorCSk7CisKK1RSQUNFX0ZPUk1BVChsb2NrX2FjcXVpcmVkLAorCVRQX1BST1RPKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgbG9uZyBpcCksCisJVFBfQVJHUyhsb2NrLCBpcCksCisJVFBfRk1UKCIlcyIsIGxvY2stPm5hbWUpCisJKTsKKworI2VuZGlmCisjZW5kaWYKKworI3VuZGVmIFRSQUNFX1NZU1RFTQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9wb3dlci5oIGIvaW5jbHVkZS90cmFjZS9wb3dlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMjA0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL3Bvd2VyLmgKQEAgLTAsMCArMSwzMiBAQAorI2lmbmRlZiBfVFJBQ0VfUE9XRVJfSAorI2RlZmluZSBfVFJBQ0VfUE9XRVJfSAorCisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKK2VudW0geworCVBPV0VSX05PTkUgPSAwLAorCVBPV0VSX0NTVEFURSA9IDEsCisJUE9XRVJfUFNUQVRFID0gMiwKK307CisKK3N0cnVjdCBwb3dlcl90cmFjZSB7CisJa3RpbWVfdAkJCXN0YW1wOworCWt0aW1lX3QJCQllbmQ7CisJaW50CQkJdHlwZTsKKwlpbnQJCQlzdGF0ZTsKK307CisKK0RFQ0xBUkVfVFJBQ0UocG93ZXJfc3RhcnQsCisJVFBfUFJPVE8oc3RydWN0IHBvd2VyX3RyYWNlICppdCwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBzdGF0ZSksCisJICAgICAgVFBfQVJHUyhpdCwgdHlwZSwgc3RhdGUpKTsKKworREVDTEFSRV9UUkFDRShwb3dlcl9tYXJrLAorCVRQX1BST1RPKHN0cnVjdCBwb3dlcl90cmFjZSAqaXQsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgc3RhdGUpLAorCSAgICAgIFRQX0FSR1MoaXQsIHR5cGUsIHN0YXRlKSk7CisKK0RFQ0xBUkVfVFJBQ0UocG93ZXJfZW5kLAorCVRQX1BST1RPKHN0cnVjdCBwb3dlcl90cmFjZSAqaXQpLAorCSAgICAgIFRQX0FSR1MoaXQpKTsKKworI2VuZGlmIC8qIF9UUkFDRV9QT1dFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3NjaGVkLmggYi9pbmNsdWRlL3RyYWNlL3NjaGVkLmgKaW5kZXggMGQ4MTA5OC4uNGUzNzJhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9zY2hlZC5oCisrKyBiL2luY2x1ZGUvdHJhY2Uvc2NoZWQuaApAQCAtNCw1MyArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CiAKLURFQ0xBUkVfVFJBQ0Uoc2NoZWRfa3RocmVhZF9zdG9wLAotCVRQUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICp0KSwKLQkJVFBBUkdTKHQpKTsKLQotREVDTEFSRV9UUkFDRShzY2hlZF9rdGhyZWFkX3N0b3BfcmV0LAotCVRQUFJPVE8oaW50IHJldCksCi0JCVRQQVJHUyhyZXQpKTsKLQotREVDTEFSRV9UUkFDRShzY2hlZF93YWl0X3Rhc2ssCi0JVFBQUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAotCQlUUEFSR1MocnEsIHApKTsKLQotREVDTEFSRV9UUkFDRShzY2hlZF93YWtldXAsCi0JVFBQUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzdWNjZXNzKSwKLQkJVFBBUkdTKHJxLCBwLCBzdWNjZXNzKSk7Ci0KLURFQ0xBUkVfVFJBQ0Uoc2NoZWRfd2FrZXVwX25ldywKLQlUUFBST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHN1Y2Nlc3MpLAotCQlUUEFSR1MocnEsIHAsIHN1Y2Nlc3MpKTsKLQotREVDTEFSRV9UUkFDRShzY2hlZF9zd2l0Y2gsCi0JVFBQUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCi0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCksCi0JCVRQQVJHUyhycSwgcHJldiwgbmV4dCkpOwotCi1ERUNMQVJFX1RSQUNFKHNjaGVkX21pZ3JhdGVfdGFzaywKLQlUUFBST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG9yaWdfY3B1LCBpbnQgZGVzdF9jcHUpLAotCQlUUEFSR1MocCwgb3JpZ19jcHUsIGRlc3RfY3B1KSk7Ci0KLURFQ0xBUkVfVFJBQ0Uoc2NoZWRfcHJvY2Vzc19mcmVlLAotCVRQUFJPVE8oc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKLQkJVFBBUkdTKHApKTsKLQotREVDTEFSRV9UUkFDRShzY2hlZF9wcm9jZXNzX2V4aXQsCi0JVFBQUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAotCQlUUEFSR1MocCkpOwotCi1ERUNMQVJFX1RSQUNFKHNjaGVkX3Byb2Nlc3Nfd2FpdCwKLQlUUFBST1RPKHN0cnVjdCBwaWQgKnBpZCksCi0JCVRQQVJHUyhwaWQpKTsKLQotREVDTEFSRV9UUkFDRShzY2hlZF9wcm9jZXNzX2ZvcmssCi0JVFBQUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCksCi0JCVRQQVJHUyhwYXJlbnQsIGNoaWxkKSk7Ci0KLURFQ0xBUkVfVFJBQ0Uoc2NoZWRfc2lnbmFsX3NlbmQsCi0JVFBQUk9UTyhpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAotCQlUUEFSR1Moc2lnLCBwKSk7CisjaW5jbHVkZSA8dHJhY2Uvc2NoZWRfZXZlbnRfdHlwZXMuaD4KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3NjaGVkX2V2ZW50X3R5cGVzLmggYi9pbmNsdWRlL3RyYWNlL3NjaGVkX2V2ZW50X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM1NDdkYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2Uvc2NoZWRfZXZlbnRfdHlwZXMuaApAQCAtMCwwICsxLDMzNyBAQAorCisvKiB1c2UgPHRyYWNlL3NjaGVkLmg+IGluc3RlYWQgKi8KKyNpZm5kZWYgVFJBQ0VfRVZFTlQKKyMgZXJyb3IgRG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LgorIyBlcnJvciBVbmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorI2VuZGlmCisKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIHNjaGVkCisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBjYWxsaW5nIGt0aHJlYWRfc3RvcCwgcGVyZm9ybWVkIHRvIGVuZCBhIGt0aHJlYWQ6CisgKi8KK1RSQUNFX0VWRU5UKHNjaGVkX2t0aHJlYWRfc3RvcCwKKworCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCksCisKKwlUUF9BUkdTKHQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgdC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnBpZAk9IHQtPnBpZDsKKwkpLAorCisJVFBfcHJpbnRrKCJ0YXNrICVzOiVkIiwgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkKQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGt0aHJlYWQgc3RvcHBpbmc6CisgKi8KK1RSQUNFX0VWRU5UKHNjaGVkX2t0aHJlYWRfc3RvcF9yZXQsCisKKwlUUF9QUk9UTyhpbnQgcmV0KSwKKworCVRQX0FSR1MocmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWludCwJcmV0CSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnJldAk9IHJldDsKKwkpLAorCisJVFBfcHJpbnRrKCJyZXQgJWQiLCBfX2VudHJ5LT5yZXQpCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3Igd2FpdGluZyBvbiB0YXNrIHRvIHVuc2NoZWR1bGU6CisgKgorICogKE5PVEU6IHRoZSAncnEnIGFyZ3VtZW50IGlzIG5vdCB1c2VkIGJ5IGdlbmVyaWMgdHJhY2UgZXZlbnRzLAorICogICAgICAgIGJ1dCB1c2VkIGJ5IHRoZSBsYXRlbmN5IHRyYWNlciBwbHVnaW4uICkKKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfd2FpdF90YXNrLAorCisJVFBfUFJPVE8oc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKKworCVRQX0FSR1MocnEsIHApLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCisJCV9fZmllbGQoCWludCwJcHJpbwkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCBwLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+cGlkCT0gcC0+cGlkOworCQlfX2VudHJ5LT5wcmlvCT0gcC0+cHJpbzsKKwkpLAorCisJVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0iLAorCQkgIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwgX19lbnRyeS0+cHJpbykKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciB3YWtpbmcgdXAgYSB0YXNrOgorICoKKyAqIChOT1RFOiB0aGUgJ3JxJyBhcmd1bWVudCBpcyBub3QgdXNlZCBieSBnZW5lcmljIHRyYWNlIGV2ZW50cywKKyAqICAgICAgICBidXQgdXNlZCBieSB0aGUgbGF0ZW5jeSB0cmFjZXIgcGx1Z2luLiApCisgKi8KK1RSQUNFX0VWRU5UKHNjaGVkX3dha2V1cCwKKworCVRQX1BST1RPKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHN1Y2Nlc3MpLAorCisJVFBfQVJHUyhycSwgcCwgc3VjY2VzcyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2FycmF5KAljaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKKwkJX19maWVsZCgJaW50LAlwcmlvCQkJKQorCQlfX2ZpZWxkKAlpbnQsCXN1Y2Nlc3MJCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgcC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnBpZAkJPSBwLT5waWQ7CisJCV9fZW50cnktPnByaW8JCT0gcC0+cHJpbzsKKwkJX19lbnRyeS0+c3VjY2Vzcwk9IHN1Y2Nlc3M7CisJKSwKKworCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdIHN1Y2Nlc3M9JWQiLAorCQkgIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwgX19lbnRyeS0+cHJpbywKKwkJICBfX2VudHJ5LT5zdWNjZXNzKQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIHdha2luZyB1cCBhIG5ldyB0YXNrOgorICoKKyAqIChOT1RFOiB0aGUgJ3JxJyBhcmd1bWVudCBpcyBub3QgdXNlZCBieSBnZW5lcmljIHRyYWNlIGV2ZW50cywKKyAqICAgICAgICBidXQgdXNlZCBieSB0aGUgbGF0ZW5jeSB0cmFjZXIgcGx1Z2luLiApCisgKi8KK1RSQUNFX0VWRU5UKHNjaGVkX3dha2V1cF9uZXcsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzdWNjZXNzKSwKKworCVRQX0FSR1MocnEsIHAsIHN1Y2Nlc3MpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCisJCV9fZmllbGQoCWludCwJcHJpbwkJCSkKKwkJX19maWVsZCgJaW50LAlzdWNjZXNzCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHAtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJCT0gcC0+cGlkOworCQlfX2VudHJ5LT5wcmlvCQk9IHAtPnByaW87CisJCV9fZW50cnktPnN1Y2Nlc3MJPSBzdWNjZXNzOworCSksCisKKwlUUF9wcmludGsoInRhc2sgJXM6JWQgWyVkXSBzdWNjZXNzPSVkIiwKKwkJICBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQsIF9fZW50cnktPnByaW8sCisJCSAgX19lbnRyeS0+c3VjY2VzcykKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciB0YXNrIHN3aXRjaGVzLCBwZXJmb3JtZWQgYnkgdGhlIHNjaGVkdWxlcjoKKyAqCisgKiAoTk9URTogdGhlICdycScgYXJndW1lbnQgaXMgbm90IHVzZWQgYnkgZ2VuZXJpYyB0cmFjZSBldmVudHMsCisgKiAgICAgICAgYnV0IHVzZWQgYnkgdGhlIGxhdGVuY3kgdHJhY2VyIHBsdWdpbi4gKQorICovCitUUkFDRV9FVkVOVChzY2hlZF9zd2l0Y2gsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCisJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpLAorCisJVFBfQVJHUyhycSwgcHJldiwgbmV4dCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2FycmF5KAljaGFyLAlwcmV2X2NvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJcHJldl9waWQJCQkpCisJCV9fZmllbGQoCWludCwJcHJldl9wcmlvCQkJKQorCQlfX2FycmF5KAljaGFyLAluZXh0X2NvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJbmV4dF9waWQJCQkpCisJCV9fZmllbGQoCWludCwJbmV4dF9wcmlvCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPm5leHRfY29tbSwgbmV4dC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnByZXZfcGlkCT0gcHJldi0+cGlkOworCQlfX2VudHJ5LT5wcmV2X3ByaW8JPSBwcmV2LT5wcmlvOworCQltZW1jcHkoX19lbnRyeS0+cHJldl9jb21tLCBwcmV2LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+bmV4dF9waWQJPSBuZXh0LT5waWQ7CisJCV9fZW50cnktPm5leHRfcHJpbwk9IG5leHQtPnByaW87CisJKSwKKworCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdID09PiAlczolZCBbJWRdIiwKKwkJX19lbnRyeS0+cHJldl9jb21tLCBfX2VudHJ5LT5wcmV2X3BpZCwgX19lbnRyeS0+cHJldl9wcmlvLAorCQlfX2VudHJ5LT5uZXh0X2NvbW0sIF9fZW50cnktPm5leHRfcGlkLCBfX2VudHJ5LT5uZXh0X3ByaW8pCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgYSB0YXNrIGJlaW5nIG1pZ3JhdGVkOgorICovCitUUkFDRV9FVkVOVChzY2hlZF9taWdyYXRlX3Rhc2ssCisKKwlUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBvcmlnX2NwdSwgaW50IGRlc3RfY3B1KSwKKworCVRQX0FSR1MocCwgb3JpZ19jcHUsIGRlc3RfY3B1KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoCWNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJcGlkCQkJKQorCQlfX2ZpZWxkKAlpbnQsCXByaW8JCQkpCisJCV9fZmllbGQoCWludCwJb3JpZ19jcHUJCSkKKwkJX19maWVsZCgJaW50LAlkZXN0X2NwdQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJbWVtY3B5KF9fZW50cnktPmNvbW0sIHAtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5waWQJCT0gcC0+cGlkOworCQlfX2VudHJ5LT5wcmlvCQk9IHAtPnByaW87CisJCV9fZW50cnktPm9yaWdfY3B1CT0gb3JpZ19jcHU7CisJCV9fZW50cnktPmRlc3RfY3B1CT0gZGVzdF9jcHU7CisJKSwKKworCVRQX3ByaW50aygidGFzayAlczolZCBbJWRdIGZyb206ICVkICB0bzogJWQiLAorCQkgIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwgX19lbnRyeS0+cHJpbywKKwkJICBfX2VudHJ5LT5vcmlnX2NwdSwgX19lbnRyeS0+ZGVzdF9jcHUpCispOworCisvKgorICogVHJhY2Vwb2ludCBmb3IgZnJlZWluZyBhIHRhc2s6CisgKi8KK1RSQUNFX0VWRU5UKHNjaGVkX3Byb2Nlc3NfZnJlZSwKKworCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCksCisKKwlUUF9BUkdTKHApLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19hcnJheSgJY2hhciwJY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAlwaWQJCQkpCisJCV9fZmllbGQoCWludCwJcHJpbwkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCBwLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+cGlkCQk9IHAtPnBpZDsKKwkJX19lbnRyeS0+cHJpbwkJPSBwLT5wcmlvOworCSksCisKKwlUUF9wcmludGsoInRhc2sgJXM6JWQgWyVkXSIsCisJCSAgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLCBfX2VudHJ5LT5wcmlvKQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGEgdGFzayBleGl0aW5nOgorICovCitUUkFDRV9FVkVOVChzY2hlZF9wcm9jZXNzX2V4aXQsCisKKwlUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApLAorCisJVFBfQVJHUyhwKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoCWNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJcGlkCQkJKQorCQlfX2ZpZWxkKAlpbnQsCXByaW8JCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgcC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnBpZAkJPSBwLT5waWQ7CisJCV9fZW50cnktPnByaW8JCT0gcC0+cHJpbzsKKwkpLAorCisJVFBfcHJpbnRrKCJ0YXNrICVzOiVkIFslZF0iLAorCQkgIF9fZW50cnktPmNvbW0sIF9fZW50cnktPnBpZCwgX19lbnRyeS0+cHJpbykKKyk7CisKKy8qCisgKiBUcmFjZXBvaW50IGZvciBhIHdhaXRpbmcgdGFzazoKKyAqLworVFJBQ0VfRVZFTlQoc2NoZWRfcHJvY2Vzc193YWl0LAorCisJVFBfUFJPVE8oc3RydWN0IHBpZCAqcGlkKSwKKworCVRQX0FSR1MocGlkKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fYXJyYXkoCWNoYXIsCWNvbW0sCVRBU0tfQ09NTV9MRU4JKQorCQlfX2ZpZWxkKAlwaWRfdCwJcGlkCQkJKQorCQlfX2ZpZWxkKAlpbnQsCXByaW8JCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQltZW1jcHkoX19lbnRyeS0+Y29tbSwgY3VycmVudC0+Y29tbSwgVEFTS19DT01NX0xFTik7CisJCV9fZW50cnktPnBpZAkJPSBwaWRfbnIocGlkKTsKKwkJX19lbnRyeS0+cHJpbwkJPSBjdXJyZW50LT5wcmlvOworCSksCisKKwlUUF9wcmludGsoInRhc2sgJXM6JWQgWyVkXSIsCisJCSAgX19lbnRyeS0+Y29tbSwgX19lbnRyeS0+cGlkLCBfX2VudHJ5LT5wcmlvKQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIGRvX2Zvcms6CisgKi8KK1RSQUNFX0VWRU5UKHNjaGVkX3Byb2Nlc3NfZm9yaywKKworCVRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKSwKKworCVRQX0FSR1MocGFyZW50LCBjaGlsZCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2FycmF5KAljaGFyLAlwYXJlbnRfY29tbSwJVEFTS19DT01NX0xFTgkpCisJCV9fZmllbGQoCXBpZF90LAlwYXJlbnRfcGlkCQkJKQorCQlfX2FycmF5KAljaGFyLAljaGlsZF9jb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCWNoaWxkX3BpZAkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5wYXJlbnRfY29tbSwgcGFyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+cGFyZW50X3BpZAk9IHBhcmVudC0+cGlkOworCQltZW1jcHkoX19lbnRyeS0+Y2hpbGRfY29tbSwgY2hpbGQtPmNvbW0sIFRBU0tfQ09NTV9MRU4pOworCQlfX2VudHJ5LT5jaGlsZF9waWQJPSBjaGlsZC0+cGlkOworCSksCisKKwlUUF9wcmludGsoInBhcmVudCAlczolZCAgY2hpbGQgJXM6JWQiLAorCQlfX2VudHJ5LT5wYXJlbnRfY29tbSwgX19lbnRyeS0+cGFyZW50X3BpZCwKKwkJX19lbnRyeS0+Y2hpbGRfY29tbSwgX19lbnRyeS0+Y2hpbGRfcGlkKQorKTsKKworLyoKKyAqIFRyYWNlcG9pbnQgZm9yIHNlbmRpbmcgYSBzaWduYWw6CisgKi8KK1RSQUNFX0VWRU5UKHNjaGVkX3NpZ25hbF9zZW5kLAorCisJVFBfUFJPVE8oaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKSwKKworCVRQX0FSR1Moc2lnLCBwKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWludCwJc2lnCQkJKQorCQlfX2FycmF5KAljaGFyLAljb21tLAlUQVNLX0NPTU1fTEVOCSkKKwkJX19maWVsZCgJcGlkX3QsCXBpZAkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCW1lbWNweShfX2VudHJ5LT5jb21tLCBwLT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwkJX19lbnRyeS0+cGlkCT0gcC0+cGlkOworCQlfX2VudHJ5LT5zaWcJPSBzaWc7CisJKSwKKworCVRQX3ByaW50aygic2lnOiAlZCAgdGFzayAlczolZCIsCisJCSAgX19lbnRyeS0+c2lnLCBfX2VudHJ5LT5jb21tLCBfX2VudHJ5LT5waWQpCispOworCisjdW5kZWYgVFJBQ0VfU1lTVEVNCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3NrYi5oIGIvaW5jbHVkZS90cmFjZS9za2IuaAppbmRleCBhOTY2MTBmLi5iNjYyMDZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL3NrYi5oCisrKyBiL2luY2x1ZGUvdHJhY2Uvc2tiLmgKQEAgLTUsNyArNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgogCiBERUNMQVJFX1RSQUNFKGtmcmVlX3NrYiwKLQlUUFBST1RPKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmxvY2F0aW9uKSwKLQlUUEFSR1Moc2tiLCBsb2NhdGlvbikpOworCVRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmxvY2F0aW9uKSwKKwlUUF9BUkdTKHNrYiwgbG9jYXRpb24pKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmggYi9pbmNsdWRlL3RyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY1NmY1NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaApAQCAtMCwwICsxLDUgQEAKKy8qIHRyYWNlLzx0eXBlPl9ldmVudF90eXBlcy5oIGhlcmUgKi8KKworI2luY2x1ZGUgPHRyYWNlL3NjaGVkX2V2ZW50X3R5cGVzLmg+CisjaW5jbHVkZSA8dHJhY2UvaXJxX2V2ZW50X3R5cGVzLmg+CisjaW5jbHVkZSA8dHJhY2UvbG9ja2RlcF9ldmVudF90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS90cmFjZV9ldmVudHMuaCBiL2luY2x1ZGUvdHJhY2UvdHJhY2VfZXZlbnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQxMzc1MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2UvdHJhY2VfZXZlbnRzLmgKQEAgLTAsMCArMSw1IEBACisvKiB0cmFjZS88dHlwZT4uaCBoZXJlICovCisKKyNpbmNsdWRlIDx0cmFjZS9zY2hlZC5oPgorI2luY2x1ZGUgPHRyYWNlL2lycS5oPgorI2luY2x1ZGUgPHRyYWNlL2xvY2tkZXAuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2Uvd29ya3F1ZXVlLmggYi9pbmNsdWRlL3RyYWNlL3dvcmtxdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MjY1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3RyYWNlL3dvcmtxdWV1ZS5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX19UUkFDRV9XT1JLUVVFVUVfSAorI2RlZmluZSBfX1RSQUNFX1dPUktRVUVVRV9ICisKKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworREVDTEFSRV9UUkFDRSh3b3JrcXVldWVfaW5zZXJ0aW9uLAorCSAgIFRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqd3FfdGhyZWFkLCBzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspLAorCSAgIFRQX0FSR1Mod3FfdGhyZWFkLCB3b3JrKSk7CisKK0RFQ0xBUkVfVFJBQ0Uod29ya3F1ZXVlX2V4ZWN1dGlvbiwKKwkgICBUUF9QUk9UTyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKSwKKwkgICBUUF9BUkdTKHdxX3RocmVhZCwgd29yaykpOworCisvKiBUcmFjZSB0aGUgY3JlYXRpb24gb2Ygb25lIHdvcmtxdWV1ZSB0aHJlYWQgb24gYSBjcHUgKi8KK0RFQ0xBUkVfVFJBQ0Uod29ya3F1ZXVlX2NyZWF0aW9uLAorCSAgIFRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqd3FfdGhyZWFkLCBpbnQgY3B1KSwKKwkgICBUUF9BUkdTKHdxX3RocmVhZCwgY3B1KSk7CisKK0RFQ0xBUkVfVFJBQ0Uod29ya3F1ZXVlX2Rlc3RydWN0aW9uLAorCSAgIFRQX1BST1RPKHN0cnVjdCB0YXNrX3N0cnVjdCAqd3FfdGhyZWFkKSwKKwkgICBUUF9BUkdTKHdxX3RocmVhZCkpOworCisjZW5kaWYgLyogX19UUkFDRV9XT1JLUVVFVUVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9hdHkxMjguaCBiL2luY2x1ZGUvdmlkZW8vYXR5MTI4LmgKaW5kZXggNTFhYzY5Zi4uZjA4NTFlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9hdHkxMjguaAorKysgYi9pbmNsdWRlL3ZpZGVvL2F0eTEyOC5oCkBAIC00MTUsNyArNDE1LDcgQEAKICNkZWZpbmUgUFdSX01HVF9TTE9XRE9XTl9NQ0xLCQkJMHgwMDAwMjAwMAogCiAjZGVmaW5lIFBNSV9QTVNDUl9SRUcJCQkJMHg2MAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogLyogdXNlZCBieSBBVEkgYnVnIGZpeCBmb3IgaGFyZHdhcmUgUk9NICovCiAjZGVmaW5lIFJBR0UxMjhfTVBQX1RCX0NPTkZJRyAgICAgICAgICAgICAgICAgICAweDAxYzAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9jaXJydXMuaCBiL2luY2x1ZGUvdmlkZW8vY2lycnVzLmgKaW5kZXggYjI3NzZiNi4uOWE1ZTllZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9jaXJydXMuaAorKysgYi9pbmNsdWRlL3ZpZGVvL2NpcnJ1cy5oCkBAIC0zMiw3ICszMiw2IEBACiAjZGVmaW5lIENMX1ZTU00yCTB4M2MzCS8qIE1vdGhlcmJvYXJkIFNsZWVwICovCiAKIC8qKiogVkdBIFNlcXVlbmNlciBSZWdpc3RlcnMgKioqLwotI2RlZmluZSBDTF9TRVFSMAkweDAJLyogUmVzZXQgKi8KIC8qIHRoZSBmb2xsb3dpbmcgYXJlIGZyb20gdGhlICJleHRlbnNpb24gcmVnaXN0ZXJzIiBncm91cCAqLwogI2RlZmluZSBDTF9TRVFSNgkweDYJLyogVW5sb2NrIEFMTCBFeHRlbnNpb25zICovCiAjZGVmaW5lIENMX1NFUVI3CTB4NwkvKiBFeHRlbmRlZCBTZXF1ZW5jZXIgTW9kZSAqLwpAQCAtNzEsNiArNzAsNyBAQAogI2RlZmluZSBDTF9DUlQxQgkweDFiCS8qIEV4dGVuZGVkIERpc3BsYXkgQ29udHJvbHMgKi8KICNkZWZpbmUgQ0xfQ1JUMUMJMHgxYwkvKiBTeW5jIGFkanVzdCBhbmQgZ2VubG9jayByZWdpc3RlciAqLwogI2RlZmluZSBDTF9DUlQxRAkweDFkCS8qIE92ZXJsYXkgRXh0ZW5kZWQgQ29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBDTF9DUlQxRQkweDFlCS8qIEFub3RoZXIgb3ZlcmZsb3cgcmVnaXN0ZXIgKi8KICNkZWZpbmUgQ0xfQ1JUMjUJMHgyNQkvKiBQYXJ0IFN0YXR1cyBSZWdpc3RlciAqLwogI2RlZmluZSBDTF9DUlQyNwkweDI3CS8qIElEIFJlZ2lzdGVyICovCiAjZGVmaW5lIENMX0NSVDUxCTB4NTEJLyogUDQgZGlzYWJsZSAiZmxpY2tlciBmaXhlciIgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vbmV3cG9ydC5oIGIvaW5jbHVkZS92aWRlby9uZXdwb3J0LmgKaW5kZXggMWY1ZWJlYS4uMDAxYjkzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9uZXdwb3J0LmgKKysrIGIvaW5jbHVkZS92aWRlby9uZXdwb3J0LmgKQEAgLTQ1Myw3ICs0NTMsNyBAQAogewogCWludCB0ID0gQlVTWV9USU1FT1VUOwogCi0Jd2hpbGUgKHQtLSkKKwl3aGlsZSAoLS10KQogCQlpZiAoIShyZWdzLT5jc2V0LnN0YXR1cyAmIE5QT1JUX1NUQVRfR0JVU1kpKQogCQkJYnJlYWs7CiAJcmV0dXJuICF0OwpAQCAtNDYzLDcgKzQ2Myw3IEBACiB7CiAJaW50IHQgPSBCVVNZX1RJTUVPVVQ7CiAKLQl3aGlsZSAodC0tKQorCXdoaWxlICgtLXQpCiAJCWlmKCEocmVncy0+Y3NldC5zdGF0dXMgJiBOUE9SVF9TVEFUX0JCVVNZKSkKIAkJCWJyZWFrOwogCXJldHVybiAhdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vcmFkZW9uLmggYi9pbmNsdWRlL3ZpZGVvL3JhZGVvbi5oCmluZGV4IGUwNzJiMTYuLjU2YjE4OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vcmFkZW9uLmgKKysrIGIvaW5jbHVkZS92aWRlby9yYWRlb24uaApAQCAtNSwxMiArNSwxMiBAQAogI2RlZmluZSBSQURFT05fUkVHU0laRQkJCTB4NDAwMAogCiAKLSNkZWZpbmUgTU1fSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwICAKLSNkZWZpbmUgTU1fREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAKLSNkZWZpbmUgQlVTX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDMwICAKLSNkZWZpbmUgSElfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDRDICAKKyNkZWZpbmUgTU1fSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIE1NX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBCVVNfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzAKKyNkZWZpbmUgSElfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDRDCiAjZGVmaW5lIEJVU19DTlRMMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzNAotI2RlZmluZSBJMkNfQ05UTF8xCQkJICAgICAgIDB4MDA5NCAgCisjZGVmaW5lIEkyQ19DTlRMXzEJCQkgICAgICAgMHgwMDk0CiAjZGVmaW5lIENORkdfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBFMAogI2RlZmluZSBDTkZHX01FTVNJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjgKICNkZWZpbmUgQ05GR19BUEVSXzBfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwCkBAIC0xOCw4ICsxOCw4IEBACiAjZGVmaW5lIENORkdfQVBFUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwOAogI2RlZmluZSBDTkZHX1JFR18xX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAweDAxMEMKICNkZWZpbmUgQ05GR19SRUdfQVBFUl9TSVpFICAgICAgICAgICAgICAgICAgICAgMHgwMTEwCi0jZGVmaW5lIFBBRF9BR1BJTlBVVF9ERUxBWSAgICAgICAgICAgICAgICAgICAgIDB4MDE2NCAgCi0jZGVmaW5lIFBBRF9DVExSX1NUUkVOR1RIICAgICAgICAgICAgICAgICAgICAgIDB4MDE2OCAgCisjZGVmaW5lIFBBRF9BR1BJTlBVVF9ERUxBWSAgICAgICAgICAgICAgICAgICAgIDB4MDE2NAorI2RlZmluZSBQQURfQ1RMUl9TVFJFTkdUSCAgICAgICAgICAgICAgICAgICAgICAweDAxNjgKICNkZWZpbmUgUEFEX0NUTFJfVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTZDCiAjZGVmaW5lIFBBRF9DVExSX01JU0MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MGFhMAogI2RlZmluZSBBR1BfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNzQKQEAgLTI3LDE3MSArMjcsMTcxIEBACiAjZGVmaW5lIENBUDBfVFJJR19DTlRMCQkJICAgICAgIDB4MDk1MAogI2RlZmluZSBDQVAxX1RSSUdfQ05UTAkJICAgICAgICAgICAgICAgMHgwOWMwCiAjZGVmaW5lIFZJUEhfQ09OVFJPTAkJCSAgICAgICAweDBDNDAKLSNkZWZpbmUgVkVORE9SX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwICAKLSNkZWZpbmUgREVWSUNFX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAyICAKLSNkZWZpbmUgQ09NTUFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjA0ICAKLSNkZWZpbmUgU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjA2ICAKLSNkZWZpbmUgUkVWSVNJT05fSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjA4ICAKLSNkZWZpbmUgUkVHUFJPR19JTkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjA5ICAKLSNkZWZpbmUgU1VCX0NMQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBBICAKLSNkZWZpbmUgQkFTRV9DT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBCICAKLSNkZWZpbmUgQ0FDSEVfTElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBDICAKLSNkZWZpbmUgTEFURU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBEICAKLSNkZWZpbmUgSEVBREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBFICAKLSNkZWZpbmUgQklTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBGICAKLSNkZWZpbmUgUkVHX01FTV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjEwICAKLSNkZWZpbmUgUkVHX0lPX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjE0ICAKKyNkZWZpbmUgVkVORE9SX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjAwCisjZGVmaW5lIERFVklDRV9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwMgorI2RlZmluZSBDT01NQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDQKKyNkZWZpbmUgU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjA2CisjZGVmaW5lIFJFVklTSU9OX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwOAorI2RlZmluZSBSRUdQUk9HX0lORiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMDkKKyNkZWZpbmUgU1VCX0NMQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBBCisjZGVmaW5lIEJBU0VfQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwQgorI2RlZmluZSBDQUNIRV9MSU5FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMEMKKyNkZWZpbmUgTEFURU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjBECisjZGVmaW5lIEhFQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYwRQorI2RlZmluZSBCSVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMEYKKyNkZWZpbmUgUkVHX01FTV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjEwCisjZGVmaW5lIFJFR19JT19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYxNAogI2RlZmluZSBSRUdfUkVHX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGMTgKICNkZWZpbmUgQURBUFRFUl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjJDCiAjZGVmaW5lIEJJT1NfUk9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYzMAotI2RlZmluZSBDQVBBQklMSVRJRVNfUFRSICAgICAgICAgICAgICAgICAgICAgICAweDBGMzQgIAotI2RlZmluZSBJTlRFUlJVUFRfTElORSAgICAgICAgICAgICAgICAgICAgICAgICAweDBGM0MgIAotI2RlZmluZSBJTlRFUlJVUFRfUElOICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGM0QgIAotI2RlZmluZSBNSU5fR1JBTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGM0UgIAotI2RlZmluZSBNQVhfTEFURU5DWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGM0YgIAotI2RlZmluZSBBREFQVEVSX0lEX1cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNEMgIAotI2RlZmluZSBQTUlfQ0FQX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNTAgIAotI2RlZmluZSBQTUlfTlhUX0NBUF9QVFIgICAgICAgICAgICAgICAgICAgICAgICAweDBGNTEgIAotI2RlZmluZSBQTUlfUE1DX1JFRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNTIgIAotI2RlZmluZSBQTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNTQgIAotI2RlZmluZSBQTUlfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNTcgIAotI2RlZmluZSBBR1BfQ0FQX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNTggIAotI2RlZmluZSBBR1BfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNUMgIAotI2RlZmluZSBBR1BfQ09NTUFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNjAgIAorI2RlZmluZSBDQVBBQklMSVRJRVNfUFRSICAgICAgICAgICAgICAgICAgICAgICAweDBGMzQKKyNkZWZpbmUgSU5URVJSVVBUX0xJTkUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjNDCisjZGVmaW5lIElOVEVSUlVQVF9QSU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYzRAorI2RlZmluZSBNSU5fR1JBTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGM0UKKyNkZWZpbmUgTUFYX0xBVEVOQ1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjNGCisjZGVmaW5lIEFEQVBURVJfSURfVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY0QworI2RlZmluZSBQTUlfQ0FQX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNTAKKyNkZWZpbmUgUE1JX05YVF9DQVBfUFRSICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjUxCisjZGVmaW5lIFBNSV9QTUNfUkVHICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY1MgorI2RlZmluZSBQTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNTQKKyNkZWZpbmUgUE1JX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjU3CisjZGVmaW5lIEFHUF9DQVBfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEY1OAorI2RlZmluZSBBR1BfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBGNUMKKyNkZWZpbmUgQUdQX0NPTU1BTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRjYwCiAjZGVmaW5lIEFJQ19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFEMAogI2RlZmluZSBBSUNfU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRDQKICNkZWZpbmUgQUlDX1BUX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUQ4Ci0jZGVmaW5lIEFJQ19MT19BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFEQyAgCi0jZGVmaW5lIEFJQ19ISV9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFFMCAgCi0jZGVmaW5lIEFJQ19UTEJfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFFNCAgCi0jZGVmaW5lIEFJQ19UTEJfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFFOCAgCi0jZGVmaW5lIERBQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA1OCAgCisjZGVmaW5lIEFJQ19MT19BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFEQworI2RlZmluZSBBSUNfSElfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxRTAKKyNkZWZpbmUgQUlDX1RMQl9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMUU0CisjZGVmaW5lIEFJQ19UTEJfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDFFOAorI2RlZmluZSBEQUNfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNTgKICNkZWZpbmUgREFDX0NOVEwyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDdjCi0jZGVmaW5lIENSVENfR0VOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA1MCAgCi0jZGVmaW5lIE1FTV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE0MCAgCisjZGVmaW5lIENSVENfR0VOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA1MAorI2RlZmluZSBNRU1fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNDAKICNkZWZpbmUgTUNfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTQwCi0jZGVmaW5lIEVYVF9NRU1fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE0NCAgCisjZGVmaW5lIEVYVF9NRU1fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE0NAogI2RlZmluZSBNQ19USU1JTkdfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNDQKLSNkZWZpbmUgTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTRDICAKLSNkZWZpbmUgTUVNX0lPX0NOVExfQTAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTc4ICAKKyNkZWZpbmUgTUNfQUdQX0xPQ0FUSU9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTRDCisjZGVmaW5lIE1FTV9JT19DTlRMX0EwICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE3OAogI2RlZmluZSBNRU1fUkVGUkVTSF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAweDAxNzgKLSNkZWZpbmUgTUVNX0lOSVRfTEFURU5DWV9USU1FUiAgICAgICAgICAgICAgICAgMHgwMTU0ICAKKyNkZWZpbmUgTUVNX0lOSVRfTEFURU5DWV9USU1FUiAgICAgICAgICAgICAgICAgMHgwMTU0CiAjZGVmaW5lIE1DX0lOSVRfR0ZYX0xBVF9USU1FUiAgICAgICAgICAgICAgICAgIDB4MDE1NAotI2RlZmluZSBNRU1fU0RSQU1fTU9ERV9SRUcgICAgICAgICAgICAgICAgICAgICAweDAxNTggIAotI2RlZmluZSBBR1BfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNzAgIAotI2RlZmluZSBNRU1fSU9fQ05UTF9BMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxN0MgIAorI2RlZmluZSBNRU1fU0RSQU1fTU9ERV9SRUcgICAgICAgICAgICAgICAgICAgICAweDAxNTgKKyNkZWZpbmUgQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTcwCisjZGVmaW5lIE1FTV9JT19DTlRMX0ExICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE3QwogI2RlZmluZSBNQ19SRUFEX0NOVExfQUIgICAgICAgICAgICAgICAgICAgICAgICAweDAxN0MKICNkZWZpbmUgTUVNX0lPX0NOVExfQjAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTgwCiAjZGVmaW5lIE1DX0lOSVRfTUlTQ19MQVRfVElNRVIgICAgICAgICAgICAgICAgIDB4MDE4MAogI2RlZmluZSBNRU1fSU9fQ05UTF9CMSAgICAgICAgICAgICAgICAgICAgICAgICAweDAxODQKICNkZWZpbmUgTUNfSU9QQURfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTg0CiAjZGVmaW5lIE1DX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE4OAotI2RlZmluZSBNQ19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNTAgIAotI2RlZmluZSBNRU1fSU9fT0VfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxOEMgIAorI2RlZmluZSBNQ19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNTAKKyNkZWZpbmUgTUVNX0lPX09FX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMThDCiAjZGVmaW5lIE1DX0NISVBfSU9fT0VfQ05UTF9BQiAgICAgICAgICAgICAgICAgIDB4MDE4QwotI2RlZmluZSBNQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNDggIAotI2RlZmluZSBIT1NUX1BBVEhfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMzAgIAotI2RlZmluZSBNRU1fVkdBX1dQX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMzggIAotI2RlZmluZSBNRU1fVkdBX1JQX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM0MgIAotI2RlZmluZSBIRFBfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMzggIAorI2RlZmluZSBNQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAweDAxNDgKKyNkZWZpbmUgSE9TVF9QQVRIX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTMwCisjZGVmaW5lIE1FTV9WR0FfV1BfU0VMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAzOAorI2RlZmluZSBNRU1fVkdBX1JQX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwM0MKKyNkZWZpbmUgSERQX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTM4CiAjZGVmaW5lIFNXX1NFTUFQSE9SRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEzQwotI2RlZmluZSBDUlRDMl9HRU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAzZjggIAorI2RlZmluZSBDUlRDMl9HRU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDAzZjgKICNkZWZpbmUgQ1JUQzJfRElTUExBWV9CQVNFX0FERFIgICAgICAgICAgICAgICAgMHgwMzNjCi0jZGVmaW5lIFNVUkZBQ0VfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIwMCAgCi0jZGVmaW5lIFNVUkZBQ0UwX0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIwNCAgCi0jZGVmaW5lIFNVUkZBQ0UxX0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIxNCAgCi0jZGVmaW5lIFNVUkZBQ0UyX0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIyNCAgCi0jZGVmaW5lIFNVUkZBQ0UzX0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIzNCAgCi0jZGVmaW5lIFNVUkZBQ0U0X0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEI0NCAgCisjZGVmaW5lIFNVUkZBQ0VfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIwMAorI2RlZmluZSBTVVJGQUNFMF9MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMDQKKyNkZWZpbmUgU1VSRkFDRTFfTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjE0CisjZGVmaW5lIFNVUkZBQ0UyX0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIyNAorI2RlZmluZSBTVVJGQUNFM19MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMzQKKyNkZWZpbmUgU1VSRkFDRTRfTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjQ0CiAjZGVmaW5lIFNVUkZBQ0U1X0xPV0VSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEI1NAogI2RlZmluZSBTVVJGQUNFNl9MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCNjQKICNkZWZpbmUgU1VSRkFDRTdfTE9XRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjc0Ci0jZGVmaW5lIFNVUkZBQ0UwX1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIwOCAgCi0jZGVmaW5lIFNVUkZBQ0UxX1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIxOCAgCi0jZGVmaW5lIFNVUkZBQ0UyX1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIyOCAgCi0jZGVmaW5lIFNVUkZBQ0UzX1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIzOCAgCi0jZGVmaW5lIFNVUkZBQ0U0X1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEI0OCAgCi0jZGVmaW5lIFNVUkZBQ0U1X1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEI1OCAgCi0jZGVmaW5lIFNVUkZBQ0U2X1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEI2OCAgCi0jZGVmaW5lIFNVUkZBQ0U3X1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEI3OCAgCi0jZGVmaW5lIFNVUkZBQ0UwX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIwQyAgCi0jZGVmaW5lIFNVUkZBQ0UxX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIxQyAgCi0jZGVmaW5lIFNVUkZBQ0UyX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIyQyAgCi0jZGVmaW5lIFNVUkZBQ0UzX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIzQyAgCi0jZGVmaW5lIFNVUkZBQ0U0X0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI0QyAgCi0jZGVmaW5lIFNVUkZBQ0U1X0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI1QyAgCisjZGVmaW5lIFNVUkZBQ0UwX1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIwOAorI2RlZmluZSBTVVJGQUNFMV9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCMTgKKyNkZWZpbmUgU1VSRkFDRTJfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjI4CisjZGVmaW5lIFNVUkZBQ0UzX1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEIzOAorI2RlZmluZSBTVVJGQUNFNF9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCNDgKKyNkZWZpbmUgU1VSRkFDRTVfVVBQRVJfQk9VTkQgICAgICAgICAgICAgICAgICAgMHgwQjU4CisjZGVmaW5lIFNVUkZBQ0U2X1VQUEVSX0JPVU5EICAgICAgICAgICAgICAgICAgIDB4MEI2OAorI2RlZmluZSBTVVJGQUNFN19VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAweDBCNzgKKyNkZWZpbmUgU1VSRkFDRTBfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjBDCisjZGVmaW5lIFNVUkZBQ0UxX0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEIxQworI2RlZmluZSBTVVJGQUNFMl9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCMkMKKyNkZWZpbmUgU1VSRkFDRTNfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjNDCisjZGVmaW5lIFNVUkZBQ0U0X0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI0QworI2RlZmluZSBTVVJGQUNFNV9JTkZPICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNUMKICNkZWZpbmUgU1VSRkFDRTZfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjZDCiAjZGVmaW5lIFNVUkZBQ0U3X0lORk8gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI3QwogI2RlZmluZSBTVVJGQUNFX0FDQ0VTU19GTEFHUyAgICAgICAgICAgICAgICAgICAweDBCRjgKLSNkZWZpbmUgU1VSRkFDRV9BQ0NFU1NfQ0xSICAgICAgICAgICAgICAgICAgICAgMHgwQkZDICAKLSNkZWZpbmUgR0VOX0lOVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAKLSNkZWZpbmUgR0VOX0lOVF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQ0ICAKKyNkZWZpbmUgU1VSRkFDRV9BQ0NFU1NfQ0xSICAgICAgICAgICAgICAgICAgICAgMHgwQkZDCisjZGVmaW5lIEdFTl9JTlRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBHRU5fSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDQKICNkZWZpbmUgQ1JUQ19FWFRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDU0Ci0jZGVmaW5lIFJCM0RfQ05UTAkJCSAgICAgICAweDFDM0MgIAotI2RlZmluZSBXQUlUX1VOVElMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3MjAgIAotI2RlZmluZSBJU1lOQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3MjQgIAotI2RlZmluZSBSQkJNX0dVSUNOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3MkMgIAotI2RlZmluZSBSQkJNX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFNDAgIAotI2RlZmluZSBSQkJNX1NUQVRVU19hbHRfMSAgICAgICAgICAgICAgICAgICAgICAweDE3NDAgIAotI2RlZmluZSBSQkJNX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwRUMgIAotI2RlZmluZSBSQkJNX0NOVExfYWx0XzEgICAgICAgICAgICAgICAgICAgICAgICAweDBFNDQgIAotI2RlZmluZSBSQkJNX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjAgIAotI2RlZmluZSBSQkJNX1NPRlRfUkVTRVRfYWx0XzEgICAgICAgICAgICAgICAgICAweDBFNDggIAotI2RlZmluZSBOUVdBSVRfVU5USUwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFNTAgIAorI2RlZmluZSBSQjNEX0NOVEwJCQkgICAgICAgMHgxQzNDCisjZGVmaW5lIFdBSVRfVU5USUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcyMAorI2RlZmluZSBJU1lOQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3MjQKKyNkZWZpbmUgUkJCTV9HVUlDTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNzJDCisjZGVmaW5lIFJCQk1fU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEU0MAorI2RlZmluZSBSQkJNX1NUQVRVU19hbHRfMSAgICAgICAgICAgICAgICAgICAgICAweDE3NDAKKyNkZWZpbmUgUkJCTV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEVDCisjZGVmaW5lIFJCQk1fQ05UTF9hbHRfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MEU0NAorI2RlZmluZSBSQkJNX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwRjAKKyNkZWZpbmUgUkJCTV9TT0ZUX1JFU0VUX2FsdF8xICAgICAgICAgICAgICAgICAgMHgwRTQ4CisjZGVmaW5lIE5RV0FJVF9VTlRJTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEU1MAogI2RlZmluZSBSQkJNX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBFNkMKICNkZWZpbmUgUkJCTV9DTURGSUZPX0FERFIgICAgICAgICAgICAgICAgICAgICAgMHgwRTcwCiAjZGVmaW5lIFJCQk1fQ01ERklGT19EQVRBTCAgICAgICAgICAgICAgICAgICAgIDB4MEU3NAotI2RlZmluZSBSQkJNX0NNREZJRk9fREFUQUggICAgICAgICAgICAgICAgICAgICAweDBFNzggIAotI2RlZmluZSBSQkJNX0NNREZJRk9fU1RBVCAgICAgICAgICAgICAgICAgICAgICAweDBFN0MgIAotI2RlZmluZSBDUlRDX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNUMgIAotI2RlZmluZSBHUElPX1ZHQV9EREMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNjAgIAotI2RlZmluZSBHUElPX0RWSV9EREMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNjQgIAotI2RlZmluZSBHUElPX01PTklEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNjggIAorI2RlZmluZSBSQkJNX0NNREZJRk9fREFUQUggICAgICAgICAgICAgICAgICAgICAweDBFNzgKKyNkZWZpbmUgUkJCTV9DTURGSUZPX1NUQVQgICAgICAgICAgICAgICAgICAgICAgMHgwRTdDCisjZGVmaW5lIENSVENfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA1QworI2RlZmluZSBHUElPX1ZHQV9EREMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNjAKKyNkZWZpbmUgR1BJT19EVklfRERDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDY0CisjZGVmaW5lIEdQSU9fTU9OSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA2OAogI2RlZmluZSBHUElPX0NSVDJfRERDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNmMKLSNkZWZpbmUgUEFMRVRURV9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEIwICAKLSNkZWZpbmUgUEFMRVRURV9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEI0ICAKLSNkZWZpbmUgUEFMRVRURV8zMF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEI4ICAKLSNkZWZpbmUgQ1JUQ19IX1RPVEFMX0RJU1AgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAKLSNkZWZpbmUgQ1JUQ19IX1NZTkNfU1RSVF9XSUQgICAgICAgICAgICAgICAgICAgMHgwMjA0ICAKLSNkZWZpbmUgQ1JUQ19WX1RPVEFMX0RJU1AgICAgICAgICAgICAgICAgICAgICAgMHgwMjA4ICAKLSNkZWZpbmUgQ1JUQ19WX1NZTkNfU1RSVF9XSUQgICAgICAgICAgICAgICAgICAgMHgwMjBDICAKLSNkZWZpbmUgQ1JUQ19WTElORV9DUk5UX1ZMSU5FICAgICAgICAgICAgICAgICAgMHgwMjEwICAKKyNkZWZpbmUgUEFMRVRURV9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMEIwCisjZGVmaW5lIFBBTEVUVEVfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBCNAorI2RlZmluZSBQQUxFVFRFXzMwX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAweDAwQjgKKyNkZWZpbmUgQ1JUQ19IX1RPVEFMX0RJU1AgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIENSVENfSF9TWU5DX1NUUlRfV0lEICAgICAgICAgICAgICAgICAgIDB4MDIwNAorI2RlZmluZSBDUlRDX1ZfVE9UQUxfRElTUCAgICAgICAgICAgICAgICAgICAgICAweDAyMDgKKyNkZWZpbmUgQ1JUQ19WX1NZTkNfU1RSVF9XSUQgICAgICAgICAgICAgICAgICAgMHgwMjBDCisjZGVmaW5lIENSVENfVkxJTkVfQ1JOVF9WTElORSAgICAgICAgICAgICAgICAgIDB4MDIxMAogI2RlZmluZSBDUlRDX0NSTlRfRlJBTUUgICAgICAgICAgICAgICAgICAgICAgICAweDAyMTQKICNkZWZpbmUgQ1JUQ19HVUlfVFJJR19WTElORSAgICAgICAgICAgICAgICAgICAgMHgwMjE4CiAjZGVmaW5lIENSVENfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIxQwotI2RlZmluZSBDUlRDX09GRlNFVF9SSUdIVCAgICAgICAgICAgICAgICAgICAgICAweDAyMjAgIAotI2RlZmluZSBDUlRDX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMjQgIAotI2RlZmluZSBDUlRDX09GRlNFVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAweDAyMjggIAotI2RlZmluZSBDUlRDX1BJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMkMgIAotI2RlZmluZSBPVlJfQ0xSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMzAgIAotI2RlZmluZSBPVlJfV0lEX0xFRlRfUklHSFQgICAgICAgICAgICAgICAgICAgICAweDAyMzQgIAotI2RlZmluZSBPVlJfV0lEX1RPUF9CT1RUT00gICAgICAgICAgICAgICAgICAgICAweDAyMzggIAotI2RlZmluZSBESVNQTEFZX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgICAgICAweDAyM0MgIAotI2RlZmluZSBTTkFQU0hPVF9WSF9DT1VOVFMgICAgICAgICAgICAgICAgICAgICAweDAyNDAgIAotI2RlZmluZSBTTkFQU0hPVF9GX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAweDAyNDQgIAotI2RlZmluZSBOX1ZJRl9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyNDggIAotI2RlZmluZSBTTkFQU0hPVF9WSUZfQ09VTlQgICAgICAgICAgICAgICAgICAgICAweDAyNEMgIAotI2RlZmluZSBGUF9DUlRDX0hfVE9UQUxfRElTUCAgICAgICAgICAgICAgICAgICAweDAyNTAgIAotI2RlZmluZSBGUF9DUlRDX1ZfVE9UQUxfRElTUCAgICAgICAgICAgICAgICAgICAweDAyNTQgIAorI2RlZmluZSBDUlRDX09GRlNFVF9SSUdIVCAgICAgICAgICAgICAgICAgICAgICAweDAyMjAKKyNkZWZpbmUgQ1JUQ19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjI0CisjZGVmaW5lIENSVENfT0ZGU0VUX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MDIyOAorI2RlZmluZSBDUlRDX1BJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMkMKKyNkZWZpbmUgT1ZSX0NMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjMwCisjZGVmaW5lIE9WUl9XSURfTEVGVF9SSUdIVCAgICAgICAgICAgICAgICAgICAgIDB4MDIzNAorI2RlZmluZSBPVlJfV0lEX1RPUF9CT1RUT00gICAgICAgICAgICAgICAgICAgICAweDAyMzgKKyNkZWZpbmUgRElTUExBWV9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgMHgwMjNDCisjZGVmaW5lIFNOQVBTSE9UX1ZIX0NPVU5UUyAgICAgICAgICAgICAgICAgICAgIDB4MDI0MAorI2RlZmluZSBTTkFQU0hPVF9GX0NPVU5UICAgICAgICAgICAgICAgICAgICAgICAweDAyNDQKKyNkZWZpbmUgTl9WSUZfQ09VTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjQ4CisjZGVmaW5lIFNOQVBTSE9UX1ZJRl9DT1VOVCAgICAgICAgICAgICAgICAgICAgIDB4MDI0QworI2RlZmluZSBGUF9DUlRDX0hfVE9UQUxfRElTUCAgICAgICAgICAgICAgICAgICAweDAyNTAKKyNkZWZpbmUgRlBfQ1JUQ19WX1RPVEFMX0RJU1AgICAgICAgICAgICAgICAgICAgMHgwMjU0CiAjZGVmaW5lIENSVF9DUlRDX0hfU1lOQ19TVFJUX1dJRCAgICAgICAgICAgICAgIDB4MDI1OAogI2RlZmluZSBDUlRfQ1JUQ19WX1NZTkNfU1RSVF9XSUQgICAgICAgICAgICAgICAweDAyNUMKICNkZWZpbmUgQ1VSX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjYwCi0jZGVmaW5lIENVUl9IT1JaX1ZFUlRfUE9TTiAgICAgICAgICAgICAgICAgICAgIDB4MDI2NCAgCi0jZGVmaW5lIENVUl9IT1JaX1ZFUlRfT0ZGICAgICAgICAgICAgICAgICAgICAgIDB4MDI2OCAgCi0jZGVmaW5lIENVUl9DTFIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI2QyAgCi0jZGVmaW5lIENVUl9DTFIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI3MCAgCi0jZGVmaW5lIEZQX0hPUlpfVkVSVF9BQ1RJVkUgICAgICAgICAgICAgICAgICAgIDB4MDI3OCAgCi0jZGVmaW5lIENSVENfTU9SRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI3QyAgCisjZGVmaW5lIENVUl9IT1JaX1ZFUlRfUE9TTiAgICAgICAgICAgICAgICAgICAgIDB4MDI2NAorI2RlZmluZSBDVVJfSE9SWl9WRVJUX09GRiAgICAgICAgICAgICAgICAgICAgICAweDAyNjgKKyNkZWZpbmUgQ1VSX0NMUjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjZDCisjZGVmaW5lIENVUl9DTFIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI3MAorI2RlZmluZSBGUF9IT1JaX1ZFUlRfQUNUSVZFICAgICAgICAgICAgICAgICAgICAweDAyNzgKKyNkZWZpbmUgQ1JUQ19NT1JFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjdDCiAjZGVmaW5lIENSVENfSF9DVVRPRkZfQUNUSVZFX0VOICAgICAgICAgICAgICAgICgxPDw0KQogI2RlZmluZSBDUlRDX1ZfQ1VUT0ZGX0FDVElWRV9FTiAgICAgICAgICAgICAgICAoMTw8NSkKLSNkZWZpbmUgREFDX0VYVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwICAKLSNkZWZpbmUgRlBfR0VOX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjg0ICAKLSNkZWZpbmUgRlBfSE9SWl9TVFJFVENIICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjhDICAKLSNkZWZpbmUgRlBfVkVSVF9TVFJFVENIICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjkwICAKLSNkZWZpbmUgRlBfSF9TWU5DX1NUUlRfV0lEICAgICAgICAgICAgICAgICAgICAgMHgwMkM0ICAKLSNkZWZpbmUgRlBfVl9TWU5DX1NUUlRfV0lEICAgICAgICAgICAgICAgICAgICAgMHgwMkM4ICAKLSNkZWZpbmUgQVVYX1dJTkRPV19IT1JaX0NOVEwgICAgICAgICAgICAgICAgICAgMHgwMkQ4ICAKLSNkZWZpbmUgQVVYX1dJTkRPV19WRVJUX0NOVEwgICAgICAgICAgICAgICAgICAgMHgwMkRDICAKKyNkZWZpbmUgREFDX0VYVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwCisjZGVmaW5lIEZQX0dFTl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDI4NAorI2RlZmluZSBGUF9IT1JaX1NUUkVUQ0ggICAgICAgICAgICAgICAgICAgICAgICAweDAyOEMKKyNkZWZpbmUgRlBfVkVSVF9TVFJFVENIICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjkwCisjZGVmaW5lIEZQX0hfU1lOQ19TVFJUX1dJRCAgICAgICAgICAgICAgICAgICAgIDB4MDJDNAorI2RlZmluZSBGUF9WX1NZTkNfU1RSVF9XSUQgICAgICAgICAgICAgICAgICAgICAweDAyQzgKKyNkZWZpbmUgQVVYX1dJTkRPV19IT1JaX0NOVEwgICAgICAgICAgICAgICAgICAgMHgwMkQ4CisjZGVmaW5lIEFVWF9XSU5ET1dfVkVSVF9DTlRMICAgICAgICAgICAgICAgICAgIDB4MDJEQwogLy8jZGVmaW5lIEREQV9DT05GSUcJCQkgICAgICAgMHgwMmUwCiAvLyNkZWZpbmUgRERBX09OX09GRgkJCSAgICAgICAweDAyZTQKICNkZWZpbmUgRFZJX0kyQ19DTlRMXzEJCQkgICAgICAgMHgwMmU0CkBAIC0xOTksMTkyICsxOTksMTkyIEBACiAjZGVmaW5lIEdSUEgyX0JVRkZFUl9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MDNGMAogI2RlZmluZSBWR0FfQlVGRkVSX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDAyRjQKICNkZWZpbmUgT1YwX1lfWF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwCi0jZGVmaW5lIE9WMF9ZX1hfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNCAgCi0jZGVmaW5lIE9WMF9QSVBFTElORV9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MDQwOCAgCi0jZGVmaW5lIE9WMF9SRUdfTE9BRF9DTlRMICAgICAgICAgICAgICAgICAgICAgIDB4MDQxMCAgCi0jZGVmaW5lIE9WMF9TQ0FMRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQyMCAgCi0jZGVmaW5lIE9WMF9WX0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQyNCAgCi0jZGVmaW5lIE9WMF9QMV9WX0FDQ1VNX0lOSVQgICAgICAgICAgICAgICAgICAgIDB4MDQyOCAgCi0jZGVmaW5lIE9WMF9QMjNfVl9BQ0NVTV9JTklUICAgICAgICAgICAgICAgICAgIDB4MDQyQyAgCi0jZGVmaW5lIE9WMF9QMV9CTEFOS19MSU5FU19BVF9UT1AgICAgICAgICAgICAgIDB4MDQzMCAgCi0jZGVmaW5lIE9WMF9QMjNfQkxBTktfTElORVNfQVRfVE9QICAgICAgICAgICAgIDB4MDQzNCAgCi0jZGVmaW5lIE9WMF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQzQyAgCi0jZGVmaW5lIE9WMF9WSURfQlVGMF9CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ0MCAgCi0jZGVmaW5lIE9WMF9WSURfQlVGMV9CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ0NCAgCi0jZGVmaW5lIE9WMF9WSURfQlVGMl9CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ0OCAgCi0jZGVmaW5lIE9WMF9WSURfQlVGM19CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ0QyAgCisjZGVmaW5lIE9WMF9ZX1hfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNAorI2RlZmluZSBPVjBfUElQRUxJTkVfQ05UTCAgICAgICAgICAgICAgICAgICAgICAweDA0MDgKKyNkZWZpbmUgT1YwX1JFR19MT0FEX0NOVEwgICAgICAgICAgICAgICAgICAgICAgMHgwNDEwCisjZGVmaW5lIE9WMF9TQ0FMRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQyMAorI2RlZmluZSBPVjBfVl9JTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MjQKKyNkZWZpbmUgT1YwX1AxX1ZfQUNDVU1fSU5JVCAgICAgICAgICAgICAgICAgICAgMHgwNDI4CisjZGVmaW5lIE9WMF9QMjNfVl9BQ0NVTV9JTklUICAgICAgICAgICAgICAgICAgIDB4MDQyQworI2RlZmluZSBPVjBfUDFfQkxBTktfTElORVNfQVRfVE9QICAgICAgICAgICAgICAweDA0MzAKKyNkZWZpbmUgT1YwX1AyM19CTEFOS19MSU5FU19BVF9UT1AgICAgICAgICAgICAgMHgwNDM0CisjZGVmaW5lIE9WMF9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQzQworI2RlZmluZSBPVjBfVklEX0JVRjBfQkFTRV9BRFJTICAgICAgICAgICAgICAgICAweDA0NDAKKyNkZWZpbmUgT1YwX1ZJRF9CVUYxX0JBU0VfQURSUyAgICAgICAgICAgICAgICAgMHgwNDQ0CisjZGVmaW5lIE9WMF9WSURfQlVGMl9CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ0OAorI2RlZmluZSBPVjBfVklEX0JVRjNfQkFTRV9BRFJTICAgICAgICAgICAgICAgICAweDA0NEMKICNkZWZpbmUgT1YwX1ZJRF9CVUY0X0JBU0VfQURSUyAgICAgICAgICAgICAgICAgMHgwNDUwCiAjZGVmaW5lIE9WMF9WSURfQlVGNV9CQVNFX0FEUlMgICAgICAgICAgICAgICAgIDB4MDQ1NAogI2RlZmluZSBPVjBfVklEX0JVRl9QSVRDSDBfVkFMVUUgICAgICAgICAgICAgICAweDA0NjAKLSNkZWZpbmUgT1YwX1ZJRF9CVUZfUElUQ0gxX1ZBTFVFICAgICAgICAgICAgICAgMHgwNDY0ICAKLSNkZWZpbmUgT1YwX0FVVE9fRkxJUF9DTlRSTCAgICAgICAgICAgICAgICAgICAgMHgwNDcwICAKLSNkZWZpbmUgT1YwX0RFSU5URVJMQUNFX1BBVFRFUk4gICAgICAgICAgICAgICAgMHgwNDc0ICAKLSNkZWZpbmUgT1YwX1NVQk1JVF9ISVNUT1JZICAgICAgICAgICAgICAgICAgICAgMHgwNDc4ICAKLSNkZWZpbmUgT1YwX0hfSU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDgwICAKLSNkZWZpbmUgT1YwX1NURVBfQlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDg0ICAKLSNkZWZpbmUgT1YwX1AxX0hfQUNDVU1fSU5JVCAgICAgICAgICAgICAgICAgICAgMHgwNDg4ICAKLSNkZWZpbmUgT1YwX1AyM19IX0FDQ1VNX0lOSVQgICAgICAgICAgICAgICAgICAgMHgwNDhDICAKLSNkZWZpbmUgT1YwX1AxX1hfU1RBUlRfRU5EICAgICAgICAgICAgICAgICAgICAgMHgwNDk0ICAKLSNkZWZpbmUgT1YwX1AyX1hfU1RBUlRfRU5EICAgICAgICAgICAgICAgICAgICAgMHgwNDk4ICAKLSNkZWZpbmUgT1YwX1AzX1hfU1RBUlRfRU5EICAgICAgICAgICAgICAgICAgICAgMHgwNDlDICAKLSNkZWZpbmUgT1YwX0ZJTFRFUl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgMHgwNEEwICAKLSNkZWZpbmUgT1YwX0ZPVVJfVEFQX0NPRUZfMCAgICAgICAgICAgICAgICAgICAgMHgwNEIwICAKLSNkZWZpbmUgT1YwX0ZPVVJfVEFQX0NPRUZfMSAgICAgICAgICAgICAgICAgICAgMHgwNEI0ICAKKyNkZWZpbmUgT1YwX1ZJRF9CVUZfUElUQ0gxX1ZBTFVFICAgICAgICAgICAgICAgMHgwNDY0CisjZGVmaW5lIE9WMF9BVVRPX0ZMSVBfQ05UUkwgICAgICAgICAgICAgICAgICAgIDB4MDQ3MAorI2RlZmluZSBPVjBfREVJTlRFUkxBQ0VfUEFUVEVSTiAgICAgICAgICAgICAgICAweDA0NzQKKyNkZWZpbmUgT1YwX1NVQk1JVF9ISVNUT1JZICAgICAgICAgICAgICAgICAgICAgMHgwNDc4CisjZGVmaW5lIE9WMF9IX0lOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQ4MAorI2RlZmluZSBPVjBfU1RFUF9CWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0ODQKKyNkZWZpbmUgT1YwX1AxX0hfQUNDVU1fSU5JVCAgICAgICAgICAgICAgICAgICAgMHgwNDg4CisjZGVmaW5lIE9WMF9QMjNfSF9BQ0NVTV9JTklUICAgICAgICAgICAgICAgICAgIDB4MDQ4QworI2RlZmluZSBPVjBfUDFfWF9TVEFSVF9FTkQgICAgICAgICAgICAgICAgICAgICAweDA0OTQKKyNkZWZpbmUgT1YwX1AyX1hfU1RBUlRfRU5EICAgICAgICAgICAgICAgICAgICAgMHgwNDk4CisjZGVmaW5lIE9WMF9QM19YX1NUQVJUX0VORCAgICAgICAgICAgICAgICAgICAgIDB4MDQ5QworI2RlZmluZSBPVjBfRklMVEVSX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDA0QTAKKyNkZWZpbmUgT1YwX0ZPVVJfVEFQX0NPRUZfMCAgICAgICAgICAgICAgICAgICAgMHgwNEIwCisjZGVmaW5lIE9WMF9GT1VSX1RBUF9DT0VGXzEgICAgICAgICAgICAgICAgICAgIDB4MDRCNAogI2RlZmluZSBPVjBfRk9VUl9UQVBfQ09FRl8yICAgICAgICAgICAgICAgICAgICAweDA0QjgKICNkZWZpbmUgT1YwX0ZPVVJfVEFQX0NPRUZfMyAgICAgICAgICAgICAgICAgICAgMHgwNEJDCiAjZGVmaW5lIE9WMF9GT1VSX1RBUF9DT0VGXzQgICAgICAgICAgICAgICAgICAgIDB4MDRDMAotI2RlZmluZSBPVjBfRkxBR19DTlRSTCAgICAgICAgICAgICAgICAgICAgICAgICAweDA0REMgIAotI2RlZmluZSBPVjBfU0xJQ0VfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDA0RTAgIAotI2RlZmluZSBPVjBfVklEX0tFWV9DTFJfTE9XICAgICAgICAgICAgICAgICAgICAweDA0RTQgIAotI2RlZmluZSBPVjBfVklEX0tFWV9DTFJfSElHSCAgICAgICAgICAgICAgICAgICAweDA0RTggIAotI2RlZmluZSBPVjBfR1JQSF9LRVlfQ0xSX0xPVyAgICAgICAgICAgICAgICAgICAweDA0RUMgIAotI2RlZmluZSBPVjBfR1JQSF9LRVlfQ0xSX0hJR0ggICAgICAgICAgICAgICAgICAweDA0RjAgIAotI2RlZmluZSBPVjBfS0VZX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0RjQgIAotI2RlZmluZSBPVjBfVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0RjggIAotI2RlZmluZSBTVUJQSUNfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1NDAgIAotI2RlZmluZSBTVUJQSUNfREVGQ09MQ09OICAgICAgICAgICAgICAgICAgICAgICAweDA1NDQgIAotI2RlZmluZSBTVUJQSUNfWV9YX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAweDA1NEMgIAotI2RlZmluZSBTVUJQSUNfWV9YX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAweDA1NTAgIAotI2RlZmluZSBTVUJQSUNfVl9JTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1NTQgIAotI2RlZmluZSBTVUJQSUNfSF9JTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1NTggIAorI2RlZmluZSBPVjBfRkxBR19DTlRSTCAgICAgICAgICAgICAgICAgICAgICAgICAweDA0REMKKyNkZWZpbmUgT1YwX1NMSUNFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNEUwCisjZGVmaW5lIE9WMF9WSURfS0VZX0NMUl9MT1cgICAgICAgICAgICAgICAgICAgIDB4MDRFNAorI2RlZmluZSBPVjBfVklEX0tFWV9DTFJfSElHSCAgICAgICAgICAgICAgICAgICAweDA0RTgKKyNkZWZpbmUgT1YwX0dSUEhfS0VZX0NMUl9MT1cgICAgICAgICAgICAgICAgICAgMHgwNEVDCisjZGVmaW5lIE9WMF9HUlBIX0tFWV9DTFJfSElHSCAgICAgICAgICAgICAgICAgIDB4MDRGMAorI2RlZmluZSBPVjBfS0VZX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0RjQKKyNkZWZpbmUgT1YwX1RFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNEY4CisjZGVmaW5lIFNVQlBJQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU0MAorI2RlZmluZSBTVUJQSUNfREVGQ09MQ09OICAgICAgICAgICAgICAgICAgICAgICAweDA1NDQKKyNkZWZpbmUgU1VCUElDX1lfWF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgMHgwNTRDCisjZGVmaW5lIFNVQlBJQ19ZX1hfRU5EICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU1MAorI2RlZmluZSBTVUJQSUNfVl9JTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1NTQKKyNkZWZpbmUgU1VCUElDX0hfSU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTU4CiAjZGVmaW5lIFNVQlBJQ19CVUYwX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDB4MDU1QwogI2RlZmluZSBTVUJQSUNfQlVGMV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAweDA1NjAKICNkZWZpbmUgU1VCUElDX0xDMF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHgwNTY0Ci0jZGVmaW5lIFNVQlBJQ19MQzFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDU2OCAgCi0jZGVmaW5lIFNVQlBJQ19QSVRDSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU2QyAgCi0jZGVmaW5lIFNVQlBJQ19CVE5fSExJX0NPTENPTiAgICAgICAgICAgICAgICAgIDB4MDU3MCAgCi0jZGVmaW5lIFNVQlBJQ19CVE5fSExJX1lfWF9TVEFSVCAgICAgICAgICAgICAgIDB4MDU3NCAgCi0jZGVmaW5lIFNVQlBJQ19CVE5fSExJX1lfWF9FTkQgICAgICAgICAgICAgICAgIDB4MDU3OCAgCi0jZGVmaW5lIFNVQlBJQ19QQUxFVFRFX0lOREVYICAgICAgICAgICAgICAgICAgIDB4MDU3QyAgCi0jZGVmaW5lIFNVQlBJQ19QQUxFVFRFX0RBVEEgICAgICAgICAgICAgICAgICAgIDB4MDU4MCAgCi0jZGVmaW5lIFNVQlBJQ19IX0FDQ1VNX0lOSVQgICAgICAgICAgICAgICAgICAgIDB4MDU4NCAgCi0jZGVmaW5lIFNVQlBJQ19WX0FDQ1VNX0lOSVQgICAgICAgICAgICAgICAgICAgIDB4MDU4OCAgCi0jZGVmaW5lIERJU1BfTUlTQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwMCAgCi0jZGVmaW5lIERBQ19NQUNST19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwNCAgCi0jZGVmaW5lIERJU1BfUFdSX01BTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwOCAgCi0jZGVmaW5lIERJU1BfVEVTVF9ERUJVR19DTlRMICAgICAgICAgICAgICAgICAgIDB4MEQxMCAgCi0jZGVmaW5lIERJU1BfSFdfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQxNCAgCisjZGVmaW5lIFNVQlBJQ19MQzFfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4MDU2OAorI2RlZmluZSBTVUJQSUNfUElUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1NkMKKyNkZWZpbmUgU1VCUElDX0JUTl9ITElfQ09MQ09OICAgICAgICAgICAgICAgICAgMHgwNTcwCisjZGVmaW5lIFNVQlBJQ19CVE5fSExJX1lfWF9TVEFSVCAgICAgICAgICAgICAgIDB4MDU3NAorI2RlZmluZSBTVUJQSUNfQlROX0hMSV9ZX1hfRU5EICAgICAgICAgICAgICAgICAweDA1NzgKKyNkZWZpbmUgU1VCUElDX1BBTEVUVEVfSU5ERVggICAgICAgICAgICAgICAgICAgMHgwNTdDCisjZGVmaW5lIFNVQlBJQ19QQUxFVFRFX0RBVEEgICAgICAgICAgICAgICAgICAgIDB4MDU4MAorI2RlZmluZSBTVUJQSUNfSF9BQ0NVTV9JTklUICAgICAgICAgICAgICAgICAgICAweDA1ODQKKyNkZWZpbmUgU1VCUElDX1ZfQUNDVU1fSU5JVCAgICAgICAgICAgICAgICAgICAgMHgwNTg4CisjZGVmaW5lIERJU1BfTUlTQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwMAorI2RlZmluZSBEQUNfTUFDUk9fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMDQKKyNkZWZpbmUgRElTUF9QV1JfTUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDA4CisjZGVmaW5lIERJU1BfVEVTVF9ERUJVR19DTlRMICAgICAgICAgICAgICAgICAgIDB4MEQxMAorI2RlZmluZSBESVNQX0hXX0RFQlVHICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMTQKICNkZWZpbmUgREFDX0NSQ19TSUcxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDE4CiAjZGVmaW5lIERBQ19DUkNfU0lHMiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQxQwogI2RlZmluZSBPVjBfTElOX1RSQU5TX0EgICAgICAgICAgICAgICAgICAgICAgICAweDBEMjAKLSNkZWZpbmUgT1YwX0xJTl9UUkFOU19CICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDI0ICAKLSNkZWZpbmUgT1YwX0xJTl9UUkFOU19DICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDI4ICAKLSNkZWZpbmUgT1YwX0xJTl9UUkFOU19EICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDJDICAKLSNkZWZpbmUgT1YwX0xJTl9UUkFOU19FICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDMwICAKLSNkZWZpbmUgT1YwX0xJTl9UUkFOU19GICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDM0ICAKLSNkZWZpbmUgT1YwX0dBTU1BXzBfRiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDQwICAKLSNkZWZpbmUgT1YwX0dBTU1BXzEwXzFGICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDQ0ICAKLSNkZWZpbmUgT1YwX0dBTU1BXzIwXzNGICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDQ4ICAKLSNkZWZpbmUgT1YwX0dBTU1BXzQwXzdGICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDRDICAKLSNkZWZpbmUgT1YwX0dBTU1BXzM4MF8zQkYgICAgICAgICAgICAgICAgICAgICAgMHgwRDUwICAKLSNkZWZpbmUgT1YwX0dBTU1BXzNDMF8zRkYgICAgICAgICAgICAgICAgICAgICAgMHgwRDU0ICAKLSNkZWZpbmUgRElTUF9NRVJHRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDYwICAKLSNkZWZpbmUgRElTUF9PVVRQVVRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgMHgwRDY0ICAKLSNkZWZpbmUgRElTUF9MSU5fVFJBTlNfR1JQSF9BICAgICAgICAgICAgICAgICAgMHgwRDgwICAKKyNkZWZpbmUgT1YwX0xJTl9UUkFOU19CICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDI0CisjZGVmaW5lIE9WMF9MSU5fVFJBTlNfQyAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQyOAorI2RlZmluZSBPVjBfTElOX1RSQU5TX0QgICAgICAgICAgICAgICAgICAgICAgICAweDBEMkMKKyNkZWZpbmUgT1YwX0xJTl9UUkFOU19FICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDMwCisjZGVmaW5lIE9WMF9MSU5fVFJBTlNfRiAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQzNAorI2RlZmluZSBPVjBfR0FNTUFfMF9GICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENDAKKyNkZWZpbmUgT1YwX0dBTU1BXzEwXzFGICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDQ0CisjZGVmaW5lIE9WMF9HQU1NQV8yMF8zRiAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ0OAorI2RlZmluZSBPVjBfR0FNTUFfNDBfN0YgICAgICAgICAgICAgICAgICAgICAgICAweDBENEMKKyNkZWZpbmUgT1YwX0dBTU1BXzM4MF8zQkYgICAgICAgICAgICAgICAgICAgICAgMHgwRDUwCisjZGVmaW5lIE9WMF9HQU1NQV8zQzBfM0ZGICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1NAorI2RlZmluZSBESVNQX01FUkdFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDBENjAKKyNkZWZpbmUgRElTUF9PVVRQVVRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgMHgwRDY0CisjZGVmaW5lIERJU1BfTElOX1RSQU5TX0dSUEhfQSAgICAgICAgICAgICAgICAgIDB4MEQ4MAogI2RlZmluZSBESVNQX0xJTl9UUkFOU19HUlBIX0IgICAgICAgICAgICAgICAgICAweDBEODQKICNkZWZpbmUgRElTUF9MSU5fVFJBTlNfR1JQSF9DICAgICAgICAgICAgICAgICAgMHgwRDg4CiAjZGVmaW5lIERJU1BfTElOX1RSQU5TX0dSUEhfRCAgICAgICAgICAgICAgICAgIDB4MEQ4QwotI2RlZmluZSBESVNQX0xJTl9UUkFOU19HUlBIX0UgICAgICAgICAgICAgICAgICAweDBEOTAgIAotI2RlZmluZSBESVNQX0xJTl9UUkFOU19HUlBIX0YgICAgICAgICAgICAgICAgICAweDBEOTQgIAotI2RlZmluZSBESVNQX0xJTl9UUkFOU19WSURfQSAgICAgICAgICAgICAgICAgICAweDBEOTggIAotI2RlZmluZSBESVNQX0xJTl9UUkFOU19WSURfQiAgICAgICAgICAgICAgICAgICAweDBEOUMgIAotI2RlZmluZSBESVNQX0xJTl9UUkFOU19WSURfQyAgICAgICAgICAgICAgICAgICAweDBEQTAgIAotI2RlZmluZSBESVNQX0xJTl9UUkFOU19WSURfRCAgICAgICAgICAgICAgICAgICAweDBEQTQgIAotI2RlZmluZSBESVNQX0xJTl9UUkFOU19WSURfRSAgICAgICAgICAgICAgICAgICAweDBEQTggIAotI2RlZmluZSBESVNQX0xJTl9UUkFOU19WSURfRiAgICAgICAgICAgICAgICAgICAweDBEQUMgIAotI2RlZmluZSBSTVhfSE9SWl9GSUxURVJfMFRBUF9DT0VGICAgICAgICAgICAgICAweDBEQjAgIAotI2RlZmluZSBSTVhfSE9SWl9GSUxURVJfMVRBUF9DT0VGICAgICAgICAgICAgICAweDBEQjQgIAotI2RlZmluZSBSTVhfSE9SWl9GSUxURVJfMlRBUF9DT0VGICAgICAgICAgICAgICAweDBEQjggIAotI2RlZmluZSBSTVhfSE9SWl9QSEFTRSAgICAgICAgICAgICAgICAgICAgICAgICAweDBEQkMgIAotI2RlZmluZSBEQUNfRU1CRURERURfU1lOQ19DTlRMICAgICAgICAgICAgICAgICAweDBEQzAgIAotI2RlZmluZSBEQUNfQlJPQURfUFVMU0UgICAgICAgICAgICAgICAgICAgICAgICAweDBEQzQgIAorI2RlZmluZSBESVNQX0xJTl9UUkFOU19HUlBIX0UgICAgICAgICAgICAgICAgICAweDBEOTAKKyNkZWZpbmUgRElTUF9MSU5fVFJBTlNfR1JQSF9GICAgICAgICAgICAgICAgICAgMHgwRDk0CisjZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9BICAgICAgICAgICAgICAgICAgIDB4MEQ5OAorI2RlZmluZSBESVNQX0xJTl9UUkFOU19WSURfQiAgICAgICAgICAgICAgICAgICAweDBEOUMKKyNkZWZpbmUgRElTUF9MSU5fVFJBTlNfVklEX0MgICAgICAgICAgICAgICAgICAgMHgwREEwCisjZGVmaW5lIERJU1BfTElOX1RSQU5TX1ZJRF9EICAgICAgICAgICAgICAgICAgIDB4MERBNAorI2RlZmluZSBESVNQX0xJTl9UUkFOU19WSURfRSAgICAgICAgICAgICAgICAgICAweDBEQTgKKyNkZWZpbmUgRElTUF9MSU5fVFJBTlNfVklEX0YgICAgICAgICAgICAgICAgICAgMHgwREFDCisjZGVmaW5lIFJNWF9IT1JaX0ZJTFRFUl8wVEFQX0NPRUYgICAgICAgICAgICAgIDB4MERCMAorI2RlZmluZSBSTVhfSE9SWl9GSUxURVJfMVRBUF9DT0VGICAgICAgICAgICAgICAweDBEQjQKKyNkZWZpbmUgUk1YX0hPUlpfRklMVEVSXzJUQVBfQ09FRiAgICAgICAgICAgICAgMHgwREI4CisjZGVmaW5lIFJNWF9IT1JaX1BIQVNFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MERCQworI2RlZmluZSBEQUNfRU1CRURERURfU1lOQ19DTlRMICAgICAgICAgICAgICAgICAweDBEQzAKKyNkZWZpbmUgREFDX0JST0FEX1BVTFNFICAgICAgICAgICAgICAgICAgICAgICAgMHgwREM0CiAjZGVmaW5lIERBQ19TS0VXX0NMS1MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MERDOAogI2RlZmluZSBEQUNfSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEQ0MKICNkZWZpbmUgREFDX05FR19TWU5DX0xFVkVMICAgICAgICAgICAgICAgICAgICAgMHgwREQwCi0jZGVmaW5lIERBQ19QT1NfU1lOQ19MRVZFTCAgICAgICAgICAgICAgICAgICAgIDB4MERENCAgCi0jZGVmaW5lIERBQ19CTEFOS19MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MEREOCAgCi0jZGVmaW5lIENMT0NLX0NOVExfSU5ERVggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgCi0jZGVmaW5lIENMT0NLX0NOVExfREFUQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQyAgCi0jZGVmaW5lIENQX1JCX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwNCAgCi0jZGVmaW5lIENQX1JCX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwMCAgCi0jZGVmaW5lIENQX1JCX1JQVFJfQUREUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwQyAgCi0jZGVmaW5lIENQX1JCX1JQVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcxMCAgCi0jZGVmaW5lIENQX1JCX1dQVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcxNCAgCi0jZGVmaW5lIENQX1JCX1dQVFJfREVMQVkgICAgICAgICAgICAgICAgICAgICAgIDB4MDcxOCAgCi0jZGVmaW5lIENQX0lCX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDczOCAgCi0jZGVmaW5lIENQX0lCX0JVRlNaICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDczQyAgCi0jZGVmaW5lIFNDUkFUQ0hfUkVHMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFMCAgCi0jZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFMCAgCi0jZGVmaW5lIFNDUkFUQ0hfUkVHMSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFNCAgCi0jZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzEgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFNCAgCisjZGVmaW5lIERBQ19QT1NfU1lOQ19MRVZFTCAgICAgICAgICAgICAgICAgICAgIDB4MERENAorI2RlZmluZSBEQUNfQkxBTktfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAweDBERDgKKyNkZWZpbmUgQ0xPQ0tfQ05UTF9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIENMT0NLX0NOVExfREFUQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwQworI2RlZmluZSBDUF9SQl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MDQKKyNkZWZpbmUgQ1BfUkJfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzAwCisjZGVmaW5lIENQX1JCX1JQVFJfQUREUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwQworI2RlZmluZSBDUF9SQl9SUFRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MTAKKyNkZWZpbmUgQ1BfUkJfV1BUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzE0CisjZGVmaW5lIENQX1JCX1dQVFJfREVMQVkgICAgICAgICAgICAgICAgICAgICAgIDB4MDcxOAorI2RlZmluZSBDUF9JQl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3MzgKKyNkZWZpbmUgQ1BfSUJfQlVGU1ogICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNzNDCisjZGVmaW5lIFNDUkFUQ0hfUkVHMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFMAorI2RlZmluZSBHVUlfU0NSQVRDSF9SRUcwICAgICAgICAgICAgICAgICAgICAgICAweDE1RTAKKyNkZWZpbmUgU0NSQVRDSF9SRUcxICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUU0CisjZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzEgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFNAogI2RlZmluZSBTQ1JBVENIX1JFRzIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1RTgKICNkZWZpbmUgR1VJX1NDUkFUQ0hfUkVHMiAgICAgICAgICAgICAgICAgICAgICAgMHgxNUU4CiAjZGVmaW5lIFNDUkFUQ0hfUkVHMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVFQwotI2RlZmluZSBHVUlfU0NSQVRDSF9SRUczICAgICAgICAgICAgICAgICAgICAgICAweDE1RUMgIAotI2RlZmluZSBTQ1JBVENIX1JFRzQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1RjAgIAotI2RlZmluZSBHVUlfU0NSQVRDSF9SRUc0ICAgICAgICAgICAgICAgICAgICAgICAweDE1RjAgIAotI2RlZmluZSBTQ1JBVENIX1JFRzUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1RjQgIAotI2RlZmluZSBHVUlfU0NSQVRDSF9SRUc1ICAgICAgICAgICAgICAgICAgICAgICAweDE1RjQgIAotI2RlZmluZSBTQ1JBVENIX1VNU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3NzAgIAotI2RlZmluZSBTQ1JBVENIX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3NzQgIAotI2RlZmluZSBEUF9CUlVTSF9GUkdEX0NMUiAgICAgICAgICAgICAgICAgICAgICAweDE0N0MgIAorI2RlZmluZSBHVUlfU0NSQVRDSF9SRUczICAgICAgICAgICAgICAgICAgICAgICAweDE1RUMKKyNkZWZpbmUgU0NSQVRDSF9SRUc0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUYwCisjZGVmaW5lIEdVSV9TQ1JBVENIX1JFRzQgICAgICAgICAgICAgICAgICAgICAgIDB4MTVGMAorI2RlZmluZSBTQ1JBVENIX1JFRzUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1RjQKKyNkZWZpbmUgR1VJX1NDUkFUQ0hfUkVHNSAgICAgICAgICAgICAgICAgICAgICAgMHgxNUY0CisjZGVmaW5lIFNDUkFUQ0hfVU1TSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDc3MAorI2RlZmluZSBTQ1JBVENIX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3NzQKKyNkZWZpbmUgRFBfQlJVU0hfRlJHRF9DTFIgICAgICAgICAgICAgICAgICAgICAgMHgxNDdDCiAjZGVmaW5lIERQX0JSVVNIX0JLR0RfQ0xSICAgICAgICAgICAgICAgICAgICAgIDB4MTQ3OAogI2RlZmluZSBEU1RfTElORV9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE2MDAKLSNkZWZpbmUgRFNUX0xJTkVfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjA0ICAKLSNkZWZpbmUgU1JDX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUFDICAKKyNkZWZpbmUgRFNUX0xJTkVfRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjA0CisjZGVmaW5lIFNSQ19PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVBQwogI2RlZmluZSBTUkNfUElUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1QjAKICNkZWZpbmUgU1JDX1RJTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNzA0CiAjZGVmaW5lIFNSQ19QSVRDSF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTQyOAotI2RlZmluZSBTUkNfWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MTQgIAotI2RlZmluZSBTUkNfWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MTggIAotI2RlZmluZSBTUkNfWF9ZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1OTAgIAotI2RlZmluZSBTUkNfWV9YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MzQgIAorI2RlZmluZSBTUkNfWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MTQKKyNkZWZpbmUgU1JDX1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDE4CisjZGVmaW5lIFNSQ19YX1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTU5MAorI2RlZmluZSBTUkNfWV9YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MzQKICNkZWZpbmUgRFNUX1lfWAkJCQkgICAgICAgMHgxNDM4CiAjZGVmaW5lIERTVF9XSURUSF9IRUlHSFQJCSAgICAgICAweDE1OTgKICNkZWZpbmUgRFNUX0hFSUdIVF9XSURUSAkJICAgICAgIDB4MTQzYwogI2RlZmluZSBEU1RfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDQKLSNkZWZpbmUgU1JDX0NMVVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgxNzgwICAKLSNkZWZpbmUgU1JDX0NMVVRfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNzg0ICAKLSNkZWZpbmUgU1JDX0NMVVRfREFUQV9SRCAgICAgICAgICAgICAgICAgICAgICAgMHgxNzg4ICAKLSNkZWZpbmUgSE9TVF9EQVRBMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0MwICAKLSNkZWZpbmUgSE9TVF9EQVRBMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0M0ICAKLSNkZWZpbmUgSE9TVF9EQVRBMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0M4ICAKLSNkZWZpbmUgSE9TVF9EQVRBMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0NDICAKLSNkZWZpbmUgSE9TVF9EQVRBNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0QwICAKLSNkZWZpbmUgSE9TVF9EQVRBNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0Q0ICAKLSNkZWZpbmUgSE9TVF9EQVRBNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0Q4ICAKKyNkZWZpbmUgU1JDX0NMVVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICAgMHgxNzgwCisjZGVmaW5lIFNSQ19DTFVUX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTc4NAorI2RlZmluZSBTUkNfQ0xVVF9EQVRBX1JEICAgICAgICAgICAgICAgICAgICAgICAweDE3ODgKKyNkZWZpbmUgSE9TVF9EQVRBMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0MwCisjZGVmaW5lIEhPU1RfREFUQTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTdDNAorI2RlZmluZSBIT1NUX0RBVEEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3QzgKKyNkZWZpbmUgSE9TVF9EQVRBMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0NDCisjZGVmaW5lIEhPU1RfREFUQTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTdEMAorI2RlZmluZSBIT1NUX0RBVEE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3RDQKKyNkZWZpbmUgSE9TVF9EQVRBNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxN0Q4CiAjZGVmaW5lIEhPU1RfREFUQTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTdEQwogI2RlZmluZSBIT1NUX0RBVEFfTEFTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDE3RTAKICNkZWZpbmUgRFBfU1JDX0VORElBTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUQ0Ci0jZGVmaW5lIERQX1NSQ19GUkdEX0NMUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVEOCAgCi0jZGVmaW5lIERQX1NSQ19CS0dEX0NMUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVEQyAgCi0jZGVmaW5lIFNDX0xFRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTY0MCAgCi0jZGVmaW5lIFNDX1JJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTY0NCAgCi0jZGVmaW5lIFNDX1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTY0OCAgCi0jZGVmaW5lIFNDX0JPVFRPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTY0QyAgCi0jZGVmaW5lIFNSQ19TQ19SSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTY1NCAgCi0jZGVmaW5lIFNSQ19TQ19CT1RUT00gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTY1QyAgCi0jZGVmaW5lIERQX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTZDMCAgCi0jZGVmaW5lIERQX0NOVExfWERJUl9ZRElSX1lNQUpPUiAgICAgICAgICAgICAgIDB4MTZEMCAgCi0jZGVmaW5lIERQX0RBVEFUWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTZDNCAgCi0jZGVmaW5lIERQX01JWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTZDOCAgCi0jZGVmaW5lIERQX1dSSVRFX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTZDQyAgCi0jZGVmaW5lIERQX1hPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTdGOCAgCisjZGVmaW5lIERQX1NSQ19GUkdEX0NMUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVEOAorI2RlZmluZSBEUF9TUkNfQktHRF9DTFIgICAgICAgICAgICAgICAgICAgICAgICAweDE1REMKKyNkZWZpbmUgU0NfTEVGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjQwCisjZGVmaW5lIFNDX1JJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTY0NAorI2RlZmluZSBTQ19UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2NDgKKyNkZWZpbmUgU0NfQk9UVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNjRDCisjZGVmaW5lIFNSQ19TQ19SSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTY1NAorI2RlZmluZSBTUkNfU0NfQk9UVE9NICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2NUMKKyNkZWZpbmUgRFBfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkMwCisjZGVmaW5lIERQX0NOVExfWERJUl9ZRElSX1lNQUpPUiAgICAgICAgICAgICAgIDB4MTZEMAorI2RlZmluZSBEUF9EQVRBVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2QzQKKyNkZWZpbmUgRFBfTUlYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkM4CisjZGVmaW5lIERQX1dSSVRFX01TSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTZDQworI2RlZmluZSBEUF9YT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3RjgKICNkZWZpbmUgQ0xSX0NNUF9DTFJfU1JDICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUM0CiAjZGVmaW5lIENMUl9DTVBfQ0xSX0RTVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTVDOAogI2RlZmluZSBDTFJfQ01QX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1QzAKLSNkZWZpbmUgQ0xSX0NNUF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUNDICAKLSNkZWZpbmUgRFNUQ0FDSEVfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNzEwICAKLSNkZWZpbmUgRFNUQ0FDSEVfQ1RMU1RBVCAgICAgICAgICAgICAgICAgICAgICAgMHgxNzE0ICAKLSNkZWZpbmUgREVGQVVMVF9QSVRDSF9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgxNkUwICAKLSNkZWZpbmUgREVGQVVMVF9TQ19CT1RUT01fUklHSFQgICAgICAgICAgICAgICAgMHgxNkU4ICAKKyNkZWZpbmUgQ0xSX0NNUF9NU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNUNDCisjZGVmaW5lIERTVENBQ0hFX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcxMAorI2RlZmluZSBEU1RDQUNIRV9DVExTVEFUICAgICAgICAgICAgICAgICAgICAgICAweDE3MTQKKyNkZWZpbmUgREVGQVVMVF9QSVRDSF9PRkZTRVQgICAgICAgICAgICAgICAgICAgMHgxNkUwCisjZGVmaW5lIERFRkFVTFRfU0NfQk9UVE9NX1JJR0hUICAgICAgICAgICAgICAgIDB4MTZFOAogI2RlZmluZSBERUZBVUxUX1NDX1RPUF9MRUZUICAgICAgICAgICAgICAgICAgICAweDE2RUMKICNkZWZpbmUgU1JDX1BJVENIX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgxNDI4CiAjZGVmaW5lIERTVF9QSVRDSF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTQyQwotI2RlZmluZSBEUF9HVUlfTUFTVEVSX0NOVEwgICAgICAgICAgICAgICAgICAgICAweDE0NkMgIAotI2RlZmluZSBTQ19UT1BfTEVGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2RUMgIAotI2RlZmluZSBTQ19CT1RUT01fUklHSFQgICAgICAgICAgICAgICAgICAgICAgICAweDE2RjAgIAotI2RlZmluZSBTUkNfU0NfQk9UVE9NX1JJR0hUICAgICAgICAgICAgICAgICAgICAweDE2RjQgIAorI2RlZmluZSBEUF9HVUlfTUFTVEVSX0NOVEwgICAgICAgICAgICAgICAgICAgICAweDE0NkMKKyNkZWZpbmUgU0NfVE9QX0xFRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNkVDCisjZGVmaW5lIFNDX0JPVFRPTV9SSUdIVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTZGMAorI2RlZmluZSBTUkNfU0NfQk9UVE9NX1JJR0hUICAgICAgICAgICAgICAgICAgICAweDE2RjQKICNkZWZpbmUgUkIyRF9EU1RDQUNIRV9NT0RFCQkgICAgICAgMHgzNDI4CiAjZGVmaW5lIFJCMkRfRFNUQ0FDSEVfQ1RMU1RBVF9icm9rZW4JICAgICAgIDB4MzQyQyAvKiBkbyBub3QgdXNlICovCiAjZGVmaW5lIExWRFNfR0VOX0NOVEwJCQkgICAgICAgMHgwMmQwCkBAIC02ODYsNyArNjg2LDcgQEAKICNkZWZpbmUgVkVSVF9GUF9MT09QX1NUUkVUQ0gJCQkgICAoMHg3IDw8IDI4KQogI2RlZmluZSBWRVJUX1NUUkVUQ0hfUkVTRVJWRUQJCQkgICAweGYxMDAwMDAwCiAKLS8qIERBQ19DTlRMIGJpdCBjb25zdGFudHMgKi8gICAKKy8qIERBQ19DTlRMIGJpdCBjb25zdGFudHMgKi8KICNkZWZpbmUgREFDXzhCSVRfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKICNkZWZpbmUgREFDXzRCUFBfUElYX09SREVSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAKICNkZWZpbmUgREFDX0NSQ19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAKQEAgLTcwMCw3ICs3MDAsNyBAQAogI2RlZmluZSBEQUNfQ01QX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgIDMpCiAjZGVmaW5lIERBQ19DTVBfT1VUUFVUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAgNykKIAotLyogREFDX0NOVEwyIGJpdCBjb25zdGFudHMgKi8gICAKKy8qIERBQ19DTlRMMiBiaXQgY29uc3RhbnRzICovCiAjZGVmaW5lIERBQzJfRVhQQU5EX01PREUJCQkgICAoMSA8PCAxNCkKICNkZWZpbmUgREFDMl9DTVBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCiAjZGVmaW5lIERBQzJfUEFMRVRURV9BQ0NFU1NfQ05UTCAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9zMWQxM3h4eGZiLmggYi9pbmNsdWRlL3ZpZGVvL3MxZDEzeHh4ZmIuaAppbmRleCBmZTQxYjg0Li5jM2IyYTJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL3MxZDEzeHh4ZmIuaAorKysgYi9pbmNsdWRlL3ZpZGVvL3MxZDEzeHh4ZmIuaApAQCAtMTQsMTMgKzE0LDE2IEBACiAjZGVmaW5lCVMxRDEzWFhYRkJfSAogCiAjZGVmaW5lIFMxRF9QQUxFVFRFX1NJWkUJCTI1NgotI2RlZmluZSBTMUQxMzUwNl9DSElQX1JFVgkJNAkvKiBleHBlY3RlZCBjaGlwIHJldmlzaW9uIG51bWJlciBmb3IgczFkMTM1MDYgKi8KLSNkZWZpbmUgUzFEMTM4MDZfQ0hJUF9SRVYJCTcJLyogZXhwZWN0ZWQgY2hpcCByZXZpc2lvbiBudW1iZXIgZm9yIHMxZDEzODA2ICovCi0jZGVmaW5lIFMxRF9GQklECQkJIlMxRDEzODA2IgotI2RlZmluZSBTMURfREVWSUNFTkFNRQkJCSJzMWQxMzgwNmZiIgorI2RlZmluZSBTMURfRkJJRAkJCSJTMUQxM3h4eCIKKyNkZWZpbmUgUzFEX0RFVklDRU5BTUUJCQkiczFkMTN4eHhmYiIKKworLyogUzFEUkVHX1JFVl9DT0RFIHJlZ2lzdGVyID0gcHJvZF9pZCAoNiBiaXRzKSArIHJldmlzaW9uICgyIGJpdHMpICovCisjZGVmaW5lIFMxRDEzNTA1X1BST0RfSUQJCTB4MwkvKiAwMDAwMTEgKi8KKyNkZWZpbmUgUzFEMTM1MDZfUFJPRF9JRAkJMHg0CS8qIDAwMDEwMCAqLworI2RlZmluZSBTMUQxMzgwNl9QUk9EX0lECQkweDcJLyogMDAwMTExICovCiAKIC8qIHJlZ2lzdGVyIGRlZmluaXRpb25zICh0ZXN0ZWQgb24gczFkMTM4OTYpICovCi0jZGVmaW5lIFMxRFJFR19SRVZfQ09ERQkJCTB4MDAwMAkvKiBSZXZpc2lvbiBDb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lIFMxRFJFR19SRVZfQ09ERQkJCTB4MDAwMAkvKiBQcm9kICsgUmV2IENvZGUgUmVnaXN0ZXIgKi8KICNkZWZpbmUgUzFEUkVHX01JU0MJCQkweDAwMDEJLyogTWlzY2VsbGFuZW91cyBSZWdpc3RlciAqLwogI2RlZmluZSBTMURSRUdfR1BJT19DTkYwCQkweDAwMDQJLyogR2VuZXJhbCBJTyBQaW5zIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCAqLwogI2RlZmluZSBTMURSRUdfR1BJT19DTkYxCQkweDAwMDUJLyogR2VuZXJhbCBJTyBQaW5zIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMSAqLwpAQCAtMTQxLDEwICsxNDQsMTEgQEAKIAl1OAl2YWx1ZTsKIH07CiAKLQogc3RydWN0IHMxZDEzeHh4ZmJfcGFyIHsKIAl2b2lkIF9faW9tZW0JKnJlZ3M7CiAJdW5zaWduZWQgY2hhcglkaXNwbGF5OworCXVuc2lnbmVkIGNoYXIJcHJvZF9pZDsKKwl1bnNpZ25lZCBjaGFyCXJldmlzaW9uOwogCiAJdW5zaWduZWQgaW50CXBzZXVkb19wYWxldHRlWzE2XTsKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCAxNGM0ODNkLi4wOWM3OTUzIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC01MzEsNyArNTMxLDcgQEAKIAogY29uZmlnIENQVVNFVFMKIAlib29sICJDcHVzZXQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNNUCAmJiBDR1JPVVBTCisJZGVwZW5kcyBvbiBDR1JPVVBTCiAJaGVscAogCSAgVGhpcyBvcHRpb24gd2lsbCBsZXQgeW91IGNyZWF0ZSBhbmQgbWFuYWdlIENQVVNFVHMgd2hpY2gKIAkgIGFsbG93IGR5bmFtaWNhbGx5IHBhcnRpdGlvbmluZyBhIHN5c3RlbSBpbnRvIHNldHMgb2YgQ1BVcyBhbmQKQEAgLTU2NSw3ICs1NjUsNyBAQAogCXNlbGVjdCBNTV9PV05FUgogCWhlbHAKIAkgIFByb3ZpZGVzIGEgbWVtb3J5IHJlc291cmNlIGNvbnRyb2xsZXIgdGhhdCBtYW5hZ2VzIGJvdGggYW5vbnltb3VzCi0JICBtZW1vcnkgYW5kIHBhZ2UgY2FjaGUuIChTZWUgRG9jdW1lbnRhdGlvbi9jb250cm9sbGVycy9tZW1vcnkudHh0KQorCSAgbWVtb3J5IGFuZCBwYWdlIGNhY2hlLiAoU2VlIERvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0KQogCiAJICBOb3RlIHRoYXQgc2V0dGluZyB0aGlzIG9wdGlvbiBpbmNyZWFzZXMgZml4ZWQgbWVtb3J5IG92ZXJoZWFkCiAJICBhc3NvY2lhdGVkIHdpdGggZWFjaCBwYWdlIG9mIG1lbW9yeSBpbiB0aGUgc3lzdGVtLiBCeSB0aGlzLApAQCAtNTk3LDYgKzU5Nyw4IEBACiAJICBpcyBkaXNhYmxlZCBieSBib290IG9wdGlvbiwgdGhpcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgYW5kCiAJICB0aGVyZSB3aWxsIGJlIG5vIG92ZXJoZWFkIGZyb20gdGhpcy4gRXZlbiB3aGVuIHlvdSBzZXQgdGhpcyBjb25maWc9eSwKIAkgIGlmIGJvb3Qgb3B0aW9uICJub3N3YXBhY2NvdW50IiBpcyBzZXQsIHN3YXAgd2lsbCBub3QgYmUgYWNjb3VudGVkLgorCSAgTm93LCBtZW1vcnkgdXNhZ2Ugb2Ygc3dhcF9jZ3JvdXAgaXMgMiBieXRlcyBwZXIgZW50cnkuIElmIHN3YXAgcGFnZQorCSAgc2l6ZSBpcyA0MDk2Ynl0ZXMsIDUxMmsgcGVyIDFHYnl0ZXMgb2Ygc3dhcC4KIAogZW5kaWYgIyBDR1JPVVBTCiAKQEAgLTY4Nyw3ICs2ODksNyBAQAogCWRlcGVuZHMgb24gTkFNRVNQQUNFUyAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBTdXBwb3J0IHByb2Nlc3MgaWQgbmFtZXNwYWNlcy4gIFRoaXMgYWxsb3dzIGhhdmluZyBtdWx0aXBsZQotCSAgcHJvY2VzcyB3aXRoIHRoZSBzYW1lIHBpZCBhcyBsb25nIGFzIHRoZXkgYXJlIGluIGRpZmZlcmVudAorCSAgcHJvY2Vzc2VzIHdpdGggdGhlIHNhbWUgcGlkIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gZGlmZmVyZW50CiAJICBwaWQgbmFtZXNwYWNlcy4gIFRoaXMgaXMgYSBidWlsZGluZyBibG9jayBvZiBjb250YWluZXJzLgogCiAJICBVbmxlc3MgeW91IHdhbnQgdG8gd29yayB3aXRoIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlCkBAIC05NTIsNyArOTU0LDcgQEAKIAkgIFJhbmRvbWl6aW5nIGhlYXAgcGxhY2VtZW50IG1ha2VzIGhlYXAgZXhwbG9pdHMgaGFyZGVyLCBidXQgaXQKIAkgIGFsc28gYnJlYWtzIGFuY2llbnQgYmluYXJpZXMgKGluY2x1ZGluZyBhbnl0aGluZyBsaWJjNSBiYXNlZCkuCiAJICBUaGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSBib290dXAgZGVmYXVsdCB0byBoZWFwIHJhbmRvbWl6YXRpb24KLQkgIGRpc2FibGVkLCBhbmQgY2FuIGJlIG92ZXJyaWRlbiBydW50aW1lIGJ5IHNldHRpbmcKKwkgIGRpc2FibGVkLCBhbmQgY2FuIGJlIG92ZXJyaWRkZW4gYXQgcnVudGltZSBieSBzZXR0aW5nCiAJICAvcHJvYy9zeXMva2VybmVsL3JhbmRvbWl6ZV92YV9zcGFjZSB0byAyLgogCiAJICBPbiBub24tYW5jaWVudCBkaXN0cm9zIChwb3N0LTIwMDAgb25lcykgTiBpcyB1c3VhbGx5IGEgc2FmZSBjaG9pY2UuCkBAIC0xMDA1LDEzICsxMDA3LDI1IEBACiAKIGNvbmZpZyBNQVJLRVJTCiAJYm9vbCAiQWN0aXZhdGUgbWFya2VycyIKLQlkZXBlbmRzIG9uIFRSQUNFUE9JTlRTCisJc2VsZWN0IFRSQUNFUE9JTlRTCiAJaGVscAogCSAgUGxhY2UgYW4gZW1wdHkgZnVuY3Rpb24gY2FsbCBhdCBlYWNoIG1hcmtlciBzaXRlLiBDYW4gYmUKIAkgIGR5bmFtaWNhbGx5IGNoYW5nZWQgZm9yIGEgcHJvYmUgZnVuY3Rpb24uCiAKIHNvdXJjZSAiYXJjaC9LY29uZmlnIgogCitjb25maWcgU0xPV19XT1JLCisJZGVmYXVsdCBuCisJYm9vbCAiRW5hYmxlIHNsb3cgd29yayB0aHJlYWQgcG9vbCIKKwloZWxwCisJICBUaGUgc2xvdyB3b3JrIHRocmVhZCBwb29sIHByb3ZpZGVzIGEgbnVtYmVyIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZAorCSAgdGhyZWFkcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHRoZSBrZXJuZWwgdG8gcGVyZm9ybSBvcGVyYXRpb25zIHRoYXQKKwkgIHRha2UgYSByZWxhdGl2ZWx5IGxvbmcgdGltZS4KKworCSAgQW4gZXhhbXBsZSBvZiB0aGlzIHdvdWxkIGJlIENhY2hlRmlsZXMgZG9pbmcgYSBwYXRoIGxvb2t1cCBmb2xsb3dlZAorCSAgYnkgYSBzZXJpZXMgb2YgbWtkaXJzIGFuZCBhIGNyZWF0ZSBjYWxsLCBhbGwgb2Ygd2hpY2ggaGF2ZSB0byB0b3VjaAorCSAgZGlzay4KKwogZW5kbWVudQkJIyBHZW5lcmFsIHNldHVwCiAKIGNvbmZpZyBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UCkBAIC0xMTEwLDcgKzExMjQsNyBAQAogCSAgY3B1X3Bvc3NpYmxlX21hcCwgc29tZSBvZiB0aGVtIGNob3NlIHRvIGluaXRpYWxpemUgY3B1X3Bvc3NpYmxlX21hcAogCSAgd2l0aCBhbGwgMXMsIGFuZCBvdGhlcnMgd2l0aCBhbGwgMHMuICBXaGVuIHRoZXkgd2VyZSBjZW50cmFsaXNlZCwKIAkgIGl0IHdhcyBiZXR0ZXIgdG8gcHJvdmlkZSB0aGlzIG9wdGlvbiB0aGFuIHRvIGJyZWFrIGFsbCB0aGUgYXJjaHMKLQkgIGFuZCBoYXZlIHNldmVyYWwgYXJjaCBtYWludGFpbmVycyBwZXJzdWluZyBtZSBkb3duIGRhcmsgYWxsZXlzLgorCSAgYW5kIGhhdmUgc2V2ZXJhbCBhcmNoIG1haW50YWluZXJzIHB1cnN1aW5nIG1lIGRvd24gZGFyayBhbGxleXMuCiAKIGNvbmZpZyBTVE9QX01BQ0hJTkUKIAlib29sCmRpZmYgLS1naXQgYS9pbml0L2RvX21vdW50cy5jIGIvaW5pdC9kb19tb3VudHMuYwppbmRleCA4ZDRmZjVhLi5kZDdlZTVmIDEwMDY0NAotLS0gYS9pbml0L2RvX21vdW50cy5jCisrKyBiL2luaXQvZG9fbW91bnRzLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNfZnNfc2IuaD4KZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzLmggYi9pbml0L2RvX21vdW50cy5oCmluZGV4IDlhYTk2OGQuLmY1Yjk3OGEgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzLmgKKysrIGIvaW5pdC9kb19tb3VudHMuaApAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzX21kLmMgYi9pbml0L2RvX21vdW50c19tZC5jCmluZGV4IDliZGRkYmMuLjY5YWViYmYgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzX21kLmMKKysrIGIvaW5pdC9kb19tb3VudHNfbWQuYwpAQCAtMSw1ICsxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWlkL21kX3UuaD4KKyNpbmNsdWRlIDxsaW51eC9yYWlkL21kX3AuaD4KIAogI2luY2x1ZGUgImRvX21vdW50cy5oIgogCkBAIC0xMTIsOCArMTEzLDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotI2RlZmluZSBNZHBNaW5vclNoaWZ0IDYKLQogc3RhdGljIHZvaWQgX19pbml0IG1kX3NldHVwX2RyaXZlKHZvaWQpCiB7CiAJaW50IG1pbm9yLCBpLCBlbnQsIHBhcnRpdGlvbmVkOwpkaWZmIC0tZ2l0IGEvaW5pdC9pbml0cmFtZnMuYyBiL2luaXQvaW5pdHJhbWZzLmMKaW5kZXggNjE5YzFiYS4uODBjZDcxMyAxMDA2NDQKLS0tIGEvaW5pdC9pbml0cmFtZnMuYworKysgYi9pbml0L2luaXRyYW1mcy5jCkBAIC01NzEsMTEgKzU3MSwxMSBAQAogCWlmIChpbml0cmRfc3RhcnQpIHsKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9SQU0KIAkJaW50IGZkOwotCQlwcmludGsoS0VSTl9JTkZPICJjaGVja2luZyBpZiBpbWFnZSBpcyBpbml0cmFtZnMuLi4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY2hlY2tpbmcgaWYgaW1hZ2UgaXMgaW5pdHJhbWZzLi4uXG4iKTsKIAkJZXJyID0gdW5wYWNrX3RvX3Jvb3RmcygoY2hhciAqKWluaXRyZF9zdGFydCwKIAkJCWluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQpOwogCQlpZiAoIWVycikgewotCQkJcHJpbnRrKCIgaXQgaXNcbiIpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAicm9vdGZzIGltYWdlIGlzIGluaXRyYW1mczsgdW5wYWNraW5nLi4uXG4iKTsKIAkJCWZyZWVfaW5pdHJkKCk7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKQEAgLTU4Myw3ICs1ODMsOCBAQAogCQkJdW5wYWNrX3RvX3Jvb3RmcyhfX2luaXRyYW1mc19zdGFydCwKIAkJCQkgX19pbml0cmFtZnNfZW5kIC0gX19pbml0cmFtZnNfc3RhcnQpOwogCQl9Ci0JCXByaW50aygiaXQgaXNuJ3QgKCVzKTsgbG9va3MgbGlrZSBhbiBpbml0cmRcbiIsIGVycik7CisJCXByaW50ayhLRVJOX0lORk8gInJvb3RmcyBpbWFnZSBpcyBub3QgaW5pdHJhbWZzICglcykiCisJCQkJIjsgbG9va3MgbGlrZSBhbiBpbml0cmRcbiIsIGVycik7CiAJCWZkID0gc3lzX29wZW4oIi9pbml0cmQuaW1hZ2UiLCBPX1dST05MWXxPX0NSRUFULCAwNzAwKTsKIAkJaWYgKGZkID49IDApIHsKIAkJCXN5c193cml0ZShmZCwgKGNoYXIgKilpbml0cmRfc3RhcnQsCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IGQ2YjM4OGYuLjM1ODVmMDcgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC03MSw2ICs3MSw3IEBACiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDx0cmFjZS9rbWVtdHJhY2UuaD4KIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogI2luY2x1ZGUgPGFzbS9zbXAuaD4KQEAgLTY0OCw2ICs2NDksNyBAQAogCWVuYWJsZV9kZWJ1Z19wYWdlYWxsb2MoKTsKIAljcHVfaG90cGx1Z19pbml0KCk7CiAJa21lbV9jYWNoZV9pbml0KCk7CisJa21lbXRyYWNlX2luaXQoKTsKIAlkZWJ1Z19vYmplY3RzX21lbV9pbml0KCk7CiAJaWRyX2luaXRfY2FjaGUoKTsKIAlzZXR1cF9wZXJfY3B1X3BhZ2VzZXQoKTsKQEAgLTc2OSw2ICs3NzEsNyBAQAogewogCXJjdV9pbml0X3NjaGVkKCk7IC8qIG5lZWRlZCBieSBtb2R1bGVfaW5pdCBzdGFnZS4gKi8KIAlpbml0X3dvcmtxdWV1ZXMoKTsKKwljcHVzZXRfaW5pdF9zbXAoKTsKIAl1c2VybW9kZWhlbHBlcl9pbml0KCk7CiAJZHJpdmVyX2luaXQoKTsKIAlpbml0X2lycV9wcm9jKCk7CkBAIC03OTMsNiArNzk2LDcgQEAKICAqIG1ha2VzIGl0IGlubGluZSB0byBpbml0KCkgYW5kIGl0IGJlY29tZXMgcGFydCBvZiBpbml0LnRleHQgc2VjdGlvbgogICovCiBzdGF0aWMgbm9pbmxpbmUgaW50IGluaXRfcG9zdCh2b2lkKQorCV9fcmVsZWFzZXMoa2VybmVsX2xvY2spCiB7CiAJLyogbmVlZCB0byBmaW5pc2ggYWxsIGFzeW5jIF9faW5pdCBjb2RlIGJlZm9yZSBmcmVlaW5nIHRoZSBtZW1vcnkgKi8KIAlhc3luY19zeW5jaHJvbml6ZV9mdWxsKCk7CkBAIC04NjIsOCArODY2LDYgQEAKIAlzbXBfaW5pdCgpOwogCXNjaGVkX2luaXRfc21wKCk7CiAKLQljcHVzZXRfaW5pdF9zbXAoKTsKLQogCWRvX2Jhc2ljX3NldHVwKCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvaXBjL2lwY19zeXNjdGwuYyBiL2lwYy9pcGNfc3lzY3RsLmMKaW5kZXggNGE3YTEyYy4uNDBlYWI3MyAxMDA2NDQKLS0tIGEvaXBjL2lwY19zeXNjdGwuYworKysgYi9pcGMvaXBjX3N5c2N0bC5jCkBAIC0yNiw3ICsyNiw3IEBACiAJcmV0dXJuIHdoaWNoOwogfQogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpZmRlZiBDT05GSUdfUFJPQ19TWVNDVEwKIHN0YXRpYyBpbnQgcHJvY19pcGNfZG9pbnR2ZWMoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAl2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKZGlmZiAtLWdpdCBhL2lwYy9tcXVldWUuYyBiL2lwYy9tcXVldWUuYwppbmRleCBhOGRkYWRiLi45MTY3ODUzIDEwMDY0NAotLS0gYS9pcGMvbXF1ZXVlLmMKKysrIGIvaXBjL21xdWV1ZS5jCkBAIC02MDIsNyArNjAyLDcgQEAKIAkJZGVudHJ5LT5kX2ZzZGF0YSA9IGF0dHI7CiAJfQogCi0JbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKIAlyZXQgPSBtbnRfd2FudF93cml0ZShtcXVldWVfbW50KTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCBmMjM5ZDg3Li5mYWE0NmRhIDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC01NTUsMTIgKzU1NSwxNCBAQAogCWluX3VzZSA9IHNobV9pZHMobnMpLmluX3VzZTsKIAogCWZvciAodG90YWwgPSAwLCBuZXh0X2lkID0gMDsgdG90YWwgPCBpbl91c2U7IG5leHRfaWQrKykgeworCQlzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjOwogCQlzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHA7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKLQkJc2hwID0gaWRyX2ZpbmQoJnNobV9pZHMobnMpLmlwY3NfaWRyLCBuZXh0X2lkKTsKLQkJaWYgKHNocCA9PSBOVUxMKQorCQlpcGMgPSBpZHJfZmluZCgmc2htX2lkcyhucykuaXBjc19pZHIsIG5leHRfaWQpOworCQlpZiAoaXBjID09IE5VTEwpCiAJCQljb250aW51ZTsKKwkJc2hwID0gY29udGFpbmVyX29mKGlwYywgc3RydWN0IHNobWlkX2tlcm5lbCwgc2htX3Blcm0pOwogCiAJCWlub2RlID0gc2hwLT5zaG1fZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IGU0NzkxYjMuLmJhYjFkZmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTkzLDYgKzkzLDcgQEAKIG9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICs9IHRyYWNlLwogb2JqLSQoQ09ORklHX1RSQUNJTkcpICs9IHRyYWNlLwogb2JqLSQoQ09ORklHX1NNUCkgKz0gc2NoZWRfY3B1cHJpLm8KK29iai0kKENPTkZJR19TTE9XX1dPUkspICs9IHNsb3ctd29yay5vCiAKIGlmbmVxICgkKENPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVIpLHkpCiAjIEFjY29yZGluZyB0byBBbGFuIE1vZHJhIDxhbGFuQGxpbnV4Y2FyZS5jb20uYXU+LCB0aGUgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgaXMKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5jIGIva2VybmVsL2F1ZGl0LmMKaW5kZXggY2U2ZDhlYS4uOTQ0MmMzNSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmMKKysrIGIva2VybmVsL2F1ZGl0LmMKQEAgLTc2Niw2ICs3NjYsOSBAQAogCiAJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBtc2c9Iik7CiAJCQkJc2l6ZSA9IG5sbXNnX2xlbihubGgpOworCQkJCWlmIChzaXplID4gMCAmJgorCQkJCSAgICAoKHVuc2lnbmVkIGNoYXIgKilkYXRhKVtzaXplIC0gMV0gPT0gJ1wwJykKKwkJCQkJc2l6ZS0tOwogCQkJCWF1ZGl0X2xvZ19uX3VudHJ1c3RlZHN0cmluZyhhYiwgZGF0YSwgc2l6ZSk7CiAJCQl9CiAJCQlhdWRpdF9zZXRfcGlkKGFiLCBwaWQpOwpAQCAtMTM4Miw3ICsxMzg1LDcgQEAKIGludCBhdWRpdF9zdHJpbmdfY29udGFpbnNfY29udHJvbChjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBsZW4pCiB7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcDsKLQlmb3IgKHAgPSBzdHJpbmc7IHAgPCAoY29uc3QgdW5zaWduZWQgY2hhciAqKXN0cmluZyArIGxlbiAmJiAqcDsgcCsrKSB7CisJZm9yIChwID0gc3RyaW5nOyBwIDwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilzdHJpbmcgKyBsZW47IHArKykgewogCQlpZiAoKnAgPT0gJyInIHx8ICpwIDwgMHgyMSB8fCAqcCA+IDB4N2UpCiAJCQlyZXR1cm4gMTsKIAl9CkBAIC0xNDM3LDEzICsxNDQwLDEzIEBACiAJLyogV2Ugd2lsbCBhbGxvdyAxMSBzcGFjZXMgZm9yICcgKGRlbGV0ZWQpJyB0byBiZSBhcHBlbmRlZCAqLwogCXBhdGhuYW1lID0ga21hbGxvYyhQQVRIX01BWCsxMSwgYWItPmdmcF9tYXNrKTsKIAlpZiAoIXBhdGhuYW1lKSB7Ci0JCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICI8bm8gbWVtb3J5PiIpOworCQlhdWRpdF9sb2dfc3RyaW5nKGFiLCAiPG5vX21lbW9yeT4iKTsKIAkJcmV0dXJuOwogCX0KIAlwID0gZF9wYXRoKHBhdGgsIHBhdGhuYW1lLCBQQVRIX01BWCsxMSk7CiAJaWYgKElTX0VSUihwKSkgeyAvKiBTaG91bGQgbmV2ZXIgaGFwcGVuIHNpbmNlIHdlIHNlbmQgUEFUSF9NQVggKi8KIAkJLyogRklYTUU6IGNhbiB3ZSBzYXZlIHNvbWUgaW5mb3JtYXRpb24gaGVyZT8gKi8KLQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIjx0b28gbG9uZz4iKTsKKwkJYXVkaXRfbG9nX3N0cmluZyhhYiwgIjx0b29fbG9uZz4iKTsKIAl9IGVsc2UKIAkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgcCk7CiAJa2ZyZWUocGF0aG5hbWUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0X3RyZWUuYyBiL2tlcm5lbC9hdWRpdF90cmVlLmMKaW5kZXggOGFkOTU0NS4uOTE3YWI5NSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0X3RyZWUuYworKysgYi9rZXJuZWwvYXVkaXRfdHJlZS5jCkBAIC0zODUsNiArMzg1LDcgQEAKIAltdXRleF9sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJaWYgKGlub3RpZnlfY2xvbmVfd2F0Y2goJm9sZC0+d2F0Y2gsICZjaHVuay0+d2F0Y2gpIDwgMCkgewogCQltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKKwkJcHV0X2lub3RpZnlfd2F0Y2goJm9sZC0+d2F0Y2gpOwogCQlmcmVlX2NodW5rKGNodW5rKTsKIAkJcmV0dXJuIC1FTk9TUEM7CiAJfQpAQCAtMzk0LDYgKzM5NSw3IEBACiAJCWNodW5rLT5kZWFkID0gMTsKIAkJaW5vdGlmeV9ldmljdF93YXRjaCgmY2h1bmstPndhdGNoKTsKIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CisJCXB1dF9pbm90aWZ5X3dhdGNoKCZvbGQtPndhdGNoKTsKIAkJcHV0X2lub3RpZnlfd2F0Y2goJmNodW5rLT53YXRjaCk7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdGZpbHRlci5jIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKaW5kZXggZmJmMjRkMS4uYTZmZTcxZiAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0ZmlsdGVyLmMKKysrIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKQEAgLTEzNSwxOCArMTM1LDE4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYXVkaXRfZnJlZV9ydWxlKHN0cnVjdCBhdWRpdF9lbnRyeSAqZSkKIHsKIAlpbnQgaTsKLQorCXN0cnVjdCBhdWRpdF9rcnVsZSAqZXJ1bGUgPSAmZS0+cnVsZTsKIAkvKiBzb21lIHJ1bGVzIGRvbid0IGhhdmUgYXNzb2NpYXRlZCB3YXRjaGVzICovCi0JaWYgKGUtPnJ1bGUud2F0Y2gpCi0JCWF1ZGl0X3B1dF93YXRjaChlLT5ydWxlLndhdGNoKTsKLQlpZiAoZS0+cnVsZS5maWVsZHMpCi0JCWZvciAoaSA9IDA7IGkgPCBlLT5ydWxlLmZpZWxkX2NvdW50OyBpKyspIHsKLQkJCXN0cnVjdCBhdWRpdF9maWVsZCAqZiA9ICZlLT5ydWxlLmZpZWxkc1tpXTsKKwlpZiAoZXJ1bGUtPndhdGNoKQorCQlhdWRpdF9wdXRfd2F0Y2goZXJ1bGUtPndhdGNoKTsKKwlpZiAoZXJ1bGUtPmZpZWxkcykKKwkJZm9yIChpID0gMDsgaSA8IGVydWxlLT5maWVsZF9jb3VudDsgaSsrKSB7CisJCQlzdHJ1Y3QgYXVkaXRfZmllbGQgKmYgPSAmZXJ1bGUtPmZpZWxkc1tpXTsKIAkJCWtmcmVlKGYtPmxzbV9zdHIpOwogCQkJc2VjdXJpdHlfYXVkaXRfcnVsZV9mcmVlKGYtPmxzbV9ydWxlKTsKIAkJfQotCWtmcmVlKGUtPnJ1bGUuZmllbGRzKTsKLQlrZnJlZShlLT5ydWxlLmZpbHRlcmtleSk7CisJa2ZyZWUoZXJ1bGUtPmZpZWxkcyk7CisJa2ZyZWUoZXJ1bGUtPmZpbHRlcmtleSk7CiAJa2ZyZWUoZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdHNjLmMgYi9rZXJuZWwvYXVkaXRzYy5jCmluZGV4IDhjYmRkZmYuLjdkNmFjN2MgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdHNjLmMKKysrIGIva2VybmVsL2F1ZGl0c2MuYwpAQCAtNjYsNiArNjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KIAogI2luY2x1ZGUgImF1ZGl0LmgiCiAKQEAgLTMyOCw2ICszMjksMTQgQEAKICAqLwogCiAjaWZkZWYgQ09ORklHX0FVRElUX1RSRUUKK3N0YXRpYyB2b2lkIGF1ZGl0X3NldF9hdWRpdGFibGUoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCkKK3sKKwlpZiAoIWN0eC0+cHJpbykgeworCQljdHgtPnByaW8gPSAxOworCQljdHgtPmN1cnJlbnRfc3RhdGUgPSBBVURJVF9SRUNPUkRfQ09OVEVYVDsKKwl9Cit9CisKIHN0YXRpYyBpbnQgcHV0X3RyZWVfcmVmKHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsIHN0cnVjdCBhdWRpdF9jaHVuayAqY2h1bmspCiB7CiAJc3RydWN0IGF1ZGl0X3RyZWVfcmVmcyAqcCA9IGN0eC0+dHJlZXM7CkBAIC03NDEsMTcgKzc1MCw5IEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGF1ZGl0X3NldF9hdWRpdGFibGUoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCkKLXsKLQlpZiAoIWN0eC0+cHJpbykgewotCQljdHgtPnByaW8gPSAxOwotCQljdHgtPmN1cnJlbnRfc3RhdGUgPSBBVURJVF9SRUNPUkRfQ09OVEVYVDsKLQl9Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmF1ZGl0X2dldF9jb250ZXh0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQkJCQkJICAgICAgaW50IHJldHVybl92YWxpZCwKLQkJCQkJCSAgICAgIGludCByZXR1cm5fY29kZSkKKwkJCQkJCSAgICAgIGxvbmcgcmV0dXJuX2NvZGUpCiB7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSB0c2stPmF1ZGl0X2NvbnRleHQ7CiAKQEAgLTEwMjMsNyArMTAyNCw3IEBACiB7CiAJY2hhciBhcmdfbnVtX2xlbl9idWZbMTJdOwogCWNvbnN0IGNoYXIgX191c2VyICp0bXBfcCA9IHA7Ci0JLyogaG93IG1hbnkgZGlnaXRzIGFyZSBpbiBhcmdfbnVtPyAzIGlzIHRoZSBsZW5ndGggb2YgYT1cbiAqLworCS8qIGhvdyBtYW55IGRpZ2l0cyBhcmUgaW4gYXJnX251bT8gMyBpcyB0aGUgbGVuZ3RoIG9mICIgYT0iICovCiAJc2l6ZV90IGFyZ19udW1fbGVuID0gc25wcmludGYoYXJnX251bV9sZW5fYnVmLCAxMiwgIiVkIiwgYXJnX251bSkgKyAzOwogCXNpemVfdCBsZW4sIGxlbl9sZWZ0LCB0b19zZW5kOwogCXNpemVfdCBtYXhfZXhlY3ZlX2F1ZGl0X2xlbiA9IE1BWF9FWEVDVkVfQVVESVRfTEVOOwpAQCAtMTEwOSw3ICsxMTEwLDcgQEAKIAkJICogc28gd2UgY2FuIGJlIHN1cmUgbm90aGluZyB3YXMgbG9zdC4KIAkJICovCiAJCWlmICgoaSA9PSAwKSAmJiAodG9vX2xvbmcpKQotCQkJYXVkaXRfbG9nX2Zvcm1hdCgqYWIsICJhJWRfbGVuPSV6dSAiLCBhcmdfbnVtLAorCQkJYXVkaXRfbG9nX2Zvcm1hdCgqYWIsICIgYSVkX2xlbj0lenUiLCBhcmdfbnVtLAogCQkJCQkgaGFzX2NudGwgPyAyKmxlbiA6IGxlbik7CiAKIAkJLyoKQEAgLTExMjksNyArMTEzMCw3IEBACiAJCWJ1Zlt0b19zZW5kXSA9ICdcMCc7CiAKIAkJLyogYWN0dWFsbHkgbG9nIGl0ICovCi0JCWF1ZGl0X2xvZ19mb3JtYXQoKmFiLCAiYSVkIiwgYXJnX251bSk7CisJCWF1ZGl0X2xvZ19mb3JtYXQoKmFiLCAiIGElZCIsIGFyZ19udW0pOwogCQlpZiAodG9vX2xvbmcpCiAJCQlhdWRpdF9sb2dfZm9ybWF0KCphYiwgIlslZF0iLCBpKTsKIAkJYXVkaXRfbG9nX2Zvcm1hdCgqYWIsICI9Iik7CkBAIC0xMTM3LDcgKzExMzgsNiBAQAogCQkJYXVkaXRfbG9nX25faGV4KCphYiwgYnVmLCB0b19zZW5kKTsKIAkJZWxzZQogCQkJYXVkaXRfbG9nX2Zvcm1hdCgqYWIsICJcIiVzXCIiLCBidWYpOwotCQlhdWRpdF9sb2dfZm9ybWF0KCphYiwgIlxuIik7CiAKIAkJcCArPSB0b19zZW5kOwogCQlsZW5fbGVmdCAtPSB0b19zZW5kOwpAQCAtMTE2NSw3ICsxMTY1LDcgQEAKIAogCXAgPSAoY29uc3QgY2hhciBfX3VzZXIgKilheGktPm1tLT5hcmdfc3RhcnQ7CiAKLQlhdWRpdF9sb2dfZm9ybWF0KCphYiwgImFyZ2M9JWQgIiwgYXhpLT5hcmdjKTsKKwlhdWRpdF9sb2dfZm9ybWF0KCphYiwgImFyZ2M9JWQiLCBheGktPmFyZ2MpOwogCiAJLyoKIAkgKiB3ZSBuZWVkIHNvbWUga2VybmVsIGJ1ZmZlciB0byBob2xkIHRoZSB1c2Vyc3BhY2UgYXJncy4gIEp1c3QKQEAgLTE0NzgsNyArMTQ3OCw3IEBACiAJCQljYXNlIDA6CiAJCQkJLyogbmFtZSB3YXMgc3BlY2lmaWVkIGFzIGEgcmVsYXRpdmUgcGF0aCBhbmQgdGhlCiAJCQkJICogZGlyZWN0b3J5IGNvbXBvbmVudCBpcyB0aGUgY3dkICovCi0JCQkJYXVkaXRfbG9nX2RfcGF0aChhYiwgIiBuYW1lPSIsICZjb250ZXh0LT5wd2QpOworCQkJCWF1ZGl0X2xvZ19kX3BhdGgoYWIsICJuYW1lPSIsICZjb250ZXh0LT5wd2QpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQkvKiBsb2cgdGhlIG5hbWUncyBkaXJlY3RvcnkgY29tcG9uZW50ICovCkBAIC0yMTQ5LDcgKzIxNDksNyBAQAogICogX19hdWRpdF9tcV9vcGVuIC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIGEgUE9TSVggTVEgb3BlbgogICogQG9mbGFnOiBvcGVuIGZsYWcKICAqIEBtb2RlOiBtb2RlIGJpdHMKLSAqIEB1X2F0dHI6IHF1ZXVlIGF0dHJpYnV0ZXMKKyAqIEBhdHRyOiBxdWV1ZSBhdHRyaWJ1dGVzCiAgKgogICovCiB2b2lkIF9fYXVkaXRfbXFfb3BlbihpbnQgb2ZsYWcsIG1vZGVfdCBtb2RlLCBzdHJ1Y3QgbXFfYXR0ciAqYXR0cikKQEAgLTIxOTYsNyArMjE5Niw3IEBACiAvKioKICAqIF9fYXVkaXRfbXFfbm90aWZ5IC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIGEgUE9TSVggTVEgbm90aWZ5CiAgKiBAbXFkZXM6IE1RIGRlc2NyaXB0b3IKLSAqIEB1X25vdGlmaWNhdGlvbjogTm90aWZpY2F0aW9uIGV2ZW50CisgKiBAbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24gZXZlbnQKICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IGM1MDBjYTcuLjM4MjEwOWI1IDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC05NCw3ICs5NCw2IEBACiAJY2hhciByZWxlYXNlX2FnZW50X3BhdGhbUEFUSF9NQVhdOwogfTsKIAotCiAvKgogICogVGhlICJyb290bm9kZSIgaGllcmFyY2h5IGlzIHRoZSAiZHVtbXkgaGllcmFyY2h5IiwgcmVzZXJ2ZWQgZm9yIHRoZQogICogc3Vic3lzdGVtcyB0aGF0IGFyZSBvdGhlcndpc2UgdW5hdHRhY2hlZCAtIGl0IG5ldmVyIGhhcyBtb3JlIHRoYW4gYQpAQCAtMTAyLDYgKzEwMSwzOSBAQAogICovCiBzdGF0aWMgc3RydWN0IGNncm91cGZzX3Jvb3Qgcm9vdG5vZGU7CiAKKy8qCisgKiBDU1MgSUQgLS0gSUQgcGVyIHN1YnN5cydzIENncm91cCBTdWJzeXMgU3RhdGUoQ1NTKS4gdXNlZCBvbmx5IHdoZW4KKyAqIGNncm91cF9zdWJzeXMtPnVzZV9pZCAhPSAwLgorICovCisjZGVmaW5lIENTU19JRF9NQVgJKDY1NTM1KQorc3RydWN0IGNzc19pZCB7CisJLyoKKwkgKiBUaGUgY3NzIHRvIHdoaWNoIHRoaXMgSUQgcG9pbnRzLiBUaGlzIHBvaW50ZXIgaXMgc2V0IHRvIHZhbGlkIHZhbHVlCisJICogYWZ0ZXIgY2dyb3VwIGlzIHBvcHVsYXRlZC4gSWYgY2dyb3VwIGlzIHJlbW92ZWQsIHRoaXMgd2lsbCBiZSBOVUxMLgorCSAqIFRoaXMgcG9pbnRlciBpcyBleHBlY3RlZCB0byBiZSBSQ1Utc2FmZSBiZWNhdXNlIGRlc3Ryb3koKQorCSAqIGlzIGNhbGxlZCBhZnRlciBzeW5jaHJvbml6ZV9yY3UoKS4gQnV0IGZvciBzYWZlIHVzZSwgY3NzX2lzX3JlbW92ZWQoKQorCSAqIGNzc190cnlnZXQoKSBzaG91bGQgYmUgdXNlZCBmb3IgYXZvaWRpbmcgcmFjZS4KKwkgKi8KKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCS8qCisJICogSUQgb2YgdGhpcyBjc3MuCisJICovCisJdW5zaWduZWQgc2hvcnQgaWQ7CisJLyoKKwkgKiBEZXB0aCBpbiBoaWVyYXJjaHkgd2hpY2ggdGhpcyBJRCBiZWxvbmdzIHRvLgorCSAqLworCXVuc2lnbmVkIHNob3J0IGRlcHRoOworCS8qCisJICogSUQgaXMgZnJlZWQgYnkgUkNVLiAoYW5kIGxvb2t1cCByb3V0aW5lIGlzIFJDVSBzYWZlLikKKwkgKi8KKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CisJLyoKKwkgKiBIaWVyYXJjaHkgb2YgQ1NTIElEIGJlbG9uZ3MgdG8uCisJICovCisJdW5zaWduZWQgc2hvcnQgc3RhY2tbMF07IC8qIEFycmF5IG9mIExlbmd0aCAoZGVwdGgrMSkgKi8KK307CisKKwogLyogVGhlIGxpc3Qgb2YgaGllcmFyY2h5IHJvb3RzICovCiAKIHN0YXRpYyBMSVNUX0hFQUQocm9vdHMpOwpAQCAtMTg1LDYgKzIxNyw4IEBACiBzdGF0aWMgc3RydWN0IGNzc19zZXQgaW5pdF9jc3Nfc2V0Owogc3RhdGljIHN0cnVjdCBjZ19jZ3JvdXBfbGluayBpbml0X2Nzc19zZXRfbGluazsKIAorc3RhdGljIGludCBjZ3JvdXBfc3Vic3lzX2luaXRfaWRyKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcyk7CisKIC8qIGNzc19zZXRfbG9jayBwcm90ZWN0cyB0aGUgbGlzdCBvZiBjc3Nfc2V0IG9iamVjdHMsIGFuZCB0aGUKICAqIGNoYWluIG9mIHRhc2tzIG9mZiBlYWNoIGNzc19zZXQuICBOZXN0cyBvdXRzaWRlIHRhc2stPmFsbG9jX2xvY2sKICAqIGR1ZSB0byBjZ3JvdXBfaXRlcl9zdGFydCgpICovCkBAIC01NjcsNiArNjAxLDkgQEAKIAkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0ssCiB9OwogCitzdGF0aWMgaW50IGFsbG9jX2Nzc19pZChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQlzdHJ1Y3QgY2dyb3VwICpwYXJlbnQsIHN0cnVjdCBjZ3JvdXAgKmNoaWxkKTsKKwogc3RhdGljIHN0cnVjdCBpbm9kZSAqY2dyb3VwX25ld19pbm9kZShtb2RlX3QgbW9kZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKHNiKTsKQEAgLTU4NSwxMyArNjIyLDE4IEBACiAgKiBDYWxsIHN1YnN5cydzIHByZV9kZXN0cm95IGhhbmRsZXIuCiAgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgY3NzIHJlZmNudCBjaGVjay4KICAqLwotc3RhdGljIHZvaWQgY2dyb3VwX2NhbGxfcHJlX2Rlc3Ryb3koc3RydWN0IGNncm91cCAqY2dycCkKK3N0YXRpYyBpbnQgY2dyb3VwX2NhbGxfcHJlX2Rlc3Ryb3koc3RydWN0IGNncm91cCAqY2dycCkKIHsKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3M7CisJaW50IHJldCA9IDA7CisKIAlmb3JfZWFjaF9zdWJzeXMoY2dycC0+cm9vdCwgc3MpCi0JCWlmIChzcy0+cHJlX2Rlc3Ryb3kpCi0JCQlzcy0+cHJlX2Rlc3Ryb3koc3MsIGNncnApOwotCXJldHVybjsKKwkJaWYgKHNzLT5wcmVfZGVzdHJveSkgeworCQkJcmV0ID0gc3MtPnByZV9kZXN0cm95KHNzLCBjZ3JwKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisJCX0KKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBmcmVlX2Nncm91cF9yY3Uoc3RydWN0IHJjdV9oZWFkICpvYmopCkBAIC02ODUsNiArNzI3LDIyIEBACiAJcmVtb3ZlX2RpcihkZW50cnkpOwogfQogCisvKgorICogQSBxdWV1ZSBmb3Igd2FpdGVycyB0byBkbyBybWRpcigpIGNncm91cC4gQSB0YXNrcyB3aWxsIHNsZWVwIHdoZW4KKyAqIGNncm91cC0+Y291bnQgPT0gMCAmJiBsaXN0X2VtcHR5KCZjZ3JvdXAtPmNoaWxkcmVuKSAmJiBzdWJzeXMgaGFzIHNvbWUKKyAqIHJlZmVyZW5jZSB0byBjc3MtPnJlZmNudC4gSW4gZ2VuZXJhbCwgdGhpcyByZWZjbnQgaXMgZXhwZWN0ZWQgdG8gZ29lcyBkb3duCisgKiB0byB6ZXJvLCBzb29uLgorICoKKyAqIENHUlBfV0FJVF9PTl9STURJUiBmbGFnIGlzIG1vZGlmaWVkIHVuZGVyIGNncm91cCdzIGlub2RlLT5pX211dGV4OworICovCitERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChjZ3JvdXBfcm1kaXJfd2FpdHEpOworCitzdGF0aWMgdm9pZCBjZ3JvdXBfd2FrZXVwX3JtZGlyX3dhaXRlcnMoY29uc3Qgc3RydWN0IGNncm91cCAqY2dycCkKK3sKKwlpZiAodW5saWtlbHkodGVzdF9iaXQoQ0dSUF9XQUlUX09OX1JNRElSLCAmY2dycC0+ZmxhZ3MpKSkKKwkJd2FrZV91cF9hbGwoJmNncm91cF9ybWRpcl93YWl0cSk7Cit9CisKIHN0YXRpYyBpbnQgcmViaW5kX3N1YnN5c3RlbXMoc3RydWN0IGNncm91cGZzX3Jvb3QgKnJvb3QsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGZpbmFsX2JpdHMpCiB7CkBAIC04NTcsMTYgKzkxNSwxNiBAQAogCX0KIAogCXJldCA9IHJlYmluZF9zdWJzeXN0ZW1zKHJvb3QsIG9wdHMuc3Vic3lzX2JpdHMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubG9jazsKIAogCS8qIChyZSlwb3B1bGF0ZSBzdWJzeXN0ZW0gZmlsZXMgKi8KLQlpZiAoIXJldCkKLQkJY2dyb3VwX3BvcHVsYXRlX2RpcihjZ3JwKTsKKwljZ3JvdXBfcG9wdWxhdGVfZGlyKGNncnApOwogCiAJaWYgKG9wdHMucmVsZWFzZV9hZ2VudCkKIAkJc3RyY3B5KHJvb3QtPnJlbGVhc2VfYWdlbnRfcGF0aCwgb3B0cy5yZWxlYXNlX2FnZW50KTsKICBvdXRfdW5sb2NrOgotCWlmIChvcHRzLnJlbGVhc2VfYWdlbnQpCi0JCWtmcmVlKG9wdHMucmVsZWFzZV9hZ2VudCk7CisJa2ZyZWUob3B0cy5yZWxlYXNlX2FnZW50KTsKIAltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZjZ3JwLT5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC05NjksMTUgKzEwMjcsMTMgQEAKIAkvKiBGaXJzdCBmaW5kIHRoZSBkZXNpcmVkIHNldCBvZiBzdWJzeXN0ZW1zICovCiAJcmV0ID0gcGFyc2VfY2dyb3VwZnNfb3B0aW9ucyhkYXRhLCAmb3B0cyk7CiAJaWYgKHJldCkgewotCQlpZiAob3B0cy5yZWxlYXNlX2FnZW50KQotCQkJa2ZyZWUob3B0cy5yZWxlYXNlX2FnZW50KTsKKwkJa2ZyZWUob3B0cy5yZWxlYXNlX2FnZW50KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyb290ID0ga3phbGxvYyhzaXplb2YoKnJvb3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJvb3QpIHsKLQkJaWYgKG9wdHMucmVsZWFzZV9hZ2VudCkKLQkJCWtmcmVlKG9wdHMucmVsZWFzZV9hZ2VudCk7CisJCWtmcmVlKG9wdHMucmVsZWFzZV9hZ2VudCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTI4MCw2ICsxMzM2LDEyIEBACiAJc2V0X2JpdChDR1JQX1JFTEVBU0FCTEUsICZvbGRjZ3JwLT5mbGFncyk7CiAJc3luY2hyb25pemVfcmN1KCk7CiAJcHV0X2Nzc19zZXQoY2cpOworCisJLyoKKwkgKiB3YWtlIHVwIHJtZGlyKCkgd2FpdGVyLiB0aGUgcm1kaXIgc2hvdWxkIGZhaWwgc2luY2UgdGhlIGNncm91cAorCSAqIGlzIG5vIGxvbmdlciBlbXB0eS4KKwkgKi8KKwljZ3JvdXBfd2FrZXVwX3JtZGlyX3dhaXRlcnMoY2dycCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MjUsNyArMTY4Nyw3IEBACiAJLnJlbmFtZSA9IGNncm91cF9yZW5hbWUsCiB9OwogCi1zdGF0aWMgaW50IGNncm91cF9jcmVhdGVfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAorc3RhdGljIGludCBjZ3JvdXBfY3JlYXRlX2ZpbGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBtb2RlX3QgbW9kZSwKIAkJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2dyb3VwX2RvcHMgPSB7CkBAIC0xNjcxLDcgKzE3MzMsNyBAQAogICogQG1vZGU6IG1vZGUgdG8gc2V0IG9uIG5ldyBkaXJlY3RvcnkuCiAgKi8KIHN0YXRpYyBpbnQgY2dyb3VwX2NyZWF0ZV9kaXIoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkJCWludCBtb2RlKQorCQkJCW1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKIAlpbnQgZXJyb3IgPSAwOwpAQCAtMTY4OSw2ICsxNzUxLDMzIEBACiAJcmV0dXJuIGVycm9yOwogfQogCisvKioKKyAqIGNncm91cF9maWxlX21vZGUgLSBkZWR1Y2UgZmlsZSBtb2RlIG9mIGEgY29udHJvbCBmaWxlCisgKiBAY2Z0OiB0aGUgY29udHJvbCBmaWxlIGluIHF1ZXN0aW9uCisgKgorICogcmV0dXJucyBjZnQtPm1vZGUgaWYgLT5tb2RlIGlzIG5vdCAwCisgKiByZXR1cm5zIFNfSVJVR098U19JV1VTUiBpZiBpdCBoYXMgYm90aCBhIHJlYWQgYW5kIGEgd3JpdGUgaGFuZGxlcgorICogcmV0dXJucyBTX0lSVUdPIGlmIGl0IGhhcyBvbmx5IGEgcmVhZCBoYW5kbGVyCisgKiByZXR1cm5zIFNfSVdVU1IgaWYgaXQgaGFzIG9ubHkgYSB3cml0ZSBoYW5kZXIKKyAqLworc3RhdGljIG1vZGVfdCBjZ3JvdXBfZmlsZV9tb2RlKGNvbnN0IHN0cnVjdCBjZnR5cGUgKmNmdCkKK3sKKwltb2RlX3QgbW9kZSA9IDA7CisKKwlpZiAoY2Z0LT5tb2RlKQorCQlyZXR1cm4gY2Z0LT5tb2RlOworCisJaWYgKGNmdC0+cmVhZCB8fCBjZnQtPnJlYWRfdTY0IHx8IGNmdC0+cmVhZF9zNjQgfHwKKwkgICAgY2Z0LT5yZWFkX21hcCB8fCBjZnQtPnJlYWRfc2VxX3N0cmluZykKKwkJbW9kZSB8PSBTX0lSVUdPOworCisJaWYgKGNmdC0+d3JpdGUgfHwgY2Z0LT53cml0ZV91NjQgfHwgY2Z0LT53cml0ZV9zNjQgfHwKKwkgICAgY2Z0LT53cml0ZV9zdHJpbmcgfHwgY2Z0LT50cmlnZ2VyKQorCQltb2RlIHw9IFNfSVdVU1I7CisKKwlyZXR1cm4gbW9kZTsKK30KKwogaW50IGNncm91cF9hZGRfZmlsZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCQkgICAgICAgc3RydWN0IGNncm91cF9zdWJzeXMgKnN1YnN5cywKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBjZnR5cGUgKmNmdCkKQEAgLTE2OTYsNiArMTc4NSw3IEBACiAJc3RydWN0IGRlbnRyeSAqZGlyID0gY2dycC0+ZGVudHJ5OwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlpbnQgZXJyb3I7CisJbW9kZV90IG1vZGU7CiAKIAljaGFyIG5hbWVbTUFYX0NHUk9VUF9UWVBFX05BTUVMRU4gKyBNQVhfQ0ZUWVBFX05BTUUgKyAyXSA9IHsgMCB9OwogCWlmIChzdWJzeXMgJiYgIXRlc3RfYml0KFJPT1RfTk9QUkVGSVgsICZjZ3JwLT5yb290LT5mbGFncykpIHsKQEAgLTE3MDYsNyArMTc5Niw4IEBACiAJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRpci0+ZF9pbm9kZS0+aV9tdXRleCkpOwogCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIGRpciwgc3RybGVuKG5hbWUpKTsKIAlpZiAoIUlTX0VSUihkZW50cnkpKSB7Ci0JCWVycm9yID0gY2dyb3VwX2NyZWF0ZV9maWxlKGRlbnRyeSwgMDY0NCB8IFNfSUZSRUcsCisJCW1vZGUgPSBjZ3JvdXBfZmlsZV9tb2RlKGNmdCk7CisJCWVycm9yID0gY2dyb3VwX2NyZWF0ZV9maWxlKGRlbnRyeSwgbW9kZSB8IFNfSUZSRUcsCiAJCQkJCQljZ3JwLT5yb290LT5zYik7CiAJCWlmICghZXJyb3IpCiAJCQlkZW50cnktPmRfZnNkYXRhID0gKHZvaWQgKiljZnQ7CkBAIC0yMjg4LDYgKzIzNzksNyBAQAogCQkud3JpdGVfdTY0ID0gY2dyb3VwX3Rhc2tzX3dyaXRlLAogCQkucmVsZWFzZSA9IGNncm91cF90YXNrc19yZWxlYXNlLAogCQkucHJpdmF0ZSA9IEZJTEVfVEFTS0xJU1QsCisJCS5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IsCiAJfSwKIAogCXsKQEAgLTIzMjcsNiArMjQxOSwxNyBAQAogCQlpZiAoc3MtPnBvcHVsYXRlICYmIChlcnIgPSBzcy0+cG9wdWxhdGUoc3MsIGNncnApKSA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KKwkvKiBUaGlzIGNncm91cCBpcyByZWFkeSBub3cgKi8KKwlmb3JfZWFjaF9zdWJzeXMoY2dycC0+cm9vdCwgc3MpIHsKKwkJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyA9IGNncnAtPnN1YnN5c1tzcy0+c3Vic3lzX2lkXTsKKwkJLyoKKwkJICogVXBkYXRlIGlkLT5jc3MgcG9pbnRlciBhbmQgbWFrZSB0aGlzIGNzcyB2aXNpYmxlIGZyb20KKwkJICogQ1NTIElEIGZ1bmN0aW9ucy4gVGhpcyBwb2ludGVyIHdpbGwgYmUgZGVyZWZlcmVuZWQKKwkJICogZnJvbSBSQ1UtcmVhZC1zaWRlIHdpdGhvdXQgbG9ja3MuCisJCSAqLworCQlpZiAoY3NzLT5pZCkKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihjc3MtPmlkLT5jc3MsIGNzcyk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMzM4LDYgKzI0NDEsNyBAQAogCWNzcy0+Y2dyb3VwID0gY2dycDsKIAlhdG9taWNfc2V0KCZjc3MtPnJlZmNudCwgMSk7CiAJY3NzLT5mbGFncyA9IDA7CisJY3NzLT5pZCA9IE5VTEw7CiAJaWYgKGNncnAgPT0gZHVtbXl0b3ApCiAJCXNldF9iaXQoQ1NTX1JPT1QsICZjc3MtPmZsYWdzKTsKIAlCVUdfT04oY2dycC0+c3Vic3lzW3NzLT5zdWJzeXNfaWRdKTsKQEAgLTIzNzYsNyArMjQ4MCw3IEBACiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBtdXRleCBvbiB0aGUgcGFyZW50IGlub2RlIGhlbGQKICAqLwogc3RhdGljIGxvbmcgY2dyb3VwX2NyZWF0ZShzdHJ1Y3QgY2dyb3VwICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCSAgICAgaW50IG1vZGUpCisJCQkgICAgIG1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBjZ3JvdXAgKmNncnA7CiAJc3RydWN0IGNncm91cGZzX3Jvb3QgKnJvb3QgPSBwYXJlbnQtPnJvb3Q7CkBAIC0yNDEzLDYgKzI1MTcsMTAgQEAKIAkJCWdvdG8gZXJyX2Rlc3Ryb3k7CiAJCX0KIAkJaW5pdF9jZ3JvdXBfY3NzKGNzcywgc3MsIGNncnApOworCQlpZiAoc3MtPnVzZV9pZCkKKwkJCWlmIChhbGxvY19jc3NfaWQoc3MsIHBhcmVudCwgY2dycCkpCisJCQkJZ290byBlcnJfZGVzdHJveTsKKwkJLyogQXQgZXJyb3IsIC0+ZGVzdHJveSgpIGNhbGxiYWNrIGhhcyB0byBmcmVlIGFzc2lnbmVkIElELiAqLwogCX0KIAogCWNncm91cF9sb2NrX2hpZXJhcmNoeShyb290KTsKQEAgLTI1NTUsOSArMjY2MywxMSBAQAogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBkZW50cnktPmRfZnNkYXRhOwogCXN0cnVjdCBkZW50cnkgKmQ7CiAJc3RydWN0IGNncm91cCAqcGFyZW50OworCURFRklORV9XQUlUKHdhaXQpOworCWludCByZXQ7CiAKIAkvKiB0aGUgdmZzIGhvbGRzIGJvdGggaW5vZGUtPmlfbXV0ZXggYWxyZWFkeSAqLwotCithZ2FpbjoKIAltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogCWlmIChhdG9taWNfcmVhZCgmY2dycC0+Y291bnQpICE9IDApIHsKIAkJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOwpAQCAtMjU3MywxNyArMjY4MywzOSBAQAogCSAqIENhbGwgcHJlX2Rlc3Ryb3kgaGFuZGxlcnMgb2Ygc3Vic3lzLiBOb3RpZnkgc3Vic3lzdGVtcwogCSAqIHRoYXQgcm1kaXIoKSByZXF1ZXN0IGNvbWVzLgogCSAqLwotCWNncm91cF9jYWxsX3ByZV9kZXN0cm95KGNncnApOworCXJldCA9IGNncm91cF9jYWxsX3ByZV9kZXN0cm95KGNncnApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogCXBhcmVudCA9IGNncnAtPnBhcmVudDsKLQotCWlmIChhdG9taWNfcmVhZCgmY2dycC0+Y291bnQpCi0JICAgIHx8ICFsaXN0X2VtcHR5KCZjZ3JwLT5jaGlsZHJlbikKLQkgICAgfHwgIWNncm91cF9jbGVhcl9jc3NfcmVmcyhjZ3JwKSkgeworCWlmIChhdG9taWNfcmVhZCgmY2dycC0+Y291bnQpIHx8ICFsaXN0X2VtcHR5KCZjZ3JwLT5jaGlsZHJlbikpIHsKIAkJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KKwkvKgorCSAqIGNzc19wdXQvZ2V0IGlzIHByb3ZpZGVkIGZvciBzdWJzeXMgdG8gZ3JhYiByZWZjbnQgdG8gY3NzLiBJbiB0eXBpY2FsCisJICogY2FzZSwgc3Vic3lzdGVtIGhhcyBubyByZWZlcmVuY2UgYWZ0ZXIgcHJlX2Rlc3Ryb3koKS4gQnV0LCB1bmRlcgorCSAqIGhpZXJhcmNoeSBtYW5hZ2VtZW50LCBzb21lICp0ZW1wb3JhbCogcmVmY250IGNhbiBiZSBob2xkLgorCSAqIFRvIGF2b2lkIHJldHVybmluZyAtRUJVU1kgdG8gYSB1c2VyLCB3YWl0cXVldWUgaXMgdXNlZC4gSWYgc3Vic3lzCisJICogaXMgcmVhbGx5IGJ1c3ksIGl0IHNob3VsZCByZXR1cm4gLUVCVVNZIGF0IHByZV9kZXN0cm95KCkuIHdha2VfdXAKKwkgKiBpcyBjYWxsZWQgd2hlbiBjc3NfcHV0KCkgaXMgY2FsbGVkIGFuZCByZWZjbnQgZ29lcyBkb3duIHRvIDAuCisJICovCisJc2V0X2JpdChDR1JQX1dBSVRfT05fUk1ESVIsICZjZ3JwLT5mbGFncyk7CisJcHJlcGFyZV90b193YWl0KCZjZ3JvdXBfcm1kaXJfd2FpdHEsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCisJaWYgKCFjZ3JvdXBfY2xlYXJfY3NzX3JlZnMoY2dycCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCQlzY2hlZHVsZSgpOworCQlmaW5pc2hfd2FpdCgmY2dyb3VwX3JtZGlyX3dhaXRxLCAmd2FpdCk7CisJCWNsZWFyX2JpdChDR1JQX1dBSVRfT05fUk1ESVIsICZjZ3JwLT5mbGFncyk7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRUlOVFI7CisJCWdvdG8gYWdhaW47CisJfQorCS8qIE5PIGNzc190cnlnZXQoKSBjYW4gc3VjY2VzcyBhZnRlciBoZXJlLiAqLworCWZpbmlzaF93YWl0KCZjZ3JvdXBfcm1kaXJfd2FpdHEsICZ3YWl0KTsKKwljbGVhcl9iaXQoQ0dSUF9XQUlUX09OX1JNRElSLCAmY2dycC0+ZmxhZ3MpOwogCiAJc3Bpbl9sb2NrKCZyZWxlYXNlX2xpc3RfbG9jayk7CiAJc2V0X2JpdChDR1JQX1JFTU9WRUQsICZjZ3JwLT5mbGFncyk7CkBAIC0yNzA4LDYgKzI4NDAsOCBAQAogCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBzdWJzeXNbaV07CiAJCWlmICghc3MtPmVhcmx5X2luaXQpCiAJCQljZ3JvdXBfaW5pdF9zdWJzeXMoc3MpOworCQlpZiAoc3MtPnVzZV9pZCkKKwkJCWNncm91cF9zdWJzeXNfaW5pdF9pZHIoc3MpOwogCX0KIAogCS8qIEFkZCBpbml0X2Nzc19zZXQgdG8gdGhlIGhhc2ggdGFibGUgKi8KQEAgLTMwODQsMTggKzMyMTgsMTkgQEAKIH0KIAogLyoqCi0gKiBjZ3JvdXBfaXNfZGVzY2VuZGFudCAtIHNlZSBpZiBAY2dycCBpcyBhIGRlc2NlbmRhbnQgb2YgY3VycmVudCB0YXNrJ3MgY2dycAorICogY2dyb3VwX2lzX2Rlc2NlbmRhbnQgLSBzZWUgaWYgQGNncnAgaXMgYSBkZXNjZW5kYW50IG9mIEB0YXNrJ3MgY2dycAogICogQGNncnA6IHRoZSBjZ3JvdXAgaW4gcXVlc3Rpb24KKyAqIEB0YXNrOiB0aGUgdGFzayBpbiBxdWVzdGlvbgogICoKLSAqIFNlZSBpZiBAY2dycCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIGN1cnJlbnQgdGFzaydzIGNncm91cCBpbgotICogdGhlIGFwcHJvcHJpYXRlIGhpZXJhcmNoeS4KKyAqIFNlZSBpZiBAY2dycCBpcyBhIGRlc2NlbmRhbnQgb2YgQHRhc2sncyBjZ3JvdXAgaW4gdGhlIGFwcHJvcHJpYXRlCisgKiBoaWVyYXJjaHkuCiAgKgogICogSWYgd2UgYXJlIHNlbmRpbmcgaW4gZHVtbXl0b3AsIHRoZW4gcHJlc3VtYWJseSB3ZSBhcmUgY3JlYXRpbmcKICAqIHRoZSB0b3AgY2dyb3VwIGluIHRoZSBzdWJzeXN0ZW0uCiAgKgogICogQ2FsbGVkIG9ubHkgYnkgdGhlIG5zIChuc3Byb3h5KSBjZ3JvdXAuCiAgKi8KLWludCBjZ3JvdXBfaXNfZGVzY2VuZGFudChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQoraW50IGNncm91cF9pc19kZXNjZW5kYW50KGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBjZ3JvdXAgKnRhcmdldDsKQEAgLTMxMDUsNyArMzI0MCw3IEBACiAJCXJldHVybiAxOwogCiAJZ2V0X2ZpcnN0X3N1YnN5cyhjZ3JwLCBOVUxMLCAmc3Vic3lzX2lkKTsKLQl0YXJnZXQgPSB0YXNrX2Nncm91cChjdXJyZW50LCBzdWJzeXNfaWQpOworCXRhcmdldCA9IHRhc2tfY2dyb3VwKHRhc2ssIHN1YnN5c19pZCk7CiAJd2hpbGUgKGNncnAgIT0gdGFyZ2V0ICYmIGNncnAhPSBjZ3JwLT50b3BfY2dyb3VwKQogCQljZ3JwID0gY2dycC0+cGFyZW50OwogCXJldCA9IChjZ3JwID09IHRhcmdldCk7CkBAIC0zMTM4LDEwICszMjczLDEyIEBACiB7CiAJc3RydWN0IGNncm91cCAqY2dycCA9IGNzcy0+Y2dyb3VwOwogCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAoKGF0b21pY19kZWNfcmV0dXJuKCZjc3MtPnJlZmNudCkgPT0gMSkgJiYKLQkgICAgbm90aWZ5X29uX3JlbGVhc2UoY2dycCkpIHsKLQkJc2V0X2JpdChDR1JQX1JFTEVBU0FCTEUsICZjZ3JwLT5mbGFncyk7Ci0JCWNoZWNrX2Zvcl9yZWxlYXNlKGNncnApOworCWlmIChhdG9taWNfZGVjX3JldHVybigmY3NzLT5yZWZjbnQpID09IDEpIHsKKwkJaWYgKG5vdGlmeV9vbl9yZWxlYXNlKGNncnApKSB7CisJCQlzZXRfYml0KENHUlBfUkVMRUFTQUJMRSwgJmNncnAtPmZsYWdzKTsKKwkJCWNoZWNrX2Zvcl9yZWxlYXNlKGNncnApOworCQl9CisJCWNncm91cF93YWtldXBfcm1kaXJfd2FpdGVycyhjZ3JwKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CkBAIC0zMjQxLDMgKzMzNzgsMjMyIEBACiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJjZ3JvdXBfZGlzYWJsZT0iLCBjZ3JvdXBfZGlzYWJsZSk7CisKKy8qCisgKiBGdW5jdG9ucyBmb3IgQ1NTIElELgorICovCisKKy8qCisgKlRvIGdldCBJRCBvdGhlciB0aGFuIDAsIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuICFjZ3JvdXBfaXNfcmVtb3ZlZCgpLgorICovCit1bnNpZ25lZCBzaG9ydCBjc3NfaWQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKK3sKKwlzdHJ1Y3QgY3NzX2lkICpjc3NpZCA9IHJjdV9kZXJlZmVyZW5jZShjc3MtPmlkKTsKKworCWlmIChjc3NpZCkKKwkJcmV0dXJuIGNzc2lkLT5pZDsKKwlyZXR1cm4gMDsKK30KKwordW5zaWduZWQgc2hvcnQgY3NzX2RlcHRoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCit7CisJc3RydWN0IGNzc19pZCAqY3NzaWQgPSByY3VfZGVyZWZlcmVuY2UoY3NzLT5pZCk7CisKKwlpZiAoY3NzaWQpCisJCXJldHVybiBjc3NpZC0+ZGVwdGg7CisJcmV0dXJuIDA7Cit9CisKK2Jvb2wgY3NzX2lzX2FuY2VzdG9yKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjaGlsZCwKKwkJICAgIGNvbnN0IHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290KQoreworCXN0cnVjdCBjc3NfaWQgKmNoaWxkX2lkID0gcmN1X2RlcmVmZXJlbmNlKGNoaWxkLT5pZCk7CisJc3RydWN0IGNzc19pZCAqcm9vdF9pZCA9IHJjdV9kZXJlZmVyZW5jZShyb290LT5pZCk7CisKKwlpZiAoIWNoaWxkX2lkIHx8ICFyb290X2lkIHx8IChjaGlsZF9pZC0+ZGVwdGggPCByb290X2lkLT5kZXB0aCkpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gY2hpbGRfaWQtPnN0YWNrW3Jvb3RfaWQtPmRlcHRoXSA9PSByb290X2lkLT5pZDsKK30KKworc3RhdGljIHZvaWQgX19mcmVlX2Nzc19pZF9jYihzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGNzc19pZCAqaWQ7CisKKwlpZCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgY3NzX2lkLCByY3VfaGVhZCk7CisJa2ZyZWUoaWQpOworfQorCit2b2lkIGZyZWVfY3NzX2lkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKK3sKKwlzdHJ1Y3QgY3NzX2lkICppZCA9IGNzcy0+aWQ7CisJLyogV2hlbiB0aGlzIGlzIGNhbGxlZCBiZWZvcmUgY3NzX2lkIGluaXRpYWxpemF0aW9uLCBpZCBjYW4gYmUgTlVMTCAqLworCWlmICghaWQpCisJCXJldHVybjsKKworCUJVR19PTighc3MtPnVzZV9pZCk7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIoaWQtPmNzcywgTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGNzcy0+aWQsIE5VTEwpOworCXNwaW5fbG9jaygmc3MtPmlkX2xvY2spOworCWlkcl9yZW1vdmUoJnNzLT5pZHIsIGlkLT5pZCk7CisJc3Bpbl91bmxvY2soJnNzLT5pZF9sb2NrKTsKKwljYWxsX3JjdSgmaWQtPnJjdV9oZWFkLCBfX2ZyZWVfY3NzX2lkX2NiKTsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IGluaXQgb3IgY3JlYXRlKCkuIFRoZW4sIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gYXJlCisgKiBhbHdheXMgc2VyaWFsaXplZCAoQnkgY2dyb3VwX211dGV4KCkgYXQgY3JlYXRlKCkpLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgY3NzX2lkICpnZXRfbmV3X2Nzc2lkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgaW50IGRlcHRoKQoreworCXN0cnVjdCBjc3NfaWQgKm5ld2lkOworCWludCBteWlkLCBlcnJvciwgc2l6ZTsKKworCUJVR19PTighc3MtPnVzZV9pZCk7CisKKwlzaXplID0gc2l6ZW9mKCpuZXdpZCkgKyBzaXplb2YodW5zaWduZWQgc2hvcnQpICogKGRlcHRoICsgMSk7CisJbmV3aWQgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghbmV3aWQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCS8qIGdldCBpZCAqLworCWlmICh1bmxpa2VseSghaWRyX3ByZV9nZXQoJnNzLT5pZHIsIEdGUF9LRVJORUwpKSkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CisJc3Bpbl9sb2NrKCZzcy0+aWRfbG9jayk7CisJLyogRG9uJ3QgdXNlIDAuIGFsbG9jYXRlcyBhbiBJRCBvZiAxLTY1NTM1ICovCisJZXJyb3IgPSBpZHJfZ2V0X25ld19hYm92ZSgmc3MtPmlkciwgbmV3aWQsIDEsICZteWlkKTsKKwlzcGluX3VubG9jaygmc3MtPmlkX2xvY2spOworCisJLyogUmV0dXJucyBlcnJvciB3aGVuIHRoZXJlIGFyZSBubyBmcmVlIHNwYWNlcyBmb3IgbmV3IElELiovCisJaWYgKGVycm9yKSB7CisJCWVycm9yID0gLUVOT1NQQzsKKwkJZ290byBlcnJfb3V0OworCX0KKwlpZiAobXlpZCA+IENTU19JRF9NQVgpCisJCWdvdG8gcmVtb3ZlX2lkcjsKKworCW5ld2lkLT5pZCA9IG15aWQ7CisJbmV3aWQtPmRlcHRoID0gZGVwdGg7CisJcmV0dXJuIG5ld2lkOworcmVtb3ZlX2lkcjoKKwllcnJvciA9IC1FTk9TUEM7CisJc3Bpbl9sb2NrKCZzcy0+aWRfbG9jayk7CisJaWRyX3JlbW92ZSgmc3MtPmlkciwgbXlpZCk7CisJc3Bpbl91bmxvY2soJnNzLT5pZF9sb2NrKTsKK2Vycl9vdXQ6CisJa2ZyZWUobmV3aWQpOworCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKworfQorCitzdGF0aWMgaW50IF9faW5pdCBjZ3JvdXBfc3Vic3lzX2luaXRfaWRyKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcykKK3sKKwlzdHJ1Y3QgY3NzX2lkICpuZXdpZDsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcm9vdGNzczsKKworCXNwaW5fbG9ja19pbml0KCZzcy0+aWRfbG9jayk7CisJaWRyX2luaXQoJnNzLT5pZHIpOworCisJcm9vdGNzcyA9IGluaXRfY3NzX3NldC5zdWJzeXNbc3MtPnN1YnN5c19pZF07CisJbmV3aWQgPSBnZXRfbmV3X2Nzc2lkKHNzLCAwKTsKKwlpZiAoSVNfRVJSKG5ld2lkKSkKKwkJcmV0dXJuIFBUUl9FUlIobmV3aWQpOworCisJbmV3aWQtPnN0YWNrWzBdID0gbmV3aWQtPmlkOworCW5ld2lkLT5jc3MgPSByb290Y3NzOworCXJvb3Rjc3MtPmlkID0gbmV3aWQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfY3NzX2lkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqcGFyZW50LAorCQkJc3RydWN0IGNncm91cCAqY2hpbGQpCit7CisJaW50IHN1YnN5c19pZCwgaSwgZGVwdGggPSAwOworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzLCAqY2hpbGRfY3NzOworCXN0cnVjdCBjc3NfaWQgKmNoaWxkX2lkLCAqcGFyZW50X2lkID0gTlVMTDsKKworCXN1YnN5c19pZCA9IHNzLT5zdWJzeXNfaWQ7CisJcGFyZW50X2NzcyA9IHBhcmVudC0+c3Vic3lzW3N1YnN5c19pZF07CisJY2hpbGRfY3NzID0gY2hpbGQtPnN1YnN5c1tzdWJzeXNfaWRdOworCWRlcHRoID0gY3NzX2RlcHRoKHBhcmVudF9jc3MpICsgMTsKKwlwYXJlbnRfaWQgPSBwYXJlbnRfY3NzLT5pZDsKKworCWNoaWxkX2lkID0gZ2V0X25ld19jc3NpZChzcywgZGVwdGgpOworCWlmIChJU19FUlIoY2hpbGRfaWQpKQorCQlyZXR1cm4gUFRSX0VSUihjaGlsZF9pZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKKwkJY2hpbGRfaWQtPnN0YWNrW2ldID0gcGFyZW50X2lkLT5zdGFja1tpXTsKKwljaGlsZF9pZC0+c3RhY2tbZGVwdGhdID0gY2hpbGRfaWQtPmlkOworCS8qCisJICogY2hpbGRfaWQtPmNzcyBwb2ludGVyIHdpbGwgYmUgc2V0IGFmdGVyIHRoaXMgY2dyb3VwIGlzIGF2YWlsYWJsZQorCSAqIHNlZSBjZ3JvdXBfcG9wdWxhdGVfZGlyKCkKKwkgKi8KKwlyY3VfYXNzaWduX3BvaW50ZXIoY2hpbGRfY3NzLT5pZCwgY2hpbGRfaWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY3NzX2xvb2t1cCAtIGxvb2t1cCBjc3MgYnkgaWQKKyAqIEBzczogY2dyb3VwIHN1YnN5cyB0byBiZSBsb29rZWQgaW50by4KKyAqIEBpZDogdGhlIGlkCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIGNncm91cF9zdWJzeXNfc3RhdGUgaWYgdGhlcmUgaXMgdmFsaWQgb25lIHdpdGggaWQuCisgKiBOVUxMIGlmIG5vdC4gU2hvdWxkIGJlIGNhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkKKyAqLworc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzc19sb29rdXAoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBpbnQgaWQpCit7CisJc3RydWN0IGNzc19pZCAqY3NzaWQgPSBOVUxMOworCisJQlVHX09OKCFzcy0+dXNlX2lkKTsKKwljc3NpZCA9IGlkcl9maW5kKCZzcy0+aWRyLCBpZCk7CisKKwlpZiAodW5saWtlbHkoIWNzc2lkKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKGNzc2lkLT5jc3MpOworfQorCisvKioKKyAqIGNzc19nZXRfbmV4dCAtIGxvb2t1cCBuZXh0IGNncm91cCB1bmRlciBzcGVjaWZpZWQgaGllcmFyY2h5LgorICogQHNzOiBwb2ludGVyIHRvIHN1YnN5c3RlbQorICogQGlkOiBjdXJyZW50IHBvc2l0aW9uIG9mIGl0ZXJhdGlvbi4KKyAqIEByb290OiBwb2ludGVyIHRvIGNzcy4gc2VhcmNoIHRyZWUgdW5kZXIgdGhpcy4KKyAqIEBmb3VuZGlkOiBwb3NpdGlvbiBvZiBmb3VuZCBvYmplY3QuCisgKgorICogU2VhcmNoIG5leHQgY3NzIHVuZGVyIHRoZSBzcGVjaWZpZWQgaGllcmFyY2h5IG9mIHJvb3RpZC4gQ2FsbGluZyB1bmRlcgorICogcmN1X3JlYWRfbG9jaygpIGlzIG5lY2Vzc2FyeS4gUmV0dXJucyBOVUxMIGlmIGl0IHJlYWNoZXMgdGhlIGVuZC4KKyAqLworc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKgorY3NzX2dldF9uZXh0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgaW50IGlkLAorCSAgICAgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnJvb3QsIGludCAqZm91bmRpZCkKK3sKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgY3NzX2lkICp0bXA7CisJaW50IHRtcGlkOworCWludCByb290aWQgPSBjc3NfaWQocm9vdCk7CisJaW50IGRlcHRoID0gY3NzX2RlcHRoKHJvb3QpOworCisJaWYgKCFyb290aWQpCisJCXJldHVybiBOVUxMOworCisJQlVHX09OKCFzcy0+dXNlX2lkKTsKKwkvKiBmaWxsIHN0YXJ0IHBvaW50IGZvciBzY2FuICovCisJdG1waWQgPSBpZDsKKwl3aGlsZSAoMSkgeworCQkvKgorCQkgKiBzY2FuIG5leHQgZW50cnkgZnJvbSBiaXRtYXAodHJlZSksIHRtcGlkIGlzIHVwZGF0ZWQgYWZ0ZXIKKwkJICogaWRyX2dldF9uZXh0KCkuCisJCSAqLworCQlzcGluX2xvY2soJnNzLT5pZF9sb2NrKTsKKwkJdG1wID0gaWRyX2dldF9uZXh0KCZzcy0+aWRyLCAmdG1waWQpOworCQlzcGluX3VubG9jaygmc3MtPmlkX2xvY2spOworCisJCWlmICghdG1wKQorCQkJYnJlYWs7CisJCWlmICh0bXAtPmRlcHRoID49IGRlcHRoICYmIHRtcC0+c3RhY2tbZGVwdGhdID09IHJvb3RpZCkgeworCQkJcmV0ID0gcmN1X2RlcmVmZXJlbmNlKHRtcC0+Y3NzKTsKKwkJCWlmIChyZXQpIHsKKwkJCQkqZm91bmRpZCA9IHRtcGlkOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCS8qIGNvbnRpbnVlIHRvIHNjYW4gZnJvbSBuZXh0IGlkICovCisJCXRtcGlkID0gdG1waWQgKyAxOworCX0KKwlyZXR1cm4gcmV0OworfQorCmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwX2RlYnVnLmMgYi9rZXJuZWwvY2dyb3VwX2RlYnVnLmMKaW5kZXggZGFjYTYyMC4uMGM5MmQ3OSAxMDA2NDQKLS0tIGEva2VybmVsL2Nncm91cF9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9jZ3JvdXBfZGVidWcuYwpAQCAtNDAsOSArNDAsNyBAQAogewogCXU2NCBjb3VudDsKIAotCWNncm91cF9sb2NrKCk7CiAJY291bnQgPSBjZ3JvdXBfdGFza19jb3VudChjb250KTsKLQljZ3JvdXBfdW5sb2NrKCk7CiAJcmV0dXJuIGNvdW50OwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggZjc2ZGI5ZC4uMDI2ZmFjYyAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtMTI4LDEwICsxMjgsNiBAQAogCXJldHVybiBjb250YWluZXJfb2YodGFza19zdWJzeXNfc3RhdGUodGFzaywgY3B1c2V0X3N1YnN5c19pZCksCiAJCQkgICAgc3RydWN0IGNwdXNldCwgY3NzKTsKIH0KLXN0cnVjdCBjcHVzZXRfaG90cGx1Z19zY2FubmVyIHsKLQlzdHJ1Y3QgY2dyb3VwX3NjYW5uZXIgc2NhbjsKLQlzdHJ1Y3QgY2dyb3VwICp0bzsKLX07CiAKIC8qIGJpdHMgaW4gc3RydWN0IGNwdXNldCBmbGFncyBmaWVsZCAqLwogdHlwZWRlZiBlbnVtIHsKQEAgLTUyMSw2ICs1MTcsNyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1NNUAogLyoKICAqIEhlbHBlciByb3V0aW5lIGZvciBnZW5lcmF0ZV9zY2hlZF9kb21haW5zKCkuCiAgKiBEbyBjcHVzZXRzIGEsIGIgaGF2ZSBvdmVybGFwcGluZyBjcHVzX2FsbG93ZWQgbWFza3M/CkBAIC04MTUsNiArODEyLDE4IEBACiAKIAlwdXRfb25saW5lX2NwdXMoKTsKIH0KKyNlbHNlIC8qICFDT05GSUdfU01QICovCitzdGF0aWMgdm9pZCBkb19yZWJ1aWxkX3NjaGVkX2RvbWFpbnMoc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpCit7Cit9CisKK3N0YXRpYyBpbnQgZ2VuZXJhdGVfc2NoZWRfZG9tYWlucyhzdHJ1Y3QgY3B1bWFzayAqKmRvbWFpbnMsCisJCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKiphdHRyaWJ1dGVzKQoreworCSpkb21haW5zID0gTlVMTDsKKwlyZXR1cm4gMTsKK30KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIHN0YXRpYyBERUNMQVJFX1dPUksocmVidWlsZF9zY2hlZF9kb21haW5zX3dvcmssIGRvX3JlYnVpbGRfc2NoZWRfZG9tYWlucyk7CiAKQEAgLTEwMjYsMTAxICsxMDM1LDcwIEBACiAJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiB9CiAKKy8qCisgKiBSZWJpbmQgdGFzaydzIHZtYXMgdG8gY3B1c2V0J3MgbmV3IG1lbXNfYWxsb3dlZCwgYW5kIG1pZ3JhdGUgcGFnZXMgdG8gbmV3CisgKiBub2RlcyBpZiBtZW1vcnlfbWlncmF0ZSBmbGFnIGlzIHNldC4gQ2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkIGNwdXNldF9jaGFuZ2Vfbm9kZW1hc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLAorCQkJCSAgIHN0cnVjdCBjZ3JvdXBfc2Nhbm5lciAqc2NhbikKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgY3B1c2V0ICpjczsKKwlpbnQgbWlncmF0ZTsKKwljb25zdCBub2RlbWFza190ICpvbGRtZW0gPSBzY2FuLT5kYXRhOworCisJbW0gPSBnZXRfdGFza19tbShwKTsKKwlpZiAoIW1tKQorCQlyZXR1cm47CisKKwljcyA9IGNncm91cF9jcyhzY2FuLT5jZyk7CisJbWlncmF0ZSA9IGlzX21lbW9yeV9taWdyYXRlKGNzKTsKKworCW1wb2xfcmViaW5kX21tKG1tLCAmY3MtPm1lbXNfYWxsb3dlZCk7CisJaWYgKG1pZ3JhdGUpCisJCWNwdXNldF9taWdyYXRlX21tKG1tLCBvbGRtZW0sICZjcy0+bWVtc19hbGxvd2VkKTsKKwltbXB1dChtbSk7Cit9CisKIHN0YXRpYyB2b2lkICpjcHVzZXRfYmVpbmdfcmVib3VuZDsKIAogLyoqCiAgKiB1cGRhdGVfdGFza3Nfbm9kZW1hc2sgLSBVcGRhdGUgdGhlIG5vZGVtYXNrcyBvZiB0YXNrcyBpbiB0aGUgY3B1c2V0LgogICogQGNzOiB0aGUgY3B1c2V0IGluIHdoaWNoIGVhY2ggdGFzaydzIG1lbXNfYWxsb3dlZCBtYXNrIG5lZWRzIHRvIGJlIGNoYW5nZWQKICAqIEBvbGRtZW06IG9sZCBtZW1zX2FsbG93ZWQgb2YgY3B1c2V0IGNzCisgKiBAaGVhcDogaWYgTlVMTCwgZGVmZXIgYWxsb2NhdGluZyBoZWFwIG1lbW9yeSB0byBjZ3JvdXBfc2Nhbl90YXNrcygpCiAgKgogICogQ2FsbGVkIHdpdGggY2dyb3VwX211dGV4IGhlbGQKLSAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIC1lcnJubyBpZiBub3QuCisgKiBObyByZXR1cm4gdmFsdWUuIEl0J3MgZ3VhcmFudGVlZCB0aGF0IGNncm91cF9zY2FuX3Rhc2tzKCkgYWx3YXlzIHJldHVybnMgMAorICogaWYgQGhlYXAgIT0gTlVMTC4KICAqLwotc3RhdGljIGludCB1cGRhdGVfdGFza3Nfbm9kZW1hc2soc3RydWN0IGNwdXNldCAqY3MsIGNvbnN0IG5vZGVtYXNrX3QgKm9sZG1lbSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV90YXNrc19ub2RlbWFzayhzdHJ1Y3QgY3B1c2V0ICpjcywgY29uc3Qgbm9kZW1hc2tfdCAqb2xkbWVtLAorCQkJCSBzdHJ1Y3QgcHRyX2hlYXAgKmhlYXApCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCXN0cnVjdCBtbV9zdHJ1Y3QgKiptbWFycmF5OwotCWludCBpLCBuLCBudGFza3M7Ci0JaW50IG1pZ3JhdGU7Ci0JaW50IGZ1ZGdlOwotCXN0cnVjdCBjZ3JvdXBfaXRlciBpdDsKLQlpbnQgcmV0dmFsOworCXN0cnVjdCBjZ3JvdXBfc2Nhbm5lciBzY2FuOwogCiAJY3B1c2V0X2JlaW5nX3JlYm91bmQgPSBjczsJCS8qIGNhdXNlcyBtcG9sX2R1cCgpIHJlYmluZCAqLwogCi0JZnVkZ2UgPSAxMDsJCQkJLyogc3BhcmUgbW1hcnJheVtdIHNsb3RzICovCi0JZnVkZ2UgKz0gY3B1bWFza193ZWlnaHQoY3MtPmNwdXNfYWxsb3dlZCk7LyogaW1hZ2luZSAxIGZvcmstYm9tYi9jcHUgKi8KLQlyZXR2YWwgPSAtRU5PTUVNOworCXNjYW4uY2cgPSBjcy0+Y3NzLmNncm91cDsKKwlzY2FuLnRlc3RfdGFzayA9IE5VTEw7CisJc2Nhbi5wcm9jZXNzX3Rhc2sgPSBjcHVzZXRfY2hhbmdlX25vZGVtYXNrOworCXNjYW4uaGVhcCA9IGhlYXA7CisJc2Nhbi5kYXRhID0gKG5vZGVtYXNrX3QgKilvbGRtZW07CiAKIAkvKgotCSAqIEFsbG9jYXRlIG1tYXJyYXlbXSB0byBob2xkIG1tIHJlZmVyZW5jZSBmb3IgZWFjaCB0YXNrCi0JICogaW4gY3B1c2V0IGNzLiAgQ2FuJ3Qga21hbGxvYyBHRlBfS0VSTkVMIHdoaWxlIGhvbGRpbmcKLQkgKiB0YXNrbGlzdF9sb2NrLiAgV2UgY291bGQgdXNlIEdGUF9BVE9NSUMsIGJ1dCB3aXRoIGEKLQkgKiBmZXcgbW9yZSBsaW5lcyBvZiBjb2RlLCB3ZSBjYW4gcmV0cnkgdW50aWwgd2UgZ2V0IGEgYmlnCi0JICogZW5vdWdoIG1tYXJyYXlbXSB3L28gdXNpbmcgR0ZQX0FUT01JQy4KLQkgKi8KLQl3aGlsZSAoMSkgewotCQludGFza3MgPSBjZ3JvdXBfdGFza19jb3VudChjcy0+Y3NzLmNncm91cCk7ICAvKiBndWVzcyAqLwotCQludGFza3MgKz0gZnVkZ2U7Ci0JCW1tYXJyYXkgPSBrbWFsbG9jKG50YXNrcyAqIHNpemVvZigqbW1hcnJheSksIEdGUF9LRVJORUwpOwotCQlpZiAoIW1tYXJyYXkpCi0JCQlnb3RvIGRvbmU7Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CQkvKiBibG9jayBmb3JrICovCi0JCWlmIChjZ3JvdXBfdGFza19jb3VudChjcy0+Y3NzLmNncm91cCkgPD0gbnRhc2tzKQotCQkJYnJlYWs7CQkJCS8qIGdvdCBlbm91Z2ggKi8KLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwkJLyogdHJ5IGFnYWluICovCi0JCWtmcmVlKG1tYXJyYXkpOwotCX0KLQotCW4gPSAwOwotCi0JLyogTG9hZCB1cCBtbWFycmF5W10gd2l0aCBtbSByZWZlcmVuY2UgZm9yIGVhY2ggdGFzayBpbiBjcHVzZXQuICovCi0JY2dyb3VwX2l0ZXJfc3RhcnQoY3MtPmNzcy5jZ3JvdXAsICZpdCk7Ci0Jd2hpbGUgKChwID0gY2dyb3VwX2l0ZXJfbmV4dChjcy0+Y3NzLmNncm91cCwgJml0KSkpIHsKLQkJc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0KLQkJaWYgKG4gPj0gbnRhc2tzKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJIkNwdXNldCBtZW1wb2xpY3kgcmViaW5kIGluY29tcGxldGUuXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCW1tID0gZ2V0X3Rhc2tfbW0ocCk7Ci0JCWlmICghbW0pCi0JCQljb250aW51ZTsKLQkJbW1hcnJheVtuKytdID0gbW07Ci0JfQotCWNncm91cF9pdGVyX2VuZChjcy0+Y3NzLmNncm91cCwgJml0KTsKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0KLQkvKgotCSAqIE5vdyB0aGF0IHdlJ3ZlIGRyb3BwZWQgdGhlIHRhc2tsaXN0IHNwaW5sb2NrLCB3ZSBjYW4KLQkgKiByZWJpbmQgdGhlIHZtYSBtZW1wb2xpY2llcyBvZiBlYWNoIG1tIGluIG1tYXJyYXlbXSB0byB0aGVpcgotCSAqIG5ldyBjcHVzZXQsIGFuZCByZWxlYXNlIHRoYXQgbW0uICBUaGUgbXBvbF9yZWJpbmRfbW0oKQotCSAqIGNhbGwgdGFrZXMgbW1hcF9zZW0sIHdoaWNoIHdlIGNvdWxkbid0IHRha2Ugd2hpbGUgaG9sZGluZwotCSAqIHRhc2tsaXN0X2xvY2suICBGb3JrcyBjYW4gaGFwcGVuIGFnYWluIG5vdyAtIHRoZSBtcG9sX2R1cCgpCi0JICogY3B1c2V0X2JlaW5nX3JlYm91bmQgY2hlY2sgd2lsbCBjYXRjaCBzdWNoIGZvcmtzLCBhbmQgcmViaW5kCi0JICogdGhlaXIgdm1hIG1lbXBvbGljaWVzIHRvby4gIEJlY2F1c2Ugd2Ugc3RpbGwgaG9sZCB0aGUgZ2xvYmFsCi0JICogY2dyb3VwX211dGV4LCB3ZSBrbm93IHRoYXQgbm8gb3RoZXIgcmViaW5kIGVmZm9ydCB3aWxsCi0JICogYmUgY29udGVuZGluZyBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZSBjcHVzZXRfYmVpbmdfcmVib3VuZC4KKwkgKiBUaGUgbXBvbF9yZWJpbmRfbW0oKSBjYWxsIHRha2VzIG1tYXBfc2VtLCB3aGljaCB3ZSBjb3VsZG4ndAorCSAqIHRha2Ugd2hpbGUgaG9sZGluZyB0YXNrbGlzdF9sb2NrLiAgRm9ya3MgY2FuIGhhcHBlbiAtIHRoZQorCSAqIG1wb2xfZHVwKCkgY3B1c2V0X2JlaW5nX3JlYm91bmQgY2hlY2sgd2lsbCBjYXRjaCBzdWNoIGZvcmtzLAorCSAqIGFuZCByZWJpbmQgdGhlaXIgdm1hIG1lbXBvbGljaWVzIHRvby4gIEJlY2F1c2Ugd2Ugc3RpbGwgaG9sZAorCSAqIHRoZSBnbG9iYWwgY2dyb3VwX211dGV4LCB3ZSBrbm93IHRoYXQgbm8gb3RoZXIgcmViaW5kIGVmZm9ydAorCSAqIHdpbGwgYmUgY29udGVuZGluZyBmb3IgdGhlIGdsb2JhbCB2YXJpYWJsZSBjcHVzZXRfYmVpbmdfcmVib3VuZC4KIAkgKiBJdCdzIG9rIGlmIHdlIHJlYmluZCB0aGUgc2FtZSBtbSB0d2ljZTsgbXBvbF9yZWJpbmRfbW0oKQogCSAqIGlzIGlkZW1wb3RlbnQuICBBbHNvIG1pZ3JhdGUgcGFnZXMgaW4gZWFjaCBtbSB0byBuZXcgbm9kZXMuCiAJICovCi0JbWlncmF0ZSA9IGlzX21lbW9yeV9taWdyYXRlKGNzKTsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gbW1hcnJheVtpXTsKLQotCQltcG9sX3JlYmluZF9tbShtbSwgJmNzLT5tZW1zX2FsbG93ZWQpOwotCQlpZiAobWlncmF0ZSkKLQkJCWNwdXNldF9taWdyYXRlX21tKG1tLCBvbGRtZW0sICZjcy0+bWVtc19hbGxvd2VkKTsKLQkJbW1wdXQobW0pOwotCX0KKwljZ3JvdXBfc2Nhbl90YXNrcygmc2Nhbik7CiAKIAkvKiBXZSdyZSBkb25lIHJlYmluZGluZyB2bWFzIHRvIHRoaXMgY3B1c2V0J3MgbmV3IG1lbXNfYWxsb3dlZC4gKi8KLQlrZnJlZShtbWFycmF5KTsKIAljcHVzZXRfYmVpbmdfcmVib3VuZCA9IE5VTEw7Ci0JcmV0dmFsID0gMDsKLWRvbmU6Ci0JcmV0dXJuIHJldHZhbDsKIH0KIAogLyoKQEAgLTExNDEsNiArMTExOSw3IEBACiB7CiAJbm9kZW1hc2tfdCBvbGRtZW07CiAJaW50IHJldHZhbDsKKwlzdHJ1Y3QgcHRyX2hlYXAgaGVhcDsKIAogCS8qCiAJICogdG9wX2NwdXNldC5tZW1zX2FsbG93ZWQgdHJhY2tzIG5vZGVfc3RhdHNbTl9ISUdIX01FTU9SWV07CkBAIC0xMTc1LDEyICsxMTU0LDE4IEBACiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gZG9uZTsKIAorCXJldHZhbCA9IGhlYXBfaW5pdCgmaGVhcCwgUEFHRV9TSVpFLCBHRlBfS0VSTkVMLCBOVUxMKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBkb25lOworCiAJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCWNzLT5tZW1zX2FsbG93ZWQgPSB0cmlhbGNzLT5tZW1zX2FsbG93ZWQ7CiAJY3MtPm1lbXNfZ2VuZXJhdGlvbiA9IGNwdXNldF9tZW1zX2dlbmVyYXRpb24rKzsKIAltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKIAotCXJldHZhbCA9IHVwZGF0ZV90YXNrc19ub2RlbWFzayhjcywgJm9sZG1lbSk7CisJdXBkYXRlX3Rhc2tzX25vZGVtYXNrKGNzLCAmb2xkbWVtLCAmaGVhcCk7CisKKwloZWFwX2ZyZWUoJmhlYXApOwogZG9uZToKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTE5Miw4ICsxMTc3LDEwIEBACiAKIHN0YXRpYyBpbnQgdXBkYXRlX3JlbGF4X2RvbWFpbl9sZXZlbChzdHJ1Y3QgY3B1c2V0ICpjcywgczY0IHZhbCkKIHsKKyNpZmRlZiBDT05GSUdfU01QCiAJaWYgKHZhbCA8IC0xIHx8IHZhbCA+PSBTRF9MVl9NQVgpCiAJCXJldHVybiAtRUlOVkFMOworI2VuZGlmCiAKIAlpZiAodmFsICE9IGNzLT5yZWxheF9kb21haW5fbGV2ZWwpIHsKIAkJY3MtPnJlbGF4X2RvbWFpbl9sZXZlbCA9IHZhbDsKQEAgLTEzNTUsMTkgKzEzNDIsMjIgQEAKIAkJCSAgICAgc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJc3RydWN0IGNwdXNldCAqY3MgPSBjZ3JvdXBfY3MoY29udCk7Ci0JaW50IHJldCA9IDA7CiAKIAlpZiAoY3B1bWFza19lbXB0eShjcy0+Y3B1c19hbGxvd2VkKSB8fCBub2Rlc19lbXB0eShjcy0+bWVtc19hbGxvd2VkKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKLQlpZiAodHNrLT5mbGFncyAmIFBGX1RIUkVBRF9CT1VORCkgewotCQltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7Ci0JCWlmICghY3B1bWFza19lcXVhbCgmdHNrLT5jcHVzX2FsbG93ZWQsIGNzLT5jcHVzX2FsbG93ZWQpKQotCQkJcmV0ID0gLUVJTlZBTDsKLQkJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7Ci0JfQorCS8qCisJICogS3RocmVhZHMgYm91bmQgdG8gc3BlY2lmaWMgY3B1cyBjYW5ub3QgYmUgbW92ZWQgdG8gYSBuZXcgY3B1c2V0OyB3ZQorCSAqIGNhbm5vdCBjaGFuZ2UgdGhlaXIgY3B1IGFmZmluaXR5IGFuZCBpc29sYXRpbmcgc3VjaCB0aHJlYWRzIGJ5IHRoZWlyCisJICogc2V0IG9mIGFsbG93ZWQgbm9kZXMgaXMgdW5uZWNlc3NhcnkuICBUaHVzLCBjcHVzZXRzIGFyZSBub3QKKwkgKiBhcHBsaWNhYmxlIGZvciBzdWNoIHRocmVhZHMuICBUaGlzIHByZXZlbnRzIGNoZWNraW5nIGZvciBzdWNjZXNzIG9mCisJICogc2V0X2NwdXNfYWxsb3dlZF9wdHIoKSBvbiBhbGwgYXR0YWNoZWQgdGFza3MgYmVmb3JlIGNwdXNfYWxsb3dlZCBtYXkKKwkgKiBiZSBjaGFuZ2VkLgorCSAqLworCWlmICh0c2stPmZsYWdzICYgUEZfVEhSRUFEX0JPVU5EKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiByZXQgPCAwID8gcmV0IDogc2VjdXJpdHlfdGFza19zZXRzY2hlZHVsZXIodHNrLCAwLCBOVUxMKTsKKwlyZXR1cm4gc2VjdXJpdHlfdGFza19zZXRzY2hlZHVsZXIodHNrLCAwLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQgY3B1c2V0X2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCkBAIC0xNzA2LDYgKzE2OTYsNyBAQAogCQkucmVhZF91NjQgPSBjcHVzZXRfcmVhZF91NjQsCiAJCS53cml0ZV91NjQgPSBjcHVzZXRfd3JpdGVfdTY0LAogCQkucHJpdmF0ZSA9IEZJTEVfTUVNT1JZX1BSRVNTVVJFLAorCQkubW9kZSA9IFNfSVJVR08sCiAJfSwKIAogCXsKQEAgLTE5MTMsMTAgKzE5MDQsOSBAQAogc3RhdGljIHZvaWQgY3B1c2V0X2RvX21vdmVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJCQlzdHJ1Y3QgY2dyb3VwX3NjYW5uZXIgKnNjYW4pCiB7Ci0Jc3RydWN0IGNwdXNldF9ob3RwbHVnX3NjYW5uZXIgKmNoc3A7CisJc3RydWN0IGNncm91cCAqbmV3X2Nncm91cCA9IHNjYW4tPmRhdGE7CiAKLQljaHNwID0gY29udGFpbmVyX29mKHNjYW4sIHN0cnVjdCBjcHVzZXRfaG90cGx1Z19zY2FubmVyLCBzY2FuKTsKLQljZ3JvdXBfYXR0YWNoX3Rhc2soY2hzcC0+dG8sIHRzayk7CisJY2dyb3VwX2F0dGFjaF90YXNrKG5ld19jZ3JvdXAsIHRzayk7CiB9CiAKIC8qKgpAQCAtMTkzMiwxNSArMTkyMiwxNSBAQAogICovCiBzdGF0aWMgdm9pZCBtb3ZlX21lbWJlcl90YXNrc190b19jcHVzZXQoc3RydWN0IGNwdXNldCAqZnJvbSwgc3RydWN0IGNwdXNldCAqdG8pCiB7Ci0Jc3RydWN0IGNwdXNldF9ob3RwbHVnX3NjYW5uZXIgc2NhbjsKKwlzdHJ1Y3QgY2dyb3VwX3NjYW5uZXIgc2NhbjsKIAotCXNjYW4uc2Nhbi5jZyA9IGZyb20tPmNzcy5jZ3JvdXA7Ci0Jc2Nhbi5zY2FuLnRlc3RfdGFzayA9IE5VTEw7IC8qIHNlbGVjdCBhbGwgdGFza3MgaW4gY2dyb3VwICovCi0Jc2Nhbi5zY2FuLnByb2Nlc3NfdGFzayA9IGNwdXNldF9kb19tb3ZlX3Rhc2s7Ci0Jc2Nhbi5zY2FuLmhlYXAgPSBOVUxMOwotCXNjYW4udG8gPSB0by0+Y3NzLmNncm91cDsKKwlzY2FuLmNnID0gZnJvbS0+Y3NzLmNncm91cDsKKwlzY2FuLnRlc3RfdGFzayA9IE5VTEw7IC8qIHNlbGVjdCBhbGwgdGFza3MgaW4gY2dyb3VwICovCisJc2Nhbi5wcm9jZXNzX3Rhc2sgPSBjcHVzZXRfZG9fbW92ZV90YXNrOworCXNjYW4uaGVhcCA9IE5VTEw7CisJc2Nhbi5kYXRhID0gdG8tPmNzcy5jZ3JvdXA7CiAKLQlpZiAoY2dyb3VwX3NjYW5fdGFza3MoJnNjYW4uc2NhbikpCisJaWYgKGNncm91cF9zY2FuX3Rhc2tzKCZzY2FuKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJtb3ZlX21lbWJlcl90YXNrc190b19jcHVzZXQ6ICIKIAkJCQkiY2dyb3VwX3NjYW5fdGFza3MgZmFpbGVkXG4iKTsKIH0KQEAgLTIwMzMsNyArMjAyMyw3IEBACiAJCQlyZW1vdmVfdGFza3NfaW5fZW1wdHlfY3B1c2V0KGNwKTsKIAkJZWxzZSB7CiAJCQl1cGRhdGVfdGFza3NfY3B1bWFzayhjcCwgTlVMTCk7Ci0JCQl1cGRhdGVfdGFza3Nfbm9kZW1hc2soY3AsICZvbGRtZW1zKTsKKwkJCXVwZGF0ZV90YXNrc19ub2RlbWFzayhjcCwgJm9sZG1lbXMsIE5VTEwpOwogCQl9CiAJfQogfQpAQCAtMjA2OSw3ICsyMDU5LDkgQEAKIAl9CiAKIAljZ3JvdXBfbG9jaygpOworCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKIAljcHVtYXNrX2NvcHkodG9wX2NwdXNldC5jcHVzX2FsbG93ZWQsIGNwdV9vbmxpbmVfbWFzayk7CisJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAJc2Nhbl9mb3JfZW1wdHlfY3B1c2V0cygmdG9wX2NwdXNldCk7CiAJbmRvbXMgPSBnZW5lcmF0ZV9zY2hlZF9kb21haW5zKCZkb21zLCAmYXR0cik7CiAJY2dyb3VwX3VubG9jaygpOwpAQCAtMjA5MiwxMSArMjA4NCwxMiBAQAogCWNncm91cF9sb2NrKCk7CiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIE1FTV9PTkxJTkU6Ci0JCXRvcF9jcHVzZXQubWVtc19hbGxvd2VkID0gbm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV07Ci0JCWJyZWFrOwogCWNhc2UgTUVNX09GRkxJTkU6CisJCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKIAkJdG9wX2NwdXNldC5tZW1zX2FsbG93ZWQgPSBub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXTsKLQkJc2Nhbl9mb3JfZW1wdHlfY3B1c2V0cygmdG9wX2NwdXNldCk7CisJCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOworCQlpZiAoYWN0aW9uID09IE1FTV9PRkZMSU5FKQorCQkJc2Nhbl9mb3JfZW1wdHlfY3B1c2V0cygmdG9wX2NwdXNldCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMjIwNiwyNiArMjE5OSwyNCBAQAogfQogCiAvKioKLSAqIGNwdXNldF96b25lX2FsbG93ZWRfc29mdHdhbGwgLSBDYW4gd2UgYWxsb2NhdGUgb24gem9uZSB6J3MgbWVtb3J5IG5vZGU/Ci0gKiBAejogaXMgdGhpcyB6b25lIG9uIGFuIGFsbG93ZWQgbm9kZT8KKyAqIGNwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwgLSBDYW4gd2UgYWxsb2NhdGUgb24gYSBtZW1vcnkgbm9kZT8KKyAqIEBub2RlOiBpcyB0aGlzIGFuIGFsbG93ZWQgbm9kZT8KICAqIEBnZnBfbWFzazogbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MKICAqCi0gKiBJZiB3ZSdyZSBpbiBpbnRlcnJ1cHQsIHllcywgd2UgY2FuIGFsd2F5cyBhbGxvY2F0ZS4gIElmCi0gKiBfX0dGUF9USElTTk9ERSBpcyBzZXQsIHllcywgd2UgY2FuIGFsd2F5cyBhbGxvY2F0ZS4gIElmIHpvbmUKLSAqIHoncyBub2RlIGlzIGluIG91ciB0YXNrcyBtZW1zX2FsbG93ZWQsIHllcy4gIElmIGl0J3Mgbm90IGEKLSAqIF9fR0ZQX0hBUkRXQUxMIHJlcXVlc3QgYW5kIHRoaXMgem9uZSdzIG5vZGVzIGlzIGluIHRoZSBuZWFyZXN0Ci0gKiBoYXJkd2FsbGVkIGNwdXNldCBhbmNlc3RvciB0byB0aGlzIHRhc2tzIGNwdXNldCwgeWVzLgotICogSWYgdGhlIHRhc2sgaGFzIGJlZW4gT09NIGtpbGxlZCBhbmQgaGFzIGFjY2VzcyB0byBtZW1vcnkgcmVzZXJ2ZXMKLSAqIGFzIHNwZWNpZmllZCBieSB0aGUgVElGX01FTURJRSBmbGFnLCB5ZXMuCisgKiBJZiB3ZSdyZSBpbiBpbnRlcnJ1cHQsIHllcywgd2UgY2FuIGFsd2F5cyBhbGxvY2F0ZS4gIElmIF9fR0ZQX1RISVNOT0RFIGlzCisgKiBzZXQsIHllcywgd2UgY2FuIGFsd2F5cyBhbGxvY2F0ZS4gIElmIG5vZGUgaXMgaW4gb3VyIHRhc2sncyBtZW1zX2FsbG93ZWQsCisgKiB5ZXMuICBJZiBpdCdzIG5vdCBhIF9fR0ZQX0hBUkRXQUxMIHJlcXVlc3QgYW5kIHRoaXMgbm9kZSBpcyBpbiB0aGUgbmVhcmVzdAorICogaGFyZHdhbGxlZCBjcHVzZXQgYW5jZXN0b3IgdG8gdGhpcyB0YXNrJ3MgY3B1c2V0LCB5ZXMuICBJZiB0aGUgdGFzayBoYXMgYmVlbgorICogT09NIGtpbGxlZCBhbmQgaGFzIGFjY2VzcyB0byBtZW1vcnkgcmVzZXJ2ZXMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBUSUZfTUVNRElFCisgKiBmbGFnLCB5ZXMuCiAgKiBPdGhlcndpc2UsIG5vLgogICoKLSAqIElmIF9fR0ZQX0hBUkRXQUxMIGlzIHNldCwgY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbCgpCi0gKiByZWR1Y2VzIHRvIGNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoKS4gIE90aGVyd2lzZSwKLSAqIGNwdXNldF96b25lX2FsbG93ZWRfc29mdHdhbGwoKSBtaWdodCBzbGVlcCwgYW5kIG1pZ2h0IGFsbG93IGEgem9uZQotICogZnJvbSBhbiBlbmNsb3NpbmcgY3B1c2V0LgorICogSWYgX19HRlBfSEFSRFdBTEwgaXMgc2V0LCBjcHVzZXRfbm9kZV9hbGxvd2VkX3NvZnR3YWxsKCkgcmVkdWNlcyB0bworICogY3B1c2V0X25vZGVfYWxsb3dlZF9oYXJkd2FsbCgpLiAgT3RoZXJ3aXNlLCBjcHVzZXRfbm9kZV9hbGxvd2VkX3NvZnR3YWxsKCkKKyAqIG1pZ2h0IHNsZWVwLCBhbmQgbWlnaHQgYWxsb3cgYSBub2RlIGZyb20gYW4gZW5jbG9zaW5nIGNwdXNldC4KICAqCi0gKiBjcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKCkgb25seSBoYW5kbGVzIHRoZSBzaW1wbGVyIGNhc2Ugb2YKLSAqIGhhcmR3YWxsIGNwdXNldHMsIGFuZCBuZXZlciBzbGVlcHMuCisgKiBjcHVzZXRfbm9kZV9hbGxvd2VkX2hhcmR3YWxsKCkgb25seSBoYW5kbGVzIHRoZSBzaW1wbGVyIGNhc2Ugb2YgaGFyZHdhbGwKKyAqIGNwdXNldHMsIGFuZCBuZXZlciBzbGVlcHMuCiAgKgogICogVGhlIF9fR0ZQX1RISVNOT0RFIHBsYWNlbWVudCBsb2dpYyBpcyByZWFsbHkgaGFuZGxlZCBlbHNld2hlcmUsCiAgKiBieSBmb3JjaWJseSB1c2luZyBhIHpvbmVsaXN0IHN0YXJ0aW5nIGF0IGEgc3BlY2lmaWVkIG5vZGUsIGFuZCBieQpAQCAtMjI2NCwyMCArMjI1NSwxNyBAQAogICoJR0ZQX1VTRVIgICAgIC0gb25seSBub2RlcyBpbiBjdXJyZW50IHRhc2tzIG1lbXMgYWxsb3dlZCBvay4KICAqCiAgKiBSdWxlOgotICogICAgRG9uJ3QgY2FsbCBjcHVzZXRfem9uZV9hbGxvd2VkX3NvZnR3YWxsIGlmIHlvdSBjYW4ndCBzbGVlcCwgdW5sZXNzIHlvdQorICogICAgRG9uJ3QgY2FsbCBjcHVzZXRfbm9kZV9hbGxvd2VkX3NvZnR3YWxsIGlmIHlvdSBjYW4ndCBzbGVlcCwgdW5sZXNzIHlvdQogICogICAgcGFzcyBpbiB0aGUgX19HRlBfSEFSRFdBTEwgZmxhZyBzZXQgaW4gZ2ZwX2ZsYWcsIHdoaWNoIGRpc2FibGVzCiAgKiAgICB0aGUgY29kZSB0aGF0IG1pZ2h0IHNjYW4gdXAgYW5jZXN0b3IgY3B1c2V0cyBhbmQgc2xlZXAuCiAgKi8KLQotaW50IF9fY3B1c2V0X3pvbmVfYWxsb3dlZF9zb2Z0d2FsbChzdHJ1Y3Qgem9uZSAqeiwgZ2ZwX3QgZ2ZwX21hc2spCitpbnQgX19jcHVzZXRfbm9kZV9hbGxvd2VkX3NvZnR3YWxsKGludCBub2RlLCBnZnBfdCBnZnBfbWFzaykKIHsKLQlpbnQgbm9kZTsJCQkvKiBub2RlIHRoYXQgem9uZSB6IGlzIG9uICovCiAJY29uc3Qgc3RydWN0IGNwdXNldCAqY3M7CS8qIGN1cnJlbnQgY3B1c2V0IGFuY2VzdG9ycyAqLwogCWludCBhbGxvd2VkOwkJCS8qIGlzIGFsbG9jYXRpb24gaW4gem9uZSB6IGFsbG93ZWQ/ICovCiAKIAlpZiAoaW5faW50ZXJydXB0KCkgfHwgKGdmcF9tYXNrICYgX19HRlBfVEhJU05PREUpKQogCQlyZXR1cm4gMTsKLQlub2RlID0gem9uZV90b19uaWQoeik7CiAJbWlnaHRfc2xlZXBfaWYoIShnZnBfbWFzayAmIF9fR0ZQX0hBUkRXQUxMKSk7CiAJaWYgKG5vZGVfaXNzZXQobm9kZSwgY3VycmVudC0+bWVtc19hbGxvd2VkKSkKIAkJcmV0dXJuIDE7CkBAIC0yMzA2LDE1ICsyMjk0LDE1IEBACiB9CiAKIC8qCi0gKiBjcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsIC0gQ2FuIHdlIGFsbG9jYXRlIG9uIHpvbmUgeidzIG1lbW9yeSBub2RlPwotICogQHo6IGlzIHRoaXMgem9uZSBvbiBhbiBhbGxvd2VkIG5vZGU/CisgKiBjcHVzZXRfbm9kZV9hbGxvd2VkX2hhcmR3YWxsIC0gQ2FuIHdlIGFsbG9jYXRlIG9uIGEgbWVtb3J5IG5vZGU/CisgKiBAbm9kZTogaXMgdGhpcyBhbiBhbGxvd2VkIG5vZGU/CiAgKiBAZ2ZwX21hc2s6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKgotICogSWYgd2UncmUgaW4gaW50ZXJydXB0LCB5ZXMsIHdlIGNhbiBhbHdheXMgYWxsb2NhdGUuCi0gKiBJZiBfX0dGUF9USElTTk9ERSBpcyBzZXQsIHllcywgd2UgY2FuIGFsd2F5cyBhbGxvY2F0ZS4gIElmIHpvbmUKLSAqIHoncyBub2RlIGlzIGluIG91ciB0YXNrcyBtZW1zX2FsbG93ZWQsIHllcy4gICBJZiB0aGUgdGFzayBoYXMgYmVlbgotICogT09NIGtpbGxlZCBhbmQgaGFzIGFjY2VzcyB0byBtZW1vcnkgcmVzZXJ2ZXMgYXMgc3BlY2lmaWVkIGJ5IHRoZQotICogVElGX01FTURJRSBmbGFnLCB5ZXMuICBPdGhlcndpc2UsIG5vLgorICogSWYgd2UncmUgaW4gaW50ZXJydXB0LCB5ZXMsIHdlIGNhbiBhbHdheXMgYWxsb2NhdGUuICBJZiBfX0dGUF9USElTTk9ERSBpcworICogc2V0LCB5ZXMsIHdlIGNhbiBhbHdheXMgYWxsb2NhdGUuICBJZiBub2RlIGlzIGluIG91ciB0YXNrJ3MgbWVtc19hbGxvd2VkLAorICogeWVzLiAgSWYgdGhlIHRhc2sgaGFzIGJlZW4gT09NIGtpbGxlZCBhbmQgaGFzIGFjY2VzcyB0byBtZW1vcnkgcmVzZXJ2ZXMgYXMKKyAqIHNwZWNpZmllZCBieSB0aGUgVElGX01FTURJRSBmbGFnLCB5ZXMuCisgKiBPdGhlcndpc2UsIG5vLgogICoKICAqIFRoZSBfX0dGUF9USElTTk9ERSBwbGFjZW1lbnQgbG9naWMgaXMgcmVhbGx5IGhhbmRsZWQgZWxzZXdoZXJlLAogICogYnkgZm9yY2libHkgdXNpbmcgYSB6b25lbGlzdCBzdGFydGluZyBhdCBhIHNwZWNpZmllZCBub2RlLCBhbmQgYnkKQEAgLTIzMjIsMjAgKzIzMTAsMTYgQEAKICAqIGFueSBub2RlIG9uIHRoZSB6b25lbGlzdCBleGNlcHQgdGhlIGZpcnN0LiAgQnkgdGhlIHRpbWUgYW55IHN1Y2gKICAqIGNhbGxzIGdldCB0byB0aGlzIHJvdXRpbmUsIHdlIHNob3VsZCBqdXN0IHNodXQgdXAgYW5kIHNheSAneWVzJy4KICAqCi0gKiBVbmxpa2UgdGhlIGNwdXNldF96b25lX2FsbG93ZWRfc29mdHdhbGwoKSB2YXJpYW50LCBhYm92ZSwKLSAqIHRoaXMgdmFyaWFudCByZXF1aXJlcyB0aGF0IHRoZSB6b25lIGJlIGluIHRoZSBjdXJyZW50IHRhc2tzCisgKiBVbmxpa2UgdGhlIGNwdXNldF9ub2RlX2FsbG93ZWRfc29mdHdhbGwoKSB2YXJpYW50LCBhYm92ZSwKKyAqIHRoaXMgdmFyaWFudCByZXF1aXJlcyB0aGF0IHRoZSBub2RlIGJlIGluIHRoZSBjdXJyZW50IHRhc2sncwogICogbWVtc19hbGxvd2VkIG9yIHRoYXQgd2UncmUgaW4gaW50ZXJydXB0LiAgSXQgZG9lcyBub3Qgc2NhbiB1cCB0aGUKICAqIGNwdXNldCBoaWVyYXJjaHkgZm9yIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBtZW1fZXhjbHVzaXZlIGNwdXNldC4KICAqIEl0IG5ldmVyIHNsZWVwcy4KICAqLwotCi1pbnQgX19jcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHN0cnVjdCB6b25lICp6LCBnZnBfdCBnZnBfbWFzaykKK2ludCBfX2NwdXNldF9ub2RlX2FsbG93ZWRfaGFyZHdhbGwoaW50IG5vZGUsIGdmcF90IGdmcF9tYXNrKQogewotCWludCBub2RlOwkJCS8qIG5vZGUgdGhhdCB6b25lIHogaXMgb24gKi8KLQogCWlmIChpbl9pbnRlcnJ1cHQoKSB8fCAoZ2ZwX21hc2sgJiBfX0dGUF9USElTTk9ERSkpCiAJCXJldHVybiAxOwotCW5vZGUgPSB6b25lX3RvX25pZCh6KTsKIAlpZiAobm9kZV9pc3NldChub2RlLCBjdXJyZW50LT5tZW1zX2FsbG93ZWQpKQogCQlyZXR1cm4gMTsKIAkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2V4ZWNfZG9tYWluLmMgYi9rZXJuZWwvZXhlY19kb21haW4uYwppbmRleCA2NjdjODQxLi5jMzU0NTJjIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhlY19kb21haW4uYworKysgYi9rZXJuZWwvZXhlY19kb21haW4uYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KIAogCiBzdGF0aWMgdm9pZCBkZWZhdWx0X2hhbmRsZXIoaW50LCBzdHJ1Y3QgcHRfcmVncyAqKTsKQEAgLTE0NSwyOCArMTQ2LDYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGF0b21pY19yZWFkKCZjdXJyZW50LT5mcy0+Y291bnQpICE9IDEpIHsKLQkJc3RydWN0IGZzX3N0cnVjdCAqZnNwLCAqb2ZzcDsKLQotCQlmc3AgPSBjb3B5X2ZzX3N0cnVjdChjdXJyZW50LT5mcyk7Ci0JCWlmIChmc3AgPT0gTlVMTCkgewotCQkJbW9kdWxlX3B1dChlcC0+bW9kdWxlKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJdGFza19sb2NrKGN1cnJlbnQpOwotCQlvZnNwID0gY3VycmVudC0+ZnM7Ci0JCWN1cnJlbnQtPmZzID0gZnNwOwotCQl0YXNrX3VubG9jayhjdXJyZW50KTsKLQotCQlwdXRfZnNfc3RydWN0KG9mc3ApOwotCX0KLQotCS8qCi0JICogQXQgdGhhdCBwb2ludCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBiZSB0aGUgc29sZSBvd25lciBvZgotCSAqIGN1cnJlbnQtPmZzLgotCSAqLwotCiAJY3VycmVudC0+cGVyc29uYWxpdHkgPSBwZXJzb25hbGl0eTsKIAlvZXAgPSBjdXJyZW50X3RocmVhZF9pbmZvKCktPmV4ZWNfZG9tYWluOwogCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZXhlY19kb21haW4gPSBlcDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDE2N2UxZTMuLjY2ODZlZDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaD4KICNpbmNsdWRlIDxsaW51eC90cmFjZWhvb2suaD4KKyNpbmNsdWRlIDxsaW51eC9mc19zdHJ1Y3QuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0X3Rhc2suaD4KICNpbmNsdWRlIDx0cmFjZS9zY2hlZC5oPgogCkBAIC02MSwxMSArNjIsNiBAQAogCiBzdGF0aWMgdm9pZCBleGl0X21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzayk7CiAKLXN0YXRpYyBpbmxpbmUgaW50IHRhc2tfZGV0YWNoZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQotewotCXJldHVybiBwLT5leGl0X3NpZ25hbCA9PSAtMTsKLX0KLQogc3RhdGljIHZvaWQgX191bmhhc2hfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJbnJfdGhyZWFkcy0tOwpAQCAtMzYyLDE2ICszNTgsMTIgQEAKIHZvaWQgX19zZXRfc3BlY2lhbF9waWRzKHN0cnVjdCBwaWQgKnBpZCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIgPSBjdXJyZW50LT5ncm91cF9sZWFkZXI7Ci0JcGlkX3QgbnIgPSBwaWRfbnIocGlkKTsKIAotCWlmICh0YXNrX3Nlc3Npb24oY3VycikgIT0gcGlkKSB7CisJaWYgKHRhc2tfc2Vzc2lvbihjdXJyKSAhPSBwaWQpCiAJCWNoYW5nZV9waWQoY3VyciwgUElEVFlQRV9TSUQsIHBpZCk7Ci0JCXNldF90YXNrX3Nlc3Npb24oY3VyciwgbnIpOwotCX0KLQlpZiAodGFza19wZ3JwKGN1cnIpICE9IHBpZCkgeworCisJaWYgKHRhc2tfcGdycChjdXJyKSAhPSBwaWQpCiAJCWNoYW5nZV9waWQoY3VyciwgUElEVFlQRV9QR0lELCBwaWQpOwotCQlzZXRfdGFza19wZ3JwKGN1cnIsIG5yKTsKLQl9CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9zcGVjaWFsX3BpZHMoc3RydWN0IHBpZCAqcGlkKQpAQCAtNDI5LDcgKzQyMSw2IEBACiB2b2lkIGRhZW1vbml6ZShjb25zdCBjaGFyICpuYW1lLCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwotCXN0cnVjdCBmc19zdHJ1Y3QgKmZzOwogCXNpZ3NldF90IGJsb2NrZWQ7CiAKIAl2YV9zdGFydChhcmdzLCBuYW1lKTsKQEAgLTQ2MiwxMSArNDUzLDcgQEAKIAogCS8qIEJlY29tZSBhcyBvbmUgd2l0aCB0aGUgaW5pdCB0YXNrICovCiAKLQlleGl0X2ZzKGN1cnJlbnQpOwkvKiBjdXJyZW50LT5mcy0+Y291bnQtLTsgKi8KLQlmcyA9IGluaXRfdGFzay5mczsKLQljdXJyZW50LT5mcyA9IGZzOwotCWF0b21pY19pbmMoJmZzLT5jb3VudCk7Ci0KKwlkYWVtb25pemVfZnNfc3RydWN0KCk7CiAJZXhpdF9maWxlcyhjdXJyZW50KTsKIAljdXJyZW50LT5maWxlcyA9IGluaXRfdGFzay5maWxlczsKIAlhdG9taWNfaW5jKCZjdXJyZW50LT5maWxlcy0+Y291bnQpOwpAQCAtNTY1LDMwICs1NTIsNiBAQAogCX0KIH0KIAotdm9pZCBwdXRfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKmZzKQotewotCS8qIE5vIG5lZWQgdG8gaG9sZCBmcy0+bG9jayBpZiB3ZSBhcmUga2lsbGluZyBpdCAqLwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZmcy0+Y291bnQpKSB7Ci0JCXBhdGhfcHV0KCZmcy0+cm9vdCk7Ci0JCXBhdGhfcHV0KCZmcy0+cHdkKTsKLQkJa21lbV9jYWNoZV9mcmVlKGZzX2NhY2hlcCwgZnMpOwotCX0KLX0KLQotdm9pZCBleGl0X2ZzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCXN0cnVjdCBmc19zdHJ1Y3QgKiBmcyA9IHRzay0+ZnM7Ci0KLQlpZiAoZnMpIHsKLQkJdGFza19sb2NrKHRzayk7Ci0JCXRzay0+ZnMgPSBOVUxMOwotCQl0YXNrX3VubG9jayh0c2spOwotCQlwdXRfZnNfc3RydWN0KGZzKTsKLQl9Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGV4aXRfZnMpOwotCiAjaWZkZWYgQ09ORklHX01NX09XTkVSCiAvKgogICogVGFzayBwIGlzIGV4aXRpbmcgYW5kIGl0IG93bmVkIG1tLCBsZXRzIGZpbmQgYSBuZXcgb3duZXIgZm9yIGl0CkBAIC03MzIsMTE5ICs2OTUsNiBAQAogfQogCiAvKgotICogUmV0dXJuIG5vbnplcm8gaWYgQHBhcmVudCdzIGNoaWxkcmVuIHNob3VsZCByZWFwIHRoZW1zZWx2ZXMuCi0gKgotICogQ2FsbGVkIHdpdGggd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spIGhlbGQuCi0gKi8KLXN0YXRpYyBpbnQgaWdub3JpbmdfY2hpbGRyZW4oc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc2lnaGFuZF9zdHJ1Y3QgKnBzaWcgPSBwYXJlbnQtPnNpZ2hhbmQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHNpZy0+c2lnbG9jaywgZmxhZ3MpOwotCXJldCA9IChwc2lnLT5hY3Rpb25bU0lHQ0hMRC0xXS5zYS5zYV9oYW5kbGVyID09IFNJR19JR04gfHwKLQkgICAgICAgKHBzaWctPmFjdGlvbltTSUdDSExELTFdLnNhLnNhX2ZsYWdzICYgU0FfTk9DTERXQUlUKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHNpZy0+c2lnbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBEZXRhY2ggYWxsIHRhc2tzIHdlIHdlcmUgdXNpbmcgcHRyYWNlIG9uLgotICogQW55IHRoYXQgbmVlZCB0byBiZSByZWxlYXNlX3Rhc2snZCBhcmUgcHV0IG9uIHRoZSBAZGVhZCBsaXN0LgotICoKLSAqIENhbGxlZCB3aXRoIHdyaXRlX2xvY2soJnRhc2tsaXN0X2xvY2spIGhlbGQuCi0gKi8KLXN0YXRpYyB2b2lkIHB0cmFjZV9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LCBzdHJ1Y3QgbGlzdF9oZWFkICpkZWFkKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm47Ci0JaW50IGlnbiA9IC0xOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZwYXJlbnQtPnB0cmFjZWQsIHB0cmFjZV9lbnRyeSkgewotCQlfX3B0cmFjZV91bmxpbmsocCk7Ci0KLQkJaWYgKHAtPmV4aXRfc3RhdGUgIT0gRVhJVF9aT01CSUUpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBJZiBpdCdzIGEgem9tYmllLCBvdXIgYXR0YWNoZWRuZXNzIHByZXZlbnRlZCBub3JtYWwKLQkJICogcGFyZW50IG5vdGlmaWNhdGlvbiBvciBzZWxmLXJlYXBpbmcuICBEbyBub3RpZmljYXRpb24KLQkJICogbm93IGlmIGl0IHdvdWxkIGhhdmUgaGFwcGVuZWQgZWFybGllci4gIElmIGl0IHNob3VsZAotCQkgKiByZWFwIGl0c2VsZiwgYWRkIGl0IHRvIHRoZSBAZGVhZCBsaXN0LiAgV2UgY2FuJ3QgY2FsbAotCQkgKiByZWxlYXNlX3Rhc2soKSBoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSBob2xkIHRhc2tsaXN0X2xvY2suCi0JCSAqCi0JCSAqIElmIGl0J3Mgb3VyIG93biBjaGlsZCwgdGhlcmUgaXMgbm8gbm90aWZpY2F0aW9uIHRvIGRvLgotCQkgKiBCdXQgaWYgb3VyIG5vcm1hbCBjaGlsZHJlbiBzZWxmLXJlYXAsIHRoZW4gdGhpcyBjaGlsZAotCQkgKiB3YXMgcHJldmVudGVkIGJ5IHB0cmFjZSBhbmQgd2UgbXVzdCByZWFwIGl0IG5vdy4KLQkJICovCi0JCWlmICghdGFza19kZXRhY2hlZChwKSAmJiB0aHJlYWRfZ3JvdXBfZW1wdHkocCkpIHsKLQkJCWlmICghc2FtZV90aHJlYWRfZ3JvdXAocC0+cmVhbF9wYXJlbnQsIHBhcmVudCkpCi0JCQkJZG9fbm90aWZ5X3BhcmVudChwLCBwLT5leGl0X3NpZ25hbCk7Ci0JCQllbHNlIHsKLQkJCQlpZiAoaWduIDwgMCkKLQkJCQkJaWduID0gaWdub3JpbmdfY2hpbGRyZW4ocGFyZW50KTsKLQkJCQlpZiAoaWduKQotCQkJCQlwLT5leGl0X3NpZ25hbCA9IC0xOwotCQkJfQotCQl9Ci0KLQkJaWYgKHRhc2tfZGV0YWNoZWQocCkpIHsKLQkJCS8qCi0JCQkgKiBNYXJrIGl0IGFzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHJlYXBlZC4KLQkJCSAqLwotCQkJcC0+ZXhpdF9zdGF0ZSA9IEVYSVRfREVBRDsKLQkJCWxpc3RfYWRkKCZwLT5wdHJhY2VfZW50cnksIGRlYWQpOwotCQl9Ci0JfQotfQotCi0vKgotICogRmluaXNoIHVwIGV4aXQtdGltZSBwdHJhY2UgY2xlYW51cC4KLSAqCi0gKiBDYWxsZWQgd2l0aG91dCBsb2Nrcy4KLSAqLwotc3RhdGljIHZvaWQgcHRyYWNlX2V4aXRfZmluaXNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqcGFyZW50LAotCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRlYWQpCi17Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbjsKLQotCUJVR19PTighbGlzdF9lbXB0eSgmcGFyZW50LT5wdHJhY2VkKSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgZGVhZCwgcHRyYWNlX2VudHJ5KSB7Ci0JCWxpc3RfZGVsX2luaXQoJnAtPnB0cmFjZV9lbnRyeSk7Ci0JCXJlbGVhc2VfdGFzayhwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcGFyZW50X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqZmF0aGVyKQotewotCWlmIChwLT5wZGVhdGhfc2lnbmFsKQotCQkvKiBXZSBhbHJlYWR5IGhvbGQgdGhlIHRhc2tsaXN0X2xvY2sgaGVyZS4gICovCi0JCWdyb3VwX3NlbmRfc2lnX2luZm8ocC0+cGRlYXRoX3NpZ25hbCwgU0VORF9TSUdfTk9JTkZPLCBwKTsKLQotCWxpc3RfbW92ZV90YWlsKCZwLT5zaWJsaW5nLCAmcC0+cmVhbF9wYXJlbnQtPmNoaWxkcmVuKTsKLQotCS8qIElmIHRoaXMgaXMgYSB0aHJlYWRlZCByZXBhcmVudCB0aGVyZSBpcyBubyBuZWVkIHRvCi0JICogbm90aWZ5IGFueW9uZSBhbnl0aGluZyBoYXMgaGFwcGVuZWQuCi0JICovCi0JaWYgKHNhbWVfdGhyZWFkX2dyb3VwKHAtPnJlYWxfcGFyZW50LCBmYXRoZXIpKQotCQlyZXR1cm47Ci0KLQkvKiBXZSBkb24ndCB3YW50IHBlb3BsZSBzbGF5aW5nIGluaXQuICAqLwotCWlmICghdGFza19kZXRhY2hlZChwKSkKLQkJcC0+ZXhpdF9zaWduYWwgPSBTSUdDSExEOwotCi0JLyogSWYgd2UnZCBub3RpZmllZCB0aGUgb2xkIHBhcmVudCBhYm91dCB0aGlzIGNoaWxkJ3MgZGVhdGgsCi0JICogYWxzbyBub3RpZnkgdGhlIG5ldyBwYXJlbnQuCi0JICovCi0JaWYgKCFwdHJhY2VfcmVwYXJlbnRlZChwKSAmJgotCSAgICBwLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFICYmCi0JICAgICF0YXNrX2RldGFjaGVkKHApICYmIHRocmVhZF9ncm91cF9lbXB0eShwKSkKLQkJZG9fbm90aWZ5X3BhcmVudChwLCBwLT5leGl0X3NpZ25hbCk7Ci0KLQlraWxsX29ycGhhbmVkX3BncnAocCwgZmF0aGVyKTsKLX0KLQotLyoKICAqIFdoZW4gd2UgZGllLCB3ZSByZS1wYXJlbnQgYWxsIG91ciBjaGlsZHJlbi4KICAqIFRyeSB0byBnaXZlIHRoZW0gdG8gYW5vdGhlciB0aHJlYWQgaW4gb3VyIHRocmVhZAogICogZ3JvdXAsIGFuZCBpZiBubyBzdWNoIG1lbWJlciBleGlzdHMsIGdpdmUgaXQgdG8KQEAgLTg4MywxNyArNzMzLDUxIEBACiAJcmV0dXJuIHBpZF9ucy0+Y2hpbGRfcmVhcGVyOwogfQogCisvKgorKiBBbnkgdGhhdCBuZWVkIHRvIGJlIHJlbGVhc2VfdGFzaydkIGFyZSBwdXQgb24gdGhlIEBkZWFkIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkIHJlcGFyZW50X3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZhdGhlciwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmRlYWQpCit7CisJaWYgKHAtPnBkZWF0aF9zaWduYWwpCisJCWdyb3VwX3NlbmRfc2lnX2luZm8ocC0+cGRlYXRoX3NpZ25hbCwgU0VORF9TSUdfTk9JTkZPLCBwKTsKKworCWxpc3RfbW92ZV90YWlsKCZwLT5zaWJsaW5nLCAmcC0+cmVhbF9wYXJlbnQtPmNoaWxkcmVuKTsKKworCWlmICh0YXNrX2RldGFjaGVkKHApKQorCQlyZXR1cm47CisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgdGhyZWFkZWQgcmVwYXJlbnQgdGhlcmUgaXMgbm8gbmVlZCB0bworCSAqIG5vdGlmeSBhbnlvbmUgYW55dGhpbmcgaGFzIGhhcHBlbmVkLgorCSAqLworCWlmIChzYW1lX3RocmVhZF9ncm91cChwLT5yZWFsX3BhcmVudCwgZmF0aGVyKSkKKwkJcmV0dXJuOworCisJLyogV2UgZG9uJ3Qgd2FudCBwZW9wbGUgc2xheWluZyBpbml0LiAgKi8KKwlwLT5leGl0X3NpZ25hbCA9IFNJR0NITEQ7CisKKwkvKiBJZiBpdCBoYXMgZXhpdGVkIG5vdGlmeSB0aGUgbmV3IHBhcmVudCBhYm91dCB0aGlzIGNoaWxkJ3MgZGVhdGguICovCisJaWYgKCFwLT5wdHJhY2UgJiYKKwkgICAgcC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSAmJiB0aHJlYWRfZ3JvdXBfZW1wdHkocCkpIHsKKwkJZG9fbm90aWZ5X3BhcmVudChwLCBwLT5leGl0X3NpZ25hbCk7CisJCWlmICh0YXNrX2RldGFjaGVkKHApKSB7CisJCQlwLT5leGl0X3N0YXRlID0gRVhJVF9ERUFEOworCQkJbGlzdF9tb3ZlX3RhaWwoJnAtPnNpYmxpbmcsIGRlYWQpOworCQl9CisJfQorCisJa2lsbF9vcnBoYW5lZF9wZ3JwKHAsIGZhdGhlcik7Cit9CisKIHN0YXRpYyB2b2lkIGZvcmdldF9vcmlnaW5hbF9wYXJlbnQoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwLCAqbiwgKnJlYXBlcjsKLQlMSVNUX0hFQUQocHRyYWNlX2RlYWQpOworCUxJU1RfSEVBRChkZWFkX2NoaWxkcmVuKTsKKworCWV4aXRfcHRyYWNlKGZhdGhlcik7CiAKIAl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAJcmVhcGVyID0gZmluZF9uZXdfcmVhcGVyKGZhdGhlcik7Ci0JLyoKLQkgKiBGaXJzdCBjbGVhbiB1cCBwdHJhY2UgaWYgd2Ugd2VyZSB1c2luZyBpdC4KLQkgKi8KLQlwdHJhY2VfZXhpdChmYXRoZXIsICZwdHJhY2VfZGVhZCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJmZhdGhlci0+Y2hpbGRyZW4sIHNpYmxpbmcpIHsKIAkJcC0+cmVhbF9wYXJlbnQgPSByZWFwZXI7CkBAIC05MDEsMTMgKzc4NSwxNiBAQAogCQkJQlVHX09OKHAtPnB0cmFjZSk7CiAJCQlwLT5wYXJlbnQgPSBwLT5yZWFsX3BhcmVudDsKIAkJfQotCQlyZXBhcmVudF90aHJlYWQocCwgZmF0aGVyKTsKKwkJcmVwYXJlbnRfdGhyZWFkKGZhdGhlciwgcCwgJmRlYWRfY2hpbGRyZW4pOwogCX0KLQogCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCiAJQlVHX09OKCFsaXN0X2VtcHR5KCZmYXRoZXItPmNoaWxkcmVuKSk7CiAKLQlwdHJhY2VfZXhpdF9maW5pc2goZmF0aGVyLCAmcHRyYWNlX2RlYWQpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmZGVhZF9jaGlsZHJlbiwgc2libGluZykgeworCQlsaXN0X2RlbF9pbml0KCZwLT5zaWJsaW5nKTsKKwkJcmVsZWFzZV90YXNrKHApOworCX0KIH0KIAogLyoKQEAgLTE0MTcsNiArMTMwNCwxOCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyBpbnQgKnRhc2tfc3RvcHBlZF9jb2RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBwdHJhY2UpCit7CisJaWYgKHB0cmFjZSkgeworCQlpZiAodGFza19pc19zdG9wcGVkX29yX3RyYWNlZChwKSkKKwkJCXJldHVybiAmcC0+ZXhpdF9jb2RlOworCX0gZWxzZSB7CisJCWlmIChwLT5zaWduYWwtPmZsYWdzICYgU0lHTkFMX1NUT1BfU1RPUFBFRCkKKwkJCXJldHVybiAmcC0+c2lnbmFsLT5ncm91cF9leGl0X2NvZGU7CisJfQorCXJldHVybiBOVUxMOworfQorCiAvKgogICogSGFuZGxlIHN5c193YWl0NCB3b3JrIGZvciBvbmUgdGFzayBpbiBzdGF0ZSBUQVNLX1NUT1BQRUQuICBXZSBob2xkCiAgKiByZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spIG9uIGVudHJ5LiAgSWYgd2UgcmV0dXJuIHplcm8sIHdlIHN0aWxsIGhvbGQKQEAgLTE0MjcsNyArMTMyNiw3IEBACiAJCQkgICAgIGludCBvcHRpb25zLCBzdHJ1Y3Qgc2lnaW5mbyBfX3VzZXIgKmluZm9wLAogCQkJICAgICBpbnQgX191c2VyICpzdGF0X2FkZHIsIHN0cnVjdCBydXNhZ2UgX191c2VyICpydSkKIHsKLQlpbnQgcmV0dmFsLCBleGl0X2NvZGUsIHdoeTsKKwlpbnQgcmV0dmFsLCBleGl0X2NvZGUsICpwX2NvZGUsIHdoeTsKIAl1aWRfdCB1aWQgPSAwOyAvKiB1bm5lZWRlZCwgcmVxdWlyZWQgYnkgY29tcGlsZXIgKi8KIAlwaWRfdCBwaWQ7CiAKQEAgLTE0MzcsMjIgKzEzMzYsMTYgQEAKIAlleGl0X2NvZGUgPSAwOwogCXNwaW5fbG9ja19pcnEoJnAtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCi0JaWYgKHVubGlrZWx5KCF0YXNrX2lzX3N0b3BwZWRfb3JfdHJhY2VkKHApKSkKKwlwX2NvZGUgPSB0YXNrX3N0b3BwZWRfY29kZShwLCBwdHJhY2UpOworCWlmICh1bmxpa2VseSghcF9jb2RlKSkKIAkJZ290byB1bmxvY2tfc2lnOwogCi0JaWYgKCFwdHJhY2UgJiYgcC0+c2lnbmFsLT5ncm91cF9zdG9wX2NvdW50ID4gMCkKLQkJLyoKLQkJICogQSBncm91cCBzdG9wIGlzIGluIHByb2dyZXNzIGFuZCB0aGlzIGlzIHRoZSBncm91cCBsZWFkZXIuCi0JCSAqIFdlIHdvbid0IHJlcG9ydCB1bnRpbCBhbGwgdGhyZWFkcyBoYXZlIHN0b3BwZWQuCi0JCSAqLwotCQlnb3RvIHVubG9ja19zaWc7Ci0KLQlleGl0X2NvZGUgPSBwLT5leGl0X2NvZGU7CisJZXhpdF9jb2RlID0gKnBfY29kZTsKIAlpZiAoIWV4aXRfY29kZSkKIAkJZ290byB1bmxvY2tfc2lnOwogCiAJaWYgKCF1bmxpa2VseShvcHRpb25zICYgV05PV0FJVCkpCi0JCXAtPmV4aXRfY29kZSA9IDA7CisJCSpwX2NvZGUgPSAwOwogCiAJLyogZG9uJ3QgbmVlZCB0aGUgUkNVIHJlYWRsb2NrIGhlcmUgYXMgd2UncmUgaG9sZGluZyBhIHNwaW5sb2NrICovCiAJdWlkID0gX190YXNrX2NyZWQocCktPnVpZDsKQEAgLTE2MDgsNyArMTUwMSw3IEBACiAJICovCiAJKm5vdGFza19lcnJvciA9IDA7CiAKLQlpZiAodGFza19pc19zdG9wcGVkX29yX3RyYWNlZChwKSkKKwlpZiAodGFza19zdG9wcGVkX2NvZGUocCwgcHRyYWNlKSkKIAkJcmV0dXJuIHdhaXRfdGFza19zdG9wcGVkKHB0cmFjZSwgcCwgb3B0aW9ucywKIAkJCQkJIGluZm9wLCBzdGF0X2FkZHIsIHJ1KTsKIApAQCAtMTgxMiw3ICsxNzA1LDcgQEAKIAkJcGlkID0gZmluZF9nZXRfcGlkKC11cGlkKTsKIAl9IGVsc2UgaWYgKHVwaWQgPT0gMCkgewogCQl0eXBlID0gUElEVFlQRV9QR0lEOwotCQlwaWQgPSBnZXRfcGlkKHRhc2tfcGdycChjdXJyZW50KSk7CisJCXBpZCA9IGdldF90YXNrX3BpZChjdXJyZW50LCBQSURUWVBFX1BHSUQpOwogCX0gZWxzZSAvKiB1cGlkID4gMCAqLyB7CiAJCXR5cGUgPSBQSURUWVBFX1BJRDsKIAkJcGlkID0gZmluZF9nZXRfcGlkKHVwaWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4dGFibGUuYyBiL2tlcm5lbC9leHRhYmxlLmMKaW5kZXggZTEzNmVkOC4uN2Y4ZjI2MyAxMDA2NDQKLS0tIGEva2VybmVsL2V4dGFibGUuYworKysgYi9rZXJuZWwvZXh0YWJsZS5jCkBAIC0xNSwxMSArMTUsMjIgQEAKICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisvKgorICogbXV0ZXggcHJvdGVjdGluZyB0ZXh0IHNlY3Rpb24gbW9kaWZpY2F0aW9uIChkeW5hbWljIGNvZGUgcGF0Y2hpbmcpLgorICogc29tZSB1c2VycyBuZWVkIHRvIHNsZWVwIChhbGxvY2F0aW5nIG1lbW9yeS4uLikgd2hpbGUgdGhleSBob2xkIHRoaXMgbG9jay4KKyAqCisgKiBOT1QgZXhwb3J0ZWQgdG8gbW9kdWxlcyAtIHBhdGNoaW5nIGtlcm5lbCB0ZXh0IGlzIGEgcmVhbGx5IGRlbGljYXRlIG1hdHRlci4KKyAqLworREVGSU5FX01VVEVYKHRleHRfbXV0ZXgpOwogCiBleHRlcm4gc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9lbnRyeSBfX3N0YXJ0X19fZXhfdGFibGVbXTsKIGV4dGVybiBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5IF9fc3RvcF9fX2V4X3RhYmxlW107CkBAIC00MSwzMSArNTIsNTAgQEAKIAlyZXR1cm4gZTsKIH0KIAotX19ub3RyYWNlX2Z1bmNncmFwaCBpbnQgY29yZV9rZXJuZWxfdGV4dCh1bnNpZ25lZCBsb25nIGFkZHIpCitzdGF0aWMgaW5saW5lIGludCBpbml0X2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAoYWRkciA+PSAodW5zaWduZWQgbG9uZylfc2luaXR0ZXh0ICYmCisJICAgIGFkZHIgPD0gKHVuc2lnbmVkIGxvbmcpX2Vpbml0dGV4dCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjb3JlX2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlpZiAoYWRkciA+PSAodW5zaWduZWQgbG9uZylfc3RleHQgJiYKIAkgICAgYWRkciA8PSAodW5zaWduZWQgbG9uZylfZXRleHQpCiAJCXJldHVybiAxOwogCiAJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORyAmJgotCSAgICBhZGRyID49ICh1bnNpZ25lZCBsb25nKV9zaW5pdHRleHQgJiYKLQkgICAgYWRkciA8PSAodW5zaWduZWQgbG9uZylfZWluaXR0ZXh0KQorCSAgICBpbml0X2tlcm5lbF90ZXh0KGFkZHIpKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KIAotX19ub3RyYWNlX2Z1bmNncmFwaCBpbnQgX19rZXJuZWxfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKK2ludCBfX2tlcm5lbF90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQogewogCWlmIChjb3JlX2tlcm5lbF90ZXh0KGFkZHIpKQogCQlyZXR1cm4gMTsKLQlyZXR1cm4gX19tb2R1bGVfdGV4dF9hZGRyZXNzKGFkZHIpICE9IE5VTEw7CisJaWYgKGlzX21vZHVsZV90ZXh0X2FkZHJlc3MoYWRkcikpCisJCXJldHVybiAxOworCS8qCisJICogVGhlcmUgbWlnaHQgYmUgaW5pdCBzeW1ib2xzIGluIHNhdmVkIHN0YWNrdHJhY2VzLgorCSAqIEdpdmUgdGhvc2Ugc3ltYm9scyBhIGNoYW5jZSB0byBiZSBwcmludGVkIGluCisJICogYmFja3RyYWNlcyAoc3VjaCBhcyBsb2NrZGVwIHRyYWNlcykuCisJICoKKwkgKiBTaW5jZSB3ZSBhcmUgYWZ0ZXIgdGhlIG1vZHVsZS1zeW1ib2xzIGNoZWNrLCB0aGVyZSdzCisJICogbm8gZGFuZ2VyIG9mIGFkZHJlc3Mgb3ZlcmxhcDoKKwkgKi8KKwlpZiAoaW5pdF9rZXJuZWxfdGV4dChhZGRyKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIGludCBrZXJuZWxfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlpZiAoY29yZV9rZXJuZWxfdGV4dChhZGRyKSkKIAkJcmV0dXJuIDE7Ci0JcmV0dXJuIG1vZHVsZV90ZXh0X2FkZHJlc3MoYWRkcikgIT0gTlVMTDsKKwlyZXR1cm4gaXNfbW9kdWxlX3RleHRfYWRkcmVzcyhhZGRyKTsKIH0KIAogLyoKQEAgLTgxLDUgKzExMSw1IEBACiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBkZXJlZmVyZW5jZV9mdW5jdGlvbl9kZXNjcmlwdG9yKHB0cik7CiAJaWYgKGNvcmVfa2VybmVsX3RleHQoYWRkcikpCiAJCXJldHVybiAxOwotCXJldHVybiBtb2R1bGVfdGV4dF9hZGRyZXNzKGFkZHIpICE9IE5VTEw7CisJcmV0dXJuIGlzX21vZHVsZV90ZXh0X2FkZHJlc3MoYWRkcik7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCA0N2MxNTg0Li42NjBjMmI4IDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZnNfc3RydWN0Lmg+CiAjaW5jbHVkZSA8dHJhY2Uvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogCkBAIC02ODEsMzggKzY4MiwyMSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnNfc3RydWN0ICpfX2NvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKm9sZCkKLXsKLQlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGttZW1fY2FjaGVfYWxsb2MoZnNfY2FjaGVwLCBHRlBfS0VSTkVMKTsKLQkvKiBXZSBkb24ndCBuZWVkIHRvIGxvY2sgZnMgLSB0aGluayB3aHkgOy0pICovCi0JaWYgKGZzKSB7Ci0JCWF0b21pY19zZXQoJmZzLT5jb3VudCwgMSk7Ci0JCXJ3bG9ja19pbml0KCZmcy0+bG9jayk7Ci0JCWZzLT51bWFzayA9IG9sZC0+dW1hc2s7Ci0JCXJlYWRfbG9jaygmb2xkLT5sb2NrKTsKLQkJZnMtPnJvb3QgPSBvbGQtPnJvb3Q7Ci0JCXBhdGhfZ2V0KCZvbGQtPnJvb3QpOwotCQlmcy0+cHdkID0gb2xkLT5wd2Q7Ci0JCXBhdGhfZ2V0KCZvbGQtPnB3ZCk7Ci0JCXJlYWRfdW5sb2NrKCZvbGQtPmxvY2spOwotCX0KLQlyZXR1cm4gZnM7Ci19Ci0KLXN0cnVjdCBmc19zdHJ1Y3QgKmNvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKm9sZCkKLXsKLQlyZXR1cm4gX19jb3B5X2ZzX3N0cnVjdChvbGQpOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChjb3B5X2ZzX3N0cnVjdCk7Ci0KIHN0YXRpYyBpbnQgY29weV9mcyh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtPmZzOwogCWlmIChjbG9uZV9mbGFncyAmIENMT05FX0ZTKSB7Ci0JCWF0b21pY19pbmMoJmN1cnJlbnQtPmZzLT5jb3VudCk7CisJCS8qIHRzay0+ZnMgaXMgYWxyZWFkeSB3aGF0IHdlIHdhbnQgKi8KKwkJd3JpdGVfbG9jaygmZnMtPmxvY2spOworCQlpZiAoZnMtPmluX2V4ZWMpIHsKKwkJCXdyaXRlX3VubG9jaygmZnMtPmxvY2spOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJZnMtPnVzZXJzKys7CisJCXdyaXRlX3VubG9jaygmZnMtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9Ci0JdHNrLT5mcyA9IF9fY29weV9mc19zdHJ1Y3QoY3VycmVudC0+ZnMpOworCXRzay0+ZnMgPSBjb3B5X2ZzX3N0cnVjdChmcyk7CiAJaWYgKCF0c2stPmZzKQogCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gMDsKQEAgLTg0MSw2ICs4MjUsOCBAQAogCWF0b21pY19zZXQoJnNpZy0+bGl2ZSwgMSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc2lnLT53YWl0X2NobGRleGl0KTsKIAlzaWctPmZsYWdzID0gMDsKKwlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9ORVdQSUQpCisJCXNpZy0+ZmxhZ3MgfD0gU0lHTkFMX1VOS0lMTEFCTEU7CiAJc2lnLT5ncm91cF9leGl0X2NvZGUgPSAwOwogCXNpZy0+Z3JvdXBfZXhpdF90YXNrID0gTlVMTDsKIAlzaWctPmdyb3VwX3N0b3BfY291bnQgPSAwOwpAQCAtMTEyNSw3ICsxMTExLDcgQEAKIAkJZ290byBiYWRfZm9ya19jbGVhbnVwX21tOwogCWlmICgocmV0dmFsID0gY29weV9pbyhjbG9uZV9mbGFncywgcCkpKQogCQlnb3RvIGJhZF9mb3JrX2NsZWFudXBfbmFtZXNwYWNlczsKLQlyZXR2YWwgPSBjb3B5X3RocmVhZCgwLCBjbG9uZV9mbGFncywgc3RhY2tfc3RhcnQsIHN0YWNrX3NpemUsIHAsIHJlZ3MpOworCXJldHZhbCA9IGNvcHlfdGhyZWFkKGNsb25lX2ZsYWdzLCBzdGFja19zdGFydCwgc3RhY2tfc2l6ZSwgcCwgcmVncyk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBiYWRfZm9ya19jbGVhbnVwX2lvOwogCkBAIC0xMjYzLDggKzEyNDksNiBAQAogCQkJcC0+c2lnbmFsLT5sZWFkZXJfcGlkID0gcGlkOwogCQkJdHR5X2tyZWZfcHV0KHAtPnNpZ25hbC0+dHR5KTsKIAkJCXAtPnNpZ25hbC0+dHR5ID0gdHR5X2tyZWZfZ2V0KGN1cnJlbnQtPnNpZ25hbC0+dHR5KTsKLQkJCXNldF90YXNrX3BncnAocCwgdGFza19wZ3JwX25yKGN1cnJlbnQpKTsKLQkJCXNldF90YXNrX3Nlc3Npb24ocCwgdGFza19zZXNzaW9uX25yKGN1cnJlbnQpKTsKIAkJCWF0dGFjaF9waWQocCwgUElEVFlQRV9QR0lELCB0YXNrX3BncnAoY3VycmVudCkpOwogCQkJYXR0YWNoX3BpZChwLCBQSURUWVBFX1NJRCwgdGFza19zZXNzaW9uKGN1cnJlbnQpKTsKIAkJCWxpc3RfYWRkX3RhaWxfcmN1KCZwLT50YXNrcywgJmluaXRfdGFzay50YXNrcyk7CkBAIC0xNDg4LDYgKzE0NzIsNyBAQAogCW1tX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJtbV9zdHJ1Y3QiLAogCQkJc2l6ZW9mKHN0cnVjdCBtbV9zdHJ1Y3QpLCBBUkNIX01JTl9NTVNUUlVDVF9BTElHTiwKIAkJCVNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDLCBOVUxMKTsKKwl2bV9hcmVhX2NhY2hlcCA9IEtNRU1fQ0FDSEUodm1fYXJlYV9zdHJ1Y3QsIFNMQUJfUEFOSUMpOwogCW1tYXBfaW5pdCgpOwogfQogCkBAIC0xNTQzLDEyICsxNTI4LDE2IEBACiB7CiAJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LT5mczsKIAotCWlmICgodW5zaGFyZV9mbGFncyAmIENMT05FX0ZTKSAmJgotCSAgICAoZnMgJiYgYXRvbWljX3JlYWQoJmZzLT5jb3VudCkgPiAxKSkgewotCQkqbmV3X2ZzcCA9IF9fY29weV9mc19zdHJ1Y3QoY3VycmVudC0+ZnMpOwotCQlpZiAoISpuZXdfZnNwKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWlmICghKHVuc2hhcmVfZmxhZ3MgJiBDTE9ORV9GUykgfHwgIWZzKQorCQlyZXR1cm4gMDsKKworCS8qIGRvbid0IG5lZWQgbG9jayBoZXJlOyBpbiB0aGUgd29yc3QgY2FzZSB3ZSdsbCBkbyB1c2VsZXNzIGNvcHkgKi8KKwlpZiAoZnMtPnVzZXJzID09IDEpCisJCXJldHVybiAwOworCisJKm5ld19mc3AgPSBjb3B5X2ZzX3N0cnVjdChmcyk7CisJaWYgKCEqbmV3X2ZzcCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NjQsOCArMTY1MywxMyBAQAogCiAJCWlmIChuZXdfZnMpIHsKIAkJCWZzID0gY3VycmVudC0+ZnM7CisJCQl3cml0ZV9sb2NrKCZmcy0+bG9jayk7CiAJCQljdXJyZW50LT5mcyA9IG5ld19mczsKLQkJCW5ld19mcyA9IGZzOworCQkJaWYgKC0tZnMtPnVzZXJzKQorCQkJCW5ld19mcyA9IE5VTEw7CisJCQllbHNlCisJCQkJbmV3X2ZzID0gZnM7CisJCQl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKIAkJfQogCiAJCWlmIChuZXdfbW0pIHsKQEAgLTE3MDQsNyArMTY5OCw3IEBACiAKIGJhZF91bnNoYXJlX2NsZWFudXBfZnM6CiAJaWYgKG5ld19mcykKLQkJcHV0X2ZzX3N0cnVjdChuZXdfZnMpOworCQlmcmVlX2ZzX3N0cnVjdChuZXdfZnMpOwogCiBiYWRfdW5zaGFyZV9jbGVhbnVwX3RocmVhZDoKIGJhZF91bnNoYXJlX291dDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaGFuZGxlLmMgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCmluZGV4IDllYmY3NzkuLjM0M2FjZWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaGFuZGxlLmMKKysrIGIva2VybmVsL2lycS9oYW5kbGUuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDx0cmFjZS9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbHMuaCIKQEAgLTMzOCw2ICszMzksOSBAQAogCXJldHVybiBJUlFfTk9ORTsKIH0KIAorREVGSU5FX1RSQUNFKGlycV9oYW5kbGVyX2VudHJ5KTsKK0RFRklORV9UUkFDRShpcnFfaGFuZGxlcl9leGl0KTsKKwogLyoqCiAgKiBoYW5kbGVfSVJRX2V2ZW50IC0gaXJxIGFjdGlvbiBjaGFpbiBoYW5kbGVyCiAgKiBAaXJxOgl0aGUgaW50ZXJydXB0IG51bWJlcgpAQCAtMzU2LDcgKzM2MCw5IEBACiAJCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwogCiAJZG8geworCQl0cmFjZV9pcnFfaGFuZGxlcl9lbnRyeShpcnEsIGFjdGlvbik7CiAJCXJldCA9IGFjdGlvbi0+aGFuZGxlcihpcnEsIGFjdGlvbi0+ZGV2X2lkKTsKKwkJdHJhY2VfaXJxX2hhbmRsZXJfZXhpdChpcnEsIGFjdGlvbiwgcmV0KTsKIAkJaWYgKHJldCA9PSBJUlFfSEFORExFRCkKIAkJCXN0YXR1cyB8PSBhY3Rpb24tPmZsYWdzOwogCQlyZXR2YWwgfD0gcmV0OwpkaWZmIC0tZ2l0IGEva2VybmVsL2thbGxzeW1zLmMgYi9rZXJuZWwva2FsbHN5bXMuYwppbmRleCA3YjhiMGYyLi4zNzRmYWY5IDEwMDY0NAotLS0gYS9rZXJuZWwva2FsbHN5bXMuYworKysgYi9rZXJuZWwva2FsbHN5bXMuYwpAQCAtMTYxLDYgKzE2MSwyNSBAQAogCXJldHVybiBtb2R1bGVfa2FsbHN5bXNfbG9va3VwX25hbWUobmFtZSk7CiB9CiAKK2ludCBrYWxsc3ltc19vbl9lYWNoX3N5bWJvbChpbnQgKCpmbikodm9pZCAqLCBjb25zdCBjaGFyICosIHN0cnVjdCBtb2R1bGUgKiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nKSwKKwkJCSAgICB2b2lkICpkYXRhKQoreworCWNoYXIgbmFtZWJ1ZltLU1lNX05BTUVfTEVOXTsKKwl1bnNpZ25lZCBsb25nIGk7CisJdW5zaWduZWQgaW50IG9mZjsKKwlpbnQgcmV0OworCisJZm9yIChpID0gMCwgb2ZmID0gMDsgaSA8IGthbGxzeW1zX251bV9zeW1zOyBpKyspIHsKKwkJb2ZmID0ga2FsbHN5bXNfZXhwYW5kX3N5bWJvbChvZmYsIG5hbWVidWYpOworCQlyZXQgPSBmbihkYXRhLCBuYW1lYnVmLCBOVUxMLCBrYWxsc3ltc19hZGRyZXNzZXNbaV0pOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gbW9kdWxlX2thbGxzeW1zX29uX2VhY2hfc3ltYm9sKGZuLCBkYXRhKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGthbGxzeW1zX29uX2VhY2hfc3ltYm9sKTsKKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3N5bWJvbF9wb3ModW5zaWduZWQgbG9uZyBhZGRyLAogCQkJCSAgICB1bnNpZ25lZCBsb25nICpzeW1ib2xzaXplLAogCQkJCSAgICB1bnNpZ25lZCBsb25nICpvZmZzZXQpCmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWMuYyBiL2tlcm5lbC9rZXhlYy5jCmluZGV4IDkzZWVkODUuLjVhNzU4YzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlYy5jCisrKyBiL2tlcm5lbC9rZXhlYy5jCkBAIC00Miw3ICs0Miw3IEBACiBub3RlX2J1Zl90KiBjcmFzaF9ub3RlczsKIAogLyogdm1jb3JlaW5mbyBzdHVmZiAqLwotdW5zaWduZWQgY2hhciB2bWNvcmVpbmZvX2RhdGFbVk1DT1JFSU5GT19CWVRFU107CitzdGF0aWMgdW5zaWduZWQgY2hhciB2bWNvcmVpbmZvX2RhdGFbVk1DT1JFSU5GT19CWVRFU107CiB1MzIgdm1jb3JlaW5mb19ub3RlW1ZNQ09SRUlORk9fTk9URV9TSVpFLzRdOwogc2l6ZV90IHZtY29yZWluZm9fc2l6ZTsKIHNpemVfdCB2bWNvcmVpbmZvX21heF9zaXplID0gc2l6ZW9mKHZtY29yZWluZm9fZGF0YSk7CkBAIC0xNDA5LDYgKzE0MDksNyBAQAogCVZNQ09SRUlORk9fT0ZGU0VUKGxpc3RfaGVhZCwgcHJldik7CiAJVk1DT1JFSU5GT19PRkZTRVQodm1fc3RydWN0LCBhZGRyKTsKIAlWTUNPUkVJTkZPX0xFTkdUSCh6b25lLmZyZWVfYXJlYSwgTUFYX09SREVSKTsKKwlsb2dfYnVmX2tleGVjX3NldHVwKCk7CiAJVk1DT1JFSU5GT19MRU5HVEgoZnJlZV9hcmVhLmZyZWVfbGlzdCwgTUlHUkFURV9UWVBFUyk7CiAJVk1DT1JFSU5GT19OVU1CRVIoTlJfRlJFRV9QQUdFUyk7CiAJVk1DT1JFSU5GT19OVU1CRVIoUEdfbHJ1KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IGYwYzhmNTQuLmI3NTA2NzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtNTAsNyArNTAsOCBAQAogY2hhciBtb2Rwcm9iZV9wYXRoW0tNT0RfUEFUSF9MRU5dID0gIi9zYmluL21vZHByb2JlIjsKIAogLyoqCi0gKiByZXF1ZXN0X21vZHVsZSAtIHRyeSB0byBsb2FkIGEga2VybmVsIG1vZHVsZQorICogX19yZXF1ZXN0X21vZHVsZSAtIHRyeSB0byBsb2FkIGEga2VybmVsIG1vZHVsZQorICogQHdhaXQ6IHdhaXQgKG9yIG5vdCkgZm9yIHRoZSBvcGVyYXRpb24gdG8gY29tcGxldGUKICAqIEBmbXQ6IHByaW50ZiBzdHlsZSBmb3JtYXQgc3RyaW5nIGZvciB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlCiAgKiBALi4uOiBhcmd1bWVudHMgYXMgc3BlY2lmaWVkIGluIHRoZSBmb3JtYXQgc3RyaW5nCiAgKgpAQCAtNjMsNyArNjQsNyBAQAogICogSWYgbW9kdWxlIGF1dG8tbG9hZGluZyBzdXBwb3J0IGlzIGRpc2FibGVkIHRoZW4gdGhpcyBmdW5jdGlvbgogICogYmVjb21lcyBhIG5vLW9wZXJhdGlvbi4KICAqLwotaW50IHJlcXVlc3RfbW9kdWxlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoraW50IF9fcmVxdWVzdF9tb2R1bGUoYm9vbCB3YWl0LCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CiAJY2hhciBtb2R1bGVfbmFtZVtNT0RVTEVfTkFNRV9MRU5dOwpAQCAtMTA4LDExICsxMDksMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmV0ID0gY2FsbF91c2VybW9kZWhlbHBlcihtb2Rwcm9iZV9wYXRoLCBhcmd2LCBlbnZwLCAxKTsKKwlyZXQgPSBjYWxsX3VzZXJtb2RlaGVscGVyKG1vZHByb2JlX3BhdGgsIGFyZ3YsIGVudnAsCisJCQl3YWl0ID8gVU1IX1dBSVRfUFJPQyA6IFVNSF9XQUlUX0VYRUMpOwogCWF0b21pY19kZWMoJmttb2RfY29uY3VycmVudCk7CiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0wocmVxdWVzdF9tb2R1bGUpOworRVhQT1JUX1NZTUJPTChfX3JlcXVlc3RfbW9kdWxlKTsKICNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogCiBzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rcHJvYmVzLmMgYi9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDdiYThjZDkuLjUwMTZiZmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIva2VybmVsL2twcm9iZXMuYwpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtNjk5LDkgKzcwMCwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwltdXRleF9sb2NrKCZ0ZXh0X211dGV4KTsKIAlyZXQgPSBhcmNoX3ByZXBhcmVfa3Byb2JlKHApOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF91bmxvY2tfdGV4dDsKIAogCUlOSVRfSExJU1RfTk9ERSgmcC0+aGxpc3QpOwogCWhsaXN0X2FkZF9oZWFkX3JjdSgmcC0+aGxpc3QsCkBAIC03MTAsNiArNzEyLDggQEAKIAlpZiAoa3Byb2JlX2VuYWJsZWQpCiAJCWFyY2hfYXJtX2twcm9iZShwKTsKIAorb3V0X3VubG9ja190ZXh0OgorCW11dGV4X3VubG9jaygmdGV4dF9tdXRleCk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogCkBAIC03NDYsOCArNzUwLDExIEBACiAJCSAqIGVuYWJsZWQgYW5kIG5vdCBnb25lIC0gb3RoZXJ3aXNlLCB0aGUgYnJlYWtwb2ludCB3b3VsZAogCQkgKiBhbHJlYWR5IGhhdmUgYmVlbiByZW1vdmVkLiBXZSBzYXZlIG9uIGZsdXNoaW5nIGljYWNoZS4KIAkJICovCi0JCWlmIChrcHJvYmVfZW5hYmxlZCAmJiAha3Byb2JlX2dvbmUob2xkX3ApKQorCQlpZiAoa3Byb2JlX2VuYWJsZWQgJiYgIWtwcm9iZV9nb25lKG9sZF9wKSkgeworCQkJbXV0ZXhfbG9jaygmdGV4dF9tdXRleCk7CiAJCQlhcmNoX2Rpc2FybV9rcHJvYmUocCk7CisJCQltdXRleF91bmxvY2soJnRleHRfbXV0ZXgpOworCQl9CiAJCWhsaXN0X2RlbF9yY3UoJm9sZF9wLT5obGlzdCk7CiAJfSBlbHNlIHsKIAkJaWYgKHAtPmJyZWFrX2hhbmRsZXIgJiYgIWtwcm9iZV9nb25lKHApKQpAQCAtOTEyLDEwICs5MTksOCBAQAogCQlyaS0+cnAgPSBycDsKIAkJcmktPnRhc2sgPSBjdXJyZW50OwogCi0JCWlmIChycC0+ZW50cnlfaGFuZGxlciAmJiBycC0+ZW50cnlfaGFuZGxlcihyaSwgcmVncykpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwLT5sb2NrLCBmbGFncyk7CisJCWlmIChycC0+ZW50cnlfaGFuZGxlciAmJiBycC0+ZW50cnlfaGFuZGxlcihyaSwgcmVncykpCiAJCQlyZXR1cm4gMDsKLQkJfQogCiAJCWFyY2hfcHJlcGFyZV9rcmV0cHJvYmUocmksIHJlZ3MpOwogCkBAIC0xMjgwLDEyICsxMjg1LDE0IEBACiAJaWYgKGtwcm9iZV9lbmFibGVkKQogCQlnb3RvIGFscmVhZHlfZW5hYmxlZDsKIAorCW11dGV4X2xvY2soJnRleHRfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCBLUFJPQkVfVEFCTEVfU0laRTsgaSsrKSB7CiAJCWhlYWQgPSAma3Byb2JlX3RhYmxlW2ldOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgbm9kZSwgaGVhZCwgaGxpc3QpCiAJCQlpZiAoIWtwcm9iZV9nb25lKHApKQogCQkJCWFyY2hfYXJtX2twcm9iZShwKTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZ0ZXh0X211dGV4KTsKIAogCWtwcm9iZV9lbmFibGVkID0gdHJ1ZTsKIAlwcmludGsoS0VSTl9JTkZPICJLcHJvYmVzIGdsb2JhbGx5IGVuYWJsZWRcbiIpOwpAQCAtMTMxMCw2ICsxMzE3LDcgQEAKIAogCWtwcm9iZV9lbmFibGVkID0gZmFsc2U7CiAJcHJpbnRrKEtFUk5fSU5GTyAiS3Byb2JlcyBnbG9iYWxseSBkaXNhYmxlZFxuIik7CisJbXV0ZXhfbG9jaygmdGV4dF9tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IEtQUk9CRV9UQUJMRV9TSVpFOyBpKyspIHsKIAkJaGVhZCA9ICZrcHJvYmVfdGFibGVbaV07CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBub2RlLCBoZWFkLCBobGlzdCkgewpAQCAtMTMxOCw2ICsxMzI2LDcgQEAKIAkJfQogCX0KIAorCW11dGV4X3VubG9jaygmdGV4dF9tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogCS8qIEFsbG93IGFsbCBjdXJyZW50bHkgcnVubmluZyBrcHJvYmVzIHRvIGNvbXBsZXRlICovCiAJc3luY2hyb25pemVfc2NoZWQoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IDM2NzNhM2YuLjgxYjVmMzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDx0cmFjZS9sb2NrZGVwLmg+CiAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIApAQCAtNDMzLDEzICs0MzQsNiBAQAogYXRvbWljX3QgbnJfZmluZF91c2FnZV9mb3J3YXJkc19yZWN1cnNpb25zOwogYXRvbWljX3QgbnJfZmluZF91c2FnZV9iYWNrd2FyZHNfY2hlY2tzOwogYXRvbWljX3QgbnJfZmluZF91c2FnZV9iYWNrd2FyZHNfcmVjdXJzaW9uczsKLSMgZGVmaW5lIGRlYnVnX2F0b21pY19pbmMocHRyKQkJYXRvbWljX2luYyhwdHIpCi0jIGRlZmluZSBkZWJ1Z19hdG9taWNfZGVjKHB0cikJCWF0b21pY19kZWMocHRyKQotIyBkZWZpbmUgZGVidWdfYXRvbWljX3JlYWQocHRyKQkJYXRvbWljX3JlYWQocHRyKQotI2Vsc2UKLSMgZGVmaW5lIGRlYnVnX2F0b21pY19pbmMocHRyKQkJZG8geyB9IHdoaWxlICgwKQotIyBkZWZpbmUgZGVidWdfYXRvbWljX2RlYyhwdHIpCQlkbyB7IH0gd2hpbGUgKDApCi0jIGRlZmluZSBkZWJ1Z19hdG9taWNfcmVhZChwdHIpCQkwCiAjZW5kaWYKIAogLyoKQEAgLTE5MDAsOSArMTg5NCw5IEBACiAJCWN1cnItPmNvbW0sIHRhc2tfcGlkX25yKGN1cnIpKTsKIAlwcmludF9sb2NrKHRoaXMpOwogCWlmIChmb3J3YXJkcykKLQkJcHJpbnRrKCJidXQgdGhpcyBsb2NrIHRvb2sgYW5vdGhlciwgJXMtaXJxLXVuc2FmZSBsb2NrIGluIHRoZSBwYXN0OlxuIiwgaXJxY2xhc3MpOworCQlwcmludGsoImJ1dCB0aGlzIGxvY2sgdG9vayBhbm90aGVyLCAlcy11bnNhZmUgbG9jayBpbiB0aGUgcGFzdDpcbiIsIGlycWNsYXNzKTsKIAllbHNlCi0JCXByaW50aygiYnV0IHRoaXMgbG9jayB3YXMgdGFrZW4gYnkgYW5vdGhlciwgJXMtaXJxLXNhZmUgbG9jayBpbiB0aGUgcGFzdDpcbiIsIGlycWNsYXNzKTsKKwkJcHJpbnRrKCJidXQgdGhpcyBsb2NrIHdhcyB0YWtlbiBieSBhbm90aGVyLCAlcy1zYWZlIGxvY2sgaW4gdGhlIHBhc3Q6XG4iLCBpcnFjbGFzcyk7CiAJcHJpbnRfbG9ja19uYW1lKG90aGVyKTsKIAlwcmludGsoIlxuXG5hbmQgaW50ZXJydXB0cyBjb3VsZCBjcmVhdGUgaW52ZXJzZSBsb2NrIG9yZGVyaW5nIGJldHdlZW4gdGhlbS5cblxuIik7CiAKQEAgLTIwMTUsNyArMjAwOSw4IEBACiAJCQkgICAgIGVudW0gbG9ja191c2FnZV9iaXQgYml0LCBjb25zdCBjaGFyICpuYW1lKTsKIAogc3RhdGljIGludAotbWFya19sb2NrX2lycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKnRoaXMsIGludCBuZXdfYml0KQorbWFya19sb2NrX2lycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKnRoaXMsCisJCWVudW0gbG9ja191c2FnZV9iaXQgbmV3X2JpdCkKIHsKIAlpbnQgZXhjbF9iaXQgPSBleGNsdXNpdmVfYml0KG5ld19iaXQpOwogCWludCByZWFkID0gbmV3X2JpdCAmIDE7CkBAIC0yMDQzLDcgKzIwMzgsNyBAQAogCSAqIHN0YXRlcy4KIAkgKi8KIAlpZiAoKCFyZWFkIHx8ICFkaXIgfHwgU1RSSUNUX1JFQURfQ0hFQ0tTKSAmJgotCQkJIXVzYWdlKGN1cnIsIHRoaXMsIGV4Y2xfYml0LCBzdGF0ZV9uYW1lKG5ld19iaXQpKSkKKwkJCSF1c2FnZShjdXJyLCB0aGlzLCBleGNsX2JpdCwgc3RhdGVfbmFtZShuZXdfYml0ICYgfjEpKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtMjkyOSw2ICsyOTI0LDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxvY2tfc2V0X2NsYXNzKTsKIAorREVGSU5FX1RSQUNFKGxvY2tfYWNxdWlyZSk7CisKIC8qCiAgKiBXZSBhcmUgbm90IGFsd2F5cyBjYWxsZWQgd2l0aCBpcnFzIGRpc2FibGVkIC0gZG8gdGhhdCBoZXJlLAogICogYW5kIGFsc28gYXZvaWQgbG9ja2RlcCByZWN1cnNpb246CkBAIC0yOTM5LDYgKzI5MzYsOCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwl0cmFjZV9sb2NrX2FjcXVpcmUobG9jaywgc3ViY2xhc3MsIHRyeWxvY2ssIHJlYWQsIGNoZWNrLCBuZXN0X2xvY2ssIGlwKTsKKwogCWlmICh1bmxpa2VseShjdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbikpCiAJCXJldHVybjsKIApAQCAtMjk1MywxMSArMjk1MiwxNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobG9ja19hY3F1aXJlKTsKIAorREVGSU5FX1RSQUNFKGxvY2tfcmVsZWFzZSk7CisKIHZvaWQgbG9ja19yZWxlYXNlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgaW50IG5lc3RlZCwKIAkJCSAgdW5zaWduZWQgbG9uZyBpcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJdHJhY2VfbG9ja19yZWxlYXNlKGxvY2ssIG5lc3RlZCwgaXApOworCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uKSkKIAkJcmV0dXJuOwogCkBAIC0zMTA2LDEwICszMTA5LDE0IEBACiAJbG9jay0+aXAgPSBpcDsKIH0KIAorREVGSU5FX1RSQUNFKGxvY2tfY29udGVuZGVkKTsKKwogdm9pZCBsb2NrX2NvbnRlbmRlZChzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGxvbmcgaXApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXRyYWNlX2xvY2tfY29udGVuZGVkKGxvY2ssIGlwKTsKKwogCWlmICh1bmxpa2VseSghbG9ja19zdGF0KSkKIAkJcmV0dXJuOwogCkBAIC0zMTI1LDEwICszMTMyLDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsb2NrX2NvbnRlbmRlZCk7CiAKK0RFRklORV9UUkFDRShsb2NrX2FjcXVpcmVkKTsKKwogdm9pZCBsb2NrX2FjcXVpcmVkKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgbG9uZyBpcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJdHJhY2VfbG9ja19hY3F1aXJlZChsb2NrLCBpcCk7CisKIAlpZiAodW5saWtlbHkoIWxvY2tfc3RhdCkpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IGY3N2FjMzIuLmMyNjhhNzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTY4LDcgKzY4LDggQEAKIAogLyogTGlzdCBvZiBtb2R1bGVzLCBwcm90ZWN0ZWQgYnkgbW9kdWxlX211dGV4IG9yIHByZWVtcHRfZGlzYWJsZQogICogKGRlbGV0ZSB1c2VzIHN0b3BfbWFjaGluZS9hZGQgdXNlcyBSQ1UgbGlzdCBvcGVyYXRpb25zKS4gKi8KLXN0YXRpYyBERUZJTkVfTVVURVgobW9kdWxlX211dGV4KTsKK0RFRklORV9NVVRFWChtb2R1bGVfbXV0ZXgpOworRVhQT1JUX1NZTUJPTF9HUEwobW9kdWxlX211dGV4KTsKIHN0YXRpYyBMSVNUX0hFQUQobW9kdWxlcyk7CiAKIC8qIFdhaXRpbmcgZm9yIGEgbW9kdWxlIHRvIGZpbmlzaCBpbml0aWFsaXppbmc/ICovCkBAIC03Niw3ICs3Nyw3IEBACiAKIHN0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKG1vZHVsZV9ub3RpZnlfbGlzdCk7CiAKLS8qIEJvdW5kcyBvZiBtb2R1bGUgYWxsb2NhdGlvbiwgZm9yIHNwZWVkaW5nIF9fbW9kdWxlX3RleHRfYWRkcmVzcyAqLworLyogQm91bmRzIG9mIG1vZHVsZSBhbGxvY2F0aW9uLCBmb3Igc3BlZWRpbmcgX19tb2R1bGVfYWRkcmVzcyAqLwogc3RhdGljIHVuc2lnbmVkIGxvbmcgbW9kdWxlX2FkZHJfbWluID0gLTFVTCwgbW9kdWxlX2FkZHJfbWF4ID0gMDsKIAogaW50IHJlZ2lzdGVyX21vZHVsZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYikKQEAgLTE4NiwxNyArMTg3LDYgQEAKICNkZWZpbmUgc3ltdmVyc2lvbihiYXNlLCBpZHgpICgoYmFzZSAhPSBOVUxMKSA/ICgoYmFzZSkgKyAoaWR4KSkgOiBOVUxMKQogI2VuZGlmCiAKLXN0cnVjdCBzeW1zZWFyY2ggewotCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpzdGFydCwgKnN0b3A7Ci0JY29uc3QgdW5zaWduZWQgbG9uZyAqY3JjczsKLQllbnVtIHsKLQkJTk9UX0dQTF9PTkxZLAotCQlHUExfT05MWSwKLQkJV0lMTF9CRV9HUExfT05MWSwKLQl9IGxpY2VuY2U7Ci0JYm9vbCB1bnVzZWQ7Ci19OwotCiBzdGF0aWMgYm9vbCBlYWNoX3N5bWJvbF9pbl9zZWN0aW9uKGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggKmFyciwKIAkJCQkgICB1bnNpZ25lZCBpbnQgYXJyc2l6ZSwKIAkJCQkgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKQEAgLTIxNywxMCArMjA3LDggQEAKIH0KIAogLyogUmV0dXJucyB0cnVlIGFzIHNvb24gYXMgZm4gcmV0dXJucyB0cnVlLCBvdGhlcndpc2UgZmFsc2UuICovCi1zdGF0aWMgYm9vbCBlYWNoX3N5bWJvbChib29sICgqZm4pKGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggKmFyciwKLQkJCQkgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKLQkJCQkgICB1bnNpZ25lZCBpbnQgc3ltbnVtLCB2b2lkICpkYXRhKSwKLQkJCXZvaWQgKmRhdGEpCitib29sIGVhY2hfc3ltYm9sKGJvb2wgKCpmbikoY29uc3Qgc3RydWN0IHN5bXNlYXJjaCAqYXJyLCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc3ltbnVtLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAJY29uc3Qgc3RydWN0IHN5bXNlYXJjaCBhcnJbXSA9IHsKQEAgLTI3Myw2ICsyNjEsNyBAQAogCX0KIAlyZXR1cm4gZmFsc2U7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChlYWNoX3N5bWJvbCk7CiAKIHN0cnVjdCBmaW5kX3N5bWJvbF9hcmcgewogCS8qIElucHV0ICovCkBAIC0yODMsNyArMjcyLDcgQEAKIAkvKiBPdXRwdXQgKi8KIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAljb25zdCB1bnNpZ25lZCBsb25nICpjcmM7Ci0JdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3ltOwogfTsKIAogc3RhdGljIGJvb2wgZmluZF9zeW1ib2xfaW5fc2VjdGlvbihjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoICpzeW1zLApAQCAtMzI0LDE3ICszMTMsMTcgQEAKIAogCWZzYS0+b3duZXIgPSBvd25lcjsKIAlmc2EtPmNyYyA9IHN5bXZlcnNpb24oc3ltcy0+Y3Jjcywgc3ltbnVtKTsKLQlmc2EtPnZhbHVlID0gc3ltcy0+c3RhcnRbc3ltbnVtXS52YWx1ZTsKKwlmc2EtPnN5bSA9ICZzeW1zLT5zdGFydFtzeW1udW1dOwogCXJldHVybiB0cnVlOwogfQogCi0vKiBGaW5kIGEgc3ltYm9sLCByZXR1cm4gdmFsdWUsIChvcHRpb25hbCkgY3JjIGFuZCAob3B0aW9uYWwpIG1vZHVsZQotICogd2hpY2ggb3ducyBpdCAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zeW1ib2woY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgc3RydWN0IG1vZHVsZSAqKm93bmVyLAotCQkJCSBjb25zdCB1bnNpZ25lZCBsb25nICoqY3JjLAotCQkJCSBib29sIGdwbG9rLAotCQkJCSBib29sIHdhcm4pCisvKiBGaW5kIGEgc3ltYm9sIGFuZCByZXR1cm4gaXQsIGFsb25nIHdpdGgsIChvcHRpb25hbCkgY3JjIGFuZAorICogKG9wdGlvbmFsKSBtb2R1bGUgd2hpY2ggb3ducyBpdCAqLworY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmZpbmRfc3ltYm9sKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCXN0cnVjdCBtb2R1bGUgKipvd25lciwKKwkJCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqKmNyYywKKwkJCQkJYm9vbCBncGxvaywKKwkJCQkJYm9vbCB3YXJuKQogewogCXN0cnVjdCBmaW5kX3N5bWJvbF9hcmcgZnNhOwogCkBAIC0zNDcsMTUgKzMzNiwxNiBAQAogCQkJKm93bmVyID0gZnNhLm93bmVyOwogCQlpZiAoY3JjKQogCQkJKmNyYyA9IGZzYS5jcmM7Ci0JCXJldHVybiBmc2EudmFsdWU7CisJCXJldHVybiBmc2Euc3ltOwogCX0KIAogCURFQlVHUCgiRmFpbGVkIHRvIGZpbmQgc3ltYm9sICVzXG4iLCBuYW1lKTsKLQlyZXR1cm4gLUVOT0VOVDsKKwlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZpbmRfc3ltYm9sKTsKIAogLyogU2VhcmNoIGZvciBtb2R1bGUgYnkgbmFtZTogbXVzdCBob2xkIG1vZHVsZV9tdXRleC4gKi8KLXN0YXRpYyBzdHJ1Y3QgbW9kdWxlICpmaW5kX21vZHVsZShjb25zdCBjaGFyICpuYW1lKQorc3RydWN0IG1vZHVsZSAqZmluZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAKQEAgLTM2NSw2ICszNTUsNyBAQAogCX0KIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZpbmRfbW9kdWxlKTsKIAogI2lmZGVmIENPTkZJR19TTVAKIApAQCAtNjQxLDcgKzYzMiw3IEBACiB9CiAKIC8qIE1vZHVsZSBhIHVzZXMgYiAqLwotc3RhdGljIGludCB1c2VfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKmEsIHN0cnVjdCBtb2R1bGUgKmIpCitpbnQgdXNlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICphLCBzdHJ1Y3QgbW9kdWxlICpiKQogewogCXN0cnVjdCBtb2R1bGVfdXNlICp1c2U7CiAJaW50IG5vX3dhcm4sIGVycjsKQEAgLTY3NCw2ICs2NjUsNyBAQAogCW5vX3dhcm4gPSBzeXNmc19jcmVhdGVfbGluayhiLT5ob2xkZXJzX2RpciwgJmEtPm1rb2JqLmtvYmosIGEtPm5hbWUpOwogCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNlX21vZHVsZSk7CiAKIC8qIENsZWFyIHRoZSB1bmxvYWQgc3R1ZmYgb2YgdGhlIG1vZHVsZS4gKi8KIHN0YXRpYyB2b2lkIG1vZHVsZV91bmxvYWRfZnJlZShzdHJ1Y3QgbW9kdWxlICptb2QpCkBAIC04OTQsNyArODg2LDcgQEAKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAogCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChJU19FUlJfVkFMVUUoZmluZF9zeW1ib2woc3ltYm9sLCAmb3duZXIsIE5VTEwsIHRydWUsIGZhbHNlKSkpCisJaWYgKCFmaW5kX3N5bWJvbChzeW1ib2wsICZvd25lciwgTlVMTCwgdHJ1ZSwgZmFsc2UpKQogCQlCVUcoKTsKIAltb2R1bGVfcHV0KG93bmVyKTsKIAlwcmVlbXB0X2VuYWJsZSgpOwpAQCAtOTA4LDggKzkwMCwxMCBAQAogCWlmIChjb3JlX2tlcm5lbF90ZXh0KCh1bnNpZ25lZCBsb25nKWFkZHIpKQogCQlyZXR1cm47CiAKLQlpZiAoIShtb2RhZGRyID0gbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZylhZGRyKSkpCi0JCUJVRygpOworCS8qIG1vZHVsZV90ZXh0X2FkZHJlc3MgaXMgc2FmZSBoZXJlOiB3ZSdyZSBzdXBwb3NlZCB0byBoYXZlIHJlZmVyZW5jZQorCSAqIHRvIG1vZHVsZSBmcm9tIHN5bWJvbF9nZXQsIHNvIGl0IGNhbid0IGdvIGF3YXkuICovCisJbW9kYWRkciA9IF9fbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZylhZGRyKTsKKwlCVUdfT04oIW1vZGFkZHIpOwogCW1vZHVsZV9wdXQobW9kYWRkcik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzeW1ib2xfcHV0X2FkZHIpOwpAQCAtOTQ5LDEwICs5NDMsMTEgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdXNlX21vZHVsZShzdHJ1Y3QgbW9kdWxlICphLCBzdHJ1Y3QgbW9kdWxlICpiKQoraW50IHVzZV9tb2R1bGUoc3RydWN0IG1vZHVsZSAqYSwgc3RydWN0IG1vZHVsZSAqYikKIHsKIAlyZXR1cm4gc3Ryb25nX3RyeV9tb2R1bGVfZ2V0KGIpID09IDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2VfbW9kdWxlKTsKIAogc3RhdGljIGlubGluZSB2b2lkIG1vZHVsZV91bmxvYWRfaW5pdChzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CkBAIC05OTUsMTIgKzk5MCwxMiBAQAogCiBzdGF0aWMgY29uc3QgY2hhciB2ZXJtYWdpY1tdID0gVkVSTUFHSUNfU1RSSU5HOwogCi1zdGF0aWMgaW50IHRyeV90b19mb3JjZV9sb2FkKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3QgY2hhciAqc3ltbmFtZSkKK3N0YXRpYyBpbnQgdHJ5X3RvX2ZvcmNlX2xvYWQoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpyZWFzb24pCiB7CiAjaWZkZWYgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FECiAJaWYgKCF0ZXN0X3RhaW50KFRBSU5UX0ZPUkNFRF9NT0RVTEUpKQotCQlwcmludGsoIiVzOiBubyB2ZXJzaW9uIGZvciBcIiVzXCIgZm91bmQ6IGtlcm5lbCB0YWludGVkLlxuIiwKLQkJICAgICAgIG1vZC0+bmFtZSwgc3ltbmFtZSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlczoga2VybmVsIHRhaW50ZWQuXG4iLAorCQkgICAgICAgbW9kLT5uYW1lLCByZWFzb24pOwogCWFkZF90YWludF9tb2R1bGUobW9kLCBUQUlOVF9GT1JDRURfTU9EVUxFKTsKIAlyZXR1cm4gMDsKICNlbHNlCkBAIC0xMDU3LDkgKzEwNTIsOSBAQAogewogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmNyYzsKIAotCWlmIChJU19FUlJfVkFMVUUoZmluZF9zeW1ib2woInN0cnVjdF9tb2R1bGUiLCBOVUxMLCAmY3JjLCB0cnVlLCBmYWxzZSkpKQorCWlmICghZmluZF9zeW1ib2woIm1vZHVsZV9sYXlvdXQiLCBOVUxMLCAmY3JjLCB0cnVlLCBmYWxzZSkpCiAJCUJVRygpOwotCXJldHVybiBjaGVja192ZXJzaW9uKHNlY2hkcnMsIHZlcnNpbmRleCwgInN0cnVjdF9tb2R1bGUiLCBtb2QsIGNyYyk7CisJcmV0dXJuIGNoZWNrX3ZlcnNpb24oc2VjaGRycywgdmVyc2luZGV4LCAibW9kdWxlX2xheW91dCIsIG1vZCwgY3JjKTsKIH0KIAogLyogRmlyc3QgcGFydCBpcyBrZXJuZWwgdmVyc2lvbiwgd2hpY2ggd2UgaWdub3JlIGlmIG1vZHVsZSBoYXMgY3Jjcy4gKi8KQEAgLTEwOTgsMjUgKzEwOTMsMjUgQEAKIAogLyogUmVzb2x2ZSBhIHN5bWJvbCBmb3IgdGhpcyBtb2R1bGUuICBJLmUuIGlmIHdlIGZpbmQgb25lLCByZWNvcmQgdXNhZ2UuCiAgICBNdXN0IGJlIGhvbGRpbmcgbW9kdWxlX211dGV4LiAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzb2x2ZV9zeW1ib2woRWxmX1NoZHIgKnNlY2hkcnMsCi0JCQkJICAgIHVuc2lnbmVkIGludCB2ZXJzaW5kZXgsCi0JCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgIHN0cnVjdCBtb2R1bGUgKm1vZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqcmVzb2x2ZV9zeW1ib2woRWxmX1NoZHIgKnNlY2hkcnMsCisJCQkJCQkgIHVuc2lnbmVkIGludCB2ZXJzaW5kZXgsCisJCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQkgIHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQl1bnNpZ25lZCBsb25nIHJldDsKKwljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3ltOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmNyYzsKIAotCXJldCA9IGZpbmRfc3ltYm9sKG5hbWUsICZvd25lciwgJmNyYywKKwlzeW0gPSBmaW5kX3N5bWJvbChuYW1lLCAmb3duZXIsICZjcmMsCiAJCQkgICEobW9kLT50YWludHMgJiAoMSA8PCBUQUlOVF9QUk9QUklFVEFSWV9NT0RVTEUpKSwgdHJ1ZSk7Ci0JaWYgKCFJU19FUlJfVkFMVUUocmV0KSkgewotCQkvKiB1c2VfbW9kdWxlIGNhbiBmYWlsIGR1ZSB0byBPT00sCi0JCSAgIG9yIG1vZHVsZSBpbml0aWFsaXphdGlvbiBvciB1bmxvYWRpbmcgKi8KKwkvKiB1c2VfbW9kdWxlIGNhbiBmYWlsIGR1ZSB0byBPT00sCisJICAgb3IgbW9kdWxlIGluaXRpYWxpemF0aW9uIG9yIHVubG9hZGluZyAqLworCWlmIChzeW0pIHsKIAkJaWYgKCFjaGVja192ZXJzaW9uKHNlY2hkcnMsIHZlcnNpbmRleCwgbmFtZSwgbW9kLCBjcmMpIHx8CiAJCSAgICAhdXNlX21vZHVsZShtb2QsIG93bmVyKSkKLQkJCXJldCA9IC1FSU5WQUw7CisJCQlzeW0gPSBOVUxMOwogCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiBzeW07CiB9CiAKIC8qCkBAIC0xNDkxLDYgKzE0ODYsOSBAQAogCS8qIE1vZHVsZSB1bmxvYWQgc3R1ZmYgKi8KIAltb2R1bGVfdW5sb2FkX2ZyZWUobW9kKTsKIAorCS8qIEZyZWUgYW55IGFsbG9jYXRlZCBwYXJhbWV0ZXJzLiAqLworCWRlc3Ryb3lfcGFyYW1zKG1vZC0+a3AsIG1vZC0+bnVtX2twKTsKKwogCS8qIHJlbGVhc2UgYW55IHBvaW50ZXJzIHRvIG1jb3VudCBpbiB0aGlzIG1vZHVsZSAqLwogCWZ0cmFjZV9yZWxlYXNlKG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV9zaXplKTsKIApAQCAtMTUxMywxNyArMTUxMSwxNSBAQAogdm9pZCAqX19zeW1ib2xfZ2V0KGNvbnN0IGNoYXIgKnN5bWJvbCkKIHsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKLQl1bnNpZ25lZCBsb25nIHZhbHVlOworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICpzeW07CiAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKLQl2YWx1ZSA9IGZpbmRfc3ltYm9sKHN5bWJvbCwgJm93bmVyLCBOVUxMLCB0cnVlLCB0cnVlKTsKLQlpZiAoSVNfRVJSX1ZBTFVFKHZhbHVlKSkKLQkJdmFsdWUgPSAwOwotCWVsc2UgaWYgKHN0cm9uZ190cnlfbW9kdWxlX2dldChvd25lcikpCi0JCXZhbHVlID0gMDsKKwlzeW0gPSBmaW5kX3N5bWJvbChzeW1ib2wsICZvd25lciwgTlVMTCwgdHJ1ZSwgdHJ1ZSk7CisJaWYgKHN5bSAmJiBzdHJvbmdfdHJ5X21vZHVsZV9nZXQob3duZXIpKQorCQlzeW0gPSBOVUxMOwogCXByZWVtcHRfZW5hYmxlKCk7CiAKLQlyZXR1cm4gKHZvaWQgKil2YWx1ZTsKKwlyZXR1cm4gc3ltID8gKHZvaWQgKilzeW0tPnZhbHVlIDogTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fc3ltYm9sX2dldCk7CiAKQEAgLTE1NTEsOCArMTU0Nyw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnIpOyBpKyspIHsKIAkJZm9yIChzID0gYXJyW2ldLnN5bTsgcyA8IGFycltpXS5zeW0gKyBhcnJbaV0ubnVtOyBzKyspIHsKLQkJCWlmICghSVNfRVJSX1ZBTFVFKGZpbmRfc3ltYm9sKHMtPm5hbWUsICZvd25lciwKLQkJCQkJCSAgICAgIE5VTEwsIHRydWUsIGZhbHNlKSkpIHsKKwkJCWlmIChmaW5kX3N5bWJvbChzLT5uYW1lLCAmb3duZXIsIE5VTEwsIHRydWUsIGZhbHNlKSkgewogCQkJCXByaW50ayhLRVJOX0VSUgogCQkJCSAgICAgICAiJXM6IGV4cG9ydHMgZHVwbGljYXRlIHN5bWJvbCAlcyIKIAkJCQkgICAgICAgIiAob3duZWQgYnkgJXMpXG4iLApAQCAtMTU3Niw2ICsxNTcxLDcgQEAKIAl1bnNpZ25lZCBsb25nIHNlY2Jhc2U7CiAJdW5zaWduZWQgaW50IGksIG4gPSBzZWNoZHJzW3N5bWluZGV4XS5zaF9zaXplIC8gc2l6ZW9mKEVsZl9TeW0pOwogCWludCByZXQgPSAwOworCWNvbnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sICprc3ltOwogCiAJZm9yIChpID0gMTsgaSA8IG47IGkrKykgewogCQlzd2l0Y2ggKHN5bVtpXS5zdF9zaG5keCkgewpAQCAtMTU5NSwxMyArMTU5MSwxNCBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBTSE5fVU5ERUY6Ci0JCQlzeW1baV0uc3RfdmFsdWUKLQkJCSAgPSByZXNvbHZlX3N5bWJvbChzZWNoZHJzLCB2ZXJzaW5kZXgsCi0JCQkJCSAgIHN0cnRhYiArIHN5bVtpXS5zdF9uYW1lLCBtb2QpOwotCisJCQlrc3ltID0gcmVzb2x2ZV9zeW1ib2woc2VjaGRycywgdmVyc2luZGV4LAorCQkJCQkgICAgICBzdHJ0YWIgKyBzeW1baV0uc3RfbmFtZSwgbW9kKTsKIAkJCS8qIE9rIGlmIHJlc29sdmVkLiAgKi8KLQkJCWlmICghSVNfRVJSX1ZBTFVFKHN5bVtpXS5zdF92YWx1ZSkpCisJCQlpZiAoa3N5bSkgeworCQkJCXN5bVtpXS5zdF92YWx1ZSA9IGtzeW0tPnZhbHVlOwogCQkJCWJyZWFrOworCQkJfQorCiAJCQkvKiBPayBpZiB3ZWFrLiAgKi8KIAkJCWlmIChFTEZfU1RfQklORChzeW1baV0uc3RfaW5mbykgPT0gU1RCX1dFQUspCiAJCQkJYnJlYWs7CkBAIC0xNjc2LDggKzE2NzMsNyBAQAogCQkJaWYgKChzLT5zaF9mbGFncyAmIG1hc2tzW21dWzBdKSAhPSBtYXNrc1ttXVswXQogCQkJICAgIHx8IChzLT5zaF9mbGFncyAmIG1hc2tzW21dWzFdKQogCQkJICAgIHx8IHMtPnNoX2VudHNpemUgIT0gfjBVTAotCQkJICAgIHx8IHN0cm5jbXAoc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUsCi0JCQkJICAgICAgICIuaW5pdCIsIDUpID09IDApCisJCQkgICAgfHwgc3Ryc3RhcnRzKHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lLCAiLmluaXQiKSkKIAkJCQljb250aW51ZTsKIAkJCXMtPnNoX2VudHNpemUgPSBnZXRfb2Zmc2V0KG1vZCwgJm1vZC0+Y29yZV9zaXplLCBzLCBpKTsKIAkJCURFQlVHUCgiXHQlc1xuIiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpOwpAQCAtMTY5NCw4ICsxNjkwLDcgQEAKIAkJCWlmICgocy0+c2hfZmxhZ3MgJiBtYXNrc1ttXVswXSkgIT0gbWFza3NbbV1bMF0KIAkJCSAgICB8fCAocy0+c2hfZmxhZ3MgJiBtYXNrc1ttXVsxXSkKIAkJCSAgICB8fCBzLT5zaF9lbnRzaXplICE9IH4wVUwKLQkJCSAgICB8fCBzdHJuY21wKHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lLAotCQkJCSAgICAgICAiLmluaXQiLCA1KSAhPSAwKQorCQkJICAgIHx8ICFzdHJzdGFydHMoc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUsICIuaW5pdCIpKQogCQkJCWNvbnRpbnVlOwogCQkJcy0+c2hfZW50c2l6ZSA9IChnZXRfb2Zmc2V0KG1vZCwgJm1vZC0+aW5pdF9zaXplLCBzLCBpKQogCQkJCQkgfCBJTklUX09GRlNFVF9NQVNLKTsKQEAgLTE4MjgsOCArMTgyMyw3IEBACiAJCWVsc2UKIAkJCXJldHVybiAnYic7CiAJfQotCWlmIChzdHJuY21wKHNlY3N0cmluZ3MgKyBzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX25hbWUsCi0JCSAgICAiLmRlYnVnIiwgc3RybGVuKCIuZGVidWciKSkgPT0gMCkKKwlpZiAoc3Ryc3RhcnRzKHNlY3N0cmluZ3MgKyBzZWNoZHJzW3N5bS0+c3Rfc2huZHhdLnNoX25hbWUsICIuZGVidWciKSkKIAkJcmV0dXJuICduJzsKIAlyZXR1cm4gJz8nOwogfQpAQCAtMTg5OCw4ICsxODkyLDcgQEAKIAl1bnNpZ25lZCBpbnQgc3ltaW5kZXggPSAwOwogCXVuc2lnbmVkIGludCBzdHJpbmRleCA9IDA7CiAJdW5zaWduZWQgaW50IG1vZGluZGV4LCB2ZXJzaW5kZXgsIGluZm9pbmRleCwgcGNwdWluZGV4OwotCXVuc2lnbmVkIGludCBudW1fa3AsIG51bV9tY291bnQ7Ci0Jc3RydWN0IGtlcm5lbF9wYXJhbSAqa3A7CisJdW5zaWduZWQgaW50IG51bV9tY291bnQ7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCWxvbmcgZXJyID0gMDsKIAl2b2lkICpwZXJjcHUgPSBOVUxMLCAqcHRyID0gTlVMTDsgLyogU3RvcHMgc3B1cmlvdXMgZ2NjIHdhcm5pbmcgKi8KQEAgLTE5MTYsMTIgKzE5MDksNiBAQAogCWlmIChsZW4gPiA2NCAqIDEwMjQgKiAxMDI0IHx8IChoZHIgPSB2bWFsbG9jKGxlbikpID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JLyogQ3JlYXRlIHN0b3BfbWFjaGluZSB0aHJlYWRzIHNpbmNlIHRoZSBlcnJvciBwYXRoIHJlbGllcyBvbgotCSAqIGEgbm9uLWZhaWxpbmcgc3RvcF9tYWNoaW5lIGNhbGwuICovCi0JZXJyID0gc3RvcF9tYWNoaW5lX2NyZWF0ZSgpOwotCWlmIChlcnIpCi0JCWdvdG8gZnJlZV9oZHI7Ci0KIAlpZiAoY29weV9mcm9tX3VzZXIoaGRyLCB1bW9kLCBsZW4pICE9IDApIHsKIAkJZXJyID0gLUVGQVVMVDsKIAkJZ290byBmcmVlX2hkcjsKQEAgLTE5NjIsOSArMTk0OSwxMiBAQAogCQl9CiAjaWZuZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECiAJCS8qIERvbid0IGxvYWQgLmV4aXQgc2VjdGlvbnMgKi8KLQkJaWYgKHN0cm5jbXAoc2Vjc3RyaW5ncytzZWNoZHJzW2ldLnNoX25hbWUsICIuZXhpdCIsIDUpID09IDApCisJCWlmIChzdHJzdGFydHMoc2Vjc3RyaW5ncytzZWNoZHJzW2ldLnNoX25hbWUsICIuZXhpdCIpKQogCQkJc2VjaGRyc1tpXS5zaF9mbGFncyAmPSB+KHVuc2lnbmVkIGxvbmcpU0hGX0FMTE9DOwogI2VuZGlmCisJCS8qIERvbid0IGtlZXAgX192ZXJzaW9ucyBhcm91bmQ7IGl0J3MganVzdCBmb3IgbG9hZGluZy4gKi8KKwkJaWYgKHN0cmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLCAiX192ZXJzaW9ucyIpID09IDApCisJCQlzZWNoZHJzW2ldLnNoX2ZsYWdzICY9IH4odW5zaWduZWQgbG9uZylTSEZfQUxMT0M7CiAJfQogCiAJbW9kaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsCkBAIC0yMDA2LDcgKzE5OTYsNyBAQAogCW1vZG1hZ2ljID0gZ2V0X21vZGluZm8oc2VjaGRycywgaW5mb2luZGV4LCAidmVybWFnaWMiKTsKIAkvKiBUaGlzIGlzIGFsbG93ZWQ6IG1vZHByb2JlIC0tZm9yY2Ugd2lsbCBpbnZhbGlkYXRlIGl0LiAqLwogCWlmICghbW9kbWFnaWMpIHsKLQkJZXJyID0gdHJ5X3RvX2ZvcmNlX2xvYWQobW9kLCAibWFnaWMiKTsKKwkJZXJyID0gdHJ5X3RvX2ZvcmNlX2xvYWQobW9kLCAiYmFkIHZlcm1hZ2ljIik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGZyZWVfaGRyOwogCX0gZWxzZSBpZiAoIXNhbWVfbWFnaWMobW9kbWFnaWMsIHZlcm1hZ2ljLCB2ZXJzaW5kZXgpKSB7CkBAIC0yMTQ0LDggKzIxMzQsOCBAQAogCiAJLyogTm93IHdlJ3ZlIGdvdCBldmVyeXRoaW5nIGluIHRoZSBmaW5hbCBsb2NhdGlvbnMsIHdlIGNhbgogCSAqIGZpbmQgb3B0aW9uYWwgc2VjdGlvbnMuICovCi0Ja3AgPSBzZWN0aW9uX29ianMoaGRyLCBzZWNoZHJzLCBzZWNzdHJpbmdzLCAiX19wYXJhbSIsIHNpemVvZigqa3ApLAotCQkJICAmbnVtX2twKTsKKwltb2QtPmtwID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fcGFyYW0iLAorCQkJICAgICAgIHNpemVvZigqbW9kLT5rcCksICZtb2QtPm51bV9rcCk7CiAJbW9kLT5zeW1zID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fa3N5bXRhYiIsCiAJCQkJIHNpemVvZigqbW9kLT5zeW1zKSwgJm1vZC0+bnVtX3N5bXMpOwogCW1vZC0+Y3JjcyA9IHNlY3Rpb25fYWRkcihoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX2tjcmN0YWIiKTsKQEAgLTIxOTUsOCArMjE4NSw4IEBACiAJICAgIHx8IChtb2QtPm51bV91bnVzZWRfZ3BsX3N5bXMgJiYgIW1vZC0+dW51c2VkX2dwbF9jcmNzKQogI2VuZGlmCiAJCSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm8gdmVyc2lvbnMgZm9yIGV4cG9ydGVkIHN5bWJvbHMuXG4iLCBtb2QtPm5hbWUpOwotCQllcnIgPSB0cnlfdG9fZm9yY2VfbG9hZChtb2QsICJub2NyYyIpOworCQllcnIgPSB0cnlfdG9fZm9yY2VfbG9hZChtb2QsCisJCQkJCSJubyB2ZXJzaW9ucyBmb3IgZXhwb3J0ZWQgc3ltYm9scyIpOwogCQlpZiAoZXJyKQogCQkJZ290byBjbGVhbnVwOwogCX0KQEAgLTIyOTEsMTEgKzIyODEsMTEgQEAKIAkgKi8KIAlsaXN0X2FkZF9yY3UoJm1vZC0+bGlzdCwgJm1vZHVsZXMpOwogCi0JZXJyID0gcGFyc2VfYXJncyhtb2QtPm5hbWUsIG1vZC0+YXJncywga3AsIG51bV9rcCwgTlVMTCk7CisJZXJyID0gcGFyc2VfYXJncyhtb2QtPm5hbWUsIG1vZC0+YXJncywgbW9kLT5rcCwgbW9kLT5udW1fa3AsIE5VTEwpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIHVubGluazsKIAotCWVyciA9IG1vZF9zeXNmc19zZXR1cChtb2QsIGtwLCBudW1fa3ApOworCWVyciA9IG1vZF9zeXNmc19zZXR1cChtb2QsIG1vZC0+a3AsIG1vZC0+bnVtX2twKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byB1bmxpbms7CiAJYWRkX3NlY3RfYXR0cnMobW9kLCBoZHItPmVfc2hudW0sIHNlY3N0cmluZ3MsIHNlY2hkcnMpOwpAQCAtMjMwNCwxMiArMjI5NCwxMyBAQAogCS8qIEdldCByaWQgb2YgdGVtcG9yYXJ5IGNvcHkgKi8KIAl2ZnJlZShoZHIpOwogCi0Jc3RvcF9tYWNoaW5lX2Rlc3Ryb3koKTsKIAkvKiBEb25lISAqLwogCXJldHVybiBtb2Q7CiAKICB1bmxpbms6Ci0Jc3RvcF9tYWNoaW5lKF9fdW5saW5rX21vZHVsZSwgbW9kLCBOVUxMKTsKKwkvKiBVbmxpbmsgY2FyZWZ1bGx5OiBrYWxsc3ltcyBjb3VsZCBiZSB3YWxraW5nIGxpc3QuICovCisJbGlzdF9kZWxfcmN1KCZtb2QtPmxpc3QpOworCXN5bmNocm9uaXplX3NjaGVkKCk7CiAJbW9kdWxlX2FyY2hfY2xlYW51cChtb2QpOwogIGNsZWFudXA6CiAJa29iamVjdF9kZWwoJm1vZC0+bWtvYmoua29iaik7CkBAIC0yMzE3LDggKzIzMDgsOCBAQAogCWZ0cmFjZV9yZWxlYXNlKG1vZC0+bW9kdWxlX2NvcmUsIG1vZC0+Y29yZV9zaXplKTsKICBmcmVlX3VubG9hZDoKIAltb2R1bGVfdW5sb2FkX2ZyZWUobW9kKTsKLSBmcmVlX2luaXQ6CiAjaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFX1VOTE9BRCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorIGZyZWVfaW5pdDoKIAlwZXJjcHVfbW9kZnJlZShtb2QtPnJlZnB0cik7CiAjZW5kaWYKIAltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2luaXQpOwpAQCAtMjMzMiw3ICsyMzIzLDYgQEAKIAlrZnJlZShhcmdzKTsKICBmcmVlX2hkcjoKIAl2ZnJlZShoZHIpOwotCXN0b3BfbWFjaGluZV9kZXN0cm95KCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAogIHRydW5jYXRlZDoKQEAgLTI2MDksNiArMjU5OSwyNSBAQAogCXByZWVtcHRfZW5hYmxlKCk7CiAJcmV0dXJuIHJldDsKIH0KKworaW50IG1vZHVsZV9rYWxsc3ltc19vbl9lYWNoX3N5bWJvbChpbnQgKCpmbikodm9pZCAqLCBjb25zdCBjaGFyICosCisJCQkJCSAgICAgc3RydWN0IG1vZHVsZSAqLCB1bnNpZ25lZCBsb25nKSwKKwkJCQkgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtb2R1bGUgKm1vZDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmV0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZtb2R1bGVzLCBsaXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9zeW10YWI7IGkrKykgeworCQkJcmV0ID0gZm4oZGF0YSwgbW9kLT5zdHJ0YWIgKyBtb2QtPnN5bXRhYltpXS5zdF9uYW1lLAorCQkJCSBtb2QsIG1vZC0+c3ltdGFiW2ldLnN0X3ZhbHVlKTsKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVybiAwOworfQogI2VuZGlmIC8qIENPTkZJR19LQUxMU1lNUyAqLwogCiBzdGF0aWMgY2hhciAqbW9kdWxlX2ZsYWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAqYnVmKQpAQCAtMjc0NCwyOSArMjc1MywzMSBAQAogfQogCiAvKgotICogSXMgdGhpcyBhIHZhbGlkIG1vZHVsZSBhZGRyZXNzPworICogaXNfbW9kdWxlX2FkZHJlc3MgLSBpcyB0aGlzIGFkZHJlc3MgaW5zaWRlIGEgbW9kdWxlPworICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIGNoZWNrLgorICoKKyAqIFNlZSBpc19tb2R1bGVfdGV4dF9hZGRyZXNzKCkgaWYgeW91IHNpbXBseSB3YW50IHRvIHNlZSBpZiB0aGUgYWRkcmVzcworICogaXMgY29kZSAobm90IGRhdGEpLgogICovCi1pbnQgaXNfbW9kdWxlX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQorYm9vbCBpc19tb2R1bGVfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0Jc3RydWN0IG1vZHVsZSAqbW9kOworCWJvb2wgcmV0OwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtb2QsICZtb2R1bGVzLCBsaXN0KSB7Ci0JCWlmICh3aXRoaW5fbW9kdWxlX2NvcmUoYWRkciwgbW9kKSkgewotCQkJcHJlZW1wdF9lbmFibGUoKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCisJcmV0ID0gX19tb2R1bGVfYWRkcmVzcyhhZGRyKSAhPSBOVUxMOwogCXByZWVtcHRfZW5hYmxlKCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCi0KLS8qIElzIHRoaXMgYSB2YWxpZCBrZXJuZWwgYWRkcmVzcz8gKi8KLV9fbm90cmFjZV9mdW5jZ3JhcGggc3RydWN0IG1vZHVsZSAqX19tb2R1bGVfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKKy8qCisgKiBfX21vZHVsZV9hZGRyZXNzIC0gZ2V0IHRoZSBtb2R1bGUgd2hpY2ggY29udGFpbnMgYW4gYWRkcmVzcy4KKyAqIEBhZGRyOiB0aGUgYWRkcmVzcy4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHQgZGlzYWJsZWQgb3IgbW9kdWxlIG11dGV4IGhlbGQgc28gdGhhdAorICogbW9kdWxlIGRvZXNuJ3QgZ2V0IGZyZWVkIGR1cmluZyB0aGlzLgorICovCitzdHJ1Y3QgbW9kdWxlICpfX21vZHVsZV9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAKQEAgLTI3NzQsMjIgKzI3ODUsNTEgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtb2QsICZtb2R1bGVzLCBsaXN0KQotCQlpZiAod2l0aGluKGFkZHIsIG1vZC0+bW9kdWxlX2luaXQsIG1vZC0+aW5pdF90ZXh0X3NpemUpCi0JCSAgICB8fCB3aXRoaW4oYWRkciwgbW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3RleHRfc2l6ZSkpCisJCWlmICh3aXRoaW5fbW9kdWxlX2NvcmUoYWRkciwgbW9kKQorCQkgICAgfHwgd2l0aGluX21vZHVsZV9pbml0KGFkZHIsIG1vZCkpCiAJCQlyZXR1cm4gbW9kOwogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoX19tb2R1bGVfYWRkcmVzcyk7CiAKLXN0cnVjdCBtb2R1bGUgKm1vZHVsZV90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKQorLyoKKyAqIGlzX21vZHVsZV90ZXh0X2FkZHJlc3MgLSBpcyB0aGlzIGFkZHJlc3MgaW5zaWRlIG1vZHVsZSBjb2RlPworICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIGNoZWNrLgorICoKKyAqIFNlZSBpc19tb2R1bGVfYWRkcmVzcygpIGlmIHlvdSBzaW1wbHkgd2FudCB0byBzZWUgaWYgdGhlIGFkZHJlc3MgaXMKKyAqIGFueXdoZXJlIGluIGEgbW9kdWxlLiAgU2VlIGtlcm5lbF90ZXh0X2FkZHJlc3MoKSBmb3IgdGVzdGluZyBpZiBhbgorICogYWRkcmVzcyBjb3JyZXNwb25kcyB0byBrZXJuZWwgb3IgbW9kdWxlIGNvZGUuCisgKi8KK2Jvb2wgaXNfbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0Jc3RydWN0IG1vZHVsZSAqbW9kOworCWJvb2wgcmV0OwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JbW9kID0gX19tb2R1bGVfdGV4dF9hZGRyZXNzKGFkZHIpOworCXJldCA9IF9fbW9kdWxlX3RleHRfYWRkcmVzcyhhZGRyKSAhPSBOVUxMOwogCXByZWVtcHRfZW5hYmxlKCk7CiAKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogX19tb2R1bGVfdGV4dF9hZGRyZXNzIC0gZ2V0IHRoZSBtb2R1bGUgd2hvc2UgY29kZSBjb250YWlucyBhbiBhZGRyZXNzLgorICogQGFkZHI6IHRoZSBhZGRyZXNzLgorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggcHJlZW1wdCBkaXNhYmxlZCBvciBtb2R1bGUgbXV0ZXggaGVsZCBzbyB0aGF0CisgKiBtb2R1bGUgZG9lc24ndCBnZXQgZnJlZWQgZHVyaW5nIHRoaXMuCisgKi8KK3N0cnVjdCBtb2R1bGUgKl9fbW9kdWxlX3RleHRfYWRkcmVzcyh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IG1vZHVsZSAqbW9kID0gX19tb2R1bGVfYWRkcmVzcyhhZGRyKTsKKwlpZiAobW9kKSB7CisJCS8qIE1ha2Ugc3VyZSBpdCdzIHdpdGhpbiB0aGUgdGV4dCBzZWN0aW9uLiAqLworCQlpZiAoIXdpdGhpbihhZGRyLCBtb2QtPm1vZHVsZV9pbml0LCBtb2QtPmluaXRfdGV4dF9zaXplKQorCQkgICAgJiYgIXdpdGhpbihhZGRyLCBtb2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfdGV4dF9zaXplKSkKKwkJCW1vZCA9IE5VTEw7CisJfQogCXJldHVybiBtb2Q7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChfX21vZHVsZV90ZXh0X2FkZHJlc3MpOwogCiAvKiBEb24ndCBncmFiIGxvY2ssIHdlJ3JlIG9vcHNpbmcuICovCiB2b2lkIHByaW50X21vZHVsZXModm9pZCkKQEAgLTI4MDksOSArMjg0OSwxNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX01PRFZFUlNJT05TCi0vKiBHZW5lcmF0ZSB0aGUgc2lnbmF0dXJlIGZvciBzdHJ1Y3QgbW9kdWxlIGhlcmUsIHRvbywgZm9yIG1vZHZlcnNpb25zLiAqLwotdm9pZCBzdHJ1Y3RfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkgeyByZXR1cm47IH0KLUVYUE9SVF9TWU1CT0woc3RydWN0X21vZHVsZSk7CisvKiBHZW5lcmF0ZSB0aGUgc2lnbmF0dXJlIGZvciBhbGwgcmVsZXZhbnQgbW9kdWxlIHN0cnVjdHVyZXMgaGVyZS4KKyAqIElmIHRoZXNlIGNoYW5nZSwgd2UgZG9uJ3Qgd2FudCB0byB0cnkgdG8gcGFyc2UgdGhlIG1vZHVsZS4gKi8KK3ZvaWQgbW9kdWxlX2xheW91dChzdHJ1Y3QgbW9kdWxlICptb2QsCisJCSAgIHN0cnVjdCBtb2R2ZXJzaW9uX2luZm8gKnZlciwKKwkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3AsCisJCSAgIHN0cnVjdCBrZXJuZWxfc3ltYm9sICprcywKKwkJICAgc3RydWN0IG1hcmtlciAqbWFya2VyLAorCQkgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqdHApCit7Cit9CitFWFBPUlRfU1lNQk9MKG1vZHVsZV9sYXlvdXQpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUFSS0VSUwpkaWZmIC0tZ2l0IGEva2VybmVsL25zX2Nncm91cC5jIGIva2VybmVsL25zX2Nncm91cC5jCmluZGV4IDc4YmMzZmQuLjVhYTg1NGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9uc19jZ3JvdXAuYworKysgYi9rZXJuZWwvbnNfY2dyb3VwLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAogLyoKICAqIFJ1bGVzOgotICogICAxLiB5b3UgY2FuIG9ubHkgZW50ZXIgYSBjZ3JvdXAgd2hpY2ggaXMgYSBjaGlsZCBvZiB5b3VyIGN1cnJlbnQKKyAqICAgMS4geW91IGNhbiBvbmx5IGVudGVyIGEgY2dyb3VwIHdoaWNoIGlzIGEgZGVzY2VuZGFudCBvZiB5b3VyIGN1cnJlbnQKICAqICAgICBjZ3JvdXAKICAqICAgMi4geW91IGNhbiBvbmx5IHBsYWNlIGFub3RoZXIgcHJvY2VzcyBpbnRvIGEgY2dyb3VwIGlmCiAgKiAgICAgYS4geW91IGhhdmUgQ0FQX1NZU19BRE1JTgpAQCAtNDUsMjEgKzQ1LDE1IEBACiBzdGF0aWMgaW50IG5zX2Nhbl9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAogCQlzdHJ1Y3QgY2dyb3VwICpuZXdfY2dyb3VwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7Ci0Jc3RydWN0IGNncm91cCAqb3JpZzsKLQogCWlmIChjdXJyZW50ICE9IHRhc2spIHsKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIAotCQlpZiAoIWNncm91cF9pc19kZXNjZW5kYW50KG5ld19jZ3JvdXApKQorCQlpZiAoIWNncm91cF9pc19kZXNjZW5kYW50KG5ld19jZ3JvdXAsIGN1cnJlbnQpKQogCQkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKLQlpZiAoYXRvbWljX3JlYWQoJm5ld19jZ3JvdXAtPmNvdW50KSAhPSAwKQotCQlyZXR1cm4gLUVQRVJNOwotCi0Jb3JpZyA9IHRhc2tfY2dyb3VwKHRhc2ssIG5zX3N1YnN5c19pZCk7Ci0JaWYgKG9yaWcgJiYgb3JpZyAhPSBuZXdfY2dyb3VwLT5wYXJlbnQpCisJaWYgKCFjZ3JvdXBfaXNfZGVzY2VuZGFudChuZXdfY2dyb3VwLCB0YXNrKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCXJldHVybiAwOwpAQCAtNzcsNyArNzEsNyBAQAogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gRVJSX1BUUigtRVBFUk0pOwotCWlmICghY2dyb3VwX2lzX2Rlc2NlbmRhbnQoY2dyb3VwKSkKKwlpZiAoIWNncm91cF9pc19kZXNjZW5kYW50KGNncm91cCwgY3VycmVudCkpCiAJCXJldHVybiBFUlJfUFRSKC1FUEVSTSk7CiAKIAluc19jZ3JvdXAgPSBremFsbG9jKHNpemVvZigqbnNfY2dyb3VwKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IDMyZmU0ZWYuLjNmZDhjNWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC04LDE5ICs4LDE5IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdGhyb3VnaC1vdXQgdGhlIGtlcm5lbCAoaW5jbHVkaW5nIG1tIGFuZCBmcykKICAqIHRvIGluZGljYXRlIGEgbWFqb3IgcHJvYmxlbS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L25taS5oPgotI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbm1pLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKIGludCBwYW5pY19vbl9vb3BzOwpAQCAtNTIsMTkgKzUyLDE1IEBACiAgKgogICoJVGhpcyBmdW5jdGlvbiBuZXZlciByZXR1cm5zLgogICovCi0KIE5PUkVUX1RZUEUgdm9pZCBwYW5pYyhjb25zdCBjaGFyICogZm10LCAuLi4pCiB7Ci0JbG9uZyBpOwogCXN0YXRpYyBjaGFyIGJ1ZlsxMDI0XTsKIAl2YV9saXN0IGFyZ3M7Ci0jaWYgZGVmaW5lZChDT05GSUdfUzM5MCkKLQl1bnNpZ25lZCBsb25nIGNhbGxlciA9ICh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7Ci0jZW5kaWYKKwlsb25nIGk7CiAKIAkvKgotCSAqIEl0J3MgcG9zc2libGUgdG8gY29tZSBoZXJlIGRpcmVjdGx5IGZyb20gYSBwYW5pYy1hc3NlcnRpb24gYW5kIG5vdAotCSAqIGhhdmUgcHJlZW1wdCBkaXNhYmxlZC4gU29tZSBmdW5jdGlvbnMgY2FsbGVkIGZyb20gaGVyZSB3YW50CisJICogSXQncyBwb3NzaWJsZSB0byBjb21lIGhlcmUgZGlyZWN0bHkgZnJvbSBhIHBhbmljLWFzc2VydGlvbiBhbmQKKwkgKiBub3QgaGF2ZSBwcmVlbXB0IGRpc2FibGVkLiBTb21lIGZ1bmN0aW9ucyBjYWxsZWQgZnJvbSBoZXJlIHdhbnQKIAkgKiBwcmVlbXB0IHRvIGJlIGRpc2FibGVkLiBObyBwb2ludCBlbmFibGluZyBpdCBsYXRlciB0aG91Z2guLi4KIAkgKi8KIAlwcmVlbXB0X2Rpc2FibGUoKTsKQEAgLTc3LDcgKzczLDYgQEAKICNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQogCWR1bXBfc3RhY2soKTsKICNlbmRpZgotCWJ1c3Rfc3BpbmxvY2tzKDApOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIGNyYXNoZWQgYW5kIHdlIGhhdmUgYSBjcmFzaCBrZXJuZWwgbG9hZGVkIGxldCBpdCBoYW5kbGUKQEAgLTg2LDE0ICs4MSwxMiBAQAogCSAqLwogCWNyYXNoX2tleGVjKE5VTEwpOwogCi0jaWZkZWYgQ09ORklHX1NNUAogCS8qCiAJICogTm90ZSBzbXBfc2VuZF9zdG9wIGlzIHRoZSB1c3VhbCBzbXAgc2h1dGRvd24gZnVuY3Rpb24sIHdoaWNoCiAJICogdW5mb3J0dW5hdGVseSBtZWFucyBpdCBtYXkgbm90IGJlIGhhcmRlbmVkIHRvIHdvcmsgaW4gYSBwYW5pYwogCSAqIHNpdHVhdGlvbi4KIAkgKi8KIAlzbXBfc2VuZF9zdG9wKCk7Ci0jZW5kaWYKIAogCWF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZwYW5pY19ub3RpZmllcl9saXN0LCAwLCBidWYpOwogCkBAIC0xMDIsMTkgKzk1LDIxIEBACiAKIAlpZiAocGFuaWNfdGltZW91dCA+IDApIHsKIAkJLyoKLQkgCSAqIERlbGF5IHRpbWVvdXQgc2Vjb25kcyBiZWZvcmUgcmVib290aW5nIHRoZSBtYWNoaW5lLiAKLQkJICogV2UgY2FuJ3QgdXNlIHRoZSAibm9ybWFsIiB0aW1lcnMgc2luY2Ugd2UganVzdCBwYW5pY2tlZC4uCi0JIAkgKi8KLQkJcHJpbnRrKEtFUk5fRU1FUkcgIlJlYm9vdGluZyBpbiAlZCBzZWNvbmRzLi4iLHBhbmljX3RpbWVvdXQpOworCQkgKiBEZWxheSB0aW1lb3V0IHNlY29uZHMgYmVmb3JlIHJlYm9vdGluZyB0aGUgbWFjaGluZS4KKwkJICogV2UgY2FuJ3QgdXNlIHRoZSAibm9ybWFsIiB0aW1lcnMgc2luY2Ugd2UganVzdCBwYW5pY2tlZC4KKwkJICovCisJCXByaW50ayhLRVJOX0VNRVJHICJSZWJvb3RpbmcgaW4gJWQgc2Vjb25kcy4uIiwgcGFuaWNfdGltZW91dCk7CisKIAkJZm9yIChpID0gMDsgaSA8IHBhbmljX3RpbWVvdXQqMTAwMDsgKSB7CiAJCQl0b3VjaF9ubWlfd2F0Y2hkb2coKTsKIAkJCWkgKz0gcGFuaWNfYmxpbmsoaSk7CiAJCQltZGVsYXkoMSk7CiAJCQlpKys7CiAJCX0KLQkJLyoJVGhpcyB3aWxsIG5vdCBiZSBhIGNsZWFuIHJlYm9vdCwgd2l0aCBldmVyeXRoaW5nCi0JCSAqCXNodXR0aW5nIGRvd24uICBCdXQgaWYgdGhlcmUgaXMgYSBjaGFuY2Ugb2YKLQkJICoJcmVib290aW5nIHRoZSBzeXN0ZW0gaXQgd2lsbCBiZSByZWJvb3RlZC4KKwkJLyoKKwkJICogVGhpcyB3aWxsIG5vdCBiZSBhIGNsZWFuIHJlYm9vdCwgd2l0aCBldmVyeXRoaW5nCisJCSAqIHNodXR0aW5nIGRvd24uICBCdXQgaWYgdGhlcmUgaXMgYSBjaGFuY2Ugb2YKKwkJICogcmVib290aW5nIHRoZSBzeXN0ZW0gaXQgd2lsbCBiZSByZWJvb3RlZC4KIAkJICovCiAJCWVtZXJnZW5jeV9yZXN0YXJ0KCk7CiAJfQpAQCAtMTI3LDM4ICsxMjIsNDQgQEAKIAl9CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19TMzkwKQotCWRpc2FibGVkX3dhaXQoY2FsbGVyKTsKKwl7CisJCXVuc2lnbmVkIGxvbmcgY2FsbGVyOworCisJCWNhbGxlciA9ICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKwkJZGlzYWJsZWRfd2FpdChjYWxsZXIpOworCX0KICNlbmRpZgogCWxvY2FsX2lycV9lbmFibGUoKTsKLQlmb3IgKGkgPSAwOzspIHsKKwlmb3IgKGkgPSAwOyA7ICkgewogCQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CiAJCWkgKz0gcGFuaWNfYmxpbmsoaSk7CiAJCW1kZWxheSgxKTsKIAkJaSsrOwogCX0KKwlidXN0X3NwaW5sb2NrcygwKTsKIH0KIAogRVhQT1JUX1NZTUJPTChwYW5pYyk7CiAKIAogc3RydWN0IHRudCB7Ci0JdTggYml0OwotCWNoYXIgdHJ1ZTsKLQljaGFyIGZhbHNlOworCXU4CWJpdDsKKwljaGFyCXRydWU7CisJY2hhcglmYWxzZTsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdG50IHRudHNbXSA9IHsKLQl7IFRBSU5UX1BST1BSSUVUQVJZX01PRFVMRSwgJ1AnLCAnRycgfSwKLQl7IFRBSU5UX0ZPUkNFRF9NT0RVTEUsICdGJywgJyAnIH0sCi0JeyBUQUlOVF9VTlNBRkVfU01QLCAnUycsICcgJyB9LAotCXsgVEFJTlRfRk9SQ0VEX1JNTU9ELCAnUicsICcgJyB9LAotCXsgVEFJTlRfTUFDSElORV9DSEVDSywgJ00nLCAnICcgfSwKLQl7IFRBSU5UX0JBRF9QQUdFLCAnQicsICcgJyB9LAotCXsgVEFJTlRfVVNFUiwgJ1UnLCAnICcgfSwKLQl7IFRBSU5UX0RJRSwgJ0QnLCAnICcgfSwKLQl7IFRBSU5UX09WRVJSSURERU5fQUNQSV9UQUJMRSwgJ0EnLCAnICcgfSwKLQl7IFRBSU5UX1dBUk4sICdXJywgJyAnIH0sCi0JeyBUQUlOVF9DUkFQLCAnQycsICcgJyB9LAorCXsgVEFJTlRfUFJPUFJJRVRBUllfTU9EVUxFLAknUCcsICdHJyB9LAorCXsgVEFJTlRfRk9SQ0VEX01PRFVMRSwJCSdGJywgJyAnIH0sCisJeyBUQUlOVF9VTlNBRkVfU01QLAkJJ1MnLCAnICcgfSwKKwl7IFRBSU5UX0ZPUkNFRF9STU1PRCwJCSdSJywgJyAnIH0sCisJeyBUQUlOVF9NQUNISU5FX0NIRUNLLAkJJ00nLCAnICcgfSwKKwl7IFRBSU5UX0JBRF9QQUdFLAkJJ0InLCAnICcgfSwKKwl7IFRBSU5UX1VTRVIsCQkJJ1UnLCAnICcgfSwKKwl7IFRBSU5UX0RJRSwJCQknRCcsICcgJyB9LAorCXsgVEFJTlRfT1ZFUlJJRERFTl9BQ1BJX1RBQkxFLAknQScsICcgJyB9LAorCXsgVEFJTlRfV0FSTiwJCQknVycsICcgJyB9LAorCXsgVEFJTlRfQ1JBUCwJCQknQycsICcgJyB9LAogfTsKIAogLyoqCkBAIC0xOTUsNyArMTk2LDggQEAKIAkJKnMgPSAwOwogCX0gZWxzZQogCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiTm90IHRhaW50ZWQiKTsKLQlyZXR1cm4oYnVmKTsKKworCXJldHVybiBidWY7CiB9CiAKIGludCB0ZXN0X3RhaW50KHVuc2lnbmVkIGZsYWcpCkBAIC0yMTEsNyArMjEzLDggQEAKIAogdm9pZCBhZGRfdGFpbnQodW5zaWduZWQgZmxhZykKIHsKLQlkZWJ1Z19sb2NrcyA9IDA7IC8qIGNhbid0IHRydXN0IHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGtlcm5lbCBhbnltb3JlICovCisJLyogY2FuJ3QgdHJ1c3QgdGhlIGludGVncml0eSBvZiB0aGUga2VybmVsIGFueW1vcmU6ICovCisJZGVidWdfbG9ja3MgPSAwOwogCXNldF9iaXQoZmxhZywgJnRhaW50ZWRfbWFzayk7CiB9CiBFWFBPUlRfU1lNQk9MKGFkZF90YWludCk7CkBAIC0yNjYsOCArMjY5LDggQEAKIH0KIAogLyoKLSAqIFJldHVybiB0cnVlIGlmIHRoZSBjYWxsaW5nIENQVSBpcyBhbGxvd2VkIHRvIHByaW50IG9vcHMtcmVsYXRlZCBpbmZvLiAgVGhpcwotICogaXMgYSBiaXQgcmFjeS4uCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY2FsbGluZyBDUFUgaXMgYWxsb3dlZCB0byBwcmludCBvb3BzLXJlbGF0ZWQgaW5mby4KKyAqIFRoaXMgaXMgYSBiaXQgcmFjeS4uCiAgKi8KIGludCBvb3BzX21heV9wcmludCh2b2lkKQogewpAQCAtMjc2LDIwICsyNzksMjIgQEAKIAogLyoKICAqIENhbGxlZCB3aGVuIHRoZSBhcmNoaXRlY3R1cmUgZW50ZXJzIGl0cyBvb3BzIGhhbmRsZXIsIGJlZm9yZSBpdCBwcmludHMKLSAqIGFueXRoaW5nLiAgSWYgdGhpcyBpcyB0aGUgZmlyc3QgQ1BVIHRvIG9vcHMsIGFuZCBpdCdzIG9vcHNpbmcgdGhlIGZpcnN0IHRpbWUKLSAqIHRoZW4gbGV0IGl0IHByb2NlZWQuCisgKiBhbnl0aGluZy4gIElmIHRoaXMgaXMgdGhlIGZpcnN0IENQVSB0byBvb3BzLCBhbmQgaXQncyBvb3BzaW5nIHRoZSBmaXJzdAorICogdGltZSB0aGVuIGxldCBpdCBwcm9jZWVkLgogICoKLSAqIFRoaXMgaXMgYWxsIGVuYWJsZWQgYnkgdGhlIHBhdXNlX29uX29vcHMga2VybmVsIGJvb3Qgb3B0aW9uLiAgV2UgZG8gYWxsIHRoaXMKLSAqIHRvIGVuc3VyZSB0aGF0IG9vcHNlcyBkb24ndCBzY3JvbGwgb2ZmIHRoZSBzY3JlZW4uICBJdCBoYXMgdGhlIHNpZGUtZWZmZWN0Ci0gKiBvZiBwcmV2ZW50aW5nIGxhdGVyLW9vcHNpbmcgQ1BVcyBmcm9tIG11Y2tpbmcgdXAgdGhlIGRpc3BsYXksIHRvby4KKyAqIFRoaXMgaXMgYWxsIGVuYWJsZWQgYnkgdGhlIHBhdXNlX29uX29vcHMga2VybmVsIGJvb3Qgb3B0aW9uLiAgV2UgZG8gYWxsCisgKiB0aGlzIHRvIGVuc3VyZSB0aGF0IG9vcHNlcyBkb24ndCBzY3JvbGwgb2ZmIHRoZSBzY3JlZW4uICBJdCBoYXMgdGhlCisgKiBzaWRlLWVmZmVjdCBvZiBwcmV2ZW50aW5nIGxhdGVyLW9vcHNpbmcgQ1BVcyBmcm9tIG11Y2tpbmcgdXAgdGhlIGRpc3BsYXksCisgKiB0b28uCiAgKgotICogSXQgdHVybnMgb3V0IHRoYXQgdGhlIENQVSB3aGljaCBpcyBhbGxvd2VkIHRvIHByaW50IGVuZHMgdXAgcGF1c2luZyBmb3IgdGhlCi0gKiByaWdodCBkdXJhdGlvbiwgd2hlcmVhcyBhbGwgdGhlIG90aGVyIENQVXMgcGF1c2UgZm9yIHR3aWNlIGFzIGxvbmc6IG9uY2UgaW4KLSAqIG9vcHNfZW50ZXIoKSwgb25jZSBpbiBvb3BzX2V4aXQoKS4KKyAqIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBDUFUgd2hpY2ggaXMgYWxsb3dlZCB0byBwcmludCBlbmRzIHVwIHBhdXNpbmcgZm9yCisgKiB0aGUgcmlnaHQgZHVyYXRpb24sIHdoZXJlYXMgYWxsIHRoZSBvdGhlciBDUFVzIHBhdXNlIGZvciB0d2ljZSBhcyBsb25nOgorICogb25jZSBpbiBvb3BzX2VudGVyKCksIG9uY2UgaW4gb29wc19leGl0KCkuCiAgKi8KIHZvaWQgb29wc19lbnRlcih2b2lkKQogewotCWRlYnVnX2xvY2tzX29mZigpOyAvKiBjYW4ndCB0cnVzdCB0aGUgaW50ZWdyaXR5IG9mIHRoZSBrZXJuZWwgYW55bW9yZSAqLworCS8qIGNhbid0IHRydXN0IHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGtlcm5lbCBhbnltb3JlOiAqLworCWRlYnVnX2xvY2tzX29mZigpOwogCWRvX29vcHNfZW50ZXJfZXhpdCgpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcGFyYW1zLmMgYi9rZXJuZWwvcGFyYW1zLmMKaW5kZXggYTFlMzAyNS4uZGUyNzNlYyAxMDA2NDQKLS0tIGEva2VybmVsL3BhcmFtcy5jCisrKyBiL2tlcm5lbC9wYXJhbXMuYwpAQCAtMjQsNiArMjQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAorLyogV2UgYWJ1c2UgdGhlIGhpZ2ggYml0cyBvZiAicGVybSIgdG8gcmVjb3JkIHdoZXRoZXIgd2Uga21hbGxvYydlZC4gKi8KKyNkZWZpbmUgS1BBUkFNX0tNQUxMT0NFRAkweDgwMDAwMDAwCisKICNpZiAwCiAjZGVmaW5lIERFQlVHUCBwcmludGsKICNlbHNlCkBAIC0yMTcsNyArMjIwLDE5IEBACiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAotCSooY2hhciAqKilrcC0+YXJnID0gKGNoYXIgKil2YWw7CisJaWYgKGtwLT5wZXJtICYgS1BBUkFNX0tNQUxMT0NFRCkKKwkJa2ZyZWUoKihjaGFyICoqKWtwLT5hcmcpOworCisJLyogVGhpcyBpcyBhIGhhY2suICBXZSBjYW4ndCBuZWVkIHRvIHN0cmR1cCBpbiBlYXJseSBib290LCBhbmQgd2UKKwkgKiBkb24ndCBuZWVkIHRvOyB0aGlzIG1hbmdsZWQgY29tbWFuZGxpbmUgaXMgcHJlc2VydmVkLiAqLworCWlmIChzbGFiX2lzX2F2YWlsYWJsZSgpKSB7CisJCWtwLT5wZXJtIHw9IEtQQVJBTV9LTUFMTE9DRUQ7CisJCSooY2hhciAqKilrcC0+YXJnID0ga3N0cmR1cCh2YWwsIEdGUF9LRVJORUwpOworCQlpZiAoIWtwLT5hcmcpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9IGVsc2UKKwkJKihjb25zdCBjaGFyICoqKWtwLT5hcmcgPSB2YWw7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTcxLDYgKzU4NiwxNSBAQAogfQogI2VuZGlmCiAKK3ZvaWQgZGVzdHJveV9wYXJhbXMoY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqcGFyYW1zLCB1bnNpZ25lZCBudW0pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisJCWlmIChwYXJhbXNbaV0ucGVybSAmIEtQQVJBTV9LTUFMTE9DRUQpCisJCQlrZnJlZSgqKGNoYXIgKiopcGFyYW1zW2ldLmFyZyk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBrZXJuZWxfYWRkX3N5c2ZzX3BhcmFtKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCSAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLAogCQkJCQkgIHVuc2lnbmVkIGludCBuYW1lX3NraXApCmRpZmYgLS1naXQgYS9rZXJuZWwvcGlkLmMgYi9rZXJuZWwvcGlkLmMKaW5kZXggMWIzNTg2Zi4uYjJlNWY3OCAxMDA2NDQKLS0tIGEva2VybmVsL3BpZC5jCisrKyBiL2tlcm5lbC9waWQuYwpAQCAtNDAzLDYgKzQwMyw4IEBACiB7CiAJc3RydWN0IHBpZCAqcGlkOwogCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAodHlwZSAhPSBQSURUWVBFX1BJRCkKKwkJdGFzayA9IHRhc2stPmdyb3VwX2xlYWRlcjsKIAlwaWQgPSBnZXRfcGlkKHRhc2stPnBpZHNbdHlwZV0ucGlkKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gcGlkOwpAQCAtNDUwLDExICs0NTIsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBpZF92bnIpOwogCi1waWRfdCB0YXNrX3BpZF9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQorcGlkX3QgX190YXNrX3BpZF9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gcGlkX3R5cGUgdHlwZSwKKwkJCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKIHsKLQlyZXR1cm4gcGlkX25yX25zKHRhc2tfcGlkKHRzayksIG5zKTsKKwlwaWRfdCBuciA9IDA7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKCFucykKKwkJbnMgPSBjdXJyZW50LT5uc3Byb3h5LT5waWRfbnM7CisJaWYgKGxpa2VseShwaWRfYWxpdmUodGFzaykpKSB7CisJCWlmICh0eXBlICE9IFBJRFRZUEVfUElEKQorCQkJdGFzayA9IHRhc2stPmdyb3VwX2xlYWRlcjsKKwkJbnIgPSBwaWRfbnJfbnModGFzay0+cGlkc1t0eXBlXS5waWQsIG5zKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gbnI7CiB9Ci1FWFBPUlRfU1lNQk9MKHRhc2tfcGlkX25yX25zKTsKK0VYUE9SVF9TWU1CT0woX190YXNrX3BpZF9ucl9ucyk7CiAKIHBpZF90IHRhc2tfdGdpZF9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQogewpAQCAtNDYyLDE4ICs0NzcsNiBAQAogfQogRVhQT1JUX1NZTUJPTCh0YXNrX3RnaWRfbnJfbnMpOwogCi1waWRfdCB0YXNrX3BncnBfbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKLXsKLQlyZXR1cm4gcGlkX25yX25zKHRhc2tfcGdycCh0c2spLCBucyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHRhc2tfcGdycF9ucl9ucyk7Ci0KLXBpZF90IHRhc2tfc2Vzc2lvbl9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQotewotCXJldHVybiBwaWRfbnJfbnModGFza19zZXNzaW9uKHRzayksIG5zKTsKLX0KLUVYUE9SVF9TWU1CT0wodGFza19zZXNzaW9uX25yX25zKTsKLQogc3RydWN0IHBpZF9uYW1lc3BhY2UgKnRhc2tfYWN0aXZlX3BpZF9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlyZXR1cm4gbnNfb2ZfcGlkKHRhc2tfcGlkKHRzaykpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BpZF9uYW1lc3BhY2UuYyBiL2tlcm5lbC9waWRfbmFtZXNwYWNlLmMKaW5kZXggZmFiOGVhOC4uMmQxMDAxYiAxMDA2NDQKLS0tIGEva2VybmVsL3BpZF9uYW1lc3BhY2UuYworKysgYi9rZXJuZWwvcGlkX25hbWVzcGFjZS5jCkBAIC0xNTIsNiArMTUyLDcgQEAKIHsKIAlpbnQgbnI7CiAJaW50IHJjOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAogCS8qCiAJICogVGhlIGxhc3QgdGhyZWFkIGluIHRoZSBjZ3JvdXAtaW5pdCB0aHJlYWQgZ3JvdXAgaXMgdGVybWluYXRpbmcuCkBAIC0xNjksNyArMTcwLDE5IEBACiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAluciA9IG5leHRfcGlkbWFwKHBpZF9ucywgMSk7CiAJd2hpbGUgKG5yID4gMCkgewotCQlraWxsX3Byb2NfaW5mbyhTSUdLSUxMLCBTRU5EX1NJR19QUklWLCBucik7CisJCXJjdV9yZWFkX2xvY2soKTsKKworCQkvKgorCQkgKiBVc2UgZm9yY2Vfc2lnKCkgc2luY2UgaXQgY2xlYXJzIFNJR05BTF9VTktJTExBQkxFIGVuc3VyaW5nCisJCSAqIGFueSBuZXN0ZWQtY29udGFpbmVyJ3MgaW5pdCBwcm9jZXNzZXMgZG9uJ3QgaWdub3JlIHRoZQorCQkgKiBzaWduYWwKKwkJICovCisJCXRhc2sgPSBwaWRfdGFzayhmaW5kX3ZwaWQobnIpLCBQSURUWVBFX1BJRCk7CisJCWlmICh0YXNrKQorCQkJZm9yY2Vfc2lnKFNJR0tJTEwsIHRhc2spOworCisJCXJjdV9yZWFkX3VubG9jaygpOworCiAJCW5yID0gbmV4dF9waWRtYXAocGlkX25zLCBucik7CiAJfQogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9kaXNrLmMgYi9rZXJuZWwvcG93ZXIvZGlzay5jCmluZGV4IGU4ODZkMTMuLjVmMjFhYjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9kaXNrLmMKKysrIGIva2VybmVsL3Bvd2VyL2Rpc2suYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgInBvd2VyLmgiCiAKQEAgLTI4OCw3ICsyODksNyBAQAogICoJaGliZXJuYXRpb25fc25hcHNob3QgLSBxdWllc2NlIGRldmljZXMgYW5kIGNyZWF0ZSB0aGUgaGliZXJuYXRpb24KICAqCXNuYXBzaG90IGltYWdlLgogICoJQHBsYXRmb3JtX21vZGUgLSBpZiBzZXQsIHVzZSB0aGUgcGxhdGZvcm0gZHJpdmVyLCBpZiBhdmFpbGFibGUsIHRvCi0gKgkJCSBwcmVwYXJlIHRoZSBwbGF0Zm9ybSBmcmltd2FyZSBmb3IgdGhlIHBvd2VyIHRyYW5zaXRpb24uCisgKgkJCSBwcmVwYXJlIHRoZSBwbGF0Zm9ybSBmaXJtd2FyZSBmb3IgdGhlIHBvd2VyIHRyYW5zaXRpb24uCiAgKgogICoJTXVzdCBiZSBjYWxsZWQgd2l0aCBwbV9tdXRleCBoZWxkCiAgKi8KQEAgLTQxMSw3ICs0MTIsNyBAQAogICoJaGliZXJuYXRpb25fcmVzdG9yZSAtIHF1aWVzY2UgZGV2aWNlcyBhbmQgcmVzdG9yZSB0aGUgaGliZXJuYXRpb24KICAqCXNuYXBzaG90IGltYWdlLiAgSWYgc3VjY2Vzc2Z1bCwgY29udHJvbCByZXR1cm5zIGluIGhpYmVybmF0aW9uX3NuYXBob3QoKQogICoJQHBsYXRmb3JtX21vZGUgLSBpZiBzZXQsIHVzZSB0aGUgcGxhdGZvcm0gZHJpdmVyLCBpZiBhdmFpbGFibGUsIHRvCi0gKgkJCSBwcmVwYXJlIHRoZSBwbGF0Zm9ybSBmcmltd2FyZSBmb3IgdGhlIHRyYW5zaXRpb24uCisgKgkJCSBwcmVwYXJlIHRoZSBwbGF0Zm9ybSBmaXJtd2FyZSBmb3IgdGhlIHRyYW5zaXRpb24uCiAgKgogICoJTXVzdCBiZSBjYWxsZWQgd2l0aCBwbV9tdXRleCBoZWxkCiAgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKaW5kZXggZjVmYzJkNy4uMzNlMmU0YSAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKKysrIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKQEAgLTMyMSwxMyArMzIxLDEwIEBACiAKIAlJTklUX0xJU1RfSEVBRChsaXN0KTsKIAotCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKIAkJdW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0LCB6b25lX2VuZDsKIAkJc3RydWN0IG1lbV9leHRlbnQgKmV4dCwgKmN1ciwgKmF1eDsKIAotCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQotCQkJY29udGludWU7Ci0KIAkJem9uZV9zdGFydCA9IHpvbmUtPnpvbmVfc3RhcnRfcGZuOwogCQl6b25lX2VuZCA9IHpvbmUtPnpvbmVfc3RhcnRfcGZuICsgem9uZS0+c3Bhbm5lZF9wYWdlczsKIApAQCAtODA0LDggKzgwMSw4IEBACiAJc3RydWN0IHpvbmUgKnpvbmU7CiAJdW5zaWduZWQgaW50IGNudCA9IDA7CiAKLQlmb3JfZWFjaF96b25lKHpvbmUpCi0JCWlmIChwb3B1bGF0ZWRfem9uZSh6b25lKSAmJiBpc19oaWdobWVtKHpvbmUpKQorCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpCisJCWlmIChpc19oaWdobWVtKHpvbmUpKQogCQkJY250ICs9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKIAogCXJldHVybiBjbnQ7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc3dzdXNwLmMgYi9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKaW5kZXggYTkyYzkxNC4uNzhjMzUwNCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N3c3VzcC5jCisrKyBiL2tlcm5lbC9wb3dlci9zd3N1c3AuYwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgInBvd2VyLmgiCiAKQEAgLTIyOSwxNyArMjMwLDE2IEBACiAJCXNpemUgPSBjb3VudF9kYXRhX3BhZ2VzKCkgKyBQQUdFU19GT1JfSU8gKyBTUEFSRV9QQUdFUzsKIAkJdG1wID0gc2l6ZTsKIAkJc2l6ZSArPSBoaWdobWVtX3NpemU7Ci0JCWZvcl9lYWNoX3pvbmUgKHpvbmUpCi0JCQlpZiAocG9wdWxhdGVkX3pvbmUoem9uZSkpIHsKLQkJCQl0bXAgKz0gc25hcHNob3RfYWRkaXRpb25hbF9wYWdlcyh6b25lKTsKLQkJCQlpZiAoaXNfaGlnaG1lbSh6b25lKSkgewotCQkJCQloaWdobWVtX3NpemUgLT0KKwkJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgeworCQkJdG1wICs9IHNuYXBzaG90X2FkZGl0aW9uYWxfcGFnZXMoem9uZSk7CisJCQlpZiAoaXNfaGlnaG1lbSh6b25lKSkgeworCQkJCWhpZ2htZW1fc2l6ZSAtPQogCQkJCQl6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdG1wIC09IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKLQkJCQkJdG1wICs9IHpvbmUtPmxvd21lbV9yZXNlcnZlW1pPTkVfTk9STUFMXTsKLQkJCQl9CisJCQl9IGVsc2UgeworCQkJCXRtcCAtPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7CisJCQkJdG1wICs9IHpvbmUtPmxvd21lbV9yZXNlcnZlW1pPTkVfTk9STUFMXTsKIAkJCX0KKwkJfQogCiAJCWlmIChoaWdobWVtX3NpemUgPCAwKQogCQkJaGlnaG1lbV9zaXplID0gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCBlMzYwMmQwLi41MDUyYjU0IDEwMDY0NAotLS0gYS9rZXJuZWwvcHJpbnRrLmMKKysrIGIva2VybmVsL3ByaW50ay5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMTM1LDYgKzEzNiwyNCBAQAogc3RhdGljIGludCBsb2dfYnVmX2xlbiA9IF9fTE9HX0JVRl9MRU47CiBzdGF0aWMgdW5zaWduZWQgbG9nZ2VkX2NoYXJzOyAvKiBOdW1iZXIgb2YgY2hhcnMgcHJvZHVjZWQgc2luY2UgbGFzdCByZWFkK2NsZWFyIG9wZXJhdGlvbiAqLwogCisjaWZkZWYgQ09ORklHX0tFWEVDCisvKgorICogVGhpcyBhcHBlbmRzIHRoZSBsaXN0ZWQgc3ltYm9scyB0byAvcHJvYy92bWNvcmVpbmZvCisgKgorICogL3Byb2Mvdm1jb3JlaW5mbyBpcyB1c2VkIGJ5IHZhcmlvdXMgdXRpaWx0aWVzLCBsaWtlIGNyYXNoIGFuZCBtYWtlZHVtcGZpbGUgdG8KKyAqIG9idGFpbiBhY2Nlc3MgdG8gc3ltYm9scyB0aGF0IGFyZSBvdGhlcndpc2UgdmVyeSBkaWZmaWN1bHQgdG8gbG9jYXRlLiAgVGhlc2UKKyAqIHN5bWJvbHMgYXJlIHNwZWNpZmljYWxseSB1c2VkIHNvIHRoYXQgdXRpbGl0aWVzIGNhbiBhY2Nlc3MgYW5kIGV4dHJhY3QgdGhlCisgKiBkbWVzZyBsb2cgZnJvbSBhIHZtY29yZSBmaWxlIGFmdGVyIGEgY3Jhc2guCisgKi8KK3ZvaWQgbG9nX2J1Zl9rZXhlY19zZXR1cCh2b2lkKQoreworCVZNQ09SRUlORk9fU1lNQk9MKGxvZ19idWYpOworCVZNQ09SRUlORk9fU1lNQk9MKGxvZ19lbmQpOworCVZNQ09SRUlORk9fU1lNQk9MKGxvZ19idWZfbGVuKTsKKwlWTUNPUkVJTkZPX1NZTUJPTChsb2dnZWRfY2hhcnMpOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IGxvZ19idWZfbGVuX3NldHVwKGNoYXIgKnN0cikKIHsKIAl1bnNpZ25lZCBzaXplID0gbWVtcGFyc2Uoc3RyLCAmc3RyKTsKQEAgLTEyOTIsOCArMTMxMSwxMSBAQAogYm9vbCBwcmludGtfdGltZWRfcmF0ZWxpbWl0KHVuc2lnbmVkIGxvbmcgKmNhbGxlcl9qaWZmaWVzLAogCQkJdW5zaWduZWQgaW50IGludGVydmFsX21zZWNzKQogewotCWlmICgqY2FsbGVyX2ppZmZpZXMgPT0gMCB8fCB0aW1lX2FmdGVyKGppZmZpZXMsICpjYWxsZXJfamlmZmllcykpIHsKLQkJKmNhbGxlcl9qaWZmaWVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoaW50ZXJ2YWxfbXNlY3MpOworCWlmICgqY2FsbGVyX2ppZmZpZXMgPT0gMAorCQkJfHwgIXRpbWVfaW5fcmFuZ2UoamlmZmllcywgKmNhbGxlcl9qaWZmaWVzLAorCQkJCQkqY2FsbGVyX2ppZmZpZXMKKwkJCQkJKyBtc2Vjc190b19qaWZmaWVzKGludGVydmFsX21zZWNzKSkpIHsKKwkJKmNhbGxlcl9qaWZmaWVzID0gamlmZmllczsKIAkJcmV0dXJuIHRydWU7CiAJfQogCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCBjOWNmNDhiLi5hYWFkMGVjIDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC02MCwxMSArNjAsMTUgQEAKIHsKIAlzcGluX2xvY2soJmNoaWxkLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlpZiAodGFza19pc190cmFjZWQoY2hpbGQpKSB7Ci0JCWlmIChjaGlsZC0+c2lnbmFsLT5mbGFncyAmIFNJR05BTF9TVE9QX1NUT1BQRUQpIHsKKwkJLyoKKwkJICogSWYgdGhlIGdyb3VwIHN0b3AgaXMgY29tcGxldGVkIG9yIGluIHByb2dyZXNzLAorCQkgKiB0aGlzIHRocmVhZCB3YXMgYWxyZWFkeSBjb3VudGVkIGFzIHN0b3BwZWQuCisJCSAqLworCQlpZiAoY2hpbGQtPnNpZ25hbC0+ZmxhZ3MgJiBTSUdOQUxfU1RPUF9TVE9QUEVEIHx8CisJCSAgICBjaGlsZC0+c2lnbmFsLT5ncm91cF9zdG9wX2NvdW50KQogCQkJX19zZXRfdGFza19zdGF0ZShjaGlsZCwgVEFTS19TVE9QUEVEKTsKLQkJfSBlbHNlIHsKKwkJZWxzZQogCQkJc2lnbmFsX3dha2VfdXAoY2hpbGQsIDEpOwotCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZjaGlsZC0+c2lnaGFuZC0+c2lnbG9jayk7CiB9CkBAIC0yMzUsMTggKzIzOSw1OCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3B0cmFjZV9kZXRhY2goc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgdW5zaWduZWQgaW50IGRhdGEpCisvKgorICogQ2FsbGVkIHdpdGggaXJxcyBkaXNhYmxlZCwgcmV0dXJucyB0cnVlIGlmIGNoaWxkcyBzaG91bGQgcmVhcCB0aGVtc2VsdmVzLgorICovCitzdGF0aWMgaW50IGlnbm9yaW5nX2NoaWxkcmVuKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaCkKIHsKLQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQkvKiAuLiByZS1wYXJlbnQgLi4gKi8KLQlfX3B0cmFjZV91bmxpbmsoY2hpbGQpOwotCS8qIC4uIGFuZCB3YWtlIGl0IHVwLiAqLwotCWlmIChjaGlsZC0+ZXhpdF9zdGF0ZSAhPSBFWElUX1pPTUJJRSkKLQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKKwlpbnQgcmV0OworCXNwaW5fbG9jaygmc2lnaC0+c2lnbG9jayk7CisJcmV0ID0gKHNpZ2gtPmFjdGlvbltTSUdDSExELTFdLnNhLnNhX2hhbmRsZXIgPT0gU0lHX0lHTikgfHwKKwkgICAgICAoc2lnaC0+YWN0aW9uW1NJR0NITEQtMV0uc2Euc2FfZmxhZ3MgJiBTQV9OT0NMRFdBSVQpOworCXNwaW5fdW5sb2NrKCZzaWdoLT5zaWdsb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ2FsbGVkIHdpdGggdGFza2xpc3RfbG9jayBoZWxkIGZvciB3cml0aW5nLgorICogVW5saW5rIGEgdHJhY2VkIHRhc2ssIGFuZCBjbGVhbiBpdCB1cCBpZiBpdCB3YXMgYSB0cmFjZWQgem9tYmllLgorICogUmV0dXJuIHRydWUgaWYgaXQgbmVlZHMgdG8gYmUgcmVhcGVkIHdpdGggcmVsZWFzZV90YXNrKCkuCisgKiAoV2UgY2FuJ3QgY2FsbCByZWxlYXNlX3Rhc2soKSBoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSBob2xkIHRhc2tsaXN0X2xvY2suKQorICoKKyAqIElmIGl0J3MgYSB6b21iaWUsIG91ciBhdHRhY2hlZG5lc3MgcHJldmVudGVkIG5vcm1hbCBwYXJlbnQgbm90aWZpY2F0aW9uCisgKiBvciBzZWxmLXJlYXBpbmcuICBEbyBub3RpZmljYXRpb24gbm93IGlmIGl0IHdvdWxkIGhhdmUgaGFwcGVuZWQgZWFybGllci4KKyAqIElmIGl0IHNob3VsZCByZWFwIGl0c2VsZiwgcmV0dXJuIHRydWUuCisgKgorICogSWYgaXQncyBvdXIgb3duIGNoaWxkLCB0aGVyZSBpcyBubyBub3RpZmljYXRpb24gdG8gZG8uCisgKiBCdXQgaWYgb3VyIG5vcm1hbCBjaGlsZHJlbiBzZWxmLXJlYXAsIHRoZW4gdGhpcyBjaGlsZAorICogd2FzIHByZXZlbnRlZCBieSBwdHJhY2UgYW5kIHdlIG11c3QgcmVhcCBpdCBub3cuCisgKi8KK3N0YXRpYyBib29sIF9fcHRyYWNlX2RldGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRyYWNlciwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCV9fcHRyYWNlX3VubGluayhwKTsKKworCWlmIChwLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7CisJCWlmICghdGFza19kZXRhY2hlZChwKSAmJiB0aHJlYWRfZ3JvdXBfZW1wdHkocCkpIHsKKwkJCWlmICghc2FtZV90aHJlYWRfZ3JvdXAocC0+cmVhbF9wYXJlbnQsIHRyYWNlcikpCisJCQkJZG9fbm90aWZ5X3BhcmVudChwLCBwLT5leGl0X3NpZ25hbCk7CisJCQllbHNlIGlmIChpZ25vcmluZ19jaGlsZHJlbih0cmFjZXItPnNpZ2hhbmQpKQorCQkJCXAtPmV4aXRfc2lnbmFsID0gLTE7CisJCX0KKwkJaWYgKHRhc2tfZGV0YWNoZWQocCkpIHsKKwkJCS8qIE1hcmsgaXQgYXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVhcGVkLiAqLworCQkJcC0+ZXhpdF9zdGF0ZSA9IEVYSVRfREVBRDsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOwogfQogCiBpbnQgcHRyYWNlX2RldGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCB1bnNpZ25lZCBpbnQgZGF0YSkKIHsKKwlib29sIGRlYWQgPSBmYWxzZTsKKwogCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMjU1LDE0ICsyOTksNDUgQEAKIAljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKIAogCXdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKLQkvKiBwcm90ZWN0IGFnYWluc3QgZGVfdGhyZWFkKCktPnJlbGVhc2VfdGFzaygpICovCi0JaWYgKGNoaWxkLT5wdHJhY2UpCi0JCV9fcHRyYWNlX2RldGFjaChjaGlsZCwgZGF0YSk7CisJLyoKKwkgKiBUaGlzIGNoaWxkIGNhbiBiZSBhbHJlYWR5IGtpbGxlZC4gTWFrZSBzdXJlIGRlX3RocmVhZCgpIG9yCisJICogb3VyIHN1Yi10aHJlYWQgZG9pbmcgZG9fd2FpdCgpIGRpZG4ndCBkbyByZWxlYXNlX3Rhc2soKSB5ZXQuCisJICovCisJaWYgKGNoaWxkLT5wdHJhY2UpIHsKKwkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7CisJCWRlYWQgPSBfX3B0cmFjZV9kZXRhY2goY3VycmVudCwgY2hpbGQpOworCX0KIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAorCWlmICh1bmxpa2VseShkZWFkKSkKKwkJcmVsZWFzZV90YXNrKGNoaWxkKTsKKwogCXJldHVybiAwOwogfQogCisvKgorICogRGV0YWNoIGFsbCB0YXNrcyB3ZSB3ZXJlIHVzaW5nIHB0cmFjZSBvbi4KKyAqLwordm9pZCBleGl0X3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRyYWNlcikKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuOworCUxJU1RfSEVBRChwdHJhY2VfZGVhZCk7CisKKwl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZ0cmFjZXItPnB0cmFjZWQsIHB0cmFjZV9lbnRyeSkgeworCQlpZiAoX19wdHJhY2VfZGV0YWNoKHRyYWNlciwgcCkpCisJCQlsaXN0X2FkZCgmcC0+cHRyYWNlX2VudHJ5LCAmcHRyYWNlX2RlYWQpOworCX0KKwl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKKworCUJVR19PTighbGlzdF9lbXB0eSgmdHJhY2VyLT5wdHJhY2VkKSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJnB0cmFjZV9kZWFkLCBwdHJhY2VfZW50cnkpIHsKKwkJbGlzdF9kZWxfaW5pdCgmcC0+cHRyYWNlX2VudHJ5KTsKKwkJcmVsZWFzZV90YXNrKHApOworCX0KK30KKwogaW50IHB0cmFjZV9yZWFkZGF0YShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBzcmMsIGNoYXIgX191c2VyICpkc3QsIGludCBsZW4pCiB7CiAJaW50IGNvcGllZCA9IDA7CkBAIC02MTIsOCArNjg3LDYgQEAKIAkJZ290byBvdXRfcHV0X3Rhc2tfc3RydWN0OwogCiAJcmV0ID0gYXJjaF9wdHJhY2UoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9wdXRfdGFza19zdHJ1Y3Q7CiAKICBvdXRfcHV0X3Rhc2tfc3RydWN0OgogCXB1dF90YXNrX3N0cnVjdChjaGlsZCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IGNhZThhMDUuLjJjN2I4NDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC0xMjIsNiArMTIyLDggQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X21pZ3JhdGVkX2NhbGxiYWNrcyh2b2lkKTsKKwogLyoKICAqIE9yY2hlc3RyYXRlIHRoZSBzcGVjaWZpZWQgdHlwZSBvZiBSQ1UgYmFycmllciwgd2FpdGluZyBmb3IgYWxsCiAgKiBSQ1UgY2FsbGJhY2tzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSB0byBjb21wbGV0ZS4KQEAgLTE0Nyw2ICsxNDksNyBAQAogCQljb21wbGV0ZSgmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmcmN1X2JhcnJpZXJfY29tcGxldGlvbik7CiAJbXV0ZXhfdW5sb2NrKCZyY3VfYmFycmllcl9tdXRleCk7CisJd2FpdF9taWdyYXRlZF9jYWxsYmFja3MoKTsKIH0KIAogLyoqCkBAIC0xNzYsOSArMTc5LDUwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfYmFycmllcl9zY2hlZCk7CiAKK3N0YXRpYyBhdG9taWNfdCByY3VfbWlncmF0ZV90eXBlX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgc3RydWN0IHJjdV9oZWFkIHJjdV9taWdyYXRlX2hlYWRbM107CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocmN1X21pZ3JhdGVfd3EpOworCitzdGF0aWMgdm9pZCByY3VfbWlncmF0ZV9jYWxsYmFjayhzdHJ1Y3QgcmN1X2hlYWQgKm5vdHVzZWQpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnJjdV9taWdyYXRlX3R5cGVfY291bnQpKQorCQl3YWtlX3VwKCZyY3VfbWlncmF0ZV93cSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3YWl0X21pZ3JhdGVkX2NhbGxiYWNrcyh2b2lkKQoreworCXdhaXRfZXZlbnQocmN1X21pZ3JhdGVfd3EsICFhdG9taWNfcmVhZCgmcmN1X21pZ3JhdGVfdHlwZV9jb3VudCkpOworfQorCitzdGF0aWMgaW50IF9fY3B1aW5pdCByY3VfYmFycmllcl9jcHVfaG90cGx1ZyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCWlmIChhY3Rpb24gPT0gQ1BVX0RZSU5HKSB7CisJCS8qCisJCSAqIHByZWVtcHRfZGlzYWJsZSgpIGluIG9uX2VhY2hfY3B1KCkgcHJldmVudHMgc3RvcF9tYWNoaW5lKCksCisJCSAqIHNvIHdoZW4gIm9uX2VhY2hfY3B1KHJjdV9iYXJyaWVyX2Z1bmMsICh2b2lkICopdHlwZSwgMSk7IgorCQkgKiByZXR1cm5zLCBhbGwgb25saW5lIGNwdXMgaGF2ZSBxdWV1ZWQgcmN1X2JhcnJpZXJfZnVuYygpLAorCQkgKiBhbmQgdGhlIGRlYWQgY3B1KGlmIGl0IGV4aXN0KSBxdWV1ZXMgcmN1X21pZ3JhdGVfY2FsbGJhY2soKXMuCisJCSAqCisJCSAqIFRoZXNlIGNhbGxiYWNrcyBlbnN1cmUgX3JjdV9iYXJyaWVyKCkgd2FpdHMgZm9yIGFsbAorCQkgKiBSQ1UgY2FsbGJhY2tzIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSB0byBjb21wbGV0ZS4KKwkJICovCisJCWF0b21pY19zZXQoJnJjdV9taWdyYXRlX3R5cGVfY291bnQsIDMpOworCQljYWxsX3JjdV9iaChyY3VfbWlncmF0ZV9oZWFkLCByY3VfbWlncmF0ZV9jYWxsYmFjayk7CisJCWNhbGxfcmN1X3NjaGVkKHJjdV9taWdyYXRlX2hlYWQgKyAxLCByY3VfbWlncmF0ZV9jYWxsYmFjayk7CisJCWNhbGxfcmN1KHJjdV9taWdyYXRlX2hlYWQgKyAyLCByY3VfbWlncmF0ZV9jYWxsYmFjayk7CisJfSBlbHNlIGlmIChhY3Rpb24gPT0gQ1BVX1BPU1RfREVBRCkgeworCQkvKiByY3VfbWlncmF0ZV9oZWFkIGlzIHByb3RlY3RlZCBieSBjcHVfYWRkX3JlbW92ZV9sb2NrICovCisJCXdhaXRfbWlncmF0ZWRfY2FsbGJhY2tzKCk7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKwogdm9pZCBfX2luaXQgcmN1X2luaXQodm9pZCkKIHsKIAlfX3JjdV9pbml0KCk7CisJaG90Y3B1X25vdGlmaWVyKHJjdV9iYXJyaWVyX2NwdV9ob3RwbHVnLCAwKTsKIH0KIAogdm9pZCByY3Vfc2NoZWR1bGVyX3N0YXJ0aW5nKHZvaWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvcmVsYXkuYyBiL2tlcm5lbC9yZWxheS5jCmluZGV4IDhmMjE3OWMuLmJjMTg4NTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZWxheS5jCisrKyBiL2tlcm5lbC9yZWxheS5jCkBAIC02NzcsOSArNjc3LDcgQEAKIAkgKi8KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJaWYgKHVubGlrZWx5KCFjaGFuLT5idWZbaV0pKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInJlbGF5X2xhdGVfc2V0dXBfZmlsZXM6IENQVSAldSAiCi0JCQkJCSJoYXMgbm8gYnVmZmVyLCBpdCBtdXN0IGhhdmUhXG4iLCBpKTsKLQkJCUJVRygpOworCQkJV0FSTl9PTkNFKDEsIEtFUk5fRVJSICJDUFUgaGFzIG5vIGJ1ZmZlciFcbiIpOwogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CkBAIC03OTcsMTMgKzc5NSwxNSBAQAogCWlmICghY2hhbikKIAkJcmV0dXJuOwogCi0JaWYgKGNwdSA+PSBOUl9DUFVTIHx8ICFjaGFuLT5idWZbY3B1XSkKKwlpZiAoY3B1ID49IE5SX0NQVVMgfHwgIWNoYW4tPmJ1ZltjcHVdIHx8CisJCQkJCXN1YmJ1ZnNfY29uc3VtZWQgPiBjaGFuLT5uX3N1YmJ1ZnMpCiAJCXJldHVybjsKIAogCWJ1ZiA9IGNoYW4tPmJ1ZltjcHVdOwotCWJ1Zi0+c3ViYnVmc19jb25zdW1lZCArPSBzdWJidWZzX2NvbnN1bWVkOwotCWlmIChidWYtPnN1YmJ1ZnNfY29uc3VtZWQgPiBidWYtPnN1YmJ1ZnNfcHJvZHVjZWQpCisJaWYgKHN1YmJ1ZnNfY29uc3VtZWQgPiBidWYtPnN1YmJ1ZnNfcHJvZHVjZWQgLSBidWYtPnN1YmJ1ZnNfY29uc3VtZWQpCiAJCWJ1Zi0+c3ViYnVmc19jb25zdW1lZCA9IGJ1Zi0+c3ViYnVmc19wcm9kdWNlZDsKKwllbHNlCisJCWJ1Zi0+c3ViYnVmc19jb25zdW1lZCArPSBzdWJidWZzX2NvbnN1bWVkOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVsYXlfc3ViYnVmc19jb25zdW1lZCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggMTk2ZDQ4Yi4uYmVjMjQ5OCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTExMTAsNyArMTExMCw3IEBACiAJaWYgKHJxID09IHRoaXNfcnEoKSkgewogCQlocnRpbWVyX3Jlc3RhcnQodGltZXIpOwogCX0gZWxzZSBpZiAoIXJxLT5ocnRpY2tfY3NkX3BlbmRpbmcpIHsKLQkJX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1X29mKHJxKSwgJnJxLT5ocnRpY2tfY3NkKTsKKwkJX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1X29mKHJxKSwgJnJxLT5ocnRpY2tfY3NkLCAwKTsKIAkJcnEtPmhydGlja19jc2RfcGVuZGluZyA9IDE7CiAJfQogfQpAQCAtMzgxOCwxOSArMzgxOCwyMyBAQAogICovCiAjZGVmaW5lIE1BWF9QSU5ORURfSU5URVJWQUwJNTEyCiAKKy8qIFdvcmtpbmcgY3B1bWFzayBmb3IgbG9hZF9iYWxhbmNlIGFuZCBsb2FkX2JhbGFuY2VfbmV3aWRsZS4gKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShjcHVtYXNrX3Zhcl90LCBsb2FkX2JhbGFuY2VfdG1wbWFzayk7CisKIC8qCiAgKiBDaGVjayB0aGlzX2NwdSB0byBlbnN1cmUgaXQgaXMgYmFsYW5jZWQgd2l0aGluIGRvbWFpbi4gQXR0ZW1wdCB0byBtb3ZlCiAgKiB0YXNrcyBpZiB0aGVyZSBpcyBhbiBpbWJhbGFuY2UuCiAgKi8KIHN0YXRpYyBpbnQgbG9hZF9iYWxhbmNlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLAogCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkJaW50ICpiYWxhbmNlLCBzdHJ1Y3QgY3B1bWFzayAqY3B1cykKKwkJCWludCAqYmFsYW5jZSkKIHsKIAlpbnQgbGRfbW92ZWQsIGFsbF9waW5uZWQgPSAwLCBhY3RpdmVfYmFsYW5jZSA9IDAsIHNkX2lkbGUgPSAwOwogCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXA7CiAJdW5zaWduZWQgbG9uZyBpbWJhbGFuY2U7CiAJc3RydWN0IHJxICpidXNpZXN0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNwdW1hc2sgKmNwdXMgPSBfX2dldF9jcHVfdmFyKGxvYWRfYmFsYW5jZV90bXBtYXNrKTsKIAogCWNwdW1hc2tfc2V0YWxsKGNwdXMpOwogCkBAIC0zOTg1LDggKzM5ODksNyBAQAogICogdGhpc19ycSBpcyBsb2NrZWQuCiAgKi8KIHN0YXRpYyBpbnQKLWxvYWRfYmFsYW5jZV9uZXdpZGxlKGludCB0aGlzX2NwdSwgc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwKLQkJCXN0cnVjdCBjcHVtYXNrICpjcHVzKQorbG9hZF9iYWxhbmNlX25ld2lkbGUoaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQogewogCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXA7CiAJc3RydWN0IHJxICpidXNpZXN0ID0gTlVMTDsKQEAgLTM5OTQsNiArMzk5Nyw3IEBACiAJaW50IGxkX21vdmVkID0gMDsKIAlpbnQgc2RfaWRsZSA9IDA7CiAJaW50IGFsbF9waW5uZWQgPSAwOworCXN0cnVjdCBjcHVtYXNrICpjcHVzID0gX19nZXRfY3B1X3Zhcihsb2FkX2JhbGFuY2VfdG1wbWFzayk7CiAKIAljcHVtYXNrX3NldGFsbChjcHVzKTsKIApAQCAtNDEzNCwxMCArNDEzOCw2IEBACiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAJaW50IHB1bGxlZF90YXNrID0gMDsKIAl1bnNpZ25lZCBsb25nIG5leHRfYmFsYW5jZSA9IGppZmZpZXMgKyBIWjsKLQljcHVtYXNrX3Zhcl90IHRtcG1hc2s7Ci0KLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZ0bXBtYXNrLCBHRlBfQVRPTUlDKSkKLQkJcmV0dXJuOwogCiAJZm9yX2VhY2hfZG9tYWluKHRoaXNfY3B1LCBzZCkgewogCQl1bnNpZ25lZCBsb25nIGludGVydmFsOwpAQCAtNDE0OCw3ICs0MTQ4LDcgQEAKIAkJaWYgKHNkLT5mbGFncyAmIFNEX0JBTEFOQ0VfTkVXSURMRSkKIAkJCS8qIElmIHdlJ3ZlIHB1bGxlZCB0YXNrcyBvdmVyIHN0b3Agc2VhcmNoaW5nOiAqLwogCQkJcHVsbGVkX3Rhc2sgPSBsb2FkX2JhbGFuY2VfbmV3aWRsZSh0aGlzX2NwdSwgdGhpc19ycSwKLQkJCQkJCQkgICBzZCwgdG1wbWFzayk7CisJCQkJCQkJICAgc2QpOwogCiAJCWludGVydmFsID0gbXNlY3NfdG9famlmZmllcyhzZC0+YmFsYW5jZV9pbnRlcnZhbCk7CiAJCWlmICh0aW1lX2FmdGVyKG5leHRfYmFsYW5jZSwgc2QtPmxhc3RfYmFsYW5jZSArIGludGVydmFsKSkKQEAgLTQxNjMsNyArNDE2Myw2IEBACiAJCSAqLwogCQl0aGlzX3JxLT5uZXh0X2JhbGFuY2UgPSBuZXh0X2JhbGFuY2U7CiAJfQotCWZyZWVfY3B1bWFza192YXIodG1wbWFzayk7CiB9CiAKIC8qCkBAIC00MzEzLDExICs0MzEyLDYgQEAKIAl1bnNpZ25lZCBsb25nIG5leHRfYmFsYW5jZSA9IGppZmZpZXMgKyA2MCpIWjsKIAlpbnQgdXBkYXRlX25leHRfYmFsYW5jZSA9IDA7CiAJaW50IG5lZWRfc2VyaWFsaXplOwotCWNwdW1hc2tfdmFyX3QgdG1wOwotCi0JLyogRmFpbHMgYWxsb2M/ICBSZWJhbGFuY2luZyBwcm9iYWJseSBub3QgYSBwcmlvcml0eSByaWdodCBub3cuICovCi0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmdG1wLCBHRlBfQVRPTUlDKSkKLQkJcmV0dXJuOwogCiAJZm9yX2VhY2hfZG9tYWluKGNwdSwgc2QpIHsKIAkJaWYgKCEoc2QtPmZsYWdzICYgU0RfTE9BRF9CQUxBTkNFKSkKQEAgLTQzNDIsNyArNDMzNiw3IEBACiAJCX0KIAogCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzZC0+bGFzdF9iYWxhbmNlICsgaW50ZXJ2YWwpKSB7Ci0JCQlpZiAobG9hZF9iYWxhbmNlKGNwdSwgcnEsIHNkLCBpZGxlLCAmYmFsYW5jZSwgdG1wKSkgeworCQkJaWYgKGxvYWRfYmFsYW5jZShjcHUsIHJxLCBzZCwgaWRsZSwgJmJhbGFuY2UpKSB7CiAJCQkJLyoKIAkJCQkgKiBXZSd2ZSBwdWxsZWQgdGFza3Mgb3ZlciBzbyBlaXRoZXIgd2UncmUgbm8KIAkJCQkgKiBsb25nZXIgaWRsZSwgb3Igb25lIG9mIG91ciBTTVQgc2libGluZ3MgaXMKQEAgLTQzNzYsOCArNDM3MCw2IEBACiAJICovCiAJaWYgKGxpa2VseSh1cGRhdGVfbmV4dF9iYWxhbmNlKSkKIAkJcnEtPm5leHRfYmFsYW5jZSA9IG5leHRfYmFsYW5jZTsKLQotCWZyZWVfY3B1bWFza192YXIodG1wKTsKIH0KIAogLyoKQEAgLTQ3ODEsMTAgKzQ3NzMsNyBAQAogI2VuZGlmCiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKSAmJiAoZGVmaW5lZChDT05GSUdfREVCVUdfUFJFRU1QVCkgfHwgXAotCQkJCWRlZmluZWQoQ09ORklHX1BSRUVNUFRfVFJBQ0VSKSkKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9wYXJlbnRfaXAodW5zaWduZWQgbG9uZyBhZGRyKQordW5zaWduZWQgbG9uZyBnZXRfcGFyZW50X2lwKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlpZiAoaW5fbG9ja19mdW5jdGlvbnMoYWRkcikpIHsKIAkJYWRkciA9IENBTExFUl9BRERSMjsKQEAgLTQ3OTQsNiArNDc4Myw5IEBACiAJcmV0dXJuIGFkZHI7CiB9CiAKKyNpZiBkZWZpbmVkKENPTkZJR19QUkVFTVBUKSAmJiAoZGVmaW5lZChDT05GSUdfREVCVUdfUFJFRU1QVCkgfHwgXAorCQkJCWRlZmluZWQoQ09ORklHX1BSRUVNUFRfVFJBQ0VSKSkKKwogdm9pZCBfX2twcm9iZXMgYWRkX3ByZWVtcHRfY291bnQoaW50IHZhbCkKIHsKICNpZmRlZiBDT05GSUdfREVCVUdfUFJFRU1QVApAQCAtNTE5NiwxMSArNTE4OCwxNyBAQAogCV9fd2FrZV91cF9jb21tb24ocSwgbW9kZSwgMSwgMCwgTlVMTCk7CiB9CiAKK3ZvaWQgX193YWtlX3VwX2xvY2tlZF9rZXkod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHVuc2lnbmVkIGludCBtb2RlLCB2b2lkICprZXkpCit7CisJX193YWtlX3VwX2NvbW1vbihxLCBtb2RlLCAxLCAwLCBrZXkpOworfQorCiAvKioKLSAqIF9fd2FrZV91cF9zeW5jIC0gd2FrZSB1cCB0aHJlYWRzIGJsb2NrZWQgb24gYSB3YWl0cXVldWUuCisgKiBfX3dha2VfdXBfc3luY19rZXkgLSB3YWtlIHVwIHRocmVhZHMgYmxvY2tlZCBvbiBhIHdhaXRxdWV1ZS4KICAqIEBxOiB0aGUgd2FpdHF1ZXVlCiAgKiBAbW9kZTogd2hpY2ggdGhyZWFkcwogICogQG5yX2V4Y2x1c2l2ZTogaG93IG1hbnkgd2FrZS1vbmUgb3Igd2FrZS1tYW55IHRocmVhZHMgdG8gd2FrZSB1cAorICogQGtleTogb3BhcXVlIHZhbHVlIHRvIGJlIHBhc3NlZCB0byB3YWtldXAgdGFyZ2V0cwogICoKICAqIFRoZSBzeW5jIHdha2V1cCBkaWZmZXJzIHRoYXQgdGhlIHdha2VyIGtub3dzIHRoYXQgaXQgd2lsbCBzY2hlZHVsZQogICogYXdheSBzb29uLCBzbyB3aGlsZSB0aGUgdGFyZ2V0IHRocmVhZCB3aWxsIGJlIHdva2VuIHVwLCBpdCB3aWxsIG5vdApAQCAtNTIwOSw4ICs1MjA3LDggQEAKICAqCiAgKiBPbiBVUCBpdCBjYW4gcHJldmVudCBleHRyYSBwcmVlbXB0aW9uLgogICovCi12b2lkCi1fX3dha2VfdXBfc3luYyh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBucl9leGNsdXNpdmUpCit2b2lkIF9fd2FrZV91cF9zeW5jX2tleSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsCisJCQlpbnQgbnJfZXhjbHVzaXZlLCB2b2lkICprZXkpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3luYyA9IDE7CkBAIC01MjIyLDkgKzUyMjAsMTggQEAKIAkJc3luYyA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOwotCV9fd2FrZV91cF9jb21tb24ocSwgbW9kZSwgbnJfZXhjbHVzaXZlLCBzeW5jLCBOVUxMKTsKKwlfX3dha2VfdXBfY29tbW9uKHEsIG1vZGUsIG5yX2V4Y2x1c2l2ZSwgc3luYywga2V5KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChfX3dha2VfdXBfc3luY19rZXkpOworCisvKgorICogX193YWtlX3VwX3N5bmMgLSBzZWUgX193YWtlX3VwX3N5bmNfa2V5KCkKKyAqLwordm9pZCBfX3dha2VfdXBfc3luYyh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBucl9leGNsdXNpdmUpCit7CisJX193YWtlX3VwX3N5bmNfa2V5KHEsIG1vZGUsIG5yX2V4Y2x1c2l2ZSwgTlVMTCk7Cit9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3dha2VfdXBfc3luYyk7CS8qIEZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwogCiAvKioKQEAgLTc3MTMsNyArNzcyMCw3IEBACiB7CiAJaW50IGdyb3VwOwogCi0JY3B1bWFza19hbmQobWFzaywgJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpLCBjcHVfbWFwKTsKKwljcHVtYXNrX2FuZChtYXNrLCB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpLCBjcHVfbWFwKTsKIAlncm91cCA9IGNwdW1hc2tfZmlyc3QobWFzayk7CiAJaWYgKHNnKQogCQkqc2cgPSAmcGVyX2NwdShzY2hlZF9ncm91cF9jb3JlLCBncm91cCkuc2c7CkBAIC03NzQyLDcgKzc3NDksNyBAQAogCWNwdW1hc2tfYW5kKG1hc2ssIGNwdV9jb3JlZ3JvdXBfbWFzayhjcHUpLCBjcHVfbWFwKTsKIAlncm91cCA9IGNwdW1hc2tfZmlyc3QobWFzayk7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19TQ0hFRF9TTVQpCi0JY3B1bWFza19hbmQobWFzaywgJnBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpLCBjcHVfbWFwKTsKKwljcHVtYXNrX2FuZChtYXNrLCB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpLCBjcHVfbWFwKTsKIAlncm91cCA9IGNwdW1hc2tfZmlyc3QobWFzayk7CiAjZWxzZQogCWdyb3VwID0gY3B1OwpAQCAtODA4NSw3ICs4MDkyLDcgQEAKIAkJU0RfSU5JVChzZCwgU0lCTElORyk7CiAJCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKIAkJY3B1bWFza19hbmQoc2NoZWRfZG9tYWluX3NwYW4oc2QpLAotCQkJICAgICZwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSksIGNwdV9tYXApOworCQkJICAgIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGkpLCBjcHVfbWFwKTsKIAkJc2QtPnBhcmVudCA9IHA7CiAJCXAtPmNoaWxkID0gc2Q7CiAJCWNwdV90b19jcHVfZ3JvdXAoaSwgY3B1X21hcCwgJnNkLT5ncm91cHMsIHRtcG1hc2spOwpAQCAtODA5Niw3ICs4MTAzLDcgQEAKIAkvKiBTZXQgdXAgQ1BVIChzaWJsaW5nKSBncm91cHMgKi8KIAlmb3JfZWFjaF9jcHUoaSwgY3B1X21hcCkgewogCQljcHVtYXNrX2FuZCh0aGlzX3NpYmxpbmdfbWFwLAotCQkJICAgICZwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSksIGNwdV9tYXApOworCQkJICAgIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGkpLCBjcHVfbWFwKTsKIAkJaWYgKGkgIT0gY3B1bWFza19maXJzdCh0aGlzX3NpYmxpbmdfbWFwKSkKIAkJCWNvbnRpbnVlOwogCkBAIC04NzcyLDYgKzg3NzksOSBAQAogI2lmZGVmIENPTkZJR19VU0VSX1NDSEVECiAJYWxsb2Nfc2l6ZSAqPSAyOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sKKwlhbGxvY19zaXplICs9IG51bV9wb3NzaWJsZV9jcHVzKCkgKiBjcHVtYXNrX3NpemUoKTsKKyNlbmRpZgogCS8qCiAJICogQXMgc2NoZWRfaW5pdCgpIGlzIGNhbGxlZCBiZWZvcmUgcGFnZV9hbGxvYyBpcyBzZXR1cCwKIAkgKiB3ZSB1c2UgYWxsb2NfYm9vdG1lbSgpLgpAQCAtODgwOSw2ICs4ODE5LDEyIEBACiAJCXB0ciArPSBucl9jcHVfaWRzICogc2l6ZW9mKHZvaWQgKiopOwogI2VuZGlmIC8qIENPTkZJR19VU0VSX1NDSEVEICovCiAjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisjaWZkZWYgQ09ORklHX0NQVU1BU0tfT0ZGU1RBQ0sKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJCXBlcl9jcHUobG9hZF9iYWxhbmNlX3RtcG1hc2ssIGkpID0gKHZvaWQgKilwdHI7CisJCQlwdHIgKz0gY3B1bWFza19zaXplKCk7CisJCX0KKyNlbmRpZiAvKiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSyAqLwogCX0KIAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jbG9jay5jIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKaW5kZXggMzkwZjMzMi4uODE5ZjE3YSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2Nsb2NrLmMKKysrIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKQEAgLTI1LDYgKzI1LDcgQEAKICAqIGNvbnNpc3RlbnQgYmV0d2VlbiBjcHVzIChuZXZlciBtb3JlIHRoYW4gMiBqaWZmaWVzIGRpZmZlcmVuY2UpLgogICovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KQEAgLTE1NCw2ICsxNTUsMTcgQEAKIAkJcmV0dXJuIHNjaGVkX2Nsb2NrKCk7CiAKIAlzY2QgPSBjcHVfc2RjKGNwdSk7CisKKwkvKgorCSAqIE5vcm1hbGx5IHRoaXMgaXMgbm90IGNhbGxlZCBpbiBOTUkgY29udGV4dCAtIGJ1dCBpZiBpdCBpcywKKwkgKiB0cnlpbmcgdG8gZG8gYW55IGxvY2tpbmcgaGVyZSBpcyB0b3RhbGx5IGxldGhhbC4KKwkgKi8KKwlpZiAodW5saWtlbHkoaW5fbm1pKCkpKQorCQlyZXR1cm4gc2NkLT5jbG9jazsKKworCWlmICh1bmxpa2VseSghc2NoZWRfY2xvY2tfcnVubmluZykpCisJCXJldHVybiAwdWxsOworCiAJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwogCW5vdyA9IHNjaGVkX2Nsb2NrKCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCAxYzg4MTQ0Li5kODAzNDczIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC01NSwxMCArNTUsMjIgQEAKIAkJKGhhbmRsZXIgPT0gU0lHX0RGTCAmJiBzaWdfa2VybmVsX2lnbm9yZShzaWcpKTsKIH0KIAotc3RhdGljIGludCBzaWdfaWdub3JlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBzaWcpCitzdGF0aWMgaW50IHNpZ190YXNrX2lnbm9yZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgc2lnLAorCQlpbnQgZnJvbV9hbmNlc3Rvcl9ucykKIHsKIAl2b2lkIF9fdXNlciAqaGFuZGxlcjsKIAorCWhhbmRsZXIgPSBzaWdfaGFuZGxlcih0LCBzaWcpOworCisJaWYgKHVubGlrZWx5KHQtPnNpZ25hbC0+ZmxhZ3MgJiBTSUdOQUxfVU5LSUxMQUJMRSkgJiYKKwkJCWhhbmRsZXIgPT0gU0lHX0RGTCAmJiAhZnJvbV9hbmNlc3Rvcl9ucykKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gc2lnX2hhbmRsZXJfaWdub3JlZChoYW5kbGVyLCBzaWcpOworfQorCitzdGF0aWMgaW50IHNpZ19pZ25vcmVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgaW50IHNpZywgaW50IGZyb21fYW5jZXN0b3JfbnMpCit7CiAJLyoKIAkgKiBCbG9ja2VkIHNpZ25hbHMgYXJlIG5ldmVyIGlnbm9yZWQsIHNpbmNlIHRoZQogCSAqIHNpZ25hbCBoYW5kbGVyIG1heSBjaGFuZ2UgYnkgdGhlIHRpbWUgaXQgaXMKQEAgLTY3LDE0ICs3OSwxMyBAQAogCWlmIChzaWdpc21lbWJlcigmdC0+YmxvY2tlZCwgc2lnKSB8fCBzaWdpc21lbWJlcigmdC0+cmVhbF9ibG9ja2VkLCBzaWcpKQogCQlyZXR1cm4gMDsKIAotCWhhbmRsZXIgPSBzaWdfaGFuZGxlcih0LCBzaWcpOwotCWlmICghc2lnX2hhbmRsZXJfaWdub3JlZChoYW5kbGVyLCBzaWcpKQorCWlmICghc2lnX3Rhc2tfaWdub3JlZCh0LCBzaWcsIGZyb21fYW5jZXN0b3JfbnMpKQogCQlyZXR1cm4gMDsKIAogCS8qCiAJICogVHJhY2VycyBtYXkgd2FudCB0byBrbm93IGFib3V0IGV2ZW4gaWdub3JlZCBzaWduYWxzLgogCSAqLwotCXJldHVybiAhdHJhY2Vob29rX2NvbnNpZGVyX2lnbm9yZWRfc2lnbmFsKHQsIHNpZywgaGFuZGxlcik7CisJcmV0dXJuICF0cmFjZWhvb2tfY29uc2lkZXJfaWdub3JlZF9zaWduYWwodCwgc2lnKTsKIH0KIAogLyoKQEAgLTMxOCw3ICszMjksNyBAQAogCQlyZXR1cm4gMTsKIAlpZiAoaGFuZGxlciAhPSBTSUdfSUdOICYmIGhhbmRsZXIgIT0gU0lHX0RGTCkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuICF0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsKHRzaywgc2lnLCBoYW5kbGVyKTsKKwlyZXR1cm4gIXRyYWNlaG9va19jb25zaWRlcl9mYXRhbF9zaWduYWwodHNrLCBzaWcpOwogfQogCiAKQEAgLTYyNCw3ICs2MzUsNyBAQAogICogUmV0dXJucyB0cnVlIGlmIHRoZSBzaWduYWwgc2hvdWxkIGJlIGFjdHVhbGx5IGRlbGl2ZXJlZCwgb3RoZXJ3aXNlCiAgKiBpdCBzaG91bGQgYmUgZHJvcHBlZC4KICAqLwotc3RhdGljIGludCBwcmVwYXJlX3NpZ25hbChpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCitzdGF0aWMgaW50IHByZXBhcmVfc2lnbmFsKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZyb21fYW5jZXN0b3JfbnMpCiB7CiAJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZ25hbCA9IHAtPnNpZ25hbDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CkBAIC03MDgsNyArNzE5LDcgQEAKIAkJfQogCX0KIAotCXJldHVybiAhc2lnX2lnbm9yZWQocCwgc2lnKTsKKwlyZXR1cm4gIXNpZ19pZ25vcmVkKHAsIHNpZywgZnJvbV9hbmNlc3Rvcl9ucyk7CiB9CiAKIC8qCkBAIC03NzcsNyArNzg4LDcgQEAKIAkgICAgIShzaWduYWwtPmZsYWdzICYgKFNJR05BTF9VTktJTExBQkxFIHwgU0lHTkFMX0dST1VQX0VYSVQpKSAmJgogCSAgICAhc2lnaXNtZW1iZXIoJnQtPnJlYWxfYmxvY2tlZCwgc2lnKSAmJgogCSAgICAoc2lnID09IFNJR0tJTEwgfHwKLQkgICAgICF0cmFjZWhvb2tfY29uc2lkZXJfZmF0YWxfc2lnbmFsKHQsIHNpZywgU0lHX0RGTCkpKSB7CisJICAgICAhdHJhY2Vob29rX2NvbnNpZGVyX2ZhdGFsX3NpZ25hbCh0LCBzaWcpKSkgewogCQkvKgogCQkgKiBUaGlzIHNpZ25hbCB3aWxsIGJlIGZhdGFsIHRvIHRoZSB3aG9sZSBncm91cC4KIAkJICovCkBAIC04MTMsOCArODI0LDggQEAKIAlyZXR1cm4gKHNpZyA8IFNJR1JUTUlOKSAmJiBzaWdpc21lbWJlcigmc2lnbmFscy0+c2lnbmFsLCBzaWcpOwogfQogCi1zdGF0aWMgaW50IHNlbmRfc2lnbmFsKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsCi0JCQlpbnQgZ3JvdXApCitzdGF0aWMgaW50IF9fc2VuZF9zaWduYWwoaW50IHNpZywgc3RydWN0IHNpZ2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwKKwkJCWludCBncm91cCwgaW50IGZyb21fYW5jZXN0b3JfbnMpCiB7CiAJc3RydWN0IHNpZ3BlbmRpbmcgKnBlbmRpbmc7CiAJc3RydWN0IHNpZ3F1ZXVlICpxOwpAQCAtODIyLDcgKzgzMyw4IEBACiAJdHJhY2Vfc2NoZWRfc2lnbmFsX3NlbmQoc2lnLCB0KTsKIAogCWFzc2VydF9zcGluX2xvY2tlZCgmdC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0JaWYgKCFwcmVwYXJlX3NpZ25hbChzaWcsIHQpKQorCisJaWYgKCFwcmVwYXJlX3NpZ25hbChzaWcsIHQsIGZyb21fYW5jZXN0b3JfbnMpKQogCQlyZXR1cm4gMDsKIAogCXBlbmRpbmcgPSBncm91cCA/ICZ0LT5zaWduYWwtPnNoYXJlZF9wZW5kaW5nIDogJnQtPnBlbmRpbmc7CkBAIC04NzEsNiArODgzLDggQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJY29weV9zaWdpbmZvKCZxLT5pbmZvLCBpbmZvKTsKKwkJCWlmIChmcm9tX2FuY2VzdG9yX25zKQorCQkJCXEtPmluZm8uc2lfcGlkID0gMDsKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIGlmICghaXNfc2lfc3BlY2lhbChpbmZvKSkgewpAQCAtODg5LDYgKzkwMywyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNlbmRfc2lnbmFsKGludCBzaWcsIHN0cnVjdCBzaWdpbmZvICppbmZvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsCisJCQlpbnQgZ3JvdXApCit7CisJaW50IGZyb21fYW5jZXN0b3JfbnMgPSAwOworCisjaWZkZWYgQ09ORklHX1BJRF9OUworCWlmICghaXNfc2lfc3BlY2lhbChpbmZvKSAmJiBTSV9GUk9NVVNFUihpbmZvKSAmJgorCQkJdGFza19waWRfbnJfbnMoY3VycmVudCwgdGFza19hY3RpdmVfcGlkX25zKHQpKSA8PSAwKQorCQlmcm9tX2FuY2VzdG9yX25zID0gMTsKKyNlbmRpZgorCisJcmV0dXJuIF9fc2VuZF9zaWduYWwoc2lnLCBpbmZvLCB0LCBncm91cCwgZnJvbV9hbmNlc3Rvcl9ucyk7Cit9CisKIGludCBwcmludF9mYXRhbF9zaWduYWxzOwogCiBzdGF0aWMgdm9pZCBwcmludF9mYXRhbF9zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaWducikKQEAgLTExMzMsNyArMTE2MSw3IEBACiAJaWYgKHNpZyAmJiBwLT5zaWdoYW5kKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCXJldCA9IF9fZ3JvdXBfc2VuZF9zaWdfaW5mbyhzaWcsIGluZm8sIHApOworCQlyZXQgPSBfX3NlbmRfc2lnbmFsKHNpZywgaW5mbywgcCwgMSwgMCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKIAl9CiBvdXRfdW5sb2NrOgpAQCAtMTMyMCw3ICsxMzQ4LDcgQEAKIAkJZ290byByZXQ7CiAKIAlyZXQgPSAxOyAvKiB0aGUgc2lnbmFsIGlzIGlnbm9yZWQgKi8KLQlpZiAoIXByZXBhcmVfc2lnbmFsKHNpZywgdCkpCisJaWYgKCFwcmVwYXJlX3NpZ25hbChzaWcsIHQsIDApKQogCQlnb3RvIG91dDsKIAogCXJldCA9IDA7CkBAIC0xODQ0LDkgKzE4NzIsMTYgQEAKIAogCQkvKgogCQkgKiBHbG9iYWwgaW5pdCBnZXRzIG5vIHNpZ25hbHMgaXQgZG9lc24ndCB3YW50LgorCQkgKiBDb250YWluZXItaW5pdCBnZXRzIG5vIHNpZ25hbHMgaXQgZG9lc24ndCB3YW50IGZyb20gc2FtZQorCQkgKiBjb250YWluZXIuCisJCSAqCisJCSAqIE5vdGUgdGhhdCBpZiBnbG9iYWwvY29udGFpbmVyLWluaXQgc2VlcyBhIHNpZ19rZXJuZWxfb25seSgpCisJCSAqIHNpZ25hbCBoZXJlLCB0aGUgc2lnbmFsIG11c3QgaGF2ZSBiZWVuIGdlbmVyYXRlZCBpbnRlcm5hbGx5CisJCSAqIG9yIG11c3QgaGF2ZSBjb21lIGZyb20gYW4gYW5jZXN0b3IgbmFtZXNwYWNlLiBJbiBlaXRoZXIKKwkJICogY2FzZSwgdGhlIHNpZ25hbCBjYW5ub3QgYmUgZHJvcHBlZC4KIAkJICovCiAJCWlmICh1bmxpa2VseShzaWduYWwtPmZsYWdzICYgU0lHTkFMX1VOS0lMTEFCTEUpICYmCi0JCSAgICAhc2lnbmFsX2dyb3VwX2V4aXQoc2lnbmFsKSkKKwkJCQkhc2lnX2tlcm5lbF9vbmx5KHNpZ25yKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChzaWdfa2VybmVsX3N0b3Aoc2lnbnIpKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2xvdy13b3JrLmMgYi9rZXJuZWwvc2xvdy13b3JrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YyYmMwMQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9zbG93LXdvcmsuYwpAQCAtMCwwICsxLDY0MCBAQAorLyogV29ya2VyIHRocmVhZCBwb29sIGZvciBzbG93IGl0ZW1zLCBzdWNoIGFzIGZpbGVzeXN0ZW0gbG9va3VwcyBvciBta2RpcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogU2VlIERvY3VtZW50YXRpb24vc2xvdy13b3JrLnR4dAorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbG93LXdvcmsuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworI2RlZmluZSBTTE9XX1dPUktfQ1VMTF9USU1FT1VUICg1ICogSFopCS8qIGN1bGwgdGhyZWFkcyA1cyBhZnRlciBydW5uaW5nIG91dCBvZgorCQkJCQkgKiB0aGluZ3MgdG8gZG8gKi8KKyNkZWZpbmUgU0xPV19XT1JLX09PTV9USU1FT1VUICg1ICogSFopCS8qIGNhbid0IHN0YXJ0IG5ldyB0aHJlYWRzIGZvciA1cyBhZnRlcgorCQkJCQkgKiBPT00gKi8KKworc3RhdGljIHZvaWQgc2xvd193b3JrX2N1bGxfdGltZW91dCh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyB2b2lkIHNsb3dfd29ya19vb21fdGltZW91dCh1bnNpZ25lZCBsb25nKTsKKworI2lmZGVmIENPTkZJR19TWVNDVEwKK3N0YXRpYyBpbnQgc2xvd193b3JrX21pbl90aHJlYWRzX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKKwkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKKworc3RhdGljIGludCBzbG93X3dvcmtfbWF4X3RocmVhZHNfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50ICwgc3RydWN0IGZpbGUgKiwKKwkJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKKyNlbmRpZgorCisvKgorICogVGhlIHBvb2wgb2YgdGhyZWFkcyBoYXMgYXQgbGVhc3QgbWluIHRocmVhZHMgaW4gaXQgYXMgbG9uZyBhcyBzb21lb25lIGlzCisgKiB1c2luZyB0aGUgZmFjaWxpdHksIGFuZCBtYXkgaGF2ZSBhcyBtYW55IGFzIG1heC4KKyAqCisgKiBBIHBvcnRpb24gb2YgdGhlIHBvb2wgbWF5IGJlIHByb2Nlc3NpbmcgdmVyeSBzbG93IG9wZXJhdGlvbnMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBzbG93X3dvcmtfbWluX3RocmVhZHMgPSAyOworc3RhdGljIHVuc2lnbmVkIHNsb3dfd29ya19tYXhfdGhyZWFkcyA9IDQ7CitzdGF0aWMgdW5zaWduZWQgdnNsb3dfd29ya19wcm9wb3J0aW9uID0gNTA7IC8qICUgb2YgdGhyZWFkcyB0aGF0IG1heSBwcm9jZXNzCisJCQkJCSAgICAgKiB2ZXJ5IHNsb3cgd29yayAqLworCisjaWZkZWYgQ09ORklHX1NZU0NUTAorc3RhdGljIGNvbnN0IGludCBzbG93X3dvcmtfbWluX21pbl90aHJlYWRzID0gMjsKK3N0YXRpYyBpbnQgc2xvd193b3JrX21heF9tYXhfdGhyZWFkcyA9IDI1NTsKK3N0YXRpYyBjb25zdCBpbnQgc2xvd193b3JrX21pbl92c2xvdyA9IDE7CitzdGF0aWMgY29uc3QgaW50IHNsb3dfd29ya19tYXhfdnNsb3cgPSA5OTsKKworY3RsX3RhYmxlIHNsb3dfd29ya19zeXNjdGxzW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm1pbi10aHJlYWRzIiwKKwkJLmRhdGEJCT0gJnNsb3dfd29ya19taW5fdGhyZWFkcywKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gc2xvd193b3JrX21pbl90aHJlYWRzX3N5c2N0bCwKKwkJLmV4dHJhMQkJPSAodm9pZCAqKSAmc2xvd193b3JrX21pbl9taW5fdGhyZWFkcywKKwkJLmV4dHJhMgkJPSAmc2xvd193b3JrX21heF90aHJlYWRzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gIm1heC10aHJlYWRzIiwKKwkJLmRhdGEJCT0gJnNsb3dfd29ya19tYXhfdGhyZWFkcywKKwkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gc2xvd193b3JrX21heF90aHJlYWRzX3N5c2N0bCwKKwkJLmV4dHJhMQkJPSAmc2xvd193b3JrX21pbl90aHJlYWRzLAorCQkuZXh0cmEyCQk9ICh2b2lkICopICZzbG93X3dvcmtfbWF4X21heF90aHJlYWRzLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInZzbG93LXBlcmNlbnRhZ2UiLAorCQkuZGF0YQkJPSAmdnNsb3dfd29ya19wcm9wb3J0aW9uLAorCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gKHZvaWQgKikgJnNsb3dfd29ya19taW5fdnNsb3csCisJCS5leHRyYTIJCT0gKHZvaWQgKikgJnNsb3dfd29ya19tYXhfdnNsb3csCisJfSwKKwl7IC5jdGxfbmFtZSA9IDAgfQorfTsKKyNlbmRpZgorCisvKgorICogVGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgdGhyZWFkIHBvb2wKKyAqLworc3RhdGljIGF0b21pY190IHNsb3dfd29ya190aHJlYWRfY291bnQ7CitzdGF0aWMgYXRvbWljX3QgdnNsb3dfd29ya19leGVjdXRpbmdfY291bnQ7CisKK3N0YXRpYyBib29sIHNsb3dfd29ya19tYXlfbm90X3N0YXJ0X25ld190aHJlYWQ7CitzdGF0aWMgYm9vbCBzbG93X3dvcmtfY3VsbDsgLyogY3VsbCBhIHRocmVhZCBkdWUgdG8gbGFjayBvZiBhY3Rpdml0eSAqLworc3RhdGljIERFRklORV9USU1FUihzbG93X3dvcmtfY3VsbF90aW1lciwgc2xvd193b3JrX2N1bGxfdGltZW91dCwgMCwgMCk7CitzdGF0aWMgREVGSU5FX1RJTUVSKHNsb3dfd29ya19vb21fdGltZXIsIHNsb3dfd29ya19vb21fdGltZW91dCwgMCwgMCk7CitzdGF0aWMgc3RydWN0IHNsb3dfd29yayBzbG93X3dvcmtfbmV3X3RocmVhZDsgLyogbmV3IHRocmVhZCBzdGFydGVyICovCisKKy8qCisgKiBUaGUgcXVldWVzIG9mIHdvcmsgaXRlbXMgYW5kIHRoZSBsb2NrIGdvdmVybmluZyBhY2Nlc3MgdG8gdGhlbS4gIFRoZXNlIGFyZQorICogc2hhcmVkIGJldHdlZW4gYWxsIHRoZSBDUFVzLiAgSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGhhdmUgcGVyLUNQVSBxdWV1ZXMKKyAqIGFzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyBiZWFycyBubyByZWxhdGlvbiB0byB0aGUgbnVtYmVyIG9mIENQVXMuCisgKgorICogVGhlcmUgYXJlIHR3byBxdWV1ZXMgb2Ygd29yayBpdGVtczogb25lIGZvciBzbG93IHdvcmsgaXRlbXMsIGFuZCBvbmUgZm9yCisgKiB2ZXJ5IHNsb3cgd29yayBpdGVtcy4KKyAqLworc3RhdGljIExJU1RfSEVBRChzbG93X3dvcmtfcXVldWUpOworc3RhdGljIExJU1RfSEVBRCh2c2xvd193b3JrX3F1ZXVlKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2xvd193b3JrX3F1ZXVlX2xvY2spOworCisvKgorICogVGhlIHRocmVhZCBjb250cm9scy4gIEEgdmFyaWFibGUgdXNlZCB0byBzaWduYWwgdG8gdGhlIHRocmVhZHMgdGhhdCB0aGV5CisgKiBzaG91bGQgZXhpdCB3aGVuIHRoZSBxdWV1ZSBpcyBlbXB0eSwgYSB3YWl0cXVldWUgdXNlZCBieSB0aGUgdGhyZWFkcyB0byB3YWl0CisgKiBmb3Igc2lnbmFscywgYW5kIGEgY29tcGxldGlvbiBzZXQgYnkgdGhlIGxhc3QgdGhyZWFkIHRvIGV4aXQuCisgKi8KK3N0YXRpYyBib29sIHNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0Oworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHNsb3dfd29ya190aHJlYWRfd3EpOworc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihzbG93X3dvcmtfbGFzdF90aHJlYWRfZXhpdGVkKTsKKworLyoKKyAqIFRoZSBudW1iZXIgb2YgdXNlcnMgb2YgdGhlIHRocmVhZCBwb29sIGFuZCBpdHMgbG9jay4gIFdoaWxzdCB0aGlzIGlzIHplcm8gd2UKKyAqIGhhdmUgbm8gdGhyZWFkcyBoYW5naW5nIGFyb3VuZCwgYW5kIHdoZW4gdGhpcyByZWFjaGVzIHplcm8sIHdlIHdhaXQgZm9yIGFsbAorICogYWN0aXZlIG9yIHF1ZXVlZCB3b3JrIGl0ZW1zIHRvIGNvbXBsZXRlIGFuZCBraWxsIGFsbCB0aGUgdGhyZWFkcyB3ZSBkbyBoYXZlLgorICovCitzdGF0aWMgaW50IHNsb3dfd29ya191c2VyX2NvdW50Oworc3RhdGljIERFRklORV9NVVRFWChzbG93X3dvcmtfdXNlcl9sb2NrKTsKKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgYWN0aXZlIHRocmVhZHMgaW4gdGhlIHBvb2wgdGhhdCBhcmUKKyAqIHBlcm1pdHRlZCB0byBwcm9jZXNzIHZlcnkgc2xvdyB3b3JrIGl0ZW1zLgorICoKKyAqIFRoZSBhbnN3ZXIgaXMgcm91bmRlZCB1cCB0byBhdCBsZWFzdCAxLCBidXQgbWF5IG5vdCBlcXVhbCBvciBleGNlZWQgdGhlCisgKiBtYXhpbXVtIG51bWJlciBvZiB0aGUgdGhyZWFkcyBpbiB0aGUgcG9vbC4gIFRoaXMgbWVhbnMgd2UgYWx3YXlzIGhhdmUgYXQKKyAqIGxlYXN0IG9uZSB0aHJlYWQgdGhhdCBjYW4gcHJvY2VzcyBzbG93IHdvcmsgaXRlbXMsIGFuZCB3ZSBhbHdheXMgaGF2ZSBhdAorICogbGVhc3Qgb25lIHRocmVhZCB0aGF0IHdvbid0IGdldCB0aWVkIHVwIGRvaW5nIHNvLgorICovCitzdGF0aWMgdW5zaWduZWQgc2xvd193b3JrX2NhbGNfdnNtYXgodm9pZCkKK3sKKwl1bnNpZ25lZCB2c21heDsKKworCXZzbWF4ID0gYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpICogdnNsb3dfd29ya19wcm9wb3J0aW9uOworCXZzbWF4IC89IDEwMDsKKwl2c21heCA9IG1heCh2c21heCwgMVUpOworCXJldHVybiBtaW4odnNtYXgsIHNsb3dfd29ya19tYXhfdGhyZWFkcyAtIDEpOworfQorCisvKgorICogQXR0ZW1wdCB0byBleGVjdXRlIHN0dWZmIHF1ZXVlZCBvbiBhIHNsb3cgdGhyZWFkLiAgUmV0dXJuIHRydWUgaWYgd2UgbWFuYWdlZAorICogaXQsIGZhbHNlIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIGRvLgorICovCitzdGF0aWMgYm9vbCBzbG93X3dvcmtfZXhlY3V0ZSh2b2lkKQoreworCXN0cnVjdCBzbG93X3dvcmsgKndvcmsgPSBOVUxMOworCXVuc2lnbmVkIHZzbWF4OworCWJvb2wgdmVyeV9zbG93OworCisJdnNtYXggPSBzbG93X3dvcmtfY2FsY192c21heCgpOworCisJLyogc2VlIGlmIHdlIGNhbiBzY2hlZHVsZSBhIG5ldyB0aHJlYWQgdG8gYmUgc3RhcnRlZCBpZiB3ZSdyZSBub3QKKwkgKiBrZWVwaW5nIHVwIHdpdGggdGhlIHdvcmsgKi8KKwlpZiAoIXdhaXRxdWV1ZV9hY3RpdmUoJnNsb3dfd29ya190aHJlYWRfd3EpICYmCisJICAgICghbGlzdF9lbXB0eSgmc2xvd193b3JrX3F1ZXVlKSB8fCAhbGlzdF9lbXB0eSgmdnNsb3dfd29ya19xdWV1ZSkpICYmCisJICAgIGF0b21pY19yZWFkKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KSA8IHNsb3dfd29ya19tYXhfdGhyZWFkcyAmJgorCSAgICAhc2xvd193b3JrX21heV9ub3Rfc3RhcnRfbmV3X3RocmVhZCkKKwkJc2xvd193b3JrX2VucXVldWUoJnNsb3dfd29ya19uZXdfdGhyZWFkKTsKKworCS8qIGZpbmQgc29tZXRoaW5nIHRvIGV4ZWN1dGUgKi8KKwlzcGluX2xvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZ2c2xvd193b3JrX3F1ZXVlKSAmJgorCSAgICBhdG9taWNfcmVhZCgmdnNsb3dfd29ya19leGVjdXRpbmdfY291bnQpIDwgdnNtYXgpIHsKKwkJd29yayA9IGxpc3RfZW50cnkodnNsb3dfd29ya19xdWV1ZS5uZXh0LAorCQkJCSAgc3RydWN0IHNsb3dfd29yaywgbGluayk7CisJCWlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soU0xPV19XT1JLX0VYRUNVVElORywgJndvcmstPmZsYWdzKSkKKwkJCUJVRygpOworCQlsaXN0X2RlbF9pbml0KCZ3b3JrLT5saW5rKTsKKwkJYXRvbWljX2luYygmdnNsb3dfd29ya19leGVjdXRpbmdfY291bnQpOworCQl2ZXJ5X3Nsb3cgPSB0cnVlOworCX0gZWxzZSBpZiAoIWxpc3RfZW1wdHkoJnNsb3dfd29ya19xdWV1ZSkpIHsKKwkJd29yayA9IGxpc3RfZW50cnkoc2xvd193b3JrX3F1ZXVlLm5leHQsCisJCQkJICBzdHJ1Y3Qgc2xvd193b3JrLCBsaW5rKTsKKwkJaWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhTTE9XX1dPUktfRVhFQ1VUSU5HLCAmd29yay0+ZmxhZ3MpKQorCQkJQlVHKCk7CisJCWxpc3RfZGVsX2luaXQoJndvcmstPmxpbmspOworCQl2ZXJ5X3Nsb3cgPSBmYWxzZTsKKwl9IGVsc2UgeworCQl2ZXJ5X3Nsb3cgPSBmYWxzZTsgLyogYXZvaWQgdGhlIGNvbXBpbGVyIHdhcm5pbmcgKi8KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7CisKKwlpZiAoIXdvcmspCisJCXJldHVybiBmYWxzZTsKKworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KFNMT1dfV09SS19QRU5ESU5HLCAmd29yay0+ZmxhZ3MpKQorCQlCVUcoKTsKKworCXdvcmstPm9wcy0+ZXhlY3V0ZSh3b3JrKTsKKworCWlmICh2ZXJ5X3Nsb3cpCisJCWF0b21pY19kZWMoJnZzbG93X3dvcmtfZXhlY3V0aW5nX2NvdW50KTsKKwljbGVhcl9iaXRfdW5sb2NrKFNMT1dfV09SS19FWEVDVVRJTkcsICZ3b3JrLT5mbGFncyk7CisKKwkvKiBpZiBzb21lb25lIHRyaWVkIHRvIGVucXVldWUgdGhlIGl0ZW0gd2hpbHN0IHdlIHdlcmUgZXhlY3V0aW5nIGl0LAorCSAqIHRoZW4gaXQnbGwgYmUgbGVmdCB1bmVucXVldWVkIHRvIGF2b2lkIG11bHRpcGxlIHRocmVhZHMgdHJ5aW5nIHRvCisJICogZXhlY3V0ZSBpdCBzaW11bHRhbmVvdXNseQorCSAqCisJICogdGhlcmUgaXMsIGhvd2V2ZXIsIGEgcmFjZSBiZXR3ZWVuIHVzIHRlc3RpbmcgdGhlIHBlbmRpbmcgZmxhZyBhbmQKKwkgKiBnZXR0aW5nIHRoZSBzcGlubG9jaywgYW5kIGJldHdlZW4gdGhlIGVucXVldWVyIHNldHRpbmcgdGhlIHBlbmRpbmcKKwkgKiBmbGFnIGFuZCBnZXR0aW5nIHRoZSBzcGlubG9jaywgc28gd2UgdXNlIGEgZGVmZXJyYWwgYml0IHRvIHRlbGwgdXMKKwkgKiBpZiB0aGUgZW5xdWV1ZXIgZ290IHRoZXJlIGZpcnN0CisJICovCisJaWYgKHRlc3RfYml0KFNMT1dfV09SS19QRU5ESU5HLCAmd29yay0+ZmxhZ3MpKSB7CisJCXNwaW5fbG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKKworCQlpZiAoIXRlc3RfYml0KFNMT1dfV09SS19FWEVDVVRJTkcsICZ3b3JrLT5mbGFncykgJiYKKwkJICAgIHRlc3RfYW5kX2NsZWFyX2JpdChTTE9XX1dPUktfRU5RX0RFRkVSUkVELCAmd29yay0+ZmxhZ3MpKQorCQkJZ290byBhdXRvX3JlcXVldWU7CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZzbG93X3dvcmtfcXVldWVfbG9jayk7CisJfQorCisJd29yay0+b3BzLT5wdXRfcmVmKHdvcmspOworCXJldHVybiB0cnVlOworCithdXRvX3JlcXVldWU6CisJLyogd2UgbXVzdCBjb21wbGV0ZSB0aGUgZW5xdWV1ZSBvcGVyYXRpb24KKwkgKiAtIHdlIHRyYW5zZmVyIG91ciByZWYgb24gdGhlIGl0ZW0gYmFjayB0byB0aGUgYXBwcm9wcmlhdGUgcXVldWUKKwkgKiAtIGRvbid0IHdha2UgYW5vdGhlciB0aHJlYWQgdXAgYXMgd2UncmUgYXdha2UgYWxyZWFkeQorCSAqLworCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfVkVSWV9TTE9XLCAmd29yay0+ZmxhZ3MpKQorCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5saW5rLCAmdnNsb3dfd29ya19xdWV1ZSk7CisJZWxzZQorCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5saW5rLCAmc2xvd193b3JrX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnEoJnNsb3dfd29ya19xdWV1ZV9sb2NrKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBzbG93X3dvcmtfZW5xdWV1ZSAtIFNjaGVkdWxlIGEgc2xvdyB3b3JrIGl0ZW0gZm9yIHByb2Nlc3NpbmcKKyAqIEB3b3JrOiBUaGUgd29yayBpdGVtIHRvIHF1ZXVlCisgKgorICogU2NoZWR1bGUgYSBzbG93IHdvcmsgaXRlbSBmb3IgcHJvY2Vzc2luZy4gIElmIHRoZSBpdGVtIGlzIGFscmVhZHkgdW5kZXJnb2luZworICogZXhlY3V0aW9uLCB0aGlzIGd1YXJhbnRlZXMgbm90IHRvIHJlLWVudGVyIHRoZSBleGVjdXRpb24gcm91dGluZSB1bnRpbCB0aGUKKyAqIGZpcnN0IGV4ZWN1dGlvbiBmaW5pc2hlcy4KKyAqCisgKiBUaGUgaXRlbSBpcyBwaW5uZWQgYnkgdGhpcyBmdW5jdGlvbiBhcyBpdCByZXRhaW5zIGEgcmVmZXJlbmNlIHRvIGl0LCBtYW5hZ2VkCisgKiB0aHJvdWdoIHRoZSBpdGVtIG9wZXJhdGlvbnMuICBUaGUgaXRlbSBpcyB1bnBpbm5lZCBvbmNlIGl0IGhhcyBiZWVuCisgKiBleGVjdXRlZC4KKyAqCisgKiBBbiBpdGVtIG1heSBob2cgdGhlIHRocmVhZCB0aGF0IGlzIHJ1bm5pbmcgaXQgZm9yIGEgcmVsYXRpdmVseSBsYXJnZSBhbW91bnQKKyAqIG9mIHRpbWUsIHN1ZmZpY2llbnQsIGZvciBleGFtcGxlLCB0byBwZXJmb3JtIHNldmVyYWwgbG9va3VwLCBta2RpciwgY3JlYXRlCisgKiBhbmQgc2V0eGF0dHIgb3BlcmF0aW9ucy4gIEl0IG1heSBzbGVlcCBvbiBJL08gYW5kIG1heSBzbGVlcCB0byBvYnRhaW4gbG9ja3MuCisgKgorICogQ29udmVyc2VseSwgaWYgYSBudW1iZXIgb2YgaXRlbXMgYXJlIGF3YWl0aW5nIHByb2Nlc3NpbmcsIGl0IG1heSB0YWtlIHNvbWUKKyAqIHRpbWUgYmVmb3JlIGFueSBnaXZlbiBpdGVtIGlzIGdpdmVuIGF0dGVudGlvbi4gIFRoZSBudW1iZXIgb2YgdGhyZWFkcyBpbiB0aGUKKyAqIHBvb2wgbWF5IGJlIGluY3JlYXNlZCB0byBkZWFsIHdpdGggZGVtYW5kLCBidXQgb25seSB1cCB0byBhIGxpbWl0LgorICoKKyAqIElmIFNMT1dfV09SS19WRVJZX1NMT1cgaXMgc2V0IG9uIHRoZSB3b3JrIGl0ZW0sIHRoZW4gaXQgd2lsbCBiZSBwbGFjZWQgaW4KKyAqIHRoZSB2ZXJ5IHNsb3cgcXVldWUsIGZyb20gd2hpY2ggb25seSBhIHBvcnRpb24gb2YgdGhlIHRocmVhZHMgd2lsbCBiZQorICogYWxsb3dlZCB0byBwaWNrIGl0ZW1zIHRvIGV4ZWN1dGUuICBUaGlzIGVuc3VyZXMgdGhhdCB2ZXJ5IHNsb3cgaXRlbXMgd29uJ3QKKyAqIG92ZXJseSBibG9jayBvbmVzIHRoYXQgYXJlIGp1c3Qgb3JkaW5hcmlseSBzbG93LgorICoKKyAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAtRUFHQUlOIGlmIG5vdC4KKyAqLworaW50IHNsb3dfd29ya19lbnF1ZXVlKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUJVR19PTihzbG93X3dvcmtfdXNlcl9jb3VudCA8PSAwKTsKKwlCVUdfT04oIXdvcmspOworCUJVR19PTighd29yay0+b3BzKTsKKwlCVUdfT04oIXdvcmstPm9wcy0+Z2V0X3JlZik7CisKKwkvKiB3aGVuIGhvbm91cmluZyBhbiBlbnF1ZXVlIHJlcXVlc3QsIHdlIG9ubHkgcHJvbWlzZSB0aGF0IHdlIHdpbGwgcnVuCisJICogdGhlIHdvcmsgZnVuY3Rpb24gaW4gdGhlIGZ1dHVyZTsgd2UgZG8gbm90IHByb21pc2UgdG8gcnVuIGl0IG9uY2UKKwkgKiBwZXIgZW5xdWV1ZSByZXF1ZXN0CisJICoKKwkgKiB3ZSB1c2UgdGhlIFBFTkRJTkcgYml0IHRvIG1lcmdlIHRvZ2V0aGVyIHJlcGVhdCByZXF1ZXN0cyB3aXRob3V0CisJICogaGF2aW5nIHRvIGRpc2FibGUgSVJRcyBhbmQgdGFrZSB0aGUgc3BpbmxvY2ssIHdoaWxzdCBzdGlsbAorCSAqIG1haW50YWluaW5nIG91ciBwcm9taXNlCisJICovCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0X2xvY2soU0xPV19XT1JLX1BFTkRJTkcsICZ3b3JrLT5mbGFncykpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3dfd29ya19xdWV1ZV9sb2NrLCBmbGFncyk7CisKKwkJLyogd2UgcHJvbWlzZSB0aGF0IHdlIHdpbGwgbm90IGF0dGVtcHQgdG8gZXhlY3V0ZSB0aGUgd29yaworCQkgKiBmdW5jdGlvbiBpbiBtb3JlIHRoYW4gb25lIHRocmVhZCBzaW11bHRhbmVvdXNseQorCQkgKgorCQkgKiB0aGlzLCBob3dldmVyLCBsZWF2ZXMgdXMgd2l0aCBhIHByb2JsZW0gaWYgd2UncmUgYXNrZWQgdG8KKwkJICogZW5xdWV1ZSB0aGUgd29yayB3aGlsc3Qgc29tZW9uZSBpcyBleGVjdXRpbmcgdGhlIHdvcmsKKwkJICogZnVuY3Rpb24gYXMgc2ltcGx5IHF1ZXVlaW5nIHRoZSB3b3JrIGltbWVkaWF0ZWx5IG1lYW5zIHRoYXQKKwkJICogYW5vdGhlciB0aHJlYWQgbWF5IHRyeSBleGVjdXRpbmcgaXQgd2hpbHN0IGl0IGlzIGFscmVhZHkKKwkJICogdW5kZXIgZXhlY3V0aW9uCisJCSAqCisJCSAqIHRvIGRlYWwgd2l0aCB0aGlzLCB3ZSBzZXQgdGhlIEVOUV9ERUZFUlJFRCBiaXQgaW5zdGVhZCBvZgorCQkgKiBlbnF1ZXVlaW5nLCBhbmQgdGhlIHRocmVhZCBjdXJyZW50bHkgZXhlY3V0aW5nIHRoZSB3b3JrCisJCSAqIGZ1bmN0aW9uIHdpbGwgZW5xdWV1ZSB0aGUgd29yayBpdGVtIHdoZW4gdGhlIHdvcmsgZnVuY3Rpb24KKwkJICogcmV0dXJucyBhbmQgaXQgaGFzIGNsZWFyZWQgdGhlIEVYRUNVVElORyBiaXQKKwkJICovCisJCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfRVhFQ1VUSU5HLCAmd29yay0+ZmxhZ3MpKSB7CisJCQlzZXRfYml0KFNMT1dfV09SS19FTlFfREVGRVJSRUQsICZ3b3JrLT5mbGFncyk7CisJCX0gZWxzZSB7CisJCQlpZiAod29yay0+b3BzLT5nZXRfcmVmKHdvcmspIDwgMCkKKwkJCQlnb3RvIGNhbnRfZ2V0X3JlZjsKKwkJCWlmICh0ZXN0X2JpdChTTE9XX1dPUktfVkVSWV9TTE9XLCAmd29yay0+ZmxhZ3MpKQorCQkJCWxpc3RfYWRkX3RhaWwoJndvcmstPmxpbmssICZ2c2xvd193b3JrX3F1ZXVlKTsKKwkJCWVsc2UKKwkJCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5saW5rLCAmc2xvd193b3JrX3F1ZXVlKTsKKwkJCXdha2VfdXAoJnNsb3dfd29ya190aHJlYWRfd3EpOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwl9CisJcmV0dXJuIDA7CisKK2NhbnRfZ2V0X3JlZjoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG93X3dvcmtfcXVldWVfbG9jaywgZmxhZ3MpOworCXJldHVybiAtRUFHQUlOOworfQorRVhQT1JUX1NZTUJPTChzbG93X3dvcmtfZW5xdWV1ZSk7CisKKy8qCisgKiBXb3JrZXIgdGhyZWFkIGN1bGxpbmcgYWxnb3JpdGhtCisgKi8KK3N0YXRpYyBib29sIHNsb3dfd29ya19jdWxsX3RocmVhZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCBkb19jdWxsID0gZmFsc2U7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKworCWlmIChzbG93X3dvcmtfY3VsbCkgeworCQlzbG93X3dvcmtfY3VsbCA9IGZhbHNlOworCisJCWlmIChsaXN0X2VtcHR5KCZzbG93X3dvcmtfcXVldWUpICYmCisJCSAgICBsaXN0X2VtcHR5KCZ2c2xvd193b3JrX3F1ZXVlKSAmJgorCQkgICAgYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpID4KKwkJICAgIHNsb3dfd29ya19taW5fdGhyZWFkcykgeworCQkJbW9kX3RpbWVyKCZzbG93X3dvcmtfY3VsbF90aW1lciwKKwkJCQkgIGppZmZpZXMgKyBTTE9XX1dPUktfQ1VMTF9USU1FT1VUKTsKKwkJCWRvX2N1bGwgPSB0cnVlOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvd193b3JrX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZG9fY3VsbDsKK30KKworLyoKKyAqIERldGVybWluZSBpZiB0aGVyZSBpcyBzbG93IHdvcmsgYXZhaWxhYmxlIGZvciBkaXNwYXRjaAorICovCitzdGF0aWMgaW5saW5lIGJvb2wgc2xvd193b3JrX2F2YWlsYWJsZShpbnQgdnNtYXgpCit7CisJcmV0dXJuICFsaXN0X2VtcHR5KCZzbG93X3dvcmtfcXVldWUpIHx8CisJCSghbGlzdF9lbXB0eSgmdnNsb3dfd29ya19xdWV1ZSkgJiYKKwkJIGF0b21pY19yZWFkKCZ2c2xvd193b3JrX2V4ZWN1dGluZ19jb3VudCkgPCB2c21heCk7Cit9CisKKy8qCisgKiBXb3JrZXIgdGhyZWFkIGRpc3BhdGNoZXIKKyAqLworc3RhdGljIGludCBzbG93X3dvcmtfdGhyZWFkKHZvaWQgKl9kYXRhKQoreworCWludCB2c21heDsKKworCURFRklORV9XQUlUKHdhaXQpOworCisJc2V0X2ZyZWV6YWJsZSgpOworCXNldF91c2VyX25pY2UoY3VycmVudCwgLTUpOworCisJZm9yICg7OykgeworCQl2c21heCA9IHZzbG93X3dvcmtfcHJvcG9ydGlvbjsKKwkJdnNtYXggKj0gYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpOworCQl2c21heCAvPSAxMDA7CisKKwkJcHJlcGFyZV90b193YWl0KCZzbG93X3dvcmtfdGhyZWFkX3dxLCAmd2FpdCwKKwkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAoIWZyZWV6aW5nKGN1cnJlbnQpICYmCisJCSAgICAhc2xvd193b3JrX3RocmVhZHNfc2hvdWxkX2V4aXQgJiYKKwkJICAgICFzbG93X3dvcmtfYXZhaWxhYmxlKHZzbWF4KSAmJgorCQkgICAgIXNsb3dfd29ya19jdWxsKQorCQkJc2NoZWR1bGUoKTsKKwkJZmluaXNoX3dhaXQoJnNsb3dfd29ya190aHJlYWRfd3EsICZ3YWl0KTsKKworCQl0cnlfdG9fZnJlZXplKCk7CisKKwkJdnNtYXggPSB2c2xvd193b3JrX3Byb3BvcnRpb247CisJCXZzbWF4ICo9IGF0b21pY19yZWFkKCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KTsKKwkJdnNtYXggLz0gMTAwOworCisJCWlmIChzbG93X3dvcmtfYXZhaWxhYmxlKHZzbWF4KSAmJiBzbG93X3dvcmtfZXhlY3V0ZSgpKSB7CisJCQljb25kX3Jlc2NoZWQoKTsKKwkJCWlmIChsaXN0X2VtcHR5KCZzbG93X3dvcmtfcXVldWUpICYmCisJCQkgICAgbGlzdF9lbXB0eSgmdnNsb3dfd29ya19xdWV1ZSkgJiYKKwkJCSAgICBhdG9taWNfcmVhZCgmc2xvd193b3JrX3RocmVhZF9jb3VudCkgPgorCQkJICAgIHNsb3dfd29ya19taW5fdGhyZWFkcykKKwkJCQltb2RfdGltZXIoJnNsb3dfd29ya19jdWxsX3RpbWVyLAorCQkJCQkgIGppZmZpZXMgKyBTTE9XX1dPUktfQ1VMTF9USU1FT1VUKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0KQorCQkJYnJlYWs7CisKKwkJaWYgKHNsb3dfd29ya19jdWxsICYmIHNsb3dfd29ya19jdWxsX3RocmVhZCgpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNsb3dfd29ya190aHJlYWRfY291bnQpKQorCQljb21wbGV0ZV9hbmRfZXhpdCgmc2xvd193b3JrX2xhc3RfdGhyZWFkX2V4aXRlZCwgMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBIYW5kbGUgdGhyZWFkIGN1bGwgdGltZXIgZXhwaXJhdGlvbgorICovCitzdGF0aWMgdm9pZCBzbG93X3dvcmtfY3VsbF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzbG93X3dvcmtfY3VsbCA9IHRydWU7CisJd2FrZV91cCgmc2xvd193b3JrX3RocmVhZF93cSk7Cit9CisKKy8qCisgKiBHZXQgYSByZWZlcmVuY2Ugb24gc2xvdyB3b3JrIHRocmVhZCBzdGFydGVyCisgKi8KK3N0YXRpYyBpbnQgc2xvd193b3JrX25ld190aHJlYWRfZ2V0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworCXJldHVybiAwOworfQorCisvKgorICogRHJvcCBhIHJlZmVyZW5jZSBvbiBzbG93IHdvcmsgdGhyZWFkIHN0YXJ0ZXIKKyAqLworc3RhdGljIHZvaWQgc2xvd193b3JrX25ld190aHJlYWRfcHV0X3JlZihzdHJ1Y3Qgc2xvd193b3JrICp3b3JrKQoreworfQorCisvKgorICogU3RhcnQgYSBuZXcgc2xvdyB3b3JrIHRocmVhZAorICovCitzdGF0aWMgdm9pZCBzbG93X3dvcmtfbmV3X3RocmVhZF9leGVjdXRlKHN0cnVjdCBzbG93X3dvcmsgKndvcmspCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCisJaWYgKHNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0KQorCQlyZXR1cm47CisKKwlpZiAoYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpID49IHNsb3dfd29ya19tYXhfdGhyZWFkcykKKwkJcmV0dXJuOworCisJaWYgKCFtdXRleF90cnlsb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKSkKKwkJcmV0dXJuOworCisJc2xvd193b3JrX21heV9ub3Rfc3RhcnRfbmV3X3RocmVhZCA9IHRydWU7CisJYXRvbWljX2luYygmc2xvd193b3JrX3RocmVhZF9jb3VudCk7CisJcCA9IGt0aHJlYWRfcnVuKHNsb3dfd29ya190aHJlYWQsIE5VTEwsICJrc2xvd2QiKTsKKwlpZiAoSVNfRVJSKHApKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJTbG93IHdvcmsgdGhyZWFkIHBvb2w6IE9PTVxuIik7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzbG93X3dvcmtfdGhyZWFkX2NvdW50KSkKKwkJCUJVRygpOyAvKiB3ZSdyZSBydW5uaW5nIG9uIGEgc2xvdyB3b3JrIHRocmVhZC4uLiAqLworCQltb2RfdGltZXIoJnNsb3dfd29ya19vb21fdGltZXIsCisJCQkgIGppZmZpZXMgKyBTTE9XX1dPUktfT09NX1RJTUVPVVQpOworCX0gZWxzZSB7CisJCS8qIHJhdGVsaW1pdCB0aGUgc3RhcnRpbmcgb2YgbmV3IHRocmVhZHMgKi8KKwkJbW9kX3RpbWVyKCZzbG93X3dvcmtfb29tX3RpbWVyLCBqaWZmaWVzICsgMSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbG93X3dvcmtfb3BzIHNsb3dfd29ya19uZXdfdGhyZWFkX29wcyA9IHsKKwkuZ2V0X3JlZgk9IHNsb3dfd29ya19uZXdfdGhyZWFkX2dldF9yZWYsCisJLnB1dF9yZWYJPSBzbG93X3dvcmtfbmV3X3RocmVhZF9wdXRfcmVmLAorCS5leGVjdXRlCT0gc2xvd193b3JrX25ld190aHJlYWRfZXhlY3V0ZSwKK307CisKKy8qCisgKiBwb3N0LU9PTSBuZXcgdGhyZWFkIHN0YXJ0IHN1cHByZXNzaW9uIGV4cGlyYXRpb24KKyAqLworc3RhdGljIHZvaWQgc2xvd193b3JrX29vbV90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzbG93X3dvcmtfbWF5X25vdF9zdGFydF9uZXdfdGhyZWFkID0gZmFsc2U7Cit9CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisvKgorICogSGFuZGxlIGFkanVzdG1lbnQgb2YgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHRocmVhZHMKKyAqLworc3RhdGljIGludCBzbG93X3dvcmtfbWluX3RocmVhZHNfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCisJCQkJCXN0cnVjdCBmaWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYnVmZmVyLAorCQkJCQlzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgcmV0ID0gcHJvY19kb2ludHZlY19taW5tYXgodGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCWludCBuOworCisJaWYgKHJldCA9PSAwKSB7CisJCW11dGV4X2xvY2soJnNsb3dfd29ya191c2VyX2xvY2spOworCQlpZiAoc2xvd193b3JrX3VzZXJfY291bnQgPiAwKSB7CisJCQkvKiBzZWUgaWYgd2UgbmVlZCB0byBzdGFydCBvciBzdG9wIHRocmVhZHMgKi8KKwkJCW4gPSBhdG9taWNfcmVhZCgmc2xvd193b3JrX3RocmVhZF9jb3VudCkgLQorCQkJCXNsb3dfd29ya19taW5fdGhyZWFkczsKKworCQkJaWYgKG4gPCAwICYmICFzbG93X3dvcmtfbWF5X25vdF9zdGFydF9uZXdfdGhyZWFkKQorCQkJCXNsb3dfd29ya19lbnF1ZXVlKCZzbG93X3dvcmtfbmV3X3RocmVhZCk7CisJCQllbHNlIGlmIChuID4gMCkKKwkJCQltb2RfdGltZXIoJnNsb3dfd29ya19jdWxsX3RpbWVyLAorCQkJCQkgIGppZmZpZXMgKyBTTE9XX1dPUktfQ1VMTF9USU1FT1VUKTsKKwkJfQorCQltdXRleF91bmxvY2soJnNsb3dfd29ya191c2VyX2xvY2spOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBIYW5kbGUgYWRqdXN0bWVudCBvZiB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcworICovCitzdGF0aWMgaW50IHNsb3dfd29ya19tYXhfdGhyZWFkc19zeXNjdGwoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKKwkJCQkJc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgX191c2VyICpidWZmZXIsCisJCQkJCXNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQoreworCWludCByZXQgPSBwcm9jX2RvaW50dmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJaW50IG47CisKKwlpZiAocmV0ID09IDApIHsKKwkJbXV0ZXhfbG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7CisJCWlmIChzbG93X3dvcmtfdXNlcl9jb3VudCA+IDApIHsKKwkJCS8qIHNlZSBpZiB3ZSBuZWVkIHRvIHN0b3AgdGhyZWFkcyAqLworCQkJbiA9IHNsb3dfd29ya19tYXhfdGhyZWFkcyAtCisJCQkJYXRvbWljX3JlYWQoJnNsb3dfd29ya190aHJlYWRfY291bnQpOworCisJCQlpZiAobiA8IDApCisJCQkJbW9kX3RpbWVyKCZzbG93X3dvcmtfY3VsbF90aW1lciwKKwkJCQkJICBqaWZmaWVzICsgU0xPV19XT1JLX0NVTExfVElNRU9VVCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZzbG93X3dvcmtfdXNlcl9sb2NrKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KKworLyoqCisgKiBzbG93X3dvcmtfcmVnaXN0ZXJfdXNlciAtIFJlZ2lzdGVyIGEgdXNlciBvZiB0aGUgZmFjaWxpdHkKKyAqCisgKiBSZWdpc3RlciBhIHVzZXIgb2YgdGhlIGZhY2lsaXR5LCBzdGFydGluZyB1cCB0aGUgaW5pdGlhbCB0aHJlYWRzIGlmIHRoZXJlCisgKiBhcmVuJ3QgYW55IG90aGVyIHVzZXJzIGF0IHRoaXMgcG9pbnQuICBUaGlzIHdpbGwgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IKKyAqIGFuIGVycm9yIGlmIG5vdC4KKyAqLworaW50IHNsb3dfd29ya19yZWdpc3Rlcl91c2VyKHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCWludCBsb29wOworCisJbXV0ZXhfbG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7CisKKwlpZiAoc2xvd193b3JrX3VzZXJfY291bnQgPT0gMCkgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNsb3cgd29yayB0aHJlYWQgcG9vbDogU3RhcnRpbmcgdXBcbiIpOworCQlpbml0X2NvbXBsZXRpb24oJnNsb3dfd29ya19sYXN0X3RocmVhZF9leGl0ZWQpOworCisJCXNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0ID0gZmFsc2U7CisJCXNsb3dfd29ya19pbml0KCZzbG93X3dvcmtfbmV3X3RocmVhZCwKKwkJCSAgICAgICAmc2xvd193b3JrX25ld190aHJlYWRfb3BzKTsKKwkJc2xvd193b3JrX21heV9ub3Rfc3RhcnRfbmV3X3RocmVhZCA9IGZhbHNlOworCQlzbG93X3dvcmtfY3VsbCA9IGZhbHNlOworCisJCS8qIHN0YXJ0IHRoZSBtaW5pbXVtIG51bWJlciBvZiB0aHJlYWRzICovCisJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBzbG93X3dvcmtfbWluX3RocmVhZHM7IGxvb3ArKykgeworCQkJYXRvbWljX2luYygmc2xvd193b3JrX3RocmVhZF9jb3VudCk7CisJCQlwID0ga3RocmVhZF9ydW4oc2xvd193b3JrX3RocmVhZCwgTlVMTCwgImtzbG93ZCIpOworCQkJaWYgKElTX0VSUihwKSkKKwkJCQlnb3RvIGVycm9yOworCQl9CisJCXByaW50ayhLRVJOX05PVElDRSAiU2xvdyB3b3JrIHRocmVhZCBwb29sOiBSZWFkeVxuIik7CisJfQorCisJc2xvd193b3JrX3VzZXJfY291bnQrKzsKKwltdXRleF91bmxvY2soJnNsb3dfd29ya191c2VyX2xvY2spOworCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2xvd193b3JrX3RocmVhZF9jb3VudCkpCisJCWNvbXBsZXRlKCZzbG93X3dvcmtfbGFzdF90aHJlYWRfZXhpdGVkKTsKKwlpZiAobG9vcCA+IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTbG93IHdvcmsgdGhyZWFkIHBvb2w6IgorCQkgICAgICAgIiBBYm9ydGluZyBzdGFydHVwIG9uIEVOT01FTVxuIik7CisJCXNsb3dfd29ya190aHJlYWRzX3Nob3VsZF9leGl0ID0gdHJ1ZTsKKwkJd2FrZV91cF9hbGwoJnNsb3dfd29ya190aHJlYWRfd3EpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZzbG93X3dvcmtfbGFzdF90aHJlYWRfZXhpdGVkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJTbG93IHdvcmsgdGhyZWFkIHBvb2w6IEFib3J0ZWRcbiIpOworCX0KKwltdXRleF91bmxvY2soJnNsb3dfd29ya191c2VyX2xvY2spOworCXJldHVybiBQVFJfRVJSKHApOworfQorRVhQT1JUX1NZTUJPTChzbG93X3dvcmtfcmVnaXN0ZXJfdXNlcik7CisKKy8qKgorICogc2xvd193b3JrX3VucmVnaXN0ZXJfdXNlciAtIFVucmVnaXN0ZXIgYSB1c2VyIG9mIHRoZSBmYWNpbGl0eQorICoKKyAqIFVucmVnaXN0ZXIgYSB1c2VyIG9mIHRoZSBmYWNpbGl0eSwga2lsbGluZyBhbGwgdGhlIHRocmVhZHMgaWYgdGhpcyB3YXMgdGhlCisgKiBsYXN0IG9uZS4KKyAqLwordm9pZCBzbG93X3dvcmtfdW5yZWdpc3Rlcl91c2VyKHZvaWQpCit7CisJbXV0ZXhfbG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7CisKKwlCVUdfT04oc2xvd193b3JrX3VzZXJfY291bnQgPD0gMCk7CisKKwlzbG93X3dvcmtfdXNlcl9jb3VudC0tOworCWlmIChzbG93X3dvcmtfdXNlcl9jb3VudCA9PSAwKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiU2xvdyB3b3JrIHRocmVhZCBwb29sOiBTaHV0dGluZyBkb3duXG4iKTsKKwkJc2xvd193b3JrX3RocmVhZHNfc2hvdWxkX2V4aXQgPSB0cnVlOworCQl3YWtlX3VwX2FsbCgmc2xvd193b3JrX3RocmVhZF93cSk7CisJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNsb3dfd29ya19sYXN0X3RocmVhZF9leGl0ZWQpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNsb3cgd29yayB0aHJlYWQgcG9vbDoiCisJCSAgICAgICAiIFNodXQgZG93biBjb21wbGV0ZVxuIik7CisJfQorCisJZGVsX3RpbWVyX3N5bmMoJnNsb3dfd29ya19jdWxsX3RpbWVyKTsKKworCW11dGV4X3VubG9jaygmc2xvd193b3JrX3VzZXJfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHNsb3dfd29ya191bnJlZ2lzdGVyX3VzZXIpOworCisvKgorICogSW5pdGlhbGlzZSB0aGUgc2xvdyB3b3JrIGZhY2lsaXR5CisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGluaXRfc2xvd193b3JrKHZvaWQpCit7CisJdW5zaWduZWQgbnJfY3B1cyA9IG51bV9wb3NzaWJsZV9jcHVzKCk7CisKKwlpZiAoc2xvd193b3JrX21heF90aHJlYWRzIDwgbnJfY3B1cykKKwkJc2xvd193b3JrX21heF90aHJlYWRzID0gbnJfY3B1czsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJaWYgKHNsb3dfd29ya19tYXhfbWF4X3RocmVhZHMgPCBucl9jcHVzICogMikKKwkJc2xvd193b3JrX21heF9tYXhfdGhyZWFkcyA9IG5yX2NwdXMgKiAyOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChpbml0X3Nsb3dfd29yayk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc21wLmMgYi9rZXJuZWwvc21wLmMKaW5kZXggYmJlZGJiNy4uODU4YmFhYyAxMDA2NDQKLS0tIGEva2VybmVsL3NtcC5jCisrKyBiL2tlcm5lbC9zbXAuYwpAQCAtMiw0MCArMiw4MiBAQAogICogR2VuZXJpYyBoZWxwZXJzIGZvciBzbXAgaXBpIGNhbGxzCiAgKgogICogKEMpIEplbnMgQXhib2UgPGplbnMuYXhib2VAb3JhY2xlLmNvbT4gMjAwOAotICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2FsbF9zaW5nbGVfcXVldWUsIGNhbGxfc2luZ2xlX3F1ZXVlKTsKLXN0YXRpYyBMSVNUX0hFQUQoY2FsbF9mdW5jdGlvbl9xdWV1ZSk7Ci1fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU1BJTkxPQ0soY2FsbF9mdW5jdGlvbl9sb2NrKTsKKworc3RhdGljIHN0cnVjdCB7CisJc3RydWN0IGxpc3RfaGVhZAlxdWV1ZTsKKwlzcGlubG9ja190CQlsb2NrOworfSBjYWxsX2Z1bmN0aW9uIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wID0KKwl7CisJCS5xdWV1ZQkJPSBMSVNUX0hFQURfSU5JVChjYWxsX2Z1bmN0aW9uLnF1ZXVlKSwKKwkJLmxvY2sJCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoY2FsbF9mdW5jdGlvbi5sb2NrKSwKKwl9OwogCiBlbnVtIHsKLQlDU0RfRkxBR19XQUlUCQk9IDB4MDEsCi0JQ1NEX0ZMQUdfQUxMT0MJCT0gMHgwMiwKLQlDU0RfRkxBR19MT0NLCQk9IDB4MDQsCisJQ1NEX0ZMQUdfTE9DSwkJPSAweDAxLAogfTsKIAogc3RydWN0IGNhbGxfZnVuY3Rpb25fZGF0YSB7Ci0Jc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgY3NkOwotCXNwaW5sb2NrX3QgbG9jazsKLQl1bnNpZ25lZCBpbnQgcmVmczsKLQlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7Ci0JdW5zaWduZWQgbG9uZyBjcHVtYXNrX2JpdHNbXTsKKwlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YQljc2Q7CisJc3BpbmxvY2tfdAkJbG9jazsKKwl1bnNpZ25lZCBpbnQJCXJlZnM7CisJY3B1bWFza192YXJfdAkJY3B1bWFzazsKIH07CiAKIHN0cnVjdCBjYWxsX3NpbmdsZV9xdWV1ZSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3BpbmxvY2tfdAkJbG9jazsKK307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhLCBjZmRfZGF0YSkgPSB7CisJLmxvY2sJCQk9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGNmZF9kYXRhLmxvY2spLAorfTsKKworc3RhdGljIGludAoraG90cGx1Z19jZmQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCWxvbmcgY3B1ID0gKGxvbmcpaGNwdTsKKwlzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhICpjZmQgPSAmcGVyX2NwdShjZmRfZGF0YSwgY3B1KTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKKwkJaWYgKCFhbGxvY19jcHVtYXNrX3Zhcl9ub2RlKCZjZmQtPmNwdW1hc2ssIEdGUF9LRVJORUwsCisJCQkJY3B1X3RvX25vZGUoY3B1KSkpCisJCQlyZXR1cm4gTk9USUZZX0JBRDsKKwkJYnJlYWs7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0hPVFBMVUcKKwljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CisKKwljYXNlIENQVV9ERUFEOgorCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgorCQlmcmVlX2NwdW1hc2tfdmFyKGNmZC0+Y3B1bWFzayk7CisJCWJyZWFrOworI2VuZGlmCisJfTsKKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBob3RwbHVnX2NmZF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbAkJPSBob3RwbHVnX2NmZCwKIH07CiAKIHN0YXRpYyBpbnQgX19jcHVpbml0IGluaXRfY2FsbF9zaW5nbGVfZGF0YSh2b2lkKQogeworCXZvaWQgKmNwdSA9ICh2b2lkICopKGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWludCBpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKQEAgLTQ0LDI5ICs4Niw2MyBAQAogCQlzcGluX2xvY2tfaW5pdCgmcS0+bG9jayk7CiAJCUlOSVRfTElTVF9IRUFEKCZxLT5saXN0KTsKIAl9CisKKwlob3RwbHVnX2NmZCgmaG90cGx1Z19jZmRfbm90aWZpZXIsIENQVV9VUF9QUkVQQVJFLCBjcHUpOworCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmaG90cGx1Z19jZmRfbm90aWZpZXIpOworCiAJcmV0dXJuIDA7CiB9CiBlYXJseV9pbml0Y2FsbChpbml0X2NhbGxfc2luZ2xlX2RhdGEpOwogCi1zdGF0aWMgdm9pZCBjc2RfZmxhZ193YWl0KHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpkYXRhKQorLyoKKyAqIGNzZF9sb2NrL2NzZF91bmxvY2sgdXNlZCB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHBlci1jcHUgY3NkIHJlc291cmNlcworICoKKyAqIEZvciBub24tc3luY2hyb25vdXMgaXBpIGNhbGxzIHRoZSBjc2QgY2FuIHN0aWxsIGJlIGluIHVzZSBieSB0aGUKKyAqIHByZXZpb3VzIGZ1bmN0aW9uIGNhbGwuIEZvciBtdWx0aS1jcHUgY2FsbHMgaXRzIGV2ZW4gbW9yZSBpbnRlcmVzdGluZworICogYXMgd2UnbGwgaGF2ZSB0byBlbnN1cmUgbm8gb3RoZXIgY3B1IGlzIG9ic2VydmluZyBvdXIgY3NkLgorICovCitzdGF0aWMgdm9pZCBjc2RfbG9ja193YWl0KHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpkYXRhKQogewotCS8qIFdhaXQgZm9yIHJlc3BvbnNlICovCi0JZG8gewotCQlpZiAoIShkYXRhLT5mbGFncyAmIENTRF9GTEFHX1dBSVQpKQotCQkJYnJlYWs7CisJd2hpbGUgKGRhdGEtPmZsYWdzICYgQ1NEX0ZMQUdfTE9DSykKIAkJY3B1X3JlbGF4KCk7Ci0JfSB3aGlsZSAoMSk7Cit9CisKK3N0YXRpYyB2b2lkIGNzZF9sb2NrKHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpkYXRhKQoreworCWNzZF9sb2NrX3dhaXQoZGF0YSk7CisJZGF0YS0+ZmxhZ3MgPSBDU0RfRkxBR19MT0NLOworCisJLyoKKwkgKiBwcmV2ZW50IENQVSBmcm9tIHJlb3JkZXJpbmcgdGhlIGFib3ZlIGFzc2lnbm1lbnQKKwkgKiB0byAtPmZsYWdzIHdpdGggYW55IHN1YnNlcXVlbnQgYXNzaWdubWVudHMgdG8gb3RoZXIKKwkgKiBmaWVsZHMgb2YgdGhlIHNwZWNpZmllZCBjYWxsX3NpbmdsZV9kYXRhIHN0cnVjdHVyZToKKwkgKi8KKwlzbXBfbWIoKTsKK30KKworc3RhdGljIHZvaWQgY3NkX3VubG9jayhzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqZGF0YSkKK3sKKwlXQVJOX09OKCEoZGF0YS0+ZmxhZ3MgJiBDU0RfRkxBR19MT0NLKSk7CisKKwkvKgorCSAqIGVuc3VyZSB3ZSdyZSBhbGwgZG9uZSBiZWZvcmUgcmVsZWFzaW5nIGRhdGE6CisJICovCisJc21wX21iKCk7CisKKwlkYXRhLT5mbGFncyAmPSB+Q1NEX0ZMQUdfTE9DSzsKIH0KIAogLyoKLSAqIEluc2VydCBhIHByZXZpb3VzbHkgYWxsb2NhdGVkIGNhbGxfc2luZ2xlX2RhdGEgZWxlbWVudCBmb3IgZXhlY3V0aW9uCi0gKiBvbiB0aGUgZ2l2ZW4gQ1BVLiBkYXRhIG11c3QgYWxyZWFkeSBoYXZlIC0+ZnVuYywgLT5pbmZvLCBhbmQgLT5mbGFncyBzZXQuCisgKiBJbnNlcnQgYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBjYWxsX3NpbmdsZV9kYXRhIGVsZW1lbnQKKyAqIGZvciBleGVjdXRpb24gb24gdGhlIGdpdmVuIENQVS4gZGF0YSBtdXN0IGFscmVhZHkgaGF2ZQorICogLT5mdW5jLCAtPmluZm8sIGFuZCAtPmZsYWdzIHNldC4KICAqLwotc3RhdGljIHZvaWQgZ2VuZXJpY19leGVjX3NpbmdsZShpbnQgY3B1LCBzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqZGF0YSkKK3N0YXRpYwordm9pZCBnZW5lcmljX2V4ZWNfc2luZ2xlKGludCBjcHUsIHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpkYXRhLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3QgY2FsbF9zaW5nbGVfcXVldWUgKmRzdCA9ICZwZXJfY3B1KGNhbGxfc2luZ2xlX3F1ZXVlLCBjcHUpOwotCWludCB3YWl0ID0gZGF0YS0+ZmxhZ3MgJiBDU0RfRkxBR19XQUlULCBpcGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaXBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRzdC0+bG9jaywgZmxhZ3MpOwogCWlwaSA9IGxpc3RfZW1wdHkoJmRzdC0+bGlzdCk7CkBAIC03NCwyNCArMTUwLDIxIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHN0LT5sb2NrLCBmbGFncyk7CiAKIAkvKgotCSAqIE1ha2UgdGhlIGxpc3QgYWRkaXRpb24gdmlzaWJsZSBiZWZvcmUgc2VuZGluZyB0aGUgaXBpLgorCSAqIFRoZSBsaXN0IGFkZGl0aW9uIHNob3VsZCBiZSB2aXNpYmxlIGJlZm9yZSBzZW5kaW5nIHRoZSBJUEkKKwkgKiBoYW5kbGVyIGxvY2tzIHRoZSBsaXN0IHRvIHB1bGwgdGhlIGVudHJ5IG9mZiBpdCBiZWNhdXNlIG9mCisJICogbm9ybWFsIGNhY2hlIGNvaGVyZW5jeSBydWxlcyBpbXBsaWVkIGJ5IHNwaW5sb2Nrcy4KKwkgKgorCSAqIElmIElQSXMgY2FuIGdvIG91dCBvZiBvcmRlciB0byB0aGUgY2FjaGUgY29oZXJlbmN5IHByb3RvY29sCisJICogaW4gYW4gYXJjaGl0ZWN0dXJlLCBzdWZmaWNpZW50IHN5bmNocm9uaXNhdGlvbiBzaG91bGQgYmUgYWRkZWQKKwkgKiB0byBhcmNoIGNvZGUgdG8gbWFrZSBpdCBhcHBlYXIgdG8gb2JleSBjYWNoZSBjb2hlcmVuY3kgV1JUCisJICogbG9ja2luZyBhbmQgYmFycmllciBwcmltaXRpdmVzLiBHZW5lcmljIGNvZGUgaXNuJ3QgcmVhbGx5CisJICogZXF1aXBwZWQgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nLi4uCiAJICovCi0Jc21wX21iKCk7Ci0KIAlpZiAoaXBpKQogCQlhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGNwdSk7CiAKIAlpZiAod2FpdCkKLQkJY3NkX2ZsYWdfd2FpdChkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgcmN1X2ZyZWVfY2FsbF9kYXRhKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhICpkYXRhOwotCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgY2FsbF9mdW5jdGlvbl9kYXRhLCByY3VfaGVhZCk7Ci0KLQlrZnJlZShkYXRhKTsKKwkJY3NkX2xvY2tfd2FpdChkYXRhKTsKIH0KIAogLyoKQEAgLTEwNCw5OSArMTc3LDgzIEBACiAJaW50IGNwdSA9IGdldF9jcHUoKTsKIAogCS8qCi0JICogSXQncyBvayB0byB1c2UgbGlzdF9mb3JfZWFjaF9yY3UoKSBoZXJlIGV2ZW4gdGhvdWdoIHdlIG1heSBkZWxldGUKLQkgKiAncG9zJywgc2luY2UgbGlzdF9kZWxfcmN1KCkgZG9lc24ndCBjbGVhciAtPm5leHQKKwkgKiBFbnN1cmUgZW50cnkgaXMgdmlzaWJsZSBvbiBjYWxsX2Z1bmN0aW9uX3F1ZXVlIGFmdGVyIHdlIGhhdmUKKwkgKiBlbnRlcmVkIHRoZSBJUEkuIFNlZSBjb21tZW50IGluIHNtcF9jYWxsX2Z1bmN0aW9uX21hbnkuCisJICogSWYgd2UgZG9uJ3QgaGF2ZSB0aGlzLCB0aGVuIHdlIG1heSBtaXNzIGFuIGVudHJ5IG9uIHRoZSBsaXN0CisJICogYW5kIG5ldmVyIGdldCBhbm90aGVyIElQSSB0byBwcm9jZXNzIGl0LgogCSAqLwotCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkYXRhLCAmY2FsbF9mdW5jdGlvbl9xdWV1ZSwgY3NkLmxpc3QpIHsKKwlzbXBfbWIoKTsKKworCS8qCisJICogSXQncyBvayB0byB1c2UgbGlzdF9mb3JfZWFjaF9yY3UoKSBoZXJlIGV2ZW4gdGhvdWdoIHdlIG1heQorCSAqIGRlbGV0ZSAncG9zJywgc2luY2UgbGlzdF9kZWxfcmN1KCkgZG9lc24ndCBjbGVhciAtPm5leHQKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkYXRhLCAmY2FsbF9mdW5jdGlvbi5xdWV1ZSwgY3NkLmxpc3QpIHsKIAkJaW50IHJlZnM7CiAKLQkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgdG9fY3B1bWFzayhkYXRhLT5jcHVtYXNrX2JpdHMpKSkKKwkJc3Bpbl9sb2NrKCZkYXRhLT5sb2NrKTsKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgZGF0YS0+Y3B1bWFzaykpIHsKKwkJCXNwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAkJCWNvbnRpbnVlOworCQl9CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgZGF0YS0+Y3B1bWFzayk7CisJCXNwaW5fdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAogCQlkYXRhLT5jc2QuZnVuYyhkYXRhLT5jc2QuaW5mbyk7CiAKIAkJc3Bpbl9sb2NrKCZkYXRhLT5sb2NrKTsKLQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCB0b19jcHVtYXNrKGRhdGEtPmNwdW1hc2tfYml0cykpOwogCQlXQVJOX09OKGRhdGEtPnJlZnMgPT0gMCk7Ci0JCWRhdGEtPnJlZnMtLTsKLQkJcmVmcyA9IGRhdGEtPnJlZnM7CisJCXJlZnMgPSAtLWRhdGEtPnJlZnM7CisJCWlmICghcmVmcykgeworCQkJc3Bpbl9sb2NrKCZjYWxsX2Z1bmN0aW9uLmxvY2spOworCQkJbGlzdF9kZWxfcmN1KCZkYXRhLT5jc2QubGlzdCk7CisJCQlzcGluX3VubG9jaygmY2FsbF9mdW5jdGlvbi5sb2NrKTsKKwkJfQogCQlzcGluX3VubG9jaygmZGF0YS0+bG9jayk7CiAKIAkJaWYgKHJlZnMpCiAJCQljb250aW51ZTsKIAotCQlzcGluX2xvY2soJmNhbGxfZnVuY3Rpb25fbG9jayk7Ci0JCWxpc3RfZGVsX3JjdSgmZGF0YS0+Y3NkLmxpc3QpOwotCQlzcGluX3VubG9jaygmY2FsbF9mdW5jdGlvbl9sb2NrKTsKLQotCQlpZiAoZGF0YS0+Y3NkLmZsYWdzICYgQ1NEX0ZMQUdfV0FJVCkgewotCQkJLyoKLQkJCSAqIHNlcmlhbGl6ZSBzdG9yZXMgdG8gZGF0YSB3aXRoIHRoZSBmbGFnIGNsZWFyCi0JCQkgKiBhbmQgd2FrZXVwCi0JCQkgKi8KLQkJCXNtcF93bWIoKTsKLQkJCWRhdGEtPmNzZC5mbGFncyAmPSB+Q1NEX0ZMQUdfV0FJVDsKLQkJfQotCQlpZiAoZGF0YS0+Y3NkLmZsYWdzICYgQ1NEX0ZMQUdfQUxMT0MpCi0JCQljYWxsX3JjdSgmZGF0YS0+cmN1X2hlYWQsIHJjdV9mcmVlX2NhbGxfZGF0YSk7CisJCWNzZF91bmxvY2soJmRhdGEtPmNzZCk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcHV0X2NwdSgpOwogfQogCiAvKgotICogSW52b2tlZCBieSBhcmNoIHRvIGhhbmRsZSBhbiBJUEkgZm9yIGNhbGwgZnVuY3Rpb24gc2luZ2xlLiBNdXN0IGJlIGNhbGxlZAotICogZnJvbSB0aGUgYXJjaCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKiBJbnZva2VkIGJ5IGFyY2ggdG8gaGFuZGxlIGFuIElQSSBmb3IgY2FsbCBmdW5jdGlvbiBzaW5nbGUuIE11c3QgYmUKKyAqIGNhbGxlZCBmcm9tIHRoZSBhcmNoIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KICAqLwogdm9pZCBnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQodm9pZCkKIHsKIAlzdHJ1Y3QgY2FsbF9zaW5nbGVfcXVldWUgKnEgPSAmX19nZXRfY3B1X3ZhcihjYWxsX3NpbmdsZV9xdWV1ZSk7CisJdW5zaWduZWQgaW50IGRhdGFfZmxhZ3M7CiAJTElTVF9IRUFEKGxpc3QpOwogCi0JLyoKLQkgKiBOZWVkIHRvIHNlZSBvdGhlciBzdG9yZXMgdG8gbGlzdCBoZWFkIGZvciBjaGVja2luZyB3aGV0aGVyCi0JICogbGlzdCBpcyBlbXB0eSB3aXRob3V0IGhvbGRpbmcgcS0+bG9jawotCSAqLwotCXNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpOwotCXdoaWxlICghbGlzdF9lbXB0eSgmcS0+bGlzdCkpIHsKLQkJdW5zaWduZWQgaW50IGRhdGFfZmxhZ3M7CisJc3Bpbl9sb2NrKCZxLT5sb2NrKTsKKwlsaXN0X3JlcGxhY2VfaW5pdCgmcS0+bGlzdCwgJmxpc3QpOworCXNwaW5fdW5sb2NrKCZxLT5sb2NrKTsKIAotCQlzcGluX2xvY2soJnEtPmxvY2spOwotCQlsaXN0X3JlcGxhY2VfaW5pdCgmcS0+bGlzdCwgJmxpc3QpOwotCQlzcGluX3VubG9jaygmcS0+bG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZsaXN0KSkgeworCQlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqZGF0YTsKIAotCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmxpc3QpKSB7Ci0JCQlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSAqZGF0YTsKKwkJZGF0YSA9IGxpc3RfZW50cnkobGlzdC5uZXh0LCBzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSwgbGlzdCk7CisJCWxpc3RfZGVsKCZkYXRhLT5saXN0KTsKIAotCQkJZGF0YSA9IGxpc3RfZW50cnkobGlzdC5uZXh0LCBzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSwKLQkJCQkJCWxpc3QpOwotCQkJbGlzdF9kZWwoJmRhdGEtPmxpc3QpOwotCi0JCQkvKgotCQkJICogJ2RhdGEnIGNhbiBiZSBpbnZhbGlkIGFmdGVyIHRoaXMgY2FsbCBpZgotCQkJICogZmxhZ3MgPT0gMCAod2hlbiBjYWxsZWQgdGhyb3VnaAotCQkJICogZ2VuZXJpY19leGVjX3NpbmdsZSgpLCBzbyBzYXZlIHRoZW0gYXdheSBiZWZvcmUKLQkJCSAqIG1ha2luZyB0aGUgY2FsbC4KLQkJCSAqLwotCQkJZGF0YV9mbGFncyA9IGRhdGEtPmZsYWdzOwotCi0JCQlkYXRhLT5mdW5jKGRhdGEtPmluZm8pOwotCi0JCQlpZiAoZGF0YV9mbGFncyAmIENTRF9GTEFHX1dBSVQpIHsKLQkJCQlzbXBfd21iKCk7Ci0JCQkJZGF0YS0+ZmxhZ3MgJj0gfkNTRF9GTEFHX1dBSVQ7Ci0JCQl9IGVsc2UgaWYgKGRhdGFfZmxhZ3MgJiBDU0RfRkxBR19MT0NLKSB7Ci0JCQkJc21wX3dtYigpOwotCQkJCWRhdGEtPmZsYWdzICY9IH5DU0RfRkxBR19MT0NLOwotCQkJfSBlbHNlIGlmIChkYXRhX2ZsYWdzICYgQ1NEX0ZMQUdfQUxMT0MpCi0JCQkJa2ZyZWUoZGF0YSk7Ci0JCX0KIAkJLyoKLQkJICogU2VlIGNvbW1lbnQgb24gb3V0ZXIgbG9vcAorCQkgKiAnZGF0YScgY2FuIGJlIGludmFsaWQgYWZ0ZXIgdGhpcyBjYWxsIGlmIGZsYWdzID09IDAKKwkJICogKHdoZW4gY2FsbGVkIHRocm91Z2ggZ2VuZXJpY19leGVjX3NpbmdsZSgpKSwKKwkJICogc28gc2F2ZSB0aGVtIGF3YXkgYmVmb3JlIG1ha2luZyB0aGUgY2FsbDoKIAkJICovCi0JCXNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpOworCQlkYXRhX2ZsYWdzID0gZGF0YS0+ZmxhZ3M7CisKKwkJZGF0YS0+ZnVuYyhkYXRhLT5pbmZvKTsKKworCQkvKgorCQkgKiBVbmxvY2tlZCBDU0RzIGFyZSB2YWxpZCB0aHJvdWdoIGdlbmVyaWNfZXhlY19zaW5nbGUoKToKKwkJICovCisJCWlmIChkYXRhX2ZsYWdzICYgQ1NEX0ZMQUdfTE9DSykKKwkJCWNzZF91bmxvY2soZGF0YSk7CiAJfQogfQogCkBAIC0yMTUsNjUgKzI3Miw0NSBAQAogaW50IHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShpbnQgY3B1LCB2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLAogCQkJICAgICBpbnQgd2FpdCkKIHsKLQlzdHJ1Y3QgY2FsbF9zaW5nbGVfZGF0YSBkOworCXN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhIGQgPSB7CisJCS5mbGFncyA9IDAsCisJfTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCS8qIHByZXZlbnQgcHJlZW1wdGlvbiBhbmQgcmVzY2hlZHVsZSBvbiBhbm90aGVyIHByb2Nlc3NvciwKLQkgICBhcyB3ZWxsIGFzIENQVSByZW1vdmFsICovCi0JaW50IG1lID0gZ2V0X2NwdSgpOworCWludCB0aGlzX2NwdTsKIAlpbnQgZXJyID0gMDsKIAotCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLQlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CisJLyoKKwkgKiBwcmV2ZW50IHByZWVtcHRpb24gYW5kIHJlc2NoZWR1bGUgb24gYW5vdGhlciBwcm9jZXNzb3IsCisJICogYXMgd2VsbCBhcyBDUFUgcmVtb3ZhbAorCSAqLworCXRoaXNfY3B1ID0gZ2V0X2NwdSgpOwogCi0JaWYgKGNwdSA9PSBtZSkgeworCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KKwlXQVJOX09OX09OQ0UoaXJxc19kaXNhYmxlZCgpICYmICFvb3BzX2luX3Byb2dyZXNzKTsKKworCWlmIChjcHUgPT0gdGhpc19jcHUpIHsKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQlmdW5jKGluZm8pOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfSBlbHNlIGlmICgodW5zaWduZWQpY3B1IDwgbnJfY3B1X2lkcyAmJiBjcHVfb25saW5lKGNwdSkpIHsKLQkJc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmRhdGE7Ci0KLQkJaWYgKCF3YWl0KSB7Ci0JCQkvKgotCQkJICogV2UgYXJlIGNhbGxpbmcgYSBmdW5jdGlvbiBvbiBhIHNpbmdsZSBDUFUKLQkJCSAqIGFuZCB3ZSBhcmUgbm90IGdvaW5nIHRvIHdhaXQgZm9yIGl0IHRvIGZpbmlzaC4KLQkJCSAqIFdlIGZpcnN0IHRyeSB0byBhbGxvY2F0ZSB0aGUgZGF0YSwgYnV0IGlmIHdlCi0JCQkgKiBmYWlsLCB3ZSBmYWxsIGJhY2sgdG8gdXNlIGEgcGVyIGNwdSBkYXRhIHRvIHBhc3MKLQkJCSAqIHRoZSBpbmZvcm1hdGlvbiB0byB0aGF0IENQVS4gU2luY2UgYWxsIGNhbGxlcnMKLQkJCSAqIG9mIHRoaXMgY29kZSB3aWxsIHVzZSB0aGUgc2FtZSBkYXRhLCB3ZSBtdXN0Ci0JCQkgKiBzeW5jaHJvbml6ZSB0aGUgY2FsbGVycyB0byBwcmV2ZW50IGEgbmV3IGNhbGxlcgotCQkJICogZnJvbSBjb3JydXB0aW5nIHRoZSBkYXRhIGJlZm9yZSB0aGUgY2FsbGVlCi0JCQkgKiBjYW4gYWNjZXNzIGl0LgotCQkJICoKLQkJCSAqIFRoZSBDU0RfRkxBR19MT0NLIGlzIHVzZWQgdG8gbGV0IHVzIGtub3cgd2hlbgotCQkJICogdGhlIElQSSBoYW5kbGVyIGlzIGRvbmUgd2l0aCB0aGUgZGF0YS4KLQkJCSAqIFRoZSBmaXJzdCBjYWxsZXIgd2lsbCBzZXQgaXQsIGFuZCB0aGUgY2FsbGVlCi0JCQkgKiB3aWxsIGNsZWFyIGl0LiBUaGUgbmV4dCBjYWxsZXIgbXVzdCB3YWl0IGZvcgotCQkJICogaXQgdG8gY2xlYXIgYmVmb3JlIHdlIHNldCBpdCBhZ2Fpbi4gVGhpcwotCQkJICogd2lsbCBtYWtlIHN1cmUgdGhlIGNhbGxlZSBpcyBkb25lIHdpdGggdGhlCi0JCQkgKiBkYXRhIGJlZm9yZSBhIG5ldyBjYWxsZXIgd2lsbCB1c2UgaXQuCi0JCQkgKi8KLQkJCWRhdGEgPSBrbWFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9BVE9NSUMpOwotCQkJaWYgKGRhdGEpCi0JCQkJZGF0YS0+ZmxhZ3MgPSBDU0RfRkxBR19BTExPQzsKLQkJCWVsc2UgewotCQkJCWRhdGEgPSAmcGVyX2NwdShjc2RfZGF0YSwgbWUpOwotCQkJCXdoaWxlIChkYXRhLT5mbGFncyAmIENTRF9GTEFHX0xPQ0spCi0JCQkJCWNwdV9yZWxheCgpOwotCQkJCWRhdGEtPmZsYWdzID0gQ1NEX0ZMQUdfTE9DSzsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWRhdGEgPSAmZDsKLQkJCWRhdGEtPmZsYWdzID0gQ1NEX0ZMQUdfV0FJVDsKLQkJfQotCi0JCWRhdGEtPmZ1bmMgPSBmdW5jOwotCQlkYXRhLT5pbmZvID0gaW5mbzsKLQkJZ2VuZXJpY19leGVjX3NpbmdsZShjcHUsIGRhdGEpOwogCX0gZWxzZSB7Ci0JCWVyciA9IC1FTlhJTzsJLyogQ1BVIG5vdCBvbmxpbmUgKi8KKwkJaWYgKCh1bnNpZ25lZCljcHUgPCBucl9jcHVfaWRzICYmIGNwdV9vbmxpbmUoY3B1KSkgeworCQkJc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmRhdGEgPSAmZDsKKworCQkJaWYgKCF3YWl0KQorCQkJCWRhdGEgPSAmX19nZXRfY3B1X3Zhcihjc2RfZGF0YSk7CisKKwkJCWNzZF9sb2NrKGRhdGEpOworCisJCQlkYXRhLT5mdW5jID0gZnVuYzsKKwkJCWRhdGEtPmluZm8gPSBpbmZvOworCQkJZ2VuZXJpY19leGVjX3NpbmdsZShjcHUsIGRhdGEsIHdhaXQpOworCQl9IGVsc2UgeworCQkJZXJyID0gLUVOWElPOwkvKiBDUFUgbm90IG9ubGluZSAqLworCQl9CiAJfQogCiAJcHV0X2NwdSgpOworCiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKTsKQEAgLTI4MywyMyArMzIwLDI2IEBACiAgKiBAY3B1OiBUaGUgQ1BVIHRvIHJ1biBvbi4KICAqIEBkYXRhOiBQcmUtYWxsb2NhdGVkIGFuZCBzZXR1cCBkYXRhIHN0cnVjdHVyZQogICoKLSAqIExpa2Ugc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKCksIGJ1dCBhbGxvdyBjYWxsZXIgdG8gcGFzcyBpbiBhIHByZS1hbGxvY2F0ZWQKLSAqIGRhdGEgc3RydWN0dXJlLiBVc2VmdWwgZm9yIGVtYmVkZGluZyBAZGF0YSBpbnNpZGUgb3RoZXIgc3RydWN0dXJlcywgZm9yCi0gKiBpbnN0YW5jZS4KLSAqCisgKiBMaWtlIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSgpLCBidXQgYWxsb3cgY2FsbGVyIHRvIHBhc3MgaW4gYQorICogcHJlLWFsbG9jYXRlZCBkYXRhIHN0cnVjdHVyZS4gVXNlZnVsIGZvciBlbWJlZGRpbmcgQGRhdGEgaW5zaWRlCisgKiBvdGhlciBzdHJ1Y3R1cmVzLCBmb3IgaW5zdGFuY2UuCiAgKi8KLXZvaWQgX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoaW50IGNwdSwgc3RydWN0IGNhbGxfc2luZ2xlX2RhdGEgKmRhdGEpCit2b2lkIF9fc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGludCBjcHUsIHN0cnVjdCBjYWxsX3NpbmdsZV9kYXRhICpkYXRhLAorCQkJCWludCB3YWl0KQogewotCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLQlXQVJOX09OKChkYXRhLT5mbGFncyAmIENTRF9GTEFHX1dBSVQpICYmIGlycXNfZGlzYWJsZWQoKSk7CisJY3NkX2xvY2soZGF0YSk7CiAKLQlnZW5lcmljX2V4ZWNfc2luZ2xlKGNwdSwgZGF0YSk7CisJLyogQ2FuIGRlYWRsb2NrIHdoZW4gY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCAqLworCVdBUk5fT05fT05DRSh3YWl0ICYmIGlycXNfZGlzYWJsZWQoKSAmJiAhb29wc19pbl9wcm9ncmVzcyk7CisKKwlnZW5lcmljX2V4ZWNfc2luZ2xlKGNwdSwgZGF0YSwgd2FpdCk7CiB9CiAKLS8qIEZJWE1FOiBTaGltIGZvciBhcmNocyB1c2luZyBvbGQgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpIEFQSS4gKi8KKy8qIERlcHJlY2F0ZWQ6IHNoaW0gZm9yIGFyY2hzIHVzaW5nIG9sZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkgQVBJLiAqLworCiAjaWZuZGVmIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrCi0jZGVmaW5lIGFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKG1hc2twKSBcCi0JYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKCoobWFza3ApKQorIyBkZWZpbmUgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpX21hc2sobWFza3ApIFwKKwkgYXJjaF9zZW5kX2NhbGxfZnVuY3Rpb25faXBpKCoobWFza3ApKQogI2VuZGlmCiAKIC8qKgpAQCAtMzA3LDcgKzM0Nyw4IEBACiAgKiBAbWFzazogVGhlIHNldCBvZiBjcHVzIHRvIHJ1biBvbiAob25seSBydW5zIG9uIG9ubGluZSBzdWJzZXQpLgogICogQGZ1bmM6IFRoZSBmdW5jdGlvbiB0byBydW4uIFRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcuCiAgKiBAaW5mbzogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uCi0gKiBAd2FpdDogSWYgdHJ1ZSwgd2FpdCAoYXRvbWljYWxseSkgdW50aWwgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCBvbiBvdGhlciBDUFVzLgorICogQHdhaXQ6IElmIHRydWUsIHdhaXQgKGF0b21pY2FsbHkpIHVudGlsIGZ1bmN0aW9uIGhhcyBjb21wbGV0ZWQKKyAqICAgICAgICBvbiBvdGhlciBDUFVzLgogICoKICAqIElmIEB3YWl0IGlzIHRydWUsIHRoZW4gcmV0dXJucyBvbmNlIEBmdW5jIGhhcyByZXR1cm5lZC4gTm90ZSB0aGF0IEB3YWl0CiAgKiB3aWxsIGJlIGltcGxpY2l0bHkgdHVybmVkIG9uIGluIGNhc2Ugb2YgYWxsb2NhdGlvbiBmYWlsdXJlcywgc2luY2UKQEAgLTMxOCwyNyArMzU5LDI3IEBACiAgKiBtdXN0IGJlIGRpc2FibGVkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogICovCiB2b2lkIHNtcF9jYWxsX2Z1bmN0aW9uX21hbnkoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCi0JCQkgICAgdm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmluZm8sCi0JCQkgICAgYm9vbCB3YWl0KQorCQkJICAgIHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICppbmZvLCBib29sIHdhaXQpCiB7CiAJc3RydWN0IGNhbGxfZnVuY3Rpb25fZGF0YSAqZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBjcHUsIG5leHRfY3B1OworCWludCBjcHUsIG5leHRfY3B1LCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KLQlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CisJV0FSTl9PTl9PTkNFKGlycXNfZGlzYWJsZWQoKSAmJiAhb29wc19pbl9wcm9ncmVzcyk7CiAKLQkvKiBTbywgd2hhdCdzIGEgQ1BVIHRoZXkgd2FudD8gIElnbm9yaW5nIHRoaXMgb25lLiAqLworCS8qIFNvLCB3aGF0J3MgYSBDUFUgdGhleSB3YW50PyBJZ25vcmluZyB0aGlzIG9uZS4gKi8KIAljcHUgPSBjcHVtYXNrX2ZpcnN0X2FuZChtYXNrLCBjcHVfb25saW5lX21hc2spOwotCWlmIChjcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCWlmIChjcHUgPT0gdGhpc19jcHUpCiAJCWNwdSA9IGNwdW1hc2tfbmV4dF9hbmQoY3B1LCBtYXNrLCBjcHVfb25saW5lX21hc2spOworCiAJLyogTm8gb25saW5lIGNwdXM/ICBXZSdyZSBkb25lLiAqLwogCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKIAkJcmV0dXJuOwogCiAJLyogRG8gd2UgaGF2ZSBhbm90aGVyIENQVSB3aGljaCBpc24ndCB1cz8gKi8KIAluZXh0X2NwdSA9IGNwdW1hc2tfbmV4dF9hbmQoY3B1LCBtYXNrLCBjcHVfb25saW5lX21hc2spOwotCWlmIChuZXh0X2NwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJaWYgKG5leHRfY3B1ID09IHRoaXNfY3B1KQogCQluZXh0X2NwdSA9IGNwdW1hc2tfbmV4dF9hbmQobmV4dF9jcHUsIG1hc2ssIGNwdV9vbmxpbmVfbWFzayk7CiAKIAkvKiBGYXN0cGF0aDogZG8gdGhhdCBjcHUgYnkgaXRzZWxmLiAqLwpAQCAtMzQ3LDQzICszODgsNDAgQEAKIAkJcmV0dXJuOwogCX0KIAotCWRhdGEgPSBrbWFsbG9jKHNpemVvZigqZGF0YSkgKyBjcHVtYXNrX3NpemUoKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKHVubGlrZWx5KCFkYXRhKSkgewotCQkvKiBTbG93IHBhdGguICovCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCQlpZiAoY3B1ID09IHNtcF9wcm9jZXNzb3JfaWQoKSkKLQkJCQljb250aW51ZTsKLQkJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbWFzaykpCi0JCQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgZnVuYywgaW5mbywgd2FpdCk7Ci0JCX0KLQkJcmV0dXJuOwotCX0KKwlkYXRhID0gJl9fZ2V0X2NwdV92YXIoY2ZkX2RhdGEpOworCWNzZF9sb2NrKCZkYXRhLT5jc2QpOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmRhdGEtPmxvY2spOwotCWRhdGEtPmNzZC5mbGFncyA9IENTRF9GTEFHX0FMTE9DOwotCWlmICh3YWl0KQotCQlkYXRhLT5jc2QuZmxhZ3MgfD0gQ1NEX0ZMQUdfV0FJVDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGF0YS0+bG9jaywgZmxhZ3MpOwogCWRhdGEtPmNzZC5mdW5jID0gZnVuYzsKIAlkYXRhLT5jc2QuaW5mbyA9IGluZm87Ci0JY3B1bWFza19hbmQodG9fY3B1bWFzayhkYXRhLT5jcHVtYXNrX2JpdHMpLCBtYXNrLCBjcHVfb25saW5lX21hc2spOwotCWNwdW1hc2tfY2xlYXJfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgdG9fY3B1bWFzayhkYXRhLT5jcHVtYXNrX2JpdHMpKTsKLQlkYXRhLT5yZWZzID0gY3B1bWFza193ZWlnaHQodG9fY3B1bWFzayhkYXRhLT5jcHVtYXNrX2JpdHMpKTsKKwljcHVtYXNrX2FuZChkYXRhLT5jcHVtYXNrLCBtYXNrLCBjcHVfb25saW5lX21hc2spOworCWNwdW1hc2tfY2xlYXJfY3B1KHRoaXNfY3B1LCBkYXRhLT5jcHVtYXNrKTsKKwlkYXRhLT5yZWZzID0gY3B1bWFza193ZWlnaHQoZGF0YS0+Y3B1bWFzayk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FsbF9mdW5jdGlvbl9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRfdGFpbF9yY3UoJmRhdGEtPmNzZC5saXN0LCAmY2FsbF9mdW5jdGlvbl9xdWV1ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FsbF9mdW5jdGlvbl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrKCZjYWxsX2Z1bmN0aW9uLmxvY2spOworCS8qCisJICogUGxhY2UgZW50cnkgYXQgdGhlIF9IRUFEXyBvZiB0aGUgbGlzdCwgc28gdGhhdCBhbnkgY3B1IHN0aWxsCisJICogb2JzZXJ2aW5nIHRoZSBlbnRyeSBpbiBnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpCisJICogd2lsbCBub3QgbWlzcyBhbnkgb3RoZXIgbGlzdCBlbnRyaWVzOgorCSAqLworCWxpc3RfYWRkX3JjdSgmZGF0YS0+Y3NkLmxpc3QsICZjYWxsX2Z1bmN0aW9uLnF1ZXVlKTsKKwlzcGluX3VubG9jaygmY2FsbF9mdW5jdGlvbi5sb2NrKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRhdGEtPmxvY2ssIGZsYWdzKTsKIAogCS8qCiAJICogTWFrZSB0aGUgbGlzdCBhZGRpdGlvbiB2aXNpYmxlIGJlZm9yZSBzZW5kaW5nIHRoZSBpcGkuCisJICogKElQSXMgbXVzdCBvYmV5IG9yIGFwcGVhciB0byBvYmV5IG5vcm1hbCBMaW51eCBjYWNoZQorCSAqIGNvaGVyZW5jeSBydWxlcyAtLSBzZWUgY29tbWVudCBpbiBnZW5lcmljX2V4ZWNfc2luZ2xlKS4KIAkgKi8KIAlzbXBfbWIoKTsKIAogCS8qIFNlbmQgYSBtZXNzYWdlIHRvIGFsbCBDUFVzIGluIHRoZSBtYXAgKi8KLQlhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGlfbWFzayh0b19jcHVtYXNrKGRhdGEtPmNwdW1hc2tfYml0cykpOworCWFyY2hfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaV9tYXNrKGRhdGEtPmNwdW1hc2spOwogCi0JLyogb3B0aW9uYWxseSB3YWl0IGZvciB0aGUgQ1BVcyB0byBjb21wbGV0ZSAqLworCS8qIE9wdGlvbmFsbHkgd2FpdCBmb3IgdGhlIENQVXMgdG8gY29tcGxldGUgKi8KIAlpZiAod2FpdCkKLQkJY3NkX2ZsYWdfd2FpdCgmZGF0YS0+Y3NkKTsKKwkJY3NkX2xvY2tfd2FpdCgmZGF0YS0+Y3NkKTsKIH0KIEVYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb25fbWFueSk7CiAKQEAgLTM5MSw3ICs0MjksOCBAQAogICogc21wX2NhbGxfZnVuY3Rpb24oKTogUnVuIGEgZnVuY3Rpb24gb24gYWxsIG90aGVyIENQVXMuCiAgKiBAZnVuYzogVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4KICAqIEBpbmZvOiBBbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KLSAqIEB3YWl0OiBJZiB0cnVlLCB3YWl0IChhdG9taWNhbGx5KSB1bnRpbCBmdW5jdGlvbiBoYXMgY29tcGxldGVkIG9uIG90aGVyIENQVXMuCisgKiBAd2FpdDogSWYgdHJ1ZSwgd2FpdCAoYXRvbWljYWxseSkgdW50aWwgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZAorICogICAgICAgIG9uIG90aGVyIENQVXMuCiAgKgogICogUmV0dXJucyAwLgogICoKQEAgLTQwNywyNiArNDQ2LDI3IEBACiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJc21wX2NhbGxfZnVuY3Rpb25fbWFueShjcHVfb25saW5lX21hc2ssIGZ1bmMsIGluZm8sIHdhaXQpOwogCXByZWVtcHRfZW5hYmxlKCk7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb24pOwogCiB2b2lkIGlwaV9jYWxsX2xvY2sodm9pZCkKIHsKLQlzcGluX2xvY2soJmNhbGxfZnVuY3Rpb25fbG9jayk7CisJc3Bpbl9sb2NrKCZjYWxsX2Z1bmN0aW9uLmxvY2spOwogfQogCiB2b2lkIGlwaV9jYWxsX3VubG9jayh2b2lkKQogewotCXNwaW5fdW5sb2NrKCZjYWxsX2Z1bmN0aW9uX2xvY2spOworCXNwaW5fdW5sb2NrKCZjYWxsX2Z1bmN0aW9uLmxvY2spOwogfQogCiB2b2lkIGlwaV9jYWxsX2xvY2tfaXJxKHZvaWQpCiB7Ci0Jc3Bpbl9sb2NrX2lycSgmY2FsbF9mdW5jdGlvbl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZjYWxsX2Z1bmN0aW9uLmxvY2spOwogfQogCiB2b2lkIGlwaV9jYWxsX3VubG9ja19pcnEodm9pZCkKIHsKLQlzcGluX3VubG9ja19pcnEoJmNhbGxfZnVuY3Rpb25fbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZjYWxsX2Z1bmN0aW9uLmxvY2spOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggNTdkM2Y2Ny4uZDEwNWE4MiAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC0yMSw4ICsyMSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC90aWNrLmg+CisjaW5jbHVkZSA8dHJhY2UvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAvKgpAQCAtNTIsNiArNTQsMTEgQEAKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBrc29mdGlycWQpOwogCitjaGFyICpzb2Z0aXJxX3RvX25hbWVbTlJfU09GVElSUVNdID0geworCSJISSIsICJUSU1FUiIsICJORVRfVFgiLCAiTkVUX1JYIiwgIkJMT0NLIiwKKwkiVEFTS0xFVCIsICJTQ0hFRCIsICJIUlRJTUVSIiwJIlJDVSIKK307CisKIC8qCiAgKiB3ZSBjYW5ub3QgbG9vcCBpbmRlZmluaXRlbHkgaGVyZSB0byBhdm9pZCB1c2Vyc3BhY2Ugc3RhcnZhdGlvbiwKICAqIGJ1dCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gaW50cm9kdWNlIGEgd29yc3QgY2FzZSAxL0haIGxhdGVuY3kKQEAgLTc5LDEzICs4NiwyMyBAQAogCVdBUk5fT05fT05DRShpbl9pcnEoKSk7CiAKIAlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWFkZF9wcmVlbXB0X2NvdW50KFNPRlRJUlFfT0ZGU0VUKTsKKwkvKgorCSAqIFRoZSBwcmVlbXB0IHRyYWNlciBob29rcyBpbnRvIGFkZF9wcmVlbXB0X2NvdW50IGFuZCB3aWxsIGJyZWFrCisJICogbG9ja2RlcCBiZWNhdXNlIGl0IGNhbGxzIGJhY2sgaW50byBsb2NrZGVwIGFmdGVyIFNPRlRJUlFfT0ZGU0VUCisJICogaXMgc2V0IGFuZCBiZWZvcmUgY3VycmVudC0+c29mdGlycV9lbmFibGVkIGlzIGNsZWFyZWQuCisJICogV2UgbXVzdCBtYW51YWxseSBpbmNyZW1lbnQgcHJlZW1wdF9jb3VudCBoZXJlIGFuZCBtYW51YWxseQorCSAqIGNhbGwgdGhlIHRyYWNlX3ByZWVtcHRfb2ZmIGxhdGVyLgorCSAqLworCXByZWVtcHRfY291bnQoKSArPSBTT0ZUSVJRX09GRlNFVDsKIAkvKgogCSAqIFdlcmUgc29mdGlycXMgdHVybmVkIG9mZiBhYm92ZToKIAkgKi8KIAlpZiAoc29mdGlycV9jb3VudCgpID09IFNPRlRJUlFfT0ZGU0VUKQogCQl0cmFjZV9zb2Z0aXJxc19vZmYoaXApOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlpZiAocHJlZW1wdF9jb3VudCgpID09IFNPRlRJUlFfT0ZGU0VUKQorCQl0cmFjZV9wcmVlbXB0X29mZihDQUxMRVJfQUREUjAsIGdldF9wYXJlbnRfaXAoQ0FMTEVSX0FERFIxKSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX1RSQUNFX0lSUUZMQUdTICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19sb2NhbF9iaF9kaXNhYmxlKHVuc2lnbmVkIGxvbmcgaXApCkBAIC0xNjksNiArMTg2LDkgQEAKICAqLwogI2RlZmluZSBNQVhfU09GVElSUV9SRVNUQVJUIDEwCiAKK0RFRklORV9UUkFDRShzb2Z0aXJxX2VudHJ5KTsKK0RFRklORV9UUkFDRShzb2Z0aXJxX2V4aXQpOworCiBhc21saW5rYWdlIHZvaWQgX19kb19zb2Z0aXJxKHZvaWQpCiB7CiAJc3RydWN0IHNvZnRpcnFfYWN0aW9uICpoOwpAQCAtMTgwLDcgKzIwMCw3IEBACiAJYWNjb3VudF9zeXN0ZW1fdnRpbWUoY3VycmVudCk7CiAKIAlfX2xvY2FsX2JoX2Rpc2FibGUoKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKLQl0cmFjZV9zb2Z0aXJxX2VudGVyKCk7CisJbG9ja2RlcF9zb2Z0aXJxX2VudGVyKCk7CiAKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiByZXN0YXJ0OgpAQCAtMTk1LDEyICsyMTUsMTQgQEAKIAkJaWYgKHBlbmRpbmcgJiAxKSB7CiAJCQlpbnQgcHJldl9jb3VudCA9IHByZWVtcHRfY291bnQoKTsKIAorCQkJdHJhY2Vfc29mdGlycV9lbnRyeShoLCBzb2Z0aXJxX3ZlYyk7CiAJCQloLT5hY3Rpb24oaCk7Ci0KKwkJCXRyYWNlX3NvZnRpcnFfZXhpdChoLCBzb2Z0aXJxX3ZlYyk7CiAJCQlpZiAodW5saWtlbHkocHJldl9jb3VudCAhPSBwcmVlbXB0X2NvdW50KCkpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJodWgsIGVudGVyZWQgc29mdGlycSAldGQgJXAiCisJCQkJcHJpbnRrKEtFUk5fRVJSICJodWgsIGVudGVyZWQgc29mdGlycSAldGQgJXMgJXAiCiAJCQkJICAgICAgICJ3aXRoIHByZWVtcHRfY291bnQgJTA4eCwiCiAJCQkJICAgICAgICIgZXhpdGVkIHdpdGggJTA4eD9cbiIsIGggLSBzb2Z0aXJxX3ZlYywKKwkJCQkgICAgICAgc29mdGlycV90b19uYW1lW2ggLSBzb2Z0aXJxX3ZlY10sCiAJCQkJICAgICAgIGgtPmFjdGlvbiwgcHJldl9jb3VudCwgcHJlZW1wdF9jb3VudCgpKTsKIAkJCQlwcmVlbXB0X2NvdW50KCkgPSBwcmV2X2NvdW50OwogCQkJfQpAQCAtMjIwLDcgKzI0Miw3IEBACiAJaWYgKHBlbmRpbmcpCiAJCXdha2V1cF9zb2Z0aXJxZCgpOwogCi0JdHJhY2Vfc29mdGlycV9leGl0KCk7CisJbG9ja2RlcF9zb2Z0aXJxX2V4aXQoKTsKIAogCWFjY291bnRfc3lzdGVtX3Z0aW1lKGN1cnJlbnQpOwogCV9sb2NhbF9iaF9lbmFibGUoKTsKQEAgLTQ5Niw3ICs1MTgsNyBAQAogCQljcC0+ZmxhZ3MgPSAwOwogCQljcC0+cHJpdiA9IHNvZnRpcnE7CiAKLQkJX19zbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBjcCk7CisJCV9fc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgY3AsIDApOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3BpbmxvY2suYyBiL2tlcm5lbC9zcGlubG9jay5jCmluZGV4IDI5YWIyMDcuLjc5MzI2NTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zcGlubG9jay5jCisrKyBiL2tlcm5lbC9zcGlubG9jay5jCkBAIC0xMjEsNyArMTIxLDggQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJcndsb2NrX2FjcXVpcmVfcmVhZCgmbG9jay0+ZGVwX21hcCwgMCwgMCwgX1JFVF9JUF8pOwotCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfcmVhZF90cnlsb2NrLCBfcmF3X3JlYWRfbG9jayk7CisJTE9DS19DT05URU5ERURfRkxBR1MobG9jaywgX3Jhd19yZWFkX3RyeWxvY2ssIF9yYXdfcmVhZF9sb2NrLAorCQkJICAgICBfcmF3X3JlYWRfbG9ja19mbGFncywgJmZsYWdzKTsKIAlyZXR1cm4gZmxhZ3M7CiB9CiBFWFBPUlRfU1lNQk9MKF9yZWFkX2xvY2tfaXJxc2F2ZSk7CkBAIC0xNTEsNyArMTUyLDggQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAJcndsb2NrX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKLQlMT0NLX0NPTlRFTkRFRChsb2NrLCBfcmF3X3dyaXRlX3RyeWxvY2ssIF9yYXdfd3JpdGVfbG9jayk7CisJTE9DS19DT05URU5ERURfRkxBR1MobG9jaywgX3Jhd193cml0ZV90cnlsb2NrLCBfcmF3X3dyaXRlX2xvY2ssCisJCQkgICAgIF9yYXdfd3JpdGVfbG9ja19mbGFncywgJmZsYWdzKTsKIAlyZXR1cm4gZmxhZ3M7CiB9CiBFWFBPUlRfU1lNQk9MKF93cml0ZV9sb2NrX2lycXNhdmUpOwpAQCAtMjk5LDE2ICszMDEsOCBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzcGluX2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIHN1YmNsYXNzLCAwLCBfUkVUX0lQXyk7Ci0JLyoKLQkgKiBPbiBsb2NrZGVwIHdlIGRvbnQgd2FudCB0aGUgaGFuZC1jb2RlZCBpcnEtZW5hYmxlIG9mCi0JICogX3Jhd19zcGluX2xvY2tfZmxhZ3MoKSBjb2RlLCBiZWNhdXNlIGxvY2tkZXAgYXNzdW1lcwotCSAqIHRoYXQgaW50ZXJydXB0cyBhcmUgbm90IHJlLWVuYWJsZWQgZHVyaW5nIGxvY2stYWNxdWlyZToKLQkgKi8KLSNpZmRlZiBDT05GSUdfTE9DS0RFUAotCUxPQ0tfQ09OVEVOREVEKGxvY2ssIF9yYXdfc3Bpbl90cnlsb2NrLCBfcmF3X3NwaW5fbG9jayk7Ci0jZWxzZQotCV9yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssICZmbGFncyk7Ci0jZW5kaWYKKwlMT0NLX0NPTlRFTkRFRF9GTEFHUyhsb2NrLCBfcmF3X3NwaW5fdHJ5bG9jaywgX3Jhd19zcGluX2xvY2ssCisJCQkJX3Jhd19zcGluX2xvY2tfZmxhZ3MsICZmbGFncyk7CiAJcmV0dXJuIGZsYWdzOwogfQogRVhQT1JUX1NZTUJPTChfc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAzN2Y0NThlLi41MWRiYjU1IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VjY29tcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogCiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KQEAgLTEwMTMsMTAgKzEwMTQsOCBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHRhc2tfcGdycChwKSAhPSBwZ3JwKSB7CisJaWYgKHRhc2tfcGdycChwKSAhPSBwZ3JwKQogCQljaGFuZ2VfcGlkKHAsIFBJRFRZUEVfUEdJRCwgcGdycCk7Ci0JCXNldF90YXNrX3BncnAocCwgcGlkX25yKHBncnApKTsKLQl9CiAKIAllcnIgPSAwOwogb3V0OgpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IGM1ZWY0NGYuLjgyMzUwZjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xvdy13b3JrLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTk1LDEyICs5Niw5IEBACiBzdGF0aWMgaW50IG5lZ19vbmUgPSAtMTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfTU1VKSAmJiBkZWZpbmVkKENPTkZJR19GSUxFX0xPQ0tJTkcpCi1zdGF0aWMgaW50IHR3byA9IDI7Ci0jZW5kaWYKLQogc3RhdGljIGludCB6ZXJvOwogc3RhdGljIGludCBvbmUgPSAxOworc3RhdGljIGludCB0d28gPSAyOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgb25lX3VsID0gMTsKIHN0YXRpYyBpbnQgb25lX2h1bmRyZWQgPSAxMDA7CiAKQEAgLTkwMCw2ICs4OTgsMTQgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZzY2FuX3VuZXZpY3RhYmxlX2hhbmRsZXIsCiAJfSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19TTE9XX1dPUksKKwl7CisJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUJPSAic2xvdy13b3JrIiwKKwkJLm1vZGUJCT0gMDU1NSwKKwkJLmNoaWxkCQk9IHNsb3dfd29ya19zeXNjdGxzLAorCX0sCisjZW5kaWYKIC8qCiAgKiBOT1RFOiBkbyBub3QgYWRkIG5ldyBlbnRyaWVzIHRvIHRoaXMgdGFibGUgdW5sZXNzIHlvdSBoYXZlIHJlYWQKICAqIERvY3VtZW50YXRpb24vc3lzY3RsL2N0bF91bm51bWJlcmVkLnR4dApAQCAtMTAxMCw3ICsxMDE2LDcgQEAKIAkJLmRhdGEJCT0gJmRpcnR5X2V4cGlyZV9pbnRlcnZhbCwKIAkJLm1heGxlbgkJPSBzaXplb2YoZGlydHlfZXhwaXJlX2ludGVydmFsKSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzLAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCiAJfSwKIAl7CiAJCS5jdGxfbmFtZQk9IFZNX05SX1BERkxVU0hfVEhSRUFEUywKQEAgLTEzNzMsMTAgKzEzNzksNyBAQAogCQkuZGF0YQkJPSAmbGVhc2VfYnJlYWtfdGltZSwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKLQkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCi0JCS5leHRyYTEJCT0gJnplcm8sCi0JCS5leHRyYTIJCT0gJnR3bywKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAogCX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQUlPCkBAIC0xNDE3LDcgKzE0MjAsMTAgQEAKIAkJLmRhdGEJCT0gJnN1aWRfZHVtcGFibGUsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnR3bywKIAl9LAogI2lmIGRlZmluZWQoQ09ORklHX0JJTkZNVF9NSVNDKSB8fCBkZWZpbmVkKENPTkZJR19CSU5GTVRfTUlTQ19NT0RVTEUpCiAJewpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL0tjb25maWcgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwppbmRleCAzNGU3MDdlLi4yMjQ2MTQxIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvS2NvbmZpZworKysgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwpAQCAtOSw2ICs5LDkgQEAKIGNvbmZpZyBOT1BfVFJBQ0VSCiAJYm9vbAogCitjb25maWcgSEFWRV9GVFJBQ0VfTk1JX0VOVEVSCisJYm9vbAorCiBjb25maWcgSEFWRV9GVU5DVElPTl9UUkFDRVIKIAlib29sCiAKQEAgLTMxLDEyICszNCwyMCBAQAogY29uZmlnIEhBVkVfSFdfQlJBTkNIX1RSQUNFUgogCWJvb2wKIAorY29uZmlnIEhBVkVfRlRSQUNFX1NZU0NBTExTCisJYm9vbAorCiBjb25maWcgVFJBQ0VSX01BWF9UUkFDRQogCWJvb2wKIAogY29uZmlnIFJJTkdfQlVGRkVSCiAJYm9vbAogCitjb25maWcgRlRSQUNFX05NSV9FTlRFUgorICAgICAgIGJvb2wKKyAgICAgICBkZXBlbmRzIG9uIEhBVkVfRlRSQUNFX05NSV9FTlRFUgorICAgICAgIGRlZmF1bHQgeQorCiBjb25maWcgVFJBQ0lORwogCWJvb2wKIAlzZWxlY3QgREVCVUdfRlMKQEAgLTQ0LDEzICs1NSwyOSBAQAogCXNlbGVjdCBTVEFDS1RSQUNFIGlmIFNUQUNLVFJBQ0VfU1VQUE9SVAogCXNlbGVjdCBUUkFDRVBPSU5UUwogCXNlbGVjdCBOT1BfVFJBQ0VSCisJc2VsZWN0IEJJTkFSWV9QUklOVEYKKworIworIyBNaW5pbXVtIHJlcXVpcmVtZW50cyBhbiBhcmNoaXRlY3R1cmUgaGFzIHRvIG1lZXQgZm9yIHVzIHRvCisjIGJlIGFibGUgdG8gb2ZmZXIgZ2VuZXJpYyB0cmFjaW5nIGZhY2lsaXRpZXM6CisjCitjb25maWcgVFJBQ0lOR19TVVBQT1JUCisJYm9vbAorCSMgUFBDMzIgaGFzIG5vIGlycWZsYWdzIHRyYWNpbmcgc3VwcG9ydCwgYnV0IGl0IGNhbiB1c2UgbW9zdCBvZiB0aGUKKwkjIHRyYWNlcnMgYW55d2F5LCB0aGV5IHdlcmUgdGVzdGVkIHRvIGJ1aWxkIGFuZCB3b3JrLiBOb3RlIHRoYXQgbmV3CisJIyBleGNlcHRpb25zIHRvIHRoaXMgbGlzdCBhcmVuJ3Qgd2VsY29tZWQsIGJldHRlciBpbXBsZW1lbnQgdGhlCisJIyBpcnFmbGFncyB0cmFjaW5nIGZvciB5b3VyIGFyY2hpdGVjdHVyZS4KKwlkZXBlbmRzIG9uIFRSQUNFX0lSUUZMQUdTX1NVUFBPUlQgfHwgUFBDMzIKKwlkZXBlbmRzIG9uIFNUQUNLVFJBQ0VfU1VQUE9SVAorCWRlZmF1bHQgeQorCitpZiBUUkFDSU5HX1NVUFBPUlQKIAogbWVudSAiVHJhY2VycyIKIAogY29uZmlnIEZVTkNUSU9OX1RSQUNFUgogCWJvb2wgIktlcm5lbCBGdW5jdGlvbiBUcmFjZXIiCiAJZGVwZW5kcyBvbiBIQVZFX0ZVTkNUSU9OX1RSQUNFUgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IEZSQU1FX1BPSU5URVIKIAlzZWxlY3QgS0FMTFNZTVMKIAlzZWxlY3QgVFJBQ0lORwpAQCAtNzIsMTggKzk5LDE2IEBACiAJaGVscAogCSAgRW5hYmxlIHRoZSBrZXJuZWwgdG8gdHJhY2UgYSBmdW5jdGlvbiBhdCBib3RoIGl0cyByZXR1cm4KIAkgIGFuZCBpdHMgZW50cnkuCi0JICBJdCdzIGZpcnN0IHB1cnBvc2UgaXMgdG8gdHJhY2UgdGhlIGR1cmF0aW9uIG9mIGZ1bmN0aW9ucyBhbmQKLQkgIGRyYXcgYSBjYWxsIGdyYXBoIGZvciBlYWNoIHRocmVhZCB3aXRoIHNvbWUgaW5mb3JtYXRpb25zIGxpa2UKLQkgIHRoZSByZXR1cm4gdmFsdWUuCi0JICBUaGlzIGlzIGRvbmUgYnkgc2V0dGluZyB0aGUgY3VycmVudCByZXR1cm4gYWRkcmVzcyBvbiB0aGUgY3VycmVudAotCSAgdGFzayBzdHJ1Y3R1cmUgaW50byBhIHN0YWNrIG9mIGNhbGxzLgorCSAgSXRzIGZpcnN0IHB1cnBvc2UgaXMgdG8gdHJhY2UgdGhlIGR1cmF0aW9uIG9mIGZ1bmN0aW9ucyBhbmQKKwkgIGRyYXcgYSBjYWxsIGdyYXBoIGZvciBlYWNoIHRocmVhZCB3aXRoIHNvbWUgaW5mb3JtYXRpb24gbGlrZQorCSAgdGhlIHJldHVybiB2YWx1ZS4gVGhpcyBpcyBkb25lIGJ5IHNldHRpbmcgdGhlIGN1cnJlbnQgcmV0dXJuIAorCSAgYWRkcmVzcyBvbiB0aGUgY3VycmVudCB0YXNrIHN0cnVjdHVyZSBpbnRvIGEgc3RhY2sgb2YgY2FsbHMuCiAKIGNvbmZpZyBJUlFTT0ZGX1RSQUNFUgogCWJvb2wgIkludGVycnVwdHMtb2ZmIExhdGVuY3kgVHJhY2VyIgogCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAogCWRlcGVuZHMgb24gR0VORVJJQ19USU1FCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlzZWxlY3QgVFJBQ0VfSVJRRkxBR1MKIAlzZWxlY3QgVFJBQ0lORwogCXNlbGVjdCBUUkFDRVJfTUFYX1RSQUNFCkBAIC0xMDYsNyArMTMxLDYgQEAKIAlkZWZhdWx0IG4KIAlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRQogCWRlcGVuZHMgb24gUFJFRU1QVAotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IFRSQUNJTkcKIAlzZWxlY3QgVFJBQ0VSX01BWF9UUkFDRQogCWhlbHAKQEAgLTEyNywxMyArMTUxLDEzIEBACiAJYm9vbCAiU3lzcHJvZiBUcmFjZXIiCiAJZGVwZW5kcyBvbiBYODYKIAlzZWxlY3QgVFJBQ0lORworCXNlbGVjdCBDT05URVhUX1NXSVRDSF9UUkFDRVIKIAloZWxwCiAJICBUaGlzIHRyYWNlciBwcm92aWRlcyB0aGUgdHJhY2UgbmVlZGVkIGJ5IHRoZSAnU3lzcHJvZicgdXNlcnNwYWNlCiAJICB0b29sLgogCiBjb25maWcgU0NIRURfVFJBQ0VSCiAJYm9vbCAiU2NoZWR1bGluZyBMYXRlbmN5IFRyYWNlciIKLQlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCXNlbGVjdCBUUkFDSU5HCiAJc2VsZWN0IENPTlRFWFRfU1dJVENIX1RSQUNFUgogCXNlbGVjdCBUUkFDRVJfTUFYX1RSQUNFCkBAIC0xNDMsMTYgKzE2NywzMCBAQAogCiBjb25maWcgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSCiAJYm9vbCAiVHJhY2UgcHJvY2VzcyBjb250ZXh0IHN3aXRjaGVzIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJc2VsZWN0IFRSQUNJTkcKIAlzZWxlY3QgTUFSS0VSUwogCWhlbHAKIAkgIFRoaXMgdHJhY2VyIGdldHMgY2FsbGVkIGZyb20gdGhlIGNvbnRleHQgc3dpdGNoIGFuZCByZWNvcmRzCiAJICBhbGwgc3dpdGNoaW5nIG9mIHRhc2tzLgogCitjb25maWcgRVZFTlRfVFJBQ0VSCisJYm9vbCAiVHJhY2UgdmFyaW91cyBldmVudHMgaW4gdGhlIGtlcm5lbCIKKwlzZWxlY3QgVFJBQ0lORworCWhlbHAKKwkgIFRoaXMgdHJhY2VyIGhvb2tzIHRvIHZhcmlvdXMgdHJhY2UgcG9pbnRzIGluIHRoZSBrZXJuZWwKKwkgIGFsbG93aW5nIHRoZSB1c2VyIHRvIHBpY2sgYW5kIGNob29zZSB3aGljaCB0cmFjZSBwb2ludCB0aGV5CisJICB3YW50IHRvIHRyYWNlLgorCitjb25maWcgRlRSQUNFX1NZU0NBTExTCisJYm9vbCAiVHJhY2Ugc3lzY2FsbHMiCisJZGVwZW5kcyBvbiBIQVZFX0ZUUkFDRV9TWVNDQUxMUworCXNlbGVjdCBUUkFDSU5HCisJc2VsZWN0IEtBTExTWU1TCisJaGVscAorCSAgQmFzaWMgdHJhY2VyIHRvIGNhdGNoIHRoZSBzeXNjYWxsIGVudHJ5IGFuZCBleGl0IGV2ZW50cy4KKwogY29uZmlnIEJPT1RfVFJBQ0VSCiAJYm9vbCAiVHJhY2UgYm9vdCBpbml0Y2FsbHMiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlzZWxlY3QgVFJBQ0lORwogCXNlbGVjdCBDT05URVhUX1NXSVRDSF9UUkFDRVIKIAloZWxwCkBAIC0xNjUsMTMgKzIwMywxMSBAQAogCSAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRlbGF5cyBkdXJpbmcgaW5pdGNhbGxzIC0gYnV0IHRoZSByYXcKIAkgIC9kZWJ1Zy90cmFjaW5nL3RyYWNlIHRleHQgb3V0cHV0IGlzIHJlYWRhYmxlIHRvby4KIAotCSAgKCBOb3RlIHRoYXQgdHJhY2luZyBzZWxmIHRlc3RzIGNhbid0IGJlIGVuYWJsZWQgaWYgdGhpcyB0cmFjZXIgaXMKLQkgICAgc2VsZWN0ZWQsIGJlY2F1c2UgdGhlIHNlbGYtdGVzdHMgYXJlIGFuIGluaXRjYWxsIGFzIHdlbGwgYW5kIHRoYXQKLQkgICAgd291bGQgaW52YWxpZGF0ZSB0aGUgYm9vdCB0cmFjZS4gKQorCSAgWW91IG11c3QgcGFzcyBpbiBmdHJhY2U9aW5pdGNhbGwgdG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUKKwkgIHRvIGVuYWJsZSB0aGlzIG9uIGJvb3R1cC4KIAogY29uZmlnIFRSQUNFX0JSQU5DSF9QUk9GSUxJTkcKIAlib29sICJUcmFjZSBsaWtlbHkvdW5saWtlbHkgcHJvZmlsZXIiCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlzZWxlY3QgVFJBQ0lORwogCWhlbHAKIAkgIFRoaXMgdHJhY2VyIHByb2ZpbGVzIGFsbCB0aGUgdGhlIGxpa2VseSBhbmQgdW5saWtlbHkgbWFjcm9zCkBAIC0yMjQsNyArMjYwLDYgQEAKIAogY29uZmlnIFBPV0VSX1RSQUNFUgogCWJvb2wgIlRyYWNlIHBvd2VyIGNvbnN1bXB0aW9uIGJlaGF2aW9yIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJZGVwZW5kcyBvbiBYODYKIAlzZWxlY3QgVFJBQ0lORwogCWhlbHAKQEAgLTIzNiw3ICsyNzEsNiBAQAogY29uZmlnIFNUQUNLX1RSQUNFUgogCWJvb2wgIlRyYWNlIG1heCBzdGFjayIKIAlkZXBlbmRzIG9uIEhBVkVfRlVOQ1RJT05fVFJBQ0VSCi0JZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlzZWxlY3QgRlVOQ1RJT05fVFJBQ0VSCiAJc2VsZWN0IFNUQUNLVFJBQ0UKIAlzZWxlY3QgS0FMTFNZTVMKQEAgLTI2NiwxMSArMzAwLDY2IEBACiAJICBUaGlzIHRyYWNlciByZWNvcmRzIGFsbCBicmFuY2hlcyBvbiB0aGUgc3lzdGVtIGluIGEgY2lyY3VsYXIKIAkgIGJ1ZmZlciBnaXZpbmcgYWNjZXNzIHRvIHRoZSBsYXN0IE4gYnJhbmNoZXMgZm9yIGVhY2ggY3B1LgogCitjb25maWcgS01FTVRSQUNFCisJYm9vbCAiVHJhY2UgU0xBQiBhbGxvY2F0aW9ucyIKKwlzZWxlY3QgVFJBQ0lORworCWhlbHAKKwkgIGttZW10cmFjZSBwcm92aWRlcyB0cmFjaW5nIGZvciBzbGFiIGFsbG9jYXRvciBmdW5jdGlvbnMsIHN1Y2ggYXMKKwkgIGttYWxsb2MsIGtmcmVlLCBrbWVtX2NhY2hlX2FsbG9jLCBrbWVtX2NhY2hlX2ZyZWUgZXRjLi4gQ29sbGVjdGVkCisJICBkYXRhIGlzIHRoZW4gZmVkIHRvIHRoZSB1c2Vyc3BhY2UgYXBwbGljYXRpb24gaW4gb3JkZXIgdG8gYW5hbHlzZQorCSAgYWxsb2NhdGlvbiBob3RzcG90cywgaW50ZXJuYWwgZnJhZ21lbnRhdGlvbiBhbmQgc28gb24sIG1ha2luZyBpdAorCSAgcG9zc2libGUgdG8gc2VlIGhvdyB3ZWxsIGFuIGFsbG9jYXRvciBwZXJmb3JtcywgYXMgd2VsbCBhcyBkZWJ1ZworCSAgYW5kIHByb2ZpbGUga2VybmVsIGNvZGUuCisKKwkgIFRoaXMgcmVxdWlyZXMgYW4gdXNlcnNwYWNlIGFwcGxpY2F0aW9uIHRvIHVzZS4gU2VlCisJICBEb2N1bWVudGF0aW9uL3ZtL2ttZW10cmFjZS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKwkgIFNheWluZyBZIHdpbGwgbWFrZSB0aGUga2VybmVsIHNvbWV3aGF0IGxhcmdlciBhbmQgc2xvd2VyLiBIb3dldmVyLAorCSAgaWYgeW91IGRpc2FibGUga21lbXRyYWNlIGF0IHJ1bi10aW1lIG9yIGJvb3QtdGltZSwgdGhlIHBlcmZvcm1hbmNlCisJICBpbXBhY3QgaXMgbWluaW1hbCAoZGVwZW5kaW5nIG9uIHRoZSBhcmNoIHRoZSBrZXJuZWwgaXMgYnVpbHQgZm9yKS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIFdPUktRVUVVRV9UUkFDRVIKKwlib29sICJUcmFjZSB3b3JrcXVldWVzIgorCXNlbGVjdCBUUkFDSU5HCisJaGVscAorCSAgVGhlIHdvcmtxdWV1ZSB0cmFjZXIgcHJvdmlkZXMgc29tZSBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbnMKKyAgICAgICAgICBhYm91dCBlYWNoIGNwdSB3b3JrcXVldWUgdGhyZWFkIHN1Y2ggYXMgdGhlIG51bWJlciBvZiB0aGUKKyAgICAgICAgICB3b3JrcyBpbnNlcnRlZCBhbmQgZXhlY3V0ZWQgc2luY2UgdGhlaXIgY3JlYXRpb24uIEl0IGNhbiBoZWxwCisgICAgICAgICAgdG8gZXZhbHVhdGUgdGhlIGFtb3VudCBvZiB3b3JrIGVhY2ggb2YgdGhlbSBoYXZlIHRvIHBlcmZvcm0uCisgICAgICAgICAgRm9yIGV4YW1wbGUgaXQgY2FuIGhlbHAgYSBkZXZlbG9wZXIgdG8gZGVjaWRlIHdoZXRoZXIgaGUgc2hvdWxkCisgICAgICAgICAgY2hvb3NlIGEgcGVyIGNwdSB3b3JrcXVldWUgaW5zdGVhZCBvZiBhIHNpbmdsZXRocmVhZGVkIG9uZS4KKworY29uZmlnIEJMS19ERVZfSU9fVFJBQ0UKKwlib29sICJTdXBwb3J0IGZvciB0cmFjaW5nIGJsb2NrIGlvIGFjdGlvbnMiCisJZGVwZW5kcyBvbiBTWVNGUworCWRlcGVuZHMgb24gQkxPQ0sKKwlzZWxlY3QgUkVMQVkKKwlzZWxlY3QgREVCVUdfRlMKKwlzZWxlY3QgVFJBQ0VQT0lOVFMKKwlzZWxlY3QgVFJBQ0lORworCXNlbGVjdCBTVEFDS1RSQUNFCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHRyYWNlIHRoZSBibG9jayBsYXllciBhY3Rpb25zCisJICBvbiBhIGdpdmVuIHF1ZXVlLiBUcmFjaW5nIGFsbG93cyB5b3UgdG8gc2VlIGFueSB0cmFmZmljIGhhcHBlbmluZworCSAgb24gYSBibG9jayBkZXZpY2UgcXVldWUuIEZvciBtb3JlIGluZm9ybWF0aW9uIChhbmQgdGhlIHVzZXJzcGFjZQorCSAgc3VwcG9ydCB0b29scyBuZWVkZWQpLCBmZXRjaCB0aGUgYmxrdHJhY2UgdG9vbHMgZnJvbToKKworCSAgZ2l0Oi8vZ2l0Lmtlcm5lbC5kay9ibGt0cmFjZS5naXQKKworCSAgVHJhY2luZyBhbHNvIGlzIHBvc3NpYmxlIHVzaW5nIHRoZSBmdHJhY2UgaW50ZXJmYWNlLCBlLmcuOgorCisJICAgIGVjaG8gMSA+IC9zeXMvYmxvY2svc2RhL3NkYTEvdHJhY2UvZW5hYmxlCisJICAgIGVjaG8gYmxrID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9jdXJyZW50X3RyYWNlcgorCSAgICBjYXQgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjZV9waXBlCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBEWU5BTUlDX0ZUUkFDRQogCWJvb2wgImVuYWJsZS9kaXNhYmxlIGZ0cmFjZSB0cmFjZXBvaW50cyBkeW5hbWljYWxseSIKIAlkZXBlbmRzIG9uIEZVTkNUSU9OX1RSQUNFUgogCWRlcGVuZHMgb24gSEFWRV9EWU5BTUlDX0ZUUkFDRQotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCiAJZGVmYXVsdCB5CiAJaGVscAogICAgICAgICAgVGhpcyBvcHRpb24gd2lsbCBtb2RpZnkgYWxsIHRoZSBjYWxscyB0byBmdHJhY2UgZHluYW1pY2FsbHkKQEAgLTI5Niw3ICszODUsNyBAQAogCiBjb25maWcgRlRSQUNFX1NUQVJUVVBfVEVTVAogCWJvb2wgIlBlcmZvcm0gYSBzdGFydHVwIHRlc3Qgb24gZnRyYWNlIgotCWRlcGVuZHMgb24gVFJBQ0lORyAmJiBERUJVR19LRVJORUwgJiYgIUJPT1RfVFJBQ0VSCisJZGVwZW5kcyBvbiBUUkFDSU5HCiAJc2VsZWN0IEZUUkFDRV9TRUxGVEVTVAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHBlcmZvcm1zIGEgc2VyaWVzIG9mIHN0YXJ0dXAgdGVzdHMgb24gZnRyYWNlLiBPbiBib290dXAKQEAgLTMwNiw3ICszOTUsNyBAQAogCiBjb25maWcgTU1JT1RSQUNFCiAJYm9vbCAiTWVtb3J5IG1hcHBlZCBJTyB0cmFjaW5nIgotCWRlcGVuZHMgb24gSEFWRV9NTUlPVFJBQ0VfU1VQUE9SVCAmJiBERUJVR19LRVJORUwgJiYgUENJCisJZGVwZW5kcyBvbiBIQVZFX01NSU9UUkFDRV9TVVBQT1JUICYmIFBDSQogCXNlbGVjdCBUUkFDSU5HCiAJaGVscAogCSAgTW1pb3RyYWNlIHRyYWNlcyBNZW1vcnkgTWFwcGVkIEkvTyBhY2Nlc3MgYW5kIGlzIG1lYW50IGZvcgpAQCAtMzI4LDMgKzQxNyw2IEBACiAJICBTYXkgTiwgdW5sZXNzIHlvdSBhYnNvbHV0ZWx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgogCiBlbmRtZW51CisKK2VuZGlmICMgVFJBQ0lOR19TVVBQT1JUCisKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9NYWtlZmlsZSBiL2tlcm5lbC90cmFjZS9NYWtlZmlsZQppbmRleCAzNDlkNWE5Li4yNjMwZjUxIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKKysrIGIva2VybmVsL3RyYWNlL01ha2VmaWxlCkBAIC0xOSw2ICsxOSwxMCBAQAogb2JqLSQoQ09ORklHX1JJTkdfQlVGRkVSKSArPSByaW5nX2J1ZmZlci5vCiAKIG9iai0kKENPTkZJR19UUkFDSU5HKSArPSB0cmFjZS5vCitvYmotJChDT05GSUdfVFJBQ0lORykgKz0gdHJhY2VfY2xvY2subworb2JqLSQoQ09ORklHX1RSQUNJTkcpICs9IHRyYWNlX291dHB1dC5vCitvYmotJChDT05GSUdfVFJBQ0lORykgKz0gdHJhY2Vfc3RhdC5vCitvYmotJChDT05GSUdfVFJBQ0lORykgKz0gdHJhY2VfcHJpbnRrLm8KIG9iai0kKENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIpICs9IHRyYWNlX3NjaGVkX3N3aXRjaC5vCiBvYmotJChDT05GSUdfU1lTUFJPRl9UUkFDRVIpICs9IHRyYWNlX3N5c3Byb2Yubwogb2JqLSQoQ09ORklHX0ZVTkNUSU9OX1RSQUNFUikgKz0gdHJhY2VfZnVuY3Rpb25zLm8KQEAgLTMzLDUgKzM3LDE0IEBACiBvYmotJChDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORykgKz0gdHJhY2VfYnJhbmNoLm8KIG9iai0kKENPTkZJR19IV19CUkFOQ0hfVFJBQ0VSKSArPSB0cmFjZV9od19icmFuY2hlcy5vCiBvYmotJChDT05GSUdfUE9XRVJfVFJBQ0VSKSArPSB0cmFjZV9wb3dlci5vCitvYmotJChDT05GSUdfS01FTVRSQUNFKSArPSBrbWVtdHJhY2Uubworb2JqLSQoQ09ORklHX1dPUktRVUVVRV9UUkFDRVIpICs9IHRyYWNlX3dvcmtxdWV1ZS5vCitvYmotJChDT05GSUdfQkxLX0RFVl9JT19UUkFDRSkJKz0gYmxrdHJhY2Uubworb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNFUikgKz0gdHJhY2VfZXZlbnRzLm8KK29iai0kKENPTkZJR19FVkVOVF9UUkFDRVIpICs9IGV2ZW50cy5vCitvYmotJChDT05GSUdfRVZFTlRfVFJBQ0VSKSArPSB0cmFjZV9leHBvcnQubworb2JqLSQoQ09ORklHX0ZUUkFDRV9TWVNDQUxMUykgKz0gdHJhY2Vfc3lzY2FsbHMubworb2JqLSQoQ09ORklHX0VWRU5UX1BST0ZJTEUpICs9IHRyYWNlX2V2ZW50X3Byb2ZpbGUubworb2JqLSQoQ09ORklHX0VWRU5UX1RSQUNFUikgKz0gdHJhY2VfZXZlbnRzX2ZpbHRlci5vCiAKIGxpYmZ0cmFjZS15IDo9IGZ0cmFjZS5vCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9ibGt0cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0N2M1YjMKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwpAQCAtMCwwICsxLDE1NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSmVucyBBeGJvZSA8YXhib2VAa2VybmVsLmRrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDx0cmFjZS9ibG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBibGt0cmFjZV9zZXEgX19yZWFkX21vc3RseSA9IDE7CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkgKmJsa190cjsKK3N0YXRpYyBib29sIGJsa190cmFjZXJfZW5hYmxlZCBfX3JlYWRfbW9zdGx5OworCisvKiBTZWxlY3QgYW4gYWx0ZXJuYXRpdmUsIG1pbmltYWxpc3RpYyBvdXRwdXQgdGhhbiB0aGUgb3JpZ2luYWwgb25lICovCisjZGVmaW5lIFRSQUNFX0JMS19PUFRfQ0xBU1NJQwkweDEKKworc3RhdGljIHN0cnVjdCB0cmFjZXJfb3B0IGJsa190cmFjZXJfb3B0c1tdID0geworCS8qIERlZmF1bHQgZGlzYWJsZSB0aGUgbWluaW1hbGlzdGljIG91dHB1dCAqLworCXsgVFJBQ0VSX09QVChibGtfY2xhc3NpYywgVFJBQ0VfQkxLX09QVF9DTEFTU0lDKSB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZXJfZmxhZ3MgYmxrX3RyYWNlcl9mbGFncyA9IHsKKwkudmFsICA9IDAsCisJLm9wdHMgPSBibGtfdHJhY2VyX29wdHMsCit9OworCisvKiBHbG9iYWwgcmVmZXJlbmNlIGNvdW50IG9mIHByb2JlcyAqLworc3RhdGljIGF0b21pY190IGJsa19wcm9iZXNfcmVmID0gQVRPTUlDX0lOSVQoMCk7CisKK3N0YXRpYyB2b2lkIGJsa19yZWdpc3Rlcl90cmFjZXBvaW50cyh2b2lkKTsKK3N0YXRpYyB2b2lkIGJsa191bnJlZ2lzdGVyX3RyYWNlcG9pbnRzKHZvaWQpOworCisvKgorICogU2VuZCBvdXQgYSBub3RpZnkgbWVzc2FnZS4KKyAqLworc3RhdGljIHZvaWQgdHJhY2Vfbm90ZShzdHJ1Y3QgYmxrX3RyYWNlICpidCwgcGlkX3QgcGlkLCBpbnQgYWN0aW9uLAorCQkgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0OworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQgPSBOVUxMOworCWludCBwYyA9IDA7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlib29sIGJsa190cmFjZXIgPSBibGtfdHJhY2VyX2VuYWJsZWQ7CisKKwlpZiAoYmxrX3RyYWNlcikgeworCQlwYyA9IHByZWVtcHRfY291bnQoKTsKKwkJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJsa190ciwgVFJBQ0VfQkxLLAorCQkJCQkJICBzaXplb2YoKnQpICsgbGVuLAorCQkJCQkJICAwLCBwYyk7CisJCWlmICghZXZlbnQpCisJCQlyZXR1cm47CisJCXQgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwkJZ290byByZWNvcmRfaXQ7CisJfQorCisJaWYgKCFidC0+cmNoYW4pCisJCXJldHVybjsKKworCXQgPSByZWxheV9yZXNlcnZlKGJ0LT5yY2hhbiwgc2l6ZW9mKCp0KSArIGxlbik7CisJaWYgKHQpIHsKKwkJdC0+bWFnaWMgPSBCTEtfSU9fVFJBQ0VfTUFHSUMgfCBCTEtfSU9fVFJBQ0VfVkVSU0lPTjsKKwkJdC0+dGltZSA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKK3JlY29yZF9pdDoKKwkJdC0+ZGV2aWNlID0gYnQtPmRldjsKKwkJdC0+YWN0aW9uID0gYWN0aW9uOworCQl0LT5waWQgPSBwaWQ7CisJCXQtPmNwdSA9IGNwdTsKKwkJdC0+cGR1X2xlbiA9IGxlbjsKKwkJbWVtY3B5KCh2b2lkICopIHQgKyBzaXplb2YoKnQpLCBkYXRhLCBsZW4pOworCisJCWlmIChibGtfdHJhY2VyKQorCQkJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoYmxrX3RyLCBldmVudCwgMCwgcGMpOworCX0KK30KKworLyoKKyAqIFNlbmQgb3V0IGEgbm90aWZ5IGZvciB0aGlzIHByb2Nlc3MsIGlmIHdlIGhhdmVuJ3QgZG9uZSBzbyBzaW5jZSBhIHRyYWNlCisgKiBzdGFydGVkCisgKi8KK3N0YXRpYyB2b2lkIHRyYWNlX25vdGVfdHNrKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwl0c2stPmJ0cmFjZV9zZXEgPSBibGt0cmFjZV9zZXE7CisJdHJhY2Vfbm90ZShidCwgdHNrLT5waWQsIEJMS19UTl9QUk9DRVNTLCB0c2stPmNvbW0sIHNpemVvZih0c2stPmNvbW0pKTsKK30KKworc3RhdGljIHZvaWQgdHJhY2Vfbm90ZV90aW1lKHN0cnVjdCBibGtfdHJhY2UgKmJ0KQoreworCXN0cnVjdCB0aW1lc3BlYyBub3c7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgd29yZHNbMl07CisKKwlnZXRuc3RpbWVvZmRheSgmbm93KTsKKwl3b3Jkc1swXSA9IG5vdy50dl9zZWM7CisJd29yZHNbMV0gPSBub3cudHZfbnNlYzsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl0cmFjZV9ub3RlKGJ0LCAwLCBCTEtfVE5fVElNRVNUQU1QLCB3b3Jkcywgc2l6ZW9mKHdvcmRzKSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkIF9fdHJhY2Vfbm90ZV9tZXNzYWdlKHN0cnVjdCBibGtfdHJhY2UgKmJ0LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgbjsKKwl2YV9saXN0IGFyZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwljaGFyICpidWY7CisKKwlpZiAodW5saWtlbHkoYnQtPnRyYWNlX3N0YXRlICE9IEJsa3RyYWNlX3J1bm5pbmcgJiYKKwkJICAgICAhYmxrX3RyYWNlcl9lbmFibGVkKSkKKwkJcmV0dXJuOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWJ1ZiA9IHBlcl9jcHVfcHRyKGJ0LT5tc2dfZGF0YSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCW4gPSB2c2NucHJpbnRmKGJ1ZiwgQkxLX1ROX01BWF9NU0csIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJdHJhY2Vfbm90ZShidCwgMCwgQkxLX1ROX01FU1NBR0UsIGJ1Ziwgbik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX190cmFjZV9ub3RlX21lc3NhZ2UpOworCitzdGF0aWMgaW50IGFjdF9sb2dfY2hlY2soc3RydWN0IGJsa190cmFjZSAqYnQsIHUzMiB3aGF0LCBzZWN0b3JfdCBzZWN0b3IsCisJCQkgcGlkX3QgcGlkKQoreworCWlmICgoKGJ0LT5hY3RfbWFzayA8PCBCTEtfVENfU0hJRlQpICYgd2hhdCkgPT0gMCkKKwkJcmV0dXJuIDE7CisJaWYgKHNlY3RvciA8IGJ0LT5zdGFydF9sYmEgfHwgc2VjdG9yID4gYnQtPmVuZF9sYmEpCisJCXJldHVybiAxOworCWlmIChidC0+cGlkICYmIHBpZCAhPSBidC0+cGlkKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKgorICogRGF0YSBkaXJlY3Rpb24gYml0IGxvb2t1cAorICovCitzdGF0aWMgY29uc3QgdTMyIGRkaXJfYWN0WzJdID0geyBCTEtfVENfQUNUKEJMS19UQ19SRUFEKSwKKwkJCQkgQkxLX1RDX0FDVChCTEtfVENfV1JJVEUpIH07CisKKy8qIFRoZSBpbG9nMigpIGNhbGxzIGZhbGwgb3V0IGJlY2F1c2UgdGhleSdyZSBjb25zdGFudCAqLworI2RlZmluZSBNQVNLX1RDX0JJVChydywgX19uYW1lKSAoKHJ3ICYgKDEgPDwgQklPX1JXXyAjIyBfX25hbWUpKSA8PCBcCisJICAoaWxvZzIoQkxLX1RDXyAjIyBfX25hbWUpICsgQkxLX1RDX1NISUZUIC0gQklPX1JXXyAjIyBfX25hbWUpKQorCisvKgorICogVGhlIHdvcmtlciBmb3IgdGhlIHZhcmlvdXMgYmxrX2FkZF90cmFjZSooKSB0eXBlcy4gRmlsbHMgb3V0IGEKKyAqIGJsa19pb190cmFjZSBzdHJ1Y3R1cmUgYW5kIHBsYWNlcyBpdCBpbiBhIHBlci1jcHUgc3ViYnVmZmVyLgorICovCitzdGF0aWMgdm9pZCBfX2Jsa19hZGRfdHJhY2Uoc3RydWN0IGJsa190cmFjZSAqYnQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGJ5dGVzLAorCQkgICAgIGludCBydywgdTMyIHdoYXQsIGludCBlcnJvciwgaW50IHBkdV9sZW4sIHZvaWQgKnBkdV9kYXRhKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50ID0gTlVMTDsKKwlzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXVuc2lnbmVkIGxvbmcgKnNlcXVlbmNlOworCXBpZF90IHBpZDsKKwlpbnQgY3B1LCBwYyA9IDA7CisJYm9vbCBibGtfdHJhY2VyID0gYmxrX3RyYWNlcl9lbmFibGVkOworCisJaWYgKHVubGlrZWx5KGJ0LT50cmFjZV9zdGF0ZSAhPSBCbGt0cmFjZV9ydW5uaW5nICYmICFibGtfdHJhY2VyKSkKKwkJcmV0dXJuOworCisJd2hhdCB8PSBkZGlyX2FjdFtydyAmIFdSSVRFXTsKKwl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBCQVJSSUVSKTsKKwl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBTWU5DSU8pOworCXdoYXQgfD0gTUFTS19UQ19CSVQocncsIEFIRUFEKTsKKwl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBNRVRBKTsKKwl3aGF0IHw9IE1BU0tfVENfQklUKHJ3LCBESVNDQVJEKTsKKworCXBpZCA9IHRzay0+cGlkOworCWlmICh1bmxpa2VseShhY3RfbG9nX2NoZWNrKGJ0LCB3aGF0LCBzZWN0b3IsIHBpZCkpKQorCQlyZXR1cm47CisJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChibGtfdHJhY2VyKSB7CisJCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7CisKKwkJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShibGtfdHIsIFRSQUNFX0JMSywKKwkJCQkJCSAgc2l6ZW9mKCp0KSArIHBkdV9sZW4sCisJCQkJCQkgIDAsIHBjKTsKKwkJaWYgKCFldmVudCkKKwkJCXJldHVybjsKKwkJdCA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworCQlnb3RvIHJlY29yZF9pdDsKKwl9CisKKwkvKgorCSAqIEEgd29yZCBhYm91dCB0aGUgbG9ja2luZyBoZXJlIC0gd2UgZGlzYWJsZSBpbnRlcnJ1cHRzIHRvIHJlc2VydmUKKwkgKiBzb21lIHNwYWNlIGluIHRoZSByZWxheSBwZXItY3B1IGJ1ZmZlciwgdG8gcHJldmVudCBhbiBpcnEKKwkgKiBmcm9tIGNvbWluZyBpbiBhbmQgc3RlcHBpbmcgb24gb3VyIHRvZXMuCisJICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KHRzay0+YnRyYWNlX3NlcSAhPSBibGt0cmFjZV9zZXEpKQorCQl0cmFjZV9ub3RlX3RzayhidCwgdHNrKTsKKworCXQgPSByZWxheV9yZXNlcnZlKGJ0LT5yY2hhbiwgc2l6ZW9mKCp0KSArIHBkdV9sZW4pOworCWlmICh0KSB7CisJCXNlcXVlbmNlID0gcGVyX2NwdV9wdHIoYnQtPnNlcXVlbmNlLCBjcHUpOworCisJCXQtPm1hZ2ljID0gQkxLX0lPX1RSQUNFX01BR0lDIHwgQkxLX0lPX1RSQUNFX1ZFUlNJT047CisJCXQtPnNlcXVlbmNlID0gKysoKnNlcXVlbmNlKTsKKwkJdC0+dGltZSA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKK3JlY29yZF9pdDoKKwkJLyoKKwkJICogVGhlc2UgdHdvIGFyZSBub3QgbmVlZGVkIGluIGZ0cmFjZSBhcyB0aGV5IGFyZSBpbiB0aGUKKwkJICogZ2VuZXJpYyB0cmFjZV9lbnRyeSwgZmlsbGVkIGJ5IHRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUsCisJCSAqIGJ1dCBmb3IgdGhlIHRyYWNlX2V2ZW50LT5iaW4oKSBzeW50aGVzaXplciBiZW5lZml0IHdlIGRvIGl0CisJCSAqIGhlcmUgdG9vLgorCQkgKi8KKwkJdC0+Y3B1ID0gY3B1OworCQl0LT5waWQgPSBwaWQ7CisKKwkJdC0+c2VjdG9yID0gc2VjdG9yOworCQl0LT5ieXRlcyA9IGJ5dGVzOworCQl0LT5hY3Rpb24gPSB3aGF0OworCQl0LT5kZXZpY2UgPSBidC0+ZGV2OworCQl0LT5lcnJvciA9IGVycm9yOworCQl0LT5wZHVfbGVuID0gcGR1X2xlbjsKKworCQlpZiAocGR1X2xlbikKKwkJCW1lbWNweSgodm9pZCAqKSB0ICsgc2l6ZW9mKCp0KSwgcGR1X2RhdGEsIHBkdV9sZW4pOworCisJCWlmIChibGtfdHJhY2VyKSB7CisJCQl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChibGtfdHIsIGV2ZW50LCAwLCBwYyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpibGtfdHJlZV9yb290Oworc3RhdGljIERFRklORV9NVVRFWChibGtfdHJlZV9tdXRleCk7CisKK3N0YXRpYyB2b2lkIGJsa190cmFjZV9mcmVlKHN0cnVjdCBibGtfdHJhY2UgKmJ0KQoreworCWRlYnVnZnNfcmVtb3ZlKGJ0LT5tc2dfZmlsZSk7CisJZGVidWdmc19yZW1vdmUoYnQtPmRyb3BwZWRfZmlsZSk7CisJcmVsYXlfY2xvc2UoYnQtPnJjaGFuKTsKKwlmcmVlX3BlcmNwdShidC0+c2VxdWVuY2UpOworCWZyZWVfcGVyY3B1KGJ0LT5tc2dfZGF0YSk7CisJa2ZyZWUoYnQpOworfQorCitzdGF0aWMgdm9pZCBibGtfdHJhY2VfY2xlYW51cChzdHJ1Y3QgYmxrX3RyYWNlICpidCkKK3sKKwlibGtfdHJhY2VfZnJlZShidCk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmJsa19wcm9iZXNfcmVmKSkKKwkJYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTsKK30KKworaW50IGJsa190cmFjZV9yZW1vdmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQ7CisKKwlidCA9IHhjaGcoJnEtPmJsa190cmFjZSwgTlVMTCk7CisJaWYgKCFidCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYnQtPnRyYWNlX3N0YXRlICE9IEJsa3RyYWNlX3J1bm5pbmcpCisJCWJsa190cmFjZV9jbGVhbnVwKGJ0KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3RyYWNlX3JlbW92ZSk7CisKK3N0YXRpYyBpbnQgYmxrX2Ryb3BwZWRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJsa19kcm9wcGVkX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTZdOworCisJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLCBhdG9taWNfcmVhZCgmYnQtPmRyb3BwZWQpKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWZmZXIsIGNvdW50LCBwcG9zLCBidWYsIHN0cmxlbihidWYpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmxrX2Ryb3BwZWRfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQlibGtfZHJvcHBlZF9vcGVuLAorCS5yZWFkID0JCWJsa19kcm9wcGVkX3JlYWQsCit9OworCitzdGF0aWMgaW50IGJsa19tc2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJsa19tc2dfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJY2hhciAqbXNnOworCXN0cnVjdCBibGtfdHJhY2UgKmJ0OworCisJaWYgKGNvdW50ID4gQkxLX1ROX01BWF9NU0cpCisJCXJldHVybiAtRUlOVkFMOworCisJbXNnID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKG1zZyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihtc2csIGJ1ZmZlciwgY291bnQpKSB7CisJCWtmcmVlKG1zZyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWJ0ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCV9fdHJhY2Vfbm90ZV9tZXNzYWdlKGJ0LCAiJXMiLCBtc2cpOworCWtmcmVlKG1zZyk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJsa19tc2dfZm9wcyA9IHsKKwkub3duZXIgPQlUSElTX01PRFVMRSwKKwkub3BlbiA9CQlibGtfbXNnX29wZW4sCisJLndyaXRlID0JYmxrX21zZ193cml0ZSwKK307CisKKy8qCisgKiBLZWVwIHRyYWNrIG9mIGhvdyBtYW55IHRpbWVzIHdlIGVuY291bnRlcmVkIGEgZnVsbCBzdWJidWZmZXIsIHRvIGFpZAorICogdGhlIHVzZXIgc3BhY2UgYXBwIGluIHRlbGxpbmcgaG93IG1hbnkgbG9zdCBldmVudHMgdGhlcmUgd2VyZS4KKyAqLworc3RhdGljIGludCBibGtfc3ViYnVmX3N0YXJ0X2NhbGxiYWNrKHN0cnVjdCByY2hhbl9idWYgKmJ1Ziwgdm9pZCAqc3ViYnVmLAorCQkJCSAgICAgdm9pZCAqcHJldl9zdWJidWYsIHNpemVfdCBwcmV2X3BhZGRpbmcpCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQ7CisKKwlpZiAoIXJlbGF5X2J1Zl9mdWxsKGJ1ZikpCisJCXJldHVybiAxOworCisJYnQgPSBidWYtPmNoYW4tPnByaXZhdGVfZGF0YTsKKwlhdG9taWNfaW5jKCZidC0+ZHJvcHBlZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmxrX3JlbW92ZV9idWZfZmlsZV9jYWxsYmFjayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGRlbnRyeSAqcGFyZW50ID0gZGVudHJ5LT5kX3BhcmVudDsKKwlkZWJ1Z2ZzX3JlbW92ZShkZW50cnkpOworCisJLyoKKwkqIHRoaXMgd2lsbCBmYWlsIGZvciBhbGwgYnV0IHRoZSBsYXN0IGZpbGUsIGJ1dCB0aGF0IGlzIG9rLiB3aGF0IHdlCisJKiBjYXJlIGFib3V0IGlzIHRoZSB0b3AgbGV2ZWwgYnV0cy0+bmFtZSBkaXJlY3RvcnkgZ29pbmcgYXdheSwgd2hlbgorCSogdGhlIGxhc3QgdHJhY2UgZmlsZSBpcyBnb25lLiBUaGVuIHdlIGRvbid0IGhhdmUgdG8gcm1kaXIoKSB0aGF0CisJKiBtYW51YWxseSBvbiB0cmFjZSBzdG9wLCBzbyBpdCBuaWNlbHkgc29sdmVzIHRoZSBpc3N1ZSB3aXRoCisJKiBmb3JjZSBraWxsaW5nIG9mIHJ1bm5pbmcgdHJhY2VzLgorCSovCisKKwlkZWJ1Z2ZzX3JlbW92ZShwYXJlbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYmxrX2NyZWF0ZV9idWZfZmlsZV9jYWxsYmFjayhjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJCSAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCQkJCSAgIGludCBtb2RlLAorCQkJCQkJICAgc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorCQkJCQkJICAgaW50ICppc19nbG9iYWwpCit7CisJcmV0dXJuIGRlYnVnZnNfY3JlYXRlX2ZpbGUoZmlsZW5hbWUsIG1vZGUsIHBhcmVudCwgYnVmLAorCQkJCQkmcmVsYXlfZmlsZV9vcGVyYXRpb25zKTsKK30KKworc3RhdGljIHN0cnVjdCByY2hhbl9jYWxsYmFja3MgYmxrX3JlbGF5X2NhbGxiYWNrcyA9IHsKKwkuc3ViYnVmX3N0YXJ0CQk9IGJsa19zdWJidWZfc3RhcnRfY2FsbGJhY2ssCisJLmNyZWF0ZV9idWZfZmlsZQk9IGJsa19jcmVhdGVfYnVmX2ZpbGVfY2FsbGJhY2ssCisJLnJlbW92ZV9idWZfZmlsZQk9IGJsa19yZW1vdmVfYnVmX2ZpbGVfY2FsbGJhY2ssCit9OworCisvKgorICogU2V0dXAgZXZlcnl0aGluZyByZXF1aXJlZCB0byBzdGFydCB0cmFjaW5nCisgKi8KK2ludCBkb19ibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKKwkJCXN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cCAqYnV0cykKK3sKKwlzdHJ1Y3QgYmxrX3RyYWNlICpvbGRfYnQsICpidCA9IE5VTEw7CisJc3RydWN0IGRlbnRyeSAqZGlyID0gTlVMTDsKKwlpbnQgcmV0LCBpOworCisJaWYgKCFidXRzLT5idWZfc2l6ZSB8fCAhYnV0cy0+YnVmX25yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cm5jcHkoYnV0cy0+bmFtZSwgbmFtZSwgQkxLVFJBQ0VfQkRFVl9TSVpFKTsKKwlidXRzLT5uYW1lW0JMS1RSQUNFX0JERVZfU0laRSAtIDFdID0gJ1wwJzsKKworCS8qCisJICogc29tZSBkZXZpY2UgbmFtZXMgaGF2ZSBsYXJnZXIgcGF0aHMgLSBjb252ZXJ0IHRoZSBzbGFzaGVzCisJICogdG8gdW5kZXJzY29yZXMgZm9yIHRoaXMgdG8gd29yayBhcyBleHBlY3RlZAorCSAqLworCWZvciAoaSA9IDA7IGkgPCBzdHJsZW4oYnV0cy0+bmFtZSk7IGkrKykKKwkJaWYgKGJ1dHMtPm5hbWVbaV0gPT0gJy8nKQorCQkJYnV0cy0+bmFtZVtpXSA9ICdfJzsKKworCWJ0ID0ga3phbGxvYyhzaXplb2YoKmJ0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSAtRU5PTUVNOworCWJ0LT5zZXF1ZW5jZSA9IGFsbG9jX3BlcmNwdSh1bnNpZ25lZCBsb25nKTsKKwlpZiAoIWJ0LT5zZXF1ZW5jZSkKKwkJZ290byBlcnI7CisKKwlidC0+bXNnX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShCTEtfVE5fTUFYX01TRywgX19hbGlnbm9mX18oY2hhcikpOworCWlmICghYnQtPm1zZ19kYXRhKQorCQlnb3RvIGVycjsKKworCXJldCA9IC1FTk9FTlQ7CisKKwltdXRleF9sb2NrKCZibGtfdHJlZV9tdXRleCk7CisJaWYgKCFibGtfdHJlZV9yb290KSB7CisJCWJsa190cmVlX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImJsb2NrIiwgTlVMTCk7CisJCWlmICghYmxrX3RyZWVfcm9vdCkgeworCQkJbXV0ZXhfdW5sb2NrKCZibGtfdHJlZV9tdXRleCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmJsa190cmVlX211dGV4KTsKKworCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihidXRzLT5uYW1lLCBibGtfdHJlZV9yb290KTsKKworCWlmICghZGlyKQorCQlnb3RvIGVycjsKKworCWJ0LT5kaXIgPSBkaXI7CisJYnQtPmRldiA9IGRldjsKKwlhdG9taWNfc2V0KCZidC0+ZHJvcHBlZCwgMCk7CisKKwlyZXQgPSAtRUlPOworCWJ0LT5kcm9wcGVkX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkcm9wcGVkIiwgMDQ0NCwgZGlyLCBidCwKKwkJCQkJICAgICAgICZibGtfZHJvcHBlZF9mb3BzKTsKKwlpZiAoIWJ0LT5kcm9wcGVkX2ZpbGUpCisJCWdvdG8gZXJyOworCisJYnQtPm1zZ19maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgibXNnIiwgMDIyMiwgZGlyLCBidCwgJmJsa19tc2dfZm9wcyk7CisJaWYgKCFidC0+bXNnX2ZpbGUpCisJCWdvdG8gZXJyOworCisJYnQtPnJjaGFuID0gcmVsYXlfb3BlbigidHJhY2UiLCBkaXIsIGJ1dHMtPmJ1Zl9zaXplLAorCQkJCWJ1dHMtPmJ1Zl9uciwgJmJsa19yZWxheV9jYWxsYmFja3MsIGJ0KTsKKwlpZiAoIWJ0LT5yY2hhbikKKwkJZ290byBlcnI7CisKKwlidC0+YWN0X21hc2sgPSBidXRzLT5hY3RfbWFzazsKKwlpZiAoIWJ0LT5hY3RfbWFzaykKKwkJYnQtPmFjdF9tYXNrID0gKHUxNikgLTE7CisKKwlidC0+c3RhcnRfbGJhID0gYnV0cy0+c3RhcnRfbGJhOworCWJ0LT5lbmRfbGJhID0gYnV0cy0+ZW5kX2xiYTsKKwlpZiAoIWJ0LT5lbmRfbGJhKQorCQlidC0+ZW5kX2xiYSA9IC0xVUxMOworCisJYnQtPnBpZCA9IGJ1dHMtPnBpZDsKKwlidC0+dHJhY2Vfc3RhdGUgPSBCbGt0cmFjZV9zZXR1cDsKKworCXJldCA9IC1FQlVTWTsKKwlvbGRfYnQgPSB4Y2hnKCZxLT5ibGtfdHJhY2UsIGJ0KTsKKwlpZiAob2xkX2J0KSB7CisJCSh2b2lkKSB4Y2hnKCZxLT5ibGtfdHJhY2UsIG9sZF9idCk7CisJCWdvdG8gZXJyOworCX0KKworCWlmIChhdG9taWNfaW5jX3JldHVybigmYmxrX3Byb2Jlc19yZWYpID09IDEpCisJCWJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpOworCisJcmV0dXJuIDA7CitlcnI6CisJYmxrX3RyYWNlX2ZyZWUoYnQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBibGtfdHJhY2Vfc2V0dXAoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGNoYXIgKm5hbWUsIGRldl90IGRldiwKKwkJICAgIGNoYXIgX191c2VyICphcmcpCit7CisJc3RydWN0IGJsa191c2VyX3RyYWNlX3NldHVwIGJ1dHM7CisJaW50IHJldDsKKworCXJldCA9IGNvcHlfZnJvbV91c2VyKCZidXRzLCBhcmcsIHNpemVvZihidXRzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXQgPSBkb19ibGtfdHJhY2Vfc2V0dXAocSwgbmFtZSwgZGV2LCAmYnV0cyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmYnV0cywgc2l6ZW9mKGJ1dHMpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9zZXR1cCk7CisKK2ludCBibGtfdHJhY2Vfc3RhcnRzdG9wKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBpbnQgc3RhcnQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKworCWlmIChidCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogRm9yIHN0YXJ0aW5nIGEgdHJhY2UsIHdlIGNhbiB0cmFuc2l0aW9uIGZyb20gYSBzZXR1cCBvciBzdG9wcGVkCisJICogdHJhY2UuIEZvciBzdG9wcGluZyBhIHRyYWNlLCB0aGUgc3RhdGUgbXVzdCBiZSBydW5uaW5nCisJICovCisJcmV0ID0gLUVJTlZBTDsKKwlpZiAoc3RhcnQpIHsKKwkJaWYgKGJ0LT50cmFjZV9zdGF0ZSA9PSBCbGt0cmFjZV9zZXR1cCB8fAorCQkgICAgYnQtPnRyYWNlX3N0YXRlID09IEJsa3RyYWNlX3N0b3BwZWQpIHsKKwkJCWJsa3RyYWNlX3NlcSsrOworCQkJc21wX21iKCk7CisJCQlidC0+dHJhY2Vfc3RhdGUgPSBCbGt0cmFjZV9ydW5uaW5nOworCisJCQl0cmFjZV9ub3RlX3RpbWUoYnQpOworCQkJcmV0ID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChidC0+dHJhY2Vfc3RhdGUgPT0gQmxrdHJhY2VfcnVubmluZykgeworCQkJYnQtPnRyYWNlX3N0YXRlID0gQmxrdHJhY2Vfc3RvcHBlZDsKKwkJCXJlbGF5X2ZsdXNoKGJ0LT5yY2hhbik7CisJCQlyZXQgPSAwOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa190cmFjZV9zdGFydHN0b3ApOworCisvKioKKyAqIGJsa190cmFjZV9pb2N0bDogLSBoYW5kbGUgdGhlIGlvY3RscyBhc3NvY2lhdGVkIHdpdGggdHJhY2luZworICogQGJkZXY6CXRoZSBibG9jayBkZXZpY2UKKyAqIEBjbWQ6CXRoZSBpb2N0bCBjbWQKKyAqIEBhcmc6CXRoZSBhcmd1bWVudCBkYXRhLCBpZiBhbnkKKyAqCisgKiovCitpbnQgYmxrX3RyYWNlX2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGNtZCwgY2hhciBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcTsKKwlpbnQgcmV0LCBzdGFydCA9IDA7CisJY2hhciBiW0JERVZOQU1FX1NJWkVdOworCisJcSA9IGJkZXZfZ2V0X3F1ZXVlKGJkZXYpOworCWlmICghcSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBCTEtUUkFDRVNFVFVQOgorCQliZGV2bmFtZShiZGV2LCBiKTsKKwkJcmV0ID0gYmxrX3RyYWNlX3NldHVwKHEsIGIsIGJkZXYtPmJkX2RldiwgYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBCTEtUUkFDRVNUQVJUOgorCQlzdGFydCA9IDE7CisJY2FzZSBCTEtUUkFDRVNUT1A6CisJCXJldCA9IGJsa190cmFjZV9zdGFydHN0b3AocSwgc3RhcnQpOworCQlicmVhazsKKwljYXNlIEJMS1RSQUNFVEVBUkRPV046CisJCXJldCA9IGJsa190cmFjZV9yZW1vdmUocSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9UVFk7CisJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmYmRldi0+YmRfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogYmxrX3RyYWNlX3NodXRkb3duOiAtIHN0b3AgYW5kIGNsZWFudXAgdHJhY2Ugc3RydWN0dXJlcworICogQHE6ICAgIHRoZSByZXF1ZXN0IHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlCisgKgorICoqLwordm9pZCBibGtfdHJhY2Vfc2h1dGRvd24oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJaWYgKHEtPmJsa190cmFjZSkgeworCQlibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIDApOworCQlibGtfdHJhY2VfcmVtb3ZlKHEpOworCX0KK30KKworLyoKKyAqIGJsa3RyYWNlIHByb2JlcworICovCisKKy8qKgorICogYmxrX2FkZF90cmFjZV9ycSAtIEFkZCBhIHRyYWNlIGZvciBhIHJlcXVlc3Qgb3JpZW50ZWQgYWN0aW9uCisgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKKyAqIEBycToJCXRoZSBzb3VyY2UgcmVxdWVzdAorICogQHdoYXQ6CXRoZSBhY3Rpb24KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqICAgICBSZWNvcmRzIGFuIGFjdGlvbiBhZ2FpbnN0IGEgcmVxdWVzdC4gV2lsbCBsb2cgdGhlIGJpbyBvZmZzZXQgKyBzaXplLgorICoKKyAqKi8KK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICAgdTMyIHdoYXQpCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisJaW50IHJ3ID0gcnEtPmNtZF9mbGFncyAmIDB4MDM7CisKKwlpZiAobGlrZWx5KCFidCkpCisJCXJldHVybjsKKworCWlmIChibGtfZGlzY2FyZF9ycShycSkpCisJCXJ3IHw9ICgxIDw8IEJJT19SV19ESVNDQVJEKTsKKworCWlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKKwkJd2hhdCB8PSBCTEtfVENfQUNUKEJMS19UQ19QQyk7CisJCV9fYmxrX2FkZF90cmFjZShidCwgMCwgcnEtPmRhdGFfbGVuLCBydywgd2hhdCwgcnEtPmVycm9ycywKKwkJCQlzaXplb2YocnEtPmNtZCksIHJxLT5jbWQpOworCX0gZWxzZSAgeworCQl3aGF0IHw9IEJMS19UQ19BQ1QoQkxLX1RDX0ZTKTsKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCBycS0+aGFyZF9zZWN0b3IsIHJxLT5oYXJkX25yX3NlY3RvcnMgPDwgOSwKKwkJCQlydywgd2hhdCwgcnEtPmVycm9ycywgMCwgTlVMTCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3JxX2Fib3J0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJYmxrX2FkZF90cmFjZV9ycShxLCBycSwgQkxLX1RBX0FCT1JUKTsKK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfSU5TRVJUKTsKK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9ycV9pc3N1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCWJsa19hZGRfdHJhY2VfcnEocSwgcnEsIEJMS19UQV9JU1NVRSk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCQkgICAgIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlibGtfYWRkX3RyYWNlX3JxKHEsIHJxLCBCTEtfVEFfUkVRVUVVRSk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJICAgICAgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCWJsa19hZGRfdHJhY2VfcnEocSwgcnEsIEJMS19UQV9DT01QTEVURSk7Cit9CisKKy8qKgorICogYmxrX2FkZF90cmFjZV9iaW8gLSBBZGQgYSB0cmFjZSBmb3IgYSBiaW8gb3JpZW50ZWQgYWN0aW9uCisgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKKyAqIEBiaW86CXRoZSBzb3VyY2UgYmlvCisgKiBAd2hhdDoJdGhlIGFjdGlvbgorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgIFJlY29yZHMgYW4gYWN0aW9uIGFnYWluc3QgYSBiaW8uIFdpbGwgbG9nIHRoZSBiaW8gb2Zmc2V0ICsgc2l6ZS4KKyAqCisgKiovCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2JpbyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLAorCQkJCSAgICAgdTMyIHdoYXQpCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisKKwlpZiAobGlrZWx5KCFidCkpCisJCXJldHVybjsKKworCV9fYmxrX2FkZF90cmFjZShidCwgYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwgYmlvLT5iaV9ydywgd2hhdCwKKwkJCSFiaW9fZmxhZ2dlZChiaW8sIEJJT19VUFRPREFURSksIDAsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2Jpb19ib3VuY2Uoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9CT1VOQ0UpOworfQorCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvKQoreworCWJsa19hZGRfdHJhY2VfYmlvKHEsIGJpbywgQkxLX1RBX0NPTVBMRVRFKTsKK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAorCQkJCQlzdHJ1Y3QgYmlvICpiaW8pCit7CisJYmxrX2FkZF90cmFjZV9iaW8ocSwgYmlvLCBCTEtfVEFfQkFDS01FUkdFKTsKK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwKKwkJCQkJIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9GUk9OVE1FUkdFKTsKK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9iaW9fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKK3sKKwlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9RVUVVRSk7Cit9CisKK3N0YXRpYyB2b2lkIGJsa19hZGRfdHJhY2VfZ2V0cnEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJc3RydWN0IGJpbyAqYmlvLCBpbnQgcncpCit7CisJaWYgKGJpbykKKwkJYmxrX2FkZF90cmFjZV9iaW8ocSwgYmlvLCBCTEtfVEFfR0VUUlEpOworCWVsc2UgeworCQlzdHJ1Y3QgYmxrX3RyYWNlICpidCA9IHEtPmJsa190cmFjZTsKKworCQlpZiAoYnQpCisJCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIHJ3LCBCTEtfVEFfR0VUUlEsIDAsIDAsIE5VTEwpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBibGtfYWRkX3RyYWNlX3NsZWVwcnEoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCisJCQkJICBzdHJ1Y3QgYmlvICpiaW8sIGludCBydykKK3sKKwlpZiAoYmlvKQorCQlibGtfYWRkX3RyYWNlX2JpbyhxLCBiaW8sIEJMS19UQV9TTEVFUFJRKTsKKwllbHNlIHsKKwkJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisKKwkJaWYgKGJ0KQorCQkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCBydywgQkxLX1RBX1NMRUVQUlEsCisJCQkJCTAsIDAsIE5VTEwpOworCX0KK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9wbHVnKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCisJaWYgKGJ0KQorCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIDAsIDAsIEJMS19UQV9QTFVHLCAwLCAwLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV91bnBsdWdfaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisKKwlpZiAoYnQpIHsKKwkJdW5zaWduZWQgaW50IHBkdSA9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdOworCQlfX2JlNjQgcnBkdSA9IGNwdV90b19iZTY0KHBkdSk7CisKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfVU5QTFVHX0lPLCAwLAorCQkJCXNpemVvZihycGR1KSwgJnJwZHUpOworCX0KK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV91bnBsdWdfdGltZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisKKwlpZiAoYnQpIHsKKwkJdW5zaWduZWQgaW50IHBkdSA9IHEtPnJxLmNvdW50W1JFQURdICsgcS0+cnEuY291bnRbV1JJVEVdOworCQlfX2JlNjQgcnBkdSA9IGNwdV90b19iZTY0KHBkdSk7CisKKwkJX19ibGtfYWRkX3RyYWNlKGJ0LCAwLCAwLCAwLCBCTEtfVEFfVU5QTFVHX1RJTUVSLCAwLAorCQkJCXNpemVvZihycGR1KSwgJnJwZHUpOworCX0KK30KKworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9zcGxpdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLAorCQkJCXVuc2lnbmVkIGludCBwZHUpCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQgPSBxLT5ibGtfdHJhY2U7CisKKwlpZiAoYnQpIHsKKwkJX19iZTY0IHJwZHUgPSBjcHVfdG9fYmU2NChwZHUpOworCisJCV9fYmxrX2FkZF90cmFjZShidCwgYmlvLT5iaV9zZWN0b3IsIGJpby0+Ymlfc2l6ZSwgYmlvLT5iaV9ydywKKwkJCQlCTEtfVEFfU1BMSVQsICFiaW9fZmxhZ2dlZChiaW8sIEJJT19VUFRPREFURSksCisJCQkJc2l6ZW9mKHJwZHUpLCAmcnBkdSk7CisJfQorfQorCisvKioKKyAqIGJsa19hZGRfdHJhY2VfcmVtYXAgLSBBZGQgYSB0cmFjZSBmb3IgYSByZW1hcCBvcGVyYXRpb24KKyAqIEBxOgkJcXVldWUgdGhlIGlvIGlzIGZvcgorICogQGJpbzoJdGhlIHNvdXJjZSBiaW8KKyAqIEBkZXY6CXRhcmdldCBkZXZpY2UKKyAqIEBmcm9tOglzb3VyY2Ugc2VjdG9yCisgKiBAdG86CQl0YXJnZXQgc2VjdG9yCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgRGV2aWNlIG1hcHBlciBvciByYWlkIHRhcmdldCBzb21ldGltZXMgbmVlZCB0byBzcGxpdCBhIGJpbyBiZWNhdXNlCisgKiAgICAgaXQgc3BhbnMgYSBzdHJpcGUgKG9yIHNpbWlsYXIpLiBBZGQgYSB0cmFjZSBmb3IgdGhhdCBhY3Rpb24uCisgKgorICoqLworc3RhdGljIHZvaWQgYmxrX2FkZF90cmFjZV9yZW1hcChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGJpbyAqYmlvLAorCQkJCSAgICAgICBkZXZfdCBkZXYsIHNlY3Rvcl90IGZyb20sIHNlY3Rvcl90IHRvKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCXN0cnVjdCBibGtfaW9fdHJhY2VfcmVtYXAgcjsKKworCWlmIChsaWtlbHkoIWJ0KSkKKwkJcmV0dXJuOworCisJci5kZXZpY2UgPSBjcHVfdG9fYmUzMihkZXYpOworCXIuZGV2aWNlX2Zyb20gPSBjcHVfdG9fYmUzMihiaW8tPmJpX2JkZXYtPmJkX2Rldik7CisJci5zZWN0b3IgPSBjcHVfdG9fYmU2NCh0byk7CisKKwlfX2Jsa19hZGRfdHJhY2UoYnQsIGZyb20sIGJpby0+Ymlfc2l6ZSwgYmlvLT5iaV9ydywgQkxLX1RBX1JFTUFQLAorCQkJIWJpb19mbGFnZ2VkKGJpbywgQklPX1VQVE9EQVRFKSwgc2l6ZW9mKHIpLCAmcik7Cit9CisKKy8qKgorICogYmxrX2FkZF9kcml2ZXJfZGF0YSAtIEFkZCBiaW5hcnkgbWVzc2FnZSB3aXRoIGRyaXZlci1zcGVjaWZpYyBkYXRhCisgKiBAcToJCXF1ZXVlIHRoZSBpbyBpcyBmb3IKKyAqIEBycToJCWlvIHJlcXVlc3QKKyAqIEBkYXRhOglkcml2ZXItc3BlY2lmaWMgZGF0YQorICogQGxlbjoJbGVuZ3RoIG9mIGRyaXZlci1zcGVjaWZpYyBkYXRhCisgKgorICogRGVzY3JpcHRpb246CisgKiAgICAgU29tZSBkcml2ZXJzIG1pZ2h0IHdhbnQgdG8gd3JpdGUgZHJpdmVyLXNwZWNpZmljIGRhdGEgcGVyIHJlcXVlc3QuCisgKgorICoqLwordm9pZCBibGtfYWRkX2RyaXZlcl9kYXRhKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAorCQkJIHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCSB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOworCisJaWYgKGxpa2VseSghYnQpKQorCQlyZXR1cm47CisKKwlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKQorCQlfX2Jsa19hZGRfdHJhY2UoYnQsIDAsIHJxLT5kYXRhX2xlbiwgMCwgQkxLX1RBX0RSVl9EQVRBLAorCQkJCXJxLT5lcnJvcnMsIGxlbiwgZGF0YSk7CisJZWxzZQorCQlfX2Jsa19hZGRfdHJhY2UoYnQsIHJxLT5oYXJkX3NlY3RvciwgcnEtPmhhcmRfbnJfc2VjdG9ycyA8PCA5LAorCQkJCTAsIEJMS19UQV9EUlZfREFUQSwgcnEtPmVycm9ycywgbGVuLCBkYXRhKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa19hZGRfZHJpdmVyX2RhdGEpOworCitzdGF0aWMgdm9pZCBibGtfcmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfYWJvcnQoYmxrX2FkZF90cmFjZV9ycV9hYm9ydCk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2luc2VydChibGtfYWRkX3RyYWNlX3JxX2luc2VydCk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2lzc3VlKGJsa19hZGRfdHJhY2VfcnFfaXNzdWUpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9yZXF1ZXVlKGJsa19hZGRfdHJhY2VfcnFfcmVxdWV1ZSk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19iaW9fYm91bmNlKGJsa19hZGRfdHJhY2VfYmlvX2JvdW5jZSk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19jb21wbGV0ZShibGtfYWRkX3RyYWNlX2Jpb19jb21wbGV0ZSk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19iYWNrbWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fYmFja21lcmdlKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2Zyb250bWVyZ2UoYmxrX2FkZF90cmFjZV9iaW9fZnJvbnRtZXJnZSk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19xdWV1ZShibGtfYWRkX3RyYWNlX2Jpb19xdWV1ZSk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEpOworCVdBUk5fT04ocmV0KTsKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV9ibG9ja19zbGVlcHJxKGJsa19hZGRfdHJhY2Vfc2xlZXBycSk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3BsdWcoYmxrX2FkZF90cmFjZV9wbHVnKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnX3RpbWVyKGJsa19hZGRfdHJhY2VfdW5wbHVnX3RpbWVyKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnX2lvKGJsa19hZGRfdHJhY2VfdW5wbHVnX2lvKTsKKwlXQVJOX09OKHJldCk7CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCk7CisJV0FSTl9PTihyZXQpOworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JlbWFwKGJsa19hZGRfdHJhY2VfcmVtYXApOworCVdBUk5fT04ocmV0KTsKK30KKworc3RhdGljIHZvaWQgYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHModm9pZCkKK3sKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JlbWFwKGJsa19hZGRfdHJhY2VfcmVtYXApOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfc3BsaXQoYmxrX2FkZF90cmFjZV9zcGxpdCk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja191bnBsdWdfaW8oYmxrX2FkZF90cmFjZV91bnBsdWdfaW8pOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfdW5wbHVnX3RpbWVyKGJsa19hZGRfdHJhY2VfdW5wbHVnX3RpbWVyKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3BsdWcoYmxrX2FkZF90cmFjZV9wbHVnKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3NsZWVwcnEoYmxrX2FkZF90cmFjZV9zbGVlcHJxKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2dldHJxKGJsa19hZGRfdHJhY2VfZ2V0cnEpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX3F1ZXVlKGJsa19hZGRfdHJhY2VfYmlvX3F1ZXVlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19mcm9udG1lcmdlKGJsa19hZGRfdHJhY2VfYmlvX2Zyb250bWVyZ2UpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2JhY2ttZXJnZShibGtfYWRkX3RyYWNlX2Jpb19iYWNrbWVyZ2UpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfYmlvX2NvbXBsZXRlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX2Jpb19ib3VuY2UoYmxrX2FkZF90cmFjZV9iaW9fYm91bmNlKTsKKwl1bnJlZ2lzdGVyX3RyYWNlX2Jsb2NrX3JxX2NvbXBsZXRlKGJsa19hZGRfdHJhY2VfcnFfY29tcGxldGUpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfcmVxdWV1ZShibGtfYWRkX3RyYWNlX3JxX3JlcXVldWUpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfaXNzdWUoYmxrX2FkZF90cmFjZV9ycV9pc3N1ZSk7CisJdW5yZWdpc3Rlcl90cmFjZV9ibG9ja19ycV9pbnNlcnQoYmxrX2FkZF90cmFjZV9ycV9pbnNlcnQpOworCXVucmVnaXN0ZXJfdHJhY2VfYmxvY2tfcnFfYWJvcnQoYmxrX2FkZF90cmFjZV9ycV9hYm9ydCk7CisKKwl0cmFjZXBvaW50X3N5bmNocm9uaXplX3VucmVnaXN0ZXIoKTsKK30KKworLyoKKyAqIHN0cnVjdCBibGtfaW9fdHJhY2VyIGZvcm1hdHRpbmcgcm91dGluZXMKKyAqLworCitzdGF0aWMgdm9pZCBmaWxsX3J3YnMoY2hhciAqcndicywgY29uc3Qgc3RydWN0IGJsa19pb190cmFjZSAqdCkKK3sKKwlpbnQgaSA9IDA7CisJaW50IHRjID0gdC0+YWN0aW9uID4+IEJMS19UQ19TSElGVDsKKworCWlmICh0LT5hY3Rpb24gPT0gQkxLX1ROX01FU1NBR0UpIHsKKwkJcndic1tpKytdID0gJ04nOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodGMgJiBCTEtfVENfRElTQ0FSRCkKKwkJcndic1tpKytdID0gJ0QnOworCWVsc2UgaWYgKHRjICYgQkxLX1RDX1dSSVRFKQorCQlyd2JzW2krK10gPSAnVyc7CisJZWxzZSBpZiAodC0+Ynl0ZXMpCisJCXJ3YnNbaSsrXSA9ICdSJzsKKwllbHNlCisJCXJ3YnNbaSsrXSA9ICdOJzsKKworCWlmICh0YyAmIEJMS19UQ19BSEVBRCkKKwkJcndic1tpKytdID0gJ0EnOworCWlmICh0YyAmIEJMS19UQ19CQVJSSUVSKQorCQlyd2JzW2krK10gPSAnQic7CisJaWYgKHRjICYgQkxLX1RDX1NZTkMpCisJCXJ3YnNbaSsrXSA9ICdTJzsKKwlpZiAodGMgJiBCTEtfVENfTUVUQSkKKwkJcndic1tpKytdID0gJ00nOworb3V0OgorCXJ3YnNbaV0gPSAnXDAnOworfQorCitzdGF0aWMgaW5saW5lCitjb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0ZV9ibGtfaW9fdHJhY2UoY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJcmV0dXJuIChjb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlICopZW50OworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IHZvaWQgKnBkdV9zdGFydChjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwlyZXR1cm4gdGVfYmxrX2lvX3RyYWNlKGVudCkgKyAxOworfQorCitzdGF0aWMgaW5saW5lIHUzMiB0X3NlYyhjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwlyZXR1cm4gdGVfYmxrX2lvX3RyYWNlKGVudCktPmJ5dGVzID4+IDk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIHRfc2VjdG9yKGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCXJldHVybiB0ZV9ibGtfaW9fdHJhY2UoZW50KS0+c2VjdG9yOworfQorCitzdGF0aWMgaW5saW5lIF9fdTE2IHRfZXJyb3IoY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpCit7CisJcmV0dXJuIHRlX2Jsa19pb190cmFjZShlbnQpLT5lcnJvcjsKK30KKworc3RhdGljIF9fdTY0IGdldF9wZHVfaW50KGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCWNvbnN0IF9fdTY0ICp2YWwgPSBwZHVfc3RhcnQoZW50KTsKKwlyZXR1cm4gYmU2NF90b19jcHUoKnZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9wZHVfcmVtYXAoY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQsCisJCQkgIHN0cnVjdCBibGtfaW9fdHJhY2VfcmVtYXAgKnIpCit7CisJY29uc3Qgc3RydWN0IGJsa19pb190cmFjZV9yZW1hcCAqX19yID0gcGR1X3N0YXJ0KGVudCk7CisJX191NjQgc2VjdG9yID0gX19yLT5zZWN0b3I7CisKKwlyLT5kZXZpY2UgPSBiZTMyX3RvX2NwdShfX3ItPmRldmljZSk7CisJci0+ZGV2aWNlX2Zyb20gPSBiZTMyX3RvX2NwdShfX3ItPmRldmljZV9mcm9tKTsKKwlyLT5zZWN0b3IgPSBiZTY0X3RvX2NwdShzZWN0b3IpOworfQorCit0eXBlZGVmIGludCAoYmxrX2xvZ19hY3Rpb25fdCkgKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0KTsKKworc3RhdGljIGludCBibGtfbG9nX2FjdGlvbl9jbGFzc2ljKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0KQoreworCWNoYXIgcndic1s2XTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdHMgID0gaXRlci0+dHM7CisJdW5zaWduZWQgbG9uZyBuc2VjX3JlbSA9IGRvX2Rpdih0cywgTlNFQ19QRVJfU0VDKTsKKwl1bnNpZ25lZCBzZWNzCSAgICAgICA9ICh1bnNpZ25lZCBsb25nKXRzOworCWNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UgKnQgPSB0ZV9ibGtfaW9fdHJhY2UoaXRlci0+ZW50KTsKKworCWZpbGxfcndicyhyd2JzLCB0KTsKKworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsCisJCQkJIiUzZCwlLTNkICUyZCAlNWQuJTA5bHUgJTV1ICUycyAlM3MgIiwKKwkJCQlNQUpPUih0LT5kZXZpY2UpLCBNSU5PUih0LT5kZXZpY2UpLCBpdGVyLT5jcHUsCisJCQkJc2VjcywgbnNlY19yZW0sIGl0ZXItPmVudC0+cGlkLCBhY3QsIHJ3YnMpOworfQorCitzdGF0aWMgaW50IGJsa19sb2dfYWN0aW9uKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgY29uc3QgY2hhciAqYWN0KQoreworCWNoYXIgcndic1s2XTsKKwljb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0ID0gdGVfYmxrX2lvX3RyYWNlKGl0ZXItPmVudCk7CisKKwlmaWxsX3J3YnMocndicywgdCk7CisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIiUzZCwlLTNkICUycyAlM3MgIiwKKwkJCQlNQUpPUih0LT5kZXZpY2UpLCBNSU5PUih0LT5kZXZpY2UpLCBhY3QsIHJ3YnMpOworfQorCitzdGF0aWMgaW50IGJsa19sb2dfZ2VuZXJpYyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwljaGFyIGNtZFtUQVNLX0NPTU1fTEVOXTsKKworCXRyYWNlX2ZpbmRfY21kbGluZShlbnQtPnBpZCwgY21kKTsKKworCWlmICh0X3NlYyhlbnQpKQorCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWxsdSArICV1IFslc11cbiIsCisJCQkJCXRfc2VjdG9yKGVudCksIHRfc2VjKGVudCksIGNtZCk7CisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIlslc11cbiIsIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgYmxrX2xvZ193aXRoX2Vycm9yKHN0cnVjdCB0cmFjZV9zZXEgKnMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwlpZiAodF9zZWMoZW50KSkKKwkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiVsbHUgKyAldSBbJWRdXG4iLCB0X3NlY3RvcihlbnQpLAorCQkJCQl0X3NlYyhlbnQpLCB0X2Vycm9yKGVudCkpOworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIlbGx1IFslZF1cbiIsIHRfc2VjdG9yKGVudCksIHRfZXJyb3IoZW50KSk7Cit9CisKK3N0YXRpYyBpbnQgYmxrX2xvZ19yZW1hcChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwlzdHJ1Y3QgYmxrX2lvX3RyYWNlX3JlbWFwIHIgPSB7IC5kZXZpY2UgPSAwLCB9OworCisJZ2V0X3BkdV9yZW1hcChlbnQsICZyKTsKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWxsdSArICV1IDwtICglZCwlZCkgJWxsdVxuIiwKKwkJCSAgICAgICB0X3NlY3RvcihlbnQpLAorCQkJICAgICAgIHRfc2VjKGVudCksIE1BSk9SKHIuZGV2aWNlKSwgTUlOT1Ioci5kZXZpY2UpLAorCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpci5zZWN0b3IpOworfQorCitzdGF0aWMgaW50IGJsa19sb2dfcGx1ZyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwljaGFyIGNtZFtUQVNLX0NPTU1fTEVOXTsKKworCXRyYWNlX2ZpbmRfY21kbGluZShlbnQtPnBpZCwgY21kKTsKKworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICJbJXNdXG4iLCBjbWQpOworfQorCitzdGF0aWMgaW50IGJsa19sb2dfdW5wbHVnKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCWNoYXIgY21kW1RBU0tfQ09NTV9MRU5dOworCisJdHJhY2VfZmluZF9jbWRsaW5lKGVudC0+cGlkLCBjbWQpOworCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIlslc10gJWxsdVxuIiwgY21kLCBnZXRfcGR1X2ludChlbnQpKTsKK30KKworc3RhdGljIGludCBibGtfbG9nX3NwbGl0KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50KQoreworCWNoYXIgY21kW1RBU0tfQ09NTV9MRU5dOworCisJdHJhY2VfZmluZF9jbWRsaW5lKGVudC0+cGlkLCBjbWQpOworCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiVsbHUgLyAlbGx1IFslc11cbiIsIHRfc2VjdG9yKGVudCksCisJCQkJZ2V0X3BkdV9pbnQoZW50KSwgY21kKTsKK30KKworc3RhdGljIGludCBibGtfbG9nX21zZyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCkKK3sKKwlpbnQgcmV0OworCWNvbnN0IHN0cnVjdCBibGtfaW9fdHJhY2UgKnQgPSB0ZV9ibGtfaW9fdHJhY2UoZW50KTsKKworCXJldCA9IHRyYWNlX3NlcV9wdXRtZW0ocywgdCArIDEsIHQtPnBkdV9sZW4pOworCWlmIChyZXQpCisJCXJldHVybiB0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogc3RydWN0IHRyYWNlciBvcGVyYXRpb25zCisgKi8KKworc3RhdGljIHZvaWQgYmxrX3RyYWNlcl9wcmludF9oZWFkZXIoc3RydWN0IHNlcV9maWxlICptKQoreworCWlmICghKGJsa190cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfQkxLX09QVF9DTEFTU0lDKSkKKwkJcmV0dXJuOworCXNlcV9wdXRzKG0sICIjIERFViAgIENQVSBUSU1FU1RBTVAgICAgIFBJRCBBQ1QgRkxHXG4iCisJCSAgICAiIyAgfCAgICAgfCAgICAgfCAgICAgICAgICAgfCAgIHwgICB8XG4iKTsKK30KKworc3RhdGljIHZvaWQgYmxrX3RyYWNlcl9zdGFydChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCWJsa190cmFjZXJfZW5hYmxlZCA9IHRydWU7CisJdHJhY2VfZmxhZ3MgJj0gflRSQUNFX0lURVJfQ09OVEVYVF9JTkZPOworfQorCitzdGF0aWMgaW50IGJsa190cmFjZXJfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCWJsa190ciA9IHRyOworCWJsa190cmFjZXJfc3RhcnQodHIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBibGtfdHJhY2VyX3N0b3Aoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlibGtfdHJhY2VyX2VuYWJsZWQgPSBmYWxzZTsKKwl0cmFjZV9mbGFncyB8PSBUUkFDRV9JVEVSX0NPTlRFWFRfSU5GTzsKK30KKworc3RhdGljIHZvaWQgYmxrX3RyYWNlcl9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCWJsa190cmFjZXJfc3RvcCh0cik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKmFjdFsyXTsKKwlpbnQJICAgKCpwcmludCkoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQpOworfSB3aGF0MmFjdFtdID0geworCVtfX0JMS19UQV9RVUVVRV0JPSB7eyAgIlEiLCAicXVldWUiIH0sCSAgIGJsa19sb2dfZ2VuZXJpYyB9LAorCVtfX0JMS19UQV9CQUNLTUVSR0VdCT0ge3sgICJNIiwgImJhY2ttZXJnZSIgfSwgIGJsa19sb2dfZ2VuZXJpYyB9LAorCVtfX0JMS19UQV9GUk9OVE1FUkdFXQk9IHt7ICAiRiIsICJmcm9udG1lcmdlIiB9LCBibGtfbG9nX2dlbmVyaWMgfSwKKwlbX19CTEtfVEFfR0VUUlFdCT0ge3sgICJHIiwgImdldHJxIiB9LAkgICBibGtfbG9nX2dlbmVyaWMgfSwKKwlbX19CTEtfVEFfU0xFRVBSUV0JPSB7eyAgIlMiLCAic2xlZXBycSIgfSwJICAgYmxrX2xvZ19nZW5lcmljIH0sCisJW19fQkxLX1RBX1JFUVVFVUVdCT0ge3sgICJSIiwgInJlcXVldWUiIH0sCSAgIGJsa19sb2dfd2l0aF9lcnJvciB9LAorCVtfX0JMS19UQV9JU1NVRV0JPSB7eyAgIkQiLCAiaXNzdWUiIH0sCSAgIGJsa19sb2dfZ2VuZXJpYyB9LAorCVtfX0JMS19UQV9DT01QTEVURV0JPSB7eyAgIkMiLCAiY29tcGxldGUiIH0sICAgYmxrX2xvZ193aXRoX2Vycm9yIH0sCisJW19fQkxLX1RBX1BMVUddCQk9IHt7ICAiUCIsICJwbHVnIiB9LAkgICBibGtfbG9nX3BsdWcgfSwKKwlbX19CTEtfVEFfVU5QTFVHX0lPXQk9IHt7ICAiVSIsICJ1bnBsdWdfaW8iIH0sICBibGtfbG9nX3VucGx1ZyB9LAorCVtfX0JMS19UQV9VTlBMVUdfVElNRVJdCT0ge3sgIlVUIiwgInVucGx1Z190aW1lciIgfSwgYmxrX2xvZ191bnBsdWcgfSwKKwlbX19CTEtfVEFfSU5TRVJUXQk9IHt7ICAiSSIsICJpbnNlcnQiIH0sCSAgIGJsa19sb2dfZ2VuZXJpYyB9LAorCVtfX0JMS19UQV9TUExJVF0JPSB7eyAgIlgiLCAic3BsaXQiIH0sCSAgIGJsa19sb2dfc3BsaXQgfSwKKwlbX19CTEtfVEFfQk9VTkNFXQk9IHt7ICAiQiIsICJib3VuY2UiIH0sCSAgIGJsa19sb2dfZ2VuZXJpYyB9LAorCVtfX0JMS19UQV9SRU1BUF0JPSB7eyAgIkEiLCAicmVtYXAiIH0sCSAgIGJsa19sb2dfcmVtYXAgfSwKK307CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9vbmVfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCWJvb2wgY2xhc3NpYykKK3sKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwljb25zdCBzdHJ1Y3QgYmxrX2lvX3RyYWNlICp0OworCXUxNiB3aGF0OworCWludCByZXQ7CisJYm9vbCBsb25nX2FjdDsKKwlibGtfbG9nX2FjdGlvbl90ICpsb2dfYWN0aW9uOworCisJdAkgICA9IHRlX2Jsa19pb190cmFjZShpdGVyLT5lbnQpOworCXdoYXQJICAgPSB0LT5hY3Rpb24gJiAoKDEgPDwgQkxLX1RDX1NISUZUKSAtIDEpOworCWxvbmdfYWN0ICAgPSAhISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfVkVSQk9TRSk7CisJbG9nX2FjdGlvbiA9IGNsYXNzaWMgPyAmYmxrX2xvZ19hY3Rpb25fY2xhc3NpYyA6ICZibGtfbG9nX2FjdGlvbjsKKworCWlmICh0LT5hY3Rpb24gPT0gQkxLX1ROX01FU1NBR0UpIHsKKwkJcmV0ID0gbG9nX2FjdGlvbihpdGVyLCBsb25nX2FjdCA/ICJtZXNzYWdlIiA6ICJtIik7CisJCWlmIChyZXQpCisJCQlyZXQgPSBibGtfbG9nX21zZyhzLCBpdGVyLT5lbnQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodW5saWtlbHkod2hhdCA9PSAwIHx8IHdoYXQgPj0gQVJSQVlfU0laRSh3aGF0MmFjdCkpKQorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJCYWQgcGMgYWN0aW9uICV4XG4iLCB3aGF0KTsKKwllbHNlIHsKKwkJcmV0ID0gbG9nX2FjdGlvbihpdGVyLCB3aGF0MmFjdFt3aGF0XS5hY3RbbG9uZ19hY3RdKTsKKwkJaWYgKHJldCkKKwkJCXJldCA9IHdoYXQyYWN0W3doYXRdLnByaW50KHMsIGl0ZXItPmVudCk7CisJfQorb3V0OgorCXJldHVybiByZXQgPyBUUkFDRV9UWVBFX0hBTkRMRUQgOiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IGJsa190cmFjZV9ldmVudF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgICAgICBpbnQgZmxhZ3MpCit7CisJaWYgKCF0cmFjZV9wcmludF9jb250ZXh0KGl0ZXIpKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gcHJpbnRfb25lX2xpbmUoaXRlciwgZmFsc2UpOworfQorCitzdGF0aWMgaW50IGJsa190cmFjZV9zeW50aGVzaXplX29sZF90cmFjZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJc3RydWN0IGJsa19pb190cmFjZSAqdCA9IChzdHJ1Y3QgYmxrX2lvX3RyYWNlICopaXRlci0+ZW50OworCWNvbnN0IGludCBvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgYmxrX2lvX3RyYWNlLCBzZWN0b3IpOworCXN0cnVjdCBibGtfaW9fdHJhY2Ugb2xkID0geworCQkubWFnaWMJICA9IEJMS19JT19UUkFDRV9NQUdJQyB8IEJMS19JT19UUkFDRV9WRVJTSU9OLAorCQkudGltZSAgICAgPSBpdGVyLT50cywKKwl9OworCisJaWYgKCF0cmFjZV9zZXFfcHV0bWVtKHMsICZvbGQsIG9mZnNldCkpCisJCXJldHVybiAwOworCXJldHVybiB0cmFjZV9zZXFfcHV0bWVtKHMsICZ0LT5zZWN0b3IsCisJCQkJc2l6ZW9mKG9sZCkgLSBvZmZzZXQgKyB0LT5wZHVfbGVuKTsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90CitibGtfdHJhY2VfZXZlbnRfcHJpbnRfYmluYXJ5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXJldHVybiBibGtfdHJhY2Vfc3ludGhlc2l6ZV9vbGRfdHJhY2UoaXRlcikgPworCQkJVFJBQ0VfVFlQRV9IQU5ETEVEIDogVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBibGtfdHJhY2VyX3ByaW50X2xpbmUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCWlmICghKGJsa190cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfQkxLX09QVF9DTEFTU0lDKSkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEOworCisJcmV0dXJuIHByaW50X29uZV9saW5lKGl0ZXIsIHRydWUpOworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlciBibGtfdHJhY2VyIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gImJsayIsCisJLmluaXQJCT0gYmxrX3RyYWNlcl9pbml0LAorCS5yZXNldAkJPSBibGtfdHJhY2VyX3Jlc2V0LAorCS5zdGFydAkJPSBibGtfdHJhY2VyX3N0YXJ0LAorCS5zdG9wCQk9IGJsa190cmFjZXJfc3RvcCwKKwkucHJpbnRfaGVhZGVyCT0gYmxrX3RyYWNlcl9wcmludF9oZWFkZXIsCisJLnByaW50X2xpbmUJPSBibGtfdHJhY2VyX3ByaW50X2xpbmUsCisJLmZsYWdzCQk9ICZibGtfdHJhY2VyX2ZsYWdzLAorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV9ibGtfZXZlbnQgPSB7CisJLnR5cGUJCT0gVFJBQ0VfQkxLLAorCS50cmFjZQkJPSBibGtfdHJhY2VfZXZlbnRfcHJpbnQsCisJLmJpbmFyeQkJPSBibGtfdHJhY2VfZXZlbnRfcHJpbnRfYmluYXJ5LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9ibGtfdHJhY2VyKHZvaWQpCit7CisJaWYgKCFyZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJnRyYWNlX2Jsa19ldmVudCkpIHsKKwkJcHJfd2FybmluZygiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyIGJsb2NrIGV2ZW50c1xuIik7CisJCXJldHVybiAxOworCX0KKworCWlmIChyZWdpc3Rlcl90cmFjZXIoJmJsa190cmFjZXIpICE9IDApIHsKKwkJcHJfd2FybmluZygiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyIHRoZSBibG9jayB0cmFjZXJcbiIpOworCQl1bnJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgmdHJhY2VfYmxrX2V2ZW50KTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2RldmljZV9pbml0Y2FsbChpbml0X2Jsa190cmFjZXIpOworCitzdGF0aWMgaW50IGJsa190cmFjZV9yZW1vdmVfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCit7CisJc3RydWN0IGJsa190cmFjZSAqYnQ7CisKKwlidCA9IHhjaGcoJnEtPmJsa190cmFjZSwgTlVMTCk7CisJaWYgKGJ0ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmJsa19wcm9iZXNfcmVmKSkKKwkJYmxrX3VucmVnaXN0ZXJfdHJhY2Vwb2ludHMoKTsKKworCWJsa190cmFjZV9mcmVlKGJ0KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldHVwIGV2ZXJ5dGhpbmcgcmVxdWlyZWQgdG8gc3RhcnQgdHJhY2luZworICovCitzdGF0aWMgaW50IGJsa190cmFjZV9zZXR1cF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgZGV2X3QgZGV2KQoreworCXN0cnVjdCBibGtfdHJhY2UgKm9sZF9idCwgKmJ0ID0gTlVMTDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCWJ0ID0ga3phbGxvYyhzaXplb2YoKmJ0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlidC0+bXNnX2RhdGEgPSBfX2FsbG9jX3BlcmNwdShCTEtfVE5fTUFYX01TRywgX19hbGlnbm9mX18oY2hhcikpOworCWlmICghYnQtPm1zZ19kYXRhKQorCQlnb3RvIGZyZWVfYnQ7CisKKwlidC0+ZGV2ID0gZGV2OworCWJ0LT5hY3RfbWFzayA9ICh1MTYpLTE7CisJYnQtPmVuZF9sYmEgPSAtMVVMTDsKKworCW9sZF9idCA9IHhjaGcoJnEtPmJsa190cmFjZSwgYnQpOworCWlmIChvbGRfYnQgIT0gTlVMTCkgeworCQkodm9pZCl4Y2hnKCZxLT5ibGtfdHJhY2UsIG9sZF9idCk7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBmcmVlX2J0OworCX0KKworCWlmIChhdG9taWNfaW5jX3JldHVybigmYmxrX3Byb2Jlc19yZWYpID09IDEpCisJCWJsa19yZWdpc3Rlcl90cmFjZXBvaW50cygpOworCXJldHVybiAwOworCitmcmVlX2J0OgorCWJsa190cmFjZV9mcmVlKGJ0KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogc3lzZnMgaW50ZXJmYWNlIHRvIGVuYWJsZSBhbmQgY29uZmlndXJlIHRyYWNpbmcKKyAqLworCitzdGF0aWMgc3NpemVfdCBzeXNmc19ibGtfdHJhY2VfYXR0cl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CisjZGVmaW5lIEJMS19UUkFDRV9ERVZJQ0VfQVRUUihfbmFtZSkgXAorCURFVklDRV9BVFRSKF9uYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwgXAorCQkgICAgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc2hvdywgXAorCQkgICAgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmUpCisKK3N0YXRpYyBCTEtfVFJBQ0VfREVWSUNFX0FUVFIoZW5hYmxlKTsKK3N0YXRpYyBCTEtfVFJBQ0VfREVWSUNFX0FUVFIoYWN0X21hc2spOworc3RhdGljIEJMS19UUkFDRV9ERVZJQ0VfQVRUUihwaWQpOworc3RhdGljIEJMS19UUkFDRV9ERVZJQ0VfQVRUUihzdGFydF9sYmEpOworc3RhdGljIEJMS19UUkFDRV9ERVZJQ0VfQVRUUihlbmRfbGJhKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmJsa190cmFjZV9hdHRyc1tdID0geworCSZkZXZfYXR0cl9lbmFibGUuYXR0ciwKKwkmZGV2X2F0dHJfYWN0X21hc2suYXR0ciwKKwkmZGV2X2F0dHJfcGlkLmF0dHIsCisJJmRldl9hdHRyX3N0YXJ0X2xiYS5hdHRyLAorCSZkZXZfYXR0cl9lbmRfbGJhLmF0dHIsCisJTlVMTAorfTsKKworc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBibGtfdHJhY2VfYXR0cl9ncm91cCA9IHsKKwkubmFtZSAgPSAidHJhY2UiLAorCS5hdHRycyA9IGJsa190cmFjZV9hdHRycywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWludCBtYXNrOworCWNvbnN0IGNoYXIgKnN0cjsKK30gbWFza19tYXBzW10gPSB7CisJeyBCTEtfVENfUkVBRCwJCSJyZWFkIgkJfSwKKwl7IEJMS19UQ19XUklURSwJCSJ3cml0ZSIJCX0sCisJeyBCTEtfVENfQkFSUklFUiwJImJhcnJpZXIiCX0sCisJeyBCTEtfVENfU1lOQywJCSJzeW5jIgkJfSwKKwl7IEJMS19UQ19RVUVVRSwJCSJxdWV1ZSIJCX0sCisJeyBCTEtfVENfUkVRVUVVRSwJInJlcXVldWUiCX0sCisJeyBCTEtfVENfSVNTVUUsCQkiaXNzdWUiCQl9LAorCXsgQkxLX1RDX0NPTVBMRVRFLAkiY29tcGxldGUiCX0sCisJeyBCTEtfVENfRlMsCQkiZnMiCQl9LAorCXsgQkxLX1RDX1BDLAkJInBjIgkJfSwKKwl7IEJMS19UQ19BSEVBRCwJCSJhaGVhZCIJCX0sCisJeyBCTEtfVENfTUVUQSwJCSJtZXRhIgkJfSwKKwl7IEJMS19UQ19ESVNDQVJELAkiZGlzY2FyZCIJfSwKKwl7IEJMS19UQ19EUlZfREFUQSwJImRydl9kYXRhIgl9LAorfTsKKworc3RhdGljIGludCBibGtfdHJhY2Vfc3RyMm1hc2soY29uc3QgY2hhciAqc3RyKQoreworCWludCBpOworCWludCBtYXNrID0gMDsKKwljaGFyICpzLCAqdG9rZW47CisKKwlzID0ga3N0cmR1cChzdHIsIEdGUF9LRVJORUwpOworCWlmIChzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXMgPSBzdHJzdHJpcChzKTsKKworCXdoaWxlICgxKSB7CisJCXRva2VuID0gc3Ryc2VwKCZzLCAiLCIpOworCQlpZiAodG9rZW4gPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCWlmICgqdG9rZW4gPT0gJ1wwJykKKwkJCWNvbnRpbnVlOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1hc2tfbWFwcyk7IGkrKykgeworCQkJaWYgKHN0cmNhc2VjbXAodG9rZW4sIG1hc2tfbWFwc1tpXS5zdHIpID09IDApIHsKKwkJCQltYXNrIHw9IG1hc2tfbWFwc1tpXS5tYXNrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpID09IEFSUkFZX1NJWkUobWFza19tYXBzKSkgeworCQkJbWFzayA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCX0KKwlrZnJlZShzKTsKKworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgc3NpemVfdCBibGtfdHJhY2VfbWFzazJzdHIoY2hhciAqYnVmLCBpbnQgbWFzaykKK3sKKwlpbnQgaTsKKwljaGFyICpwID0gYnVmOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWFza19tYXBzKTsgaSsrKSB7CisJCWlmIChtYXNrICYgbWFza19tYXBzW2ldLm1hc2spIHsKKwkJCXAgKz0gc3ByaW50ZihwLCAiJXMlcyIsCisJCQkJICAgIChwID09IGJ1ZikgPyAiIiA6ICIsIiwgbWFza19tYXBzW2ldLnN0cik7CisJCX0KKwl9CisJKnArKyA9ICdcbic7CisKKwlyZXR1cm4gcCAtIGJ1ZjsKK30KKworc3RhdGljIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpibGtfdHJhY2VfZ2V0X3F1ZXVlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCit7CisJaWYgKGJkZXYtPmJkX2Rpc2sgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gYmRldl9nZXRfcXVldWUoYmRldik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN5c2ZzX2Jsa190cmFjZV9hdHRyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IGhkX3N0cnVjdCAqcCA9IGRldl90b19wYXJ0KGRldik7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKKwlzc2l6ZV90IHJldCA9IC1FTlhJTzsKKworCWxvY2tfa2VybmVsKCk7CisJYmRldiA9IGJkZ2V0KHBhcnRfZGV2dChwKSk7CisJaWYgKGJkZXYgPT0gTlVMTCkKKwkJZ290byBvdXRfdW5sb2NrX2tlcm5lbDsKKworCXEgPSBibGtfdHJhY2VfZ2V0X3F1ZXVlKGJkZXYpOworCWlmIChxID09IE5VTEwpCisJCWdvdG8gb3V0X2JkcHV0OworCisJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOworCisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX2VuYWJsZSkgeworCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIXEtPmJsa190cmFjZSk7CisJCWdvdG8gb3V0X3VubG9ja19iZGV2OworCX0KKworCWlmIChxLT5ibGtfdHJhY2UgPT0gTlVMTCkKKwkJcmV0ID0gc3ByaW50ZihidWYsICJkaXNhYmxlZFxuIik7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfYWN0X21hc2spCisJCXJldCA9IGJsa190cmFjZV9tYXNrMnN0cihidWYsIHEtPmJsa190cmFjZS0+YWN0X21hc2spOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX3BpZCkKKwkJcmV0ID0gc3ByaW50ZihidWYsICIldVxuIiwgcS0+YmxrX3RyYWNlLT5waWQpOworCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX3N0YXJ0X2xiYSkKKwkJcmV0ID0gc3ByaW50ZihidWYsICIlbGx1XG4iLCBxLT5ibGtfdHJhY2UtPnN0YXJ0X2xiYSk7CisJZWxzZSBpZiAoYXR0ciA9PSAmZGV2X2F0dHJfZW5kX2xiYSkKKwkJcmV0ID0gc3ByaW50ZihidWYsICIlbGx1XG4iLCBxLT5ibGtfdHJhY2UtPmVuZF9sYmEpOworCitvdXRfdW5sb2NrX2JkZXY6CisJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tdXRleCk7CitvdXRfYmRwdXQ6CisJYmRwdXQoYmRldik7CitvdXRfdW5sb2NrX2tlcm5lbDoKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3Qgc3lzZnNfYmxrX3RyYWNlX2F0dHJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CisJc3RydWN0IGhkX3N0cnVjdCAqcDsKKwl1NjQgdmFsdWU7CisJc3NpemVfdCByZXQgPSAtRUlOVkFMOworCisJaWYgKGNvdW50ID09IDApCisJCWdvdG8gb3V0OworCisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX2FjdF9tYXNrKSB7CisJCWlmIChzc2NhbmYoYnVmLCAiJWxseCIsICZ2YWx1ZSkgIT0gMSkgeworCQkJLyogQXNzdW1lIGl0IGlzIGEgbGlzdCBvZiB0cmFjZSBjYXRlZ29yeSBuYW1lcyAqLworCQkJcmV0ID0gYmxrX3RyYWNlX3N0cjJtYXNrKGJ1Zik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJCXZhbHVlID0gcmV0OworCQl9CisJfSBlbHNlIGlmIChzc2NhbmYoYnVmLCAiJWxsdSIsICZ2YWx1ZSkgIT0gMSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSAtRU5YSU87CisKKwlsb2NrX2tlcm5lbCgpOworCXAgPSBkZXZfdG9fcGFydChkZXYpOworCWJkZXYgPSBiZGdldChwYXJ0X2RldnQocCkpOworCWlmIChiZGV2ID09IE5VTEwpCisJCWdvdG8gb3V0X3VubG9ja19rZXJuZWw7CisKKwlxID0gYmxrX3RyYWNlX2dldF9xdWV1ZShiZGV2KTsKKwlpZiAocSA9PSBOVUxMKQorCQlnb3RvIG91dF9iZHB1dDsKKworCW11dGV4X2xvY2soJmJkZXYtPmJkX211dGV4KTsKKworCWlmIChhdHRyID09ICZkZXZfYXR0cl9lbmFibGUpIHsKKwkJaWYgKHZhbHVlKQorCQkJcmV0ID0gYmxrX3RyYWNlX3NldHVwX3F1ZXVlKHEsIGJkZXYtPmJkX2Rldik7CisJCWVsc2UKKwkJCXJldCA9IGJsa190cmFjZV9yZW1vdmVfcXVldWUocSk7CisJCWdvdG8gb3V0X3VubG9ja19iZGV2OworCX0KKworCXJldCA9IDA7CisJaWYgKHEtPmJsa190cmFjZSA9PSBOVUxMKQorCQlyZXQgPSBibGtfdHJhY2Vfc2V0dXBfcXVldWUocSwgYmRldi0+YmRfZGV2KTsKKworCWlmIChyZXQgPT0gMCkgeworCQlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfYWN0X21hc2spCisJCQlxLT5ibGtfdHJhY2UtPmFjdF9tYXNrID0gdmFsdWU7CisJCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX3BpZCkKKwkJCXEtPmJsa190cmFjZS0+cGlkID0gdmFsdWU7CisJCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX3N0YXJ0X2xiYSkKKwkJCXEtPmJsa190cmFjZS0+c3RhcnRfbGJhID0gdmFsdWU7CisJCWVsc2UgaWYgKGF0dHIgPT0gJmRldl9hdHRyX2VuZF9sYmEpCisJCQlxLT5ibGtfdHJhY2UtPmVuZF9sYmEgPSB2YWx1ZTsKKwl9CisKK291dF91bmxvY2tfYmRldjoKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKK291dF9iZHB1dDoKKwliZHB1dChiZGV2KTsKK291dF91bmxvY2tfa2VybmVsOgorCXVubG9ja19rZXJuZWwoKTsKK291dDoKKwlyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7Cit9CisKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS9ldmVudHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDZmMmFhCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL2V2ZW50cy5jCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBUaGlzIGlzIHRoZSBwbGFjZSB0byByZWdpc3RlciBhbGwgdHJhY2UgcG9pbnRzIGFzIGV2ZW50cy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisKKyNpbmNsdWRlIDx0cmFjZS90cmFjZV9ldmVudHMuaD4KKworI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgorCisjaW5jbHVkZSAidHJhY2VfZXZlbnRzX3N0YWdlXzEuaCIKKyNpbmNsdWRlICJ0cmFjZV9ldmVudHNfc3RhZ2VfMi5oIgorI2luY2x1ZGUgInRyYWNlX2V2ZW50c19zdGFnZV8zLmgiCisKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwppbmRleCBmZGY5MTNkLi5mMWVkMDgwIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCkBAIC0yNyw2ICsyNyw5IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorCisjaW5jbHVkZSA8dHJhY2Uvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KIApAQCAtNDQsMTQgKzQ3LDE0IEBACiAJCQlmdHJhY2Vfa2lsbCgpOwkJXAogCX0gd2hpbGUgKDApCiAKKy8qIGhhc2ggYml0cyBmb3Igc3BlY2lmaWMgZnVuY3Rpb24gc2VsZWN0aW9uICovCisjZGVmaW5lIEZUUkFDRV9IQVNIX0JJVFMgNworI2RlZmluZSBGVFJBQ0VfRlVOQ19IQVNIU0laRSAoMSA8PCBGVFJBQ0VfSEFTSF9CSVRTKQorCiAvKiBmdHJhY2VfZW5hYmxlZCBpcyBhIG1ldGhvZCB0byB0dXJuIGZ0cmFjZSBvbiBvciBvZmYgKi8KIGludCBmdHJhY2VfZW5hYmxlZCBfX3JlYWRfbW9zdGx5Owogc3RhdGljIGludCBsYXN0X2Z0cmFjZV9lbmFibGVkOwogCi0vKiBzZXQgd2hlbiB0cmFjaW5nIG9ubHkgYSBwaWQgKi8KLXN0cnVjdCBwaWQgKmZ0cmFjZV9waWRfdHJhY2U7Ci1zdGF0aWMgc3RydWN0IHBpZCAqIGNvbnN0IGZ0cmFjZV9zd2FwcGVyX3BpZCA9ICZpbml0X3N0cnVjdF9waWQ7Ci0KIC8qIFF1aWNrIGRpc2FibGluZyBvZiBmdW5jdGlvbiB0cmFjZXIuICovCiBpbnQgZnVuY3Rpb25fdHJhY2Vfc3RvcDsKIApAQCAtNjEsOSArNjQsNyBAQAogICovCiBzdGF0aWMgaW50IGZ0cmFjZV9kaXNhYmxlZCBfX3JlYWRfbW9zdGx5OwogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZ0cmFjZV9sb2NrKTsKLXN0YXRpYyBERUZJTkVfTVVURVgoZnRyYWNlX3N5c2N0bF9sb2NrKTsKLXN0YXRpYyBERUZJTkVfTVVURVgoZnRyYWNlX3N0YXJ0X2xvY2spOworc3RhdGljIERFRklORV9NVVRFWChmdHJhY2VfbG9jayk7CiAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyBmdHJhY2VfbGlzdF9lbmQgX19yZWFkX21vc3RseSA9CiB7CkBAIC0xMzQsOSArMTM1LDYgQEAKIAogc3RhdGljIGludCBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQogewotCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KLQlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKLQogCW9wcy0+bmV4dCA9IGZ0cmFjZV9saXN0OwogCS8qCiAJICogV2UgYXJlIGVudGVyaW5nIG9wcyBpbnRvIHRoZSBmdHJhY2VfbGlzdCBidXQgYW5vdGhlcgpAQCAtMTcyLDE4ICsxNzAsMTIgQEAKICNlbmRpZgogCX0KIAotCXNwaW5fdW5sb2NrKCZmdHJhY2VfbG9jayk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpCiB7CiAJc3RydWN0IGZ0cmFjZV9vcHMgKipwOwotCWludCByZXQgPSAwOwotCi0JLyogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLwotCXNwaW5fbG9jaygmZnRyYWNlX2xvY2spOwogCiAJLyoKIAkgKiBJZiB3ZSBhcmUgcmVtb3ZpbmcgdGhlIGxhc3QgZnVuY3Rpb24sIHRoZW4gc2ltcGx5IHBvaW50CkBAIC0xOTIsMTcgKzE4NCwxNSBAQAogCWlmIChmdHJhY2VfbGlzdCA9PSBvcHMgJiYgb3BzLT5uZXh0ID09ICZmdHJhY2VfbGlzdF9lbmQpIHsKIAkJZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnRyYWNlX3N0dWI7CiAJCWZ0cmFjZV9saXN0ID0gJmZ0cmFjZV9saXN0X2VuZDsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCX0KIAogCWZvciAocCA9ICZmdHJhY2VfbGlzdDsgKnAgIT0gJmZ0cmFjZV9saXN0X2VuZDsgcCA9ICYoKnApLT5uZXh0KQogCQlpZiAoKnAgPT0gb3BzKQogCQkJYnJlYWs7CiAKLQlpZiAoKnAgIT0gb3BzKSB7Ci0JCXJldCA9IC0xOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKCpwICE9IG9wcykKKwkJcmV0dXJuIC0xOwogCiAJKnAgPSAoKnApLT5uZXh0OwogCkBAIC0yMjMsMjEgKzIxMywxNSBAQAogCQl9CiAJfQogCi0gb3V0OgotCXNwaW5fdW5sb2NrKCZmdHJhY2VfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBmdHJhY2VfdXBkYXRlX3BpZF9mdW5jKHZvaWQpCiB7CiAJZnRyYWNlX2Z1bmNfdCBmdW5jOwogCi0JLyogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLwotCXNwaW5fbG9jaygmZnRyYWNlX2xvY2spOwotCiAJaWYgKGZ0cmFjZV90cmFjZV9mdW5jdGlvbiA9PSBmdHJhY2Vfc3R1YikKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCWZ1bmMgPSBmdHJhY2VfdHJhY2VfZnVuY3Rpb247CiAKQEAgLTI1NCwyMyArMjM4LDI5IEBACiAjZWxzZQogCV9fZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnVuYzsKICNlbmRpZgotCi0gb3V0OgotCXNwaW5fdW5sb2NrKCZmdHJhY2VfbG9jayk7CiB9CiAKKy8qIHNldCB3aGVuIHRyYWNpbmcgb25seSBhIHBpZCAqLworc3RydWN0IHBpZCAqZnRyYWNlX3BpZF90cmFjZTsKK3N0YXRpYyBzdHJ1Y3QgcGlkICogY29uc3QgZnRyYWNlX3N3YXBwZXJfcGlkID0gJmluaXRfc3RydWN0X3BpZDsKKwogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorCiAjaWZuZGVmIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRAogIyBlcnJvciBEeW5hbWljIGZ0cmFjZSBkZXBlbmRzIG9uIE1DT1VOVF9SRUNPUkQKICNlbmRpZgogCi0vKgotICogU2luY2UgTUNPVU5UX0FERFIgbWF5IHBvaW50IHRvIG1jb3VudCBpdHNlbGYsIHdlIGRvIG5vdCB3YW50Ci0gKiB0byBnZXQgaXQgY29uZnVzZWQgYnkgcmVhZGluZyBhIHJlZmVyZW5jZSBpbiB0aGUgY29kZSBhcyB3ZQotICogYXJlIHBhcnNpbmcgb24gb2JqY29weSBvdXRwdXQgb2YgdGV4dC4gVXNlIGEgdmFyaWFibGUgZm9yCi0gKiBpdCBpbnN0ZWFkLgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBtY291bnRfYWRkciA9IE1DT1VOVF9BRERSOworc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIGZ0cmFjZV9mdW5jX2hhc2hbRlRSQUNFX0ZVTkNfSEFTSFNJWkVdIF9fcmVhZF9tb3N0bHk7CisKK3N0cnVjdCBmdHJhY2VfZnVuY19wcm9iZSB7CisJc3RydWN0IGhsaXN0X25vZGUJbm9kZTsKKwlzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcwkqb3BzOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCXVuc2lnbmVkIGxvbmcJCWlwOworCXZvaWQJCQkqZGF0YTsKKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKK307CisKIAogZW51bSB7CiAJRlRSQUNFX0VOQUJMRV9DQUxMUwkJPSAoMSA8PCAwKSwKQEAgLTI4NCwxMyArMjc0LDEzIEBACiAKIHN0YXRpYyBpbnQgZnRyYWNlX2ZpbHRlcmVkOwogCi1zdGF0aWMgTElTVF9IRUFEKGZ0cmFjZV9uZXdfYWRkcnMpOworc3RhdGljIHN0cnVjdCBkeW5fZnRyYWNlICpmdHJhY2VfbmV3X2FkZHJzOwogCiBzdGF0aWMgREVGSU5FX01VVEVYKGZ0cmFjZV9yZWdleF9sb2NrKTsKIAogc3RydWN0IGZ0cmFjZV9wYWdlIHsKIAlzdHJ1Y3QgZnRyYWNlX3BhZ2UJKm5leHQ7Ci0JdW5zaWduZWQgbG9uZwkJaW5kZXg7CisJaW50CQkJaW5kZXg7CiAJc3RydWN0IGR5bl9mdHJhY2UJcmVjb3Jkc1tdOwogfTsKIApAQCAtMzA1LDYgKzI5NSwxOSBAQAogCiBzdGF0aWMgc3RydWN0IGR5bl9mdHJhY2UgKmZ0cmFjZV9mcmVlX3JlY29yZHM7CiAKKy8qCisgKiBUaGlzIGlzIGEgZG91YmxlIGZvci4gRG8gbm90IHVzZSAnYnJlYWsnIHRvIGJyZWFrIG91dCBvZiB0aGUgbG9vcCwKKyAqIHlvdSBtdXN0IHVzZSBhIGdvdG8uCisgKi8KKyNkZWZpbmUgZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKQkJCQkJXAorCWZvciAocGcgPSBmdHJhY2VfcGFnZXNfc3RhcnQ7IHBnOyBwZyA9IHBnLT5uZXh0KSB7CQlcCisJCWludCBfX19fX2k7CQkJCQkJXAorCQlmb3IgKF9fX19faSA9IDA7IF9fX19faSA8IHBnLT5pbmRleDsgX19fX19pKyspIHsJXAorCQkJcmVjID0gJnBnLT5yZWNvcmRzW19fX19faV07CisKKyNkZWZpbmUgd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpCQlcCisJCX0JCQkJXAorCX0KIAogI2lmZGVmIENPTkZJR19LUFJPQkVTCiAKQEAgLTMzOCw3ICszNDEsNyBAQAogCiBzdGF0aWMgdm9pZCBmdHJhY2VfZnJlZV9yZWMoc3RydWN0IGR5bl9mdHJhY2UgKnJlYykKIHsKLQlyZWMtPmlwID0gKHVuc2lnbmVkIGxvbmcpZnRyYWNlX2ZyZWVfcmVjb3JkczsKKwlyZWMtPmZyZWVsaXN0ID0gZnRyYWNlX2ZyZWVfcmVjb3JkczsKIAlmdHJhY2VfZnJlZV9yZWNvcmRzID0gcmVjOwogCXJlYy0+ZmxhZ3MgfD0gRlRSQUNFX0ZMX0ZSRUU7CiB9CkBAIC0zNDksMjMgKzM1MiwyMiBAQAogCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CiAJdW5zaWduZWQgbG9uZyBzID0gKHVuc2lnbmVkIGxvbmcpc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBlID0gcyArIHNpemU7Ci0JaW50IGk7CiAKIAlpZiAoZnRyYWNlX2Rpc2FibGVkIHx8ICFzdGFydCkKIAkJcmV0dXJuOwogCi0JLyogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLwotCXNwaW5fbG9jaygmZnRyYWNlX2xvY2spOwotCi0JZm9yIChwZyA9IGZ0cmFjZV9wYWdlc19zdGFydDsgcGc7IHBnID0gcGctPm5leHQpIHsKLQkJZm9yIChpID0gMDsgaSA8IHBnLT5pbmRleDsgaSsrKSB7Ci0JCQlyZWMgPSAmcGctPnJlY29yZHNbaV07Ci0KLQkJCWlmICgocmVjLT5pcCA+PSBzKSAmJiAocmVjLT5pcCA8IGUpKQotCQkJCWZ0cmFjZV9mcmVlX3JlYyhyZWMpOworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKwlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKKwkJaWYgKChyZWMtPmlwID49IHMpICYmIChyZWMtPmlwIDwgZSkpIHsKKwkJCS8qCisJCQkgKiByZWMtPmlwIGlzIGNoYW5nZWQgaW4gZnRyYWNlX2ZyZWVfcmVjKCkKKwkJCSAqIEl0IHNob3VsZCBub3QgYmV0d2VlbiBzIGFuZCBlIGlmIHJlY29yZCB3YXMgZnJlZWQuCisJCQkgKi8KKwkJCUZUUkFDRV9XQVJOX09OKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRlJFRSk7CisJCQlmdHJhY2VfZnJlZV9yZWMocmVjKTsKIAkJfQotCX0KLQlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOworCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogfQogCiBzdGF0aWMgc3RydWN0IGR5bl9mdHJhY2UgKmZ0cmFjZV9hbGxvY19keW5fbm9kZSh1bnNpZ25lZCBsb25nIGlwKQpAQCAtMzgyLDcgKzM4NCw3IEBACiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCi0JCWZ0cmFjZV9mcmVlX3JlY29yZHMgPSAodm9pZCAqKXJlYy0+aXA7CisJCWZ0cmFjZV9mcmVlX3JlY29yZHMgPSByZWMtPmZyZWVsaXN0OwogCQltZW1zZXQocmVjLCAwLCBzaXplb2YoKnJlYykpOwogCQlyZXR1cm4gcmVjOwogCX0KQEAgLTQxNCw4ICs0MTYsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAogCXJlYy0+aXAgPSBpcDsKLQotCWxpc3RfYWRkKCZyZWMtPmxpc3QsICZmdHJhY2VfbmV3X2FkZHJzKTsKKwlyZWMtPm5ld2xpc3QgPSBmdHJhY2VfbmV3X2FkZHJzOworCWZ0cmFjZV9uZXdfYWRkcnMgPSByZWM7CiAKIAlyZXR1cm4gcmVjOwogfQpAQCAtNDYxLDEwICs0NjMsMTAgQEAKIHN0YXRpYyBpbnQKIF9fZnRyYWNlX3JlcGxhY2VfY29kZShzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCBpbnQgZW5hYmxlKQogewotCXVuc2lnbmVkIGxvbmcgaXAsIGZsOwogCXVuc2lnbmVkIGxvbmcgZnRyYWNlX2FkZHI7CisJdW5zaWduZWQgbG9uZyBpcCwgZmw7CiAKLQlmdHJhY2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWZ0cmFjZV9jYWxsZXI7CisJZnRyYWNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylGVFJBQ0VfQUREUjsKIAogCWlwID0gcmVjLT5pcDsKIApAQCAtNDczLDcgKzQ3NSw3IEBACiAJICogaXQgaXMgbm90IGVuYWJsZWQgdGhlbiBkbyBub3RoaW5nLgogCSAqCiAJICogSWYgdGhpcyByZWNvcmQgaXMgbm90IHRvIGJlIHRyYWNlZCBhbmQKLQkgKiBpdCBpcyBlbmFibGVkIHRoZW4gZGlzYWJsZWQgaXQuCisJICogaXQgaXMgZW5hYmxlZCB0aGVuIGRpc2FibGUgaXQuCiAJICoKIAkgKi8KIAlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9OT1RSQUNFKSB7CkBAIC00OTMsNyArNDk1LDcgQEAKIAkJaWYgKGZsID09IChGVFJBQ0VfRkxfRklMVEVSIHwgRlRSQUNFX0ZMX0VOQUJMRUQpKQogCQkJcmV0dXJuIDA7CiAKLQkJLyogUmVjb3JkIGlzIG5vdCBmaWx0ZXJlZCBhbmQgaXMgbm90IGVuYWJsZWQgZG8gbm90aGluZyAqLworCQkvKiBSZWNvcmQgaXMgbm90IGZpbHRlcmVkIG9yIGVuYWJsZWQsIGRvIG5vdGhpbmcgKi8KIAkJaWYgKCFmbCkKIAkJCXJldHVybiAwOwogCkBAIC01MTUsNyArNTE3LDcgQEAKIAogCQl9IGVsc2UgewogCi0JCQkvKiBpZiByZWNvcmQgaXMgbm90IGVuYWJsZWQgZG8gbm90aGluZyAqLworCQkJLyogaWYgcmVjb3JkIGlzIG5vdCBlbmFibGVkLCBkbyBub3RoaW5nICovCiAJCQlpZiAoIShyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0VOQUJMRUQpKQogCQkJCXJldHVybiAwOwogCkBAIC01MzEsNDEgKzUzMyw0MSBAQAogCiBzdGF0aWMgdm9pZCBmdHJhY2VfcmVwbGFjZV9jb2RlKGludCBlbmFibGUpCiB7Ci0JaW50IGksIGZhaWxlZDsKIAlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOwogCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CisJaW50IGZhaWxlZDsKIAotCWZvciAocGcgPSBmdHJhY2VfcGFnZXNfc3RhcnQ7IHBnOyBwZyA9IHBnLT5uZXh0KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBwZy0+aW5kZXg7IGkrKykgewotCQkJcmVjID0gJnBnLT5yZWNvcmRzW2ldOworCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgeworCQkvKgorCQkgKiBTa2lwIG92ZXIgZnJlZSByZWNvcmRzLCByZWNvcmRzIHRoYXQgaGF2ZQorCQkgKiBmYWlsZWQgYW5kIG5vdCBjb252ZXJ0ZWQuCisJCSAqLworCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUkVFIHx8CisJCSAgICByZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCB8fAorCQkgICAgIShyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0NPTlZFUlRFRCkpCisJCQljb250aW51ZTsKIAotCQkJLyoKLQkJCSAqIFNraXAgb3ZlciBmcmVlIHJlY29yZHMgYW5kIHJlY29yZHMgdGhhdCBoYXZlCi0JCQkgKiBmYWlsZWQuCi0JCQkgKi8KLQkJCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZSRUUgfHwKLQkJCSAgICByZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkKLQkJCQljb250aW51ZTsKLQotCQkJLyogaWdub3JlIHVwZGF0ZXMgdG8gdGhpcyByZWNvcmQncyBtY291bnQgc2l0ZSAqLwotCQkJaWYgKGdldF9rcHJvYmUoKHZvaWQgKilyZWMtPmlwKSkgewotCQkJCWZyZWV6ZV9yZWNvcmQocmVjKTsKLQkJCQljb250aW51ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJdW5mcmVlemVfcmVjb3JkKHJlYyk7Ci0JCQl9Ci0KLQkJCWZhaWxlZCA9IF9fZnRyYWNlX3JlcGxhY2VfY29kZShyZWMsIGVuYWJsZSk7Ci0JCQlpZiAoZmFpbGVkICYmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0NPTlZFUlRFRCkpIHsKLQkJCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9GQUlMRUQ7Ci0JCQkJaWYgKChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpIHx8Ci0JCQkJICAgICFjb3JlX2tlcm5lbF90ZXh0KHJlYy0+aXApKSB7Ci0JCQkJCWZ0cmFjZV9mcmVlX3JlYyhyZWMpOwotCQkJCX0gZWxzZQotCQkJCQlmdHJhY2VfYnVnKGZhaWxlZCwgcmVjLT5pcCk7Ci0JCQl9CisJCS8qIGlnbm9yZSB1cGRhdGVzIHRvIHRoaXMgcmVjb3JkJ3MgbWNvdW50IHNpdGUgKi8KKwkJaWYgKGdldF9rcHJvYmUoKHZvaWQgKilyZWMtPmlwKSkgeworCQkJZnJlZXplX3JlY29yZChyZWMpOworCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQl1bmZyZWV6ZV9yZWNvcmQocmVjKTsKIAkJfQotCX0KKworCQlmYWlsZWQgPSBfX2Z0cmFjZV9yZXBsYWNlX2NvZGUocmVjLCBlbmFibGUpOworCQlpZiAoZmFpbGVkKSB7CisJCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9GQUlMRUQ7CisJCQlpZiAoKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykgfHwKKwkJCSAgICAhY29yZV9rZXJuZWxfdGV4dChyZWMtPmlwKSkgeworCQkJCWZ0cmFjZV9mcmVlX3JlYyhyZWMpOworCQkJCX0gZWxzZSB7CisJCQkJZnRyYWNlX2J1ZyhmYWlsZWQsIHJlYy0+aXApOworCQkJCQkvKiBTdG9wIHByb2Nlc3NpbmcgKi8KKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJfQorCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOwogfQogCiBzdGF0aWMgaW50CkBAIC01NzYsNyArNTc4LDcgQEAKIAogCWlwID0gcmVjLT5pcDsKIAotCXJldCA9IGZ0cmFjZV9tYWtlX25vcChtb2QsIHJlYywgbWNvdW50X2FkZHIpOworCXJldCA9IGZ0cmFjZV9tYWtlX25vcChtb2QsIHJlYywgTUNPVU5UX0FERFIpOwogCWlmIChyZXQpIHsKIAkJZnRyYWNlX2J1ZyhyZXQsIGlwKTsKIAkJcmVjLT5mbGFncyB8PSBGVFJBQ0VfRkxfRkFJTEVEOwpAQCAtNTg1LDYgKzU4NywyNCBAQAogCXJldHVybiAxOwogfQogCisvKgorICogYXJjaHMgY2FuIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaWYgdGhleSBtdXN0IGRvIHNvbWV0aGluZworICogYmVmb3JlIHRoZSBtb2RpZnlpbmcgY29kZSBpcyBwZXJmb3JtZWQuCisgKi8KK2ludCBfX3dlYWsgZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcHJlcGFyZSh2b2lkKQoreworCXJldHVybiAwOworfQorCisvKgorICogYXJjaHMgY2FuIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gaWYgdGhleSBtdXN0IGRvIHNvbWV0aGluZworICogYWZ0ZXIgdGhlIG1vZGlmeWluZyBjb2RlIGlzIHBlcmZvcm1lZC4KKyAqLworaW50IF9fd2VhayBmdHJhY2VfYXJjaF9jb2RlX21vZGlmeV9wb3N0X3Byb2Nlc3Modm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2Z0cmFjZV9tb2RpZnlfY29kZSh2b2lkICpkYXRhKQogewogCWludCAqY29tbWFuZCA9IGRhdGE7CkBAIC02MDcsNyArNjI3LDE3IEBACiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV9ydW5fdXBkYXRlX2NvZGUoaW50IGNvbW1hbmQpCiB7CisJaW50IHJldDsKKworCXJldCA9IGZ0cmFjZV9hcmNoX2NvZGVfbW9kaWZ5X3ByZXBhcmUoKTsKKwlGVFJBQ0VfV0FSTl9PTihyZXQpOworCWlmIChyZXQpCisJCXJldHVybjsKKwogCXN0b3BfbWFjaGluZShfX2Z0cmFjZV9tb2RpZnlfY29kZSwgJmNvbW1hbmQsIE5VTEwpOworCisJcmV0ID0gZnRyYWNlX2FyY2hfY29kZV9tb2RpZnlfcG9zdF9wcm9jZXNzKCk7CisJRlRSQUNFX1dBUk5fT04ocmV0KTsKIH0KIAogc3RhdGljIGZ0cmFjZV9mdW5jX3Qgc2F2ZWRfZnRyYWNlX2Z1bmM7CkBAIC02MzEsMTMgKzY2MSwxMCBAQAogCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQogCQlyZXR1cm47CiAKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CiAJZnRyYWNlX3N0YXJ0X3VwKys7CiAJY29tbWFuZCB8PSBGVFJBQ0VfRU5BQkxFX0NBTExTOwogCiAJZnRyYWNlX3N0YXJ0dXBfZW5hYmxlKGNvbW1hbmQpOwotCi0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV9zaHV0ZG93bihpbnQgY29tbWFuZCkKQEAgLTY0NSw3ICs2NzIsNiBAQAogCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQogCQlyZXR1cm47CiAKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CiAJZnRyYWNlX3N0YXJ0X3VwLS07CiAJaWYgKCFmdHJhY2Vfc3RhcnRfdXApCiAJCWNvbW1hbmQgfD0gRlRSQUNFX0RJU0FCTEVfQ0FMTFM7CkBAIC02NTYsMTEgKzY4Miw5IEBACiAJfQogCiAJaWYgKCFjb21tYW5kIHx8ICFmdHJhY2VfZW5hYmxlZCkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCWZ0cmFjZV9ydW5fdXBkYXRlX2NvZGUoY29tbWFuZCk7Ci0gb3V0OgotCW11dGV4X3VubG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBmdHJhY2Vfc3RhcnR1cF9zeXNjdGwodm9pZCkKQEAgLTY3MCw3ICs2OTQsNiBAQAogCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQogCQlyZXR1cm47CiAKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CiAJLyogRm9yY2UgdXBkYXRlIG5leHQgdGltZSAqLwogCXNhdmVkX2Z0cmFjZV9mdW5jID0gTlVMTDsKIAkvKiBmdHJhY2Vfc3RhcnRfdXAgaXMgdHJ1ZSBpZiB3ZSB3YW50IGZ0cmFjZSBydW5uaW5nICovCkBAIC02NzgsNyArNzAxLDYgQEAKIAkJY29tbWFuZCB8PSBGVFJBQ0VfRU5BQkxFX0NBTExTOwogCiAJZnRyYWNlX3J1bl91cGRhdGVfY29kZShjb21tYW5kKTsKLQltdXRleF91bmxvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgZnRyYWNlX3NodXRkb3duX3N5c2N0bCh2b2lkKQpAQCAtNjg4LDEzICs3MTAsMTEgQEAKIAlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKIAkJcmV0dXJuOwogCi0JbXV0ZXhfbG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOwogCS8qIGZ0cmFjZV9zdGFydF91cCBpcyB0cnVlIGlmIGZ0cmFjZSBpcyBydW5uaW5nICovCiAJaWYgKGZ0cmFjZV9zdGFydF91cCkKIAkJY29tbWFuZCB8PSBGVFJBQ0VfRElTQUJMRV9DQUxMUzsKIAogCWZ0cmFjZV9ydW5fdXBkYXRlX2NvZGUoY29tbWFuZCk7Ci0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CiB9CiAKIHN0YXRpYyBjeWNsZV90CQlmdHJhY2VfdXBkYXRlX3RpbWU7CkBAIC03MDMsMTkgKzcyMywyMSBAQAogCiBzdGF0aWMgaW50IGZ0cmFjZV91cGRhdGVfY29kZShzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0Jc3RydWN0IGR5bl9mdHJhY2UgKnAsICp0OworCXN0cnVjdCBkeW5fZnRyYWNlICpwOwogCWN5Y2xlX3Qgc3RhcnQsIHN0b3A7CiAKIAlzdGFydCA9IGZ0cmFjZV9ub3cocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAJZnRyYWNlX3VwZGF0ZV9jbnQgPSAwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHQsICZmdHJhY2VfbmV3X2FkZHJzLCBsaXN0KSB7CisJd2hpbGUgKGZ0cmFjZV9uZXdfYWRkcnMpIHsKIAogCQkvKiBJZiBzb21ldGhpbmcgd2VudCB3cm9uZywgYmFpbCB3aXRob3V0IGVuYWJsaW5nIGFueXRoaW5nICovCiAJCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQogCQkJcmV0dXJuIC0xOwogCi0JCWxpc3RfZGVsX2luaXQoJnAtPmxpc3QpOworCQlwID0gZnRyYWNlX25ld19hZGRyczsKKwkJZnRyYWNlX25ld19hZGRycyA9IHAtPm5ld2xpc3Q7CisJCXAtPmZsYWdzID0gMEw7CiAKIAkJLyogY29udmVydCByZWNvcmQgKGkuZSwgcGF0Y2ggbWNvdW50LWNhbGwgd2l0aCBOT1ApICovCiAJCWlmIChmdHJhY2VfY29kZV9kaXNhYmxlKG1vZCwgcCkpIHsKQEAgLTc4MSwxMyArODAzLDE2IEBACiAJRlRSQUNFX0lURVJfQ09OVAk9ICgxIDw8IDEpLAogCUZUUkFDRV9JVEVSX05PVFJBQ0UJPSAoMSA8PCAyKSwKIAlGVFJBQ0VfSVRFUl9GQUlMVVJFUwk9ICgxIDw8IDMpLAorCUZUUkFDRV9JVEVSX1BSSU5UQUxMCT0gKDEgPDwgNCksCisJRlRSQUNFX0lURVJfSEFTSAk9ICgxIDw8IDUpLAogfTsKIAogI2RlZmluZSBGVFJBQ0VfQlVGRl9NQVggKEtTWU1fU1lNQk9MX0xFTis0KSAvKiByb29tIGZvciB3aWxkY2FyZHMgKi8KIAogc3RydWN0IGZ0cmFjZV9pdGVyYXRvciB7CiAJc3RydWN0IGZ0cmFjZV9wYWdlCSpwZzsKLQl1bnNpZ25lZAkJaWR4OworCWludAkJCWhpZHg7CisJaW50CQkJaWR4OwogCXVuc2lnbmVkCQlmbGFnczsKIAl1bnNpZ25lZCBjaGFyCQlidWZmZXJbRlRSQUNFX0JVRkZfTUFYKzFdOwogCXVuc2lnbmVkCQlidWZmZXJfaWR4OwpAQCAtNzk1LDE1ICs4MjAsODkgQEAKIH07CiAKIHN0YXRpYyB2b2lkICoKK3RfaGFzaF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGZ0cmFjZV9pdGVyYXRvciAqaXRlciA9IG0tPnByaXZhdGU7CisJc3RydWN0IGhsaXN0X25vZGUgKmhuZCA9IHY7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhoZDsKKworCVdBUk5fT04oIShpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0hBU0gpKTsKKworCSgqcG9zKSsrOworCisgcmV0cnk6CisJaWYgKGl0ZXItPmhpZHggPj0gRlRSQUNFX0ZVTkNfSEFTSFNJWkUpCisJCXJldHVybiBOVUxMOworCisJaGhkID0gJmZ0cmFjZV9mdW5jX2hhc2hbaXRlci0+aGlkeF07CisKKwlpZiAoaGxpc3RfZW1wdHkoaGhkKSkgeworCQlpdGVyLT5oaWR4Kys7CisJCWhuZCA9IE5VTEw7CisJCWdvdG8gcmV0cnk7CisJfQorCisJaWYgKCFobmQpCisJCWhuZCA9IGhoZC0+Zmlyc3Q7CisJZWxzZSB7CisJCWhuZCA9IGhuZC0+bmV4dDsKKwkJaWYgKCFobmQpIHsKKwkJCWl0ZXItPmhpZHgrKzsKKwkJCWdvdG8gcmV0cnk7CisJCX0KKwl9CisKKwlyZXR1cm4gaG5kOworfQorCitzdGF0aWMgdm9pZCAqdF9oYXNoX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGZ0cmFjZV9pdGVyYXRvciAqaXRlciA9IG0tPnByaXZhdGU7CisJdm9pZCAqcCA9IE5VTEw7CisKKwlpdGVyLT5mbGFncyB8PSBGVFJBQ0VfSVRFUl9IQVNIOworCisJcmV0dXJuIHRfaGFzaF9uZXh0KG0sIHAsIHBvcyk7Cit9CisKK3N0YXRpYyBpbnQgdF9oYXNoX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBmdHJhY2VfZnVuY19wcm9iZSAqcmVjOworCXN0cnVjdCBobGlzdF9ub2RlICpobmQgPSB2OworCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CisKKwlyZWMgPSBobGlzdF9lbnRyeShobmQsIHN0cnVjdCBmdHJhY2VfZnVuY19wcm9iZSwgbm9kZSk7CisKKwlpZiAocmVjLT5vcHMtPnByaW50KQorCQlyZXR1cm4gcmVjLT5vcHMtPnByaW50KG0sIHJlYy0+aXAsIHJlYy0+b3BzLCByZWMtPmRhdGEpOworCisJa2FsbHN5bXNfbG9va3VwKHJlYy0+aXAsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7CisJc2VxX3ByaW50ZihtLCAiJXM6Iiwgc3RyKTsKKworCWthbGxzeW1zX2xvb2t1cCgodW5zaWduZWQgbG9uZylyZWMtPm9wcy0+ZnVuYywgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKKwlzZXFfcHJpbnRmKG0sICIlcyIsIHN0cik7CisKKwlpZiAocmVjLT5kYXRhKQorCQlzZXFfcHJpbnRmKG0sICI6JXAiLCByZWMtPmRhdGEpOworCXNlcV9wdXRjKG0sICdcbicpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICoKIHRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBmdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBtLT5wcml2YXRlOwogCXN0cnVjdCBkeW5fZnRyYWNlICpyZWMgPSBOVUxMOwogCisJaWYgKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfSEFTSCkKKwkJcmV0dXJuIHRfaGFzaF9uZXh0KG0sIHYsIHBvcyk7CisKIAkoKnBvcykrKzsKIAotCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KLQlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKKwlpZiAoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9QUklOVEFMTCkKKwkJcmV0dXJuIE5VTEw7CisKICByZXRyeToKIAlpZiAoaXRlci0+aWR4ID49IGl0ZXItPnBnLT5pbmRleCkgewogCQlpZiAoaXRlci0+cGctPm5leHQpIHsKQEAgLTgzMiw3ICs5MzEsNiBAQAogCQkJZ290byByZXRyeTsKIAkJfQogCX0KLQlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOwogCiAJcmV0dXJuIHJlYzsKIH0KQEAgLTg0Miw2ICs5NDAsMjMgQEAKIAlzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKIAl2b2lkICpwID0gTlVMTDsKIAorCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKwkvKgorCSAqIEZvciBzZXRfZnRyYWNlX2ZpbHRlciByZWFkaW5nLCBpZiB3ZSBoYXZlIHRoZSBmaWx0ZXIKKwkgKiBvZmYsIHdlIGNhbiBzaG9ydCBjdXQgYW5kIGp1c3QgcHJpbnQgb3V0IHRoYXQgYWxsCisJICogZnVuY3Rpb25zIGFyZSBlbmFibGVkLgorCSAqLworCWlmIChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0ZJTFRFUiAmJiAhZnRyYWNlX2ZpbHRlcmVkKSB7CisJCWlmICgqcG9zID4gMCkKKwkJCXJldHVybiB0X2hhc2hfc3RhcnQobSwgcG9zKTsKKwkJaXRlci0+ZmxhZ3MgfD0gRlRSQUNFX0lURVJfUFJJTlRBTEw7CisJCSgqcG9zKSsrOworCQlyZXR1cm4gaXRlcjsKKwl9CisKKwlpZiAoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9IQVNIKQorCQlyZXR1cm4gdF9oYXNoX3N0YXJ0KG0sIHBvcyk7CisKIAlpZiAoKnBvcyA+IDApIHsKIAkJaWYgKGl0ZXItPmlkeCA8IDApCiAJCQlyZXR1cm4gcDsKQEAgLTg1MSwxOCArOTY2LDMxIEBACiAKIAlwID0gdF9uZXh0KG0sIHAsIHBvcyk7CiAKKwlpZiAoIXApCisJCXJldHVybiB0X2hhc2hfc3RhcnQobSwgcG9zKTsKKwogCXJldHVybiBwOwogfQogCiBzdGF0aWMgdm9pZCB0X3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogeworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJc3RydWN0IGZ0cmFjZV9pdGVyYXRvciAqaXRlciA9IG0tPnByaXZhdGU7CiAJc3RydWN0IGR5bl9mdHJhY2UgKnJlYyA9IHY7CiAJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKIAorCWlmIChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0hBU0gpCisJCXJldHVybiB0X2hhc2hfc2hvdyhtLCB2KTsKKworCWlmIChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX1BSSU5UQUxMKSB7CisJCXNlcV9wcmludGYobSwgIiMjIyMgYWxsIGZ1bmN0aW9ucyBlbmFibGVkICMjIyNcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoIXJlYykKIAkJcmV0dXJuIDA7CiAKQEAgLTk0MSwyMyArMTA2OSwxNiBAQAogCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CiAJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKIAl1bnNpZ25lZCBsb25nIHR5cGUgPSBlbmFibGUgPyBGVFJBQ0VfRkxfRklMVEVSIDogRlRSQUNFX0ZMX05PVFJBQ0U7Ci0JdW5zaWduZWQgaTsKIAotCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KLQlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJaWYgKGVuYWJsZSkKIAkJZnRyYWNlX2ZpbHRlcmVkID0gMDsKLQlwZyA9IGZ0cmFjZV9wYWdlc19zdGFydDsKLQl3aGlsZSAocGcpIHsKLQkJZm9yIChpID0gMDsgaSA8IHBnLT5pbmRleDsgaSsrKSB7Ci0JCQlyZWMgPSAmcGctPnJlY29yZHNbaV07Ci0JCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQpCi0JCQkJY29udGludWU7Ci0JCQlyZWMtPmZsYWdzICY9IH50eXBlOwotCQl9Ci0JCXBnID0gcGctPm5leHQ7Ci0JfQotCXNwaW5fdW5sb2NrKCZmdHJhY2VfbG9jayk7CisJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CisJCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkKKwkJCWNvbnRpbnVlOworCQlyZWMtPmZsYWdzICY9IH50eXBlOworCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMDA4LDE2ICsxMTI5LDYgQEAKIAlyZXR1cm4gZnRyYWNlX3JlZ2V4X29wZW4oaW5vZGUsIGZpbGUsIDApOwogfQogCi1zdGF0aWMgc3NpemVfdAotZnRyYWNlX3JlZ2V4X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1YnVmLAotCQkgICAgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQotewotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQotCQlyZXR1cm4gc2VxX3JlYWQoZmlsZSwgdWJ1ZiwgY250LCBwcG9zKTsKLQllbHNlCi0JCXJldHVybiAtRVBFUk07Ci19Ci0KIHN0YXRpYyBsb2ZmX3QKIGZ0cmFjZV9yZWdleF9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKIHsKQEAgLTEwMzgsODYgKzExNDksNTM2IEBACiAJTUFUQ0hfRU5EX09OTFksCiB9OwogCi1zdGF0aWMgdm9pZAotZnRyYWNlX21hdGNoKHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBsZW4sIGludCBlbmFibGUpCisvKgorICogKHN0YXRpYyBmdW5jdGlvbiAtIG5vIG5lZWQgZm9yIGtlcm5lbCBkb2MpCisgKgorICogUGFzcyBpbiBhIGJ1ZmZlciBjb250YWluaW5nIGEgZ2xvYiBhbmQgdGhpcyBmdW5jdGlvbiB3aWxsCisgKiBzZXQgc2VhcmNoIHRvIHBvaW50IHRvIHRoZSBzZWFyY2ggcGFydCBvZiB0aGUgYnVmZmVyIGFuZAorICogcmV0dXJuIHRoZSB0eXBlIG9mIHNlYXJjaCBpdCBpcyAoc2VlIGVudW0gYWJvdmUpLgorICogVGhpcyBkb2VzIG1vZGlmeSBidWZmLgorICoKKyAqIFJldHVybnMgZW51bSB0eXBlLgorICogIHNlYXJjaCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIHVzZSBmb3IgY29tcGFyaXNvbi4KKyAqICBub3QgcmV0dXJucyAxIGlmIGJ1ZmYgc3RhcnRlZCB3aXRoIGEgJyEnCisgKiAgICAgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQKK2Z0cmFjZV9zZXR1cF9nbG9iKGNoYXIgKmJ1ZmYsIGludCBsZW4sIGNoYXIgKipzZWFyY2gsIGludCAqbm90KQogewotCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07Ci0JY2hhciAqc2VhcmNoID0gTlVMTDsKLQlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOwotCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CiAJaW50IHR5cGUgPSBNQVRDSF9GVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZyA9IGVuYWJsZSA/IEZUUkFDRV9GTF9GSUxURVIgOiBGVFJBQ0VfRkxfTk9UUkFDRTsKLQl1bnNpZ25lZCBpLCBtYXRjaCA9IDAsIHNlYXJjaF9sZW4gPSAwOwotCWludCBub3QgPSAwOworCWludCBpOwogCiAJaWYgKGJ1ZmZbMF0gPT0gJyEnKSB7Ci0JCW5vdCA9IDE7CisJCSpub3QgPSAxOwogCQlidWZmKys7CiAJCWxlbi0tOwotCX0KKwl9IGVsc2UKKwkJKm5vdCA9IDA7CisKKwkqc2VhcmNoID0gYnVmZjsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlpZiAoYnVmZltpXSA9PSAnKicpIHsKIAkJCWlmICghaSkgewotCQkJCXNlYXJjaCA9IGJ1ZmYgKyBpICsgMTsKKwkJCQkqc2VhcmNoID0gYnVmZiArIDE7CiAJCQkJdHlwZSA9IE1BVENIX0VORF9PTkxZOwotCQkJCXNlYXJjaF9sZW4gPSBsZW4gLSAoaSArIDEpOwogCQkJfSBlbHNlIHsKLQkJCQlpZiAodHlwZSA9PSBNQVRDSF9FTkRfT05MWSkgeworCQkJCWlmICh0eXBlID09IE1BVENIX0VORF9PTkxZKQogCQkJCQl0eXBlID0gTUFUQ0hfTUlERExFX09OTFk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbWF0Y2ggPSBpOworCQkJCWVsc2UKIAkJCQkJdHlwZSA9IE1BVENIX0ZST05UX09OTFk7Ci0JCQkJfQogCQkJCWJ1ZmZbaV0gPSAwOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJfQogCi0JLyogc2hvdWxkIG5vdCBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAqLwotCXNwaW5fbG9jaygmZnRyYWNlX2xvY2spOwotCWlmIChlbmFibGUpCi0JCWZ0cmFjZV9maWx0ZXJlZCA9IDE7Ci0JcGcgPSBmdHJhY2VfcGFnZXNfc3RhcnQ7Ci0Jd2hpbGUgKHBnKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBwZy0+aW5kZXg7IGkrKykgewotCQkJaW50IG1hdGNoZWQgPSAwOwotCQkJY2hhciAqcHRyOworCXJldHVybiB0eXBlOworfQogCi0JCQlyZWMgPSAmcGctPnJlY29yZHNbaV07Ci0JCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQpCitzdGF0aWMgaW50IGZ0cmFjZV9tYXRjaChjaGFyICpzdHIsIGNoYXIgKnJlZ2V4LCBpbnQgbGVuLCBpbnQgdHlwZSkKK3sKKwlpbnQgbWF0Y2hlZCA9IDA7CisJY2hhciAqcHRyOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBNQVRDSF9GVUxMOgorCQlpZiAoc3RyY21wKHN0ciwgcmVnZXgpID09IDApCisJCQltYXRjaGVkID0gMTsKKwkJYnJlYWs7CisJY2FzZSBNQVRDSF9GUk9OVF9PTkxZOgorCQlpZiAoc3RybmNtcChzdHIsIHJlZ2V4LCBsZW4pID09IDApCisJCQltYXRjaGVkID0gMTsKKwkJYnJlYWs7CisJY2FzZSBNQVRDSF9NSURETEVfT05MWToKKwkJaWYgKHN0cnN0cihzdHIsIHJlZ2V4KSkKKwkJCW1hdGNoZWQgPSAxOworCQlicmVhazsKKwljYXNlIE1BVENIX0VORF9PTkxZOgorCQlwdHIgPSBzdHJzdHIoc3RyLCByZWdleCk7CisJCWlmIChwdHIgJiYgKHB0cltsZW5dID09IDApKQorCQkJbWF0Y2hlZCA9IDE7CisJCWJyZWFrOworCX0KKworCXJldHVybiBtYXRjaGVkOworfQorCitzdGF0aWMgaW50CitmdHJhY2VfbWF0Y2hfcmVjb3JkKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIGNoYXIgKnJlZ2V4LCBpbnQgbGVuLCBpbnQgdHlwZSkKK3sKKwljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOworCisJa2FsbHN5bXNfbG9va3VwKHJlYy0+aXAsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7CisJcmV0dXJuIGZ0cmFjZV9tYXRjaChzdHIsIHJlZ2V4LCBsZW4sIHR5cGUpOworfQorCitzdGF0aWMgdm9pZCBmdHJhY2VfbWF0Y2hfcmVjb3JkcyhjaGFyICpidWZmLCBpbnQgbGVuLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCBzZWFyY2hfbGVuOworCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CisJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisJY2hhciAqc2VhcmNoOworCWludCB0eXBlOworCWludCBub3Q7CisKKwlmbGFnID0gZW5hYmxlID8gRlRSQUNFX0ZMX0ZJTFRFUiA6IEZUUkFDRV9GTF9OT1RSQUNFOworCXR5cGUgPSBmdHJhY2Vfc2V0dXBfZ2xvYihidWZmLCBsZW4sICZzZWFyY2gsICZub3QpOworCisJc2VhcmNoX2xlbiA9IHN0cmxlbihzZWFyY2gpOworCisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOworCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgeworCisJCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmdHJhY2VfbWF0Y2hfcmVjb3JkKHJlYywgc2VhcmNoLCBzZWFyY2hfbGVuLCB0eXBlKSkgeworCQkJaWYgKG5vdCkKKwkJCQlyZWMtPmZsYWdzICY9IH5mbGFnOworCQkJZWxzZQorCQkJCXJlYy0+ZmxhZ3MgfD0gZmxhZzsKKwkJfQorCQkvKgorCQkgKiBPbmx5IGVuYWJsZSBmaWx0ZXJpbmcgaWYgd2UgaGF2ZSBhIGZ1bmN0aW9uIHRoYXQKKwkJICogaXMgZmlsdGVyZWQgb24uCisJCSAqLworCQlpZiAoZW5hYmxlICYmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZJTFRFUikpCisJCQlmdHJhY2VfZmlsdGVyZWQgPSAxOworCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOworfQorCitzdGF0aWMgaW50CitmdHJhY2VfbWF0Y2hfbW9kdWxlX3JlY29yZChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCBjaGFyICptb2QsCisJCQkgICBjaGFyICpyZWdleCwgaW50IGxlbiwgaW50IHR5cGUpCit7CisJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKKwljaGFyICptb2RuYW1lOworCisJa2FsbHN5bXNfbG9va3VwKHJlYy0+aXAsIE5VTEwsIE5VTEwsICZtb2RuYW1lLCBzdHIpOworCisJaWYgKCFtb2RuYW1lIHx8IHN0cmNtcChtb2RuYW1lLCBtb2QpKQorCQlyZXR1cm4gMDsKKworCS8qIGJsYW5rIHNlYXJjaCBtZWFucyB0byBtYXRjaCBhbGwgZnVuY3MgaW4gdGhlIG1vZCAqLworCWlmIChsZW4pCisJCXJldHVybiBmdHJhY2VfbWF0Y2goc3RyLCByZWdleCwgbGVuLCB0eXBlKTsKKwllbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBmdHJhY2VfbWF0Y2hfbW9kdWxlX3JlY29yZHMoY2hhciAqYnVmZiwgY2hhciAqbW9kLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIHNlYXJjaF9sZW4gPSAwOworCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CisJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKKwlpbnQgdHlwZSA9IE1BVENIX0ZVTEw7CisJY2hhciAqc2VhcmNoID0gYnVmZjsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisJaW50IG5vdCA9IDA7CisKKwlmbGFnID0gZW5hYmxlID8gRlRSQUNFX0ZMX0ZJTFRFUiA6IEZUUkFDRV9GTF9OT1RSQUNFOworCisJLyogYmxhbmsgb3IgJyonIG1lYW4gdGhlIHNhbWUgKi8KKwlpZiAoc3RyY21wKGJ1ZmYsICIqIikgPT0gMCkKKwkJYnVmZlswXSA9IDA7CisKKwkvKiBoYW5kbGUgdGhlIGNhc2Ugb2YgJ2RvbnQgZmlsdGVyIHRoaXMgbW9kdWxlJyAqLworCWlmIChzdHJjbXAoYnVmZiwgIiEiKSA9PSAwIHx8IHN0cmNtcChidWZmLCAiISoiKSA9PSAwKSB7CisJCWJ1ZmZbMF0gPSAwOworCQlub3QgPSAxOworCX0KKworCWlmIChzdHJsZW4oYnVmZikpIHsKKwkJdHlwZSA9IGZ0cmFjZV9zZXR1cF9nbG9iKGJ1ZmYsIHN0cmxlbihidWZmKSwgJnNlYXJjaCwgJm5vdCk7CisJCXNlYXJjaF9sZW4gPSBzdHJsZW4oc2VhcmNoKTsKKwl9CisKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CisKKwkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKQorCQkJY29udGludWU7CisKKwkJaWYgKGZ0cmFjZV9tYXRjaF9tb2R1bGVfcmVjb3JkKHJlYywgbW9kLAorCQkJCQkgICAgICAgc2VhcmNoLCBzZWFyY2hfbGVuLCB0eXBlKSkgeworCQkJaWYgKG5vdCkKKwkJCQlyZWMtPmZsYWdzICY9IH5mbGFnOworCQkJZWxzZQorCQkJCXJlYy0+ZmxhZ3MgfD0gZmxhZzsKKwkJfQorCQlpZiAoZW5hYmxlICYmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZJTFRFUikpCisJCQlmdHJhY2VfZmlsdGVyZWQgPSAxOworCisJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7Cit9CisKKy8qCisgKiBXZSByZWdpc3RlciB0aGUgbW9kdWxlIGNvbW1hbmQgYXMgYSB0ZW1wbGF0ZSB0byBzaG93IG90aGVycyBob3cKKyAqIHRvIHJlZ2lzdGVyIHRoZSBhIGNvbW1hbmQgYXMgd2VsbC4KKyAqLworCitzdGF0aWMgaW50CitmdHJhY2VfbW9kX2NhbGxiYWNrKGNoYXIgKmZ1bmMsIGNoYXIgKmNtZCwgY2hhciAqcGFyYW0sIGludCBlbmFibGUpCit7CisJY2hhciAqbW9kOworCisJLyoKKwkgKiBjbWQgPT0gJ21vZCcgYmVjYXVzZSB3ZSBvbmx5IHJlZ2lzdGVyZWQgdGhpcyBmdW5jCisJICogZm9yIHRoZSAnbW9kJyBmdHJhY2VfZnVuY19jb21tYW5kLgorCSAqIEJ1dCBpZiB5b3UgcmVnaXN0ZXIgb25lIGZ1bmMgd2l0aCBtdWx0aXBsZSBjb21tYW5kcywKKwkgKiB5b3UgY2FuIHRlbGwgd2hpY2ggY29tbWFuZCB3YXMgdXNlZCBieSB0aGUgY21kCisJICogcGFyYW1ldGVyLgorCSAqLworCisJLyogd2UgbXVzdCBoYXZlIGEgbW9kdWxlIG5hbWUgKi8KKwlpZiAoIXBhcmFtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1vZCA9IHN0cnNlcCgmcGFyYW0sICI6Iik7CisJaWYgKCFzdHJsZW4obW9kKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmdHJhY2VfbWF0Y2hfbW9kdWxlX3JlY29yZHMoZnVuYywgbW9kLCBlbmFibGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgZnRyYWNlX21vZF9jbWQgPSB7CisJLm5hbWUJCQk9ICJtb2QiLAorCS5mdW5jCQkJPSBmdHJhY2VfbW9kX2NhbGxiYWNrLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZnRyYWNlX21vZF9jbWRfaW5pdCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9mdHJhY2VfY29tbWFuZCgmZnRyYWNlX21vZF9jbWQpOworfQorZGV2aWNlX2luaXRjYWxsKGZ0cmFjZV9tb2RfY21kX2luaXQpOworCitzdGF0aWMgdm9pZAorZnVuY3Rpb25fdHJhY2VfcHJvYmVfY2FsbCh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfcHJvYmUgKmVudHJ5OworCXN0cnVjdCBobGlzdF9oZWFkICpoaGQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisJdW5zaWduZWQgbG9uZyBrZXk7CisJaW50IHJlc2NoZWQ7CisKKwlrZXkgPSBoYXNoX2xvbmcoaXAsIEZUUkFDRV9IQVNIX0JJVFMpOworCisJaGhkID0gJmZ0cmFjZV9mdW5jX2hhc2hba2V5XTsKKworCWlmIChobGlzdF9lbXB0eShoaGQpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIERpc2FibGUgcHJlZW1wdGlvbiBmb3IgdGhlc2UgY2FsbHMgdG8gcHJldmVudCBhIFJDVSBncmFjZQorCSAqIHBlcmlvZC4gVGhpcyBzeW5jcyB0aGUgaGFzaCBpdGVyYXRpb24gYW5kIGZyZWVpbmcgb2YgaXRlbXMKKwkgKiBvbiB0aGUgaGFzaC4gcmN1X3JlYWRfbG9jayBpcyB0b28gZGFuZ2Vyb3VzIGhlcmUuCisJICovCisJcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksIG4sIGhoZCwgbm9kZSkgeworCQlpZiAoZW50cnktPmlwID09IGlwKQorCQkJZW50cnktPm9wcy0+ZnVuYyhpcCwgcGFyZW50X2lwLCAmZW50cnktPmRhdGEpOworCX0KKwlmdHJhY2VfcHJlZW1wdF9lbmFibGUocmVzY2hlZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyB0cmFjZV9wcm9iZV9vcHMgX19yZWFkX21vc3RseSA9Cit7CisJLmZ1bmMgPSBmdW5jdGlvbl90cmFjZV9wcm9iZV9jYWxsLAorfTsKKworc3RhdGljIGludCBmdHJhY2VfcHJvYmVfcmVnaXN0ZXJlZDsKKworc3RhdGljIHZvaWQgX19lbmFibGVfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAoZnRyYWNlX3Byb2JlX3JlZ2lzdGVyZWQpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfRlVOQ19IQVNIU0laRTsgaSsrKSB7CisJCXN0cnVjdCBobGlzdF9oZWFkICpoaGQgPSAmZnRyYWNlX2Z1bmNfaGFzaFtpXTsKKwkJaWYgKGhoZC0+Zmlyc3QpCisJCQlicmVhazsKKwl9CisJLyogTm90aGluZyByZWdpc3RlcmVkPyAqLworCWlmIChpID09IEZUUkFDRV9GVU5DX0hBU0hTSVpFKQorCQlyZXR1cm47CisKKwlfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2VfcHJvYmVfb3BzKTsKKwlmdHJhY2Vfc3RhcnR1cCgwKTsKKwlmdHJhY2VfcHJvYmVfcmVnaXN0ZXJlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGlzYWJsZV9mdHJhY2VfZnVuY3Rpb25fcHJvYmUodm9pZCkKK3sKKwlpbnQgaTsKKworCWlmICghZnRyYWNlX3Byb2JlX3JlZ2lzdGVyZWQpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBGVFJBQ0VfRlVOQ19IQVNIU0laRTsgaSsrKSB7CisJCXN0cnVjdCBobGlzdF9oZWFkICpoaGQgPSAmZnRyYWNlX2Z1bmNfaGFzaFtpXTsKKwkJaWYgKGhoZC0+Zmlyc3QpCisJCQlyZXR1cm47CisJfQorCisJLyogbm8gbW9yZSBmdW5jcyBsZWZ0ICovCisJX191bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2VfcHJvYmVfb3BzKTsKKwlmdHJhY2Vfc2h1dGRvd24oMCk7CisJZnRyYWNlX3Byb2JlX3JlZ2lzdGVyZWQgPSAwOworfQorCisKK3N0YXRpYyB2b2lkIGZ0cmFjZV9mcmVlX2VudHJ5X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJocCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfcHJvYmUgKmVudHJ5ID0KKwkJY29udGFpbmVyX29mKHJocCwgc3RydWN0IGZ0cmFjZV9mdW5jX3Byb2JlLCByY3UpOworCisJaWYgKGVudHJ5LT5vcHMtPmZyZWUpCisJCWVudHJ5LT5vcHMtPmZyZWUoJmVudHJ5LT5kYXRhKTsKKwlrZnJlZShlbnRyeSk7Cit9CisKKworaW50CityZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoY2hhciAqZ2xvYiwgc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgKm9wcywKKwkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGZ0cmFjZV9mdW5jX3Byb2JlICplbnRyeTsKKwlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOworCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CisJaW50IHR5cGUsIGxlbiwgbm90OworCXVuc2lnbmVkIGxvbmcga2V5OworCWludCBjb3VudCA9IDA7CisJY2hhciAqc2VhcmNoOworCisJdHlwZSA9IGZ0cmFjZV9zZXR1cF9nbG9iKGdsb2IsIHN0cmxlbihnbG9iKSwgJnNlYXJjaCwgJm5vdCk7CisJbGVuID0gc3RybGVuKHNlYXJjaCk7CisKKwkvKiB3ZSBkbyBub3Qgc3VwcG9ydCAnIScgZm9yIGZ1bmN0aW9uIHByb2JlcyAqLworCWlmIChXQVJOX09OKG5vdCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOworCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgeworCisJCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZnRyYWNlX21hdGNoX3JlY29yZChyZWMsIHNlYXJjaCwgbGVuLCB0eXBlKSkKKwkJCWNvbnRpbnVlOworCisJCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZW50cnkpIHsKKwkJCS8qIElmIHdlIGRpZCBub3QgcHJvY2VzcyBhbnksIHRoZW4gcmV0dXJuIGVycm9yICovCisJCQlpZiAoIWNvdW50KQorCQkJCWNvdW50ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCisJCWNvdW50Kys7CisKKwkJZW50cnktPmRhdGEgPSBkYXRhOworCisJCS8qCisJCSAqIFRoZSBjYWxsZXIgbWlnaHQgd2FudCB0byBkbyBzb21ldGhpbmcgc3BlY2lhbAorCQkgKiBmb3IgZWFjaCBmdW5jdGlvbiB3ZSBmaW5kLiBXZSBjYWxsIHRoZSBjYWxsYmFjaworCQkgKiB0byBnaXZlIHRoZSBjYWxsZXIgYW4gb3Bwb3J0dW5pdHkgdG8gZG8gc28uCisJCSAqLworCQlpZiAob3BzLT5jYWxsYmFjaykgeworCQkJaWYgKG9wcy0+Y2FsbGJhY2socmVjLT5pcCwgJmVudHJ5LT5kYXRhKSA8IDApIHsKKwkJCQkvKiBjYWxsZXIgZG9lcyBub3QgbGlrZSB0aGlzIGZ1bmMgKi8KKwkJCQlrZnJlZShlbnRyeSk7CiAJCQkJY29udGludWU7Ci0JCQlrYWxsc3ltc19sb29rdXAocmVjLT5pcCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKLQkJCXN3aXRjaCAodHlwZSkgewotCQkJY2FzZSBNQVRDSF9GVUxMOgotCQkJCWlmIChzdHJjbXAoc3RyLCBidWZmKSA9PSAwKQotCQkJCQltYXRjaGVkID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgTUFUQ0hfRlJPTlRfT05MWToKLQkJCQlpZiAobWVtY21wKHN0ciwgYnVmZiwgbWF0Y2gpID09IDApCi0JCQkJCW1hdGNoZWQgPSAxOwotCQkJCWJyZWFrOwotCQkJY2FzZSBNQVRDSF9NSURETEVfT05MWToKLQkJCQlpZiAoc3Ryc3RyKHN0ciwgc2VhcmNoKSkKLQkJCQkJbWF0Y2hlZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE1BVENIX0VORF9PTkxZOgotCQkJCXB0ciA9IHN0cnN0cihzdHIsIHNlYXJjaCk7Ci0JCQkJaWYgKHB0ciAmJiAocHRyW3NlYXJjaF9sZW5dID09IDApKQotCQkJCQltYXRjaGVkID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChtYXRjaGVkKSB7Ci0JCQkJaWYgKG5vdCkKLQkJCQkJcmVjLT5mbGFncyAmPSB+ZmxhZzsKLQkJCQllbHNlCi0JCQkJCXJlYy0+ZmxhZ3MgfD0gZmxhZzsKIAkJCX0KIAkJfQotCQlwZyA9IHBnLT5uZXh0OworCisJCWVudHJ5LT5vcHMgPSBvcHM7CisJCWVudHJ5LT5pcCA9IHJlYy0+aXA7CisKKwkJa2V5ID0gaGFzaF9sb25nKGVudHJ5LT5pcCwgRlRSQUNFX0hBU0hfQklUUyk7CisJCWhsaXN0X2FkZF9oZWFkX3JjdSgmZW50cnktPm5vZGUsICZmdHJhY2VfZnVuY19oYXNoW2tleV0pOworCisJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7CisJX19lbmFibGVfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKCk7CisKKyBvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitlbnVtIHsKKwlQUk9CRV9URVNUX0ZVTkMJCT0gMSwKKwlQUk9CRV9URVNUX0RBVEEJCT0gMgorfTsKKworc3RhdGljIHZvaWQKK19fdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmUoY2hhciAqZ2xvYiwgc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgKm9wcywKKwkJCQkgIHZvaWQgKmRhdGEsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfcHJvYmUgKmVudHJ5OworCXN0cnVjdCBobGlzdF9ub2RlICpuLCAqdG1wOworCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CisJaW50IHR5cGUgPSBNQVRDSF9GVUxMOworCWludCBpLCBsZW4gPSAwOworCWNoYXIgKnNlYXJjaDsKKworCWlmIChnbG9iICYmIChzdHJjbXAoZ2xvYiwgIioiKSB8fCAhc3RybGVuKGdsb2IpKSkKKwkJZ2xvYiA9IE5VTEw7CisJZWxzZSB7CisJCWludCBub3Q7CisKKwkJdHlwZSA9IGZ0cmFjZV9zZXR1cF9nbG9iKGdsb2IsIHN0cmxlbihnbG9iKSwgJnNlYXJjaCwgJm5vdCk7CisJCWxlbiA9IHN0cmxlbihzZWFyY2gpOworCisJCS8qIHdlIGRvIG5vdCBzdXBwb3J0ICchJyBmb3IgZnVuY3Rpb24gcHJvYmVzICovCisJCWlmIChXQVJOX09OKG5vdCkpCisJCQlyZXR1cm47CiAJfQotCXNwaW5fdW5sb2NrKCZmdHJhY2VfbG9jayk7CisKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IEZUUkFDRV9GVU5DX0hBU0hTSVpFOyBpKyspIHsKKwkJc3RydWN0IGhsaXN0X2hlYWQgKmhoZCA9ICZmdHJhY2VfZnVuY19oYXNoW2ldOworCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG4sIHRtcCwgaGhkLCBub2RlKSB7CisKKwkJCS8qIGJyZWFrIHVwIGlmIHN0YXRlbWVudHMgZm9yIHJlYWRhYmlsaXR5ICovCisJCQlpZiAoKGZsYWdzICYgUFJPQkVfVEVTVF9GVU5DKSAmJiBlbnRyeS0+b3BzICE9IG9wcykKKwkJCQljb250aW51ZTsKKworCQkJaWYgKChmbGFncyAmIFBST0JFX1RFU1RfREFUQSkgJiYgZW50cnktPmRhdGEgIT0gZGF0YSkKKwkJCQljb250aW51ZTsKKworCQkJLyogZG8gdGhpcyBsYXN0LCBzaW5jZSBpdCBpcyB0aGUgbW9zdCBleHBlbnNpdmUgKi8KKwkJCWlmIChnbG9iKSB7CisJCQkJa2FsbHN5bXNfbG9va3VwKGVudHJ5LT5pcCwgTlVMTCwgTlVMTCwKKwkJCQkJCU5VTEwsIHN0cik7CisJCQkJaWYgKCFmdHJhY2VfbWF0Y2goc3RyLCBnbG9iLCBsZW4sIHR5cGUpKQorCQkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaGxpc3RfZGVsKCZlbnRyeS0+bm9kZSk7CisJCQljYWxsX3JjdSgmZW50cnktPnJjdSwgZnRyYWNlX2ZyZWVfZW50cnlfcmN1KTsKKwkJfQorCX0KKwlfX2Rpc2FibGVfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKCk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7Cit9CisKK3ZvaWQKK3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKGNoYXIgKmdsb2IsIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMsCisJCQkJdm9pZCAqZGF0YSkKK3sKKwlfX3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKGdsb2IsIG9wcywgZGF0YSwKKwkJCQkJICBQUk9CRV9URVNUX0ZVTkMgfCBQUk9CRV9URVNUX0RBVEEpOworfQorCit2b2lkCit1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZV9mdW5jKGNoYXIgKmdsb2IsIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHMpCit7CisJX191bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShnbG9iLCBvcHMsIE5VTEwsIFBST0JFX1RFU1RfRlVOQyk7Cit9CisKK3ZvaWQgdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmVfYWxsKGNoYXIgKmdsb2IpCit7CisJX191bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShnbG9iLCBOVUxMLCBOVUxMLCAwKTsKK30KKworc3RhdGljIExJU1RfSEVBRChmdHJhY2VfY29tbWFuZHMpOworc3RhdGljIERFRklORV9NVVRFWChmdHJhY2VfY21kX211dGV4KTsKKworaW50IHJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpjbWQpCit7CisJc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgKnA7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZmdHJhY2VfY21kX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZmdHJhY2VfY29tbWFuZHMsIGxpc3QpIHsKKwkJaWYgKHN0cmNtcChjbWQtPm5hbWUsIHAtPm5hbWUpID09IDApIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCX0KKwlsaXN0X2FkZCgmY21kLT5saXN0LCAmZnRyYWNlX2NvbW1hbmRzKTsKKyBvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZnRyYWNlX2NtZF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdW5yZWdpc3Rlcl9mdHJhY2VfY29tbWFuZChzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCAqY21kKQoreworCXN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kICpwLCAqbjsKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJmZ0cmFjZV9jbWRfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmZnRyYWNlX2NvbW1hbmRzLCBsaXN0KSB7CisJCWlmIChzdHJjbXAoY21kLT5uYW1lLCBwLT5uYW1lKSA9PSAwKSB7CisJCQlyZXQgPSAwOworCQkJbGlzdF9kZWxfaW5pdCgmcC0+bGlzdCk7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwl9Cisgb3V0X3VubG9jazoKKwltdXRleF91bmxvY2soJmZ0cmFjZV9jbWRfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmdHJhY2VfcHJvY2Vzc19yZWdleChjaGFyICpidWZmLCBpbnQgbGVuLCBpbnQgZW5hYmxlKQoreworCWNoYXIgKmZ1bmMsICpjb21tYW5kLCAqbmV4dCA9IGJ1ZmY7CisJc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgKnA7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlmdW5jID0gc3Ryc2VwKCZuZXh0LCAiOiIpOworCisJaWYgKCFuZXh0KSB7CisJCWZ0cmFjZV9tYXRjaF9yZWNvcmRzKGZ1bmMsIGxlbiwgZW5hYmxlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogY29tbWFuZCBmb3VuZCAqLworCisJY29tbWFuZCA9IHN0cnNlcCgmbmV4dCwgIjoiKTsKKworCW11dGV4X2xvY2soJmZ0cmFjZV9jbWRfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmZ0cmFjZV9jb21tYW5kcywgbGlzdCkgeworCQlpZiAoc3RyY21wKHAtPm5hbWUsIGNvbW1hbmQpID09IDApIHsKKwkJCXJldCA9IHAtPmZ1bmMoZnVuYywgY29tbWFuZCwgbmV4dCwgZW5hYmxlKTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCX0KKyBvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZnRyYWNlX2NtZF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3NpemVfdApAQCAtMTE4Nyw3ICsxNzQ4LDEwIEBACiAJaWYgKGlzc3BhY2UoY2gpKSB7CiAJCWl0ZXItPmZpbHRlcmVkKys7CiAJCWl0ZXItPmJ1ZmZlcltpdGVyLT5idWZmZXJfaWR4XSA9IDA7Ci0JCWZ0cmFjZV9tYXRjaChpdGVyLT5idWZmZXIsIGl0ZXItPmJ1ZmZlcl9pZHgsIGVuYWJsZSk7CisJCXJldCA9IGZ0cmFjZV9wcm9jZXNzX3JlZ2V4KGl0ZXItPmJ1ZmZlciwKKwkJCQkJICAgaXRlci0+YnVmZmVyX2lkeCwgZW5hYmxlKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OwogCQlpdGVyLT5idWZmZXJfaWR4ID0gMDsKIAl9IGVsc2UKIAkJaXRlci0+ZmxhZ3MgfD0gRlRSQUNFX0lURVJfQ09OVDsKQEAgLTEyMjYsNyArMTc5MCw3IEBACiAJaWYgKHJlc2V0KQogCQlmdHJhY2VfZmlsdGVyX3Jlc2V0KGVuYWJsZSk7CiAJaWYgKGJ1ZikKLQkJZnRyYWNlX21hdGNoKGJ1ZiwgbGVuLCBlbmFibGUpOworCQlmdHJhY2VfbWF0Y2hfcmVjb3JkcyhidWYsIGxlbiwgZW5hYmxlKTsKIAltdXRleF91bmxvY2soJmZ0cmFjZV9yZWdleF9sb2NrKTsKIH0KIApAQCAtMTI3NiwxNSArMTg0MCwxMyBAQAogCWlmIChpdGVyLT5idWZmZXJfaWR4KSB7CiAJCWl0ZXItPmZpbHRlcmVkKys7CiAJCWl0ZXItPmJ1ZmZlcltpdGVyLT5idWZmZXJfaWR4XSA9IDA7Ci0JCWZ0cmFjZV9tYXRjaChpdGVyLT5idWZmZXIsIGl0ZXItPmJ1ZmZlcl9pZHgsIGVuYWJsZSk7CisJCWZ0cmFjZV9tYXRjaF9yZWNvcmRzKGl0ZXItPmJ1ZmZlciwgaXRlci0+YnVmZmVyX2lkeCwgZW5hYmxlKTsKIAl9CiAKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOwotCW11dGV4X2xvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJaWYgKGZ0cmFjZV9zdGFydF91cCAmJiBmdHJhY2VfZW5hYmxlZCkKIAkJZnRyYWNlX3J1bl91cGRhdGVfY29kZShGVFJBQ0VfRU5BQkxFX0NBTExTKTsKLQltdXRleF91bmxvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKLQltdXRleF91bmxvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAlrZnJlZShpdGVyKTsKIAltdXRleF91bmxvY2soJmZ0cmFjZV9yZWdleF9sb2NrKTsKQEAgLTEzMDMsMzEgKzE4NjUsMzEgQEAKIAlyZXR1cm4gZnRyYWNlX3JlZ2V4X3JlbGVhc2UoaW5vZGUsIGZpbGUsIDApOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfYXZhaWxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9hdmFpbF9mb3BzID0gewogCS5vcGVuID0gZnRyYWNlX2F2YWlsX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gZnRyYWNlX2F2YWlsX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZmFpbHVyZXNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9mYWlsdXJlc19mb3BzID0gewogCS5vcGVuID0gZnRyYWNlX2ZhaWx1cmVzX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gZnRyYWNlX2F2YWlsX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZmlsdGVyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZmlsdGVyX2ZvcHMgPSB7CiAJLm9wZW4gPSBmdHJhY2VfZmlsdGVyX29wZW4sCi0JLnJlYWQgPSBmdHJhY2VfcmVnZXhfcmVhZCwKKwkucmVhZCA9IHNlcV9yZWFkLAogCS53cml0ZSA9IGZ0cmFjZV9maWx0ZXJfd3JpdGUsCiAJLmxsc2VlayA9IGZ0cmFjZV9yZWdleF9sc2VlaywKIAkucmVsZWFzZSA9IGZ0cmFjZV9maWx0ZXJfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9ub3RyYWNlX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2Vfbm90cmFjZV9mb3BzID0gewogCS5vcGVuID0gZnRyYWNlX25vdHJhY2Vfb3BlbiwKLQkucmVhZCA9IGZ0cmFjZV9yZWdleF9yZWFkLAorCS5yZWFkID0gc2VxX3JlYWQsCiAJLndyaXRlID0gZnRyYWNlX25vdHJhY2Vfd3JpdGUsCiAJLmxsc2VlayA9IGZ0cmFjZV9yZWdleF9sc2VlaywKIAkucmVsZWFzZSA9IGZ0cmFjZV9ub3RyYWNlX3JlbGVhc2UsCkBAIC0xMzYwLDYgKzE5MjIsMTAgQEAKIAogCW11dGV4X2xvY2soJmdyYXBoX2xvY2spOwogCisJLyogTm90aGluZywgdGVsbCBnX3Nob3cgdG8gcHJpbnQgYWxsIGZ1bmN0aW9ucyBhcmUgZW5hYmxlZCAqLworCWlmICghZnRyYWNlX2dyYXBoX2NvdW50ICYmICEqcG9zKQorCQlyZXR1cm4gKHZvaWQgKikxOworCiAJcCA9IGdfbmV4dChtLCBwLCBwb3MpOwogCiAJcmV0dXJuIHA7CkBAIC0xMzc4LDYgKzE5NDQsMTEgQEAKIAlpZiAoIXB0cikKIAkJcmV0dXJuIDA7CiAKKwlpZiAocHRyID09ICh1bnNpZ25lZCBsb25nICopMSkgeworCQlzZXFfcHJpbnRmKG0sICIjIyMjIGFsbCBmdW5jdGlvbnMgZW5hYmxlZCAjIyMjXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJa2FsbHN5bXNfbG9va3VwKCpwdHIsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7CiAKIAlzZXFfcHJpbnRmKG0sICIlc1xuIiwgc3RyKTsKQEAgLTE0MjAsNTMgKzE5OTEsNTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdAotZnRyYWNlX2dyYXBoX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1YnVmLAotCQkgICAgICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQotewotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQotCQlyZXR1cm4gc2VxX3JlYWQoZmlsZSwgdWJ1ZiwgY250LCBwcG9zKTsKLQllbHNlCi0JCXJldHVybiAtRVBFUk07Ci19Ci0KIHN0YXRpYyBpbnQKLWZ0cmFjZV9zZXRfZnVuYyh1bnNpZ25lZCBsb25nICphcnJheSwgaW50IGlkeCwgY2hhciAqYnVmZmVyKQorZnRyYWNlX3NldF9mdW5jKHVuc2lnbmVkIGxvbmcgKmFycmF5LCBpbnQgKmlkeCwgY2hhciAqYnVmZmVyKQogewotCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CiAJc3RydWN0IGR5bl9mdHJhY2UgKnJlYzsKIAlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOworCWludCBzZWFyY2hfbGVuOwogCWludCBmb3VuZCA9IDA7Ci0JaW50IGksIGo7CisJaW50IHR5cGUsIG5vdDsKKwljaGFyICpzZWFyY2g7CisJYm9vbCBleGlzdHM7CisJaW50IGk7CiAKIAlpZiAoZnRyYWNlX2Rpc2FibGVkKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgKi8KLQlzcGluX2xvY2soJmZ0cmFjZV9sb2NrKTsKKwkvKiBkZWNvZGUgcmVnZXggKi8KKwl0eXBlID0gZnRyYWNlX3NldHVwX2dsb2IoYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSwgJnNlYXJjaCwgJm5vdCk7CisJaWYgKG5vdCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmb3IgKHBnID0gZnRyYWNlX3BhZ2VzX3N0YXJ0OyBwZzsgcGcgPSBwZy0+bmV4dCkgewotCQlmb3IgKGkgPSAwOyBpIDwgcGctPmluZGV4OyBpKyspIHsKLQkJCXJlYyA9ICZwZy0+cmVjb3Jkc1tpXTsKKwlzZWFyY2hfbGVuID0gc3RybGVuKHNlYXJjaCk7CiAKLQkJCWlmIChyZWMtPmZsYWdzICYgKEZUUkFDRV9GTF9GQUlMRUQgfCBGVFJBQ0VfRkxfRlJFRSkpCi0JCQkJY29udGludWU7CisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOworCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgewogCi0JCQlrYWxsc3ltc19sb29rdXAocmVjLT5pcCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKLQkJCWlmIChzdHJjbXAoc3RyLCBidWZmZXIpID09IDApIHsKKwkJaWYgKCppZHggPj0gRlRSQUNFX0dSQVBIX01BWF9GVU5DUykKKwkJCWJyZWFrOworCisJCWlmIChyZWMtPmZsYWdzICYgKEZUUkFDRV9GTF9GQUlMRUQgfCBGVFJBQ0VfRkxfRlJFRSkpCisJCQljb250aW51ZTsKKworCQlpZiAoZnRyYWNlX21hdGNoX3JlY29yZChyZWMsIHNlYXJjaCwgc2VhcmNoX2xlbiwgdHlwZSkpIHsKKwkJCS8qIGVuc3VyZSBpdCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgYXJyYXkgKi8KKwkJCWV4aXN0cyA9IGZhbHNlOworCQkJZm9yIChpID0gMDsgaSA8ICppZHg7IGkrKykKKwkJCQlpZiAoYXJyYXlbaV0gPT0gcmVjLT5pcCkgeworCQkJCQlleGlzdHMgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQlpZiAoIWV4aXN0cykgeworCQkJCWFycmF5WygqaWR4KSsrXSA9IHJlYy0+aXA7CiAJCQkJZm91bmQgPSAxOwotCQkJCWZvciAoaiA9IDA7IGogPCBpZHg7IGorKykKLQkJCQkJaWYgKGFycmF5W2pdID09IHJlYy0+aXApIHsKLQkJCQkJCWZvdW5kID0gMDsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJaWYgKGZvdW5kKQotCQkJCQlhcnJheVtpZHhdID0gcmVjLT5pcDsKLQkJCQlicmVhazsKIAkJCX0KIAkJfQotCX0KLQlzcGluX3VubG9jaygmZnRyYWNlX2xvY2spOworCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOworCisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAlyZXR1cm4gZm91bmQgPyAwIDogLUVJTlZBTDsKIH0KQEAgLTE1MzQsMTMgKzIxMDUsMTEgQEAKIAl9CiAJYnVmZmVyW2luZGV4XSA9IDA7CiAKLQkvKiB3ZSBhbGxvdyBvbmx5IG9uZSBhdCBhIHRpbWUgKi8KLQlyZXQgPSBmdHJhY2Vfc2V0X2Z1bmMoYXJyYXksIGZ0cmFjZV9ncmFwaF9jb3VudCwgYnVmZmVyKTsKKwkvKiB3ZSBhbGxvdyBvbmx5IG9uZSBleHByZXNzaW9uIGF0IGEgdGltZSAqLworCXJldCA9IGZ0cmFjZV9zZXRfZnVuYyhhcnJheSwgJmZ0cmFjZV9ncmFwaF9jb3VudCwgYnVmZmVyKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCWZ0cmFjZV9ncmFwaF9jb3VudCsrOwotCiAJZmlsZS0+Zl9wb3MgKz0gcmVhZDsKIAogCXJldCA9IHJlYWQ7CkBAIC0xNTUyLDcgKzIxMjEsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZ3JhcGhfZm9wcyA9IHsKIAkub3BlbiA9IGZ0cmFjZV9ncmFwaF9vcGVuLAotCS5yZWFkID0gZnRyYWNlX2dyYXBoX3JlYWQsCisJLnJlYWQgPSBzZXFfcmVhZCwKIAkud3JpdGUgPSBmdHJhY2VfZ3JhcGhfd3JpdGUsCiB9OwogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KQEAgLTE2MDQsNyArMjE3Myw3IEBACiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCXAgPSBzdGFydDsKIAl3aGlsZSAocCA8IGVuZCkgewogCQlhZGRyID0gZnRyYWNlX2NhbGxfYWRqdXN0KCpwKyspOwpAQCAtMTYyMyw3ICsyMTkyLDcgQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZnRyYWNlX3VwZGF0ZV9jb2RlKG1vZCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCW11dGV4X3VubG9jaygmZnRyYWNlX3N0YXJ0X2xvY2spOworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzAwLDcgKzIyNjksNyBAQAogCWlmIChmdHJhY2VfcGlkX3RyYWNlID09IGZ0cmFjZV9zd2FwcGVyX3BpZCkKIAkJciA9IHNwcmludGYoYnVmLCAic3dhcHBlciB0YXNrc1xuIik7CiAJZWxzZSBpZiAoZnRyYWNlX3BpZF90cmFjZSkKLQkJciA9IHNwcmludGYoYnVmLCAiJXVcbiIsIHBpZF9ucihmdHJhY2VfcGlkX3RyYWNlKSk7CisJCXIgPSBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwaWRfdm5yKGZ0cmFjZV9waWRfdHJhY2UpKTsKIAllbHNlCiAJCXIgPSBzcHJpbnRmKGJ1ZiwgIm5vIHBpZFxuIik7CiAKQEAgLTE3OTYsNyArMjM2NSw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3RhcnRfbG9jayk7CisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCWlmICh2YWwgPCAwKSB7CiAJCS8qIGRpc2FibGUgcGlkIHRyYWNpbmcgKi8KIAkJaWYgKCFmdHJhY2VfcGlkX3RyYWNlKQpAQCAtMTgzNSwxMiArMjQwNCwxMiBAQAogCWZ0cmFjZV9zdGFydHVwX2VuYWJsZSgwKTsKIAogIG91dDoKLQltdXRleF91bmxvY2soJmZ0cmFjZV9zdGFydF9sb2NrKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAogCXJldHVybiBjbnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9waWRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9waWRfZm9wcyA9IHsKIAkucmVhZCA9IGZ0cmFjZV9waWRfcmVhZCwKIAkud3JpdGUgPSBmdHJhY2VfcGlkX3dyaXRlLAogfTsKQEAgLTE4NjMsNyArMjQzMiw2IEBACiAJCQkgICAiJ3NldF9mdHJhY2VfcGlkJyBlbnRyeVxuIik7CiAJcmV0dXJuIDA7CiB9Ci0KIGZzX2luaXRjYWxsKGZ0cmFjZV9pbml0X2RlYnVnZnMpOwogCiAvKioKQEAgLTE4OTgsMTcgKzI0NjYsMTcgQEAKIAlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKIAkJcmV0dXJuIC0xOwogCi0JbXV0ZXhfbG9jaygmZnRyYWNlX3N5c2N0bF9sb2NrKTsKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAlyZXQgPSBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihvcHMpOwogCWZ0cmFjZV9zdGFydHVwKDApOwogCi0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKIC8qKgotICogdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24gLSB1bnJlc2dpc3RlciBhIGZ1bmN0aW9uIGZvciBwcm9maWxpbmcuCisgKiB1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbiAtIHVucmVnaXN0ZXIgYSBmdW5jdGlvbiBmb3IgcHJvZmlsaW5nLgogICogQG9wcyAtIG9wcyBzdHJ1Y3R1cmUgdGhhdCBob2xkcyB0aGUgZnVuY3Rpb24gdG8gdW5yZWdpc3RlcgogICoKICAqIFVucmVnaXN0ZXIgYSBmdW5jdGlvbiB0aGF0IHdhcyBhZGRlZCB0byBiZSBjYWxsZWQgYnkgZnRyYWNlIHByb2ZpbGluZy4KQEAgLTE5MTcsMTAgKzI0ODUsMTAgQEAKIHsKIAlpbnQgcmV0OwogCi0JbXV0ZXhfbG9jaygmZnRyYWNlX3N5c2N0bF9sb2NrKTsKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJcmV0ID0gX191bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihvcHMpOwogCWZ0cmFjZV9zaHV0ZG93bigwKTsKLQltdXRleF91bmxvY2soJmZ0cmFjZV9zeXNjdGxfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTkzNSw3ICsyNTAzLDcgQEAKIAlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQltdXRleF9sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKIAogCXJldCAgPSBwcm9jX2RvaW50dmVjKHRhYmxlLCB3cml0ZSwgZmlsZSwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIApAQCAtMTk2NCw3ICsyNTMyLDcgQEAKIAl9CiAKICBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIwMjksNiArMjU5NywzOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkCitmdHJhY2VfZ3JhcGhfcHJvYmVfc2NoZWRfc3dpdGNoKHN0cnVjdCBycSAqX19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LAorCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdGltZXN0YW1wOworCWludCBpbmRleDsKKworCS8qCisJICogRG9lcyB0aGUgdXNlciB3YW50IHRvIGNvdW50IHRoZSB0aW1lIGEgZnVuY3Rpb24gd2FzIGFzbGVlcC4KKwkgKiBJZiBzbywgZG8gbm90IHVwZGF0ZSB0aGUgdGltZSBzdGFtcHMuCisJICovCisJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TTEVFUF9USU1FKQorCQlyZXR1cm47CisKKwl0aW1lc3RhbXAgPSB0cmFjZV9jbG9ja19sb2NhbCgpOworCisJcHJldi0+ZnRyYWNlX3RpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKworCS8qIG9ubHkgcHJvY2VzcyB0YXNrcyB0aGF0IHdlIHRpbWVzdGFtcGVkICovCisJaWYgKCFuZXh0LT5mdHJhY2VfdGltZXN0YW1wKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFVwZGF0ZSBhbGwgdGhlIGNvdW50ZXJzIGluIG5leHQgdG8gbWFrZSB1cCBmb3IgdGhlCisJICogdGltZSBuZXh0IHdhcyBzbGVlcGluZy4KKwkgKi8KKwl0aW1lc3RhbXAgLT0gbmV4dC0+ZnRyYWNlX3RpbWVzdGFtcDsKKworCWZvciAoaW5kZXggPSBuZXh0LT5jdXJyX3JldF9zdGFjazsgaW5kZXggPj0gMDsgaW5kZXgtLSkKKwkJbmV4dC0+cmV0X3N0YWNrW2luZGV4XS5jYWxsdGltZSArPSB0aW1lc3RhbXA7Cit9CisKIC8qIEFsbG9jYXRlIGEgcmV0dXJuIHN0YWNrIGZvciBlYWNoIHRhc2sgKi8KIHN0YXRpYyBpbnQgc3RhcnRfZ3JhcGhfdHJhY2luZyh2b2lkKQogewpAQCAtMjA1MCw2ICsyNjUwLDEzIEBACiAJCXJldCA9IGFsbG9jX3JldHN0YWNrX3Rhc2tsaXN0KHJldF9zdGFja19saXN0KTsKIAl9IHdoaWxlIChyZXQgPT0gLUVBR0FJTik7CiAKKwlpZiAoIXJldCkgeworCQlyZXQgPSByZWdpc3Rlcl90cmFjZV9zY2hlZF9zd2l0Y2goZnRyYWNlX2dyYXBoX3Byb2JlX3NjaGVkX3N3aXRjaCk7CisJCWlmIChyZXQpCisJCQlwcl9pbmZvKCJmdHJhY2VfZ3JhcGg6IENvdWxkbid0IGFjdGl2YXRlIHRyYWNlcG9pbnQiCisJCQkJIiBwcm9iZSB0byBrZXJuZWxfc2NoZWRfc3dpdGNoXG4iKTsKKwl9CisKIAlrZnJlZShyZXRfc3RhY2tfbGlzdCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTIwODAsNyArMjY4NywxMyBAQAogewogCWludCByZXQgPSAwOwogCi0JbXV0ZXhfbG9jaygmZnRyYWNlX3N5c2N0bF9sb2NrKTsKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisKKwkvKiB3ZSBjdXJyZW50bHkgYWxsb3cgb25seSBvbmUgdHJhY2VyIHJlZ2lzdGVyZWQgYXQgYSB0aW1lICovCisJaWYgKGF0b21pY19yZWFkKCZmdHJhY2VfZ3JhcGhfYWN0aXZlKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KIAogCWZ0cmFjZV9zdXNwZW5kX25vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBmdHJhY2Vfc3VzcGVuZF9ub3RpZmllcl9jYWxsOwogCXJlZ2lzdGVyX3BtX25vdGlmaWVyKCZmdHJhY2Vfc3VzcGVuZF9ub3RpZmllcik7CkBAIC0yMDk4LDIxICsyNzExLDI2IEBACiAJZnRyYWNlX3N0YXJ0dXAoRlRSQUNFX1NUQVJUX0ZVTkNfUkVUKTsKIAogb3V0OgotCW11dGV4X3VubG9jaygmZnRyYWNlX3N5c2N0bF9sb2NrKTsKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCiB2b2lkIHVucmVnaXN0ZXJfZnRyYWNlX2dyYXBoKHZvaWQpCiB7Ci0JbXV0ZXhfbG9jaygmZnRyYWNlX3N5c2N0bF9sb2NrKTsKKwltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisKKwlpZiAoIXVubGlrZWx5KGF0b21pY19yZWFkKCZmdHJhY2VfZ3JhcGhfYWN0aXZlKSkpCisJCWdvdG8gb3V0OwogCiAJYXRvbWljX2RlYygmZnRyYWNlX2dyYXBoX2FjdGl2ZSk7CisJdW5yZWdpc3Rlcl90cmFjZV9zY2hlZF9zd2l0Y2goZnRyYWNlX2dyYXBoX3Byb2JlX3NjaGVkX3N3aXRjaCk7CiAJZnRyYWNlX2dyYXBoX3JldHVybiA9ICh0cmFjZV9mdW5jX2dyYXBoX3JldF90KWZ0cmFjZV9zdHViOwogCWZ0cmFjZV9ncmFwaF9lbnRyeSA9IGZ0cmFjZV9ncmFwaF9lbnRyeV9zdHViOwogCWZ0cmFjZV9zaHV0ZG93bihGVFJBQ0VfU1RPUF9GVU5DX1JFVCk7CiAJdW5yZWdpc3Rlcl9wbV9ub3RpZmllcigmZnRyYWNlX3N1c3BlbmRfbm90aWZpZXIpOwogCi0JbXV0ZXhfdW5sb2NrKCZmdHJhY2Vfc3lzY3RsX2xvY2spOworIG91dDoKKwltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIH0KIAogLyogQWxsb2NhdGUgYSByZXR1cm4gc3RhY2sgZm9yIG5ld2x5IGNyZWF0ZWQgdGFzayAqLwpAQCAtMjEyNyw2ICsyNzQ1LDcgQEAKIAkJdC0+Y3Vycl9yZXRfc3RhY2sgPSAtMTsKIAkJYXRvbWljX3NldCgmdC0+dHJhY2luZ19ncmFwaF9wYXVzZSwgMCk7CiAJCWF0b21pY19zZXQoJnQtPnRyYWNlX292ZXJydW4sIDApOworCQl0LT5mdHJhY2VfdGltZXN0YW1wID0gMDsKIAl9IGVsc2UKIAkJdC0+cmV0X3N0YWNrID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9rbWVtdHJhY2UuYyBiL2tlcm5lbC90cmFjZS9rbWVtdHJhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTIwMWIzCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL2ttZW10cmFjZS5jCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogTWVtb3J5IGFsbG9jYXRvciB0cmFjaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEVkdWFyZCAtIEdhYnJpZWwgTXVudGVhbnUKKyAqIENvcHlyaWdodCAoQykgMjAwOCBQZWtrYSBFbmJlcmcgPHBlbmJlcmdAY3MuaGVsc2lua2kuZmk+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPHRyYWNlL2ttZW10cmFjZS5oPgorCisjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKKworLyogU2VsZWN0IGFuIGFsdGVybmF0aXZlLCBtaW5pbWFsaXN0aWMgb3V0cHV0IHRoYW4gdGhlIG9yaWdpbmFsIG9uZSAqLworI2RlZmluZSBUUkFDRV9LTUVNX09QVF9NSU5JTUFMCTB4MQorCitzdGF0aWMgc3RydWN0IHRyYWNlcl9vcHQga21lbV9vcHRzW10gPSB7CisJLyogRGVmYXVsdCBkaXNhYmxlIHRoZSBtaW5pbWFsaXN0aWMgb3V0cHV0ICovCisJeyBUUkFDRVJfT1BUKGttZW1fbWluaW1hbGlzdGljLCBUUkFDRV9LTUVNX09QVF9NSU5JTUFMKSB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZXJfZmxhZ3Mga21lbV90cmFjZXJfZmxhZ3MgPSB7CisJLnZhbCA9IDAsCisJLm9wdHMgPSBrbWVtX29wdHMKK307CisKKworc3RhdGljIGJvb2wga21lbV90cmFjaW5nX2VuYWJsZWQgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkgKmttZW10cmFjZV9hcnJheTsKKworc3RhdGljIGludCBrbWVtX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlpbnQgY3B1OworCWttZW10cmFjZV9hcnJheSA9IHRyOworCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjcHVfcG9zc2libGVfbWFwKQorCQl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOworCisJa21lbV90cmFjaW5nX2VuYWJsZWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGttZW1fdHJhY2VfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlrbWVtX3RyYWNpbmdfZW5hYmxlZCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBrbWVtdHJhY2VfaGVhZGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCit7CisJLyogRG9uJ3QgbmVlZCBoZWFkZXJzIGZvciB0aGUgb3JpZ2luYWwga21lbXRyYWNlIG91dHB1dCAqLworCWlmICghKGttZW1fdHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0tNRU1fT1BUX01JTklNQUwpKQorCQlyZXR1cm47CisKKwlzZXFfcHJpbnRmKHMsICIjXG4iKTsKKwlzZXFfcHJpbnRmKHMsICIjIEFMTE9DICBUWVBFICBSRVEgICBHSVZFTiAgRkxBR1MgICAgICIKKwkJCSIgICAgICBQT0lOVEVSICAgICAgICAgTk9ERSAgICBDQUxMRVJcbiIpOworCXNlcV9wcmludGYocywgIiMgRlJFRSAgIHwgICAgICB8ICAgICB8ICAgICAgIHwgICAgICAgIgorCQkJIiAgICAgICB8ICAgfCAgICAgICAgICAgIHwgICAgICAgIHxcbiIpOworCXNlcV9wcmludGYocywgIiMgfFxuXG4iKTsKK30KKworLyoKKyAqIFRoZSB0d28gZm9sbG93aW5nIGZ1bmN0aW9ucyBnaXZlIHRoZSBvcmlnaW5hbCBvdXRwdXQgZnJvbSBrbWVtdHJhY2UsCisgKiBvciBzb21ldGhpbmcgY2xvc2UgdG8uLi4ucGVyaGFwcyB0aGV5IG5lZWQgc29tZSBtaXNzaW5nIHRoaW5ncworICovCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QKK2ttZW10cmFjZV9wcmludF9hbGxvY19vcmlnaW5hbChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJc3RydWN0IGttZW10cmFjZV9hbGxvY19lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJaW50IHJldDsKKworCS8qIFRha2VuIGZyb20gdGhlIG9sZCBsaW51eC9rbWVtdHJhY2UuaCAqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgInR5cGVfaWQgJWQgY2FsbF9zaXRlICVsdSBwdHIgJWx1ICIKKwkgICJieXRlc19yZXEgJWx1IGJ5dGVzX2FsbG9jICVsdSBnZnBfZmxhZ3MgJWx1IG5vZGUgJWRcbiIsCisJICAgZW50cnktPnR5cGVfaWQsIGVudHJ5LT5jYWxsX3NpdGUsICh1bnNpZ25lZCBsb25nKSBlbnRyeS0+cHRyLAorCSAgICh1bnNpZ25lZCBsb25nKSBlbnRyeS0+Ynl0ZXNfcmVxLCAodW5zaWduZWQgbG9uZykgZW50cnktPmJ5dGVzX2FsbG9jLAorCSAgICh1bnNpZ25lZCBsb25nKSBlbnRyeS0+Z2ZwX2ZsYWdzLCBlbnRyeS0+bm9kZSk7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90CitrbWVtdHJhY2VfcHJpbnRfZnJlZV9vcmlnaW5hbChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlpbnQgcmV0OworCisJLyogVGFrZW4gZnJvbSB0aGUgb2xkIGxpbnV4L2ttZW10cmFjZS5oICovCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAidHlwZV9pZCAlZCBjYWxsX3NpdGUgJWx1IHB0ciAlbHVcbiIsCisJICAgZW50cnktPnR5cGVfaWQsIGVudHJ5LT5jYWxsX3NpdGUsICh1bnNpZ25lZCBsb25nKSBlbnRyeS0+cHRyKTsKKworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCisKKy8qIFRoZSB0d28gb3RoZXIgZm9sbG93aW5nIHByb3ZpZGUgYSBtb3JlIG1pbmltYWxpc3RpYyBvdXRwdXQgKi8KK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdAora21lbXRyYWNlX3ByaW50X2FsbG9jX2NvbXByZXNzKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJc3RydWN0IGttZW10cmFjZV9hbGxvY19lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJaW50IHJldDsKKworCS8qIEFsbG9jIGVudHJ5ICovCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICArICAgICAgIik7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIFR5cGUgKi8KKwlzd2l0Y2ggKGVudHJ5LT50eXBlX2lkKSB7CisJY2FzZSBLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DOgorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJLICAgIik7CisJCWJyZWFrOworCWNhc2UgS01FTVRSQUNFX1RZUEVfQ0FDSEU6CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIkMgICAiKTsKKwkJYnJlYWs7CisJY2FzZSBLTUVNVFJBQ0VfVFlQRV9QQUdFUzoKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiUCAgICIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICI/ICAgIik7CisJfQorCisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIFJlcXVlc3RlZCAqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiU0enUgICAiLCBlbnRyeS0+Ynl0ZXNfcmVxKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogQWxsb2NhdGVkICovCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTR6dSAgICIsIGVudHJ5LT5ieXRlc19hbGxvYyk7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIEZsYWdzCisJICogVE9ETzogd291bGQgYmUgYmV0dGVyIHRvIHNlZSB0aGUgbmFtZSBvZiB0aGUgR0ZQIGZsYWcgbmFtZXMKKwkgKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlMDh4ICAgIiwgZW50cnktPmdmcF9mbGFncyk7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCS8qIFBvaW50ZXIgdG8gYWxsb2NhdGVkICovCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiMHgldHggICAiLCAocHRyZGlmZl90KWVudHJ5LT5wdHIpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBOb2RlICovCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTRkICAgIiwgZW50cnktPm5vZGUpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBDYWxsIHNpdGUgKi8KKwlyZXQgPSBzZXFfcHJpbnRfaXBfc3ltKHMsIGVudHJ5LT5jYWxsX3NpdGUsIDApOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIlxuIikpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdAora21lbXRyYWNlX3ByaW50X2ZyZWVfY29tcHJlc3Moc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCXN0cnVjdCBrbWVtdHJhY2VfZnJlZV9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisJaW50IHJldDsKKworCS8qIEZyZWUgZW50cnkgKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgIC0gICAgICAiKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogVHlwZSAqLworCXN3aXRjaCAoZW50cnktPnR5cGVfaWQpIHsKKwljYXNlIEtNRU1UUkFDRV9UWVBFX0tNQUxMT0M6CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIksgICAgICIpOworCQlicmVhazsKKwljYXNlIEtNRU1UUkFDRV9UWVBFX0NBQ0hFOgorCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJDICAgICAiKTsKKwkJYnJlYWs7CisJY2FzZSBLTUVNVFJBQ0VfVFlQRV9QQUdFUzoKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiUCAgICAgIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIj8gICAgICIpOworCX0KKworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBTa2lwIHJlcXVlc3RlZC9hbGxvY2F0ZWQvZmxhZ3MgKi8KKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICAgICAgICAgICAgICAgICAgICAgICIpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBQb2ludGVyIHRvIGFsbG9jYXRlZCAqLworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIjB4JXR4ICAgIiwgKHB0cmRpZmZfdCllbnRyeS0+cHRyKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogU2tpcCBub2RlICovCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAgICAgICIpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwkvKiBDYWxsIHNpdGUgKi8KKwlyZXQgPSBzZXFfcHJpbnRfaXBfc3ltKHMsIGVudHJ5LT5jYWxsX3NpdGUsIDApOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIlxuIikpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBrbWVtdHJhY2VfcHJpbnRfbGluZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKKworCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKKwljYXNlIFRSQUNFX0tNRU1fQUxMT0M6IHsKKwkJc3RydWN0IGttZW10cmFjZV9hbGxvY19lbnRyeSAqZmllbGQ7CisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisJCWlmIChrbWVtX3RyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9LTUVNX09QVF9NSU5JTUFMKQorCQkJcmV0dXJuIGttZW10cmFjZV9wcmludF9hbGxvY19jb21wcmVzcyhpdGVyLCBmaWVsZCk7CisJCWVsc2UKKwkJCXJldHVybiBrbWVtdHJhY2VfcHJpbnRfYWxsb2Nfb3JpZ2luYWwoaXRlciwgZmllbGQpOworCX0KKworCWNhc2UgVFJBQ0VfS01FTV9GUkVFOiB7CisJCXN0cnVjdCBrbWVtdHJhY2VfZnJlZV9lbnRyeSAqZmllbGQ7CisJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisJCWlmIChrbWVtX3RyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9LTUVNX09QVF9NSU5JTUFMKQorCQkJcmV0dXJuIGttZW10cmFjZV9wcmludF9mcmVlX2NvbXByZXNzKGl0ZXIsIGZpZWxkKTsKKwkJZWxzZQorCQkJcmV0dXJuIGttZW10cmFjZV9wcmludF9mcmVlX29yaWdpbmFsKGl0ZXIsIGZpZWxkKTsKKwl9CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7CisJfQorfQorCisvKiBUcmFjZSBhbGxvY2F0aW9ucyAqLwordm9pZCBrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKGVudW0ga21lbXRyYWNlX3R5cGVfaWQgdHlwZV9pZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCisJCQkgICAgIGNvbnN0IHZvaWQgKnB0ciwKKwkJCSAgICAgc2l6ZV90IGJ5dGVzX3JlcSwKKwkJCSAgICAgc2l6ZV90IGJ5dGVzX2FsbG9jLAorCQkJICAgICBnZnBfdCBnZnBfZmxhZ3MsCisJCQkgICAgIGludCBub2RlKQoreworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGttZW10cmFjZV9hbGxvY19lbnRyeSAqZW50cnk7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGttZW10cmFjZV9hcnJheTsKKworCWlmICgha21lbV90cmFjaW5nX2VuYWJsZWQpCisJCXJldHVybjsKKworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfS01FTV9BTExPQywKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgMCk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisKKwllbnRyeS0+Y2FsbF9zaXRlID0gY2FsbF9zaXRlOworCWVudHJ5LT5wdHIgPSBwdHI7CisJZW50cnktPmJ5dGVzX3JlcSA9IGJ5dGVzX3JlcTsKKwllbnRyeS0+Ynl0ZXNfYWxsb2MgPSBieXRlc19hbGxvYzsKKwllbnRyeS0+Z2ZwX2ZsYWdzID0gZ2ZwX2ZsYWdzOworCWVudHJ5LT5ub2RlCT0Jbm9kZTsKKworCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgMCwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKGttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUpOworCit2b2lkIGttZW10cmFjZV9tYXJrX2ZyZWUoZW51bSBrbWVtdHJhY2VfdHlwZV9pZCB0eXBlX2lkLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBjYWxsX3NpdGUsCisJCSAgICAgICBjb25zdCB2b2lkICpwdHIpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3Qga21lbXRyYWNlX2ZyZWVfZW50cnkgKmVudHJ5OworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBrbWVtdHJhY2VfYXJyYXk7CisKKwlpZiAoIWttZW1fdHJhY2luZ19lbmFibGVkKQorCQlyZXR1cm47CisKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX0tNRU1fRlJFRSwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgMCk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJZW50cnktPnR5cGVfaWQJPSB0eXBlX2lkOworCWVudHJ5LT5jYWxsX3NpdGUgPSBjYWxsX3NpdGU7CisJZW50cnktPnB0ciA9IHB0cjsKKworCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgMCwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKGttZW10cmFjZV9tYXJrX2ZyZWUpOworCitzdGF0aWMgc3RydWN0IHRyYWNlciBrbWVtX3RyYWNlciBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJrbWVtdHJhY2UiLAorCS5pbml0CQk9IGttZW1fdHJhY2VfaW5pdCwKKwkucmVzZXQJCT0ga21lbV90cmFjZV9yZXNldCwKKwkucHJpbnRfbGluZQk9IGttZW10cmFjZV9wcmludF9saW5lLAorCS5wcmludF9oZWFkZXIgPSBrbWVtdHJhY2VfaGVhZGVycywKKwkuZmxhZ3MJCT0gJmttZW1fdHJhY2VyX2ZsYWdzCit9OworCit2b2lkIGttZW10cmFjZV9pbml0KHZvaWQpCit7CisJLyogZWFybGllc3Qgb3Bwb3J0dW5pdHkgdG8gc3RhcnQga21lbSB0cmFjaW5nICovCit9CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfa21lbV90cmFjZXIodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZrbWVtX3RyYWNlcik7Cit9CisKK2RldmljZV9pbml0Y2FsbChpbml0X2ttZW1fdHJhY2VyKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKaW5kZXggYmQzOGM1Yy4uOTYwY2JmNCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKQEAgLTQsMjEgKzQsOTIgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBTdGV2ZW4gUm9zdGVkdCA8c3Jvc3RlZHRAcmVkaGF0LmNvbT4KICAqLwogI2luY2x1ZGUgPGxpbnV4L3JpbmdfYnVmZmVyLmg+CisjaW5jbHVkZSA8bGludXgvdHJhY2VfY2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2VfaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIHVzZWQgZm9yIHNjaGVkX2Nsb2NrKCkgKGZvciBub3cpICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KIAogI2luY2x1ZGUgInRyYWNlLmgiCiAKIC8qCisgKiBUaGUgcmluZyBidWZmZXIgaXMgbWFkZSB1cCBvZiBhIGxpc3Qgb2YgcGFnZXMuIEEgc2VwYXJhdGUgbGlzdCBvZiBwYWdlcyBpcworICogYWxsb2NhdGVkIGZvciBlYWNoIENQVS4gQSB3cml0ZXIgbWF5IG9ubHkgd3JpdGUgdG8gYSBidWZmZXIgdGhhdCBpcworICogYXNzb2NpYXRlZCB3aXRoIHRoZSBDUFUgaXQgaXMgY3VycmVudGx5IGV4ZWN1dGluZyBvbi4gIEEgcmVhZGVyIG1heSByZWFkCisgKiBmcm9tIGFueSBwZXIgY3B1IGJ1ZmZlci4KKyAqCisgKiBUaGUgcmVhZGVyIGlzIHNwZWNpYWwuIEZvciBlYWNoIHBlciBjcHUgYnVmZmVyLCB0aGUgcmVhZGVyIGhhcyBpdHMgb3duCisgKiByZWFkZXIgcGFnZS4gV2hlbiBhIHJlYWRlciBoYXMgcmVhZCB0aGUgZW50aXJlIHJlYWRlciBwYWdlLCB0aGlzIHJlYWRlcgorICogcGFnZSBpcyBzd2FwcGVkIHdpdGggYW5vdGhlciBwYWdlIGluIHRoZSByaW5nIGJ1ZmZlci4KKyAqCisgKiBOb3csIGFzIGxvbmcgYXMgdGhlIHdyaXRlciBpcyBvZmYgdGhlIHJlYWRlciBwYWdlLCB0aGUgcmVhZGVyIGNhbiBkbyB3aGF0CisgKiBldmVyIGl0IHdhbnRzIHdpdGggdGhhdCBwYWdlLiBUaGUgd3JpdGVyIHdpbGwgbmV2ZXIgd3JpdGUgdG8gdGhhdCBwYWdlCisgKiBhZ2FpbiAoYXMgbG9uZyBhcyBpdCBpcyBvdXQgb2YgdGhlIHJpbmcgYnVmZmVyKS4KKyAqCisgKiBIZXJlJ3Mgc29tZSBzaWxseSBBU0NJSSBhcnQuCisgKgorICogICArLS0tLS0tKworICogICB8cmVhZGVyfCAgICAgICAgICBSSU5HIEJVRkZFUgorICogICB8cGFnZSAgfAorICogICArLS0tLS0tKyAgICAgICAgKy0tLSsgICArLS0tKyAgICstLS0rCisgKiAgICAgICAgICAgICAgICAgICB8ICAgfC0tPnwgICB8LS0+fCAgIHwKKyAqICAgICAgICAgICAgICAgICAgICstLS0rICAgKy0tLSsgICArLS0tKworICogICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKworICoKKyAqCisgKiAgICstLS0tLS0rCisgKiAgIHxyZWFkZXJ8ICAgICAgICAgIFJJTkcgQlVGRkVSCisgKiAgIHxwYWdlICB8LS0tLS0tLS0tLS0tLS0tLS0tdgorICogICArLS0tLS0tKyAgICAgICAgKy0tLSsgICArLS0tKyAgICstLS0rCisgKiAgICAgICAgICAgICAgICAgICB8ICAgfC0tPnwgICB8LS0+fCAgIHwKKyAqICAgICAgICAgICAgICAgICAgICstLS0rICAgKy0tLSsgICArLS0tKworICogICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKworICoKKyAqCisgKiAgICstLS0tLS0rCisgKiAgIHxyZWFkZXJ8ICAgICAgICAgIFJJTkcgQlVGRkVSCisgKiAgIHxwYWdlICB8LS0tLS0tLS0tLS0tLS0tLS0tdgorICogICArLS0tLS0tKyAgICAgICAgKy0tLSsgICArLS0tKyAgICstLS0rCisgKiAgICAgIF4gICAgICAgICAgICB8ICAgfC0tPnwgICB8LS0+fCAgIHwKKyAqICAgICAgfCAgICAgICAgICAgICstLS0rICAgKy0tLSsgICArLS0tKworICogICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoKKyAqCisgKiAgICstLS0tLS0rCisgKiAgIHxidWZmZXJ8ICAgICAgICAgIFJJTkcgQlVGRkVSCisgKiAgIHxwYWdlICB8LS0tLS0tLS0tLS0tLS0tLS0tdgorICogICArLS0tLS0tKyAgICAgICAgKy0tLSsgICArLS0tKyAgICstLS0rCisgKiAgICAgIF4gICAgICAgICAgICB8ICAgfCAgIHwgICB8LS0+fCAgIHwKKyAqICAgICAgfCAgIE5ldyAgICAgICstLS0rICAgKy0tLSsgICArLS0tKworICogICAgICB8ICBSZWFkZXItLS0tLS1eICAgICAgICAgICAgICAgfAorICogICAgICB8ICAgcGFnZSAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoKKyAqCisgKiBBZnRlciB3ZSBtYWtlIHRoaXMgc3dhcCwgdGhlIHJlYWRlciBjYW4gaGFuZCB0aGlzIHBhZ2Ugb2ZmIHRvIHRoZSBzcGxpY2UKKyAqIGNvZGUgYW5kIGJlIGRvbmUgd2l0aCBpdC4gSXQgY2FuIGV2ZW4gYWxsb2NhdGUgYSBuZXcgcGFnZSBpZiBpdCBuZWVkcyB0bworICogYW5kIHN3YXAgdGhhdCBpbnRvIHRoZSByaW5nIGJ1ZmZlci4KKyAqCisgKiBXZSB3aWxsIGJlIHVzaW5nIGNtcHhjaGcgc29vbiB0byBtYWtlIGFsbCB0aGlzIGxvY2tsZXNzLgorICoKKyAqLworCisvKgogICogQSBmYXN0IHdheSB0byBlbmFibGUgb3IgZGlzYWJsZSBhbGwgcmluZyBidWZmZXJzIGlzIHRvCiAgKiBjYWxsIHRyYWNpbmdfb24gb3IgdHJhY2luZ19vZmYuIFR1cm5pbmcgb2ZmIHRoZSByaW5nIGJ1ZmZlcnMKICAqIHByZXZlbnRzIGFsbCByaW5nIGJ1ZmZlcnMgZnJvbSBiZWluZyByZWNvcmRlZCB0by4KQEAgLTU3LDcgKzEyOCw5IEBACiAJUkJfQlVGRkVSU19ESVNBQkxFRAk9IDEgPDwgUkJfQlVGRkVSU19ESVNBQkxFRF9CSVQsCiB9OwogCi1zdGF0aWMgbG9uZyByaW5nX2J1ZmZlcl9mbGFncyBfX3JlYWRfbW9zdGx5ID0gUkJfQlVGRkVSU19PTjsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJpbmdfYnVmZmVyX2ZsYWdzIF9fcmVhZF9tb3N0bHkgPSBSQl9CVUZGRVJTX09OOworCisjZGVmaW5lIEJVRl9QQUdFX0hEUl9TSVpFIG9mZnNldG9mKHN0cnVjdCBidWZmZXJfZGF0YV9wYWdlLCBkYXRhKQogCiAvKioKICAqIHRyYWNpbmdfb24gLSBlbmFibGUgYWxsIHRyYWNpbmcgYnVmZmVycwpAQCAtODksNDIgKzE2MiwyNiBAQAogICogdHJhY2luZ19vZmZfcGVybWFuZW50IC0gcGVybWFuZW50bHkgZGlzYWJsZSByaW5nIGJ1ZmZlcnMKICAqCiAgKiBUaGlzIGZ1bmN0aW9uLCBvbmNlIGNhbGxlZCwgd2lsbCBkaXNhYmxlIGFsbCByaW5nIGJ1ZmZlcnMKLSAqIHBlcm1hbmVudHkuCisgKiBwZXJtYW5lbnRseS4KICAqLwogdm9pZCB0cmFjaW5nX29mZl9wZXJtYW5lbnQodm9pZCkKIHsKIAlzZXRfYml0KFJCX0JVRkZFUlNfRElTQUJMRURfQklULCAmcmluZ19idWZmZXJfZmxhZ3MpOwogfQogCisvKioKKyAqIHRyYWNpbmdfaXNfb24gLSBzaG93IHN0YXRlIG9mIHJpbmcgYnVmZmVycyBlbmFibGVkCisgKi8KK2ludCB0cmFjaW5nX2lzX29uKHZvaWQpCit7CisJcmV0dXJuIHJpbmdfYnVmZmVyX2ZsYWdzID09IFJCX0JVRkZFUlNfT047Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cmFjaW5nX2lzX29uKTsKKwogI2luY2x1ZGUgInRyYWNlLmgiCiAKLS8qIFVwIHRoaXMgaWYgeW91IHdhbnQgdG8gdGVzdCB0aGUgVElNRV9FWFRFTlRTIGFuZCBub3JtYWxpemF0aW9uICovCi0jZGVmaW5lIERFQlVHX1NISUZUIDAKLQotLyogRklYTUUhISEgKi8KLXU2NCByaW5nX2J1ZmZlcl90aW1lX3N0YW1wKGludCBjcHUpCi17Ci0JdTY0IHRpbWU7Ci0KLQlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOwotCS8qIHNoaWZ0IHRvIGRlYnVnL3Rlc3Qgbm9ybWFsaXphdGlvbiBhbmQgVElNRV9FWFRFTlRTICovCi0JdGltZSA9IHNjaGVkX2Nsb2NrKCkgPDwgREVCVUdfU0hJRlQ7Ci0JcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZF9ub3RyYWNlKCk7Ci0KLQlyZXR1cm4gdGltZTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3RpbWVfc3RhbXApOwotCi12b2lkIHJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKGludCBjcHUsIHU2NCAqdHMpCi17Ci0JLyogSnVzdCBzdHVwaWQgdGVzdGluZyB0aGUgbm9ybWFsaXplIGZ1bmN0aW9uIGFuZCBkZWx0YXMgKi8KLQkqdHMgPj49IERFQlVHX1NISUZUOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXApOwotCi0jZGVmaW5lIFJCX0VWTlRfSERSX1NJWkUgKHNpemVvZihzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQpKQotI2RlZmluZSBSQl9BTElHTk1FTlRfU0hJRlQJMgotI2RlZmluZSBSQl9BTElHTk1FTlQJCSgxIDw8IFJCX0FMSUdOTUVOVF9TSElGVCkKKyNkZWZpbmUgUkJfRVZOVF9IRFJfU0laRSAob2Zmc2V0b2Yoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50LCBhcnJheSkpCisjZGVmaW5lIFJCX0FMSUdOTUVOVAkJNFUKICNkZWZpbmUgUkJfTUFYX1NNQUxMX0RBVEEJMjgKIAogZW51bSB7CkBAIC0xMzIsMTYgKzE4OSw2NSBAQAogCVJCX0xFTl9USU1FX1NUQU1QID0gMTYsCiB9OwogCi0vKiBpbmxpbmUgZm9yIHJpbmcgYnVmZmVyIGZhc3QgcGF0aHMgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQKLXJiX2V2ZW50X2xlbmd0aChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQorc3RhdGljIGlubGluZSBpbnQgcmJfbnVsbF9ldmVudChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfUEFERElORyAmJiBldmVudC0+dGltZV9kZWx0YSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCByYl9kaXNjYXJkZWRfZXZlbnQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3sKKwlyZXR1cm4gZXZlbnQtPnR5cGUgPT0gUklOR0JVRl9UWVBFX1BBRERJTkcgJiYgZXZlbnQtPnRpbWVfZGVsdGE7Cit9CisKK3N0YXRpYyB2b2lkIHJiX2V2ZW50X3NldF9wYWRkaW5nKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CisJZXZlbnQtPnR5cGUgPSBSSU5HQlVGX1RZUEVfUEFERElORzsKKwlldmVudC0+dGltZV9kZWx0YSA9IDA7Cit9CisKKy8qKgorICogcmluZ19idWZmZXJfZXZlbnRfZGlzY2FyZCAtIGRpc2NhcmQgYW4gZXZlbnQgaW4gdGhlIHJpbmcgYnVmZmVyCisgKiBAYnVmZmVyOiB0aGUgcmluZyBidWZmZXIKKyAqIEBldmVudDogdGhlIGV2ZW50IHRvIGRpc2NhcmQKKyAqCisgKiBTb21ldGltZXMgYSBldmVudCB0aGF0IGlzIGluIHRoZSByaW5nIGJ1ZmZlciBuZWVkcyB0byBiZSBpZ25vcmVkLgorICogVGhpcyBmdW5jdGlvbiBsZXRzIHRoZSB1c2VyIGRpc2NhcmQgYW4gZXZlbnQgaW4gdGhlIHJpbmcgYnVmZmVyCisgKiBhbmQgdGhlbiB0aGF0IGV2ZW50IHdpbGwgbm90IGJlIHJlYWQgbGF0ZXIuCisgKgorICogTm90ZSwgaXQgaXMgdXAgdG8gdGhlIHVzZXIgdG8gYmUgY2FyZWZ1bCB3aXRoIHRoaXMsIGFuZCBwcm90ZWN0CisgKiBhZ2FpbnN0IHJhY2VzLiBJZiB0aGUgdXNlciBkaXNjYXJkcyBhbiBldmVudCB0aGF0IGhhcyBiZWVuIGNvbnN1bWVkCisgKiBpdCBpcyBwb3NzaWJsZSB0aGF0IGl0IGNvdWxkIGNvcnJ1cHQgdGhlIHJpbmcgYnVmZmVyLgorICovCit2b2lkIHJpbmdfYnVmZmVyX2V2ZW50X2Rpc2NhcmQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKK3sKKwlldmVudC0+dHlwZSA9IFJJTkdCVUZfVFlQRV9QQURESU5HOworCS8qIHRpbWUgZGVsdGEgbXVzdCBiZSBub24gemVybyAqLworCWlmICghZXZlbnQtPnRpbWVfZGVsdGEpCisJCWV2ZW50LT50aW1lX2RlbHRhID0gMTsKK30KKworc3RhdGljIHVuc2lnbmVkCityYl9ldmVudF9kYXRhX2xlbmd0aChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQogewogCXVuc2lnbmVkIGxlbmd0aDsKIAorCWlmIChldmVudC0+bGVuKQorCQlsZW5ndGggPSBldmVudC0+bGVuICogUkJfQUxJR05NRU5UOworCWVsc2UKKwkJbGVuZ3RoID0gZXZlbnQtPmFycmF5WzBdOworCXJldHVybiBsZW5ndGggKyBSQl9FVk5UX0hEUl9TSVpFOworfQorCisvKiBpbmxpbmUgZm9yIHJpbmcgYnVmZmVyIGZhc3QgcGF0aHMgKi8KK3N0YXRpYyB1bnNpZ25lZAorcmJfZXZlbnRfbGVuZ3RoKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCit7CiAJc3dpdGNoIChldmVudC0+dHlwZSkgewogCWNhc2UgUklOR0JVRl9UWVBFX1BBRERJTkc6Ci0JCS8qIHVuZGVmaW5lZCAqLwotCQlyZXR1cm4gLTE7CisJCWlmIChyYl9udWxsX2V2ZW50KGV2ZW50KSkKKwkJCS8qIHVuZGVmaW5lZCAqLworCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gcmJfZXZlbnRfZGF0YV9sZW5ndGgoZXZlbnQpOwogCiAJY2FzZSBSSU5HQlVGX1RZUEVfVElNRV9FWFRFTkQ6CiAJCXJldHVybiBSQl9MRU5fVElNRV9FWFRFTkQ7CkBAIC0xNTAsMTEgKzI1Niw3IEBACiAJCXJldHVybiBSQl9MRU5fVElNRV9TVEFNUDsKIAogCWNhc2UgUklOR0JVRl9UWVBFX0RBVEE6Ci0JCWlmIChldmVudC0+bGVuKQotCQkJbGVuZ3RoID0gZXZlbnQtPmxlbiA8PCBSQl9BTElHTk1FTlRfU0hJRlQ7Ci0JCWVsc2UKLQkJCWxlbmd0aCA9IGV2ZW50LT5hcnJheVswXTsKLQkJcmV0dXJuIGxlbmd0aCArIFJCX0VWTlRfSERSX1NJWkU7CisJCXJldHVybiByYl9ldmVudF9kYXRhX2xlbmd0aChldmVudCk7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQpAQCAtMTc5LDcgKzI4MSw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9ldmVudF9sZW5ndGgpOwogCiAvKiBpbmxpbmUgZm9yIHJpbmcgYnVmZmVyIGZhc3QgcGF0aHMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqCitzdGF0aWMgdm9pZCAqCiByYl9ldmVudF9kYXRhKHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQpCiB7CiAJQlVHX09OKGV2ZW50LT50eXBlICE9IFJJTkdCVUZfVFlQRV9EQVRBKTsKQEAgLTIwOSw3ICszMTEsNyBAQAogCiBzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSB7CiAJdTY0CQkgdGltZV9zdGFtcDsJLyogcGFnZSB0aW1lIHN0YW1wICovCi0JbG9jYWxfdAkJIGNvbW1pdDsJLyogd3JpdGUgY29tbWl0ZWQgaW5kZXggKi8KKwlsb2NhbF90CQkgY29tbWl0OwkvKiB3cml0ZSBjb21taXR0ZWQgaW5kZXggKi8KIAl1bnNpZ25lZCBjaGFyCSBkYXRhW107CS8qIGRhdGEgb2YgYnVmZmVyIHBhZ2UgKi8KIH07CiAKQEAgLTIyNSwxNCArMzI3LDI1IEBACiAJbG9jYWxfc2V0KCZicGFnZS0+Y29tbWl0LCAwKTsKIH0KIAorLyoqCisgKiByaW5nX2J1ZmZlcl9wYWdlX2xlbiAtIHRoZSBzaXplIG9mIGRhdGEgb24gdGhlIHBhZ2UuCisgKiBAcGFnZTogVGhlIHBhZ2UgdG8gcmVhZAorICoKKyAqIFJldHVybnMgdGhlIGFtb3VudCBvZiBkYXRhIG9uIHRoZSBwYWdlLCBpbmNsdWRpbmcgYnVmZmVyIHBhZ2UgaGVhZGVyLgorICovCitzaXplX3QgcmluZ19idWZmZXJfcGFnZV9sZW4odm9pZCAqcGFnZSkKK3sKKwlyZXR1cm4gbG9jYWxfcmVhZCgmKChzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSAqKXBhZ2UpLT5jb21taXQpCisJCSsgQlVGX1BBR0VfSERSX1NJWkU7Cit9CisKIC8qCiAgKiBBbHNvIHN0b2xlbiBmcm9tIG1tL3Nsb2IuYy4gVGhhbmtzIHRvIE1hdGhpZXUgRGVzbm95ZXJzIGZvciBwb2ludGluZwogICogdGhpcyBpc3N1ZSBvdXQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2J1ZmZlcl9wYWdlKHN0cnVjdCBidWZmZXJfcGFnZSAqYnBhZ2UpCitzdGF0aWMgdm9pZCBmcmVlX2J1ZmZlcl9wYWdlKHN0cnVjdCBidWZmZXJfcGFnZSAqYnBhZ2UpCiB7Ci0JaWYgKGJwYWdlLT5wYWdlKQotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnBhZ2UtPnBhZ2UpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylicGFnZS0+cGFnZSk7CiAJa2ZyZWUoYnBhZ2UpOwogfQogCkBAIC0yNDYsNyArMzU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBCVUZfUEFHRV9TSVpFIChQQUdFX1NJWkUgLSBvZmZzZXRvZihzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSwgZGF0YSkpCisjZGVmaW5lIEJVRl9QQUdFX1NJWkUgKFBBR0VfU0laRSAtIEJVRl9QQUdFX0hEUl9TSVpFKQogCiAvKgogICogaGVhZF9wYWdlID09IHRhaWxfcGFnZSAmJiBoZWFkID09IHRhaWwgdGhlbiBidWZmZXIgaXMgZW1wdHkuCkBAIC0yNjAsNyArMzczLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlwYWdlczsKIAlzdHJ1Y3QgYnVmZmVyX3BhZ2UJCSpoZWFkX3BhZ2U7CS8qIHJlYWQgZnJvbSBoZWFkICovCiAJc3RydWN0IGJ1ZmZlcl9wYWdlCQkqdGFpbF9wYWdlOwkvKiB3cml0ZSB0byB0YWlsICovCi0Jc3RydWN0IGJ1ZmZlcl9wYWdlCQkqY29tbWl0X3BhZ2U7CS8qIGNvbW1pdGVkIHBhZ2VzICovCisJc3RydWN0IGJ1ZmZlcl9wYWdlCQkqY29tbWl0X3BhZ2U7CS8qIGNvbW1pdHRlZCBwYWdlcyAqLwogCXN0cnVjdCBidWZmZXJfcGFnZQkJKnJlYWRlcl9wYWdlOwogCXVuc2lnbmVkIGxvbmcJCQlvdmVycnVuOwogCXVuc2lnbmVkIGxvbmcJCQllbnRyaWVzOwpAQCAtMjczLDEyICszODYsMTcgQEAKIAl1bnNpZ25lZAkJCXBhZ2VzOwogCXVuc2lnbmVkCQkJZmxhZ3M7CiAJaW50CQkJCWNwdXM7Ci0JY3B1bWFza192YXJfdAkJCWNwdW1hc2s7CiAJYXRvbWljX3QJCQlyZWNvcmRfZGlzYWJsZWQ7CisJY3B1bWFza192YXJfdAkJCWNwdW1hc2s7CiAKIAlzdHJ1Y3QgbXV0ZXgJCQltdXRleDsKIAogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1CSoqYnVmZmVyczsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCXN0cnVjdCBub3RpZmllcl9ibG9jawkJY3B1X25vdGlmeTsKKyNlbmRpZgorCXU2NAkJCQkoKmNsb2NrKSh2b2lkKTsKIH07CiAKIHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyIHsKQEAgLTI5OSwxMSArNDE3LDM1IEBACiAJCV9fX19fcmV0OwkJCQkJXAogCX0pCiAKKy8qIFVwIHRoaXMgaWYgeW91IHdhbnQgdG8gdGVzdCB0aGUgVElNRV9FWFRFTlRTIGFuZCBub3JtYWxpemF0aW9uICovCisjZGVmaW5lIERFQlVHX1NISUZUIDAKKwordTY0IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCit7CisJdTY0IHRpbWU7CisKKwlwcmVlbXB0X2Rpc2FibGVfbm90cmFjZSgpOworCS8qIHNoaWZ0IHRvIGRlYnVnL3Rlc3Qgbm9ybWFsaXphdGlvbiBhbmQgVElNRV9FWFRFTlRTICovCisJdGltZSA9IGJ1ZmZlci0+Y2xvY2soKSA8PCBERUJVR19TSElGVDsKKwlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkX25vdHJhY2UoKTsKKworCXJldHVybiB0aW1lOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfdGltZV9zdGFtcCk7CisKK3ZvaWQgcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCisJCQkJICAgICAgaW50IGNwdSwgdTY0ICp0cykKK3sKKwkvKiBKdXN0IHN0dXBpZCB0ZXN0aW5nIHRoZSBub3JtYWxpemUgZnVuY3Rpb24gYW5kIGRlbHRhcyAqLworCSp0cyA+Pj0gREVCVUdfU0hJRlQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9ub3JtYWxpemVfdGltZV9zdGFtcCk7CisKIC8qKgogICogY2hlY2tfcGFnZXMgLSBpbnRlZ3JpdHkgY2hlY2sgb2YgYnVmZmVyIHBhZ2VzCiAgKiBAY3B1X2J1ZmZlcjogQ1BVIGJ1ZmZlciB3aXRoIHBhZ2VzIHRvIHRlc3QKICAqCi0gKiBBcyBhIHNhZnR5IG1lYXN1cmUgd2UgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBkYXRhIHBhZ2VzIGhhdmUgbm90CisgKiBBcyBhIHNhZmV0eSBtZWFzdXJlIHdlIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YSBwYWdlcyBoYXZlIG5vdAogICogYmVlbiBjb3JydXB0ZWQuCiAgKi8KIHN0YXRpYyBpbnQgcmJfY2hlY2tfcGFnZXMoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIpCkBAIC00MjEsNyArNTYzLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmNwdV9idWZmZXItPnBhZ2VzOwogCXN0cnVjdCBidWZmZXJfcGFnZSAqYnBhZ2UsICp0bXA7CiAKLQlsaXN0X2RlbF9pbml0KCZjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+bGlzdCk7CiAJZnJlZV9idWZmZXJfcGFnZShjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnBhZ2UsIHRtcCwgaGVhZCwgbGlzdCkgewpAQCAtNDM3LDYgKzU3OCwxMSBAQAogICovCiBleHRlcm4gaW50IHJpbmdfYnVmZmVyX3BhZ2VfdG9vX2JpZyh2b2lkKTsKIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIGludCByYl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCSB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSk7CisjZW5kaWYKKwogLyoqCiAgKiByaW5nX2J1ZmZlcl9hbGxvYyAtIGFsbG9jYXRlIGEgbmV3IHJpbmdfYnVmZmVyCiAgKiBAc2l6ZTogdGhlIHNpemUgaW4gYnl0ZXMgcGVyIGNwdSB0aGF0IGlzIG5lZWRlZC4KQEAgLTQ2OSwxMiArNjE1LDIzIEBACiAKIAlidWZmZXItPnBhZ2VzID0gRElWX1JPVU5EX1VQKHNpemUsIEJVRl9QQUdFX1NJWkUpOwogCWJ1ZmZlci0+ZmxhZ3MgPSBmbGFnczsKKwlidWZmZXItPmNsb2NrID0gdHJhY2VfY2xvY2tfbG9jYWw7CiAKIAkvKiBuZWVkIGF0IGxlYXN0IHR3byBwYWdlcyAqLwogCWlmIChidWZmZXItPnBhZ2VzID09IDEpCiAJCWJ1ZmZlci0+cGFnZXMrKzsKIAorCS8qCisJICogSW4gY2FzZSBvZiBub24taG90cGx1ZyBjcHUsIGlmIHRoZSByaW5nLWJ1ZmZlciBpcyBhbGxvY2F0ZWQKKwkgKiBpbiBlYXJseSBpbml0Y2FsbCwgaXQgd2lsbCBub3QgYmUgbm90aWZpZWQgb2Ygc2Vjb25kYXJ5IGNwdXMuCisJICogSW4gdGhhdCBvZmYgY2FzZSwgd2UgbmVlZCB0byBhbGxvY2F0ZSBmb3IgYWxsIHBvc3NpYmxlIGNwdXMuCisJICovCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCisJZ2V0X29ubGluZV9jcHVzKCk7CisJY3B1bWFza19jb3B5KGJ1ZmZlci0+Y3B1bWFzaywgY3B1X29ubGluZV9tYXNrKTsKKyNlbHNlCiAJY3B1bWFza19jb3B5KGJ1ZmZlci0+Y3B1bWFzaywgY3B1X3Bvc3NpYmxlX21hc2spOworI2VuZGlmCiAJYnVmZmVyLT5jcHVzID0gbnJfY3B1X2lkczsKIAogCWJzaXplID0gc2l6ZW9mKHZvaWQgKikgKiBucl9jcHVfaWRzOwpAQCAtNDkwLDYgKzY0NywxMyBAQAogCQkJZ290byBmYWlsX2ZyZWVfYnVmZmVyczsKIAl9CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwlidWZmZXItPmNwdV9ub3RpZnkubm90aWZpZXJfY2FsbCA9IHJiX2NwdV9ub3RpZnk7CisJYnVmZmVyLT5jcHVfbm90aWZ5LnByaW9yaXR5ID0gMDsKKwlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmJ1ZmZlci0+Y3B1X25vdGlmeSk7CisjZW5kaWYKKworCXB1dF9vbmxpbmVfY3B1cygpOwogCW11dGV4X2luaXQoJmJ1ZmZlci0+bXV0ZXgpOwogCiAJcmV0dXJuIGJ1ZmZlcjsKQEAgLTUwMyw2ICs2NjcsNyBAQAogCiAgZmFpbF9mcmVlX2NwdW1hc2s6CiAJZnJlZV9jcHVtYXNrX3ZhcihidWZmZXItPmNwdW1hc2spOworCXB1dF9vbmxpbmVfY3B1cygpOwogCiAgZmFpbF9mcmVlX2J1ZmZlcjoKIAlrZnJlZShidWZmZXIpOwpAQCAtNTE5LDE1ICs2ODQsMjkgQEAKIHsKIAlpbnQgY3B1OwogCisJZ2V0X29ubGluZV9jcHVzKCk7CisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKKwl1bnJlZ2lzdGVyX2NwdV9ub3RpZmllcigmYnVmZmVyLT5jcHVfbm90aWZ5KTsKKyNlbmRpZgorCiAJZm9yX2VhY2hfYnVmZmVyX2NwdShidWZmZXIsIGNwdSkKIAkJcmJfZnJlZV9jcHVfYnVmZmVyKGJ1ZmZlci0+YnVmZmVyc1tjcHVdKTsKIAorCXB1dF9vbmxpbmVfY3B1cygpOworCiAJZnJlZV9jcHVtYXNrX3ZhcihidWZmZXItPmNwdW1hc2spOwogCiAJa2ZyZWUoYnVmZmVyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2ZyZWUpOwogCit2b2lkIHJpbmdfYnVmZmVyX3NldF9jbG9jayhzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwKKwkJCSAgIHU2NCAoKmNsb2NrKSh2b2lkKSkKK3sKKwlidWZmZXItPmNsb2NrID0gY2xvY2s7Cit9CisKIHN0YXRpYyB2b2lkIHJiX3Jlc2V0X2NwdShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcik7CiAKIHN0YXRpYyB2b2lkCkBAIC02MjcsMTYgKzgwNiwxNSBAQAogCQlyZXR1cm4gc2l6ZTsKIAogCW11dGV4X2xvY2soJmJ1ZmZlci0+bXV0ZXgpOworCWdldF9vbmxpbmVfY3B1cygpOwogCiAJbnJfcGFnZXMgPSBESVZfUk9VTkRfVVAoc2l6ZSwgQlVGX1BBR0VfU0laRSk7CiAKIAlpZiAoc2l6ZSA8IGJ1ZmZlcl9zaXplKSB7CiAKIAkJLyogZWFzeSBjYXNlLCBqdXN0IGZyZWUgcGFnZXMgKi8KLQkJaWYgKFJCX1dBUk5fT04oYnVmZmVyLCBucl9wYWdlcyA+PSBidWZmZXItPnBhZ2VzKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZidWZmZXItPm11dGV4KTsKLQkJCXJldHVybiAtMTsKLQkJfQorCQlpZiAoUkJfV0FSTl9PTihidWZmZXIsIG5yX3BhZ2VzID49IGJ1ZmZlci0+cGFnZXMpKQorCQkJZ290byBvdXRfZmFpbDsKIAogCQlybV9wYWdlcyA9IGJ1ZmZlci0+cGFnZXMgLSBucl9wYWdlczsKIApAQCAtNjU1LDEwICs4MzMsOCBAQAogCSAqIGFkZCB0aGVzZSBwYWdlcyB0byB0aGUgY3B1X2J1ZmZlcnMuIE90aGVyd2lzZSB3ZSBqdXN0IGZyZWUKIAkgKiB0aGVtIGFsbCBhbmQgcmV0dXJuIC1FTk9NRU07CiAJICovCi0JaWYgKFJCX1dBUk5fT04oYnVmZmVyLCBucl9wYWdlcyA8PSBidWZmZXItPnBhZ2VzKSkgewotCQltdXRleF91bmxvY2soJmJ1ZmZlci0+bXV0ZXgpOwotCQlyZXR1cm4gLTE7Ci0JfQorCWlmIChSQl9XQVJOX09OKGJ1ZmZlciwgbnJfcGFnZXMgPD0gYnVmZmVyLT5wYWdlcykpCisJCWdvdG8gb3V0X2ZhaWw7CiAKIAluZXdfcGFnZXMgPSBucl9wYWdlcyAtIGJ1ZmZlci0+cGFnZXM7CiAKQEAgLTY4MywxMyArODU5LDEyIEBACiAJCXJiX2luc2VydF9wYWdlcyhjcHVfYnVmZmVyLCAmcGFnZXMsIG5ld19wYWdlcyk7CiAJfQogCi0JaWYgKFJCX1dBUk5fT04oYnVmZmVyLCAhbGlzdF9lbXB0eSgmcGFnZXMpKSkgewotCQltdXRleF91bmxvY2soJmJ1ZmZlci0+bXV0ZXgpOwotCQlyZXR1cm4gLTE7Ci0JfQorCWlmIChSQl9XQVJOX09OKGJ1ZmZlciwgIWxpc3RfZW1wdHkoJnBhZ2VzKSkpCisJCWdvdG8gb3V0X2ZhaWw7CiAKICBvdXQ6CiAJYnVmZmVyLT5wYWdlcyA9IG5yX3BhZ2VzOworCXB1dF9vbmxpbmVfY3B1cygpOwogCW11dGV4X3VubG9jaygmYnVmZmVyLT5tdXRleCk7CiAKIAlyZXR1cm4gc2l6ZTsKQEAgLTY5OSwxNiArODc0LDIxIEBACiAJCWxpc3RfZGVsX2luaXQoJmJwYWdlLT5saXN0KTsKIAkJZnJlZV9idWZmZXJfcGFnZShicGFnZSk7CiAJfQorCXB1dF9vbmxpbmVfY3B1cygpOwogCW11dGV4X3VubG9jaygmYnVmZmVyLT5tdXRleCk7CiAJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIFNvbWV0aGluZyB3ZW50IHRvdGFsbHkgd3JvbmcsIGFuZCB3ZSBhcmUgdG9vIHBhcmFub2lkCisJICogdG8gZXZlbiBjbGVhbiB1cCB0aGUgbWVzcy4KKwkgKi8KKyBvdXRfZmFpbDoKKwlwdXRfb25saW5lX2NwdXMoKTsKKwltdXRleF91bmxvY2soJmJ1ZmZlci0+bXV0ZXgpOworCXJldHVybiAtMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3Jlc2l6ZSk7CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJiX251bGxfZXZlbnQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCkKLXsKLQlyZXR1cm4gZXZlbnQtPnR5cGUgPT0gUklOR0JVRl9UWVBFX1BBRERJTkc7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCAqCiBfX3JiX2RhdGFfcGFnZV9pbmRleChzdHJ1Y3QgYnVmZmVyX2RhdGFfcGFnZSAqYnBhZ2UsIHVuc2lnbmVkIGluZGV4KQogewpAQCAtODExLDcgKzk5MSw3IEBACiAJcmV0dXJuIChhZGRyICYgflBBR0VfTUFTSykgLSAoUEFHRV9TSVpFIC0gQlVGX1BBR0VfU0laRSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiByYl9pc19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCiAJICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQogewpAQCAtODI1LDcgKzEwMDUsNyBAQAogCQlyYl9jb21taXRfaW5kZXgoY3B1X2J1ZmZlcikgPT0gaW5kZXg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIHJiX3NldF9jb21taXRfZXZlbnQoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsCiAJCSAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQogewpAQCAtODUwLDcgKzEwMzAsNyBAQAogCWxvY2FsX3NldCgmY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UtPnBhZ2UtPmNvbW1pdCwgaW5kZXgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyB2b2lkCiByYl9zZXRfY29tbWl0X3RvX3dyaXRlKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyKQogewogCS8qCkBAIC04OTYsNyArMTA3Niw3IEBACiAJY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnJlYWQgPSAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmJfaW5jX2l0ZXIoc3RydWN0IHJpbmdfYnVmZmVyX2l0ZXIgKml0ZXIpCitzdGF0aWMgdm9pZCByYl9pbmNfaXRlcihzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqaXRlcikKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciA9IGl0ZXItPmNwdV9idWZmZXI7CiAKQEAgLTkyNiw3ICsxMTA2LDcgQEAKICAqIGFuZCB3aXRoIHRoaXMsIHdlIGNhbiBkZXRlcm1pbmUgd2hhdCB0byBwbGFjZSBpbnRvIHRoZQogICogZGF0YSBmaWVsZC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogcmJfdXBkYXRlX2V2ZW50KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCiAJCQkgdW5zaWduZWQgdHlwZSwgdW5zaWduZWQgbGVuZ3RoKQogewpAQCAtOTM4LDE1ICsxMTE4LDExIEBACiAJCWJyZWFrOwogCiAJY2FzZSBSSU5HQlVGX1RZUEVfVElNRV9FWFRFTkQ6Ci0JCWV2ZW50LT5sZW4gPQotCQkJKFJCX0xFTl9USU1FX0VYVEVORCArIChSQl9BTElHTk1FTlQtMSkpCi0JCQk+PiBSQl9BTElHTk1FTlRfU0hJRlQ7CisJCWV2ZW50LT5sZW4gPSBESVZfUk9VTkRfVVAoUkJfTEVOX1RJTUVfRVhURU5ELCBSQl9BTElHTk1FTlQpOwogCQlicmVhazsKIAogCWNhc2UgUklOR0JVRl9UWVBFX1RJTUVfU1RBTVA6Ci0JCWV2ZW50LT5sZW4gPQotCQkJKFJCX0xFTl9USU1FX1NUQU1QICsgKFJCX0FMSUdOTUVOVC0xKSkKLQkJCT4+IFJCX0FMSUdOTUVOVF9TSElGVDsKKwkJZXZlbnQtPmxlbiA9IERJVl9ST1VORF9VUChSQl9MRU5fVElNRV9TVEFNUCwgUkJfQUxJR05NRU5UKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJJTkdCVUZfVFlQRV9EQVRBOgpAQCAtOTU1LDE2ICsxMTMxLDE0IEBACiAJCQlldmVudC0+bGVuID0gMDsKIAkJCWV2ZW50LT5hcnJheVswXSA9IGxlbmd0aDsKIAkJfSBlbHNlCi0JCQlldmVudC0+bGVuID0KLQkJCQkobGVuZ3RoICsgKFJCX0FMSUdOTUVOVC0xKSkKLQkJCQk+PiBSQl9BTElHTk1FTlRfU0hJRlQ7CisJCQlldmVudC0+bGVuID0gRElWX1JPVU5EX1VQKGxlbmd0aCwgUkJfQUxJR05NRU5UKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJiX2NhbGN1bGF0ZV9ldmVudF9sZW5ndGgodW5zaWduZWQgbGVuZ3RoKQorc3RhdGljIHVuc2lnbmVkIHJiX2NhbGN1bGF0ZV9ldmVudF9sZW5ndGgodW5zaWduZWQgbGVuZ3RoKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCBldmVudDsgLyogVXNlZCBvbmx5IGZvciBzaXplb2YgYXJyYXkgKi8KIApAQCAtOTkwLDYgKzExNjQsNyBAQAogCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyID0gY3B1X2J1ZmZlci0+YnVmZmVyOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIGxvY2tfdGFrZW4gPSBmYWxzZTsKIAogCWNvbW1pdF9wYWdlID0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2U7CiAJLyogd2UganVzdCBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBpbnRlcnJ1cHRzICovCkBAIC0xMDAzLDcgKzExNzgsMzAgQEAKIAkJc3RydWN0IGJ1ZmZlcl9wYWdlICpuZXh0X3BhZ2UgPSB0YWlsX3BhZ2U7CiAKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlfX3Jhd19zcGluX2xvY2soJmNwdV9idWZmZXItPmxvY2spOworCQkvKgorCQkgKiBTaW5jZSB0aGUgd3JpdGUgdG8gdGhlIGJ1ZmZlciBpcyBzdGlsbCBub3QKKwkJICogZnVsbHkgbG9ja2xlc3MsIHdlIG11c3QgYmUgY2FyZWZ1bCB3aXRoIE5NSXMuCisJCSAqIFRoZSBsb2NrcyBpbiB0aGUgd3JpdGVycyBhcmUgdGFrZW4gd2hlbiBhIHdyaXRlCisJCSAqIGNyb3NzZXMgdG8gYSBuZXcgcGFnZS4gVGhlIGxvY2tzIHByb3RlY3QgYWdhaW5zdAorCQkgKiByYWNlcyB3aXRoIHRoZSByZWFkZXJzICh0aGlzIHdpbGwgc29vbiBiZSBmaXhlZAorCQkgKiB3aXRoIGEgbG9ja2xlc3Mgc29sdXRpb24pLgorCQkgKgorCQkgKiBCZWNhdXNlIHdlIGNhbiBub3QgcHJvdGVjdCBhZ2FpbnN0IE5NSXMsIGFuZCB3ZQorCQkgKiB3YW50IHRvIGtlZXAgdHJhY2VzIHJlZW50cmFudCwgd2UgbmVlZCB0byBtYW5hZ2UKKwkJICogd2hhdCBoYXBwZW5zIHdoZW4gd2UgYXJlIGluIGFuIE5NSS4KKwkJICoKKwkJICogTk1JcyBjYW4gaGFwcGVuIGFmdGVyIHdlIHRha2UgdGhlIGxvY2suCisJCSAqIElmIHdlIGFyZSBpbiBhbiBOTUksIG9ubHkgdGFrZSB0aGUgbG9jaworCQkgKiBpZiBpdCBpcyBub3QgYWxyZWFkeSB0YWtlbi4gT3RoZXJ3aXNlCisJCSAqIHNpbXBseSBmYWlsLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KGluX25taSgpKSkgeworCQkJaWYgKCFfX3Jhd19zcGluX3RyeWxvY2soJmNwdV9idWZmZXItPmxvY2spKQorCQkJCWdvdG8gb3V0X3Jlc2V0OworCQl9IGVsc2UKKwkJCV9fcmF3X3NwaW5fbG9jaygmY3B1X2J1ZmZlci0+bG9jayk7CisKKwkJbG9ja190YWtlbiA9IHRydWU7CiAKIAkJcmJfaW5jX3BhZ2UoY3B1X2J1ZmZlciwgJm5leHRfcGFnZSk7CiAKQEAgLTEwMTIsNyArMTIxMCw3IEBACiAKIAkJLyogd2UgZ3JhYmJlZCB0aGUgbG9jayBiZWZvcmUgaW5jcmVtZW50aW5nICovCiAJCWlmIChSQl9XQVJOX09OKGNwdV9idWZmZXIsIG5leHRfcGFnZSA9PSByZWFkZXJfcGFnZSkpCi0JCQlnb3RvIG91dF91bmxvY2s7CisJCQlnb3RvIG91dF9yZXNldDsKIAogCQkvKgogCQkgKiBJZiBmb3Igc29tZSByZWFzb24sIHdlIGhhZCBhbiBpbnRlcnJ1cHQgc3Rvcm0gdGhhdCBtYWRlCkBAIC0xMDIxLDEyICsxMjE5LDEyIEBACiAJCSAqLwogCQlpZiAodW5saWtlbHkobmV4dF9wYWdlID09IGNvbW1pdF9wYWdlKSkgewogCQkJV0FSTl9PTl9PTkNFKDEpOwotCQkJZ290byBvdXRfdW5sb2NrOworCQkJZ290byBvdXRfcmVzZXQ7CiAJCX0KIAogCQlpZiAobmV4dF9wYWdlID09IGhlYWRfcGFnZSkgewogCQkJaWYgKCEoYnVmZmVyLT5mbGFncyAmIFJCX0ZMX09WRVJXUklURSkpCi0JCQkJZ290byBvdXRfdW5sb2NrOworCQkJCWdvdG8gb3V0X3Jlc2V0OwogCiAJCQkvKiB0YWlsX3BhZ2UgaGFzIG5vdCBtb3ZlZCB5ZXQ/ICovCiAJCQlpZiAodGFpbF9wYWdlID09IGNwdV9idWZmZXItPnRhaWxfcGFnZSkgewpAQCAtMTA1MCw3ICsxMjQ4LDcgQEAKIAkJCWNwdV9idWZmZXItPnRhaWxfcGFnZSA9IG5leHRfcGFnZTsKIAogCQkJLyogcmVyZWFkIHRoZSB0aW1lIHN0YW1wICovCi0JCQkqdHMgPSByaW5nX2J1ZmZlcl90aW1lX3N0YW1wKGNwdV9idWZmZXItPmNwdSk7CisJCQkqdHMgPSByaW5nX2J1ZmZlcl90aW1lX3N0YW1wKGJ1ZmZlciwgY3B1X2J1ZmZlci0+Y3B1KTsKIAkJCWNwdV9idWZmZXItPnRhaWxfcGFnZS0+cGFnZS0+dGltZV9zdGFtcCA9ICp0czsKIAkJfQogCkBAIC0xMDYwLDcgKzEyNTgsNyBAQAogCQlpZiAodGFpbCA8IEJVRl9QQUdFX1NJWkUpIHsKIAkJCS8qIE1hcmsgdGhlIHJlc3Qgb2YgdGhlIHBhZ2Ugd2l0aCBwYWRkaW5nICovCiAJCQlldmVudCA9IF9fcmJfcGFnZV9pbmRleCh0YWlsX3BhZ2UsIHRhaWwpOwotCQkJZXZlbnQtPnR5cGUgPSBSSU5HQlVGX1RZUEVfUEFERElORzsKKwkJCXJiX2V2ZW50X3NldF9wYWRkaW5nKGV2ZW50KTsKIAkJfQogCiAJCWlmICh0YWlsIDw9IEJVRl9QQUdFX1NJWkUpCkBAIC0xMTAwLDEyICsxMjk4LDEzIEBACiAKIAlyZXR1cm4gZXZlbnQ7CiAKLSBvdXRfdW5sb2NrOgorIG91dF9yZXNldDoKIAkvKiByZXNldCB3cml0ZSAqLwogCWlmICh0YWlsIDw9IEJVRl9QQUdFX1NJWkUpCiAJCWxvY2FsX3NldCgmdGFpbF9wYWdlLT53cml0ZSwgdGFpbCk7CiAKLQlfX3Jhd19zcGluX3VubG9jaygmY3B1X2J1ZmZlci0+bG9jayk7CisJaWYgKGxpa2VseShsb2NrX3Rha2VuKSkKKwkJX19yYXdfc3Bpbl91bmxvY2soJmNwdV9idWZmZXItPmxvY2spOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTExOTIsNyArMTM5MSw3IEBACiAJaWYgKFJCX1dBUk5fT04oY3B1X2J1ZmZlciwgKytucl9sb29wcyA+IDEwMDApKQogCQlyZXR1cm4gTlVMTDsKIAotCXRzID0gcmluZ19idWZmZXJfdGltZV9zdGFtcChjcHVfYnVmZmVyLT5jcHUpOworCXRzID0gcmluZ19idWZmZXJfdGltZV9zdGFtcChjcHVfYnVmZmVyLT5idWZmZXIsIGNwdV9idWZmZXItPmNwdSk7CiAKIAkvKgogCSAqIE9ubHkgdGhlIGZpcnN0IGNvbW1pdCBjYW4gdXBkYXRlIHRoZSB0aW1lc3RhbXAuCkBAIC0xMjY1LDcgKzE0NjQsNiBAQAogICogcmluZ19idWZmZXJfbG9ja19yZXNlcnZlIC0gcmVzZXJ2ZSBhIHBhcnQgb2YgdGhlIGJ1ZmZlcgogICogQGJ1ZmZlcjogdGhlIHJpbmcgYnVmZmVyIHRvIHJlc2VydmUgZnJvbQogICogQGxlbmd0aDogdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byByZXNlcnZlIChleGNsdWRpbmcgZXZlbnQgaGVhZGVyKQotICogQGZsYWdzOiBhIHBvaW50ZXIgdG8gc2F2ZSB0aGUgaW50ZXJydXB0IGZsYWdzCiAgKgogICogUmV0dXJucyBhIHJlc2V2ZXJkIGV2ZW50IG9uIHRoZSByaW5nIGJ1ZmZlciB0byBjb3B5IGRpcmVjdGx5IHRvLgogICogVGhlIHVzZXIgb2YgdGhpcyBpbnRlcmZhY2Ugd2lsbCBuZWVkIHRvIGdldCB0aGUgYm9keSB0byB3cml0ZSBpbnRvCkBAIC0xMjc4LDkgKzE0NzYsNyBAQAogICogSWYgTlVMTCBpcyByZXR1cm5lZCwgdGhlbiBub3RoaW5nIGhhcyBiZWVuIGFsbG9jYXRlZCBvciBsb2NrZWQuCiAgKi8KIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCi1yaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsCi0JCQkgdW5zaWduZWQgbG9uZyBsZW5ndGgsCi0JCQkgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCityaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CkBAIC0xMzQ3LDE1ICsxNTQzLDEzIEBACiAgKiByaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0IC0gY29tbWl0IGEgcmVzZXJ2ZWQKICAqIEBidWZmZXI6IFRoZSBidWZmZXIgdG8gY29tbWl0IHRvCiAgKiBAZXZlbnQ6IFRoZSBldmVudCBwb2ludGVyIHRvIGNvbW1pdC4KLSAqIEBmbGFnczogdGhlIGludGVycnVwdCBmbGFncyByZWNlaXZlZCBmcm9tIHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZS4KICAqCiAgKiBUaGlzIGNvbW1pdHMgdGhlIGRhdGEgdG8gdGhlIHJpbmcgYnVmZmVyLCBhbmQgcmVsZWFzZXMgYW55IGxvY2tzIGhlbGQuCiAgKgogICogTXVzdCBiZSBwYWlyZWQgd2l0aCByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUuCiAgKi8KIGludCByaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAotCQkJICAgICAgc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJCQkgICAgICBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50KQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOwogCWludCBjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtMTQzOCw3ICsxNjMyLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3dyaXRlKTsKIAotc3RhdGljIGlubGluZSBpbnQgcmJfcGVyX2NwdV9lbXB0eShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKK3N0YXRpYyBpbnQgcmJfcGVyX2NwdV9lbXB0eShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKIHsKIAlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnJlYWRlciA9IGNwdV9idWZmZXItPnJlYWRlcl9wYWdlOwogCXN0cnVjdCBidWZmZXJfcGFnZSAqaGVhZCA9IGNwdV9idWZmZXItPmhlYWRfcGFnZTsKQEAgLTE1MjgsMTIgKzE3MjIsMTUgQEAKIHVuc2lnbmVkIGxvbmcgcmluZ19idWZmZXJfZW50cmllc19jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJdW5zaWduZWQgbG9uZyByZXQ7CiAKIAlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItPmNwdW1hc2spKQogCQlyZXR1cm4gMDsKIAogCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKLQlyZXR1cm4gY3B1X2J1ZmZlci0+ZW50cmllczsKKwlyZXQgPSBjcHVfYnVmZmVyLT5lbnRyaWVzOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX2VudHJpZXNfY3B1KTsKIApAQCAtMTU0NSwxMiArMTc0MiwxNSBAQAogdW5zaWduZWQgbG9uZyByaW5nX2J1ZmZlcl9vdmVycnVuX2NwdShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHJldDsKIAogCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCiAJCXJldHVybiAwOwogCiAJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwotCXJldHVybiBjcHVfYnVmZmVyLT5vdmVycnVuOworCXJldCA9IGNwdV9idWZmZXItPm92ZXJydW47CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfb3ZlcnJ1bl9jcHUpOwogCkBAIC0xNjI3LDkgKzE4MjcsMTQgQEAKICAqLwogdm9pZCByaW5nX2J1ZmZlcl9pdGVyX3Jlc2V0KHN0cnVjdCByaW5nX2J1ZmZlcl9pdGVyICppdGVyKQogewotCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyID0gaXRlci0+Y3B1X2J1ZmZlcjsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKCFpdGVyKQorCQlyZXR1cm47CisKKwljcHVfYnVmZmVyID0gaXRlci0+Y3B1X2J1ZmZlcjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwogCXJiX2l0ZXJfcmVzZXQoaXRlcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKQEAgLTE4MDMsNyArMjAwOCw3IEBACiAKIAlldmVudCA9IHJiX3JlYWRlcl9ldmVudChjcHVfYnVmZmVyKTsKIAotCWlmIChldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfREFUQSkKKwlpZiAoZXZlbnQtPnR5cGUgPT0gUklOR0JVRl9UWVBFX0RBVEEgfHwgcmJfZGlzY2FyZGVkX2V2ZW50KGV2ZW50KSkKIAkJY3B1X2J1ZmZlci0+ZW50cmllcy0tOwogCiAJcmJfdXBkYXRlX3JlYWRfc3RhbXAoY3B1X2J1ZmZlciwgZXZlbnQpOwpAQCAtMTg2NCw5ICsyMDY5LDYgQEAKIAlzdHJ1Y3QgYnVmZmVyX3BhZ2UgKnJlYWRlcjsKIAlpbnQgbnJfbG9vcHMgPSAwOwogCi0JaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKLQkJcmV0dXJuIE5VTEw7Ci0KIAljcHVfYnVmZmVyID0gYnVmZmVyLT5idWZmZXJzW2NwdV07CiAKICBhZ2FpbjoKQEAgLTE4ODksOSArMjA5MSwxOCBAQAogCiAJc3dpdGNoIChldmVudC0+dHlwZSkgewogCWNhc2UgUklOR0JVRl9UWVBFX1BBRERJTkc6Ci0JCVJCX1dBUk5fT04oY3B1X2J1ZmZlciwgMSk7CisJCWlmIChyYl9udWxsX2V2ZW50KGV2ZW50KSkKKwkJCVJCX1dBUk5fT04oY3B1X2J1ZmZlciwgMSk7CisJCS8qCisJCSAqIEJlY2F1c2UgdGhlIHdyaXRlciBjb3VsZCBiZSBkaXNjYXJkaW5nIGV2ZXJ5CisJCSAqIGV2ZW50IGl0IGNyZWF0ZXMgKHdoaWNoIHdvdWxkIHByb2JhYmx5IGJlIGJhZCkKKwkJICogaWYgd2Ugd2VyZSB0byBnbyBiYWNrIHRvICJhZ2FpbiIgdGhlbiB3ZSBtYXkgbmV2ZXIKKwkJICogY2F0Y2ggdXAsIGFuZCB3aWxsIHRyaWdnZXIgdGhlIHdhcm4gb24sIG9yIGxvY2sKKwkJICogdGhlIGJveC4gUmV0dXJuIHRoZSBwYWRkaW5nLCBhbmQgd2Ugd2lsbCByZWxlYXNlCisJCSAqIHRoZSBjdXJyZW50IGxvY2tzLCBhbmQgdHJ5IGFnYWluLgorCQkgKi8KIAkJcmJfYWR2YW5jZV9yZWFkZXIoY3B1X2J1ZmZlcik7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gZXZlbnQ7CiAKIAljYXNlIFJJTkdCVUZfVFlQRV9USU1FX0VYVEVORDoKIAkJLyogSW50ZXJuYWwgZGF0YSwgT0sgdG8gYWR2YW5jZSAqLwpAQCAtMTkwNiw3ICsyMTE3LDggQEAKIAljYXNlIFJJTkdCVUZfVFlQRV9EQVRBOgogCQlpZiAodHMpIHsKIAkJCSp0cyA9IGNwdV9idWZmZXItPnJlYWRfc3RhbXAgKyBldmVudC0+dGltZV9kZWx0YTsKLQkJCXJpbmdfYnVmZmVyX25vcm1hbGl6ZV90aW1lX3N0YW1wKGNwdV9idWZmZXItPmNwdSwgdHMpOworCQkJcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoYnVmZmVyLAorCQkJCQkJCSBjcHVfYnVmZmVyLT5jcHUsIHRzKTsKIAkJfQogCQlyZXR1cm4gZXZlbnQ7CiAKQEAgLTE5NTEsOCArMjE2MywxMiBAQAogCiAJc3dpdGNoIChldmVudC0+dHlwZSkgewogCWNhc2UgUklOR0JVRl9UWVBFX1BBRERJTkc6Ci0JCXJiX2luY19pdGVyKGl0ZXIpOwotCQlnb3RvIGFnYWluOworCQlpZiAocmJfbnVsbF9ldmVudChldmVudCkpIHsKKwkJCXJiX2luY19pdGVyKGl0ZXIpOworCQkJZ290byBhZ2FpbjsKKwkJfQorCQlyYl9hZHZhbmNlX2l0ZXIoaXRlcik7CisJCXJldHVybiBldmVudDsKIAogCWNhc2UgUklOR0JVRl9UWVBFX1RJTUVfRVhURU5EOgogCQkvKiBJbnRlcm5hbCBkYXRhLCBPSyB0byBhZHZhbmNlICovCkBAIC0xOTY3LDcgKzIxODMsOCBAQAogCWNhc2UgUklOR0JVRl9UWVBFX0RBVEE6CiAJCWlmICh0cykgewogCQkJKnRzID0gaXRlci0+cmVhZF9zdGFtcCArIGV2ZW50LT50aW1lX2RlbHRhOwotCQkJcmluZ19idWZmZXJfbm9ybWFsaXplX3RpbWVfc3RhbXAoY3B1X2J1ZmZlci0+Y3B1LCB0cyk7CisJCQlyaW5nX2J1ZmZlcl9ub3JtYWxpemVfdGltZV9zdGFtcChidWZmZXIsCisJCQkJCQkJIGNwdV9idWZmZXItPmNwdSwgdHMpOwogCQl9CiAJCXJldHVybiBldmVudDsKIApAQCAtMTk5NSwxMCArMjIxMiwxOSBAQAogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCXJldHVybiBOVUxMOworCisgYWdhaW46CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAJZXZlbnQgPSByYl9idWZmZXJfcGVlayhidWZmZXIsIGNwdSwgdHMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAKKwlpZiAoZXZlbnQgJiYgZXZlbnQtPnR5cGUgPT0gUklOR0JVRl9UWVBFX1BBRERJTkcpIHsKKwkJY3B1X3JlbGF4KCk7CisJCWdvdG8gYWdhaW47CisJfQorCiAJcmV0dXJuIGV2ZW50OwogfQogCkBAIC0yMDE3LDEwICsyMjQzLDE2IEBACiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisgYWdhaW46CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAJZXZlbnQgPSByYl9pdGVyX3BlZWsoaXRlciwgdHMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAKKwlpZiAoZXZlbnQgJiYgZXZlbnQtPnR5cGUgPT0gUklOR0JVRl9UWVBFX1BBRERJTkcpIHsKKwkJY3B1X3JlbGF4KCk7CisJCWdvdG8gYWdhaW47CisJfQorCiAJcmV0dXJuIGV2ZW50OwogfQogCkBAIC0yMDM1LDI0ICsyMjY3LDM3IEBACiBzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKgogcmluZ19idWZmZXJfY29uc3VtZShzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciwgaW50IGNwdSwgdTY0ICp0cykKIHsKLQlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXI7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCi0JCXJldHVybiBOVUxMOworIGFnYWluOgorCS8qIG1pZ2h0IGJlIGNhbGxlZCBpbiBhdG9taWMgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAorCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCisJCWdvdG8gb3V0OworCisJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwogCiAJZXZlbnQgPSByYl9idWZmZXJfcGVlayhidWZmZXIsIGNwdSwgdHMpOwogCWlmICghZXZlbnQpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF91bmxvY2s7CiAKIAlyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTsKIAotIG91dDoKKyBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAKKyBvdXQ6CisJcHJlZW1wdF9lbmFibGUoKTsKKworCWlmIChldmVudCAmJiBldmVudC0+dHlwZSA9PSBSSU5HQlVGX1RZUEVfUEFERElORykgeworCQljcHVfcmVsYXgoKTsKKwkJZ290byBhZ2FpbjsKKwl9CisKIAlyZXR1cm4gZXZlbnQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9jb25zdW1lKTsKQEAgLTIxMzEsNiArMjM3Niw3IEBACiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIgPSBpdGVyLT5jcHVfYnVmZmVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKyBhZ2FpbjoKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAlldmVudCA9IHJiX2l0ZXJfcGVlayhpdGVyLCB0cyk7CiAJaWYgKCFldmVudCkKQEAgLTIxNDAsNiArMjM4NiwxMSBAQAogIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVfYnVmZmVyLT5yZWFkZXJfbG9jaywgZmxhZ3MpOwogCisJaWYgKGV2ZW50ICYmIGV2ZW50LT50eXBlID09IFJJTkdCVUZfVFlQRV9QQURESU5HKSB7CisJCWNwdV9yZWxheCgpOworCQlnb3RvIGFnYWluOworCX0KKwogCXJldHVybiBldmVudDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJpbmdfYnVmZmVyX3JlYWQpOwpAQCAtMjIzMiw2ICsyNDgzLDcgQEAKIAkJaWYgKCFyYl9wZXJfY3B1X2VtcHR5KGNwdV9idWZmZXIpKQogCQkJcmV0dXJuIDA7CiAJfQorCiAJcmV0dXJuIDE7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9lbXB0eSk7CkBAIC0yMjQ0LDEyICsyNDk2LDE2IEBACiBpbnQgcmluZ19idWZmZXJfZW1wdHlfY3B1KHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1KQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyOworCWludCByZXQ7CiAKIAlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBidWZmZXItPmNwdW1hc2spKQogCQlyZXR1cm4gMTsKIAogCWNwdV9idWZmZXIgPSBidWZmZXItPmJ1ZmZlcnNbY3B1XTsKLQlyZXR1cm4gcmJfcGVyX2NwdV9lbXB0eShjcHVfYnVmZmVyKTsKKwlyZXQgPSByYl9wZXJfY3B1X2VtcHR5KGNwdV9idWZmZXIpOworCisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmluZ19idWZmZXJfZW1wdHlfY3B1KTsKIApAQCAtMjI2OCwxOCArMjUyNCwzNiBAQAogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyX2E7CiAJc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXJfYjsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGJ1ZmZlcl9hLT5jcHVtYXNrKSB8fAogCSAgICAhY3B1bWFza190ZXN0X2NwdShjcHUsIGJ1ZmZlcl9iLT5jcHVtYXNrKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OwogCiAJLyogQXQgbGVhc3QgbWFrZSBzdXJlIHRoZSB0d28gYnVmZmVycyBhcmUgc29tZXdoYXQgdGhlIHNhbWUgKi8KIAlpZiAoYnVmZmVyX2EtPnBhZ2VzICE9IGJ1ZmZlcl9iLT5wYWdlcykKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWdvdG8gb3V0OworCisJcmV0ID0gLUVBR0FJTjsKKworCWlmIChyaW5nX2J1ZmZlcl9mbGFncyAhPSBSQl9CVUZGRVJTX09OKQorCQlnb3RvIG91dDsKKworCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyX2EtPnJlY29yZF9kaXNhYmxlZCkpCisJCWdvdG8gb3V0OworCisJaWYgKGF0b21pY19yZWFkKCZidWZmZXJfYi0+cmVjb3JkX2Rpc2FibGVkKSkKKwkJZ290byBvdXQ7CiAKIAljcHVfYnVmZmVyX2EgPSBidWZmZXJfYS0+YnVmZmVyc1tjcHVdOwogCWNwdV9idWZmZXJfYiA9IGJ1ZmZlcl9iLT5idWZmZXJzW2NwdV07CiAKKwlpZiAoYXRvbWljX3JlYWQoJmNwdV9idWZmZXJfYS0+cmVjb3JkX2Rpc2FibGVkKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoYXRvbWljX3JlYWQoJmNwdV9idWZmZXJfYi0+cmVjb3JkX2Rpc2FibGVkKSkKKwkJZ290byBvdXQ7CisKIAkvKgogCSAqIFdlIGNhbid0IGRvIGEgc3luY2hyb25pemVfc2NoZWQgaGVyZSBiZWNhdXNlIHRoaXMKIAkgKiBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGluIGF0b21pYyBjb250ZXh0LgpAQCAtMjI5OCwxOCArMjU3MiwyMSBAQAogCWF0b21pY19kZWMoJmNwdV9idWZmZXJfYS0+cmVjb3JkX2Rpc2FibGVkKTsKIAlhdG9taWNfZGVjKCZjcHVfYnVmZmVyX2ItPnJlY29yZF9kaXNhYmxlZCk7CiAKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaW5nX2J1ZmZlcl9zd2FwX2NwdSk7CiAKIHN0YXRpYyB2b2lkIHJiX3JlbW92ZV9lbnRyaWVzKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLAotCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmJwYWdlKQorCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmJwYWdlLAorCQkJICAgICAgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXVuc2lnbmVkIGxvbmcgaGVhZDsKIAogCV9fcmF3X3NwaW5fbG9jaygmY3B1X2J1ZmZlci0+bG9jayk7Ci0JZm9yIChoZWFkID0gMDsgaGVhZCA8IGxvY2FsX3JlYWQoJmJwYWdlLT5jb21taXQpOworCWZvciAoaGVhZCA9IG9mZnNldDsgaGVhZCA8IGxvY2FsX3JlYWQoJmJwYWdlLT5jb21taXQpOwogCSAgICAgaGVhZCArPSByYl9ldmVudF9sZW5ndGgoZXZlbnQpKSB7CiAKIAkJZXZlbnQgPSBfX3JiX2RhdGFfcGFnZV9pbmRleChicGFnZSwgaGVhZCk7CkBAIC0yMzQwLDggKzI2MTcsOCBAQAogICovCiB2b2lkICpyaW5nX2J1ZmZlcl9hbGxvY19yZWFkX3BhZ2Uoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwogCXN0cnVjdCBidWZmZXJfZGF0YV9wYWdlICpicGFnZTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CiAKIAlhZGRyID0gX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghYWRkcikKQEAgLTIzNDksNiArMjYyNiw4IEBACiAKIAlicGFnZSA9ICh2b2lkICopYWRkcjsKIAorCXJiX2luaXRfcGFnZShicGFnZSk7CisKIAlyZXR1cm4gYnBhZ2U7CiB9CiAKQEAgLTIzNjgsNiArMjY0Nyw3IEBACiAgKiByaW5nX2J1ZmZlcl9yZWFkX3BhZ2UgLSBleHRyYWN0IGEgcGFnZSBmcm9tIHRoZSByaW5nIGJ1ZmZlcgogICogQGJ1ZmZlcjogYnVmZmVyIHRvIGV4dHJhY3QgZnJvbQogICogQGRhdGFfcGFnZTogdGhlIHBhZ2UgdG8gdXNlIGFsbG9jYXRlZCBmcm9tIHJpbmdfYnVmZmVyX2FsbG9jX3JlYWRfcGFnZQorICogQGxlbjogYW1vdW50IHRvIGV4dHJhY3QKICAqIEBjcHU6IHRoZSBjcHUgb2YgdGhlIGJ1ZmZlciB0byBleHRyYWN0CiAgKiBAZnVsbDogc2hvdWxkIHRoZSBleHRyYWN0aW9uIG9ubHkgaGFwcGVuIHdoZW4gdGhlIHBhZ2UgaXMgZnVsbC4KICAqCkBAIC0yMzc3LDEyICsyNjU3LDEyIEBACiAgKiB0byBzd2FwIHdpdGggYSBwYWdlIGluIHRoZSByaW5nIGJ1ZmZlci4KICAqCiAgKiBmb3IgZXhhbXBsZToKLSAqCXJwYWdlID0gcmluZ19idWZmZXJfYWxsb2NfcGFnZShidWZmZXIpOworICoJcnBhZ2UgPSByaW5nX2J1ZmZlcl9hbGxvY19yZWFkX3BhZ2UoYnVmZmVyKTsKICAqCWlmICghcnBhZ2UpCiAgKgkJcmV0dXJuIGVycm9yOwotICoJcmV0ID0gcmluZ19idWZmZXJfcmVhZF9wYWdlKGJ1ZmZlciwgJnJwYWdlLCBjcHUsIDApOwotICoJaWYgKHJldCkKLSAqCQlwcm9jZXNzX3BhZ2UocnBhZ2UpOworICoJcmV0ID0gcmluZ19idWZmZXJfcmVhZF9wYWdlKGJ1ZmZlciwgJnJwYWdlLCBsZW4sIGNwdSwgMCk7CisgKglpZiAocmV0ID49IDApCisgKgkJcHJvY2Vzc19wYWdlKHJwYWdlLCByZXQpOwogICoKICAqIFdoZW4gQGZ1bGwgaXMgc2V0LCB0aGUgZnVuY3Rpb24gd2lsbCBub3QgcmV0dXJuIHRydWUgdW5sZXNzCiAgKiB0aGUgd3JpdGVyIGlzIG9mZiB0aGUgcmVhZGVyIHBhZ2UuCkBAIC0yMzkzLDcyICsyNjczLDExOCBAQAogICogIHJlc3BvbnNpYmxlIGZvciB0aGF0LgogICoKICAqIFJldHVybnM6Ci0gKiAgMSBpZiBkYXRhIGhhcyBiZWVuIHRyYW5zZmVycmVkCi0gKiAgMCBpZiBubyBkYXRhIGhhcyBiZWVuIHRyYW5zZmVycmVkLgorICogID49MCBpZiBkYXRhIGhhcyBiZWVuIHRyYW5zZmVycmVkLCByZXR1cm5zIHRoZSBvZmZzZXQgb2YgY29uc3VtZWQgZGF0YS4KKyAqICA8MCBpZiBubyBkYXRhIGhhcyBiZWVuIHRyYW5zZmVycmVkLgogICovCiBpbnQgcmluZ19idWZmZXJfcmVhZF9wYWdlKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLAotCQkJICAgIHZvaWQgKipkYXRhX3BhZ2UsIGludCBjcHUsIGludCBmdWxsKQorCQkJICB2b2lkICoqZGF0YV9wYWdlLCBzaXplX3QgbGVuLCBpbnQgY3B1LCBpbnQgZnVsbCkKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKmJwYWdlOworCXN0cnVjdCBidWZmZXJfcGFnZSAqcmVhZGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IGNvbW1pdDsKKwl1bnNpZ25lZCBpbnQgcmVhZDsKKwl1NjQgc2F2ZV90aW1lc3RhbXA7CisJaW50IHJldCA9IC0xOworCisJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgYnVmZmVyLT5jcHVtYXNrKSkKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIElmIGxlbiBpcyBub3QgYmlnIGVub3VnaCB0byBob2xkIHRoZSBwYWdlIGhlYWRlciwgdGhlbgorCSAqIHdlIGNhbiBub3QgY29weSBhbnl0aGluZy4KKwkgKi8KKwlpZiAobGVuIDw9IEJVRl9QQUdFX0hEUl9TSVpFKQorCQlnb3RvIG91dDsKKworCWxlbiAtPSBCVUZfUEFHRV9IRFJfU0laRTsKIAogCWlmICghZGF0YV9wYWdlKQotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQ7CiAKIAlicGFnZSA9ICpkYXRhX3BhZ2U7CiAJaWYgKCFicGFnZSkKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9idWZmZXItPnJlYWRlcl9sb2NrLCBmbGFncyk7CiAKLQkvKgotCSAqIHJiX2J1ZmZlcl9wZWVrIHdpbGwgZ2V0IHRoZSBuZXh0IHJpbmcgYnVmZmVyIGlmCi0JICogdGhlIGN1cnJlbnQgcmVhZGVyIHBhZ2UgaXMgZW1wdHkuCi0JICovCi0JZXZlbnQgPSByYl9idWZmZXJfcGVlayhidWZmZXIsIGNwdSwgTlVMTCk7Ci0JaWYgKCFldmVudCkKLQkJZ290byBvdXQ7CisJcmVhZGVyID0gcmJfZ2V0X3JlYWRlcl9wYWdlKGNwdV9idWZmZXIpOworCWlmICghcmVhZGVyKQorCQlnb3RvIG91dF91bmxvY2s7CiAKLQkvKiBjaGVjayBmb3IgZGF0YSAqLwotCWlmICghbG9jYWxfcmVhZCgmY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnBhZ2UtPmNvbW1pdCkpCi0JCWdvdG8gb3V0OworCWV2ZW50ID0gcmJfcmVhZGVyX2V2ZW50KGNwdV9idWZmZXIpOworCisJcmVhZCA9IHJlYWRlci0+cmVhZDsKKwljb21taXQgPSByYl9wYWdlX2NvbW1pdChyZWFkZXIpOworCiAJLyoKLQkgKiBJZiB0aGUgd3JpdGVyIGlzIGFscmVhZHkgb2ZmIG9mIHRoZSByZWFkIHBhZ2UsIHRoZW4gc2ltcGx5Ci0JICogc3dpdGNoIHRoZSByZWFkIHBhZ2Ugd2l0aCB0aGUgZ2l2ZW4gcGFnZS4gT3RoZXJ3aXNlCi0JICogd2UgbmVlZCB0byBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIHJlYWRlciB0byB0aGUgd3JpdGVyLgorCSAqIElmIHRoaXMgcGFnZSBoYXMgYmVlbiBwYXJ0aWFsbHkgcmVhZCBvcgorCSAqIGlmIGxlbiBpcyBub3QgYmlnIGVub3VnaCB0byByZWFkIHRoZSByZXN0IG9mIHRoZSBwYWdlIG9yCisJICogYSB3cml0ZXIgaXMgc3RpbGwgb24gdGhlIHBhZ2UsIHRoZW4KKwkgKiB3ZSBtdXN0IGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgcGFnZSB0byB0aGUgYnVmZmVyLgorCSAqIE90aGVyd2lzZSwgd2UgY2FuIHNpbXBseSBzd2FwIHRoZSBwYWdlIHdpdGggdGhlIG9uZSBwYXNzZWQgaW4uCiAJICovCi0JaWYgKGNwdV9idWZmZXItPnJlYWRlcl9wYWdlID09IGNwdV9idWZmZXItPmNvbW1pdF9wYWdlKSB7Ci0JCXVuc2lnbmVkIGludCByZWFkID0gY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnJlYWQ7CisJaWYgKHJlYWQgfHwgKGxlbiA8IChjb21taXQgLSByZWFkKSkgfHwKKwkgICAgY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2UpIHsKKwkJc3RydWN0IGJ1ZmZlcl9kYXRhX3BhZ2UgKnJwYWdlID0gY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnBhZ2U7CisJCXVuc2lnbmVkIGludCBycG9zID0gcmVhZDsKKwkJdW5zaWduZWQgaW50IHBvcyA9IDA7CisJCXVuc2lnbmVkIGludCBzaXplOwogCiAJCWlmIChmdWxsKQotCQkJZ290byBvdXQ7Ci0JCS8qIFRoZSB3cml0ZXIgaXMgc3RpbGwgb24gdGhlIHJlYWRlciBwYWdlLCB3ZSBtdXN0IGNvcHkgKi8KLQkJYnBhZ2UgPSBjcHVfYnVmZmVyLT5yZWFkZXJfcGFnZS0+cGFnZTsKLQkJbWVtY3B5KGJwYWdlLT5kYXRhLAotCQkgICAgICAgY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnBhZ2UtPmRhdGEgKyByZWFkLAotCQkgICAgICAgbG9jYWxfcmVhZCgmYnBhZ2UtPmNvbW1pdCkgLSByZWFkKTsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAotCQkvKiBjb25zdW1lIHdoYXQgd2FzIHJlYWQgKi8KLQkJY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UgKz0gcmVhZDsKKwkJaWYgKGxlbiA+IChjb21taXQgLSByZWFkKSkKKwkJCWxlbiA9IChjb21taXQgLSByZWFkKTsKIAorCQlzaXplID0gcmJfZXZlbnRfbGVuZ3RoKGV2ZW50KTsKKworCQlpZiAobGVuIDwgc2l6ZSkKKwkJCWdvdG8gb3V0X3VubG9jazsKKworCQkvKiBzYXZlIHRoZSBjdXJyZW50IHRpbWVzdGFtcCwgc2luY2UgdGhlIHVzZXIgd2lsbCBuZWVkIGl0ICovCisJCXNhdmVfdGltZXN0YW1wID0gY3B1X2J1ZmZlci0+cmVhZF9zdGFtcDsKKworCQkvKiBOZWVkIHRvIGNvcHkgb25lIGV2ZW50IGF0IGEgdGltZSAqLworCQlkbyB7CisJCQltZW1jcHkoYnBhZ2UtPmRhdGEgKyBwb3MsIHJwYWdlLT5kYXRhICsgcnBvcywgc2l6ZSk7CisKKwkJCWxlbiAtPSBzaXplOworCisJCQlyYl9hZHZhbmNlX3JlYWRlcihjcHVfYnVmZmVyKTsKKwkJCXJwb3MgPSByZWFkZXItPnJlYWQ7CisJCQlwb3MgKz0gc2l6ZTsKKworCQkJZXZlbnQgPSByYl9yZWFkZXJfZXZlbnQoY3B1X2J1ZmZlcik7CisJCQlzaXplID0gcmJfZXZlbnRfbGVuZ3RoKGV2ZW50KTsKKwkJfSB3aGlsZSAobGVuID4gc2l6ZSk7CisKKwkJLyogdXBkYXRlIGJwYWdlICovCisJCWxvY2FsX3NldCgmYnBhZ2UtPmNvbW1pdCwgcG9zKTsKKwkJYnBhZ2UtPnRpbWVfc3RhbXAgPSBzYXZlX3RpbWVzdGFtcDsKKworCQkvKiB3ZSBjb3BpZWQgZXZlcnl0aGluZyB0byB0aGUgYmVnaW5uaW5nICovCisJCXJlYWQgPSAwOwogCX0gZWxzZSB7CiAJCS8qIHN3YXAgdGhlIHBhZ2VzICovCiAJCXJiX2luaXRfcGFnZShicGFnZSk7Ci0JCWJwYWdlID0gY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnBhZ2U7Ci0JCWNwdV9idWZmZXItPnJlYWRlcl9wYWdlLT5wYWdlID0gKmRhdGFfcGFnZTsKLQkJY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UtPnJlYWQgPSAwOworCQlicGFnZSA9IHJlYWRlci0+cGFnZTsKKwkJcmVhZGVyLT5wYWdlID0gKmRhdGFfcGFnZTsKKwkJbG9jYWxfc2V0KCZyZWFkZXItPndyaXRlLCAwKTsKKwkJcmVhZGVyLT5yZWFkID0gMDsKIAkJKmRhdGFfcGFnZSA9IGJwYWdlOwotCX0KLQlyZXQgPSAxOwogCi0JLyogdXBkYXRlIHRoZSBlbnRyeSBjb3VudGVyICovCi0JcmJfcmVtb3ZlX2VudHJpZXMoY3B1X2J1ZmZlciwgYnBhZ2UpOwotIG91dDoKKwkJLyogdXBkYXRlIHRoZSBlbnRyeSBjb3VudGVyICovCisJCXJiX3JlbW92ZV9lbnRyaWVzKGNwdV9idWZmZXIsIGJwYWdlLCByZWFkKTsKKwl9CisJcmV0ID0gcmVhZDsKKworIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1X2J1ZmZlci0+cmVhZGVyX2xvY2ssIGZsYWdzKTsKIAorIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDY2LDcgKzI3OTIsNyBAQAogcmJfc2ltcGxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAogCSAgICAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JbG9uZyAqcCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nICpwID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgYnVmWzY0XTsKIAlpbnQgcjsKIApAQCAtMjQ4Miw5ICsyODA4LDkgQEAKIHJiX3NpbXBsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCiAJCXNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKLQlsb25nICpwID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgKnAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJY2hhciBidWZbNjRdOwotCWxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCByZXQ7CiAKIAlpZiAoY250ID49IHNpemVvZihidWYpKQpAQCAtMjUwOSw3ICsyODM1LDcgQEAKIAlyZXR1cm4gY250OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYl9zaW1wbGVfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJiX3NpbXBsZV9mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHJiX3NpbXBsZV9yZWFkLAogCS53cml0ZQkJPSByYl9zaW1wbGVfd3JpdGUsCkBAIC0yNTMyLDMgKzI4NTgsNDIgQEAKIH0KIAogZnNfaW5pdGNhbGwocmJfaW5pdF9kZWJ1Z2ZzKTsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIGludCByYl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCSB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9CisJCWNvbnRhaW5lcl9vZihzZWxmLCBzdHJ1Y3QgcmluZ19idWZmZXIsIGNwdV9ub3RpZnkpOworCWxvbmcgY3B1ID0gKGxvbmcpaGNwdTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKKwkJaWYgKGNwdV9pc3NldChjcHUsICpidWZmZXItPmNwdW1hc2spKQorCQkJcmV0dXJuIE5PVElGWV9PSzsKKworCQlidWZmZXItPmJ1ZmZlcnNbY3B1XSA9CisJCQlyYl9hbGxvY2F0ZV9jcHVfYnVmZmVyKGJ1ZmZlciwgY3B1KTsKKwkJaWYgKCFidWZmZXItPmJ1ZmZlcnNbY3B1XSkgeworCQkJV0FSTigxLCAiZmFpbGVkIHRvIGFsbG9jYXRlIHJpbmcgYnVmZmVyIG9uIENQVSAlbGRcbiIsCisJCQkgICAgIGNwdSk7CisJCQlyZXR1cm4gTk9USUZZX09LOworCQl9CisJCXNtcF93bWIoKTsKKwkJY3B1X3NldChjcHUsICpidWZmZXItPmNwdW1hc2spOworCQlicmVhazsKKwljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTjoKKwkJLyoKKwkJICogRG8gbm90aGluZy4KKwkJICogIElmIHdlIHdlcmUgdG8gZnJlZSB0aGUgYnVmZmVyLCB0aGVuIHRoZSB1c2VyIHdvdWxkCisJCSAqICBsb3NlIGFueSB0cmFjZSB0aGF0IHdhcyBpbiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggMTdiYjg4ZC4uYTAxNzRhNCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTExLDMyICsxMSwzMyBAQAogICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEluZ28gTW9sbmFyCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IFdpbGxpYW0gTGVlIElyd2luIElJSQogICovCisjaW5jbHVkZSA8bGludXgvcmluZ19idWZmZXIuaD4KICNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc3BsaWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgotCi0jaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JpbmdfYnVmZmVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KIAogI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCiAKICNkZWZpbmUgVFJBQ0VfQlVGRkVSX0ZMQUdTCShSQl9GTF9PVkVSV1JJVEUpCiAKQEAgLTQ0LDE0ICs0NSwyNSBAQAogdW5zaWduZWQgbG9uZyBfX3JlYWRfbW9zdGx5CXRyYWNpbmdfdGhyZXNoOwogCiAvKgorICogT24gYm9vdCB1cCwgdGhlIHJpbmcgYnVmZmVyIGlzIHNldCB0byB0aGUgbWluaW11bSBzaXplLCBzbyB0aGF0CisgKiB3ZSBkbyBub3Qgd2FzdGUgbWVtb3J5IG9uIHN5c3RlbXMgdGhhdCBhcmUgbm90IHVzaW5nIHRyYWNpbmcuCisgKi8KK3N0YXRpYyBpbnQgcmluZ19idWZmZXJfZXhwYW5kZWQ7CisKKy8qCiAgKiBXZSBuZWVkIHRvIGNoYW5nZSB0aGlzIHN0YXRlIHdoZW4gYSBzZWxmdGVzdCBpcyBydW5uaW5nLgogICogQSBzZWxmdGVzdCB3aWxsIGx1cmsgaW50byB0aGUgcmluZy1idWZmZXIgdG8gY291bnQgdGhlCiAgKiBlbnRyaWVzIGluc2VydGVkIGR1cmluZyB0aGUgc2VsZnRlc3QgYWx0aG91Z2ggc29tZSBjb25jdXJyZW50Ci0gKiBpbnNlcnRpb25zIGludG8gdGhlIHJpbmctYnVmZmVyIHN1Y2ggYXMgZnRyYWNlX3ByaW50ayBjb3VsZCBvY2N1cnJlZAorICogaW5zZXJ0aW9ucyBpbnRvIHRoZSByaW5nLWJ1ZmZlciBzdWNoIGFzIHRyYWNlX3ByaW50ayBjb3VsZCBvY2N1cnJlZAogICogYXQgdGhlIHNhbWUgdGltZSwgZ2l2aW5nIGZhbHNlIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIHJlc3VsdHMuCiAgKi8KIHN0YXRpYyBib29sIF9fcmVhZF9tb3N0bHkgdHJhY2luZ19zZWxmdGVzdF9ydW5uaW5nOwogCisvKgorICogSWYgYSB0cmFjZXIgaXMgcnVubmluZywgd2UgZG8gbm90IHdhbnQgdG8gcnVuIFNFTEZURVNULgorICovCitzdGF0aWMgYm9vbCBfX3JlYWRfbW9zdGx5IHRyYWNpbmdfc2VsZnRlc3RfZGlzYWJsZWQ7CisKIC8qIEZvciB0cmFjZXJzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IGN1c3RvbSBmbGFncyAqLwogc3RhdGljIHN0cnVjdCB0cmFjZXJfb3B0IGR1bW15X3RyYWNlcl9vcHRbXSA9IHsKIAl7IH0KQEAgLTczLDcgKzg1LDcgQEAKICAqIG9mIHRoZSB0cmFjZXIgaXMgc3VjY2Vzc2Z1bC4gQnV0IHRoYXQgaXMgdGhlIG9ubHkgcGxhY2UgdGhhdCBzZXRzCiAgKiB0aGlzIGJhY2sgdG8gemVyby4KICAqLwotaW50IHRyYWNpbmdfZGlzYWJsZWQgPSAxOworc3RhdGljIGludCB0cmFjaW5nX2Rpc2FibGVkID0gMTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKGxvY2FsX3QsIGZ0cmFjZV9jcHVfZGlzYWJsZWQpOwogCkBAIC05MSw2ICsxMDMsOSBAQAogCiBzdGF0aWMgY3B1bWFza192YXJfdCBfX3JlYWRfbW9zdGx5CXRyYWNpbmdfYnVmZmVyX21hc2s7CiAKKy8qIERlZmluZSB3aGljaCBjcHUgYnVmZmVycyBhcmUgY3VycmVudGx5IHJlYWQgaW4gdHJhY2VfcGlwZSAqLworc3RhdGljIGNwdW1hc2tfdmFyX3QJCQl0cmFjaW5nX3JlYWRlcl9jcHVtYXNrOworCiAjZGVmaW5lIGZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkJXAogCWZvcl9lYWNoX2NwdShjcHUsIHRyYWNpbmdfYnVmZmVyX21hc2spCiAKQEAgLTEwOSwxNCArMTI0LDIxIEBACiAgKi8KIGludCBmdHJhY2VfZHVtcF9vbl9vb3BzOwogCi1zdGF0aWMgaW50IHRyYWNpbmdfc2V0X3RyYWNlcihjaGFyICpidWYpOworc3RhdGljIGludCB0cmFjaW5nX3NldF90cmFjZXIoY29uc3QgY2hhciAqYnVmKTsKKworI2RlZmluZSBCT09UVVBfVFJBQ0VSX1NJWkUJCTEwMAorc3RhdGljIGNoYXIgYm9vdHVwX3RyYWNlcl9idWZbQk9PVFVQX1RSQUNFUl9TSVpFXSBfX2luaXRkYXRhOworc3RhdGljIGNoYXIgKmRlZmF1bHRfYm9vdHVwX3RyYWNlcjsKIAogc3RhdGljIGludCBfX2luaXQgc2V0X2Z0cmFjZShjaGFyICpzdHIpCiB7Ci0JdHJhY2luZ19zZXRfdHJhY2VyKHN0cik7CisJc3RybmNweShib290dXBfdHJhY2VyX2J1Ziwgc3RyLCBCT09UVVBfVFJBQ0VSX1NJWkUpOworCWRlZmF1bHRfYm9vdHVwX3RyYWNlciA9IGJvb3R1cF90cmFjZXJfYnVmOworCS8qIFdlIGFyZSB1c2luZyBmdHJhY2UgZWFybHksIGV4cGFuZCBpdCAqLworCXJpbmdfYnVmZmVyX2V4cGFuZGVkID0gMTsKIAlyZXR1cm4gMTsKIH0KLV9fc2V0dXAoImZ0cmFjZSIsIHNldF9mdHJhY2UpOworX19zZXR1cCgiZnRyYWNlPSIsIHNldF9mdHJhY2UpOwogCiBzdGF0aWMgaW50IF9faW5pdCBzZXRfZnRyYWNlX2R1bXBfb25fb29wcyhjaGFyICpzdHIpCiB7CkBAIC0xMzMsMTMgKzE1NSw2IEBACiAJcmV0dXJuIG5zZWM7CiB9CiAKLWN5Y2xlX3QgZnRyYWNlX25vdyhpbnQgY3B1KQotewotCXU2NCB0cyA9IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoY3B1KTsKLQlyaW5nX2J1ZmZlcl9ub3JtYWxpemVfdGltZV9zdGFtcChjcHUsICZ0cyk7Ci0JcmV0dXJuIHRzOwotfQotCiAvKgogICogVGhlIGdsb2JhbF90cmFjZSBpcyB0aGUgZGVzY3JpcHRvciB0aGF0IGhvbGRzIHRoZSB0cmFjaW5nCiAgKiBidWZmZXJzIGZvciB0aGUgbGl2ZSB0cmFjaW5nLiBGb3IgZWFjaCBDUFUsIGl0IGNvbnRhaW5zCkBAIC0xNTYsNiArMTcxLDIwIEBACiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1LCBnbG9iYWxfdHJhY2VfY3B1KTsKIAorY3ljbGVfdCBmdHJhY2Vfbm93KGludCBjcHUpCit7CisJdTY0IHRzOworCisJLyogRWFybHkgYm9vdCB1cCBkb2VzIG5vdCBoYXZlIGEgYnVmZmVyIHlldCAqLworCWlmICghZ2xvYmFsX3RyYWNlLmJ1ZmZlcikKKwkJcmV0dXJuIHRyYWNlX2Nsb2NrX2xvY2FsKCk7CisKKwl0cyA9IHJpbmdfYnVmZmVyX3RpbWVfc3RhbXAoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgY3B1KTsKKwlyaW5nX2J1ZmZlcl9ub3JtYWxpemVfdGltZV9zdGFtcChnbG9iYWxfdHJhY2UuYnVmZmVyLCBjcHUsICZ0cyk7CisKKwlyZXR1cm4gdHM7Cit9CisKIC8qCiAgKiBUaGUgbWF4X3RyIGlzIHVzZWQgdG8gc25hcHNob3QgdGhlIGdsb2JhbF90cmFjZSB3aGVuIGEgbWF4aW11bQogICogbGF0ZW5jeSBpcyByZWFjaGVkLiBTb21lIHRyYWNlcnMgd2lsbCB1c2UgdGhpcyB0byBzdG9yZSBhIG1heGltdW0KQEAgLTE4Niw5ICsyMTUsNiBAQAogCXJldHVybiB0cmFjZXJfZW5hYmxlZDsKIH0KIAotLyogZnVuY3Rpb24gdHJhY2luZyBlbmFibGVkICovCi1pbnQJCQkJZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQ7Ci0KIC8qCiAgKiB0cmFjZV9idWZfc2l6ZSBpcyB0aGUgc2l6ZSBpbiBieXRlcyB0aGF0IGlzIGFsbG9jYXRlZAogICogZm9yIGEgYnVmZmVyLiBOb3RlLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGlzIGFsd2F5cyByb3VuZGVkCkBAIC0yMjksNyArMjU1LDcgQEAKIAogLyogdHJhY2VfZmxhZ3MgaG9sZHMgdHJhY2Vfb3B0aW9ucyBkZWZhdWx0IHZhbHVlcyAqLwogdW5zaWduZWQgbG9uZyB0cmFjZV9mbGFncyA9IFRSQUNFX0lURVJfUFJJTlRfUEFSRU5UIHwgVFJBQ0VfSVRFUl9QUklOVEsgfAotCVRSQUNFX0lURVJfQU5OT1RBVEU7CisJVFJBQ0VfSVRFUl9BTk5PVEFURSB8IFRSQUNFX0lURVJfQ09OVEVYVF9JTkZPIHwgVFJBQ0VfSVRFUl9TTEVFUF9USU1FOwogCiAvKioKICAqIHRyYWNlX3dha2VfdXAgLSB3YWtlIHVwIHRhc2tzIHdhaXRpbmcgZm9yIHRyYWNlIGlucHV0CkBAIC0yODAsMTMgKzMwNiwxNyBAQAogCSJibG9jayIsCiAJInN0YWNrdHJhY2UiLAogCSJzY2hlZC10cmVlIiwKLQkiZnRyYWNlX3ByaW50ayIsCisJInRyYWNlX3ByaW50ayIsCiAJImZ0cmFjZV9wcmVlbXB0IiwKIAkiYnJhbmNoIiwKIAkiYW5ub3RhdGUiLAogCSJ1c2Vyc3RhY2t0cmFjZSIsCiAJInN5bS11c2Vyb2JqIiwKIAkicHJpbnRrLW1zZy1vbmx5IiwKKwkiY29udGV4dC1pbmZvIiwKKwkibGF0ZW5jeS1mb3JtYXQiLAorCSJnbG9iYWwtY2xvY2siLAorCSJzbGVlcC10aW1lIiwKIAlOVUxMCiB9OwogCkBAIC0zMjYsMTQwICszNTYsNyBAQAogCWRhdGEtPnJ0X3ByaW9yaXR5ID0gdHNrLT5ydF9wcmlvcml0eTsKIAogCS8qIHJlY29yZCB0aGlzIHRhc2tzIGNvbW0gKi8KLQl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpOwotfQotCi0vKioKLSAqIHRyYWNlX3NlcV9wcmludGYgLSBzZXF1ZW5jZSBwcmludGluZyBvZiB0cmFjZSBpbmZvcm1hdGlvbgotICogQHM6IHRyYWNlIHNlcXVlbmNlIGRlc2NyaXB0b3IKLSAqIEBmbXQ6IHByaW50ZiBmb3JtYXQgc3RyaW5nCi0gKgotICogVGhlIHRyYWNlciBtYXkgdXNlIGVpdGhlciBzZXF1ZW5jZSBvcGVyYXRpb25zIG9yIGl0cyBvd24KLSAqIGNvcHkgdG8gdXNlciByb3V0aW5lcy4gVG8gc2ltcGxpZnkgZm9ybWF0aW5nIG9mIGEgdHJhY2UKLSAqIHRyYWNlX3NlcV9wcmludGYgaXMgdXNlZCB0byBzdG9yZSBzdHJpbmdzIGludG8gYSBzcGVjaWFsCi0gKiBidWZmZXIgKEBzKS4gVGhlbiB0aGUgb3V0cHV0IG1heSBiZSBlaXRoZXIgdXNlZCBieQotICogdGhlIHNlcXVlbmNlciBvciBwdWxsZWQgaW50byBhbm90aGVyIGJ1ZmZlci4KLSAqLwotaW50Ci10cmFjZV9zZXFfcHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCWludCBsZW4gPSAoUEFHRV9TSVpFIC0gMSkgLSBzLT5sZW47Ci0JdmFfbGlzdCBhcDsKLQlpbnQgcmV0OwotCi0JaWYgKCFsZW4pCi0JCXJldHVybiAwOwotCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JcmV0ID0gdnNucHJpbnRmKHMtPmJ1ZmZlciArIHMtPmxlbiwgbGVuLCBmbXQsIGFwKTsKLQl2YV9lbmQoYXApOwotCi0JLyogSWYgd2UgY2FuJ3Qgd3JpdGUgaXQgYWxsLCBkb24ndCBib3RoZXIgd3JpdGluZyBhbnl0aGluZyAqLwotCWlmIChyZXQgPj0gbGVuKQotCQlyZXR1cm4gMDsKLQotCXMtPmxlbiArPSByZXQ7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi0vKioKLSAqIHRyYWNlX3NlcV9wdXRzIC0gdHJhY2Ugc2VxdWVuY2UgcHJpbnRpbmcgb2Ygc2ltcGxlIHN0cmluZwotICogQHM6IHRyYWNlIHNlcXVlbmNlIGRlc2NyaXB0b3IKLSAqIEBzdHI6IHNpbXBsZSBzdHJpbmcgdG8gcmVjb3JkCi0gKgotICogVGhlIHRyYWNlciBtYXkgdXNlIGVpdGhlciB0aGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyBvciBpdHMgb3duCi0gKiBjb3B5IHRvIHVzZXIgcm91dGluZXMuIFRoaXMgZnVuY3Rpb24gcmVjb3JkcyBhIHNpbXBsZSBzdHJpbmcKLSAqIGludG8gYSBzcGVjaWFsIGJ1ZmZlciAoQHMpIGZvciBsYXRlciByZXRyaWV2YWwgYnkgYSBzZXF1ZW5jZXIKLSAqIG9yIG90aGVyIG1lY2hhbmlzbS4KLSAqLwotc3RhdGljIGludAotdHJhY2Vfc2VxX3B1dHMoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqc3RyKQotewotCWludCBsZW4gPSBzdHJsZW4oc3RyKTsKLQotCWlmIChsZW4gPiAoKFBBR0VfU0laRSAtIDEpIC0gcy0+bGVuKSkKLQkJcmV0dXJuIDA7Ci0KLQltZW1jcHkocy0+YnVmZmVyICsgcy0+bGVuLCBzdHIsIGxlbik7Ci0Jcy0+bGVuICs9IGxlbjsKLQotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBpbnQKLXRyYWNlX3NlcV9wdXRjKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGNoYXIgYykKLXsKLQlpZiAocy0+bGVuID49IChQQUdFX1NJWkUgLSAxKSkKLQkJcmV0dXJuIDA7Ci0KLQlzLT5idWZmZXJbcy0+bGVuKytdID0gYzsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50Ci10cmFjZV9zZXFfcHV0bWVtKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHZvaWQgKm1lbSwgc2l6ZV90IGxlbikKLXsKLQlpZiAobGVuID4gKChQQUdFX1NJWkUgLSAxKSAtIHMtPmxlbikpCi0JCXJldHVybiAwOwotCi0JbWVtY3B5KHMtPmJ1ZmZlciArIHMtPmxlbiwgbWVtLCBsZW4pOwotCXMtPmxlbiArPSBsZW47Ci0KLQlyZXR1cm4gbGVuOwotfQotCi0jZGVmaW5lIE1BWF9NRU1IRVhfQllURVMJOAotI2RlZmluZSBIRVhfQ0hBUlMJCShNQVhfTUVNSEVYX0JZVEVTKjIgKyAxKQotCi1zdGF0aWMgaW50Ci10cmFjZV9zZXFfcHV0bWVtX2hleChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB2b2lkICptZW0sIHNpemVfdCBsZW4pCi17Ci0JdW5zaWduZWQgY2hhciBoZXhbSEVYX0NIQVJTXTsKLQl1bnNpZ25lZCBjaGFyICpkYXRhID0gbWVtOwotCWludCBpLCBqOwotCi0jaWZkZWYgX19CSUdfRU5ESUFOCi0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBsZW47IGkrKykgewotI2Vsc2UKLQlmb3IgKGkgPSBsZW4tMSwgaiA9IDA7IGkgPj0gMDsgaS0tKSB7Ci0jZW5kaWYKLQkJaGV4W2orK10gPSBoZXhfYXNjX2hpKGRhdGFbaV0pOwotCQloZXhbaisrXSA9IGhleF9hc2NfbG8oZGF0YVtpXSk7Ci0JfQotCWhleFtqKytdID0gJyAnOwotCi0JcmV0dXJuIHRyYWNlX3NlcV9wdXRtZW0ocywgaGV4LCBqKTsKLX0KLQotc3RhdGljIGludAotdHJhY2Vfc2VxX3BhdGgoc3RydWN0IHRyYWNlX3NlcSAqcywgc3RydWN0IHBhdGggKnBhdGgpCi17Ci0JdW5zaWduZWQgY2hhciAqcDsKLQotCWlmIChzLT5sZW4gPj0gKFBBR0VfU0laRSAtIDEpKQotCQlyZXR1cm4gMDsKLQlwID0gZF9wYXRoKHBhdGgsIHMtPmJ1ZmZlciArIHMtPmxlbiwgUEFHRV9TSVpFIC0gcy0+bGVuKTsKLQlpZiAoIUlTX0VSUihwKSkgewotCQlwID0gbWFuZ2xlX3BhdGgocy0+YnVmZmVyICsgcy0+bGVuLCBwLCAiXG4iKTsKLQkJaWYgKHApIHsKLQkJCXMtPmxlbiA9IHAgLSBzLT5idWZmZXI7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0gZWxzZSB7Ci0JCXMtPmJ1ZmZlcltzLT5sZW4rK10gPSAnPyc7Ci0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotdHJhY2Vfc2VxX3Jlc2V0KHN0cnVjdCB0cmFjZV9zZXEgKnMpCi17Ci0Jcy0+bGVuID0gMDsKLQlzLT5yZWFkcG9zID0gMDsKKwl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHRzayk7CiB9CiAKIHNzaXplX3QgdHJhY2Vfc2VxX3RvX3VzZXIoc3RydWN0IHRyYWNlX3NlcSAqcywgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQpCkBAIC00NjcsNiArMzY0LDkgQEAKIAlpbnQgbGVuOwogCWludCByZXQ7CiAKKwlpZiAoIWNudCkKKwkJcmV0dXJuIDA7CisKIAlpZiAocy0+bGVuIDw9IHMtPnJlYWRwb3MpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTQ3NCwxMCArMzc0LDMxIEBACiAJaWYgKGNudCA+IGxlbikKIAkJY250ID0gbGVuOwogCXJldCA9IGNvcHlfdG9fdXNlcih1YnVmLCBzLT5idWZmZXIgKyBzLT5yZWFkcG9zLCBjbnQpOwotCWlmIChyZXQpCisJaWYgKHJldCA9PSBjbnQpCiAJCXJldHVybiAtRUZBVUxUOwogCi0Jcy0+cmVhZHBvcyArPSBsZW47CisJY250IC09IHJldDsKKworCXMtPnJlYWRwb3MgKz0gY250OworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRyYWNlX3NlcV90b19idWZmZXIoc3RydWN0IHRyYWNlX3NlcSAqcywgdm9pZCAqYnVmLCBzaXplX3QgY250KQoreworCWludCBsZW47CisJdm9pZCAqcmV0OworCisJaWYgKHMtPmxlbiA8PSBzLT5yZWFkcG9zKQorCQlyZXR1cm4gLUVCVVNZOworCisJbGVuID0gcy0+bGVuIC0gcy0+cmVhZHBvczsKKwlpZiAoY250ID4gbGVuKQorCQljbnQgPSBsZW47CisJcmV0ID0gbWVtY3B5KGJ1Ziwgcy0+YnVmZmVyICsgcy0+cmVhZHBvcywgY250KTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzLT5yZWFkcG9zICs9IGNudDsKIAlyZXR1cm4gY250OwogfQogCkBAIC00ODksNyArNDEwLDcgQEAKIAlzLT5idWZmZXJbbGVuXSA9IDA7CiAJc2VxX3B1dHMobSwgcy0+YnVmZmVyKTsKIAotCXRyYWNlX3NlcV9yZXNldChzKTsKKwl0cmFjZV9zZXFfaW5pdChzKTsKIH0KIAogLyoqCkBAIC01NDMsNyArNDY0LDcgQEAKIAogCWZ0cmFjZV9lbmFibGVfY3B1KCk7CiAKLQlXQVJOX09OX09OQ0UocmV0KTsKKwlXQVJOX09OX09OQ0UocmV0ICYmIHJldCAhPSAtRUFHQUlOKTsKIAogCV9fdXBkYXRlX21heF90cih0ciwgdHNrLCBjcHUpOwogCV9fcmF3X3NwaW5fdW5sb2NrKCZmdHJhY2VfbWF4X2xvY2spOwpAQCAtNTU2LDYgKzQ3Nyw4IEBACiAgKiBSZWdpc3RlciBhIG5ldyBwbHVnaW4gdHJhY2VyLgogICovCiBpbnQgcmVnaXN0ZXJfdHJhY2VyKHN0cnVjdCB0cmFjZXIgKnR5cGUpCitfX3JlbGVhc2VzKGtlcm5lbF9sb2NrKQorX19hY3F1aXJlcyhrZXJuZWxfbG9jaykKIHsKIAlzdHJ1Y3QgdHJhY2VyICp0OwogCWludCBsZW47CkBAIC01OTQsOSArNTE3LDEyIEBACiAJZWxzZQogCQlpZiAoIXR5cGUtPmZsYWdzLT5vcHRzKQogCQkJdHlwZS0+ZmxhZ3MtPm9wdHMgPSBkdW1teV90cmFjZXJfb3B0OworCWlmICghdHlwZS0+d2FpdF9waXBlKQorCQl0eXBlLT53YWl0X3BpcGUgPSBkZWZhdWx0X3dhaXRfcGlwZTsKKwogCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QKLQlpZiAodHlwZS0+c2VsZnRlc3QpIHsKKwlpZiAodHlwZS0+c2VsZnRlc3QgJiYgIXRyYWNpbmdfc2VsZnRlc3RfZGlzYWJsZWQpIHsKIAkJc3RydWN0IHRyYWNlciAqc2F2ZWRfdHJhY2VyID0gY3VycmVudF90cmFjZTsKIAkJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICZnbG9iYWxfdHJhY2U7CiAJCWludCBpOwpAQCAtNjM4LDggKzU2NCwyNiBAQAogIG91dDoKIAl0cmFjaW5nX3NlbGZ0ZXN0X3J1bm5pbmcgPSBmYWxzZTsKIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwotCWxvY2tfa2VybmVsKCk7CiAKKwlpZiAocmV0IHx8ICFkZWZhdWx0X2Jvb3R1cF90cmFjZXIpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWlmIChzdHJuY21wKGRlZmF1bHRfYm9vdHVwX3RyYWNlciwgdHlwZS0+bmFtZSwgQk9PVFVQX1RSQUNFUl9TSVpFKSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJcHJpbnRrKEtFUk5fSU5GTyAiU3RhcnRpbmcgdHJhY2VyICclcydcbiIsIHR5cGUtPm5hbWUpOworCS8qIERvIHdlIHdhbnQgdGhpcyB0cmFjZXIgdG8gc3RhcnQgb24gYm9vdHVwPyAqLworCXRyYWNpbmdfc2V0X3RyYWNlcih0eXBlLT5uYW1lKTsKKwlkZWZhdWx0X2Jvb3R1cF90cmFjZXIgPSBOVUxMOworCS8qIGRpc2FibGUgb3RoZXIgc2VsZnRlc3RzLCBzaW5jZSB0aGlzIHdpbGwgYnJlYWsgaXQuICovCisJdHJhY2luZ19zZWxmdGVzdF9kaXNhYmxlZCA9IDE7CisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QKKwlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgRlRSQUNFIHNlbGZ0ZXN0cyBkdWUgdG8gcnVubmluZyB0cmFjZXIgJyVzJ1xuIiwKKwkgICAgICAgdHlwZS0+bmFtZSk7CisjZW5kaWYKKworIG91dF91bmxvY2s6CisJbG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NTgsNiArNjAyLDE1IEBACiAKICBmb3VuZDoKIAkqdCA9ICgqdCktPm5leHQ7CisKKwlpZiAodHlwZSA9PSBjdXJyZW50X3RyYWNlICYmIHRyYWNlcl9lbmFibGVkKSB7CisJCXRyYWNlcl9lbmFibGVkID0gMDsKKwkJdHJhY2luZ19zdG9wKCk7CisJCWlmIChjdXJyZW50X3RyYWNlLT5zdG9wKQorCQkJY3VycmVudF90cmFjZS0+c3RvcCgmZ2xvYmFsX3RyYWNlKTsKKwkJY3VycmVudF90cmFjZSA9ICZub3BfdHJhY2U7CisJfQorCiAJaWYgKHN0cmxlbih0eXBlLT5uYW1lKSAhPSBtYXhfdHJhY2VyX3R5cGVfbGVuKQogCQlnb3RvIG91dDsKIApAQCAtNjg5LDE5ICs2NDIsMjAgQEAKIH0KIAogI2RlZmluZSBTQVZFRF9DTURMSU5FUyAxMjgKKyNkZWZpbmUgTk9fQ01ETElORV9NQVAgVUlOVF9NQVgKIHN0YXRpYyB1bnNpZ25lZCBtYXBfcGlkX3RvX2NtZGxpbmVbUElEX01BWF9ERUZBVUxUKzFdOwogc3RhdGljIHVuc2lnbmVkIG1hcF9jbWRsaW5lX3RvX3BpZFtTQVZFRF9DTURMSU5FU107CiBzdGF0aWMgY2hhciBzYXZlZF9jbWRsaW5lc1tTQVZFRF9DTURMSU5FU11bVEFTS19DT01NX0xFTl07CiBzdGF0aWMgaW50IGNtZGxpbmVfaWR4Owotc3RhdGljIERFRklORV9TUElOTE9DSyh0cmFjZV9jbWRsaW5lX2xvY2spOworc3RhdGljIHJhd19zcGlubG9ja190IHRyYWNlX2NtZGxpbmVfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKIAogLyogdGVtcG9yYXJ5IGRpc2FibGUgcmVjb3JkaW5nICovCi1hdG9taWNfdCB0cmFjZV9yZWNvcmRfY21kbGluZV9kaXNhYmxlZCBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGF0b21pY190IHRyYWNlX3JlY29yZF9jbWRsaW5lX2Rpc2FibGVkIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyB2b2lkIHRyYWNlX2luaXRfY21kbGluZXModm9pZCkKIHsKLQltZW1zZXQoJm1hcF9waWRfdG9fY21kbGluZSwgLTEsIHNpemVvZihtYXBfcGlkX3RvX2NtZGxpbmUpKTsKLQltZW1zZXQoJm1hcF9jbWRsaW5lX3RvX3BpZCwgLTEsIHNpemVvZihtYXBfY21kbGluZV90b19waWQpKTsKKwltZW1zZXQoJm1hcF9waWRfdG9fY21kbGluZSwgTk9fQ01ETElORV9NQVAsIHNpemVvZihtYXBfcGlkX3RvX2NtZGxpbmUpKTsKKwltZW1zZXQoJm1hcF9jbWRsaW5lX3RvX3BpZCwgTk9fQ01ETElORV9NQVAsIHNpemVvZihtYXBfY21kbGluZV90b19waWQpKTsKIAljbWRsaW5lX2lkeCA9IDA7CiB9CiAKQEAgLTczOCwxMyArNjkyLDEyIEBACiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cmFjaW5nX3N0YXJ0X2xvY2ssIGZsYWdzKTsKLQlpZiAoLS10cmFjZV9zdG9wX2NvdW50KQotCQlnb3RvIG91dDsKLQotCWlmICh0cmFjZV9zdG9wX2NvdW50IDwgMCkgewotCQkvKiBTb21lb25lIHNjcmV3ZWQgdXAgdGhlaXIgZGVidWdnaW5nICovCi0JCVdBUk5fT05fT05DRSgxKTsKLQkJdHJhY2Vfc3RvcF9jb3VudCA9IDA7CisJaWYgKC0tdHJhY2Vfc3RvcF9jb3VudCkgeworCQlpZiAodHJhY2Vfc3RvcF9jb3VudCA8IDApIHsKKwkJCS8qIFNvbWVvbmUgc2NyZXdlZCB1cCB0aGVpciBkZWJ1Z2dpbmcgKi8KKwkJCVdBUk5fT05fT05DRSgxKTsKKwkJCXRyYWNlX3N0b3BfY291bnQgPSAwOworCQl9CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNzk0LDggKzc0Nyw3IEBACiAKIHN0YXRpYyB2b2lkIHRyYWNlX3NhdmVfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQl1bnNpZ25lZCBtYXA7Ci0JdW5zaWduZWQgaWR4OworCXVuc2lnbmVkIHBpZCwgaWR4OwogCiAJaWYgKCF0c2stPnBpZCB8fCB1bmxpa2VseSh0c2stPnBpZCA+IFBJRF9NQVhfREVGQVVMVCkpCiAJCXJldHVybjsKQEAgLTgwNiwxNyArNzU4LDI0IEBACiAJICogbm9yIGRvIHdlIHdhbnQgdG8gZGlzYWJsZSBpbnRlcnJ1cHRzLAogCSAqIHNvIGlmIHdlIG1pc3MgaGVyZSwgdGhlbiBiZXR0ZXIgbHVjayBuZXh0IHRpbWUuCiAJICovCi0JaWYgKCFzcGluX3RyeWxvY2soJnRyYWNlX2NtZGxpbmVfbG9jaykpCisJaWYgKCFfX3Jhd19zcGluX3RyeWxvY2soJnRyYWNlX2NtZGxpbmVfbG9jaykpCiAJCXJldHVybjsKIAogCWlkeCA9IG1hcF9waWRfdG9fY21kbGluZVt0c2stPnBpZF07Ci0JaWYgKGlkeCA+PSBTQVZFRF9DTURMSU5FUykgeworCWlmIChpZHggPT0gTk9fQ01ETElORV9NQVApIHsKIAkJaWR4ID0gKGNtZGxpbmVfaWR4ICsgMSkgJSBTQVZFRF9DTURMSU5FUzsKIAotCQltYXAgPSBtYXBfY21kbGluZV90b19waWRbaWR4XTsKLQkJaWYgKG1hcCA8PSBQSURfTUFYX0RFRkFVTFQpCi0JCQltYXBfcGlkX3RvX2NtZGxpbmVbbWFwXSA9ICh1bnNpZ25lZCktMTsKKwkJLyoKKwkJICogQ2hlY2sgd2hldGhlciB0aGUgY21kbGluZSBidWZmZXIgYXQgaWR4IGhhcyBhIHBpZAorCQkgKiBtYXBwZWQuIFdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhhdCBlbnRyeSBzbyB3ZQorCQkgKiBuZWVkIHRvIGNsZWFyIHRoZSBtYXBfcGlkX3RvX2NtZGxpbmUuIE90aGVyd2lzZSB3ZQorCQkgKiB3b3VsZCByZWFkIHRoZSBuZXcgY29tbSBmb3IgdGhlIG9sZCBwaWQuCisJCSAqLworCQlwaWQgPSBtYXBfY21kbGluZV90b19waWRbaWR4XTsKKwkJaWYgKHBpZCAhPSBOT19DTURMSU5FX01BUCkKKwkJCW1hcF9waWRfdG9fY21kbGluZVtwaWRdID0gTk9fQ01ETElORV9NQVA7CiAKKwkJbWFwX2NtZGxpbmVfdG9fcGlkW2lkeF0gPSB0c2stPnBpZDsKIAkJbWFwX3BpZF90b19jbWRsaW5lW3Rzay0+cGlkXSA9IGlkeDsKIAogCQljbWRsaW5lX2lkeCA9IGlkeDsKQEAgLTgyNCwzMyArNzgzLDM3IEBACiAKIAltZW1jcHkoJnNhdmVkX2NtZGxpbmVzW2lkeF0sIHRzay0+Y29tbSwgVEFTS19DT01NX0xFTik7CiAKLQlzcGluX3VubG9jaygmdHJhY2VfY21kbGluZV9sb2NrKTsKKwlfX3Jhd19zcGluX3VubG9jaygmdHJhY2VfY21kbGluZV9sb2NrKTsKIH0KIAotY2hhciAqdHJhY2VfZmluZF9jbWRsaW5lKGludCBwaWQpCit2b2lkIHRyYWNlX2ZpbmRfY21kbGluZShpbnQgcGlkLCBjaGFyIGNvbW1bXSkKIHsKLQljaGFyICpjbWRsaW5lID0gIjwuLi4+IjsKIAl1bnNpZ25lZCBtYXA7CiAKLQlpZiAoIXBpZCkKLQkJcmV0dXJuICI8aWRsZT4iOworCWlmICghcGlkKSB7CisJCXN0cmNweShjb21tLCAiPGlkbGU+Iik7CisJCXJldHVybjsKKwl9CiAKLQlpZiAocGlkID4gUElEX01BWF9ERUZBVUxUKQotCQlnb3RvIG91dDsKKwlpZiAocGlkID4gUElEX01BWF9ERUZBVUxUKSB7CisJCXN0cmNweShjb21tLCAiPC4uLj4iKTsKKwkJcmV0dXJuOworCX0KIAorCV9fcmF3X3NwaW5fbG9jaygmdHJhY2VfY21kbGluZV9sb2NrKTsKIAltYXAgPSBtYXBfcGlkX3RvX2NtZGxpbmVbcGlkXTsKLQlpZiAobWFwID49IFNBVkVEX0NNRExJTkVTKQotCQlnb3RvIG91dDsKKwlpZiAobWFwICE9IE5PX0NNRExJTkVfTUFQKQorCQlzdHJjcHkoY29tbSwgc2F2ZWRfY21kbGluZXNbbWFwXSk7CisJZWxzZQorCQlzdHJjcHkoY29tbSwgIjwuLi4+Iik7CiAKLQljbWRsaW5lID0gc2F2ZWRfY21kbGluZXNbbWFwXTsKLQotIG91dDoKLQlyZXR1cm4gY21kbGluZTsKKwlfX3Jhd19zcGluX3VubG9jaygmdHJhY2VfY21kbGluZV9sb2NrKTsKIH0KIAogdm9pZCB0cmFjaW5nX3JlY29yZF9jbWRsaW5lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCWlmIChhdG9taWNfcmVhZCgmdHJhY2VfcmVjb3JkX2NtZGxpbmVfZGlzYWJsZWQpKQorCWlmIChhdG9taWNfcmVhZCgmdHJhY2VfcmVjb3JkX2NtZGxpbmVfZGlzYWJsZWQpIHx8ICF0cmFjZXJfZW5hYmxlZCB8fAorCSAgICAhdHJhY2luZ19pc19vbigpKQogCQlyZXR1cm47CiAKIAl0cmFjZV9zYXZlX2NtZGxpbmUodHNrKTsKQEAgLTg2NCw3ICs4MjcsNyBAQAogCiAJZW50cnktPnByZWVtcHRfY291bnQJCT0gcGMgJiAweGZmOwogCWVudHJ5LT5waWQJCQk9ICh0c2spID8gdHNrLT5waWQgOiAwOwotCWVudHJ5LT50Z2lkICAgICAgICAgICAgICAgCT0gKHRzaykgPyB0c2stPnRnaWQgOiAwOworCWVudHJ5LT50Z2lkCQkJPSAodHNrKSA/IHRzay0+dGdpZCA6IDA7CiAJZW50cnktPmZsYWdzID0KICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAogCQkoaXJxc19kaXNhYmxlZF9mbGFncyhmbGFncykgPyBUUkFDRV9GTEFHX0lSUVNfT0ZGIDogMCkgfApAQCAtODc2LDc4ICs4MzksMTMyIEBACiAJCShuZWVkX3Jlc2NoZWQoKSA/IFRSQUNFX0ZMQUdfTkVFRF9SRVNDSEVEIDogMCk7CiB9CiAKK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJCQkJICAgIHVuc2lnbmVkIGNoYXIgdHlwZSwKKwkJCQkJCSAgICB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKworCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIGxlbik7CisJaWYgKGV2ZW50ICE9IE5VTEwpIHsKKwkJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKworCQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKGVudCwgZmxhZ3MsIHBjKTsKKwkJZW50LT50eXBlID0gdHlwZTsKKwl9CisKKwlyZXR1cm4gZXZlbnQ7Cit9CitzdGF0aWMgdm9pZCBmdHJhY2VfdHJhY2Vfc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgc2tpcCwgaW50IHBjKTsKK3N0YXRpYyB2b2lkIGZ0cmFjZV90cmFjZV91c2Vyc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpOworCitzdGF0aWMgaW5saW5lIHZvaWQgX190cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkJCQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAorCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMsCisJCQkJCWludCB3YWtlKQoreworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOworCisJZnRyYWNlX3RyYWNlX3N0YWNrKHRyLCBmbGFncywgNiwgcGMpOworCWZ0cmFjZV90cmFjZV91c2Vyc3RhY2sodHIsIGZsYWdzLCBwYyk7CisKKwlpZiAod2FrZSkKKwkJdHJhY2Vfd2FrZV91cCgpOworfQorCit2b2lkIHRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkJCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKK3sKKwlfX3RyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgZmxhZ3MsIHBjLCAxKTsKK30KKworc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICoKK3RyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh1bnNpZ25lZCBjaGFyIHR5cGUsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQoreworCXJldHVybiB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKCZnbG9iYWxfdHJhY2UsCisJCQkJCSB0eXBlLCBsZW4sIGZsYWdzLCBwYyk7Cit9CisKK3ZvaWQgdHJhY2VfY3VycmVudF9idWZmZXJfdW5sb2NrX2NvbW1pdChzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAorCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCit7CisJcmV0dXJuIF9fdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoJmdsb2JhbF90cmFjZSwgZXZlbnQsIGZsYWdzLCBwYywgMSk7Cit9CisKK3ZvaWQgdHJhY2Vfbm93YWtlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYykKK3sKKwlyZXR1cm4gX190cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCgmZ2xvYmFsX3RyYWNlLCBldmVudCwgZmxhZ3MsIHBjLCAwKTsKK30KKwogdm9pZAotdHJhY2VfZnVuY3Rpb24oc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKK3RyYWNlX2Z1bmN0aW9uKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCiAJICAgICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLCB1bnNpZ25lZCBsb25nIGZsYWdzLAogCSAgICAgICBpbnQgcGMpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAogCS8qIElmIHdlIGFyZSByZWFkaW5nIHRoZSByaW5nIGJ1ZmZlciwgZG9uJ3QgdHJhY2UgKi8KIAlpZiAodW5saWtlbHkobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSkpKQogCQlyZXR1cm47CiAKLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICZpcnFfZmxhZ3MpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfRk4sIHNpemVvZigqZW50cnkpLAorCQkJCQkgIGZsYWdzLCBwYyk7CiAJaWYgKCFldmVudCkKIAkJcmV0dXJuOwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKLQllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX0ZOOwogCWVudHJ5LT5pcAkJCT0gaXA7CiAJZW50cnktPnBhcmVudF9pcAkJPSBwYXJlbnRfaXA7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50KTsKIH0KIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKLXN0YXRpYyB2b2lkIF9fdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAorc3RhdGljIGludCBfX3RyYWNlX2dyYXBoX2VudHJ5KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCiAJCQkJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlLAogCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJaW50IHBjKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCiAJaWYgKHVubGlrZWx5KGxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKGdsb2JhbF90cmFjZS5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgJmlycV9mbGFncyk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKCZnbG9iYWxfdHJhY2UsIFRSQUNFX0dSQVBIX0VOVCwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKLQllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX0dSQVBIX0VOVDsKIAllbnRyeS0+Z3JhcGhfZW50CQkJPSAqdHJhY2U7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChnbG9iYWxfdHJhY2UuYnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGdsb2JhbF90cmFjZS5idWZmZXIsIGV2ZW50KTsKKworCXJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZCBfX3RyYWNlX2dyYXBoX3JldHVybihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCiAJCQkJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgKnRyYWNlLAogCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkJaW50IHBjKQogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXRfZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCiAJaWYgKHVubGlrZWx5KGxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpKSkKIAkJcmV0dXJuOwogCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAmaXJxX2ZsYWdzKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoJmdsb2JhbF90cmFjZSwgVFJBQ0VfR1JBUEhfUkVULAorCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCiAJCXJldHVybjsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIGZsYWdzLCBwYyk7Ci0JZW50cnktPmVudC50eXBlCQkJPSBUUkFDRV9HUkFQSF9SRVQ7CiAJZW50cnktPnJldAkJCQk9ICp0cmFjZTsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KGdsb2JhbF90cmFjZS5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQoZ2xvYmFsX3RyYWNlLmJ1ZmZlciwgZXZlbnQpOwogfQogI2VuZGlmCiAKQEAgLTk1NywzMSArOTc0LDIzIEBACiAgICAgICAgaW50IHBjKQogewogCWlmIChsaWtlbHkoIWF0b21pY19yZWFkKCZkYXRhLT5kaXNhYmxlZCkpKQotCQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKKwkJdHJhY2VfZnVuY3Rpb24odHIsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CiB9CiAKLXN0YXRpYyB2b2lkIGZ0cmFjZV90cmFjZV9zdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJICAgICAgIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJCSAgICAgICBpbnQgc2tpcCwgaW50IHBjKQorc3RhdGljIHZvaWQgX19mdHJhY2VfdHJhY2Vfc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCQkgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkgaW50IHNraXAsIGludCBwYykKIHsKICNpZmRlZiBDT05GSUdfU1RBQ0tUUkFDRQogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHN0YWNrX2VudHJ5ICplbnRyeTsKIAlzdHJ1Y3Qgc3RhY2tfdHJhY2UgdHJhY2U7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKLQlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1RBQ0tUUkFDRSkpCi0JCXJldHVybjsKLQotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgJmlycV9mbGFncyk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9TVEFDSywKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm47CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCBmbGFncywgcGMpOwotCWVudHJ5LT5lbnQudHlwZQkJPSBUUkFDRV9TVEFDSzsKLQogCW1lbXNldCgmZW50cnktPmNhbGxlciwgMCwgc2l6ZW9mKGVudHJ5LT5jYWxsZXIpKTsKIAogCXRyYWNlLm5yX2VudHJpZXMJPSAwOwpAQCAtOTkwLDM4ICs5OTksNDMgQEAKIAl0cmFjZS5lbnRyaWVzCQk9IGVudHJ5LT5jYWxsZXI7CiAKIAlzYXZlX3N0YWNrX3RyYWNlKCZ0cmFjZSk7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50KTsKICNlbmRpZgogfQogCi12b2lkIF9fdHJhY2Vfc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKLQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJICAgaW50IHNraXApCitzdGF0aWMgdm9pZCBmdHJhY2VfdHJhY2Vfc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJICAgICAgIGludCBza2lwLCBpbnQgcGMpCiB7Ci0JZnRyYWNlX3RyYWNlX3N0YWNrKHRyLCBkYXRhLCBmbGFncywgc2tpcCwgcHJlZW1wdF9jb3VudCgpKTsKKwlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfU1RBQ0tUUkFDRSkpCisJCXJldHVybjsKKworCV9fZnRyYWNlX3RyYWNlX3N0YWNrKHRyLCBmbGFncywgc2tpcCwgcGMpOworfQorCit2b2lkIF9fdHJhY2Vfc3RhY2soc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJICAgdW5zaWduZWQgbG9uZyBmbGFncywKKwkJICAgaW50IHNraXAsIGludCBwYykKK3sKKwlfX2Z0cmFjZV90cmFjZV9zdGFjayh0ciwgZmxhZ3MsIHNraXAsIHBjKTsKIH0KIAogc3RhdGljIHZvaWQgZnRyYWNlX3RyYWNlX3VzZXJzdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAotCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCisJCQkJICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKQogewogI2lmZGVmIENPTkZJR19TVEFDS1RSQUNFCiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgdXNlcnN0YWNrX2VudHJ5ICplbnRyeTsKIAlzdHJ1Y3Qgc3RhY2tfdHJhY2UgdHJhY2U7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKIAlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfVVNFUlNUQUNLVFJBQ0UpKQogCQlyZXR1cm47CiAKLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICZpcnFfZmxhZ3MpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfVVNFUl9TVEFDSywKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgZmxhZ3MsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm47CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCBmbGFncywgcGMpOwotCWVudHJ5LT5lbnQudHlwZQkJPSBUUkFDRV9VU0VSX1NUQUNLOwogCiAJbWVtc2V0KCZlbnRyeS0+Y2FsbGVyLCAwLCBzaXplb2YoZW50cnktPmNhbGxlcikpOwogCkBAIC0xMDMxLDcwICsxMDQ1LDU4IEBACiAJdHJhY2UuZW50cmllcwkJPSBlbnRyeS0+Y2FsbGVyOwogCiAJc2F2ZV9zdGFja190cmFjZV91c2VyKCZ0cmFjZSk7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKKwlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50KTsKICNlbmRpZgogfQogCi12b2lkIF9fdHJhY2VfdXNlcnN0YWNrKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCi0JCSAgIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCi0JCSAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisjaWZkZWYgVU5VU0VECitzdGF0aWMgdm9pZCBfX3RyYWNlX3VzZXJzdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCWZ0cmFjZV90cmFjZV91c2Vyc3RhY2sodHIsIGRhdGEsIGZsYWdzLCBwcmVlbXB0X2NvdW50KCkpOworCWZ0cmFjZV90cmFjZV91c2Vyc3RhY2sodHIsIGZsYWdzLCBwcmVlbXB0X2NvdW50KCkpOwogfQorI2VuZGlmIC8qIFVOVVNFRCAqLwogCiBzdGF0aWMgdm9pZAotZnRyYWNlX3RyYWNlX3NwZWNpYWwodm9pZCAqX190ciwgdm9pZCAqX19kYXRhLAorZnRyYWNlX3RyYWNlX3NwZWNpYWwodm9pZCAqX190ciwKIAkJICAgICB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLAogCQkgICAgIGludCBwYykKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEgPSBfX2RhdGE7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IF9fdHI7CiAJc3RydWN0IHNwZWNpYWxfZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAmaXJxX2ZsYWdzKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX1NQRUNJQUwsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIHBjKTsKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm47CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCAwLCBwYyk7Ci0JZW50cnktPmVudC50eXBlCQkJPSBUUkFDRV9TUEVDSUFMOwogCWVudHJ5LT5hcmcxCQkJPSBhcmcxOwogCWVudHJ5LT5hcmcyCQkJPSBhcmcyOwogCWVudHJ5LT5hcmczCQkJPSBhcmczOwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7Ci0JZnRyYWNlX3RyYWNlX3N0YWNrKHRyLCBkYXRhLCBpcnFfZmxhZ3MsIDQsIHBjKTsKLQlmdHJhY2VfdHJhY2VfdXNlcnN0YWNrKHRyLCBkYXRhLCBpcnFfZmxhZ3MsIHBjKTsKLQotCXRyYWNlX3dha2VfdXAoKTsKKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIHBjKTsKIH0KIAogdm9pZAogX190cmFjZV9zcGVjaWFsKHZvaWQgKl9fdHIsIHZvaWQgKl9fZGF0YSwKIAkJdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMykKIHsKLQlmdHJhY2VfdHJhY2Vfc3BlY2lhbChfX3RyLCBfX2RhdGEsIGFyZzEsIGFyZzIsIGFyZzMsIHByZWVtcHRfY291bnQoKSk7CisJZnRyYWNlX3RyYWNlX3NwZWNpYWwoX190ciwgYXJnMSwgYXJnMiwgYXJnMywgcHJlZW1wdF9jb3VudCgpKTsKIH0KIAogdm9pZAogdHJhY2luZ19zY2hlZF9zd2l0Y2hfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCSAgIHN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEsCiAJCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCiAJCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsCiAJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICAgJmlycV9mbGFncyk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9DVFgsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIGZsYWdzLCBwYyk7CiAJaWYgKCFldmVudCkKIAkJcmV0dXJuOwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgZmxhZ3MsIHBjKTsKLQllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX0NUWDsKIAllbnRyeS0+cHJldl9waWQJCQk9IHByZXYtPnBpZDsKIAllbnRyeS0+cHJldl9wcmlvCQk9IHByZXYtPnByaW87CiAJZW50cnktPnByZXZfc3RhdGUJCT0gcHJldi0+c3RhdGU7CkBAIC0xMTAyLDI5ICsxMTA0LDIzIEBACiAJZW50cnktPm5leHRfcHJpbwkJPSBuZXh0LT5wcmlvOwogCWVudHJ5LT5uZXh0X3N0YXRlCQk9IG5leHQtPnN0YXRlOwogCWVudHJ5LT5uZXh0X2NwdQk9IHRhc2tfY3B1KG5leHQpOwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7Ci0JZnRyYWNlX3RyYWNlX3N0YWNrKHRyLCBkYXRhLCBmbGFncywgNSwgcGMpOwotCWZ0cmFjZV90cmFjZV91c2Vyc3RhY2sodHIsIGRhdGEsIGZsYWdzLCBwYyk7CisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCBmbGFncywgcGMpOwogfQogCiB2b2lkCiB0cmFjaW5nX3NjaGVkX3dha2V1cF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkJICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZWUsCiAJCQkgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsCiAJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgcGMpCiB7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICAgJmlycV9mbGFncyk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9XQUtFLAorCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCiAJCXJldHVybjsKIAllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIGZsYWdzLCBwYyk7Ci0JZW50cnktPmVudC50eXBlCQkJPSBUUkFDRV9XQUtFOwogCWVudHJ5LT5wcmV2X3BpZAkJCT0gY3Vyci0+cGlkOwogCWVudHJ5LT5wcmV2X3ByaW8JCT0gY3Vyci0+cHJpbzsKIAllbnRyeS0+cHJldl9zdGF0ZQkJPSBjdXJyLT5zdGF0ZTsKQEAgLTExMzIsMTEgKzExMjgsMTAgQEAKIAllbnRyeS0+bmV4dF9wcmlvCQk9IHdha2VlLT5wcmlvOwogCWVudHJ5LT5uZXh0X3N0YXRlCQk9IHdha2VlLT5zdGF0ZTsKIAllbnRyeS0+bmV4dF9jcHUJCQk9IHRhc2tfY3B1KHdha2VlKTsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOwotCWZ0cmFjZV90cmFjZV9zdGFjayh0ciwgZGF0YSwgZmxhZ3MsIDYsIHBjKTsKLQlmdHJhY2VfdHJhY2VfdXNlcnN0YWNrKHRyLCBkYXRhLCBmbGFncywgcGMpOwogCi0JdHJhY2Vfd2FrZV91cCgpOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOworCWZ0cmFjZV90cmFjZV9zdGFjayh0ciwgZmxhZ3MsIDYsIHBjKTsKKwlmdHJhY2VfdHJhY2VfdXNlcnN0YWNrKHRyLCBmbGFncywgcGMpOwogfQogCiB2b2lkCkBAIC0xMTU3LDY2ICsxMTUyLDcgQEAKIAlkYXRhID0gdHItPmRhdGFbY3B1XTsKIAogCWlmIChsaWtlbHkoYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKSA9PSAxKSkKLQkJZnRyYWNlX3RyYWNlX3NwZWNpYWwodHIsIGRhdGEsIGFyZzEsIGFyZzIsIGFyZzMsIHBjKTsKLQotCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCi1zdGF0aWMgdm9pZAotZnVuY3Rpb25fdHJhY2VfY2FsbF9wcmVlbXB0X29ubHkodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXApCi17Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICZnbG9iYWxfdHJhY2U7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgZGlzYWJsZWQ7Ci0JaW50IGNwdSwgcmVzY2hlZDsKLQlpbnQgcGM7Ci0KLQlpZiAodW5saWtlbHkoIWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkKSkKLQkJcmV0dXJuOwotCi0JcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0JcmVzY2hlZCA9IGZ0cmFjZV9wcmVlbXB0X2Rpc2FibGUoKTsKLQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLQljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOwotCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKTsKLQotCWlmIChsaWtlbHkoZGlzYWJsZWQgPT0gMSkpCi0JCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcGMpOwotCi0JYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwotCWZ0cmFjZV9wcmVlbXB0X2VuYWJsZShyZXNjaGVkKTsKLX0KLQotc3RhdGljIHZvaWQKLWZ1bmN0aW9uX3RyYWNlX2NhbGwodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXApCi17Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICZnbG9iYWxfdHJhY2U7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgZGlzYWJsZWQ7Ci0JaW50IGNwdTsKLQlpbnQgcGM7Ci0KLQlpZiAodW5saWtlbHkoIWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkKSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBOZWVkIHRvIHVzZSByYXcsIHNpbmNlIHRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZQotCSAqIHJlY3Vyc2l2ZSBwcm90ZWN0aW9uIGlzIHBlcmZvcm1lZC4KLQkgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlkYXRhID0gdHItPmRhdGFbY3B1XTsKLQlkaXNhYmxlZCA9IGF0b21pY19pbmNfcmV0dXJuKCZkYXRhLT5kaXNhYmxlZCk7Ci0KLQlpZiAobGlrZWx5KGRpc2FibGVkID09IDEpKSB7Ci0JCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKLQl9CisJCWZ0cmFjZV90cmFjZV9zcGVjaWFsKHRyLCBhcmcxLCBhcmcyLCBhcmczLCBwYyk7CiAKIAlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtMTIyOSw2ICsxMTY1LDcgQEAKIAlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJbG9uZyBkaXNhYmxlZDsKKwlpbnQgcmV0OwogCWludCBjcHU7CiAJaW50IHBjOwogCkBAIC0xMjQ0LDE1ICsxMTgxLDE4IEBACiAJZGlzYWJsZWQgPSBhdG9taWNfaW5jX3JldHVybigmZGF0YS0+ZGlzYWJsZWQpOwogCWlmIChsaWtlbHkoZGlzYWJsZWQgPT0gMSkpIHsKIAkJcGMgPSBwcmVlbXB0X2NvdW50KCk7Ci0JCV9fdHJhY2VfZ3JhcGhfZW50cnkodHIsIGRhdGEsIHRyYWNlLCBmbGFncywgcGMpOworCQlyZXQgPSBfX3RyYWNlX2dyYXBoX2VudHJ5KHRyLCB0cmFjZSwgZmxhZ3MsIHBjKTsKKwl9IGVsc2UgeworCQlyZXQgPSAwOwogCX0KIAkvKiBPbmx5IGRvIHRoZSBhdG9taWMgaWYgaXQgaXMgbm90IGFscmVhZHkgc2V0ICovCiAJaWYgKCF0ZXN0X3Rza190cmFjZV9ncmFwaChjdXJyZW50KSkKIAkJc2V0X3Rza190cmFjZV9ncmFwaChjdXJyZW50KTsKKwogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlyZXR1cm4gMTsKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIHRyYWNlX2dyYXBoX3JldHVybihzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UpCkBAIC0xMjcwLDcgKzEyMTAsNyBAQAogCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKTsKIAlpZiAobGlrZWx5KGRpc2FibGVkID09IDEpKSB7CiAJCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCQlfX3RyYWNlX2dyYXBoX3JldHVybih0ciwgZGF0YSwgdHJhY2UsIGZsYWdzLCBwYyk7CisJCV9fdHJhY2VfZ3JhcGhfcmV0dXJuKHRyLCB0cmFjZSwgZmxhZ3MsIHBjKTsKIAl9CiAJaWYgKCF0cmFjZS0+ZGVwdGgpCiAJCWNsZWFyX3Rza190cmFjZV9ncmFwaChjdXJyZW50KTsKQEAgLTEyNzksMzAgKzEyMTksMTIyIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwogCi1zdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPQorCisvKioKKyAqIHRyYWNlX3ZicHJpbnRrIC0gd3JpdGUgYmluYXJ5IG1zZyB0byB0cmFjaW5nIGJ1ZmZlcgorICoKKyAqLworaW50IHRyYWNlX3ZicHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewotCS5mdW5jID0gZnVuY3Rpb25fdHJhY2VfY2FsbCwKLX07CisJc3RhdGljIHJhd19zcGlubG9ja190IHRyYWNlX2J1Zl9sb2NrID0KKwkJKHJhd19zcGlubG9ja190KV9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKKwlzdGF0aWMgdTMyIHRyYWNlX2J1ZltUUkFDRV9CVUZfU0laRV07CiAKLXZvaWQgdHJhY2luZ19zdGFydF9mdW5jdGlvbl90cmFjZSh2b2lkKQotewotCWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkID0gMDsKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOworCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CisJc3RydWN0IGJwcmludF9lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzY2hlZDsKKwlpbnQgY3B1LCBsZW4gPSAwLCBzaXplLCBwYzsKIAotCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUFJFRU1QVE9OTFkpCi0JCXRyYWNlX29wcy5mdW5jID0gZnVuY3Rpb25fdHJhY2VfY2FsbF9wcmVlbXB0X29ubHk7Ci0JZWxzZQotCQl0cmFjZV9vcHMuZnVuYyA9IGZ1bmN0aW9uX3RyYWNlX2NhbGw7CisJaWYgKHVubGlrZWx5KHRyYWNpbmdfc2VsZnRlc3RfcnVubmluZyB8fCB0cmFjaW5nX2Rpc2FibGVkKSkKKwkJcmV0dXJuIDA7CiAKLQlyZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7Ci0JZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQgPSAxOworCS8qIERvbid0IHBvbGx1dGUgZ3JhcGggdHJhY2VzIHdpdGggdHJhY2VfdnByaW50ayBpbnRlcm5hbHMgKi8KKwlwYXVzZV9ncmFwaF90cmFjaW5nKCk7CisKKwlwYyA9IHByZWVtcHRfY291bnQoKTsKKwlyZXNjaGVkID0gZnRyYWNlX3ByZWVtcHRfZGlzYWJsZSgpOworCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJZGF0YSA9IHRyLT5kYXRhW2NwdV07CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmRhdGEtPmRpc2FibGVkKSkpCisJCWdvdG8gb3V0OworCisJLyogTG9ja2RlcCB1c2VzIHRyYWNlX3ByaW50ayBmb3IgbG9jayB0cmFjaW5nICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3NwaW5fbG9jaygmdHJhY2VfYnVmX2xvY2spOworCWxlbiA9IHZiaW5fcHJpbnRmKHRyYWNlX2J1ZiwgVFJBQ0VfQlVGX1NJWkUsIGZtdCwgYXJncyk7CisKKwlpZiAobGVuID4gVFJBQ0VfQlVGX1NJWkUgfHwgbGVuIDwgMCkKKwkJZ290byBvdXRfdW5sb2NrOworCisJc2l6ZSA9IHNpemVvZigqZW50cnkpICsgc2l6ZW9mKHUzMikgKiBsZW47CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9CUFJJTlQsIHNpemUsIGZsYWdzLCBwYyk7CisJaWYgKCFldmVudCkKKwkJZ290byBvdXRfdW5sb2NrOworCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJZW50cnktPmlwCQkJPSBpcDsKKwllbnRyeS0+Zm10CQkJPSBmbXQ7CisKKwltZW1jcHkoZW50cnktPmJ1ZiwgdHJhY2VfYnVmLCBzaXplb2YodTMyKSAqIGxlbik7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7CisKK291dF91bmxvY2s6CisJX19yYXdfc3Bpbl91bmxvY2soJnRyYWNlX2J1Zl9sb2NrKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKK291dDoKKwlmdHJhY2VfcHJlZW1wdF9lbmFibGUocmVzY2hlZCk7CisJdW5wYXVzZV9ncmFwaF90cmFjaW5nKCk7CisKKwlyZXR1cm4gbGVuOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodHJhY2VfdmJwcmludGspOwogCi12b2lkIHRyYWNpbmdfc3RvcF9mdW5jdGlvbl90cmFjZSh2b2lkKQoraW50IHRyYWNlX3ZwcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCiB7Ci0JZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQgPSAwOwotCXVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9vcHMpOworCXN0YXRpYyByYXdfc3BpbmxvY2tfdCB0cmFjZV9idWZfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKKwlzdGF0aWMgY2hhciB0cmFjZV9idWZbVFJBQ0VfQlVGX1NJWkVdOworCisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gJmdsb2JhbF90cmFjZTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOworCWludCBjcHUsIGxlbiA9IDAsIHNpemUsIHBjOworCXN0cnVjdCBwcmludF9lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlpZiAodHJhY2luZ19kaXNhYmxlZCB8fCB0cmFjaW5nX3NlbGZ0ZXN0X3J1bm5pbmcpCisJCXJldHVybiAwOworCisJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKKwljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOworCisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZkYXRhLT5kaXNhYmxlZCkpKQorCQlnb3RvIG91dDsKKworCXBhdXNlX2dyYXBoX3RyYWNpbmcoKTsKKwlyYXdfbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKKwlfX3Jhd19zcGluX2xvY2soJnRyYWNlX2J1Zl9sb2NrKTsKKwlsZW4gPSB2c25wcmludGYodHJhY2VfYnVmLCBUUkFDRV9CVUZfU0laRSwgZm10LCBhcmdzKTsKKworCWxlbiA9IG1pbihsZW4sIFRSQUNFX0JVRl9TSVpFLTEpOworCXRyYWNlX2J1ZltsZW5dID0gMDsKKworCXNpemUgPSBzaXplb2YoKmVudHJ5KSArIGxlbiArIDE7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9QUklOVCwgc2l6ZSwgaXJxX2ZsYWdzLCBwYyk7CisJaWYgKCFldmVudCkKKwkJZ290byBvdXRfdW5sb2NrOworCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJZW50cnktPmlwCQkJPSBpcDsKKworCW1lbWNweSgmZW50cnktPmJ1ZiwgdHJhY2VfYnVmLCBsZW4pOworCWVudHJ5LT5idWZbbGVuXSA9IDA7CisJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCk7CisKKyBvdXRfdW5sb2NrOgorCV9fcmF3X3NwaW5fdW5sb2NrKCZ0cmFjZV9idWZfbG9jayk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7CisJdW5wYXVzZV9ncmFwaF90cmFjaW5nKCk7Cisgb3V0OgorCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKKworCXJldHVybiBsZW47CiB9Ci0jZW5kaWYKK0VYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3ZwcmludGspOwogCiBlbnVtIHRyYWNlX2ZpbGVfdHlwZSB7CiAJVFJBQ0VfRklMRV9MQVRfRk1UCT0gMSwKQEAgLTEzNDUsMTAgKzEzNzcsMjUgQEAKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXIgKmJ1ZmZlciA9IGl0ZXItPnRyLT5idWZmZXI7CiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQsICpuZXh0ID0gTlVMTDsKKwlpbnQgY3B1X2ZpbGUgPSBpdGVyLT5jcHVfZmlsZTsKIAl1NjQgbmV4dF90cyA9IDAsIHRzOwogCWludCBuZXh0X2NwdSA9IC0xOwogCWludCBjcHU7CiAKKwkvKgorCSAqIElmIHdlIGFyZSBpbiBhIHBlcl9jcHUgdHJhY2UgZmlsZSwgZG9uJ3QgYm90aGVyIGJ5IGl0ZXJhdGluZyBvdmVyCisJICogYWxsIGNwdSBhbmQgcGVlayBkaXJlY3RseS4KKwkgKi8KKwlpZiAoY3B1X2ZpbGUgPiBUUkFDRV9QSVBFX0FMTF9DUFUpIHsKKwkJaWYgKHJpbmdfYnVmZmVyX2VtcHR5X2NwdShidWZmZXIsIGNwdV9maWxlKSkKKwkJCXJldHVybiBOVUxMOworCQllbnQgPSBwZWVrX25leHRfZW50cnkoaXRlciwgY3B1X2ZpbGUsIGVudF90cyk7CisJCWlmIChlbnRfY3B1KQorCQkJKmVudF9jcHUgPSBjcHVfZmlsZTsKKworCQlyZXR1cm4gZW50OworCX0KKwogCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgewogCiAJCWlmIChyaW5nX2J1ZmZlcl9lbXB0eV9jcHUoYnVmZmVyLCBjcHUpKQpAQCAtMTM3Niw4ICsxNDIzLDggQEAKIH0KIAogLyogRmluZCB0aGUgbmV4dCByZWFsIGVudHJ5LCB3aXRob3V0IHVwZGF0aW5nIHRoZSBpdGVyYXRvciBpdHNlbGYgKi8KLXN0YXRpYyBzdHJ1Y3QgdHJhY2VfZW50cnkgKgotZmluZF9uZXh0X2VudHJ5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50ICplbnRfY3B1LCB1NjQgKmVudF90cykKK3N0cnVjdCB0cmFjZV9lbnRyeSAqdHJhY2VfZmluZF9uZXh0X2VudHJ5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICBpbnQgKmVudF9jcHUsIHU2NCAqZW50X3RzKQogewogCXJldHVybiBfX2ZpbmRfbmV4dF9lbnRyeShpdGVyLCBlbnRfY3B1LCBlbnRfdHMpOwogfQpAQCAtMTQyNiwxOSArMTQ3MywzMiBAQAogCXJldHVybiBlbnQ7CiB9CiAKKy8qCisgKiBObyBuZWNlc3NhcnkgbG9ja2luZyBoZXJlLiBUaGUgd29yc3QgdGhpbmcgd2hpY2ggY2FuCisgKiBoYXBwZW4gaXMgbG9vc2luZyBldmVudHMgY29uc3VtZWQgYXQgdGhlIHNhbWUgdGltZQorICogYnkgYSB0cmFjZV9waXBlIHJlYWRlci4KKyAqIE90aGVyIHRoYW4gdGhhdCwgd2UgZG9uJ3QgcmlzayB0byBjcmFzaCB0aGUgcmluZyBidWZmZXIKKyAqIGJlY2F1c2UgaXQgc2VyaWFsaXplcyB0aGUgcmVhZGVycy4KKyAqCisgKiBUaGUgY3VycmVudCB0cmFjZXIgaXMgY29waWVkIHRvIGF2b2lkIGEgZ2xvYmFsIGxvY2tpbmcKKyAqIGFsbCBhcm91bmQuCisgKi8KIHN0YXRpYyB2b2lkICpzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKKwlzdGF0aWMgc3RydWN0IHRyYWNlciAqb2xkX3RyYWNlcjsKKwlpbnQgY3B1X2ZpbGUgPSBpdGVyLT5jcHVfZmlsZTsKIAl2b2lkICpwID0gTlVMTDsKIAlsb2ZmX3QgbCA9IDA7CiAJaW50IGNwdTsKIAorCS8qIGNvcHkgdGhlIHRyYWNlciB0byBhdm9pZCB1c2luZyBhIGdsb2JhbCBsb2NrIGFsbCBhcm91bmQgKi8KIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQotCWlmICghY3VycmVudF90cmFjZSB8fCBjdXJyZW50X3RyYWNlICE9IGl0ZXItPnRyYWNlKSB7Ci0JCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7Ci0JCXJldHVybiBOVUxMOworCWlmICh1bmxpa2VseShvbGRfdHJhY2VyICE9IGN1cnJlbnRfdHJhY2UgJiYgY3VycmVudF90cmFjZSkpIHsKKwkJb2xkX3RyYWNlciA9IGN1cnJlbnRfdHJhY2U7CisJCSppdGVyLT50cmFjZSA9ICpjdXJyZW50X3RyYWNlOwogCX0KKwltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCiAJYXRvbWljX2luYygmdHJhY2VfcmVjb3JkX2NtZGxpbmVfZGlzYWJsZWQpOwogCkBAIC0xNDQ5LDkgKzE1MDksMTIgQEAKIAogCQlmdHJhY2VfZGlzYWJsZV9jcHUoKTsKIAotCQlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKLQkJCXJpbmdfYnVmZmVyX2l0ZXJfcmVzZXQoaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSk7Ci0JCX0KKwkJaWYgKGNwdV9maWxlID09IFRSQUNFX1BJUEVfQUxMX0NQVSkgeworCQkJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KQorCQkJCXJpbmdfYnVmZmVyX2l0ZXJfcmVzZXQoaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSk7CisJCX0gZWxzZQorCQkJcmluZ19idWZmZXJfaXRlcl9yZXNldChpdGVyLT5idWZmZXJfaXRlcltjcHVfZmlsZV0pOworCiAKIAkJZnRyYWNlX2VuYWJsZV9jcHUoKTsKIApAQCAtMTQ2OSwxNTUgKzE1MzIsNiBAQAogc3RhdGljIHZvaWQgc19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKIHsKIAlhdG9taWNfZGVjKCZ0cmFjZV9yZWNvcmRfY21kbGluZV9kaXNhYmxlZCk7Ci0JbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLX0KLQotI2lmZGVmIENPTkZJR19LUkVUUFJPQkVTCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmtyZXRwcm9iZWQoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciB0cmFtcF9uYW1lW10gPSAia3JldHByb2JlX3RyYW1wb2xpbmUiOwotCWludCBzaXplID0gc2l6ZW9mKHRyYW1wX25hbWUpOwotCi0JaWYgKHN0cm5jbXAodHJhbXBfbmFtZSwgbmFtZSwgc2l6ZSkgPT0gMCkKLQkJcmV0dXJuICJbdW5rbm93bi9rcmV0cHJvYmUnZF0iOwotCXJldHVybiBuYW1lOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqa3JldHByb2JlZChjb25zdCBjaGFyICpuYW1lKQotewotCXJldHVybiBuYW1lOwotfQotI2VuZGlmIC8qIENPTkZJR19LUkVUUFJPQkVTICovCi0KLXN0YXRpYyBpbnQKLXNlcV9wcmludF9zeW1fc2hvcnQoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCi17Ci0jaWZkZWYgQ09ORklHX0tBTExTWU1TCi0JY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKLQljb25zdCBjaGFyICpuYW1lOwotCi0Ja2FsbHN5bXNfbG9va3VwKGFkZHJlc3MsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7Ci0KLQluYW1lID0ga3JldHByb2JlZChzdHIpOwotCi0JcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgZm10LCBuYW1lKTsKLSNlbmRpZgotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50Ci1zZXFfcHJpbnRfc3ltX29mZnNldChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsCi0JCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotI2lmZGVmIENPTkZJR19LQUxMU1lNUwotCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07Ci0JY29uc3QgY2hhciAqbmFtZTsKLQotCXNwcmludF9zeW1ib2woc3RyLCBhZGRyZXNzKTsKLQluYW1lID0ga3JldHByb2JlZChzdHIpOwotCi0JcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgZm10LCBuYW1lKTsKLSNlbmRpZgotCXJldHVybiAxOwotfQotCi0jaWZuZGVmIENPTkZJR182NEJJVAotIyBkZWZpbmUgSVBfRk1UICIlMDhseCIKLSNlbHNlCi0jIGRlZmluZSBJUF9GTVQgIiUwMTZseCIKLSNlbmRpZgotCi1pbnQKLXNlcV9wcmludF9pcF9zeW0oc3RydWN0IHRyYWNlX3NlcSAqcywgdW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MpCi17Ci0JaW50IHJldDsKLQotCWlmICghaXApCi0JCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIwIik7Ci0KLQlpZiAoc3ltX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fT0ZGU0VUKQotCQlyZXQgPSBzZXFfcHJpbnRfc3ltX29mZnNldChzLCAiJXMiLCBpcCk7Ci0JZWxzZQotCQlyZXQgPSBzZXFfcHJpbnRfc3ltX3Nob3J0KHMsICIlcyIsIGlwKTsKLQotCWlmICghcmV0KQotCQlyZXR1cm4gMDsKLQotCWlmIChzeW1fZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9BRERSKQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgPCIgSVBfRk1UICI+IiwgaXApOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNlcV9wcmludF91c2VyX2lwKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHN5bV9mbGFncykKLXsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IE5VTEw7Ci0JdW5zaWduZWQgbG9uZyB2bXN0YXJ0ID0gMDsKLQlpbnQgcmV0ID0gMTsKLQotCWlmIChtbSkgewotCQljb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQotCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCXZtYSA9IGZpbmRfdm1hKG1tLCBpcCk7Ci0JCWlmICh2bWEpIHsKLQkJCWZpbGUgPSB2bWEtPnZtX2ZpbGU7Ci0JCQl2bXN0YXJ0ID0gdm1hLT52bV9zdGFydDsKLQkJfQotCQlpZiAoZmlsZSkgewotCQkJcmV0ID0gdHJhY2Vfc2VxX3BhdGgocywgJmZpbGUtPmZfcGF0aCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlsrMHglbHhdIiwgaXAgLSB2bXN0YXJ0KTsKLQkJfQotCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCX0KLQlpZiAocmV0ICYmICgoc3ltX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fQUREUikgfHwgIWZpbGUpKQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgPCIgSVBfRk1UICI+IiwgaXApOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXNlcV9wcmludF91c2VyaXBfb2Jqcyhjb25zdCBzdHJ1Y3QgdXNlcnN0YWNrX2VudHJ5ICplbnRyeSwgc3RydWN0IHRyYWNlX3NlcSAqcywKLQkJICAgICAgdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMOwotCWludCByZXQgPSAxOwotCXVuc2lnbmVkIGludCBpOwotCi0JaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fVVNFUk9CSikgewotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0JCS8qCi0JCSAqIHdlIGRvIHRoZSBsb29rdXAgb24gdGhlIHRocmVhZCBncm91cCBsZWFkZXIsCi0JCSAqIHNpbmNlIGluZGl2aWR1YWwgdGhyZWFkcyBtaWdodCBoYXZlIGFscmVhZHkgcXVpdCEKLQkJICovCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJdGFzayA9IGZpbmRfdGFza19ieV92cGlkKGVudHJ5LT5lbnQudGdpZCk7Ci0JCWlmICh0YXNrKQotCQkJbW0gPSBnZXRfdGFza19tbSh0YXNrKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEZUUkFDRV9TVEFDS19FTlRSSUVTOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBpcCA9IGVudHJ5LT5jYWxsZXJbaV07Ci0KLQkJaWYgKGlwID09IFVMT05HX01BWCB8fCAhcmV0KQotCQkJYnJlYWs7Ci0JCWlmIChpICYmIHJldCkKLQkJCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICIgPC0gIik7Ci0JCWlmICghaXApIHsKLQkJCWlmIChyZXQpCi0JCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIj8/Iik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoIXJldCkKLQkJCWJyZWFrOwotCQlpZiAocmV0KQotCQkJcmV0ID0gc2VxX3ByaW50X3VzZXJfaXAocywgbW0sIGlwLCBzeW1fZmxhZ3MpOwotCX0KLQotCWlmIChtbSkKLQkJbW1wdXQobW0pOwotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHByaW50X2xhdF9oZWxwX2hlYWRlcihzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCkBAIC0xNjU4LDExICsxNTcyLDExIEBACiAJdG90YWwgPSBlbnRyaWVzICsKIAkJcmluZ19idWZmZXJfb3ZlcnJ1bnMoaXRlci0+dHItPmJ1ZmZlcik7CiAKLQlzZXFfcHJpbnRmKG0sICIlcyBsYXRlbmN5IHRyYWNlIHYxLjEuNSBvbiAlc1xuIiwKKwlzZXFfcHJpbnRmKG0sICIjICVzIGxhdGVuY3kgdHJhY2UgdjEuMS41IG9uICVzXG4iLAogCQkgICBuYW1lLCBVVFNfUkVMRUFTRSk7Ci0Jc2VxX3B1dHMobSwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCXNlcV9wdXRzKG0sICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgogCQkgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiIGxhdGVuY3k6ICVsdSB1cywgIyVsdS8lbHUsIENQVSMlZCB8IgorCXNlcV9wcmludGYobSwgIiMgbGF0ZW5jeTogJWx1IHVzLCAjJWx1LyVsdSwgQ1BVIyVkIHwiCiAJCSAgICIgKE06JXMgVlA6JWQsIEtQOiVkLCBTUDolZCBIUDolZCIsCiAJCSAgIG5zZWNzX3RvX3VzZWNzKGRhdGEtPnNhdmVkX2xhdGVuY3kpLAogCQkgICBlbnRyaWVzLApAQCAtMTY4NCwxMjEgKzE1OTgsMjQgQEAKICNlbHNlCiAJc2VxX3B1dHMobSwgIilcbiIpOwogI2VuZGlmCi0Jc2VxX3B1dHMobSwgIiAgICAtLS0tLS0tLS0tLS0tLS0tLVxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiICAgIHwgdGFzazogJS4xNnMtJWQgIgorCXNlcV9wdXRzKG0sICIjICAgIC0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwlzZXFfcHJpbnRmKG0sICIjICAgIHwgdGFzazogJS4xNnMtJWQgIgogCQkgICAiKHVpZDolZCBuaWNlOiVsZCBwb2xpY3k6JWxkIHJ0X3ByaW86JWxkKVxuIiwKIAkJICAgZGF0YS0+Y29tbSwgZGF0YS0+cGlkLCBkYXRhLT51aWQsIGRhdGEtPm5pY2UsCiAJCSAgIGRhdGEtPnBvbGljeSwgZGF0YS0+cnRfcHJpb3JpdHkpOwotCXNlcV9wdXRzKG0sICIgICAgLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXNlcV9wdXRzKG0sICIjICAgIC0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAogCWlmIChkYXRhLT5jcml0aWNhbF9zdGFydCkgewotCQlzZXFfcHV0cyhtLCAiID0+IHN0YXJ0ZWQgYXQ6ICIpOworCQlzZXFfcHV0cyhtLCAiIyAgPT4gc3RhcnRlZCBhdDogIik7CiAJCXNlcV9wcmludF9pcF9zeW0oJml0ZXItPnNlcSwgZGF0YS0+Y3JpdGljYWxfc3RhcnQsIHN5bV9mbGFncyk7CiAJCXRyYWNlX3ByaW50X3NlcShtLCAmaXRlci0+c2VxKTsKLQkJc2VxX3B1dHMobSwgIlxuID0+IGVuZGVkIGF0OiAgICIpOworCQlzZXFfcHV0cyhtLCAiXG4jICA9PiBlbmRlZCBhdDogICAiKTsKIAkJc2VxX3ByaW50X2lwX3N5bSgmaXRlci0+c2VxLCBkYXRhLT5jcml0aWNhbF9lbmQsIHN5bV9mbGFncyk7CiAJCXRyYWNlX3ByaW50X3NlcShtLCAmaXRlci0+c2VxKTsKLQkJc2VxX3B1dHMobSwgIlxuIik7CisJCXNlcV9wdXRzKG0sICIjXG4iKTsKIAl9CiAKLQlzZXFfcHV0cyhtLCAiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQKLWxhdF9wcmludF9nZW5lcmljKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnksIGludCBjcHUpCi17Ci0JaW50IGhhcmRpcnEsIHNvZnRpcnE7Ci0JY2hhciAqY29tbTsKLQotCWNvbW0gPSB0cmFjZV9maW5kX2NtZGxpbmUoZW50cnktPnBpZCk7Ci0KLQl0cmFjZV9zZXFfcHJpbnRmKHMsICIlOC44cy0lLTVkICIsIGNvbW0sIGVudHJ5LT5waWQpOwotCXRyYWNlX3NlcV9wcmludGYocywgIiUzZCIsIGNwdSk7Ci0JdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWMlYyIsCi0JCQkoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19JUlFTX09GRikgPyAnZCcgOgotCQkJIChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0lSUVNfTk9TVVBQT1JUKSA/ICdYJyA6ICcuJywKLQkJCSgoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19ORUVEX1JFU0NIRUQpID8gJ04nIDogJy4nKSk7Ci0KLQloYXJkaXJxID0gZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19IQVJESVJROwotCXNvZnRpcnEgPSBlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX1NPRlRJUlE7Ci0JaWYgKGhhcmRpcnEgJiYgc29mdGlycSkgewotCQl0cmFjZV9zZXFfcHV0YyhzLCAnSCcpOwotCX0gZWxzZSB7Ci0JCWlmIChoYXJkaXJxKSB7Ci0JCQl0cmFjZV9zZXFfcHV0YyhzLCAnaCcpOwotCQl9IGVsc2UgewotCQkJaWYgKHNvZnRpcnEpCi0JCQkJdHJhY2Vfc2VxX3B1dGMocywgJ3MnKTsKLQkJCWVsc2UKLQkJCQl0cmFjZV9zZXFfcHV0YyhzLCAnLicpOwotCQl9Ci0JfQotCi0JaWYgKGVudHJ5LT5wcmVlbXB0X2NvdW50KQotCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIleCIsIGVudHJ5LT5wcmVlbXB0X2NvdW50KTsKLQllbHNlCi0JCXRyYWNlX3NlcV9wdXRzKHMsICIuIik7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgcHJlZW1wdF9tYXJrX3RocmVzaCA9IDEwMDsKLQotc3RhdGljIHZvaWQKLWxhdF9wcmludF90aW1lc3RhbXAoc3RydWN0IHRyYWNlX3NlcSAqcywgdTY0IGFic191c2VjcywKLQkJICAgIHVuc2lnbmVkIGxvbmcgcmVsX3VzZWNzKQotewotCXRyYWNlX3NlcV9wcmludGYocywgIiAlNGxsZHVzIiwgYWJzX3VzZWNzKTsKLQlpZiAocmVsX3VzZWNzID4gcHJlZW1wdF9tYXJrX3RocmVzaCkKLQkJdHJhY2Vfc2VxX3B1dHMocywgIiE6ICIpOwotCWVsc2UgaWYgKHJlbF91c2VjcyA+IDEpCi0JCXRyYWNlX3NlcV9wdXRzKHMsICIrOiAiKTsKLQllbHNlCi0JCXRyYWNlX3NlcV9wdXRzKHMsICIgOiAiKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgc3RhdGVfdG9fY2hhcltdID0gVEFTS19TVEFURV9UT19DSEFSX1NUUjsKLQotc3RhdGljIGludCB0YXNrX3N0YXRlX2NoYXIodW5zaWduZWQgbG9uZyBzdGF0ZSkKLXsKLQlpbnQgYml0ID0gc3RhdGUgPyBfX2ZmcyhzdGF0ZSkgKyAxIDogMDsKLQotCXJldHVybiBiaXQgPCBzaXplb2Yoc3RhdGVfdG9fY2hhcikgLSAxID8gc3RhdGVfdG9fY2hhcltiaXRdIDogJz8nOwotfQotCi0vKgotICogVGhlIG1lc3NhZ2UgaXMgc3VwcG9zZWQgdG8gY29udGFpbiBhbiBlbmRpbmcgbmV3bGluZS4KLSAqIElmIHRoZSBwcmludGluZyBzdG9wcyBwcmVtYXR1cmVseSwgdHJ5IHRvIGFkZCBhIG5ld2xpbmUgb2Ygb3VyIG93bi4KLSAqLwotdm9pZCB0cmFjZV9zZXFfcHJpbnRfY29udChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCi17Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnQ7Ci0Jc3RydWN0IHRyYWNlX2ZpZWxkX2NvbnQgKmNvbnQ7Ci0JYm9vbCBvayA9IHRydWU7Ci0KLQllbnQgPSBwZWVrX25leHRfZW50cnkoaXRlciwgaXRlci0+Y3B1LCBOVUxMKTsKLQlpZiAoIWVudCB8fCBlbnQtPnR5cGUgIT0gVFJBQ0VfQ09OVCkgewotCQl0cmFjZV9zZXFfcHV0YyhzLCAnXG4nKTsKLQkJcmV0dXJuOwotCX0KLQotCWRvIHsKLQkJY29udCA9IChzdHJ1Y3QgdHJhY2VfZmllbGRfY29udCAqKWVudDsKLQkJaWYgKG9rKQotCQkJb2sgPSAodHJhY2Vfc2VxX3ByaW50ZihzLCAiJXMiLCBjb250LT5idWYpID4gMCk7Ci0KLQkJZnRyYWNlX2Rpc2FibGVfY3B1KCk7Ci0KLQkJaWYgKGl0ZXItPmJ1ZmZlcl9pdGVyW2l0ZXItPmNwdV0pCi0JCQlyaW5nX2J1ZmZlcl9yZWFkKGl0ZXItPmJ1ZmZlcl9pdGVyW2l0ZXItPmNwdV0sIE5VTEwpOwotCQllbHNlCi0JCQlyaW5nX2J1ZmZlcl9jb25zdW1lKGl0ZXItPnRyLT5idWZmZXIsIGl0ZXItPmNwdSwgTlVMTCk7Ci0KLQkJZnRyYWNlX2VuYWJsZV9jcHUoKTsKLQotCQllbnQgPSBwZWVrX25leHRfZW50cnkoaXRlciwgaXRlci0+Y3B1LCBOVUxMKTsKLQl9IHdoaWxlIChlbnQgJiYgZW50LT50eXBlID09IFRSQUNFX0NPTlQpOwotCi0JaWYgKCFvaykKLQkJdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7CisJc2VxX3B1dHMobSwgIiNcbiIpOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0X2NwdV9idWZmX3N0YXJ0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKQEAgLTE4MTgsNTMzICsxNjM1LDEyOCBAQAogCXRyYWNlX3NlcV9wcmludGYocywgIiMjIyMjIENQVSAldSBidWZmZXIgc3RhcnRlZCAjIyMjXG4iLCBpdGVyLT5jcHUpOwogfQogCi1zdGF0aWMgZW51bSBwcmludF9saW5lX3QKLXByaW50X2xhdF9mbXQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCB1bnNpZ25lZCBpbnQgdHJhY2VfaWR4LCBpbnQgY3B1KQotewotCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwotCXVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzID0gKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fTUFTSyk7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICpuZXh0X2VudHJ5OwotCXVuc2lnbmVkIGxvbmcgdmVyYm9zZSA9ICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfVkVSQk9TRSk7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKLQl1bnNpZ25lZCBsb25nIGFic191c2VjczsKLQl1bnNpZ25lZCBsb25nIHJlbF91c2VjczsKLQl1NjQgbmV4dF90czsKLQljaGFyICpjb21tOwotCWludCBTLCBUOwotCWludCBpOwotCi0JaWYgKGVudHJ5LT50eXBlID09IFRSQUNFX0NPTlQpCi0JCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci0KLQl0ZXN0X2NwdV9idWZmX3N0YXJ0KGl0ZXIpOwotCi0JbmV4dF9lbnRyeSA9IGZpbmRfbmV4dF9lbnRyeShpdGVyLCBOVUxMLCAmbmV4dF90cyk7Ci0JaWYgKCFuZXh0X2VudHJ5KQotCQluZXh0X3RzID0gaXRlci0+dHM7Ci0JcmVsX3VzZWNzID0gbnMydXNlY3MobmV4dF90cyAtIGl0ZXItPnRzKTsKLQlhYnNfdXNlY3MgPSBuczJ1c2VjcyhpdGVyLT50cyAtIGl0ZXItPnRyLT50aW1lX3N0YXJ0KTsKLQotCWlmICh2ZXJib3NlKSB7Ci0JCWNvbW0gPSB0cmFjZV9maW5kX2NtZGxpbmUoZW50cnktPnBpZCk7Ci0JCXRyYWNlX3NlcV9wcmludGYocywgIiUxNnMgJTVkICUzZCAlZCAlMDh4ICUwOHggWyUwOGx4XSIKLQkJCQkgIiAlbGQuJTAzbGRtcyAoKyVsZC4lMDNsZG1zKTogIiwKLQkJCQkgY29tbSwKLQkJCQkgZW50cnktPnBpZCwgY3B1LCBlbnRyeS0+ZmxhZ3MsCi0JCQkJIGVudHJ5LT5wcmVlbXB0X2NvdW50LCB0cmFjZV9pZHgsCi0JCQkJIG5zMnVzZWNzKGl0ZXItPnRzKSwKLQkJCQkgYWJzX3VzZWNzLzEwMDAsCi0JCQkJIGFic191c2VjcyAlIDEwMDAsIHJlbF91c2Vjcy8xMDAwLAotCQkJCSByZWxfdXNlY3MgJSAxMDAwKTsKLQl9IGVsc2UgewotCQlsYXRfcHJpbnRfZ2VuZXJpYyhzLCBlbnRyeSwgY3B1KTsKLQkJbGF0X3ByaW50X3RpbWVzdGFtcChzLCBhYnNfdXNlY3MsIHJlbF91c2Vjcyk7Ci0JfQotCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIFRSQUNFX0ZOOiB7Ci0JCXN0cnVjdCBmdHJhY2VfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIHN5bV9mbGFncyk7Ci0JCXRyYWNlX3NlcV9wdXRzKHMsICIgKCIpOwotCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5wYXJlbnRfaXAsIHN5bV9mbGFncyk7Ci0JCXRyYWNlX3NlcV9wdXRzKHMsICIpXG4iKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfQ1RYOgotCWNhc2UgVFJBQ0VfV0FLRTogewotCQlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKLQkJUyA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7Ci0JCWNvbW0gPSB0cmFjZV9maW5kX2NtZGxpbmUoZmllbGQtPm5leHRfcGlkKTsKLQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiICU1ZDolM2Q6JWMgJXMgWyUwM2RdICU1ZDolM2Q6JWMgJXNcbiIsCi0JCQkJIGZpZWxkLT5wcmV2X3BpZCwKLQkJCQkgZmllbGQtPnByZXZfcHJpbywKLQkJCQkgUywgZW50cnktPnR5cGUgPT0gVFJBQ0VfQ1RYID8gIj09PiIgOiAiICArIiwKLQkJCQkgZmllbGQtPm5leHRfY3B1LAotCQkJCSBmaWVsZC0+bmV4dF9waWQsCi0JCQkJIGZpZWxkLT5uZXh0X3ByaW8sCi0JCQkJIFQsIGNvbW0pOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9TUEVDSUFMOiB7Ci0JCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXRyYWNlX3NlcV9wcmludGYocywgIiMgJWxkICVsZCAlbGRcbiIsCi0JCQkJIGZpZWxkLT5hcmcxLAotCQkJCSBmaWVsZC0+YXJnMiwKLQkJCQkgZmllbGQtPmFyZzMpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9TVEFDSzogewotCQlzdHJ1Y3Qgc3RhY2tfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEZUUkFDRV9TVEFDS19FTlRSSUVTOyBpKyspIHsKLQkJCWlmIChpKQotCQkJCXRyYWNlX3NlcV9wdXRzKHMsICIgPD0gIik7Ci0JCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5jYWxsZXJbaV0sIHN5bV9mbGFncyk7Ci0JCX0KLQkJdHJhY2Vfc2VxX3B1dHMocywgIlxuIik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX1BSSU5UOiB7Ci0JCXN0cnVjdCBwcmludF9lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgc3ltX2ZsYWdzKTsKLQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiOiAlcyIsIGZpZWxkLT5idWYpOwotCQlpZiAoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19DT05UKQotCQkJdHJhY2Vfc2VxX3ByaW50X2NvbnQocywgaXRlcik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX0JSQU5DSDogewotCQlzdHJ1Y3QgdHJhY2VfYnJhbmNoICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCXRyYWNlX3NlcV9wcmludGYocywgIlslc10gJXM6JXM6JWRcbiIsCi0JCQkJIGZpZWxkLT5jb3JyZWN0ID8gIiAgb2sgICIgOiAiIE1JU1MgIiwKLQkJCQkgZmllbGQtPmZ1bmMsCi0JCQkJIGZpZWxkLT5maWxlLAotCQkJCSBmaWVsZC0+bGluZSk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX1VTRVJfU1RBQ0s6IHsKLQkJc3RydWN0IHVzZXJzdGFja19lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlzZXFfcHJpbnRfdXNlcmlwX29ianMoZmllbGQsIHMsIHN5bV9mbGFncyk7Ci0JCXRyYWNlX3NlcV9wdXRjKHMsICdcbicpOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiVW5rbm93biB0eXBlICVkXG4iLCBlbnRyeS0+dHlwZSk7Ci0JfQotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci19Ci0KIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF90cmFjZV9mbXQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwogCXVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzID0gKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fTUFTSyk7CiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIHVzZWNfcmVtOwotCXVuc2lnbmVkIGxvbmcgbG9uZyB0OwotCXVuc2lnbmVkIGxvbmcgc2VjczsKLQljaGFyICpjb21tOwotCWludCByZXQ7Ci0JaW50IFMsIFQ7Ci0JaW50IGk7CisJc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudDsKIAogCWVudHJ5ID0gaXRlci0+ZW50OwogCi0JaWYgKGVudHJ5LT50eXBlID09IFRSQUNFX0NPTlQpCi0JCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci0KIAl0ZXN0X2NwdV9idWZmX3N0YXJ0KGl0ZXIpOwogCi0JY29tbSA9IHRyYWNlX2ZpbmRfY21kbGluZShpdGVyLT5lbnQtPnBpZCk7CisJZXZlbnQgPSBmdHJhY2VfZmluZF9ldmVudChlbnRyeS0+dHlwZSk7CiAKLQl0ID0gbnMydXNlY3MoaXRlci0+dHMpOwotCXVzZWNfcmVtID0gZG9fZGl2KHQsIDEwMDAwMDBVTEwpOwotCXNlY3MgPSAodW5zaWduZWQgbG9uZyl0OwotCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTE2cy0lLTVkICIsIGNvbW0sIGVudHJ5LT5waWQpOwotCWlmICghcmV0KQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWyUwM2RdICIsIGl0ZXItPmNwdSk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlNWx1LiUwNmx1OiAiLCBzZWNzLCB1c2VjX3JlbSk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIFRSQUNFX0ZOOiB7Ci0JCXN0cnVjdCBmdHJhY2VfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJcmV0ID0gc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+aXAsIHN5bV9mbGFncyk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQlpZiAoKHN5bV9mbGFncyAmIFRSQUNFX0lURVJfUFJJTlRfUEFSRU5UKSAmJgotCQkJCQkJZmllbGQtPnBhcmVudF9pcCkgewotCQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIDwtIik7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCQlyZXQgPSBzZXFfcHJpbnRfaXBfc3ltKHMsCi0JCQkJCSAgICAgICBmaWVsZC0+cGFyZW50X2lwLAotCQkJCQkgICAgICAgc3ltX2ZsYWdzKTsKLQkJCWlmICghcmV0KQotCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0NPTlRFWFRfSU5GTykgeworCQlpZiAoaXRlci0+aXRlcl9mbGFncyAmIFRSQUNFX0ZJTEVfTEFUX0ZNVCkgeworCQkJaWYgKCF0cmFjZV9wcmludF9sYXRfY29udGV4dChpdGVyKSkKKwkJCQlnb3RvIHBhcnRpYWw7CisJCX0gZWxzZSB7CisJCQlpZiAoIXRyYWNlX3ByaW50X2NvbnRleHQoaXRlcikpCisJCQkJZ290byBwYXJ0aWFsOwogCQl9Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlxuIik7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQlicmVhazsKIAl9Ci0JY2FzZSBUUkFDRV9DVFg6Ci0JY2FzZSBUUkFDRV9XQUtFOiB7Ci0JCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKIAotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCWlmIChldmVudCkKKwkJcmV0dXJuIGV2ZW50LT50cmFjZShpdGVyLCBzeW1fZmxhZ3MpOwogCi0JCVQgPSB0YXNrX3N0YXRlX2NoYXIoZmllbGQtPm5leHRfc3RhdGUpOwotCQlTID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICU1ZDolM2Q6JWMgJXMgWyUwM2RdICU1ZDolM2Q6JWNcbiIsCi0JCQkJICAgICAgIGZpZWxkLT5wcmV2X3BpZCwKLQkJCQkgICAgICAgZmllbGQtPnByZXZfcHJpbywKLQkJCQkgICAgICAgUywKLQkJCQkgICAgICAgZW50cnktPnR5cGUgPT0gVFJBQ0VfQ1RYID8gIj09PiIgOiAiICArIiwKLQkJCQkgICAgICAgZmllbGQtPm5leHRfY3B1LAotCQkJCSAgICAgICBmaWVsZC0+bmV4dF9waWQsCi0JCQkJICAgICAgIGZpZWxkLT5uZXh0X3ByaW8sCi0JCQkJICAgICAgIFQpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgVFJBQ0VfU1BFQ0lBTDogewotCQlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7CisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICJVbmtub3duIHR5cGUgJWRcbiIsIGVudHJ5LT50eXBlKSkKKwkJZ290byBwYXJ0aWFsOwogCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIyAlbGQgJWxkICVsZFxuIiwKLQkJCQkgZmllbGQtPmFyZzEsCi0JCQkJIGZpZWxkLT5hcmcyLAotCQkJCSBmaWVsZC0+YXJnMyk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9TVEFDSzogewotCQlzdHJ1Y3Qgc3RhY2tfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEZUUkFDRV9TVEFDS19FTlRSSUVTOyBpKyspIHsKLQkJCWlmIChpKSB7Ci0JCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIiA8PSAiKTsKLQkJCQlpZiAoIXJldCkKLQkJCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQkJfQotCQkJcmV0ID0gc2VxX3ByaW50X2lwX3N5bShzLCBmaWVsZC0+Y2FsbGVyW2ldLAotCQkJCQkgICAgICAgc3ltX2ZsYWdzKTsKLQkJCWlmICghcmV0KQotCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJfQotCQlyZXQgPSB0cmFjZV9zZXFfcHV0cyhzLCAiXG4iKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX1BSSU5UOiB7Ci0JCXN0cnVjdCBwcmludF9lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5pcCwgc3ltX2ZsYWdzKTsKLQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiOiAlcyIsIGZpZWxkLT5idWYpOwotCQlpZiAoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19DT05UKQotCQkJdHJhY2Vfc2VxX3ByaW50X2NvbnQocywgaXRlcik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX0dSQVBIX1JFVDogewotCQlyZXR1cm4gcHJpbnRfZ3JhcGhfZnVuY3Rpb24oaXRlcik7Ci0JfQotCWNhc2UgVFJBQ0VfR1JBUEhfRU5UOiB7Ci0JCXJldHVybiBwcmludF9ncmFwaF9mdW5jdGlvbihpdGVyKTsKLQl9Ci0JY2FzZSBUUkFDRV9CUkFOQ0g6IHsKLQkJc3RydWN0IHRyYWNlX2JyYW5jaCAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQl0cmFjZV9zZXFfcHJpbnRmKHMsICJbJXNdICVzOiVzOiVkXG4iLAotCQkJCSBmaWVsZC0+Y29ycmVjdCA/ICIgIG9rICAiIDogIiBNSVNTICIsCi0JCQkJIGZpZWxkLT5mdW5jLAotCQkJCSBmaWVsZC0+ZmlsZSwKLQkJCQkgZmllbGQtPmxpbmUpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9VU0VSX1NUQUNLOiB7Ci0JCXN0cnVjdCB1c2Vyc3RhY2tfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJcmV0ID0gc2VxX3ByaW50X3VzZXJpcF9vYmpzKGZpZWxkLCBzLCBzeW1fZmxhZ3MpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJcmV0ID0gdHJhY2Vfc2VxX3B1dGMocywgJ1xuJyk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQlicmVhazsKLQl9Ci0JfQogCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CitwYXJ0aWFsOgorCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHByaW50X3Jhd19mbXQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7Ci0JaW50IHJldDsKLQlpbnQgUywgVDsKKwlzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50OwogCiAJZW50cnkgPSBpdGVyLT5lbnQ7CiAKLQlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfQ09OVCkKLQkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLQotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVkICVkICVsbHUgIiwKLQkJZW50cnktPnBpZCwgaXRlci0+Y3B1LCBpdGVyLT50cyk7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKLQljYXNlIFRSQUNFX0ZOOiB7Ci0JCXN0cnVjdCBmdHJhY2VfZW50cnkgKmZpZWxkOwotCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXggJXhcbiIsCi0JCQkJCWZpZWxkLT5pcCwKLQkJCQkJZmllbGQtPnBhcmVudF9pcCk7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQlicmVhazsKKwlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0NPTlRFWFRfSU5GTykgeworCQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiVkICVkICVsbHUgIiwKKwkJCQkgICAgICBlbnRyeS0+cGlkLCBpdGVyLT5jcHUsIGl0ZXItPnRzKSkKKwkJCWdvdG8gcGFydGlhbDsKIAl9Ci0JY2FzZSBUUkFDRV9DVFg6Ci0JY2FzZSBUUkFDRV9XQUtFOiB7Ci0JCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKIAotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOworCWV2ZW50ID0gZnRyYWNlX2ZpbmRfZXZlbnQoZW50cnktPnR5cGUpOworCWlmIChldmVudCkKKwkJcmV0dXJuIGV2ZW50LT5yYXcoaXRlciwgMCk7CiAKLQkJVCA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+bmV4dF9zdGF0ZSk7Ci0JCVMgPSBlbnRyeS0+dHlwZSA9PSBUUkFDRV9XQUtFID8gJysnIDoKLQkJCXRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVkICVkICVjICVkICVkICVkICVjXG4iLAotCQkJCSAgICAgICBmaWVsZC0+cHJldl9waWQsCi0JCQkJICAgICAgIGZpZWxkLT5wcmV2X3ByaW8sCi0JCQkJICAgICAgIFMsCi0JCQkJICAgICAgIGZpZWxkLT5uZXh0X2NwdSwKLQkJCQkgICAgICAgZmllbGQtPm5leHRfcGlkLAotCQkJCSAgICAgICBmaWVsZC0+bmV4dF9wcmlvLAotCQkJCSAgICAgICBUKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX1NQRUNJQUw6Ci0JY2FzZSBUUkFDRV9VU0VSX1NUQUNLOgotCWNhc2UgVFJBQ0VfU1RBQ0s6IHsKLQkJc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOworCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiJWQgP1xuIiwgZW50cnktPnR5cGUpKQorCQlnb3RvIHBhcnRpYWw7CiAKLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIjICVsZCAlbGQgJWxkXG4iLAotCQkJCSBmaWVsZC0+YXJnMSwKLQkJCQkgZmllbGQtPmFyZzIsCi0JCQkJIGZpZWxkLT5hcmczKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFRSQUNFX1BSSU5UOiB7Ci0JCXN0cnVjdCBwcmludF9lbnRyeSAqZmllbGQ7Ci0KLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQl0cmFjZV9zZXFfcHJpbnRmKHMsICIjICVseCAlcyIsIGZpZWxkLT5pcCwgZmllbGQtPmJ1Zik7Ci0JCWlmIChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0NPTlQpCi0JCQl0cmFjZV9zZXFfcHJpbnRfY29udChzLCBpdGVyKTsKLQkJYnJlYWs7Ci0JfQotCX0KIAlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworcGFydGlhbDoKKwlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiB9CiAKLSNkZWZpbmUgU0VRX1BVVF9GSUVMRF9SRVQocywgeCkJCQkJXAotZG8gewkJCQkJCQlcCi0JaWYgKCF0cmFjZV9zZXFfcHV0bWVtKHMsICYoeCksIHNpemVvZih4KSkpCVwKLQkJcmV0dXJuIDA7CQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIHgpCQkJXAotZG8gewkJCQkJCQlcCi0JQlVJTERfQlVHX09OKHNpemVvZih4KSA+IE1BWF9NRU1IRVhfQllURVMpOwlcCi0JaWYgKCF0cmFjZV9zZXFfcHV0bWVtX2hleChzLCAmKHgpLCBzaXplb2YoeCkpKQlcCi0JCXJldHVybiAwOwkJCQlcCi19IHdoaWxlICgwKQotCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QgcHJpbnRfaGV4X2ZtdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7CiAJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAJdW5zaWduZWQgY2hhciBuZXdsaW5lID0gJ1xuJzsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OwotCWludCBTLCBUOworCXN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQ7CiAKIAllbnRyeSA9IGl0ZXItPmVudDsKIAotCWlmIChlbnRyeS0+dHlwZSA9PSBUUkFDRV9DT05UKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwotCi0JU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGVudHJ5LT5waWQpOwotCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBpdGVyLT5jcHUpOwotCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBpdGVyLT50cyk7Ci0KLQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JY2FzZSBUUkFDRV9GTjogewotCQlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+aXApOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPnBhcmVudF9pcCk7Ci0JCWJyZWFrOworCWlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfQ09OVEVYVF9JTkZPKSB7CisJCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBlbnRyeS0+cGlkKTsKKwkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGl0ZXItPmNwdSk7CisJCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBpdGVyLT50cyk7CiAJfQotCWNhc2UgVFJBQ0VfQ1RYOgotCWNhc2UgVFJBQ0VfV0FLRTogewotCQlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZmllbGQ7CiAKLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKLQkJUyA9IGVudHJ5LT50eXBlID09IFRSQUNFX1dBS0UgPyAnKycgOgotCQkJdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5wcmV2X3BpZCk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9wcmlvKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIFMpOwotCQlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfY3B1KTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5uZXh0X3BpZCk7Ci0JCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9wcmlvKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIFQpOwotCQlicmVhazsKKwlldmVudCA9IGZ0cmFjZV9maW5kX2V2ZW50KGVudHJ5LT50eXBlKTsKKwlpZiAoZXZlbnQpIHsKKwkJZW51bSBwcmludF9saW5lX3QgcmV0ID0gZXZlbnQtPmhleChpdGVyLCAwKTsKKwkJaWYgKHJldCAhPSBUUkFDRV9UWVBFX0hBTkRMRUQpCisJCQlyZXR1cm4gcmV0OwogCX0KLQljYXNlIFRSQUNFX1NQRUNJQUw6Ci0JY2FzZSBUUkFDRV9VU0VSX1NUQUNLOgotCWNhc2UgVFJBQ0VfU1RBQ0s6IHsKLQkJc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOwogCi0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0KLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcxKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcyKTsKLQkJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmczKTsKLQkJYnJlYWs7Ci0JfQotCX0KIAlTRVFfUFVUX0ZJRUxEX1JFVChzLCBuZXdsaW5lKTsKIAogCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBlbnVtIHByaW50X2xpbmVfdCBwcmludF9wcmludGtfbXNnX29ubHkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQotewotCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwotCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7Ci0Jc3RydWN0IHByaW50X2VudHJ5ICpmaWVsZDsKLQlpbnQgcmV0OwotCi0JdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgZmllbGQtPmJ1Zik7Ci0JaWYgKCFyZXQpCi0JCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQotCWlmIChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0NPTlQpCi0JCXRyYWNlX3NlcV9wcmludF9jb250KHMsIGl0ZXIpOwotCi0JcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKLX0KLQogc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHByaW50X2Jpbl9mbXQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewogCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7CisJc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudDsKIAogCWVudHJ5ID0gaXRlci0+ZW50OwogCi0JaWYgKGVudHJ5LT50eXBlID09IFRSQUNFX0NPTlQpCi0JCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Ci0KLQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBlbnRyeS0+cGlkKTsKLQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBlbnRyeS0+Y3B1KTsKLQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBpdGVyLT50cyk7Ci0KLQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7Ci0JY2FzZSBUUkFDRV9GTjogewotCQlzdHJ1Y3QgZnRyYWNlX2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5pcCk7Ci0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wYXJlbnRfaXApOwotCQlicmVhazsKKwlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX0NPTlRFWFRfSU5GTykgeworCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBlbnRyeS0+cGlkKTsKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgaXRlci0+Y3B1KTsKKwkJU0VRX1BVVF9GSUVMRF9SRVQocywgaXRlci0+dHMpOwogCX0KLQljYXNlIFRSQUNFX0NUWDogewotCQlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZmllbGQ7CiAKLQkJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGVudHJ5KTsKLQotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9waWQpOwotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9wcmlvKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfc3RhdGUpOwotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9waWQpOwotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9wcmlvKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfc3RhdGUpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBUUkFDRV9TUEVDSUFMOgotCWNhc2UgVFJBQ0VfVVNFUl9TVEFDSzoKLQljYXNlIFRSQUNFX1NUQUNLOiB7Ci0JCXN0cnVjdCBzcGVjaWFsX2VudHJ5ICpmaWVsZDsKLQotCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCi0JCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcxKTsKLQkJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzIpOwotCQlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMyk7Ci0JCWJyZWFrOwotCX0KLQl9Ci0JcmV0dXJuIDE7CisJZXZlbnQgPSBmdHJhY2VfZmluZF9ldmVudChlbnRyeS0+dHlwZSk7CisJcmV0dXJuIGV2ZW50ID8gZXZlbnQtPmJpbmFyeShpdGVyLCAwKSA6IFRSQUNFX1RZUEVfSEFORExFRDsKIH0KIAogc3RhdGljIGludCB0cmFjZV9lbXB0eShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7CiAJaW50IGNwdTsKIAorCS8qIElmIHdlIGFyZSBsb29raW5nIGF0IG9uZSBDUFUgYnVmZmVyLCBvbmx5IGNoZWNrIHRoYXQgb25lICovCisJaWYgKGl0ZXItPmNwdV9maWxlICE9IFRSQUNFX1BJUEVfQUxMX0NQVSkgeworCQljcHUgPSBpdGVyLT5jcHVfZmlsZTsKKwkJaWYgKGl0ZXItPmJ1ZmZlcl9pdGVyW2NwdV0pIHsKKwkJCWlmICghcmluZ19idWZmZXJfaXRlcl9lbXB0eShpdGVyLT5idWZmZXJfaXRlcltjcHVdKSkKKwkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICghcmluZ19idWZmZXJfZW1wdHlfY3B1KGl0ZXItPnRyLT5idWZmZXIsIGNwdSkpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCiAJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CiAJCWlmIChpdGVyLT5idWZmZXJfaXRlcltjcHVdKSB7CiAJCQlpZiAoIXJpbmdfYnVmZmVyX2l0ZXJfZW1wdHkoaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSkpCkBAIC0yMzY4LDEwICsxNzgwLDE1IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAorCWlmIChpdGVyLT5lbnQtPnR5cGUgPT0gVFJBQ0VfQlBSSU5UICYmCisJCQl0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUFJJTlRLICYmCisJCQl0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUFJJTlRLX01TR09OTFkpCisJCXJldHVybiB0cmFjZV9wcmludF9icHJpbnRrX21zZ19vbmx5KGl0ZXIpOworCiAJaWYgKGl0ZXItPmVudC0+dHlwZSA9PSBUUkFDRV9QUklOVCAmJgogCQkJdHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1BSSU5USyAmJgogCQkJdHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1BSSU5US19NU0dPTkxZKQotCQlyZXR1cm4gcHJpbnRfcHJpbnRrX21zZ19vbmx5KGl0ZXIpOworCQlyZXR1cm4gdHJhY2VfcHJpbnRfcHJpbnRrX21zZ19vbmx5KGl0ZXIpOwogCiAJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9CSU4pCiAJCXJldHVybiBwcmludF9iaW5fZm10KGl0ZXIpOwpAQCAtMjM4Miw5ICsxNzk5LDYgQEAKIAlpZiAodHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1JBVykKIAkJcmV0dXJuIHByaW50X3Jhd19mbXQoaXRlcik7CiAKLQlpZiAoaXRlci0+aXRlcl9mbGFncyAmIFRSQUNFX0ZJTEVfTEFUX0ZNVCkKLQkJcmV0dXJuIHByaW50X2xhdF9mbXQoaXRlciwgaXRlci0+aWR4LCBpdGVyLT5jcHUpOwotCiAJcmV0dXJuIHByaW50X3RyYWNlX2ZtdChpdGVyKTsKIH0KIApAQCAtMjQyNiwzMCArMTg0MCw0MCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqCi1fX3RyYWNpbmdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50ICpyZXQpCitfX3RyYWNpbmdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlsb25nIGNwdV9maWxlID0gKGxvbmcpIGlub2RlLT5pX3ByaXZhdGU7CisJdm9pZCAqZmFpbF9yZXQgPSBFUlJfUFRSKC1FTk9NRU0pOwogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcjsKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKm07Ci0JaW50IGNwdTsKKwlpbnQgY3B1LCByZXQ7CiAKLQlpZiAodHJhY2luZ19kaXNhYmxlZCkgewotCQkqcmV0ID0gLUVOT0RFVjsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmICh0cmFjaW5nX2Rpc2FibGVkKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIAogCWl0ZXIgPSBremFsbG9jKHNpemVvZigqaXRlciksIEdGUF9LRVJORUwpOwotCWlmICghaXRlcikgewotCQkqcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICghaXRlcikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKKwkvKgorCSAqIFdlIG1ha2UgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHRyYWNlciB0byBhdm9pZCBjb25jdXJyZW50CisJICogY2hhbmdlcyBvbiBpdCB3aGlsZSB3ZSBhcmUgcmVhZGluZy4KKwkgKi8KIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwlpdGVyLT50cmFjZSA9IGt6YWxsb2Moc2l6ZW9mKCppdGVyLT50cmFjZSksIEdGUF9LRVJORUwpOworCWlmICghaXRlci0+dHJhY2UpCisJCWdvdG8gZmFpbDsKKworCWlmIChjdXJyZW50X3RyYWNlKQorCQkqaXRlci0+dHJhY2UgPSAqY3VycmVudF90cmFjZTsKKwogCWlmIChjdXJyZW50X3RyYWNlICYmIGN1cnJlbnRfdHJhY2UtPnByaW50X21heCkKIAkJaXRlci0+dHIgPSAmbWF4X3RyOwogCWVsc2UKLQkJaXRlci0+dHIgPSBpbm9kZS0+aV9wcml2YXRlOwotCWl0ZXItPnRyYWNlID0gY3VycmVudF90cmFjZTsKKwkJaXRlci0+dHIgPSAmZ2xvYmFsX3RyYWNlOwogCWl0ZXItPnBvcyA9IC0xOworCW11dGV4X2luaXQoJml0ZXItPm11dGV4KTsKKwlpdGVyLT5jcHVfZmlsZSA9IGNwdV9maWxlOwogCiAJLyogTm90aWZ5IHRoZSB0cmFjZXIgZWFybHk7IGJlZm9yZSB3ZSBzdG9wIHRyYWNpbmcuICovCiAJaWYgKGl0ZXItPnRyYWNlICYmIGl0ZXItPnRyYWNlLT5vcGVuKQpAQCAtMjQ1OSwyMCArMTg4MywyNCBAQAogCWlmIChyaW5nX2J1ZmZlcl9vdmVycnVucyhpdGVyLT50ci0+YnVmZmVyKSkKIAkJaXRlci0+aXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0FOTk9UQVRFOwogCisJaWYgKGl0ZXItPmNwdV9maWxlID09IFRSQUNFX1BJUEVfQUxMX0NQVSkgeworCQlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKIAotCWZvcl9lYWNoX3RyYWNpbmdfY3B1KGNwdSkgewotCisJCQlpdGVyLT5idWZmZXJfaXRlcltjcHVdID0KKwkJCQlyaW5nX2J1ZmZlcl9yZWFkX3N0YXJ0KGl0ZXItPnRyLT5idWZmZXIsIGNwdSk7CisJCX0KKwl9IGVsc2UgeworCQljcHUgPSBpdGVyLT5jcHVfZmlsZTsKIAkJaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSA9Ci0JCQlyaW5nX2J1ZmZlcl9yZWFkX3N0YXJ0KGl0ZXItPnRyLT5idWZmZXIsIGNwdSk7Ci0KLQkJaWYgKCFpdGVyLT5idWZmZXJfaXRlcltjcHVdKQotCQkJZ290byBmYWlsX2J1ZmZlcjsKKwkJCQlyaW5nX2J1ZmZlcl9yZWFkX3N0YXJ0KGl0ZXItPnRyLT5idWZmZXIsIGNwdSk7CiAJfQogCiAJLyogVE9ETyBzdG9wIHRyYWNlciAqLwotCSpyZXQgPSBzZXFfb3BlbihmaWxlLCAmdHJhY2VyX3NlcV9vcHMpOwotCWlmICgqcmV0KQorCXJldCA9IHNlcV9vcGVuKGZpbGUsICZ0cmFjZXJfc2VxX29wcyk7CisJaWYgKHJldCA8IDApIHsKKwkJZmFpbF9yZXQgPSBFUlJfUFRSKHJldCk7CiAJCWdvdG8gZmFpbF9idWZmZXI7CisJfQogCiAJbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAltLT5wcml2YXRlID0gaXRlcjsKQEAgLTI0ODIsNyArMTkxMCw2IEBACiAKIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0gb3V0OgogCXJldHVybiBpdGVyOwogCiAgZmFpbF9idWZmZXI6CkBAIC0yNDkwLDEwICsxOTE3LDEyIEBACiAJCWlmIChpdGVyLT5idWZmZXJfaXRlcltjcHVdKQogCQkJcmluZ19idWZmZXJfcmVhZF9maW5pc2goaXRlci0+YnVmZmVyX2l0ZXJbY3B1XSk7CiAJfQorIGZhaWw6CiAJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwlrZnJlZShpdGVyLT50cmFjZSk7CiAJa2ZyZWUoaXRlcik7CiAKLQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlyZXR1cm4gZmFpbF9yZXQ7CiB9CiAKIGludCB0cmFjaW5nX29wZW5fZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTI1MDUsMTIgKzE5MzQsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHRyYWNpbmdfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgdHJhY2luZ19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBzZXFfZmlsZSAqbSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXI7CiAJaW50IGNwdTsKIAorCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQorCQlyZXR1cm4gMDsKKworCWl0ZXIgPSBtLT5wcml2YXRlOworCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CiAJCWlmIChpdGVyLT5idWZmZXJfaXRlcltjcHVdKQpAQCAtMjUyNSwzMyArMTk1OSwzOCBAQAogCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAKIAlzZXFfcmVsZWFzZShpbm9kZSwgZmlsZSk7CisJbXV0ZXhfZGVzdHJveSgmaXRlci0+bXV0ZXgpOworCWtmcmVlKGl0ZXItPnRyYWNlKTsKIAlrZnJlZShpdGVyKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0cmFjaW5nX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IHJldDsKLQotCV9fdHJhY2luZ19vcGVuKGlub2RlLCBmaWxlLCAmcmV0KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdHJhY2luZ19sdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcjsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCi0JaXRlciA9IF9fdHJhY2luZ19vcGVuKGlub2RlLCBmaWxlLCAmcmV0KTsKKwkvKiBJZiB0aGlzIGZpbGUgd2FzIG9wZW4gZm9yIHdyaXRlLCB0aGVuIGVyYXNlIGNvbnRlbnRzICovCisJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYKKwkgICAgIShmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpKSB7CisJCWxvbmcgY3B1ID0gKGxvbmcpIGlub2RlLT5pX3ByaXZhdGU7CiAKLQlpZiAoIXJldCkKLQkJaXRlci0+aXRlcl9mbGFncyB8PSBUUkFDRV9GSUxFX0xBVF9GTVQ7CisJCWlmIChjcHUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKQorCQkJdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cygmZ2xvYmFsX3RyYWNlKTsKKwkJZWxzZQorCQkJdHJhY2luZ19yZXNldCgmZ2xvYmFsX3RyYWNlLCBjcHUpOworCX0KIAorCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CisJCWl0ZXIgPSBfX3RyYWNpbmdfb3Blbihpbm9kZSwgZmlsZSk7CisJCWlmIChJU19FUlIoaXRlcikpCisJCQlyZXQgPSBQVFJfRVJSKGl0ZXIpOworCQllbHNlIGlmICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfTEFURU5DWV9GTVQpCisJCQlpdGVyLT5pdGVyX2ZsYWdzIHw9IFRSQUNFX0ZJTEVfTEFUX0ZNVDsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAotCiBzdGF0aWMgdm9pZCAqCiB0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKQEAgLTI2MjMsMjEgKzIwNjIsMjIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2ZvcHMgPSB7CitzdGF0aWMgc3NpemVfdAordHJhY2luZ193cml0ZV9zdHViKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAorCS53cml0ZQkJPSB0cmFjaW5nX3dyaXRlX3N0dWIsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UJPSB0cmFjaW5nX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2x0X2ZvcHMgPSB7Ci0JLm9wZW4JCT0gdHJhY2luZ19sdF9vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gdHJhY2luZ19yZWxlYXNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2hvd190cmFjZXNfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNob3dfdHJhY2VzX2ZvcHMgPSB7CiAJLm9wZW4JCT0gc2hvd190cmFjZXNfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLApAQCAtMjczMCw3ICsyMTcwLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2NwdW1hc2tfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfY3B1bWFza19mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfY3B1bWFza19yZWFkLAogCS53cml0ZQkJPSB0cmFjaW5nX2NwdW1hc2tfd3JpdGUsCkBAIC0yNzQwLDU3ICsyMTgwLDYyIEBACiB0cmFjaW5nX3RyYWNlX29wdGlvbnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCiAJCSAgICAgICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JaW50IGk7CisJc3RydWN0IHRyYWNlcl9vcHQgKnRyYWNlX29wdHM7CisJdTMyIHRyYWNlcl9mbGFnczsKKwlpbnQgbGVuID0gMDsKIAljaGFyICpidWY7CiAJaW50IHIgPSAwOwotCWludCBsZW4gPSAwOwotCXUzMiB0cmFjZXJfZmxhZ3MgPSBjdXJyZW50X3RyYWNlLT5mbGFncy0+dmFsOwotCXN0cnVjdCB0cmFjZXJfb3B0ICp0cmFjZV9vcHRzID0gY3VycmVudF90cmFjZS0+ZmxhZ3MtPm9wdHM7CisJaW50IGk7CiAKIAotCS8qIGNhbHVsYXRlIG1heCBzaXplICovCisJLyogY2FsY3VsYXRlIG1heCBzaXplICovCiAJZm9yIChpID0gMDsgdHJhY2Vfb3B0aW9uc1tpXTsgaSsrKSB7CiAJCWxlbiArPSBzdHJsZW4odHJhY2Vfb3B0aW9uc1tpXSk7Ci0JCWxlbiArPSAzOyAvKiAibm8iIGFuZCBzcGFjZSAqLworCQlsZW4gKz0gMzsgLyogIm5vIiBhbmQgbmV3bGluZSAqLwogCX0KIAorCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCXRyYWNlcl9mbGFncyA9IGN1cnJlbnRfdHJhY2UtPmZsYWdzLT52YWw7CisJdHJhY2Vfb3B0cyA9IGN1cnJlbnRfdHJhY2UtPmZsYWdzLT5vcHRzOworCiAJLyoKIAkgKiBJbmNyZWFzZSB0aGUgc2l6ZSB3aXRoIG5hbWVzIG9mIG9wdGlvbnMgc3BlY2lmaWMKIAkgKiBvZiB0aGUgY3VycmVudCB0cmFjZXIuCiAJICovCiAJZm9yIChpID0gMDsgdHJhY2Vfb3B0c1tpXS5uYW1lOyBpKyspIHsKIAkJbGVuICs9IHN0cmxlbih0cmFjZV9vcHRzW2ldLm5hbWUpOwotCQlsZW4gKz0gMzsgLyogIm5vIiBhbmQgc3BhY2UgKi8KKwkJbGVuICs9IDM7IC8qICJubyIgYW5kIG5ld2xpbmUgKi8KIAl9CiAKIAkvKiArMiBmb3IgXG4gYW5kIFwwICovCiAJYnVmID0ga21hbGxvYyhsZW4gKyAyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikKKwlpZiAoIWJ1ZikgeworCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAlmb3IgKGkgPSAwOyB0cmFjZV9vcHRpb25zW2ldOyBpKyspIHsKIAkJaWYgKHRyYWNlX2ZsYWdzICYgKDEgPDwgaSkpCi0JCQlyICs9IHNwcmludGYoYnVmICsgciwgIiVzICIsIHRyYWNlX29wdGlvbnNbaV0pOworCQkJciArPSBzcHJpbnRmKGJ1ZiArIHIsICIlc1xuIiwgdHJhY2Vfb3B0aW9uc1tpXSk7CiAJCWVsc2UKLQkJCXIgKz0gc3ByaW50ZihidWYgKyByLCAibm8lcyAiLCB0cmFjZV9vcHRpb25zW2ldKTsKKwkJCXIgKz0gc3ByaW50ZihidWYgKyByLCAibm8lc1xuIiwgdHJhY2Vfb3B0aW9uc1tpXSk7CiAJfQogCiAJZm9yIChpID0gMDsgdHJhY2Vfb3B0c1tpXS5uYW1lOyBpKyspIHsKIAkJaWYgKHRyYWNlcl9mbGFncyAmIHRyYWNlX29wdHNbaV0uYml0KQotCQkJciArPSBzcHJpbnRmKGJ1ZiArIHIsICIlcyAiLAorCQkJciArPSBzcHJpbnRmKGJ1ZiArIHIsICIlc1xuIiwKIAkJCQl0cmFjZV9vcHRzW2ldLm5hbWUpOwogCQllbHNlCi0JCQlyICs9IHNwcmludGYoYnVmICsgciwgIm5vJXMgIiwKKwkJCXIgKz0gc3ByaW50ZihidWYgKyByLCAibm8lc1xuIiwKIAkJCQl0cmFjZV9vcHRzW2ldLm5hbWUpOwogCX0KKwltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCi0JciArPSBzcHJpbnRmKGJ1ZiArIHIsICJcbiIpOwogCVdBUk5fT04ociA+PSBsZW4gKyAyKTsKIAogCXIgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsIGJ1Ziwgcik7CiAKIAlrZnJlZShidWYpOwotCiAJcmV0dXJuIHI7CiB9CiAKQEAgLTI4MjgsNiArMjI3MywzNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzZXRfdHJhY2VyX2ZsYWdzKHVuc2lnbmVkIGludCBtYXNrLCBpbnQgZW5hYmxlZCkKK3sKKwkvKiBkbyBub3RoaW5nIGlmIGZsYWcgaXMgYWxyZWFkeSBzZXQgKi8KKwlpZiAoISEodHJhY2VfZmxhZ3MgJiBtYXNrKSA9PSAhIWVuYWJsZWQpCisJCXJldHVybjsKKworCWlmIChlbmFibGVkKQorCQl0cmFjZV9mbGFncyB8PSBtYXNrOworCWVsc2UKKwkJdHJhY2VfZmxhZ3MgJj0gfm1hc2s7CisKKwlpZiAobWFzayA9PSBUUkFDRV9JVEVSX0dMT0JBTF9DTEspIHsKKwkJdTY0ICgqZnVuYykodm9pZCk7CisKKwkJaWYgKGVuYWJsZWQpCisJCQlmdW5jID0gdHJhY2VfY2xvY2tfZ2xvYmFsOworCQllbHNlCisJCQlmdW5jID0gdHJhY2VfY2xvY2tfbG9jYWw7CisKKwkJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJCXJpbmdfYnVmZmVyX3NldF9jbG9jayhnbG9iYWxfdHJhY2UuYnVmZmVyLCBmdW5jKTsKKworCQlpZiAobWF4X3RyLmJ1ZmZlcikKKwkJCXJpbmdfYnVmZmVyX3NldF9jbG9jayhtYXhfdHIuYnVmZmVyLCBmdW5jKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwl9Cit9CisKIHN0YXRpYyBzc2l6ZV90CiB0cmFjaW5nX3RyYWNlX29wdGlvbnNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAogCQkJc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQpAQCAtMjg1NSwxNyArMjMyOCwxNiBAQAogCQlpbnQgbGVuID0gc3RybGVuKHRyYWNlX29wdGlvbnNbaV0pOwogCiAJCWlmIChzdHJuY21wKGNtcCwgdHJhY2Vfb3B0aW9uc1tpXSwgbGVuKSA9PSAwKSB7Ci0JCQlpZiAobmVnKQotCQkJCXRyYWNlX2ZsYWdzICY9IH4oMSA8PCBpKTsKLQkJCWVsc2UKLQkJCQl0cmFjZV9mbGFncyB8PSAoMSA8PCBpKTsKKwkJCXNldF90cmFjZXJfZmxhZ3MoMSA8PCBpLCAhbmVnKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCiAJLyogSWYgbm8gb3B0aW9uIGNvdWxkIGJlIHNldCwgdGVzdCB0aGUgc3BlY2lmaWMgdHJhY2VyIG9wdGlvbnMgKi8KIAlpZiAoIXRyYWNlX29wdGlvbnNbaV0pIHsKKwkJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAJCXJldCA9IHNldF90cmFjZXJfb3B0aW9uKGN1cnJlbnRfdHJhY2UsIGNtcCwgbmVnKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMjg3NSw3ICsyMzQ3LDcgQEAKIAlyZXR1cm4gY250OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2l0ZXJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfaXRlcl9mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfdHJhY2Vfb3B0aW9uc19yZWFkLAogCS53cml0ZQkJPSB0cmFjaW5nX3RyYWNlX29wdGlvbnNfd3JpdGUsCkBAIC0yOTA4LDcgKzIzODAsNyBAQAogCQkJCQlyZWFkbWVfbXNnLCBzdHJsZW4ocmVhZG1lX21zZykpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX3JlYWRtZV9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19yZWFkbWVfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX3JlYWRtZV9yZWFkLAogfTsKQEAgLTI5MzAsNyArMjQwMiw3IEBACiB7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAljaGFyIGJ1Zls2NF07Ci0JbG9uZyB2YWw7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IHJldDsKIAogCWlmIChjbnQgPj0gc2l6ZW9mKGJ1ZikpCkBAIC0yOTg1LDEzICsyNDU3LDEwNSBAQAogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsIGJ1Ziwgcik7CiB9CiAKLXN0YXRpYyBpbnQgdHJhY2luZ19zZXRfdHJhY2VyKGNoYXIgKmJ1ZikKK2ludCB0cmFjZXJfaW5pdChzdHJ1Y3QgdHJhY2VyICp0LCBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogeworCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOworCXJldHVybiB0LT5pbml0KHRyKTsKK30KKworc3RhdGljIGludCB0cmFjaW5nX3Jlc2l6ZV9yaW5nX2J1ZmZlcih1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IHJldDsKKworCS8qCisJICogSWYga2VybmVsIG9yIHVzZXIgY2hhbmdlcyB0aGUgc2l6ZSBvZiB0aGUgcmluZyBidWZmZXIKKwkgKiB3ZSB1c2UgdGhlIHNpemUgdGhhdCB3YXMgZ2l2ZW4sIGFuZCB3ZSBjYW4gZm9yZ2V0IGFib3V0CisJICogZXhwYW5kaW5nIGl0IGxhdGVyLgorCSAqLworCXJpbmdfYnVmZmVyX2V4cGFuZGVkID0gMTsKKworCXJldCA9IHJpbmdfYnVmZmVyX3Jlc2l6ZShnbG9iYWxfdHJhY2UuYnVmZmVyLCBzaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHJpbmdfYnVmZmVyX3Jlc2l6ZShtYXhfdHIuYnVmZmVyLCBzaXplKTsKKwlpZiAocmV0IDwgMCkgeworCQlpbnQgcjsKKworCQlyID0gcmluZ19idWZmZXJfcmVzaXplKGdsb2JhbF90cmFjZS5idWZmZXIsCisJCQkJICAgICAgIGdsb2JhbF90cmFjZS5lbnRyaWVzKTsKKwkJaWYgKHIgPCAwKSB7CisJCQkvKgorCQkJICogQUFSR0ghIFdlIGFyZSBsZWZ0IHdpdGggZGlmZmVyZW50CisJCQkgKiBzaXplIG1heCBidWZmZXIhISEhCisJCQkgKiBUaGUgbWF4IGJ1ZmZlciBpcyBvdXIgInNuYXBzaG90IiBidWZmZXIuCisJCQkgKiBXaGVuIGEgdHJhY2VyIG5lZWRzIGEgc25hcHNob3QgKG9uZSBvZiB0aGUKKwkJCSAqIGxhdGVuY3kgdHJhY2VycyksIGl0IHN3YXBzIHRoZSBtYXggYnVmZmVyCisJCQkgKiB3aXRoIHRoZSBzYXZlZCBzbmFwIHNob3QuIFdlIHN1Y2NlZWRlZCB0bworCQkJICogdXBkYXRlIHRoZSBzaXplIG9mIHRoZSBtYWluIGJ1ZmZlciwgYnV0IGZhaWxlZCB0bworCQkJICogdXBkYXRlIHRoZSBzaXplIG9mIHRoZSBtYXggYnVmZmVyLiBCdXQgd2hlbiB3ZSB0cmllZAorCQkJICogdG8gcmVzZXQgdGhlIG1haW4gYnVmZmVyIHRvIHRoZSBvcmlnaW5hbCBzaXplLCB3ZQorCQkJICogZmFpbGVkIHRoZXJlIHRvby4gVGhpcyBpcyB2ZXJ5IHVubGlrZWx5IHRvCisJCQkgKiBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzLCB3YXJuIGFuZCBraWxsIGFsbAorCQkJICogdHJhY2luZy4KKwkJCSAqLworCQkJV0FSTl9PTigxKTsKKwkJCXRyYWNpbmdfZGlzYWJsZWQgPSAxOworCQl9CisJCXJldHVybiByZXQ7CisJfQorCisJZ2xvYmFsX3RyYWNlLmVudHJpZXMgPSBzaXplOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB0cmFjaW5nX3VwZGF0ZV9idWZmZXJzIC0gdXNlZCBieSB0cmFjaW5nIGZhY2lsaXR5IHRvIGV4cGFuZCByaW5nIGJ1ZmZlcnMKKyAqCisgKiBUbyBzYXZlIG9uIG1lbW9yeSB3aGVuIHRoZSB0cmFjaW5nIGlzIG5ldmVyIHVzZWQgb24gYSBzeXN0ZW0gd2l0aCBpdAorICogY29uZmlndXJlZCBpbi4gVGhlIHJpbmcgYnVmZmVycyBhcmUgc2V0IHRvIGEgbWluaW11bSBzaXplLiBCdXQgb25jZQorICogYSB1c2VyIHN0YXJ0cyB0byB1c2UgdGhlIHRyYWNpbmcgZmFjaWxpdHksIHRoZW4gdGhleSBuZWVkIHRvIGdyb3cKKyAqIHRvIHRoZWlyIGRlZmF1bHQgc2l6ZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZCB3aGVuIGEgdHJhY2VyIGlzIGFib3V0IHRvIGJlIHVzZWQuCisgKi8KK2ludCB0cmFjaW5nX3VwZGF0ZV9idWZmZXJzKHZvaWQpCit7CisJaW50IHJldCA9IDA7CisKKwltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwlpZiAoIXJpbmdfYnVmZmVyX2V4cGFuZGVkKQorCQlyZXQgPSB0cmFjaW5nX3Jlc2l6ZV9yaW5nX2J1ZmZlcih0cmFjZV9idWZfc2l6ZSk7CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCB0cmFjZV9vcHRpb25fZGVudHJ5OworCitzdGF0aWMgc3RydWN0IHRyYWNlX29wdGlvbl9kZW50cnkgKgorY3JlYXRlX3RyYWNlX29wdGlvbl9maWxlcyhzdHJ1Y3QgdHJhY2VyICp0cmFjZXIpOworCitzdGF0aWMgdm9pZAorZGVzdHJveV90cmFjZV9vcHRpb25fZmlsZXMoc3RydWN0IHRyYWNlX29wdGlvbl9kZW50cnkgKnRvcHRzKTsKKworc3RhdGljIGludCB0cmFjaW5nX3NldF90cmFjZXIoY29uc3QgY2hhciAqYnVmKQoreworCXN0YXRpYyBzdHJ1Y3QgdHJhY2Vfb3B0aW9uX2RlbnRyeSAqdG9wdHM7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICZnbG9iYWxfdHJhY2U7CiAJc3RydWN0IHRyYWNlciAqdDsKIAlpbnQgcmV0ID0gMDsKIAogCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCisJaWYgKCFyaW5nX2J1ZmZlcl9leHBhbmRlZCkgeworCQlyZXQgPSB0cmFjaW5nX3Jlc2l6ZV9yaW5nX2J1ZmZlcih0cmFjZV9idWZfc2l6ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCXJldCA9IDA7CisJfQorCiAJZm9yICh0ID0gdHJhY2VfdHlwZXM7IHQ7IHQgPSB0LT5uZXh0KSB7CiAJCWlmIChzdHJjbXAodC0+bmFtZSwgYnVmKSA9PSAwKQogCQkJYnJlYWs7CkBAIC0zMDA3LDkgKzI1NzEsMTQgQEAKIAlpZiAoY3VycmVudF90cmFjZSAmJiBjdXJyZW50X3RyYWNlLT5yZXNldCkKIAkJY3VycmVudF90cmFjZS0+cmVzZXQodHIpOwogCisJZGVzdHJveV90cmFjZV9vcHRpb25fZmlsZXModG9wdHMpOworCiAJY3VycmVudF90cmFjZSA9IHQ7CisKKwl0b3B0cyA9IGNyZWF0ZV90cmFjZV9vcHRpb25fZmlsZXMoY3VycmVudF90cmFjZSk7CisKIAlpZiAodC0+aW5pdCkgewotCQlyZXQgPSB0LT5pbml0KHRyKTsKKwkJcmV0ID0gdHJhY2VyX2luaXQodCwgdHIpOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAJfQpAQCAtMzA3Miw5ICsyNjQxLDkgQEAKIHRyYWNpbmdfbWF4X2xhdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCiAJCSAgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKLQlsb25nICpwdHIgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyAqcHRyID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgYnVmWzY0XTsKLQlsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgcmV0OwogCiAJaWYgKGNudCA+PSBzaXplb2YoYnVmKSkKQEAgLTMwOTQsNTQgKzI2NjMsOTYgQEAKIAlyZXR1cm4gY250OwogfQogCi1zdGF0aWMgYXRvbWljX3QgdHJhY2luZ19yZWFkZXI7Ci0KIHN0YXRpYyBpbnQgdHJhY2luZ19vcGVuX3BpcGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CisJbG9uZyBjcHVfZmlsZSA9IChsb25nKSBpbm9kZS0+aV9wcml2YXRlOwogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcjsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICh0cmFjaW5nX2Rpc2FibGVkKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIFdlIG9ubHkgYWxsb3cgZm9yIHJlYWRlciBvZiB0aGUgcGlwZSAqLwotCWlmIChhdG9taWNfaW5jX3JldHVybigmdHJhY2luZ19yZWFkZXIpICE9IDEpIHsKLQkJYXRvbWljX2RlYygmdHJhY2luZ19yZWFkZXIpOwotCQlyZXR1cm4gLUVCVVNZOworCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCisJLyogV2Ugb25seSBhbGxvdyBvbmUgcmVhZGVyIHBlciBjcHUgKi8KKwlpZiAoY3B1X2ZpbGUgPT0gVFJBQ0VfUElQRV9BTExfQ1BVKSB7CisJCWlmICghY3B1bWFza19lbXB0eSh0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKSkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KKwkJY3B1bWFza19zZXRhbGwodHJhY2luZ19yZWFkZXJfY3B1bWFzayk7CisJfSBlbHNlIHsKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGNwdV9maWxlLCB0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKSkKKwkJCWNwdW1hc2tfc2V0X2NwdShjcHVfZmlsZSwgdHJhY2luZ19yZWFkZXJfY3B1bWFzayk7CisJCWVsc2UgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAkvKiBjcmVhdGUgYSBidWZmZXIgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIHRvIHBhc3MgdG8gdXNlcnNwYWNlICovCiAJaXRlciA9IGt6YWxsb2Moc2l6ZW9mKCppdGVyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpdGVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmICghYWxsb2NfY3B1bWFza192YXIoJml0ZXItPnN0YXJ0ZWQsIEdGUF9LRVJORUwpKSB7Ci0JCWtmcmVlKGl0ZXIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIWl0ZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAJfQogCi0JbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJLyoKKwkgKiBXZSBtYWtlIGEgY29weSBvZiB0aGUgY3VycmVudCB0cmFjZXIgdG8gYXZvaWQgY29uY3VycmVudAorCSAqIGNoYW5nZXMgb24gaXQgd2hpbGUgd2UgYXJlIHJlYWRpbmcuCisJICovCisJaXRlci0+dHJhY2UgPSBrbWFsbG9jKHNpemVvZigqaXRlci0+dHJhY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWl0ZXItPnRyYWNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisJaWYgKGN1cnJlbnRfdHJhY2UpCisJCSppdGVyLT50cmFjZSA9ICpjdXJyZW50X3RyYWNlOworCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmaXRlci0+c3RhcnRlZCwgR0ZQX0tFUk5FTCkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KIAogCS8qIHRyYWNlIHBpcGUgZG9lcyBub3Qgc2hvdyBzdGFydCBvZiBidWZmZXIgKi8KIAljcHVtYXNrX3NldGFsbChpdGVyLT5zdGFydGVkKTsKIAorCWl0ZXItPmNwdV9maWxlID0gY3B1X2ZpbGU7CiAJaXRlci0+dHIgPSAmZ2xvYmFsX3RyYWNlOwotCWl0ZXItPnRyYWNlID0gY3VycmVudF90cmFjZTsKKwltdXRleF9pbml0KCZpdGVyLT5tdXRleCk7CiAJZmlscC0+cHJpdmF0ZV9kYXRhID0gaXRlcjsKIAogCWlmIChpdGVyLT50cmFjZS0+cGlwZV9vcGVuKQogCQlpdGVyLT50cmFjZS0+cGlwZV9vcGVuKGl0ZXIpOwotCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAKLQlyZXR1cm4gMDsKK291dDoKKwltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCXJldHVybiByZXQ7CisKK2ZhaWw6CisJa2ZyZWUoaXRlci0+dHJhY2UpOworCWtmcmVlKGl0ZXIpOworCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB0cmFjaW5nX3JlbGVhc2VfcGlwZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKKwltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKworCWlmIChpdGVyLT5jcHVfZmlsZSA9PSBUUkFDRV9QSVBFX0FMTF9DUFUpCisJCWNwdW1hc2tfY2xlYXIodHJhY2luZ19yZWFkZXJfY3B1bWFzayk7CisJZWxzZQorCQljcHVtYXNrX2NsZWFyX2NwdShpdGVyLT5jcHVfZmlsZSwgdHJhY2luZ19yZWFkZXJfY3B1bWFzayk7CisKKwltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCiAJZnJlZV9jcHVtYXNrX3ZhcihpdGVyLT5zdGFydGVkKTsKKwltdXRleF9kZXN0cm95KCZpdGVyLT5tdXRleCk7CisJa2ZyZWUoaXRlci0+dHJhY2UpOwogCWtmcmVlKGl0ZXIpOwotCWF0b21pY19kZWMoJnRyYWNpbmdfcmVhZGVyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzE2Nyw2NyArMjc3OCw1NyBAQAogCX0KIH0KIAorCit2b2lkIGRlZmF1bHRfd2FpdF9waXBlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlERUZJTkVfV0FJVCh3YWl0KTsKKworCXByZXBhcmVfdG9fd2FpdCgmdHJhY2Vfd2FpdCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisKKwlpZiAodHJhY2VfZW1wdHkoaXRlcikpCisJCXNjaGVkdWxlKCk7CisKKwlmaW5pc2hfd2FpdCgmdHJhY2Vfd2FpdCwgJndhaXQpOworfQorCiAvKgotICogQ29uc3VtZXIgcmVhZGVyLgorICogVGhpcyBpcyBhIG1ha2Utc2hpZnQgd2FpdHF1ZXVlLgorICogQSB0cmFjZXIgbWlnaHQgdXNlIHRoaXMgY2FsbGJhY2sgb24gc29tZSByYXJlIGNhc2VzOgorICoKKyAqICAxKSB0aGUgY3VycmVudCB0cmFjZXIgbWlnaHQgaG9sZCB0aGUgcnVucXVldWUgbG9jayB3aGVuIGl0IHdha2VzIHVwCisgKiAgICAgYSByZWFkZXIsIGhlbmNlIGEgZGVhZGxvY2sgKHNjaGVkLCBmdW5jdGlvbiwgYW5kIGZ1bmN0aW9uIGdyYXBoIHRyYWNlcnMpCisgKiAgMikgdGhlIGZ1bmN0aW9uIHRyYWNlcnMsIHRyYWNlIGFsbCBmdW5jdGlvbnMsIHdlIGRvbid0IHdhbnQKKyAqICAgICB0aGUgb3ZlcmhlYWQgb2YgY2FsbGluZyB3YWtlX3VwIGFuZCBmcmllbmRzCisgKiAgICAgKGFuZCB0cmFjaW5nIHRoZW0gdG9vKQorICoKKyAqICAgICBBbnl3YXksIHRoaXMgaXMgcmVhbGx5IHZlcnkgcHJpbWl0aXZlIHdha2V1cC4KICAqLwotc3RhdGljIHNzaXplX3QKLXRyYWNpbmdfcmVhZF9waXBlKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKLQkJICBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCit2b2lkIHBvbGxfd2FpdF9waXBlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCS8qIHNsZWVwIGZvciAxMDAgbXNlY3MsIGFuZCB0cnkgYWdhaW4uICovCisJc2NoZWR1bGVfdGltZW91dChIWiAvIDEwKTsKK30KKworLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0cmFjZV90eXBlc19sb2NrIG11dGV4IGhlbGQuICovCitzdGF0aWMgaW50IHRyYWNpbmdfd2FpdF9waXBlKHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlzc2l6ZV90IHNyZXQ7CiAKLQkvKiByZXR1cm4gYW55IGxlZnRvdmVyIGRhdGEgKi8KLQlzcmV0ID0gdHJhY2Vfc2VxX3RvX3VzZXIoJml0ZXItPnNlcSwgdWJ1ZiwgY250KTsKLQlpZiAoc3JldCAhPSAtRUJVU1kpCi0JCXJldHVybiBzcmV0OwotCi0JdHJhY2Vfc2VxX3Jlc2V0KCZpdGVyLT5zZXEpOwotCi0JbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7Ci0JaWYgKGl0ZXItPnRyYWNlLT5yZWFkKSB7Ci0JCXNyZXQgPSBpdGVyLT50cmFjZS0+cmVhZChpdGVyLCBmaWxwLCB1YnVmLCBjbnQsIHBwb3MpOwotCQlpZiAoc3JldCkKLQkJCWdvdG8gb3V0OwotCX0KLQotd2FpdGFnYWluOgotCXNyZXQgPSAwOwogCXdoaWxlICh0cmFjZV9lbXB0eShpdGVyKSkgewogCiAJCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKSB7Ci0JCQlzcmV0ID0gLUVBR0FJTjsKLQkJCWdvdG8gb3V0OworCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAotCQkvKgotCQkgKiBUaGlzIGlzIGEgbWFrZS1zaGlmdCB3YWl0cXVldWUuIFRoZSByZWFzb24gd2UgZG9uJ3QgdXNlCi0JCSAqIGFuIGFjdHVhbCB3YWl0IHF1ZXVlIGlzIGJlY2F1c2U6Ci0JCSAqICAxKSB3ZSBvbmx5IGV2ZXIgaGF2ZSBvbmUgd2FpdGVyCi0JCSAqICAyKSB0aGUgdHJhY2luZywgdHJhY2VzIGFsbCBmdW5jdGlvbnMsIHdlIGRvbid0IHdhbnQKLQkJICogICAgIHRoZSBvdmVyaGVhZCBvZiBjYWxsaW5nIHdha2VfdXAgYW5kIGZyaWVuZHMKLQkJICogICAgIChhbmQgdHJhY2luZyB0aGVtIHRvbykKLQkJICogICAgIEFueXdheSwgdGhpcyBpcyByZWFsbHkgdmVyeSBwcmltaXRpdmUgd2FrZXVwLgotCQkgKi8KLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJaXRlci0+dHItPndhaXRlciA9IGN1cnJlbnQ7CisJCW11dGV4X3VubG9jaygmaXRlci0+bXV0ZXgpOwogCi0JCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJCWl0ZXItPnRyYWNlLT53YWl0X3BpcGUoaXRlcik7CiAKLQkJLyogc2xlZXAgZm9yIDEwMCBtc2VjcywgYW5kIHRyeSBhZ2Fpbi4gKi8KLQkJc2NoZWR1bGVfdGltZW91dChIWi8xMCk7CisJCW11dGV4X2xvY2soJml0ZXItPm11dGV4KTsKIAotCQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQotCQlpdGVyLT50ci0+d2FpdGVyID0gTlVMTDsKLQotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCXNyZXQgPSAtRUlOVFI7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWlmIChpdGVyLT50cmFjZSAhPSBjdXJyZW50X3RyYWNlKQotCQkJZ290byBvdXQ7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJCXJldHVybiAtRUlOVFI7CiAKIAkJLyoKIAkJICogV2UgYmxvY2sgdW50aWwgd2UgcmVhZCBzb21ldGhpbmcgYW5kIHRyYWNpbmcgaXMgZGlzYWJsZWQuCkBAIC0zMjQwLDE0ICsyODQxLDYwIEBACiAJCSAqLwogCQlpZiAoIXRyYWNlcl9lbmFibGVkICYmIGl0ZXItPnBvcykKIAkJCWJyZWFrOwotCi0JCWNvbnRpbnVlOwogCX0KIAotCS8qIHN0b3Agd2hlbiB0cmFjaW5nIGlzIGZpbmlzaGVkICovCi0JaWYgKHRyYWNlX2VtcHR5KGl0ZXIpKQorCXJldHVybiAxOworfQorCisvKgorICogQ29uc3VtZXIgcmVhZGVyLgorICovCitzdGF0aWMgc3NpemVfdAordHJhY2luZ19yZWFkX3BpcGUoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAorCQkgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RhdGljIHN0cnVjdCB0cmFjZXIgKm9sZF90cmFjZXI7CisJc3NpemVfdCBzcmV0OworCisJLyogcmV0dXJuIGFueSBsZWZ0b3ZlciBkYXRhICovCisJc3JldCA9IHRyYWNlX3NlcV90b191c2VyKCZpdGVyLT5zZXEsIHVidWYsIGNudCk7CisJaWYgKHNyZXQgIT0gLUVCVVNZKQorCQlyZXR1cm4gc3JldDsKKworCXRyYWNlX3NlcV9pbml0KCZpdGVyLT5zZXEpOworCisJLyogY29weSB0aGUgdHJhY2VyIHRvIGF2b2lkIHVzaW5nIGEgZ2xvYmFsIGxvY2sgYWxsIGFyb3VuZCAqLworCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCWlmICh1bmxpa2VseShvbGRfdHJhY2VyICE9IGN1cnJlbnRfdHJhY2UgJiYgY3VycmVudF90cmFjZSkpIHsKKwkJb2xkX3RyYWNlciA9IGN1cnJlbnRfdHJhY2U7CisJCSppdGVyLT50cmFjZSA9ICpjdXJyZW50X3RyYWNlOworCX0KKwltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCisJLyoKKwkgKiBBdm9pZCBtb3JlIHRoYW4gb25lIGNvbnN1bWVyIG9uIGEgc2luZ2xlIGZpbGUgZGVzY3JpcHRvcgorCSAqIFRoaXMgaXMganVzdCBhIG1hdHRlciBvZiB0cmFjZXMgY29oZXJlbmN5LCB0aGUgcmluZyBidWZmZXIgaXRzZWxmCisJICogaXMgcHJvdGVjdGVkLgorCSAqLworCW11dGV4X2xvY2soJml0ZXItPm11dGV4KTsKKwlpZiAoaXRlci0+dHJhY2UtPnJlYWQpIHsKKwkJc3JldCA9IGl0ZXItPnRyYWNlLT5yZWFkKGl0ZXIsIGZpbHAsIHVidWYsIGNudCwgcHBvcyk7CisJCWlmIChzcmV0KQorCQkJZ290byBvdXQ7CisJfQorCit3YWl0YWdhaW46CisJc3JldCA9IHRyYWNpbmdfd2FpdF9waXBlKGZpbHApOworCWlmIChzcmV0IDw9IDApCiAJCWdvdG8gb3V0OwogCisJLyogc3RvcCB3aGVuIHRyYWNpbmcgaXMgZmluaXNoZWQgKi8KKwlpZiAodHJhY2VfZW1wdHkoaXRlcikpIHsKKwkJc3JldCA9IDA7CisJCWdvdG8gb3V0OworCX0KKwogCWlmIChjbnQgPj0gUEFHRV9TSVpFKQogCQljbnQgPSBQQUdFX1NJWkUgLSAxOwogCkBAIC0zMjY3LDggKzI5MTQsOCBAQAogCQkJaXRlci0+c2VxLmxlbiA9IGxlbjsKIAkJCWJyZWFrOwogCQl9Ci0KLQkJdHJhY2VfY29uc3VtZShpdGVyKTsKKwkJaWYgKHJldCAhPSBUUkFDRV9UWVBFX05PX0NPTlNVTUUpCisJCQl0cmFjZV9jb25zdW1lKGl0ZXIpOwogCiAJCWlmIChpdGVyLT5zZXEubGVuID49IGNudCkKIAkJCWJyZWFrOwpAQCAtMzI3Nyw3ICsyOTI0LDcgQEAKIAkvKiBOb3cgY29weSB3aGF0IHdlIGhhdmUgdG8gdGhlIHVzZXIgKi8KIAlzcmV0ID0gdHJhY2Vfc2VxX3RvX3VzZXIoJml0ZXItPnNlcSwgdWJ1ZiwgY250KTsKIAlpZiAoaXRlci0+c2VxLnJlYWRwb3MgPj0gaXRlci0+c2VxLmxlbikKLQkJdHJhY2Vfc2VxX3Jlc2V0KCZpdGVyLT5zZXEpOworCQl0cmFjZV9zZXFfaW5pdCgmaXRlci0+c2VxKTsKIAogCS8qCiAJICogSWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gc2VuZCB0byB1c2VyLCBpbnNwaXRlIG9mIGNvbnN1bWluZyB0cmFjZQpAQCAtMzI4NywyMCArMjkzNCwxNjUgQEAKIAkJZ290byB3YWl0YWdhaW47CiAKIG91dDoKLQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCW11dGV4X3VubG9jaygmaXRlci0+bXV0ZXgpOwogCiAJcmV0dXJuIHNyZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHRyYWNpbmdfcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQkJCSAgICAgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCit7CisJX19mcmVlX3BhZ2UoYnVmLT5wYWdlKTsKK30KKworc3RhdGljIHZvaWQgdHJhY2luZ19zcGRfcmVsZWFzZV9waXBlKHN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjICpzcGQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgaWR4KQoreworCV9fZnJlZV9wYWdlKHNwZC0+cGFnZXNbaWR4XSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGlwZV9idWZfb3BlcmF0aW9ucyB0cmFjaW5nX3BpcGVfYnVmX29wcyA9IHsKKwkuY2FuX21lcmdlCQk9IDAsCisJLm1hcAkJCT0gZ2VuZXJpY19waXBlX2J1Zl9tYXAsCisJLnVubWFwCQkJPSBnZW5lcmljX3BpcGVfYnVmX3VubWFwLAorCS5jb25maXJtCQk9IGdlbmVyaWNfcGlwZV9idWZfY29uZmlybSwKKwkucmVsZWFzZQkJPSB0cmFjaW5nX3BpcGVfYnVmX3JlbGVhc2UsCisJLnN0ZWFsCQkJPSBnZW5lcmljX3BpcGVfYnVmX3N0ZWFsLAorCS5nZXQJCQk9IGdlbmVyaWNfcGlwZV9idWZfZ2V0LAorfTsKKworc3RhdGljIHNpemVfdAordHJhY2luZ19maWxsX3BpcGVfcGFnZShzaXplX3QgcmVtLCBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJc2l6ZV90IGNvdW50OworCWludCByZXQ7CisKKwkvKiBTZXEgYnVmZmVyIGlzIHBhZ2Utc2l6ZWQsIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLiAqLworCWZvciAoOzspIHsKKwkJY291bnQgPSBpdGVyLT5zZXEubGVuOworCQlyZXQgPSBwcmludF90cmFjZV9saW5lKGl0ZXIpOworCQljb3VudCA9IGl0ZXItPnNlcS5sZW4gLSBjb3VudDsKKwkJaWYgKHJlbSA8IGNvdW50KSB7CisJCQlyZW0gPSAwOworCQkJaXRlci0+c2VxLmxlbiAtPSBjb3VudDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpIHsKKwkJCWl0ZXItPnNlcS5sZW4gLT0gY291bnQ7CisJCQlicmVhazsKKwkJfQorCisJCXRyYWNlX2NvbnN1bWUoaXRlcik7CisJCXJlbSAtPSBjb3VudDsKKwkJaWYgKCFmaW5kX25leHRfZW50cnlfaW5jKGl0ZXIpKQl7CisJCQlyZW0gPSAwOworCQkJaXRlci0+ZW50ID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHJlbTsKK30KKworc3RhdGljIHNzaXplX3QgdHJhY2luZ19zcGxpY2VfcmVhZF9waXBlKHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCQlsb2ZmX3QgKnBwb3MsCisJCQkJCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsCisJCQkJCXNpemVfdCBsZW4sCisJCQkJCXVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbUElQRV9CVUZGRVJTXTsKKwlzdHJ1Y3QgcGFydGlhbF9wYWdlIHBhcnRpYWxbUElQRV9CVUZGRVJTXTsKKwlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNwbGljZV9waXBlX2Rlc2Mgc3BkID0geworCQkucGFnZXMJCT0gcGFnZXMsCisJCS5wYXJ0aWFsCT0gcGFydGlhbCwKKwkJLm5yX3BhZ2VzCT0gMCwgLyogVGhpcyBnZXRzIHVwZGF0ZWQgYmVsb3cuICovCisJCS5mbGFncwkJPSBmbGFncywKKwkJLm9wcwkJPSAmdHJhY2luZ19waXBlX2J1Zl9vcHMsCisJCS5zcGRfcmVsZWFzZQk9IHRyYWNpbmdfc3BkX3JlbGVhc2VfcGlwZSwKKwl9OworCXN0YXRpYyBzdHJ1Y3QgdHJhY2VyICpvbGRfdHJhY2VyOworCXNzaXplX3QgcmV0OworCXNpemVfdCByZW07CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBjb3B5IHRoZSB0cmFjZXIgdG8gYXZvaWQgdXNpbmcgYSBnbG9iYWwgbG9jayBhbGwgYXJvdW5kICovCisJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJaWYgKHVubGlrZWx5KG9sZF90cmFjZXIgIT0gY3VycmVudF90cmFjZSAmJiBjdXJyZW50X3RyYWNlKSkgeworCQlvbGRfdHJhY2VyID0gY3VycmVudF90cmFjZTsKKwkJKml0ZXItPnRyYWNlID0gKmN1cnJlbnRfdHJhY2U7CisJfQorCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisKKwltdXRleF9sb2NrKCZpdGVyLT5tdXRleCk7CisKKwlpZiAoaXRlci0+dHJhY2UtPnNwbGljZV9yZWFkKSB7CisJCXJldCA9IGl0ZXItPnRyYWNlLT5zcGxpY2VfcmVhZChpdGVyLCBmaWxwLAorCQkJCQkgICAgICAgcHBvcywgcGlwZSwgbGVuLCBmbGFncyk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9lcnI7CisJfQorCisJcmV0ID0gdHJhY2luZ193YWl0X3BpcGUoZmlscCk7CisJaWYgKHJldCA8PSAwKQorCQlnb3RvIG91dF9lcnI7CisKKwlpZiAoIWl0ZXItPmVudCAmJiAhZmluZF9uZXh0X2VudHJ5X2luYyhpdGVyKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJLyogRmlsbCBhcyBtYW55IHBhZ2VzIGFzIHBvc3NpYmxlLiAqLworCWZvciAoaSA9IDAsIHJlbSA9IGxlbjsgaSA8IFBJUEVfQlVGRkVSUyAmJiByZW07IGkrKykgeworCQlwYWdlc1tpXSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghcGFnZXNbaV0pCisJCQlicmVhazsKKworCQlyZW0gPSB0cmFjaW5nX2ZpbGxfcGlwZV9wYWdlKHJlbSwgaXRlcik7CisKKwkJLyogQ29weSB0aGUgZGF0YSBpbnRvIHRoZSBwYWdlLCBzbyB3ZSBjYW4gc3RhcnQgb3Zlci4gKi8KKwkJcmV0ID0gdHJhY2Vfc2VxX3RvX2J1ZmZlcigmaXRlci0+c2VxLAorCQkJCQkgIHBhZ2VfYWRkcmVzcyhwYWdlc1tpXSksCisJCQkJCSAgaXRlci0+c2VxLmxlbik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlfX2ZyZWVfcGFnZShwYWdlc1tpXSk7CisJCQlicmVhazsKKwkJfQorCQlwYXJ0aWFsW2ldLm9mZnNldCA9IDA7CisJCXBhcnRpYWxbaV0ubGVuID0gaXRlci0+c2VxLmxlbjsKKworCQl0cmFjZV9zZXFfaW5pdCgmaXRlci0+c2VxKTsKKwl9CisKKwltdXRleF91bmxvY2soJml0ZXItPm11dGV4KTsKKworCXNwZC5ucl9wYWdlcyA9IGk7CisKKwlyZXR1cm4gc3BsaWNlX3RvX3BpcGUocGlwZSwgJnNwZCk7CisKK291dF9lcnI6CisJbXV0ZXhfdW5sb2NrKCZpdGVyLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgc3NpemVfdAogdHJhY2luZ19lbnRyaWVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLAogCQkgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzY0XTsKKwljaGFyIGJ1Zls5Nl07CiAJaW50IHI7CiAKLQlyID0gc3ByaW50ZihidWYsICIlbHVcbiIsIHRyLT5lbnRyaWVzID4+IDEwKTsKKwltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwlpZiAoIXJpbmdfYnVmZmVyX2V4cGFuZGVkKQorCQlyID0gc3ByaW50ZihidWYsICIlbHUgKGV4cGFuZGVkOiAlbHUpXG4iLAorCQkJICAgIHRyLT5lbnRyaWVzID4+IDEwLAorCQkJICAgIHRyYWNlX2J1Zl9zaXplID4+IDEwKTsKKwllbHNlCisJCXIgPSBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgdHItPmVudHJpZXMgPj4gMTApOworCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLCBidWYsIHIpOwogfQogCkBAIC0zMzQ0LDI4ICszMTM2LDExIEBACiAJdmFsIDw8PSAxMDsKIAogCWlmICh2YWwgIT0gZ2xvYmFsX3RyYWNlLmVudHJpZXMpIHsKLQkJcmV0ID0gcmluZ19idWZmZXJfcmVzaXplKGdsb2JhbF90cmFjZS5idWZmZXIsIHZhbCk7CisJCXJldCA9IHRyYWNpbmdfcmVzaXplX3JpbmdfYnVmZmVyKHZhbCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQljbnQgPSByZXQ7CiAJCQlnb3RvIG91dDsKIAkJfQotCi0JCXJldCA9IHJpbmdfYnVmZmVyX3Jlc2l6ZShtYXhfdHIuYnVmZmVyLCB2YWwpOwotCQlpZiAocmV0IDwgMCkgewotCQkJaW50IHI7Ci0JCQljbnQgPSByZXQ7Ci0JCQlyID0gcmluZ19idWZmZXJfcmVzaXplKGdsb2JhbF90cmFjZS5idWZmZXIsCi0JCQkJCSAgICAgICBnbG9iYWxfdHJhY2UuZW50cmllcyk7Ci0JCQlpZiAociA8IDApIHsKLQkJCQkvKiBBQVJHSCEgV2UgYXJlIGxlZnQgd2l0aCBkaWZmZXJlbnQKLQkJCQkgKiBzaXplIG1heCBidWZmZXIhISEhICovCi0JCQkJV0FSTl9PTigxKTsKLQkJCQl0cmFjaW5nX2Rpc2FibGVkID0gMTsKLQkJCX0KLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJZ2xvYmFsX3RyYWNlLmVudHJpZXMgPSB2YWw7CiAJfQogCiAJZmlscC0+Zl9wb3MgKz0gY250OwpAQCAtMzM5Myw3ICszMTY4LDcgQEAKIAlpbnQgcmV0OwogCXZhX2xpc3QgYXJnczsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwotCXJldCA9IHRyYWNlX3ZwcmludGsoMCwgLTEsIGZtdCwgYXJncyk7CisJcmV0ID0gdHJhY2VfdnByaW50aygwLCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzQzMyw0MiArMzIwOCwyODggQEAKIAlyZXR1cm4gY250OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX21heF9sYXRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfbWF4X2xhdF9mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfbWF4X2xhdF9yZWFkLAogCS53cml0ZQkJPSB0cmFjaW5nX21heF9sYXRfd3JpdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2N0cmxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfY3RybF9mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAogCS5yZWFkCQk9IHRyYWNpbmdfY3RybF9yZWFkLAogCS53cml0ZQkJPSB0cmFjaW5nX2N0cmxfd3JpdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZXRfdHJhY2VyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZXRfdHJhY2VyX2ZvcHMgPSB7CiAJLm9wZW4JCT0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCiAJLnJlYWQJCT0gdHJhY2luZ19zZXRfdHJhY2VfcmVhZCwKIAkud3JpdGUJCT0gdHJhY2luZ19zZXRfdHJhY2Vfd3JpdGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX3BpcGVfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfcGlwZV9mb3BzID0gewogCS5vcGVuCQk9IHRyYWNpbmdfb3Blbl9waXBlLAogCS5wb2xsCQk9IHRyYWNpbmdfcG9sbF9waXBlLAogCS5yZWFkCQk9IHRyYWNpbmdfcmVhZF9waXBlLAorCS5zcGxpY2VfcmVhZAk9IHRyYWNpbmdfc3BsaWNlX3JlYWRfcGlwZSwKIAkucmVsZWFzZQk9IHRyYWNpbmdfcmVsZWFzZV9waXBlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19lbnRyaWVzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX2VudHJpZXNfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX2VudHJpZXNfcmVhZCwKIAkud3JpdGUJCT0gdHJhY2luZ19lbnRyaWVzX3dyaXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19tYXJrX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX21hcmtfZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkud3JpdGUJCT0gdHJhY2luZ19tYXJrX3dyaXRlLAogfTsKIAorc3RydWN0IGZ0cmFjZV9idWZmZXJfaW5mbyB7CisJc3RydWN0IHRyYWNlX2FycmF5CSp0cjsKKwl2b2lkCQkJKnNwYXJlOworCWludAkJCWNwdTsKKwl1bnNpZ25lZCBpbnQJCXJlYWQ7Cit9OworCitzdGF0aWMgaW50IHRyYWNpbmdfYnVmZmVyc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCBjcHUgPSAoaW50KShsb25nKWlub2RlLT5pX3ByaXZhdGU7CisJc3RydWN0IGZ0cmFjZV9idWZmZXJfaW5mbyAqaW5mbzsKKworCWlmICh0cmFjaW5nX2Rpc2FibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWluZm8gPSBremFsbG9jKHNpemVvZigqaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbmZvLT50cgk9ICZnbG9iYWxfdHJhY2U7CisJaW5mby0+Y3B1CT0gY3B1OworCWluZm8tPnNwYXJlCT0gcmluZ19idWZmZXJfYWxsb2NfcmVhZF9wYWdlKGluZm8tPnRyLT5idWZmZXIpOworCS8qIEZvcmNlIHJlYWRpbmcgcmluZyBidWZmZXIgZm9yIGZpcnN0IHJlYWQgKi8KKwlpbmZvLT5yZWFkCT0gKHVuc2lnbmVkIGludCktMTsKKwlpZiAoIWluZm8tPnNwYXJlKQorCQlnb3RvIG91dDsKKworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGluZm87CisKKwlyZXR1cm4gMDsKKworIG91dDoKKwlrZnJlZShpbmZvKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHNzaXplX3QKK3RyYWNpbmdfYnVmZmVyc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2J1ZmZlcl9pbmZvICppbmZvID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBwb3M7CisJc3NpemVfdCByZXQ7CisJc2l6ZV90IHNpemU7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCS8qIERvIHdlIGhhdmUgcHJldmlvdXMgcmVhZCBkYXRhIHRvIHJlYWQ/ICovCisJaWYgKGluZm8tPnJlYWQgPCBQQUdFX1NJWkUpCisJCWdvdG8gcmVhZDsKKworCWluZm8tPnJlYWQgPSAwOworCisJcmV0ID0gcmluZ19idWZmZXJfcmVhZF9wYWdlKGluZm8tPnRyLT5idWZmZXIsCisJCQkJICAgICZpbmZvLT5zcGFyZSwKKwkJCQkgICAgY291bnQsCisJCQkJICAgIGluZm8tPmNwdSwgMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAwOworCisJcG9zID0gcmluZ19idWZmZXJfcGFnZV9sZW4oaW5mby0+c3BhcmUpOworCisJaWYgKHBvcyA8IFBBR0VfU0laRSkKKwkJbWVtc2V0KGluZm8tPnNwYXJlICsgcG9zLCAwLCBQQUdFX1NJWkUgLSBwb3MpOworCityZWFkOgorCXNpemUgPSBQQUdFX1NJWkUgLSBpbmZvLT5yZWFkOworCWlmIChzaXplID4gY291bnQpCisJCXNpemUgPSBjb3VudDsKKworCXJldCA9IGNvcHlfdG9fdXNlcih1YnVmLCBpbmZvLT5zcGFyZSArIGluZm8tPnJlYWQsIHNpemUpOworCWlmIChyZXQgPT0gc2l6ZSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJc2l6ZSAtPSByZXQ7CisKKwkqcHBvcyArPSBzaXplOworCWluZm8tPnJlYWQgKz0gc2l6ZTsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IHRyYWNpbmdfYnVmZmVyc19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBmdHJhY2VfYnVmZmVyX2luZm8gKmluZm8gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyaW5nX2J1ZmZlcl9mcmVlX3JlYWRfcGFnZShpbmZvLT50ci0+YnVmZmVyLCBpbmZvLT5zcGFyZSk7CisJa2ZyZWUoaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGJ1ZmZlcl9yZWYgeworCXN0cnVjdCByaW5nX2J1ZmZlcgkqYnVmZmVyOworCXZvaWQJCQkqcGFnZTsKKwlpbnQJCQlyZWY7Cit9OworCitzdGF0aWMgdm9pZCBidWZmZXJfcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAorCQkJCSAgICBzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYnVmZmVyX3JlZiAqcmVmID0gKHN0cnVjdCBidWZmZXJfcmVmICopYnVmLT5wcml2YXRlOworCisJaWYgKC0tcmVmLT5yZWYpCisJCXJldHVybjsKKworCXJpbmdfYnVmZmVyX2ZyZWVfcmVhZF9wYWdlKHJlZi0+YnVmZmVyLCByZWYtPnBhZ2UpOworCWtmcmVlKHJlZik7CisJYnVmLT5wcml2YXRlID0gMDsKK30KKworc3RhdGljIGludCBidWZmZXJfcGlwZV9idWZfc3RlYWwoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCQkgc3RydWN0IHBpcGVfYnVmZmVyICpidWYpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9waXBlX2J1Zl9nZXQoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCQlzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYnVmZmVyX3JlZiAqcmVmID0gKHN0cnVjdCBidWZmZXJfcmVmICopYnVmLT5wcml2YXRlOworCisJcmVmLT5yZWYrKzsKK30KKworLyogUGlwZSBidWZmZXIgb3BlcmF0aW9ucyBmb3IgYSBidWZmZXIuICovCitzdGF0aWMgc3RydWN0IHBpcGVfYnVmX29wZXJhdGlvbnMgYnVmZmVyX3BpcGVfYnVmX29wcyA9IHsKKwkuY2FuX21lcmdlCQk9IDAsCisJLm1hcAkJCT0gZ2VuZXJpY19waXBlX2J1Zl9tYXAsCisJLnVubWFwCQkJPSBnZW5lcmljX3BpcGVfYnVmX3VubWFwLAorCS5jb25maXJtCQk9IGdlbmVyaWNfcGlwZV9idWZfY29uZmlybSwKKwkucmVsZWFzZQkJPSBidWZmZXJfcGlwZV9idWZfcmVsZWFzZSwKKwkuc3RlYWwJCQk9IGJ1ZmZlcl9waXBlX2J1Zl9zdGVhbCwKKwkuZ2V0CQkJPSBidWZmZXJfcGlwZV9idWZfZ2V0LAorfTsKKworLyoKKyAqIENhbGxiYWNrIGZyb20gc3BsaWNlX3RvX3BpcGUoKSwgaWYgd2UgbmVlZCB0byByZWxlYXNlIHNvbWUgcGFnZXMKKyAqIGF0IHRoZSBlbmQgb2YgdGhlIHNwZCBpbiBjYXNlIHdlIGVycm9yJ2VkIG91dCBpbiBmaWxsaW5nIHRoZSBwaXBlLgorICovCitzdGF0aWMgdm9pZCBidWZmZXJfc3BkX3JlbGVhc2Uoc3RydWN0IHNwbGljZV9waXBlX2Rlc2MgKnNwZCwgdW5zaWduZWQgaW50IGkpCit7CisJc3RydWN0IGJ1ZmZlcl9yZWYgKnJlZiA9CisJCShzdHJ1Y3QgYnVmZmVyX3JlZiAqKXNwZC0+cGFydGlhbFtpXS5wcml2YXRlOworCisJaWYgKC0tcmVmLT5yZWYpCisJCXJldHVybjsKKworCXJpbmdfYnVmZmVyX2ZyZWVfcmVhZF9wYWdlKHJlZi0+YnVmZmVyLCByZWYtPnBhZ2UpOworCWtmcmVlKHJlZik7CisJc3BkLT5wYXJ0aWFsW2ldLnByaXZhdGUgPSAwOworfQorCitzdGF0aWMgc3NpemVfdAordHJhY2luZ19idWZmZXJzX3NwbGljZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgKnBwb3MsCisJCQkgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IGxlbiwKKwkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGZ0cmFjZV9idWZmZXJfaW5mbyAqaW5mbyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGFydGlhbF9wYWdlIHBhcnRpYWxbUElQRV9CVUZGRVJTXTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZXNbUElQRV9CVUZGRVJTXTsKKwlzdHJ1Y3Qgc3BsaWNlX3BpcGVfZGVzYyBzcGQgPSB7CisJCS5wYWdlcwkJPSBwYWdlcywKKwkJLnBhcnRpYWwJPSBwYXJ0aWFsLAorCQkuZmxhZ3MJCT0gZmxhZ3MsCisJCS5vcHMJCT0gJmJ1ZmZlcl9waXBlX2J1Zl9vcHMsCisJCS5zcGRfcmVsZWFzZQk9IGJ1ZmZlcl9zcGRfcmVsZWFzZSwKKwl9OworCXN0cnVjdCBidWZmZXJfcmVmICpyZWY7CisJaW50IHNpemUsIGk7CisJc2l6ZV90IHJldDsKKworCS8qCisJICogV2UgY2FuJ3Qgc2VlayBvbiBhIGJ1ZmZlciBpbnB1dAorCSAqLworCWlmICh1bmxpa2VseSgqcHBvcykpCisJCXJldHVybiAtRVNQSVBFOworCisKKwlmb3IgKGkgPSAwOyBpIDwgUElQRV9CVUZGRVJTICYmIGxlbjsgaSsrLCBsZW4gLT0gc2l6ZSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJaW50IHI7CisKKwkJcmVmID0ga3phbGxvYyhzaXplb2YoKnJlZiksIEdGUF9LRVJORUwpOworCQlpZiAoIXJlZikKKwkJCWJyZWFrOworCisJCXJlZi0+YnVmZmVyID0gaW5mby0+dHItPmJ1ZmZlcjsKKwkJcmVmLT5wYWdlID0gcmluZ19idWZmZXJfYWxsb2NfcmVhZF9wYWdlKHJlZi0+YnVmZmVyKTsKKwkJaWYgKCFyZWYtPnBhZ2UpIHsKKwkJCWtmcmVlKHJlZik7CisJCQlicmVhazsKKwkJfQorCisJCXIgPSByaW5nX2J1ZmZlcl9yZWFkX3BhZ2UocmVmLT5idWZmZXIsICZyZWYtPnBhZ2UsCisJCQkJCSAgbGVuLCBpbmZvLT5jcHUsIDApOworCQlpZiAociA8IDApIHsKKwkJCXJpbmdfYnVmZmVyX2ZyZWVfcmVhZF9wYWdlKHJlZi0+YnVmZmVyLAorCQkJCQkJICAgcmVmLT5wYWdlKTsKKwkJCWtmcmVlKHJlZik7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIHplcm8gb3V0IGFueSBsZWZ0IG92ZXIgZGF0YSwgdGhpcyBpcyBnb2luZyB0bworCQkgKiB1c2VyIGxhbmQuCisJCSAqLworCQlzaXplID0gcmluZ19idWZmZXJfcGFnZV9sZW4ocmVmLT5wYWdlKTsKKwkJaWYgKHNpemUgPCBQQUdFX1NJWkUpCisJCQltZW1zZXQocmVmLT5wYWdlICsgc2l6ZSwgMCwgUEFHRV9TSVpFIC0gc2l6ZSk7CisKKwkJcGFnZSA9IHZpcnRfdG9fcGFnZShyZWYtPnBhZ2UpOworCisJCXNwZC5wYWdlc1tpXSA9IHBhZ2U7CisJCXNwZC5wYXJ0aWFsW2ldLmxlbiA9IFBBR0VfU0laRTsKKwkJc3BkLnBhcnRpYWxbaV0ub2Zmc2V0ID0gMDsKKwkJc3BkLnBhcnRpYWxbaV0ucHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKXJlZjsKKwkJc3BkLm5yX3BhZ2VzKys7CisJfQorCisJc3BkLm5yX3BhZ2VzID0gaTsKKworCS8qIGRpZCB3ZSByZWFkIGFueXRoaW5nPyAqLworCWlmICghc3BkLm5yX3BhZ2VzKSB7CisJCWlmIChmbGFncyAmIFNQTElDRV9GX05PTkJMT0NLKQorCQkJcmV0ID0gLUVBR0FJTjsKKwkJZWxzZQorCQkJcmV0ID0gMDsKKwkJLyogVE9ETzogYmxvY2sgKi8KKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzcGxpY2VfdG9fcGlwZShwaXBlLCAmc3BkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfYnVmZmVyc19mb3BzID0geworCS5vcGVuCQk9IHRyYWNpbmdfYnVmZmVyc19vcGVuLAorCS5yZWFkCQk9IHRyYWNpbmdfYnVmZmVyc19yZWFkLAorCS5yZWxlYXNlCT0gdHJhY2luZ19idWZmZXJzX3JlbGVhc2UsCisJLnNwbGljZV9yZWFkCT0gdHJhY2luZ19idWZmZXJzX3NwbGljZV9yZWFkLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorfTsKKwogI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQogCiBpbnQgX193ZWFrIGZ0cmFjZV9hcmNoX3JlYWRfZHluX2luZm8oY2hhciAqYnVmLCBpbnQgc2l6ZSkKQEAgLTM1MDAsNyArMzUyMSw3IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfZHluX2luZm9fZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRyYWNpbmdfZHluX2luZm9fZm9wcyA9IHsKIAkub3BlbgkJPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKIAkucmVhZAkJPSB0cmFjaW5nX3JlYWRfZHluX2luZm8sCiB9OwpAQCAtMzUxNSw2ICszNTM2LDkgQEAKIAlpZiAoZF90cmFjZXIpCiAJCXJldHVybiBkX3RyYWNlcjsKIAorCWlmICghZGVidWdmc19pbml0aWFsaXplZCgpKQorCQlyZXR1cm4gTlVMTDsKKwogCWRfdHJhY2VyID0gZGVidWdmc19jcmVhdGVfZGlyKCJ0cmFjaW5nIiwgTlVMTCk7CiAKIAlpZiAoIWRfdHJhY2VyICYmICFvbmNlKSB7CkBAIC0zNTI2LDE1ICszNTUwLDM1MCBAQAogCXJldHVybiBkX3RyYWNlcjsKIH0KIAorc3RhdGljIHN0cnVjdCBkZW50cnkgKmRfcGVyY3B1OworCitzdHJ1Y3QgZGVudHJ5ICp0cmFjaW5nX2RlbnRyeV9wZXJjcHUodm9pZCkKK3sKKwlzdGF0aWMgaW50IG9uY2U7CisJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CisKKwlpZiAoZF9wZXJjcHUpCisJCXJldHVybiBkX3BlcmNwdTsKKworCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOworCisJaWYgKCFkX3RyYWNlcikKKwkJcmV0dXJuIE5VTEw7CisKKwlkX3BlcmNwdSA9IGRlYnVnZnNfY3JlYXRlX2RpcigicGVyX2NwdSIsIGRfdHJhY2VyKTsKKworCWlmICghZF9wZXJjcHUgJiYgIW9uY2UpIHsKKwkJb25jZSA9IDE7CisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyBkaXJlY3RvcnkgJ3Blcl9jcHUnXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGRfcGVyY3B1OworfQorCitzdGF0aWMgdm9pZCB0cmFjaW5nX2luaXRfZGVidWdmc19wZXJjcHUobG9uZyBjcHUpCit7CisJc3RydWN0IGRlbnRyeSAqZF9wZXJjcHUgPSB0cmFjaW5nX2RlbnRyeV9wZXJjcHUoKTsKKwlzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgKmRfY3B1OworCS8qIHN0cmxlbihjcHUpICsgTUFYKGxvZzEwKGNwdSkpICsgJ1wwJyAqLworCWNoYXIgY3B1X2Rpcls3XTsKKworCWlmIChjcHUgPiA5OTkgfHwgY3B1IDwgMCkKKwkJcmV0dXJuOworCisJc3ByaW50ZihjcHVfZGlyLCAiY3B1JWxkIiwgY3B1KTsKKwlkX2NwdSA9IGRlYnVnZnNfY3JlYXRlX2RpcihjcHVfZGlyLCBkX3BlcmNwdSk7CisJaWYgKCFkX2NwdSkgeworCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJyVzJyBlbnRyeVxuIiwgY3B1X2Rpcik7CisJCXJldHVybjsKKwl9CisKKwkvKiBwZXIgY3B1IHRyYWNlX3BpcGUgKi8KKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRyYWNlX3BpcGUiLCAwNDQ0LCBkX2NwdSwKKwkJCQkodm9pZCAqKSBjcHUsICZ0cmFjaW5nX3BpcGVfZm9wcyk7CisJaWYgKCFlbnRyeSkKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICd0cmFjZV9waXBlJyBlbnRyeVxuIik7CisKKwkvKiBwZXIgY3B1IHRyYWNlICovCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cmFjZSIsIDA2NDQsIGRfY3B1LAorCQkJCSh2b2lkICopIGNwdSwgJnRyYWNpbmdfZm9wcyk7CisJaWYgKCFlbnRyeSkKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICd0cmFjZScgZW50cnlcbiIpOworCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cmFjZV9waXBlX3JhdyIsIDA0NDQsIGRfY3B1LAorCQkJCSAgICAodm9pZCAqKSBjcHUsICZ0cmFjaW5nX2J1ZmZlcnNfZm9wcyk7CisJaWYgKCFlbnRyeSkKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICd0cmFjZV9waXBlX3JhdycgZW50cnlcbiIpOworfQorCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAogLyogTGV0IHNlbGZ0ZXN0IGhhdmUgYWNjZXNzIHRvIHN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlICovCiAjaW5jbHVkZSAidHJhY2Vfc2VsZnRlc3QuYyIKICNlbmRpZgogCitzdHJ1Y3QgdHJhY2Vfb3B0aW9uX2RlbnRyeSB7CisJc3RydWN0IHRyYWNlcl9vcHQJCSpvcHQ7CisJc3RydWN0IHRyYWNlcl9mbGFncwkJKmZsYWdzOworCXN0cnVjdCBkZW50cnkJCQkqZW50cnk7Cit9OworCitzdGF0aWMgc3NpemVfdAordHJhY2Vfb3B0aW9uc19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKKwkJCWxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdHJhY2Vfb3B0aW9uX2RlbnRyeSAqdG9wdCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyICpidWY7CisKKwlpZiAodG9wdC0+ZmxhZ3MtPnZhbCAmIHRvcHQtPm9wdC0+Yml0KQorCQlidWYgPSAiMVxuIjsKKwllbHNlCisJCWJ1ZiA9ICIwXG4iOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywgYnVmLCAyKTsKK30KKworc3RhdGljIHNzaXplX3QKK3RyYWNlX29wdGlvbnNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkJIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgdHJhY2Vfb3B0aW9uX2RlbnRyeSAqdG9wdCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwljaGFyIGJ1Zls2NF07CisJaW50IHJldDsKKworCWlmIChjbnQgPj0gc2l6ZW9mKGJ1ZikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIGNudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2NudF0gPSAwOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSAwOworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgorCQkvKiBkbyBub3RoaW5nIGlmIGFscmVhZHkgY2xlYXJlZCAqLworCQlpZiAoISh0b3B0LT5mbGFncy0+dmFsICYgdG9wdC0+b3B0LT5iaXQpKQorCQkJYnJlYWs7CisKKwkJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJCWlmIChjdXJyZW50X3RyYWNlLT5zZXRfZmxhZykKKwkJCXJldCA9IGN1cnJlbnRfdHJhY2UtPnNldF9mbGFnKHRvcHQtPmZsYWdzLT52YWwsCisJCQkJCQkgICAgICB0b3B0LT5vcHQtPmJpdCwgMCk7CisJCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQl0b3B0LT5mbGFncy0+dmFsICY9IH50b3B0LT5vcHQtPmJpdDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkvKiBkbyBub3RoaW5nIGlmIGFscmVhZHkgc2V0ICovCisJCWlmICh0b3B0LT5mbGFncy0+dmFsICYgdG9wdC0+b3B0LT5iaXQpCisJCQlicmVhazsKKworCQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwkJaWYgKGN1cnJlbnRfdHJhY2UtPnNldF9mbGFnKQorCQkJcmV0ID0gY3VycmVudF90cmFjZS0+c2V0X2ZsYWcodG9wdC0+ZmxhZ3MtPnZhbCwKKwkJCQkJCSAgICAgIHRvcHQtPm9wdC0+Yml0LCAxKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXRvcHQtPmZsYWdzLT52YWwgfD0gdG9wdC0+b3B0LT5iaXQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKnBwb3MgKz0gY250OworCisJcmV0dXJuIGNudDsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjZV9vcHRpb25zX2ZvcHMgPSB7CisJLm9wZW4gPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKKwkucmVhZCA9IHRyYWNlX29wdGlvbnNfcmVhZCwKKwkud3JpdGUgPSB0cmFjZV9vcHRpb25zX3dyaXRlLAorfTsKKworc3RhdGljIHNzaXplX3QKK3RyYWNlX29wdGlvbnNfY29yZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKKwkJCWxvZmZfdCAqcHBvcykKK3sKKwlsb25nIGluZGV4ID0gKGxvbmcpZmlscC0+cHJpdmF0ZV9kYXRhOworCWNoYXIgKmJ1ZjsKKworCWlmICh0cmFjZV9mbGFncyAmICgxIDw8IGluZGV4KSkKKwkJYnVmID0gIjFcbiI7CisJZWxzZQorCQlidWYgPSAiMFxuIjsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsIGJ1ZiwgMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit0cmFjZV9vcHRpb25zX2NvcmVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkJIGxvZmZfdCAqcHBvcykKK3sKKwlsb25nIGluZGV4ID0gKGxvbmcpZmlscC0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzY0XTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJaWYgKGNudCA+PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgY250KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZbY250XSA9IDA7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgorCQl0cmFjZV9mbGFncyAmPSB+KDEgPDwgaW5kZXgpOworCQlicmVhazsKKwljYXNlIDE6CisJCXRyYWNlX2ZsYWdzIHw9IDEgPDwgaW5kZXg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKnBwb3MgKz0gY250OworCisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2Vfb3B0aW9uc19jb3JlX2ZvcHMgPSB7CisJLm9wZW4gPSB0cmFjaW5nX29wZW5fZ2VuZXJpYywKKwkucmVhZCA9IHRyYWNlX29wdGlvbnNfY29yZV9yZWFkLAorCS53cml0ZSA9IHRyYWNlX29wdGlvbnNfY29yZV93cml0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp0cmFjZV9vcHRpb25zX2luaXRfZGVudHJ5KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CisJc3RhdGljIHN0cnVjdCBkZW50cnkgKnRfb3B0aW9uczsKKworCWlmICh0X29wdGlvbnMpCisJCXJldHVybiB0X29wdGlvbnM7CisKKwlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKKwlpZiAoIWRfdHJhY2VyKQorCQlyZXR1cm4gTlVMTDsKKworCXRfb3B0aW9ucyA9IGRlYnVnZnNfY3JlYXRlX2Rpcigib3B0aW9ucyIsIGRfdHJhY2VyKTsKKwlpZiAoIXRfb3B0aW9ucykgeworCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgZGlyZWN0b3J5ICdvcHRpb25zJ1xuIik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiB0X29wdGlvbnM7Cit9CisKK3N0YXRpYyB2b2lkCitjcmVhdGVfdHJhY2Vfb3B0aW9uX2ZpbGUoc3RydWN0IHRyYWNlX29wdGlvbl9kZW50cnkgKnRvcHQsCisJCQkgc3RydWN0IHRyYWNlcl9mbGFncyAqZmxhZ3MsCisJCQkgc3RydWN0IHRyYWNlcl9vcHQgKm9wdCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICp0X29wdGlvbnM7CisJc3RydWN0IGRlbnRyeSAqZW50cnk7CisKKwl0X29wdGlvbnMgPSB0cmFjZV9vcHRpb25zX2luaXRfZGVudHJ5KCk7CisJaWYgKCF0X29wdGlvbnMpCisJCXJldHVybjsKKworCXRvcHQtPmZsYWdzID0gZmxhZ3M7CisJdG9wdC0+b3B0ID0gb3B0OworCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG9wdC0+bmFtZSwgMDY0NCwgdF9vcHRpb25zLCB0b3B0LAorCQkJCSAgICAmdHJhY2Vfb3B0aW9uc19mb3BzKTsKKworCXRvcHQtPmVudHJ5ID0gZW50cnk7CisKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9vcHRpb25fZGVudHJ5ICoKK2NyZWF0ZV90cmFjZV9vcHRpb25fZmlsZXMoc3RydWN0IHRyYWNlciAqdHJhY2VyKQoreworCXN0cnVjdCB0cmFjZV9vcHRpb25fZGVudHJ5ICp0b3B0czsKKwlzdHJ1Y3QgdHJhY2VyX2ZsYWdzICpmbGFnczsKKwlzdHJ1Y3QgdHJhY2VyX29wdCAqb3B0czsKKwlpbnQgY250OworCisJaWYgKCF0cmFjZXIpCisJCXJldHVybiBOVUxMOworCisJZmxhZ3MgPSB0cmFjZXItPmZsYWdzOworCisJaWYgKCFmbGFncyB8fCAhZmxhZ3MtPm9wdHMpCisJCXJldHVybiBOVUxMOworCisJb3B0cyA9IGZsYWdzLT5vcHRzOworCisJZm9yIChjbnQgPSAwOyBvcHRzW2NudF0ubmFtZTsgY250KyspCisJCTsKKworCXRvcHRzID0ga2NhbGxvYyhjbnQgKyAxLCBzaXplb2YoKnRvcHRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0b3B0cykKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGNudCA9IDA7IG9wdHNbY250XS5uYW1lOyBjbnQrKykKKwkJY3JlYXRlX3RyYWNlX29wdGlvbl9maWxlKCZ0b3B0c1tjbnRdLCBmbGFncywKKwkJCQkJICZvcHRzW2NudF0pOworCisJcmV0dXJuIHRvcHRzOworfQorCitzdGF0aWMgdm9pZAorZGVzdHJveV90cmFjZV9vcHRpb25fZmlsZXMoc3RydWN0IHRyYWNlX29wdGlvbl9kZW50cnkgKnRvcHRzKQoreworCWludCBjbnQ7CisKKwlpZiAoIXRvcHRzKQorCQlyZXR1cm47CisKKwlmb3IgKGNudCA9IDA7IHRvcHRzW2NudF0ub3B0OyBjbnQrKykgeworCQlpZiAodG9wdHNbY250XS5lbnRyeSkKKwkJCWRlYnVnZnNfcmVtb3ZlKHRvcHRzW2NudF0uZW50cnkpOworCX0KKworCWtmcmVlKHRvcHRzKTsKK30KKworc3RhdGljIHN0cnVjdCBkZW50cnkgKgorY3JlYXRlX3RyYWNlX29wdGlvbl9jb3JlX2ZpbGUoY29uc3QgY2hhciAqb3B0aW9uLCBsb25nIGluZGV4KQoreworCXN0cnVjdCBkZW50cnkgKnRfb3B0aW9uczsKKwlzdHJ1Y3QgZGVudHJ5ICplbnRyeTsKKworCXRfb3B0aW9ucyA9IHRyYWNlX29wdGlvbnNfaW5pdF9kZW50cnkoKTsKKwlpZiAoIXRfb3B0aW9ucykKKwkJcmV0dXJuIE5VTEw7CisKKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUob3B0aW9uLCAwNjQ0LCB0X29wdGlvbnMsICh2b2lkICopaW5kZXgsCisJCQkJICAgICZ0cmFjZV9vcHRpb25zX2NvcmVfZm9wcyk7CisKKwlyZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBfX2luaXQgdm9pZCBjcmVhdGVfdHJhY2Vfb3B0aW9uc19kaXIodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICp0X29wdGlvbnM7CisJc3RydWN0IGRlbnRyeSAqZW50cnk7CisJaW50IGk7CisKKwl0X29wdGlvbnMgPSB0cmFjZV9vcHRpb25zX2luaXRfZGVudHJ5KCk7CisJaWYgKCF0X29wdGlvbnMpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IHRyYWNlX29wdGlvbnNbaV07IGkrKykgeworCQllbnRyeSA9IGNyZWF0ZV90cmFjZV9vcHRpb25fY29yZV9maWxlKHRyYWNlX29wdGlvbnNbaV0sIGkpOworCQlpZiAoIWVudHJ5KQorCQkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICVzIGVudHJ5XG4iLAorCQkJCSAgIHRyYWNlX29wdGlvbnNbaV0pOworCX0KK30KKwogc3RhdGljIF9faW5pdCBpbnQgdHJhY2VyX2luaXRfZGVidWdmcyh2b2lkKQogewogCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOwogCXN0cnVjdCBkZW50cnkgKmVudHJ5OworCWludCBjcHU7CiAKIAlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKIApAQCAtMzU0OCwxOCArMzkwNywxNSBAQAogCWlmICghZW50cnkpCiAJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAndHJhY2Vfb3B0aW9ucycgZW50cnlcbiIpOwogCisJY3JlYXRlX3RyYWNlX29wdGlvbnNfZGlyKCk7CisKIAllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRyYWNpbmdfY3B1bWFzayIsIDA2NDQsIGRfdHJhY2VyLAogCQkJCSAgICBOVUxMLCAmdHJhY2luZ19jcHVtYXNrX2ZvcHMpOwogCWlmICghZW50cnkpCiAJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAndHJhY2luZ19jcHVtYXNrJyBlbnRyeVxuIik7CiAKLQllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImxhdGVuY3lfdHJhY2UiLCAwNDQ0LCBkX3RyYWNlciwKLQkJCQkgICAgJmdsb2JhbF90cmFjZSwgJnRyYWNpbmdfbHRfZm9wcyk7Ci0JaWYgKCFlbnRyeSkKLQkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICdsYXRlbmN5X3RyYWNlJyBlbnRyeVxuIik7Ci0KLQllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInRyYWNlIiwgMDQ0NCwgZF90cmFjZXIsCi0JCQkJICAgICZnbG9iYWxfdHJhY2UsICZ0cmFjaW5nX2ZvcHMpOworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgidHJhY2UiLCAwNjQ0LCBkX3RyYWNlciwKKwkJCQkgKHZvaWQgKikgVFJBQ0VfUElQRV9BTExfQ1BVLCAmdHJhY2luZ19mb3BzKTsKIAlpZiAoIWVudHJ5KQogCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgJ3RyYWNlJyBlbnRyeVxuIik7CiAKQEAgLTM1OTAsOCArMzk0Niw4IEBACiAJaWYgKCFlbnRyeSkKIAkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICdSRUFETUUnIGVudHJ5XG4iKTsKIAotCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgidHJhY2VfcGlwZSIsIDA2NDQsIGRfdHJhY2VyLAotCQkJCSAgICBOVUxMLCAmdHJhY2luZ19waXBlX2ZvcHMpOworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgidHJhY2VfcGlwZSIsIDA0NDQsIGRfdHJhY2VyLAorCQkJKHZvaWQgKikgVFJBQ0VfUElQRV9BTExfQ1BVLCAmdHJhY2luZ19waXBlX2ZvcHMpOwogCWlmICghZW50cnkpCiAJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCiAJCQkgICAiJ3RyYWNlX3BpcGUnIGVudHJ5XG4iKTsKQEAgLTM2MTksNzggKzM5NzUsMTMgQEAKICNpZmRlZiBDT05GSUdfU1lTUFJPRl9UUkFDRVIKIAlpbml0X3RyYWNlcl9zeXNwcm9mX2RlYnVnZnMoZF90cmFjZXIpOwogI2VuZGlmCisKKwlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpCisJCXRyYWNpbmdfaW5pdF9kZWJ1Z2ZzX3BlcmNwdShjcHUpOworCiAJcmV0dXJuIDA7CiB9CiAKLWludCB0cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGludCBkZXB0aCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCi17Ci0Jc3RhdGljIERFRklORV9TUElOTE9DSyh0cmFjZV9idWZfbG9jayk7Ci0Jc3RhdGljIGNoYXIgdHJhY2VfYnVmW1RSQUNFX0JVRl9TSVpFXTsKLQotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9ICZnbG9iYWxfdHJhY2U7Ci0Jc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKLQlpbnQgY3B1LCBsZW4gPSAwLCBzaXplLCBwYzsKLQlzdHJ1Y3QgcHJpbnRfZW50cnkgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwotCi0JaWYgKHRyYWNpbmdfZGlzYWJsZWQgfHwgdHJhY2luZ19zZWxmdGVzdF9ydW5uaW5nKQotCQlyZXR1cm4gMDsKLQotCXBjID0gcHJlZW1wdF9jb3VudCgpOwotCXByZWVtcHRfZGlzYWJsZV9ub3RyYWNlKCk7Ci0JY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlkYXRhID0gdHItPmRhdGFbY3B1XTsKLQotCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKSkKLQkJZ290byBvdXQ7Ci0KLQlwYXVzZV9ncmFwaF90cmFjaW5nKCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRyYWNlX2J1Zl9sb2NrLCBpcnFfZmxhZ3MpOwotCWxlbiA9IHZzbnByaW50Zih0cmFjZV9idWYsIFRSQUNFX0JVRl9TSVpFLCBmbXQsIGFyZ3MpOwotCi0JbGVuID0gbWluKGxlbiwgVFJBQ0VfQlVGX1NJWkUtMSk7Ci0JdHJhY2VfYnVmW2xlbl0gPSAwOwotCi0Jc2l6ZSA9IHNpemVvZigqZW50cnkpICsgbGVuICsgMTsKLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplLCAmaXJxX2ZsYWdzKTsKLQlpZiAoIWV2ZW50KQotCQlnb3RvIG91dF91bmxvY2s7Ci0JZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCBpcnFfZmxhZ3MsIHBjKTsKLQllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX1BSSU5UOwotCWVudHJ5LT5pcAkJCT0gaXA7Ci0JZW50cnktPmRlcHRoCQkJPSBkZXB0aDsKLQotCW1lbWNweSgmZW50cnktPmJ1ZiwgdHJhY2VfYnVmLCBsZW4pOwotCWVudHJ5LT5idWZbbGVuXSA9IDA7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKLQotIG91dF91bmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHJhY2VfYnVmX2xvY2ssIGlycV9mbGFncyk7Ci0JdW5wYXVzZV9ncmFwaF90cmFjaW5nKCk7Ci0gb3V0OgotCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKLQotCXJldHVybiBsZW47Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV92cHJpbnRrKTsKLQotaW50IF9fZnRyYWNlX3ByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlpbnQgcmV0OwotCXZhX2xpc3QgYXA7Ci0KLQlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUFJJTlRLKSkKLQkJcmV0dXJuIDA7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQlyZXQgPSB0cmFjZV92cHJpbnRrKGlwLCB0YXNrX2N1cnJfcmV0X3N0YWNrKGN1cnJlbnQpLCBmbXQsIGFwKTsKLQl2YV9lbmQoYXApOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChfX2Z0cmFjZV9wcmludGspOwotCiBzdGF0aWMgaW50IHRyYWNlX3BhbmljX2hhbmRsZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnVudXNlZCkKIHsKQEAgLTM3NTAsMTQgKzQwNDEsMTUgQEAKIAogCXByaW50ayhLRVJOX1RSQUNFICIlcyIsIHMtPmJ1ZmZlcik7CiAKLQl0cmFjZV9zZXFfcmVzZXQocyk7CisJdHJhY2Vfc2VxX2luaXQocyk7CiB9CiAKLXZvaWQgZnRyYWNlX2R1bXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZnRyYWNlX2R1bXAoYm9vbCBkaXNhYmxlX3RyYWNpbmcpCiB7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhmdHJhY2VfZHVtcF9sb2NrKTsKIAkvKiB1c2Ugc3RhdGljIGJlY2F1c2UgaXRlciBjYW4gYmUgYSBiaXQgYmlnIGZvciB0aGUgc3RhY2sgKi8KIAlzdGF0aWMgc3RydWN0IHRyYWNlX2l0ZXJhdG9yIGl0ZXI7CisJdW5zaWduZWQgaW50IG9sZF91c2Vyb2JqOwogCXN0YXRpYyBpbnQgZHVtcF9yYW47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY250ID0gMCwgY3B1OwpAQCAtMzc2OSwyMSArNDA2MSwyNiBAQAogCiAJZHVtcF9yYW4gPSAxOwogCi0JLyogTm8gdHVybmluZyBiYWNrISAqLwogCXRyYWNpbmdfb2ZmKCk7Ci0JZnRyYWNlX2tpbGwoKTsKKworCWlmIChkaXNhYmxlX3RyYWNpbmcpCisJCWZ0cmFjZV9raWxsKCk7CiAKIAlmb3JfZWFjaF90cmFjaW5nX2NwdShjcHUpIHsKIAkJYXRvbWljX2luYygmZ2xvYmFsX3RyYWNlLmRhdGFbY3B1XS0+ZGlzYWJsZWQpOwogCX0KIAorCW9sZF91c2Vyb2JqID0gdHJhY2VfZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9VU0VST0JKOworCiAJLyogZG9uJ3QgbG9vayBhdCB1c2VyIG1lbW9yeSBpbiBwYW5pYyBtb2RlICovCiAJdHJhY2VfZmxhZ3MgJj0gflRSQUNFX0lURVJfU1lNX1VTRVJPQko7CiAKIAlwcmludGsoS0VSTl9UUkFDRSAiRHVtcGluZyBmdHJhY2UgYnVmZmVyOlxuIik7CiAKKwkvKiBTaW11bGF0ZSB0aGUgaXRlcmF0b3IgKi8KIAlpdGVyLnRyID0gJmdsb2JhbF90cmFjZTsKIAlpdGVyLnRyYWNlID0gY3VycmVudF90cmFjZTsKKwlpdGVyLmNwdV9maWxlID0gVFJBQ0VfUElQRV9BTExfQ1BVOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIHN0b3AgYWxsIHRyYWNpbmcgb24gYWxsIENQVVMgdG8gcmVhZCB0aGUKQEAgLTM4MTksMTMgKzQxMTYsMzAgQEAKIAllbHNlCiAJCXByaW50ayhLRVJOX1RSQUNFICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCisJLyogUmUtZW5hYmxlIHRyYWNpbmcgaWYgcmVxdWVzdGVkICovCisJaWYgKCFkaXNhYmxlX3RyYWNpbmcpIHsKKwkJdHJhY2VfZmxhZ3MgfD0gb2xkX3VzZXJvYmo7CisKKwkJZm9yX2VhY2hfdHJhY2luZ19jcHUoY3B1KSB7CisJCQlhdG9taWNfZGVjKCZnbG9iYWxfdHJhY2UuZGF0YVtjcHVdLT5kaXNhYmxlZCk7CisJCX0KKwkJdHJhY2luZ19vbigpOworCX0KKwogIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmdHJhY2VfZHVtcF9sb2NrLCBmbGFncyk7CiB9CiAKKy8qIEJ5IGRlZmF1bHQ6IGRpc2FibGUgdHJhY2luZyBhZnRlciB0aGUgZHVtcCAqLwordm9pZCBmdHJhY2VfZHVtcCh2b2lkKQoreworCV9fZnRyYWNlX2R1bXAodHJ1ZSk7Cit9CisKIF9faW5pdCBzdGF0aWMgaW50IHRyYWNlcl9hbGxvY19idWZmZXJzKHZvaWQpCiB7CiAJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKKwlpbnQgcmluZ19idWZfc2l6ZTsKIAlpbnQgaTsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIApAQCAtMzgzNSwxMSArNDE0OSwyMSBAQAogCWlmICghYWxsb2NfY3B1bWFza192YXIoJnRyYWNpbmdfY3B1bWFzaywgR0ZQX0tFUk5FTCkpCiAJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyX21hc2s7CiAKKwlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZ0cmFjaW5nX3JlYWRlcl9jcHVtYXNrLCBHRlBfS0VSTkVMKSkKKwkJZ290byBvdXRfZnJlZV90cmFjaW5nX2NwdW1hc2s7CisKKwkvKiBUbyBzYXZlIG1lbW9yeSwga2VlcCB0aGUgcmluZyBidWZmZXIgc2l6ZSB0byBpdHMgbWluaW11bSAqLworCWlmIChyaW5nX2J1ZmZlcl9leHBhbmRlZCkKKwkJcmluZ19idWZfc2l6ZSA9IHRyYWNlX2J1Zl9zaXplOworCWVsc2UKKwkJcmluZ19idWZfc2l6ZSA9IDE7CisKIAljcHVtYXNrX2NvcHkodHJhY2luZ19idWZmZXJfbWFzaywgY3B1X3Bvc3NpYmxlX21hc2spOwogCWNwdW1hc2tfY29weSh0cmFjaW5nX2NwdW1hc2ssIGNwdV9hbGxfbWFzayk7CisJY3B1bWFza19jbGVhcih0cmFjaW5nX3JlYWRlcl9jcHVtYXNrKTsKIAogCS8qIFRPRE86IG1ha2UgdGhlIG51bWJlciBvZiBidWZmZXJzIGhvdCBwbHVnZ2FibGUgd2l0aCBDUFVTICovCi0JZ2xvYmFsX3RyYWNlLmJ1ZmZlciA9IHJpbmdfYnVmZmVyX2FsbG9jKHRyYWNlX2J1Zl9zaXplLAorCWdsb2JhbF90cmFjZS5idWZmZXIgPSByaW5nX2J1ZmZlcl9hbGxvYyhyaW5nX2J1Zl9zaXplLAogCQkJCQkJICAgVFJBQ0VfQlVGRkVSX0ZMQUdTKTsKIAlpZiAoIWdsb2JhbF90cmFjZS5idWZmZXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0cmFjZXI6IGZhaWxlZCB0byBhbGxvY2F0ZSByaW5nIGJ1ZmZlciFcbiIpOwpAQCAtMzg1MCw3ICs0MTc0LDcgQEAKIAogCiAjaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKLQltYXhfdHIuYnVmZmVyID0gcmluZ19idWZmZXJfYWxsb2ModHJhY2VfYnVmX3NpemUsCisJbWF4X3RyLmJ1ZmZlciA9IHJpbmdfYnVmZmVyX2FsbG9jKHJpbmdfYnVmX3NpemUsCiAJCQkJCSAgICAgVFJBQ0VfQlVGRkVSX0ZMQUdTKTsKIAlpZiAoIW1heF90ci5idWZmZXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0cmFjZXI6IGZhaWxlZCB0byBhbGxvY2F0ZSBtYXggcmluZyBidWZmZXIhXG4iKTsKQEAgLTM4NzEsMTQgKzQxOTUsMTAgQEAKIAl0cmFjZV9pbml0X2NtZGxpbmVzKCk7CiAKIAlyZWdpc3Rlcl90cmFjZXIoJm5vcF90cmFjZSk7CisJY3VycmVudF90cmFjZSA9ICZub3BfdHJhY2U7CiAjaWZkZWYgQ09ORklHX0JPT1RfVFJBQ0VSCiAJcmVnaXN0ZXJfdHJhY2VyKCZib290X3RyYWNlcik7Ci0JY3VycmVudF90cmFjZSA9ICZib290X3RyYWNlcjsKLQljdXJyZW50X3RyYWNlLT5pbml0KCZnbG9iYWxfdHJhY2UpOwotI2Vsc2UKLQljdXJyZW50X3RyYWNlID0gJm5vcF90cmFjZTsKICNlbmRpZgotCiAJLyogQWxsIHNlZW1zIE9LLCBlbmFibGUgdHJhY2luZyAqLwogCXRyYWNpbmdfZGlzYWJsZWQgPSAwOwogCkBAIC0zODg2LDE0ICs0MjA2LDM4IEBACiAJCQkJICAgICAgICZ0cmFjZV9wYW5pY19ub3RpZmllcik7CiAKIAlyZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnRyYWNlX2RpZV9ub3RpZmllcik7Ci0JcmV0ID0gMDsKKworCXJldHVybiAwOwogCiBvdXRfZnJlZV9jcHVtYXNrOgorCWZyZWVfY3B1bWFza192YXIodHJhY2luZ19yZWFkZXJfY3B1bWFzayk7CitvdXRfZnJlZV90cmFjaW5nX2NwdW1hc2s6CiAJZnJlZV9jcHVtYXNrX3Zhcih0cmFjaW5nX2NwdW1hc2spOwogb3V0X2ZyZWVfYnVmZmVyX21hc2s6CiAJZnJlZV9jcHVtYXNrX3Zhcih0cmFjaW5nX2J1ZmZlcl9tYXNrKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQorCitfX2luaXQgc3RhdGljIGludCBjbGVhcl9ib290X3RyYWNlcih2b2lkKQoreworCS8qCisJICogVGhlIGRlZmF1bHQgdHJhY2VyIGF0IGJvb3QgYnVmZmVyIGlzIGFuIGluaXQgc2VjdGlvbi4KKwkgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBsYXRlaW5pdC4gSWYgd2UgZGlkIG5vdAorCSAqIGZpbmQgdGhlIGJvb3QgdHJhY2VyLCB0aGVuIGNsZWFyIGl0IG91dCwgdG8gcHJldmVudAorCSAqIGxhdGVyIHJlZ2lzdHJhdGlvbiBmcm9tIGFjY2Vzc2luZyB0aGUgYnVmZmVyIHRoYXQgaXMKKwkgKiBhYm91dCB0byBiZSBmcmVlZC4KKwkgKi8KKwlpZiAoIWRlZmF1bHRfYm9vdHVwX3RyYWNlcikKKwkJcmV0dXJuIDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJmdHJhY2UgYm9vdHVwIHRyYWNlciAnJXMnIG5vdCByZWdpc3RlcmVkLlxuIiwKKwkgICAgICAgZGVmYXVsdF9ib290dXBfdHJhY2VyKTsKKwlkZWZhdWx0X2Jvb3R1cF90cmFjZXIgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKIGVhcmx5X2luaXRjYWxsKHRyYWNlcl9hbGxvY19idWZmZXJzKTsKIGZzX2luaXRjYWxsKHRyYWNlcl9pbml0X2RlYnVnZnMpOworbGF0ZV9pbml0Y2FsbChjbGVhcl9ib290X3RyYWNlcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuaCBiL2tlcm5lbC90cmFjZS90cmFjZS5oCmluZGV4IDRkM2QzODEuLmNiMGNlM2YgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5oCkBAIC05LDYgKzksOCBAQAogI2luY2x1ZGUgPGxpbnV4L21taW90cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPHRyYWNlL2Jvb3QuaD4KKyNpbmNsdWRlIDx0cmFjZS9rbWVtdHJhY2UuaD4KKyNpbmNsdWRlIDx0cmFjZS9wb3dlci5oPgogCiBlbnVtIHRyYWNlX3R5cGUgewogCV9fVFJBQ0VfRklSU1RfVFlQRSA9IDAsCkBAIC0xNiw5ICsxOCw5IEBACiAJVFJBQ0VfRk4sCiAJVFJBQ0VfQ1RYLAogCVRSQUNFX1dBS0UsCi0JVFJBQ0VfQ09OVCwKIAlUUkFDRV9TVEFDSywKIAlUUkFDRV9QUklOVCwKKwlUUkFDRV9CUFJJTlQsCiAJVFJBQ0VfU1BFQ0lBTCwKIAlUUkFDRV9NTUlPX1JXLAogCVRSQUNFX01NSU9fTUFQLApAQCAtMjksOSArMzEsMTQgQEAKIAlUUkFDRV9HUkFQSF9FTlQsCiAJVFJBQ0VfVVNFUl9TVEFDSywKIAlUUkFDRV9IV19CUkFOQ0hFUywKKwlUUkFDRV9TWVNDQUxMX0VOVEVSLAorCVRSQUNFX1NZU0NBTExfRVhJVCwKKwlUUkFDRV9LTUVNX0FMTE9DLAorCVRSQUNFX0tNRU1fRlJFRSwKIAlUUkFDRV9QT1dFUiwKKwlUUkFDRV9CTEssCiAKLQlfX1RSQUNFX0xBU1RfVFlQRQorCV9fVFJBQ0VfTEFTVF9UWVBFLAogfTsKIAogLyoKQEAgLTQyLDcgKzQ5LDYgQEAKICAqLwogc3RydWN0IHRyYWNlX2VudHJ5IHsKIAl1bnNpZ25lZCBjaGFyCQl0eXBlOwotCXVuc2lnbmVkIGNoYXIJCWNwdTsKIAl1bnNpZ25lZCBjaGFyCQlmbGFnczsKIAl1bnNpZ25lZCBjaGFyCQlwcmVlbXB0X2NvdW50OwogCWludAkJCXBpZDsKQEAgLTYwLDEzICs2NiwxMyBAQAogCiAvKiBGdW5jdGlvbiBjYWxsIGVudHJ5ICovCiBzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSB7Ci0Jc3RydWN0IHRyYWNlX2VudHJ5CQkJZW50OworCXN0cnVjdCB0cmFjZV9lbnRyeQkJZW50OwogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50CQlncmFwaF9lbnQ7CiB9OwogCiAvKiBGdW5jdGlvbiByZXR1cm4gZW50cnkgKi8KIHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5IHsKLQlzdHJ1Y3QgdHJhY2VfZW50cnkJCQllbnQ7CisJc3RydWN0IHRyYWNlX2VudHJ5CQllbnQ7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQJCXJldDsKIH07CiBleHRlcm4gc3RydWN0IHRyYWNlciBib290X3RyYWNlcjsKQEAgLTExMiwxMiArMTE4LDE4IEBACiB9OwogCiAvKgotICogZnRyYWNlX3ByaW50ayBlbnRyeToKKyAqIHRyYWNlX3ByaW50ayBlbnRyeToKICAqLworc3RydWN0IGJwcmludF9lbnRyeSB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKKwl1bnNpZ25lZCBsb25nCQlpcDsKKwljb25zdCBjaGFyCQkqZm10OworCXUzMgkJCWJ1ZltdOworfTsKKwogc3RydWN0IHByaW50X2VudHJ5IHsKIAlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OwogCXVuc2lnbmVkIGxvbmcJCWlwOwotCWludAkJCWRlcHRoOwogCWNoYXIJCQlidWZbXTsKIH07CiAKQEAgLTE3MCwxNSArMTgyLDQ1IEBACiAJc3RydWN0IHBvd2VyX3RyYWNlCXN0YXRlX2RhdGE7CiB9OwogCitzdHJ1Y3Qga21lbXRyYWNlX2FsbG9jX2VudHJ5IHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OworCWVudW0ga21lbXRyYWNlX3R5cGVfaWQgdHlwZV9pZDsKKwl1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZTsKKwljb25zdCB2b2lkICpwdHI7CisJc2l6ZV90IGJ5dGVzX3JlcTsKKwlzaXplX3QgYnl0ZXNfYWxsb2M7CisJZ2ZwX3QgZ2ZwX2ZsYWdzOworCWludCBub2RlOworfTsKKworc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5IHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OworCWVudW0ga21lbXRyYWNlX3R5cGVfaWQgdHlwZV9pZDsKKwl1bnNpZ25lZCBsb25nIGNhbGxfc2l0ZTsKKwljb25zdCB2b2lkICpwdHI7Cit9OworCitzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciB7CisJc3RydWN0IHRyYWNlX2VudHJ5CWVudDsKKwlpbnQJCQlucjsKKwl1bnNpZ25lZCBsb25nCQlhcmdzW107Cit9OworCitzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0IHsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkJZW50OworCWludAkJCW5yOworCXVuc2lnbmVkIGxvbmcJCXJldDsKK307CisKKwogLyoKICAqIHRyYWNlX2ZsYWdfdHlwZSBpcyBhbiBlbnVtZXJhdGlvbiB0aGF0IGhvbGRzIGRpZmZlcmVudAogICogc3RhdGVzIHdoZW4gYSB0cmFjZSBvY2N1cnMuIFRoZXNlIGFyZToKICAqICBJUlFTX09GRgkJLSBpbnRlcnJ1cHRzIHdlcmUgZGlzYWJsZWQKLSAqICBJUlFTX05PU1VQUE9SVCAJLSBhcmNoIGRvZXMgbm90IHN1cHBvcnQgaXJxc19kaXNhYmxlZF9mbGFncworICogIElSUVNfTk9TVVBQT1JUCS0gYXJjaCBkb2VzIG5vdCBzdXBwb3J0IGlycXNfZGlzYWJsZWRfZmxhZ3MKICAqICBORUVEX1JFU0NFRAkJLSByZXNjaGVkdWxlIGlzIHJlcXVlc3RlZAogICogIEhBUkRJUlEJCS0gaW5zaWRlIGFuIGludGVycnVwdCBoYW5kbGVyCiAgKiAgU09GVElSUQkJLSBpbnNpZGUgYSBzb2Z0aXJxIGhhbmRsZXIKLSAqICBDT05UCQktIG11bHRpcGxlIGVudHJpZXMgaG9sZCB0aGUgdHJhY2UgaXRlbQogICovCiBlbnVtIHRyYWNlX2ZsYWdfdHlwZSB7CiAJVFJBQ0VfRkxBR19JUlFTX09GRgkJPSAweDAxLApAQCAtMTg2LDcgKzIyOCw2IEBACiAJVFJBQ0VfRkxBR19ORUVEX1JFU0NIRUQJCT0gMHgwNCwKIAlUUkFDRV9GTEFHX0hBUkRJUlEJCT0gMHgwOCwKIAlUUkFDRV9GTEFHX1NPRlRJUlEJCT0gMHgxMCwKLQlUUkFDRV9GTEFHX0NPTlQJCQk9IDB4MjAsCiB9OwogCiAjZGVmaW5lIFRSQUNFX0JVRl9TSVpFCQkxMDI0CkBAIC0xOTgsNiArMjM5LDcgQEAKICAqLwogc3RydWN0IHRyYWNlX2FycmF5X2NwdSB7CiAJYXRvbWljX3QJCWRpc2FibGVkOworCXZvaWQJCQkqYnVmZmVyX3BhZ2U7CS8qIHJpbmcgYnVmZmVyIHNwYXJlICovCiAKIAkvKiB0aGVzZSBmaWVsZHMgZ2V0IGNvcGllZCBpbnRvIG1heC10cmFjZTogKi8KIAl1bnNpZ25lZCBsb25nCQl0cmFjZV9pZHg7CkBAIC0yNjIsMTAgKzMwNCwxMCBAQAogCWRvIHsJCQkJCQkJCVwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgZnRyYWNlX2VudHJ5LCBUUkFDRV9GTik7CVwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSwgMCk7CVwKLQkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgdHJhY2VfZmllbGRfY29udCwgVFJBQ0VfQ09OVCk7IFwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qgc3RhY2tfZW50cnksIFRSQUNFX1NUQUNLKTsJXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCB1c2Vyc3RhY2tfZW50cnksIFRSQUNFX1VTRVJfU1RBQ0spO1wKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgcHJpbnRfZW50cnksIFRSQUNFX1BSSU5UKTsJXAorCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBicHJpbnRfZW50cnksIFRSQUNFX0JQUklOVCk7CVwKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSwgMCk7CQlcCiAJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHRyYWNlX21taW90cmFjZV9ydywJCVwKIAkJCSAgVFJBQ0VfTU1JT19SVyk7CQkJCVwKQEAgLTI3OSw3ICszMjEsMTUgQEAKIAkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldF9lbnRyeSwJXAogCQkJICBUUkFDRV9HUkFQSF9SRVQpOwkJXAogCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCBod19icmFuY2hfZW50cnksIFRSQUNFX0hXX0JSQU5DSEVTKTtcCi0gCQlJRl9BU1NJR04odmFyLCBlbnQsIHN0cnVjdCB0cmFjZV9wb3dlciwgVFJBQ0VfUE9XRVIpOyBcCisJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IHRyYWNlX3Bvd2VyLCBUUkFDRV9QT1dFUik7IFwKKwkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qga21lbXRyYWNlX2FsbG9jX2VudHJ5LAlcCisJCQkgIFRSQUNFX0tNRU1fQUxMT0MpOwlcCisJCUlGX0FTU0lHTih2YXIsIGVudCwgc3RydWN0IGttZW10cmFjZV9mcmVlX2VudHJ5LAlcCisJCQkgIFRSQUNFX0tNRU1fRlJFRSk7CVwKKwkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciwJCVwKKwkJCSAgVFJBQ0VfU1lTQ0FMTF9FTlRFUik7CQkJCVwKKwkJSUZfQVNTSUdOKHZhciwgZW50LCBzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0LAkJXAorCQkJICBUUkFDRV9TWVNDQUxMX0VYSVQpOwkJCQlcCiAJCV9fZnRyYWNlX2JhZF90eXBlKCk7CQkJCQlcCiAJfSB3aGlsZSAoMCkKIApAQCAtMjg3LDcgKzMzNyw4IEBACiBlbnVtIHByaW50X2xpbmVfdCB7CiAJVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUJPSAwLAkvKiBSZXRyeSBhZnRlciBmbHVzaGluZyB0aGUgc2VxICovCiAJVFJBQ0VfVFlQRV9IQU5ETEVECT0gMSwKLQlUUkFDRV9UWVBFX1VOSEFORExFRAk9IDIJLyogUmVsYXkgdG8gb3RoZXIgb3V0cHV0IGZ1bmN0aW9ucyAqLworCVRSQUNFX1RZUEVfVU5IQU5ETEVECT0gMiwJLyogUmVsYXkgdG8gb3RoZXIgb3V0cHV0IGZ1bmN0aW9ucyAqLworCVRSQUNFX1RZUEVfTk9fQ09OU1VNRQk9IDMJLyogSGFuZGxlZCBidXQgYXNrIHRvIG5vdCBjb25zdW1lICovCiB9OwogCiAKQEAgLTI5Nyw4ICszNDgsOCBAQAogICogZmxhZ3MgdmFsdWUgaW4gc3RydWN0IHRyYWNlcl9mbGFncy4KICAqLwogc3RydWN0IHRyYWNlcl9vcHQgewotCWNvbnN0IGNoYXIgCSpuYW1lOyAvKiBXaWxsIGFwcGVhciBvbiB0aGUgdHJhY2Vfb3B0aW9ucyBmaWxlICovCi0JdTMyIAkJYml0OyAvKiBNYXNrIGFzc2lnbmVkIGluIHZhbCBmaWVsZCBpbiB0cmFjZXJfZmxhZ3MgKi8KKwljb25zdCBjaGFyCSpuYW1lOyAvKiBXaWxsIGFwcGVhciBvbiB0aGUgdHJhY2Vfb3B0aW9ucyBmaWxlICovCisJdTMyCQliaXQ7IC8qIE1hc2sgYXNzaWduZWQgaW4gdmFsIGZpZWxkIGluIHRyYWNlcl9mbGFncyAqLwogfTsKIAogLyoKQEAgLTMwNywyOCArMzU4LDUxIEBACiAgKi8KIHN0cnVjdCB0cmFjZXJfZmxhZ3MgewogCXUzMgkJCXZhbDsKLQlzdHJ1Y3QgdHJhY2VyX29wdCAJKm9wdHM7CisJc3RydWN0IHRyYWNlcl9vcHQJKm9wdHM7CiB9OwogCiAvKiBNYWtlcyBtb3JlIGVhc3kgdG8gZGVmaW5lIGEgdHJhY2VyIG9wdCAqLwogI2RlZmluZSBUUkFDRVJfT1BUKHMsIGIpCS5uYW1lID0gI3MsIC5iaXQgPSBiCiAKLS8qCi0gKiBBIHNwZWNpZmljIHRyYWNlciwgcmVwcmVzZW50ZWQgYnkgbWV0aG9kcyB0aGF0IG9wZXJhdGUgb24gYSB0cmFjZSBhcnJheToKKworLyoqCisgKiBzdHJ1Y3QgdHJhY2VyIC0gYSBzcGVjaWZpYyB0cmFjZXIgYW5kIGl0cyBjYWxsYmFja3MgdG8gaW50ZXJhY3Qgd2l0aCBkZWJ1Z2ZzCisgKiBAbmFtZTogdGhlIG5hbWUgY2hvc2VuIHRvIHNlbGVjdCBpdCBvbiB0aGUgYXZhaWxhYmxlX3RyYWNlcnMgZmlsZQorICogQGluaXQ6IGNhbGxlZCB3aGVuIG9uZSBzd2l0Y2hlcyB0byB0aGlzIHRyYWNlciAoZWNobyBuYW1lID4gY3VycmVudF90cmFjZXIpCisgKiBAcmVzZXQ6IGNhbGxlZCB3aGVuIG9uZSBzd2l0Y2hlcyB0byBhbm90aGVyIHRyYWNlcgorICogQHN0YXJ0OiBjYWxsZWQgd2hlbiB0cmFjaW5nIGlzIHVucGF1c2VkIChlY2hvIDEgPiB0cmFjaW5nX2VuYWJsZWQpCisgKiBAc3RvcDogY2FsbGVkIHdoZW4gdHJhY2luZyBpcyBwYXVzZWQgKGVjaG8gMCA+IHRyYWNpbmdfZW5hYmxlZCkKKyAqIEBvcGVuOiBjYWxsZWQgd2hlbiB0aGUgdHJhY2UgZmlsZSBpcyBvcGVuZWQKKyAqIEBwaXBlX29wZW46IGNhbGxlZCB3aGVuIHRoZSB0cmFjZV9waXBlIGZpbGUgaXMgb3BlbmVkCisgKiBAd2FpdF9waXBlOiBvdmVycmlkZSBob3cgdGhlIHVzZXIgd2FpdHMgZm9yIHRyYWNlcyBvbiB0cmFjZV9waXBlCisgKiBAY2xvc2U6IGNhbGxlZCB3aGVuIHRoZSB0cmFjZSBmaWxlIGlzIHJlbGVhc2VkCisgKiBAcmVhZDogb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcmVhZCBjYWxsYmFjayBvbiB0cmFjZV9waXBlCisgKiBAc3BsaWNlX3JlYWQ6IG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNwbGljZV9yZWFkIGNhbGxiYWNrIG9uIHRyYWNlX3BpcGUKKyAqIEBzZWxmdGVzdDogc2VsZnRlc3QgdG8gcnVuIG9uIGJvb3QgKHNlZSB0cmFjZV9zZWxmdGVzdC5jKQorICogQHByaW50X2hlYWRlcnM6IG92ZXJyaWRlIHRoZSBmaXJzdCBsaW5lcyB0aGF0IGRlc2NyaWJlIHlvdXIgY29sdW1ucworICogQHByaW50X2xpbmU6IGNhbGxiYWNrIHRoYXQgcHJpbnRzIGEgdHJhY2UKKyAqIEBzZXRfZmxhZzogc2lnbmFscyBvbmUgb2YgeW91ciBwcml2YXRlIGZsYWdzIGNoYW5nZWQgKHRyYWNlX29wdGlvbnMgZmlsZSkKKyAqIEBmbGFnczogeW91ciBwcml2YXRlIGZsYWdzCiAgKi8KIHN0cnVjdCB0cmFjZXIgewogCWNvbnN0IGNoYXIJCSpuYW1lOwotCS8qIFlvdXIgdHJhY2VyIHNob3VsZCByYWlzZSBhIHdhcm5pbmcgaWYgaW5pdCBmYWlscyAqLwogCWludAkJCSgqaW5pdCkoc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CiAJdm9pZAkJCSgqcmVzZXQpKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogCXZvaWQJCQkoKnN0YXJ0KShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKIAl2b2lkCQkJKCpzdG9wKShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKIAl2b2lkCQkJKCpvcGVuKShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOwogCXZvaWQJCQkoKnBpcGVfb3Blbikoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKKwl2b2lkCQkJKCp3YWl0X3BpcGUpKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CiAJdm9pZAkJCSgqY2xvc2UpKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CiAJc3NpemVfdAkJCSgqcmVhZCkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAogCQkJCQlzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsCiAJCQkJCXNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcyk7CisJc3NpemVfdAkJCSgqc3BsaWNlX3JlYWQpKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCQkgICAgICAgbG9mZl90ICpwcG9zLAorCQkJCQkgICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKKwkJCQkJICAgICAgIHNpemVfdCBsZW4sCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUCiAJaW50CQkJKCpzZWxmdGVzdCkoc3RydWN0IHRyYWNlciAqdHJhY2UsCiAJCQkJCSAgICBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKQEAgLTMzOSw3ICs0MTMsOCBAQAogCWludAkJCSgqc2V0X2ZsYWcpKHUzMiBvbGRfZmxhZ3MsIHUzMiBiaXQsIGludCBzZXQpOwogCXN0cnVjdCB0cmFjZXIJCSpuZXh0OwogCWludAkJCXByaW50X21heDsKLQlzdHJ1Y3QgdHJhY2VyX2ZsYWdzIAkqZmxhZ3M7CisJc3RydWN0IHRyYWNlcl9mbGFncwkqZmxhZ3M7CisJc3RydWN0IHRyYWNlcl9zdGF0CSpzdGF0czsKIH07CiAKIHN0cnVjdCB0cmFjZV9zZXEgewpAQCAtMzQ4LDYgKzQyMywxNiBAQAogCXVuc2lnbmVkIGludAkJcmVhZHBvczsKIH07CiAKK3N0YXRpYyBpbmxpbmUgdm9pZAordHJhY2Vfc2VxX2luaXQoc3RydWN0IHRyYWNlX3NlcSAqcykKK3sKKwlzLT5sZW4gPSAwOworCXMtPnJlYWRwb3MgPSAwOworfQorCisKKyNkZWZpbmUgVFJBQ0VfUElQRV9BTExfQ1BVCS0xCisKIC8qCiAgKiBUcmFjZSBpdGVyYXRvciAtIHVzZWQgYnkgcHJpbnRvdXQgcm91dGluZXMgd2hvIHByZXNlbnQgdHJhY2UKICAqIHJlc3VsdHMgdG8gdXNlcnMgYW5kIHdoaWNoIHJvdXRpbmVzIG1pZ2h0IHNsZWVwLCBldGM6CkBAIC0zNTYsNiArNDQxLDggQEAKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkJKnRyOwogCXN0cnVjdCB0cmFjZXIJCSp0cmFjZTsKIAl2b2lkCQkJKnByaXZhdGU7CisJaW50CQkJY3B1X2ZpbGU7CisJc3RydWN0IG11dGV4CQltdXRleDsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfaXRlcgkqYnVmZmVyX2l0ZXJbTlJfQ1BVU107CiAKIAkvKiBUaGUgYmVsb3cgaXMgemVyb2VkIG91dCBpbiBwaXBlX3JlYWQgKi8KQEAgLTM3MSw2ICs0NTgsNyBAQAogCWNwdW1hc2tfdmFyX3QJCXN0YXJ0ZWQ7CiB9OwogCitpbnQgdHJhY2VyX2luaXQoc3RydWN0IHRyYWNlciAqdCwgc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CiBpbnQgdHJhY2luZ19pc19lbmFibGVkKHZvaWQpOwogdm9pZCB0cmFjZV93YWtlX3VwKHZvaWQpOwogdm9pZCB0cmFjaW5nX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIGludCBjcHUpOwpAQCAtMzc5LDI2ICs0NjcsNTAgQEAKIHN0cnVjdCBkZW50cnkgKnRyYWNpbmdfaW5pdF9kZW50cnkodm9pZCk7CiB2b2lkIGluaXRfdHJhY2VyX3N5c3Byb2ZfZGVidWdmcyhzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcik7CiAKK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudDsKKworc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICp0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCisJCQkJCQkgICAgdW5zaWduZWQgY2hhciB0eXBlLAorCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkJCQkgICAgaW50IHBjKTsKK3ZvaWQgdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKKwkJCQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50LAorCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYyk7CisKK3N0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqCit0cmFjZV9jdXJyZW50X2J1ZmZlcl9sb2NrX3Jlc2VydmUodW5zaWduZWQgY2hhciB0eXBlLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYyk7Cit2b2lkIHRyYWNlX2N1cnJlbnRfYnVmZmVyX3VubG9ja19jb21taXQoc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudCwKKwkJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKK3ZvaWQgdHJhY2Vfbm93YWtlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQsCisJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYyk7CisKIHN0cnVjdCB0cmFjZV9lbnRyeSAqdHJhY2luZ19nZXRfdHJhY2VfZW50cnkoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKIAkJCQkJCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGEpOworCitzdHJ1Y3QgdHJhY2VfZW50cnkgKnRyYWNlX2ZpbmRfbmV4dF9lbnRyeShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgaW50ICplbnRfY3B1LCB1NjQgKmVudF90cyk7CisKIHZvaWQgdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZShzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5LAogCQkJCSAgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCQkgIGludCBwYyk7CiAKK3ZvaWQgZGVmYXVsdF93YWl0X3BpcGUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKK3ZvaWQgcG9sbF93YWl0X3BpcGUoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKKwogdm9pZCBmdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKIAkJCSAgICBzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgaXAsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKIHZvaWQgdHJhY2luZ19zY2hlZF9zd2l0Y2hfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwKIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQsCiAJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKIHZvaWQgdHJhY2luZ19yZWNvcmRfY21kbGluZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAKIHZvaWQgdHJhY2luZ19zY2hlZF93YWtldXBfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhLAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZWUsCiAJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpjdXIsCiAJCQkJdW5zaWduZWQgbG9uZyBmbGFncywgaW50IHBjKTsKQEAgLTQwOCwxNCArNTIwLDEyIEBACiAJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMiwKIAkJICAgdW5zaWduZWQgbG9uZyBhcmczLCBpbnQgcGMpOwogdm9pZCB0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAotCQkgICAgc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YSwKIAkJICAgIHVuc2lnbmVkIGxvbmcgaXAsCiAJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCwKIAkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBwYyk7CiAKIHZvaWQgdHJhY2VfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSk7CiBpbnQgdHJhY2VfZ3JhcGhfZW50cnkoc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKnRyYWNlKTsKLXZvaWQgdHJhY2VfaHdfYnJhbmNoKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHU2NCBmcm9tLCB1NjQgdG8pOwogCiB2b2lkIHRyYWNpbmdfc3RhcnRfY21kbGluZV9yZWNvcmQodm9pZCk7CiB2b2lkIHRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCh2b2lkKTsKQEAgLTQzNCwxNSArNTQ0LDExIEBACiB2b2lkIHVwZGF0ZV9tYXhfdHJfc2luZ2xlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCiAJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY3B1KTsKIAotZXh0ZXJuIGN5Y2xlX3QgZnRyYWNlX25vdyhpbnQgY3B1KTsKK3ZvaWQgX190cmFjZV9zdGFjayhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLAorCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkgICBpbnQgc2tpcCwgaW50IHBjKTsKIAotI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKLXZvaWQgdHJhY2luZ19zdGFydF9mdW5jdGlvbl90cmFjZSh2b2lkKTsKLXZvaWQgdHJhY2luZ19zdG9wX2Z1bmN0aW9uX3RyYWNlKHZvaWQpOwotI2Vsc2UKLSMgZGVmaW5lIHRyYWNpbmdfc3RhcnRfZnVuY3Rpb25fdHJhY2UoKQkJZG8geyB9IHdoaWxlICgwKQotIyBkZWZpbmUgdHJhY2luZ19zdG9wX2Z1bmN0aW9uX3RyYWNlKCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgorZXh0ZXJuIGN5Y2xlX3QgZnRyYWNlX25vdyhpbnQgY3B1KTsKIAogI2lmZGVmIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIKIHR5cGVkZWYgdm9pZApAQCAtNDU2LDEwICs1NjIsMTAgQEAKIAl2b2lkCQkJCSpwcml2YXRlOwogCXN0cnVjdCB0cmFjZXJfc3dpdGNoX29wcwkqbmV4dDsKIH07Ci0KLWNoYXIgKnRyYWNlX2ZpbmRfY21kbGluZShpbnQgcGlkKTsKICNlbmRpZiAvKiBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSICovCiAKK2V4dGVybiB2b2lkIHRyYWNlX2ZpbmRfY21kbGluZShpbnQgcGlkLCBjaGFyIGNvbW1bXSk7CisKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKIGV4dGVybiB1bnNpZ25lZCBsb25nIGZ0cmFjZV91cGRhdGVfdG90X2NudDsKICNkZWZpbmUgRFlOX0ZUUkFDRV9URVNUX05BTUUgdHJhY2Vfc2VsZnRlc3RfZHluYW1pY190ZXN0X2Z1bmMKQEAgLTQ2OSw2ICs1NzUsOCBAQAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUCiBleHRlcm4gaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfZnVuY3Rpb24oc3RydWN0IHRyYWNlciAqdHJhY2UsCiAJCQkJCSAgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOworZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2Z1bmN0aW9uX2dyYXBoKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAorCQkJCQkJIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpOwogZXh0ZXJuIGludCB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2lycXNvZmYoc3RydWN0IHRyYWNlciAqdHJhY2UsCiAJCQkJCSAgc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CiBleHRlcm4gaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfcHJlZW1wdG9mZihzdHJ1Y3QgdHJhY2VyICp0cmFjZSwKQEAgLTQ4OCwxOCArNTk2LDExIEBACiAjZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgKi8KIAogZXh0ZXJuIHZvaWQgKmhlYWRfcGFnZShzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhKTsKLWV4dGVybiBpbnQgdHJhY2Vfc2VxX3ByaW50ZihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Ci1leHRlcm4gdm9pZCB0cmFjZV9zZXFfcHJpbnRfY29udChzdHJ1Y3QgdHJhY2Vfc2VxICpzLAotCQkJCSBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpOwotCi1leHRlcm4gaW50Ci1zZXFfcHJpbnRfaXBfc3ltKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGxvbmcgaXAsCi0JCXVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzKTsKLWV4dGVybiBzc2l6ZV90IHRyYWNlX3NlcV90b191c2VyKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNoYXIgX191c2VyICp1YnVmLAotCQkJCSBzaXplX3QgY250KTsKIGV4dGVybiBsb25nIG5zMnVzZWNzKGN5Y2xlX3QgbnNlYyk7CiBleHRlcm4gaW50Ci10cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGludCBkZXB0aCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwordHJhY2VfdmJwcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOworZXh0ZXJuIGludAordHJhY2VfdnByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRyYWNlX2ZsYWdzOwogCkBAIC01ODAsNyArNjgxLDExIEBACiAJVFJBQ0VfSVRFUl9BTk5PVEFURQkJPSAweDIwMDAsCiAJVFJBQ0VfSVRFUl9VU0VSU1RBQ0tUUkFDRSAgICAgICA9IDB4NDAwMCwKIAlUUkFDRV9JVEVSX1NZTV9VU0VST0JKICAgICAgICAgID0gMHg4MDAwLAotCVRSQUNFX0lURVJfUFJJTlRLX01TR09OTFkJPSAweDEwMDAwCisJVFJBQ0VfSVRFUl9QUklOVEtfTVNHT05MWQk9IDB4MTAwMDAsCisJVFJBQ0VfSVRFUl9DT05URVhUX0lORk8JCT0gMHgyMDAwMCwgLyogUHJpbnQgcGlkL2NwdS90aW1lICovCisJVFJBQ0VfSVRFUl9MQVRFTkNZX0ZNVAkJPSAweDQwMDAwLAorCVRSQUNFX0lURVJfR0xPQkFMX0NMSwkJPSAweDgwMDAwLAorCVRSQUNFX0lURVJfU0xFRVBfVElNRQkJPSAweDEwMDAwMCwKIH07CiAKIC8qCkBAIC02MDEsMTIgKzcwNiwxMiBAQAogICogcHJlZW1wdF9lbmFibGUgKGFmdGVyIGEgZGlzYWJsZSksIGEgc2NoZWR1bGUgbWlnaHQgdGFrZSBwbGFjZQogICogY2F1c2luZyBhbiBpbmZpbml0ZSByZWN1cnNpb24uCiAgKgotICogVG8gcHJldmVudCB0aGlzLCB3ZSByZWFkIHRoZSBuZWVkX3JlY3NoZWQgZmxhZyBiZWZvcmUKKyAqIFRvIHByZXZlbnQgdGhpcywgd2UgcmVhZCB0aGUgbmVlZF9yZXNjaGVkIGZsYWcgYmVmb3JlCiAgKiBkaXNhYmxpbmcgcHJlZW1wdGlvbi4gV2hlbiB3ZSB3YW50IHRvIGVuYWJsZSBwcmVlbXB0aW9uIHdlCiAgKiBjaGVjayB0aGUgZmxhZywgaWYgaXQgaXMgc2V0LCB0aGVuIHdlIGNhbGwgcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZC4KICAqIE90aGVyd2lzZSwgd2UgY2FsbCBwcmVlbXB0X2VuYWJsZS4KICAqCi0gKiBUaGUgcmF0aW9uYWwgZm9yIGRvaW5nIHRoZSBhYm92ZSBpcyB0aGF0IGlmIG5lZWQgcmVzY2hlZCBpcyBzZXQKKyAqIFRoZSByYXRpb25hbCBmb3IgZG9pbmcgdGhlIGFib3ZlIGlzIHRoYXQgaWYgbmVlZF9yZXNjaGVkIGlzIHNldAogICogYW5kIHdlIGhhdmUgeWV0IHRvIHJlc2NoZWR1bGUsIHdlIGFyZSBlaXRoZXIgaW4gYW4gYXRvbWljIGxvY2F0aW9uCiAgKiAod2hlcmUgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgZm9yIHNjaGVkdWxpbmcpIG9yIHdlIGFyZSBpbnNpZGUKICAqIHRoZSBzY2hlZHVsZXIgYW5kIGRvIG5vdCB3YW50IHRvIHJlc2NoZWQuCkBAIC02MjcsNyArNzMyLDcgQEAKICAqCiAgKiBUaGlzIGlzIGEgc2NoZWR1bGVyIHNhZmUgd2F5IHRvIGVuYWJsZSBwcmVlbXB0aW9uIGFuZCBub3QgbWlzcwogICogYW55IHByZWVtcHRpb24gY2hlY2tzLiBUaGUgZGlzYWJsZWQgc2F2ZWQgdGhlIHN0YXRlIG9mIHByZWVtcHRpb24uCi0gKiBJZiByZXNjaGVkIGlzIHNldCwgdGhlbiB3ZSB3ZXJlIGVpdGhlciBpbnNpZGUgYW4gYXRvbWljIG9yCisgKiBJZiByZXNjaGVkIGlzIHNldCwgdGhlbiB3ZSBhcmUgZWl0aGVyIGluc2lkZSBhbiBhdG9taWMgb3IKICAqIGFyZSBpbnNpZGUgdGhlIHNjaGVkdWxlciAod2Ugd291bGQgaGF2ZSBhbHJlYWR5IHNjaGVkdWxlZAogICogb3RoZXJ3aXNlKS4gSW4gdGhpcyBjYXNlLCB3ZSBkbyBub3Qgd2FudCB0byBjYWxsIG5vcm1hbAogICogcHJlZW1wdF9lbmFibGUsIGJ1dCBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkIGluc3RlYWQuCkBAIC02NjQsNCArNzY5LDExOCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19CUkFOQ0hfVFJBQ0VSICovCiAKKy8qIHNldCByaW5nIGJ1ZmZlcnMgdG8gZGVmYXVsdCBzaXplIGlmIG5vdCBhbHJlYWR5IGRvbmUgc28gKi8KK2ludCB0cmFjaW5nX3VwZGF0ZV9idWZmZXJzKHZvaWQpOworCisvKiB0cmFjZSBldmVudCB0eXBlIGJpdCBmaWVsZHMsIG5vdCBudW1lcmljICovCitlbnVtIHsKKwlUUkFDRV9FVkVOVF9UWVBFX1BSSU5URgkJPSAxLAorCVRSQUNFX0VWRU5UX1RZUEVfUkFXCQk9IDIsCit9OworCitzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpbms7CisJY2hhcgkJCSpuYW1lOworCWNoYXIJCQkqdHlwZTsKKwlpbnQJCQlvZmZzZXQ7CisJaW50CQkJc2l6ZTsKK307CisKK3N0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCB7CisJY2hhcgkJCSpuYW1lOworCWNoYXIJCQkqc3lzdGVtOworCXN0cnVjdCBkZW50cnkJCSpkaXI7CisJaW50CQkJZW5hYmxlZDsKKwlpbnQJCQkoKnJlZ2Z1bmMpKHZvaWQpOworCXZvaWQJCQkoKnVucmVnZnVuYykodm9pZCk7CisJaW50CQkJaWQ7CisJaW50CQkJKCpyYXdfaW5pdCkodm9pZCk7CisJaW50CQkJKCpzaG93X2Zvcm1hdCkoc3RydWN0IHRyYWNlX3NlcSAqcyk7CisJaW50CQkJKCpkZWZpbmVfZmllbGRzKSh2b2lkKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZpZWxkczsKKwlzdHJ1Y3QgZmlsdGVyX3ByZWQJKipwcmVkczsKKworI2lmZGVmIENPTkZJR19FVkVOVF9QUk9GSUxFCisJYXRvbWljX3QJcHJvZmlsZV9jb3VudDsKKwlpbnQJCSgqcHJvZmlsZV9lbmFibGUpKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKTsKKwl2b2lkCQkoKnByb2ZpbGVfZGlzYWJsZSkoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICopOworI2VuZGlmCit9OworCitzdHJ1Y3QgZXZlbnRfc3Vic3lzdGVtIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJc3RydWN0IGRlbnRyeQkJKmVudHJ5OworCXN0cnVjdCBmaWx0ZXJfcHJlZAkqKnByZWRzOworfTsKKworI2RlZmluZSBldmVudHNfZm9yX2VhY2goZXZlbnQpCQkJCQkJXAorCWZvciAoZXZlbnQgPSBfX3N0YXJ0X2Z0cmFjZV9ldmVudHM7CQkJCVwKKwkgICAgICh1bnNpZ25lZCBsb25nKWV2ZW50IDwgKHVuc2lnbmVkIGxvbmcpX19zdG9wX2Z0cmFjZV9ldmVudHM7IFwKKwkgICAgIGV2ZW50KyspCisKKyNkZWZpbmUgTUFYX0ZJTFRFUl9QUkVEIDgKKworc3RydWN0IGZpbHRlcl9wcmVkOworCit0eXBlZGVmIGludCAoKmZpbHRlcl9wcmVkX2ZuX3QpIChzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQsIHZvaWQgKmV2ZW50KTsKKworc3RydWN0IGZpbHRlcl9wcmVkIHsKKwlmaWx0ZXJfcHJlZF9mbl90IGZuOworCXU2NCB2YWw7CisJY2hhciAqc3RyX3ZhbDsKKwlpbnQgc3RyX2xlbjsKKwljaGFyICpmaWVsZF9uYW1lOworCWludCBvZmZzZXQ7CisJaW50IG5vdDsKKwlpbnQgb3I7CisJaW50IGNvbXBvdW5kOworCWludCBjbGVhcjsKK307CisKK2ludCB0cmFjZV9kZWZpbmVfZmllbGQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBjaGFyICp0eXBlLAorCQkgICAgICAgY2hhciAqbmFtZSwgaW50IG9mZnNldCwgaW50IHNpemUpOworZXh0ZXJuIHZvaWQgZmlsdGVyX2ZyZWVfcHJlZChzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQpOworZXh0ZXJuIHZvaWQgZmlsdGVyX3ByaW50X3ByZWRzKHN0cnVjdCBmaWx0ZXJfcHJlZCAqKnByZWRzLAorCQkJICAgICAgIHN0cnVjdCB0cmFjZV9zZXEgKnMpOworZXh0ZXJuIGludCBmaWx0ZXJfcGFyc2UoY2hhciAqKnBidWYsIHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCk7CitleHRlcm4gaW50IGZpbHRlcl9hZGRfcHJlZChzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsCisJCQkgICBzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQpOworZXh0ZXJuIHZvaWQgZmlsdGVyX2ZyZWVfcHJlZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKTsKK2V4dGVybiBpbnQgZmlsdGVyX21hdGNoX3ByZWRzKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgdm9pZCAqcmVjKTsKK2V4dGVybiB2b2lkIGZpbHRlcl9mcmVlX3N1YnN5c3RlbV9wcmVkcyhzdHJ1Y3QgZXZlbnRfc3Vic3lzdGVtICpzeXN0ZW0pOworZXh0ZXJuIGludCBmaWx0ZXJfYWRkX3N1YnN5c3RlbV9wcmVkKHN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbSwKKwkJCQkgICAgIHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCk7CisKK3ZvaWQgZXZlbnRfdHJhY2VfcHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2V4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX19zdGFydF9mdHJhY2VfZXZlbnRzW107CitleHRlcm4gc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fc3RvcF9mdHJhY2VfZXZlbnRzW107CisKKyNkZWZpbmUgZm9yX2VhY2hfZXZlbnQoZXZlbnQpCQkJCQkJXAorCWZvciAoZXZlbnQgPSBfX3N0YXJ0X2Z0cmFjZV9ldmVudHM7CQkJCVwKKwkgICAgICh1bnNpZ25lZCBsb25nKWV2ZW50IDwgKHVuc2lnbmVkIGxvbmcpX19zdG9wX2Z0cmFjZV9ldmVudHM7IFwKKwkgICAgIGV2ZW50KyspCisKK2V4dGVybiBjb25zdCBjaGFyICpfX3N0YXJ0X19fdHJhY2VfYnByaW50a19mbXRbXTsKK2V4dGVybiBjb25zdCBjaGFyICpfX3N0b3BfX190cmFjZV9icHJpbnRrX2ZtdFtdOworCisvKgorICogVGhlIGRvdWJsZSBfX2J1aWx0aW5fY29uc3RhbnRfcCBpcyBiZWNhdXNlIGdjYyB3aWxsIGdpdmUgdXMgYW4gZXJyb3IKKyAqIGlmIHdlIHRyeSB0byBhbGxvY2F0ZSB0aGUgc3RhdGljIHZhcmlhYmxlIHRvIGZtdCBpZiBpdCBpcyBub3QgYQorICogY29uc3RhbnQuIEV2ZW4gd2l0aCB0aGUgb3V0ZXIgaWYgc3RhdGVtZW50IG9wdGltaXppbmcgb3V0LgorICovCisjZGVmaW5lIGV2ZW50X3RyYWNlX3ByaW50ayhpcCwgZm10LCBhcmdzLi4uKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCV9fdHJhY2VfcHJpbnRrX2NoZWNrX2Zvcm1hdChmbXQsICMjYXJncyk7CQkJXAorCXRyYWNpbmdfcmVjb3JkX2NtZGxpbmUoY3VycmVudCk7CQkJCVwKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZm10KSkgewkJCQlcCisJCXN0YXRpYyBjb25zdCBjaGFyICp0cmFjZV9wcmludGtfZm10CQkJXAorCQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdHJhY2VfcHJpbnRrX2ZtdCIpKSkgPQlcCisJCQlfX2J1aWx0aW5fY29uc3RhbnRfcChmbXQpID8gZm10IDogTlVMTDsJCVwKKwkJCQkJCQkJCVwKKwkJX190cmFjZV9icHJpbnRrKGlwLCB0cmFjZV9wcmludGtfZm10LCAjI2FyZ3MpOwkJXAorCX0gZWxzZQkJCQkJCQkJXAorCQlfX3RyYWNlX3ByaW50ayhpcCwgZm10LCAjI2FyZ3MpOwkJCVwKK30gd2hpbGUgKDApCisKICNlbmRpZiAvKiBfTElOVVhfS0VSTkVMX1RSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ib290LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfYm9vdC5jCmluZGV4IDM2NmM4YzMuLjdhMzBmYzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ib290LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Jvb3QuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgorI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgogCiBzdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5ICpib290X3RyYWNlOwogc3RhdGljIGJvb2wgcHJlX2luaXRjYWxsc19maW5pc2hlZDsKQEAgLTI3LDEzICsyOCwxMyBAQAogCiB2b2lkIGVuYWJsZV9ib290X3RyYWNlKHZvaWQpCiB7Ci0JaWYgKHByZV9pbml0Y2FsbHNfZmluaXNoZWQpCisJaWYgKGJvb3RfdHJhY2UgJiYgcHJlX2luaXRjYWxsc19maW5pc2hlZCkKIAkJdHJhY2luZ19zdGFydF9zY2hlZF9zd2l0Y2hfcmVjb3JkKCk7CiB9CiAKIHZvaWQgZGlzYWJsZV9ib290X3RyYWNlKHZvaWQpCiB7Ci0JaWYgKHByZV9pbml0Y2FsbHNfZmluaXNoZWQpCisJaWYgKGJvb3RfdHJhY2UgJiYgcHJlX2luaXRjYWxsc19maW5pc2hlZCkKIAkJdHJhY2luZ19zdG9wX3NjaGVkX3N3aXRjaF9yZWNvcmQoKTsKIH0KIApAQCAtNDIsNiArNDMsOSBAQAogCWludCBjcHU7CiAJYm9vdF90cmFjZSA9IHRyOwogCisJaWYgKCF0cikKKwkJcmV0dXJuIDA7CisKIAlmb3JfZWFjaF9jcHUoY3B1LCBjcHVfcG9zc2libGVfbWFzaykKIAkJdHJhY2luZ19yZXNldCh0ciwgY3B1KTsKIApAQCAtMTI4LDEwICsxMzIsOSBAQAogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHRyYWNlX2Jvb3RfY2FsbCAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGJvb3RfdHJhY2U7CiAKLQlpZiAoIXByZV9pbml0Y2FsbHNfZmluaXNoZWQpCisJaWYgKCF0ciB8fCAhcHJlX2luaXRjYWxsc19maW5pc2hlZCkKIAkJcmV0dXJuOwogCiAJLyogR2V0IGl0cyBuYW1lIG5vdyBzaW5jZSB0aGlzIGZ1bmN0aW9uIGNvdWxkCkBAIC0xNDAsMTggKzE0MywxMyBAQAogCXNwcmludF9zeW1ib2woYnQtPmZ1bmMsICh1bnNpZ25lZCBsb25nKWZuKTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgJmlycV9mbGFncyk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9CT09UX0NBTEwsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOwogCWlmICghZXZlbnQpCiAJCWdvdG8gb3V0OwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgMCk7Ci0JZW50cnktPmVudC50eXBlID0gVFJBQ0VfQk9PVF9DQUxMOwogCWVudHJ5LT5ib290X2NhbGwgPSAqYnQ7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKLQotCXRyYWNlX3dha2VfdXAoKTsKLQorCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgMCwgMCk7CiAgb3V0OgogCXByZWVtcHRfZW5hYmxlKCk7CiB9CkBAIC0xNjAsMjcgKzE1OCwyMSBAQAogewogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHRyYWNlX2Jvb3RfcmV0ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gYm9vdF90cmFjZTsKIAotCWlmICghcHJlX2luaXRjYWxsc19maW5pc2hlZCkKKwlpZiAoIXRyIHx8ICFwcmVfaW5pdGNhbGxzX2ZpbmlzaGVkKQogCQlyZXR1cm47CiAKIAlzcHJpbnRfc3ltYm9sKGJ0LT5mdW5jLCAodW5zaWduZWQgbG9uZylmbik7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICZpcnFfZmxhZ3MpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfQk9PVF9SRVQsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOwogCWlmICghZXZlbnQpCiAJCWdvdG8gb3V0OwogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgMCk7Ci0JZW50cnktPmVudC50eXBlID0gVFJBQ0VfQk9PVF9SRVQ7CiAJZW50cnktPmJvb3RfcmV0ID0gKmJ0OwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7Ci0KLQl0cmFjZV93YWtlX3VwKCk7Ci0KKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIDApOwogIG91dDoKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCmluZGV4IDZjMDBmZWIuLmFkOGMyMmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKQEAgLTE0LDEyICsxNCwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgorCiAjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ0cmFjZV9zdGF0LmgiCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCiAKICNpZmRlZiBDT05GSUdfQlJBTkNIX1RSQUNFUgogCitzdGF0aWMgc3RydWN0IHRyYWNlciBicmFuY2hfdHJhY2U7CiBzdGF0aWMgaW50IGJyYW5jaF90cmFjaW5nX2VuYWJsZWQgX19yZWFkX21vc3RseTsKIHN0YXRpYyBERUZJTkVfTVVURVgoYnJhbmNoX3RyYWNpbmdfbXV0ZXgpOworCiBzdGF0aWMgc3RydWN0IHRyYWNlX2FycmF5ICpicmFuY2hfdHJhY2VyOwogCiBzdGF0aWMgdm9pZApAQCAtMjgsNyArMzMsNyBAQAogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBicmFuY2hfdHJhY2VyOwogCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IHRyYWNlX2JyYW5jaCAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgaXJxX2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNwdSwgcGM7CiAJY29uc3QgY2hhciAqcDsKIApAQCAtNDcsMTUgKzUyLDEzIEBACiAJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZ0ci0+ZGF0YVtjcHVdLT5kaXNhYmxlZCkgIT0gMSkKIAkJZ290byBvdXQ7CiAKLQlldmVudCA9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICZpcnFfZmxhZ3MpOworCXBjID0gcHJlZW1wdF9jb3VudCgpOworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfQlJBTkNILAorCQkJCQkgIHNpemVvZigqZW50cnkpLCBmbGFncywgcGMpOwogCWlmICghZXZlbnQpCiAJCWdvdG8gb3V0OwogCi0JcGMgPSBwcmVlbXB0X2NvdW50KCk7CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCBmbGFncywgcGMpOwotCWVudHJ5LT5lbnQudHlwZQkJPSBUUkFDRV9CUkFOQ0g7CiAKIAkvKiBTdHJpcCBvZmYgdGhlIHBhdGgsIG9ubHkgc2F2ZSB0aGUgZmlsZSAqLwogCXAgPSBmLT5maWxlICsgc3RybGVuKGYtPmZpbGUpOwpAQCAtNzAsNyArNzMsNyBAQAogCWVudHJ5LT5saW5lID0gZi0+bGluZTsKIAllbnRyeS0+Y29ycmVjdCA9IHZhbCA9PSBleHBlY3Q7CiAKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOworCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQpOwogCiAgb3V0OgogCWF0b21pY19kZWMoJnRyLT5kYXRhW2NwdV0tPmRpc2FibGVkKTsKQEAgLTg4LDggKzkxLDYgQEAKIAogaW50IGVuYWJsZV9icmFuY2hfdHJhY2luZyhzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCWludCByZXQgPSAwOwotCiAJbXV0ZXhfbG9jaygmYnJhbmNoX3RyYWNpbmdfbXV0ZXgpOwogCWJyYW5jaF90cmFjZXIgPSB0cjsKIAkvKgpAQCAtMTAwLDcgKzEwMSw3IEBACiAJYnJhbmNoX3RyYWNpbmdfZW5hYmxlZCsrOwogCW11dGV4X3VubG9jaygmYnJhbmNoX3RyYWNpbmdfbXV0ZXgpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBkaXNhYmxlX2JyYW5jaF90cmFjaW5nKHZvaWQpCkBAIC0xMjgsMTEgKzEyOSw2IEBACiAKIHN0YXRpYyBpbnQgYnJhbmNoX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQlpbnQgY3B1OwotCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7Ci0KIAlzdGFydF9icmFuY2hfdHJhY2UodHIpOwogCXJldHVybiAwOwogfQpAQCAtMTQyLDIyICsxMzgsNTMgQEAKIAlzdG9wX2JyYW5jaF90cmFjZSh0cik7CiB9CiAKLXN0cnVjdCB0cmFjZXIgYnJhbmNoX3RyYWNlIF9fcmVhZF9tb3N0bHkgPQorc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX2JyYW5jaF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHRyYWNlX2JyYW5jaCAqZmllbGQ7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCWlmICh0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICJbJXNdICVzOiVzOiVkXG4iLAorCQkJICAgICBmaWVsZC0+Y29ycmVjdCA/ICIgIG9rICAiIDogIiBNSVNTICIsCisJCQkgICAgIGZpZWxkLT5mdW5jLAorCQkJICAgICBmaWVsZC0+ZmlsZSwKKwkJCSAgICAgZmllbGQtPmxpbmUpKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2VfYnJhbmNoX2V2ZW50ID0geworCS50eXBlCQk9IFRSQUNFX0JSQU5DSCwKKwkudHJhY2UJCT0gdHJhY2VfYnJhbmNoX3ByaW50LAorfTsKKworc3RhdGljIHN0cnVjdCB0cmFjZXIgYnJhbmNoX3RyYWNlIF9fcmVhZF9tb3N0bHkgPQogewogCS5uYW1lCQk9ICJicmFuY2giLAogCS5pbml0CQk9IGJyYW5jaF90cmFjZV9pbml0LAogCS5yZXNldAkJPSBicmFuY2hfdHJhY2VfcmVzZXQsCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAogCS5zZWxmdGVzdAk9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfYnJhbmNoLAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0ZUUkFDRV9TRUxGVEVTVCAqLwogfTsKIAotX19pbml0IHN0YXRpYyBpbnQgaW5pdF9icmFuY2hfdHJhY2Uodm9pZCkKK19faW5pdCBzdGF0aWMgaW50IGluaXRfYnJhbmNoX3RyYWNlcih2b2lkKQogeworCWludCByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZXZlbnQoJnRyYWNlX2JyYW5jaF9ldmVudCk7CisJaWYgKCFyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogY291bGQgbm90IHJlZ2lzdGVyICIKKwkJCQkgICAgImJyYW5jaCBldmVudHNcbiIpOworCQlyZXR1cm4gMTsKKwl9CiAJcmV0dXJuIHJlZ2lzdGVyX3RyYWNlcigmYnJhbmNoX3RyYWNlKTsKIH0KK2RldmljZV9pbml0Y2FsbChpbml0X2JyYW5jaF90cmFjZXIpOwogCi1kZXZpY2VfaW5pdGNhbGwoaW5pdF9icmFuY2hfdHJhY2UpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUKIHZvaWQgdHJhY2VfbGlrZWx5X2NvbmRpdGlvbihzdHJ1Y3QgZnRyYWNlX2JyYW5jaF9kYXRhICpmLCBpbnQgdmFsLCBpbnQgZXhwZWN0KQpAQCAtMTgzLDY1ICsyMTAsMzggQEAKIH0KIEVYUE9SVF9TWU1CT0woZnRyYWNlX2xpa2VseV91cGRhdGUpOwogCi1zdHJ1Y3QgZnRyYWNlX3BvaW50ZXIgewotCXZvaWQJCSpzdGFydDsKLQl2b2lkCQkqc3RvcDsKLQlpbnQJCWhpdDsKLX07CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3N0YXJ0X2Fubm90YXRlZF9icmFuY2hfcHJvZmlsZVtdOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX2Fubm90YXRlZF9icmFuY2hfcHJvZmlsZVtdOwogCi1zdGF0aWMgdm9pZCAqCi10X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3N0YXRpYyBpbnQgYW5ub3RhdGVkX2JyYW5jaF9zdGF0X2hlYWRlcnMoc3RydWN0IHNlcV9maWxlICptKQogewotCWNvbnN0IHN0cnVjdCBmdHJhY2VfcG9pbnRlciAqZiA9IG0tPnByaXZhdGU7Ci0Jc3RydWN0IGZ0cmFjZV9icmFuY2hfZGF0YSAqcCA9IHY7Ci0KLQkoKnBvcykrKzsKLQotCWlmICh2ID09ICh2b2lkICopMSkKLQkJcmV0dXJuIGYtPnN0YXJ0OwotCi0JKytwOwotCi0JaWYgKCh2b2lkICopcCA+PSAodm9pZCAqKWYtPnN0b3ApCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHA7Ci19Ci0KLXN0YXRpYyB2b2lkICp0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCi17Ci0Jdm9pZCAqdCA9ICh2b2lkICopMTsKLQlsb2ZmX3QgbCA9IDA7Ci0KLQlmb3IgKDsgdCAmJiBsIDwgKnBvczsgdCA9IHRfbmV4dChtLCB0LCAmbCkpCi0JCTsKLQotCXJldHVybiB0OwotfQotCi1zdGF0aWMgdm9pZCB0X3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQotewotfQotCi1zdGF0aWMgaW50IHRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0JY29uc3Qgc3RydWN0IGZ0cmFjZV9wb2ludGVyICpmcCA9IG0tPnByaXZhdGU7Ci0Jc3RydWN0IGZ0cmFjZV9icmFuY2hfZGF0YSAqcCA9IHY7Ci0JY29uc3QgY2hhciAqZjsKLQlsb25nIHBlcmNlbnQ7Ci0KLQlpZiAodiA9PSAodm9pZCAqKTEpIHsKLQkJaWYgKGZwLT5oaXQpCi0JCQlzZXFfcHJpbnRmKG0sICIgICBtaXNzICAgICAgaGl0ICAgICUlICIpOwotCQllbHNlCi0JCQlzZXFfcHJpbnRmKG0sICIgY29ycmVjdCBpbmNvcnJlY3QgICUlICIpOwotCQlzZXFfcHJpbnRmKG0sICIgICAgICAgRnVuY3Rpb24gICAgICAgICAgICAgICAgIgorCXNlcV9wcmludGYobSwgIiBjb3JyZWN0IGluY29ycmVjdCAgJSUgIik7CisJc2VxX3ByaW50ZihtLCAiICAgICAgIEZ1bmN0aW9uICAgICAgICAgICAgICAgICIKIAkJCSAgICAgICIgIEZpbGUgICAgICAgICAgICAgIExpbmVcbiIKIAkJCSAgICAgICIgLS0tLS0tLSAtLS0tLS0tLS0gIC0gIgogCQkJICAgICAgIiAgICAgICAtLS0tLS0tLSAgICAgICAgICAgICAgICAiCiAJCQkgICAgICAiICAtLS0tICAgICAgICAgICAgICAtLS0tXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgZ2V0X2luY29ycmVjdF9wZXJjZW50KHN0cnVjdCBmdHJhY2VfYnJhbmNoX2RhdGEgKnApCit7CisJbG9uZyBwZXJjZW50OworCisJaWYgKHAtPmNvcnJlY3QpIHsKKwkJcGVyY2VudCA9IHAtPmluY29ycmVjdCAqIDEwMDsKKwkJcGVyY2VudCAvPSBwLT5jb3JyZWN0ICsgcC0+aW5jb3JyZWN0OworCX0gZWxzZQorCQlwZXJjZW50ID0gcC0+aW5jb3JyZWN0ID8gMTAwIDogLTE7CisKKwlyZXR1cm4gcGVyY2VudDsKK30KKworc3RhdGljIGludCBicmFuY2hfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgZnRyYWNlX2JyYW5jaF9kYXRhICpwID0gdjsKKwljb25zdCBjaGFyICpmOworCWxvbmcgcGVyY2VudDsKIAogCS8qIE9ubHkgcHJpbnQgdGhlIGZpbGUsIG5vdCB0aGUgcGF0aCAqLwogCWYgPSBwLT5maWxlICsgc3RybGVuKHAtPmZpbGUpOwpAQCAtMjUyLDExICsyNTIsNyBAQAogCS8qCiAJICogVGhlIG1pc3MgaXMgb3ZlcmxheWVkIG9uIGNvcnJlY3QsIGFuZCBoaXQgb24gaW5jb3JyZWN0LgogCSAqLwotCWlmIChwLT5jb3JyZWN0KSB7Ci0JCXBlcmNlbnQgPSBwLT5pbmNvcnJlY3QgKiAxMDA7Ci0JCXBlcmNlbnQgLz0gcC0+Y29ycmVjdCArIHAtPmluY29ycmVjdDsKLQl9IGVsc2UKLQkJcGVyY2VudCA9IHAtPmluY29ycmVjdCA/IDEwMCA6IC0xOworCXBlcmNlbnQgPSBnZXRfaW5jb3JyZWN0X3BlcmNlbnQocCk7CiAKIAlzZXFfcHJpbnRmKG0sICIlOGx1ICU4bHUgIiwgIHAtPmNvcnJlY3QsIHAtPmluY29ycmVjdCk7CiAJaWYgKHBlcmNlbnQgPCAwKQpAQCAtMjY3LDc2ICsyNjMsMTE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdHJhY2luZ19saWtlbHlfc2VxX29wcyA9IHsKLQkuc3RhcnQJCT0gdF9zdGFydCwKLQkubmV4dAkJPSB0X25leHQsCi0JLnN0b3AJCT0gdF9zdG9wLAotCS5zaG93CQk9IHRfc2hvdywKK3N0YXRpYyB2b2lkICphbm5vdGF0ZWRfYnJhbmNoX3N0YXRfc3RhcnQodm9pZCkKK3sKKwlyZXR1cm4gX19zdGFydF9hbm5vdGF0ZWRfYnJhbmNoX3Byb2ZpbGU7Cit9CisKK3N0YXRpYyB2b2lkICoKK2Fubm90YXRlZF9icmFuY2hfc3RhdF9uZXh0KHZvaWQgKnYsIGludCBpZHgpCit7CisJc3RydWN0IGZ0cmFjZV9icmFuY2hfZGF0YSAqcCA9IHY7CisKKwkrK3A7CisKKwlpZiAoKHZvaWQgKilwID49ICh2b2lkICopX19zdG9wX2Fubm90YXRlZF9icmFuY2hfcHJvZmlsZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIGludCBhbm5vdGF0ZWRfYnJhbmNoX3N0YXRfY21wKHZvaWQgKnAxLCB2b2lkICpwMikKK3sKKwlzdHJ1Y3QgZnRyYWNlX2JyYW5jaF9kYXRhICphID0gcDE7CisJc3RydWN0IGZ0cmFjZV9icmFuY2hfZGF0YSAqYiA9IHAyOworCisJbG9uZyBwZXJjZW50X2EsIHBlcmNlbnRfYjsKKworCXBlcmNlbnRfYSA9IGdldF9pbmNvcnJlY3RfcGVyY2VudChhKTsKKwlwZXJjZW50X2IgPSBnZXRfaW5jb3JyZWN0X3BlcmNlbnQoYik7CisKKwlpZiAocGVyY2VudF9hIDwgcGVyY2VudF9iKQorCQlyZXR1cm4gLTE7CisJaWYgKHBlcmNlbnRfYSA+IHBlcmNlbnRfYikKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZXJfc3RhdCBhbm5vdGF0ZWRfYnJhbmNoX3N0YXRzID0geworCS5uYW1lID0gImJyYW5jaF9hbm5vdGF0ZWQiLAorCS5zdGF0X3N0YXJ0ID0gYW5ub3RhdGVkX2JyYW5jaF9zdGF0X3N0YXJ0LAorCS5zdGF0X25leHQgPSBhbm5vdGF0ZWRfYnJhbmNoX3N0YXRfbmV4dCwKKwkuc3RhdF9jbXAgPSBhbm5vdGF0ZWRfYnJhbmNoX3N0YXRfY21wLAorCS5zdGF0X2hlYWRlcnMgPSBhbm5vdGF0ZWRfYnJhbmNoX3N0YXRfaGVhZGVycywKKwkuc3RhdF9zaG93ID0gYnJhbmNoX3N0YXRfc2hvdwogfTsKIAotc3RhdGljIGludCB0cmFjaW5nX2JyYW5jaF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorX19pbml0IHN0YXRpYyBpbnQgaW5pdF9hbm5vdGF0ZWRfYnJhbmNoX3N0YXRzKHZvaWQpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IHNlcV9vcGVuKGZpbGUsICZ0cmFjaW5nX2xpa2VseV9zZXFfb3BzKTsKKwlyZXQgPSByZWdpc3Rlcl9zdGF0X3RyYWNlcigmYW5ub3RhdGVkX2JyYW5jaF9zdGF0cyk7CiAJaWYgKCFyZXQpIHsKLQkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQltLT5wcml2YXRlID0gKHZvaWQgKilpbm9kZS0+aV9wcml2YXRlOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiBjb3VsZCBub3QgcmVnaXN0ZXIgIgorCQkJCSAgICAiYW5ub3RhdGVkIGJyYW5jaGVzIHN0YXRzXG4iKTsKKwkJcmV0dXJuIDE7CiAJfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHJhY2luZ19icmFuY2hfZm9wcyA9IHsKLQkub3BlbgkJPSB0cmFjaW5nX2JyYW5jaF9vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotfTsKK2ZzX2luaXRjYWxsKGluaXRfYW5ub3RhdGVkX2JyYW5jaF9zdGF0cyk7CiAKICNpZmRlZiBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMKKwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFydF9icmFuY2hfcHJvZmlsZVtdOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX2JyYW5jaF9wcm9maWxlW107CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnRyYWNlX3BvaW50ZXIgZnRyYWNlX2JyYW5jaF9wb3MgPSB7Ci0JLnN0YXJ0CQkJPSBfX3N0YXJ0X2JyYW5jaF9wcm9maWxlLAotCS5zdG9wCQkJPSBfX3N0b3BfYnJhbmNoX3Byb2ZpbGUsCi0JLmhpdAkJCT0gMSwKLX07Ci0KLSNlbmRpZiAvKiBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgKi8KLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFydF9hbm5vdGF0ZWRfYnJhbmNoX3Byb2ZpbGVbXTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fc3RvcF9hbm5vdGF0ZWRfYnJhbmNoX3Byb2ZpbGVbXTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmdHJhY2VfcG9pbnRlciBmdHJhY2VfYW5ub3RhdGVkX2JyYW5jaF9wb3MgPSB7Ci0JLnN0YXJ0CQkJPSBfX3N0YXJ0X2Fubm90YXRlZF9icmFuY2hfcHJvZmlsZSwKLQkuc3RvcAkJCT0gX19zdG9wX2Fubm90YXRlZF9icmFuY2hfcHJvZmlsZSwKLX07Ci0KLXN0YXRpYyBfX2luaXQgaW50IGZ0cmFjZV9icmFuY2hfaW5pdCh2b2lkKQorc3RhdGljIGludCBhbGxfYnJhbmNoX3N0YXRfaGVhZGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0Jc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7Ci0Jc3RydWN0IGRlbnRyeSAqZW50cnk7Ci0KLQlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKLQotCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgicHJvZmlsZV9hbm5vdGF0ZWRfYnJhbmNoIiwgMDQ0NCwgZF90cmFjZXIsCi0JCQkJICAgICh2b2lkICopJmZ0cmFjZV9hbm5vdGF0ZWRfYnJhbmNoX3BvcywKLQkJCQkgICAgJnRyYWNpbmdfYnJhbmNoX2ZvcHMpOwotCWlmICghZW50cnkpCi0JCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCi0JCQkgICAiJ3Byb2ZpbGVfYW5ub3RhdGV0X2JyYW5jaCcgZW50cnlcbiIpOwotCi0jaWZkZWYgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTCi0JZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwcm9maWxlX2JyYW5jaCIsIDA0NDQsIGRfdHJhY2VyLAotCQkJCSAgICAodm9pZCAqKSZmdHJhY2VfYnJhbmNoX3BvcywKLQkJCQkgICAgJnRyYWNpbmdfYnJhbmNoX2ZvcHMpOwotCWlmICghZW50cnkpCi0JCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyIKLQkJCSAgICIgJ3Byb2ZpbGVfYnJhbmNoJyBlbnRyeVxuIik7Ci0jZW5kaWYKLQorCXNlcV9wcmludGYobSwgIiAgIG1pc3MgICAgICBoaXQgICAgJSUgIik7CisJc2VxX3ByaW50ZihtLCAiICAgICAgIEZ1bmN0aW9uICAgICAgICAgICAgICAgICIKKwkJCSAgICAgICIgIEZpbGUgICAgICAgICAgICAgIExpbmVcbiIKKwkJCSAgICAgICIgLS0tLS0tLSAtLS0tLS0tLS0gIC0gIgorCQkJICAgICAgIiAgICAgICAtLS0tLS0tLSAgICAgICAgICAgICAgICAiCisJCQkgICAgICAiICAtLS0tICAgICAgICAgICAgICAtLS0tXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAotZGV2aWNlX2luaXRjYWxsKGZ0cmFjZV9icmFuY2hfaW5pdCk7CitzdGF0aWMgdm9pZCAqYWxsX2JyYW5jaF9zdGF0X3N0YXJ0KHZvaWQpCit7CisJcmV0dXJuIF9fc3RhcnRfYnJhbmNoX3Byb2ZpbGU7Cit9CisKK3N0YXRpYyB2b2lkICoKK2FsbF9icmFuY2hfc3RhdF9uZXh0KHZvaWQgKnYsIGludCBpZHgpCit7CisJc3RydWN0IGZ0cmFjZV9icmFuY2hfZGF0YSAqcCA9IHY7CisKKwkrK3A7CisKKwlpZiAoKHZvaWQgKilwID49ICh2b2lkICopX19zdG9wX2JyYW5jaF9wcm9maWxlKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBwOworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlcl9zdGF0IGFsbF9icmFuY2hfc3RhdHMgPSB7CisJLm5hbWUgPSAiYnJhbmNoX2FsbCIsCisJLnN0YXRfc3RhcnQgPSBhbGxfYnJhbmNoX3N0YXRfc3RhcnQsCisJLnN0YXRfbmV4dCA9IGFsbF9icmFuY2hfc3RhdF9uZXh0LAorCS5zdGF0X2hlYWRlcnMgPSBhbGxfYnJhbmNoX3N0YXRfaGVhZGVycywKKwkuc3RhdF9zaG93ID0gYnJhbmNoX3N0YXRfc2hvdworfTsKKworX19pbml0IHN0YXRpYyBpbnQgYWxsX2Fubm90YXRlZF9icmFuY2hfc3RhdHModm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfc3RhdF90cmFjZXIoJmFsbF9icmFuY2hfc3RhdHMpOworCWlmICghcmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IGNvdWxkIG5vdCByZWdpc3RlciAiCisJCQkJICAgICJhbGwgYnJhbmNoZXMgc3RhdHNcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9Citmc19pbml0Y2FsbChhbGxfYW5ub3RhdGVkX2JyYW5jaF9zdGF0cyk7CisjZW5kaWYgLyogQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfY2xvY2suYyBiL2tlcm5lbC90cmFjZS90cmFjZV9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ODhmZDgKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfY2xvY2suYwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIHRyYWNpbmcgY2xvY2tzCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqCisgKiBJbXBsZW1lbnRzIDMgdHJhY2UgY2xvY2sgdmFyaWFudHMsIHdpdGggZGlmZmVyaW5nIHNjYWxhYmlsaXR5L3ByZWNpc2lvbgorICogdHJhZGVvZmZzOgorICoKKyAqICAtICAgbG9jYWw6IENQVS1sb2NhbCB0cmFjZSBjbG9jaworICogIC0gIG1lZGl1bTogc2NhbGFibGUgZ2xvYmFsIGNsb2NrIHdpdGggc29tZSBqaXR0ZXIKKyAqICAtICBnbG9iYWw6IGdsb2JhbGx5IG1vbm90b25pYywgc2VyaWFsaXplZCBjbG9jaworICoKKyAqIFRyYWNlciBwbHVnaW5zIHdpbGwgY2hvc2UgYSBkZWZhdWx0IGZyb20gdGhlc2UgY2xvY2tzLgorICovCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlX2Nsb2NrLmg+CisKKy8qCisgKiB0cmFjZV9jbG9ja19sb2NhbCgpOiB0aGUgc2ltcGxlc3QgYW5kIGxlYXN0IGNvaGVyZW50IHRyYWNpbmcgY2xvY2suCisgKgorICogVXNlZnVsIGZvciB0cmFjaW5nIHRoYXQgZG9lcyBub3QgY3Jvc3MgdG8gb3RoZXIgQ1BVcyBub3IKKyAqIGRvZXMgaXQgZ28gdGhyb3VnaCBpZGxlIGV2ZW50cy4KKyAqLwordTY0IG5vdHJhY2UgdHJhY2VfY2xvY2tfbG9jYWwodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCBjbG9jazsKKworCS8qCisJICogc2NoZWRfY2xvY2soKSBpcyBhbiBhcmNoaXRlY3R1cmUgaW1wbGVtZW50ZWQsIGZhc3QsIHNjYWxhYmxlLAorCSAqIGxvY2tsZXNzIGNsb2NrLiBJdCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBjb2hlcmVudCBhY3Jvc3MKKwkgKiBDUFVzLCBub3IgYWNyb3NzIENQVSBpZGxlIGV2ZW50cy4KKwkgKi8KKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNsb2NrID0gc2NoZWRfY2xvY2soKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIGNsb2NrOworfQorCisvKgorICogdHJhY2VfY2xvY2soKTogJ2luYmV0d2VlbicgdHJhY2UgY2xvY2suIE5vdCBjb21wbGV0ZWx5IHNlcmlhbGl6ZWQsCisgKiBidXQgbm90IGNvbXBsZXRlbHkgaW5jb3JyZWN0IHdoZW4gY3Jvc3NpbmcgQ1BVcyBlaXRoZXIuCisgKgorICogVGhpcyBpcyBiYXNlZCBvbiBjcHVfY2xvY2soKSwgd2hpY2ggd2lsbCBhbGxvdyBhdCBtb3N0IH4xIGppZmZ5IG9mCisgKiBqaXR0ZXIgYmV0d2VlbiBDUFVzLiBTbyBpdCdzIGEgcHJldHR5IHNjYWxhYmxlIGNsb2NrLCBidXQgdGhlcmUKKyAqIGNhbiBiZSBvZmZzZXRzIGluIHRoZSB0cmFjZSBkYXRhLgorICovCit1NjQgbm90cmFjZSB0cmFjZV9jbG9jayh2b2lkKQoreworCXJldHVybiBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7Cit9CisKKworLyoKKyAqIHRyYWNlX2Nsb2NrX2dsb2JhbCgpOiBzcGVjaWFsIGdsb2JhbGx5IGNvaGVyZW50IHRyYWNlIGNsb2NrCisgKgorICogSXQgaGFzIGhpZ2hlciBvdmVyaGVhZCB0aGFuIHRoZSBvdGhlciB0cmFjZSBjbG9ja3MgYnV0IGlzIHN0aWxsCisgKiBhbiBvcmRlciBvZiBtYWduaXR1ZGUgZmFzdGVyIHRoYW4gR1RPRCBkZXJpdmVkIGhhcmR3YXJlIGNsb2Nrcy4KKyAqCisgKiBVc2VkIGJ5IHBsdWdpbnMgdGhhdCBuZWVkIGdsb2JhbGx5IGNvaGVyZW50IHRpbWVzdGFtcHMuCisgKi8KKworc3RhdGljIHU2NCBwcmV2X3RyYWNlX2Nsb2NrX3RpbWU7CisKK3N0YXRpYyByYXdfc3BpbmxvY2tfdCB0cmFjZV9jbG9ja19sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgPQorCShyYXdfc3BpbmxvY2tfdClfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQ7CisKK3U2NCBub3RyYWNlIHRyYWNlX2Nsb2NrX2dsb2JhbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHRoaXNfY3B1OworCXU2NCBub3c7CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJdGhpc19jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCW5vdyA9IGNwdV9jbG9jayh0aGlzX2NwdSk7CisJLyoKKwkgKiBJZiBpbiBhbiBOTUkgY29udGV4dCB0aGVuIGRvbnQgcmlzayBsb2NrdXBzIGFuZCByZXR1cm4gdGhlCisJICogY3B1X2Nsb2NrKCkgdGltZToKKwkgKi8KKwlpZiAodW5saWtlbHkoaW5fbm1pKCkpKQorCQlnb3RvIG91dDsKKworCV9fcmF3X3NwaW5fbG9jaygmdHJhY2VfY2xvY2tfbG9jayk7CisKKwkvKgorCSAqIFRPRE86IGlmIHRoaXMgaGFwcGVucyBvZnRlbiB0aGVuIG1heWJlIHdlIHNob3VsZCByZXNldAorCSAqIG15X3NjZC0+Y2xvY2sgdG8gcHJldl90cmFjZV9jbG9ja190aW1lKzEsIHRvIG1ha2Ugc3VyZQorCSAqIHdlIHN0YXJ0IHRpY2tpbmcgd2l0aCB0aGUgbG9jYWwgY2xvY2sgZnJvbSBub3cgb24/CisJICovCisJaWYgKChzNjQpKG5vdyAtIHByZXZfdHJhY2VfY2xvY2tfdGltZSkgPCAwKQorCQlub3cgPSBwcmV2X3RyYWNlX2Nsb2NrX3RpbWUgKyAxOworCisJcHJldl90cmFjZV9jbG9ja190aW1lID0gbm93OworCisJX19yYXdfc3Bpbl91bmxvY2soJnRyYWNlX2Nsb2NrX2xvY2spOworCisgb3V0OgorCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gbm93OworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3Byb2ZpbGUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjYmE5OQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wcm9maWxlLmMKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIHRyYWNlIGV2ZW50IGJhc2VkIHBlcmYgY291bnRlciBwcm9maWxpbmcKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCBJbmMsIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICoKKyAqLworCisjaW5jbHVkZSAidHJhY2UuaCIKKworaW50IGZ0cmFjZV9wcm9maWxlX2VuYWJsZShpbnQgZXZlbnRfaWQpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudDsKKworCWZvcl9lYWNoX2V2ZW50KGV2ZW50KSB7CisJCWlmIChldmVudC0+aWQgPT0gZXZlbnRfaWQpCisJCQlyZXR1cm4gZXZlbnQtPnByb2ZpbGVfZW5hYmxlKGV2ZW50KTsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKwordm9pZCBmdHJhY2VfcHJvZmlsZV9kaXNhYmxlKGludCBldmVudF9pZCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50OworCisJZm9yX2VhY2hfZXZlbnQoZXZlbnQpIHsKKwkJaWYgKGV2ZW50LT5pZCA9PSBldmVudF9pZCkKKwkJCXJldHVybiBldmVudC0+cHJvZmlsZV9kaXNhYmxlKGV2ZW50KTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF90eXBlcy5oIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ3OGJlZQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF90eXBlcy5oCkBAIC0wLDAgKzEsMTczIEBACisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTQlmdHJhY2UKKworLyoKKyAqIFdlIGNoZWF0IGFuZCB1c2UgdGhlIHByb3RvIHR5cGUgZmllbGQgYXMgdGhlIElECisgKiBhbmQgYXJncyBhcyB0aGUgZW50cnkgdHlwZSAobWludXMgJ3N0cnVjdCcpCisgKi8KK1RSQUNFX0VWRU5UX0ZPUk1BVChmdW5jdGlvbiwgVFJBQ0VfRk4sIGZ0cmFjZV9lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgaXAsIGlwKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBwYXJlbnRfaXAsIHBhcmVudF9pcCkKKwkpLAorCVRQX1JBV19GTVQoIiAlbHggPC0tICVseCIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQoZnVuY2dyYXBoX2VudHJ5LCBUUkFDRV9HUkFQSF9FTlQsCisJCSAgIGZ0cmFjZV9ncmFwaF9lbnRfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGdyYXBoX2VudC5mdW5jLCBmdW5jKQorCQlUUkFDRV9GSUVMRChpbnQsIGdyYXBoX2VudC5kZXB0aCwgZGVwdGgpCisJKSwKKwlUUF9SQVdfRk1UKCItLT4gJWx4ICglZCkiKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKGZ1bmNncmFwaF9leGl0LCBUUkFDRV9HUkFQSF9SRVQsCisJCSAgIGZ0cmFjZV9ncmFwaF9yZXRfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIHJldC5mdW5jLCBmdW5jKQorCQlUUkFDRV9GSUVMRChpbnQsIHJldC5kZXB0aCwgZGVwdGgpCisJKSwKKwlUUF9SQVdfRk1UKCI8LS0gJWx4ICglZCkiKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKHdha2V1cCwgVFJBQ0VfV0FLRSwgY3R4X3N3aXRjaF9lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgaW50LCBwcmV2X3BpZCwgcHJldl9waWQpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGNoYXIsIHByZXZfcHJpbywgcHJldl9wcmlvKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBjaGFyLCBwcmV2X3N0YXRlLCBwcmV2X3N0YXRlKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBpbnQsIG5leHRfcGlkLCBuZXh0X3BpZCkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgY2hhciwgbmV4dF9wcmlvLCBuZXh0X3ByaW8pCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGNoYXIsIG5leHRfc3RhdGUsIG5leHRfc3RhdGUpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGludCwgbmV4dF9jcHUsIG5leHRfY3B1KQorCSksCisJVFBfUkFXX0ZNVCgiJXU6JXU6JXUgID09KyAldToldToldSBbJTAzdV0iKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKGNvbnRleHRfc3dpdGNoLCBUUkFDRV9DVFgsIGN0eF9zd2l0Y2hfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGludCwgcHJldl9waWQsIHByZXZfcGlkKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBjaGFyLCBwcmV2X3ByaW8sIHByZXZfcHJpbykKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgY2hhciwgcHJldl9zdGF0ZSwgcHJldl9zdGF0ZSkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgaW50LCBuZXh0X3BpZCwgbmV4dF9waWQpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGNoYXIsIG5leHRfcHJpbywgbmV4dF9wcmlvKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBjaGFyLCBuZXh0X3N0YXRlLCBuZXh0X3N0YXRlKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBpbnQsIG5leHRfY3B1LCBuZXh0X2NwdSkKKwkpLAorCVRQX1JBV19GTVQoIiV1OiV1OiV1ICA9PSsgJXU6JXU6JXUgWyUwM3VdIikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVChzcGVjaWFsLCBUUkFDRV9TUEVDSUFMLCBzcGVjaWFsX2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBhcmcxLCBhcmcxKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBhcmcyLCBhcmcyKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBhcmczLCBhcmczKQorCSksCisJVFBfUkFXX0ZNVCgiKCUwOGx4KSAoJTA4bHgpICglMDhseCkiKQorKTsKKworLyoKKyAqIFN0YWNrLXRyYWNlIGVudHJ5OgorICovCisKKy8qICNkZWZpbmUgRlRSQUNFX1NUQUNLX0VOVFJJRVMgICA4ICovCisKK1RSQUNFX0VWRU5UX0ZPUk1BVChrZXJuZWxfc3RhY2ssIFRSQUNFX1NUQUNLLCBzdGFja19lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzBdLCBzdGFjazApCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlclsxXSwgc3RhY2sxKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbMl0sIHN0YWNrMikKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzNdLCBzdGFjazMpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlcls0XSwgc3RhY2s0KQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbNV0sIHN0YWNrNSkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzZdLCBzdGFjazYpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlcls3XSwgc3RhY2s3KQorCSksCisJVFBfUkFXX0ZNVCgiXHQ9PiAoJTA4bHgpXG5cdD0+ICglMDhseClcblx0PT4gKCUwOGx4KVxuXHQ9PiAoJTA4bHgpXG4iCisJCSAiXHQ9PiAoJTA4bHgpXG5cdD0+ICglMDhseClcblx0PT4gKCUwOGx4KVxuXHQ9PiAoJTA4bHgpXG4iKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKHVzZXJfc3RhY2ssIFRSQUNFX1VTRVJfU1RBQ0ssIHVzZXJzdGFja19lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzBdLCBzdGFjazApCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlclsxXSwgc3RhY2sxKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbMl0sIHN0YWNrMikKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzNdLCBzdGFjazMpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlcls0XSwgc3RhY2s0KQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsZXJbNV0sIHN0YWNrNSkKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgbG9uZywgY2FsbGVyWzZdLCBzdGFjazYpCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGNhbGxlcls3XSwgc3RhY2s3KQorCSksCisJVFBfUkFXX0ZNVCgiXHQ9PiAoJTA4bHgpXG5cdD0+ICglMDhseClcblx0PT4gKCUwOGx4KVxuXHQ9PiAoJTA4bHgpXG4iCisJCSAiXHQ9PiAoJTA4bHgpXG5cdD0+ICglMDhseClcblx0PT4gKCUwOGx4KVxuXHQ9PiAoJTA4bHgpXG4iKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKGJwcmludCwgVFJBQ0VfQlBSSU5ULCBicHJpbnRfZW50cnksIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKHVuc2lnbmVkIGxvbmcsIGlwLCBpcCkKKwkJVFJBQ0VfRklFTEQoY2hhciAqLCBmbXQsIGZtdCkKKwkJVFJBQ0VfRklFTERfWkVST19DSEFSKGJ1ZikKKwkpLAorCVRQX1JBV19GTVQoIiUwOGx4ICglZCkgZm10OiVwICVzIikKKyk7CisKK1RSQUNFX0VWRU5UX0ZPUk1BVChwcmludCwgVFJBQ0VfUFJJTlQsIHByaW50X2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBpcCwgaXApCisJCVRSQUNFX0ZJRUxEX1pFUk9fQ0hBUihidWYpCisJKSwKKwlUUF9SQVdfRk1UKCIlMDhseCAoJWQpIGZtdDolcCAlcyIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQoYnJhbmNoLCBUUkFDRV9CUkFOQ0gsIHRyYWNlX2JyYW5jaCwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQodW5zaWduZWQgaW50LCBsaW5lLCBsaW5lKQorCQlUUkFDRV9GSUVMRF9TUEVDSUFMKGNoYXIgZnVuY1tUUkFDRV9GVU5DX1NJWkUrMV0sIGZ1bmMsIGZ1bmMpCisJCVRSQUNFX0ZJRUxEX1NQRUNJQUwoY2hhciBmaWxlW1RSQUNFX0ZVTkNfU0laRSsxXSwgZmlsZSwgZmlsZSkKKwkJVFJBQ0VfRklFTEQoY2hhciwgY29ycmVjdCwgY29ycmVjdCkKKwkpLAorCVRQX1JBV19GTVQoIiV1OiVzOiVzICgldSkiKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKGh3X2JyYW5jaCwgVFJBQ0VfSFdfQlJBTkNIRVMsIGh3X2JyYW5jaF9lbnRyeSwgaWdub3JlLAorCVRSQUNFX1NUUlVDVCgKKwkJVFJBQ0VfRklFTEQodTY0LCBmcm9tLCBmcm9tKQorCQlUUkFDRV9GSUVMRCh1NjQsIHRvLCB0bykKKwkpLAorCVRQX1JBV19GTVQoImZyb206ICVsbHggdG86ICVsbHgiKQorKTsKKworVFJBQ0VfRVZFTlRfRk9STUFUKHBvd2VyLCBUUkFDRV9QT1dFUiwgdHJhY2VfcG93ZXIsIGlnbm9yZSwKKwlUUkFDRV9TVFJVQ1QoCisJCVRSQUNFX0ZJRUxEKGt0aW1lX3QsIHN0YXRlX2RhdGEuc3RhbXAsIHN0YW1wKQorCQlUUkFDRV9GSUVMRChrdGltZV90LCBzdGF0ZV9kYXRhLmVuZCwgZW5kKQorCQlUUkFDRV9GSUVMRChpbnQsIHN0YXRlX2RhdGEudHlwZSwgdHlwZSkKKwkJVFJBQ0VfRklFTEQoaW50LCBzdGF0ZV9kYXRhLnN0YXRlLCBzdGF0ZSkKKwkpLAorCVRQX1JBV19GTVQoIiVsbHgtPiVsbHggdHlwZToldSBzdGF0ZToldSIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQoa21lbV9hbGxvYywgVFJBQ0VfS01FTV9BTExPQywga21lbXRyYWNlX2FsbG9jX2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRChlbnVtIGttZW10cmFjZV90eXBlX2lkLCB0eXBlX2lkLCB0eXBlX2lkKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsX3NpdGUsIGNhbGxfc2l0ZSkKKwkJVFJBQ0VfRklFTEQoY29uc3Qgdm9pZCAqLCBwdHIsIHB0cikKKwkJVFJBQ0VfRklFTEQoc2l6ZV90LCBieXRlc19yZXEsIGJ5dGVzX3JlcSkKKwkJVFJBQ0VfRklFTEQoc2l6ZV90LCBieXRlc19hbGxvYywgYnl0ZXNfYWxsb2MpCisJCVRSQUNFX0ZJRUxEKGdmcF90LCBnZnBfZmxhZ3MsIGdmcF9mbGFncykKKwkJVFJBQ0VfRklFTEQoaW50LCBub2RlLCBub2RlKQorCSksCisJVFBfUkFXX0ZNVCgidHlwZToldSBjYWxsX3NpdGU6JWx4IHB0cjolcCByZXE6JWx1IGFsbG9jOiVsdSIKKwkJICIgZmxhZ3M6JXggbm9kZTolZCIpCispOworCitUUkFDRV9FVkVOVF9GT1JNQVQoa21lbV9mcmVlLCBUUkFDRV9LTUVNX0ZSRUUsIGttZW10cmFjZV9mcmVlX2VudHJ5LCBpZ25vcmUsCisJVFJBQ0VfU1RSVUNUKAorCQlUUkFDRV9GSUVMRChlbnVtIGttZW10cmFjZV90eXBlX2lkLCB0eXBlX2lkLCB0eXBlX2lkKQorCQlUUkFDRV9GSUVMRCh1bnNpZ25lZCBsb25nLCBjYWxsX3NpdGUsIGNhbGxfc2l0ZSkKKwkJVFJBQ0VfRklFTEQoY29uc3Qgdm9pZCAqLCBwdHIsIHB0cikKKwkpLAorCVRQX1JBV19GTVQoInR5cGU6JXUgY2FsbF9zaXRlOiVseCBwdHI6JXAiKQorKTsKKworI3VuZGVmIFRSQUNFX1NZU1RFTQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZWM0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTAsMCArMSw4MjQgQEAKKy8qCisgKiBldmVudCB0cmFjZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCBJbmMsIFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgorICoKKyAqICAtIEFkZGVkIGZvcm1hdCBvdXRwdXQgb2YgZmllbGRzIG9mIHRoZSB0cmFjZSBwb2ludC4KKyAqICAgIFRoaXMgd2FzIGJhc2VkIG9mZiBvZiB3b3JrIGJ5IFRvbSBaYW51c3NpIDx0emFudXNzaUBnbWFpbC5jb20+LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCisKKyNkZWZpbmUgVFJBQ0VfU1lTVEVNICJUUkFDRV9TWVNURU0iCisKK3N0YXRpYyBERUZJTkVfTVVURVgoZXZlbnRfbXV0ZXgpOworCitpbnQgdHJhY2VfZGVmaW5lX2ZpZWxkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgY2hhciAqdHlwZSwKKwkJICAgICAgIGNoYXIgKm5hbWUsIGludCBvZmZzZXQsIGludCBzaXplKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfZmllbGQgKmZpZWxkOworCisJZmllbGQgPSBremFsbG9jKHNpemVvZigqZmllbGQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZpZWxkKQorCQlnb3RvIGVycjsKKworCWZpZWxkLT5uYW1lID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZpZWxkLT5uYW1lKQorCQlnb3RvIGVycjsKKworCWZpZWxkLT50eXBlID0ga3N0cmR1cCh0eXBlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZpZWxkLT50eXBlKQorCQlnb3RvIGVycjsKKworCWZpZWxkLT5vZmZzZXQgPSBvZmZzZXQ7CisJZmllbGQtPnNpemUgPSBzaXplOworCWxpc3RfYWRkKCZmaWVsZC0+bGluaywgJmNhbGwtPmZpZWxkcyk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWlmIChmaWVsZCkgeworCQlrZnJlZShmaWVsZC0+bmFtZSk7CisJCWtmcmVlKGZpZWxkLT50eXBlKTsKKwl9CisJa2ZyZWUoZmllbGQpOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIGZ0cmFjZV9jbGVhcl9ldmVudHModm9pZCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSAodm9pZCAqKV9fc3RhcnRfZnRyYWNlX2V2ZW50czsKKworCisJd2hpbGUgKCh1bnNpZ25lZCBsb25nKWNhbGwgPCAodW5zaWduZWQgbG9uZylfX3N0b3BfZnRyYWNlX2V2ZW50cykgeworCisJCWlmIChjYWxsLT5lbmFibGVkKSB7CisJCQljYWxsLT5lbmFibGVkID0gMDsKKwkJCWNhbGwtPnVucmVnZnVuYygpOworCQl9CisJCWNhbGwrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZ0cmFjZV9ldmVudF9lbmFibGVfZGlzYWJsZShzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsCisJCQkJCWludCBlbmFibGUpCit7CisKKwlzd2l0Y2ggKGVuYWJsZSkgeworCWNhc2UgMDoKKwkJaWYgKGNhbGwtPmVuYWJsZWQpIHsKKwkJCWNhbGwtPmVuYWJsZWQgPSAwOworCQkJY2FsbC0+dW5yZWdmdW5jKCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQlpZiAoIWNhbGwtPmVuYWJsZWQpIHsKKwkJCWNhbGwtPmVuYWJsZWQgPSAxOworCQkJY2FsbC0+cmVnZnVuYygpOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBmdHJhY2Vfc2V0X2Nscl9ldmVudChjaGFyICpidWYsIGludCBzZXQpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gX19zdGFydF9mdHJhY2VfZXZlbnRzOworCWNoYXIgKmV2ZW50ID0gTlVMTCwgKnN1YiA9IE5VTEwsICptYXRjaDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCS8qCisJICogVGhlIGJ1ZiBmb3JtYXQgY2FuIGJlIDxzdWJzeXN0ZW0+OjxldmVudC1uYW1lPgorCSAqICAqOjxldmVudC1uYW1lPiBtZWFucyBhbnkgZXZlbnQgYnkgdGhhdCBuYW1lLgorCSAqICA6PGV2ZW50LW5hbWU+IGlzIHRoZSBzYW1lLgorCSAqCisJICogIDxzdWJzeXN0ZW0+OiogbWVhbnMgYWxsIGV2ZW50cyBpbiB0aGF0IHN1YnN5c3RlbQorCSAqICA8c3Vic3lzdGVtPjogbWVhbnMgdGhlIHNhbWUuCisJICoKKwkgKiAgPG5hbWU+IChubyAnOicpIG1lYW5zIGFsbCBldmVudHMgaW4gYSBzdWJzeXN0ZW0gd2l0aAorCSAqICB0aGUgbmFtZSA8bmFtZT4gb3IgYW55IGV2ZW50IHRoYXQgbWF0Y2hlcyA8bmFtZT4KKwkgKi8KKworCW1hdGNoID0gc3Ryc2VwKCZidWYsICI6Iik7CisJaWYgKGJ1ZikgeworCQlzdWIgPSBtYXRjaDsKKwkJZXZlbnQgPSBidWY7CisJCW1hdGNoID0gTlVMTDsKKworCQlpZiAoIXN0cmxlbihzdWIpIHx8IHN0cmNtcChzdWIsICIqIikgPT0gMCkKKwkJCXN1YiA9IE5VTEw7CisJCWlmICghc3RybGVuKGV2ZW50KSB8fCBzdHJjbXAoZXZlbnQsICIqIikgPT0gMCkKKwkJCWV2ZW50ID0gTlVMTDsKKwl9CisKKwltdXRleF9sb2NrKCZldmVudF9tdXRleCk7CisJZm9yX2VhY2hfZXZlbnQoY2FsbCkgeworCisJCWlmICghY2FsbC0+bmFtZSB8fCAhY2FsbC0+cmVnZnVuYykKKwkJCWNvbnRpbnVlOworCisJCWlmIChtYXRjaCAmJgorCQkgICAgc3RyY21wKG1hdGNoLCBjYWxsLT5uYW1lKSAhPSAwICYmCisJCSAgICBzdHJjbXAobWF0Y2gsIGNhbGwtPnN5c3RlbSkgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdWIgJiYgc3RyY21wKHN1YiwgY2FsbC0+c3lzdGVtKSAhPSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKGV2ZW50ICYmIHN0cmNtcChldmVudCwgY2FsbC0+bmFtZSkgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWZ0cmFjZV9ldmVudF9lbmFibGVfZGlzYWJsZShjYWxsLCBzZXQpOworCisJCXJldCA9IDA7CisJfQorCW11dGV4X3VubG9jaygmZXZlbnRfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworLyogMTI4IHNob3VsZCBiZSBtdWNoIG1vcmUgdGhhbiBlbm91Z2ggKi8KKyNkZWZpbmUgRVZFTlRfQlVGX1NJWkUJCTEyNworCitzdGF0aWMgc3NpemVfdAorZnRyYWNlX2V2ZW50X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZiwKKwkJICAgc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQoreworCXNpemVfdCByZWFkID0gMDsKKwlpbnQgaSwgc2V0ID0gMTsKKwlzc2l6ZV90IHJldDsKKwljaGFyICpidWY7CisJY2hhciBjaDsKKworCWlmICghY250IHx8IGNudCA8IDApCisJCXJldHVybiAwOworCisJcmV0ID0gdHJhY2luZ191cGRhdGVfYnVmZmVycygpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZ2V0X3VzZXIoY2gsIHVidWYrKyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZWFkKys7CisJY250LS07CisKKwkvKiBza2lwIHdoaXRlIHNwYWNlICovCisJd2hpbGUgKGNudCAmJiBpc3NwYWNlKGNoKSkgeworCQlyZXQgPSBnZXRfdXNlcihjaCwgdWJ1ZisrKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJlYWQrKzsKKwkJY250LS07CisJfQorCisJLyogT25seSB3aGl0ZSBzcGFjZSBmb3VuZD8gKi8KKwlpZiAoaXNzcGFjZShjaCkpIHsKKwkJZmlsZS0+Zl9wb3MgKz0gcmVhZDsKKwkJcmV0ID0gcmVhZDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlidWYgPSBrbWFsbG9jKEVWRU5UX0JVRl9TSVpFKzEsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjbnQgPiBFVkVOVF9CVUZfU0laRSkKKwkJY250ID0gRVZFTlRfQlVGX1NJWkU7CisKKwlpID0gMDsKKwl3aGlsZSAoY250ICYmICFpc3NwYWNlKGNoKSkgeworCQlpZiAoIWkgJiYgY2ggPT0gJyEnKQorCQkJc2V0ID0gMDsKKwkJZWxzZQorCQkJYnVmW2krK10gPSBjaDsKKworCQlyZXQgPSBnZXRfdXNlcihjaCwgdWJ1ZisrKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCXJlYWQrKzsKKwkJY250LS07CisJfQorCWJ1ZltpXSA9IDA7CisKKwlmaWxlLT5mX3BvcyArPSByZWFkOworCisJcmV0ID0gZnRyYWNlX3NldF9jbHJfZXZlbnQoYnVmLCBzZXQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlyZXQgPSByZWFkOworCisgb3V0X2ZyZWU6CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkICoKK3RfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IG0tPnByaXZhdGU7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpuZXh0ID0gY2FsbDsKKworCSgqcG9zKSsrOworCisJZm9yICg7OykgeworCQlpZiAoKHVuc2lnbmVkIGxvbmcpY2FsbCA+PSAodW5zaWduZWQgbG9uZylfX3N0b3BfZnRyYWNlX2V2ZW50cykKKwkJCXJldHVybiBOVUxMOworCisJCS8qCisJCSAqIFRoZSBmdHJhY2Ugc3Vic3lzdGVtIGlzIGZvciBzaG93aW5nIGZvcm1hdHMgb25seS4KKwkJICogVGhleSBjYW4gbm90IGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgdmlhIHRoZSBldmVudCBmaWxlcy4KKwkJICovCisJCWlmIChjYWxsLT5yZWdmdW5jKQorCQkJYnJlYWs7CisKKwkJY2FsbCsrOworCQluZXh0ID0gY2FsbDsKKwl9CisKKwltLT5wcml2YXRlID0gKytuZXh0OworCisJcmV0dXJuIGNhbGw7Cit9CisKK3N0YXRpYyB2b2lkICp0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuIHRfbmV4dChtLCBOVUxMLCBwb3MpOworfQorCitzdGF0aWMgdm9pZCAqCitzX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBtLT5wcml2YXRlOworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqbmV4dDsKKworCSgqcG9zKSsrOworCisgcmV0cnk6CisJaWYgKCh1bnNpZ25lZCBsb25nKWNhbGwgPj0gKHVuc2lnbmVkIGxvbmcpX19zdG9wX2Z0cmFjZV9ldmVudHMpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFjYWxsLT5lbmFibGVkKSB7CisJCWNhbGwrKzsKKwkJZ290byByZXRyeTsKKwl9CisKKwluZXh0ID0gY2FsbDsKKwltLT5wcml2YXRlID0gKytuZXh0OworCisJcmV0dXJuIGNhbGw7Cit9CisKK3N0YXRpYyB2b2lkICpzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuIHNfbmV4dChtLCBOVUxMLCBwb3MpOworfQorCitzdGF0aWMgaW50IHRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gdjsKKworCWlmIChzdHJjbXAoY2FsbC0+c3lzdGVtLCBUUkFDRV9TWVNURU0pICE9IDApCisJCXNlcV9wcmludGYobSwgIiVzOiIsIGNhbGwtPnN5c3RlbSk7CisJc2VxX3ByaW50ZihtLCAiJXNcbiIsIGNhbGwtPm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCit7Cit9CisKK3N0YXRpYyBpbnQKK2Z0cmFjZV9ldmVudF9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0OworCWNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyAqc2VxX29wczsKKworCWlmICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpICYmCisJICAgICEoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSkKKwkJZnRyYWNlX2NsZWFyX2V2ZW50cygpOworCisJc2VxX29wcyA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0ID0gc2VxX29wZW4oZmlsZSwgc2VxX29wcyk7CisJaWYgKCFyZXQpIHsKKwkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJCW0tPnByaXZhdGUgPSBfX3N0YXJ0X2Z0cmFjZV9ldmVudHM7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitldmVudF9lbmFibGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCisJCSAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwljaGFyICpidWY7CisKKwlpZiAoY2FsbC0+ZW5hYmxlZCkKKwkJYnVmID0gIjFcbiI7CisJZWxzZQorCQlidWYgPSAiMFxuIjsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1YnVmLCBjbnQsIHBwb3MsIGJ1ZiwgMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitldmVudF9lbmFibGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LAorCQkgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzY0XTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJaWYgKGNudCA+PSBzaXplb2YoYnVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmJ1ZiwgdWJ1ZiwgY250KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZbY250XSA9IDA7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHRyYWNpbmdfdXBkYXRlX2J1ZmZlcnMoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJbXV0ZXhfbG9jaygmZXZlbnRfbXV0ZXgpOworCQlmdHJhY2VfZXZlbnRfZW5hYmxlX2Rpc2FibGUoY2FsbCwgdmFsKTsKKwkJbXV0ZXhfdW5sb2NrKCZldmVudF9tdXRleCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKnBwb3MgKz0gY250OworCisJcmV0dXJuIGNudDsKK30KKworI3VuZGVmIEZJRUxECisjZGVmaW5lIEZJRUxEKHR5cGUsIG5hbWUpCQkJCQkJXAorCSN0eXBlLCAiY29tbW9uXyIgI25hbWUsIG9mZnNldG9mKHR5cGVvZihmaWVsZCksIG5hbWUpLAkJXAorCQlzaXplb2YoZmllbGQubmFtZSkKKworc3RhdGljIGludCB0cmFjZV93cml0ZV9oZWFkZXIoc3RydWN0IHRyYWNlX3NlcSAqcykKK3sKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgZmllbGQ7CisKKwkvKiBzdHJ1Y3QgdHJhY2VfZW50cnkgKi8KKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLAorCQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1xuIgorCQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1xuIgorCQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1xuIgorCQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1xuIgorCQkJCSJcdGZpZWxkOiVzICVzO1x0b2Zmc2V0OiV6dTtcdHNpemU6JXp1O1xuIgorCQkJCSJcbiIsCisJCQkJRklFTEQodW5zaWduZWQgY2hhciwgdHlwZSksCisJCQkJRklFTEQodW5zaWduZWQgY2hhciwgZmxhZ3MpLAorCQkJCUZJRUxEKHVuc2lnbmVkIGNoYXIsIHByZWVtcHRfY291bnQpLAorCQkJCUZJRUxEKGludCwgcGlkKSwKKwkJCQlGSUVMRChpbnQsIHRnaWQpKTsKK30KKworc3RhdGljIHNzaXplX3QKK2V2ZW50X2Zvcm1hdF9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKKwkJICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0cmFjZV9zZXEgKnM7CisJY2hhciAqYnVmOworCWludCByOworCisJaWYgKCpwcG9zKQorCQlyZXR1cm4gMDsKKworCXMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOworCWlmICghcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cmFjZV9zZXFfaW5pdChzKTsKKworCS8qIElmIGFueSBvZiB0aGUgZmlyc3Qgd3JpdGVzIGZhaWwsIHNvIHdpbGwgdGhlIHNob3dfZm9ybWF0LiAqLworCisJdHJhY2Vfc2VxX3ByaW50ZihzLCAibmFtZTogJXNcbiIsIGNhbGwtPm5hbWUpOworCXRyYWNlX3NlcV9wcmludGYocywgIklEOiAlZFxuIiwgY2FsbC0+aWQpOworCXRyYWNlX3NlcV9wcmludGYocywgImZvcm1hdDpcbiIpOworCXRyYWNlX3dyaXRlX2hlYWRlcihzKTsKKworCXIgPSBjYWxsLT5zaG93X2Zvcm1hdChzKTsKKwlpZiAoIXIpIHsKKwkJLyoKKwkJICogdWchICBUaGUgZm9ybWF0IG91dHB1dCBpcyBiaWdnZXIgdGhhbiBhIFBBR0UhIQorCQkgKi8KKwkJYnVmID0gIkZPUk1BVCBUT08gQklHXG4iOworCQlyID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLAorCQkJCQkgICAgICBidWYsIHN0cmxlbihidWYpKTsKKwkJZ290byBvdXQ7CisJfQorCisJciA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywKKwkJCQkgICAgcy0+YnVmZmVyLCBzLT5sZW4pOworIG91dDoKKwlrZnJlZShzKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHNzaXplX3QKK2V2ZW50X2lkX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3QgY250LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0cmFjZV9zZXEgKnM7CisJaW50IHI7CisKKwlpZiAoKnBwb3MpCisJCXJldHVybiAwOworCisJcyA9IGttYWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRyYWNlX3NlcV9pbml0KHMpOworCXRyYWNlX3NlcV9wcmludGYocywgIiVkXG4iLCBjYWxsLT5pZCk7CisKKwlyID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLAorCQkJCSAgICBzLT5idWZmZXIsIHMtPmxlbik7CisJa2ZyZWUocyk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitldmVudF9maWx0ZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCisJCSAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzOworCWludCByOworCisJaWYgKCpwcG9zKQorCQlyZXR1cm4gMDsKKworCXMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOworCWlmICghcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cmFjZV9zZXFfaW5pdChzKTsKKworCWZpbHRlcl9wcmludF9wcmVkcyhjYWxsLT5wcmVkcywgcyk7CisJciA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNudCwgcHBvcywgcy0+YnVmZmVyLCBzLT5sZW4pOworCisJa2ZyZWUocyk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHNzaXplX3QKK2V2ZW50X2ZpbHRlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCisJCSAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNjRdLCAqcGJ1ZiA9IGJ1ZjsKKwlzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQ7CisJaW50IGVycjsKKworCWlmIChjbnQgPj0gc2l6ZW9mKGJ1ZikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZidWYsIHVidWYsIGNudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcHJlZCA9IGt6YWxsb2Moc2l6ZW9mKCpwcmVkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcmVkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9IGZpbHRlcl9wYXJzZSgmcGJ1ZiwgcHJlZCk7CisJaWYgKGVyciA8IDApIHsKKwkJZmlsdGVyX2ZyZWVfcHJlZChwcmVkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAocHJlZC0+Y2xlYXIpIHsKKwkJZmlsdGVyX2ZyZWVfcHJlZHMoY2FsbCk7CisJCWZpbHRlcl9mcmVlX3ByZWQocHJlZCk7CisJCXJldHVybiBjbnQ7CisJfQorCisJaWYgKGZpbHRlcl9hZGRfcHJlZChjYWxsLCBwcmVkKSkgeworCQlmaWx0ZXJfZnJlZV9wcmVkKHByZWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqcHBvcyArPSBjbnQ7CisKKwlyZXR1cm4gY250OworfQorCitzdGF0aWMgc3NpemVfdAorc3Vic3lzdGVtX2ZpbHRlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqdWJ1Ziwgc2l6ZV90IGNudCwKKwkJICAgICAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzOworCWludCByOworCisJaWYgKCpwcG9zKQorCQlyZXR1cm4gMDsKKworCXMgPSBrbWFsbG9jKHNpemVvZigqcyksIEdGUF9LRVJORUwpOworCWlmICghcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cmFjZV9zZXFfaW5pdChzKTsKKworCWZpbHRlcl9wcmludF9wcmVkcyhzeXN0ZW0tPnByZWRzLCBzKTsKKwlyID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY250LCBwcG9zLCBzLT5idWZmZXIsIHMtPmxlbik7CisKKwlrZnJlZShzKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgc3NpemVfdAorc3Vic3lzdGVtX2ZpbHRlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBjbnQsCisJCSAgICAgICBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGV2ZW50X3N1YnN5c3RlbSAqc3lzdGVtID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzY0XSwgKnBidWYgPSBidWY7CisJc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkOworCWludCBlcnI7CisKKwlpZiAoY250ID49IHNpemVvZihidWYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjbnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXByZWQgPSBremFsbG9jKHNpemVvZigqcHJlZCksIEdGUF9LRVJORUwpOworCWlmICghcHJlZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBmaWx0ZXJfcGFyc2UoJnBidWYsIHByZWQpOworCWlmIChlcnIgPCAwKSB7CisJCWZpbHRlcl9mcmVlX3ByZWQocHJlZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHByZWQtPmNsZWFyKSB7CisJCWZpbHRlcl9mcmVlX3N1YnN5c3RlbV9wcmVkcyhzeXN0ZW0pOworCQlmaWx0ZXJfZnJlZV9wcmVkKHByZWQpOworCQlyZXR1cm4gY250OworCX0KKworCWlmIChmaWx0ZXJfYWRkX3N1YnN5c3RlbV9wcmVkKHN5c3RlbSwgcHJlZCkpIHsKKwkJZmlsdGVyX2ZyZWVfc3Vic3lzdGVtX3ByZWRzKHN5c3RlbSk7CisJCWZpbHRlcl9mcmVlX3ByZWQocHJlZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCSpwcG9zICs9IGNudDsKKworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2hvd19ldmVudF9zZXFfb3BzID0geworCS5zdGFydCA9IHRfc3RhcnQsCisJLm5leHQgPSB0X25leHQsCisJLnNob3cgPSB0X3Nob3csCisJLnN0b3AgPSB0X3N0b3AsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNob3dfc2V0X2V2ZW50X3NlcV9vcHMgPSB7CisJLnN0YXJ0ID0gc19zdGFydCwKKwkubmV4dCA9IHNfbmV4dCwKKwkuc2hvdyA9IHRfc2hvdywKKwkuc3RvcCA9IHRfc3RvcCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9hdmFpbF9mb3BzID0geworCS5vcGVuID0gZnRyYWNlX2V2ZW50X3NlcV9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX3NldF9ldmVudF9mb3BzID0geworCS5vcGVuID0gZnRyYWNlX2V2ZW50X3NlcV9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLndyaXRlID0gZnRyYWNlX2V2ZW50X3dyaXRlLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9lbmFibGVfZm9wcyA9IHsKKwkub3BlbiA9IHRyYWNpbmdfb3Blbl9nZW5lcmljLAorCS5yZWFkID0gZXZlbnRfZW5hYmxlX3JlYWQsCisJLndyaXRlID0gZXZlbnRfZW5hYmxlX3dyaXRlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2V2ZW50X2Zvcm1hdF9mb3BzID0geworCS5vcGVuID0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCisJLnJlYWQgPSBldmVudF9mb3JtYXRfcmVhZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9ldmVudF9pZF9mb3BzID0geworCS5vcGVuID0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCisJLnJlYWQgPSBldmVudF9pZF9yZWFkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2V2ZW50X2ZpbHRlcl9mb3BzID0geworCS5vcGVuID0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCisJLnJlYWQgPSBldmVudF9maWx0ZXJfcmVhZCwKKwkud3JpdGUgPSBldmVudF9maWx0ZXJfd3JpdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2Vfc3Vic3lzdGVtX2ZpbHRlcl9mb3BzID0geworCS5vcGVuID0gdHJhY2luZ19vcGVuX2dlbmVyaWMsCisJLnJlYWQgPSBzdWJzeXN0ZW1fZmlsdGVyX3JlYWQsCisJLndyaXRlID0gc3Vic3lzdGVtX2ZpbHRlcl93cml0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpldmVudF90cmFjZV9ldmVudHNfZGlyKHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOworCXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkX2V2ZW50czsKKworCWlmIChkX2V2ZW50cykKKwkJcmV0dXJuIGRfZXZlbnRzOworCisJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7CisJaWYgKCFkX3RyYWNlcikKKwkJcmV0dXJuIE5VTEw7CisKKwlkX2V2ZW50cyA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZXZlbnRzIiwgZF90cmFjZXIpOworCWlmICghZF9ldmVudHMpCisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCisJCQkgICAiJ2V2ZW50cycgZGlyZWN0b3J5XG4iKTsKKworCXJldHVybiBkX2V2ZW50czsKK30KKworc3RhdGljIExJU1RfSEVBRChldmVudF9zdWJzeXN0ZW1zKTsKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKgorZXZlbnRfc3Vic3lzdGVtX2Rpcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGVudHJ5ICpkX2V2ZW50cykKK3sKKwlzdHJ1Y3QgZXZlbnRfc3Vic3lzdGVtICpzeXN0ZW07CisKKwkvKiBGaXJzdCBzZWUgaWYgd2UgZGlkIG5vdCBhbHJlYWR5IGNyZWF0ZSB0aGlzIGRpciAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3lzdGVtLCAmZXZlbnRfc3Vic3lzdGVtcywgbGlzdCkgeworCQlpZiAoc3RyY21wKHN5c3RlbS0+bmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiBzeXN0ZW0tPmVudHJ5OworCX0KKworCS8qIG5lZWQgdG8gY3JlYXRlIG5ldyBlbnRyeSAqLworCXN5c3RlbSA9IGttYWxsb2Moc2l6ZW9mKCpzeXN0ZW0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN5c3RlbSkgeworCQlwcl93YXJuaW5nKCJObyBtZW1vcnkgdG8gY3JlYXRlIGV2ZW50IHN1YnN5c3RlbSAlc1xuIiwKKwkJCSAgIG5hbWUpOworCQlyZXR1cm4gZF9ldmVudHM7CisJfQorCisJc3lzdGVtLT5lbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLCBkX2V2ZW50cyk7CisJaWYgKCFzeXN0ZW0tPmVudHJ5KSB7CisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZXZlbnQgc3Vic3lzdGVtICVzXG4iLAorCQkJICAgbmFtZSk7CisJCWtmcmVlKHN5c3RlbSk7CisJCXJldHVybiBkX2V2ZW50czsKKwl9CisKKwlzeXN0ZW0tPm5hbWUgPSBuYW1lOworCWxpc3RfYWRkKCZzeXN0ZW0tPmxpc3QsICZldmVudF9zdWJzeXN0ZW1zKTsKKworCXN5c3RlbS0+cHJlZHMgPSBOVUxMOworCisJcmV0dXJuIHN5c3RlbS0+ZW50cnk7Cit9CisKK3N0YXRpYyBpbnQKK2V2ZW50X2NyZWF0ZV9kaXIoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBzdHJ1Y3QgZGVudHJ5ICpkX2V2ZW50cykKK3sKKwlzdHJ1Y3QgZGVudHJ5ICplbnRyeTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBJZiB0aGUgdHJhY2UgcG9pbnQgaGVhZGVyIGRpZCBub3QgZGVmaW5lIFRSQUNFX1NZU1RFTQorCSAqIHRoZW4gdGhlIHN5c3RlbSB3b3VsZCBiZSBjYWxsZWQgIlRSQUNFX1NZU1RFTSIuCisJICovCisJaWYgKHN0cmNtcChjYWxsLT5zeXN0ZW0sICJUUkFDRV9TWVNURU0iKSAhPSAwKQorCQlkX2V2ZW50cyA9IGV2ZW50X3N1YnN5c3RlbV9kaXIoY2FsbC0+c3lzdGVtLCBkX2V2ZW50cyk7CisKKwlpZiAoY2FsbC0+cmF3X2luaXQpIHsKKwkJcmV0ID0gY2FsbC0+cmF3X2luaXQoKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBpbml0aWFsaXplIHRyYWNlIHBvaW50IgorCQkJCSAgICIgZXZlbnRzLyVzXG4iLCBjYWxsLT5uYW1lKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwljYWxsLT5kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoY2FsbC0+bmFtZSwgZF9ldmVudHMpOworCWlmICghY2FsbC0+ZGlyKSB7CisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCisJCQkgICAiJyVzJyBkaXJlY3RvcnlcbiIsIGNhbGwtPm5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGNhbGwtPnJlZ2Z1bmMpIHsKKwkJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJlbmFibGUiLCAwNjQ0LCBjYWxsLT5kaXIsIGNhbGwsCisJCQkJCSAgICAmZnRyYWNlX2VuYWJsZV9mb3BzKTsKKwkJaWYgKCFlbnRyeSkKKwkJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCisJCQkJICAgIiclcy9lbmFibGUnIGVudHJ5XG4iLCBjYWxsLT5uYW1lKTsKKwl9CisKKwlpZiAoY2FsbC0+aWQpIHsKKwkJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpZCIsIDA0NDQsIGNhbGwtPmRpciwgY2FsbCwKKwkJCQkmZnRyYWNlX2V2ZW50X2lkX2ZvcHMpOworCQlpZiAoIWVudHJ5KQorCQkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICclcy9pZCcgZW50cnlcbiIsCisJCQkJCWNhbGwtPm5hbWUpOworCX0KKworCWlmIChjYWxsLT5kZWZpbmVfZmllbGRzKSB7CisJCXJldCA9IGNhbGwtPmRlZmluZV9maWVsZHMoKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBpbml0aWFsaXplIHRyYWNlIHBvaW50IgorCQkJCSAgICIgZXZlbnRzLyVzXG4iLCBjYWxsLT5uYW1lKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJmaWx0ZXIiLCAwNjQ0LCBjYWxsLT5kaXIsIGNhbGwsCisJCQkJCSAgICAmZnRyYWNlX2V2ZW50X2ZpbHRlcl9mb3BzKTsKKwkJaWYgKCFlbnRyeSkKKwkJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCisJCQkJICAgIiclcy9maWx0ZXInIGVudHJ5XG4iLCBjYWxsLT5uYW1lKTsKKwl9CisKKwkvKiBBIHRyYWNlIG1heSBub3Qgd2FudCB0byBleHBvcnQgaXRzIGZvcm1hdCAqLworCWlmICghY2FsbC0+c2hvd19mb3JtYXQpCisJCXJldHVybiAwOworCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJmb3JtYXQiLCAwNDQ0LCBjYWxsLT5kaXIsIGNhbGwsCisJCQkJICAgICZmdHJhY2VfZXZlbnRfZm9ybWF0X2ZvcHMpOworCWlmICghZW50cnkpCisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCisJCQkgICAiJyVzL2Zvcm1hdCcgZW50cnlcbiIsIGNhbGwtPm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IGV2ZW50X3RyYWNlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBfX3N0YXJ0X2Z0cmFjZV9ldmVudHM7CisJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CisJc3RydWN0IGRlbnRyeSAqZW50cnk7CisJc3RydWN0IGRlbnRyeSAqZF9ldmVudHM7CisKKwlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKKwlpZiAoIWRfdHJhY2VyKQorCQlyZXR1cm4gMDsKKworCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgiYXZhaWxhYmxlX2V2ZW50cyIsIDA0NDQsIGRfdHJhY2VyLAorCQkJCSAgICAodm9pZCAqKSZzaG93X2V2ZW50X3NlcV9vcHMsCisJCQkJICAgICZmdHJhY2VfYXZhaWxfZm9wcyk7CisJaWYgKCFlbnRyeSkKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCSAgICInYXZhaWxhYmxlX2V2ZW50cycgZW50cnlcbiIpOworCisJZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzZXRfZXZlbnQiLCAwNjQ0LCBkX3RyYWNlciwKKwkJCQkgICAgKHZvaWQgKikmc2hvd19zZXRfZXZlbnRfc2VxX29wcywKKwkJCQkgICAgJmZ0cmFjZV9zZXRfZXZlbnRfZm9wcyk7CisJaWYgKCFlbnRyeSkKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICIKKwkJCSAgICInc2V0X2V2ZW50JyBlbnRyeVxuIik7CisKKwlkX2V2ZW50cyA9IGV2ZW50X3RyYWNlX2V2ZW50c19kaXIoKTsKKwlpZiAoIWRfZXZlbnRzKQorCQlyZXR1cm4gMDsKKworCWZvcl9lYWNoX2V2ZW50KGNhbGwpIHsKKwkJLyogVGhlIGxpbmtlciBtYXkgbGVhdmUgYmxhbmtzICovCisJCWlmICghY2FsbC0+bmFtZSkKKwkJCWNvbnRpbnVlOworCQlldmVudF9jcmVhdGVfZGlyKGNhbGwsIGRfZXZlbnRzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2ZzX2luaXRjYWxsKGV2ZW50X3RyYWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19maWx0ZXIuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2YmU0MQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfZmlsdGVyLmMKQEAgLTAsMCArMSw0MjcgQEAKKy8qCisgKiB0cmFjZV9ldmVudHNfZmlsdGVyIC0gZ2VuZXJpYyBldmVudCBmaWx0ZXJpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUb20gWmFudXNzaSA8dHphbnVzc2lAZ21haWwuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisKKyNpbmNsdWRlICJ0cmFjZS5oIgorI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgorCitzdGF0aWMgaW50IGZpbHRlcl9wcmVkXzY0KHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCwgdm9pZCAqZXZlbnQpCit7CisJdTY0ICphZGRyID0gKHU2NCAqKShldmVudCArIHByZWQtPm9mZnNldCk7CisJdTY0IHZhbCA9ICh1NjQpcHJlZC0+dmFsOworCWludCBtYXRjaDsKKworCW1hdGNoID0gKHZhbCA9PSAqYWRkcikgXiBwcmVkLT5ub3Q7CisKKwlyZXR1cm4gbWF0Y2g7Cit9CisKK3N0YXRpYyBpbnQgZmlsdGVyX3ByZWRfMzIoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkLCB2b2lkICpldmVudCkKK3sKKwl1MzIgKmFkZHIgPSAodTMyICopKGV2ZW50ICsgcHJlZC0+b2Zmc2V0KTsKKwl1MzIgdmFsID0gKHUzMilwcmVkLT52YWw7CisJaW50IG1hdGNoOworCisJbWF0Y2ggPSAodmFsID09ICphZGRyKSBeIHByZWQtPm5vdDsKKworCXJldHVybiBtYXRjaDsKK30KKworc3RhdGljIGludCBmaWx0ZXJfcHJlZF8xNihzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQsIHZvaWQgKmV2ZW50KQoreworCXUxNiAqYWRkciA9ICh1MTYgKikoZXZlbnQgKyBwcmVkLT5vZmZzZXQpOworCXUxNiB2YWwgPSAodTE2KXByZWQtPnZhbDsKKwlpbnQgbWF0Y2g7CisKKwltYXRjaCA9ICh2YWwgPT0gKmFkZHIpIF4gcHJlZC0+bm90OworCisJcmV0dXJuIG1hdGNoOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9wcmVkXzgoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkLCB2b2lkICpldmVudCkKK3sKKwl1OCAqYWRkciA9ICh1OCAqKShldmVudCArIHByZWQtPm9mZnNldCk7CisJdTggdmFsID0gKHU4KXByZWQtPnZhbDsKKwlpbnQgbWF0Y2g7CisKKwltYXRjaCA9ICh2YWwgPT0gKmFkZHIpIF4gcHJlZC0+bm90OworCisJcmV0dXJuIG1hdGNoOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9wcmVkX3N0cmluZyhzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQsIHZvaWQgKmV2ZW50KQoreworCWNoYXIgKmFkZHIgPSAoY2hhciAqKShldmVudCArIHByZWQtPm9mZnNldCk7CisJaW50IGNtcCwgbWF0Y2g7CisKKwljbXAgPSBzdHJuY21wKGFkZHIsIHByZWQtPnN0cl92YWwsIHByZWQtPnN0cl9sZW4pOworCisJbWF0Y2ggPSAoIWNtcCkgXiBwcmVkLT5ub3Q7CisKKwlyZXR1cm4gbWF0Y2g7Cit9CisKKy8qIHJldHVybiAxIGlmIGV2ZW50IG1hdGNoZXMsIDAgb3RoZXJ3aXNlIChkaXNjYXJkKSAqLworaW50IGZpbHRlcl9tYXRjaF9wcmVkcyhzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwsIHZvaWQgKnJlYykKK3sKKwlpbnQgaSwgbWF0Y2hlZCwgYW5kX2ZhaWxlZCA9IDA7CisJc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9GSUxURVJfUFJFRDsgaSsrKSB7CisJCWlmIChjYWxsLT5wcmVkc1tpXSkgeworCQkJcHJlZCA9IGNhbGwtPnByZWRzW2ldOworCQkJaWYgKGFuZF9mYWlsZWQgJiYgIXByZWQtPm9yKQorCQkJCWNvbnRpbnVlOworCQkJbWF0Y2hlZCA9IHByZWQtPmZuKHByZWQsIHJlYyk7CisJCQlpZiAoIW1hdGNoZWQgJiYgIXByZWQtPm9yKSB7CisJCQkJYW5kX2ZhaWxlZCA9IDE7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKG1hdGNoZWQgJiYgcHJlZC0+b3IpCisJCQkJcmV0dXJuIDE7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKGFuZF9mYWlsZWQpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgZmlsdGVyX3ByaW50X3ByZWRzKHN0cnVjdCBmaWx0ZXJfcHJlZCAqKnByZWRzLCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQoreworCWNoYXIgKmZpZWxkX25hbWU7CisJc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkOworCWludCBpOworCisJaWYgKCFwcmVkcykgeworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICJub25lXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNQVhfRklMVEVSX1BSRUQ7IGkrKykgeworCQlpZiAocHJlZHNbaV0pIHsKKwkJCXByZWQgPSBwcmVkc1tpXTsKKwkJCWZpZWxkX25hbWUgPSBwcmVkLT5maWVsZF9uYW1lOworCQkJaWYgKGkpCisJCQkJdHJhY2Vfc2VxX3ByaW50ZihzLCBwcmVkLT5vciA/ICJ8fCAiIDogIiYmICIpOworCQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXMgIiwgZmllbGRfbmFtZSk7CisJCQl0cmFjZV9zZXFfcHJpbnRmKHMsIHByZWQtPm5vdCA/ICIhPSAiIDogIj09ICIpOworCQkJaWYgKHByZWQtPnN0cl92YWwpCisJCQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJXNcbiIsIHByZWQtPnN0cl92YWwpOworCQkJZWxzZQorCQkJCXRyYWNlX3NlcV9wcmludGYocywgIiVsbHVcbiIsIHByZWQtPnZhbCk7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9maWVsZCAqCitmaW5kX2V2ZW50X2ZpZWxkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2ZpZWxkICpmaWVsZDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZmllbGQsICZjYWxsLT5maWVsZHMsIGxpbmspIHsKKwkJaWYgKCFzdHJjbXAoZmllbGQtPm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIGZpZWxkOworCX0KKworCXJldHVybiBOVUxMOworfQorCit2b2lkIGZpbHRlcl9mcmVlX3ByZWQoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKQoreworCWlmICghcHJlZCkKKwkJcmV0dXJuOworCisJa2ZyZWUocHJlZC0+ZmllbGRfbmFtZSk7CisJa2ZyZWUocHJlZC0+c3RyX3ZhbCk7CisJa2ZyZWUocHJlZCk7Cit9CisKK3ZvaWQgZmlsdGVyX2ZyZWVfcHJlZHMoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKQoreworCWludCBpOworCisJaWYgKGNhbGwtPnByZWRzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfRklMVEVSX1BSRUQ7IGkrKykKKwkJCWZpbHRlcl9mcmVlX3ByZWQoY2FsbC0+cHJlZHNbaV0pOworCQlrZnJlZShjYWxsLT5wcmVkcyk7CisJCWNhbGwtPnByZWRzID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgZmlsdGVyX2ZyZWVfc3Vic3lzdGVtX3ByZWRzKHN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbSkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBfX3N0YXJ0X2Z0cmFjZV9ldmVudHM7CisJaW50IGk7CisKKwlpZiAoc3lzdGVtLT5wcmVkcykgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZJTFRFUl9QUkVEOyBpKyspCisJCQlmaWx0ZXJfZnJlZV9wcmVkKHN5c3RlbS0+cHJlZHNbaV0pOworCQlrZnJlZShzeXN0ZW0tPnByZWRzKTsKKwkJc3lzdGVtLT5wcmVkcyA9IE5VTEw7CisJfQorCisJZXZlbnRzX2Zvcl9lYWNoKGNhbGwpIHsKKwkJaWYgKCFjYWxsLT5uYW1lIHx8ICFjYWxsLT5yZWdmdW5jKQorCQkJY29udGludWU7CisKKwkJaWYgKCFzdHJjbXAoY2FsbC0+c3lzdGVtLCBzeXN0ZW0tPm5hbWUpKQorCQkJZmlsdGVyX2ZyZWVfcHJlZHMoY2FsbCk7CisJfQorfQorCitzdGF0aWMgaW50IF9fZmlsdGVyX2FkZF9wcmVkKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwKKwkJCSAgICAgc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKQoreworCWludCBpOworCisJaWYgKGNhbGwtPnByZWRzICYmICFwcmVkLT5jb21wb3VuZCkKKwkJZmlsdGVyX2ZyZWVfcHJlZHMoY2FsbCk7CisKKwlpZiAoIWNhbGwtPnByZWRzKSB7CisJCWNhbGwtPnByZWRzID0ga3phbGxvYyhNQVhfRklMVEVSX1BSRUQgKiBzaXplb2YocHJlZCksCisJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghY2FsbC0+cHJlZHMpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZJTFRFUl9QUkVEOyBpKyspIHsKKwkJaWYgKCFjYWxsLT5wcmVkc1tpXSkgeworCQkJY2FsbC0+cHJlZHNbaV0gPSBwcmVkOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBpc19zdHJpbmdfZmllbGQoY29uc3QgY2hhciAqdHlwZSkKK3sKKwlpZiAoc3RyY2hyKHR5cGUsICdbJykgJiYgc3Ryc3RyKHR5cGUsICJjaGFyIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBmaWx0ZXJfYWRkX3ByZWQoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsLCBzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQpCit7CisJc3RydWN0IGZ0cmFjZV9ldmVudF9maWVsZCAqZmllbGQ7CisKKwlmaWVsZCA9IGZpbmRfZXZlbnRfZmllbGQoY2FsbCwgcHJlZC0+ZmllbGRfbmFtZSk7CisJaWYgKCFmaWVsZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcmVkLT5vZmZzZXQgPSBmaWVsZC0+b2Zmc2V0OworCisJaWYgKGlzX3N0cmluZ19maWVsZChmaWVsZC0+dHlwZSkpIHsKKwkJaWYgKCFwcmVkLT5zdHJfdmFsKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXByZWQtPmZuID0gZmlsdGVyX3ByZWRfc3RyaW5nOworCQlwcmVkLT5zdHJfbGVuID0gZmllbGQtPnNpemU7CisJCXJldHVybiBfX2ZpbHRlcl9hZGRfcHJlZChjYWxsLCBwcmVkKTsKKwl9IGVsc2UgeworCQlpZiAocHJlZC0+c3RyX3ZhbCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAoZmllbGQtPnNpemUpIHsKKwljYXNlIDg6CisJCXByZWQtPmZuID0gZmlsdGVyX3ByZWRfNjQ7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJcHJlZC0+Zm4gPSBmaWx0ZXJfcHJlZF8zMjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlwcmVkLT5mbiA9IGZpbHRlcl9wcmVkXzE2OworCQlicmVhazsKKwljYXNlIDE6CisJCXByZWQtPmZuID0gZmlsdGVyX3ByZWRfODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIF9fZmlsdGVyX2FkZF9wcmVkKGNhbGwsIHByZWQpOworfQorCitzdGF0aWMgc3RydWN0IGZpbHRlcl9wcmVkICpjb3B5X3ByZWQoc3RydWN0IGZpbHRlcl9wcmVkICpwcmVkKQoreworCXN0cnVjdCBmaWx0ZXJfcHJlZCAqbmV3X3ByZWQgPSBrbWFsbG9jKHNpemVvZigqcHJlZCksIEdGUF9LRVJORUwpOworCWlmICghbmV3X3ByZWQpCisJCXJldHVybiBOVUxMOworCisJbWVtY3B5KG5ld19wcmVkLCBwcmVkLCBzaXplb2YoKnByZWQpKTsKKworCWlmIChwcmVkLT5maWVsZF9uYW1lKSB7CisJCW5ld19wcmVkLT5maWVsZF9uYW1lID0ga3N0cmR1cChwcmVkLT5maWVsZF9uYW1lLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFuZXdfcHJlZC0+ZmllbGRfbmFtZSkgeworCQkJa2ZyZWUobmV3X3ByZWQpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlpZiAocHJlZC0+c3RyX3ZhbCkgeworCQluZXdfcHJlZC0+c3RyX3ZhbCA9IGtzdHJkdXAocHJlZC0+c3RyX3ZhbCwgR0ZQX0tFUk5FTCk7CisJCWlmICghbmV3X3ByZWQtPnN0cl92YWwpIHsKKwkJCWZpbHRlcl9mcmVlX3ByZWQobmV3X3ByZWQpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlyZXR1cm4gbmV3X3ByZWQ7Cit9CisKK2ludCBmaWx0ZXJfYWRkX3N1YnN5c3RlbV9wcmVkKHN0cnVjdCBldmVudF9zdWJzeXN0ZW0gKnN5c3RlbSwKKwkJCSAgICAgIHN0cnVjdCBmaWx0ZXJfcHJlZCAqcHJlZCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmNhbGwgPSBfX3N0YXJ0X2Z0cmFjZV9ldmVudHM7CisJc3RydWN0IGZpbHRlcl9wcmVkICpldmVudF9wcmVkOworCWludCBpOworCisJaWYgKHN5c3RlbS0+cHJlZHMgJiYgIXByZWQtPmNvbXBvdW5kKQorCQlmaWx0ZXJfZnJlZV9zdWJzeXN0ZW1fcHJlZHMoc3lzdGVtKTsKKworCWlmICghc3lzdGVtLT5wcmVkcykgeworCQlzeXN0ZW0tPnByZWRzID0ga3phbGxvYyhNQVhfRklMVEVSX1BSRUQgKiBzaXplb2YocHJlZCksCisJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIXN5c3RlbS0+cHJlZHMpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZJTFRFUl9QUkVEOyBpKyspIHsKKwkJaWYgKCFzeXN0ZW0tPnByZWRzW2ldKSB7CisJCQlzeXN0ZW0tPnByZWRzW2ldID0gcHJlZDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gTUFYX0ZJTFRFUl9QUkVEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWV2ZW50c19mb3JfZWFjaChjYWxsKSB7CisJCWludCBlcnI7CisKKwkJaWYgKCFjYWxsLT5uYW1lIHx8ICFjYWxsLT5yZWdmdW5jKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0cmNtcChjYWxsLT5zeXN0ZW0sIHN5c3RlbS0+bmFtZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoIWZpbmRfZXZlbnRfZmllbGQoY2FsbCwgcHJlZC0+ZmllbGRfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlldmVudF9wcmVkID0gY29weV9wcmVkKHByZWQpOworCQlpZiAoIWV2ZW50X3ByZWQpCisJCQlnb3RvIG9vbTsKKworCQllcnIgPSBmaWx0ZXJfYWRkX3ByZWQoY2FsbCwgZXZlbnRfcHJlZCk7CisJCWlmIChlcnIpCisJCQlmaWx0ZXJfZnJlZV9wcmVkKGV2ZW50X3ByZWQpOworCQlpZiAoZXJyID09IC1FTk9NRU0pCisJCQlnb3RvIG9vbTsKKwl9CisKKwlyZXR1cm4gMDsKKworb29tOgorCXN5c3RlbS0+cHJlZHNbaV0gPSBOVUxMOworCXJldHVybiAtRU5PTUVNOworfQorCitpbnQgZmlsdGVyX3BhcnNlKGNoYXIgKipwYnVmLCBzdHJ1Y3QgZmlsdGVyX3ByZWQgKnByZWQpCit7CisJY2hhciAqdG1wLCAqdG9rLCAqdmFsX3N0ciA9IE5VTEw7CisJaW50IHRva19uID0gMDsKKworCS8qIGZpZWxkID09LyE9IG51bWJlciwgb3IvYW5kIGZpZWxkID09LyE9IG51bWJlciwgbnVtYmVyICovCisJd2hpbGUgKCh0b2sgPSBzdHJzZXAocGJ1ZiwgIiBcbiIpKSkgeworCQlpZiAodG9rX24gPT0gMCkgeworCQkJaWYgKCFzdHJjbXAodG9rLCAiMCIpKSB7CisJCQkJcHJlZC0+Y2xlYXIgPSAxOworCQkJCXJldHVybiAwOworCQkJfSBlbHNlIGlmICghc3RyY21wKHRvaywgIiYmIikpIHsKKwkJCQlwcmVkLT5vciA9IDA7CisJCQkJcHJlZC0+Y29tcG91bmQgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKHRvaywgInx8IikpIHsKKwkJCQlwcmVkLT5vciA9IDE7CisJCQkJcHJlZC0+Y29tcG91bmQgPSAxOworCQkJfSBlbHNlCisJCQkJcHJlZC0+ZmllbGRfbmFtZSA9IHRvazsKKwkJCXRva19uID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0b2tfbiA9PSAxKSB7CisJCQlpZiAoIXByZWQtPmZpZWxkX25hbWUpCisJCQkJcHJlZC0+ZmllbGRfbmFtZSA9IHRvazsKKwkJCWVsc2UgaWYgKCFzdHJjbXAodG9rLCAiIT0iKSkKKwkJCQlwcmVkLT5ub3QgPSAxOworCQkJZWxzZSBpZiAoIXN0cmNtcCh0b2ssICI9PSIpKQorCQkJCXByZWQtPm5vdCA9IDA7CisJCQllbHNlIHsKKwkJCQlwcmVkLT5maWVsZF9uYW1lID0gTlVMTDsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXRva19uID0gMjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0b2tfbiA9PSAyKSB7CisJCQlpZiAocHJlZC0+Y29tcG91bmQpIHsKKwkJCQlpZiAoIXN0cmNtcCh0b2ssICIhPSIpKQorCQkJCQlwcmVkLT5ub3QgPSAxOworCQkJCWVsc2UgaWYgKCFzdHJjbXAodG9rLCAiPT0iKSkKKwkJCQkJcHJlZC0+bm90ID0gMDsKKwkJCQllbHNlIHsKKwkJCQkJcHJlZC0+ZmllbGRfbmFtZSA9IE5VTEw7CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJdmFsX3N0ciA9IHRvazsKKwkJCQlicmVhazsgLyogZG9uZSAqLworCQkJfQorCQkJdG9rX24gPSAzOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHRva19uID09IDMpIHsKKwkJCXZhbF9zdHIgPSB0b2s7CisJCQlicmVhazsgLyogZG9uZSAqLworCQl9CisJfQorCisJcHJlZC0+ZmllbGRfbmFtZSA9IGtzdHJkdXAocHJlZC0+ZmllbGRfbmFtZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcmVkLT5maWVsZF9uYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByZWQtPnZhbCA9IHNpbXBsZV9zdHJ0b3VsbCh2YWxfc3RyLCAmdG1wLCAxMCk7CisJaWYgKHRtcCA9PSB2YWxfc3RyKSB7CisJCXByZWQtPnN0cl92YWwgPSBrc3RyZHVwKHZhbF9zdHIsIEdGUF9LRVJORUwpOworCQlpZiAoIXByZWQtPnN0cl92YWwpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3N0YWdlXzEuaCBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfc3RhZ2VfMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OTg1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3N0YWdlXzEuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogU3RhZ2UgMSBvZiB0aGUgdHJhY2UgZXZlbnRzLgorICoKKyAqIE92ZXJyaWRlIHRoZSBtYWNyb3MgaW4gPHRyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmg+IHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKKyAqCisgKiBzdHJ1Y3QgZnRyYWNlX3Jhd188Y2FsbD4geworICoJc3RydWN0IHRyYWNlX2VudHJ5CQllbnQ7CisgKgk8dHlwZT4JCQkJPGl0ZW0+OworICoJPHR5cGUyPgkJCQk8aXRlbTI+WzxsZW4+XTsKKyAqCVsuLi5dCisgKiB9OworICoKKyAqIFRoZSA8dHlwZT4gPGl0ZW0+IGlzIGNyZWF0ZWQgYnkgdGhlIF9fZmllbGQodHlwZSwgaXRlbSkgbWFjcm8gb3IKKyAqIHRoZSBfX2FycmF5KHR5cGUyLCBpdGVtMiwgbGVuKSBtYWNyby4KKyAqIFdlIHNpbXBseSBkbyAidHlwZSBpdGVtOyIsIGFuZCB0aGF0IHdpbGwgY3JlYXRlIHRoZSBmaWVsZHMKKyAqIGluIHRoZSBzdHJ1Y3R1cmUuCisgKi8KKworI3VuZGVmIFRSQUNFX0ZPUk1BVAorI2RlZmluZSBUUkFDRV9GT1JNQVQoY2FsbCwgcHJvdG8sIGFyZ3MsIGZtdCkKKworI3VuZGVmIF9fYXJyYXkKKyNkZWZpbmUgX19hcnJheSh0eXBlLCBpdGVtLCBsZW4pCXR5cGUJaXRlbVtsZW5dOworCisjdW5kZWYgX19maWVsZAorI2RlZmluZSBfX2ZpZWxkKHR5cGUsIGl0ZW0pCQl0eXBlCWl0ZW07CisKKyN1bmRlZiBUUF9TVFJVQ1RfX2VudHJ5CisjZGVmaW5lIFRQX1NUUlVDVF9fZW50cnkoYXJncy4uLikgYXJncworCisjdW5kZWYgVFJBQ0VfRVZFTlQKKyNkZWZpbmUgVFJBQ0VfRVZFTlQobmFtZSwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnQpCVwKKwlzdHJ1Y3QgZnRyYWNlX3Jhd18jI25hbWUgewkJCQlcCisJCXN0cnVjdCB0cmFjZV9lbnRyeQllbnQ7CQkJXAorCQl0c3RydWN0CQkJCQkJXAorCX07CQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50XyMjbmFtZQorCisjaW5jbHVkZSA8dHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfc3RhZ2VfMi5oIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50c19zdGFnZV8yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA3NDNmNwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfc3RhZ2VfMi5oCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogU3RhZ2UgMiBvZiB0aGUgdHJhY2UgZXZlbnRzLgorICoKKyAqIE92ZXJyaWRlIHRoZSBtYWNyb3MgaW4gPHRyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmg+IHRvIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKKyAqCisgKiBlbnVtIHByaW50X2xpbmVfdAorICogZnRyYWNlX3Jhd19vdXRwdXRfPGNhbGw+KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQorICogeworICoJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisgKglzdHJ1Y3QgZnRyYWNlX3Jhd188Y2FsbD4gKmZpZWxkOyA8LS0gZGVmaW5lZCBpbiBzdGFnZSAxCisgKglzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5OworICoJaW50IHJldDsKKyAqCisgKgllbnRyeSA9IGl0ZXItPmVudDsKKyAqCisgKglpZiAoZW50cnktPnR5cGUgIT0gZXZlbnRfPGNhbGw+LmlkKSB7CisgKgkJV0FSTl9PTl9PTkNFKDEpOworICoJCXJldHVybiBUUkFDRV9UWVBFX1VOSEFORExFRDsKKyAqCX0KKyAqCisgKglmaWVsZCA9ICh0eXBlb2YoZmllbGQpKWVudHJ5OworICoKKyAqCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgPFRQX3ByaW50az4gIlxuIik7CisgKglpZiAoIXJldCkKKyAqCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisgKgorICoJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKyAqIH0KKyAqCisgKiBUaGlzIGlzIHRoZSBtZXRob2QgdXNlZCB0byBwcmludCB0aGUgcmF3IGV2ZW50IHRvIHRoZSB0cmFjZQorICogb3V0cHV0IGZvcm1hdC4gTm90ZSwgdGhpcyBpcyBub3QgbmVlZGVkIGlmIHRoZSBkYXRhIGlzIHJlYWQKKyAqIGluIGJpbmFyeS4KKyAqLworCisjdW5kZWYgX19lbnRyeQorI2RlZmluZSBfX2VudHJ5IGZpZWxkCisKKyN1bmRlZiBUUF9wcmludGsKKyNkZWZpbmUgVFBfcHJpbnRrKGZtdCwgYXJncy4uLikgZm10ICJcbiIsIGFyZ3MKKworI3VuZGVmIFRSQUNFX0VWRU5UCisjZGVmaW5lIFRSQUNFX0VWRU5UKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50KQkJXAorZW51bSBwcmludF9saW5lX3QJCQkJCQkJXAorZnRyYWNlX3Jhd19vdXRwdXRfIyNjYWxsKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwkJCQlcCisJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsICpmaWVsZDsJCQkJXAorCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7CQkJCQlcCisJaW50IHJldDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCWVudHJ5ID0gaXRlci0+ZW50OwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoZW50cnktPnR5cGUgIT0gZXZlbnRfIyNjYWxsLmlkKSB7CQkJCVwKKwkJV0FSTl9PTl9PTkNFKDEpOwkJCQkJXAorCQlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7CQkJCVwKKwl9CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJZmllbGQgPSAodHlwZW9mKGZpZWxkKSllbnRyeTsJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICNjYWxsICI6ICIgcHJpbnQpOwkJCVwKKwlpZiAoIXJldCkJCQkJCQkJXAorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CQkJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwkJCQkJXAorfQorCQorI2luY2x1ZGUgPHRyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmg+CisKKy8qCisgKiBTZXR1cCB0aGUgc2hvd2luZyBmb3JtYXQgb2YgdHJhY2UgcG9pbnQuCisgKgorICogaW50CisgKiBmdHJhY2VfZm9ybWF0XyMjY2FsbChzdHJ1Y3QgdHJhY2Vfc2VxICpzKQorICogeworICoJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsIGZpZWxkOworICoJaW50IHJldDsKKyAqCisgKglyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICN0eXBlICIgIiAjaXRlbSAiOyIKKyAqCQkJICAgICAgICIgb2Zmc2V0OiV1OyBzaXplOiV1O1xuIiwKKyAqCQkJICAgICAgIG9mZnNldG9mKHN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCwgaXRlbSksCisgKgkJCSAgICAgICBzaXplb2YoZmllbGQudHlwZSkpOworICoKKyAqIH0KKyAqLworCisjdW5kZWYgVFBfU1RSVUNUX19lbnRyeQorI2RlZmluZSBUUF9TVFJVQ1RfX2VudHJ5KGFyZ3MuLi4pIGFyZ3MKKworI3VuZGVmIF9fZmllbGQKKyNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQkJCQkJXAorCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQ6IiAjdHlwZSAiICIgI2l0ZW0gIjtcdCIJXAorCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1xuIiwJCVwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLCBcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQuaXRlbSkpOwlcCisJaWYgKCFyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIDA7CisKKyN1bmRlZiBfX2FycmF5CisjZGVmaW5lIF9fYXJyYXkodHlwZSwgaXRlbSwgbGVuKQkJCQkJCVwKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICJbIiAjbGVuICJdO1x0IglcCisJCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6JXU7XG4iLAkJXAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSksIFwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXNpemVvZihmaWVsZC5pdGVtKSk7CVwKKwlpZiAoIXJldCkJCQkJCQkJXAorCQlyZXR1cm4gMDsKKworI3VuZGVmIF9fZW50cnkKKyNkZWZpbmUgX19lbnRyeSAiUkVDIgorCisjdW5kZWYgVFBfcHJpbnRrCisjZGVmaW5lIFRQX3ByaW50ayhmbXQsIGFyZ3MuLi4pICIlcywgJXNcbiIsICNmbXQsICNhcmdzCisKKyN1bmRlZiBUUF9mYXN0X2Fzc2lnbgorI2RlZmluZSBUUF9mYXN0X2Fzc2lnbihhcmdzLi4uKSBhcmdzCisKKyN1bmRlZiBUUkFDRV9FVkVOVAorI2RlZmluZSBUUkFDRV9FVkVOVChjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgZnVuYywgcHJpbnQpCQlcCitzdGF0aWMgaW50CQkJCQkJCQlcCitmdHJhY2VfZm9ybWF0XyMjY2FsbChzdHJ1Y3QgdHJhY2Vfc2VxICpzKQkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCBmaWVsZDsJCQkJCVwKKwlpbnQgcmV0OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJdHN0cnVjdDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiAiIHByaW50KTsJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHJldDsJCQkJCQkJXAorfQorCisjaW5jbHVkZSA8dHJhY2UvdHJhY2VfZXZlbnRfdHlwZXMuaD4KKworI3VuZGVmIF9fZmllbGQKKyNkZWZpbmUgX19maWVsZCh0eXBlLCBpdGVtKQkJCQkJCVwKKwlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUsICNpdGVtLAkJXAorCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKKwkJCQkgc2l6ZW9mKGZpZWxkLml0ZW0pKTsJCQlcCisJaWYgKHJldCkJCQkJCQkJXAorCQlyZXR1cm4gcmV0OworCisjdW5kZWYgX19hcnJheQorI2RlZmluZSBfX2FycmF5KHR5cGUsIGl0ZW0sIGxlbikJCQkJCVwKKwlyZXQgPSB0cmFjZV9kZWZpbmVfZmllbGQoZXZlbnRfY2FsbCwgI3R5cGUgIlsiICNsZW4gIl0iLCAjaXRlbSwJXAorCQkJCSBvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwJCVwKKwkJCQkgc2l6ZW9mKGZpZWxkLml0ZW0pKTsJCQlcCisJaWYgKHJldCkJCQkJCQkJXAorCQlyZXR1cm4gcmV0OworCisjZGVmaW5lIF9fY29tbW9uX2ZpZWxkKHR5cGUsIGl0ZW0pCQkJCQlcCisJcmV0ID0gdHJhY2VfZGVmaW5lX2ZpZWxkKGV2ZW50X2NhbGwsICN0eXBlLCAiY29tbW9uXyIgI2l0ZW0sCVwKKwkJCQkgb2Zmc2V0b2YodHlwZW9mKGZpZWxkLmVudCksIGl0ZW0pLAlcCisJCQkJIHNpemVvZihmaWVsZC5lbnQuaXRlbSkpOwkJXAorCWlmIChyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIHJldDsKKworI3VuZGVmIFRSQUNFX0VWRU5UCisjZGVmaW5lIFRSQUNFX0VWRU5UKGNhbGwsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBmdW5jLCBwcmludCkJCVwKK2ludAkJCQkJCQkJCVwKK2Z0cmFjZV9kZWZpbmVfZmllbGRzXyMjY2FsbCh2b2lkKQkJCQkJXAorewkJCQkJCQkJCVwKKwlzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwgZmllbGQ7CQkJCQlcCisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpldmVudF9jYWxsID0gJmV2ZW50XyMjY2FsbDsJCVwKKwlpbnQgcmV0OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJX19jb21tb25fZmllbGQodW5zaWduZWQgY2hhciwgdHlwZSk7CQkJCVwKKwlfX2NvbW1vbl9maWVsZCh1bnNpZ25lZCBjaGFyLCBmbGFncyk7CQkJCVwKKwlfX2NvbW1vbl9maWVsZCh1bnNpZ25lZCBjaGFyLCBwcmVlbXB0X2NvdW50KTsJCQlcCisJX19jb21tb25fZmllbGQoaW50LCBwaWQpOwkJCQkJXAorCV9fY29tbW9uX2ZpZWxkKGludCwgdGdpZCk7CQkJCQlcCisJCQkJCQkJCQlcCisJdHN0cnVjdDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30KKworI2luY2x1ZGUgPHRyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3N0YWdlXzMuaCBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHNfc3RhZ2VfMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMmZhNzgKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzX3N0YWdlXzMuaApAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIFN0YWdlIDMgb2YgdGhlIHRyYWNlIGV2ZW50cy4KKyAqCisgKiBPdmVycmlkZSB0aGUgbWFjcm9zIGluIDx0cmFjZS90cmFjZV9ldmVudF90eXBlcy5oPiB0byBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisgKgorICogc3RhdGljIHZvaWQgZnRyYWNlX2V2ZW50XzxjYWxsPihwcm90bykKKyAqIHsKKyAqCWV2ZW50X3RyYWNlX3ByaW50ayhfUkVUX0lQXywgIjxjYWxsPjogIiA8Zm10Pik7CisgKiB9CisgKgorICogc3RhdGljIGludCBmdHJhY2VfcmVnX2V2ZW50XzxjYWxsPih2b2lkKQorICogeworICoJaW50IHJldDsKKyAqCisgKglyZXQgPSByZWdpc3Rlcl90cmFjZV88Y2FsbD4oZnRyYWNlX2V2ZW50XzxjYWxsPik7CisgKglpZiAoIXJldCkKKyAqCQlwcl9pbmZvKCJldmVudCB0cmFjZTogQ291bGQgbm90IGFjdGl2YXRlIHRyYWNlIHBvaW50ICIKKyAqCQkJInByb2JlIHRvICA8Y2FsbD4iKTsKKyAqCXJldHVybiByZXQ7CisgKiB9CisgKgorICogc3RhdGljIHZvaWQgZnRyYWNlX3VucmVnX2V2ZW50XzxjYWxsPih2b2lkKQorICogeworICoJdW5yZWdpc3Rlcl90cmFjZV88Y2FsbD4oZnRyYWNlX2V2ZW50XzxjYWxsPik7CisgKiB9CisgKgorICogRm9yIHRob3NlIG1hY3JvcyBkZWZpbmVkIHdpdGggVFJBQ0VfRk9STUFUOgorICoKKyAqIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCisgKiBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCisgKiBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgZXZlbnRfPGNhbGw+ID0geworICoJLm5hbWUJCQk9ICI8Y2FsbD4iLAorICoJLnJlZ2Z1bmMJCT0gZnRyYWNlX3JlZ19ldmVudF88Y2FsbD4sCisgKgkudW5yZWdmdW5jCQk9IGZ0cmFjZV91bnJlZ19ldmVudF88Y2FsbD4sCisgKiB9CisgKgorICoKKyAqIEZvciB0aG9zZSBtYWNyb3MgZGVmaW5lZCB3aXRoIFRSQUNFX0VWRU5UOgorICoKKyAqIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfPGNhbGw+OworICoKKyAqIHN0YXRpYyB2b2lkIGZ0cmFjZV9yYXdfZXZlbnRfPGNhbGw+KHByb3RvKQorICogeworICoJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKyAqCXN0cnVjdCBmdHJhY2VfcmF3XzxjYWxsPiAqZW50cnk7IDwtLSBkZWZpbmVkIGluIHN0YWdlIDEKKyAqCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworICoJaW50IHBjOworICoKKyAqCWxvY2FsX3NhdmVfZmxhZ3MoaXJxX2ZsYWdzKTsKKyAqCXBjID0gcHJlZW1wdF9jb3VudCgpOworICoKKyAqCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKGV2ZW50XzxjYWxsPi5pZCwKKyAqCQkJCSAgc2l6ZW9mKHN0cnVjdCBmdHJhY2VfcmF3XzxjYWxsPiksCisgKgkJCQkgIGlycV9mbGFncywgcGMpOworICoJaWYgKCFldmVudCkKKyAqCQlyZXR1cm47CisgKgllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOworICoKKyAqCTxhc3NpZ24+OyAgPC0tIEhlcmUgd2UgYXNzaWduIHRoZSBlbnRyaWVzIGJ5IHRoZSBfX2ZpZWxkIGFuZAorICoJCQlfX2FycmF5IG1hY3Jvcy4KKyAqCisgKgl0cmFjZV9jdXJyZW50X2J1ZmZlcl91bmxvY2tfY29tbWl0KGV2ZW50LCBpcnFfZmxhZ3MsIHBjKTsKKyAqIH0KKyAqCisgKiBzdGF0aWMgaW50IGZ0cmFjZV9yYXdfcmVnX2V2ZW50XzxjYWxsPih2b2lkKQorICogeworICoJaW50IHJldDsKKyAqCisgKglyZXQgPSByZWdpc3Rlcl90cmFjZV88Y2FsbD4oZnRyYWNlX3Jhd19ldmVudF88Y2FsbD4pOworICoJaWYgKCFyZXQpCisgKgkJcHJfaW5mbygiZXZlbnQgdHJhY2U6IENvdWxkIG5vdCBhY3RpdmF0ZSB0cmFjZSBwb2ludCAiCisgKgkJCSJwcm9iZSB0byA8Y2FsbD4iKTsKKyAqCXJldHVybiByZXQ7CisgKiB9CisgKgorICogc3RhdGljIHZvaWQgZnRyYWNlX3VucmVnX2V2ZW50XzxjYWxsPih2b2lkKQorICogeworICoJdW5yZWdpc3Rlcl90cmFjZV88Y2FsbD4oZnRyYWNlX3Jhd19ldmVudF88Y2FsbD4pOworICogfQorICoKKyAqIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgZnRyYWNlX2V2ZW50X3R5cGVfPGNhbGw+ID0geworICoJLnRyYWNlCQkJPSBmdHJhY2VfcmF3X291dHB1dF88Y2FsbD4sIDwtLSBzdGFnZSAyCisgKiB9OworICoKKyAqIHN0YXRpYyBpbnQgZnRyYWNlX3Jhd19pbml0X2V2ZW50XzxjYWxsPih2b2lkKQorICogeworICoJaW50IGlkOworICoKKyAqCWlkID0gcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KCZmdHJhY2VfZXZlbnRfdHlwZV88Y2FsbD4pOworICoJaWYgKCFpZCkKKyAqCQlyZXR1cm4gLUVOT0RFVjsKKyAqCWV2ZW50XzxjYWxsPi5pZCA9IGlkOworICoJcmV0dXJuIDA7CisgKiB9CisgKgorICogc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQKKyAqIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkKKyAqIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF88Y2FsbD4gPSB7CisgKgkubmFtZQkJCT0gIjxjYWxsPiIsCisgKgkuc3lzdGVtCQkJPSAiPHN5c3RlbT4iLAorICoJLnJhd19pbml0CQk9IGZ0cmFjZV9yYXdfaW5pdF9ldmVudF88Y2FsbD4sCisgKgkucmVnZnVuYwkJPSBmdHJhY2VfcmVnX2V2ZW50XzxjYWxsPiwKKyAqCS51bnJlZ2Z1bmMJCT0gZnRyYWNlX3VucmVnX2V2ZW50XzxjYWxsPiwKKyAqCS5zaG93X2Zvcm1hdAkJPSBmdHJhY2VfZm9ybWF0XzxjYWxsPiwKKyAqIH0KKyAqCisgKi8KKworI3VuZGVmIFRQX0ZNVAorI2RlZmluZSBUUF9GTVQoZm10LCBhcmdzLi4uKQlmbXQgIlxuIiwgIyNhcmdzCisKKyNpZmRlZiBDT05GSUdfRVZFTlRfUFJPRklMRQorI2RlZmluZSBfVFJBQ0VfUFJPRklMRShjYWxsLCBwcm90bywgYXJncykJCQkJXAorc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfIyNjYWxsKHByb3RvKQkJCQlcCit7CQkJCQkJCQkJXAorCWV4dGVybiB2b2lkIHBlcmZfdHBjb3VudGVyX2V2ZW50KGludCk7CQkJCVwKKwlwZXJmX3RwY291bnRlcl9ldmVudChldmVudF8jI2NhbGwuaWQpOwkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGludCBmdHJhY2VfcHJvZmlsZV9lbmFibGVfIyNjYWxsKHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCkgXAorewkJCQkJCQkJCVwKKwlpbnQgcmV0ID0gMDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCWlmICghYXRvbWljX2luY19yZXR1cm4oJmNhbGwtPnByb2ZpbGVfY291bnQpKQkJCVwKKwkJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9wcm9maWxlXyMjY2FsbCk7CVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHZvaWQgZnRyYWNlX3Byb2ZpbGVfZGlzYWJsZV8jI2NhbGwoc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsKSBcCit7CQkJCQkJCQkJXAorCWlmIChhdG9taWNfYWRkX25lZ2F0aXZlKC0xLCAmY2FsbC0+cHJvZmlsZV9jb3VudCkpCQlcCisJCXVucmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9wcm9maWxlXyMjY2FsbCk7CQlcCit9CisKKyNkZWZpbmUgX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQkJCQkJXAorCS5wcm9maWxlX2NvdW50ID0gQVRPTUlDX0lOSVQoLTEpLAkJCQlcCisJLnByb2ZpbGVfZW5hYmxlID0gZnRyYWNlX3Byb2ZpbGVfZW5hYmxlXyMjY2FsbCwJCQlcCisJLnByb2ZpbGVfZGlzYWJsZSA9IGZ0cmFjZV9wcm9maWxlX2Rpc2FibGVfIyNjYWxsLAorCisjZWxzZQorI2RlZmluZSBfVFJBQ0VfUFJPRklMRShjYWxsLCBwcm90bywgYXJncykKKyNkZWZpbmUgX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQorI2VuZGlmCisKKyNkZWZpbmUgX1RSQUNFX0ZPUk1BVChjYWxsLCBwcm90bywgYXJncywgZm10KQkJCQlcCitzdGF0aWMgdm9pZCBmdHJhY2VfZXZlbnRfIyNjYWxsKHByb3RvKQkJCQkJXAorewkJCQkJCQkJCVwKKwlldmVudF90cmFjZV9wcmludGsoX1JFVF9JUF8sICNjYWxsICI6ICIgZm10KTsJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGludCBmdHJhY2VfcmVnX2V2ZW50XyMjY2FsbCh2b2lkKQkJCQlcCit7CQkJCQkJCQkJXAorCWludCByZXQ7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX2V2ZW50XyMjY2FsbCk7CQlcCisJaWYgKHJldCkJCQkJCQkJXAorCQlwcl9pbmZvKCJldmVudCB0cmFjZTogQ291bGQgbm90IGFjdGl2YXRlIHRyYWNlIHBvaW50ICIJXAorCQkJInByb2JlIHRvICIgI2NhbGwgIlxuIik7CQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgdm9pZCBmdHJhY2VfdW5yZWdfZXZlbnRfIyNjYWxsKHZvaWQpCQkJCVwKK3sJCQkJCQkJCQlcCisJdW5yZWdpc3Rlcl90cmFjZV8jI2NhbGwoZnRyYWNlX2V2ZW50XyMjY2FsbCk7CQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgZXZlbnRfIyNjYWxsOwkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW50IGZ0cmFjZV9pbml0X2V2ZW50XyMjY2FsbCh2b2lkKQkJCQlcCit7CQkJCQkJCQkJXAorCWludCBpZDsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudChOVUxMKTsJCQkJXAorCWlmICghaWQpCQkJCQkJCVwKKwkJcmV0dXJuIC1FTk9ERVY7CQkJCQkJXAorCWV2ZW50XyMjY2FsbC5pZCA9IGlkOwkJCQkJCVwKKwlyZXR1cm4gMDsJCQkJCQkJXAorfQorCisjdW5kZWYgVFJBQ0VfRk9STUFUCisjZGVmaW5lIFRSQUNFX0ZPUk1BVChjYWxsLCBwcm90bywgYXJncywgZm10KQkJCQlcCitfVFJBQ0VfRk9STUFUKGNhbGwsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSwgUEFSQU1TKGZtdCkpCQlcCitfVFJBQ0VfUFJPRklMRShjYWxsLCBQQVJBTVMocHJvdG8pLCBQQVJBTVMoYXJncykpCQkJXAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJCVwKK19fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkJCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgZXZlbnRfIyNjYWxsID0gewkJXAorCS5uYW1lCQkJPSAjY2FsbCwJCQkJXAorCS5zeXN0ZW0JCQk9IF9fc3RyaW5naWZ5KFRSQUNFX1NZU1RFTSksCQlcCisJLnJhd19pbml0CQk9IGZ0cmFjZV9pbml0X2V2ZW50XyMjY2FsbCwJCVwKKwkucmVnZnVuYwkJPSBmdHJhY2VfcmVnX2V2ZW50XyMjY2FsbCwJCVwKKwkudW5yZWdmdW5jCQk9IGZ0cmFjZV91bnJlZ19ldmVudF8jI2NhbGwsCQlcCisJX1RSQUNFX1BST0ZJTEVfSU5JVChjYWxsKQkJCQkJXAorfQorCisjdW5kZWYgX19lbnRyeQorI2RlZmluZSBfX2VudHJ5IGVudHJ5CisKKyN1bmRlZiBUUkFDRV9FVkVOVAorI2RlZmluZSBUUkFDRV9FVkVOVChjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJCVwKK19UUkFDRV9QUk9GSUxFKGNhbGwsIFBBUkFNUyhwcm90byksIFBBUkFNUyhhcmdzKSkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50XyMjY2FsbDsJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIHZvaWQgZnRyYWNlX3Jhd19ldmVudF8jI2NhbGwocHJvdG8pCQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsICpjYWxsID0gJmV2ZW50XyMjY2FsbDsJCQlcCisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsJCQkJXAorCXN0cnVjdCBmdHJhY2VfcmF3XyMjY2FsbCAqZW50cnk7CQkJCVwKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsJCQkJCVwKKwlpbnQgcGM7CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJbG9jYWxfc2F2ZV9mbGFncyhpcnFfZmxhZ3MpOwkJCQkJXAorCXBjID0gcHJlZW1wdF9jb3VudCgpOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZShldmVudF8jI2NhbGwuaWQsCVwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgZnRyYWNlX3Jhd18jI2NhbGwpLAlcCisJCQkJICBpcnFfZmxhZ3MsIHBjKTsJCQlcCisJaWYgKCFldmVudCkJCQkJCQkJXAorCQlyZXR1cm47CQkJCQkJCVwKKwllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwkJCVwKKwkJCQkJCQkJCVwKKwlhc3NpZ247CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJaWYgKGNhbGwtPnByZWRzICYmICFmaWx0ZXJfbWF0Y2hfcHJlZHMoY2FsbCwgZW50cnkpKQkJXAorCQlyaW5nX2J1ZmZlcl9ldmVudF9kaXNjYXJkKGV2ZW50KTsJCQlcCisJCQkJCQkJCQlcCisJdHJhY2Vfbm93YWtlX2J1ZmZlcl91bmxvY2tfY29tbWl0KGV2ZW50LCBpcnFfZmxhZ3MsIHBjKTsJXAorCQkJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbnQgZnRyYWNlX3Jhd19yZWdfZXZlbnRfIyNjYWxsKHZvaWQpCQkJCVwKK3sJCQkJCQkJCQlcCisJaW50IHJldDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXJldCA9IHJlZ2lzdGVyX3RyYWNlXyMjY2FsbChmdHJhY2VfcmF3X2V2ZW50XyMjY2FsbCk7CQlcCisJaWYgKHJldCkJCQkJCQkJXAorCQlwcl9pbmZvKCJldmVudCB0cmFjZTogQ291bGQgbm90IGFjdGl2YXRlIHRyYWNlIHBvaW50ICIJXAorCQkJInByb2JlIHRvICIgI2NhbGwgIlxuIik7CQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgdm9pZCBmdHJhY2VfcmF3X3VucmVnX2V2ZW50XyMjY2FsbCh2b2lkKQkJCQlcCit7CQkJCQkJCQkJXAorCXVucmVnaXN0ZXJfdHJhY2VfIyNjYWxsKGZ0cmFjZV9yYXdfZXZlbnRfIyNjYWxsKTsJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IGZ0cmFjZV9ldmVudF90eXBlXyMjY2FsbCA9IHsJCQlcCisJLnRyYWNlCQkJPSBmdHJhY2VfcmF3X291dHB1dF8jI2NhbGwsCQlcCit9OwkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBpbnQgZnRyYWNlX3Jhd19pbml0X2V2ZW50XyMjY2FsbCh2b2lkKQkJCQlcCit7CQkJCQkJCQkJXAorCWludCBpZDsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgmZnRyYWNlX2V2ZW50X3R5cGVfIyNjYWxsKTsJCVwKKwlpZiAoIWlkKQkJCQkJCQlcCisJCXJldHVybiAtRU5PREVWOwkJCQkJCVwKKwlldmVudF8jI2NhbGwuaWQgPSBpZDsJCQkJCQlcCisJSU5JVF9MSVNUX0hFQUQoJmV2ZW50XyMjY2FsbC5maWVsZHMpOwkJCQlcCisJcmV0dXJuIDA7CQkJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJXAorX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF8jI2NhbGwgPSB7CQlcCisJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCisJLnN5c3RlbQkJCT0gX19zdHJpbmdpZnkoVFJBQ0VfU1lTVEVNKSwJCVwKKwkucmF3X2luaXQJCT0gZnRyYWNlX3Jhd19pbml0X2V2ZW50XyMjY2FsbCwJCVwKKwkucmVnZnVuYwkJPSBmdHJhY2VfcmF3X3JlZ19ldmVudF8jI2NhbGwsCQlcCisJLnVucmVnZnVuYwkJPSBmdHJhY2VfcmF3X3VucmVnX2V2ZW50XyMjY2FsbCwJXAorCS5zaG93X2Zvcm1hdAkJPSBmdHJhY2VfZm9ybWF0XyMjY2FsbCwJCQlcCisJLmRlZmluZV9maWVsZHMJCT0gZnRyYWNlX2RlZmluZV9maWVsZHNfIyNjYWxsLAkJXAorCV9UUkFDRV9QUk9GSUxFX0lOSVQoY2FsbCkJCQkJCVwKK30KKworI2luY2x1ZGUgPHRyYWNlL3RyYWNlX2V2ZW50X3R5cGVzLmg+CisKKyN1bmRlZiBfVFJBQ0VfUFJPRklMRQorI3VuZGVmIF9UUkFDRV9QUk9GSUxFX0lOSVQKKwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkOTk1MmQKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiB0cmFjZV9leHBvcnQuYyAtIGV4cG9ydCBiYXNpYyBmdHJhY2UgdXRpbGl0aWVzIHRvIHVzZXIgc3BhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU3RldmVuIFJvc3RlZHQgPHNyb3N0ZWR0QHJlZGhhdC5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgorCisKKyN1bmRlZiBUUkFDRV9TVFJVQ1QKKyNkZWZpbmUgVFJBQ0VfU1RSVUNUKGFyZ3MuLi4pIGFyZ3MKKworI3VuZGVmIFRSQUNFX0ZJRUxECisjZGVmaW5lIFRSQUNFX0ZJRUxEKHR5cGUsIGl0ZW0sIGFzc2lnbikJCQkJCVwKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJcdGZpZWxkOiIgI3R5cGUgIiAiICNpdGVtICI7XHQiCVwKKwkJCSAgICAgICAib2Zmc2V0OiV1O1x0c2l6ZToldTtcbiIsCQlcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClvZmZzZXRvZih0eXBlb2YoZmllbGQpLCBpdGVtKSwgXAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpc2l6ZW9mKGZpZWxkLml0ZW0pKTsJXAorCWlmICghcmV0KQkJCQkJCQlcCisJCXJldHVybiAwOworCisKKyN1bmRlZiBUUkFDRV9GSUVMRF9TUEVDSUFMCisjZGVmaW5lIFRSQUNFX0ZJRUxEX1NQRUNJQUwodHlwZV9pdGVtLCBpdGVtLCBjbWQpCQkJXAorCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIlx0ZmllbGQgc3BlY2lhbDoiICN0eXBlX2l0ZW0gIjtcdCIJXAorCQkJICAgICAgICJvZmZzZXQ6JXU7XHRzaXplOiV1O1xuIiwJCVwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KW9mZnNldG9mKHR5cGVvZihmaWVsZCksIGl0ZW0pLCBcCisJCQkgICAgICAgKHVuc2lnbmVkIGludClzaXplb2YoZmllbGQuaXRlbSkpOwlcCisJaWYgKCFyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIDA7CisKKyN1bmRlZiBUUkFDRV9GSUVMRF9aRVJPX0NIQVIKKyNkZWZpbmUgVFJBQ0VfRklFTERfWkVST19DSEFSKGl0ZW0pCQkJCQlcCisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXHRmaWVsZDogY2hhciAiICNpdGVtICI7XHQiCQlcCisJCQkgICAgICAgIm9mZnNldDoldTtcdHNpemU6MDtcbiIsCQkJXAorCQkJICAgICAgICh1bnNpZ25lZCBpbnQpb2Zmc2V0b2YodHlwZW9mKGZpZWxkKSwgaXRlbSkpOyBcCisJaWYgKCFyZXQpCQkJCQkJCVwKKwkJcmV0dXJuIDA7CisKKworI3VuZGVmIFRQX1JBV19GTVQKKyNkZWZpbmUgVFBfUkFXX0ZNVChhcmdzLi4uKSBhcmdzCisKKyN1bmRlZiBUUkFDRV9FVkVOVF9GT1JNQVQKKyNkZWZpbmUgVFJBQ0VfRVZFTlRfRk9STUFUKGNhbGwsIHByb3RvLCBhcmdzLCBmbXQsIHRzdHJ1Y3QsIHRwZm10KQlcCitzdGF0aWMgaW50CQkJCQkJCQlcCitmdHJhY2VfZm9ybWF0XyMjY2FsbChzdHJ1Y3QgdHJhY2Vfc2VxICpzKQkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBhcmdzIGZpZWxkOwkJCQkJCVwKKwlpbnQgcmV0OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJdHN0cnVjdDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCXRyYWNlX3NlcV9wcmludGYocywgIlxucHJpbnQgZm10OiBcIiVzXCJcbiIsIHRwZm10KTsJCVwKKwkJCQkJCQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CisKKyNpbmNsdWRlICJ0cmFjZV9ldmVudF90eXBlcy5oIgorCisjdW5kZWYgVFJBQ0VfWkVST19DSEFSCisjZGVmaW5lIFRSQUNFX1pFUk9fQ0hBUihhcmcpCisKKyN1bmRlZiBUUkFDRV9GSUVMRAorI2RlZmluZSBUUkFDRV9GSUVMRCh0eXBlLCBpdGVtLCBhc3NpZ24pXAorCWVudHJ5LT5pdGVtID0gYXNzaWduOworCisjdW5kZWYgVFJBQ0VfRklFTEQKKyNkZWZpbmUgVFJBQ0VfRklFTEQodHlwZSwgaXRlbSwgYXNzaWduKVwKKwllbnRyeS0+aXRlbSA9IGFzc2lnbjsKKworI3VuZGVmIFRQX0NNRAorI2RlZmluZSBUUF9DTUQoY21kLi4uKQljbWQKKworI3VuZGVmIFRSQUNFX0VOVFJZCisjZGVmaW5lIFRSQUNFX0VOVFJZCWVudHJ5CisKKyN1bmRlZiBUUkFDRV9GSUVMRF9TUEVDSUFMCisjZGVmaW5lIFRSQUNFX0ZJRUxEX1NQRUNJQUwodHlwZV9pdGVtLCBpdGVtLCBjbWQpIFwKKwljbWQ7CisKKyN1bmRlZiBUUkFDRV9FVkVOVF9GT1JNQVQKKyNkZWZpbmUgVFJBQ0VfRVZFTlRfRk9STUFUKGNhbGwsIHByb3RvLCBhcmdzLCBmbXQsIHRzdHJ1Y3QsIHRwZm10KQlcCisJCQkJCQkJCQlcCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJXAorX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF8jI2NhbGwgPSB7CQlcCisJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCisJLmlkCQkJPSBwcm90bywJCQkJXAorCS5zeXN0ZW0JCQk9IF9fc3RyaW5naWZ5KFRSQUNFX1NZU1RFTSksCQlcCisJLnNob3dfZm9ybWF0CQk9IGZ0cmFjZV9mb3JtYXRfIyNjYWxsLAkJCVwKK30KKyNpbmNsdWRlICJ0cmFjZV9ldmVudF90eXBlcy5oIgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jCmluZGV4IDkyMzZkN2UuLmM5YTBiN2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMKQEAgLTksNiArOSw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgSW5nbyBNb2xuYXIKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgV2lsbGlhbSBMZWUgSXJ3aW4gSUlJCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9yaW5nX2J1ZmZlci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CkBAIC0xNiwzMSArMTcsMjkgQEAKIAogI2luY2x1ZGUgInRyYWNlLmgiCiAKLXN0YXRpYyB2b2lkIHN0YXJ0X2Z1bmN0aW9uX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCisvKiBmdW5jdGlvbiB0cmFjaW5nIGVuYWJsZWQgKi8KK3N0YXRpYyBpbnQJCQlmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZDsKKworc3RhdGljIHN0cnVjdCB0cmFjZV9hcnJheQkqZnVuY190cmFjZTsKKworc3RhdGljIHZvaWQgdHJhY2luZ19zdGFydF9mdW5jdGlvbl90cmFjZSh2b2lkKTsKK3N0YXRpYyB2b2lkIHRyYWNpbmdfc3RvcF9mdW5jdGlvbl90cmFjZSh2b2lkKTsKKworc3RhdGljIGludCBmdW5jdGlvbl90cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CisJZnVuY190cmFjZSA9IHRyOwogCXRyLT5jcHUgPSBnZXRfY3B1KCk7Ci0JdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7CiAJcHV0X2NwdSgpOwogCiAJdHJhY2luZ19zdGFydF9jbWRsaW5lX3JlY29yZCgpOwogCXRyYWNpbmdfc3RhcnRfZnVuY3Rpb25fdHJhY2UoKTsKLX0KLQotc3RhdGljIHZvaWQgc3RvcF9mdW5jdGlvbl90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXRyYWNpbmdfc3RvcF9mdW5jdGlvbl90cmFjZSgpOwotCXRyYWNpbmdfc3RvcF9jbWRsaW5lX3JlY29yZCgpOwotfQotCi1zdGF0aWMgaW50IGZ1bmN0aW9uX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQlzdGFydF9mdW5jdGlvbl90cmFjZSh0cik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGZ1bmN0aW9uX3RyYWNlX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0Jc3RvcF9mdW5jdGlvbl90cmFjZSh0cik7CisJdHJhY2luZ19zdG9wX2Z1bmN0aW9uX3RyYWNlKCk7CisJdHJhY2luZ19zdG9wX2NtZGxpbmVfcmVjb3JkKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ1bmN0aW9uX3RyYWNlX3N0YXJ0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCkBAIC00OCwyMCArNDcsMzU4IEBACiAJdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7CiB9CiAKK3N0YXRpYyB2b2lkCitmdW5jdGlvbl90cmFjZV9jYWxsX3ByZWVtcHRfb25seSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCkKK3sKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gZnVuY190cmFjZTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9uZyBkaXNhYmxlZDsKKwlpbnQgY3B1LCByZXNjaGVkOworCWludCBwYzsKKworCWlmICh1bmxpa2VseSghZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQpKQorCQlyZXR1cm47CisKKwlwYyA9IHByZWVtcHRfY291bnQoKTsKKwlyZXNjaGVkID0gZnRyYWNlX3ByZWVtcHRfZGlzYWJsZSgpOworCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJZGF0YSA9IHRyLT5kYXRhW2NwdV07CisJZGlzYWJsZWQgPSBhdG9taWNfaW5jX3JldHVybigmZGF0YS0+ZGlzYWJsZWQpOworCisJaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkKKwkJdHJhY2VfZnVuY3Rpb24odHIsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CisKKwlhdG9taWNfZGVjKCZkYXRhLT5kaXNhYmxlZCk7CisJZnRyYWNlX3ByZWVtcHRfZW5hYmxlKHJlc2NoZWQpOworfQorCitzdGF0aWMgdm9pZAorZnVuY3Rpb25fdHJhY2VfY2FsbCh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCkKK3sKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gZnVuY190cmFjZTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9uZyBkaXNhYmxlZDsKKwlpbnQgY3B1OworCWludCBwYzsKKworCWlmICh1bmxpa2VseSghZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIE5lZWQgdG8gdXNlIHJhdywgc2luY2UgdGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlCisJICogcmVjdXJzaXZlIHByb3RlY3Rpb24gaXMgcGVyZm9ybWVkLgorCSAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOworCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKTsKKworCWlmIChsaWtlbHkoZGlzYWJsZWQgPT0gMSkpIHsKKwkJcGMgPSBwcmVlbXB0X2NvdW50KCk7CisJCXRyYWNlX2Z1bmN0aW9uKHRyLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcGMpOworCX0KKworCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitmdW5jdGlvbl9zdGFja190cmFjZV9jYWxsKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwKQoreworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBmdW5jX3RyYWNlOworCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb25nIGRpc2FibGVkOworCWludCBjcHU7CisJaW50IHBjOworCisJaWYgKHVubGlrZWx5KCFmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCkpCisJCXJldHVybjsKKworCS8qCisJICogTmVlZCB0byB1c2UgcmF3LCBzaW5jZSB0aGlzIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUKKwkgKiByZWN1cnNpdmUgcHJvdGVjdGlvbiBpcyBwZXJmb3JtZWQuCisJICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJZGF0YSA9IHRyLT5kYXRhW2NwdV07CisJZGlzYWJsZWQgPSBhdG9taWNfaW5jX3JldHVybigmZGF0YS0+ZGlzYWJsZWQpOworCisJaWYgKGxpa2VseShkaXNhYmxlZCA9PSAxKSkgeworCQlwYyA9IHByZWVtcHRfY291bnQoKTsKKwkJdHJhY2VfZnVuY3Rpb24odHIsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CisJCS8qCisJCSAqIHNraXAgb3ZlciA1IGZ1bmNzOgorCQkgKiAgICBfX2Z0cmFjZV90cmFjZV9zdGFjaywKKwkJICogICAgX190cmFjZV9zdGFjaywKKwkJICogICAgZnVuY3Rpb25fc3RhY2tfdHJhY2VfY2FsbAorCQkgKiAgICBmdHJhY2VfbGlzdF9mdW5jCisJCSAqICAgIGZ0cmFjZV9jYWxsCisJCSAqLworCQlfX3RyYWNlX3N0YWNrKHRyLCBmbGFncywgNSwgcGMpOworCX0KKworCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKworc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRyYWNlX29wcyBfX3JlYWRfbW9zdGx5ID0KK3sKKwkuZnVuYyA9IGZ1bmN0aW9uX3RyYWNlX2NhbGwsCit9OworCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfc3RhY2tfb3BzIF9fcmVhZF9tb3N0bHkgPQoreworCS5mdW5jID0gZnVuY3Rpb25fc3RhY2tfdHJhY2VfY2FsbCwKK307CisKKy8qIE91ciB0d28gb3B0aW9ucyAqLworZW51bSB7CisJVFJBQ0VfRlVOQ19PUFRfU1RBQ0sgPSAweDEsCit9OworCitzdGF0aWMgc3RydWN0IHRyYWNlcl9vcHQgZnVuY19vcHRzW10gPSB7CisjaWZkZWYgQ09ORklHX1NUQUNLVFJBQ0UKKwl7IFRSQUNFUl9PUFQoZnVuY19zdGFja190cmFjZSwgVFJBQ0VfRlVOQ19PUFRfU1RBQ0spIH0sCisjZW5kaWYKKwl7IH0gLyogQWx3YXlzIHNldCBhIGxhc3QgZW1wdHkgZW50cnkgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyX2ZsYWdzIGZ1bmNfZmxhZ3MgPSB7CisJLnZhbCA9IDAsIC8qIEJ5IGRlZmF1bHQ6IGFsbCBmbGFncyBkaXNhYmxlZCAqLworCS5vcHRzID0gZnVuY19vcHRzCit9OworCitzdGF0aWMgdm9pZCB0cmFjaW5nX3N0YXJ0X2Z1bmN0aW9uX3RyYWNlKHZvaWQpCit7CisJZnRyYWNlX2Z1bmN0aW9uX2VuYWJsZWQgPSAwOworCisJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUkVFTVBUT05MWSkKKwkJdHJhY2Vfb3BzLmZ1bmMgPSBmdW5jdGlvbl90cmFjZV9jYWxsX3ByZWVtcHRfb25seTsKKwllbHNlCisJCXRyYWNlX29wcy5mdW5jID0gZnVuY3Rpb25fdHJhY2VfY2FsbDsKKworCWlmIChmdW5jX2ZsYWdzLnZhbCAmIFRSQUNFX0ZVTkNfT1BUX1NUQUNLKQorCQlyZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX3N0YWNrX29wcyk7CisJZWxzZQorCQlyZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7CisKKwlmdHJhY2VfZnVuY3Rpb25fZW5hYmxlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHRyYWNpbmdfc3RvcF9mdW5jdGlvbl90cmFjZSh2b2lkKQoreworCWZ0cmFjZV9mdW5jdGlvbl9lbmFibGVkID0gMDsKKwkvKiBPSyBpZiB0aGV5IGFyZSBub3QgcmVnaXN0ZXJlZCAqLworCXVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9zdGFja19vcHMpOworCXVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9vcHMpOworfQorCitzdGF0aWMgaW50IGZ1bmNfc2V0X2ZsYWcodTMyIG9sZF9mbGFncywgdTMyIGJpdCwgaW50IHNldCkKK3sKKwlpZiAoYml0ID09IFRSQUNFX0ZVTkNfT1BUX1NUQUNLKSB7CisJCS8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBzZXQgKi8KKwkJaWYgKCEhc2V0ID09ICEhKGZ1bmNfZmxhZ3MudmFsICYgVFJBQ0VfRlVOQ19PUFRfU1RBQ0spKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKHNldCkgeworCQkJdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7CisJCQlyZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX3N0YWNrX29wcyk7CisJCX0gZWxzZSB7CisJCQl1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfc3RhY2tfb3BzKTsKKwkJCXJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfb3BzKTsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCiBzdGF0aWMgc3RydWN0IHRyYWNlciBmdW5jdGlvbl90cmFjZSBfX3JlYWRfbW9zdGx5ID0KIHsKLQkubmFtZQkgICAgID0gImZ1bmN0aW9uIiwKLQkuaW5pdAkgICAgID0gZnVuY3Rpb25fdHJhY2VfaW5pdCwKLQkucmVzZXQJICAgICA9IGZ1bmN0aW9uX3RyYWNlX3Jlc2V0LAotCS5zdGFydAkgICAgID0gZnVuY3Rpb25fdHJhY2Vfc3RhcnQsCisJLm5hbWUJCT0gImZ1bmN0aW9uIiwKKwkuaW5pdAkJPSBmdW5jdGlvbl90cmFjZV9pbml0LAorCS5yZXNldAkJPSBmdW5jdGlvbl90cmFjZV9yZXNldCwKKwkuc3RhcnQJCT0gZnVuY3Rpb25fdHJhY2Vfc3RhcnQsCisJLndhaXRfcGlwZQk9IHBvbGxfd2FpdF9waXBlLAorCS5mbGFncwkJPSAmZnVuY19mbGFncywKKwkuc2V0X2ZsYWcJPSBmdW5jX3NldF9mbGFnLAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKLQkuc2VsZnRlc3QgICAgPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2Z1bmN0aW9uLAorCS5zZWxmdGVzdAk9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfZnVuY3Rpb24sCiAjZW5kaWYKIH07CiAKLXN0YXRpYyBfX2luaXQgaW50IGluaXRfZnVuY3Rpb25fdHJhY2Uodm9pZCkKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKK3N0YXRpYyB2b2lkCitmdHJhY2VfdHJhY2Vvbih1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCwgdm9pZCAqKmRhdGEpCiB7Ci0JcmV0dXJuIHJlZ2lzdGVyX3RyYWNlcigmZnVuY3Rpb25fdHJhY2UpOworCWxvbmcgKmNvdW50ID0gKGxvbmcgKilkYXRhOworCisJaWYgKHRyYWNpbmdfaXNfb24oKSkKKwkJcmV0dXJuOworCisJaWYgKCEqY291bnQpCisJCXJldHVybjsKKworCWlmICgqY291bnQgIT0gLTEpCisJCSgqY291bnQpLS07CisKKwl0cmFjaW5nX29uKCk7CiB9CiAKK3N0YXRpYyB2b2lkCitmdHJhY2VfdHJhY2VvZmYodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXAsIHZvaWQgKipkYXRhKQoreworCWxvbmcgKmNvdW50ID0gKGxvbmcgKilkYXRhOworCisJaWYgKCF0cmFjaW5nX2lzX29uKCkpCisJCXJldHVybjsKKworCWlmICghKmNvdW50KQorCQlyZXR1cm47CisKKwlpZiAoKmNvdW50ICE9IC0xKQorCQkoKmNvdW50KS0tOworCisJdHJhY2luZ19vZmYoKTsKK30KKworc3RhdGljIGludAorZnRyYWNlX3RyYWNlX29ub2ZmX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgdW5zaWduZWQgbG9uZyBpcCwKKwkJCSBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyAqb3BzLCB2b2lkICpkYXRhKTsKKworc3RhdGljIHN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzIHRyYWNlb25fcHJvYmVfb3BzID0geworCS5mdW5jCQkJPSBmdHJhY2VfdHJhY2VvbiwKKwkucHJpbnQJCQk9IGZ0cmFjZV90cmFjZV9vbm9mZl9wcmludCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX3Byb2JlX29wcyB0cmFjZW9mZl9wcm9iZV9vcHMgPSB7CisJLmZ1bmMJCQk9IGZ0cmFjZV90cmFjZW9mZiwKKwkucHJpbnQJCQk9IGZ0cmFjZV90cmFjZV9vbm9mZl9wcmludCwKK307CisKK3N0YXRpYyBpbnQKK2Z0cmFjZV90cmFjZV9vbm9mZl9wcmludChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHVuc2lnbmVkIGxvbmcgaXAsCisJCQkgc3RydWN0IGZ0cmFjZV9wcm9iZV9vcHMgKm9wcywgdm9pZCAqZGF0YSkKK3sKKwljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOworCWxvbmcgY291bnQgPSAobG9uZylkYXRhOworCisJa2FsbHN5bXNfbG9va3VwKGlwLCBOVUxMLCBOVUxMLCBOVUxMLCBzdHIpOworCXNlcV9wcmludGYobSwgIiVzOiIsIHN0cik7CisKKwlpZiAob3BzID09ICZ0cmFjZW9uX3Byb2JlX29wcykKKwkJc2VxX3ByaW50ZihtLCAidHJhY2VvbiIpOworCWVsc2UKKwkJc2VxX3ByaW50ZihtLCAidHJhY2VvZmYiKTsKKworCWlmIChjb3VudCA9PSAtMSkKKwkJc2VxX3ByaW50ZihtLCAiOnVubGltaXRlZFxuIik7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICI6Y291bnQ9JWxkIiwgY291bnQpOworCXNlcV9wdXRjKG0sICdcbicpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Z0cmFjZV90cmFjZV9vbm9mZl91bnJlZyhjaGFyICpnbG9iLCBjaGFyICpjbWQsIGNoYXIgKnBhcmFtKQoreworCXN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHM7CisKKwkvKiB3ZSByZWdpc3RlciBib3RoIHRyYWNlb24gYW5kIHRyYWNlb2ZmIHRvIHRoaXMgY2FsbGJhY2sgKi8KKwlpZiAoc3RyY21wKGNtZCwgInRyYWNlb24iKSA9PSAwKQorCQlvcHMgPSAmdHJhY2Vvbl9wcm9iZV9vcHM7CisJZWxzZQorCQlvcHMgPSAmdHJhY2VvZmZfcHJvYmVfb3BzOworCisJdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb25fcHJvYmVfZnVuYyhnbG9iLCBvcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Z0cmFjZV90cmFjZV9vbm9mZl9jYWxsYmFjayhjaGFyICpnbG9iLCBjaGFyICpjbWQsIGNoYXIgKnBhcmFtLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBmdHJhY2VfcHJvYmVfb3BzICpvcHM7CisJdm9pZCAqY291bnQgPSAodm9pZCAqKS0xOworCWNoYXIgKm51bWJlcjsKKwlpbnQgcmV0OworCisJLyogaGFzaCBmdW5jcyBvbmx5IHdvcmsgd2l0aCBzZXRfZnRyYWNlX2ZpbHRlciAqLworCWlmICghZW5hYmxlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChnbG9iWzBdID09ICchJykKKwkJcmV0dXJuIGZ0cmFjZV90cmFjZV9vbm9mZl91bnJlZyhnbG9iKzEsIGNtZCwgcGFyYW0pOworCisJLyogd2UgcmVnaXN0ZXIgYm90aCB0cmFjZW9uIGFuZCB0cmFjZW9mZiB0byB0aGlzIGNhbGxiYWNrICovCisJaWYgKHN0cmNtcChjbWQsICJ0cmFjZW9uIikgPT0gMCkKKwkJb3BzID0gJnRyYWNlb25fcHJvYmVfb3BzOworCWVsc2UKKwkJb3BzID0gJnRyYWNlb2ZmX3Byb2JlX29wczsKKworCWlmICghcGFyYW0pCisJCWdvdG8gb3V0X3JlZzsKKworCW51bWJlciA9IHN0cnNlcCgmcGFyYW0sICI6Iik7CisKKwlpZiAoIXN0cmxlbihudW1iZXIpKQorCQlnb3RvIG91dF9yZWc7CisKKwkvKgorCSAqIFdlIHVzZSB0aGUgY2FsbGJhY2sgZGF0YSBmaWVsZCAod2hpY2ggaXMgYSBwb2ludGVyKQorCSAqIGFzIG91ciBjb3VudGVyLgorCSAqLworCXJldCA9IHN0cmljdF9zdHJ0b3VsKG51bWJlciwgMCwgKHVuc2lnbmVkIGxvbmcgKikmY291bnQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKyBvdXRfcmVnOgorCXJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbl9wcm9iZShnbG9iLCBvcHMsIGNvdW50KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCBmdHJhY2VfdHJhY2Vvbl9jbWQgPSB7CisJLm5hbWUJCQk9ICJ0cmFjZW9uIiwKKwkuZnVuYwkJCT0gZnRyYWNlX3RyYWNlX29ub2ZmX2NhbGxiYWNrLAorfTsKKworc3RhdGljIHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kIGZ0cmFjZV90cmFjZW9mZl9jbWQgPSB7CisJLm5hbWUJCQk9ICJ0cmFjZW9mZiIsCisJLmZ1bmMJCQk9IGZ0cmFjZV90cmFjZV9vbm9mZl9jYWxsYmFjaywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfZnVuY19jbWRfdHJhY2Vvbih2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl9mdHJhY2VfY29tbWFuZCgmZnRyYWNlX3RyYWNlb2ZmX2NtZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9jb21tYW5kKCZmdHJhY2VfdHJhY2Vvbl9jbWQpOworCWlmIChyZXQpCisJCXVucmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoJmZ0cmFjZV90cmFjZW9mZl9jbWQpOworCXJldHVybiByZXQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaW5pdF9mdW5jX2NtZF90cmFjZW9uKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCisKK3N0YXRpYyBfX2luaXQgaW50IGluaXRfZnVuY3Rpb25fdHJhY2Uodm9pZCkKK3sKKwlpbml0X2Z1bmNfY21kX3RyYWNlb24oKTsKKwlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZmdW5jdGlvbl90cmFjZSk7Cit9CiBkZXZpY2VfaW5pdGNhbGwoaW5pdF9mdW5jdGlvbl90cmFjZSk7CisKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwppbmRleCBkY2U3MWE1Li5kMjg2ODdlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCiAgKiBGdW5jdGlvbiBncmFwaCB0cmFjZXIuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgogICogTW9zdGx5IGJvcnJvd2VkIGZyb20gZnVuY3Rpb24gdHJhY2VyIHdoaWNoCiAgKiBpcyBDb3B5cmlnaHQgKGMpIFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgogICoKQEAgLTEyLDYgKzEyLDEyIEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KIAogI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCisKK3N0cnVjdCBmZ3JhcGhfZGF0YSB7CisJcGlkX3QJCWxhc3RfcGlkOworCWludAkJZGVwdGg7Cit9OwogCiAjZGVmaW5lIFRSQUNFX0dSQVBIX0lOREVOVAkyCiAKQEAgLTIwLDkgKzI2LDExIEBACiAjZGVmaW5lIFRSQUNFX0dSQVBIX1BSSU5UX0NQVQkJMHgyCiAjZGVmaW5lIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJIRUFECTB4NAogI2RlZmluZSBUUkFDRV9HUkFQSF9QUklOVF9QUk9DCQkweDgKKyNkZWZpbmUgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04JMHgxMAorI2RlZmluZSBUUkFDRV9HUkFQSF9QUklOVF9BQlNfVElNRQkwWDIwCiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyX29wdCB0cmFjZV9vcHRzW10gPSB7Ci0JLyogRGlzcGxheSBvdmVycnVucyA/ICovCisJLyogRGlzcGxheSBvdmVycnVucz8gKGZvciBzZWxmLWRlYnVnIHB1cnBvc2UpICovCiAJeyBUUkFDRVJfT1BUKGZ1bmNncmFwaC1vdmVycnVuLCBUUkFDRV9HUkFQSF9QUklOVF9PVkVSUlVOKSB9LAogCS8qIERpc3BsYXkgQ1BVID8gKi8KIAl7IFRSQUNFUl9PUFQoZnVuY2dyYXBoLWNwdSwgVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVKSB9LApAQCAtMzAsMjMgKzM4LDI4IEBACiAJeyBUUkFDRVJfT1BUKGZ1bmNncmFwaC1vdmVyaGVhZCwgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQpIH0sCiAJLyogRGlzcGxheSBwcm9jIG5hbWUvcGlkICovCiAJeyBUUkFDRVJfT1BUKGZ1bmNncmFwaC1wcm9jLCBUUkFDRV9HUkFQSF9QUklOVF9QUk9DKSB9LAorCS8qIERpc3BsYXkgZHVyYXRpb24gb2YgZXhlY3V0aW9uICovCisJeyBUUkFDRVJfT1BUKGZ1bmNncmFwaC1kdXJhdGlvbiwgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04pIH0sCisJLyogRGlzcGxheSBhYnNvbHV0ZSB0aW1lIG9mIGFuIGVudHJ5ICovCisJeyBUUkFDRVJfT1BUKGZ1bmNncmFwaC1hYnN0aW1lLCBUUkFDRV9HUkFQSF9QUklOVF9BQlNfVElNRSkgfSwKIAl7IH0gLyogRW1wdHkgZW50cnkgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyX2ZsYWdzIHRyYWNlcl9mbGFncyA9IHsKIAkvKiBEb24ndCBkaXNwbGF5IG92ZXJydW5zIGFuZCBwcm9jIGJ5IGRlZmF1bHQgKi8KLQkudmFsID0gVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVIHwgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQsCisJLnZhbCA9IFRSQUNFX0dSQVBIX1BSSU5UX0NQVSB8IFRSQUNFX0dSQVBIX1BSSU5UX09WRVJIRUFEIHwKKwkgICAgICAgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04sCiAJLm9wdHMgPSB0cmFjZV9vcHRzCiB9OwogCiAvKiBwaWQgb24gdGhlIGxhc3QgdHJhY2UgcHJvY2Vzc2VkICovCi1zdGF0aWMgcGlkX3QgbGFzdF9waWRbTlJfQ1BVU10gPSB7IFswIC4uLiBOUl9DUFVTLTFdID0gLTEgfTsKKwogCiAvKiBBZGQgYSBmdW5jdGlvbiByZXR1cm4gYWRkcmVzcyB0byB0aGUgdHJhY2Ugc3RhY2sgb24gdGhyZWFkIGluZm8uKi8KIGludAotZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGxvbmcgdGltZSwKLQkJCSB1bnNpZ25lZCBsb25nIGZ1bmMsIGludCAqZGVwdGgpCitmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2UodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgZnVuYywgaW50ICpkZXB0aCkKIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2FsbHRpbWU7CiAJaW50IGluZGV4OwogCiAJaWYgKCFjdXJyZW50LT5yZXRfc3RhY2spCkBAIC01OCwxMSArNzEsMTMgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKKwljYWxsdGltZSA9IHRyYWNlX2Nsb2NrX2xvY2FsKCk7CisKIAlpbmRleCA9ICsrY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7CiAJYmFycmllcigpOwogCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0ID0gcmV0OwogCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uZnVuYyA9IGZ1bmM7Ci0JY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5jYWxsdGltZSA9IHRpbWU7CisJY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5jYWxsdGltZSA9IGNhbGx0aW1lOwogCSpkZXB0aCA9IGluZGV4OwogCiAJcmV0dXJuIDA7CkBAIC0xMDQsNyArMTE5LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJldDsKIAogCWZ0cmFjZV9wb3BfcmV0dXJuX3RyYWNlKCZ0cmFjZSwgJnJldCk7Ci0JdHJhY2UucmV0dGltZSA9IGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwl0cmFjZS5yZXR0aW1lID0gdHJhY2VfY2xvY2tfbG9jYWwoKTsKIAlmdHJhY2VfZ3JhcGhfcmV0dXJuKCZ0cmFjZSk7CiAKIAlpZiAodW5saWtlbHkoIXJldCkpIHsKQEAgLTExOSwxMiArMTM0LDcgQEAKIAogc3RhdGljIGludCBncmFwaF90cmFjZV9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0JaW50IGNwdSwgcmV0OwotCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7Ci0KLQlyZXQgPSByZWdpc3Rlcl9mdHJhY2VfZ3JhcGgoJnRyYWNlX2dyYXBoX3JldHVybiwKKwlpbnQgcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKCZ0cmFjZV9ncmFwaF9yZXR1cm4sCiAJCQkJCSZ0cmFjZV9ncmFwaF9lbnRyeSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTE4NywxNSArMTk3LDE1IEBACiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QKIHByaW50X2dyYXBoX3Byb2Moc3RydWN0IHRyYWNlX3NlcSAqcywgcGlkX3QgcGlkKQogewotCWludCBpOwotCWludCByZXQ7Ci0JaW50IGxlbjsKLQljaGFyIGNvbW1bOF07Ci0JaW50IHNwYWNlcyA9IDA7CisJY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOwogCS8qIHNpZ24gKyBsb2cxMChNQVhfSU5UKSArICdcMCcgKi8KIAljaGFyIHBpZF9zdHJbMTFdOworCWludCBzcGFjZXMgPSAwOworCWludCByZXQ7CisJaW50IGxlbjsKKwlpbnQgaTsKIAotCXN0cm5jcHkoY29tbSwgdHJhY2VfZmluZF9jbWRsaW5lKHBpZCksIDcpOworCXRyYWNlX2ZpbmRfY21kbGluZShwaWQsIGNvbW0pOwogCWNvbW1bN10gPSAnXDAnOwogCXNwcmludGYocGlkX3N0ciwgIiVkIiwgcGlkKTsKIApAQCAtMjI4LDE3ICsyMzgsMjUgQEAKIAogLyogSWYgdGhlIHBpZCBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IHRyYWNlLCBvdXRwdXQgdGhpcyBldmVudCAqLwogc3RhdGljIGVudW0gcHJpbnRfbGluZV90Ci12ZXJpZl9waWQoc3RydWN0IHRyYWNlX3NlcSAqcywgcGlkX3QgcGlkLCBpbnQgY3B1KQordmVyaWZfcGlkKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHBpZF90IHBpZCwgaW50IGNwdSwgc3RydWN0IGZncmFwaF9kYXRhICpkYXRhKQogewogCXBpZF90IHByZXZfcGlkOworCXBpZF90ICpsYXN0X3BpZDsKIAlpbnQgcmV0OwogCi0JaWYgKGxhc3RfcGlkW2NwdV0gIT0gLTEgJiYgbGFzdF9waWRbY3B1XSA9PSBwaWQpCisJaWYgKCFkYXRhKQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwogCi0JcHJldl9waWQgPSBsYXN0X3BpZFtjcHVdOwotCWxhc3RfcGlkW2NwdV0gPSBwaWQ7CisJbGFzdF9waWQgPSAmKHBlcl9jcHVfcHRyKGRhdGEsIGNwdSktPmxhc3RfcGlkKTsKIAorCWlmICgqbGFzdF9waWQgPT0gcGlkKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCisJcHJldl9waWQgPSAqbGFzdF9waWQ7CisJKmxhc3RfcGlkID0gcGlkOworCisJaWYgKHByZXZfcGlkID09IC0xKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwogLyoKICAqIENvbnRleHQtc3dpdGNoIHRyYWNlIGxpbmU6CiAKQEAgLTI1MCwzNCArMjY4LDM0IEBACiAJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAogCQkiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJaWYgKCFyZXQpCi0JCVRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKIAlyZXQgPSBwcmludF9ncmFwaF9jcHUocywgY3B1KTsKIAlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQlUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCiAJcmV0ID0gcHJpbnRfZ3JhcGhfcHJvYyhzLCBwcmV2X3BpZCk7CiAJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAogCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiA9PiAiKTsKIAlpZiAoIXJldCkKLQkJVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAogCXJldCA9IHByaW50X2dyYXBoX3Byb2MocywgcGlkKTsKIAlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQlUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCiAJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAogCQkiXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiIpOwogCWlmICghcmV0KQotCQlUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwogfQogCi1zdGF0aWMgYm9vbAotdHJhY2VfYnJhbmNoX2lzX2xlYWYoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5ICoKK2dldF9yZXR1cm5fZm9yX2xlYWYoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAogCQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqY3VycikKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfaXRlciAqcmluZ19pdGVyOwpAQCAtMjg2LDY1ICszMDQsMTIzIEBACiAKIAlyaW5nX2l0ZXIgPSBpdGVyLT5idWZmZXJfaXRlcltpdGVyLT5jcHVdOwogCi0JaWYgKCFyaW5nX2l0ZXIpCi0JCXJldHVybiBmYWxzZTsKLQotCWV2ZW50ID0gcmluZ19idWZmZXJfaXRlcl9wZWVrKHJpbmdfaXRlciwgTlVMTCk7CisJLyogRmlyc3QgcGVlayB0byBjb21wYXJlIGN1cnJlbnQgZW50cnkgYW5kIHRoZSBuZXh0IG9uZSAqLworCWlmIChyaW5nX2l0ZXIpCisJCWV2ZW50ID0gcmluZ19idWZmZXJfaXRlcl9wZWVrKHJpbmdfaXRlciwgTlVMTCk7CisJZWxzZSB7CisJLyogV2UgbmVlZCB0byBjb25zdW1lIHRoZSBjdXJyZW50IGVudHJ5IHRvIHNlZSB0aGUgbmV4dCBvbmUgKi8KKwkJcmluZ19idWZmZXJfY29uc3VtZShpdGVyLT50ci0+YnVmZmVyLCBpdGVyLT5jcHUsIE5VTEwpOworCQlldmVudCA9IHJpbmdfYnVmZmVyX3BlZWsoaXRlci0+dHItPmJ1ZmZlciwgaXRlci0+Y3B1LAorCQkJCQlOVUxMKTsKKwl9CiAKIAlpZiAoIWV2ZW50KQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCiAJbmV4dCA9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwogCiAJaWYgKG5leHQtPmVudC50eXBlICE9IFRSQUNFX0dSQVBIX1JFVCkKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gTlVMTDsKIAogCWlmIChjdXJyLT5lbnQucGlkICE9IG5leHQtPmVudC5waWQgfHwKIAkJCWN1cnItPmdyYXBoX2VudC5mdW5jICE9IG5leHQtPnJldC5mdW5jKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIHRydWU7CisJLyogdGhpcyBpcyBhIGxlYWYsIG5vdyBhZHZhbmNlIHRoZSBpdGVyYXRvciAqLworCWlmIChyaW5nX2l0ZXIpCisJCXJpbmdfYnVmZmVyX3JlYWQocmluZ19pdGVyLCBOVUxMKTsKKworCXJldHVybiBuZXh0OworfQorCisvKiBTaWduYWwgYSBvdmVyaGVhZCBvZiB0aW1lIGV4ZWN1dGlvbiB0byB0aGUgb3V0cHV0ICovCitzdGF0aWMgaW50CitwcmludF9ncmFwaF9vdmVyaGVhZCh1bnNpZ25lZCBsb25nIGxvbmcgZHVyYXRpb24sIHN0cnVjdCB0cmFjZV9zZXEgKnMpCit7CisJLyogSWYgZHVyYXRpb24gZGlzYXBwZWFyLCB3ZSBkb24ndCBuZWVkIGFueXRoaW5nICovCisJaWYgKCEodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0RVUkFUSU9OKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBOb24gbmVzdGVkIGVudHJ5IG9yIHJldHVybiAqLworCWlmIChkdXJhdGlvbiA9PSAtMSkKKwkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiAgIik7CisKKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJIRUFEKSB7CisJCS8qIER1cmF0aW9uIGV4Y2VlZGVkIDEwMCBtc2VjcyAqLworCQlpZiAoZHVyYXRpb24gPiAxMDAwMDBVTEwpCisJCQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiISAiKTsKKworCQkvKiBEdXJhdGlvbiBleGNlZWRlZCAxMCBtc2VjcyAqLworCQlpZiAoZHVyYXRpb24gPiAxMDAwMFVMTCkKKwkJCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIrICIpOworCX0KKworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICIpOworfQorCitzdGF0aWMgaW50IHByaW50X2dyYXBoX2Fic190aW1lKHU2NCB0LCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQoreworCXVuc2lnbmVkIGxvbmcgdXNlY3NfcmVtOworCisJdXNlY3NfcmVtID0gZG9fZGl2KHQsIE5TRUNfUEVSX1NFQyk7CisJdXNlY3NfcmVtIC89IDEwMDA7CisKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTVsdS4lMDZsdSB8ICAiLAorCQkJKHVuc2lnbmVkIGxvbmcpdCwgdXNlY3NfcmVtKTsKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90Ci1wcmludF9ncmFwaF9pcnEoc3RydWN0IHRyYWNlX3NlcSAqcywgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCWVudW0gdHJhY2VfdHlwZSB0eXBlLCBpbnQgY3B1LCBwaWRfdCBwaWQpCitwcmludF9ncmFwaF9pcnEoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCWVudW0gdHJhY2VfdHlwZSB0eXBlLCBpbnQgY3B1LCBwaWRfdCBwaWQpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKIAogCWlmIChhZGRyIDwgKHVuc2lnbmVkIGxvbmcpX19pcnFlbnRyeV90ZXh0X3N0YXJ0IHx8CiAJCWFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX19pcnFlbnRyeV90ZXh0X2VuZCkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEOwogCi0JaWYgKHR5cGUgPT0gVFJBQ0VfR1JBUEhfRU5UKSB7Ci0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIj09PT09PT09PT0+IHwgICIpOwotCX0gZWxzZSB7Ci0JCS8qIENwdSAqLwotCQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0NQVSkgewotCQkJcmV0ID0gcHJpbnRfZ3JhcGhfY3B1KHMsIGNwdSk7Ci0JCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJfQotCQkvKiBQcm9jICovCi0JCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfUFJPQykgewotCQkJcmV0ID0gcHJpbnRfZ3JhcGhfcHJvYyhzLCBwaWQpOwotCQkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiB8ICIpOwotCQkJaWYgKCFyZXQpCi0JCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCQl9Ci0KLQkJLyogTm8gb3ZlcmhlYWQgKi8KLQkJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRCkgewotCQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAiKTsKLQkJCWlmICghcmV0KQotCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQkJfQotCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIjw9PT09PT09PT09IHxcbiIpOworCS8qIEFic29sdXRlIHRpbWUgKi8KKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0FCU19USU1FKSB7CisJCXJldCA9IHByaW50X2dyYXBoX2Fic190aW1lKGl0ZXItPnRzLCBzKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJfQorCisJLyogQ3B1ICovCisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9DUFUpIHsKKwkJcmV0ID0gcHJpbnRfZ3JhcGhfY3B1KHMsIGNwdSk7CisJCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJfQorCS8qIFByb2MgKi8KKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX1BST0MpIHsKKwkJcmV0ID0gcHJpbnRfZ3JhcGhfcHJvYyhzLCBwaWQpOworCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgfCAiKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJfQorCisJLyogTm8gb3ZlcmhlYWQgKi8KKwlyZXQgPSBwcmludF9ncmFwaF9vdmVyaGVhZCgtMSwgcyk7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCWlmICh0eXBlID09IFRSQUNFX0dSQVBIX0VOVCkKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiPT09PT09PT09PT4iKTsKKwllbHNlCisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIjw9PT09PT09PT09Iik7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogRG9uJ3QgY2xvc2UgdGhlIGR1cmF0aW9uIGNvbHVtbiBpZiBoYXZlbid0IG9uZSAqLworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04pCisJCXRyYWNlX3NlcV9wcmludGYocywgIiB8Iik7CisJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKTsKKwogCWlmICghcmV0KQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKQEAgLTM2Myw3ICs0MzksNyBAQAogCXNwcmludGYobXNlY3Nfc3RyLCAiJWx1IiwgKHVuc2lnbmVkIGxvbmcpIGR1cmF0aW9uKTsKIAogCS8qIFByaW50IG1zZWNzICovCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCBtc2Vjc19zdHIpOworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzIiwgbXNlY3Nfc3RyKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCkBAIC0zOTYsNTIgKzQ3Miw0NyBAQAogCiB9CiAKLS8qIFNpZ25hbCBhIG92ZXJoZWFkIG9mIHRpbWUgZXhlY3V0aW9uIHRvIHRoZSBvdXRwdXQgKi8KLXN0YXRpYyBpbnQKLXByaW50X2dyYXBoX292ZXJoZWFkKHVuc2lnbmVkIGxvbmcgbG9uZyBkdXJhdGlvbiwgc3RydWN0IHRyYWNlX3NlcSAqcykKLXsKLQkvKiBEdXJhdGlvbiBleGNlZWRlZCAxMDAgbXNlY3MgKi8KLQlpZiAoZHVyYXRpb24gPiAxMDAwMDBVTEwpCi0JCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIhICIpOwotCi0JLyogRHVyYXRpb24gZXhjZWVkZWQgMTAgbXNlY3MgKi8KLQlpZiAoZHVyYXRpb24gPiAxMDAwMFVMTCkKLQkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIisgIik7Ci0KLQlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAiKTsKLX0KLQogLyogQ2FzZSBvZiBhIGxlYWYgZnVuY3Rpb24gb24gaXRzIGNhbGwgZW50cnkgKi8KIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAogcHJpbnRfZ3JhcGhfZW50cnlfbGVhZihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCi0JCXN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5ICplbnRyeSwgc3RydWN0IHRyYWNlX3NlcSAqcykKKwkJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgKmVudHJ5LAorCQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldF9lbnRyeSAqcmV0X2VudHJ5LCBzdHJ1Y3QgdHJhY2Vfc2VxICpzKQogewotCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5ICpyZXRfZW50cnk7CisJc3RydWN0IGZncmFwaF9kYXRhICpkYXRhID0gaXRlci0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqZ3JhcGhfcmV0OwotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKmNhbGw7CiAJdW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uOwogCWludCByZXQ7CiAJaW50IGk7CiAKLQlldmVudCA9IHJpbmdfYnVmZmVyX3JlYWQoaXRlci0+YnVmZmVyX2l0ZXJbaXRlci0+Y3B1XSwgTlVMTCk7Ci0JcmV0X2VudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CiAJZ3JhcGhfcmV0ID0gJnJldF9lbnRyeS0+cmV0OwogCWNhbGwgPSAmZW50cnktPmdyYXBoX2VudDsKIAlkdXJhdGlvbiA9IGdyYXBoX3JldC0+cmV0dGltZSAtIGdyYXBoX3JldC0+Y2FsbHRpbWU7CiAKLQkvKiBPdmVyaGVhZCAqLwotCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQpIHsKLQkJcmV0ID0gcHJpbnRfZ3JhcGhfb3ZlcmhlYWQoZHVyYXRpb24sIHMpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKwlpZiAoZGF0YSkgeworCQlpbnQgY3B1ID0gaXRlci0+Y3B1OworCQlpbnQgKmRlcHRoID0gJihwZXJfY3B1X3B0cihkYXRhLCBjcHUpLT5kZXB0aCk7CisKKwkJLyoKKwkJICogQ29tbWVudHMgZGlzcGxheSBhdCArIDEgdG8gZGVwdGguIFNpbmNlCisJCSAqIHRoaXMgaXMgYSBsZWFmIGZ1bmN0aW9uLCBrZWVwIHRoZSBjb21tZW50cworCQkgKiBlcXVhbCB0byB0aGlzIGRlcHRoLgorCQkgKi8KKwkJKmRlcHRoID0gY2FsbC0+ZGVwdGggLSAxOwogCX0KIAotCS8qIER1cmF0aW9uICovCi0JcmV0ID0gcHJpbnRfZ3JhcGhfZHVyYXRpb24oZHVyYXRpb24sIHMpOwotCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCisJLyogT3ZlcmhlYWQgKi8KKwlyZXQgPSBwcmludF9ncmFwaF9vdmVyaGVhZChkdXJhdGlvbiwgcyk7CisJaWYgKCFyZXQpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAorCS8qIER1cmF0aW9uICovCisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9EVVJBVElPTikgeworCQlyZXQgPSBwcmludF9ncmFwaF9kdXJhdGlvbihkdXJhdGlvbiwgcyk7CisJCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJfQorCiAJLyogRnVuY3Rpb24gKi8KIAlmb3IgKGkgPSAwOyBpIDwgY2FsbC0+ZGVwdGggKiBUUkFDRV9HUkFQSF9JTkRFTlQ7IGkrKykgewogCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgIik7CkBAIC00NjEsMzMgKzUzMiwzNCBAQAogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QKLXByaW50X2dyYXBoX2VudHJ5X25lc3RlZChzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqZW50cnksCi0JCQlzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBwaWRfdCBwaWQsIGludCBjcHUpCitwcmludF9ncmFwaF9lbnRyeV9uZXN0ZWQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJIHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50X2VudHJ5ICplbnRyeSwKKwkJCSBzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBpbnQgY3B1KQogewotCWludCBpOwotCWludCByZXQ7CiAJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnQgKmNhbGwgPSAmZW50cnktPmdyYXBoX2VudDsKKwlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBpdGVyLT5wcml2YXRlOworCWludCByZXQ7CisJaW50IGk7CiAKLQkvKiBObyBvdmVyaGVhZCAqLwotCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQpIHsKLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAiKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJaWYgKGRhdGEpIHsKKwkJaW50IGNwdSA9IGl0ZXItPmNwdTsKKwkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YSwgY3B1KS0+ZGVwdGgpOworCisJCSpkZXB0aCA9IGNhbGwtPmRlcHRoOwogCX0KIAotCS8qIEludGVycnVwdCAqLwotCXJldCA9IHByaW50X2dyYXBoX2lycShzLCBjYWxsLT5mdW5jLCBUUkFDRV9HUkFQSF9FTlQsIGNwdSwgcGlkKTsKLQlpZiAocmV0ID09IFRSQUNFX1RZUEVfVU5IQU5ETEVEKSB7Ci0JCS8qIE5vIHRpbWUgKi8KKwkvKiBObyBvdmVyaGVhZCAqLworCXJldCA9IHByaW50X2dyYXBoX292ZXJoZWFkKC0xLCBzKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJLyogTm8gdGltZSAqLworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04pIHsKIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAgICAgICAgICAgfCAgIik7CiAJCWlmICghcmV0KQogCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0gZWxzZSB7Ci0JCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJfQogCi0KIAkvKiBGdW5jdGlvbiAqLwogCWZvciAoaSA9IDA7IGkgPCBjYWxsLT5kZXB0aCAqIFRSQUNFX0dSQVBIX0lOREVOVDsgaSsrKSB7CiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAiKTsKQEAgLTUwMywyMCArNTc1LDQwIEBACiAJaWYgKCFyZXQpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAotCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisJLyoKKwkgKiB3ZSBhbHJlYWR5IGNvbnN1bWVkIHRoZSBjdXJyZW50IGVudHJ5IHRvIGNoZWNrIHRoZSBuZXh0IG9uZQorCSAqIGFuZCBzZWUgaWYgdGhpcyBpcyBhIGxlYWYuCisJICovCisJcmV0dXJuIFRSQUNFX1RZUEVfTk9fQ09OU1VNRTsKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90Ci1wcmludF9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqZmllbGQsIHN0cnVjdCB0cmFjZV9zZXEgKnMsCi0JCQlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBjcHUpCitwcmludF9ncmFwaF9wcm9sb2d1ZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIHN0cnVjdCB0cmFjZV9zZXEgKnMsCisJCSAgICAgaW50IHR5cGUsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlpbnQgcmV0OworCXN0cnVjdCBmZ3JhcGhfZGF0YSAqZGF0YSA9IGl0ZXItPnByaXZhdGU7CiAJc3RydWN0IHRyYWNlX2VudHJ5ICplbnQgPSBpdGVyLT5lbnQ7CisJaW50IGNwdSA9IGl0ZXItPmNwdTsKKwlpbnQgcmV0OwogCiAJLyogUGlkICovCi0JaWYgKHZlcmlmX3BpZChzLCBlbnQtPnBpZCwgY3B1KSA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKKwlpZiAodmVyaWZfcGlkKHMsIGVudC0+cGlkLCBjcHUsIGRhdGEpID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKKwlpZiAodHlwZSkgeworCQkvKiBJbnRlcnJ1cHQgKi8KKwkJcmV0ID0gcHJpbnRfZ3JhcGhfaXJxKGl0ZXIsIGFkZHIsIHR5cGUsIGNwdSwgZW50LT5waWQpOworCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0KKworCS8qIEFic29sdXRlIHRpbWUgKi8KKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0FCU19USU1FKSB7CisJCXJldCA9IHByaW50X2dyYXBoX2Fic190aW1lKGl0ZXItPnRzLCBzKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJfQorCiAJLyogQ3B1ICovCiAJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9DUFUpIHsKIAkJcmV0ID0gcHJpbnRfZ3JhcGhfY3B1KHMsIGNwdSk7CkBAIC01MzUsNTQgKzYyNyw2NSBAQAogCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCX0KIAotCWlmICh0cmFjZV9icmFuY2hfaXNfbGVhZihpdGVyLCBmaWVsZCkpCi0JCXJldHVybiBwcmludF9ncmFwaF9lbnRyeV9sZWFmKGl0ZXIsIGZpZWxkLCBzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90CitwcmludF9ncmFwaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqZmllbGQsIHN0cnVjdCB0cmFjZV9zZXEgKnMsCisJCQlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJaW50IGNwdSA9IGl0ZXItPmNwdTsKKwlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCAqY2FsbCA9ICZmaWVsZC0+Z3JhcGhfZW50OworCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5ICpsZWFmX3JldDsKKworCWlmIChwcmludF9ncmFwaF9wcm9sb2d1ZShpdGVyLCBzLCBUUkFDRV9HUkFQSF9FTlQsIGNhbGwtPmZ1bmMpKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlsZWFmX3JldCA9IGdldF9yZXR1cm5fZm9yX2xlYWYoaXRlciwgZmllbGQpOworCWlmIChsZWFmX3JldCkKKwkJcmV0dXJuIHByaW50X2dyYXBoX2VudHJ5X2xlYWYoaXRlciwgZmllbGQsIGxlYWZfcmV0LCBzKTsKIAllbHNlCi0JCXJldHVybiBwcmludF9ncmFwaF9lbnRyeV9uZXN0ZWQoZmllbGQsIHMsIGl0ZXItPmVudC0+cGlkLCBjcHUpOworCQlyZXR1cm4gcHJpbnRfZ3JhcGhfZW50cnlfbmVzdGVkKGl0ZXIsIGZpZWxkLCBzLCBjcHUpOwogCiB9CiAKIHN0YXRpYyBlbnVtIHByaW50X2xpbmVfdAogcHJpbnRfZ3JhcGhfcmV0dXJuKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgc3RydWN0IHRyYWNlX3NlcSAqcywKLQkJICAgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQsIGludCBjcHUpCisJCSAgIHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50LCBzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7Ci0JaW50IGk7Ci0JaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgZHVyYXRpb24gPSB0cmFjZS0+cmV0dGltZSAtIHRyYWNlLT5jYWxsdGltZTsKKwlzdHJ1Y3QgZmdyYXBoX2RhdGEgKmRhdGEgPSBpdGVyLT5wcml2YXRlOworCXBpZF90IHBpZCA9IGVudC0+cGlkOworCWludCBjcHUgPSBpdGVyLT5jcHU7CisJaW50IHJldDsKKwlpbnQgaTsKIAotCS8qIFBpZCAqLwotCWlmICh2ZXJpZl9waWQocywgZW50LT5waWQsIGNwdSkgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCisJaWYgKGRhdGEpIHsKKwkJaW50IGNwdSA9IGl0ZXItPmNwdTsKKwkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YSwgY3B1KS0+ZGVwdGgpOworCisJCS8qCisJCSAqIENvbW1lbnRzIGRpc3BsYXkgYXQgKyAxIHRvIGRlcHRoLiBUaGlzIGlzIHRoZQorCQkgKiByZXR1cm4gZnJvbSBhIGZ1bmN0aW9uLCB3ZSBub3cgd2FudCB0aGUgY29tbWVudHMKKwkJICogdG8gZGlzcGxheSBhdCB0aGUgc2FtZSBsZXZlbCBvZiB0aGUgYnJhY2tldC4KKwkJICovCisJCSpkZXB0aCA9IHRyYWNlLT5kZXB0aCAtIDE7CisJfQorCisJaWYgKHByaW50X2dyYXBoX3Byb2xvZ3VlKGl0ZXIsIHMsIDAsIDApKQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKLQkvKiBDcHUgKi8KLQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0NQVSkgewotCQlyZXQgPSBwcmludF9ncmFwaF9jcHUocywgY3B1KTsKLQkJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9Ci0KLQkvKiBQcm9jICovCi0JaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9QUk9DKSB7Ci0JCXJldCA9IHByaW50X2dyYXBoX3Byb2MocywgZW50LT5waWQpOwotCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCi0JCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiB8ICIpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9Ci0KIAkvKiBPdmVyaGVhZCAqLwotCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQpIHsKLQkJcmV0ID0gcHJpbnRfZ3JhcGhfb3ZlcmhlYWQoZHVyYXRpb24sIHMpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9CisJcmV0ID0gcHJpbnRfZ3JhcGhfb3ZlcmhlYWQoZHVyYXRpb24sIHMpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKIAkvKiBEdXJhdGlvbiAqLwotCXJldCA9IHByaW50X2dyYXBoX2R1cmF0aW9uKGR1cmF0aW9uLCBzKTsKLQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9EVVJBVElPTikgeworCQlyZXQgPSBwcmludF9ncmFwaF9kdXJhdGlvbihkdXJhdGlvbiwgcyk7CisJCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJfQogCiAJLyogQ2xvc2luZyBicmFjZSAqLwogCWZvciAoaSA9IDA7IGkgPCB0cmFjZS0+ZGVwdGggKiBUUkFDRV9HUkFQSF9JTkRFTlQ7IGkrKykgewpAQCAtNjAzLDcgKzcwNiw3IEBACiAJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAJfQogCi0JcmV0ID0gcHJpbnRfZ3JhcGhfaXJxKHMsIHRyYWNlLT5mdW5jLCBUUkFDRV9HUkFQSF9SRVQsIGNwdSwgZW50LT5waWQpOworCXJldCA9IHByaW50X2dyYXBoX2lycShpdGVyLCB0cmFjZS0+ZnVuYywgVFJBQ0VfR1JBUEhfUkVULCBjcHUsIHBpZCk7CiAJaWYgKHJldCA9PSBUUkFDRV9UWVBFX1BBUlRJQUxfTElORSkKIAkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwogCkBAIC02MTEsNjEgKzcxNCw3MyBAQAogfQogCiBzdGF0aWMgZW51bSBwcmludF9saW5lX3QKLXByaW50X2dyYXBoX2NvbW1lbnQoc3RydWN0IHByaW50X2VudHJ5ICp0cmFjZSwgc3RydWN0IHRyYWNlX3NlcSAqcywKLQkJICAgc3RydWN0IHRyYWNlX2VudHJ5ICplbnQsIHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3ByaW50X2dyYXBoX2NvbW1lbnQoc3RydWN0IHRyYWNlX3NlcSAqcywgIHN0cnVjdCB0cmFjZV9lbnRyeSAqZW50LAorCQkgICAgc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewotCWludCBpOworCXVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzID0gKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fTUFTSyk7CisJc3RydWN0IGZncmFwaF9kYXRhICpkYXRhID0gaXRlci0+cHJpdmF0ZTsKKwlzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50OworCWludCBkZXB0aCA9IDA7CiAJaW50IHJldDsKKwlpbnQgaTsKIAotCS8qIFBpZCAqLwotCWlmICh2ZXJpZl9waWQocywgZW50LT5waWQsIGl0ZXItPmNwdSkgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCisJaWYgKGRhdGEpCisJCWRlcHRoID0gcGVyX2NwdV9wdHIoZGF0YSwgaXRlci0+Y3B1KS0+ZGVwdGg7CisKKwlpZiAocHJpbnRfZ3JhcGhfcHJvbG9ndWUoaXRlciwgcywgMCwgMCkpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAotCS8qIENwdSAqLwotCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVKSB7Ci0JCXJldCA9IHByaW50X2dyYXBoX2NwdShzLCBpdGVyLT5jcHUpOwotCQlpZiAocmV0ID09IFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FKQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KLQotCS8qIFByb2MgKi8KLQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX1BST0MpIHsKLQkJcmV0ID0gcHJpbnRfZ3JhcGhfcHJvYyhzLCBlbnQtPnBpZCk7Ci0JCWlmIChyZXQgPT0gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkUpCi0JCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Ci0KLQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIHwgIik7Ci0JCWlmICghcmV0KQotCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOwotCX0KLQogCS8qIE5vIG92ZXJoZWFkICovCi0JaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9PVkVSSEVBRCkgewotCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICIpOwotCQlpZiAoIXJldCkKLQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKLQl9Ci0KLQkvKiBObyB0aW1lICovCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICAgICAgICAgICAgfCAgIik7CisJcmV0ID0gcHJpbnRfZ3JhcGhfb3ZlcmhlYWQoLTEsIHMpOwogCWlmICghcmV0KQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKKwkvKiBObyB0aW1lICovCisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9EVVJBVElPTikgeworCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIgICAgICAgICAgICB8ICAiKTsKKwkJaWYgKCFyZXQpCisJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJfQorCiAJLyogSW5kZW50YXRpb24gKi8KLQlpZiAodHJhY2UtPmRlcHRoID4gMCkKLQkJZm9yIChpID0gMDsgaSA8ICh0cmFjZS0+ZGVwdGggKyAxKSAqIFRSQUNFX0dSQVBIX0lOREVOVDsgaSsrKSB7CisJaWYgKGRlcHRoID4gMCkKKwkJZm9yIChpID0gMDsgaSA8IChkZXB0aCArIDEpICogVFJBQ0VfR1JBUEhfSU5ERU5UOyBpKyspIHsKIAkJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiAiKTsKIAkJCWlmICghcmV0KQogCQkJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAkJfQogCiAJLyogVGhlIGNvbW1lbnQgKi8KLQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIvKiAlcyIsIHRyYWNlLT5idWYpOworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIi8qICIpOwogCWlmICghcmV0KQogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKLQlpZiAoZW50LT5mbGFncyAmIFRSQUNFX0ZMQUdfQ09OVCkKLQkJdHJhY2Vfc2VxX3ByaW50X2NvbnQocywgaXRlcik7CisJc3dpdGNoIChpdGVyLT5lbnQtPnR5cGUpIHsKKwljYXNlIFRSQUNFX0JQUklOVDoKKwkJcmV0ID0gdHJhY2VfcHJpbnRfYnByaW50a19tc2dfb25seShpdGVyKTsKKwkJaWYgKHJldCAhPSBUUkFDRV9UWVBFX0hBTkRMRUQpCisJCQlyZXR1cm4gcmV0OworCQlicmVhazsKKwljYXNlIFRSQUNFX1BSSU5UOgorCQlyZXQgPSB0cmFjZV9wcmludF9wcmludGtfbXNnX29ubHkoaXRlcik7CisJCWlmIChyZXQgIT0gVFJBQ0VfVFlQRV9IQU5ETEVEKQorCQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXZlbnQgPSBmdHJhY2VfZmluZF9ldmVudChlbnQtPnR5cGUpOworCQlpZiAoIWV2ZW50KQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEOworCisJCXJldCA9IGV2ZW50LT50cmFjZShpdGVyLCBzeW1fZmxhZ3MpOworCQlpZiAocmV0ICE9IFRSQUNFX1RZUEVfSEFORExFRCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogU3RyaXAgZW5kaW5nIG5ld2xpbmUgKi8KKwlpZiAocy0+YnVmZmVyW3MtPmxlbiAtIDFdID09ICdcbicpIHsKKwkJcy0+YnVmZmVyW3MtPmxlbiAtIDFdID0gJ1wwJzsKKwkJcy0+bGVuLS07CisJfQogCiAJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICovXG4iKTsKIAlpZiAoIXJldCkKQEAgLTY3OCw2MiArNzkzLDkxIEBACiBlbnVtIHByaW50X2xpbmVfdAogcHJpbnRfZ3JhcGhfZnVuY3Rpb24oc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQogewotCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOwogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CiAKIAlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CiAJY2FzZSBUUkFDRV9HUkFQSF9FTlQ6IHsKIAkJc3RydWN0IGZ0cmFjZV9ncmFwaF9lbnRfZW50cnkgKmZpZWxkOwogCQl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgZW50cnkpOwotCQlyZXR1cm4gcHJpbnRfZ3JhcGhfZW50cnkoZmllbGQsIHMsIGl0ZXIsCi0JCQkJCSBpdGVyLT5jcHUpOworCQlyZXR1cm4gcHJpbnRfZ3JhcGhfZW50cnkoZmllbGQsIHMsIGl0ZXIpOwogCX0KIAljYXNlIFRSQUNFX0dSQVBIX1JFVDogewogCQlzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldF9lbnRyeSAqZmllbGQ7CiAJCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0JCXJldHVybiBwcmludF9ncmFwaF9yZXR1cm4oJmZpZWxkLT5yZXQsIHMsIGVudHJ5LCBpdGVyLT5jcHUpOwotCX0KLQljYXNlIFRSQUNFX1BSSU5UOiB7Ci0JCXN0cnVjdCBwcmludF9lbnRyeSAqZmllbGQ7Ci0JCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7Ci0JCXJldHVybiBwcmludF9ncmFwaF9jb21tZW50KGZpZWxkLCBzLCBlbnRyeSwgaXRlcik7CisJCXJldHVybiBwcmludF9ncmFwaF9yZXR1cm4oJmZpZWxkLT5yZXQsIHMsIGVudHJ5LCBpdGVyKTsKIAl9CiAJZGVmYXVsdDoKLQkJcmV0dXJuIFRSQUNFX1RZUEVfVU5IQU5ETEVEOworCQlyZXR1cm4gcHJpbnRfZ3JhcGhfY29tbWVudChzLCBlbnRyeSwgaXRlcik7CiAJfQorCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfZ3JhcGhfaGVhZGVycyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpCiB7CiAJLyogMXN0IGxpbmUgKi8KIAlzZXFfcHJpbnRmKHMsICIjICIpOworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfQUJTX1RJTUUpCisJCXNlcV9wcmludGYocywgIiAgICAgVElNRSAgICAgICAiKTsKIAlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0NQVSkKLQkJc2VxX3ByaW50ZihzLCAiQ1BVICIpOworCQlzZXFfcHJpbnRmKHMsICJDUFUiKTsKIAlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX1BST0MpCi0JCXNlcV9wcmludGYocywgIlRBU0svUElEICAgICAiKTsKLQlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX09WRVJIRUFEKQotCQlzZXFfcHJpbnRmKHMsICJPVkVSSEVBRC8iKTsKLQlzZXFfcHJpbnRmKHMsICJEVVJBVElPTiAgICAgICAgICAgIEZVTkNUSU9OIENBTExTXG4iKTsKKwkJc2VxX3ByaW50ZihzLCAiICBUQVNLL1BJRCAgICAgICIpOworCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfRFVSQVRJT04pCisJCXNlcV9wcmludGYocywgIiAgRFVSQVRJT04gICAiKTsKKwlzZXFfcHJpbnRmKHMsICIgICAgICAgICAgICAgICBGVU5DVElPTiBDQUxMU1xuIik7CiAKIAkvKiAybmQgbGluZSAqLwogCXNlcV9wcmludGYocywgIiMgIik7CisJaWYgKHRyYWNlcl9mbGFncy52YWwgJiBUUkFDRV9HUkFQSF9QUklOVF9BQlNfVElNRSkKKwkJc2VxX3ByaW50ZihzLCAiICAgICAgfCAgICAgICAgICIpOwogCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfQ1BVKQotCQlzZXFfcHJpbnRmKHMsICJ8ICAgIik7CisJCXNlcV9wcmludGYocywgInwgICIpOwogCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfUFJPQykKLQkJc2VxX3ByaW50ZihzLCAifCAgICAgIHwgICAgICIpOwotCWlmICh0cmFjZXJfZmxhZ3MudmFsICYgVFJBQ0VfR1JBUEhfUFJJTlRfT1ZFUkhFQUQpIHsKLQkJc2VxX3ByaW50ZihzLCAifCAgICAgICAgIik7Ci0JCXNlcV9wcmludGYocywgInwgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfFxuIik7Ci0JfSBlbHNlCi0JCXNlcV9wcmludGYocywgIiAgICB8ICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfFxuIik7CisJCXNlcV9wcmludGYocywgIiAgfCAgICB8ICAgICAgICAiKTsKKwlpZiAodHJhY2VyX2ZsYWdzLnZhbCAmIFRSQUNFX0dSQVBIX1BSSU5UX0RVUkFUSU9OKQorCQlzZXFfcHJpbnRmKHMsICIgICB8ICAgfCAgICAgICIpOworCXNlcV9wcmludGYocywgIiAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHxcbiIpOwogfQorCitzdGF0aWMgdm9pZCBncmFwaF90cmFjZV9vcGVuKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwkvKiBwaWQgYW5kIGRlcHRoIG9uIHRoZSBsYXN0IHRyYWNlIHByb2Nlc3NlZCAqLworCXN0cnVjdCBmZ3JhcGhfZGF0YSAqZGF0YSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgZmdyYXBoX2RhdGEpOworCWludCBjcHU7CisKKwlpZiAoIWRhdGEpCisJCXByX3dhcm5pbmcoImZ1bmN0aW9uIGdyYXBoIHRyYWNlcjogbm90IGVub3VnaCBtZW1vcnlcbiIpOworCWVsc2UKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQkJcGlkX3QgKnBpZCA9ICYocGVyX2NwdV9wdHIoZGF0YSwgY3B1KS0+bGFzdF9waWQpOworCQkJaW50ICpkZXB0aCA9ICYocGVyX2NwdV9wdHIoZGF0YSwgY3B1KS0+ZGVwdGgpOworCQkJKnBpZCA9IC0xOworCQkJKmRlcHRoID0gMDsKKwkJfQorCisJaXRlci0+cHJpdmF0ZSA9IGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX3RyYWNlX2Nsb3NlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlmcmVlX3BlcmNwdShpdGVyLT5wcml2YXRlKTsKK30KKwogc3RhdGljIHN0cnVjdCB0cmFjZXIgZ3JhcGhfdHJhY2UgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZQkgICAgIAk9ICJmdW5jdGlvbl9ncmFwaCIsCi0JLmluaXQJICAgICAJPSBncmFwaF90cmFjZV9pbml0LAotCS5yZXNldAkgICAgIAk9IGdyYXBoX3RyYWNlX3Jlc2V0LAorCS5uYW1lCQk9ICJmdW5jdGlvbl9ncmFwaCIsCisJLm9wZW4JCT0gZ3JhcGhfdHJhY2Vfb3BlbiwKKwkuY2xvc2UJCT0gZ3JhcGhfdHJhY2VfY2xvc2UsCisJLndhaXRfcGlwZQk9IHBvbGxfd2FpdF9waXBlLAorCS5pbml0CQk9IGdyYXBoX3RyYWNlX2luaXQsCisJLnJlc2V0CQk9IGdyYXBoX3RyYWNlX3Jlc2V0LAogCS5wcmludF9saW5lCT0gcHJpbnRfZ3JhcGhfZnVuY3Rpb24sCiAJLnByaW50X2hlYWRlcgk9IHByaW50X2dyYXBoX2hlYWRlcnMsCiAJLmZsYWdzCQk9ICZ0cmFjZXJfZmxhZ3MsCisjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAorCS5zZWxmdGVzdAk9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfZnVuY3Rpb25fZ3JhcGgsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBfX2luaXQgaW50IGluaXRfZ3JhcGhfdHJhY2Uodm9pZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9od19icmFuY2hlcy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKaW5kZXggNjQ5ZGYyMi4uN2JmZGY0YyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2h3X2JyYW5jaGVzLmMKQEAgLTEsMzAgKzEsNTMgQEAKIC8qCiAgKiBoL3cgYnJhbmNoIHRyYWNlciBmb3IgeDg2IGJhc2VkIG9uIGJ0cwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgTWV0emdlciA8bWFya3VzLnQubWV0emdlckBnbWFpbC5jb20+Ci0gKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBNYXJrdXMgTWV0emdlciA8bWFya3VzLnQubWV0emdlckBnbWFpbC5jb20+LCAyMDA4LTIwMDkKICAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KIAogI2luY2x1ZGUgPGFzbS9kcy5oPgogCiAjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKIAogCiAjZGVmaW5lIFNJWkVPRl9CVFMgKDEgPDwgMTMpCiAKKy8qCisgKiBUaGUgdHJhY2VyIGxvY2sgcHJvdGVjdHMgdGhlIGJlbG93IHBlci1jcHUgdHJhY2VyIGFycmF5LgorICogSXQgbmVlZHMgdG8gYmUgaGVsZCB0bzoKKyAqIC0gc3RhcnQgdHJhY2luZyBvbiBhbGwgY3B1cworICogLSBzdG9wIHRyYWNpbmcgb24gYWxsIGNwdXMKKyAqIC0gc3RhcnQgdHJhY2luZyBvbiBhIHNpbmdsZSBob3RwbHVnIGNwdQorICogLSBzdG9wIHRyYWNpbmcgb24gYSBzaW5nbGUgaG90cGx1ZyBjcHUKKyAqIC0gcmVhZCB0aGUgdHJhY2UgZnJvbSBhbGwgY3B1cworICogLSByZWFkIHRoZSB0cmFjZSBmcm9tIGEgc2luZ2xlIGNwdQorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJ0c190cmFjZXJfbG9jayk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGJ0c190cmFjZXIgKiwgdHJhY2VyKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBjaGFyW1NJWkVPRl9CVFNdLCBidWZmZXIpOwogCiAjZGVmaW5lIHRoaXNfdHJhY2VyIHBlcl9jcHUodHJhY2VyLCBzbXBfcHJvY2Vzc29yX2lkKCkpCiAjZGVmaW5lIHRoaXNfYnVmZmVyIHBlcl9jcHUoYnVmZmVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpCiAKK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSB0cmFjZV9od19icmFuY2hlc19lbmFibGVkOworc3RhdGljIHN0cnVjdCB0cmFjZV9hcnJheSAqaHdfYnJhbmNoX3RyYWNlIF9fcmVhZF9tb3N0bHk7CiAKKworLyoKKyAqIFN0YXJ0IHRyYWNpbmcgb24gdGhlIGN1cnJlbnQgY3B1LgorICogVGhlIGFyZ3VtZW50IGlzIGlnbm9yZWQuCisgKgorICogcHJlOiBidHNfdHJhY2VyX2xvY2sgbXVzdCBiZSBsb2NrZWQuCisgKi8KIHN0YXRpYyB2b2lkIGJ0c190cmFjZV9zdGFydF9jcHUodm9pZCAqYXJnKQogewogCWlmICh0aGlzX3RyYWNlcikKQEAgLTQyLDE0ICs2NSwyMCBAQAogCiBzdGF0aWMgdm9pZCBidHNfdHJhY2Vfc3RhcnQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQlpbnQgY3B1OworCXNwaW5fbG9jaygmYnRzX3RyYWNlcl9sb2NrKTsKIAotCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOworCW9uX2VhY2hfY3B1KGJ0c190cmFjZV9zdGFydF9jcHUsIE5VTEwsIDEpOworCXRyYWNlX2h3X2JyYW5jaGVzX2VuYWJsZWQgPSAxOwogCi0JZm9yX2VhY2hfY3B1KGNwdSwgY3B1X3Bvc3NpYmxlX21hc2spCi0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGJ0c190cmFjZV9zdGFydF9jcHUsIE5VTEwsIDEpOworCXNwaW5fdW5sb2NrKCZidHNfdHJhY2VyX2xvY2spOwogfQogCisvKgorICogU3RvcCB0cmFjaW5nIG9uIHRoZSBjdXJyZW50IGNwdS4KKyAqIFRoZSBhcmd1bWVudCBpcyBpZ25vcmVkLgorICoKKyAqIHByZTogYnRzX3RyYWNlcl9sb2NrIG11c3QgYmUgbG9ja2VkLgorICovCiBzdGF0aWMgdm9pZCBidHNfdHJhY2Vfc3RvcF9jcHUodm9pZCAqYXJnKQogewogCWlmICh0aGlzX3RyYWNlcikgewpAQCAtNjAsMjYgKzg5LDYwIEBACiAKIHN0YXRpYyB2b2lkIGJ0c190cmFjZV9zdG9wKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0JaW50IGNwdTsKKwlzcGluX2xvY2soJmJ0c190cmFjZXJfbG9jayk7CiAKLQlmb3JfZWFjaF9jcHUoY3B1LCBjcHVfcG9zc2libGVfbWFzaykKLQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgYnRzX3RyYWNlX3N0b3BfY3B1LCBOVUxMLCAxKTsKKwl0cmFjZV9od19icmFuY2hlc19lbmFibGVkID0gMDsKKwlvbl9lYWNoX2NwdShidHNfdHJhY2Vfc3RvcF9jcHUsIE5VTEwsIDEpOworCisJc3Bpbl91bmxvY2soJmJ0c190cmFjZXJfbG9jayk7CiB9CiAKK3N0YXRpYyBpbnQgX19jcHVpbml0IGJ0c19ob3RjcHVfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OworCisJc3Bpbl9sb2NrKCZidHNfdHJhY2VyX2xvY2spOworCisJaWYgKCF0cmFjZV9od19icmFuY2hlc19lbmFibGVkKQorCQlnb3RvIG91dDsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBDUFVfT05MSU5FOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBidHNfdHJhY2Vfc3RhcnRfY3B1LCBOVUxMLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFOgorCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBidHNfdHJhY2Vfc3RvcF9jcHUsIE5VTEwsIDEpOworCQlicmVhazsKKwl9CisKKyBvdXQ6CisJc3Bpbl91bmxvY2soJmJ0c190cmFjZXJfbG9jayk7CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGJ0c19ob3RjcHVfbm90aWZpZXIgX19jcHVpbml0ZGF0YSA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGJ0c19ob3RjcHVfaGFuZGxlcgorfTsKKwogc3RhdGljIGludCBidHNfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewotCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOworCWh3X2JyYW5jaF90cmFjZSA9IHRyOworCiAJYnRzX3RyYWNlX3N0YXJ0KHRyKTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBidHNfdHJhY2VfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlidHNfdHJhY2Vfc3RvcCh0cik7Cit9CisKIHN0YXRpYyB2b2lkIGJ0c190cmFjZV9wcmludF9oZWFkZXIoc3RydWN0IHNlcV9maWxlICptKQogewotCXNlcV9wdXRzKG0sCi0JCSAiIyBDUFUjICAgICAgICBGUk9NICAgICAgICAgICAgICAgICAgIFRPICAgICAgICAgRlVOQ1RJT05cbiIpOwotCXNlcV9wdXRzKG0sCi0JCSAiIyAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuIik7CisJc2VxX3B1dHMobSwgIiMgQ1BVIyAgICAgICAgVE8gIDwtICBGUk9NXG4iKTsKIH0KIAogc3RhdGljIGVudW0gcHJpbnRfbGluZV90IGJ0c190cmFjZV9wcmludF9saW5lKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKQEAgLTg3LDE1ICsxNTAsMTUgQEAKIAlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OwogCXN0cnVjdCB0cmFjZV9zZXEgKnNlcSA9ICZpdGVyLT5zZXE7CiAJc3RydWN0IGh3X2JyYW5jaF9lbnRyeSAqaXQ7CisJdW5zaWduZWQgbG9uZyBzeW1mbGFncyA9IFRSQUNFX0lURVJfU1lNX09GRlNFVDsKIAogCXRyYWNlX2Fzc2lnbl90eXBlKGl0LCBlbnRyeSk7CiAKIAlpZiAoZW50cnktPnR5cGUgPT0gVFJBQ0VfSFdfQlJBTkNIRVMpIHsKLQkJaWYgKHRyYWNlX3NlcV9wcmludGYoc2VxLCAiJTRkICAiLCBlbnRyeS0+Y3B1KSAmJgotCQkgICAgdHJhY2Vfc2VxX3ByaW50ZihzZXEsICIweCUwMTZsbHggLT4gMHglMDE2bGx4ICIsCi0JCQkJICAgICBpdC0+ZnJvbSwgaXQtPnRvKSAmJgotCQkgICAgKCFpdC0+ZnJvbSB8fAotCQkgICAgIHNlcV9wcmludF9pcF9zeW0oc2VxLCBpdC0+ZnJvbSwgLyogc3ltX2ZsYWdzID0gKi8gMCkpICYmCisJCWlmICh0cmFjZV9zZXFfcHJpbnRmKHNlcSwgIiU0ZCAgIiwgaXRlci0+Y3B1KSAmJgorCQkgICAgc2VxX3ByaW50X2lwX3N5bShzZXEsIGl0LT50bywgc3ltZmxhZ3MpICYmCisJCSAgICB0cmFjZV9zZXFfcHJpbnRmKHNlcSwgIlx0ICA8LSAgIikgJiYKKwkJICAgIHNlcV9wcmludF9pcF9zeW0oc2VxLCBpdC0+ZnJvbSwgc3ltZmxhZ3MpICYmCiAJCSAgICB0cmFjZV9zZXFfcHJpbnRmKHNlcSwgIlxuIikpCiAJCQlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwogCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7OwpAQCAtMTAzLDI2ICsxNjYsNDIgQEAKIAlyZXR1cm4gVFJBQ0VfVFlQRV9VTkhBTkRMRUQ7CiB9CiAKLXZvaWQgdHJhY2VfaHdfYnJhbmNoKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsIHU2NCBmcm9tLCB1NjQgdG8pCit2b2lkIHRyYWNlX2h3X2JyYW5jaCh1NjQgZnJvbSwgdTY0IHRvKQogeworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBod19icmFuY2hfdHJhY2U7CiAJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKIAlzdHJ1Y3QgaHdfYnJhbmNoX2VudHJ5ICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycTsKKwl1bnNpZ25lZCBsb25nIGlycTE7CisJaW50IGNwdTsKIAotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLCAmaXJxKTsKLQlpZiAoIWV2ZW50KQorCWlmICh1bmxpa2VseSghdHIpKQogCQlyZXR1cm47CisKKwlpZiAodW5saWtlbHkoIXRyYWNlX2h3X2JyYW5jaGVzX2VuYWJsZWQpKQorCQlyZXR1cm47CisKKwlsb2NhbF9pcnFfc2F2ZShpcnExKTsKKwljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlmIChhdG9taWNfaW5jX3JldHVybigmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpICE9IDEpCisJCWdvdG8gb3V0OworCisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9IV19CUkFOQ0hFUywKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgMCk7CisJaWYgKCFldmVudCkKKwkJZ290byBvdXQ7CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKIAl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCAwLCBmcm9tKTsKIAllbnRyeS0+ZW50LnR5cGUgPSBUUkFDRV9IV19CUkFOQ0hFUzsKLQllbnRyeS0+ZW50LmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAllbnRyeS0+ZnJvbSA9IGZyb207CiAJZW50cnktPnRvICAgPSB0bzsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnEpOworCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgMCwgMCk7CisKKyBvdXQ6CisJYXRvbWljX2RlYygmdHItPmRhdGFbY3B1XS0+ZGlzYWJsZWQpOworCWxvY2FsX2lycV9yZXN0b3JlKGlycTEpOwogfQogCi1zdGF0aWMgdm9pZCB0cmFjZV9idHNfYXQoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwKLQkJCSBjb25zdCBzdHJ1Y3QgYnRzX3RyYWNlICp0cmFjZSwgdm9pZCAqYXQpCitzdGF0aWMgdm9pZCB0cmFjZV9idHNfYXQoY29uc3Qgc3RydWN0IGJ0c190cmFjZSAqdHJhY2UsIHZvaWQgKmF0KQogewogCXN0cnVjdCBidHNfc3RydWN0IGJ0czsKIAlpbnQgZXJyID0gMDsKQEAgLTEzNywxOCArMjE2LDI5IEBACiAKIAlzd2l0Y2ggKGJ0cy5xdWFsaWZpZXIpIHsKIAljYXNlIEJUU19CUkFOQ0g6Ci0JCXRyYWNlX2h3X2JyYW5jaCh0ciwgYnRzLnZhcmlhbnQubGJyLmZyb20sIGJ0cy52YXJpYW50Lmxici50byk7CisJCXRyYWNlX2h3X2JyYW5jaChidHMudmFyaWFudC5sYnIuZnJvbSwgYnRzLnZhcmlhbnQubGJyLnRvKTsKIAkJYnJlYWs7CiAJfQogfQogCisvKgorICogQ29sbGVjdCB0aGUgdHJhY2Ugb24gdGhlIGN1cnJlbnQgY3B1IGFuZCB3cml0ZSBpdCBpbnRvIHRoZSBmdHJhY2UgYnVmZmVyLgorICoKKyAqIHByZTogYnRzX3RyYWNlcl9sb2NrIG11c3QgYmUgbG9ja2VkCisgKi8KIHN0YXRpYyB2b2lkIHRyYWNlX2J0c19jcHUodm9pZCAqYXJnKQogewogCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAoc3RydWN0IHRyYWNlX2FycmF5ICopIGFyZzsKIAljb25zdCBzdHJ1Y3QgYnRzX3RyYWNlICp0cmFjZTsKIAl1bnNpZ25lZCBjaGFyICphdDsKIAotCWlmICghdGhpc190cmFjZXIpCisJaWYgKHVubGlrZWx5KCF0cikpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmdHItPmRhdGFbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV0tPmRpc2FibGVkKSkpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseSghdGhpc190cmFjZXIpKQogCQlyZXR1cm47CiAKIAlkc19zdXNwZW5kX2J0cyh0aGlzX3RyYWNlcik7CkBAIC0xNTgsMTEgKzI0OCwxMSBAQAogCiAJZm9yIChhdCA9IHRyYWNlLT5kcy50b3A7ICh2b2lkICopYXQgPCB0cmFjZS0+ZHMuZW5kOwogCSAgICAgYXQgKz0gdHJhY2UtPmRzLnNpemUpCi0JCXRyYWNlX2J0c19hdCh0ciwgdHJhY2UsIGF0KTsKKwkJdHJhY2VfYnRzX2F0KHRyYWNlLCBhdCk7CiAKIAlmb3IgKGF0ID0gdHJhY2UtPmRzLmJlZ2luOyAodm9pZCAqKWF0IDwgdHJhY2UtPmRzLnRvcDsKIAkgICAgIGF0ICs9IHRyYWNlLT5kcy5zaXplKQotCQl0cmFjZV9idHNfYXQodHIsIHRyYWNlLCBhdCk7CisJCXRyYWNlX2J0c19hdCh0cmFjZSwgYXQpOwogCiBvdXQ6CiAJZHNfcmVzdW1lX2J0cyh0aGlzX3RyYWNlcik7CkBAIC0xNzAsMjYgKzI2MCw0MyBAQAogCiBzdGF0aWMgdm9pZCB0cmFjZV9idHNfcHJlcGFyZShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCiB7Ci0JaW50IGNwdTsKKwlzcGluX2xvY2soJmJ0c190cmFjZXJfbG9jayk7CiAKLQlmb3JfZWFjaF9jcHUoY3B1LCBjcHVfcG9zc2libGVfbWFzaykKLQkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgdHJhY2VfYnRzX2NwdSwgaXRlci0+dHIsIDEpOworCW9uX2VhY2hfY3B1KHRyYWNlX2J0c19jcHUsIGl0ZXItPnRyLCAxKTsKKworCXNwaW5fdW5sb2NrKCZidHNfdHJhY2VyX2xvY2spOworfQorCitzdGF0aWMgdm9pZCB0cmFjZV9idHNfY2xvc2Uoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXMoaXRlci0+dHIpOworfQorCit2b2lkIHRyYWNlX2h3X2JyYW5jaF9vb3BzKHZvaWQpCit7CisJc3Bpbl9sb2NrKCZidHNfdHJhY2VyX2xvY2spOworCisJdHJhY2VfYnRzX2NwdShod19icmFuY2hfdHJhY2UpOworCisJc3Bpbl91bmxvY2soJmJ0c190cmFjZXJfbG9jayk7CiB9CiAKIHN0cnVjdCB0cmFjZXIgYnRzX3RyYWNlciBfX3JlYWRfbW9zdGx5ID0KIHsKIAkubmFtZQkJPSAiaHctYnJhbmNoLXRyYWNlciIsCiAJLmluaXQJCT0gYnRzX3RyYWNlX2luaXQsCi0JLnJlc2V0CQk9IGJ0c190cmFjZV9zdG9wLAorCS5yZXNldAkJPSBidHNfdHJhY2VfcmVzZXQsCiAJLnByaW50X2hlYWRlcgk9IGJ0c190cmFjZV9wcmludF9oZWFkZXIsCiAJLnByaW50X2xpbmUJPSBidHNfdHJhY2VfcHJpbnRfbGluZSwKIAkuc3RhcnQJCT0gYnRzX3RyYWNlX3N0YXJ0LAogCS5zdG9wCQk9IGJ0c190cmFjZV9zdG9wLAotCS5vcGVuCQk9IHRyYWNlX2J0c19wcmVwYXJlCisJLm9wZW4JCT0gdHJhY2VfYnRzX3ByZXBhcmUsCisJLmNsb3NlCQk9IHRyYWNlX2J0c19jbG9zZQogfTsKIAogX19pbml0IHN0YXRpYyBpbnQgaW5pdF9idHNfdHJhY2Uodm9pZCkKIHsKKwlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmJ0c19ob3RjcHVfbm90aWZpZXIpOwogCXJldHVybiByZWdpc3Rlcl90cmFjZXIoJmJ0c190cmFjZXIpOwogfQogZGV2aWNlX2luaXRjYWxsKGluaXRfYnRzX3RyYWNlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCmluZGV4IDYyYTc4ZDkuLmI5MjNkMTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiB0cmFjZSBpcnFzIG9mZiBjcml0aWNhbGwgdGltaW5ncworICogdHJhY2UgaXJxcyBvZmYgY3JpdGljYWwgdGltaW5ncwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA4IEluZ28gTW9sbmFyIDxtaW5nb0ByZWRoYXQuY29tPgpAQCAtMzIsNiArMzIsOCBAQAogCiBzdGF0aWMgaW50IHRyYWNlX3R5cGUgX19yZWFkX21vc3RseTsKIAorc3RhdGljIGludCBzYXZlX2xhdF9mbGFnOworCiAjaWZkZWYgQ09ORklHX1BSRUVNUFRfVFJBQ0VSCiBzdGF0aWMgaW5saW5lIGludAogcHJlZW1wdF90cmFjZSh2b2lkKQpAQCAtOTUsNyArOTcsNyBAQAogCWRpc2FibGVkID0gYXRvbWljX2luY19yZXR1cm4oJmRhdGEtPmRpc2FibGVkKTsKIAogCWlmIChsaWtlbHkoZGlzYWJsZWQgPT0gMSkpCi0JCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcHJlZW1wdF9jb3VudCgpKTsKKwkJdHJhY2VfZnVuY3Rpb24odHIsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwcmVlbXB0X2NvdW50KCkpOwogCiAJYXRvbWljX2RlYygmZGF0YS0+ZGlzYWJsZWQpOwogfQpAQCAtMTUzLDcgKzE1NSw3IEBACiAJaWYgKCFyZXBvcnRfbGF0ZW5jeShkZWx0YSkpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBDQUxMRVJfQUREUjAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKKwl0cmFjZV9mdW5jdGlvbih0ciwgQ0FMTEVSX0FERFIwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CiAKIAlsYXRlbmN5ID0gbnNlY3NfdG9fdXNlY3MoZGVsdGEpOwogCkBAIC0xNzcsNyArMTc5LDcgQEAKIAlkYXRhLT5jcml0aWNhbF9zZXF1ZW5jZSA9IG1heF9zZXF1ZW5jZTsKIAlkYXRhLT5wcmVlbXB0X3RpbWVzdGFtcCA9IGZ0cmFjZV9ub3coY3B1KTsKIAl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOwotCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBDQUxMRVJfQUREUjAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKKwl0cmFjZV9mdW5jdGlvbih0ciwgQ0FMTEVSX0FERFIwLCBwYXJlbnRfaXAsIGZsYWdzLCBwYyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjEwLDcgKzIxMiw3IEBACiAKIAlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKIAotCXRyYWNlX2Z1bmN0aW9uKHRyLCBkYXRhLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcHJlZW1wdF9jb3VudCgpKTsKKwl0cmFjZV9mdW5jdGlvbih0ciwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHByZWVtcHRfY291bnQoKSk7CiAKIAlwZXJfY3B1KHRyYWNpbmdfY3B1LCBjcHUpID0gMTsKIApAQCAtMjQ0LDcgKzI0Niw3IEBACiAJYXRvbWljX2luYygmZGF0YS0+ZGlzYWJsZWQpOwogCiAJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7Ci0JdHJhY2VfZnVuY3Rpb24odHIsIGRhdGEsIGlwLCBwYXJlbnRfaXAsIGZsYWdzLCBwcmVlbXB0X2NvdW50KCkpOworCXRyYWNlX2Z1bmN0aW9uKHRyLCBpcCwgcGFyZW50X2lwLCBmbGFncywgcHJlZW1wdF9jb3VudCgpKTsKIAljaGVja19jcml0aWNhbF90aW1pbmcodHIsIGRhdGEsIHBhcmVudF9pcCA/IDogaXAsIGNwdSk7CiAJZGF0YS0+Y3JpdGljYWxfc3RhcnQgPSAwOwogCWF0b21pY19kZWMoJmRhdGEtPmRpc2FibGVkKTsKQEAgLTM1MywzMyArMzU1LDI2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BSRUVNUFRfVFJBQ0VSICovCiAKLS8qCi0gKiBzYXZlX3RyYWNlcl9lbmFibGVkIGlzIHVzZWQgdG8gc2F2ZSB0aGUgc3RhdGUgb2YgdGhlIHRyYWNlcl9lbmFibGVkCi0gKiB2YXJpYWJsZSB3aGVuIHdlIGRpc2FibGUgaXQgd2hlbiB3ZSBvcGVuIGEgdHJhY2Ugb3V0cHV0IGZpbGUuCi0gKi8KLXN0YXRpYyBpbnQgc2F2ZV90cmFjZXJfZW5hYmxlZDsKLQogc3RhdGljIHZvaWQgc3RhcnRfaXJxc29mZl90cmFjZXIoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKIAlyZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX29wcyk7Ci0JaWYgKHRyYWNpbmdfaXNfZW5hYmxlZCgpKSB7CisJaWYgKHRyYWNpbmdfaXNfZW5hYmxlZCgpKQogCQl0cmFjZXJfZW5hYmxlZCA9IDE7Ci0JCXNhdmVfdHJhY2VyX2VuYWJsZWQgPSAxOwotCX0gZWxzZSB7CisJZWxzZQogCQl0cmFjZXJfZW5hYmxlZCA9IDA7Ci0JCXNhdmVfdHJhY2VyX2VuYWJsZWQgPSAwOwotCX0KIH0KIAogc3RhdGljIHZvaWQgc3RvcF9pcnFzb2ZmX3RyYWNlcihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXRyYWNlcl9lbmFibGVkID0gMDsKLQlzYXZlX3RyYWNlcl9lbmFibGVkID0gMDsKIAl1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfb3BzKTsKIH0KIAogc3RhdGljIHZvaWQgX19pcnFzb2ZmX3RyYWNlcl9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CisJc2F2ZV9sYXRfZmxhZyA9IHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9MQVRFTkNZX0ZNVDsKKwl0cmFjZV9mbGFncyB8PSBUUkFDRV9JVEVSX0xBVEVOQ1lfRk1UOworCiAJdHJhY2luZ19tYXhfbGF0ZW5jeSA9IDA7CiAJaXJxc29mZl90cmFjZSA9IHRyOwogCS8qIG1ha2Ugc3VyZSB0aGF0IHRoZSB0cmFjZXIgaXMgdmlzaWJsZSAqLwpAQCAtMzkwLDMwICszODUsMTkgQEAKIHN0YXRpYyB2b2lkIGlycXNvZmZfdHJhY2VyX3Jlc2V0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJc3RvcF9pcnFzb2ZmX3RyYWNlcih0cik7CisKKwlpZiAoIXNhdmVfbGF0X2ZsYWcpCisJCXRyYWNlX2ZsYWdzICY9IH5UUkFDRV9JVEVSX0xBVEVOQ1lfRk1UOwogfQogCiBzdGF0aWMgdm9pZCBpcnFzb2ZmX3RyYWNlcl9zdGFydChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXRyYWNlcl9lbmFibGVkID0gMTsKLQlzYXZlX3RyYWNlcl9lbmFibGVkID0gMTsKIH0KIAogc3RhdGljIHZvaWQgaXJxc29mZl90cmFjZXJfc3RvcChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXRyYWNlcl9lbmFibGVkID0gMDsKLQlzYXZlX3RyYWNlcl9lbmFibGVkID0gMDsKLX0KLQotc3RhdGljIHZvaWQgaXJxc29mZl90cmFjZXJfb3BlbihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCi17Ci0JLyogc3RvcCB0aGUgdHJhY2Ugd2hpbGUgZHVtcGluZyAqLwotCXRyYWNlcl9lbmFibGVkID0gMDsKLX0KLQotc3RhdGljIHZvaWQgaXJxc29mZl90cmFjZXJfY2xvc2Uoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQotewotCS8qIHJlc3RhcnQgdHJhY2luZyAqLwotCXRyYWNlcl9lbmFibGVkID0gc2F2ZV90cmFjZXJfZW5hYmxlZDsKIH0KIAogI2lmZGVmIENPTkZJR19JUlFTT0ZGX1RSQUNFUgpAQCAtNDMxLDggKzQxNSw2IEBACiAJLnJlc2V0CQk9IGlycXNvZmZfdHJhY2VyX3Jlc2V0LAogCS5zdGFydAkJPSBpcnFzb2ZmX3RyYWNlcl9zdGFydCwKIAkuc3RvcAkJPSBpcnFzb2ZmX3RyYWNlcl9zdG9wLAotCS5vcGVuCQk9IGlycXNvZmZfdHJhY2VyX29wZW4sCi0JLmNsb3NlCQk9IGlycXNvZmZfdHJhY2VyX2Nsb3NlLAogCS5wcmludF9tYXgJPSAxLAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKIAkuc2VsZnRlc3QgICAgPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX2lycXNvZmYsCkBAIC00NTksOCArNDQxLDYgQEAKIAkucmVzZXQJCT0gaXJxc29mZl90cmFjZXJfcmVzZXQsCiAJLnN0YXJ0CQk9IGlycXNvZmZfdHJhY2VyX3N0YXJ0LAogCS5zdG9wCQk9IGlycXNvZmZfdHJhY2VyX3N0b3AsCi0JLm9wZW4JCT0gaXJxc29mZl90cmFjZXJfb3BlbiwKLQkuY2xvc2UJCT0gaXJxc29mZl90cmFjZXJfY2xvc2UsCiAJLnByaW50X21heAk9IDEsCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAogCS5zZWxmdGVzdCAgICA9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfcHJlZW1wdG9mZiwKQEAgLTQ4OSw4ICs0NjksNiBAQAogCS5yZXNldAkJPSBpcnFzb2ZmX3RyYWNlcl9yZXNldCwKIAkuc3RhcnQJCT0gaXJxc29mZl90cmFjZXJfc3RhcnQsCiAJLnN0b3AJCT0gaXJxc29mZl90cmFjZXJfc3RvcCwKLQkub3BlbgkJPSBpcnFzb2ZmX3RyYWNlcl9vcGVuLAotCS5jbG9zZQkJPSBpcnFzb2ZmX3RyYWNlcl9jbG9zZSwKIAkucHJpbnRfbWF4CT0gMSwKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCiAJLnNlbGZ0ZXN0ICAgID0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9wcmVlbXB0aXJxc29mZiwKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9tbWlvdHJhY2UuYwppbmRleCA4MGU1MDNlLi44ZTM3ZmNkIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfbW1pb3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX21taW90cmFjZS5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAjaW5jbHVkZSAidHJhY2UuaCIKKyNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKIAogc3RydWN0IGhlYWRlcl9pdGVyIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwpAQCAtMTgzLDIxICsxODQsMjIgQEAKIAlzd2l0Y2ggKHJ3LT5vcGNvZGUpIHsKIAljYXNlIE1NSU9fUkVBRDoKIAkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLAotCQkJIlIgJWQgJWx1LiUwNmx1ICVkIDB4JWxseCAweCVseCAweCVseCAlZFxuIiwKKwkJCSJSICVkICV1LiUwNmx1ICVkIDB4JWxseCAweCVseCAweCVseCAlZFxuIiwKIAkJCXJ3LT53aWR0aCwgc2VjcywgdXNlY19yZW0sIHJ3LT5tYXBfaWQsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXJ3LT5waHlzLAogCQkJcnctPnZhbHVlLCBydy0+cGMsIDApOwogCQlicmVhazsKIAljYXNlIE1NSU9fV1JJVEU6CiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywKLQkJCSJXICVkICVsdS4lMDZsdSAlZCAweCVsbHggMHglbHggMHglbHggJWRcbiIsCisJCQkiVyAlZCAldS4lMDZsdSAlZCAweCVsbHggMHglbHggMHglbHggJWRcbiIsCiAJCQlydy0+d2lkdGgsIHNlY3MsIHVzZWNfcmVtLCBydy0+bWFwX2lkLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylydy0+cGh5cywKIAkJCXJ3LT52YWx1ZSwgcnctPnBjLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBNTUlPX1VOS05PV05fT1A6CiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywKLQkJCSJVTktOT1dOICVsdS4lMDZsdSAlZCAweCVsbHggJTAyeCwlMDJ4LCUwMnggMHglbHggJWRcbiIsCisJCQkiVU5LTk9XTiAldS4lMDZsdSAlZCAweCVsbHggJTAybHgsJTAybHgsIgorCQkJIiUwMmx4IDB4JWx4ICVkXG4iLAogCQkJc2VjcywgdXNlY19yZW0sIHJ3LT5tYXBfaWQsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKXJ3LT5waHlzLAogCQkJKHJ3LT52YWx1ZSA+PiAxNikgJiAweGZmLCAocnctPnZhbHVlID4+IDgpICYgMHhmZiwKQEAgLTIyOSwxNCArMjMxLDE0IEBACiAJc3dpdGNoIChtLT5vcGNvZGUpIHsKIAljYXNlIE1NSU9fUFJPQkU6CiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywKLQkJCSJNQVAgJWx1LiUwNmx1ICVkIDB4JWxseCAweCVseCAweCVseCAweCVseCAlZFxuIiwKKwkJCSJNQVAgJXUuJTA2bHUgJWQgMHglbGx4IDB4JWx4IDB4JWx4IDB4JWx4ICVkXG4iLAogCQkJc2VjcywgdXNlY19yZW0sIG0tPm1hcF9pZCwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbS0+cGh5cywgbS0+dmlydCwgbS0+bGVuLAogCQkJMFVMLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBNTUlPX1VOUFJPQkU6CiAJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywKLQkJCSJVTk1BUCAlbHUuJTA2bHUgJWQgMHglbHggJWRcbiIsCisJCQkiVU5NQVAgJXUuJTA2bHUgJWQgMHglbHggJWRcbiIsCiAJCQlzZWNzLCB1c2VjX3JlbSwgbS0+bWFwX2lkLCAwVUwsIDApOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjU1LDE4ICsyNTcsMTUgQEAKIAljb25zdCBjaGFyICptc2cJCT0gcHJpbnQtPmJ1ZjsKIAlzdHJ1Y3QgdHJhY2Vfc2VxICpzCT0gJml0ZXItPnNlcTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdAk9IG5zMnVzZWNzKGl0ZXItPnRzKTsKLQl1bnNpZ25lZCBsb25nIHVzZWNfcmVtCT0gZG9fZGl2KHQsIDEwMDAwMDBVTEwpOworCXVuc2lnbmVkIGxvbmcgdXNlY19yZW0JPSBkb19kaXYodCwgVVNFQ19QRVJfU0VDKTsKIAl1bnNpZ25lZCBzZWNzCQk9ICh1bnNpZ25lZCBsb25nKXQ7CiAJaW50IHJldDsKIAogCS8qIFRoZSB0cmFpbGluZyBuZXdsaW5lIG11c3QgYmUgaW4gdGhlIG1lc3NhZ2UuICovCi0JcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiTUFSSyAlbHUuJTA2bHUgJXMiLCBzZWNzLCB1c2VjX3JlbSwgbXNnKTsKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICJNQVJLICV1LiUwNmx1ICVzIiwgc2VjcywgdXNlY19yZW0sIG1zZyk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKIAotCWlmIChlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0NPTlQpCi0JCXRyYWNlX3NlcV9wcmludF9jb250KHMsIGl0ZXIpOwotCiAJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKIH0KIApAQCAtMzA4LDIxICszMDcsMTcgQEAKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCB0cmFjZV9tbWlvdHJhY2VfcncgKmVudHJ5OwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWludCBwYyA9IHByZWVtcHRfY291bnQoKTsKIAotCWV2ZW50CT0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgICAmaXJxX2ZsYWdzKTsKKwlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHIsIFRSQUNFX01NSU9fUlcsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIHBjKTsKIAlpZiAoIWV2ZW50KSB7CiAJCWF0b21pY19pbmMoJmRyb3BwZWRfY291bnQpOwogCQlyZXR1cm47CiAJfQogCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7Ci0JdHJhY2luZ19nZW5lcmljX2VudHJ5X3VwZGF0ZSgmZW50cnktPmVudCwgMCwgcHJlZW1wdF9jb3VudCgpKTsKLQllbnRyeS0+ZW50LnR5cGUJCQk9IFRSQUNFX01NSU9fUlc7CiAJZW50cnktPnJ3CQkJPSAqcnc7Ci0JcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdCh0ci0+YnVmZmVyLCBldmVudCwgaXJxX2ZsYWdzKTsKLQotCXRyYWNlX3dha2VfdXAoKTsKKwl0cmFjZV9idWZmZXJfdW5sb2NrX2NvbW1pdCh0ciwgZXZlbnQsIDAsIHBjKTsKIH0KIAogdm9pZCBtbWlvX3RyYWNlX3J3KHN0cnVjdCBtbWlvdHJhY2VfcncgKnJ3KQpAQCAtMzM4LDIxICszMzMsMTcgQEAKIHsKIAlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCXN0cnVjdCB0cmFjZV9tbWlvdHJhY2VfbWFwICplbnRyeTsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlpbnQgcGMgPSBwcmVlbXB0X2NvdW50KCk7CiAKLQlldmVudAk9IHJpbmdfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ci0+YnVmZmVyLCBzaXplb2YoKmVudHJ5KSwKLQkJCQkJICAgJmlycV9mbGFncyk7CisJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKHRyLCBUUkFDRV9NTUlPX01BUCwKKwkJCQkJICBzaXplb2YoKmVudHJ5KSwgMCwgcGMpOwogCWlmICghZXZlbnQpIHsKIAkJYXRvbWljX2luYygmZHJvcHBlZF9jb3VudCk7CiAJCXJldHVybjsKIAl9CiAJZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCAwLCBwcmVlbXB0X2NvdW50KCkpOwotCWVudHJ5LT5lbnQudHlwZQkJCT0gVFJBQ0VfTU1JT19NQVA7CiAJZW50cnktPm1hcAkJCT0gKm1hcDsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOwotCi0JdHJhY2Vfd2FrZV91cCgpOworCXRyYWNlX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLCBldmVudCwgMCwgcGMpOwogfQogCiB2b2lkIG1taW9fdHJhY2VfbWFwcGluZyhzdHJ1Y3QgbW1pb3RyYWNlX21hcCAqbWFwKQpAQCAtMzY4LDUgKzM1OSw1IEBACiAKIGludCBtbWlvX3RyYWNlX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKLQlyZXR1cm4gdHJhY2VfdnByaW50aygwLCAtMSwgZm10LCBhcmdzKTsKKwlyZXR1cm4gdHJhY2VfdnByaW50aygwLCBmbXQsIGFyZ3MpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX25vcC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX25vcC5jCmluZGV4IGI5NzY3YWMuLjM5NGY5NDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ub3AuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfbm9wLmMKQEAgLTQ3LDEyICs0Nyw3IEBACiAKIHN0YXRpYyBpbnQgbm9wX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQlpbnQgY3B1OwogCWN0eF90cmFjZSA9IHRyOwotCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7Ci0KIAlzdGFydF9ub3BfdHJhY2UodHIpOwogCXJldHVybiAwOwogfQpAQCAtOTYsNiArOTEsNyBAQAogCS5uYW1lCQk9ICJub3AiLAogCS5pbml0CQk9IG5vcF90cmFjZV9pbml0LAogCS5yZXNldAkJPSBub3BfdHJhY2VfcmVzZXQsCisJLndhaXRfcGlwZQk9IHBvbGxfd2FpdF9waXBlLAogI2lmZGVmIENPTkZJR19GVFJBQ0VfU0VMRlRFU1QKIAkuc2VsZnRlc3QJPSB0cmFjZV9zZWxmdGVzdF9zdGFydHVwX25vcCwKICNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MmI5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKQEAgLTAsMCArMSwxMDE3IEBACisvKgorICogdHJhY2Vfb3V0cHV0LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCBJbmMsIFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKworI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgorCisvKiBtdXN0IGJlIGEgcG93ZXIgb2YgMiAqLworI2RlZmluZSBFVkVOVF9IQVNIU0laRQkxMjgKKworc3RhdGljIERFRklORV9NVVRFWCh0cmFjZV9ldmVudF9tdXRleCk7CitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgZXZlbnRfaGFzaFtFVkVOVF9IQVNIU0laRV0gX19yZWFkX21vc3RseTsKKworc3RhdGljIGludCBuZXh0X2V2ZW50X3R5cGUgPSBfX1RSQUNFX0xBU1RfVFlQRSArIDE7CisKK2VudW0gcHJpbnRfbGluZV90IHRyYWNlX3ByaW50X2JwcmludGtfbXNnX29ubHkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKQoreworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnkgPSBpdGVyLT5lbnQ7CisJc3RydWN0IGJwcmludF9lbnRyeSAqZmllbGQ7CisJaW50IHJldDsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwlyZXQgPSB0cmFjZV9zZXFfYnByaW50ZihzLCBmaWVsZC0+Zm10LCBmaWVsZC0+YnVmKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworZW51bSBwcmludF9saW5lX3QgdHJhY2VfcHJpbnRfcHJpbnRrX21zZ19vbmx5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OworCXN0cnVjdCBwcmludF9lbnRyeSAqZmllbGQ7CisJaW50IHJldDsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlcyIsIGZpZWxkLT5idWYpOworCWlmICghcmV0KQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCisvKioKKyAqIHRyYWNlX3NlcV9wcmludGYgLSBzZXF1ZW5jZSBwcmludGluZyBvZiB0cmFjZSBpbmZvcm1hdGlvbgorICogQHM6IHRyYWNlIHNlcXVlbmNlIGRlc2NyaXB0b3IKKyAqIEBmbXQ6IHByaW50ZiBmb3JtYXQgc3RyaW5nCisgKgorICogVGhlIHRyYWNlciBtYXkgdXNlIGVpdGhlciBzZXF1ZW5jZSBvcGVyYXRpb25zIG9yIGl0cyBvd24KKyAqIGNvcHkgdG8gdXNlciByb3V0aW5lcy4gVG8gc2ltcGxpZnkgZm9ybWF0aW5nIG9mIGEgdHJhY2UKKyAqIHRyYWNlX3NlcV9wcmludGYgaXMgdXNlZCB0byBzdG9yZSBzdHJpbmdzIGludG8gYSBzcGVjaWFsCisgKiBidWZmZXIgKEBzKS4gVGhlbiB0aGUgb3V0cHV0IG1heSBiZSBlaXRoZXIgdXNlZCBieQorICogdGhlIHNlcXVlbmNlciBvciBwdWxsZWQgaW50byBhbm90aGVyIGJ1ZmZlci4KKyAqLworaW50Cit0cmFjZV9zZXFfcHJpbnRmKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCBsZW4gPSAoUEFHRV9TSVpFIC0gMSkgLSBzLT5sZW47CisJdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdnNucHJpbnRmKHMtPmJ1ZmZlciArIHMtPmxlbiwgbGVuLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJLyogSWYgd2UgY2FuJ3Qgd3JpdGUgaXQgYWxsLCBkb24ndCBib3RoZXIgd3JpdGluZyBhbnl0aGluZyAqLworCWlmIChyZXQgPj0gbGVuKQorCQlyZXR1cm4gMDsKKworCXMtPmxlbiArPSByZXQ7CisKKwlyZXR1cm4gbGVuOworfQorCitpbnQgdHJhY2Vfc2VxX2JwcmludGYoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCBjb25zdCB1MzIgKmJpbmFyeSkKK3sKKwlpbnQgbGVuID0gKFBBR0VfU0laRSAtIDEpIC0gcy0+bGVuOworCWludCByZXQ7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBic3RyX3ByaW50ZihzLT5idWZmZXIgKyBzLT5sZW4sIGxlbiwgZm10LCBiaW5hcnkpOworCisJLyogSWYgd2UgY2FuJ3Qgd3JpdGUgaXQgYWxsLCBkb24ndCBib3RoZXIgd3JpdGluZyBhbnl0aGluZyAqLworCWlmIChyZXQgPj0gbGVuKQorCQlyZXR1cm4gMDsKKworCXMtPmxlbiArPSByZXQ7CisKKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIHRyYWNlX3NlcV9wdXRzIC0gdHJhY2Ugc2VxdWVuY2UgcHJpbnRpbmcgb2Ygc2ltcGxlIHN0cmluZworICogQHM6IHRyYWNlIHNlcXVlbmNlIGRlc2NyaXB0b3IKKyAqIEBzdHI6IHNpbXBsZSBzdHJpbmcgdG8gcmVjb3JkCisgKgorICogVGhlIHRyYWNlciBtYXkgdXNlIGVpdGhlciB0aGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyBvciBpdHMgb3duCisgKiBjb3B5IHRvIHVzZXIgcm91dGluZXMuIFRoaXMgZnVuY3Rpb24gcmVjb3JkcyBhIHNpbXBsZSBzdHJpbmcKKyAqIGludG8gYSBzcGVjaWFsIGJ1ZmZlciAoQHMpIGZvciBsYXRlciByZXRyaWV2YWwgYnkgYSBzZXF1ZW5jZXIKKyAqIG9yIG90aGVyIG1lY2hhbmlzbS4KKyAqLworaW50IHRyYWNlX3NlcV9wdXRzKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgbGVuID0gc3RybGVuKHN0cik7CisKKwlpZiAobGVuID4gKChQQUdFX1NJWkUgLSAxKSAtIHMtPmxlbikpCisJCXJldHVybiAwOworCisJbWVtY3B5KHMtPmJ1ZmZlciArIHMtPmxlbiwgc3RyLCBsZW4pOworCXMtPmxlbiArPSBsZW47CisKKwlyZXR1cm4gbGVuOworfQorCitpbnQgdHJhY2Vfc2VxX3B1dGMoc3RydWN0IHRyYWNlX3NlcSAqcywgdW5zaWduZWQgY2hhciBjKQoreworCWlmIChzLT5sZW4gPj0gKFBBR0VfU0laRSAtIDEpKQorCQlyZXR1cm4gMDsKKworCXMtPmJ1ZmZlcltzLT5sZW4rK10gPSBjOworCisJcmV0dXJuIDE7Cit9CisKK2ludCB0cmFjZV9zZXFfcHV0bWVtKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbikKK3sKKwlpZiAobGVuID4gKChQQUdFX1NJWkUgLSAxKSAtIHMtPmxlbikpCisJCXJldHVybiAwOworCisJbWVtY3B5KHMtPmJ1ZmZlciArIHMtPmxlbiwgbWVtLCBsZW4pOworCXMtPmxlbiArPSBsZW47CisKKwlyZXR1cm4gbGVuOworfQorCitpbnQgdHJhY2Vfc2VxX3B1dG1lbV9oZXgoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3Qgdm9pZCAqbWVtLCBzaXplX3QgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgaGV4W0hFWF9DSEFSU107CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9IG1lbTsKKwlpbnQgaSwgajsKKworI2lmZGVmIF9fQklHX0VORElBTgorCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbGVuOyBpKyspIHsKKyNlbHNlCisJZm9yIChpID0gbGVuLTEsIGogPSAwOyBpID49IDA7IGktLSkgeworI2VuZGlmCisJCWhleFtqKytdID0gaGV4X2FzY19oaShkYXRhW2ldKTsKKwkJaGV4W2orK10gPSBoZXhfYXNjX2xvKGRhdGFbaV0pOworCX0KKwloZXhbaisrXSA9ICcgJzsKKworCXJldHVybiB0cmFjZV9zZXFfcHV0bWVtKHMsIGhleCwgaik7Cit9CisKK3ZvaWQgKnRyYWNlX3NlcV9yZXNlcnZlKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHNpemVfdCBsZW4pCit7CisJdm9pZCAqcmV0OworCisJaWYgKGxlbiA+ICgoUEFHRV9TSVpFIC0gMSkgLSBzLT5sZW4pKQorCQlyZXR1cm4gTlVMTDsKKworCXJldCA9IHMtPmJ1ZmZlciArIHMtPmxlbjsKKwlzLT5sZW4gKz0gbGVuOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHRyYWNlX3NlcV9wYXRoKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHN0cnVjdCBwYXRoICpwYXRoKQoreworCXVuc2lnbmVkIGNoYXIgKnA7CisKKwlpZiAocy0+bGVuID49IChQQUdFX1NJWkUgLSAxKSkKKwkJcmV0dXJuIDA7CisJcCA9IGRfcGF0aChwYXRoLCBzLT5idWZmZXIgKyBzLT5sZW4sIFBBR0VfU0laRSAtIHMtPmxlbik7CisJaWYgKCFJU19FUlIocCkpIHsKKwkJcCA9IG1hbmdsZV9wYXRoKHMtPmJ1ZmZlciArIHMtPmxlbiwgcCwgIlxuIik7CisJCWlmIChwKSB7CisJCQlzLT5sZW4gPSBwIC0gcy0+YnVmZmVyOworCQkJcmV0dXJuIDE7CisJCX0KKwl9IGVsc2UgeworCQlzLT5idWZmZXJbcy0+bGVuKytdID0gJz8nOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19LUkVUUFJPQkVTCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmtyZXRwcm9iZWQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciB0cmFtcF9uYW1lW10gPSAia3JldHByb2JlX3RyYW1wb2xpbmUiOworCWludCBzaXplID0gc2l6ZW9mKHRyYW1wX25hbWUpOworCisJaWYgKHN0cm5jbXAodHJhbXBfbmFtZSwgbmFtZSwgc2l6ZSkgPT0gMCkKKwkJcmV0dXJuICJbdW5rbm93bi9rcmV0cHJvYmUnZF0iOworCXJldHVybiBuYW1lOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqa3JldHByb2JlZChjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiBuYW1lOworfQorI2VuZGlmIC8qIENPTkZJR19LUkVUUFJPQkVTICovCisKK3N0YXRpYyBpbnQKK3NlcV9wcmludF9zeW1fc2hvcnQoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqZm10LCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisjaWZkZWYgQ09ORklHX0tBTExTWU1TCisJY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKKwljb25zdCBjaGFyICpuYW1lOworCisJa2FsbHN5bXNfbG9va3VwKGFkZHJlc3MsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7CisKKwluYW1lID0ga3JldHByb2JlZChzdHIpOworCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgZm10LCBuYW1lKTsKKyNlbmRpZgorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitzZXFfcHJpbnRfc3ltX29mZnNldChzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsCisJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworI2lmZGVmIENPTkZJR19LQUxMU1lNUworCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CisJY29uc3QgY2hhciAqbmFtZTsKKworCXNwcmludF9zeW1ib2woc3RyLCBhZGRyZXNzKTsKKwluYW1lID0ga3JldHByb2JlZChzdHIpOworCisJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgZm10LCBuYW1lKTsKKyNlbmRpZgorCXJldHVybiAxOworfQorCisjaWZuZGVmIENPTkZJR182NEJJVAorIyBkZWZpbmUgSVBfRk1UICIlMDhseCIKKyNlbHNlCisjIGRlZmluZSBJUF9GTVQgIiUwMTZseCIKKyNlbmRpZgorCitpbnQgc2VxX3ByaW50X3VzZXJfaXAoc3RydWN0IHRyYWNlX3NlcSAqcywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHZtc3RhcnQgPSAwOworCWludCByZXQgPSAxOworCisJaWYgKG1tKSB7CisJCWNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCisJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJdm1hID0gZmluZF92bWEobW0sIGlwKTsKKwkJaWYgKHZtYSkgeworCQkJZmlsZSA9IHZtYS0+dm1fZmlsZTsKKwkJCXZtc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCQl9CisJCWlmIChmaWxlKSB7CisJCQlyZXQgPSB0cmFjZV9zZXFfcGF0aChzLCAmZmlsZS0+Zl9wYXRoKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiWysweCVseF0iLAorCQkJCQkJICAgICAgIGlwIC0gdm1zdGFydCk7CisJCX0KKwkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwl9CisJaWYgKHJldCAmJiAoKHN5bV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX0FERFIpIHx8ICFmaWxlKSkKKwkJcmV0ID0gdHJhY2Vfc2VxX3ByaW50ZihzLCAiIDwiIElQX0ZNVCAiPiIsIGlwKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK3NlcV9wcmludF91c2VyaXBfb2Jqcyhjb25zdCBzdHJ1Y3QgdXNlcnN0YWNrX2VudHJ5ICplbnRyeSwgc3RydWN0IHRyYWNlX3NlcSAqcywKKwkJICAgICAgdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBOVUxMOworCWludCByZXQgPSAxOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9TWU1fVVNFUk9CSikgeworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJCS8qCisJCSAqIHdlIGRvIHRoZSBsb29rdXAgb24gdGhlIHRocmVhZCBncm91cCBsZWFkZXIsCisJCSAqIHNpbmNlIGluZGl2aWR1YWwgdGhyZWFkcyBtaWdodCBoYXZlIGFscmVhZHkgcXVpdCEKKwkJICovCisJCXJjdV9yZWFkX2xvY2soKTsKKwkJdGFzayA9IGZpbmRfdGFza19ieV92cGlkKGVudHJ5LT5lbnQudGdpZCk7CisJCWlmICh0YXNrKQorCQkJbW0gPSBnZXRfdGFza19tbSh0YXNrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEZUUkFDRV9TVEFDS19FTlRSSUVTOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBpcCA9IGVudHJ5LT5jYWxsZXJbaV07CisKKwkJaWYgKGlwID09IFVMT05HX01BWCB8fCAhcmV0KQorCQkJYnJlYWs7CisJCWlmIChpICYmIHJldCkKKwkJCXJldCA9IHRyYWNlX3NlcV9wdXRzKHMsICIgPC0gIik7CisJCWlmICghaXApIHsKKwkJCWlmIChyZXQpCisJCQkJcmV0ID0gdHJhY2Vfc2VxX3B1dHMocywgIj8/Iik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXJldCkKKwkJCWJyZWFrOworCQlpZiAocmV0KQorCQkJcmV0ID0gc2VxX3ByaW50X3VzZXJfaXAocywgbW0sIGlwLCBzeW1fZmxhZ3MpOworCX0KKworCWlmIChtbSkKKwkJbW1wdXQobW0pOworCXJldHVybiByZXQ7Cit9CisKK2ludAorc2VxX3ByaW50X2lwX3N5bShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHN5bV9mbGFncykKK3sKKwlpbnQgcmV0OworCisJaWYgKCFpcCkKKwkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIjAiKTsKKworCWlmIChzeW1fZmxhZ3MgJiBUUkFDRV9JVEVSX1NZTV9PRkZTRVQpCisJCXJldCA9IHNlcV9wcmludF9zeW1fb2Zmc2V0KHMsICIlcyIsIGlwKTsKKwllbHNlCisJCXJldCA9IHNlcV9wcmludF9zeW1fc2hvcnQocywgIiVzIiwgaXApOworCisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJaWYgKHN5bV9mbGFncyAmIFRSQUNFX0lURVJfU1lNX0FERFIpCisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiA8IiBJUF9GTVQgIj4iLCBpcCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAorbGF0X3ByaW50X2dlbmVyaWMoc3RydWN0IHRyYWNlX3NlcSAqcywgc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSwgaW50IGNwdSkKK3sKKwlpbnQgaGFyZGlycSwgc29mdGlycTsKKwljaGFyIGNvbW1bVEFTS19DT01NX0xFTl07CisKKwl0cmFjZV9maW5kX2NtZGxpbmUoZW50cnktPnBpZCwgY29tbSk7CisJaGFyZGlycSA9IGVudHJ5LT5mbGFncyAmIFRSQUNFX0ZMQUdfSEFSRElSUTsKKwlzb2Z0aXJxID0gZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19TT0ZUSVJROworCisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICIlOC44cy0lLTVkICUzZCVjJWMlYyIsCisJCQkgICAgICBjb21tLCBlbnRyeS0+cGlkLCBjcHUsCisJCQkgICAgICAoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19JUlFTX09GRikgPyAnZCcgOgorCQkJCShlbnRyeS0+ZmxhZ3MgJiBUUkFDRV9GTEFHX0lSUVNfTk9TVVBQT1JUKSA/CisJCQkJICAnWCcgOiAnLicsCisJCQkgICAgICAoZW50cnktPmZsYWdzICYgVFJBQ0VfRkxBR19ORUVEX1JFU0NIRUQpID8KKwkJCQknTicgOiAnLicsCisJCQkgICAgICAoaGFyZGlycSAmJiBzb2Z0aXJxKSA/ICdIJyA6CisJCQkJaGFyZGlycSA/ICdoJyA6IHNvZnRpcnEgPyAncycgOiAnLicpKQorCQlyZXR1cm4gMDsKKworCWlmIChlbnRyeS0+cHJlZW1wdF9jb3VudCkKKwkJcmV0dXJuIHRyYWNlX3NlcV9wcmludGYocywgIiV4IiwgZW50cnktPnByZWVtcHRfY291bnQpOworCXJldHVybiB0cmFjZV9zZXFfcHV0cyhzLCAiLiIpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcmVlbXB0X21hcmtfdGhyZXNoID0gMTAwOworCitzdGF0aWMgaW50CitsYXRfcHJpbnRfdGltZXN0YW1wKHN0cnVjdCB0cmFjZV9zZXEgKnMsIHU2NCBhYnNfdXNlY3MsCisJCSAgICB1bnNpZ25lZCBsb25nIHJlbF91c2VjcykKK3sKKwlyZXR1cm4gdHJhY2Vfc2VxX3ByaW50ZihzLCAiICU0bGxkdXMlYzogIiwgYWJzX3VzZWNzLAorCQkJCXJlbF91c2VjcyA+IHByZWVtcHRfbWFya190aHJlc2ggPyAnIScgOgorCQkJCSAgcmVsX3VzZWNzID4gMSA/ICcrJyA6ICcgJyk7Cit9CisKK2ludCB0cmFjZV9wcmludF9jb250ZXh0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKK3sKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50OworCXVuc2lnbmVkIGxvbmcgbG9uZyB0ID0gbnMydXNlY3MoaXRlci0+dHMpOworCXVuc2lnbmVkIGxvbmcgdXNlY19yZW0gPSBkb19kaXYodCwgVVNFQ19QRVJfU0VDKTsKKwl1bnNpZ25lZCBsb25nIHNlY3MgPSAodW5zaWduZWQgbG9uZyl0OworCWNoYXIgY29tbVtUQVNLX0NPTU1fTEVOXTsKKworCXRyYWNlX2ZpbmRfY21kbGluZShlbnRyeS0+cGlkLCBjb21tKTsKKworCXJldHVybiB0cmFjZV9zZXFfcHJpbnRmKHMsICIlMTZzLSUtNWQgWyUwM2RdICU1bHUuJTA2bHU6ICIsCisJCQkJY29tbSwgZW50cnktPnBpZCwgaXRlci0+Y3B1LCBzZWNzLCB1c2VjX3JlbSk7Cit9CisKK2ludCB0cmFjZV9wcmludF9sYXRfY29udGV4dChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIpCit7CisJdTY0IG5leHRfdHM7CisJaW50IHJldDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudHJ5ID0gaXRlci0+ZW50LAorCQkJICAgKm5leHRfZW50cnkgPSB0cmFjZV9maW5kX25leHRfZW50cnkoaXRlciwgTlVMTCwKKwkJCQkJCQkgICAgICAgJm5leHRfdHMpOworCXVuc2lnbmVkIGxvbmcgdmVyYm9zZSA9ICh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfVkVSQk9TRSk7CisJdW5zaWduZWQgbG9uZyBhYnNfdXNlY3MgPSBuczJ1c2VjcyhpdGVyLT50cyAtIGl0ZXItPnRyLT50aW1lX3N0YXJ0KTsKKwl1bnNpZ25lZCBsb25nIHJlbF91c2VjczsKKworCWlmICghbmV4dF9lbnRyeSkKKwkJbmV4dF90cyA9IGl0ZXItPnRzOworCXJlbF91c2VjcyA9IG5zMnVzZWNzKG5leHRfdHMgLSBpdGVyLT50cyk7CisKKwlpZiAodmVyYm9zZSkgeworCQljaGFyIGNvbW1bVEFTS19DT01NX0xFTl07CisKKwkJdHJhY2VfZmluZF9jbWRsaW5lKGVudHJ5LT5waWQsIGNvbW0pOworCisJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiUxNnMgJTVkICUzZCAlZCAlMDh4ICUwOGx4IFslMDhseF0iCisJCQkJICAgICAgICIgJWxkLiUwM2xkbXMgKCslbGQuJTAzbGRtcyk6ICIsIGNvbW0sCisJCQkJICAgICAgIGVudHJ5LT5waWQsIGl0ZXItPmNwdSwgZW50cnktPmZsYWdzLAorCQkJCSAgICAgICBlbnRyeS0+cHJlZW1wdF9jb3VudCwgaXRlci0+aWR4LAorCQkJCSAgICAgICBuczJ1c2VjcyhpdGVyLT50cyksCisJCQkJICAgICAgIGFic191c2VjcyAvIFVTRUNfUEVSX01TRUMsCisJCQkJICAgICAgIGFic191c2VjcyAlIFVTRUNfUEVSX01TRUMsCisJCQkJICAgICAgIHJlbF91c2VjcyAvIFVTRUNfUEVSX01TRUMsCisJCQkJICAgICAgIHJlbF91c2VjcyAlIFVTRUNfUEVSX01TRUMpOworCX0gZWxzZSB7CisJCXJldCA9IGxhdF9wcmludF9nZW5lcmljKHMsIGVudHJ5LCBpdGVyLT5jcHUpOworCQlpZiAocmV0KQorCQkJcmV0ID0gbGF0X3ByaW50X3RpbWVzdGFtcChzLCBhYnNfdXNlY3MsIHJlbF91c2Vjcyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgc3RhdGVfdG9fY2hhcltdID0gVEFTS19TVEFURV9UT19DSEFSX1NUUjsKKworc3RhdGljIGludCB0YXNrX3N0YXRlX2NoYXIodW5zaWduZWQgbG9uZyBzdGF0ZSkKK3sKKwlpbnQgYml0ID0gc3RhdGUgPyBfX2ZmcyhzdGF0ZSkgKyAxIDogMDsKKworCXJldHVybiBiaXQgPCBzaXplb2Yoc3RhdGVfdG9fY2hhcikgLSAxID8gc3RhdGVfdG9fY2hhcltiaXRdIDogJz8nOworfQorCisvKioKKyAqIGZ0cmFjZV9maW5kX2V2ZW50IC0gZmluZCBhIHJlZ2lzdGVyZWQgZXZlbnQKKyAqIEB0eXBlOiB0aGUgdHlwZSBvZiBldmVudCB0byBsb29rIGZvcgorICoKKyAqIFJldHVybnMgYW4gZXZlbnQgb2YgdHlwZSBAdHlwZSBvdGhlcndpc2UgTlVMTAorICovCitzdHJ1Y3QgdHJhY2VfZXZlbnQgKmZ0cmFjZV9maW5kX2V2ZW50KGludCB0eXBlKQoreworCXN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisJdW5zaWduZWQga2V5OworCisJa2V5ID0gdHlwZSAmIChFVkVOVF9IQVNIU0laRSAtIDEpOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGV2ZW50LCBuLCAmZXZlbnRfaGFzaFtrZXldLCBub2RlKSB7CisJCWlmIChldmVudC0+dHlwZSA9PSB0eXBlKQorCQkJcmV0dXJuIGV2ZW50OworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHJlZ2lzdGVyX2Z0cmFjZV9ldmVudCAtIHJlZ2lzdGVyIG91dHB1dCBmb3IgYW4gZXZlbnQgdHlwZQorICogQGV2ZW50OiB0aGUgZXZlbnQgdHlwZSB0byByZWdpc3RlcgorICoKKyAqIEV2ZW50IHR5cGVzIGFyZSBzdG9yZWQgaW4gYSBoYXNoIGFuZCB0aGlzIGhhc2ggaXMgdXNlZCB0bworICogZmluZCBhIHdheSB0byBwcmludCBhbiBldmVudC4gSWYgdGhlIEBldmVudC0+dHlwZSBpcyBzZXQKKyAqIHRoZW4gaXQgd2lsbCB1c2UgdGhhdCB0eXBlLCBvdGhlcndpc2UgaXQgd2lsbCBhc3NpZ24gYQorICogdHlwZSB0byB1c2UuCisgKgorICogSWYgeW91IGFzc2lnbiB5b3VyIG93biB0eXBlLCBwbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGFkZGVkCisgKiB0byB0aGUgdHJhY2VfdHlwZSBlbnVtIGluIHRyYWNlLmgsIHRvIGF2b2lkIGNvbGxpc2lvbnMKKyAqIHdpdGggdGhlIGR5bmFtaWMgdHlwZXMuCisgKgorICogUmV0dXJucyB0aGUgZXZlbnQgdHlwZSBudW1iZXIgb3IgemVybyBvbiBlcnJvci4KKyAqLworaW50IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudChzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KQoreworCXVuc2lnbmVkIGtleTsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJnRyYWNlX2V2ZW50X211dGV4KTsKKworCWlmICghZXZlbnQpIHsKKwkJcmV0ID0gbmV4dF9ldmVudF90eXBlKys7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghZXZlbnQtPnR5cGUpCisJCWV2ZW50LT50eXBlID0gbmV4dF9ldmVudF90eXBlKys7CisJZWxzZSBpZiAoZXZlbnQtPnR5cGUgPiBfX1RSQUNFX0xBU1RfVFlQRSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJOZWVkIHRvIGFkZCB0eXBlIHRvIHRyYWNlLmhcbiIpOworCQlXQVJOX09OKDEpOworCX0KKworCWlmIChmdHJhY2VfZmluZF9ldmVudChldmVudC0+dHlwZSkpCisJCWdvdG8gb3V0OworCisJaWYgKGV2ZW50LT50cmFjZSA9PSBOVUxMKQorCQlldmVudC0+dHJhY2UgPSB0cmFjZV9ub3BfcHJpbnQ7CisJaWYgKGV2ZW50LT5yYXcgPT0gTlVMTCkKKwkJZXZlbnQtPnJhdyA9IHRyYWNlX25vcF9wcmludDsKKwlpZiAoZXZlbnQtPmhleCA9PSBOVUxMKQorCQlldmVudC0+aGV4ID0gdHJhY2Vfbm9wX3ByaW50OworCWlmIChldmVudC0+YmluYXJ5ID09IE5VTEwpCisJCWV2ZW50LT5iaW5hcnkgPSB0cmFjZV9ub3BfcHJpbnQ7CisKKwlrZXkgPSBldmVudC0+dHlwZSAmIChFVkVOVF9IQVNIU0laRSAtIDEpOworCisJaGxpc3RfYWRkX2hlYWRfcmN1KCZldmVudC0+bm9kZSwgJmV2ZW50X2hhc2hba2V5XSk7CisKKwlyZXQgPSBldmVudC0+dHlwZTsKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZV9ldmVudF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHVucmVnaXN0ZXJfZnRyYWNlX2V2ZW50IC0gcmVtb3ZlIGEgbm8gbG9uZ2VyIHVzZWQgZXZlbnQKKyAqIEBldmVudDogdGhlIGV2ZW50IHRvIHJlbW92ZQorICovCitpbnQgdW5yZWdpc3Rlcl9mdHJhY2VfZXZlbnQoc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudCkKK3sKKwltdXRleF9sb2NrKCZ0cmFjZV9ldmVudF9tdXRleCk7CisJaGxpc3RfZGVsKCZldmVudC0+bm9kZSk7CisJbXV0ZXhfdW5sb2NrKCZ0cmFjZV9ldmVudF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFN0YW5kYXJkIGV2ZW50cworICovCisKK2VudW0gcHJpbnRfbGluZV90IHRyYWNlX25vcF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCisvKiBUUkFDRV9GTiAqLworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX2ZuX3RyYWNlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXN0cnVjdCBmdHJhY2VfZW50cnkgKmZpZWxkOworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlpZiAoIXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmlwLCBmbGFncykpCisJCWdvdG8gcGFydGlhbDsKKworCWlmICgoZmxhZ3MgJiBUUkFDRV9JVEVSX1BSSU5UX1BBUkVOVCkgJiYgZmllbGQtPnBhcmVudF9pcCkgeworCQlpZiAoIXRyYWNlX3NlcV9wcmludGYocywgIiA8LSIpKQorCQkJZ290byBwYXJ0aWFsOworCQlpZiAoIXNlcV9wcmludF9pcF9zeW0ocywKKwkJCQkgICAgICBmaWVsZC0+cGFyZW50X2lwLAorCQkJCSAgICAgIGZsYWdzKSkKKwkJCWdvdG8gcGFydGlhbDsKKwl9CisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKHMsICJcbiIpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCisgcGFydGlhbDoKKwlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9mbl9yYXcoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZmllbGQ7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCWlmICghdHJhY2Vfc2VxX3ByaW50ZigmaXRlci0+c2VxLCAiJWx4ICVseFxuIiwKKwkJCSAgICAgIGZpZWxkLT5pcCwKKwkJCSAgICAgIGZpZWxkLT5wYXJlbnRfaXApKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfZm5faGV4KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXN0cnVjdCBmdHJhY2VfZW50cnkgKmZpZWxkOworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPmlwKTsKKwlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPnBhcmVudF9pcCk7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfZm5fYmluKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXN0cnVjdCBmdHJhY2VfZW50cnkgKmZpZWxkOworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+aXApOworCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5wYXJlbnRfaXApOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV9mbl9ldmVudCA9IHsKKwkudHlwZQkJPSBUUkFDRV9GTiwKKwkudHJhY2UJCT0gdHJhY2VfZm5fdHJhY2UsCisJLnJhdwkJPSB0cmFjZV9mbl9yYXcsCisJLmhleAkJPSB0cmFjZV9mbl9oZXgsCisJLmJpbmFyeQkJPSB0cmFjZV9mbl9iaW4sCit9OworCisvKiBUUkFDRV9DVFggYW4gVFJBQ0VfV0FLRSAqLworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX2N0eHdha2VfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgICAgIGNoYXIgKmRlbGltKQoreworCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKKwljaGFyIGNvbW1bVEFTS19DT01NX0xFTl07CisJaW50IFMsIFQ7CisKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJVCA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+bmV4dF9zdGF0ZSk7CisJUyA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7CisJdHJhY2VfZmluZF9jbWRsaW5lKGZpZWxkLT5uZXh0X3BpZCwgY29tbSk7CisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsCisJCQkgICAgICAiICU1ZDolM2Q6JWMgJXMgWyUwM2RdICU1ZDolM2Q6JWMgJXNcbiIsCisJCQkgICAgICBmaWVsZC0+cHJldl9waWQsCisJCQkgICAgICBmaWVsZC0+cHJldl9wcmlvLAorCQkJICAgICAgUywgZGVsaW0sCisJCQkgICAgICBmaWVsZC0+bmV4dF9jcHUsCisJCQkgICAgICBmaWVsZC0+bmV4dF9waWQsCisJCQkgICAgICBmaWVsZC0+bmV4dF9wcmlvLAorCQkJICAgICAgVCwgY29tbSkpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9jdHhfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHRyYWNlX2N0eHdha2VfcHJpbnQoaXRlciwgIj09PiIpOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2Vfd2FrZV9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgaW50IGZsYWdzKQoreworCXJldHVybiB0cmFjZV9jdHh3YWtlX3ByaW50KGl0ZXIsICIgICsiKTsKK30KKworc3RhdGljIGludCB0cmFjZV9jdHh3YWtlX3JhdyhzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGNoYXIgUykKK3sKKwlzdHJ1Y3QgY3R4X3N3aXRjaF9lbnRyeSAqZmllbGQ7CisJaW50IFQ7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCWlmICghUykKKwkJdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5wcmV2X3N0YXRlKTsKKwlUID0gdGFza19zdGF0ZV9jaGFyKGZpZWxkLT5uZXh0X3N0YXRlKTsKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIiVkICVkICVjICVkICVkICVkICVjXG4iLAorCQkJICAgICAgZmllbGQtPnByZXZfcGlkLAorCQkJICAgICAgZmllbGQtPnByZXZfcHJpbywKKwkJCSAgICAgIFMsCisJCQkgICAgICBmaWVsZC0+bmV4dF9jcHUsCisJCQkgICAgICBmaWVsZC0+bmV4dF9waWQsCisJCQkgICAgICBmaWVsZC0+bmV4dF9wcmlvLAorCQkJICAgICAgVCkpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9jdHhfcmF3KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXJldHVybiB0cmFjZV9jdHh3YWtlX3JhdyhpdGVyLCAwKTsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX3dha2VfcmF3KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzKQoreworCXJldHVybiB0cmFjZV9jdHh3YWtlX3JhdyhpdGVyLCAnKycpOworfQorCisKK3N0YXRpYyBpbnQgdHJhY2VfY3R4d2FrZV9oZXgoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBjaGFyIFMpCit7CisJc3RydWN0IGN0eF9zd2l0Y2hfZW50cnkgKmZpZWxkOworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCWludCBUOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlpZiAoIVMpCisJCXRhc2tfc3RhdGVfY2hhcihmaWVsZC0+cHJldl9zdGF0ZSk7CisJVCA9IHRhc2tfc3RhdGVfY2hhcihmaWVsZC0+bmV4dF9zdGF0ZSk7CisKKwlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcGlkKTsKKwlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcHJpbyk7CisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIFMpOworCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9jcHUpOworCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9waWQpOworCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9wcmlvKTsKKwlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgVCk7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfY3R4X2hleChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlyZXR1cm4gdHJhY2VfY3R4d2FrZV9oZXgoaXRlciwgMCk7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV93YWtlX2hleChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlyZXR1cm4gdHJhY2VfY3R4d2FrZV9oZXgoaXRlciwgJysnKTsKK30KKworc3RhdGljIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX2N0eHdha2VfYmluKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBjdHhfc3dpdGNoX2VudHJ5ICpmaWVsZDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPnByZXZfcGlkKTsKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9wcmlvKTsKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+cHJldl9zdGF0ZSk7CisJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPm5leHRfcGlkKTsKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9wcmlvKTsKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+bmV4dF9zdGF0ZSk7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHRyYWNlX2N0eF9ldmVudCA9IHsKKwkudHlwZQkJPSBUUkFDRV9DVFgsCisJLnRyYWNlCQk9IHRyYWNlX2N0eF9wcmludCwKKwkucmF3CQk9IHRyYWNlX2N0eF9yYXcsCisJLmhleAkJPSB0cmFjZV9jdHhfaGV4LAorCS5iaW5hcnkJCT0gdHJhY2VfY3R4d2FrZV9iaW4sCit9OworCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50IHRyYWNlX3dha2VfZXZlbnQgPSB7CisJLnR5cGUJCT0gVFJBQ0VfV0FLRSwKKwkudHJhY2UJCT0gdHJhY2Vfd2FrZV9wcmludCwKKwkucmF3CQk9IHRyYWNlX3dha2VfcmF3LAorCS5oZXgJCT0gdHJhY2Vfd2FrZV9oZXgsCisJLmJpbmFyeQkJPSB0cmFjZV9jdHh3YWtlX2JpbiwKK307CisKKy8qIFRSQUNFX1NQRUNJQUwgKi8KK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9zcGVjaWFsX3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwKKwkJCQkJICAgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIiMgJWxkICVsZCAlbGRcbiIsCisJCQkgICAgICBmaWVsZC0+YXJnMSwKKwkJCSAgICAgIGZpZWxkLT5hcmcyLAorCQkJICAgICAgZmllbGQtPmFyZzMpKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworfQorCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2Vfc3BlY2lhbF9oZXgoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAorCQkJCQkgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHNwZWNpYWxfZW50cnkgKmZpZWxkOworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlTRVFfUFVUX0hFWF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzEpOworCVNFUV9QVVRfSEVYX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMik7CisJU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIGZpZWxkLT5hcmczKTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9zcGVjaWFsX2JpbihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3BlY2lhbF9lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCVNFUV9QVVRfRklFTERfUkVUKHMsIGZpZWxkLT5hcmcxKTsKKwlTRVFfUFVUX0ZJRUxEX1JFVChzLCBmaWVsZC0+YXJnMik7CisJU0VRX1BVVF9GSUVMRF9SRVQocywgZmllbGQtPmFyZzMpOworCisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV9zcGVjaWFsX2V2ZW50ID0geworCS50eXBlCQk9IFRSQUNFX1NQRUNJQUwsCisJLnRyYWNlCQk9IHRyYWNlX3NwZWNpYWxfcHJpbnQsCisJLnJhdwkJPSB0cmFjZV9zcGVjaWFsX3ByaW50LAorCS5oZXgJCT0gdHJhY2Vfc3BlY2lhbF9oZXgsCisJLmJpbmFyeQkJPSB0cmFjZV9zcGVjaWFsX2JpbiwKK307CisKKy8qIFRSQUNFX1NUQUNLICovCisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9zdGFja19wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RhY2tfZW50cnkgKmZpZWxkOworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCWludCBpOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRlRSQUNFX1NUQUNLX0VOVFJJRVM7IGkrKykgeworCQlpZiAoaSkgeworCQkJaWYgKCF0cmFjZV9zZXFfcHV0cyhzLCAiIDw9ICIpKQorCQkJCWdvdG8gcGFydGlhbDsKKworCQkJaWYgKCFzZXFfcHJpbnRfaXBfc3ltKHMsIGZpZWxkLT5jYWxsZXJbaV0sIGZsYWdzKSkKKwkJCQlnb3RvIHBhcnRpYWw7CisJCX0KKwkJaWYgKCF0cmFjZV9zZXFfcHV0cyhzLCAiXG4iKSkKKwkJCWdvdG8gcGFydGlhbDsKKwl9CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCisgcGFydGlhbDoKKwlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgdHJhY2Vfc3RhY2tfZXZlbnQgPSB7CisJLnR5cGUJCT0gVFJBQ0VfU1RBQ0ssCisJLnRyYWNlCQk9IHRyYWNlX3N0YWNrX3ByaW50LAorCS5yYXcJCT0gdHJhY2Vfc3BlY2lhbF9wcmludCwKKwkuaGV4CQk9IHRyYWNlX3NwZWNpYWxfaGV4LAorCS5iaW5hcnkJCT0gdHJhY2Vfc3BlY2lhbF9iaW4sCit9OworCisvKiBUUkFDRV9VU0VSX1NUQUNLICovCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QgdHJhY2VfdXNlcl9zdGFja19wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCQlpbnQgZmxhZ3MpCit7CisJc3RydWN0IHVzZXJzdGFja19lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCWlmICghc2VxX3ByaW50X3VzZXJpcF9vYmpzKGZpZWxkLCBzLCBmbGFncykpCisJCWdvdG8gcGFydGlhbDsKKworCWlmICghdHJhY2Vfc2VxX3B1dGMocywgJ1xuJykpCisJCWdvdG8gcGFydGlhbDsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisKKyBwYXJ0aWFsOgorCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV91c2VyX3N0YWNrX2V2ZW50ID0geworCS50eXBlCQk9IFRSQUNFX1VTRVJfU1RBQ0ssCisJLnRyYWNlCQk9IHRyYWNlX3VzZXJfc3RhY2tfcHJpbnQsCisJLnJhdwkJPSB0cmFjZV9zcGVjaWFsX3ByaW50LAorCS5oZXgJCT0gdHJhY2Vfc3BlY2lhbF9oZXgsCisJLmJpbmFyeQkJPSB0cmFjZV9zcGVjaWFsX2JpbiwKK307CisKKy8qIFRSQUNFX0JQUklOVCAqLworc3RhdGljIGVudW0gcHJpbnRfbGluZV90Cit0cmFjZV9icHJpbnRfcHJpbnQoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHRyYWNlX2VudHJ5ICplbnRyeSA9IGl0ZXItPmVudDsKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlzdHJ1Y3QgYnByaW50X2VudHJ5ICpmaWVsZDsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBlbnRyeSk7CisKKwlpZiAoIXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmlwLCBmbGFncykpCisJCWdvdG8gcGFydGlhbDsKKworCWlmICghdHJhY2Vfc2VxX3B1dHMocywgIjogIikpCisJCWdvdG8gcGFydGlhbDsKKworCWlmICghdHJhY2Vfc2VxX2JwcmludGYocywgZmllbGQtPmZtdCwgZmllbGQtPmJ1ZikpCisJCWdvdG8gcGFydGlhbDsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisKKyBwYXJ0aWFsOgorCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKK30KKworCitzdGF0aWMgZW51bSBwcmludF9saW5lX3QKK3RyYWNlX2JwcmludF9yYXcoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGJwcmludF9lbnRyeSAqZmllbGQ7CisJc3RydWN0IHRyYWNlX3NlcSAqcyA9ICZpdGVyLT5zZXE7CisKKwl0cmFjZV9hc3NpZ25fdHlwZShmaWVsZCwgaXRlci0+ZW50KTsKKworCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiOiAlbHggOiAiLCBmaWVsZC0+aXApKQorCQlnb3RvIHBhcnRpYWw7CisKKwlpZiAoIXRyYWNlX3NlcV9icHJpbnRmKHMsIGZpZWxkLT5mbXQsIGZpZWxkLT5idWYpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCisgcGFydGlhbDoKKwlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Cit9CisKKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV9icHJpbnRfZXZlbnQgPSB7CisJLnR5cGUJCT0gVFJBQ0VfQlBSSU5ULAorCS50cmFjZQkJPSB0cmFjZV9icHJpbnRfcHJpbnQsCisJLnJhdwkJPSB0cmFjZV9icHJpbnRfcmF3LAorfTsKKworLyogVFJBQ0VfUFJJTlQgKi8KK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9wcmludF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcHJpbnRfZW50cnkgKmZpZWxkOworCXN0cnVjdCB0cmFjZV9zZXEgKnMgPSAmaXRlci0+c2VxOworCisJdHJhY2VfYXNzaWduX3R5cGUoZmllbGQsIGl0ZXItPmVudCk7CisKKwlpZiAoIXNlcV9wcmludF9pcF9zeW0ocywgZmllbGQtPmlwLCBmbGFncykpCisJCWdvdG8gcGFydGlhbDsKKworCWlmICghdHJhY2Vfc2VxX3ByaW50ZihzLCAiOiAlcyIsIGZpZWxkLT5idWYpKQorCQlnb3RvIHBhcnRpYWw7CisKKwlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOworCisgcGFydGlhbDoKKwlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7Cit9CisKK3N0YXRpYyBlbnVtIHByaW50X2xpbmVfdCB0cmFjZV9wcmludF9yYXcoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHByaW50X2VudHJ5ICpmaWVsZDsKKworCXRyYWNlX2Fzc2lnbl90eXBlKGZpZWxkLCBpdGVyLT5lbnQpOworCisJaWYgKCF0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICIjICVseCAlcyIsIGZpZWxkLT5pcCwgZmllbGQtPmJ1ZikpCisJCWdvdG8gcGFydGlhbDsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7CisKKyBwYXJ0aWFsOgorCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKK30KKworc3RhdGljIHN0cnVjdCB0cmFjZV9ldmVudCB0cmFjZV9wcmludF9ldmVudCA9IHsKKwkudHlwZQkgCT0gVFJBQ0VfUFJJTlQsCisJLnRyYWNlCQk9IHRyYWNlX3ByaW50X3ByaW50LAorCS5yYXcJCT0gdHJhY2VfcHJpbnRfcmF3LAorfTsKKworCitzdGF0aWMgc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudHNbXSBfX2luaXRkYXRhID0geworCSZ0cmFjZV9mbl9ldmVudCwKKwkmdHJhY2VfY3R4X2V2ZW50LAorCSZ0cmFjZV93YWtlX2V2ZW50LAorCSZ0cmFjZV9zcGVjaWFsX2V2ZW50LAorCSZ0cmFjZV9zdGFja19ldmVudCwKKwkmdHJhY2VfdXNlcl9zdGFja19ldmVudCwKKwkmdHJhY2VfYnByaW50X2V2ZW50LAorCSZ0cmFjZV9wcmludF9ldmVudCwKKwlOVUxMCit9OworCitfX2luaXQgc3RhdGljIGludCBpbml0X2V2ZW50cyh2b2lkKQoreworCXN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQ7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGV2ZW50c1tpXTsgaSsrKSB7CisJCWV2ZW50ID0gZXZlbnRzW2ldOworCisJCXJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudChldmVudCk7CisJCWlmICghcmV0KSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJldmVudCAlZCBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIsCisJCQkgICAgICAgZXZlbnQtPnR5cGUpOworCQkJV0FSTl9PTl9PTkNFKDEpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CitkZXZpY2VfaW5pdGNhbGwoaW5pdF9ldmVudHMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5oIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYmRlMzkKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmgKQEAgLTAsMCArMSw3MSBAQAorI2lmbmRlZiBfX1RSQUNFX0VWRU5UU19ICisjZGVmaW5lIF9fVFJBQ0VfRVZFTlRTX0gKKworI2luY2x1ZGUgInRyYWNlLmgiCisKK3R5cGVkZWYgZW51bSBwcmludF9saW5lX3QgKCp0cmFjZV9wcmludF9mdW5jKShzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgICAgIGludCBmbGFncyk7CisKK3N0cnVjdCB0cmFjZV9ldmVudCB7CisJc3RydWN0IGhsaXN0X25vZGUJbm9kZTsKKwlpbnQJCQl0eXBlOworCXRyYWNlX3ByaW50X2Z1bmMJdHJhY2U7CisJdHJhY2VfcHJpbnRfZnVuYwlyYXc7CisJdHJhY2VfcHJpbnRfZnVuYwloZXg7CisJdHJhY2VfcHJpbnRfZnVuYwliaW5hcnk7Cit9OworCitleHRlcm4gZW51bSBwcmludF9saW5lX3QKK3RyYWNlX3ByaW50X2JwcmludGtfbXNnX29ubHkoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyKTsKK2V4dGVybiBlbnVtIHByaW50X2xpbmVfdAordHJhY2VfcHJpbnRfcHJpbnRrX21zZ19vbmx5KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CisKK2V4dGVybiBpbnQgdHJhY2Vfc2VxX3ByaW50ZihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CitleHRlcm4gaW50Cit0cmFjZV9zZXFfYnByaW50ZihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpmbXQsIGNvbnN0IHUzMiAqYmluYXJ5KTsKK2V4dGVybiBpbnQKK3NlcV9wcmludF9pcF9zeW0oc3RydWN0IHRyYWNlX3NlcSAqcywgdW5zaWduZWQgbG9uZyBpcCwKKwkJdW5zaWduZWQgbG9uZyBzeW1fZmxhZ3MpOworZXh0ZXJuIHNzaXplX3QgdHJhY2Vfc2VxX3RvX3VzZXIoc3RydWN0IHRyYWNlX3NlcSAqcywgY2hhciBfX3VzZXIgKnVidWYsCisJCQkJIHNpemVfdCBjbnQpOworZXh0ZXJuIGludCB0cmFjZV9zZXFfcHV0cyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpzdHIpOworZXh0ZXJuIGludCB0cmFjZV9zZXFfcHV0YyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCB1bnNpZ25lZCBjaGFyIGMpOworZXh0ZXJuIGludCB0cmFjZV9zZXFfcHV0bWVtKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHZvaWQgKm1lbSwgc2l6ZV90IGxlbik7CitleHRlcm4gaW50IHRyYWNlX3NlcV9wdXRtZW1faGV4KHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IHZvaWQgKm1lbSwKKwkJCQlzaXplX3QgbGVuKTsKK2V4dGVybiB2b2lkICp0cmFjZV9zZXFfcmVzZXJ2ZShzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBzaXplX3QgbGVuKTsKK2V4dGVybiBpbnQgdHJhY2Vfc2VxX3BhdGgoc3RydWN0IHRyYWNlX3NlcSAqcywgc3RydWN0IHBhdGggKnBhdGgpOworZXh0ZXJuIGludCBzZXFfcHJpbnRfdXNlcmlwX29ianMoY29uc3Qgc3RydWN0IHVzZXJzdGFja19lbnRyeSAqZW50cnksCisJCQkJIHN0cnVjdCB0cmFjZV9zZXEgKnMsIHVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzKTsKK2V4dGVybiBpbnQgc2VxX3ByaW50X3VzZXJfaXAoc3RydWN0IHRyYWNlX3NlcSAqcywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgc3ltX2ZsYWdzKTsKKworZXh0ZXJuIGludCB0cmFjZV9wcmludF9jb250ZXh0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CitleHRlcm4gaW50IHRyYWNlX3ByaW50X2xhdF9jb250ZXh0KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcik7CisKK2V4dGVybiBzdHJ1Y3QgdHJhY2VfZXZlbnQgKmZ0cmFjZV9maW5kX2V2ZW50KGludCB0eXBlKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfZnRyYWNlX2V2ZW50KHN0cnVjdCB0cmFjZV9ldmVudCAqZXZlbnQpOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2Z0cmFjZV9ldmVudChzdHJ1Y3QgdHJhY2VfZXZlbnQgKmV2ZW50KTsKKworZXh0ZXJuIGVudW0gcHJpbnRfbGluZV90IHRyYWNlX25vcF9wcmludChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsCisJCQkJCSBpbnQgZmxhZ3MpOworCisjZGVmaW5lIE1BWF9NRU1IRVhfQllURVMJOAorI2RlZmluZSBIRVhfQ0hBUlMJCShNQVhfTUVNSEVYX0JZVEVTKjIgKyAxKQorCisjZGVmaW5lIFNFUV9QVVRfRklFTERfUkVUKHMsIHgpCQkJCVwKK2RvIHsJCQkJCQkJXAorCWlmICghdHJhY2Vfc2VxX3B1dG1lbShzLCAmKHgpLCBzaXplb2YoeCkpKQlcCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgU0VRX1BVVF9IRVhfRklFTERfUkVUKHMsIHgpCQkJXAorZG8gewkJCQkJCQlcCisJQlVJTERfQlVHX09OKHNpemVvZih4KSA+IE1BWF9NRU1IRVhfQllURVMpOwlcCisJaWYgKCF0cmFjZV9zZXFfcHV0bWVtX2hleChzLCAmKHgpLCBzaXplb2YoeCkpKQlcCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsJCVwKK30gd2hpbGUgKDApCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfcG93ZXIuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9wb3dlci5jCmluZGV4IDdiZGEyNDguLmJhZTc5MWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9wb3dlci5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9wb3dlci5jCkBAIC0xMSwxNSArMTEsMTEzIEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPHRyYWNlL3Bvd2VyLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAidHJhY2Vfb3V0cHV0LmgiCiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnBvd2VyX3RyYWNlOwogc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IHRyYWNlX3Bvd2VyX2VuYWJsZWQ7CiAKK3N0YXRpYyB2b2lkIHByb2JlX3Bvd2VyX3N0YXJ0KHN0cnVjdCBwb3dlcl90cmFjZSAqaXQsIHVuc2lnbmVkIGludCB0eXBlLAorCQkJCXVuc2lnbmVkIGludCBsZXZlbCkKK3sKKwlpZiAoIXRyYWNlX3Bvd2VyX2VuYWJsZWQpCisJCXJldHVybjsKKworCW1lbXNldChpdCwgMCwgc2l6ZW9mKHN0cnVjdCBwb3dlcl90cmFjZSkpOworCWl0LT5zdGF0ZSA9IGxldmVsOworCWl0LT50eXBlID0gdHlwZTsKKwlpdC0+c3RhbXAgPSBrdGltZV9nZXQoKTsKK30KKworCitzdGF0aWMgdm9pZCBwcm9iZV9wb3dlcl9lbmQoc3RydWN0IHBvd2VyX3RyYWNlICppdCkKK3sKKwlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OworCXN0cnVjdCB0cmFjZV9wb3dlciAqZW50cnk7CisJc3RydWN0IHRyYWNlX2FycmF5X2NwdSAqZGF0YTsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyID0gcG93ZXJfdHJhY2U7CisKKwlpZiAoIXRyYWNlX3Bvd2VyX2VuYWJsZWQpCisJCXJldHVybjsKKworCXByZWVtcHRfZGlzYWJsZSgpOworCWl0LT5lbmQgPSBrdGltZV9nZXQoKTsKKwlkYXRhID0gdHItPmRhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfUE9XRVIsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOworCWlmICghZXZlbnQpCisJCWdvdG8gb3V0OworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJZW50cnktPnN0YXRlX2RhdGEgPSAqaXQ7CisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCAwKTsKKyBvdXQ6CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIHZvaWQgcHJvYmVfcG93ZXJfbWFyayhzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKKwkJCQl1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisJc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKKwlzdHJ1Y3QgdHJhY2VfcG93ZXIgKmVudHJ5OworCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7CisJc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IHBvd2VyX3RyYWNlOworCisJaWYgKCF0cmFjZV9wb3dlcl9lbmFibGVkKQorCQlyZXR1cm47CisKKwltZW1zZXQoaXQsIDAsIHNpemVvZihzdHJ1Y3QgcG93ZXJfdHJhY2UpKTsKKwlpdC0+c3RhdGUgPSBsZXZlbDsKKwlpdC0+dHlwZSA9IHR5cGU7CisJaXQtPnN0YW1wID0ga3RpbWVfZ2V0KCk7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJaXQtPmVuZCA9IGl0LT5zdGFtcDsKKwlkYXRhID0gdHItPmRhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCWV2ZW50ID0gdHJhY2VfYnVmZmVyX2xvY2tfcmVzZXJ2ZSh0ciwgVFJBQ0VfUE9XRVIsCisJCQkJCSAgc2l6ZW9mKCplbnRyeSksIDAsIDApOworCWlmICghZXZlbnQpCisJCWdvdG8gb3V0OworCWVudHJ5CT0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJZW50cnktPnN0YXRlX2RhdGEgPSAqaXQ7CisJdHJhY2VfYnVmZmVyX3VubG9ja19jb21taXQodHIsIGV2ZW50LCAwLCAwKTsKKyBvdXQ6CisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3RhdGljIGludCB0cmFjaW5nX3Bvd2VyX3JlZ2lzdGVyKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3Bvd2VyX3N0YXJ0KHByb2JlX3Bvd2VyX3N0YXJ0KTsKKwlpZiAocmV0KSB7CisJCXByX2luZm8oInBvd2VyIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgorCQkJIiBwcm9iZSB0byB0cmFjZV9wb3dlcl9zdGFydFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3Bvd2VyX2VuZChwcm9iZV9wb3dlcl9lbmQpOworCWlmIChyZXQpIHsKKwkJcHJfaW5mbygicG93ZXIgdHJhY2U6IENvdWxkbid0IGFjdGl2YXRlIHRyYWNlcG9pbnQiCisJCQkiIHByb2JlIHRvIHRyYWNlX3Bvd2VyX2VuZFxuIik7CisJCWdvdG8gZmFpbF9zdGFydDsKKwl9CisJcmV0ID0gcmVnaXN0ZXJfdHJhY2VfcG93ZXJfbWFyayhwcm9iZV9wb3dlcl9tYXJrKTsKKwlpZiAocmV0KSB7CisJCXByX2luZm8oInBvd2VyIHRyYWNlOiBDb3VsZG4ndCBhY3RpdmF0ZSB0cmFjZXBvaW50IgorCQkJIiBwcm9iZSB0byB0cmFjZV9wb3dlcl9tYXJrXG4iKTsKKwkJZ290byBmYWlsX2VuZDsKKwl9CisJcmV0dXJuIHJldDsKK2ZhaWxfZW5kOgorCXVucmVnaXN0ZXJfdHJhY2VfcG93ZXJfZW5kKHByb2JlX3Bvd2VyX2VuZCk7CitmYWlsX3N0YXJ0OgorCXVucmVnaXN0ZXJfdHJhY2VfcG93ZXJfc3RhcnQocHJvYmVfcG93ZXJfc3RhcnQpOworCXJldHVybiByZXQ7Cit9CiAKIHN0YXRpYyB2b2lkIHN0YXJ0X3Bvd2VyX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CkBAIC0zMSw2ICsxMjksMTQgQEAKIAl0cmFjZV9wb3dlcl9lbmFibGVkID0gMDsKIH0KIAorc3RhdGljIHZvaWQgcG93ZXJfdHJhY2VfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwl0cmFjZV9wb3dlcl9lbmFibGVkID0gMDsKKwl1bnJlZ2lzdGVyX3RyYWNlX3Bvd2VyX3N0YXJ0KHByb2JlX3Bvd2VyX3N0YXJ0KTsKKwl1bnJlZ2lzdGVyX3RyYWNlX3Bvd2VyX2VuZChwcm9iZV9wb3dlcl9lbmQpOworCXVucmVnaXN0ZXJfdHJhY2VfcG93ZXJfbWFyayhwcm9iZV9wb3dlcl9tYXJrKTsKK30KKwogCiBzdGF0aWMgaW50IHBvd2VyX3RyYWNlX2luaXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKQEAgLTM4LDYgKzE0NCw3IEBACiAJcG93ZXJfdHJhY2UgPSB0cjsKIAogCXRyYWNlX3Bvd2VyX2VuYWJsZWQgPSAxOworCXRyYWNpbmdfcG93ZXJfcmVnaXN0ZXIoKTsKIAogCWZvcl9lYWNoX2NwdShjcHUsIGNwdV9wb3NzaWJsZV9tYXNrKQogCQl0cmFjaW5nX3Jlc2V0KHRyLCBjcHUpOwpAQCAtODUsNyArMTkyLDcgQEAKIAkuaW5pdAkJPSBwb3dlcl90cmFjZV9pbml0LAogCS5zdGFydAkJPSBzdGFydF9wb3dlcl90cmFjZSwKIAkuc3RvcAkJPSBzdG9wX3Bvd2VyX3RyYWNlLAotCS5yZXNldAkJPSBzdG9wX3Bvd2VyX3RyYWNlLAorCS5yZXNldAkJPSBwb3dlcl90cmFjZV9yZXNldCwKIAkucHJpbnRfbGluZQk9IHBvd2VyX3ByaW50X2xpbmUsCiB9OwogCkBAIC05NCw4NiArMjAxLDMgQEAKIAlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZwb3dlcl90cmFjZXIpOwogfQogZGV2aWNlX2luaXRjYWxsKGluaXRfcG93ZXJfdHJhY2UpOwotCi12b2lkIHRyYWNlX3Bvd2VyX3N0YXJ0KHN0cnVjdCBwb3dlcl90cmFjZSAqaXQsIHVuc2lnbmVkIGludCB0eXBlLAotCQkJIHVuc2lnbmVkIGludCBsZXZlbCkKLXsKLQlpZiAoIXRyYWNlX3Bvd2VyX2VuYWJsZWQpCi0JCXJldHVybjsKLQotCW1lbXNldChpdCwgMCwgc2l6ZW9mKHN0cnVjdCBwb3dlcl90cmFjZSkpOwotCWl0LT5zdGF0ZSA9IGxldmVsOwotCWl0LT50eXBlID0gdHlwZTsKLQlpdC0+c3RhbXAgPSBrdGltZV9nZXQoKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3Bvd2VyX3N0YXJ0KTsKLQotCi12b2lkIHRyYWNlX3Bvd2VyX2VuZChzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0KQotewotCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHRyYWNlX3Bvd2VyICplbnRyeTsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBwb3dlcl90cmFjZTsKLQotCWlmICghdHJhY2VfcG93ZXJfZW5hYmxlZCkKLQkJcmV0dXJuOwotCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaXQtPmVuZCA9IGt0aW1lX2dldCgpOwotCWRhdGEgPSB0ci0+ZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldOwotCi0JZXZlbnQgPSByaW5nX2J1ZmZlcl9sb2NrX3Jlc2VydmUodHItPmJ1ZmZlciwgc2l6ZW9mKCplbnRyeSksCi0JCQkJCSAmaXJxX2ZsYWdzKTsKLQlpZiAoIWV2ZW50KQotCQlnb3RvIG91dDsKLQllbnRyeQk9IHJpbmdfYnVmZmVyX2V2ZW50X2RhdGEoZXZlbnQpOwotCXRyYWNpbmdfZ2VuZXJpY19lbnRyeV91cGRhdGUoJmVudHJ5LT5lbnQsIDAsIDApOwotCWVudHJ5LT5lbnQudHlwZSA9IFRSQUNFX1BPV0VSOwotCWVudHJ5LT5zdGF0ZV9kYXRhID0gKml0OwotCXJpbmdfYnVmZmVyX3VubG9ja19jb21taXQodHItPmJ1ZmZlciwgZXZlbnQsIGlycV9mbGFncyk7Ci0KLQl0cmFjZV93YWtlX3VwKCk7Ci0KLSBvdXQ6Ci0JcHJlZW1wdF9lbmFibGUoKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHRyYWNlX3Bvd2VyX2VuZCk7Ci0KLXZvaWQgdHJhY2VfcG93ZXJfbWFyayhzdHJ1Y3QgcG93ZXJfdHJhY2UgKml0LCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCSB1bnNpZ25lZCBpbnQgbGV2ZWwpCi17Ci0Jc3RydWN0IHJpbmdfYnVmZmVyX2V2ZW50ICpldmVudDsKLQlzdHJ1Y3QgdHJhY2VfcG93ZXIgKmVudHJ5OwotCXN0cnVjdCB0cmFjZV9hcnJheV9jcHUgKmRhdGE7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IHBvd2VyX3RyYWNlOwotCi0JaWYgKCF0cmFjZV9wb3dlcl9lbmFibGVkKQotCQlyZXR1cm47Ci0KLQltZW1zZXQoaXQsIDAsIHNpemVvZihzdHJ1Y3QgcG93ZXJfdHJhY2UpKTsKLQlpdC0+c3RhdGUgPSBsZXZlbDsKLQlpdC0+dHlwZSA9IHR5cGU7Ci0JaXQtPnN0YW1wID0ga3RpbWVfZ2V0KCk7Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaXQtPmVuZCA9IGl0LT5zdGFtcDsKLQlkYXRhID0gdHItPmRhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQotCWV2ZW50ID0gcmluZ19idWZmZXJfbG9ja19yZXNlcnZlKHRyLT5idWZmZXIsIHNpemVvZigqZW50cnkpLAotCQkJCQkgJmlycV9mbGFncyk7Ci0JaWYgKCFldmVudCkKLQkJZ290byBvdXQ7Ci0JZW50cnkJPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKLQl0cmFjaW5nX2dlbmVyaWNfZW50cnlfdXBkYXRlKCZlbnRyeS0+ZW50LCAwLCAwKTsKLQllbnRyeS0+ZW50LnR5cGUgPSBUUkFDRV9QT1dFUjsKLQllbnRyeS0+c3RhdGVfZGF0YSA9ICppdDsKLQlyaW5nX2J1ZmZlcl91bmxvY2tfY29tbWl0KHRyLT5idWZmZXIsIGV2ZW50LCBpcnFfZmxhZ3MpOwotCi0JdHJhY2Vfd2FrZV91cCgpOwotCi0gb3V0OgotCXByZWVtcHRfZW5hYmxlKCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh0cmFjZV9wb3dlcl9tYXJrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9wcmludGsuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9wcmludGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjgxNTU2Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogdHJhY2UgYmluYXJ5IHByaW50aworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBMYWkgSmlhbmdzaGFuIDxsYWlqc0Bjbi5mdWppdHN1LmNvbT4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworI2luY2x1ZGUgInRyYWNlLmgiCisKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCisvKgorICogbW9kdWxlcyB0cmFjZV9wcmludGsoKSdzIGZvcm1hdHMgYXJlIGF1dG9zYXZlZCBpbiBzdHJ1Y3QgdHJhY2VfYnByaW50a19mbXQKKyAqIHdoaWNoIGFyZSBxdWV1ZWQgb24gdHJhY2VfYnByaW50a19mbXRfbGlzdC4KKyAqLworc3RhdGljIExJU1RfSEVBRCh0cmFjZV9icHJpbnRrX2ZtdF9saXN0KTsKKworLyogc2VyaWFsaXplIGFjY2Vzc2VzIHRvIHRyYWNlX2JwcmludGtfZm10X2xpc3QgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoYnRyYWNlX211dGV4KTsKKworc3RydWN0IHRyYWNlX2JwcmludGtfZm10IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY2hhciBmbXRbMF07Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0cmFjZV9icHJpbnRrX2ZtdCAqbG9va3VwX2Zvcm1hdChjb25zdCBjaGFyICpmbXQpCit7CisJc3RydWN0IHRyYWNlX2JwcmludGtfZm10ICpwb3M7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ0cmFjZV9icHJpbnRrX2ZtdF9saXN0LCBsaXN0KSB7CisJCWlmICghc3RyY21wKHBvcy0+Zm10LCBmbXQpKQorCQkJcmV0dXJuIHBvczsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYwordm9pZCBob2xkX21vZHVsZV90cmFjZV9icHJpbnRrX2Zvcm1hdChjb25zdCBjaGFyICoqc3RhcnQsIGNvbnN0IGNoYXIgKiplbmQpCit7CisJY29uc3QgY2hhciAqKml0ZXI7CisKKwltdXRleF9sb2NrKCZidHJhY2VfbXV0ZXgpOworCWZvciAoaXRlciA9IHN0YXJ0OyBpdGVyIDwgZW5kOyBpdGVyKyspIHsKKwkJc3RydWN0IHRyYWNlX2JwcmludGtfZm10ICp0Yl9mbXQgPSBsb29rdXBfZm9ybWF0KCppdGVyKTsKKwkJaWYgKHRiX2ZtdCkgeworCQkJKml0ZXIgPSB0Yl9mbXQtPmZtdDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdGJfZm10ID0ga21hbGxvYyhvZmZzZXRvZihzdHJ1Y3QgdHJhY2VfYnByaW50a19mbXQsIGZtdCkKKwkJCQkrIHN0cmxlbigqaXRlcikgKyAxLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHRiX2ZtdCkgeworCQkJbGlzdF9hZGRfdGFpbCgmdGJfZm10LT5saXN0LCAmdHJhY2VfYnByaW50a19mbXRfbGlzdCk7CisJCQlzdHJjcHkodGJfZm10LT5mbXQsICppdGVyKTsKKwkJCSppdGVyID0gdGJfZm10LT5mbXQ7CisJCX0gZWxzZQorCQkJKml0ZXIgPSBOVUxMOworCX0KKwltdXRleF91bmxvY2soJmJ0cmFjZV9tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgbW9kdWxlX3RyYWNlX2JwcmludGtfZm9ybWF0X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtb2R1bGUgKm1vZCA9IGRhdGE7CisJaWYgKG1vZC0+bnVtX3RyYWNlX2JwcmludGtfZm10KSB7CisJCWNvbnN0IGNoYXIgKipzdGFydCA9IG1vZC0+dHJhY2VfYnByaW50a19mbXRfc3RhcnQ7CisJCWNvbnN0IGNoYXIgKiplbmQgPSBzdGFydCArIG1vZC0+bnVtX3RyYWNlX2JwcmludGtfZm10OworCisJCWlmICh2YWwgPT0gTU9EVUxFX1NUQVRFX0NPTUlORykKKwkJCWhvbGRfbW9kdWxlX3RyYWNlX2JwcmludGtfZm9ybWF0KHN0YXJ0LCBlbmQpOworCX0KKwlyZXR1cm4gMDsKK30KKworI2Vsc2UgLyogIUNPTkZJR19NT0RVTEVTICovCitfX2luaXQgc3RhdGljIGludAorbW9kdWxlX3RyYWNlX2JwcmludGtfZm9ybWF0X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCisKKworX19pbml0ZGF0YV9vcl9tb2R1bGUgc3RhdGljCitzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbW9kdWxlX3RyYWNlX2JwcmludGtfZm9ybWF0X25iID0geworCS5ub3RpZmllcl9jYWxsID0gbW9kdWxlX3RyYWNlX2JwcmludGtfZm9ybWF0X25vdGlmeSwKK307CisKK2ludCBfX3RyYWNlX2JwcmludGsodW5zaWduZWQgbG9uZyBpcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisgeworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKworCWlmICh1bmxpa2VseSghZm10KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUFJJTlRLKSkKKwkJcmV0dXJuIDA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB0cmFjZV92YnByaW50ayhpcCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoX190cmFjZV9icHJpbnRrKTsKKworaW50IF9fZnRyYWNlX3ZicHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKKyB7CisJaWYgKHVubGlrZWx5KCFmbXQpKQorCQlyZXR1cm4gMDsKKworCWlmICghKHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9QUklOVEspKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB0cmFjZV92YnByaW50ayhpcCwgZm10LCBhcCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX2Z0cmFjZV92YnByaW50ayk7CisKK2ludCBfX3RyYWNlX3ByaW50ayh1bnNpZ25lZCBsb25nIGlwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisKKwlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUFJJTlRLKSkKKwkJcmV0dXJuIDA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB0cmFjZV92cHJpbnRrKGlwLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX3RyYWNlX3ByaW50ayk7CisKK2ludCBfX2Z0cmFjZV92cHJpbnRrKHVuc2lnbmVkIGxvbmcgaXAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlpZiAoISh0cmFjZV9mbGFncyAmIFRSQUNFX0lURVJfUFJJTlRLKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdHJhY2VfdnByaW50ayhpcCwgZm10LCBhcCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX2Z0cmFjZV92cHJpbnRrKTsKKworc3RhdGljIHZvaWQgKgordF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJY29uc3QgY2hhciAqKmZtdCA9IG0tPnByaXZhdGU7CisJY29uc3QgY2hhciAqKm5leHQgPSBmbXQ7CisKKwkoKnBvcykrKzsKKworCWlmICgodW5zaWduZWQgbG9uZylmbXQgPj0gKHVuc2lnbmVkIGxvbmcpX19zdG9wX19fdHJhY2VfYnByaW50a19mbXQpCisJCXJldHVybiBOVUxMOworCisJbmV4dCA9IGZtdDsKKwltLT5wcml2YXRlID0gKytuZXh0OworCisJcmV0dXJuIGZtdDsKK30KKworc3RhdGljIHZvaWQgKnRfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlyZXR1cm4gdF9uZXh0KG0sIE5VTEwsIHBvcyk7Cit9CisKK3N0YXRpYyBpbnQgdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwljb25zdCBjaGFyICoqZm10ID0gdjsKKwljb25zdCBjaGFyICpzdHIgPSAqZm10OworCWludCBpOworCisJc2VxX3ByaW50ZihtLCAiMHglbHggOiBcIiIsICh1bnNpZ25lZCBsb25nKWZtdCk7CisKKwkvKgorCSAqIFRhYnMgYW5kIG5ldyBsaW5lcyBuZWVkIHRvIGJlIGNvbnZlcnRlZC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBzdHJbaV07IGkrKykgeworCQlzd2l0Y2ggKHN0cltpXSkgeworCQljYXNlICdcbic6CisJCQlzZXFfcHV0cyhtLCAiXFxuIik7CisJCQlicmVhazsKKwkJY2FzZSAnXHQnOgorCQkJc2VxX3B1dHMobSwgIlxcdCIpOworCQkJYnJlYWs7CisJCWNhc2UgJ1xcJzoKKwkJCXNlcV9wdXRzKG0sICJcXCIpOworCQkJYnJlYWs7CisJCWNhc2UgJyInOgorCQkJc2VxX3B1dHMobSwgIlxcXCIiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc2VxX3B1dGMobSwgc3RyW2ldKTsKKwkJfQorCX0KKwlzZXFfcHV0cyhtLCAiXCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2hvd19mb3JtYXRfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSB0X3N0YXJ0LAorCS5uZXh0ID0gdF9uZXh0LAorCS5zaG93ID0gdF9zaG93LAorCS5zdG9wID0gdF9zdG9wLAorfTsKKworc3RhdGljIGludAorZnRyYWNlX2Zvcm1hdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gc2VxX29wZW4oZmlsZSwgJnNob3dfZm9ybWF0X3NlcV9vcHMpOworCWlmICghcmV0KSB7CisJCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCQltLT5wcml2YXRlID0gX19zdGFydF9fX3RyYWNlX2JwcmludGtfZm10OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZm9ybWF0c19mb3BzID0geworCS5vcGVuID0gZnRyYWNlX2Zvcm1hdHNfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGluaXRfdHJhY2VfcHJpbnRrX2Z1bmN0aW9uX2V4cG9ydCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOworCXN0cnVjdCBkZW50cnkgKmVudHJ5OworCisJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7CisJaWYgKCFkX3RyYWNlcikKKwkJcmV0dXJuIDA7CisKKwllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInByaW50a19mb3JtYXRzIiwgMDQ0NCwgZF90cmFjZXIsCisJCQkJICAgIE5VTEwsICZmdHJhY2VfZm9ybWF0c19mb3BzKTsKKwlpZiAoIWVudHJ5KQorCQlwcl93YXJuaW5nKCJDb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMgIgorCQkJICAgIidwcmludGtfZm9ybWF0cycgZW50cnlcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK2ZzX2luaXRjYWxsKGluaXRfdHJhY2VfcHJpbnRrX2Z1bmN0aW9uX2V4cG9ydCk7CisKK3N0YXRpYyBfX2luaXQgaW50IGluaXRfdHJhY2VfcHJpbnRrKHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX21vZHVsZV9ub3RpZmllcigmbW9kdWxlX3RyYWNlX2JwcmludGtfZm9ybWF0X25iKTsKK30KKworZWFybHlfaW5pdGNhbGwoaW5pdF90cmFjZV9wcmludGspOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3N3aXRjaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3N3aXRjaC5jCmluZGV4IGRmMTc1Y2IuLmRlMzVmMjAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF9zd2l0Y2guYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfc3dpdGNoLmMKQEAgLTE4LDYgKzE4LDcgQEAKIHN0YXRpYyBpbnQgX19yZWFkX21vc3RseQl0cmFjZXJfZW5hYmxlZDsKIHN0YXRpYyBpbnQJCQlzY2hlZF9yZWY7CiBzdGF0aWMgREVGSU5FX01VVEVYKHNjaGVkX3JlZ2lzdGVyX211dGV4KTsKK3N0YXRpYyBpbnQJCQlzY2hlZF9zdG9wcGVkOwogCiBzdGF0aWMgdm9pZAogcHJvYmVfc2NoZWRfc3dpdGNoKHN0cnVjdCBycSAqX19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LApAQCAtMjgsNyArMjksNyBAQAogCWludCBjcHU7CiAJaW50IHBjOwogCi0JaWYgKCFzY2hlZF9yZWYpCisJaWYgKCFzY2hlZF9yZWYgfHwgc2NoZWRfc3RvcHBlZCkKIAkJcmV0dXJuOwogCiAJdHJhY2luZ19yZWNvcmRfY21kbGluZShwcmV2KTsKQEAgLTQzLDcgKzQ0LDcgQEAKIAlkYXRhID0gY3R4X3RyYWNlLT5kYXRhW2NwdV07CiAKIAlpZiAobGlrZWx5KCFhdG9taWNfcmVhZCgmZGF0YS0+ZGlzYWJsZWQpKSkKLQkJdHJhY2luZ19zY2hlZF9zd2l0Y2hfdHJhY2UoY3R4X3RyYWNlLCBkYXRhLCBwcmV2LCBuZXh0LCBmbGFncywgcGMpOworCQl0cmFjaW5nX3NjaGVkX3N3aXRjaF90cmFjZShjdHhfdHJhY2UsIHByZXYsIG5leHQsIGZsYWdzLCBwYyk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CkBAIC02Niw3ICs2Nyw3IEBACiAJZGF0YSA9IGN0eF90cmFjZS0+ZGF0YVtjcHVdOwogCiAJaWYgKGxpa2VseSghYXRvbWljX3JlYWQoJmRhdGEtPmRpc2FibGVkKSkpCi0JCXRyYWNpbmdfc2NoZWRfd2FrZXVwX3RyYWNlKGN0eF90cmFjZSwgZGF0YSwgd2FrZWUsIGN1cnJlbnQsCisJCXRyYWNpbmdfc2NoZWRfd2FrZXVwX3RyYWNlKGN0eF90cmFjZSwgd2FrZWUsIGN1cnJlbnQsCiAJCQkJCSAgIGZsYWdzLCBwYyk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC05Myw3ICs5NCw3IEBACiAJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfc2NoZWRfc3dpdGNoKHByb2JlX3NjaGVkX3N3aXRjaCk7CiAJaWYgKHJldCkgewogCQlwcl9pbmZvKCJzY2hlZCB0cmFjZTogQ291bGRuJ3QgYWN0aXZhdGUgdHJhY2Vwb2ludCIKLQkJCSIgcHJvYmUgdG8ga2VybmVsX3NjaGVkX3NjaGVkdWxlXG4iKTsKKwkJCSIgcHJvYmUgdG8ga2VybmVsX3NjaGVkX3N3aXRjaFxuIik7CiAJCWdvdG8gZmFpbF9kZXByb2JlX3dha2VfbmV3OwogCX0KIApAQCAtMTg1LDEyICsxODYsNiBAQAogCWN0eF90cmFjZSA9IHRyOwogfQogCi1zdGF0aWMgdm9pZCBzdGFydF9zY2hlZF90cmFjZShzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQotewotCXRyYWNpbmdfcmVzZXRfb25saW5lX2NwdXModHIpOwotCXRyYWNpbmdfc3RhcnRfc2NoZWRfc3dpdGNoX3JlY29yZCgpOwotfQotCiBzdGF0aWMgdm9pZCBzdG9wX3NjaGVkX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJdHJhY2luZ19zdG9wX3NjaGVkX3N3aXRjaF9yZWNvcmQoKTsKQEAgLTE5OSw3ICsxOTQsOCBAQAogc3RhdGljIGludCBzY2hlZF9zd2l0Y2hfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCWN0eF90cmFjZSA9IHRyOwotCXN0YXJ0X3NjaGVkX3RyYWNlKHRyKTsKKwl0cmFjaW5nX3Jlc2V0X29ubGluZV9jcHVzKHRyKTsKKwl0cmFjaW5nX3N0YXJ0X3NjaGVkX3N3aXRjaF9yZWNvcmQoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjExLDEzICsyMDcsMTIgQEAKIAogc3RhdGljIHZvaWQgc2NoZWRfc3dpdGNoX3RyYWNlX3N0YXJ0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0JdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7Ci0JdHJhY2luZ19zdGFydF9zY2hlZF9zd2l0Y2goKTsKKwlzY2hlZF9zdG9wcGVkID0gMDsKIH0KIAogc3RhdGljIHZvaWQgc2NoZWRfc3dpdGNoX3RyYWNlX3N0b3Aoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQl0cmFjaW5nX3N0b3Bfc2NoZWRfc3dpdGNoKCk7CisJc2NoZWRfc3RvcHBlZCA9IDE7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyIHNjaGVkX3N3aXRjaF90cmFjZSBfX3JlYWRfbW9zdGx5ID0KQEAgLTIyNyw2ICsyMjIsNyBAQAogCS5yZXNldAkJPSBzY2hlZF9zd2l0Y2hfdHJhY2VfcmVzZXQsCiAJLnN0YXJ0CQk9IHNjaGVkX3N3aXRjaF90cmFjZV9zdGFydCwKIAkuc3RvcAkJPSBzY2hlZF9zd2l0Y2hfdHJhY2Vfc3RvcCwKKwkud2FpdF9waXBlCT0gcG9sbF93YWl0X3BpcGUsCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAogCS5zZWxmdGVzdCAgICA9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfc2NoZWRfc3dpdGNoLAogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKaW5kZXggNDJhZTFlNy4uM2M1YWQ2YiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYwpAQCAtMjUsMTIgKzI1LDE1IEBACiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0CSp3YWtldXBfdGFzazsKIHN0YXRpYyBpbnQJCQl3YWtldXBfY3B1Owogc3RhdGljIHVuc2lnbmVkCQkJd2FrZXVwX3ByaW8gPSAtMTsKK3N0YXRpYyBpbnQJCQl3YWtldXBfcnQ7CiAKIHN0YXRpYyByYXdfc3BpbmxvY2tfdCB3YWtldXBfbG9jayA9CiAJKHJhd19zcGlubG9ja190KV9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRDsKIAogc3RhdGljIHZvaWQgX193YWtldXBfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cik7CiAKK3N0YXRpYyBpbnQgc2F2ZV9sYXRfZmxhZzsKKwogI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKIC8qCiAgKiBpcnFzb2ZmIHVzZXMgaXRzIG93biB0cmFjZXIgZnVuY3Rpb24gdG8ga2VlcCB0aGUgb3ZlcmhlYWQgZG93bjoKQEAgLTcxLDcgKzc0LDcgQEAKIAlpZiAodGFza19jcHUod2FrZXVwX3Rhc2spICE9IGNwdSkKIAkJZ290byB1bmxvY2s7CiAKLQl0cmFjZV9mdW5jdGlvbih0ciwgZGF0YSwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKKwl0cmFjZV9mdW5jdGlvbih0ciwgaXAsIHBhcmVudF9pcCwgZmxhZ3MsIHBjKTsKIAogIHVubG9jazoKIAlfX3Jhd19zcGluX3VubG9jaygmd2FrZXVwX2xvY2spOwpAQCAtMTUxLDcgKzE1NCw4IEBACiAJaWYgKHVubGlrZWx5KCF0cmFjZXJfZW5hYmxlZCB8fCBuZXh0ICE9IHdha2V1cF90YXNrKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JdHJhY2VfZnVuY3Rpb24od2FrZXVwX3RyYWNlLCBkYXRhLCBDQUxMRVJfQUREUjEsIENBTExFUl9BRERSMiwgZmxhZ3MsIHBjKTsKKwl0cmFjZV9mdW5jdGlvbih3YWtldXBfdHJhY2UsIENBTExFUl9BRERSMSwgQ0FMTEVSX0FERFIyLCBmbGFncywgcGMpOworCXRyYWNpbmdfc2NoZWRfc3dpdGNoX3RyYWNlKHdha2V1cF90cmFjZSwgcHJldiwgbmV4dCwgZmxhZ3MsIHBjKTsKIAogCS8qCiAJICogdXNlY3MgY29udmVyc2lvbiBpcyBzbG93IHNvIHdlIHRyeSB0byBkZWxheSB0aGUgY29udmVyc2lvbgpAQCAtMTgyLDEzICsxODYsMTAgQEAKIAogc3RhdGljIHZvaWQgX193YWtldXBfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKLQlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwogCWludCBjcHU7CiAKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCWRhdGEgPSB0ci0+ZGF0YVtjcHVdOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCiAJCXRyYWNpbmdfcmVzZXQodHIsIGNwdSk7Ci0JfQogCiAJd2FrZXVwX2NwdSA9IC0xOwogCXdha2V1cF9wcmlvID0gLTE7CkBAIC0yMTMsNiArMjE0LDcgQEAKIHN0YXRpYyB2b2lkCiBwcm9iZV93YWtldXAoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc3VjY2VzcykKIHsKKwlzdHJ1Y3QgdHJhY2VfYXJyYXlfY3B1ICpkYXRhOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlsb25nIGRpc2FibGVkOwpAQCAtMjI0LDcgKzIyNiw3IEBACiAJdHJhY2luZ19yZWNvcmRfY21kbGluZShwKTsKIAl0cmFjaW5nX3JlY29yZF9jbWRsaW5lKGN1cnJlbnQpOwogCi0JaWYgKGxpa2VseSghcnRfdGFzayhwKSkgfHwKKwlpZiAoKHdha2V1cF9ydCAmJiAhcnRfdGFzayhwKSkgfHwKIAkJCXAtPnByaW8gPj0gd2FrZXVwX3ByaW8gfHwKIAkJCXAtPnByaW8gPj0gY3VycmVudC0+cHJpbykKIAkJcmV0dXJuOwpAQCAtMjUyLDkgKzI1NCwxMCBAQAogCiAJbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CiAKLQl3YWtldXBfdHJhY2UtPmRhdGFbd2FrZXVwX2NwdV0tPnByZWVtcHRfdGltZXN0YW1wID0gZnRyYWNlX25vdyhjcHUpOwotCXRyYWNlX2Z1bmN0aW9uKHdha2V1cF90cmFjZSwgd2FrZXVwX3RyYWNlLT5kYXRhW3dha2V1cF9jcHVdLAotCQkgICAgICAgQ0FMTEVSX0FERFIxLCBDQUxMRVJfQUREUjIsIGZsYWdzLCBwYyk7CisJZGF0YSA9IHdha2V1cF90cmFjZS0+ZGF0YVt3YWtldXBfY3B1XTsKKwlkYXRhLT5wcmVlbXB0X3RpbWVzdGFtcCA9IGZ0cmFjZV9ub3coY3B1KTsKKwl0cmFjaW5nX3NjaGVkX3dha2V1cF90cmFjZSh3YWtldXBfdHJhY2UsIHAsIGN1cnJlbnQsIGZsYWdzLCBwYyk7CisJdHJhY2VfZnVuY3Rpb24od2FrZXVwX3RyYWNlLCBDQUxMRVJfQUREUjEsIENBTExFUl9BRERSMiwgZmxhZ3MsIHBjKTsKIAogb3V0X2xvY2tlZDoKIAlfX3Jhd19zcGluX3VubG9jaygmd2FrZXVwX2xvY2spOwpAQCAtMjYyLDEyICsyNjUsNiBAQAogCWF0b21pY19kZWMoJndha2V1cF90cmFjZS0+ZGF0YVtjcHVdLT5kaXNhYmxlZCk7CiB9CiAKLS8qCi0gKiBzYXZlX3RyYWNlcl9lbmFibGVkIGlzIHVzZWQgdG8gc2F2ZSB0aGUgc3RhdGUgb2YgdGhlIHRyYWNlcl9lbmFibGVkCi0gKiB2YXJpYWJsZSB3aGVuIHdlIGRpc2FibGUgaXQgd2hlbiB3ZSBvcGVuIGEgdHJhY2Ugb3V0cHV0IGZpbGUuCi0gKi8KLXN0YXRpYyBpbnQgc2F2ZV90cmFjZXJfZW5hYmxlZDsKLQogc3RhdGljIHZvaWQgc3RhcnRfd2FrZXVwX3RyYWNlcihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCWludCByZXQ7CkBAIC0yODksNyArMjg2LDcgQEAKIAlyZXQgPSByZWdpc3Rlcl90cmFjZV9zY2hlZF9zd2l0Y2gocHJvYmVfd2FrZXVwX3NjaGVkX3N3aXRjaCk7CiAJaWYgKHJldCkgewogCQlwcl9pbmZvKCJzY2hlZCB0cmFjZTogQ291bGRuJ3QgYWN0aXZhdGUgdHJhY2Vwb2ludCIKLQkJCSIgcHJvYmUgdG8ga2VybmVsX3NjaGVkX3NjaGVkdWxlXG4iKTsKKwkJCSIgcHJvYmUgdG8ga2VybmVsX3NjaGVkX3N3aXRjaFxuIik7CiAJCWdvdG8gZmFpbF9kZXByb2JlX3dha2VfbmV3OwogCX0KIApAQCAtMzA2LDEzICszMDMsMTAgQEAKIAogCXJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdHJhY2Vfb3BzKTsKIAotCWlmICh0cmFjaW5nX2lzX2VuYWJsZWQoKSkgeworCWlmICh0cmFjaW5nX2lzX2VuYWJsZWQoKSkKIAkJdHJhY2VyX2VuYWJsZWQgPSAxOwotCQlzYXZlX3RyYWNlcl9lbmFibGVkID0gMTsKLQl9IGVsc2UgeworCWVsc2UKIAkJdHJhY2VyX2VuYWJsZWQgPSAwOwotCQlzYXZlX3RyYWNlcl9lbmFibGVkID0gMDsKLQl9CiAKIAlyZXR1cm47CiBmYWlsX2RlcHJvYmVfd2FrZV9uZXc6CkBAIC0zMjQsNTQgKzMxOCw1NCBAQAogc3RhdGljIHZvaWQgc3RvcF93YWtldXBfdHJhY2VyKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJdHJhY2VyX2VuYWJsZWQgPSAwOwotCXNhdmVfdHJhY2VyX2VuYWJsZWQgPSAwOwogCXVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9vcHMpOwogCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfc3dpdGNoKHByb2JlX3dha2V1cF9zY2hlZF9zd2l0Y2gpOwogCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FrZXVwX25ldyhwcm9iZV93YWtldXApOwogCXVucmVnaXN0ZXJfdHJhY2Vfc2NoZWRfd2FrZXVwKHByb2JlX3dha2V1cCk7CiB9CiAKLXN0YXRpYyBpbnQgd2FrZXVwX3RyYWNlcl9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCitzdGF0aWMgaW50IF9fd2FrZXVwX3RyYWNlcl9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CisJc2F2ZV9sYXRfZmxhZyA9IHRyYWNlX2ZsYWdzICYgVFJBQ0VfSVRFUl9MQVRFTkNZX0ZNVDsKKwl0cmFjZV9mbGFncyB8PSBUUkFDRV9JVEVSX0xBVEVOQ1lfRk1UOworCiAJdHJhY2luZ19tYXhfbGF0ZW5jeSA9IDA7CiAJd2FrZXVwX3RyYWNlID0gdHI7CiAJc3RhcnRfd2FrZXVwX3RyYWNlcih0cik7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgd2FrZXVwX3RyYWNlcl9pbml0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJd2FrZXVwX3J0ID0gMDsKKwlyZXR1cm4gX193YWtldXBfdHJhY2VyX2luaXQodHIpOworfQorCitzdGF0aWMgaW50IHdha2V1cF9ydF90cmFjZXJfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCXdha2V1cF9ydCA9IDE7CisJcmV0dXJuIF9fd2FrZXVwX3RyYWNlcl9pbml0KHRyKTsKK30KKwogc3RhdGljIHZvaWQgd2FrZXVwX3RyYWNlcl9yZXNldChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXN0b3Bfd2FrZXVwX3RyYWNlcih0cik7CiAJLyogbWFrZSBzdXJlIHdlIHB1dCBiYWNrIGFueSB0YXNrcyB3ZSBhcmUgdHJhY2luZyAqLwogCXdha2V1cF9yZXNldCh0cik7CisKKwlpZiAoIXNhdmVfbGF0X2ZsYWcpCisJCXRyYWNlX2ZsYWdzICY9IH5UUkFDRV9JVEVSX0xBVEVOQ1lfRk1UOwogfQogCiBzdGF0aWMgdm9pZCB3YWtldXBfdHJhY2VyX3N0YXJ0KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJd2FrZXVwX3Jlc2V0KHRyKTsKIAl0cmFjZXJfZW5hYmxlZCA9IDE7Ci0Jc2F2ZV90cmFjZXJfZW5hYmxlZCA9IDE7CiB9CiAKIHN0YXRpYyB2b2lkIHdha2V1cF90cmFjZXJfc3RvcChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCXRyYWNlcl9lbmFibGVkID0gMDsKLQlzYXZlX3RyYWNlcl9lbmFibGVkID0gMDsKLX0KLQotc3RhdGljIHZvaWQgd2FrZXVwX3RyYWNlcl9vcGVuKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQkvKiBzdG9wIHRoZSB0cmFjZSB3aGlsZSBkdW1waW5nICovCi0JdHJhY2VyX2VuYWJsZWQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCB3YWtldXBfdHJhY2VyX2Nsb3NlKHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlcikKLXsKLQkvKiBmb3JnZXQgYWJvdXQgYW55IHByb2Nlc3NlcyB3ZSB3ZXJlIHJlY29yZGluZyAqLwotCWlmIChzYXZlX3RyYWNlcl9lbmFibGVkKSB7Ci0JCXdha2V1cF9yZXNldChpdGVyLT50cik7Ci0JCXRyYWNlcl9lbmFibGVkID0gMTsKLQl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdHJhY2VyIHdha2V1cF90cmFjZXIgX19yZWFkX21vc3RseSA9CkBAIC0zODEsOCArMzc1LDIwIEBACiAJLnJlc2V0CQk9IHdha2V1cF90cmFjZXJfcmVzZXQsCiAJLnN0YXJ0CQk9IHdha2V1cF90cmFjZXJfc3RhcnQsCiAJLnN0b3AJCT0gd2FrZXVwX3RyYWNlcl9zdG9wLAotCS5vcGVuCQk9IHdha2V1cF90cmFjZXJfb3BlbiwKLQkuY2xvc2UJCT0gd2FrZXVwX3RyYWNlcl9jbG9zZSwKKwkucHJpbnRfbWF4CT0gMSwKKyNpZmRlZiBDT05GSUdfRlRSQUNFX1NFTEZURVNUCisJLnNlbGZ0ZXN0ICAgID0gdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF93YWtldXAsCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyIHdha2V1cF9ydF90cmFjZXIgX19yZWFkX21vc3RseSA9Cit7CisJLm5hbWUJCT0gIndha2V1cF9ydCIsCisJLmluaXQJCT0gd2FrZXVwX3J0X3RyYWNlcl9pbml0LAorCS5yZXNldAkJPSB3YWtldXBfdHJhY2VyX3Jlc2V0LAorCS5zdGFydAkJPSB3YWtldXBfdHJhY2VyX3N0YXJ0LAorCS5zdG9wCQk9IHdha2V1cF90cmFjZXJfc3RvcCwKKwkud2FpdF9waXBlCT0gcG9sbF93YWl0X3BpcGUsCiAJLnByaW50X21heAk9IDEsCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAogCS5zZWxmdGVzdCAgICA9IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfd2FrZXVwLApAQCAtMzk3LDYgKzQwMywxMCBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlyZXQgPSByZWdpc3Rlcl90cmFjZXIoJndha2V1cF9ydF90cmFjZXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlyZXR1cm4gMDsKIH0KIGRldmljZV9pbml0Y2FsbChpbml0X3dha2V1cF90cmFjZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYwppbmRleCBiYzhlODBhLi4wOGY0ZWIyIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3QuYwpAQCAtMSw1ICsxLDYgQEAKIC8qIEluY2x1ZGUgaW4gdHJhY2UuYyAqLwogCisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKQEAgLTksMTEgKzEwLDEyIEBACiAJY2FzZSBUUkFDRV9GTjoKIAljYXNlIFRSQUNFX0NUWDoKIAljYXNlIFRSQUNFX1dBS0U6Ci0JY2FzZSBUUkFDRV9DT05UOgogCWNhc2UgVFJBQ0VfU1RBQ0s6CiAJY2FzZSBUUkFDRV9QUklOVDoKIAljYXNlIFRSQUNFX1NQRUNJQUw6CiAJY2FzZSBUUkFDRV9CUkFOQ0g6CisJY2FzZSBUUkFDRV9HUkFQSF9FTlQ6CisJY2FzZSBUUkFDRV9HUkFQSF9SRVQ6CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTk5LDkgKzEwMSw2IEBACiAKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKIAotI2RlZmluZSBfX1NUUih4KSAjeAotI2RlZmluZSBTVFIoeCkgX19TVFIoeCkKLQogLyogVGVzdCBkeW5hbWljIGNvZGUgbW9kaWZpY2F0aW9uIGFuZCBmdHJhY2UgZmlsdGVycyAqLwogaW50IHRyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfZHluYW1pY190cmFjaW5nKHN0cnVjdCB0cmFjZXIgKnRyYWNlLAogCQkJCQkgICBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyLApAQCAtMTI1LDE3ICsxMjQsMTcgQEAKIAlmdW5jKCk7CiAKIAkvKgotCSAqIFNvbWUgYXJjaHMgKmNvdWdoKlBvd2VyUEMqY291Z2gqIGFkZCBjaGFyYWNodGVycyB0byB0aGUKKwkgKiBTb21lIGFyY2hzICpjb3VnaCpQb3dlclBDKmNvdWdoKiBhZGQgY2hhcmFjdGVycyB0byB0aGUKIAkgKiBzdGFydCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMuIFdlIHNpbXBseSBwdXQgYSAnKicgdG8KLQkgKiBhY2NvbW9kYXRlIHRoZW0uCisJICogYWNjb21tb2RhdGUgdGhlbS4KIAkgKi8KLQlmdW5jX25hbWUgPSAiKiIgU1RSKERZTl9GVFJBQ0VfVEVTVF9OQU1FKTsKKwlmdW5jX25hbWUgPSAiKiIgX19zdHJpbmdpZnkoRFlOX0ZUUkFDRV9URVNUX05BTUUpOwogCiAJLyogZmlsdGVyIG9ubHkgb24gb3VyIGZ1bmN0aW9uICovCiAJZnRyYWNlX3NldF9maWx0ZXIoZnVuY19uYW1lLCBzdHJsZW4oZnVuY19uYW1lKSwgMSk7CiAKIAkvKiBlbmFibGUgdHJhY2luZyAqLwotCXJldCA9IHRyYWNlLT5pbml0KHRyKTsKKwlyZXQgPSB0cmFjZXJfaW5pdCh0cmFjZSwgdHIpOwogCWlmIChyZXQpIHsKIAkJd2Fybl9mYWlsZWRfaW5pdF90cmFjZXIodHJhY2UsIHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMjA5LDcgKzIwOCw3IEBACiAJZnRyYWNlX2VuYWJsZWQgPSAxOwogCXRyYWNlcl9lbmFibGVkID0gMTsKIAotCXJldCA9IHRyYWNlLT5pbml0KHRyKTsKKwlyZXQgPSB0cmFjZXJfaW5pdCh0cmFjZSwgdHIpOwogCWlmIChyZXQpIHsKIAkJd2Fybl9mYWlsZWRfaW5pdF90cmFjZXIodHJhY2UsIHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtMjQ3LDYgKzI0Niw5MCBAQAogfQogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9UUkFDRVIgKi8KIAorCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCisvKiBNYXhpbXVtIG51bWJlciBvZiBmdW5jdGlvbnMgdG8gdHJhY2UgYmVmb3JlIGRpYWdub3NpbmcgYSBoYW5nICovCisjZGVmaW5lIEdSQVBIX01BWF9GVU5DX1RFU1QJMTAwMDAwMDAwCisKK3N0YXRpYyB2b2lkIF9fZnRyYWNlX2R1bXAoYm9vbCBkaXNhYmxlX3RyYWNpbmcpOworc3RhdGljIHVuc2lnbmVkIGludCBncmFwaF9oYW5nX3RocmVzaDsKKworLyogV3JhcCB0aGUgcmVhbCBmdW5jdGlvbiBlbnRyeSBwcm9iZSB0byBhdm9pZCBwb3NzaWJsZSBoYW5naW5nICovCitzdGF0aWMgaW50IHRyYWNlX2dyYXBoX2VudHJ5X3dhdGNoZG9nKHN0cnVjdCBmdHJhY2VfZ3JhcGhfZW50ICp0cmFjZSkKK3sKKwkvKiBUaGlzIGlzIGhhcm1sZXNzbHkgcmFjeSwgd2Ugd2FudCB0byBhcHByb3hpbWF0ZWx5IGRldGVjdCBhIGhhbmcgKi8KKwlpZiAodW5saWtlbHkoKytncmFwaF9oYW5nX3RocmVzaCA+IEdSQVBIX01BWF9GVU5DX1RFU1QpKSB7CisJCWZ0cmFjZV9ncmFwaF9zdG9wKCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJVRzogRnVuY3Rpb24gZ3JhcGggdHJhY2VyIGhhbmchXG4iKTsKKwkJaWYgKGZ0cmFjZV9kdW1wX29uX29vcHMpCisJCQlfX2Z0cmFjZV9kdW1wKGZhbHNlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHRyYWNlX2dyYXBoX2VudHJ5KHRyYWNlKTsKK30KKworLyoKKyAqIFByZXR0eSBtdWNoIHRoZSBzYW1lIHRoYW4gZm9yIHRoZSBmdW5jdGlvbiB0cmFjZXIgZnJvbSB3aGljaCB0aGUgc2VsZnRlc3QKKyAqIGhhcyBiZWVuIGJvcnJvd2VkLgorICovCitpbnQKK3RyYWNlX3NlbGZ0ZXN0X3N0YXJ0dXBfZnVuY3Rpb25fZ3JhcGgoc3RydWN0IHRyYWNlciAqdHJhY2UsCisJCQkJCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCisJLyoKKwkgKiBTaW11bGF0ZSB0aGUgaW5pdCgpIGNhbGxiYWNrIGJ1dCB3ZSBhdHRhY2ggYSB3YXRjaGRvZyBjYWxsYmFjaworCSAqIHRvIGRldGVjdCBhbmQgcmVjb3ZlciBmcm9tIHBvc3NpYmxlIGhhbmdzCisJICovCisJdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7CisJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2dyYXBoKCZ0cmFjZV9ncmFwaF9yZXR1cm4sCisJCQkJICAgICZ0cmFjZV9ncmFwaF9lbnRyeV93YXRjaGRvZyk7CisJaWYgKHJldCkgeworCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCXRyYWNpbmdfc3RhcnRfY21kbGluZV9yZWNvcmQoKTsKKworCS8qIFNsZWVwIGZvciBhIDEvMTAgb2YgYSBzZWNvbmQgKi8KKwltc2xlZXAoMTAwKTsKKworCS8qIEhhdmUgd2UganVzdCByZWNvdmVyZWQgZnJvbSBhIGhhbmc/ICovCisJaWYgKGdyYXBoX2hhbmdfdGhyZXNoID4gR1JBUEhfTUFYX0ZVTkNfVEVTVCkgeworCQl0cmFjaW5nX3NlbGZ0ZXN0X2Rpc2FibGVkID0gdHJ1ZTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCXRyYWNpbmdfc3RvcCgpOworCisJLyogY2hlY2sgdGhlIHRyYWNlIGJ1ZmZlciAqLworCXJldCA9IHRyYWNlX3Rlc3RfYnVmZmVyKHRyLCAmY291bnQpOworCisJdHJhY2UtPnJlc2V0KHRyKTsKKwl0cmFjaW5nX3N0YXJ0KCk7CisKKwlpZiAoIXJldCAmJiAhY291bnQpIHsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiLi4gbm8gZW50cmllcyBmb3VuZCAuLiIpOworCQlyZXQgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRG9uJ3QgdGVzdCBkeW5hbWljIHRyYWNpbmcsIHRoZSBmdW5jdGlvbiB0cmFjZXIgYWxyZWFkeSBkaWQgKi8KKworb3V0OgorCS8qIFN0b3AgaXQgaWYgd2UgZmFpbGVkICovCisJaWYgKHJldCkKKwkJZnRyYWNlX2dyYXBoX3N0b3AoKTsKKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworCisKICNpZmRlZiBDT05GSUdfSVJRU09GRl9UUkFDRVIKIGludAogdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9pcnFzb2ZmKHN0cnVjdCB0cmFjZXIgKnRyYWNlLCBzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQpAQCAtMjU2LDcgKzMzOSw3IEBACiAJaW50IHJldDsKIAogCS8qIHN0YXJ0IHRoZSB0cmFjaW5nICovCi0JcmV0ID0gdHJhY2UtPmluaXQodHIpOworCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7CiAJaWYgKHJldCkgewogCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKQEAgLTI2OCw2ICszNTEsMTQgQEAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXVkZWxheSgxMDApOwogCWxvY2FsX2lycV9lbmFibGUoKTsKKworCS8qCisJICogU3RvcCB0aGUgdHJhY2VyIHRvIGF2b2lkIGEgd2FybmluZyBzdWJzZXF1ZW50CisJICogdG8gYnVmZmVyIGZsaXBwaW5nIGZhaWx1cmUgYmVjYXVzZSB0cmFjaW5nX3N0b3AoKQorCSAqIGRpc2FibGVzIHRoZSB0ciBhbmQgbWF4IGJ1ZmZlcnMsIG1ha2luZyBmbGlwcGluZyBpbXBvc3NpYmxlCisJICogaW4gY2FzZSBvZiBwYXJhbGxlbHMgbWF4IGlycXMgb2ZmIGxhdGVuY2llcy4KKwkgKi8KKwl0cmFjZS0+c3RvcCh0cik7CiAJLyogc3RvcCB0aGUgdHJhY2luZy4gKi8KIAl0cmFjaW5nX3N0b3AoKTsKIAkvKiBjaGVjayBib3RoIHRyYWNlIGJ1ZmZlcnMgKi8KQEAgLTMxMCw3ICs0MDEsNyBAQAogCX0KIAogCS8qIHN0YXJ0IHRoZSB0cmFjaW5nICovCi0JcmV0ID0gdHJhY2UtPmluaXQodHIpOworCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7CiAJaWYgKHJldCkgewogCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKQEAgLTMyMiw2ICs0MTMsMTQgQEAKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAl1ZGVsYXkoMTAwKTsKIAlwcmVlbXB0X2VuYWJsZSgpOworCisJLyoKKwkgKiBTdG9wIHRoZSB0cmFjZXIgdG8gYXZvaWQgYSB3YXJuaW5nIHN1YnNlcXVlbnQKKwkgKiB0byBidWZmZXIgZmxpcHBpbmcgZmFpbHVyZSBiZWNhdXNlIHRyYWNpbmdfc3RvcCgpCisJICogZGlzYWJsZXMgdGhlIHRyIGFuZCBtYXggYnVmZmVycywgbWFraW5nIGZsaXBwaW5nIGltcG9zc2libGUKKwkgKiBpbiBjYXNlIG9mIHBhcmFsbGVscyBtYXggcHJlZW1wdCBvZmYgbGF0ZW5jaWVzLgorCSAqLworCXRyYWNlLT5zdG9wKHRyKTsKIAkvKiBzdG9wIHRoZSB0cmFjaW5nLiAqLwogCXRyYWNpbmdfc3RvcCgpOwogCS8qIGNoZWNrIGJvdGggdHJhY2UgYnVmZmVycyAqLwpAQCAtMzY0LDEwICs0NjMsMTAgQEAKIAl9CiAKIAkvKiBzdGFydCB0aGUgdHJhY2luZyAqLwotCXJldCA9IHRyYWNlLT5pbml0KHRyKTsKKwlyZXQgPSB0cmFjZXJfaW5pdCh0cmFjZSwgdHIpOwogCWlmIChyZXQpIHsKIAkJd2Fybl9mYWlsZWRfaW5pdF90cmFjZXIodHJhY2UsIHJldCk7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9ub19zdGFydDsKIAl9CiAKIAkvKiByZXNldCB0aGUgbWF4IGxhdGVuY3kgKi8KQEAgLTM4MSwzMSArNDgwLDM1IEBACiAJLyogcmV2ZXJzZSB0aGUgb3JkZXIgb2YgcHJlZW1wdCB2cyBpcnFzICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCisJLyoKKwkgKiBTdG9wIHRoZSB0cmFjZXIgdG8gYXZvaWQgYSB3YXJuaW5nIHN1YnNlcXVlbnQKKwkgKiB0byBidWZmZXIgZmxpcHBpbmcgZmFpbHVyZSBiZWNhdXNlIHRyYWNpbmdfc3RvcCgpCisJICogZGlzYWJsZXMgdGhlIHRyIGFuZCBtYXggYnVmZmVycywgbWFraW5nIGZsaXBwaW5nIGltcG9zc2libGUKKwkgKiBpbiBjYXNlIG9mIHBhcmFsbGVscyBtYXggaXJxcy9wcmVlbXB0IG9mZiBsYXRlbmNpZXMuCisJICovCisJdHJhY2UtPnN0b3AodHIpOwogCS8qIHN0b3AgdGhlIHRyYWNpbmcuICovCiAJdHJhY2luZ19zdG9wKCk7CiAJLyogY2hlY2sgYm90aCB0cmFjZSBidWZmZXJzICovCiAJcmV0ID0gdHJhY2VfdGVzdF9idWZmZXIodHIsIE5VTEwpOwotCWlmIChyZXQpIHsKLQkJdHJhY2luZ19zdGFydCgpOworCWlmIChyZXQpCiAJCWdvdG8gb3V0OwotCX0KIAogCXJldCA9IHRyYWNlX3Rlc3RfYnVmZmVyKCZtYXhfdHIsICZjb3VudCk7Ci0JaWYgKHJldCkgewotCQl0cmFjaW5nX3N0YXJ0KCk7CisJaWYgKHJldCkKIAkJZ290byBvdXQ7Ci0JfQogCiAJaWYgKCFyZXQgJiYgIWNvdW50KSB7CiAJCXByaW50ayhLRVJOX0NPTlQgIi4uIG5vIGVudHJpZXMgZm91bmQgLi4iKTsKIAkJcmV0ID0gLTE7Ci0JCXRyYWNpbmdfc3RhcnQoKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogZG8gdGhlIHRlc3QgYnkgZGlzYWJsaW5nIGludGVycnVwdHMgZmlyc3QgdGhpcyB0aW1lICovCiAJdHJhY2luZ19tYXhfbGF0ZW5jeSA9IDA7CiAJdHJhY2luZ19zdGFydCgpOworCXRyYWNlLT5zdGFydCh0cik7CisKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXVkZWxheSgxMDApOwpAQCAtNDEzLDYgKzUxNiw3IEBACiAJLyogcmV2ZXJzZSB0aGUgb3JkZXIgb2YgcHJlZW1wdCB2cyBpcnFzICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCisJdHJhY2UtPnN0b3AodHIpOwogCS8qIHN0b3AgdGhlIHRyYWNpbmcuICovCiAJdHJhY2luZ19zdG9wKCk7CiAJLyogY2hlY2sgYm90aCB0cmFjZSBidWZmZXJzICovCkBAIC00MjgsOSArNTMyLDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotIG91dDoKLQl0cmFjZS0+cmVzZXQodHIpOworb3V0OgogCXRyYWNpbmdfc3RhcnQoKTsKK291dF9ub19zdGFydDoKKwl0cmFjZS0+cmVzZXQodHIpOwogCXRyYWNpbmdfbWF4X2xhdGVuY3kgPSBzYXZlX21heDsKIAogCXJldHVybiByZXQ7CkBAIC00OTYsNyArNjAxLDcgQEAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZpc3J0KTsKIAogCS8qIHN0YXJ0IHRoZSB0cmFjaW5nICovCi0JcmV0ID0gdHJhY2UtPmluaXQodHIpOworCXJldCA9IHRyYWNlcl9pbml0KHRyYWNlLCB0cik7CiAJaWYgKHJldCkgewogCQl3YXJuX2ZhaWxlZF9pbml0X3RyYWNlcih0cmFjZSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKQEAgLTU1Nyw3ICs2NjIsNyBAQAogCWludCByZXQ7CiAKIAkvKiBzdGFydCB0aGUgdHJhY2luZyAqLwotCXJldCA9IHRyYWNlLT5pbml0KHRyKTsKKwlyZXQgPSB0cmFjZXJfaW5pdCh0cmFjZSwgdHIpOwogCWlmIChyZXQpIHsKIAkJd2Fybl9mYWlsZWRfaW5pdF90cmFjZXIodHJhY2UsIHJldCk7CiAJCXJldHVybiByZXQ7CkBAIC01ODksMzQgKzY5NCw3IEBACiAJaW50IHJldDsKIAogCS8qIHN0YXJ0IHRoZSB0cmFjaW5nICovCi0JcmV0ID0gdHJhY2UtPmluaXQodHIpOwotCWlmIChyZXQpIHsKLQkJd2Fybl9mYWlsZWRfaW5pdF90cmFjZXIodHJhY2UsIHJldCk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIFNsZWVwIGZvciBhIDEvMTAgb2YgYSBzZWNvbmQgKi8KLQltc2xlZXAoMTAwKTsKLQkvKiBzdG9wIHRoZSB0cmFjaW5nLiAqLwotCXRyYWNpbmdfc3RvcCgpOwotCS8qIGNoZWNrIHRoZSB0cmFjZSBidWZmZXIgKi8KLQlyZXQgPSB0cmFjZV90ZXN0X2J1ZmZlcih0ciwgJmNvdW50KTsKLQl0cmFjZS0+cmVzZXQodHIpOwotCXRyYWNpbmdfc3RhcnQoKTsKLQotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1NZU1BST0ZfVFJBQ0VSICovCi0KLSNpZmRlZiBDT05GSUdfQlJBTkNIX1RSQUNFUgotaW50Ci10cmFjZV9zZWxmdGVzdF9zdGFydHVwX2JyYW5jaChzdHJ1Y3QgdHJhY2VyICp0cmFjZSwgc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQl1bnNpZ25lZCBsb25nIGNvdW50OwotCWludCByZXQ7Ci0KLQkvKiBzdGFydCB0aGUgdHJhY2luZyAqLwotCXJldCA9IHRyYWNlLT5pbml0KHRyKTsKKwlyZXQgPSB0cmFjZXJfaW5pdCh0cmFjZSwgdHIpOwogCWlmIChyZXQpIHsKIAkJd2Fybl9mYWlsZWRfaW5pdF90cmFjZXIodHJhY2UsIHJldCk7CiAJCXJldHVybiByZXQ7CkBAIC02MzEsNiArNzA5LDQzIEBACiAJdHJhY2UtPnJlc2V0KHRyKTsKIAl0cmFjaW5nX3N0YXJ0KCk7CiAKKwlpZiAoIXJldCAmJiAhY291bnQpIHsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiLi4gbm8gZW50cmllcyBmb3VuZCAuLiIpOworCQlyZXQgPSAtMTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIENPTkZJR19TWVNQUk9GX1RSQUNFUiAqLworCisjaWZkZWYgQ09ORklHX0JSQU5DSF9UUkFDRVIKK2ludAordHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9icmFuY2goc3RydWN0IHRyYWNlciAqdHJhY2UsIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCit7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKKwlpbnQgcmV0OworCisJLyogc3RhcnQgdGhlIHRyYWNpbmcgKi8KKwlyZXQgPSB0cmFjZXJfaW5pdCh0cmFjZSwgdHIpOworCWlmIChyZXQpIHsKKwkJd2Fybl9mYWlsZWRfaW5pdF90cmFjZXIodHJhY2UsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogU2xlZXAgZm9yIGEgMS8xMCBvZiBhIHNlY29uZCAqLworCW1zbGVlcCgxMDApOworCS8qIHN0b3AgdGhlIHRyYWNpbmcuICovCisJdHJhY2luZ19zdG9wKCk7CisJLyogY2hlY2sgdGhlIHRyYWNlIGJ1ZmZlciAqLworCXJldCA9IHRyYWNlX3Rlc3RfYnVmZmVyKHRyLCAmY291bnQpOworCXRyYWNlLT5yZXNldCh0cik7CisJdHJhY2luZ19zdGFydCgpOworCisJaWYgKCFyZXQgJiYgIWNvdW50KSB7CisJCXByaW50ayhLRVJOX0NPTlQgIi4uIG5vIGVudHJpZXMgZm91bmQgLi4iKTsKKwkJcmV0ID0gLTE7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KICNlbmRpZiAvKiBDT05GSUdfQlJBTkNIX1RSQUNFUiAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYwppbmRleCBkMDg3MWJjLi5jNzUwZjY1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYwpAQCAtMjQ1LDE2ICsyNDUsMzEgQEAKICNlbmRpZgogfQogCitzdGF0aWMgdm9pZCBwcmludF9kaXNhYmxlZChzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCit7CisJc2VxX3B1dHMobSwgIiNcbiIKKwkJICIjICBTdGFjayB0cmFjZXIgZGlzYWJsZWRcbiIKKwkJICIjXG4iCisJCSAiIyBUbyBlbmFibGUgdGhlIHN0YWNrIHRyYWNlciwgZWl0aGVyIGFkZCAnc3RhY2t0cmFjZScgdG8gdGhlXG4iCisJCSAiIyBrZXJuZWwgY29tbWFuZCBsaW5lXG4iCisJCSAiIyBvciAnZWNobyAxID4gL3Byb2Mvc3lzL2tlcm5lbC9zdGFja190cmFjZXJfZW5hYmxlZCdcbiIKKwkJICIjXG4iKTsKK30KKwogc3RhdGljIGludCB0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCWxvbmcgaTsKIAlpbnQgc2l6ZTsKIAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewotCQlzZXFfcHJpbnRmKG0sICIgICAgICAgIERlcHRoICAgU2l6ZSAgICAgIExvY2F0aW9uIgorCQlzZXFfcHJpbnRmKG0sICIgICAgICAgIERlcHRoICAgIFNpemUgICBMb2NhdGlvbiIKIAkJCSAgICIgICAgKCVkIGVudHJpZXMpXG4iCi0JCQkgICAiICAgICAgICAtLS0tLSAgIC0tLS0gICAgICAtLS0tLS0tLVxuIiwKKwkJCSAgICIgICAgICAgIC0tLS0tICAgIC0tLS0gICAtLS0tLS0tLVxuIiwKIAkJCSAgIG1heF9zdGFja190cmFjZS5ucl9lbnRyaWVzKTsKKworCQlpZiAoIXN0YWNrX3RyYWNlcl9lbmFibGVkICYmICFtYXhfc3RhY2tfc2l6ZSkKKwkJCXByaW50X2Rpc2FibGVkKG0pOworCiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N0YXQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkZWJkNwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGF0LmMKQEAgLTAsMCArMSwzMjYgQEAKKy8qCisgKiBJbmZyYXN0cnVjdHVyZSBmb3Igc3RhdGlzdGljIHRyYWNpbmcgKGhpc3RvZ3JhbSBvdXRwdXQpLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBGcmVkZXJpYyBXZWlzYmVja2VyIDxmd2Vpc2JlY0BnbWFpbC5jb20+CisgKgorICogQmFzZWQgb24gdGhlIGNvZGUgZnJvbSB0cmFjZV9icmFuY2guYyB3aGljaCBpcworICogQ29weXJpZ2h0IChDKSAyMDA4IFN0ZXZlbiBSb3N0ZWR0IDxzcm9zdGVkdEByZWRoYXQuY29tPgorICoKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgInRyYWNlX3N0YXQuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgorCisKKy8qIExpc3Qgb2Ygc3RhdCBlbnRyaWVzIGZyb20gYSB0cmFjZXIgKi8KK3N0cnVjdCB0cmFjZV9zdGF0X2xpc3QgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwl2b2lkCQkJKnN0YXQ7Cit9OworCisvKiBBIHN0YXQgc2Vzc2lvbiBpcyB0aGUgc3RhdHMgb3V0cHV0IGluIG9uZSBmaWxlICovCitzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiB7CisJc3RydWN0IGxpc3RfaGVhZAlzZXNzaW9uX2xpc3Q7CisJc3RydWN0IHRyYWNlcl9zdGF0CSp0czsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXN0YXRfbGlzdDsKKwlzdHJ1Y3QgbXV0ZXgJCXN0YXRfbXV0ZXg7CisJc3RydWN0IGRlbnRyeQkJKmZpbGU7Cit9OworCisvKiBBbGwgb2YgdGhlIHNlc3Npb25zIGN1cnJlbnRseSBpbiB1c2UuIEVhY2ggc3RhdCBmaWxlIGVtYmVkIG9uZSBzZXNzaW9uICovCitzdGF0aWMgTElTVF9IRUFEKGFsbF9zdGF0X3Nlc3Npb25zKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYWxsX3N0YXRfc2Vzc2lvbnNfbXV0ZXgpOworCisvKiBUaGUgcm9vdCBkaXJlY3RvcnkgZm9yIGFsbCBzdGF0IGZpbGVzICovCitzdGF0aWMgc3RydWN0IGRlbnRyeQkJKnN0YXRfZGlyOworCisKK3N0YXRpYyB2b2lkIHJlc2V0X3N0YXRfc2Vzc2lvbihzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlzdHJ1Y3QgdHJhY2Vfc3RhdF9saXN0ICpub2RlLCAqbmV4dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCBuZXh0LCAmc2Vzc2lvbi0+c3RhdF9saXN0LCBsaXN0KQorCQlrZnJlZShub2RlKTsKKworCUlOSVRfTElTVF9IRUFEKCZzZXNzaW9uLT5zdGF0X2xpc3QpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X3Nlc3Npb24oc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24gKnNlc3Npb24pCit7CisJZGVidWdmc19yZW1vdmUoc2Vzc2lvbi0+ZmlsZSk7CisJcmVzZXRfc3RhdF9zZXNzaW9uKHNlc3Npb24pOworCW11dGV4X2Rlc3Ryb3koJnNlc3Npb24tPnN0YXRfbXV0ZXgpOworCWtmcmVlKHNlc3Npb24pOworfQorCisvKgorICogRm9yIHRyYWNlcnMgdGhhdCBkb24ndCBwcm92aWRlIGEgc3RhdF9jbXAgY2FsbGJhY2suCisgKiBUaGlzIG9uZSB3aWxsIGZvcmNlIGFuIGltbWVkaWF0ZSBpbnNlcnRpb24gb24gdGFpbCBvZgorICogdGhlIGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgZHVtbXlfY21wKHZvaWQgKnAxLCB2b2lkICpwMikKK3sKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIHN0YXQgbGlzdCBhdCBlYWNoIHRyYWNlX3N0YXQgZmlsZSBvcGVuaW5nLgorICogQWxsIG9mIHRoZXNlIGNvcGllcyBhbmQgc29ydGluZyBhcmUgcmVxdWlyZWQgb24gYWxsIG9wZW5pbmcKKyAqIHNpbmNlIHRoZSBzdGF0cyBjb3VsZCBoYXZlIGNoYW5nZWQgYmV0d2VlbiB0d28gZmlsZSBzZXNzaW9ucy4KKyAqLworc3RhdGljIGludCBzdGF0X3NlcV9pbml0KHN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCB0cmFjZV9zdGF0X2xpc3QgKml0ZXJfZW50cnksICpuZXdfZW50cnk7CisJc3RydWN0IHRyYWNlcl9zdGF0ICp0cyA9IHNlc3Npb24tPnRzOworCXZvaWQgKnN0YXQ7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZzZXNzaW9uLT5zdGF0X211dGV4KTsKKwlyZXNldF9zdGF0X3Nlc3Npb24oc2Vzc2lvbik7CisKKwlpZiAoIXRzLT5zdGF0X2NtcCkKKwkJdHMtPnN0YXRfY21wID0gZHVtbXlfY21wOworCisJc3RhdCA9IHRzLT5zdGF0X3N0YXJ0KCk7CisJaWYgKCFzdGF0KQorCQlnb3RvIGV4aXQ7CisKKwkvKgorCSAqIFRoZSBmaXJzdCBlbnRyeS4gQWN0dWFsbHkgdGhpcyBpcyB0aGUgc2Vjb25kLCBidXQgdGhlIGZpcnN0CisJICogb25lICh0aGUgc3RhdF9saXN0IGhlYWQpIGlzIHBvaW50bGVzcy4KKwkgKi8KKwluZXdfZW50cnkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdHJhY2Vfc3RhdF9saXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfZW50cnkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBleGl0OworCX0KKworCUlOSVRfTElTVF9IRUFEKCZuZXdfZW50cnktPmxpc3QpOworCisJbGlzdF9hZGQoJm5ld19lbnRyeS0+bGlzdCwgJnNlc3Npb24tPnN0YXRfbGlzdCk7CisKKwluZXdfZW50cnktPnN0YXQgPSBzdGF0OworCisJLyoKKwkgKiBJdGVyYXRlIG92ZXIgdGhlIHRyYWNlciBzdGF0IGVudHJpZXMgYW5kIHN0b3JlIHRoZW0gaW4gYSBzb3J0ZWQKKwkgKiBsaXN0LgorCSAqLworCWZvciAoaSA9IDE7IDsgaSsrKSB7CisJCXN0YXQgPSB0cy0+c3RhdF9uZXh0KHN0YXQsIGkpOworCisJCS8qIEVuZCBvZiBpbnNlcnRpb24gKi8KKwkJaWYgKCFzdGF0KQorCQkJYnJlYWs7CisKKwkJbmV3X2VudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRyYWNlX3N0YXRfbGlzdCksIEdGUF9LRVJORUwpOworCQlpZiAoIW5ld19lbnRyeSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdF9mcmVlX2xpc3Q7CisJCX0KKworCQlJTklUX0xJU1RfSEVBRCgmbmV3X2VudHJ5LT5saXN0KTsKKwkJbmV3X2VudHJ5LT5zdGF0ID0gc3RhdDsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoaXRlcl9lbnRyeSwgJnNlc3Npb24tPnN0YXRfbGlzdCwKKwkJCQlsaXN0KSB7CisKKwkJCS8qIEluc2VydGlvbiB3aXRoIGEgZGVzY2VuZGVudCBzb3J0aW5nICovCisJCQlpZiAodHMtPnN0YXRfY21wKGl0ZXJfZW50cnktPnN0YXQsCisJCQkJCW5ld19lbnRyeS0+c3RhdCkgPj0gMCkgeworCisJCQkJbGlzdF9hZGQoJm5ld19lbnRyeS0+bGlzdCwgJml0ZXJfZW50cnktPmxpc3QpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogVGhlIGN1cnJlbnQgbGFyZ2VyIHZhbHVlICovCisJCWlmIChsaXN0X2VtcHR5KCZuZXdfZW50cnktPmxpc3QpKQorCQkJbGlzdF9hZGQoJm5ld19lbnRyeS0+bGlzdCwgJnNlc3Npb24tPnN0YXRfbGlzdCk7CisJfQorZXhpdDoKKwltdXRleF91bmxvY2soJnNlc3Npb24tPnN0YXRfbXV0ZXgpOworCXJldHVybiByZXQ7CisKK2V4aXRfZnJlZV9saXN0OgorCXJlc2V0X3N0YXRfc2Vzc2lvbihzZXNzaW9uKTsKKwltdXRleF91bmxvY2soJnNlc3Npb24tPnN0YXRfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIHZvaWQgKnN0YXRfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcywgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24gKnNlc3Npb24gPSBzLT5wcml2YXRlOworCisJLyogUHJldmVudCBmcm9tIHRyYWNlciBzd2l0Y2ggb3Igc3RhdF9saXN0IG1vZGlmaWNhdGlvbiAqLworCW11dGV4X2xvY2soJnNlc3Npb24tPnN0YXRfbXV0ZXgpOworCisJLyogSWYgd2UgYXJlIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUsIHByaW50IHRoZSBoZWFkZXJzICovCisJaWYgKCEqcG9zICYmIHNlc3Npb24tPnRzLT5zdGF0X2hlYWRlcnMpCisJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CisKKwlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnNlc3Npb24tPnN0YXRfbGlzdCwgKnBvcyk7Cit9CisKK3N0YXRpYyB2b2lkICpzdGF0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24gKnNlc3Npb24gPSBzLT5wcml2YXRlOworCisJaWYgKHAgPT0gU0VRX1NUQVJUX1RPS0VOKQorCQlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnNlc3Npb24tPnN0YXRfbGlzdCwgKnBvcyk7CisKKwlyZXR1cm4gc2VxX2xpc3RfbmV4dChwLCAmc2Vzc2lvbi0+c3RhdF9saXN0LCBwb3MpOworfQorCitzdGF0aWMgdm9pZCBzdGF0X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiAqc2Vzc2lvbiA9IHMtPnByaXZhdGU7CisJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5zdGF0X211dGV4KTsKK30KKworc3RhdGljIGludCBzdGF0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiAqc2Vzc2lvbiA9IHMtPnByaXZhdGU7CisJc3RydWN0IHRyYWNlX3N0YXRfbGlzdCAqbCA9IGxpc3RfZW50cnkodiwgc3RydWN0IHRyYWNlX3N0YXRfbGlzdCwgbGlzdCk7CisKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCisJCXJldHVybiBzZXNzaW9uLT50cy0+c3RhdF9oZWFkZXJzKHMpOworCisJcmV0dXJuIHNlc3Npb24tPnRzLT5zdGF0X3Nob3cocywgbC0+c3RhdCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgdHJhY2Vfc3RhdF9zZXFfb3BzID0geworCS5zdGFydAkJPSBzdGF0X3NlcV9zdGFydCwKKwkubmV4dAkJPSBzdGF0X3NlcV9uZXh0LAorCS5zdG9wCQk9IHN0YXRfc2VxX3N0b3AsCisJLnNob3cJCT0gc3RhdF9zZXFfc2hvdworfTsKKworLyogVGhlIHNlc3Npb24gc3RhdCBpcyByZWZpbGxlZCBhbmQgcmVzb3J0ZWQgYXQgZWFjaCBzdGF0IGZpbGUgb3BlbmluZyAqLworc3RhdGljIGludCB0cmFjaW5nX3N0YXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0OworCisJc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24gKnNlc3Npb24gPSBpbm9kZS0+aV9wcml2YXRlOworCisJcmV0ID0gc2VxX29wZW4oZmlsZSwgJnRyYWNlX3N0YXRfc2VxX29wcyk7CisJaWYgKCFyZXQpIHsKKwkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCQltLT5wcml2YXRlID0gc2Vzc2lvbjsKKwkJcmV0ID0gc3RhdF9zZXFfaW5pdChzZXNzaW9uKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQXZvaWQgY29uc3VtaW5nIG1lbW9yeSB3aXRoIG91ciBub3cgdXNlbGVzcyBsaXN0LgorICovCitzdGF0aWMgaW50IHRyYWNpbmdfc3RhdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGZpbGUgKmYpCit7CisJc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24gKnNlc3Npb24gPSBpLT5pX3ByaXZhdGU7CisKKwltdXRleF9sb2NrKCZzZXNzaW9uLT5zdGF0X211dGV4KTsKKwlyZXNldF9zdGF0X3Nlc3Npb24oc2Vzc2lvbik7CisJbXV0ZXhfdW5sb2NrKCZzZXNzaW9uLT5zdGF0X211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cmFjaW5nX3N0YXRfZm9wcyA9IHsKKwkub3BlbgkJPSB0cmFjaW5nX3N0YXRfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHRyYWNpbmdfc3RhdF9yZWxlYXNlCit9OworCitzdGF0aWMgaW50IHRyYWNpbmdfc3RhdF9pbml0KHZvaWQpCit7CisJc3RydWN0IGRlbnRyeSAqZF90cmFjaW5nOworCisJZF90cmFjaW5nID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOworCisJc3RhdF9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInRyYWNlX3N0YXQiLCBkX3RyYWNpbmcpOworCWlmICghc3RhdF9kaXIpCisJCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAiCisJCQkgICAiJ3RyYWNlX3N0YXQnIGVudHJ5XG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X3N0YXRfZmlsZShzdHJ1Y3QgdHJhY2VyX3N0YXRfc2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlpZiAoIXN0YXRfZGlyICYmIHRyYWNpbmdfc3RhdF9pbml0KCkpCisJCXJldHVybiAtRU5PREVWOworCisJc2Vzc2lvbi0+ZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoc2Vzc2lvbi0+dHMtPm5hbWUsIDA2NDQsCisJCQkJCSAgICBzdGF0X2RpciwKKwkJCQkJICAgIHNlc3Npb24sICZ0cmFjaW5nX3N0YXRfZm9wcyk7CisJaWYgKCFzZXNzaW9uLT5maWxlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKworaW50IHJlZ2lzdGVyX3N0YXRfdHJhY2VyKHN0cnVjdCB0cmFjZXJfc3RhdCAqdHJhY2UpCit7CisJc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24gKnNlc3Npb24sICpub2RlLCAqdG1wOworCWludCByZXQ7CisKKwlpZiAoIXRyYWNlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghdHJhY2UtPnN0YXRfc3RhcnQgfHwgIXRyYWNlLT5zdGF0X25leHQgfHwgIXRyYWNlLT5zdGF0X3Nob3cpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQWxyZWFkeSByZWdpc3RlcmVkPyAqLworCW11dGV4X2xvY2soJmFsbF9zdGF0X3Nlc3Npb25zX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgdG1wLCAmYWxsX3N0YXRfc2Vzc2lvbnMsIHNlc3Npb25fbGlzdCkgeworCQlpZiAobm9kZS0+dHMgPT0gdHJhY2UpIHsKKwkJCW11dGV4X3VubG9jaygmYWxsX3N0YXRfc2Vzc2lvbnNfbXV0ZXgpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZhbGxfc3RhdF9zZXNzaW9uc19tdXRleCk7CisKKwkvKiBJbml0IHRoZSBzZXNzaW9uICovCisJc2Vzc2lvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0cmFjZXJfc3RhdF9zZXNzaW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZXNzaW9uKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNlc3Npb24tPnRzID0gdHJhY2U7CisJSU5JVF9MSVNUX0hFQUQoJnNlc3Npb24tPnNlc3Npb25fbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnNlc3Npb24tPnN0YXRfbGlzdCk7CisJbXV0ZXhfaW5pdCgmc2Vzc2lvbi0+c3RhdF9tdXRleCk7CisJc2Vzc2lvbi0+ZmlsZSA9IE5VTEw7CisKKwlyZXQgPSBpbml0X3N0YXRfZmlsZShzZXNzaW9uKTsKKwlpZiAocmV0KSB7CisJCWRlc3Ryb3lfc2Vzc2lvbihzZXNzaW9uKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBSZWdpc3RlciAqLworCW11dGV4X2xvY2soJmFsbF9zdGF0X3Nlc3Npb25zX211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZzZXNzaW9uLT5zZXNzaW9uX2xpc3QsICZhbGxfc3RhdF9zZXNzaW9ucyk7CisJbXV0ZXhfdW5sb2NrKCZhbGxfc3RhdF9zZXNzaW9uc19tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1bnJlZ2lzdGVyX3N0YXRfdHJhY2VyKHN0cnVjdCB0cmFjZXJfc3RhdCAqdHJhY2UpCit7CisJc3RydWN0IHRyYWNlcl9zdGF0X3Nlc3Npb24gKm5vZGUsICp0bXA7CisKKwltdXRleF9sb2NrKCZhbGxfc3RhdF9zZXNzaW9uc19tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRtcCwgJmFsbF9zdGF0X3Nlc3Npb25zLCBzZXNzaW9uX2xpc3QpIHsKKwkJaWYgKG5vZGUtPnRzID09IHRyYWNlKSB7CisJCQlsaXN0X2RlbCgmbm9kZS0+c2Vzc2lvbl9saXN0KTsKKwkJCWRlc3Ryb3lfc2Vzc2lvbihub2RlKTsKKwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmYWxsX3N0YXRfc2Vzc2lvbnNfbXV0ZXgpOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N0YXQuaCBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAyMjc0YwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGF0LmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfX1RSQUNFX1NUQVRfSAorI2RlZmluZSBfX1RSQUNFX1NUQVRfSAorCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKworLyoKKyAqIElmIHlvdSB3YW50IHRvIHByb3ZpZGUgYSBzdGF0IGZpbGUgKG9uZS1zaG90IHN0YXRpc3RpY3MpLCBmaWxsCisgKiBhbiBpdGVyYXRvciB3aXRoIHN0YXRfc3RhcnQvc3RhdF9uZXh0IGFuZCBhIHN0YXRfc2hvdyBjYWxsYmFja3MuCisgKiBUaGUgb3RoZXJzIGNhbGxiYWNrcyBhcmUgb3B0aW9uYWwuCisgKi8KK3N0cnVjdCB0cmFjZXJfc3RhdCB7CisJLyogVGhlIG5hbWUgb2YgeW91ciBzdGF0IGZpbGUgKi8KKwljb25zdCBjaGFyCQkqbmFtZTsKKwkvKiBJdGVyYXRpb24gb3ZlciBzdGF0aXN0aWMgZW50cmllcyAqLworCXZvaWQJCQkqKCpzdGF0X3N0YXJ0KSh2b2lkKTsKKwl2b2lkCQkJKigqc3RhdF9uZXh0KSh2b2lkICpwcmV2LCBpbnQgaWR4KTsKKwkvKiBDb21wYXJlIHR3byBlbnRyaWVzIGZvciBzdGF0cyBzb3J0aW5nICovCisJaW50CQkJKCpzdGF0X2NtcCkodm9pZCAqcDEsIHZvaWQgKnAyKTsKKwkvKiBQcmludCBhIHN0YXQgZW50cnkgKi8KKwlpbnQJCQkoKnN0YXRfc2hvdykoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpwKTsKKwkvKiBQcmludCB0aGUgaGVhZGVycyBvZiB5b3VyIHN0YXQgZW50cmllcyAqLworCWludAkJCSgqc3RhdF9oZWFkZXJzKShzdHJ1Y3Qgc2VxX2ZpbGUgKnMpOworfTsKKworLyoKKyAqIERlc3Ryb3kgb3IgY3JlYXRlIGEgc3RhdCBmaWxlCisgKi8KK2V4dGVybiBpbnQgcmVnaXN0ZXJfc3RhdF90cmFjZXIoc3RydWN0IHRyYWNlcl9zdGF0ICp0cmFjZSk7CitleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX3N0YXRfdHJhY2VyKHN0cnVjdCB0cmFjZXJfc3RhdCAqdHJhY2UpOworCisjZW5kaWYgLyogX19UUkFDRV9TVEFUX0ggKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJhM2FmMgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zeXNjYWxscy5jCkBAIC0wLDAgKzEsMjUwIEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3N5c2NhbGwuaD4KKworI2luY2x1ZGUgInRyYWNlX291dHB1dC5oIgorI2luY2x1ZGUgInRyYWNlLmgiCisKKy8qIEtlZXAgYSBjb3VudGVyIG9mIHRoZSBzeXNjYWxsIHRyYWNpbmcgdXNlcnMgKi8KK3N0YXRpYyBpbnQgcmVmY291bnQ7CisKKy8qIFByZXZlbnQgZnJvbSByYWNlcyBvbiB0aHJlYWQgZmxhZ3MgdG9nZ2xpbmcgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoc3lzY2FsbF90cmFjZV9sb2NrKTsKKworLyogT3B0aW9uIHRvIGRpc3BsYXkgdGhlIHBhcmFtZXRlcnMgdHlwZXMgKi8KK2VudW0geworCVRSQUNFX1NZU0NBTExTX09QVF9UWVBFUyA9IDB4MSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyX29wdCBzeXNjYWxsc19vcHRzW10gPSB7CisJeyBUUkFDRVJfT1BUKHN5c2NhbGxfYXJnX3R5cGUsIFRSQUNFX1NZU0NBTExTX09QVF9UWVBFUykgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyX2ZsYWdzIHN5c2NhbGxzX2ZsYWdzID0geworCS52YWwgPSAwLCAvKiBCeSBkZWZhdWx0OiBubyBwYXJhbWV0ZXJzIHR5cGVzICovCisJLm9wdHMgPSBzeXNjYWxsc19vcHRzCit9OworCitlbnVtIHByaW50X2xpbmVfdAorcHJpbnRfc3lzY2FsbF9lbnRlcihzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCA9IGl0ZXItPmVudDsKKwlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciAqdHJhY2U7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmVudHJ5OworCWludCBpLCByZXQsIHN5c2NhbGw7CisKKwl0cmFjZV9hc3NpZ25fdHlwZSh0cmFjZSwgZW50KTsKKworCXN5c2NhbGwgPSB0cmFjZS0+bnI7CisKKwllbnRyeSA9IHN5c2NhbGxfbnJfdG9fbWV0YShzeXNjYWxsKTsKKwlpZiAoIWVudHJ5KQorCQlnb3RvIGVuZDsKKworCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzKCIsIGVudHJ5LT5uYW1lKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCisJZm9yIChpID0gMDsgaSA8IGVudHJ5LT5uYl9hcmdzOyBpKyspIHsKKwkJLyogcGFyYW1ldGVyIHR5cGVzICovCisJCWlmIChzeXNjYWxsc19mbGFncy52YWwgJiBUUkFDRV9TWVNDQUxMU19PUFRfVFlQRVMpIHsKKwkJCXJldCA9IHRyYWNlX3NlcV9wcmludGYocywgIiVzICIsIGVudHJ5LT50eXBlc1tpXSk7CisJCQlpZiAoIXJldCkKKwkJCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisJCX0KKwkJLyogcGFyYW1ldGVyIHZhbHVlcyAqLworCQlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlczogJWx4JXMgIiwgZW50cnktPmFyZ3NbaV0sCisJCQkJICAgICAgIHRyYWNlLT5hcmdzW2ldLAorCQkJCSAgICAgICBpID09IGVudHJ5LT5uYl9hcmdzIC0gMSA/ICIpIiA6ICIsIik7CisJCWlmICghcmV0KQorCQkJcmV0dXJuIFRSQUNFX1RZUEVfUEFSVElBTF9MSU5FOworCX0KKworZW5kOgorCXRyYWNlX3NlcV9wcmludGYocywgIlxuIik7CisJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKK30KKworZW51bSBwcmludF9saW5lX3QKK3ByaW50X3N5c2NhbGxfZXhpdChzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgdHJhY2Vfc2VxICpzID0gJml0ZXItPnNlcTsKKwlzdHJ1Y3QgdHJhY2VfZW50cnkgKmVudCA9IGl0ZXItPmVudDsKKwlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9leGl0ICp0cmFjZTsKKwlpbnQgc3lzY2FsbDsKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqZW50cnk7CisJaW50IHJldDsKKworCXRyYWNlX2Fzc2lnbl90eXBlKHRyYWNlLCBlbnQpOworCisJc3lzY2FsbCA9IHRyYWNlLT5ucjsKKworCWVudHJ5ID0gc3lzY2FsbF9ucl90b19tZXRhKHN5c2NhbGwpOworCWlmICghZW50cnkpIHsKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiXG4iKTsKKwkJcmV0dXJuIFRSQUNFX1RZUEVfSEFORExFRDsKKwl9CisKKwlyZXQgPSB0cmFjZV9zZXFfcHJpbnRmKHMsICIlcyAtPiAweCVseFxuIiwgZW50cnktPm5hbWUsCisJCQkJdHJhY2UtPnJldCk7CisJaWYgKCFyZXQpCisJCXJldHVybiBUUkFDRV9UWVBFX1BBUlRJQUxfTElORTsKKworCXJldHVybiBUUkFDRV9UWVBFX0hBTkRMRUQ7Cit9CisKK3ZvaWQgc3RhcnRfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICp0OworCisJbXV0ZXhfbG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKKworCS8qIERvbid0IGVuYWJsZSB0aGUgZmxhZyBvbiB0aGUgdGFza3MgdHdpY2UgKi8KKwlpZiAoKytyZWZjb3VudCAhPSAxKQorCQlnb3RvIHVubG9jazsKKworCWFyY2hfaW5pdF9mdHJhY2Vfc3lzY2FsbHMoKTsKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmdGFza2xpc3RfbG9jaywgZmxhZ3MpOworCisJZG9fZWFjaF90aHJlYWQoZywgdCkgeworCQlzZXRfdHNrX3RocmVhZF9mbGFnKHQsIFRJRl9TWVNDQUxMX0ZUUkFDRSk7CisJfSB3aGlsZV9lYWNoX3RocmVhZChnLCB0KTsKKworCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnRhc2tsaXN0X2xvY2ssIGZsYWdzKTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKK30KKwordm9pZCBzdG9wX2Z0cmFjZV9zeXNjYWxscyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqdDsKKworCW11dGV4X2xvY2soJnN5c2NhbGxfdHJhY2VfbG9jayk7CisKKwkvKiBUaGVyZSBhcmUgcGVyaGFwcyBzdGlsbCBzb21lIHVzZXJzICovCisJaWYgKC0tcmVmY291bnQpCisJCWdvdG8gdW5sb2NrOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnRhc2tsaXN0X2xvY2ssIGZsYWdzKTsKKworCWRvX2VhY2hfdGhyZWFkKGcsIHQpIHsKKwkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKHQsIFRJRl9TWVNDQUxMX0ZUUkFDRSk7CisJfSB3aGlsZV9lYWNoX3RocmVhZChnLCB0KTsKKworCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnRhc2tsaXN0X2xvY2ssIGZsYWdzKTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmc3lzY2FsbF90cmFjZV9sb2NrKTsKK30KKwordm9pZCBmdHJhY2Vfc3lzY2FsbF9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciAqZW50cnk7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN5c19kYXRhOworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJaW50IHNpemU7CisJaW50IHN5c2NhbGxfbnI7CisKKwlzeXNjYWxsX25yID0gc3lzY2FsbF9nZXRfbnIoY3VycmVudCwgcmVncyk7CisKKwlzeXNfZGF0YSA9IHN5c2NhbGxfbnJfdG9fbWV0YShzeXNjYWxsX25yKTsKKwlpZiAoIXN5c19kYXRhKQorCQlyZXR1cm47CisKKwlzaXplID0gc2l6ZW9mKCplbnRyeSkgKyBzaXplb2YodW5zaWduZWQgbG9uZykgKiBzeXNfZGF0YS0+bmJfYXJnczsKKworCWV2ZW50ID0gdHJhY2VfY3VycmVudF9idWZmZXJfbG9ja19yZXNlcnZlKFRSQUNFX1NZU0NBTExfRU5URVIsIHNpemUsCisJCQkJCQkJMCwgMCk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuOworCisJZW50cnkgPSByaW5nX2J1ZmZlcl9ldmVudF9kYXRhKGV2ZW50KTsKKwllbnRyeS0+bnIgPSBzeXNjYWxsX25yOworCXN5c2NhbGxfZ2V0X2FyZ3VtZW50cyhjdXJyZW50LCByZWdzLCAwLCBzeXNfZGF0YS0+bmJfYXJncywgZW50cnktPmFyZ3MpOworCisJdHJhY2VfY3VycmVudF9idWZmZXJfdW5sb2NrX2NvbW1pdChldmVudCwgMCwgMCk7CisJdHJhY2Vfd2FrZV91cCgpOworfQorCit2b2lkIGZ0cmFjZV9zeXNjYWxsX2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHN5c2NhbGxfdHJhY2VfZXhpdCAqZW50cnk7CisJc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKnN5c19kYXRhOworCXN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudCAqZXZlbnQ7CisJaW50IHN5c2NhbGxfbnI7CisKKwlzeXNjYWxsX25yID0gc3lzY2FsbF9nZXRfbnIoY3VycmVudCwgcmVncyk7CisKKwlzeXNfZGF0YSA9IHN5c2NhbGxfbnJfdG9fbWV0YShzeXNjYWxsX25yKTsKKwlpZiAoIXN5c19kYXRhKQorCQlyZXR1cm47CisKKwlldmVudCA9IHRyYWNlX2N1cnJlbnRfYnVmZmVyX2xvY2tfcmVzZXJ2ZShUUkFDRV9TWVNDQUxMX0VYSVQsCisJCQkJc2l6ZW9mKCplbnRyeSksIDAsIDApOworCWlmICghZXZlbnQpCisJCXJldHVybjsKKworCWVudHJ5ID0gcmluZ19idWZmZXJfZXZlbnRfZGF0YShldmVudCk7CisJZW50cnktPm5yID0gc3lzY2FsbF9ucjsKKwllbnRyeS0+cmV0ID0gc3lzY2FsbF9nZXRfcmV0dXJuX3ZhbHVlKGN1cnJlbnQsIHJlZ3MpOworCisJdHJhY2VfY3VycmVudF9idWZmZXJfdW5sb2NrX2NvbW1pdChldmVudCwgMCwgMCk7CisJdHJhY2Vfd2FrZV91cCgpOworfQorCitzdGF0aWMgaW50IGluaXRfc3lzY2FsbF90cmFjZXIoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKK3sKKwlzdGFydF9mdHJhY2Vfc3lzY2FsbHMoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZXNldF9zeXNjYWxsX3RyYWNlcihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQoreworCXN0b3BfZnRyYWNlX3N5c2NhbGxzKCk7CisJdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgc3lzY2FsbF9lbnRlcl9ldmVudCA9IHsKKwkudHlwZQkgCT0gVFJBQ0VfU1lTQ0FMTF9FTlRFUiwKKwkudHJhY2UJCT0gcHJpbnRfc3lzY2FsbF9lbnRlciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VfZXZlbnQgc3lzY2FsbF9leGl0X2V2ZW50ID0geworCS50eXBlCSAJPSBUUkFDRV9TWVNDQUxMX0VYSVQsCisJLnRyYWNlCQk9IHByaW50X3N5c2NhbGxfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2VyIHN5c2NhbGxfdHJhY2VyIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJICAgICAJPSAic3lzY2FsbCIsCisJLmluaXQJCT0gaW5pdF9zeXNjYWxsX3RyYWNlciwKKwkucmVzZXQJCT0gcmVzZXRfc3lzY2FsbF90cmFjZXIsCisJLmZsYWdzCQk9ICZzeXNjYWxsc19mbGFncywKK307CisKK19faW5pdCBpbnQgcmVnaXN0ZXJfZnRyYWNlX3N5c2NhbGxzKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgmc3lzY2FsbF9lbnRlcl9ldmVudCk7CisJaWYgKCFyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZXZlbnQgJWQgZmFpbGVkIHRvIHJlZ2lzdGVyXG4iLAorCQkgICAgICAgc3lzY2FsbF9lbnRlcl9ldmVudC50eXBlKTsKKwkJV0FSTl9PTl9PTkNFKDEpOworCX0KKworCXJldCA9IHJlZ2lzdGVyX2Z0cmFjZV9ldmVudCgmc3lzY2FsbF9leGl0X2V2ZW50KTsKKwlpZiAoIXJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJldmVudCAlZCBmYWlsZWQgdG8gcmVnaXN0ZXJcbiIsCisJCSAgICAgICBzeXNjYWxsX2V4aXRfZXZlbnQudHlwZSk7CisJCVdBUk5fT05fT05DRSgxKTsKKwl9CisKKwlyZXR1cm4gcmVnaXN0ZXJfdHJhY2VyKCZzeXNjYWxsX3RyYWNlcik7Cit9CitkZXZpY2VfaW5pdGNhbGwocmVnaXN0ZXJfZnRyYWNlX3N5c2NhbGxzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzcHJvZi5jCmluZGV4IGVhY2E1YWQuLjkxZmQxOWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zeXNwcm9mLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N5c3Byb2YuYwpAQCAtODgsNyArODgsNyBAQAogCX0KIH0KIAotY29uc3Qgc3RhdGljIHN0cnVjdCBzdGFja3RyYWNlX29wcyBiYWNrdHJhY2Vfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyBiYWNrdHJhY2Vfb3BzID0gewogCS53YXJuaW5nCQk9IGJhY2t0cmFjZV93YXJuaW5nLAogCS53YXJuaW5nX3N5bWJvbAkJPSBiYWNrdHJhY2Vfd2FybmluZ19zeW1ib2wsCiAJLnN0YWNrCQkJPSBiYWNrdHJhY2Vfc3RhY2ssCkBAIC0yMjYsMTUgKzIyNiw2IEBACiAJCXN0b3Bfc3RhY2tfdGltZXIoY3B1KTsKIH0KIAotc3RhdGljIHZvaWQgc3RhcnRfc3RhY2tfdHJhY2Uoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKLXsKLQltdXRleF9sb2NrKCZzYW1wbGVfdGltZXJfbG9jayk7Ci0JdHJhY2luZ19yZXNldF9vbmxpbmVfY3B1cyh0cik7Ci0Jc3RhcnRfc3RhY2tfdGltZXJzKCk7Ci0JdHJhY2VyX2VuYWJsZWQgPSAxOwotCW11dGV4X3VubG9jaygmc2FtcGxlX3RpbWVyX2xvY2spOwotfQotCiBzdGF0aWMgdm9pZCBzdG9wX3N0YWNrX3RyYWNlKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7CiAJbXV0ZXhfbG9jaygmc2FtcGxlX3RpbWVyX2xvY2spOwpAQCAtMjQ3LDEyICsyMzgsMTggQEAKIHsKIAlzeXNwcm9mX3RyYWNlID0gdHI7CiAKLQlzdGFydF9zdGFja190cmFjZSh0cik7CisJdHJhY2luZ19zdGFydF9jbWRsaW5lX3JlY29yZCgpOworCisJbXV0ZXhfbG9jaygmc2FtcGxlX3RpbWVyX2xvY2spOworCXN0YXJ0X3N0YWNrX3RpbWVycygpOworCXRyYWNlcl9lbmFibGVkID0gMTsKKwltdXRleF91bmxvY2soJnNhbXBsZV90aW1lcl9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc3RhY2tfdHJhY2VfcmVzZXQoc3RydWN0IHRyYWNlX2FycmF5ICp0cikKIHsKKwl0cmFjaW5nX3N0b3BfY21kbGluZV9yZWNvcmQoKTsKIAlzdG9wX3N0YWNrX3RyYWNlKHRyKTsKIH0KIApAQCAtMzE3LDcgKzMxNCw3IEBACiAJcmV0dXJuIGNudDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3lzcHJvZl9zYW1wbGVfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5c3Byb2Zfc2FtcGxlX2ZvcHMgPSB7CiAJLnJlYWQJCT0gc3lzcHJvZl9zYW1wbGVfcmVhZCwKIAkud3JpdGUJCT0gc3lzcHJvZl9zYW1wbGVfd3JpdGUsCiB9OwpAQCAtMzMwLDUgKzMyNyw1IEBACiAJCQlkX3RyYWNlciwgTlVMTCwgJnN5c3Byb2Zfc2FtcGxlX2ZvcHMpOwogCWlmIChlbnRyeSkKIAkJcmV0dXJuOwotCXByX3dhcm5pbmcoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyAnZHluX2Z0cmFjZV90b3RhbF9pbmZvJyBlbnRyeVxuIik7CisJcHJfd2FybmluZygiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzICdzeXNwcm9mX3NhbXBsZV9wZXJpb2QnIGVudHJ5XG4iKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV93b3JrcXVldWUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV93b3JrcXVldWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTcyMDFlCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3dvcmtxdWV1ZS5jCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogV29ya3F1ZXVlIHN0YXRpc3RpY2FsIHRyYWNlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZGVyaWMgV2Vpc2JlY2tlciA8ZndlaXNiZWNAZ21haWwuY29tPgorICoKKyAqLworCisKKyNpbmNsdWRlIDx0cmFjZS93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSAidHJhY2Vfc3RhdC5oIgorI2luY2x1ZGUgInRyYWNlLmgiCisKKworLyogQSBjcHUgd29ya3F1ZXVlIHRocmVhZCAqLworc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICBsaXN0OworLyogVXNlZnVsIHRvIGtub3cgaWYgd2UgcHJpbnQgdGhlIGNwdSBoZWFkZXJzICovCisJYm9vbAkJICAgICAgICAgICAgZmlyc3RfZW50cnk7CisJaW50CQkgICAgICAgICAgICBjcHU7CisJcGlkX3QJCQkgICAgcGlkOworLyogQ2FuIGJlIGluc2VydGVkIGZyb20gaW50ZXJydXB0IG9yIHVzZXIgY29udGV4dCwgbmVlZCB0byBiZSBhdG9taWMgKi8KKwlhdG9taWNfdAkgICAgICAgICAgICBpbnNlcnRlZDsKKy8qCisgKiAgRG9uJ3QgbmVlZCB0byBiZSBhdG9taWMsIHdvcmtzIGFyZSBzZXJpYWxpemVkIGluIGEgc2luZ2xlIHdvcmtxdWV1ZSB0aHJlYWQKKyAqICBvbiBhIHNpbmdsZSBDUFUuCisgKi8KKwl1bnNpZ25lZCBpbnQJCSAgICBleGVjdXRlZDsKK307CisKKy8qIExpc3Qgb2Ygd29ya3F1ZXVlIHRocmVhZHMgb24gb25lIGNwdSAqLworc3RydWN0IHdvcmtxdWV1ZV9nbG9iYWxfc3RhdHMgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzcGlubG9ja190CQlsb2NrOworfTsKKworLyogRG9uJ3QgbmVlZCBhIGdsb2JhbCBsb2NrIGJlY2F1c2UgYWxsb2NhdGVkIGJlZm9yZSB0aGUgd29ya3F1ZXVlcywgYW5kCisgKiBuZXZlciBmcmVlZC4KKyAqLworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB3b3JrcXVldWVfZ2xvYmFsX3N0YXRzLCBhbGxfd29ya3F1ZXVlX3N0YXQpOworI2RlZmluZSB3b3JrcXVldWVfY3B1X3N0YXQoY3B1KSAoJnBlcl9jcHUoYWxsX3dvcmtxdWV1ZV9zdGF0LCBjcHUpKQorCisvKiBJbnNlcnRpb24gb2YgYSB3b3JrICovCitzdGF0aWMgdm9pZAorcHJvYmVfd29ya3F1ZXVlX2luc2VydGlvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKndxX3RocmVhZCwKKwkJCSAgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KCZ3cV90aHJlYWQtPmNwdXNfYWxsb3dlZCk7CisJc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMgKm5vZGUsICpuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbmV4dCwgJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0LAorCQkJCQkJCWxpc3QpIHsKKwkJaWYgKG5vZGUtPnBpZCA9PSB3cV90aHJlYWQtPnBpZCkgeworCQkJYXRvbWljX2luYygmbm9kZS0+aW5zZXJ0ZWQpOworCQkJZ290byBmb3VuZDsKKwkJfQorCX0KKwlwcl9kZWJ1ZygidHJhY2Vfd29ya3F1ZXVlOiBlbnRyeSBub3QgZm91bmRcbiIpOworZm91bmQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKK30KKworLyogRXhlY3V0aW9uIG9mIGEgd29yayAqLworc3RhdGljIHZvaWQKK3Byb2JlX3dvcmtxdWV1ZV9leGVjdXRpb24oc3RydWN0IHRhc2tfc3RydWN0ICp3cV90aHJlYWQsCisJCQkgIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgY3B1ID0gY3B1bWFza19maXJzdCgmd3FfdGhyZWFkLT5jcHVzX2FsbG93ZWQpOworCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzICpub2RlLCAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIG5leHQsICZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bGlzdCwKKwkJCQkJCQlsaXN0KSB7CisJCWlmIChub2RlLT5waWQgPT0gd3FfdGhyZWFkLT5waWQpIHsKKwkJCW5vZGUtPmV4ZWN1dGVkKys7CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCXByX2RlYnVnKCJ0cmFjZV93b3JrcXVldWU6IGVudHJ5IG5vdCBmb3VuZFxuIik7Citmb3VuZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworfQorCisvKiBDcmVhdGlvbiBvZiBhIGNwdSB3b3JrcXVldWUgdGhyZWFkICovCitzdGF0aWMgdm9pZCBwcm9iZV93b3JrcXVldWVfY3JlYXRpb24oc3RydWN0IHRhc2tfc3RydWN0ICp3cV90aHJlYWQsIGludCBjcHUpCit7CisJc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMgKmN3czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJV0FSTl9PTihjcHUgPCAwKTsKKworCS8qIFdvcmtxdWV1ZXMgYXJlIHNvbWV0aW1lcyBjcmVhdGVkIGluIGF0b21pYyBjb250ZXh0ICovCisJY3dzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWN3cykgeworCQlwcl93YXJuaW5nKCJ0cmFjZV93b3JrcXVldWU6IG5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKKwkJcmV0dXJuOworCX0KKwlJTklUX0xJU1RfSEVBRCgmY3dzLT5saXN0KTsKKwljd3MtPmNwdSA9IGNwdTsKKworCWN3cy0+cGlkID0gd3FfdGhyZWFkLT5waWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxpc3QpKQorCQljd3MtPmZpcnN0X2VudHJ5ID0gdHJ1ZTsKKwlsaXN0X2FkZF90YWlsKCZjd3MtPmxpc3QsICZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKK30KKworLyogRGVzdHJ1Y3Rpb24gb2YgYSBjcHUgd29ya3F1ZXVlIHRocmVhZCAqLworc3RhdGljIHZvaWQgcHJvYmVfd29ya3F1ZXVlX2Rlc3RydWN0aW9uKHN0cnVjdCB0YXNrX3N0cnVjdCAqd3FfdGhyZWFkKQoreworCS8qIFdvcmtxdWV1ZSBvbmx5IGV4ZWN1dGUgb24gb25lIGNwdSAqLworCWludCBjcHUgPSBjcHVtYXNrX2ZpcnN0KCZ3cV90aHJlYWQtPmNwdXNfYWxsb3dlZCk7CisJc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMgKm5vZGUsICpuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobm9kZSwgbmV4dCwgJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0LAorCQkJCQkJCWxpc3QpIHsKKwkJaWYgKG5vZGUtPnBpZCA9PSB3cV90aHJlYWQtPnBpZCkgeworCQkJbGlzdF9kZWwoJm5vZGUtPmxpc3QpOworCQkJa2ZyZWUobm9kZSk7CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCisJcHJfZGVidWcoInRyYWNlX3dvcmtxdWV1ZTogZG9uJ3QgZmluZCB3b3JrcXVldWUgdG8gZGVzdHJveVxuIik7Citmb3VuZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworCit9CisKK3N0YXRpYyBzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cyAqd29ya3F1ZXVlX3N0YXRfc3RhcnRfY3B1KGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cyAqcmV0ID0gTlVMTDsKKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0KSkKKwkJcmV0ID0gbGlzdF9lbnRyeSh3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bGlzdC5uZXh0LAorCQkJCSBzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cywgbGlzdCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgKndvcmtxdWV1ZV9zdGF0X3N0YXJ0KHZvaWQpCit7CisJaW50IGNwdTsKKwl2b2lkICpyZXQgPSBOVUxMOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlyZXQgPSB3b3JrcXVldWVfc3RhdF9zdGFydF9jcHUoY3B1KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqd29ya3F1ZXVlX3N0YXRfbmV4dCh2b2lkICpwcmV2LCBpbnQgaWR4KQoreworCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0YXRzICpwcmV2X2N3cyA9IHByZXY7CisJaW50IGNwdSA9IHByZXZfY3dzLT5jcHU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICpyZXQgPSBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CisJaWYgKGxpc3RfaXNfbGFzdCgmcHJldl9jd3MtPmxpc3QsICZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bGlzdCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxvY2ssIGZsYWdzKTsKKwkJZG8geworCQkJY3B1ID0gY3B1bWFza19uZXh0KGNwdSwgY3B1X3Bvc3NpYmxlX21hc2spOworCQkJaWYgKGNwdSA+PSBucl9jcHVfaWRzKQorCQkJCXJldHVybiBOVUxMOworCQl9IHdoaWxlICghKHJldCA9IHdvcmtxdWV1ZV9zdGF0X3N0YXJ0X2NwdShjcHUpKSk7CisJCXJldHVybiByZXQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gbGlzdF9lbnRyeShwcmV2X2N3cy0+bGlzdC5uZXh0LCBzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdGF0cywKKwkJCSAgbGlzdCk7Cit9CisKK3N0YXRpYyBpbnQgd29ya3F1ZXVlX3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnApCit7CisJc3RydWN0IGNwdV93b3JrcXVldWVfc3RhdHMgKmN3cyA9IHA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY3B1ID0gY3dzLT5jcHU7CisJc3RydWN0IHBpZCAqcGlkOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrLCBmbGFncyk7CisJaWYgKCZjd3MtPmxpc3QgPT0gd29ya3F1ZXVlX2NwdV9zdGF0KGNwdSktPmxpc3QubmV4dCkKKwkJc2VxX3ByaW50ZihzLCAiXG4iKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrcXVldWVfY3B1X3N0YXQoY3B1KS0+bG9jaywgZmxhZ3MpOworCisJcGlkID0gZmluZF9nZXRfcGlkKGN3cy0+cGlkKTsKKwlpZiAocGlkKSB7CisJCXRzayA9IGdldF9waWRfdGFzayhwaWQsIFBJRFRZUEVfUElEKTsKKwkJaWYgKHRzaykgeworCQkJc2VxX3ByaW50ZihzLCAiJTNkICU2ZCAgICAgJTZ1ICAgICAgICVzXG4iLCBjd3MtPmNwdSwKKwkJCQkgICBhdG9taWNfcmVhZCgmY3dzLT5pbnNlcnRlZCksIGN3cy0+ZXhlY3V0ZWQsCisJCQkJICAgdHNrLT5jb21tKTsKKwkJCXB1dF90YXNrX3N0cnVjdCh0c2spOworCQl9CisJCXB1dF9waWQocGlkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3b3JrcXVldWVfc3RhdF9oZWFkZXJzKHN0cnVjdCBzZXFfZmlsZSAqcykKK3sKKwlzZXFfcHJpbnRmKHMsICIjIENQVSAgSU5TRVJURUQgIEVYRUNVVEVEICAgTkFNRVxuIik7CisJc2VxX3ByaW50ZihzLCAiIyB8ICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB0cmFjZXJfc3RhdCB3b3JrcXVldWVfc3RhdHMgX19yZWFkX21vc3RseSA9IHsKKwkubmFtZSA9ICJ3b3JrcXVldWVzIiwKKwkuc3RhdF9zdGFydCA9IHdvcmtxdWV1ZV9zdGF0X3N0YXJ0LAorCS5zdGF0X25leHQgPSB3b3JrcXVldWVfc3RhdF9uZXh0LAorCS5zdGF0X3Nob3cgPSB3b3JrcXVldWVfc3RhdF9zaG93LAorCS5zdGF0X2hlYWRlcnMgPSB3b3JrcXVldWVfc3RhdF9oZWFkZXJzCit9OworCisKK2ludCBfX2luaXQgc3RhdF93b3JrcXVldWVfaW5pdCh2b2lkKQoreworCWlmIChyZWdpc3Rlcl9zdGF0X3RyYWNlcigmd29ya3F1ZXVlX3N0YXRzKSkgeworCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVnaXN0ZXIgd29ya3F1ZXVlIHN0YXQgdHJhY2VyXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9Citmc19pbml0Y2FsbChzdGF0X3dvcmtxdWV1ZV9pbml0KTsKKworLyoKKyAqIFdvcmtxdWV1ZXMgYXJlIGNyZWF0ZWQgdmVyeSBlYXJseSwganVzdCBhZnRlciBwcmUtc21wIGluaXRjYWxscy4KKyAqIFNvIHdlIG11c3QgcmVnaXN0ZXIgb3VyIHRyYWNlcG9pbnRzIGF0IHRoaXMgc3RhZ2UuCisgKi8KK2ludCBfX2luaXQgdHJhY2Vfd29ya3F1ZXVlX2Vhcmx5X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0LCBjcHU7CisKKwlyZXQgPSByZWdpc3Rlcl90cmFjZV93b3JrcXVldWVfaW5zZXJ0aW9uKHByb2JlX3dvcmtxdWV1ZV9pbnNlcnRpb24pOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfd29ya3F1ZXVlX2V4ZWN1dGlvbihwcm9iZV93b3JrcXVldWVfZXhlY3V0aW9uKTsKKwlpZiAocmV0KQorCQlnb3RvIG5vX2luc2VydGlvbjsKKworCXJldCA9IHJlZ2lzdGVyX3RyYWNlX3dvcmtxdWV1ZV9jcmVhdGlvbihwcm9iZV93b3JrcXVldWVfY3JlYXRpb24pOworCWlmIChyZXQpCisJCWdvdG8gbm9fZXhlY3V0aW9uOworCisJcmV0ID0gcmVnaXN0ZXJfdHJhY2Vfd29ya3F1ZXVlX2Rlc3RydWN0aW9uKHByb2JlX3dvcmtxdWV1ZV9kZXN0cnVjdGlvbik7CisJaWYgKHJldCkKKwkJZ290byBub19jcmVhdGlvbjsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJc3Bpbl9sb2NrX2luaXQoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5sb2NrKTsKKwkJSU5JVF9MSVNUX0hFQUQoJndvcmtxdWV1ZV9jcHVfc3RhdChjcHUpLT5saXN0KTsKKwl9CisKKwlyZXR1cm4gMDsKKworbm9fY3JlYXRpb246CisJdW5yZWdpc3Rlcl90cmFjZV93b3JrcXVldWVfY3JlYXRpb24ocHJvYmVfd29ya3F1ZXVlX2NyZWF0aW9uKTsKK25vX2V4ZWN1dGlvbjoKKwl1bnJlZ2lzdGVyX3RyYWNlX3dvcmtxdWV1ZV9leGVjdXRpb24ocHJvYmVfd29ya3F1ZXVlX2V4ZWN1dGlvbik7Citub19pbnNlcnRpb246CisJdW5yZWdpc3Rlcl90cmFjZV93b3JrcXVldWVfaW5zZXJ0aW9uKHByb2JlX3dvcmtxdWV1ZV9pbnNlcnRpb24pOworb3V0OgorCXByX3dhcm5pbmcoInRyYWNlX3dvcmtxdWV1ZTogdW5hYmxlIHRvIHRyYWNlIHdvcmtxdWV1ZXNcbiIpOworCisJcmV0dXJuIDE7Cit9CitlYXJseV9pbml0Y2FsbCh0cmFjZV93b3JrcXVldWVfZWFybHlfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2Vwb2ludC5jIGIva2VybmVsL3RyYWNlcG9pbnQuYwppbmRleCA3OTYwMjc0Li4xZWY1ZDNhIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2Vwb2ludC5jCisrKyBiL2tlcm5lbC90cmFjZXBvaW50LmMKQEAgLTI3MiwxMiArMjcyLDE1IEBACiAgKgogICogVXBkYXRlcyB0aGUgcHJvYmUgY2FsbGJhY2sgY29ycmVzcG9uZGluZyB0byBhIHJhbmdlIG9mIHRyYWNlcG9pbnRzLgogICovCi12b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKQordm9pZAordHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKQogewogCXN0cnVjdCB0cmFjZXBvaW50ICppdGVyOwogCXN0cnVjdCB0cmFjZXBvaW50X2VudHJ5ICptYXJrX2VudHJ5OwogCisJaWYgKCFiZWdpbikKKwkJcmV0dXJuOworCiAJbXV0ZXhfbG9jaygmdHJhY2Vwb2ludHNfbXV0ZXgpOwogCWZvciAoaXRlciA9IGJlZ2luOyBpdGVyIDwgZW5kOyBpdGVyKyspIHsKIAkJbWFya19lbnRyeSA9IGdldF90cmFjZXBvaW50KGl0ZXItPm5hbWUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3V0c25hbWVfc3lzY3RsLmMgYi9rZXJuZWwvdXRzbmFtZV9zeXNjdGwuYwppbmRleCAzYjM0YjM1Li45MjM1OWNjIDEwMDY0NAotLS0gYS9rZXJuZWwvdXRzbmFtZV9zeXNjdGwuYworKysgYi9rZXJuZWwvdXRzbmFtZV9zeXNjdGwuYwpAQCAtMzcsNyArMzcsNyBAQAogCQl1cF93cml0ZSgmdXRzX3NlbSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19QUk9DX1NZU0NUTAogLyoKICAqCVNwZWNpYWwgY2FzZSBvZiBkb3N0cmluZyBmb3IgdGhlIFVUUyBzdHJ1Y3R1cmUuIFRoaXMgaGFzIGxvY2tzCiAgKgl0byBvYnNlcnZlLiBTaG91bGQgdGhpcyBiZSBpbiBrZXJuZWwvc3lzLmMgPz8/PwpkaWZmIC0tZ2l0IGEva2VybmVsL3dvcmtxdWV1ZS5jIGIva2VybmVsL3dvcmtxdWV1ZS5jCmluZGV4IDlhZWRkOWYuLmI2Yjk2NmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC93b3JrcXVldWUuYworKysgYi9rZXJuZWwvd29ya3F1ZXVlLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+CiAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2luY2x1ZGUgPHRyYWNlL3dvcmtxdWV1ZS5oPgogCiAvKgogICogVGhlIHBlci1DUFUgd29ya3F1ZXVlIChpZiBzaW5nbGUgdGhyZWFkLCB3ZSBhbHdheXMgdXNlIHRoZSBmaXJzdApAQCAtNDgsOCArNDksNiBAQAogCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOwotCi0JaW50IHJ1bl9kZXB0aDsJCS8qIERldGVjdCBydW5fd29ya3F1ZXVlKCkgcmVjdXJzaW9uIGRlcHRoICovCiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogLyoKQEAgLTEyNSw5ICsxMjQsMTMgQEAKIAlyZXR1cm4gKHZvaWQgKikgKGF0b21pY19sb25nX3JlYWQoJndvcmstPmRhdGEpICYgV09SS19TVFJVQ1RfV1FfREFUQV9NQVNLKTsKIH0KIAorREVGSU5FX1RSQUNFKHdvcmtxdWV1ZV9pbnNlcnRpb24pOworCiBzdGF0aWMgdm9pZCBpbnNlcnRfd29yayhzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSwKIAkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKKwl0cmFjZV93b3JrcXVldWVfaW5zZXJ0aW9uKGN3cS0+dGhyZWFkLCB3b3JrKTsKKwogCXNldF93cV9kYXRhKHdvcmssIGN3cSk7CiAJLyoKIAkgKiBFbnN1cmUgdGhhdCB3ZSBnZXQgdGhlIHJpZ2h0IHdvcmstPmRhdGEgaWYgd2Ugc2VlIHRoZQpAQCAtMjU5LDE2ICsyNjIsMTEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHF1ZXVlX2RlbGF5ZWRfd29ya19vbik7CiAKK0RFRklORV9UUkFDRSh3b3JrcXVldWVfZXhlY3V0aW9uKTsKKwogc3RhdGljIHZvaWQgcnVuX3dvcmtxdWV1ZShzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSkKIHsKIAlzcGluX2xvY2tfaXJxKCZjd3EtPmxvY2spOwotCWN3cS0+cnVuX2RlcHRoKys7Ci0JaWYgKGN3cS0+cnVuX2RlcHRoID4gMykgewotCQkvKiBtb3J0b24gZ2V0cyB0byBlYXQgaGlzIGhhdCAqLwotCQlwcmludGsoIiVzOiByZWN1cnNpb24gZGVwdGggZXhjZWVkZWQ6ICVkXG4iLAotCQkJX19mdW5jX18sIGN3cS0+cnVuX2RlcHRoKTsKLQkJZHVtcF9zdGFjaygpOwotCX0KIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmN3cS0+d29ya2xpc3QpKSB7CiAJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayA9IGxpc3RfZW50cnkoY3dxLT53b3JrbGlzdC5uZXh0LAogCQkJCQkJc3RydWN0IHdvcmtfc3RydWN0LCBlbnRyeSk7CkBAIC0yODQsNyArMjgyLDcgQEAKIAkJICovCiAJCXN0cnVjdCBsb2NrZGVwX21hcCBsb2NrZGVwX21hcCA9IHdvcmstPmxvY2tkZXBfbWFwOwogI2VuZGlmCi0KKwkJdHJhY2Vfd29ya3F1ZXVlX2V4ZWN1dGlvbihjd3EtPnRocmVhZCwgd29yayk7CiAJCWN3cS0+Y3VycmVudF93b3JrID0gd29yazsKIAkJbGlzdF9kZWxfaW5pdChjd3EtPndvcmtsaXN0Lm5leHQpOwogCQlzcGluX3VubG9ja19pcnEoJmN3cS0+bG9jayk7CkBAIC0zMTEsNyArMzA5LDYgQEAKIAkJc3Bpbl9sb2NrX2lycSgmY3dxLT5sb2NrKTsKIAkJY3dxLT5jdXJyZW50X3dvcmsgPSBOVUxMOwogCX0KLQljd3EtPnJ1bl9kZXB0aC0tOwogCXNwaW5fdW5sb2NrX2lycSgmY3dxLT5sb2NrKTsKIH0KIApAQCAtMzY4LDI5ICszNjUsMjAgQEAKIAogc3RhdGljIGludCBmbHVzaF9jcHVfd29ya3F1ZXVlKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxKQogewotCWludCBhY3RpdmU7CisJaW50IGFjdGl2ZSA9IDA7CisJc3RydWN0IHdxX2JhcnJpZXIgYmFycjsKIAotCWlmIChjd3EtPnRocmVhZCA9PSBjdXJyZW50KSB7Ci0JCS8qCi0JCSAqIFByb2JhYmx5IGtldmVudGQgdHJ5aW5nIHRvIGZsdXNoIGl0cyBvd24gcXVldWUuIFNvIHNpbXBseSBydW4KLQkJICogaXQgYnkgaGFuZCByYXRoZXIgdGhhbiBkZWFkbG9ja2luZy4KLQkJICovCi0JCXJ1bl93b3JrcXVldWUoY3dxKTsKKwlXQVJOX09OKGN3cS0+dGhyZWFkID09IGN1cnJlbnQpOworCisJc3Bpbl9sb2NrX2lycSgmY3dxLT5sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmN3cS0+d29ya2xpc3QpIHx8IGN3cS0+Y3VycmVudF93b3JrICE9IE5VTEwpIHsKKwkJaW5zZXJ0X3dxX2JhcnJpZXIoY3dxLCAmYmFyciwgJmN3cS0+d29ya2xpc3QpOwogCQlhY3RpdmUgPSAxOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCB3cV9iYXJyaWVyIGJhcnI7Ci0KLQkJYWN0aXZlID0gMDsKLQkJc3Bpbl9sb2NrX2lycSgmY3dxLT5sb2NrKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZjd3EtPndvcmtsaXN0KSB8fCBjd3EtPmN1cnJlbnRfd29yayAhPSBOVUxMKSB7Ci0JCQlpbnNlcnRfd3FfYmFycmllcihjd3EsICZiYXJyLCAmY3dxLT53b3JrbGlzdCk7Ci0JCQlhY3RpdmUgPSAxOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmY3dxLT5sb2NrKTsKLQotCQlpZiAoYWN0aXZlKQotCQkJd2FpdF9mb3JfY29tcGxldGlvbigmYmFyci5kb25lKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxKCZjd3EtPmxvY2spOworCisJaWYgKGFjdGl2ZSkKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmYmFyci5kb25lKTsKIAogCXJldHVybiBhY3RpdmU7CiB9CkBAIC03NjUsNiArNzUzLDggQEAKIAlyZXR1cm4gY3dxOwogfQogCitERUZJTkVfVFJBQ0Uod29ya3F1ZXVlX2NyZWF0aW9uKTsKKwogc3RhdGljIGludCBjcmVhdGVfd29ya3F1ZXVlX3RocmVhZChzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IC5zY2hlZF9wcmlvcml0eSA9IE1BWF9SVF9QUklPLTEgfTsKQEAgLTc4Nyw2ICs3NzcsOCBAQAogCQlzY2hlZF9zZXRzY2hlZHVsZXJfbm9jaGVjayhwLCBTQ0hFRF9GSUZPLCAmcGFyYW0pOwogCWN3cS0+dGhyZWFkID0gcDsKIAorCXRyYWNlX3dvcmtxdWV1ZV9jcmVhdGlvbihjd3EtPnRocmVhZCwgY3B1KTsKKwogCXJldHVybiAwOwogfQogCkBAIC04NjgsNiArODYwLDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fY3JlYXRlX3dvcmtxdWV1ZV9rZXkpOwogCitERUZJTkVfVFJBQ0Uod29ya3F1ZXVlX2Rlc3RydWN0aW9uKTsKKwogc3RhdGljIHZvaWQgY2xlYW51cF93b3JrcXVldWVfdGhyZWFkKHN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxKQogewogCS8qCkBAIC04OTEsNiArODg1LDcgQEAKIAkgKiBjaGVja3MgbGlzdF9lbXB0eSgpLCBhbmQgYSAibm9ybWFsIiBxdWV1ZV93b3JrKCkgY2FuJ3QgdXNlCiAJICogYSBkZWFkIENQVS4KIAkgKi8KKwl0cmFjZV93b3JrcXVldWVfZGVzdHJ1Y3Rpb24oY3dxLT50aHJlYWQpOwogCWt0aHJlYWRfc3RvcChjd3EtPnRocmVhZCk7CiAJY3dxLT50aHJlYWQgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCAyYTljNjlmLi44YWRlMGE3IDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZworKysgYi9saWIvS2NvbmZpZwpAQCAtMiw2ICsyLDkgQEAKICMgTGlicmFyeSBjb25maWd1cmF0aW9uCiAjCiAKK2NvbmZpZyBCSU5BUllfUFJJTlRGCisJZGVmX2Jvb2wgbgorCiBtZW51ICJMaWJyYXJ5IHJvdXRpbmVzIgogCiBjb25maWcgQklUUkVWRVJTRQpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCA1OGJmZTdlLi45NjM4ZDk5IDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtNzk2LDYgKzc5Niw3IEBACiAJICB0byBwcm9wZXJseSBtYWludGFpbiBhbmQgdXNlLiBUaGlzIGVuYWJsZXMgY2hlY2tzIHRoYXQgaGVscAogCSAgeW91IHRvIGtlZXAgdGhpbmdzIGNvcnJlY3QuCiAKK3NvdXJjZSBtbS9LY29uZmlnLmRlYnVnCiBzb3VyY2Uga2VybmVsL3RyYWNlL0tjb25maWcKIAogY29uZmlnIFBST1ZJREVfT0hDSTEzOTRfRE1BX0lOSVQKZGlmZiAtLWdpdCBhL2xpYi9jcHVtYXNrLmMgYi9saWIvY3B1bWFzay5jCmluZGV4IDMzODllMjQuLjFmNzFiOTcgMTAwNjQ0Ci0tLSBhL2xpYi9jcHVtYXNrLmMKKysrIGIvbGliL2NwdW1hc2suYwpAQCAtMTA5LDEwICsxMDksMTAgQEAKICNlbmRpZgogCS8qIEZJWE1FOiBCYW5kYWlkIHRvIHNhdmUgdXMgZnJvbSBvbGQgcHJpbWl0aXZlcyB3aGljaCBnbyB0byBOUl9DUFVTLiAqLwogCWlmICgqbWFzaykgeworCQl1bnNpZ25lZCBjaGFyICpwdHIgPSAodW5zaWduZWQgY2hhciAqKWNwdW1hc2tfYml0cygqbWFzayk7CiAJCXVuc2lnbmVkIGludCB0YWlsOwogCQl0YWlsID0gQklUU19UT19MT05HUyhOUl9DUFVTIC0gbnJfY3B1bWFza19iaXRzKSAqIHNpemVvZihsb25nKTsKLQkJbWVtc2V0KGNwdW1hc2tfYml0cygqbWFzaykgKyBjcHVtYXNrX3NpemUoKSAtIHRhaWwsCi0JCSAgICAgICAwLCB0YWlsKTsKKwkJbWVtc2V0KHB0ciArIGNwdW1hc2tfc2l6ZSgpIC0gdGFpbCwgMCwgdGFpbCk7CiAJfQogCiAJcmV0dXJuICptYXNrICE9IE5VTEw7CmRpZmYgLS1naXQgYS9saWIvZGVidWdvYmplY3RzLmMgYi9saWIvZGVidWdvYmplY3RzLmMKaW5kZXggNWQ5OWJlMS4uMjc1NWEzYiAxMDA2NDQKLS0tIGEvbGliL2RlYnVnb2JqZWN0cy5jCisrKyBiL2xpYi9kZWJ1Z29iamVjdHMuYwpAQCAtMzAsNyArMzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRlYnVnX2J1Y2tldAlvYmpfaGFzaFtPREVCVUdfSEFTSF9TSVpFXTsKIAotc3RhdGljIHN0cnVjdCBkZWJ1Z19vYmoJCW9ial9zdGF0aWNfcG9vbFtPREVCVUdfUE9PTF9TSVpFXTsKK3N0YXRpYyBzdHJ1Y3QgZGVidWdfb2JqCQlvYmpfc3RhdGljX3Bvb2xbT0RFQlVHX1BPT0xfU0laRV0gX19pbml0ZGF0YTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhwb29sX2xvY2spOwogCkBAIC01MCwxMiArNTAsMjMgQEAKIAogc3RhdGljIHN0cnVjdCBkZWJ1Z19vYmpfZGVzY3IJKmRlc2NyX3Rlc3QgIF9fcmVhZF9tb3N0bHk7CiAKK3N0YXRpYyB2b2lkIGZyZWVfb2JqX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBERUNMQVJFX1dPUksoZGVidWdfb2JqX3dvcmssIGZyZWVfb2JqX3dvcmspOworCiBzdGF0aWMgaW50IF9faW5pdCBlbmFibGVfb2JqZWN0X2RlYnVnKGNoYXIgKnN0cikKIHsKIAlkZWJ1Z19vYmplY3RzX2VuYWJsZWQgPSAxOwogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX29iamVjdF9kZWJ1ZyhjaGFyICpzdHIpCit7CisJZGVidWdfb2JqZWN0c19lbmFibGVkID0gMDsKKwlyZXR1cm4gMDsKK30KKwogZWFybHlfcGFyYW0oImRlYnVnX29iamVjdHMiLCBlbmFibGVfb2JqZWN0X2RlYnVnKTsKK2Vhcmx5X3BhcmFtKCJub19kZWJ1Z19vYmplY3RzIiwgZGlzYWJsZV9vYmplY3RfZGVidWcpOwogCiBzdGF0aWMgY29uc3QgY2hhciAqb2JqX3N0YXRlc1tPREVCVUdfU1RBVEVfTUFYXSA9IHsKIAlbT0RFQlVHX1NUQVRFX05PTkVdCQk9ICJub25lIiwKQEAgLTE0NiwyNSArMTU3LDUxIEBACiB9CiAKIC8qCi0gKiBQdXQgdGhlIG9iamVjdCBiYWNrIGludG8gdGhlIHBvb2wgb3IgZ2l2ZSBpdCBiYWNrIHRvIGttZW1fY2FjaGU6CisgKiB3b3JrcXVldWUgZnVuY3Rpb24gdG8gZnJlZSBvYmplY3RzLgorICovCitzdGF0aWMgdm9pZCBmcmVlX29ial93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZGVidWdfb2JqICpvYmo7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAob2JqX3Bvb2xfZnJlZSA+IE9ERUJVR19QT09MX1NJWkUpIHsKKwkJb2JqID0gaGxpc3RfZW50cnkob2JqX3Bvb2wuZmlyc3QsIHR5cGVvZigqb2JqKSwgbm9kZSk7CisJCWhsaXN0X2RlbCgmb2JqLT5ub2RlKTsKKwkJb2JqX3Bvb2xfZnJlZS0tOworCQkvKgorCQkgKiBXZSByZWxlYXNlIHBvb2xfbG9jayBhY3Jvc3Mga21lbV9jYWNoZV9mcmVlKCkgdG8KKwkJICogYXZvaWQgY29udGVudGlvbiBvbiBwb29sX2xvY2suCisJCSAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sX2xvY2ssIGZsYWdzKTsKKwkJa21lbV9jYWNoZV9mcmVlKG9ial9jYWNoZSwgb2JqKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2xfbG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFB1dCB0aGUgb2JqZWN0IGJhY2sgaW50byB0aGUgcG9vbCBhbmQgc2NoZWR1bGUgd29yayB0byBmcmVlIG9iamVjdHMKKyAqIGlmIG5lY2Vzc2FyeS4KICAqLwogc3RhdGljIHZvaWQgZnJlZV9vYmplY3Qoc3RydWN0IGRlYnVnX29iaiAqb2JqKQogewotCXVuc2lnbmVkIGxvbmcgaWR4ID0gKHVuc2lnbmVkIGxvbmcpKG9iaiAtIG9ial9zdGF0aWNfcG9vbCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc2NoZWQgPSAwOwogCi0JaWYgKG9ial9wb29sX2ZyZWUgPCBPREVCVUdfUE9PTF9TSVpFIHx8IGlkeCA8IE9ERUJVR19QT09MX1NJWkUpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2xfbG9jaywgZmxhZ3MpOwotCQlobGlzdF9hZGRfaGVhZCgmb2JqLT5ub2RlLCAmb2JqX3Bvb2wpOwotCQlvYmpfcG9vbF9mcmVlKys7Ci0JCW9ial9wb29sX3VzZWQtLTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbF9sb2NrLCBmbGFncyk7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2xfbG9jaywgZmxhZ3MpOwotCQlvYmpfcG9vbF91c2VkLS07Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2xfbG9jaywgZmxhZ3MpOwotCQlrbWVtX2NhY2hlX2ZyZWUob2JqX2NhY2hlLCBvYmopOwotCX0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbF9sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBzY2hlZHVsZSB3b3JrIHdoZW4gdGhlIHBvb2wgaXMgZmlsbGVkIGFuZCB0aGUgY2FjaGUgaXMKKwkgKiBpbml0aWFsaXplZDoKKwkgKi8KKwlpZiAob2JqX3Bvb2xfZnJlZSA+IE9ERUJVR19QT09MX1NJWkUgJiYgb2JqX2NhY2hlKQorCQlzY2hlZCA9ICF3b3JrX3BlbmRpbmcoJmRlYnVnX29ial93b3JrKTsKKwlobGlzdF9hZGRfaGVhZCgmb2JqLT5ub2RlLCAmb2JqX3Bvb2wpOworCW9ial9wb29sX2ZyZWUrKzsKKwlvYmpfcG9vbF91c2VkLS07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbF9sb2NrLCBmbGFncyk7CisJaWYgKHNjaGVkKQorCQlzY2hlZHVsZV93b3JrKCZkZWJ1Z19vYmpfd29yayk7CiB9CiAKIC8qCkBAIC04NzYsNiArOTEzLDYzIEBACiB9CiAKIC8qCisgKiBDb252ZXJ0IHRoZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBvYmplY3RzIHRvIGR5bmFtaWMgb25lczoKKyAqLworc3RhdGljIGludCBkZWJ1Z19vYmplY3RzX3JlcGxhY2Vfc3RhdGljX29iamVjdHModm9pZCkKK3sKKwlzdHJ1Y3QgZGVidWdfYnVja2V0ICpkYiA9IG9ial9oYXNoOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqdG1wOworCXN0cnVjdCBkZWJ1Z19vYmogKm9iaiwgKm5ldzsKKwlITElTVF9IRUFEKG9iamVjdHMpOworCWludCBpLCBjbnQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IE9ERUJVR19QT09MX1NJWkU7IGkrKykgeworCQlvYmogPSBrbWVtX2NhY2hlX3phbGxvYyhvYmpfY2FjaGUsIEdGUF9LRVJORUwpOworCQlpZiAoIW9iaikKKwkJCWdvdG8gZnJlZTsKKwkJaGxpc3RfYWRkX2hlYWQoJm9iai0+bm9kZSwgJm9iamVjdHMpOworCX0KKworCS8qCisJICogV2hlbiBkZWJ1Z19vYmplY3RzX21lbV9pbml0KCkgaXMgY2FsbGVkIHdlIGtub3cgdGhhdCBvbmx5CisJICogb25lIENQVSBpcyB1cCwgc28gZGlzYWJsaW5nIGludGVycnVwdHMgaXMgZW5vdWdoCisJICogcHJvdGVjdGlvbi4gVGhpcyBhdm9pZHMgdGhlIGxvY2tkZXAgaGVsbCBvZiBsb2NrIG9yZGVyaW5nLgorCSAqLworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwkvKiBSZW1vdmUgdGhlIHN0YXRpY2FsbHkgYWxsb2NhdGVkIG9iamVjdHMgZnJvbSB0aGUgcG9vbCAqLworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqLCBub2RlLCB0bXAsICZvYmpfcG9vbCwgbm9kZSkKKwkJaGxpc3RfZGVsKCZvYmotPm5vZGUpOworCS8qIE1vdmUgdGhlIGFsbG9jYXRlZCBvYmplY3RzIHRvIHRoZSBwb29sICovCisJaGxpc3RfbW92ZV9saXN0KCZvYmplY3RzLCAmb2JqX3Bvb2wpOworCisJLyogUmVwbGFjZSB0aGUgYWN0aXZlIG9iamVjdCByZWZlcmVuY2VzICovCisJZm9yIChpID0gMDsgaSA8IE9ERUJVR19IQVNIX1NJWkU7IGkrKywgZGIrKykgeworCQlobGlzdF9tb3ZlX2xpc3QoJmRiLT5saXN0LCAmb2JqZWN0cyk7CisKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCBub2RlLCAmb2JqZWN0cywgbm9kZSkgeworCQkJbmV3ID0gaGxpc3RfZW50cnkob2JqX3Bvb2wuZmlyc3QsIHR5cGVvZigqb2JqKSwgbm9kZSk7CisJCQlobGlzdF9kZWwoJm5ldy0+bm9kZSk7CisJCQkvKiBjb3B5IG9iamVjdCBkYXRhICovCisJCQkqbmV3ID0gKm9iajsKKwkJCWhsaXN0X2FkZF9oZWFkKCZuZXctPm5vZGUsICZkYi0+bGlzdCk7CisJCQljbnQrKzsKKwkJfQorCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJPREVCVUc6ICVkIG9mICVkIGFjdGl2ZSBvYmplY3RzIHJlcGxhY2VkXG4iLCBjbnQsCisJICAgICAgIG9ial9wb29sX3VzZWQpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKwlyZXR1cm4gMDsKK2ZyZWU6CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIG5vZGUsIHRtcCwgJm9iamVjdHMsIG5vZGUpIHsKKwkJaGxpc3RfZGVsKCZvYmotPm5vZGUpOworCQlrbWVtX2NhY2hlX2ZyZWUob2JqX2NhY2hlLCBvYmopOworCX0KKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoKICAqIENhbGxlZCBhZnRlciB0aGUga21lbV9jYWNoZXMgYXJlIGZ1bmN0aW9uYWwgdG8gc2V0dXAgYSBkZWRpY2F0ZWQKICAqIGNhY2hlIHBvb2wsIHdoaWNoIGhhcyB0aGUgU0xBQl9ERUJVR19PQkpFQ1RTIGZsYWcgc2V0LiBUaGlzIGZsYWcKICAqIHByZXZlbnRzIHRoYXQgdGhlIGRlYnVnIGNvZGUgaXMgY2FsbGVkIG9uIGttZW1fY2FjaGVfZnJlZSgpIGZvciB0aGUKQEAgLTg5MCw4ICs5ODQsMTEgQEAKIAkJCQkgICAgICBzaXplb2YgKHN0cnVjdCBkZWJ1Z19vYmopLCAwLAogCQkJCSAgICAgIFNMQUJfREVCVUdfT0JKRUNUUywgTlVMTCk7CiAKLQlpZiAoIW9ial9jYWNoZSkKKwlpZiAoIW9ial9jYWNoZSB8fCBkZWJ1Z19vYmplY3RzX3JlcGxhY2Vfc3RhdGljX29iamVjdHMoKSkgewogCQlkZWJ1Z19vYmplY3RzX2VuYWJsZWQgPSAwOwotCWVsc2UKKwkJaWYgKG9ial9jYWNoZSkKKwkJCWttZW1fY2FjaGVfZGVzdHJveShvYmpfY2FjaGUpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJPREVCVUc6IG91dCBvZiBtZW1vcnkuXG4iKTsKKwl9IGVsc2UKIAkJZGVidWdfb2JqZWN0c19zZWxmdGVzdCgpOwogfQpkaWZmIC0tZ2l0IGEvbGliL2lkci5jIGIvbGliL2lkci5jCmluZGV4IGRhYjRiY2EuLjgwY2E5YWMgMTAwNjQ0Ci0tLSBhL2xpYi9pZHIuYworKysgYi9saWIvaWRyLmMKQEAgLTU3OSw2ICs1NzksNTIgQEAKIEVYUE9SVF9TWU1CT0woaWRyX2Zvcl9lYWNoKTsKIAogLyoqCisgKiBpZHJfZ2V0X25leHQgLSBsb29rdXAgbmV4dCBvYmplY3Qgb2YgaWQgdG8gZ2l2ZW4gaWQuCisgKiBAaWRwOiBpZHIgaGFuZGxlCisgKiBAaWQ6ICBwb2ludGVyIHRvIGxvb2t1cCBrZXkKKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gcmVnaXN0ZXJlZCBvYmplY3Qgd2l0aCBpZCwgd2hpY2ggaXMgbmV4dCBudW1iZXIgdG8KKyAqIGdpdmVuIGlkLgorICovCisKK3ZvaWQgKmlkcl9nZXRfbmV4dChzdHJ1Y3QgaWRyICppZHAsIGludCAqbmV4dGlkcCkKK3sKKwlzdHJ1Y3QgaWRyX2xheWVyICpwLCAqcGFbTUFYX0xFVkVMXTsKKwlzdHJ1Y3QgaWRyX2xheWVyICoqcGFhID0gJnBhWzBdOworCWludCBpZCA9ICpuZXh0aWRwOworCWludCBuLCBtYXg7CisKKwkvKiBmaW5kIGZpcnN0IGVudCAqLworCW4gPSBpZHAtPmxheWVycyAqIElEUl9CSVRTOworCW1heCA9IDEgPDwgbjsKKwlwID0gcmN1X2RlcmVmZXJlbmNlKGlkcC0+dG9wKTsKKwlpZiAoIXApCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKGlkIDwgbWF4KSB7CisJCXdoaWxlIChuID4gMCAmJiBwKSB7CisJCQluIC09IElEUl9CSVRTOworCQkJKnBhYSsrID0gcDsKKwkJCXAgPSByY3VfZGVyZWZlcmVuY2UocC0+YXJ5WyhpZCA+PiBuKSAmIElEUl9NQVNLXSk7CisJCX0KKworCQlpZiAocCkgeworCQkJKm5leHRpZHAgPSBpZDsKKwkJCXJldHVybiBwOworCQl9CisKKwkJaWQgKz0gMSA8PCBuOworCQl3aGlsZSAobiA8IGZscyhpZCkpIHsKKwkJCW4gKz0gSURSX0JJVFM7CisJCQlwID0gKi0tcGFhOworCQl9CisJfQorCXJldHVybiBOVUxMOworfQorCisKKworLyoqCiAgKiBpZHJfcmVwbGFjZSAtIHJlcGxhY2UgcG9pbnRlciBmb3IgZ2l2ZW4gaWQKICAqIEBpZHA6IGlkciBoYW5kbGUKICAqIEBwdHI6IHBvaW50ZXIgeW91IHdhbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpZApkaWZmIC0tZ2l0IGEvbGliL2xvY2tpbmctc2VsZnRlc3QuYyBiL2xpYi9sb2NraW5nLXNlbGZ0ZXN0LmMKaW5kZXggMjgwMzMyYy4uNjE5MzEzZSAxMDA2NDQKLS0tIGEvbGliL2xvY2tpbmctc2VsZnRlc3QuYworKysgYi9saWIvbG9ja2luZy1zZWxmdGVzdC5jCkBAIC0xNTcsMTEgKzE1NywxMSBAQAogI2RlZmluZSBTT0ZUSVJRX0VOVEVSKCkJCQkJXAogCQlsb2NhbF9iaF9kaXNhYmxlKCk7CQlcCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CQlcCi0JCXRyYWNlX3NvZnRpcnFfZW50ZXIoKTsJCVwKKwkJbG9ja2RlcF9zb2Z0aXJxX2VudGVyKCk7CVwKIAkJV0FSTl9PTighaW5fc29mdGlycSgpKTsKIAogI2RlZmluZSBTT0ZUSVJRX0VYSVQoKQkJCQlcCi0JCXRyYWNlX3NvZnRpcnFfZXhpdCgpOwkJXAorCQlsb2NrZGVwX3NvZnRpcnFfZXhpdCgpOwkJXAogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CQlcCiAJCWxvY2FsX2JoX2VuYWJsZSgpOwogCmRpZmYgLS1naXQgYS9saWIvcmJ0cmVlLmMgYi9saWIvcmJ0cmVlLmMKaW5kZXggOTk1NmI5OTYuLmY2NTM2NTkgMTAwNjQ0Ci0tLSBhL2xpYi9yYnRyZWUuYworKysgYi9saWIvcmJ0cmVlLmMKQEAgLTE2MywxNyArMTYzLDE0IEBACiAJCQl7CiAJCQkJaWYgKCFvdGhlci0+cmJfcmlnaHQgfHwgcmJfaXNfYmxhY2sob3RoZXItPnJiX3JpZ2h0KSkKIAkJCQl7Ci0JCQkJCXN0cnVjdCByYl9ub2RlICpvX2xlZnQ7Ci0JCQkJCWlmICgob19sZWZ0ID0gb3RoZXItPnJiX2xlZnQpKQotCQkJCQkJcmJfc2V0X2JsYWNrKG9fbGVmdCk7CisJCQkJCXJiX3NldF9ibGFjayhvdGhlci0+cmJfbGVmdCk7CiAJCQkJCXJiX3NldF9yZWQob3RoZXIpOwogCQkJCQlfX3JiX3JvdGF0ZV9yaWdodChvdGhlciwgcm9vdCk7CiAJCQkJCW90aGVyID0gcGFyZW50LT5yYl9yaWdodDsKIAkJCQl9CiAJCQkJcmJfc2V0X2NvbG9yKG90aGVyLCByYl9jb2xvcihwYXJlbnQpKTsKIAkJCQlyYl9zZXRfYmxhY2socGFyZW50KTsKLQkJCQlpZiAob3RoZXItPnJiX3JpZ2h0KQotCQkJCQlyYl9zZXRfYmxhY2sob3RoZXItPnJiX3JpZ2h0KTsKKwkJCQlyYl9zZXRfYmxhY2sob3RoZXItPnJiX3JpZ2h0KTsKIAkJCQlfX3JiX3JvdGF0ZV9sZWZ0KHBhcmVudCwgcm9vdCk7CiAJCQkJbm9kZSA9IHJvb3QtPnJiX25vZGU7CiAJCQkJYnJlYWs7CkBAIC0yMDAsMTcgKzE5NywxNCBAQAogCQkJewogCQkJCWlmICghb3RoZXItPnJiX2xlZnQgfHwgcmJfaXNfYmxhY2sob3RoZXItPnJiX2xlZnQpKQogCQkJCXsKLQkJCQkJcmVnaXN0ZXIgc3RydWN0IHJiX25vZGUgKm9fcmlnaHQ7Ci0JCQkJCWlmICgob19yaWdodCA9IG90aGVyLT5yYl9yaWdodCkpCi0JCQkJCQlyYl9zZXRfYmxhY2sob19yaWdodCk7CisJCQkJCXJiX3NldF9ibGFjayhvdGhlci0+cmJfcmlnaHQpOwogCQkJCQlyYl9zZXRfcmVkKG90aGVyKTsKIAkJCQkJX19yYl9yb3RhdGVfbGVmdChvdGhlciwgcm9vdCk7CiAJCQkJCW90aGVyID0gcGFyZW50LT5yYl9sZWZ0OwogCQkJCX0KIAkJCQlyYl9zZXRfY29sb3Iob3RoZXIsIHJiX2NvbG9yKHBhcmVudCkpOwogCQkJCXJiX3NldF9ibGFjayhwYXJlbnQpOwotCQkJCWlmIChvdGhlci0+cmJfbGVmdCkKLQkJCQkJcmJfc2V0X2JsYWNrKG90aGVyLT5yYl9sZWZ0KTsKKwkJCQlyYl9zZXRfYmxhY2sob3RoZXItPnJiX2xlZnQpOwogCQkJCV9fcmJfcm90YXRlX3JpZ2h0KHBhcmVudCwgcm9vdCk7CiAJCQkJbm9kZSA9IHJvb3QtPnJiX25vZGU7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9saWIvdnNwcmludGYuYyBiL2xpYi92c3ByaW50Zi5jCmluZGV4IDBmYmQwMTIuLmJlMzAwMWYgMTAwNjQ0Ci0tLSBhL2xpYi92c3ByaW50Zi5jCisrKyBiL2xpYi92c3ByaW50Zi5jCkBAIC0zOTYsNyArMzk2LDM4IEBACiAjZGVmaW5lIFNNQUxMCTMyCQkvKiBNdXN0IGJlIDMyID09IDB4MjAgKi8KICNkZWZpbmUgU1BFQ0lBTAk2NAkJLyogMHggKi8KIAotc3RhdGljIGNoYXIgKm51bWJlcihjaGFyICpidWYsIGNoYXIgKmVuZCwgdW5zaWduZWQgbG9uZyBsb25nIG51bSwgaW50IGJhc2UsIGludCBzaXplLCBpbnQgcHJlY2lzaW9uLCBpbnQgdHlwZSkKK2VudW0gZm9ybWF0X3R5cGUgeworCUZPUk1BVF9UWVBFX05PTkUsIC8qIEp1c3QgYSBzdHJpbmcgcGFydCAqLworCUZPUk1BVF9UWVBFX1dJRFRILAorCUZPUk1BVF9UWVBFX1BSRUNJU0lPTiwKKwlGT1JNQVRfVFlQRV9DSEFSLAorCUZPUk1BVF9UWVBFX1NUUiwKKwlGT1JNQVRfVFlQRV9QVFIsCisJRk9STUFUX1RZUEVfUEVSQ0VOVF9DSEFSLAorCUZPUk1BVF9UWVBFX0lOVkFMSUQsCisJRk9STUFUX1RZUEVfTE9OR19MT05HLAorCUZPUk1BVF9UWVBFX1VMT05HLAorCUZPUk1BVF9UWVBFX0xPTkcsCisJRk9STUFUX1RZUEVfVVNIT1JULAorCUZPUk1BVF9UWVBFX1NIT1JULAorCUZPUk1BVF9UWVBFX1VJTlQsCisJRk9STUFUX1RZUEVfSU5ULAorCUZPUk1BVF9UWVBFX05SQ0hBUlMsCisJRk9STUFUX1RZUEVfU0laRV9ULAorCUZPUk1BVF9UWVBFX1BUUkRJRkYKK307CisKK3N0cnVjdCBwcmludGZfc3BlYyB7CisJZW51bSBmb3JtYXRfdHlwZQl0eXBlOworCWludAkJCWZsYWdzOwkJLyogZmxhZ3MgdG8gbnVtYmVyKCkgKi8KKwlpbnQJCQlmaWVsZF93aWR0aDsJLyogd2lkdGggb2Ygb3V0cHV0IGZpZWxkICovCisJaW50CQkJYmFzZTsKKwlpbnQJCQlwcmVjaXNpb247CS8qICMgb2YgZGlnaXRzL2NoYXJzICovCisJaW50CQkJcXVhbGlmaWVyOworfTsKKworc3RhdGljIGNoYXIgKm51bWJlcihjaGFyICpidWYsIGNoYXIgKmVuZCwgdW5zaWduZWQgbG9uZyBsb25nIG51bSwKKwkJCXN0cnVjdCBwcmludGZfc3BlYyBzcGVjKQogewogCS8qIHdlIGFyZSBjYWxsZWQgd2l0aCBiYXNlIDgsIDEwIG9yIDE2LCBvbmx5LCB0aHVzIGRvbid0IG5lZWQgIkcuLi4iICAqLwogCXN0YXRpYyBjb25zdCBjaGFyIGRpZ2l0c1sxNl0gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7IC8qICJHSElKS0xNTk9QUVJTVFVWV1hZWiI7ICovCkBAIC00MDQsMzIgKzQzNSwzMiBAQAogCWNoYXIgdG1wWzY2XTsKIAljaGFyIHNpZ247CiAJY2hhciBsb2Nhc2U7Ci0JaW50IG5lZWRfcGZ4ID0gKCh0eXBlICYgU1BFQ0lBTCkgJiYgYmFzZSAhPSAxMCk7CisJaW50IG5lZWRfcGZ4ID0gKChzcGVjLmZsYWdzICYgU1BFQ0lBTCkgJiYgc3BlYy5iYXNlICE9IDEwKTsKIAlpbnQgaTsKIAogCS8qIGxvY2FzZSA9IDAgb3IgMHgyMC4gT1JpbmcgZGlnaXRzIG9yIGxldHRlcnMgd2l0aCAnbG9jYXNlJwogCSAqIHByb2R1Y2VzIHNhbWUgZGlnaXRzIG9yIChtYXliZSBsb3dlcmNhc2VkKSBsZXR0ZXJzICovCi0JbG9jYXNlID0gKHR5cGUgJiBTTUFMTCk7Ci0JaWYgKHR5cGUgJiBMRUZUKQotCQl0eXBlICY9IH5aRVJPUEFEOworCWxvY2FzZSA9IChzcGVjLmZsYWdzICYgU01BTEwpOworCWlmIChzcGVjLmZsYWdzICYgTEVGVCkKKwkJc3BlYy5mbGFncyAmPSB+WkVST1BBRDsKIAlzaWduID0gMDsKLQlpZiAodHlwZSAmIFNJR04pIHsKKwlpZiAoc3BlYy5mbGFncyAmIFNJR04pIHsKIAkJaWYgKChzaWduZWQgbG9uZyBsb25nKSBudW0gPCAwKSB7CiAJCQlzaWduID0gJy0nOwogCQkJbnVtID0gLSAoc2lnbmVkIGxvbmcgbG9uZykgbnVtOwotCQkJc2l6ZS0tOwotCQl9IGVsc2UgaWYgKHR5cGUgJiBQTFVTKSB7CisJCQlzcGVjLmZpZWxkX3dpZHRoLS07CisJCX0gZWxzZSBpZiAoc3BlYy5mbGFncyAmIFBMVVMpIHsKIAkJCXNpZ24gPSAnKyc7Ci0JCQlzaXplLS07Ci0JCX0gZWxzZSBpZiAodHlwZSAmIFNQQUNFKSB7CisJCQlzcGVjLmZpZWxkX3dpZHRoLS07CisJCX0gZWxzZSBpZiAoc3BlYy5mbGFncyAmIFNQQUNFKSB7CiAJCQlzaWduID0gJyAnOwotCQkJc2l6ZS0tOworCQkJc3BlYy5maWVsZF93aWR0aC0tOwogCQl9CiAJfQogCWlmIChuZWVkX3BmeCkgewotCQlzaXplLS07Ci0JCWlmIChiYXNlID09IDE2KQotCQkJc2l6ZS0tOworCQlzcGVjLmZpZWxkX3dpZHRoLS07CisJCWlmIChzcGVjLmJhc2UgPT0gMTYpCisJCQlzcGVjLmZpZWxkX3dpZHRoLS07CiAJfQogCiAJLyogZ2VuZXJhdGUgZnVsbCBzdHJpbmcgaW4gdG1wW10sIGluIHJldmVyc2Ugb3JkZXIgKi8KQEAgLTQ0MSwxMCArNDcyLDEwIEBACiAJCXRtcFtpKytdID0gKGRpZ2l0c1tkb19kaXYobnVtLGJhc2UpXSB8IGxvY2FzZSk7CiAJfSB3aGlsZSAobnVtICE9IDApOwogCSovCi0JZWxzZSBpZiAoYmFzZSAhPSAxMCkgeyAvKiA4IG9yIDE2ICovCi0JCWludCBtYXNrID0gYmFzZSAtIDE7CisJZWxzZSBpZiAoc3BlYy5iYXNlICE9IDEwKSB7IC8qIDggb3IgMTYgKi8KKwkJaW50IG1hc2sgPSBzcGVjLmJhc2UgLSAxOwogCQlpbnQgc2hpZnQgPSAzOwotCQlpZiAoYmFzZSA9PSAxNikgc2hpZnQgPSA0OworCQlpZiAoc3BlYy5iYXNlID09IDE2KSBzaGlmdCA9IDQ7CiAJCWRvIHsKIAkJCXRtcFtpKytdID0gKGRpZ2l0c1soKHVuc2lnbmVkIGNoYXIpbnVtKSAmIG1hc2tdIHwgbG9jYXNlKTsKIAkJCW51bSA+Pj0gc2hpZnQ7CkBAIC00NTQsMTIgKzQ4NSwxMiBAQAogCX0KIAogCS8qIHByaW50aW5nIDEwMCB1c2luZyAlMmQgZ2l2ZXMgIjEwMCIsIG5vdCAiMDAiICovCi0JaWYgKGkgPiBwcmVjaXNpb24pCi0JCXByZWNpc2lvbiA9IGk7CisJaWYgKGkgPiBzcGVjLnByZWNpc2lvbikKKwkJc3BlYy5wcmVjaXNpb24gPSBpOwogCS8qIGxlYWRpbmcgc3BhY2UgcGFkZGluZyAqLwotCXNpemUgLT0gcHJlY2lzaW9uOwotCWlmICghKHR5cGUgJiAoWkVST1BBRCtMRUZUKSkpIHsKLQkJd2hpbGUoLS1zaXplID49IDApIHsKKwlzcGVjLmZpZWxkX3dpZHRoIC09IHNwZWMucHJlY2lzaW9uOworCWlmICghKHNwZWMuZmxhZ3MgJiAoWkVST1BBRCtMRUZUKSkpIHsKKwkJd2hpbGUoLS1zcGVjLmZpZWxkX3dpZHRoID49IDApIHsKIAkJCWlmIChidWYgPCBlbmQpCiAJCQkJKmJ1ZiA9ICcgJzsKIAkJCSsrYnVmOwpAQCAtNDc2LDIzICs1MDcsMjMgQEAKIAkJaWYgKGJ1ZiA8IGVuZCkKIAkJCSpidWYgPSAnMCc7CiAJCSsrYnVmOwotCQlpZiAoYmFzZSA9PSAxNikgeworCQlpZiAoc3BlYy5iYXNlID09IDE2KSB7CiAJCQlpZiAoYnVmIDwgZW5kKQogCQkJCSpidWYgPSAoJ1gnIHwgbG9jYXNlKTsKIAkJCSsrYnVmOwogCQl9CiAJfQogCS8qIHplcm8gb3Igc3BhY2UgcGFkZGluZyAqLwotCWlmICghKHR5cGUgJiBMRUZUKSkgewotCQljaGFyIGMgPSAodHlwZSAmIFpFUk9QQUQpID8gJzAnIDogJyAnOwotCQl3aGlsZSAoLS1zaXplID49IDApIHsKKwlpZiAoIShzcGVjLmZsYWdzICYgTEVGVCkpIHsKKwkJY2hhciBjID0gKHNwZWMuZmxhZ3MgJiBaRVJPUEFEKSA/ICcwJyA6ICcgJzsKKwkJd2hpbGUgKC0tc3BlYy5maWVsZF93aWR0aCA+PSAwKSB7CiAJCQlpZiAoYnVmIDwgZW5kKQogCQkJCSpidWYgPSBjOwogCQkJKytidWY7CiAJCX0KIAl9CiAJLyogaG1tIGV2ZW4gbW9yZSB6ZXJvIHBhZGRpbmc/ICovCi0Jd2hpbGUgKGkgPD0gLS1wcmVjaXNpb24pIHsKKwl3aGlsZSAoaSA8PSAtLXNwZWMucHJlY2lzaW9uKSB7CiAJCWlmIChidWYgPCBlbmQpCiAJCQkqYnVmID0gJzAnOwogCQkrK2J1ZjsKQEAgLTUwNCw3ICs1MzUsNyBAQAogCQkrK2J1ZjsKIAl9CiAJLyogdHJhaWxpbmcgc3BhY2UgcGFkZGluZyAqLwotCXdoaWxlICgtLXNpemUgPj0gMCkgeworCXdoaWxlICgtLXNwZWMuZmllbGRfd2lkdGggPj0gMCkgewogCQlpZiAoYnVmIDwgZW5kKQogCQkJKmJ1ZiA9ICcgJzsKIAkJKytidWY7CkBAIC01MTIsMTcgKzU0MywxNyBAQAogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyBjaGFyICpzdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIGNoYXIgKnMsIGludCBmaWVsZF93aWR0aCwgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQorc3RhdGljIGNoYXIgKnN0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgY2hhciAqcywgc3RydWN0IHByaW50Zl9zcGVjIHNwZWMpCiB7CiAJaW50IGxlbiwgaTsKIAogCWlmICgodW5zaWduZWQgbG9uZylzIDwgUEFHRV9TSVpFKQogCQlzID0gIjxOVUxMPiI7CiAKLQlsZW4gPSBzdHJubGVuKHMsIHByZWNpc2lvbik7CisJbGVuID0gc3RybmxlbihzLCBzcGVjLnByZWNpc2lvbik7CiAKLQlpZiAoIShmbGFncyAmIExFRlQpKSB7Ci0JCXdoaWxlIChsZW4gPCBmaWVsZF93aWR0aC0tKSB7CisJaWYgKCEoc3BlYy5mbGFncyAmIExFRlQpKSB7CisJCXdoaWxlIChsZW4gPCBzcGVjLmZpZWxkX3dpZHRoLS0pIHsKIAkJCWlmIChidWYgPCBlbmQpCiAJCQkJKmJ1ZiA9ICcgJzsKIAkJCSsrYnVmOwpAQCAtNTMzLDcgKzU2NCw3IEBACiAJCQkqYnVmID0gKnM7CiAJCSsrYnVmOyArK3M7CiAJfQotCXdoaWxlIChsZW4gPCBmaWVsZF93aWR0aC0tKSB7CisJd2hpbGUgKGxlbiA8IHNwZWMuZmllbGRfd2lkdGgtLSkgewogCQlpZiAoYnVmIDwgZW5kKQogCQkJKmJ1ZiA9ICcgJzsKIAkJKytidWY7CkBAIC01NDEsMjEgKzU3MiwyNCBAQAogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyBjaGFyICpzeW1ib2xfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB2b2lkICpwdHIsIGludCBmaWVsZF93aWR0aCwgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQorc3RhdGljIGNoYXIgKnN5bWJvbF9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHZvaWQgKnB0ciwKKwkJCQlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYykKIHsKIAl1bnNpZ25lZCBsb25nIHZhbHVlID0gKHVuc2lnbmVkIGxvbmcpIHB0cjsKICNpZmRlZiBDT05GSUdfS0FMTFNZTVMKIAljaGFyIHN5bVtLU1lNX1NZTUJPTF9MRU5dOwogCXNwcmludF9zeW1ib2woc3ltLCB2YWx1ZSk7Ci0JcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgc3ltLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgc3ltLCBzcGVjKTsKICNlbHNlCi0JZmllbGRfd2lkdGggPSAyKnNpemVvZih2b2lkICopOwotCWZsYWdzIHw9IFNQRUNJQUwgfCBTTUFMTCB8IFpFUk9QQUQ7Ci0JcmV0dXJuIG51bWJlcihidWYsIGVuZCwgdmFsdWUsIDE2LCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJc3BlYy5maWVsZF93aWR0aCA9IDIqc2l6ZW9mKHZvaWQgKik7CisJc3BlYy5mbGFncyB8PSBTUEVDSUFMIHwgU01BTEwgfCBaRVJPUEFEOworCXNwZWMuYmFzZSA9IDE2OworCXJldHVybiBudW1iZXIoYnVmLCBlbmQsIHZhbHVlLCBzcGVjKTsKICNlbmRpZgogfQogCi1zdGF0aWMgY2hhciAqcmVzb3VyY2Vfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgaW50IGZpZWxkX3dpZHRoLCBpbnQgcHJlY2lzaW9uLCBpbnQgZmxhZ3MpCitzdGF0aWMgY2hhciAqcmVzb3VyY2Vfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKwkJCQlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYykKIHsKICNpZm5kZWYgSU9fUlNSQ19QUklOVEtfU0laRQogI2RlZmluZSBJT19SU1JDX1BSSU5US19TSVpFCTQKQEAgLTU2NCw3ICs1OTgsMTEgQEAKICNpZm5kZWYgTUVNX1JTUkNfUFJJTlRLX1NJWkUKICNkZWZpbmUgTUVNX1JTUkNfUFJJTlRLX1NJWkUJOAogI2VuZGlmCi0KKwlzdHJ1Y3QgcHJpbnRmX3NwZWMgbnVtX3NwZWMgPSB7CisJCS5iYXNlID0gMTYsCisJCS5wcmVjaXNpb24gPSAtMSwKKwkJLmZsYWdzID0gU1BFQ0lBTCB8IFNNQUxMIHwgWkVST1BBRCwKKwl9OwogCS8qIHJvb20gZm9yIHRoZSBhY3R1YWwgbnVtYmVycywgdGhlIHR3byAiMHgiLCAtLCBbLCBdIGFuZCB0aGUgZmluYWwgemVybyAqLwogCWNoYXIgc3ltWzQqc2l6ZW9mKHJlc291cmNlX3NpemVfdCkgKyA4XTsKIAljaGFyICpwID0gc3ltLCAqcGVuZCA9IHN5bSArIHNpemVvZihzeW0pOwpAQCAtNTc2LDE3ICs2MTQsMTggQEAKIAkJc2l6ZSA9IE1FTV9SU1JDX1BSSU5US19TSVpFOwogCiAJKnArKyA9ICdbJzsKLQlwID0gbnVtYmVyKHAsIHBlbmQsIHJlcy0+c3RhcnQsIDE2LCBzaXplLCAtMSwgU1BFQ0lBTCB8IFNNQUxMIHwgWkVST1BBRCk7CisJbnVtX3NwZWMuZmllbGRfd2lkdGggPSBzaXplOworCXAgPSBudW1iZXIocCwgcGVuZCwgcmVzLT5zdGFydCwgbnVtX3NwZWMpOwogCSpwKysgPSAnLSc7Ci0JcCA9IG51bWJlcihwLCBwZW5kLCByZXMtPmVuZCwgMTYsIHNpemUsIC0xLCBTUEVDSUFMIHwgU01BTEwgfCBaRVJPUEFEKTsKKwlwID0gbnVtYmVyKHAsIHBlbmQsIHJlcy0+ZW5kLCBudW1fc3BlYyk7CiAJKnArKyA9ICddJzsKIAkqcCA9IDA7CiAKLQlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBzeW0sIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKKwlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBzeW0sIHNwZWMpOwogfQogCi1zdGF0aWMgY2hhciAqbWFjX2FkZHJlc3Nfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB1OCAqYWRkciwgaW50IGZpZWxkX3dpZHRoLAotCQkJCWludCBwcmVjaXNpb24sIGludCBmbGFncykKK3N0YXRpYyBjaGFyICptYWNfYWRkcmVzc19zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHU4ICphZGRyLAorCQkJCXN0cnVjdCBwcmludGZfc3BlYyBzcGVjKQogewogCWNoYXIgbWFjX2FkZHJbNiAqIDNdOyAvKiAoNiAqIDIgaGV4IGRpZ2l0cyksIDUgY29sb25zIGFuZCB0cmFpbGluZyB6ZXJvICovCiAJY2hhciAqcCA9IG1hY19hZGRyOwpAQCAtNTk0LDE2ICs2MzMsMTcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKIAkJcCA9IHBhY2tfaGV4X2J5dGUocCwgYWRkcltpXSk7Ci0JCWlmICghKGZsYWdzICYgU1BFQ0lBTCkgJiYgaSAhPSA1KQorCQlpZiAoIShzcGVjLmZsYWdzICYgU1BFQ0lBTCkgJiYgaSAhPSA1KQogCQkJKnArKyA9ICc6JzsKIAl9CiAJKnAgPSAnXDAnOworCXNwZWMuZmxhZ3MgJj0gflNQRUNJQUw7CiAKLQlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBtYWNfYWRkciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MgJiB+U1BFQ0lBTCk7CisJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgbWFjX2FkZHIsIHNwZWMpOwogfQogCi1zdGF0aWMgY2hhciAqaXA2X2FkZHJfc3RyaW5nKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB1OCAqYWRkciwgaW50IGZpZWxkX3dpZHRoLAotCQkJIGludCBwcmVjaXNpb24sIGludCBmbGFncykKK3N0YXRpYyBjaGFyICppcDZfYWRkcl9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHU4ICphZGRyLAorCQkJCXN0cnVjdCBwcmludGZfc3BlYyBzcGVjKQogewogCWNoYXIgaXA2X2FkZHJbOCAqIDVdOyAvKiAoOCAqIDQgaGV4IGRpZ2l0cyksIDcgY29sb25zIGFuZCB0cmFpbGluZyB6ZXJvICovCiAJY2hhciAqcCA9IGlwNl9hZGRyOwpAQCAtNjEyLDE2ICs2NTIsMTcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCXAgPSBwYWNrX2hleF9ieXRlKHAsIGFkZHJbMiAqIGldKTsKIAkJcCA9IHBhY2tfaGV4X2J5dGUocCwgYWRkclsyICogaSArIDFdKTsKLQkJaWYgKCEoZmxhZ3MgJiBTUEVDSUFMKSAmJiBpICE9IDcpCisJCWlmICghKHNwZWMuZmxhZ3MgJiBTUEVDSUFMKSAmJiBpICE9IDcpCiAJCQkqcCsrID0gJzonOwogCX0KIAkqcCA9ICdcMCc7CisJc3BlYy5mbGFncyAmPSB+U1BFQ0lBTDsKIAotCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIGlwNl9hZGRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyAmIH5TUEVDSUFMKTsKKwlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBpcDZfYWRkciwgc3BlYyk7CiB9CiAKLXN0YXRpYyBjaGFyICppcDRfYWRkcl9zdHJpbmcoY2hhciAqYnVmLCBjaGFyICplbmQsIHU4ICphZGRyLCBpbnQgZmllbGRfd2lkdGgsCi0JCQkgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQorc3RhdGljIGNoYXIgKmlwNF9hZGRyX3N0cmluZyhjaGFyICpidWYsIGNoYXIgKmVuZCwgdTggKmFkZHIsCisJCQkJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMpCiB7CiAJY2hhciBpcDRfYWRkcls0ICogNF07IC8qICg0ICogMyBkZWNpbWFsIGRpZ2l0cyksIDMgZG90cyBhbmQgdHJhaWxpbmcgemVybyAqLwogCWNoYXIgdGVtcFszXTsJLyogaG9sZCBlYWNoIElQIHF1YWQgaW4gcmV2ZXJzZSBvcmRlciAqLwpAQCAtNjM3LDggKzY3OCw5IEBACiAJCQkqcCsrID0gJy4nOwogCX0KIAkqcCA9ICdcMCc7CisJc3BlYy5mbGFncyAmPSB+U1BFQ0lBTDsKIAotCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsIGlwNF9hZGRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyAmIH5TUEVDSUFMKTsKKwlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBpcDRfYWRkciwgc3BlYyk7CiB9CiAKIC8qCkBAIC02NjMsNDEgKzcwNSwyMzMgQEAKICAqIGZ1bmN0aW9uIHBvaW50ZXJzIGFyZSByZWFsbHkgZnVuY3Rpb24gZGVzY3JpcHRvcnMsIHdoaWNoIGNvbnRhaW4gYQogICogcG9pbnRlciB0byB0aGUgcmVhbCBhZGRyZXNzLgogICovCi1zdGF0aWMgY2hhciAqcG9pbnRlcihjb25zdCBjaGFyICpmbXQsIGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB2b2lkICpwdHIsIGludCBmaWVsZF93aWR0aCwgaW50IHByZWNpc2lvbiwgaW50IGZsYWdzKQorc3RhdGljIGNoYXIgKnBvaW50ZXIoY29uc3QgY2hhciAqZm10LCBjaGFyICpidWYsIGNoYXIgKmVuZCwgdm9pZCAqcHRyLAorCQkJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMpCiB7CiAJaWYgKCFwdHIpCi0JCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsICIobnVsbCkiLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJCXJldHVybiBzdHJpbmcoYnVmLCBlbmQsICIobnVsbCkiLCBzcGVjKTsKIAogCXN3aXRjaCAoKmZtdCkgewogCWNhc2UgJ0YnOgogCQlwdHIgPSBkZXJlZmVyZW5jZV9mdW5jdGlvbl9kZXNjcmlwdG9yKHB0cik7CiAJCS8qIEZhbGx0aHJvdWdoICovCiAJY2FzZSAnUyc6Ci0JCXJldHVybiBzeW1ib2xfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKKwkJcmV0dXJuIHN5bWJvbF9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYyk7CiAJY2FzZSAnUic6Ci0JCXJldHVybiByZXNvdXJjZV9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOworCQlyZXR1cm4gcmVzb3VyY2Vfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMpOwogCWNhc2UgJ20nOgotCQlmbGFncyB8PSBTUEVDSUFMOworCQlzcGVjLmZsYWdzIHw9IFNQRUNJQUw7CiAJCS8qIEZhbGx0aHJvdWdoICovCiAJY2FzZSAnTSc6Ci0JCXJldHVybiBtYWNfYWRkcmVzc19zdHJpbmcoYnVmLCBlbmQsIHB0ciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOworCQlyZXR1cm4gbWFjX2FkZHJlc3Nfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMpOwogCWNhc2UgJ2knOgotCQlmbGFncyB8PSBTUEVDSUFMOworCQlzcGVjLmZsYWdzIHw9IFNQRUNJQUw7CiAJCS8qIEZhbGx0aHJvdWdoICovCiAJY2FzZSAnSSc6CiAJCWlmIChmbXRbMV0gPT0gJzYnKQotCQkJcmV0dXJuIGlwNl9hZGRyX3N0cmluZyhidWYsIGVuZCwgcHRyLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CisJCQlyZXR1cm4gaXA2X2FkZHJfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMpOwogCQlpZiAoZm10WzFdID09ICc0JykKLQkJCXJldHVybiBpcDRfYWRkcl9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgZmllbGRfd2lkdGgsIHByZWNpc2lvbiwgZmxhZ3MpOwotCQlmbGFncyAmPSB+U1BFQ0lBTDsKKwkJCXJldHVybiBpcDRfYWRkcl9zdHJpbmcoYnVmLCBlbmQsIHB0ciwgc3BlYyk7CisJCXNwZWMuZmxhZ3MgJj0gflNQRUNJQUw7CiAJCWJyZWFrOwogCX0KLQlmbGFncyB8PSBTTUFMTDsKLQlpZiAoZmllbGRfd2lkdGggPT0gLTEpIHsKLQkJZmllbGRfd2lkdGggPSAyKnNpemVvZih2b2lkICopOwotCQlmbGFncyB8PSBaRVJPUEFEOworCXNwZWMuZmxhZ3MgfD0gU01BTEw7CisJaWYgKHNwZWMuZmllbGRfd2lkdGggPT0gLTEpIHsKKwkJc3BlYy5maWVsZF93aWR0aCA9IDIqc2l6ZW9mKHZvaWQgKik7CisJCXNwZWMuZmxhZ3MgfD0gWkVST1BBRDsKIAl9Ci0JcmV0dXJuIG51bWJlcihidWYsIGVuZCwgKHVuc2lnbmVkIGxvbmcpIHB0ciwgMTYsIGZpZWxkX3dpZHRoLCBwcmVjaXNpb24sIGZsYWdzKTsKKwlzcGVjLmJhc2UgPSAxNjsKKworCXJldHVybiBudW1iZXIoYnVmLCBlbmQsICh1bnNpZ25lZCBsb25nKSBwdHIsIHNwZWMpOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRvIGRlY29kZSBwcmludGYgc3R5bGUgZm9ybWF0LgorICogRWFjaCBjYWxsIGRlY29kZSBhIHRva2VuIGZyb20gdGhlIGZvcm1hdCBhbmQgcmV0dXJuIHRoZQorICogbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCAob3IgbGlrZWx5IHRoZSBkZWx0YSB3aGVyZSBpdCB3YW50cworICogdG8gZ28gb24gdGhlIG5leHQgY2FsbCkuCisgKiBUaGUgZGVjb2RlZCB0b2tlbiBpcyByZXR1cm5lZCB0aHJvdWdoIHRoZSBwYXJhbWV0ZXJzCisgKgorICogJ2gnLCAnbCcsIG9yICdMJyBmb3IgaW50ZWdlciBmaWVsZHMKKyAqICd6JyBzdXBwb3J0IGFkZGVkIDIzLzcvMTk5OSBTLkguCisgKiAneicgY2hhbmdlZCB0byAnWicgLS1kYXZpZG0gMS8yNS85OQorICogJ3QnIGFkZGVkIGZvciBwdHJkaWZmX3QKKyAqCisgKiBAZm10OiB0aGUgZm9ybWF0IHN0cmluZworICogQHR5cGUgb2YgdGhlIHRva2VuIHJldHVybmVkCisgKiBAZmxhZ3M6IHZhcmlvdXMgZmxhZ3Mgc3VjaCBhcyArLCAtLCAjIHRva2Vucy4uCisgKiBAZmllbGRfd2lkdGg6IG92ZXJ3cml0dGVuIHdpZHRoCisgKiBAYmFzZTogYmFzZSBvZiB0aGUgbnVtYmVyIChvY3RhbCwgaGV4LCAuLi4pCisgKiBAcHJlY2lzaW9uOiBwcmVjaXNpb24gb2YgYSBudW1iZXIKKyAqIEBxdWFsaWZpZXI6IHF1YWxpZmllciBvZiBhIG51bWJlciAobG9uZywgc2l6ZV90LCAuLi4pCisgKi8KK3N0YXRpYyBpbnQgZm9ybWF0X2RlY29kZShjb25zdCBjaGFyICpmbXQsIHN0cnVjdCBwcmludGZfc3BlYyAqc3BlYykKK3sKKwljb25zdCBjaGFyICpzdGFydCA9IGZtdDsKKworCS8qIHdlIGZpbmlzaGVkIGVhcmx5IGJ5IHJlYWRpbmcgdGhlIGZpZWxkIHdpZHRoICovCisJaWYgKHNwZWMtPnR5cGUgPT0gRk9STUFUX1RZUEVfV0lEVEgpIHsKKwkJaWYgKHNwZWMtPmZpZWxkX3dpZHRoIDwgMCkgeworCQkJc3BlYy0+ZmllbGRfd2lkdGggPSAtc3BlYy0+ZmllbGRfd2lkdGg7CisJCQlzcGVjLT5mbGFncyB8PSBMRUZUOworCQl9CisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9OT05FOworCQlnb3RvIHByZWNpc2lvbjsKKwl9CisKKwkvKiB3ZSBmaW5pc2hlZCBlYXJseSBieSByZWFkaW5nIHRoZSBwcmVjaXNpb24gKi8KKwlpZiAoc3BlYy0+dHlwZSA9PSBGT1JNQVRfVFlQRV9QUkVDSVNJT04pIHsKKwkJaWYgKHNwZWMtPnByZWNpc2lvbiA8IDApCisJCQlzcGVjLT5wcmVjaXNpb24gPSAwOworCisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9OT05FOworCQlnb3RvIHF1YWxpZmllcjsKKwl9CisKKwkvKiBCeSBkZWZhdWx0ICovCisJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX05PTkU7CisKKwlmb3IgKDsgKmZtdCA7ICsrZm10KSB7CisJCWlmICgqZm10ID09ICclJykKKwkJCWJyZWFrOworCX0KKworCS8qIFJldHVybiB0aGUgY3VycmVudCBub24tZm9ybWF0IHN0cmluZyAqLworCWlmIChmbXQgIT0gc3RhcnQgfHwgISpmbXQpCisJCXJldHVybiBmbXQgLSBzdGFydDsKKworCS8qIFByb2Nlc3MgZmxhZ3MgKi8KKwlzcGVjLT5mbGFncyA9IDA7CisKKwl3aGlsZSAoMSkgeyAvKiB0aGlzIGFsc28gc2tpcHMgZmlyc3QgJyUnICovCisJCWJvb2wgZm91bmQgPSB0cnVlOworCisJCSsrZm10OworCisJCXN3aXRjaCAoKmZtdCkgeworCQljYXNlICctJzogc3BlYy0+ZmxhZ3MgfD0gTEVGVDsgICAgYnJlYWs7CisJCWNhc2UgJysnOiBzcGVjLT5mbGFncyB8PSBQTFVTOyAgICBicmVhazsKKwkJY2FzZSAnICc6IHNwZWMtPmZsYWdzIHw9IFNQQUNFOyAgIGJyZWFrOworCQljYXNlICcjJzogc3BlYy0+ZmxhZ3MgfD0gU1BFQ0lBTDsgYnJlYWs7CisJCWNhc2UgJzAnOiBzcGVjLT5mbGFncyB8PSBaRVJPUEFEOyBicmVhazsKKwkJZGVmYXVsdDogIGZvdW5kID0gZmFsc2U7CisJCX0KKworCQlpZiAoIWZvdW5kKQorCQkJYnJlYWs7CisJfQorCisJLyogZ2V0IGZpZWxkIHdpZHRoICovCisJc3BlYy0+ZmllbGRfd2lkdGggPSAtMTsKKworCWlmIChpc2RpZ2l0KCpmbXQpKQorCQlzcGVjLT5maWVsZF93aWR0aCA9IHNraXBfYXRvaSgmZm10KTsKKwllbHNlIGlmICgqZm10ID09ICcqJykgeworCQkvKiBpdCdzIHRoZSBuZXh0IGFyZ3VtZW50ICovCisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9XSURUSDsKKwkJcmV0dXJuICsrZm10IC0gc3RhcnQ7CisJfQorCitwcmVjaXNpb246CisJLyogZ2V0IHRoZSBwcmVjaXNpb24gKi8KKwlzcGVjLT5wcmVjaXNpb24gPSAtMTsKKwlpZiAoKmZtdCA9PSAnLicpIHsKKwkJKytmbXQ7CisJCWlmIChpc2RpZ2l0KCpmbXQpKSB7CisJCQlzcGVjLT5wcmVjaXNpb24gPSBza2lwX2F0b2koJmZtdCk7CisJCQlpZiAoc3BlYy0+cHJlY2lzaW9uIDwgMCkKKwkJCQlzcGVjLT5wcmVjaXNpb24gPSAwOworCQl9IGVsc2UgaWYgKCpmbXQgPT0gJyonKSB7CisJCQkvKiBpdCdzIHRoZSBuZXh0IGFyZ3VtZW50ICovCisJCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfUFJFQ0lTSU9OOworCQkJcmV0dXJuICsrZm10IC0gc3RhcnQ7CisJCX0KKwl9CisKK3F1YWxpZmllcjoKKwkvKiBnZXQgdGhlIGNvbnZlcnNpb24gcXVhbGlmaWVyICovCisJc3BlYy0+cXVhbGlmaWVyID0gLTE7CisJaWYgKCpmbXQgPT0gJ2gnIHx8ICpmbXQgPT0gJ2wnIHx8ICpmbXQgPT0gJ0wnIHx8CisJICAgICpmbXQgPT0gJ1onIHx8ICpmbXQgPT0gJ3onIHx8ICpmbXQgPT0gJ3QnKSB7CisJCXNwZWMtPnF1YWxpZmllciA9ICpmbXQ7CisJCSsrZm10OworCQlpZiAoc3BlYy0+cXVhbGlmaWVyID09ICdsJyAmJiAqZm10ID09ICdsJykgeworCQkJc3BlYy0+cXVhbGlmaWVyID0gJ0wnOworCQkJKytmbXQ7CisJCX0KKwl9CisKKwkvKiBkZWZhdWx0IGJhc2UgKi8KKwlzcGVjLT5iYXNlID0gMTA7CisJc3dpdGNoICgqZm10KSB7CisJY2FzZSAnYyc6CisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9DSEFSOworCQlyZXR1cm4gKytmbXQgLSBzdGFydDsKKworCWNhc2UgJ3MnOgorCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfU1RSOworCQlyZXR1cm4gKytmbXQgLSBzdGFydDsKKworCWNhc2UgJ3AnOgorCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfUFRSOworCQlyZXR1cm4gZm10IC0gc3RhcnQ7CisJCS8qIHNraXAgYWxudW0gKi8KKworCWNhc2UgJ24nOgorCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfTlJDSEFSUzsKKwkJcmV0dXJuICsrZm10IC0gc3RhcnQ7CisKKwljYXNlICclJzoKKwkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX1BFUkNFTlRfQ0hBUjsKKwkJcmV0dXJuICsrZm10IC0gc3RhcnQ7CisKKwkvKiBpbnRlZ2VyIG51bWJlciBmb3JtYXRzIC0gc2V0IHVwIHRoZSBmbGFncyBhbmQgImJyZWFrIiAqLworCWNhc2UgJ28nOgorCQlzcGVjLT5iYXNlID0gODsKKwkJYnJlYWs7CisKKwljYXNlICd4JzoKKwkJc3BlYy0+ZmxhZ3MgfD0gU01BTEw7CisKKwljYXNlICdYJzoKKwkJc3BlYy0+YmFzZSA9IDE2OworCQlicmVhazsKKworCWNhc2UgJ2QnOgorCWNhc2UgJ2knOgorCQlzcGVjLT5mbGFncyB8PSBTSUdOOworCWNhc2UgJ3UnOgorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9JTlZBTElEOworCQlyZXR1cm4gZm10IC0gc3RhcnQ7CisJfQorCisJaWYgKHNwZWMtPnF1YWxpZmllciA9PSAnTCcpCisJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9MT05HX0xPTkc7CisJZWxzZSBpZiAoc3BlYy0+cXVhbGlmaWVyID09ICdsJykgeworCQlpZiAoc3BlYy0+ZmxhZ3MgJiBTSUdOKQorCQkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX0xPTkc7CisJCWVsc2UKKwkJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9VTE9ORzsKKwl9IGVsc2UgaWYgKHNwZWMtPnF1YWxpZmllciA9PSAnWicgfHwgc3BlYy0+cXVhbGlmaWVyID09ICd6JykgeworCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfU0laRV9UOworCX0gZWxzZSBpZiAoc3BlYy0+cXVhbGlmaWVyID09ICd0JykgeworCQlzcGVjLT50eXBlID0gRk9STUFUX1RZUEVfUFRSRElGRjsKKwl9IGVsc2UgaWYgKHNwZWMtPnF1YWxpZmllciA9PSAnaCcpIHsKKwkJaWYgKHNwZWMtPmZsYWdzICYgU0lHTikKKwkJCXNwZWMtPnR5cGUgPSBGT1JNQVRfVFlQRV9TSE9SVDsKKwkJZWxzZQorCQkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX1VTSE9SVDsKKwl9IGVsc2UgeworCQlpZiAoc3BlYy0+ZmxhZ3MgJiBTSUdOKQorCQkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX0lOVDsKKwkJZWxzZQorCQkJc3BlYy0+dHlwZSA9IEZPUk1BVF9UWVBFX1VJTlQ7CisJfQorCisJcmV0dXJuICsrZm10IC0gc3RhcnQ7CiB9CiAKIC8qKgpAQCAtNzI2LDE4ICs5NjAsOSBAQAogaW50IHZzbnByaW50ZihjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbnVtOwotCWludCBiYXNlOwogCWNoYXIgKnN0ciwgKmVuZCwgYzsKLQotCWludCBmbGFnczsJCS8qIGZsYWdzIHRvIG51bWJlcigpICovCi0KLQlpbnQgZmllbGRfd2lkdGg7CS8qIHdpZHRoIG9mIG91dHB1dCBmaWVsZCAqLwotCWludCBwcmVjaXNpb247CQkvKiBtaW4uICMgb2YgZGlnaXRzIGZvciBpbnRlZ2VyczsgbWF4Ci0JCQkJICAgbnVtYmVyIG9mIGNoYXJzIGZvciBmcm9tIHN0cmluZyAqLwotCWludCBxdWFsaWZpZXI7CQkvKiAnaCcsICdsJywgb3IgJ0wnIGZvciBpbnRlZ2VyIGZpZWxkcyAqLwotCQkJCS8qICd6JyBzdXBwb3J0IGFkZGVkIDIzLzcvMTk5OSBTLkguICAgICovCi0JCQkJLyogJ3onIGNoYW5nZWQgdG8gJ1onIC0tZGF2aWRtIDEvMjUvOTkgKi8KLQkJCQkvKiAndCcgYWRkZWQgZm9yIHB0cmRpZmZfdCAqLworCWludCByZWFkOworCXN0cnVjdCBwcmludGZfc3BlYyBzcGVjID0gezB9OwogCiAJLyogUmVqZWN0IG91dC1vZi1yYW5nZSB2YWx1ZXMgZWFybHkuICBMYXJnZSBwb3NpdGl2ZSBzaXplcyBhcmUKIAkgICB1c2VkIGZvciB1bmtub3duIGJ1ZmZlciBzaXplcy4gKi8KQEAgLTc1OCwxODQgKzk4MywxNDQgQEAKIAkJc2l6ZSA9IGVuZCAtIGJ1ZjsKIAl9CiAKLQlmb3IgKDsgKmZtdCA7ICsrZm10KSB7Ci0JCWlmICgqZm10ICE9ICclJykgewotCQkJaWYgKHN0ciA8IGVuZCkKLQkJCQkqc3RyID0gKmZtdDsKLQkJCSsrc3RyOwotCQkJY29udGludWU7CisJd2hpbGUgKCpmbXQpIHsKKwkJY29uc3QgY2hhciAqb2xkX2ZtdCA9IGZtdDsKKworCQlyZWFkID0gZm9ybWF0X2RlY29kZShmbXQsICZzcGVjKTsKKworCQlmbXQgKz0gcmVhZDsKKworCQlzd2l0Y2ggKHNwZWMudHlwZSkgeworCQljYXNlIEZPUk1BVF9UWVBFX05PTkU6IHsKKwkJCWludCBjb3B5ID0gcmVhZDsKKwkJCWlmIChzdHIgPCBlbmQpIHsKKwkJCQlpZiAoY29weSA+IGVuZCAtIHN0cikKKwkJCQkJY29weSA9IGVuZCAtIHN0cjsKKwkJCQltZW1jcHkoc3RyLCBvbGRfZm10LCBjb3B5KTsKKwkJCX0KKwkJCXN0ciArPSByZWFkOworCQkJYnJlYWs7CiAJCX0KIAotCQkvKiBwcm9jZXNzIGZsYWdzICovCi0JCWZsYWdzID0gMDsKLQkJcmVwZWF0OgotCQkJKytmbXQ7CQkvKiB0aGlzIGFsc28gc2tpcHMgZmlyc3QgJyUnICovCi0JCQlzd2l0Y2ggKCpmbXQpIHsKLQkJCQljYXNlICctJzogZmxhZ3MgfD0gTEVGVDsgZ290byByZXBlYXQ7Ci0JCQkJY2FzZSAnKyc6IGZsYWdzIHw9IFBMVVM7IGdvdG8gcmVwZWF0OwotCQkJCWNhc2UgJyAnOiBmbGFncyB8PSBTUEFDRTsgZ290byByZXBlYXQ7Ci0JCQkJY2FzZSAnIyc6IGZsYWdzIHw9IFNQRUNJQUw7IGdvdG8gcmVwZWF0OwotCQkJCWNhc2UgJzAnOiBmbGFncyB8PSBaRVJPUEFEOyBnb3RvIHJlcGVhdDsKLQkJCX0KKwkJY2FzZSBGT1JNQVRfVFlQRV9XSURUSDoKKwkJCXNwZWMuZmllbGRfd2lkdGggPSB2YV9hcmcoYXJncywgaW50KTsKKwkJCWJyZWFrOwogCi0JCS8qIGdldCBmaWVsZCB3aWR0aCAqLwotCQlmaWVsZF93aWR0aCA9IC0xOwotCQlpZiAoaXNkaWdpdCgqZm10KSkKLQkJCWZpZWxkX3dpZHRoID0gc2tpcF9hdG9pKCZmbXQpOwotCQllbHNlIGlmICgqZm10ID09ICcqJykgewotCQkJKytmbXQ7Ci0JCQkvKiBpdCdzIHRoZSBuZXh0IGFyZ3VtZW50ICovCi0JCQlmaWVsZF93aWR0aCA9IHZhX2FyZyhhcmdzLCBpbnQpOwotCQkJaWYgKGZpZWxkX3dpZHRoIDwgMCkgewotCQkJCWZpZWxkX3dpZHRoID0gLWZpZWxkX3dpZHRoOwotCQkJCWZsYWdzIHw9IExFRlQ7Ci0JCQl9Ci0JCX0KKwkJY2FzZSBGT1JNQVRfVFlQRV9QUkVDSVNJT046CisJCQlzcGVjLnByZWNpc2lvbiA9IHZhX2FyZyhhcmdzLCBpbnQpOworCQkJYnJlYWs7CiAKLQkJLyogZ2V0IHRoZSBwcmVjaXNpb24gKi8KLQkJcHJlY2lzaW9uID0gLTE7Ci0JCWlmICgqZm10ID09ICcuJykgewotCQkJKytmbXQ7CQotCQkJaWYgKGlzZGlnaXQoKmZtdCkpCi0JCQkJcHJlY2lzaW9uID0gc2tpcF9hdG9pKCZmbXQpOwotCQkJZWxzZSBpZiAoKmZtdCA9PSAnKicpIHsKLQkJCQkrK2ZtdDsKLQkJCQkvKiBpdCdzIHRoZSBuZXh0IGFyZ3VtZW50ICovCi0JCQkJcHJlY2lzaW9uID0gdmFfYXJnKGFyZ3MsIGludCk7Ci0JCQl9Ci0JCQlpZiAocHJlY2lzaW9uIDwgMCkKLQkJCQlwcmVjaXNpb24gPSAwOwotCQl9Ci0KLQkJLyogZ2V0IHRoZSBjb252ZXJzaW9uIHF1YWxpZmllciAqLwotCQlxdWFsaWZpZXIgPSAtMTsKLQkJaWYgKCpmbXQgPT0gJ2gnIHx8ICpmbXQgPT0gJ2wnIHx8ICpmbXQgPT0gJ0wnIHx8Ci0JCSAgICAqZm10ID09J1onIHx8ICpmbXQgPT0gJ3onIHx8ICpmbXQgPT0gJ3QnKSB7Ci0JCQlxdWFsaWZpZXIgPSAqZm10OwotCQkJKytmbXQ7Ci0JCQlpZiAocXVhbGlmaWVyID09ICdsJyAmJiAqZm10ID09ICdsJykgewotCQkJCXF1YWxpZmllciA9ICdMJzsKLQkJCQkrK2ZtdDsKLQkJCX0KLQkJfQotCi0JCS8qIGRlZmF1bHQgYmFzZSAqLwotCQliYXNlID0gMTA7Ci0KLQkJc3dpdGNoICgqZm10KSB7Ci0JCQljYXNlICdjJzoKLQkJCQlpZiAoIShmbGFncyAmIExFRlQpKSB7Ci0JCQkJCXdoaWxlICgtLWZpZWxkX3dpZHRoID4gMCkgewotCQkJCQkJaWYgKHN0ciA8IGVuZCkKLQkJCQkJCQkqc3RyID0gJyAnOwotCQkJCQkJKytzdHI7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYyA9ICh1bnNpZ25lZCBjaGFyKSB2YV9hcmcoYXJncywgaW50KTsKLQkJCQlpZiAoc3RyIDwgZW5kKQotCQkJCQkqc3RyID0gYzsKLQkJCQkrK3N0cjsKLQkJCQl3aGlsZSAoLS1maWVsZF93aWR0aCA+IDApIHsKKwkJY2FzZSBGT1JNQVRfVFlQRV9DSEFSOgorCQkJaWYgKCEoc3BlYy5mbGFncyAmIExFRlQpKSB7CisJCQkJd2hpbGUgKC0tc3BlYy5maWVsZF93aWR0aCA+IDApIHsKIAkJCQkJaWYgKHN0ciA8IGVuZCkKIAkJCQkJCSpzdHIgPSAnICc7CiAJCQkJCSsrc3RyOworCiAJCQkJfQotCQkJCWNvbnRpbnVlOwotCi0JCQljYXNlICdzJzoKLQkJCQlzdHIgPSBzdHJpbmcoc3RyLCBlbmQsIHZhX2FyZyhhcmdzLCBjaGFyICopLCBmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7Ci0JCQkJY29udGludWU7Ci0KLQkJCWNhc2UgJ3AnOgotCQkJCXN0ciA9IHBvaW50ZXIoZm10KzEsIHN0ciwgZW5kLAotCQkJCQkJdmFfYXJnKGFyZ3MsIHZvaWQgKiksCi0JCQkJCQlmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7Ci0JCQkJLyogU2tpcCBhbGwgYWxwaGFudW1lcmljIHBvaW50ZXIgc3VmZml4ZXMgKi8KLQkJCQl3aGlsZSAoaXNhbG51bShmbXRbMV0pKQotCQkJCQlmbXQrKzsKLQkJCQljb250aW51ZTsKLQotCQkJY2FzZSAnbic6Ci0JCQkJLyogRklYTUU6Ci0JCQkJKiBXaGF0IGRvZXMgQzk5IHNheSBhYm91dCB0aGUgb3ZlcmZsb3cgY2FzZSBoZXJlPyAqLwotCQkJCWlmIChxdWFsaWZpZXIgPT0gJ2wnKSB7Ci0JCQkJCWxvbmcgKiBpcCA9IHZhX2FyZyhhcmdzLCBsb25nICopOwotCQkJCQkqaXAgPSAoc3RyIC0gYnVmKTsKLQkJCQl9IGVsc2UgaWYgKHF1YWxpZmllciA9PSAnWicgfHwgcXVhbGlmaWVyID09ICd6JykgewotCQkJCQlzaXplX3QgKiBpcCA9IHZhX2FyZyhhcmdzLCBzaXplX3QgKik7Ci0JCQkJCSppcCA9IChzdHIgLSBidWYpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWludCAqIGlwID0gdmFfYXJnKGFyZ3MsIGludCAqKTsKLQkJCQkJKmlwID0gKHN0ciAtIGJ1Zik7Ci0JCQkJfQotCQkJCWNvbnRpbnVlOwotCi0JCQljYXNlICclJzoKKwkJCX0KKwkJCWMgPSAodW5zaWduZWQgY2hhcikgdmFfYXJnKGFyZ3MsIGludCk7CisJCQlpZiAoc3RyIDwgZW5kKQorCQkJCSpzdHIgPSBjOworCQkJKytzdHI7CisJCQl3aGlsZSAoLS1zcGVjLmZpZWxkX3dpZHRoID4gMCkgewogCQkJCWlmIChzdHIgPCBlbmQpCi0JCQkJCSpzdHIgPSAnJSc7CisJCQkJCSpzdHIgPSAnICc7CiAJCQkJKytzdHI7Ci0JCQkJY29udGludWU7CisJCQl9CisJCQlicmVhazsKIAotCQkJCS8qIGludGVnZXIgbnVtYmVyIGZvcm1hdHMgLSBzZXQgdXAgdGhlIGZsYWdzIGFuZCAiYnJlYWsiICovCi0JCQljYXNlICdvJzoKLQkJCQliYXNlID0gODsKKwkJY2FzZSBGT1JNQVRfVFlQRV9TVFI6CisJCQlzdHIgPSBzdHJpbmcoc3RyLCBlbmQsIHZhX2FyZyhhcmdzLCBjaGFyICopLCBzcGVjKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfUFRSOgorCQkJc3RyID0gcG9pbnRlcihmbXQrMSwgc3RyLCBlbmQsIHZhX2FyZyhhcmdzLCB2b2lkICopLAorCQkJCSAgICAgIHNwZWMpOworCQkJd2hpbGUgKGlzYWxudW0oKmZtdCkpCisJCQkJZm10Kys7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX1BFUkNFTlRfQ0hBUjoKKwkJCWlmIChzdHIgPCBlbmQpCisJCQkJKnN0ciA9ICclJzsKKwkJCSsrc3RyOworCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9JTlZBTElEOgorCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkqc3RyID0gJyUnOworCQkJKytzdHI7CisJCQlpZiAoKmZtdCkgeworCQkJCWlmIChzdHIgPCBlbmQpCisJCQkJCSpzdHIgPSAqZm10OworCQkJCSsrc3RyOworCQkJfSBlbHNlIHsKKwkJCQktLWZtdDsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfTlJDSEFSUzogeworCQkJaW50IHF1YWxpZmllciA9IHNwZWMucXVhbGlmaWVyOworCisJCQlpZiAocXVhbGlmaWVyID09ICdsJykgeworCQkJCWxvbmcgKmlwID0gdmFfYXJnKGFyZ3MsIGxvbmcgKik7CisJCQkJKmlwID0gKHN0ciAtIGJ1Zik7CisJCQl9IGVsc2UgaWYgKHF1YWxpZmllciA9PSAnWicgfHwKKwkJCQkJcXVhbGlmaWVyID09ICd6JykgeworCQkJCXNpemVfdCAqaXAgPSB2YV9hcmcoYXJncywgc2l6ZV90ICopOworCQkJCSppcCA9IChzdHIgLSBidWYpOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgKmlwID0gdmFfYXJnKGFyZ3MsIGludCAqKTsKKwkJCQkqaXAgPSAoc3RyIC0gYnVmKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJZGVmYXVsdDoKKwkJCXN3aXRjaCAoc3BlYy50eXBlKSB7CisJCQljYXNlIEZPUk1BVF9UWVBFX0xPTkdfTE9ORzoKKwkJCQludW0gPSB2YV9hcmcoYXJncywgbG9uZyBsb25nKTsKIAkJCQlicmVhazsKLQotCQkJY2FzZSAneCc6Ci0JCQkJZmxhZ3MgfD0gU01BTEw7Ci0JCQljYXNlICdYJzoKLQkJCQliYXNlID0gMTY7CisJCQljYXNlIEZPUk1BVF9UWVBFX1VMT05HOgorCQkJCW51bSA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKIAkJCQlicmVhazsKLQotCQkJY2FzZSAnZCc6Ci0JCQljYXNlICdpJzoKLQkJCQlmbGFncyB8PSBTSUdOOwotCQkJY2FzZSAndSc6CisJCQljYXNlIEZPUk1BVF9UWVBFX0xPTkc6CisJCQkJbnVtID0gdmFfYXJnKGFyZ3MsIGxvbmcpOwogCQkJCWJyZWFrOwotCisJCQljYXNlIEZPUk1BVF9UWVBFX1NJWkVfVDoKKwkJCQludW0gPSB2YV9hcmcoYXJncywgc2l6ZV90KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfUFRSRElGRjoKKwkJCQludW0gPSB2YV9hcmcoYXJncywgcHRyZGlmZl90KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfVVNIT1JUOgorCQkJCW51bSA9ICh1bnNpZ25lZCBzaG9ydCkgdmFfYXJnKGFyZ3MsIGludCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZPUk1BVF9UWVBFX1NIT1JUOgorCQkJCW51bSA9IChzaG9ydCkgdmFfYXJnKGFyZ3MsIGludCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZPUk1BVF9UWVBFX0lOVDoKKwkJCQludW0gPSAoaW50KSB2YV9hcmcoYXJncywgaW50KTsKKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJaWYgKHN0ciA8IGVuZCkKLQkJCQkJKnN0ciA9ICclJzsKLQkJCQkrK3N0cjsKLQkJCQlpZiAoKmZtdCkgewotCQkJCQlpZiAoc3RyIDwgZW5kKQotCQkJCQkJKnN0ciA9ICpmbXQ7Ci0JCQkJCSsrc3RyOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS0tZm10OwotCQkJCX0KLQkJCQljb250aW51ZTsKKwkJCQludW0gPSB2YV9hcmcoYXJncywgdW5zaWduZWQgaW50KTsKKwkJCX0KKworCQkJc3RyID0gbnVtYmVyKHN0ciwgZW5kLCBudW0sIHNwZWMpOwogCQl9Ci0JCWlmIChxdWFsaWZpZXIgPT0gJ0wnKQotCQkJbnVtID0gdmFfYXJnKGFyZ3MsIGxvbmcgbG9uZyk7Ci0JCWVsc2UgaWYgKHF1YWxpZmllciA9PSAnbCcpIHsKLQkJCW51bSA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKLQkJCWlmIChmbGFncyAmIFNJR04pCi0JCQkJbnVtID0gKHNpZ25lZCBsb25nKSBudW07Ci0JCX0gZWxzZSBpZiAocXVhbGlmaWVyID09ICdaJyB8fCBxdWFsaWZpZXIgPT0gJ3onKSB7Ci0JCQludW0gPSB2YV9hcmcoYXJncywgc2l6ZV90KTsKLQkJfSBlbHNlIGlmIChxdWFsaWZpZXIgPT0gJ3QnKSB7Ci0JCQludW0gPSB2YV9hcmcoYXJncywgcHRyZGlmZl90KTsKLQkJfSBlbHNlIGlmIChxdWFsaWZpZXIgPT0gJ2gnKSB7Ci0JCQludW0gPSAodW5zaWduZWQgc2hvcnQpIHZhX2FyZyhhcmdzLCBpbnQpOwotCQkJaWYgKGZsYWdzICYgU0lHTikKLQkJCQludW0gPSAoc2lnbmVkIHNob3J0KSBudW07Ci0JCX0gZWxzZSB7Ci0JCQludW0gPSB2YV9hcmcoYXJncywgdW5zaWduZWQgaW50KTsKLQkJCWlmIChmbGFncyAmIFNJR04pCi0JCQkJbnVtID0gKHNpZ25lZCBpbnQpIG51bTsKLQkJfQotCQlzdHIgPSBudW1iZXIoc3RyLCBlbmQsIG51bSwgYmFzZSwKLQkJCQlmaWVsZF93aWR0aCwgcHJlY2lzaW9uLCBmbGFncyk7CiAJfQorCiAJaWYgKHNpemUgPiAwKSB7CiAJCWlmIChzdHIgPCBlbmQpCiAJCQkqc3RyID0gJ1wwJzsKIAkJZWxzZQogCQkJZW5kWy0xXSA9ICdcMCc7CiAJfQorCiAJLyogdGhlIHRyYWlsaW5nIG51bGwgYnl0ZSBkb2Vzbid0IGNvdW50IHRvd2FyZHMgdGhlIHRvdGFsICovCiAJcmV0dXJuIHN0ci1idWY7CisKIH0KIEVYUE9SVF9TWU1CT0wodnNucHJpbnRmKTsKIApAQCAtMTA1OCw2ICsxMjQzLDM3MiBAQAogfQogRVhQT1JUX1NZTUJPTChzcHJpbnRmKTsKIAorI2lmZGVmIENPTkZJR19CSU5BUllfUFJJTlRGCisvKgorICogYnByaW50ZiBzZXJ2aWNlOgorICogdmJpbl9wcmludGYoKSAtIFZBIGFyZ3VtZW50cyB0byBiaW5hcnkgZGF0YQorICogYnN0cl9wcmludGYoKSAtIEJpbmFyeSBkYXRhIHRvIHRleHQgc3RyaW5nCisgKi8KKworLyoqCisgKiB2YmluX3ByaW50ZiAtIFBhcnNlIGEgZm9ybWF0IHN0cmluZyBhbmQgcGxhY2UgYXJncycgYmluYXJ5IHZhbHVlIGluIGEgYnVmZmVyCisgKiBAYmluX2J1ZjogVGhlIGJ1ZmZlciB0byBwbGFjZSBhcmdzJyBiaW5hcnkgdmFsdWUKKyAqIEBzaXplOiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyKGJ5IHdvcmRzKDMyYml0cyksIG5vdCBjaGFyYWN0ZXJzKQorICogQGZtdDogVGhlIGZvcm1hdCBzdHJpbmcgdG8gdXNlCisgKiBAYXJnczogQXJndW1lbnRzIGZvciB0aGUgZm9ybWF0IHN0cmluZworICoKKyAqIFRoZSBmb3JtYXQgZm9sbG93cyBDOTkgdnNucHJpbnRmLCBleGNlcHQgJW4gaXMgaWdub3JlZCwgYW5kIGl0cyBhcmd1bWVudAorICogaXMgc2tpcGVkLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiB3b3JkcygzMmJpdHMpIHdoaWNoIHdvdWxkIGJlIGdlbmVyYXRlZCBmb3IKKyAqIHRoZSBnaXZlbiBpbnB1dC4KKyAqCisgKiBOT1RFOgorICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gQHNpemUsIHRoZSByZXN1bHRpbmcgYmluX2J1ZiBpcyBOT1QKKyAqIHZhbGlkIGZvciBic3RyX3ByaW50ZigpLgorICovCitpbnQgdmJpbl9wcmludGYodTMyICpiaW5fYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCit7CisJc3RydWN0IHByaW50Zl9zcGVjIHNwZWMgPSB7MH07CisJY2hhciAqc3RyLCAqZW5kOworCWludCByZWFkOworCisJc3RyID0gKGNoYXIgKiliaW5fYnVmOworCWVuZCA9IChjaGFyICopKGJpbl9idWYgKyBzaXplKTsKKworI2RlZmluZSBzYXZlX2FyZyh0eXBlKQkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChzaXplb2YodHlwZSkgPT0gOCkgewkJCQkJXAorCQl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CQkJCVwKKwkJc3RyID0gUFRSX0FMSUdOKHN0ciwgc2l6ZW9mKHUzMikpOwkJCVwKKwkJdmFsdWUgPSB2YV9hcmcoYXJncywgdW5zaWduZWQgbG9uZyBsb25nKTsJCVwKKwkJaWYgKHN0ciArIHNpemVvZih0eXBlKSA8PSBlbmQpIHsJCQlcCisJCQkqKHUzMiAqKXN0ciA9ICoodTMyICopJnZhbHVlOwkJCVwKKwkJCSoodTMyICopKHN0ciArIDQpID0gKigodTMyICopJnZhbHVlICsgMSk7CVwKKwkJfQkJCQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIHZhbHVlOwkJCQkJXAorCQlzdHIgPSBQVFJfQUxJR04oc3RyLCBzaXplb2YodHlwZSkpOwkJCVwKKwkJdmFsdWUgPSB2YV9hcmcoYXJncywgaW50KTsJCQkJXAorCQlpZiAoc3RyICsgc2l6ZW9mKHR5cGUpIDw9IGVuZCkJCQkJXAorCQkJKih0eXBlb2YodHlwZSkgKilzdHIgPSAodHlwZSl2YWx1ZTsJCVwKKwl9CQkJCQkJCQlcCisJc3RyICs9IHNpemVvZih0eXBlKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisKKwl3aGlsZSAoKmZtdCkgeworCQlyZWFkID0gZm9ybWF0X2RlY29kZShmbXQsICZzcGVjKTsKKworCQlmbXQgKz0gcmVhZDsKKworCQlzd2l0Y2ggKHNwZWMudHlwZSkgeworCQljYXNlIEZPUk1BVF9UWVBFX05PTkU6CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX1dJRFRIOgorCQljYXNlIEZPUk1BVF9UWVBFX1BSRUNJU0lPTjoKKwkJCXNhdmVfYXJnKGludCk7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX0NIQVI6CisJCQlzYXZlX2FyZyhjaGFyKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfU1RSOiB7CisJCQljb25zdCBjaGFyICpzYXZlX3N0ciA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQkJc2l6ZV90IGxlbjsKKwkJCWlmICgodW5zaWduZWQgbG9uZylzYXZlX3N0ciA+ICh1bnNpZ25lZCBsb25nKS1QQUdFX1NJWkUKKwkJCQkJfHwgKHVuc2lnbmVkIGxvbmcpc2F2ZV9zdHIgPCBQQUdFX1NJWkUpCisJCQkJc2F2ZV9zdHIgPSAiPE5VTEw+IjsKKwkJCWxlbiA9IHN0cmxlbihzYXZlX3N0cik7CisJCQlpZiAoc3RyICsgbGVuICsgMSA8IGVuZCkKKwkJCQltZW1jcHkoc3RyLCBzYXZlX3N0ciwgbGVuICsgMSk7CisJCQlzdHIgKz0gbGVuICsgMTsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9QVFI6CisJCQlzYXZlX2FyZyh2b2lkICopOworCQkJLyogc2tpcCBhbGwgYWxwaGFudW1lcmljIHBvaW50ZXIgc3VmZml4ZXMgKi8KKwkJCXdoaWxlIChpc2FsbnVtKCpmbXQpKQorCQkJCWZtdCsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9QRVJDRU5UX0NIQVI6CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX0lOVkFMSUQ6CisJCQlpZiAoISpmbXQpCisJCQkJLS1mbXQ7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX05SQ0hBUlM6IHsKKwkJCS8qIHNraXAgJW4gJ3MgYXJndW1lbnQgKi8KKwkJCWludCBxdWFsaWZpZXIgPSBzcGVjLnF1YWxpZmllcjsKKwkJCXZvaWQgKnNraXBfYXJnOworCQkJaWYgKHF1YWxpZmllciA9PSAnbCcpCisJCQkJc2tpcF9hcmcgPSB2YV9hcmcoYXJncywgbG9uZyAqKTsKKwkJCWVsc2UgaWYgKHF1YWxpZmllciA9PSAnWicgfHwgcXVhbGlmaWVyID09ICd6JykKKwkJCQlza2lwX2FyZyA9IHZhX2FyZyhhcmdzLCBzaXplX3QgKik7CisJCQllbHNlCisJCQkJc2tpcF9hcmcgPSB2YV9hcmcoYXJncywgaW50ICopOworCQkJYnJlYWs7CisJCX0KKworCQlkZWZhdWx0OgorCQkJc3dpdGNoIChzcGVjLnR5cGUpIHsKKworCQkJY2FzZSBGT1JNQVRfVFlQRV9MT05HX0xPTkc6CisJCQkJc2F2ZV9hcmcobG9uZyBsb25nKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfVUxPTkc6CisJCQljYXNlIEZPUk1BVF9UWVBFX0xPTkc6CisJCQkJc2F2ZV9hcmcodW5zaWduZWQgbG9uZyk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZPUk1BVF9UWVBFX1NJWkVfVDoKKwkJCQlzYXZlX2FyZyhzaXplX3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9QVFJESUZGOgorCQkJCXNhdmVfYXJnKHB0cmRpZmZfdCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEZPUk1BVF9UWVBFX1VTSE9SVDoKKwkJCWNhc2UgRk9STUFUX1RZUEVfU0hPUlQ6CisJCQkJc2F2ZV9hcmcoc2hvcnQpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzYXZlX2FyZyhpbnQpOworCQkJfQorCQl9CisJfQorCXJldHVybiAodTMyICopKFBUUl9BTElHTihzdHIsIHNpemVvZih1MzIpKSkgLSBiaW5fYnVmOworCisjdW5kZWYgc2F2ZV9hcmcKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZiaW5fcHJpbnRmKTsKKworLyoqCisgKiBic3RyX3ByaW50ZiAtIEZvcm1hdCBhIHN0cmluZyBmcm9tIGJpbmFyeSBhcmd1bWVudHMgYW5kIHBsYWNlIGl0IGluIGEgYnVmZmVyCisgKiBAYnVmOiBUaGUgYnVmZmVyIHRvIHBsYWNlIHRoZSByZXN1bHQgaW50bworICogQHNpemU6IFRoZSBzaXplIG9mIHRoZSBidWZmZXIsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgbnVsbCBzcGFjZQorICogQGZtdDogVGhlIGZvcm1hdCBzdHJpbmcgdG8gdXNlCisgKiBAYmluX2J1ZjogQmluYXJ5IGFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzdHJpbmcKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGxpa2UgQzk5IHZzbnByaW50ZiwgYnV0IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgdnNucHJpbnRmIGdldHMKKyAqIGFyZ3VtZW50cyBmcm9tIHN0YWNrLCBhbmQgYnN0cl9wcmludGYgZ2V0cyBhcmd1bWVudHMgZnJvbSBAYmluX2J1ZiB3aGljaCBpcworICogYSBiaW5hcnkgYnVmZmVyIHRoYXQgZ2VuZXJhdGVkIGJ5IHZiaW5fcHJpbnRmLgorICoKKyAqIFRoZSBmb3JtYXQgZm9sbG93cyBDOTkgdnNucHJpbnRmLCBidXQgaGFzIHNvbWUgZXh0ZW5zaW9uczoKKyAqICVwUyBvdXRwdXQgdGhlIG5hbWUgb2YgYSB0ZXh0IHN5bWJvbAorICogJXBGIG91dHB1dCB0aGUgbmFtZSBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIKKyAqICVwUiBvdXRwdXQgdGhlIGFkZHJlc3MgcmFuZ2UgaW4gYSBzdHJ1Y3QgcmVzb3VyY2UKKyAqICVuIGlzIGlnbm9yZWQKKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aGljaCB3b3VsZAorICogYmUgZ2VuZXJhdGVkIGZvciB0aGUgZ2l2ZW4gaW5wdXQsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcKKyAqICdcMCcsIGFzIHBlciBJU08gQzk5LiBJZiB5b3Ugd2FudCB0byBoYXZlIHRoZSBleGFjdAorICogbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiBpbnRvIEBidWYgYXMgcmV0dXJuIHZhbHVlCisgKiAobm90IGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgJ1wwJyksIHVzZSB2c2NucHJpbnRmKCkuIElmIHRoZQorICogcmV0dXJuIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBAc2l6ZSwgdGhlIHJlc3VsdGluZworICogc3RyaW5nIGlzIHRydW5jYXRlZC4KKyAqLworaW50IGJzdHJfcHJpbnRmKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgdTMyICpiaW5fYnVmKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBudW07CisJY2hhciAqc3RyLCAqZW5kLCBjOworCWNvbnN0IGNoYXIgKmFyZ3MgPSAoY29uc3QgY2hhciAqKWJpbl9idWY7CisKKwlzdHJ1Y3QgcHJpbnRmX3NwZWMgc3BlYyA9IHswfTsKKworCWlmICh1bmxpa2VseSgoaW50KSBzaXplIDwgMCkpIHsKKwkJLyogVGhlcmUgY2FuIGJlIG9ubHkgb25lLi4gKi8KKwkJc3RhdGljIGNoYXIgd2FybiA9IDE7CisJCVdBUk5fT04od2Fybik7CisJCXdhcm4gPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlzdHIgPSBidWY7CisJZW5kID0gYnVmICsgc2l6ZTsKKworI2RlZmluZSBnZXRfYXJnKHR5cGUpCQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXR5cGVvZih0eXBlKSB2YWx1ZTsJCQkJCQlcCisJaWYgKHNpemVvZih0eXBlKSA9PSA4KSB7CQkJCQlcCisJCWFyZ3MgPSBQVFJfQUxJR04oYXJncywgc2l6ZW9mKHUzMikpOwkJCVwKKwkJKih1MzIgKikmdmFsdWUgPSAqKHUzMiAqKWFyZ3M7CQkJCVwKKwkJKigodTMyICopJnZhbHVlICsgMSkgPSAqKHUzMiAqKShhcmdzICsgNCk7CQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQlhcmdzID0gUFRSX0FMSUdOKGFyZ3MsIHNpemVvZih0eXBlKSk7CQkJXAorCQl2YWx1ZSA9ICoodHlwZW9mKHR5cGUpICopYXJnczsJCQkJXAorCX0JCQkJCQkJCVwKKwlhcmdzICs9IHNpemVvZih0eXBlKTsJCQkJCQlcCisJdmFsdWU7CQkJCQkJCQlcCit9KQorCisJLyogTWFrZSBzdXJlIGVuZCBpcyBhbHdheXMgPj0gYnVmICovCisJaWYgKGVuZCA8IGJ1ZikgeworCQllbmQgPSAoKHZvaWQgKiktMSk7CisJCXNpemUgPSBlbmQgLSBidWY7CisJfQorCisJd2hpbGUgKCpmbXQpIHsKKwkJaW50IHJlYWQ7CisJCWNvbnN0IGNoYXIgKm9sZF9mbXQgPSBmbXQ7CisKKwkJcmVhZCA9IGZvcm1hdF9kZWNvZGUoZm10LCAmc3BlYyk7CisKKwkJZm10ICs9IHJlYWQ7CisKKwkJc3dpdGNoIChzcGVjLnR5cGUpIHsKKwkJY2FzZSBGT1JNQVRfVFlQRV9OT05FOiB7CisJCQlpbnQgY29weSA9IHJlYWQ7CisJCQlpZiAoc3RyIDwgZW5kKSB7CisJCQkJaWYgKGNvcHkgPiBlbmQgLSBzdHIpCisJCQkJCWNvcHkgPSBlbmQgLSBzdHI7CisJCQkJbWVtY3B5KHN0ciwgb2xkX2ZtdCwgY29weSk7CisJCQl9CisJCQlzdHIgKz0gcmVhZDsKKwkJCWJyZWFrOworCQl9CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9XSURUSDoKKwkJCXNwZWMuZmllbGRfd2lkdGggPSBnZXRfYXJnKGludCk7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX1BSRUNJU0lPTjoKKwkJCXNwZWMucHJlY2lzaW9uID0gZ2V0X2FyZyhpbnQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9DSEFSOgorCQkJaWYgKCEoc3BlYy5mbGFncyAmIExFRlQpKSB7CisJCQkJd2hpbGUgKC0tc3BlYy5maWVsZF93aWR0aCA+IDApIHsKKwkJCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkJCSpzdHIgPSAnICc7CisJCQkJCSsrc3RyOworCQkJCX0KKwkJCX0KKwkJCWMgPSAodW5zaWduZWQgY2hhcikgZ2V0X2FyZyhjaGFyKTsKKwkJCWlmIChzdHIgPCBlbmQpCisJCQkJKnN0ciA9IGM7CisJCQkrK3N0cjsKKwkJCXdoaWxlICgtLXNwZWMuZmllbGRfd2lkdGggPiAwKSB7CisJCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkJKnN0ciA9ICcgJzsKKwkJCQkrK3N0cjsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfU1RSOiB7CisJCQljb25zdCBjaGFyICpzdHJfYXJnID0gYXJnczsKKwkJCXNpemVfdCBsZW4gPSBzdHJsZW4oc3RyX2FyZyk7CisJCQlhcmdzICs9IGxlbiArIDE7CisJCQlzdHIgPSBzdHJpbmcoc3RyLCBlbmQsIChjaGFyICopc3RyX2FyZywgc3BlYyk7CisJCQlicmVhazsKKwkJfQorCisJCWNhc2UgRk9STUFUX1RZUEVfUFRSOgorCQkJc3RyID0gcG9pbnRlcihmbXQrMSwgc3RyLCBlbmQsIGdldF9hcmcodm9pZCAqKSwgc3BlYyk7CisJCQl3aGlsZSAoaXNhbG51bSgqZm10KSkKKwkJCQlmbXQrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgRk9STUFUX1RZUEVfUEVSQ0VOVF9DSEFSOgorCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkqc3RyID0gJyUnOworCQkJKytzdHI7CisJCQlicmVhazsKKworCQljYXNlIEZPUk1BVF9UWVBFX0lOVkFMSUQ6CisJCQlpZiAoc3RyIDwgZW5kKQorCQkJCSpzdHIgPSAnJSc7CisJCQkrK3N0cjsKKwkJCWlmICgqZm10KSB7CisJCQkJaWYgKHN0ciA8IGVuZCkKKwkJCQkJKnN0ciA9ICpmbXQ7CisJCQkJKytzdHI7CisJCQl9IGVsc2UgeworCQkJCS0tZm10OworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBGT1JNQVRfVFlQRV9OUkNIQVJTOgorCQkJLyogc2tpcCAqLworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXN3aXRjaCAoc3BlYy50eXBlKSB7CisKKwkJCWNhc2UgRk9STUFUX1RZUEVfTE9OR19MT05HOgorCQkJCW51bSA9IGdldF9hcmcobG9uZyBsb25nKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfVUxPTkc6CisJCQkJbnVtID0gZ2V0X2FyZyh1bnNpZ25lZCBsb25nKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfTE9ORzoKKwkJCQludW0gPSBnZXRfYXJnKHVuc2lnbmVkIGxvbmcpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9TSVpFX1Q6CisJCQkJbnVtID0gZ2V0X2FyZyhzaXplX3QpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9QVFJESUZGOgorCQkJCW51bSA9IGdldF9hcmcocHRyZGlmZl90KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfVVNIT1JUOgorCQkJCW51bSA9IGdldF9hcmcodW5zaWduZWQgc2hvcnQpOworCQkJCWJyZWFrOworCQkJY2FzZSBGT1JNQVRfVFlQRV9TSE9SVDoKKwkJCQludW0gPSBnZXRfYXJnKHNob3J0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgRk9STUFUX1RZUEVfVUlOVDoKKwkJCQludW0gPSBnZXRfYXJnKHVuc2lnbmVkIGludCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW51bSA9IGdldF9hcmcoaW50KTsKKwkJCX0KKworCQkJc3RyID0gbnVtYmVyKHN0ciwgZW5kLCBudW0sIHNwZWMpOworCQl9CisJfQorCisJaWYgKHNpemUgPiAwKSB7CisJCWlmIChzdHIgPCBlbmQpCisJCQkqc3RyID0gJ1wwJzsKKwkJZWxzZQorCQkJZW5kWy0xXSA9ICdcMCc7CisJfQorCisjdW5kZWYgZ2V0X2FyZworCisJLyogdGhlIHRyYWlsaW5nIG51bGwgYnl0ZSBkb2Vzbid0IGNvdW50IHRvd2FyZHMgdGhlIHRvdGFsICovCisJcmV0dXJuIHN0ciAtIGJ1ZjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJzdHJfcHJpbnRmKTsKKworLyoqCisgKiBicHJpbnRmIC0gUGFyc2UgYSBmb3JtYXQgc3RyaW5nIGFuZCBwbGFjZSBhcmdzJyBiaW5hcnkgdmFsdWUgaW4gYSBidWZmZXIKKyAqIEBiaW5fYnVmOiBUaGUgYnVmZmVyIHRvIHBsYWNlIGFyZ3MnIGJpbmFyeSB2YWx1ZQorICogQHNpemU6IFRoZSBzaXplIG9mIHRoZSBidWZmZXIoYnkgd29yZHMoMzJiaXRzKSwgbm90IGNoYXJhY3RlcnMpCisgKiBAZm10OiBUaGUgZm9ybWF0IHN0cmluZyB0byB1c2UKKyAqIEAuLi46IEFyZ3VtZW50cyBmb3IgdGhlIGZvcm1hdCBzdHJpbmcKKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHdvcmRzKHUzMikgd3JpdHRlbgorICogaW50byBAYmluX2J1Zi4KKyAqLworaW50IGJwcmludGYodTMyICpiaW5fYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWludCByZXQ7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXJldCA9IHZiaW5fcHJpbnRmKGJpbl9idWYsIHNpemUsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChicHJpbnRmKTsKKworI2VuZGlmIC8qIENPTkZJR19CSU5BUllfUFJJTlRGICovCisKIC8qKgogICogdnNzY2FuZiAtIFVuZm9ybWF0IGEgYnVmZmVyIGludG8gYSBsaXN0IG9mIGFyZ3VtZW50cwogICogQGJ1ZjoJaW5wdXQgYnVmZmVyCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBhNWI3NzgxLi5iNTM0MjdhIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTIwNiw3ICsyMDYsNiBAQAogY29uZmlnIFVORVZJQ1RBQkxFX0xSVQogCWJvb2wgIkFkZCBMUlUgbGlzdCB0byB0cmFjayBub24tZXZpY3RhYmxlIHBhZ2VzIgogCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gTU1VCiAJaGVscAogCSAgS2VlcHMgdW5ldmljdGFibGUgcGFnZXMgb2ZmIG9mIHRoZSBhY3RpdmUgYW5kIGluYWN0aXZlIHBhZ2VvdXQKIAkgIGxpc3RzLCBzbyBrc3dhcGQgd2lsbCBub3Qgd2FzdGUgQ1BVIHRpbWUgb3IgaGF2ZSBpdHMgYmFsYW5jaW5nCkBAIC0yMTQsNSArMjEzLDEzIEBACiAJICB3aWxsIHVzZSBvbmUgcGFnZSBmbGFnIGFuZCBpbmNyZWFzZSB0aGUgY29kZSBzaXplIGEgbGl0dGxlLAogCSAgc2F5IFkgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KIAorY29uZmlnIEhBVkVfTUxPQ0sKKwlib29sCisJZGVmYXVsdCB5IGlmIE1NVT15CisKK2NvbmZpZyBIQVZFX01MT0NLRURfUEFHRV9CSVQKKwlib29sCisJZGVmYXVsdCB5IGlmIEhBVkVfTUxPQ0s9eSAmJiBVTkVWSUNUQUJMRV9MUlU9eQorCiBjb25maWcgTU1VX05PVElGSUVSCiAJYm9vbApkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZy5kZWJ1ZyBiL21tL0tjb25maWcuZGVidWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwMWUyOQotLS0gL2Rldi9udWxsCisrKyBiL21tL0tjb25maWcuZGVidWcKQEAgLTAsMCArMSwyNiBAQAorY29uZmlnIERFQlVHX1BBR0VBTExPQworCWJvb2wgIkRlYnVnIHBhZ2UgbWVtb3J5IGFsbG9jYXRpb25zIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCisJZGVwZW5kcyBvbiAhSElCRVJOQVRJT04gfHwgIVBQQyAmJiAhU1BBUkMKKwktLS1oZWxwLS0tCisJICBVbm1hcCBwYWdlcyBmcm9tIHRoZSBrZXJuZWwgbGluZWFyIG1hcHBpbmcgYWZ0ZXIgZnJlZV9wYWdlcygpLgorCSAgVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sIGJ1dCBoZWxwcyB0byBmaW5kIGNlcnRhaW4gdHlwZXMKKwkgIG9mIG1lbW9yeSBjb3JydXB0aW9ucy4KKworY29uZmlnIFdBTlRfUEFHRV9ERUJVR19GTEFHUworCWJvb2wKKworY29uZmlnIFBBR0VfUE9JU09OSU5HCisJYm9vbCAiRGVidWcgcGFnZSBtZW1vcnkgYWxsb2NhdGlvbnMiCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgIUFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCisJZGVwZW5kcyBvbiAhSElCRVJOQVRJT04KKwlzZWxlY3QgREVCVUdfUEFHRUFMTE9DCisJc2VsZWN0IFdBTlRfUEFHRV9ERUJVR19GTEFHUworCWhlbHAKKwkgICBGaWxsIHRoZSBwYWdlcyB3aXRoIHBvaXNvbiBwYXR0ZXJucyBhZnRlciBmcmVlX3BhZ2VzKCkgYW5kIHZlcmlmeQorCSAgIHRoZSBwYXR0ZXJucyBiZWZvcmUgYWxsb2NfcGFnZXMoKS4gVGhpcyByZXN1bHRzIGluIGEgbGFyZ2Ugc2xvd2Rvd24sCisJICAgYnV0IGhlbHBzIHRvIGZpbmQgY2VydGFpbiB0eXBlcyBvZiBtZW1vcnkgY29ycnVwdGlvbnMuCisKKwkgICBUaGlzIG9wdGlvbiBjYW5ub3QgZW5hbGJlIHdpdGggaGliZXJuYXRpb24uIE90aGVyd2lzZSwgaXQgd2lsbCBnZXQKKwkgICB3cm9uZyBtZXNzYWdlcyBmb3IgbWVtb3J5IGNvcnJ1cHRpb24gYmVjYXVzZSB0aGUgZnJlZSBwYWdlcyBhcmUgbm90CisJICAgc2F2ZWQgdG8gdGhlIHN1c3BlbmQgaW1hZ2UuCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IDgxODU2OWIuLmVjNzNjNjggMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCisrKyBiL21tL01ha2VmaWxlCkBAIC0yNCw2ICsyNCw3IEBACiBvYmotJChDT05GSUdfVE1QRlNfUE9TSVhfQUNMKSArPSBzaG1lbV9hY2wubwogb2JqLSQoQ09ORklHX1NMT0IpICs9IHNsb2Iubwogb2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgKz0gbW11X25vdGlmaWVyLm8KK29iai0kKENPTkZJR19QQUdFX1BPSVNPTklORykgKz0gZGVidWctcGFnZWFsbG9jLm8KIG9iai0kKENPTkZJR19TTEFCKSArPSBzbGFiLm8KIG9iai0kKENPTkZJR19TTFVCKSArPSBzbHViLm8KIG9iai0kKENPTkZJR19GQUlMU0xBQikgKz0gZmFpbHNsYWIubwpkaWZmIC0tZ2l0IGEvbW0vZGVidWctcGFnZWFsbG9jLmMgYi9tbS9kZWJ1Zy1wYWdlYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWUzMzI0Ci0tLSAvZGV2L251bGwKKysrIGIvbW0vZGVidWctcGFnZWFsbG9jLmMKQEAgLTAsMCArMSwxMjkgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZGVidWctZmxhZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2lzb24uaD4KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlfX3NldF9iaXQoUEFHRV9ERUJVR19GTEFHX1BPSVNPTiwgJnBhZ2UtPmRlYnVnX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3BhZ2VfcG9pc29uKHN0cnVjdCBwYWdlICpwYWdlKQoreworCV9fY2xlYXJfYml0KFBBR0VfREVCVUdfRkxBR19QT0lTT04sICZwYWdlLT5kZWJ1Z19mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwYWdlX3BvaXNvbihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoUEFHRV9ERUJVR19GTEFHX1BPSVNPTiwgJnBhZ2UtPmRlYnVnX2ZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgcG9pc29uX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCS8qCisJICogUGFnZSBwb2lzb25pbmcgZm9yIGhpZ2htZW0gcGFnZXMgaXMgbm90IGltcGxlbWVudGVkLgorCSAqCisJICogVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHRzLgorCSAqIFNvIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGttYXBfYXRvbWljIHNsb3QgZm9yIHRoaXMKKwkgKiBhcHBsaWNhdGlvbiBhbmQgaXQgd2lsbCBuZWVkIGludGVycnVwdCBwcm90ZWN0aW9uLgorCSAqLworfQorCitzdGF0aWMgdm9pZCBwb2lzb25fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl2b2lkICphZGRyOworCisJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKSB7CisJCXBvaXNvbl9oaWdocGFnZShwYWdlKTsKKwkJcmV0dXJuOworCX0KKwlzZXRfcGFnZV9wb2lzb24ocGFnZSk7CisJYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwltZW1zZXQoYWRkciwgUEFHRV9QT0lTT04sIFBBR0VfU0laRSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvaXNvbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlwb2lzb25fcGFnZShwYWdlICsgaSk7Cit9CisKK3N0YXRpYyBib29sIHNpbmdsZV9iaXRfZmxpcCh1bnNpZ25lZCBjaGFyIGEsIHVuc2lnbmVkIGNoYXIgYikKK3sKKwl1bnNpZ25lZCBjaGFyIGVycm9yID0gYSBeIGI7CisKKwlyZXR1cm4gZXJyb3IgJiYgIShlcnJvciAmIChlcnJvciAtIDEpKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfcG9pc29uX21lbSh1bnNpZ25lZCBjaGFyICptZW0sIHNpemVfdCBieXRlcykKK3sKKwl1bnNpZ25lZCBjaGFyICpzdGFydDsKKwl1bnNpZ25lZCBjaGFyICplbmQ7CisKKwlmb3IgKHN0YXJ0ID0gbWVtOyBzdGFydCA8IG1lbSArIGJ5dGVzOyBzdGFydCsrKSB7CisJCWlmICgqc3RhcnQgIT0gUEFHRV9QT0lTT04pCisJCQlicmVhazsKKwl9CisJaWYgKHN0YXJ0ID09IG1lbSArIGJ5dGVzKQorCQlyZXR1cm47CisKKwlmb3IgKGVuZCA9IG1lbSArIGJ5dGVzIC0gMTsgZW5kID4gc3RhcnQ7IGVuZC0tKSB7CisJCWlmICgqZW5kICE9IFBBR0VfUE9JU09OKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFwcmludGtfcmF0ZWxpbWl0KCkpCisJCXJldHVybjsKKwllbHNlIGlmIChzdGFydCA9PSBlbmQgJiYgc2luZ2xlX2JpdF9mbGlwKCpzdGFydCwgUEFHRV9QT0lTT04pKQorCQlwcmludGsoS0VSTl9FUlIgInBhZ2VhbGxvYzogc2luZ2xlIGJpdCBlcnJvclxuIik7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgInBhZ2VhbGxvYzogbWVtb3J5IGNvcnJ1cHRpb25cbiIpOworCisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICIiLCBEVU1QX1BSRUZJWF9BRERSRVNTLCAxNiwgMSwgc3RhcnQsCisJCQllbmQgLSBzdGFydCArIDEsIDEpOworCWR1bXBfc3RhY2soKTsKK30KKworc3RhdGljIHZvaWQgdW5wb2lzb25faGlnaHBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJLyoKKwkgKiBTZWUgY29tbWVudCBpbiBwb2lzb25faGlnaHBhZ2UoKS4KKwkgKiBIaWdobWVtIHBhZ2VzIHNob3VsZCBub3QgYmUgcG9pc29uZWQgZm9yIG5vdworCSAqLworCUJVR19PTihwYWdlX3BvaXNvbihwYWdlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHVucG9pc29uX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKSB7CisJCXVucG9pc29uX2hpZ2hwYWdlKHBhZ2UpOworCQlyZXR1cm47CisJfQorCWlmIChwYWdlX3BvaXNvbihwYWdlKSkgeworCQl2b2lkICphZGRyID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCisJCWNoZWNrX3BvaXNvbl9tZW0oYWRkciwgUEFHRV9TSVpFKTsKKwkJY2xlYXJfcGFnZV9wb2lzb24ocGFnZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1bnBvaXNvbl9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQl1bnBvaXNvbl9wYWdlKHBhZ2UgKyBpKTsKK30KKwordm9pZCBrZXJuZWxfbWFwX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpCit7CisJaWYgKCFkZWJ1Z19wYWdlYWxsb2NfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGVuYWJsZSkKKwkJdW5wb2lzb25fcGFnZXMocGFnZSwgbnVtcGFnZXMpOworCWVsc2UKKwkJcG9pc29uX3BhZ2VzKHBhZ2UsIG51bXBhZ2VzKTsKK30KZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCAxMjZkMzk3Li4yZTJkMzhlIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC01MTMsNiArNTEzLDcgQEAKIAl9CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGFkZF90b19wYWdlX2NhY2hlX2xydSk7CiAKICNpZmRlZiBDT05GSUdfTlVNQQogc3RydWN0IHBhZ2UgKl9fcGFnZV9jYWNoZV9hbGxvYyhnZnBfdCBnZnApCkBAIC01NjUsNiArNTY2LDI0IEBACiBFWFBPUlRfU1lNQk9MKHdhaXRfb25fcGFnZV9iaXQpOwogCiAvKioKKyAqIGFkZF9wYWdlX3dhaXRfcXVldWUgLSBBZGQgYW4gYXJiaXRyYXJ5IHdhaXRlciB0byBhIHBhZ2UncyB3YWl0IHF1ZXVlCisgKiBAcGFnZSAtIFBhZ2UgZGVmaW5pbmcgdGhlIHdhaXQgcXVldWUgb2YgaW50ZXJlc3QKKyAqIEB3YWl0ZXIgLSBXYWl0ZXIgdG8gYWRkIHRvIHRoZSBxdWV1ZQorICoKKyAqIEFkZCBhbiBhcmJpdHJhcnkgQHdhaXRlciB0byB0aGUgd2FpdCBxdWV1ZSBmb3IgdGhlIG5vbWluYXRlZCBAcGFnZS4KKyAqLwordm9pZCBhZGRfcGFnZV93YWl0X3F1ZXVlKHN0cnVjdCBwYWdlICpwYWdlLCB3YWl0X3F1ZXVlX3QgKndhaXRlcikKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqcSA9IHBhZ2Vfd2FpdHF1ZXVlKHBhZ2UpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOworCV9fYWRkX3dhaXRfcXVldWUocSwgd2FpdGVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhZGRfcGFnZV93YWl0X3F1ZXVlKTsKKworLyoqCiAgKiB1bmxvY2tfcGFnZSAtIHVubG9jayBhIGxvY2tlZCBwYWdlCiAgKiBAcGFnZTogdGhlIHBhZ2UKICAqCkBAIC02MjcsNiArNjQ2LDcgQEAKIAlyZXR1cm4gX193YWl0X29uX2JpdF9sb2NrKHBhZ2Vfd2FpdHF1ZXVlKHBhZ2UpLCAmd2FpdCwKIAkJCQkJc3luY19wYWdlX2tpbGxhYmxlLCBUQVNLX0tJTExBQkxFKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fbG9ja19wYWdlX2tpbGxhYmxlKTsKIAogLyoqCiAgKiBfX2xvY2tfcGFnZV9ub3N5bmMgLSBnZXQgYSBsb2NrIG9uIHRoZSBwYWdlLCB3aXRob3V0IGNhbGxpbmcgc3luY19wYWdlKCkKQEAgLTI0NjMsNiArMjQ4Myw5IEBACiAgKiAocHJlc3VtYWJseSBhdCBwYWdlLT5wcml2YXRlKS4gIElmIHRoZSByZWxlYXNlIHdhcyBzdWNjZXNzZnVsLCByZXR1cm4gYDEnLgogICogT3RoZXJ3aXNlIHJldHVybiB6ZXJvLgogICoKKyAqIFRoaXMgbWF5IGFsc28gYmUgY2FsbGVkIGlmIFBHX2ZzY2FjaGUgaXMgc2V0IG9uIGEgcGFnZSwgaW5kaWNhdGluZyB0aGF0IHRoZQorICogcGFnZSBpcyBrbm93biB0byB0aGUgbG9jYWwgY2FjaGluZyByb3V0aW5lcy4KKyAqCiAgKiBUaGUgQGdmcF9tYXNrIGFyZ3VtZW50IHNwZWNpZmllcyB3aGV0aGVyIEkvTyBtYXkgYmUgcGVyZm9ybWVkIHRvIHJlbGVhc2UKICAqIHRoaXMgcGFnZSAoX19HRlBfSU8pLCBhbmQgd2hldGhlciB0aGUgY2FsbCBtYXkgYmxvY2sgKF9fR0ZQX1dBSVQgJiBfX0dGUF9GUykuCiAgKgpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcF94aXAuYyBiL21tL2ZpbGVtYXBfeGlwLmMKaW5kZXggMGMwNDYxNS4uNDI3ZGZlMyAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcF94aXAuYworKysgYi9tbS9maWxlbWFwX3hpcC5jCkBAIC04OSw4ICs4OSw4IEBACiAJCQl9CiAJCX0KIAkJbnIgPSBuciAtIG9mZnNldDsKLQkJaWYgKG5yID4gbGVuKQotCQkJbnIgPSBsZW47CisJCWlmIChuciA+IGxlbiAtIGNvcGllZCkKKwkJCW5yID0gbGVuIC0gY29waWVkOwogCiAJCWVycm9yID0gbWFwcGluZy0+YV9vcHMtPmdldF94aXBfbWVtKG1hcHBpbmcsIGluZGV4LCAwLAogCQkJCQkJCSZ4aXBfbWVtLCAmeGlwX3Bmbik7CmRpZmYgLS1naXQgYS9tbS9oaWdobWVtLmMgYi9tbS9oaWdobWVtLmMKaW5kZXggOTEwMTk4MC4uNjhlYjFkOSAxMDA2NDQKLS0tIGEvbW0vaGlnaG1lbS5jCisrKyBiL21tL2hpZ2htZW0uYwpAQCAtNDIyLDMgKzQyMiw0OCBAQAogfQogCiAjZW5kaWYJLyogZGVmaW5lZChDT05GSUdfSElHSE1FTSkgJiYgIWRlZmluZWQoV0FOVF9QQUdFX1ZJUlRVQUwpICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19ISUdITUVNKSAmJiBkZWZpbmVkKENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUKQorCit2b2lkIGRlYnVnX2ttYXBfYXRvbWljKGVudW0ga21fdHlwZSB0eXBlKQoreworCXN0YXRpYyB1bnNpZ25lZCB3YXJuX2NvdW50ID0gMTA7CisKKwlpZiAodW5saWtlbHkod2Fybl9jb3VudCA9PSAwKSkKKwkJcmV0dXJuOworCisJaWYgKHVubGlrZWx5KGluX2ludGVycnVwdCgpKSkgeworCQlpZiAoaW5faXJxKCkpIHsKKwkJCWlmICh0eXBlICE9IEtNX0lSUTAgJiYgdHlwZSAhPSBLTV9JUlExICYmCisJCQkgICAgdHlwZSAhPSBLTV9CSU9fU1JDX0lSUSAmJiB0eXBlICE9IEtNX0JJT19EU1RfSVJRICYmCisJCQkgICAgdHlwZSAhPSBLTV9CT1VOQ0VfUkVBRCkgeworCQkJCVdBUk5fT04oMSk7CisJCQkJd2Fybl9jb3VudC0tOworCQkJfQorCQl9IGVsc2UgaWYgKCFpcnFzX2Rpc2FibGVkKCkpIHsJLyogc29mdGlycSAqLworCQkJaWYgKHR5cGUgIT0gS01fSVJRMCAmJiB0eXBlICE9IEtNX0lSUTEgJiYKKwkJCSAgICB0eXBlICE9IEtNX1NPRlRJUlEwICYmIHR5cGUgIT0gS01fU09GVElSUTEgJiYKKwkJCSAgICB0eXBlICE9IEtNX1NLQl9TVU5SUENfREFUQSAmJgorCQkJICAgIHR5cGUgIT0gS01fU0tCX0RBVEFfU09GVElSUSAmJgorCQkJICAgIHR5cGUgIT0gS01fQk9VTkNFX1JFQUQpIHsKKwkJCQlXQVJOX09OKDEpOworCQkJCXdhcm5fY291bnQtLTsKKwkJCX0KKwkJfQorCX0KKworCWlmICh0eXBlID09IEtNX0lSUTAgfHwgdHlwZSA9PSBLTV9JUlExIHx8IHR5cGUgPT0gS01fQk9VTkNFX1JFQUQgfHwKKwkJCXR5cGUgPT0gS01fQklPX1NSQ19JUlEgfHwgdHlwZSA9PSBLTV9CSU9fRFNUX0lSUSkgeworCQlpZiAoIWlycXNfZGlzYWJsZWQoKSkgeworCQkJV0FSTl9PTigxKTsKKwkJCXdhcm5fY291bnQtLTsKKwkJfQorCX0gZWxzZSBpZiAodHlwZSA9PSBLTV9TT0ZUSVJRMCB8fCB0eXBlID09IEtNX1NPRlRJUlExKSB7CisJCWlmIChpcnFfY291bnQoKSA9PSAwICYmICFpcnFzX2Rpc2FibGVkKCkpIHsKKwkJCVdBUk5fT04oMSk7CisJCQl3YXJuX2NvdW50LS07CisJCX0KKwl9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IDEwN2RhM2QuLjI4YzY1NWIgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTkxOCw3ICs5MTgsNyBAQAogICogYW4gaW5zdGFudGlhdGVkIHRoZSBjaGFuZ2Ugc2hvdWxkIGJlIGNvbW1pdHRlZCB2aWEgdm1hX2NvbW1pdF9yZXNlcnZhdGlvbi4KICAqIE5vIGFjdGlvbiBpcyByZXF1aXJlZCBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgaW50IHZtYV9uZWVkc19yZXNlcnZhdGlvbihzdHJ1Y3QgaHN0YXRlICpoLAorc3RhdGljIGxvbmcgdm1hX25lZWRzX3Jlc2VydmF0aW9uKHN0cnVjdCBoc3RhdGUgKmgsCiAJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7CkBAIC05MzMsNyArOTMzLDcgQEAKIAkJcmV0dXJuIDE7CiAKIAl9IGVsc2UgIHsKLQkJaW50IGVycjsKKwkJbG9uZyBlcnI7CiAJCXBnb2ZmX3QgaWR4ID0gdm1hX2h1Z2VjYWNoZV9vZmZzZXQoaCwgdm1hLCBhZGRyKTsKIAkJc3RydWN0IHJlc3ZfbWFwICpyZXNlcnZhdGlvbnMgPSB2bWFfcmVzdl9tYXAodm1hKTsKIApAQCAtOTY5LDcgKzk2OSw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKLQl1bnNpZ25lZCBpbnQgY2hnOworCWxvbmcgY2hnOwogCiAJLyoKIAkgKiBQcm9jZXNzZXMgdGhhdCBkaWQgbm90IGNyZWF0ZSB0aGUgbWFwcGluZyB3aWxsIGhhdmUgbm8gcmVzZXJ2ZXMgYW5kCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCA0NzgyMjNiLi45ODdiYjAzIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCisrKyBiL21tL2ludGVybmFsLmgKQEAgLTYzLDYgKzYzLDcgQEAKIAlyZXR1cm4gcGFnZV9wcml2YXRlKHBhZ2UpOwogfQogCisjaWZkZWYgQ09ORklHX0hBVkVfTUxPQ0sKIGV4dGVybiBsb25nIG1sb2NrX3ZtYV9wYWdlc19yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiB2b2lkIG11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApAQCAtNzEsNiArNzIsNyBAQAogewogCW11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOwogfQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCiAvKgpAQCAtOTAsNyArOTIsNyBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfVU5FVklDVEFCTEVfTFJVCisjaWZkZWYgQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVAogLyoKICAqIENhbGxlZCBvbmx5IGluIGZhdWx0IHBhdGggdmlhIHBhZ2VfZXZpY3RhYmxlKCkgZm9yIGEgbmV3IHBhZ2UKICAqIHRvIGRldGVybWluZSBpZiBpdCdzIGJlaW5nIG1hcHBlZCBpbnRvIGEgTE9DS0VEIHZtYS4KQEAgLTE2NSw3ICsxNjcsNyBAQAogCX0KIH0KIAotI2Vsc2UgLyogQ09ORklHX1VORVZJQ1RBQkxFX0xSVSAqLworI2Vsc2UgLyogQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVCAqLwogc3RhdGljIGlubGluZSBpbnQgaXNfbWxvY2tlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2LCBzdHJ1Y3QgcGFnZSAqcCkKIHsKIAlyZXR1cm4gMDsKQEAgLTE3NSw3ICsxNzcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIG1sb2NrX21pZ3JhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqbmV3LCBzdHJ1Y3QgcGFnZSAqb2xkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3BhZ2VfbWxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpIHsgfQogCi0jZW5kaWYgLyogQ09ORklHX1VORVZJQ1RBQkxFX0xSVSAqLworI2VuZGlmIC8qIENPTkZJR19IQVZFX01MT0NLRURfUEFHRV9CSVQgKi8KIAogLyoKICAqIFJldHVybiB0aGUgbWVtX21hcCBlbnRyeSByZXByZXNlbnRpbmcgdGhlICdvZmZzZXQnIHN1YnBhZ2Ugd2l0aGluCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggOGU0YmU5Yy4uMmZjNmQ2YyAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0X3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CkBAIC05NSw2ICs5NiwxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBzNjQgbWVtX2Nncm91cF9sb2NhbF91c2FnZShzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0ICpzdGF0KQoreworCXM2NCByZXQ7CisKKwlyZXQgPSBtZW1fY2dyb3VwX3JlYWRfc3RhdChzdGF0LCBNRU1fQ0dST1VQX1NUQVRfQ0FDSEUpOworCXJldCArPSBtZW1fY2dyb3VwX3JlYWRfc3RhdChzdGF0LCBNRU1fQ0dST1VQX1NUQVRfUlNTKTsKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogcGVyLXpvbmUgaW5mb3JtYXRpb24gaW4gbWVtb3J5IGNvbnRyb2xsZXIuCiAgKi8KQEAgLTE1NCw5ICsxNjQsOSBAQAogCiAJLyoKIAkgKiBXaGlsZSByZWNsYWltaW5nIGluIGEgaGllYXJjaHksIHdlIGNhY2hlIHRoZSBsYXN0IGNoaWxkIHdlCi0JICogcmVjbGFpbWVkIGZyb20uIFByb3RlY3RlZCBieSBoaWVyYXJjaHlfbXV0ZXgKKwkgKiByZWNsYWltZWQgZnJvbS4KIAkgKi8KLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbGFzdF9zY2FubmVkX2NoaWxkOworCWludCBsYXN0X3NjYW5uZWRfY2hpbGQ7CiAJLyoKIAkgKiBTaG91bGQgdGhlIGFjY291bnRpbmcgYW5kIGNvbnRyb2wgYmUgaGllcmFyY2hpY2FsLCBwZXIgc3VidHJlZT8KIAkgKi8KQEAgLTI0Nyw3ICsyNTcsNyBAQAogCXJldHVybiBtZW1fY2dyb3VwX3pvbmVpbmZvKG1lbSwgbmlkLCB6aWQpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3pvbmVzdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiAJCQkJCWVudW0gbHJ1X2xpc3QgaWR4KQogewogCWludCBuaWQsIHppZDsKQEAgLTI4Niw2ICsyOTYsOSBAQAogc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICp0cnlfZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtID0gTlVMTDsKKworCWlmICghbW0pCisJCXJldHVybiBOVUxMOwogCS8qCiAJICogQmVjYXVzZSB3ZSBoYXZlIG5vIGxvY2tzLCBtbS0+b3duZXIncyBtYXkgYmUgYmVpbmcgbW92ZWQgdG8gb3RoZXIKIAkgKiBjZ3JvdXAuIFdlIHVzZSBjc3NfdHJ5Z2V0KCkgaGVyZSBldmVuIGlmIHRoaXMgbG9va3MKQEAgLTMwOCw2ICszMjEsNDIgQEAKIAlyZXR1cm4gY3NzX2lzX3JlbW92ZWQoJm1lbS0+Y3NzKTsKIH0KIAorCisvKgorICogQ2FsbCBjYWxsYmFjayBmdW5jdGlvbiBhZ2FpbnN0IGFsbCBjZ3JvdXAgdW5kZXIgaGllcmFyY2h5IHRyZWUuCisgKi8KK3N0YXRpYyBpbnQgbWVtX2Nncm91cF93YWxrX3RyZWUoc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3QsIHZvaWQgKmRhdGEsCisJCQkgIGludCAoKmZ1bmMpKHN0cnVjdCBtZW1fY2dyb3VwICosIHZvaWQgKikpCit7CisJaW50IGZvdW5kLCByZXQsIG5leHRpZDsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW07CisKKwlpZiAoIXJvb3QtPnVzZV9oaWVyYXJjaHkpCisJCXJldHVybiAoKmZ1bmMpKHJvb3QsIGRhdGEpOworCisJbmV4dGlkID0gMTsKKwlkbyB7CisJCXJldCA9IDA7CisJCW1lbSA9IE5VTEw7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQljc3MgPSBjc3NfZ2V0X25leHQoJm1lbV9jZ3JvdXBfc3Vic3lzLCBuZXh0aWQsICZyb290LT5jc3MsCisJCQkJICAgJmZvdW5kKTsKKwkJaWYgKGNzcyAmJiBjc3NfdHJ5Z2V0KGNzcykpCisJCQltZW0gPSBjb250YWluZXJfb2YoY3NzLCBzdHJ1Y3QgbWVtX2Nncm91cCwgY3NzKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJaWYgKG1lbSkgeworCQkJcmV0ID0gKCpmdW5jKShtZW0sIGRhdGEpOworCQkJY3NzX3B1dCgmbWVtLT5jc3MpOworCQl9CisJCW5leHRpZCA9IGZvdW5kICsgMTsKKwl9IHdoaWxlICghcmV0ICYmIGNzcyk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogRm9sbG93aW5nIExSVSBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZCB3aXRob3V0IFBDR19MT0NLLgogICogT3BlcmF0aW9ucyBhcmUgY2FsbGVkIGJ5IHJvdXRpbmUgb2YgZ2xvYmFsIExSVSBpbmRlcGVuZGVudGx5IGZyb20gbWVtY2cuCkBAIC00NDEsMzEgKzQ5MCwyNCBAQAogaW50IHRhc2tfaW5fbWVtX2Nncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNvbnN0IHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqY3VyciA9IE5VTEw7CiAKIAl0YXNrX2xvY2sodGFzayk7Ci0JcmV0ID0gdGFzay0+bW0gJiYgbW1fbWF0Y2hfY2dyb3VwKHRhc2stPm1tLCBtZW0pOworCXJjdV9yZWFkX2xvY2soKTsKKwljdXJyID0gdHJ5X2dldF9tZW1fY2dyb3VwX2Zyb21fbW0odGFzay0+bW0pOworCXJjdV9yZWFkX3VubG9jaygpOwogCXRhc2tfdW5sb2NrKHRhc2spOworCWlmICghY3VycikKKwkJcmV0dXJuIDA7CisJaWYgKGN1cnItPnVzZV9oaWVyYXJjaHkpCisJCXJldCA9IGNzc19pc19hbmNlc3RvcigmY3Vyci0+Y3NzLCAmbWVtLT5jc3MpOworCWVsc2UKKwkJcmV0ID0gKGN1cnIgPT0gbWVtKTsKKwljc3NfcHV0KCZjdXJyLT5jc3MpOwogCXJldHVybiByZXQ7CiB9CiAKIC8qCi0gKiBDYWxjdWxhdGUgbWFwcGVkX3JhdGlvIHVuZGVyIG1lbW9yeSBjb250cm9sbGVyLiBUaGlzIHdpbGwgYmUgdXNlZCBpbgotICogdm1zY2FuLmMgZm9yIGRldGVyZW1pbmluZyB3ZSBoYXZlIHRvIHJlY2xhaW0gbWFwcGVkIHBhZ2VzLgotICovCi1pbnQgbWVtX2Nncm91cF9jYWxjX21hcHBlZF9yYXRpbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQotewotCWxvbmcgdG90YWwsIHJzczsKLQotCS8qCi0JICogdXNhZ2UgaXMgcmVjb3JkZWQgaW4gYnl0ZXMuIEJ1dCwgaGVyZSwgd2UgYXNzdW1lIHRoZSBudW1iZXIgb2YKLQkgKiBwaHlzaWNhbCBwYWdlcyBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgImxvbmciIG9uIGFueSBhcmNoLgotCSAqLwotCXRvdGFsID0gKGxvbmcpIChtZW0tPnJlcy51c2FnZSA+PiBQQUdFX1NISUZUKSArIDFMOwotCXJzcyA9IChsb25nKW1lbV9jZ3JvdXBfcmVhZF9zdGF0KCZtZW0tPnN0YXQsIE1FTV9DR1JPVVBfU1RBVF9SU1MpOwotCXJldHVybiAoaW50KSgocnNzICogMTAwTCkgLyB0b3RhbCk7Ci19Ci0KLS8qCiAgKiBwcmV2X3ByaW9yaXR5IGNvbnRyb2wuLi50aGlzIHdpbGwgYmUgdXNlZCBpbiBtZW1vcnkgcmVjbGFpbSBwYXRoLgogICovCiBpbnQgbWVtX2Nncm91cF9nZXRfcmVjbGFpbV9wcmlvcml0eShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQpAQCAtNTAxLDggKzU0Myw4IEBACiAJdW5zaWduZWQgbG9uZyBnYjsKIAl1bnNpZ25lZCBsb25nIGluYWN0aXZlX3JhdGlvOwogCi0JaW5hY3RpdmUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtY2csIExSVV9JTkFDVElWRV9BTk9OKTsKLQlhY3RpdmUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtY2csIExSVV9BQ1RJVkVfQU5PTik7CisJaW5hY3RpdmUgPSBtZW1fY2dyb3VwX2dldF9sb2NhbF96b25lc3RhdChtZW1jZywgTFJVX0lOQUNUSVZFX0FOT04pOworCWFjdGl2ZSA9IG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3pvbmVzdGF0KG1lbWNnLCBMUlVfQUNUSVZFX0FOT04pOwogCiAJZ2IgPSAoaW5hY3RpdmUgKyBhY3RpdmUpID4+ICgzMCAtIFBBR0VfU0hJRlQpOwogCWlmIChnYikKQEAgLTYyOSwxMDMgKzY3MSw2IEBACiAjZGVmaW5lIG1lbV9jZ3JvdXBfZnJvbV9yZXNfY291bnRlcihjb3VudGVyLCBtZW1iZXIpCVwKIAljb250YWluZXJfb2YoY291bnRlciwgc3RydWN0IG1lbV9jZ3JvdXAsIG1lbWJlcikKIAotLyoKLSAqIFRoaXMgcm91dGluZSBmaW5kcyB0aGUgREZTIHdhbGsgc3VjY2Vzc29yLiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlCi0gKiBjYWxsZWQgd2l0aCBoaWVyYXJjaHlfbXV0ZXggaGVsZAotICovCi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKgotX19tZW1fY2dyb3VwX2dldF9uZXh0X25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKmN1cnIsIHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbSkKLXsKLQlzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsICpjdXJyX2Nncm91cCwgKnJvb3RfY2dyb3VwOwotCi0JY3Vycl9jZ3JvdXAgPSBjdXJyLT5jc3MuY2dyb3VwOwotCXJvb3RfY2dyb3VwID0gcm9vdF9tZW0tPmNzcy5jZ3JvdXA7Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJmN1cnJfY2dyb3VwLT5jaGlsZHJlbikpIHsKLQkJLyoKLQkJICogV2FsayBkb3duIHRvIGNoaWxkcmVuCi0JCSAqLwotCQljZ3JvdXAgPSBsaXN0X2VudHJ5KGN1cnJfY2dyb3VwLT5jaGlsZHJlbi5uZXh0LAotCQkJCQkJc3RydWN0IGNncm91cCwgc2libGluZyk7Ci0JCWN1cnIgPSBtZW1fY2dyb3VwX2Zyb21fY29udChjZ3JvdXApOwotCQlnb3RvIGRvbmU7Ci0JfQotCi12aXNpdF9wYXJlbnQ6Ci0JaWYgKGN1cnJfY2dyb3VwID09IHJvb3RfY2dyb3VwKSB7Ci0JCS8qIGNhbGxlciBoYW5kbGVzIE5VTEwgY2FzZSAqLwotCQljdXJyID0gTlVMTDsKLQkJZ290byBkb25lOwotCX0KLQotCS8qCi0JICogR290byBuZXh0IHNpYmxpbmcKLQkgKi8KLQlpZiAoY3Vycl9jZ3JvdXAtPnNpYmxpbmcubmV4dCAhPSAmY3Vycl9jZ3JvdXAtPnBhcmVudC0+Y2hpbGRyZW4pIHsKLQkJY2dyb3VwID0gbGlzdF9lbnRyeShjdXJyX2Nncm91cC0+c2libGluZy5uZXh0LCBzdHJ1Y3QgY2dyb3VwLAotCQkJCQkJc2libGluZyk7Ci0JCWN1cnIgPSBtZW1fY2dyb3VwX2Zyb21fY29udChjZ3JvdXApOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JLyoKLQkgKiBHbyB1cCB0byBuZXh0IHBhcmVudCBhbmQgbmV4dCBwYXJlbnQncyBzaWJsaW5nIGlmIG5lZWQgYmUKLQkgKi8KLQljdXJyX2Nncm91cCA9IGN1cnJfY2dyb3VwLT5wYXJlbnQ7Ci0JZ290byB2aXNpdF9wYXJlbnQ7Ci0KLWRvbmU6Ci0JcmV0dXJuIGN1cnI7Ci19Ci0KLS8qCi0gKiBWaXNpdCB0aGUgZmlyc3QgY2hpbGQgKG5lZWQgbm90IGJlIHRoZSBmaXJzdCBjaGlsZCBhcyBwZXIgdGhlIG9yZGVyaW5nCi0gKiBvZiB0aGUgY2dyb3VwIGxpc3QsIHNpbmNlIHdlIHRyYWNrIGxhc3Rfc2Nhbm5lZF9jaGlsZCkgb2YgQG1lbSBhbmQgdXNlCi0gKiB0aGF0IHRvIHJlY2xhaW0gZnJlZSBwYWdlcyBmcm9tLgotICovCi1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKgotbWVtX2Nncm91cF9nZXRfbmV4dF9ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbSkKLXsKLQlzdHJ1Y3QgY2dyb3VwICpjZ3JvdXA7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm9yaWcsICpuZXh0OwotCWJvb2wgb2Jzb2xldGU7Ci0KLQkvKgotCSAqIFNjYW4gYWxsIGNoaWxkcmVuIHVuZGVyIHRoZSBtZW1fY2dyb3VwIG1lbQotCSAqLwotCW11dGV4X2xvY2soJm1lbV9jZ3JvdXBfc3Vic3lzLmhpZXJhcmNoeV9tdXRleCk7Ci0KLQlvcmlnID0gcm9vdF9tZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZDsKLQlvYnNvbGV0ZSA9IG1lbV9jZ3JvdXBfaXNfb2Jzb2xldGUob3JpZyk7Ci0KLQlpZiAobGlzdF9lbXB0eSgmcm9vdF9tZW0tPmNzcy5jZ3JvdXAtPmNoaWxkcmVuKSkgewotCQkvKgotCQkgKiByb290X21lbSBtaWdodCBoYXZlIGNoaWxkcmVuIGJlZm9yZSBhbmQgbGFzdF9zY2FubmVkX2NoaWxkCi0JCSAqIG1heSBwb2ludCB0byBvbmUgb2YgdGhlbS4gV2UgcHV0IGl0IGxhdGVyLgotCQkgKi8KLQkJaWYgKG9yaWcpCi0JCQlWTV9CVUdfT04oIW9ic29sZXRlKTsKLQkJbmV4dCA9IE5VTEw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAoIW9yaWcgfHwgb2Jzb2xldGUpIHsKLQkJY2dyb3VwID0gbGlzdF9maXJzdF9lbnRyeSgmcm9vdF9tZW0tPmNzcy5jZ3JvdXAtPmNoaWxkcmVuLAotCQkJCXN0cnVjdCBjZ3JvdXAsIHNpYmxpbmcpOwotCQluZXh0ID0gbWVtX2Nncm91cF9mcm9tX2NvbnQoY2dyb3VwKTsKLQl9IGVsc2UKLQkJbmV4dCA9IF9fbWVtX2Nncm91cF9nZXRfbmV4dF9ub2RlKG9yaWcsIHJvb3RfbWVtKTsKLQotZG9uZToKLQlpZiAobmV4dCkKLQkJbWVtX2Nncm91cF9nZXQobmV4dCk7Ci0Jcm9vdF9tZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IG5leHQ7Ci0JaWYgKG9yaWcpCi0JCW1lbV9jZ3JvdXBfcHV0KG9yaWcpOwotCW11dGV4X3VubG9jaygmbWVtX2Nncm91cF9zdWJzeXMuaGllcmFyY2h5X211dGV4KTsKLQlyZXR1cm4gKG5leHQpID8gbmV4dCA6IHJvb3RfbWVtOwotfQotCiBzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX2NoZWNrX3VuZGVyX2xpbWl0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiB7CiAJaWYgKGRvX3N3YXBfYWNjb3VudCkgewpAQCAtNzU0LDQ3ICs2OTksMTc0IEBACiAJcmV0dXJuIHN3YXBwaW5lc3M7CiB9CiAKLS8qCi0gKiBEYW5jZSBkb3duIHRoZSBoaWVyYXJjaHkgaWYgbmVlZGVkIHRvIHJlY2xhaW0gbWVtb3J5LiBXZSByZW1lbWJlciB0aGUKLSAqIGxhc3QgY2hpbGQgd2UgcmVjbGFpbWVkIGZyb20sIHNvIHRoYXQgd2UgZG9uJ3QgZW5kIHVwIHBlbmFsaXppbmcKLSAqIG9uZSBjaGlsZCBleHRlbnNpdmVseSBiYXNlZCBvbiBpdHMgcG9zaXRpb24gaW4gdGhlIGNoaWxkcmVuIGxpc3QuCi0gKgotICogcm9vdF9tZW0gaXMgdGhlIG9yaWdpbmFsIGFuY2VzdG9yIHRoYXQgd2UndmUgYmVlbiByZWNsYWltIGZyb20uCi0gKi8KLXN0YXRpYyBpbnQgbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW0sCi0JCQkJCQlnZnBfdCBnZnBfbWFzaywgYm9vbCBub3N3YXApCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY291bnRfY2hpbGRyZW5fY2Ioc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbmV4dF9tZW07Ci0JaW50IHJldCA9IDA7CisJaW50ICp2YWwgPSBkYXRhOworCSgqdmFsKSsrOworCXJldHVybiAwOworfQorCisvKioKKyAqIG1lbV9jZ3JvdXBfcHJpbnRfbWVtX2luZm86IENhbGxlZCBmcm9tIE9PTSB3aXRoIHRhc2tsaXN0X2xvY2sgaGVsZCBpbiByZWFkIG1vZGUuCisgKiBAbWVtY2c6IFRoZSBtZW1vcnkgY2dyb3VwIHRoYXQgd2VudCBvdmVyIGxpbWl0CisgKiBAcDogVGFzayB0aGF0IGlzIGdvaW5nIHRvIGJlIGtpbGxlZAorICoKKyAqIE5PVEU6IEBtZW1jZyBhbmQgQHAncyBtZW1fY2dyb3VwIGNhbiBiZSBkaWZmZXJlbnQgd2hlbiBoaWVyYXJjaHkgaXMKKyAqIGVuYWJsZWQKKyAqLwordm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXN0cnVjdCBjZ3JvdXAgKnRhc2tfY2dycDsKKwlzdHJ1Y3QgY2dyb3VwICptZW1fY2dycDsKKwkvKgorCSAqIE5lZWQgYSBidWZmZXIgaW4gQlNTLCBjYW4ndCByZWx5IG9uIGFsbG9jYXRpb25zLiBUaGUgY29kZSByZWxpZXMKKwkgKiBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IE9PTSBpcyBzZXJpYWxpemVkIGZvciBtZW1vcnkgY29udHJvbGxlci4KKwkgKiBJZiB0aGlzIGFzc3VtcHRpb24gaXMgYnJva2VuLCByZXZpc2l0IHRoaXMgY29kZS4KKwkgKi8KKwlzdGF0aWMgY2hhciBtZW1jZ19uYW1lW1BBVEhfTUFYXTsKKwlpbnQgcmV0OworCisJaWYgKCFtZW1jZykKKwkJcmV0dXJuOworCisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwltZW1fY2dycCA9IG1lbWNnLT5jc3MuY2dyb3VwOworCXRhc2tfY2dycCA9IHRhc2tfY2dyb3VwKHAsIG1lbV9jZ3JvdXBfc3Vic3lzX2lkKTsKKworCXJldCA9IGNncm91cF9wYXRoKHRhc2tfY2dycCwgbWVtY2dfbmFtZSwgUEFUSF9NQVgpOworCWlmIChyZXQgPCAwKSB7CisJCS8qCisJCSAqIFVuZm9ydHVuYXRlbHksIHdlIGFyZSB1bmFibGUgdG8gY29udmVydCB0byBhIHVzZWZ1bCBuYW1lCisJCSAqIEJ1dCB3ZSdsbCBzdGlsbCBwcmludCBvdXQgdGhlIHVzYWdlIGluZm9ybWF0aW9uCisJCSAqLworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZ290byBkb25lOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXByaW50ayhLRVJOX0lORk8gIlRhc2sgaW4gJXMga2lsbGVkIiwgbWVtY2dfbmFtZSk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcmV0ID0gY2dyb3VwX3BhdGgobWVtX2NncnAsIG1lbWNnX25hbWUsIFBBVEhfTUFYKTsKKwlpZiAocmV0IDwgMCkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJZ290byBkb25lOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qCi0JICogUmVjbGFpbSB1bmNvbmRpdGlvbmFsbHkgYW5kIGRvbid0IGNoZWNrIGZvciByZXR1cm4gdmFsdWUuCi0JICogV2UgbmVlZCB0byByZWNsYWltIGluIHRoZSBjdXJyZW50IGdyb3VwIGFuZCBkb3duIHRoZSB0cmVlLgotCSAqIE9uZSBtaWdodCB0aGluayBhYm91dCBjaGVja2luZyBmb3IgY2hpbGRyZW4gYmVmb3JlIHJlY2xhaW1pbmcsCi0JICogYnV0IHRoZXJlIG1pZ2h0IGJlIGxlZnQgb3ZlciBhY2NvdW50aW5nLCBldmVuIGFmdGVyIGNoaWxkcmVuCi0JICogaGF2ZSBsZWZ0LgorCSAqIENvbnRpbnVlcyBmcm9tIGFib3ZlLCBzbyB3ZSBkb24ndCBuZWVkIGFuIEtFUk5fIGxldmVsCiAJICovCi0JcmV0ICs9IHRyeV90b19mcmVlX21lbV9jZ3JvdXBfcGFnZXMocm9vdF9tZW0sIGdmcF9tYXNrLCBub3N3YXAsCi0JCQkJCSAgIGdldF9zd2FwcGluZXNzKHJvb3RfbWVtKSk7Ci0JaWYgKG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQocm9vdF9tZW0pKQotCQlyZXR1cm4gMTsJLyogaW5kaWNhdGUgcmVjbGFpbSBoYXMgc3VjY2VlZGVkICovCi0JaWYgKCFyb290X21lbS0+dXNlX2hpZXJhcmNoeSkKLQkJcmV0dXJuIHJldDsKKwlwcmludGsoS0VSTl9DT05UICIgYXMgYSByZXN1bHQgb2YgbGltaXQgb2YgJXNcbiIsIG1lbWNnX25hbWUpOworZG9uZToKIAotCW5leHRfbWVtID0gbWVtX2Nncm91cF9nZXRfbmV4dF9ub2RlKHJvb3RfbWVtKTsKKwlwcmludGsoS0VSTl9JTkZPICJtZW1vcnk6IHVzYWdlICVsbHVrQiwgbGltaXQgJWxsdWtCLCBmYWlsY250ICVsbHVcbiIsCisJCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+cmVzLCBSRVNfVVNBR0UpID4+IDEwLAorCQlyZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPnJlcywgUkVTX0xJTUlUKSA+PiAxMCwKKwkJcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5yZXMsIFJFU19GQUlMQ05UKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAibWVtb3J5K3N3YXA6IHVzYWdlICVsbHVrQiwgbGltaXQgJWxsdWtCLCAiCisJCSJmYWlsY250ICVsbHVcbiIsCisJCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19VU0FHRSkgPj4gMTAsCisJCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19MSU1JVCkgPj4gMTAsCisJCXJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+bWVtc3csIFJFU19GQUlMQ05UKSk7Cit9CiAKLQl3aGlsZSAobmV4dF9tZW0gIT0gcm9vdF9tZW0pIHsKLQkJaWYgKG1lbV9jZ3JvdXBfaXNfb2Jzb2xldGUobmV4dF9tZW0pKSB7Ci0JCQluZXh0X21lbSA9IG1lbV9jZ3JvdXBfZ2V0X25leHRfbm9kZShyb290X21lbSk7CisvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgbWVtY2cgdW5kZXIgaGllcmFyY2h5IHRyZWUuIFJldHVybnMKKyAqIDEoc2VsZiBjb3VudCkgaWYgbm8gY2hpbGRyZW4uCisgKi8KK3N0YXRpYyBpbnQgbWVtX2Nncm91cF9jb3VudF9jaGlsZHJlbihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQoreworCWludCBudW0gPSAwOworIAltZW1fY2dyb3VwX3dhbGtfdHJlZShtZW0sICZudW0sIG1lbV9jZ3JvdXBfY291bnRfY2hpbGRyZW5fY2IpOworCXJldHVybiBudW07Cit9CisKKy8qCisgKiBWaXNpdCB0aGUgZmlyc3QgY2hpbGQgKG5lZWQgbm90IGJlIHRoZSBmaXJzdCBjaGlsZCBhcyBwZXIgdGhlIG9yZGVyaW5nCisgKiBvZiB0aGUgY2dyb3VwIGxpc3QsIHNpbmNlIHdlIHRyYWNrIGxhc3Rfc2Nhbm5lZF9jaGlsZCkgb2YgQG1lbSBhbmQgdXNlCisgKiB0aGF0IHRvIHJlY2xhaW0gZnJlZSBwYWdlcyBmcm9tLgorICovCitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKgorbWVtX2Nncm91cF9zZWxlY3RfdmljdGltKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbSkKK3sKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCWludCBuZXh0aWQsIGZvdW5kOworCisJaWYgKCFyb290X21lbS0+dXNlX2hpZXJhcmNoeSkgeworCQljc3NfZ2V0KCZyb290X21lbS0+Y3NzKTsKKwkJcmV0ID0gcm9vdF9tZW07CisJfQorCisJd2hpbGUgKCFyZXQpIHsKKwkJcmN1X3JlYWRfbG9jaygpOworCQluZXh0aWQgPSByb290X21lbS0+bGFzdF9zY2FubmVkX2NoaWxkICsgMTsKKwkJY3NzID0gY3NzX2dldF9uZXh0KCZtZW1fY2dyb3VwX3N1YnN5cywgbmV4dGlkLCAmcm9vdF9tZW0tPmNzcywKKwkJCQkgICAmZm91bmQpOworCQlpZiAoY3NzICYmIGNzc190cnlnZXQoY3NzKSkKKwkJCXJldCA9IGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCBtZW1fY2dyb3VwLCBjc3MpOworCisJCXJjdV9yZWFkX3VubG9jaygpOworCQkvKiBVcGRhdGVzIHNjYW5uaW5nIHBhcmFtZXRlciAqLworCQlzcGluX2xvY2soJnJvb3RfbWVtLT5yZWNsYWltX3BhcmFtX2xvY2spOworCQlpZiAoIWNzcykgeworCQkJLyogdGhpcyBtZWFucyBzdGFydCBzY2FuIGZyb20gSUQ6MSAqLworCQkJcm9vdF9tZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IDA7CisJCX0gZWxzZQorCQkJcm9vdF9tZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IGZvdW5kOworCQlzcGluX3VubG9jaygmcm9vdF9tZW0tPnJlY2xhaW1fcGFyYW1fbG9jayk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNjYW4gdGhlIGhpZXJhcmNoeSBpZiBuZWVkZWQgdG8gcmVjbGFpbSBtZW1vcnkuIFdlIHJlbWVtYmVyIHRoZSBsYXN0IGNoaWxkCisgKiB3ZSByZWNsYWltZWQgZnJvbSwgc28gdGhhdCB3ZSBkb24ndCBlbmQgdXAgcGVuYWxpemluZyBvbmUgY2hpbGQgZXh0ZW5zaXZlbHkKKyAqIGJhc2VkIG9uIGl0cyBwb3NpdGlvbiBpbiB0aGUgY2hpbGRyZW4gbGlzdC4KKyAqCisgKiByb290X21lbSBpcyB0aGUgb3JpZ2luYWwgYW5jZXN0b3IgdGhhdCB3ZSd2ZSBiZWVuIHJlY2xhaW0gZnJvbS4KKyAqCisgKiBXZSBnaXZlIHVwIGFuZCByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGVuIHdlIHZpc2l0IHJvb3RfbWVtIHR3aWNlLgorICogKG90aGVyIGdyb3VwcyBjYW4gYmUgcmVtb3ZlZCB3aGlsZSB3ZSdyZSB3YWxraW5nLi4uLikKKyAqCisgKiBJZiBzaHJpbms9PXRydWUsIGZvciBhdm9pZGluZyB0byBmcmVlIHRvbyBtdWNoLCB0aGlzIHJldHVybnMgaW1tZWRpZWF0ZWx5LgorICovCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfaGllcmFyY2hpY2FsX3JlY2xhaW0oc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtLAorCQkJCSAgIGdmcF90IGdmcF9tYXNrLCBib29sIG5vc3dhcCwgYm9vbCBzaHJpbmspCit7CisJc3RydWN0IG1lbV9jZ3JvdXAgKnZpY3RpbTsKKwlpbnQgcmV0LCB0b3RhbCA9IDA7CisJaW50IGxvb3AgPSAwOworCisJd2hpbGUgKGxvb3AgPCAyKSB7CisJCXZpY3RpbSA9IG1lbV9jZ3JvdXBfc2VsZWN0X3ZpY3RpbShyb290X21lbSk7CisJCWlmICh2aWN0aW0gPT0gcm9vdF9tZW0pCisJCQlsb29wKys7CisJCWlmICghbWVtX2Nncm91cF9sb2NhbF91c2FnZSgmdmljdGltLT5zdGF0KSkgeworCQkJLyogdGhpcyBjZ3JvdXAncyBsb2NhbCB1c2FnZSA9PSAwICovCisJCQljc3NfcHV0KCZ2aWN0aW0tPmNzcyk7CiAJCQljb250aW51ZTsKIAkJfQotCQlyZXQgKz0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhuZXh0X21lbSwgZ2ZwX21hc2ssIG5vc3dhcCwKLQkJCQkJCSAgIGdldF9zd2FwcGluZXNzKG5leHRfbWVtKSk7CisJCS8qIHdlIHVzZSBzd2FwcGluZXNzIG9mIGxvY2FsIGNncm91cCAqLworCQlyZXQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKHZpY3RpbSwgZ2ZwX21hc2ssIG5vc3dhcCwKKwkJCQkJCSAgIGdldF9zd2FwcGluZXNzKHZpY3RpbSkpOworCQljc3NfcHV0KCZ2aWN0aW0tPmNzcyk7CisJCS8qCisJCSAqIEF0IHNocmlua2luZyB1c2FnZSwgd2UgY2FuJ3QgY2hlY2sgd2Ugc2hvdWxkIHN0b3AgaGVyZSBvcgorCQkgKiByZWNsYWltIG1vcmUuIEl0J3MgZGVwZW5kcyBvbiBjYWxsZXJzLiBsYXN0X3NjYW5uZWRfY2hpbGQKKwkJICogd2lsbCB3b3JrIGVub3VnaCBmb3Iga2VlcGluZyBmYWlybmVzcyB1bmRlciB0cmVlLgorCQkgKi8KKwkJaWYgKHNocmluaykKKwkJCXJldHVybiByZXQ7CisJCXRvdGFsICs9IHJldDsKIAkJaWYgKG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQocm9vdF9tZW0pKQotCQkJcmV0dXJuIDE7CS8qIGluZGljYXRlIHJlY2xhaW0gaGFzIHN1Y2NlZWRlZCAqLwotCQluZXh0X21lbSA9IG1lbV9jZ3JvdXBfZ2V0X25leHRfbm9kZShyb290X21lbSk7CisJCQlyZXR1cm4gMSArIHRvdGFsOwogCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiB0b3RhbDsKIH0KIAogYm9vbCBtZW1fY2dyb3VwX29vbV9jYWxsZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQpAQCAtODEzLDYgKzg4NSwxOSBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CisKK3N0YXRpYyBpbnQgcmVjb3JkX2xhc3Rfb29tX2NiKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIHZvaWQgKmRhdGEpCit7CisJbWVtLT5sYXN0X29vbV9qaWZmaWVzID0gamlmZmllczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX2xhc3Rfb29tKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCit7CisJbWVtX2Nncm91cF93YWxrX3RyZWUobWVtLCBOVUxMLCByZWNvcmRfbGFzdF9vb21fY2IpOworfQorCisKIC8qCiAgKiBVbmxpa2UgZXhwb3J0ZWQgaW50ZXJmYWNlLCAib29tIiBwYXJhbWV0ZXIgaXMgYWRkZWQuIGlmIG9vbT09dHJ1ZSwKICAqIG9vbS1raWxsZXIgY2FuIGJlIGludm9rZWQuCkBAIC04NzUsNyArOTYwLDcgQEAKIAkJCWdvdG8gbm9tZW07CiAKIAkJcmV0ID0gbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2ssCi0JCQkJCQkJbm9zd2FwKTsKKwkJCQkJCQlub3N3YXAsIGZhbHNlKTsKIAkJaWYgKHJldCkKIAkJCWNvbnRpbnVlOwogCkBAIC04OTUsNyArOTgwLDcgQEAKIAkJCQltdXRleF9sb2NrKCZtZW1jZ190YXNrbGlzdCk7CiAJCQkJbWVtX2Nncm91cF9vdXRfb2ZfbWVtb3J5KG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzayk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZtZW1jZ190YXNrbGlzdCk7Ci0JCQkJbWVtX292ZXJfbGltaXQtPmxhc3Rfb29tX2ppZmZpZXMgPSBqaWZmaWVzOworCQkJCXJlY29yZF9sYXN0X29vbShtZW1fb3Zlcl9saW1pdCk7CiAJCQl9CiAJCQlnb3RvIG5vbWVtOwogCQl9CkBAIC05MDYsMjAgKzk5MSw1NSBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCisKKy8qCisgKiBBIGhlbHBlciBmdW5jdGlvbiB0byBnZXQgbWVtX2Nncm91cCBmcm9tIElELiBtdXN0IGJlIGNhbGxlZCB1bmRlcgorICogcmN1X3JlYWRfbG9jaygpLiBUaGUgY2FsbGVyIG11c3QgY2hlY2sgY3NzX2lzX3JlbW92ZWQoKSBvciBzb21lIGlmCisgKiBpdCdzIGNvbmNlcm4uIChkcm9wcGluZyByZWZjbnQgZnJvbSBzd2FwIGNhbiBiZSBjYWxsZWQgYWdhaW5zdCByZW1vdmVkCisgKiBtZW1jZy4pCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9sb29rdXAodW5zaWduZWQgc2hvcnQgaWQpCit7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKKworCS8qIElEIDAgaXMgdW51c2VkIElEICovCisJaWYgKCFpZCkKKwkJcmV0dXJuIE5VTEw7CisJY3NzID0gY3NzX2xvb2t1cCgmbWVtX2Nncm91cF9zdWJzeXMsIGlkKTsKKwlpZiAoIWNzcykKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCBtZW1fY2dyb3VwLCBjc3MpOworfQorCiBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX3N3YXBjYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtOworCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CisJdW5zaWduZWQgc2hvcnQgaWQ7CiAJc3dwX2VudHJ5X3QgZW50OwogCisJVk1fQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKKwogCWlmICghUGFnZVN3YXBDYWNoZShwYWdlKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQllbnQudmFsID0gcGFnZV9wcml2YXRlKHBhZ2UpOwotCW1lbSA9IGxvb2t1cF9zd2FwX2Nncm91cChlbnQpOwotCWlmICghbWVtKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAoIWNzc190cnlnZXQoJm1lbS0+Y3NzKSkKLQkJcmV0dXJuIE5VTEw7CisJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CisJLyoKKwkgKiBVc2VkIGJpdCBvZiBzd2FwY2FjaGUgaXMgc29saWQgdW5kZXIgcGFnZSBsb2NrLgorCSAqLworCWlmIChQYWdlQ2dyb3VwVXNlZChwYykpIHsKKwkJbWVtID0gcGMtPm1lbV9jZ3JvdXA7CisJCWlmIChtZW0gJiYgIWNzc190cnlnZXQoJm1lbS0+Y3NzKSkKKwkJCW1lbSA9IE5VTEw7CisJfSBlbHNlIHsKKwkJZW50LnZhbCA9IHBhZ2VfcHJpdmF0ZShwYWdlKTsKKwkJaWQgPSBsb29rdXBfc3dhcF9jZ3JvdXAoZW50KTsKKwkJcmN1X3JlYWRfbG9jaygpOworCQltZW0gPSBtZW1fY2dyb3VwX2xvb2t1cChpZCk7CisJCWlmIChtZW0gJiYgIWNzc190cnlnZXQoJm1lbS0+Y3NzKSkKKwkJCW1lbSA9IE5VTEw7CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KIAlyZXR1cm4gbWVtOwogfQogCkBAIC0xMTE4LDYgKzEyMzgsMTAgQEAKIAkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX01BUFBFRCwgTlVMTCk7CiB9CiAKK3N0YXRpYyB2b2lkCitfX21lbV9jZ3JvdXBfY29tbWl0X2NoYXJnZV9zd2FwaW4oc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1fY2dyb3VwICpwdHIsCisJCQkJCWVudW0gY2hhcmdlX3R5cGUgY3R5cGUpOworCiBpbnQgbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCWdmcF90IGdmcF9tYXNrKQogewpAQCAtMTE1NCwxNiArMTI3OCw2IEBACiAJCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAJfQogCi0JaWYgKGRvX3N3YXBfYWNjb3VudCAmJiBQYWdlU3dhcENhY2hlKHBhZ2UpKSB7Ci0JCW1lbSA9IHRyeV9nZXRfbWVtX2Nncm91cF9mcm9tX3N3YXBjYWNoZShwYWdlKTsKLQkJaWYgKG1lbSkKLQkJCW1tID0gTlVMTDsKLQkJICBlbHNlCi0JCQltZW0gPSBOVUxMOwotCQkvKiBTd2FwQ2FjaGUgbWF5IGJlIHN0aWxsIGxpbmtlZCB0byBMUlUgbm93LiAqLwotCQltZW1fY2dyb3VwX2xydV9kZWxfYmVmb3JlX2NvbW1pdF9zd2FwY2FjaGUocGFnZSk7Ci0JfQotCiAJaWYgKHVubGlrZWx5KCFtbSAmJiAhbWVtKSkKIAkJbW0gPSAmaW5pdF9tbTsKIApAQCAtMTE3MSwyMiArMTI4NSwxNiBAQAogCQlyZXR1cm4gbWVtX2Nncm91cF9jaGFyZ2VfY29tbW9uKHBhZ2UsIG1tLCBnZnBfbWFzaywKIAkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX0NBQ0hFLCBOVUxMKTsKIAotCXJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2NvbW1vbihwYWdlLCBtbSwgZ2ZwX21hc2ssCi0JCQkJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TSE1FTSwgbWVtKTsKLQlpZiAobWVtKQotCQljc3NfcHV0KCZtZW0tPmNzcyk7Ci0JaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpCi0JCW1lbV9jZ3JvdXBfbHJ1X2FkZF9hZnRlcl9jb21taXRfc3dhcGNhY2hlKHBhZ2UpOworCS8qIHNobWVtICovCisJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKKwkJcmV0ID0gbWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXBpbihtbSwgcGFnZSwgZ2ZwX21hc2ssICZtZW0pOworCQlpZiAoIXJldCkKKwkJCV9fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlX3N3YXBpbihwYWdlLCBtZW0sCisJCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU0hNRU0pOworCX0gZWxzZQorCQlyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9jb21tb24ocGFnZSwgbW0sIGdmcF9tYXNrLAorCQkJCQlNRU1fQ0dST1VQX0NIQVJHRV9UWVBFX1NITUVNLCBtZW0pOwogCi0JaWYgKGRvX3N3YXBfYWNjb3VudCAmJiAhcmV0ICYmIFBhZ2VTd2FwQ2FjaGUocGFnZSkpIHsKLQkJc3dwX2VudHJ5X3QgZW50ID0gey52YWwgPSBwYWdlX3ByaXZhdGUocGFnZSl9OwotCQkvKiBhdm9pZCBkb3VibGUgY291bnRpbmcgKi8KLQkJbWVtID0gc3dhcF9jZ3JvdXBfcmVjb3JkKGVudCwgTlVMTCk7Ci0JCWlmIChtZW0pIHsKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUpOwotCQkJbWVtX2Nncm91cF9wdXQobWVtKTsKLQkJfQotCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjI5LDcgKzEzMzcsOSBAQAogCXJldHVybiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShtbSwgbWFzaywgcHRyLCB0cnVlKTsKIH0KIAotdm9pZCBtZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2Vfc3dhcGluKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcHRyKQorc3RhdGljIHZvaWQKK19fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlX3N3YXBpbihzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbV9jZ3JvdXAgKnB0ciwKKwkJCQkJZW51bSBjaGFyZ2VfdHlwZSBjdHlwZSkKIHsKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOwogCkBAIC0xMjM5LDcgKzEzNDksNyBAQAogCQlyZXR1cm47CiAJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CiAJbWVtX2Nncm91cF9scnVfZGVsX2JlZm9yZV9jb21taXRfc3dhcGNhY2hlKHBhZ2UpOwotCV9fbWVtX2Nncm91cF9jb21taXRfY2hhcmdlKHB0ciwgcGMsIE1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfTUFQUEVEKTsKKwlfX21lbV9jZ3JvdXBfY29tbWl0X2NoYXJnZShwdHIsIHBjLCBjdHlwZSk7CiAJbWVtX2Nncm91cF9scnVfYWRkX2FmdGVyX2NvbW1pdF9zd2FwY2FjaGUocGFnZSk7CiAJLyoKIAkgKiBOb3cgc3dhcCBpcyBvbi1tZW1vcnkuIFRoaXMgbWVhbnMgdGhpcyBwYWdlIG1heSBiZQpAQCAtMTI1MCwxOCArMTM2MCwzMiBAQAogCSAqLwogCWlmIChkb19zd2FwX2FjY291bnQgJiYgUGFnZVN3YXBDYWNoZShwYWdlKSkgewogCQlzd3BfZW50cnlfdCBlbnQgPSB7LnZhbCA9IHBhZ2VfcHJpdmF0ZShwYWdlKX07CisJCXVuc2lnbmVkIHNob3J0IGlkOwogCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7Ci0JCW1lbWNnID0gc3dhcF9jZ3JvdXBfcmVjb3JkKGVudCwgTlVMTCk7CisKKwkJaWQgPSBzd2FwX2Nncm91cF9yZWNvcmQoZW50LCAwKTsKKwkJcmN1X3JlYWRfbG9jaygpOworCQltZW1jZyA9IG1lbV9jZ3JvdXBfbG9va3VwKGlkKTsKIAkJaWYgKG1lbWNnKSB7CisJCQkvKgorCQkJICogVGhpcyByZWNvcmRlZCBtZW1jZyBjYW4gYmUgb2Jzb2xldGUgb25lLiBTbywgYXZvaWQKKwkJCSAqIGNhbGxpbmcgY3NzX3RyeWdldAorCQkJICovCiAJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUpOwogCQkJbWVtX2Nncm91cF9wdXQobWVtY2cpOwogCQl9Ci0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCS8qIGFkZCB0aGlzIHBhZ2UocGFnZV9jZ3JvdXApIHRvIHRoZSBMUlUgd2Ugd2FudC4gKi8KIAogfQogCit2b2lkIG1lbV9jZ3JvdXBfY29tbWl0X2NoYXJnZV9zd2FwaW4oc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1fY2dyb3VwICpwdHIpCit7CisJX19tZW1fY2dyb3VwX2NvbW1pdF9jaGFyZ2Vfc3dhcGluKHBhZ2UsIHB0ciwKKwkJCQkJTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9NQVBQRUQpOworfQorCiB2b2lkIG1lbV9jZ3JvdXBfY2FuY2VsX2NoYXJnZV9zd2FwaW4oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKIHsKIAlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQpAQCAtMTMyNCw4ICsxNDQ4LDggQEAKIAlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSk7CiAJaWYgKGRvX3N3YXBfYWNjb3VudCAmJiAoY3R5cGUgIT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TV0FQT1VUKSkKIAkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSk7Ci0KIAltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKG1lbSwgcGMsIGZhbHNlKTsKKwogCUNsZWFyUGFnZUNncm91cFVzZWQocGMpOwogCS8qCiAJICogcGMtPm1lbV9jZ3JvdXAgaXMgbm90IGNsZWFyZWQgaGVyZS4gSXQgd2lsbCBiZSBhY2Nlc3NlZCB3aGVuIGl0J3MKQEAgLTEzNzcsNyArMTUwMSw3IEBACiAJCQkJCU1FTV9DR1JPVVBfQ0hBUkdFX1RZUEVfU1dBUE9VVCk7CiAJLyogcmVjb3JkIG1lbWNnIGluZm9ybWF0aW9uICovCiAJaWYgKGRvX3N3YXBfYWNjb3VudCAmJiBtZW1jZykgewotCQlzd2FwX2Nncm91cF9yZWNvcmQoZW50LCBtZW1jZyk7CisJCXN3YXBfY2dyb3VwX3JlY29yZChlbnQsIGNzc19pZCgmbWVtY2ctPmNzcykpOwogCQltZW1fY2dyb3VwX2dldChtZW1jZyk7CiAJfQogCWlmIChtZW1jZykKQEAgLTEzOTIsMTUgKzE1MTYsMjMgQEAKIHZvaWQgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwKHN3cF9lbnRyeV90IGVudCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CisJdW5zaWduZWQgc2hvcnQgaWQ7CiAKIAlpZiAoIWRvX3N3YXBfYWNjb3VudCkKIAkJcmV0dXJuOwogCi0JbWVtY2cgPSBzd2FwX2Nncm91cF9yZWNvcmQoZW50LCBOVUxMKTsKKwlpZCA9IHN3YXBfY2dyb3VwX3JlY29yZChlbnQsIDApOworCXJjdV9yZWFkX2xvY2soKTsKKwltZW1jZyA9IG1lbV9jZ3JvdXBfbG9va3VwKGlkKTsKIAlpZiAobWVtY2cpIHsKKwkJLyoKKwkJICogV2UgdW5jaGFyZ2UgdGhpcyBiZWNhdXNlIHN3YXAgaXMgZnJlZWQuCisJCSAqIFRoaXMgbWVtY2cgY2FuIGJlIG9ic29sZXRlIG9uZS4gV2UgYXZvaWQgY2FsbGluZyBjc3NfdHJ5Z2V0CisJCSAqLwogCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCBQQUdFX1NJWkUpOwogCQltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogfQogI2VuZGlmCiAKQEAgLTE1MDgsNyArMTY0MCw4IEBACiAJCXJldHVybiAwOwogCiAJZG8gewotCQlwcm9ncmVzcyA9IG1lbV9jZ3JvdXBfaGllcmFyY2hpY2FsX3JlY2xhaW0obWVtLCBnZnBfbWFzaywgdHJ1ZSk7CisJCXByb2dyZXNzID0gbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW0sCisJCQkJCWdmcF9tYXNrLCB0cnVlLCBmYWxzZSk7CiAJCXByb2dyZXNzICs9IG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQobWVtKTsKIAl9IHdoaWxlICghcHJvZ3Jlc3MgJiYgLS1yZXRyeSk7CiAKQEAgLTE1MjMsMTEgKzE2NTYsMjEgQEAKIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9yZXNpemVfbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCiB7Ci0KLQlpbnQgcmV0cnlfY291bnQgPSBNRU1fQ0dST1VQX1JFQ0xBSU1fUkVUUklFUzsKKwlpbnQgcmV0cnlfY291bnQ7CiAJaW50IHByb2dyZXNzOwogCXU2NCBtZW1zd2xpbWl0OwogCWludCByZXQgPSAwOworCWludCBjaGlsZHJlbiA9IG1lbV9jZ3JvdXBfY291bnRfY2hpbGRyZW4obWVtY2cpOworCXU2NCBjdXJ1c2FnZSwgb2xkdXNhZ2U7CisKKwkvKgorCSAqIEZvciBrZWVwaW5nIGhpZXJhcmNoaWNhbF9yZWNsYWltIHNpbXBsZSwgaG93IGxvbmcgd2Ugc2hvdWxkIHJldHJ5CisJICogaXMgZGVwZW5kcyBvbiBjYWxsZXJzLiBXZSBzZXQgb3VyIHJldHJ5LWNvdW50IHRvIGJlIGZ1bmN0aW9uCisJICogb2YgIyBvZiBjaGlsZHJlbiB3aGljaCB3ZSBzaG91bGQgdmlzaXQgaW4gdGhpcyBsb29wLgorCSAqLworCXJldHJ5X2NvdW50ID0gTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVMgKiBjaGlsZHJlbjsKKworCW9sZHVzYWdlID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5yZXMsIFJFU19VU0FHRSk7CiAKIAl3aGlsZSAocmV0cnlfY291bnQpIHsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CkBAIC0xNTUzLDggKzE2OTYsMTMgQEAKIAkJCWJyZWFrOwogCiAJCXByb2dyZXNzID0gbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW1jZywgR0ZQX0tFUk5FTCwKLQkJCQkJCQkgICBmYWxzZSk7Ci0gIAkJaWYgKCFwcm9ncmVzcykJCQlyZXRyeV9jb3VudC0tOworCQkJCQkJICAgZmFsc2UsIHRydWUpOworCQljdXJ1c2FnZSA9IHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW1jZy0+cmVzLCBSRVNfVVNBR0UpOworCQkvKiBVc2FnZSBpcyByZWR1Y2VkID8gKi8KKyAgCQlpZiAoY3VydXNhZ2UgPj0gb2xkdXNhZ2UpCisJCQlyZXRyeV9jb3VudC0tOworCQllbHNlCisJCQlvbGR1c2FnZSA9IGN1cnVzYWdlOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xNTYzLDEzICsxNzExLDE2IEBACiBpbnQgbWVtX2Nncm91cF9yZXNpemVfbWVtc3dfbGltaXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCiB7Ci0JaW50IHJldHJ5X2NvdW50ID0gTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVM7CisJaW50IHJldHJ5X2NvdW50OwogCXU2NCBtZW1saW1pdCwgb2xkdXNhZ2UsIGN1cnVzYWdlOwotCWludCByZXQ7CisJaW50IGNoaWxkcmVuID0gbWVtX2Nncm91cF9jb3VudF9jaGlsZHJlbihtZW1jZyk7CisJaW50IHJldCA9IC1FQlVTWTsKIAogCWlmICghZG9fc3dhcF9hY2NvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKLQorCS8qIHNlZSBtZW1fY2dyb3VwX3Jlc2l6ZV9yZXNfbGltaXQgKi8KKyAJcmV0cnlfY291bnQgPSBjaGlsZHJlbiAqIE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTOworCW9sZHVzYWdlID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5tZW1zdywgUkVTX1VTQUdFKTsKIAl3aGlsZSAocmV0cnlfY291bnQpIHsKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlyZXQgPSAtRUlOVFI7CkBAIC0xNTkzLDExICsxNzQ0LDEzIEBACiAJCWlmICghcmV0KQogCQkJYnJlYWs7CiAKLQkJb2xkdXNhZ2UgPSByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtY2ctPm1lbXN3LCBSRVNfVVNBR0UpOwotCQltZW1fY2dyb3VwX2hpZXJhcmNoaWNhbF9yZWNsYWltKG1lbWNnLCBHRlBfS0VSTkVMLCB0cnVlKTsKKwkJbWVtX2Nncm91cF9oaWVyYXJjaGljYWxfcmVjbGFpbShtZW1jZywgR0ZQX0tFUk5FTCwgdHJ1ZSwgdHJ1ZSk7CiAJCWN1cnVzYWdlID0gcmVzX2NvdW50ZXJfcmVhZF91NjQoJm1lbWNnLT5tZW1zdywgUkVTX1VTQUdFKTsKKwkJLyogVXNhZ2UgaXMgcmVkdWNlZCA/ICovCiAJCWlmIChjdXJ1c2FnZSA+PSBvbGR1c2FnZSkKIAkJCXJldHJ5X2NvdW50LS07CisJCWVsc2UKKwkJCW9sZHVzYWdlID0gY3VydXNhZ2U7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xODkzLDU0ICsyMDQ2LDkwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0X2Rlc2MgewotCWNvbnN0IGNoYXIgKm1zZzsKLQl1NjQgdW5pdDsKLX0gbWVtX2Nncm91cF9zdGF0X2Rlc2NbXSA9IHsKLQlbTUVNX0NHUk9VUF9TVEFUX0NBQ0hFXSA9IHsgImNhY2hlIiwgUEFHRV9TSVpFLCB9LAotCVtNRU1fQ0dST1VQX1NUQVRfUlNTXSA9IHsgInJzcyIsIFBBR0VfU0laRSwgfSwKLQlbTUVNX0NHUk9VUF9TVEFUX1BHUEdJTl9DT1VOVF0gPSB7InBncGdpbiIsIDEsIH0sCi0JW01FTV9DR1JPVVBfU1RBVF9QR1BHT1VUX0NPVU5UXSA9IHsicGdwZ291dCIsIDEsIH0sCisKKy8qIEZvciByZWFkIHN0YXRpc3RpY3MgKi8KK2VudW0geworCU1DU19DQUNIRSwKKwlNQ1NfUlNTLAorCU1DU19QR1BHSU4sCisJTUNTX1BHUEdPVVQsCisJTUNTX0lOQUNUSVZFX0FOT04sCisJTUNTX0FDVElWRV9BTk9OLAorCU1DU19JTkFDVElWRV9GSUxFLAorCU1DU19BQ1RJVkVfRklMRSwKKwlNQ1NfVU5FVklDVEFCTEUsCisJTlJfTUNTX1NUQVQsCiB9OwogCitzdHJ1Y3QgbWNzX3RvdGFsX3N0YXQgeworCXM2NCBzdGF0W05SX01DU19TVEFUXTsKK307CisKK3N0cnVjdCB7CisJY2hhciAqbG9jYWxfbmFtZTsKKwljaGFyICp0b3RhbF9uYW1lOworfSBtZW1jZ19zdGF0X3N0cmluZ3NbTlJfTUNTX1NUQVRdID0geworCXsiY2FjaGUiLCAidG90YWxfY2FjaGUifSwKKwl7InJzcyIsICJ0b3RhbF9yc3MifSwKKwl7InBncGdpbiIsICJ0b3RhbF9wZ3BnaW4ifSwKKwl7InBncGdvdXQiLCAidG90YWxfcGdwZ291dCJ9LAorCXsiaW5hY3RpdmVfYW5vbiIsICJ0b3RhbF9pbmFjdGl2ZV9hbm9uIn0sCisJeyJhY3RpdmVfYW5vbiIsICJ0b3RhbF9hY3RpdmVfYW5vbiJ9LAorCXsiaW5hY3RpdmVfZmlsZSIsICJ0b3RhbF9pbmFjdGl2ZV9maWxlIn0sCisJeyJhY3RpdmVfZmlsZSIsICJ0b3RhbF9hY3RpdmVfZmlsZSJ9LAorCXsidW5ldmljdGFibGUiLCAidG90YWxfdW5ldmljdGFibGUifQorfTsKKworCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3N0YXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWNzX3RvdGFsX3N0YXQgKnMgPSBkYXRhOworCXM2NCB2YWw7CisKKwkvKiBwZXIgY3B1IHN0YXQgKi8KKwl2YWwgPSBtZW1fY2dyb3VwX3JlYWRfc3RhdCgmbWVtLT5zdGF0LCBNRU1fQ0dST1VQX1NUQVRfQ0FDSEUpOworCXMtPnN0YXRbTUNTX0NBQ0hFXSArPSB2YWwgKiBQQUdFX1NJWkU7CisJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQoJm1lbS0+c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1JTUyk7CisJcy0+c3RhdFtNQ1NfUlNTXSArPSB2YWwgKiBQQUdFX1NJWkU7CisJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQoJm1lbS0+c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1BHUEdJTl9DT1VOVCk7CisJcy0+c3RhdFtNQ1NfUEdQR0lOXSArPSB2YWw7CisJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQoJm1lbS0+c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlQpOworCXMtPnN0YXRbTUNTX1BHUEdPVVRdICs9IHZhbDsKKworCS8qIHBlciB6b25lIHN0YXQgKi8KKwl2YWwgPSBtZW1fY2dyb3VwX2dldF9sb2NhbF96b25lc3RhdChtZW0sIExSVV9JTkFDVElWRV9BTk9OKTsKKwlzLT5zdGF0W01DU19JTkFDVElWRV9BTk9OXSArPSB2YWwgKiBQQUdFX1NJWkU7CisJdmFsID0gbWVtX2Nncm91cF9nZXRfbG9jYWxfem9uZXN0YXQobWVtLCBMUlVfQUNUSVZFX0FOT04pOworCXMtPnN0YXRbTUNTX0FDVElWRV9BTk9OXSArPSB2YWwgKiBQQUdFX1NJWkU7CisJdmFsID0gbWVtX2Nncm91cF9nZXRfbG9jYWxfem9uZXN0YXQobWVtLCBMUlVfSU5BQ1RJVkVfRklMRSk7CisJcy0+c3RhdFtNQ1NfSU5BQ1RJVkVfRklMRV0gKz0gdmFsICogUEFHRV9TSVpFOworCXZhbCA9IG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3pvbmVzdGF0KG1lbSwgTFJVX0FDVElWRV9GSUxFKTsKKwlzLT5zdGF0W01DU19BQ1RJVkVfRklMRV0gKz0gdmFsICogUEFHRV9TSVpFOworCXZhbCA9IG1lbV9jZ3JvdXBfZ2V0X2xvY2FsX3pvbmVzdGF0KG1lbSwgTFJVX1VORVZJQ1RBQkxFKTsKKwlzLT5zdGF0W01DU19VTkVWSUNUQUJMRV0gKz0gdmFsICogUEFHRV9TSVpFOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbWVtX2Nncm91cF9nZXRfdG90YWxfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBzdHJ1Y3QgbWNzX3RvdGFsX3N0YXQgKnMpCit7CisJbWVtX2Nncm91cF93YWxrX3RyZWUobWVtLCBzLCBtZW1fY2dyb3VwX2dldF9sb2NhbF9zdGF0KTsKK30KKwogc3RhdGljIGludCBtZW1fY29udHJvbF9zdGF0X3Nob3coc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IGNmdHlwZSAqY2Z0LAogCQkJCSBzdHJ1Y3QgY2dyb3VwX21hcF9jYiAqY2IpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jb250ID0gbWVtX2Nncm91cF9mcm9tX2NvbnQoY29udCk7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfc3RhdCAqc3RhdCA9ICZtZW1fY29udC0+c3RhdDsKKwlzdHJ1Y3QgbWNzX3RvdGFsX3N0YXQgbXlzdGF0OwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RhdC0+Y3B1c3RhdFswXS5jb3VudCk7IGkrKykgewotCQlzNjQgdmFsOworCW1lbXNldCgmbXlzdGF0LCAwLCBzaXplb2YobXlzdGF0KSk7CisJbWVtX2Nncm91cF9nZXRfbG9jYWxfc3RhdChtZW1fY29udCwgJm15c3RhdCk7CiAKLQkJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQoc3RhdCwgaSk7Ci0JCXZhbCAqPSBtZW1fY2dyb3VwX3N0YXRfZGVzY1tpXS51bml0OwotCQljYi0+ZmlsbChjYiwgbWVtX2Nncm91cF9zdGF0X2Rlc2NbaV0ubXNnLCB2YWwpOwotCX0KLQkvKiBzaG93aW5nICMgb2YgYWN0aXZlIHBhZ2VzICovCi0JewotCQl1bnNpZ25lZCBsb25nIGFjdGl2ZV9hbm9uLCBpbmFjdGl2ZV9hbm9uOwotCQl1bnNpZ25lZCBsb25nIGFjdGl2ZV9maWxlLCBpbmFjdGl2ZV9maWxlOwotCQl1bnNpZ25lZCBsb25nIHVuZXZpY3RhYmxlOworCWZvciAoaSA9IDA7IGkgPCBOUl9NQ1NfU1RBVDsgaSsrKQorCQljYi0+ZmlsbChjYiwgbWVtY2dfc3RhdF9zdHJpbmdzW2ldLmxvY2FsX25hbWUsIG15c3RhdC5zdGF0W2ldKTsKIAotCQlpbmFjdGl2ZV9hbm9uID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbV9jb250LAotCQkJCQkJTFJVX0lOQUNUSVZFX0FOT04pOwotCQlhY3RpdmVfYW5vbiA9IG1lbV9jZ3JvdXBfZ2V0X2FsbF96b25lc3RhdChtZW1fY29udCwKLQkJCQkJCUxSVV9BQ1RJVkVfQU5PTik7Ci0JCWluYWN0aXZlX2ZpbGUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCi0JCQkJCQlMUlVfSU5BQ1RJVkVfRklMRSk7Ci0JCWFjdGl2ZV9maWxlID0gbWVtX2Nncm91cF9nZXRfYWxsX3pvbmVzdGF0KG1lbV9jb250LAotCQkJCQkJTFJVX0FDVElWRV9GSUxFKTsKLQkJdW5ldmljdGFibGUgPSBtZW1fY2dyb3VwX2dldF9hbGxfem9uZXN0YXQobWVtX2NvbnQsCi0JCQkJCQkJTFJVX1VORVZJQ1RBQkxFKTsKLQotCQljYi0+ZmlsbChjYiwgImFjdGl2ZV9hbm9uIiwgKGFjdGl2ZV9hbm9uKSAqIFBBR0VfU0laRSk7Ci0JCWNiLT5maWxsKGNiLCAiaW5hY3RpdmVfYW5vbiIsIChpbmFjdGl2ZV9hbm9uKSAqIFBBR0VfU0laRSk7Ci0JCWNiLT5maWxsKGNiLCAiYWN0aXZlX2ZpbGUiLCAoYWN0aXZlX2ZpbGUpICogUEFHRV9TSVpFKTsKLQkJY2ItPmZpbGwoY2IsICJpbmFjdGl2ZV9maWxlIiwgKGluYWN0aXZlX2ZpbGUpICogUEFHRV9TSVpFKTsKLQkJY2ItPmZpbGwoY2IsICJ1bmV2aWN0YWJsZSIsIHVuZXZpY3RhYmxlICogUEFHRV9TSVpFKTsKLQotCX0KKwkvKiBIaWVyYXJjaGljYWwgaW5mb3JtYXRpb24gKi8KIAl7CiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBsaW1pdCwgbWVtc3dfbGltaXQ7CiAJCW1lbWNnX2dldF9oaWVyYXJjaGljYWxfbGltaXQobWVtX2NvbnQsICZsaW1pdCwgJm1lbXN3X2xpbWl0KTsKQEAgLTE5NDksNiArMjEzOCwxMiBAQAogCQkJY2ItPmZpbGwoY2IsICJoaWVyYXJjaGljYWxfbWVtc3dfbGltaXQiLCBtZW1zd19saW1pdCk7CiAJfQogCisJbWVtc2V0KCZteXN0YXQsIDAsIHNpemVvZihteXN0YXQpKTsKKwltZW1fY2dyb3VwX2dldF90b3RhbF9zdGF0KG1lbV9jb250LCAmbXlzdGF0KTsKKwlmb3IgKGkgPSAwOyBpIDwgTlJfTUNTX1NUQVQ7IGkrKykKKwkJY2ItPmZpbGwoY2IsIG1lbWNnX3N0YXRfc3RyaW5nc1tpXS50b3RhbF9uYW1lLCBteXN0YXQuc3RhdFtpXSk7CisKKwogI2lmZGVmIENPTkZJR19ERUJVR19WTQogCWNiLT5maWxsKGNiLCAiaW5hY3RpdmVfcmF0aW8iLCBjYWxjX2luYWN0aXZlX3JhdGlvKG1lbV9jb250LCBOVUxMKSk7CiAKQEAgLTIxNzgsNiArMjM3Myw4IEBACiB7CiAJaW50IG5vZGU7CiAKKwlmcmVlX2Nzc19pZCgmbWVtX2Nncm91cF9zdWJzeXMsICZtZW0tPmNzcyk7CisKIAlmb3JfZWFjaF9ub2RlX3N0YXRlKG5vZGUsIE5fUE9TU0lCTEUpCiAJCWZyZWVfbWVtX2Nncm91cF9wZXJfem9uZV9pbmZvKG1lbSwgbm9kZSk7CiAKQEAgLTIyMjgsMTEgKzI0MjUsMTIgQEAKIG1lbV9jZ3JvdXBfY3JlYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY29udCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCAqcGFyZW50OworCWxvbmcgZXJyb3IgPSAtRU5PTUVNOwogCWludCBub2RlOwogCiAJbWVtID0gbWVtX2Nncm91cF9hbGxvYygpOwogCWlmICghbWVtKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCiAJZm9yX2VhY2hfbm9kZV9zdGF0ZShub2RlLCBOX1BPU1NJQkxFKQogCQlpZiAoYWxsb2NfbWVtX2Nncm91cF9wZXJfem9uZV9pbmZvKG1lbSwgbm9kZSkpCkBAIC0yMjYwLDcgKzI0NTgsNyBAQAogCQlyZXNfY291bnRlcl9pbml0KCZtZW0tPnJlcywgTlVMTCk7CiAJCXJlc19jb3VudGVyX2luaXQoJm1lbS0+bWVtc3csIE5VTEwpOwogCX0KLQltZW0tPmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IE5VTEw7CisJbWVtLT5sYXN0X3NjYW5uZWRfY2hpbGQgPSAwOwogCXNwaW5fbG9ja19pbml0KCZtZW0tPnJlY2xhaW1fcGFyYW1fbG9jayk7CiAKIAlpZiAocGFyZW50KQpAQCAtMjI2OSwyNiArMjQ2NywyMiBAQAogCXJldHVybiAmbWVtLT5jc3M7CiBmcmVlX291dDoKIAlfX21lbV9jZ3JvdXBfZnJlZShtZW0pOwotCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCXJldHVybiBFUlJfUFRSKGVycm9yKTsKIH0KIAotc3RhdGljIHZvaWQgbWVtX2Nncm91cF9wcmVfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfcHJlX2Rlc3Ryb3koc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAogCQkJCQlzdHJ1Y3QgY2dyb3VwICpjb250KQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBtZW1fY2dyb3VwX2Zyb21fY29udChjb250KTsKLQltZW1fY2dyb3VwX2ZvcmNlX2VtcHR5KG1lbSwgZmFsc2UpOworCisJcmV0dXJuIG1lbV9jZ3JvdXBfZm9yY2VfZW1wdHkobWVtLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCiAJCQkJc3RydWN0IGNncm91cCAqY29udCkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtID0gbWVtX2Nncm91cF9mcm9tX2NvbnQoY29udCk7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKmxhc3Rfc2Nhbm5lZF9jaGlsZCA9IG1lbS0+bGFzdF9zY2FubmVkX2NoaWxkOwogCi0JaWYgKGxhc3Rfc2Nhbm5lZF9jaGlsZCkgewotCQlWTV9CVUdfT04oIW1lbV9jZ3JvdXBfaXNfb2Jzb2xldGUobGFzdF9zY2FubmVkX2NoaWxkKSk7Ci0JCW1lbV9jZ3JvdXBfcHV0KGxhc3Rfc2Nhbm5lZF9jaGlsZCk7Ci0JfQogCW1lbV9jZ3JvdXBfcHV0KG1lbSk7CiB9CiAKQEAgLTIzMjcsNiArMjUyMSw3IEBACiAJLnBvcHVsYXRlID0gbWVtX2Nncm91cF9wb3B1bGF0ZSwKIAkuYXR0YWNoID0gbWVtX2Nncm91cF9tb3ZlX3Rhc2ssCiAJLmVhcmx5X2luaXQgPSAwLAorCS51c2VfaWQgPSAxLAogfTsKIAogI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSX1NXQVAKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggMjAzMmFkMi4uY2Y2ODczZSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTExNTEsNiArMTE1MSwxMSBAQAogCQlpZiAoKGZsYWdzICYgRk9MTF9XUklURSkgJiYKIAkJICAgICFwdGVfZGlydHkocHRlKSAmJiAhUGFnZURpcnR5KHBhZ2UpKQogCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisJCS8qCisJCSAqIHB0ZV9ta3lvdW5nKCkgd291bGQgYmUgbW9yZSBjb3JyZWN0IGhlcmUsIGJ1dCBhdG9taWMgY2FyZQorCQkgKiBpcyBuZWVkZWQgdG8gYXZvaWQgbG9zaW5nIHRoZSBkaXJ0eSBiaXQ6IGl0IGlzIGVhc2llciB0byB1c2UKKwkJICogbWFya19wYWdlX2FjY2Vzc2VkKCkuCisJCSAqLwogCQltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7CiAJfQogdW5sb2NrOgpAQCAtMTk0MCw2ICsxOTQ1LDE1IEBACiAJCSAqIGdldF91c2VyX3BhZ2VzKC53cml0ZT0xLCAuZm9yY2U9MSkuCiAJCSAqLwogCQlpZiAodm1hLT52bV9vcHMgJiYgdm1hLT52bV9vcHMtPnBhZ2VfbWt3cml0ZSkgeworCQkJc3RydWN0IHZtX2ZhdWx0IHZtZjsKKwkJCWludCB0bXA7CisKKwkJCXZtZi52aXJ0dWFsX2FkZHJlc3MgPSAodm9pZCBfX3VzZXIgKikoYWRkcmVzcyAmCisJCQkJCQkJCVBBR0VfTUFTSyk7CisJCQl2bWYucGdvZmYgPSBvbGRfcGFnZS0+aW5kZXg7CisJCQl2bWYuZmxhZ3MgPSBGQVVMVF9GTEFHX1dSSVRFfEZBVUxUX0ZMQUdfTUtXUklURTsKKwkJCXZtZi5wYWdlID0gb2xkX3BhZ2U7CisKIAkJCS8qCiAJCQkgKiBOb3RpZnkgdGhlIGFkZHJlc3Mgc3BhY2UgdGhhdCB0aGUgcGFnZSBpcyBhYm91dCB0bwogCQkJICogYmVjb21lIHdyaXRhYmxlIHNvIHRoYXQgaXQgY2FuIHByb2hpYml0IHRoaXMgb3Igd2FpdApAQCAtMTk1MSw4ICsxOTY1LDEyIEBACiAJCQlwYWdlX2NhY2hlX2dldChvbGRfcGFnZSk7CiAJCQlwdGVfdW5tYXBfdW5sb2NrKHBhZ2VfdGFibGUsIHB0bCk7CiAKLQkJCWlmICh2bWEtPnZtX29wcy0+cGFnZV9ta3dyaXRlKHZtYSwgb2xkX3BhZ2UpIDwgMCkKKwkJCXRtcCA9IHZtYS0+dm1fb3BzLT5wYWdlX21rd3JpdGUodm1hLCAmdm1mKTsKKwkJCWlmICh1bmxpa2VseSh0bXAgJgorCQkJCQkoVk1fRkFVTFRfRVJST1IgfCBWTV9GQVVMVF9OT1BBR0UpKSkgeworCQkJCXJldCA9IHRtcDsKIAkJCQlnb3RvIHVud3JpdGFibGVfcGFnZTsKKwkJCX0KIAogCQkJLyoKIAkJCSAqIFNpbmNlIHdlIGRyb3BwZWQgdGhlIGxvY2sgd2UgbmVlZCB0byByZXZhbGlkYXRlCkBAIC0yMTAxLDcgKzIxMTksNyBAQAogCiB1bndyaXRhYmxlX3BhZ2U6CiAJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKLQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0yNDM1LDggKzI0NTMsNiBAQAogCQljb3VudF92bV9ldmVudChQR01BSkZBVUxUKTsKIAl9CiAKLQltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7Ci0KIAlsb2NrX3BhZ2UocGFnZSk7CiAJZGVsYXlhY2N0X2NsZWFyX2ZsYWcoREVMQVlBQ0NUX1BGX1NXQVBJTik7CiAKQEAgLTI2NDUsOSArMjY2MSwxNCBAQAogCQkJICogdG8gYmVjb21lIHdyaXRhYmxlCiAJCQkgKi8KIAkJCWlmICh2bWEtPnZtX29wcy0+cGFnZV9ta3dyaXRlKSB7CisJCQkJaW50IHRtcDsKKwogCQkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJCWlmICh2bWEtPnZtX29wcy0+cGFnZV9ta3dyaXRlKHZtYSwgcGFnZSkgPCAwKSB7Ci0JCQkJCXJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKKwkJCQl2bWYuZmxhZ3MgfD0gRkFVTFRfRkxBR19NS1dSSVRFOworCQkJCXRtcCA9IHZtYS0+dm1fb3BzLT5wYWdlX21rd3JpdGUodm1hLCAmdm1mKTsKKwkJCQlpZiAodW5saWtlbHkodG1wICYKKwkJCQkJICAoVk1fRkFVTFRfRVJST1IgfCBWTV9GQVVMVF9OT1BBR0UpKSkgeworCQkJCQlyZXQgPSB0bXA7CiAJCQkJCWFub24gPSAxOyAvKiBubyBhbm9uIGJ1dCByZWxlYXNlIHZtZi5wYWdlICovCiAJCQkJCWdvdG8gb3V0X3VubG9ja2VkOwogCQkJCX0KZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCBhOWVmZjNmLi4wNjg2NTVkOCAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtMjUwLDcgKzI1MCw3IEBACiAgKiBUaGUgbnVtYmVyIG9mIHJlbWFpbmluZyByZWZlcmVuY2VzIG11c3QgYmU6CiAgKiAxIGZvciBhbm9ueW1vdXMgcGFnZXMgd2l0aG91dCBhIG1hcHBpbmcKICAqIDIgZm9yIHBhZ2VzIHdpdGggYSBtYXBwaW5nCi0gKiAzIGZvciBwYWdlcyB3aXRoIGEgbWFwcGluZyBhbmQgUGFnZVByaXZhdGUgc2V0LgorICogMyBmb3IgcGFnZXMgd2l0aCBhIG1hcHBpbmcgYW5kIFBhZ2VQcml2YXRlL1BhZ2VQcml2YXRlMiBzZXQuCiAgKi8KIHN0YXRpYyBpbnQgbWlncmF0ZV9wYWdlX21vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJc3RydWN0IHBhZ2UgKm5ld3BhZ2UsIHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtMjcwLDcgKzI3MCw3IEBACiAJcHNsb3QgPSByYWRpeF90cmVlX2xvb2t1cF9zbG90KCZtYXBwaW5nLT5wYWdlX3RyZWUsCiAgCQkJCQlwYWdlX2luZGV4KHBhZ2UpKTsKIAotCWV4cGVjdGVkX2NvdW50ID0gMiArICEhUGFnZVByaXZhdGUocGFnZSk7CisJZXhwZWN0ZWRfY291bnQgPSAyICsgISFwYWdlX2hhc19wcml2YXRlKHBhZ2UpOwogCWlmIChwYWdlX2NvdW50KHBhZ2UpICE9IGV4cGVjdGVkX2NvdW50IHx8CiAJCQkoc3RydWN0IHBhZ2UgKilyYWRpeF90cmVlX2RlcmVmX3Nsb3QocHNsb3QpICE9IHBhZ2UpIHsKIAkJc3Bpbl91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwpAQCAtMzg2LDcgKzM4Niw3IEBACiAKIC8qCiAgKiBDb21tb24gbG9naWMgdG8gZGlyZWN0bHkgbWlncmF0ZSBhIHNpbmdsZSBwYWdlIHN1aXRhYmxlIGZvcgotICogcGFnZXMgdGhhdCBkbyBub3QgdXNlIFBhZ2VQcml2YXRlLgorICogcGFnZXMgdGhhdCBkbyBub3QgdXNlIFBhZ2VQcml2YXRlL1BhZ2VQcml2YXRlMi4KICAqCiAgKiBQYWdlcyBhcmUgbG9ja2VkIHVwb24gZW50cnkgYW5kIGV4aXQuCiAgKi8KQEAgLTUyMiw3ICs1MjIsNyBAQAogCSAqIEJ1ZmZlcnMgbWF5IGJlIG1hbmFnZWQgaW4gYSBmaWxlc3lzdGVtIHNwZWNpZmljIHdheS4KIAkgKiBXZSBtdXN0IGhhdmUgbm8gYnVmZmVycyBvciBkcm9wIHRoZW0uCiAJICovCi0JaWYgKFBhZ2VQcml2YXRlKHBhZ2UpICYmCisJaWYgKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkgJiYKIAkgICAgIXRyeV90b19yZWxlYXNlX3BhZ2UocGFnZSwgR0ZQX0tFUk5FTCkpCiAJCXJldHVybiAtRUFHQUlOOwogCkBAIC02NTUsNyArNjU1LDcgQEAKIAkgKiBmcmVlIHRoZSBtZXRhZGF0YSwgc28gdGhlIHBhZ2UgY2FuIGJlIGZyZWVkLgogCSAqLwogCWlmICghcGFnZS0+bWFwcGluZykgewotCQlpZiAoIVBhZ2VBbm9uKHBhZ2UpICYmIFBhZ2VQcml2YXRlKHBhZ2UpKSB7CisJCWlmICghUGFnZUFub24ocGFnZSkgJiYgcGFnZV9oYXNfcHJpdmF0ZShwYWdlKSkgewogCQkJLyoKIAkJCSAqIEdvIGRpcmVjdCB0byB0cnlfdG9fZnJlZV9idWZmZXJzKCkgaGVyZSBiZWNhdXNlCiAJCQkgKiBhKSB0aGF0J3Mgd2hhdCB0cnlfdG9fcmVsZWFzZV9wYWdlKCkgd291bGQgZG8gYW55d2F5CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggMWFiYjkxOC4uNGEzODQxMSAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMjQ4MSw3ICsyNDgxLDQgQEAKICAqLwogdm9pZCBfX2luaXQgbW1hcF9pbml0KHZvaWQpCiB7Ci0Jdm1fYXJlYV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidm1fYXJlYV9zdHJ1Y3QiLAotCQkJc2l6ZW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCksIDAsCi0JCQlTTEFCX1BBTklDLCBOVUxMKTsKIH0KZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IDJmY2Y0N2QuLjcyZWRhNGEgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtNjksNyArNjksNyBAQAogaW50IHN5c2N0bF9ucl90cmltX3BhZ2VzID0gMTsgLyogcGFnZSB0cmltbWluZyBiZWhhdmlvdXIgKi8KIGludCBoZWFwX3N0YWNrX2dhcCA9IDA7CiAKLWF0b21pY190IG1tYXBfcGFnZXNfYWxsb2NhdGVkOworYXRvbWljX2xvbmdfdCBtbWFwX3BhZ2VzX2FsbG9jYXRlZDsKIAogRVhQT1JUX1NZTUJPTChtZW1fbWFwKTsKIEVYUE9SVF9TWU1CT0wobnVtX3BoeXNwYWdlcyk7CkBAIC00NjMsMTIgKzQ2Myw3IEBACiAgKi8KIHZvaWQgX19pbml0IG1tYXBfaW5pdCh2b2lkKQogewotCXZtX3JlZ2lvbl9qYXIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidm1fcmVnaW9uX2phciIsCi0JCQkJCSAgc2l6ZW9mKHN0cnVjdCB2bV9yZWdpb24pLCAwLAotCQkJCQkgIFNMQUJfUEFOSUMsIE5VTEwpOwotCXZtX2FyZWFfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoInZtX2FyZWFfc3RydWN0IiwKLQkJCQkJICAgc2l6ZW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCksIDAsCi0JCQkJCSAgIFNMQUJfUEFOSUMsIE5VTEwpOworCXZtX3JlZ2lvbl9qYXIgPSBLTUVNX0NBQ0hFKHZtX3JlZ2lvbiwgU0xBQl9QQU5JQyk7CiB9CiAKIC8qCkBAIC00ODYsMjcgKzQ4MSwyNCBAQAogCQlyZXR1cm47CiAKIAlsYXN0ID0gcmJfZW50cnkobGFzdHAsIHN0cnVjdCB2bV9yZWdpb24sIHZtX3JiKTsKLQlpZiAodW5saWtlbHkobGFzdC0+dm1fZW5kIDw9IGxhc3QtPnZtX3N0YXJ0KSkKLQkJQlVHKCk7Ci0JaWYgKHVubGlrZWx5KGxhc3QtPnZtX3RvcCA8IGxhc3QtPnZtX2VuZCkpCi0JCUJVRygpOworCUJVR19PTih1bmxpa2VseShsYXN0LT52bV9lbmQgPD0gbGFzdC0+dm1fc3RhcnQpKTsKKwlCVUdfT04odW5saWtlbHkobGFzdC0+dm1fdG9wIDwgbGFzdC0+dm1fZW5kKSk7CiAKIAl3aGlsZSAoKHAgPSByYl9uZXh0KGxhc3RwKSkpIHsKIAkJcmVnaW9uID0gcmJfZW50cnkocCwgc3RydWN0IHZtX3JlZ2lvbiwgdm1fcmIpOwogCQlsYXN0ID0gcmJfZW50cnkobGFzdHAsIHN0cnVjdCB2bV9yZWdpb24sIHZtX3JiKTsKIAotCQlpZiAodW5saWtlbHkocmVnaW9uLT52bV9lbmQgPD0gcmVnaW9uLT52bV9zdGFydCkpCi0JCQlCVUcoKTsKLQkJaWYgKHVubGlrZWx5KHJlZ2lvbi0+dm1fdG9wIDwgcmVnaW9uLT52bV9lbmQpKQotCQkJQlVHKCk7Ci0JCWlmICh1bmxpa2VseShyZWdpb24tPnZtX3N0YXJ0IDwgbGFzdC0+dm1fdG9wKSkKLQkJCUJVRygpOworCQlCVUdfT04odW5saWtlbHkocmVnaW9uLT52bV9lbmQgPD0gcmVnaW9uLT52bV9zdGFydCkpOworCQlCVUdfT04odW5saWtlbHkocmVnaW9uLT52bV90b3AgPCByZWdpb24tPnZtX2VuZCkpOworCQlCVUdfT04odW5saWtlbHkocmVnaW9uLT52bV9zdGFydCA8IGxhc3QtPnZtX3RvcCkpOwogCiAJCWxhc3RwID0gcDsKIAl9CiB9CiAjZWxzZQotI2RlZmluZSB2YWxpZGF0ZV9ub21tdV9yZWdpb25zKCkgZG8ge30gd2hpbGUoMCkKK3N0YXRpYyB2b2lkIHZhbGlkYXRlX25vbW11X3JlZ2lvbnModm9pZCkKK3sKK30KICNlbmRpZgogCiAvKgpAQCAtNTYzLDE2ICs1NTUsMTcgQEAKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoZnJvbSk7CiAKIAkJa2RlYnVnKCItIGZyZWUgJWx4IiwgZnJvbSk7Ci0JCWF0b21pY19kZWMoJm1tYXBfcGFnZXNfYWxsb2NhdGVkKTsKKwkJYXRvbWljX2xvbmdfZGVjKCZtbWFwX3BhZ2VzX2FsbG9jYXRlZCk7CiAJCWlmIChwYWdlX2NvdW50KHBhZ2UpICE9IDEpCi0JCQlrZGVidWcoImZyZWUgcGFnZSAlcCBbJWRdIiwgcGFnZSwgcGFnZV9jb3VudChwYWdlKSk7CisJCQlrZGVidWcoImZyZWUgcGFnZSAlcDogcmVmY291bnQgbm90IG9uZTogJWQiLAorCQkJICAgICAgIHBhZ2UsIHBhZ2VfY291bnQocGFnZSkpOwogCQlwdXRfcGFnZShwYWdlKTsKIAl9CiB9CiAKIC8qCiAgKiByZWxlYXNlIGEgcmVmZXJlbmNlIHRvIGEgcmVnaW9uCi0gKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSByZWdpb24gc2VtYXBob3JlLCB3aGljaCB0aGlzIHJlbGVhc2VzCisgKiAtIHRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSByZWdpb24gc2VtYXBob3JlIGZvciB3cml0aW5nLCB3aGljaCB0aGlzIHJlbGVhc2VzCiAgKiAtIHRoZSByZWdpb24gbWF5IG5vdCBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIHRyZWUgeWV0LCBpbiB3aGljaCBjYXNlIHZtX3RvcAogICogICB3aWxsIGVxdWFsIHZtX3N0YXJ0CiAgKi8KQEAgLTEwOTYsNyArMTA4OSw3IEBACiAJCWdvdG8gZW5vbWVtOwogCiAJdG90YWwgPSAxIDw8IG9yZGVyOwotCWF0b21pY19hZGQodG90YWwsICZtbWFwX3BhZ2VzX2FsbG9jYXRlZCk7CisJYXRvbWljX2xvbmdfYWRkKHRvdGFsLCAmbW1hcF9wYWdlc19hbGxvY2F0ZWQpOwogCiAJcG9pbnQgPSBybGVuID4+IFBBR0VfU0hJRlQ7CiAKQEAgLTExMDcsNyArMTEwMCw3IEBACiAJCQlvcmRlciA9IGlsb2cyKHRvdGFsIC0gcG9pbnQpOwogCQkJbiA9IDEgPDwgb3JkZXI7CiAJCQlrZGVidWcoInNoYXZlICVsdS8lbHUgQCVsdSIsIG4sIHRvdGFsIC0gcG9pbnQsIHRvdGFsKTsKLQkJCWF0b21pY19zdWIobiwgJm1tYXBfcGFnZXNfYWxsb2NhdGVkKTsKKwkJCWF0b21pY19sb25nX3N1YihuLCAmbW1hcF9wYWdlc19hbGxvY2F0ZWQpOwogCQkJdG90YWwgLT0gbjsKIAkJCXNldF9wYWdlX3JlZmNvdW50ZWQocGFnZXMgKyB0b3RhbCk7CiAJCQlfX2ZyZWVfcGFnZXMocGFnZXMgKyB0b3RhbCwgb3JkZXIpOwpAQCAtMTUzNiwxMCArMTUyOSwxNSBAQAogCS8qIGZpbmQgdGhlIGZpcnN0IHBvdGVudGlhbGx5IG92ZXJsYXBwaW5nIFZNQSAqLwogCXZtYSA9IGZpbmRfdm1hKG1tLCBzdGFydCk7CiAJaWYgKCF2bWEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIm11bm1hcCBvZiBtZW1vcnkgbm90IG1tYXBwZWQgYnkgcHJvY2VzcyAlZCAoJXMpOiIKLQkJICAgICAgICIgMHglbHgtMHglbHhcbiIsCi0JCSAgICAgICBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIHN0YXJ0LCBzdGFydCArIGxlbiAtIDEpOworCQlzdGF0aWMgaW50IGxpbWl0ID0gMDsKKwkJaWYgKGxpbWl0IDwgNSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJtdW5tYXAgb2YgbWVtb3J5IG5vdCBtbWFwcGVkIGJ5IHByb2Nlc3MgJWQiCisJCQkgICAgICAgIiAoJXMpOiAweCVseC0weCVseFxuIiwKKwkJCSAgICAgICBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sCisJCQkgICAgICAgc3RhcnQsIHN0YXJ0ICsgbGVuIC0gMSk7CisJCQlsaW1pdCsrOworCQl9CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggNDBiYTA1MC4uMmYzMTY2ZSAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYworKysgYi9tbS9vb21fa2lsbC5jCkBAIC01NSw3ICs1NSw3IEBACiAKIHVuc2lnbmVkIGxvbmcgYmFkbmVzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgdXB0aW1lKQogewotCXVuc2lnbmVkIGxvbmcgcG9pbnRzLCBjcHVfdGltZSwgcnVuX3RpbWUsIHM7CisJdW5zaWduZWQgbG9uZyBwb2ludHMsIGNwdV90aW1lLCBydW5fdGltZTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkOwogCkBAIC0xMTAsMTIgKzExMCwxMCBAQAogCWVsc2UKIAkJcnVuX3RpbWUgPSAwOwogCi0JcyA9IGludF9zcXJ0KGNwdV90aW1lKTsKLQlpZiAocykKLQkJcG9pbnRzIC89IHM7Ci0JcyA9IGludF9zcXJ0KGludF9zcXJ0KHJ1bl90aW1lKSk7Ci0JaWYgKHMpCi0JCXBvaW50cyAvPSBzOworCWlmIChjcHVfdGltZSkKKwkJcG9pbnRzIC89IGludF9zcXJ0KGNwdV90aW1lKTsKKwlpZiAocnVuX3RpbWUpCisJCXBvaW50cyAvPSBpbnRfc3FydChpbnRfc3FydChydW5fdGltZSkpOwogCiAJLyoKIAkgKiBOaWNlZCBwcm9jZXNzZXMgYXJlIG1vc3QgbGlrZWx5IGxlc3MgaW1wb3J0YW50LCBzbyBkb3VibGUKQEAgLTM5Niw2ICszOTQsNyBAQAogCQljcHVzZXRfcHJpbnRfdGFza19tZW1zX2FsbG93ZWQoY3VycmVudCk7CiAJCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwogCQlkdW1wX3N0YWNrKCk7CisJCW1lbV9jZ3JvdXBfcHJpbnRfb29tX2luZm8obWVtLCBjdXJyZW50KTsKIAkJc2hvd19tZW0oKTsKIAkJaWYgKHN5c2N0bF9vb21fZHVtcF90YXNrcykKIAkJCWR1bXBfdGFza3MobWVtKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDQwY2E3Y2QuLjMwMzUxZjAgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtOTIsMTQgKzkyLDE0IEBACiB1bnNpZ25lZCBsb25nIHZtX2RpcnR5X2J5dGVzOwogCiAvKgotICogVGhlIGludGVydmFsIGJldHdlZW4gYGt1cGRhdGUnLXN0eWxlIHdyaXRlYmFja3MsIGluIGppZmZpZXMKKyAqIFRoZSBpbnRlcnZhbCBiZXR3ZWVuIGBrdXBkYXRlJy1zdHlsZSB3cml0ZWJhY2tzCiAgKi8KLWludCBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwgPSA1ICogSFo7Cit1bnNpZ25lZCBpbnQgZGlydHlfd3JpdGViYWNrX2ludGVydmFsID0gNSAqIDEwMDsgLyogc2VudGlzZWNvbmRzICovCiAKIC8qCi0gKiBUaGUgbG9uZ2VzdCBudW1iZXIgb2YgamlmZmllcyBmb3Igd2hpY2ggZGF0YSBpcyBhbGxvd2VkIHRvIHJlbWFpbiBkaXJ0eQorICogVGhlIGxvbmdlc3QgdGltZSBmb3Igd2hpY2ggZGF0YSBpcyBhbGxvd2VkIHRvIHJlbWFpbiBkaXJ0eQogICovCi1pbnQgZGlydHlfZXhwaXJlX2ludGVydmFsID0gMzAgKiBIWjsKK3Vuc2lnbmVkIGludCBkaXJ0eV9leHBpcmVfaW50ZXJ2YWwgPSAzMCAqIDEwMDsgLyogc2VudGlzZWNvbmRzICovCiAKIC8qCiAgKiBGbGFnIHRoYXQgbWFrZXMgdGhlIG1hY2hpbmUgZHVtcCB3cml0ZXMvcmVhZHMgYW5kIGJsb2NrIGRpcnR5aW5ncy4KQEAgLTc3MCw5ICs3NzAsOSBAQAogCiAJc3luY19zdXBlcnMoKTsKIAotCW9sZGVzdF9qaWYgPSBqaWZmaWVzIC0gZGlydHlfZXhwaXJlX2ludGVydmFsOworCW9sZGVzdF9qaWYgPSBqaWZmaWVzIC0gbXNlY3NfdG9famlmZmllcyhkaXJ0eV9leHBpcmVfaW50ZXJ2YWwpOwogCXN0YXJ0X2ppZiA9IGppZmZpZXM7Ci0JbmV4dF9qaWYgPSBzdGFydF9qaWYgKyBkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWw7CisJbmV4dF9qaWYgPSBzdGFydF9qaWYgKyBtc2Vjc190b19qaWZmaWVzKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCAqIDEwKTsKIAlucl90b193cml0ZSA9IGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfRElSVFkpICsKIAkJCWdsb2JhbF9wYWdlX3N0YXRlKE5SX1VOU1RBQkxFX05GUykgKwogCQkJKGlub2Rlc19zdGF0Lm5yX2lub2RlcyAtIGlub2Rlc19zdGF0Lm5yX3VudXNlZCk7CkBAIC04MDEsOSArODAxLDEwIEBACiBpbnQgZGlydHlfd3JpdGViYWNrX2NlbnRpc2Vjc19oYW5kbGVyKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAlzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5ndGgsIGxvZmZfdCAqcHBvcykKIHsKLQlwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKHRhYmxlLCB3cml0ZSwgZmlsZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOworCXByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBmaWxlLCBidWZmZXIsIGxlbmd0aCwgcHBvcyk7CiAJaWYgKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCkKLQkJbW9kX3RpbWVyKCZ3Yl90aW1lciwgamlmZmllcyArIGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCk7CisJCW1vZF90aW1lcigmd2JfdGltZXIsIGppZmZpZXMgKworCQkJbXNlY3NfdG9famlmZmllcyhkaXJ0eV93cml0ZWJhY2tfaW50ZXJ2YWwgKiAxMCkpOwogCWVsc2UKIAkJZGVsX3RpbWVyKCZ3Yl90aW1lcik7CiAJcmV0dXJuIDA7CkBAIC05MDUsNyArOTA2LDggQEAKIHsKIAlpbnQgc2hpZnQ7CiAKLQltb2RfdGltZXIoJndiX3RpbWVyLCBqaWZmaWVzICsgZGlydHlfd3JpdGViYWNrX2ludGVydmFsKTsKKwltb2RfdGltZXIoJndiX3RpbWVyLAorCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCAqIDEwKSk7CiAJd3JpdGViYWNrX3NldF9yYXRlbGltaXQoKTsKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnJhdGVsaW1pdF9uYik7CiAKQEAgLTExOTgsNiArMTIwMCwyMCBAQAogfQogCiAvKgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBzZXRfcGFnZV9kaXJ0eSBmYW1pbHkuCisgKiBOT1RFOiBUaGlzIHJlbGllcyBvbiBiZWluZyBhdG9taWMgd3J0IGludGVycnVwdHMuCisgKi8KK3ZvaWQgYWNjb3VudF9wYWdlX2RpcnRpZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQoreworCWlmIChtYXBwaW5nX2NhcF9hY2NvdW50X2RpcnR5KG1hcHBpbmcpKSB7CisJCV9faW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GSUxFX0RJUlRZKTsKKwkJX19pbmNfYmRpX3N0YXQobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbywgQkRJX1JFQ0xBSU1BQkxFKTsKKwkJdGFza19kaXJ0eV9pbmMoY3VycmVudCk7CisJCXRhc2tfaW9fYWNjb3VudF93cml0ZShQQUdFX0NBQ0hFX1NJWkUpOworCX0KK30KKworLyoKICAqIEZvciBhZGRyZXNzX3NwYWNlcyB3aGljaCBkbyBub3QgdXNlIGJ1ZmZlcnMuICBKdXN0IHRhZyB0aGUgcGFnZSBhcyBkaXJ0eSBpbgogICogaXRzIHJhZGl4IHRyZWUuCiAgKgpAQCAtMTIyNiwxMyArMTI0Miw3IEBACiAJCWlmIChtYXBwaW5nMikgeyAvKiBSYWNlIHdpdGggdHJ1bmNhdGU/ICovCiAJCQlCVUdfT04obWFwcGluZzIgIT0gbWFwcGluZyk7CiAJCQlXQVJOX09OX09OQ0UoIVBhZ2VQcml2YXRlKHBhZ2UpICYmICFQYWdlVXB0b2RhdGUocGFnZSkpOwotCQkJaWYgKG1hcHBpbmdfY2FwX2FjY291bnRfZGlydHkobWFwcGluZykpIHsKLQkJCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9ESVJUWSk7Ci0JCQkJX19pbmNfYmRpX3N0YXQobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbywKLQkJCQkJCUJESV9SRUNMQUlNQUJMRSk7Ci0JCQkJdGFza19kaXJ0eV9pbmMoY3VycmVudCk7Ci0JCQkJdGFza19pb19hY2NvdW50X3dyaXRlKFBBR0VfQ0FDSEVfU0laRSk7Ci0JCQl9CisJCQlhY2NvdW50X3BhZ2VfZGlydGllZChwYWdlLCBtYXBwaW5nKTsKIAkJCXJhZGl4X3RyZWVfdGFnX3NldCgmbWFwcGluZy0+cGFnZV90cmVlLAogCQkJCXBhZ2VfaW5kZXgocGFnZSksIFBBR0VDQUNIRV9UQUdfRElSVFkpOwogCQl9CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggYTM4MDNlYS4uZTJmMjY5OSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMzMxLDcgKzMzMSw3IEBACiAJZm9yIChpID0gMTsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKIAkJc3RydWN0IHBhZ2UgKnAgPSBwYWdlICsgaTsKIAotCQlpZiAodW5saWtlbHkoIVBhZ2VUYWlsKHApIHwgKHAtPmZpcnN0X3BhZ2UgIT0gcGFnZSkpKSB7CisJCWlmICh1bmxpa2VseSghUGFnZVRhaWwocCkgfHwgKHAtPmZpcnN0X3BhZ2UgIT0gcGFnZSkpKSB7CiAJCQliYWRfcGFnZShwYWdlKTsKIAkJCWJhZCsrOwogCQl9CkBAIC05MjIsMTMgKzkyMiwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHpvbmUgKnpvbmU7CiAKLQlmb3JfZWFjaF96b25lKHpvbmUpIHsKKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CiAJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzZXQ7CiAJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7CiAKLQkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKLQkJCWNvbnRpbnVlOwotCiAJCXBzZXQgPSB6b25lX3BjcCh6b25lLCBjcHUpOwogCiAJCXBjcCA9ICZwc2V0LT5wY3A7CkBAIC0xNTg1LDcgKzE1ODIsOCBAQAogCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOwogCXAtPnJlY2xhaW1fc3RhdGUgPSAmcmVjbGFpbV9zdGF0ZTsKIAotCWRpZF9zb21lX3Byb2dyZXNzID0gdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIG9yZGVyLCBnZnBfbWFzayk7CisJZGlkX3NvbWVfcHJvZ3Jlc3MgPSB0cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgb3JkZXIsCisJCQkJCQlnZnBfbWFzaywgbm9kZW1hc2spOwogCiAJcC0+cmVjbGFpbV9zdGF0ZSA9IE5VTEw7CiAJbG9ja2RlcF9jbGVhcl9jdXJyZW50X3JlY2xhaW1fc3RhdGUoKTsKQEAgLTE4NzksMTAgKzE4NzcsNyBAQAogCWludCBjcHU7CiAJc3RydWN0IHpvbmUgKnpvbmU7CiAKLQlmb3JfZWFjaF96b25lKHpvbmUpIHsKLQkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKLQkJCWNvbnRpbnVlOwotCisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogCQlzaG93X25vZGUoem9uZSk7CiAJCXByaW50aygiJXMgcGVyLWNwdTpcbiIsIHpvbmUtPm5hbWUpOwogCkBAIC0xOTIyLDEyICsxOTE3LDkgQEAKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfUEFHRVRBQkxFKSwKIAkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQk9VTkNFKSk7CiAKLQlmb3JfZWFjaF96b25lKHpvbmUpIHsKKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CiAJCWludCBpOwogCi0JCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCi0JCQljb250aW51ZTsKLQogCQlzaG93X25vZGUoem9uZSk7CiAJCXByaW50aygiJXMiCiAJCQkiIGZyZWU6JWx1a0IiCkBAIC0xOTY3LDEyICsxOTU5LDkgQEAKIAkJcHJpbnRrKCJcbiIpOwogCX0KIAotCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKICAJCXVuc2lnbmVkIGxvbmcgbnJbTUFYX09SREVSXSwgZmxhZ3MsIG9yZGVyLCB0b3RhbCA9IDA7CiAKLQkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKLQkJCWNvbnRpbnVlOwotCiAJCXNob3dfbm9kZSh6b25lKTsKIAkJcHJpbnRrKCIlczogIiwgem9uZS0+bmFtZSk7CiAKQEAgLTIxMzksNyArMjEyOCw3IEBACiAJaW50IG4sIHZhbDsKIAlpbnQgbWluX3ZhbCA9IElOVF9NQVg7CiAJaW50IGJlc3Rfbm9kZSA9IC0xOwotCW5vZGVfdG9fY3B1bWFza19wdHIodG1wLCAwKTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqdG1wID0gY3B1bWFza19vZl9ub2RlKDApOwogCiAJLyogVXNlIHRoZSBsb2NhbCBub2RlIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSAqLwogCWlmICghbm9kZV9pc3NldChub2RlLCAqdXNlZF9ub2RlX21hc2spKSB7CkBAIC0yMTYwLDggKzIxNDksOCBAQAogCQl2YWwgKz0gKG4gPCBub2RlKTsKIAogCQkvKiBHaXZlIHByZWZlcmVuY2UgdG8gaGVhZGxlc3MgYW5kIHVudXNlZCBub2RlcyAqLwotCQlub2RlX3RvX2NwdW1hc2tfcHRyX25leHQodG1wLCBuKTsKLQkJaWYgKCFjcHVzX2VtcHR5KCp0bXApKQorCQl0bXAgPSBjcHVtYXNrX29mX25vZGUobik7CisJCWlmICghY3B1bWFza19lbXB0eSh0bXApKQogCQkJdmFsICs9IFBFTkFMVFlfRk9SX05PREVfV0lUSF9DUFVTOwogCiAJCS8qIFNsaWdodCBwcmVmZXJlbmNlIGZvciBsZXNzIGxvYWRlZCBub2RlICovCkBAIC0yNzg0LDExICsyNzczLDcgQEAKIAogCW5vZGVfc2V0X3N0YXRlKG5vZGUsIE5fQ1BVKTsJLyogdGhpcyBub2RlIGhhcyBhIGNwdSAqLwogCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7Ci0KLQkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKLQkJCWNvbnRpbnVlOwotCisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgewogCQl6b25lX3BjcCh6b25lLCBjcHUpID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0KSwKIAkJCQkJIEdGUF9LRVJORUwsIG5vZGUpOwogCQlpZiAoIXpvbmVfcGNwKHpvbmUsIGNwdSkpCmRpZmYgLS1naXQgYS9tbS9wYWdlX2Nncm91cC5jIGIvbW0vcGFnZV9jZ3JvdXAuYwppbmRleCBjZWVjZmJiLi43OTE5MDVjIDEwMDY0NAotLS0gYS9tbS9wYWdlX2Nncm91cC5jCisrKyBiL21tL3BhZ2VfY2dyb3VwLmMKQEAgLTI4NSwxMiArMjg1LDggQEAKIAogc3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgc3dhcF9jZ3JvdXBfY3RybFtNQVhfU1dBUEZJTEVTXTsKIAotLyoKLSAqIFRoaXMgOGJ5dGVzIHNlZW1zIGJpZy4ubWF5YmUgd2UgY2FuIHJlZHVjZSB0aGlzIHdoZW4gd2UgY2FuIHVzZSAiaWQiIGZvcgotICogY2dyb3VwIHJhdGhlciB0aGFuIHBvaW50ZXIuCi0gKi8KIHN0cnVjdCBzd2FwX2Nncm91cCB7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAJKnZhbDsKKwl1bnNpZ25lZCBzaG9ydAkJaWQ7CiB9OwogI2RlZmluZSBTQ19QRVJfUEFHRQkoUEFHRV9TSVpFL3NpemVvZihzdHJ1Y3Qgc3dhcF9jZ3JvdXApKQogI2RlZmluZSBTQ19QT1NfTUFTSwkoU0NfUEVSX1BBR0UgLSAxKQpAQCAtMzQyLDEwICszMzgsMTAgQEAKICAqIEBlbnQ6IHN3YXAgZW50cnkgdG8gYmUgcmVjb3JkZWQgaW50bwogICogQG1lbTogbWVtX2Nncm91cCB0byBiZSByZWNvcmRlZAogICoKLSAqIFJldHVybnMgb2xkIHZhbHVlIGF0IHN1Y2Nlc3MsIE5VTEwgYXQgZmFpbHVyZS4KLSAqIChPZiBjb3Vyc2UsIG9sZCB2YWx1ZSBjYW4gYmUgTlVMTC4pCisgKiBSZXR1cm5zIG9sZCB2YWx1ZSBhdCBzdWNjZXNzLCAwIGF0IGZhaWx1cmUuCisgKiAoT2YgY291cnNlLCBvbGQgdmFsdWUgY2FuIGJlIDAuKQogICovCi1zdHJ1Y3QgbWVtX2Nncm91cCAqc3dhcF9jZ3JvdXBfcmVjb3JkKHN3cF9lbnRyeV90IGVudCwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSkKK3Vuc2lnbmVkIHNob3J0IHN3YXBfY2dyb3VwX3JlY29yZChzd3BfZW50cnlfdCBlbnQsIHVuc2lnbmVkIHNob3J0IGlkKQogewogCWludCB0eXBlID0gc3dwX3R5cGUoZW50KTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHN3cF9vZmZzZXQoZW50KTsKQEAgLTM1NCwxOCArMzUwLDE4IEBACiAJc3RydWN0IHN3YXBfY2dyb3VwX2N0cmwgKmN0cmw7CiAJc3RydWN0IHBhZ2UgKm1hcHBhZ2U7CiAJc3RydWN0IHN3YXBfY2dyb3VwICpzYzsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqb2xkOworCXVuc2lnbmVkIHNob3J0IG9sZDsKIAogCWlmICghZG9fc3dhcF9hY2NvdW50KQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIDA7CiAKIAljdHJsID0gJnN3YXBfY2dyb3VwX2N0cmxbdHlwZV07CiAKIAltYXBwYWdlID0gY3RybC0+bWFwW2lkeF07CiAJc2MgPSBwYWdlX2FkZHJlc3MobWFwcGFnZSk7CiAJc2MgKz0gcG9zOwotCW9sZCA9IHNjLT52YWw7Ci0Jc2MtPnZhbCA9IG1lbTsKKwlvbGQgPSBzYy0+aWQ7CisJc2MtPmlkID0gaWQ7CiAKIAlyZXR1cm4gb2xkOwogfQpAQCAtMzc0LDkgKzM3MCw5IEBACiAgKiBsb29rdXBfc3dhcF9jZ3JvdXAgLSBsb29rdXAgbWVtX2Nncm91cCB0aWVkIHRvIHN3YXAgZW50cnkKICAqIEBlbnQ6IHN3YXAgZW50cnkgdG8gYmUgbG9va2VkIHVwLgogICoKLSAqIFJldHVybnMgcG9pbnRlciB0byBtZW1fY2dyb3VwIGF0IHN1Y2Nlc3MuIE5VTEwgYXQgZmFpbHVyZS4KKyAqIFJldHVybnMgQ1NTIElEIG9mIG1lbV9jZ3JvdXAgYXQgc3VjY2Vzcy4gMCBhdCBmYWlsdXJlLiAoMCBpcyBpbnZhbGlkIElEKQogICovCi1zdHJ1Y3QgbWVtX2Nncm91cCAqbG9va3VwX3N3YXBfY2dyb3VwKHN3cF9lbnRyeV90IGVudCkKK3Vuc2lnbmVkIHNob3J0IGxvb2t1cF9zd2FwX2Nncm91cChzd3BfZW50cnlfdCBlbnQpCiB7CiAJaW50IHR5cGUgPSBzd3BfdHlwZShlbnQpOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnQpOwpAQCAtMzg1LDE2ICszODEsMTYgQEAKIAlzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCAqY3RybDsKIAlzdHJ1Y3QgcGFnZSAqbWFwcGFnZTsKIAlzdHJ1Y3Qgc3dhcF9jZ3JvdXAgKnNjOwotCXN0cnVjdCBtZW1fY2dyb3VwICpyZXQ7CisJdW5zaWduZWQgc2hvcnQgcmV0OwogCiAJaWYgKCFkb19zd2FwX2FjY291bnQpCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gMDsKIAogCWN0cmwgPSAmc3dhcF9jZ3JvdXBfY3RybFt0eXBlXTsKIAltYXBwYWdlID0gY3RybC0+bWFwW2lkeF07CiAJc2MgPSBwYWdlX2FkZHJlc3MobWFwcGFnZSk7CiAJc2MgKz0gcG9zOwotCXJldCA9IHNjLT52YWw7CisJcmV0ID0gc2MtPmlkOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQzMCwxMyArNDI2LDYgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZzd2FwX2Nncm91cF9tdXRleCk7CiAKLQlwcmludGsoS0VSTl9JTkZPCi0JCSJzd2FwX2Nncm91cDogdXNlcyAlbGQgYnl0ZXMgb2Ygdm1hbGxvYyBmb3IgcG9pbnRlciBhcnJheSBzcGFjZSIKLQkJIiBhbmQgJWxkIGJ5dGVzIHRvIGhvbGQgbWVtX2Nncm91cCBwb2ludGVycyBvbiBzd2FwXG4iLAotCQlhcnJheV9zaXplLCBsZW5ndGggKiBQQUdFX1NJWkUpOwotCXByaW50ayhLRVJOX0lORk8KLQkic3dhcF9jZ3JvdXAgY2FuIGJlIGRpc2FibGVkIGJ5IG5vc3dhcGFjY291bnQgYm9vdCBvcHRpb24uXG4iKTsKLQogCXJldHVybiAwOwogbm9tZW06CiAJcHJpbnRrKEtFUk5fSU5GTyAiY291bGRuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3Igc3dhcF9jZ3JvdXAuXG4iKTsKZGlmZiAtLWdpdCBhL21tL3F1aWNrbGlzdC5jIGIvbW0vcXVpY2tsaXN0LmMKaW5kZXggOGRiYjY4MC4uZTY2ZDA3ZCAxMDA2NDQKLS0tIGEvbW0vcXVpY2tsaXN0LmMKKysrIGIvbW0vcXVpY2tsaXN0LmMKQEAgLTI5LDcgKzI5LDcgQEAKIAlpbnQgbm9kZSA9IG51bWFfbm9kZV9pZCgpOwogCXN0cnVjdCB6b25lICp6b25lcyA9IE5PREVfREFUQShub2RlKS0+bm9kZV96b25lczsKIAlpbnQgbnVtX2NwdXNfb25fbm9kZTsKLQlub2RlX3RvX2NwdW1hc2tfcHRyKGNwdW1hc2tfb25fbm9kZSwgbm9kZSk7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2tfb25fbm9kZSA9IGNwdW1hc2tfb2Zfbm9kZShub2RlKTsKIAogCW5vZGVfZnJlZV9wYWdlcyA9CiAjaWZkZWYgQ09ORklHX1pPTkVfRE1BCmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jCmluZGV4IDljZTMwM2QuLjEzM2I2ZDUgMTAwNjQ0Ci0tLSBhL21tL3JlYWRhaGVhZC5jCisrKyBiL21tL3JlYWRhaGVhZC5jCkBAIC0zMSw2ICszMSw0MiBAQAogCiAjZGVmaW5lIGxpc3RfdG9fcGFnZShoZWFkKSAobGlzdF9lbnRyeSgoaGVhZCktPnByZXYsIHN0cnVjdCBwYWdlLCBscnUpKQogCisvKgorICogc2VlIGlmIGEgcGFnZSBuZWVkcyByZWxlYXNpbmcgdXBvbiByZWFkX2NhY2hlX3BhZ2VzKCkgZmFpbHVyZQorICogLSB0aGUgY2FsbGVyIG9mIHJlYWRfY2FjaGVfcGFnZXMoKSBtYXkgaGF2ZSBzZXQgUEdfcHJpdmF0ZSBvciBQR19mc2NhY2hlCisgKiAgIGJlZm9yZSBjYWxsaW5nLCBzdWNoIGFzIHRoZSBORlMgZnMgbWFya2luZyBwYWdlcyB0aGF0IGFyZSBjYWNoZWQgbG9jYWxseQorICogICBvbiBkaXNrLCB0aHVzIHdlIG5lZWQgdG8gZ2l2ZSB0aGUgZnMgYSBjaGFuY2UgdG8gY2xlYW4gdXAgaW4gdGhlIGV2ZW50IG9mCisgKiAgIGFuIGVycm9yCisgKi8KK3N0YXRpYyB2b2lkIHJlYWRfY2FjaGVfcGFnZXNfaW52YWxpZGF0ZV9wYWdlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJCQkgICAgIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpKSB7CisJCWlmICghdHJ5bG9ja19wYWdlKHBhZ2UpKQorCQkJQlVHKCk7CisJCXBhZ2UtPm1hcHBpbmcgPSBtYXBwaW5nOworCQlkb19pbnZhbGlkYXRlcGFnZShwYWdlLCAwKTsKKwkJcGFnZS0+bWFwcGluZyA9IE5VTEw7CisJCXVubG9ja19wYWdlKHBhZ2UpOworCX0KKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Cit9CisKKy8qCisgKiByZWxlYXNlIGEgbGlzdCBvZiBwYWdlcywgaW52YWxpZGF0aW5nIHRoZW0gZmlyc3QgaWYgbmVlZCBiZQorICovCitzdGF0aWMgdm9pZCByZWFkX2NhY2hlX3BhZ2VzX2ludmFsaWRhdGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzKQoreworCXN0cnVjdCBwYWdlICp2aWN0aW07CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkocGFnZXMpKSB7CisJCXZpY3RpbSA9IGxpc3RfdG9fcGFnZShwYWdlcyk7CisJCWxpc3RfZGVsKCZ2aWN0aW0tPmxydSk7CisJCXJlYWRfY2FjaGVfcGFnZXNfaW52YWxpZGF0ZV9wYWdlKG1hcHBpbmcsIHZpY3RpbSk7CisJfQorfQorCiAvKioKICAqIHJlYWRfY2FjaGVfcGFnZXMgLSBwb3B1bGF0ZSBhbiBhZGRyZXNzIHNwYWNlIHdpdGggc29tZSBwYWdlcyAmIHN0YXJ0IHJlYWRzIGFnYWluc3QgdGhlbQogICogQG1hcHBpbmc6IHRoZSBhZGRyZXNzX3NwYWNlCkBAIC01MiwxNCArODgsMTQgQEAKIAkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CiAJCWlmIChhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywKIAkJCQkJcGFnZS0+aW5kZXgsIEdGUF9LRVJORUwpKSB7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCQlyZWFkX2NhY2hlX3BhZ2VzX2ludmFsaWRhdGVfcGFnZShtYXBwaW5nLCBwYWdlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAogCQlyZXQgPSBmaWxsZXIoZGF0YSwgcGFnZSk7CiAJCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCQlwdXRfcGFnZXNfbGlzdChwYWdlcyk7CisJCQlyZWFkX2NhY2hlX3BhZ2VzX2ludmFsaWRhdGVfcGFnZXMobWFwcGluZywgcGFnZXMpOwogCQkJYnJlYWs7CiAJCX0KIAkJdGFza19pb19hY2NvdW50X3JlYWQoUEFHRV9DQUNIRV9TSVpFKTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDdlYzc4ZTIuLmQ5NGQyZTkgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMTA2OCw4ICsxMDY4LDcgQEAKIAkJc3dhcF9kdXBsaWNhdGUoc3dhcCk7CiAJCUJVR19PTihwYWdlX21hcHBlZChwYWdlKSk7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsJLyogcGFnZWNhY2hlIHJlZiAqLwotCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXN3YXBfd3JpdGVwYWdlKHBhZ2UsIHdiYyk7CiAJCWlmIChpbm9kZSkgewogCQkJbXV0ZXhfbG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwogCQkJLyogbW92ZSBpbnN0ZWFkIG9mIGFkZCBpbiBjYXNlIHdlJ3JlIHJhY2luZyAqLwpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IDgyNWM2MDYuLjRmYzE3NjEgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTEwMiw2ICsxMDIsNyBAQAogI2luY2x1ZGUJPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUJPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUJPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUJPHRyYWNlL2ttZW10cmFjZS5oPgogI2luY2x1ZGUJPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZQk8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZQk8bGludXgvdWFjY2Vzcy5oPgpAQCAtNTY4LDYgKzU2OSwxNCBAQAogCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKK3NpemVfdCBzbGFiX2J1ZmZlcl9zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApCit7CisJcmV0dXJuIGNhY2hlcC0+YnVmZmVyX3NpemU7Cit9CitFWFBPUlRfU1lNQk9MKHNsYWJfYnVmZmVyX3NpemUpOworI2VuZGlmCisKIC8qCiAgKiBEbyBub3QgZ28gYWJvdmUgdGhpcyBvcmRlciB1bmxlc3MgMCBvYmplY3RzIGZpdCBpbnRvIHRoZSBzbGFiLgogICovCkBAIC0xMTYwLDcgKzExNjksNyBAQAogCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7CiAJc3RydWN0IGttZW1fbGlzdDMgKmwzID0gTlVMTDsKIAlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7Ci0Jbm9kZV90b19jcHVtYXNrX3B0cihtYXNrLCBub2RlKTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayA9IGNwdW1hc2tfb2Zfbm9kZShub2RlKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FjaGVwLCAmY2FjaGVfY2hhaW4sIG5leHQpIHsKIAkJc3RydWN0IGFycmF5X2NhY2hlICpuYzsKQEAgLTM1NTQsMTAgKzM1NjMsMjMgQEAKICAqLwogdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBmbGFncykKIHsKLQlyZXR1cm4gX19jYWNoZV9hbGxvYyhjYWNoZXAsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXZvaWQgKnJldCA9IF9fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKworCWttZW10cmFjZV9tYXJrX2FsbG9jKEtNRU1UUkFDRV9UWVBFX0NBQ0hFLCBfUkVUX0lQXywgcmV0LAorCQkJICAgICBvYmpfc2l6ZShjYWNoZXApLCBjYWNoZXAtPmJ1ZmZlcl9zaXplLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jKTsKIAorI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKK3ZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm90cmFjZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBmbGFncykKK3sKKwlyZXR1cm4gX19jYWNoZV9hbGxvYyhjYWNoZXAsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworfQorRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2FsbG9jX25vdHJhY2UpOworI2VuZGlmCisKIC8qKgogICoga21lbV9wdHJfdmFsaWRhdGUgLSBjaGVjayBpZiBhbiB1bnRydXN0ZWQgcG9pbnRlciBtaWdodCBiZSBhIHNsYWIgZW50cnkuCiAgKiBAY2FjaGVwOiB0aGUgY2FjaGUgd2UncmUgY2hlY2tpbmcgYWdhaW5zdApAQCAtMzYwMiwyMyArMzYyNCw0NyBAQAogI2lmZGVmIENPTkZJR19OVU1BCiB2b2lkICprbWVtX2NhY2hlX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlaWQpCiB7Ci0JcmV0dXJuIF9fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAsIGZsYWdzLCBub2RlaWQsCi0JCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCXZvaWQgKnJldCA9IF9fY2FjaGVfYWxsb2Nfbm9kZShjYWNoZXAsIGZsYWdzLCBub2RlaWQsCisJCQkJICAgICAgIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CisKKwlrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKEtNRU1UUkFDRV9UWVBFX0NBQ0hFLCBfUkVUX0lQXywgcmV0LAorCQkJCSAgb2JqX3NpemUoY2FjaGVwKSwgY2FjaGVwLT5idWZmZXJfc2l6ZSwKKwkJCQkgIGZsYWdzLCBub2RlaWQpOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlKTsKIAorI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKK3ZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsCisJCQkJICAgIGdmcF90IGZsYWdzLAorCQkJCSAgICBpbnQgbm9kZWlkKQoreworCXJldHVybiBfX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgbm9kZWlkLAorCQkJCSAgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKK30KK0VYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2UpOworI2VuZGlmCisKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqCiBfX2RvX2ttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlLCB2b2lkICpjYWxsZXIpCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcDsKKwl2b2lkICpyZXQ7CiAKIAljYWNoZXAgPSBrbWVtX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZSwgZmxhZ3MpOwogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKGNhY2hlcCkpKQogCQlyZXR1cm4gY2FjaGVwOwotCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgbm9kZSk7CisJcmV0ID0ga21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2UoY2FjaGVwLCBmbGFncywgbm9kZSk7CisKKwlrbWVtdHJhY2VfbWFya19hbGxvY19ub2RlKEtNRU1UUkFDRV9UWVBFX0tNQUxMT0MsCisJCQkJICAodW5zaWduZWQgbG9uZykgY2FsbGVyLCByZXQsCisJCQkJICBzaXplLCBjYWNoZXAtPmJ1ZmZlcl9zaXplLCBmbGFncywgbm9kZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NMQUIKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19TTEFCKSB8fCBkZWZpbmVkKENPTkZJR19LTUVNVFJBQ0UpCiB2b2lkICpfX2ttYWxsb2Nfbm9kZShzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCBub2RlKQogewogCXJldHVybiBfX2RvX2ttYWxsb2Nfbm9kZShzaXplLCBmbGFncywgbm9kZSwKQEAgLTM2NTEsNiArMzY5Nyw3IEBACiAJCQkJCSAgdm9pZCAqY2FsbGVyKQogewogCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7CisJdm9pZCAqcmV0OwogCiAJLyogSWYgeW91IHdhbnQgdG8gc2F2ZSBhIGZldyBieXRlcyAudGV4dCBzcGFjZTogcmVwbGFjZQogCSAqIF9fIHdpdGgga21lbV8uCkBAIC0zNjYwLDExICszNzA3LDE3IEBACiAJY2FjaGVwID0gX19maW5kX2dlbmVyYWxfY2FjaGVwKHNpemUsIGZsYWdzKTsKIAlpZiAodW5saWtlbHkoWkVST19PUl9OVUxMX1BUUihjYWNoZXApKSkKIAkJcmV0dXJuIGNhY2hlcDsKLQlyZXR1cm4gX19jYWNoZV9hbGxvYyhjYWNoZXAsIGZsYWdzLCBjYWxsZXIpOworCXJldCA9IF9fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncywgY2FsbGVyKTsKKworCWttZW10cmFjZV9tYXJrX2FsbG9jKEtNRU1UUkFDRV9UWVBFX0tNQUxMT0MsCisJCQkgICAgICh1bnNpZ25lZCBsb25nKSBjYWxsZXIsIHJldCwKKwkJCSAgICAgc2l6ZSwgY2FjaGVwLT5idWZmZXJfc2l6ZSwgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIAogCi0jaWZkZWYgQ09ORklHX0RFQlVHX1NMQUIKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19TTEFCKSB8fCBkZWZpbmVkKENPTkZJR19LTUVNVFJBQ0UpCiB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCXJldHVybiBfX2RvX2ttYWxsb2Moc2l6ZSwgZmxhZ3MsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CkBAIC0zNzAzLDYgKzM3NTYsOCBAQAogCQlkZWJ1Z19jaGVja19ub19vYmpfZnJlZWQob2JqcCwgb2JqX3NpemUoY2FjaGVwKSk7CiAJX19jYWNoZV9mcmVlKGNhY2hlcCwgb2JqcCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJa21lbXRyYWNlX21hcmtfZnJlZShLTUVNVFJBQ0VfVFlQRV9DQUNIRSwgX1JFVF9JUF8sIG9ianApOwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2ZyZWUpOwogCkBAIC0zNzI5LDYgKzM3ODQsOCBAQAogCWRlYnVnX2NoZWNrX25vX29ial9mcmVlZChvYmpwLCBvYmpfc2l6ZShjKSk7CiAJX19jYWNoZV9mcmVlKGMsICh2b2lkICopb2JqcCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJa21lbXRyYWNlX21hcmtfZnJlZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLCBfUkVUX0lQXywgb2JqcCk7CiB9CiBFWFBPUlRfU1lNQk9MKGtmcmVlKTsKIApAQCAtMzk5Miw4ICs0MDQ5LDcgQEAKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqc2VhcmNocDsKIAlzdHJ1Y3Qga21lbV9saXN0MyAqbDM7CiAJaW50IG5vZGUgPSBudW1hX25vZGVfaWQoKTsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrICp3b3JrID0KLQkJY29udGFpbmVyX29mKHcsIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOworCXN0cnVjdCBkZWxheWVkX3dvcmsgKndvcmsgPSB0b19kZWxheWVkX3dvcmsodyk7CiAKIAlpZiAoIW11dGV4X3RyeWxvY2soJmNhY2hlX2NoYWluX211dGV4KSkKIAkJLyogR2l2ZSB1cC4gU2V0dXAgdGhlIG5leHQgaXRlcmF0aW9uLiAqLwpkaWZmIC0tZ2l0IGEvbW0vc2xvYi5jIGIvbW0vc2xvYi5jCmluZGV4IDdhMzQxMTUuLjRkZDY1MTYgMTAwNjQ0Ci0tLSBhL21tL3Nsb2IuYworKysgYi9tbS9zbG9iLmMKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDx0cmFjZS9rbWVtdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIC8qCkBAIC00NzQsNiArNDc1LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgKm07CiAJaW50IGFsaWduID0gbWF4KEFSQ0hfS01BTExPQ19NSU5BTElHTiwgQVJDSF9TTEFCX01JTkFMSUdOKTsKKwl2b2lkICpyZXQ7CiAKIAlsb2NrZGVwX3RyYWNlX2FsbG9jKGdmcCk7CiAKQEAgLTQ4MiwxMiArNDg0LDE3IEBACiAJCQlyZXR1cm4gWkVST19TSVpFX1BUUjsKIAogCQltID0gc2xvYl9hbGxvYyhzaXplICsgYWxpZ24sIGdmcCwgYWxpZ24sIG5vZGUpOworCiAJCWlmICghbSkKIAkJCXJldHVybiBOVUxMOwogCQkqbSA9IHNpemU7Ci0JCXJldHVybiAodm9pZCAqKW0gKyBhbGlnbjsKKwkJcmV0ID0gKHZvaWQgKiltICsgYWxpZ247CisKKwkJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLAorCQkJCQkgIF9SRVRfSVBfLCByZXQsCisJCQkJCSAgc2l6ZSwgc2l6ZSArIGFsaWduLCBnZnAsIG5vZGUpOwogCX0gZWxzZSB7Ci0JCXZvaWQgKnJldDsKKwkJdW5zaWduZWQgaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOwogCiAJCXJldCA9IHNsb2JfbmV3X3BhZ2VzKGdmcCB8IF9fR0ZQX0NPTVAsIGdldF9vcmRlcihzaXplKSwgbm9kZSk7CiAJCWlmIChyZXQpIHsKQEAgLTQ5NSw4ICs1MDIsMTMgQEAKIAkJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UocmV0KTsKIAkJCXBhZ2UtPnByaXZhdGUgPSBzaXplOwogCQl9Ci0JCXJldHVybiByZXQ7CisKKwkJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLAorCQkJCQkgIF9SRVRfSVBfLCByZXQsCisJCQkJCSAgc2l6ZSwgUEFHRV9TSVpFIDw8IG9yZGVyLCBnZnAsIG5vZGUpOwogCX0KKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKF9fa21hbGxvY19ub2RlKTsKIApAQCAtNTE0LDYgKzUyNiw4IEBACiAJCXNsb2JfZnJlZShtLCAqbSArIGFsaWduKTsKIAl9IGVsc2UKIAkJcHV0X3BhZ2UoJnNwLT5wYWdlKTsKKworCWttZW10cmFjZV9tYXJrX2ZyZWUoS01FTVRSQUNFX1RZUEVfS01BTExPQywgX1JFVF9JUF8sIGJsb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woa2ZyZWUpOwogCkBAIC01ODMsMTAgKzU5NywxOSBAQAogewogCXZvaWQgKmI7CiAKLQlpZiAoYy0+c2l6ZSA8IFBBR0VfU0laRSkKKwlpZiAoYy0+c2l6ZSA8IFBBR0VfU0laRSkgewogCQliID0gc2xvYl9hbGxvYyhjLT5zaXplLCBmbGFncywgYy0+YWxpZ24sIG5vZGUpOwotCWVsc2UKKwkJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9DQUNIRSwKKwkJCQkJICBfUkVUX0lQXywgYiwgYy0+c2l6ZSwKKwkJCQkJICBTTE9CX1VOSVRTKGMtPnNpemUpICogU0xPQl9VTklULAorCQkJCQkgIGZsYWdzLCBub2RlKTsKKwl9IGVsc2UgewogCQliID0gc2xvYl9uZXdfcGFnZXMoZmxhZ3MsIGdldF9vcmRlcihjLT5zaXplKSwgbm9kZSk7CisJCWttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoS01FTVRSQUNFX1RZUEVfQ0FDSEUsCisJCQkJCSAgX1JFVF9JUF8sIGIsIGMtPnNpemUsCisJCQkJCSAgUEFHRV9TSVpFIDw8IGdldF9vcmRlcihjLT5zaXplKSwKKwkJCQkJICBmbGFncywgbm9kZSk7CisJfQogCiAJaWYgKGMtPmN0b3IpCiAJCWMtPmN0b3IoYik7CkBAIC02MjIsNiArNjQ1LDggQEAKIAl9IGVsc2UgewogCQlfX2ttZW1fY2FjaGVfZnJlZShiLCBjLT5zaXplKTsKIAl9CisKKwlrbWVtdHJhY2VfbWFya19mcmVlKEtNRU1UUkFDRV9UWVBFX0NBQ0hFLCBfUkVUX0lQXywgYik7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZSk7CiAKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCBjNGVhOTE1Li43YWFhMTIxIDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPHRyYWNlL2ttZW10cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdXNldC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvbGljeS5oPgpAQCAtMTYxOCwxOCArMTYxOSw0NiBAQAogCiB2b2lkICprbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncykKIHsKLQlyZXR1cm4gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgLTEsIF9SRVRfSVBfKTsKKwl2b2lkICpyZXQgPSBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCAtMSwgX1JFVF9JUF8pOworCisJa21lbXRyYWNlX21hcmtfYWxsb2MoS01FTVRSQUNFX1RZUEVfQ0FDSEUsIF9SRVRfSVBfLCByZXQsCisJCQkgICAgIHMtPm9ianNpemUsIHMtPnNpemUsIGdmcGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2MpOwogCisjaWZkZWYgQ09ORklHX0tNRU1UUkFDRQordm9pZCAqa21lbV9jYWNoZV9hbGxvY19ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncykKK3sKKwlyZXR1cm4gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgLTEsIF9SRVRfSVBfKTsKK30KK0VYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub3RyYWNlKTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX05VTUEKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwZmxhZ3MsIGludCBub2RlKQogewotCXJldHVybiBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBfUkVUX0lQXyk7CisJdm9pZCAqcmV0ID0gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgbm9kZSwgX1JFVF9JUF8pOworCisJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9DQUNIRSwgX1JFVF9JUF8sIHJldCwKKwkJCQkgIHMtPm9ianNpemUsIHMtPnNpemUsIGdmcGZsYWdzLCBub2RlKTsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfYWxsb2Nfbm9kZSk7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19LTUVNVFJBQ0UKK3ZvaWQgKmttZW1fY2FjaGVfYWxsb2Nfbm9kZV9ub3RyYWNlKHN0cnVjdCBrbWVtX2NhY2hlICpzLAorCQkJCSAgICBnZnBfdCBnZnBmbGFncywKKwkJCQkgICAgaW50IG5vZGUpCit7CisJcmV0dXJuIHNsYWJfYWxsb2MocywgZ2ZwZmxhZ3MsIG5vZGUsIF9SRVRfSVBfKTsKK30KK0VYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvY19ub2RlX25vdHJhY2UpOworI2VuZGlmCisKIC8qCiAgKiBTbG93IHBhdGNoIGhhbmRsaW5nLiBUaGlzIG1heSBzdGlsbCBiZSBjYWxsZWQgZnJlcXVlbnRseSBzaW5jZSBvYmplY3RzCiAgKiBoYXZlIGEgbG9uZ2VyIGxpZmV0aW1lIHRoYW4gdGhlIGNwdSBzbGFicyBpbiBtb3N0IHByb2Nlc3NpbmcgbG9hZHMuCkBAIC0xNzM3LDYgKzE3NjYsOCBAQAogCXBhZ2UgPSB2aXJ0X3RvX2hlYWRfcGFnZSh4KTsKIAogCXNsYWJfZnJlZShzLCBwYWdlLCB4LCBfUkVUX0lQXyk7CisKKwlrbWVtdHJhY2VfbWFya19mcmVlKEtNRU1UUkFDRV9UWVBFX0NBQ0hFLCBfUkVUX0lQXywgeCk7CiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfZnJlZSk7CiAKQEAgLTI2NTksNiArMjY5MCw3IEBACiB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzOworCXZvaWQgKnJldDsKIAogCWlmICh1bmxpa2VseShzaXplID4gU0xVQl9NQVhfU0laRSkpCiAJCXJldHVybiBrbWFsbG9jX2xhcmdlKHNpemUsIGZsYWdzKTsKQEAgLTI2NjgsNyArMjcwMCwxMiBAQAogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKHMpKSkKIAkJcmV0dXJuIHM7CiAKLQlyZXR1cm4gc2xhYl9hbGxvYyhzLCBmbGFncywgLTEsIF9SRVRfSVBfKTsKKwlyZXQgPSBzbGFiX2FsbG9jKHMsIGZsYWdzLCAtMSwgX1JFVF9JUF8pOworCisJa21lbXRyYWNlX21hcmtfYWxsb2MoS01FTVRSQUNFX1RZUEVfS01BTExPQywgX1JFVF9JUF8sIHJldCwKKwkJCSAgICAgc2l6ZSwgcy0+c2l6ZSwgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woX19rbWFsbG9jKTsKIApAQCAtMjY4NywxNiArMjcyNCwzMCBAQAogdm9pZCAqX19rbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKKwl2b2lkICpyZXQ7CiAKLQlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQotCQlyZXR1cm4ga21hbGxvY19sYXJnZV9ub2RlKHNpemUsIGZsYWdzLCBub2RlKTsKKwlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKSB7CisJCXJldCA9IGttYWxsb2NfbGFyZ2Vfbm9kZShzaXplLCBmbGFncywgbm9kZSk7CisKKwkJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLAorCQkJCQkgIF9SRVRfSVBfLCByZXQsCisJCQkJCSAgc2l6ZSwgUEFHRV9TSVpFIDw8IGdldF9vcmRlcihzaXplKSwKKwkJCQkJICBmbGFncywgbm9kZSk7CisKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAlzID0gZ2V0X3NsYWIoc2l6ZSwgZmxhZ3MpOwogCiAJaWYgKHVubGlrZWx5KFpFUk9fT1JfTlVMTF9QVFIocykpKQogCQlyZXR1cm4gczsKIAotCXJldHVybiBzbGFiX2FsbG9jKHMsIGZsYWdzLCBub2RlLCBfUkVUX0lQXyk7CisJcmV0ID0gc2xhYl9hbGxvYyhzLCBmbGFncywgbm9kZSwgX1JFVF9JUF8pOworCisJa21lbXRyYWNlX21hcmtfYWxsb2Nfbm9kZShLTUVNVFJBQ0VfVFlQRV9LTUFMTE9DLCBfUkVUX0lQXywgcmV0LAorCQkJCSAgc2l6ZSwgcy0+c2l6ZSwgZmxhZ3MsIG5vZGUpOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woX19rbWFsbG9jX25vZGUpOwogI2VuZGlmCkBAIC0yNzU1LDYgKzI4MDYsOCBAQAogCQlyZXR1cm47CiAJfQogCXNsYWJfZnJlZShwYWdlLT5zbGFiLCBwYWdlLCBvYmplY3QsIF9SRVRfSVBfKTsKKworCWttZW10cmFjZV9tYXJrX2ZyZWUoS01FTVRSQUNFX1RZUEVfS01BTExPQywgX1JFVF9JUF8sIHgpOwogfQogRVhQT1JUX1NZTUJPTChrZnJlZSk7CiAKQEAgLTMyMjQsNiArMzI3Nyw3IEBACiB2b2lkICpfX2ttYWxsb2NfdHJhY2tfY2FsbGVyKHNpemVfdCBzaXplLCBnZnBfdCBnZnBmbGFncywgdW5zaWduZWQgbG9uZyBjYWxsZXIpCiB7CiAJc3RydWN0IGttZW1fY2FjaGUgKnM7CisJdm9pZCAqcmV0OwogCiAJaWYgKHVubGlrZWx5KHNpemUgPiBTTFVCX01BWF9TSVpFKSkKIAkJcmV0dXJuIGttYWxsb2NfbGFyZ2Uoc2l6ZSwgZ2ZwZmxhZ3MpOwpAQCAtMzIzMywxMyArMzI4NywyMCBAQAogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKHMpKSkKIAkJcmV0dXJuIHM7CiAKLQlyZXR1cm4gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgLTEsIGNhbGxlcik7CisJcmV0ID0gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgLTEsIGNhbGxlcik7CisKKwkvKiBIb25vciB0aGUgY2FsbCBzaXRlIHBvaW50ZXIgd2UgcmVjaWV2ZWQuICovCisJa21lbXRyYWNlX21hcmtfYWxsb2MoS01FTVRSQUNFX1RZUEVfS01BTExPQywgY2FsbGVyLCByZXQsIHNpemUsCisJCQkgICAgIHMtPnNpemUsIGdmcGZsYWdzKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgKl9fa21hbGxvY19ub2RlX3RyYWNrX2NhbGxlcihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwZmxhZ3MsCiAJCQkJCWludCBub2RlLCB1bnNpZ25lZCBsb25nIGNhbGxlcikKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKKwl2b2lkICpyZXQ7CiAKIAlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQogCQlyZXR1cm4ga21hbGxvY19sYXJnZV9ub2RlKHNpemUsIGdmcGZsYWdzLCBub2RlKTsKQEAgLTMyNDksNyArMzMxMCwxMyBAQAogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKHMpKSkKIAkJcmV0dXJuIHM7CiAKLQlyZXR1cm4gc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgbm9kZSwgY2FsbGVyKTsKKwlyZXQgPSBzbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBub2RlLCBjYWxsZXIpOworCisJLyogSG9ub3IgdGhlIGNhbGwgc2l0ZSBwb2ludGVyIHdlIHJlY2lldmVkLiAqLworCWttZW10cmFjZV9tYXJrX2FsbG9jX25vZGUoS01FTVRSQUNFX1RZUEVfS01BTExPQywgY2FsbGVyLCByZXQsCisJCQkJICBzaXplLCBzLT5zaXplLCBnZnBmbGFncywgbm9kZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMKaW5kZXggMDgzZjViNi4uZGE0MzJkOSAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLmMKKysrIGIvbW0vc3BhcnNlLmMKQEAgLTE2NCw5ICsxNjQsNyBAQAogCQlXQVJOX09OX09OQ0UoMSk7CiAJCSpzdGFydF9wZm4gPSBtYXhfc3BhcnNlbWVtX3BmbjsKIAkJKmVuZF9wZm4gPSBtYXhfc3BhcnNlbWVtX3BmbjsKLQl9Ci0KLQlpZiAoKmVuZF9wZm4gPiBtYXhfc3BhcnNlbWVtX3BmbikgeworCX0gZWxzZSBpZiAoKmVuZF9wZm4gPiBtYXhfc3BhcnNlbWVtX3BmbikgewogCQltbWluaXRfZHByaW50ayhNTUlOSVRfV0FSTklORywgInBmbnZhbGlkYXRpb24iLAogCQkJIkVuZCBvZiByYW5nZSAlbHUgLT4gJWx1IGV4Y2VlZHMgU1BBUlNFTUVNIG1heCAlbHVcbiIsCiAJCQkqc3RhcnRfcGZuLCAqZW5kX3BmbiwgbWF4X3NwYXJzZW1lbV9wZm4pOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jCmluZGV4IDhhZGI5ZmUuLmJlZGUyM2MgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYworKysgYi9tbS9zd2FwLmMKQEAgLTQ0OCw4ICs0NDgsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBwYWdldmVjX2NvdW50KHB2ZWMpOyBpKyspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdmVjLT5wYWdlc1tpXTsKIAotCQlpZiAoUGFnZVByaXZhdGUocGFnZSkgJiYgdHJ5bG9ja19wYWdlKHBhZ2UpKSB7Ci0JCQlpZiAoUGFnZVByaXZhdGUocGFnZSkpCisJCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpICYmIHRyeWxvY2tfcGFnZShwYWdlKSkgeworCQkJaWYgKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkpCiAJCQkJdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCAwKTsKIAkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQl9CkBAIC00NTcsMjkgKzQ1Nyw2IEBACiB9CiAKIC8qKgotICogcGFnZXZlY19zd2FwX2ZyZWUgLSB0cnkgdG8gZnJlZSBzd2FwIHNwYWNlIGZyb20gdGhlIHBhZ2VzIGluIGEgcGFnZXZlYwotICogQHB2ZWM6IHBhZ2V2ZWMgd2l0aCBzd2FwY2FjaGUgcGFnZXMgdG8gZnJlZSB0aGUgc3dhcCBzcGFjZSBvZgotICoKLSAqIFRoZSBjYWxsZXIgbmVlZHMgdG8gaG9sZCBhbiBleHRyYSByZWZlcmVuY2UgdG8gZWFjaCBwYWdlIGFuZAotICogbm90IGhvbGQgdGhlIHBhZ2UgbG9jayBvbiB0aGUgcGFnZXMuICBUaGlzIGZ1bmN0aW9uIHVzZXMgYQotICogdHJ5bG9jayBvbiB0aGUgcGFnZSBsb2NrIHNvIGl0IG1heSBub3QgYWx3YXlzIGZyZWUgdGhlIHN3YXAKLSAqIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCBhIHBhZ2UuCi0gKi8KLXZvaWQgcGFnZXZlY19zd2FwX2ZyZWUoc3RydWN0IHBhZ2V2ZWMgKnB2ZWMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcGFnZXZlY19jb3VudChwdmVjKTsgaSsrKSB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy0+cGFnZXNbaV07Ci0KLQkJaWYgKFBhZ2VTd2FwQ2FjaGUocGFnZSkgJiYgdHJ5bG9ja19wYWdlKHBhZ2UpKSB7Ci0JCQl0cnlfdG9fZnJlZV9zd2FwKHBhZ2UpOwotCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCX0KLQl9Ci19Ci0KLS8qKgogICogcGFnZXZlY19sb29rdXAgLSBnYW5nIHBhZ2VjYWNoZSBsb29rdXAKICAqIEBwdmVjOglXaGVyZSB0aGUgcmVzdWx0aW5nIHBhZ2VzIGFyZSBwbGFjZWQKICAqIEBtYXBwaW5nOglUaGUgYWRkcmVzc19zcGFjZSB0byBzZWFyY2gKZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jCmluZGV4IDEyMjkyMTEuLjU1MjA2ZmEgMTAwNjQ0Ci0tLSBhL21tL3RydW5jYXRlLmMKKysrIGIvbW0vdHJ1bmNhdGUuYwpAQCAtNTAsNyArNTAsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHRydW5jYXRlX3BhcnRpYWxfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgcGFydGlhbCkKIHsKIAl6ZXJvX3VzZXJfc2VnbWVudChwYWdlLCBwYXJ0aWFsLCBQQUdFX0NBQ0hFX1NJWkUpOwotCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkKKwlpZiAocGFnZV9oYXNfcHJpdmF0ZShwYWdlKSkKIAkJZG9faW52YWxpZGF0ZXBhZ2UocGFnZSwgcGFydGlhbCk7CiB9CiAKQEAgLTk5LDcgKzk5LDcgQEAKIAlpZiAocGFnZS0+bWFwcGluZyAhPSBtYXBwaW5nKQogCQlyZXR1cm47CiAKLQlpZiAoUGFnZVByaXZhdGUocGFnZSkpCisJaWYgKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkpCiAJCWRvX2ludmFsaWRhdGVwYWdlKHBhZ2UsIDApOwogCiAJY2FuY2VsX2RpcnR5X3BhZ2UocGFnZSwgUEFHRV9DQUNIRV9TSVpFKTsKQEAgLTEyNiw3ICsxMjYsNyBAQAogCWlmIChwYWdlLT5tYXBwaW5nICE9IG1hcHBpbmcpCiAJCXJldHVybiAwOwogCi0JaWYgKFBhZ2VQcml2YXRlKHBhZ2UpICYmICF0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIDApKQorCWlmIChwYWdlX2hhc19wcml2YXRlKHBhZ2UpICYmICF0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIDApKQogCQlyZXR1cm4gMDsKIAogCWNsZWFyX3BhZ2VfbWxvY2socGFnZSk7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIAlpZiAocGFnZS0+bWFwcGluZyAhPSBtYXBwaW5nKQogCQlyZXR1cm4gMDsKIAotCWlmIChQYWdlUHJpdmF0ZShwYWdlKSAmJiAhdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCBHRlBfS0VSTkVMKSkKKwlpZiAocGFnZV9oYXNfcHJpdmF0ZShwYWdlKSAmJiAhdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwpAQCAtMzU2LDcgKzM1Niw3IEBACiAJCWdvdG8gZmFpbGVkOwogCiAJY2xlYXJfcGFnZV9tbG9jayhwYWdlKTsKLQlCVUdfT04oUGFnZVByaXZhdGUocGFnZSkpOworCUJVR19PTihwYWdlX2hhc19wcml2YXRlKHBhZ2UpKTsKIAlfX3JlbW92ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsJLyogcGFnZWNhY2hlIHJlZiAqLwpkaWZmIC0tZ2l0IGEvbW0vdXRpbC5jIGIvbW0vdXRpbC5jCmluZGV4IDM3ZWFjY2QuLjdjMTIyZTQgMTAwNjQ0Ci0tLSBhL21tL3V0aWwuYworKysgYi9tbS91dGlsLmMKQEAgLTcwLDYgKzcwLDM2IEBACiBFWFBPUlRfU1lNQk9MKGttZW1kdXApOwogCiAvKioKKyAqIG1lbWR1cF91c2VyIC0gZHVwbGljYXRlIG1lbW9yeSByZWdpb24gZnJvbSB1c2VyIHNwYWNlCisgKgorICogQHNyYzogc291cmNlIGFkZHJlc3MgaW4gdXNlciBzcGFjZQorICogQGxlbjogbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKKyAqCisgKiBSZXR1cm5zIGFuIEVSUl9QVFIoKSBvbiBmYWlsdXJlLgorICovCit2b2lkICptZW1kdXBfdXNlcihjb25zdCB2b2lkIF9fdXNlciAqc3JjLCBzaXplX3QgbGVuKQoreworCXZvaWQgKnA7CisKKwkvKgorCSAqIEFsd2F5cyB1c2UgR0ZQX0tFUk5FTCwgc2luY2UgY29weV9mcm9tX3VzZXIoKSBjYW4gc2xlZXAgYW5kCisJICogY2F1c2UgcGFnZWZhdWx0LCB3aGljaCBtYWtlcyBpdCBwb2ludGxlc3MgdG8gdXNlIEdGUF9OT0ZTCisJICogb3IgR0ZQX0FUT01JQy4KKwkgKi8KKwlwID0ga21hbGxvY190cmFja19jYWxsZXIobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXApCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJaWYgKGNvcHlfZnJvbV91c2VyKHAsIHNyYywgbGVuKSkgeworCQlrZnJlZShwKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CisJfQorCisJcmV0dXJuIHA7Cit9CitFWFBPUlRfU1lNQk9MKG1lbWR1cF91c2VyKTsKKworLyoqCiAgKiBfX2tyZWFsbG9jIC0gbGlrZSBrcmVhbGxvYygpIGJ1dCBkb24ndCBmcmVlIEBwLgogICogQHA6IG9iamVjdCB0byByZWFsbG9jYXRlIG1lbW9yeSBmb3IuCiAgKiBAbmV3X3NpemU6IGhvdyBtYW55IGJ5dGVzIG9mIG1lbW9yeSBhcmUgcmVxdWlyZWQuCmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggYWY1ODMyNC4uZmFiMTk4NyAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCisrKyBiL21tL3ZtYWxsb2MuYwpAQCAtNjcxLDEwICs2NzEsNyBAQAogCURFQ0xBUkVfQklUTUFQKGFsbG9jX21hcCwgVk1BUF9CQk1BUF9CSVRTKTsKIAlERUNMQVJFX0JJVE1BUChkaXJ0eV9tYXAsIFZNQVBfQkJNQVBfQklUUyk7CiAJdW5pb24gewotCQlzdHJ1Y3QgewotCQkJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7Ci0JCQlzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X2xpc3Q7Ci0JCX07CisJCXN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OwogCQlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CiAJfTsKIH07CkBAIC03NDEsNyArNzM4LDYgQEAKIAliaXRtYXBfemVybyh2Yi0+YWxsb2NfbWFwLCBWTUFQX0JCTUFQX0JJVFMpOwogCWJpdG1hcF96ZXJvKHZiLT5kaXJ0eV9tYXAsIFZNQVBfQkJNQVBfQklUUyk7CiAJSU5JVF9MSVNUX0hFQUQoJnZiLT5mcmVlX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZ2Yi0+ZGlydHlfbGlzdCk7CiAKIAl2Yl9pZHggPSBhZGRyX3RvX3ZiX2lkeCh2YS0+dmFfc3RhcnQpOwogCXNwaW5fbG9jaygmdm1hcF9ibG9ja190cmVlX2xvY2spOwpAQCAtNzcyLDEyICs3NjgsNyBAQAogCXN0cnVjdCB2bWFwX2Jsb2NrICp0bXA7CiAJdW5zaWduZWQgbG9uZyB2Yl9pZHg7CiAKLQlzcGluX2xvY2soJnZiLT52YnEtPmxvY2spOwotCWlmICghbGlzdF9lbXB0eSgmdmItPmZyZWVfbGlzdCkpCi0JCWxpc3RfZGVsKCZ2Yi0+ZnJlZV9saXN0KTsKLQlpZiAoIWxpc3RfZW1wdHkoJnZiLT5kaXJ0eV9saXN0KSkKLQkJbGlzdF9kZWwoJnZiLT5kaXJ0eV9saXN0KTsKLQlzcGluX3VubG9jaygmdmItPnZicS0+bG9jayk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZ2Yi0+ZnJlZV9saXN0KSk7CiAKIAl2Yl9pZHggPSBhZGRyX3RvX3ZiX2lkeCh2Yi0+dmEtPnZhX3N0YXJ0KTsKIAlzcGluX2xvY2soJnZtYXBfYmxvY2tfdHJlZV9sb2NrKTsKQEAgLTg2MiwxMSArODUzLDcgQEAKIAogCXNwaW5fbG9jaygmdmItPmxvY2spOwogCWJpdG1hcF9hbGxvY2F0ZV9yZWdpb24odmItPmRpcnR5X21hcCwgb2Zmc2V0ID4+IFBBR0VfU0hJRlQsIG9yZGVyKTsKLQlpZiAoIXZiLT5kaXJ0eSkgewotCQlzcGluX2xvY2soJnZiLT52YnEtPmxvY2spOwotCQlsaXN0X2FkZCgmdmItPmRpcnR5X2xpc3QsICZ2Yi0+dmJxLT5kaXJ0eSk7Ci0JCXNwaW5fdW5sb2NrKCZ2Yi0+dmJxLT5sb2NrKTsKLQl9CisKIAl2Yi0+ZGlydHkgKz0gMVVMIDw8IG9yZGVyOwogCWlmICh2Yi0+ZGlydHkgPT0gVk1BUF9CQk1BUF9CSVRTKSB7CiAJCUJVR19PTih2Yi0+ZnJlZSB8fCAhbGlzdF9lbXB0eSgmdmItPmZyZWVfbGlzdCkpOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA0NzllNDY3Li4zOWZkZmIxIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtNjAsOCArNjAsOCBAQAogCiAJaW50IG1heV93cml0ZXBhZ2U7CiAKLQkvKiBDYW4gcGFnZXMgYmUgc3dhcHBlZCBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovCi0JaW50IG1heV9zd2FwOworCS8qIENhbiBtYXBwZWQgcGFnZXMgYmUgcmVjbGFpbWVkPyAqLworCWludCBtYXlfdW5tYXA7CiAKIAkvKiBUaGlzIGNvbnRleHQncyBTV0FQX0NMVVNURVJfTUFYLiBJZiBmcmVlaW5nIG1lbW9yeSBmb3IKIAkgKiBzdXNwZW5kLCB3ZSBlZmZlY3RpdmVseSBpZ25vcmUgU1dBUF9DTFVTVEVSX01BWC4KQEAgLTc4LDYgKzc4LDEyIEBACiAJLyogV2hpY2ggY2dyb3VwIGRvIHdlIHJlY2xhaW0gZnJvbSAqLwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwOwogCisJLyoKKwkgKiBOb2RlbWFzayBvZiBub2RlcyBhbGxvd2VkIGJ5IHRoZSBjYWxsZXIuIElmIE5VTEwsIGFsbCBub2RlcworCSAqIGFyZSBzY2FubmVkLgorCSAqLworCW5vZGVtYXNrX3QJKm5vZGVtYXNrOworCiAJLyogUGx1Z2dhYmxlIGlzb2xhdGUgcGFnZXMgY2FsbGJhY2sgKi8KIAl1bnNpZ25lZCBsb25nICgqaXNvbGF0ZV9wYWdlcykodW5zaWduZWQgbG9uZyBuciwgc3RydWN0IGxpc3RfaGVhZCAqZHN0LAogCQkJdW5zaWduZWQgbG9uZyAqc2Nhbm5lZCwgaW50IG9yZGVyLCBpbnQgbW9kZSwKQEAgLTIxNCw4ICsyMjAsOSBAQAogCQlkb19kaXYoZGVsdGEsIGxydV9wYWdlcyArIDEpOwogCQlzaHJpbmtlci0+bnIgKz0gZGVsdGE7CiAJCWlmIChzaHJpbmtlci0+bnIgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBucj0lbGRcbiIsCi0JCQkJCV9fZnVuY19fLCBzaHJpbmtlci0+bnIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJzaHJpbmtfc2xhYjogJXBGIG5lZ2F0aXZlIG9iamVjdHMgdG8gIgorCQkJICAgICAgICJkZWxldGUgbnI9JWxkXG4iLAorCQkJICAgICAgIHNocmlua2VyLT5zaHJpbmssIHNocmlua2VyLT5ucik7CiAJCQlzaHJpbmtlci0+bnIgPSBtYXhfcGFzczsKIAkJfQogCkBAIC0yNzYsNyArMjgzLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaXNfcGFnZV9jYWNoZV9mcmVlYWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKLQlyZXR1cm4gcGFnZV9jb3VudChwYWdlKSAtICEhUGFnZVByaXZhdGUocGFnZSkgPT0gMjsKKwlyZXR1cm4gcGFnZV9jb3VudChwYWdlKSAtICEhcGFnZV9oYXNfcHJpdmF0ZShwYWdlKSA9PSAyOwogfQogCiBzdGF0aWMgaW50IG1heV93cml0ZV90b19xdWV1ZShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpKQpAQCAtMzYwLDcgKzM2Nyw3IEBACiAJCSAqIFNvbWUgZGF0YSBqb3VybmFsaW5nIG9ycGhhbmVkIHBhZ2VzIGNhbiBoYXZlCiAJCSAqIHBhZ2UtPm1hcHBpbmcgPT0gTlVMTCB3aGlsZSBiZWluZyBkaXJ0eSB3aXRoIGNsZWFuIGJ1ZmZlcnMuCiAJCSAqLwotCQlpZiAoUGFnZVByaXZhdGUocGFnZSkpIHsKKwkJaWYgKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkpIHsKIAkJCWlmICh0cnlfdG9fZnJlZV9idWZmZXJzKHBhZ2UpKSB7CiAJCQkJQ2xlYXJQYWdlRGlydHkocGFnZSk7CiAJCQkJcHJpbnRrKCIlczogb3JwaGFuZWQgcGFnZVxuIiwgX19mdW5jX18pOwpAQCAtNjA2LDcgKzYxMyw3IEBACiAJCWlmICh1bmxpa2VseSghcGFnZV9ldmljdGFibGUocGFnZSwgTlVMTCkpKQogCQkJZ290byBjdWxsX21sb2NrZWQ7CiAKLQkJaWYgKCFzYy0+bWF5X3N3YXAgJiYgcGFnZV9tYXBwZWQocGFnZSkpCisJCWlmICghc2MtPm1heV91bm1hcCAmJiBwYWdlX21hcHBlZChwYWdlKSkKIAkJCWdvdG8ga2VlcF9sb2NrZWQ7CiAKIAkJLyogRG91YmxlIHRoZSBzbGFiIHByZXNzdXJlIGZvciBtYXBwZWQgYW5kIHN3YXBjYWNoZSBwYWdlcyAqLwpAQCAtNzIwLDcgKzcyNyw3IEBACiAJCSAqIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSAocGFnZV9jb3VudCA9PSAxKSBpdCBjYW4gYmUgZnJlZWQuCiAJCSAqIE90aGVyd2lzZSwgbGVhdmUgdGhlIHBhZ2Ugb24gdGhlIExSVSBzbyBpdCBpcyBzd2FwcGFibGUuCiAJCSAqLwotCQlpZiAoUGFnZVByaXZhdGUocGFnZSkpIHsKKwkJaWYgKHBhZ2VfaGFzX3ByaXZhdGUocGFnZSkpIHsKIAkJCWlmICghdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCBzYy0+Z2ZwX21hc2spKQogCQkJCWdvdG8gYWN0aXZhdGVfbG9ja2VkOwogCQkJaWYgKCFtYXBwaW5nICYmIHBhZ2VfY291bnQocGFnZSkgPT0gMSkgewpAQCAtMTI5OCwxNyArMTMwNSwxMSBAQAogCX0KIAlfX21vZF96b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfTFJVX0JBU0UgKyBscnUsIHBnbW92ZWQpOwogCXBnZGVhY3RpdmF0ZSArPSBwZ21vdmVkOwotCWlmIChidWZmZXJfaGVhZHNfb3Zlcl9saW1pdCkgewotCQlzcGluX3VubG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQkJcGFnZXZlY19zdHJpcCgmcHZlYyk7Ci0JCXNwaW5fbG9ja19pcnEoJnpvbmUtPmxydV9sb2NrKTsKLQl9CiAJX19jb3VudF96b25lX3ZtX2V2ZW50cyhQR1JFRklMTCwgem9uZSwgcGdzY2FubmVkKTsKIAlfX2NvdW50X3ZtX2V2ZW50cyhQR0RFQUNUSVZBVEUsIHBnZGVhY3RpdmF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxKCZ6b25lLT5scnVfbG9jayk7Ci0JaWYgKHZtX3N3YXBfZnVsbCgpKQotCQlwYWdldmVjX3N3YXBfZnJlZSgmcHZlYyk7Ci0KKwlpZiAoYnVmZmVyX2hlYWRzX292ZXJfbGltaXQpCisJCXBhZ2V2ZWNfc3RyaXAoJnB2ZWMpOwogCXBhZ2V2ZWNfcmVsZWFzZSgmcHZlYyk7CiB9CiAKQEAgLTE1NDMsNyArMTU0NCw4IEBACiAJc3RydWN0IHpvbmUgKnpvbmU7CiAKIAlzYy0+YWxsX3VucmVjbGFpbWFibGUgPSAxOwotCWZvcl9lYWNoX3pvbmVfem9uZWxpc3Qoem9uZSwgeiwgem9uZWxpc3QsIGhpZ2hfem9uZWlkeCkgeworCWZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwKKwkJCQkJc2MtPm5vZGVtYXNrKSB7CiAJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCiAJCQljb250aW51ZTsKIAkJLyoKQEAgLTE2ODgsMTcgKzE2OTAsMTggQEAKIH0KIAogdW5zaWduZWQgbG9uZyB0cnlfdG9fZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBpbnQgb3JkZXIsCi0JCQkJCQkJCWdmcF90IGdmcF9tYXNrKQorCQkJCWdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICpub2RlbWFzaykKIHsKIAlzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0gewogCQkuZ2ZwX21hc2sgPSBnZnBfbWFzaywKIAkJLm1heV93cml0ZXBhZ2UgPSAhbGFwdG9wX21vZGUsCiAJCS5zd2FwX2NsdXN0ZXJfbWF4ID0gU1dBUF9DTFVTVEVSX01BWCwKLQkJLm1heV9zd2FwID0gMSwKKwkJLm1heV91bm1hcCA9IDEsCiAJCS5zd2FwcGluZXNzID0gdm1fc3dhcHBpbmVzcywKIAkJLm9yZGVyID0gb3JkZXIsCiAJCS5tZW1fY2dyb3VwID0gTlVMTCwKIAkJLmlzb2xhdGVfcGFnZXMgPSBpc29sYXRlX3BhZ2VzX2dsb2JhbCwKKwkJLm5vZGVtYXNrID0gbm9kZW1hc2ssCiAJfTsKIAogCXJldHVybiBkb190cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgJnNjKTsKQEAgLTE3MTMsMTcgKzE3MTYsMTggQEAKIHsKIAlzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0gewogCQkubWF5X3dyaXRlcGFnZSA9ICFsYXB0b3BfbW9kZSwKLQkJLm1heV9zd2FwID0gMSwKKwkJLm1heV91bm1hcCA9IDEsCiAJCS5zd2FwX2NsdXN0ZXJfbWF4ID0gU1dBUF9DTFVTVEVSX01BWCwKIAkJLnN3YXBwaW5lc3MgPSBzd2FwcGluZXNzLAogCQkub3JkZXIgPSAwLAogCQkubWVtX2Nncm91cCA9IG1lbV9jb250LAogCQkuaXNvbGF0ZV9wYWdlcyA9IG1lbV9jZ3JvdXBfaXNvbGF0ZV9wYWdlcywKKwkJLm5vZGVtYXNrID0gTlVMTCwgLyogd2UgZG9uJ3QgY2FyZSB0aGUgcGxhY2VtZW50ICovCiAJfTsKIAlzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0OwogCiAJaWYgKG5vc3dhcCkKLQkJc2MubWF5X3N3YXAgPSAwOworCQlzYy5tYXlfdW5tYXAgPSAwOwogCiAJc2MuZ2ZwX21hc2sgPSAoZ2ZwX21hc2sgJiBHRlBfUkVDTEFJTV9NQVNLKSB8CiAJCQkoR0ZQX0hJR0hVU0VSX01PVkFCTEUgJiB+R0ZQX1JFQ0xBSU1fTUFTSyk7CkBAIC0xNzYyLDcgKzE3NjYsNyBAQAogCXN0cnVjdCByZWNsYWltX3N0YXRlICpyZWNsYWltX3N0YXRlID0gY3VycmVudC0+cmVjbGFpbV9zdGF0ZTsKIAlzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0gewogCQkuZ2ZwX21hc2sgPSBHRlBfS0VSTkVMLAotCQkubWF5X3N3YXAgPSAxLAorCQkubWF5X3VubWFwID0gMSwKIAkJLnN3YXBfY2x1c3Rlcl9tYXggPSBTV0FQX0NMVVNURVJfTUFYLAogCQkuc3dhcHBpbmVzcyA9IHZtX3N3YXBwaW5lc3MsCiAJCS5vcmRlciA9IG9yZGVyLApAQCAtMTk2Myw3ICsxOTY3LDcgQEAKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSByZWNsYWltX3N0YXRlID0gewogCQkucmVjbGFpbWVkX3NsYWIgPSAwLAogCX07Ci0Jbm9kZV90b19jcHVtYXNrX3B0cihjcHVtYXNrLCBwZ2RhdC0+bm9kZV9pZCk7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2sgPSBjcHVtYXNrX29mX25vZGUocGdkYXQtPm5vZGVfaWQpOwogCiAJbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKEdGUF9LRVJORUwpOwogCkBAIC0yMDUwLDIyICsyMDU0LDE5IEBACiAjaWZkZWYgQ09ORklHX1BNCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciBzaHJpbmtfYWxsX21lbW9yeSgpLiAgVHJpZXMgdG8gcmVjbGFpbSAnbnJfcGFnZXMnIHBhZ2VzCi0gKiBmcm9tIExSVSBsaXN0cyBzeXN0ZW0td2lkZSwgZm9yIGdpdmVuIHBhc3MgYW5kIHByaW9yaXR5LCBhbmQgcmV0dXJucyB0aGUKLSAqIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXMKKyAqIGZyb20gTFJVIGxpc3RzIHN5c3RlbS13aWRlLCBmb3IgZ2l2ZW4gcGFzcyBhbmQgcHJpb3JpdHkuCiAgKgogICogRm9yIHBhc3MgPiAzIHdlIGFsc28gdHJ5IHRvIHNocmluayB0aGUgTFJVIGxpc3RzIHRoYXQgY29udGFpbiBhIGZldyBwYWdlcwogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX3pvbmVzKHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGludCBwcmlvLAorc3RhdGljIHZvaWQgc2hyaW5rX2FsbF96b25lcyh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLCBpbnQgcHJpbywKIAkJCQkgICAgICBpbnQgcGFzcywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7Ci0JdW5zaWduZWQgbG9uZyByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDsKIAotCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKIAkJZW51bSBscnVfbGlzdCBsOwogCi0JCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCi0JCQljb250aW51ZTsKIAkJaWYgKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkgJiYgcHJpbyAhPSBERUZfUFJJT1JJVFkpCiAJCQljb250aW51ZTsKIApAQCAtMjA4NCwxNCArMjA4NSwxNiBAQAogCiAJCQkJem9uZS0+bHJ1W2xdLm5yX3NjYW4gPSAwOwogCQkJCW5yX3RvX3NjYW4gPSBtaW4obnJfcGFnZXMsIGxydV9wYWdlcyk7Ci0JCQkJcmV0ICs9IHNocmlua19saXN0KGwsIG5yX3RvX3NjYW4sIHpvbmUsCisJCQkJbnJfcmVjbGFpbWVkICs9IHNocmlua19saXN0KGwsIG5yX3RvX3NjYW4sIHpvbmUsCiAJCQkJCQkJCXNjLCBwcmlvKTsKLQkJCQlpZiAocmV0ID49IG5yX3BhZ2VzKQotCQkJCQlyZXR1cm4gcmV0OworCQkJCWlmIChucl9yZWNsYWltZWQgPj0gbnJfcGFnZXMpIHsKKwkJCQkJc2MtPm5yX3JlY2xhaW1lZCA9IG5yX3JlY2xhaW1lZDsKKwkJCQkJcmV0dXJuOworCQkJCX0KIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gcmV0OworCXNjLT5ucl9yZWNsYWltZWQgPSBucl9yZWNsYWltZWQ7CiB9CiAKIC8qCkBAIC0yMTA1LDEzICsyMTA4LDExIEBACiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBscnVfcGFnZXMsIG5yX3NsYWI7Ci0JdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCWludCBwYXNzOwogCXN0cnVjdCByZWNsYWltX3N0YXRlIHJlY2xhaW1fc3RhdGU7CiAJc3RydWN0IHNjYW5fY29udHJvbCBzYyA9IHsKIAkJLmdmcF9tYXNrID0gR0ZQX0tFUk5FTCwKLQkJLm1heV9zd2FwID0gMCwKLQkJLnN3YXBfY2x1c3Rlcl9tYXggPSBucl9wYWdlcywKKwkJLm1heV91bm1hcCA9IDAsCiAJCS5tYXlfd3JpdGVwYWdlID0gMSwKIAkJLmlzb2xhdGVfcGFnZXMgPSBpc29sYXRlX3BhZ2VzX2dsb2JhbCwKIAl9OwpAQCAtMjEyNyw4ICsyMTI4LDggQEAKIAkJaWYgKCFyZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiKQogCQkJYnJlYWs7CiAKLQkJcmV0ICs9IHJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWI7Ci0JCWlmIChyZXQgPj0gbnJfcGFnZXMpCisJCXNjLm5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOworCQlpZiAoc2MubnJfcmVjbGFpbWVkID49IG5yX3BhZ2VzKQogCQkJZ290byBvdXQ7CiAKIAkJbnJfc2xhYiAtPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOwpAQCAtMjE0NywyMSArMjE0OCwyMiBAQAogCiAJCS8qIEZvcmNlIHJlY2xhaW1pbmcgbWFwcGVkIHBhZ2VzIGluIHRoZSBwYXNzZXMgIzMgYW5kICM0ICovCiAJCWlmIChwYXNzID4gMikKLQkJCXNjLm1heV9zd2FwID0gMTsKKwkJCXNjLm1heV91bm1hcCA9IDE7CiAKIAkJZm9yIChwcmlvID0gREVGX1BSSU9SSVRZOyBwcmlvID49IDA7IHByaW8tLSkgewotCQkJdW5zaWduZWQgbG9uZyBucl90b19zY2FuID0gbnJfcGFnZXMgLSByZXQ7CisJCQl1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4gPSBucl9wYWdlcyAtIHNjLm5yX3JlY2xhaW1lZDsKIAogCQkJc2MubnJfc2Nhbm5lZCA9IDA7Ci0JCQlyZXQgKz0gc2hyaW5rX2FsbF96b25lcyhucl90b19zY2FuLCBwcmlvLCBwYXNzLCAmc2MpOwotCQkJaWYgKHJldCA+PSBucl9wYWdlcykKKwkJCXNjLnN3YXBfY2x1c3Rlcl9tYXggPSBucl90b19zY2FuOworCQkJc2hyaW5rX2FsbF96b25lcyhucl90b19zY2FuLCBwcmlvLCBwYXNzLCAmc2MpOworCQkJaWYgKHNjLm5yX3JlY2xhaW1lZCA+PSBucl9wYWdlcykKIAkJCQlnb3RvIG91dDsKIAogCQkJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7CiAJCQlzaHJpbmtfc2xhYihzYy5ucl9zY2FubmVkLCBzYy5nZnBfbWFzaywKIAkJCQkJZ2xvYmFsX2xydV9wYWdlcygpKTsKLQkJCXJldCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOwotCQkJaWYgKHJldCA+PSBucl9wYWdlcykKKwkJCXNjLm5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOworCQkJaWYgKHNjLm5yX3JlY2xhaW1lZCA+PSBucl9wYWdlcykKIAkJCQlnb3RvIG91dDsKIAogCQkJaWYgKHNjLm5yX3NjYW5uZWQgJiYgcHJpbyA8IERFRl9QUklPUklUWSAtIDIpCkBAIC0yMTcwLDIxICsyMTcyLDIzIEBACiAJfQogCiAJLyoKLQkgKiBJZiByZXQgPSAwLCB3ZSBjb3VsZCBub3Qgc2hyaW5rIExSVXMsIGJ1dCB0aGVyZSBtYXkgYmUgc29tZXRoaW5nCi0JICogaW4gc2xhYiBjYWNoZXMKKwkgKiBJZiBzYy5ucl9yZWNsYWltZWQgPSAwLCB3ZSBjb3VsZCBub3Qgc2hyaW5rIExSVXMsIGJ1dCB0aGVyZSBtYXkgYmUKKwkgKiBzb21ldGhpbmcgaW4gc2xhYiBjYWNoZXMKIAkgKi8KLQlpZiAoIXJldCkgeworCWlmICghc2MubnJfcmVjbGFpbWVkKSB7CiAJCWRvIHsKIAkJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOwogCQkJc2hyaW5rX3NsYWIobnJfcGFnZXMsIHNjLmdmcF9tYXNrLCBnbG9iYWxfbHJ1X3BhZ2VzKCkpOwotCQkJcmV0ICs9IHJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWI7Ci0JCX0gd2hpbGUgKHJldCA8IG5yX3BhZ2VzICYmIHJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPiAwKTsKKwkJCXNjLm5yX3JlY2xhaW1lZCArPSByZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiOworCQl9IHdoaWxlIChzYy5ucl9yZWNsYWltZWQgPCBucl9wYWdlcyAmJgorCQkJCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPiAwKTsKIAl9CiAKKwogb3V0OgogCWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPSBOVUxMOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc2MubnJfcmVjbGFpbWVkOwogfQogI2VuZGlmCiAKQEAgLTIyMDAsNyArMjIwNCw5IEBACiAJaWYgKGFjdGlvbiA9PSBDUFVfT05MSU5FIHx8IGFjdGlvbiA9PSBDUFVfT05MSU5FX0ZST1pFTikgewogCQlmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9ISUdIX01FTU9SWSkgewogCQkJcGdfZGF0YV90ICpwZ2RhdCA9IE5PREVfREFUQShuaWQpOwotCQkJbm9kZV90b19jcHVtYXNrX3B0cihtYXNrLCBwZ2RhdC0+bm9kZV9pZCk7CisJCQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzazsKKworCQkJbWFzayA9IGNwdW1hc2tfb2Zfbm9kZShwZ2RhdC0+bm9kZV9pZCk7CiAKIAkJCWlmIChjcHVtYXNrX2FueV9hbmQoY3B1X29ubGluZV9tYXNrLCBtYXNrKSA8IG5yX2NwdV9pZHMpCiAJCQkJLyogT25lIG9mIG91ciBDUFVzIG9ubGluZTogcmVzdG9yZSBtYXNrICovCkBAIC0yMjkwLDExICsyMjk2LDEyIEBACiAJaW50IHByaW9yaXR5OwogCXN0cnVjdCBzY2FuX2NvbnRyb2wgc2MgPSB7CiAJCS5tYXlfd3JpdGVwYWdlID0gISEoem9uZV9yZWNsYWltX21vZGUgJiBSRUNMQUlNX1dSSVRFKSwKLQkJLm1heV9zd2FwID0gISEoem9uZV9yZWNsYWltX21vZGUgJiBSRUNMQUlNX1NXQVApLAorCQkubWF5X3VubWFwID0gISEoem9uZV9yZWNsYWltX21vZGUgJiBSRUNMQUlNX1NXQVApLAogCQkuc3dhcF9jbHVzdGVyX21heCA9IG1heF90KHVuc2lnbmVkIGxvbmcsIG5yX3BhZ2VzLAogCQkJCQlTV0FQX0NMVVNURVJfTUFYKSwKIAkJLmdmcF9tYXNrID0gZ2ZwX21hc2ssCiAJCS5zd2FwcGluZXNzID0gdm1fc3dhcHBpbmVzcywKKwkJLm9yZGVyID0gb3JkZXIsCiAJCS5pc29sYXRlX3BhZ2VzID0gaXNvbGF0ZV9wYWdlc19nbG9iYWwsCiAJfTsKIAl1bnNpZ25lZCBsb25nIHNsYWJfcmVjbGFpbWFibGU7CmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IDhjZDgxZWEuLjY2ZjYxMzAgMTAwNjQ0Ci0tLSBhL21tL3Ztc3RhdC5jCisrKyBiL21tL3Ztc3RhdC5jCkBAIC0xMzUsMTEgKzEzNSw3IEBACiAJaW50IGNwdTsKIAlpbnQgdGhyZXNob2xkOwogCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7Ci0KLQkJaWYgKCF6b25lLT5wcmVzZW50X3BhZ2VzKQotCQkJY29udGludWU7Ci0KKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CiAJCXRocmVzaG9sZCA9IGNhbGN1bGF0ZV90aHJlc2hvbGQoem9uZSk7CiAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCkBAIC0zMDEsMTIgKzI5Nyw5IEBACiAJaW50IGk7CiAJaW50IGdsb2JhbF9kaWZmW05SX1ZNX1pPTkVfU1RBVF9JVEVNU10gPSB7IDAsIH07CiAKLQlmb3JfZWFjaF96b25lKHpvbmUpIHsKKwlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CiAJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnA7CiAKLQkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKLQkJCWNvbnRpbnVlOwotCiAJCXAgPSB6b25lX3BjcCh6b25lLCBjcHUpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBOUl9WTV9aT05FX1NUQVRfSVRFTVM7IGkrKykKQEAgLTg5OCw3ICs4OTEsNyBAQAogewogCXJlZnJlc2hfY3B1X3ZtX3N0YXRzKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZfX2dldF9jcHVfdmFyKHZtc3RhdF93b3JrKSwKLQkJc3lzY3RsX3N0YXRfaW50ZXJ2YWwpOworCQlyb3VuZF9qaWZmaWVzX3JlbGF0aXZlKHN5c2N0bF9zdGF0X2ludGVydmFsKSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBzdGFydF9jcHVfdGltZXIoaW50IGNwdSkKQEAgLTkwNiw3ICs4OTksOCBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgKnZtc3RhdF93b3JrID0gJnBlcl9jcHUodm1zdGF0X3dvcmssIGNwdSk7CiAKIAlJTklUX0RFTEFZRURfV09SS19ERUZFUlJBQkxFKHZtc3RhdF93b3JrLCB2bXN0YXRfdXBkYXRlKTsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmtfb24oY3B1LCB2bXN0YXRfd29yaywgSFogKyBjcHUpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjcHUsIHZtc3RhdF93b3JrLAorCQkJCSBfX3JvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFosIGNwdSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCBlYzkzZTdlLi5jZTc3ZGI0ZmMgMTAwNjQ0Ci0tLSBhL25ldC9LY29uZmlnCisrKyBiL25ldC9LY29uZmlnCkBAIC0xNDAsNyArMTQwLDcgQEAKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB5b3UgY2FuIHNlbGVjdCBiZXR3ZWVuIGFsbCB0aGUgbmV0ZmlsdGVyIG1vZHVsZXMuCi0JICBJZiB5b3Ugc2F5IE4gdGhlIG1vcmUgdW51bnN1YWwgb25lcyB3aWxsIG5vdCBiZSBzaG93biBhbmQgdGhlCisJICBJZiB5b3Ugc2F5IE4gdGhlIG1vcmUgdW51c3VhbCBvbmVzIHdpbGwgbm90IGJlIHNob3duIGFuZCB0aGUKIAkgIGJhc2ljIG9uZXMgbmVlZGVkIGJ5IG1vc3QgcGVvcGxlIHdpbGwgZGVmYXVsdCB0byAnTScuCiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCmluZGV4IGFiZGM3MDMuLmNhYjcxZWEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCkBAIC0xMDkzLDExICsxMDkzLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcmZjb21tX3R0eV9yZWFkX3Byb2MoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbiwgaW50ICplb2YsIHZvaWQgKnVudXNlZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCByZmNvbW1fdHR5X3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCByZmNvbW1fZGV2ICpkZXYgPSAoc3RydWN0IHJmY29tbV9kZXYgKikgdHR5LT5kcml2ZXJfZGF0YTsKQEAgLTExNTYsNyArMTE1MSw2IEBACiAJLnNlbmRfeGNoYXIJCT0gcmZjb21tX3R0eV9zZW5kX3hjaGFyLAogCS5oYW5ndXAJCQk9IHJmY29tbV90dHlfaGFuZ3VwLAogCS53YWl0X3VudGlsX3NlbnQJPSByZmNvbW1fdHR5X3dhaXRfdW50aWxfc2VudCwKLQkucmVhZF9wcm9jCQk9IHJmY29tbV90dHlfcmVhZF9wcm9jLAogCS50aW9jbWdldAkJPSByZmNvbW1fdHR5X3Rpb2NtZ2V0LAogCS50aW9jbXNldAkJPSByZmNvbW1fdHR5X3Rpb2Ntc2V0LAogfTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNTJmZWE1Yi4uOTFkNzkyZCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTI0NzIsOCArMjQ3Miw5IEBACiAJCXJldHVybiBHUk9fTk9STUFMOwogCiAJZm9yIChwID0gbmFwaS0+Z3JvX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7Ci0JCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSAhY29tcGFyZV9ldGhlcl9oZWFkZXIoCi0JCQlza2JfbWFjX2hlYWRlcihwKSwgc2tiX2dyb19tYWNfaGVhZGVyKHNrYikpOworCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gKHAtPmRldiA9PSBza2ItPmRldikKKwkJCSYmICFjb21wYXJlX2V0aGVyX2hlYWRlcihza2JfbWFjX2hlYWRlcihwKSwKKwkJCQkJCSBza2JfZ3JvX21hY19oZWFkZXIoc2tiKSk7CiAJCU5BUElfR1JPX0NCKHApLT5mbHVzaCA9IDA7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ldGh0b29sLmMgYi9uZXQvY29yZS9ldGh0b29sLmMKaW5kZXggMjQ0Y2E1Ni4uZDlkNTE2MCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZXRodG9vbC5jCisrKyBiL25ldC9jb3JlL2V0aHRvb2wuYwpAQCAtMjYxLDggKzI2MSw3IEBACiAJcmV0ID0gMDsKIAogZXJyX291dDoKLQlpZiAocnVsZV9idWYpCi0JCWtmcmVlKHJ1bGVfYnVmKTsKKwlrZnJlZShydWxlX2J1Zik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IDA2MjAwNDYuLjdkYmYzZmYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTE2NzcsNyArMTY3Nyw3IEBACiB7CiAJcmVhZF9sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiAJaWYgKHNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNrLT5za19zbGVlcCkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZShzay0+c2tfc2xlZXApOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbChzay0+c2tfc2xlZXAsIFBPTExFUlIpOwogCXNrX3dha2VfYXN5bmMoc2ssIFNPQ0tfV0FLRV9JTywgUE9MTF9FUlIpOwogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CkBAIC0xNjg2LDcgKzE2ODYsOCBAQAogewogCXJlYWRfbG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+c2tfc2xlZXApKQotCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhzay0+c2tfc2xlZXApOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luY19wb2xsKHNrLT5za19zbGVlcCwgUE9MTElOIHwKKwkJCQkJCVBPTExSRE5PUk0gfCBQT0xMUkRCQU5EKTsKIAlza193YWtlX2FzeW5jKHNrLCBTT0NLX1dBS0VfV0FJVEQsIFBPTExfSU4pOwogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CkBAIC0xNzAwLDcgKzE3MDEsOCBAQAogCSAqLwogCWlmICgoYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSA8PCAxKSA8PSBzay0+c2tfc25kYnVmKSB7CiAJCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+c2tfc2xlZXApKQotCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmMoc2stPnNrX3NsZWVwKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jX3BvbGwoc2stPnNrX3NsZWVwLCBQT0xMT1VUIHwKKwkJCQkJCVBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKTsKIAogCQkvKiBTaG91bGQgYWdyZWUgd2l0aCBwb2xsLCBvdGhlcndpc2Ugc29tZSBwcm9ncmFtcyBicmVhayAqLwogCQlpZiAoc29ja193cml0ZWFibGUoc2spKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggMzVjNWY2YS4uNWJhNTMzZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC0yNTMsNyArMjUzLDcgQEAKIAlpbmRldiA9IGluID8gaW4tPm5hbWUgOiBudWxsZGV2bmFtZTsKIAlvdXRkZXYgPSBvdXQgPyBvdXQtPm5hbWUgOiBudWxsZGV2bmFtZTsKIAotCXJjdV9yZWFkX2xvY2soKTsKKwlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJcHJpdmF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh0YWJsZS0+cHJpdmF0ZSk7CiAJdGFibGVfYmFzZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV0pOwogCkBAIC0zMjksNyArMzI5LDcgQEAKIAkJfQogCX0gd2hpbGUgKCFob3Rkcm9wKTsKIAotCXJjdV9yZWFkX3VubG9jaygpOworCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCiAJaWYgKGhvdGRyb3ApCiAJCXJldHVybiBORl9EUk9QOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCmluZGV4IDgyZWU3YzkuLjgxMGMwYjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCiAJSVBfTkZfQVNTRVJUKHRhYmxlLT52YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKTsKIAotCXJjdV9yZWFkX2xvY2soKTsKKwlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJcHJpdmF0ZSA9IHJjdV9kZXJlZmVyZW5jZSh0YWJsZS0+cHJpdmF0ZSk7CiAJdGFibGVfYmFzZSA9IHJjdV9kZXJlZmVyZW5jZShwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV0pOwogCkBAIC00MzcsNyArNDM3LDcgQEAKIAkJfQogCX0gd2hpbGUgKCFob3Rkcm9wKTsKIAotCXJjdV9yZWFkX3VubG9jaygpOworCXJjdV9yZWFkX3VubG9ja19iaCgpOwogCiAjaWZkZWYgREVCVUdfQUxMT1dfQUxMCiAJcmV0dXJuIE5GX0FDQ0VQVDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggMjQ1MWFlYi4uZmFmYmVjOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTEwODEsOCArMTA4MSw3IEBACiAgKgl0aGlzLCBubyBibG9ja2luZyBhbmQgdmVyeSBzdHJhbmdlIGVycm9ycyA4KQogICovCiAKLXN0YXRpYyBpbnQgdGNwX3JlY3ZfdXJnKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lbywKLQkJCXN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbiwgaW50IGZsYWdzKQorc3RhdGljIGludCB0Y3BfcmVjdl91cmcoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csIGludCBsZW4sIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIApAQCAtMTY5Nyw3ICsxNjk2LDcgQEAKIAlyZXR1cm4gZXJyOwogCiByZWN2X3VyZzoKLQllcnIgPSB0Y3BfcmVjdl91cmcoc2ssIHRpbWVvLCBtc2csIGxlbiwgZmxhZ3MpOworCWVyciA9IHRjcF9yZWN2X3VyZyhzaywgbXNnLCBsZW4sIGZsYWdzKTsKIAlnb3RvIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGMxZjI1OWQuLjUzMzAwZmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTc1NCw2ICs3NTQsMzYgQEAKIAkJdHAtPmZhY2tldHNfb3V0IC09IGRlY3I7CiB9CiAKKy8qIFBjb3VudCBpbiB0aGUgbWlkZGxlIG9mIHRoZSB3cml0ZSBxdWV1ZSBnb3QgY2hhbmdlZCwgd2UgbmVlZCB0byBkbyB2YXJpb3VzCisgKiB0d2Vha3MgdG8gZml4IGNvdW50ZXJzCisgKi8KK3N0YXRpYyB2b2lkIHRjcF9hZGp1c3RfcGNvdW50KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGRlY3IpCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisKKwl0cC0+cGFja2V0c19vdXQgLT0gZGVjcjsKKworCWlmIChUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmIFRDUENCX1NBQ0tFRF9BQ0tFRCkKKwkJdHAtPnNhY2tlZF9vdXQgLT0gZGVjcjsKKwlpZiAoVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJiBUQ1BDQl9TQUNLRURfUkVUUkFOUykKKwkJdHAtPnJldHJhbnNfb3V0IC09IGRlY3I7CisJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfTE9TVCkKKwkJdHAtPmxvc3Rfb3V0IC09IGRlY3I7CisKKwkvKiBSZW5vIGNhc2UgaXMgc3BlY2lhbC4gU2lnaC4uLiAqLworCWlmICh0Y3BfaXNfcmVubyh0cCkgJiYgZGVjciA+IDApCisJCXRwLT5zYWNrZWRfb3V0IC09IG1pbl90KHUzMiwgdHAtPnNhY2tlZF9vdXQsIGRlY3IpOworCisJdGNwX2FkanVzdF9mYWNrZXRzX291dChzaywgc2tiLCBkZWNyKTsKKworCWlmICh0cC0+bG9zdF9za2JfaGludCAmJgorCSAgICBiZWZvcmUoVENQX1NLQl9DQihza2IpLT5zZXEsIFRDUF9TS0JfQ0IodHAtPmxvc3Rfc2tiX2hpbnQpLT5zZXEpICYmCisJICAgICh0Y3BfaXNfZmFjayh0cCkgfHwgVENQX1NLQl9DQihza2IpLT5zYWNrZWQpKQorCQl0cC0+bG9zdF9jbnRfaGludCAtPSBkZWNyOworCisJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7Cit9CisKIC8qIEZ1bmN0aW9uIHRvIGNyZWF0ZSB0d28gbmV3IFRDUCBzZWdtZW50cy4gIFNocmlua3MgdGhlIGdpdmVuIHNlZ21lbnQKICAqIHRvIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgYXBwZW5kcyBhIG5ldyBzZWdtZW50IHdpdGggdGhlIHJlc3Qgb2YgdGhlCiAgKiBwYWNrZXQgdG8gdGhlIGxpc3QuICBUaGlzIHdvbid0IGJlIGNhbGxlZCBmcmVxdWVudGx5LCBJIGhvcGUuCkBAIC04MzYsMjggKzg2Niw4IEBACiAJCWludCBkaWZmID0gb2xkX2ZhY3RvciAtIHRjcF9za2JfcGNvdW50KHNrYikgLQogCQkJdGNwX3NrYl9wY291bnQoYnVmZik7CiAKLQkJdHAtPnBhY2tldHNfb3V0IC09IGRpZmY7Ci0KLQkJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfU0FDS0VEX0FDS0VEKQotCQkJdHAtPnNhY2tlZF9vdXQgLT0gZGlmZjsKLQkJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfU0FDS0VEX1JFVFJBTlMpCi0JCQl0cC0+cmV0cmFuc19vdXQgLT0gZGlmZjsKLQotCQlpZiAoVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJiBUQ1BDQl9MT1NUKQotCQkJdHAtPmxvc3Rfb3V0IC09IGRpZmY7Ci0KLQkJLyogQWRqdXN0IFJlbm8gU0FDSyBlc3RpbWF0ZS4gKi8KLQkJaWYgKHRjcF9pc19yZW5vKHRwKSAmJiBkaWZmID4gMCkgewotCQkJdGNwX2RlY19wY291bnRfYXBwcm94X2ludCgmdHAtPnNhY2tlZF9vdXQsIGRpZmYpOwotCQkJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7Ci0JCX0KLQkJdGNwX2FkanVzdF9mYWNrZXRzX291dChzaywgc2tiLCBkaWZmKTsKLQotCQlpZiAodHAtPmxvc3Rfc2tiX2hpbnQgJiYKLQkJICAgIGJlZm9yZShUQ1BfU0tCX0NCKHNrYiktPnNlcSwKLQkJCSAgIFRDUF9TS0JfQ0IodHAtPmxvc3Rfc2tiX2hpbnQpLT5zZXEpICYmCi0JCSAgICAodGNwX2lzX2ZhY2sodHApIHx8IFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkKSkKLQkJCXRwLT5sb3N0X2NudF9oaW50IC09IGRpZmY7CisJCWlmIChkaWZmKQorCQkJdGNwX2FkanVzdF9wY291bnQoc2ssIHNrYiwgZGlmZik7CiAJfQogCiAJLyogTGluayBCVUZGIGludG8gdGhlIHNlbmQgcXVldWUuICovCkBAIC0xNzY4LDIyICsxNzc4LDE0IEBACiAJICogcGFja2V0IGNvdW50aW5nIGRvZXMgbm90IGJyZWFrLgogCSAqLwogCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkIHw9IFRDUF9TS0JfQ0IobmV4dF9za2IpLT5zYWNrZWQgJiBUQ1BDQl9FVkVSX1JFVFJBTlM7Ci0JaWYgKFRDUF9TS0JfQ0IobmV4dF9za2IpLT5zYWNrZWQgJiBUQ1BDQl9TQUNLRURfUkVUUkFOUykKLQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KG5leHRfc2tiKTsKLQlpZiAoVENQX1NLQl9DQihuZXh0X3NrYiktPnNhY2tlZCAmIFRDUENCX0xPU1QpCi0JCXRwLT5sb3N0X291dCAtPSB0Y3Bfc2tiX3Bjb3VudChuZXh0X3NrYik7Ci0JLyogUmVubyBjYXNlIGlzIHNwZWNpYWwuIFNpZ2guLi4gKi8KLQlpZiAodGNwX2lzX3Jlbm8odHApICYmIHRwLT5zYWNrZWRfb3V0KQotCQl0Y3BfZGVjX3Bjb3VudF9hcHByb3goJnRwLT5zYWNrZWRfb3V0LCBuZXh0X3NrYik7Ci0KLQl0Y3BfYWRqdXN0X2ZhY2tldHNfb3V0KHNrLCBuZXh0X3NrYiwgdGNwX3NrYl9wY291bnQobmV4dF9za2IpKTsKLQl0cC0+cGFja2V0c19vdXQgLT0gdGNwX3NrYl9wY291bnQobmV4dF9za2IpOwogCiAJLyogY2hhbmdlZCB0cmFuc21pdCBxdWV1ZSB1bmRlciB1cyBzbyBjbGVhciBoaW50cyAqLwogCXRjcF9jbGVhcl9yZXRyYW5zX2hpbnRzX3BhcnRpYWwodHApOwogCWlmIChuZXh0X3NrYiA9PSB0cC0+cmV0cmFuc21pdF9za2JfaGludCkKIAkJdHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgPSBza2I7CiAKKwl0Y3BfYWRqdXN0X3Bjb3VudChzaywgbmV4dF9za2IsIHRjcF9za2JfcGNvdW50KG5leHRfc2tiKSk7CisKIAlza193bWVtX2ZyZWVfc2tiKHNrLCBuZXh0X3NrYik7CiB9CiAKQEAgLTE4OTEsNyArMTg5MywxMiBAQAogCQlpZiAodGNwX2ZyYWdtZW50KHNrLCBza2IsIGN1cl9tc3MsIGN1cl9tc3MpKQogCQkJcmV0dXJuIC1FTk9NRU07IC8qIFdlJ2xsIHRyeSBhZ2FpbiBsYXRlci4gKi8KIAl9IGVsc2UgewotCQl0Y3BfaW5pdF90c29fc2Vncyhzaywgc2tiLCBjdXJfbXNzKTsKKwkJaW50IG9sZHBjb3VudCA9IHRjcF9za2JfcGNvdW50KHNrYik7CisKKwkJaWYgKHVubGlrZWx5KG9sZHBjb3VudCA+IDEpKSB7CisJCQl0Y3BfaW5pdF90c29fc2Vncyhzaywgc2tiLCBjdXJfbXNzKTsKKwkJCXRjcF9hZGp1c3RfcGNvdW50KHNrLCBza2IsIG9sZHBjb3VudCAtIHRjcF9za2JfcGNvdW50KHNrYikpOworCQl9CiAJfQogCiAJdGNwX3JldHJhbnNfdHJ5X2NvbGxhcHNlKHNrLCBza2IsIGN1cl9tc3MpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvS2NvbmZpZyBiL25ldC9pcHY2L0tjb25maWcKaW5kZXggZWM5OTIxNS4uY2E4Y2IzMjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L0tjb25maWcKKysrIGIvbmV0L2lwdjYvS2NvbmZpZwpAQCAtMjIsMTcgKzIyLDE3IEBACiBpZiBJUFY2CiAKIGNvbmZpZyBJUFY2X1BSSVZBQ1kKLQlib29sICJJUHY2OiBQcml2YWN5IEV4dGVuc2lvbnMgc3VwcG9ydCIKKwlib29sICJJUHY2OiBQcml2YWN5IEV4dGVuc2lvbnMgKFJGQyAzMDQxKSBzdXBwb3J0IgogCS0tLWhlbHAtLS0KIAkgIFByaXZhY3kgRXh0ZW5zaW9ucyBmb3IgU3RhdGVsZXNzIEFkZHJlc3MgQXV0b2NvbmZpZ3VyYXRpb24gaW4gSVB2NgotCSAgc3VwcG9ydC4gIFdpdGggdGhpcyBvcHRpb24sIGFkZGl0aW9uYWwgcGVyaW9kaWNhbGx5LWFsdGVyIAotCSAgcHNldWRvLXJhbmRvbSBnbG9iYWwtc2NvcGUgdW5pY2FzdCBhZGRyZXNzKGVzKSB3aWxsIGFzc2lnbmVkIHRvCisJICBzdXBwb3J0LiAgV2l0aCB0aGlzIG9wdGlvbiwgYWRkaXRpb25hbCBwZXJpb2RpY2FsbHktYWx0ZXJlZAorCSAgcHNldWRvLXJhbmRvbSBnbG9iYWwtc2NvcGUgdW5pY2FzdCBhZGRyZXNzKGVzKSB3aWxsIGJlIGFzc2lnbmVkIHRvCiAJICB5b3VyIGludGVyZmFjZShzKS4KIAkKLQkgIFdlIHVzZSBvdXIgc3RhbmRhcmQgcHNldWRvIHJhbmRvbSBhbGdvcml0aG0gdG8gZ2VuZXJhdGUgcmFuZG9taXplZAotCSAgaW50ZXJmYWNlIGlkZW50aWZpZXIsIGluc3RlYWQgb2Ygb25lIGRlc2NyaWJlZCBpbiBSRkMgMzA0MS4KKwkgIFdlIHVzZSBvdXIgc3RhbmRhcmQgcHNldWRvLXJhbmRvbSBhbGdvcml0aG0gdG8gZ2VuZXJhdGUgdGhlCisgICAgICAgICAgcmFuZG9taXplZCBpbnRlcmZhY2UgaWRlbnRpZmllciwgaW5zdGVhZCBvZiBvbmUgZGVzY3JpYmVkIGluIFJGQyAzMDQxLgogCi0JICBCeSBkZWZhdWx0LCBrZXJuZWwgZG8gbm90IGdlbmVyYXRlIHRlbXBvcmFyeSBhZGRyZXNzZXMuCisJICBCeSBkZWZhdWx0IHRoZSBrZXJuZWwgZG9lcyBub3QgZ2VuZXJhdGUgdGVtcG9yYXJ5IGFkZHJlc3Nlcy4KIAkgIFRvIHVzZSB0ZW1wb3JhcnkgYWRkcmVzc2VzLCBkbwogCQogCSAgICAgICAgZWNobyAyID4vcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9hbGwvdXNlX3RlbXBhZGRyIApAQCAtNDMsOSArNDMsOSBAQAogCWJvb2wgIklQdjY6IFJvdXRlciBQcmVmZXJlbmNlIChSRkMgNDE5MSkgc3VwcG9ydCIKIAktLS1oZWxwLS0tCiAJICBSb3V0ZXIgUHJlZmVyZW5jZSBpcyBhbiBvcHRpb25hbCBleHRlbnNpb24gdG8gdGhlIFJvdXRlcgotCSAgQWR2ZXJ0aXNlbWVudCBtZXNzYWdlIHRvIGltcHJvdmUgdGhlIGFiaWxpdHkgb2YgaG9zdHMKLQkgIHRvIHBpY2sgbW9yZSBhcHByb3ByaWF0ZSByb3V0ZXIsIGVzcGVjaWFsbHkgd2hlbiB0aGUgaG9zdHMKLQkgIGlzIHBsYWNlZCBpbiBhIG11bHRpLWhvbWVkIG5ldHdvcmsuCisJICBBZHZlcnRpc2VtZW50IG1lc3NhZ2Ugd2hpY2ggaW1wcm92ZXMgdGhlIGFiaWxpdHkgb2YgaG9zdHMKKwkgIHRvIHBpY2sgYW4gYXBwcm9wcmlhdGUgcm91dGVyLCBlc3BlY2lhbGx5IHdoZW4gdGhlIGhvc3RzCisJICBhcmUgcGxhY2VkIGluIGEgbXVsdGktaG9tZWQgbmV0d29yay4KIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggZTg5Y2ZhMy4uZGZlZDE3NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIAogCUlQX05GX0FTU0VSVCh0YWJsZS0+dmFsaWRfaG9va3MgJiAoMSA8PCBob29rKSk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CisJcmN1X3JlYWRfbG9ja19iaCgpOwogCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2UodGFibGUtPnByaXZhdGUpOwogCXRhYmxlX2Jhc2UgPSByY3VfZGVyZWZlcmVuY2UocHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKIApAQCAtNDY2LDcgKzQ2Niw3IEBACiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9ERUJVRwogCSgoc3RydWN0IGlwNnRfZW50cnkgKil0YWJsZV9iYXNlKS0+Y29tZWZyb20gPSBORVRGSUxURVJfTElOS19QT0lTT047CiAjZW5kaWYKLQlyY3VfcmVhZF91bmxvY2soKTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAogI2lmZGVmIERFQlVHX0FMTE9XX0FMTAogCXJldHVybiBORl9BQ0NFUFQ7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHkuYwppbmRleCAwODZkNWVmLi44MTE5ODRkIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC90ZXJtaW9zLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC03Miw4ICs3Myw3IEBACiBzdGF0aWMgdm9pZCBpcmNvbW1fdHR5X2Zsb3dfaW5kaWNhdGlvbih2b2lkICppbnN0YW5jZSwgdm9pZCAqc2FwLAogCQkJCSAgICAgICBMT0NBTF9GTE9XIGNtZCk7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyBpbnQgaXJjb21tX3R0eV9yZWFkX3Byb2MoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IGxlbiwKLQkJCQlpbnQgKmVvZiwgdm9pZCAqdW51c2VkKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlyY29tbV90dHlfcHJvY19mb3BzOwogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcjsKIApAQCAtOTgsNyArOTgsNyBAQAogCS5oYW5ndXAgICAgICAgICAgPSBpcmNvbW1fdHR5X2hhbmd1cCwKIAkud2FpdF91bnRpbF9zZW50ID0gaXJjb21tX3R0eV93YWl0X3VudGlsX3NlbnQsCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLQkucmVhZF9wcm9jICAgICAgID0gaXJjb21tX3R0eV9yZWFkX3Byb2MsCisJLnByb2NfZm9wcyAgICAgICA9ICZpcmNvbW1fdHR5X3Byb2NfZm9wcywKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogfTsKIApAQCAtMTI0NSwxNTAgKzEyNDUsMTcwIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGludCBpcmNvbW1fdHR5X2xpbmVfaW5mbyhzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZiwgY2hhciAqYnVmKQorc3RhdGljIHZvaWQgaXJjb21tX3R0eV9saW5lX2luZm8oc3RydWN0IGlyY29tbV90dHlfY2IgKnNlbGYsIHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlpbnQgIHJldD0wOworCWNoYXIgc2VwOwogCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlN0YXRlOiAlc1xuIiwgaXJjb21tX3R0eV9zdGF0ZVtzZWxmLT5zdGF0ZV0pOworCXNlcV9wcmludGYobSwgIlN0YXRlOiAlc1xuIiwgaXJjb21tX3R0eV9zdGF0ZVtzZWxmLT5zdGF0ZV0pOwogCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlNlcnZpY2UgdHlwZTogIik7CisJc2VxX3B1dHMobSwgIlNlcnZpY2UgdHlwZTogIik7CiAJaWYgKHNlbGYtPnNlcnZpY2VfdHlwZSAmIElSQ09NTV85X1dJUkUpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICI5X1dJUkUiKTsKKwkJc2VxX3B1dHMobSwgIjlfV0lSRSIpOwogCWVsc2UgaWYgKHNlbGYtPnNlcnZpY2VfdHlwZSAmIElSQ09NTV8zX1dJUkUpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICIzX1dJUkUiKTsKKwkJc2VxX3B1dHMobSwgIjNfV0lSRSIpOwogCWVsc2UgaWYgKHNlbGYtPnNlcnZpY2VfdHlwZSAmIElSQ09NTV8zX1dJUkVfUkFXKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiM19XSVJFX1JBVyIpOworCQlzZXFfcHV0cyhtLCAiM19XSVJFX1JBVyIpOwogCWVsc2UKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIk5vIGNvbW1vbiBzZXJ2aWNlIHR5cGUhXG4iKTsKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXG4iKTsKKwkJc2VxX3B1dHMobSwgIk5vIGNvbW1vbiBzZXJ2aWNlIHR5cGUhXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJQb3J0IG5hbWU6ICVzXG4iLCBzZWxmLT5zZXR0aW5ncy5wb3J0X25hbWUpOworCXNlcV9wcmludGYobSwgIlBvcnQgbmFtZTogJXNcbiIsIHNlbGYtPnNldHRpbmdzLnBvcnRfbmFtZSk7CiAKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRFRFIHN0YXR1czogIik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmR0ZSAmIElSQ09NTV9SVFMpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJSVFN8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmR0ZSAmIElSQ09NTV9EVFIpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJEVFJ8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmR0ZSkKLQkJcmV0LS07IC8qIHJlbW92ZSB0aGUgbGFzdCB8ICovCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlxuIik7CisJc2VxX3ByaW50ZihtLCAiRFRFIHN0YXR1czoiKTsKKwlzZXAgPSAnICc7CisJaWYgKHNlbGYtPnNldHRpbmdzLmR0ZSAmIElSQ09NTV9SVFMpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWNSVFMiLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5zZXR0aW5ncy5kdGUgJiBJUkNPTU1fRFRSKSB7CisJCXNlcV9wcmludGYobSwgIiVjRFRSIiwgc2VwKTsKKwkJc2VwID0gJ3wnOworCX0KKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJEQ0Ugc3RhdHVzOiAiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZGNlICYgSVJDT01NX0NUUykKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkNUU3wiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZGNlICYgSVJDT01NX0RTUikKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkRTUnwiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZGNlICYgSVJDT01NX0NEKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiQ0R8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmRjZSAmIElSQ09NTV9SSSkKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlJJfCIpOwotCWlmIChzZWxmLT5zZXR0aW5ncy5kY2UpCi0JCXJldC0tOyAvKiByZW1vdmUgdGhlIGxhc3QgfCAqLwotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJcbiIpOworCXNlcV9wdXRzKG0sICJEQ0Ugc3RhdHVzOiIpOworCXNlcCA9ICcgJzsKKwlpZiAoc2VsZi0+c2V0dGluZ3MuZGNlICYgSVJDT01NX0NUUykgeworCQlzZXFfcHJpbnRmKG0sICIlY0NUUyIsIHNlcCk7CisJCXNlcCA9ICd8JzsKKwl9CisJaWYgKHNlbGYtPnNldHRpbmdzLmRjZSAmIElSQ09NTV9EU1IpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWNEU1IiLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5zZXR0aW5ncy5kY2UgJiBJUkNPTU1fQ0QpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWNDRCIsIHNlcCk7CisJCXNlcCA9ICd8JzsKKwl9CisJaWYgKHNlbGYtPnNldHRpbmdzLmRjZSAmIElSQ09NTV9SSSkgeworCQlzZXFfcHJpbnRmKG0sICIlY1JJIiwgc2VwKTsKKwkJc2VwID0gJ3wnOworCX0KKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJDb25maWd1cmF0aW9uOiAiKTsKKwlzZXFfcHV0cyhtLCAiQ29uZmlndXJhdGlvbjogIik7CiAJaWYgKCFzZWxmLT5zZXR0aW5ncy5udWxsX21vZGVtKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRFRFIDwtPiBEQ0VcbiIpOworCQlzZXFfcHV0cyhtLCAiRFRFIDwtPiBEQ0VcbiIpOwogCWVsc2UKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwKLQkJCSAgICAgICAiRFRFIDwtPiBEVEUgKG51bGwgbW9kZW0gZW11bGF0aW9uKVxuIik7CisJCXNlcV9wdXRzKG0sICJEVEUgPC0+IERURSAobnVsbCBtb2RlbSBlbXVsYXRpb24pXG4iKTsKIAotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJEYXRhIHJhdGU6ICVkXG4iLCBzZWxmLT5zZXR0aW5ncy5kYXRhX3JhdGUpOworCXNlcV9wcmludGYobSwgIkRhdGEgcmF0ZTogJWRcbiIsIHNlbGYtPnNldHRpbmdzLmRhdGFfcmF0ZSk7CiAKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRmxvdyBjb250cm9sOiAiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX1hPTl9YT0ZGX0lOKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiWE9OX1hPRkZfSU58Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9YT05fWE9GRl9PVVQpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJYT05fWE9GRl9PVVR8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9SVFNfQ1RTX0lOKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiUlRTX0NUU19JTnwiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX1JUU19DVFNfT1VUKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiUlRTX0NUU19PVVR8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9EU1JfRFRSX0lOKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRFNSX0RUUl9JTnwiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX0RTUl9EVFJfT1VUKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRFNSX0RUUl9PVVR8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9FTlFfQUNLX0lOKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRU5RX0FDS19JTnwiKTsKLQlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX0VOUV9BQ0tfT1VUKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRU5RX0FDS19PVVR8Iik7Ci0JaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCkKLQkJcmV0LS07IC8qIHJlbW92ZSB0aGUgbGFzdCB8ICovCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlxuIik7CisJc2VxX3B1dHMobSwgIkZsb3cgY29udHJvbDoiKTsKKwlzZXAgPSAnICc7CisJaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9YT05fWE9GRl9JTikgeworCQlzZXFfcHJpbnRmKG0sICIlY1hPTl9YT0ZGX0lOIiwgc2VwKTsKKwkJc2VwID0gJ3wnOworCX0KKwlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX1hPTl9YT0ZGX09VVCkgeworCQlzZXFfcHJpbnRmKG0sICIlY1hPTl9YT0ZGX09VVCIsIHNlcCk7CisJCXNlcCA9ICd8JzsKKwl9CisJaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9SVFNfQ1RTX0lOKSB7CisJCXNlcV9wcmludGYobSwgIiVjUlRTX0NUU19JTiIsIHNlcCk7CisJCXNlcCA9ICd8JzsKKwl9CisJaWYgKHNlbGYtPnNldHRpbmdzLmZsb3dfY29udHJvbCAmIElSQ09NTV9SVFNfQ1RTX09VVCkgeworCQlzZXFfcHJpbnRmKG0sICIlY1JUU19DVFNfT1VUIiwgc2VwKTsKKwkJc2VwID0gJ3wnOworCX0KKwlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX0RTUl9EVFJfSU4pIHsKKwkJc2VxX3ByaW50ZihtLCAiJWNEU1JfRFRSX0lOIiwgc2VwKTsKKwkJc2VwID0gJ3wnOworCX0KKwlpZiAoc2VsZi0+c2V0dGluZ3MuZmxvd19jb250cm9sICYgSVJDT01NX0RTUl9EVFJfT1VUKSB7CisJCXNlcV9wcmludGYobSwgIiVjRFNSX0RUUl9PVVQiLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5zZXR0aW5ncy5mbG93X2NvbnRyb2wgJiBJUkNPTU1fRU5RX0FDS19JTikgeworCQlzZXFfcHJpbnRmKG0sICIlY0VOUV9BQ0tfSU4iLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5zZXR0aW5ncy5mbG93X2NvbnRyb2wgJiBJUkNPTU1fRU5RX0FDS19PVVQpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWNFTlFfQUNLX09VVCIsIHNlcCk7CisJCXNlcCA9ICd8JzsKKwl9CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiRmxhZ3M6ICIpOwotCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiQVNZTkNfQ1RTX0ZMT1d8Iik7Ci0JaWYgKHNlbGYtPmZsYWdzICYgQVNZTkNfQ0hFQ0tfQ0QpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJBU1lOQ19DSEVDS19DRHwiKTsKLQlpZiAoc2VsZi0+ZmxhZ3MgJiBBU1lOQ19JTklUSUFMSVpFRCkKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkFTWU5DX0lOSVRJQUxJWkVEfCIpOwotCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKQotCQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiQVNZTkNfTE9XX0xBVEVOQ1l8Iik7Ci0JaWYgKHNlbGYtPmZsYWdzICYgQVNZTkNfQ0xPU0lORykKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkFTWU5DX0NMT1NJTkd8Iik7Ci0JaWYgKHNlbGYtPmZsYWdzICYgQVNZTkNfTk9STUFMX0FDVElWRSkKLQkJcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIkFTWU5DX05PUk1BTF9BQ1RJVkV8Iik7Ci0JaWYgKHNlbGYtPmZsYWdzKQotCQlyZXQtLTsgLyogcmVtb3ZlIHRoZSBsYXN0IHwgKi8KLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiXG4iKTsKKwlzZXFfcHV0cyhtLCAiRmxhZ3M6Iik7CisJc2VwID0gJyAnOworCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0NUU19GTE9XKSB7CisJCXNlcV9wcmludGYobSwgIiVjQVNZTkNfQ1RTX0ZMT1ciLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSB7CisJCXNlcV9wcmludGYobSwgIiVjQVNZTkNfQ0hFQ0tfQ0QiLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7CisJCXNlcV9wcmludGYobSwgIiVjQVNZTkNfSU5JVElBTElaRUQiLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0xPV19MQVRFTkNZKSB7CisJCXNlcV9wcmludGYobSwgIiVjQVNZTkNfTE9XX0xBVEVOQ1kiLCBzZXApOworCQlzZXAgPSAnfCc7CisJfQorCWlmIChzZWxmLT5mbGFncyAmIEFTWU5DX0NMT1NJTkcpIHsKKwkJc2VxX3ByaW50ZihtLCAiJWNBU1lOQ19DTE9TSU5HIiwgc2VwKTsKKwkJc2VwID0gJ3wnOworCX0KKwlpZiAoc2VsZi0+ZmxhZ3MgJiBBU1lOQ19OT1JNQUxfQUNUSVZFKSB7CisJCXNlcV9wcmludGYobSwgIiVjQVNZTkNfTk9STUFMX0FDVElWRSIsIHNlcCk7CisJCXNlcCA9ICd8JzsKKwl9CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiUm9sZTogJXNcbiIsIHNlbGYtPmNsaWVudCA/Ci0JCSAgICAgICAiY2xpZW50IiA6ICJzZXJ2ZXIiKTsKLQlyZXQgKz0gc3ByaW50ZihidWYrcmV0LCAiT3BlbiBjb3VudDogJWRcbiIsIHNlbGYtPm9wZW5fY291bnQpOwotCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJNYXggZGF0YSBzaXplOiAlZFxuIiwgc2VsZi0+bWF4X2RhdGFfc2l6ZSk7Ci0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIk1heCBoZWFkZXIgc2l6ZTogJWRcbiIsIHNlbGYtPm1heF9oZWFkZXJfc2l6ZSk7CisJc2VxX3ByaW50ZihtLCAiUm9sZTogJXNcbiIsIHNlbGYtPmNsaWVudCA/ICJjbGllbnQiIDogInNlcnZlciIpOworCXNlcV9wcmludGYobSwgIk9wZW4gY291bnQ6ICVkXG4iLCBzZWxmLT5vcGVuX2NvdW50KTsKKwlzZXFfcHJpbnRmKG0sICJNYXggZGF0YSBzaXplOiAlZFxuIiwgc2VsZi0+bWF4X2RhdGFfc2l6ZSk7CisJc2VxX3ByaW50ZihtLCAiTWF4IGhlYWRlciBzaXplOiAlZFxuIiwgc2VsZi0+bWF4X2hlYWRlcl9zaXplKTsKIAogCWlmIChzZWxmLT50dHkpCi0JCXJldCArPSBzcHJpbnRmKGJ1ZityZXQsICJIYXJkd2FyZTogJXNcbiIsCisJCXNlcV9wcmludGYobSwgIkhhcmR3YXJlOiAlc1xuIiwKIAkJCSAgICAgICBzZWxmLT50dHktPmh3X3N0b3BwZWQgPyAiU3RvcHBlZCIgOiAiUnVubmluZyIpOwotCi0JcmV0ICs9IHNwcmludGYoYnVmK3JldCwgIlxuIik7Ci0JcmV0dXJuIHJldDsKIH0KIAotCi0vKgotICogRnVuY3Rpb24gaXJjb21tX3R0eV9yZWFkX3Byb2MgKGJ1Ziwgc3RhcnQsIG9mZnNldCwgbGVuLCBlb2YsIHVudXNlZCkKLSAqCi0gKgotICoKLSAqLwotc3RhdGljIGludCBpcmNvbW1fdHR5X3JlYWRfcHJvYyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgbGVuLAotCQkJCWludCAqZW9mLCB2b2lkICp1bnVzZWQpCitzdGF0aWMgaW50IGlyY29tbV90dHlfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqc2VsZjsKLQlpbnQgY291bnQgPSAwLCBsOwotCW9mZl90IGJlZ2luID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlyY29tbV90dHktPmhiX3NwaW5sb2NrLCBmbGFncyk7CiAKIAlzZWxmID0gKHN0cnVjdCBpcmNvbW1fdHR5X2NiICopIGhhc2hiaW5fZ2V0X2ZpcnN0KGlyY29tbV90dHkpOwotCXdoaWxlICgoc2VsZiAhPSBOVUxMKSAmJiAoY291bnQgPCA0MDAwKSkgeworCXdoaWxlIChzZWxmICE9IE5VTEwpIHsKIAkJaWYgKHNlbGYtPm1hZ2ljICE9IElSQ09NTV9UVFlfTUFHSUMpCiAJCQlicmVhazsKIAotCQlsID0gaXJjb21tX3R0eV9saW5lX2luZm8oc2VsZiwgYnVmICsgY291bnQpOwotCQljb3VudCArPSBsOwotCQlpZiAoY291bnQrYmVnaW4gPiBvZmZzZXQrbGVuKQotCQkJZ290byBkb25lOwotCQlpZiAoY291bnQrYmVnaW4gPCBvZmZzZXQpIHsKLQkJCWJlZ2luICs9IGNvdW50OwotCQkJY291bnQgPSAwOwotCQl9Ci0KKwkJaXJjb21tX3R0eV9saW5lX2luZm8oc2VsZiwgbSk7CiAJCXNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgaGFzaGJpbl9nZXRfbmV4dChpcmNvbW1fdHR5KTsKIAl9Ci0JKmVvZiA9IDE7Ci1kb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlyY29tbV90dHktPmhiX3NwaW5sb2NrLCBmbGFncyk7Ci0KLQlpZiAob2Zmc2V0ID49IGNvdW50K2JlZ2luKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBidWYgKyAob2Zmc2V0LWJlZ2luKTsKLQlyZXR1cm4gKChsZW4gPCBiZWdpbitjb3VudC1vZmZzZXQpID8gbGVuIDogYmVnaW4rY291bnQtb2Zmc2V0KTsKKwlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBpcmNvbW1fdHR5X3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaXJjb21tX3R0eV9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcmNvbW1fdHR5X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gaXJjb21tX3R0eV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogTU9EVUxFX0FVVEhPUigiRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPiIpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL0tjb25maWcgYi9uZXQvbWFjODAyMTEvS2NvbmZpZwppbmRleCA2MGMxNjE2Li5mM2Q5YWUzIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvS2NvbmZpZworKysgYi9uZXQvbWFjODAyMTEvS2NvbmZpZwpAQCAtMzMsNyArMzMsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIGRlZmF1bHQgcmF0ZSBjb250cm9sIGFsZ29yaXRobQogCSAgbWFjODAyMTEgd2lsbCB1c2UuIE5vdGUgdGhhdCB0aGlzIGRlZmF1bHQgY2FuIHN0aWxsIGJlCi0JICBvdmVycmlkZW4gdGhyb3VnaCB0aGUgaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyBtb2R1bGUKKwkgIG92ZXJyaWRkZW4gdGhyb3VnaCB0aGUgaWVlZTgwMjExX2RlZmF1bHRfcmNfYWxnbyBtb2R1bGUKIAkgIHBhcmFtZXRlciBpZiBkaWZmZXJlbnQgYWxnb3JpdGhtcyBhcmUgYXZhaWxhYmxlLgogCiBjb25maWcgTUFDODAyMTFfUkNfREVGQVVMVF9QSUQKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCAyYzk2N2U0Li5iYjI3OWJmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCkBAIC01Miw3ICs1Miw3IEBACiAKIAkgIFBsZWFzZSBub3RlIHRoYXQgY3VycmVudGx5IHRoaXMgb3B0aW9uIG9ubHkgc2V0cyBhIGRlZmF1bHQgc3RhdGUuCiAJICBZb3UgbWF5IGNoYW5nZSBpdCBhdCBib290IHRpbWUgd2l0aCBuZl9jb25udHJhY2suYWNjdD0wLzEga2VybmVsCi0JICBwYXJhbWF0ZXIgb3IgYnkgbG9hZGluZyB0aGUgbmZfY29ubnRyYWNrIG1vZHVsZSB3aXRoIGFjY3Q9MC8xLgorCSAgcGFyYW1ldGVyIG9yIGJ5IGxvYWRpbmcgdGhlIG5mX2Nvbm50cmFjayBtb2R1bGUgd2l0aCBhY2N0PTAvMS4KIAogCSAgWW91IG1heSBhbHNvIGRpc2FibGUvZW5hYmxlIGl0IG9uIGEgcnVubmluZyBzeXN0ZW0gd2l0aDoKIAkgICBzeXNjdGwgbmV0Lm5ldGZpbHRlci5uZl9jb25udHJhY2tfYWNjdD0wLzEKZGlmZiAtLWdpdCBhL25ldC9waG9uZXQvS2NvbmZpZyBiL25ldC9waG9uZXQvS2NvbmZpZwppbmRleCA1MWE1NjY5Li42ZWM3ZDU1IDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L0tjb25maWcKKysrIGIvbmV0L3Bob25ldC9LY29uZmlnCkBAIC02LDcgKzYsNyBAQAogCXRyaXN0YXRlICJQaG9uZXQgcHJvdG9jb2xzIGZhbWlseSIKIAloZWxwCiAJICBUaGUgUGhvbmUgTmV0d29yayBwcm90b2NvbCAoUGhvTmV0KSBpcyBhIHBhY2tldC1vcmllbnRlZAotCSAgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBkZXZlbG9wcGVkIGJ5IE5va2lhIGZvciB1c2Ugd2l0aCBpdHMgbW9kZW1zLgorCSAgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBkZXZlbG9wZWQgYnkgTm9raWEgZm9yIHVzZSB3aXRoIGl0cyBtb2RlbXMuCiAKIAkgIFRoaXMgaXMgcmVxdWlyZWQgZm9yIE1hZW1vIHRvIHVzZSBjZWxsdWxhciBkYXRhIGNvbm5lY3Rpdml0eSAoaWYKIAkgIHN1cHBvcnRlZCkuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gY29udHJvbCBOb2tpYSBwaG9uZXMKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuYyBiL25ldC9yZHMvaWIuYwppbmRleCAwNmE3Yjc5Li40OTMzYjM4IDEwMDY0NAotLS0gYS9uZXQvcmRzL2liLmMKKysrIGIvbmV0L3Jkcy9pYi5jCkBAIC01MSw2ICs1MSw3IEBACiAKIHN0cnVjdCBsaXN0X2hlYWQgcmRzX2liX2RldmljZXM7CiAKKy8qIE5PVEU6IGlmIGFsc28gZ3JhYmJpbmcgaWJkZXYgbG9jaywgZ3JhYiB0aGlzIGZpcnN0ICovCiBERUZJTkVfU1BJTkxPQ0soaWJfbm9kZXZfY29ubnNfbG9jayk7CiBMSVNUX0hFQUQoaWJfbm9kZXZfY29ubnMpOwogCkBAIC0xMzcsNyArMTM4LDcgQEAKIAkJa2ZyZWUoaV9pcGFkZHIpOwogCX0KIAotCXJkc19pYl9yZW1vdmVfY29ubnMocmRzX2liZGV2KTsKKwlyZHNfaWJfZGVzdHJveV9jb25ucyhyZHNfaWJkZXYpOwogCiAJaWYgKHJkc19pYmRldi0+bXJfcG9vbCkKIAkJcmRzX2liX2Rlc3Ryb3lfbXJfcG9vbChyZHNfaWJkZXYtPm1yX3Bvb2wpOwpAQCAtMjQ5LDcgKzI1MCw3IEBACiB2b2lkIHJkc19pYl9leGl0KHZvaWQpCiB7CiAJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0lCX0NPTk5FQ1RJT05TLCByZHNfaWJfaWNfaW5mbyk7Ci0JcmRzX2liX3JlbW92ZV9ub2Rldl9jb25ucygpOworCXJkc19pYl9kZXN0cm95X25vZGV2X2Nvbm5zKCk7CiAJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJnJkc19pYl9jbGllbnQpOwogCXJkc19pYl9zeXNjdGxfZXhpdCgpOwogCXJkc19pYl9yZWN2X2V4aXQoKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWIuaCBiL25ldC9yZHMvaWIuaAppbmRleCA4YmU1NjNhLi4wNjkyMDZjIDEwMDY0NAotLS0gYS9uZXQvcmRzL2liLmgKKysrIGIvbmV0L3Jkcy9pYi5oCkBAIC0xMDgsNyArMTA4LDEyIEBACiAKIAkvKiBzZW5kaW5nIGFja3MgKi8KIAl1bnNpZ25lZCBsb25nCQlpX2Fja19mbGFnczsKKyNpZmRlZiBLRVJORUxfSEFTX0FUT01JQzY0CisJYXRvbWljNjRfdAkJaV9hY2tfbmV4dDsJLyogbmV4dCBBQ0sgdG8gc2VuZCAqLworI2Vsc2UKKwlzcGlubG9ja190CQlpX2Fja19sb2NrOwkvKiBwcm90ZWN0IGlfYWNrX25leHQgKi8KIAl1NjQJCQlpX2Fja19uZXh0OwkvKiBuZXh0IEFDSyB0byBzZW5kICovCisjZW5kaWYKIAlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9hY2s7CiAJc3RydWN0IGliX3NlbmRfd3IJaV9hY2tfd3I7CiAJc3RydWN0IGliX3NnZQkJaV9hY2tfc2dlOwpAQCAtMjY3LDkgKzI3MiwxNyBAQAogCiAvKiBpYl9yZG1hLmMgKi8KIGludCByZHNfaWJfdXBkYXRlX2lwYWRkcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBfX2JlMzIgaXBhZGRyKTsKLWludCByZHNfaWJfYWRkX2Nvbm4oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKLXZvaWQgcmRzX2liX3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKTsKLXZvaWQgcmRzX2liX3JlbW92ZV9jb25ucyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2KTsKK3ZvaWQgcmRzX2liX2FkZF9jb25uKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pYl9yZW1vdmVfY29ubihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCBfX3Jkc19pYl9kZXN0cm95X2Nvbm5zKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHNwaW5sb2NrX3QgKmxpc3RfbG9jayk7CitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2liX2Rlc3Ryb3lfbm9kZXZfY29ubnModm9pZCkKK3sKKwlfX3Jkc19pYl9kZXN0cm95X2Nvbm5zKCZpYl9ub2Rldl9jb25ucywgJmliX25vZGV2X2Nvbm5zX2xvY2spOworfQorc3RhdGljIGlubGluZSB2b2lkIHJkc19pYl9kZXN0cm95X2Nvbm5zKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpCit7CisJX19yZHNfaWJfZGVzdHJveV9jb25ucygmcmRzX2liZGV2LT5jb25uX2xpc3QsICZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKK30KIHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcmRzX2liX2NyZWF0ZV9tcl9wb29sKHN0cnVjdCByZHNfaWJfZGV2aWNlICopOwogdm9pZCByZHNfaWJfZ2V0X21yX2luZm8oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8pOwogdm9pZCByZHNfaWJfZGVzdHJveV9tcl9wb29sKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqKTsKQEAgLTM1NSwxMyArMzY4LDQgQEAKIAlyZXR1cm4gJnNnZVsxXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJkc19pYl9zZXRfNjRiaXQodTY0ICpwdHIsIHU2NCB2YWwpCi17Ci0jaWYgQklUU19QRVJfTE9ORyA9PSA2NAotCSpwdHIgPSB2YWw7Ci0jZWxzZQotCXNldF82NGJpdChwdHIsIHZhbCk7Ci0jZW5kaWYKLX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX2NtLmMgYi9uZXQvcmRzL2liX2NtLmMKaW5kZXggMDUzMjIzNy4uZjhlNDBlMSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pYl9jbS5jCisrKyBiL25ldC9yZHMvaWJfY20uYwpAQCAtMTI2LDkgKzEyNiw3IEBACiAJZXJyID0gcmRzX2liX3VwZGF0ZV9pcGFkZHIocmRzX2liZGV2LCBjb25uLT5jX2xhZGRyKTsKIAlpZiAoZXJyKQogCQlwcmludGsoS0VSTl9FUlIgInJkc19pYl91cGRhdGVfaXBhZGRyIGZhaWxlZCAoJWQpXG4iLCBlcnIpOwotCWVyciA9IHJkc19pYl9hZGRfY29ubihyZHNfaWJkZXYsIGNvbm4pOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX0VSUiAicmRzX2liX2FkZF9jb25uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCXJkc19pYl9hZGRfY29ubihyZHNfaWJkZXYsIGNvbm4pOwogCiAJLyogSWYgdGhlIHBlZXIgZ2F2ZSB1cyB0aGUgbGFzdCBwYWNrZXQgaXQgc2F3LCBwcm9jZXNzIHRoaXMgYXMgaWYKIAkgKiB3ZSBoYWQgcmVjZWl2ZWQgYSByZWd1bGFyIEFDSy4gKi8KQEAgLTYxNiwxOCArNjE0LDggQEAKIAkJLyoKIAkJICogTW92ZSBjb25uZWN0aW9uIGJhY2sgdG8gdGhlIG5vZGV2IGxpc3QuCiAJCSAqLwotCQlpZiAoaWMtPnJkc19pYmRldikgewotCi0JCQlzcGluX2xvY2tfaXJxKCZpYy0+cmRzX2liZGV2LT5zcGlubG9jayk7Ci0JCQlCVUdfT04obGlzdF9lbXB0eSgmaWMtPmliX25vZGUpKTsKLQkJCWxpc3RfZGVsKCZpYy0+aWJfbm9kZSk7Ci0JCQlzcGluX3VubG9ja19pcnEoJmljLT5yZHNfaWJkZXYtPnNwaW5sb2NrKTsKLQotCQkJc3Bpbl9sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7Ci0JCQlsaXN0X2FkZF90YWlsKCZpYy0+aWJfbm9kZSwgJmliX25vZGV2X2Nvbm5zKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7Ci0JCQlpYy0+cmRzX2liZGV2ID0gTlVMTDsKLQkJfQorCQlpZiAoaWMtPnJkc19pYmRldikKKwkJCXJkc19pYl9yZW1vdmVfY29ubihpYy0+cmRzX2liZGV2LCBjb25uKTsKIAogCQlpYy0+aV9jbV9pZCA9IE5VTEw7CiAJCWljLT5pX3BkID0gTlVMTDsKQEAgLTY0OCw3ICs2MzYsMTEgQEAKIAogCS8qIENsZWFyIHRoZSBBQ0sgc3RhdGUgKi8KIAljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7Ci0JcmRzX2liX3NldF82NGJpdCgmaWMtPmlfYWNrX25leHQsIDApOworI2lmZGVmIEtFUk5FTF9IQVNfQVRPTUlDNjQKKwlhdG9taWM2NF9zZXQoJmljLT5pX2Fja19uZXh0LCAwKTsKKyNlbHNlCisJaWMtPmlfYWNrX25leHQgPSAwOworI2VuZGlmCiAJaWMtPmlfYWNrX3JlY3YgPSAwOwogCiAJLyogQ2xlYXIgZmxvdyBjb250cm9sIHN0YXRlICovCkBAIC02ODEsNiArNjczLDkgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZpYy0+aWJfbm9kZSk7CiAJbXV0ZXhfaW5pdCgmaWMtPmlfcmVjdl9tdXRleCk7CisjaWZuZGVmIEtFUk5FTF9IQVNfQVRPTUlDNjQKKwlzcGluX2xvY2tfaW5pdCgmaWMtPmlfYWNrX2xvY2spOworI2VuZGlmCiAKIAkvKgogCSAqIHJkc19pYl9jb25uX3NodXRkb3duKCkgd2FpdHMgZm9yIHRoZXNlIHRvIGJlIGVtcHRpZWQgc28gdGhleQpAQCAtNzAxLDExICs2OTYsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEZyZWUgYSBjb25uZWN0aW9uLiBDb25uZWN0aW9uIG11c3QgYmUgc2h1dCBkb3duIGFuZCBub3Qgc2V0IGZvciByZWNvbm5lY3QuCisgKi8KIHZvaWQgcmRzX2liX2Nvbm5fZnJlZSh2b2lkICphcmcpCiB7CiAJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGFyZzsKKwlzcGlubG9ja190CSpsb2NrX3B0cjsKKwogCXJkc2RlYnVnKCJpYyAlcFxuIiwgaWMpOworCisJLyoKKwkgKiBDb25uIGlzIGVpdGhlciBvbiBhIGRldidzIGxpc3Qgb3Igb24gdGhlIG5vZGV2IGxpc3QuCisJICogQSByYWNlIHdpdGggc2h1dGRvd24oKSBvciBjb25uZWN0KCkgd291bGQgY2F1c2UgcHJvYmxlbXMKKwkgKiAoc2luY2UgcmRzX2liZGV2IHdvdWxkIGNoYW5nZSkgYnV0IHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4KKwkgKi8KKwlsb2NrX3B0ciA9IGljLT5yZHNfaWJkZXYgPyAmaWMtPnJkc19pYmRldi0+c3BpbmxvY2sgOiAmaWJfbm9kZXZfY29ubnNfbG9jazsKKworCXNwaW5fbG9ja19pcnEobG9ja19wdHIpOwogCWxpc3RfZGVsKCZpYy0+aWJfbm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxKGxvY2tfcHRyKTsKKwogCWtmcmVlKGljKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZG1hLmMgYi9uZXQvcmRzL2liX3JkbWEuYwppbmRleCA2OWE2Mjg5Li44MTAzM2FmIDEwMDY0NAotLS0gYS9uZXQvcmRzL2liX3JkbWEuYworKysgYi9uZXQvcmRzL2liX3JkbWEuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJcmV0dXJuIHJkc19pYl9hZGRfaXBhZGRyKHJkc19pYmRldiwgaXBhZGRyKTsKIH0KIAotaW50IHJkc19pYl9hZGRfY29ubihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit2b2lkIHJkc19pYl9hZGRfY29ubihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCiB7CiAJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CiAKQEAgLTE0OCw0NSArMTQ4LDQ0IEBACiAJQlVHX09OKGxpc3RfZW1wdHkoJmliX25vZGV2X2Nvbm5zKSk7CiAJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pYl9ub2RlKSk7CiAJbGlzdF9kZWwoJmljLT5pYl9ub2RlKTsKLQlzcGluX3VubG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOwogCiAJc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmaWMtPmliX25vZGUsICZyZHNfaWJkZXYtPmNvbm5fbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKLQotCWljLT5yZHNfaWJkZXYgPSByZHNfaWJkZXY7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCByZHNfaWJfcmVtb3ZlX25vZGV2X2Nvbm5zKHZvaWQpCi17Ci0Jc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgKl9pYzsKLQlMSVNUX0hFQUQodG1wX2xpc3QpOwotCi0JLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLwotCXNwaW5fbG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOwotCWxpc3Rfc3BsaWNlKCZpYl9ub2Rldl9jb25ucywgJnRtcF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmaWJfbm9kZXZfY29ubnMpOwogCXNwaW5fdW5sb2NrX2lycSgmaWJfbm9kZXZfY29ubnNfbG9jayk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpYl9ub2RlKSB7Ci0JCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQotCQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubi0+Y19wYXNzaXZlKTsKLQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubik7Ci0JfQorCWljLT5yZHNfaWJkZXYgPSByZHNfaWJkZXY7CiB9CiAKLXZvaWQgcmRzX2liX3JlbW92ZV9jb25ucyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2KQordm9pZCByZHNfaWJfcmVtb3ZlX2Nvbm4oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJLyogcGxhY2UgY29ubiBvbiBub2Rldl9jb25uc19saXN0ICovCisJc3Bpbl9sb2NrKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aWJfbm9kZSkpOworCWxpc3RfZGVsKCZpYy0+aWJfbm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKworCWxpc3RfYWRkX3RhaWwoJmljLT5pYl9ub2RlLCAmaWJfbm9kZXZfY29ubnMpOworCisJc3Bpbl91bmxvY2soJmliX25vZGV2X2Nvbm5zX2xvY2spOworCisJaWMtPnJkc19pYmRldiA9IE5VTEw7Cit9CisKK3ZvaWQgX19yZHNfaWJfZGVzdHJveV9jb25ucyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBzcGlubG9ja190ICpsaXN0X2xvY2spCiB7CiAJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgKl9pYzsKIAlMSVNUX0hFQUQodG1wX2xpc3QpOwogCiAJLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLwotCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOwotCWxpc3Rfc3BsaWNlKCZyZHNfaWJkZXYtPmNvbm5fbGlzdCwgJnRtcF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmcmRzX2liZGV2LT5jb25uX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJc3Bpbl9sb2NrX2lycShsaXN0X2xvY2spOworCWxpc3Rfc3BsaWNlKGxpc3QsICZ0bXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQobGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKGxpc3RfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpYl9ub2RlKSB7CiAJCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuYwppbmRleCA1MDYxYjU1Li4zNmQ5MzE1IDEwMDY0NAotLS0gYS9uZXQvcmRzL2liX3JlY3YuYworKysgYi9uZXQvcmRzL2liX3JlY3YuYwpAQCAtMzk1LDEwICszOTUsMzcgQEAKICAqIHJvb20gZm9yIGl0IGJleW9uZCB0aGUgcmluZyBzaXplLiAgU2VuZCBjb21wbGV0aW9uIG5vdGljZXMgaXRzIHNwZWNpYWwKICAqIHdyX2lkIGFuZCBhdm9pZHMgd29ya2luZyB3aXRoIHRoZSByaW5nIGluIHRoYXQgY2FzZS4KICAqLworI2lmbmRlZiBLRVJORUxfSEFTX0FUT01JQzY0CiBzdGF0aWMgdm9pZCByZHNfaWJfc2V0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCB1NjQgc2VxLAogCQkJCWludCBhY2tfcmVxdWlyZWQpCiB7Ci0JcmRzX2liX3NldF82NGJpdCgmaWMtPmlfYWNrX25leHQsIHNlcSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpYy0+aV9hY2tfbG9jaywgZmxhZ3MpOworCWljLT5pX2Fja19uZXh0ID0gc2VxOworCWlmIChhY2tfcmVxdWlyZWQpCisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWMtPmlfYWNrX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHU2NCByZHNfaWJfZ2V0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTY0IHNlcTsKKworCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpYy0+aV9hY2tfbG9jaywgZmxhZ3MpOworCXNlcSA9IGljLT5pX2Fja19uZXh0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljLT5pX2Fja19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc2VxOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIHJkc19pYl9zZXRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHU2NCBzZXEsCisJCQkJaW50IGFja19yZXF1aXJlZCkKK3sKKwlhdG9taWM2NF9zZXQoJmljLT5pX2Fja19uZXh0LCBzZXEpOwogCWlmIChhY2tfcmVxdWlyZWQpIHsKIAkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CiAJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CkBAIC00MTAsOCArNDM3LDEwIEBACiAJY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOwogCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CiAKLQlyZXR1cm4gaWMtPmlfYWNrX25leHQ7CisJcmV0dXJuIGF0b21pYzY0X3JlYWQoJmljLT5pX2Fja19uZXh0KTsKIH0KKyNlbmRpZgorCiAKIHN0YXRpYyB2b2lkIHJkc19pYl9zZW5kX2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCB1bnNpZ25lZCBpbnQgYWR2X2NyZWRpdHMpCiB7CkBAIC00NjQsNiArNDkzLDEwIEBACiAgKiAgLQlpX2Fja19uZXh0LCB3aGljaCBpcyB0aGUgbGFzdCBzZXF1ZW5jZSBudW1iZXIgd2UgcmVjZWl2ZWQKICAqCiAgKiBQb3RlbnRpYWxseSwgc2VuZCBxdWV1ZSBhbmQgcmVjZWl2ZSBxdWV1ZSBoYW5kbGVycyBjYW4gcnVuIGNvbmN1cnJlbnRseS4KKyAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gbm90IGhhdmUgdG8gdXNlIGEgc3BpbmxvY2sgdG8gc3luY2hyb25pemUgdGhpbmdzLAorICogYnV0IHRoZSBvbmUgcHJvYmxlbSB0aGF0IHJ1bGVzIHRoaXMgb3V0IGlzIHRoYXQgNjRiaXQgdXBkYXRlcyBhcmUKKyAqIG5vdCBhdG9taWMgb24gYWxsIHBsYXRmb3Jtcy4gVGhpbmdzIHdvdWxkIGJlIGEgbG90IHNpbXBsZXIgaWYKKyAqIHdlIGhhZCBhdG9taWM2NCBvciBtYXliZSBjbXB4Y2hnNjQgZXZlcnl3aGVyZS4KICAqCiAgKiBSZWNvbm5lY3RpbmcgY29tcGxpY2F0ZXMgdGhpcyBwaWN0dXJlIGp1c3Qgc2xpZ2h0bHkuIFdoZW4gd2UKICAqIHJlY29ubmVjdCwgd2UgbWF5IGJlIHNlZWluZyBkdXBsaWNhdGUgcGFja2V0cy4gVGhlIHBlZXIKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXcuYyBiL25ldC9yZHMvaXcuYwppbmRleCAxYjU2OTA1Li5iNzMyZWZiIDEwMDY0NAotLS0gYS9uZXQvcmRzL2l3LmMKKysrIGIvbmV0L3Jkcy9pdy5jCkBAIC01MSw2ICs1MSw3IEBACiAKIHN0cnVjdCBsaXN0X2hlYWQgcmRzX2l3X2RldmljZXM7CiAKKy8qIE5PVEU6IGlmIGFsc28gZ3JhYmJpbmcgaXdkZXYgbG9jaywgZ3JhYiB0aGlzIGZpcnN0ICovCiBERUZJTkVfU1BJTkxPQ0soaXdfbm9kZXZfY29ubnNfbG9jayk7CiBMSVNUX0hFQUQoaXdfbm9kZXZfY29ubnMpOwogCkBAIC0xNDUsNyArMTQ2LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKIAotCXJkc19pd19yZW1vdmVfY29ubnMocmRzX2l3ZGV2KTsKKwlyZHNfaXdfZGVzdHJveV9jb25ucyhyZHNfaXdkZXYpOwogCiAJaWYgKHJkc19pd2Rldi0+bXJfcG9vbCkKIAkJcmRzX2l3X2Rlc3Ryb3lfbXJfcG9vbChyZHNfaXdkZXYtPm1yX3Bvb2wpOwpAQCAtMjU4LDcgKzI1OSw3IEBACiB2b2lkIHJkc19pd19leGl0KHZvaWQpCiB7CiAJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0lXQVJQX0NPTk5FQ1RJT05TLCByZHNfaXdfaWNfaW5mbyk7Ci0JcmRzX2l3X3JlbW92ZV9ub2Rldl9jb25ucygpOworCXJkc19pd19kZXN0cm95X25vZGV2X2Nvbm5zKCk7CiAJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJnJkc19pd19jbGllbnQpOwogCXJkc19pd19zeXNjdGxfZXhpdCgpOwogCXJkc19pd19yZWN2X2V4aXQoKTsKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXcuaCBiL25ldC9yZHMvaXcuaAppbmRleCAwZGRkYTM0Li5iNGZiMjcyIDEwMDY0NAotLS0gYS9uZXQvcmRzL2l3LmgKKysrIGIvbmV0L3Jkcy9pdy5oCkBAIC0xMzEsNyArMTMxLDEyIEBACiAKIAkvKiBzZW5kaW5nIGFja3MgKi8KIAl1bnNpZ25lZCBsb25nCQlpX2Fja19mbGFnczsKKyNpZmRlZiBLRVJORUxfSEFTX0FUT01JQzY0CisJYXRvbWljNjRfdAkJaV9hY2tfbmV4dDsJLyogbmV4dCBBQ0sgdG8gc2VuZCAqLworI2Vsc2UKKwlzcGlubG9ja190CQlpX2Fja19sb2NrOwkvKiBwcm90ZWN0IGlfYWNrX25leHQgKi8KIAl1NjQJCQlpX2Fja19uZXh0OwkvKiBuZXh0IEFDSyB0byBzZW5kICovCisjZW5kaWYKIAlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9hY2s7CiAJc3RydWN0IGliX3NlbmRfd3IJaV9hY2tfd3I7CiAJc3RydWN0IGliX3NnZQkJaV9hY2tfc2dlOwpAQCAtMjk0LDkgKzI5OSwxNyBAQAogCiAvKiBpYl9yZG1hLmMgKi8KIGludCByZHNfaXdfdXBkYXRlX2NtX2lkKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCk7Ci1pbnQgcmRzX2l3X2FkZF9jb25uKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Ci12b2lkIHJkc19pd19yZW1vdmVfbm9kZXZfY29ubnModm9pZCk7Ci12b2lkIHJkc19pd19yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldik7Cit2b2lkIHJkc19pd19hZGRfY29ubihzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfaXdfcmVtb3ZlX2Nvbm4oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgX19yZHNfaXdfZGVzdHJveV9jb25ucyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBzcGlubG9ja190ICpsaXN0X2xvY2spOworc3RhdGljIGlubGluZSB2b2lkIHJkc19pd19kZXN0cm95X25vZGV2X2Nvbm5zKHZvaWQpCit7CisJX19yZHNfaXdfZGVzdHJveV9jb25ucygmaXdfbm9kZXZfY29ubnMsICZpd19ub2Rldl9jb25uc19sb2NrKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfaXdfZGVzdHJveV9jb25ucyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2KQoreworCV9fcmRzX2l3X2Rlc3Ryb3lfY29ubnMoJnJkc19pd2Rldi0+Y29ubl9saXN0LCAmcmRzX2l3ZGV2LT5zcGlubG9jayk7Cit9CiBzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnJkc19pd19jcmVhdGVfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqKTsKIHZvaWQgcmRzX2l3X2dldF9tcl9pbmZvKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvKTsKIHZvaWQgcmRzX2l3X2Rlc3Ryb3lfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKik7CkBAIC0zODMsMTMgKzM5Niw0IEBACiAJcmV0dXJuICZzZ2VbMV07CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZHNfaXdfc2V0XzY0Yml0KHU2NCAqcHRyLCB1NjQgdmFsKQotewotI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKLQkqcHRyID0gdmFsOwotI2Vsc2UKLQlzZXRfNjRiaXQocHRyLCB2YWwpOwotI2VuZGlmCi19Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19jbS5jIGIvbmV0L3Jkcy9pd19jbS5jCmluZGV4IDU3ZWNiM2QuLmE0MTZiMGQgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaXdfY20uYworKysgYi9uZXQvcmRzL2l3X2NtLmMKQEAgLTg2LDkgKzg2LDcgQEAKIAllcnIgPSByZHNfaXdfdXBkYXRlX2NtX2lkKHJkc19pd2RldiwgaWMtPmlfY21faWQpOwogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX0VSUiAicmRzX2l3X3VwZGF0ZV9pcGFkZHIgZmFpbGVkICglZClcbiIsIGVycik7Ci0JZXJyID0gcmRzX2l3X2FkZF9jb25uKHJkc19pd2RldiwgY29ubik7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICJyZHNfaXdfYWRkX2Nvbm4gZmFpbGVkICglZClcbiIsIGVycik7CisJcmRzX2l3X2FkZF9jb25uKHJkc19pd2RldiwgY29ubik7CiAKIAkvKiBJZiB0aGUgcGVlciBnYXZlIHVzIHRoZSBsYXN0IHBhY2tldCBpdCBzYXcsIHByb2Nlc3MgdGhpcyBhcyBpZgogCSAqIHdlIGhhZCByZWNlaXZlZCBhIHJlZ3VsYXIgQUNLLiAqLwpAQCAtNjM3LDE5ICs2MzUsOCBAQAogCQkgKiAJTW92ZSBjb25uZWN0aW9uIGJhY2sgdG8gdGhlIG5vZGV2IGxpc3QuCiAJCSAqIAlSZW1vdmUgY21faWQgZnJvbSB0aGUgZGV2aWNlIGNtX2lkIGxpc3QuCiAJCSAqLwotCQlpZiAoaWMtPnJkc19pd2RldikgewotCi0JCQlzcGluX2xvY2tfaXJxKCZpYy0+cmRzX2l3ZGV2LT5zcGlubG9jayk7Ci0JCQlCVUdfT04obGlzdF9lbXB0eSgmaWMtPml3X25vZGUpKTsKLQkJCWxpc3RfZGVsKCZpYy0+aXdfbm9kZSk7Ci0JCQlzcGluX3VubG9ja19pcnEoJmljLT5yZHNfaXdkZXYtPnNwaW5sb2NrKTsKLQotCQkJc3Bpbl9sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7Ci0JCQlsaXN0X2FkZF90YWlsKCZpYy0+aXdfbm9kZSwgJml3X25vZGV2X2Nvbm5zKTsKLQkJCXNwaW5fdW5sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7Ci0JCQlyZHNfaXdfcmVtb3ZlX2NtX2lkKGljLT5yZHNfaXdkZXYsIGljLT5pX2NtX2lkKTsKLQkJCWljLT5yZHNfaXdkZXYgPSBOVUxMOwotCQl9CisJCWlmIChpYy0+cmRzX2l3ZGV2KQorCQkJcmRzX2l3X3JlbW92ZV9jb25uKGljLT5yZHNfaXdkZXYsIGNvbm4pOwogCiAJCXJkbWFfZGVzdHJveV9pZChpYy0+aV9jbV9pZCk7CiAKQEAgLTY3Miw3ICs2NTksMTEgQEAKIAogCS8qIENsZWFyIHRoZSBBQ0sgc3RhdGUgKi8KIAljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7Ci0JcmRzX2l3X3NldF82NGJpdCgmaWMtPmlfYWNrX25leHQsIDApOworI2lmZGVmIEtFUk5FTF9IQVNfQVRPTUlDNjQKKwlhdG9taWM2NF9zZXQoJmljLT5pX2Fja19uZXh0LCAwKTsKKyNlbHNlCisJaWMtPmlfYWNrX25leHQgPSAwOworI2VuZGlmCiAJaWMtPmlfYWNrX3JlY3YgPSAwOwogCiAJLyogQ2xlYXIgZmxvdyBjb250cm9sIHN0YXRlICovCkBAIC03MDYsNiArNjk3LDkgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZpYy0+aXdfbm9kZSk7CiAJbXV0ZXhfaW5pdCgmaWMtPmlfcmVjdl9tdXRleCk7CisjaWZuZGVmIEtFUk5FTF9IQVNfQVRPTUlDNjQKKwlzcGluX2xvY2tfaW5pdCgmaWMtPmlfYWNrX2xvY2spOworI2VuZGlmCiAKIAkvKgogCSAqIHJkc19pd19jb25uX3NodXRkb3duKCkgd2FpdHMgZm9yIHRoZXNlIHRvIGJlIGVtcHRpZWQgc28gdGhleQpAQCAtNzI2LDExICs3MjAsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIEZyZWUgYSBjb25uZWN0aW9uLiBDb25uZWN0aW9uIG11c3QgYmUgc2h1dCBkb3duIGFuZCBub3Qgc2V0IGZvciByZWNvbm5lY3QuCisgKi8KIHZvaWQgcmRzX2l3X2Nvbm5fZnJlZSh2b2lkICphcmcpCiB7CiAJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGFyZzsKKwlzcGlubG9ja190CSpsb2NrX3B0cjsKKwogCXJkc2RlYnVnKCJpYyAlcFxuIiwgaWMpOworCisJLyoKKwkgKiBDb25uIGlzIGVpdGhlciBvbiBhIGRldidzIGxpc3Qgb3Igb24gdGhlIG5vZGV2IGxpc3QuCisJICogQSByYWNlIHdpdGggc2h1dGRvd24oKSBvciBjb25uZWN0KCkgd291bGQgY2F1c2UgcHJvYmxlbXMKKwkgKiAoc2luY2UgcmRzX2l3ZGV2IHdvdWxkIGNoYW5nZSkgYnV0IHRoYXQgc2hvdWxkIG5ldmVyIGhhcHBlbi4KKwkgKi8KKwlsb2NrX3B0ciA9IGljLT5yZHNfaXdkZXYgPyAmaWMtPnJkc19pd2Rldi0+c3BpbmxvY2sgOiAmaXdfbm9kZXZfY29ubnNfbG9jazsKKworCXNwaW5fbG9ja19pcnEobG9ja19wdHIpOwogCWxpc3RfZGVsKCZpYy0+aXdfbm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxKGxvY2tfcHRyKTsKKwogCWtmcmVlKGljKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19yZG1hLmMgYi9uZXQvcmRzL2l3X3JkbWEuYwppbmRleCAxYzAyYThmLi5kY2RiMzdkIDEwMDY0NAotLS0gYS9uZXQvcmRzL2l3X3JkbWEuYworKysgYi9uZXQvcmRzL2l3X3JkbWEuYwpAQCAtMTk2LDcgKzE5Niw3IEBACiAJcmV0dXJuIHJkc19pd19hZGRfY21faWQocmRzX2l3ZGV2LCBjbV9pZCk7CiB9CiAKLWludCByZHNfaXdfYWRkX2Nvbm4oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQordm9pZCByZHNfaXdfYWRkX2Nvbm4oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQogewogCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOwogCkBAIC0yMDUsNDUgKzIwNSw0NSBAQAogCUJVR19PTihsaXN0X2VtcHR5KCZpd19ub2Rldl9jb25ucykpOwogCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aXdfbm9kZSkpOwogCWxpc3RfZGVsKCZpYy0+aXdfbm9kZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKIAogCXNwaW5fbG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOwogCWxpc3RfYWRkX3RhaWwoJmljLT5pd19ub2RlLCAmcmRzX2l3ZGV2LT5jb25uX2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7Ci0KLQlpYy0+cmRzX2l3ZGV2ID0gcmRzX2l3ZGV2OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgcmRzX2l3X3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKQotewotCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsICpfaWM7Ci0JTElTVF9IRUFEKHRtcF9saXN0KTsKLQotCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KLQlzcGluX2xvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKLQlsaXN0X3NwbGljZSgmaXdfbm9kZXZfY29ubnMsICZ0bXBfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJml3X25vZGV2X2Nvbm5zKTsKIAlzcGluX3VubG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGljLCBfaWMsICZ0bXBfbGlzdCwgaXdfbm9kZSkgewotCQlpZiAoaWMtPmNvbm4tPmNfcGFzc2l2ZSkKLQkJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4tPmNfcGFzc2l2ZSk7Ci0JCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4pOwotCX0KKwlpYy0+cmRzX2l3ZGV2ID0gcmRzX2l3ZGV2OwogfQogCi12b2lkIHJkc19pd19yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldikKK3ZvaWQgcmRzX2l3X3JlbW92ZV9jb25uKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCS8qIHBsYWNlIGNvbm4gb24gbm9kZXZfY29ubnNfbGlzdCAqLworCXNwaW5fbG9jaygmaXdfbm9kZXZfY29ubnNfbG9jayk7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwlCVUdfT04obGlzdF9lbXB0eSgmaWMtPml3X25vZGUpKTsKKwlsaXN0X2RlbCgmaWMtPml3X25vZGUpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisKKwlsaXN0X2FkZF90YWlsKCZpYy0+aXdfbm9kZSwgJml3X25vZGV2X2Nvbm5zKTsKKworCXNwaW5fdW5sb2NrKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKworCXJkc19pd19yZW1vdmVfY21faWQoaWMtPnJkc19pd2RldiwgaWMtPmlfY21faWQpOworCWljLT5yZHNfaXdkZXYgPSBOVUxMOworfQorCit2b2lkIF9fcmRzX2l3X2Rlc3Ryb3lfY29ubnMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3BpbmxvY2tfdCAqbGlzdF9sb2NrKQogewogCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsICpfaWM7CiAJTElTVF9IRUFEKHRtcF9saXN0KTsKIAogCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KLQlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKLQlsaXN0X3NwbGljZSgmcmRzX2l3ZGV2LT5jb25uX2xpc3QsICZ0bXBfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnJkc19pd2Rldi0+Y29ubl9saXN0KTsKLQlzcGluX3VubG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCXNwaW5fbG9ja19pcnEobGlzdF9sb2NrKTsKKwlsaXN0X3NwbGljZShsaXN0LCAmdG1wX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKGxpc3QpOworCXNwaW5fdW5sb2NrX2lycShsaXN0X2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGljLCBfaWMsICZ0bXBfbGlzdCwgaXdfbm9kZSkgewogCQlpZiAoaWMtPmNvbm4tPmNfcGFzc2l2ZSkKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfcmVjdi5jIGIvbmV0L3Jkcy9pd19yZWN2LmMKaW5kZXggYTE5MzFmMC4uZmRlNDcwZiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pd19yZWN2LmMKKysrIGIvbmV0L3Jkcy9pd19yZWN2LmMKQEAgLTM5NSwxMCArMzk1LDM3IEBACiAgKiByb29tIGZvciBpdCBiZXlvbmQgdGhlIHJpbmcgc2l6ZS4gIFNlbmQgY29tcGxldGlvbiBub3RpY2VzIGl0cyBzcGVjaWFsCiAgKiB3cl9pZCBhbmQgYXZvaWRzIHdvcmtpbmcgd2l0aCB0aGUgcmluZyBpbiB0aGF0IGNhc2UuCiAgKi8KKyNpZm5kZWYgS0VSTkVMX0hBU19BVE9NSUM2NAogc3RhdGljIHZvaWQgcmRzX2l3X3NldF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgdTY0IHNlcSwKIAkJCQlpbnQgYWNrX3JlcXVpcmVkKQogewotCXJkc19pd19zZXRfNjRiaXQoJmljLT5pX2Fja19uZXh0LCBzZXEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWMtPmlfYWNrX2xvY2ssIGZsYWdzKTsKKwlpYy0+aV9hY2tfbmV4dCA9IHNlcTsKKwlpZiAoYWNrX3JlcXVpcmVkKQorCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmljLT5pX2Fja19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB1NjQgcmRzX2l3X2dldF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCBzZXE7CisKKwljbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWMtPmlfYWNrX2xvY2ssIGZsYWdzKTsKKwlzZXEgPSBpYy0+aV9hY2tfbmV4dDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYy0+aV9hY2tfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHNlcTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCByZHNfaXdfc2V0X2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCB1NjQgc2VxLAorCQkJCWludCBhY2tfcmVxdWlyZWQpCit7CisJYXRvbWljNjRfc2V0KCZpYy0+aV9hY2tfbmV4dCwgc2VxKTsKIAlpZiAoYWNrX3JlcXVpcmVkKSB7CiAJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwogCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOwpAQCAtNDEwLDggKzQzNywxMCBAQAogCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKIAlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwogCi0JcmV0dXJuIGljLT5pX2Fja19uZXh0OworCXJldHVybiBhdG9taWM2NF9yZWFkKCZpYy0+aV9hY2tfbmV4dCk7CiB9CisjZW5kaWYKKwogCiBzdGF0aWMgdm9pZCByZHNfaXdfc2VuZF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgdW5zaWduZWQgaW50IGFkdl9jcmVkaXRzKQogewpAQCAtNDY0LDYgKzQ5MywxMCBAQAogICogIC0JaV9hY2tfbmV4dCwgd2hpY2ggaXMgdGhlIGxhc3Qgc2VxdWVuY2UgbnVtYmVyIHdlIHJlY2VpdmVkCiAgKgogICogUG90ZW50aWFsbHksIHNlbmQgcXVldWUgYW5kIHJlY2VpdmUgcXVldWUgaGFuZGxlcnMgY2FuIHJ1biBjb25jdXJyZW50bHkuCisgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIG5vdCBoYXZlIHRvIHVzZSBhIHNwaW5sb2NrIHRvIHN5bmNocm9uaXplIHRoaW5ncywKKyAqIGJ1dCB0aGUgb25lIHByb2JsZW0gdGhhdCBydWxlcyB0aGlzIG91dCBpcyB0aGF0IDY0Yml0IHVwZGF0ZXMgYXJlCisgKiBub3QgYXRvbWljIG9uIGFsbCBwbGF0Zm9ybXMuIFRoaW5ncyB3b3VsZCBiZSBhIGxvdCBzaW1wbGVyIGlmCisgKiB3ZSBoYWQgYXRvbWljNjQgb3IgbWF5YmUgY21weGNoZzY0IGV2ZXJ5d2hlcmUuCiAgKgogICogUmVjb25uZWN0aW5nIGNvbXBsaWNhdGVzIHRoaXMgcGljdHVyZSBqdXN0IHNsaWdodGx5LiBXaGVuIHdlCiAgKiByZWNvbm5lY3QsIHdlIG1heSBiZSBzZWVpbmcgZHVwbGljYXRlIHBhY2tldHMuIFRoZSBwZWVyCmRpZmYgLS1naXQgYS9uZXQvcmRzL3Jkcy5oIGIvbmV0L3Jkcy9yZHMuaAppbmRleCAwNjA0MDA3Li42MTlmMGEzIDEwMDY0NAotLS0gYS9uZXQvcmRzL3Jkcy5oCisrKyBiL25ldC9yZHMvcmRzLmgKQEAgLTI4LDYgKzI4LDEwIEBACiAgKi8KICNkZWZpbmUgUkRTX1BPUlQJMTg2MzQKIAorI2lmZGVmIEFUT01JQzY0X0lOSVQKKyNkZWZpbmUgS0VSTkVMX0hBU19BVE9NSUM2NAorI2VuZGlmCisKICNpZmRlZiBERUJVRwogI2RlZmluZSByZHNkZWJ1ZyhmbXQsIGFyZ3MuLi4pIHByX2RlYnVnKCIlcygpOiAiIGZtdCwgX19mdW5jX18gLCAjI2FyZ3MpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuYwppbmRleCAxYjM3MzY0Li4xMDRmZTAzIDEwMDY0NAotLS0gYS9uZXQvcmRzL3NlbmQuYworKysgYi9uZXQvcmRzL3NlbmQuYwpAQCAtNjE1LDcgKzYxNSw3IEBACiB7CiAJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnRtcDsKIAlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBmbGFnczI7CiAJTElTVF9IRUFEKGxpc3QpOwogCWludCB3YWtlID0gMDsKIApAQCAtNjUxLDkgKzY1MSw5IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShybSwgJmxpc3QsIG1fc29ja19pdGVtKSB7CiAJCS8qIFdlIGRvIHRoaXMgaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgbG9vcCBhYm92ZSwgc28gdGhhdAogCQkgKiB3ZSBkb24ndCBoYXZlIHRvIG5lc3QgbV9yc19sb2NrIHVuZGVyIHJzLT5yc19sb2NrICovCi0JCXNwaW5fbG9jaygmcm0tPm1fcnNfbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZybS0+bV9yc19sb2NrLCBmbGFnczIpOwogCQlybS0+bV9ycyA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrKCZybS0+bV9yc19sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm0tPm1fcnNfbG9jaywgZmxhZ3MyKTsKIAogCQkvKgogCQkgKiBJZiB3ZSBzZWUgdGhpcyBmbGFnIGNsZWFyZWQgdGhlbiB3ZSdyZSAqc3VyZSogdGhhdCBzb21lb25lCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL0tjb25maWcgYi9uZXQvc3VucnBjL0tjb25maWcKaW5kZXggNTU5Mjg4My4uNDQzYzE2MSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9LY29uZmlnCisrKyBiL25ldC9zdW5ycGMvS2NvbmZpZwpAQCAtMTcsMjggKzE3LDYgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIFNVTlJQQ19SRUdJU1RFUl9WNAotCWJvb2wgIlJlZ2lzdGVyIGxvY2FsIFJQQyBzZXJ2aWNlcyB2aWEgcnBjYmluZCB2NCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFNVTlJQQyAmJiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBTdW4gYWRkZWQgc3VwcG9ydCBmb3IgcmVnaXN0ZXJpbmcgUlBDIHNlcnZpY2VzIGF0IGFuIElQdjYKLQkgIGFkZHJlc3MgYnkgY3JlYXRpbmcgdHdvIG5ldyB2ZXJzaW9ucyBvZiB0aGUgcnBjYmluZCBwcm90b2NvbAotCSAgKFJGQyAxODMzKS4KLQotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGluIHRoZSBrZXJuZWwgUlBDIHNlcnZlciBmb3IKLQkgIHJlZ2lzdGVyaW5nIGtlcm5lbCBSUEMgc2VydmljZXMgdmlhIHZlcnNpb24gNCBvZiB0aGUgcnBjYmluZAotCSAgcHJvdG9jb2wuICBJZiB5b3UgZW5hYmxlIHRoaXMgb3B0aW9uLCB5b3UgbXVzdCBydW4gYSBwb3J0bWFwcGVyCi0JICBkYWVtb24gdGhhdCBzdXBwb3J0cyBycGNiaW5kIHByb3RvY29sIHZlcnNpb24gNC4KLQotCSAgU2VydmluZyBORlMgb3ZlciBJUHY2IGZyb20ga25mc2QgKHRoZSBrZXJuZWwncyBORlMgc2VydmVyKQotCSAgcmVxdWlyZXMgdGhhdCB5b3UgZW5hYmxlIHRoaXMgb3B0aW9uIGFuZCB1c2UgYSBwb3J0bWFwcGVyIHRoYXQKLQkgIHN1cHBvcnRzIHJwY2JpbmQgdmVyc2lvbiA0LgotCi0JICBJZiB1bnN1cmUsIHNheSBOIHRvIGdldCB0cmFkaXRpb25hbCBiZWhhdmlvciAocmVnaXN0ZXIga2VybmVsCi0JICBSUEMgc2VydmljZXMgdXNpbmcgb25seSBycGNiaW5kIHZlcnNpb24gMikuICBEaXN0cmlidXRpb25zCi0JICB1c2luZyB0aGUgbGVnYWN5IExpbnV4IHBvcnRtYXBwZXIgZGFlbW9uIG11c3Qgc2F5IE4gaGVyZS4KLQogY29uZmlnIFJQQ1NFQ19HU1NfS1JCNQogCXRyaXN0YXRlICJTZWN1cmUgUlBDOiBLZXJiZXJvcyBWIG1lY2hhbmlzbSAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIFNVTlJQQyAmJiBFWFBFUklNRU5UQUwKQEAgLTY5LDcgKzQ3LDcgQEAKIAlzZWxlY3QgQ1JZUFRPX0NCQwogCWhlbHAKIAkgIENob29zZSBZIGhlcmUgdG8gZW5hYmxlIFNlY3VyZSBSUEMgdXNpbmcgdGhlIFNQS00zIHB1YmxpYyBrZXkKLQkgIEdTUy1BUEkgbWVjaGFuc2ltIChSRkMgMjAyNSkuCisJICBHU1MtQVBJIG1lY2hhbmlzbSAoUkZDIDIwMjUpLgogCiAJICBTZWN1cmUgUlBDIGNhbGxzIHdpdGggU1BLTTMgcmVxdWlyZSBhbiBhdXhpbGlhcnkgdXNlcnNwYWNlCiAJICBkYWVtb24gd2hpY2ggbWF5IGJlIGZvdW5kIGluIHRoZSBMaW51eCBuZnMtdXRpbHMgcGFja2FnZQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jbG50LmMgYi9uZXQvc3VucnBjL2NsbnQuYwppbmRleCA4MzZmMTVjLi41YWJhYjA5IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2NsbnQuYworKysgYi9uZXQvc3VucnBjL2NsbnQuYwpAQCAtMTAzMiwyNyArMTAzMiwyMCBAQAogCWRwcmludF9zdGF0dXModGFzayk7CiAKIAl0YXNrLT50a19zdGF0dXMgPSAwOwotCWlmIChzdGF0dXMgPj0gMCkgeworCWlmIChzdGF0dXMgPj0gMCB8fCBzdGF0dXMgPT0gLUVBR0FJTikgewogCQljbG50LT5jbF9zdGF0cy0+bmV0cmVjb25uKys7CiAJCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfdHJhbnNtaXQ7CiAJCXJldHVybjsKIAl9CiAKLQkvKiBTb21ldGhpbmcgZmFpbGVkOiByZW1vdGUgc2VydmljZSBwb3J0IG1heSBoYXZlIGNoYW5nZWQgKi8KLQlycGNfZm9yY2VfcmViaW5kKGNsbnQpOwotCiAJc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIC1FTk9UQ09OTjoKLQljYXNlIC1FQUdBSU46Ci0JCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfYmluZDsKLQkJaWYgKCFSUENfSVNfU09GVCh0YXNrKSkKLQkJCXJldHVybjsKIAkJLyogaWYgc29mdCBtb3VudGVkLCB0ZXN0IGlmIHdlJ3ZlIHRpbWVkIG91dCAqLwogCWNhc2UgLUVUSU1FRE9VVDoKIAkJdGFzay0+dGtfYWN0aW9uID0gY2FsbF90aW1lb3V0OwotCQlyZXR1cm47CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJwY19leGl0KHRhc2ssIC1FSU8pOwogCX0KLQlycGNfZXhpdCh0YXNrLCAtRUlPKTsKIH0KIAogLyoKQEAgLTExMDUsMTQgKzEwOTgsMjYgQEAKIGNhbGxfdHJhbnNtaXRfc3RhdHVzKHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKIAl0YXNrLT50a19hY3Rpb24gPSBjYWxsX3N0YXR1czsKLQkvKgotCSAqIFNwZWNpYWwgY2FzZTogaWYgd2UndmUgYmVlbiB3YWl0aW5nIG9uIHRoZSBzb2NrZXQncyB3cml0ZV9zcGFjZSgpCi0JICogY2FsbGJhY2ssIHRoZW4gZG9uJ3QgY2FsbCB4cHJ0X2VuZF90cmFuc21pdCgpLgotCSAqLwotCWlmICh0YXNrLT50a19zdGF0dXMgPT0gLUVBR0FJTikKLQkJcmV0dXJuOwotCXhwcnRfZW5kX3RyYW5zbWl0KHRhc2spOwotCXJwY190YXNrX2ZvcmNlX3JlZW5jb2RlKHRhc2spOworCXN3aXRjaCAodGFzay0+dGtfc3RhdHVzKSB7CisJY2FzZSAtRUFHQUlOOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQl4cHJ0X2VuZF90cmFuc21pdCh0YXNrKTsKKwkJLyoKKwkJICogU3BlY2lhbCBjYXNlczogaWYgd2UndmUgYmVlbiB3YWl0aW5nIG9uIHRoZQorCQkgKiBzb2NrZXQncyB3cml0ZV9zcGFjZSgpIGNhbGxiYWNrLCBvciBpZiB0aGUKKwkJICogc29ja2V0IGp1c3QgcmV0dXJuZWQgYSBjb25uZWN0aW9uIGVycm9yLAorCQkgKiB0aGVuIGhvbGQgb250byB0aGUgdHJhbnNwb3J0IGxvY2suCisJCSAqLworCWNhc2UgLUVDT05OUkVGVVNFRDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT1RDT05OOgorCWNhc2UgLUVIT1NURE9XTjoKKwljYXNlIC1FSE9TVFVOUkVBQ0g6CisJY2FzZSAtRU5FVFVOUkVBQ0g6CisJY2FzZSAtRVBJUEU6CisJCXJwY190YXNrX2ZvcmNlX3JlZW5jb2RlKHRhc2spOworCX0KIH0KIAogLyoKQEAgLTExNTIsOSArMTE1NywxMiBAQAogCQkJeHBydF9jb25kaXRpb25hbF9kaXNjb25uZWN0KHRhc2stPnRrX3hwcnQsCiAJCQkJCXJlcS0+cnFfY29ubmVjdF9jb29raWUpOwogCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgogCWNhc2UgLUVDT05OUkVGVVNFRDoKLQljYXNlIC1FTk9UQ09OTjoKIAkJcnBjX2ZvcmNlX3JlYmluZChjbG50KTsKKwkJcnBjX2RlbGF5KHRhc2ssIDMqSFopOworCWNhc2UgLUVQSVBFOgorCWNhc2UgLUVOT1RDT05OOgogCQl0YXNrLT50a19hY3Rpb24gPSBjYWxsX2JpbmQ7CiAJCWJyZWFrOwogCWNhc2UgLUVBR0FJTjoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvcnBjYl9jbG50LmMgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCmluZGV4IDAzYWUwMDcuLmJlZWU2ZGEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKKysrIGIvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYwpAQCAtNjMsOSArNjMsMTYgQEAKICAqIHJfb3duZXIKICAqCiAgKiBUaGUgIm93bmVyIiBpcyBhbGxvd2VkIHRvIHVuc2V0IGEgc2VydmljZSBpbiB0aGUgcnBjYmluZCBkYXRhYmFzZS4KLSAqIFdlIGFsd2F5cyB1c2UgdGhlIGZvbGxvd2luZyAoYXJiaXRyYXJ5KSBmaXhlZCBzdHJpbmcuCisgKgorICogRm9yIEFGX0xPQ0FMIFNFVC9VTlNFVCByZXF1ZXN0cywgcnBjYmluZCB0cmVhdHMgdGhpcyBzdHJpbmcgYXMgYQorICogVUlEIHdoaWNoIGl0IG1hcHMgdG8gYSBsb2NhbCB1c2VyIG5hbWUgdmlhIGEgcGFzc3dvcmQgbG9va3VwLgorICogSW4gYWxsIG90aGVyIGNhc2VzIGl0IGlzIGlnbm9yZWQuCisgKgorICogRm9yIFNFVC9VTlNFVCByZXF1ZXN0cywgdXNlciBzcGFjZSBwcm92aWRlcyBhIHZhbHVlLCBldmVuIGZvcgorICogbmV0d29yayByZXF1ZXN0cywgYW5kIEdFVEFERFIgdXNlcyBhbiBlbXB0eSBzdHJpbmcuICBXZSBmb2xsb3cKKyAqIHRob3NlIHByZWNlZGVudHMgaGVyZS4KICAqLwotI2RlZmluZSBSUENCX09XTkVSX1NUUklORwkicnBjYiIKKyNkZWZpbmUgUlBDQl9PV05FUl9TVFJJTkcJIjAiCiAjZGVmaW5lIFJQQ0JfTUFYT1dORVJMRU4Jc2l6ZW9mKFJQQ0JfT1dORVJfU1RSSU5HKQogCiBzdGF0aWMgdm9pZAkJCXJwY2JfZ2V0cG9ydF9kb25lKHN0cnVjdCBycGNfdGFzayAqLCB2b2lkICopOwpAQCAtMTI0LDEyICsxMzEsNiBAQAogCS5zaW5fcG9ydAkJPSBodG9ucyhSUENCSU5EX1BPUlQpLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgcnBjYl9pbjZhZGRyX2xvb3BiYWNrID0gewotCS5zaW42X2ZhbWlseQkJPSBBRl9JTkVUNiwKLQkuc2luNl9hZGRyCQk9IElONkFERFJfTE9PUEJBQ0tfSU5JVCwKLQkuc2luNl9wb3J0CQk9IGh0b25zKFJQQ0JJTkRfUE9SVCksCi19OwotCiBzdGF0aWMgc3RydWN0IHJwY19jbG50ICpycGNiX2NyZWF0ZV9sb2NhbChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCiAJCQkJCSAgc2l6ZV90IGFkZHJsZW4sIHUzMiB2ZXJzaW9uKQogewpAQCAtMTc2LDkgKzE3NywxMCBAQAogCXJldHVybiBycGNfY3JlYXRlKCZhcmdzKTsKIH0KIAotc3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2NhbGwoc3RydWN0IHNvY2thZGRyICphZGRyLCBzaXplX3QgYWRkcmxlbiwKLQkJCSAgICAgIHUzMiB2ZXJzaW9uLCBzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZykKK3N0YXRpYyBpbnQgcnBjYl9yZWdpc3Rlcl9jYWxsKGNvbnN0IHUzMiB2ZXJzaW9uLCBzdHJ1Y3QgcnBjX21lc3NhZ2UgKm1zZykKIHsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnJwY2JfaW5hZGRyX2xvb3BiYWNrOworCXNpemVfdCBhZGRybGVuID0gc2l6ZW9mKHJwY2JfaW5hZGRyX2xvb3BiYWNrKTsKIAlzdHJ1Y3QgcnBjX2NsbnQgKnJwY2JfY2xudDsKIAlpbnQgcmVzdWx0LCBlcnJvciA9IDA7CiAKQEAgLTE5Miw3ICsxOTQsNyBAQAogCQllcnJvciA9IFBUUl9FUlIocnBjYl9jbG50KTsKIAogCWlmIChlcnJvciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUlBDOiBmYWlsZWQgdG8gY29udGFjdCBsb2NhbCBycGNiaW5kICIKKwkJZHByaW50aygiUlBDOiAgICAgICBmYWlsZWQgdG8gY29udGFjdCBsb2NhbCBycGNiaW5kICIKIAkJCQkic2VydmVyIChlcnJubyAlZCkuXG4iLCAtZXJyb3IpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMjU0LDI1ICsyNTYsMjMgQEAKIAlpZiAocG9ydCkKIAkJbXNnLnJwY19wcm9jID0gJnJwY2JfcHJvY2VkdXJlczJbUlBDQlBST0NfU0VUXTsKIAotCXJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoKHN0cnVjdCBzb2NrYWRkciAqKSZycGNiX2luYWRkcl9sb29wYmFjaywKLQkJCQkJc2l6ZW9mKHJwY2JfaW5hZGRyX2xvb3BiYWNrKSwKLQkJCQkJUlBDQlZFUlNfMiwgJm1zZyk7CisJcmV0dXJuIHJwY2JfcmVnaXN0ZXJfY2FsbChSUENCVkVSU18yLCAmbXNnKTsKIH0KIAogLyoKICAqIEZpbGwgaW4gQUZfSU5FVCBmYW1pbHktc3BlY2lmaWMgYXJndW1lbnRzIHRvIHJlZ2lzdGVyCiAgKi8KLXN0YXRpYyBpbnQgcnBjYl9yZWdpc3Rlcl9uZXRpZDQoc3RydWN0IHNvY2thZGRyX2luICphZGRyZXNzX3RvX3JlZ2lzdGVyLAotCQkJCXN0cnVjdCBycGNfbWVzc2FnZSAqbXNnKQorc3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2luZXQ0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLAorCQkJICAgICAgIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnKQogeworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcDsKIAlzdHJ1Y3QgcnBjYmluZF9hcmdzICptYXAgPSBtc2ctPnJwY19hcmdwOwotCXVuc2lnbmVkIHNob3J0IHBvcnQgPSBudG9ocyhhZGRyZXNzX3RvX3JlZ2lzdGVyLT5zaW5fcG9ydCk7CisJdW5zaWduZWQgc2hvcnQgcG9ydCA9IG50b2hzKHNpbi0+c2luX3BvcnQpOwogCWNoYXIgYnVmWzMyXTsKIAogCS8qIENvbnN0cnVjdCBBRl9JTkVUIHVuaXZlcnNhbCBhZGRyZXNzICovCiAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVwSTQuJXUuJXUiLAotCQkgJmFkZHJlc3NfdG9fcmVnaXN0ZXItPnNpbl9hZGRyLnNfYWRkciwKLQkJIHBvcnQgPj4gOCwgcG9ydCAmIDB4ZmYpOworCQkgJnNpbi0+c2luX2FkZHIuc19hZGRyLCBwb3J0ID4+IDgsIHBvcnQgJiAweGZmKTsKIAltYXAtPnJfYWRkciA9IGJ1ZjsKIAogCWRwcmludGsoIlJQQzogICAgICAgJXNyZWdpc3RlcmluZyBbJXUsICV1LCAlcywgJyVzJ10gd2l0aCAiCkBAIC0yODQsMjkgKzI4NCwyNyBAQAogCWlmIChwb3J0KQogCQltc2ctPnJwY19wcm9jID0gJnJwY2JfcHJvY2VkdXJlczRbUlBDQlBST0NfU0VUXTsKIAotCXJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoKHN0cnVjdCBzb2NrYWRkciAqKSZycGNiX2luYWRkcl9sb29wYmFjaywKLQkJCQkJc2l6ZW9mKHJwY2JfaW5hZGRyX2xvb3BiYWNrKSwKLQkJCQkJUlBDQlZFUlNfNCwgbXNnKTsKKwlyZXR1cm4gcnBjYl9yZWdpc3Rlcl9jYWxsKFJQQ0JWRVJTXzQsIG1zZyk7CiB9CiAKIC8qCiAgKiBGaWxsIGluIEFGX0lORVQ2IGZhbWlseS1zcGVjaWZpYyBhcmd1bWVudHMgdG8gcmVnaXN0ZXIKICAqLwotc3RhdGljIGludCBycGNiX3JlZ2lzdGVyX25ldGlkNihzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyZXNzX3RvX3JlZ2lzdGVyLAotCQkJCXN0cnVjdCBycGNfbWVzc2FnZSAqbXNnKQorc3RhdGljIGludCBycGNiX3JlZ2lzdGVyX2luZXQ2KGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2FwLAorCQkJICAgICAgIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnKQogeworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcDsKIAlzdHJ1Y3QgcnBjYmluZF9hcmdzICptYXAgPSBtc2ctPnJwY19hcmdwOwotCXVuc2lnbmVkIHNob3J0IHBvcnQgPSBudG9ocyhhZGRyZXNzX3RvX3JlZ2lzdGVyLT5zaW42X3BvcnQpOworCXVuc2lnbmVkIHNob3J0IHBvcnQgPSBudG9ocyhzaW42LT5zaW42X3BvcnQpOwogCWNoYXIgYnVmWzY0XTsKIAogCS8qIENvbnN0cnVjdCBBRl9JTkVUNiB1bml2ZXJzYWwgYWRkcmVzcyAqLwotCWlmIChpcHY2X2FkZHJfYW55KCZhZGRyZXNzX3RvX3JlZ2lzdGVyLT5zaW42X2FkZHIpKQorCWlmIChpcHY2X2FkZHJfYW55KCZzaW42LT5zaW42X2FkZHIpKQogCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiOjouJXUuJXUiLAogCQkJCXBvcnQgPj4gOCwgcG9ydCAmIDB4ZmYpOwogCWVsc2UKIAkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVwSTYuJXUuJXUiLAotCQkJICZhZGRyZXNzX3RvX3JlZ2lzdGVyLT5zaW42X2FkZHIsCi0JCQkgcG9ydCA+PiA4LCBwb3J0ICYgMHhmZik7CisJCQkgJnNpbjYtPnNpbjZfYWRkciwgcG9ydCA+PiA4LCBwb3J0ICYgMHhmZik7CiAJbWFwLT5yX2FkZHIgPSBidWY7CiAKIAlkcHJpbnRrKCJSUEM6ICAgICAgICVzcmVnaXN0ZXJpbmcgWyV1LCAldSwgJXMsICclcyddIHdpdGggIgpAQCAtMzE4LDkgKzMxNiwyMSBAQAogCWlmIChwb3J0KQogCQltc2ctPnJwY19wcm9jID0gJnJwY2JfcHJvY2VkdXJlczRbUlBDQlBST0NfU0VUXTsKIAotCXJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoKHN0cnVjdCBzb2NrYWRkciAqKSZycGNiX2luNmFkZHJfbG9vcGJhY2ssCi0JCQkJCXNpemVvZihycGNiX2luNmFkZHJfbG9vcGJhY2spLAotCQkJCQlSUENCVkVSU180LCBtc2cpOworCXJldHVybiBycGNiX3JlZ2lzdGVyX2NhbGwoUlBDQlZFUlNfNCwgbXNnKTsKK30KKworc3RhdGljIGludCBycGNiX3VucmVnaXN0ZXJfYWxsX3Byb3RvZmFtaWxpZXMoc3RydWN0IHJwY19tZXNzYWdlICptc2cpCit7CisJc3RydWN0IHJwY2JpbmRfYXJncyAqbWFwID0gbXNnLT5ycGNfYXJncDsKKworCWRwcmludGsoIlJQQzogICAgICAgdW5yZWdpc3RlcmluZyBbJXUsICV1LCAnJXMnXSB3aXRoICIKKwkJImxvY2FsIHJwY2JpbmRcbiIsCisJCQltYXAtPnJfcHJvZywgbWFwLT5yX3ZlcnMsIG1hcC0+cl9uZXRpZCk7CisKKwltYXAtPnJfYWRkciA9ICIiOworCW1zZy0+cnBjX3Byb2MgPSAmcnBjYl9wcm9jZWR1cmVzNFtSUENCUFJPQ19VTlNFVF07CisKKwlyZXR1cm4gcnBjYl9yZWdpc3Rlcl9jYWxsKFJQQ0JWRVJTXzQsIG1zZyk7CiB9CiAKIC8qKgpAQCAtMzQwLDEwICszNTAsMTEgQEAKICAqIGludm9rZSB0aGlzIGZ1bmN0aW9uIG9uY2UgZm9yIGVhY2ggW3Byb2dyYW0sIHZlcnNpb24sIGFkZHJlc3MsCiAgKiBuZXRpZF0gdHVwbGUgdGhleSB3aXNoIHRvIGFkdmVydGlzZS4KICAqCi0gKiBDYWxsZXJzIG1heSBhbHNvIHVucmVnaXN0ZXIgUlBDIHNlcnZpY2VzIHRoYXQgYXJlIG5vIGxvbmdlcgotICogYXZhaWxhYmxlIGJ5IHNldHRpbmcgdGhlIHBvcnQgbnVtYmVyIGluIHRoZSBwYXNzZWQtaW4gYWRkcmVzcwotICogdG8gemVyby4gIENhbGxlcnMgcGFzcyBhIG5ldGlkIG9mICIiIHRvIHVucmVnaXN0ZXIgYWxsCi0gKiB0cmFuc3BvcnQgbmV0aWRzIGFzc29jaWF0ZWQgd2l0aCBbcHJvZ3JhbSwgdmVyc2lvbiwgYWRkcmVzc10uCisgKiBDYWxsZXJzIG1heSBhbHNvIHVucmVnaXN0ZXIgUlBDIHNlcnZpY2VzIHRoYXQgYXJlIHJlZ2lzdGVyZWQgYXQgYQorICogc3BlY2lmaWMgYWRkcmVzcyBieSBzZXR0aW5nIHRoZSBwb3J0IG51bWJlciBpbiBAYWRkcmVzcyB0byB6ZXJvLgorICogVGhleSBtYXkgdW5yZWdpc3RlciBhbGwgcmVnaXN0ZXJlZCBwcm90b2NvbCBmYW1pbGllcyBhdCBvbmNlIGZvcgorICogYSBzZXJ2aWNlIGJ5IHBhc3NpbmcgYSBOVUxMIEBhZGRyZXNzIGFyZ3VtZW50LiAgSWYgQG5ldGlkIGlzICIiCisgKiB0aGVuIGFsbCBuZXRpZHMgZm9yIFtwcm9ncmFtLCB2ZXJzaW9uLCBhZGRyZXNzXSBhcmUgdW5yZWdpc3RlcmVkLgogICoKICAqIFRoaXMgZnVuY3Rpb24gdXNlcyBycGNiaW5kIHByb3RvY29sIHZlcnNpb24gNCB0byBjb250YWN0IHRoZQogICogbG9jYWwgcnBjYmluZCBkYWVtb24uICBUaGUgbG9jYWwgcnBjYmluZCBkYWVtb24gbXVzdCBzdXBwb3J0CkBAIC0zNzgsMTMgKzM4OSwxNCBAQAogCQkucnBjX2FyZ3AJPSAmbWFwLAogCX07CiAKKwlpZiAoYWRkcmVzcyA9PSBOVUxMKQorCQlyZXR1cm4gcnBjYl91bnJlZ2lzdGVyX2FsbF9wcm90b2ZhbWlsaWVzKCZtc2cpOworCiAJc3dpdGNoIChhZGRyZXNzLT5zYV9mYW1pbHkpIHsKIAljYXNlIEFGX0lORVQ6Ci0JCXJldHVybiBycGNiX3JlZ2lzdGVyX25ldGlkNCgoc3RydWN0IHNvY2thZGRyX2luICopYWRkcmVzcywKLQkJCQkJICAgICZtc2cpOworCQlyZXR1cm4gcnBjYl9yZWdpc3Rlcl9pbmV0NChhZGRyZXNzLCAmbXNnKTsKIAljYXNlIEFGX0lORVQ2OgotCQlyZXR1cm4gcnBjYl9yZWdpc3Rlcl9uZXRpZDYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyZXNzLAotCQkJCQkgICAgJm1zZyk7CisJCXJldHVybiBycGNiX3JlZ2lzdGVyX2luZXQ2KGFkZHJlc3MsICZtc2cpOwogCX0KIAogCXJldHVybiAtRUFGTk9TVVBQT1JUOwpAQCAtNTc5LDcgKzU5MSw3IEBACiAJbWFwLT5yX3hwcnQgPSB4cHJ0X2dldCh4cHJ0KTsKIAltYXAtPnJfbmV0aWQgPSBycGNfcGVlcmFkZHIyc3RyKGNsbnQsIFJQQ19ESVNQTEFZX05FVElEKTsKIAltYXAtPnJfYWRkciA9IHJwY19wZWVyYWRkcjJzdHIocnBjYl9jbG50LCBSUENfRElTUExBWV9VTklWRVJTQUxfQUREUik7Ci0JbWFwLT5yX293bmVyID0gUlBDQl9PV05FUl9TVFJJTkc7CS8qIGlnbm9yZWQgZm9yIEdFVEFERFIgKi8KKwltYXAtPnJfb3duZXIgPSAiIjsKIAltYXAtPnJfc3RhdHVzID0gLUVJTzsKIAogCWNoaWxkID0gcnBjYl9jYWxsX2FzeW5jKHJwY2JfY2xudCwgbWFwLCBwcm9jKTsKQEAgLTcwMywxMSArNzE1LDE2IEBACiAJKnBvcnRwID0gMDsKIAlhZGRyX2xlbiA9IG50b2hsKCpwKyspOwogCisJaWYgKGFkZHJfbGVuID09IDApIHsKKwkJZHByaW50aygiUlBDOiAgICAgICBycGNiX2RlY29kZV9nZXRhZGRyOiAiCisJCQkJCSJzZXJ2aWNlIGlzIG5vdCByZWdpc3RlcmVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyoKLQkgKiBTaW1wbGUgc2FuaXR5IGNoZWNrLiAgVGhlIHNtYWxsZXN0IHBvc3NpYmxlIHVuaXZlcnNhbAotCSAqIGFkZHJlc3MgaXMgYW4gSVB2NCBhZGRyZXNzIHN0cmluZyBjb250YWluaW5nIDExIGJ5dGVzLgorCSAqIFNpbXBsZSBzYW5pdHkgY2hlY2suCiAJICovCi0JaWYgKGFkZHJfbGVuIDwgMTEgfHwgYWRkcl9sZW4gPiBSUENCSU5EX01BWFVBRERSTEVOKQorCWlmIChhZGRyX2xlbiA+IFJQQ0JJTkRfTUFYVUFERFJMRU4pCiAJCWdvdG8gb3V0X2VycjsKIAogCS8qCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuYwppbmRleCBiYjUwN2UyLi45YjQ5YTZhYiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmMuYworKysgYi9uZXQvc3VucnBjL3N2Yy5jCkBAIC0zMTcsOCArMzE3LDcgQEAKIAl9CiAJY2FzZSBTVkNfUE9PTF9QRVJOT0RFOgogCXsKLQkJbm9kZV90b19jcHVtYXNrX3B0cihub2RlY3B1bWFzaywgbm9kZSk7Ci0JCXNldF9jcHVzX2FsbG93ZWRfcHRyKHRhc2ssIG5vZGVjcHVtYXNrKTsKKwkJc2V0X2NwdXNfYWxsb3dlZF9wdHIodGFzaywgY3B1bWFza19vZl9ub2RlKG5vZGUpKTsKIAkJYnJlYWs7CiAJfQogCX0KQEAgLTM1OSw3ICszNTgsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IHN2Y19zZXJ2ICoKIF9fc3ZjX2NyZWF0ZShzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKnByb2csIHVuc2lnbmVkIGludCBidWZzaXplLCBpbnQgbnBvb2xzLAotCSAgIHNhX2ZhbWlseV90IGZhbWlseSwgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpKQorCSAgICAgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpKQogewogCXN0cnVjdCBzdmNfc2Vydgkqc2VydjsKIAl1bnNpZ25lZCBpbnQgdmVyczsKQEAgLTM2OCw3ICszNjcsNiBAQAogCiAJaWYgKCEoc2VydiA9IGt6YWxsb2Moc2l6ZW9mKCpzZXJ2KSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gTlVMTDsKLQlzZXJ2LT5zdl9mYW1pbHkgICAgPSBmYW1pbHk7CiAJc2Vydi0+c3ZfbmFtZSAgICAgID0gcHJvZy0+cGdfbmFtZTsKIAlzZXJ2LT5zdl9wcm9ncmFtICAgPSBwcm9nOwogCXNlcnYtPnN2X25ydGhyZWFkcyA9IDE7CkBAIC00MjcsMjEgKzQyNSwyMSBAQAogCiBzdHJ1Y3Qgc3ZjX3NlcnYgKgogc3ZjX2NyZWF0ZShzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKnByb2csIHVuc2lnbmVkIGludCBidWZzaXplLAotCQlzYV9mYW1pbHlfdCBmYW1pbHksIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2KSkKKwkgICB2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBzdmNfc2VydiAqc2VydikpCiB7Ci0JcmV0dXJuIF9fc3ZjX2NyZWF0ZShwcm9nLCBidWZzaXplLCAvKm5wb29scyovMSwgZmFtaWx5LCBzaHV0ZG93bik7CisJcmV0dXJuIF9fc3ZjX2NyZWF0ZShwcm9nLCBidWZzaXplLCAvKm5wb29scyovMSwgc2h1dGRvd24pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2NyZWF0ZSk7CiAKIHN0cnVjdCBzdmNfc2VydiAqCiBzdmNfY3JlYXRlX3Bvb2xlZChzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKnByb2csIHVuc2lnbmVkIGludCBidWZzaXplLAotCQkgIHNhX2ZhbWlseV90IGZhbWlseSwgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYpLAorCQkgIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2KSwKIAkJICBzdmNfdGhyZWFkX2ZuIGZ1bmMsIHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnY7CiAJdW5zaWduZWQgaW50IG5wb29scyA9IHN2Y19wb29sX21hcF9nZXQoKTsKIAotCXNlcnYgPSBfX3N2Y19jcmVhdGUocHJvZywgYnVmc2l6ZSwgbnBvb2xzLCBmYW1pbHksIHNodXRkb3duKTsKKwlzZXJ2ID0gX19zdmNfY3JlYXRlKHByb2csIGJ1ZnNpemUsIG5wb29scywgc2h1dGRvd24pOwogCiAJaWYgKHNlcnYgIT0gTlVMTCkgewogCQlzZXJ2LT5zdl9mdW5jdGlvbiA9IGZ1bmM7CkBAIC03MTksOCArNzE3LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHN2Y19leGl0X3RocmVhZCk7CiAKLSNpZmRlZiBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0Ci0KIC8qCiAgKiBSZWdpc3RlciBhbiAiaW5ldCIgcHJvdG9jb2wgZmFtaWx5IG5ldGlkIHdpdGggdGhlIGxvY2FsCiAgKiBycGNiaW5kIGRhZW1vbiB2aWEgYW4gcnBjYmluZCB2NCBTRVQgcmVxdWVzdC4KQEAgLTczNSwxMiArNzMxLDEzIEBACiAJCQkJY29uc3QgdW5zaWduZWQgc2hvcnQgcHJvdG9jb2wsCiAJCQkJY29uc3QgdW5zaWduZWQgc2hvcnQgcG9ydCkKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luID0geworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiBzaW4gPSB7CiAJCS5zaW5fZmFtaWx5CQk9IEFGX0lORVQsCiAJCS5zaW5fYWRkci5zX2FkZHIJPSBodG9ubChJTkFERFJfQU5ZKSwKIAkJLnNpbl9wb3J0CQk9IGh0b25zKHBvcnQpLAogCX07Ci0JY2hhciAqbmV0aWQ7CisJY29uc3QgY2hhciAqbmV0aWQ7CisJaW50IGVycm9yOwogCiAJc3dpdGNoIChwcm90b2NvbCkgewogCWNhc2UgSVBQUk9UT19VRFA6CkBAIC03NTAsMTMgKzc0NywyMyBAQAogCQluZXRpZCA9IFJQQ0JJTkRfTkVUSURfVENQOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDsKKwkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CiAKLQlyZXR1cm4gcnBjYl92NF9yZWdpc3Rlcihwcm9ncmFtLCB2ZXJzaW9uLAotCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBuZXRpZCk7CisJZXJyb3IgPSBycGNiX3Y0X3JlZ2lzdGVyKHByb2dyYW0sIHZlcnNpb24sCisJCQkJCShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBuZXRpZCk7CisKKwkvKgorCSAqIFVzZXIgc3BhY2UgZGlkbid0IHN1cHBvcnQgcnBjYmluZCB2NCwgc28gcmV0cnkgdGhpcworCSAqIHJlZ2lzdHJhdGlvbiByZXF1ZXN0IHdpdGggdGhlIGxlZ2FjeSBycGNiaW5kIHYyIHByb3RvY29sLgorCSAqLworCWlmIChlcnJvciA9PSAtRVBST1RPTk9TVVBQT1JUKQorCQllcnJvciA9IHJwY2JfcmVnaXN0ZXIocHJvZ3JhbSwgdmVyc2lvbiwgcHJvdG9jb2wsIHBvcnQpOworCisJcmV0dXJuIGVycm9yOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCiAvKgogICogUmVnaXN0ZXIgYW4gImluZXQ2IiBwcm90b2NvbCBmYW1pbHkgbmV0aWQgd2l0aCB0aGUgbG9jYWwKICAqIHJwY2JpbmQgZGFlbW9uIHZpYSBhbiBycGNiaW5kIHY0IFNFVCByZXF1ZXN0LgpAQCAtNzcxLDEyICs3NzgsMTMgQEAKIAkJCQljb25zdCB1bnNpZ25lZCBzaG9ydCBwcm90b2NvbCwKIAkJCQljb25zdCB1bnNpZ25lZCBzaG9ydCBwb3J0KQogewotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNiA9IHsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjYgPSB7CiAJCS5zaW42X2ZhbWlseQkJPSBBRl9JTkVUNiwKIAkJLnNpbjZfYWRkcgkJPSBJTjZBRERSX0FOWV9JTklULAogCQkuc2luNl9wb3J0CQk9IGh0b25zKHBvcnQpLAogCX07Ci0JY2hhciAqbmV0aWQ7CisJY29uc3QgY2hhciAqbmV0aWQ7CisJaW50IGVycm9yOwogCiAJc3dpdGNoIChwcm90b2NvbCkgewogCWNhc2UgSVBQUk9UT19VRFA6CkBAIC03ODYsMTIgKzc5NCwyMiBAQAogCQluZXRpZCA9IFJQQ0JJTkRfTkVUSURfVENQNjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7CisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJfQogCi0JcmV0dXJuIHJwY2JfdjRfcmVnaXN0ZXIocHJvZ3JhbSwgdmVyc2lvbiwKLQkJCQkoc3RydWN0IHNvY2thZGRyICopJnNpbjYsIG5ldGlkKTsKKwllcnJvciA9IHJwY2JfdjRfcmVnaXN0ZXIocHJvZ3JhbSwgdmVyc2lvbiwKKwkJCQkJKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZzaW42LCBuZXRpZCk7CisKKwkvKgorCSAqIFVzZXIgc3BhY2UgZGlkbid0IHN1cHBvcnQgcnBjYmluZCB2ZXJzaW9uIDQsIHNvIHdlIHdvbid0CisJICogdXNlIGEgUEZfSU5FVDYgbGlzdGVuZXIuCisJICovCisJaWYgKGVycm9yID09IC1FUFJPVE9OT1NVUFBPUlQpCisJCWVycm9yID0gLUVBRk5PU1VQUE9SVDsKKworCXJldHVybiBlcnJvcjsKIH0KKyNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkgKi8KIAogLyoKICAqIFJlZ2lzdGVyIGEga2VybmVsIFJQQyBzZXJ2aWNlIHZpYSBycGNiaW5kIHZlcnNpb24gNC4KQEAgLTc5OSw2OSArODE3LDQzIEBACiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzczsgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBpcyByZXR1cm5lZAogICogaWYgYW55IGVycm9yIG9jY3Vycy4KICAqLwotc3RhdGljIGludCBfX3N2Y19yZWdpc3Rlcihjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sCi0JCQkgIGNvbnN0IHNhX2ZhbWlseV90IGZhbWlseSwKK3N0YXRpYyBpbnQgX19zdmNfcmVnaXN0ZXIoY29uc3QgY2hhciAqcHJvZ25hbWUsCisJCQkgIGNvbnN0IHUzMiBwcm9ncmFtLCBjb25zdCB1MzIgdmVyc2lvbiwKKwkJCSAgY29uc3QgaW50IGZhbWlseSwKIAkJCSAgY29uc3QgdW5zaWduZWQgc2hvcnQgcHJvdG9jb2wsCiAJCQkgIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQpCiB7Ci0JaW50IGVycm9yOworCWludCBlcnJvciA9IC1FQUZOT1NVUFBPUlQ7CiAKIAlzd2l0Y2ggKGZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLQkJcmV0dXJuIF9fc3ZjX3JwY2JfcmVnaXN0ZXI0KHByb2dyYW0sIHZlcnNpb24sCisJY2FzZSBQRl9JTkVUOgorCQllcnJvciA9IF9fc3ZjX3JwY2JfcmVnaXN0ZXI0KHByb2dyYW0sIHZlcnNpb24sCiAJCQkJCQlwcm90b2NvbCwgcG9ydCk7Ci0JY2FzZSBBRl9JTkVUNjoKKwkJYnJlYWs7CisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisJY2FzZSBQRl9JTkVUNjoKIAkJZXJyb3IgPSBfX3N2Y19ycGNiX3JlZ2lzdGVyNihwcm9ncmFtLCB2ZXJzaW9uLAogCQkJCQkJcHJvdG9jb2wsIHBvcnQpOwotCQlpZiAoZXJyb3IgPCAwKQotCQkJcmV0dXJuIGVycm9yOwotCi0JCS8qCi0JCSAqIFdvcmsgYXJvdW5kIGJ1ZyBpbiBzb21lIHZlcnNpb25zIG9mIExpbnV4IHJwY2JpbmQKLQkJICogd2hpY2ggZG9uJ3QgYWxsb3cgcmVnaXN0cmF0aW9uIG9mIGJvdGggaW5ldCBhbmQKLQkJICogaW5ldDYgbmV0aWRzLgotCQkgKgotCQkgKiBFcnJvciByZXR1cm4gaWdub3JlZCBmb3Igbm93LgotCQkgKi8KLQkJX19zdmNfcnBjYl9yZWdpc3RlcjQocHJvZ3JhbSwgdmVyc2lvbiwKLQkJCQkJCXByb3RvY29sLCBwb3J0KTsKLQkJcmV0dXJuIDA7CisjZW5kaWYJLyogZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpICovCiAJfQogCi0JcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisJaWYgKGVycm9yIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAic3ZjOiBmYWlsZWQgdG8gcmVnaXN0ZXIgJXN2JXUgUlBDICIKKwkJCSJzZXJ2aWNlIChlcnJubyAlZCkuXG4iLCBwcm9nbmFtZSwgdmVyc2lvbiwgLWVycm9yKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKLSNlbHNlCS8qIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgKi8KLQotLyoKLSAqIFJlZ2lzdGVyIGEga2VybmVsIFJQQyBzZXJ2aWNlIHZpYSBycGNiaW5kIHZlcnNpb24gMi4KLSAqCi0gKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzczsgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBpcyByZXR1cm5lZAotICogaWYgYW55IGVycm9yIG9jY3Vycy4KLSAqLwotc3RhdGljIGludCBfX3N2Y19yZWdpc3Rlcihjb25zdCB1MzIgcHJvZ3JhbSwgY29uc3QgdTMyIHZlcnNpb24sCi0JCQkgIHNhX2ZhbWlseV90IGZhbWlseSwKLQkJCSAgY29uc3QgdW5zaWduZWQgc2hvcnQgcHJvdG9jb2wsCi0JCQkgIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQpCi17Ci0JaWYgKGZhbWlseSAhPSBBRl9JTkVUKQotCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKLQotCXJldHVybiBycGNiX3JlZ2lzdGVyKHByb2dyYW0sIHZlcnNpb24sIHByb3RvY29sLCBwb3J0KTsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgKi8KLQogLyoqCiAgKiBzdmNfcmVnaXN0ZXIgLSByZWdpc3RlciBhbiBSUEMgc2VydmljZSB3aXRoIHRoZSBsb2NhbCBwb3J0bWFwcGVyCiAgKiBAc2Vydjogc3ZjX3NlcnYgc3RydWN0IGZvciB0aGUgc2VydmljZSB0byByZWdpc3RlcgorICogQGZhbWlseTogcHJvdG9jb2wgZmFtaWx5IG9mIHNlcnZpY2UncyBsaXN0ZW5lciBzb2NrZXQKICAqIEBwcm90bzogdHJhbnNwb3J0IHByb3RvY29sIG51bWJlciB0byBhZHZlcnRpc2UKICAqIEBwb3J0OiBwb3J0IHRvIGFkdmVydGlzZQogICoKLSAqIFNlcnZpY2UgaXMgcmVnaXN0ZXJlZCBmb3IgYW55IGFkZHJlc3MgaW4gc2VydidzIGFkZHJlc3MgZmFtaWx5CisgKiBTZXJ2aWNlIGlzIHJlZ2lzdGVyZWQgZm9yIGFueSBhZGRyZXNzIGluIHRoZSBwYXNzZWQtaW4gcHJvdG9jb2wgZmFtaWx5CiAgKi8KLWludCBzdmNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjb25zdCB1bnNpZ25lZCBzaG9ydCBwcm90bywKLQkJIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQpCitpbnQgc3ZjX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBzdmNfc2VydiAqc2VydiwgY29uc3QgaW50IGZhbWlseSwKKwkJIGNvbnN0IHVuc2lnbmVkIHNob3J0IHByb3RvLCBjb25zdCB1bnNpZ25lZCBzaG9ydCBwb3J0KQogewogCXN0cnVjdCBzdmNfcHJvZ3JhbQkqcHJvZ3A7CiAJdW5zaWduZWQgaW50CQlpOwpAQCAtODc5LDE1ICs4NzEsMTUgQEAKIAkJCQkJaSwKIAkJCQkJcHJvdG8gPT0gSVBQUk9UT19VRFA/ICAidWRwIiA6ICJ0Y3AiLAogCQkJCQlwb3J0LAotCQkJCQlzZXJ2LT5zdl9mYW1pbHksCisJCQkJCWZhbWlseSwKIAkJCQkJcHJvZ3AtPnBnX3ZlcnNbaV0tPnZzX2hpZGRlbj8KIAkJCQkJCSIgKGJ1dCBub3QgdGVsbGluZyBwb3J0bWFwKSIgOiAiIik7CiAKIAkJCWlmIChwcm9ncC0+cGdfdmVyc1tpXS0+dnNfaGlkZGVuKQogCQkJCWNvbnRpbnVlOwogCi0JCQllcnJvciA9IF9fc3ZjX3JlZ2lzdGVyKHByb2dwLT5wZ19wcm9nLCBpLAotCQkJCQkJc2Vydi0+c3ZfZmFtaWx5LCBwcm90bywgcG9ydCk7CisJCQllcnJvciA9IF9fc3ZjX3JlZ2lzdGVyKHByb2dwLT5wZ19uYW1lLCBwcm9ncC0+cGdfcHJvZywKKwkJCQkJCWksIGZhbWlseSwgcHJvdG8sIHBvcnQpOwogCQkJaWYgKGVycm9yIDwgMCkKIAkJCQlicmVhazsKIAkJfQpAQCAtODk2LDM4ICs4ODgsMzEgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLSNpZmRlZiBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0Ci0KLXN0YXRpYyB2b2lkIF9fc3ZjX3VucmVnaXN0ZXIoY29uc3QgdTMyIHByb2dyYW0sIGNvbnN0IHUzMiB2ZXJzaW9uLAotCQkJICAgICBjb25zdCBjaGFyICpwcm9nbmFtZSkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjYgPSB7Ci0JCS5zaW42X2ZhbWlseQkJPSBBRl9JTkVUNiwKLQkJLnNpbjZfYWRkcgkJPSBJTjZBRERSX0FOWV9JTklULAotCQkuc2luNl9wb3J0CQk9IDAsCi0JfTsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IHJwY2JfdjRfcmVnaXN0ZXIocHJvZ3JhbSwgdmVyc2lvbiwKLQkJCQkoc3RydWN0IHNvY2thZGRyICopJnNpbjYsICIiKTsKLQlkcHJpbnRrKCJzdmM6ICVzKCVzdiV1KSwgZXJyb3IgJWRcbiIsCi0JCQlfX2Z1bmNfXywgcHJvZ25hbWUsIHZlcnNpb24sIGVycm9yKTsKLX0KLQotI2Vsc2UJLyogQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCAqLwotCisvKgorICogSWYgdXNlciBzcGFjZSBpcyBydW5uaW5nIHJwY2JpbmQsIGl0IHNob3VsZCB0YWtlIHRoZSB2NCBVTlNFVAorICogYW5kIGNsZWFyIGV2ZXJ5dGhpbmcgZm9yIHRoaXMgW3Byb2dyYW0sIHZlcnNpb25dLiAgSWYgdXNlciBzcGFjZQorICogaXMgcnVubmluZyBwb3J0bWFwLCBpdCB3aWxsIHJlamVjdCB0aGUgdjQgVU5TRVQsIGJ1dCB3b24ndCBoYXZlCisgKiBhbnkgImluZXQ2IiBlbnRyaWVzIGFueXdheS4gIFNvIGEgUE1BUF9VTlNFVCBzaG91bGQgYmUgc3VmZmljaWVudAorICogaW4gdGhpcyBjYXNlIHRvIGNsZWFyIGFsbCBleGlzdGluZyBlbnRyaWVzIGZvciBbcHJvZ3JhbSwgdmVyc2lvbl0uCisgKi8KIHN0YXRpYyB2b2lkIF9fc3ZjX3VucmVnaXN0ZXIoY29uc3QgdTMyIHByb2dyYW0sIGNvbnN0IHUzMiB2ZXJzaW9uLAogCQkJICAgICBjb25zdCBjaGFyICpwcm9nbmFtZSkKIHsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IHJwY2JfcmVnaXN0ZXIocHJvZ3JhbSwgdmVyc2lvbiwgMCwgMCk7CisJZXJyb3IgPSBycGNiX3Y0X3JlZ2lzdGVyKHByb2dyYW0sIHZlcnNpb24sIE5VTEwsICIiKTsKKworCS8qCisJICogVXNlciBzcGFjZSBkaWRuJ3Qgc3VwcG9ydCBycGNiaW5kIHY0LCBzbyByZXRyeSB0aGlzCisJICogcmVxdWVzdCB3aXRoIHRoZSBsZWdhY3kgcnBjYmluZCB2MiBwcm90b2NvbC4KKwkgKi8KKwlpZiAoZXJyb3IgPT0gLUVQUk9UT05PU1VQUE9SVCkKKwkJZXJyb3IgPSBycGNiX3JlZ2lzdGVyKHByb2dyYW0sIHZlcnNpb24sIDAsIDApOworCiAJZHByaW50aygic3ZjOiAlcyglc3YldSksIGVycm9yICVkXG4iLAogCQkJX19mdW5jX18sIHByb2duYW1lLCB2ZXJzaW9uLCBlcnJvcik7CiB9CiAKLSNlbmRpZgkvKiBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0ICovCi0KIC8qCiAgKiBBbGwgbmV0aWRzLCBiaW5kIGFkZHJlc3NlcyBhbmQgcG9ydHMgcmVnaXN0ZXJlZCBmb3IgW3Byb2dyYW0sIHZlcnNpb25dCiAgKiBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBsb2NhbCBycGNiaW5kIGRhdGFiYXNlIChpZiB0aGUgc2VydmljZSBpcyBub3QKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwppbmRleCBlNTg4ZGY1Li4yODE5ZWUwIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCkBAIC0xNjEsNyArMTYxLDkgQEAKIAogc3RhdGljIHN0cnVjdCBzdmNfeHBydCAqX19zdmNfeHBvX2NyZWF0ZShzdHJ1Y3Qgc3ZjX3hwcnRfY2xhc3MgKnhjbCwKIAkJCQkJIHN0cnVjdCBzdmNfc2VydiAqc2VydiwKLQkJCQkJIHVuc2lnbmVkIHNob3J0IHBvcnQsIGludCBmbGFncykKKwkJCQkJIGNvbnN0IGludCBmYW1pbHksCisJCQkJCSBjb25zdCB1bnNpZ25lZCBzaG9ydCBwb3J0LAorCQkJCQkgaW50IGZsYWdzKQogewogCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW4gPSB7CiAJCS5zaW5fZmFtaWx5CQk9IEFGX0lORVQsCkBAIC0xNzYsMTIgKzE3OCwxMiBAQAogCXN0cnVjdCBzb2NrYWRkciAqc2FwOwogCXNpemVfdCBsZW47CiAKLQlzd2l0Y2ggKHNlcnYtPnN2X2ZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKKwlzd2l0Y2ggKGZhbWlseSkgeworCWNhc2UgUEZfSU5FVDoKIAkJc2FwID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW47CiAJCWxlbiA9IHNpemVvZihzaW4pOwogCQlicmVhazsKLQljYXNlIEFGX0lORVQ2OgorCWNhc2UgUEZfSU5FVDY6CiAJCXNhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNjsKIAkJbGVuID0gc2l6ZW9mKHNpbjYpOwogCQlicmVhazsKQEAgLTE5Miw3ICsxOTQsOCBAQAogCXJldHVybiB4Y2wtPnhjbF9vcHMtPnhwb19jcmVhdGUoc2Vydiwgc2FwLCBsZW4sIGZsYWdzKTsKIH0KIAotaW50IHN2Y19jcmVhdGVfeHBydChzdHJ1Y3Qgc3ZjX3NlcnYgKnNlcnYsIGNoYXIgKnhwcnRfbmFtZSwgdW5zaWduZWQgc2hvcnQgcG9ydCwKK2ludCBzdmNfY3JlYXRlX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjb25zdCBjaGFyICp4cHJ0X25hbWUsCisJCSAgICBjb25zdCBpbnQgZmFtaWx5LCBjb25zdCB1bnNpZ25lZCBzaG9ydCBwb3J0LAogCQkgICAgaW50IGZsYWdzKQogewogCXN0cnVjdCBzdmNfeHBydF9jbGFzcyAqeGNsOwpAQCAtMjA5LDcgKzIxMiw3IEBACiAJCQlnb3RvIGVycjsKIAogCQlzcGluX3VubG9jaygmc3ZjX3hwcnRfY2xhc3NfbG9jayk7Ci0JCW5ld3hwcnQgPSBfX3N2Y194cG9fY3JlYXRlKHhjbCwgc2VydiwgcG9ydCwgZmxhZ3MpOworCQluZXd4cHJ0ID0gX19zdmNfeHBvX2NyZWF0ZSh4Y2wsIHNlcnYsIGZhbWlseSwgcG9ydCwgZmxhZ3MpOwogCQlpZiAoSVNfRVJSKG5ld3hwcnQpKSB7CiAJCQltb2R1bGVfcHV0KHhjbC0+eGNsX293bmVyKTsKIAkJCXJldHVybiBQVFJfRVJSKG5ld3hwcnQpOwpAQCAtMTAzMyw3ICsxMDM2LDEzIEBACiAJcmV0dXJuIGRyOwogfQogCi0vKgorLyoqCisgKiBzdmNfZmluZF94cHJ0IC0gZmluZCBhbiBSUEMgdHJhbnNwb3J0IGluc3RhbmNlCisgKiBAc2VydjogcG9pbnRlciB0byBzdmNfc2VydiB0byBzZWFyY2gKKyAqIEB4Y2xfbmFtZTogQyBzdHJpbmcgY29udGFpbmluZyB0cmFuc3BvcnQncyBjbGFzcyBuYW1lCisgKiBAYWY6IEFkZHJlc3MgZmFtaWx5IG9mIHRyYW5zcG9ydCdzIGxvY2FsIGFkZHJlc3MKKyAqIEBwb3J0OiB0cmFuc3BvcnQncyBJUCBwb3J0IG51bWJlcgorICoKICAqIFJldHVybiB0aGUgdHJhbnNwb3J0IGluc3RhbmNlIHBvaW50ZXIgZm9yIHRoZSBlbmRwb2ludCBhY2NlcHRpbmcKICAqIGNvbm5lY3Rpb25zL3BlZXIgdHJhZmZpYyBmcm9tIHRoZSBzcGVjaWZpZWQgdHJhbnNwb3J0IGNsYXNzLAogICogYWRkcmVzcyBmYW1pbHkgYW5kIHBvcnQuCkBAIC0xMDQyLDE0ICsxMDUxLDE0IEBACiAgKiB3aWxkLWNhcmQsIGFuZCB3aWxsIHJlc3VsdCBpbiBtYXRjaGluZyB0aGUgZmlyc3QgdHJhbnNwb3J0IGluIHRoZQogICogc2VydmljZSdzIGxpc3QgdGhhdCBoYXMgYSBtYXRjaGluZyBjbGFzcyBuYW1lLgogICovCi1zdHJ1Y3Qgc3ZjX3hwcnQgKnN2Y19maW5kX3hwcnQoc3RydWN0IHN2Y19zZXJ2ICpzZXJ2LCBjaGFyICp4Y2xfbmFtZSwKLQkJCSAgICAgICBpbnQgYWYsIGludCBwb3J0KQorc3RydWN0IHN2Y194cHJ0ICpzdmNfZmluZF94cHJ0KHN0cnVjdCBzdmNfc2VydiAqc2VydiwgY29uc3QgY2hhciAqeGNsX25hbWUsCisJCQkgICAgICAgY29uc3Qgc2FfZmFtaWx5X3QgYWYsIGNvbnN0IHVuc2lnbmVkIHNob3J0IHBvcnQpCiB7CiAJc3RydWN0IHN2Y194cHJ0ICp4cHJ0OwogCXN0cnVjdCBzdmNfeHBydCAqZm91bmQgPSBOVUxMOwogCiAJLyogU2FuaXR5IGNoZWNrIHRoZSBhcmdzICovCi0JaWYgKCFzZXJ2IHx8ICF4Y2xfbmFtZSkKKwlpZiAoc2VydiA9PSBOVUxMIHx8IHhjbF9uYW1lID09IE5VTEwpCiAJCXJldHVybiBmb3VuZDsKIAogCXNwaW5fbG9ja19iaCgmc2Vydi0+c3ZfbG9jayk7CkBAIC0xMDU4LDcgKzEwNjcsNyBAQAogCQkJY29udGludWU7CiAJCWlmIChhZiAhPSBBRl9VTlNQRUMgJiYgYWYgIT0geHBydC0+eHB0X2xvY2FsLnNzX2ZhbWlseSkKIAkJCWNvbnRpbnVlOwotCQlpZiAocG9ydCAmJiBwb3J0ICE9IHN2Y194cHJ0X2xvY2FsX3BvcnQoeHBydCkpCisJCWlmIChwb3J0ICE9IDAgJiYgcG9ydCAhPSBzdmNfeHBydF9sb2NhbF9wb3J0KHhwcnQpKQogCQkJY29udGludWU7CiAJCWZvdW5kID0geHBydDsKIAkJc3ZjX3hwcnRfZ2V0KHhwcnQpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCA1NzYzZTY0Li45ZDUwNDIzIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYworKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtMTExMCw3ICsxMTEwLDYgQEAKIAlzdHJ1Y3Qgc3ZjX3NvY2sJKnN2c2s7CiAJc3RydWN0IHNvY2sJKmluZXQ7CiAJaW50CQlwbWFwX3JlZ2lzdGVyID0gIShmbGFncyAmIFNWQ19TT0NLX0FOT05ZTU9VUyk7Ci0JaW50CQl2YWw7CiAKIAlkcHJpbnRrKCJzdmM6IHN2Y19zZXR1cF9zb2NrZXQgJXBcbiIsIHNvY2spOwogCWlmICghKHN2c2sgPSBremFsbG9jKHNpemVvZigqc3ZzayksIEdGUF9LRVJORUwpKSkgewpAQCAtMTEyMiw3ICsxMTIxLDcgQEAKIAogCS8qIFJlZ2lzdGVyIHNvY2tldCB3aXRoIHBvcnRtYXBwZXIgKi8KIAlpZiAoKmVycnAgPj0gMCAmJiBwbWFwX3JlZ2lzdGVyKQotCQkqZXJycCA9IHN2Y19yZWdpc3RlcihzZXJ2LCBpbmV0LT5za19wcm90b2NvbCwKKwkJKmVycnAgPSBzdmNfcmVnaXN0ZXIoc2VydiwgaW5ldC0+c2tfZmFtaWx5LCBpbmV0LT5za19wcm90b2NvbCwKIAkJCQkgICAgIG50b2hzKGluZXRfc2soaW5ldCktPnNwb3J0KSk7CiAKIAlpZiAoKmVycnAgPCAwKSB7CkBAIC0xMTQzLDE4ICsxMTQyLDYgQEAKIAllbHNlCiAJCXN2Y190Y3BfaW5pdChzdnNrLCBzZXJ2KTsKIAotCS8qCi0JICogV2Ugc3RhcnQgb25lIGxpc3RlbmVyIHBlciBzdl9zZXJ2LiAgV2Ugd2FudCBBRl9JTkVUCi0JICogcmVxdWVzdHMgdG8gYmUgYXV0b21hdGljYWxseSBzaHVudGVkIHRvIG91ciBBRl9JTkVUNgotCSAqIGxpc3RlbmVyIHVzaW5nIGEgbWFwcGVkIElQdjQgYWRkcmVzcy4gIE1ha2Ugc3VyZQotCSAqIG5vLW9uZSBzdGFydHMgYW4gZXF1aXZhbGVudCBJUHY0IGxpc3RlbmVyLCB3aGljaAotCSAqIHdvdWxkIHN0ZWFsIG91ciBpbmNvbWluZyBjb25uZWN0aW9ucy4KLQkgKi8KLQl2YWwgPSAwOwotCWlmIChzZXJ2LT5zdl9mYW1pbHkgPT0gQUZfSU5FVDYpCi0JCWtlcm5lbF9zZXRzb2Nrb3B0KHNvY2ssIFNPTF9JUFY2LCBJUFY2X1Y2T05MWSwKLQkJCQkJKGNoYXIgKikmdmFsLCBzaXplb2YodmFsKSk7Ci0KIAlkcHJpbnRrKCJzdmM6IHN2Y19zZXR1cF9zb2NrZXQgY3JlYXRlZCAlcCAoaW5ldCAlcClcbiIsCiAJCQkJc3Zzaywgc3Zzay0+c2tfc2spOwogCkBAIC0xMjIyLDYgKzEyMDksOCBAQAogCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFkZHI7CiAJc3RydWN0IHNvY2thZGRyICpuZXdzaW4gPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHI7CiAJaW50CQluZXdsZW47CisJaW50CQlmYW1pbHk7CisJaW50CQl2YWw7CiAJUlBDX0lGREVCVUcoY2hhciBidWZbUlBDX01BWF9BRERSQlVGTEVOXSk7CiAKIAlkcHJpbnRrKCJzdmM6IHN2Y19jcmVhdGVfc29ja2V0KCVzLCAlZCwgJXMpXG4iLApAQCAtMTIzMywxNCArMTIyMiwzNSBAQAogCQkJCSJzb2NrZXRzIHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KLQl0eXBlID0gKHByb3RvY29sID09IElQUFJPVE9fVURQKT8gU09DS19ER1JBTSA6IFNPQ0tfU1RSRUFNOwogCi0JZXJyb3IgPSBzb2NrX2NyZWF0ZV9rZXJuKHNpbi0+c2FfZmFtaWx5LCB0eXBlLCBwcm90b2NvbCwgJnNvY2spOworCXR5cGUgPSAocHJvdG9jb2wgPT0gSVBQUk9UT19VRFApPyBTT0NLX0RHUkFNIDogU09DS19TVFJFQU07CisJc3dpdGNoIChzaW4tPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDY6CisJCWZhbWlseSA9IFBGX0lORVQ2OworCQlicmVhazsKKwljYXNlIEFGX0lORVQ6CisJCWZhbWlseSA9IFBGX0lORVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWVycm9yID0gc29ja19jcmVhdGVfa2VybihmYW1pbHksIHR5cGUsIHByb3RvY29sLCAmc29jayk7CiAJaWYgKGVycm9yIDwgMCkKIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCiAJc3ZjX3JlY2xhc3NpZnlfc29ja2V0KHNvY2spOwogCisJLyoKKwkgKiBJZiB0aGlzIGlzIGFuIFBGX0lORVQ2IGxpc3RlbmVyLCB3ZSB3YW50IHRvIGF2b2lkCisJICogZ2V0dGluZyByZXF1ZXN0cyBmcm9tIElQdjQgcmVtb3Rlcy4gIFRob3NlIHNob3VsZAorCSAqIGJlIHNodW50ZWQgdG8gYSBQRl9JTkVUIGxpc3RlbmVyIHZpYSBycGNiaW5kLgorCSAqLworCXZhbCA9IDE7CisJaWYgKGZhbWlseSA9PSBQRl9JTkVUNikKKwkJa2VybmVsX3NldHNvY2tvcHQoc29jaywgU09MX0lQVjYsIElQVjZfVjZPTkxZLAorCQkJCQkoY2hhciAqKSZ2YWwsIHNpemVvZih2YWwpKTsKKwogCWlmICh0eXBlID09IFNPQ0tfU1RSRUFNKQogCQlzb2NrLT5zay0+c2tfcmV1c2UgPSAxOwkJLyogYWxsb3cgYWRkcmVzcyByZXVzZSAqLwogCWVycm9yID0ga2VybmVsX2JpbmQoc29jaywgc2luLCBsZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0LmMgYi9uZXQvc3VucnBjL3hwcnQuYwppbmRleCA2MjA5OGQxLi5hMGJmZTUzIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnQuYworKysgYi9uZXQvc3VucnBjL3hwcnQuYwpAQCAtMTUyLDYgKzE1MiwzNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoeHBydF91bnJlZ2lzdGVyX3RyYW5zcG9ydCk7CiAKIC8qKgorICogeHBydF9sb2FkX3RyYW5zcG9ydCAtIGxvYWQgYSB0cmFuc3BvcnQgaW1wbGVtZW50YXRpb24KKyAqIEB0cmFuc3BvcnRfbmFtZTogdHJhbnNwb3J0IHRvIGxvYWQKKyAqCisgKiBSZXR1cm5zOgorICogMDoJCXRyYW5zcG9ydCBzdWNjZXNzZnVsbHkgbG9hZGVkCisgKiAtRU5PRU5UOgl0cmFuc3BvcnQgbW9kdWxlIG5vdCBhdmFpbGFibGUKKyAqLworaW50IHhwcnRfbG9hZF90cmFuc3BvcnQoY29uc3QgY2hhciAqdHJhbnNwb3J0X25hbWUpCit7CisJc3RydWN0IHhwcnRfY2xhc3MgKnQ7CisJY2hhciBtb2R1bGVfbmFtZVtzaXplb2YgdC0+bmFtZSArIDVdOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSAwOworCXNwaW5fbG9jaygmeHBydF9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJnhwcnRfbGlzdCwgbGlzdCkgeworCQlpZiAoc3RyY21wKHQtPm5hbWUsIHRyYW5zcG9ydF9uYW1lKSA9PSAwKSB7CisJCQlzcGluX3VubG9jaygmeHBydF9saXN0X2xvY2spOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJc3Bpbl91bmxvY2soJnhwcnRfbGlzdF9sb2NrKTsKKwlzdHJjcHkobW9kdWxlX25hbWUsICJ4cHJ0Iik7CisJc3RybmNhdChtb2R1bGVfbmFtZSwgdHJhbnNwb3J0X25hbWUsIHNpemVvZiB0LT5uYW1lKTsKKwlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZShtb2R1bGVfbmFtZSk7CitvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHhwcnRfbG9hZF90cmFuc3BvcnQpOworCisvKioKICAqIHhwcnRfcmVzZXJ2ZV94cHJ0IC0gc2VyaWFsaXplIHdyaXRlIGFjY2VzcyB0byB0cmFuc3BvcnRzCiAgKiBAdGFzazogdGFzayB0aGF0IGlzIHJlcXVlc3RpbmcgYWNjZXNzIHRvIHRoZSB0cmFuc3BvcnQKICAqCkBAIC01ODAsNyArNjExLDcgQEAKIAlkcHJpbnRrKCJSUEM6ICAgICAgIGRpc2Nvbm5lY3RlZCB0cmFuc3BvcnQgJXBcbiIsIHhwcnQpOwogCXNwaW5fbG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOwogCXhwcnRfY2xlYXJfY29ubmVjdGVkKHhwcnQpOwotCXhwcnRfd2FrZV9wZW5kaW5nX3Rhc2tzKHhwcnQsIC1FTk9UQ09OTik7CisJeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgLUVBR0FJTik7CiAJc3Bpbl91bmxvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHhwcnRfZGlzY29ubmVjdF9kb25lKTsKQEAgLTU5OCw3ICs2MjksNyBAQAogCS8qIFRyeSB0byBzY2hlZHVsZSBhbiBhdXRvY2xvc2UgUlBDIGNhbGwgKi8KIAlpZiAodGVzdF9hbmRfc2V0X2JpdChYUFJUX0xPQ0tFRCwgJnhwcnQtPnN0YXRlKSA9PSAwKQogCQlxdWV1ZV93b3JrKHJwY2lvZF93b3JrcXVldWUsICZ4cHJ0LT50YXNrX2NsZWFudXApOwotCXhwcnRfd2FrZV9wZW5kaW5nX3Rhc2tzKHhwcnQsIC1FTk9UQ09OTik7CisJeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgLUVBR0FJTik7CiAJc3Bpbl91bmxvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKIH0KIApAQCAtNjI1LDcgKzY1Niw3IEBACiAJLyogVHJ5IHRvIHNjaGVkdWxlIGFuIGF1dG9jbG9zZSBSUEMgY2FsbCAqLwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KFhQUlRfTE9DS0VELCAmeHBydC0+c3RhdGUpID09IDApCiAJCXF1ZXVlX3dvcmsocnBjaW9kX3dvcmtxdWV1ZSwgJnhwcnQtPnRhc2tfY2xlYW51cCk7Ci0JeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgLUVOT1RDT05OKTsKKwl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCAtRUFHQUlOKTsKIG91dDoKIAlzcGluX3VubG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOwogfQpAQCAtNjk1LDkgKzcyNiw4IEBACiAJfQogCiAJc3dpdGNoICh0YXNrLT50a19zdGF0dXMpIHsKLQljYXNlIC1FTk9UQ09OTjoKLQkJZHByaW50aygiUlBDOiAlNXUgeHBydF9jb25uZWN0X3N0YXR1czogY29ubmVjdGlvbiBicm9rZW5cbiIsCi0JCQkJdGFzay0+dGtfcGlkKTsKKwljYXNlIC1FQUdBSU46CisJCWRwcmludGsoIlJQQzogJTV1IHhwcnRfY29ubmVjdF9zdGF0dXM6IHJldHJ5aW5nXG4iLCB0YXNrLT50a19waWQpOwogCQlicmVhazsKIAljYXNlIC1FVElNRURPVVQ6CiAJCWRwcmludGsoIlJQQzogJTV1IHhwcnRfY29ubmVjdF9zdGF0dXM6IGNvbm5lY3QgYXR0ZW1wdCB0aW1lZCAiCkBAIC04MTgsMTUgKzg0OCw4IEBACiAJCWVyciA9IHJlcS0+cnFfcmVjZWl2ZWQ7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JaWYgKCF4cHJ0LT5vcHMtPnJlc2VydmVfeHBydCh0YXNrKSkgeworCWlmICgheHBydC0+b3BzLT5yZXNlcnZlX3hwcnQodGFzaykpCiAJCWVyciA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlpZiAoIXhwcnRfY29ubmVjdGVkKHhwcnQpKSB7Ci0JCWVyciA9IC1FTk9UQ09OTjsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKIAlyZXR1cm4gZXJyOwpAQCAtODcwLDMyICs4OTMsMjYgQEAKIAlyZXEtPnJxX2Nvbm5lY3RfY29va2llID0geHBydC0+Y29ubmVjdF9jb29raWU7CiAJcmVxLT5ycV94dGltZSA9IGppZmZpZXM7CiAJc3RhdHVzID0geHBydC0+b3BzLT5zZW5kX3JlcXVlc3QodGFzayk7Ci0JaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCWRwcmludGsoIlJQQzogJTV1IHhtaXQgY29tcGxldGVcbiIsIHRhc2stPnRrX3BpZCk7Ci0JCXNwaW5fbG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOwotCi0JCXhwcnQtPm9wcy0+c2V0X3JldHJhbnNfdGltZW91dCh0YXNrKTsKLQotCQl4cHJ0LT5zdGF0LnNlbmRzKys7Ci0JCXhwcnQtPnN0YXQucmVxX3UgKz0geHBydC0+c3RhdC5zZW5kcyAtIHhwcnQtPnN0YXQucmVjdnM7Ci0JCXhwcnQtPnN0YXQuYmtsb2dfdSArPSB4cHJ0LT5iYWNrbG9nLnFsZW47Ci0KLQkJLyogRG9uJ3QgcmFjZSB3aXRoIGRpc2Nvbm5lY3QgKi8KLQkJaWYgKCF4cHJ0X2Nvbm5lY3RlZCh4cHJ0KSkKLQkJCXRhc2stPnRrX3N0YXR1cyA9IC1FTk9UQ09OTjsKLQkJZWxzZSBpZiAoIXJlcS0+cnFfcmVjZWl2ZWQpCi0JCQlycGNfc2xlZXBfb24oJnhwcnQtPnBlbmRpbmcsIHRhc2ssIHhwcnRfdGltZXIpOwotCQlzcGluX3VubG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOworCWlmIChzdGF0dXMgIT0gMCkgeworCQl0YXNrLT50a19zdGF0dXMgPSBzdGF0dXM7CiAJCXJldHVybjsKIAl9CiAKLQkvKiBOb3RlOiBhdCB0aGlzIHBvaW50LCB0YXNrLT50a19zbGVlcGluZyBoYXMgbm90IHlldCBiZWVuIHNldCwKLQkgKgkgaGVuY2UgdGhlcmUgaXMgbm8gZGFuZ2VyIG9mIHRoZSB3YWtpbmcgdXAgdGFzayBiZWluZyBwdXQgb24KLQkgKgkgc2NoZWRxLCBhbmQgYmVpbmcgcGlja2VkIHVwIGJ5IGEgcGFyYWxsZWwgcnVuIG9mIHJwY2lvZCgpLgotCSAqLwotCXRhc2stPnRrX3N0YXR1cyA9IHN0YXR1czsKLQlpZiAoc3RhdHVzID09IC1FQ09OTlJFRlVTRUQpCi0JCXJwY19zbGVlcF9vbigmeHBydC0+c2VuZGluZywgdGFzaywgTlVMTCk7CisJZHByaW50aygiUlBDOiAlNXUgeG1pdCBjb21wbGV0ZVxuIiwgdGFzay0+dGtfcGlkKTsKKwlzcGluX2xvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKKworCXhwcnQtPm9wcy0+c2V0X3JldHJhbnNfdGltZW91dCh0YXNrKTsKKworCXhwcnQtPnN0YXQuc2VuZHMrKzsKKwl4cHJ0LT5zdGF0LnJlcV91ICs9IHhwcnQtPnN0YXQuc2VuZHMgLSB4cHJ0LT5zdGF0LnJlY3ZzOworCXhwcnQtPnN0YXQuYmtsb2dfdSArPSB4cHJ0LT5iYWNrbG9nLnFsZW47CisKKwkvKiBEb24ndCByYWNlIHdpdGggZGlzY29ubmVjdCAqLworCWlmICgheHBydF9jb25uZWN0ZWQoeHBydCkpCisJCXRhc2stPnRrX3N0YXR1cyA9IC1FTk9UQ09OTjsKKwllbHNlIGlmICghcmVxLT5ycV9yZWNlaXZlZCkKKwkJcnBjX3NsZWVwX29uKCZ4cHJ0LT5wZW5kaW5nLCB0YXNrLCB4cHJ0X3RpbWVyKTsKKwlzcGluX3VubG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG9feHBydF9yZXNlcnZlKHN0cnVjdCBycGNfdGFzayAqdGFzaykKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYyBiL25ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYwppbmRleCAxNDEwNmQyLi5lNWUyOGQxIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jCkBAIC0zMTAsNiArMzEwLDE5IEBACiAJCV9fZnVuY19fLCBwYWQsIGRlc3RwLCBycXN0LT5ycV9zbGVuLCBjdXJsZW4pOwogCiAJY29weV9sZW4gPSBycXN0LT5ycV9zbmRfYnVmLnBhZ2VfbGVuOworCisJaWYgKHJxc3QtPnJxX3NuZF9idWYudGFpbFswXS5pb3ZfbGVuKSB7CisJCWN1cmxlbiA9IHJxc3QtPnJxX3NuZF9idWYudGFpbFswXS5pb3ZfbGVuOworCQlpZiAoZGVzdHAgKyBjb3B5X2xlbiAhPSBycXN0LT5ycV9zbmRfYnVmLnRhaWxbMF0uaW92X2Jhc2UpIHsKKwkJCW1lbW1vdmUoZGVzdHAgKyBjb3B5X2xlbiwKKwkJCQlycXN0LT5ycV9zbmRfYnVmLnRhaWxbMF0uaW92X2Jhc2UsIGN1cmxlbik7CisJCQlyX3hwcnQtPnJ4X3N0YXRzLnB1bGx1cF9jb3B5X2NvdW50ICs9IGN1cmxlbjsKKwkJfQorCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiB0YWlsIGRlc3RwIDB4JXAgbGVuICVkXG4iLAorCQkJX19mdW5jX18sIGRlc3RwICsgY29weV9sZW4sIGN1cmxlbik7CisJCXJxc3QtPnJxX3N2ZWNbMF0uaW92X2xlbiArPSBjdXJsZW47CisJfQorCiAJcl94cHJ0LT5yeF9zdGF0cy5wdWxsdXBfY29weV9jb3VudCArPSBjb3B5X2xlbjsKIAlucGFnZXMgPSBQQUdFX0FMSUdOKHJxc3QtPnJxX3NuZF9idWYucGFnZV9iYXNlK2NvcHlfbGVuKSA+PiBQQUdFX1NISUZUOwogCWZvciAoaSA9IDA7IGNvcHlfbGVuICYmIGkgPCBucGFnZXM7IGkrKykgewpAQCAtMzMyLDE3ICszNDUsNiBAQAogCQlkZXN0cCArPSBjdXJsZW47CiAJCWNvcHlfbGVuIC09IGN1cmxlbjsKIAl9Ci0JaWYgKHJxc3QtPnJxX3NuZF9idWYudGFpbFswXS5pb3ZfbGVuKSB7Ci0JCWN1cmxlbiA9IHJxc3QtPnJxX3NuZF9idWYudGFpbFswXS5pb3ZfbGVuOwotCQlpZiAoZGVzdHAgIT0gcnFzdC0+cnFfc25kX2J1Zi50YWlsWzBdLmlvdl9iYXNlKSB7Ci0JCQltZW1jcHkoZGVzdHAsCi0JCQkJcnFzdC0+cnFfc25kX2J1Zi50YWlsWzBdLmlvdl9iYXNlLCBjdXJsZW4pOwotCQkJcl94cHJ0LT5yeF9zdGF0cy5wdWxsdXBfY29weV9jb3VudCArPSBjdXJsZW47Ci0JCX0KLQkJZHByaW50aygiUlBDOiAgICAgICAlczogdGFpbCBkZXN0cCAweCVwIGxlbiAlZCBjdXJsZW4gJWRcbiIsCi0JCQlfX2Z1bmNfXywgZGVzdHAsIGNvcHlfbGVuLCBjdXJsZW4pOwotCQlycXN0LT5ycV9zdmVjWzBdLmlvdl9sZW4gKz0gY3VybGVuOwotCX0KIAkvKiBoZWFkZXIgbm93IGNvbnRhaW5zIGVudGlyZSBzZW5kIG1lc3NhZ2UgKi8KIAlyZXR1cm4gcGFkOwogfQpAQCAtNjU2LDcgKzY1OCw3IEBACiAJCWlmIChjdXJsZW4gPiBycXN0LT5ycV9yY3ZfYnVmLnRhaWxbMF0uaW92X2xlbikKIAkJCWN1cmxlbiA9IHJxc3QtPnJxX3Jjdl9idWYudGFpbFswXS5pb3ZfbGVuOwogCQlpZiAocnFzdC0+cnFfcmN2X2J1Zi50YWlsWzBdLmlvdl9iYXNlICE9IHNyY3ApCi0JCQltZW1jcHkocnFzdC0+cnFfcmN2X2J1Zi50YWlsWzBdLmlvdl9iYXNlLCBzcmNwLCBjdXJsZW4pOworCQkJbWVtbW92ZShycXN0LT5ycV9yY3ZfYnVmLnRhaWxbMF0uaW92X2Jhc2UsIHNyY3AsIGN1cmxlbik7CiAJCWRwcmludGsoIlJQQzogICAgICAgJXM6IHRhaWwgc3JjcCAweCVwIGxlbiAlZCBjdXJsZW4gJWRcbiIsCiAJCQlfX2Z1bmNfXywgc3JjcCwgY29weV9sZW4sIGN1cmxlbik7CiAJCXJxc3QtPnJxX3Jjdl9idWYudGFpbFswXS5pb3ZfbGVuID0gY3VybGVuOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV9zZW5kdG8uYyBiL25ldC9zdW5ycGMveHBydHJkbWEvc3ZjX3JkbWFfc2VuZHRvLmMKaW5kZXggYTMzMzRlMy4uNmMyNmE2NyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS9zdmNfcmRtYV9zZW5kdG8uYworKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3N2Y19yZG1hX3NlbmR0by5jCkBAIC0xOTEsNyArMTkxLDYgQEAKIAkJICAgc3RydWN0IHhkcl9idWYgKnhkciwKIAkJICAgc3RydWN0IHN2Y19yZG1hX3JlcV9tYXAgKnZlYykKIHsKLQlpbnQgc2dlX21heCA9ICh4ZHItPmxlbitQQUdFX1NJWkUtMSkgLyBQQUdFX1NJWkUgKyAzOwogCWludCBzZ2Vfbm87CiAJdTMyIHNnZV9ieXRlczsKIAl1MzIgcGFnZV9ieXRlczsKQEAgLTIzNSw3ICsyMzQsMTEgQEAKIAkJc2dlX25vKys7CiAJfQogCi0JQlVHX09OKHNnZV9ubyA+IHNnZV9tYXgpOworCWRwcmludGsoInN2Y3JkbWE6IG1hcF94ZHI6IHNnZV9ubyAlZCBwYWdlX25vICVkICIKKwkJInBhZ2VfYmFzZSAldSBwYWdlX2xlbiAldSBoZWFkX2xlbiAlenUgdGFpbF9sZW4gJXp1XG4iLAorCQlzZ2Vfbm8sIHBhZ2Vfbm8sIHhkci0+cGFnZV9iYXNlLCB4ZHItPnBhZ2VfbGVuLAorCQl4ZHItPmhlYWRbMF0uaW92X2xlbiwgeGRyLT50YWlsWzBdLmlvdl9sZW4pOworCiAJdmVjLT5jb3VudCA9IHNnZV9ubzsKIAlyZXR1cm4gMDsKIH0KQEAgLTU3OSw3ICs1ODIsNiBAQAogCQkJY3R4dC0+c2dlW3BhZ2Vfbm8rMV0ubGVuZ3RoID0gMDsKIAl9CiAJQlVHX09OKHNnZV9ubyA+IHJkbWEtPnNjX21heF9zZ2UpOwotCUJVR19PTihzZ2Vfbm8gPiBjdHh0LT5jb3VudCk7CiAJbWVtc2V0KCZzZW5kX3dyLCAwLCBzaXplb2Ygc2VuZF93cik7CiAJY3R4dC0+d3Jfb3AgPSBJQl9XUl9TRU5EOwogCXNlbmRfd3Iud3JfaWQgPSAodW5zaWduZWQgbG9uZyljdHh0OwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IDU2ODMzMGUuLmQ0MGZmNTAgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTQ5LDYgKzQ5LDkgQEAKIHVuc2lnbmVkIGludCB4cHJ0X21pbl9yZXN2cG9ydCA9IFJQQ19ERUZfTUlOX1JFU1ZQT1JUOwogdW5zaWduZWQgaW50IHhwcnRfbWF4X3Jlc3Zwb3J0ID0gUlBDX0RFRl9NQVhfUkVTVlBPUlQ7CiAKKyNkZWZpbmUgWFNfVENQX0xJTkdFUl9UTwkoMTVVICogSFopCitzdGF0aWMgdW5zaWduZWQgaW50IHhzX3RjcF9maW5fdGltZW91dCBfX3JlYWRfbW9zdGx5ID0gWFNfVENQX0xJTkdFUl9UTzsKKwogLyoKICAqIFdlIGNhbiByZWdpc3RlciBvdXIgb3duIGZpbGVzIHVuZGVyIC9wcm9jL3N5cy9zdW5ycGMgYnkKICAqIGNhbGxpbmcgcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKCkgYWdhaW4uICBUaGUgZmlsZXMgaW4gdGhhdApAQCAtMTE3LDYgKzEyMCwxNCBAQAogCQkuZXh0cmEyCQk9ICZ4cHJ0X21heF9yZXN2cG9ydF9saW1pdAogCX0sCiAJeworCQkucHJvY25hbWUJPSAidGNwX2Zpbl90aW1lb3V0IiwKKwkJLmRhdGEJCT0gJnhzX3RjcF9maW5fdGltZW91dCwKKwkJLm1heGxlbgkJPSBzaXplb2YoeHNfdGNwX2Zpbl90aW1lb3V0KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCisJCS5zdHJhdGVneQk9IHN5c2N0bF9qaWZmaWVzCisJfSwKKwl7CiAJCS5jdGxfbmFtZSA9IDAsCiAJfSwKIH07CkBAIC01MjEsMTEgKzUzMiwxMiBAQAogICogQHRhc2s6IHRhc2sgdG8gcHV0IHRvIHNsZWVwCiAgKgogICovCi1zdGF0aWMgdm9pZCB4c19ub3NwYWNlKHN0cnVjdCBycGNfdGFzayAqdGFzaykKK3N0YXRpYyBpbnQgeHNfbm9zcGFjZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7CiAJc3RydWN0IHJwY19ycXN0ICpyZXEgPSB0YXNrLT50a19ycXN0cDsKIAlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSByZXEtPnJxX3hwcnQ7CiAJc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0ID0gY29udGFpbmVyX29mKHhwcnQsIHN0cnVjdCBzb2NrX3hwcnQsIHhwcnQpOworCWludCByZXQgPSAwOwogCiAJZHByaW50aygiUlBDOiAlNXUgeG1pdCBpbmNvbXBsZXRlICgldSBsZWZ0IG9mICV1KVxuIiwKIAkJCXRhc2stPnRrX3BpZCwgcmVxLT5ycV9zbGVuIC0gcmVxLT5ycV9ieXRlc19zZW50LApAQCAtNTM3LDYgKzU0OSw3IEBACiAJLyogRG9uJ3QgcmFjZSB3aXRoIGRpc2Nvbm5lY3QgKi8KIAlpZiAoeHBydF9jb25uZWN0ZWQoeHBydCkpIHsKIAkJaWYgKHRlc3RfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnRyYW5zcG9ydC0+c29jay0+ZmxhZ3MpKSB7CisJCQlyZXQgPSAtRUFHQUlOOwogCQkJLyoKIAkJCSAqIE5vdGlmeSBUQ1AgdGhhdCB3ZSdyZSBsaW1pdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbgogCQkJICogd2luZG93IHNpemUKQEAgLTU0OCwxMCArNTYxLDExIEBACiAJCX0KIAl9IGVsc2UgewogCQljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmdHJhbnNwb3J0LT5zb2NrLT5mbGFncyk7Ci0JCXRhc2stPnRrX3N0YXR1cyA9IC1FTk9UQ09OTjsKKwkJcmV0ID0gLUVOT1RDT05OOwogCX0KIAogCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC01OTQsNiArNjA4LDggQEAKIAkJLyogU3RpbGwgc29tZSBieXRlcyBsZWZ0OyBzZXQgdXAgZm9yIGEgcmV0cnkgbGF0ZXIuICovCiAJCXN0YXR1cyA9IC1FQUdBSU47CiAJfQorCWlmICghdHJhbnNwb3J0LT5zb2NrKQorCQlnb3RvIG91dDsKIAogCXN3aXRjaCAoc3RhdHVzKSB7CiAJY2FzZSAtRU5PVFNPQ0s6CkBAIC02MDEsMjEgKzYxNywxOSBAQAogCQkvKiBTaG91bGQgd2UgY2FsbCB4c19jbG9zZSgpIGhlcmU/ICovCiAJCWJyZWFrOwogCWNhc2UgLUVBR0FJTjoKLQkJeHNfbm9zcGFjZSh0YXNrKTsKKwkJc3RhdHVzID0geHNfbm9zcGFjZSh0YXNrKTsKIAkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygiUlBDOiAgICAgICBzZW5kbXNnIHJldHVybmVkIHVucmVjb2duaXplZCBlcnJvciAlZFxuIiwKKwkJCS1zdGF0dXMpOwogCWNhc2UgLUVORVRVTlJFQUNIOgogCWNhc2UgLUVQSVBFOgogCWNhc2UgLUVDT05OUkVGVVNFRDoKIAkJLyogV2hlbiB0aGUgc2VydmVyIGhhcyBkaWVkLCBhbiBJQ01QIHBvcnQgdW5yZWFjaGFibGUgbWVzc2FnZQogCQkgKiBwcm9tcHRzIEVDT05OUkVGVVNFRC4gKi8KIAkJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnRyYW5zcG9ydC0+c29jay0+ZmxhZ3MpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmdHJhbnNwb3J0LT5zb2NrLT5mbGFncyk7Ci0JCWRwcmludGsoIlJQQzogICAgICAgc2VuZG1zZyByZXR1cm5lZCB1bnJlY29nbml6ZWQgZXJyb3IgJWRcbiIsCi0JCQktc3RhdHVzKTsKIAl9Ci0KK291dDoKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC02OTcsNiArNzExLDggQEAKIAkJc3RhdHVzID0gLUVBR0FJTjsKIAkJYnJlYWs7CiAJfQorCWlmICghdHJhbnNwb3J0LT5zb2NrKQorCQlnb3RvIG91dDsKIAogCXN3aXRjaCAoc3RhdHVzKSB7CiAJY2FzZSAtRU5PVFNPQ0s6CkBAIC03MDQsMjMgKzcyMCwxOSBAQAogCQkvKiBTaG91bGQgd2UgY2FsbCB4c19jbG9zZSgpIGhlcmU/ICovCiAJCWJyZWFrOwogCWNhc2UgLUVBR0FJTjoKLQkJeHNfbm9zcGFjZSh0YXNrKTsKLQkJYnJlYWs7Ci0JY2FzZSAtRUNPTk5SRVNFVDoKLQkJeHNfdGNwX3NodXRkb3duKHhwcnQpOwotCWNhc2UgLUVDT05OUkVGVVNFRDoKLQljYXNlIC1FTk9UQ09OTjoKLQljYXNlIC1FUElQRToKLQkJc3RhdHVzID0gLUVOT1RDT05OOwotCQljbGVhcl9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmdHJhbnNwb3J0LT5zb2NrLT5mbGFncyk7CisJCXN0YXR1cyA9IHhzX25vc3BhY2UodGFzayk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRwcmludGsoIlJQQzogICAgICAgc2VuZG1zZyByZXR1cm5lZCB1bnJlY29nbml6ZWQgZXJyb3IgJWRcbiIsCiAJCQktc3RhdHVzKTsKLQkJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnRyYW5zcG9ydC0+c29jay0+ZmxhZ3MpOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRVBJUEU6CiAJCXhzX3RjcF9zaHV0ZG93bih4cHJ0KTsKKwljYXNlIC1FQ09OTlJFRlVTRUQ6CisJY2FzZSAtRU5PVENPTk46CisJCWNsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZ0cmFuc3BvcnQtPnNvY2stPmZsYWdzKTsKIAl9Ci0KK291dDoKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC03NjcsMjMgKzc3OSwxMyBAQAogCXNrLT5za19lcnJvcl9yZXBvcnQgPSB0cmFuc3BvcnQtPm9sZF9lcnJvcl9yZXBvcnQ7CiB9CiAKLS8qKgotICogeHNfY2xvc2UgLSBjbG9zZSBhIHNvY2tldAotICogQHhwcnQ6IHRyYW5zcG9ydAotICoKLSAqIFRoaXMgaXMgdXNlZCB3aGVuIGFsbCByZXF1ZXN0cyBhcmUgY29tcGxldGU7IGllLCBubyBEUkMgc3RhdGUgcmVtYWlucwotICogb24gdGhlIHNlcnZlciB3ZSB3YW50IHRvIHNhdmUuCi0gKi8KLXN0YXRpYyB2b2lkIHhzX2Nsb3NlKHN0cnVjdCBycGNfeHBydCAqeHBydCkKK3N0YXRpYyB2b2lkIHhzX3Jlc2V0X3RyYW5zcG9ydChzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQpCiB7Ci0Jc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0ID0gY29udGFpbmVyX29mKHhwcnQsIHN0cnVjdCBzb2NrX3hwcnQsIHhwcnQpOwogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0cmFuc3BvcnQtPnNvY2s7CiAJc3RydWN0IHNvY2sgKnNrID0gdHJhbnNwb3J0LT5pbmV0OwogCi0JaWYgKCFzaykKLQkJZ290byBjbGVhcl9jbG9zZV93YWl0OwotCi0JZHByaW50aygiUlBDOiAgICAgICB4c19jbG9zZSB4cHJ0ICVwXG4iLCB4cHJ0KTsKKwlpZiAoc2sgPT0gTlVMTCkKKwkJcmV0dXJuOwogCiAJd3JpdGVfbG9ja19iaCgmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogCXRyYW5zcG9ydC0+aW5ldCA9IE5VTEw7CkBAIC03OTcsOCArNzk5LDI1IEBACiAJc2stPnNrX25vX2NoZWNrID0gMDsKIAogCXNvY2tfcmVsZWFzZShzb2NrKTsKLWNsZWFyX2Nsb3NlX3dhaXQ6Cit9CisKKy8qKgorICogeHNfY2xvc2UgLSBjbG9zZSBhIHNvY2tldAorICogQHhwcnQ6IHRyYW5zcG9ydAorICoKKyAqIFRoaXMgaXMgdXNlZCB3aGVuIGFsbCByZXF1ZXN0cyBhcmUgY29tcGxldGU7IGllLCBubyBEUkMgc3RhdGUgcmVtYWlucworICogb24gdGhlIHNlcnZlciB3ZSB3YW50IHRvIHNhdmUuCisgKi8KK3N0YXRpYyB2b2lkIHhzX2Nsb3NlKHN0cnVjdCBycGNfeHBydCAqeHBydCkKK3sKKwlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQgPSBjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHNvY2tfeHBydCwgeHBydCk7CisKKwlkcHJpbnRrKCJSUEM6ICAgICAgIHhzX2Nsb3NlIHhwcnQgJXBcbiIsIHhwcnQpOworCisJeHNfcmVzZXRfdHJhbnNwb3J0KHRyYW5zcG9ydCk7CisKIAlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwljbGVhcl9iaXQoWFBSVF9DT05ORUNUSU9OX0FCT1JULCAmeHBydC0+c3RhdGUpOwogCWNsZWFyX2JpdChYUFJUX0NMT1NFX1dBSVQsICZ4cHJ0LT5zdGF0ZSk7CiAJY2xlYXJfYml0KFhQUlRfQ0xPU0lORywgJnhwcnQtPnN0YXRlKTsKIAlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwpAQCAtMTEyNiw2ICsxMTQ1LDQ3IEBACiAJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIH0KIAorLyoKKyAqIERvIHRoZSBlcXVpdmFsZW50IG9mIGxpbmdlci9saW5nZXIyIGhhbmRsaW5nIGZvciBkZWFsaW5nIHdpdGgKKyAqIGJyb2tlbiBzZXJ2ZXJzIHRoYXQgZG9uJ3QgY2xvc2UgdGhlIHNvY2tldCBpbiBhIHRpbWVseQorICogZmFzaGlvbgorICovCitzdGF0aWMgdm9pZCB4c190Y3Bfc2NoZWR1bGVfbGluZ2VyX3RpbWVvdXQoc3RydWN0IHJwY194cHJ0ICp4cHJ0LAorCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0OworCisJaWYgKHhwcnRfdGVzdF9hbmRfc2V0X2Nvbm5lY3RpbmcoeHBydCkpCisJCXJldHVybjsKKwlzZXRfYml0KFhQUlRfQ09OTkVDVElPTl9BQk9SVCwgJnhwcnQtPnN0YXRlKTsKKwl0cmFuc3BvcnQgPSBjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHNvY2tfeHBydCwgeHBydCk7CisJcXVldWVfZGVsYXllZF93b3JrKHJwY2lvZF93b3JrcXVldWUsICZ0cmFuc3BvcnQtPmNvbm5lY3Rfd29ya2VyLAorCQkJICAgdGltZW91dCk7Cit9CisKK3N0YXRpYyB2b2lkIHhzX3RjcF9jYW5jZWxfbGluZ2VyX3RpbWVvdXQoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQoreworCXN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydDsKKworCXRyYW5zcG9ydCA9IGNvbnRhaW5lcl9vZih4cHJ0LCBzdHJ1Y3Qgc29ja194cHJ0LCB4cHJ0KTsKKworCWlmICghdGVzdF9iaXQoWFBSVF9DT05ORUNUSU9OX0FCT1JULCAmeHBydC0+c3RhdGUpIHx8CisJICAgICFjYW5jZWxfZGVsYXllZF93b3JrKCZ0cmFuc3BvcnQtPmNvbm5lY3Rfd29ya2VyKSkKKwkJcmV0dXJuOworCWNsZWFyX2JpdChYUFJUX0NPTk5FQ1RJT05fQUJPUlQsICZ4cHJ0LT5zdGF0ZSk7CisJeHBydF9jbGVhcl9jb25uZWN0aW5nKHhwcnQpOworfQorCitzdGF0aWMgdm9pZCB4c19zb2NrX21hcmtfY2xvc2VkKHN0cnVjdCBycGNfeHBydCAqeHBydCkKK3sKKwlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwljbGVhcl9iaXQoWFBSVF9DTE9TRV9XQUlULCAmeHBydC0+c3RhdGUpOworCWNsZWFyX2JpdChYUFJUX0NMT1NJTkcsICZ4cHJ0LT5zdGF0ZSk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKwkvKiBNYXJrIHRyYW5zcG9ydCBhcyBjbG9zZWQgYW5kIHdha2UgdXAgYWxsIHBlbmRpbmcgdGFza3MgKi8KKwl4cHJ0X2Rpc2Nvbm5lY3RfZG9uZSh4cHJ0KTsKK30KKwogLyoqCiAgKiB4c190Y3Bfc3RhdGVfY2hhbmdlIC0gY2FsbGJhY2sgdG8gaGFuZGxlIFRDUCBzb2NrZXQgc3RhdGUgY2hhbmdlcwogICogQHNrOiBzb2NrZXQgd2hvc2Ugc3RhdGUgaGFzIGNoYW5nZWQKQEAgLTExNTgsNyArMTIxOCw3IEBACiAJCQl0cmFuc3BvcnQtPnRjcF9mbGFncyA9CiAJCQkJVENQX1JDVl9DT1BZX0ZSQUdIRFIgfCBUQ1BfUkNWX0NPUFlfWElEOwogCi0JCQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCAwKTsKKwkJCXhwcnRfd2FrZV9wZW5kaW5nX3Rhc2tzKHhwcnQsIC1FQUdBSU4pOwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CiAJCWJyZWFrOwpAQCAtMTE3MSwxMCArMTIzMSwxMCBAQAogCQljbGVhcl9iaXQoWFBSVF9DT05ORUNURUQsICZ4cHJ0LT5zdGF0ZSk7CiAJCWNsZWFyX2JpdChYUFJUX0NMT1NFX1dBSVQsICZ4cHJ0LT5zdGF0ZSk7CiAJCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7CisJCXhzX3RjcF9zY2hlZHVsZV9saW5nZXJfdGltZW91dCh4cHJ0LCB4c190Y3BfZmluX3RpbWVvdXQpOwogCQlicmVhazsKIAljYXNlIFRDUF9DTE9TRV9XQUlUOgogCQkvKiBUaGUgc2VydmVyIGluaXRpYXRlZCBhIHNodXRkb3duIG9mIHRoZSBzb2NrZXQgKi8KLQkJc2V0X2JpdChYUFJUX0NMT1NJTkcsICZ4cHJ0LT5zdGF0ZSk7CiAJCXhwcnRfZm9yY2VfZGlzY29ubmVjdCh4cHJ0KTsKIAljYXNlIFRDUF9TWU5fU0VOVDoKIAkJeHBydC0+Y29ubmVjdF9jb29raWUrKzsKQEAgLTExODcsNDAgKzEyNDcsMzUgQEAKIAkJCXhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPSBYU19UQ1BfSU5JVF9SRUVTVF9UTzsKIAkJYnJlYWs7CiAJY2FzZSBUQ1BfTEFTVF9BQ0s6CisJCXNldF9iaXQoWFBSVF9DTE9TSU5HLCAmeHBydC0+c3RhdGUpOworCQl4c190Y3Bfc2NoZWR1bGVfbGluZ2VyX3RpbWVvdXQoeHBydCwgeHNfdGNwX2Zpbl90aW1lb3V0KTsKIAkJc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7CiAJCWNsZWFyX2JpdChYUFJUX0NPTk5FQ1RFRCwgJnhwcnQtPnN0YXRlKTsKIAkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKIAkJYnJlYWs7CiAJY2FzZSBUQ1BfQ0xPU0U6Ci0JCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwotCQljbGVhcl9iaXQoWFBSVF9DTE9TRV9XQUlULCAmeHBydC0+c3RhdGUpOwotCQljbGVhcl9iaXQoWFBSVF9DTE9TSU5HLCAmeHBydC0+c3RhdGUpOwotCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwotCQkvKiBNYXJrIHRyYW5zcG9ydCBhcyBjbG9zZWQgYW5kIHdha2UgdXAgYWxsIHBlbmRpbmcgdGFza3MgKi8KLQkJeHBydF9kaXNjb25uZWN0X2RvbmUoeHBydCk7CisJCXhzX3RjcF9jYW5jZWxfbGluZ2VyX3RpbWVvdXQoeHBydCk7CisJCXhzX3NvY2tfbWFya19jbG9zZWQoeHBydCk7CiAJfQogIG91dDoKIAlyZWFkX3VubG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogfQogCiAvKioKLSAqIHhzX3RjcF9lcnJvcl9yZXBvcnQgLSBjYWxsYmFjayBtYWlubHkgZm9yIGNhdGNoaW5nIFJTVCBldmVudHMKKyAqIHhzX2Vycm9yX3JlcG9ydCAtIGNhbGxiYWNrIG1haW5seSBmb3IgY2F0Y2hpbmcgc29ja2V0IGVycm9ycwogICogQHNrOiBzb2NrZXQKICAqLwotc3RhdGljIHZvaWQgeHNfdGNwX2Vycm9yX3JlcG9ydChzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdm9pZCB4c19lcnJvcl9yZXBvcnQoc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCBycGNfeHBydCAqeHBydDsKIAogCXJlYWRfbG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwotCWlmIChzay0+c2tfZXJyICE9IEVDT05OUkVTRVQgfHwgc2stPnNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkKLQkJZ290byBvdXQ7CiAJaWYgKCEoeHBydCA9IHhwcnRfZnJvbV9zb2NrKHNrKSkpCiAJCWdvdG8gb3V0OwogCWRwcmludGsoIlJQQzogICAgICAgJXMgY2xpZW50ICVwLi4uXG4iCiAJCQkiUlBDOiAgICAgICBlcnJvciAlZFxuIiwKIAkJCV9fZnVuY19fLCB4cHJ0LCBzay0+c2tfZXJyKTsKLQotCXhwcnRfZm9yY2VfZGlzY29ubmVjdCh4cHJ0KTsKKwl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCAtRUFHQUlOKTsKIG91dDoKIAlyZWFkX3VubG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogfQpAQCAtMTQ5NCw2ICsxNTQ5LDcgQEAKIAkJc2stPnNrX3VzZXJfZGF0YSA9IHhwcnQ7CiAJCXNrLT5za19kYXRhX3JlYWR5ID0geHNfdWRwX2RhdGFfcmVhZHk7CiAJCXNrLT5za193cml0ZV9zcGFjZSA9IHhzX3VkcF93cml0ZV9zcGFjZTsKKwkJc2stPnNrX2Vycm9yX3JlcG9ydCA9IHhzX2Vycm9yX3JlcG9ydDsKIAkJc2stPnNrX25vX2NoZWNrID0gVURQX0NTVU1fTk9SQ1Y7CiAJCXNrLT5za19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKIApAQCAtMTUyNiw5ICsxNTgyLDEwIEBACiAJCWdvdG8gb3V0OwogCiAJLyogU3RhcnQgYnkgcmVzZXR0aW5nIGFueSBleGlzdGluZyBzdGF0ZSAqLwotCXhzX2Nsb3NlKHhwcnQpOworCXhzX3Jlc2V0X3RyYW5zcG9ydCh0cmFuc3BvcnQpOwogCi0JaWYgKChlcnIgPSBzb2NrX2NyZWF0ZV9rZXJuKFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAmc29jaykpIDwgMCkgeworCWVyciA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICZzb2NrKTsKKwlpZiAoZXJyIDwgMCkgewogCQlkcHJpbnRrKCJSUEM6ICAgICAgIGNhbid0IGNyZWF0ZSBVRFAgdHJhbnNwb3J0IHNvY2tldCAoJWQpLlxuIiwgLWVycik7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE1NDUsOCArMTYwMiw4IEBACiAJeHNfdWRwX2ZpbmlzaF9jb25uZWN0aW5nKHhwcnQsIHNvY2spOwogCXN0YXR1cyA9IDA7CiBvdXQ6Ci0JeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgc3RhdHVzKTsKIAl4cHJ0X2NsZWFyX2Nvbm5lY3RpbmcoeHBydCk7CisJeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgc3RhdHVzKTsKIH0KIAogLyoqCkBAIC0xNTY3LDkgKzE2MjQsMTAgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBTdGFydCBieSByZXNldHRpbmcgYW55IGV4aXN0aW5nIHN0YXRlICovCi0JeHNfY2xvc2UoeHBydCk7CisJeHNfcmVzZXRfdHJhbnNwb3J0KHRyYW5zcG9ydCk7CiAKLQlpZiAoKGVyciA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVDYsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAmc29jaykpIDwgMCkgeworCWVyciA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVDYsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAmc29jayk7CisJaWYgKGVyciA8IDApIHsKIAkJZHByaW50aygiUlBDOiAgICAgICBjYW4ndCBjcmVhdGUgVURQIHRyYW5zcG9ydCBzb2NrZXQgKCVkKS5cbiIsIC1lcnIpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNTg2LDE4ICsxNjQ0LDE3IEBACiAJeHNfdWRwX2ZpbmlzaF9jb25uZWN0aW5nKHhwcnQsIHNvY2spOwogCXN0YXR1cyA9IDA7CiBvdXQ6Ci0JeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgc3RhdHVzKTsKIAl4cHJ0X2NsZWFyX2Nvbm5lY3RpbmcoeHBydCk7CisJeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgc3RhdHVzKTsKIH0KIAogLyoKICAqIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHBvcnQgbnVtYmVyIHNvIHRoZSByZXBseSBjYWNoZSBvbiB0aGUgc2VydmVyIGNhbgogICogZmluZCBvdXIgY2FjaGVkIFJQQyByZXBsaWVzIHdoZW4gd2UgZ2V0IGFyb3VuZCB0byByZWNvbm5lY3RpbmcuCiAgKi8KLXN0YXRpYyB2b2lkIHhzX3RjcF9yZXVzZV9jb25uZWN0aW9uKHN0cnVjdCBycGNfeHBydCAqeHBydCkKK3N0YXRpYyB2b2lkIHhzX2Fib3J0X2Nvbm5lY3Rpb24oc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQpCiB7CiAJaW50IHJlc3VsdDsKLQlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQgPSBjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHNvY2tfeHBydCwgeHBydCk7CiAJc3RydWN0IHNvY2thZGRyIGFueTsKIAogCWRwcmludGsoIlJQQzogICAgICAgZGlzY29ubmVjdGluZyB4cHJ0ICVwIHRvIHJldXNlIHBvcnRcbiIsIHhwcnQpOwpAQCAtMTYwOSwxMSArMTY2NiwyNCBAQAogCW1lbXNldCgmYW55LCAwLCBzaXplb2YoYW55KSk7CiAJYW55LnNhX2ZhbWlseSA9IEFGX1VOU1BFQzsKIAlyZXN1bHQgPSBrZXJuZWxfY29ubmVjdCh0cmFuc3BvcnQtPnNvY2ssICZhbnksIHNpemVvZihhbnkpLCAwKTsKLQlpZiAocmVzdWx0KQorCWlmICghcmVzdWx0KQorCQl4c19zb2NrX21hcmtfY2xvc2VkKHhwcnQpOworCWVsc2UKIAkJZHByaW50aygiUlBDOiAgICAgICBBRl9VTlNQRUMgY29ubmVjdCByZXR1cm4gY29kZSAlZFxuIiwKIAkJCQlyZXN1bHQpOwogfQogCitzdGF0aWMgdm9pZCB4c190Y3BfcmV1c2VfY29ubmVjdGlvbihzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdGUgPSB0cmFuc3BvcnQtPmluZXQtPnNrX3N0YXRlOworCisJaWYgKHN0YXRlID09IFRDUF9DTE9TRSAmJiB0cmFuc3BvcnQtPnNvY2stPnN0YXRlID09IFNTX1VOQ09OTkVDVEVEKQorCQlyZXR1cm47CisJaWYgKCgxIDw8IHN0YXRlKSAmIChUQ1BGX0VTVEFCTElTSEVEfFRDUEZfU1lOX1NFTlQpKQorCQlyZXR1cm47CisJeHNfYWJvcnRfY29ubmVjdGlvbih4cHJ0LCB0cmFuc3BvcnQpOworfQorCiBzdGF0aWMgaW50IHhzX3RjcF9maW5pc2hfY29ubmVjdGluZyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0ID0gY29udGFpbmVyX29mKHhwcnQsIHN0cnVjdCBzb2NrX3hwcnQsIHhwcnQpOwpAQCAtMTYyOSw3ICsxNjk5LDcgQEAKIAkJc2stPnNrX2RhdGFfcmVhZHkgPSB4c190Y3BfZGF0YV9yZWFkeTsKIAkJc2stPnNrX3N0YXRlX2NoYW5nZSA9IHhzX3RjcF9zdGF0ZV9jaGFuZ2U7CiAJCXNrLT5za193cml0ZV9zcGFjZSA9IHhzX3RjcF93cml0ZV9zcGFjZTsKLQkJc2stPnNrX2Vycm9yX3JlcG9ydCA9IHhzX3RjcF9lcnJvcl9yZXBvcnQ7CisJCXNrLT5za19lcnJvcl9yZXBvcnQgPSB4c19lcnJvcl9yZXBvcnQ7CiAJCXNrLT5za19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKIAogCQkvKiBzb2NrZXQgb3B0aW9ucyAqLwpAQCAtMTY1Nyw2ICsxNzI3LDk3IEBACiB9CiAKIC8qKgorICogeHNfdGNwX3NldHVwX3NvY2tldCAtIGNyZWF0ZSBhIFRDUCBzb2NrZXQgYW5kIGNvbm5lY3QgdG8gYSByZW1vdGUgZW5kcG9pbnQKKyAqIEB4cHJ0OiBSUEMgdHJhbnNwb3J0IHRvIGNvbm5lY3QKKyAqIEB0cmFuc3BvcnQ6IHNvY2tldCB0cmFuc3BvcnQgdG8gY29ubmVjdAorICogQGNyZWF0ZV9zb2NrOiBmdW5jdGlvbiB0byBjcmVhdGUgYSBzb2NrZXQgb2YgdGhlIGNvcnJlY3QgdHlwZQorICoKKyAqIEludm9rZWQgYnkgYSB3b3JrIHF1ZXVlIHRhc2tsZXQuCisgKi8KK3N0YXRpYyB2b2lkIHhzX3RjcF9zZXR1cF9zb2NrZXQoc3RydWN0IHJwY194cHJ0ICp4cHJ0LAorCQlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQsCisJCXN0cnVjdCBzb2NrZXQgKigqY3JlYXRlX3NvY2spKHN0cnVjdCBycGNfeHBydCAqLAorCQkJc3RydWN0IHNvY2tfeHBydCAqKSkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdHJhbnNwb3J0LT5zb2NrOworCWludCBzdGF0dXMgPSAtRUlPOworCisJaWYgKHhwcnQtPnNodXRkb3duKQorCQlnb3RvIG91dDsKKworCWlmICghc29jaykgeworCQljbGVhcl9iaXQoWFBSVF9DT05ORUNUSU9OX0FCT1JULCAmeHBydC0+c3RhdGUpOworCQlzb2NrID0gY3JlYXRlX3NvY2soeHBydCwgdHJhbnNwb3J0KTsKKwkJaWYgKElTX0VSUihzb2NrKSkgeworCQkJc3RhdHVzID0gUFRSX0VSUihzb2NrKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJaW50IGFib3J0X2FuZF9leGl0OworCisJCWFib3J0X2FuZF9leGl0ID0gdGVzdF9hbmRfY2xlYXJfYml0KFhQUlRfQ09OTkVDVElPTl9BQk9SVCwKKwkJCQkmeHBydC0+c3RhdGUpOworCQkvKiAiY2xvc2UiIHRoZSBzb2NrZXQsIHByZXNlcnZpbmcgdGhlIGxvY2FsIHBvcnQgKi8KKwkJeHNfdGNwX3JldXNlX2Nvbm5lY3Rpb24oeHBydCwgdHJhbnNwb3J0KTsKKworCQlpZiAoYWJvcnRfYW5kX2V4aXQpCisJCQlnb3RvIG91dF9lYWdhaW47CisJfQorCisJZHByaW50aygiUlBDOiAgICAgICB3b3JrZXIgY29ubmVjdGluZyB4cHJ0ICVwIHRvIGFkZHJlc3M6ICVzXG4iLAorCQkJeHBydCwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FMTF0pOworCisJc3RhdHVzID0geHNfdGNwX2ZpbmlzaF9jb25uZWN0aW5nKHhwcnQsIHNvY2spOworCWRwcmludGsoIlJQQzogICAgICAgJXAgY29ubmVjdCBzdGF0dXMgJWQgY29ubmVjdGVkICVkIHNvY2sgc3RhdGUgJWRcbiIsCisJCQl4cHJ0LCAtc3RhdHVzLCB4cHJ0X2Nvbm5lY3RlZCh4cHJ0KSwKKwkJCXNvY2stPnNrLT5za19zdGF0ZSk7CisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIC1FQ09OTlJFRlVTRUQ6CisJY2FzZSAtRUNPTk5SRVNFVDoKKwljYXNlIC1FTkVUVU5SRUFDSDoKKwkJLyogcmV0cnkgd2l0aCBleGlzdGluZyBzb2NrZXQsIGFmdGVyIGEgZGVsYXkgKi8KKwljYXNlIDA6CisJY2FzZSAtRUlOUFJPR1JFU1M6CisJY2FzZSAtRUFMUkVBRFk6CisJCXhwcnRfY2xlYXJfY29ubmVjdGluZyh4cHJ0KTsKKwkJcmV0dXJuOworCX0KKwkvKiBnZXQgcmlkIG9mIGV4aXN0aW5nIHNvY2tldCwgYW5kIHJldHJ5ICovCisJeHNfdGNwX3NodXRkb3duKHhwcnQpOworCXByaW50aygiJXM6IGNvbm5lY3QgcmV0dXJuZWQgdW5oYW5kbGVkIGVycm9yICVkXG4iLAorCQkJX19mdW5jX18sIHN0YXR1cyk7CitvdXRfZWFnYWluOgorCXN0YXR1cyA9IC1FQUdBSU47CitvdXQ6CisJeHBydF9jbGVhcl9jb25uZWN0aW5nKHhwcnQpOworCXhwcnRfd2FrZV9wZW5kaW5nX3Rhc2tzKHhwcnQsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICp4c19jcmVhdGVfdGNwX3NvY2s0KHN0cnVjdCBycGNfeHBydCAqeHBydCwKKwkJc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0KQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJaW50IGVycjsKKworCS8qIHN0YXJ0IGZyb20gc2NyYXRjaCAqLworCWVyciA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAmc29jayk7CisJaWYgKGVyciA8IDApIHsKKwkJZHByaW50aygiUlBDOiAgICAgICBjYW4ndCBjcmVhdGUgVENQIHRyYW5zcG9ydCBzb2NrZXQgKCVkKS5cbiIsCisJCQkJLWVycik7CisJCWdvdG8gb3V0X2VycjsKKwl9CisJeHNfcmVjbGFzc2lmeV9zb2NrZXQ0KHNvY2spOworCisJaWYgKHhzX2JpbmQ0KHRyYW5zcG9ydCwgc29jaykgPCAwKSB7CisJCXNvY2tfcmVsZWFzZShzb2NrKTsKKwkJZ290byBvdXRfZXJyOworCX0KKwlyZXR1cm4gc29jazsKK291dF9lcnI6CisJcmV0dXJuIEVSUl9QVFIoLUVJTyk7Cit9CisKKy8qKgogICogeHNfdGNwX2Nvbm5lY3Rfd29ya2VyNCAtIGNvbm5lY3QgYSBUQ1Agc29ja2V0IHRvIGEgcmVtb3RlIGVuZHBvaW50CiAgKiBAd29yazogUlBDIHRyYW5zcG9ydCB0byBjb25uZWN0CiAgKgpAQCAtMTY2Nyw1MyArMTgyOCwzMiBAQAogCXN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc29ja194cHJ0LCBjb25uZWN0X3dvcmtlci53b3JrKTsKIAlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSAmdHJhbnNwb3J0LT54cHJ0OwotCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0cmFuc3BvcnQtPnNvY2s7Ci0JaW50IGVyciwgc3RhdHVzID0gLUVJTzsKIAotCWlmICh4cHJ0LT5zaHV0ZG93bikKLQkJZ290byBvdXQ7CisJeHNfdGNwX3NldHVwX3NvY2tldCh4cHJ0LCB0cmFuc3BvcnQsIHhzX2NyZWF0ZV90Y3Bfc29jazQpOworfQogCi0JaWYgKCFzb2NrKSB7Ci0JCS8qIHN0YXJ0IGZyb20gc2NyYXRjaCAqLwotCQlpZiAoKGVyciA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQLCAmc29jaykpIDwgMCkgewotCQkJZHByaW50aygiUlBDOiAgICAgICBjYW4ndCBjcmVhdGUgVENQIHRyYW5zcG9ydCBzb2NrZXQgKCVkKS5cbiIsIC1lcnIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJeHNfcmVjbGFzc2lmeV9zb2NrZXQ0KHNvY2spOworc3RhdGljIHN0cnVjdCBzb2NrZXQgKnhzX2NyZWF0ZV90Y3Bfc29jazYoc3RydWN0IHJwY194cHJ0ICp4cHJ0LAorCQlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlpbnQgZXJyOwogCi0JCWlmICh4c19iaW5kNCh0cmFuc3BvcnQsIHNvY2spIDwgMCkgewotCQkJc29ja19yZWxlYXNlKHNvY2spOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9IGVsc2UKLQkJLyogImNsb3NlIiB0aGUgc29ja2V0LCBwcmVzZXJ2aW5nIHRoZSBsb2NhbCBwb3J0ICovCi0JCXhzX3RjcF9yZXVzZV9jb25uZWN0aW9uKHhwcnQpOwotCi0JZHByaW50aygiUlBDOiAgICAgICB3b3JrZXIgY29ubmVjdGluZyB4cHJ0ICVwIHRvIGFkZHJlc3M6ICVzXG4iLAotCQkJeHBydCwgeHBydC0+YWRkcmVzc19zdHJpbmdzW1JQQ19ESVNQTEFZX0FMTF0pOwotCi0Jc3RhdHVzID0geHNfdGNwX2ZpbmlzaF9jb25uZWN0aW5nKHhwcnQsIHNvY2spOwotCWRwcmludGsoIlJQQzogICAgICAgJXAgY29ubmVjdCBzdGF0dXMgJWQgY29ubmVjdGVkICVkIHNvY2sgc3RhdGUgJWRcbiIsCi0JCQl4cHJ0LCAtc3RhdHVzLCB4cHJ0X2Nvbm5lY3RlZCh4cHJ0KSwKLQkJCXNvY2stPnNrLT5za19zdGF0ZSk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJc3dpdGNoIChzdGF0dXMpIHsKLQkJCWNhc2UgLUVJTlBST0dSRVNTOgotCQkJY2FzZSAtRUFMUkVBRFk6Ci0JCQkJZ290byBvdXRfY2xlYXI7Ci0JCQljYXNlIC1FQ09OTlJFRlVTRUQ6Ci0JCQljYXNlIC1FQ09OTlJFU0VUOgotCQkJCS8qIHJldHJ5IHdpdGggZXhpc3Rpbmcgc29ja2V0LCBhZnRlciBhIGRlbGF5ICovCi0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCS8qIGdldCByaWQgb2YgZXhpc3Rpbmcgc29ja2V0LCBhbmQgcmV0cnkgKi8KLQkJCQl4c190Y3Bfc2h1dGRvd24oeHBydCk7Ci0JCX0KKwkvKiBzdGFydCBmcm9tIHNjcmF0Y2ggKi8KKwllcnIgPSBzb2NrX2NyZWF0ZV9rZXJuKFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1AsICZzb2NrKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkcHJpbnRrKCJSUEM6ICAgICAgIGNhbid0IGNyZWF0ZSBUQ1AgdHJhbnNwb3J0IHNvY2tldCAoJWQpLlxuIiwKKwkJCQktZXJyKTsKKwkJZ290byBvdXRfZXJyOwogCX0KLW91dDoKLQl4cHJ0X3dha2VfcGVuZGluZ190YXNrcyh4cHJ0LCBzdGF0dXMpOwotb3V0X2NsZWFyOgotCXhwcnRfY2xlYXJfY29ubmVjdGluZyh4cHJ0KTsKKwl4c19yZWNsYXNzaWZ5X3NvY2tldDYoc29jayk7CisKKwlpZiAoeHNfYmluZDYodHJhbnNwb3J0LCBzb2NrKSA8IDApIHsKKwkJc29ja19yZWxlYXNlKHNvY2spOworCQlnb3RvIG91dF9lcnI7CisJfQorCXJldHVybiBzb2NrOworb3V0X2VycjoKKwlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIH0KIAogLyoqCkBAIC0xNzI3LDUyICsxODY3LDggQEAKIAlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHNvY2tfeHBydCwgY29ubmVjdF93b3JrZXIud29yayk7CiAJc3RydWN0IHJwY194cHJ0ICp4cHJ0ID0gJnRyYW5zcG9ydC0+eHBydDsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdHJhbnNwb3J0LT5zb2NrOwotCWludCBlcnIsIHN0YXR1cyA9IC1FSU87CiAKLQlpZiAoeHBydC0+c2h1dGRvd24pCi0JCWdvdG8gb3V0OwotCi0JaWYgKCFzb2NrKSB7Ci0JCS8qIHN0YXJ0IGZyb20gc2NyYXRjaCAqLwotCQlpZiAoKGVyciA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgJnNvY2spKSA8IDApIHsKLQkJCWRwcmludGsoIlJQQzogICAgICAgY2FuJ3QgY3JlYXRlIFRDUCB0cmFuc3BvcnQgc29ja2V0ICglZCkuXG4iLCAtZXJyKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXhzX3JlY2xhc3NpZnlfc29ja2V0Nihzb2NrKTsKLQotCQlpZiAoeHNfYmluZDYodHJhbnNwb3J0LCBzb2NrKSA8IDApIHsKLQkJCXNvY2tfcmVsZWFzZShzb2NrKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfSBlbHNlCi0JCS8qICJjbG9zZSIgdGhlIHNvY2tldCwgcHJlc2VydmluZyB0aGUgbG9jYWwgcG9ydCAqLwotCQl4c190Y3BfcmV1c2VfY29ubmVjdGlvbih4cHJ0KTsKLQotCWRwcmludGsoIlJQQzogICAgICAgd29ya2VyIGNvbm5lY3RpbmcgeHBydCAlcCB0byBhZGRyZXNzOiAlc1xuIiwKLQkJCXhwcnQsIHhwcnQtPmFkZHJlc3Nfc3RyaW5nc1tSUENfRElTUExBWV9BTExdKTsKLQotCXN0YXR1cyA9IHhzX3RjcF9maW5pc2hfY29ubmVjdGluZyh4cHJ0LCBzb2NrKTsKLQlkcHJpbnRrKCJSUEM6ICAgICAgICVwIGNvbm5lY3Qgc3RhdHVzICVkIGNvbm5lY3RlZCAlZCBzb2NrIHN0YXRlICVkXG4iLAotCQkJeHBydCwgLXN0YXR1cywgeHBydF9jb25uZWN0ZWQoeHBydCksIHNvY2stPnNrLT5za19zdGF0ZSk7Ci0JaWYgKHN0YXR1cyA8IDApIHsKLQkJc3dpdGNoIChzdGF0dXMpIHsKLQkJCWNhc2UgLUVJTlBST0dSRVNTOgotCQkJY2FzZSAtRUFMUkVBRFk6Ci0JCQkJZ290byBvdXRfY2xlYXI7Ci0JCQljYXNlIC1FQ09OTlJFRlVTRUQ6Ci0JCQljYXNlIC1FQ09OTlJFU0VUOgotCQkJCS8qIHJldHJ5IHdpdGggZXhpc3Rpbmcgc29ja2V0LCBhZnRlciBhIGRlbGF5ICovCi0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCS8qIGdldCByaWQgb2YgZXhpc3Rpbmcgc29ja2V0LCBhbmQgcmV0cnkgKi8KLQkJCQl4c190Y3Bfc2h1dGRvd24oeHBydCk7Ci0JCX0KLQl9Ci1vdXQ6Ci0JeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgc3RhdHVzKTsKLW91dF9jbGVhcjoKLQl4cHJ0X2NsZWFyX2Nvbm5lY3RpbmcoeHBydCk7CisJeHNfdGNwX3NldHVwX3NvY2tldCh4cHJ0LCB0cmFuc3BvcnQsIHhzX2NyZWF0ZV90Y3Bfc29jazYpOwogfQogCiAvKioKQEAgLTE4MTcsOSArMTkxMyw2IEBACiB7CiAJc3RydWN0IHJwY194cHJ0ICp4cHJ0ID0gdGFzay0+dGtfeHBydDsKIAotCS8qIEluaXRpYXRlIGdyYWNlZnVsIHNodXRkb3duIG9mIHRoZSBzb2NrZXQgaWYgbm90IGFscmVhZHkgZG9uZSAqLwotCWlmICh0ZXN0X2JpdChYUFJUX0NPTk5FQ1RFRCwgJnhwcnQtPnN0YXRlKSkKLQkJeHNfdGNwX3NodXRkb3duKHhwcnQpOwogCS8qIEV4aXQgaWYgd2UgbmVlZCB0byB3YWl0IGZvciBzb2NrZXQgc2h1dGRvd24gdG8gY29tcGxldGUgKi8KIAlpZiAodGVzdF9iaXQoWFBSVF9DTE9TSU5HLCAmeHBydC0+c3RhdGUpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggYmFhYzkxMC4uOWRjYzZlNyAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtODMyLDcgKzgzMiw3IEBACiAJCSAqIEFsbCByaWdodCwgbGV0J3MgY3JlYXRlIGl0LgogCQkgKi8KIAkJbW9kZSA9IFNfSUZTT0NLIHwKLQkJICAgICAgIChTT0NLX0lOT0RFKHNvY2spLT5pX21vZGUgJiB+Y3VycmVudC0+ZnMtPnVtYXNrKTsKKwkJICAgICAgIChTT0NLX0lOT0RFKHNvY2spLT5pX21vZGUgJiB+Y3VycmVudF91bWFzaygpKTsKIAkJZXJyID0gbW50X3dhbnRfd3JpdGUobmQucGF0aC5tbnQpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfbWtub2RfZHB1dDsKZGlmZiAtLWdpdCBhL25ldC93aW1heC9LY29uZmlnIGIvbmV0L3dpbWF4L0tjb25maWcKaW5kZXggMTg0OTVjZC4uMWI0Njc0NyAxMDA2NDQKLS0tIGEvbmV0L3dpbWF4L0tjb25maWcKKysrIGIvbmV0L3dpbWF4L0tjb25maWcKQEAgLTgsNyArOCw3IEBACiAjCiAjIEFzIHdlbGwsIGVuYWJsZW1lbnQgb2YgdGhlIFJGS0lMTCBjb2RlIG1lYW5zIHdlIG5lZWQgdGhlIElOUFVUIGxheWVyCiAjIHN1cHBvcnQgdG8gaW5qZWN0IGV2ZW50cyBjb21pbmcgZnJvbSBodyByZmtpbGwgc3dpdGNoZXMuIFRoYXQKLSMgZGVwZW5kZW5jeSBjb3VsZCBiZSBraWxsZWQgaWYgaW5wdXQuaCBwcm92aWRlZCBhcHByb3BpYXRlIG1lYW5zIHRvCisjIGRlcGVuZGVuY3kgY291bGQgYmUga2lsbGVkIGlmIGlucHV0LmggcHJvdmlkZWQgYXBwcm9wcmlhdGUgbWVhbnMgdG8KICMgd29yayB3aGVuIGlucHV0IGlzIGRpc2FibGVkLgogCiBjb21tZW50ICJXaU1BWCBXaXJlbGVzcyBCcm9hZGJhbmQgc3VwcG9ydCByZXF1aXJlcyBDT05GSUdfSU5QVVQgZW5hYmxlZCIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHAtc2FtcGxlcy10cmFjZS5oIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cC1zYW1wbGVzLXRyYWNlLmgKaW5kZXggMDE3MjRlMC4uZGZmZGM0OSAxMDA2NDQKLS0tIGEvc2FtcGxlcy90cmFjZXBvaW50cy90cC1zYW1wbGVzLXRyYWNlLmgKKysrIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cC1zYW1wbGVzLXRyYWNlLmgKQEAgLTUsOSArNSw5IEBACiAjaW5jbHVkZSA8bGludXgvdHJhY2Vwb2ludC5oPgogCiBERUNMQVJFX1RSQUNFKHN1YnN5c19ldmVudCwKLQlUUFBST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKSwKLQlUUEFSR1MoaW5vZGUsIGZpbGUpKTsKKwlUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSksCisJVFBfQVJHUyhpbm9kZSwgZmlsZSkpOwogREVDTEFSRV9UUkFDRShzdWJzeXNfZXZlbnRiLAotCVRQUFJPVE8odm9pZCksCi0JVFBBUkdTKCkpOworCVRQX1BST1RPKHZvaWQpLAorCVRQX0FSR1MoKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYyBiL3NhbXBsZXMvdHJhY2Vwb2ludHMvdHJhY2Vwb2ludC1zYW1wbGUuYwppbmRleCA2OGQ1ZGMwLi45Y2Y4MGExIDEwMDY0NAotLS0gYS9zYW1wbGVzL3RyYWNlcG9pbnRzL3RyYWNlcG9pbnQtc2FtcGxlLmMKKysrIGIvc2FtcGxlcy90cmFjZXBvaW50cy90cmFjZXBvaW50LXNhbXBsZS5jCkBAIC0xLDYgKzEsNiBAQAogLyogdHJhY2Vwb2ludC1zYW1wbGUuYwogICoKLSAqIEV4ZWN1dGVzIGEgdHJhY2Vwb2ludCB3aGVuIC9wcm9jL3RyYWNlcG9pbnQtZXhhbXBsZSBpcyBvcGVuZWQuCisgKiBFeGVjdXRlcyBhIHRyYWNlcG9pbnQgd2hlbiAvcHJvYy90cmFjZXBvaW50LXNhbXBsZSBpcyBvcGVuZWQuCiAgKgogICogKEMpIENvcHlyaWdodCAyMDA3IE1hdGhpZXUgRGVzbm95ZXJzIDxtYXRoaWV1LmRlc25veWVyc0Bwb2x5bXRsLmNhPgogICoKQEAgLTE2LDcgKzE2LDcgQEAKIERFRklORV9UUkFDRShzdWJzeXNfZXZlbnQpOwogREVGSU5FX1RSQUNFKHN1YnN5c19ldmVudGIpOwogCi1zdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBlbnRyeV9leGFtcGxlOworc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZW50cnlfc2FtcGxlOwogCiBzdGF0aWMgaW50IG15X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC0zMiwyNSArMzIsMjUgQEAKIAkub3BlbiA9IG15X29wZW4sCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBleGFtcGxlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNhbXBsZV9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fQUxFUlQgImV4YW1wbGUgaW5pdFxuIik7Ci0JcGVudHJ5X2V4YW1wbGUgPSBwcm9jX2NyZWF0ZSgidHJhY2Vwb2ludC1leGFtcGxlIiwgMDQ0NCwgTlVMTCwKKwlwcmludGsoS0VSTl9BTEVSVCAic2FtcGxlIGluaXRcbiIpOworCXBlbnRyeV9zYW1wbGUgPSBwcm9jX2NyZWF0ZSgidHJhY2Vwb2ludC1zYW1wbGUiLCAwNDQ0LCBOVUxMLAogCQkmbWFya19vcHMpOwotCWlmICghcGVudHJ5X2V4YW1wbGUpCisJaWYgKCFwZW50cnlfc2FtcGxlKQogCQlyZXR1cm4gLUVQRVJNOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhhbXBsZV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgc2FtcGxlX2V4aXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9BTEVSVCAiZXhhbXBsZSBleGl0XG4iKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgidHJhY2Vwb2ludC1leGFtcGxlIiwgTlVMTCk7CisJcHJpbnRrKEtFUk5fQUxFUlQgInNhbXBsZSBleGl0XG4iKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgidHJhY2Vwb2ludC1zYW1wbGUiLCBOVUxMKTsKIH0KIAotbW9kdWxlX2luaXQoZXhhbXBsZV9pbml0KQotbW9kdWxlX2V4aXQoZXhhbXBsZV9leGl0KQorbW9kdWxlX2luaXQoc2FtcGxlX2luaXQpCittb2R1bGVfZXhpdChzYW1wbGVfZXhpdCkKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiTWF0aGlldSBEZXNub3llcnMiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiVHJhY2Vwb2ludCBleGFtcGxlIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRyYWNlcG9pbnQgc2FtcGxlIik7CmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkIGIvc2NyaXB0cy9NYWtlZmlsZS5idWlsZAppbmRleCBjN2RlOGIzLi4zOWE5NjQyIDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKQEAgLTExMiwxMyArMTEyLDEzIEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjIERlZmF1bHQgaXMgYnVpbHQtaW4sIHVubGVzcyB3ZSBrbm93IG90aGVyd2lzZQotbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfS0VSTkVMKQorbW9ka2Vybl9jZmxhZ3MgPSAkKGlmICQocGFydC1vZi1tb2R1bGUpLCAkKENGTEFHU19NT0RVTEUpLCAkKENGTEFHU19LRVJORUwpKQogcXVpZXRfbW9kdGFnIDo9ICQoZW1wdHkpICAgJChlbXB0eSkKIAotJChyZWFsLW9ianMtbSkgICAgICAgIDogbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfTU9EVUxFKQotJChyZWFsLW9ianMtbToubz0uaSkgIDogbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfTU9EVUxFKQotJChyZWFsLW9ianMtbToubz0ucykgIDogbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfTU9EVUxFKQotJChyZWFsLW9ianMtbToubz0ubHN0KTogbW9ka2Vybl9jZmxhZ3MgOj0gJChDRkxBR1NfTU9EVUxFKQorJChyZWFsLW9ianMtbSkgICAgICAgIDogcGFydC1vZi1tb2R1bGUgOj0geQorJChyZWFsLW9ianMtbToubz0uaSkgIDogcGFydC1vZi1tb2R1bGUgOj0geQorJChyZWFsLW9ianMtbToubz0ucykgIDogcGFydC1vZi1tb2R1bGUgOj0geQorJChyZWFsLW9ianMtbToubz0ubHN0KTogcGFydC1vZi1tb2R1bGUgOj0geQogCiAkKHJlYWwtb2Jqcy1tKSAgICAgICAgOiBxdWlldF9tb2R0YWcgOj0gW01dCiAkKHJlYWwtb2Jqcy1tOi5vPS5pKSAgOiBxdWlldF9tb2R0YWcgOj0gW01dCkBAIC0yMDUsNyArMjA1LDggQEAKIGlmZGVmIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRAogY21kX3JlY29yZF9tY291bnQgPSBwZXJsICQoc3JjdHJlZSkvc2NyaXB0cy9yZWNvcmRtY291bnQucGwgIiQoQVJDSCkiIFwKIAkiJChpZiAkKENPTkZJR182NEJJVCksNjQsMzIpIiBcCi0JIiQoT0JKRFVNUCkiICIkKE9CSkNPUFkpIiAiJChDQykiICIkKExEKSIgIiQoTk0pIiAiJChSTSkiICIkKE1WKSIgIiQoQCkiOworCSIkKE9CSkRVTVApIiAiJChPQkpDT1BZKSIgIiQoQ0MpIiAiJChMRCkiICIkKE5NKSIgIiQoUk0pIiAiJChNVikiIFwKKwkiJChpZiAkKHBhcnQtb2YtbW9kdWxlKSwxLDApIiAiJChAKSI7CiBlbmRpZgogCiBkZWZpbmUgcnVsZV9jY19vX2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2FsbHN5bXMuYyBiL3NjcmlwdHMva2FsbHN5bXMuYwppbmRleCBhZDI0MzRiLi42NjU0Y2JlZCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rYWxsc3ltcy5jCisrKyBiL3NjcmlwdHMva2FsbHN5bXMuYwpAQCAtNTAwLDYgKzUwMCw1MSBAQAogCW9wdGltaXplX3Jlc3VsdCgpOwogfQogCisvKiBndWVzcyBmb3IgImxpbmtlciBzY3JpcHQgcHJvdmlkZSIgc3ltYm9sICovCitzdGF0aWMgaW50IG1heV9iZV9saW5rZXJfc2NyaXB0X3Byb3ZpZGVfc3ltYm9sKGNvbnN0IHN0cnVjdCBzeW1fZW50cnkgKnNlKQoreworCWNvbnN0IGNoYXIgKnN5bWJvbCA9IChjaGFyICopc2UtPnN5bSArIDE7CisJaW50IGxlbiA9IHNlLT5sZW4gLSAxOworCisJaWYgKGxlbiA8IDgpCisJCXJldHVybiAwOworCisJaWYgKHN5bWJvbFswXSAhPSAnXycgfHwgc3ltYm9sWzFdICE9ICdfJykKKwkJcmV0dXJuIDA7CisKKwkvKiBfX3N0YXJ0X1hYWFhYICovCisJaWYgKCFtZW1jbXAoc3ltYm9sICsgMiwgInN0YXJ0XyIsIDYpKQorCQlyZXR1cm4gMTsKKworCS8qIF9fc3RvcF9YWFhYWCAqLworCWlmICghbWVtY21wKHN5bWJvbCArIDIsICJzdG9wXyIsIDUpKQorCQlyZXR1cm4gMTsKKworCS8qIF9fZW5kX1hYWFhYICovCisJaWYgKCFtZW1jbXAoc3ltYm9sICsgMiwgImVuZF8iLCA0KSkKKwkJcmV0dXJuIDE7CisKKwkvKiBfX1hYWFhYX3N0YXJ0ICovCisJaWYgKCFtZW1jbXAoc3ltYm9sICsgbGVuIC0gNiwgIl9zdGFydCIsIDYpKQorCQlyZXR1cm4gMTsKKworCS8qIF9fWFhYWFhfZW5kICovCisJaWYgKCFtZW1jbXAoc3ltYm9sICsgbGVuIC0gNCwgIl9lbmQiLCA0KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcmVmaXhfdW5kZXJzY29yZXNfY291bnQoY29uc3QgY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIgKnRhaWwgPSBzdHI7CisKKwl3aGlsZSAoKnRhaWwgIT0gJ18nKQorCQl0YWlsKys7CisKKwlyZXR1cm4gdGFpbCAtIHN0cjsKK30KKwogc3RhdGljIGludCBjb21wYXJlX3N5bWJvbHMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIHsKIAljb25zdCBzdHJ1Y3Qgc3ltX2VudHJ5ICpzYTsKQEAgLTUyMSw2ICs1NjYsMTggQEAKIAlpZiAod2EgIT0gd2IpCiAJCXJldHVybiB3YSAtIHdiOwogCisJLyogc29ydCBieSAibGlua2VyIHNjcmlwdCBwcm92aWRlIiB0eXBlICovCisJd2EgPSBtYXlfYmVfbGlua2VyX3NjcmlwdF9wcm92aWRlX3N5bWJvbChzYSk7CisJd2IgPSBtYXlfYmVfbGlua2VyX3NjcmlwdF9wcm92aWRlX3N5bWJvbChzYik7CisJaWYgKHdhICE9IHdiKQorCQlyZXR1cm4gd2EgLSB3YjsKKworCS8qIHNvcnQgYnkgdGhlIG51bWJlciBvZiBwcmVmaXggdW5kZXJzY29yZXMgKi8KKwl3YSA9IHByZWZpeF91bmRlcnNjb3Jlc19jb3VudCgoY29uc3QgY2hhciAqKXNhLT5zeW0gKyAxKTsKKwl3YiA9IHByZWZpeF91bmRlcnNjb3Jlc19jb3VudCgoY29uc3QgY2hhciAqKXNiLT5zeW0gKyAxKTsKKwlpZiAod2EgIT0gd2IpCisJCXJldHVybiB3YSAtIHdiOworCiAJLyogc29ydCBieSBpbml0aWFsIG9yZGVyLCBzbyB0aGF0IG90aGVyIHN5bWJvbHMgYXJlIGxlZnQgdW5kaXN0dXJiZWQgKi8KIAlyZXR1cm4gc2EtPnN0YXJ0X3BvcyAtIHNiLT5zdGFydF9wb3M7CiB9CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMgYi9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKaW5kZXggN2U2MjMwMy4uOGNjNzA2MSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCisrKyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwpAQCAtMTYwNywxMiArMTYwNywxMiBAQAogCiAJcGFyc2VfZWxmX2ZpbmlzaCgmaW5mbyk7CiAKLQkvKiBPdXIgdHJpY2sgdG8gZ2V0IHZlcnNpb25pbmcgZm9yIHN0cnVjdF9tb2R1bGUgLSBpdCdzCisJLyogT3VyIHRyaWNrIHRvIGdldCB2ZXJzaW9uaW5nIGZvciBtb2R1bGUgc3RydWN0IGV0Yy4gLSBpdCdzCiAJICogbmV2ZXIgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBzbwogCSAqIHRoZSBhdXRvbWF0aWMgdmVyc2lvbmluZyBkb2Vzbid0IHBpY2sgaXQgdXAsIGJ1dCBpdCdzIHJlYWxseQogCSAqIGltcG9ydGFudCBhbnlob3cgKi8KIAlpZiAobW9kdmVyc2lvbnMpCi0JCW1vZC0+dW5yZXMgPSBhbGxvY19zeW1ib2woInN0cnVjdF9tb2R1bGUiLCAwLCBtb2QtPnVucmVzKTsKKwkJbW9kLT51bnJlcyA9IGFsbG9jX3N5bWJvbCgibW9kdWxlX2xheW91dCIsIDAsIG1vZC0+dW5yZXMpOwogfQogCiAjZGVmaW5lIFNaIDUwMApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkdGFyCmluZGV4IDI4NTc0YWUuLmIxZmQ0OGQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9idWlsZHRhcgorKysgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGR0YXIKQEAgLTc1LDYgKzc1LDEwIEBACiAJYWxwaGEpCiAJCVsgLWYgIiR7b2JqdHJlZX0vYXJjaC9hbHBoYS9ib290L3ZtbGludXguZ3oiIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vYXJjaC9hbHBoYS9ib290L3ZtbGludXguZ3oiICIke3RtcGRpcn0vYm9vdC92bWxpbnV6LSR7S0VSTkVMUkVMRUFTRX0iCiAJCTs7CisJcGFyaXNjKikKKwkJWyAtZiAiJHtLQlVJTERfSU1BR0V9IiBdICYmIGNwIC12IC0tICIke0tCVUlMRF9JTUFHRX0iICIke3RtcGRpcn0vYm9vdC92bWxpbnV4LSR7S0VSTkVMUkVMRUFTRX0iCisJCVsgLWYgIiR7b2JqdHJlZX0vbGlmaW1hZ2UiIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vbGlmaW1hZ2UiICIke3RtcGRpcn0vYm9vdC9saWZpbWFnZS0ke0tFUk5FTFJFTEVBU0V9IgorCQk7OwogCXZheCkKIAkJWyAtZiAiJHtvYmp0cmVlfS92bWxpbnV4LlNZUyIgXSAmJiBjcCAtdiAtLSAiJHtvYmp0cmVlfS92bWxpbnV4LlNZUyIgIiR7dG1wZGlyfS9ib290L3ZtbGludXgtJHtLRVJORUxSRUxFQVNFfS5TWVMiCiAJCVsgLWYgIiR7b2JqdHJlZX0vdm1saW51eC5kc2siIF0gJiYgY3AgLXYgLS0gIiR7b2JqdHJlZX0vdm1saW51eC5kc2siICIke3RtcGRpcn0vYm9vdC92bWxpbnV4LSR7S0VSTkVMUkVMRUFTRX0uZHNrIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNvcmRtY291bnQucGwgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAppbmRleCBmZTgzMTQxLi40MDk1OTZlIDEwMDc1NQotLS0gYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAorKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5wbApAQCAtMTAwLDE0ICsxMDAsMTkgQEAKIAogbXkgJFYgPSAnMC4xJzsKIAotaWYgKCQjQVJHViA8IDYpIHsKLQlwcmludCAidXNhZ2U6ICRQIGFyY2ggb2JqZHVtcCBvYmpjb3B5IGNjIGxkIG5tIHJtIG12IGlucHV0ZmlsZVxuIjsKK2lmICgkI0FSR1YgPCA3KSB7CisJcHJpbnQgInVzYWdlOiAkUCBhcmNoIGJpdHMgb2JqZHVtcCBvYmpjb3B5IGNjIGxkIG5tIHJtIG12IGlzX21vZHVsZSBpbnB1dGZpbGVcbiI7CiAJcHJpbnQgInZlcnNpb246ICRWXG4iOwogCWV4aXQoMSk7CiB9CiAKIG15ICgkYXJjaCwgJGJpdHMsICRvYmpkdW1wLCAkb2JqY29weSwgJGNjLAotICAgICRsZCwgJG5tLCAkcm0sICRtdiwgJGlucHV0ZmlsZSkgPSBAQVJHVjsKKyAgICAkbGQsICRubSwgJHJtLCAkbXYsICRpc19tb2R1bGUsICRpbnB1dGZpbGUpID0gQEFSR1Y7CisKKyMgVGhpcyBmaWxlIHJlZmVycyB0byBtY291bnQgYW5kIHNob3VsZG4ndCBiZSBmdHJhY2VkLCBzbyBsZXRzJyBpZ25vcmUgaXQKK2lmICgkaW5wdXRmaWxlIGVxICJrZXJuZWwvdHJhY2UvZnRyYWNlLm8iKSB7CisgICAgZXhpdCgwKTsKK30KIAogIyBBY2NlcHRhYmxlIHNlY3Rpb25zIHRvIHJlY29yZC4KIG15ICV0ZXh0X3NlY3Rpb25zID0gKApAQCAtMjAxLDYgKzIwNiwxMyBAQAogICAgICRhbGlnbm1lbnQgPSAyOwogICAgICRzZWN0aW9uX3R5cGUgPSAnJXByb2diaXRzJzsKIAorfSBlbHNpZiAoJGFyY2ggZXEgImlhNjQiKSB7CisgICAgJG1jb3VudF9yZWdleCA9ICJeXFxzKihbMC05YS1mQS1GXSspOi4qXFxzX21jb3VudFwkIjsKKyAgICAkdHlwZSA9ICJkYXRhOCI7CisKKyAgICBpZiAoJGlzX21vZHVsZSBlcSAiMCIpIHsKKyAgICAgICAgJGNjIC49ICIgLW1jb25zdGFudC1ncCI7CisgICAgfQogfSBlbHNlIHsKICAgICBkaWUgIkFyY2ggJGFyY2ggaXMgbm90IHN1cHBvcnRlZCB3aXRoIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRCI7CiB9CkBAIC0yNjMsNyArMjc1LDYgQEAKIAkiXHREaXNhYmxpbmcgbG9jYWwgZnVuY3Rpb24gcmVmZXJlbmNlcy5cbiI7CiB9CiAKLQogIwogIyBTdGVwIDE6IGZpbmQgYWxsIHRoZSBsb2NhbCAoc3RhdGljIGZ1bmN0aW9ucykgYW5kIHdlYWsgc3ltYm9scy4KICMgICAgICAgICd0JyBpcyBsb2NhbCwgJ3cvVycgaXMgd2VhayAod2UgbmV2ZXIgdXNlIGEgd2VhayBmdW5jdGlvbikKQEAgLTMzMSwxMyArMzQyLDE2IEBACiAjCiAjIFN0ZXAgMjogZmluZCB0aGUgc2VjdGlvbnMgYW5kIG1jb3VudCBjYWxsIHNpdGVzCiAjCi1vcGVuKElOLCAiJG9iamR1bXAgLWRyICRpbnB1dGZpbGV8IikgfHwgZGllICJlcnJvciBydW5uaW5nICRvYmpkdW1wIjsKK29wZW4oSU4sICIkb2JqZHVtcCAtaGRyICRpbnB1dGZpbGV8IikgfHwgZGllICJlcnJvciBydW5uaW5nICRvYmpkdW1wIjsKIAogbXkgJHRleHQ7CiAKK215ICRyZWFkX2hlYWRlcnMgPSAxOworCiB3aGlsZSAoPElOPikgewogICAgICMgaXMgaXQgYSBzZWN0aW9uPwogICAgIGlmICgvJHNlY3Rpb25fcmVnZXgvKSB7CisJJHJlYWRfaGVhZGVycyA9IDA7CiAKIAkjIE9ubHkgcmVjb3JkIHRleHQgc2VjdGlvbnMgdGhhdCB3ZSBrbm93IGFyZSBzYWZlCiAJaWYgKGRlZmluZWQoJHRleHRfc2VjdGlvbnN7JDF9KSkgewpAQCAtMzcxLDYgKzM4NSwxOSBAQAogCQkkcmVmX2Z1bmMgPSAkdGV4dDsKIAkgICAgfQogCX0KKyAgICB9IGVsc2lmICgkcmVhZF9oZWFkZXJzICYmIC8kbWNvdW50X3NlY3Rpb24vKSB7CisJIworCSMgU29tZWhvdyB0aGUgbWFrZSBwcm9jZXNzIGNhbiBleGVjdXRlIHRoaXMgc2NyaXB0IG9uIGFuCisJIyBvYmplY3QgdHdpY2UuIElmIGl0IGRvZXMsIHdlIHdvdWxkIGR1cGxpY2F0ZSB0aGUgbWNvdW50CisJIyBzZWN0aW9uIGFuZCBpdCB3aWxsIGNhdXNlIHRoZSBmdW5jdGlvbiB0cmFjZXIgc2VsZiB0ZXN0CisJIyB0byBmYWlsLiBDaGVjayBpZiB0aGUgbWNvdW50IHNlY3Rpb24gZXhpc3RzLCBhbmQgaWYgaXQgZG9lcywKKwkjIHdhcm4gYW5kIGV4aXQuCisJIworCXByaW50IFNUREVSUiAiRVJST1I6ICRtY291bnRfc2VjdGlvbiBhbHJlYWR5IGluICRpbnB1dGZpbGVcbiIgLgorCSAgICAiXHRUaGlzIG1heSBiZSBhbiBpbmRpY2F0aW9uIHRoYXQgeW91ciBidWlsZCBpcyBjb3JydXB0ZWQuXG4iIC4KKwkgICAgIlx0RGVsZXRlICRpbnB1dGZpbGUgYW5kIHRyeSBhZ2Fpbi4gSWYgdGhlIHNhbWUgb2JqZWN0IGZpbGVcbiIgLgorCSAgICAiXHRzdGlsbCBjYXVzZXMgYW4gaXNzdWUsIHRoZW4gZGlzYWJsZSBDT05GSUdfRFlOQU1JQ19GVFJBQ0UuXG4iOworCWV4aXQoLTEpOwogICAgIH0KIAogICAgICMgaXMgdGhpcyBhIGNhbGwgc2l0ZSB0byBtY291bnQ/IElmIHNvLCByZWNvcmQgaXQgdG8gcHJpbnQgbGF0ZXIKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYyBiL3NlY3VyaXR5L2RldmljZV9jZ3JvdXAuYwppbmRleCAzYWFjZDBmLi41ZmRhN2RmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9kZXZpY2VfY2dyb3VwLmMKKysrIGIvc2VjdXJpdHkvZGV2aWNlX2Nncm91cC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjZGVmaW5lIEFDQ19NS05PRCAxCiAjZGVmaW5lIEFDQ19SRUFEICAyCkBAIC0yMSw5ICsyMiwxMSBAQAogI2RlZmluZSBERVZfQ0hBUiAgMgogI2RlZmluZSBERVZfQUxMICAgNCAgLyogdGhpcyByZXByZXNlbnRzIGFsbCBkZXZpY2VzICovCiAKK3N0YXRpYyBERUZJTkVfTVVURVgoZGV2Y2dyb3VwX211dGV4KTsKKwogLyoKICAqIHdoaXRlbGlzdCBsb2NraW5nIHJ1bGVzOgotICogaG9sZCBjZ3JvdXBfbG9jaygpIGZvciB1cGRhdGUvcmVhZC4KKyAqIGhvbGQgZGV2Y2dyb3VwX211dGV4IGZvciB1cGRhdGUvcmVhZC4KICAqIGhvbGQgcmN1X3JlYWRfbG9jaygpIGZvciByZWFkLgogICovCiAKQEAgLTY3LDcgKzcwLDcgQEAKIH0KIAogLyoKLSAqIGNhbGxlZCB1bmRlciBjZ3JvdXBfbG9jaygpCisgKiBjYWxsZWQgdW5kZXIgZGV2Y2dyb3VwX211dGV4CiAgKi8KIHN0YXRpYyBpbnQgZGV2X3doaXRlbGlzdF9jb3B5KHN0cnVjdCBsaXN0X2hlYWQgKmRlc3QsIHN0cnVjdCBsaXN0X2hlYWQgKm9yaWcpCiB7CkBAIC05Miw3ICs5NSw3IEBACiAKIC8qIFN0dXBpZCBwcm90b3R5cGUgLSBkb24ndCBib3RoZXIgY29tYmluaW5nIGV4aXN0aW5nIGVudHJpZXMgKi8KIC8qCi0gKiBjYWxsZWQgdW5kZXIgY2dyb3VwX2xvY2soKQorICogY2FsbGVkIHVuZGVyIGRldmNncm91cF9tdXRleAogICovCiBzdGF0aWMgaW50IGRldl93aGl0ZWxpc3RfYWRkKHN0cnVjdCBkZXZfY2dyb3VwICpkZXZfY2dyb3VwLAogCQkJc3RydWN0IGRldl93aGl0ZWxpc3RfaXRlbSAqd2gpCkBAIC0xMzAsNyArMTMzLDcgQEAKIH0KIAogLyoKLSAqIGNhbGxlZCB1bmRlciBjZ3JvdXBfbG9jaygpCisgKiBjYWxsZWQgdW5kZXIgZGV2Y2dyb3VwX211dGV4CiAgKi8KIHN0YXRpYyB2b2lkIGRldl93aGl0ZWxpc3Rfcm0oc3RydWN0IGRldl9jZ3JvdXAgKmRldl9jZ3JvdXAsCiAJCQlzdHJ1Y3QgZGV2X3doaXRlbGlzdF9pdGVtICp3aCkKQEAgLTE4NSw4ICsxODgsMTAgQEAKIAkJbGlzdF9hZGQoJndoLT5saXN0LCAmZGV2X2Nncm91cC0+d2hpdGVsaXN0KTsKIAl9IGVsc2UgewogCQlwYXJlbnRfZGV2X2Nncm91cCA9IGNncm91cF90b19kZXZjZ3JvdXAocGFyZW50X2Nncm91cCk7CisJCW11dGV4X2xvY2soJmRldmNncm91cF9tdXRleCk7CiAJCXJldCA9IGRldl93aGl0ZWxpc3RfY29weSgmZGV2X2Nncm91cC0+d2hpdGVsaXN0LAogCQkJCSZwYXJlbnRfZGV2X2Nncm91cC0+d2hpdGVsaXN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXZjZ3JvdXBfbXV0ZXgpOwogCQlpZiAocmV0KSB7CiAJCQlrZnJlZShkZXZfY2dyb3VwKTsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CkBAIC0yNzMsNyArMjc4LDcgQEAKICAqIGRvZXMgdGhlIGFjY2VzcyBncmFudGVkIHRvIGRldl9jZ3JvdXAgYyBjb250YWluIHRoZSBhY2Nlc3MKICAqIHJlcXVlc3RlZCBpbiB3aGl0ZWxpc3QgaXRlbSByZWZ3aC4KICAqIHJldHVybiAxIGlmIHllcywgMCBpZiBuby4KLSAqIGNhbGwgd2l0aCBjLT5sb2NrIGhlbGQKKyAqIGNhbGwgd2l0aCBkZXZjZ3JvdXBfbXV0ZXggaGVsZAogICovCiBzdGF0aWMgaW50IG1heV9hY2Nlc3Nfd2hpdGVsaXN0KHN0cnVjdCBkZXZfY2dyb3VwICpjLAogCQkJCSAgICAgICBzdHJ1Y3QgZGV2X3doaXRlbGlzdF9pdGVtICpyZWZ3aCkKQEAgLTQyNiwxMSArNDMxLDExIEBACiAJCQkJICBjb25zdCBjaGFyICpidWZmZXIpCiB7CiAJaW50IHJldHZhbDsKLQlpZiAoIWNncm91cF9sb2NrX2xpdmVfZ3JvdXAoY2dycCkpCi0JCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZGV2Y2dyb3VwX211dGV4KTsKIAlyZXR2YWwgPSBkZXZjZ3JvdXBfdXBkYXRlX2FjY2VzcyhjZ3JvdXBfdG9fZGV2Y2dyb3VwKGNncnApLAogCQkJCQkgY2Z0LT5wcml2YXRlLCBidWZmZXIpOwotCWNncm91cF91bmxvY2soKTsKKwltdXRleF91bmxvY2soJmRldmNncm91cF9tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggMjA2ZTUzOC4uNTI4NDI1NSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYworKysgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC00NDUsNiArNDQ1LDcgQEAKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNlY3VyaXR5X2lub2RlX2NyZWF0ZSk7CiAKIGludCBzZWN1cml0eV9pbm9kZV9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAogCQkJIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCkBAIC00NzUsNiArNDc2LDcgQEAKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2VjdXJpdHlfaW5vZGVfbWtkaXIpOwogCiBpbnQgc2VjdXJpdHlfaW5vZGVfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKaW5kZXggZDQ3ZjE2Yi4uM2JiZTAxYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKKysrIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbW50X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgogI2luY2x1ZGUgInJlYWxwYXRoLmgiCiAKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9wc3MuYyBiL3NvdW5kL29zcy9wc3MuYwppbmRleCAxNjUxN2E1Li44M2Y1ZWUyIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvcHNzLmMKKysrIGIvc291bmQvb3NzL3Bzcy5jCkBAIC00Niw3ICs0Niw3IEBACiAgKiAgICAgICAgICBsb2FkIHRoZSBkcml2ZXIgYXMgaXQgZGlkIGluIHByZXZpb3VzIHZlcnNpb25zLgogICogMDQtMDctMTk5OTogQW50aG9ueSBCYXJiYWNoYW4gPGJhcmJjb2RlQHhtZW4uY2lzLmZvcmRoYW0uZWR1PgogICogICAgICAgICAgQWRkZWQgbW9kdWxlIHBhcmFtZXRlciBwc3NfZmlybXdhcmUgdG8gYWxsb3cgdGhlIHVzZXIgdG8gdGVsbCAKLSAqICAgICAgICAgIHRoZSBkcml2ZXIgd2hlcmUgdGhlIGZpcmV3YXJlIGZpbGUgaXMgbG9jYXRlZC4gIFRoZSBkZWZhdWx0IAorICogICAgICAgICAgdGhlIGRyaXZlciB3aGVyZSB0aGUgZmlybXdhcmUgZmlsZSBpcyBsb2NhdGVkLiAgVGhlIGRlZmF1bHQgCiAgKiAgICAgICAgICBzZXR0aW5nIGlzIHRoZSBwcmV2aW91cyBoYXJkY29kZWQgc2V0dGluZyAiL2V0Yy9zb3VuZC9wc3Nfc3ludGgiLgogICogMDAtMDMtMDM6IENocmlzdG9waCBIZWxsd2lnIDxjaGhlbGx3aWdAaW5mcmFkZWFkLm9yZz4KICAqCSAgICBBZGFwdGVkIHRvIG1vZHVsZV9pbml0L21vZHVsZV9leGl0CmRpZmYgLS1naXQgYS9zb3VuZC9zaC9haWNhLmMgYi9zb3VuZC9zaC9haWNhLmMKaW5kZXggZjU1MTIzMy4uNTgzYTM2OSAxMDA2NDQKLS0tIGEvc291bmQvc2gvYWljYS5jCisrKyBiL3NvdW5kL3NoL2FpY2EuYwpAQCAtNTY1LDcgKzU2NSw3IEBACiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksICJhaWNhX2Zpcm13YXJlLmJpbiIsICZwZC0+ZGV2KTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKLQkvKiB3cml0ZSBmaXJ3YXJlIGludG8gbWVtb3J5ICovCisJLyogd3JpdGUgZmlybXdhcmUgaW50byBtZW1vcnkgKi8KIAlzcHVfZGlzYWJsZSgpOwogCXNwdV9tZW1sb2FkKDAsIGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSk7CiAJc3B1X2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL0tjb25maWcgYi9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZwppbmRleCAwYTJmOGY5Li44MTE1OTZmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vS2NvbmZpZwpAQCAtNDIsNyArNDIsNyBAQAogCSAgWW91IHdpbGwgYWxzbyBuZWVkIHRvIHNlbGVjdCB0aGUgYXVkaW8gaW50ZXJmYWNlcyB0byBzdXBwb3J0IGJlbG93LgogCiAJICBOb3RlOgotCSAgQUM5NyBjb2RlY3Mgd2hpY2ggZG8gbm90IGltcGxtZW50IHRoZSBzbG90LTE2IG1vZGUgd2lsbCBub3QgZnVuY3Rpb24KKwkgIEFDOTcgY29kZWNzIHdoaWNoIGRvIG5vdCBpbXBsZW1lbnQgdGhlIHNsb3QtMTYgbW9kZSB3aWxsIG5vdCBmdW5jdGlvbgogCSAgcHJvcGVybHkgd2l0aCB0aGlzIGRyaXZlci4gVGhpcyBkcml2ZXIgaXMga25vd24gdG8gd29yayB3aXRoIHRoZQogCSAgQW5hbG9nIERldmljZXMgbGluZSBvZiBBQzk3IGNvZGVjcy4KIApkaWZmIC0tZ2l0IGEvdXNyL0tjb25maWcgYi91c3IvS2NvbmZpZwppbmRleCA1ODhjNTg4Li4xYzMwMzlmIDEwMDY0NAotLS0gYS91c3IvS2NvbmZpZworKysgYi91c3IvS2NvbmZpZwpAQCAtNzIsMTAgKzcyLDggQEAKIAkgIFN1cHBvcnQgbG9hZGluZyBvZiBhIExaTUEgZW5jb2RlZCBpbml0aWFsIHJhbWRpc2sgb3IgY3BpbyBidWZmZXIKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWlmIElOSVRSQU1GU19TT1VSQ0UhPSIiCi0KIGNob2ljZQotCXByb21wdCAiQnVpbHQtaW4gaW5pdHJhbWZzIGNvbXByZXNzaW9uIG1vZGUiCisJcHJvbXB0ICJCdWlsdC1pbiBpbml0cmFtZnMgY29tcHJlc3Npb24gbW9kZSIgaWYgSU5JVFJBTUZTX1NPVVJDRSE9IiIKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBkZWNpZGVzIGJ5IHdoaWNoIGFsZ29yaXRobSB0aGUgYnVpbHRpbiBpbml0cmFtZnMKIAkgIHdpbGwgYmUgY29tcHJlc3NlZC4gIFNldmVyYWwgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBhcmUKQEAgLTEzNCwxNCArMTMyLDMgQEAKIAkgIHNtYWxsZXIgd2l0aCBMWk1BIGluIGNvbXBhcmlzb24gdG8gZ3ppcC4KIAogZW5kY2hvaWNlCi0KLWVuZGlmCi0KLWlmIElOSVRSQU1GU19TT1VSQ0U9IiIKLSMgVGhlIGJ1aWx0aW4gaW5pdHJhbWZzIGlzIHNvIHNtYWxsIHNvIHdlIGRvbid0IHdhbnQgdG8gYnVnIHRoZSB1c2VyLi4uCi0KLWNvbmZpZyBJTklUUkFNRlNfQ09NUFJFU1NJT05fTk9ORQotCWJvb2wKLQlkZWZhdWx0IHkKLQotZW5kaWYKZGlmZiAtLWdpdCBhL3Vzci9NYWtlZmlsZSBiL3Vzci9NYWtlZmlsZQppbmRleCBiODQ4OTRiLi4yNDUxNDVhIDEwMDY0NAotLS0gYS91c3IvTWFrZWZpbGUKKysrIGIvdXNyL01ha2VmaWxlCkBAIC02LDkgKzYsNiBAQAogUEhPTlkgKz0ga2xpYmNkaXJzCiAKIAotIyBObyBjb21wcmVzc2lvbgotc3VmZml4XyQoQ09ORklHX0lOSVRSQU1GU19DT01QUkVTU0lPTl9OT05FKSAgID0KLQogIyBHemlwLCBidXQgbm8gYnppcDIKIHN1ZmZpeF8kKENPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fR1pJUCkgICA9IC5negogCg==